Merge "Adding important people avatars to AoD"
diff --git a/Android.bp b/Android.bp
index 12bc906..68efd59 100644
--- a/Android.bp
+++ b/Android.bp
@@ -263,8 +263,6 @@
         ":libcamera_client_aidl",
         ":libcamera_client_framework_aidl",
         ":libupdate_engine_aidl",
-        // TODO: this needs to be removed when statsd-framework.jar is separated out
-        ":statsd_java_aidl",
         ":storaged_aidl",
         ":vold_aidl",
 
@@ -348,6 +346,7 @@
         "android.hardware.cas-V1.1-java",
         "android.hardware.cas-V1.2-java",
         "android.hardware.contexthub-V1.0-java",
+        "android.hardware.contexthub-V1.1-java",
         "android.hardware.gnss-V1.0-java",
         "android.hardware.gnss-V2.1-java",
         "android.hardware.health-V1.0-java-constants",
@@ -374,6 +373,7 @@
         "devicepolicyprotosnano",
 
         "com.android.sysprop.apex",
+        "com.android.sysprop.init",
         "PlatformProperties",
     ],
     sdk_version: "core_platform",
@@ -393,7 +393,7 @@
 
     exclude_srcs: [
         // See comment on framework-atb-backward-compatibility module below
-        "core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java",
+        "core/java/android/content/pm/AndroidTestBaseUpdater.java",
     ],
 
     sdk_version: "core_platform",
@@ -403,7 +403,6 @@
         "unsupportedappusage",
         "framework-media-stubs-systemapi",
         "framework-mediaprovider-stubs-systemapi",
-        "framework-tethering",
         "framework-telephony-stubs",
     ],
 
@@ -446,13 +445,6 @@
 }
 
 filegroup {
-    name: "graphicsstats_proto",
-    srcs: [
-        "libs/hwui/protos/graphicsstats.proto",
-    ],
-}
-
-filegroup {
     name: "libvibrator_aidl",
     srcs: [
         "core/java/android/os/IExternalVibrationController.aidl",
@@ -468,10 +460,11 @@
     libs: [
         "framework-appsearch-stubs",
         "framework-sdkextensions-stubs-systemapi",
-        "framework-statsd", // TODO(b/146167933): Use framework-statsd-stubs
+        "framework-statsd-stubs-module_libs_api",
         "framework-permission-stubs-systemapi",
         "framework-wifi-stubs",
         "ike-stubs",
+        "framework-tethering-stubs",
     ],
     installable: true,
     javac_shard_size: 150,
@@ -479,7 +472,6 @@
         "framework-platform-compat-config",
         "libcore-platform-compat-config",
         "services-platform-compat-config",
-        "media-provider-platform-compat-config",
     ],
     static_libs: [
         // If MimeMap ever becomes its own APEX, then this dependency would need to be removed
@@ -496,6 +488,7 @@
         "//frameworks/base/apex/blobstore/framework",
         "//frameworks/base/apex/jobscheduler/framework",
         "//frameworks/base/apex/statsd/service",
+        "//frameworks/base/packages/Tethering/tests/unit",
     ],
 }
 
@@ -519,12 +512,10 @@
         "framework-mediaprovider-stubs-systemapi",
         "framework-permission-stubs-systemapi",
         "framework-sdkextensions-stubs-systemapi",
-        // TODO(b/146167933): Use framework-statsd-stubs instead.
-        "framework-statsd",
+        "framework-statsd-stubs-module_libs_api",
         "framework-wifi-stubs",
         "ike-stubs",
-        // TODO(b/147200698): should be the stub of framework-tethering
-        "framework-tethering",
+        "framework-tethering-stubs",
         // TODO (b/147688669) should be framework-telephony-stubs
         "framework-telephony",
         // TODO(jiyong): add stubs for APEXes here
@@ -606,7 +597,7 @@
     installable: true,
     libs: ["app-compat-annotations"],
     srcs: [
-        "core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java",
+        "core/java/android/content/pm/AndroidTestBaseUpdater.java",
     ],
 }
 
@@ -625,6 +616,18 @@
     out: ["com/android/internal/util/FrameworkStatsLog.java"],
 }
 
+java_library {
+    name: "uieventloggerlib",
+    srcs: [
+        "core/java/com/android/internal/logging/UiEvent.java",
+        "core/java/com/android/internal/logging/UiEventLogger.java",
+        "core/java/com/android/internal/logging/UiEventLoggerImpl.java",
+        "core/java/com/android/internal/logging/InstanceId.java",
+        "core/java/com/android/internal/logging/InstanceIdSequence.java",
+        ":statslog-framework-java-gen",
+    ],
+}
+
 gensrcs {
     name: "framework-javastream-protos",
     depfile: true,
@@ -685,6 +688,7 @@
     srcs: [
         "core/java/android/annotation/CallbackExecutor.java",
         "core/java/android/annotation/CheckResult.java",
+        "core/java/android/annotation/CurrentTimeMillisLong.java",
         "core/java/android/annotation/IntDef.java",
         "core/java/android/annotation/IntRange.java",
         "core/java/android/annotation/NonNull.java",
@@ -758,17 +762,6 @@
     ],
 }
 
-filegroup {
-    name: "framework-tethering-annotations",
-    srcs: [
-        "core/java/android/annotation/NonNull.java",
-        "core/java/android/annotation/Nullable.java",
-        "core/java/android/annotation/RequiresPermission.java",
-        "core/java/android/annotation/SystemApi.java",
-        "core/java/android/annotation/TestApi.java",
-        "core/java/com/android/internal/annotations/GuardedBy.java",
-    ],
-}
 // Build ext.jar
 // ============================================================
 java_library {
@@ -1135,7 +1128,6 @@
     srcs: [
         ":framework-annotations",
         "core/java/android/annotation/BytesLong.java",
-        "core/java/android/annotation/CurrentTimeMillisLong.java",
         "core/java/android/annotation/CurrentTimeSecondsLong.java",
         "core/java/android/annotation/DurationMillisLong.java",
     ],
@@ -1335,7 +1327,6 @@
     libs: [
         "framework-minus-apex",
         "unsupportedappusage",
-        "ike-stubs",
     ],
     static_libs: [
         "libphonenumber-platform",
diff --git a/StubLibraries.bp b/StubLibraries.bp
index d4db737..4616ced 100644
--- a/StubLibraries.bp
+++ b/StubLibraries.bp
@@ -190,7 +190,6 @@
 droidstubs {
     name: "module-lib-api",
     defaults: ["metalava-api-stubs-default"],
-    libs: ["framework-all"],
     arg_files: ["core/res/AndroidManifest.xml"],
     args: metalava_framework_docs_args + module_libs,
     check_api: {
@@ -198,20 +197,17 @@
             api_file: "api/module-lib-current.txt",
             removed_api_file: "api/module-lib-removed.txt",
         },
-        // TODO(b/147559833) enable the compatibility check against the last release API
-        // and the API lint
-        //last_released: {
-        //    api_file: ":last-released-module-lib-api",
-        //    removed_api_file: "api/module-lib-removed.txt",
-        //    baseline_file: ":module-lib-api-incompatibilities-with-last-released"
-        //},
-        //api_lint: {
-        //    enabled: true,
-        //    new_since: ":last-released-module-lib-api",
-        //    baseline_file: "api/module-lib-lint-baseline.txt",
-        //},
+        last_released: {
+            api_file: ":last-released-module-lib-api",
+            removed_api_file: "api/module-lib-removed.txt",
+            baseline_file: ":module-lib-api-incompatibilities-with-last-released"
+        },
+        api_lint: {
+            enabled: true,
+            new_since: ":last-released-module-lib-api",
+            baseline_file: "api/module-lib-lint-baseline.txt",
+        },
     },
-    //jdiff_enabled: true,
 }
 
 
@@ -222,7 +218,6 @@
 droidstubs {
     name: "module-lib-api-stubs-docs",
     defaults: ["metalava-api-stubs-default"],
-    libs: ["framework-all"],
     arg_files: ["core/res/AndroidManifest.xml"],
     args: metalava_framework_docs_args + priv_apps + module_libs,
 }
@@ -234,6 +229,9 @@
 
 java_defaults {
     name: "framework-stubs-default",
+    libs: [ "stub-annotations" ],
+    static_libs: [ "private-stub-annotations-jar" ],
+    sdk_version: "core_current",
     errorprone: {
         javacflags: [
             "-XepDisableAllChecks",
@@ -249,61 +247,25 @@
 
 java_library_static {
     name: "android_stubs_current",
-    srcs: [
-        ":api-stubs-docs",
-    ],
-    libs: [
-        "stub-annotations",
-    ],
-    static_libs: [
-        "private-stub-annotations-jar",
-    ],
+    srcs: [ ":api-stubs-docs" ],
     defaults: ["framework-stubs-default"],
-    sdk_version: "core_current",
 }
 
 java_library_static {
     name: "android_system_stubs_current",
-    srcs: [
-        ":system-api-stubs-docs",
-    ],
-    libs: [
-        "stub-annotations",
-    ],
-    static_libs: [
-        "private-stub-annotations-jar",
-    ],
+    srcs: [ ":system-api-stubs-docs" ],
     defaults: ["framework-stubs-default"],
-    sdk_version: "core_current",
 }
 
 java_library_static {
     name: "android_test_stubs_current",
-    srcs: [
-        ":test-api-stubs-docs",
-    ],
-    libs: [
-        "stub-annotations",
-    ],
-    static_libs: [
-        "private-stub-annotations-jar",
-    ],
+    srcs: [ ":test-api-stubs-docs" ],
     defaults: ["framework-stubs-default"],
-    sdk_version: "core_current",
 }
 
 java_library_static {
     name: "android_module_lib_stubs_current",
-    srcs: [
-        ":module-lib-api-stubs-docs",
-    ],
-    libs: [
-        "stub-annotations",
-        "framework-all",
-    ],
-    static_libs: [
-        "private-stub-annotations-jar",
-    ],
+    srcs: [ ":module-lib-api-stubs-docs" ],
     defaults: ["framework-stubs-default"],
 }
 
diff --git a/apct-tests/perftests/blobstore/src/com/android/perftests/blob/BlobStorePerfTests.java b/apct-tests/perftests/blobstore/src/com/android/perftests/blob/BlobStorePerfTests.java
index a7b69c4..02df5e2 100644
--- a/apct-tests/perftests/blobstore/src/com/android/perftests/blob/BlobStorePerfTests.java
+++ b/apct-tests/perftests/blobstore/src/com/android/perftests/blob/BlobStorePerfTests.java
@@ -15,6 +15,7 @@
  */
 package com.android.perftests.blob;
 
+import android.app.blob.BlobHandle;
 import android.app.blob.BlobStoreManager;
 import android.content.Context;
 import android.perftests.utils.ManualBenchmarkState;
@@ -38,6 +39,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Base64;
 import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
@@ -102,7 +104,8 @@
 
                 durations.clear();
                 collectDigestDurationsFromTrace(parser, durations);
-                // get and delete blobId
+
+                deleteBlob(blobData.getBlobHandle());
             }
         } finally {
             mAtraceUtils.stopTrace();
@@ -135,6 +138,16 @@
         }
     }
 
+    private void deleteBlob(BlobHandle blobHandle) throws Exception {
+        runShellCommand(String.format(
+                "cmd blob_store delete-blob --algo %s --digest %s --label %s --expiry %d --tag %s",
+                blobHandle.algorithm,
+                Base64.getEncoder().encode(blobHandle.digest),
+                blobHandle.label,
+                blobHandle.expiryTimeMillis,
+                blobHandle.tag));
+    }
+
     private String runShellCommand(String cmd) {
         try {
             return UiDevice.getInstance(
diff --git a/apct-tests/perftests/core/src/android/os/PackageManagerPerfTest.java b/apct-tests/perftests/core/src/android/os/PackageManagerPerfTest.java
deleted file mode 100644
index 236f548..0000000
--- a/apct-tests/perftests/core/src/android/os/PackageManagerPerfTest.java
+++ /dev/null
@@ -1,111 +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 android.os;
-
-import android.content.ComponentName;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.perftests.utils.BenchmarkState;
-import android.perftests.utils.PerfStatusReporter;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.filters.LargeTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(AndroidJUnit4.class)
-@LargeTest
-public class PackageManagerPerfTest {
-    private static final String PERMISSION_NAME_EXISTS =
-            "com.android.perftests.core.TestPermission";
-    private static final String PERMISSION_NAME_DOESNT_EXIST =
-            "com.android.perftests.core.TestBadPermission";
-    private static final ComponentName TEST_ACTIVITY =
-            new ComponentName("com.android.perftests.core",
-                    "android.perftests.utils.PerfTestActivity");
-
-    @Rule
-    public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
-
-    @Test
-    public void testCheckPermissionExists() {
-        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
-        final PackageManager pm = InstrumentationRegistry.getTargetContext().getPackageManager();
-        final String packageName = TEST_ACTIVITY.getPackageName();
-
-        while (state.keepRunning()) {
-            int ret = pm.checkPermission(PERMISSION_NAME_EXISTS, packageName);
-        }
-    }
-
-    @Test
-    public void testCheckPermissionDoesntExist() {
-        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
-        final PackageManager pm = InstrumentationRegistry.getTargetContext().getPackageManager();
-        final String packageName = TEST_ACTIVITY.getPackageName();
-
-        while (state.keepRunning()) {
-            int ret = pm.checkPermission(PERMISSION_NAME_DOESNT_EXIST, packageName);
-        }
-    }
-
-    @Test
-    public void testQueryIntentActivities() {
-        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
-        final PackageManager pm = InstrumentationRegistry.getTargetContext().getPackageManager();
-        final Intent intent = new Intent("com.android.perftests.core.PERFTEST");
-
-        while (state.keepRunning()) {
-            pm.queryIntentActivities(intent, 0);
-        }
-    }
-
-    @Test
-    public void testGetPackageInfo() throws Exception {
-        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
-        final PackageManager pm = InstrumentationRegistry.getTargetContext().getPackageManager();
-        final String packageName = TEST_ACTIVITY.getPackageName();
-
-        while (state.keepRunning()) {
-            pm.getPackageInfo(packageName, 0);
-        }
-    }
-
-    @Test
-    public void testGetApplicationInfo() throws Exception {
-        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
-        final PackageManager pm = InstrumentationRegistry.getTargetContext().getPackageManager();
-        final String packageName = TEST_ACTIVITY.getPackageName();
-        
-        while (state.keepRunning()) {
-            pm.getApplicationInfo(packageName, 0);
-        }
-    }
-
-    @Test
-    public void testGetActivityInfo() throws Exception {
-        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
-        final PackageManager pm = InstrumentationRegistry.getTargetContext().getPackageManager();
-        
-        while (state.keepRunning()) {
-            pm.getActivityInfo(TEST_ACTIVITY, 0);
-        }
-    }
-}
diff --git a/apct-tests/perftests/core/src/android/view/CutoutSpecificationBenchmark.java b/apct-tests/perftests/core/src/android/view/CutoutSpecificationBenchmark.java
new file mode 100644
index 0000000..14282bf
--- /dev/null
+++ b/apct-tests/perftests/core/src/android/view/CutoutSpecificationBenchmark.java
@@ -0,0 +1,240 @@
+/*
+ * 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;
+
+import android.content.Context;
+import android.graphics.Matrix;
+import android.graphics.Path;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.graphics.Region;
+import android.perftests.utils.BenchmarkState;
+import android.perftests.utils.PerfStatusReporter;
+import android.text.TextUtils;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.util.PathParser;
+
+import androidx.test.filters.LargeTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@LargeTest
+public class CutoutSpecificationBenchmark {
+    private static final String TAG = "CutoutSpecificationBenchmark";
+
+    private static final String BOTTOM_MARKER = "@bottom";
+    private static final String DP_MARKER = "@dp";
+    private static final String RIGHT_MARKER = "@right";
+    private static final String LEFT_MARKER = "@left";
+
+    private static final String DOUBLE_CUTOUT_SPEC = "M 0,0\n"
+            + "L -72, 0\n"
+            + "L -69.9940446283, 20.0595537175\n"
+            + "C -69.1582133885, 28.4178661152 -65.2, 32.0 -56.8, 32.0\n"
+            + "L 56.8, 32.0\n"
+            + "C 65.2, 32.0 69.1582133885, 28.4178661152 69.9940446283, 20.0595537175\n"
+            + "L 72, 0\n"
+            + "Z\n"
+            + "@bottom\n"
+            + "M 0,0\n"
+            + "L -72, 0\n"
+            + "L -69.9940446283, -20.0595537175\n"
+            + "C -69.1582133885, -28.4178661152 -65.2, -32.0 -56.8, -32.0\n"
+            + "L 56.8, -32.0\n"
+            + "C 65.2, -32.0 69.1582133885, -28.4178661152 69.9940446283, -20.0595537175\n"
+            + "L 72, 0\n"
+            + "Z\n"
+            + "@dp";
+    @Rule
+    public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
+
+    private Context mContext;
+    private DisplayMetrics mDisplayMetrics;
+
+    /**
+     * Setup the necessary member field used by test methods.
+     */
+    @Before
+    public void setUp() {
+        mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+
+        mDisplayMetrics = new DisplayMetrics();
+        mContext.getDisplay().getRealMetrics(mDisplayMetrics);
+    }
+
+
+    private static void toRectAndAddToRegion(Path p, Region inoutRegion, Rect inoutRect) {
+        final RectF rectF = new RectF();
+        p.computeBounds(rectF, false /* unused */);
+        rectF.round(inoutRect);
+        inoutRegion.op(inoutRect, Region.Op.UNION);
+    }
+
+    private static void oldMethodParsingSpec(String spec, int displayWidth, int displayHeight,
+            float density) {
+        Path p = null;
+        Rect boundTop = null;
+        Rect boundBottom = null;
+        Rect safeInset = new Rect();
+        String bottomSpec = null;
+        if (!TextUtils.isEmpty(spec)) {
+            spec = spec.trim();
+            final float offsetX;
+            if (spec.endsWith(RIGHT_MARKER)) {
+                offsetX = displayWidth;
+                spec = spec.substring(0, spec.length() - RIGHT_MARKER.length()).trim();
+            } else if (spec.endsWith(LEFT_MARKER)) {
+                offsetX = 0;
+                spec = spec.substring(0, spec.length() - LEFT_MARKER.length()).trim();
+            } else {
+                offsetX = displayWidth / 2f;
+            }
+            final boolean inDp = spec.endsWith(DP_MARKER);
+            if (inDp) {
+                spec = spec.substring(0, spec.length() - DP_MARKER.length());
+            }
+
+            if (spec.contains(BOTTOM_MARKER)) {
+                String[] splits = spec.split(BOTTOM_MARKER, 2);
+                spec = splits[0].trim();
+                bottomSpec = splits[1].trim();
+            }
+
+            final Matrix m = new Matrix();
+            final Region r = Region.obtain();
+            if (!spec.isEmpty()) {
+                try {
+                    p = PathParser.createPathFromPathData(spec);
+                } catch (Throwable e) {
+                    Log.wtf(TAG, "Could not inflate cutout: ", e);
+                }
+
+                if (p != null) {
+                    if (inDp) {
+                        m.postScale(density, density);
+                    }
+                    m.postTranslate(offsetX, 0);
+                    p.transform(m);
+
+                    boundTop = new Rect();
+                    toRectAndAddToRegion(p, r, boundTop);
+                    safeInset.top = boundTop.bottom;
+                }
+            }
+
+            if (bottomSpec != null) {
+                int bottomInset = 0;
+                Path bottomPath = null;
+                try {
+                    bottomPath = PathParser.createPathFromPathData(bottomSpec);
+                } catch (Throwable e) {
+                    Log.wtf(TAG, "Could not inflate bottom cutout: ", e);
+                }
+
+                if (bottomPath != null) {
+                    // Keep top transform
+                    m.postTranslate(0, displayHeight);
+                    bottomPath.transform(m);
+                    p.addPath(bottomPath);
+                    boundBottom = new Rect();
+                    toRectAndAddToRegion(bottomPath, r, boundBottom);
+                    bottomInset = displayHeight - boundBottom.top;
+                }
+                safeInset.bottom = bottomInset;
+            }
+        }
+    }
+
+    @Test
+    public void parseByOldMethodForDoubleCutout() {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            oldMethodParsingSpec(DOUBLE_CUTOUT_SPEC, mDisplayMetrics.widthPixels,
+                    mDisplayMetrics.heightPixels, mDisplayMetrics.density);
+        }
+    }
+
+    @Test
+    public void parseByNewMethodForDoubleCutout() {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            new CutoutSpecification.Parser(mDisplayMetrics.density,
+                    mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels)
+                    .parse(DOUBLE_CUTOUT_SPEC);
+        }
+    }
+
+    @Test
+    public void parseLongEdgeCutout() {
+        final String spec = "M 0,0\n"
+                + "H 48\n"
+                + "V 48\n"
+                + "H -48\n"
+                + "Z\n"
+                + "@left\n"
+                + "@center_vertical\n"
+                + "M 0,0\n"
+                + "H 48\n"
+                + "V 48\n"
+                + "H -48\n"
+                + "Z\n"
+                + "@left\n"
+                + "@center_vertical\n"
+                + "M 0,0\n"
+                + "H -48\n"
+                + "V 48\n"
+                + "H 48\n"
+                + "Z\n"
+                + "@right\n"
+                + "@dp";
+
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            new CutoutSpecification.Parser(mDisplayMetrics.density,
+                    mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels).parse(spec);
+        }
+    }
+
+    @Test
+    public void parseShortEdgeCutout() {
+        final String spec = "M 0,0\n"
+                + "H 48\n"
+                + "V 48\n"
+                + "H -48\n"
+                + "Z\n"
+                + "@bottom\n"
+                + "M 0,0\n"
+                + "H 48\n"
+                + "V -48\n"
+                + "H -48\n"
+                + "Z\n"
+                + "@dp";
+
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            new CutoutSpecification.Parser(mDisplayMetrics.density,
+                    mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels).parse(spec);
+        }
+    }
+}
diff --git a/apct-tests/perftests/core/src/android/wm/RelayoutPerfTest.java b/apct-tests/perftests/core/src/android/wm/RelayoutPerfTest.java
index b6e39e1..8633c96 100644
--- a/apct-tests/perftests/core/src/android/wm/RelayoutPerfTest.java
+++ b/apct-tests/perftests/core/src/android/wm/RelayoutPerfTest.java
@@ -125,7 +125,9 @@
         final WindowManager.LayoutParams mParams;
         final int mWidth;
         final int mHeight;
+        final Point mOutSurfaceSize = new Point();
         final SurfaceControl mOutSurfaceControl;
+        final SurfaceControl mOutBlastSurfaceControl = new SurfaceControl();
 
         final IntSupplier mViewVisibility;
 
@@ -150,7 +152,8 @@
                         mViewVisibility.getAsInt(), mFlags, mFrameNumber, mOutFrame,
                         mOutContentInsets, mOutVisibleInsets, mOutStableInsets,
                         mOutBackDropFrame, mOutDisplayCutout, mOutMergedConfiguration,
-                        mOutSurfaceControl, mOutInsetsState, new Point(), new SurfaceControl());
+                        mOutSurfaceControl, mOutInsetsState, mOutSurfaceSize,
+                        mOutBlastSurfaceControl);
             }
         }
     }
diff --git a/apct-tests/perftests/core/src/android/wm/WindowManagerPerfTestBase.java b/apct-tests/perftests/core/src/android/wm/WindowManagerPerfTestBase.java
index 62e9ba8..9e17e94 100644
--- a/apct-tests/perftests/core/src/android/wm/WindowManagerPerfTestBase.java
+++ b/apct-tests/perftests/core/src/android/wm/WindowManagerPerfTestBase.java
@@ -20,15 +20,19 @@
 
 import android.app.Activity;
 import android.app.UiAutomation;
+import android.content.Context;
 import android.content.Intent;
+import android.os.BatteryManager;
 import android.os.ParcelFileDescriptor;
 import android.perftests.utils.PerfTestActivity;
+import android.provider.Settings;
 
 import androidx.test.rule.ActivityTestRule;
 import androidx.test.runner.lifecycle.ActivityLifecycleCallback;
 import androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry;
 import androidx.test.runner.lifecycle.Stage;
 
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
@@ -52,18 +56,36 @@
      */
     static final File BASE_OUT_PATH = new File("/data/local/CorePerfTests");
 
+    private static int sOriginalStayOnWhilePluggedIn;
+
     @BeforeClass
     public static void setUpOnce() {
+        final Context context = getInstrumentation().getContext();
+        sOriginalStayOnWhilePluggedIn = Settings.Global.getInt(context.getContentResolver(),
+                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
+        // Keep the device awake during testing.
+        setStayOnWhilePluggedIn(BatteryManager.BATTERY_PLUGGED_USB);
+
         if (!BASE_OUT_PATH.exists()) {
             executeShellCommand("mkdir -p " + BASE_OUT_PATH);
         }
         // In order to be closer to the real use case.
         executeShellCommand("input keyevent KEYCODE_WAKEUP");
         executeShellCommand("wm dismiss-keyguard");
-        getInstrumentation().getContext().startActivity(new Intent(Intent.ACTION_MAIN)
+        context.startActivity(new Intent(Intent.ACTION_MAIN)
                 .addCategory(Intent.CATEGORY_HOME).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
     }
 
+    @AfterClass
+    public static void tearDownOnce() {
+        setStayOnWhilePluggedIn(sOriginalStayOnWhilePluggedIn);
+    }
+
+    private static void setStayOnWhilePluggedIn(int value) {
+        executeShellCommand(String.format("settings put global %s %d",
+                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, value));
+    }
+
     /**
      * Executes shell command with reading the output. It may also used to block until the current
      * command is completed.
@@ -97,7 +119,7 @@
      */
     static class PerfTestActivityRule extends ActivityTestRule<PerfTestActivity> {
         private final Intent mStartIntent =
-                new Intent().putExtra(PerfTestActivity.INTENT_EXTRA_KEEP_SCREEN_ON, true);
+                new Intent(getInstrumentation().getTargetContext(), PerfTestActivity.class);
         private final LifecycleListener mLifecycleListener = new LifecycleListener();
 
         PerfTestActivityRule() {
diff --git a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
index 661f32f..c458d11 100644
--- a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
+++ b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
@@ -670,7 +670,7 @@
     private void startApp(int userId, String packageName) throws RemoteException {
         final Context context = InstrumentationRegistry.getContext();
         final WaitResult result = ActivityTaskManager.getService().startActivityAndWait(null,
-                context.getPackageName(),
+                context.getPackageName(), context.getFeatureId(),
                 context.getPackageManager().getLaunchIntentForPackage(packageName), null, null,
                 null, 0, 0, null, null, userId);
         attestTrue("User " + userId + " failed to start " + packageName,
diff --git a/apct-tests/perftests/packagemanager/Android.bp b/apct-tests/perftests/packagemanager/Android.bp
new file mode 100644
index 0000000..17033e0
--- /dev/null
+++ b/apct-tests/perftests/packagemanager/Android.bp
@@ -0,0 +1,21 @@
+android_test {
+    name: "PackageManagerPerfTests",
+
+    srcs: ["src/**/*.java"],
+
+    static_libs: [
+        "platform-compat-test-rules",
+        "androidx.appcompat_appcompat",
+        "androidx.test.rules",
+        "androidx.test.ext.junit",
+        "androidx.annotation_annotation",
+        "apct-perftests-utils",
+    ],
+
+    libs: ["android.test.base"],
+
+    platform_apis: true,
+
+    test_suites: ["device-tests"],
+
+}
diff --git a/apct-tests/perftests/packagemanager/AndroidManifest.xml b/apct-tests/perftests/packagemanager/AndroidManifest.xml
new file mode 100644
index 0000000..520f4b5
--- /dev/null
+++ b/apct-tests/perftests/packagemanager/AndroidManifest.xml
@@ -0,0 +1,89 @@
+<?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.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.perftests.packagemanager">
+
+    <permission android:name="com.android.perftests.packagemanager.TestPermission" />
+    <uses-permission android:name="com.android.perftests.packagemanager.TestPermission" />
+
+    <queries>
+        <package android:name="com.android.perftests.appenumeration0" />
+        <package android:name="com.android.perftests.appenumeration1" />
+        <package android:name="com.android.perftests.appenumeration2" />
+        <package android:name="com.android.perftests.appenumeration3" />
+        <package android:name="com.android.perftests.appenumeration4" />
+        <package android:name="com.android.perftests.appenumeration5" />
+        <package android:name="com.android.perftests.appenumeration6" />
+        <package android:name="com.android.perftests.appenumeration7" />
+        <package android:name="com.android.perftests.appenumeration8" />
+        <package android:name="com.android.perftests.appenumeration9" />
+        <package android:name="com.android.perftests.appenumeration10" />
+        <package android:name="com.android.perftests.appenumeration11" />
+        <package android:name="com.android.perftests.appenumeration12" />
+        <package android:name="com.android.perftests.appenumeration13" />
+        <package android:name="com.android.perftests.appenumeration14" />
+        <package android:name="com.android.perftests.appenumeration15" />
+        <package android:name="com.android.perftests.appenumeration16" />
+        <package android:name="com.android.perftests.appenumeration17" />
+        <package android:name="com.android.perftests.appenumeration18" />
+        <package android:name="com.android.perftests.appenumeration19" />
+        <package android:name="com.android.perftests.appenumeration20" />
+        <package android:name="com.android.perftests.appenumeration21" />
+        <package android:name="com.android.perftests.appenumeration22" />
+        <package android:name="com.android.perftests.appenumeration23" />
+        <package android:name="com.android.perftests.appenumeration24" />
+        <package android:name="com.android.perftests.appenumeration25" />
+        <package android:name="com.android.perftests.appenumeration26" />
+        <package android:name="com.android.perftests.appenumeration27" />
+        <package android:name="com.android.perftests.appenumeration28" />
+        <package android:name="com.android.perftests.appenumeration29" />
+        <package android:name="com.android.perftests.appenumeration30" />
+        <package android:name="com.android.perftests.appenumeration31" />
+        <package android:name="com.android.perftests.appenumeration32" />
+        <package android:name="com.android.perftests.appenumeration33" />
+        <package android:name="com.android.perftests.appenumeration34" />
+        <package android:name="com.android.perftests.appenumeration35" />
+        <package android:name="com.android.perftests.appenumeration36" />
+        <package android:name="com.android.perftests.appenumeration37" />
+        <package android:name="com.android.perftests.appenumeration38" />
+        <package android:name="com.android.perftests.appenumeration39" />
+        <package android:name="com.android.perftests.appenumeration40" />
+        <package android:name="com.android.perftests.appenumeration41" />
+        <package android:name="com.android.perftests.appenumeration42" />
+        <package android:name="com.android.perftests.appenumeration43" />
+        <package android:name="com.android.perftests.appenumeration44" />
+        <package android:name="com.android.perftests.appenumeration45" />
+        <package android:name="com.android.perftests.appenumeration46" />
+        <package android:name="com.android.perftests.appenumeration47" />
+        <package android:name="com.android.perftests.appenumeration48" />
+        <package android:name="com.android.perftests.appenumeration49" />
+    </queries>
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+        <activity android:name="android.perftests.utils.PerfTestActivity">
+          <intent-filter>
+            <action android:name="com.android.perftests.packagemanager.PERFTEST" />
+          </intent-filter>
+        </activity>
+    </application>
+
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+        android:targetPackage="com.android.perftests.packagemanager"/>
+
+</manifest>
diff --git a/apct-tests/perftests/packagemanager/AndroidTest.xml b/apct-tests/perftests/packagemanager/AndroidTest.xml
new file mode 100644
index 0000000..c112d87
--- /dev/null
+++ b/apct-tests/perftests/packagemanager/AndroidTest.xml
@@ -0,0 +1,88 @@
+<?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.
+  -->
+<configuration description="Runs PackageManagerPerfTests metric instrumentation.">
+    <option name="test-suite-tag" value="apct" />
+    <option name="test-suite-tag" value="apct-metric-instrumentation" />
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="PackageManagerPerfTests.apk" />
+    </target_preparer>
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="force-queryable" value="false" />
+        <option name="test-file-name" value="QueriesAll0.apk" />
+        <option name="test-file-name" value="QueriesAll1.apk" />
+        <option name="test-file-name" value="QueriesAll2.apk" />
+        <option name="test-file-name" value="QueriesAll3.apk" />
+        <option name="test-file-name" value="QueriesAll4.apk" />
+        <option name="test-file-name" value="QueriesAll5.apk" />
+        <option name="test-file-name" value="QueriesAll6.apk" />
+        <option name="test-file-name" value="QueriesAll7.apk" />
+        <option name="test-file-name" value="QueriesAll8.apk" />
+        <option name="test-file-name" value="QueriesAll9.apk" />
+        <option name="test-file-name" value="QueriesAll10.apk" />
+        <option name="test-file-name" value="QueriesAll11.apk" />
+        <option name="test-file-name" value="QueriesAll12.apk" />
+        <option name="test-file-name" value="QueriesAll13.apk" />
+        <option name="test-file-name" value="QueriesAll14.apk" />
+        <option name="test-file-name" value="QueriesAll15.apk" />
+        <option name="test-file-name" value="QueriesAll16.apk" />
+        <option name="test-file-name" value="QueriesAll17.apk" />
+        <option name="test-file-name" value="QueriesAll18.apk" />
+        <option name="test-file-name" value="QueriesAll19.apk" />
+        <option name="test-file-name" value="QueriesAll20.apk" />
+        <option name="test-file-name" value="QueriesAll21.apk" />
+        <option name="test-file-name" value="QueriesAll22.apk" />
+        <option name="test-file-name" value="QueriesAll23.apk" />
+        <option name="test-file-name" value="QueriesAll24.apk" />
+        <option name="test-file-name" value="QueriesAll25.apk" />
+        <option name="test-file-name" value="QueriesAll26.apk" />
+        <option name="test-file-name" value="QueriesAll27.apk" />
+        <option name="test-file-name" value="QueriesAll28.apk" />
+        <option name="test-file-name" value="QueriesAll29.apk" />
+        <option name="test-file-name" value="QueriesAll30.apk" />
+        <option name="test-file-name" value="QueriesAll31.apk" />
+        <option name="test-file-name" value="QueriesAll32.apk" />
+        <option name="test-file-name" value="QueriesAll33.apk" />
+        <option name="test-file-name" value="QueriesAll34.apk" />
+        <option name="test-file-name" value="QueriesAll35.apk" />
+        <option name="test-file-name" value="QueriesAll36.apk" />
+        <option name="test-file-name" value="QueriesAll37.apk" />
+        <option name="test-file-name" value="QueriesAll38.apk" />
+        <option name="test-file-name" value="QueriesAll39.apk" />
+        <option name="test-file-name" value="QueriesAll40.apk" />
+        <option name="test-file-name" value="QueriesAll41.apk" />
+        <option name="test-file-name" value="QueriesAll42.apk" />
+        <option name="test-file-name" value="QueriesAll43.apk" />
+        <option name="test-file-name" value="QueriesAll44.apk" />
+        <option name="test-file-name" value="QueriesAll45.apk" />
+        <option name="test-file-name" value="QueriesAll46.apk" />
+        <option name="test-file-name" value="QueriesAll47.apk" />
+        <option name="test-file-name" value="QueriesAll48.apk" />
+        <option name="test-file-name" value="QueriesAll49.apk" />
+    </target_preparer>
+
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="com.android.perftests.packagemanager" />
+        <option name="hidden-api-checks" value="false"/>
+    </test>
+
+    <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
+        <option name="directory-keys" value="/data/local/PackageManagerPerfTests" />
+        <option name="collect-on-run-ended-only" value="true" />
+    </metrics_collector>
+</configuration>
diff --git a/apct-tests/perftests/packagemanager/apps/query-all/Android.bp b/apct-tests/perftests/packagemanager/apps/query-all/Android.bp
new file mode 100644
index 0000000..3cb1589
--- /dev/null
+++ b/apct-tests/perftests/packagemanager/apps/query-all/Android.bp
@@ -0,0 +1,314 @@
+// 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.
+
+android_test_helper_app {
+    name: "QueriesAll0",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration0",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll1",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration1",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll2",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration2",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll3",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration3",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll4",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration4",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll5",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration5",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll6",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration6",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll7",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration7",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll8",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration8",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll9",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration9",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll10",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration10",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll11",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration11",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll12",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration12",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll13",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration13",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll14",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration14",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll15",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration15",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll16",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration16",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll17",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration17",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll18",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration18",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll19",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration19",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll20",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration20",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll21",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration21",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll22",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration22",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll23",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration23",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll24",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration24",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll25",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration25",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll26",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration26",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll27",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration27",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll28",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration28",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll29",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration29",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll30",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration30",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll31",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration31",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll32",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration32",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll33",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration33",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll34",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration34",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll35",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration35",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll36",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration36",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll37",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration37",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll38",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration38",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll39",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration39",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll40",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration40",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll41",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration41",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll42",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration42",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll43",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration43",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll44",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration44",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll45",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration45",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll46",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration46",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll47",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration47",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll48",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration48",
+    ]
+}
+android_test_helper_app {
+    name: "QueriesAll49",
+    aaptflags: [
+        "--rename-manifest-package com.android.perftests.appenumeration49",
+    ]
+}
diff --git a/apct-tests/perftests/packagemanager/apps/query-all/AndroidManifest.xml b/apct-tests/perftests/packagemanager/apps/query-all/AndroidManifest.xml
new file mode 100644
index 0000000..e2cfa04
--- /dev/null
+++ b/apct-tests/perftests/packagemanager/apps/query-all/AndroidManifest.xml
@@ -0,0 +1,81 @@
+<?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.
+  -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.perftests.appenumeration">
+
+    <application android:hasCode="false" >
+        <activity android:name="android.perftests.utils.PerfTestActivity">
+            <intent-filter>
+                <action android:name="com.android.perftests.packagemanager.PERFTEST" />
+            </intent-filter>
+        </activity>
+    </application>
+
+    <queries>
+        <package android:name="com.android.perftests.appenumeration0" />
+        <package android:name="com.android.perftests.appenumeration1" />
+        <package android:name="com.android.perftests.appenumeration2" />
+        <package android:name="com.android.perftests.appenumeration3" />
+        <package android:name="com.android.perftests.appenumeration4" />
+        <package android:name="com.android.perftests.appenumeration5" />
+        <package android:name="com.android.perftests.appenumeration6" />
+        <package android:name="com.android.perftests.appenumeration7" />
+        <package android:name="com.android.perftests.appenumeration8" />
+        <package android:name="com.android.perftests.appenumeration9" />
+        <package android:name="com.android.perftests.appenumeration10" />
+        <package android:name="com.android.perftests.appenumeration11" />
+        <package android:name="com.android.perftests.appenumeration12" />
+        <package android:name="com.android.perftests.appenumeration13" />
+        <package android:name="com.android.perftests.appenumeration14" />
+        <package android:name="com.android.perftests.appenumeration15" />
+        <package android:name="com.android.perftests.appenumeration16" />
+        <package android:name="com.android.perftests.appenumeration17" />
+        <package android:name="com.android.perftests.appenumeration18" />
+        <package android:name="com.android.perftests.appenumeration19" />
+        <package android:name="com.android.perftests.appenumeration20" />
+        <package android:name="com.android.perftests.appenumeration21" />
+        <package android:name="com.android.perftests.appenumeration22" />
+        <package android:name="com.android.perftests.appenumeration23" />
+        <package android:name="com.android.perftests.appenumeration24" />
+        <package android:name="com.android.perftests.appenumeration25" />
+        <package android:name="com.android.perftests.appenumeration26" />
+        <package android:name="com.android.perftests.appenumeration27" />
+        <package android:name="com.android.perftests.appenumeration28" />
+        <package android:name="com.android.perftests.appenumeration29" />
+        <package android:name="com.android.perftests.appenumeration30" />
+        <package android:name="com.android.perftests.appenumeration31" />
+        <package android:name="com.android.perftests.appenumeration32" />
+        <package android:name="com.android.perftests.appenumeration33" />
+        <package android:name="com.android.perftests.appenumeration34" />
+        <package android:name="com.android.perftests.appenumeration35" />
+        <package android:name="com.android.perftests.appenumeration36" />
+        <package android:name="com.android.perftests.appenumeration37" />
+        <package android:name="com.android.perftests.appenumeration38" />
+        <package android:name="com.android.perftests.appenumeration39" />
+        <package android:name="com.android.perftests.appenumeration40" />
+        <package android:name="com.android.perftests.appenumeration41" />
+        <package android:name="com.android.perftests.appenumeration42" />
+        <package android:name="com.android.perftests.appenumeration43" />
+        <package android:name="com.android.perftests.appenumeration44" />
+        <package android:name="com.android.perftests.appenumeration45" />
+        <package android:name="com.android.perftests.appenumeration46" />
+        <package android:name="com.android.perftests.appenumeration47" />
+        <package android:name="com.android.perftests.appenumeration48" />
+        <package android:name="com.android.perftests.appenumeration49" />
+    </queries>
+
+</manifest>
\ No newline at end of file
diff --git a/apct-tests/perftests/packagemanager/src/android/os/PackageManagerPerfTest.java b/apct-tests/perftests/packagemanager/src/android/os/PackageManagerPerfTest.java
new file mode 100644
index 0000000..d7428cf
--- /dev/null
+++ b/apct-tests/perftests/packagemanager/src/android/os/PackageManagerPerfTest.java
@@ -0,0 +1,189 @@
+/*
+ * 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 libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
+import static libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
+
+import android.compat.testing.PlatformCompatChangeRule;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.perftests.utils.BenchmarkState;
+import android.perftests.utils.PerfStatusReporter;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.LargeTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@LargeTest
+public class PackageManagerPerfTest {
+    private static final String PERMISSION_NAME_EXISTS =
+            "com.android.perftests.packagemanager.TestPermission";
+    private static final String PERMISSION_NAME_DOESNT_EXIST =
+            "com.android.perftests.packagemanager.TestBadPermission";
+    private static final String OTHER_PACKAGE_NAME = "com.android.perftests.appenumeration0";
+    private static final ComponentName TEST_ACTIVITY =
+            new ComponentName(OTHER_PACKAGE_NAME,
+                    "android.perftests.utils.PerfTestActivity");
+
+    @Rule
+    public final PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
+
+    @Rule
+    public final PlatformCompatChangeRule mPlatformCompatChangeRule =
+            new PlatformCompatChangeRule();
+
+    public PackageManagerPerfTest() throws PackageManager.NameNotFoundException {
+        final Context context = InstrumentationRegistry.getInstrumentation().getContext();
+    }
+
+    @Test
+    @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testCheckPermissionExists() {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        final PackageManager pm =
+                InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager();
+        final String packageName = TEST_ACTIVITY.getPackageName();
+
+        while (state.keepRunning()) {
+            int ret = pm.checkPermission(PERMISSION_NAME_EXISTS, packageName);
+        }
+    }
+
+    @Test
+    @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testCheckPermissionExistsWithFiltering() {
+        testCheckPermissionExists();
+    }
+
+    @Test
+    @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testCheckPermissionDoesntExist() {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        final PackageManager pm =
+                InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager();
+        final String packageName = TEST_ACTIVITY.getPackageName();
+
+        while (state.keepRunning()) {
+            int ret = pm.checkPermission(PERMISSION_NAME_DOESNT_EXIST, packageName);
+        }
+    }
+
+    @Test
+    @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testCheckPermissionDoesntExistWithFiltering() {
+        testCheckPermissionDoesntExist();
+    }
+
+    @Test
+    @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testQueryIntentActivities() {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        final PackageManager pm =
+                InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager();
+        final Intent intent = new Intent("com.android.perftests.core.PERFTEST");
+
+        while (state.keepRunning()) {
+            pm.queryIntentActivities(intent, 0);
+        }
+    }
+
+    @Test
+    @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testQueryIntentActivitiesWithFiltering() {
+        testQueryIntentActivities();
+    }
+
+    @Test
+    @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testGetPackageInfo() throws Exception {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        final PackageManager pm =
+                InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager();
+
+        while (state.keepRunning()) {
+            pm.getPackageInfo(OTHER_PACKAGE_NAME, 0);
+        }
+    }
+
+    @Test
+    @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testGetPackageInfoWithFiltering() throws Exception {
+        testGetPackageInfo();
+    }
+
+    @Test
+    @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testGetApplicationInfo() throws Exception {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        final PackageManager pm =
+                InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager();
+
+        while (state.keepRunning()) {
+            pm.getApplicationInfo(OTHER_PACKAGE_NAME, 0);
+        }
+    }
+
+    @Test
+    @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testGetApplicationInfoWithFiltering() throws Exception {
+        testGetApplicationInfo();
+    }
+
+    @Test
+    @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testGetActivityInfo() throws Exception {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        final PackageManager pm =
+                InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager();
+
+        while (state.keepRunning()) {
+            pm.getActivityInfo(TEST_ACTIVITY, 0);
+        }
+    }
+
+    @Test
+    @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testGetActivityInfoWithFiltering() throws Exception {
+        testGetActivityInfo();
+    }
+
+    @Test
+    @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testGetInstalledPackages() throws Exception {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        final PackageManager pm =
+                InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager();
+
+        while (state.keepRunning()) {
+            pm.getInstalledPackages(0);
+        }
+    }
+
+    @Test
+    @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY)
+    public void testGetInstalledPackagesWithFiltering() throws Exception {
+        testGetInstalledPackages();
+    }
+}
diff --git a/apct-tests/perftests/textclassifier/src/android/view/textclassifier/TextClassificationManagerPerfTest.java b/apct-tests/perftests/textclassifier/src/android/view/textclassifier/TextClassificationManagerPerfTest.java
index bd3b673..f61ea85 100644
--- a/apct-tests/perftests/textclassifier/src/android/view/textclassifier/TextClassificationManagerPerfTest.java
+++ b/apct-tests/perftests/textclassifier/src/android/view/textclassifier/TextClassificationManagerPerfTest.java
@@ -18,35 +18,60 @@
 import android.content.Context;
 import android.perftests.utils.BenchmarkState;
 import android.perftests.utils.PerfStatusReporter;
-import android.perftests.utils.SettingsHelper;
-import android.provider.Settings;
+import android.provider.DeviceConfig;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.LargeTest;
 
 import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
 
 @LargeTest
 public class TextClassificationManagerPerfTest {
+    private static final String WRITE_DEVICE_CONFIG_PERMISSION =
+            "android.permission.WRITE_DEVICE_CONFIG";
 
     @Rule
     public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
 
+    private String mOriginalSystemTextclassifierStatus;
+
+    @BeforeClass
+    public static void setUpClass() {
+        InstrumentationRegistry.getInstrumentation().getUiAutomation()
+                .adoptShellPermissionIdentity(
+                        WRITE_DEVICE_CONFIG_PERMISSION);
+    }
+
+    @AfterClass
+    public static void tearDownClass() {
+        InstrumentationRegistry
+                .getInstrumentation()
+                .getUiAutomation()
+                .dropShellPermissionIdentity();
+    }
+
+    @Before
+    public void setUp() {
+        // Saves config original value.
+        mOriginalSystemTextclassifierStatus = DeviceConfig.getProperty(
+                DeviceConfig.NAMESPACE_TEXTCLASSIFIER, "system_textclassifier_enabled");
+    }
+
     @After
     public void tearDown() {
-        SettingsHelper.delete(
-                SettingsHelper.NAMESPACE_GLOBAL, Settings.Global.TEXT_CLASSIFIER_CONSTANTS);
+        // Restores config original value.
+        enableSystemTextclassifier(mOriginalSystemTextclassifierStatus);
     }
 
     @Test
     public void testGetTextClassifier_systemTextClassifierDisabled() {
         Context context = InstrumentationRegistry.getTargetContext();
-        SettingsHelper.set(
-                SettingsHelper.NAMESPACE_GLOBAL,
-                Settings.Global.TEXT_CLASSIFIER_CONSTANTS,
-                "system_textclassifier_enabled=false");
+        enableSystemTextclassifier(String.valueOf(false));
         TextClassificationManager textClassificationManager =
                 context.getSystemService(TextClassificationManager.class);
         BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
@@ -59,10 +84,7 @@
     @Test
     public void testGetTextClassifier_systemTextClassifierEnabled() {
         Context context = InstrumentationRegistry.getTargetContext();
-        SettingsHelper.set(
-                SettingsHelper.NAMESPACE_GLOBAL,
-                Settings.Global.TEXT_CLASSIFIER_CONSTANTS,
-                "system_textclassifier_enabled=true");
+        enableSystemTextclassifier(String.valueOf(true));
         TextClassificationManager textClassificationManager =
                 context.getSystemService(TextClassificationManager.class);
         BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
@@ -71,4 +93,9 @@
             textClassificationManager.invalidateForTesting();
         }
     }
+
+    private void enableSystemTextclassifier(String enabled) {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
+                "system_textclassifier_enabled", enabled, /* makeDefault */ false);
+    }
 }
diff --git a/apex/blobstore/TEST_MAPPING b/apex/blobstore/TEST_MAPPING
index 25a1537..6d3c0d7 100644
--- a/apex/blobstore/TEST_MAPPING
+++ b/apex/blobstore/TEST_MAPPING
@@ -4,6 +4,9 @@
       "name": "CtsBlobStoreTestCases"
     },
     {
+      "name": "CtsBlobStoreHostTestCases"
+    },
+    {
       "name": "FrameworksMockingServicesTests",
       "options": [
         {
@@ -12,4 +15,4 @@
       ]
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/apex/blobstore/framework/java/android/app/blob/BlobHandle.java b/apex/blobstore/framework/java/android/app/blob/BlobHandle.java
index d339afa..bcef8ce 100644
--- a/apex/blobstore/framework/java/android/app/blob/BlobHandle.java
+++ b/apex/blobstore/framework/java/android/app/blob/BlobHandle.java
@@ -43,7 +43,8 @@
  */
 // TODO: use datagen tool?
 public final class BlobHandle implements Parcelable {
-    private static final String ALGO_SHA_256 = "SHA-256";
+    /** @hide */
+    public static final String ALGO_SHA_256 = "SHA-256";
 
     private static final String[] SUPPORTED_ALGOS = {
             ALGO_SHA_256
@@ -129,7 +130,8 @@
      * @param label a label indicating what the blob is, that can be surfaced to the user.
      * @param expiryTimeMillis the time in secs after which the blob should be invalidated and not
      *                         allowed to be accessed by any other app,
-     *                         in {@link System#currentTimeMillis()} timebase.
+     *                         in {@link System#currentTimeMillis()} timebase or {@code 0} to
+     *                         indicate that there is no expiry time associated with this blob.
      * @param tag an opaque {@link String} associated with the blob. The length of the tag
      *            cannot be more than 128 characters.
      *
diff --git a/apex/blobstore/framework/java/android/app/blob/BlobStoreManager.java b/apex/blobstore/framework/java/android/app/blob/BlobStoreManager.java
index 8cea645..f53f1f1 100644
--- a/apex/blobstore/framework/java/android/app/blob/BlobStoreManager.java
+++ b/apex/blobstore/framework/java/android/app/blob/BlobStoreManager.java
@@ -142,6 +142,9 @@
     /** @hide */
     public static final int COMMIT_RESULT_ERROR = 1;
 
+    /** @hide */
+    public static final int INVALID_RES_ID = -1;
+
     private final Context mContext;
     private final IBlobStoreManager mService;
 
@@ -263,6 +266,9 @@
      * <p> This lease information is persisted and calling this more than once will result in
      * latest lease overriding any previous lease.
      *
+     * <p> When an app acquires a lease on a blob, the System will try to keep this
+     * blob around but note that it can still be deleted if it was requested by the user.
+     *
      * @param blobHandle the {@link BlobHandle} representing the blob that the caller wants to
      *                   acquire a lease for.
      * @param descriptionResId the resource id for a short description string that can be surfaced
@@ -285,11 +291,68 @@
      *                               caller is trying to acquire too many leases.
      *
      * @see {@link #acquireLease(BlobHandle, int)}
+     * @see {@link #acquireLease(BlobHandle, CharSequence)}
      */
     public void acquireLease(@NonNull BlobHandle blobHandle, @IdRes int descriptionResId,
             @CurrentTimeMillisLong long leaseExpiryTimeMillis) throws IOException {
         try {
-            mService.acquireLease(blobHandle, descriptionResId, leaseExpiryTimeMillis,
+            mService.acquireLease(blobHandle, descriptionResId, null, leaseExpiryTimeMillis,
+                    mContext.getOpPackageName());
+        } catch (ParcelableException e) {
+            e.maybeRethrow(IOException.class);
+            throw new RuntimeException(e);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Acquire a lease to the blob represented by {@code blobHandle}. This lease indicates to the
+     * system that the caller wants the blob to be kept around.
+     *
+     * <p> This is a variant of {@link #acquireLease(BlobHandle, int, long)} taking a
+     * {@link CharSequence} for {@code description}. It is highly recommended that callers only
+     * use this when a valid resource ID for {@code description} could not be provided. Otherwise,
+     * apps should prefer using {@link #acquireLease(BlobHandle, int)} which will allow
+     * {@code description} to be localized.
+     *
+     * <p> Any active leases will be automatically released when the blob's expiry time
+     * ({@link BlobHandle#getExpiryTimeMillis()}) is elapsed.
+     *
+     * <p> This lease information is persisted and calling this more than once will result in
+     * latest lease overriding any previous lease.
+     *
+     * <p> When an app acquires a lease on a blob, the System will try to keep this
+     * blob around but note that it can still be deleted if it was requested by the user.
+     *
+     * @param blobHandle the {@link BlobHandle} representing the blob that the caller wants to
+     *                   acquire a lease for.
+     * @param description a short description string that can be surfaced
+     *                    to the user explaining what the blob is used for.
+     * @param leaseExpiryTimeMillis the time in milliseconds after which the lease can be
+     *                              automatically released, in {@link System#currentTimeMillis()}
+     *                              timebase. If its value is {@code 0}, then the behavior of this
+     *                              API is identical to {@link #acquireLease(BlobHandle, int)}
+     *                              where clients have to explicitly call
+     *                              {@link #releaseLease(BlobHandle)} when they don't
+     *                              need the blob anymore.
+     *
+     * @throws IOException when there is an I/O error while acquiring a lease to the blob.
+     * @throws SecurityException when the blob represented by the {@code blobHandle} does not
+     *                           exist or the caller does not have access to it.
+     * @throws IllegalArgumentException when {@code blobHandle} is invalid or
+     *                                  if the {@code leaseExpiryTimeMillis} is greater than the
+     *                                  {@link BlobHandle#getExpiryTimeMillis()}.
+     * @throws IllegalStateException when a lease could not be acquired, such as when the
+     *                               caller is trying to acquire too many leases.
+     *
+     * @see {@link #acquireLease(BlobHandle, int, long)}
+     * @see {@link #acquireLease(BlobHandle, CharSequence)}
+     */
+    public void acquireLease(@NonNull BlobHandle blobHandle, @NonNull CharSequence description,
+            @CurrentTimeMillisLong long leaseExpiryTimeMillis) throws IOException {
+        try {
+            mService.acquireLease(blobHandle, INVALID_RES_ID, description, leaseExpiryTimeMillis,
                     mContext.getOpPackageName());
         } catch (ParcelableException e) {
             e.maybeRethrow(IOException.class);
@@ -314,6 +377,9 @@
      * <p> This lease information is persisted and calling this more than once will result in
      * latest lease overriding any previous lease.
      *
+     * <p> When an app acquires a lease on a blob, the System will try to keep this
+     * blob around but note that it can still be deleted if it was requested by the user.
+     *
      * @param blobHandle the {@link BlobHandle} representing the blob that the caller wants to
      *                   acquire a lease for.
      * @param descriptionResId the resource id for a short description string that can be surfaced
@@ -327,6 +393,7 @@
      *                               caller is trying to acquire too many leases.
      *
      * @see {@link #acquireLease(BlobHandle, int, long)}
+     * @see {@link #acquireLease(BlobHandle, CharSequence, long)}
      */
     public void acquireLease(@NonNull BlobHandle blobHandle, @IdRes int descriptionResId)
             throws IOException {
@@ -334,6 +401,50 @@
     }
 
     /**
+     * Acquire a lease to the blob represented by {@code blobHandle}. This lease indicates to the
+     * system that the caller wants the blob to be kept around.
+     *
+     * <p> This is a variant of {@link #acquireLease(BlobHandle, int)} taking a {@link CharSequence}
+     * for {@code description}. It is highly recommended that callers only use this when a valid
+     * resource ID for {@code description} could not be provided. Otherwise, apps should prefer
+     * using {@link #acquireLease(BlobHandle, int)} which will allow {@code description} to be
+     * localized.
+     *
+     * <p> This is similar to {@link #acquireLease(BlobHandle, CharSequence, long)} except clients
+     * don't have to specify the lease expiry time upfront using this API and need to explicitly
+     * release the lease using {@link #releaseLease(BlobHandle)} when they no longer like to keep
+     * a blob around.
+     *
+     * <p> Any active leases will be automatically released when the blob's expiry time
+     * ({@link BlobHandle#getExpiryTimeMillis()}) is elapsed.
+     *
+     * <p> This lease information is persisted and calling this more than once will result in
+     * latest lease overriding any previous lease.
+     *
+     * <p> When an app acquires a lease on a blob, the System will try to keep this
+     * blob around but note that it can still be deleted if it was requested by the user.
+     *
+     * @param blobHandle the {@link BlobHandle} representing the blob that the caller wants to
+     *                   acquire a lease for.
+     * @param description a short description string that can be surfaced
+     *                    to the user explaining what the blob is used for.
+     *
+     * @throws IOException when there is an I/O error while acquiring a lease to the blob.
+     * @throws SecurityException when the blob represented by the {@code blobHandle} does not
+     *                           exist or the caller does not have access to it.
+     * @throws IllegalArgumentException when {@code blobHandle} is invalid.
+     * @throws IllegalStateException when a lease could not be acquired, such as when the
+     *                               caller is trying to acquire too many leases.
+     *
+     * @see {@link #acquireLease(BlobHandle, int)}
+     * @see {@link #acquireLease(BlobHandle, CharSequence, long)}
+     */
+    public void acquireLease(@NonNull BlobHandle blobHandle, @NonNull CharSequence description)
+            throws IOException {
+        acquireLease(blobHandle, description, 0);
+    }
+
+    /**
      * Release all active leases to the blob represented by {@code blobHandle} which are
      * currently held by the caller.
      *
diff --git a/apex/blobstore/framework/java/android/app/blob/IBlobStoreManager.aidl b/apex/blobstore/framework/java/android/app/blob/IBlobStoreManager.aidl
index e2128b4..a85a25c 100644
--- a/apex/blobstore/framework/java/android/app/blob/IBlobStoreManager.aidl
+++ b/apex/blobstore/framework/java/android/app/blob/IBlobStoreManager.aidl
@@ -26,8 +26,8 @@
     ParcelFileDescriptor openBlob(in BlobHandle handle, in String packageName);
     void deleteSession(long sessionId, in String packageName);
 
-    void acquireLease(in BlobHandle handle, int descriptionResId, long leaseTimeout,
-            in String packageName);
+    void acquireLease(in BlobHandle handle, int descriptionResId, in CharSequence description,
+            long leaseTimeoutMillis, in String packageName);
     void releaseLease(in BlobHandle handle, in String packageName);
 
     void waitForIdle(in RemoteCallback callback);
diff --git a/apex/blobstore/framework/java/android/app/blob/XmlTags.java b/apex/blobstore/framework/java/android/app/blob/XmlTags.java
index 803c9a4..9834d74 100644
--- a/apex/blobstore/framework/java/android/app/blob/XmlTags.java
+++ b/apex/blobstore/framework/java/android/app/blob/XmlTags.java
@@ -52,4 +52,5 @@
     // For leasee
     public static final String TAG_LEASEE = "l";
     public static final String ATTR_DESCRIPTION_RES_ID = "rid";
+    public static final String ATTR_DESCRIPTION = "d";
 }
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 c12e0ec..c7d803c 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java
@@ -15,6 +15,7 @@
  */
 package com.android.server.blob;
 
+import static android.app.blob.XmlTags.ATTR_DESCRIPTION;
 import static android.app.blob.XmlTags.ATTR_DESCRIPTION_RES_ID;
 import static android.app.blob.XmlTags.ATTR_EXPIRY_TIME;
 import static android.app.blob.XmlTags.ATTR_ID;
@@ -28,12 +29,14 @@
 import static android.system.OsConstants.O_RDONLY;
 
 import static com.android.server.blob.BlobStoreConfig.TAG;
+import static com.android.server.blob.BlobStoreConfig.XML_VERSION_ADD_STRING_DESC;
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.blob.BlobHandle;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.content.res.ResourceId;
 import android.content.res.Resources;
 import android.os.ParcelFileDescriptor;
 import android.os.RevocableFileDescriptor;
@@ -141,11 +144,11 @@
         }
     }
 
-    void addLeasee(String callingPackage, int callingUid,
-            int descriptionResId, long leaseExpiryTimeMillis) {
+    void addLeasee(String callingPackage, int callingUid, int descriptionResId,
+            CharSequence description, long leaseExpiryTimeMillis) {
         synchronized (mMetadataLock) {
             mLeasees.add(new Leasee(callingPackage, callingUid,
-                    descriptionResId, leaseExpiryTimeMillis));
+                    descriptionResId, description, leaseExpiryTimeMillis));
         }
     }
 
@@ -308,7 +311,7 @@
     }
 
     @Nullable
-    static BlobMetadata createFromXml(Context context, XmlPullParser in)
+    static BlobMetadata createFromXml(XmlPullParser in, int version, Context context)
             throws XmlPullParserException, IOException {
         final long blobId = XmlUtils.readLongAttribute(in, ATTR_ID);
         final int userId = XmlUtils.readIntAttribute(in, ATTR_USER_ID);
@@ -321,12 +324,12 @@
             if (TAG_BLOB_HANDLE.equals(in.getName())) {
                 blobHandle = BlobHandle.createFromXml(in);
             } else if (TAG_COMMITTER.equals(in.getName())) {
-                final Committer committer = Committer.createFromXml(in);
+                final Committer committer = Committer.createFromXml(in, version);
                 if (committer != null) {
                     committers.add(committer);
                 }
             } else if (TAG_LEASEE.equals(in.getName())) {
-                leasees.add(Leasee.createFromXml(in));
+                leasees.add(Leasee.createFromXml(in, version));
             }
         }
 
@@ -366,7 +369,7 @@
         }
 
         @Nullable
-        static Committer createFromXml(@NonNull XmlPullParser in)
+        static Committer createFromXml(@NonNull XmlPullParser in, int version)
                 throws XmlPullParserException, IOException {
             final String packageName = XmlUtils.readStringAttribute(in, ATTR_PACKAGE);
             final int uid = XmlUtils.readIntAttribute(in, ATTR_UID);
@@ -388,12 +391,15 @@
 
     static final class Leasee extends Accessor {
         public final int descriptionResId;
+        public final CharSequence description;
         public final long expiryTimeMillis;
 
-        Leasee(String packageName, int uid, int descriptionResId, long expiryTimeMillis) {
+        Leasee(String packageName, int uid, int descriptionResId, CharSequence description,
+                long expiryTimeMillis) {
             super(packageName, uid);
             this.descriptionResId = descriptionResId;
             this.expiryTimeMillis = expiryTimeMillis;
+            this.description = description;
         }
 
         boolean isStillValid() {
@@ -401,35 +407,51 @@
         }
 
         void dump(Context context, IndentingPrintWriter fout) {
-            String desc = null;
-            try {
-                final Resources leaseeRes = context.getPackageManager()
-                        .getResourcesForApplicationAsUser(packageName, UserHandle.getUserId(uid));
-                desc = leaseeRes.getString(descriptionResId);
-            } catch (PackageManager.NameNotFoundException e) {
-                Slog.d(TAG, "Unknown package in user " + UserHandle.getUserId(uid) + ": "
-                        + packageName, e);
-                desc = "<none>";
-            }
-            fout.println("desc: " + desc);
+            fout.println("desc: " + getDescriptionToDump(context));
             fout.println("expiryMs: " + expiryTimeMillis);
         }
 
+        private String getDescriptionToDump(Context context) {
+            String desc = null;
+            if (ResourceId.isValid(descriptionResId)) {
+                try {
+                    final Resources leaseeRes = context.getPackageManager()
+                            .getResourcesForApplicationAsUser(
+                                    packageName, UserHandle.getUserId(uid));
+                    desc = leaseeRes.getString(descriptionResId);
+                } catch (PackageManager.NameNotFoundException e) {
+                    Slog.d(TAG, "Unknown package in user " + UserHandle.getUserId(uid) + ": "
+                            + packageName, e);
+                    desc = "<none>";
+                }
+            } else {
+                desc = description.toString();
+            }
+            return desc;
+        }
+
         void writeToXml(@NonNull XmlSerializer out) throws IOException {
             XmlUtils.writeStringAttribute(out, ATTR_PACKAGE, packageName);
             XmlUtils.writeIntAttribute(out, ATTR_UID, uid);
             XmlUtils.writeIntAttribute(out, ATTR_DESCRIPTION_RES_ID, descriptionResId);
             XmlUtils.writeLongAttribute(out, ATTR_EXPIRY_TIME, expiryTimeMillis);
+            XmlUtils.writeStringAttribute(out, ATTR_DESCRIPTION, description);
         }
 
         @NonNull
-        static Leasee createFromXml(@NonNull XmlPullParser in) throws IOException {
+        static Leasee createFromXml(@NonNull XmlPullParser in, int version) throws IOException {
             final String packageName = XmlUtils.readStringAttribute(in, ATTR_PACKAGE);
             final int uid = XmlUtils.readIntAttribute(in, ATTR_UID);
             final int descriptionResId = XmlUtils.readIntAttribute(in, ATTR_DESCRIPTION_RES_ID);
             final long expiryTimeMillis = XmlUtils.readLongAttribute(in, ATTR_EXPIRY_TIME);
+            final CharSequence description;
+            if (version >= XML_VERSION_ADD_STRING_DESC) {
+                description = XmlUtils.readStringAttribute(in, ATTR_DESCRIPTION);
+            } else {
+                description = null;
+            }
 
-            return new Leasee(packageName, uid, descriptionResId, expiryTimeMillis);
+            return new Leasee(packageName, uid, descriptionResId, description, expiryTimeMillis);
         }
     }
 
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreConfig.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreConfig.java
index ba2e559..bcc1610 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreConfig.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreConfig.java
@@ -28,7 +28,12 @@
     public static final String TAG = "BlobStore";
     public static final boolean LOGV = Log.isLoggable(TAG, Log.VERBOSE);
 
-    public static final int CURRENT_XML_VERSION = 1;
+    // Initial version.
+    public static final int XML_VERSION_INIT = 1;
+    // Added a string variant of lease description.
+    public static final int XML_VERSION_ADD_STRING_DESC = 2;
+
+    public static final int XML_VERSION_CURRENT = XML_VERSION_ADD_STRING_DESC;
 
     private static final String ROOT_DIR_NAME = "blobstore";
     private static final String BLOBS_DIR_NAME = "blobs";
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
index 0ba34ca..aae33d7 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
@@ -27,10 +27,10 @@
 import static android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES;
 import static android.os.UserHandle.USER_NULL;
 
-import static com.android.server.blob.BlobStoreConfig.CURRENT_XML_VERSION;
 import static com.android.server.blob.BlobStoreConfig.LOGV;
 import static com.android.server.blob.BlobStoreConfig.SESSION_EXPIRY_TIMEOUT_MILLIS;
 import static com.android.server.blob.BlobStoreConfig.TAG;
+import static com.android.server.blob.BlobStoreConfig.XML_VERSION_CURRENT;
 import static com.android.server.blob.BlobStoreSession.STATE_ABANDONED;
 import static com.android.server.blob.BlobStoreSession.STATE_COMMITTED;
 import static com.android.server.blob.BlobStoreSession.STATE_VERIFIED_INVALID;
@@ -96,10 +96,12 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.nio.charset.StandardCharsets;
+import java.security.SecureRandom;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
+import java.util.Random;
 import java.util.Set;
 
 /**
@@ -122,8 +124,15 @@
 
     // Contains all ids that are currently in use.
     @GuardedBy("mBlobsLock")
+    private final ArraySet<Long> mActiveBlobIds = new ArraySet<>();
+    // Contains all ids that are currently in use and those that were in use but got deleted in the
+    // current boot session.
+    @GuardedBy("mBlobsLock")
     private final ArraySet<Long> mKnownBlobIds = new ArraySet<>();
 
+    // Random number generator for new session ids.
+    private final Random mRandom = new SecureRandom();
+
     private final Context mContext;
     private final Handler mHandler;
     private final Injector mInjector;
@@ -181,7 +190,16 @@
 
     @GuardedBy("mBlobsLock")
     private long generateNextSessionIdLocked() {
-        return ++mCurrentMaxSessionId;
+        // Logic borrowed from PackageInstallerService.
+        int n = 0;
+        long sessionId;
+        do {
+            sessionId = Math.abs(mRandom.nextLong());
+            if (mKnownBlobIds.indexOf(sessionId) < 0 && sessionId != 0) {
+                return sessionId;
+            }
+        } while (n++ < 32);
+        throw new IllegalStateException("Failed to allocate session ID");
     }
 
     private void registerReceivers() {
@@ -228,15 +246,22 @@
     }
 
     @VisibleForTesting
-    void addKnownIdsForTest(long... knownIds) {
+    void addActiveIdsForTest(long... activeIds) {
         synchronized (mBlobsLock) {
-            for (long id : knownIds) {
-                mKnownBlobIds.add(id);
+            for (long id : activeIds) {
+                addActiveBlobIdLocked(id);
             }
         }
     }
 
     @VisibleForTesting
+    Set<Long> getActiveIdsForTest() {
+        synchronized (mBlobsLock) {
+            return mActiveBlobIds;
+        }
+    }
+
+    @VisibleForTesting
     Set<Long> getKnownIdsForTest() {
         synchronized (mBlobsLock) {
             return mKnownBlobIds;
@@ -246,7 +271,7 @@
     @GuardedBy("mBlobsLock")
     private void addSessionForUserLocked(BlobStoreSession session, int userId) {
         getUserSessionsLocked(userId).put(session.getSessionId(), session);
-        mKnownBlobIds.add(session.getSessionId());
+        addActiveBlobIdLocked(session.getSessionId());
     }
 
     @GuardedBy("mBlobsLock")
@@ -258,7 +283,13 @@
     private void addBlobForUserLocked(BlobMetadata blobMetadata,
             ArrayMap<BlobHandle, BlobMetadata> userBlobs) {
         userBlobs.put(blobMetadata.getBlobHandle(), blobMetadata);
-        mKnownBlobIds.add(blobMetadata.getBlobId());
+        addActiveBlobIdLocked(blobMetadata.getBlobId());
+    }
+
+    @GuardedBy("mBlobsLock")
+    private void addActiveBlobIdLocked(long id) {
+        mActiveBlobIds.add(id);
+        mKnownBlobIds.add(id);
     }
 
     private long createSessionInternal(BlobHandle blobHandle,
@@ -324,7 +355,8 @@
     }
 
     private void acquireLeaseInternal(BlobHandle blobHandle, int descriptionResId,
-            long leaseExpiryTimeMillis, int callingUid, String callingPackage) {
+            CharSequence description, long leaseExpiryTimeMillis,
+            int callingUid, String callingPackage) {
         synchronized (mBlobsLock) {
             final BlobMetadata blobMetadata = getUserBlobsLocked(UserHandle.getUserId(callingUid))
                     .get(blobHandle);
@@ -333,12 +365,13 @@
                 throw new SecurityException("Caller not allowed to access " + blobHandle
                         + "; callingUid=" + callingUid + ", callingPackage=" + callingPackage);
             }
-            if (leaseExpiryTimeMillis != 0 && leaseExpiryTimeMillis > blobHandle.expiryTimeMillis) {
+            if (leaseExpiryTimeMillis != 0 && blobHandle.expiryTimeMillis != 0
+                    && leaseExpiryTimeMillis > blobHandle.expiryTimeMillis) {
                 throw new IllegalArgumentException(
                         "Lease expiry cannot be later than blobs expiry time");
             }
             blobMetadata.addLeasee(callingPackage, callingUid,
-                    descriptionResId, leaseExpiryTimeMillis);
+                    descriptionResId, description, leaseExpiryTimeMillis);
             if (LOGV) {
                 Slog.v(TAG, "Acquired lease on " + blobHandle
                         + "; callingUid=" + callingUid + ", callingPackage=" + callingPackage);
@@ -383,24 +416,27 @@
     }
 
     private void onStateChangedInternal(@NonNull BlobStoreSession session) {
-        synchronized (mBlobsLock) {
-            switch (session.getState()) {
-                case STATE_ABANDONED:
-                case STATE_VERIFIED_INVALID:
-                    session.getSessionFile().delete();
+        switch (session.getState()) {
+            case STATE_ABANDONED:
+            case STATE_VERIFIED_INVALID:
+                session.getSessionFile().delete();
+                synchronized (mBlobsLock) {
                     getUserSessionsLocked(UserHandle.getUserId(session.getOwnerUid()))
                             .remove(session.getSessionId());
-                    mKnownBlobIds.remove(session.getSessionId());
+                    mActiveBlobIds.remove(session.getSessionId());
                     if (LOGV) {
                         Slog.v(TAG, "Session is invalid; deleted " + session);
                     }
-                    break;
-                case STATE_COMMITTED:
-                    session.verifyBlobData();
-                    break;
-                case STATE_VERIFIED_VALID:
+                }
+                break;
+            case STATE_COMMITTED:
+                session.verifyBlobData();
+                break;
+            case STATE_VERIFIED_VALID:
+                synchronized (mBlobsLock) {
                     final int userId = UserHandle.getUserId(session.getOwnerUid());
-                    final ArrayMap<BlobHandle, BlobMetadata> userBlobs = getUserBlobsLocked(userId);
+                    final ArrayMap<BlobHandle, BlobMetadata> userBlobs = getUserBlobsLocked(
+                            userId);
                     BlobMetadata blob = userBlobs.get(session.getBlobHandle());
                     if (blob == null) {
                         blob = new BlobMetadata(mContext,
@@ -423,11 +459,13 @@
                     if (LOGV) {
                         Slog.v(TAG, "Successfully committed session " + session);
                     }
-                    break;
-                default:
-                    Slog.wtf(TAG, "Invalid session state: "
-                            + stateToString(session.getState()));
-            }
+                }
+                break;
+            default:
+                Slog.wtf(TAG, "Invalid session state: "
+                        + stateToString(session.getState()));
+        }
+        synchronized (mBlobsLock) {
             try {
                 writeBlobSessionsLocked();
             } catch (Exception e) {
@@ -450,7 +488,7 @@
             out.setOutput(fos, StandardCharsets.UTF_8.name());
             out.startDocument(null, true);
             out.startTag(null, TAG_SESSIONS);
-            XmlUtils.writeIntAttribute(out, ATTR_VERSION, CURRENT_XML_VERSION);
+            XmlUtils.writeIntAttribute(out, ATTR_VERSION, XML_VERSION_CURRENT);
 
             for (int i = 0, userCount = mSessions.size(); i < userCount; ++i) {
                 final LongSparseArray<BlobStoreSession> userSessions =
@@ -484,6 +522,9 @@
         if (sessionsIndexFile == null) {
             Slog.wtf(TAG, "Error creating sessions index file");
             return;
+        } else if (!sessionsIndexFile.exists()) {
+            Slog.w(TAG, "Sessions index file not available: " + sessionsIndexFile.getBaseFile());
+            return;
         }
 
         mSessions.clear();
@@ -491,6 +532,7 @@
             final XmlPullParser in = Xml.newPullParser();
             in.setInput(fis, StandardCharsets.UTF_8.name());
             XmlUtils.beginDocument(in, TAG_SESSIONS);
+            final int version = XmlUtils.readIntAttribute(in, ATTR_VERSION);
             while (true) {
                 XmlUtils.nextElement(in);
                 if (in.getEventType() == XmlPullParser.END_DOCUMENT) {
@@ -499,7 +541,7 @@
 
                 if (TAG_SESSION.equals(in.getName())) {
                     final BlobStoreSession session = BlobStoreSession.createFromXml(
-                            in, mContext, mSessionStateChangeListener);
+                            in, version, mContext, mSessionStateChangeListener);
                     if (session == null) {
                         continue;
                     }
@@ -539,7 +581,7 @@
             out.setOutput(fos, StandardCharsets.UTF_8.name());
             out.startDocument(null, true);
             out.startTag(null, TAG_BLOBS);
-            XmlUtils.writeIntAttribute(out, ATTR_VERSION, CURRENT_XML_VERSION);
+            XmlUtils.writeIntAttribute(out, ATTR_VERSION, XML_VERSION_CURRENT);
 
             for (int i = 0, userCount = mBlobsMap.size(); i < userCount; ++i) {
                 final ArrayMap<BlobHandle, BlobMetadata> userBlobs = mBlobsMap.valueAt(i);
@@ -572,6 +614,9 @@
         if (blobsIndexFile == null) {
             Slog.wtf(TAG, "Error creating blobs index file");
             return;
+        } else if (!blobsIndexFile.exists()) {
+            Slog.w(TAG, "Blobs index file not available: " + blobsIndexFile.getBaseFile());
+            return;
         }
 
         mBlobsMap.clear();
@@ -579,6 +624,7 @@
             final XmlPullParser in = Xml.newPullParser();
             in.setInput(fis, StandardCharsets.UTF_8.name());
             XmlUtils.beginDocument(in, TAG_BLOBS);
+            final int version = XmlUtils.readIntAttribute(in, ATTR_VERSION);
             while (true) {
                 XmlUtils.nextElement(in);
                 if (in.getEventType() == XmlPullParser.END_DOCUMENT) {
@@ -586,7 +632,8 @@
                 }
 
                 if (TAG_BLOB.equals(in.getName())) {
-                    final BlobMetadata blobMetadata = BlobMetadata.createFromXml(mContext, in);
+                    final BlobMetadata blobMetadata = BlobMetadata.createFromXml(
+                            in, version, mContext);
                     final SparseArray<String> userPackages = allPackages.get(
                             blobMetadata.getUserId());
                     if (userPackages == null) {
@@ -694,7 +741,7 @@
                 if (session.getOwnerUid() == uid
                         && session.getOwnerPackageName().equals(packageName)) {
                     session.getSessionFile().delete();
-                    mKnownBlobIds.remove(session.getSessionId());
+                    mActiveBlobIds.remove(session.getSessionId());
                     indicesToRemove.add(i);
                 }
             }
@@ -714,7 +761,7 @@
                 // Delete the blob if it doesn't have any active leases.
                 if (!blobMetadata.hasLeases()) {
                     blobMetadata.getBlobFile().delete();
-                    mKnownBlobIds.remove(blobMetadata.getBlobId());
+                    mActiveBlobIds.remove(blobMetadata.getBlobId());
                     indicesToRemove.add(i);
                 }
             }
@@ -737,7 +784,7 @@
                 for (int i = 0, count = userSessions.size(); i < count; ++i) {
                     final BlobStoreSession session = userSessions.valueAt(i);
                     session.getSessionFile().delete();
-                    mKnownBlobIds.remove(session.getSessionId());
+                    mActiveBlobIds.remove(session.getSessionId());
                 }
             }
 
@@ -747,7 +794,7 @@
                 for (int i = 0, count = userBlobs.size(); i < count; ++i) {
                     final BlobMetadata blobMetadata = userBlobs.valueAt(i);
                     blobMetadata.getBlobFile().delete();
-                    mKnownBlobIds.remove(blobMetadata.getBlobId());
+                    mActiveBlobIds.remove(blobMetadata.getBlobId());
                 }
             }
             if (LOGV) {
@@ -767,7 +814,7 @@
             for (File file : blobsDir.listFiles()) {
                 try {
                     final long id = Long.parseLong(file.getName());
-                    if (mKnownBlobIds.indexOf(id) < 0) {
+                    if (mActiveBlobIds.indexOf(id) < 0) {
                         filesToDelete.add(file);
                         deletedBlobIds.add(id);
                     }
@@ -802,7 +849,7 @@
 
                 if (shouldRemove) {
                     blobMetadata.getBlobFile().delete();
-                    mKnownBlobIds.remove(blobMetadata.getBlobId());
+                    mActiveBlobIds.remove(blobMetadata.getBlobId());
                     deletedBlobIds.add(blobMetadata.getBlobId());
                 }
                 return shouldRemove;
@@ -832,7 +879,7 @@
 
                 if (shouldRemove) {
                     blobStoreSession.getSessionFile().delete();
-                    mKnownBlobIds.remove(blobStoreSession.getSessionId());
+                    mActiveBlobIds.remove(blobStoreSession.getSessionId());
                     indicesToRemove.add(j);
                     deletedBlobIds.add(blobStoreSession.getSessionId());
                 }
@@ -870,6 +917,20 @@
         }
     }
 
+    void deleteBlob(@NonNull BlobHandle blobHandle, @UserIdInt int userId) {
+        synchronized (mBlobsLock) {
+            final ArrayMap<BlobHandle, BlobMetadata> userBlobs = getUserBlobsLocked(userId);
+            final BlobMetadata blobMetadata = userBlobs.get(blobHandle);
+            if (blobMetadata == null) {
+                return;
+            }
+            blobMetadata.getBlobFile().delete();
+            userBlobs.remove(blobHandle);
+            mActiveBlobIds.remove(blobMetadata.getBlobId());
+            writeBlobsInfoAsync();
+        }
+    }
+
     @GuardedBy("mBlobsLock")
     private void dumpSessionsLocked(IndentingPrintWriter fout, DumpArgs dumpArgs) {
         for (int i = 0, userCount = mSessions.size(); i < userCount; ++i) {
@@ -1032,11 +1093,14 @@
 
         @Override
         public void acquireLease(@NonNull BlobHandle blobHandle, @IdRes int descriptionResId,
+                @Nullable CharSequence description,
                 @CurrentTimeSecondsLong long leaseExpiryTimeMillis, @NonNull String packageName) {
             Objects.requireNonNull(blobHandle, "blobHandle must not be null");
             blobHandle.assertIsValid();
-            Preconditions.checkArgument(ResourceId.isValid(descriptionResId),
-                    "descriptionResId is not valid");
+            Preconditions.checkArgument(
+                    ResourceId.isValid(descriptionResId) || description != null,
+                    "Description must be valid; descriptionId=" + descriptionResId
+                            + ", description=" + description);
             Preconditions.checkArgumentNonnegative(leaseExpiryTimeMillis,
                     "leaseExpiryTimeMillis must not be negative");
             Objects.requireNonNull(packageName, "packageName must not be null");
@@ -1044,7 +1108,7 @@
             final int callingUid = Binder.getCallingUid();
             verifyCallingPackage(callingUid, packageName);
 
-            acquireLeaseInternal(blobHandle, descriptionResId, leaseExpiryTimeMillis,
+            acquireLeaseInternal(blobHandle, descriptionResId, description, leaseExpiryTimeMillis,
                     callingUid, packageName);
         }
 
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerShellCommand.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerShellCommand.java
index 3ac30f8..d58294b 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerShellCommand.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerShellCommand.java
@@ -15,10 +15,13 @@
  */
 package com.android.server.blob;
 
+import android.app.ActivityManager;
+import android.app.blob.BlobHandle;
 import android.os.ShellCommand;
 import android.os.UserHandle;
 
 import java.io.PrintWriter;
+import java.util.Base64;
 
 class BlobStoreManagerShellCommand extends ShellCommand {
 
@@ -39,6 +42,8 @@
                 return runClearAllSessions(pw);
             case "clear-all-blobs":
                 return runClearAllBlobs(pw);
+            case "delete-blob":
+                return runDeleteBlob(pw);
             default:
                 return handleDefaultCommands(cmd);
         }
@@ -68,6 +73,17 @@
         return 0;
     }
 
+    private int runDeleteBlob(PrintWriter pw) {
+        final ParsedArgs args = new ParsedArgs();
+
+        if (parseOptions(pw, args) < 0) {
+            return -1;
+        }
+
+        mService.deleteBlob(args.getBlobHandle(), args.userId);
+        return 0;
+    }
+
     @Override
     public void onHelp() {
         final PrintWriter pw = getOutPrintWriter();
@@ -78,14 +94,24 @@
         pw.println("clear-all-sessions [-u | --user USER_ID]");
         pw.println("    Remove all sessions.");
         pw.println("    Options:");
-        pw.println("      -u or --user: specify which user's sessions to be removed;");
+        pw.println("      -u or --user: specify which user's sessions to be removed.");
         pw.println("                    If not specified, sessions in all users are removed.");
         pw.println();
         pw.println("clear-all-blobs [-u | --user USER_ID]");
         pw.println("    Remove all blobs.");
         pw.println("    Options:");
+        pw.println("      -u or --user: specify which user's blobs to be removed.");
+        pw.println("                    If not specified, blobs in all users are removed.");
+        pw.println("delete-blob [-u | --user USER_ID] [--digest DIGEST] [--expiry EXPIRY_TIME] "
+                + "[--label LABEL] [--tag TAG]");
+        pw.println("    Delete a blob.");
+        pw.println("    Options:");
         pw.println("      -u or --user: specify which user's blobs to be removed;");
         pw.println("                    If not specified, blobs in all users are removed.");
+        pw.println("      --digest: Base64 encoded digest of the blob to delete.");
+        pw.println("      --expiry: Expiry time of the blob to delete, in milliseconds.");
+        pw.println("      --label: Label of the blob to delete.");
+        pw.println("      --tag: Tag of the blob to delete.");
         pw.println();
     }
 
@@ -97,15 +123,43 @@
                 case "--user":
                     args.userId = Integer.parseInt(getNextArgRequired());
                     break;
+                case "--algo":
+                    args.algorithm = getNextArgRequired();
+                    break;
+                case "--digest":
+                    args.digest = Base64.getDecoder().decode(getNextArgRequired());
+                    break;
+                case "--label":
+                    args.label = getNextArgRequired();
+                    break;
+                case "--expiry":
+                    args.expiryTimeMillis = Long.parseLong(getNextArgRequired());
+                    break;
+                case "--tag":
+                    args.tag = getNextArgRequired();
+                    break;
                 default:
                     pw.println("Error: unknown option '" + opt + "'");
                     return -1;
             }
         }
+        if (args.userId == UserHandle.USER_CURRENT) {
+            args.userId = ActivityManager.getCurrentUser();
+        }
         return 0;
     }
 
     private static class ParsedArgs {
-        public int userId;
+        public int userId = UserHandle.USER_CURRENT;
+
+        public String algorithm = BlobHandle.ALGO_SHA_256;
+        public byte[] digest;
+        public long expiryTimeMillis;
+        public CharSequence label;
+        public String tag;
+
+        public BlobHandle getBlobHandle() {
+            return BlobHandle.create(algorithm, digest, label, expiryTimeMillis, tag);
+        }
     }
 }
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreSession.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreSession.java
index bd35b86..d33a09f 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreSession.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreSession.java
@@ -511,10 +511,10 @@
     }
 
     @Nullable
-    static BlobStoreSession createFromXml(@NonNull XmlPullParser in,
+    static BlobStoreSession createFromXml(@NonNull XmlPullParser in, int version,
             @NonNull Context context, @NonNull SessionStateChangeListener stateChangeListener)
             throws IOException, XmlPullParserException {
-        final int sessionId = XmlUtils.readIntAttribute(in, ATTR_ID);
+        final long sessionId = XmlUtils.readLongAttribute(in, ATTR_ID);
         final String ownerPackageName = XmlUtils.readStringAttribute(in, ATTR_PACKAGE);
         final int ownerUid = XmlUtils.readIntAttribute(in, ATTR_UID);
 
diff --git a/apex/extservices/testing/Android.bp b/apex/extservices/testing/Android.bp
new file mode 100644
index 0000000..88a4724
--- /dev/null
+++ b/apex/extservices/testing/Android.bp
@@ -0,0 +1,25 @@
+// 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.
+
+apex_test {
+    name: "test_com.android.extservices",
+    visibility: [
+        "//system/apex/tests",
+    ],
+    defaults: ["com.android.extservices-defaults"],
+    manifest: "test_manifest.json",
+    file_contexts: ":com.android.extservices-file_contexts",
+    // Test APEX, should never be installed
+    installable: false,
+}
diff --git a/apex/extservices/testing/test_manifest.json b/apex/extservices/testing/test_manifest.json
new file mode 100644
index 0000000..23a50e3
--- /dev/null
+++ b/apex/extservices/testing/test_manifest.json
@@ -0,0 +1,4 @@
+{
+  "name": "com.android.extservices",
+  "version": 2147483647
+}
diff --git a/apex/jobscheduler/framework/java/android/app/job/JobInfo.java b/apex/jobscheduler/framework/java/android/app/job/JobInfo.java
index 088cadb..b905273 100644
--- a/apex/jobscheduler/framework/java/android/app/job/JobInfo.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobInfo.java
@@ -606,10 +606,6 @@
         return hasLateConstraint;
     }
 
-    private static boolean kindofEqualsBundle(BaseBundle a, BaseBundle b) {
-        return (a == b) || (a != null && a.kindofEquals(b));
-    }
-
     @Override
     public boolean equals(Object o) {
         if (!(o instanceof JobInfo)) {
@@ -620,11 +616,11 @@
             return false;
         }
         // XXX won't be correct if one is parcelled and the other not.
-        if (!kindofEqualsBundle(extras, j.extras)) {
+        if (!BaseBundle.kindofEquals(extras, j.extras)) {
             return false;
         }
         // XXX won't be correct if one is parcelled and the other not.
-        if (!kindofEqualsBundle(transientExtras, j.transientExtras)) {
+        if (!BaseBundle.kindofEquals(transientExtras, j.transientExtras)) {
             return false;
         }
         // XXX for now we consider two different clip data objects to be different,
@@ -896,7 +892,7 @@
          * @param flags Flags for the observer.
          */
         public TriggerContentUri(@NonNull Uri uri, @Flags int flags) {
-            mUri = uri;
+            mUri = Objects.requireNonNull(uri);
             mFlags = flags;
         }
 
diff --git a/apex/jobscheduler/framework/java/android/app/job/JobScheduler.java b/apex/jobscheduler/framework/java/android/app/job/JobScheduler.java
index 08b1c2b..abf78c6 100644
--- a/apex/jobscheduler/framework/java/android/app/job/JobScheduler.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobScheduler.java
@@ -56,6 +56,12 @@
  * instantiate this class directly; instead, retrieve it through
  * {@link android.content.Context#getSystemService
  * Context.getSystemService(Context.JOB_SCHEDULER_SERVICE)}.
+ *
+ * <p class="caution"><strong>Note:</strong> Beginning with API 30
+ * ({@link android.os.Build.VERSION_CODES#R}), JobScheduler will throttle runaway applications.
+ * Calling {@link #schedule(JobInfo)} and other such methods with very high frequency is indicative
+ * of an app bug and so, to make sure the system doesn't get overwhelmed, JobScheduler will begin
+ * to throttle apps that show buggy behavior, regardless of target SDK version.
  */
 @SystemService(Context.JOB_SCHEDULER_SERVICE)
 public abstract class JobScheduler {
diff --git a/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java b/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java
index 4ffcf8a..4b4fb96 100644
--- a/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java
+++ b/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java
@@ -80,27 +80,22 @@
     }
 
     /**
-     * Add the specified package to the power save whitelist.
-     *
-     * @return true if the package was successfully added to the whitelist
+     * Add the specified package to the permanent power save whitelist.
      */
     @RequiresPermission(android.Manifest.permission.DEVICE_POWER)
-    public boolean addToWhitelist(@NonNull String packageName) {
-        return addToWhitelist(Collections.singletonList(packageName)) == 1;
+    public void addToWhitelist(@NonNull String packageName) {
+        addToWhitelist(Collections.singletonList(packageName));
     }
 
     /**
-     * Add the specified packages to the power save whitelist.
-     *
-     * @return the number of packages that were successfully added to the whitelist
+     * Add the specified packages to the permanent power save whitelist.
      */
     @RequiresPermission(android.Manifest.permission.DEVICE_POWER)
-    public int addToWhitelist(@NonNull List<String> packageNames) {
+    public void addToWhitelist(@NonNull List<String> packageNames) {
         try {
-            return mService.addPowerSaveWhitelistApps(packageNames);
+            mService.addPowerSaveWhitelistApps(packageNames);
         } catch (RemoteException e) {
             e.rethrowFromSystemServer();
-            return 0;
         }
     }
 
diff --git a/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java b/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
index 1072406..7833a03 100644
--- a/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
+++ b/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
@@ -16,6 +16,7 @@
 
 package com.android.server.job;
 
+import android.annotation.NonNull;
 import android.app.job.JobInfo;
 import android.util.proto.ProtoOutputStream;
 
@@ -44,6 +45,10 @@
     void removeBackingUpUid(int uid);
     void clearAllBackingUpUids();
 
+    /** Returns the package responsible for backing up media on the device. */
+    @NonNull
+    String getMediaBackupPackage();
+
     /**
      * The user has started interacting with the app.  Take any appropriate action.
      */
diff --git a/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java b/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java
index d2d942a..f8b598a 100644
--- a/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java
+++ b/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java
@@ -85,6 +85,7 @@
     /**
      * Checks if an app has been idle for a while and filters out apps that are excluded.
      * It returns false if the current system state allows all apps to be considered active.
+     * This happens if the device is plugged in or otherwise temporarily allowed to make exceptions.
      * Called by interface impls.
      */
     boolean isAppIdleFiltered(String packageName, int appId, int userId,
@@ -146,7 +147,7 @@
 
     void postReportExemptedSyncStart(String packageName, int userId);
 
-    void dumpUser(IndentingPrintWriter idpw, int userId, String pkg);
+    void dumpUser(IndentingPrintWriter idpw, int userId, List<String> pkgs);
 
     void dumpState(String[] args, PrintWriter pw);
 
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
index 69f4748..ff7944d 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
@@ -37,8 +37,6 @@
 import android.app.job.JobWorkItem;
 import android.app.usage.UsageStatsManager;
 import android.app.usage.UsageStatsManagerInternal;
-import android.compat.annotation.ChangeId;
-import android.compat.annotation.EnabledAfter;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.ContentResolver;
@@ -57,7 +55,6 @@
 import android.os.BatteryStats;
 import android.os.BatteryStatsInternal;
 import android.os.Binder;
-import android.os.Build;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
@@ -80,6 +77,7 @@
 import android.util.TimeUtils;
 import android.util.proto.ProtoOutputStream;
 
+import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.IBatteryStats;
 import com.android.internal.util.ArrayUtils;
@@ -90,7 +88,6 @@
 import com.android.server.DeviceIdleInternal;
 import com.android.server.FgThread;
 import com.android.server.LocalServices;
-import com.android.server.compat.PlatformCompat;
 import com.android.server.job.JobSchedulerServiceDumpProto.ActiveJob;
 import com.android.server.job.JobSchedulerServiceDumpProto.PendingJob;
 import com.android.server.job.controllers.BackgroundJobsController;
@@ -155,16 +152,6 @@
     /** The maximum number of jobs that we allow an unprivileged app to schedule */
     private static final int MAX_JOBS_PER_APP = 100;
 
-    /**
-     * {@link #schedule(JobInfo)}, {@link #scheduleAsPackage(JobInfo, String, int, String)}, and
-     * {@link #enqueue(JobInfo, JobWorkItem)} will throw a {@link IllegalStateException} if the app
-     * calls the APIs too frequently.
-     */
-    @ChangeId
-    // This means the change will be enabled for target SDK larger than 29 (Q), meaning R and up.
-    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
-    protected static final long CRASH_ON_EXCEEDED_LIMIT = 144363383L;
-
     @VisibleForTesting
     public static Clock sSystemClock = Clock.systemUTC();
 
@@ -262,9 +249,11 @@
      */
     private final List<JobRestriction> mJobRestrictions;
 
+    @NonNull
+    private final String mSystemGalleryPackage;
+
     private final CountQuotaTracker mQuotaTracker;
     private static final String QUOTA_TRACKER_SCHEDULE_PERSISTED_TAG = ".schedulePersisted()";
-    private final PlatformCompat mPlatformCompat;
 
     /**
      * Queue of pending jobs. The JobServiceContext class will receive jobs from this list
@@ -473,13 +462,17 @@
      */
     public static class Constants {
         // Key names stored in the settings value.
-        private static final String KEY_MIN_IDLE_COUNT = "min_idle_count";
-        private static final String KEY_MIN_CHARGING_COUNT = "min_charging_count";
-        private static final String KEY_MIN_BATTERY_NOT_LOW_COUNT = "min_battery_not_low_count";
-        private static final String KEY_MIN_STORAGE_NOT_LOW_COUNT = "min_storage_not_low_count";
-        private static final String KEY_MIN_CONNECTIVITY_COUNT = "min_connectivity_count";
-        private static final String KEY_MIN_CONTENT_COUNT = "min_content_count";
-        private static final String KEY_MIN_READY_JOBS_COUNT = "min_ready_jobs_count";
+        // TODO(124466289): remove deprecated flags when we migrate to DeviceConfig
+        private static final String DEPRECATED_KEY_MIN_IDLE_COUNT = "min_idle_count";
+        private static final String DEPRECATED_KEY_MIN_CHARGING_COUNT = "min_charging_count";
+        private static final String DEPRECATED_KEY_MIN_BATTERY_NOT_LOW_COUNT =
+                "min_battery_not_low_count";
+        private static final String DEPRECATED_KEY_MIN_STORAGE_NOT_LOW_COUNT =
+                "min_storage_not_low_count";
+        private static final String DEPRECATED_KEY_MIN_CONNECTIVITY_COUNT =
+                "min_connectivity_count";
+        private static final String DEPRECATED_KEY_MIN_CONTENT_COUNT = "min_content_count";
+        private static final String DEPRECATED_KEY_MIN_READY_JOBS_COUNT = "min_ready_jobs_count";
         private static final String KEY_MIN_READY_NON_ACTIVE_JOBS_COUNT =
                 "min_ready_non_active_jobs_count";
         private static final String KEY_MAX_NON_ACTIVE_JOB_BATCH_DELAY_MS =
@@ -494,9 +487,10 @@
         private static final String DEPRECATED_KEY_BG_LOW_JOB_COUNT = "bg_low_job_count";
         private static final String DEPRECATED_KEY_BG_CRITICAL_JOB_COUNT = "bg_critical_job_count";
 
-        private static final String KEY_MAX_STANDARD_RESCHEDULE_COUNT
+        private static final String DEPRECATED_KEY_MAX_STANDARD_RESCHEDULE_COUNT
                 = "max_standard_reschedule_count";
-        private static final String KEY_MAX_WORK_RESCHEDULE_COUNT = "max_work_reschedule_count";
+        private static final String DEPRECATED_KEY_MAX_WORK_RESCHEDULE_COUNT =
+                "max_work_reschedule_count";
         private static final String KEY_MIN_LINEAR_BACKOFF_TIME = "min_linear_backoff_time";
         private static final String KEY_MIN_EXP_BACKOFF_TIME = "min_exp_backoff_time";
         private static final String DEPRECATED_KEY_STANDBY_HEARTBEAT_TIME =
@@ -514,19 +508,10 @@
         private static final String KEY_API_QUOTA_SCHEDULE_THROW_EXCEPTION =
                 "aq_schedule_throw_exception";
 
-        private static final int DEFAULT_MIN_IDLE_COUNT = 1;
-        private static final int DEFAULT_MIN_CHARGING_COUNT = 1;
-        private static final int DEFAULT_MIN_BATTERY_NOT_LOW_COUNT = 1;
-        private static final int DEFAULT_MIN_STORAGE_NOT_LOW_COUNT = 1;
-        private static final int DEFAULT_MIN_CONNECTIVITY_COUNT = 1;
-        private static final int DEFAULT_MIN_CONTENT_COUNT = 1;
-        private static final int DEFAULT_MIN_READY_JOBS_COUNT = 1;
         private static final int DEFAULT_MIN_READY_NON_ACTIVE_JOBS_COUNT = 5;
         private static final long DEFAULT_MAX_NON_ACTIVE_JOB_BATCH_DELAY_MS = 31 * MINUTE_IN_MILLIS;
         private static final float DEFAULT_HEAVY_USE_FACTOR = .9f;
         private static final float DEFAULT_MODERATE_USE_FACTOR = .5f;
-        private static final int DEFAULT_MAX_STANDARD_RESCHEDULE_COUNT = Integer.MAX_VALUE;
-        private static final int DEFAULT_MAX_WORK_RESCHEDULE_COUNT = Integer.MAX_VALUE;
         private static final long DEFAULT_MIN_LINEAR_BACKOFF_TIME = JobInfo.MIN_BACKOFF_MILLIS;
         private static final long DEFAULT_MIN_EXP_BACKOFF_TIME = JobInfo.MIN_BACKOFF_MILLIS;
         private static final float DEFAULT_CONN_CONGESTION_DELAY_FRAC = 0.5f;
@@ -537,44 +522,6 @@
         private static final boolean DEFAULT_API_QUOTA_SCHEDULE_THROW_EXCEPTION = true;
 
         /**
-         * Minimum # of idle jobs that must be ready in order to force the JMS to schedule things
-         * early.
-         */
-        int MIN_IDLE_COUNT = DEFAULT_MIN_IDLE_COUNT;
-        /**
-         * Minimum # of charging jobs that must be ready in order to force the JMS to schedule
-         * things early.
-         */
-        int MIN_CHARGING_COUNT = DEFAULT_MIN_CHARGING_COUNT;
-        /**
-         * Minimum # of "battery not low" jobs that must be ready in order to force the JMS to
-         * schedule things early.
-         */
-        int MIN_BATTERY_NOT_LOW_COUNT = DEFAULT_MIN_BATTERY_NOT_LOW_COUNT;
-        /**
-         * Minimum # of "storage not low" jobs that must be ready in order to force the JMS to
-         * schedule things early.
-         */
-        int MIN_STORAGE_NOT_LOW_COUNT = DEFAULT_MIN_STORAGE_NOT_LOW_COUNT;
-        /**
-         * Minimum # of connectivity jobs that must be ready in order to force the JMS to schedule
-         * things early.  1 == Run connectivity jobs as soon as ready.
-         */
-        int MIN_CONNECTIVITY_COUNT = DEFAULT_MIN_CONNECTIVITY_COUNT;
-        /**
-         * Minimum # of content trigger jobs that must be ready in order to force the JMS to
-         * schedule things early.
-         */
-        int MIN_CONTENT_COUNT = DEFAULT_MIN_CONTENT_COUNT;
-        /**
-         * Minimum # of jobs (with no particular constraints) for which the JMS will be happy
-         * running some work early.  This (and thus the other min counts) is now set to 1, to
-         * prevent any batching at this level.  Since we now do batching through doze, that is
-         * a much better mechanism.
-         */
-        int MIN_READY_JOBS_COUNT = DEFAULT_MIN_READY_JOBS_COUNT;
-
-        /**
          * Minimum # of non-ACTIVE jobs for which the JMS will be happy running some work early.
          */
         int MIN_READY_NON_ACTIVE_JOBS_COUNT = DEFAULT_MIN_READY_NON_ACTIVE_JOBS_COUNT;
@@ -640,16 +587,6 @@
                         "screen_off_job_concurrency_increase_delay_ms", 30_000);
 
         /**
-         * The maximum number of times we allow a job to have itself rescheduled before
-         * giving up on it, for standard jobs.
-         */
-        int MAX_STANDARD_RESCHEDULE_COUNT = DEFAULT_MAX_STANDARD_RESCHEDULE_COUNT;
-        /**
-         * The maximum number of times we allow a job to have itself rescheduled before
-         * giving up on it, for jobs that are executing work.
-         */
-        int MAX_WORK_RESCHEDULE_COUNT = DEFAULT_MAX_WORK_RESCHEDULE_COUNT;
-        /**
          * The minimum backoff time to allow for linear backoff.
          */
         long MIN_LINEAR_BACKOFF_TIME = DEFAULT_MIN_LINEAR_BACKOFF_TIME;
@@ -698,20 +635,6 @@
                 Slog.e(TAG, "Bad jobscheduler settings", e);
             }
 
-            MIN_IDLE_COUNT = mParser.getInt(KEY_MIN_IDLE_COUNT,
-                    DEFAULT_MIN_IDLE_COUNT);
-            MIN_CHARGING_COUNT = mParser.getInt(KEY_MIN_CHARGING_COUNT,
-                    DEFAULT_MIN_CHARGING_COUNT);
-            MIN_BATTERY_NOT_LOW_COUNT = mParser.getInt(KEY_MIN_BATTERY_NOT_LOW_COUNT,
-                    DEFAULT_MIN_BATTERY_NOT_LOW_COUNT);
-            MIN_STORAGE_NOT_LOW_COUNT = mParser.getInt(KEY_MIN_STORAGE_NOT_LOW_COUNT,
-                    DEFAULT_MIN_STORAGE_NOT_LOW_COUNT);
-            MIN_CONNECTIVITY_COUNT = mParser.getInt(KEY_MIN_CONNECTIVITY_COUNT,
-                    DEFAULT_MIN_CONNECTIVITY_COUNT);
-            MIN_CONTENT_COUNT = mParser.getInt(KEY_MIN_CONTENT_COUNT,
-                    DEFAULT_MIN_CONTENT_COUNT);
-            MIN_READY_JOBS_COUNT = mParser.getInt(KEY_MIN_READY_JOBS_COUNT,
-                    DEFAULT_MIN_READY_JOBS_COUNT);
             MIN_READY_NON_ACTIVE_JOBS_COUNT = mParser.getInt(
                     KEY_MIN_READY_NON_ACTIVE_JOBS_COUNT,
                     DEFAULT_MIN_READY_NON_ACTIVE_JOBS_COUNT);
@@ -735,10 +658,6 @@
 
             SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS.parse(mParser);
 
-            MAX_STANDARD_RESCHEDULE_COUNT = mParser.getInt(KEY_MAX_STANDARD_RESCHEDULE_COUNT,
-                    DEFAULT_MAX_STANDARD_RESCHEDULE_COUNT);
-            MAX_WORK_RESCHEDULE_COUNT = mParser.getInt(KEY_MAX_WORK_RESCHEDULE_COUNT,
-                    DEFAULT_MAX_WORK_RESCHEDULE_COUNT);
             MIN_LINEAR_BACKOFF_TIME = mParser.getDurationMillis(KEY_MIN_LINEAR_BACKOFF_TIME,
                     DEFAULT_MIN_LINEAR_BACKOFF_TIME);
             MIN_EXP_BACKOFF_TIME = mParser.getDurationMillis(KEY_MIN_EXP_BACKOFF_TIME,
@@ -764,13 +683,6 @@
         void dump(IndentingPrintWriter pw) {
             pw.println("Settings:");
             pw.increaseIndent();
-            pw.printPair(KEY_MIN_IDLE_COUNT, MIN_IDLE_COUNT).println();
-            pw.printPair(KEY_MIN_CHARGING_COUNT, MIN_CHARGING_COUNT).println();
-            pw.printPair(KEY_MIN_BATTERY_NOT_LOW_COUNT, MIN_BATTERY_NOT_LOW_COUNT).println();
-            pw.printPair(KEY_MIN_STORAGE_NOT_LOW_COUNT, MIN_STORAGE_NOT_LOW_COUNT).println();
-            pw.printPair(KEY_MIN_CONNECTIVITY_COUNT, MIN_CONNECTIVITY_COUNT).println();
-            pw.printPair(KEY_MIN_CONTENT_COUNT, MIN_CONTENT_COUNT).println();
-            pw.printPair(KEY_MIN_READY_JOBS_COUNT, MIN_READY_JOBS_COUNT).println();
             pw.printPair(KEY_MIN_READY_NON_ACTIVE_JOBS_COUNT,
                     MIN_READY_NON_ACTIVE_JOBS_COUNT).println();
             pw.printPair(KEY_MAX_NON_ACTIVE_JOB_BATCH_DELAY_MS,
@@ -790,8 +702,6 @@
 
             SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS.dump(pw, "");
 
-            pw.printPair(KEY_MAX_STANDARD_RESCHEDULE_COUNT, MAX_STANDARD_RESCHEDULE_COUNT).println();
-            pw.printPair(KEY_MAX_WORK_RESCHEDULE_COUNT, MAX_WORK_RESCHEDULE_COUNT).println();
             pw.printPair(KEY_MIN_LINEAR_BACKOFF_TIME, MIN_LINEAR_BACKOFF_TIME).println();
             pw.printPair(KEY_MIN_EXP_BACKOFF_TIME, MIN_EXP_BACKOFF_TIME).println();
             pw.printPair(KEY_CONN_CONGESTION_DELAY_FRAC, CONN_CONGESTION_DELAY_FRAC).println();
@@ -807,13 +717,6 @@
         }
 
         void dump(ProtoOutputStream proto) {
-            proto.write(ConstantsProto.MIN_IDLE_COUNT, MIN_IDLE_COUNT);
-            proto.write(ConstantsProto.MIN_CHARGING_COUNT, MIN_CHARGING_COUNT);
-            proto.write(ConstantsProto.MIN_BATTERY_NOT_LOW_COUNT, MIN_BATTERY_NOT_LOW_COUNT);
-            proto.write(ConstantsProto.MIN_STORAGE_NOT_LOW_COUNT, MIN_STORAGE_NOT_LOW_COUNT);
-            proto.write(ConstantsProto.MIN_CONNECTIVITY_COUNT, MIN_CONNECTIVITY_COUNT);
-            proto.write(ConstantsProto.MIN_CONTENT_COUNT, MIN_CONTENT_COUNT);
-            proto.write(ConstantsProto.MIN_READY_JOBS_COUNT, MIN_READY_JOBS_COUNT);
             proto.write(ConstantsProto.MIN_READY_NON_ACTIVE_JOBS_COUNT,
                     MIN_READY_NON_ACTIVE_JOBS_COUNT);
             proto.write(ConstantsProto.MAX_NON_ACTIVE_JOB_BATCH_DELAY_MS,
@@ -827,8 +730,6 @@
             SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS.dumpProto(proto,
                     ConstantsProto.SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS);
 
-            proto.write(ConstantsProto.MAX_STANDARD_RESCHEDULE_COUNT, MAX_STANDARD_RESCHEDULE_COUNT);
-            proto.write(ConstantsProto.MAX_WORK_RESCHEDULE_COUNT, MAX_WORK_RESCHEDULE_COUNT);
             proto.write(ConstantsProto.MIN_LINEAR_BACKOFF_TIME_MS, MIN_LINEAR_BACKOFF_TIME);
             proto.write(ConstantsProto.MIN_EXP_BACKOFF_TIME_MS, MIN_EXP_BACKOFF_TIME);
             proto.write(ConstantsProto.CONN_CONGESTION_DELAY_FRAC, CONN_CONGESTION_DELAY_FRAC);
@@ -1074,9 +975,7 @@
                 Slog.e(TAG, userId + "-" + pkg + " has called schedule() too many times");
                 mAppStandbyInternal.restrictApp(
                         pkg, userId, UsageStatsManager.REASON_SUB_RESTRICT_BUGGY);
-                if (mConstants.API_QUOTA_SCHEDULE_THROW_EXCEPTION
-                        && mPlatformCompat.isChangeEnabledByPackageName(
-                                CRASH_ON_EXCEEDED_LIMIT, pkg, userId)) {
+                if (mConstants.API_QUOTA_SCHEDULE_THROW_EXCEPTION) {
                     final boolean isDebuggable;
                     synchronized (mLock) {
                         if (!mDebuggableApps.containsKey(packageName)) {
@@ -1390,18 +1289,8 @@
                     // Effective standby bucket can change after this in some situations so use
                     // the real bucket so that the job is tracked by the controllers.
                     if (js.getStandbyBucket() == RESTRICTED_INDEX) {
-                        js.addDynamicConstraint(JobStatus.CONSTRAINT_BATTERY_NOT_LOW);
-                        js.addDynamicConstraint(JobStatus.CONSTRAINT_CHARGING);
-                        js.addDynamicConstraint(JobStatus.CONSTRAINT_CONNECTIVITY);
-                        js.addDynamicConstraint(JobStatus.CONSTRAINT_IDLE);
-
                         mRestrictiveControllers.get(j).startTrackingRestrictedJobLocked(js);
                     } else {
-                        js.removeDynamicConstraint(JobStatus.CONSTRAINT_BATTERY_NOT_LOW);
-                        js.removeDynamicConstraint(JobStatus.CONSTRAINT_CHARGING);
-                        js.removeDynamicConstraint(JobStatus.CONSTRAINT_CONNECTIVITY);
-                        js.removeDynamicConstraint(JobStatus.CONSTRAINT_IDLE);
-
                         mRestrictiveControllers.get(j).stopTrackingRestrictedJobLocked(js);
                     }
                 }
@@ -1468,8 +1357,6 @@
         // Set up the app standby bucketing tracker
         mStandbyTracker = new StandbyTracker();
         mUsageStats = LocalServices.getService(UsageStatsManagerInternal.class);
-        mPlatformCompat =
-                (PlatformCompat) ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE);
         mQuotaTracker = new CountQuotaTracker(context, Categorizer.SINGLE_CATEGORIZER);
         mQuotaTracker.setCountLimit(Category.SINGLE_CATEGORY,
                 mConstants.API_QUOTA_SCHEDULE_COUNT,
@@ -1511,6 +1398,9 @@
         mJobRestrictions = new ArrayList<>();
         mJobRestrictions.add(new ThermalStatusRestriction(this));
 
+        mSystemGalleryPackage = Objects.requireNonNull(
+                context.getString(R.string.config_systemGallery));
+
         // If the job store determined that it can't yet reschedule persisted jobs,
         // we need to start watching the clock.
         if (!mJobs.jobTimesInflatedValid()) {
@@ -1738,19 +1628,6 @@
         final int backoffAttempts = failureToReschedule.getNumFailures() + 1;
         long delayMillis;
 
-        if (failureToReschedule.hasWorkLocked()) {
-            if (backoffAttempts > mConstants.MAX_WORK_RESCHEDULE_COUNT) {
-                Slog.w(TAG, "Not rescheduling " + failureToReschedule + ": attempt #"
-                        + backoffAttempts + " > work limit "
-                        + mConstants.MAX_STANDARD_RESCHEDULE_COUNT);
-                return null;
-            }
-        } else if (backoffAttempts > mConstants.MAX_STANDARD_RESCHEDULE_COUNT) {
-            Slog.w(TAG, "Not rescheduling " + failureToReschedule + ": attempt #"
-                    + backoffAttempts + " > std limit " + mConstants.MAX_STANDARD_RESCHEDULE_COUNT);
-            return null;
-        }
-
         switch (job.getBackoffPolicy()) {
             case JobInfo.BACKOFF_POLICY_LINEAR: {
                 long backoff = initialBackoffMillis;
@@ -2148,13 +2025,6 @@
      * policies on when we want to execute jobs.
      */
     final class MaybeReadyJobQueueFunctor implements Consumer<JobStatus> {
-        int chargingCount;
-        int batteryNotLowCount;
-        int storageNotLowCount;
-        int idleCount;
-        int backoffCount;
-        int connectivityCount;
-        int contentCount;
         int forceBatchedCount;
         int unbatchedCount;
         final List<JobStatus> runnableJobs = new ArrayList<>();
@@ -2177,13 +2047,25 @@
                     }
                 } catch (RemoteException e) {
                 }
+
+                final boolean shouldForceBatchJob;
                 // Restricted jobs must always be batched
-                if (job.getEffectiveStandbyBucket() == RESTRICTED_INDEX
-                        || (mConstants.MIN_READY_NON_ACTIVE_JOBS_COUNT > 1
-                        && job.getEffectiveStandbyBucket() != ACTIVE_INDEX
-                        && (job.getFirstForceBatchedTimeElapsed() == 0
-                        || sElapsedRealtimeClock.millis() - job.getFirstForceBatchedTimeElapsed()
-                                < mConstants.MAX_NON_ACTIVE_JOB_BATCH_DELAY_MS))) {
+                if (job.getEffectiveStandbyBucket() == RESTRICTED_INDEX) {
+                    shouldForceBatchJob = true;
+                } else if (job.getNumFailures() > 0) {
+                    shouldForceBatchJob = false;
+                } else {
+                    final long nowElapsed = sElapsedRealtimeClock.millis();
+                    final boolean batchDelayExpired = job.getFirstForceBatchedTimeElapsed() > 0
+                            && nowElapsed - job.getFirstForceBatchedTimeElapsed()
+                            >= mConstants.MAX_NON_ACTIVE_JOB_BATCH_DELAY_MS;
+                    shouldForceBatchJob =
+                            mConstants.MIN_READY_NON_ACTIVE_JOBS_COUNT > 1
+                                    && job.getEffectiveStandbyBucket() != ACTIVE_INDEX
+                                    && !batchDelayExpired;
+                }
+
+                if (shouldForceBatchJob) {
                     // Force batching non-ACTIVE jobs. Don't include them in the other counts.
                     forceBatchedCount++;
                     if (job.getFirstForceBatchedTimeElapsed() == 0) {
@@ -2191,27 +2073,6 @@
                     }
                 } else {
                     unbatchedCount++;
-                    if (job.getNumFailures() > 0) {
-                        backoffCount++;
-                    }
-                    if (job.hasIdleConstraint()) {
-                        idleCount++;
-                    }
-                    if (job.hasConnectivityConstraint()) {
-                        connectivityCount++;
-                    }
-                    if (job.hasChargingConstraint()) {
-                        chargingCount++;
-                    }
-                    if (job.hasBatteryNotLowConstraint()) {
-                        batteryNotLowCount++;
-                    }
-                    if (job.hasStorageNotLowConstraint()) {
-                        storageNotLowCount++;
-                    }
-                    if (job.hasContentTriggerConstraint()) {
-                        contentCount++;
-                    }
                 }
                 runnableJobs.add(job);
             } else {
@@ -2220,16 +2081,8 @@
         }
 
         public void postProcess() {
-            if (backoffCount > 0 ||
-                    idleCount >= mConstants.MIN_IDLE_COUNT ||
-                    connectivityCount >= mConstants.MIN_CONNECTIVITY_COUNT ||
-                    chargingCount >= mConstants.MIN_CHARGING_COUNT ||
-                    batteryNotLowCount >= mConstants.MIN_BATTERY_NOT_LOW_COUNT ||
-                    storageNotLowCount >= mConstants.MIN_STORAGE_NOT_LOW_COUNT ||
-                    contentCount >= mConstants.MIN_CONTENT_COUNT ||
-                    forceBatchedCount >= mConstants.MIN_READY_NON_ACTIVE_JOBS_COUNT ||
-                    (unbatchedCount > 0 && (unbatchedCount + forceBatchedCount)
-                            >= mConstants.MIN_READY_JOBS_COUNT)) {
+            if (unbatchedCount > 0
+                    || forceBatchedCount >= mConstants.MIN_READY_NON_ACTIVE_JOBS_COUNT) {
                 if (DEBUG) {
                     Slog.d(TAG, "maybeQueueReadyJobsForExecutionLocked: Running jobs.");
                 }
@@ -2250,13 +2103,6 @@
 
         @VisibleForTesting
         void reset() {
-            chargingCount = 0;
-            idleCount =  0;
-            backoffCount = 0;
-            connectivityCount = 0;
-            batteryNotLowCount = 0;
-            storageNotLowCount = 0;
-            contentCount = 0;
             forceBatchedCount = 0;
             unbatchedCount = 0;
             runnableJobs.clear();
@@ -2520,6 +2366,11 @@
         }
 
         @Override
+        public String getMediaBackupPackage() {
+            return mSystemGalleryPackage;
+        }
+
+        @Override
         public void reportAppUsage(String packageName, int userId) {
             JobSchedulerService.this.reportAppUsage(packageName, userId);
         }
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/ContentObserverController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/ContentObserverController.java
index a775cf5..5fcd774 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/ContentObserverController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/ContentObserverController.java
@@ -344,7 +344,7 @@
                     mContext.getContentResolver().unregisterContentObserver(obs);
                     ArrayMap<JobInfo.TriggerContentUri, ObserverInstance> observerOfUser =
                             mObservers.get(obs.mUserId);
-                    if (observerOfUser !=  null) {
+                    if (observerOfUser != null) {
                         observerOfUser.remove(obs.mUri);
                     }
                 }
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java
index f706260..789f20b 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java
@@ -17,6 +17,9 @@
 package com.android.server.job.controllers;
 
 import static com.android.server.job.JobSchedulerService.ACTIVE_INDEX;
+import static com.android.server.job.JobSchedulerService.NEVER_INDEX;
+import static com.android.server.job.JobSchedulerService.RESTRICTED_INDEX;
+import static com.android.server.job.JobSchedulerService.WORKING_INDEX;
 import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock;
 
 import android.app.AppGlobals;
@@ -28,6 +31,7 @@
 import android.net.Uri;
 import android.os.RemoteException;
 import android.os.UserHandle;
+import android.provider.MediaStore;
 import android.text.format.DateFormat;
 import android.util.ArraySet;
 import android.util.Pair;
@@ -63,26 +67,36 @@
  * @hide
  */
 public final class JobStatus {
-    static final String TAG = "JobSchedulerService";
+    private static final String TAG = "JobScheduler.JobStatus";
     static final boolean DEBUG = JobSchedulerService.DEBUG;
 
     public static final long NO_LATEST_RUNTIME = Long.MAX_VALUE;
     public static final long NO_EARLIEST_RUNTIME = 0L;
 
-    public static final int CONSTRAINT_CHARGING = JobInfo.CONSTRAINT_FLAG_CHARGING; // 1 < 0
-    public static final int CONSTRAINT_IDLE = JobInfo.CONSTRAINT_FLAG_DEVICE_IDLE;  // 1 << 2
-    public static final int CONSTRAINT_BATTERY_NOT_LOW =
-            JobInfo.CONSTRAINT_FLAG_BATTERY_NOT_LOW; // 1 << 1
+    static final int CONSTRAINT_CHARGING = JobInfo.CONSTRAINT_FLAG_CHARGING; // 1 < 0
+    static final int CONSTRAINT_IDLE = JobInfo.CONSTRAINT_FLAG_DEVICE_IDLE;  // 1 << 2
+    static final int CONSTRAINT_BATTERY_NOT_LOW = JobInfo.CONSTRAINT_FLAG_BATTERY_NOT_LOW; // 1 << 1
     static final int CONSTRAINT_STORAGE_NOT_LOW = JobInfo.CONSTRAINT_FLAG_STORAGE_NOT_LOW; // 1 << 3
     static final int CONSTRAINT_TIMING_DELAY = 1<<31;
     static final int CONSTRAINT_DEADLINE = 1<<30;
-    public static final int CONSTRAINT_CONNECTIVITY = 1 << 28;
+    static final int CONSTRAINT_CONNECTIVITY = 1 << 28;
     static final int CONSTRAINT_CONTENT_TRIGGER = 1<<26;
     static final int CONSTRAINT_DEVICE_NOT_DOZING = 1 << 25; // Implicit constraint
     static final int CONSTRAINT_WITHIN_QUOTA = 1 << 24;      // Implicit constraint
     static final int CONSTRAINT_BACKGROUND_NOT_RESTRICTED = 1 << 22; // Implicit constraint
 
     /**
+     * The additional set of dynamic constraints that must be met if the job's effective bucket is
+     * {@link JobSchedulerService#RESTRICTED_INDEX}. Connectivity can be ignored if the job doesn't
+     * need network.
+     */
+    private static final int DYNAMIC_RESTRICTED_CONSTRAINTS =
+            CONSTRAINT_BATTERY_NOT_LOW
+                    | CONSTRAINT_CHARGING
+                    | CONSTRAINT_CONNECTIVITY
+                    | CONSTRAINT_IDLE;
+
+    /**
      * The constraints that we want to log to statsd.
      *
      * Constraints that can be inferred from other atoms have been excluded to avoid logging too
@@ -195,6 +209,18 @@
      */
     private int mDynamicConstraints = 0;
 
+    /**
+     * Indicates whether the job is responsible for backing up media, so we can be lenient in
+     * applying standby throttling.
+     *
+     * Doesn't exempt jobs with a deadline constraint, as they can be started without any content or
+     * network changes, in which case this exemption does not make sense.
+     *
+     * TODO(b/149519887): Use a more explicit signal, maybe an API flag, that the scheduling package
+     * needs to provide at the time of scheduling a job.
+     */
+    private final boolean mHasMediaBackupExemption;
+
     // Set to true if doze constraint was satisfied due to app being whitelisted.
     public boolean dozeWhitelisted;
 
@@ -403,9 +429,11 @@
         this.mOriginalLatestRunTimeElapsedMillis = latestRunTimeElapsedMillis;
         this.numFailures = numFailures;
 
+        boolean requiresNetwork = false;
         int requiredConstraints = job.getConstraintFlags();
         if (job.getRequiredNetwork() != null) {
             requiredConstraints |= CONSTRAINT_CONNECTIVITY;
+            requiresNetwork = true;
         }
         if (earliestRunTimeElapsedMillis != NO_EARLIEST_RUNTIME) {
             requiredConstraints |= CONSTRAINT_TIMING_DELAY;
@@ -413,13 +441,25 @@
         if (latestRunTimeElapsedMillis != NO_LATEST_RUNTIME) {
             requiredConstraints |= CONSTRAINT_DEADLINE;
         }
+        boolean mediaOnly = false;
         if (job.getTriggerContentUris() != null) {
             requiredConstraints |= CONSTRAINT_CONTENT_TRIGGER;
+            mediaOnly = true;
+            for (JobInfo.TriggerContentUri uri : job.getTriggerContentUris()) {
+                if (!MediaStore.AUTHORITY.equals(uri.getUri().getAuthority())) {
+                    mediaOnly = false;
+                    break;
+                }
+            }
         }
         this.requiredConstraints = requiredConstraints;
         mRequiredConstraintsOfInterest = requiredConstraints & CONSTRAINTS_OF_INTEREST;
         mReadyNotDozing = (job.getFlags() & JobInfo.FLAG_WILL_BE_FOREGROUND) != 0;
-        mReadyDynamicSatisfied = true;
+        if (standbyBucket == RESTRICTED_INDEX) {
+            addDynamicConstraints(DYNAMIC_RESTRICTED_CONSTRAINTS);
+        } else {
+            mReadyDynamicSatisfied = true;
+        }
 
         mLastSuccessfulRunTime = lastSuccessfulRunTime;
         mLastFailedRunTime = lastFailedRunTime;
@@ -434,6 +474,9 @@
             // our source UID into place.
             job.getRequiredNetwork().networkCapabilities.setSingleUid(this.sourceUid);
         }
+        final JobSchedulerInternal jsi = LocalServices.getService(JobSchedulerInternal.class);
+        mHasMediaBackupExemption = !job.hasLateConstraint() && mediaOnly && requiresNetwork
+                && this.sourcePackageName.equals(jsi.getMediaBackupPackage());
     }
 
     /** Copy constructor: used specifically when cloning JobStatus objects for persistence,
@@ -529,7 +572,6 @@
 
         int standbyBucket = JobSchedulerService.standbyBucketForPackage(jobPackage,
                 sourceUserId, elapsedNow);
-        JobSchedulerInternal js = LocalServices.getService(JobSchedulerInternal.class);
         return new JobStatus(job, callingUid, sourcePkg, sourceUserId,
                 standbyBucket, tag, 0,
                 earliestRunTimeElapsedMillis, latestRunTimeElapsedMillis,
@@ -718,7 +760,14 @@
             // like other ACTIVE apps.
             return ACTIVE_INDEX;
         }
-        return getStandbyBucket();
+        final int actualBucket = getStandbyBucket();
+        if (actualBucket != RESTRICTED_INDEX && actualBucket != NEVER_INDEX
+                && mHasMediaBackupExemption) {
+            // Cap it at WORKING_INDEX as media back up jobs are important to the user, and the
+            // source package may not have been used directly in a while.
+            return Math.min(WORKING_INDEX, actualBucket);
+        }
+        return actualBucket;
     }
 
     /** Returns the real standby bucket of the job. */
@@ -727,6 +776,14 @@
     }
 
     public void setStandbyBucket(int newBucket) {
+        if (newBucket == RESTRICTED_INDEX) {
+            // Adding to the bucket.
+            addDynamicConstraints(DYNAMIC_RESTRICTED_CONSTRAINTS);
+        } else if (standbyBucket == RESTRICTED_INDEX) {
+            // Removing from the RESTRICTED bucket.
+            removeDynamicConstraints(DYNAMIC_RESTRICTED_CONSTRAINTS);
+        }
+
         standbyBucket = newBucket;
     }
 
@@ -1054,6 +1111,11 @@
         if (old == state) {
             return false;
         }
+        if (DEBUG) {
+            Slog.v(TAG,
+                    "Constraint " + constraint + " is " + (!state ? "NOT " : "") + "satisfied for "
+                            + toShortString());
+        }
         satisfiedConstraints = (satisfiedConstraints&~constraint) | (state ? constraint : 0);
         mSatisfiedConstraintsOfInterest = satisfiedConstraints & CONSTRAINTS_OF_INTEREST;
         mReadyDynamicSatisfied =
@@ -1086,38 +1148,40 @@
     }
 
     /**
-     * Indicates that this job cannot run without the specified constraint. This is evaluated
+     * Indicates that this job cannot run without the specified constraints. This is evaluated
      * separately from the job's explicitly requested constraints and MUST be satisfied before
      * the job can run if the app doesn't have quota.
-     *
      */
-    public void addDynamicConstraint(int constraint) {
-        if (constraint == CONSTRAINT_WITHIN_QUOTA) {
+    private void addDynamicConstraints(int constraints) {
+        if ((constraints & CONSTRAINT_WITHIN_QUOTA) != 0) {
+            // Quota should never be used as a dynamic constraint.
             Slog.wtf(TAG, "Tried to set quota as a dynamic constraint");
-            return;
+            constraints &= ~CONSTRAINT_WITHIN_QUOTA;
         }
 
         // Connectivity and content trigger are special since they're only valid to add if the
         // job has requested network or specific content URIs. Adding these constraints to jobs
         // that don't need them doesn't make sense.
-        if ((constraint == CONSTRAINT_CONNECTIVITY && !hasConnectivityConstraint())
-                || (constraint == CONSTRAINT_CONTENT_TRIGGER && !hasContentTriggerConstraint())) {
-            return;
+        if (!hasConnectivityConstraint()) {
+            constraints &= ~CONSTRAINT_CONNECTIVITY;
+        }
+        if (!hasContentTriggerConstraint()) {
+            constraints &= ~CONSTRAINT_CONTENT_TRIGGER;
         }
 
-        mDynamicConstraints |= constraint;
+        mDynamicConstraints |= constraints;
         mReadyDynamicSatisfied =
                 mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints);
     }
 
     /**
-     * Removes a dynamic constraint from a job, meaning that the requirement is not required for
+     * Removes dynamic constraints from a job, meaning that the requirements are not required for
      * the job to run (if the job itself hasn't requested the constraint. This is separate from
      * the job's explicitly requested constraints and does not remove those requested constraints.
      *
      */
-    public void removeDynamicConstraint(int constraint) {
-        mDynamicConstraints &= ~constraint;
+    private void removeDynamicConstraints(int constraints) {
+        mDynamicConstraints &= ~constraints;
         mReadyDynamicSatisfied =
                 mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints);
     }
@@ -1193,7 +1257,11 @@
 
     private boolean isReady(int satisfiedConstraints) {
         // Quota and dynamic constraints trump all other constraints.
-        if (!mReadyWithinQuota && !mReadyDynamicSatisfied) {
+        // NEVER jobs are not supposed to run at all. Since we're using quota to allow parole
+        // sessions (exempt from dynamic restrictions), we need the additional check to ensure
+        // that NEVER jobs don't run.
+        // TODO: cleanup quota and standby bucket management so we don't need the additional checks
+        if ((!mReadyWithinQuota && !mReadyDynamicSatisfied) || standbyBucket == NEVER_INDEX) {
             return false;
         }
         // Deadline constraint trumps other constraints besides quota and dynamic (except for
@@ -1580,11 +1648,11 @@
                     pw.println();
                 }
             }
-            if (job.getExtras() != null && !job.getExtras().maybeIsEmpty()) {
+            if (job.getExtras() != null && !job.getExtras().isDefinitelyEmpty()) {
                 pw.print(prefix); pw.print("  Extras: ");
                 pw.println(job.getExtras().toShortString());
             }
-            if (job.getTransientExtras() != null && !job.getTransientExtras().maybeIsEmpty()) {
+            if (job.getTransientExtras() != null && !job.getTransientExtras().isDefinitelyEmpty()) {
                 pw.print(prefix); pw.print("  Transient extras: ");
                 pw.println(job.getTransientExtras().toShortString());
             }
@@ -1801,10 +1869,10 @@
                             job.getTriggerContentMaxDelay());
                 }
             }
-            if (job.getExtras() != null && !job.getExtras().maybeIsEmpty()) {
+            if (job.getExtras() != null && !job.getExtras().isDefinitelyEmpty()) {
                 job.getExtras().dumpDebug(proto, JobStatusDumpProto.JobInfo.EXTRAS);
             }
-            if (job.getTransientExtras() != null && !job.getTransientExtras().maybeIsEmpty()) {
+            if (job.getTransientExtras() != null && !job.getTransientExtras().isDefinitelyEmpty()) {
                 job.getTransientExtras().dumpDebug(proto, JobStatusDumpProto.JobInfo.TRANSIENT_EXTRAS);
             }
             if (job.getClipData() != null) {
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 9d6e012..932c25d 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java
+++ b/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java
@@ -41,6 +41,7 @@
 import android.util.Xml;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.CollectionUtils;
 import com.android.internal.util.FastXmlSerializer;
 import com.android.internal.util.IndentingPrintWriter;
 
@@ -58,6 +59,7 @@
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Keeps track of recent active state changes in apps.
@@ -721,7 +723,7 @@
         }
     }
 
-    public void dump(IndentingPrintWriter idpw, int userId, String pkg) {
+    public void dump(IndentingPrintWriter idpw, int userId, List<String> pkgs) {
         idpw.println("App Standby States:");
         idpw.increaseIndent();
         ArrayMap<String, AppUsageHistory> userHistory = mIdleHistory.get(userId);
@@ -733,7 +735,7 @@
         for (int p = 0; p < P; p++) {
             final String packageName = userHistory.keyAt(p);
             final AppUsageHistory appUsageHistory = userHistory.valueAt(p);
-            if (pkg != null && !pkg.equals(packageName)) {
+            if (!CollectionUtils.isEmpty(pkgs) && !pkgs.contains(packageName)) {
                 continue;
             }
             idpw.print("package=" + packageName);
diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
index b1b8fba..bf61eb4 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
+++ b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
@@ -48,6 +48,7 @@
 import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RESTRICTED;
 import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_WORKING_SET;
 
+import static com.android.server.SystemService.PHASE_BOOT_COMPLETED;
 import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY;
 
 import android.annotation.NonNull;
@@ -71,9 +72,8 @@
 import android.database.ContentObserver;
 import android.hardware.display.DisplayManager;
 import android.net.ConnectivityManager;
-import android.net.Network;
-import android.net.NetworkRequest;
 import android.net.NetworkScoreManager;
+import android.os.BatteryManager;
 import android.os.BatteryStats;
 import android.os.Build;
 import android.os.Environment;
@@ -136,25 +136,59 @@
     private static final long ONE_HOUR = ONE_MINUTE * 60;
     private static final long ONE_DAY = ONE_HOUR * 24;
 
-    static final long[] SCREEN_TIME_THRESHOLDS = {
+    /**
+     * The minimum amount of time the screen must have been on before an app can time out from its
+     * current bucket to the next bucket.
+     */
+    private static final long[] SCREEN_TIME_THRESHOLDS = {
             0,
             0,
-            COMPRESS_TIME ? 120 * 1000 : 1 * ONE_HOUR,
-            COMPRESS_TIME ? 240 * 1000 : 2 * ONE_HOUR
+            COMPRESS_TIME ? 2 * ONE_MINUTE : 1 * ONE_HOUR,
+            COMPRESS_TIME ? 4 * ONE_MINUTE : 2 * ONE_HOUR,
+            COMPRESS_TIME ? 8 * ONE_MINUTE : 6 * ONE_HOUR
     };
 
-    static final long[] ELAPSED_TIME_THRESHOLDS = {
+    /** The minimum allowed values for each index in {@link #SCREEN_TIME_THRESHOLDS}. */
+    private static final long[] MINIMUM_SCREEN_TIME_THRESHOLDS = COMPRESS_TIME
+            ? new long[SCREEN_TIME_THRESHOLDS.length]
+            : new long[]{
+                    0,
+                    0,
+                    0,
+                    30 * ONE_MINUTE,
+                    ONE_HOUR
+            };
+
+    /**
+     * The minimum amount of elapsed time that must have passed before an app can time out from its
+     * current bucket to the next bucket.
+     */
+    private static final long[] ELAPSED_TIME_THRESHOLDS = {
             0,
             COMPRESS_TIME ?  1 * ONE_MINUTE : 12 * ONE_HOUR,
             COMPRESS_TIME ?  4 * ONE_MINUTE : 24 * ONE_HOUR,
-            COMPRESS_TIME ? 16 * ONE_MINUTE : 48 * ONE_HOUR
+            COMPRESS_TIME ? 16 * ONE_MINUTE : 48 * ONE_HOUR,
+            // TODO(149050681): increase timeout to 30+ days
+            COMPRESS_TIME ? 32 * ONE_MINUTE : 4 * ONE_DAY
     };
 
-    static final int[] THRESHOLD_BUCKETS = {
+    /** The minimum allowed values for each index in {@link #ELAPSED_TIME_THRESHOLDS}. */
+    private static final long[] MINIMUM_ELAPSED_TIME_THRESHOLDS = COMPRESS_TIME
+            ? new long[ELAPSED_TIME_THRESHOLDS.length]
+            : new long[]{
+                    0,
+                    ONE_HOUR,
+                    ONE_HOUR,
+                    2 * ONE_HOUR,
+                    4 * ONE_DAY
+            };
+
+    private static final int[] THRESHOLD_BUCKETS = {
             STANDBY_BUCKET_ACTIVE,
             STANDBY_BUCKET_WORKING_SET,
             STANDBY_BUCKET_FREQUENT,
-            STANDBY_BUCKET_RARE
+            STANDBY_BUCKET_RARE,
+            STANDBY_BUCKET_RESTRICTED
     };
 
     /** Default expiration time for bucket prediction. After this, use thresholds to downgrade. */
@@ -204,7 +238,15 @@
     static final int MSG_REPORT_EXEMPTED_SYNC_START = 13;
 
     long mCheckIdleIntervalMillis;
+    /**
+     * The minimum amount of time the screen must have been on before an app can time out from its
+     * current bucket to the next bucket.
+     */
     long[] mAppStandbyScreenThresholds = SCREEN_TIME_THRESHOLDS;
+    /**
+     * The minimum amount of elapsed time that must have passed before an app can time out from its
+     * current bucket to the next bucket.
+     */
     long[] mAppStandbyElapsedThresholds = ELAPSED_TIME_THRESHOLDS;
     /** Minimum time a strong usage event should keep the bucket elevated. */
     long mStrongUsageTimeoutMillis;
@@ -243,6 +285,7 @@
     long mInitialForegroundServiceStartTimeoutMillis;
 
     private volatile boolean mAppIdleEnabled;
+    private boolean mIsCharging;
     private boolean mSystemServicesReady = false;
     // There was a system update, defaults need to be initialized after services are ready
     private boolean mPendingInitializeDefaults;
@@ -318,6 +361,11 @@
         mHandler = new AppStandbyHandler(mInjector.getLooper());
         mPackageManager = mContext.getPackageManager();
 
+        DeviceStateReceiver deviceStateReceiver = new DeviceStateReceiver();
+        IntentFilter deviceStates = new IntentFilter(BatteryManager.ACTION_CHARGING);
+        deviceStates.addAction(BatteryManager.ACTION_DISCHARGING);
+        mContext.registerReceiver(deviceStateReceiver, deviceStates);
+
         synchronized (mAppIdleLock) {
             mAppIdleHistory = new AppIdleHistory(mInjector.getDataSystemDirectory(),
                     mInjector.elapsedRealtime());
@@ -375,6 +423,8 @@
             if (mPendingOneTimeCheckIdleStates) {
                 postOneTimeCheckIdleStates();
             }
+        } else if (phase == PHASE_BOOT_COMPLETED) {
+            setChargingState(mInjector.isCharging());
         }
     }
 
@@ -396,12 +446,9 @@
                 }
                 if (!packageName.equals(providerPkgName)) {
                     synchronized (mAppIdleLock) {
-                        AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId,
-                                STANDBY_BUCKET_ACTIVE, REASON_SUB_USAGE_SYNC_ADAPTER,
-                                0,
-                                elapsedRealtime + mSyncAdapterTimeoutMillis);
-                        maybeInformListeners(packageName, userId, elapsedRealtime,
-                                appUsage.currentBucket, appUsage.bucketingReason, false);
+                        reportNoninteractiveUsageLocked(packageName, userId, STANDBY_BUCKET_ACTIVE,
+                                REASON_SUB_USAGE_SYNC_ADAPTER, elapsedRealtime,
+                                mSyncAdapterTimeoutMillis);
                     }
                 }
             } catch (PackageManager.NameNotFoundException e) {
@@ -432,12 +479,8 @@
         final long elapsedRealtime = mInjector.elapsedRealtime();
 
         synchronized (mAppIdleLock) {
-            AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId,
-                    bucketToPromote, usageReason,
-                    0,
-                    elapsedRealtime + durationMillis);
-            maybeInformListeners(packageName, userId, elapsedRealtime,
-                    appUsage.currentBucket, appUsage.bucketingReason, false);
+            reportNoninteractiveUsageLocked(packageName, userId, bucketToPromote,
+                    usageReason, elapsedRealtime, durationMillis);
         }
     }
 
@@ -450,12 +493,9 @@
                     mAppIdleHistory.getAppStandbyBucket(packageName, userId, elapsedRealtime);
             if (currentBucket == STANDBY_BUCKET_NEVER) {
                 // Bring the app out of the never bucket
-                AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId,
-                        STANDBY_BUCKET_WORKING_SET, REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED,
-                        0,
-                        elapsedRealtime + mUnexemptedSyncScheduledTimeoutMillis);
-                maybeInformListeners(packageName, userId, elapsedRealtime,
-                        appUsage.currentBucket, appUsage.bucketingReason, false);
+                reportNoninteractiveUsageLocked(packageName, userId, STANDBY_BUCKET_WORKING_SET,
+                        REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED, elapsedRealtime,
+                        mUnexemptedSyncScheduledTimeoutMillis);
             }
         }
     }
@@ -466,12 +506,30 @@
         final long elapsedRealtime = mInjector.elapsedRealtime();
 
         synchronized (mAppIdleLock) {
-            AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId,
-                    STANDBY_BUCKET_ACTIVE, REASON_SUB_USAGE_EXEMPTED_SYNC_START,
-                    0,
-                    elapsedRealtime + mExemptedSyncStartTimeoutMillis);
-            maybeInformListeners(packageName, userId, elapsedRealtime,
-                    appUsage.currentBucket, appUsage.bucketingReason, false);
+            reportNoninteractiveUsageLocked(packageName, userId, STANDBY_BUCKET_ACTIVE,
+                    REASON_SUB_USAGE_EXEMPTED_SYNC_START, elapsedRealtime,
+                    mExemptedSyncStartTimeoutMillis);
+        }
+    }
+
+    private void reportNoninteractiveUsageLocked(String packageName, int userId, int bucket,
+            int subReason, long elapsedRealtime, long nextCheckDelay) {
+        final AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId, bucket,
+                subReason, 0, elapsedRealtime + nextCheckDelay);
+        mHandler.sendMessageDelayed(
+                mHandler.obtainMessage(MSG_CHECK_PACKAGE_IDLE_STATE, userId, -1, packageName),
+                nextCheckDelay);
+        maybeInformListeners(packageName, userId, elapsedRealtime, appUsage.currentBucket,
+                appUsage.bucketingReason, false);
+    }
+
+    @VisibleForTesting
+    void setChargingState(boolean isCharging) {
+        synchronized (mAppIdleLock) {
+            if (mIsCharging != isCharging) {
+                if (DEBUG) Slog.d(TAG, "Setting mIsCharging to " + isCharging);
+                mIsCharging = isCharging;
+            }
         }
     }
 
@@ -623,7 +681,7 @@
 
                 if (app.lastRestrictAttemptElapsedTime > app.lastUsedByUserElapsedTime
                         && elapsedTimeAdjusted - app.lastUsedByUserElapsedTime
-                        >= mInjector.getRestrictedBucketDelayMs()) {
+                        >= mInjector.getAutoRestrictedBucketDelayMs()) {
                     newBucket = STANDBY_BUCKET_RESTRICTED;
                     reason = app.lastRestrictReason;
                     if (DEBUG) {
@@ -699,73 +757,75 @@
     @Override
     public void reportEvent(UsageEvents.Event event, long elapsedRealtime, int userId) {
         if (!mAppIdleEnabled) return;
-        synchronized (mAppIdleLock) {
-            final String pkg = event.getPackageName();
-            final int eventType = event.getEventType();
-            // TODO: Ideally this should call isAppIdleFiltered() to avoid calling back
-            // about apps that are on some kind of whitelist anyway.
-            final boolean previouslyIdle = mAppIdleHistory.isIdle(
-                    pkg, userId, elapsedRealtime);
-            // Inform listeners if necessary
-            if ((eventType == UsageEvents.Event.ACTIVITY_RESUMED
-                    || eventType == UsageEvents.Event.ACTIVITY_PAUSED
-                    || eventType == UsageEvents.Event.SYSTEM_INTERACTION
-                    || eventType == UsageEvents.Event.USER_INTERACTION
-                    || eventType == UsageEvents.Event.NOTIFICATION_SEEN
-                    || eventType == UsageEvents.Event.SLICE_PINNED
-                    || eventType == UsageEvents.Event.SLICE_PINNED_PRIV
-                    || eventType == UsageEvents.Event.FOREGROUND_SERVICE_START)) {
-
-                final AppUsageHistory appHistory = mAppIdleHistory.getAppUsageHistory(
-                        pkg, userId, elapsedRealtime);
-                final int prevBucket = appHistory.currentBucket;
-                final int prevBucketReason = appHistory.bucketingReason;
-                final long nextCheckTime;
-                final int subReason = usageEventToSubReason(eventType);
-                final int reason = REASON_MAIN_USAGE | subReason;
-                if (eventType == UsageEvents.Event.NOTIFICATION_SEEN
-                        || eventType == UsageEvents.Event.SLICE_PINNED) {
-                    // Mild usage elevates to WORKING_SET but doesn't change usage time.
-                    mAppIdleHistory.reportUsage(appHistory, pkg,
-                            STANDBY_BUCKET_WORKING_SET, subReason,
-                            0, elapsedRealtime + mNotificationSeenTimeoutMillis);
-                    nextCheckTime = mNotificationSeenTimeoutMillis;
-                } else if (eventType == UsageEvents.Event.SYSTEM_INTERACTION) {
-                    mAppIdleHistory.reportUsage(appHistory, pkg,
-                            STANDBY_BUCKET_ACTIVE, subReason,
-                            0, elapsedRealtime + mSystemInteractionTimeoutMillis);
-                    nextCheckTime = mSystemInteractionTimeoutMillis;
-                } else if (eventType == UsageEvents.Event.FOREGROUND_SERVICE_START) {
-                    // Only elevate bucket if this is the first usage of the app
-                    if (prevBucket != STANDBY_BUCKET_NEVER) return;
-                    mAppIdleHistory.reportUsage(appHistory, pkg,
-                            STANDBY_BUCKET_ACTIVE, subReason,
-                            0, elapsedRealtime + mInitialForegroundServiceStartTimeoutMillis);
-                    nextCheckTime = mInitialForegroundServiceStartTimeoutMillis;
-                } else {
-                    mAppIdleHistory.reportUsage(appHistory, pkg,
-                            STANDBY_BUCKET_ACTIVE, subReason,
-                            elapsedRealtime, elapsedRealtime + mStrongUsageTimeoutMillis);
-                    nextCheckTime = mStrongUsageTimeoutMillis;
-                }
-                if (appHistory.currentBucket != prevBucket) {
-                    mHandler.sendMessageDelayed(
-                            mHandler.obtainMessage(MSG_CHECK_PACKAGE_IDLE_STATE, userId, -1, pkg),
-                            nextCheckTime);
-                    final boolean userStartedInteracting =
-                            appHistory.currentBucket == STANDBY_BUCKET_ACTIVE
-                                    && (prevBucketReason & REASON_MAIN_MASK) != REASON_MAIN_USAGE;
-                    maybeInformListeners(pkg, userId, elapsedRealtime,
-                            appHistory.currentBucket, reason, userStartedInteracting);
-                }
-
-                if (previouslyIdle) {
-                    notifyBatteryStats(pkg, userId, false);
-                }
+        final int eventType = event.getEventType();
+        if ((eventType == UsageEvents.Event.ACTIVITY_RESUMED
+                || eventType == UsageEvents.Event.ACTIVITY_PAUSED
+                || eventType == UsageEvents.Event.SYSTEM_INTERACTION
+                || eventType == UsageEvents.Event.USER_INTERACTION
+                || eventType == UsageEvents.Event.NOTIFICATION_SEEN
+                || eventType == UsageEvents.Event.SLICE_PINNED
+                || eventType == UsageEvents.Event.SLICE_PINNED_PRIV
+                || eventType == UsageEvents.Event.FOREGROUND_SERVICE_START)) {
+            synchronized (mAppIdleLock) {
+                reportEventLocked(event.getPackageName(), eventType, elapsedRealtime, userId);
             }
         }
     }
 
+    private void reportEventLocked(String pkg, int eventType, long elapsedRealtime, int userId) {
+        // TODO: Ideally this should call isAppIdleFiltered() to avoid calling back
+        // about apps that are on some kind of whitelist anyway.
+        final boolean previouslyIdle = mAppIdleHistory.isIdle(
+                pkg, userId, elapsedRealtime);
+
+        final AppUsageHistory appHistory = mAppIdleHistory.getAppUsageHistory(
+                pkg, userId, elapsedRealtime);
+        final int prevBucket = appHistory.currentBucket;
+        final int prevBucketReason = appHistory.bucketingReason;
+        final long nextCheckDelay;
+        final int subReason = usageEventToSubReason(eventType);
+        final int reason = REASON_MAIN_USAGE | subReason;
+        if (eventType == UsageEvents.Event.NOTIFICATION_SEEN
+                || eventType == UsageEvents.Event.SLICE_PINNED) {
+            // Mild usage elevates to WORKING_SET but doesn't change usage time.
+            mAppIdleHistory.reportUsage(appHistory, pkg,
+                    STANDBY_BUCKET_WORKING_SET, subReason,
+                    0, elapsedRealtime + mNotificationSeenTimeoutMillis);
+            nextCheckDelay = mNotificationSeenTimeoutMillis;
+        } else if (eventType == UsageEvents.Event.SYSTEM_INTERACTION) {
+            mAppIdleHistory.reportUsage(appHistory, pkg,
+                    STANDBY_BUCKET_ACTIVE, subReason,
+                    0, elapsedRealtime + mSystemInteractionTimeoutMillis);
+            nextCheckDelay = mSystemInteractionTimeoutMillis;
+        } else if (eventType == UsageEvents.Event.FOREGROUND_SERVICE_START) {
+            // Only elevate bucket if this is the first usage of the app
+            if (prevBucket != STANDBY_BUCKET_NEVER) return;
+            mAppIdleHistory.reportUsage(appHistory, pkg,
+                    STANDBY_BUCKET_ACTIVE, subReason,
+                    0, elapsedRealtime + mInitialForegroundServiceStartTimeoutMillis);
+            nextCheckDelay = mInitialForegroundServiceStartTimeoutMillis;
+        } else {
+            mAppIdleHistory.reportUsage(appHistory, pkg,
+                    STANDBY_BUCKET_ACTIVE, subReason,
+                    elapsedRealtime, elapsedRealtime + mStrongUsageTimeoutMillis);
+            nextCheckDelay = mStrongUsageTimeoutMillis;
+        }
+        if (appHistory.currentBucket != prevBucket) {
+            mHandler.sendMessageDelayed(
+                    mHandler.obtainMessage(MSG_CHECK_PACKAGE_IDLE_STATE, userId, -1, pkg),
+                    nextCheckDelay);
+            final boolean userStartedInteracting =
+                    appHistory.currentBucket == STANDBY_BUCKET_ACTIVE
+                            && (prevBucketReason & REASON_MAIN_MASK) != REASON_MAIN_USAGE;
+            maybeInformListeners(pkg, userId, elapsedRealtime,
+                    appHistory.currentBucket, reason, userStartedInteracting);
+        }
+
+        if (previouslyIdle) {
+            notifyBatteryStats(pkg, userId, false);
+        }
+    }
+
     private int usageEventToSubReason(int eventType) {
         switch (eventType) {
             case UsageEvents.Event.ACTIVITY_RESUMED: return REASON_SUB_USAGE_MOVE_TO_FOREGROUND;
@@ -935,6 +995,11 @@
         if (isAppSpecial(packageName, appId, userId)) {
             return false;
         } else {
+            synchronized (mAppIdleLock) {
+                if (!mAppIdleEnabled || mIsCharging) {
+                    return false;
+                }
+            }
             return isAppIdleUnfiltered(packageName, userId, elapsedRealtime);
         }
     }
@@ -1147,9 +1212,11 @@
             final boolean isForcedByUser =
                     (reason & REASON_MAIN_MASK) == REASON_MAIN_FORCED_BY_USER;
 
-            // If the current bucket is RESTRICTED, only user force or usage should bring it out.
+            // If the current bucket is RESTRICTED, only user force or usage should bring it out,
+            // unless the app was put into the bucket due to timing out.
             if (app.currentBucket == STANDBY_BUCKET_RESTRICTED && !isUserUsage(reason)
-                    && !isForcedByUser) {
+                    && !isForcedByUser
+                    && (app.bucketingReason & REASON_MAIN_MASK) != REASON_MAIN_TIMEOUT) {
                 return;
             }
 
@@ -1175,7 +1242,7 @@
                     }
                 } else {
                     final long timeUntilRestrictPossibleMs = app.lastUsedByUserElapsedTime
-                            + mInjector.getRestrictedBucketDelayMs() - elapsedRealtime;
+                            + mInjector.getAutoRestrictedBucketDelayMs() - elapsedRealtime;
                     if (timeUntilRestrictPossibleMs > 0) {
                         Slog.w(TAG, "Tried to restrict recently used app: " + packageName
                                 + " due to " + reason);
@@ -1438,9 +1505,9 @@
     }
 
     @Override
-    public void dumpUser(IndentingPrintWriter idpw, int userId, String pkg) {
+    public void dumpUser(IndentingPrintWriter idpw, int userId, List<String> pkgs) {
         synchronized (mAppIdleLock) {
-            mAppIdleHistory.dump(idpw, userId, pkg);
+            mAppIdleHistory.dump(idpw, userId, pkgs);
         }
     }
 
@@ -1499,6 +1566,8 @@
 
         pw.println();
         pw.print("mAppIdleEnabled="); pw.print(mAppIdleEnabled);
+        pw.print(" mIsCharging=");
+        pw.print(mIsCharging);
         pw.println();
         pw.print("mScreenThresholds="); pw.println(Arrays.toString(mAppStandbyScreenThresholds));
         pw.print("mElapsedThresholds="); pw.println(Arrays.toString(mAppStandbyElapsedThresholds));
@@ -1516,16 +1585,16 @@
         private final Looper mLooper;
         private IDeviceIdleController mDeviceIdleController;
         private IBatteryStats mBatteryStats;
+        private BatteryManager mBatteryManager;
         private PackageManagerInternal mPackageManagerInternal;
         private DisplayManager mDisplayManager;
         private PowerManager mPowerManager;
         int mBootPhase;
         /**
          * The minimum amount of time required since the last user interaction before an app can be
-         * placed in the RESTRICTED bucket.
+         * automatically placed in the RESTRICTED bucket.
          */
-        // TODO: make configurable via DeviceConfig
-        private long mRestrictedBucketDelayMs = ONE_DAY;
+        long mAutoRestrictedBucketDelayMs = ONE_DAY;
 
         Injector(Context context, Looper looper) {
             mContext = context;
@@ -1550,11 +1619,12 @@
                 mDisplayManager = (DisplayManager) mContext.getSystemService(
                         Context.DISPLAY_SERVICE);
                 mPowerManager = mContext.getSystemService(PowerManager.class);
+                mBatteryManager = mContext.getSystemService(BatteryManager.class);
 
                 final ActivityManager activityManager =
                         (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
                 if (activityManager.isLowRamDevice() || ActivityManager.isSmallBatteryDevice()) {
-                    mRestrictedBucketDelayMs = 12 * ONE_HOUR;
+                    mAutoRestrictedBucketDelayMs = 12 * ONE_HOUR;
                 }
             }
             mBootPhase = phase;
@@ -1587,6 +1657,10 @@
             return buildFlag && runtimeFlag;
         }
 
+        boolean isCharging() {
+            return mBatteryManager.isCharging();
+        }
+
         boolean isPowerSaveWhitelistExceptIdleApp(String packageName) throws RemoteException {
             return mDeviceIdleController.isPowerSaveWhitelistExceptIdleApp(packageName);
         }
@@ -1595,8 +1669,13 @@
             return Environment.getDataSystemDirectory();
         }
 
-        long getRestrictedBucketDelayMs() {
-            return mRestrictedBucketDelayMs;
+        /**
+         * Return the minimum amount of time that must have passed since the last user usage before
+         * an app can be automatically put into the
+         * {@link android.app.usage.UsageStatsManager#STANDBY_BUCKET_RESTRICTED} bucket.
+         */
+        long getAutoRestrictedBucketDelayMs() {
+            return mAutoRestrictedBucketDelayMs;
         }
 
         void noteEvent(int event, String packageName, int uid) throws RemoteException {
@@ -1718,15 +1797,19 @@
         }
     };
 
-    private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder().build();
-
-    private final ConnectivityManager.NetworkCallback mNetworkCallback
-            = new ConnectivityManager.NetworkCallback() {
+    private class DeviceStateReceiver extends BroadcastReceiver {
         @Override
-        public void onAvailable(Network network) {
-            mConnectivityManager.unregisterNetworkCallback(this);
+        public void onReceive(Context context, Intent intent) {
+            switch (intent.getAction()) {
+                case BatteryManager.ACTION_CHARGING:
+                    setChargingState(true);
+                    break;
+                case BatteryManager.ACTION_DISCHARGING:
+                    setChargingState(false);
+                    break;
+            }
         }
-    };
+    }
 
     private final DisplayManager.DisplayListener mDisplayListener
             = new DisplayManager.DisplayListener() {
@@ -1772,6 +1855,8 @@
                 "system_interaction_duration";
         private static final String KEY_INITIAL_FOREGROUND_SERVICE_START_HOLD_DURATION =
                 "initial_foreground_service_start_duration";
+        private static final String KEY_AUTO_RESTRICTED_BUCKET_DELAY_MS =
+                "auto_restricted_bucket_delay_ms";
         public static final long DEFAULT_STRONG_USAGE_TIMEOUT = 1 * ONE_HOUR;
         public static final long DEFAULT_NOTIFICATION_TIMEOUT = 12 * ONE_HOUR;
         public static final long DEFAULT_SYSTEM_UPDATE_TIMEOUT = 2 * ONE_HOUR;
@@ -1782,6 +1867,7 @@
         public static final long DEFAULT_EXEMPTED_SYNC_START_TIMEOUT = 10 * ONE_MINUTE;
         public static final long DEFAULT_UNEXEMPTED_SYNC_SCHEDULED_TIMEOUT = 10 * ONE_MINUTE;
         public static final long DEFAULT_INITIAL_FOREGROUND_SERVICE_START_TIMEOUT = 30 * ONE_MINUTE;
+        public static final long DEFAULT_AUTO_RESTRICTED_BUCKET_DELAY_MS = ONE_DAY;
 
         private final KeyValueListParser mParser = new KeyValueListParser(',');
 
@@ -1829,12 +1915,12 @@
 
                 String screenThresholdsValue = mParser.getString(KEY_SCREEN_TIME_THRESHOLDS, null);
                 mAppStandbyScreenThresholds = parseLongArray(screenThresholdsValue,
-                        SCREEN_TIME_THRESHOLDS);
+                        SCREEN_TIME_THRESHOLDS, MINIMUM_SCREEN_TIME_THRESHOLDS);
 
                 String elapsedThresholdsValue = mParser.getString(KEY_ELAPSED_TIME_THRESHOLDS,
                         null);
                 mAppStandbyElapsedThresholds = parseLongArray(elapsedThresholdsValue,
-                        ELAPSED_TIME_THRESHOLDS);
+                        ELAPSED_TIME_THRESHOLDS, MINIMUM_ELAPSED_TIME_THRESHOLDS);
                 mCheckIdleIntervalMillis = Math.min(mAppStandbyElapsedThresholds[1] / 4,
                         COMPRESS_TIME ? ONE_MINUTE : 4 * 60 * ONE_MINUTE); // 4 hours
                 mStrongUsageTimeoutMillis = mParser.getDurationMillis(
@@ -1870,8 +1956,8 @@
 
                 mUnexemptedSyncScheduledTimeoutMillis = mParser.getDurationMillis(
                         KEY_UNEXEMPTED_SYNC_SCHEDULED_HOLD_DURATION,
-                                COMPRESS_TIME ? ONE_MINUTE
-                                        : DEFAULT_UNEXEMPTED_SYNC_SCHEDULED_TIMEOUT); // TODO
+                                COMPRESS_TIME
+                                        ? ONE_MINUTE : DEFAULT_UNEXEMPTED_SYNC_SCHEDULED_TIMEOUT);
 
                 mSystemInteractionTimeoutMillis = mParser.getDurationMillis(
                         KEY_SYSTEM_INTERACTION_HOLD_DURATION,
@@ -1881,6 +1967,12 @@
                         KEY_INITIAL_FOREGROUND_SERVICE_START_HOLD_DURATION,
                         COMPRESS_TIME ? ONE_MINUTE :
                                 DEFAULT_INITIAL_FOREGROUND_SERVICE_START_TIMEOUT);
+
+                mInjector.mAutoRestrictedBucketDelayMs = Math.max(
+                        COMPRESS_TIME ? ONE_MINUTE : 2 * ONE_HOUR,
+                        mParser.getDurationMillis(KEY_AUTO_RESTRICTED_BUCKET_DELAY_MS,
+                                COMPRESS_TIME
+                                        ? ONE_MINUTE : DEFAULT_AUTO_RESTRICTED_BUCKET_DELAY_MS));
             }
 
             // Check if app_idle_enabled has changed. Do this after getting the rest of the settings
@@ -1888,7 +1980,7 @@
             setAppIdleEnabled(mInjector.isAppIdleEnabled());
         }
 
-        long[] parseLongArray(String values, long[] defaults) {
+        long[] parseLongArray(String values, long[] defaults, long[] minValues) {
             if (values == null) return defaults;
             if (values.isEmpty()) {
                 // Reset to defaults
@@ -1896,13 +1988,19 @@
             } else {
                 String[] thresholds = values.split("/");
                 if (thresholds.length == THRESHOLD_BUCKETS.length) {
+                    if (minValues.length != THRESHOLD_BUCKETS.length) {
+                        Slog.wtf(TAG, "minValues array is the wrong size");
+                        // Use zeroes as the minimums.
+                        minValues = new long[THRESHOLD_BUCKETS.length];
+                    }
                     long[] array = new long[THRESHOLD_BUCKETS.length];
                     for (int i = 0; i < THRESHOLD_BUCKETS.length; i++) {
                         try {
                             if (thresholds[i].startsWith("P") || thresholds[i].startsWith("p")) {
-                                array[i] = Duration.parse(thresholds[i]).toMillis();
+                                array[i] = Math.max(minValues[i],
+                                        Duration.parse(thresholds[i]).toMillis());
                             } else {
-                                array[i] = Long.parseLong(thresholds[i]);
+                                array[i] = Math.max(minValues[i], Long.parseLong(thresholds[i]));
                             }
                         } catch (NumberFormatException|DateTimeParseException e) {
                             return defaults;
diff --git a/apex/media/framework/Android.bp b/apex/media/framework/Android.bp
index 91df098..821dd9e 100644
--- a/apex/media/framework/Android.bp
+++ b/apex/media/framework/Android.bp
@@ -19,34 +19,21 @@
         ":updatable-media-srcs",
     ],
 
-    aidl: {
-        export_include_dirs: [
-            "java",
-        ],
-
-        // It would be great if we don't need to add include_dirs for public
-        // parcelable classes. Find a better way.
-        include_dirs: [
-            // To refer:
-            // android.os.Bundle
-            // android.os.ResultReceiver
-            "frameworks/base/core/java",
-        ],
-    },
-
     permitted_packages: [
         "android.media",
     ],
 
+    optimize: {
+        enabled: true,
+        shrink: true,
+        proguard_flags_files: ["updatable-media-proguard.flags"],
+    },
+
     installable: true,
 
-    // TODO: build against stable API surface. Use core_platform for now to avoid
-    // link-check failure with exoplayer building against "current".
-    sdk_version: "core_platform",
+    sdk_version: "module_current",
     libs: [
-        // The order matters. android_system_* library should come later.
         "framework_media_annotation",
-        "android_system_stubs_current",
     ],
 
     static_libs: [
diff --git a/apex/media/framework/java/android/media/MediaParser.java b/apex/media/framework/java/android/media/MediaParser.java
index 96110e1..7d18578 100644
--- a/apex/media/framework/java/android/media/MediaParser.java
+++ b/apex/media/framework/java/android/media/MediaParser.java
@@ -50,6 +50,7 @@
 import com.google.android.exoplayer2.upstream.DataSpec;
 import com.google.android.exoplayer2.upstream.TransferListener;
 import com.google.android.exoplayer2.util.ParsableByteArray;
+import com.google.android.exoplayer2.video.ColorInfo;
 
 import java.io.EOFException;
 import java.io.IOException;
@@ -810,70 +811,91 @@
     // Private static methods.
 
     private static MediaFormat toMediaFormat(Format format) {
-
-        // TODO: Add if (value != Format.NO_VALUE);
-
         MediaFormat result = new MediaFormat();
-        result.setInteger(MediaFormat.KEY_BIT_RATE, format.bitrate);
-        result.setInteger(MediaFormat.KEY_CHANNEL_COUNT, format.channelCount);
-        if (format.colorInfo != null) {
-            result.setInteger(MediaFormat.KEY_COLOR_TRANSFER, format.colorInfo.colorTransfer);
-            result.setInteger(MediaFormat.KEY_COLOR_RANGE, format.colorInfo.colorRange);
-            result.setInteger(MediaFormat.KEY_COLOR_STANDARD, format.colorInfo.colorSpace);
+        setOptionalMediaFormatInt(result, MediaFormat.KEY_BIT_RATE, format.bitrate);
+        setOptionalMediaFormatInt(result, MediaFormat.KEY_CHANNEL_COUNT, format.channelCount);
+
+        ColorInfo colorInfo = format.colorInfo;
+        if (colorInfo != null) {
+            setOptionalMediaFormatInt(
+                    result, MediaFormat.KEY_COLOR_TRANSFER, colorInfo.colorTransfer);
+            setOptionalMediaFormatInt(result, MediaFormat.KEY_COLOR_RANGE, colorInfo.colorRange);
+            setOptionalMediaFormatInt(result, MediaFormat.KEY_COLOR_STANDARD, colorInfo.colorSpace);
+
             if (format.colorInfo.hdrStaticInfo != null) {
                 result.setByteBuffer(
                         MediaFormat.KEY_HDR_STATIC_INFO,
                         ByteBuffer.wrap(format.colorInfo.hdrStaticInfo));
             }
         }
-        result.setString(MediaFormat.KEY_MIME, format.sampleMimeType);
-        result.setFloat(MediaFormat.KEY_FRAME_RATE, format.frameRate);
-        result.setInteger(MediaFormat.KEY_WIDTH, format.width);
-        result.setInteger(MediaFormat.KEY_HEIGHT, format.height);
+
+        setOptionalMediaFormatString(result, MediaFormat.KEY_MIME, format.sampleMimeType);
+        setOptionalMediaFormatString(result, MediaFormat.KEY_CODECS_STRING, format.codecs);
+        if (format.frameRate != Format.NO_VALUE) {
+            result.setFloat(MediaFormat.KEY_FRAME_RATE, format.frameRate);
+        }
+        setOptionalMediaFormatInt(result, MediaFormat.KEY_WIDTH, format.width);
+        setOptionalMediaFormatInt(result, MediaFormat.KEY_HEIGHT, format.height);
+
         List<byte[]> initData = format.initializationData;
         if (initData != null) {
             for (int i = 0; i < initData.size(); i++) {
                 result.setByteBuffer("csd-" + i, ByteBuffer.wrap(initData.get(i)));
             }
         }
-        result.setString(MediaFormat.KEY_LANGUAGE, format.language);
-        result.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, format.maxInputSize);
-        result.setInteger(MediaFormat.KEY_PCM_ENCODING, format.pcmEncoding);
-        result.setInteger(MediaFormat.KEY_ROTATION, format.rotationDegrees);
-        result.setInteger(MediaFormat.KEY_SAMPLE_RATE, format.sampleRate);
+        setOptionalMediaFormatString(result, MediaFormat.KEY_LANGUAGE, format.language);
+        setOptionalMediaFormatInt(result, MediaFormat.KEY_MAX_INPUT_SIZE, format.maxInputSize);
+        setOptionalMediaFormatInt(result, MediaFormat.KEY_PCM_ENCODING, format.pcmEncoding);
+        setOptionalMediaFormatInt(result, MediaFormat.KEY_ROTATION, format.rotationDegrees);
+        setOptionalMediaFormatInt(result, MediaFormat.KEY_SAMPLE_RATE, format.sampleRate);
 
         int selectionFlags = format.selectionFlags;
-        // We avoid setting selection flags in the MediaFormat, unless explicitly signaled by the
-        // extractor.
-        if ((selectionFlags & C.SELECTION_FLAG_AUTOSELECT) != 0) {
-            result.setInteger(MediaFormat.KEY_IS_AUTOSELECT, 1);
-        }
-        if ((selectionFlags & C.SELECTION_FLAG_DEFAULT) != 0) {
-            result.setInteger(MediaFormat.KEY_IS_DEFAULT, 1);
-        }
-        if ((selectionFlags & C.SELECTION_FLAG_FORCED) != 0) {
-            result.setInteger(MediaFormat.KEY_IS_FORCED_SUBTITLE, 1);
+        result.setInteger(
+                MediaFormat.KEY_IS_AUTOSELECT, selectionFlags & C.SELECTION_FLAG_AUTOSELECT);
+        result.setInteger(MediaFormat.KEY_IS_DEFAULT, selectionFlags & C.SELECTION_FLAG_DEFAULT);
+        result.setInteger(
+                MediaFormat.KEY_IS_FORCED_SUBTITLE, selectionFlags & C.SELECTION_FLAG_FORCED);
+
+        setOptionalMediaFormatInt(result, MediaFormat.KEY_ENCODER_DELAY, format.encoderDelay);
+        setOptionalMediaFormatInt(result, MediaFormat.KEY_ENCODER_PADDING, format.encoderPadding);
+
+        if (format.pixelWidthHeightRatio != Format.NO_VALUE && format.pixelWidthHeightRatio != 0) {
+            int parWidth = 1;
+            int parHeight = 1;
+            if (format.pixelWidthHeightRatio < 1.0f) {
+                parHeight = 1 << 30;
+                parWidth = (int) (format.pixelWidthHeightRatio * parHeight);
+            } else if (format.pixelWidthHeightRatio > 1.0f) {
+                parWidth = 1 << 30;
+                parHeight = (int) (parWidth / format.pixelWidthHeightRatio);
+            }
+            result.setInteger(MediaFormat.KEY_PIXEL_ASPECT_RATIO_WIDTH, parWidth);
+            result.setInteger(MediaFormat.KEY_PIXEL_ASPECT_RATIO_HEIGHT, parHeight);
+            result.setFloat("pixel-width-height-ratio-float", format.pixelWidthHeightRatio);
         }
 
         // LACK OF SUPPORT FOR:
         //    format.accessibilityChannel;
-        //    format.codecs;
         //    format.containerMimeType;
-        //    format.drmInitData;
-        //    format.encoderDelay;
-        //    format.encoderPadding;
         //    format.id;
         //    format.metadata;
-        //    format.pixelWidthHeightRatio;
         //    format.roleFlags;
         //    format.stereoMode;
         //    format.subsampleOffsetUs;
         return result;
     }
 
-    private static int toFrameworkFlags(int flags) {
-        // TODO: Implement.
-        return 0;
+    private static void setOptionalMediaFormatInt(MediaFormat mediaFormat, String key, int value) {
+        if (value != Format.NO_VALUE) {
+            mediaFormat.setInteger(key, value);
+        }
+    }
+
+    private static void setOptionalMediaFormatString(
+            MediaFormat mediaFormat, String key, @Nullable String value) {
+        if (value != null) {
+            mediaFormat.setString(key, value);
+        }
     }
 
     private static DrmInitData toFrameworkDrmInitData(
diff --git a/apex/media/framework/updatable-media-proguard.flags b/apex/media/framework/updatable-media-proguard.flags
new file mode 100644
index 0000000..4e7d842
--- /dev/null
+++ b/apex/media/framework/updatable-media-proguard.flags
@@ -0,0 +1,2 @@
+# Keep all symbols in android.media.
+-keep class android.media.* {*;}
diff --git a/apex/permission/framework/Android.bp b/apex/permission/framework/Android.bp
index 126fa00..6d96200 100644
--- a/apex/permission/framework/Android.bp
+++ b/apex/permission/framework/Android.bp
@@ -26,13 +26,7 @@
     srcs: [
         ":framework-permission-sources",
     ],
-    // TODO(b/146758669): Use "system_current" after nullability annotations are system APIs.
-    sdk_version: "core_current",
-    libs: [
-        "framework-annotations-lib",
-        // TODO(b/146758669): Remove this line after nullability annotations are system APIs.
-        "android_system_stubs_current",
-    ],
+    sdk_version: "module_current",
     apex_available: [
         "com.android.permission",
         "test_com.android.permission",
diff --git a/apex/permission/service/Android.bp b/apex/permission/service/Android.bp
index 4172e95..8d66431 100644
--- a/apex/permission/service/Android.bp
+++ b/apex/permission/service/Android.bp
@@ -24,12 +24,9 @@
     srcs: [
         ":service-permission-sources",
     ],
-    // TODO(b/146758669): Use "system_current" after nullability annotations are system APIs.
-    sdk_version: "core_current",
+    sdk_version: "module_current",
     libs: [
         "framework-annotations-lib",
-        // TODO(b/146758669): Remove this line after nullability annotations are system APIs.
-        "android_system_stubs_current",
         "framework-permission",
     ],
     apex_available: [
diff --git a/apex/permission/testing/Android.bp b/apex/permission/testing/Android.bp
index f8978dc..63bf0a0 100644
--- a/apex/permission/testing/Android.bp
+++ b/apex/permission/testing/Android.bp
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-apex {
+apex_test {
     name: "test_com.android.permission",
     visibility: [
         "//system/apex/tests",
diff --git a/apex/sdkextensions/derive_sdk/derive_sdk.cpp b/apex/sdkextensions/derive_sdk/derive_sdk.cpp
index 6fb7ef4..900193a 100644
--- a/apex/sdkextensions/derive_sdk/derive_sdk.cpp
+++ b/apex/sdkextensions/derive_sdk/derive_sdk.cpp
@@ -69,7 +69,7 @@
     auto itr = std::min_element(versions.begin(), versions.end());
     std::string prop_value = itr == versions.end() ? "0" : std::to_string(*itr);
 
-    if (!android::base::SetProperty("ro.build.version.extensions.r", prop_value)) {
+    if (!android::base::SetProperty("build.version.extensions.r", prop_value)) {
         LOG(ERROR) << "failed to set sdk_info prop";
         return EXIT_FAILURE;
     }
diff --git a/apex/sdkextensions/framework/java/android/os/ext/SdkExtensions.java b/apex/sdkextensions/framework/java/android/os/ext/SdkExtensions.java
index a8a7eff..103b53e 100644
--- a/apex/sdkextensions/framework/java/android/os/ext/SdkExtensions.java
+++ b/apex/sdkextensions/framework/java/android/os/ext/SdkExtensions.java
@@ -38,7 +38,7 @@
 
     private static final int R_EXTENSION_INT;
     static {
-        R_EXTENSION_INT = SystemProperties.getInt("ro.build.version.extensions.r", 0);
+        R_EXTENSION_INT = SystemProperties.getInt("build.version.extensions.r", 0);
     }
 
     /**
diff --git a/apex/sdkextensions/framework/java/android/os/ext/test/Test.java b/apex/sdkextensions/framework/java/android/os/ext/test/Test.java
new file mode 100644
index 0000000..1715f49
--- /dev/null
+++ b/apex/sdkextensions/framework/java/android/os/ext/test/Test.java
@@ -0,0 +1,53 @@
+/*
+ * 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.ext.test;
+
+import android.annotation.SystemApi;
+
+/**
+ * This class exists temporarily to verify SDK updates are working properly.
+ * @deprecated Do not use.
+ */
+@Deprecated
+public class Test {
+
+    public Test() { }
+
+    /** @hide */
+    public void testA() {}
+
+    /** @hide */
+    public void testB() {}
+
+    /** @hide */
+    public void testC() {}
+
+    /** @hide */
+    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
+    public void testD() {}
+
+    public void testE() {}
+
+    /** @hide */
+    @SystemApi
+    public void testF() {}
+
+    /** @hide */
+    @SystemApi
+    public void testG() {}
+
+}
diff --git a/apex/statsd/Android.bp b/apex/statsd/Android.bp
index 1f9f18c..0e93110 100644
--- a/apex/statsd/Android.bp
+++ b/apex/statsd/Android.bp
@@ -27,6 +27,7 @@
         "framework-statsd",
         "service-statsd",
     ],
+    compile_multilib: "both",
     // prebuilts: ["my_prebuilt"],
     name: "com.android.os.statsd-defaults",
     key: "com.android.os.statsd.key",
@@ -71,7 +72,5 @@
     apex_available: [
         "com.android.os.statsd",
         "test_com.android.os.statsd",
-        //TODO (b/148620413): remove platform.
-         "//apex_available:platform",
     ],
-}
\ No newline at end of file
+}
diff --git a/apex/statsd/aidl/Android.bp b/apex/statsd/aidl/Android.bp
index 6d639fd..487c8e1 100644
--- a/apex/statsd/aidl/Android.bp
+++ b/apex/statsd/aidl/Android.bp
@@ -13,35 +13,38 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 //
-
-// TODO(b/145815909): move StatsDimensionsValue.aidl here
 filegroup {
-    name: "statsd_aidl",
+    name: "framework-statsd-aidl-sources",
+    srcs: ["**/*.aidl"],
+}
+
+aidl_interface {
+    name: "statsd-aidl",
     srcs: [
         "android/os/IPendingIntentRef.aidl",
         "android/os/IPullAtomCallback.aidl",
         "android/os/IPullAtomResultReceiver.aidl",
         "android/os/IStatsCompanionService.aidl",
         "android/os/IStatsd.aidl",
+        "android/os/StatsDimensionsValueParcel.aidl",
         "android/util/StatsEventParcel.aidl",
     ],
-}
-
-filegroup {
-    name: "statsd_java_aidl",
-    srcs: ["**/*.aidl"],
-}
-
-// This library is currently unused
-aidl_interface {
-    name: "stats-event-parcel-aidl",
-    srcs: ["android/util/StatsEventParcel.aidl"],
     backend: {
         java: {
-            sdk_version: "28",
+            enabled: false, // the platform uses statsd_java_aidl
         },
         cpp: {
             enabled: false,
-        }
+        },
+        ndk: {
+            enabled: true,
+            apex_available: [
+                // TODO(b/145923087): Remove this once statsd binary is in apex
+                "//apex_available:platform",
+
+                "com.android.os.statsd",
+                "test_com.android.os.statsd",
+            ],
+        },
     }
 }
diff --git a/apex/statsd/aidl/android/os/IPendingIntentRef.aidl b/apex/statsd/aidl/android/os/IPendingIntentRef.aidl
index 6b9e467..000a699 100644
--- a/apex/statsd/aidl/android/os/IPendingIntentRef.aidl
+++ b/apex/statsd/aidl/android/os/IPendingIntentRef.aidl
@@ -16,7 +16,7 @@
 
 package android.os;
 
-import android.os.StatsDimensionsValue;
+import android.os.StatsDimensionsValueParcel;
 
 /**
   * Binder interface to hold a PendingIntent for StatsCompanionService.
@@ -42,5 +42,5 @@
       */
      oneway void sendSubscriberBroadcast(long configUid, long configId, long subscriptionId,
                                          long subscriptionRuleId, in String[] cookies,
-                                         in StatsDimensionsValue dimensionsValue);
-}
\ No newline at end of file
+                                         in StatsDimensionsValueParcel dimensionsValueParcel);
+}
diff --git a/apex/statsd/aidl/android/os/IStatsd.aidl b/apex/statsd/aidl/android/os/IStatsd.aidl
index 253b2c1..10b1e5b 100644
--- a/apex/statsd/aidl/android/os/IStatsd.aidl
+++ b/apex/statsd/aidl/android/os/IStatsd.aidl
@@ -222,12 +222,6 @@
     const int FLAG_REQUIRE_LOW_LATENCY_MONITOR = 0x04;
 
     /**
-     * Logs an event for watchdog rollbacks.
-     */
-     oneway void sendWatchdogRollbackOccurredAtom(in int rollbackType, in String packageName,
-         in long packageVersionCode, in int rollbackReason, in String failingPackageName);
-
-    /**
      * Returns the most recently registered experiment IDs.
      */
     long[] getRegisteredExperimentIds();
diff --git a/apex/statsd/aidl/android/os/StatsDimensionsValueParcel.aidl b/apex/statsd/aidl/android/os/StatsDimensionsValueParcel.aidl
new file mode 100644
index 0000000..a8685e3
--- /dev/null
+++ b/apex/statsd/aidl/android/os/StatsDimensionsValueParcel.aidl
@@ -0,0 +1,21 @@
+package android.os;
+
+/**
+ * @hide
+ */
+parcelable StatsDimensionsValueParcel {
+    /**
+     * Field equals:
+     *      - atomTag for top level StatsDimensionsValueParcel
+     *      - position in dimension for all other levels
+     */
+    int field;
+    int valueType;
+
+    String stringValue;
+    int intValue;
+    long longValue;
+    boolean boolValue;
+    float floatValue;
+    StatsDimensionsValueParcel[] tupleValue;
+}
diff --git a/apex/statsd/framework/Android.bp b/apex/statsd/framework/Android.bp
index d85ae69..5533ed8 100644
--- a/apex/statsd/framework/Android.bp
+++ b/apex/statsd/framework/Android.bp
@@ -12,39 +12,66 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+package {
+    default_visibility: [ ":__pkg__" ]
+}
+
+genrule {
+    name: "statslog-statsd-java-gen",
+    tools: ["stats-log-api-gen"],
+    cmd: "$(location stats-log-api-gen) --java $(out) --module statsd" +
+         " --javaPackage com.android.internal.util --javaClass StatsdStatsLog",
+    out: ["com/android/internal/util/StatsdStatsLog.java"],
+}
+
+java_library_static {
+    name: "statslog-statsd",
+    srcs: [
+        ":statslog-statsd-java-gen",
+    ],
+    visibility: [
+        "//cts/hostsidetests/statsd/apps:__subpackages__",
+    ]
+}
+
 filegroup {
     name: "framework-statsd-sources",
     srcs: [
-    "java/**/*.java",
+        "java/**/*.java",
+        ":framework-statsd-aidl-sources",
+        ":statslog-statsd-java-gen",
     ],
-    path: "java",
+    visibility: [
+        "//frameworks/base", // For the "global" stubs.
+    ],
+}
+
+java_defaults {
+    name: "framework-statsd-defaults",
+    sdk_version: "module_current",
+    libs: [ "framework-annotations-lib" ],
 }
 
 java_library {
     name: "framework-statsd",
+    defaults: [
+        "framework-statsd-defaults",
+    ],
     installable: true,
-    // TODO(b/146209659): Use system_current instead.
-    sdk_version: "core_platform",
+
     srcs: [
         ":framework-statsd-sources",
     ],
+
     permitted_packages: [
         "android.app",
         "android.os",
         "android.util",
     ],
-    libs: [
-        "framework-annotations-lib",
-        // TODO(b/146230220): Use android_module_lib_stubs_current instead.
-        //"android_module_lib_stubs_current",
-        "framework-all",
-    ],
+
     hostdex: true, // for hiddenapi check
     visibility: [
         "//frameworks/base/apex/statsd:__subpackages__",
-        //TODO(b/146167933) remove this when framework is built with framework-statsd-stubs
-        "//frameworks/base",
-        "//frameworks/opt/net/wifi/service",
     ],
     apex_available: [
         "com.android.os.statsd",
@@ -54,13 +81,14 @@
 
 stubs_defaults {
     name: "framework-statsd-stubs-srcs-defaults",
-    srcs: [ ":framework-statsd-sources" ],
+    srcs: [
+        ":framework-statsd-sources",
+    ],
+
     libs: [
-        // TODO(b/148218250): Change to android_system_stubs_current
-        "framework-all",
         "framework-annotations-lib",
     ],
-    sdk_version: "core_platform",
+    sdk_version: "system_current",
 }
 
 droidstubs {
@@ -77,6 +105,7 @@
         "framework-module-stubs-defaults-systemapi",
         "framework-statsd-stubs-srcs-defaults",
     ],
+
 }
 
 droidstubs {
@@ -97,25 +126,37 @@
 
 java_library {
     name: "framework-statsd-stubs-publicapi",
+    defaults: [
+        "framework-statsd-defaults",
+    ],
     srcs: [ ":framework-statsd-stubs-srcs-publicapi" ],
-    // TODO(b/148218250): Change to current
-    libs: [ "framework-all" ],
-    sdk_version: "core_platform",
+    visibility: [
+        "//frameworks/base", // Framework
+        "//frameworks/base/apex/statsd", // statsd apex
+    ]
 }
 
-// TODO(b/146167933): Use these stubs in frameworks/base/Android.bp
 java_library {
     name: "framework-statsd-stubs-systemapi",
+    defaults: [
+        "framework-statsd-defaults",
+    ],
     srcs: [ ":framework-statsd-stubs-srcs-systemapi" ],
-    // TODO(b/148218250): Change to system_current
-    libs: [ "framework-all" ],
-    sdk_version: "core_platform",
+    visibility: [
+        "//frameworks/base", // Framework
+        "//frameworks/base/apex/statsd", // statsd apex
+    ]
 }
 
 java_library {
     name: "framework-statsd-stubs-module_libs_api",
-    srcs: [ ":framework-statsd-stubs-srcs-systemapi" ],
-    // TODO(b/148218250): Change to system_current
-    libs: [ "framework-all" ],
-    sdk_version: "core_platform",
+    defaults: [
+        "framework-statsd-defaults",
+    ],
+    srcs: [ ":framework-statsd-stubs-srcs-module_libs_api" ],
+    visibility: [
+        "//frameworks/base", // Framework
+        "//frameworks/base/apex/statsd", // statsd apex
+        "//frameworks/opt/net/wifi/service" // wifi service
+    ]
 }
diff --git a/apex/statsd/framework/java/android/app/StatsManager.java b/apex/statsd/framework/java/android/app/StatsManager.java
index 411482b..526d17f 100644
--- a/apex/statsd/framework/java/android/app/StatsManager.java
+++ b/apex/statsd/framework/java/android/app/StatsManager.java
@@ -32,7 +32,7 @@
 import android.os.RemoteException;
 import android.os.StatsFrameworkInitializer;
 import android.util.AndroidException;
-import android.util.Slog;
+import android.util.Log;
 import android.util.StatsEvent;
 import android.util.StatsEventParcel;
 
@@ -155,7 +155,7 @@
                 // can throw IllegalArgumentException
                 service.addConfiguration(configKey, config, mContext.getOpPackageName());
             } catch (RemoteException e) {
-                Slog.e(TAG, "Failed to connect to statsmanager when adding configuration");
+                Log.e(TAG, "Failed to connect to statsmanager when adding configuration");
                 throw new StatsUnavailableException("could not connect", e);
             } catch (SecurityException e) {
                 throw new StatsUnavailableException(e.getMessage(), e);
@@ -191,7 +191,7 @@
                 IStatsManagerService service = getIStatsManagerServiceLocked();
                 service.removeConfiguration(configKey, mContext.getOpPackageName());
             } catch (RemoteException e) {
-                Slog.e(TAG, "Failed to connect to statsmanager when removing configuration");
+                Log.e(TAG, "Failed to connect to statsmanager when removing configuration");
                 throw new StatsUnavailableException("could not connect", e);
             } catch (SecurityException e) {
                 throw new StatsUnavailableException(e.getMessage(), e);
@@ -258,7 +258,7 @@
                             mContext.getOpPackageName());
                 }
             } catch (RemoteException e) {
-                Slog.e(TAG, "Failed to connect to statsmanager when adding broadcast subscriber",
+                Log.e(TAG, "Failed to connect to statsmanager when adding broadcast subscriber",
                         e);
                 throw new StatsUnavailableException("could not connect", e);
             } catch (SecurityException e) {
@@ -311,7 +311,7 @@
                 }
 
             } catch (RemoteException e) {
-                Slog.e(TAG, "Failed to connect to statsmanager when registering data listener.");
+                Log.e(TAG, "Failed to connect to statsmanager when registering data listener.");
                 throw new StatsUnavailableException("could not connect", e);
             } catch (SecurityException e) {
                 throw new StatsUnavailableException(e.getMessage(), e);
@@ -348,7 +348,7 @@
                 }
 
             } catch (RemoteException e) {
-                Slog.e(TAG, "Failed to connect to statsmanager "
+                Log.e(TAG, "Failed to connect to statsmanager "
                         + "when registering active configs listener.");
                 throw new StatsUnavailableException("could not connect", e);
             } catch (SecurityException e) {
@@ -387,7 +387,7 @@
                 IStatsManagerService service = getIStatsManagerServiceLocked();
                 return service.getData(configKey, mContext.getOpPackageName());
             } catch (RemoteException e) {
-                Slog.e(TAG, "Failed to connect to statsmanager when getting data");
+                Log.e(TAG, "Failed to connect to statsmanager when getting data");
                 throw new StatsUnavailableException("could not connect", e);
             } catch (SecurityException e) {
                 throw new StatsUnavailableException(e.getMessage(), e);
@@ -424,7 +424,7 @@
                 IStatsManagerService service = getIStatsManagerServiceLocked();
                 return service.getMetadata(mContext.getOpPackageName());
             } catch (RemoteException e) {
-                Slog.e(TAG, "Failed to connect to statsmanager when getting metadata");
+                Log.e(TAG, "Failed to connect to statsmanager when getting metadata");
                 throw new StatsUnavailableException("could not connect", e);
             } catch (SecurityException e) {
                 throw new StatsUnavailableException(e.getMessage(), e);
@@ -464,7 +464,7 @@
                 return service.getRegisteredExperimentIds();
             } catch (RemoteException e) {
                 if (DEBUG) {
-                    Slog.d(TAG,
+                    Log.d(TAG,
                             "Failed to connect to StatsManagerService when getting "
                                     + "registered experiment IDs");
                 }
@@ -555,7 +555,7 @@
                     try {
                         resultReceiver.pullFinished(atomTag, success, parcels);
                     } catch (RemoteException e) {
-                        Slog.w(TAG, "StatsPullResultReceiver failed for tag " + mAtomId);
+                        Log.w(TAG, "StatsPullResultReceiver failed for tag " + mAtomId);
                     }
                 });
             } finally {
diff --git a/apex/statsd/framework/java/android/os/StatsDimensionsValue.java b/apex/statsd/framework/java/android/os/StatsDimensionsValue.java
index 886130f..35273da 100644
--- a/apex/statsd/framework/java/android/os/StatsDimensionsValue.java
+++ b/apex/statsd/framework/java/android/os/StatsDimensionsValue.java
@@ -16,7 +16,7 @@
 package android.os;
 
 import android.annotation.SystemApi;
-import android.util.Slog;
+import android.util.Log;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -96,6 +96,47 @@
     }
 
     /**
+     * Creates a {@code StatsDimensionsValue} from a StatsDimensionsValueParcel
+     * TODO(b/149103391): Make StatsDimensionsValue a wrapper on top of
+     * StatsDimensionsValueParcel.
+     *
+     * @hide
+     */
+    public StatsDimensionsValue(StatsDimensionsValueParcel parcel) {
+        mField = parcel.field;
+        mValueType = parcel.valueType;
+        switch (mValueType) {
+            case STRING_VALUE_TYPE:
+                mValue = parcel.stringValue;
+                break;
+            case INT_VALUE_TYPE:
+                mValue = parcel.intValue;
+                break;
+            case LONG_VALUE_TYPE:
+                mValue = parcel.longValue;
+                break;
+            case BOOLEAN_VALUE_TYPE:
+                mValue = parcel.boolValue;
+                break;
+            case FLOAT_VALUE_TYPE:
+                mValue = parcel.floatValue;
+                break;
+            case TUPLE_VALUE_TYPE:
+                StatsDimensionsValue[] values = new StatsDimensionsValue[parcel.tupleValue.length];
+                for (int i = 0; i < parcel.tupleValue.length; i++) {
+                    values[i] = new StatsDimensionsValue(parcel.tupleValue[i]);
+                }
+                mValue = values;
+                break;
+            default:
+                Log.w(TAG, "StatsDimensionsValueParcel contains bad valueType: " + mValueType);
+                mValue = null;
+                break;
+        }
+    }
+
+
+    /**
      * Return the field, i.e. the tag of a statsd atom.
      *
      * @return the field
@@ -114,7 +155,7 @@
         try {
             if (mValueType == STRING_VALUE_TYPE) return (String) mValue;
         } catch (ClassCastException e) {
-            Slog.w(TAG, "Failed to successfully get value", e);
+            Log.w(TAG, "Failed to successfully get value", e);
         }
         return null;
     }
@@ -128,7 +169,7 @@
         try {
             if (mValueType == INT_VALUE_TYPE) return (Integer) mValue;
         } catch (ClassCastException e) {
-            Slog.w(TAG, "Failed to successfully get value", e);
+            Log.w(TAG, "Failed to successfully get value", e);
         }
         return 0;
     }
@@ -142,7 +183,7 @@
         try {
             if (mValueType == LONG_VALUE_TYPE) return (Long) mValue;
         } catch (ClassCastException e) {
-            Slog.w(TAG, "Failed to successfully get value", e);
+            Log.w(TAG, "Failed to successfully get value", e);
         }
         return 0;
     }
@@ -157,7 +198,7 @@
         try {
             if (mValueType == BOOLEAN_VALUE_TYPE) return (Boolean) mValue;
         } catch (ClassCastException e) {
-            Slog.w(TAG, "Failed to successfully get value", e);
+            Log.w(TAG, "Failed to successfully get value", e);
         }
         return false;
     }
@@ -171,7 +212,7 @@
         try {
             if (mValueType == FLOAT_VALUE_TYPE) return (Float) mValue;
         } catch (ClassCastException e) {
-            Slog.w(TAG, "Failed to successfully get value", e);
+            Log.w(TAG, "Failed to successfully get value", e);
         }
         return 0;
     }
@@ -197,7 +238,7 @@
             }
             return copy;
         } catch (ClassCastException e) {
-            Slog.w(TAG, "Failed to successfully get value", e);
+            Log.w(TAG, "Failed to successfully get value", e);
             return null;
         }
     }
@@ -256,7 +297,7 @@
             }
             return sb.toString();
         } catch (ClassCastException e) {
-            Slog.w(TAG, "Failed to successfully get value", e);
+            Log.w(TAG, "Failed to successfully get value", e);
         }
         return "";
     }
@@ -316,11 +357,11 @@
                     return true;
                 }
                 default:
-                    Slog.w(TAG, "readValue of an impossible type " + valueType);
+                    Log.w(TAG, "readValue of an impossible type " + valueType);
                     return false;
             }
         } catch (ClassCastException e) {
-            Slog.w(TAG, "writeValue cast failed", e);
+            Log.w(TAG, "writeValue cast failed", e);
             return false;
         }
     }
@@ -347,7 +388,7 @@
                 return values;
             }
             default:
-                Slog.w(TAG, "readValue of an impossible type " + valueType);
+                Log.w(TAG, "readValue of an impossible type " + valueType);
                 return null;
         }
     }
diff --git a/apex/statsd/framework/java/android/os/StatsFrameworkInitializer.java b/apex/statsd/framework/java/android/os/StatsFrameworkInitializer.java
index 3d95533..8dc9123 100644
--- a/apex/statsd/framework/java/android/os/StatsFrameworkInitializer.java
+++ b/apex/statsd/framework/java/android/os/StatsFrameworkInitializer.java
@@ -17,6 +17,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
+import android.annotation.SystemApi.Client;
 import android.app.StatsManager;
 import android.app.SystemServiceRegistry;
 import android.content.Context;
@@ -24,10 +25,9 @@
 /**
  * Class for performing registration for all stats services
  *
- * TODO(b/148225705) Change to @SystemApi(client=MODULE_LIBRARIES) when the build system is ready.
  * @hide
  */
-@SystemApi
+@SystemApi(client = Client.MODULE_LIBRARIES)
 public class StatsFrameworkInitializer {
     private StatsFrameworkInitializer() {
     }
diff --git a/apex/statsd/framework/java/android/util/StatsLog.java b/apex/statsd/framework/java/android/util/StatsLog.java
index 7910737..536b71a 100644
--- a/apex/statsd/framework/java/android/util/StatsLog.java
+++ b/apex/statsd/framework/java/android/util/StatsLog.java
@@ -26,16 +26,21 @@
 import android.content.Context;
 import android.os.IStatsd;
 import android.os.RemoteException;
-import android.os.ServiceManager;
+import android.os.StatsFrameworkInitializer;
 import android.util.proto.ProtoOutputStream;
 
-import com.android.internal.util.FrameworkStatsLog;
+import com.android.internal.util.StatsdStatsLog;
 
 /**
  * StatsLog provides an API for developers to send events to statsd. The events can be used to
  * define custom metrics inside statsd.
  */
 public final class StatsLog {
+
+    // Load JNI library
+    static {
+        System.loadLibrary("stats_jni");
+    }
     private static final String TAG = "StatsLog";
     private static final boolean DEBUG = false;
     private static final int EXPERIMENT_IDS_FIELD_ID = 1;
@@ -59,17 +64,17 @@
                 IStatsd service = getIStatsdLocked();
                 if (service == null) {
                     if (DEBUG) {
-                        Slog.d(TAG, "Failed to find statsd when logging start");
+                        Log.d(TAG, "Failed to find statsd when logging start");
                     }
                     return false;
                 }
                 service.sendAppBreadcrumbAtom(label,
-                        FrameworkStatsLog.APP_BREADCRUMB_REPORTED__STATE__START);
+                        StatsdStatsLog.APP_BREADCRUMB_REPORTED__STATE__START);
                 return true;
             } catch (RemoteException e) {
                 sService = null;
                 if (DEBUG) {
-                    Slog.d(TAG, "Failed to connect to statsd when logging start");
+                    Log.d(TAG, "Failed to connect to statsd when logging start");
                 }
                 return false;
             }
@@ -88,17 +93,17 @@
                 IStatsd service = getIStatsdLocked();
                 if (service == null) {
                     if (DEBUG) {
-                        Slog.d(TAG, "Failed to find statsd when logging stop");
+                        Log.d(TAG, "Failed to find statsd when logging stop");
                     }
                     return false;
                 }
                 service.sendAppBreadcrumbAtom(
-                        label, FrameworkStatsLog.APP_BREADCRUMB_REPORTED__STATE__STOP);
+                        label, StatsdStatsLog.APP_BREADCRUMB_REPORTED__STATE__STOP);
                 return true;
             } catch (RemoteException e) {
                 sService = null;
                 if (DEBUG) {
-                    Slog.d(TAG, "Failed to connect to statsd when logging stop");
+                    Log.d(TAG, "Failed to connect to statsd when logging stop");
                 }
                 return false;
             }
@@ -117,17 +122,17 @@
                 IStatsd service = getIStatsdLocked();
                 if (service == null) {
                     if (DEBUG) {
-                        Slog.d(TAG, "Failed to find statsd when logging event");
+                        Log.d(TAG, "Failed to find statsd when logging event");
                     }
                     return false;
                 }
                 service.sendAppBreadcrumbAtom(
-                        label, FrameworkStatsLog.APP_BREADCRUMB_REPORTED__STATE__UNSPECIFIED);
+                        label, StatsdStatsLog.APP_BREADCRUMB_REPORTED__STATE__UNSPECIFIED);
                 return true;
             } catch (RemoteException e) {
                 sService = null;
                 if (DEBUG) {
-                    Slog.d(TAG, "Failed to connect to statsd when logging event");
+                    Log.d(TAG, "Failed to connect to statsd when logging event");
                 }
                 return false;
             }
@@ -162,7 +167,7 @@
                     | EXPERIMENT_IDS_FIELD_ID,
                     id);
         }
-        FrameworkStatsLog.write(FrameworkStatsLog.BINARY_PUSH_STATE_CHANGED,
+        StatsdStatsLog.write(StatsdStatsLog.BINARY_PUSH_STATE_CHANGED,
                 trainName,
                 trainVersionCode,
                 (options & IStatsd.FLAG_REQUIRE_STAGING) > 0,
@@ -171,57 +176,19 @@
                 state,
                 proto.getBytes(),
                 0,
-                0);
+                0,
+                false);
         return true;
     }
 
-    /**
-     * Logs an event for watchdog rollbacks.
-     *
-     * @param rollbackType          state of the rollback.
-     * @param packageName           package name being rolled back.
-     * @param packageVersionCode    version of the package being rolled back.
-     * @param rollbackReason        reason the package is being rolled back.
-     * @param failingPackageName    the package name causing the failure.
-     *
-     * @return True if the log request was sent to statsd.
-     *
-     * @hide
-     */
-    @RequiresPermission(allOf = {DUMP, PACKAGE_USAGE_STATS})
-    public static boolean logWatchdogRollbackOccurred(int rollbackType, String packageName,
-            long packageVersionCode, int rollbackReason, String failingPackageName) {
-        synchronized (sLogLock) {
-            try {
-                IStatsd service = getIStatsdLocked();
-                if (service == null) {
-                    if (DEBUG) {
-                        Slog.d(TAG, "Failed to find statsd when logging event");
-                    }
-                    return false;
-                }
-
-                service.sendWatchdogRollbackOccurredAtom(rollbackType, packageName,
-                        packageVersionCode, rollbackReason, failingPackageName);
-                return true;
-            } catch (RemoteException e) {
-                sService = null;
-                if (DEBUG) {
-                    Slog.d(TAG,
-                            "Failed to connect to StatsCompanionService when logging "
-                                    + "WatchdogRollbackOccurred");
-                }
-                return false;
-            }
-        }
-    }
-
-
     private static IStatsd getIStatsdLocked() throws RemoteException {
         if (sService != null) {
             return sService;
         }
-        sService = IStatsd.Stub.asInterface(ServiceManager.getService("stats"));
+        sService = IStatsd.Stub.asInterface(StatsFrameworkInitializer
+            .getStatsServiceManager()
+            .getStatsdServiceRegisterer()
+            .get());
         return sService;
     }
 
diff --git a/apex/statsd/service/Android.bp b/apex/statsd/service/Android.bp
index 9103848..0f325e3 100644
--- a/apex/statsd/service/Android.bp
+++ b/apex/statsd/service/Android.bp
@@ -1,18 +1,36 @@
 // Statsd Service jar, which will eventually be put in the statsd mainline apex.
 // service-statsd needs to be added to PRODUCT_UPDATABLE_SYSTEM_SERVER_JARS.
 // This jar will contain StatsCompanionService
+
+filegroup {
+    name: "service-statsd-sources",
+    srcs: [
+        "java/**/*.java",
+    ],
+}
+
 java_library {
     name: "service-statsd",
     installable: true,
 
     srcs: [
-        "java/**/*.java",
+        ":service-statsd-sources",
     ],
-    // TODO: link against the proper stubs (b/146084685).
+
+    // TODO(b/146757305) should be "module_current" since not allowed to use
+    // @CorePlatformApi's
+    sdk_version: "core_platform",
+
     libs: [
-        "framework-minus-apex",
-        "services.core",
+        "framework-annotations-lib",
+        "services-stubs",
+        "framework-statsd",
+
+        // TODO(b/146757305): should be unnecessary once
+        // sdk_version="module_lib_current" or "module_current"
+        "android_module_lib_stubs_current",
     ],
+
     apex_available: [
         "com.android.os.statsd",
         "test_com.android.os.statsd",
diff --git a/apex/statsd/service/java/com/android/server/stats/StatsCompanion.java b/apex/statsd/service/java/com/android/server/stats/StatsCompanion.java
index 4495dc9..c1ba73f 100644
--- a/apex/statsd/service/java/com/android/server/stats/StatsCompanion.java
+++ b/apex/statsd/service/java/com/android/server/stats/StatsCompanion.java
@@ -24,7 +24,8 @@
 import android.os.IPendingIntentRef;
 import android.os.Process;
 import android.os.StatsDimensionsValue;
-import android.util.Slog;
+import android.os.StatsDimensionsValueParcel;
+import android.util.Log;
 
 import com.android.server.SystemService;
 
@@ -40,6 +41,9 @@
 
     private static final int AID_STATSD = 1066;
 
+    private static final String STATS_COMPANION_SERVICE = "statscompanion";
+    private static final String STATS_MANAGER_SERVICE = "statsmanager";
+
     static void enforceStatsdCallingUid() {
         if (Binder.getCallingPid() == Process.myPid()) {
             return;
@@ -68,14 +72,12 @@
             mStatsManagerService.setStatsCompanionService(mStatsCompanionService);
 
             try {
-                publishBinderService(Context.STATS_COMPANION_SERVICE,
-                        mStatsCompanionService);
-                if (DEBUG) Slog.d(TAG, "Published " + Context.STATS_COMPANION_SERVICE);
-                publishBinderService(Context.STATS_MANAGER_SERVICE,
-                        mStatsManagerService);
-                if (DEBUG) Slog.d(TAG, "Published " + Context.STATS_MANAGER_SERVICE);
+                publishBinderService(STATS_COMPANION_SERVICE, mStatsCompanionService);
+                if (DEBUG) Log.d(TAG, "Published " + STATS_COMPANION_SERVICE);
+                publishBinderService(STATS_MANAGER_SERVICE, mStatsManagerService);
+                if (DEBUG) Log.d(TAG, "Published " + STATS_MANAGER_SERVICE);
             } catch (Exception e) {
-                Slog.e(TAG, "Failed to publishBinderService", e);
+                Log.e(TAG, "Failed to publishBinderService", e);
             }
         }
 
@@ -124,7 +126,7 @@
             try {
                 mPendingIntent.send(mContext, CODE_DATA_BROADCAST, intent, null, null);
             } catch (PendingIntent.CanceledException e) {
-                Slog.w(TAG, "Unable to send PendingIntent");
+                Log.w(TAG, "Unable to send PendingIntent");
             }
         }
 
@@ -136,17 +138,19 @@
             try {
                 mPendingIntent.send(mContext, CODE_ACTIVE_CONFIGS_BROADCAST, intent, null, null);
                 if (DEBUG) {
-                    Slog.d(TAG, "Sent broadcast with config ids " + Arrays.toString(configIds));
+                    Log.d(TAG, "Sent broadcast with config ids " + Arrays.toString(configIds));
                 }
             } catch (PendingIntent.CanceledException e) {
-                Slog.w(TAG, "Unable to send active configs changed broadcast using PendingIntent");
+                Log.w(TAG, "Unable to send active configs changed broadcast using PendingIntent");
             }
         }
 
         @Override
         public void sendSubscriberBroadcast(long configUid, long configId, long subscriptionId,
-                long subscriptionRuleId, String[] cookies, StatsDimensionsValue dimensionsValue) {
+                long subscriptionRuleId, String[] cookies,
+                StatsDimensionsValueParcel dimensionsValueParcel) {
             enforceStatsdCallingUid();
+            StatsDimensionsValue dimensionsValue = new StatsDimensionsValue(dimensionsValueParcel);
             Intent intent =
                     new Intent()
                             .putExtra(StatsManager.EXTRA_STATS_CONFIG_UID, configUid)
@@ -162,7 +166,7 @@
                     StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookieList);
 
             if (DEBUG) {
-                Slog.d(TAG,
+                Log.d(TAG,
                         String.format(
                                 "Statsd sendSubscriberBroadcast with params {%d %d %d %d %s %s}",
                                 configUid, configId, subscriptionId, subscriptionRuleId,
@@ -172,7 +176,7 @@
             try {
                 mPendingIntent.send(mContext, CODE_SUBSCRIBER_BROADCAST, intent, null, null);
             } catch (PendingIntent.CanceledException e) {
-                Slog.w(TAG,
+                Log.w(TAG,
                         "Unable to send using PendingIntent from uid " + configUid
                                 + "; presumably it had been cancelled.");
             }
diff --git a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java
index a735cb8..cb167c3 100644
--- a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java
+++ b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java
@@ -40,14 +40,10 @@
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.os.UserManager;
-import android.util.Slog;
+import android.util.Log;
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.annotations.GuardedBy;
-import com.android.internal.os.LooperStats;
-import com.android.internal.util.DumpUtils;
-import com.android.server.BinderCallsStatsService;
-import com.android.server.LocalServices;
 
 import libcore.io.IoUtils;
 
@@ -89,6 +85,12 @@
 
     public static final int DEATH_THRESHOLD = 10;
 
+    // TODO(b/149090705): Implement an alternative to sending broadcast with @hide flag
+    // FLAG_RECEIVER_INCLUDE_BACKGROUND. Instead of using the flag, find the
+    // list of registered broadcast receivers and send them directed broadcasts
+    // to wake them up. See b/147374337.
+    private static final int FLAG_RECEIVER_INCLUDE_BACKGROUND = 0x01000000;
+
     static final class CompanionHandler extends Handler {
         CompanionHandler(Looper looper) {
             super(looper);
@@ -126,7 +128,7 @@
             public void onReceive(Context context, Intent intent) {
                 synchronized (sStatsdLock) {
                     if (sStatsd == null) {
-                        Slog.w(TAG, "Could not access statsd for UserUpdateReceiver");
+                        Log.w(TAG, "Could not access statsd for UserUpdateReceiver");
                         return;
                     }
                     try {
@@ -134,14 +136,14 @@
                         // Needed since the new user basically has a version of every app.
                         informAllUidsLocked(context);
                     } catch (RemoteException e) {
-                        Slog.e(TAG, "Failed to inform statsd latest update of all apps", e);
+                        Log.e(TAG, "Failed to inform statsd latest update of all apps", e);
                         forgetEverythingLocked();
                     }
                 }
             }
         };
         mShutdownEventReceiver = new ShutdownEventReceiver();
-        if (DEBUG) Slog.d(TAG, "Registered receiver for ACTION_PACKAGE_REPLACED and ADDED.");
+        if (DEBUG) Log.d(TAG, "Registered receiver for ACTION_PACKAGE_REPLACED and ADDED.");
         HandlerThread handlerThread = new HandlerThread(TAG);
         handlerThread.start();
         mHandler = new CompanionHandler(handlerThread.getLooper());
@@ -171,21 +173,21 @@
         PackageManager pm = context.getPackageManager();
         final List<UserHandle> users = um.getUserHandles(true);
         if (DEBUG) {
-            Slog.d(TAG, "Iterating over " + users.size() + " userHandles.");
+            Log.d(TAG, "Iterating over " + users.size() + " userHandles.");
         }
 
         ParcelFileDescriptor[] fds;
         try {
             fds = ParcelFileDescriptor.createPipe();
         } catch (IOException e) {
-            Slog.e(TAG, "Failed to create a pipe to send uid map data.", e);
+            Log.e(TAG, "Failed to create a pipe to send uid map data.", e);
             return;
         }
         sStatsd.informAllUidData(fds[0]);
         try {
             fds[0].close();
         } catch (IOException e) {
-            Slog.e(TAG, "Failed to close the read side of the pipe.", e);
+            Log.e(TAG, "Failed to close the read side of the pipe.", e);
         }
         final ParcelFileDescriptor writeFd = fds[1];
         HandlerThread backgroundThread = new HandlerThread(
@@ -239,7 +241,7 @@
                 }
                 output.flush();
                 if (DEBUG) {
-                    Slog.d(TAG, "Sent data for " + numRecords + " apps");
+                    Log.d(TAG, "Sent data for " + numRecords + " apps");
                 }
             } finally {
                 IoUtils.closeQuietly(fout);
@@ -261,10 +263,10 @@
                     && intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {
                 return; // Keep only replacing or normal add and remove.
             }
-            if (DEBUG) Slog.d(TAG, "StatsCompanionService noticed an app was updated.");
+            if (DEBUG) Log.d(TAG, "StatsCompanionService noticed an app was updated.");
             synchronized (sStatsdLock) {
                 if (sStatsd == null) {
-                    Slog.w(TAG, "Could not access statsd to inform it of an app update");
+                    Log.w(TAG, "Could not access statsd to inform it of an app update");
                     return;
                 }
                 try {
@@ -299,7 +301,7 @@
                                 installer == null ? "" : installer);
                     }
                 } catch (Exception e) {
-                    Slog.w(TAG, "Failed to inform statsd of an app update", e);
+                    Log.w(TAG, "Failed to inform statsd of an app update", e);
                 }
             }
         }
@@ -308,18 +310,18 @@
     public final static class AnomalyAlarmListener implements OnAlarmListener {
         @Override
         public void onAlarm() {
-            Slog.i(TAG, "StatsCompanionService believes an anomaly has occurred at time "
+            Log.i(TAG, "StatsCompanionService believes an anomaly has occurred at time "
                     + System.currentTimeMillis() + "ms.");
             synchronized (sStatsdLock) {
                 if (sStatsd == null) {
-                    Slog.w(TAG, "Could not access statsd to inform it of anomaly alarm firing");
+                    Log.w(TAG, "Could not access statsd to inform it of anomaly alarm firing");
                     return;
                 }
                 try {
                     // Two-way call to statsd to retain AlarmManager wakelock
                     sStatsd.informAnomalyAlarmFired();
                 } catch (RemoteException e) {
-                    Slog.w(TAG, "Failed to inform statsd of anomaly alarm firing", e);
+                    Log.w(TAG, "Failed to inform statsd of anomaly alarm firing", e);
                 }
             }
             // AlarmManager releases its own wakelock here.
@@ -330,18 +332,18 @@
         @Override
         public void onAlarm() {
             if (DEBUG) {
-                Slog.d(TAG, "Time to poll something.");
+                Log.d(TAG, "Time to poll something.");
             }
             synchronized (sStatsdLock) {
                 if (sStatsd == null) {
-                    Slog.w(TAG, "Could not access statsd to inform it of pulling alarm firing.");
+                    Log.w(TAG, "Could not access statsd to inform it of pulling alarm firing.");
                     return;
                 }
                 try {
                     // Two-way call to statsd to retain AlarmManager wakelock
                     sStatsd.informPollAlarmFired();
                 } catch (RemoteException e) {
-                    Slog.w(TAG, "Failed to inform statsd of pulling alarm firing.", e);
+                    Log.w(TAG, "Failed to inform statsd of pulling alarm firing.", e);
                 }
             }
         }
@@ -351,18 +353,18 @@
         @Override
         public void onAlarm() {
             if (DEBUG) {
-                Slog.d(TAG, "Time to trigger periodic alarm.");
+                Log.d(TAG, "Time to trigger periodic alarm.");
             }
             synchronized (sStatsdLock) {
                 if (sStatsd == null) {
-                    Slog.w(TAG, "Could not access statsd to inform it of periodic alarm firing.");
+                    Log.w(TAG, "Could not access statsd to inform it of periodic alarm firing.");
                     return;
                 }
                 try {
                     // Two-way call to statsd to retain AlarmManager wakelock
                     sStatsd.informAlarmForSubscriberTriggeringFired();
                 } catch (RemoteException e) {
-                    Slog.w(TAG, "Failed to inform statsd of periodic alarm firing.", e);
+                    Log.w(TAG, "Failed to inform statsd of periodic alarm firing.", e);
                 }
             }
             // AlarmManager releases its own wakelock here.
@@ -381,16 +383,16 @@
                 return;
             }
 
-            Slog.i(TAG, "StatsCompanionService noticed a shutdown.");
+            Log.i(TAG, "StatsCompanionService noticed a shutdown.");
             synchronized (sStatsdLock) {
                 if (sStatsd == null) {
-                    Slog.w(TAG, "Could not access statsd to inform it of a shutdown event.");
+                    Log.w(TAG, "Could not access statsd to inform it of a shutdown event.");
                     return;
                 }
                 try {
                     sStatsd.informDeviceShutdown();
                 } catch (Exception e) {
-                    Slog.w(TAG, "Failed to inform statsd of a shutdown event.", e);
+                    Log.w(TAG, "Failed to inform statsd of a shutdown event.", e);
                 }
             }
         }
@@ -399,7 +401,7 @@
     @Override // Binder call
     public void setAnomalyAlarm(long timestampMs) {
         StatsCompanion.enforceStatsdCallingUid();
-        if (DEBUG) Slog.d(TAG, "Setting anomaly alarm for " + timestampMs);
+        if (DEBUG) Log.d(TAG, "Setting anomaly alarm for " + timestampMs);
         final long callingToken = Binder.clearCallingIdentity();
         try {
             // using ELAPSED_REALTIME, not ELAPSED_REALTIME_WAKEUP, so if device is asleep, will
@@ -415,7 +417,7 @@
     @Override // Binder call
     public void cancelAnomalyAlarm() {
         StatsCompanion.enforceStatsdCallingUid();
-        if (DEBUG) Slog.d(TAG, "Cancelling anomaly alarm");
+        if (DEBUG) Log.d(TAG, "Cancelling anomaly alarm");
         final long callingToken = Binder.clearCallingIdentity();
         try {
             mAlarmManager.cancel(mAnomalyAlarmListener);
@@ -428,7 +430,7 @@
     public void setAlarmForSubscriberTriggering(long timestampMs) {
         StatsCompanion.enforceStatsdCallingUid();
         if (DEBUG) {
-            Slog.d(TAG,
+            Log.d(TAG,
                     "Setting periodic alarm in about " + (timestampMs
                             - SystemClock.elapsedRealtime()));
         }
@@ -447,7 +449,7 @@
     public void cancelAlarmForSubscriberTriggering() {
         StatsCompanion.enforceStatsdCallingUid();
         if (DEBUG) {
-            Slog.d(TAG, "Cancelling periodic alarm");
+            Log.d(TAG, "Cancelling periodic alarm");
         }
         final long callingToken = Binder.clearCallingIdentity();
         try {
@@ -461,7 +463,7 @@
     public void setPullingAlarm(long nextPullTimeMs) {
         StatsCompanion.enforceStatsdCallingUid();
         if (DEBUG) {
-            Slog.d(TAG, "Setting pulling alarm in about "
+            Log.d(TAG, "Setting pulling alarm in about "
                     + (nextPullTimeMs - SystemClock.elapsedRealtime()));
         }
         final long callingToken = Binder.clearCallingIdentity();
@@ -479,7 +481,7 @@
     public void cancelPullingAlarm() {
         StatsCompanion.enforceStatsdCallingUid();
         if (DEBUG) {
-            Slog.d(TAG, "Cancelling pulling alarm");
+            Log.d(TAG, "Cancelling pulling alarm");
         }
         final long callingToken = Binder.clearCallingIdentity();
         try {
@@ -493,11 +495,11 @@
     public void statsdReady() {
         StatsCompanion.enforceStatsdCallingUid();
         if (DEBUG) {
-            Slog.d(TAG, "learned that statsdReady");
+            Log.d(TAG, "learned that statsdReady");
         }
         sayHiToStatsd(); // tell statsd that we're ready too and link to it
         mContext.sendBroadcastAsUser(new Intent(StatsManager.ACTION_STATSD_STARTED)
-                        .addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND),
+                        .addFlags(FLAG_RECEIVER_INCLUDE_BACKGROUND),
                 UserHandle.SYSTEM, android.Manifest.permission.DUMP);
     }
 
@@ -509,7 +511,7 @@
             try {
                 informAllUidsLocked(mContext);
             } catch (RemoteException e) {
-                Slog.e(TAG, "Failed to trigger uid snapshot.", e);
+                Log.e(TAG, "Failed to trigger uid snapshot.", e);
             } finally {
                 restoreCallingIdentity(token);
             }
@@ -540,7 +542,7 @@
      * Now that the android system is ready, StatsCompanion is ready too, so inform statsd.
      */
     void systemReady() {
-        if (DEBUG) Slog.d(TAG, "Learned that systemReady");
+        if (DEBUG) Log.d(TAG, "Learned that systemReady");
         sayHiToStatsd();
     }
 
@@ -555,27 +557,27 @@
     private void sayHiToStatsd() {
         synchronized (sStatsdLock) {
             if (sStatsd != null) {
-                Slog.e(TAG, "Trying to fetch statsd, but it was already fetched",
+                Log.e(TAG, "Trying to fetch statsd, but it was already fetched",
                         new IllegalStateException(
                                 "sStatsd is not null when being fetched"));
                 return;
             }
             sStatsd = fetchStatsdService();
             if (sStatsd == null) {
-                Slog.i(TAG,
+                Log.i(TAG,
                         "Could not yet find statsd to tell it that StatsCompanion is "
                                 + "alive.");
                 return;
             }
             mStatsManagerService.statsdReady(sStatsd);
-            if (DEBUG) Slog.d(TAG, "Saying hi to statsd");
+            if (DEBUG) Log.d(TAG, "Saying hi to statsd");
             try {
                 sStatsd.statsCompanionReady();
                 // If the statsCompanionReady two-way binder call returns, link to statsd.
                 try {
                     sStatsd.asBinder().linkToDeath(new StatsdDeathRecipient(), 0);
                 } catch (RemoteException e) {
-                    Slog.e(TAG, "linkToDeath(StatsdDeathRecipient) failed", e);
+                    Log.e(TAG, "linkToDeath(StatsdDeathRecipient) failed", e);
                     forgetEverythingLocked();
                 }
                 // Setup broadcast receiver for updates.
@@ -605,9 +607,9 @@
                 } finally {
                     restoreCallingIdentity(token);
                 }
-                Slog.i(TAG, "Told statsd that StatsCompanionService is alive.");
+                Log.i(TAG, "Told statsd that StatsCompanionService is alive.");
             } catch (RemoteException e) {
-                Slog.e(TAG, "Failed to inform statsd that statscompanion is ready", e);
+                Log.e(TAG, "Failed to inform statsd that statscompanion is ready", e);
                 forgetEverythingLocked();
             }
         }
@@ -616,7 +618,7 @@
     private class StatsdDeathRecipient implements IBinder.DeathRecipient {
         @Override
         public void binderDied() {
-            Slog.i(TAG, "Statsd is dead - erase all my knowledge, except pullers");
+            Log.i(TAG, "Statsd is dead - erase all my knowledge, except pullers");
             synchronized (sStatsdLock) {
                 long now = SystemClock.elapsedRealtime();
                 for (Long timeMillis : mDeathTimeMillis) {
@@ -656,22 +658,15 @@
         cancelAnomalyAlarm();
         cancelPullingAlarm();
 
-        BinderCallsStatsService.Internal binderStats =
-                LocalServices.getService(BinderCallsStatsService.Internal.class);
-        if (binderStats != null) {
-            binderStats.reset();
-        }
-
-        LooperStats looperStats = LocalServices.getService(LooperStats.class);
-        if (looperStats != null) {
-            looperStats.reset();
-        }
         mStatsManagerService.statsdNotReady();
     }
 
     @Override
     protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
-        if (!DumpUtils.checkDumpPermission(mContext, TAG, writer)) return;
+        if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
+                != PackageManager.PERMISSION_GRANTED) {
+            return;
+        }
 
         synchronized (sStatsdLock) {
             writer.println(
diff --git a/apex/statsd/service/java/com/android/server/stats/StatsManagerService.java b/apex/statsd/service/java/com/android/server/stats/StatsManagerService.java
index c1dc584..4e4bc40 100644
--- a/apex/statsd/service/java/com/android/server/stats/StatsManagerService.java
+++ b/apex/statsd/service/java/com/android/server/stats/StatsManagerService.java
@@ -30,7 +30,7 @@
 import android.os.Process;
 import android.os.RemoteException;
 import android.util.ArrayMap;
-import android.util.Slog;
+import android.util.Log;
 
 import com.android.internal.annotations.GuardedBy;
 
@@ -192,7 +192,7 @@
             statsd.registerPullAtomCallback(
                     callingUid, atomTag, coolDownNs, timeoutNs, additiveFields, pullerCallback);
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to access statsd to register puller for atom " + atomTag);
+            Log.e(TAG, "Failed to access statsd to register puller for atom " + atomTag);
         } finally {
             Binder.restoreCallingIdentity(token);
         }
@@ -219,7 +219,7 @@
         try {
             statsd.unregisterPullAtomCallback(callingUid, atomTag);
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to access statsd to unregister puller for atom " + atomTag);
+            Log.e(TAG, "Failed to access statsd to unregister puller for atom " + atomTag);
         } finally {
             Binder.restoreCallingIdentity(token);
         }
@@ -243,7 +243,7 @@
                 statsd.setDataFetchOperation(configId, pir, callingUid);
             }
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to setDataFetchOperation with statsd");
+            Log.e(TAG, "Failed to setDataFetchOperation with statsd");
         } finally {
             Binder.restoreCallingIdentity(token);
         }
@@ -264,7 +264,7 @@
                 statsd.removeDataFetchOperation(configId, callingUid);
             }
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to removeDataFetchOperation with statsd");
+            Log.e(TAG, "Failed to removeDataFetchOperation with statsd");
         } finally {
             Binder.restoreCallingIdentity(token);
         }
@@ -287,7 +287,7 @@
                 return statsd.setActiveConfigsChangedOperation(pir, callingUid);
             }
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to setActiveConfigsChangedOperation with statsd");
+            Log.e(TAG, "Failed to setActiveConfigsChangedOperation with statsd");
         } finally {
             Binder.restoreCallingIdentity(token);
         }
@@ -308,7 +308,7 @@
                 statsd.removeActiveConfigsChangedOperation(callingUid);
             }
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to removeActiveConfigsChangedOperation with statsd");
+            Log.e(TAG, "Failed to removeActiveConfigsChangedOperation with statsd");
         } finally {
             Binder.restoreCallingIdentity(token);
         }
@@ -336,7 +336,7 @@
                         configId, subscriberId, pir, callingUid);
             }
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to setBroadcastSubscriber with statsd");
+            Log.e(TAG, "Failed to setBroadcastSubscriber with statsd");
         } finally {
             Binder.restoreCallingIdentity(token);
         }
@@ -362,7 +362,7 @@
                 statsd.unsetBroadcastSubscriber(configId, subscriberId, callingUid);
             }
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to unsetBroadcastSubscriber with statsd");
+            Log.e(TAG, "Failed to unsetBroadcastSubscriber with statsd");
         } finally {
             Binder.restoreCallingIdentity(token);
         }
@@ -378,7 +378,7 @@
                 return statsd.getRegisteredExperimentIds();
             }
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to getRegisteredExperimentIds with statsd");
+            Log.e(TAG, "Failed to getRegisteredExperimentIds with statsd");
             throw new IllegalStateException(e.getMessage(), e);
         } finally {
             Binder.restoreCallingIdentity(token);
@@ -396,7 +396,7 @@
                 return statsd.getMetadata();
             }
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to getMetadata with statsd");
+            Log.e(TAG, "Failed to getMetadata with statsd");
             throw new IllegalStateException(e.getMessage(), e);
         } finally {
             Binder.restoreCallingIdentity(token);
@@ -415,7 +415,7 @@
                 return statsd.getData(key, callingUid);
             }
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to getData with statsd");
+            Log.e(TAG, "Failed to getData with statsd");
             throw new IllegalStateException(e.getMessage(), e);
         } finally {
             Binder.restoreCallingIdentity(token);
@@ -436,7 +436,7 @@
                 return;
             }
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to addConfiguration with statsd");
+            Log.e(TAG, "Failed to addConfiguration with statsd");
             throw new IllegalStateException(e.getMessage(), e);
         } finally {
             Binder.restoreCallingIdentity(token);
@@ -457,7 +457,7 @@
                 return;
             }
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to removeConfiguration with statsd");
+            Log.e(TAG, "Failed to removeConfiguration with statsd");
             throw new IllegalStateException(e.getMessage(), e);
         } finally {
             Binder.restoreCallingIdentity(token);
@@ -522,7 +522,7 @@
                 try {
                     mLock.wait(STATSD_TIMEOUT_MILLIS);
                 } catch (InterruptedException e) {
-                    Slog.e(TAG, "wait for statsd interrupted");
+                    Log.e(TAG, "wait for statsd interrupted");
                 }
             }
             return mStatsd;
@@ -578,7 +578,7 @@
             registerAllActiveConfigsChangedOperations(statsd);
             registerAllBroadcastSubscribers(statsd);
         } catch (RemoteException e) {
-            Slog.e(TAG, "StatsManager failed to (re-)register data with statsd");
+            Log.e(TAG, "StatsManager failed to (re-)register data with statsd");
         } finally {
             Binder.restoreCallingIdentity(token);
         }
diff --git a/apex/statsd/testing/Android.bp b/apex/statsd/testing/Android.bp
index 22e7301..a9cd0cc 100644
--- a/apex/statsd/testing/Android.bp
+++ b/apex/statsd/testing/Android.bp
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-apex {
+apex_test {
     name: "test_com.android.os.statsd",
     visibility: [
         "//system/apex/tests",
diff --git a/api/current.txt b/api/current.txt
index 81c4c92..c6bb79f 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -9,6 +9,7 @@
     ctor public Manifest.permission();
     field public static final String ACCEPT_HANDOVER = "android.permission.ACCEPT_HANDOVER";
     field public static final String ACCESS_BACKGROUND_LOCATION = "android.permission.ACCESS_BACKGROUND_LOCATION";
+    field public static final String ACCESS_CALL_AUDIO = "android.permission.ACCESS_CALL_AUDIO";
     field public static final String ACCESS_CHECKIN_PROPERTIES = "android.permission.ACCESS_CHECKIN_PROPERTIES";
     field public static final String ACCESS_COARSE_LOCATION = "android.permission.ACCESS_COARSE_LOCATION";
     field public static final String ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION";
@@ -91,6 +92,7 @@
     field public static final String INTERACT_ACROSS_PROFILES = "android.permission.INTERACT_ACROSS_PROFILES";
     field public static final String INTERNET = "android.permission.INTERNET";
     field public static final String KILL_BACKGROUND_PROCESSES = "android.permission.KILL_BACKGROUND_PROCESSES";
+    field public static final String LOADER_USAGE_STATS = "android.permission.LOADER_USAGE_STATS";
     field public static final String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE";
     field public static final String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS";
     field public static final String MANAGE_EXTERNAL_STORAGE = "android.permission.MANAGE_EXTERNAL_STORAGE";
@@ -288,6 +290,7 @@
     field public static final int allowBackup = 16843392; // 0x1010280
     field public static final int allowClearUserData = 16842757; // 0x1010005
     field public static final int allowEmbedded = 16843765; // 0x10103f5
+    field public static final int allowNativeHeapPointerTagging = 16844307; // 0x1010613
     field public static final int allowParallelSyncs = 16843570; // 0x1010332
     field public static final int allowSingleTap = 16843353; // 0x1010259
     field public static final int allowTaskReparenting = 16843268; // 0x1010204
@@ -333,9 +336,6 @@
     field public static final int autoUrlDetect = 16843404; // 0x101028c
     field public static final int autoVerify = 16844014; // 0x10104ee
     field public static final int autofillHints = 16844118; // 0x1010556
-    field public static final int autofillInlineSuggestionChip = 16844307; // 0x1010613
-    field public static final int autofillInlineSuggestionSubtitle = 16844309; // 0x1010615
-    field public static final int autofillInlineSuggestionTitle = 16844308; // 0x1010614
     field public static final int autofilledHighlight = 16844136; // 0x1010568
     field public static final int background = 16842964; // 0x10100d4
     field public static final int backgroundDimAmount = 16842802; // 0x1010032
@@ -952,6 +952,7 @@
     field public static final int mediaRouteButtonStyle = 16843693; // 0x10103ad
     field public static final int mediaRouteTypes = 16843694; // 0x10103ae
     field public static final int menuCategory = 16843230; // 0x10101de
+    field public static final int mimeGroup = 16844309; // 0x1010615
     field public static final int mimeType = 16842790; // 0x1010026
     field public static final int min = 16844089; // 0x1010539
     field public static final int minAspectRatio = 16844187; // 0x101059b
@@ -1080,6 +1081,7 @@
     field public static final int preferenceScreenStyle = 16842891; // 0x101008b
     field public static final int preferenceStyle = 16842894; // 0x101008e
     field public static final int presentationTheme = 16843712; // 0x10103c0
+    field public static final int preserveLegacyExternalStorage = 16844308; // 0x1010614
     field public static final int previewImage = 16843482; // 0x10102da
     field public static final int primaryContentAlpha = 16844114; // 0x1010552
     field public static final int priority = 16842780; // 0x101001c
@@ -2257,7 +2259,6 @@
     field public static final int ThemeOverlay_Material_Dialog = 16974550; // 0x10302d6
     field public static final int ThemeOverlay_Material_Dialog_Alert = 16974551; // 0x10302d7
     field public static final int ThemeOverlay_Material_Light = 16974410; // 0x103024a
-    field public static final int Theme_AutofillInlineSuggestion = 16974565; // 0x10302e5
     field public static final int Theme_Black = 16973832; // 0x1030008
     field public static final int Theme_Black_NoTitleBar = 16973833; // 0x1030009
     field public static final int Theme_Black_NoTitleBar_Fullscreen = 16973834; // 0x103000a
@@ -2872,9 +2873,12 @@
     method protected void onServiceConnected();
     method public void onSystemActionsChanged();
     method public final boolean performGlobalAction(int);
+    method public void setGestureDetectionPassthroughRegion(int, @NonNull android.graphics.Region);
     method public final void setServiceInfo(android.accessibilityservice.AccessibilityServiceInfo);
-    method public boolean takeScreenshot(int, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.graphics.Bitmap>);
+    method public void setTouchExplorationPassthroughRegion(int, @NonNull android.graphics.Region);
+    method public boolean takeScreenshot(int, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.accessibilityservice.AccessibilityService.ScreenshotResult>);
     field public static final int GESTURE_2_FINGER_DOUBLE_TAP = 20; // 0x14
+    field public static final int GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD = 40; // 0x28
     field public static final int GESTURE_2_FINGER_SINGLE_TAP = 19; // 0x13
     field public static final int GESTURE_2_FINGER_SWIPE_DOWN = 26; // 0x1a
     field public static final int GESTURE_2_FINGER_SWIPE_LEFT = 27; // 0x1b
@@ -2882,12 +2886,21 @@
     field public static final int GESTURE_2_FINGER_SWIPE_UP = 25; // 0x19
     field public static final int GESTURE_2_FINGER_TRIPLE_TAP = 21; // 0x15
     field public static final int GESTURE_3_FINGER_DOUBLE_TAP = 23; // 0x17
+    field public static final int GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD = 41; // 0x29
     field public static final int GESTURE_3_FINGER_SINGLE_TAP = 22; // 0x16
     field public static final int GESTURE_3_FINGER_SWIPE_DOWN = 30; // 0x1e
     field public static final int GESTURE_3_FINGER_SWIPE_LEFT = 31; // 0x1f
     field public static final int GESTURE_3_FINGER_SWIPE_RIGHT = 32; // 0x20
     field public static final int GESTURE_3_FINGER_SWIPE_UP = 29; // 0x1d
     field public static final int GESTURE_3_FINGER_TRIPLE_TAP = 24; // 0x18
+    field public static final int GESTURE_4_FINGER_DOUBLE_TAP = 38; // 0x26
+    field public static final int GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD = 42; // 0x2a
+    field public static final int GESTURE_4_FINGER_SINGLE_TAP = 37; // 0x25
+    field public static final int GESTURE_4_FINGER_SWIPE_DOWN = 34; // 0x22
+    field public static final int GESTURE_4_FINGER_SWIPE_LEFT = 35; // 0x23
+    field public static final int GESTURE_4_FINGER_SWIPE_RIGHT = 36; // 0x24
+    field public static final int GESTURE_4_FINGER_SWIPE_UP = 33; // 0x21
+    field public static final int GESTURE_4_FINGER_TRIPLE_TAP = 39; // 0x27
     field public static final int GESTURE_DOUBLE_TAP = 17; // 0x11
     field public static final int GESTURE_DOUBLE_TAP_AND_HOLD = 18; // 0x12
     field public static final int GESTURE_SWIPE_DOWN = 2; // 0x2
@@ -2945,6 +2958,12 @@
     method public void onMagnificationChanged(@NonNull android.accessibilityservice.AccessibilityService.MagnificationController, @NonNull android.graphics.Region, float, float, float);
   }
 
+  public static final class AccessibilityService.ScreenshotResult {
+    method @NonNull public android.graphics.ColorSpace getColorSpace();
+    method @NonNull public android.hardware.HardwareBuffer getHardwareBuffer();
+    method public long getTimestamp();
+  }
+
   public static final class AccessibilityService.SoftKeyboardController {
     method public void addOnShowModeChangedListener(@NonNull android.accessibilityservice.AccessibilityService.SoftKeyboardController.OnShowModeChangedListener);
     method public void addOnShowModeChangedListener(@NonNull android.accessibilityservice.AccessibilityService.SoftKeyboardController.OnShowModeChangedListener, @Nullable android.os.Handler);
@@ -2964,7 +2983,6 @@
     method public int describeContents();
     method public static String feedbackTypeToString(int);
     method public static String flagToString(int);
-    method public int getAnimatedImageRes();
     method @Deprecated public boolean getCanRetrieveWindowContent();
     method public int getCapabilities();
     method @Deprecated public String getDescription();
@@ -2973,6 +2991,7 @@
     method public int getNonInteractiveUiTimeoutMillis();
     method public android.content.pm.ResolveInfo getResolveInfo();
     method public String getSettingsActivityName();
+    method @Nullable public android.graphics.drawable.Drawable loadAnimatedImage(@NonNull android.content.pm.PackageManager);
     method public String loadDescription(android.content.pm.PackageManager);
     method @Nullable public String loadHtmlDescription(@NonNull android.content.pm.PackageManager);
     method public CharSequence loadSummary(android.content.pm.PackageManager);
@@ -4002,7 +4021,7 @@
     method public android.util.Size getAppTaskThumbnailSize();
     method public java.util.List<android.app.ActivityManager.AppTask> getAppTasks();
     method public android.content.pm.ConfigurationInfo getDeviceConfigurationInfo();
-    method @Nullable 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.ApplicationExitInfo> getHistoricalProcessExitReasons(@Nullable String, @IntRange(from=0) int, @IntRange(from=0) int);
     method public int getLargeMemoryClass();
     method public int getLauncherLargeIconDensity();
     method public int getLauncherLargeIconSize();
@@ -4336,7 +4355,7 @@
   public class AppOpsManager {
     method @Deprecated public int checkOp(@NonNull String, int, @NonNull String);
     method @Deprecated public int checkOpNoThrow(@NonNull String, int, @NonNull String);
-    method public void checkPackage(int, @NonNull String);
+    method @Deprecated public void checkPackage(int, @NonNull String);
     method @Deprecated public void finishOp(@NonNull String, int, @NonNull String);
     method public void finishOp(@NonNull String, int, @NonNull String, @Nullable String);
     method public boolean isOpActive(@NonNull String, int, @NonNull String);
@@ -4349,7 +4368,7 @@
     method @Deprecated public int noteProxyOpNoThrow(@NonNull String, @NonNull String);
     method @Deprecated public int noteProxyOpNoThrow(@NonNull String, @Nullable String, int);
     method public int noteProxyOpNoThrow(@NonNull String, @Nullable String, int, @Nullable String, @Nullable String);
-    method public static String permissionToOp(String);
+    method @Nullable public static String permissionToOp(@NonNull String);
     method public void setNotedAppOpsCollector(@Nullable android.app.AppOpsManager.AppOpsCollector);
     method @Deprecated public int startOp(@NonNull String, int, @NonNull String);
     method public int startOp(@NonNull String, int, @Nullable String, @Nullable String, @Nullable String);
@@ -4542,12 +4561,13 @@
     method public int getPackageUid();
     method public int getPid();
     method @NonNull public String getProcessName();
-    method public int getPss();
+    method public long getPss();
     method public int getRealUid();
     method public int getReason();
-    method public int getRss();
+    method public long getRss();
     method public int getStatus();
     method public long getTimestamp();
+    method @NonNull public android.os.UserHandle getUserHandle();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.app.ApplicationExitInfo> CREATOR;
     field public static final int REASON_ANR = 6; // 0x6
@@ -6407,9 +6427,13 @@
   public class StatusBarManager {
   }
 
-  public final class SyncNotedAppOp {
+  public final class SyncNotedAppOp implements android.os.Parcelable {
+    ctor public SyncNotedAppOp(@IntRange(from=0L) int, @Nullable String);
+    method public int describeContents();
     method @Nullable public String getFeatureId();
     method @NonNull public String getOp();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.SyncNotedAppOp> CREATOR;
   }
 
   @Deprecated public class TabActivity extends android.app.ActivityGroup {
@@ -6803,7 +6827,7 @@
     ctor public DevicePolicyKeyguardService();
     method @Nullable public void dismiss();
     method @Nullable public final android.os.IBinder onBind(@Nullable android.content.Intent);
-    method @Nullable public android.view.SurfaceControl onSurfaceReady(@Nullable android.os.IBinder);
+    method @Nullable public android.view.SurfaceControlViewHost.SurfacePackage onSurfaceReady(@Nullable android.os.IBinder);
   }
 
   public class DevicePolicyManager {
@@ -6902,6 +6926,7 @@
     method public boolean grantKeyPairToApp(@Nullable android.content.ComponentName, @NonNull String, @NonNull String);
     method public boolean hasCaCertInstalled(@Nullable android.content.ComponentName, byte[]);
     method public boolean hasGrantedPolicy(@NonNull android.content.ComponentName, int);
+    method public boolean hasLockdownAdminConfiguredNetworks(@NonNull android.content.ComponentName);
     method public boolean installCaCert(@Nullable android.content.ComponentName, byte[]);
     method public boolean installExistingPackage(@NonNull android.content.ComponentName, String);
     method public boolean installKeyPair(@Nullable android.content.ComponentName, @NonNull java.security.PrivateKey, @NonNull java.security.cert.Certificate, @NonNull String);
@@ -6920,7 +6945,6 @@
     method public boolean isDeviceOwnerApp(String);
     method public boolean isEphemeralUser(@NonNull android.content.ComponentName);
     method public boolean isLockTaskPermitted(String);
-    method public boolean isLockdownAdminConfiguredNetworks(@NonNull android.content.ComponentName);
     method public boolean isLogoutEnabled();
     method public boolean isManagedProfile(@NonNull android.content.ComponentName);
     method public boolean isMasterVolumeMuted(@NonNull android.content.ComponentName);
@@ -6967,6 +6991,7 @@
     method public void setCameraDisabled(@NonNull android.content.ComponentName, boolean);
     method @Deprecated public void setCertInstallerPackage(@NonNull android.content.ComponentName, @Nullable String) throws java.lang.SecurityException;
     method public void setCommonCriteriaModeEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setConfiguredNetworksLockdownState(@NonNull android.content.ComponentName, boolean);
     method public void setCrossProfileCalendarPackages(@NonNull android.content.ComponentName, @Nullable java.util.Set<java.lang.String>);
     method public void setCrossProfileCallerIdDisabled(@NonNull android.content.ComponentName, boolean);
     method public void setCrossProfileContactsSearchDisabled(@NonNull android.content.ComponentName, boolean);
@@ -6986,7 +7011,6 @@
     method public void setLocationEnabled(@NonNull android.content.ComponentName, boolean);
     method public void setLockTaskFeatures(@NonNull android.content.ComponentName, int);
     method public void setLockTaskPackages(@NonNull android.content.ComponentName, @NonNull String[]) throws java.lang.SecurityException;
-    method public void setLockdownAdminConfiguredNetworks(@NonNull android.content.ComponentName, boolean);
     method public void setLogoutEnabled(@NonNull android.content.ComponentName, boolean);
     method public void setLongSupportMessage(@NonNull android.content.ComponentName, @Nullable CharSequence);
     method public void setManagedProfileMaximumTimeOff(@NonNull android.content.ComponentName, long);
@@ -7223,7 +7247,7 @@
   public final class FactoryResetProtectionPolicy implements android.os.Parcelable {
     method public int describeContents();
     method @NonNull public java.util.List<java.lang.String> getFactoryResetProtectionAccounts();
-    method public boolean isFactoryResetProtectionDisabled();
+    method public boolean isFactoryResetProtectionEnabled();
     method public void writeToParcel(@NonNull android.os.Parcel, @Nullable int);
     field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.FactoryResetProtectionPolicy> CREATOR;
   }
@@ -7232,7 +7256,7 @@
     ctor public FactoryResetProtectionPolicy.Builder();
     method @NonNull public android.app.admin.FactoryResetProtectionPolicy build();
     method @NonNull public android.app.admin.FactoryResetProtectionPolicy.Builder setFactoryResetProtectionAccounts(@NonNull java.util.List<java.lang.String>);
-    method @NonNull public android.app.admin.FactoryResetProtectionPolicy.Builder setFactoryResetProtectionDisabled(boolean);
+    method @NonNull public android.app.admin.FactoryResetProtectionPolicy.Builder setFactoryResetProtectionEnabled(boolean);
   }
 
   public class FreezePeriod {
@@ -7560,7 +7584,9 @@
 
   public class BlobStoreManager {
     method public void acquireLease(@NonNull android.app.blob.BlobHandle, @IdRes int, long) throws java.io.IOException;
+    method public void acquireLease(@NonNull android.app.blob.BlobHandle, @NonNull CharSequence, long) throws java.io.IOException;
     method public void acquireLease(@NonNull android.app.blob.BlobHandle, @IdRes int) throws java.io.IOException;
+    method public void acquireLease(@NonNull android.app.blob.BlobHandle, @NonNull CharSequence) throws java.io.IOException;
     method @IntRange(from=1) public long createSession(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
     method public void deleteSession(@IntRange(from=1) long) throws java.io.IOException;
     method @NonNull public android.os.ParcelFileDescriptor openBlob(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
@@ -10124,7 +10150,6 @@
     field public static final String ALARM_SERVICE = "alarm";
     field public static final String APPWIDGET_SERVICE = "appwidget";
     field public static final String APP_OPS_SERVICE = "appops";
-    field public static final String APP_SEARCH_SERVICE = "app_search";
     field public static final String AUDIO_SERVICE = "audio";
     field public static final String BATTERY_SERVICE = "batterymanager";
     field public static final int BIND_ABOVE_CLIENT = 8; // 0x8
@@ -10806,6 +10831,8 @@
     field public static final int FLAG_ACTIVITY_NO_USER_ACTION = 262144; // 0x40000
     field public static final int FLAG_ACTIVITY_PREVIOUS_IS_TOP = 16777216; // 0x1000000
     field public static final int FLAG_ACTIVITY_REORDER_TO_FRONT = 131072; // 0x20000
+    field public static final int FLAG_ACTIVITY_REQUIRE_DEFAULT = 512; // 0x200
+    field public static final int FLAG_ACTIVITY_REQUIRE_NON_BROWSER = 1024; // 0x400
     field public static final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED = 2097152; // 0x200000
     field public static final int FLAG_ACTIVITY_RETAIN_IN_RECENTS = 8192; // 0x2000
     field public static final int FLAG_ACTIVITY_SINGLE_TOP = 536870912; // 0x20000000
@@ -11539,7 +11566,7 @@
     method @NonNull public android.graphics.drawable.Drawable getProfileSwitchingIconDrawable(@NonNull android.os.UserHandle);
     method @NonNull public CharSequence getProfileSwitchingLabel(@NonNull android.os.UserHandle);
     method @NonNull public java.util.List<android.os.UserHandle> getTargetUserProfiles();
-    method @RequiresPermission(anyOf={android.Manifest.permission.INTERACT_ACROSS_PROFILES, "android.permission.INTERACT_ACROSS_USERS"}) public void startActivity(@NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method @RequiresPermission(anyOf={android.Manifest.permission.INTERACT_ACROSS_PROFILES, "android.permission.INTERACT_ACROSS_USERS"}) public void startActivity(@NonNull android.content.Intent, @NonNull android.os.UserHandle, @Nullable android.app.Activity);
     method public void startMainActivity(@NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
     field public static final String ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED = "android.content.pm.action.CAN_INTERACT_ACROSS_PROFILES_CHANGED";
   }
@@ -11916,6 +11943,7 @@
     method @CheckResult public abstract int checkSignatures(@NonNull String, @NonNull String);
     method @CheckResult public abstract int checkSignatures(int, int);
     method public abstract void clearInstantAppCookie();
+    method public void clearMimeGroup(@NonNull String);
     method @Deprecated public abstract void clearPackagePreferredActivities(@NonNull String);
     method public abstract String[] currentToCanonicalPackageNames(@NonNull String[]);
     method public abstract void extendVerificationTimeout(int, int, long);
@@ -11951,6 +11979,7 @@
     method @NonNull public abstract android.content.pm.InstrumentationInfo getInstrumentationInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
     method @Nullable public abstract android.content.Intent getLaunchIntentForPackage(@NonNull String);
     method @Nullable public abstract android.content.Intent getLeanbackLaunchIntentForPackage(@NonNull String);
+    method @Nullable public java.util.Set<java.lang.String> getMimeGroup(@NonNull String);
     method @NonNull public android.content.pm.ModuleInfo getModuleInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
     method @Nullable public abstract String getNameForUid(int);
     method @Nullable public android.content.pm.PackageInfo getPackageArchiveInfo(@NonNull String, int);
@@ -12013,6 +12042,7 @@
     method @RequiresPermission(value=android.Manifest.permission.CHANGE_COMPONENT_ENABLED_STATE, conditional=true) public abstract void setApplicationEnabledSetting(@NonNull String, int, int);
     method @RequiresPermission(value=android.Manifest.permission.CHANGE_COMPONENT_ENABLED_STATE, conditional=true) public abstract void setComponentEnabledSetting(@NonNull android.content.ComponentName, int, int);
     method public abstract void setInstallerPackageName(@NonNull String, @Nullable String);
+    method public void setMimeGroup(@NonNull String, @NonNull java.util.Set<java.lang.String>);
     method public abstract void updateInstantAppCookie(@Nullable byte[]);
     method public abstract void verifyPendingInstall(int, int);
     field public static final int CERT_INPUT_RAW_X509 = 0; // 0x0
@@ -12051,7 +12081,7 @@
     field public static final String FEATURE_COMPANION_DEVICE_SETUP = "android.software.companion_device_setup";
     field public static final String FEATURE_CONNECTION_SERVICE = "android.software.connectionservice";
     field public static final String FEATURE_CONSUMER_IR = "android.hardware.consumerir";
-    field public static final String FEATURE_CONTEXTHUB = "android.hardware.context_hub";
+    field public static final String FEATURE_CONTEXT_HUB = "android.hardware.context_hub";
     field public static final String FEATURE_DEVICE_ADMIN = "android.software.device_admin";
     field public static final String FEATURE_EMBEDDED = "android.hardware.type.embedded";
     field public static final String FEATURE_ETHERNET = "android.hardware.ethernet";
@@ -12561,6 +12591,7 @@
     method public int getLayoutDirection();
     method @NonNull public android.os.LocaleList getLocales();
     method public boolean isLayoutSizeAtLeast(int);
+    method public boolean isNightModeActive();
     method public boolean isScreenHdr();
     method public boolean isScreenRound();
     method public boolean isScreenWideColorGamut();
@@ -12685,8 +12716,7 @@
 
   public class Resources {
     ctor @Deprecated public Resources(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration);
-    method public void addLoader(@NonNull android.content.res.loader.ResourcesLoader);
-    method public void clearLoaders();
+    method public void addLoaders(@NonNull android.content.res.loader.ResourcesLoader...);
     method public final void finishPreloading();
     method public final void flushLayoutCache();
     method @NonNull public android.content.res.XmlResourceParser getAnimation(@AnimRes @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
@@ -12713,7 +12743,6 @@
     method @NonNull public int[] getIntArray(@ArrayRes int) throws android.content.res.Resources.NotFoundException;
     method public int getInteger(@IntegerRes int) throws android.content.res.Resources.NotFoundException;
     method @NonNull public android.content.res.XmlResourceParser getLayout(@LayoutRes int) throws android.content.res.Resources.NotFoundException;
-    method @NonNull public java.util.List<android.content.res.loader.ResourcesLoader> getLoaders();
     method @Deprecated public android.graphics.Movie getMovie(@RawRes int) throws android.content.res.Resources.NotFoundException;
     method @NonNull public String getQuantityString(@PluralsRes int, int, java.lang.Object...) throws android.content.res.Resources.NotFoundException;
     method @NonNull public String getQuantityString(@PluralsRes int, int) throws android.content.res.Resources.NotFoundException;
@@ -12741,8 +12770,7 @@
     method public android.content.res.AssetFileDescriptor openRawResourceFd(@RawRes int) throws android.content.res.Resources.NotFoundException;
     method public void parseBundleExtra(String, android.util.AttributeSet, android.os.Bundle) throws org.xmlpull.v1.XmlPullParserException;
     method public void parseBundleExtras(android.content.res.XmlResourceParser, android.os.Bundle) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public void removeLoader(@NonNull android.content.res.loader.ResourcesLoader);
-    method public void setLoaders(@NonNull java.util.List<android.content.res.loader.ResourcesLoader>);
+    method public void removeLoaders(@NonNull android.content.res.loader.ResourcesLoader...);
     method @Deprecated public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
     field @AnyRes public static final int ID_NULL = 0; // 0x0
   }
@@ -17018,6 +17046,7 @@
     field public static final int BIOMETRIC_ERROR_HW_UNAVAILABLE = 1; // 0x1
     field public static final int BIOMETRIC_ERROR_NONE_ENROLLED = 11; // 0xb
     field public static final int BIOMETRIC_ERROR_NO_HARDWARE = 12; // 0xc
+    field public static final int BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
     field public static final int BIOMETRIC_SUCCESS = 0; // 0x0
   }
 
@@ -17052,6 +17081,7 @@
     field public static final int BIOMETRIC_ERROR_NO_BIOMETRICS = 11; // 0xb
     field public static final int BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL = 14; // 0xe
     field public static final int BIOMETRIC_ERROR_NO_SPACE = 4; // 0x4
+    field public static final int BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
     field public static final int BIOMETRIC_ERROR_TIMEOUT = 3; // 0x3
     field public static final int BIOMETRIC_ERROR_UNABLE_TO_PROCESS = 2; // 0x2
     field public static final int BIOMETRIC_ERROR_USER_CANCELED = 10; // 0xa
@@ -18095,6 +18125,7 @@
     method public int[] getInputDeviceIds();
     method public void registerInputDeviceListener(android.hardware.input.InputManager.InputDeviceListener, android.os.Handler);
     method public void unregisterInputDeviceListener(android.hardware.input.InputManager.InputDeviceListener);
+    method @Nullable public android.view.VerifiedInputEvent verifyInputEvent(@NonNull android.view.InputEvent);
     field public static final String ACTION_QUERY_KEYBOARD_LAYOUTS = "android.hardware.input.action.QUERY_KEYBOARD_LAYOUTS";
     field public static final String META_DATA_KEYBOARD_LAYOUTS = "android.hardware.input.metadata.KEYBOARD_LAYOUTS";
   }
@@ -23144,7 +23175,7 @@
     method public void onConfigureWindow(android.view.Window, boolean, boolean);
     method public android.view.View onCreateCandidatesView();
     method public android.view.View onCreateExtractTextView();
-    method @Nullable public android.view.inputmethod.InlineSuggestionsRequest onCreateInlineSuggestionsRequest();
+    method @Nullable public android.view.inputmethod.InlineSuggestionsRequest onCreateInlineSuggestionsRequest(@NonNull android.os.Bundle);
     method public android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl onCreateInputMethodInterface();
     method public android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl onCreateInputMethodSessionInterface();
     method public android.view.View onCreateInputView();
@@ -23458,6 +23489,57 @@
     method public static boolean isPresent();
   }
 
+  public final class GnssAntennaInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0f) public double getCarrierFrequencyMHz();
+    method @NonNull public android.location.GnssAntennaInfo.PhaseCenterOffset getPhaseCenterOffset();
+    method @Nullable public android.location.GnssAntennaInfo.SphericalCorrections getPhaseCenterVariationCorrections();
+    method @Nullable public android.location.GnssAntennaInfo.SphericalCorrections getSignalGainCorrections();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssAntennaInfo> CREATOR;
+  }
+
+  public static class GnssAntennaInfo.Builder {
+    ctor public GnssAntennaInfo.Builder();
+    method @NonNull public android.location.GnssAntennaInfo build();
+    method @NonNull public android.location.GnssAntennaInfo.Builder setCarrierFrequencyMHz(@FloatRange(from=0.0f) double);
+    method @NonNull public android.location.GnssAntennaInfo.Builder setPhaseCenterOffset(@NonNull android.location.GnssAntennaInfo.PhaseCenterOffset);
+    method @NonNull public android.location.GnssAntennaInfo.Builder setPhaseCenterVariationCorrections(@Nullable android.location.GnssAntennaInfo.SphericalCorrections);
+    method @NonNull public android.location.GnssAntennaInfo.Builder setSignalGainCorrections(@Nullable android.location.GnssAntennaInfo.SphericalCorrections);
+  }
+
+  public static interface GnssAntennaInfo.Listener {
+    method public void onGnssAntennaInfoReceived(@NonNull java.util.List<android.location.GnssAntennaInfo>);
+  }
+
+  public static final class GnssAntennaInfo.PhaseCenterOffset implements android.os.Parcelable {
+    ctor public GnssAntennaInfo.PhaseCenterOffset(double, double, double, double, double, double);
+    method public int describeContents();
+    method @FloatRange public double getXOffsetMm();
+    method @FloatRange public double getXOffsetUncertaintyMm();
+    method @FloatRange public double getYOffsetMm();
+    method @FloatRange public double getYOffsetUncertaintyMm();
+    method @FloatRange public double getZOffsetMm();
+    method @FloatRange public double getZOffsetUncertaintyMm();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssAntennaInfo.PhaseCenterOffset> CREATOR;
+  }
+
+  public static final class GnssAntennaInfo.SphericalCorrections implements android.os.Parcelable {
+    ctor public GnssAntennaInfo.SphericalCorrections(@NonNull double[][], @NonNull double[][]);
+    method public int describeContents();
+    method @NonNull public double[][] getCorrectionUncertaintiesArray();
+    method @NonNull public double[][] getCorrectionsArray();
+    method @FloatRange(from=0.0f, to=180.0f) public double getDeltaPhi();
+    method @FloatRange(from=0.0f, to=360.0f) public double getDeltaTheta();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssAntennaInfo.SphericalCorrections> CREATOR;
+  }
+
+  public final class GnssCapabilities {
+    method public boolean hasGnssAntennaInfo();
+  }
+
   public final class GnssClock implements android.os.Parcelable {
     method public int describeContents();
     method public double getBiasNanos();
@@ -23766,6 +23848,7 @@
     method @NonNull public java.util.List<java.lang.String> getAllProviders();
     method @Nullable public String getBestProvider(@NonNull android.location.Criteria, boolean);
     method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void getCurrentLocation(@NonNull String, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.location.Location>);
+    method @NonNull public android.location.GnssCapabilities getGnssCapabilities();
     method @Nullable public String getGnssHardwareModelName();
     method public int getGnssYearOfHardware();
     method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public android.location.GpsStatus getGpsStatus(@Nullable android.location.GpsStatus);
@@ -23775,6 +23858,7 @@
     method @NonNull public java.util.List<java.lang.String> getProviders(@NonNull android.location.Criteria, boolean);
     method public boolean isLocationEnabled();
     method public boolean isProviderEnabled(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerAntennaInfoListener(@NonNull java.util.concurrent.Executor, @NonNull android.location.GnssAntennaInfo.Listener);
     method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementsEvent.Callback);
     method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementsEvent.Callback, @Nullable android.os.Handler);
     method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull java.util.concurrent.Executor, @NonNull android.location.GnssMeasurementsEvent.Callback);
@@ -23806,6 +23890,7 @@
     method public void setTestProviderEnabled(@NonNull String, boolean);
     method public void setTestProviderLocation(@NonNull String, @NonNull android.location.Location);
     method @Deprecated public void setTestProviderStatus(@NonNull String, int, @Nullable android.os.Bundle, long);
+    method public void unregisterAntennaInfoListener(@NonNull android.location.GnssAntennaInfo.Listener);
     method public void unregisterGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementsEvent.Callback);
     method public void unregisterGnssNavigationMessageCallback(@NonNull android.location.GnssNavigationMessage.Callback);
     method public void unregisterGnssStatusCallback(@NonNull android.location.GnssStatus.Callback);
@@ -24290,10 +24375,8 @@
   public final class AudioPlaybackCaptureConfiguration {
     method @NonNull public int[] getExcludeUids();
     method @NonNull public int[] getExcludeUsages();
-    method @NonNull public int[] getExcludeUserIds();
     method @NonNull public int[] getMatchingUids();
     method @NonNull public int[] getMatchingUsages();
-    method @NonNull public int[] getMatchingUserIds();
     method @NonNull public android.media.projection.MediaProjection getMediaProjection();
   }
 
@@ -24301,11 +24384,9 @@
     ctor public AudioPlaybackCaptureConfiguration.Builder(@NonNull android.media.projection.MediaProjection);
     method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUid(int);
     method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUsage(int);
-    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUserId(int);
     method @NonNull public android.media.AudioPlaybackCaptureConfiguration build();
     method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUid(int);
     method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUsage(int);
-    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUserId(int);
   }
 
   public final class AudioPlaybackConfiguration implements android.os.Parcelable {
@@ -24706,11 +24787,15 @@
 
   public abstract class DrmInitData {
     method public abstract android.media.DrmInitData.SchemeInitData get(java.util.UUID);
+    method @NonNull public android.media.DrmInitData.SchemeInitData getSchemeInitDataAt(int);
+    method public int getSchemeInitDataCount();
   }
 
   public static final class DrmInitData.SchemeInitData {
+    field @NonNull public static final java.util.UUID UUID_NIL;
     field public final byte[] data;
     field public final String mimeType;
+    field @NonNull public final java.util.UUID uuid;
   }
 
   public class ExifInterface {
@@ -25005,7 +25090,7 @@
 
   public final class MediaCas implements java.lang.AutoCloseable {
     ctor public MediaCas(int) throws android.media.MediaCasException.UnsupportedCasException;
-    ctor public MediaCas(int, @Nullable String, int) throws android.media.MediaCasException.UnsupportedCasException;
+    ctor public MediaCas(@NonNull android.content.Context, int, @Nullable String, int) throws android.media.MediaCasException.UnsupportedCasException;
     method public void close();
     method public static android.media.MediaCas.PluginDescriptor[] enumeratePlugins();
     method protected void finalize();
@@ -26043,6 +26128,7 @@
     field public static final String KEY_AUDIO_SESSION_ID = "audio-session-id";
     field public static final String KEY_BITRATE_MODE = "bitrate-mode";
     field public static final String KEY_BIT_RATE = "bitrate";
+    field public static final String KEY_CAPTION_SERVICE_NUMBER = "caption-service-number";
     field public static final String KEY_CAPTURE_RATE = "capture-rate";
     field public static final String KEY_CHANNEL_COUNT = "channel-count";
     field public static final String KEY_CHANNEL_MASK = "channel-mask";
@@ -26797,7 +26883,8 @@
     method public void onDiscoveryPreferenceChanged(@NonNull android.media.RouteDiscoveryPreference);
     method public abstract void onReleaseSession(@NonNull String);
     method public abstract void onSelectRoute(@NonNull String, @NonNull String);
-    method public abstract void onSetVolume(@NonNull String, int);
+    method public abstract void onSetRouteVolume(@NonNull String, int);
+    method public abstract void onSetSessionVolume(@NonNull String, int);
     method public abstract void onTransferToRoute(@NonNull String, @NonNull String);
     field public static final long REQUEST_ID_UNKNOWN = 0L; // 0x0L
     field public static final String SERVICE_INTERFACE = "android.media.MediaRoute2ProviderService";
@@ -26931,12 +27018,19 @@
     method @NonNull public static android.media.MediaRouter2 getInstance(@NonNull android.content.Context);
     method @NonNull public java.util.List<android.media.MediaRoute2Info> getRoutes();
     method @NonNull public android.media.MediaRouter2.RoutingController getSystemController();
-    method public void registerControllerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.RoutingControllerCallback);
+    method public void registerControllerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.ControllerCallback);
     method public void registerRouteCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.RouteCallback, @NonNull android.media.RouteDiscoveryPreference);
-    method public void requestCreateController(@NonNull android.media.MediaRoute2Info);
+    method public void registerTransferCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.TransferCallback);
     method public void setOnGetControllerHintsListener(@Nullable android.media.MediaRouter2.OnGetControllerHintsListener);
-    method public void unregisterControllerCallback(@NonNull android.media.MediaRouter2.RoutingControllerCallback);
+    method public void transferTo(@Nullable android.media.MediaRoute2Info);
+    method public void unregisterControllerCallback(@NonNull android.media.MediaRouter2.ControllerCallback);
     method public void unregisterRouteCallback(@NonNull android.media.MediaRouter2.RouteCallback);
+    method public void unregisterTransferCallback(@NonNull android.media.MediaRouter2.TransferCallback);
+  }
+
+  public static class MediaRouter2.ControllerCallback {
+    ctor public MediaRouter2.ControllerCallback();
+    method public void onControllerUpdated(@NonNull android.media.MediaRouter2.RoutingController);
   }
 
   public static interface MediaRouter2.OnGetControllerHintsListener {
@@ -26957,19 +27051,19 @@
     method @NonNull public String getId();
     method @NonNull public java.util.List<android.media.MediaRoute2Info> getSelectableRoutes();
     method @NonNull public java.util.List<android.media.MediaRoute2Info> getSelectedRoutes();
-    method @NonNull public java.util.List<android.media.MediaRoute2Info> getTransferrableRoutes();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
     method public boolean isReleased();
     method public void release();
     method public void selectRoute(@NonNull android.media.MediaRoute2Info);
-    method public void transferToRoute(@NonNull android.media.MediaRoute2Info);
+    method public void setVolume(int);
   }
 
-  public static class MediaRouter2.RoutingControllerCallback {
-    ctor public MediaRouter2.RoutingControllerCallback();
-    method public void onControllerCreated(@NonNull android.media.MediaRouter2.RoutingController);
-    method public void onControllerCreationFailed(@NonNull android.media.MediaRoute2Info);
-    method public void onControllerReleased(@NonNull android.media.MediaRouter2.RoutingController);
-    method public void onControllerUpdated(@NonNull android.media.MediaRouter2.RoutingController);
+  public static class MediaRouter2.TransferCallback {
+    ctor public MediaRouter2.TransferCallback();
+    method public void onTransferFailed(@NonNull android.media.MediaRoute2Info);
+    method public void onTransferred(@NonNull android.media.MediaRouter2.RoutingController, @Nullable android.media.MediaRouter2.RoutingController);
   }
 
   public class MediaScannerConnection implements android.content.ServiceConnection {
@@ -27333,7 +27427,7 @@
   public final class RouteDiscoveryPreference implements android.os.Parcelable {
     method public int describeContents();
     method @NonNull public java.util.List<java.lang.String> getPreferredFeatures();
-    method public boolean isActiveScan();
+    method public boolean shouldPerformActiveScan();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.media.RouteDiscoveryPreference> CREATOR;
   }
@@ -27342,8 +27436,8 @@
     ctor public RouteDiscoveryPreference.Builder(@NonNull java.util.List<java.lang.String>, boolean);
     ctor public RouteDiscoveryPreference.Builder(@NonNull android.media.RouteDiscoveryPreference);
     method @NonNull public android.media.RouteDiscoveryPreference build();
-    method @NonNull public android.media.RouteDiscoveryPreference.Builder setActiveScan(boolean);
     method @NonNull public android.media.RouteDiscoveryPreference.Builder setPreferredFeatures(@NonNull java.util.List<java.lang.String>);
+    method @NonNull public android.media.RouteDiscoveryPreference.Builder setShouldPerformActiveScan(boolean);
   }
 
   public final class RoutingSessionInfo implements android.os.Parcelable {
@@ -27354,7 +27448,10 @@
     method @NonNull public String getId();
     method @NonNull public java.util.List<java.lang.String> getSelectableRoutes();
     method @NonNull public java.util.List<java.lang.String> getSelectedRoutes();
-    method @NonNull public java.util.List<java.lang.String> getTransferrableRoutes();
+    method @NonNull public java.util.List<java.lang.String> getTransferableRoutes();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.media.RoutingSessionInfo> CREATOR;
   }
@@ -27365,17 +27462,20 @@
     method @NonNull public android.media.RoutingSessionInfo.Builder addDeselectableRoute(@NonNull String);
     method @NonNull public android.media.RoutingSessionInfo.Builder addSelectableRoute(@NonNull String);
     method @NonNull public android.media.RoutingSessionInfo.Builder addSelectedRoute(@NonNull String);
-    method @NonNull public android.media.RoutingSessionInfo.Builder addTransferrableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder addTransferableRoute(@NonNull String);
     method @NonNull public android.media.RoutingSessionInfo build();
     method @NonNull public android.media.RoutingSessionInfo.Builder clearDeselectableRoutes();
     method @NonNull public android.media.RoutingSessionInfo.Builder clearSelectableRoutes();
     method @NonNull public android.media.RoutingSessionInfo.Builder clearSelectedRoutes();
-    method @NonNull public android.media.RoutingSessionInfo.Builder clearTransferrableRoutes();
+    method @NonNull public android.media.RoutingSessionInfo.Builder clearTransferableRoutes();
     method @NonNull public android.media.RoutingSessionInfo.Builder removeDeselectableRoute(@NonNull String);
     method @NonNull public android.media.RoutingSessionInfo.Builder removeSelectableRoute(@NonNull String);
     method @NonNull public android.media.RoutingSessionInfo.Builder removeSelectedRoute(@NonNull String);
-    method @NonNull public android.media.RoutingSessionInfo.Builder removeTransferrableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder removeTransferableRoute(@NonNull String);
     method @NonNull public android.media.RoutingSessionInfo.Builder setControlHints(@Nullable android.os.Bundle);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setVolume(int);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setVolumeHandling(int);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setVolumeMax(int);
   }
 
   public final class Session2Command implements android.os.Parcelable {
@@ -29324,6 +29424,7 @@
     method public int getAudioChannelCount();
     method public int getAudioSampleRate();
     method public CharSequence getDescription();
+    method @Nullable public String getEncoding();
     method public android.os.Bundle getExtra();
     method public String getId();
     method public String getLanguage();
@@ -29351,6 +29452,7 @@
     method @NonNull public android.media.tv.TvTrackInfo.Builder setAudioDescription(boolean);
     method @NonNull public android.media.tv.TvTrackInfo.Builder setAudioSampleRate(int);
     method @NonNull public android.media.tv.TvTrackInfo.Builder setDescription(@NonNull CharSequence);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setEncoding(@Nullable String);
     method @NonNull public android.media.tv.TvTrackInfo.Builder setEncrypted(boolean);
     method @NonNull public android.media.tv.TvTrackInfo.Builder setExtra(@NonNull android.os.Bundle);
     method @NonNull public android.media.tv.TvTrackInfo.Builder setHardOfHearing(boolean);
@@ -29689,7 +29791,7 @@
     method public long getReportTimestamp();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.net.ConnectivityDiagnosticsManager.ConnectivityReport> CREATOR;
-    field public static final String KEY_NETWORK_PROBES_ATTEMPTED_BITMASK = "networkProbesAttemped";
+    field public static final String KEY_NETWORK_PROBES_ATTEMPTED_BITMASK = "networkProbesAttempted";
     field public static final String KEY_NETWORK_PROBES_SUCCEEDED_BITMASK = "networkProbesSucceeded";
     field public static final String KEY_NETWORK_VALIDATION_RESULT = "networkValidationResult";
     field public static final int NETWORK_PROBE_DNS = 4; // 0x4
@@ -29704,10 +29806,12 @@
   }
 
   public static final class ConnectivityDiagnosticsManager.DataStallReport implements android.os.Parcelable {
-    ctor public ConnectivityDiagnosticsManager.DataStallReport(@NonNull android.net.Network, long, int, @NonNull android.os.PersistableBundle);
+    ctor public ConnectivityDiagnosticsManager.DataStallReport(@NonNull android.net.Network, long, int, @NonNull android.net.LinkProperties, @NonNull android.net.NetworkCapabilities, @NonNull android.os.PersistableBundle);
     method public int describeContents();
     method public int getDetectionMethod();
+    method @NonNull public android.net.LinkProperties getLinkProperties();
     method @NonNull public android.net.Network getNetwork();
+    method @NonNull public android.net.NetworkCapabilities getNetworkCapabilities();
     method public long getReportTimestamp();
     method @NonNull public android.os.PersistableBundle getStallDetails();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
@@ -30126,7 +30230,7 @@
     method @NonNull public android.net.NetworkCapabilities setLinkDownstreamBandwidthKbps(int);
     method @NonNull public android.net.NetworkCapabilities setLinkUpstreamBandwidthKbps(int);
     method @NonNull public android.net.NetworkCapabilities setNetworkSpecifier(@NonNull android.net.NetworkSpecifier);
-    method public void setOwnerUid(int);
+    method @NonNull public android.net.NetworkCapabilities setOwnerUid(int);
     method @NonNull public android.net.NetworkCapabilities setSignalStrength(int);
     method public void writeToParcel(android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkCapabilities> CREATOR;
@@ -30717,7 +30821,7 @@
 
   public class AudioGroup {
     ctor @Deprecated public AudioGroup();
-    ctor public AudioGroup(@Nullable android.content.Context);
+    ctor public AudioGroup(@NonNull android.content.Context);
     method public void clear();
     method public int getMode();
     method public android.net.rtp.AudioStream[] getStreams();
@@ -30766,7 +30870,6 @@
     method public void close();
     method public void continueCall(int) throws android.net.sip.SipException;
     method public void endCall() throws android.net.sip.SipException;
-    method @Nullable public android.net.rtp.AudioGroup getAudioGroup();
     method public android.net.sip.SipProfile getLocalProfile();
     method public android.net.sip.SipProfile getPeerProfile();
     method public int getState();
@@ -30777,7 +30880,6 @@
     method public void makeCall(android.net.sip.SipProfile, android.net.sip.SipSession, int) throws android.net.sip.SipException;
     method public void sendDtmf(int);
     method public void sendDtmf(int, android.os.Message);
-    method public void setAudioGroup(@NonNull android.net.rtp.AudioGroup);
     method public void setListener(android.net.sip.SipAudioCall.Listener);
     method public void setListener(android.net.sip.SipAudioCall.Listener, boolean);
     method public void setSpeakerMode(boolean);
@@ -30826,7 +30928,6 @@
     method public void close(String) throws android.net.sip.SipException;
     method public android.net.sip.SipSession createSipSession(android.net.sip.SipProfile, android.net.sip.SipSession.Listener) throws android.net.sip.SipException;
     method public static String getCallId(android.content.Intent);
-    method @NonNull public java.util.List<android.net.sip.SipProfile> getListOfProfiles() throws android.net.sip.SipException;
     method public static String getOfferSessionDescription(android.content.Intent);
     method public android.net.sip.SipSession getSessionFor(android.content.Intent) throws android.net.sip.SipException;
     method public static boolean isApiSupported(android.content.Context);
@@ -30844,11 +30945,6 @@
     method public void setRegistrationListener(String, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException;
     method public android.net.sip.SipAudioCall takeAudioCall(android.content.Intent, android.net.sip.SipAudioCall.Listener) throws android.net.sip.SipException;
     method public void unregister(android.net.sip.SipProfile, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException;
-    field public static final String ACTION_SIP_CALL_OPTION_CHANGED = "android.net.sip.action.SIP_CALL_OPTION_CHANGED";
-    field public static final String ACTION_SIP_INCOMING_CALL = "android.net.sip.action.SIP_INCOMING_CALL";
-    field public static final String ACTION_SIP_REMOVE_PROFILE = "android.net.sip.action.SIP_REMOVE_PROFILE";
-    field public static final String ACTION_SIP_SERVICE_UP = "android.net.sip.action.SIP_SERVICE_UP";
-    field public static final String ACTION_START_SIP = "android.net.sip.action.START_SIP";
     field public static final String EXTRA_CALL_ID = "android:sipCallID";
     field public static final String EXTRA_OFFER_SD = "android:sipOfferSD";
     field public static final int INCOMING_CALL_RESULT_CODE = 101; // 0x65
@@ -30858,7 +30954,6 @@
     method public int describeContents();
     method public String getAuthUserName();
     method public boolean getAutoRegistration();
-    method public int getCallingUid();
     method public String getDisplayName();
     method public String getPassword();
     method public int getPort();
@@ -31275,6 +31370,7 @@
     method public int getWifiState();
     method public boolean is5GHzBandSupported();
     method public boolean is6GHzBandSupported();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isAutoWakeupEnabled();
     method @Deprecated public boolean isDeviceToApRttSupported();
     method public boolean isEasyConnectSupported();
     method public boolean isEnhancedOpenSupported();
@@ -31282,6 +31378,7 @@
     method public boolean isP2pSupported();
     method public boolean isPreferredNetworkOffloadSupported();
     method @Deprecated public boolean isScanAlwaysAvailable();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isScanThrottleEnabled();
     method public boolean isStaApConcurrencySupported();
     method public boolean isTdlsSupported();
     method public boolean isWapiSupported();
@@ -31636,8 +31733,8 @@
     method public int describeContents();
     method public android.net.wifi.hotspot2.pps.Credential getCredential();
     method public android.net.wifi.hotspot2.pps.HomeSp getHomeSp();
-    method public long getSubscriptionExpirationTimeInMillis();
-    method @NonNull public String getUniqueId() throws java.lang.IllegalStateException;
+    method public long getSubscriptionExpirationTimeMillis();
+    method @NonNull public String getUniqueId();
     method public boolean isOsuProvisioned();
     method public void setCredential(android.net.wifi.hotspot2.pps.Credential);
     method public void setHomeSp(android.net.wifi.hotspot2.pps.HomeSp);
@@ -31754,7 +31851,7 @@
     field public static final int GROUP_OWNER_INTENT_MAX = 15; // 0xf
     field public static final int GROUP_OWNER_INTENT_MIN = 0; // 0x0
     field public String deviceAddress;
-    field public int groupOwnerIntent;
+    field @IntRange(from=0, to=15) public int groupOwnerIntent;
     field public android.net.wifi.WpsInfo wps;
   }
 
@@ -31946,14 +32043,14 @@
     method public int getDeviceType();
     method public int getMaxThroughput();
     method public boolean isContentProtectionSupported();
+    method public boolean isEnabled();
     method public boolean isSessionAvailable();
-    method public boolean isWfdEnabled();
     method public void setContentProtectionSupported(boolean);
-    method public void setControlPort(int);
+    method public void setControlPort(@IntRange(from=0) int);
     method public boolean setDeviceType(int);
-    method public void setMaxThroughput(int);
+    method public void setEnabled(boolean);
+    method public void setMaxThroughput(@IntRange(from=0) int);
     method public void setSessionAvailable(boolean);
-    method public void setWfdEnabled(boolean);
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pWfdInfo> CREATOR;
     field public static final int DEVICE_TYPE_PRIMARY_SINK = 1; // 0x1
@@ -36526,6 +36623,7 @@
     method public void addThermalStatusListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.PowerManager.OnThermalStatusChangedListener);
     method public int getCurrentThermalStatus();
     method public int getLocationPowerSaveMode();
+    method public float getThermalHeadroom(@IntRange(from=0, to=60) int);
     method public boolean isDeviceIdleMode();
     method public boolean isIgnoringBatteryOptimizations(String);
     method public boolean isInteractive();
@@ -37032,6 +37130,15 @@
 
 }
 
+package android.os.ext.test {
+
+  @Deprecated public class Test {
+    ctor @Deprecated public Test();
+    method @Deprecated public void testE();
+  }
+
+}
+
 package android.os.health {
 
   public class HealthStats {
@@ -37213,6 +37320,7 @@
     method public void setCacheBehaviorTombstone(java.io.File, boolean) throws java.io.IOException;
     method public boolean unmountObb(String, boolean, android.os.storage.OnObbStateChangeListener);
     method public void unregisterStorageVolumeCallback(@NonNull android.os.storage.StorageManager.StorageVolumeCallback);
+    field @RequiresPermission(android.Manifest.permission.MANAGE_EXTERNAL_STORAGE) public static final String ACTION_CLEAR_APP_CACHE = "android.os.storage.action.CLEAR_APP_CACHE";
     field public static final String ACTION_MANAGE_STORAGE = "android.os.storage.action.MANAGE_STORAGE";
     field public static final String EXTRA_REQUESTED_BYTES = "android.os.storage.extra.REQUESTED_BYTES";
     field public static final String EXTRA_UUID = "android.os.storage.extra.UUID";
@@ -40234,6 +40342,7 @@
     field public static final String VOLUME_NAME = "volume_name";
     field public static final String WIDTH = "width";
     field public static final String WRITER = "writer";
+    field public static final String XMP = "xmp";
     field public static final String YEAR = "year";
   }
 
@@ -40402,6 +40511,7 @@
     field public static final String EXTRA_BATTERY_SAVER_MODE_ENABLED = "android.settings.extra.battery_saver_mode_enabled";
     field public static final String EXTRA_BIOMETRIC_MINIMUM_STRENGTH_REQUIRED = "android.provider.extra.BIOMETRIC_MINIMUM_STRENGTH_REQUIRED";
     field public static final String EXTRA_CHANNEL_ID = "android.provider.extra.CHANNEL_ID";
+    field public static final String EXTRA_CONVERSATION_ID = "android.provider.extra.CONVERSATION_ID";
     field public static final String EXTRA_DO_NOT_DISTURB_MODE_ENABLED = "android.settings.extra.do_not_disturb_mode_enabled";
     field public static final String EXTRA_DO_NOT_DISTURB_MODE_MINUTES = "android.settings.extra.do_not_disturb_mode_minutes";
     field public static final String EXTRA_EASY_CONNECT_ATTEMPTED_SSID = "android.provider.extra.EASY_CONNECT_ATTEMPTED_SSID";
@@ -40466,13 +40576,13 @@
     field public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
     field public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
     field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
-    field public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
-    field public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
+    field @Deprecated public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
     field public static final String WIFI_ON = "wifi_on";
-    field public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy";
-    field public static final int WIFI_SLEEP_POLICY_DEFAULT = 0; // 0x0
-    field public static final int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2
-    field public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1
+    field @Deprecated public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy";
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_DEFAULT = 0; // 0x0
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1
     field public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
     field public static final String WINDOW_ANIMATION_SCALE = "window_animation_scale";
   }
@@ -42583,6 +42693,7 @@
     method @NonNull public String getKeystoreAlias();
     method public int getPurposes();
     method @NonNull public String[] getSignaturePaddings();
+    method public int getUserAuthenticationType();
     method public int getUserAuthenticationValidityDurationSeconds();
     method @NonNull public boolean isDigestsSpecified();
     method public boolean isInvalidatedByBiometricEnrollment();
@@ -42617,9 +42728,10 @@
     method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setRandomizedEncryptionRequired(boolean);
     method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setSignaturePaddings(java.lang.String...);
     method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUnlockedDeviceRequired(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationParameters(@IntRange(from=0xffffffff) int, int);
     method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationRequired(boolean);
     method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationValidWhileOnBody(boolean);
-    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationValidityDurationSeconds(@IntRange(from=0xffffffff) int);
+    method @Deprecated @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationValidityDurationSeconds(@IntRange(from=0xffffffff) int);
     method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserConfirmationRequired(boolean);
     method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserPresenceRequired(boolean);
   }
@@ -42636,6 +42748,7 @@
     method public int getOrigin();
     method public int getPurposes();
     method @NonNull public String[] getSignaturePaddings();
+    method public int getUserAuthenticationType();
     method public int getUserAuthenticationValidityDurationSeconds();
     method public boolean isInsideSecureHardware();
     method public boolean isInvalidatedByBiometricEnrollment();
@@ -42659,6 +42772,8 @@
   }
 
   public abstract class KeyProperties {
+    field public static final int AUTH_BIOMETRIC_STRONG = 2; // 0x2
+    field public static final int AUTH_DEVICE_CREDENTIAL = 1; // 0x1
     field public static final String BLOCK_MODE_CBC = "CBC";
     field public static final String BLOCK_MODE_CTR = "CTR";
     field public static final String BLOCK_MODE_ECB = "ECB";
@@ -42705,6 +42820,7 @@
     method @Nullable public java.util.Date getKeyValidityStart();
     method public int getPurposes();
     method @NonNull public String[] getSignaturePaddings();
+    method public int getUserAuthenticationType();
     method public int getUserAuthenticationValidityDurationSeconds();
     method public boolean isDigestsSpecified();
     method public boolean isInvalidatedByBiometricEnrollment();
@@ -42730,9 +42846,10 @@
     method @NonNull public android.security.keystore.KeyProtection.Builder setRandomizedEncryptionRequired(boolean);
     method @NonNull public android.security.keystore.KeyProtection.Builder setSignaturePaddings(java.lang.String...);
     method @NonNull public android.security.keystore.KeyProtection.Builder setUnlockedDeviceRequired(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationParameters(@IntRange(from=0xffffffff) int, int);
     method @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationRequired(boolean);
     method @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationValidWhileOnBody(boolean);
-    method @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationValidityDurationSeconds(@IntRange(from=0xffffffff) int);
+    method @Deprecated @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationValidityDurationSeconds(@IntRange(from=0xffffffff) int);
     method @NonNull public android.security.keystore.KeyProtection.Builder setUserConfirmationRequired(boolean);
     method @NonNull public android.security.keystore.KeyProtection.Builder setUserPresenceRequired(boolean);
   }
@@ -42937,6 +43054,7 @@
     method @NonNull public android.service.autofill.FillResponse build();
     method @NonNull public android.service.autofill.FillResponse.Builder disableAutofill(long);
     method @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.widget.RemoteViews, @Nullable android.service.autofill.InlinePresentation);
     method @NonNull public android.service.autofill.FillResponse.Builder setClientState(@Nullable android.os.Bundle);
     method @NonNull public android.service.autofill.FillResponse.Builder setFieldClassificationIds(@NonNull android.view.autofill.AutofillId...);
     method @NonNull public android.service.autofill.FillResponse.Builder setFlags(int);
@@ -43275,10 +43393,12 @@
 
   public abstract class ControlsProviderService extends android.app.Service {
     ctor public ControlsProviderService();
-    method public abstract void loadAvailableControls(@NonNull java.util.function.Consumer<java.util.List<android.service.controls.Control>>);
+    method @Deprecated public void loadAvailableControls(@NonNull java.util.function.Consumer<java.util.List<android.service.controls.Control>>);
     method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
     method public abstract void performControlAction(@NonNull String, @NonNull android.service.controls.actions.ControlAction, @NonNull java.util.function.Consumer<java.lang.Integer>);
     method @NonNull public abstract java.util.concurrent.Flow.Publisher<android.service.controls.Control> publisherFor(@NonNull java.util.List<java.lang.String>);
+    method @Nullable public java.util.concurrent.Flow.Publisher<android.service.controls.Control> publisherForAllAvailable();
+    method @Nullable public java.util.concurrent.Flow.Publisher<android.service.controls.Control> publisherForSuggested();
     field public static final String SERVICE_CONTROLS = "android.service.controls.ControlsProviderService";
     field @NonNull public static final String TAG = "ControlsProviderService";
   }
@@ -43421,7 +43541,6 @@
     method public abstract int getTemplateType();
     field @NonNull public static final android.service.controls.templates.ControlTemplate ERROR_TEMPLATE;
     field @NonNull public static final android.service.controls.templates.ControlTemplate NO_TEMPLATE;
-    field public static final int TYPE_DISCRETE_TOGGLE = 4; // 0x4
     field public static final int TYPE_ERROR = -1; // 0xffffffff
     field public static final int TYPE_NONE = 0; // 0x0
     field public static final int TYPE_RANGE = 2; // 0x2
@@ -43432,30 +43551,6 @@
     field public static final int TYPE_TOGGLE_RANGE = 6; // 0x6
   }
 
-  public final class CoordinatedRangeTemplate extends android.service.controls.templates.ControlTemplate {
-    ctor public CoordinatedRangeTemplate(@NonNull String, float, @NonNull android.service.controls.templates.RangeTemplate, @NonNull android.service.controls.templates.RangeTemplate);
-    ctor public CoordinatedRangeTemplate(@NonNull String, float, float, float, float, float, float, float, float, @Nullable CharSequence);
-    method public float getCurrentValueHigh();
-    method public float getCurrentValueLow();
-    method @NonNull public CharSequence getFormatString();
-    method public float getMaxValueHigh();
-    method public float getMaxValueLow();
-    method public float getMinGap();
-    method public float getMinValueHigh();
-    method public float getMinValueLow();
-    method @NonNull public android.service.controls.templates.RangeTemplate getRangeHigh();
-    method @NonNull public android.service.controls.templates.RangeTemplate getRangeLow();
-    method public float getStepValue();
-    method public int getTemplateType();
-  }
-
-  public final class DiscreteToggleTemplate extends android.service.controls.templates.ControlTemplate {
-    ctor public DiscreteToggleTemplate(@NonNull String, @NonNull android.service.controls.templates.ControlButton, @NonNull android.service.controls.templates.ControlButton);
-    method @NonNull public android.service.controls.templates.ControlButton getNegativeButton();
-    method @NonNull public android.service.controls.templates.ControlButton getPositiveButton();
-    method public int getTemplateType();
-  }
-
   public final class RangeTemplate extends android.service.controls.templates.ControlTemplate {
     ctor public RangeTemplate(@NonNull String, float, float, float, float, @Nullable CharSequence);
     method public float getCurrentValue();
@@ -43853,7 +43948,7 @@
 
 package android.service.quickaccesswallet {
 
-  public final class GetWalletCardsCallback {
+  public interface GetWalletCardsCallback {
     method public void onFailure(@NonNull android.service.quickaccesswallet.GetWalletCardsError);
     method public void onSuccess(@NonNull android.service.quickaccesswallet.GetWalletCardsResponse);
   }
@@ -43894,7 +43989,6 @@
     method public abstract void onWalletCardsRequested(@NonNull android.service.quickaccesswallet.GetWalletCardsRequest, @NonNull android.service.quickaccesswallet.GetWalletCardsCallback);
     method public abstract void onWalletDismissed();
     method public final void sendWalletServiceEvent(@NonNull android.service.quickaccesswallet.WalletServiceEvent);
-    field public static final String ACTION_DISMISS_WALLET = "android.service.quickaccesswallet.action.DISMISS_WALLET";
     field public static final String ACTION_VIEW_WALLET = "android.service.quickaccesswallet.action.VIEW_WALLET";
     field public static final String ACTION_VIEW_WALLET_SETTINGS = "android.service.quickaccesswallet.action.VIEW_WALLET_SETTINGS";
     field public static final String SERVICE_INTERFACE = "android.service.quickaccesswallet.QuickAccessWalletService";
@@ -43981,7 +44075,7 @@
     field public static final String ACTION_QS_TILE = "android.service.quicksettings.action.QS_TILE";
     field public static final String ACTION_QS_TILE_PREFERENCES = "android.service.quicksettings.action.QS_TILE_PREFERENCES";
     field public static final String META_DATA_ACTIVE_TILE = "android.service.quicksettings.ACTIVE_TILE";
-    field public static final String META_DATA_BOOLEAN_TILE = "android.service.quicksettings.BOOLEAN_TILE";
+    field public static final String META_DATA_TOGGLEABLE_TILE = "android.service.quicksettings.TOGGLEABLE_TILE";
   }
 
 }
@@ -44062,8 +44156,8 @@
   }
 
   public static final class AlwaysOnHotwordDetector.ModelParamRange {
-    method public int end();
-    method public int start();
+    method public int getEnd();
+    method public int getStart();
   }
 
   public class VoiceInteractionService extends android.app.Service {
@@ -45403,14 +45497,13 @@
     field public static final int DIRECTION_INCOMING = 0; // 0x0
     field public static final int DIRECTION_OUTGOING = 1; // 0x1
     field public static final int DIRECTION_UNKNOWN = -1; // 0xffffffff
-    field public static final int PROPERTY_ASSISTED_DIALING_USED = 512; // 0x200
+    field public static final int PROPERTY_ASSISTED_DIALING = 512; // 0x200
     field public static final int PROPERTY_CONFERENCE = 1; // 0x1
     field public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 4; // 0x4
     field public static final int PROPERTY_ENTERPRISE_CALL = 32; // 0x20
     field public static final int PROPERTY_GENERIC_CONFERENCE = 2; // 0x2
     field public static final int PROPERTY_HAS_CDMA_VOICE_PRIVACY = 128; // 0x80
     field public static final int PROPERTY_HIGH_DEF_AUDIO = 16; // 0x10
-    field public static final int PROPERTY_IS_ADHOC_CONFERENCE = 8192; // 0x2000
     field public static final int PROPERTY_IS_EXTERNAL_CALL = 64; // 0x40
     field public static final int PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL = 2048; // 0x800
     field public static final int PROPERTY_RTT = 1024; // 0x400
@@ -45488,13 +45581,13 @@
   public abstract class Conference extends android.telecom.Conferenceable {
     ctor public Conference(android.telecom.PhoneAccountHandle);
     method public final boolean addConnection(android.telecom.Connection);
-    method @NonNull public static android.telecom.Conference createFailedConference(@NonNull android.telecom.DisconnectCause, @NonNull android.telecom.PhoneAccountHandle);
     method public final void destroy();
     method public final android.telecom.CallAudioState getCallAudioState();
     method public final java.util.List<android.telecom.Connection> getConferenceableConnections();
     method public final int getConnectionCapabilities();
     method public final int getConnectionProperties();
-    method public final long getConnectionTime();
+    method public final long getConnectionStartElapsedRealtimeMillis();
+    method @IntRange(from=0) public final long getConnectionTime();
     method public final java.util.List<android.telecom.Connection> getConnections();
     method public final android.telecom.DisconnectCause getDisconnectCause();
     method public final android.os.Bundle getExtras();
@@ -45503,8 +45596,6 @@
     method public final android.telecom.StatusHints getStatusHints();
     method public android.telecom.Connection.VideoProvider getVideoProvider();
     method public int getVideoState();
-    method public final boolean isRingbackRequested();
-    method public void onAnswer(int);
     method public void onCallAudioStateChanged(android.telecom.CallAudioState);
     method public void onConnectionAdded(android.telecom.Connection);
     method public void onDisconnect();
@@ -45513,7 +45604,6 @@
     method public void onMerge(android.telecom.Connection);
     method public void onMerge();
     method public void onPlayDtmfTone(char);
-    method public void onReject();
     method public void onSeparate(android.telecom.Connection);
     method public void onStopDtmfTone();
     method public void onSwap();
@@ -45527,14 +45617,13 @@
     method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>);
     method public final void setConnectionCapabilities(int);
     method public final void setConnectionProperties(int);
-    method public final void setConnectionStartElapsedRealTime(long);
-    method public final void setConnectionTime(long);
+    method @Deprecated public final void setConnectionStartElapsedRealTime(long);
+    method public final void setConnectionStartElapsedRealtimeMillis(long);
+    method public final void setConnectionTime(@IntRange(from=0) long);
     method public final void setDialing();
     method public final void setDisconnected(android.telecom.DisconnectCause);
     method public final void setExtras(@Nullable android.os.Bundle);
     method public final void setOnHold();
-    method public final void setRingbackRequested(boolean);
-    method public final void setRinging();
     method public final void setStatusHints(android.telecom.StatusHints);
     method public final void setVideoProvider(android.telecom.Connection, android.telecom.Connection.VideoProvider);
     method public final void setVideoState(android.telecom.Connection, int);
@@ -45690,10 +45779,9 @@
     field public static final String EXTRA_IS_RTT_AUDIO_PRESENT = "android.telecom.extra.IS_RTT_AUDIO_PRESENT";
     field public static final String EXTRA_LAST_FORWARDED_NUMBER = "android.telecom.extra.LAST_FORWARDED_NUMBER";
     field public static final String EXTRA_SIP_INVITE = "android.telecom.extra.SIP_INVITE";
-    field public static final int PROPERTY_ASSISTED_DIALING_USED = 512; // 0x200
+    field public static final int PROPERTY_ASSISTED_DIALING = 512; // 0x200
     field public static final int PROPERTY_HAS_CDMA_VOICE_PRIVACY = 32; // 0x20
     field public static final int PROPERTY_HIGH_DEF_AUDIO = 4; // 0x4
-    field public static final int PROPERTY_IS_ADHOC_CONFERENCE = 4096; // 0x1000
     field public static final int PROPERTY_IS_EXTERNAL_CALL = 16; // 0x10
     field public static final int PROPERTY_IS_RTT = 256; // 0x100
     field public static final int PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL = 1024; // 0x400
@@ -46109,7 +46197,6 @@
     method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ANSWER_PHONE_CALLS, android.Manifest.permission.MODIFY_PHONE_STATE}) public void acceptRingingCall();
     method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ANSWER_PHONE_CALLS, android.Manifest.permission.MODIFY_PHONE_STATE}) public void acceptRingingCall(int);
     method public void addNewIncomingCall(android.telecom.PhoneAccountHandle, android.os.Bundle);
-    method public void addNewIncomingConference(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.os.Bundle);
     method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void cancelMissedCallsNotification();
     method public android.content.Intent createManageBlockedNumbersIntent();
     method @Deprecated @RequiresPermission(android.Manifest.permission.ANSWER_PHONE_CALLS) public boolean endCall();
@@ -46137,7 +46224,6 @@
     method public void registerPhoneAccount(android.telecom.PhoneAccount);
     method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void showInCallScreen(boolean);
     method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void silenceRinger();
-    method @RequiresPermission(android.Manifest.permission.CALL_PHONE) public void startConference(@NonNull java.util.List<android.net.Uri>, @NonNull android.os.Bundle);
     method public void unregisterPhoneAccount(android.telecom.PhoneAccountHandle);
     field public static final String ACTION_CHANGE_DEFAULT_DIALER = "android.telecom.action.CHANGE_DEFAULT_DIALER";
     field public static final String ACTION_CHANGE_PHONE_ACCOUNTS = "android.telecom.action.CHANGE_PHONE_ACCOUNTS";
@@ -46464,8 +46550,8 @@
     field public static final String KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL = "allow_add_call_during_video_call";
     field public static final String KEY_ALLOW_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL = "allow_emergency_numbers_in_call_log_bool";
     field public static final String KEY_ALLOW_EMERGENCY_VIDEO_CALLS_BOOL = "allow_emergency_video_calls_bool";
-    field public static final String KEY_ALLOW_HOLDING_VIDEO_CALL_BOOL = "allow_holding_video_call";
     field public static final String KEY_ALLOW_HOLD_CALL_DURING_EMERGENCY_BOOL = "allow_hold_call_during_emergency_bool";
+    field public static final String KEY_ALLOW_HOLD_VIDEO_CALL_BOOL = "allow_hold_video_call_bool";
     field public static final String KEY_ALLOW_LOCAL_DTMF_TONES_BOOL = "allow_local_dtmf_tones_bool";
     field public static final String KEY_ALLOW_MERGE_WIFI_CALLS_WHEN_VOWIFI_OFF_BOOL = "allow_merge_wifi_calls_when_vowifi_off_bool";
     field public static final String KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL = "allow_non_emergency_calls_in_ecm_bool";
@@ -46664,7 +46750,6 @@
     field public static final String KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL = "sim_network_unlock_allow_dismiss_bool";
     field public static final String KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL = "sms_requires_destination_number_conversion_bool";
     field public static final String KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL = "support_3gpp_call_forwarding_while_roaming_bool";
-    field public static final String KEY_SUPPORT_ADHOC_CONFERENCE_CALLS_BOOL = "support_adhoc_conference_calls_bool";
     field public static final String KEY_SUPPORT_CLIR_NETWORK_DEFAULT_BOOL = "support_clir_network_default_bool";
     field public static final String KEY_SUPPORT_CONFERENCE_CALL_BOOL = "support_conference_call_bool";
     field public static final String KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL = "support_emergency_sms_over_ims_bool";
@@ -46719,59 +46804,6 @@
     field public static final String KEY_WIFI_OFF_DEFERRING_TIME_INT = "ims.wifi_off_deferring_time_int";
   }
 
-  public static final class CarrierConfigManager.Iwlan {
-    field public static final int AUTHENTICATION_METHOD_CERT = 1; // 0x1
-    field public static final int AUTHENTICATION_METHOD_EAP_ONLY = 0; // 0x0
-    field public static final int DH_GROUP_1024_BIT_MODP = 2; // 0x2
-    field public static final int DH_GROUP_2048_BIT_MODP = 14; // 0xe
-    field public static final int DH_GROUP_NONE = 0; // 0x0
-    field public static final int ENCRYPTION_ALGORITHM_3DES = 3; // 0x3
-    field public static final int ENCRYPTION_ALGORITHM_AES_CBC = 12; // 0xc
-    field public static final int ENCRYPTION_ALGORITHM_AES_GCM_12 = 19; // 0x13
-    field public static final int ENCRYPTION_ALGORITHM_AES_GCM_16 = 20; // 0x14
-    field public static final int ENCRYPTION_ALGORITHM_AES_GCM_8 = 18; // 0x12
-    field public static final int EPDG_ADDRESS_PCO = 2; // 0x2
-    field public static final int EPDG_ADDRESS_PLMN = 1; // 0x1
-    field public static final int EPDG_ADDRESS_STATIC = 0; // 0x0
-    field public static final int INTEGRITY_ALGORITHM_AES_XCBC_96 = 5; // 0x5
-    field public static final int INTEGRITY_ALGORITHM_HMAC_SHA1_96 = 2; // 0x2
-    field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_256_128 = 12; // 0xc
-    field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_384_192 = 13; // 0xd
-    field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_512_256 = 14; // 0xe
-    field public static final int INTEGRITY_ALGORITHM_NONE = 0; // 0x0
-    field public static final String KEY_CHILD_SA_REKEY_HARD_TIMER_SEC_INT = "iwlan.child_sa_rekey_hard_timer_sec_int";
-    field public static final String KEY_CHILD_SA_REKEY_SOFT_TIMER_SEC_INT = "iwlan.child_sa_rekey_soft_timer_sec_int";
-    field public static final String KEY_CHILD_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY = "iwlan.child_session_aes_cbc_key_size_int_array";
-    field public static final String KEY_CHILD_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY = "iwlan.child_encryption_aes_ctr_key_size_int_array";
-    field public static final String KEY_DIFFIE_HELLMAN_GROUPS_INT_ARRAY = "iwlan.diffie_hellman_groups_int_array";
-    field public static final String KEY_DPD_TIMER_SEC_INT = "iwlan.dpd_timer_sec_int";
-    field public static final String KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY = "iwlan.epdg_address_priority_int_array";
-    field public static final String KEY_EPDG_AUTHENTICATION_METHOD_INT = "iwlan.epdg_authentication_method_int";
-    field public static final String KEY_EPDG_STATIC_ADDRESS_ROAMING_STRING = "iwlan.epdg_static_address_roaming_string";
-    field public static final String KEY_EPDG_STATIC_ADDRESS_STRING = "iwlan.epdg_static_address_string";
-    field public static final String KEY_IKE_FRAGMENTATION_ENABLED_BOOL = "iwlan.ike_fragmentation_enabled_bool";
-    field public static final String KEY_IKE_REKEY_HARD_TIMER_SEC_INT = "iwlan.ike_rekey_hard_timer_in_sec";
-    field public static final String KEY_IKE_REKEY_SOFT_TIMER_SEC_INT = "iwlan.ike_rekey_soft_timer_sec_int";
-    field public static final String KEY_IKE_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY = "iwlan.ike_session_encryption_aes_cbc_key_size_int_array";
-    field public static final String KEY_IKE_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY = "iwlan.ike_session_aes_ctr_key_size_int_array";
-    field public static final int KEY_LEN_AES_128 = 128; // 0x80
-    field public static final int KEY_LEN_AES_192 = 192; // 0xc0
-    field public static final int KEY_LEN_AES_256 = 256; // 0x100
-    field public static final int KEY_LEN_UNUSED = 0; // 0x0
-    field public static final String KEY_MAX_RETRIES_INT = "iwlan.max_retries_int";
-    field public static final String KEY_MCC_MNCS_STRING_ARRAY = "iwlan.mcc_mncs_string_array";
-    field public static final String KEY_NATT_ENABLED_BOOL = "iwlan.natt_enabled_bool";
-    field public static final String KEY_NATT_KEEP_ALIVE_TIMER_SEC_INT = "iwlan.natt_keep_alive_timer_sec_int";
-    field public static final String KEY_PREFIX = "iwlan.";
-    field public static final String KEY_RETRANSMIT_TIMER_SEC_INT = "iwlan.retransmit_timer_sec_int";
-    field public static final String KEY_SUPPORTED_CHILD_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY = "iwlan.supported_child_session_encryption_algorithms_int_array";
-    field public static final String KEY_SUPPORTED_IKE_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY = "iwlan.supported_ike_session_encryption_algorithms_int_array";
-    field public static final String KEY_SUPPORTED_INTEGRITY_ALGORITHMS_INT_ARRAY = "iwlan.supported_integrity_algorithms_int_array";
-    field public static final String KEY_SUPPORTED_PRF_ALGORITHMS_INT_ARRAY = "iwlan.supported_prf_algorithms_int_array";
-    field public static final int PSEUDORANDOM_FUNCTION_AES128_XCBC = 4; // 0x4
-    field public static final int PSEUDORANDOM_FUNCTION_HMAC_SHA1 = 2; // 0x2
-  }
-
   public abstract class CellIdentity implements android.os.Parcelable {
     method public int describeContents();
     method @Nullable public CharSequence getOperatorAlphaLong();
@@ -46791,7 +46823,7 @@
   }
 
   public final class CellIdentityGsm extends android.telephony.CellIdentity {
-    method @NonNull public java.util.List<java.lang.String> getAdditionalPlmns();
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
     method public int getArfcn();
     method public int getBsic();
     method public int getCid();
@@ -46807,7 +46839,7 @@
   }
 
   public final class CellIdentityLte extends android.telephony.CellIdentity {
-    method @NonNull public java.util.List<java.lang.String> getAdditionalPlmns();
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
     method @NonNull public java.util.List<java.lang.Integer> getBands();
     method public int getBandwidth();
     method public int getCi();
@@ -46825,7 +46857,7 @@
   }
 
   public final class CellIdentityNr extends android.telephony.CellIdentity {
-    method @NonNull public java.util.List<java.lang.String> getAdditionalPlmns();
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
     method @NonNull public java.util.List<java.lang.Integer> getBands();
     method @Nullable public String getMccString();
     method @Nullable public String getMncString();
@@ -46838,7 +46870,7 @@
   }
 
   public final class CellIdentityTdscdma extends android.telephony.CellIdentity {
-    method @NonNull public java.util.List<java.lang.String> getAdditionalPlmns();
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
     method public int getCid();
     method @Nullable public android.telephony.ClosedSubscriberGroupInfo getClosedSubscriberGroupInfo();
     method public int getCpid();
@@ -46852,7 +46884,7 @@
   }
 
   public final class CellIdentityWcdma extends android.telephony.CellIdentity {
-    method @NonNull public java.util.List<java.lang.String> getAdditionalPlmns();
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
     method public int getCid();
     method @Nullable public android.telephony.ClosedSubscriberGroupInfo getClosedSubscriberGroupInfo();
     method public int getLac();
@@ -46873,7 +46905,7 @@
     method @NonNull public abstract android.telephony.CellIdentity getCellIdentity();
     method @NonNull public abstract android.telephony.CellSignalStrength getCellSignalStrength();
     method @Deprecated public long getTimeStamp();
-    method public long getTimestampNanos();
+    method public long getTimestampMillis();
     method public boolean isRegistered();
     field public static final int CONNECTION_NONE = 0; // 0x0
     field public static final int CONNECTION_PRIMARY_SERVING = 1; // 0x1
@@ -47033,6 +47065,19 @@
     field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ClosedSubscriberGroupInfo> CREATOR;
   }
 
+  public final class DisplayInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getNetworkType();
+    method public int getOverrideNetworkType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.DisplayInfo> CREATOR;
+    field public static final int OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO = 2; // 0x2
+    field public static final int OVERRIDE_NETWORK_TYPE_LTE_CA = 1; // 0x1
+    field public static final int OVERRIDE_NETWORK_TYPE_NONE = 0; // 0x0
+    field public static final int OVERRIDE_NETWORK_TYPE_NR_NSA = 3; // 0x3
+    field public static final int OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE = 4; // 0x4
+  }
+
   public class IccOpenLogicalChannelResponse implements android.os.Parcelable {
     method public int describeContents();
     method public int getChannel();
@@ -47129,7 +47174,7 @@
     method @Nullable public android.telephony.CellIdentity getCellIdentity();
     method public int getDomain();
     method public int getNrState();
-    method @NonNull public String getRegisteredPlmn();
+    method @Nullable public String getRegisteredPlmn();
     method public int getTransportType();
     method public boolean isRegistered();
     method public boolean isRoaming();
@@ -47182,32 +47227,8 @@
 
   public final class PhoneCapability implements android.os.Parcelable {
     method public int describeContents();
-    method @NonNull public java.util.List<java.lang.Integer> getBands(int);
-    method @NonNull public java.util.List<java.util.List<java.lang.Long>> getConcurrentFeaturesSupport();
-    method @NonNull public java.util.List<java.lang.String> getLogicalModemUuids();
-    method public int getMaxActiveDedicatedBearers();
-    method public int getMaxActiveInternetData();
-    method public int getMaxActivePsVoice();
-    method public long getPsDataConnectionLingerTimeMillis();
-    method @NonNull public java.util.List<android.telephony.SimSlotCapability> getSimSlotCapabilities();
-    method public long getSupportedRats();
-    method public int getUeCategory(boolean, int);
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PhoneCapability> CREATOR;
-    field public static final long MODEM_FEATURE_3GPP2_REG = 1L; // 0x1L
-    field public static final long MODEM_FEATURE_3GPP_REG = 2L; // 0x2L
-    field public static final long MODEM_FEATURE_CDMA2000_EHRPD_REG = 4L; // 0x4L
-    field public static final long MODEM_FEATURE_CSIM = 8192L; // 0x2000L
-    field public static final long MODEM_FEATURE_CS_VOICE_SESSION = 512L; // 0x200L
-    field public static final long MODEM_FEATURE_DEDICATED_BEARER = 2048L; // 0x800L
-    field public static final long MODEM_FEATURE_EUTRAN_REG = 32L; // 0x20L
-    field public static final long MODEM_FEATURE_EUTRA_NR_DUAL_CONNECTIVITY_REG = 128L; // 0x80L
-    field public static final long MODEM_FEATURE_GERAN_REG = 8L; // 0x8L
-    field public static final long MODEM_FEATURE_INTERACTIVE_DATA_SESSION = 1024L; // 0x400L
-    field public static final long MODEM_FEATURE_NETWORK_SCAN = 4096L; // 0x1000L
-    field public static final long MODEM_FEATURE_NGRAN_REG = 64L; // 0x40L
-    field public static final long MODEM_FEATURE_PS_VOICE_REG = 256L; // 0x100L
-    field public static final long MODEM_FEATURE_UTRAN_REG = 16L; // 0x10L
   }
 
   public class PhoneNumberFormattingTextWatcher implements android.text.TextWatcher {
@@ -47289,6 +47310,7 @@
     method public void onDataActivity(int);
     method public void onDataConnectionStateChanged(int);
     method public void onDataConnectionStateChanged(int, int);
+    method @RequiresPermission("android.permission.READ_PHONE_STATE") public void onDisplayInfoChanged(@NonNull android.telephony.DisplayInfo);
     method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo);
     method public void onMessageWaitingIndicatorChanged(boolean);
     method @RequiresPermission("android.permission.MODIFY_PHONE_STATE") public void onPreciseDataConnectionStateChanged(@NonNull android.telephony.PreciseDataConnectionState);
@@ -47298,7 +47320,7 @@
     method public void onSignalStrengthsChanged(android.telephony.SignalStrength);
     method public void onUserMobileDataStateChanged(boolean);
     field public static final int LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE = 4194304; // 0x400000
-    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int LISTEN_BARRING_INFO = -2147483648; // 0x80000000
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int LISTEN_BARRING_INFO = -2147483648; // 0x80000000
     field @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public static final int LISTEN_CALL_DISCONNECT_CAUSES = 33554432; // 0x2000000
     field public static final int LISTEN_CALL_FORWARDING_INDICATOR = 8; // 0x8
     field public static final int LISTEN_CALL_STATE = 32; // 0x20
@@ -47306,12 +47328,13 @@
     field public static final int LISTEN_CELL_LOCATION = 16; // 0x10
     field public static final int LISTEN_DATA_ACTIVITY = 128; // 0x80
     field public static final int LISTEN_DATA_CONNECTION_STATE = 64; // 0x40
+    field public static final int LISTEN_DISPLAY_INFO_CHANGED = 1048576; // 0x100000
     field public static final int LISTEN_EMERGENCY_NUMBER_LIST = 16777216; // 0x1000000
     field @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public static final int LISTEN_IMS_CALL_DISCONNECT_CAUSES = 134217728; // 0x8000000
     field public static final int LISTEN_MESSAGE_WAITING_INDICATOR = 4; // 0x4
     field public static final int LISTEN_NONE = 0; // 0x0
     field @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public static final int LISTEN_PRECISE_DATA_CONNECTION_STATE = 4096; // 0x1000
-    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int LISTEN_REGISTRATION_FAILURE = 1073741824; // 0x40000000
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int LISTEN_REGISTRATION_FAILURE = 1073741824; // 0x40000000
     field public static final int LISTEN_SERVICE_STATE = 1; // 0x1
     field @Deprecated public static final int LISTEN_SIGNAL_STRENGTH = 2; // 0x2
     field public static final int LISTEN_SIGNAL_STRENGTHS = 256; // 0x100
@@ -47388,25 +47411,13 @@
     method @Deprecated public int getGsmBitErrorRate();
     method @Deprecated public int getGsmSignalStrength();
     method public int getLevel();
-    method public long getTimestampNanos();
+    method public long getTimestampMillis();
     method @Deprecated public boolean isGsm();
     method public void writeToParcel(android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SignalStrength> CREATOR;
     field public static final int INVALID = 2147483647; // 0x7fffffff
   }
 
-  public final class SimSlotCapability implements android.os.Parcelable {
-    method public int describeContents();
-    method public int getPhysicalSlotIndex();
-    method public int getSlotType();
-    method public void writeToParcel(@NonNull android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SimSlotCapability> CREATOR;
-    field public static final int SLOT_TYPE_EUICC = 3; // 0x3
-    field public static final int SLOT_TYPE_IUICC = 2; // 0x2
-    field public static final int SLOT_TYPE_SOFT_SIM = 4; // 0x4
-    field public static final int SLOT_TYPE_UICC = 1; // 0x1
-  }
-
   public final class SmsManager {
     method public String createAppSpecificSmsToken(android.app.PendingIntent);
     method @Nullable public String createAppSpecificSmsTokenWithPackageInfo(@Nullable String, @NonNull android.app.PendingIntent);
@@ -47763,7 +47774,6 @@
     method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public int getNetworkSelectionMode();
     method public String getNetworkSpecifier();
     method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getNetworkType();
-    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public android.telephony.PhoneCapability getPhoneCapability();
     method @Deprecated public int getPhoneCount();
     method public int getPhoneType();
     method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PHONE_STATE}) public int getPreferredOpportunisticDataSubscription();
@@ -52038,6 +52048,8 @@
     field public static final int CONTEXT_CLICK = 6; // 0x6
     field public static final int FLAG_IGNORE_GLOBAL_SETTING = 2; // 0x2
     field public static final int FLAG_IGNORE_VIEW_SETTING = 1; // 0x1
+    field public static final int GESTURE_END = 13; // 0xd
+    field public static final int GESTURE_START = 12; // 0xc
     field public static final int KEYBOARD_PRESS = 3; // 0x3
     field public static final int KEYBOARD_RELEASE = 7; // 0x7
     field public static final int KEYBOARD_TAP = 3; // 0x3
@@ -53129,11 +53141,13 @@
     method public android.graphics.Canvas lockHardwareCanvas();
     method public void readFromParcel(android.os.Parcel);
     method public void release();
-    method public void setFrameRate(@FloatRange(from=0.0) float);
+    method public void setFrameRate(@FloatRange(from=0.0) float, int);
     method @Deprecated public void unlockCanvas(android.graphics.Canvas);
     method public void unlockCanvasAndPost(android.graphics.Canvas);
     method public void writeToParcel(android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.view.Surface> CREATOR;
+    field public static final int FRAME_RATE_COMPATIBILITY_DEFAULT = 0; // 0x0
+    field public static final int FRAME_RATE_COMPATIBILITY_FIXED_SOURCE = 1; // 0x1
     field public static final int ROTATION_0 = 0; // 0x0
     field public static final int ROTATION_180 = 2; // 0x2
     field public static final int ROTATION_270 = 3; // 0x3
@@ -53173,7 +53187,7 @@
     method @NonNull public android.view.SurfaceControl.Transaction reparent(@NonNull android.view.SurfaceControl, @Nullable android.view.SurfaceControl);
     method @NonNull public android.view.SurfaceControl.Transaction setAlpha(@NonNull android.view.SurfaceControl, @FloatRange(from=0.0, to=1.0) float);
     method @NonNull public android.view.SurfaceControl.Transaction setBufferSize(@NonNull android.view.SurfaceControl, @IntRange(from=0) int, @IntRange(from=0) int);
-    method @NonNull public android.view.SurfaceControl.Transaction setFrameRate(@NonNull android.view.SurfaceControl, @FloatRange(from=0.0) float);
+    method @NonNull public android.view.SurfaceControl.Transaction setFrameRate(@NonNull android.view.SurfaceControl, @FloatRange(from=0.0) float, int);
     method @NonNull public android.view.SurfaceControl.Transaction setGeometry(@NonNull android.view.SurfaceControl, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, int);
     method @NonNull public android.view.SurfaceControl.Transaction setLayer(@NonNull android.view.SurfaceControl, @IntRange(from=java.lang.Integer.MIN_VALUE, to=java.lang.Integer.MAX_VALUE) int);
     method @NonNull public android.view.SurfaceControl.Transaction setVisibility(@NonNull android.view.SurfaceControl, boolean);
@@ -53302,6 +53316,38 @@
     method public void recycle();
   }
 
+  public abstract class VerifiedInputEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getDeviceId();
+    method public int getDisplayId();
+    method public long getEventTimeNanos();
+    method public int getSource();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.VerifiedInputEvent> CREATOR;
+  }
+
+  public final class VerifiedKeyEvent extends android.view.VerifiedInputEvent implements android.os.Parcelable {
+    method public int getAction();
+    method public long getDownTimeNanos();
+    method @Nullable public Boolean getFlag(int);
+    method public int getKeyCode();
+    method public int getMetaState();
+    method public int getRepeatCount();
+    method public int getScanCode();
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.VerifiedKeyEvent> CREATOR;
+  }
+
+  public final class VerifiedMotionEvent extends android.view.VerifiedInputEvent implements android.os.Parcelable {
+    method public int getActionMasked();
+    method public int getButtonState();
+    method public long getDownTimeNanos();
+    method @Nullable public Boolean getFlag(int);
+    method public int getMetaState();
+    method public float getRawX();
+    method public float getRawY();
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.VerifiedMotionEvent> CREATOR;
+  }
+
   @UiThread public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback {
     ctor public View(android.content.Context);
     ctor public View(android.content.Context, @Nullable android.util.AttributeSet);
@@ -53387,10 +53433,10 @@
     method public boolean dispatchUnhandledMove(android.view.View, int);
     method protected void dispatchVisibilityChanged(@NonNull android.view.View, int);
     method public void dispatchWindowFocusChanged(boolean);
-    method public void dispatchWindowInsetsAnimationFinish(@NonNull android.view.WindowInsetsAnimationCallback.InsetsAnimation);
-    method public void dispatchWindowInsetsAnimationPrepare(@NonNull android.view.WindowInsetsAnimationCallback.InsetsAnimation);
-    method @NonNull public android.view.WindowInsets dispatchWindowInsetsAnimationProgress(@NonNull android.view.WindowInsets);
-    method @NonNull public android.view.WindowInsetsAnimationCallback.AnimationBounds dispatchWindowInsetsAnimationStart(@NonNull android.view.WindowInsetsAnimationCallback.InsetsAnimation, @NonNull android.view.WindowInsetsAnimationCallback.AnimationBounds);
+    method public void dispatchWindowInsetsAnimationEnd(@NonNull android.view.WindowInsetsAnimation);
+    method public void dispatchWindowInsetsAnimationPrepare(@NonNull android.view.WindowInsetsAnimation);
+    method @NonNull public android.view.WindowInsets dispatchWindowInsetsAnimationProgress(@NonNull android.view.WindowInsets, @NonNull java.util.List<android.view.WindowInsetsAnimation>);
+    method @NonNull public android.view.WindowInsetsAnimation.Bounds dispatchWindowInsetsAnimationStart(@NonNull android.view.WindowInsetsAnimation, @NonNull android.view.WindowInsetsAnimation.Bounds);
     method @Deprecated public void dispatchWindowSystemUiVisiblityChanged(int);
     method public void dispatchWindowVisibilityChanged(int);
     method @CallSuper public void draw(android.graphics.Canvas);
@@ -53749,6 +53795,7 @@
     method public boolean requestRectangleOnScreen(android.graphics.Rect);
     method public boolean requestRectangleOnScreen(android.graphics.Rect, boolean);
     method public final void requestUnbufferedDispatch(android.view.MotionEvent);
+    method public final void requestUnbufferedDispatch(int);
     method @NonNull public final <T extends android.view.View> T requireViewById(@IdRes int);
     method public void resetPivot();
     method public static int resolveSize(int, int);
@@ -53911,7 +53958,7 @@
     method public void setVisibility(int);
     method @Deprecated public void setWillNotCacheDrawing(boolean);
     method public void setWillNotDraw(boolean);
-    method public void setWindowInsetsAnimationCallback(@Nullable android.view.WindowInsetsAnimationCallback);
+    method public void setWindowInsetsAnimationCallback(@Nullable android.view.WindowInsetsAnimation.Callback);
     method public void setX(float);
     method public void setY(float);
     method public void setZ(float);
@@ -55078,25 +55125,8 @@
     method public static int tappableElement();
   }
 
-  public interface WindowInsetsAnimationCallback {
-    method public int getDispatchMode();
-    method public default void onFinish(@NonNull android.view.WindowInsetsAnimationCallback.InsetsAnimation);
-    method public default void onPrepare(@NonNull android.view.WindowInsetsAnimationCallback.InsetsAnimation);
-    method @NonNull public android.view.WindowInsets onProgress(@NonNull android.view.WindowInsets);
-    method @NonNull public default android.view.WindowInsetsAnimationCallback.AnimationBounds onStart(@NonNull android.view.WindowInsetsAnimationCallback.InsetsAnimation, @NonNull android.view.WindowInsetsAnimationCallback.AnimationBounds);
-    field public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1; // 0x1
-    field public static final int DISPATCH_MODE_STOP = 0; // 0x0
-  }
-
-  public static final class WindowInsetsAnimationCallback.AnimationBounds {
-    ctor public WindowInsetsAnimationCallback.AnimationBounds(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets);
-    method @NonNull public android.graphics.Insets getLowerBound();
-    method @NonNull public android.graphics.Insets getUpperBound();
-    method @NonNull public android.view.WindowInsetsAnimationCallback.AnimationBounds inset(@NonNull android.graphics.Insets);
-  }
-
-  public static final class WindowInsetsAnimationCallback.InsetsAnimation {
-    ctor public WindowInsetsAnimationCallback.InsetsAnimation(int, @Nullable android.view.animation.Interpolator, long);
+  public final class WindowInsetsAnimation {
+    ctor public WindowInsetsAnimation(int, @Nullable android.view.animation.Interpolator, long);
     method @FloatRange(from=0.0f, to=1.0f) public float getAlpha();
     method public long getDurationMillis();
     method @FloatRange(from=0.0f, to=1.0f) public float getFraction();
@@ -55107,6 +55137,24 @@
     method public void setFraction(@FloatRange(from=0.0f, to=1.0f) float);
   }
 
+  public static final class WindowInsetsAnimation.Bounds {
+    ctor public WindowInsetsAnimation.Bounds(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets);
+    method @NonNull public android.graphics.Insets getLowerBound();
+    method @NonNull public android.graphics.Insets getUpperBound();
+    method @NonNull public android.view.WindowInsetsAnimation.Bounds inset(@NonNull android.graphics.Insets);
+  }
+
+  public abstract static class WindowInsetsAnimation.Callback {
+    ctor public WindowInsetsAnimation.Callback(int);
+    method public final int getDispatchMode();
+    method public void onEnd(@NonNull android.view.WindowInsetsAnimation);
+    method public void onPrepare(@NonNull android.view.WindowInsetsAnimation);
+    method @NonNull public abstract android.view.WindowInsets onProgress(@NonNull android.view.WindowInsets, @NonNull java.util.List<android.view.WindowInsetsAnimation>);
+    method @NonNull public android.view.WindowInsetsAnimation.Bounds onStart(@NonNull android.view.WindowInsetsAnimation, @NonNull android.view.WindowInsetsAnimation.Bounds);
+    field public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1; // 0x1
+    field public static final int DISPATCH_MODE_STOP = 0; // 0x0
+  }
+
   public interface WindowInsetsAnimationControlListener {
     method public void onCancelled();
     method public void onReady(@NonNull android.view.WindowInsetsAnimationController, int);
@@ -55124,7 +55172,7 @@
   }
 
   public interface WindowInsetsController {
-    method public void controlWindowInsetsAnimation(int, long, @Nullable android.view.animation.Interpolator, @NonNull android.view.WindowInsetsAnimationControlListener);
+    method @NonNull public android.os.CancellationSignal controlWindowInsetsAnimation(int, long, @Nullable android.view.animation.Interpolator, @NonNull android.view.WindowInsetsAnimationControlListener);
     method public int getSystemBarsAppearance();
     method public int getSystemBarsBehavior();
     method public void hide(int);
@@ -55461,6 +55509,7 @@
     method public CharSequence getContentDescription();
     method public int getDrawingOrder();
     method public CharSequence getError();
+    method @Nullable public android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo getExtraRenderingInfo();
     method public android.os.Bundle getExtras();
     method public CharSequence getHintText();
     method public int getInputType();
@@ -55613,6 +55662,7 @@
     field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
     field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
     field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityNodeInfo> CREATOR;
+    field public static final String EXTRA_DATA_RENDERING_INFO_KEY = "android.view.accessibility.extra.DATA_RENDERING_INFO_KEY";
     field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH";
     field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX";
     field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_KEY";
@@ -55700,6 +55750,12 @@
     method public static android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo obtain(int, int, int, int, boolean, boolean);
   }
 
+  public static final class AccessibilityNodeInfo.ExtraRenderingInfo {
+    method @Nullable public android.util.Size getLayoutParams();
+    method public float getTextSizeInPx();
+    method public int getTextSizeUnit();
+  }
+
   public static final class AccessibilityNodeInfo.RangeInfo {
     ctor public AccessibilityNodeInfo.RangeInfo(int, float, float, float);
     method public float getCurrent();
@@ -56326,6 +56382,7 @@
     method public int describeContents();
     method @NonNull public android.util.Size getMaxSize();
     method @NonNull public android.util.Size getMinSize();
+    method @Nullable public android.os.Bundle getStyle();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.view.inline.InlinePresentationSpec> CREATOR;
   }
@@ -56333,7 +56390,7 @@
   public static final class InlinePresentationSpec.Builder {
     ctor public InlinePresentationSpec.Builder(@NonNull android.util.Size, @NonNull android.util.Size);
     method @NonNull public android.view.inline.InlinePresentationSpec build();
-    method @NonNull public android.view.inline.InlinePresentationSpec.Builder setStyle(@Nullable String);
+    method @NonNull public android.view.inline.InlinePresentationSpec.Builder setStyle(@Nullable android.os.Bundle);
   }
 
 }
@@ -56530,9 +56587,11 @@
 
   public final class InlineSuggestionsRequest implements android.os.Parcelable {
     method public int describeContents();
+    method @Nullable public android.os.Bundle getExtras();
     method @NonNull public String getHostPackageName();
     method public int getMaxSuggestionCount();
     method @NonNull public java.util.List<android.view.inline.InlinePresentationSpec> getPresentationSpecs();
+    method @NonNull public android.os.LocaleList getSupportedLocales();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InlineSuggestionsRequest> CREATOR;
     field public static final int SUGGESTION_COUNT_UNLIMITED = 2147483647; // 0x7fffffff
@@ -56542,7 +56601,9 @@
     ctor public InlineSuggestionsRequest.Builder(@NonNull java.util.List<android.view.inline.InlinePresentationSpec>);
     method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder addPresentationSpecs(@NonNull android.view.inline.InlinePresentationSpec);
     method @NonNull public android.view.inputmethod.InlineSuggestionsRequest build();
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setExtras(@Nullable android.os.Bundle);
     method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setMaxSuggestionCount(int);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setSupportedLocales(@NonNull android.os.LocaleList);
   }
 
   public final class InlineSuggestionsResponse implements android.os.Parcelable {
@@ -60677,6 +60738,7 @@
     method @Nullable public android.graphics.drawable.Drawable getTextSelectHandleLeft();
     method @Nullable public android.graphics.drawable.Drawable getTextSelectHandleRight();
     method @android.view.ViewDebug.ExportedProperty(category="text") public float getTextSize();
+    method public int getTextSizeUnit();
     method public int getTotalPaddingBottom();
     method public int getTotalPaddingEnd();
     method public int getTotalPaddingLeft();
@@ -60821,7 +60883,6 @@
     method public void setTypeface(@Nullable android.graphics.Typeface, int);
     method public void setTypeface(@Nullable android.graphics.Typeface);
     method public void setWidth(int);
-    field public static final int ACCESSIBILITY_ACTION_IME_ENTER = 16908372; // 0x1020054
     field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
     field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
   }
@@ -60876,7 +60937,7 @@
     method public int getGravity();
     method public float getHorizontalMargin();
     method public float getVerticalMargin();
-    method @Deprecated public android.view.View getView();
+    method @Deprecated @Nullable public android.view.View getView();
     method public int getXOffset();
     method public int getYOffset();
     method public static android.widget.Toast makeText(android.content.Context, CharSequence, int);
@@ -71954,6 +72015,7 @@
     method public static java.time.chrono.JapaneseEra[] values();
     field public static final java.time.chrono.JapaneseEra HEISEI;
     field public static final java.time.chrono.JapaneseEra MEIJI;
+    field public static final java.time.chrono.JapaneseEra REIWA;
     field public static final java.time.chrono.JapaneseEra SHOWA;
     field public static final java.time.chrono.JapaneseEra TAISHO;
   }
diff --git a/api/lint-baseline.txt b/api/lint-baseline.txt
index 2a8f04f..569e838 100644
--- a/api/lint-baseline.txt
+++ b/api/lint-baseline.txt
@@ -561,6 +561,9 @@
     
 MissingNullability: android.media.MediaMetadataRetriever#getScaledFrameAtTime(long, int, int, int, android.media.MediaMetadataRetriever.BitmapParams):
 
+    
+MissingNullability: java.time.chrono.JapaneseEra#REIWA:
+    Missing nullability on field `REIWA` in class `class java.time.chrono.JapaneseEra`
 
 
 RequiresPermission: android.accounts.AccountManager#getAccountsByTypeAndFeatures(String, String[], android.accounts.AccountManagerCallback<android.accounts.Account[]>, android.os.Handler):
diff --git a/api/module-lib-current.txt b/api/module-lib-current.txt
index 90531b1..7b66f73 100644
--- a/api/module-lib-current.txt
+++ b/api/module-lib-current.txt
@@ -1,4 +1,167 @@
 // Signature format: 2.0
+package android.annotation {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD}) public @interface NonNull {
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD}) public @interface Nullable {
+  }
+
+}
+
+package android.net {
+
+  public final class TetheredClient implements android.os.Parcelable {
+    ctor public TetheredClient(@NonNull android.net.MacAddress, @NonNull java.util.Collection<android.net.TetheredClient.AddressInfo>, int);
+    method public int describeContents();
+    method @NonNull public java.util.List<android.net.TetheredClient.AddressInfo> getAddresses();
+    method @NonNull public android.net.MacAddress getMacAddress();
+    method public int getTetheringType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TetheredClient> CREATOR;
+  }
+
+  public static final class TetheredClient.AddressInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.net.LinkAddress getAddress();
+    method @Nullable public String getHostname();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TetheredClient.AddressInfo> CREATOR;
+  }
+
+  public class TetheringConstants {
+    ctor public TetheringConstants();
+    field public static final String EXTRA_ADD_TETHER_TYPE = "extraAddTetherType";
+    field public static final String EXTRA_PROVISION_CALLBACK = "extraProvisionCallback";
+    field public static final String EXTRA_REM_TETHER_TYPE = "extraRemTetherType";
+    field public static final String EXTRA_RUN_PROVISION = "extraRunProvision";
+    field public static final String EXTRA_SET_ALARM = "extraSetAlarm";
+  }
+
+  public class TetheringManager {
+    ctor public TetheringManager(@NonNull android.content.Context, @NonNull java.util.function.Supplier<android.os.IBinder>);
+    method public int getLastTetherError(@NonNull String);
+    method @NonNull public String[] getTetherableBluetoothRegexs();
+    method @NonNull public String[] getTetherableIfaces();
+    method @NonNull public String[] getTetherableUsbRegexs();
+    method @NonNull public String[] getTetherableWifiRegexs();
+    method @NonNull public String[] getTetheredIfaces();
+    method @NonNull public String[] getTetheringErroredIfaces();
+    method public boolean isTetheringSupported();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerTetheringEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.TetheringEventCallback);
+    method @RequiresPermission(anyOf={"android.permission.TETHER_PRIVILEGED", android.Manifest.permission.WRITE_SETTINGS}) public void requestLatestTetheringEntitlementResult(int, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.OnTetheringEntitlementResultListener);
+    method public void requestLatestTetheringEntitlementResult(int, @NonNull android.os.ResultReceiver, boolean);
+    method @Deprecated public int setUsbTethering(boolean);
+    method @RequiresPermission(anyOf={"android.permission.TETHER_PRIVILEGED", android.Manifest.permission.WRITE_SETTINGS}) public void startTethering(@NonNull android.net.TetheringManager.TetheringRequest, @NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.StartTetheringCallback);
+    method @RequiresPermission(anyOf={"android.permission.TETHER_PRIVILEGED", android.Manifest.permission.WRITE_SETTINGS}) public void startTethering(int, @NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.StartTetheringCallback);
+    method @RequiresPermission(anyOf={"android.permission.TETHER_PRIVILEGED", android.Manifest.permission.WRITE_SETTINGS}) public void stopAllTethering();
+    method @RequiresPermission(anyOf={"android.permission.TETHER_PRIVILEGED", android.Manifest.permission.WRITE_SETTINGS}) public void stopTethering(int);
+    method @Deprecated public int tether(@NonNull String);
+    method @RequiresPermission(anyOf={"android.permission.TETHER_PRIVILEGED", android.Manifest.permission.ACCESS_NETWORK_STATE}) public void unregisterTetheringEventCallback(@NonNull android.net.TetheringManager.TetheringEventCallback);
+    method @Deprecated public int untether(@NonNull String);
+    field public static final String ACTION_TETHER_STATE_CHANGED = "android.net.conn.TETHER_STATE_CHANGED";
+    field public static final String EXTRA_ACTIVE_LOCAL_ONLY = "android.net.extra.ACTIVE_LOCAL_ONLY";
+    field public static final String EXTRA_ACTIVE_TETHER = "tetherArray";
+    field public static final String EXTRA_AVAILABLE_TETHER = "availableArray";
+    field public static final String EXTRA_ERRORED_TETHER = "erroredArray";
+    field public static final int TETHERING_BLUETOOTH = 2; // 0x2
+    field public static final int TETHERING_ETHERNET = 5; // 0x5
+    field public static final int TETHERING_INVALID = -1; // 0xffffffff
+    field public static final int TETHERING_NCM = 4; // 0x4
+    field public static final int TETHERING_USB = 1; // 0x1
+    field public static final int TETHERING_WIFI = 0; // 0x0
+    field public static final int TETHERING_WIFI_P2P = 3; // 0x3
+    field public static final int TETHER_ERROR_DHCPSERVER_ERROR = 12; // 0xc
+    field public static final int TETHER_ERROR_DISABLE_NAT_ERROR = 9; // 0x9
+    field public static final int TETHER_ERROR_ENABLE_NAT_ERROR = 8; // 0x8
+    field public static final int TETHER_ERROR_ENTITLEMENT_UNKNOWN = 13; // 0xd
+    field public static final int TETHER_ERROR_IFACE_CFG_ERROR = 10; // 0xa
+    field public static final int TETHER_ERROR_MASTER_ERROR = 5; // 0x5
+    field public static final int TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION = 15; // 0xf
+    field public static final int TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION = 14; // 0xe
+    field public static final int TETHER_ERROR_NO_ERROR = 0; // 0x0
+    field public static final int TETHER_ERROR_PROVISION_FAILED = 11; // 0xb
+    field public static final int TETHER_ERROR_SERVICE_UNAVAIL = 2; // 0x2
+    field public static final int TETHER_ERROR_TETHER_IFACE_ERROR = 6; // 0x6
+    field public static final int TETHER_ERROR_UNAVAIL_IFACE = 4; // 0x4
+    field public static final int TETHER_ERROR_UNKNOWN_IFACE = 1; // 0x1
+    field public static final int TETHER_ERROR_UNSUPPORTED = 3; // 0x3
+    field public static final int TETHER_ERROR_UNTETHER_IFACE_ERROR = 7; // 0x7
+  }
+
+  public static interface TetheringManager.OnTetheringEntitlementResultListener {
+    method public void onTetheringEntitlementResult(int);
+  }
+
+  public abstract static class TetheringManager.StartTetheringCallback {
+    ctor public TetheringManager.StartTetheringCallback();
+    method public void onTetheringFailed(int);
+    method public void onTetheringStarted();
+  }
+
+  public abstract static class TetheringManager.TetheringEventCallback {
+    ctor public TetheringManager.TetheringEventCallback();
+    method public void onClientsChanged(@NonNull java.util.Collection<android.net.TetheredClient>);
+    method public void onError(@NonNull String, int);
+    method @Deprecated public void onTetherableInterfaceRegexpsChanged(@NonNull android.net.TetheringManager.TetheringInterfaceRegexps);
+    method public void onTetherableInterfacesChanged(@NonNull java.util.List<java.lang.String>);
+    method public void onTetheredInterfacesChanged(@NonNull java.util.List<java.lang.String>);
+    method public void onTetheringSupported(boolean);
+    method public void onUpstreamChanged(@Nullable android.net.Network);
+  }
+
+  @Deprecated public static class TetheringManager.TetheringInterfaceRegexps {
+    ctor @Deprecated public TetheringManager.TetheringInterfaceRegexps(@NonNull String[], @NonNull String[], @NonNull String[]);
+    method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableBluetoothRegexs();
+    method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableUsbRegexs();
+    method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableWifiRegexs();
+  }
+
+  public static class TetheringManager.TetheringRequest {
+  }
+
+  public static class TetheringManager.TetheringRequest.Builder {
+    ctor public TetheringManager.TetheringRequest.Builder(int);
+    method @NonNull public android.net.TetheringManager.TetheringRequest build();
+    method @NonNull @RequiresPermission("android.permission.TETHER_PRIVILEGED") public android.net.TetheringManager.TetheringRequest.Builder setExemptFromEntitlementCheck(boolean);
+    method @NonNull @RequiresPermission("android.permission.TETHER_PRIVILEGED") public android.net.TetheringManager.TetheringRequest.Builder setSilentProvisioning(boolean);
+    method @NonNull @RequiresPermission("android.permission.TETHER_PRIVILEGED") public android.net.TetheringManager.TetheringRequest.Builder useStaticIpv4Addresses(@NonNull android.net.LinkAddress);
+  }
+
+}
+
+package android.os {
+
+  public class StatsFrameworkInitializer {
+    method public static void registerServiceWrappers();
+    method public static void setStatsServiceManager(@NonNull android.os.StatsServiceManager);
+  }
+
+  public class StatsServiceManager {
+    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsCompanionServiceRegisterer();
+    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsManagerServiceRegisterer();
+    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsdServiceRegisterer();
+  }
+
+  public static class StatsServiceManager.ServiceNotFoundException extends java.lang.Exception {
+    ctor public StatsServiceManager.ServiceNotFoundException(@NonNull String);
+  }
+
+  public static final class StatsServiceManager.ServiceRegisterer {
+    method @Nullable public android.os.IBinder get();
+    method @Nullable public android.os.IBinder getOrThrow() throws android.os.StatsServiceManager.ServiceNotFoundException;
+  }
+
+}
+
+package android.os.ext.test {
+
+  @Deprecated public class Test {
+    method @Deprecated public void testD();
+  }
+
+}
+
 package android.util {
 
   public final class Log {
diff --git a/api/module-lib-lint-baseline.txt b/api/module-lib-lint-baseline.txt
new file mode 100644
index 0000000..6e59596
--- /dev/null
+++ b/api/module-lib-lint-baseline.txt
@@ -0,0 +1,33 @@
+// Baseline format: 1.0
+ActionValue: android.net.TetheringConstants#EXTRA_ADD_TETHER_TYPE:
+    Inconsistent extra value; expected `android.net.extra.ADD_TETHER_TYPE`, was `extraAddTetherType`
+ActionValue: android.net.TetheringConstants#EXTRA_PROVISION_CALLBACK:
+    Inconsistent extra value; expected `android.net.extra.PROVISION_CALLBACK`, was `extraProvisionCallback`
+ActionValue: android.net.TetheringConstants#EXTRA_REM_TETHER_TYPE:
+    Inconsistent extra value; expected `android.net.extra.REM_TETHER_TYPE`, was `extraRemTetherType`
+ActionValue: android.net.TetheringConstants#EXTRA_RUN_PROVISION:
+    Inconsistent extra value; expected `android.net.extra.RUN_PROVISION`, was `extraRunProvision`
+ActionValue: android.net.TetheringConstants#EXTRA_SET_ALARM:
+    Inconsistent extra value; expected `android.net.extra.SET_ALARM`, was `extraSetAlarm`
+ActionValue: android.net.TetheringManager#ACTION_TETHER_STATE_CHANGED:
+    Inconsistent action value; expected `android.net.action.TETHER_STATE_CHANGED`, was `android.net.conn.TETHER_STATE_CHANGED`
+ActionValue: android.net.TetheringManager#EXTRA_ACTIVE_TETHER:
+    Inconsistent extra value; expected `android.net.extra.ACTIVE_TETHER`, was `tetherArray`
+ActionValue: android.net.TetheringManager#EXTRA_AVAILABLE_TETHER:
+    Inconsistent extra value; expected `android.net.extra.AVAILABLE_TETHER`, was `availableArray`
+ActionValue: android.net.TetheringManager#EXTRA_ERRORED_TETHER:
+    Inconsistent extra value; expected `android.net.extra.ERRORED_TETHER`, was `erroredArray`
+
+
+ManagerConstructor: android.net.TetheringManager#TetheringManager(android.content.Context, java.util.function.Supplier<android.os.IBinder>):
+    Managers must always be obtained from Context; no direct constructors
+
+
+PrivateSuperclass: android.location.GnssAntennaInfo.PhaseCenterVariationCorrections:
+    Public class android.location.GnssAntennaInfo.PhaseCenterVariationCorrections extends private class android.location.GnssAntennaInfo.SphericalCorrections
+PrivateSuperclass: android.location.GnssAntennaInfo.SignalGainCorrections:
+    Public class android.location.GnssAntennaInfo.SignalGainCorrections extends private class android.location.GnssAntennaInfo.SphericalCorrections
+
+
+StaticUtils: android.net.TetheringConstants:
+    Fully-static utility classes must not have constructor
diff --git a/api/system-current.txt b/api/system-current.txt
index 273309e..3ef7857 100755
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -9,6 +9,7 @@
     field public static final String ACCESS_DRM_CERTIFICATES = "android.permission.ACCESS_DRM_CERTIFICATES";
     field @Deprecated public static final String ACCESS_FM_RADIO = "android.permission.ACCESS_FM_RADIO";
     field public static final String ACCESS_INSTANT_APPS = "android.permission.ACCESS_INSTANT_APPS";
+    field public static final String ACCESS_LOCUS_ID_USAGE_STATS = "android.permission.ACCESS_LOCUS_ID_USAGE_STATS";
     field public static final String ACCESS_MESSAGES_ON_ICC = "android.permission.ACCESS_MESSAGES_ON_ICC";
     field public static final String ACCESS_MOCK_LOCATION = "android.permission.ACCESS_MOCK_LOCATION";
     field public static final String ACCESS_MTP = "android.permission.ACCESS_MTP";
@@ -17,7 +18,9 @@
     field public static final String ACCESS_SHARED_LIBRARIES = "android.permission.ACCESS_SHARED_LIBRARIES";
     field public static final String ACCESS_SHORTCUTS = "android.permission.ACCESS_SHORTCUTS";
     field public static final String ACCESS_SURFACE_FLINGER = "android.permission.ACCESS_SURFACE_FLINGER";
+    field public static final String ACCESS_TV_DESCRAMBLER = "android.permission.ACCESS_TV_DESCRAMBLER";
     field public static final String ACCESS_TV_TUNER = "android.permission.ACCESS_TV_TUNER";
+    field public static final String ACCESS_VIBRATOR_STATE = "android.permission.ACCESS_VIBRATOR_STATE";
     field public static final String ACTIVITY_EMBEDDING = "android.permission.ACTIVITY_EMBEDDING";
     field public static final String ADJUST_RUNTIME_PERMISSIONS_POLICY = "android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY";
     field public static final String ALLOCATE_AGGRESSIVE = "android.permission.ALLOCATE_AGGRESSIVE";
@@ -115,6 +118,7 @@
     field public static final String MANAGE_CONTENT_CAPTURE = "android.permission.MANAGE_CONTENT_CAPTURE";
     field public static final String MANAGE_CONTENT_SUGGESTIONS = "android.permission.MANAGE_CONTENT_SUGGESTIONS";
     field public static final String MANAGE_DEBUGGING = "android.permission.MANAGE_DEBUGGING";
+    field public static final String MANAGE_FACTORY_RESET_PROTECTION = "android.permission.MANAGE_FACTORY_RESET_PROTECTION";
     field public static final String MANAGE_IPSEC_TUNNELS = "android.permission.MANAGE_IPSEC_TUNNELS";
     field public static final String MANAGE_ONE_TIME_PERMISSION_SESSIONS = "android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS";
     field public static final String MANAGE_ROLE_HOLDERS = "android.permission.MANAGE_ROLE_HOLDERS";
@@ -133,7 +137,6 @@
     field public static final String MODIFY_PARENTAL_CONTROLS = "android.permission.MODIFY_PARENTAL_CONTROLS";
     field public static final String MODIFY_QUIET_MODE = "android.permission.MODIFY_QUIET_MODE";
     field public static final String MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE = "android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE";
-    field public static final String MONITOR_DEVICE_CONFIG_ACCESS = "android.permission.MONITOR_DEVICE_CONFIG_ACCESS";
     field public static final String MOVE_PACKAGE = "android.permission.MOVE_PACKAGE";
     field public static final String NETWORK_AIRPLANE_MODE = "android.permission.NETWORK_AIRPLANE_MODE";
     field public static final String NETWORK_CARRIER_PROVISIONING = "android.permission.NETWORK_CARRIER_PROVISIONING";
@@ -254,7 +257,6 @@
 
   public static final class R.attr {
     field public static final int allowClearUserDataOnFailedRestore = 16844288; // 0x1010600
-    field public static final int isAutofillInlineSuggestionTheme = 16844310; // 0x1010616
     field public static final int isVrOnly = 16844152; // 0x1010578
     field public static final int minExtensionVersion = 16844306; // 0x1010612
     field public static final int requiredSystemPropertyName = 16844133; // 0x1010565
@@ -362,16 +364,18 @@
   }
 
   public class AppOpsManager {
+    method @Nullable @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public android.app.RuntimeAppOpAccessMessage collectRuntimeAppOpAccessMessage();
     method @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public void getHistoricalOps(@NonNull android.app.AppOpsManager.HistoricalOpsRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.AppOpsManager.HistoricalOps>);
     method public static String[] getOpStrs();
     method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.app.AppOpsManager.PackageOps> getOpsForPackage(int, @NonNull String, @Nullable java.lang.String...);
     method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.app.AppOpsManager.PackageOps> getPackagesForOps(@Nullable String[]);
     method public static int opToDefaultMode(@NonNull String);
     method @Nullable public static String opToPermission(@NonNull String);
-    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(String, int, String, int);
-    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setUidMode(String, int, int);
+    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(@NonNull String, int, @Nullable String, int);
+    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setUidMode(@NonNull String, int, int);
     field public static final String OPSTR_ACCEPT_HANDOVER = "android:accept_handover";
     field public static final String OPSTR_ACCESS_ACCESSIBILITY = "android:access_accessibility";
+    field public static final String OPSTR_ACCESS_CALL_AUDIO = "android:access_call_audio";
     field public static final String OPSTR_ACCESS_NOTIFICATIONS = "android:access_notifications";
     field public static final String OPSTR_ACTIVATE_VPN = "android:activate_vpn";
     field public static final String OPSTR_ASSIST_SCREENSHOT = "android:assist_screenshot";
@@ -391,6 +395,7 @@
     field public static final String OPSTR_INSTANT_APP_START_FOREGROUND = "android:instant_app_start_foreground";
     field public static final String OPSTR_INTERACT_ACROSS_PROFILES = "android:interact_across_profiles";
     field public static final String OPSTR_LEGACY_STORAGE = "android:legacy_storage";
+    field public static final String OPSTR_LOADER_USAGE_STATS = "android:loader_usage_stats";
     field public static final String OPSTR_MANAGE_EXTERNAL_STORAGE = "android:manage_external_storage";
     field public static final String OPSTR_MANAGE_IPSEC_TUNNELS = "android:manage_ipsec_tunnels";
     field public static final String OPSTR_MUTE_MICROPHONE = "android:mute_microphone";
@@ -585,10 +590,6 @@
     field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.PackageOps> CREATOR;
   }
 
-  public final class ApplicationExitInfo implements android.os.Parcelable {
-    method @NonNull public android.os.UserHandle getUserHandle();
-  }
-
   public class BroadcastOptions {
     method public static android.app.BroadcastOptions makeBasic();
     method @RequiresPermission("android.permission.START_ACTIVITIES_FROM_BACKGROUND") public void setBackgroundActivityStartsAllowed(boolean);
@@ -681,6 +682,19 @@
     method public void setNotificationAssistantAccessGranted(@Nullable android.content.ComponentName, boolean);
   }
 
+  public final class RuntimeAppOpAccessMessage implements android.os.Parcelable {
+    ctor public RuntimeAppOpAccessMessage(@IntRange(from=0L) int, @IntRange(from=0L) int, @NonNull String, @Nullable String, @NonNull String, int);
+    method public int describeContents();
+    method @Nullable public String getFeatureId();
+    method @NonNull public String getMessage();
+    method @NonNull public String getOp();
+    method @NonNull public String getPackageName();
+    method public int getSamplingStrategy();
+    method @IntRange(from=0L) public int getUid();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.RuntimeAppOpAccessMessage> CREATOR;
+  }
+
   public class SearchManager implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
     method public void launchAssist(@Nullable android.os.Bundle);
   }
@@ -874,7 +888,7 @@
     field public static final String ACTION_PROVISION_FINALIZATION = "android.app.action.PROVISION_FINALIZATION";
     field public static final String ACTION_PROVISION_FINANCED_DEVICE = "android.app.action.PROVISION_FINANCED_DEVICE";
     field public static final String ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE = "android.app.action.PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE";
-    field public static final String ACTION_RESET_PROTECTION_POLICY_CHANGED = "android.app.action.RESET_PROTECTION_POLICY_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION) public static final String ACTION_RESET_PROTECTION_POLICY_CHANGED = "android.app.action.RESET_PROTECTION_POLICY_CHANGED";
     field public static final String ACTION_SET_PROFILE_OWNER = "android.app.action.SET_PROFILE_OWNER";
     field public static final String ACTION_STATE_USER_SETUP_COMPLETE = "android.app.action.STATE_USER_SETUP_COMPLETE";
     field public static final String EXTRA_PROFILE_OWNER_NAME = "android.app.extra.PROFILE_OWNER_NAME";
@@ -1475,10 +1489,10 @@
 
   public final class BluetoothA2dpSink implements android.bluetooth.BluetoothProfile {
     method public void finalize();
-    method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public int getConnectionPolicy(@Nullable android.bluetooth.BluetoothDevice);
-    method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public boolean isAudioPlaying(@Nullable android.bluetooth.BluetoothDevice);
-    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean setConnectionPolicy(@Nullable android.bluetooth.BluetoothDevice, int);
-    field @RequiresPermission(android.Manifest.permission.BLUETOOTH) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.a2dp-sink.profile.action.CONNECTION_STATE_CHANGED";
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@Nullable android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean isAudioPlaying(@Nullable android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setConnectionPolicy(@Nullable android.bluetooth.BluetoothDevice, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.a2dp-sink.profile.action.CONNECTION_STATE_CHANGED";
   }
 
   public final class BluetoothAdapter {
@@ -1651,9 +1665,9 @@
   }
 
   public class BluetoothPbap implements android.bluetooth.BluetoothProfile {
-    method public int getConnectionState(@Nullable android.bluetooth.BluetoothDevice);
-    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
-    field public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.pbap.profile.action.CONNECTION_STATE_CHANGED";
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionState(@Nullable android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.pbap.profile.action.CONNECTION_STATE_CHANGED";
   }
 
   public interface BluetoothProfile {
@@ -1810,7 +1824,7 @@
     field public static final String TELEPHONY_REGISTRY_SERVICE = "telephony_registry";
     field public static final String TETHERING_SERVICE = "tethering";
     field public static final String VR_SERVICE = "vrmanager";
-    field public static final String WIFI_COND_SERVICE = "wificond";
+    field public static final String WIFI_NL80211_SERVICE = "wifinl80211";
     field @Deprecated public static final String WIFI_RTT_SERVICE = "rttmanager";
     field public static final String WIFI_SCANNING_SERVICE = "wifiscanner";
   }
@@ -1926,18 +1940,27 @@
   public abstract class IntegrityFormula {
     method @NonNull public static android.content.integrity.IntegrityFormula all(@NonNull android.content.integrity.IntegrityFormula...);
     method @NonNull public static android.content.integrity.IntegrityFormula any(@NonNull android.content.integrity.IntegrityFormula...);
-    method @NonNull public android.content.integrity.IntegrityFormula equalTo(@NonNull String);
-    method @NonNull public android.content.integrity.IntegrityFormula equalTo(boolean);
-    method @NonNull public android.content.integrity.IntegrityFormula equalTo(long);
-    method @NonNull public android.content.integrity.IntegrityFormula greaterThan(long);
-    method @NonNull public android.content.integrity.IntegrityFormula greaterThanOrEquals(long);
     method @NonNull public static android.content.integrity.IntegrityFormula not(@NonNull android.content.integrity.IntegrityFormula);
-    field @NonNull public static final android.content.integrity.IntegrityFormula APP_CERTIFICATE;
-    field @NonNull public static final android.content.integrity.IntegrityFormula INSTALLER_CERTIFICATE;
-    field @NonNull public static final android.content.integrity.IntegrityFormula INSTALLER_NAME;
-    field @NonNull public static final android.content.integrity.IntegrityFormula PACKAGE_NAME;
-    field @NonNull public static final android.content.integrity.IntegrityFormula PRE_INSTALLED;
-    field @NonNull public static final android.content.integrity.IntegrityFormula VERSION_CODE;
+  }
+
+  public static final class IntegrityFormula.Application {
+    method @NonNull public static android.content.integrity.IntegrityFormula certificatesContain(@NonNull String);
+    method @NonNull public static android.content.integrity.IntegrityFormula isPreInstalled();
+    method @NonNull public static android.content.integrity.IntegrityFormula packageNameEquals(@NonNull String);
+    method @NonNull public static android.content.integrity.IntegrityFormula versionCodeEquals(@NonNull long);
+    method @NonNull public static android.content.integrity.IntegrityFormula versionCodeGreaterThan(@NonNull long);
+    method @NonNull public static android.content.integrity.IntegrityFormula versionCodeGreaterThanOrEqualTo(@NonNull long);
+  }
+
+  public static final class IntegrityFormula.Installer {
+    method @NonNull public static android.content.integrity.IntegrityFormula certificatesContain(@NonNull String);
+    method @NonNull public static android.content.integrity.IntegrityFormula notAllowedByManifest();
+    method @NonNull public static android.content.integrity.IntegrityFormula packageNameEquals(@NonNull String);
+  }
+
+  public static final class IntegrityFormula.SourceStamp {
+    method @NonNull public static android.content.integrity.IntegrityFormula notTrusted();
+    method @NonNull public static android.content.integrity.IntegrityFormula stampCertificateHashEquals(@NonNull String);
   }
 
   public final class Rule implements android.os.Parcelable {
@@ -2011,18 +2034,15 @@
   }
 
   public final class InstallationFile implements android.os.Parcelable {
-    ctor public InstallationFile(@NonNull String, long, @Nullable byte[]);
+    ctor public InstallationFile(int, @NonNull String, long, @Nullable byte[], @Nullable byte[]);
     method public int describeContents();
-    method public int getFileType();
+    method public long getLengthBytes();
+    method public int getLocation();
     method @Nullable public byte[] getMetadata();
     method @NonNull public String getName();
-    method public long getSize();
+    method @Nullable public byte[] getSignature();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstallationFile> CREATOR;
-    field public static final int FILE_TYPE_APK = 0; // 0x0
-    field public static final int FILE_TYPE_LIB = 1; // 0x1
-    field public static final int FILE_TYPE_OBB = 2; // 0x2
-    field public static final int FILE_TYPE_UNKNOWN = -1; // 0xffffffff
   }
 
   public final class InstantAppInfo implements android.os.Parcelable {
@@ -2212,12 +2232,14 @@
     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";
     field public static final String FEATURE_BROADCAST_RADIO = "android.hardware.broadcastradio";
+    field public static final String FEATURE_INCREMENTAL_DELIVERY = "android.software.incremental_delivery";
     field public static final String FEATURE_REBOOT_ESCROW = "android.hardware.reboot_escrow";
     field public static final String FEATURE_TELEPHONY_CARRIERLOCK = "android.hardware.telephony.carrierlock";
     field public static final int FLAGS_PERMISSION_RESERVED_PERMISSIONCONTROLLER = -268435456; // 0xf0000000
     field public static final int FLAG_PERMISSION_APPLY_RESTRICTION = 16384; // 0x4000
-    field public static final int FLAG_PERMISSION_DONT_AUTO_REVOKE = 131072; // 0x20000
-    field public static final int FLAG_PERMISSION_DONT_AUTO_REVOKE_USER_SET = 262144; // 0x40000
+    field public static final int FLAG_PERMISSION_AUTO_REVOKED = 1048576; // 0x100000
+    field public static final int FLAG_PERMISSION_AUTO_REVOKE_IF_UNUSED = 131072; // 0x20000
+    field public static final int FLAG_PERMISSION_AUTO_REVOKE_USER_SET = 262144; // 0x40000
     field public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT = 32; // 0x20
     field public static final int FLAG_PERMISSION_GRANTED_BY_ROLE = 32768; // 0x8000
     field public static final int FLAG_PERMISSION_ONE_TIME = 65536; // 0x10000
@@ -2301,7 +2323,7 @@
     method public void onPermissionsChanged(int);
   }
 
-  @IntDef(prefix={"FLAG_PERMISSION_"}, value={android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET, android.content.pm.PackageManager.FLAG_PERMISSION_USER_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_POLICY_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE, android.content.pm.PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT, android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED, android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION, android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_ROLE, android.content.pm.PackageManager.FLAG_PERMISSION_REVOKED_COMPAT, android.content.pm.PackageManager.FLAG_PERMISSION_ONE_TIME, android.content.pm.PackageManager.FLAG_PERMISSION_DONT_AUTO_REVOKE}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PackageManager.PermissionFlags {
+  @IntDef(prefix={"FLAG_PERMISSION_"}, value={android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET, android.content.pm.PackageManager.FLAG_PERMISSION_USER_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_POLICY_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE, android.content.pm.PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT, android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED, android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION, android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_ROLE, android.content.pm.PackageManager.FLAG_PERMISSION_REVOKED_COMPAT, android.content.pm.PackageManager.FLAG_PERMISSION_ONE_TIME, android.content.pm.PackageManager.FLAG_PERMISSION_AUTO_REVOKE_IF_UNUSED, android.content.pm.PackageManager.FLAG_PERMISSION_AUTO_REVOKE_USER_SET, android.content.pm.PackageManager.FLAG_PERMISSION_AUTO_REVOKED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PackageManager.PermissionFlags {
   }
 
   public class PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
@@ -3695,17 +3717,17 @@
   }
 
   public static final class SoundTrigger.ModelParamRange implements android.os.Parcelable {
+    method public int getEnd();
+    method public int getStart();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.ModelParamRange> CREATOR;
-    field public final int end;
-    field public final int start;
   }
 
   public static final class SoundTrigger.ModuleProperties implements android.os.Parcelable {
     method public int describeContents();
     method public void writeToParcel(android.os.Parcel, int);
-    field public static final int CAPABILITY_ECHO_CANCELLATION = 1; // 0x1
-    field public static final int CAPABILITY_NOISE_SUPPRESSION = 2; // 0x2
+    field public static final int AUDIO_CAPABILITY_ECHO_CANCELLATION = 1; // 0x1
+    field public static final int AUDIO_CAPABILITY_NOISE_SUPPRESSION = 2; // 0x2
     field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.ModuleProperties> CREATOR;
     field public final int audioCapabilities;
     field @NonNull public final String description;
@@ -3758,8 +3780,14 @@
     method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public void setCurrentFunctions(long);
     field @RequiresPermission(android.Manifest.permission.MANAGE_USB) public static final String ACTION_USB_PORT_CHANGED = "android.hardware.usb.action.USB_PORT_CHANGED";
     field public static final String ACTION_USB_STATE = "android.hardware.usb.action.USB_STATE";
+    field public static final long FUNCTION_ACCESSORY = 2L; // 0x2L
+    field public static final long FUNCTION_ADB = 1L; // 0x1L
+    field public static final long FUNCTION_AUDIO_SOURCE = 64L; // 0x40L
+    field public static final long FUNCTION_MIDI = 8L; // 0x8L
+    field public static final long FUNCTION_MTP = 4L; // 0x4L
     field public static final long FUNCTION_NCM = 1024L; // 0x400L
     field public static final long FUNCTION_NONE = 0L; // 0x0L
+    field public static final long FUNCTION_PTP = 16L; // 0x10L
     field public static final long FUNCTION_RNDIS = 32L; // 0x20L
     field public static final String USB_CONFIGURED = "configured";
     field public static final String USB_CONNECTED = "connected";
@@ -3865,6 +3893,20 @@
     method @NonNull public android.location.GnssReflectingPlane.Builder setLongitudeDegrees(@FloatRange(from=-180.0F, to=180.0f) double);
   }
 
+  public final class GnssRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isFullTracking();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssRequest> CREATOR;
+  }
+
+  public static final class GnssRequest.Builder {
+    ctor public GnssRequest.Builder();
+    ctor public GnssRequest.Builder(@NonNull android.location.GnssRequest);
+    method @NonNull public android.location.GnssRequest build();
+    method @NonNull public android.location.GnssRequest.Builder setFullTracking(boolean);
+  }
+
   public final class GnssSingleSatCorrection implements android.os.Parcelable {
     method public int describeContents();
     method @FloatRange(from=0.0f, fromInclusive=false) public float getCarrierFrequencyHz();
@@ -3894,236 +3936,236 @@
     method @NonNull public android.location.GnssSingleSatCorrection.Builder setSatelliteId(@IntRange(from=0) int);
   }
 
-  public class GpsClock implements android.os.Parcelable {
-    method public int describeContents();
-    method public double getBiasInNs();
-    method public double getBiasUncertaintyInNs();
-    method public double getDriftInNsPerSec();
-    method public double getDriftUncertaintyInNsPerSec();
-    method public long getFullBiasInNs();
-    method public short getLeapSecond();
-    method public long getTimeInNs();
-    method public double getTimeUncertaintyInNs();
-    method public byte getType();
-    method public boolean hasBiasInNs();
-    method public boolean hasBiasUncertaintyInNs();
-    method public boolean hasDriftInNsPerSec();
-    method public boolean hasDriftUncertaintyInNsPerSec();
-    method public boolean hasFullBiasInNs();
-    method public boolean hasLeapSecond();
-    method public boolean hasTimeUncertaintyInNs();
-    method public void reset();
-    method public void resetBiasInNs();
-    method public void resetBiasUncertaintyInNs();
-    method public void resetDriftInNsPerSec();
-    method public void resetDriftUncertaintyInNsPerSec();
-    method public void resetFullBiasInNs();
-    method public void resetLeapSecond();
-    method public void resetTimeUncertaintyInNs();
-    method public void set(android.location.GpsClock);
-    method public void setBiasInNs(double);
-    method public void setBiasUncertaintyInNs(double);
-    method public void setDriftInNsPerSec(double);
-    method public void setDriftUncertaintyInNsPerSec(double);
-    method public void setFullBiasInNs(long);
-    method public void setLeapSecond(short);
-    method public void setTimeInNs(long);
-    method public void setTimeUncertaintyInNs(double);
-    method public void setType(byte);
-    method public void writeToParcel(android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.location.GpsClock> CREATOR;
-    field public static final byte TYPE_GPS_TIME = 2; // 0x2
-    field public static final byte TYPE_LOCAL_HW_TIME = 1; // 0x1
-    field public static final byte TYPE_UNKNOWN = 0; // 0x0
+  @Deprecated public class GpsClock implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public double getBiasInNs();
+    method @Deprecated public double getBiasUncertaintyInNs();
+    method @Deprecated public double getDriftInNsPerSec();
+    method @Deprecated public double getDriftUncertaintyInNsPerSec();
+    method @Deprecated public long getFullBiasInNs();
+    method @Deprecated public short getLeapSecond();
+    method @Deprecated public long getTimeInNs();
+    method @Deprecated public double getTimeUncertaintyInNs();
+    method @Deprecated public byte getType();
+    method @Deprecated public boolean hasBiasInNs();
+    method @Deprecated public boolean hasBiasUncertaintyInNs();
+    method @Deprecated public boolean hasDriftInNsPerSec();
+    method @Deprecated public boolean hasDriftUncertaintyInNsPerSec();
+    method @Deprecated public boolean hasFullBiasInNs();
+    method @Deprecated public boolean hasLeapSecond();
+    method @Deprecated public boolean hasTimeUncertaintyInNs();
+    method @Deprecated public void reset();
+    method @Deprecated public void resetBiasInNs();
+    method @Deprecated public void resetBiasUncertaintyInNs();
+    method @Deprecated public void resetDriftInNsPerSec();
+    method @Deprecated public void resetDriftUncertaintyInNsPerSec();
+    method @Deprecated public void resetFullBiasInNs();
+    method @Deprecated public void resetLeapSecond();
+    method @Deprecated public void resetTimeUncertaintyInNs();
+    method @Deprecated public void set(android.location.GpsClock);
+    method @Deprecated public void setBiasInNs(double);
+    method @Deprecated public void setBiasUncertaintyInNs(double);
+    method @Deprecated public void setDriftInNsPerSec(double);
+    method @Deprecated public void setDriftUncertaintyInNsPerSec(double);
+    method @Deprecated public void setFullBiasInNs(long);
+    method @Deprecated public void setLeapSecond(short);
+    method @Deprecated public void setTimeInNs(long);
+    method @Deprecated public void setTimeUncertaintyInNs(double);
+    method @Deprecated public void setType(byte);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsClock> CREATOR;
+    field @Deprecated public static final byte TYPE_GPS_TIME = 2; // 0x2
+    field @Deprecated public static final byte TYPE_LOCAL_HW_TIME = 1; // 0x1
+    field @Deprecated public static final byte TYPE_UNKNOWN = 0; // 0x0
   }
 
-  public class GpsMeasurement implements android.os.Parcelable {
-    method public int describeContents();
-    method public double getAccumulatedDeltaRangeInMeters();
-    method public short getAccumulatedDeltaRangeState();
-    method public double getAccumulatedDeltaRangeUncertaintyInMeters();
-    method public double getAzimuthInDeg();
-    method public double getAzimuthUncertaintyInDeg();
-    method public int getBitNumber();
-    method public long getCarrierCycles();
-    method public float getCarrierFrequencyInHz();
-    method public double getCarrierPhase();
-    method public double getCarrierPhaseUncertainty();
-    method public double getCn0InDbHz();
-    method public double getCodePhaseInChips();
-    method public double getCodePhaseUncertaintyInChips();
-    method public double getDopplerShiftInHz();
-    method public double getDopplerShiftUncertaintyInHz();
-    method public double getElevationInDeg();
-    method public double getElevationUncertaintyInDeg();
-    method public byte getLossOfLock();
-    method public byte getMultipathIndicator();
-    method public byte getPrn();
-    method public double getPseudorangeInMeters();
-    method public double getPseudorangeRateInMetersPerSec();
-    method public double getPseudorangeRateUncertaintyInMetersPerSec();
-    method public double getPseudorangeUncertaintyInMeters();
-    method public long getReceivedGpsTowInNs();
-    method public long getReceivedGpsTowUncertaintyInNs();
-    method public double getSnrInDb();
-    method public short getState();
-    method public short getTimeFromLastBitInMs();
-    method public double getTimeOffsetInNs();
-    method public boolean hasAzimuthInDeg();
-    method public boolean hasAzimuthUncertaintyInDeg();
-    method public boolean hasBitNumber();
-    method public boolean hasCarrierCycles();
-    method public boolean hasCarrierFrequencyInHz();
-    method public boolean hasCarrierPhase();
-    method public boolean hasCarrierPhaseUncertainty();
-    method public boolean hasCodePhaseInChips();
-    method public boolean hasCodePhaseUncertaintyInChips();
-    method public boolean hasDopplerShiftInHz();
-    method public boolean hasDopplerShiftUncertaintyInHz();
-    method public boolean hasElevationInDeg();
-    method public boolean hasElevationUncertaintyInDeg();
-    method public boolean hasPseudorangeInMeters();
-    method public boolean hasPseudorangeUncertaintyInMeters();
-    method public boolean hasSnrInDb();
-    method public boolean hasTimeFromLastBitInMs();
-    method public boolean isPseudorangeRateCorrected();
-    method public boolean isUsedInFix();
-    method public void reset();
-    method public void resetAzimuthInDeg();
-    method public void resetAzimuthUncertaintyInDeg();
-    method public void resetBitNumber();
-    method public void resetCarrierCycles();
-    method public void resetCarrierFrequencyInHz();
-    method public void resetCarrierPhase();
-    method public void resetCarrierPhaseUncertainty();
-    method public void resetCodePhaseInChips();
-    method public void resetCodePhaseUncertaintyInChips();
-    method public void resetDopplerShiftInHz();
-    method public void resetDopplerShiftUncertaintyInHz();
-    method public void resetElevationInDeg();
-    method public void resetElevationUncertaintyInDeg();
-    method public void resetPseudorangeInMeters();
-    method public void resetPseudorangeUncertaintyInMeters();
-    method public void resetSnrInDb();
-    method public void resetTimeFromLastBitInMs();
-    method public void set(android.location.GpsMeasurement);
-    method public void setAccumulatedDeltaRangeInMeters(double);
-    method public void setAccumulatedDeltaRangeState(short);
-    method public void setAccumulatedDeltaRangeUncertaintyInMeters(double);
-    method public void setAzimuthInDeg(double);
-    method public void setAzimuthUncertaintyInDeg(double);
-    method public void setBitNumber(int);
-    method public void setCarrierCycles(long);
-    method public void setCarrierFrequencyInHz(float);
-    method public void setCarrierPhase(double);
-    method public void setCarrierPhaseUncertainty(double);
-    method public void setCn0InDbHz(double);
-    method public void setCodePhaseInChips(double);
-    method public void setCodePhaseUncertaintyInChips(double);
-    method public void setDopplerShiftInHz(double);
-    method public void setDopplerShiftUncertaintyInHz(double);
-    method public void setElevationInDeg(double);
-    method public void setElevationUncertaintyInDeg(double);
-    method public void setLossOfLock(byte);
-    method public void setMultipathIndicator(byte);
-    method public void setPrn(byte);
-    method public void setPseudorangeInMeters(double);
-    method public void setPseudorangeRateInMetersPerSec(double);
-    method public void setPseudorangeRateUncertaintyInMetersPerSec(double);
-    method public void setPseudorangeUncertaintyInMeters(double);
-    method public void setReceivedGpsTowInNs(long);
-    method public void setReceivedGpsTowUncertaintyInNs(long);
-    method public void setSnrInDb(double);
-    method public void setState(short);
-    method public void setTimeFromLastBitInMs(short);
-    method public void setTimeOffsetInNs(double);
-    method public void setUsedInFix(boolean);
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final short ADR_STATE_CYCLE_SLIP = 4; // 0x4
-    field public static final short ADR_STATE_RESET = 2; // 0x2
-    field public static final short ADR_STATE_UNKNOWN = 0; // 0x0
-    field public static final short ADR_STATE_VALID = 1; // 0x1
-    field @NonNull public static final android.os.Parcelable.Creator<android.location.GpsMeasurement> CREATOR;
-    field public static final byte LOSS_OF_LOCK_CYCLE_SLIP = 2; // 0x2
-    field public static final byte LOSS_OF_LOCK_OK = 1; // 0x1
-    field public static final byte LOSS_OF_LOCK_UNKNOWN = 0; // 0x0
-    field public static final byte MULTIPATH_INDICATOR_DETECTED = 1; // 0x1
-    field public static final byte MULTIPATH_INDICATOR_NOT_USED = 2; // 0x2
-    field public static final byte MULTIPATH_INDICATOR_UNKNOWN = 0; // 0x0
-    field public static final short STATE_BIT_SYNC = 2; // 0x2
-    field public static final short STATE_CODE_LOCK = 1; // 0x1
-    field public static final short STATE_MSEC_AMBIGUOUS = 16; // 0x10
-    field public static final short STATE_SUBFRAME_SYNC = 4; // 0x4
-    field public static final short STATE_TOW_DECODED = 8; // 0x8
-    field public static final short STATE_UNKNOWN = 0; // 0x0
+  @Deprecated public class GpsMeasurement implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public double getAccumulatedDeltaRangeInMeters();
+    method @Deprecated public short getAccumulatedDeltaRangeState();
+    method @Deprecated public double getAccumulatedDeltaRangeUncertaintyInMeters();
+    method @Deprecated public double getAzimuthInDeg();
+    method @Deprecated public double getAzimuthUncertaintyInDeg();
+    method @Deprecated public int getBitNumber();
+    method @Deprecated public long getCarrierCycles();
+    method @Deprecated public float getCarrierFrequencyInHz();
+    method @Deprecated public double getCarrierPhase();
+    method @Deprecated public double getCarrierPhaseUncertainty();
+    method @Deprecated public double getCn0InDbHz();
+    method @Deprecated public double getCodePhaseInChips();
+    method @Deprecated public double getCodePhaseUncertaintyInChips();
+    method @Deprecated public double getDopplerShiftInHz();
+    method @Deprecated public double getDopplerShiftUncertaintyInHz();
+    method @Deprecated public double getElevationInDeg();
+    method @Deprecated public double getElevationUncertaintyInDeg();
+    method @Deprecated public byte getLossOfLock();
+    method @Deprecated public byte getMultipathIndicator();
+    method @Deprecated public byte getPrn();
+    method @Deprecated public double getPseudorangeInMeters();
+    method @Deprecated public double getPseudorangeRateInMetersPerSec();
+    method @Deprecated public double getPseudorangeRateUncertaintyInMetersPerSec();
+    method @Deprecated public double getPseudorangeUncertaintyInMeters();
+    method @Deprecated public long getReceivedGpsTowInNs();
+    method @Deprecated public long getReceivedGpsTowUncertaintyInNs();
+    method @Deprecated public double getSnrInDb();
+    method @Deprecated public short getState();
+    method @Deprecated public short getTimeFromLastBitInMs();
+    method @Deprecated public double getTimeOffsetInNs();
+    method @Deprecated public boolean hasAzimuthInDeg();
+    method @Deprecated public boolean hasAzimuthUncertaintyInDeg();
+    method @Deprecated public boolean hasBitNumber();
+    method @Deprecated public boolean hasCarrierCycles();
+    method @Deprecated public boolean hasCarrierFrequencyInHz();
+    method @Deprecated public boolean hasCarrierPhase();
+    method @Deprecated public boolean hasCarrierPhaseUncertainty();
+    method @Deprecated public boolean hasCodePhaseInChips();
+    method @Deprecated public boolean hasCodePhaseUncertaintyInChips();
+    method @Deprecated public boolean hasDopplerShiftInHz();
+    method @Deprecated public boolean hasDopplerShiftUncertaintyInHz();
+    method @Deprecated public boolean hasElevationInDeg();
+    method @Deprecated public boolean hasElevationUncertaintyInDeg();
+    method @Deprecated public boolean hasPseudorangeInMeters();
+    method @Deprecated public boolean hasPseudorangeUncertaintyInMeters();
+    method @Deprecated public boolean hasSnrInDb();
+    method @Deprecated public boolean hasTimeFromLastBitInMs();
+    method @Deprecated public boolean isPseudorangeRateCorrected();
+    method @Deprecated public boolean isUsedInFix();
+    method @Deprecated public void reset();
+    method @Deprecated public void resetAzimuthInDeg();
+    method @Deprecated public void resetAzimuthUncertaintyInDeg();
+    method @Deprecated public void resetBitNumber();
+    method @Deprecated public void resetCarrierCycles();
+    method @Deprecated public void resetCarrierFrequencyInHz();
+    method @Deprecated public void resetCarrierPhase();
+    method @Deprecated public void resetCarrierPhaseUncertainty();
+    method @Deprecated public void resetCodePhaseInChips();
+    method @Deprecated public void resetCodePhaseUncertaintyInChips();
+    method @Deprecated public void resetDopplerShiftInHz();
+    method @Deprecated public void resetDopplerShiftUncertaintyInHz();
+    method @Deprecated public void resetElevationInDeg();
+    method @Deprecated public void resetElevationUncertaintyInDeg();
+    method @Deprecated public void resetPseudorangeInMeters();
+    method @Deprecated public void resetPseudorangeUncertaintyInMeters();
+    method @Deprecated public void resetSnrInDb();
+    method @Deprecated public void resetTimeFromLastBitInMs();
+    method @Deprecated public void set(android.location.GpsMeasurement);
+    method @Deprecated public void setAccumulatedDeltaRangeInMeters(double);
+    method @Deprecated public void setAccumulatedDeltaRangeState(short);
+    method @Deprecated public void setAccumulatedDeltaRangeUncertaintyInMeters(double);
+    method @Deprecated public void setAzimuthInDeg(double);
+    method @Deprecated public void setAzimuthUncertaintyInDeg(double);
+    method @Deprecated public void setBitNumber(int);
+    method @Deprecated public void setCarrierCycles(long);
+    method @Deprecated public void setCarrierFrequencyInHz(float);
+    method @Deprecated public void setCarrierPhase(double);
+    method @Deprecated public void setCarrierPhaseUncertainty(double);
+    method @Deprecated public void setCn0InDbHz(double);
+    method @Deprecated public void setCodePhaseInChips(double);
+    method @Deprecated public void setCodePhaseUncertaintyInChips(double);
+    method @Deprecated public void setDopplerShiftInHz(double);
+    method @Deprecated public void setDopplerShiftUncertaintyInHz(double);
+    method @Deprecated public void setElevationInDeg(double);
+    method @Deprecated public void setElevationUncertaintyInDeg(double);
+    method @Deprecated public void setLossOfLock(byte);
+    method @Deprecated public void setMultipathIndicator(byte);
+    method @Deprecated public void setPrn(byte);
+    method @Deprecated public void setPseudorangeInMeters(double);
+    method @Deprecated public void setPseudorangeRateInMetersPerSec(double);
+    method @Deprecated public void setPseudorangeRateUncertaintyInMetersPerSec(double);
+    method @Deprecated public void setPseudorangeUncertaintyInMeters(double);
+    method @Deprecated public void setReceivedGpsTowInNs(long);
+    method @Deprecated public void setReceivedGpsTowUncertaintyInNs(long);
+    method @Deprecated public void setSnrInDb(double);
+    method @Deprecated public void setState(short);
+    method @Deprecated public void setTimeFromLastBitInMs(short);
+    method @Deprecated public void setTimeOffsetInNs(double);
+    method @Deprecated public void setUsedInFix(boolean);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final short ADR_STATE_CYCLE_SLIP = 4; // 0x4
+    field @Deprecated public static final short ADR_STATE_RESET = 2; // 0x2
+    field @Deprecated public static final short ADR_STATE_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final short ADR_STATE_VALID = 1; // 0x1
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsMeasurement> CREATOR;
+    field @Deprecated public static final byte LOSS_OF_LOCK_CYCLE_SLIP = 2; // 0x2
+    field @Deprecated public static final byte LOSS_OF_LOCK_OK = 1; // 0x1
+    field @Deprecated public static final byte LOSS_OF_LOCK_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final byte MULTIPATH_INDICATOR_DETECTED = 1; // 0x1
+    field @Deprecated public static final byte MULTIPATH_INDICATOR_NOT_USED = 2; // 0x2
+    field @Deprecated public static final byte MULTIPATH_INDICATOR_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final short STATE_BIT_SYNC = 2; // 0x2
+    field @Deprecated public static final short STATE_CODE_LOCK = 1; // 0x1
+    field @Deprecated public static final short STATE_MSEC_AMBIGUOUS = 16; // 0x10
+    field @Deprecated public static final short STATE_SUBFRAME_SYNC = 4; // 0x4
+    field @Deprecated public static final short STATE_TOW_DECODED = 8; // 0x8
+    field @Deprecated public static final short STATE_UNKNOWN = 0; // 0x0
   }
 
-  public class GpsMeasurementsEvent implements android.os.Parcelable {
-    ctor public GpsMeasurementsEvent(android.location.GpsClock, android.location.GpsMeasurement[]);
-    method public int describeContents();
-    method @NonNull public android.location.GpsClock getClock();
-    method @NonNull public java.util.Collection<android.location.GpsMeasurement> getMeasurements();
-    method public void writeToParcel(android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.location.GpsMeasurementsEvent> CREATOR;
-    field public static final int STATUS_GPS_LOCATION_DISABLED = 2; // 0x2
-    field public static final int STATUS_NOT_SUPPORTED = 0; // 0x0
-    field public static final int STATUS_READY = 1; // 0x1
+  @Deprecated public class GpsMeasurementsEvent implements android.os.Parcelable {
+    ctor @Deprecated public GpsMeasurementsEvent(android.location.GpsClock, android.location.GpsMeasurement[]);
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public android.location.GpsClock getClock();
+    method @Deprecated @NonNull public java.util.Collection<android.location.GpsMeasurement> getMeasurements();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsMeasurementsEvent> CREATOR;
+    field @Deprecated public static final int STATUS_GPS_LOCATION_DISABLED = 2; // 0x2
+    field @Deprecated public static final int STATUS_NOT_SUPPORTED = 0; // 0x0
+    field @Deprecated public static final int STATUS_READY = 1; // 0x1
   }
 
-  public static interface GpsMeasurementsEvent.Listener {
-    method public void onGpsMeasurementsReceived(android.location.GpsMeasurementsEvent);
-    method public void onStatusChanged(int);
+  @Deprecated public static interface GpsMeasurementsEvent.Listener {
+    method @Deprecated public void onGpsMeasurementsReceived(android.location.GpsMeasurementsEvent);
+    method @Deprecated public void onStatusChanged(int);
   }
 
-  public class GpsNavigationMessage implements android.os.Parcelable {
-    method public int describeContents();
-    method @NonNull public byte[] getData();
-    method public short getMessageId();
-    method public byte getPrn();
-    method public short getStatus();
-    method public short getSubmessageId();
-    method public byte getType();
-    method public void reset();
-    method public void set(android.location.GpsNavigationMessage);
-    method public void setData(byte[]);
-    method public void setMessageId(short);
-    method public void setPrn(byte);
-    method public void setStatus(short);
-    method public void setSubmessageId(short);
-    method public void setType(byte);
-    method public void writeToParcel(android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.location.GpsNavigationMessage> CREATOR;
-    field public static final short STATUS_PARITY_PASSED = 1; // 0x1
-    field public static final short STATUS_PARITY_REBUILT = 2; // 0x2
-    field public static final short STATUS_UNKNOWN = 0; // 0x0
-    field public static final byte TYPE_CNAV2 = 4; // 0x4
-    field public static final byte TYPE_L1CA = 1; // 0x1
-    field public static final byte TYPE_L2CNAV = 2; // 0x2
-    field public static final byte TYPE_L5CNAV = 3; // 0x3
-    field public static final byte TYPE_UNKNOWN = 0; // 0x0
+  @Deprecated public class GpsNavigationMessage implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public byte[] getData();
+    method @Deprecated public short getMessageId();
+    method @Deprecated public byte getPrn();
+    method @Deprecated public short getStatus();
+    method @Deprecated public short getSubmessageId();
+    method @Deprecated public byte getType();
+    method @Deprecated public void reset();
+    method @Deprecated public void set(android.location.GpsNavigationMessage);
+    method @Deprecated public void setData(byte[]);
+    method @Deprecated public void setMessageId(short);
+    method @Deprecated public void setPrn(byte);
+    method @Deprecated public void setStatus(short);
+    method @Deprecated public void setSubmessageId(short);
+    method @Deprecated public void setType(byte);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsNavigationMessage> CREATOR;
+    field @Deprecated public static final short STATUS_PARITY_PASSED = 1; // 0x1
+    field @Deprecated public static final short STATUS_PARITY_REBUILT = 2; // 0x2
+    field @Deprecated public static final short STATUS_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final byte TYPE_CNAV2 = 4; // 0x4
+    field @Deprecated public static final byte TYPE_L1CA = 1; // 0x1
+    field @Deprecated public static final byte TYPE_L2CNAV = 2; // 0x2
+    field @Deprecated public static final byte TYPE_L5CNAV = 3; // 0x3
+    field @Deprecated public static final byte TYPE_UNKNOWN = 0; // 0x0
   }
 
-  public class GpsNavigationMessageEvent implements android.os.Parcelable {
-    ctor public GpsNavigationMessageEvent(android.location.GpsNavigationMessage);
-    method public int describeContents();
-    method @NonNull public android.location.GpsNavigationMessage getNavigationMessage();
-    method public void writeToParcel(android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.location.GpsNavigationMessageEvent> CREATOR;
-    field public static int STATUS_GPS_LOCATION_DISABLED;
-    field public static int STATUS_NOT_SUPPORTED;
-    field public static int STATUS_READY;
+  @Deprecated public class GpsNavigationMessageEvent implements android.os.Parcelable {
+    ctor @Deprecated public GpsNavigationMessageEvent(android.location.GpsNavigationMessage);
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public android.location.GpsNavigationMessage getNavigationMessage();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsNavigationMessageEvent> CREATOR;
+    field @Deprecated public static int STATUS_GPS_LOCATION_DISABLED;
+    field @Deprecated public static int STATUS_NOT_SUPPORTED;
+    field @Deprecated public static int STATUS_READY;
   }
 
-  public static interface GpsNavigationMessageEvent.Listener {
-    method public void onGpsNavigationMessageReceived(android.location.GpsNavigationMessageEvent);
-    method public void onStatusChanged(int);
+  @Deprecated public static interface GpsNavigationMessageEvent.Listener {
+    method @Deprecated public void onGpsNavigationMessageReceived(android.location.GpsNavigationMessageEvent);
+    method @Deprecated public void onStatusChanged(int);
   }
 
   public class Location implements android.os.Parcelable {
     method public boolean isComplete();
     method public void makeComplete();
     method public void setIsFromMockProvider(boolean);
-    field public static final String EXTRA_NO_GPS_LOCATION = "noGPSLocation";
+    field @Deprecated public static final String EXTRA_NO_GPS_LOCATION = "noGPSLocation";
   }
 
   public class LocationManager {
@@ -4131,13 +4173,13 @@
     method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void getCurrentLocation(@NonNull android.location.LocationRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.location.Location>);
     method @Nullable public String getExtraLocationControllerPackage();
     method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public int getGnssBatchSize();
-    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public android.location.GnssCapabilities getGnssCapabilities();
     method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void injectGnssMeasurementCorrections(@NonNull android.location.GnssMeasurementCorrections);
     method public boolean isExtraLocationControllerPackageEnabled();
     method public boolean isLocationEnabledForUser(@NonNull android.os.UserHandle);
     method public boolean isProviderEnabledForUser(@NonNull String, @NonNull android.os.UserHandle);
     method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@NonNull String);
     method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean registerGnssBatchedLocationCallback(long, boolean, @NonNull android.location.BatchedLocationCallback, @Nullable android.os.Handler);
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.LOCATION_HARDWARE}) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.GnssMeasurementsEvent.Callback);
     method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
     method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.LocationListener);
     method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.app.PendingIntent);
@@ -4215,15 +4257,15 @@
     method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioAttributes.Builder setSystemUsage(int);
   }
 
-  public final class AudioDeviceAddress implements android.os.Parcelable {
-    ctor public AudioDeviceAddress(@NonNull android.media.AudioDeviceInfo);
-    ctor public AudioDeviceAddress(int, int, @NonNull String);
+  public final class AudioDeviceAttributes implements android.os.Parcelable {
+    ctor public AudioDeviceAttributes(@NonNull android.media.AudioDeviceInfo);
+    ctor public AudioDeviceAttributes(int, int, @NonNull String);
     method public int describeContents();
     method @NonNull public String getAddress();
     method public int getRole();
     method public int getType();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioDeviceAddress> CREATOR;
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioDeviceAttributes> CREATOR;
     field public static final int ROLE_INPUT = 1; // 0x1
     field public static final int ROLE_OUTPUT = 2; // 0x2
   }
@@ -4255,22 +4297,24 @@
 
   public class AudioManager {
     method @Deprecated public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void addOnPreferredDeviceForStrategyChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnPreferredDeviceForStrategyChangedListener) throws java.lang.SecurityException;
     method public void clearAudioServerStateCallback();
     method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int dispatchAudioFocusChange(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
     method @IntRange(from=0) public int getAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
     method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioProductStrategy> getAudioProductStrategies();
     method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioVolumeGroup> getAudioVolumeGroups();
-    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public java.util.List<android.media.AudioDeviceAddress> getDevicesForAttributes(@NonNull android.media.AudioAttributes);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public java.util.List<android.media.AudioDeviceAttributes> getDevicesForAttributes(@NonNull android.media.AudioAttributes);
     method @IntRange(from=0) public int getMaxAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
     method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMaxVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
     method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMinVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
-    method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioDeviceAddress getPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioDeviceAttributes getPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
     method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int[] getSupportedSystemUsages();
     method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
     method public boolean isAudioServerRunning();
     method public boolean isHdmiSystemAudioSupported();
     method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int registerAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy);
     method public void registerVolumeGroupCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.VolumeGroupCallback);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void removeOnPreferredDeviceForStrategyChangedListener(@NonNull android.media.AudioManager.OnPreferredDeviceForStrategyChangedListener);
     method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean removePreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
     method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.media.AudioAttributes, int, int) throws java.lang.IllegalArgumentException;
     method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.MODIFY_AUDIO_ROUTING}) public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.media.AudioAttributes, int, int, android.media.audiopolicy.AudioPolicy) throws java.lang.IllegalArgumentException;
@@ -4278,7 +4322,7 @@
     method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo, @IntRange(from=0) int);
     method public void setAudioServerStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioServerStateCallback);
     method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setFocusRequestResult(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
-    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy, @NonNull android.media.AudioDeviceAddress);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy, @NonNull android.media.AudioDeviceAttributes);
     method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setSupportedSystemUsages(@NonNull int[]);
     method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setVolumeIndexForAttributes(@NonNull android.media.AudioAttributes, int, int);
     method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void unregisterAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy);
@@ -4297,6 +4341,10 @@
     method public void onAudioServerUp();
   }
 
+  public static interface AudioManager.OnPreferredDeviceForStrategyChangedListener {
+    method public void onPreferredDeviceForStrategyChanged(@NonNull android.media.audiopolicy.AudioProductStrategy, @Nullable android.media.AudioDeviceAttributes);
+  }
+
   public abstract static class AudioManager.VolumeGroupCallback {
     ctor public AudioManager.VolumeGroupCallback();
     method public void onAudioVolumeGroupChanged(int, int);
@@ -4374,7 +4422,7 @@
 package android.media.audiofx {
 
   public class AudioEffect {
-    ctor @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public AudioEffect(@NonNull java.util.UUID, @NonNull android.media.AudioDeviceAddress);
+    ctor @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public AudioEffect(@NonNull java.util.UUID, @NonNull android.media.AudioDeviceAttributes);
   }
 
 }
@@ -4788,7 +4836,7 @@
     method public int getAudioFilterCount();
     method public int getDemuxCount();
     method public int getFilterCapabilities();
-    method @Nullable @Size(5) public int[] getLinkCapabilities();
+    method @NonNull @Size(5) public int[] getLinkCapabilities();
     method public int getPcrFilterCount();
     method public int getPesFilterCount();
     method public int getPlaybackCount();
@@ -4804,7 +4852,7 @@
     method public int addPid(int, int, @Nullable android.media.tv.tuner.filter.Filter);
     method public void close();
     method public int removePid(int, int, @Nullable android.media.tv.tuner.filter.Filter);
-    method public int setKeyToken(@Nullable byte[]);
+    method public int setKeyToken(@NonNull byte[]);
     field public static final int PID_TYPE_MMTP = 2; // 0x2
     field public static final int PID_TYPE_T = 1; // 0x1
   }
@@ -4841,8 +4889,11 @@
   }
 
   public class Tuner implements java.lang.AutoCloseable {
-    ctor @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public Tuner(@NonNull android.content.Context, @NonNull String, int, @Nullable android.media.tv.tuner.Tuner.OnResourceLostListener);
+    ctor @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public Tuner(@NonNull android.content.Context, @Nullable String, int);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int cancelScanning();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int cancelTuning();
     method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void clearOnTuneEventListener();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void clearResourceLostListener();
     method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void close();
     method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int connectCiCam(int);
     method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int disconnectCiCam();
@@ -4851,19 +4902,18 @@
     method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.DemuxCapabilities getDemuxCapabilities(@NonNull android.content.Context);
     method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.frontend.FrontendInfo getFrontendInfo();
     method @Nullable public android.media.tv.tuner.frontend.FrontendStatus getFrontendStatus(@NonNull int[]);
-    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.Descrambler openDescrambler();
-    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.dvr.DvrPlayback openDvrPlayback(long, @Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.dvr.OnPlaybackStatusChangedListener);
-    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.dvr.DvrRecorder openDvrRecorder(long, @Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.dvr.OnRecordStatusChangedListener);
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER) public android.media.tv.tuner.Descrambler openDescrambler();
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.dvr.DvrPlayback openDvrPlayback(long, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.dvr.OnPlaybackStatusChangedListener);
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.dvr.DvrRecorder openDvrRecorder(long, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.dvr.OnRecordStatusChangedListener);
     method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.filter.Filter openFilter(int, int, long, @Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.filter.FilterCallback);
-    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.Lnb openLnb(@Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.LnbCallback);
-    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.Lnb openLnbByName(@Nullable String, @Nullable java.util.concurrent.Executor, @NonNull android.media.tv.tuner.LnbCallback);
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.Lnb openLnb(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.LnbCallback);
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.Lnb openLnbByName(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.LnbCallback);
     method @Nullable public android.media.tv.tuner.filter.TimeFilter openTimeFilter();
     method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int scan(@NonNull android.media.tv.tuner.frontend.FrontendSettings, int, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.ScanCallback);
-    method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int setLna(boolean);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int setLnaEnabled(boolean);
     method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void setOnTuneEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.OnTuneEventListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void setResourceLostListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.Tuner.OnResourceLostListener);
     method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void shareFrontendFromTuner(@NonNull android.media.tv.tuner.Tuner);
-    method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int stopScan();
-    method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int stopTune();
     method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int tune(@NonNull android.media.tv.tuner.frontend.FrontendSettings);
     method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void updateResourcePriority(int, int);
   }
@@ -4873,8 +4923,10 @@
   }
 
   public final class TunerConstants {
-    field public static final int INVALID_STREAM_ID = -1; // 0xffffffff
-    field public static final int INVALID_TS_PID = -1; // 0xffffffff
+    field public static final int INVALID_AV_SYNC_ID = -1; // 0xffffffff
+    field public static final int INVALID_FILTER_ID = -1; // 0xffffffff
+    field public static final int INVALID_STREAM_ID = 65535; // 0xffff
+    field public static final int INVALID_TS_PID = 65535; // 0xffff
     field public static final int RESULT_INVALID_ARGUMENT = 4; // 0x4
     field public static final int RESULT_INVALID_STATE = 3; // 0x3
     field public static final int RESULT_NOT_INITIALIZED = 2; // 0x2
@@ -5267,9 +5319,8 @@
     method public int getType();
   }
 
-  public static class TsFilterConfiguration.Builder {
+  public static class TsFilterConfiguration.Builder extends android.media.tv.tuner.filter.FilterConfiguration.Builder<android.media.tv.tuner.filter.TsFilterConfiguration.Builder> {
     method @NonNull public android.media.tv.tuner.filter.TsFilterConfiguration build();
-    method @NonNull public android.media.tv.tuner.filter.TsFilterConfiguration.Builder setSettings(@NonNull android.media.tv.tuner.filter.Settings);
     method @NonNull public android.media.tv.tuner.filter.TsFilterConfiguration.Builder setTpid(int);
   }
 
@@ -5745,7 +5796,6 @@
     method public int getFreqOffset();
     method public int getHierarchy();
     method @NonNull public boolean[] getLayerErrors();
-    method public int getLberCn();
     method public int getLnbVoltage();
     method public int getMer();
     method public int getModulation();
@@ -5757,37 +5807,32 @@
     method public int getSnr();
     method public int getSpectralInversion();
     method public int getSymbolRate();
-    method public int getVberCn();
-    method public int getXerCn();
     method public boolean isDemodLocked();
     method public boolean isEwbs();
     method public boolean isLnaOn();
     method public boolean isRfLock();
     field public static final int FRONTEND_STATUS_TYPE_AGC = 14; // 0xe
-    field public static final int FRONTEND_STATUS_TYPE_ATSC3_PLP_INFO = 24; // 0x18
+    field public static final int FRONTEND_STATUS_TYPE_ATSC3_PLP_INFO = 21; // 0x15
     field public static final int FRONTEND_STATUS_TYPE_BER = 2; // 0x2
     field public static final int FRONTEND_STATUS_TYPE_DEMOD_LOCK = 0; // 0x0
     field public static final int FRONTEND_STATUS_TYPE_EWBS = 13; // 0xd
     field public static final int FRONTEND_STATUS_TYPE_FEC = 8; // 0x8
-    field public static final int FRONTEND_STATUS_TYPE_FREQ_OFFSET = 21; // 0x15
-    field public static final int FRONTEND_STATUS_TYPE_HIERARCHY = 22; // 0x16
+    field public static final int FRONTEND_STATUS_TYPE_FREQ_OFFSET = 18; // 0x12
+    field public static final int FRONTEND_STATUS_TYPE_HIERARCHY = 19; // 0x13
     field public static final int FRONTEND_STATUS_TYPE_LAYER_ERROR = 16; // 0x10
-    field public static final int FRONTEND_STATUS_TYPE_LBER_CN = 18; // 0x12
     field public static final int FRONTEND_STATUS_TYPE_LNA = 15; // 0xf
     field public static final int FRONTEND_STATUS_TYPE_LNB_VOLTAGE = 11; // 0xb
-    field public static final int FRONTEND_STATUS_TYPE_MER = 20; // 0x14
+    field public static final int FRONTEND_STATUS_TYPE_MER = 17; // 0x11
     field public static final int FRONTEND_STATUS_TYPE_MODULATION = 9; // 0x9
     field public static final int FRONTEND_STATUS_TYPE_PER = 3; // 0x3
     field public static final int FRONTEND_STATUS_TYPE_PLP_ID = 12; // 0xc
     field public static final int FRONTEND_STATUS_TYPE_PRE_BER = 4; // 0x4
-    field public static final int FRONTEND_STATUS_TYPE_RF_LOCK = 23; // 0x17
+    field public static final int FRONTEND_STATUS_TYPE_RF_LOCK = 20; // 0x14
     field public static final int FRONTEND_STATUS_TYPE_SIGNAL_QUALITY = 5; // 0x5
     field public static final int FRONTEND_STATUS_TYPE_SIGNAL_STRENGTH = 6; // 0x6
     field public static final int FRONTEND_STATUS_TYPE_SNR = 1; // 0x1
     field public static final int FRONTEND_STATUS_TYPE_SPECTRAL = 10; // 0xa
     field public static final int FRONTEND_STATUS_TYPE_SYMBOL_RATE = 7; // 0x7
-    field public static final int FRONTEND_STATUS_TYPE_VBER_CN = 17; // 0x11
-    field public static final int FRONTEND_STATUS_TYPE_XER_CN = 19; // 0x13
   }
 
   public static class FrontendStatus.Atsc3PlpInfo {
@@ -6015,7 +6060,7 @@
 
   public class CaptivePortal implements android.os.Parcelable {
     method public void logEvent(int, @NonNull String);
-    method public void reevaluateNetwork();
+    method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void reevaluateNetwork();
     method public void useNetwork();
     field public static final int APP_REQUEST_REEVALUATION_REQUIRED = 100; // 0x64
     field public static final int APP_RETURN_DISMISSED = 0; // 0x0
@@ -6307,7 +6352,9 @@
     method @Nullable public String getSSID();
     method @NonNull public int[] getTransportTypes();
     method public boolean satisfiedByNetworkCapabilities(@Nullable android.net.NetworkCapabilities);
-    method public void setAdministratorUids(@NonNull java.util.List<java.lang.Integer>);
+    method @NonNull public android.net.NetworkCapabilities setAdministratorUids(@NonNull java.util.List<java.lang.Integer>);
+    method @NonNull public android.net.NetworkCapabilities setRequestorPackageName(@NonNull String);
+    method @NonNull public android.net.NetworkCapabilities setRequestorUid(int);
     method @NonNull public android.net.NetworkCapabilities setSSID(@Nullable String);
     method @NonNull public android.net.NetworkCapabilities setTransportInfo(@NonNull android.net.TransportInfo);
     field public static final int NET_CAPABILITY_OEM_PAID = 22; // 0x16
@@ -6359,6 +6406,8 @@
   }
 
   public class NetworkRequest implements android.os.Parcelable {
+    method @Nullable public String getRequestorPackageName();
+    method public int getRequestorUid();
     method public boolean satisfiedBy(@Nullable android.net.NetworkCapabilities);
   }
 
@@ -6443,7 +6492,6 @@
   }
 
   public abstract class NetworkSpecifier {
-    method public void assertValidFromUid(int);
     method @Nullable public android.net.NetworkSpecifier redact();
     method public abstract boolean satisfiedBy(@Nullable android.net.NetworkSpecifier);
   }
@@ -7206,6 +7254,28 @@
 
 }
 
+package android.net.sip {
+
+  public class SipAudioCall {
+    method @Nullable public android.net.rtp.AudioGroup getAudioGroup();
+    method public void setAudioGroup(@NonNull android.net.rtp.AudioGroup);
+  }
+
+  public class SipManager {
+    method @NonNull public java.util.List<android.net.sip.SipProfile> getProfiles() throws android.net.sip.SipException;
+    field public static final String ACTION_SIP_CALL_OPTION_CHANGED = "android.net.sip.action.SIP_CALL_OPTION_CHANGED";
+    field public static final String ACTION_SIP_INCOMING_CALL = "android.net.sip.action.SIP_INCOMING_CALL";
+    field public static final String ACTION_SIP_REMOVE_PROFILE = "android.net.sip.action.SIP_REMOVE_PROFILE";
+    field public static final String ACTION_SIP_SERVICE_UP = "android.net.sip.action.SIP_SERVICE_UP";
+    field public static final String ACTION_START_SIP = "android.net.sip.action.START_SIP";
+  }
+
+  public class SipProfile implements java.lang.Cloneable android.os.Parcelable java.io.Serializable {
+    method public int getCallingUid();
+  }
+
+}
+
 package android.net.util {
 
   public final class SocketUtils {
@@ -7476,6 +7546,7 @@
     method public int getChannel();
     method public int getMaxNumberOfClients();
     method public int getShutdownTimeoutMillis();
+    method public boolean isAutoShutdownEnabled();
     method public boolean isClientControlByUserEnabled();
     method @Nullable public android.net.wifi.WifiConfiguration toWifiConfiguration();
     field public static final int BAND_2GHZ = 1; // 0x1
@@ -7489,14 +7560,15 @@
     ctor public SoftApConfiguration.Builder(@NonNull android.net.wifi.SoftApConfiguration);
     method @NonNull public android.net.wifi.SoftApConfiguration build();
     method @NonNull public android.net.wifi.SoftApConfiguration.Builder enableClientControlByUser(boolean);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setAutoShutdownEnabled(boolean);
     method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBand(int);
     method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBssid(@Nullable android.net.MacAddress);
     method @NonNull public android.net.wifi.SoftApConfiguration.Builder setChannel(int, int);
     method @NonNull public android.net.wifi.SoftApConfiguration.Builder setClientList(@NonNull java.util.List<android.net.MacAddress>, @NonNull java.util.List<android.net.MacAddress>);
     method @NonNull public android.net.wifi.SoftApConfiguration.Builder setHiddenSsid(boolean);
-    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setMaxNumberOfClients(int);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setMaxNumberOfClients(@IntRange(from=0) int);
     method @NonNull public android.net.wifi.SoftApConfiguration.Builder setPassphrase(@Nullable String, int);
-    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setShutdownTimeoutMillis(int);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setShutdownTimeoutMillis(@IntRange(from=0) int);
     method @NonNull public android.net.wifi.SoftApConfiguration.Builder setSsid(@Nullable String);
   }
 
@@ -7556,7 +7628,7 @@
     field @Deprecated public int numAssociation;
     field @Deprecated public int numScorerOverride;
     field @Deprecated public int numScorerOverrideAndSwitchedNetwork;
-    field @Deprecated public boolean requirePMF;
+    field @Deprecated public boolean requirePmf;
     field @Deprecated @Nullable public String saePasswordId;
     field @Deprecated public boolean shared;
     field @Deprecated public boolean useExternalScores;
@@ -7686,9 +7758,12 @@
     method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public byte[] retrieveBackupData();
     method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public byte[] retrieveSoftApBackupData();
     method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void save(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setAutoWakeupEnabled(boolean);
     method @RequiresPermission(android.Manifest.permission.WIFI_SET_DEVICE_MOBILITY_STATE) public void setDeviceMobilityState(int);
     method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setMacRandomizationSettingPasspointEnabled(@NonNull String, boolean);
     method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setMeteredOverridePasspoint(@NonNull String, int);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setScanAlwaysAvailable(boolean);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setScanThrottleEnabled(boolean);
     method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public boolean setSoftApConfiguration(@NonNull android.net.wifi.SoftApConfiguration);
     method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setVerboseLoggingEnabled(boolean);
     method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public boolean setWifiApConfiguration(android.net.wifi.WifiConfiguration);
@@ -7833,23 +7908,49 @@
     method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_CARRIER_PROVISIONING) public android.net.wifi.WifiNetworkSuggestion.Builder setCarrierId(int);
   }
 
-  public final class WifiOemConfigStoreMigrationHook {
-    method @Nullable public static android.net.wifi.WifiOemConfigStoreMigrationHook.MigrationData load();
+  public final class WifiOemMigrationHook {
+    method @Nullable public static android.net.wifi.WifiOemMigrationHook.ConfigStoreMigrationData loadFromConfigStore();
+    method @NonNull public static android.net.wifi.WifiOemMigrationHook.SettingsMigrationData loadFromSettings(@NonNull android.content.Context);
   }
 
-  public static final class WifiOemConfigStoreMigrationHook.MigrationData implements android.os.Parcelable {
+  public static final class WifiOemMigrationHook.ConfigStoreMigrationData implements android.os.Parcelable {
     method public int describeContents();
     method @Nullable public java.util.List<android.net.wifi.WifiConfiguration> getUserSavedNetworkConfigurations();
     method @Nullable public android.net.wifi.SoftApConfiguration getUserSoftApConfiguration();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiOemConfigStoreMigrationHook.MigrationData> CREATOR;
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiOemMigrationHook.ConfigStoreMigrationData> CREATOR;
   }
 
-  public static final class WifiOemConfigStoreMigrationHook.MigrationData.Builder {
-    ctor public WifiOemConfigStoreMigrationHook.MigrationData.Builder();
-    method @NonNull public android.net.wifi.WifiOemConfigStoreMigrationHook.MigrationData build();
-    method @NonNull public android.net.wifi.WifiOemConfigStoreMigrationHook.MigrationData.Builder setUserSavedNetworkConfigurations(@NonNull java.util.List<android.net.wifi.WifiConfiguration>);
-    method @NonNull public android.net.wifi.WifiOemConfigStoreMigrationHook.MigrationData.Builder setUserSoftApConfiguration(@NonNull android.net.wifi.SoftApConfiguration);
+  public static final class WifiOemMigrationHook.ConfigStoreMigrationData.Builder {
+    ctor public WifiOemMigrationHook.ConfigStoreMigrationData.Builder();
+    method @NonNull public android.net.wifi.WifiOemMigrationHook.ConfigStoreMigrationData build();
+    method @NonNull public android.net.wifi.WifiOemMigrationHook.ConfigStoreMigrationData.Builder setUserSavedNetworkConfigurations(@NonNull java.util.List<android.net.wifi.WifiConfiguration>);
+    method @NonNull public android.net.wifi.WifiOemMigrationHook.ConfigStoreMigrationData.Builder setUserSoftApConfiguration(@NonNull android.net.wifi.SoftApConfiguration);
+  }
+
+  public static final class WifiOemMigrationHook.SettingsMigrationData implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getP2pDeviceName();
+    method public boolean isP2pFactoryResetPending();
+    method public boolean isScanAlwaysAvailable();
+    method public boolean isScanThrottleEnabled();
+    method public boolean isSoftApTimeoutEnabled();
+    method public boolean isVerboseLoggingEnabled();
+    method public boolean isWakeUpEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiOemMigrationHook.SettingsMigrationData> CREATOR;
+  }
+
+  public static final class WifiOemMigrationHook.SettingsMigrationData.Builder {
+    ctor public WifiOemMigrationHook.SettingsMigrationData.Builder();
+    method @NonNull public android.net.wifi.WifiOemMigrationHook.SettingsMigrationData build();
+    method @NonNull public android.net.wifi.WifiOemMigrationHook.SettingsMigrationData.Builder setP2pDeviceName(@Nullable String);
+    method @NonNull public android.net.wifi.WifiOemMigrationHook.SettingsMigrationData.Builder setP2pFactoryResetPending(boolean);
+    method @NonNull public android.net.wifi.WifiOemMigrationHook.SettingsMigrationData.Builder setScanAlwaysAvailable(boolean);
+    method @NonNull public android.net.wifi.WifiOemMigrationHook.SettingsMigrationData.Builder setScanThrottleEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiOemMigrationHook.SettingsMigrationData.Builder setSoftApTimeoutEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiOemMigrationHook.SettingsMigrationData.Builder setVerboseLoggingEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiOemMigrationHook.SettingsMigrationData.Builder setWakeUpEnabled(boolean);
   }
 
   public class WifiScanner {
@@ -8103,11 +8204,179 @@
 
 }
 
+package android.net.wifi.nl80211 {
+
+  public final class DeviceWiphyCapabilities implements android.os.Parcelable {
+    ctor public DeviceWiphyCapabilities();
+    method public int describeContents();
+    method public int getMaxNumberRxSpatialStreams();
+    method public int getMaxNumberTxSpatialStreams();
+    method public boolean isChannelWidthSupported(int);
+    method public boolean isWifiStandardSupported(int);
+    method public void setChannelWidthSupported(int, boolean);
+    method public void setMaxNumberRxSpatialStreams(int);
+    method public void setMaxNumberTxSpatialStreams(int);
+    method public void setWifiStandardSupport(int, boolean);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.DeviceWiphyCapabilities> CREATOR;
+  }
+
+  public final class NativeScanResult implements android.os.Parcelable {
+    ctor public NativeScanResult();
+    method public int describeContents();
+    method @Nullable public android.net.MacAddress getBssid();
+    method public int getCapabilities();
+    method public int getFrequencyMhz();
+    method @NonNull public byte[] getInformationElements();
+    method @NonNull public java.util.List<android.net.wifi.nl80211.RadioChainInfo> getRadioChainInfos();
+    method public int getSignalMbm();
+    method @NonNull public byte[] getSsid();
+    method public long getTsf();
+    method public boolean isAssociated();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int BSS_CAPABILITY_APSD = 2048; // 0x800
+    field public static final int BSS_CAPABILITY_CF_POLLABLE = 4; // 0x4
+    field public static final int BSS_CAPABILITY_CF_POLL_REQUEST = 8; // 0x8
+    field public static final int BSS_CAPABILITY_CHANNEL_AGILITY = 128; // 0x80
+    field public static final int BSS_CAPABILITY_DELAYED_BLOCK_ACK = 16384; // 0x4000
+    field public static final int BSS_CAPABILITY_DSSS_OFDM = 8192; // 0x2000
+    field public static final int BSS_CAPABILITY_ESS = 1; // 0x1
+    field public static final int BSS_CAPABILITY_IBSS = 2; // 0x2
+    field public static final int BSS_CAPABILITY_IMMEDIATE_BLOCK_ACK = 32768; // 0x8000
+    field public static final int BSS_CAPABILITY_PBCC = 64; // 0x40
+    field public static final int BSS_CAPABILITY_PRIVACY = 16; // 0x10
+    field public static final int BSS_CAPABILITY_QOS = 512; // 0x200
+    field public static final int BSS_CAPABILITY_RADIO_MANAGEMENT = 4096; // 0x1000
+    field public static final int BSS_CAPABILITY_SHORT_PREAMBLE = 32; // 0x20
+    field public static final int BSS_CAPABILITY_SHORT_SLOT_TIME = 1024; // 0x400
+    field public static final int BSS_CAPABILITY_SPECTRUM_MANAGEMENT = 256; // 0x100
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.NativeScanResult> CREATOR;
+  }
+
+  public final class NativeWifiClient implements android.os.Parcelable {
+    ctor public NativeWifiClient(@Nullable android.net.MacAddress);
+    method public int describeContents();
+    method @Nullable public android.net.MacAddress getMacAddress();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.NativeWifiClient> CREATOR;
+  }
+
+  public final class PnoNetwork implements android.os.Parcelable {
+    ctor public PnoNetwork();
+    method public int describeContents();
+    method @NonNull public int[] getFrequenciesMhz();
+    method @NonNull public byte[] getSsid();
+    method public boolean isHidden();
+    method public void setFrequenciesMhz(@NonNull int[]);
+    method public void setHidden(boolean);
+    method public void setSsid(@NonNull byte[]);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.PnoNetwork> CREATOR;
+  }
+
+  public final class PnoSettings implements android.os.Parcelable {
+    ctor public PnoSettings();
+    method public int describeContents();
+    method public long getIntervalMillis();
+    method public int getMin2gRssiDbm();
+    method public int getMin5gRssiDbm();
+    method public int getMin6gRssiDbm();
+    method @NonNull public java.util.List<android.net.wifi.nl80211.PnoNetwork> getPnoNetworks();
+    method public void setIntervalMillis(long);
+    method public void setMin2gRssiDbm(int);
+    method public void setMin5gRssiDbm(int);
+    method public void setMin6gRssiDbm(int);
+    method public void setPnoNetworks(@NonNull java.util.List<android.net.wifi.nl80211.PnoNetwork>);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.PnoSettings> CREATOR;
+  }
+
+  public final class RadioChainInfo implements android.os.Parcelable {
+    ctor public RadioChainInfo(int, int);
+    method public int describeContents();
+    method public int getChainId();
+    method public int getLevelDbm();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.RadioChainInfo> CREATOR;
+  }
+
+  public class WifiNl80211Manager {
+    method public void abortScan(@NonNull String);
+    method public void enableVerboseLogging(boolean);
+    method @NonNull public int[] getChannelsMhzForBand(int);
+    method @Nullable public android.net.wifi.nl80211.DeviceWiphyCapabilities getDeviceWiphyCapabilities(@NonNull String);
+    method @NonNull public java.util.List<android.net.wifi.nl80211.NativeScanResult> getScanResults(@NonNull String, int);
+    method @Nullable public android.net.wifi.nl80211.WifiNl80211Manager.TxPacketCounters getTxPacketCounters(@NonNull String);
+    method @Nullable public static android.net.wifi.nl80211.WifiNl80211Manager.OemSecurityType parseOemSecurityTypeElement(int, int, @NonNull byte[]);
+    method public boolean registerApCallback(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.SoftApCallback);
+    method public void sendMgmtFrame(@NonNull String, @NonNull byte[], int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.SendMgmtFrameCallback);
+    method public void setOnServiceDeadCallback(@NonNull Runnable);
+    method public boolean setupInterfaceForClientMode(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.ScanEventCallback, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.ScanEventCallback);
+    method public boolean setupInterfaceForSoftApMode(@NonNull String);
+    method @Nullable public android.net.wifi.nl80211.WifiNl80211Manager.SignalPollResult signalPoll(@NonNull String);
+    method public boolean startPnoScan(@NonNull String, @NonNull android.net.wifi.nl80211.PnoSettings, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.PnoScanRequestCallback);
+    method public boolean startScan(@NonNull String, int, @Nullable java.util.Set<java.lang.Integer>, @Nullable java.util.List<byte[]>);
+    method public boolean stopPnoScan(@NonNull String);
+    method public boolean tearDownClientInterface(@NonNull String);
+    method public boolean tearDownInterfaces();
+    method public boolean tearDownSoftApInterface(@NonNull String);
+    field public static final int SCAN_TYPE_PNO_SCAN = 1; // 0x1
+    field public static final int SCAN_TYPE_SINGLE_SCAN = 0; // 0x0
+    field public static final int SEND_MGMT_FRAME_ERROR_ALREADY_STARTED = 5; // 0x5
+    field public static final int SEND_MGMT_FRAME_ERROR_MCS_UNSUPPORTED = 2; // 0x2
+    field public static final int SEND_MGMT_FRAME_ERROR_NO_ACK = 3; // 0x3
+    field public static final int SEND_MGMT_FRAME_ERROR_TIMEOUT = 4; // 0x4
+    field public static final int SEND_MGMT_FRAME_ERROR_UNKNOWN = 1; // 0x1
+  }
+
+  public static class WifiNl80211Manager.OemSecurityType {
+    ctor public WifiNl80211Manager.OemSecurityType(int, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, int);
+    field public final int groupCipher;
+    field @NonNull public final java.util.List<java.lang.Integer> keyManagement;
+    field @NonNull public final java.util.List<java.lang.Integer> pairwiseCipher;
+    field public final int protocol;
+  }
+
+  public static interface WifiNl80211Manager.PnoScanRequestCallback {
+    method public void onPnoRequestFailed();
+    method public void onPnoRequestSucceeded();
+  }
+
+  public static interface WifiNl80211Manager.ScanEventCallback {
+    method public void onScanFailed();
+    method public void onScanResultReady();
+  }
+
+  public static interface WifiNl80211Manager.SendMgmtFrameCallback {
+    method public void onAck(int);
+    method public void onFailure(int);
+  }
+
+  public static class WifiNl80211Manager.SignalPollResult {
+    field public final int associationFrequencyMHz;
+    field public final int currentRssiDbm;
+    field public final int rxBitrateMbps;
+    field public final int txBitrateMbps;
+  }
+
+  public static interface WifiNl80211Manager.SoftApCallback {
+    method public void onConnectedClientsChanged(@NonNull android.net.wifi.nl80211.NativeWifiClient, boolean);
+    method public void onFailure();
+    method public void onSoftApChannelSwitched(int, int);
+  }
+
+  public static class WifiNl80211Manager.TxPacketCounters {
+    field public final int txPacketFailed;
+    field public final int txPacketSucceeded;
+  }
+
+}
+
 package android.net.wifi.p2p {
 
   public final class WifiP2pGroupList implements android.os.Parcelable {
     method public int describeContents();
-    method @NonNull public java.util.Collection<android.net.wifi.p2p.WifiP2pGroup> getGroupList();
+    method @NonNull public java.util.List<android.net.wifi.p2p.WifiP2pGroup> getGroupList();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pGroupList> CREATOR;
   }
@@ -8115,12 +8384,13 @@
   public class WifiP2pManager {
     method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void deletePersistentGroup(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, int, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
     method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void factoryReset(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
-    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void listen(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, boolean, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
     method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.READ_WIFI_CREDENTIAL}) public void requestPersistentGroupInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.PersistentGroupInfoListener);
     method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void setDeviceName(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull String, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
     method @RequiresPermission(allOf={android.Manifest.permission.CONNECTIVITY_INTERNAL, android.Manifest.permission.CONFIGURE_WIFI_DISPLAY}) public void setMiracastMode(int);
     method @RequiresPermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY) public void setWfdInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pWfdInfo, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
     method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void setWifiP2pChannels(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, int, int, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void startListening(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void stopListening(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
     field public static final String ACTION_WIFI_P2P_PERSISTENT_GROUPS_CHANGED = "android.net.wifi.p2p.action.WIFI_P2P_PERSISTENT_GROUPS_CHANGED";
     field public static final int MIRACAST_DISABLED = 0; // 0x0
     field public static final int MIRACAST_SINK = 2; // 0x2
@@ -8189,158 +8459,6 @@
 
 }
 
-package android.net.wifi.wificond {
-
-  public final class DeviceWiphyCapabilities implements android.os.Parcelable {
-    ctor public DeviceWiphyCapabilities();
-    method public int describeContents();
-    method public int getMaxNumberRxSpatialStreams();
-    method public int getMaxNumberTxSpatialStreams();
-    method public boolean isChannelWidthSupported(int);
-    method public boolean isWifiStandardSupported(int);
-    method public void setChannelWidthSupported(int, boolean);
-    method public void setMaxNumberRxSpatialStreams(int);
-    method public void setMaxNumberTxSpatialStreams(int);
-    method public void setWifiStandardSupport(int, boolean);
-    method public void writeToParcel(@NonNull android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.wificond.DeviceWiphyCapabilities> CREATOR;
-  }
-
-  public final class NativeScanResult implements android.os.Parcelable {
-    ctor public NativeScanResult();
-    method public int describeContents();
-    method @NonNull public byte[] getBssid();
-    method @NonNull public int getCapabilities();
-    method public int getFrequencyMhz();
-    method @NonNull public byte[] getInformationElements();
-    method @NonNull public java.util.List<android.net.wifi.wificond.RadioChainInfo> getRadioChainInfos();
-    method public int getSignalMbm();
-    method @NonNull public byte[] getSsid();
-    method public long getTsf();
-    method public boolean isAssociated();
-    method public void writeToParcel(@NonNull android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.wificond.NativeScanResult> CREATOR;
-  }
-
-  public final class NativeWifiClient implements android.os.Parcelable {
-    ctor public NativeWifiClient(@NonNull byte[]);
-    method public int describeContents();
-    method public void writeToParcel(@NonNull android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.wificond.NativeWifiClient> CREATOR;
-    field @NonNull public final byte[] macAddress;
-  }
-
-  public final class PnoNetwork implements android.os.Parcelable {
-    ctor public PnoNetwork();
-    method public int describeContents();
-    method @NonNull public int[] getFrequenciesMhz();
-    method @NonNull public byte[] getSsid();
-    method public boolean isHidden();
-    method public void setFrequenciesMhz(@NonNull int[]);
-    method public void setHidden(boolean);
-    method public void setSsid(@NonNull byte[]);
-    method public void writeToParcel(@NonNull android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.wificond.PnoNetwork> CREATOR;
-  }
-
-  public final class PnoSettings implements android.os.Parcelable {
-    ctor public PnoSettings();
-    method public int describeContents();
-    method public long getIntervalMillis();
-    method public int getMin2gRssiDbm();
-    method public int getMin5gRssiDbm();
-    method public int getMin6gRssiDbm();
-    method @NonNull public java.util.List<android.net.wifi.wificond.PnoNetwork> getPnoNetworks();
-    method public void setIntervalMillis(long);
-    method public void setMin2gRssiDbm(int);
-    method public void setMin5gRssiDbm(int);
-    method public void setMin6gRssiDbm(int);
-    method public void setPnoNetworks(@NonNull java.util.List<android.net.wifi.wificond.PnoNetwork>);
-    method public void writeToParcel(@NonNull android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.wificond.PnoSettings> CREATOR;
-  }
-
-  public final class RadioChainInfo implements android.os.Parcelable {
-    ctor public RadioChainInfo(int, int);
-    method public int describeContents();
-    method public int getChainId();
-    method public int getLevelDbm();
-    method public void writeToParcel(@NonNull android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.wificond.RadioChainInfo> CREATOR;
-  }
-
-  public class WifiCondManager {
-    method public void abortScan(@NonNull String);
-    method public void enableVerboseLogging(boolean);
-    method @NonNull public java.util.List<java.lang.Integer> getChannelsMhzForBand(int);
-    method @Nullable public android.net.wifi.wificond.DeviceWiphyCapabilities getDeviceWiphyCapabilities(@NonNull String);
-    method @NonNull public java.util.List<android.net.wifi.wificond.NativeScanResult> getScanResults(@NonNull String, int);
-    method @Nullable public android.net.wifi.wificond.WifiCondManager.TxPacketCounters getTxPacketCounters(@NonNull String);
-    method @Nullable public static android.net.wifi.wificond.WifiCondManager.OemSecurityType parseOemSecurityTypeElement(int, int, @NonNull byte[]);
-    method public boolean registerApCallback(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.wificond.WifiCondManager.SoftApCallback);
-    method public void sendMgmtFrame(@NonNull String, @NonNull byte[], int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.wificond.WifiCondManager.SendMgmtFrameCallback);
-    method public void setOnServiceDeadCallback(@NonNull Runnable);
-    method public boolean setupInterfaceForClientMode(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.wificond.WifiCondManager.ScanEventCallback, @NonNull android.net.wifi.wificond.WifiCondManager.ScanEventCallback);
-    method public boolean setupInterfaceForSoftApMode(@NonNull String);
-    method @Nullable public android.net.wifi.wificond.WifiCondManager.SignalPollResult signalPoll(@NonNull String);
-    method public boolean startPnoScan(@NonNull String, @NonNull android.net.wifi.wificond.PnoSettings, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.wificond.WifiCondManager.PnoScanRequestCallback);
-    method public boolean startScan(@NonNull String, int, @Nullable java.util.Set<java.lang.Integer>, @Nullable java.util.List<byte[]>);
-    method public boolean stopPnoScan(@NonNull String);
-    method public boolean tearDownClientInterface(@NonNull String);
-    method public boolean tearDownInterfaces();
-    method public boolean tearDownSoftApInterface(@NonNull String);
-    field public static final int SCAN_TYPE_PNO_SCAN = 1; // 0x1
-    field public static final int SCAN_TYPE_SINGLE_SCAN = 0; // 0x0
-    field public static final int SEND_MGMT_FRAME_ERROR_ALREADY_STARTED = 5; // 0x5
-    field public static final int SEND_MGMT_FRAME_ERROR_MCS_UNSUPPORTED = 2; // 0x2
-    field public static final int SEND_MGMT_FRAME_ERROR_NO_ACK = 3; // 0x3
-    field public static final int SEND_MGMT_FRAME_ERROR_TIMEOUT = 4; // 0x4
-    field public static final int SEND_MGMT_FRAME_ERROR_UNKNOWN = 1; // 0x1
-  }
-
-  public static class WifiCondManager.OemSecurityType {
-    ctor public WifiCondManager.OemSecurityType(int, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, int);
-    field public final int groupCipher;
-    field @NonNull public final java.util.List<java.lang.Integer> keyManagement;
-    field @NonNull public final java.util.List<java.lang.Integer> pairwiseCipher;
-    field public final int protocol;
-  }
-
-  public static interface WifiCondManager.PnoScanRequestCallback {
-    method public void onPnoRequestFailed();
-    method public void onPnoRequestSucceeded();
-  }
-
-  public static interface WifiCondManager.ScanEventCallback {
-    method public void onScanFailed();
-    method public void onScanResultReady();
-  }
-
-  public static interface WifiCondManager.SendMgmtFrameCallback {
-    method public void onAck(int);
-    method public void onFailure(int);
-  }
-
-  public static class WifiCondManager.SignalPollResult {
-    field public final int associationFrequencyMHz;
-    field public final int currentRssiDbm;
-    field public final int rxBitrateMbps;
-    field public final int txBitrateMbps;
-  }
-
-  public static interface WifiCondManager.SoftApCallback {
-    method public void onConnectedClientsChanged(@NonNull android.net.wifi.wificond.NativeWifiClient, boolean);
-    method public void onFailure();
-    method public void onSoftApChannelSwitched(int, int);
-  }
-
-  public static class WifiCondManager.TxPacketCounters {
-    field public final int txPacketFailed;
-    field public final int txPacketSucceeded;
-  }
-
-}
-
 package android.nfc {
 
   public final class NfcAdapter {
@@ -8779,8 +8897,8 @@
   }
 
   public class PowerWhitelistManager {
-    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public boolean addToWhitelist(@NonNull String);
-    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public int addToWhitelist(@NonNull java.util.List<java.lang.String>);
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void addToWhitelist(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void addToWhitelist(@NonNull java.util.List<java.lang.String>);
     method @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public void whitelistAppTemporarily(@NonNull String, long);
     method @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public long whitelistAppTemporarilyForEvent(@NonNull String, int, @NonNull String);
     field public static final int EVENT_MMS = 2; // 0x2
@@ -8841,26 +8959,6 @@
     field public static final int TUPLE_VALUE_TYPE = 7; // 0x7
   }
 
-  public class StatsFrameworkInitializer {
-    method public static void registerServiceWrappers();
-    method public static void setStatsServiceManager(@NonNull android.os.StatsServiceManager);
-  }
-
-  public class StatsServiceManager {
-    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsCompanionServiceRegisterer();
-    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsManagerServiceRegisterer();
-    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsdServiceRegisterer();
-  }
-
-  public static class StatsServiceManager.ServiceNotFoundException extends java.lang.Exception {
-    ctor public StatsServiceManager.ServiceNotFoundException(@NonNull String);
-  }
-
-  public static final class StatsServiceManager.ServiceRegisterer {
-    method @Nullable public android.os.IBinder get();
-    method @Nullable public android.os.IBinder getOrThrow() throws android.os.StatsServiceManager.ServiceNotFoundException;
-  }
-
   public class SystemConfigManager {
     method @NonNull @RequiresPermission(android.Manifest.permission.READ_CARRIER_APP_INFO) public java.util.Set<java.lang.String> getDisabledUntilUsedPreinstalledCarrierApps();
     method @NonNull @RequiresPermission(android.Manifest.permission.READ_CARRIER_APP_INFO) public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
@@ -9046,6 +9144,17 @@
   @IntDef(flag=true, prefix={"RESTRICTION_"}, value={android.os.UserManager.RESTRICTION_NOT_SET, android.os.UserManager.RESTRICTION_SOURCE_SYSTEM, android.os.UserManager.RESTRICTION_SOURCE_DEVICE_OWNER, android.os.UserManager.RESTRICTION_SOURCE_PROFILE_OWNER}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface UserManager.UserRestrictionSource {
   }
 
+  public abstract class Vibrator {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public void addVibratorStateListener(@NonNull android.os.Vibrator.OnVibratorStateChangedListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public void addVibratorStateListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.Vibrator.OnVibratorStateChangedListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public boolean isVibrating();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public void removeVibratorStateListener(@NonNull android.os.Vibrator.OnVibratorStateChangedListener);
+  }
+
+  public static interface Vibrator.OnVibratorStateChangedListener {
+    method public void onVibratorStateChanged(boolean);
+  }
+
   public class WorkSource implements android.os.Parcelable {
     ctor public WorkSource(int);
     ctor public WorkSource(int, @NonNull String);
@@ -9140,6 +9249,15 @@
 
 }
 
+package android.os.ext.test {
+
+  @Deprecated public class Test {
+    method @Deprecated public void testF();
+    method @Deprecated public void testG();
+  }
+
+}
+
 package android.os.image {
 
   public class DynamicSystemClient {
@@ -9619,6 +9737,7 @@
     field public static final String ACTION_REQUEST_ENABLE_CONTENT_CAPTURE = "android.settings.REQUEST_ENABLE_CONTENT_CAPTURE";
     field public static final String ACTION_SHOW_ADMIN_SUPPORT_DETAILS = "android.settings.SHOW_ADMIN_SUPPORT_DETAILS";
     field public static final String ACTION_TETHER_PROVISIONING_UI = "android.settings.TETHER_PROVISIONING_UI";
+    field public static final String ACTION_TETHER_SETTINGS = "android.settings.TETHER_SETTINGS";
   }
 
   public static final class Settings.Global extends android.provider.Settings.NameValueTable {
@@ -9638,22 +9757,14 @@
     field public static final String EUICC_UNSUPPORTED_COUNTRIES = "euicc_unsupported_countries";
     field public static final String INSTALL_CARRIER_APP_NOTIFICATION_PERSISTENT = "install_carrier_app_notification_persistent";
     field public static final String INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS = "install_carrier_app_notification_sleep_millis";
-    field public static final String NETWORK_RECOMMENDATIONS_ENABLED = "network_recommendations_enabled";
     field public static final String OTA_DISABLE_AUTOMATIC_UPDATE = "ota_disable_automatic_update";
     field public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt";
-    field public static final String SOFT_AP_TIMEOUT_ENABLED = "soft_ap_timeout_enabled";
     field public static final String TETHER_OFFLOAD_DISABLED = "tether_offload_disabled";
     field public static final String TETHER_SUPPORTED = "tether_supported";
     field public static final String THEATER_MODE_ON = "theater_mode_on";
     field public static final String WEBVIEW_MULTIPROCESS = "webview_multiprocess";
     field public static final String WIFI_BADGING_THRESHOLDS = "wifi_badging_thresholds";
-    field public static final String WIFI_P2P_DEVICE_NAME = "wifi_p2p_device_name";
-    field public static final String WIFI_P2P_PENDING_FACTORY_RESET = "wifi_p2p_pending_factory_reset";
-    field public static final String WIFI_SCAN_ALWAYS_AVAILABLE = "wifi_scan_always_enabled";
-    field public static final String WIFI_SCAN_THROTTLE_ENABLED = "wifi_scan_throttle_enabled";
-    field public static final String WIFI_SCORE_PARAMS = "wifi_score_params";
-    field public static final String WIFI_VERBOSE_LOGGING_ENABLED = "wifi_verbose_logging_enabled";
-    field public static final String WIFI_WAKEUP_ENABLED = "wifi_wakeup_enabled";
+    field @Deprecated public static final String WIFI_WAKEUP_ENABLED = "wifi_wakeup_enabled";
   }
 
   public static final class Settings.Secure extends android.provider.Settings.NameValueTable {
@@ -9667,6 +9778,7 @@
     field public static final String AUTOFILL_USER_DATA_MAX_USER_DATA_SIZE = "autofill_user_data_max_user_data_size";
     field public static final String AUTOFILL_USER_DATA_MAX_VALUE_LENGTH = "autofill_user_data_max_value_length";
     field public static final String AUTOFILL_USER_DATA_MIN_VALUE_LENGTH = "autofill_user_data_min_value_length";
+    field public static final String AUTO_REVOKE_DISABLED = "auto_revoke_disabled";
     field public static final String CARRIER_APPS_HANDLED = "carrier_apps_handled";
     field public static final String COMPLETED_CATEGORY_PREFIX = "suggested.completed_category.";
     field public static final String DOZE_ALWAYS_ON = "doze_always_on";
@@ -10110,6 +10222,7 @@
   public abstract class InlineSuggestionRenderService extends android.app.Service {
     ctor public InlineSuggestionRenderService();
     method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method @Nullable public android.os.Bundle onGetInlineSuggestionsRendererInfo();
     method @Nullable public android.view.View onRenderSuggestion(@NonNull android.service.autofill.InlinePresentation, int, int);
     field public static final String SERVICE_INTERFACE = "android.service.autofill.InlineSuggestionRenderService";
   }
@@ -10126,6 +10239,7 @@
     method public void onConnected();
     method public void onDisconnected();
     method public void onFillRequest(@NonNull android.service.autofill.augmented.FillRequest, @NonNull android.os.CancellationSignal, @NonNull android.service.autofill.augmented.FillController, @NonNull android.service.autofill.augmented.FillCallback);
+    method public final boolean requestAutofill(@NonNull android.content.ComponentName, @NonNull android.view.autofill.AutofillId);
     field public static final String SERVICE_INTERFACE = "android.service.autofill.augmented.AugmentedAutofillService";
   }
 
@@ -10275,7 +10389,7 @@
 
   public abstract class DataLoaderService extends android.app.Service {
     ctor public DataLoaderService();
-    method @Nullable public android.service.dataloader.DataLoaderService.DataLoader onCreateDataLoader();
+    method @Nullable public android.service.dataloader.DataLoaderService.DataLoader onCreateDataLoader(@NonNull android.content.pm.DataLoaderParams);
   }
 
   public static interface DataLoaderService.DataLoader {
@@ -10795,27 +10909,26 @@
   public abstract class Conference extends android.telecom.Conferenceable {
     method @Deprecated public final android.telecom.AudioState getAudioState();
     method @Deprecated public final long getConnectTimeMillis();
-    method public final long getConnectionStartElapsedRealTime();
     method public android.telecom.Connection getPrimaryConnection();
     method @NonNull public final String getTelecomCallId();
     method @Deprecated public void onAudioStateChanged(android.telecom.AudioState);
-    method public final void setAddress(@NonNull android.net.Uri, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setAddress(@NonNull android.net.Uri, int);
     method public final void setCallerDisplayName(@NonNull String, int);
-    method public void setConferenceState(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setConferenceState(boolean);
     method @Deprecated public final void setConnectTimeMillis(long);
   }
 
   public abstract class Connection extends android.telecom.Conferenceable {
     method @Deprecated public final android.telecom.AudioState getAudioState();
-    method public final long getConnectElapsedTimeMillis();
-    method public final long getConnectTimeMillis();
+    method @IntRange(from=0) public final long getConnectTimeMillis();
+    method public final long getConnectionStartElapsedRealtimeMillis();
     method @Nullable public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
     method @Nullable public final String getTelecomCallId();
     method @Deprecated public void onAudioStateChanged(android.telecom.AudioState);
     method public final void resetConnectionTime();
     method public void setCallDirection(int);
-    method public final void setConnectTimeMillis(long);
-    method public final void setConnectionStartElapsedRealTime(long);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectTimeMillis(@IntRange(from=0) long);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectionStartElapsedRealtimeMillis(long);
     method public void setPhoneAccountHandle(@NonNull android.telecom.PhoneAccountHandle);
     method public void setTelecomCallId(@NonNull String);
     field public static final int CAPABILITY_CONFERENCE_HAS_NO_CHILDREN = 2097152; // 0x200000
@@ -10974,7 +11087,7 @@
   }
 
   public static class PhoneAccount.Builder {
-    method @NonNull public android.telecom.PhoneAccount.Builder setGroupId(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telecom.PhoneAccount.Builder setGroupId(@NonNull String);
   }
 
   public class PhoneAccountSuggestionService extends android.app.Service {
@@ -11049,7 +11162,7 @@
     method public int getCallState();
     method public android.telecom.PhoneAccountHandle getConnectionManager();
     method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCurrentTtyMode();
-    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getDefaultDialerPackage(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getDefaultDialerPackage(@NonNull android.os.UserHandle);
     method @Deprecated public android.content.ComponentName getDefaultPhoneApp();
     method public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsForPackage();
     method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsSupportingScheme(String);
@@ -12420,7 +12533,6 @@
     field public static final int CDMA_SUBSCRIPTION_RUIM_SIM = 0; // 0x0
     field public static final int CDMA_SUBSCRIPTION_UNKNOWN = -1; // 0xffffffff
     field public static final int CHANGE_ICC_LOCK_SUCCESS = 2147483647; // 0x7fffffff
-    field public static final int DEFAULT_PREFERRED_NETWORK_MODE = 0; // 0x0
     field public static final String EXTRA_ANOMALY_DESCRIPTION = "android.telephony.extra.ANOMALY_DESCRIPTION";
     field public static final String EXTRA_ANOMALY_ID = "android.telephony.extra.ANOMALY_ID";
     field @Deprecated public static final String EXTRA_APN_PROTOCOL = "apnProto";
@@ -12514,6 +12626,7 @@
     method public void notifyDataActivityChanged(int, int);
     method public void notifyDataConnectionForSubscriber(int, int, int, @Nullable android.telephony.PreciseDataConnectionState);
     method public void notifyDisconnectCause(int, int, int, int);
+    method public void notifyDisplayInfoChanged(int, int, @NonNull android.telephony.DisplayInfo);
     method public void notifyEmergencyNumberList(int, int);
     method public void notifyImsDisconnectCause(int, @NonNull android.telephony.ims.ImsReasonInfo);
     method public void notifyMessageWaitingChanged(int, int, boolean);
@@ -12569,20 +12682,6 @@
     method public static final void setSmsFilterSettings(android.content.Context, android.telecom.PhoneAccountHandle, android.telephony.VisualVoicemailSmsFilterSettings);
   }
 
-  public final class WapPushManagerConnector {
-    ctor public WapPushManagerConnector(@NonNull android.content.Context);
-    method public boolean bindToWapPushManagerService();
-    method @Nullable public String getConnectedWapPushManagerServicePackage();
-    method public int processMessage(@NonNull String, @NonNull String, @NonNull android.content.Intent);
-    method public void unbindWapPushManagerService();
-    field public static final int RESULT_APP_QUERY_FAILED = 2; // 0x2
-    field public static final int RESULT_EXCEPTION_CAUGHT = 16; // 0x10
-    field public static final int RESULT_FURTHER_PROCESSING = 32768; // 0x8000
-    field public static final int RESULT_INVALID_RECEIVER_NAME = 8; // 0x8
-    field public static final int RESULT_MESSAGE_HANDLED = 1; // 0x1
-    field public static final int RESULT_SIGNATURE_NO_MATCH = 4; // 0x4
-  }
-
 }
 
 package android.telephony.cdma {
@@ -13142,19 +13241,7 @@
   }
 
   public class ImsRcsManager implements android.telephony.ims.RegistrationManager {
-    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getRegistrationState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
-    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getRegistrationTransportType(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
-    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isAvailable(int) throws android.telephony.ims.ImsException;
-    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isCapable(int, int) throws android.telephony.ims.ImsException;
-    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerImsRegistrationCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RegistrationManager.RegistrationCallback) throws android.telephony.ims.ImsException;
-    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerRcsAvailabilityCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsRcsManager.AvailabilityCallback) throws android.telephony.ims.ImsException;
-    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.RegistrationManager.RegistrationCallback);
-    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterRcsAvailabilityCallback(@NonNull android.telephony.ims.ImsRcsManager.AvailabilityCallback) throws android.telephony.ims.ImsException;
-  }
-
-  public static class ImsRcsManager.AvailabilityCallback {
-    ctor public ImsRcsManager.AvailabilityCallback();
-    method public void onAvailabilityChanged(@NonNull android.telephony.ims.feature.RcsFeature.RcsImsCapabilities);
+    method @NonNull public android.telephony.ims.RcsUceAdapter getUceAdapter();
   }
 
   public final class ImsReasonInfo implements android.os.Parcelable {
@@ -13533,34 +13620,8 @@
   }
 
   public class RcsUceAdapter {
-    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getUcePublishState() throws android.telephony.ims.ImsException;
     method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isUceSettingEnabled() throws android.telephony.ims.ImsException;
-    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void requestCapabilities(@NonNull java.util.concurrent.Executor, @NonNull java.util.List<android.net.Uri>, @NonNull android.telephony.ims.RcsUceAdapter.CapabilitiesCallback) throws android.telephony.ims.ImsException;
     method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUceSettingEnabled(boolean) throws android.telephony.ims.ImsException;
-    field public static final int ERROR_ALREADY_IN_QUEUE = 13; // 0xd
-    field public static final int ERROR_FORBIDDEN = 6; // 0x6
-    field public static final int ERROR_GENERIC_FAILURE = 1; // 0x1
-    field public static final int ERROR_INSUFFICIENT_MEMORY = 11; // 0xb
-    field public static final int ERROR_LOST_NETWORK = 12; // 0xc
-    field public static final int ERROR_NOT_AUTHORIZED = 5; // 0x5
-    field public static final int ERROR_NOT_AVAILABLE = 3; // 0x3
-    field public static final int ERROR_NOT_ENABLED = 2; // 0x2
-    field public static final int ERROR_NOT_FOUND = 7; // 0x7
-    field public static final int ERROR_NOT_REGISTERED = 4; // 0x4
-    field public static final int ERROR_REQUEST_TIMEOUT = 10; // 0xa
-    field public static final int ERROR_REQUEST_TOO_LARGE = 8; // 0x8
-    field public static final int PUBLISH_STATE_200_OK = 1; // 0x1
-    field public static final int PUBLISH_STATE_NOT_PUBLISHED = 2; // 0x2
-    field public static final int PUBLISH_STATE_OTHER_ERROR = 6; // 0x6
-    field public static final int PUBLISH_STATE_RCS_PROVISION_ERROR = 4; // 0x4
-    field public static final int PUBLISH_STATE_REQUEST_TIMEOUT = 5; // 0x5
-    field public static final int PUBLISH_STATE_VOLTE_PROVISION_ERROR = 3; // 0x3
-  }
-
-  public static class RcsUceAdapter.CapabilitiesCallback {
-    ctor public RcsUceAdapter.CapabilitiesCallback();
-    method public void onCapabilitiesReceived(@NonNull java.util.List<android.telephony.ims.RcsContactUceCapability>);
-    method public void onError(int);
   }
 
 }
@@ -13646,23 +13707,8 @@
   public class RcsFeature extends android.telephony.ims.feature.ImsFeature {
     ctor public RcsFeature();
     method public void changeEnabledCapabilities(@NonNull android.telephony.ims.feature.CapabilityChangeRequest, @NonNull android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
-    method @NonNull public android.telephony.ims.stub.RcsSipOptionsImplBase getOptionsExchangeImpl();
-    method @NonNull public android.telephony.ims.stub.RcsPresenceExchangeImplBase getPresenceExchangeImpl();
-    method public final void notifyCapabilitiesStatusChanged(@NonNull android.telephony.ims.feature.RcsFeature.RcsImsCapabilities);
     method public void onFeatureReady();
     method public void onFeatureRemoved();
-    method public boolean queryCapabilityConfiguration(int, int);
-    method @NonNull public final android.telephony.ims.feature.RcsFeature.RcsImsCapabilities queryCapabilityStatus();
-  }
-
-  public static class RcsFeature.RcsImsCapabilities extends android.telephony.ims.feature.ImsFeature.Capabilities {
-    ctor public RcsFeature.RcsImsCapabilities(int);
-    method public void addCapabilities(int);
-    method public boolean isCapable(int);
-    method public void removeCapabilities(int);
-    field public static final int CAPABILITY_TYPE_NONE = 0; // 0x0
-    field public static final int CAPABILITY_TYPE_OPTIONS_UCE = 1; // 0x1
-    field public static final int CAPABILITY_TYPE_PRESENCE_UCE = 2; // 0x2
   }
 
 }
@@ -13840,71 +13886,6 @@
     field public static final int INVALID_RESULT = -1; // 0xffffffff
   }
 
-  public class RcsCapabilityExchange {
-    ctor public RcsCapabilityExchange();
-    method public final void onCommandUpdate(int, int) throws android.telephony.ims.ImsException;
-    field public static final int COMMAND_CODE_FETCH_ERROR = 4; // 0x4
-    field public static final int COMMAND_CODE_GENERIC_FAILURE = 2; // 0x2
-    field public static final int COMMAND_CODE_INSUFFICIENT_MEMORY = 6; // 0x6
-    field public static final int COMMAND_CODE_INVALID_PARAM = 3; // 0x3
-    field public static final int COMMAND_CODE_LOST_NETWORK_CONNECTION = 7; // 0x7
-    field public static final int COMMAND_CODE_NOT_FOUND = 9; // 0x9
-    field public static final int COMMAND_CODE_NOT_SUPPORTED = 8; // 0x8
-    field public static final int COMMAND_CODE_NO_CHANGE_IN_CAP = 11; // 0xb
-    field public static final int COMMAND_CODE_REQUEST_TIMEOUT = 5; // 0x5
-    field public static final int COMMAND_CODE_SERVICE_UNAVAILABLE = 10; // 0xa
-    field public static final int COMMAND_CODE_SERVICE_UNKNOWN = 0; // 0x0
-    field public static final int COMMAND_CODE_SUCCESS = 1; // 0x1
-  }
-
-  public class RcsPresenceExchangeImplBase extends android.telephony.ims.stub.RcsCapabilityExchange {
-    ctor public RcsPresenceExchangeImplBase();
-    method public final void onCapabilityRequestResponse(@NonNull java.util.List<android.telephony.ims.RcsContactUceCapability>, int) throws android.telephony.ims.ImsException;
-    method public final void onNetworkResponse(int, @NonNull String, int) throws android.telephony.ims.ImsException;
-    method public final void onNotifyUpdateCapabilites(int) throws android.telephony.ims.ImsException;
-    method public final void onUnpublish() throws android.telephony.ims.ImsException;
-    method public void requestCapabilities(@NonNull java.util.List<android.net.Uri>, int);
-    method public void updateCapabilities(@NonNull android.telephony.ims.RcsContactUceCapability, int);
-    field public static final int CAPABILITY_UPDATE_TRIGGER_ETAG_EXPIRED = 0; // 0x0
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_2G = 6; // 0x6
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_3G = 5; // 0x5
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_EHRPD = 3; // 0x3
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_HSPAPLUS = 4; // 0x4
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_IWLAN = 8; // 0x8
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_LTE_VOPS_DISABLED = 1; // 0x1
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_LTE_VOPS_ENABLED = 2; // 0x2
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_NR5G_VOPS_DISABLED = 10; // 0xa
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_NR5G_VOPS_ENABLED = 11; // 0xb
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_WLAN = 7; // 0x7
-    field public static final int CAPABILITY_UPDATE_TRIGGER_UNKNOWN = 9; // 0x9
-    field public static final int RESPONSE_FORBIDDEN = 3; // 0x3
-    field public static final int RESPONSE_NOT_AUTHORIZED_FOR_PRESENCE = 2; // 0x2
-    field public static final int RESPONSE_NOT_FOUND = 4; // 0x4
-    field public static final int RESPONSE_NOT_REGISTERED = 1; // 0x1
-    field public static final int RESPONSE_SIP_INTERVAL_TOO_SHORT = 7; // 0x7
-    field public static final int RESPONSE_SIP_REQUEST_TIMEOUT = 5; // 0x5
-    field public static final int RESPONSE_SIP_SERVICE_UNAVAILABLE = 8; // 0x8
-    field public static final int RESPONSE_SUBSCRIBE_GENERIC_FAILURE = -1; // 0xffffffff
-    field public static final int RESPONSE_SUBSCRIBE_TOO_LARGE = 6; // 0x6
-    field public static final int RESPONSE_SUCCESS = 0; // 0x0
-  }
-
-  public class RcsSipOptionsImplBase extends android.telephony.ims.stub.RcsCapabilityExchange {
-    ctor public RcsSipOptionsImplBase();
-    method public final void onCapabilityRequestResponse(int, @NonNull String, @Nullable android.telephony.ims.RcsContactUceCapability, int) throws android.telephony.ims.ImsException;
-    method public final void onRemoteCapabilityRequest(@NonNull android.net.Uri, @NonNull android.telephony.ims.RcsContactUceCapability, int) throws android.telephony.ims.ImsException;
-    method public void respondToCapabilityRequest(@NonNull String, @NonNull android.telephony.ims.RcsContactUceCapability, int);
-    method public void respondToCapabilityRequestWithError(@NonNull android.net.Uri, int, @NonNull String, int);
-    method public void sendCapabilityRequest(@NonNull android.net.Uri, @NonNull android.telephony.ims.RcsContactUceCapability, int);
-    field public static final int RESPONSE_BAD_REQUEST = 5; // 0x5
-    field public static final int RESPONSE_DOES_NOT_EXIST_ANYWHERE = 4; // 0x4
-    field public static final int RESPONSE_GENERIC_FAILURE = -1; // 0xffffffff
-    field public static final int RESPONSE_NOT_FOUND = 3; // 0x3
-    field public static final int RESPONSE_REQUEST_TIMEOUT = 2; // 0x2
-    field public static final int RESPONSE_SUCCESS = 0; // 0x0
-    field public static final int RESPONSE_TEMPORARILY_UNAVAILABLE = 1; // 0x1
-  }
-
 }
 
 package android.telephony.mbms {
@@ -14126,6 +14107,10 @@
     method public boolean isContentCaptureFeatureEnabled();
   }
 
+  public abstract class ContentCaptureSession implements java.lang.AutoCloseable {
+    field public static final int NO_SESSION_ID = 0; // 0x0
+  }
+
   public final class ViewNode extends android.app.assist.AssistStructure.ViewNode {
     method @Nullable public android.view.autofill.AutofillId getParentAutofillId();
   }
diff --git a/api/system-lint-baseline.txt b/api/system-lint-baseline.txt
index 0caee6b..55333cf 100644
--- a/api/system-lint-baseline.txt
+++ b/api/system-lint-baseline.txt
@@ -206,7 +206,7 @@
     
 MutableBareField: android.net.wifi.WifiConfiguration#meteredOverride:
     
-MutableBareField: android.net.wifi.WifiConfiguration#requirePMF:
+MutableBareField: android.net.wifi.WifiConfiguration#requirePmf:
     
 MutableBareField: android.net.wifi.WifiConfiguration#saePasswordId:
     
@@ -234,7 +234,7 @@
     If implemented by developer, should follow the on<Something> style; otherwise consider marking final
 
 
-PairedRegistration: android.net.wifi.wificond.WifiCondManager#registerApCallback(String, java.util.concurrent.Executor, android.net.wifi.wificond.WifiCondManager.SoftApCallback):
+PairedRegistration: android.net.wifi.nl80211.WifiNl80211Manager#registerApCallback(String, java.util.concurrent.Executor, android.net.wifi.nl80211.WifiNl80211Manager.SoftApCallback):
     
 
 
diff --git a/api/test-current.txt b/api/test-current.txt
index d3e7ea1..8a0be69 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -15,6 +15,8 @@
     field public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
     field public static final String MANAGE_CRATES = "android.permission.MANAGE_CRATES";
     field public static final String MANAGE_ROLLBACKS = "android.permission.MANAGE_ROLLBACKS";
+    field public static final String NETWORK_SETTINGS = "android.permission.NETWORK_SETTINGS";
+    field public static final String NETWORK_STACK = "android.permission.NETWORK_STACK";
     field public static final String READ_CELL_BROADCASTS = "android.permission.READ_CELL_BROADCASTS";
     field public static final String REMOVE_TASKS = "android.permission.REMOVE_TASKS";
     field public static final String SUSPEND_APPS = "android.permission.SUSPEND_APPS";
@@ -163,6 +165,7 @@
   public class AppOpsManager {
     method @RequiresPermission("android.permission.MANAGE_APPOPS") public void addHistoricalOps(@NonNull android.app.AppOpsManager.HistoricalOps);
     method @RequiresPermission("android.permission.MANAGE_APPOPS") public void clearHistory();
+    method @Nullable @RequiresPermission("android.permission.GET_APP_OPS_STATS") public android.app.RuntimeAppOpAccessMessage collectRuntimeAppOpAccessMessage();
     method @RequiresPermission("android.permission.GET_APP_OPS_STATS") public void getHistoricalOps(@NonNull android.app.AppOpsManager.HistoricalOpsRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.AppOpsManager.HistoricalOps>);
     method @RequiresPermission("android.permission.MANAGE_APPOPS") public void getHistoricalOpsFromDiskRaw(@NonNull android.app.AppOpsManager.HistoricalOpsRequest, @Nullable java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.AppOpsManager.HistoricalOps>);
     method public static int getNumOps();
@@ -177,12 +180,15 @@
     method @RequiresPermission("android.permission.MANAGE_APPOPS") public void resetHistoryParameters();
     method @RequiresPermission("android.permission.MANAGE_APPOPS") public void setHistoryParameters(int, long, int);
     method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(int, int, String, int);
-    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(String, int, String, int);
-    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setUidMode(String, int, int);
+    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(@NonNull String, int, @Nullable String, int);
+    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setUidMode(@NonNull String, int, int);
     method public static int strOpToOp(@NonNull String);
     field public static final int HISTORICAL_MODE_DISABLED = 0; // 0x0
     field public static final int HISTORICAL_MODE_ENABLED_ACTIVE = 1; // 0x1
     field public static final int HISTORICAL_MODE_ENABLED_PASSIVE = 2; // 0x2
+    field public static final String KEY_BG_STATE_SETTLE_TIME = "bg_state_settle_time";
+    field public static final String KEY_FG_SERVICE_STATE_SETTLE_TIME = "fg_service_state_settle_time";
+    field public static final String KEY_TOP_STATE_SETTLE_TIME = "top_state_settle_time";
     field public static final String OPSTR_ACCEPT_HANDOVER = "android:accept_handover";
     field public static final String OPSTR_ACCESS_NOTIFICATIONS = "android:access_notifications";
     field public static final String OPSTR_ACTIVATE_VPN = "android:activate_vpn";
@@ -443,6 +449,19 @@
     method public android.graphics.Rect getSourceRectHint();
   }
 
+  public final class RuntimeAppOpAccessMessage implements android.os.Parcelable {
+    ctor public RuntimeAppOpAccessMessage(@IntRange(from=0L) int, @IntRange(from=0L) int, @NonNull String, @Nullable String, @NonNull String, int);
+    method public int describeContents();
+    method @Nullable public String getFeatureId();
+    method @NonNull public String getMessage();
+    method @NonNull public String getOp();
+    method @NonNull public String getPackageName();
+    method public int getSamplingStrategy();
+    method @IntRange(from=0L) public int getUid();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.RuntimeAppOpAccessMessage> CREATOR;
+  }
+
   public class StatusBarManager {
     method public void collapsePanels();
     method public void expandNotificationsPanel();
@@ -809,18 +828,27 @@
   public abstract class IntegrityFormula {
     method @NonNull public static android.content.integrity.IntegrityFormula all(@NonNull android.content.integrity.IntegrityFormula...);
     method @NonNull public static android.content.integrity.IntegrityFormula any(@NonNull android.content.integrity.IntegrityFormula...);
-    method @NonNull public android.content.integrity.IntegrityFormula equalTo(@NonNull String);
-    method @NonNull public android.content.integrity.IntegrityFormula equalTo(boolean);
-    method @NonNull public android.content.integrity.IntegrityFormula equalTo(long);
-    method @NonNull public android.content.integrity.IntegrityFormula greaterThan(long);
-    method @NonNull public android.content.integrity.IntegrityFormula greaterThanOrEquals(long);
     method @NonNull public static android.content.integrity.IntegrityFormula not(@NonNull android.content.integrity.IntegrityFormula);
-    field @NonNull public static final android.content.integrity.IntegrityFormula APP_CERTIFICATE;
-    field @NonNull public static final android.content.integrity.IntegrityFormula INSTALLER_CERTIFICATE;
-    field @NonNull public static final android.content.integrity.IntegrityFormula INSTALLER_NAME;
-    field @NonNull public static final android.content.integrity.IntegrityFormula PACKAGE_NAME;
-    field @NonNull public static final android.content.integrity.IntegrityFormula PRE_INSTALLED;
-    field @NonNull public static final android.content.integrity.IntegrityFormula VERSION_CODE;
+  }
+
+  public static final class IntegrityFormula.Application {
+    method @NonNull public static android.content.integrity.IntegrityFormula certificatesContain(@NonNull String);
+    method @NonNull public static android.content.integrity.IntegrityFormula isPreInstalled();
+    method @NonNull public static android.content.integrity.IntegrityFormula packageNameEquals(@NonNull String);
+    method @NonNull public static android.content.integrity.IntegrityFormula versionCodeEquals(@NonNull long);
+    method @NonNull public static android.content.integrity.IntegrityFormula versionCodeGreaterThan(@NonNull long);
+    method @NonNull public static android.content.integrity.IntegrityFormula versionCodeGreaterThanOrEqualTo(@NonNull long);
+  }
+
+  public static final class IntegrityFormula.Installer {
+    method @NonNull public static android.content.integrity.IntegrityFormula certificatesContain(@NonNull String);
+    method @NonNull public static android.content.integrity.IntegrityFormula notAllowedByManifest();
+    method @NonNull public static android.content.integrity.IntegrityFormula packageNameEquals(@NonNull String);
+  }
+
+  public static final class IntegrityFormula.SourceStamp {
+    method @NonNull public static android.content.integrity.IntegrityFormula notTrusted();
+    method @NonNull public static android.content.integrity.IntegrityFormula stampCertificateHashEquals(@NonNull String);
   }
 
   public final class Rule implements android.os.Parcelable {
@@ -920,6 +948,7 @@
     field public static final int FLAG_PERMISSION_USER_SET = 1; // 0x1
     field public static final int MATCH_FACTORY_ONLY = 2097152; // 0x200000
     field public static final int MATCH_KNOWN_PACKAGES = 4202496; // 0x402000
+    field public static final int MODULE_APEX_NAME = 1; // 0x1
     field public static final String SYSTEM_SHARED_LIBRARY_SERVICES = "android.ext.services";
     field public static final String SYSTEM_SHARED_LIBRARY_SHARED = "android.ext.shared";
   }
@@ -1330,7 +1359,7 @@
 
   public class Location implements android.os.Parcelable {
     method public void makeComplete();
-    field public static final String EXTRA_NO_GPS_LOCATION = "noGPSLocation";
+    field @Deprecated public static final String EXTRA_NO_GPS_LOCATION = "noGPSLocation";
   }
 
   public class LocationManager {
@@ -1633,7 +1662,7 @@
 
   public class CaptivePortal implements android.os.Parcelable {
     method public void logEvent(int, @NonNull String);
-    method public void reevaluateNetwork();
+    method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void reevaluateNetwork();
     method public void useNetwork();
     field public static final int APP_REQUEST_REEVALUATION_REQUIRED = 100; // 0x64
     field public static final int APP_RETURN_DISMISSED = 0; // 0x0
@@ -2442,8 +2471,8 @@
   }
 
   public class PowerWhitelistManager {
-    method @RequiresPermission("android.permission.DEVICE_POWER") public boolean addToWhitelist(@NonNull String);
-    method @RequiresPermission("android.permission.DEVICE_POWER") public int addToWhitelist(@NonNull java.util.List<java.lang.String>);
+    method @RequiresPermission("android.permission.DEVICE_POWER") public void addToWhitelist(@NonNull String);
+    method @RequiresPermission("android.permission.DEVICE_POWER") public void addToWhitelist(@NonNull java.util.List<java.lang.String>);
     method @RequiresPermission("android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST") public void whitelistAppTemporarily(@NonNull String, long);
     method @RequiresPermission("android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST") public long whitelistAppTemporarilyForEvent(@NonNull String, int, @NonNull String);
     field public static final int EVENT_MMS = 2; // 0x2
@@ -2536,6 +2565,7 @@
   }
 
   public class UserManager {
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.CREATE_USERS"}) public boolean hasBaseUserRestriction(@NonNull String, @NonNull android.os.UserHandle);
     method public static boolean isSplitSystemUser();
     field public static final String ACTION_USER_RESTRICTIONS_CHANGED = "android.os.action.USER_RESTRICTIONS_CHANGED";
   }
@@ -2600,6 +2630,17 @@
     field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationEffect.Waveform> CREATOR;
   }
 
+  public abstract class Vibrator {
+    method @RequiresPermission("android.permission.ACCESS_VIBRATOR_STATE") public void addVibratorStateListener(@NonNull android.os.Vibrator.OnVibratorStateChangedListener);
+    method @RequiresPermission("android.permission.ACCESS_VIBRATOR_STATE") public void addVibratorStateListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.Vibrator.OnVibratorStateChangedListener);
+    method @RequiresPermission("android.permission.ACCESS_VIBRATOR_STATE") public boolean isVibrating();
+    method @RequiresPermission("android.permission.ACCESS_VIBRATOR_STATE") public void removeVibratorStateListener(@NonNull android.os.Vibrator.OnVibratorStateChangedListener);
+  }
+
+  public static interface Vibrator.OnVibratorStateChangedListener {
+    method public void onVibratorStateChanged(boolean);
+  }
+
   public class VintfObject {
     method public static String[] getHalNamesAndVersions();
     method public static String getSepolicyVersion();
@@ -2941,6 +2982,9 @@
     field public static final String ENABLED_VR_LISTENERS = "enabled_vr_listeners";
     field public static final String LOCATION_ACCESS_CHECK_DELAY_MILLIS = "location_access_check_delay_millis";
     field public static final String LOCATION_ACCESS_CHECK_INTERVAL_MILLIS = "location_access_check_interval_millis";
+    field public static final String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS = "lock_screen_allow_private_notifications";
+    field public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS = "lock_screen_show_notifications";
+    field public static final String NFC_PAYMENT_DEFAULT_COMPONENT = "nfc_payment_default_component";
     field public static final String NOTIFICATION_BADGING = "notification_badging";
     field @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static final String SYNC_PARENT_SOUNDS = "sync_parent_sounds";
     field public static final String USER_SETUP_COMPLETE = "user_setup_complete";
@@ -3106,6 +3150,7 @@
   public abstract class InlineSuggestionRenderService extends android.app.Service {
     ctor public InlineSuggestionRenderService();
     method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method @Nullable public android.os.Bundle onGetInlineSuggestionsRendererInfo();
     method @Nullable public android.view.View onRenderSuggestion(@NonNull android.service.autofill.InlinePresentation, int, int);
     field public static final String SERVICE_INTERFACE = "android.service.autofill.InlineSuggestionRenderService";
   }
@@ -3167,6 +3212,7 @@
     method public void onConnected();
     method public void onDisconnected();
     method public void onFillRequest(@NonNull android.service.autofill.augmented.FillRequest, @NonNull android.os.CancellationSignal, @NonNull android.service.autofill.augmented.FillController, @NonNull android.service.autofill.augmented.FillCallback);
+    method public final boolean requestAutofill(@NonNull android.content.ComponentName, @NonNull android.view.autofill.AutofillId);
     field public static final String SERVICE_INTERFACE = "android.service.autofill.augmented.AugmentedAutofillService";
   }
 
@@ -3237,6 +3283,7 @@
     method public void onContentCaptureEvent(@NonNull android.view.contentcapture.ContentCaptureSessionId, @NonNull android.view.contentcapture.ContentCaptureEvent);
     method public void onCreateContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureContext, @NonNull android.view.contentcapture.ContentCaptureSessionId);
     method public void onDataRemovalRequest(@NonNull android.view.contentcapture.DataRemovalRequest);
+    method public void onDataShareRequest(@NonNull android.view.contentcapture.DataShareRequest, @NonNull android.service.contentcapture.DataShareCallback);
     method public void onDestroyContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureSessionId);
     method public void onDisconnected();
     method public final void setContentCaptureConditions(@NonNull String, @Nullable java.util.Set<android.view.contentcapture.ContentCaptureCondition>);
@@ -3245,6 +3292,16 @@
     field public static final String SERVICE_META_DATA = "android.content_capture";
   }
 
+  public interface DataShareCallback {
+    method public void onAccept(@NonNull java.util.concurrent.Executor, @NonNull android.service.contentcapture.DataShareReadAdapter);
+    method public void onReject();
+  }
+
+  public interface DataShareReadAdapter {
+    method public void onError(int);
+    method public void onStart(@NonNull android.os.ParcelFileDescriptor);
+  }
+
   public final class SnapshotData implements android.os.Parcelable {
     method public int describeContents();
     method @Nullable public android.app.assist.AssistContent getAssistContent();
@@ -3353,6 +3410,34 @@
 
 }
 
+package android.service.quickaccesswallet {
+
+  public interface QuickAccessWalletClient {
+    method public void addWalletServiceEventListener(@NonNull android.service.quickaccesswallet.QuickAccessWalletClient.WalletServiceEventListener);
+    method @NonNull public static android.service.quickaccesswallet.QuickAccessWalletClient create(@NonNull android.content.Context);
+    method @Nullable public android.content.Intent createWalletIntent();
+    method @Nullable public android.content.Intent createWalletSettingsIntent();
+    method public void disconnect();
+    method public void getWalletCards(@NonNull android.service.quickaccesswallet.GetWalletCardsRequest, @NonNull android.service.quickaccesswallet.QuickAccessWalletClient.OnWalletCardsRetrievedCallback);
+    method public boolean isWalletFeatureAvailable();
+    method public boolean isWalletFeatureAvailableWhenDeviceLocked();
+    method public boolean isWalletServiceAvailable();
+    method public void notifyWalletDismissed();
+    method public void removeWalletServiceEventListener(@NonNull android.service.quickaccesswallet.QuickAccessWalletClient.WalletServiceEventListener);
+    method public void selectWalletCard(@NonNull android.service.quickaccesswallet.SelectWalletCardRequest);
+  }
+
+  public static interface QuickAccessWalletClient.OnWalletCardsRetrievedCallback {
+    method public void onWalletCardRetrievalError(@NonNull android.service.quickaccesswallet.GetWalletCardsError);
+    method public void onWalletCardsRetrieved(@NonNull android.service.quickaccesswallet.GetWalletCardsResponse);
+  }
+
+  public static interface QuickAccessWalletClient.WalletServiceEventListener {
+    method public void onWalletServiceEvent(@NonNull android.service.quickaccesswallet.WalletServiceEvent);
+  }
+
+}
+
 package android.service.quicksettings {
 
   public class TileService extends android.app.Service {
@@ -3409,23 +3494,22 @@
   }
 
   public abstract class Conference extends android.telecom.Conferenceable {
-    method public final long getConnectionStartElapsedRealTime();
     method public android.telecom.Connection getPrimaryConnection();
     method @NonNull public final String getTelecomCallId();
-    method public final void setAddress(@NonNull android.net.Uri, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setAddress(@NonNull android.net.Uri, int);
     method public final void setCallerDisplayName(@NonNull String, int);
-    method public void setConferenceState(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setConferenceState(boolean);
   }
 
   public abstract class Connection extends android.telecom.Conferenceable {
-    method public final long getConnectElapsedTimeMillis();
-    method public final long getConnectTimeMillis();
+    method @IntRange(from=0) public final long getConnectTimeMillis();
+    method public final long getConnectionStartElapsedRealtimeMillis();
     method @Nullable public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
     method @Nullable public final String getTelecomCallId();
     method public final void resetConnectionTime();
     method public void setCallDirection(int);
-    method public final void setConnectTimeMillis(long);
-    method public final void setConnectionStartElapsedRealTime(long);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectTimeMillis(@IntRange(from=0) long);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectionStartElapsedRealtimeMillis(long);
     method public void setPhoneAccountHandle(@NonNull android.telecom.PhoneAccountHandle);
     method public void setTelecomCallId(@NonNull String);
     field public static final int CAPABILITY_CONFERENCE_HAS_NO_CHILDREN = 2097152; // 0x200000
@@ -3457,7 +3541,7 @@
   }
 
   public static class PhoneAccount.Builder {
-    method @NonNull public android.telecom.PhoneAccount.Builder setGroupId(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telecom.PhoneAccount.Builder setGroupId(@NonNull String);
   }
 
   public class PhoneAccountSuggestionService extends android.app.Service {
@@ -3471,7 +3555,7 @@
   public class TelecomManager {
     method @NonNull @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public java.util.List<android.telecom.PhoneAccountHandle> getCallCapablePhoneAccounts(boolean);
     method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public int getCurrentTtyMode();
-    method @Nullable @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getDefaultDialerPackage(int);
+    method @Nullable @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getDefaultDialerPackage(@NonNull android.os.UserHandle);
     method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall();
     method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(@Nullable android.telecom.PhoneAccountHandle);
     field public static final int TTY_MODE_FULL = 1; // 0x1
@@ -3689,6 +3773,7 @@
     method public void notifyDataActivityChanged(int, int);
     method public void notifyDataConnectionForSubscriber(int, int, int, @Nullable android.telephony.PreciseDataConnectionState);
     method public void notifyDisconnectCause(int, int, int, int);
+    method public void notifyDisplayInfoChanged(int, int, @NonNull android.telephony.DisplayInfo);
     method public void notifyEmergencyNumberList(int, int);
     method public void notifyImsDisconnectCause(int, @NonNull android.telephony.ims.ImsReasonInfo);
     method public void notifyMessageWaitingChanged(int, int, boolean);
@@ -3956,19 +4041,7 @@
   }
 
   public class ImsRcsManager implements android.telephony.ims.RegistrationManager {
-    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void getRegistrationState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
-    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void getRegistrationTransportType(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
-    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public boolean isAvailable(int) throws android.telephony.ims.ImsException;
-    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public boolean isCapable(int, int) throws android.telephony.ims.ImsException;
-    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void registerImsRegistrationCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RegistrationManager.RegistrationCallback) throws android.telephony.ims.ImsException;
-    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void registerRcsAvailabilityCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsRcsManager.AvailabilityCallback) throws android.telephony.ims.ImsException;
-    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.RegistrationManager.RegistrationCallback);
-    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void unregisterRcsAvailabilityCallback(@NonNull android.telephony.ims.ImsRcsManager.AvailabilityCallback) throws android.telephony.ims.ImsException;
-  }
-
-  public static class ImsRcsManager.AvailabilityCallback {
-    ctor public ImsRcsManager.AvailabilityCallback();
-    method public void onAvailabilityChanged(@NonNull android.telephony.ims.feature.RcsFeature.RcsImsCapabilities);
+    method @NonNull public android.telephony.ims.RcsUceAdapter getUceAdapter();
   }
 
   public class ImsService extends android.app.Service {
@@ -4343,34 +4416,8 @@
   }
 
   public class RcsUceAdapter {
-    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public int getUcePublishState() throws android.telephony.ims.ImsException;
     method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public boolean isUceSettingEnabled() throws android.telephony.ims.ImsException;
-    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void requestCapabilities(@NonNull java.util.concurrent.Executor, @NonNull java.util.List<android.net.Uri>, @NonNull android.telephony.ims.RcsUceAdapter.CapabilitiesCallback) throws android.telephony.ims.ImsException;
     method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUceSettingEnabled(boolean) throws android.telephony.ims.ImsException;
-    field public static final int ERROR_ALREADY_IN_QUEUE = 13; // 0xd
-    field public static final int ERROR_FORBIDDEN = 6; // 0x6
-    field public static final int ERROR_GENERIC_FAILURE = 1; // 0x1
-    field public static final int ERROR_INSUFFICIENT_MEMORY = 11; // 0xb
-    field public static final int ERROR_LOST_NETWORK = 12; // 0xc
-    field public static final int ERROR_NOT_AUTHORIZED = 5; // 0x5
-    field public static final int ERROR_NOT_AVAILABLE = 3; // 0x3
-    field public static final int ERROR_NOT_ENABLED = 2; // 0x2
-    field public static final int ERROR_NOT_FOUND = 7; // 0x7
-    field public static final int ERROR_NOT_REGISTERED = 4; // 0x4
-    field public static final int ERROR_REQUEST_TIMEOUT = 10; // 0xa
-    field public static final int ERROR_REQUEST_TOO_LARGE = 8; // 0x8
-    field public static final int PUBLISH_STATE_200_OK = 1; // 0x1
-    field public static final int PUBLISH_STATE_NOT_PUBLISHED = 2; // 0x2
-    field public static final int PUBLISH_STATE_OTHER_ERROR = 6; // 0x6
-    field public static final int PUBLISH_STATE_RCS_PROVISION_ERROR = 4; // 0x4
-    field public static final int PUBLISH_STATE_REQUEST_TIMEOUT = 5; // 0x5
-    field public static final int PUBLISH_STATE_VOLTE_PROVISION_ERROR = 3; // 0x3
-  }
-
-  public static class RcsUceAdapter.CapabilitiesCallback {
-    ctor public RcsUceAdapter.CapabilitiesCallback();
-    method public void onCapabilitiesReceived(@NonNull java.util.List<android.telephony.ims.RcsContactUceCapability>);
-    method public void onError(int);
   }
 
 }
@@ -4456,23 +4503,8 @@
   public class RcsFeature extends android.telephony.ims.feature.ImsFeature {
     ctor public RcsFeature();
     method public void changeEnabledCapabilities(@NonNull android.telephony.ims.feature.CapabilityChangeRequest, @NonNull android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
-    method @NonNull public android.telephony.ims.stub.RcsSipOptionsImplBase getOptionsExchangeImpl();
-    method @NonNull public android.telephony.ims.stub.RcsPresenceExchangeImplBase getPresenceExchangeImpl();
-    method public final void notifyCapabilitiesStatusChanged(@NonNull android.telephony.ims.feature.RcsFeature.RcsImsCapabilities);
     method public void onFeatureReady();
     method public void onFeatureRemoved();
-    method public boolean queryCapabilityConfiguration(int, int);
-    method @NonNull public final android.telephony.ims.feature.RcsFeature.RcsImsCapabilities queryCapabilityStatus();
-  }
-
-  public static class RcsFeature.RcsImsCapabilities extends android.telephony.ims.feature.ImsFeature.Capabilities {
-    ctor public RcsFeature.RcsImsCapabilities(int);
-    method public void addCapabilities(int);
-    method public boolean isCapable(int);
-    method public void removeCapabilities(int);
-    field public static final int CAPABILITY_TYPE_NONE = 0; // 0x0
-    field public static final int CAPABILITY_TYPE_OPTIONS_UCE = 1; // 0x1
-    field public static final int CAPABILITY_TYPE_PRESENCE_UCE = 2; // 0x2
   }
 
 }
@@ -4650,71 +4682,6 @@
     field public static final int INVALID_RESULT = -1; // 0xffffffff
   }
 
-  public class RcsCapabilityExchange {
-    ctor public RcsCapabilityExchange();
-    method public final void onCommandUpdate(int, int) throws android.telephony.ims.ImsException;
-    field public static final int COMMAND_CODE_FETCH_ERROR = 4; // 0x4
-    field public static final int COMMAND_CODE_GENERIC_FAILURE = 2; // 0x2
-    field public static final int COMMAND_CODE_INSUFFICIENT_MEMORY = 6; // 0x6
-    field public static final int COMMAND_CODE_INVALID_PARAM = 3; // 0x3
-    field public static final int COMMAND_CODE_LOST_NETWORK_CONNECTION = 7; // 0x7
-    field public static final int COMMAND_CODE_NOT_FOUND = 9; // 0x9
-    field public static final int COMMAND_CODE_NOT_SUPPORTED = 8; // 0x8
-    field public static final int COMMAND_CODE_NO_CHANGE_IN_CAP = 11; // 0xb
-    field public static final int COMMAND_CODE_REQUEST_TIMEOUT = 5; // 0x5
-    field public static final int COMMAND_CODE_SERVICE_UNAVAILABLE = 10; // 0xa
-    field public static final int COMMAND_CODE_SERVICE_UNKNOWN = 0; // 0x0
-    field public static final int COMMAND_CODE_SUCCESS = 1; // 0x1
-  }
-
-  public class RcsPresenceExchangeImplBase extends android.telephony.ims.stub.RcsCapabilityExchange {
-    ctor public RcsPresenceExchangeImplBase();
-    method public final void onCapabilityRequestResponse(@NonNull java.util.List<android.telephony.ims.RcsContactUceCapability>, int) throws android.telephony.ims.ImsException;
-    method public final void onNetworkResponse(int, @NonNull String, int) throws android.telephony.ims.ImsException;
-    method public final void onNotifyUpdateCapabilites(int) throws android.telephony.ims.ImsException;
-    method public final void onUnpublish() throws android.telephony.ims.ImsException;
-    method public void requestCapabilities(@NonNull java.util.List<android.net.Uri>, int);
-    method public void updateCapabilities(@NonNull android.telephony.ims.RcsContactUceCapability, int);
-    field public static final int CAPABILITY_UPDATE_TRIGGER_ETAG_EXPIRED = 0; // 0x0
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_2G = 6; // 0x6
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_3G = 5; // 0x5
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_EHRPD = 3; // 0x3
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_HSPAPLUS = 4; // 0x4
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_IWLAN = 8; // 0x8
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_LTE_VOPS_DISABLED = 1; // 0x1
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_LTE_VOPS_ENABLED = 2; // 0x2
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_NR5G_VOPS_DISABLED = 10; // 0xa
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_NR5G_VOPS_ENABLED = 11; // 0xb
-    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_WLAN = 7; // 0x7
-    field public static final int CAPABILITY_UPDATE_TRIGGER_UNKNOWN = 9; // 0x9
-    field public static final int RESPONSE_FORBIDDEN = 3; // 0x3
-    field public static final int RESPONSE_NOT_AUTHORIZED_FOR_PRESENCE = 2; // 0x2
-    field public static final int RESPONSE_NOT_FOUND = 4; // 0x4
-    field public static final int RESPONSE_NOT_REGISTERED = 1; // 0x1
-    field public static final int RESPONSE_SIP_INTERVAL_TOO_SHORT = 7; // 0x7
-    field public static final int RESPONSE_SIP_REQUEST_TIMEOUT = 5; // 0x5
-    field public static final int RESPONSE_SIP_SERVICE_UNAVAILABLE = 8; // 0x8
-    field public static final int RESPONSE_SUBSCRIBE_GENERIC_FAILURE = -1; // 0xffffffff
-    field public static final int RESPONSE_SUBSCRIBE_TOO_LARGE = 6; // 0x6
-    field public static final int RESPONSE_SUCCESS = 0; // 0x0
-  }
-
-  public class RcsSipOptionsImplBase extends android.telephony.ims.stub.RcsCapabilityExchange {
-    ctor public RcsSipOptionsImplBase();
-    method public final void onCapabilityRequestResponse(int, @NonNull String, @Nullable android.telephony.ims.RcsContactUceCapability, int) throws android.telephony.ims.ImsException;
-    method public final void onRemoteCapabilityRequest(@NonNull android.net.Uri, @NonNull android.telephony.ims.RcsContactUceCapability, int) throws android.telephony.ims.ImsException;
-    method public void respondToCapabilityRequest(@NonNull String, @NonNull android.telephony.ims.RcsContactUceCapability, int);
-    method public void respondToCapabilityRequestWithError(@NonNull android.net.Uri, int, @NonNull String, int);
-    method public void sendCapabilityRequest(@NonNull android.net.Uri, @NonNull android.telephony.ims.RcsContactUceCapability, int);
-    field public static final int RESPONSE_BAD_REQUEST = 5; // 0x5
-    field public static final int RESPONSE_DOES_NOT_EXIST_ANYWHERE = 4; // 0x4
-    field public static final int RESPONSE_GENERIC_FAILURE = -1; // 0xffffffff
-    field public static final int RESPONSE_NOT_FOUND = 3; // 0x3
-    field public static final int RESPONSE_REQUEST_TIMEOUT = 2; // 0x2
-    field public static final int RESPONSE_SUCCESS = 0; // 0x0
-    field public static final int RESPONSE_TEMPORARILY_UNAVAILABLE = 1; // 0x1
-  }
-
 }
 
 package android.telephony.mbms {
diff --git a/cmds/bootanimation/Android.bp b/cmds/bootanimation/Android.bp
index 3e5877b..befb67b 100644
--- a/cmds/bootanimation/Android.bp
+++ b/cmds/bootanimation/Android.bp
@@ -41,6 +41,10 @@
     ],
 
     init_rc: ["bootanim.rc"],
+
+    cflags: [
+        "-Wno-deprecated-declarations",
+    ],
 }
 
 // libbootanimation
diff --git a/cmds/idmap2/Android.bp b/cmds/idmap2/Android.bp
index 41a1706..66f5c39 100644
--- a/cmds/idmap2/Android.bp
+++ b/cmds/idmap2/Android.bp
@@ -146,6 +146,7 @@
     host_supported: true,
     srcs: [
         "idmap2/Create.cpp",
+        "idmap2/CreateMultiple.cpp",
         "idmap2/Dump.cpp",
         "idmap2/Lookup.cpp",
         "idmap2/Main.cpp",
diff --git a/cmds/idmap2/idmap2/Commands.h b/cmds/idmap2/idmap2/Commands.h
index 718e361..e626738 100644
--- a/cmds/idmap2/idmap2/Commands.h
+++ b/cmds/idmap2/idmap2/Commands.h
@@ -23,6 +23,7 @@
 #include "idmap2/Result.h"
 
 android::idmap2::Result<android::idmap2::Unit> Create(const std::vector<std::string>& args);
+android::idmap2::Result<android::idmap2::Unit> CreateMultiple(const std::vector<std::string>& args);
 android::idmap2::Result<android::idmap2::Unit> Dump(const std::vector<std::string>& args);
 android::idmap2::Result<android::idmap2::Unit> Lookup(const std::vector<std::string>& args);
 android::idmap2::Result<android::idmap2::Unit> Scan(const std::vector<std::string>& args);
diff --git a/cmds/idmap2/idmap2/CreateMultiple.cpp b/cmds/idmap2/idmap2/CreateMultiple.cpp
new file mode 100644
index 0000000..0b0541f
--- /dev/null
+++ b/cmds/idmap2/idmap2/CreateMultiple.cpp
@@ -0,0 +1,144 @@
+/*
+ * 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.
+ */
+
+#include <sys/stat.h>   // umask
+#include <sys/types.h>  // umask
+
+#include <fstream>
+#include <memory>
+#include <ostream>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include "android-base/stringprintf.h"
+#include "idmap2/BinaryStreamVisitor.h"
+#include "idmap2/CommandLineOptions.h"
+#include "idmap2/FileUtils.h"
+#include "idmap2/Idmap.h"
+#include "idmap2/Policies.h"
+#include "idmap2/SysTrace.h"
+
+using android::ApkAssets;
+using android::base::StringPrintf;
+using android::idmap2::BinaryStreamVisitor;
+using android::idmap2::CommandLineOptions;
+using android::idmap2::Error;
+using android::idmap2::Idmap;
+using android::idmap2::PoliciesToBitmask;
+using android::idmap2::PolicyBitmask;
+using android::idmap2::PolicyFlags;
+using android::idmap2::Result;
+using android::idmap2::Unit;
+using android::idmap2::utils::kIdmapCacheDir;
+using android::idmap2::utils::kIdmapFilePermissionMask;
+using android::idmap2::utils::UidHasWriteAccessToPath;
+
+Result<Unit> CreateMultiple(const std::vector<std::string>& args) {
+  SYSTRACE << "CreateMultiple " << args;
+  std::string target_apk_path;
+  std::string idmap_dir = kIdmapCacheDir;
+  std::vector<std::string> overlay_apk_paths;
+  std::vector<std::string> policies;
+  bool ignore_overlayable = false;
+
+  const CommandLineOptions opts =
+      CommandLineOptions("idmap2 create-multiple")
+          .MandatoryOption("--target-apk-path",
+                           "input: path to apk which will have its resources overlaid",
+                           &target_apk_path)
+          .MandatoryOption("--overlay-apk-path",
+                           "input: path to apk which contains the new resource values",
+                           &overlay_apk_paths)
+          .OptionalOption("--idmap-dir",
+                          StringPrintf("output: path to the directory in which to write idmap file"
+                                       " (defaults to %s)",
+                                       kIdmapCacheDir),
+                          &idmap_dir)
+          .OptionalOption("--policy",
+                          "input: an overlayable policy this overlay fulfills"
+                          " (if none or supplied, the overlay policy will default to \"public\")",
+                          &policies)
+          .OptionalFlag("--ignore-overlayable", "disables overlayable and policy checks",
+                        &ignore_overlayable);
+  const auto opts_ok = opts.Parse(args);
+  if (!opts_ok) {
+    return opts_ok.GetError();
+  }
+
+  PolicyBitmask fulfilled_policies = 0;
+  auto conv_result = PoliciesToBitmask(policies);
+  if (conv_result) {
+    fulfilled_policies |= *conv_result;
+  } else {
+    return conv_result.GetError();
+  }
+
+  if (fulfilled_policies == 0) {
+    fulfilled_policies |= PolicyFlags::POLICY_PUBLIC;
+  }
+
+  const std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path);
+  if (!target_apk) {
+    return Error("failed to load apk %s", target_apk_path.c_str());
+  }
+
+  std::vector<std::string> idmap_paths;
+  for (const std::string& overlay_apk_path : overlay_apk_paths) {
+    const std::string idmap_path = Idmap::CanonicalIdmapPathFor(idmap_dir, overlay_apk_path);
+    const uid_t uid = getuid();
+    if (!UidHasWriteAccessToPath(uid, idmap_path)) {
+      LOG(WARNING) << "uid " << uid << "does not have write access to " << idmap_path.c_str();
+      continue;
+    }
+
+    const std::unique_ptr<const ApkAssets> overlay_apk = ApkAssets::Load(overlay_apk_path);
+    if (!overlay_apk) {
+      LOG(WARNING) << "failed to load apk " << overlay_apk_path.c_str();
+      continue;
+    }
+
+    const auto idmap =
+        Idmap::FromApkAssets(*target_apk, *overlay_apk, fulfilled_policies, !ignore_overlayable);
+    if (!idmap) {
+      LOG(WARNING) << "failed to create idmap";
+      continue;
+    }
+
+    umask(kIdmapFilePermissionMask);
+    std::ofstream fout(idmap_path);
+    if (fout.fail()) {
+      LOG(WARNING) << "failed to open idmap path " << idmap_path.c_str();
+      continue;
+    }
+
+    BinaryStreamVisitor visitor(fout);
+    (*idmap)->accept(&visitor);
+    fout.close();
+    if (fout.fail()) {
+      LOG(WARNING) << "failed to write to idmap path %s" << idmap_path.c_str();
+      continue;
+    }
+
+    idmap_paths.emplace_back(idmap_path);
+  }
+
+  for (const std::string& idmap_path : idmap_paths) {
+    std::cout << idmap_path << std::endl;
+  }
+
+  return Unit{};
+}
diff --git a/cmds/idmap2/idmap2/Lookup.cpp b/cmds/idmap2/idmap2/Lookup.cpp
index c5cf980..c441709 100644
--- a/cmds/idmap2/idmap2/Lookup.cpp
+++ b/cmds/idmap2/idmap2/Lookup.cpp
@@ -85,11 +85,42 @@
   return Error("failed to obtain resource id for %s", res.c_str());
 }
 
-Result<std::string> WARN_UNUSED GetValue(const AssetManager2& am, ResourceId resid) {
+void PrintValue(AssetManager2* const am, const Res_value& value, const ApkAssetsCookie& cookie,
+                std::string* const out) {
+  switch (value.dataType) {
+    case Res_value::TYPE_INT_DEC:
+      out->append(StringPrintf("%d", value.data));
+      break;
+    case Res_value::TYPE_INT_HEX:
+      out->append(StringPrintf("0x%08x", value.data));
+      break;
+    case Res_value::TYPE_INT_BOOLEAN:
+      out->append(value.data != 0 ? "true" : "false");
+      break;
+    case Res_value::TYPE_STRING: {
+      const ResStringPool* pool = am->GetStringPoolForCookie(cookie);
+      out->append("\"");
+      size_t len;
+      if (pool->isUTF8()) {
+        const char* str = pool->string8At(value.data, &len);
+        out->append(str, len);
+      } else {
+        const char16_t* str16 = pool->stringAt(value.data, &len);
+        out->append(Utf16ToUtf8(StringPiece16(str16, len)));
+      }
+      out->append("\"");
+    } break;
+    default:
+      out->append(StringPrintf("dataType=0x%02x data=0x%08x", value.dataType, value.data));
+      break;
+  }
+}
+
+Result<std::string> WARN_UNUSED GetValue(AssetManager2* const am, ResourceId resid) {
   Res_value value;
   ResTable_config config;
   uint32_t flags;
-  ApkAssetsCookie cookie = am.GetResource(resid, false, 0, &value, &config, &flags);
+  ApkAssetsCookie cookie = am->GetResource(resid, true, 0, &value, &config, &flags);
   if (cookie == kInvalidCookie) {
     return Error("no resource 0x%08x in asset manager", resid);
   }
@@ -104,31 +135,37 @@
   out.append(config.toString().c_str());
   out.append("' value=");
 
-  switch (value.dataType) {
-    case Res_value::TYPE_INT_DEC:
-      out.append(StringPrintf("%d", value.data));
-      break;
-    case Res_value::TYPE_INT_HEX:
-      out.append(StringPrintf("0x%08x", value.data));
-      break;
-    case Res_value::TYPE_INT_BOOLEAN:
-      out.append(value.data != 0 ? "true" : "false");
-      break;
-    case Res_value::TYPE_STRING: {
-      const ResStringPool* pool = am.GetStringPoolForCookie(cookie);
-      size_t len;
-      if (pool->isUTF8()) {
-        const char* str = pool->string8At(value.data, &len);
-        out.append(str, len);
-      } else {
-        const char16_t* str16 = pool->stringAt(value.data, &len);
-        out += Utf16ToUtf8(StringPiece16(str16, len));
-      }
-    } break;
-    default:
+  if (value.dataType == Res_value::TYPE_REFERENCE) {
+    const android::ResolvedBag* bag = am->GetBag(static_cast<uint32_t>(value.data));
+    if (bag == nullptr) {
       out.append(StringPrintf("dataType=0x%02x data=0x%08x", value.dataType, value.data));
-      break;
+      return out;
+    }
+    out.append("[");
+    Res_value bag_val;
+    ResTable_config selected_config;
+    uint32_t flags;
+    uint32_t ref;
+    ApkAssetsCookie bag_cookie;
+    for (size_t i = 0; i < bag->entry_count; ++i) {
+      const android::ResolvedBag::Entry& entry = bag->entries[i];
+      bag_val = entry.value;
+      bag_cookie = am->ResolveReference(entry.cookie, &bag_val, &selected_config, &flags, &ref);
+      if (bag_cookie == kInvalidCookie) {
+        out.append(
+            StringPrintf("Error: dataType=0x%02x data=0x%08x", bag_val.dataType, bag_val.data));
+        continue;
+      }
+      PrintValue(am, bag_val, bag_cookie, &out);
+      if (i != bag->entry_count - 1) {
+        out.append(", ");
+      }
+    }
+    out.append("]");
+  } else {
+    PrintValue(am, value, cookie, &out);
   }
+
   return out;
 }
 
@@ -212,7 +249,7 @@
     return Error(resid.GetError(), "failed to parse resource ID");
   }
 
-  const Result<std::string> value = GetValue(am, *resid);
+  const Result<std::string> value = GetValue(&am, *resid);
   if (!value) {
     return Error(value.GetError(), "resource 0x%08x not found", *resid);
   }
diff --git a/cmds/idmap2/idmap2/Main.cpp b/cmds/idmap2/idmap2/Main.cpp
index 8794908..a07e793 100644
--- a/cmds/idmap2/idmap2/Main.cpp
+++ b/cmds/idmap2/idmap2/Main.cpp
@@ -53,7 +53,9 @@
 int main(int argc, char** argv) {
   SYSTRACE << "main";
   const NameToFunctionMap commands = {
-      {"create", Create}, {"dump", Dump}, {"lookup", Lookup}, {"scan", Scan}, {"verify", Verify},
+      {"create", Create}, {"create-multiple", CreateMultiple},
+      {"dump", Dump},     {"lookup", Lookup},
+      {"scan", Scan},     {"verify", Verify},
   };
   if (argc <= 1) {
     PrintUsage(commands, std::cerr);
diff --git a/cmds/idmap2/include/idmap2/ResourceUtils.h b/cmds/idmap2/include/idmap2/ResourceUtils.h
index de1dbc9..c643b0e 100644
--- a/cmds/idmap2/include/idmap2/ResourceUtils.h
+++ b/cmds/idmap2/include/idmap2/ResourceUtils.h
@@ -37,6 +37,10 @@
 
 namespace utils {
 
+// Returns whether the Res_value::data_type represents a dynamic or regular resource reference.
+bool IsReference(uint8_t data_type);
+
+// Converts the Res_value::data_type to a human-readable string representation.
 StringPiece DataTypeToString(uint8_t data_type);
 
 struct OverlayManifestInfo {
diff --git a/cmds/idmap2/libidmap2/ResourceMapping.cpp b/cmds/idmap2/libidmap2/ResourceMapping.cpp
index 4074789..43cfec3 100644
--- a/cmds/idmap2/libidmap2/ResourceMapping.cpp
+++ b/cmds/idmap2/libidmap2/ResourceMapping.cpp
@@ -27,6 +27,7 @@
 #include "idmap2/ResourceUtils.h"
 
 using android::base::StringPrintf;
+using android::idmap2::utils::IsReference;
 using android::idmap2::utils::ResToTypeEntryName;
 
 namespace android::idmap2 {
@@ -200,8 +201,7 @@
     // Only rewrite resources defined within the overlay package to their corresponding target
     // resource ids at runtime.
     bool rewrite_overlay_reference =
-        (overlay_resource->dataType == Res_value::TYPE_REFERENCE ||
-         overlay_resource->dataType == Res_value::TYPE_DYNAMIC_REFERENCE)
+        IsReference(overlay_resource->dataType)
             ? overlay_package_id == EXTRACT_PACKAGE(overlay_resource->data)
             : false;
 
@@ -331,8 +331,13 @@
   std::unique_ptr<uint8_t[]> string_pool_data;
   Result<ResourceMapping> resource_mapping = {{}};
   if (overlay_info.resource_mapping != 0U) {
+    // Use the dynamic reference table to find the assigned resource id of the map xml.
+    const auto& ref_table = overlay_asset_manager.GetDynamicRefTableForCookie(0);
+    uint32_t resource_mapping_id = overlay_info.resource_mapping;
+    ref_table->lookupResourceId(&resource_mapping_id);
+
     // Load the overlay resource mappings from the file specified using android:resourcesMap.
-    auto asset = OpenNonAssetFromResource(overlay_info.resource_mapping, overlay_asset_manager);
+    auto asset = OpenNonAssetFromResource(resource_mapping_id, overlay_asset_manager);
     if (!asset) {
       return Error("failed opening xml for android:resourcesMap: %s",
                    asset.GetErrorMessage().c_str());
@@ -404,8 +409,7 @@
 
   target_map_.insert(std::make_pair(target_resource, TargetValue{data_type, data_value}));
 
-  if (rewrite_overlay_reference &&
-      (data_type == Res_value::TYPE_REFERENCE || data_type == Res_value::TYPE_DYNAMIC_REFERENCE)) {
+  if (rewrite_overlay_reference && IsReference(data_type)) {
     overlay_map_.insert(std::make_pair(data_value, target_resource));
   }
 
@@ -421,8 +425,7 @@
   const TargetValue value = target_iter->second;
   target_map_.erase(target_iter);
 
-  if (value.data_type != Res_value::TYPE_REFERENCE &&
-      value.data_type != Res_value::TYPE_DYNAMIC_REFERENCE) {
+  if (!IsReference(value.data_type)) {
     return;
   }
 
diff --git a/cmds/idmap2/libidmap2/ResourceUtils.cpp b/cmds/idmap2/libidmap2/ResourceUtils.cpp
index a5df746..98d026b 100644
--- a/cmds/idmap2/libidmap2/ResourceUtils.cpp
+++ b/cmds/idmap2/libidmap2/ResourceUtils.cpp
@@ -33,6 +33,10 @@
 
 namespace android::idmap2::utils {
 
+bool IsReference(uint8_t data_type) {
+  return data_type == Res_value::TYPE_REFERENCE || data_type == Res_value::TYPE_DYNAMIC_REFERENCE;
+}
+
 StringPiece DataTypeToString(uint8_t data_type) {
   switch (data_type) {
     case Res_value::TYPE_NULL:
@@ -133,7 +137,7 @@
   }
 
   if (auto result_value = overlay_it->GetAttributeValue("resourcesMap")) {
-    if ((*result_value).dataType == Res_value::TYPE_REFERENCE) {
+    if (IsReference((*result_value).dataType)) {
       info.resource_mapping = (*result_value).data;
     } else {
       return Error("android:resourcesMap is not a reference in AndroidManifest.xml of %s",
diff --git a/cmds/idmap2/tests/FileUtilsTests.cpp b/cmds/idmap2/tests/FileUtilsTests.cpp
index f55acee..8af4037 100644
--- a/cmds/idmap2/tests/FileUtilsTests.cpp
+++ b/cmds/idmap2/tests/FileUtilsTests.cpp
@@ -56,12 +56,12 @@
     return type == DT_REG && path.size() > 4 && path.compare(path.size() - 4, 4, ".apk") == 0;
   });
   ASSERT_THAT(v, NotNull());
-  ASSERT_EQ(v->size(), 10U);
+  ASSERT_EQ(v->size(), 11U);
   ASSERT_EQ(std::set<std::string>(v->begin(), v->end()),
             std::set<std::string>(
                 {root + "/target/target.apk", root + "/target/target-no-overlayable.apk",
                  root + "/overlay/overlay.apk", root + "/overlay/overlay-no-name.apk",
-                 root + "/overlay/overlay-no-name-static.apk",
+                 root + "/overlay/overlay-no-name-static.apk", root + "/overlay/overlay-shared.apk",
                  root + "/overlay/overlay-static-1.apk", root + "/overlay/overlay-static-2.apk",
                  root + "/signature-overlay/signature-overlay.apk",
                  root + "/system-overlay/system-overlay.apk",
diff --git a/cmds/idmap2/tests/IdmapTests.cpp b/cmds/idmap2/tests/IdmapTests.cpp
index 4bc6255..a2c1560 100644
--- a/cmds/idmap2/tests/IdmapTests.cpp
+++ b/cmds/idmap2/tests/IdmapTests.cpp
@@ -247,6 +247,43 @@
   ASSERT_OVERLAY_ENTRY(overlay_entries[3], 0x7f020002, 0x7f02000f);
 }
 
+TEST(IdmapTests, CreateIdmapDataFromApkAssetsSharedLibOverlay) {
+  std::string target_apk_path = GetTestDataPath() + "/target/target.apk";
+  std::string overlay_apk_path = GetTestDataPath() + "/overlay/overlay-shared.apk";
+
+  std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path);
+  ASSERT_THAT(target_apk, NotNull());
+
+  std::unique_ptr<const ApkAssets> overlay_apk = ApkAssets::Load(overlay_apk_path);
+  ASSERT_THAT(overlay_apk, NotNull());
+
+  auto idmap_result = Idmap::FromApkAssets(*target_apk, *overlay_apk, PolicyFlags::POLICY_PUBLIC,
+                                           /* enforce_overlayable */ true);
+  ASSERT_TRUE(idmap_result) << idmap_result.GetErrorMessage();
+  auto& idmap = *idmap_result;
+  ASSERT_THAT(idmap, NotNull());
+
+  const std::vector<std::unique_ptr<const IdmapData>>& dataBlocks = idmap->GetData();
+  ASSERT_EQ(dataBlocks.size(), 1U);
+
+  const std::unique_ptr<const IdmapData>& data = dataBlocks[0];
+  ASSERT_THAT(data, NotNull());
+
+  const auto& target_entries = data->GetTargetEntries();
+  ASSERT_EQ(target_entries.size(), 4U);
+  ASSERT_TARGET_ENTRY(target_entries[0], 0x7f010000, Res_value::TYPE_DYNAMIC_REFERENCE, 0x00010000);
+  ASSERT_TARGET_ENTRY(target_entries[1], 0x7f02000c, Res_value::TYPE_DYNAMIC_REFERENCE, 0x00020000);
+  ASSERT_TARGET_ENTRY(target_entries[2], 0x7f02000e, Res_value::TYPE_DYNAMIC_REFERENCE, 0x00020001);
+  ASSERT_TARGET_ENTRY(target_entries[3], 0x7f02000f, Res_value::TYPE_DYNAMIC_REFERENCE, 0x00020002);
+
+  const auto& overlay_entries = data->GetOverlayEntries();
+  ASSERT_EQ(target_entries.size(), 4U);
+  ASSERT_OVERLAY_ENTRY(overlay_entries[0], 0x00010000, 0x7f010000);
+  ASSERT_OVERLAY_ENTRY(overlay_entries[1], 0x00020000, 0x7f02000c);
+  ASSERT_OVERLAY_ENTRY(overlay_entries[2], 0x00020001, 0x7f02000e);
+  ASSERT_OVERLAY_ENTRY(overlay_entries[3], 0x00020002, 0x7f02000f);
+}
+
 TEST(IdmapTests, CreateIdmapDataDoNotRewriteNonOverlayResourceId) {
   OverlayManifestInfo info{};
   info.target_package = "test.target";
diff --git a/cmds/idmap2/tests/data/overlay/build b/cmds/idmap2/tests/data/overlay/build
index b921b0d..114b099 100755
--- a/cmds/idmap2/tests/data/overlay/build
+++ b/cmds/idmap2/tests/data/overlay/build
@@ -51,4 +51,12 @@
     -o overlay-static-2.apk \
     compiled.flata
 
+aapt2 link \
+    --no-resource-removal \
+    --shared-lib \
+    -I "$FRAMEWORK_RES_APK" \
+    --manifest AndroidManifest.xml \
+    -o overlay-shared.apk \
+    compiled.flata
+
 rm compiled.flata
diff --git a/cmds/idmap2/tests/data/overlay/overlay-shared.apk b/cmds/idmap2/tests/data/overlay/overlay-shared.apk
new file mode 100644
index 0000000..93dcc82
--- /dev/null
+++ b/cmds/idmap2/tests/data/overlay/overlay-shared.apk
Binary files differ
diff --git a/cmds/statsd/Android.bp b/cmds/statsd/Android.bp
index 3a2472e..93522d4 100644
--- a/cmds/statsd/Android.bp
+++ b/cmds/statsd/Android.bp
@@ -44,12 +44,8 @@
 
 cc_defaults {
     name: "statsd_defaults",
-    aidl: {
-        include_dirs: ["frameworks/base/core/java"],
-    },
 
     srcs: [
-        ":statsd_aidl",
         "src/active_config_list.proto",
         "src/anomaly/AlarmMonitor.cpp",
         "src/anomaly/AlarmTracker.cpp",
@@ -109,31 +105,25 @@
         "src/uid_data.proto",
     ],
 
-    cflags: [
-        "-DNEW_ENCODING_SCHEME",
-    ],
-
     local_include_dirs: [
         "src",
     ],
 
     static_libs: [
-        "android.frameworks.stats@1.0",
         "libbase",
         "libcutils",
         "libprotoutil",
         "libstatslog",
         "libstatsmetadata",
         "libsysutils",
+        "libutils",
     ],
     shared_libs: [
-        "libbinder",
-        "libhidlbase",
+        "libbinder_ndk",
         "libincident",
         "liblog",
-        "libservices",
         "libstatssocket",
-        "libutils",
+        "statsd-aidl-ndk_platform",
     ],
 }
 
@@ -179,6 +169,11 @@
         "libcutils",
         "libstatslog",
     ],
+    apex_available: [
+        //TODO(b/149782403): Remove this once statsd no longer links against libstatsmetadata
+        "com.android.os.statsd",
+        "test_com.android.os.statsd",
+    ],
 }
 
 
@@ -222,8 +217,6 @@
 
     shared_libs: ["libgtest_prod"],
 
-    vintf_fragments: ["android.frameworks.stats@1.0-service.xml"],
-
     init_rc: ["statsd.rc"],
 }
 
@@ -324,55 +317,55 @@
 // statsd micro benchmark
 //#############################
 
-cc_benchmark {
-    name: "statsd_benchmark",
-    defaults: ["statsd_defaults"],
-
-    srcs: [
-        // atom_field_options.proto needs field_options.proto, but that is
-        // not included in libprotobuf-cpp-lite, so compile it here.
-        ":libprotobuf-internal-protos",
-
-        "benchmark/duration_metric_benchmark.cpp",
-        "benchmark/filter_value_benchmark.cpp",
-        "benchmark/get_dimensions_for_condition_benchmark.cpp",
-        "benchmark/hello_world_benchmark.cpp",
-        "benchmark/log_event_benchmark.cpp",
-        "benchmark/main.cpp",
-        "benchmark/metric_util.cpp",
-        "benchmark/stats_write_benchmark.cpp",
-        "src/atom_field_options.proto",
-        "src/atoms.proto",
-        "src/stats_log.proto",
-    ],
-
-    proto: {
-        type: "lite",
-        include_dirs: ["external/protobuf/src"],
-    },
-
-    cflags: [
-        "-Wall",
-        "-Werror",
-        "-Wno-unused-parameter",
-        "-Wno-unused-variable",
-        "-Wno-unused-function",
-
-        // Bug: http://b/29823425 Disable -Wvarargs for Clang update to r271374
-        "-Wno-varargs",
-    ],
-
-    static_libs: [
-        "libplatformprotos",
-    ],
-
-    shared_libs: [
-        "libgtest_prod",
-        "libprotobuf-cpp-lite",
-        "libstatslog",
-        "libstatssocket",
-    ],
-}
+//cc_benchmark {
+//    name: "statsd_benchmark",
+//    defaults: ["statsd_defaults"],
+//
+//    srcs: [
+//        // atom_field_options.proto needs field_options.proto, but that is
+//        // not included in libprotobuf-cpp-lite, so compile it here.
+//        ":libprotobuf-internal-protos",
+//
+//        "benchmark/duration_metric_benchmark.cpp",
+//        "benchmark/filter_value_benchmark.cpp",
+//        "benchmark/get_dimensions_for_condition_benchmark.cpp",
+//        "benchmark/hello_world_benchmark.cpp",
+//        "benchmark/log_event_benchmark.cpp",
+//        "benchmark/main.cpp",
+//        "benchmark/metric_util.cpp",
+//        "benchmark/stats_write_benchmark.cpp",
+//        "src/atom_field_options.proto",
+//        "src/atoms.proto",
+//        "src/stats_log.proto",
+//    ],
+//
+//    proto: {
+//        type: "lite",
+//        include_dirs: ["external/protobuf/src"],
+//    },
+//
+//    cflags: [
+//        "-Wall",
+//        "-Werror",
+//        "-Wno-unused-parameter",
+//        "-Wno-unused-variable",
+//        "-Wno-unused-function",
+//
+//        // Bug: http://b/29823425 Disable -Wvarargs for Clang update to r271374
+//        "-Wno-varargs",
+//    ],
+//
+//    static_libs: [
+//        "libplatformprotos",
+//    ],
+//
+//    shared_libs: [
+//        "libgtest_prod",
+//        "libprotobuf-cpp-lite",
+//        "libstatslog",
+//        "libstatssocket",
+//    ],
+//}
 
 // ====  java proto device library (for test only)  ==============================
 java_library {
diff --git a/cmds/statsd/android.frameworks.stats@1.0-service.xml b/cmds/statsd/android.frameworks.stats@1.0-service.xml
deleted file mode 100644
index bb02f66..0000000
--- a/cmds/statsd/android.frameworks.stats@1.0-service.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<manifest version="1.0" type="framework">
-    <hal>
-        <name>android.frameworks.stats</name>
-        <transport>hwbinder</transport>
-        <version>1.0</version>
-        <interface>
-            <name>IStats</name>
-            <instance>default</instance>
-        </interface>
-    </hal>
-</manifest>
diff --git a/cmds/statsd/src/HashableDimensionKey.cpp b/cmds/statsd/src/HashableDimensionKey.cpp
index 5b75b97..d95d594 100644
--- a/cmds/statsd/src/HashableDimensionKey.cpp
+++ b/cmds/statsd/src/HashableDimensionKey.cpp
@@ -25,6 +25,87 @@
 
 using std::string;
 using std::vector;
+using android::base::StringPrintf;
+
+// These constants must be kept in sync with those in StatsDimensionsValue.java
+const static int STATS_DIMENSIONS_VALUE_STRING_TYPE = 2;
+const static int STATS_DIMENSIONS_VALUE_INT_TYPE = 3;
+const static int STATS_DIMENSIONS_VALUE_LONG_TYPE = 4;
+// const static int STATS_DIMENSIONS_VALUE_BOOL_TYPE = 5; (commented out because
+// unused -- statsd does not correctly support bool types)
+const static int STATS_DIMENSIONS_VALUE_FLOAT_TYPE = 6;
+const static int STATS_DIMENSIONS_VALUE_TUPLE_TYPE = 7;
+
+/**
+ * Recursive helper function that populates a parent StatsDimensionsValueParcel
+ * with children StatsDimensionsValueParcels.
+ *
+ * \param dims vector of FieldValues stored by HashableDimensionKey
+ * \param index positions in dims vector to start reading children from
+ * \param depth level of parent parcel in the full StatsDimensionsValueParcel
+ * tree
+ */
+static void populateStatsDimensionsValueParcelChildren(StatsDimensionsValueParcel &parentParcel,
+                                                const vector<FieldValue>& dims, size_t& index,
+                                                int depth, int prefix) {
+    while (index < dims.size()) {
+        const FieldValue& dim = dims[index];
+        int fieldDepth = dim.mField.getDepth();
+        int fieldPrefix = dim.mField.getPrefix(depth);
+        StatsDimensionsValueParcel childParcel;
+        childParcel.field = dim.mField.getPosAtDepth(depth);
+        if (depth > 2) {
+            ALOGE("Depth > 2 not supported by StatsDimensionsValueParcel.");
+            return;
+        }
+        if (depth == fieldDepth && prefix == fieldPrefix) {
+            switch (dim.mValue.getType()) {
+                case INT:
+                    childParcel.valueType = STATS_DIMENSIONS_VALUE_INT_TYPE;
+                    childParcel.intValue = dim.mValue.int_value;
+                    break;
+                case LONG:
+                    childParcel.valueType = STATS_DIMENSIONS_VALUE_LONG_TYPE;
+                    childParcel.longValue = dim.mValue.long_value;
+                    break;
+                case FLOAT:
+                    childParcel.valueType = STATS_DIMENSIONS_VALUE_FLOAT_TYPE;
+                    childParcel.floatValue = dim.mValue.float_value;
+                    break;
+                case STRING:
+                    childParcel.valueType = STATS_DIMENSIONS_VALUE_STRING_TYPE;
+                    childParcel.stringValue = dim.mValue.str_value;
+                    break;
+                default:
+                    ALOGE("Encountered FieldValue with unsupported value type.");
+                    break;
+            }
+            index++;
+            parentParcel.tupleValue.push_back(childParcel);
+        } else if (fieldDepth > depth && fieldPrefix == prefix) {
+            childParcel.valueType = STATS_DIMENSIONS_VALUE_TUPLE_TYPE;
+            populateStatsDimensionsValueParcelChildren(childParcel, dims, index, depth + 1,
+                                                       dim.mField.getPrefix(depth + 1));
+            parentParcel.tupleValue.push_back(childParcel);
+        } else {
+            return;
+        }
+    }
+}
+
+StatsDimensionsValueParcel HashableDimensionKey::toStatsDimensionsValueParcel() const {
+    StatsDimensionsValueParcel parcel;
+    if (mValues.size() == 0) {
+        return parcel;
+    }
+
+    parcel.field = mValues[0].mField.getTag();
+    parcel.valueType = STATS_DIMENSIONS_VALUE_TUPLE_TYPE;
+
+    size_t index = 0;
+    populateStatsDimensionsValueParcelChildren(parcel, mValues, index, /*depth=*/0, /*prefix=*/0);
+    return parcel;
+}
 
 android::hash_t hashDimension(const HashableDimensionKey& value) {
     android::hash_t hash = 0;
diff --git a/cmds/statsd/src/HashableDimensionKey.h b/cmds/statsd/src/HashableDimensionKey.h
index 654e135..a766bba 100644
--- a/cmds/statsd/src/HashableDimensionKey.h
+++ b/cmds/statsd/src/HashableDimensionKey.h
@@ -16,17 +16,18 @@
 
 #pragma once
 
+#include <aidl/android/os/StatsDimensionsValueParcel.h>
 #include <utils/JenkinsHash.h>
 #include <vector>
-#include "FieldValue.h"
 #include "android-base/stringprintf.h"
+#include "FieldValue.h"
 #include "logd/LogEvent.h"
 
 namespace android {
 namespace os {
 namespace statsd {
 
-using android::base::StringPrintf;
+using ::aidl::android::os::StatsDimensionsValueParcel;
 
 struct Metric2Condition {
     int64_t conditionId;
@@ -69,6 +70,8 @@
         return nullptr;
     }
 
+    StatsDimensionsValueParcel toStatsDimensionsValueParcel() const;
+
     std::string toString() const;
 
     bool operator!=(const HashableDimensionKey& that) const;
diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp
index bde15a5..649c004 100644
--- a/cmds/statsd/src/StatsLogProcessor.cpp
+++ b/cmds/statsd/src/StatsLogProcessor.cpp
@@ -196,107 +196,192 @@
         !checkPermissionForIds(kPermissionUsage, pid, uid)) {
         return;
     }
-    status_t err = NO_ERROR, err2 = NO_ERROR, err3 = NO_ERROR, err4 = NO_ERROR;
-    string trainName = string(event->GetString(1 /*train name field id*/, &err));
-    int64_t trainVersionCode = event->GetLong(2 /*train version field id*/, &err2);
-    int32_t state = int32_t(event->GetLong(6 /*state field id*/, &err3));
-#ifdef NEW_ENCODING_SCHEME
+    // The Get* functions don't modify the status on success, they only write in
+    // failure statuses, so we can use one status variable for all calls then
+    // check if it is no longer NO_ERROR.
+    status_t err = NO_ERROR;
+    InstallTrainInfo trainInfo;
+    trainInfo.trainName = string(event->GetString(1 /*train name field id*/, &err));
+    trainInfo.trainVersionCode = event->GetLong(2 /*train version field id*/, &err);
+    trainInfo.requiresStaging = event->GetBool(3 /*requires staging field id*/, &err);
+    trainInfo.rollbackEnabled = event->GetBool(4 /*rollback enabled field id*/, &err);
+    trainInfo.requiresLowLatencyMonitor =
+            event->GetBool(5 /*requires low latency monitor field id*/, &err);
+    trainInfo.status = int32_t(event->GetLong(6 /*state field id*/, &err));
     std::vector<uint8_t> trainExperimentIdBytes =
-        event->GetStorage(7 /*experiment ids field id*/, &err4);
-#else
-    string trainExperimentIdString = event->GetString(7 /*experiment ids field id*/, &err4);
-#endif
-    if (err != NO_ERROR || err2 != NO_ERROR || err3 != NO_ERROR || err4 != NO_ERROR) {
+            event->GetStorage(7 /*experiment ids field id*/, &err);
+    bool is_rollback = event->GetBool(10 /*is rollback field id*/, &err);
+
+    if (err != NO_ERROR) {
         ALOGE("Failed to parse fields in binary push state changed log event");
         return;
     }
     ExperimentIds trainExperimentIds;
-#ifdef NEW_ENCODING_SCHEME
     if (!trainExperimentIds.ParseFromArray(trainExperimentIdBytes.data(),
                                            trainExperimentIdBytes.size())) {
-#else
-    if (!trainExperimentIds.ParseFromString(trainExperimentIdString)) {
-#endif
         ALOGE("Failed to parse experimentids in binary push state changed.");
         return;
     }
-    vector<int64_t> experimentIdVector = {trainExperimentIds.experiment_id().begin(),
-                                          trainExperimentIds.experiment_id().end()};
+    trainInfo.experimentIds = {trainExperimentIds.experiment_id().begin(),
+                               trainExperimentIds.experiment_id().end()};
+
     // Update the train info on disk and get any data the logevent is missing.
-    getAndUpdateTrainInfoOnDisk(
-        state, &trainVersionCode, &trainName, &experimentIdVector);
+    getAndUpdateTrainInfoOnDisk(is_rollback, &trainInfo);
 
     std::vector<uint8_t> trainExperimentIdProto;
-    writeExperimentIdsToProto(experimentIdVector, &trainExperimentIdProto);
+    writeExperimentIdsToProto(trainInfo.experimentIds, &trainExperimentIdProto);
     int32_t userId = multiuser_get_user_id(uid);
 
-    event->updateValue(1 /*train name field id*/, trainName, STRING);
-    event->updateValue(2 /*train version field id*/, trainVersionCode, LONG);
-#ifdef NEW_ENCODING_SCHEME
+    event->updateValue(2 /*train version field id*/, trainInfo.trainVersionCode, LONG);
     event->updateValue(7 /*experiment ids field id*/, trainExperimentIdProto, STORAGE);
-#else
-    event->updateValue(7 /*experiment ids field id*/, trainExperimentIdProto, STRING);
-#endif
     event->updateValue(8 /*user id field id*/, userId, INT);
+
+    // If this event is a rollback event, then the following bits in the event
+    // are invalid and we will need to update them with the values we pulled
+    // from disk.
+    if (is_rollback) {
+        int bit = trainInfo.requiresStaging ? 1 : 0;
+        event->updateValue(3 /*requires staging field id*/, bit, INT);
+        bit = trainInfo.rollbackEnabled ? 1 : 0;
+        event->updateValue(4 /*rollback enabled field id*/, bit, INT);
+        bit = trainInfo.requiresLowLatencyMonitor ? 1 : 0;
+        event->updateValue(5 /*requires low latency monitor field id*/, bit, INT);
+    }
 }
 
-void StatsLogProcessor::getAndUpdateTrainInfoOnDisk(int32_t state,
-                                         int64_t* trainVersionCode,
-                                         string* trainName,
-                                         std::vector<int64_t>* experimentIds) {
+void StatsLogProcessor::getAndUpdateTrainInfoOnDisk(bool is_rollback,
+                                                    InstallTrainInfo* trainInfo) {
+    // If the train name is empty, we don't know which train to attribute the
+    // event to, so return early.
+    if (trainInfo->trainName.empty()) {
+        return;
+    }
     bool readTrainInfoSuccess = false;
     InstallTrainInfo trainInfoOnDisk;
-    readTrainInfoSuccess = StorageManager::readTrainInfo(trainInfoOnDisk);
+    readTrainInfoSuccess = StorageManager::readTrainInfo(trainInfo->trainName, trainInfoOnDisk);
 
     bool resetExperimentIds = false;
     if (readTrainInfoSuccess) {
         // Keep the old train version if we received an empty version.
-        if (*trainVersionCode == -1) {
-            *trainVersionCode = trainInfoOnDisk.trainVersionCode;
-        } else if (*trainVersionCode != trainInfoOnDisk.trainVersionCode) {
-        // Reset experiment ids if we receive a new non-empty train version.
-            resetExperimentIds = true;
-        }
-
-        // Keep the old train name if we received an empty train name.
-        if (trainName->size() == 0) {
-            *trainName = trainInfoOnDisk.trainName;
-        } else if (*trainName != trainInfoOnDisk.trainName) {
-            // Reset experiment ids if we received a new valid train name.
+        if (trainInfo->trainVersionCode == -1) {
+            trainInfo->trainVersionCode = trainInfoOnDisk.trainVersionCode;
+        } else if (trainInfo->trainVersionCode != trainInfoOnDisk.trainVersionCode) {
+            // Reset experiment ids if we receive a new non-empty train version.
             resetExperimentIds = true;
         }
 
         // Reset if we received a different experiment id.
-        if (!experimentIds->empty() &&
-                (trainInfoOnDisk.experimentIds.empty() ||
-                 experimentIds->at(0) != trainInfoOnDisk.experimentIds[0])) {
+        if (!trainInfo->experimentIds.empty() &&
+            (trainInfoOnDisk.experimentIds.empty() ||
+             trainInfo->experimentIds.at(0) != trainInfoOnDisk.experimentIds[0])) {
             resetExperimentIds = true;
         }
     }
 
     // Find the right experiment IDs
-    if (!resetExperimentIds && readTrainInfoSuccess) {
-        *experimentIds = trainInfoOnDisk.experimentIds;
+    if ((!resetExperimentIds || is_rollback) && readTrainInfoSuccess) {
+        trainInfo->experimentIds = trainInfoOnDisk.experimentIds;
     }
 
-    if (!experimentIds->empty()) {
-        int64_t firstId = experimentIds->at(0);
-        switch (state) {
+    if (!trainInfo->experimentIds.empty()) {
+        int64_t firstId = trainInfo->experimentIds.at(0);
+        auto& ids = trainInfo->experimentIds;
+        switch (trainInfo->status) {
             case android::util::BINARY_PUSH_STATE_CHANGED__STATE__INSTALL_SUCCESS:
-                experimentIds->push_back(firstId + 1);
+                if (find(ids.begin(), ids.end(), firstId + 1) == ids.end()) {
+                    ids.push_back(firstId + 1);
+                }
                 break;
             case android::util::BINARY_PUSH_STATE_CHANGED__STATE__INSTALLER_ROLLBACK_INITIATED:
-                experimentIds->push_back(firstId + 2);
+                if (find(ids.begin(), ids.end(), firstId + 2) == ids.end()) {
+                    ids.push_back(firstId + 2);
+                }
                 break;
             case android::util::BINARY_PUSH_STATE_CHANGED__STATE__INSTALLER_ROLLBACK_SUCCESS:
-                experimentIds->push_back(firstId + 3);
+                if (find(ids.begin(), ids.end(), firstId + 3) == ids.end()) {
+                    ids.push_back(firstId + 3);
+                }
                 break;
         }
     }
 
-    StorageManager::writeTrainInfo(*trainVersionCode, *trainName, state, *experimentIds);
+    // If this event is a rollback event, the following fields are invalid and
+    // need to be replaced by the fields stored to disk.
+    if (is_rollback) {
+        trainInfo->requiresStaging = trainInfoOnDisk.requiresStaging;
+        trainInfo->rollbackEnabled = trainInfoOnDisk.rollbackEnabled;
+        trainInfo->requiresLowLatencyMonitor = trainInfoOnDisk.requiresLowLatencyMonitor;
+    }
+
+    StorageManager::writeTrainInfo(*trainInfo);
 }
 
+void StatsLogProcessor::onWatchdogRollbackOccurredLocked(LogEvent* event) {
+    pid_t pid = event->GetPid();
+    uid_t uid = event->GetUid();
+    if (!checkPermissionForIds(kPermissionDump, pid, uid) ||
+        !checkPermissionForIds(kPermissionUsage, pid, uid)) {
+        return;
+    }
+    // The Get* functions don't modify the status on success, they only write in
+    // failure statuses, so we can use one status variable for all calls then
+    // check if it is no longer NO_ERROR.
+    status_t err = NO_ERROR;
+    int32_t rollbackType = int32_t(event->GetInt(1 /*rollback type field id*/, &err));
+    string packageName = string(event->GetString(2 /*package name field id*/, &err));
+
+    if (err != NO_ERROR) {
+        ALOGE("Failed to parse fields in watchdog rollback occurred log event");
+        return;
+    }
+
+    vector<int64_t> experimentIds =
+        processWatchdogRollbackOccurred(rollbackType, packageName);
+    vector<uint8_t> experimentIdProto;
+    writeExperimentIdsToProto(experimentIds, &experimentIdProto);
+
+    event->updateValue(6 /*experiment ids field id*/, experimentIdProto, STORAGE);
+}
+
+vector<int64_t> StatsLogProcessor::processWatchdogRollbackOccurred(const int32_t rollbackTypeIn,
+                                                                    const string& packageNameIn) {
+    // If the package name is empty, we can't attribute it to any train, so
+    // return early.
+    if (packageNameIn.empty()) {
+      return vector<int64_t>();
+    }
+    bool readTrainInfoSuccess = false;
+    InstallTrainInfo trainInfoOnDisk;
+    // We use the package name of the event as the train name.
+    readTrainInfoSuccess = StorageManager::readTrainInfo(packageNameIn, trainInfoOnDisk);
+
+    if (!readTrainInfoSuccess) {
+        return vector<int64_t>();
+    }
+
+    if (trainInfoOnDisk.experimentIds.empty()) {
+        return vector<int64_t>();
+    }
+
+    int64_t firstId = trainInfoOnDisk.experimentIds[0];
+    auto& ids = trainInfoOnDisk.experimentIds;
+    switch (rollbackTypeIn) {
+        case android::util::WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE:
+            if (find(ids.begin(), ids.end(), firstId + 4) == ids.end()) {
+                ids.push_back(firstId + 4);
+            }
+            StorageManager::writeTrainInfo(trainInfoOnDisk);
+            break;
+        case android::util::WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS:
+            if (find(ids.begin(), ids.end(), firstId + 5) == ids.end()) {
+                ids.push_back(firstId + 5);
+            }
+            StorageManager::writeTrainInfo(trainInfoOnDisk);
+            break;
+    }
+
+    return trainInfoOnDisk.experimentIds;
+}
 
 void StatsLogProcessor::resetConfigs() {
     std::lock_guard<std::mutex> lock(mMetricsMutex);
@@ -321,7 +406,13 @@
     // Hard-coded logic to update train info on disk and fill in any information
     // this log event may be missing.
     if (event->GetTagId() == android::util::BINARY_PUSH_STATE_CHANGED) {
-      onBinaryPushStateChangedEventLocked(event);
+        onBinaryPushStateChangedEventLocked(event);
+    }
+
+    // Hard-coded logic to update experiment ids on disk for certain rollback
+    // types and fill the rollback atom with experiment ids
+    if (event->GetTagId() == android::util::WATCHDOG_ROLLBACK_OCCURRED) {
+        onWatchdogRollbackOccurredLocked(event);
     }
 
 #ifdef VERY_VERBOSE_PRINTING
diff --git a/cmds/statsd/src/StatsLogProcessor.h b/cmds/statsd/src/StatsLogProcessor.h
index c49f2e0..42e5676 100644
--- a/cmds/statsd/src/StatsLogProcessor.h
+++ b/cmds/statsd/src/StatsLogProcessor.h
@@ -18,6 +18,7 @@
 
 #include <gtest/gtest_prod.h>
 #include "config/ConfigListener.h"
+#include "logd/LogEvent.h"
 #include "metrics/MetricsManager.h"
 #include "packages/UidMap.h"
 #include "external/StatsPullerManager.h"
@@ -199,10 +200,18 @@
     // Handler over the binary push state changed event.
     void onBinaryPushStateChangedEventLocked(LogEvent* event);
 
+    // Handler over the watchdog rollback occurred event.
+    void onWatchdogRollbackOccurredLocked(LogEvent* event);
+
     // Updates train info on disk based on binary push state changed info and
     // write disk info into parameters.
-    void getAndUpdateTrainInfoOnDisk(int32_t state, int64_t* trainVersionCode,
-                                     string* trainName, std::vector<int64_t>* experimentIds);
+    void getAndUpdateTrainInfoOnDisk(bool is_rollback, InstallTrainInfo* trainInfoIn);
+
+    // Gets experiment ids on disk for associated train and updates them
+    // depending on rollback type. Then writes them back to disk and returns
+    // them.
+    std::vector<int64_t> processWatchdogRollbackOccurred(const int32_t rollbackTypeIn,
+                                                          const string& packageName);
 
     // Reset all configs.
     void resetConfigsLocked(const int64_t timestampNs);
diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp
index 0256e36..7ab6c71 100644
--- a/cmds/statsd/src/StatsService.cpp
+++ b/cmds/statsd/src/StatsService.cpp
@@ -28,8 +28,6 @@
 
 #include <android-base/file.h>
 #include <android-base/strings.h>
-#include <binder/IPCThreadState.h>
-#include <binder/PermissionController.h>
 #include <cutils/multiuser.h>
 #include <frameworks/base/cmds/statsd/src/statsd_config.pb.h>
 #include <frameworks/base/cmds/statsd/src/uid_data.pb.h>
@@ -47,85 +45,42 @@
 using android::util::FIELD_COUNT_REPEATED;
 using android::util::FIELD_TYPE_MESSAGE;
 
+using Status = ::ndk::ScopedAStatus;
+
 namespace android {
 namespace os {
 namespace statsd {
 
 constexpr const char* kPermissionDump = "android.permission.DUMP";
-constexpr const char* kPermissionUsage = "android.permission.PACKAGE_USAGE_STATS";
-
-constexpr const char* kOpUsage = "android:get_usage_stats";
 
 #define STATS_SERVICE_DIR "/data/misc/stats-service"
 
 // for StatsDataDumpProto
 const int FIELD_ID_REPORTS_LIST = 1;
 
-static binder::Status ok() {
-    return binder::Status::ok();
-}
-
-static binder::Status exception(uint32_t code, const std::string& msg) {
+static Status exception(int32_t code, const std::string& msg) {
     ALOGE("%s (%d)", msg.c_str(), code);
-    return binder::Status::fromExceptionCode(code, String8(msg.c_str()));
+    return ::ndk::ScopedAStatus(AStatus_fromExceptionCodeWithMessage(code, msg.c_str()));
 }
 
 static bool checkPermission(const char* permission) {
-    pid_t pid = IPCThreadState::self()->getCallingPid();
-    uid_t uid = IPCThreadState::self()->getCallingUid();
+    pid_t pid = AIBinder_getCallingPid();
+    uid_t uid = AIBinder_getCallingUid();
     return checkPermissionForIds(permission, pid, uid);
 }
 
-binder::Status checkUid(uid_t expectedUid) {
-    uid_t uid = IPCThreadState::self()->getCallingUid();
+Status checkUid(uid_t expectedUid) {
+    uid_t uid = AIBinder_getCallingUid();
     if (uid == expectedUid || uid == AID_ROOT) {
-        return ok();
+        return Status::ok();
     } else {
-        return exception(binder::Status::EX_SECURITY,
-                StringPrintf("UID %d is not expected UID %d", uid, expectedUid));
-    }
-}
-
-binder::Status checkDumpAndUsageStats(const String16& packageName) {
-    pid_t pid = IPCThreadState::self()->getCallingPid();
-    uid_t uid = IPCThreadState::self()->getCallingUid();
-
-    // Root, system, and shell always have access
-    if (uid == AID_ROOT || uid == AID_SYSTEM || uid == AID_SHELL) {
-        return ok();
-    }
-
-    // Caller must be granted these permissions
-    if (!checkPermission(kPermissionDump)) {
-        return exception(binder::Status::EX_SECURITY,
-                StringPrintf("UID %d / PID %d lacks permission %s", uid, pid, kPermissionDump));
-    }
-    if (!checkPermission(kPermissionUsage)) {
-        return exception(binder::Status::EX_SECURITY,
-                StringPrintf("UID %d / PID %d lacks permission %s", uid, pid, kPermissionUsage));
-    }
-
-    // Caller must also have usage stats op granted
-    PermissionController pc;
-    switch (pc.noteOp(String16(kOpUsage), uid, packageName)) {
-        case PermissionController::MODE_ALLOWED:
-        case PermissionController::MODE_DEFAULT:
-            return ok();
-        default:
-            return exception(binder::Status::EX_SECURITY,
-                    StringPrintf("UID %d / PID %d lacks app-op %s", uid, pid, kOpUsage));
+        return exception(EX_SECURITY,
+                         StringPrintf("UID %d is not expected UID %d", uid, expectedUid));
     }
 }
 
 #define ENFORCE_UID(uid) {                                        \
-    binder::Status status = checkUid((uid));                      \
-    if (!status.isOk()) {                                         \
-        return status;                                            \
-    }                                                             \
-}
-
-#define ENFORCE_DUMP_AND_USAGE_STATS(packageName) {               \
-    binder::Status status = checkDumpAndUsageStats(packageName);  \
+    Status status = checkUid((uid));                              \
     if (!status.isOk()) {                                         \
         return status;                                            \
     }                                                             \
@@ -134,13 +89,13 @@
 StatsService::StatsService(const sp<Looper>& handlerLooper, shared_ptr<LogEventQueue> queue)
     : mAnomalyAlarmMonitor(new AlarmMonitor(
               MIN_DIFF_TO_UPDATE_REGISTERED_ALARM_SECS,
-              [](const sp<IStatsCompanionService>& sc, int64_t timeMillis) {
+              [](const shared_ptr<IStatsCompanionService>& sc, int64_t timeMillis) {
                   if (sc != nullptr) {
                       sc->setAnomalyAlarm(timeMillis);
                       StatsdStats::getInstance().noteRegisteredAnomalyAlarmChanged();
                   }
               },
-              [](const sp<IStatsCompanionService>& sc) {
+              [](const shared_ptr<IStatsCompanionService>& sc) {
                   if (sc != nullptr) {
                       sc->cancelAnomalyAlarm();
                       StatsdStats::getInstance().noteRegisteredAnomalyAlarmChanged();
@@ -148,19 +103,21 @@
               })),
       mPeriodicAlarmMonitor(new AlarmMonitor(
               MIN_DIFF_TO_UPDATE_REGISTERED_ALARM_SECS,
-              [](const sp<IStatsCompanionService>& sc, int64_t timeMillis) {
+              [](const shared_ptr<IStatsCompanionService>& sc, int64_t timeMillis) {
                   if (sc != nullptr) {
                       sc->setAlarmForSubscriberTriggering(timeMillis);
                       StatsdStats::getInstance().noteRegisteredPeriodicAlarmChanged();
                   }
               },
-              [](const sp<IStatsCompanionService>& sc) {
+              [](const shared_ptr<IStatsCompanionService>& sc) {
                   if (sc != nullptr) {
                       sc->cancelAlarmForSubscriberTriggering();
                       StatsdStats::getInstance().noteRegisteredPeriodicAlarmChanged();
                   }
               })),
-      mEventQueue(queue) {
+      mEventQueue(queue),
+      mStatsCompanionServiceDeathRecipient(AIBinder_DeathRecipient_new(
+              StatsService::statsCompanionServiceDied)) {
     mUidMap = UidMap::getInstance();
     mPullerManager = new StatsPullerManager();
     StatsPuller::SetUidMap(mUidMap);
@@ -169,22 +126,20 @@
             mUidMap, mPullerManager, mAnomalyAlarmMonitor, mPeriodicAlarmMonitor,
             getElapsedRealtimeNs(),
             [this](const ConfigKey& key) {
-                sp<IPendingIntentRef> receiver = mConfigManager->GetConfigReceiver(key);
+                shared_ptr<IPendingIntentRef> receiver = mConfigManager->GetConfigReceiver(key);
                 if (receiver == nullptr) {
-                    VLOG("Could not find a broadcast receiver for %s",
-                        key.ToString().c_str());
+                    VLOG("Could not find a broadcast receiver for %s", key.ToString().c_str());
                     return false;
                 } else if (receiver->sendDataBroadcast(
                            mProcessor->getLastReportTimeNs(key)).isOk()) {
                     return true;
                 } else {
-                    VLOG("Failed to send a broadcast for receiver %s",
-                        key.ToString().c_str());
+                    VLOG("Failed to send a broadcast for receiver %s", key.ToString().c_str());
                     return false;
                 }
             },
             [this](const int& uid, const vector<int64_t>& activeConfigs) {
-                sp<IPendingIntentRef> receiver =
+                shared_ptr<IPendingIntentRef> receiver =
                     mConfigManager->GetActiveConfigsChangedReceiver(uid);
                 if (receiver == nullptr) {
                     VLOG("Could not find receiver for uid %d", uid);
@@ -245,36 +200,6 @@
 }
 
 /**
- * Implement our own because the default binder implementation isn't
- * properly handling SHELL_COMMAND_TRANSACTION.
- */
-status_t StatsService::onTransact(uint32_t code, const Parcel& data, Parcel* reply,
-                                  uint32_t flags) {
-    switch (code) {
-        case SHELL_COMMAND_TRANSACTION: {
-            int in = data.readFileDescriptor();
-            int out = data.readFileDescriptor();
-            int err = data.readFileDescriptor();
-            int argc = data.readInt32();
-            Vector<String8> args;
-            for (int i = 0; i < argc && data.dataAvail() > 0; i++) {
-                args.add(String8(data.readString16()));
-            }
-            sp<IShellCallback> shellCallback = IShellCallback::asInterface(data.readStrongBinder());
-            sp<IResultReceiver> resultReceiver =
-                    IResultReceiver::asInterface(data.readStrongBinder());
-
-            err = command(in, out, err, args, resultReceiver);
-            if (resultReceiver != nullptr) {
-                resultReceiver->send(err);
-            }
-            return NO_ERROR;
-        }
-        default: { return BnStatsd::onTransact(code, data, reply, flags); }
-    }
-}
-
-/**
  * Write data from statsd.
  * Format for statsdStats:  adb shell dumpsys stats --metadata [-v] [--proto]
  * Format for data report:  adb shell dumpsys stats [anything other than --metadata] [--proto]
@@ -283,20 +208,21 @@
  *     (bugreports call "adb shell dumpsys stats --dump-priority NORMAL -a --proto")
  * TODO: Come up with a more robust method of enacting <serviceutils/PriorityDumper.h>.
  */
-status_t StatsService::dump(int fd, const Vector<String16>& args) {
+status_t StatsService::dump(int fd, const char** args, uint32_t numArgs) {
     if (!checkPermission(kPermissionDump)) {
         return PERMISSION_DENIED;
     }
-    int lastArg = args.size() - 1;
+
+    int lastArg = numArgs - 1;
     bool asProto = false;
-    if (lastArg >= 0 && !args[lastArg].compare(String16("--proto"))) { // last argument
+    if (lastArg >= 0 && string(args[lastArg]) == "--proto") { // last argument
         asProto = true;
         lastArg--;
     }
-    if (args.size() > 0 && !args[0].compare(String16("--metadata"))) { // first argument
+    if (numArgs > 0 && string(args[0]) == "--metadata") { // first argument
         // Request is to dump statsd stats.
         bool verbose = false;
-        if (lastArg >= 0 && !args[lastArg].compare(String16("-v"))) {
+        if (lastArg >= 0 && string(args[lastArg]) == "-v") {
             verbose = true;
             lastArg--;
         }
@@ -351,67 +277,72 @@
 /**
  * Implementation of the adb shell cmd stats command.
  */
-status_t StatsService::command(int in, int out, int err, Vector<String8>& args,
-                               sp<IResultReceiver> resultReceiver) {
-    uid_t uid = IPCThreadState::self()->getCallingUid();
+status_t StatsService::handleShellCommand(int in, int out, int err, const char** argv,
+                                          uint32_t argc) {
+    uid_t uid = AIBinder_getCallingUid();
     if (uid != AID_ROOT && uid != AID_SHELL) {
         return PERMISSION_DENIED;
     }
 
-    const int argCount = args.size();
-    if (argCount >= 1) {
+    Vector<String8> utf8Args;
+    utf8Args.setCapacity(argc);
+    for (uint32_t i = 0; i < argc; i++) {
+        utf8Args.push(String8(argv[i]));
+    }
+
+    if (argc >= 1) {
         // adb shell cmd stats config ...
-        if (!args[0].compare(String8("config"))) {
-            return cmd_config(in, out, err, args);
+        if (!utf8Args[0].compare(String8("config"))) {
+            return cmd_config(in, out, err, utf8Args);
         }
 
-        if (!args[0].compare(String8("print-uid-map"))) {
-            return cmd_print_uid_map(out, args);
+        if (!utf8Args[0].compare(String8("print-uid-map"))) {
+            return cmd_print_uid_map(out, utf8Args);
         }
 
-        if (!args[0].compare(String8("dump-report"))) {
-            return cmd_dump_report(out, args);
+        if (!utf8Args[0].compare(String8("dump-report"))) {
+            return cmd_dump_report(out, utf8Args);
         }
 
-        if (!args[0].compare(String8("pull-source")) && args.size() > 1) {
-            return cmd_print_pulled_metrics(out, args);
+        if (!utf8Args[0].compare(String8("pull-source")) && argc > 1) {
+            return cmd_print_pulled_metrics(out, utf8Args);
         }
 
-        if (!args[0].compare(String8("send-broadcast"))) {
-            return cmd_trigger_broadcast(out, args);
+        if (!utf8Args[0].compare(String8("send-broadcast"))) {
+            return cmd_trigger_broadcast(out, utf8Args);
         }
 
-        if (!args[0].compare(String8("print-stats"))) {
-            return cmd_print_stats(out, args);
+        if (!utf8Args[0].compare(String8("print-stats"))) {
+            return cmd_print_stats(out, utf8Args);
         }
 
-        if (!args[0].compare(String8("meminfo"))) {
+        if (!utf8Args[0].compare(String8("meminfo"))) {
             return cmd_dump_memory_info(out);
         }
 
-        if (!args[0].compare(String8("write-to-disk"))) {
+        if (!utf8Args[0].compare(String8("write-to-disk"))) {
             return cmd_write_data_to_disk(out);
         }
 
-        if (!args[0].compare(String8("log-app-breadcrumb"))) {
-            return cmd_log_app_breadcrumb(out, args);
+        if (!utf8Args[0].compare(String8("log-app-breadcrumb"))) {
+            return cmd_log_app_breadcrumb(out, utf8Args);
         }
 
-        if (!args[0].compare(String8("log-binary-push"))) {
-            return cmd_log_binary_push(out, args);
+        if (!utf8Args[0].compare(String8("log-binary-push"))) {
+            return cmd_log_binary_push(out, utf8Args);
         }
 
-        if (!args[0].compare(String8("clear-puller-cache"))) {
+        if (!utf8Args[0].compare(String8("clear-puller-cache"))) {
             return cmd_clear_puller_cache(out);
         }
 
-        if (!args[0].compare(String8("print-logs"))) {
-            return cmd_print_logs(out, args);
+        if (!utf8Args[0].compare(String8("print-logs"))) {
+            return cmd_print_logs(out, utf8Args);
         }
-        if (!args[0].compare(String8("send-active-configs"))) {
-            return cmd_trigger_active_config_broadcast(out, args);
+        if (!utf8Args[0].compare(String8("send-active-configs"))) {
+            return cmd_trigger_active_config_broadcast(out, utf8Args);
         }
-        if (!args[0].compare(String8("data-subscribe"))) {
+        if (!utf8Args[0].compare(String8("data-subscribe"))) {
             {
                 std::lock_guard<std::mutex> lock(mShellSubscriberMutex);
                 if (mShellSubscriber == nullptr) {
@@ -419,14 +350,10 @@
                 }
             }
             int timeoutSec = -1;
-            if (argCount >= 2) {
-                timeoutSec = atoi(args[1].c_str());
+            if (argc >= 2) {
+                timeoutSec = atoi(utf8Args[1].c_str());
             }
-            if (resultReceiver == nullptr) {
-                ALOGI("Null resultReceiver given, no subscription will be started");
-                return UNEXPECTED_NULL;
-            }
-            mShellSubscriber->startNewSubscription(in, out, resultReceiver, timeoutSec);
+            mShellSubscriber->startNewSubscription(in, out, timeoutSec);
             return NO_ERROR;
         }
     }
@@ -556,7 +483,7 @@
     const int argCount = args.size();
     if (argCount == 2) {
         // Automatically pick the UID
-        uid = IPCThreadState::self()->getCallingUid();
+        uid = AIBinder_getCallingUid();
         name.assign(args[1].c_str(), args[1].size());
         good = true;
     } else if (argCount == 3) {
@@ -572,17 +499,15 @@
         return UNKNOWN_ERROR;
     }
     ConfigKey key(uid, StrToInt64(name));
-    sp<IPendingIntentRef> receiver = mConfigManager->GetConfigReceiver(key);
+    shared_ptr<IPendingIntentRef> receiver = mConfigManager->GetConfigReceiver(key);
     if (receiver == nullptr) {
         VLOG("Could not find receiver for %s, %s", args[1].c_str(), args[2].c_str());
         return UNKNOWN_ERROR;
-    } else if (receiver->sendDataBroadcast(
-               mProcessor->getLastReportTimeNs(key)).isOk()) {
+    } else if (receiver->sendDataBroadcast(mProcessor->getLastReportTimeNs(key)).isOk()) {
         VLOG("StatsService::trigger broadcast succeeded to %s, %s", args[1].c_str(),
              args[2].c_str());
     } else {
-        VLOG("StatsService::trigger broadcast failed to %s, %s", args[1].c_str(),
-             args[2].c_str());
+        VLOG("StatsService::trigger broadcast failed to %s, %s", args[1].c_str(), args[2].c_str());
         return UNKNOWN_ERROR;
     }
     return NO_ERROR;
@@ -594,7 +519,7 @@
     vector<int64_t> configIds;
     if (argCount == 1) {
         // Automatically pick the uid and send a broadcast that has no active configs.
-        uid = IPCThreadState::self()->getCallingUid();
+        uid = AIBinder_getCallingUid();
         mProcessor->GetActiveConfigs(uid, configIds);
     } else {
         int curArg = 1;
@@ -608,7 +533,7 @@
             }
             curArg++;
         } else {
-            uid = IPCThreadState::self()->getCallingUid();
+            uid = AIBinder_getCallingUid();
         }
         if (curArg == argCount || args[curArg] != "--configs") {
             VLOG("Reached end of args, or specify configs not set. Sending actual active configs,");
@@ -628,7 +553,7 @@
             }
         }
     }
-    sp<IPendingIntentRef> receiver = mConfigManager->GetActiveConfigsChangedReceiver(uid);
+    shared_ptr<IPendingIntentRef> receiver = mConfigManager->GetActiveConfigsChangedReceiver(uid);
     if (receiver == nullptr) {
         VLOG("Could not find receiver for uid %d", uid);
         return UNKNOWN_ERROR;
@@ -651,7 +576,7 @@
 
             if (argCount == 3) {
                 // Automatically pick the UID
-                uid = IPCThreadState::self()->getCallingUid();
+                uid = AIBinder_getCallingUid();
                 name.assign(args[2].c_str(), args[2].size());
                 good = true;
             } else if (argCount == 4) {
@@ -734,7 +659,7 @@
         }
         if (argCount == 2) {
             // Automatically pick the UID
-            uid = IPCThreadState::self()->getCallingUid();
+            uid = AIBinder_getCallingUid();
             name.assign(args[1].c_str(), args[1].size());
             good = true;
         } else if (argCount == 3) {
@@ -826,7 +751,7 @@
     const int argCount = args.size();
     if (argCount == 3) {
         // Automatically pick the UID
-        uid = IPCThreadState::self()->getCallingUid();
+        uid = AIBinder_getCallingUid();
         label = atoi(args[1].c_str());
         state = atoi(args[2].c_str());
         good = true;
@@ -903,9 +828,8 @@
 }
 
 status_t StatsService::cmd_clear_puller_cache(int out) {
-    IPCThreadState* ipc = IPCThreadState::self();
     VLOG("StatsService::cmd_clear_puller_cache with Pid %i, Uid %i",
-            ipc->getCallingPid(), ipc->getCallingUid());
+            AIBinder_getCallingPid(), AIBinder_getCallingUid());
     if (checkPermission(kPermissionDump)) {
         int cleared = mPullerManager->ForceClearPullerCache();
         dprintf(out, "Puller removed %d cached data!\n", cleared);
@@ -916,9 +840,8 @@
 }
 
 status_t StatsService::cmd_print_logs(int out, const Vector<String8>& args) {
-    IPCThreadState* ipc = IPCThreadState::self();
-    VLOG("StatsService::cmd_print_logs with Pid %i, Uid %i", ipc->getCallingPid(),
-         ipc->getCallingUid());
+    VLOG("StatsService::cmd_print_logs with Pid %i, Uid %i", AIBinder_getCallingPid(),
+         AIBinder_getCallingUid());
     if (checkPermission(kPermissionDump)) {
         bool enabled = true;
         if (args.size() >= 2) {
@@ -950,24 +873,24 @@
     }
     uid = goodUid;
 
-    int32_t callingUid = IPCThreadState::self()->getCallingUid();
+    int32_t callingUid = AIBinder_getCallingUid();
     return mEngBuild // UserDebug/EngBuild are allowed to impersonate uids.
             || (callingUid == goodUid) // Anyone can 'impersonate' themselves.
             || (callingUid == AID_ROOT && goodUid == AID_SHELL); // ROOT can impersonate SHELL.
 }
 
-Status StatsService::informAllUidData(const ParcelFileDescriptor& fd) {
+Status StatsService::informAllUidData(const ScopedFileDescriptor& fd) {
     ENFORCE_UID(AID_SYSTEM);
     // Read stream into buffer.
     string buffer;
     if (!android::base::ReadFdToString(fd.get(), &buffer)) {
-        return exception(Status::EX_ILLEGAL_ARGUMENT, "Failed to read all data from the pipe.");
+        return exception(EX_ILLEGAL_ARGUMENT, "Failed to read all data from the pipe.");
     }
 
     // Parse buffer.
     UidData uidData;
     if (!uidData.ParseFromString(buffer)) {
-        return exception(Status::EX_ILLEGAL_ARGUMENT, "Error parsing proto stream for UidData.");
+        return exception(EX_ILLEGAL_ARGUMENT, "Error parsing proto stream for UidData.");
     }
 
     vector<String16> versionStrings;
@@ -1002,20 +925,28 @@
     return Status::ok();
 }
 
-Status StatsService::informOnePackage(const String16& app, int32_t uid, int64_t version,
-                                      const String16& version_string, const String16& installer) {
+Status StatsService::informOnePackage(const string& app, int32_t uid, int64_t version,
+                                      const string& versionString, const string& installer) {
     ENFORCE_UID(AID_SYSTEM);
 
     VLOG("StatsService::informOnePackage was called");
-    mUidMap->updateApp(getElapsedRealtimeNs(), app, uid, version, version_string, installer);
+    // TODO(b/149254662): This is gross. We should consider changing statsd
+    // internals to use std::string.
+    String16 utf16App = String16(app.c_str());
+    String16 utf16VersionString = String16(versionString.c_str());
+    String16 utf16Installer = String16(installer.c_str());
+
+    mUidMap->updateApp(getElapsedRealtimeNs(), utf16App, uid, version, utf16VersionString,
+                       utf16Installer);
     return Status::ok();
 }
 
-Status StatsService::informOnePackageRemoved(const String16& app, int32_t uid) {
+Status StatsService::informOnePackageRemoved(const string& app, int32_t uid) {
     ENFORCE_UID(AID_SYSTEM);
 
     VLOG("StatsService::informOnePackageRemoved was called");
-    mUidMap->removeApp(getElapsedRealtimeNs(), app, uid);
+    String16 utf16App = String16(app.c_str());
+    mUidMap->removeApp(getElapsedRealtimeNs(), utf16App, uid);
     mConfigManager->RemoveConfigs(uid);
     return Status::ok();
 }
@@ -1079,7 +1010,7 @@
 }
 
 void StatsService::sayHiToStatsCompanion() {
-    sp<IStatsCompanionService> statsCompanion = getStatsCompanionService();
+    shared_ptr<IStatsCompanionService> statsCompanion = getStatsCompanionService();
     if (statsCompanion != nullptr) {
         VLOG("Telling statsCompanion that statsd is ready");
         statsCompanion->statsdReady();
@@ -1092,14 +1023,14 @@
     ENFORCE_UID(AID_SYSTEM);
 
     VLOG("StatsService::statsCompanionReady was called");
-    sp<IStatsCompanionService> statsCompanion = getStatsCompanionService();
+    shared_ptr<IStatsCompanionService> statsCompanion = getStatsCompanionService();
     if (statsCompanion == nullptr) {
-        return Status::fromExceptionCode(
-                Status::EX_NULL_POINTER,
-                "statscompanion unavailable despite it contacting statsd!");
+        return exception(EX_NULL_POINTER,
+                         "StatsCompanion unavailable despite it contacting statsd.");
     }
     VLOG("StatsService::statsCompanionReady linking to statsCompanion.");
-    IInterface::asBinder(statsCompanion)->linkToDeath(this);
+    AIBinder_linkToDeath(statsCompanion->asBinder().get(),
+                         mStatsCompanionServiceDeathRecipient.get(), this);
     mPullerManager->SetStatsCompanionService(statsCompanion);
     mAnomalyAlarmMonitor->setStatsCompanionService(statsCompanion);
     mPeriodicAlarmMonitor->setStatsCompanionService(statsCompanion);
@@ -1127,39 +1058,47 @@
     }
 }
 
-Status StatsService::getData(int64_t key, const int32_t callingUid, vector<uint8_t>* output) {
+Status StatsService::getData(int64_t key, const int32_t callingUid, vector<int8_t>* output) {
     ENFORCE_UID(AID_SYSTEM);
 
     VLOG("StatsService::getData with Uid %i", callingUid);
     ConfigKey configKey(callingUid, key);
+    // TODO(b/149254662): Since libbinder_ndk uses int8_t instead of uint8_t,
+    // there are inconsistencies with internal statsd logic. Instead of
+    // modifying lots of files, we create a temporary output array of int8_t and
+    // copy its data into output. This is a bad hack, but hopefully
+    // libbinder_ndk will transition to using uint8_t soon: progress is tracked
+    // in b/144957764. Same applies to StatsService::getMetadata.
+    vector<uint8_t> unsignedOutput;
     // The dump latency does not matter here since we do not include the current bucket, we do not
     // need to pull any new data anyhow.
     mProcessor->onDumpReport(configKey, getElapsedRealtimeNs(), false /* include_current_bucket*/,
-                             true /* erase_data */, GET_DATA_CALLED, FAST, output);
+                             true /* erase_data */, GET_DATA_CALLED, FAST, &unsignedOutput);
+    *output = vector<int8_t>(unsignedOutput.begin(), unsignedOutput.end());
     return Status::ok();
 }
 
-Status StatsService::getMetadata(vector<uint8_t>* output) {
+Status StatsService::getMetadata(vector<int8_t>* output) {
     ENFORCE_UID(AID_SYSTEM);
 
-    StatsdStats::getInstance().dumpStats(output, false); // Don't reset the counters.
+    vector<uint8_t> unsignedOutput;
+    StatsdStats::getInstance().dumpStats(&unsignedOutput, false); // Don't reset the counters.
+    *output = vector<int8_t>(unsignedOutput.begin(), unsignedOutput.end());
     return Status::ok();
 }
 
-Status StatsService::addConfiguration(int64_t key, const vector <uint8_t>& config,
+Status StatsService::addConfiguration(int64_t key, const vector <int8_t>& config,
                                       const int32_t callingUid) {
     ENFORCE_UID(AID_SYSTEM);
 
     if (addConfigurationChecked(callingUid, key, config)) {
         return Status::ok();
     } else {
-        ALOGE("Could not parse malformatted StatsdConfig");
-        return Status::fromExceptionCode(binder::Status::EX_ILLEGAL_ARGUMENT,
-                                         "config does not correspond to a StatsdConfig proto");
+        return exception(EX_ILLEGAL_ARGUMENT, "Could not parse malformatted StatsdConfig.");
     }
 }
 
-bool StatsService::addConfigurationChecked(int uid, int64_t key, const vector<uint8_t>& config) {
+bool StatsService::addConfigurationChecked(int uid, int64_t key, const vector<int8_t>& config) {
     ConfigKey configKey(uid, key);
     StatsdConfig cfg;
     if (config.size() > 0) {  // If the config is empty, skip parsing.
@@ -1180,7 +1119,7 @@
 }
 
 Status StatsService::setDataFetchOperation(int64_t key,
-                                           const sp<IPendingIntentRef>& pir,
+                                           const shared_ptr<IPendingIntentRef>& pir,
                                            const int32_t callingUid) {
     ENFORCE_UID(AID_SYSTEM);
 
@@ -1194,7 +1133,7 @@
     return Status::ok();
 }
 
-Status StatsService::setActiveConfigsChangedOperation(const sp<IPendingIntentRef>& pir,
+Status StatsService::setActiveConfigsChangedOperation(const shared_ptr<IPendingIntentRef>& pir,
                                                       const int32_t callingUid,
                                                       vector<int64_t>* output) {
     ENFORCE_UID(AID_SYSTEM);
@@ -1225,7 +1164,7 @@
 
 Status StatsService::setBroadcastSubscriber(int64_t configId,
                                             int64_t subscriberId,
-                                            const sp<IPendingIntentRef>& pir,
+                                            const shared_ptr<IPendingIntentRef>& pir,
                                             const int32_t callingUid) {
     ENFORCE_UID(AID_SYSTEM);
 
@@ -1252,14 +1191,14 @@
     // Permission check not necessary as it's meant for applications to write to
     // statsd.
     android::util::stats_write(util::APP_BREADCRUMB_REPORTED,
-                               (int32_t) IPCThreadState::self()->getCallingUid(), label,
+                               (int32_t) AIBinder_getCallingUid(), label,
                                state);
     return Status::ok();
 }
 
 Status StatsService::registerPullAtomCallback(int32_t uid, int32_t atomTag, int64_t coolDownNs,
                                     int64_t timeoutNs, const std::vector<int32_t>& additiveFields,
-                                    const sp<android::os::IPullAtomCallback>& pullerCallback) {
+                                    const shared_ptr<IPullAtomCallback>& pullerCallback) {
     ENFORCE_UID(AID_SYSTEM);
 
     VLOG("StatsService::registerPullAtomCallback called.");
@@ -1270,10 +1209,10 @@
 
 Status StatsService::registerNativePullAtomCallback(int32_t atomTag, int64_t coolDownNs,
                                     int64_t timeoutNs, const std::vector<int32_t>& additiveFields,
-                                    const sp<android::os::IPullAtomCallback>& pullerCallback) {
+                                    const shared_ptr<IPullAtomCallback>& pullerCallback) {
 
     VLOG("StatsService::registerNativePullAtomCallback called.");
-    int32_t uid = IPCThreadState::self()->getCallingUid();
+    int32_t uid = AIBinder_getCallingUid();
     mPullerManager->RegisterPullAtomCallback(uid, atomTag, coolDownNs, timeoutNs, additiveFields,
                                              pullerCallback);
     return Status::ok();
@@ -1288,188 +1227,39 @@
 
 Status StatsService::unregisterNativePullAtomCallback(int32_t atomTag) {
     VLOG("StatsService::unregisterNativePullAtomCallback called.");
-    int32_t uid = IPCThreadState::self()->getCallingUid();
+    int32_t uid = AIBinder_getCallingUid();
     mPullerManager->UnregisterPullAtomCallback(uid, atomTag);
     return Status::ok();
 }
 
-Status StatsService::sendWatchdogRollbackOccurredAtom(const int32_t rollbackTypeIn,
-                                                      const android::String16& packageNameIn,
-                                                      const int64_t packageVersionCodeIn,
-                                                      const int32_t rollbackReasonIn,
-                                                      const android::String16&
-                                                       failingPackageNameIn) {
-    // Note: We skip the usage stats op check here since we do not have a package name.
-    // This is ok since we are overloading the usage_stats permission.
-    // This method only sends data, it does not receive it.
-    pid_t pid = IPCThreadState::self()->getCallingPid();
-    uid_t uid = IPCThreadState::self()->getCallingUid();
-    // Root, system, and shell always have access
-    if (uid != AID_ROOT && uid != AID_SYSTEM && uid != AID_SHELL) {
-        // Caller must be granted these permissions
-        if (!checkPermission(kPermissionDump)) {
-            return exception(binder::Status::EX_SECURITY,
-                             StringPrintf("UID %d / PID %d lacks permission %s", uid, pid,
-                                          kPermissionDump));
-        }
-        if (!checkPermission(kPermissionUsage)) {
-            return exception(binder::Status::EX_SECURITY,
-                             StringPrintf("UID %d / PID %d lacks permission %s", uid, pid,
-                                          kPermissionUsage));
-        }
-    }
-
-    android::util::stats_write(android::util::WATCHDOG_ROLLBACK_OCCURRED,
-            rollbackTypeIn, String8(packageNameIn).string(), packageVersionCodeIn,
-            rollbackReasonIn, String8(failingPackageNameIn).string());
-
-    // Fast return to save disk read.
-    if (rollbackTypeIn != android::util::WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS
-            && rollbackTypeIn !=
-                    android::util::WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE) {
-        return Status::ok();
-    }
-
-    bool readTrainInfoSuccess = false;
-    InstallTrainInfo trainInfoOnDisk;
-    readTrainInfoSuccess = StorageManager::readTrainInfo(trainInfoOnDisk);
-
-    if (!readTrainInfoSuccess) {
-        return Status::ok();
-    }
-    std::vector<int64_t> experimentIds = trainInfoOnDisk.experimentIds;
-    if (experimentIds.empty()) {
-        return Status::ok();
-    }
-    switch (rollbackTypeIn) {
-        case android::util::WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE:
-            experimentIds.push_back(experimentIds[0] + 4);
-            break;
-        case android::util::WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS:
-            experimentIds.push_back(experimentIds[0] + 5);
-            break;
-    }
-    StorageManager::writeTrainInfo(trainInfoOnDisk.trainVersionCode, trainInfoOnDisk.trainName,
-            trainInfoOnDisk.status, experimentIds);
-    return Status::ok();
-}
-
-
 Status StatsService::getRegisteredExperimentIds(std::vector<int64_t>* experimentIdsOut) {
     ENFORCE_UID(AID_SYSTEM);
     // TODO: add verifier permission
 
+    experimentIdsOut->clear();
     // Read the latest train info
-    InstallTrainInfo trainInfo;
-    if (!StorageManager::readTrainInfo(trainInfo)) {
+    vector<InstallTrainInfo> trainInfoList = StorageManager::readAllTrainInfo();
+    if (trainInfoList.empty()) {
         // No train info means no experiment IDs, return an empty list
-        experimentIdsOut->clear();
         return Status::ok();
     }
 
     // Copy the experiment IDs to the out vector
-    experimentIdsOut->assign(trainInfo.experimentIds.begin(), trainInfo.experimentIds.end());
+    for (InstallTrainInfo& trainInfo : trainInfoList) {
+        experimentIdsOut->insert(experimentIdsOut->end(),
+                                 trainInfo.experimentIds.begin(),
+                                 trainInfo.experimentIds.end());
+    }
     return Status::ok();
 }
 
-hardware::Return<void> StatsService::reportSpeakerImpedance(
-        const SpeakerImpedance& speakerImpedance) {
-    android::util::stats_write(android::util::SPEAKER_IMPEDANCE_REPORTED,
-            speakerImpedance.speakerLocation, speakerImpedance.milliOhms);
 
-    return hardware::Void();
+void StatsService::statsCompanionServiceDied(void* cookie) {
+    auto thiz = static_cast<StatsService*>(cookie);
+    thiz->statsCompanionServiceDiedImpl();
 }
 
-hardware::Return<void> StatsService::reportHardwareFailed(const HardwareFailed& hardwareFailed) {
-    android::util::stats_write(android::util::HARDWARE_FAILED, int32_t(hardwareFailed.hardwareType),
-            hardwareFailed.hardwareLocation, int32_t(hardwareFailed.errorCode));
-
-    return hardware::Void();
-}
-
-hardware::Return<void> StatsService::reportPhysicalDropDetected(
-        const PhysicalDropDetected& physicalDropDetected) {
-    android::util::stats_write(android::util::PHYSICAL_DROP_DETECTED,
-            int32_t(physicalDropDetected.confidencePctg), physicalDropDetected.accelPeak,
-            physicalDropDetected.freefallDuration);
-
-    return hardware::Void();
-}
-
-hardware::Return<void> StatsService::reportChargeCycles(const ChargeCycles& chargeCycles) {
-    std::vector<int32_t> buckets = chargeCycles.cycleBucket;
-    int initialSize = buckets.size();
-    for (int i = 0; i < 10 - initialSize; i++) {
-        buckets.push_back(-1); // Push -1 for buckets that do not exist.
-    }
-    android::util::stats_write(android::util::CHARGE_CYCLES_REPORTED, buckets[0], buckets[1],
-            buckets[2], buckets[3], buckets[4], buckets[5], buckets[6], buckets[7], buckets[8],
-            buckets[9]);
-
-    return hardware::Void();
-}
-
-hardware::Return<void> StatsService::reportBatteryHealthSnapshot(
-        const BatteryHealthSnapshotArgs& batteryHealthSnapshotArgs) {
-    android::util::stats_write(android::util::BATTERY_HEALTH_SNAPSHOT,
-            int32_t(batteryHealthSnapshotArgs.type), batteryHealthSnapshotArgs.temperatureDeciC,
-            batteryHealthSnapshotArgs.voltageMicroV, batteryHealthSnapshotArgs.currentMicroA,
-            batteryHealthSnapshotArgs.openCircuitVoltageMicroV,
-            batteryHealthSnapshotArgs.resistanceMicroOhm, batteryHealthSnapshotArgs.levelPercent);
-
-    return hardware::Void();
-}
-
-hardware::Return<void> StatsService::reportSlowIo(const SlowIo& slowIo) {
-    android::util::stats_write(android::util::SLOW_IO, int32_t(slowIo.operation), slowIo.count);
-
-    return hardware::Void();
-}
-
-hardware::Return<void> StatsService::reportBatteryCausedShutdown(
-        const BatteryCausedShutdown& batteryCausedShutdown) {
-    android::util::stats_write(android::util::BATTERY_CAUSED_SHUTDOWN,
-            batteryCausedShutdown.voltageMicroV);
-
-    return hardware::Void();
-}
-
-hardware::Return<void> StatsService::reportUsbPortOverheatEvent(
-        const UsbPortOverheatEvent& usbPortOverheatEvent) {
-    android::util::stats_write(android::util::USB_PORT_OVERHEAT_EVENT_REPORTED,
-            usbPortOverheatEvent.plugTemperatureDeciC, usbPortOverheatEvent.maxTemperatureDeciC,
-            usbPortOverheatEvent.timeToOverheat, usbPortOverheatEvent.timeToHysteresis,
-            usbPortOverheatEvent.timeToInactive);
-
-    return hardware::Void();
-}
-
-hardware::Return<void> StatsService::reportSpeechDspStat(
-        const SpeechDspStat& speechDspStat) {
-    android::util::stats_write(android::util::SPEECH_DSP_STAT_REPORTED,
-            speechDspStat.totalUptimeMillis, speechDspStat.totalDowntimeMillis,
-            speechDspStat.totalCrashCount, speechDspStat.totalRecoverCount);
-
-    return hardware::Void();
-}
-
-hardware::Return<void> StatsService::reportVendorAtom(const VendorAtom& vendorAtom) {
-    std::string reverseDomainName = (std::string) vendorAtom.reverseDomainName;
-    if (vendorAtom.atomId < 100000 || vendorAtom.atomId >= 200000) {
-        ALOGE("Atom ID %ld is not a valid vendor atom ID", (long) vendorAtom.atomId);
-        return hardware::Void();
-    }
-    if (reverseDomainName.length() > 50) {
-        ALOGE("Vendor atom reverse domain name %s is too long.", reverseDomainName.c_str());
-        return hardware::Void();
-    }
-    LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), vendorAtom);
-    mProcessor->OnLogEvent(&event);
-
-    return hardware::Void();
-}
-
-void StatsService::binderDied(const wp <IBinder>& who) {
+void StatsService::statsCompanionServiceDiedImpl() {
     ALOGW("statscompanion service died");
     StatsdStats::getInstance().noteSystemServerRestart(getWallClockSec());
     if (mProcessor != nullptr) {
diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h
index af3016f..e6723c8 100644
--- a/cmds/statsd/src/StatsService.h
+++ b/cmds/statsd/src/StatsService.h
@@ -27,33 +27,30 @@
 #include "shell/ShellSubscriber.h"
 #include "statscompanion_util.h"
 
-#include <android/frameworks/stats/1.0/IStats.h>
-#include <android/frameworks/stats/1.0/types.h>
-#include <android/os/BnStatsd.h>
-#include <android/os/IPendingIntentRef.h>
-#include <android/os/IStatsCompanionService.h>
-#include <android/os/IStatsd.h>
-#include <binder/IResultReceiver.h>
-#include <binder/ParcelFileDescriptor.h>
+#include <aidl/android/os/BnStatsd.h>
+#include <aidl/android/os/IPendingIntentRef.h>
+#include <aidl/android/os/IPullAtomCallback.h>
 #include <utils/Looper.h>
 
 #include <mutex>
 
 using namespace android;
-using namespace android::binder;
-using namespace android::frameworks::stats::V1_0;
 using namespace android::os;
 using namespace std;
 
+using Status = ::ndk::ScopedAStatus;
+using aidl::android::os::BnStatsd;
+using aidl::android::os::IPendingIntentRef;
+using aidl::android::os::IPullAtomCallback;
+using ::ndk::ScopedAIBinder_DeathRecipient;
+using ::ndk::ScopedFileDescriptor;
+using std::shared_ptr;
+
 namespace android {
 namespace os {
 namespace statsd {
 
-using android::hardware::Return;
-
-class StatsService : public BnStatsd,
-                     public IStats,
-                     public IBinder::DeathRecipient {
+class StatsService : public BnStatsd {
 public:
     StatsService(const sp<Looper>& handlerLooper, std::shared_ptr<LogEventQueue> queue);
     virtual ~StatsService();
@@ -61,10 +58,9 @@
     /** The anomaly alarm registered with AlarmManager won't be updated by less than this. */
     const uint32_t MIN_DIFF_TO_UPDATE_REGISTERED_ALARM_SECS = 5;
 
-    virtual status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags);
-    virtual status_t dump(int fd, const Vector<String16>& args);
-    virtual status_t command(int inFd, int outFd, int err, Vector<String8>& args,
-                             sp<IResultReceiver> resultReceiver);
+    virtual status_t dump(int fd, const char** args, uint32_t numArgs) override;
+    virtual status_t handleShellCommand(int in, int out, int err, const char** argv,
+                                        uint32_t argc) override;
 
     virtual Status systemRunning();
     virtual Status statsCompanionReady();
@@ -72,10 +68,10 @@
     virtual Status informPollAlarmFired();
     virtual Status informAlarmForSubscriberTriggeringFired();
 
-    virtual Status informAllUidData(const ParcelFileDescriptor& fd);
-    virtual Status informOnePackage(const String16& app, int32_t uid, int64_t version,
-                                    const String16& version_string, const String16& installer);
-    virtual Status informOnePackageRemoved(const String16& app, int32_t uid);
+    virtual Status informAllUidData(const ScopedFileDescriptor& fd);
+    virtual Status informOnePackage(const string& app, int32_t uid, int64_t version,
+                                    const string& versionString, const string& installer);
+    virtual Status informOnePackageRemoved(const string& app, int32_t uid);
     virtual Status informDeviceShutdown();
 
     /**
@@ -98,13 +94,13 @@
      */
     virtual Status getData(int64_t key,
                            const int32_t callingUid,
-                           vector<uint8_t>* output) override;
+                           vector<int8_t>* output) override;
 
 
     /**
      * Binder call for clients to get metadata across all configs in statsd.
      */
-    virtual Status getMetadata(vector<uint8_t>* output) override;
+    virtual Status getMetadata(vector<int8_t>* output) override;
 
 
     /**
@@ -112,14 +108,14 @@
      * should requestData for this configuration.
      */
     virtual Status addConfiguration(int64_t key,
-                                    const vector<uint8_t>& config,
+                                    const vector<int8_t>& config,
                                     const int32_t callingUid) override;
 
     /**
      * Binder call to let clients register the data fetch operation for a configuration.
      */
     virtual Status setDataFetchOperation(int64_t key,
-                                         const sp<IPendingIntentRef>& pir,
+                                         const shared_ptr<IPendingIntentRef>& pir,
                                          const int32_t callingUid) override;
 
     /**
@@ -131,7 +127,7 @@
     /**
      * Binder call to let clients register the active configs changed operation.
      */
-    virtual Status setActiveConfigsChangedOperation(const sp<IPendingIntentRef>& pir,
+    virtual Status setActiveConfigsChangedOperation(const shared_ptr<IPendingIntentRef>& pir,
                                                     const int32_t callingUid,
                                                     vector<int64_t>* output) override;
 
@@ -150,7 +146,7 @@
      */
     virtual Status setBroadcastSubscriber(int64_t configId,
                                           int64_t subscriberId,
-                                          const sp<IPendingIntentRef>& pir,
+                                          const shared_ptr<IPendingIntentRef>& pir,
                                           const int32_t callingUid) override;
 
     /**
@@ -173,14 +169,14 @@
      */
     virtual Status registerPullAtomCallback(int32_t uid, int32_t atomTag, int64_t coolDownNs,
             int64_t timeoutNs, const std::vector<int32_t>& additiveFields,
-            const sp<android::os::IPullAtomCallback>& pullerCallback) override;
+            const shared_ptr<IPullAtomCallback>& pullerCallback) override;
 
     /**
      * Binder call to register a callback function for a pulled atom.
      */
     virtual Status registerNativePullAtomCallback(int32_t atomTag, int64_t coolDownNs,
             int64_t timeoutNs, const std::vector<int32_t>& additiveFields,
-            const sp<android::os::IPullAtomCallback>& pullerCallback) override;
+            const shared_ptr<IPullAtomCallback>& pullerCallback) override;
 
     /**
      * Binder call to unregister any existing callback for the given uid and atom.
@@ -193,78 +189,10 @@
     virtual Status unregisterNativePullAtomCallback(int32_t atomTag) override;
 
     /**
-     * Binder call to log WatchdogRollbackOccurred atom.
-     */
-    virtual Status sendWatchdogRollbackOccurredAtom(
-            const int32_t rollbackTypeIn,
-            const android::String16& packageNameIn,
-            const int64_t packageVersionCodeIn,
-            const int32_t rollbackReasonIn,
-            const android::String16& failingPackageNameIn) override;
-
-    /**
      * Binder call to get registered experiment IDs.
      */
     virtual Status getRegisteredExperimentIds(std::vector<int64_t>* expIdsOut);
 
-    /**
-     * Binder call to get SpeakerImpedance atom.
-     */
-    virtual Return<void> reportSpeakerImpedance(const SpeakerImpedance& speakerImpedance) override;
-
-    /**
-     * Binder call to get HardwareFailed atom.
-     */
-    virtual Return<void> reportHardwareFailed(const HardwareFailed& hardwareFailed) override;
-
-    /**
-     * Binder call to get PhysicalDropDetected atom.
-     */
-    virtual Return<void> reportPhysicalDropDetected(
-            const PhysicalDropDetected& physicalDropDetected) override;
-
-    /**
-     * Binder call to get ChargeCyclesReported atom.
-     */
-    virtual Return<void> reportChargeCycles(const ChargeCycles& chargeCycles) override;
-
-    /**
-     * Binder call to get BatteryHealthSnapshot atom.
-     */
-    virtual Return<void> reportBatteryHealthSnapshot(
-            const BatteryHealthSnapshotArgs& batteryHealthSnapshotArgs) override;
-
-    /**
-     * Binder call to get SlowIo atom.
-     */
-    virtual Return<void> reportSlowIo(const SlowIo& slowIo) override;
-
-    /**
-     * Binder call to get BatteryCausedShutdown atom.
-     */
-    virtual Return<void> reportBatteryCausedShutdown(
-            const BatteryCausedShutdown& batteryCausedShutdown) override;
-
-    /**
-     * Binder call to get UsbPortOverheatEvent atom.
-     */
-    virtual Return<void> reportUsbPortOverheatEvent(
-            const UsbPortOverheatEvent& usbPortOverheatEvent) override;
-
-    /**
-     * Binder call to get Speech DSP state atom.
-     */
-    virtual Return<void> reportSpeechDspStat(
-            const SpeechDspStat& speechDspStat) override;
-
-    /**
-     * Binder call to get vendor atom.
-     */
-    virtual Return<void> reportVendorAtom(const VendorAtom& vendorAtom) override;
-
-    /** IBinder::DeathRecipient */
-    virtual void binderDied(const wp<IBinder>& who) override;
-
 private:
     /**
      * Load system properties at init.
@@ -388,7 +316,7 @@
     /**
      * Adds a configuration after checking permissions and obtaining UID from binder call.
      */
-    bool addConfigurationChecked(int uid, int64_t key, const vector<uint8_t>& config);
+    bool addConfigurationChecked(int uid, int64_t key, const vector<int8_t>& config);
 
     /**
      * Update a configuration.
@@ -396,6 +324,17 @@
     void set_config(int uid, const string& name, const StatsdConfig& config);
 
     /**
+     * Death recipient callback that is called when StatsCompanionService dies.
+     * The cookie is a pointer to a StatsService object.
+     */
+    static void statsCompanionServiceDied(void* cookie);
+
+    /**
+     * Implementation of statsCompanionServiceDied.
+     */
+    void statsCompanionServiceDiedImpl();
+
+    /**
      * Tracks the uid <--> package name mapping.
      */
     sp<UidMap> mUidMap;
@@ -438,6 +377,8 @@
     mutable mutex mShellSubscriberMutex;
     std::shared_ptr<LogEventQueue> mEventQueue;
 
+    ScopedAIBinder_DeathRecipient mStatsCompanionServiceDeathRecipient;
+
     FRIEND_TEST(StatsLogProcessorTest, TestActivationsPersistAcrossSystemServerRestart);
     FRIEND_TEST(StatsServiceTest, TestAddConfig_simple);
     FRIEND_TEST(StatsServiceTest, TestAddConfig_empty);
diff --git a/cmds/statsd/src/anomaly/AlarmMonitor.cpp b/cmds/statsd/src/anomaly/AlarmMonitor.cpp
index bc36dad..02291181 100644
--- a/cmds/statsd/src/anomaly/AlarmMonitor.cpp
+++ b/cmds/statsd/src/anomaly/AlarmMonitor.cpp
@@ -26,17 +26,21 @@
 
 AlarmMonitor::AlarmMonitor(
         uint32_t minDiffToUpdateRegisteredAlarmTimeSec,
-        const std::function<void(const sp<IStatsCompanionService>&, int64_t)>& updateAlarm,
-        const std::function<void(const sp<IStatsCompanionService>&)>& cancelAlarm)
-    : mRegisteredAlarmTimeSec(0), mMinUpdateTimeSec(minDiffToUpdateRegisteredAlarmTimeSec),
+        const std::function<void(const shared_ptr<IStatsCompanionService>&, int64_t)>& updateAlarm,
+        const std::function<void(const shared_ptr<IStatsCompanionService>&)>& cancelAlarm)
+    : mRegisteredAlarmTimeSec(0),
+      mMinUpdateTimeSec(minDiffToUpdateRegisteredAlarmTimeSec),
       mUpdateAlarm(updateAlarm),
       mCancelAlarm(cancelAlarm) {}
 
 AlarmMonitor::~AlarmMonitor() {}
 
-void AlarmMonitor::setStatsCompanionService(sp<IStatsCompanionService> statsCompanionService) {
+void AlarmMonitor::setStatsCompanionService(
+        shared_ptr<IStatsCompanionService> statsCompanionService) {
     std::lock_guard<std::mutex> lock(mLock);
-    sp<IStatsCompanionService> tmpForLock = mStatsCompanionService;
+    // TODO(b/149254662): determine if tmpForLock is needed now that we have moved
+    // from sp to shared_ptr
+    shared_ptr<IStatsCompanionService> tmpForLock = mStatsCompanionService;
     mStatsCompanionService = statsCompanionService;
     if (statsCompanionService == nullptr) {
         VLOG("Erasing link to statsCompanionService");
diff --git a/cmds/statsd/src/anomaly/AlarmMonitor.h b/cmds/statsd/src/anomaly/AlarmMonitor.h
index 219695e..5c34e38 100644
--- a/cmds/statsd/src/anomaly/AlarmMonitor.h
+++ b/cmds/statsd/src/anomaly/AlarmMonitor.h
@@ -18,7 +18,7 @@
 
 #include "anomaly/indexed_priority_queue.h"
 
-#include <android/os/IStatsCompanionService.h>
+#include <aidl/android/os/IStatsCompanionService.h>
 #include <utils/RefBase.h>
 
 #include <unordered_set>
@@ -26,7 +26,9 @@
 
 using namespace android;
 
-using android::os::IStatsCompanionService;
+using aidl::android::os::IStatsCompanionService;
+using std::function;
+using std::shared_ptr;
 using std::unordered_set;
 
 namespace android {
@@ -64,8 +66,9 @@
      * alarm.
      */
     AlarmMonitor(uint32_t minDiffToUpdateRegisteredAlarmTimeSec,
-                 const std::function<void(const sp<IStatsCompanionService>&, int64_t)>& updateAlarm,
-                 const std::function<void(const sp<IStatsCompanionService>&)>& cancelAlarm);
+                 const function<void(const shared_ptr<IStatsCompanionService>&, int64_t)>&
+                         updateAlarm,
+                 const function<void(const shared_ptr<IStatsCompanionService>&)>& cancelAlarm);
     ~AlarmMonitor();
 
     /**
@@ -74,7 +77,7 @@
      * If nullptr, AnomalyMonitor will continue to add/remove alarms, but won't
      * update IStatsCompanionService (until such time as it is set non-null).
      */
-    void setStatsCompanionService(sp<IStatsCompanionService> statsCompanionService);
+    void setStatsCompanionService(shared_ptr<IStatsCompanionService> statsCompanionService);
 
     /**
      * Adds the given alarm (reference) to the queue.
@@ -123,7 +126,7 @@
     /**
      * Binder interface for communicating with StatsCompanionService.
      */
-    sp<IStatsCompanionService> mStatsCompanionService = nullptr;
+    shared_ptr<IStatsCompanionService> mStatsCompanionService = nullptr;
 
     /**
      * Amount by which the soonest projected alarm must differ from
@@ -147,10 +150,10 @@
     int64_t secToMs(uint32_t timeSec);
 
     // Callback function to update the alarm via StatsCompanionService.
-    std::function<void(const sp<IStatsCompanionService>, int64_t)> mUpdateAlarm;
+    std::function<void(const shared_ptr<IStatsCompanionService>, int64_t)> mUpdateAlarm;
 
     // Callback function to cancel the alarm via StatsCompanionService.
-    std::function<void(const sp<IStatsCompanionService>)> mCancelAlarm;
+    std::function<void(const shared_ptr<IStatsCompanionService>)> mCancelAlarm;
 
 };
 
diff --git a/cmds/statsd/src/anomaly/AlarmTracker.h b/cmds/statsd/src/anomaly/AlarmTracker.h
index 2fb3e3b..2da4a18 100644
--- a/cmds/statsd/src/anomaly/AlarmTracker.h
+++ b/cmds/statsd/src/anomaly/AlarmTracker.h
@@ -22,12 +22,9 @@
 #include "config/ConfigKey.h"
 #include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"  // Alarm
 
-#include <android/os/IStatsCompanionService.h>
 #include <stdlib.h>
 #include <utils/RefBase.h>
 
-using android::os::IStatsCompanionService;
-
 namespace android {
 namespace os {
 namespace statsd {
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index 183d741..a4e8fdc 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -127,7 +127,7 @@
         WallClockTimeShifted wall_clock_time_shifted = 45 [(module) = "framework"];
         AnomalyDetected anomaly_detected = 46;
         AppBreadcrumbReported app_breadcrumb_reported =
-                47 [(allow_from_any_uid) = true, (module) = "framework"];
+                47 [(allow_from_any_uid) = true, (module) = "statsd"];
         AppStartOccurred app_start_occurred = 48 [(module) = "framework"];
         AppStartCanceled app_start_canceled = 49 [(module) = "framework"];
         AppStartFullyDrawn app_start_fully_drawn = 50 [(module) = "framework"];
@@ -188,7 +188,7 @@
         ServiceStateChanged service_state_changed = 99 [(module) = "framework"];
         ServiceLaunchReported service_launch_reported = 100 [(module) = "framework"];
         FlagFlipUpdateOccurred flag_flip_update_occurred = 101 [(module) = "framework"];
-        BinaryPushStateChanged binary_push_state_changed = 102 [(module) = "framework"];
+        BinaryPushStateChanged binary_push_state_changed = 102 [(module) = "statsd"];
         DevicePolicyEvent device_policy_event = 103 [(module) = "framework"];
         DocsUIFileOperationCanceledReported docs_ui_file_op_canceled = 104 [(module) = "docsui"];
         DocsUIFileOperationCopyMoveModeReported docs_ui_file_op_copy_move_mode_reported =
@@ -378,10 +378,10 @@
                 240 [(module) = "framework"];
         BootTimeEventUtcTime boot_time_event_utc_time_reported = 241;
         BootTimeEventErrorCode boot_time_event_error_code_reported = 242 [(module) = "framework"];
-        UserspaceRebootReported userspace_reboot_reported = 243;
+        UserspaceRebootReported userspace_reboot_reported = 243 [(module) = "framework"];
         NotificationReported notification_reported = 244 [(module) = "framework"];
         NotificationPanelReported notification_panel_reported = 245;
-        NotificationChannelModified notification_panel_modified = 246;
+        NotificationChannelModified notification_channel_modified = 246;
         IntegrityCheckResultReported integrity_check_result_reported = 247 [(module) = "framework"];
         IntegrityRulesPushed integrity_rules_pushed = 248 [(module) = "framework"];
         CellBroadcastMessageReported cb_message_reported =
@@ -391,10 +391,12 @@
         WifiHealthStatReported wifi_health_stat_reported = 251 [(module) = "wifi"];
         WifiFailureStatReported wifi_failure_stat_reported = 252 [(module) = "wifi"];
         WifiConnectionResultReported wifi_connection_result_reported = 253 [(module) = "wifi"];
+        AppFreezeChanged app_freeze_changed = 254 [(module) = "framework"];
+        SdkExtensionStatus sdk_extension_status = 354;
     }
 
     // Pulled events will start at field 10000.
-    // Next: 10071
+    // Next: 10074
     oneof pulled {
         WifiBytesTransfer wifi_bytes_transfer = 10000 [(module) = "framework"];
         WifiBytesTransferByFgBg wifi_bytes_transfer_by_fg_bg = 10001 [(module) = "framework"];
@@ -469,6 +471,12 @@
         GraphicsStats graphics_stats = 10068;
         RuntimeAppOpAccess runtime_app_op_access = 10069 [(module) = "framework"];
         IonHeapSize ion_heap_size = 10070 [(module) = "framework"];
+        PackageNotificationPreferences package_notification_preferences =
+                10071 [(module) = "framework"];
+        PackageNotificationChannelPreferences package_notification_channel_preferences =
+                10072 [(module) = "framework"];
+        PackageNotificationChannelGroupPreferences package_notification_channel_group_preferences =
+                10073 [(module) = "framework"];
     }
 
     // DO NOT USE field numbers above 100,000 in AOSP.
@@ -670,17 +678,32 @@
  *   frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiDataStall.java
  */
 message WifiHealthStatReported {
+    enum Band {
+        UNKNOWN = 0;
+        // All of 2.4GHz band
+        BAND_2G = 1;
+        // Frequencies in the range of [5150, 5250) GHz
+        BAND_5G_LOW = 2;
+        // Frequencies in the range of [5250, 5725) GHz
+        BAND_5G_MIDDLE = 3;
+        // Frequencies in the range of [5725, 5850) GHz
+        BAND_5G_HIGH = 4;
+        // Frequencies in the range of [5925, 6425) GHz
+        BAND_6G_LOW = 5;
+        // Frequencies in the range of [6425, 6875) GHz
+        BAND_6G_MIDDLE = 6;
+        // Frequencies in the range of [6875, 7125) GHz
+        BAND_6G_HIGH = 7;
+    }
     // duration this stat is obtained over in milliseconds
     optional int32 duration_millis = 1;
     // whether wifi is classified as sufficient for the user's data traffic, determined
     // by whether the calculated throughput exceeds the average demand within |duration_millis|
     optional bool is_sufficient = 2;
-    // whether the calculated throughput is exceeds the minimum required for typical usage
-    optional bool is_throughput_good = 3;
     // whether cellular data is available
-    optional bool is_cell_data_available = 4;
-    // the WLAN channel the connected network is on (ie. 2412)
-    optional int32 frequency = 5;
+    optional bool is_cell_data_available = 3;
+    // the Band bucket the connected network is on
+    optional Band band = 4;
 }
 
 /**
@@ -1873,6 +1896,8 @@
     // Set by RollbackPackageHealthObserver to be the package that is failing when a rollback
     // is initiated. Empty if the package is unknown.
     optional string failing_package_name = 5;
+
+    optional TrainExperimentIds experiment_ids = 6 [(log_mode) = MODE_BYTES];
 }
 
 /**
@@ -3471,27 +3496,25 @@
     // A small system-assigned identifier for the notification.
     // Locally probably-unique, but expect collisions across users and/or days.
     optional int32 instance_id = 4;
-    // The app-assigned notification ID and tag
-    optional int32 notification_id = 5;
-    optional string notification_tag = 6;
-    optional string channel_id = 7;  // App-assigned channel ID
+    optional int32 notification_id_hash = 5;  // Small hash of the app-assigned notif ID + tag
+    optional int32 channel_id_hash = 6;  // Small hash of app-assigned channel ID
 
     // Grouping information
-    optional string group_id = 8;  // Group the notification currently belongs to
-    optional int32 group_instance_id = 9;  // Instance_id of the group-summary notification
-    optional bool is_group_summary = 10;  // Tags the group-summary notification
+    optional int32 group_id_hash = 7;  // Small hash of the group ID of the notification
+    optional int32 group_instance_id = 8;  // Instance_id of the group-summary notification
+    optional bool is_group_summary = 9;  // Tags the group-summary notification
 
     // Attributes
-    optional string category = 11;   // App-assigned notification category (API-defined strings)
-    optional int32 style = 12;       // App-assigned notification style
-    optional int32 num_people = 13;  // Number of Person records attached to the notification
+    optional string category = 10;   // App-assigned notification category (API-defined strings)
+    optional int32 style = 11;       // App-assigned notification style
+    optional int32 num_people = 12;  // Number of Person records attached to the notification
 
     // Ordering, importance and interruptiveness
 
-    optional int32 position = 14;    // Position in NotificationManager's list
+    optional int32 position = 13;    // Position in NotificationManager's list
 
-    optional android.stats.sysui.NotificationImportance importance = 15;
-    optional int32 alerting = 16;    // Bitfield, 1=buzz 2=beep 4=blink
+    optional android.stats.sysui.NotificationImportance importance = 14;
+    optional int32 alerting = 15;    // Bitfield, 1=buzz 2=beep 4=blink
 
     enum NotificationImportanceExplanation {
         IMPORTANCE_EXPLANATION_UNKNOWN = 0;
@@ -3503,12 +3526,12 @@
         IMPORTANCE_EXPLANATION_APP_PRE_CHANNELS = 5;
     }
 
-    optional NotificationImportanceExplanation importance_source = 17;
-    optional android.stats.sysui.NotificationImportance importance_initial = 18;
-    optional NotificationImportanceExplanation importance_initial_source = 19;
-    optional android.stats.sysui.NotificationImportance importance_asst = 20;
-    optional int32 assistant_hash = 21;
-    optional float assistant_ranking_score = 22;
+    optional NotificationImportanceExplanation importance_source = 16;
+    optional android.stats.sysui.NotificationImportance importance_initial = 17;
+    optional NotificationImportanceExplanation importance_initial_source = 18;
+    optional android.stats.sysui.NotificationImportance importance_asst = 19;
+    optional int32 assistant_hash = 20;
+    optional float assistant_ranking_score = 21;
 }
 
 message Notification {
@@ -3769,6 +3792,8 @@
     // user id
     optional int32 user_id = 8;
     optional int32 reason = 9;
+    // Whether or not this is a rollback event
+    optional bool is_rollback = 10;
 }
 
 /* Test atom, is not logged anywhere */
@@ -5463,6 +5488,65 @@
     optional NotificationRemoteViewsProto notification_remote_views = 1;
 }
 
+/**
+ * Atom that contains a list of a package's preferences, pulled from NotificationManagerService.java
+ */
+message PackageNotificationPreferences {
+    // Uid under which the package is installed.
+    optional int32 uid = 1;
+    // Notification importance, which specifies when and how a notification is displayed.
+    // Specified under core/java/android/app/NotificationManager.java.
+    optional int32 importance = 2;
+    // Lockscreen visibility as set by the user.
+    optional int32 visibility = 3;
+    // Bitfield mask indicating what fields were locked by the user (see LockableAppfields in
+    // PreferencesHelper.java)
+    optional int32 user_locked_fields = 4;
+}
+
+/**
+ * Atom that contains a list of a package's channel preferences, pulled from
+ * NotificationManagerService.java.
+ */
+message PackageNotificationChannelPreferences {
+    // Uid under which the package is installed.
+    optional int32 uid = 1;
+    // Channel's ID. Should always be available.
+    optional string channel_id = 2;
+    // Channel's name. Should always be available.
+    optional string channel_name = 3;
+    // Channel's description. Optionally set by the channel creator.
+    optional string description = 4;
+    // Notification importance, which specifies when and how a notification is displayed. Specified
+    // under core/java/android/app/NotificationManager.java.
+    optional int32 importance = 5;
+    // Bitmask representing which fields have been set by the user. See field bitmask descriptions
+    // at core/java/android/app/NotificationChannel.java
+    optional int32 user_locked_fields = 6;
+    // Indicates if the channel was deleted by the app.
+    optional bool is_deleted = 7;
+}
+
+/**
+ * Atom that contains a list of a package's channel group preferences, pulled from
+ * NotificationManagerService.java.
+ */
+message PackageNotificationChannelGroupPreferences {
+    // Uid under which the package is installed.
+    optional int32 uid = 1;
+    // Channel Group's ID. Should always be available.
+    optional string group_id = 2;
+    // Channel Group's name. Should always be available.
+    optional string group_name = 3;
+    // Channel Group's description. Optionally set by group creator.
+    optional string description = 4;
+    // Indicates if notifications from this channel group are blocked.
+    optional bool is_blocked = 5;
+    // Bitmask representing which fields have been set by the user. See field bitmask descriptions
+    // at core/java/android/app/NotificationChannelGroup.java
+    optional int32 user_locked_fields = 6;
+}
+
 message PowerProfileProto {
     optional double cpu_suspend = 1;
 
@@ -6980,6 +7064,20 @@
     optional string description = 6;
     optional Method method = 7;
     optional string mime_types = 8;
+
+    optional int64 get_constraints_count =  9;
+    optional int64 get_metadata_count = 10;
+    optional int64 can_handle_count = 11;
+    optional int64 process_drm_info_count = 12;
+    optional int64 acquire_drm_info_count = 13;
+    optional int64 save_rights_count = 14;
+    optional int64 get_original_mime_type_count = 15;
+    optional int64 get_drm_object_type_count = 16;
+    optional int64 check_rights_status_count = 17;
+    optional int64 remove_rights_count = 18;
+    optional int64 remove_all_rights_count = 19;
+    optional int64 open_convert_session_count = 20;
+    optional int64 open_decrypt_session_count = 21;
 }
 
 /**
@@ -7513,6 +7611,9 @@
 
     // Button clicked by user - same as bit flags in buttons_presented with only single bit set
     optional int32 button_clicked = 5;
+
+    // id which identifies single session of user interacting with permission controller
+    optional int64 session_id = 6;
 }
 
 /**
@@ -7910,6 +8011,22 @@
     // Total time that was spent performing animations.
     // This is derived from the present-to-present layer histogram
     optional int64 animation_millis = 5;
+    // Total number of event connections tracked by SurfaceFlinger at the time
+    // of this pull. If this number grows prohibitively large, then this can
+    // cause jank due to resource contention.
+    optional int32 event_connection_count = 6;
+    // Set of timings measured from when SurfaceFlinger began compositing a
+    // frame, until the frame was requested to be presented to the display. This
+    // measures SurfaceFlinger's total CPU walltime on the critical path per
+    // frame.
+    optional FrameTimingHistogram frame_duration = 7
+        [(android.os.statsd.log_mode) = MODE_BYTES];
+    // Set of timings measured from when SurfaceFlinger first began using the
+    // GPU to composite a frame, until the GPU has finished compositing that
+    // frame. This measures the total additional time SurfaceFlinger needed to
+    // perform due to falling back into GPU composition.
+    optional FrameTimingHistogram render_engine_timing = 8
+        [(android.os.statsd.log_mode) = MODE_BYTES];
 }
 
 /**
@@ -7951,6 +8068,10 @@
     // presentation, until the buffer was ready to be presented.
     optional FrameTimingHistogram post_to_acquire = 9
         [(android.os.statsd.log_mode) = MODE_BYTES];
+    // Frames missed latch because the acquire fence didn't fire
+    optional int64 late_acquire_frames = 10;
+    // Frames latched early because the desired present time was bad
+    optional int64 bad_desired_present_frames = 11;
 }
 
 /**
@@ -8110,14 +8231,6 @@
 }
 
 /**
- * HWUI renders pipeline type: GL (0) or Vulkan (1).
- */
-enum PipelineType {
-    GL = 0;
-    VULKAN = 1;
-}
-
-/**
  * HWUI stats for a given app.
  */
 message GraphicsStats {
@@ -8130,9 +8243,16 @@
     // The start & end timestamps in UTC as
     // milliseconds since January 1, 1970
     // Compatible with java.util.Date#setTime()
-    optional int64 stats_start = 3;
+    optional int64 start_millis = 3;
 
-    optional int64 stats_end = 4;
+    optional int64 end_millis = 4;
+
+    // HWUI renders pipeline type: GL (1) or Vulkan (2).
+    enum PipelineType {
+        UNKNOWN = 0;
+        GL = 1;
+        VULKAN = 2;
+    }
 
     // HWUI renders pipeline type: GL or Vulkan.
     optional PipelineType pipeline = 5;
@@ -8337,3 +8457,52 @@
     // Exception message (or log message) associated with the error (max 1000 chars)
     optional string exception_message = 2;
 }
+
+/**
+ * Logs when the SDK Extensions test app has polled the current version.
+ * This is atom ID 354.
+ *
+ * Logged from:
+ *   vendor/google_testing/integration/packages/apps/SdkExtensionsTestApp/
+ */
+message SdkExtensionStatus {
+    enum ApiCallStatus {
+        CALL_NOT_ATTEMPTED = 0;
+        CALL_SUCCESSFUL = 1;
+        CALL_FAILED = 2;
+    }
+
+    optional ApiCallStatus result = 1;
+
+    // The R extension version, i.e. android.os.ext.SdkExtension.getExtensionVersion(R).
+    optional int32 r_extension_version = 2;
+
+    // A number identifying which particular symbol's call failed, if any. 0 means no missing symbol.
+    // "Failed" here can mean a symbol that wasn't meant to be visible was, or the other way around.
+    optional int32 failed_call_symbol = 3;
+}
+
+/**
+ * Logs when an app is frozen or unfrozen.
+ *
+ * Logged from:
+ *   frameworks/base/services/core/java/com/android/server/am/CachedAppOptimizer.java
+ */
+message AppFreezeChanged {
+  // The type of event.
+  enum Action {
+    UNKNOWN = 0;
+    FREEZE_APP = 1;
+    UNFREEZE_APP = 2;
+  }
+  optional Action action = 1;
+
+  // Pid of the process being frozen.
+  optional int32 pid = 2;
+
+  // Name of the process being frozen.
+  optional string process_name = 3;
+
+  // Time since last unfrozen.
+  optional int64 time_unfrozen_millis = 4;
+}
diff --git a/cmds/statsd/src/config/ConfigManager.cpp b/cmds/statsd/src/config/ConfigManager.cpp
index 986955b..9bdb588 100644
--- a/cmds/statsd/src/config/ConfigManager.cpp
+++ b/cmds/statsd/src/config/ConfigManager.cpp
@@ -42,42 +42,67 @@
 using android::base::StringPrintf;
 using std::unique_ptr;
 
-class ConfigReceiverDeathRecipient : public android::IBinder::DeathRecipient {
-    public:
-        ConfigReceiverDeathRecipient(sp<ConfigManager> configManager, const ConfigKey& configKey):
-            mConfigManager(configManager),
-            mConfigKey(configKey) {}
-        ~ConfigReceiverDeathRecipient() override = default;
-    private:
-        sp<ConfigManager> mConfigManager;
-        ConfigKey mConfigKey;
+struct ConfigReceiverDeathCookie {
+    ConfigReceiverDeathCookie(sp<ConfigManager> configManager, const ConfigKey& configKey,
+                              const shared_ptr<IPendingIntentRef>& pir):
+        mConfigManager(configManager),
+        mConfigKey(configKey),
+        mPir(pir) {}
 
-    void binderDied(const android::wp<android::IBinder>& who) override {
-        if (IInterface::asBinder(mConfigManager->GetConfigReceiver(mConfigKey)) == who.promote()) {
-             mConfigManager->RemoveConfigReceiver(mConfigKey);
-        }
-    }
+    sp<ConfigManager> mConfigManager;
+    ConfigKey mConfigKey;
+    shared_ptr<IPendingIntentRef> mPir;
 };
 
-class ActiveConfigChangedReceiverDeathRecipient : public android::IBinder::DeathRecipient {
-    public:
-        ActiveConfigChangedReceiverDeathRecipient(sp<ConfigManager> configManager, const int uid):
-            mConfigManager(configManager),
-            mUid(uid) {}
-        ~ActiveConfigChangedReceiverDeathRecipient() override = default;
-    private:
-        sp<ConfigManager> mConfigManager;
-        int mUid;
+static void configReceiverDied(void* cookie) {
+    auto cookie_ = static_cast<ConfigReceiverDeathCookie*>(cookie);
+    sp<ConfigManager> configManager = cookie_->mConfigManager;
+    ConfigKey configKey = cookie_->mConfigKey;
+    shared_ptr<IPendingIntentRef> pir = cookie_->mPir;
 
-    void binderDied(const android::wp<android::IBinder>& who) override {
-        if (IInterface::asBinder(mConfigManager->GetActiveConfigsChangedReceiver(mUid))
-              == who.promote()) {
-            mConfigManager->RemoveActiveConfigsChangedReceiver(mUid);
-        }
+    // TODO(b/149254662): Fix threading. This currently fails if a new
+    // pir gets set between the get and the remove.
+    if (configManager->GetConfigReceiver(configKey) == pir) {
+        configManager->RemoveConfigReceiver(configKey);
     }
+    // The death recipient corresponding to this specific pir can never
+    // be triggered again, so free up resources.
+    // TODO(b/149254662): Investigate other options to manage the memory.
+    delete cookie_;
+}
+
+struct ActiveConfigChangedReceiverDeathCookie {
+    ActiveConfigChangedReceiverDeathCookie(sp<ConfigManager> configManager, const int uid,
+                                           const shared_ptr<IPendingIntentRef>& pir):
+        mConfigManager(configManager),
+        mUid(uid),
+        mPir(pir) {}
+
+    sp<ConfigManager> mConfigManager;
+    int mUid;
+    shared_ptr<IPendingIntentRef> mPir;
 };
 
-ConfigManager::ConfigManager() {
+static void activeConfigChangedReceiverDied(void* cookie) {
+    auto cookie_ = static_cast<ActiveConfigChangedReceiverDeathCookie*>(cookie);
+    sp<ConfigManager> configManager = cookie_->mConfigManager;
+    int uid = cookie_->mUid;
+    shared_ptr<IPendingIntentRef> pir = cookie_->mPir;
+
+    // TODO(b/149254662): Fix threading. This currently fails if a new
+    // pir gets set between the get and the remove.
+    if (configManager->GetActiveConfigsChangedReceiver(uid) == pir) {
+        configManager->RemoveActiveConfigsChangedReceiver(uid);
+    }
+    // The death recipient corresponding to this specific pir can never
+    // be triggered again, so free up resources.
+    delete cookie_;
+}
+
+ConfigManager::ConfigManager():
+    mConfigReceiverDeathRecipient(AIBinder_DeathRecipient_new(configReceiverDied)),
+    mActiveConfigChangedReceiverDeathRecipient(
+        AIBinder_DeathRecipient_new(activeConfigChangedReceiverDied)) {
 }
 
 ConfigManager::~ConfigManager() {
@@ -150,10 +175,11 @@
 }
 
 void ConfigManager::SetConfigReceiver(const ConfigKey& key,
-                                      const sp<IPendingIntentRef>& pir) {
+                                      const shared_ptr<IPendingIntentRef>& pir) {
     lock_guard<mutex> lock(mMutex);
     mConfigReceivers[key] = pir;
-    IInterface::asBinder(pir)->linkToDeath(new ConfigReceiverDeathRecipient(this, key));
+    AIBinder_linkToDeath(pir->asBinder().get(), mConfigReceiverDeathRecipient.get(),
+                         new ConfigReceiverDeathCookie(this, key, pir));
 }
 
 void ConfigManager::RemoveConfigReceiver(const ConfigKey& key) {
@@ -162,11 +188,11 @@
 }
 
 void ConfigManager::SetActiveConfigsChangedReceiver(const int uid,
-                                                    const sp<IPendingIntentRef>& pir) {
+                                                    const shared_ptr<IPendingIntentRef>& pir) {
     lock_guard<mutex> lock(mMutex);
     mActiveConfigsChangedReceivers[uid] = pir;
-    IInterface::asBinder(pir)->linkToDeath(
-        new ActiveConfigChangedReceiverDeathRecipient(this, uid));
+    AIBinder_linkToDeath(pir->asBinder().get(), mActiveConfigChangedReceiverDeathRecipient.get(),
+                         new ActiveConfigChangedReceiverDeathCookie(this, uid, pir));
 }
 
 void ConfigManager::RemoveActiveConfigsChangedReceiver(const int uid) {
@@ -279,7 +305,7 @@
     return ret;
 }
 
-const sp<IPendingIntentRef> ConfigManager::GetConfigReceiver(const ConfigKey& key) const {
+const shared_ptr<IPendingIntentRef> ConfigManager::GetConfigReceiver(const ConfigKey& key) const {
     lock_guard<mutex> lock(mMutex);
 
     auto it = mConfigReceivers.find(key);
@@ -290,7 +316,8 @@
     }
 }
 
-const sp<IPendingIntentRef> ConfigManager::GetActiveConfigsChangedReceiver(const int uid) const {
+const shared_ptr<IPendingIntentRef> ConfigManager::GetActiveConfigsChangedReceiver(const int uid)
+        const {
     lock_guard<mutex> lock(mMutex);
 
     auto it = mActiveConfigsChangedReceivers.find(uid);
diff --git a/cmds/statsd/src/config/ConfigManager.h b/cmds/statsd/src/config/ConfigManager.h
index 2095173..824e588 100644
--- a/cmds/statsd/src/config/ConfigManager.h
+++ b/cmds/statsd/src/config/ConfigManager.h
@@ -19,12 +19,15 @@
 #include "config/ConfigKey.h"
 #include "config/ConfigListener.h"
 
-#include <android/os/IPendingIntentRef.h>
+#include <aidl/android/os/IPendingIntentRef.h>
 #include <mutex>
 #include <string>
 
 #include <stdio.h>
 
+using aidl::android::os::IPendingIntentRef;
+using std::shared_ptr;
+
 namespace android {
 namespace os {
 namespace statsd {
@@ -62,12 +65,12 @@
     /**
      * Sets the broadcast receiver for a configuration key.
      */
-    void SetConfigReceiver(const ConfigKey& key, const sp<IPendingIntentRef>& pir);
+    void SetConfigReceiver(const ConfigKey& key, const shared_ptr<IPendingIntentRef>& pir);
 
     /**
      * Returns the package name and class name representing the broadcast receiver for this config.
      */
-    const sp<IPendingIntentRef> GetConfigReceiver(const ConfigKey& key) const;
+    const shared_ptr<IPendingIntentRef> GetConfigReceiver(const ConfigKey& key) const;
 
     /**
      * Returns all config keys registered.
@@ -83,13 +86,13 @@
      * Sets the broadcast receiver that is notified whenever the list of active configs
      * changes for this uid.
      */
-    void SetActiveConfigsChangedReceiver(const int uid, const sp<IPendingIntentRef>& pir);
+    void SetActiveConfigsChangedReceiver(const int uid, const shared_ptr<IPendingIntentRef>& pir);
 
     /**
      * Returns the broadcast receiver for active configs changed for this uid.
      */
 
-    const sp<IPendingIntentRef> GetActiveConfigsChangedReceiver(const int uid) const;
+    const shared_ptr<IPendingIntentRef> GetActiveConfigsChangedReceiver(const int uid) const;
 
     /**
      * Erase any active configs changed broadcast receiver associated with this uid.
@@ -141,18 +144,23 @@
     /**
      * Each config key can be subscribed by up to one receiver, specified as IPendingIntentRef.
      */
-    std::map<ConfigKey, sp<IPendingIntentRef>> mConfigReceivers;
+    std::map<ConfigKey, shared_ptr<IPendingIntentRef>> mConfigReceivers;
 
     /**
      * Each uid can be subscribed by up to one receiver to notify that the list of active configs
      * for this uid has changed. The receiver is specified as IPendingIntentRef.
      */
-     std::map<int, sp<IPendingIntentRef>> mActiveConfigsChangedReceivers;
+     std::map<int, shared_ptr<IPendingIntentRef>> mActiveConfigsChangedReceivers;
 
     /**
      * The ConfigListeners that will be told about changes.
      */
     std::vector<sp<ConfigListener>> mListeners;
+
+    // Death recipients that are triggered when the host process holding an
+    // IPendingIntentRef dies.
+    ::ndk::ScopedAIBinder_DeathRecipient mConfigReceiverDeathRecipient;
+    ::ndk::ScopedAIBinder_DeathRecipient mActiveConfigChangedReceiverDeathRecipient;
 };
 
 }  // namespace statsd
diff --git a/cmds/statsd/src/external/PullResultReceiver.cpp b/cmds/statsd/src/external/PullResultReceiver.cpp
index 6b6fe7d..8aa4792 100644
--- a/cmds/statsd/src/external/PullResultReceiver.cpp
+++ b/cmds/statsd/src/external/PullResultReceiver.cpp
@@ -16,17 +16,12 @@
 
 #include "PullResultReceiver.h"
 
-using namespace android::binder;
-using namespace android::util;
-using namespace std;
-
 namespace android {
 namespace os {
 namespace statsd {
 
 PullResultReceiver::PullResultReceiver(
-        std::function<void(int32_t, bool, const vector<android::util::StatsEventParcel>&)>
-             pullFinishCb)
+        std::function<void(int32_t, bool, const vector<StatsEventParcel>&)> pullFinishCb)
     : pullFinishCallback(std::move(pullFinishCb)) {
 }
 
diff --git a/cmds/statsd/src/external/PullResultReceiver.h b/cmds/statsd/src/external/PullResultReceiver.h
index 17d06e4..ceaae80 100644
--- a/cmds/statsd/src/external/PullResultReceiver.h
+++ b/cmds/statsd/src/external/PullResultReceiver.h
@@ -14,29 +14,33 @@
  * limitations under the License.
  */
 
-#include <android/os/BnPullAtomResultReceiver.h>
+#include <aidl/android/os/BnPullAtomResultReceiver.h>
+#include <aidl/android/util/StatsEventParcel.h>
 
 using namespace std;
 
+using Status = ::ndk::ScopedAStatus;
+using aidl::android::os::BnPullAtomResultReceiver;
+using aidl::android::util::StatsEventParcel;
+
 namespace android {
 namespace os {
 namespace statsd {
 
 class PullResultReceiver : public BnPullAtomResultReceiver {
 public:
-    PullResultReceiver(function<void(int32_t, bool, const vector<android::util::StatsEventParcel>&)>
+    PullResultReceiver(function<void(int32_t, bool, const vector<StatsEventParcel>&)>
                                pullFinishCallback);
     ~PullResultReceiver();
 
     /**
      * Binder call for finishing a pull.
      */
-    binder::Status pullFinished(int32_t atomTag, bool success,
-                                const vector<android::util::StatsEventParcel>& output) override;
+    Status pullFinished(int32_t atomTag, bool success,
+                        const vector<StatsEventParcel>& output) override;
 
 private:
-    function<void(int32_t, bool, const vector<android::util::StatsEventParcel>&)>
-            pullFinishCallback;
+    function<void(int32_t, bool, const vector<StatsEventParcel>&)> pullFinishCallback;
 };
 
 }  // namespace statsd
diff --git a/cmds/statsd/src/external/StatsCallbackPuller.cpp b/cmds/statsd/src/external/StatsCallbackPuller.cpp
index 1a11f0e..0edf40b 100644
--- a/cmds/statsd/src/external/StatsCallbackPuller.cpp
+++ b/cmds/statsd/src/external/StatsCallbackPuller.cpp
@@ -18,24 +18,24 @@
 #include "Log.h"
 
 #include "StatsCallbackPuller.h"
-
-#include <android/os/IPullAtomCallback.h>
-#include <android/util/StatsEventParcel.h>
-
 #include "PullResultReceiver.h"
 #include "StatsPullerManager.h"
 #include "logd/LogEvent.h"
 #include "stats_log_util.h"
 
-using namespace android::binder;
-using namespace android::util;
+#include <aidl/android/util/StatsEventParcel.h>
+
 using namespace std;
 
+using Status = ::ndk::ScopedAStatus;
+using aidl::android::util::StatsEventParcel;
+using ::ndk::SharedRefBase;
+
 namespace android {
 namespace os {
 namespace statsd {
 
-StatsCallbackPuller::StatsCallbackPuller(int tagId, const sp<IPullAtomCallback>& callback,
+StatsCallbackPuller::StatsCallbackPuller(int tagId, const shared_ptr<IPullAtomCallback>& callback,
                                          const int64_t coolDownNs, int64_t timeoutNs,
                                          const vector<int> additiveFields)
     : StatsPuller(tagId, coolDownNs, timeoutNs, additiveFields), mCallback(callback) {
@@ -57,7 +57,7 @@
     shared_ptr<vector<shared_ptr<LogEvent>>> sharedData =
             make_shared<vector<shared_ptr<LogEvent>>>();
 
-    sp<PullResultReceiver> resultReceiver = new PullResultReceiver(
+    shared_ptr<PullResultReceiver> resultReceiver = SharedRefBase::make<PullResultReceiver>(
             [cv_mutex, cv, pullFinish, pullSuccess, sharedData](
                     int32_t atomTag, bool success, const vector<StatsEventParcel>& output) {
                 // This is the result of the pull, executing in a statsd binder thread.
@@ -66,9 +66,10 @@
                 {
                     lock_guard<mutex> lk(*cv_mutex);
                     for (const StatsEventParcel& parcel: output) {
+                        uint8_t* buf = reinterpret_cast<uint8_t*>(
+                                const_cast<int8_t*>(parcel.buffer.data()));
                         shared_ptr<LogEvent> event = make_shared<LogEvent>(
-                                const_cast<uint8_t*>(parcel.buffer.data()), parcel.buffer.size(),
-                                /*uid=*/-1, /*pid=*/-1, /*useNewSchema=*/true);
+                                buf, parcel.buffer.size(), /*uid=*/-1, /*pid=*/-1);
                         sharedData->push_back(event);
                     }
                     *pullSuccess = success;
diff --git a/cmds/statsd/src/external/StatsCallbackPuller.h b/cmds/statsd/src/external/StatsCallbackPuller.h
index fe6af19..e82e8bb 100644
--- a/cmds/statsd/src/external/StatsCallbackPuller.h
+++ b/cmds/statsd/src/external/StatsCallbackPuller.h
@@ -16,23 +16,25 @@
 
 #pragma once
 
-#include <android/os/IPullAtomCallback.h>
-
+#include <aidl/android/os/IPullAtomCallback.h>
 #include "StatsPuller.h"
 
+using aidl::android::os::IPullAtomCallback;
+using std::shared_ptr;
+
 namespace android {
 namespace os {
 namespace statsd {
 
 class StatsCallbackPuller : public StatsPuller {
 public:
-    explicit StatsCallbackPuller(int tagId, const sp<IPullAtomCallback>& callback,
+    explicit StatsCallbackPuller(int tagId, const shared_ptr<IPullAtomCallback>& callback,
                                  const int64_t coolDownNs, const int64_t timeoutNs,
                                  const std::vector<int> additiveFields);
 
 private:
-    bool PullInternal(vector<std::shared_ptr<LogEvent> >* data) override;
-    const sp<IPullAtomCallback> mCallback;
+    bool PullInternal(vector<std::shared_ptr<LogEvent>>* data) override;
+    const shared_ptr<IPullAtomCallback> mCallback;
 
     FRIEND_TEST(StatsCallbackPullerTest, PullFail);
     FRIEND_TEST(StatsCallbackPullerTest, PullSuccess);
diff --git a/cmds/statsd/src/external/StatsPuller.h b/cmds/statsd/src/external/StatsPuller.h
index 9c21695..fee571c 100644
--- a/cmds/statsd/src/external/StatsPuller.h
+++ b/cmds/statsd/src/external/StatsPuller.h
@@ -16,7 +16,7 @@
 
 #pragma once
 
-#include <android/os/IStatsCompanionService.h>
+#include <aidl/android/os/IStatsCompanionService.h>
 #include <utils/RefBase.h>
 #include <mutex>
 #include <vector>
@@ -26,6 +26,9 @@
 #include "logd/LogEvent.h"
 #include "puller_util.h"
 
+using aidl::android::os::IStatsCompanionService;
+using std::shared_ptr;
+
 namespace android {
 namespace os {
 namespace statsd {
@@ -58,7 +61,8 @@
 
     static void SetUidMap(const sp<UidMap>& uidMap);
 
-    virtual void SetStatsCompanionService(sp<IStatsCompanionService> statsCompanionService){};
+    virtual void SetStatsCompanionService(
+            shared_ptr<IStatsCompanionService> statsCompanionService) {};
 
 protected:
     const int mTagId;
diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp
index 3ceff75..1c38542 100644
--- a/cmds/statsd/src/external/StatsPullerManager.cpp
+++ b/cmds/statsd/src/external/StatsPullerManager.cpp
@@ -19,8 +19,6 @@
 
 #include "StatsPullerManager.h"
 
-#include <android/os/IPullAtomCallback.h>
-#include <android/os/IStatsCompanionService.h>
 #include <cutils/log.h>
 #include <math.h>
 #include <stdint.h>
@@ -87,7 +85,10 @@
         return;
     }
 
-    sp<IStatsCompanionService> statsCompanionServiceCopy = mStatsCompanionService;
+    // TODO(b/149254662): Why are we creating a copy here? This is different
+    // from the other places where we create a copy because we don't reassign
+    // mStatsCompanionService so a destructor can't implicitly be called...
+    shared_ptr<IStatsCompanionService> statsCompanionServiceCopy = mStatsCompanionService;
     if (statsCompanionServiceCopy != nullptr) {
         statsCompanionServiceCopy->setPullingAlarm(mNextPullTimeNs / 1000000);
     } else {
@@ -97,9 +98,11 @@
 }
 
 void StatsPullerManager::SetStatsCompanionService(
-        sp<IStatsCompanionService> statsCompanionService) {
+        shared_ptr<IStatsCompanionService> statsCompanionService) {
+    // TODO(b/149254662): Why are we using AutoMutex instead of lock_guard?
+    // Additionally, do we need the temporary shared_ptr to prevent deadlocks?
     AutoMutex _l(mLock);
-    sp<IStatsCompanionService> tmpForLock = mStatsCompanionService;
+    shared_ptr<IStatsCompanionService> tmpForLock = mStatsCompanionService;
     mStatsCompanionService = statsCompanionService;
     for (const auto& pulledAtom : kAllPullAtomInfo) {
         pulledAtom.second->SetStatsCompanionService(statsCompanionService);
@@ -250,10 +253,11 @@
 void StatsPullerManager::RegisterPullAtomCallback(const int uid, const int32_t atomTag,
                                                   const int64_t coolDownNs, const int64_t timeoutNs,
                                                   const vector<int32_t>& additiveFields,
-                                                  const sp<IPullAtomCallback>& callback) {
+                                                  const shared_ptr<IPullAtomCallback>& callback) {
     AutoMutex _l(mLock);
     VLOG("RegisterPullerCallback: adding puller for tag %d", atomTag);
-    // TODO: linkToDeath with the callback so that we can remove it and delete the puller.
+    // TODO(b/146439412): linkToDeath with the callback so that we can remove it
+    // and delete the puller.
     StatsdStats::getInstance().notePullerCallbackRegistrationChanged(atomTag, /*registered=*/true);
     kAllPullAtomInfo[{.atomTag = atomTag}] =
             new StatsCallbackPuller(atomTag, callback, coolDownNs, timeoutNs, additiveFields);
diff --git a/cmds/statsd/src/external/StatsPullerManager.h b/cmds/statsd/src/external/StatsPullerManager.h
index aef16dc..e067766 100644
--- a/cmds/statsd/src/external/StatsPullerManager.h
+++ b/cmds/statsd/src/external/StatsPullerManager.h
@@ -16,9 +16,8 @@
 
 #pragma once
 
-#include <android/os/IPullAtomCallback.h>
-#include <android/os/IStatsCompanionService.h>
-#include <binder/IServiceManager.h>
+#include <aidl/android/os/IPullAtomCallback.h>
+#include <aidl/android/os/IStatsCompanionService.h>
 #include <utils/RefBase.h>
 #include <utils/threads.h>
 
@@ -30,11 +29,14 @@
 #include "guardrail/StatsdStats.h"
 #include "logd/LogEvent.h"
 
+using aidl::android::os::IPullAtomCallback;
+using aidl::android::os::IStatsCompanionService;
+using std::shared_ptr;
+
 namespace android {
 namespace os {
 namespace statsd {
 
-
 typedef struct PullerKey {
     // The uid of the process that registers this puller.
     const int uid = -1;
@@ -93,18 +95,18 @@
     // Clear pull data cache if it is beyond respective cool down time.
     int ClearPullerCacheIfNecessary(int64_t timestampNs);
 
-    void SetStatsCompanionService(sp<IStatsCompanionService> statsCompanionService);
+    void SetStatsCompanionService(shared_ptr<IStatsCompanionService> statsCompanionService);
 
     void RegisterPullAtomCallback(const int uid, const int32_t atomTag, const int64_t coolDownNs,
                                   const int64_t timeoutNs, const vector<int32_t>& additiveFields,
-                                  const sp<IPullAtomCallback>& callback);
+                                  const shared_ptr<IPullAtomCallback>& callback);
 
     void UnregisterPullAtomCallback(const int uid, const int32_t atomTag);
 
     std::map<const PullerKey, sp<StatsPuller>> kAllPullAtomInfo;
 
 private:
-    sp<IStatsCompanionService> mStatsCompanionService = nullptr;
+    shared_ptr<IStatsCompanionService> mStatsCompanionService = nullptr;
 
     typedef struct {
         int64_t nextPullTimeNs;
diff --git a/cmds/statsd/src/external/TrainInfoPuller.cpp b/cmds/statsd/src/external/TrainInfoPuller.cpp
index 9d09242..a7d8d4e 100644
--- a/cmds/statsd/src/external/TrainInfoPuller.cpp
+++ b/cmds/statsd/src/external/TrainInfoPuller.cpp
@@ -37,14 +37,16 @@
 }
 
 bool TrainInfoPuller::PullInternal(vector<shared_ptr<LogEvent>>* data) {
-    InstallTrainInfo trainInfo;
-    bool ret = StorageManager::readTrainInfo(trainInfo);
-    if (!ret) {
-        ALOGW("Failed to read train info.");
-        return false;
+    vector<InstallTrainInfo> trainInfoList =
+        StorageManager::readAllTrainInfo();
+    if (trainInfoList.empty()) {
+        ALOGW("Train info was empty.");
+        return true;
     }
-    auto event = make_shared<LogEvent>(getWallClockNs(), getElapsedRealtimeNs(), trainInfo);
-    data->push_back(event);
+    for (InstallTrainInfo& trainInfo : trainInfoList) {
+        auto event = make_shared<LogEvent>(getWallClockNs(), getElapsedRealtimeNs(), trainInfo);
+        data->push_back(event);
+    }
     return true;
 }
 
diff --git a/cmds/statsd/src/logd/LogEvent.cpp b/cmds/statsd/src/logd/LogEvent.cpp
index e8fc603..3e46d13 100644
--- a/cmds/statsd/src/logd/LogEvent.cpp
+++ b/cmds/statsd/src/logd/LogEvent.cpp
@@ -20,7 +20,8 @@
 #include "stats_log_util.h"
 #include "statslog.h"
 
-#include <binder/IPCThreadState.h>
+#include <android/binder_ibinder.h>
+#include <android-base/stringprintf.h>
 #include <private/android_filesystem_config.h>
 
 namespace android {
@@ -31,6 +32,7 @@
 const int FIELD_ID_EXPERIMENT_ID = 1;
 
 using namespace android::util;
+using android::base::StringPrintf;
 using android::util::ProtoOutputStream;
 using std::string;
 using std::vector;
@@ -72,29 +74,7 @@
       mLogUid(uid),
       mLogPid(pid)
 {
-#ifdef NEW_ENCODING_SCHEME
     initNew();
-# else
-    mContext = create_android_log_parser((char*)msg, len);
-    init(mContext);
-    if (mContext) android_log_destroy(&mContext); // set mContext to NULL
-#endif
-}
-
-LogEvent::LogEvent(uint8_t* msg, uint32_t len, int32_t uid, int32_t pid, bool useNewSchema)
-    : mBuf(msg),
-      mRemainingLen(len),
-      mLogdTimestampNs(time(nullptr)),
-      mLogUid(uid),
-      mLogPid(pid)
-{
-    if (useNewSchema) {
-        initNew();
-    } else {
-        mContext = create_android_log_parser((char*)msg, len);
-        init(mContext);
-        if (mContext) android_log_destroy(&mContext);  // set mContext to NULL
-    }
 }
 
 LogEvent::LogEvent(const LogEvent& event) {
@@ -180,8 +160,8 @@
     mLogdTimestampNs = getWallClockNs();
     mElapsedTimestampNs = getElapsedRealtimeNs();
     mTagId = android::util::BINARY_PUSH_STATE_CHANGED;
-    mLogUid = android::IPCThreadState::self()->getCallingUid();
-    mLogPid = android::IPCThreadState::self()->getCallingPid();
+    mLogUid = AIBinder_getCallingUid();
+    mLogPid = AIBinder_getCallingPid();
 
     mValues.push_back(FieldValue(Field(mTagId, getSimpleField(1)), Value(trainName)));
     mValues.push_back(FieldValue(Field(mTagId, getSimpleField(2)), Value(trainVersionCode)));
@@ -195,37 +175,6 @@
 }
 
 LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs,
-                   const VendorAtom& vendorAtom) {
-    mLogdTimestampNs = wallClockTimestampNs;
-    mElapsedTimestampNs = elapsedTimestampNs;
-    mTagId = vendorAtom.atomId;
-    mLogUid = AID_STATSD;
-
-    mValues.push_back(
-            FieldValue(Field(mTagId, getSimpleField(1)), Value(vendorAtom.reverseDomainName)));
-    for (int i = 0; i < (int)vendorAtom.values.size(); i++) {
-        switch (vendorAtom.values[i].getDiscriminator()) {
-            case VendorAtom::Value::hidl_discriminator::intValue:
-                mValues.push_back(FieldValue(Field(mTagId, getSimpleField(i + 2)),
-                                             Value(vendorAtom.values[i].intValue())));
-                break;
-            case VendorAtom::Value::hidl_discriminator::longValue:
-                mValues.push_back(FieldValue(Field(mTagId, getSimpleField(i + 2)),
-                                             Value(vendorAtom.values[i].longValue())));
-                break;
-            case VendorAtom::Value::hidl_discriminator::floatValue:
-                mValues.push_back(FieldValue(Field(mTagId, getSimpleField(i + 2)),
-                                             Value(vendorAtom.values[i].floatValue())));
-                break;
-            case VendorAtom::Value::hidl_discriminator::stringValue:
-                mValues.push_back(FieldValue(Field(mTagId, getSimpleField(i + 2)),
-                                             Value(vendorAtom.values[i].stringValue())));
-                break;
-        }
-    }
-}
-
-LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs,
                    const InstallTrainInfo& trainInfo) {
     mLogdTimestampNs = wallClockTimestampNs;
     mElapsedTimestampNs = elapsedTimestampNs;
@@ -254,22 +203,6 @@
     }
 }
 
-void LogEvent::init() {
-    if (mContext) {
-        const char* buffer;
-        size_t len = android_log_write_list_buffer(mContext, &buffer);
-        // turns to reader mode
-        android_log_context contextForRead = create_android_log_parser(buffer, len);
-        if (contextForRead) {
-            init(contextForRead);
-            // destroy the context to save memory.
-            // android_log_destroy will set mContext to NULL
-            android_log_destroy(&contextForRead);
-        }
-        android_log_destroy(&mContext);
-    }
-}
-
 LogEvent::~LogEvent() {
     if (mContext) {
         // This is for the case when LogEvent is created using the test interface
@@ -321,9 +254,9 @@
 }
 
 bool LogEvent::writeBytes(const string& value) {
-    if (mContext) {
+    /* if (mContext) {
         return android_log_write_char_array(mContext, value.c_str(), value.length()) >= 0;
-    }
+    }*/
     return false;
 }
 
@@ -606,132 +539,6 @@
     return (typeInfo >> 4) & 0x0F;
 }
 
-/**
- * The elements of each log event are stored as a vector of android_log_list_elements.
- * The goal is to do as little preprocessing as possible, because we read a tiny fraction
- * of the elements that are written to the log.
- *
- * The idea here is to read through the log items once, we get as much information we need for
- * matching as possible. Because this log will be matched against lots of matchers.
- */
-void LogEvent::init(android_log_context context) {
-    android_log_list_element elem;
-    int i = 0;
-    int depth = -1;
-    int pos[] = {1, 1, 1};
-    bool isKeyValuePairAtom = false;
-    do {
-        elem = android_log_read_next(context);
-        switch ((int)elem.type) {
-            case EVENT_TYPE_INT:
-                // elem at [0] is EVENT_TYPE_LIST, [1] is the timestamp, [2] is tag id.
-                if (i == 2) {
-                    mTagId = elem.data.int32;
-                    isKeyValuePairAtom = (mTagId == android::util::KEY_VALUE_PAIRS_ATOM);
-                } else {
-                    if (depth < 0 || depth > 2) {
-                        return;
-                    }
-
-                    mValues.push_back(
-                            FieldValue(Field(mTagId, pos, depth), Value((int32_t)elem.data.int32)));
-
-                    pos[depth]++;
-                }
-                break;
-            case EVENT_TYPE_FLOAT: {
-                if (depth < 0 || depth > 2) {
-                    ALOGE("Depth > 2. Not supported!");
-                    return;
-                }
-
-                // Handles the oneof field in KeyValuePair atom.
-                if (isKeyValuePairAtom && depth == 2) {
-                    pos[depth] = 5;
-                }
-
-                mValues.push_back(FieldValue(Field(mTagId, pos, depth), Value(elem.data.float32)));
-
-                pos[depth]++;
-
-            } break;
-            case EVENT_TYPE_STRING: {
-                if (depth < 0 || depth > 2) {
-                    ALOGE("Depth > 2. Not supported!");
-                    return;
-                }
-
-                // Handles the oneof field in KeyValuePair atom.
-                if (isKeyValuePairAtom && depth == 2) {
-                    pos[depth] = 4;
-                }
-                mValues.push_back(FieldValue(Field(mTagId, pos, depth),
-                                             Value(string(elem.data.string, elem.len))));
-
-                pos[depth]++;
-
-            } break;
-            case EVENT_TYPE_LONG: {
-                if (i == 1) {
-                    mElapsedTimestampNs = elem.data.int64;
-                } else {
-                    if (depth < 0 || depth > 2) {
-                        ALOGE("Depth > 2. Not supported!");
-                        return;
-                    }
-                    // Handles the oneof field in KeyValuePair atom.
-                    if (isKeyValuePairAtom && depth == 2) {
-                        pos[depth] = 3;
-                    }
-                    mValues.push_back(
-                            FieldValue(Field(mTagId, pos, depth), Value((int64_t)elem.data.int64)));
-
-                    pos[depth]++;
-                }
-            } break;
-            case EVENT_TYPE_LIST:
-                depth++;
-                if (depth > 2) {
-                    ALOGE("Depth > 2. Not supported!");
-                    return;
-                }
-                pos[depth] = 1;
-
-                break;
-            case EVENT_TYPE_LIST_STOP: {
-                int prevDepth = depth;
-                depth--;
-                if (depth >= 0 && depth < 2) {
-                    // Now go back to decorate the previous items that are last at prevDepth.
-                    // So that we can later easily match them with Position=Last matchers.
-                    pos[prevDepth]--;
-                    int path = getEncodedField(pos, prevDepth, false);
-                    for (auto it = mValues.rbegin(); it != mValues.rend(); ++it) {
-                        if (it->mField.getDepth() >= prevDepth &&
-                            it->mField.getPath(prevDepth) == path) {
-                            it->mField.decorateLastPos(prevDepth);
-                        } else {
-                            // Safe to break, because the items are in DFS order.
-                            break;
-                        }
-                    }
-                    pos[depth]++;
-                }
-                break;
-            }
-            case EVENT_TYPE_UNKNOWN:
-                break;
-            default:
-                break;
-        }
-        i++;
-    } while ((elem.type != EVENT_TYPE_UNKNOWN) && !elem.complete);
-    if (isKeyValuePairAtom && mValues.size() > 0) {
-        mValues[0] = FieldValue(Field(android::util::KEY_VALUE_PAIRS_ATOM, getSimpleField(1)),
-                                Value((int32_t)mLogUid));
-    }
-}
-
 int64_t LogEvent::GetLong(size_t key, status_t* err) const {
     // TODO(b/110561208): encapsulate the magical operations in Field struct as static functions
     int field = getSimpleField(key);
diff --git a/cmds/statsd/src/logd/LogEvent.h b/cmds/statsd/src/logd/LogEvent.h
index e4b784e..e167e67 100644
--- a/cmds/statsd/src/logd/LogEvent.h
+++ b/cmds/statsd/src/logd/LogEvent.h
@@ -18,17 +18,13 @@
 
 #include "FieldValue.h"
 
-#include <android/frameworks/stats/1.0/types.h>
 #include <android/util/ProtoOutputStream.h>
 #include <private/android_logger.h>
-#include <stats_event_list.h>
 #include <stats_event.h>
 
 #include <string>
 #include <vector>
 
-using namespace android::frameworks::stats::V1_0;
-
 namespace android {
 namespace os {
 namespace statsd {
@@ -59,6 +55,9 @@
     std::string trainName;
     int32_t status;
     std::vector<int64_t> experimentIds;
+    bool requiresStaging;
+    bool rollbackEnabled;
+    bool requiresLowLatencyMonitor;
 };
 
 /**
@@ -72,11 +71,6 @@
     explicit LogEvent(uint8_t* msg, uint32_t len, int32_t uid, int32_t pid);
 
     /**
-     * Temp constructor to use for pulled atoms until we flip the socket schema.
-     */
-    explicit LogEvent(uint8_t* msg, uint32_t len, int32_t uid, int32_t pid, bool useNewSchema);
-
-    /**
      * Constructs a LogEvent with synthetic data for testing. Must call init() before reading.
      */
     explicit LogEvent(int32_t tagId, int64_t wallClockTimestampNs, int64_t elapsedTimestampNs);
@@ -103,9 +97,6 @@
                       const std::vector<uint8_t>& experimentIds, int32_t userId);
 
     explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs,
-                      const VendorAtom& vendorAtom);
-
-    explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs,
                       const InstallTrainInfo& installTrainInfo);
 
     ~LogEvent();
@@ -176,12 +167,6 @@
     void ToProto(android::util::ProtoOutputStream& out) const;
 
     /**
-     * Used with the constructor where tag is passed in. Converts the log_event_list to read mode
-     * and prepares the list for reading.
-     */
-    void init();
-
-    /**
      * Set elapsed timestamp if the original timestamp is missing.
      */
     void setElapsedTimestampNs(int64_t timestampNs) {
@@ -308,11 +293,6 @@
     uint8_t getTypeId(uint8_t typeInfo);
     uint8_t getNumAnnotations(uint8_t typeInfo);
 
-    /**
-     * Parses a log_msg into a LogEvent object.
-     */
-    void init(android_log_context context);
-
     // The items are naturally sorted in DFS order as we read them. this allows us to do fast
     // matching.
     std::vector<FieldValue> mValues;
diff --git a/cmds/statsd/src/main.cpp b/cmds/statsd/src/main.cpp
index 58bfeb3..d79b6a2 100644
--- a/cmds/statsd/src/main.cpp
+++ b/cmds/statsd/src/main.cpp
@@ -20,10 +20,9 @@
 #include "StatsService.h"
 #include "socket/StatsSocketListener.h"
 
-#include <binder/IPCThreadState.h>
-#include <binder/IServiceManager.h>
-#include <binder/ProcessState.h>
-#include <hidl/HidlTransportSupport.h>
+#include <android/binder_interface_utils.h>
+#include <android/binder_process.h>
+#include <android/binder_manager.h>
 #include <utils/Looper.h>
 
 #include <stdio.h>
@@ -33,16 +32,11 @@
 
 using namespace android;
 using namespace android::os::statsd;
+using ::ndk::SharedRefBase;
+using std::shared_ptr;
+using std::make_shared;
 
-/**
- * Thread function data.
- */
-struct log_reader_thread_data {
-    sp<StatsService> service;
-};
-
-
-sp<StatsService> gStatsService = nullptr;
+shared_ptr<StatsService> gStatsService = nullptr;
 
 void sigHandler(int sig) {
     if (gStatsService != nullptr) {
@@ -69,32 +63,22 @@
     sp<Looper> looper(Looper::prepare(0 /* opts */));
 
     // Set up the binder
-    sp<ProcessState> ps(ProcessState::self());
-    ps->setThreadPoolMaxThreadCount(9);
-    ps->startThreadPool();
-    ps->giveThreadPoolName();
-    IPCThreadState::self()->disableBackgroundScheduling(true);
-
-    ::android::hardware::configureRpcThreadpool(4 /*threads*/, false /*willJoin*/);
+    ABinderProcess_setThreadPoolMaxThreadCount(9);
+    ABinderProcess_startThreadPool();
 
     std::shared_ptr<LogEventQueue> eventQueue =
             std::make_shared<LogEventQueue>(2000 /*buffer limit. Buffer is NOT pre-allocated*/);
 
     // Create the service
-    gStatsService = new StatsService(looper, eventQueue);
-    if (defaultServiceManager()->addService(String16("stats"), gStatsService, false,
-                IServiceManager::DUMP_FLAG_PRIORITY_NORMAL | IServiceManager::DUMP_FLAG_PROTO)
-            != 0) {
+    gStatsService = SharedRefBase::make<StatsService>(looper, eventQueue);
+    // TODO(b/149582373): Set DUMP_FLAG_PROTO once libbinder_ndk supports
+    // setting dumpsys priorities.
+    binder_status_t status = AServiceManager_addService(gStatsService->asBinder().get(), "stats");
+    if (status != STATUS_OK) {
         ALOGE("Failed to add service as AIDL service");
         return -1;
     }
 
-    auto ret = gStatsService->registerAsService();
-    if (ret != ::android::OK) {
-        ALOGE("Failed to add service as HIDL service");
-        return 1; // or handle error
-    }
-
     registerSigHandler();
 
     gStatsService->sayHiToStatsCompanion();
diff --git a/cmds/statsd/src/packages/UidMap.h b/cmds/statsd/src/packages/UidMap.h
index bfac6e3..4e3c506 100644
--- a/cmds/statsd/src/packages/UidMap.h
+++ b/cmds/statsd/src/packages/UidMap.h
@@ -21,10 +21,11 @@
 #include "packages/PackageInfoListener.h"
 #include "stats_util.h"
 
-#include <binder/IShellCallback.h>
 #include <gtest/gtest_prod.h>
 #include <stdio.h>
 #include <utils/RefBase.h>
+#include <utils/String16.h>
+
 #include <list>
 #include <mutex>
 #include <set>
diff --git a/cmds/statsd/src/shell/ShellSubscriber.cpp b/cmds/statsd/src/shell/ShellSubscriber.cpp
index d6a0433..a861a3b 100644
--- a/cmds/statsd/src/shell/ShellSubscriber.cpp
+++ b/cmds/statsd/src/shell/ShellSubscriber.cpp
@@ -29,49 +29,88 @@
 
 const static int FIELD_ID_ATOM = 1;
 
-void ShellSubscriber::startNewSubscription(int in, int out, sp<IResultReceiver> resultReceiver,
-                                           int timeoutSec) {
+void ShellSubscriber::startNewSubscription(int in, int out, int timeoutSec) {
     VLOG("start new shell subscription");
+    int64_t subscriberId = getElapsedRealtimeNs();
+
     {
         std::lock_guard<std::mutex> lock(mMutex);
-        if (mResultReceiver != nullptr) {
+        if (mSubscriberId> 0) {
             VLOG("Only one shell subscriber is allowed.");
             return;
         }
+        mSubscriberId = subscriberId;
         mInput = in;
         mOutput = out;
-        mResultReceiver = resultReceiver;
-        IInterface::asBinder(mResultReceiver)->linkToDeath(this);
     }
 
-    // Note that the following is blocking, and it's intended as we cannot return until the shell
-    // cmd exits, otherwise all resources & FDs will be automatically closed.
+    bool success = readConfig();
+    if (!success) {
+        std::lock_guard<std::mutex> lock(mMutex);
+        cleanUpLocked();
+    }
 
-    // Read config forever until EOF is reached. Clients may send multiple configs -- each new
-    // config replace the previous one.
-    readConfig(in);
-    VLOG("timeout : %d", timeoutSec);
-
-    // Now we have read an EOF we now wait for the semaphore until the client exits.
-    VLOG("Now wait for client to exit");
+    VLOG("Wait for client to exit or timeout (%d sec)", timeoutSec);
     std::unique_lock<std::mutex> lk(mMutex);
 
+    // Note that the following is blocking, and it's intended as we cannot return until the shell
+    // cmd exits or we time out.
     if (timeoutSec > 0) {
         mShellDied.wait_for(lk, timeoutSec * 1s,
-                            [this, resultReceiver] { return mResultReceiver != resultReceiver; });
+                            [this, subscriberId] { return mSubscriberId != subscriberId; });
     } else {
-        mShellDied.wait(lk, [this, resultReceiver] { return mResultReceiver != resultReceiver; });
+        mShellDied.wait(lk, [this, subscriberId] { return mSubscriberId != subscriberId; });
+    }
+}
+
+
+// Read configs until EOF is reached. There may be multiple configs in the input
+// -- each new config should replace the previous one.
+//
+// Returns a boolean indicating whether the input was read successfully.
+bool ShellSubscriber::readConfig() {
+    if (mInput < 0) {
+        return false;
+    }
+
+    while (true) {
+        // Read the size of the config.
+        size_t bufferSize = 0;
+        ssize_t bytesRead = read(mInput, &bufferSize, sizeof(bufferSize));
+        if (bytesRead == 0) {
+            VLOG("We have reached the end of the input.");
+            return true;
+        } else if (bytesRead < 0 || (size_t)bytesRead != sizeof(bufferSize)) {
+            ALOGE("Error reading config size");
+            return false;
+        }
+
+        // Read and parse the config.
+        vector<uint8_t> buffer(bufferSize);
+        bytesRead = read(mInput, buffer.data(), bufferSize);
+        if (bytesRead > 0 && (size_t)bytesRead == bufferSize) {
+            ShellSubscription config;
+            if (config.ParseFromArray(buffer.data(), bufferSize)) {
+                updateConfig(config);
+            } else {
+                ALOGE("Error parsing the config");
+                return false;
+            }
+        } else {
+            VLOG("Error reading the config, expected bytes: %zu, actual bytes: %zu", bufferSize, 
+                 bytesRead);
+            return false;
+        }
     }
 }
 
 void ShellSubscriber::updateConfig(const ShellSubscription& config) {
-    std::lock_guard<std::mutex> lock(mMutex);
     mPushedMatchers.clear();
     mPulledInfo.clear();
 
     for (const auto& pushed : config.pushed()) {
         mPushedMatchers.push_back(pushed);
-        VLOG("adding matcher for atom %d", pushed.atom_id());
+        VLOG("adding matcher for pushed atom %d", pushed.atom_id());
     }
 
     int64_t token = getElapsedRealtimeNs();
@@ -89,46 +128,20 @@
     }
 
     if (mPulledInfo.size() > 0 && minInterval > 0) {
-        // This thread is guaranteed to terminate after it detects the token is different or
-        // cleaned up.
+        // This thread is guaranteed to terminate after it detects the token is
+        // different.
         std::thread puller([token, minInterval, this] { startPull(token, minInterval); });
         puller.detach();
     }
 }
 
-void ShellSubscriber::writeToOutputLocked(const vector<std::shared_ptr<LogEvent>>& data,
-                                          const SimpleAtomMatcher& matcher) {
-    if (mOutput == 0) return;
-    int count = 0;
-    mProto.clear();
-    for (const auto& event : data) {
-        VLOG("%s", event->ToString().c_str());
-        if (matchesSimple(*mUidMap, matcher, *event)) {
-            VLOG("matched");
-            count++;
-            uint64_t atomToken = mProto.start(util::FIELD_TYPE_MESSAGE |
-                                              util::FIELD_COUNT_REPEATED | FIELD_ID_ATOM);
-            event->ToProto(mProto);
-            mProto.end(atomToken);
-        }
-    }
-
-    if (count > 0) {
-        // First write the payload size.
-        size_t bufferSize = mProto.size();
-        write(mOutput, &bufferSize, sizeof(bufferSize));
-        VLOG("%d atoms, proto size: %zu", count, bufferSize);
-        // Then write the payload.
-        mProto.flush(mOutput);
-    }
-    mProto.clear();
-}
-
 void ShellSubscriber::startPull(int64_t token, int64_t intervalMillis) {
-    while (1) {
+    while (true) {
         int64_t nowMillis = getElapsedRealtimeMillis();
         {
             std::lock_guard<std::mutex> lock(mMutex);
+            // If the token has changed, the config has changed, so this
+            // puller can now stop.
             if (mPulledInfo.size() == 0 || mPullToken != token) {
                 VLOG("Pulling thread %lld done!", (long long)token);
                 return;
@@ -152,55 +165,47 @@
     }
 }
 
-void ShellSubscriber::readConfig(int in) {
-    if (in <= 0) {
+// Must be called with the lock acquired, so that mProto isn't being written to
+// at the same time by multiple threads.
+void ShellSubscriber::writeToOutputLocked(const vector<std::shared_ptr<LogEvent>>& data,
+                                          const SimpleAtomMatcher& matcher) {
+    if (mOutput < 0) {
         return;
     }
-
-    while (1) {
-        size_t bufferSize = 0;
-        int result = 0;
-        if ((result = read(in, &bufferSize, sizeof(bufferSize))) == 0) {
-            VLOG("Done reading");
-            break;
-        } else if (result < 0 || result != sizeof(bufferSize)) {
-            ALOGE("Error reading config size");
-            break;
-        }
-
-        vector<uint8_t> buffer(bufferSize);
-        if ((result = read(in, buffer.data(), bufferSize)) > 0 && ((size_t)result) == bufferSize) {
-            ShellSubscription config;
-            if (config.ParseFromArray(buffer.data(), bufferSize)) {
-                updateConfig(config);
-            } else {
-                ALOGE("error parsing the config");
-                break;
-            }
-        } else {
-            VLOG("Error reading the config, returned: %d, expecting %zu", result, bufferSize);
-            break;
+    int count = 0;
+    mProto.clear();
+    for (const auto& event : data) {
+        VLOG("%s", event->ToString().c_str());
+        if (matchesSimple(*mUidMap, matcher, *event)) {
+            VLOG("matched");
+            count++;
+            uint64_t atomToken = mProto.start(util::FIELD_TYPE_MESSAGE |
+                                              util::FIELD_COUNT_REPEATED | FIELD_ID_ATOM);
+            event->ToProto(mProto);
+            mProto.end(atomToken);
         }
     }
-}
 
-void ShellSubscriber::cleanUpLocked() {
-    // The file descriptors will be closed by binder.
-    mInput = 0;
-    mOutput = 0;
-    mResultReceiver = nullptr;
-    mPushedMatchers.clear();
-    mPulledInfo.clear();
-    mPullToken = 0;
-    VLOG("done clean up");
+    if (count > 0) {
+        // First write the payload size.
+        size_t bufferSize = mProto.size();
+        write(mOutput, &bufferSize, sizeof(bufferSize));
+
+        VLOG("%d atoms, proto size: %zu", count, bufferSize);
+        // Then write the payload.
+        mProto.flush(mOutput);
+    }
 }
 
 void ShellSubscriber::onLogEvent(const LogEvent& event) {
+    // Acquire a lock to prevent corruption from multiple threads writing to
+    // mProto.
     std::lock_guard<std::mutex> lock(mMutex);
-
-    if (mOutput <= 0) {
+    if (mOutput < 0) {
         return;
     }
+
+    mProto.clear();
     for (const auto& matcher : mPushedMatchers) {
         if (matchesSimple(*mUidMap, matcher, event)) {
             VLOG("%s", event.ToString().c_str());
@@ -208,25 +213,27 @@
                                               util::FIELD_COUNT_REPEATED | FIELD_ID_ATOM);
             event.ToProto(mProto);
             mProto.end(atomToken);
+
             // First write the payload size.
             size_t bufferSize = mProto.size();
             write(mOutput, &bufferSize, sizeof(bufferSize));
 
             // Then write the payload.
             mProto.flush(mOutput);
-            mProto.clear();
-            break;
         }
     }
 }
 
-void ShellSubscriber::binderDied(const wp<IBinder>& who) {
-    {
-        VLOG("Shell exits");
-        std::lock_guard<std::mutex> lock(mMutex);
-        cleanUpLocked();
-    }
-    mShellDied.notify_all();
+void ShellSubscriber::cleanUpLocked() {
+    // The file descriptors will be closed by binder.
+    mInput = -1;
+    mOutput = -1;
+    mSubscriberId = 0;
+    mPushedMatchers.clear();
+    mPulledInfo.clear();
+    // Setting mPullToken == 0 tells pull thread that its work is done.
+    mPullToken = 0;
+    VLOG("done clean up");
 }
 
 }  // namespace statsd
diff --git a/cmds/statsd/src/shell/ShellSubscriber.h b/cmds/statsd/src/shell/ShellSubscriber.h
index 86d8590..eaf2ad1 100644
--- a/cmds/statsd/src/shell/ShellSubscriber.h
+++ b/cmds/statsd/src/shell/ShellSubscriber.h
@@ -19,7 +19,6 @@
 #include "logd/LogEvent.h"
 
 #include <android/util/ProtoOutputStream.h>
-#include <binder/IResultReceiver.h>
 #include <condition_variable>
 #include <mutex>
 #include <thread>
@@ -56,7 +55,7 @@
  * Only one shell subscriber allowed at a time, because each shell subscriber blocks one thread
  * until it exits.
  */
-class ShellSubscriber : public virtual IBinder::DeathRecipient {
+class ShellSubscriber : public virtual RefBase {
 public:
     ShellSubscriber(sp<UidMap> uidMap, sp<StatsPullerManager> pullerMgr)
         : mUidMap(uidMap), mPullerMgr(pullerMgr){};
@@ -64,10 +63,7 @@
     /**
      * Start a new subscription.
      */
-    void startNewSubscription(int inFd, int outFd, sp<IResultReceiver> resultReceiver,
-                              int timeoutSec);
-
-    void binderDied(const wp<IBinder>& who);
+    void startNewSubscription(int inFd, int outFd, int timeoutSec);
 
     void onLogEvent(const LogEvent& event);
 
@@ -80,7 +76,7 @@
         int64_t mInterval;
         int64_t mPrevPullElapsedRealtimeMs;
     };
-    void readConfig(int in);
+    bool readConfig();
 
     void updateConfig(const ShellSubscription& config);
 
@@ -101,16 +97,16 @@
 
     std::condition_variable mShellDied;  // semaphore for waiting until shell exits.
 
-    int mInput;  // The input file descriptor
+    int mInput = -1;  // The input file descriptor
 
-    int mOutput;  // The output file descriptor
-
-    sp<IResultReceiver> mResultReceiver;
+    int mOutput = -1;  // The output file descriptor
 
     std::vector<SimpleAtomMatcher> mPushedMatchers;
 
     std::vector<PullInfo> mPulledInfo;
 
+    int64_t mSubscriberId = 0; // A unique id to identify a subscriber.
+
     int64_t mPullToken = 0;  // A unique token to identify a puller thread.
 };
 
diff --git a/cmds/statsd/src/stats_log_util.cpp b/cmds/statsd/src/stats_log_util.cpp
index 73f640e..3d02ffb 100644
--- a/cmds/statsd/src/stats_log_util.cpp
+++ b/cmds/statsd/src/stats_log_util.cpp
@@ -17,6 +17,7 @@
 #include "hash.h"
 #include "stats_log_util.h"
 
+#include <aidl/android/os/IStatsCompanionService.h>
 #include <private/android_filesystem_config.h>
 #include <set>
 #include <utils/SystemClock.h>
@@ -35,6 +36,10 @@
 using android::util::FIELD_TYPE_UINT64;
 using android::util::ProtoOutputStream;
 
+using aidl::android::os::IStatsCompanionService;
+using std::shared_ptr;
+using std::string;
+
 namespace android {
 namespace os {
 namespace statsd {
@@ -587,13 +592,13 @@
 }
 
 bool checkPermissionForIds(const char* permission, pid_t pid, uid_t uid) {
-    sp<IStatsCompanionService> scs = getStatsCompanionService();
+    shared_ptr<IStatsCompanionService> scs = getStatsCompanionService();
     if (scs == nullptr) {
         return false;
     }
 
     bool success;
-    binder::Status status = scs->checkPermission(String16(permission), pid, uid, &success);
+    ::ndk::ScopedAStatus status = scs->checkPermission(string(permission), pid, uid, &success);
     if (!status.isOk()) {
         return false;
     }
diff --git a/cmds/statsd/src/statscompanion_util.cpp b/cmds/statsd/src/statscompanion_util.cpp
index d338827..ce07ec0 100644
--- a/cmds/statsd/src/statscompanion_util.cpp
+++ b/cmds/statsd/src/statscompanion_util.cpp
@@ -18,26 +18,16 @@
 #include "Log.h"
 
 #include "statscompanion_util.h"
+#include <android/binder_auto_utils.h>
+#include <android/binder_manager.h>
 
 namespace android {
 namespace os {
 namespace statsd {
 
-sp <IStatsCompanionService> getStatsCompanionService() {
-    sp<IStatsCompanionService> statsCompanion = nullptr;
-    // Get statscompanion service from service manager
-    static const sp <IServiceManager> sm(defaultServiceManager());
-    if (statsCompanion == nullptr) {
-        if (sm != nullptr) {
-            const String16 name("statscompanion");
-            statsCompanion = interface_cast<IStatsCompanionService>(sm->checkService(name));
-            if (statsCompanion == nullptr) {
-                ALOGW("statscompanion service unavailable!");
-                return nullptr;
-            }
-        }
-    }
-    return statsCompanion;
+shared_ptr<IStatsCompanionService> getStatsCompanionService() {
+    ::ndk::SpAIBinder binder(AServiceManager_getService("statscompanion"));
+    return IStatsCompanionService::fromBinder(binder);
 }
 
 }  // namespace statsd
diff --git a/cmds/statsd/src/statscompanion_util.h b/cmds/statsd/src/statscompanion_util.h
index dc4f283..e20c40b 100644
--- a/cmds/statsd/src/statscompanion_util.h
+++ b/cmds/statsd/src/statscompanion_util.h
@@ -16,14 +16,17 @@
 
 #pragma once
 
-#include "StatsLogProcessor.h"
+#include <aidl/android/os/IStatsCompanionService.h>
+
+using aidl::android::os::IStatsCompanionService;
+using std::shared_ptr;
 
 namespace android {
 namespace os {
 namespace statsd {
 
 /** Fetches and returns the StatsCompanionService. */
-sp<IStatsCompanionService> getStatsCompanionService();
+shared_ptr<IStatsCompanionService> getStatsCompanionService();
 
 }  // namespace statsd
 }  // namespace os
diff --git a/cmds/statsd/src/storage/StorageManager.cpp b/cmds/statsd/src/storage/StorageManager.cpp
index 507297c..4899b4a 100644
--- a/cmds/statsd/src/storage/StorageManager.cpp
+++ b/cmds/statsd/src/storage/StorageManager.cpp
@@ -44,7 +44,7 @@
 #define TRAIN_INFO_PATH "/data/misc/train-info/train-info.bin"
 
 // Magic word at the start of the train info file, change this if changing the file format
-const uint32_t TRAIN_INFO_FILE_MAGIC = 0xff7447ff;
+const uint32_t TRAIN_INFO_FILE_MAGIC = 0xfb7447bf;
 
 // for ConfigMetricsReportList
 const int FIELD_ID_REPORTS = 2;
@@ -75,6 +75,29 @@
                         (long long)id);
 }
 
+static const char* findTrainInfoFileNameLocked(const string& trainName) {
+    unique_ptr<DIR, decltype(&closedir)> dir(opendir(TRAIN_INFO_DIR), closedir);
+    if (dir == NULL) {
+        VLOG("Path %s does not exist", TRAIN_INFO_DIR);
+        return nullptr;
+    }
+    dirent* de;
+    while ((de = readdir(dir.get()))) {
+        char* fileName = de->d_name;
+        if (fileName[0] == '.') continue;
+
+        size_t fileNameLength = strlen(fileName);
+        if (fileNameLength >= trainName.length()) {
+            if (0 == strncmp(fileName + fileNameLength - trainName.length(), trainName.c_str(),
+                             trainName.length())) {
+                return fileName;
+            }
+        }
+    }
+
+    return nullptr;
+}
+
 // Returns array of int64_t which contains timestamp in seconds, uid,
 // configID and whether the file is a local history file.
 static void parseFileName(char* name, FileName* output) {
@@ -123,20 +146,25 @@
     close(fd);
 }
 
-bool StorageManager::writeTrainInfo(int64_t trainVersionCode, const std::string& trainName,
-                                    int32_t status, const std::vector<int64_t>& experimentIds) {
+bool StorageManager::writeTrainInfo(const InstallTrainInfo& trainInfo) {
     std::lock_guard<std::mutex> lock(sTrainInfoMutex);
 
-    deleteAllFiles(TRAIN_INFO_DIR);
+    if (trainInfo.trainName.empty()) {
+      return false;
+    }
+    deleteSuffixedFiles(TRAIN_INFO_DIR, trainInfo.trainName.c_str());
 
-    int fd = open(TRAIN_INFO_PATH, O_WRONLY | O_CREAT | O_CLOEXEC, S_IRUSR | S_IWUSR);
+    std::string fileName =
+            StringPrintf("%s/%ld_%s", TRAIN_INFO_DIR, (long) getWallClockSec(),
+                         trainInfo.trainName.c_str());
+
+    int fd = open(fileName.c_str(), O_WRONLY | O_CREAT | O_CLOEXEC, S_IRUSR | S_IWUSR);
     if (fd == -1) {
-        VLOG("Attempt to access %s but failed", TRAIN_INFO_PATH);
+        VLOG("Attempt to access %s but failed", fileName.c_str());
         return false;
     }
 
     size_t result;
-
     // Write the magic word
     result = write(fd, &TRAIN_INFO_FILE_MAGIC, sizeof(TRAIN_INFO_FILE_MAGIC));
     if (result != sizeof(TRAIN_INFO_FILE_MAGIC)) {
@@ -146,8 +174,8 @@
     }
 
     // Write the train version
-    const size_t trainVersionCodeByteCount = sizeof(trainVersionCode);
-    result = write(fd, &trainVersionCode, trainVersionCodeByteCount);
+    const size_t trainVersionCodeByteCount = sizeof(trainInfo.trainVersionCode);
+    result = write(fd, &trainInfo.trainVersionCode, trainVersionCodeByteCount);
     if (result != trainVersionCodeByteCount) {
         VLOG("Failed to wrtie train version code");
         close(fd);
@@ -155,7 +183,7 @@
     }
 
     // Write # of bytes in trainName to file
-    const size_t trainNameSize = trainName.size();
+    const size_t trainNameSize = trainInfo.trainName.size();
     const size_t trainNameSizeByteCount = sizeof(trainNameSize);
     result = write(fd, (uint8_t*)&trainNameSize, trainNameSizeByteCount);
     if (result != trainNameSizeByteCount) {
@@ -165,7 +193,7 @@
     }
 
     // Write trainName to file
-    result = write(fd, trainName.c_str(), trainNameSize);
+    result = write(fd, trainInfo.trainName.c_str(), trainNameSize);
     if (result != trainNameSize) {
         VLOG("Failed to write train name");
         close(fd);
@@ -173,8 +201,8 @@
     }
 
     // Write status to file
-    const size_t statusByteCount = sizeof(status);
-    result = write(fd, (uint8_t*)&status, statusByteCount);
+    const size_t statusByteCount = sizeof(trainInfo.status);
+    result = write(fd, (uint8_t*)&trainInfo.status, statusByteCount);
     if (result != statusByteCount) {
         VLOG("Failed to write status");
         close(fd);
@@ -182,7 +210,7 @@
     }
 
     // Write experiment id count to file.
-    const size_t experimentIdsCount = experimentIds.size();
+    const size_t experimentIdsCount = trainInfo.experimentIds.size();
     const size_t experimentIdsCountByteCount = sizeof(experimentIdsCount);
     result = write(fd, (uint8_t*) &experimentIdsCount, experimentIdsCountByteCount);
     if (result != experimentIdsCountByteCount) {
@@ -193,7 +221,7 @@
 
     // Write experimentIds to file
     for (size_t i = 0; i < experimentIdsCount; i++) {
-        const int64_t experimentId = experimentIds[i];
+        const int64_t experimentId = trainInfo.experimentIds[i];
         const size_t experimentIdByteCount = sizeof(experimentId);
         result = write(fd, &experimentId, experimentIdByteCount);
         if (result == experimentIdByteCount) {
@@ -205,23 +233,47 @@
         }
     }
 
-    result = fchown(fd, AID_STATSD, AID_STATSD);
-    if (result) {
-        VLOG("Failed to chown train info file to statsd");
-        close(fd);
-        return false;
+    // Write bools to file
+    const size_t boolByteCount = sizeof(trainInfo.requiresStaging);
+    result = write(fd, (uint8_t*)&trainInfo.requiresStaging, boolByteCount);
+    if (result != boolByteCount) {
+      VLOG("Failed to write requires staging");
+      close(fd);
+      return false;
+    }
+
+    result = write(fd, (uint8_t*)&trainInfo.rollbackEnabled, boolByteCount);
+    if (result != boolByteCount) {
+      VLOG("Failed to write rollback enabled");
+      close(fd);
+      return false;
+    }
+
+    result = write(fd, (uint8_t*)&trainInfo.requiresLowLatencyMonitor, boolByteCount);
+    if (result != boolByteCount) {
+      VLOG("Failed to write requires log latency monitor");
+      close(fd);
+      return false;
     }
 
     close(fd);
     return true;
 }
 
-bool StorageManager::readTrainInfo(InstallTrainInfo& trainInfo) {
+bool StorageManager::readTrainInfo(const std::string& trainName, InstallTrainInfo& trainInfo) {
     std::lock_guard<std::mutex> lock(sTrainInfoMutex);
+    return readTrainInfoLocked(trainName, trainInfo);
+}
 
-    int fd = open(TRAIN_INFO_PATH, O_RDONLY | O_CLOEXEC);
+bool StorageManager::readTrainInfoLocked(const std::string& trainName, InstallTrainInfo& trainInfo) {
+    trimToFit(TRAIN_INFO_DIR, /*parseTimestampOnly=*/ true);
+    const char* fileName = findTrainInfoFileNameLocked(trainName);
+    if (fileName == nullptr) {
+        return false;
+    }
+    int fd = open(StringPrintf("%s/%s", TRAIN_INFO_DIR, fileName).c_str(), O_RDONLY | O_CLOEXEC);
     if (fd == -1) {
-        VLOG("Failed to open train-info.bin");
+        VLOG("Failed to open %s", fileName);
         return false;
     }
 
@@ -297,6 +349,29 @@
         trainInfo.experimentIds.push_back(experimentId);
     }
 
+    // Read bools
+    const size_t boolByteCount = sizeof(trainInfo.requiresStaging);
+    result = read(fd, &trainInfo.requiresStaging, boolByteCount);
+    if (result != boolByteCount) {
+        VLOG("Failed to read requires requires staging from train info file");
+        close(fd);
+        return false;
+    }
+
+    result = read(fd, &trainInfo.rollbackEnabled, boolByteCount);
+    if (result != boolByteCount) {
+        VLOG("Failed to read requires rollback enabled from train info file");
+        close(fd);
+        return false;
+    }
+
+    result = read(fd, &trainInfo.requiresLowLatencyMonitor, boolByteCount);
+    if (result != boolByteCount) {
+        VLOG("Failed to read requires requires low latency monitor from train info file");
+        close(fd);
+        return false;
+    }
+
     // Expect to be at EOF.
     char c;
     result = read(fd, &c, 1);
@@ -311,6 +386,32 @@
     return true;
 }
 
+vector<InstallTrainInfo> StorageManager::readAllTrainInfo() {
+    std::lock_guard<std::mutex> lock(sTrainInfoMutex);
+    vector<InstallTrainInfo> trainInfoList;
+    unique_ptr<DIR, decltype(&closedir)> dir(opendir(TRAIN_INFO_DIR), closedir);
+    if (dir == NULL) {
+        VLOG("Directory does not exist: %s", TRAIN_INFO_DIR);
+        return trainInfoList;
+    }
+
+    dirent* de;
+    while ((de = readdir(dir.get()))) {
+        char* name = de->d_name;
+        if (name[0] == '.') {
+            continue;
+        }
+
+        InstallTrainInfo trainInfo;
+        bool readSuccess = StorageManager::readTrainInfoLocked(name, trainInfo);
+        if (!readSuccess) {
+            continue;
+        }
+        trainInfoList.push_back(trainInfo);
+    }
+    return trainInfoList;
+}
+
 void StorageManager::deleteFile(const char* file) {
     if (remove(file) != 0) {
         VLOG("Attempt to delete %s but is not found", file);
@@ -574,7 +675,7 @@
     });
 }
 
-void StorageManager::trimToFit(const char* path) {
+void StorageManager::trimToFit(const char* path, bool parseTimestampOnly) {
     unique_ptr<DIR, decltype(&closedir)> dir(opendir(path), closedir);
     if (dir == NULL) {
         VLOG("Path %s does not exist", path);
@@ -589,9 +690,16 @@
         if (name[0] == '.') continue;
 
         FileName output;
-        parseFileName(name, &output);
+        string file_name;
+        if (parseTimestampOnly) {
+            file_name = StringPrintf("%s/%s", path, name);
+            output.mTimestampSec = StrToInt64(strtok(name, "_"));
+            output.mIsHistory = false;
+        } else {
+            parseFileName(name, &output);
+            file_name = output.getFullFileName(path);
+        }
         if (output.mTimestampSec == -1) continue;
-        string file_name = output.getFullFileName(path);
 
         // Check for timestamp and delete if it's too old.
         long fileAge = nowSec - output.mTimestampSec;
diff --git a/cmds/statsd/src/storage/StorageManager.h b/cmds/statsd/src/storage/StorageManager.h
index 69b41c2..d59046d 100644
--- a/cmds/statsd/src/storage/StorageManager.h
+++ b/cmds/statsd/src/storage/StorageManager.h
@@ -52,13 +52,22 @@
     /**
      * Writes train info.
      */
-    static bool writeTrainInfo(int64_t trainVersionCode, const std::string& trainName,
-                               int32_t status, const std::vector<int64_t>& experimentIds);
+    static bool writeTrainInfo(const InstallTrainInfo& trainInfo);
 
     /**
      * Reads train info.
      */
-    static bool readTrainInfo(InstallTrainInfo& trainInfo);
+    static bool readTrainInfo(const std::string& trainName, InstallTrainInfo& trainInfo);
+
+    /**
+     * Reads train info assuming lock is obtained.
+     */
+    static bool readTrainInfoLocked(const std::string& trainName, InstallTrainInfo& trainInfo);
+
+    /**
+     * Reads all train info and returns a vector of train info.
+     */
+    static vector<InstallTrainInfo> readAllTrainInfo();
 
     /**
      * Reads the file content to the buffer.
@@ -124,7 +133,7 @@
      * Trims files in the provided directory to limit the total size, number of
      * files, accumulation of outdated files.
      */
-    static void trimToFit(const char* dir);
+    static void trimToFit(const char* dir, bool parseTimestampOnly = false);
 
     /**
      * Returns true if there already exists identical configuration on device.
diff --git a/cmds/statsd/src/subscriber/SubscriberReporter.cpp b/cmds/statsd/src/subscriber/SubscriberReporter.cpp
index 160b57e..93af5e9 100644
--- a/cmds/statsd/src/subscriber/SubscriberReporter.cpp
+++ b/cmds/statsd/src/subscriber/SubscriberReporter.cpp
@@ -27,38 +27,52 @@
 
 using std::vector;
 
-class BroadcastSubscriberDeathRecipient : public android::IBinder::DeathRecipient {
-    public:
-        BroadcastSubscriberDeathRecipient(const ConfigKey& configKey, int64_t subscriberId):
-            mConfigKey(configKey),
-            mSubscriberId(subscriberId) {}
-        ~BroadcastSubscriberDeathRecipient() override = default;
-    private:
-        ConfigKey mConfigKey;
-        int64_t mSubscriberId;
+struct BroadcastSubscriberDeathCookie {
+    BroadcastSubscriberDeathCookie(const ConfigKey& configKey, int64_t subscriberId,
+                                   const shared_ptr<IPendingIntentRef>& pir):
+        mConfigKey(configKey),
+        mSubscriberId(subscriberId),
+        mPir(pir) {}
 
-    void binderDied(const android::wp<android::IBinder>& who) override {
-        if (IInterface::asBinder(SubscriberReporter::getInstance().getBroadcastSubscriber(
-              mConfigKey, mSubscriberId)) == who.promote()) {
-            SubscriberReporter::getInstance().unsetBroadcastSubscriber(mConfigKey, mSubscriberId);
-        }
-    }
+    ConfigKey mConfigKey;
+    int64_t mSubscriberId;
+    shared_ptr<IPendingIntentRef> mPir;
 };
 
+static void broadcastSubscriberDied(void* cookie) {
+    BroadcastSubscriberDeathCookie* cookie_ = (BroadcastSubscriberDeathCookie*)cookie;
+    ConfigKey configKey = cookie_->mConfigKey;
+    int64_t subscriberId = cookie_->mSubscriberId;
+    shared_ptr<IPendingIntentRef> pir = cookie_->mPir;
+
+    // TODO(b/149254662): Fix threading. This currently fails if a new pir gets
+    // set between the get and the unset.
+    if (SubscriberReporter::getInstance().getBroadcastSubscriber(configKey, subscriberId) == pir) {
+        SubscriberReporter::getInstance().unsetBroadcastSubscriber(configKey, subscriberId);
+    }
+    // The death recipient corresponding to this specific pir can never be
+    // triggered again, so free up resources.
+    delete cookie_;
+}
+
+static ::ndk::ScopedAIBinder_DeathRecipient sBroadcastSubscriberDeathRecipient(
+        AIBinder_DeathRecipient_new(broadcastSubscriberDied));
+
 void SubscriberReporter::setBroadcastSubscriber(const ConfigKey& configKey,
                                                 int64_t subscriberId,
-                                                const sp<IPendingIntentRef>& pir) {
+                                                const shared_ptr<IPendingIntentRef>& pir) {
     VLOG("SubscriberReporter::setBroadcastSubscriber called.");
-    lock_guard<std::mutex> lock(mLock);
+    lock_guard<mutex> lock(mLock);
     mIntentMap[configKey][subscriberId] = pir;
-    IInterface::asBinder(pir)->linkToDeath(
-        new BroadcastSubscriberDeathRecipient(configKey, subscriberId));
+    // TODO(b/149254662): Is it ok to call linkToDeath while holding a lock?
+    AIBinder_linkToDeath(pir->asBinder().get(), sBroadcastSubscriberDeathRecipient.get(),
+                         new BroadcastSubscriberDeathCookie(configKey, subscriberId, pir));
 }
 
 void SubscriberReporter::unsetBroadcastSubscriber(const ConfigKey& configKey,
                                                   int64_t subscriberId) {
     VLOG("SubscriberReporter::unsetBroadcastSubscriber called.");
-    lock_guard<std::mutex> lock(mLock);
+    lock_guard<mutex> lock(mLock);
     auto subscriberMapIt = mIntentMap.find(configKey);
     if (subscriberMapIt != mIntentMap.end()) {
         subscriberMapIt->second.erase(subscriberId);
@@ -80,7 +94,7 @@
     //  config id - the name of this config (for this particular uid)
 
     VLOG("SubscriberReporter::alertBroadcastSubscriber called.");
-    lock_guard<std::mutex> lock(mLock);
+    lock_guard<mutex> lock(mLock);
 
     if (!subscription.has_broadcast_subscriber_details()
             || !subscription.broadcast_subscriber_details().has_subscriber_id()) {
@@ -89,10 +103,12 @@
     }
     int64_t subscriberId = subscription.broadcast_subscriber_details().subscriber_id();
 
-    vector<String16> cookies;
+    // TODO(b/149254662): Is there a way to convert a RepeatedPtrField into a
+    // vector without copying?
+    vector<string> cookies;
     cookies.reserve(subscription.broadcast_subscriber_details().cookie_size());
     for (auto& cookie : subscription.broadcast_subscriber_details().cookie()) {
-        cookies.push_back(String16(cookie.c_str()));
+        cookies.push_back(cookie);
     }
 
     auto it1 = mIntentMap.find(configKey);
@@ -109,10 +125,10 @@
     sendBroadcastLocked(it2->second, configKey, subscription, cookies, dimKey);
 }
 
-void SubscriberReporter::sendBroadcastLocked(const sp<IPendingIntentRef>& pir,
+void SubscriberReporter::sendBroadcastLocked(const shared_ptr<IPendingIntentRef>& pir,
                                              const ConfigKey& configKey,
                                              const Subscription& subscription,
-                                             const vector<String16>& cookies,
+                                             const vector<string>& cookies,
                                              const MetricDimensionKey& dimKey) const {
     VLOG("SubscriberReporter::sendBroadcastLocked called.");
     pir->sendSubscriberBroadcast(
@@ -121,12 +137,12 @@
             subscription.id(),
             subscription.rule_id(),
             cookies,
-            getStatsDimensionsValue(dimKey.getDimensionKeyInWhat()));
+            dimKey.getDimensionKeyInWhat().toStatsDimensionsValueParcel());
 }
 
-sp<IPendingIntentRef> SubscriberReporter::getBroadcastSubscriber(const ConfigKey& configKey,
-                                                                 int64_t subscriberId) {
-    lock_guard<std::mutex> lock(mLock);
+shared_ptr<IPendingIntentRef> SubscriberReporter::getBroadcastSubscriber(const ConfigKey& configKey,
+                                                                         int64_t subscriberId) {
+    lock_guard<mutex> lock(mLock);
     auto subscriberMapIt = mIntentMap.find(configKey);
     if (subscriberMapIt == mIntentMap.end()) {
         return nullptr;
@@ -138,61 +154,6 @@
     return pirMapIt->second;
 }
 
-void getStatsDimensionsValueHelper(const vector<FieldValue>& dims, size_t* index, int depth,
-                                   int prefix, vector<StatsDimensionsValue>* output) {
-    size_t count = dims.size();
-    while (*index < count) {
-        const auto& dim = dims[*index];
-        const int valueDepth = dim.mField.getDepth();
-        const int valuePrefix = dim.mField.getPrefix(depth);
-        if (valueDepth > 2) {
-            ALOGE("Depth > 2 not supported");
-            return;
-        }
-        if (depth == valueDepth && valuePrefix == prefix) {
-            switch (dim.mValue.getType()) {
-                case INT:
-                    output->push_back(StatsDimensionsValue(dim.mField.getPosAtDepth(depth),
-                                                           dim.mValue.int_value));
-                    break;
-                case LONG:
-                    output->push_back(StatsDimensionsValue(dim.mField.getPosAtDepth(depth),
-                                                           dim.mValue.long_value));
-                    break;
-                case FLOAT:
-                    output->push_back(StatsDimensionsValue(dim.mField.getPosAtDepth(depth),
-                                                           dim.mValue.float_value));
-                    break;
-                case STRING:
-                    output->push_back(StatsDimensionsValue(dim.mField.getPosAtDepth(depth),
-                                                           String16(dim.mValue.str_value.c_str())));
-                    break;
-                default:
-                    break;
-            }
-            (*index)++;
-        } else if (valueDepth > depth && valuePrefix == prefix) {
-            vector<StatsDimensionsValue> childOutput;
-            getStatsDimensionsValueHelper(dims, index, depth + 1, dim.mField.getPrefix(depth + 1),
-                                          &childOutput);
-            output->push_back(StatsDimensionsValue(dim.mField.getPosAtDepth(depth), childOutput));
-        } else {
-            return;
-        }
-    }
-}
-
-StatsDimensionsValue SubscriberReporter::getStatsDimensionsValue(const HashableDimensionKey& dim) {
-    if (dim.getValues().size() == 0) {
-        return StatsDimensionsValue();
-    }
-
-    vector<StatsDimensionsValue> fields;
-    size_t index = 0;
-    getStatsDimensionsValueHelper(dim.getValues(), &index, 0, 0, &fields);
-    return StatsDimensionsValue(dim.getValues()[0].mField.getTag(), fields);
-}
-
 }  // namespace statsd
 }  // namespace os
 }  // namespace android
diff --git a/cmds/statsd/src/subscriber/SubscriberReporter.h b/cmds/statsd/src/subscriber/SubscriberReporter.h
index 087a1b8..0f97d39 100644
--- a/cmds/statsd/src/subscriber/SubscriberReporter.h
+++ b/cmds/statsd/src/subscriber/SubscriberReporter.h
@@ -16,19 +16,25 @@
 
 #pragma once
 
-#include <android/os/IPendingIntentRef.h>
-#include <android/os/IStatsCompanionService.h>
+#include <aidl/android/os/IPendingIntentRef.h>
 #include <utils/RefBase.h>
+#include <utils/String16.h>
 
 #include "config/ConfigKey.h"
 #include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"  // subscription
-#include "android/os/StatsDimensionsValue.h"
 #include "HashableDimensionKey.h"
 
 #include <mutex>
 #include <unordered_map>
 #include <vector>
 
+using aidl::android::os::IPendingIntentRef;
+using std::mutex;
+using std::shared_ptr;
+using std::string;
+using std::unordered_map;
+using std::vector;
+
 namespace android {
 namespace os {
 namespace statsd {
@@ -52,7 +58,7 @@
      */
     void setBroadcastSubscriber(const ConfigKey& configKey,
                                 int64_t subscriberId,
-                                const sp<IPendingIntentRef>& pir);
+                                const shared_ptr<IPendingIntentRef>& pir);
 
     /**
      * Erases any intentSender information from the given (configKey, subscriberId) pair.
@@ -68,30 +74,25 @@
                                   const Subscription& subscription,
                                   const MetricDimensionKey& dimKey) const;
 
-    sp<IPendingIntentRef> getBroadcastSubscriber(const ConfigKey& configKey, int64_t subscriberId);
-
-    static StatsDimensionsValue getStatsDimensionsValue(const HashableDimensionKey& dim);
+    shared_ptr<IPendingIntentRef> getBroadcastSubscriber(const ConfigKey& configKey,
+                                                         int64_t subscriberId);
 
 private:
     SubscriberReporter() {};
 
-    mutable std::mutex mLock;
-
-    /** Binder interface for communicating with StatsCompanionService. */
-    sp<IStatsCompanionService> mStatsCompanionService = nullptr;
+    mutable mutex mLock;
 
     /** Maps <ConfigKey, SubscriberId> -> IPendingIntentRef (which represents a PendingIntent). */
-    std::unordered_map<ConfigKey,
-            std::unordered_map<int64_t, sp<IPendingIntentRef>>> mIntentMap;
+    unordered_map<ConfigKey, unordered_map<int64_t, shared_ptr<IPendingIntentRef>>> mIntentMap;
 
     /**
      * Sends a broadcast via the given intentSender (using mStatsCompanionService), along
      * with the information in the other parameters.
      */
-    void sendBroadcastLocked(const sp<IPendingIntentRef>& pir,
+    void sendBroadcastLocked(const shared_ptr<IPendingIntentRef>& pir,
                              const ConfigKey& configKey,
                              const Subscription& subscription,
-                             const std::vector<String16>& cookies,
+                             const vector<string>& cookies,
                              const MetricDimensionKey& dimKey) const;
 };
 
diff --git a/cmds/statsd/tests/AlarmMonitor_test.cpp b/cmds/statsd/tests/AlarmMonitor_test.cpp
index 1fccb35..edbf8b5 100644
--- a/cmds/statsd/tests/AlarmMonitor_test.cpp
+++ b/cmds/statsd/tests/AlarmMonitor_test.cpp
@@ -17,14 +17,16 @@
 #include <gtest/gtest.h>
 
 using namespace android::os::statsd;
+using std::shared_ptr;
 
 #ifdef __ANDROID__
 TEST(AlarmMonitor, popSoonerThan) {
     std::string emptyMetricId;
     std::string emptyDimensionId;
     unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> set;
-    AlarmMonitor am(2, [](const sp<IStatsCompanionService>&, int64_t){},
-                    [](const sp<IStatsCompanionService>&){});
+    AlarmMonitor am(2,
+                    [](const shared_ptr<IStatsCompanionService>&, int64_t){},
+                    [](const shared_ptr<IStatsCompanionService>&){});
 
     set = am.popSoonerThan(5);
     EXPECT_TRUE(set.empty());
diff --git a/cmds/statsd/tests/FieldValue_test.cpp b/cmds/statsd/tests/FieldValue_test.cpp
index f4a59ed..a5ff067 100644
--- a/cmds/statsd/tests/FieldValue_test.cpp
+++ b/cmds/statsd/tests/FieldValue_test.cpp
@@ -72,65 +72,66 @@
     EXPECT_EQ((int32_t)0xff7f7f7f, matcher12.mMask);
 }
 
-TEST(AtomMatcherTest, TestFilter_ALL) {
-    FieldMatcher matcher1;
-    matcher1.set_field(10);
-    FieldMatcher* child = matcher1.add_child();
-    child->set_field(1);
-    child->set_position(Position::ALL);
-
-    child->add_child()->set_field(1);
-    child->add_child()->set_field(2);
-
-    child = matcher1.add_child();
-    child->set_field(2);
-
-    vector<Matcher> matchers;
-    translateFieldMatcher(matcher1, &matchers);
-
-    AttributionNodeInternal attribution_node1;
-    attribution_node1.set_uid(1111);
-    attribution_node1.set_tag("location1");
-
-    AttributionNodeInternal attribution_node2;
-    attribution_node2.set_uid(2222);
-    attribution_node2.set_tag("location2");
-
-    AttributionNodeInternal attribution_node3;
-    attribution_node3.set_uid(3333);
-    attribution_node3.set_tag("location3");
-    std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
-                                                              attribution_node3};
-
-    // Set up the event
-    LogEvent event(10, 12345);
-    event.write(attribution_nodes);
-    event.write("some value");
-    // Convert to a LogEvent
-    event.init();
-    HashableDimensionKey output;
-
-    filterValues(matchers, event.getValues(), &output);
-
-    EXPECT_EQ((size_t)7, output.getValues().size());
-    EXPECT_EQ((int32_t)0x02010101, output.getValues()[0].mField.getField());
-    EXPECT_EQ((int32_t)1111, output.getValues()[0].mValue.int_value);
-    EXPECT_EQ((int32_t)0x02010102, output.getValues()[1].mField.getField());
-    EXPECT_EQ("location1", output.getValues()[1].mValue.str_value);
-
-    EXPECT_EQ((int32_t)0x02010201, output.getValues()[2].mField.getField());
-    EXPECT_EQ((int32_t)2222, output.getValues()[2].mValue.int_value);
-    EXPECT_EQ((int32_t)0x02010202, output.getValues()[3].mField.getField());
-    EXPECT_EQ("location2", output.getValues()[3].mValue.str_value);
-
-    EXPECT_EQ((int32_t)0x02010301, output.getValues()[4].mField.getField());
-    EXPECT_EQ((int32_t)3333, output.getValues()[4].mValue.int_value);
-    EXPECT_EQ((int32_t)0x02010302, output.getValues()[5].mField.getField());
-    EXPECT_EQ("location3", output.getValues()[5].mValue.str_value);
-
-    EXPECT_EQ((int32_t)0x00020000, output.getValues()[6].mField.getField());
-    EXPECT_EQ("some value", output.getValues()[6].mValue.str_value);
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(AtomMatcherTest, TestFilter_ALL) {
+//    FieldMatcher matcher1;
+//    matcher1.set_field(10);
+//    FieldMatcher* child = matcher1.add_child();
+//    child->set_field(1);
+//    child->set_position(Position::ALL);
+//
+//    child->add_child()->set_field(1);
+//    child->add_child()->set_field(2);
+//
+//    child = matcher1.add_child();
+//    child->set_field(2);
+//
+//    vector<Matcher> matchers;
+//    translateFieldMatcher(matcher1, &matchers);
+//
+//    AttributionNodeInternal attribution_node1;
+//    attribution_node1.set_uid(1111);
+//    attribution_node1.set_tag("location1");
+//
+//    AttributionNodeInternal attribution_node2;
+//    attribution_node2.set_uid(2222);
+//    attribution_node2.set_tag("location2");
+//
+//    AttributionNodeInternal attribution_node3;
+//    attribution_node3.set_uid(3333);
+//    attribution_node3.set_tag("location3");
+//    std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
+//                                                              attribution_node3};
+//
+//    // Set up the event
+//    LogEvent event(10, 12345);
+//    event.write(attribution_nodes);
+//    event.write("some value");
+//    // Convert to a LogEvent
+//    event.init();
+//    HashableDimensionKey output;
+//
+//    filterValues(matchers, event.getValues(), &output);
+//
+//    EXPECT_EQ((size_t)7, output.getValues().size());
+//    EXPECT_EQ((int32_t)0x02010101, output.getValues()[0].mField.getField());
+//    EXPECT_EQ((int32_t)1111, output.getValues()[0].mValue.int_value);
+//    EXPECT_EQ((int32_t)0x02010102, output.getValues()[1].mField.getField());
+//    EXPECT_EQ("location1", output.getValues()[1].mValue.str_value);
+//
+//    EXPECT_EQ((int32_t)0x02010201, output.getValues()[2].mField.getField());
+//    EXPECT_EQ((int32_t)2222, output.getValues()[2].mValue.int_value);
+//    EXPECT_EQ((int32_t)0x02010202, output.getValues()[3].mField.getField());
+//    EXPECT_EQ("location2", output.getValues()[3].mValue.str_value);
+//
+//    EXPECT_EQ((int32_t)0x02010301, output.getValues()[4].mField.getField());
+//    EXPECT_EQ((int32_t)3333, output.getValues()[4].mValue.int_value);
+//    EXPECT_EQ((int32_t)0x02010302, output.getValues()[5].mField.getField());
+//    EXPECT_EQ("location3", output.getValues()[5].mValue.str_value);
+//
+//    EXPECT_EQ((int32_t)0x00020000, output.getValues()[6].mField.getField());
+//    EXPECT_EQ("some value", output.getValues()[6].mValue.str_value);
+//}
 
 TEST(AtomMatcherTest, TestSubDimension) {
     HashableDimensionKey dim;
@@ -173,60 +174,61 @@
     EXPECT_TRUE(dim.contains(subDim4));
 }
 
-TEST(AtomMatcherTest, TestMetric2ConditionLink) {
-    AttributionNodeInternal attribution_node1;
-    attribution_node1.set_uid(1111);
-    attribution_node1.set_tag("location1");
-
-    AttributionNodeInternal attribution_node2;
-    attribution_node2.set_uid(2222);
-    attribution_node2.set_tag("location2");
-
-    AttributionNodeInternal attribution_node3;
-    attribution_node3.set_uid(3333);
-    attribution_node3.set_tag("location3");
-    std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
-                                                              attribution_node3};
-
-    // Set up the event
-    LogEvent event(10, 12345);
-    event.write(attribution_nodes);
-    event.write("some value");
-    // Convert to a LogEvent
-    event.init();
-
-    FieldMatcher whatMatcher;
-    whatMatcher.set_field(10);
-    FieldMatcher* child11 = whatMatcher.add_child();
-    child11->set_field(1);
-    child11->set_position(Position::ANY);
-    child11 = child11->add_child();
-    child11->set_field(1);
-
-    FieldMatcher conditionMatcher;
-    conditionMatcher.set_field(27);
-    FieldMatcher* child2 = conditionMatcher.add_child();
-    child2->set_field(2);
-    child2->set_position(Position::LAST);
-
-    child2 = child2->add_child();
-    child2->set_field(2);
-
-    Metric2Condition link;
-
-    translateFieldMatcher(whatMatcher, &link.metricFields);
-    translateFieldMatcher(conditionMatcher, &link.conditionFields);
-
-    EXPECT_EQ((size_t)1, link.metricFields.size());
-    EXPECT_EQ((int32_t)0x02010001, link.metricFields[0].mMatcher.getField());
-    EXPECT_EQ((int32_t)0xff7f007f, link.metricFields[0].mMask);
-    EXPECT_EQ((int32_t)10, link.metricFields[0].mMatcher.getTag());
-
-    EXPECT_EQ((size_t)1, link.conditionFields.size());
-    EXPECT_EQ((int32_t)0x02028002, link.conditionFields[0].mMatcher.getField());
-    EXPECT_EQ((int32_t)0xff7f807f, link.conditionFields[0].mMask);
-    EXPECT_EQ((int32_t)27, link.conditionFields[0].mMatcher.getTag());
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(AtomMatcherTest, TestMetric2ConditionLink) {
+//    AttributionNodeInternal attribution_node1;
+//    attribution_node1.set_uid(1111);
+//    attribution_node1.set_tag("location1");
+//
+//    AttributionNodeInternal attribution_node2;
+//    attribution_node2.set_uid(2222);
+//    attribution_node2.set_tag("location2");
+//
+//    AttributionNodeInternal attribution_node3;
+//    attribution_node3.set_uid(3333);
+//    attribution_node3.set_tag("location3");
+//    std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
+//                                                              attribution_node3};
+//
+//    // Set up the event
+//    LogEvent event(10, 12345);
+//    event.write(attribution_nodes);
+//    event.write("some value");
+//    // Convert to a LogEvent
+//    event.init();
+//
+//    FieldMatcher whatMatcher;
+//    whatMatcher.set_field(10);
+//    FieldMatcher* child11 = whatMatcher.add_child();
+//    child11->set_field(1);
+//    child11->set_position(Position::ANY);
+//    child11 = child11->add_child();
+//    child11->set_field(1);
+//
+//    FieldMatcher conditionMatcher;
+//    conditionMatcher.set_field(27);
+//    FieldMatcher* child2 = conditionMatcher.add_child();
+//    child2->set_field(2);
+//    child2->set_position(Position::LAST);
+//
+//    child2 = child2->add_child();
+//    child2->set_field(2);
+//
+//    Metric2Condition link;
+//
+//    translateFieldMatcher(whatMatcher, &link.metricFields);
+//    translateFieldMatcher(conditionMatcher, &link.conditionFields);
+//
+//    EXPECT_EQ((size_t)1, link.metricFields.size());
+//    EXPECT_EQ((int32_t)0x02010001, link.metricFields[0].mMatcher.getField());
+//    EXPECT_EQ((int32_t)0xff7f007f, link.metricFields[0].mMask);
+//    EXPECT_EQ((int32_t)10, link.metricFields[0].mMatcher.getTag());
+//
+//    EXPECT_EQ((size_t)1, link.conditionFields.size());
+//    EXPECT_EQ((int32_t)0x02028002, link.conditionFields[0].mMatcher.getField());
+//    EXPECT_EQ((int32_t)0xff7f807f, link.conditionFields[0].mMask);
+//    EXPECT_EQ((int32_t)27, link.conditionFields[0].mMatcher.getTag());
+//}
 
 TEST(AtomMatcherTest, TestWriteDimensionPath) {
     for (auto position : {Position::ANY, Position::ALL, Position::FIRST, Position::LAST}) {
@@ -290,33 +292,34 @@
     }
 }
 
-TEST(AtomMatcherTest, TestSubscriberDimensionWrite) {
-    HashableDimensionKey dim;
-
-    int pos1[] = {1, 1, 1};
-    int pos2[] = {1, 1, 2};
-    int pos3[] = {1, 1, 3};
-    int pos4[] = {2, 0, 0};
-
-    Field field1(10, pos1, 2);
-    Field field2(10, pos2, 2);
-    Field field3(10, pos3, 2);
-    Field field4(10, pos4, 0);
-
-    Value value1((int32_t)10025);
-    Value value2("tag");
-    Value value3((int32_t)987654);
-    Value value4((int32_t)99999);
-
-    dim.addValue(FieldValue(field1, value1));
-    dim.addValue(FieldValue(field2, value2));
-    dim.addValue(FieldValue(field3, value3));
-    dim.addValue(FieldValue(field4, value4));
-
-    SubscriberReporter::getStatsDimensionsValue(dim);
-    // TODO(b/110562792): can't test anything here because StatsDimensionsValue class doesn't
-    // have any read api.
-}
+//TODO(b/149050405) Update this test for StatsDimensionValueParcel
+//TEST(AtomMatcherTest, TestSubscriberDimensionWrite) {
+//    HashableDimensionKey dim;
+//
+//    int pos1[] = {1, 1, 1};
+//    int pos2[] = {1, 1, 2};
+//    int pos3[] = {1, 1, 3};
+//    int pos4[] = {2, 0, 0};
+//
+//    Field field1(10, pos1, 2);
+//    Field field2(10, pos2, 2);
+//    Field field3(10, pos3, 2);
+//    Field field4(10, pos4, 0);
+//
+//    Value value1((int32_t)10025);
+//    Value value2("tag");
+//    Value value3((int32_t)987654);
+//    Value value4((int32_t)99999);
+//
+//    dim.addValue(FieldValue(field1, value1));
+//    dim.addValue(FieldValue(field2, value2));
+//    dim.addValue(FieldValue(field3, value3));
+//    dim.addValue(FieldValue(field4, value4));
+//
+//    SubscriberReporter::getStatsDimensionsValue(dim);
+//    // TODO(b/110562792): can't test anything here because StatsDimensionsValue class doesn't
+//    // have any read api.
+//}
 
 TEST(AtomMatcherTest, TestWriteDimensionToProto) {
     HashableDimensionKey dim;
@@ -436,49 +439,50 @@
     EXPECT_EQ(99999, dim4.value_long());
 }
 
-TEST(AtomMatcherTest, TestWriteAtomToProto) {
-    AttributionNodeInternal attribution_node1;
-    attribution_node1.set_uid(1111);
-    attribution_node1.set_tag("location1");
-
-    AttributionNodeInternal attribution_node2;
-    attribution_node2.set_uid(2222);
-    attribution_node2.set_tag("location2");
-
-    std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2};
-
-    // Set up the event
-    LogEvent event(4, 12345);
-    event.write(attribution_nodes);
-    event.write((int32_t)999);
-    // Convert to a LogEvent
-    event.init();
-
-    android::util::ProtoOutputStream protoOutput;
-    writeFieldValueTreeToStream(event.GetTagId(), event.getValues(), &protoOutput);
-
-    vector<uint8_t> outData;
-    outData.resize(protoOutput.size());
-    size_t pos = 0;
-    sp<ProtoReader> reader = protoOutput.data();
-    while (reader->readBuffer() != NULL) {
-        size_t toRead = reader->currentToRead();
-        std::memcpy(&(outData[pos]), reader->readBuffer(), toRead);
-        pos += toRead;
-        reader->move(toRead);
-    }
-
-    Atom result;
-    EXPECT_EQ(true, result.ParseFromArray(&outData[0], outData.size()));
-    EXPECT_EQ(Atom::PushedCase::kBleScanResultReceived, result.pushed_case());
-    const auto& atom = result.ble_scan_result_received();
-    EXPECT_EQ(2, atom.attribution_node_size());
-    EXPECT_EQ(1111, atom.attribution_node(0).uid());
-    EXPECT_EQ("location1", atom.attribution_node(0).tag());
-    EXPECT_EQ(2222, atom.attribution_node(1).uid());
-    EXPECT_EQ("location2", atom.attribution_node(1).tag());
-    EXPECT_EQ(999, atom.num_results());
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(AtomMatcherTest, TestWriteAtomToProto) {
+//    AttributionNodeInternal attribution_node1;
+//    attribution_node1.set_uid(1111);
+//    attribution_node1.set_tag("location1");
+//
+//    AttributionNodeInternal attribution_node2;
+//    attribution_node2.set_uid(2222);
+//    attribution_node2.set_tag("location2");
+//
+//    std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2};
+//
+//    // Set up the event
+//    LogEvent event(4, 12345);
+//    event.write(attribution_nodes);
+//    event.write((int32_t)999);
+//    // Convert to a LogEvent
+//    event.init();
+//
+//    android::util::ProtoOutputStream protoOutput;
+//    writeFieldValueTreeToStream(event.GetTagId(), event.getValues(), &protoOutput);
+//
+//    vector<uint8_t> outData;
+//    outData.resize(protoOutput.size());
+//    size_t pos = 0;
+//    sp<ProtoReader> reader = protoOutput.data();
+//    while (reader->readBuffer() != NULL) {
+//        size_t toRead = reader->currentToRead();
+//        std::memcpy(&(outData[pos]), reader->readBuffer(), toRead);
+//        pos += toRead;
+//        reader->move(toRead);
+//    }
+//
+//    Atom result;
+//    EXPECT_EQ(true, result.ParseFromArray(&outData[0], outData.size()));
+//    EXPECT_EQ(Atom::PushedCase::kBleScanResultReceived, result.pushed_case());
+//    const auto& atom = result.ble_scan_result_received();
+//    EXPECT_EQ(2, atom.attribution_node_size());
+//    EXPECT_EQ(1111, atom.attribution_node(0).uid());
+//    EXPECT_EQ("location1", atom.attribution_node(0).tag());
+//    EXPECT_EQ(2222, atom.attribution_node(1).uid());
+//    EXPECT_EQ("location2", atom.attribution_node(1).tag());
+//    EXPECT_EQ(999, atom.num_results());
+//}
 
 /*
  * Test two Matchers is not a subset of one Matcher.
diff --git a/cmds/statsd/tests/LogEntryMatcher_test.cpp b/cmds/statsd/tests/LogEntryMatcher_test.cpp
index 441d3c8..2de6377 100644
--- a/cmds/statsd/tests/LogEntryMatcher_test.cpp
+++ b/cmds/statsd/tests/LogEntryMatcher_test.cpp
@@ -39,645 +39,646 @@
 
 
 #ifdef __ANDROID__
-TEST(AtomMatcherTest, TestSimpleMatcher) {
-    UidMap uidMap;
-
-    // Set up the matcher
-    AtomMatcher matcher;
-    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-    simpleMatcher->set_atom_id(TAG_ID);
-
-    LogEvent event(TAG_ID, 0);
-    EXPECT_TRUE(event.write(11));
-    event.init();
-
-    // Test
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    // Wrong tag id.
-    simpleMatcher->set_atom_id(TAG_ID + 1);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-}
-
-TEST(AtomMatcherTest, TestAttributionMatcher) {
-    UidMap uidMap;
-    AttributionNodeInternal attribution_node1;
-    attribution_node1.set_uid(1111);
-    attribution_node1.set_tag("location1");
-
-    AttributionNodeInternal attribution_node2;
-    attribution_node2.set_uid(2222);
-    attribution_node2.set_tag("location2");
-
-    AttributionNodeInternal attribution_node3;
-    attribution_node3.set_uid(3333);
-    attribution_node3.set_tag("location3");
-    std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
-                                                              attribution_node3};
-
-    // Set up the event
-    LogEvent event(TAG_ID, 0);
-    event.write(attribution_nodes);
-    event.write("some value");
-    // Convert to a LogEvent
-    event.init();
-
-    // Set up the matcher
-    AtomMatcher matcher;
-    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-    simpleMatcher->set_atom_id(TAG_ID);
-
-    // Match first node.
-    auto attributionMatcher = simpleMatcher->add_field_value_matcher();
-    attributionMatcher->set_field(FIELD_ID_1);
-    attributionMatcher->set_position(Position::FIRST);
-    attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
-        ATTRIBUTION_TAG_FIELD_ID);
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string("tag");
-
-    auto fieldMatcher = simpleMatcher->add_field_value_matcher();
-    fieldMatcher->set_field(FIELD_ID_2);
-    fieldMatcher->set_eq_string("some value");
-
-    // Tag not matched.
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("location3");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("location1");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    // Match last node.
-    attributionMatcher->set_position(Position::LAST);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("location3");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    // Match any node.
-    attributionMatcher->set_position(Position::ANY);
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("location1");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("location2");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("location3");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("location4");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    // Attribution match but primitive field not match.
-    attributionMatcher->set_position(Position::ANY);
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("location2");
-    fieldMatcher->set_eq_string("wrong value");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    fieldMatcher->set_eq_string("some value");
-
-    // Uid match.
-    attributionMatcher->set_position(Position::ANY);
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_field(
-        ATTRIBUTION_UID_FIELD_ID);
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string("pkg0");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    uidMap.updateMap(
-            1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
-            {android::String16("v1"), android::String16("v1"), android::String16("v2"),
-             android::String16("v1"), android::String16("v2")},
-            {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
-             android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
-            {android::String16(""), android::String16(""), android::String16(""),
-             android::String16(""), android::String16("")});
-
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg3");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg2");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg1");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg0");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    attributionMatcher->set_position(Position::FIRST);
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg0");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg3");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg2");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg1");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    attributionMatcher->set_position(Position::LAST);
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg0");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg3");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg2");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg1");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    // Uid + tag.
-    attributionMatcher->set_position(Position::ANY);
-    attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
-        ATTRIBUTION_TAG_FIELD_ID);
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg0");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location1");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg1");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location1");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg1");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location2");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg2");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location3");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg3");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location3");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg3");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location1");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    attributionMatcher->set_position(Position::FIRST);
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg0");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location1");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg1");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location1");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg1");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location2");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg2");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location3");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg3");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location3");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg3");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location1");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    attributionMatcher->set_position(Position::LAST);
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg0");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location1");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg1");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location1");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg1");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location2");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg2");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location3");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg3");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location3");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-        ->set_eq_string("pkg3");
-    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-        ->set_eq_string("location1");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-}
-
-TEST(AtomMatcherTest, TestUidFieldMatcher) {
-    UidMap uidMap;
-    uidMap.updateMap(
-        1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
-        {android::String16("v1"), android::String16("v1"), android::String16("v2"),
-         android::String16("v1"), android::String16("v2")},
-        {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
-         android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
-        {android::String16(""), android::String16(""), android::String16(""),
-         android::String16(""), android::String16("")});
-
-    // Set up matcher
-    AtomMatcher matcher;
-    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-    simpleMatcher->set_atom_id(TAG_ID);
-    simpleMatcher->add_field_value_matcher()->set_field(1);
-    simpleMatcher->mutable_field_value_matcher(0)->set_eq_string("pkg0");
-
-    // Set up the event
-    LogEvent event(TAG_ID, 0);
-    event.write(1111);
-    event.init();
-
-    LogEvent event2(TAG_ID_2, 0);
-    event2.write(1111);
-    event2.write("some value");
-    event2.init();
-
-    // Tag not in kAtomsWithUidField
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    // Tag found in kAtomsWithUidField and has matching uid
-    simpleMatcher->set_atom_id(TAG_ID_2);
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event2));
-
-    // Tag found in kAtomsWithUidField but has non-matching uid
-    simpleMatcher->mutable_field_value_matcher(0)->set_eq_string("Pkg2");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event2));
-}
-
-TEST(AtomMatcherTest, TestNeqAnyStringMatcher) {
-    UidMap uidMap;
-    uidMap.updateMap(
-            1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
-            {android::String16("v1"), android::String16("v1"), android::String16("v2"),
-             android::String16("v1"), android::String16("v2")},
-            {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
-             android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
-            {android::String16(""), android::String16(""), android::String16(""),
-             android::String16(""), android::String16("")});
-
-    AttributionNodeInternal attribution_node1;
-    attribution_node1.set_uid(1111);
-    attribution_node1.set_tag("location1");
-
-    AttributionNodeInternal attribution_node2;
-    attribution_node2.set_uid(2222);
-    attribution_node2.set_tag("location2");
-
-    AttributionNodeInternal attribution_node3;
-    attribution_node3.set_uid(3333);
-    attribution_node3.set_tag("location3");
-
-    AttributionNodeInternal attribution_node4;
-    attribution_node4.set_uid(1066);
-    attribution_node4.set_tag("location3");
-    std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
-                                                              attribution_node3, attribution_node4};
-
-    // Set up the event
-    LogEvent event(TAG_ID, 0);
-    event.write(attribution_nodes);
-    event.write("some value");
-    // Convert to a LogEvent
-    event.init();
-
-    // Set up the matcher
-    AtomMatcher matcher;
-    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-    simpleMatcher->set_atom_id(TAG_ID);
-
-    // Match first node.
-    auto attributionMatcher = simpleMatcher->add_field_value_matcher();
-    attributionMatcher->set_field(FIELD_ID_1);
-    attributionMatcher->set_position(Position::FIRST);
-    attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
-            ATTRIBUTION_UID_FIELD_ID);
-    auto neqStringList = attributionMatcher->mutable_matches_tuple()
-                                 ->mutable_field_value_matcher(0)
-                                 ->mutable_neq_any_string();
-    neqStringList->add_str_value("pkg2");
-    neqStringList->add_str_value("pkg3");
-
-    auto fieldMatcher = simpleMatcher->add_field_value_matcher();
-    fieldMatcher->set_field(FIELD_ID_2);
-    fieldMatcher->set_eq_string("some value");
-
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    neqStringList->Clear();
-    neqStringList->add_str_value("pkg1");
-    neqStringList->add_str_value("pkg3");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    attributionMatcher->set_position(Position::ANY);
-    neqStringList->Clear();
-    neqStringList->add_str_value("maps.com");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    neqStringList->Clear();
-    neqStringList->add_str_value("PkG3");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    attributionMatcher->set_position(Position::LAST);
-    neqStringList->Clear();
-    neqStringList->add_str_value("AID_STATSD");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-}
-
-TEST(AtomMatcherTest, TestEqAnyStringMatcher) {
-    UidMap uidMap;
-    uidMap.updateMap(
-            1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
-            {android::String16("v1"), android::String16("v1"), android::String16("v2"),
-             android::String16("v1"), android::String16("v2")},
-            {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
-             android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
-            {android::String16(""), android::String16(""), android::String16(""),
-             android::String16(""), android::String16("")});
-
-    AttributionNodeInternal attribution_node1;
-    attribution_node1.set_uid(1067);
-    attribution_node1.set_tag("location1");
-
-    AttributionNodeInternal attribution_node2;
-    attribution_node2.set_uid(2222);
-    attribution_node2.set_tag("location2");
-
-    AttributionNodeInternal attribution_node3;
-    attribution_node3.set_uid(3333);
-    attribution_node3.set_tag("location3");
-
-    AttributionNodeInternal attribution_node4;
-    attribution_node4.set_uid(1066);
-    attribution_node4.set_tag("location3");
-    std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
-                                                              attribution_node3, attribution_node4};
-
-    // Set up the event
-    LogEvent event(TAG_ID, 0);
-    event.write(attribution_nodes);
-    event.write("some value");
-    // Convert to a LogEvent
-    event.init();
-
-    // Set up the matcher
-    AtomMatcher matcher;
-    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-    simpleMatcher->set_atom_id(TAG_ID);
-
-    // Match first node.
-    auto attributionMatcher = simpleMatcher->add_field_value_matcher();
-    attributionMatcher->set_field(FIELD_ID_1);
-    attributionMatcher->set_position(Position::FIRST);
-    attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
-            ATTRIBUTION_UID_FIELD_ID);
-    auto eqStringList = attributionMatcher->mutable_matches_tuple()
-                                ->mutable_field_value_matcher(0)
-                                ->mutable_eq_any_string();
-    eqStringList->add_str_value("AID_ROOT");
-    eqStringList->add_str_value("AID_INCIDENTD");
-
-    auto fieldMatcher = simpleMatcher->add_field_value_matcher();
-    fieldMatcher->set_field(FIELD_ID_2);
-    fieldMatcher->set_eq_string("some value");
-
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    attributionMatcher->set_position(Position::ANY);
-    eqStringList->Clear();
-    eqStringList->add_str_value("AID_STATSD");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    eqStringList->Clear();
-    eqStringList->add_str_value("pkg1");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    auto normalStringField = fieldMatcher->mutable_eq_any_string();
-    normalStringField->add_str_value("some value123");
-    normalStringField->add_str_value("some value");
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    normalStringField->Clear();
-    normalStringField->add_str_value("AID_STATSD");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    eqStringList->Clear();
-    eqStringList->add_str_value("maps.com");
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-}
-
-TEST(AtomMatcherTest, TestBoolMatcher) {
-    UidMap uidMap;
-    // Set up the matcher
-    AtomMatcher matcher;
-    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-    simpleMatcher->set_atom_id(TAG_ID);
-    auto keyValue1 = simpleMatcher->add_field_value_matcher();
-    keyValue1->set_field(FIELD_ID_1);
-    auto keyValue2 = simpleMatcher->add_field_value_matcher();
-    keyValue2->set_field(FIELD_ID_2);
-
-    // Set up the event
-    LogEvent event(TAG_ID, 0);
-    EXPECT_TRUE(event.write(true));
-    EXPECT_TRUE(event.write(false));
-    // Convert to a LogEvent
-    event.init();
-
-    // Test
-    keyValue1->set_eq_bool(true);
-    keyValue2->set_eq_bool(false);
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    keyValue1->set_eq_bool(false);
-    keyValue2->set_eq_bool(false);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    keyValue1->set_eq_bool(false);
-    keyValue2->set_eq_bool(true);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    keyValue1->set_eq_bool(true);
-    keyValue2->set_eq_bool(true);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-}
-
-TEST(AtomMatcherTest, TestStringMatcher) {
-    UidMap uidMap;
-    // Set up the matcher
-    AtomMatcher matcher;
-    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-    simpleMatcher->set_atom_id(TAG_ID);
-    auto keyValue = simpleMatcher->add_field_value_matcher();
-    keyValue->set_field(FIELD_ID_1);
-    keyValue->set_eq_string("some value");
-
-    // Set up the event
-    LogEvent event(TAG_ID, 0);
-    event.write("some value");
-    // Convert to a LogEvent
-    event.init();
-
-    // Test
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-}
-
-TEST(AtomMatcherTest, TestMultiFieldsMatcher) {
-    UidMap uidMap;
-    // Set up the matcher
-    AtomMatcher matcher;
-    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-    simpleMatcher->set_atom_id(TAG_ID);
-    auto keyValue1 = simpleMatcher->add_field_value_matcher();
-    keyValue1->set_field(FIELD_ID_1);
-    auto keyValue2 = simpleMatcher->add_field_value_matcher();
-    keyValue2->set_field(FIELD_ID_2);
-
-    // Set up the event
-    LogEvent event(TAG_ID, 0);
-    event.write(2);
-    event.write(3);
-
-    // Convert to a LogEvent
-    event.init();
-
-    // Test
-    keyValue1->set_eq_int(2);
-    keyValue2->set_eq_int(3);
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    keyValue1->set_eq_int(2);
-    keyValue2->set_eq_int(4);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    keyValue1->set_eq_int(4);
-    keyValue2->set_eq_int(3);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-}
-
-TEST(AtomMatcherTest, TestIntComparisonMatcher) {
-    UidMap uidMap;
-    // Set up the matcher
-    AtomMatcher matcher;
-    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-
-    simpleMatcher->set_atom_id(TAG_ID);
-    auto keyValue = simpleMatcher->add_field_value_matcher();
-    keyValue->set_field(FIELD_ID_1);
-
-    // Set up the event
-    LogEvent event(TAG_ID, 0);
-    event.write(11);
-    event.init();
-
-    // Test
-
-    // eq_int
-    keyValue->set_eq_int(10);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    keyValue->set_eq_int(11);
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    keyValue->set_eq_int(12);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    // lt_int
-    keyValue->set_lt_int(10);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    keyValue->set_lt_int(11);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    keyValue->set_lt_int(12);
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    // lte_int
-    keyValue->set_lte_int(10);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    keyValue->set_lte_int(11);
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    keyValue->set_lte_int(12);
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    // gt_int
-    keyValue->set_gt_int(10);
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    keyValue->set_gt_int(11);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-    keyValue->set_gt_int(12);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-
-    // gte_int
-    keyValue->set_gte_int(10);
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    keyValue->set_gte_int(11);
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-    keyValue->set_gte_int(12);
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-}
-
-TEST(AtomMatcherTest, TestFloatComparisonMatcher) {
-    UidMap uidMap;
-    // Set up the matcher
-    AtomMatcher matcher;
-    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-    simpleMatcher->set_atom_id(TAG_ID);
-
-    auto keyValue = simpleMatcher->add_field_value_matcher();
-    keyValue->set_field(FIELD_ID_1);
-
-    LogEvent event1(TAG_ID, 0);
-    keyValue->set_lt_float(10.0);
-    event1.write(10.1f);
-    event1.init();
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event1));
-
-    LogEvent event2(TAG_ID, 0);
-    event2.write(9.9f);
-    event2.init();
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event2));
-
-    LogEvent event3(TAG_ID, 0);
-    event3.write(10.1f);
-    event3.init();
-    keyValue->set_gt_float(10.0);
-    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event3));
-
-    LogEvent event4(TAG_ID, 0);
-    event4.write(9.9f);
-    event4.init();
-    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event4));
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//TEST(AtomMatcherTest, TestSimpleMatcher) {
+//    UidMap uidMap;
+//
+//    // Set up the matcher
+//    AtomMatcher matcher;
+//    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+//    simpleMatcher->set_atom_id(TAG_ID);
+//
+//    LogEvent event(TAG_ID, 0);
+//    EXPECT_TRUE(event.write(11));
+//    event.init();
+//
+//    // Test
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    // Wrong tag id.
+//    simpleMatcher->set_atom_id(TAG_ID + 1);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//}
+//
+//TEST(AtomMatcherTest, TestAttributionMatcher) {
+//    UidMap uidMap;
+//    AttributionNodeInternal attribution_node1;
+//    attribution_node1.set_uid(1111);
+//    attribution_node1.set_tag("location1");
+//
+//    AttributionNodeInternal attribution_node2;
+//    attribution_node2.set_uid(2222);
+//    attribution_node2.set_tag("location2");
+//
+//    AttributionNodeInternal attribution_node3;
+//    attribution_node3.set_uid(3333);
+//    attribution_node3.set_tag("location3");
+//    std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
+//                                                              attribution_node3};
+//
+//    // Set up the event
+//    LogEvent event(TAG_ID, 0);
+//    event.write(attribution_nodes);
+//    event.write("some value");
+//    // Convert to a LogEvent
+//    event.init();
+//
+//    // Set up the matcher
+//    AtomMatcher matcher;
+//    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+//    simpleMatcher->set_atom_id(TAG_ID);
+//
+//    // Match first node.
+//    auto attributionMatcher = simpleMatcher->add_field_value_matcher();
+//    attributionMatcher->set_field(FIELD_ID_1);
+//    attributionMatcher->set_position(Position::FIRST);
+//    attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
+//        ATTRIBUTION_TAG_FIELD_ID);
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string("tag");
+//
+//    auto fieldMatcher = simpleMatcher->add_field_value_matcher();
+//    fieldMatcher->set_field(FIELD_ID_2);
+//    fieldMatcher->set_eq_string("some value");
+//
+//    // Tag not matched.
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("location3");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("location1");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    // Match last node.
+//    attributionMatcher->set_position(Position::LAST);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("location3");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    // Match any node.
+//    attributionMatcher->set_position(Position::ANY);
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("location1");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("location2");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("location3");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("location4");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    // Attribution match but primitive field not match.
+//    attributionMatcher->set_position(Position::ANY);
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("location2");
+//    fieldMatcher->set_eq_string("wrong value");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    fieldMatcher->set_eq_string("some value");
+//
+//    // Uid match.
+//    attributionMatcher->set_position(Position::ANY);
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_field(
+//        ATTRIBUTION_UID_FIELD_ID);
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string("pkg0");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    uidMap.updateMap(
+//            1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
+//            {android::String16("v1"), android::String16("v1"), android::String16("v2"),
+//             android::String16("v1"), android::String16("v2")},
+//            {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
+//             android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
+//            {android::String16(""), android::String16(""), android::String16(""),
+//             android::String16(""), android::String16("")});
+//
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg3");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg2");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg1");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg0");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    attributionMatcher->set_position(Position::FIRST);
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg0");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg3");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg2");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg1");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    attributionMatcher->set_position(Position::LAST);
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg0");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg3");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg2");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg1");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    // Uid + tag.
+//    attributionMatcher->set_position(Position::ANY);
+//    attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
+//        ATTRIBUTION_TAG_FIELD_ID);
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg0");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location1");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg1");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location1");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg1");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location2");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg2");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location3");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg3");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location3");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg3");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location1");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    attributionMatcher->set_position(Position::FIRST);
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg0");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location1");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg1");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location1");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg1");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location2");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg2");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location3");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg3");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location3");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg3");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location1");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    attributionMatcher->set_position(Position::LAST);
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg0");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location1");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg1");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location1");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg1");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location2");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg2");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location3");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg3");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location3");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
+//        ->set_eq_string("pkg3");
+//    attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
+//        ->set_eq_string("location1");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//}
+//
+//TEST(AtomMatcherTest, TestUidFieldMatcher) {
+//    UidMap uidMap;
+//    uidMap.updateMap(
+//        1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
+//        {android::String16("v1"), android::String16("v1"), android::String16("v2"),
+//         android::String16("v1"), android::String16("v2")},
+//        {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
+//         android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
+//        {android::String16(""), android::String16(""), android::String16(""),
+//         android::String16(""), android::String16("")});
+//
+//    // Set up matcher
+//    AtomMatcher matcher;
+//    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+//    simpleMatcher->set_atom_id(TAG_ID);
+//    simpleMatcher->add_field_value_matcher()->set_field(1);
+//    simpleMatcher->mutable_field_value_matcher(0)->set_eq_string("pkg0");
+//
+//    // Set up the event
+//    LogEvent event(TAG_ID, 0);
+//    event.write(1111);
+//    event.init();
+//
+//    LogEvent event2(TAG_ID_2, 0);
+//    event2.write(1111);
+//    event2.write("some value");
+//    event2.init();
+//
+//    // Tag not in kAtomsWithUidField
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    // Tag found in kAtomsWithUidField and has matching uid
+//    simpleMatcher->set_atom_id(TAG_ID_2);
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event2));
+//
+//    // Tag found in kAtomsWithUidField but has non-matching uid
+//    simpleMatcher->mutable_field_value_matcher(0)->set_eq_string("Pkg2");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event2));
+//}
+//
+//TEST(AtomMatcherTest, TestNeqAnyStringMatcher) {
+//    UidMap uidMap;
+//    uidMap.updateMap(
+//            1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
+//            {android::String16("v1"), android::String16("v1"), android::String16("v2"),
+//             android::String16("v1"), android::String16("v2")},
+//            {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
+//             android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
+//            {android::String16(""), android::String16(""), android::String16(""),
+//             android::String16(""), android::String16("")});
+//
+//    AttributionNodeInternal attribution_node1;
+//    attribution_node1.set_uid(1111);
+//    attribution_node1.set_tag("location1");
+//
+//    AttributionNodeInternal attribution_node2;
+//    attribution_node2.set_uid(2222);
+//    attribution_node2.set_tag("location2");
+//
+//    AttributionNodeInternal attribution_node3;
+//    attribution_node3.set_uid(3333);
+//    attribution_node3.set_tag("location3");
+//
+//    AttributionNodeInternal attribution_node4;
+//    attribution_node4.set_uid(1066);
+//    attribution_node4.set_tag("location3");
+//    std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
+//                                                              attribution_node3, attribution_node4};
+//
+//    // Set up the event
+//    LogEvent event(TAG_ID, 0);
+//    event.write(attribution_nodes);
+//    event.write("some value");
+//    // Convert to a LogEvent
+//    event.init();
+//
+//    // Set up the matcher
+//    AtomMatcher matcher;
+//    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+//    simpleMatcher->set_atom_id(TAG_ID);
+//
+//    // Match first node.
+//    auto attributionMatcher = simpleMatcher->add_field_value_matcher();
+//    attributionMatcher->set_field(FIELD_ID_1);
+//    attributionMatcher->set_position(Position::FIRST);
+//    attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
+//            ATTRIBUTION_UID_FIELD_ID);
+//    auto neqStringList = attributionMatcher->mutable_matches_tuple()
+//                                 ->mutable_field_value_matcher(0)
+//                                 ->mutable_neq_any_string();
+//    neqStringList->add_str_value("pkg2");
+//    neqStringList->add_str_value("pkg3");
+//
+//    auto fieldMatcher = simpleMatcher->add_field_value_matcher();
+//    fieldMatcher->set_field(FIELD_ID_2);
+//    fieldMatcher->set_eq_string("some value");
+//
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    neqStringList->Clear();
+//    neqStringList->add_str_value("pkg1");
+//    neqStringList->add_str_value("pkg3");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    attributionMatcher->set_position(Position::ANY);
+//    neqStringList->Clear();
+//    neqStringList->add_str_value("maps.com");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    neqStringList->Clear();
+//    neqStringList->add_str_value("PkG3");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    attributionMatcher->set_position(Position::LAST);
+//    neqStringList->Clear();
+//    neqStringList->add_str_value("AID_STATSD");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//}
+//
+//TEST(AtomMatcherTest, TestEqAnyStringMatcher) {
+//    UidMap uidMap;
+//    uidMap.updateMap(
+//            1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
+//            {android::String16("v1"), android::String16("v1"), android::String16("v2"),
+//             android::String16("v1"), android::String16("v2")},
+//            {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
+//             android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
+//            {android::String16(""), android::String16(""), android::String16(""),
+//             android::String16(""), android::String16("")});
+//
+//    AttributionNodeInternal attribution_node1;
+//    attribution_node1.set_uid(1067);
+//    attribution_node1.set_tag("location1");
+//
+//    AttributionNodeInternal attribution_node2;
+//    attribution_node2.set_uid(2222);
+//    attribution_node2.set_tag("location2");
+//
+//    AttributionNodeInternal attribution_node3;
+//    attribution_node3.set_uid(3333);
+//    attribution_node3.set_tag("location3");
+//
+//    AttributionNodeInternal attribution_node4;
+//    attribution_node4.set_uid(1066);
+//    attribution_node4.set_tag("location3");
+//    std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
+//                                                              attribution_node3, attribution_node4};
+//
+//    // Set up the event
+//    LogEvent event(TAG_ID, 0);
+//    event.write(attribution_nodes);
+//    event.write("some value");
+//    // Convert to a LogEvent
+//    event.init();
+//
+//    // Set up the matcher
+//    AtomMatcher matcher;
+//    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+//    simpleMatcher->set_atom_id(TAG_ID);
+//
+//    // Match first node.
+//    auto attributionMatcher = simpleMatcher->add_field_value_matcher();
+//    attributionMatcher->set_field(FIELD_ID_1);
+//    attributionMatcher->set_position(Position::FIRST);
+//    attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
+//            ATTRIBUTION_UID_FIELD_ID);
+//    auto eqStringList = attributionMatcher->mutable_matches_tuple()
+//                                ->mutable_field_value_matcher(0)
+//                                ->mutable_eq_any_string();
+//    eqStringList->add_str_value("AID_ROOT");
+//    eqStringList->add_str_value("AID_INCIDENTD");
+//
+//    auto fieldMatcher = simpleMatcher->add_field_value_matcher();
+//    fieldMatcher->set_field(FIELD_ID_2);
+//    fieldMatcher->set_eq_string("some value");
+//
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    attributionMatcher->set_position(Position::ANY);
+//    eqStringList->Clear();
+//    eqStringList->add_str_value("AID_STATSD");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    eqStringList->Clear();
+//    eqStringList->add_str_value("pkg1");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    auto normalStringField = fieldMatcher->mutable_eq_any_string();
+//    normalStringField->add_str_value("some value123");
+//    normalStringField->add_str_value("some value");
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    normalStringField->Clear();
+//    normalStringField->add_str_value("AID_STATSD");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    eqStringList->Clear();
+//    eqStringList->add_str_value("maps.com");
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//}
+//
+//TEST(AtomMatcherTest, TestBoolMatcher) {
+//    UidMap uidMap;
+//    // Set up the matcher
+//    AtomMatcher matcher;
+//    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+//    simpleMatcher->set_atom_id(TAG_ID);
+//    auto keyValue1 = simpleMatcher->add_field_value_matcher();
+//    keyValue1->set_field(FIELD_ID_1);
+//    auto keyValue2 = simpleMatcher->add_field_value_matcher();
+//    keyValue2->set_field(FIELD_ID_2);
+//
+//    // Set up the event
+//    LogEvent event(TAG_ID, 0);
+//    EXPECT_TRUE(event.write(true));
+//    EXPECT_TRUE(event.write(false));
+//    // Convert to a LogEvent
+//    event.init();
+//
+//    // Test
+//    keyValue1->set_eq_bool(true);
+//    keyValue2->set_eq_bool(false);
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    keyValue1->set_eq_bool(false);
+//    keyValue2->set_eq_bool(false);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    keyValue1->set_eq_bool(false);
+//    keyValue2->set_eq_bool(true);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    keyValue1->set_eq_bool(true);
+//    keyValue2->set_eq_bool(true);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//}
+//
+//TEST(AtomMatcherTest, TestStringMatcher) {
+//    UidMap uidMap;
+//    // Set up the matcher
+//    AtomMatcher matcher;
+//    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+//    simpleMatcher->set_atom_id(TAG_ID);
+//    auto keyValue = simpleMatcher->add_field_value_matcher();
+//    keyValue->set_field(FIELD_ID_1);
+//    keyValue->set_eq_string("some value");
+//
+//    // Set up the event
+//    LogEvent event(TAG_ID, 0);
+//    event.write("some value");
+//    // Convert to a LogEvent
+//    event.init();
+//
+//    // Test
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//}
+//
+//TEST(AtomMatcherTest, TestMultiFieldsMatcher) {
+//    UidMap uidMap;
+//    // Set up the matcher
+//    AtomMatcher matcher;
+//    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+//    simpleMatcher->set_atom_id(TAG_ID);
+//    auto keyValue1 = simpleMatcher->add_field_value_matcher();
+//    keyValue1->set_field(FIELD_ID_1);
+//    auto keyValue2 = simpleMatcher->add_field_value_matcher();
+//    keyValue2->set_field(FIELD_ID_2);
+//
+//    // Set up the event
+//    LogEvent event(TAG_ID, 0);
+//    event.write(2);
+//    event.write(3);
+//
+//    // Convert to a LogEvent
+//    event.init();
+//
+//    // Test
+//    keyValue1->set_eq_int(2);
+//    keyValue2->set_eq_int(3);
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    keyValue1->set_eq_int(2);
+//    keyValue2->set_eq_int(4);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    keyValue1->set_eq_int(4);
+//    keyValue2->set_eq_int(3);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//}
+//
+//TEST(AtomMatcherTest, TestIntComparisonMatcher) {
+//    UidMap uidMap;
+//    // Set up the matcher
+//    AtomMatcher matcher;
+//    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+//
+//    simpleMatcher->set_atom_id(TAG_ID);
+//    auto keyValue = simpleMatcher->add_field_value_matcher();
+//    keyValue->set_field(FIELD_ID_1);
+//
+//    // Set up the event
+//    LogEvent event(TAG_ID, 0);
+//    event.write(11);
+//    event.init();
+//
+//    // Test
+//
+//    // eq_int
+//    keyValue->set_eq_int(10);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    keyValue->set_eq_int(11);
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    keyValue->set_eq_int(12);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    // lt_int
+//    keyValue->set_lt_int(10);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    keyValue->set_lt_int(11);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    keyValue->set_lt_int(12);
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    // lte_int
+//    keyValue->set_lte_int(10);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    keyValue->set_lte_int(11);
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    keyValue->set_lte_int(12);
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    // gt_int
+//    keyValue->set_gt_int(10);
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    keyValue->set_gt_int(11);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//    keyValue->set_gt_int(12);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//
+//    // gte_int
+//    keyValue->set_gte_int(10);
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    keyValue->set_gte_int(11);
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+//    keyValue->set_gte_int(12);
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+//}
+//
+//TEST(AtomMatcherTest, TestFloatComparisonMatcher) {
+//    UidMap uidMap;
+//    // Set up the matcher
+//    AtomMatcher matcher;
+//    auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+//    simpleMatcher->set_atom_id(TAG_ID);
+//
+//    auto keyValue = simpleMatcher->add_field_value_matcher();
+//    keyValue->set_field(FIELD_ID_1);
+//
+//    LogEvent event1(TAG_ID, 0);
+//    keyValue->set_lt_float(10.0);
+//    event1.write(10.1f);
+//    event1.init();
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event1));
+//
+//    LogEvent event2(TAG_ID, 0);
+//    event2.write(9.9f);
+//    event2.init();
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event2));
+//
+//    LogEvent event3(TAG_ID, 0);
+//    event3.write(10.1f);
+//    event3.init();
+//    keyValue->set_gt_float(10.0);
+//    EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event3));
+//
+//    LogEvent event4(TAG_ID, 0);
+//    event4.write(9.9f);
+//    event4.init();
+//    EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event4));
+//}
 
 // Helper for the composite matchers.
 void addSimpleMatcher(SimpleAtomMatcher* simpleMatcher, int tag, int key, int val) {
diff --git a/cmds/statsd/tests/LogEvent_test.cpp b/cmds/statsd/tests/LogEvent_test.cpp
index f624e12..7542faf 100644
--- a/cmds/statsd/tests/LogEvent_test.cpp
+++ b/cmds/statsd/tests/LogEvent_test.cpp
@@ -31,9 +31,6 @@
 using util::ProtoOutputStream;
 using util::ProtoReader;
 
-
-#ifdef NEW_ENCODING_SCHEME
-
 Field getField(int32_t tag, const vector<int32_t>& pos, int32_t depth, const vector<bool>& last) {
     Field f(tag, (int32_t*)pos.data(), depth);
 
@@ -241,480 +238,6 @@
     AStatsEvent_release(event);
 }
 
-#else // NEW_ENCODING_SCHEME
-
-TEST(LogEventTest, TestLogParsing) {
-    LogEvent event1(1, 2000);
-
-    std::vector<AttributionNodeInternal> nodes;
-
-    AttributionNodeInternal node1;
-    node1.set_uid(1000);
-    node1.set_tag("tag1");
-    nodes.push_back(node1);
-
-    AttributionNodeInternal node2;
-    node2.set_uid(2000);
-    node2.set_tag("tag2");
-    nodes.push_back(node2);
-
-    event1.write(nodes);
-    event1.write("hello");
-    event1.write((int32_t)10);
-    event1.write((int64_t)20);
-    event1.write((float)1.1);
-    event1.init();
-
-    const auto& items = event1.getValues();
-    EXPECT_EQ((size_t)8, items.size());
-    EXPECT_EQ(1, event1.GetTagId());
-
-    const FieldValue& item0 = event1.getValues()[0];
-    EXPECT_EQ(0x2010101, item0.mField.getField());
-    EXPECT_EQ(Type::INT, item0.mValue.getType());
-    EXPECT_EQ(1000, item0.mValue.int_value);
-
-    const FieldValue& item1 = event1.getValues()[1];
-    EXPECT_EQ(0x2010182, item1.mField.getField());
-    EXPECT_EQ(Type::STRING, item1.mValue.getType());
-    EXPECT_EQ("tag1", item1.mValue.str_value);
-
-    const FieldValue& item2 = event1.getValues()[2];
-    EXPECT_EQ(0x2018201, item2.mField.getField());
-    EXPECT_EQ(Type::INT, item2.mValue.getType());
-    EXPECT_EQ(2000, item2.mValue.int_value);
-
-    const FieldValue& item3 = event1.getValues()[3];
-    EXPECT_EQ(0x2018282, item3.mField.getField());
-    EXPECT_EQ(Type::STRING, item3.mValue.getType());
-    EXPECT_EQ("tag2", item3.mValue.str_value);
-
-    const FieldValue& item4 = event1.getValues()[4];
-    EXPECT_EQ(0x20000, item4.mField.getField());
-    EXPECT_EQ(Type::STRING, item4.mValue.getType());
-    EXPECT_EQ("hello", item4.mValue.str_value);
-
-    const FieldValue& item5 = event1.getValues()[5];
-    EXPECT_EQ(0x30000, item5.mField.getField());
-    EXPECT_EQ(Type::INT, item5.mValue.getType());
-    EXPECT_EQ(10, item5.mValue.int_value);
-
-    const FieldValue& item6 = event1.getValues()[6];
-    EXPECT_EQ(0x40000, item6.mField.getField());
-    EXPECT_EQ(Type::LONG, item6.mValue.getType());
-    EXPECT_EQ((int64_t)20, item6.mValue.long_value);
-
-    const FieldValue& item7 = event1.getValues()[7];
-    EXPECT_EQ(0x50000, item7.mField.getField());
-    EXPECT_EQ(Type::FLOAT, item7.mValue.getType());
-    EXPECT_EQ((float)1.1, item7.mValue.float_value);
-}
-
-TEST(LogEventTest, TestKeyValuePairsAtomParsing) {
-    LogEvent event1(83, 2000, 1000);
-    std::map<int32_t, int32_t> int_map;
-    std::map<int32_t, int64_t> long_map;
-    std::map<int32_t, std::string> string_map;
-    std::map<int32_t, float> float_map;
-
-    int_map[11] = 123;
-    int_map[22] = 345;
-
-    long_map[33] = 678L;
-    long_map[44] = 890L;
-
-    string_map[1] = "test2";
-    string_map[2] = "test1";
-
-    float_map[111] = 2.2f;
-    float_map[222] = 1.1f;
-
-    EXPECT_TRUE(event1.writeKeyValuePairs(0, // Logging side logs 0 uid.
-                                          int_map,
-                                          long_map,
-                                          string_map,
-                                          float_map));
-    event1.init();
-
-    EXPECT_EQ(83, event1.GetTagId());
-    const auto& items = event1.getValues();
-    EXPECT_EQ((size_t)17, items.size());
-
-    const FieldValue& item0 = event1.getValues()[0];
-    EXPECT_EQ(0x10000, item0.mField.getField());
-    EXPECT_EQ(Type::INT, item0.mValue.getType());
-    EXPECT_EQ(1000, item0.mValue.int_value);
-
-    const FieldValue& item1 = event1.getValues()[1];
-    EXPECT_EQ(0x2010201, item1.mField.getField());
-    EXPECT_EQ(Type::INT, item1.mValue.getType());
-    EXPECT_EQ(11, item1.mValue.int_value);
-
-    const FieldValue& item2 = event1.getValues()[2];
-    EXPECT_EQ(0x2010282, item2.mField.getField());
-    EXPECT_EQ(Type::INT, item2.mValue.getType());
-    EXPECT_EQ(123, item2.mValue.int_value);
-
-    const FieldValue& item3 = event1.getValues()[3];
-    EXPECT_EQ(0x2010301, item3.mField.getField());
-    EXPECT_EQ(Type::INT, item3.mValue.getType());
-    EXPECT_EQ(22, item3.mValue.int_value);
-
-    const FieldValue& item4 = event1.getValues()[4];
-    EXPECT_EQ(0x2010382, item4.mField.getField());
-    EXPECT_EQ(Type::INT, item4.mValue.getType());
-    EXPECT_EQ(345, item4.mValue.int_value);
-
-    const FieldValue& item5 = event1.getValues()[5];
-    EXPECT_EQ(0x2010401, item5.mField.getField());
-    EXPECT_EQ(Type::INT, item5.mValue.getType());
-    EXPECT_EQ(33, item5.mValue.int_value);
-
-    const FieldValue& item6 = event1.getValues()[6];
-    EXPECT_EQ(0x2010483, item6.mField.getField());
-    EXPECT_EQ(Type::LONG, item6.mValue.getType());
-    EXPECT_EQ(678L, item6.mValue.int_value);
-
-    const FieldValue& item7 = event1.getValues()[7];
-    EXPECT_EQ(0x2010501, item7.mField.getField());
-    EXPECT_EQ(Type::INT, item7.mValue.getType());
-    EXPECT_EQ(44, item7.mValue.int_value);
-
-    const FieldValue& item8 = event1.getValues()[8];
-    EXPECT_EQ(0x2010583, item8.mField.getField());
-    EXPECT_EQ(Type::LONG, item8.mValue.getType());
-    EXPECT_EQ(890L, item8.mValue.int_value);
-
-    const FieldValue& item9 = event1.getValues()[9];
-    EXPECT_EQ(0x2010601, item9.mField.getField());
-    EXPECT_EQ(Type::INT, item9.mValue.getType());
-    EXPECT_EQ(1, item9.mValue.int_value);
-
-    const FieldValue& item10 = event1.getValues()[10];
-    EXPECT_EQ(0x2010684, item10.mField.getField());
-    EXPECT_EQ(Type::STRING, item10.mValue.getType());
-    EXPECT_EQ("test2", item10.mValue.str_value);
-
-    const FieldValue& item11 = event1.getValues()[11];
-    EXPECT_EQ(0x2010701, item11.mField.getField());
-    EXPECT_EQ(Type::INT, item11.mValue.getType());
-    EXPECT_EQ(2, item11.mValue.int_value);
-
-    const FieldValue& item12 = event1.getValues()[12];
-    EXPECT_EQ(0x2010784, item12.mField.getField());
-    EXPECT_EQ(Type::STRING, item12.mValue.getType());
-    EXPECT_EQ("test1", item12.mValue.str_value);
-
-    const FieldValue& item13 = event1.getValues()[13];
-    EXPECT_EQ(0x2010801, item13.mField.getField());
-    EXPECT_EQ(Type::INT, item13.mValue.getType());
-    EXPECT_EQ(111, item13.mValue.int_value);
-
-    const FieldValue& item14 = event1.getValues()[14];
-    EXPECT_EQ(0x2010885, item14.mField.getField());
-    EXPECT_EQ(Type::FLOAT, item14.mValue.getType());
-    EXPECT_EQ(2.2f, item14.mValue.float_value);
-
-    const FieldValue& item15 = event1.getValues()[15];
-    EXPECT_EQ(0x2018901, item15.mField.getField());
-    EXPECT_EQ(Type::INT, item15.mValue.getType());
-    EXPECT_EQ(222, item15.mValue.int_value);
-
-    const FieldValue& item16 = event1.getValues()[16];
-    EXPECT_EQ(0x2018985, item16.mField.getField());
-    EXPECT_EQ(Type::FLOAT, item16.mValue.getType());
-    EXPECT_EQ(1.1f, item16.mValue.float_value);
-}
-
-TEST(LogEventTest, TestLogParsing2) {
-    LogEvent event1(1, 2000);
-
-    std::vector<AttributionNodeInternal> nodes;
-
-    event1.write("hello");
-
-    // repeated msg can be in the middle
-    AttributionNodeInternal node1;
-    node1.set_uid(1000);
-    node1.set_tag("tag1");
-    nodes.push_back(node1);
-
-    AttributionNodeInternal node2;
-    node2.set_uid(2000);
-    node2.set_tag("tag2");
-    nodes.push_back(node2);
-    event1.write(nodes);
-
-    event1.write((int32_t)10);
-    event1.write((int64_t)20);
-    event1.write((float)1.1);
-    event1.init();
-
-    const auto& items = event1.getValues();
-    EXPECT_EQ((size_t)8, items.size());
-    EXPECT_EQ(1, event1.GetTagId());
-
-    const FieldValue& item = event1.getValues()[0];
-    EXPECT_EQ(0x00010000, item.mField.getField());
-    EXPECT_EQ(Type::STRING, item.mValue.getType());
-    EXPECT_EQ("hello", item.mValue.str_value);
-
-    const FieldValue& item0 = event1.getValues()[1];
-    EXPECT_EQ(0x2020101, item0.mField.getField());
-    EXPECT_EQ(Type::INT, item0.mValue.getType());
-    EXPECT_EQ(1000, item0.mValue.int_value);
-
-    const FieldValue& item1 = event1.getValues()[2];
-    EXPECT_EQ(0x2020182, item1.mField.getField());
-    EXPECT_EQ(Type::STRING, item1.mValue.getType());
-    EXPECT_EQ("tag1", item1.mValue.str_value);
-
-    const FieldValue& item2 = event1.getValues()[3];
-    EXPECT_EQ(0x2028201, item2.mField.getField());
-    EXPECT_EQ(Type::INT, item2.mValue.getType());
-    EXPECT_EQ(2000, item2.mValue.int_value);
-
-    const FieldValue& item3 = event1.getValues()[4];
-    EXPECT_EQ(0x2028282, item3.mField.getField());
-    EXPECT_EQ(Type::STRING, item3.mValue.getType());
-    EXPECT_EQ("tag2", item3.mValue.str_value);
-
-    const FieldValue& item5 = event1.getValues()[5];
-    EXPECT_EQ(0x30000, item5.mField.getField());
-    EXPECT_EQ(Type::INT, item5.mValue.getType());
-    EXPECT_EQ(10, item5.mValue.int_value);
-
-    const FieldValue& item6 = event1.getValues()[6];
-    EXPECT_EQ(0x40000, item6.mField.getField());
-    EXPECT_EQ(Type::LONG, item6.mValue.getType());
-    EXPECT_EQ((int64_t)20, item6.mValue.long_value);
-
-    const FieldValue& item7 = event1.getValues()[7];
-    EXPECT_EQ(0x50000, item7.mField.getField());
-    EXPECT_EQ(Type::FLOAT, item7.mValue.getType());
-    EXPECT_EQ((float)1.1, item7.mValue.float_value);
-}
-
-TEST(LogEventTest, TestKeyValuePairsEvent) {
-    std::map<int32_t, int32_t> int_map;
-    std::map<int32_t, int64_t> long_map;
-    std::map<int32_t, std::string> string_map;
-    std::map<int32_t, float> float_map;
-
-    int_map[11] = 123;
-    int_map[22] = 345;
-
-    long_map[33] = 678L;
-    long_map[44] = 890L;
-
-    string_map[1] = "test2";
-    string_map[2] = "test1";
-
-    float_map[111] = 2.2f;
-    float_map[222] = 1.1f;
-
-    LogEvent event1(83, 2000, 2001, 10001, int_map, long_map, string_map, float_map);
-    event1.init();
-
-    EXPECT_EQ(83, event1.GetTagId());
-    EXPECT_EQ((int64_t)2000, event1.GetLogdTimestampNs());
-    EXPECT_EQ((int64_t)2001, event1.GetElapsedTimestampNs());
-    EXPECT_EQ((int64_t)10001, event1.GetUid());
-
-    const auto& items = event1.getValues();
-    EXPECT_EQ((size_t)17, items.size());
-
-    const FieldValue& item0 = event1.getValues()[0];
-    EXPECT_EQ(0x00010000, item0.mField.getField());
-    EXPECT_EQ(Type::INT, item0.mValue.getType());
-    EXPECT_EQ(10001, item0.mValue.int_value);
-
-    const FieldValue& item1 = event1.getValues()[1];
-    EXPECT_EQ(0x2020101, item1.mField.getField());
-    EXPECT_EQ(Type::INT, item1.mValue.getType());
-    EXPECT_EQ(11, item1.mValue.int_value);
-
-    const FieldValue& item2 = event1.getValues()[2];
-    EXPECT_EQ(0x2020182, item2.mField.getField());
-    EXPECT_EQ(Type::INT, item2.mValue.getType());
-    EXPECT_EQ(123, item2.mValue.int_value);
-
-    const FieldValue& item3 = event1.getValues()[3];
-    EXPECT_EQ(0x2020201, item3.mField.getField());
-    EXPECT_EQ(Type::INT, item3.mValue.getType());
-    EXPECT_EQ(22, item3.mValue.int_value);
-
-    const FieldValue& item4 = event1.getValues()[4];
-    EXPECT_EQ(0x2020282, item4.mField.getField());
-    EXPECT_EQ(Type::INT, item4.mValue.getType());
-    EXPECT_EQ(345, item4.mValue.int_value);
-
-    const FieldValue& item5 = event1.getValues()[5];
-    EXPECT_EQ(0x2020301, item5.mField.getField());
-    EXPECT_EQ(Type::INT, item5.mValue.getType());
-    EXPECT_EQ(33, item5.mValue.int_value);
-
-    const FieldValue& item6 = event1.getValues()[6];
-    EXPECT_EQ(0x2020383, item6.mField.getField());
-    EXPECT_EQ(Type::LONG, item6.mValue.getType());
-    EXPECT_EQ(678L, item6.mValue.long_value);
-
-    const FieldValue& item7 = event1.getValues()[7];
-    EXPECT_EQ(0x2020401, item7.mField.getField());
-    EXPECT_EQ(Type::INT, item7.mValue.getType());
-    EXPECT_EQ(44, item7.mValue.int_value);
-
-    const FieldValue& item8 = event1.getValues()[8];
-    EXPECT_EQ(0x2020483, item8.mField.getField());
-    EXPECT_EQ(Type::LONG, item8.mValue.getType());
-    EXPECT_EQ(890L, item8.mValue.long_value);
-
-    const FieldValue& item9 = event1.getValues()[9];
-    EXPECT_EQ(0x2020501, item9.mField.getField());
-    EXPECT_EQ(Type::INT, item9.mValue.getType());
-    EXPECT_EQ(1, item9.mValue.int_value);
-
-    const FieldValue& item10 = event1.getValues()[10];
-    EXPECT_EQ(0x2020584, item10.mField.getField());
-    EXPECT_EQ(Type::STRING, item10.mValue.getType());
-    EXPECT_EQ("test2", item10.mValue.str_value);
-
-    const FieldValue& item11 = event1.getValues()[11];
-    EXPECT_EQ(0x2020601, item11.mField.getField());
-    EXPECT_EQ(Type::INT, item11.mValue.getType());
-    EXPECT_EQ(2, item11.mValue.int_value);
-
-    const FieldValue& item12 = event1.getValues()[12];
-    EXPECT_EQ(0x2020684, item12.mField.getField());
-    EXPECT_EQ(Type::STRING, item12.mValue.getType());
-    EXPECT_EQ("test1", item12.mValue.str_value);
-
-    const FieldValue& item13 = event1.getValues()[13];
-    EXPECT_EQ(0x2020701, item13.mField.getField());
-    EXPECT_EQ(Type::INT, item13.mValue.getType());
-    EXPECT_EQ(111, item13.mValue.int_value);
-
-    const FieldValue& item14 = event1.getValues()[14];
-    EXPECT_EQ(0x2020785, item14.mField.getField());
-    EXPECT_EQ(Type::FLOAT, item14.mValue.getType());
-    EXPECT_EQ(2.2f, item14.mValue.float_value);
-
-    const FieldValue& item15 = event1.getValues()[15];
-    EXPECT_EQ(0x2028801, item15.mField.getField());
-    EXPECT_EQ(Type::INT, item15.mValue.getType());
-    EXPECT_EQ(222, item15.mValue.int_value);
-
-    const FieldValue& item16 = event1.getValues()[16];
-    EXPECT_EQ(0x2028885, item16.mField.getField());
-    EXPECT_EQ(Type::FLOAT, item16.mValue.getType());
-    EXPECT_EQ(1.1f, item16.mValue.float_value);
-}
-
-TEST(LogEventTest, TestBinaryFieldAtom) {
-    Atom launcherAtom;
-    auto launcher_event = launcherAtom.mutable_launcher_event();
-    launcher_event->set_action(stats::launcher::LauncherAction::LONGPRESS);
-    launcher_event->set_src_state(stats::launcher::LauncherState::OVERVIEW);
-    launcher_event->set_dst_state(stats::launcher::LauncherState::ALLAPPS);
-
-    auto extension = launcher_event->mutable_extension();
-
-    auto src_target = extension->add_src_target();
-    src_target->set_type(stats::launcher::LauncherTarget_Type_ITEM_TYPE);
-    src_target->set_item(stats::launcher::LauncherTarget_Item_FOLDER_ICON);
-
-    auto dst_target = extension->add_dst_target();
-    dst_target->set_type(stats::launcher::LauncherTarget_Type_ITEM_TYPE);
-    dst_target->set_item(stats::launcher::LauncherTarget_Item_WIDGET);
-
-    string extension_str;
-    extension->SerializeToString(&extension_str);
-
-    LogEvent event1(Atom::kLauncherEventFieldNumber, 1000);
-
-    event1.write((int32_t)stats::launcher::LauncherAction::LONGPRESS);
-    event1.write((int32_t)stats::launcher::LauncherState::OVERVIEW);
-    event1.write((int64_t)stats::launcher::LauncherState::ALLAPPS);
-    event1.writeBytes(extension_str);
-    event1.init();
-
-    ProtoOutputStream proto;
-    event1.ToProto(proto);
-
-    std::vector<uint8_t> outData;
-    outData.resize(proto.size());
-    size_t pos = 0;
-    sp<ProtoReader> reader = proto.data();
-    while (reader->readBuffer() != NULL) {
-        size_t toRead = reader->currentToRead();
-        std::memcpy(&(outData[pos]), reader->readBuffer(), toRead);
-        pos += toRead;
-        reader->move(toRead);
-    }
-
-    std::string result_str(outData.begin(), outData.end());
-    std::string orig_str;
-    launcherAtom.SerializeToString(&orig_str);
-
-    EXPECT_EQ(orig_str, result_str);
-}
-
-TEST(LogEventTest, TestBinaryFieldAtom_empty) {
-    Atom launcherAtom;
-    auto launcher_event = launcherAtom.mutable_launcher_event();
-    launcher_event->set_action(stats::launcher::LauncherAction::LONGPRESS);
-    launcher_event->set_src_state(stats::launcher::LauncherState::OVERVIEW);
-    launcher_event->set_dst_state(stats::launcher::LauncherState::ALLAPPS);
-
-    // empty string.
-    string extension_str;
-
-    LogEvent event1(Atom::kLauncherEventFieldNumber, 1000);
-
-    event1.write((int32_t)stats::launcher::LauncherAction::LONGPRESS);
-    event1.write((int32_t)stats::launcher::LauncherState::OVERVIEW);
-    event1.write((int64_t)stats::launcher::LauncherState::ALLAPPS);
-    event1.writeBytes(extension_str);
-    event1.init();
-
-    ProtoOutputStream proto;
-    event1.ToProto(proto);
-
-    std::vector<uint8_t> outData;
-    outData.resize(proto.size());
-    size_t pos = 0;
-    sp<ProtoReader> reader = proto.data();
-    while (reader->readBuffer() != NULL) {
-        size_t toRead = reader->currentToRead();
-        std::memcpy(&(outData[pos]), reader->readBuffer(), toRead);
-        pos += toRead;
-        reader->move(toRead);
-    }
-
-    std::string result_str(outData.begin(), outData.end());
-    std::string orig_str;
-    launcherAtom.SerializeToString(&orig_str);
-
-    EXPECT_EQ(orig_str, result_str);
-}
-
-TEST(LogEventTest, TestWriteExperimentIdsToProto) {
-    std::vector<int64_t> expIds;
-    expIds.push_back(5038);
-    std::vector<uint8_t> proto;
-
-    writeExperimentIdsToProto(expIds, &proto);
-
-    EXPECT_EQ(proto.size(), 3);
-    // Proto wire format for field ID 1, varint
-    EXPECT_EQ(proto[0], 0x08);
-    // varint of 5038, 2 bytes long
-    EXPECT_EQ(proto[1], 0xae);
-    EXPECT_EQ(proto[2], 0x27);
-}
-#endif // NEW_ENCODING_SCHEME
-
-
 }  // namespace statsd
 }  // namespace os
 }  // namespace android
diff --git a/cmds/statsd/tests/StatsLogProcessor_test.cpp b/cmds/statsd/tests/StatsLogProcessor_test.cpp
index 69e11ed..81d6f72 100644
--- a/cmds/statsd/tests/StatsLogProcessor_test.cpp
+++ b/cmds/statsd/tests/StatsLogProcessor_test.cpp
@@ -32,6 +32,8 @@
 
 using namespace android;
 using namespace testing;
+using ::ndk::SharedRefBase;
+using std::shared_ptr;
 
 namespace android {
 namespace os {
@@ -49,10 +51,12 @@
     MockMetricsManager()
         : MetricsManager(ConfigKey(1, 12345), StatsdConfig(), 1000, 1000, new UidMap(),
                          new StatsPullerManager(),
-                         new AlarmMonitor(10, [](const sp<IStatsCompanionService>&, int64_t) {},
-                                          [](const sp<IStatsCompanionService>&) {}),
-                         new AlarmMonitor(10, [](const sp<IStatsCompanionService>&, int64_t) {},
-                                          [](const sp<IStatsCompanionService>&) {})) {
+                         new AlarmMonitor(10,
+                                          [](const shared_ptr<IStatsCompanionService>&, int64_t) {},
+                                          [](const shared_ptr<IStatsCompanionService>&) {}),
+                         new AlarmMonitor(10,
+                                          [](const shared_ptr<IStatsCompanionService>&, int64_t) {},
+                                          [](const shared_ptr<IStatsCompanionService>&) {})) {
     }
 
     MOCK_METHOD0(byteSize, size_t());
@@ -249,1415 +253,1416 @@
     EXPECT_EQ(2, report.annotation(0).field_int32());
 }
 
-TEST(StatsLogProcessorTest, TestOnDumpReportEraseData) {
-    // Setup a simple config.
-    StatsdConfig config;
-    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
-    auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
-    *config.add_atom_matcher() = wakelockAcquireMatcher;
-
-    auto countMetric = config.add_count_metric();
-    countMetric->set_id(123456);
-    countMetric->set_what(wakelockAcquireMatcher.id());
-    countMetric->set_bucket(FIVE_MINUTES);
-
-    ConfigKey cfgKey;
-    sp<StatsLogProcessor> processor = CreateStatsLogProcessor(1, 1, config, cfgKey);
-
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
-    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 2);
-    processor->OnLogEvent(event.get());
-
-    vector<uint8_t> bytes;
-    ConfigMetricsReportList output;
-
-    // Dump report WITHOUT erasing data.
-    processor->onDumpReport(cfgKey, 3, true, false /* Do NOT erase data. */, ADB_DUMP, FAST, &bytes);
-    output.ParseFromArray(bytes.data(), bytes.size());
-    EXPECT_EQ(output.reports_size(), 1);
-    EXPECT_EQ(output.reports(0).metrics_size(), 1);
-    EXPECT_EQ(output.reports(0).metrics(0).count_metrics().data_size(), 1);
-
-    // Dump report WITH erasing data. There should be data since we didn't previously erase it.
-    processor->onDumpReport(cfgKey, 4, true, true /* DO erase data. */, ADB_DUMP, FAST, &bytes);
-    output.ParseFromArray(bytes.data(), bytes.size());
-    EXPECT_EQ(output.reports_size(), 1);
-    EXPECT_EQ(output.reports(0).metrics_size(), 1);
-    EXPECT_EQ(output.reports(0).metrics(0).count_metrics().data_size(), 1);
-
-    // Dump report again. There should be no data since we erased it.
-    processor->onDumpReport(cfgKey, 5, true, true /* DO erase data. */, ADB_DUMP, FAST, &bytes);
-    output.ParseFromArray(bytes.data(), bytes.size());
-    // We don't care whether statsd has a report, as long as it has no count metrics in it.
-    bool noData = output.reports_size() == 0
-            || output.reports(0).metrics_size() == 0
-            || output.reports(0).metrics(0).count_metrics().data_size() == 0;
-    EXPECT_TRUE(noData);
-}
-
-TEST(StatsLogProcessorTest, TestActiveConfigMetricDiskWriteRead) {
-    int uid = 1111;
-
-    // Setup a simple config, no activation
-    StatsdConfig config1;
-    int64_t cfgId1 = 12341;
-    config1.set_id(cfgId1);
-    config1.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
-    auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
-    *config1.add_atom_matcher() = wakelockAcquireMatcher;
-
-    long metricId1 = 1234561;
-    long metricId2 = 1234562;
-    auto countMetric1 = config1.add_count_metric();
-    countMetric1->set_id(metricId1);
-    countMetric1->set_what(wakelockAcquireMatcher.id());
-    countMetric1->set_bucket(FIVE_MINUTES);
-
-    auto countMetric2 = config1.add_count_metric();
-    countMetric2->set_id(metricId2);
-    countMetric2->set_what(wakelockAcquireMatcher.id());
-    countMetric2->set_bucket(FIVE_MINUTES);
-
-    ConfigKey cfgKey1(uid, cfgId1);
-
-    // Add another config, with two metrics, one with activation
-    StatsdConfig config2;
-    int64_t cfgId2 = 12342;
-    config2.set_id(cfgId2);
-    config2.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
-    *config2.add_atom_matcher() = wakelockAcquireMatcher;
-
-    long metricId3 = 1234561;
-    long metricId4 = 1234562;
-
-    auto countMetric3 = config2.add_count_metric();
-    countMetric3->set_id(metricId3);
-    countMetric3->set_what(wakelockAcquireMatcher.id());
-    countMetric3->set_bucket(FIVE_MINUTES);
-
-    auto countMetric4 = config2.add_count_metric();
-    countMetric4->set_id(metricId4);
-    countMetric4->set_what(wakelockAcquireMatcher.id());
-    countMetric4->set_bucket(FIVE_MINUTES);
-
-    auto metric3Activation = config2.add_metric_activation();
-    metric3Activation->set_metric_id(metricId3);
-    metric3Activation->set_activation_type(ACTIVATE_IMMEDIATELY);
-    auto metric3ActivationTrigger = metric3Activation->add_event_activation();
-    metric3ActivationTrigger->set_atom_matcher_id(wakelockAcquireMatcher.id());
-    metric3ActivationTrigger->set_ttl_seconds(100);
-
-    ConfigKey cfgKey2(uid, cfgId2);
-
-    // Add another config, with two metrics, both with activations
-    StatsdConfig config3;
-    int64_t cfgId3 = 12343;
-    config3.set_id(cfgId3);
-    config3.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
-    *config3.add_atom_matcher() = wakelockAcquireMatcher;
-
-    long metricId5 = 1234565;
-    long metricId6 = 1234566;
-    auto countMetric5 = config3.add_count_metric();
-    countMetric5->set_id(metricId5);
-    countMetric5->set_what(wakelockAcquireMatcher.id());
-    countMetric5->set_bucket(FIVE_MINUTES);
-
-    auto countMetric6 = config3.add_count_metric();
-    countMetric6->set_id(metricId6);
-    countMetric6->set_what(wakelockAcquireMatcher.id());
-    countMetric6->set_bucket(FIVE_MINUTES);
-
-    auto metric5Activation = config3.add_metric_activation();
-    metric5Activation->set_metric_id(metricId5);
-    metric5Activation->set_activation_type(ACTIVATE_IMMEDIATELY);
-    auto metric5ActivationTrigger = metric5Activation->add_event_activation();
-    metric5ActivationTrigger->set_atom_matcher_id(wakelockAcquireMatcher.id());
-    metric5ActivationTrigger->set_ttl_seconds(100);
-
-    auto metric6Activation = config3.add_metric_activation();
-    metric6Activation->set_metric_id(metricId6);
-    metric6Activation->set_activation_type(ACTIVATE_IMMEDIATELY);
-    auto metric6ActivationTrigger = metric6Activation->add_event_activation();
-    metric6ActivationTrigger->set_atom_matcher_id(wakelockAcquireMatcher.id());
-    metric6ActivationTrigger->set_ttl_seconds(200);
-
-    ConfigKey cfgKey3(uid, cfgId3);
-
-    sp<UidMap> m = new UidMap();
-    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
-    sp<AlarmMonitor> anomalyAlarmMonitor;
-    sp<AlarmMonitor> subscriberAlarmMonitor;
-    vector<int64_t> activeConfigsBroadcast;
-
-    long timeBase1 = 1;
-    int broadcastCount = 0;
-    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
-            timeBase1, [](const ConfigKey& key) { return true; },
-            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
-                    const vector<int64_t>& activeConfigs) {
-                broadcastCount++;
-                EXPECT_EQ(broadcastUid, uid);
-                activeConfigsBroadcast.clear();
-                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
-                        activeConfigs.begin(), activeConfigs.end());
-                return true;
-            });
-
-    processor.OnConfigUpdated(1, cfgKey1, config1);
-    processor.OnConfigUpdated(2, cfgKey2, config2);
-    processor.OnConfigUpdated(3, cfgKey3, config3);
-
-    EXPECT_EQ(3, processor.mMetricsManagers.size());
-
-    // Expect the first config and both metrics in it to be active.
-    auto it = processor.mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor.mMetricsManagers.end());
-    auto& metricsManager1 = it->second;
-    EXPECT_TRUE(metricsManager1->isActive());
-
-    auto metricIt = metricsManager1->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId1) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
-    auto& metricProducer1 = *metricIt;
-    EXPECT_TRUE(metricProducer1->isActive());
-
-    metricIt = metricsManager1->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId2) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
-    auto& metricProducer2 = *metricIt;
-    EXPECT_TRUE(metricProducer2->isActive());
-
-    // Expect config 2 to be active. Metric 3 shouldn't be active, metric 4 should be active.
-    it = processor.mMetricsManagers.find(cfgKey2);
-    EXPECT_TRUE(it != processor.mMetricsManagers.end());
-    auto& metricsManager2 = it->second;
-    EXPECT_TRUE(metricsManager2->isActive());
-
-    metricIt = metricsManager2->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager2->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId3) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager2->mAllMetricProducers.end());
-    auto& metricProducer3 = *metricIt;
-    EXPECT_FALSE(metricProducer3->isActive());
-
-    metricIt = metricsManager2->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager2->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId4) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager2->mAllMetricProducers.end());
-    auto& metricProducer4 = *metricIt;
-    EXPECT_TRUE(metricProducer4->isActive());
-
-    // Expect the third config and both metrics in it to be inactive.
-    it = processor.mMetricsManagers.find(cfgKey3);
-    EXPECT_TRUE(it != processor.mMetricsManagers.end());
-    auto& metricsManager3 = it->second;
-    EXPECT_FALSE(metricsManager3->isActive());
-
-    metricIt = metricsManager3->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager2->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId5) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager3->mAllMetricProducers.end());
-    auto& metricProducer5 = *metricIt;
-    EXPECT_FALSE(metricProducer5->isActive());
-
-    metricIt = metricsManager3->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager3->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId6) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager3->mAllMetricProducers.end());
-    auto& metricProducer6 = *metricIt;
-    EXPECT_FALSE(metricProducer6->isActive());
-
-    // No broadcast for active configs should have happened yet.
-    EXPECT_EQ(broadcastCount, 0);
-
-    // Activate all 3 metrics that were not active.
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
-    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 100 + timeBase1);
-    processor.OnLogEvent(event.get());
-
-    // Assert that all 3 configs are active.
-    EXPECT_TRUE(metricsManager1->isActive());
-    EXPECT_TRUE(metricsManager2->isActive());
-    EXPECT_TRUE(metricsManager3->isActive());
-
-    // A broadcast should have happened, and all 3 configs should be active in the broadcast.
-    EXPECT_EQ(broadcastCount, 1);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 3);
-    EXPECT_TRUE(std::find(activeConfigsBroadcast.begin(), activeConfigsBroadcast.end(), cfgId1)
-            != activeConfigsBroadcast.end());
-    EXPECT_TRUE(std::find(activeConfigsBroadcast.begin(), activeConfigsBroadcast.end(), cfgId2)
-            != activeConfigsBroadcast.end());
-    EXPECT_TRUE(std::find(activeConfigsBroadcast.begin(), activeConfigsBroadcast.end(), cfgId3)
-            != activeConfigsBroadcast.end());
-
-    // When we shut down, metrics 3 & 5 have 100ns remaining, metric 6 has 100s + 100ns.
-    int64_t shutDownTime = timeBase1 + 100 * NS_PER_SEC;
-    processor.SaveActiveConfigsToDisk(shutDownTime);
-    const int64_t ttl3 = event->GetElapsedTimestampNs() +
-            metric3ActivationTrigger->ttl_seconds() * NS_PER_SEC - shutDownTime;
-    const int64_t ttl5 = event->GetElapsedTimestampNs() +
-            metric5ActivationTrigger->ttl_seconds() * NS_PER_SEC - shutDownTime;
-    const int64_t ttl6 = event->GetElapsedTimestampNs() +
-            metric6ActivationTrigger->ttl_seconds() * NS_PER_SEC - shutDownTime;
-
-    // Create a second StatsLogProcessor and push the same 3 configs.
-    long timeBase2 = 1000;
-    sp<StatsLogProcessor> processor2 =
-            CreateStatsLogProcessor(timeBase2, timeBase2, config1, cfgKey1);
-    processor2->OnConfigUpdated(timeBase2, cfgKey2, config2);
-    processor2->OnConfigUpdated(timeBase2, cfgKey3, config3);
-
-    EXPECT_EQ(3, processor2->mMetricsManagers.size());
-
-    // First config and both metrics are active.
-    it = processor2->mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor2->mMetricsManagers.end());
-    auto& metricsManager1001 = it->second;
-    EXPECT_TRUE(metricsManager1001->isActive());
-
-    metricIt = metricsManager1001->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId1) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
-    auto& metricProducer1001 = *metricIt;
-    EXPECT_TRUE(metricProducer1001->isActive());
-
-    metricIt = metricsManager1001->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId2) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
-    auto& metricProducer1002 = *metricIt;
-    EXPECT_TRUE(metricProducer1002->isActive());
-
-    // Second config is active. Metric 3 is inactive, metric 4 is active.
-    it = processor2->mMetricsManagers.find(cfgKey2);
-    EXPECT_TRUE(it != processor2->mMetricsManagers.end());
-    auto& metricsManager1002 = it->second;
-    EXPECT_TRUE(metricsManager1002->isActive());
-
-    metricIt = metricsManager1002->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1002->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId3) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1002->mAllMetricProducers.end());
-    auto& metricProducer1003 = *metricIt;
-    EXPECT_FALSE(metricProducer1003->isActive());
-
-    metricIt = metricsManager1002->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1002->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId4) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1002->mAllMetricProducers.end());
-    auto& metricProducer1004 = *metricIt;
-    EXPECT_TRUE(metricProducer1004->isActive());
-
-    // Config 3 is inactive. both metrics are inactive.
-    it = processor2->mMetricsManagers.find(cfgKey3);
-    EXPECT_TRUE(it != processor2->mMetricsManagers.end());
-    auto& metricsManager1003 = it->second;
-    EXPECT_FALSE(metricsManager1003->isActive());
-    EXPECT_EQ(2, metricsManager1003->mAllMetricProducers.size());
-
-    metricIt = metricsManager1003->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1002->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId5) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1003->mAllMetricProducers.end());
-    auto& metricProducer1005 = *metricIt;
-    EXPECT_FALSE(metricProducer1005->isActive());
-
-    metricIt = metricsManager1003->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1003->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId6) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1003->mAllMetricProducers.end());
-    auto& metricProducer1006 = *metricIt;
-    EXPECT_FALSE(metricProducer1006->isActive());
-
-    // Assert that all 3 metrics with activation are inactive and that the ttls were properly set.
-    EXPECT_FALSE(metricProducer1003->isActive());
-    const auto& activation1003 = metricProducer1003->mEventActivationMap.begin()->second;
-    EXPECT_EQ(100 * NS_PER_SEC, activation1003->ttl_ns);
-    EXPECT_EQ(0, activation1003->start_ns);
-    EXPECT_FALSE(metricProducer1005->isActive());
-    const auto& activation1005 = metricProducer1005->mEventActivationMap.begin()->second;
-    EXPECT_EQ(100 * NS_PER_SEC, activation1005->ttl_ns);
-    EXPECT_EQ(0, activation1005->start_ns);
-    EXPECT_FALSE(metricProducer1006->isActive());
-    const auto& activation1006 = metricProducer1006->mEventActivationMap.begin()->second;
-    EXPECT_EQ(200 * NS_PER_SEC, activation1006->ttl_ns);
-    EXPECT_EQ(0, activation1006->start_ns);
-
-    processor2->LoadActiveConfigsFromDisk();
-
-    // After loading activations from disk, assert that all 3 metrics are active.
-    EXPECT_TRUE(metricProducer1003->isActive());
-    EXPECT_EQ(timeBase2 + ttl3 - activation1003->ttl_ns, activation1003->start_ns);
-    EXPECT_TRUE(metricProducer1005->isActive());
-    EXPECT_EQ(timeBase2 + ttl5 - activation1005->ttl_ns, activation1005->start_ns);
-    EXPECT_TRUE(metricProducer1006->isActive());
-    EXPECT_EQ(timeBase2 + ttl6 - activation1006->ttl_ns, activation1003->start_ns);
-
-    // Make sure no more broadcasts have happened.
-    EXPECT_EQ(broadcastCount, 1);
-}
-
-TEST(StatsLogProcessorTest, TestActivationOnBoot) {
-    int uid = 1111;
-
-    StatsdConfig config1;
-    config1.set_id(12341);
-    config1.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
-    auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
-    *config1.add_atom_matcher() = wakelockAcquireMatcher;
-
-    long metricId1 = 1234561;
-    long metricId2 = 1234562;
-    auto countMetric1 = config1.add_count_metric();
-    countMetric1->set_id(metricId1);
-    countMetric1->set_what(wakelockAcquireMatcher.id());
-    countMetric1->set_bucket(FIVE_MINUTES);
-
-    auto countMetric2 = config1.add_count_metric();
-    countMetric2->set_id(metricId2);
-    countMetric2->set_what(wakelockAcquireMatcher.id());
-    countMetric2->set_bucket(FIVE_MINUTES);
-
-    auto metric1Activation = config1.add_metric_activation();
-    metric1Activation->set_metric_id(metricId1);
-    metric1Activation->set_activation_type(ACTIVATE_ON_BOOT);
-    auto metric1ActivationTrigger = metric1Activation->add_event_activation();
-    metric1ActivationTrigger->set_atom_matcher_id(wakelockAcquireMatcher.id());
-    metric1ActivationTrigger->set_ttl_seconds(100);
-
-    ConfigKey cfgKey1(uid, 12341);
-    long timeBase1 = 1;
-    sp<StatsLogProcessor> processor =
-            CreateStatsLogProcessor(timeBase1, timeBase1, config1, cfgKey1);
-
-    EXPECT_EQ(1, processor->mMetricsManagers.size());
-    auto it = processor->mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor->mMetricsManagers.end());
-    auto& metricsManager1 = it->second;
-    EXPECT_TRUE(metricsManager1->isActive());
-
-    auto metricIt = metricsManager1->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId1) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
-    auto& metricProducer1 = *metricIt;
-    EXPECT_FALSE(metricProducer1->isActive());
-
-    metricIt = metricsManager1->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId2) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
-    auto& metricProducer2 = *metricIt;
-    EXPECT_TRUE(metricProducer2->isActive());
-
-    const auto& activation1 = metricProducer1->mEventActivationMap.begin()->second;
-    EXPECT_EQ(100 * NS_PER_SEC, activation1->ttl_ns);
-    EXPECT_EQ(0, activation1->start_ns);
-    EXPECT_EQ(kNotActive, activation1->state);
-
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
-    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 100 + timeBase1);
-    processor->OnLogEvent(event.get());
-
-    EXPECT_FALSE(metricProducer1->isActive());
-    EXPECT_EQ(0, activation1->start_ns);
-    EXPECT_EQ(kActiveOnBoot, activation1->state);
-
-    int64_t shutDownTime = timeBase1 + 100 * NS_PER_SEC;
-    processor->SaveActiveConfigsToDisk(shutDownTime);
-    EXPECT_FALSE(metricProducer1->isActive());
-    const int64_t ttl1 = metric1ActivationTrigger->ttl_seconds() * NS_PER_SEC;
-
-    long timeBase2 = 1000;
-    sp<StatsLogProcessor> processor2 =
-            CreateStatsLogProcessor(timeBase2, timeBase2, config1, cfgKey1);
-
-    EXPECT_EQ(1, processor2->mMetricsManagers.size());
-    it = processor2->mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor2->mMetricsManagers.end());
-    auto& metricsManager1001 = it->second;
-    EXPECT_TRUE(metricsManager1001->isActive());
-
-    metricIt = metricsManager1001->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId1) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
-    auto& metricProducer1001 = *metricIt;
-    EXPECT_FALSE(metricProducer1001->isActive());
-
-    metricIt = metricsManager1001->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId2) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
-    auto& metricProducer1002 = *metricIt;
-    EXPECT_TRUE(metricProducer1002->isActive());
-
-    const auto& activation1001 = metricProducer1001->mEventActivationMap.begin()->second;
-    EXPECT_EQ(100 * NS_PER_SEC, activation1001->ttl_ns);
-    EXPECT_EQ(0, activation1001->start_ns);
-    EXPECT_EQ(kNotActive, activation1001->state);
-
-    processor2->LoadActiveConfigsFromDisk();
-
-    EXPECT_TRUE(metricProducer1001->isActive());
-    EXPECT_EQ(timeBase2 + ttl1 - activation1001->ttl_ns, activation1001->start_ns);
-    EXPECT_EQ(kActive, activation1001->state);
-}
-
-TEST(StatsLogProcessorTest, TestActivationOnBootMultipleActivations) {
-    int uid = 1111;
-
-    // Create config with 2 metrics:
-    // Metric 1: Activate on boot with 2 activations
-    // Metric 2: Always active
-    StatsdConfig config1;
-    config1.set_id(12341);
-    config1.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
-    auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
-    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
-    *config1.add_atom_matcher() = wakelockAcquireMatcher;
-    *config1.add_atom_matcher() = screenOnMatcher;
-
-    long metricId1 = 1234561;
-    long metricId2 = 1234562;
-
-    auto countMetric1 = config1.add_count_metric();
-    countMetric1->set_id(metricId1);
-    countMetric1->set_what(wakelockAcquireMatcher.id());
-    countMetric1->set_bucket(FIVE_MINUTES);
-
-    auto countMetric2 = config1.add_count_metric();
-    countMetric2->set_id(metricId2);
-    countMetric2->set_what(wakelockAcquireMatcher.id());
-    countMetric2->set_bucket(FIVE_MINUTES);
-
-    auto metric1Activation = config1.add_metric_activation();
-    metric1Activation->set_metric_id(metricId1);
-    metric1Activation->set_activation_type(ACTIVATE_ON_BOOT);
-    auto metric1ActivationTrigger1 = metric1Activation->add_event_activation();
-    metric1ActivationTrigger1->set_atom_matcher_id(wakelockAcquireMatcher.id());
-    metric1ActivationTrigger1->set_ttl_seconds(100);
-    auto metric1ActivationTrigger2 = metric1Activation->add_event_activation();
-    metric1ActivationTrigger2->set_atom_matcher_id(screenOnMatcher.id());
-    metric1ActivationTrigger2->set_ttl_seconds(200);
-
-    ConfigKey cfgKey1(uid, 12341);
-    long timeBase1 = 1;
-    sp<StatsLogProcessor> processor =
-            CreateStatsLogProcessor(timeBase1, timeBase1, config1, cfgKey1);
-
-    // Metric 1 is not active.
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_EQ(1, processor->mMetricsManagers.size());
-    auto it = processor->mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor->mMetricsManagers.end());
-    auto& metricsManager1 = it->second;
-    EXPECT_TRUE(metricsManager1->isActive());
-
-    auto metricIt = metricsManager1->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId1) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
-    auto& metricProducer1 = *metricIt;
-    EXPECT_FALSE(metricProducer1->isActive());
-
-    metricIt = metricsManager1->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId2) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
-    auto& metricProducer2 = *metricIt;
-    EXPECT_TRUE(metricProducer2->isActive());
-
-    int i = 0;
-    for (; i < metricsManager1->mAllAtomMatchers.size(); i++) {
-        if (metricsManager1->mAllAtomMatchers[i]->getId() ==
-                metric1ActivationTrigger1->atom_matcher_id()) {
-            break;
-        }
-    }
-    const auto& activation1 = metricProducer1->mEventActivationMap.at(i);
-    EXPECT_EQ(100 * NS_PER_SEC, activation1->ttl_ns);
-    EXPECT_EQ(0, activation1->start_ns);
-    EXPECT_EQ(kNotActive, activation1->state);
-
-    i = 0;
-    for (; i < metricsManager1->mAllAtomMatchers.size(); i++) {
-        if (metricsManager1->mAllAtomMatchers[i]->getId() ==
-                metric1ActivationTrigger2->atom_matcher_id()) {
-            break;
-        }
-    }
-    const auto& activation2 = metricProducer1->mEventActivationMap.at(i);
-    EXPECT_EQ(200 * NS_PER_SEC, activation2->ttl_ns);
-    EXPECT_EQ(0, activation2->start_ns);
-    EXPECT_EQ(kNotActive, activation2->state);
-    // }}}------------------------------------------------------------------------------
-
-    // Trigger Activation 1 for Metric 1
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
-    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 100 + timeBase1);
-    processor->OnLogEvent(event.get());
-
-    // Metric 1 is not active; Activation 1 set to kActiveOnBoot
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_FALSE(metricProducer1->isActive());
-    EXPECT_EQ(0, activation1->start_ns);
-    EXPECT_EQ(kActiveOnBoot, activation1->state);
-    EXPECT_EQ(0, activation2->start_ns);
-    EXPECT_EQ(kNotActive, activation2->state);
-
-    EXPECT_TRUE(metricProducer2->isActive());
-    // }}}-----------------------------------------------------------------------------
-
-    // Simulate shutdown by saving state to disk
-    int64_t shutDownTime = timeBase1 + 100 * NS_PER_SEC;
-    processor->SaveActiveConfigsToDisk(shutDownTime);
-    EXPECT_FALSE(metricProducer1->isActive());
-    int64_t ttl1 = metric1ActivationTrigger1->ttl_seconds() * NS_PER_SEC;
-
-    // Simulate device restarted state by creating new instance of StatsLogProcessor with the
-    // same config.
-    long timeBase2 = 1000;
-    sp<StatsLogProcessor> processor2 =
-            CreateStatsLogProcessor(timeBase2, timeBase2, config1, cfgKey1);
-
-    // Metric 1 is not active.
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_EQ(1, processor2->mMetricsManagers.size());
-    it = processor2->mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor2->mMetricsManagers.end());
-    auto& metricsManager1001 = it->second;
-    EXPECT_TRUE(metricsManager1001->isActive());
-
-    metricIt = metricsManager1001->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId1) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
-    auto& metricProducer1001 = *metricIt;
-    EXPECT_FALSE(metricProducer1001->isActive());
-
-    metricIt = metricsManager1001->mAllMetricProducers.begin();
-    for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId2) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
-    auto& metricProducer1002 = *metricIt;
-    EXPECT_TRUE(metricProducer1002->isActive());
-
-    i = 0;
-    for (; i < metricsManager1001->mAllAtomMatchers.size(); i++) {
-        if (metricsManager1001->mAllAtomMatchers[i]->getId() ==
-                metric1ActivationTrigger1->atom_matcher_id()) {
-            break;
-        }
-    }
-    const auto& activation1001_1 = metricProducer1001->mEventActivationMap.at(i);
-    EXPECT_EQ(100 * NS_PER_SEC, activation1001_1->ttl_ns);
-    EXPECT_EQ(0, activation1001_1->start_ns);
-    EXPECT_EQ(kNotActive, activation1001_1->state);
-
-    i = 0;
-    for (; i < metricsManager1001->mAllAtomMatchers.size(); i++) {
-        if (metricsManager1001->mAllAtomMatchers[i]->getId() ==
-                metric1ActivationTrigger2->atom_matcher_id()) {
-            break;
-        }
-    }
-
-    const auto& activation1001_2 = metricProducer1001->mEventActivationMap.at(i);
-    EXPECT_EQ(200 * NS_PER_SEC, activation1001_2->ttl_ns);
-    EXPECT_EQ(0, activation1001_2->start_ns);
-    EXPECT_EQ(kNotActive, activation1001_2->state);
-    // }}}-----------------------------------------------------------------------------------
-
-    // Load saved state from disk.
-    processor2->LoadActiveConfigsFromDisk();
-
-    // Metric 1 active; Activation 1 is active, Activation 2 is not active
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_TRUE(metricProducer1001->isActive());
-    EXPECT_EQ(timeBase2 + ttl1 - activation1001_1->ttl_ns, activation1001_1->start_ns);
-    EXPECT_EQ(kActive, activation1001_1->state);
-    EXPECT_EQ(0, activation1001_2->start_ns);
-    EXPECT_EQ(kNotActive, activation1001_2->state);
-
-    EXPECT_TRUE(metricProducer1002->isActive());
-    // }}}--------------------------------------------------------------------------------
-
-    // Trigger Activation 2 for Metric 1.
-    auto screenOnEvent = CreateScreenStateChangedEvent(
-            android::view::DISPLAY_STATE_ON,
-            timeBase2 + 200
-    );
-    processor2->OnLogEvent(screenOnEvent.get());
-
-    // Metric 1 active; Activation 1 is active, Activation 2 is set to kActiveOnBoot
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_TRUE(metricProducer1001->isActive());
-    EXPECT_EQ(timeBase2 + ttl1 - activation1001_1->ttl_ns, activation1001_1->start_ns);
-    EXPECT_EQ(kActive, activation1001_1->state);
-    EXPECT_EQ(0, activation1001_2->start_ns);
-    EXPECT_EQ(kActiveOnBoot, activation1001_2->state);
-
-    EXPECT_TRUE(metricProducer1002->isActive());
-    // }}}---------------------------------------------------------------------------
-
-    // Simulate shutdown by saving state to disk
-    shutDownTime = timeBase2 + 50 * NS_PER_SEC;
-    processor2->SaveActiveConfigsToDisk(shutDownTime);
-    EXPECT_TRUE(metricProducer1001->isActive());
-    EXPECT_TRUE(metricProducer1002->isActive());
-    ttl1 = timeBase2 + metric1ActivationTrigger1->ttl_seconds() * NS_PER_SEC - shutDownTime;
-    int64_t ttl2 = metric1ActivationTrigger2->ttl_seconds() * NS_PER_SEC;
-
-    // Simulate device restarted state by creating new instance of StatsLogProcessor with the
-    // same config.
-    long timeBase3 = timeBase2 + 120 * NS_PER_SEC;
-    sp<StatsLogProcessor> processor3 =
-            CreateStatsLogProcessor(timeBase3, timeBase3, config1, cfgKey1);
-
-    // Metric 1 is not active.
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_EQ(1, processor3->mMetricsManagers.size());
-    it = processor3->mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor3->mMetricsManagers.end());
-    auto& metricsManagerTimeBase3 = it->second;
-    EXPECT_TRUE(metricsManagerTimeBase3->isActive());
-
-    metricIt = metricsManagerTimeBase3->mAllMetricProducers.begin();
-    for (; metricIt != metricsManagerTimeBase3->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId1) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManagerTimeBase3->mAllMetricProducers.end());
-    auto& metricProducerTimeBase3_1 = *metricIt;
-    EXPECT_FALSE(metricProducerTimeBase3_1->isActive());
-
-    metricIt = metricsManagerTimeBase3->mAllMetricProducers.begin();
-    for (; metricIt != metricsManagerTimeBase3->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId2) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManagerTimeBase3->mAllMetricProducers.end());
-    auto& metricProducerTimeBase3_2 = *metricIt;
-    EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
-
-    i = 0;
-    for (; i < metricsManagerTimeBase3->mAllAtomMatchers.size(); i++) {
-        if (metricsManagerTimeBase3->mAllAtomMatchers[i]->getId() ==
-                metric1ActivationTrigger1->atom_matcher_id()) {
-            break;
-        }
-    }
-    const auto& activationTimeBase3_1 = metricProducerTimeBase3_1->mEventActivationMap.at(i);
-    EXPECT_EQ(100 * NS_PER_SEC, activationTimeBase3_1->ttl_ns);
-    EXPECT_EQ(0, activationTimeBase3_1->start_ns);
-    EXPECT_EQ(kNotActive, activationTimeBase3_1->state);
-
-    i = 0;
-    for (; i < metricsManagerTimeBase3->mAllAtomMatchers.size(); i++) {
-        if (metricsManagerTimeBase3->mAllAtomMatchers[i]->getId() ==
-                metric1ActivationTrigger2->atom_matcher_id()) {
-            break;
-        }
-    }
-
-    const auto& activationTimeBase3_2 = metricProducerTimeBase3_1->mEventActivationMap.at(i);
-    EXPECT_EQ(200 * NS_PER_SEC, activationTimeBase3_2->ttl_ns);
-    EXPECT_EQ(0, activationTimeBase3_2->start_ns);
-    EXPECT_EQ(kNotActive, activationTimeBase3_2->state);
-
-    EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
-    // }}}----------------------------------------------------------------------------------
-
-    // Load saved state from disk.
-    processor3->LoadActiveConfigsFromDisk();
-
-    // Metric 1 active: Activation 1 is active, Activation 2 is active
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_TRUE(metricProducerTimeBase3_1->isActive());
-    EXPECT_EQ(timeBase3 + ttl1 - activationTimeBase3_1->ttl_ns, activationTimeBase3_1->start_ns);
-    EXPECT_EQ(kActive, activationTimeBase3_1->state);
-    EXPECT_EQ(timeBase3 + ttl2 - activationTimeBase3_2->ttl_ns, activationTimeBase3_2->start_ns);
-    EXPECT_EQ(kActive, activationTimeBase3_2->state);
-
-    EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
-    // }}}-------------------------------------------------------------------------------
-
-    // Trigger Activation 2 for Metric 1 again.
-    screenOnEvent = CreateScreenStateChangedEvent(
-            android::view::DISPLAY_STATE_ON,
-            timeBase3 + 100 * NS_PER_SEC
-    );
-    processor3->OnLogEvent(screenOnEvent.get());
-
-    // Metric 1 active; Activation 1 is not active, Activation 2 is set to active
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_TRUE(metricProducerTimeBase3_1->isActive());
-    EXPECT_EQ(kNotActive, activationTimeBase3_1->state);
-    EXPECT_EQ(timeBase3 + ttl2 - activationTimeBase3_2->ttl_ns, activationTimeBase3_2->start_ns);
-    EXPECT_EQ(kActive, activationTimeBase3_2->state);
-
-    EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
-    // }}}---------------------------------------------------------------------------
-
-    // Simulate shutdown by saving state to disk.
-    shutDownTime = timeBase3 + 500 * NS_PER_SEC;
-    processor3->SaveActiveConfigsToDisk(shutDownTime);
-    EXPECT_TRUE(metricProducer1001->isActive());
-    EXPECT_TRUE(metricProducer1002->isActive());
-    ttl1 = timeBase3 + ttl1 - shutDownTime;
-    ttl2 = timeBase3 + metric1ActivationTrigger2->ttl_seconds() * NS_PER_SEC - shutDownTime;
-
-    // Simulate device restarted state by creating new instance of StatsLogProcessor with the
-    // same config.
-    long timeBase4 = timeBase3 + 600 * NS_PER_SEC;
-    sp<StatsLogProcessor> processor4 =
-            CreateStatsLogProcessor(timeBase4, timeBase4, config1, cfgKey1);
-
-    // Metric 1 is not active.
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_EQ(1, processor4->mMetricsManagers.size());
-    it = processor4->mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor4->mMetricsManagers.end());
-    auto& metricsManagerTimeBase4 = it->second;
-    EXPECT_TRUE(metricsManagerTimeBase4->isActive());
-
-    metricIt = metricsManagerTimeBase4->mAllMetricProducers.begin();
-    for (; metricIt != metricsManagerTimeBase4->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId1) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManagerTimeBase4->mAllMetricProducers.end());
-    auto& metricProducerTimeBase4_1 = *metricIt;
-    EXPECT_FALSE(metricProducerTimeBase4_1->isActive());
-
-    metricIt = metricsManagerTimeBase4->mAllMetricProducers.begin();
-    for (; metricIt != metricsManagerTimeBase4->mAllMetricProducers.end(); metricIt++) {
-        if ((*metricIt)->getMetricId() == metricId2) {
-            break;
-        }
-    }
-    EXPECT_TRUE(metricIt != metricsManagerTimeBase4->mAllMetricProducers.end());
-    auto& metricProducerTimeBase4_2 = *metricIt;
-    EXPECT_TRUE(metricProducerTimeBase4_2->isActive());
-
-    i = 0;
-    for (; i < metricsManagerTimeBase4->mAllAtomMatchers.size(); i++) {
-        if (metricsManagerTimeBase4->mAllAtomMatchers[i]->getId() ==
-                metric1ActivationTrigger1->atom_matcher_id()) {
-            break;
-        }
-    }
-    const auto& activationTimeBase4_1 = metricProducerTimeBase4_1->mEventActivationMap.at(i);
-    EXPECT_EQ(100 * NS_PER_SEC, activationTimeBase4_1->ttl_ns);
-    EXPECT_EQ(0, activationTimeBase4_1->start_ns);
-    EXPECT_EQ(kNotActive, activationTimeBase4_1->state);
-
-    i = 0;
-    for (; i < metricsManagerTimeBase4->mAllAtomMatchers.size(); i++) {
-        if (metricsManagerTimeBase4->mAllAtomMatchers[i]->getId() ==
-                metric1ActivationTrigger2->atom_matcher_id()) {
-            break;
-        }
-    }
-
-    const auto& activationTimeBase4_2 = metricProducerTimeBase4_1->mEventActivationMap.at(i);
-    EXPECT_EQ(200 * NS_PER_SEC, activationTimeBase4_2->ttl_ns);
-    EXPECT_EQ(0, activationTimeBase4_2->start_ns);
-    EXPECT_EQ(kNotActive, activationTimeBase4_2->state);
-
-    EXPECT_TRUE(metricProducerTimeBase4_2->isActive());
-    // }}}----------------------------------------------------------------------------------
-
-    // Load saved state from disk.
-    processor4->LoadActiveConfigsFromDisk();
-
-    // Metric 1 active: Activation 1 is not active, Activation 2 is not active
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_FALSE(metricProducerTimeBase4_1->isActive());
-    EXPECT_EQ(kNotActive, activationTimeBase4_1->state);
-    EXPECT_EQ(kNotActive, activationTimeBase4_2->state);
-
-    EXPECT_TRUE(metricProducerTimeBase4_2->isActive());
-    // }}}-------------------------------------------------------------------------------
-}
-
-TEST(StatsLogProcessorTest, TestActivationOnBootMultipleActivationsDifferentActivationTypes) {
-    int uid = 1111;
-
-    // Create config with 2 metrics:
-    // Metric 1: Activate on boot with 2 activations
-    // Metric 2: Always active
-    StatsdConfig config1;
-    config1.set_id(12341);
-    config1.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
-    auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
-    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
-    *config1.add_atom_matcher() = wakelockAcquireMatcher;
-    *config1.add_atom_matcher() = screenOnMatcher;
-
-    long metricId1 = 1234561;
-    long metricId2 = 1234562;
-
-    auto countMetric1 = config1.add_count_metric();
-    countMetric1->set_id(metricId1);
-    countMetric1->set_what(wakelockAcquireMatcher.id());
-    countMetric1->set_bucket(FIVE_MINUTES);
-
-    auto countMetric2 = config1.add_count_metric();
-    countMetric2->set_id(metricId2);
-    countMetric2->set_what(wakelockAcquireMatcher.id());
-    countMetric2->set_bucket(FIVE_MINUTES);
-
-    auto metric1Activation = config1.add_metric_activation();
-    metric1Activation->set_metric_id(metricId1);
-    metric1Activation->set_activation_type(ACTIVATE_ON_BOOT);
-    auto metric1ActivationTrigger1 = metric1Activation->add_event_activation();
-    metric1ActivationTrigger1->set_atom_matcher_id(wakelockAcquireMatcher.id());
-    metric1ActivationTrigger1->set_ttl_seconds(100);
-    auto metric1ActivationTrigger2 = metric1Activation->add_event_activation();
-    metric1ActivationTrigger2->set_atom_matcher_id(screenOnMatcher.id());
-    metric1ActivationTrigger2->set_ttl_seconds(200);
-    metric1ActivationTrigger2->set_activation_type(ACTIVATE_IMMEDIATELY);
-
-    ConfigKey cfgKey1(uid, 12341);
-    long timeBase1 = 1;
-    sp<StatsLogProcessor> processor1 =
-            CreateStatsLogProcessor(timeBase1, timeBase1, config1, cfgKey1);
-
-    // Metric 1 is not active.
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_EQ(1, processor1->mMetricsManagers.size());
-    auto it = processor1->mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor1->mMetricsManagers.end());
-    auto& metricsManager1 = it->second;
-    EXPECT_TRUE(metricsManager1->isActive());
-
-    EXPECT_EQ(metricsManager1->mAllMetricProducers.size(), 2);
-    // We assume that the index of a MetricProducer within the mAllMetricProducers
-    // array follows the order in which metrics are added to the config.
-    auto& metricProducer1_1 = metricsManager1->mAllMetricProducers[0];
-    EXPECT_EQ(metricProducer1_1->getMetricId(), metricId1);
-    EXPECT_FALSE(metricProducer1_1->isActive());  // inactive due to associated MetricActivation
-
-    auto& metricProducer1_2 = metricsManager1->mAllMetricProducers[1];
-    EXPECT_EQ(metricProducer1_2->getMetricId(), metricId2);
-    EXPECT_TRUE(metricProducer1_2->isActive());
-
-    EXPECT_EQ(metricProducer1_1->mEventActivationMap.size(), 2);
-    // The key in mEventActivationMap is the index of the associated atom matcher. We assume
-    // that matchers are indexed in the order that they are added to the config.
-    const auto& activation1_1_1 = metricProducer1_1->mEventActivationMap.at(0);
-    EXPECT_EQ(100 * NS_PER_SEC, activation1_1_1->ttl_ns);
-    EXPECT_EQ(0, activation1_1_1->start_ns);
-    EXPECT_EQ(kNotActive, activation1_1_1->state);
-    EXPECT_EQ(ACTIVATE_ON_BOOT, activation1_1_1->activationType);
-
-    const auto& activation1_1_2 = metricProducer1_1->mEventActivationMap.at(1);
-    EXPECT_EQ(200 * NS_PER_SEC, activation1_1_2->ttl_ns);
-    EXPECT_EQ(0, activation1_1_2->start_ns);
-    EXPECT_EQ(kNotActive, activation1_1_2->state);
-    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation1_1_2->activationType);
-    // }}}------------------------------------------------------------------------------
-
-    // Trigger Activation 1 for Metric 1
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
-    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 100 + timeBase1);
-    processor1->OnLogEvent(event.get());
-
-    // Metric 1 is not active; Activation 1 set to kActiveOnBoot
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_FALSE(metricProducer1_1->isActive());
-    EXPECT_EQ(0, activation1_1_1->start_ns);
-    EXPECT_EQ(kActiveOnBoot, activation1_1_1->state);
-    EXPECT_EQ(0, activation1_1_2->start_ns);
-    EXPECT_EQ(kNotActive, activation1_1_2->state);
-
-    EXPECT_TRUE(metricProducer1_2->isActive());
-    // }}}-----------------------------------------------------------------------------
-
-    // Simulate shutdown by saving state to disk
-    int64_t shutDownTime = timeBase1 + 100 * NS_PER_SEC;
-    processor1->SaveActiveConfigsToDisk(shutDownTime);
-    EXPECT_FALSE(metricProducer1_1->isActive());
-
-    // Simulate device restarted state by creating new instance of StatsLogProcessor with the
-    // same config.
-    long timeBase2 = 1000;
-    sp<StatsLogProcessor> processor2 =
-            CreateStatsLogProcessor(timeBase2, timeBase2, config1, cfgKey1);
-
-    // Metric 1 is not active.
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_EQ(1, processor2->mMetricsManagers.size());
-    it = processor2->mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor2->mMetricsManagers.end());
-    auto& metricsManager2 = it->second;
-    EXPECT_TRUE(metricsManager2->isActive());
-
-    EXPECT_EQ(metricsManager2->mAllMetricProducers.size(), 2);
-    // We assume that the index of a MetricProducer within the mAllMetricProducers
-    // array follows the order in which metrics are added to the config.
-    auto& metricProducer2_1 = metricsManager2->mAllMetricProducers[0];
-    EXPECT_EQ(metricProducer2_1->getMetricId(), metricId1);
-    EXPECT_FALSE(metricProducer2_1->isActive());
-
-    auto& metricProducer2_2 = metricsManager2->mAllMetricProducers[1];
-    EXPECT_EQ(metricProducer2_2->getMetricId(), metricId2);
-    EXPECT_TRUE(metricProducer2_2->isActive());
-
-    EXPECT_EQ(metricProducer2_1->mEventActivationMap.size(), 2);
-    // The key in mEventActivationMap is the index of the associated atom matcher. We assume
-    // that matchers are indexed in the order that they are added to the config.
-    const auto& activation2_1_1 = metricProducer2_1->mEventActivationMap.at(0);
-    EXPECT_EQ(100 * NS_PER_SEC, activation2_1_1->ttl_ns);
-    EXPECT_EQ(0, activation2_1_1->start_ns);
-    EXPECT_EQ(kNotActive, activation2_1_1->state);
-    EXPECT_EQ(ACTIVATE_ON_BOOT, activation2_1_1->activationType);
-
-    const auto& activation2_1_2 = metricProducer2_1->mEventActivationMap.at(1);
-    EXPECT_EQ(200 * NS_PER_SEC, activation2_1_2->ttl_ns);
-    EXPECT_EQ(0, activation2_1_2->start_ns);
-    EXPECT_EQ(kNotActive, activation2_1_2->state);
-    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation2_1_2->activationType);
-    // }}}-----------------------------------------------------------------------------------
-
-    // Load saved state from disk.
-    processor2->LoadActiveConfigsFromDisk();
-
-    // Metric 1 active; Activation 1 is active, Activation 2 is not active
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_TRUE(metricProducer2_1->isActive());
-    int64_t ttl1 = metric1ActivationTrigger1->ttl_seconds() * NS_PER_SEC;
-    EXPECT_EQ(timeBase2 + ttl1 - activation2_1_1->ttl_ns, activation2_1_1->start_ns);
-    EXPECT_EQ(kActive, activation2_1_1->state);
-    EXPECT_EQ(0, activation2_1_2->start_ns);
-    EXPECT_EQ(kNotActive, activation2_1_2->state);
-
-    EXPECT_TRUE(metricProducer2_2->isActive());
-    // }}}--------------------------------------------------------------------------------
-
-    // Trigger Activation 2 for Metric 1.
-    auto screenOnEvent = CreateScreenStateChangedEvent(
-            android::view::DISPLAY_STATE_ON,
-            timeBase2 + 200
-    );
-    processor2->OnLogEvent(screenOnEvent.get());
-
-    // Metric 1 active; Activation 1 is active, Activation 2 is active
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_TRUE(metricProducer2_1->isActive());
-    EXPECT_EQ(timeBase2 + ttl1 - activation2_1_1->ttl_ns, activation2_1_1->start_ns);
-    EXPECT_EQ(kActive, activation2_1_1->state);
-    EXPECT_EQ(screenOnEvent->GetElapsedTimestampNs(), activation2_1_2->start_ns);
-    EXPECT_EQ(kActive, activation2_1_2->state);
-
-    EXPECT_TRUE(metricProducer2_2->isActive());
-    // }}}---------------------------------------------------------------------------
-
-    // Simulate shutdown by saving state to disk
-    shutDownTime = timeBase2 + 50 * NS_PER_SEC;
-    processor2->SaveActiveConfigsToDisk(shutDownTime);
-    EXPECT_TRUE(metricProducer2_1->isActive());
-    EXPECT_TRUE(metricProducer2_2->isActive());
-    ttl1 -= shutDownTime - timeBase2;
-    int64_t ttl2 = metric1ActivationTrigger2->ttl_seconds() * NS_PER_SEC
-            - (shutDownTime - screenOnEvent->GetElapsedTimestampNs());
-
-    // Simulate device restarted state by creating new instance of StatsLogProcessor with the
-    // same config.
-    long timeBase3 = timeBase2 + 120 * NS_PER_SEC;
-    sp<StatsLogProcessor> processor3 =
-            CreateStatsLogProcessor(timeBase3, timeBase3, config1, cfgKey1);
-
-    // Metric 1 is not active.
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_EQ(1, processor3->mMetricsManagers.size());
-    it = processor3->mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor3->mMetricsManagers.end());
-    auto& metricsManager3 = it->second;
-    EXPECT_TRUE(metricsManager3->isActive());
-
-    EXPECT_EQ(metricsManager3->mAllMetricProducers.size(), 2);
-    // We assume that the index of a MetricProducer within the mAllMetricProducers
-    // array follows the order in which metrics are added to the config.
-    auto& metricProducer3_1 = metricsManager3->mAllMetricProducers[0];
-    EXPECT_EQ(metricProducer3_1->getMetricId(), metricId1);
-    EXPECT_FALSE(metricProducer3_1->isActive());
-
-    auto& metricProducer3_2 = metricsManager3->mAllMetricProducers[1];
-    EXPECT_EQ(metricProducer3_2->getMetricId(), metricId2);
-    EXPECT_TRUE(metricProducer3_2->isActive());
-
-    EXPECT_EQ(metricProducer3_1->mEventActivationMap.size(), 2);
-    // The key in mEventActivationMap is the index of the associated atom matcher. We assume
-    // that matchers are indexed in the order that they are added to the config.
-    const auto& activation3_1_1 = metricProducer3_1->mEventActivationMap.at(0);
-    EXPECT_EQ(100 * NS_PER_SEC, activation3_1_1->ttl_ns);
-    EXPECT_EQ(0, activation3_1_1->start_ns);
-    EXPECT_EQ(kNotActive, activation3_1_1->state);
-    EXPECT_EQ(ACTIVATE_ON_BOOT, activation3_1_1->activationType);
-
-    const auto& activation3_1_2 = metricProducer3_1->mEventActivationMap.at(1);
-    EXPECT_EQ(200 * NS_PER_SEC, activation3_1_2->ttl_ns);
-    EXPECT_EQ(0, activation3_1_2->start_ns);
-    EXPECT_EQ(kNotActive, activation3_1_2->state);
-    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation3_1_2->activationType);
-    // }}}----------------------------------------------------------------------------------
-
-    // Load saved state from disk.
-    processor3->LoadActiveConfigsFromDisk();
-
-    // Metric 1 active: Activation 1 is active, Activation 2 is active
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_TRUE(metricProducer3_1->isActive());
-    EXPECT_EQ(timeBase3 + ttl1 - activation3_1_1->ttl_ns, activation3_1_1->start_ns);
-    EXPECT_EQ(kActive, activation3_1_1->state);
-    EXPECT_EQ(timeBase3 + ttl2 - activation3_1_2->ttl_ns, activation3_1_2->start_ns);
-    EXPECT_EQ(kActive, activation3_1_2->state);
-
-    EXPECT_TRUE(metricProducer3_2->isActive());
-    // }}}-------------------------------------------------------------------------------
-
-
-    // Trigger Activation 2 for Metric 1 again.
-    screenOnEvent = CreateScreenStateChangedEvent(
-            android::view::DISPLAY_STATE_ON,
-            timeBase3 + 100 * NS_PER_SEC
-    );
-    processor3->OnLogEvent(screenOnEvent.get());
-
-    // Metric 1 active; Activation 1 is inactive (above screenOnEvent causes ttl1 to expire),
-    //                  Activation 2 is set to active
-    // Metric 2 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_TRUE(metricProducer3_1->isActive());
-    EXPECT_EQ(kNotActive, activation3_1_1->state);
-    EXPECT_EQ(screenOnEvent->GetElapsedTimestampNs(), activation3_1_2->start_ns);
-    EXPECT_EQ(kActive, activation3_1_2->state);
-
-    EXPECT_TRUE(metricProducer3_2->isActive());
-    // }}}---------------------------------------------------------------------------
-}
-
-TEST(StatsLogProcessorTest, TestActivationsPersistAcrossSystemServerRestart) {
-    int uid = 9876;
-    long configId = 12341;
-
-    // Create config with 3 metrics:
-    // Metric 1: Activate on 2 activations, 1 on boot, 1 immediate.
-    // Metric 2: Activate on 2 activations, 1 on boot, 1 immediate.
-    // Metric 3: Always active
-    StatsdConfig config1;
-    config1.set_id(configId);
-    config1.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
-    auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
-    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
-    auto jobStartMatcher = CreateStartScheduledJobAtomMatcher();
-    auto jobFinishMatcher = CreateFinishScheduledJobAtomMatcher();
-    *config1.add_atom_matcher() = wakelockAcquireMatcher;
-    *config1.add_atom_matcher() = screenOnMatcher;
-    *config1.add_atom_matcher() = jobStartMatcher;
-    *config1.add_atom_matcher() = jobFinishMatcher;
-
-    long metricId1 = 1234561;
-    long metricId2 = 1234562;
-    long metricId3 = 1234563;
-
-    auto countMetric1 = config1.add_count_metric();
-    countMetric1->set_id(metricId1);
-    countMetric1->set_what(wakelockAcquireMatcher.id());
-    countMetric1->set_bucket(FIVE_MINUTES);
-
-    auto countMetric2 = config1.add_count_metric();
-    countMetric2->set_id(metricId2);
-    countMetric2->set_what(wakelockAcquireMatcher.id());
-    countMetric2->set_bucket(FIVE_MINUTES);
-
-    auto countMetric3 = config1.add_count_metric();
-    countMetric3->set_id(metricId3);
-    countMetric3->set_what(wakelockAcquireMatcher.id());
-    countMetric3->set_bucket(FIVE_MINUTES);
-
-    // Metric 1 activates on boot for wakelock acquire, immediately for screen on.
-    auto metric1Activation = config1.add_metric_activation();
-    metric1Activation->set_metric_id(metricId1);
-    auto metric1ActivationTrigger1 = metric1Activation->add_event_activation();
-    metric1ActivationTrigger1->set_atom_matcher_id(wakelockAcquireMatcher.id());
-    metric1ActivationTrigger1->set_ttl_seconds(100);
-    metric1ActivationTrigger1->set_activation_type(ACTIVATE_ON_BOOT);
-    auto metric1ActivationTrigger2 = metric1Activation->add_event_activation();
-    metric1ActivationTrigger2->set_atom_matcher_id(screenOnMatcher.id());
-    metric1ActivationTrigger2->set_ttl_seconds(200);
-    metric1ActivationTrigger2->set_activation_type(ACTIVATE_IMMEDIATELY);
-
-    // Metric 2 activates on boot for scheduled job start, immediately for scheduled job finish.
-    auto metric2Activation = config1.add_metric_activation();
-    metric2Activation->set_metric_id(metricId2);
-    auto metric2ActivationTrigger1 = metric2Activation->add_event_activation();
-    metric2ActivationTrigger1->set_atom_matcher_id(jobStartMatcher.id());
-    metric2ActivationTrigger1->set_ttl_seconds(100);
-    metric2ActivationTrigger1->set_activation_type(ACTIVATE_ON_BOOT);
-    auto metric2ActivationTrigger2 = metric2Activation->add_event_activation();
-    metric2ActivationTrigger2->set_atom_matcher_id(jobFinishMatcher.id());
-    metric2ActivationTrigger2->set_ttl_seconds(200);
-    metric2ActivationTrigger2->set_activation_type(ACTIVATE_IMMEDIATELY);
-
-    // Send the config.
-    StatsService service(nullptr, nullptr);
-    string serialized = config1.SerializeAsString();
-    service.addConfigurationChecked(uid, configId, {serialized.begin(), serialized.end()});
-
-    // Make sure the config is stored on disk. Otherwise, we will not reset on system server death.
-    StatsdConfig tmpConfig;
-    ConfigKey cfgKey1(uid, configId);
-    EXPECT_TRUE(StorageManager::readConfigFromDisk(cfgKey1, &tmpConfig));
-
-    // Metric 1 is not active.
-    // Metric 2 is not active.
-    // Metric 3 is active.
-    // {{{---------------------------------------------------------------------------
-    sp<StatsLogProcessor> processor = service.mProcessor;
-    EXPECT_EQ(1, processor->mMetricsManagers.size());
-    auto it = processor->mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor->mMetricsManagers.end());
-    auto& metricsManager1 = it->second;
-    EXPECT_TRUE(metricsManager1->isActive());
-    EXPECT_EQ(3, metricsManager1->mAllMetricProducers.size());
-
-    auto& metricProducer1 = metricsManager1->mAllMetricProducers[0];
-    EXPECT_EQ(metricId1, metricProducer1->getMetricId());
-    EXPECT_FALSE(metricProducer1->isActive());
-
-    auto& metricProducer2 = metricsManager1->mAllMetricProducers[1];
-    EXPECT_EQ(metricId2, metricProducer2->getMetricId());
-    EXPECT_FALSE(metricProducer2->isActive());
-
-    auto& metricProducer3 = metricsManager1->mAllMetricProducers[2];
-    EXPECT_EQ(metricId3, metricProducer3->getMetricId());
-    EXPECT_TRUE(metricProducer3->isActive());
-
-    // Check event activations.
-    EXPECT_EQ(metricsManager1->mAllAtomMatchers.size(), 4);
-    EXPECT_EQ(metricsManager1->mAllAtomMatchers[0]->getId(),
-              metric1ActivationTrigger1->atom_matcher_id());
-    const auto& activation1 = metricProducer1->mEventActivationMap.at(0);
-    EXPECT_EQ(100 * NS_PER_SEC, activation1->ttl_ns);
-    EXPECT_EQ(0, activation1->start_ns);
-    EXPECT_EQ(kNotActive, activation1->state);
-    EXPECT_EQ(ACTIVATE_ON_BOOT, activation1->activationType);
-
-    EXPECT_EQ(metricsManager1->mAllAtomMatchers[1]->getId(),
-              metric1ActivationTrigger2->atom_matcher_id());
-    const auto& activation2 = metricProducer1->mEventActivationMap.at(1);
-    EXPECT_EQ(200 * NS_PER_SEC, activation2->ttl_ns);
-    EXPECT_EQ(0, activation2->start_ns);
-    EXPECT_EQ(kNotActive, activation2->state);
-    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation2->activationType);
-
-    EXPECT_EQ(metricsManager1->mAllAtomMatchers[2]->getId(),
-              metric2ActivationTrigger1->atom_matcher_id());
-    const auto& activation3 = metricProducer2->mEventActivationMap.at(2);
-    EXPECT_EQ(100 * NS_PER_SEC, activation3->ttl_ns);
-    EXPECT_EQ(0, activation3->start_ns);
-    EXPECT_EQ(kNotActive, activation3->state);
-    EXPECT_EQ(ACTIVATE_ON_BOOT, activation3->activationType);
-
-    EXPECT_EQ(metricsManager1->mAllAtomMatchers[3]->getId(),
-              metric2ActivationTrigger2->atom_matcher_id());
-    const auto& activation4 = metricProducer2->mEventActivationMap.at(3);
-    EXPECT_EQ(200 * NS_PER_SEC, activation4->ttl_ns);
-    EXPECT_EQ(0, activation4->start_ns);
-    EXPECT_EQ(kNotActive, activation4->state);
-    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation4->activationType);
-    // }}}------------------------------------------------------------------------------
-
-    // Trigger Activation 1 for Metric 1. Should activate on boot.
-    // Trigger Activation 4 for Metric 2. Should activate immediately.
-    long configAddedTimeNs = metricsManager1->mLastReportTimeNs;
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
-    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 1 + configAddedTimeNs);
-    processor->OnLogEvent(event.get());
-
-    event = CreateFinishScheduledJobEvent(attributions1, "finish1", 2 + configAddedTimeNs);
-    processor->OnLogEvent(event.get());
-
-    // Metric 1 is not active; Activation 1 set to kActiveOnBoot
-    // Metric 2 is active. Activation 4 set to kActive
-    // Metric 3 is active.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_FALSE(metricProducer1->isActive());
-    EXPECT_EQ(0, activation1->start_ns);
-    EXPECT_EQ(kActiveOnBoot, activation1->state);
-    EXPECT_EQ(0, activation2->start_ns);
-    EXPECT_EQ(kNotActive, activation2->state);
-
-    EXPECT_TRUE(metricProducer2->isActive());
-    EXPECT_EQ(0, activation3->start_ns);
-    EXPECT_EQ(kNotActive, activation3->state);
-    EXPECT_EQ(2 + configAddedTimeNs, activation4->start_ns);
-    EXPECT_EQ(kActive, activation4->state);
-
-    EXPECT_TRUE(metricProducer3->isActive());
-    // }}}-----------------------------------------------------------------------------
-
-    // Can't fake time with StatsService.
-    // Lets get a time close to the system server death time and make sure it's sane.
-    int64_t approximateSystemServerDeath = getElapsedRealtimeNs();
-    EXPECT_TRUE(approximateSystemServerDeath > 2 + configAddedTimeNs);
-    EXPECT_TRUE(approximateSystemServerDeath < NS_PER_SEC + configAddedTimeNs);
-
-    // System server dies.
-    service.binderDied(nullptr);
-
-    // We should have a new metrics manager. Lets get it and ensure activation status is restored.
-    // {{{---------------------------------------------------------------------------
-    EXPECT_EQ(1, processor->mMetricsManagers.size());
-    it = processor->mMetricsManagers.find(cfgKey1);
-    EXPECT_TRUE(it != processor->mMetricsManagers.end());
-    auto& metricsManager2 = it->second;
-    EXPECT_TRUE(metricsManager2->isActive());
-    EXPECT_EQ(3, metricsManager2->mAllMetricProducers.size());
-
-    auto& metricProducer1001 = metricsManager2->mAllMetricProducers[0];
-    EXPECT_EQ(metricId1, metricProducer1001->getMetricId());
-    EXPECT_FALSE(metricProducer1001->isActive());
-
-    auto& metricProducer1002 = metricsManager2->mAllMetricProducers[1];
-    EXPECT_EQ(metricId2, metricProducer1002->getMetricId());
-    EXPECT_TRUE(metricProducer1002->isActive());
-
-    auto& metricProducer1003 = metricsManager2->mAllMetricProducers[2];
-    EXPECT_EQ(metricId3, metricProducer1003->getMetricId());
-    EXPECT_TRUE(metricProducer1003->isActive());
-
-    // Check event activations.
-    // Activation 1 is kActiveOnBoot.
-    // Activation 2 and 3 are not active.
-    // Activation 4 is active.
-    EXPECT_EQ(metricsManager2->mAllAtomMatchers.size(), 4);
-    EXPECT_EQ(metricsManager2->mAllAtomMatchers[0]->getId(),
-              metric1ActivationTrigger1->atom_matcher_id());
-    const auto& activation1001 = metricProducer1001->mEventActivationMap.at(0);
-    EXPECT_EQ(100 * NS_PER_SEC, activation1001->ttl_ns);
-    EXPECT_EQ(0, activation1001->start_ns);
-    EXPECT_EQ(kActiveOnBoot, activation1001->state);
-    EXPECT_EQ(ACTIVATE_ON_BOOT, activation1001->activationType);
-
-    EXPECT_EQ(metricsManager2->mAllAtomMatchers[1]->getId(),
-              metric1ActivationTrigger2->atom_matcher_id());
-    const auto& activation1002 = metricProducer1001->mEventActivationMap.at(1);
-    EXPECT_EQ(200 * NS_PER_SEC, activation1002->ttl_ns);
-    EXPECT_EQ(0, activation1002->start_ns);
-    EXPECT_EQ(kNotActive, activation1002->state);
-    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation1002->activationType);
-
-    EXPECT_EQ(metricsManager2->mAllAtomMatchers[2]->getId(),
-              metric2ActivationTrigger1->atom_matcher_id());
-    const auto& activation1003 = metricProducer1002->mEventActivationMap.at(2);
-    EXPECT_EQ(100 * NS_PER_SEC, activation1003->ttl_ns);
-    EXPECT_EQ(0, activation1003->start_ns);
-    EXPECT_EQ(kNotActive, activation1003->state);
-    EXPECT_EQ(ACTIVATE_ON_BOOT, activation1003->activationType);
-
-    EXPECT_EQ(metricsManager2->mAllAtomMatchers[3]->getId(),
-              metric2ActivationTrigger2->atom_matcher_id());
-    const auto& activation1004 = metricProducer1002->mEventActivationMap.at(3);
-    EXPECT_EQ(200 * NS_PER_SEC, activation1004->ttl_ns);
-    EXPECT_EQ(2 + configAddedTimeNs, activation1004->start_ns);
-    EXPECT_EQ(kActive, activation1004->state);
-    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation1004->activationType);
-    // }}}------------------------------------------------------------------------------
-
-    // Clear the data stored on disk as a result of the system server death.
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey1, configAddedTimeNs + NS_PER_SEC, false, true,
-                                ADB_DUMP, FAST, &buffer);
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(StatsLogProcessorTest, TestOnDumpReportEraseData) {
+//    // Setup a simple config.
+//    StatsdConfig config;
+//    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
+//    auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
+//    *config.add_atom_matcher() = wakelockAcquireMatcher;
+//
+//    auto countMetric = config.add_count_metric();
+//    countMetric->set_id(123456);
+//    countMetric->set_what(wakelockAcquireMatcher.id());
+//    countMetric->set_bucket(FIVE_MINUTES);
+//
+//    ConfigKey cfgKey;
+//    sp<StatsLogProcessor> processor = CreateStatsLogProcessor(1, 1, config, cfgKey);
+//
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
+//    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 2);
+//    processor->OnLogEvent(event.get());
+//
+//    vector<uint8_t> bytes;
+//    ConfigMetricsReportList output;
+//
+//    // Dump report WITHOUT erasing data.
+//    processor->onDumpReport(cfgKey, 3, true, false /* Do NOT erase data. */, ADB_DUMP, FAST, &bytes);
+//    output.ParseFromArray(bytes.data(), bytes.size());
+//    EXPECT_EQ(output.reports_size(), 1);
+//    EXPECT_EQ(output.reports(0).metrics_size(), 1);
+//    EXPECT_EQ(output.reports(0).metrics(0).count_metrics().data_size(), 1);
+//
+//    // Dump report WITH erasing data. There should be data since we didn't previously erase it.
+//    processor->onDumpReport(cfgKey, 4, true, true /* DO erase data. */, ADB_DUMP, FAST, &bytes);
+//    output.ParseFromArray(bytes.data(), bytes.size());
+//    EXPECT_EQ(output.reports_size(), 1);
+//    EXPECT_EQ(output.reports(0).metrics_size(), 1);
+//    EXPECT_EQ(output.reports(0).metrics(0).count_metrics().data_size(), 1);
+//
+//    // Dump report again. There should be no data since we erased it.
+//    processor->onDumpReport(cfgKey, 5, true, true /* DO erase data. */, ADB_DUMP, FAST, &bytes);
+//    output.ParseFromArray(bytes.data(), bytes.size());
+//    // We don't care whether statsd has a report, as long as it has no count metrics in it.
+//    bool noData = output.reports_size() == 0
+//            || output.reports(0).metrics_size() == 0
+//            || output.reports(0).metrics(0).count_metrics().data_size() == 0;
+//    EXPECT_TRUE(noData);
+//}
+//
+//TEST(StatsLogProcessorTest, TestActiveConfigMetricDiskWriteRead) {
+//    int uid = 1111;
+//
+//    // Setup a simple config, no activation
+//    StatsdConfig config1;
+//    int64_t cfgId1 = 12341;
+//    config1.set_id(cfgId1);
+//    config1.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
+//    auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
+//    *config1.add_atom_matcher() = wakelockAcquireMatcher;
+//
+//    long metricId1 = 1234561;
+//    long metricId2 = 1234562;
+//    auto countMetric1 = config1.add_count_metric();
+//    countMetric1->set_id(metricId1);
+//    countMetric1->set_what(wakelockAcquireMatcher.id());
+//    countMetric1->set_bucket(FIVE_MINUTES);
+//
+//    auto countMetric2 = config1.add_count_metric();
+//    countMetric2->set_id(metricId2);
+//    countMetric2->set_what(wakelockAcquireMatcher.id());
+//    countMetric2->set_bucket(FIVE_MINUTES);
+//
+//    ConfigKey cfgKey1(uid, cfgId1);
+//
+//    // Add another config, with two metrics, one with activation
+//    StatsdConfig config2;
+//    int64_t cfgId2 = 12342;
+//    config2.set_id(cfgId2);
+//    config2.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
+//    *config2.add_atom_matcher() = wakelockAcquireMatcher;
+//
+//    long metricId3 = 1234561;
+//    long metricId4 = 1234562;
+//
+//    auto countMetric3 = config2.add_count_metric();
+//    countMetric3->set_id(metricId3);
+//    countMetric3->set_what(wakelockAcquireMatcher.id());
+//    countMetric3->set_bucket(FIVE_MINUTES);
+//
+//    auto countMetric4 = config2.add_count_metric();
+//    countMetric4->set_id(metricId4);
+//    countMetric4->set_what(wakelockAcquireMatcher.id());
+//    countMetric4->set_bucket(FIVE_MINUTES);
+//
+//    auto metric3Activation = config2.add_metric_activation();
+//    metric3Activation->set_metric_id(metricId3);
+//    metric3Activation->set_activation_type(ACTIVATE_IMMEDIATELY);
+//    auto metric3ActivationTrigger = metric3Activation->add_event_activation();
+//    metric3ActivationTrigger->set_atom_matcher_id(wakelockAcquireMatcher.id());
+//    metric3ActivationTrigger->set_ttl_seconds(100);
+//
+//    ConfigKey cfgKey2(uid, cfgId2);
+//
+//    // Add another config, with two metrics, both with activations
+//    StatsdConfig config3;
+//    int64_t cfgId3 = 12343;
+//    config3.set_id(cfgId3);
+//    config3.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
+//    *config3.add_atom_matcher() = wakelockAcquireMatcher;
+//
+//    long metricId5 = 1234565;
+//    long metricId6 = 1234566;
+//    auto countMetric5 = config3.add_count_metric();
+//    countMetric5->set_id(metricId5);
+//    countMetric5->set_what(wakelockAcquireMatcher.id());
+//    countMetric5->set_bucket(FIVE_MINUTES);
+//
+//    auto countMetric6 = config3.add_count_metric();
+//    countMetric6->set_id(metricId6);
+//    countMetric6->set_what(wakelockAcquireMatcher.id());
+//    countMetric6->set_bucket(FIVE_MINUTES);
+//
+//    auto metric5Activation = config3.add_metric_activation();
+//    metric5Activation->set_metric_id(metricId5);
+//    metric5Activation->set_activation_type(ACTIVATE_IMMEDIATELY);
+//    auto metric5ActivationTrigger = metric5Activation->add_event_activation();
+//    metric5ActivationTrigger->set_atom_matcher_id(wakelockAcquireMatcher.id());
+//    metric5ActivationTrigger->set_ttl_seconds(100);
+//
+//    auto metric6Activation = config3.add_metric_activation();
+//    metric6Activation->set_metric_id(metricId6);
+//    metric6Activation->set_activation_type(ACTIVATE_IMMEDIATELY);
+//    auto metric6ActivationTrigger = metric6Activation->add_event_activation();
+//    metric6ActivationTrigger->set_atom_matcher_id(wakelockAcquireMatcher.id());
+//    metric6ActivationTrigger->set_ttl_seconds(200);
+//
+//    ConfigKey cfgKey3(uid, cfgId3);
+//
+//    sp<UidMap> m = new UidMap();
+//    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
+//    sp<AlarmMonitor> anomalyAlarmMonitor;
+//    sp<AlarmMonitor> subscriberAlarmMonitor;
+//    vector<int64_t> activeConfigsBroadcast;
+//
+//    long timeBase1 = 1;
+//    int broadcastCount = 0;
+//    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
+//            timeBase1, [](const ConfigKey& key) { return true; },
+//            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
+//                    const vector<int64_t>& activeConfigs) {
+//                broadcastCount++;
+//                EXPECT_EQ(broadcastUid, uid);
+//                activeConfigsBroadcast.clear();
+//                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
+//                        activeConfigs.begin(), activeConfigs.end());
+//                return true;
+//            });
+//
+//    processor.OnConfigUpdated(1, cfgKey1, config1);
+//    processor.OnConfigUpdated(2, cfgKey2, config2);
+//    processor.OnConfigUpdated(3, cfgKey3, config3);
+//
+//    EXPECT_EQ(3, processor.mMetricsManagers.size());
+//
+//    // Expect the first config and both metrics in it to be active.
+//    auto it = processor.mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor.mMetricsManagers.end());
+//    auto& metricsManager1 = it->second;
+//    EXPECT_TRUE(metricsManager1->isActive());
+//
+//    auto metricIt = metricsManager1->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId1) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
+//    auto& metricProducer1 = *metricIt;
+//    EXPECT_TRUE(metricProducer1->isActive());
+//
+//    metricIt = metricsManager1->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId2) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
+//    auto& metricProducer2 = *metricIt;
+//    EXPECT_TRUE(metricProducer2->isActive());
+//
+//    // Expect config 2 to be active. Metric 3 shouldn't be active, metric 4 should be active.
+//    it = processor.mMetricsManagers.find(cfgKey2);
+//    EXPECT_TRUE(it != processor.mMetricsManagers.end());
+//    auto& metricsManager2 = it->second;
+//    EXPECT_TRUE(metricsManager2->isActive());
+//
+//    metricIt = metricsManager2->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager2->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId3) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager2->mAllMetricProducers.end());
+//    auto& metricProducer3 = *metricIt;
+//    EXPECT_FALSE(metricProducer3->isActive());
+//
+//    metricIt = metricsManager2->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager2->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId4) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager2->mAllMetricProducers.end());
+//    auto& metricProducer4 = *metricIt;
+//    EXPECT_TRUE(metricProducer4->isActive());
+//
+//    // Expect the third config and both metrics in it to be inactive.
+//    it = processor.mMetricsManagers.find(cfgKey3);
+//    EXPECT_TRUE(it != processor.mMetricsManagers.end());
+//    auto& metricsManager3 = it->second;
+//    EXPECT_FALSE(metricsManager3->isActive());
+//
+//    metricIt = metricsManager3->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager2->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId5) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager3->mAllMetricProducers.end());
+//    auto& metricProducer5 = *metricIt;
+//    EXPECT_FALSE(metricProducer5->isActive());
+//
+//    metricIt = metricsManager3->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager3->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId6) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager3->mAllMetricProducers.end());
+//    auto& metricProducer6 = *metricIt;
+//    EXPECT_FALSE(metricProducer6->isActive());
+//
+//    // No broadcast for active configs should have happened yet.
+//    EXPECT_EQ(broadcastCount, 0);
+//
+//    // Activate all 3 metrics that were not active.
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
+//    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 100 + timeBase1);
+//    processor.OnLogEvent(event.get());
+//
+//    // Assert that all 3 configs are active.
+//    EXPECT_TRUE(metricsManager1->isActive());
+//    EXPECT_TRUE(metricsManager2->isActive());
+//    EXPECT_TRUE(metricsManager3->isActive());
+//
+//    // A broadcast should have happened, and all 3 configs should be active in the broadcast.
+//    EXPECT_EQ(broadcastCount, 1);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 3);
+//    EXPECT_TRUE(std::find(activeConfigsBroadcast.begin(), activeConfigsBroadcast.end(), cfgId1)
+//            != activeConfigsBroadcast.end());
+//    EXPECT_TRUE(std::find(activeConfigsBroadcast.begin(), activeConfigsBroadcast.end(), cfgId2)
+//            != activeConfigsBroadcast.end());
+//    EXPECT_TRUE(std::find(activeConfigsBroadcast.begin(), activeConfigsBroadcast.end(), cfgId3)
+//            != activeConfigsBroadcast.end());
+//
+//    // When we shut down, metrics 3 & 5 have 100ns remaining, metric 6 has 100s + 100ns.
+//    int64_t shutDownTime = timeBase1 + 100 * NS_PER_SEC;
+//    processor.SaveActiveConfigsToDisk(shutDownTime);
+//    const int64_t ttl3 = event->GetElapsedTimestampNs() +
+//            metric3ActivationTrigger->ttl_seconds() * NS_PER_SEC - shutDownTime;
+//    const int64_t ttl5 = event->GetElapsedTimestampNs() +
+//            metric5ActivationTrigger->ttl_seconds() * NS_PER_SEC - shutDownTime;
+//    const int64_t ttl6 = event->GetElapsedTimestampNs() +
+//            metric6ActivationTrigger->ttl_seconds() * NS_PER_SEC - shutDownTime;
+//
+//    // Create a second StatsLogProcessor and push the same 3 configs.
+//    long timeBase2 = 1000;
+//    sp<StatsLogProcessor> processor2 =
+//            CreateStatsLogProcessor(timeBase2, timeBase2, config1, cfgKey1);
+//    processor2->OnConfigUpdated(timeBase2, cfgKey2, config2);
+//    processor2->OnConfigUpdated(timeBase2, cfgKey3, config3);
+//
+//    EXPECT_EQ(3, processor2->mMetricsManagers.size());
+//
+//    // First config and both metrics are active.
+//    it = processor2->mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor2->mMetricsManagers.end());
+//    auto& metricsManager1001 = it->second;
+//    EXPECT_TRUE(metricsManager1001->isActive());
+//
+//    metricIt = metricsManager1001->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId1) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
+//    auto& metricProducer1001 = *metricIt;
+//    EXPECT_TRUE(metricProducer1001->isActive());
+//
+//    metricIt = metricsManager1001->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId2) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
+//    auto& metricProducer1002 = *metricIt;
+//    EXPECT_TRUE(metricProducer1002->isActive());
+//
+//    // Second config is active. Metric 3 is inactive, metric 4 is active.
+//    it = processor2->mMetricsManagers.find(cfgKey2);
+//    EXPECT_TRUE(it != processor2->mMetricsManagers.end());
+//    auto& metricsManager1002 = it->second;
+//    EXPECT_TRUE(metricsManager1002->isActive());
+//
+//    metricIt = metricsManager1002->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1002->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId3) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1002->mAllMetricProducers.end());
+//    auto& metricProducer1003 = *metricIt;
+//    EXPECT_FALSE(metricProducer1003->isActive());
+//
+//    metricIt = metricsManager1002->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1002->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId4) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1002->mAllMetricProducers.end());
+//    auto& metricProducer1004 = *metricIt;
+//    EXPECT_TRUE(metricProducer1004->isActive());
+//
+//    // Config 3 is inactive. both metrics are inactive.
+//    it = processor2->mMetricsManagers.find(cfgKey3);
+//    EXPECT_TRUE(it != processor2->mMetricsManagers.end());
+//    auto& metricsManager1003 = it->second;
+//    EXPECT_FALSE(metricsManager1003->isActive());
+//    EXPECT_EQ(2, metricsManager1003->mAllMetricProducers.size());
+//
+//    metricIt = metricsManager1003->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1002->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId5) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1003->mAllMetricProducers.end());
+//    auto& metricProducer1005 = *metricIt;
+//    EXPECT_FALSE(metricProducer1005->isActive());
+//
+//    metricIt = metricsManager1003->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1003->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId6) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1003->mAllMetricProducers.end());
+//    auto& metricProducer1006 = *metricIt;
+//    EXPECT_FALSE(metricProducer1006->isActive());
+//
+//    // Assert that all 3 metrics with activation are inactive and that the ttls were properly set.
+//    EXPECT_FALSE(metricProducer1003->isActive());
+//    const auto& activation1003 = metricProducer1003->mEventActivationMap.begin()->second;
+//    EXPECT_EQ(100 * NS_PER_SEC, activation1003->ttl_ns);
+//    EXPECT_EQ(0, activation1003->start_ns);
+//    EXPECT_FALSE(metricProducer1005->isActive());
+//    const auto& activation1005 = metricProducer1005->mEventActivationMap.begin()->second;
+//    EXPECT_EQ(100 * NS_PER_SEC, activation1005->ttl_ns);
+//    EXPECT_EQ(0, activation1005->start_ns);
+//    EXPECT_FALSE(metricProducer1006->isActive());
+//    const auto& activation1006 = metricProducer1006->mEventActivationMap.begin()->second;
+//    EXPECT_EQ(200 * NS_PER_SEC, activation1006->ttl_ns);
+//    EXPECT_EQ(0, activation1006->start_ns);
+//
+//    processor2->LoadActiveConfigsFromDisk();
+//
+//    // After loading activations from disk, assert that all 3 metrics are active.
+//    EXPECT_TRUE(metricProducer1003->isActive());
+//    EXPECT_EQ(timeBase2 + ttl3 - activation1003->ttl_ns, activation1003->start_ns);
+//    EXPECT_TRUE(metricProducer1005->isActive());
+//    EXPECT_EQ(timeBase2 + ttl5 - activation1005->ttl_ns, activation1005->start_ns);
+//    EXPECT_TRUE(metricProducer1006->isActive());
+//    EXPECT_EQ(timeBase2 + ttl6 - activation1006->ttl_ns, activation1003->start_ns);
+//
+//    // Make sure no more broadcasts have happened.
+//    EXPECT_EQ(broadcastCount, 1);
+//}
+//
+//TEST(StatsLogProcessorTest, TestActivationOnBoot) {
+//    int uid = 1111;
+//
+//    StatsdConfig config1;
+//    config1.set_id(12341);
+//    config1.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
+//    auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
+//    *config1.add_atom_matcher() = wakelockAcquireMatcher;
+//
+//    long metricId1 = 1234561;
+//    long metricId2 = 1234562;
+//    auto countMetric1 = config1.add_count_metric();
+//    countMetric1->set_id(metricId1);
+//    countMetric1->set_what(wakelockAcquireMatcher.id());
+//    countMetric1->set_bucket(FIVE_MINUTES);
+//
+//    auto countMetric2 = config1.add_count_metric();
+//    countMetric2->set_id(metricId2);
+//    countMetric2->set_what(wakelockAcquireMatcher.id());
+//    countMetric2->set_bucket(FIVE_MINUTES);
+//
+//    auto metric1Activation = config1.add_metric_activation();
+//    metric1Activation->set_metric_id(metricId1);
+//    metric1Activation->set_activation_type(ACTIVATE_ON_BOOT);
+//    auto metric1ActivationTrigger = metric1Activation->add_event_activation();
+//    metric1ActivationTrigger->set_atom_matcher_id(wakelockAcquireMatcher.id());
+//    metric1ActivationTrigger->set_ttl_seconds(100);
+//
+//    ConfigKey cfgKey1(uid, 12341);
+//    long timeBase1 = 1;
+//    sp<StatsLogProcessor> processor =
+//            CreateStatsLogProcessor(timeBase1, timeBase1, config1, cfgKey1);
+//
+//    EXPECT_EQ(1, processor->mMetricsManagers.size());
+//    auto it = processor->mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor->mMetricsManagers.end());
+//    auto& metricsManager1 = it->second;
+//    EXPECT_TRUE(metricsManager1->isActive());
+//
+//    auto metricIt = metricsManager1->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId1) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
+//    auto& metricProducer1 = *metricIt;
+//    EXPECT_FALSE(metricProducer1->isActive());
+//
+//    metricIt = metricsManager1->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId2) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
+//    auto& metricProducer2 = *metricIt;
+//    EXPECT_TRUE(metricProducer2->isActive());
+//
+//    const auto& activation1 = metricProducer1->mEventActivationMap.begin()->second;
+//    EXPECT_EQ(100 * NS_PER_SEC, activation1->ttl_ns);
+//    EXPECT_EQ(0, activation1->start_ns);
+//    EXPECT_EQ(kNotActive, activation1->state);
+//
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
+//    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 100 + timeBase1);
+//    processor->OnLogEvent(event.get());
+//
+//    EXPECT_FALSE(metricProducer1->isActive());
+//    EXPECT_EQ(0, activation1->start_ns);
+//    EXPECT_EQ(kActiveOnBoot, activation1->state);
+//
+//    int64_t shutDownTime = timeBase1 + 100 * NS_PER_SEC;
+//    processor->SaveActiveConfigsToDisk(shutDownTime);
+//    EXPECT_FALSE(metricProducer1->isActive());
+//    const int64_t ttl1 = metric1ActivationTrigger->ttl_seconds() * NS_PER_SEC;
+//
+//    long timeBase2 = 1000;
+//    sp<StatsLogProcessor> processor2 =
+//            CreateStatsLogProcessor(timeBase2, timeBase2, config1, cfgKey1);
+//
+//    EXPECT_EQ(1, processor2->mMetricsManagers.size());
+//    it = processor2->mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor2->mMetricsManagers.end());
+//    auto& metricsManager1001 = it->second;
+//    EXPECT_TRUE(metricsManager1001->isActive());
+//
+//    metricIt = metricsManager1001->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId1) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
+//    auto& metricProducer1001 = *metricIt;
+//    EXPECT_FALSE(metricProducer1001->isActive());
+//
+//    metricIt = metricsManager1001->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId2) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
+//    auto& metricProducer1002 = *metricIt;
+//    EXPECT_TRUE(metricProducer1002->isActive());
+//
+//    const auto& activation1001 = metricProducer1001->mEventActivationMap.begin()->second;
+//    EXPECT_EQ(100 * NS_PER_SEC, activation1001->ttl_ns);
+//    EXPECT_EQ(0, activation1001->start_ns);
+//    EXPECT_EQ(kNotActive, activation1001->state);
+//
+//    processor2->LoadActiveConfigsFromDisk();
+//
+//    EXPECT_TRUE(metricProducer1001->isActive());
+//    EXPECT_EQ(timeBase2 + ttl1 - activation1001->ttl_ns, activation1001->start_ns);
+//    EXPECT_EQ(kActive, activation1001->state);
+//}
+//
+//TEST(StatsLogProcessorTest, TestActivationOnBootMultipleActivations) {
+//    int uid = 1111;
+//
+//    // Create config with 2 metrics:
+//    // Metric 1: Activate on boot with 2 activations
+//    // Metric 2: Always active
+//    StatsdConfig config1;
+//    config1.set_id(12341);
+//    config1.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
+//    auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
+//    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
+//    *config1.add_atom_matcher() = wakelockAcquireMatcher;
+//    *config1.add_atom_matcher() = screenOnMatcher;
+//
+//    long metricId1 = 1234561;
+//    long metricId2 = 1234562;
+//
+//    auto countMetric1 = config1.add_count_metric();
+//    countMetric1->set_id(metricId1);
+//    countMetric1->set_what(wakelockAcquireMatcher.id());
+//    countMetric1->set_bucket(FIVE_MINUTES);
+//
+//    auto countMetric2 = config1.add_count_metric();
+//    countMetric2->set_id(metricId2);
+//    countMetric2->set_what(wakelockAcquireMatcher.id());
+//    countMetric2->set_bucket(FIVE_MINUTES);
+//
+//    auto metric1Activation = config1.add_metric_activation();
+//    metric1Activation->set_metric_id(metricId1);
+//    metric1Activation->set_activation_type(ACTIVATE_ON_BOOT);
+//    auto metric1ActivationTrigger1 = metric1Activation->add_event_activation();
+//    metric1ActivationTrigger1->set_atom_matcher_id(wakelockAcquireMatcher.id());
+//    metric1ActivationTrigger1->set_ttl_seconds(100);
+//    auto metric1ActivationTrigger2 = metric1Activation->add_event_activation();
+//    metric1ActivationTrigger2->set_atom_matcher_id(screenOnMatcher.id());
+//    metric1ActivationTrigger2->set_ttl_seconds(200);
+//
+//    ConfigKey cfgKey1(uid, 12341);
+//    long timeBase1 = 1;
+//    sp<StatsLogProcessor> processor =
+//            CreateStatsLogProcessor(timeBase1, timeBase1, config1, cfgKey1);
+//
+//    // Metric 1 is not active.
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_EQ(1, processor->mMetricsManagers.size());
+//    auto it = processor->mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor->mMetricsManagers.end());
+//    auto& metricsManager1 = it->second;
+//    EXPECT_TRUE(metricsManager1->isActive());
+//
+//    auto metricIt = metricsManager1->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId1) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
+//    auto& metricProducer1 = *metricIt;
+//    EXPECT_FALSE(metricProducer1->isActive());
+//
+//    metricIt = metricsManager1->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId2) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
+//    auto& metricProducer2 = *metricIt;
+//    EXPECT_TRUE(metricProducer2->isActive());
+//
+//    int i = 0;
+//    for (; i < metricsManager1->mAllAtomMatchers.size(); i++) {
+//        if (metricsManager1->mAllAtomMatchers[i]->getId() ==
+//                metric1ActivationTrigger1->atom_matcher_id()) {
+//            break;
+//        }
+//    }
+//    const auto& activation1 = metricProducer1->mEventActivationMap.at(i);
+//    EXPECT_EQ(100 * NS_PER_SEC, activation1->ttl_ns);
+//    EXPECT_EQ(0, activation1->start_ns);
+//    EXPECT_EQ(kNotActive, activation1->state);
+//
+//    i = 0;
+//    for (; i < metricsManager1->mAllAtomMatchers.size(); i++) {
+//        if (metricsManager1->mAllAtomMatchers[i]->getId() ==
+//                metric1ActivationTrigger2->atom_matcher_id()) {
+//            break;
+//        }
+//    }
+//    const auto& activation2 = metricProducer1->mEventActivationMap.at(i);
+//    EXPECT_EQ(200 * NS_PER_SEC, activation2->ttl_ns);
+//    EXPECT_EQ(0, activation2->start_ns);
+//    EXPECT_EQ(kNotActive, activation2->state);
+//    // }}}------------------------------------------------------------------------------
+//
+//    // Trigger Activation 1 for Metric 1
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
+//    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 100 + timeBase1);
+//    processor->OnLogEvent(event.get());
+//
+//    // Metric 1 is not active; Activation 1 set to kActiveOnBoot
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_FALSE(metricProducer1->isActive());
+//    EXPECT_EQ(0, activation1->start_ns);
+//    EXPECT_EQ(kActiveOnBoot, activation1->state);
+//    EXPECT_EQ(0, activation2->start_ns);
+//    EXPECT_EQ(kNotActive, activation2->state);
+//
+//    EXPECT_TRUE(metricProducer2->isActive());
+//    // }}}-----------------------------------------------------------------------------
+//
+//    // Simulate shutdown by saving state to disk
+//    int64_t shutDownTime = timeBase1 + 100 * NS_PER_SEC;
+//    processor->SaveActiveConfigsToDisk(shutDownTime);
+//    EXPECT_FALSE(metricProducer1->isActive());
+//    int64_t ttl1 = metric1ActivationTrigger1->ttl_seconds() * NS_PER_SEC;
+//
+//    // Simulate device restarted state by creating new instance of StatsLogProcessor with the
+//    // same config.
+//    long timeBase2 = 1000;
+//    sp<StatsLogProcessor> processor2 =
+//            CreateStatsLogProcessor(timeBase2, timeBase2, config1, cfgKey1);
+//
+//    // Metric 1 is not active.
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_EQ(1, processor2->mMetricsManagers.size());
+//    it = processor2->mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor2->mMetricsManagers.end());
+//    auto& metricsManager1001 = it->second;
+//    EXPECT_TRUE(metricsManager1001->isActive());
+//
+//    metricIt = metricsManager1001->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId1) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
+//    auto& metricProducer1001 = *metricIt;
+//    EXPECT_FALSE(metricProducer1001->isActive());
+//
+//    metricIt = metricsManager1001->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId2) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
+//    auto& metricProducer1002 = *metricIt;
+//    EXPECT_TRUE(metricProducer1002->isActive());
+//
+//    i = 0;
+//    for (; i < metricsManager1001->mAllAtomMatchers.size(); i++) {
+//        if (metricsManager1001->mAllAtomMatchers[i]->getId() ==
+//                metric1ActivationTrigger1->atom_matcher_id()) {
+//            break;
+//        }
+//    }
+//    const auto& activation1001_1 = metricProducer1001->mEventActivationMap.at(i);
+//    EXPECT_EQ(100 * NS_PER_SEC, activation1001_1->ttl_ns);
+//    EXPECT_EQ(0, activation1001_1->start_ns);
+//    EXPECT_EQ(kNotActive, activation1001_1->state);
+//
+//    i = 0;
+//    for (; i < metricsManager1001->mAllAtomMatchers.size(); i++) {
+//        if (metricsManager1001->mAllAtomMatchers[i]->getId() ==
+//                metric1ActivationTrigger2->atom_matcher_id()) {
+//            break;
+//        }
+//    }
+//
+//    const auto& activation1001_2 = metricProducer1001->mEventActivationMap.at(i);
+//    EXPECT_EQ(200 * NS_PER_SEC, activation1001_2->ttl_ns);
+//    EXPECT_EQ(0, activation1001_2->start_ns);
+//    EXPECT_EQ(kNotActive, activation1001_2->state);
+//    // }}}-----------------------------------------------------------------------------------
+//
+//    // Load saved state from disk.
+//    processor2->LoadActiveConfigsFromDisk();
+//
+//    // Metric 1 active; Activation 1 is active, Activation 2 is not active
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_TRUE(metricProducer1001->isActive());
+//    EXPECT_EQ(timeBase2 + ttl1 - activation1001_1->ttl_ns, activation1001_1->start_ns);
+//    EXPECT_EQ(kActive, activation1001_1->state);
+//    EXPECT_EQ(0, activation1001_2->start_ns);
+//    EXPECT_EQ(kNotActive, activation1001_2->state);
+//
+//    EXPECT_TRUE(metricProducer1002->isActive());
+//    // }}}--------------------------------------------------------------------------------
+//
+//    // Trigger Activation 2 for Metric 1.
+//    auto screenOnEvent = CreateScreenStateChangedEvent(
+//            android::view::DISPLAY_STATE_ON,
+//            timeBase2 + 200
+//    );
+//    processor2->OnLogEvent(screenOnEvent.get());
+//
+//    // Metric 1 active; Activation 1 is active, Activation 2 is set to kActiveOnBoot
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_TRUE(metricProducer1001->isActive());
+//    EXPECT_EQ(timeBase2 + ttl1 - activation1001_1->ttl_ns, activation1001_1->start_ns);
+//    EXPECT_EQ(kActive, activation1001_1->state);
+//    EXPECT_EQ(0, activation1001_2->start_ns);
+//    EXPECT_EQ(kActiveOnBoot, activation1001_2->state);
+//
+//    EXPECT_TRUE(metricProducer1002->isActive());
+//    // }}}---------------------------------------------------------------------------
+//
+//    // Simulate shutdown by saving state to disk
+//    shutDownTime = timeBase2 + 50 * NS_PER_SEC;
+//    processor2->SaveActiveConfigsToDisk(shutDownTime);
+//    EXPECT_TRUE(metricProducer1001->isActive());
+//    EXPECT_TRUE(metricProducer1002->isActive());
+//    ttl1 = timeBase2 + metric1ActivationTrigger1->ttl_seconds() * NS_PER_SEC - shutDownTime;
+//    int64_t ttl2 = metric1ActivationTrigger2->ttl_seconds() * NS_PER_SEC;
+//
+//    // Simulate device restarted state by creating new instance of StatsLogProcessor with the
+//    // same config.
+//    long timeBase3 = timeBase2 + 120 * NS_PER_SEC;
+//    sp<StatsLogProcessor> processor3 =
+//            CreateStatsLogProcessor(timeBase3, timeBase3, config1, cfgKey1);
+//
+//    // Metric 1 is not active.
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_EQ(1, processor3->mMetricsManagers.size());
+//    it = processor3->mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor3->mMetricsManagers.end());
+//    auto& metricsManagerTimeBase3 = it->second;
+//    EXPECT_TRUE(metricsManagerTimeBase3->isActive());
+//
+//    metricIt = metricsManagerTimeBase3->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManagerTimeBase3->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId1) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManagerTimeBase3->mAllMetricProducers.end());
+//    auto& metricProducerTimeBase3_1 = *metricIt;
+//    EXPECT_FALSE(metricProducerTimeBase3_1->isActive());
+//
+//    metricIt = metricsManagerTimeBase3->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManagerTimeBase3->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId2) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManagerTimeBase3->mAllMetricProducers.end());
+//    auto& metricProducerTimeBase3_2 = *metricIt;
+//    EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
+//
+//    i = 0;
+//    for (; i < metricsManagerTimeBase3->mAllAtomMatchers.size(); i++) {
+//        if (metricsManagerTimeBase3->mAllAtomMatchers[i]->getId() ==
+//                metric1ActivationTrigger1->atom_matcher_id()) {
+//            break;
+//        }
+//    }
+//    const auto& activationTimeBase3_1 = metricProducerTimeBase3_1->mEventActivationMap.at(i);
+//    EXPECT_EQ(100 * NS_PER_SEC, activationTimeBase3_1->ttl_ns);
+//    EXPECT_EQ(0, activationTimeBase3_1->start_ns);
+//    EXPECT_EQ(kNotActive, activationTimeBase3_1->state);
+//
+//    i = 0;
+//    for (; i < metricsManagerTimeBase3->mAllAtomMatchers.size(); i++) {
+//        if (metricsManagerTimeBase3->mAllAtomMatchers[i]->getId() ==
+//                metric1ActivationTrigger2->atom_matcher_id()) {
+//            break;
+//        }
+//    }
+//
+//    const auto& activationTimeBase3_2 = metricProducerTimeBase3_1->mEventActivationMap.at(i);
+//    EXPECT_EQ(200 * NS_PER_SEC, activationTimeBase3_2->ttl_ns);
+//    EXPECT_EQ(0, activationTimeBase3_2->start_ns);
+//    EXPECT_EQ(kNotActive, activationTimeBase3_2->state);
+//
+//    EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
+//    // }}}----------------------------------------------------------------------------------
+//
+//    // Load saved state from disk.
+//    processor3->LoadActiveConfigsFromDisk();
+//
+//    // Metric 1 active: Activation 1 is active, Activation 2 is active
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_TRUE(metricProducerTimeBase3_1->isActive());
+//    EXPECT_EQ(timeBase3 + ttl1 - activationTimeBase3_1->ttl_ns, activationTimeBase3_1->start_ns);
+//    EXPECT_EQ(kActive, activationTimeBase3_1->state);
+//    EXPECT_EQ(timeBase3 + ttl2 - activationTimeBase3_2->ttl_ns, activationTimeBase3_2->start_ns);
+//    EXPECT_EQ(kActive, activationTimeBase3_2->state);
+//
+//    EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
+//    // }}}-------------------------------------------------------------------------------
+//
+//    // Trigger Activation 2 for Metric 1 again.
+//    screenOnEvent = CreateScreenStateChangedEvent(
+//            android::view::DISPLAY_STATE_ON,
+//            timeBase3 + 100 * NS_PER_SEC
+//    );
+//    processor3->OnLogEvent(screenOnEvent.get());
+//
+//    // Metric 1 active; Activation 1 is not active, Activation 2 is set to active
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_TRUE(metricProducerTimeBase3_1->isActive());
+//    EXPECT_EQ(kNotActive, activationTimeBase3_1->state);
+//    EXPECT_EQ(timeBase3 + ttl2 - activationTimeBase3_2->ttl_ns, activationTimeBase3_2->start_ns);
+//    EXPECT_EQ(kActive, activationTimeBase3_2->state);
+//
+//    EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
+//    // }}}---------------------------------------------------------------------------
+//
+//    // Simulate shutdown by saving state to disk.
+//    shutDownTime = timeBase3 + 500 * NS_PER_SEC;
+//    processor3->SaveActiveConfigsToDisk(shutDownTime);
+//    EXPECT_TRUE(metricProducer1001->isActive());
+//    EXPECT_TRUE(metricProducer1002->isActive());
+//    ttl1 = timeBase3 + ttl1 - shutDownTime;
+//    ttl2 = timeBase3 + metric1ActivationTrigger2->ttl_seconds() * NS_PER_SEC - shutDownTime;
+//
+//    // Simulate device restarted state by creating new instance of StatsLogProcessor with the
+//    // same config.
+//    long timeBase4 = timeBase3 + 600 * NS_PER_SEC;
+//    sp<StatsLogProcessor> processor4 =
+//            CreateStatsLogProcessor(timeBase4, timeBase4, config1, cfgKey1);
+//
+//    // Metric 1 is not active.
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_EQ(1, processor4->mMetricsManagers.size());
+//    it = processor4->mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor4->mMetricsManagers.end());
+//    auto& metricsManagerTimeBase4 = it->second;
+//    EXPECT_TRUE(metricsManagerTimeBase4->isActive());
+//
+//    metricIt = metricsManagerTimeBase4->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManagerTimeBase4->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId1) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManagerTimeBase4->mAllMetricProducers.end());
+//    auto& metricProducerTimeBase4_1 = *metricIt;
+//    EXPECT_FALSE(metricProducerTimeBase4_1->isActive());
+//
+//    metricIt = metricsManagerTimeBase4->mAllMetricProducers.begin();
+//    for (; metricIt != metricsManagerTimeBase4->mAllMetricProducers.end(); metricIt++) {
+//        if ((*metricIt)->getMetricId() == metricId2) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(metricIt != metricsManagerTimeBase4->mAllMetricProducers.end());
+//    auto& metricProducerTimeBase4_2 = *metricIt;
+//    EXPECT_TRUE(metricProducerTimeBase4_2->isActive());
+//
+//    i = 0;
+//    for (; i < metricsManagerTimeBase4->mAllAtomMatchers.size(); i++) {
+//        if (metricsManagerTimeBase4->mAllAtomMatchers[i]->getId() ==
+//                metric1ActivationTrigger1->atom_matcher_id()) {
+//            break;
+//        }
+//    }
+//    const auto& activationTimeBase4_1 = metricProducerTimeBase4_1->mEventActivationMap.at(i);
+//    EXPECT_EQ(100 * NS_PER_SEC, activationTimeBase4_1->ttl_ns);
+//    EXPECT_EQ(0, activationTimeBase4_1->start_ns);
+//    EXPECT_EQ(kNotActive, activationTimeBase4_1->state);
+//
+//    i = 0;
+//    for (; i < metricsManagerTimeBase4->mAllAtomMatchers.size(); i++) {
+//        if (metricsManagerTimeBase4->mAllAtomMatchers[i]->getId() ==
+//                metric1ActivationTrigger2->atom_matcher_id()) {
+//            break;
+//        }
+//    }
+//
+//    const auto& activationTimeBase4_2 = metricProducerTimeBase4_1->mEventActivationMap.at(i);
+//    EXPECT_EQ(200 * NS_PER_SEC, activationTimeBase4_2->ttl_ns);
+//    EXPECT_EQ(0, activationTimeBase4_2->start_ns);
+//    EXPECT_EQ(kNotActive, activationTimeBase4_2->state);
+//
+//    EXPECT_TRUE(metricProducerTimeBase4_2->isActive());
+//    // }}}----------------------------------------------------------------------------------
+//
+//    // Load saved state from disk.
+//    processor4->LoadActiveConfigsFromDisk();
+//
+//    // Metric 1 active: Activation 1 is not active, Activation 2 is not active
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_FALSE(metricProducerTimeBase4_1->isActive());
+//    EXPECT_EQ(kNotActive, activationTimeBase4_1->state);
+//    EXPECT_EQ(kNotActive, activationTimeBase4_2->state);
+//
+//    EXPECT_TRUE(metricProducerTimeBase4_2->isActive());
+//    // }}}-------------------------------------------------------------------------------
+//}
+//
+//TEST(StatsLogProcessorTest, TestActivationOnBootMultipleActivationsDifferentActivationTypes) {
+//    int uid = 1111;
+//
+//    // Create config with 2 metrics:
+//    // Metric 1: Activate on boot with 2 activations
+//    // Metric 2: Always active
+//    StatsdConfig config1;
+//    config1.set_id(12341);
+//    config1.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
+//    auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
+//    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
+//    *config1.add_atom_matcher() = wakelockAcquireMatcher;
+//    *config1.add_atom_matcher() = screenOnMatcher;
+//
+//    long metricId1 = 1234561;
+//    long metricId2 = 1234562;
+//
+//    auto countMetric1 = config1.add_count_metric();
+//    countMetric1->set_id(metricId1);
+//    countMetric1->set_what(wakelockAcquireMatcher.id());
+//    countMetric1->set_bucket(FIVE_MINUTES);
+//
+//    auto countMetric2 = config1.add_count_metric();
+//    countMetric2->set_id(metricId2);
+//    countMetric2->set_what(wakelockAcquireMatcher.id());
+//    countMetric2->set_bucket(FIVE_MINUTES);
+//
+//    auto metric1Activation = config1.add_metric_activation();
+//    metric1Activation->set_metric_id(metricId1);
+//    metric1Activation->set_activation_type(ACTIVATE_ON_BOOT);
+//    auto metric1ActivationTrigger1 = metric1Activation->add_event_activation();
+//    metric1ActivationTrigger1->set_atom_matcher_id(wakelockAcquireMatcher.id());
+//    metric1ActivationTrigger1->set_ttl_seconds(100);
+//    auto metric1ActivationTrigger2 = metric1Activation->add_event_activation();
+//    metric1ActivationTrigger2->set_atom_matcher_id(screenOnMatcher.id());
+//    metric1ActivationTrigger2->set_ttl_seconds(200);
+//    metric1ActivationTrigger2->set_activation_type(ACTIVATE_IMMEDIATELY);
+//
+//    ConfigKey cfgKey1(uid, 12341);
+//    long timeBase1 = 1;
+//    sp<StatsLogProcessor> processor1 =
+//            CreateStatsLogProcessor(timeBase1, timeBase1, config1, cfgKey1);
+//
+//    // Metric 1 is not active.
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_EQ(1, processor1->mMetricsManagers.size());
+//    auto it = processor1->mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor1->mMetricsManagers.end());
+//    auto& metricsManager1 = it->second;
+//    EXPECT_TRUE(metricsManager1->isActive());
+//
+//    EXPECT_EQ(metricsManager1->mAllMetricProducers.size(), 2);
+//    // We assume that the index of a MetricProducer within the mAllMetricProducers
+//    // array follows the order in which metrics are added to the config.
+//    auto& metricProducer1_1 = metricsManager1->mAllMetricProducers[0];
+//    EXPECT_EQ(metricProducer1_1->getMetricId(), metricId1);
+//    EXPECT_FALSE(metricProducer1_1->isActive());  // inactive due to associated MetricActivation
+//
+//    auto& metricProducer1_2 = metricsManager1->mAllMetricProducers[1];
+//    EXPECT_EQ(metricProducer1_2->getMetricId(), metricId2);
+//    EXPECT_TRUE(metricProducer1_2->isActive());
+//
+//    EXPECT_EQ(metricProducer1_1->mEventActivationMap.size(), 2);
+//    // The key in mEventActivationMap is the index of the associated atom matcher. We assume
+//    // that matchers are indexed in the order that they are added to the config.
+//    const auto& activation1_1_1 = metricProducer1_1->mEventActivationMap.at(0);
+//    EXPECT_EQ(100 * NS_PER_SEC, activation1_1_1->ttl_ns);
+//    EXPECT_EQ(0, activation1_1_1->start_ns);
+//    EXPECT_EQ(kNotActive, activation1_1_1->state);
+//    EXPECT_EQ(ACTIVATE_ON_BOOT, activation1_1_1->activationType);
+//
+//    const auto& activation1_1_2 = metricProducer1_1->mEventActivationMap.at(1);
+//    EXPECT_EQ(200 * NS_PER_SEC, activation1_1_2->ttl_ns);
+//    EXPECT_EQ(0, activation1_1_2->start_ns);
+//    EXPECT_EQ(kNotActive, activation1_1_2->state);
+//    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation1_1_2->activationType);
+//    // }}}------------------------------------------------------------------------------
+//
+//    // Trigger Activation 1 for Metric 1
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
+//    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 100 + timeBase1);
+//    processor1->OnLogEvent(event.get());
+//
+//    // Metric 1 is not active; Activation 1 set to kActiveOnBoot
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_FALSE(metricProducer1_1->isActive());
+//    EXPECT_EQ(0, activation1_1_1->start_ns);
+//    EXPECT_EQ(kActiveOnBoot, activation1_1_1->state);
+//    EXPECT_EQ(0, activation1_1_2->start_ns);
+//    EXPECT_EQ(kNotActive, activation1_1_2->state);
+//
+//    EXPECT_TRUE(metricProducer1_2->isActive());
+//    // }}}-----------------------------------------------------------------------------
+//
+//    // Simulate shutdown by saving state to disk
+//    int64_t shutDownTime = timeBase1 + 100 * NS_PER_SEC;
+//    processor1->SaveActiveConfigsToDisk(shutDownTime);
+//    EXPECT_FALSE(metricProducer1_1->isActive());
+//
+//    // Simulate device restarted state by creating new instance of StatsLogProcessor with the
+//    // same config.
+//    long timeBase2 = 1000;
+//    sp<StatsLogProcessor> processor2 =
+//            CreateStatsLogProcessor(timeBase2, timeBase2, config1, cfgKey1);
+//
+//    // Metric 1 is not active.
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_EQ(1, processor2->mMetricsManagers.size());
+//    it = processor2->mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor2->mMetricsManagers.end());
+//    auto& metricsManager2 = it->second;
+//    EXPECT_TRUE(metricsManager2->isActive());
+//
+//    EXPECT_EQ(metricsManager2->mAllMetricProducers.size(), 2);
+//    // We assume that the index of a MetricProducer within the mAllMetricProducers
+//    // array follows the order in which metrics are added to the config.
+//    auto& metricProducer2_1 = metricsManager2->mAllMetricProducers[0];
+//    EXPECT_EQ(metricProducer2_1->getMetricId(), metricId1);
+//    EXPECT_FALSE(metricProducer2_1->isActive());
+//
+//    auto& metricProducer2_2 = metricsManager2->mAllMetricProducers[1];
+//    EXPECT_EQ(metricProducer2_2->getMetricId(), metricId2);
+//    EXPECT_TRUE(metricProducer2_2->isActive());
+//
+//    EXPECT_EQ(metricProducer2_1->mEventActivationMap.size(), 2);
+//    // The key in mEventActivationMap is the index of the associated atom matcher. We assume
+//    // that matchers are indexed in the order that they are added to the config.
+//    const auto& activation2_1_1 = metricProducer2_1->mEventActivationMap.at(0);
+//    EXPECT_EQ(100 * NS_PER_SEC, activation2_1_1->ttl_ns);
+//    EXPECT_EQ(0, activation2_1_1->start_ns);
+//    EXPECT_EQ(kNotActive, activation2_1_1->state);
+//    EXPECT_EQ(ACTIVATE_ON_BOOT, activation2_1_1->activationType);
+//
+//    const auto& activation2_1_2 = metricProducer2_1->mEventActivationMap.at(1);
+//    EXPECT_EQ(200 * NS_PER_SEC, activation2_1_2->ttl_ns);
+//    EXPECT_EQ(0, activation2_1_2->start_ns);
+//    EXPECT_EQ(kNotActive, activation2_1_2->state);
+//    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation2_1_2->activationType);
+//    // }}}-----------------------------------------------------------------------------------
+//
+//    // Load saved state from disk.
+//    processor2->LoadActiveConfigsFromDisk();
+//
+//    // Metric 1 active; Activation 1 is active, Activation 2 is not active
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_TRUE(metricProducer2_1->isActive());
+//    int64_t ttl1 = metric1ActivationTrigger1->ttl_seconds() * NS_PER_SEC;
+//    EXPECT_EQ(timeBase2 + ttl1 - activation2_1_1->ttl_ns, activation2_1_1->start_ns);
+//    EXPECT_EQ(kActive, activation2_1_1->state);
+//    EXPECT_EQ(0, activation2_1_2->start_ns);
+//    EXPECT_EQ(kNotActive, activation2_1_2->state);
+//
+//    EXPECT_TRUE(metricProducer2_2->isActive());
+//    // }}}--------------------------------------------------------------------------------
+//
+//    // Trigger Activation 2 for Metric 1.
+//    auto screenOnEvent = CreateScreenStateChangedEvent(
+//            android::view::DISPLAY_STATE_ON,
+//            timeBase2 + 200
+//    );
+//    processor2->OnLogEvent(screenOnEvent.get());
+//
+//    // Metric 1 active; Activation 1 is active, Activation 2 is active
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_TRUE(metricProducer2_1->isActive());
+//    EXPECT_EQ(timeBase2 + ttl1 - activation2_1_1->ttl_ns, activation2_1_1->start_ns);
+//    EXPECT_EQ(kActive, activation2_1_1->state);
+//    EXPECT_EQ(screenOnEvent->GetElapsedTimestampNs(), activation2_1_2->start_ns);
+//    EXPECT_EQ(kActive, activation2_1_2->state);
+//
+//    EXPECT_TRUE(metricProducer2_2->isActive());
+//    // }}}---------------------------------------------------------------------------
+//
+//    // Simulate shutdown by saving state to disk
+//    shutDownTime = timeBase2 + 50 * NS_PER_SEC;
+//    processor2->SaveActiveConfigsToDisk(shutDownTime);
+//    EXPECT_TRUE(metricProducer2_1->isActive());
+//    EXPECT_TRUE(metricProducer2_2->isActive());
+//    ttl1 -= shutDownTime - timeBase2;
+//    int64_t ttl2 = metric1ActivationTrigger2->ttl_seconds() * NS_PER_SEC
+//            - (shutDownTime - screenOnEvent->GetElapsedTimestampNs());
+//
+//    // Simulate device restarted state by creating new instance of StatsLogProcessor with the
+//    // same config.
+//    long timeBase3 = timeBase2 + 120 * NS_PER_SEC;
+//    sp<StatsLogProcessor> processor3 =
+//            CreateStatsLogProcessor(timeBase3, timeBase3, config1, cfgKey1);
+//
+//    // Metric 1 is not active.
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_EQ(1, processor3->mMetricsManagers.size());
+//    it = processor3->mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor3->mMetricsManagers.end());
+//    auto& metricsManager3 = it->second;
+//    EXPECT_TRUE(metricsManager3->isActive());
+//
+//    EXPECT_EQ(metricsManager3->mAllMetricProducers.size(), 2);
+//    // We assume that the index of a MetricProducer within the mAllMetricProducers
+//    // array follows the order in which metrics are added to the config.
+//    auto& metricProducer3_1 = metricsManager3->mAllMetricProducers[0];
+//    EXPECT_EQ(metricProducer3_1->getMetricId(), metricId1);
+//    EXPECT_FALSE(metricProducer3_1->isActive());
+//
+//    auto& metricProducer3_2 = metricsManager3->mAllMetricProducers[1];
+//    EXPECT_EQ(metricProducer3_2->getMetricId(), metricId2);
+//    EXPECT_TRUE(metricProducer3_2->isActive());
+//
+//    EXPECT_EQ(metricProducer3_1->mEventActivationMap.size(), 2);
+//    // The key in mEventActivationMap is the index of the associated atom matcher. We assume
+//    // that matchers are indexed in the order that they are added to the config.
+//    const auto& activation3_1_1 = metricProducer3_1->mEventActivationMap.at(0);
+//    EXPECT_EQ(100 * NS_PER_SEC, activation3_1_1->ttl_ns);
+//    EXPECT_EQ(0, activation3_1_1->start_ns);
+//    EXPECT_EQ(kNotActive, activation3_1_1->state);
+//    EXPECT_EQ(ACTIVATE_ON_BOOT, activation3_1_1->activationType);
+//
+//    const auto& activation3_1_2 = metricProducer3_1->mEventActivationMap.at(1);
+//    EXPECT_EQ(200 * NS_PER_SEC, activation3_1_2->ttl_ns);
+//    EXPECT_EQ(0, activation3_1_2->start_ns);
+//    EXPECT_EQ(kNotActive, activation3_1_2->state);
+//    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation3_1_2->activationType);
+//    // }}}----------------------------------------------------------------------------------
+//
+//    // Load saved state from disk.
+//    processor3->LoadActiveConfigsFromDisk();
+//
+//    // Metric 1 active: Activation 1 is active, Activation 2 is active
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_TRUE(metricProducer3_1->isActive());
+//    EXPECT_EQ(timeBase3 + ttl1 - activation3_1_1->ttl_ns, activation3_1_1->start_ns);
+//    EXPECT_EQ(kActive, activation3_1_1->state);
+//    EXPECT_EQ(timeBase3 + ttl2 - activation3_1_2->ttl_ns, activation3_1_2->start_ns);
+//    EXPECT_EQ(kActive, activation3_1_2->state);
+//
+//    EXPECT_TRUE(metricProducer3_2->isActive());
+//    // }}}-------------------------------------------------------------------------------
+//
+//
+//    // Trigger Activation 2 for Metric 1 again.
+//    screenOnEvent = CreateScreenStateChangedEvent(
+//            android::view::DISPLAY_STATE_ON,
+//            timeBase3 + 100 * NS_PER_SEC
+//    );
+//    processor3->OnLogEvent(screenOnEvent.get());
+//
+//    // Metric 1 active; Activation 1 is inactive (above screenOnEvent causes ttl1 to expire),
+//    //                  Activation 2 is set to active
+//    // Metric 2 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_TRUE(metricProducer3_1->isActive());
+//    EXPECT_EQ(kNotActive, activation3_1_1->state);
+//    EXPECT_EQ(screenOnEvent->GetElapsedTimestampNs(), activation3_1_2->start_ns);
+//    EXPECT_EQ(kActive, activation3_1_2->state);
+//
+//    EXPECT_TRUE(metricProducer3_2->isActive());
+//    // }}}---------------------------------------------------------------------------
+//}
+//
+//TEST(StatsLogProcessorTest, TestActivationsPersistAcrossSystemServerRestart) {
+//    int uid = 9876;
+//    long configId = 12341;
+//
+//    // Create config with 3 metrics:
+//    // Metric 1: Activate on 2 activations, 1 on boot, 1 immediate.
+//    // Metric 2: Activate on 2 activations, 1 on boot, 1 immediate.
+//    // Metric 3: Always active
+//    StatsdConfig config1;
+//    config1.set_id(configId);
+//    config1.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
+//    auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
+//    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
+//    auto jobStartMatcher = CreateStartScheduledJobAtomMatcher();
+//    auto jobFinishMatcher = CreateFinishScheduledJobAtomMatcher();
+//    *config1.add_atom_matcher() = wakelockAcquireMatcher;
+//    *config1.add_atom_matcher() = screenOnMatcher;
+//    *config1.add_atom_matcher() = jobStartMatcher;
+//    *config1.add_atom_matcher() = jobFinishMatcher;
+//
+//    long metricId1 = 1234561;
+//    long metricId2 = 1234562;
+//    long metricId3 = 1234563;
+//
+//    auto countMetric1 = config1.add_count_metric();
+//    countMetric1->set_id(metricId1);
+//    countMetric1->set_what(wakelockAcquireMatcher.id());
+//    countMetric1->set_bucket(FIVE_MINUTES);
+//
+//    auto countMetric2 = config1.add_count_metric();
+//    countMetric2->set_id(metricId2);
+//    countMetric2->set_what(wakelockAcquireMatcher.id());
+//    countMetric2->set_bucket(FIVE_MINUTES);
+//
+//    auto countMetric3 = config1.add_count_metric();
+//    countMetric3->set_id(metricId3);
+//    countMetric3->set_what(wakelockAcquireMatcher.id());
+//    countMetric3->set_bucket(FIVE_MINUTES);
+//
+//    // Metric 1 activates on boot for wakelock acquire, immediately for screen on.
+//    auto metric1Activation = config1.add_metric_activation();
+//    metric1Activation->set_metric_id(metricId1);
+//    auto metric1ActivationTrigger1 = metric1Activation->add_event_activation();
+//    metric1ActivationTrigger1->set_atom_matcher_id(wakelockAcquireMatcher.id());
+//    metric1ActivationTrigger1->set_ttl_seconds(100);
+//    metric1ActivationTrigger1->set_activation_type(ACTIVATE_ON_BOOT);
+//    auto metric1ActivationTrigger2 = metric1Activation->add_event_activation();
+//    metric1ActivationTrigger2->set_atom_matcher_id(screenOnMatcher.id());
+//    metric1ActivationTrigger2->set_ttl_seconds(200);
+//    metric1ActivationTrigger2->set_activation_type(ACTIVATE_IMMEDIATELY);
+//
+//    // Metric 2 activates on boot for scheduled job start, immediately for scheduled job finish.
+//    auto metric2Activation = config1.add_metric_activation();
+//    metric2Activation->set_metric_id(metricId2);
+//    auto metric2ActivationTrigger1 = metric2Activation->add_event_activation();
+//    metric2ActivationTrigger1->set_atom_matcher_id(jobStartMatcher.id());
+//    metric2ActivationTrigger1->set_ttl_seconds(100);
+//    metric2ActivationTrigger1->set_activation_type(ACTIVATE_ON_BOOT);
+//    auto metric2ActivationTrigger2 = metric2Activation->add_event_activation();
+//    metric2ActivationTrigger2->set_atom_matcher_id(jobFinishMatcher.id());
+//    metric2ActivationTrigger2->set_ttl_seconds(200);
+//    metric2ActivationTrigger2->set_activation_type(ACTIVATE_IMMEDIATELY);
+//
+//    // Send the config.
+//    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
+//    string serialized = config1.SerializeAsString();
+//    service->addConfigurationChecked(uid, configId, {serialized.begin(), serialized.end()});
+//
+//    // Make sure the config is stored on disk. Otherwise, we will not reset on system server death.
+//    StatsdConfig tmpConfig;
+//    ConfigKey cfgKey1(uid, configId);
+//    EXPECT_TRUE(StorageManager::readConfigFromDisk(cfgKey1, &tmpConfig));
+//
+//    // Metric 1 is not active.
+//    // Metric 2 is not active.
+//    // Metric 3 is active.
+//    // {{{---------------------------------------------------------------------------
+//    sp<StatsLogProcessor> processor = service->mProcessor;
+//    EXPECT_EQ(1, processor->mMetricsManagers.size());
+//    auto it = processor->mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor->mMetricsManagers.end());
+//    auto& metricsManager1 = it->second;
+//    EXPECT_TRUE(metricsManager1->isActive());
+//    EXPECT_EQ(3, metricsManager1->mAllMetricProducers.size());
+//
+//    auto& metricProducer1 = metricsManager1->mAllMetricProducers[0];
+//    EXPECT_EQ(metricId1, metricProducer1->getMetricId());
+//    EXPECT_FALSE(metricProducer1->isActive());
+//
+//    auto& metricProducer2 = metricsManager1->mAllMetricProducers[1];
+//    EXPECT_EQ(metricId2, metricProducer2->getMetricId());
+//    EXPECT_FALSE(metricProducer2->isActive());
+//
+//    auto& metricProducer3 = metricsManager1->mAllMetricProducers[2];
+//    EXPECT_EQ(metricId3, metricProducer3->getMetricId());
+//    EXPECT_TRUE(metricProducer3->isActive());
+//
+//    // Check event activations.
+//    EXPECT_EQ(metricsManager1->mAllAtomMatchers.size(), 4);
+//    EXPECT_EQ(metricsManager1->mAllAtomMatchers[0]->getId(),
+//              metric1ActivationTrigger1->atom_matcher_id());
+//    const auto& activation1 = metricProducer1->mEventActivationMap.at(0);
+//    EXPECT_EQ(100 * NS_PER_SEC, activation1->ttl_ns);
+//    EXPECT_EQ(0, activation1->start_ns);
+//    EXPECT_EQ(kNotActive, activation1->state);
+//    EXPECT_EQ(ACTIVATE_ON_BOOT, activation1->activationType);
+//
+//    EXPECT_EQ(metricsManager1->mAllAtomMatchers[1]->getId(),
+//              metric1ActivationTrigger2->atom_matcher_id());
+//    const auto& activation2 = metricProducer1->mEventActivationMap.at(1);
+//    EXPECT_EQ(200 * NS_PER_SEC, activation2->ttl_ns);
+//    EXPECT_EQ(0, activation2->start_ns);
+//    EXPECT_EQ(kNotActive, activation2->state);
+//    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation2->activationType);
+//
+//    EXPECT_EQ(metricsManager1->mAllAtomMatchers[2]->getId(),
+//              metric2ActivationTrigger1->atom_matcher_id());
+//    const auto& activation3 = metricProducer2->mEventActivationMap.at(2);
+//    EXPECT_EQ(100 * NS_PER_SEC, activation3->ttl_ns);
+//    EXPECT_EQ(0, activation3->start_ns);
+//    EXPECT_EQ(kNotActive, activation3->state);
+//    EXPECT_EQ(ACTIVATE_ON_BOOT, activation3->activationType);
+//
+//    EXPECT_EQ(metricsManager1->mAllAtomMatchers[3]->getId(),
+//              metric2ActivationTrigger2->atom_matcher_id());
+//    const auto& activation4 = metricProducer2->mEventActivationMap.at(3);
+//    EXPECT_EQ(200 * NS_PER_SEC, activation4->ttl_ns);
+//    EXPECT_EQ(0, activation4->start_ns);
+//    EXPECT_EQ(kNotActive, activation4->state);
+//    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation4->activationType);
+//    // }}}------------------------------------------------------------------------------
+//
+//    // Trigger Activation 1 for Metric 1. Should activate on boot.
+//    // Trigger Activation 4 for Metric 2. Should activate immediately.
+//    long configAddedTimeNs = metricsManager1->mLastReportTimeNs;
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
+//    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 1 + configAddedTimeNs);
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateFinishScheduledJobEvent(attributions1, "finish1", 2 + configAddedTimeNs);
+//    processor->OnLogEvent(event.get());
+//
+//    // Metric 1 is not active; Activation 1 set to kActiveOnBoot
+//    // Metric 2 is active. Activation 4 set to kActive
+//    // Metric 3 is active.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_FALSE(metricProducer1->isActive());
+//    EXPECT_EQ(0, activation1->start_ns);
+//    EXPECT_EQ(kActiveOnBoot, activation1->state);
+//    EXPECT_EQ(0, activation2->start_ns);
+//    EXPECT_EQ(kNotActive, activation2->state);
+//
+//    EXPECT_TRUE(metricProducer2->isActive());
+//    EXPECT_EQ(0, activation3->start_ns);
+//    EXPECT_EQ(kNotActive, activation3->state);
+//    EXPECT_EQ(2 + configAddedTimeNs, activation4->start_ns);
+//    EXPECT_EQ(kActive, activation4->state);
+//
+//    EXPECT_TRUE(metricProducer3->isActive());
+//    // }}}-----------------------------------------------------------------------------
+//
+//    // Can't fake time with StatsService.
+//    // Lets get a time close to the system server death time and make sure it's sane.
+//    int64_t approximateSystemServerDeath = getElapsedRealtimeNs();
+//    EXPECT_TRUE(approximateSystemServerDeath > 2 + configAddedTimeNs);
+//    EXPECT_TRUE(approximateSystemServerDeath < NS_PER_SEC + configAddedTimeNs);
+//
+//    // System server dies.
+//    service->statsCompanionServiceDiedImpl();
+//
+//    // We should have a new metrics manager. Lets get it and ensure activation status is restored.
+//    // {{{---------------------------------------------------------------------------
+//    EXPECT_EQ(1, processor->mMetricsManagers.size());
+//    it = processor->mMetricsManagers.find(cfgKey1);
+//    EXPECT_TRUE(it != processor->mMetricsManagers.end());
+//    auto& metricsManager2 = it->second;
+//    EXPECT_TRUE(metricsManager2->isActive());
+//    EXPECT_EQ(3, metricsManager2->mAllMetricProducers.size());
+//
+//    auto& metricProducer1001 = metricsManager2->mAllMetricProducers[0];
+//    EXPECT_EQ(metricId1, metricProducer1001->getMetricId());
+//    EXPECT_FALSE(metricProducer1001->isActive());
+//
+//    auto& metricProducer1002 = metricsManager2->mAllMetricProducers[1];
+//    EXPECT_EQ(metricId2, metricProducer1002->getMetricId());
+//    EXPECT_TRUE(metricProducer1002->isActive());
+//
+//    auto& metricProducer1003 = metricsManager2->mAllMetricProducers[2];
+//    EXPECT_EQ(metricId3, metricProducer1003->getMetricId());
+//    EXPECT_TRUE(metricProducer1003->isActive());
+//
+//    // Check event activations.
+//    // Activation 1 is kActiveOnBoot.
+//    // Activation 2 and 3 are not active.
+//    // Activation 4 is active.
+//    EXPECT_EQ(metricsManager2->mAllAtomMatchers.size(), 4);
+//    EXPECT_EQ(metricsManager2->mAllAtomMatchers[0]->getId(),
+//              metric1ActivationTrigger1->atom_matcher_id());
+//    const auto& activation1001 = metricProducer1001->mEventActivationMap.at(0);
+//    EXPECT_EQ(100 * NS_PER_SEC, activation1001->ttl_ns);
+//    EXPECT_EQ(0, activation1001->start_ns);
+//    EXPECT_EQ(kActiveOnBoot, activation1001->state);
+//    EXPECT_EQ(ACTIVATE_ON_BOOT, activation1001->activationType);
+//
+//    EXPECT_EQ(metricsManager2->mAllAtomMatchers[1]->getId(),
+//              metric1ActivationTrigger2->atom_matcher_id());
+//    const auto& activation1002 = metricProducer1001->mEventActivationMap.at(1);
+//    EXPECT_EQ(200 * NS_PER_SEC, activation1002->ttl_ns);
+//    EXPECT_EQ(0, activation1002->start_ns);
+//    EXPECT_EQ(kNotActive, activation1002->state);
+//    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation1002->activationType);
+//
+//    EXPECT_EQ(metricsManager2->mAllAtomMatchers[2]->getId(),
+//              metric2ActivationTrigger1->atom_matcher_id());
+//    const auto& activation1003 = metricProducer1002->mEventActivationMap.at(2);
+//    EXPECT_EQ(100 * NS_PER_SEC, activation1003->ttl_ns);
+//    EXPECT_EQ(0, activation1003->start_ns);
+//    EXPECT_EQ(kNotActive, activation1003->state);
+//    EXPECT_EQ(ACTIVATE_ON_BOOT, activation1003->activationType);
+//
+//    EXPECT_EQ(metricsManager2->mAllAtomMatchers[3]->getId(),
+//              metric2ActivationTrigger2->atom_matcher_id());
+//    const auto& activation1004 = metricProducer1002->mEventActivationMap.at(3);
+//    EXPECT_EQ(200 * NS_PER_SEC, activation1004->ttl_ns);
+//    EXPECT_EQ(2 + configAddedTimeNs, activation1004->start_ns);
+//    EXPECT_EQ(kActive, activation1004->state);
+//    EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation1004->activationType);
+//    // }}}------------------------------------------------------------------------------
+//
+//    // Clear the data stored on disk as a result of the system server death.
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey1, configAddedTimeNs + NS_PER_SEC, false, true,
+//                                ADB_DUMP, FAST, &buffer);
+//}
 
 #else
 GTEST_LOG_(INFO) << "This test does nothing.\n";
diff --git a/cmds/statsd/tests/StatsService_test.cpp b/cmds/statsd/tests/StatsService_test.cpp
index 7c00531..86f786e 100644
--- a/cmds/statsd/tests/StatsService_test.cpp
+++ b/cmds/statsd/tests/StatsService_test.cpp
@@ -16,6 +16,7 @@
 #include "config/ConfigKey.h"
 #include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
 
+#include <android/binder_interface_utils.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
@@ -29,33 +30,34 @@
 namespace statsd {
 
 using android::util::ProtoOutputStream;
+using ::ndk::SharedRefBase;
 
 #ifdef __ANDROID__
 
 TEST(StatsServiceTest, TestAddConfig_simple) {
-    StatsService service(nullptr, nullptr);
+    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
     StatsdConfig config;
     config.set_id(12345);
     string serialized = config.SerializeAsString();
 
     EXPECT_TRUE(
-            service.addConfigurationChecked(123, 12345, {serialized.begin(), serialized.end()}));
+            service->addConfigurationChecked(123, 12345, {serialized.begin(), serialized.end()}));
 }
 
 TEST(StatsServiceTest, TestAddConfig_empty) {
-    StatsService service(nullptr, nullptr);
+    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
     string serialized = "";
 
     EXPECT_TRUE(
-            service.addConfigurationChecked(123, 12345, {serialized.begin(), serialized.end()}));
+            service->addConfigurationChecked(123, 12345, {serialized.begin(), serialized.end()}));
 }
 
 TEST(StatsServiceTest, TestAddConfig_invalid) {
-    StatsService service(nullptr, nullptr);
+    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
     string serialized = "Invalid config!";
 
     EXPECT_FALSE(
-            service.addConfigurationChecked(123, 12345, {serialized.begin(), serialized.end()}));
+            service->addConfigurationChecked(123, 12345, {serialized.begin(), serialized.end()}));
 }
 
 TEST(StatsServiceTest, TestGetUidFromArgs) {
@@ -69,32 +71,32 @@
 
     int32_t uid;
 
-    StatsService service(nullptr, nullptr);
-    service.mEngBuild = true;
+    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
+    service->mEngBuild = true;
 
     // "-1"
-    EXPECT_FALSE(service.getUidFromArgs(args, 0, uid));
+    EXPECT_FALSE(service->getUidFromArgs(args, 0, uid));
 
     // "0"
-    EXPECT_TRUE(service.getUidFromArgs(args, 1, uid));
+    EXPECT_TRUE(service->getUidFromArgs(args, 1, uid));
     EXPECT_EQ(0, uid);
 
     // "1"
-    EXPECT_TRUE(service.getUidFromArgs(args, 2, uid));
+    EXPECT_TRUE(service->getUidFromArgs(args, 2, uid));
     EXPECT_EQ(1, uid);
 
     // "999999999999999999"
-    EXPECT_FALSE(service.getUidFromArgs(args, 3, uid));
+    EXPECT_FALSE(service->getUidFromArgs(args, 3, uid));
 
     // "a1"
-    EXPECT_FALSE(service.getUidFromArgs(args, 4, uid));
+    EXPECT_FALSE(service->getUidFromArgs(args, 4, uid));
 
     // ""
-    EXPECT_FALSE(service.getUidFromArgs(args, 5, uid));
+    EXPECT_FALSE(service->getUidFromArgs(args, 5, uid));
 
     // For a non-userdebug, uid "1" cannot be impersonated.
-    service.mEngBuild = false;
-    EXPECT_FALSE(service.getUidFromArgs(args, 2, uid));
+    service->mEngBuild = false;
+    EXPECT_FALSE(service->getUidFromArgs(args, 2, uid));
 }
 
 #else
diff --git a/cmds/statsd/tests/UidMap_test.cpp b/cmds/statsd/tests/UidMap_test.cpp
index d9fa4e9..af6de06 100644
--- a/cmds/statsd/tests/UidMap_test.cpp
+++ b/cmds/statsd/tests/UidMap_test.cpp
@@ -39,34 +39,35 @@
 const string kApp1 = "app1.sharing.1";
 const string kApp2 = "app2.sharing.1";
 
-TEST(UidMapTest, TestIsolatedUID) {
-    sp<UidMap> m = new UidMap();
-    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
-    sp<AlarmMonitor> anomalyAlarmMonitor;
-    sp<AlarmMonitor> subscriberAlarmMonitor;
-    // Construct the processor with a dummy sendBroadcast function that does nothing.
-    StatsLogProcessor p(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor, 0,
-                        [](const ConfigKey& key) { return true; },
-                        [](const int&, const vector<int64_t>&) {return true;});
-    LogEvent addEvent(android::util::ISOLATED_UID_CHANGED, 1);
-    addEvent.write(100);  // parent UID
-    addEvent.write(101);  // isolated UID
-    addEvent.write(1);    // Indicates creation.
-    addEvent.init();
-
-    EXPECT_EQ(101, m->getHostUidOrSelf(101));
-
-    p.OnLogEvent(&addEvent);
-    EXPECT_EQ(100, m->getHostUidOrSelf(101));
-
-    LogEvent removeEvent(android::util::ISOLATED_UID_CHANGED, 1);
-    removeEvent.write(100);  // parent UID
-    removeEvent.write(101);  // isolated UID
-    removeEvent.write(0);    // Indicates removal.
-    removeEvent.init();
-    p.OnLogEvent(&removeEvent);
-    EXPECT_EQ(101, m->getHostUidOrSelf(101));
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(UidMapTest, TestIsolatedUID) {
+//    sp<UidMap> m = new UidMap();
+//    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
+//    sp<AlarmMonitor> anomalyAlarmMonitor;
+//    sp<AlarmMonitor> subscriberAlarmMonitor;
+//    // Construct the processor with a dummy sendBroadcast function that does nothing.
+//    StatsLogProcessor p(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor, 0,
+//                        [](const ConfigKey& key) { return true; },
+//                        [](const int&, const vector<int64_t>&) {return true;});
+//    LogEvent addEvent(android::util::ISOLATED_UID_CHANGED, 1);
+//    addEvent.write(100);  // parent UID
+//    addEvent.write(101);  // isolated UID
+//    addEvent.write(1);    // Indicates creation.
+//    addEvent.init();
+//
+//    EXPECT_EQ(101, m->getHostUidOrSelf(101));
+//
+//    p.OnLogEvent(&addEvent);
+//    EXPECT_EQ(100, m->getHostUidOrSelf(101));
+//
+//    LogEvent removeEvent(android::util::ISOLATED_UID_CHANGED, 1);
+//    removeEvent.write(100);  // parent UID
+//    removeEvent.write(101);  // isolated UID
+//    removeEvent.write(0);    // Indicates removal.
+//    removeEvent.init();
+//    p.OnLogEvent(&removeEvent);
+//    EXPECT_EQ(101, m->getHostUidOrSelf(101));
+//}
 
 TEST(UidMapTest, TestMatching) {
     UidMap m;
diff --git a/cmds/statsd/tests/anomaly/AlarmTracker_test.cpp b/cmds/statsd/tests/anomaly/AlarmTracker_test.cpp
index 5e6de1c..90ffcd0 100644
--- a/cmds/statsd/tests/anomaly/AlarmTracker_test.cpp
+++ b/cmds/statsd/tests/anomaly/AlarmTracker_test.cpp
@@ -15,12 +15,14 @@
 #include "src/anomaly/AlarmTracker.h"
 
 #include <gtest/gtest.h>
+#include <log/log_time.h>
 #include <stdio.h>
 #include <vector>
 
 using namespace testing;
 using android::sp;
 using std::set;
+using std::shared_ptr;
 using std::unordered_map;
 using std::vector;
 
@@ -34,8 +36,9 @@
 
 TEST(AlarmTrackerTest, TestTriggerTimestamp) {
     sp<AlarmMonitor> subscriberAlarmMonitor =
-        new AlarmMonitor(100, [](const sp<IStatsCompanionService>&, int64_t){},
-                         [](const sp<IStatsCompanionService>&){});
+        new AlarmMonitor(100,
+                         [](const shared_ptr<IStatsCompanionService>&, int64_t){},
+                         [](const shared_ptr<IStatsCompanionService>&){});
     Alarm alarm;
     alarm.set_offset_millis(15 * MS_PER_SEC);
     alarm.set_period_millis(60 * 60 * MS_PER_SEC);  // 1hr
diff --git a/cmds/statsd/tests/condition/SimpleConditionTracker_test.cpp b/cmds/statsd/tests/condition/SimpleConditionTracker_test.cpp
index 6eaa231..36094b2 100644
--- a/cmds/statsd/tests/condition/SimpleConditionTracker_test.cpp
+++ b/cmds/statsd/tests/condition/SimpleConditionTracker_test.cpp
@@ -67,13 +67,14 @@
     event->write(nodes);  // attribution chain.
 }
 
-void makeWakeLockEvent(
-        LogEvent* event, const std::vector<int> &uids, const string& wl, int acquire) {
-    writeAttributionNodesToEvent(event, uids);
-    event->write(wl);
-    event->write(acquire);
-    event->init();
-}
+// TODO(b/149590301): Update this helper to use new socket schema.
+//void makeWakeLockEvent(
+//        LogEvent* event, const std::vector<int> &uids, const string& wl, int acquire) {
+//    writeAttributionNodesToEvent(event, uids);
+//    event->write(wl);
+//    event->write(acquire);
+//    event->init();
+//}
 
 std::map<int64_t, HashableDimensionKey> getWakeLockQueryKey(
     const Position position,
@@ -264,377 +265,378 @@
     EXPECT_TRUE(changedCache[0]);
 }
 
-TEST(SimpleConditionTrackerTest, TestSlicedCondition) {
-    std::vector<sp<ConditionTracker>> allConditions;
-    for (Position position :
-            { Position::FIRST, Position::LAST}) {
-
-        SimplePredicate simplePredicate = getWakeLockHeldCondition(
-                true /*nesting*/, true /*default to false*/, true /*output slice by uid*/,
-                position);
-        string conditionName = "WL_HELD_BY_UID2";
-
-        unordered_map<int64_t, int> trackerNameIndexMap;
-        trackerNameIndexMap[StringToId("WAKE_LOCK_ACQUIRE")] = 0;
-        trackerNameIndexMap[StringToId("WAKE_LOCK_RELEASE")] = 1;
-        trackerNameIndexMap[StringToId("RELEASE_ALL")] = 2;
-
-        SimpleConditionTracker conditionTracker(kConfigKey, StringToId(conditionName),
-                                                0 /*condition tracker index*/, simplePredicate,
-                                                trackerNameIndexMap);
-
-        std::vector<int> uids = {111, 222, 333};
-
-        LogEvent event(1 /*tagId*/, 0 /*timestamp*/);
-        makeWakeLockEvent(&event, uids, "wl1", 1);
-
-        // one matched start
-        vector<MatchingState> matcherState;
-        matcherState.push_back(MatchingState::kMatched);
-        matcherState.push_back(MatchingState::kNotMatched);
-        matcherState.push_back(MatchingState::kNotMatched);
-        vector<sp<ConditionTracker>> allPredicates;
-        vector<ConditionState> conditionCache(1, ConditionState::kNotEvaluated);
-        vector<bool> changedCache(1, false);
-
-        conditionTracker.evaluateCondition(event, matcherState, allPredicates, conditionCache,
-                                           changedCache);
-
-        if (position == Position::FIRST ||
-            position == Position::LAST) {
-            EXPECT_EQ(1UL, conditionTracker.mSlicedConditionState.size());
-        } else {
-            EXPECT_EQ(uids.size(), conditionTracker.mSlicedConditionState.size());
-        }
-        EXPECT_TRUE(changedCache[0]);
-        if (position == Position::FIRST ||
-            position == Position::LAST) {
-            EXPECT_EQ(conditionTracker.getChangedToTrueDimensions(allConditions)->size(), 1u);
-            EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
-        } else {
-            EXPECT_EQ(conditionTracker.getChangedToTrueDimensions(allConditions)->size(), uids.size());
-        }
-
-        // Now test query
-        const auto queryKey = getWakeLockQueryKey(position, uids, conditionName);
-        conditionCache[0] = ConditionState::kNotEvaluated;
-
-        conditionTracker.isConditionMet(queryKey, allPredicates,
-                                        false,
-                                        conditionCache);
-        EXPECT_EQ(ConditionState::kTrue, conditionCache[0]);
-
-        // another wake lock acquired by this uid
-        LogEvent event2(1 /*tagId*/, 0 /*timestamp*/);
-        makeWakeLockEvent(&event2, uids, "wl2", 1);
-        matcherState.clear();
-        matcherState.push_back(MatchingState::kMatched);
-        matcherState.push_back(MatchingState::kNotMatched);
-        conditionCache[0] = ConditionState::kNotEvaluated;
-        changedCache[0] = false;
-        conditionTracker.evaluateCondition(event2, matcherState, allPredicates, conditionCache,
-                                           changedCache);
-        EXPECT_FALSE(changedCache[0]);
-        if (position == Position::FIRST ||
-            position == Position::LAST) {
-            EXPECT_EQ(1UL, conditionTracker.mSlicedConditionState.size());
-        } else {
-            EXPECT_EQ(uids.size(), conditionTracker.mSlicedConditionState.size());
-        }
-        EXPECT_TRUE(conditionTracker.getChangedToTrueDimensions(allConditions)->empty());
-        EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
-
-
-        // wake lock 1 release
-        LogEvent event3(1 /*tagId*/, 0 /*timestamp*/);
-        makeWakeLockEvent(&event3, uids, "wl1", 0);  // now release it.
-        matcherState.clear();
-        matcherState.push_back(MatchingState::kNotMatched);
-        matcherState.push_back(MatchingState::kMatched);
-        conditionCache[0] = ConditionState::kNotEvaluated;
-        changedCache[0] = false;
-        conditionTracker.evaluateCondition(event3, matcherState, allPredicates, conditionCache,
-                                           changedCache);
-        // nothing changes, because wake lock 2 is still held for this uid
-        EXPECT_FALSE(changedCache[0]);
-        if (position == Position::FIRST ||
-            position == Position::LAST) {
-            EXPECT_EQ(1UL, conditionTracker.mSlicedConditionState.size());
-        } else {
-            EXPECT_EQ(uids.size(), conditionTracker.mSlicedConditionState.size());
-        }
-        EXPECT_TRUE(conditionTracker.getChangedToTrueDimensions(allConditions)->empty());
-        EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
-
-        LogEvent event4(1 /*tagId*/, 0 /*timestamp*/);
-        makeWakeLockEvent(&event4, uids, "wl2", 0);  // now release it.
-        matcherState.clear();
-        matcherState.push_back(MatchingState::kNotMatched);
-        matcherState.push_back(MatchingState::kMatched);
-        conditionCache[0] = ConditionState::kNotEvaluated;
-        changedCache[0] = false;
-        conditionTracker.evaluateCondition(event4, matcherState, allPredicates, conditionCache,
-                                           changedCache);
-        EXPECT_EQ(0UL, conditionTracker.mSlicedConditionState.size());
-        EXPECT_TRUE(changedCache[0]);
-        if (position == Position::FIRST ||
-            position == Position::LAST) {
-            EXPECT_EQ(conditionTracker.getChangedToFalseDimensions(allConditions)->size(), 1u);
-            EXPECT_TRUE(conditionTracker.getChangedToTrueDimensions(allConditions)->empty());
-        } else {
-            EXPECT_EQ(conditionTracker.getChangedToFalseDimensions(allConditions)->size(), uids.size());
-        }
-
-        // query again
-        conditionCache[0] = ConditionState::kNotEvaluated;
-        conditionTracker.isConditionMet(queryKey, allPredicates,
-                                        false,
-                                        conditionCache);
-        EXPECT_EQ(ConditionState::kFalse, conditionCache[0]);
-    }
-
-}
-
-TEST(SimpleConditionTrackerTest, TestSlicedWithNoOutputDim) {
-    std::vector<sp<ConditionTracker>> allConditions;
-
-    SimplePredicate simplePredicate = getWakeLockHeldCondition(
-            true /*nesting*/, true /*default to false*/, false /*slice output by uid*/,
-            Position::ANY /* position */);
-    string conditionName = "WL_HELD";
-
-    unordered_map<int64_t, int> trackerNameIndexMap;
-    trackerNameIndexMap[StringToId("WAKE_LOCK_ACQUIRE")] = 0;
-    trackerNameIndexMap[StringToId("WAKE_LOCK_RELEASE")] = 1;
-    trackerNameIndexMap[StringToId("RELEASE_ALL")] = 2;
-
-    SimpleConditionTracker conditionTracker(kConfigKey, StringToId(conditionName),
-                                            0 /*condition tracker index*/, simplePredicate,
-                                            trackerNameIndexMap);
-
-    EXPECT_FALSE(conditionTracker.isSliced());
-
-    std::vector<int> uid_list1 = {111, 1111, 11111};
-    string uid1_wl1 = "wl1_1";
-    std::vector<int> uid_list2 = {222, 2222, 22222};
-    string uid2_wl1 = "wl2_1";
-
-    LogEvent event(1 /*tagId*/, 0 /*timestamp*/);
-    makeWakeLockEvent(&event, uid_list1, uid1_wl1, 1);
-
-    // one matched start for uid1
-    vector<MatchingState> matcherState;
-    matcherState.push_back(MatchingState::kMatched);
-    matcherState.push_back(MatchingState::kNotMatched);
-    matcherState.push_back(MatchingState::kNotMatched);
-    vector<sp<ConditionTracker>> allPredicates;
-    vector<ConditionState> conditionCache(1, ConditionState::kNotEvaluated);
-    vector<bool> changedCache(1, false);
-
-    conditionTracker.evaluateCondition(event, matcherState, allPredicates, conditionCache,
-                                       changedCache);
-
-    EXPECT_EQ(1UL, conditionTracker.mSlicedConditionState.size());
-    EXPECT_TRUE(changedCache[0]);
-
-    // Now test query
-    ConditionKey queryKey;
-    conditionCache[0] = ConditionState::kNotEvaluated;
-
-    conditionTracker.isConditionMet(queryKey, allPredicates,
-                                    true,
-                                    conditionCache);
-    EXPECT_EQ(ConditionState::kTrue, conditionCache[0]);
-
-    // another wake lock acquired by this uid
-    LogEvent event2(1 /*tagId*/, 0 /*timestamp*/);
-    makeWakeLockEvent(&event2, uid_list2, uid2_wl1, 1);
-    matcherState.clear();
-    matcherState.push_back(MatchingState::kMatched);
-    matcherState.push_back(MatchingState::kNotMatched);
-    conditionCache[0] = ConditionState::kNotEvaluated;
-    changedCache[0] = false;
-    conditionTracker.evaluateCondition(event2, matcherState, allPredicates, conditionCache,
-                                       changedCache);
-    EXPECT_FALSE(changedCache[0]);
-
-    // uid1 wake lock 1 release
-    LogEvent event3(1 /*tagId*/, 0 /*timestamp*/);
-    makeWakeLockEvent(&event3, uid_list1, uid1_wl1, 0);  // now release it.
-    matcherState.clear();
-    matcherState.push_back(MatchingState::kNotMatched);
-    matcherState.push_back(MatchingState::kMatched);
-    conditionCache[0] = ConditionState::kNotEvaluated;
-    changedCache[0] = false;
-    conditionTracker.evaluateCondition(event3, matcherState, allPredicates, conditionCache,
-                                       changedCache);
-    // nothing changes, because uid2 is still holding wl.
-    EXPECT_FALSE(changedCache[0]);
-
-    LogEvent event4(1 /*tagId*/, 0 /*timestamp*/);
-    makeWakeLockEvent(&event4, uid_list2, uid2_wl1, 0);  // now release it.
-    matcherState.clear();
-    matcherState.push_back(MatchingState::kNotMatched);
-    matcherState.push_back(MatchingState::kMatched);
-    conditionCache[0] = ConditionState::kNotEvaluated;
-    changedCache[0] = false;
-    conditionTracker.evaluateCondition(event4, matcherState, allPredicates, conditionCache,
-                                       changedCache);
-    EXPECT_EQ(0UL, conditionTracker.mSlicedConditionState.size());
-    EXPECT_TRUE(changedCache[0]);
-
-    // query again
-    conditionCache[0] = ConditionState::kNotEvaluated;
-    conditionTracker.isConditionMet(queryKey, allPredicates,
-                                    true,
-                                    conditionCache);
-    EXPECT_EQ(ConditionState::kFalse, conditionCache[0]);
-}
-
-TEST(SimpleConditionTrackerTest, TestStopAll) {
-    std::vector<sp<ConditionTracker>> allConditions;
-    for (Position position :
-            { Position::FIRST, Position::LAST }) {
-        SimplePredicate simplePredicate = getWakeLockHeldCondition(
-                true /*nesting*/, true /*default to false*/, true /*output slice by uid*/,
-                position);
-        string conditionName = "WL_HELD_BY_UID3";
-
-        unordered_map<int64_t, int> trackerNameIndexMap;
-        trackerNameIndexMap[StringToId("WAKE_LOCK_ACQUIRE")] = 0;
-        trackerNameIndexMap[StringToId("WAKE_LOCK_RELEASE")] = 1;
-        trackerNameIndexMap[StringToId("RELEASE_ALL")] = 2;
-
-        SimpleConditionTracker conditionTracker(kConfigKey, StringToId(conditionName),
-                                                0 /*condition tracker index*/, simplePredicate,
-                                                trackerNameIndexMap);
-
-        std::vector<int> uid_list1 = {111, 1111, 11111};
-        std::vector<int> uid_list2 = {222, 2222, 22222};
-
-        LogEvent event(1 /*tagId*/, 0 /*timestamp*/);
-        makeWakeLockEvent(&event, uid_list1, "wl1", 1);
-
-        // one matched start
-        vector<MatchingState> matcherState;
-        matcherState.push_back(MatchingState::kMatched);
-        matcherState.push_back(MatchingState::kNotMatched);
-        matcherState.push_back(MatchingState::kNotMatched);
-        vector<sp<ConditionTracker>> allPredicates;
-        vector<ConditionState> conditionCache(1, ConditionState::kNotEvaluated);
-        vector<bool> changedCache(1, false);
-
-        conditionTracker.evaluateCondition(event, matcherState, allPredicates, conditionCache,
-                                           changedCache);
-        if (position == Position::FIRST ||
-            position == Position::LAST) {
-            EXPECT_EQ(1UL, conditionTracker.mSlicedConditionState.size());
-        } else {
-            EXPECT_EQ(uid_list1.size(), conditionTracker.mSlicedConditionState.size());
-        }
-        EXPECT_TRUE(changedCache[0]);
-        {
-            if (position == Position::FIRST ||
-                position == Position::LAST) {
-                EXPECT_EQ(1UL, conditionTracker.getChangedToTrueDimensions(allConditions)->size());
-                EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
-            } else {
-                EXPECT_EQ(uid_list1.size(), conditionTracker.getChangedToTrueDimensions(allConditions)->size());
-                EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
-            }
-        }
-
-        // Now test query
-        const auto queryKey = getWakeLockQueryKey(position, uid_list1, conditionName);
-        conditionCache[0] = ConditionState::kNotEvaluated;
-
-        conditionTracker.isConditionMet(queryKey, allPredicates,
-                                        false,
-                                        conditionCache);
-        EXPECT_EQ(ConditionState::kTrue, conditionCache[0]);
-
-        // another wake lock acquired by uid2
-        LogEvent event2(1 /*tagId*/, 0 /*timestamp*/);
-        makeWakeLockEvent(&event2, uid_list2, "wl2", 1);
-        matcherState.clear();
-        matcherState.push_back(MatchingState::kMatched);
-        matcherState.push_back(MatchingState::kNotMatched);
-        matcherState.push_back(MatchingState::kNotMatched);
-        conditionCache[0] = ConditionState::kNotEvaluated;
-        changedCache[0] = false;
-        conditionTracker.evaluateCondition(event2, matcherState, allPredicates, conditionCache,
-                                           changedCache);
-        if (position == Position::FIRST ||
-            position == Position::LAST) {
-            EXPECT_EQ(2UL, conditionTracker.mSlicedConditionState.size());
-        } else {
-            EXPECT_EQ(uid_list1.size() + uid_list2.size(),
-                      conditionTracker.mSlicedConditionState.size());
-        }
-        EXPECT_TRUE(changedCache[0]);
-        {
-            if (position == Position::FIRST ||
-                position == Position::LAST) {
-                EXPECT_EQ(1UL, conditionTracker.getChangedToTrueDimensions(allConditions)->size());
-                EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
-            } else {
-                EXPECT_EQ(uid_list2.size(), conditionTracker.getChangedToTrueDimensions(allConditions)->size());
-                EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
-            }
-        }
-
-
-        // TEST QUERY
-        const auto queryKey2 = getWakeLockQueryKey(position, uid_list2, conditionName);
-        conditionCache[0] = ConditionState::kNotEvaluated;
-        conditionTracker.isConditionMet(queryKey, allPredicates,
-                                        false,
-                                        conditionCache);
-
-        EXPECT_EQ(ConditionState::kTrue, conditionCache[0]);
-
-
-        // stop all event
-        LogEvent event3(2 /*tagId*/, 0 /*timestamp*/);
-        matcherState.clear();
-        matcherState.push_back(MatchingState::kNotMatched);
-        matcherState.push_back(MatchingState::kNotMatched);
-        matcherState.push_back(MatchingState::kMatched);
-
-        conditionCache[0] = ConditionState::kNotEvaluated;
-        changedCache[0] = false;
-        conditionTracker.evaluateCondition(event3, matcherState, allPredicates, conditionCache,
-                                           changedCache);
-        EXPECT_TRUE(changedCache[0]);
-        EXPECT_EQ(0UL, conditionTracker.mSlicedConditionState.size());
-        {
-            if (position == Position::FIRST || position == Position::LAST) {
-                EXPECT_EQ(2UL, conditionTracker.getChangedToFalseDimensions(allConditions)->size());
-                EXPECT_TRUE(conditionTracker.getChangedToTrueDimensions(allConditions)->empty());
-            } else {
-                EXPECT_EQ(uid_list1.size() + uid_list2.size(),
-                          conditionTracker.getChangedToFalseDimensions(allConditions)->size());
-                EXPECT_TRUE(conditionTracker.getChangedToTrueDimensions(allConditions)->empty());
-            }
-        }
-
-        // TEST QUERY
-        const auto queryKey3 = getWakeLockQueryKey(position, uid_list1, conditionName);
-        conditionCache[0] = ConditionState::kNotEvaluated;
-        conditionTracker.isConditionMet(queryKey, allPredicates,
-                                        false,
-                                        conditionCache);
-        EXPECT_EQ(ConditionState::kFalse, conditionCache[0]);
-
-        // TEST QUERY
-        const auto queryKey4 = getWakeLockQueryKey(position, uid_list2, conditionName);
-        conditionCache[0] = ConditionState::kNotEvaluated;
-        conditionTracker.isConditionMet(queryKey, allPredicates,
-                                        false,
-                                        conditionCache);
-        EXPECT_EQ(ConditionState::kFalse, conditionCache[0]);
-    }
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//TEST(SimpleConditionTrackerTest, TestSlicedCondition) {
+//    std::vector<sp<ConditionTracker>> allConditions;
+//    for (Position position :
+//            { Position::FIRST, Position::LAST}) {
+//
+//        SimplePredicate simplePredicate = getWakeLockHeldCondition(
+//                true /*nesting*/, true /*default to false*/, true /*output slice by uid*/,
+//                position);
+//        string conditionName = "WL_HELD_BY_UID2";
+//
+//        unordered_map<int64_t, int> trackerNameIndexMap;
+//        trackerNameIndexMap[StringToId("WAKE_LOCK_ACQUIRE")] = 0;
+//        trackerNameIndexMap[StringToId("WAKE_LOCK_RELEASE")] = 1;
+//        trackerNameIndexMap[StringToId("RELEASE_ALL")] = 2;
+//
+//        SimpleConditionTracker conditionTracker(kConfigKey, StringToId(conditionName),
+//                                                0 /*condition tracker index*/, simplePredicate,
+//                                                trackerNameIndexMap);
+//
+//        std::vector<int> uids = {111, 222, 333};
+//
+//        LogEvent event(1 /*tagId*/, 0 /*timestamp*/);
+//        makeWakeLockEvent(&event, uids, "wl1", 1);
+//
+//        // one matched start
+//        vector<MatchingState> matcherState;
+//        matcherState.push_back(MatchingState::kMatched);
+//        matcherState.push_back(MatchingState::kNotMatched);
+//        matcherState.push_back(MatchingState::kNotMatched);
+//        vector<sp<ConditionTracker>> allPredicates;
+//        vector<ConditionState> conditionCache(1, ConditionState::kNotEvaluated);
+//        vector<bool> changedCache(1, false);
+//
+//        conditionTracker.evaluateCondition(event, matcherState, allPredicates, conditionCache,
+//                                           changedCache);
+//
+//        if (position == Position::FIRST ||
+//            position == Position::LAST) {
+//            EXPECT_EQ(1UL, conditionTracker.mSlicedConditionState.size());
+//        } else {
+//            EXPECT_EQ(uids.size(), conditionTracker.mSlicedConditionState.size());
+//        }
+//        EXPECT_TRUE(changedCache[0]);
+//        if (position == Position::FIRST ||
+//            position == Position::LAST) {
+//            EXPECT_EQ(conditionTracker.getChangedToTrueDimensions(allConditions)->size(), 1u);
+//            EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
+//        } else {
+//            EXPECT_EQ(conditionTracker.getChangedToTrueDimensions(allConditions)->size(), uids.size());
+//        }
+//
+//        // Now test query
+//        const auto queryKey = getWakeLockQueryKey(position, uids, conditionName);
+//        conditionCache[0] = ConditionState::kNotEvaluated;
+//
+//        conditionTracker.isConditionMet(queryKey, allPredicates,
+//                                        false,
+//                                        conditionCache);
+//        EXPECT_EQ(ConditionState::kTrue, conditionCache[0]);
+//
+//        // another wake lock acquired by this uid
+//        LogEvent event2(1 /*tagId*/, 0 /*timestamp*/);
+//        makeWakeLockEvent(&event2, uids, "wl2", 1);
+//        matcherState.clear();
+//        matcherState.push_back(MatchingState::kMatched);
+//        matcherState.push_back(MatchingState::kNotMatched);
+//        conditionCache[0] = ConditionState::kNotEvaluated;
+//        changedCache[0] = false;
+//        conditionTracker.evaluateCondition(event2, matcherState, allPredicates, conditionCache,
+//                                           changedCache);
+//        EXPECT_FALSE(changedCache[0]);
+//        if (position == Position::FIRST ||
+//            position == Position::LAST) {
+//            EXPECT_EQ(1UL, conditionTracker.mSlicedConditionState.size());
+//        } else {
+//            EXPECT_EQ(uids.size(), conditionTracker.mSlicedConditionState.size());
+//        }
+//        EXPECT_TRUE(conditionTracker.getChangedToTrueDimensions(allConditions)->empty());
+//        EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
+//
+//
+//        // wake lock 1 release
+//        LogEvent event3(1 /*tagId*/, 0 /*timestamp*/);
+//        makeWakeLockEvent(&event3, uids, "wl1", 0);  // now release it.
+//        matcherState.clear();
+//        matcherState.push_back(MatchingState::kNotMatched);
+//        matcherState.push_back(MatchingState::kMatched);
+//        conditionCache[0] = ConditionState::kNotEvaluated;
+//        changedCache[0] = false;
+//        conditionTracker.evaluateCondition(event3, matcherState, allPredicates, conditionCache,
+//                                           changedCache);
+//        // nothing changes, because wake lock 2 is still held for this uid
+//        EXPECT_FALSE(changedCache[0]);
+//        if (position == Position::FIRST ||
+//            position == Position::LAST) {
+//            EXPECT_EQ(1UL, conditionTracker.mSlicedConditionState.size());
+//        } else {
+//            EXPECT_EQ(uids.size(), conditionTracker.mSlicedConditionState.size());
+//        }
+//        EXPECT_TRUE(conditionTracker.getChangedToTrueDimensions(allConditions)->empty());
+//        EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
+//
+//        LogEvent event4(1 /*tagId*/, 0 /*timestamp*/);
+//        makeWakeLockEvent(&event4, uids, "wl2", 0);  // now release it.
+//        matcherState.clear();
+//        matcherState.push_back(MatchingState::kNotMatched);
+//        matcherState.push_back(MatchingState::kMatched);
+//        conditionCache[0] = ConditionState::kNotEvaluated;
+//        changedCache[0] = false;
+//        conditionTracker.evaluateCondition(event4, matcherState, allPredicates, conditionCache,
+//                                           changedCache);
+//        EXPECT_EQ(0UL, conditionTracker.mSlicedConditionState.size());
+//        EXPECT_TRUE(changedCache[0]);
+//        if (position == Position::FIRST ||
+//            position == Position::LAST) {
+//            EXPECT_EQ(conditionTracker.getChangedToFalseDimensions(allConditions)->size(), 1u);
+//            EXPECT_TRUE(conditionTracker.getChangedToTrueDimensions(allConditions)->empty());
+//        } else {
+//            EXPECT_EQ(conditionTracker.getChangedToFalseDimensions(allConditions)->size(), uids.size());
+//        }
+//
+//        // query again
+//        conditionCache[0] = ConditionState::kNotEvaluated;
+//        conditionTracker.isConditionMet(queryKey, allPredicates,
+//                                        false,
+//                                        conditionCache);
+//        EXPECT_EQ(ConditionState::kFalse, conditionCache[0]);
+//    }
+//
+//}
+//
+//TEST(SimpleConditionTrackerTest, TestSlicedWithNoOutputDim) {
+//    std::vector<sp<ConditionTracker>> allConditions;
+//
+//    SimplePredicate simplePredicate = getWakeLockHeldCondition(
+//            true /*nesting*/, true /*default to false*/, false /*slice output by uid*/,
+//            Position::ANY /* position */);
+//    string conditionName = "WL_HELD";
+//
+//    unordered_map<int64_t, int> trackerNameIndexMap;
+//    trackerNameIndexMap[StringToId("WAKE_LOCK_ACQUIRE")] = 0;
+//    trackerNameIndexMap[StringToId("WAKE_LOCK_RELEASE")] = 1;
+//    trackerNameIndexMap[StringToId("RELEASE_ALL")] = 2;
+//
+//    SimpleConditionTracker conditionTracker(kConfigKey, StringToId(conditionName),
+//                                            0 /*condition tracker index*/, simplePredicate,
+//                                            trackerNameIndexMap);
+//
+//    EXPECT_FALSE(conditionTracker.isSliced());
+//
+//    std::vector<int> uid_list1 = {111, 1111, 11111};
+//    string uid1_wl1 = "wl1_1";
+//    std::vector<int> uid_list2 = {222, 2222, 22222};
+//    string uid2_wl1 = "wl2_1";
+//
+//    LogEvent event(1 /*tagId*/, 0 /*timestamp*/);
+//    makeWakeLockEvent(&event, uid_list1, uid1_wl1, 1);
+//
+//    // one matched start for uid1
+//    vector<MatchingState> matcherState;
+//    matcherState.push_back(MatchingState::kMatched);
+//    matcherState.push_back(MatchingState::kNotMatched);
+//    matcherState.push_back(MatchingState::kNotMatched);
+//    vector<sp<ConditionTracker>> allPredicates;
+//    vector<ConditionState> conditionCache(1, ConditionState::kNotEvaluated);
+//    vector<bool> changedCache(1, false);
+//
+//    conditionTracker.evaluateCondition(event, matcherState, allPredicates, conditionCache,
+//                                       changedCache);
+//
+//    EXPECT_EQ(1UL, conditionTracker.mSlicedConditionState.size());
+//    EXPECT_TRUE(changedCache[0]);
+//
+//    // Now test query
+//    ConditionKey queryKey;
+//    conditionCache[0] = ConditionState::kNotEvaluated;
+//
+//    conditionTracker.isConditionMet(queryKey, allPredicates,
+//                                    true,
+//                                    conditionCache);
+//    EXPECT_EQ(ConditionState::kTrue, conditionCache[0]);
+//
+//    // another wake lock acquired by this uid
+//    LogEvent event2(1 /*tagId*/, 0 /*timestamp*/);
+//    makeWakeLockEvent(&event2, uid_list2, uid2_wl1, 1);
+//    matcherState.clear();
+//    matcherState.push_back(MatchingState::kMatched);
+//    matcherState.push_back(MatchingState::kNotMatched);
+//    conditionCache[0] = ConditionState::kNotEvaluated;
+//    changedCache[0] = false;
+//    conditionTracker.evaluateCondition(event2, matcherState, allPredicates, conditionCache,
+//                                       changedCache);
+//    EXPECT_FALSE(changedCache[0]);
+//
+//    // uid1 wake lock 1 release
+//    LogEvent event3(1 /*tagId*/, 0 /*timestamp*/);
+//    makeWakeLockEvent(&event3, uid_list1, uid1_wl1, 0);  // now release it.
+//    matcherState.clear();
+//    matcherState.push_back(MatchingState::kNotMatched);
+//    matcherState.push_back(MatchingState::kMatched);
+//    conditionCache[0] = ConditionState::kNotEvaluated;
+//    changedCache[0] = false;
+//    conditionTracker.evaluateCondition(event3, matcherState, allPredicates, conditionCache,
+//                                       changedCache);
+//    // nothing changes, because uid2 is still holding wl.
+//    EXPECT_FALSE(changedCache[0]);
+//
+//    LogEvent event4(1 /*tagId*/, 0 /*timestamp*/);
+//    makeWakeLockEvent(&event4, uid_list2, uid2_wl1, 0);  // now release it.
+//    matcherState.clear();
+//    matcherState.push_back(MatchingState::kNotMatched);
+//    matcherState.push_back(MatchingState::kMatched);
+//    conditionCache[0] = ConditionState::kNotEvaluated;
+//    changedCache[0] = false;
+//    conditionTracker.evaluateCondition(event4, matcherState, allPredicates, conditionCache,
+//                                       changedCache);
+//    EXPECT_EQ(0UL, conditionTracker.mSlicedConditionState.size());
+//    EXPECT_TRUE(changedCache[0]);
+//
+//    // query again
+//    conditionCache[0] = ConditionState::kNotEvaluated;
+//    conditionTracker.isConditionMet(queryKey, allPredicates,
+//                                    true,
+//                                    conditionCache);
+//    EXPECT_EQ(ConditionState::kFalse, conditionCache[0]);
+//}
+//
+//TEST(SimpleConditionTrackerTest, TestStopAll) {
+//    std::vector<sp<ConditionTracker>> allConditions;
+//    for (Position position :
+//            { Position::FIRST, Position::LAST }) {
+//        SimplePredicate simplePredicate = getWakeLockHeldCondition(
+//                true /*nesting*/, true /*default to false*/, true /*output slice by uid*/,
+//                position);
+//        string conditionName = "WL_HELD_BY_UID3";
+//
+//        unordered_map<int64_t, int> trackerNameIndexMap;
+//        trackerNameIndexMap[StringToId("WAKE_LOCK_ACQUIRE")] = 0;
+//        trackerNameIndexMap[StringToId("WAKE_LOCK_RELEASE")] = 1;
+//        trackerNameIndexMap[StringToId("RELEASE_ALL")] = 2;
+//
+//        SimpleConditionTracker conditionTracker(kConfigKey, StringToId(conditionName),
+//                                                0 /*condition tracker index*/, simplePredicate,
+//                                                trackerNameIndexMap);
+//
+//        std::vector<int> uid_list1 = {111, 1111, 11111};
+//        std::vector<int> uid_list2 = {222, 2222, 22222};
+//
+//        LogEvent event(1 /*tagId*/, 0 /*timestamp*/);
+//        makeWakeLockEvent(&event, uid_list1, "wl1", 1);
+//
+//        // one matched start
+//        vector<MatchingState> matcherState;
+//        matcherState.push_back(MatchingState::kMatched);
+//        matcherState.push_back(MatchingState::kNotMatched);
+//        matcherState.push_back(MatchingState::kNotMatched);
+//        vector<sp<ConditionTracker>> allPredicates;
+//        vector<ConditionState> conditionCache(1, ConditionState::kNotEvaluated);
+//        vector<bool> changedCache(1, false);
+//
+//        conditionTracker.evaluateCondition(event, matcherState, allPredicates, conditionCache,
+//                                           changedCache);
+//        if (position == Position::FIRST ||
+//            position == Position::LAST) {
+//            EXPECT_EQ(1UL, conditionTracker.mSlicedConditionState.size());
+//        } else {
+//            EXPECT_EQ(uid_list1.size(), conditionTracker.mSlicedConditionState.size());
+//        }
+//        EXPECT_TRUE(changedCache[0]);
+//        {
+//            if (position == Position::FIRST ||
+//                position == Position::LAST) {
+//                EXPECT_EQ(1UL, conditionTracker.getChangedToTrueDimensions(allConditions)->size());
+//                EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
+//            } else {
+//                EXPECT_EQ(uid_list1.size(), conditionTracker.getChangedToTrueDimensions(allConditions)->size());
+//                EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
+//            }
+//        }
+//
+//        // Now test query
+//        const auto queryKey = getWakeLockQueryKey(position, uid_list1, conditionName);
+//        conditionCache[0] = ConditionState::kNotEvaluated;
+//
+//        conditionTracker.isConditionMet(queryKey, allPredicates,
+//                                        false,
+//                                        conditionCache);
+//        EXPECT_EQ(ConditionState::kTrue, conditionCache[0]);
+//
+//        // another wake lock acquired by uid2
+//        LogEvent event2(1 /*tagId*/, 0 /*timestamp*/);
+//        makeWakeLockEvent(&event2, uid_list2, "wl2", 1);
+//        matcherState.clear();
+//        matcherState.push_back(MatchingState::kMatched);
+//        matcherState.push_back(MatchingState::kNotMatched);
+//        matcherState.push_back(MatchingState::kNotMatched);
+//        conditionCache[0] = ConditionState::kNotEvaluated;
+//        changedCache[0] = false;
+//        conditionTracker.evaluateCondition(event2, matcherState, allPredicates, conditionCache,
+//                                           changedCache);
+//        if (position == Position::FIRST ||
+//            position == Position::LAST) {
+//            EXPECT_EQ(2UL, conditionTracker.mSlicedConditionState.size());
+//        } else {
+//            EXPECT_EQ(uid_list1.size() + uid_list2.size(),
+//                      conditionTracker.mSlicedConditionState.size());
+//        }
+//        EXPECT_TRUE(changedCache[0]);
+//        {
+//            if (position == Position::FIRST ||
+//                position == Position::LAST) {
+//                EXPECT_EQ(1UL, conditionTracker.getChangedToTrueDimensions(allConditions)->size());
+//                EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
+//            } else {
+//                EXPECT_EQ(uid_list2.size(), conditionTracker.getChangedToTrueDimensions(allConditions)->size());
+//                EXPECT_TRUE(conditionTracker.getChangedToFalseDimensions(allConditions)->empty());
+//            }
+//        }
+//
+//
+//        // TEST QUERY
+//        const auto queryKey2 = getWakeLockQueryKey(position, uid_list2, conditionName);
+//        conditionCache[0] = ConditionState::kNotEvaluated;
+//        conditionTracker.isConditionMet(queryKey, allPredicates,
+//                                        false,
+//                                        conditionCache);
+//
+//        EXPECT_EQ(ConditionState::kTrue, conditionCache[0]);
+//
+//
+//        // stop all event
+//        LogEvent event3(2 /*tagId*/, 0 /*timestamp*/);
+//        matcherState.clear();
+//        matcherState.push_back(MatchingState::kNotMatched);
+//        matcherState.push_back(MatchingState::kNotMatched);
+//        matcherState.push_back(MatchingState::kMatched);
+//
+//        conditionCache[0] = ConditionState::kNotEvaluated;
+//        changedCache[0] = false;
+//        conditionTracker.evaluateCondition(event3, matcherState, allPredicates, conditionCache,
+//                                           changedCache);
+//        EXPECT_TRUE(changedCache[0]);
+//        EXPECT_EQ(0UL, conditionTracker.mSlicedConditionState.size());
+//        {
+//            if (position == Position::FIRST || position == Position::LAST) {
+//                EXPECT_EQ(2UL, conditionTracker.getChangedToFalseDimensions(allConditions)->size());
+//                EXPECT_TRUE(conditionTracker.getChangedToTrueDimensions(allConditions)->empty());
+//            } else {
+//                EXPECT_EQ(uid_list1.size() + uid_list2.size(),
+//                          conditionTracker.getChangedToFalseDimensions(allConditions)->size());
+//                EXPECT_TRUE(conditionTracker.getChangedToTrueDimensions(allConditions)->empty());
+//            }
+//        }
+//
+//        // TEST QUERY
+//        const auto queryKey3 = getWakeLockQueryKey(position, uid_list1, conditionName);
+//        conditionCache[0] = ConditionState::kNotEvaluated;
+//        conditionTracker.isConditionMet(queryKey, allPredicates,
+//                                        false,
+//                                        conditionCache);
+//        EXPECT_EQ(ConditionState::kFalse, conditionCache[0]);
+//
+//        // TEST QUERY
+//        const auto queryKey4 = getWakeLockQueryKey(position, uid_list2, conditionName);
+//        conditionCache[0] = ConditionState::kNotEvaluated;
+//        conditionTracker.isConditionMet(queryKey, allPredicates,
+//                                        false,
+//                                        conditionCache);
+//        EXPECT_EQ(ConditionState::kFalse, conditionCache[0]);
+//    }
+//}
 
 }  // namespace statsd
 }  // namespace os
diff --git a/cmds/statsd/tests/condition/StateConditionTracker_test.cpp b/cmds/statsd/tests/condition/StateConditionTracker_test.cpp
index fbf6efd..86b50ae8 100644
--- a/cmds/statsd/tests/condition/StateConditionTracker_test.cpp
+++ b/cmds/statsd/tests/condition/StateConditionTracker_test.cpp
@@ -44,65 +44,66 @@
     return simplePredicate;
 }
 
-void makeUidProcStateEvent(int32_t uid, int32_t state, LogEvent* event) {
-    event->write(uid);
-    event->write(state);
-    event->init();
-}
-
-TEST(StateConditionTrackerTest, TestStateChange) {
-    int uid1 = 111;
-    int uid2 = 222;
-
-    int state1 = 1001;
-    int state2 = 1002;
-    unordered_map<int64_t, int> trackerNameIndexMap;
-    trackerNameIndexMap[StringToId("UidProcState")] = 0;
-    vector<Matcher> primaryFields;
-    primaryFields.push_back(getSimpleMatcher(kUidProcTag, 1));
-    StateConditionTracker tracker(ConfigKey(12, 123), 123, 0, getUidProcStatePredicate(),
-                         trackerNameIndexMap, primaryFields);
-
-    LogEvent event(kUidProcTag, 0 /*timestamp*/);
-    makeUidProcStateEvent(uid1, state1, &event);
-
-    vector<MatchingState> matcherState;
-    matcherState.push_back(MatchingState::kMatched);
-    vector<sp<ConditionTracker>> allPredicates;
-    vector<ConditionState> conditionCache(1, ConditionState::kNotEvaluated);
-    vector<bool> changedCache(1, false);
-
-    tracker.evaluateCondition(event, matcherState, allPredicates, conditionCache, changedCache);
-    EXPECT_EQ(1ULL, tracker.mLastChangedToTrueDimensions.size());
-    EXPECT_EQ(0ULL, tracker.mLastChangedToFalseDimensions.size());
-    EXPECT_TRUE(changedCache[0]);
-
-    changedCache[0] = false;
-    conditionCache[0] = ConditionState::kNotEvaluated;
-    tracker.evaluateCondition(event, matcherState, allPredicates, conditionCache, changedCache);
-    EXPECT_EQ(0ULL, tracker.mLastChangedToTrueDimensions.size());
-    EXPECT_EQ(0ULL, tracker.mLastChangedToFalseDimensions.size());
-    EXPECT_FALSE(changedCache[0]);
-
-    LogEvent event2(kUidProcTag, 0 /*timestamp*/);
-    makeUidProcStateEvent(uid1, state2, &event2);
-
-    changedCache[0] = false;
-    conditionCache[0] = ConditionState::kNotEvaluated;
-    tracker.evaluateCondition(event2, matcherState, allPredicates, conditionCache, changedCache);
-    EXPECT_EQ(1ULL, tracker.mLastChangedToTrueDimensions.size());
-    EXPECT_EQ(1ULL, tracker.mLastChangedToFalseDimensions.size());
-    EXPECT_TRUE(changedCache[0]);
-
-    LogEvent event3(kUidProcTag, 0 /*timestamp*/);
-    makeUidProcStateEvent(uid2, state1, &event3);
-    changedCache[0] = false;
-    conditionCache[0] = ConditionState::kNotEvaluated;
-    tracker.evaluateCondition(event3, matcherState, allPredicates, conditionCache, changedCache);
-    EXPECT_EQ(1ULL, tracker.mLastChangedToTrueDimensions.size());
-    EXPECT_EQ(0ULL, tracker.mLastChangedToFalseDimensions.size());
-    EXPECT_TRUE(changedCache[0]);
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//void makeUidProcStateEvent(int32_t uid, int32_t state, LogEvent* event) {
+//    event->write(uid);
+//    event->write(state);
+//    event->init();
+//}
+//
+//TEST(StateConditionTrackerTest, TestStateChange) {
+//    int uid1 = 111;
+//    int uid2 = 222;
+//
+//    int state1 = 1001;
+//    int state2 = 1002;
+//    unordered_map<int64_t, int> trackerNameIndexMap;
+//    trackerNameIndexMap[StringToId("UidProcState")] = 0;
+//    vector<Matcher> primaryFields;
+//    primaryFields.push_back(getSimpleMatcher(kUidProcTag, 1));
+//    StateConditionTracker tracker(ConfigKey(12, 123), 123, 0, getUidProcStatePredicate(),
+//                         trackerNameIndexMap, primaryFields);
+//
+//    LogEvent event(kUidProcTag, 0 /*timestamp*/);
+//    makeUidProcStateEvent(uid1, state1, &event);
+//
+//    vector<MatchingState> matcherState;
+//    matcherState.push_back(MatchingState::kMatched);
+//    vector<sp<ConditionTracker>> allPredicates;
+//    vector<ConditionState> conditionCache(1, ConditionState::kNotEvaluated);
+//    vector<bool> changedCache(1, false);
+//
+//    tracker.evaluateCondition(event, matcherState, allPredicates, conditionCache, changedCache);
+//    EXPECT_EQ(1ULL, tracker.mLastChangedToTrueDimensions.size());
+//    EXPECT_EQ(0ULL, tracker.mLastChangedToFalseDimensions.size());
+//    EXPECT_TRUE(changedCache[0]);
+//
+//    changedCache[0] = false;
+//    conditionCache[0] = ConditionState::kNotEvaluated;
+//    tracker.evaluateCondition(event, matcherState, allPredicates, conditionCache, changedCache);
+//    EXPECT_EQ(0ULL, tracker.mLastChangedToTrueDimensions.size());
+//    EXPECT_EQ(0ULL, tracker.mLastChangedToFalseDimensions.size());
+//    EXPECT_FALSE(changedCache[0]);
+//
+//    LogEvent event2(kUidProcTag, 0 /*timestamp*/);
+//    makeUidProcStateEvent(uid1, state2, &event2);
+//
+//    changedCache[0] = false;
+//    conditionCache[0] = ConditionState::kNotEvaluated;
+//    tracker.evaluateCondition(event2, matcherState, allPredicates, conditionCache, changedCache);
+//    EXPECT_EQ(1ULL, tracker.mLastChangedToTrueDimensions.size());
+//    EXPECT_EQ(1ULL, tracker.mLastChangedToFalseDimensions.size());
+//    EXPECT_TRUE(changedCache[0]);
+//
+//    LogEvent event3(kUidProcTag, 0 /*timestamp*/);
+//    makeUidProcStateEvent(uid2, state1, &event3);
+//    changedCache[0] = false;
+//    conditionCache[0] = ConditionState::kNotEvaluated;
+//    tracker.evaluateCondition(event3, matcherState, allPredicates, conditionCache, changedCache);
+//    EXPECT_EQ(1ULL, tracker.mLastChangedToTrueDimensions.size());
+//    EXPECT_EQ(0ULL, tracker.mLastChangedToFalseDimensions.size());
+//    EXPECT_TRUE(changedCache[0]);
+//}
 
 }  // namespace statsd
 }  // namespace os
diff --git a/cmds/statsd/tests/e2e/Anomaly_count_e2e_test.cpp b/cmds/statsd/tests/e2e/Anomaly_count_e2e_test.cpp
index c78d99e..1eaaf08 100644
--- a/cmds/statsd/tests/e2e/Anomaly_count_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/Anomaly_count_e2e_test.cpp
@@ -53,184 +53,185 @@
 
 }  // namespace
 
-TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_single_bucket) {
-    const int num_buckets = 1;
-    const int threshold = 3;
-    auto config = CreateStatsdConfig(num_buckets, threshold);
-    const uint64_t alert_id = config.alert(0).id();
-    const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
-
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
-
-    sp<AnomalyTracker> anomalyTracker =
-        processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
-
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
-    std::vector<AttributionNodeInternal> attributions2 = {
-        CreateAttribution(111, "App1"), CreateAttribution(222, "GMSCoreModule1")};
-    std::vector<AttributionNodeInternal> attributions3 = {
-        CreateAttribution(111, "App1"), CreateAttribution(333, "App3")};
-    std::vector<AttributionNodeInternal> attributions4 = {
-        CreateAttribution(222, "GMSCoreModule1"), CreateAttribution(333, "App3")};
-    std::vector<AttributionNodeInternal> attributions5 = {
-        CreateAttribution(222, "GMSCoreModule1") };
-
-    FieldValue fieldValue1(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
-                           Value((int32_t)111));
-    HashableDimensionKey whatKey1({fieldValue1});
-    MetricDimensionKey dimensionKey1(whatKey1, DEFAULT_DIMENSION_KEY);
-
-    FieldValue fieldValue2(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
-                           Value((int32_t)222));
-    HashableDimensionKey whatKey2({fieldValue2});
-    MetricDimensionKey dimensionKey2(whatKey2, DEFAULT_DIMENSION_KEY);
-
-    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 2);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    event = CreateAcquireWakelockEvent(attributions4, "wl2", bucketStartTimeNs + 2);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
-
-    event = CreateAcquireWakelockEvent(attributions2, "wl1", bucketStartTimeNs + 3);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + 3);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
-
-    event = CreateAcquireWakelockEvent(attributions3, "wl1", bucketStartTimeNs + 4);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + 4);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
-
-    // Fired alarm and refractory period end timestamp updated.
-    event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 5);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(refractory_period_sec + bucketStartTimeNs / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 100);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(refractory_period_sec + bucketStartTimeNs / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - 1);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs - 1) / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + 1);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs - 1) / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    event = CreateAcquireWakelockEvent(attributions4, "wl2", bucketStartTimeNs + bucketSizeNs + 1);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
-
-    event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + bucketSizeNs + 2);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
-
-    event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + bucketSizeNs + 3);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
-
-    event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + bucketSizeNs + 4);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs + 4) / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
-}
-
-TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_multiple_buckets) {
-    const int num_buckets = 3;
-    const int threshold = 3;
-    auto config = CreateStatsdConfig(num_buckets, threshold);
-    const uint64_t alert_id = config.alert(0).id();
-    const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
-
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
-
-    sp<AnomalyTracker> anomalyTracker =
-        processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
-
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
-    std::vector<AttributionNodeInternal> attributions2 = {
-        CreateAttribution(111, "App1"), CreateAttribution(222, "GMSCoreModule1")};
-    std::vector<AttributionNodeInternal> attributions3 = {
-        CreateAttribution(111, "App1"), CreateAttribution(333, "App3")};
-    std::vector<AttributionNodeInternal> attributions4 = {
-        CreateAttribution(222, "GMSCoreModule1"), CreateAttribution(333, "App3")};
-    std::vector<AttributionNodeInternal> attributions5 = {
-        CreateAttribution(222, "GMSCoreModule1") };
-
-    FieldValue fieldValue1(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
-                           Value((int32_t)111));
-    HashableDimensionKey whatKey1({fieldValue1});
-    MetricDimensionKey dimensionKey1(whatKey1, DEFAULT_DIMENSION_KEY);
-
-    FieldValue fieldValue2(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
-                           Value((int32_t)222));
-    HashableDimensionKey whatKey2({fieldValue2});
-    MetricDimensionKey dimensionKey2(whatKey2, DEFAULT_DIMENSION_KEY);
-
-    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 2);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    event = CreateAcquireWakelockEvent(attributions2, "wl1", bucketStartTimeNs + 3);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    // Fired alarm and refractory period end timestamp updated.
-    event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 4);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + 1);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs + 1) / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    event = CreateAcquireWakelockEvent(attributions2, "wl1", bucketStartTimeNs + bucketSizeNs + 2);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs + 1) / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    event = CreateAcquireWakelockEvent(
-        attributions2, "wl1", bucketStartTimeNs + 3 * bucketSizeNs + 1);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs + 1) / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-
-    event = CreateAcquireWakelockEvent(
-        attributions2, "wl1", bucketStartTimeNs + 3 * bucketSizeNs + 2);
-    processor->OnLogEvent(event.get());
-    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + 3 * bucketSizeNs + 2) / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_single_bucket) {
+//    const int num_buckets = 1;
+//    const int threshold = 3;
+//    auto config = CreateStatsdConfig(num_buckets, threshold);
+//    const uint64_t alert_id = config.alert(0).id();
+//    const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
+//
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
+//
+//    sp<AnomalyTracker> anomalyTracker =
+//        processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
+//
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
+//    std::vector<AttributionNodeInternal> attributions2 = {
+//        CreateAttribution(111, "App1"), CreateAttribution(222, "GMSCoreModule1")};
+//    std::vector<AttributionNodeInternal> attributions3 = {
+//        CreateAttribution(111, "App1"), CreateAttribution(333, "App3")};
+//    std::vector<AttributionNodeInternal> attributions4 = {
+//        CreateAttribution(222, "GMSCoreModule1"), CreateAttribution(333, "App3")};
+//    std::vector<AttributionNodeInternal> attributions5 = {
+//        CreateAttribution(222, "GMSCoreModule1") };
+//
+//    FieldValue fieldValue1(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
+//                           Value((int32_t)111));
+//    HashableDimensionKey whatKey1({fieldValue1});
+//    MetricDimensionKey dimensionKey1(whatKey1, DEFAULT_DIMENSION_KEY);
+//
+//    FieldValue fieldValue2(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
+//                           Value((int32_t)222));
+//    HashableDimensionKey whatKey2({fieldValue2});
+//    MetricDimensionKey dimensionKey2(whatKey2, DEFAULT_DIMENSION_KEY);
+//
+//    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 2);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    event = CreateAcquireWakelockEvent(attributions4, "wl2", bucketStartTimeNs + 2);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+//
+//    event = CreateAcquireWakelockEvent(attributions2, "wl1", bucketStartTimeNs + 3);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + 3);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+//
+//    event = CreateAcquireWakelockEvent(attributions3, "wl1", bucketStartTimeNs + 4);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + 4);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+//
+//    // Fired alarm and refractory period end timestamp updated.
+//    event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 5);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(refractory_period_sec + bucketStartTimeNs / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 100);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(refractory_period_sec + bucketStartTimeNs / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - 1);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs - 1) / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + 1);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs - 1) / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    event = CreateAcquireWakelockEvent(attributions4, "wl2", bucketStartTimeNs + bucketSizeNs + 1);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+//
+//    event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + bucketSizeNs + 2);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+//
+//    event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + bucketSizeNs + 3);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+//
+//    event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + bucketSizeNs + 4);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs + 4) / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+//}
+//
+//TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_multiple_buckets) {
+//    const int num_buckets = 3;
+//    const int threshold = 3;
+//    auto config = CreateStatsdConfig(num_buckets, threshold);
+//    const uint64_t alert_id = config.alert(0).id();
+//    const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
+//
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
+//
+//    sp<AnomalyTracker> anomalyTracker =
+//        processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
+//
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
+//    std::vector<AttributionNodeInternal> attributions2 = {
+//        CreateAttribution(111, "App1"), CreateAttribution(222, "GMSCoreModule1")};
+//    std::vector<AttributionNodeInternal> attributions3 = {
+//        CreateAttribution(111, "App1"), CreateAttribution(333, "App3")};
+//    std::vector<AttributionNodeInternal> attributions4 = {
+//        CreateAttribution(222, "GMSCoreModule1"), CreateAttribution(333, "App3")};
+//    std::vector<AttributionNodeInternal> attributions5 = {
+//        CreateAttribution(222, "GMSCoreModule1") };
+//
+//    FieldValue fieldValue1(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
+//                           Value((int32_t)111));
+//    HashableDimensionKey whatKey1({fieldValue1});
+//    MetricDimensionKey dimensionKey1(whatKey1, DEFAULT_DIMENSION_KEY);
+//
+//    FieldValue fieldValue2(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
+//                           Value((int32_t)222));
+//    HashableDimensionKey whatKey2({fieldValue2});
+//    MetricDimensionKey dimensionKey2(whatKey2, DEFAULT_DIMENSION_KEY);
+//
+//    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 2);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    event = CreateAcquireWakelockEvent(attributions2, "wl1", bucketStartTimeNs + 3);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    // Fired alarm and refractory period end timestamp updated.
+//    event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 4);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + 1);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs + 1) / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    event = CreateAcquireWakelockEvent(attributions2, "wl1", bucketStartTimeNs + bucketSizeNs + 2);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs + 1) / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    event = CreateAcquireWakelockEvent(
+//        attributions2, "wl1", bucketStartTimeNs + 3 * bucketSizeNs + 1);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs + 1) / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//
+//    event = CreateAcquireWakelockEvent(
+//        attributions2, "wl1", bucketStartTimeNs + 3 * bucketSizeNs + 2);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + 3 * bucketSizeNs + 2) / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+//}
 
 #else
 GTEST_LOG_(INFO) << "This test does nothing.\n";
diff --git a/cmds/statsd/tests/e2e/Anomaly_duration_sum_e2e_test.cpp b/cmds/statsd/tests/e2e/Anomaly_duration_sum_e2e_test.cpp
index 50da9e2..03a209a 100644
--- a/cmds/statsd/tests/e2e/Anomaly_duration_sum_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/Anomaly_duration_sum_e2e_test.cpp
@@ -89,393 +89,394 @@
                                            (int32_t)0x02010101), Value((int32_t)222))}),
     DEFAULT_DIMENSION_KEY);
 
-TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_single_bucket) {
-    const int num_buckets = 1;
-    const uint64_t threshold_ns = NS_PER_SEC;
-    auto config = CreateStatsdConfig(num_buckets, threshold_ns, DurationMetric::SUM, true);
-    const uint64_t alert_id = config.alert(0).id();
-    const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
-
-    int64_t bucketStartTimeNs = 10 * NS_PER_SEC;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
-
-    sp<AnomalyTracker> anomalyTracker =
-        processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
-
-    auto screen_on_event = CreateScreenStateChangedEvent(
-            android::view::DisplayStateEnum::DISPLAY_STATE_ON, bucketStartTimeNs + 1);
-    auto screen_off_event = CreateScreenStateChangedEvent(
-            android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 10);
-    processor->OnLogEvent(screen_on_event.get());
-    processor->OnLogEvent(screen_off_event.get());
-
-    // Acquire wakelock wl1.
-    auto acquire_event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 11);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ((bucketStartTimeNs + 11 + threshold_ns) / NS_PER_SEC + 1,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Release wakelock wl1. No anomaly detected. Alarm cancelled at the "release" event.
-    auto release_event = CreateReleaseWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 101);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Acquire wakelock wl1 within bucket #0.
-    acquire_event = CreateAcquireWakelockEvent(attributions2, "wl1", bucketStartTimeNs + 110);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ((bucketStartTimeNs + 110 + threshold_ns - 90) / NS_PER_SEC + 1,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Release wakelock wl1. One anomaly detected.
-    release_event = CreateReleaseWakelockEvent(
-            attributions2, "wl1", bucketStartTimeNs + NS_PER_SEC + 109);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + NS_PER_SEC + 109) / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Acquire wakelock wl1.
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + NS_PER_SEC + 112);
-    processor->OnLogEvent(acquire_event.get());
-    // Wakelock has been hold longer than the threshold in bucket #0. The alarm is set at the
-    // end of the refractory period.
-    const int64_t alarmFiredTimestampSec0 = anomalyTracker->getAlarmTimestampSec(dimensionKey);
-    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + NS_PER_SEC + 109) / NS_PER_SEC + 1,
-              (uint32_t)alarmFiredTimestampSec0);
-
-    // Anomaly alarm fired.
-    auto alarmSet = processor->getAnomalyAlarmMonitor()->popSoonerThan(
-            static_cast<uint32_t>(alarmFiredTimestampSec0));
-    EXPECT_EQ(1u, alarmSet.size());
-    processor->onAnomalyAlarmFired(alarmFiredTimestampSec0 * NS_PER_SEC, alarmSet);
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(refractory_period_sec + alarmFiredTimestampSec0,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Release wakelock wl1.
-    release_event = CreateReleaseWakelockEvent(
-            attributions1, "wl1", alarmFiredTimestampSec0 * NS_PER_SEC + NS_PER_SEC + 1);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    // Within refractory period. No more anomaly detected.
-    EXPECT_EQ(refractory_period_sec + alarmFiredTimestampSec0,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Acquire wakelock wl1.
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions2, "wl1", bucketStartTimeNs + bucketSizeNs -  5 * NS_PER_SEC - 11);
-    processor->OnLogEvent(acquire_event.get());
-    const int64_t alarmFiredTimestampSec1 = anomalyTracker->getAlarmTimestampSec(dimensionKey);
-    EXPECT_EQ((bucketStartTimeNs + bucketSizeNs - 5 * NS_PER_SEC) / NS_PER_SEC,
-              (uint64_t)alarmFiredTimestampSec1);
-
-    // Release wakelock wl1.
-    release_event = CreateReleaseWakelockEvent(
-        attributions2, "wl1", bucketStartTimeNs + bucketSizeNs - 4 * NS_PER_SEC - 10);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(refractory_period_sec +
-                    (bucketStartTimeNs + bucketSizeNs - 4 * NS_PER_SEC - 10) / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    alarmSet = processor->getAnomalyAlarmMonitor()->popSoonerThan(
-                static_cast<uint32_t>(alarmFiredTimestampSec1));
-    EXPECT_EQ(0u, alarmSet.size());
-
-    // Acquire wakelock wl1 near the end of bucket #0.
-    acquire_event = CreateAcquireWakelockEvent(
-            attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - 2);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC,
-               anomalyTracker->getAlarmTimestampSec(dimensionKey));
-
-    // Release the event at early bucket #1.
-    release_event = CreateReleaseWakelockEvent(
-            attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + NS_PER_SEC - 1);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    // Anomaly detected when stopping the alarm. The refractory period does not change.
-    EXPECT_EQ(refractory_period_sec +
-                    (bucketStartTimeNs + bucketSizeNs + NS_PER_SEC) / NS_PER_SEC,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Condition changes to false.
-    screen_on_event = CreateScreenStateChangedEvent(
-        android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-        bucketStartTimeNs + 2 * bucketSizeNs + 20);
-    processor->OnLogEvent(screen_on_event.get());
-    EXPECT_EQ(refractory_period_sec +
-                    (bucketStartTimeNs + bucketSizeNs + NS_PER_SEC) / NS_PER_SEC,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions2, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 30);
-    processor->OnLogEvent(acquire_event.get());
-    // The condition is false. Do not start the alarm.
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(refractory_period_sec +
-                    (bucketStartTimeNs + bucketSizeNs + NS_PER_SEC) / NS_PER_SEC,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Condition turns true.
-    screen_off_event = CreateScreenStateChangedEvent(
-        android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-        bucketStartTimeNs + 2 * bucketSizeNs + NS_PER_SEC);
-    processor->OnLogEvent(screen_off_event.get());
-    EXPECT_EQ((bucketStartTimeNs + 2 * bucketSizeNs + NS_PER_SEC + threshold_ns) / NS_PER_SEC,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-
-    // Condition turns to false.
-    screen_on_event = CreateScreenStateChangedEvent(
-        android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-        bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC + 1);
-    processor->OnLogEvent(screen_on_event.get());
-    // Condition turns to false. Cancelled the alarm.
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    //  Detected one anomaly.
-    EXPECT_EQ(refractory_period_sec +
-                    (bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC + 1) / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Condition turns to true again.
-    screen_off_event = CreateScreenStateChangedEvent(
-        android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-        bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC + 2);
-    processor->OnLogEvent(screen_off_event.get());
-    EXPECT_EQ((bucketStartTimeNs + 2 * bucketSizeNs) / NS_PER_SEC + 2 + 2 + 1,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-
-    release_event = CreateReleaseWakelockEvent(
-        attributions2, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 5 * NS_PER_SEC);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(refractory_period_sec +
-                    (bucketStartTimeNs + 2 * bucketSizeNs + 5 * NS_PER_SEC) / NS_PER_SEC,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-}
-
-TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_multiple_buckets) {
-    const int num_buckets = 3;
-    const uint64_t threshold_ns = NS_PER_SEC;
-    auto config = CreateStatsdConfig(num_buckets, threshold_ns, DurationMetric::SUM, true);
-    const uint64_t alert_id = config.alert(0).id();
-    const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
-
-    int64_t bucketStartTimeNs = 10 * NS_PER_SEC;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
-
-    sp<AnomalyTracker> anomalyTracker =
-        processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
-
-    auto screen_off_event = CreateScreenStateChangedEvent(
-            android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 1);
-    processor->OnLogEvent(screen_off_event.get());
-
-    // Acquire wakelock "wc1" in bucket #0.
-    auto acquire_event = CreateAcquireWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + bucketSizeNs -  NS_PER_SEC / 2 - 1);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC + 1,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Release wakelock "wc1" in bucket #0.
-    auto release_event = CreateReleaseWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - 1);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Acquire wakelock "wc1" in bucket #1.
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions2, "wl1", bucketStartTimeNs + bucketSizeNs + 1);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC + 1,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    release_event = CreateReleaseWakelockEvent(
-        attributions2, "wl1", bucketStartTimeNs + bucketSizeNs + 100);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Acquire wakelock "wc2" in bucket #2.
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions3, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 1);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ((bucketStartTimeNs + 2 *  bucketSizeNs) / NS_PER_SEC + 2,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey2));
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
-
-    // Release wakelock "wc2" in bucket #2.
-    release_event = CreateReleaseWakelockEvent(
-        attributions3, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey2));
-    EXPECT_EQ(refractory_period_sec +
-                   (bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC) / NS_PER_SEC,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
-
-    // Acquire wakelock "wc1" in bucket #2.
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions2, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ((bucketStartTimeNs + 2 * bucketSizeNs) / NS_PER_SEC + 2 + 1,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Release wakelock "wc1" in bucket #2.
-    release_event = CreateReleaseWakelockEvent(
-        attributions2, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 2.5 * NS_PER_SEC);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(refractory_period_sec +
-                   (int64_t)(bucketStartTimeNs + 2 * bucketSizeNs + 2.5 * NS_PER_SEC) / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions3, "wl2", bucketStartTimeNs + 6 * bucketSizeNs - NS_PER_SEC + 4);
-    processor->OnLogEvent(acquire_event.get());
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + 6 * bucketSizeNs - NS_PER_SEC + 5);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ((bucketStartTimeNs + 6 * bucketSizeNs) / NS_PER_SEC + 1,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ((bucketStartTimeNs + 6 * bucketSizeNs) / NS_PER_SEC + 1,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey2));
-
-    release_event = CreateReleaseWakelockEvent(
-        attributions3, "wl2", bucketStartTimeNs + 6 * bucketSizeNs + 2);
-    processor->OnLogEvent(release_event.get());
-    release_event = CreateReleaseWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + 6 * bucketSizeNs + 6);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey2));
-    // The buckets are not messed up across dimensions. Only one dimension has anomaly triggered.
-    EXPECT_EQ(refractory_period_sec +
-                   (int64_t)(bucketStartTimeNs + 6 * bucketSizeNs) / NS_PER_SEC + 1,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-}
-
-TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_long_refractory_period) {
-    const int num_buckets = 2;
-    const uint64_t threshold_ns = 3 * NS_PER_SEC;
-    auto config = CreateStatsdConfig(num_buckets, threshold_ns, DurationMetric::SUM, false);
-    int64_t bucketStartTimeNs = 10 * NS_PER_SEC;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000;
-
-    const uint64_t alert_id = config.alert(0).id();
-    const uint32_t refractory_period_sec = 3 * bucketSizeNs / NS_PER_SEC;
-    config.mutable_alert(0)->set_refractory_period_secs(refractory_period_sec);
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
-
-    sp<AnomalyTracker> anomalyTracker =
-        processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
-
-    auto screen_off_event = CreateScreenStateChangedEvent(
-            android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 1);
-    processor->OnLogEvent(screen_off_event.get());
-
-    // Acquire wakelock "wc1" in bucket #0.
-    auto acquire_event = CreateAcquireWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - 100);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC + 3,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Acquire the wakelock "wc1" again.
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + 2 * NS_PER_SEC + 1);
-    processor->OnLogEvent(acquire_event.get());
-    // The alarm does not change.
-    EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC + 3,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // Anomaly alarm fired late.
-    const int64_t firedAlarmTimestampNs = bucketStartTimeNs + 2 * bucketSizeNs - NS_PER_SEC;
-    auto alarmSet = processor->getAnomalyAlarmMonitor()->popSoonerThan(
-            static_cast<uint32_t>(firedAlarmTimestampNs / NS_PER_SEC));
-    EXPECT_EQ(1u, alarmSet.size());
-    processor->onAnomalyAlarmFired(firedAlarmTimestampNs, alarmSet);
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + 2 * bucketSizeNs - 100);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    auto release_event = CreateReleaseWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 1);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-    // Within the refractory period. No anomaly.
-    EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    // A new wakelock, but still within refractory period.
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 10 * NS_PER_SEC);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-
-    release_event = CreateReleaseWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + 3 * bucketSizeNs - NS_PER_SEC);
-    // Still in the refractory period. No anomaly.
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
-              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
-
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + 5 * bucketSizeNs - 3 * NS_PER_SEC - 5);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ((bucketStartTimeNs + 5 * bucketSizeNs) / NS_PER_SEC,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-
-    release_event = CreateReleaseWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + 5 * bucketSizeNs - 3 * NS_PER_SEC - 4);
-    processor->OnLogEvent(release_event.get());
-    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
-
-    acquire_event = CreateAcquireWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + 5 * bucketSizeNs - 3 * NS_PER_SEC - 3);
-    processor->OnLogEvent(acquire_event.get());
-    EXPECT_EQ((bucketStartTimeNs + 5 * bucketSizeNs) / NS_PER_SEC,
-              anomalyTracker->getAlarmTimestampSec(dimensionKey));
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_single_bucket) {
+//    const int num_buckets = 1;
+//    const uint64_t threshold_ns = NS_PER_SEC;
+//    auto config = CreateStatsdConfig(num_buckets, threshold_ns, DurationMetric::SUM, true);
+//    const uint64_t alert_id = config.alert(0).id();
+//    const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
+//
+//    int64_t bucketStartTimeNs = 10 * NS_PER_SEC;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
+//
+//    sp<AnomalyTracker> anomalyTracker =
+//        processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
+//
+//    auto screen_on_event = CreateScreenStateChangedEvent(
+//            android::view::DisplayStateEnum::DISPLAY_STATE_ON, bucketStartTimeNs + 1);
+//    auto screen_off_event = CreateScreenStateChangedEvent(
+//            android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 10);
+//    processor->OnLogEvent(screen_on_event.get());
+//    processor->OnLogEvent(screen_off_event.get());
+//
+//    // Acquire wakelock wl1.
+//    auto acquire_event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 11);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + 11 + threshold_ns) / NS_PER_SEC + 1,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Release wakelock wl1. No anomaly detected. Alarm cancelled at the "release" event.
+//    auto release_event = CreateReleaseWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 101);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Acquire wakelock wl1 within bucket #0.
+//    acquire_event = CreateAcquireWakelockEvent(attributions2, "wl1", bucketStartTimeNs + 110);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + 110 + threshold_ns - 90) / NS_PER_SEC + 1,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Release wakelock wl1. One anomaly detected.
+//    release_event = CreateReleaseWakelockEvent(
+//            attributions2, "wl1", bucketStartTimeNs + NS_PER_SEC + 109);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + NS_PER_SEC + 109) / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Acquire wakelock wl1.
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + NS_PER_SEC + 112);
+//    processor->OnLogEvent(acquire_event.get());
+//    // Wakelock has been hold longer than the threshold in bucket #0. The alarm is set at the
+//    // end of the refractory period.
+//    const int64_t alarmFiredTimestampSec0 = anomalyTracker->getAlarmTimestampSec(dimensionKey);
+//    EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + NS_PER_SEC + 109) / NS_PER_SEC + 1,
+//              (uint32_t)alarmFiredTimestampSec0);
+//
+//    // Anomaly alarm fired.
+//    auto alarmSet = processor->getAnomalyAlarmMonitor()->popSoonerThan(
+//            static_cast<uint32_t>(alarmFiredTimestampSec0));
+//    EXPECT_EQ(1u, alarmSet.size());
+//    processor->onAnomalyAlarmFired(alarmFiredTimestampSec0 * NS_PER_SEC, alarmSet);
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(refractory_period_sec + alarmFiredTimestampSec0,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Release wakelock wl1.
+//    release_event = CreateReleaseWakelockEvent(
+//            attributions1, "wl1", alarmFiredTimestampSec0 * NS_PER_SEC + NS_PER_SEC + 1);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    // Within refractory period. No more anomaly detected.
+//    EXPECT_EQ(refractory_period_sec + alarmFiredTimestampSec0,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Acquire wakelock wl1.
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions2, "wl1", bucketStartTimeNs + bucketSizeNs -  5 * NS_PER_SEC - 11);
+//    processor->OnLogEvent(acquire_event.get());
+//    const int64_t alarmFiredTimestampSec1 = anomalyTracker->getAlarmTimestampSec(dimensionKey);
+//    EXPECT_EQ((bucketStartTimeNs + bucketSizeNs - 5 * NS_PER_SEC) / NS_PER_SEC,
+//              (uint64_t)alarmFiredTimestampSec1);
+//
+//    // Release wakelock wl1.
+//    release_event = CreateReleaseWakelockEvent(
+//        attributions2, "wl1", bucketStartTimeNs + bucketSizeNs - 4 * NS_PER_SEC - 10);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(refractory_period_sec +
+//                    (bucketStartTimeNs + bucketSizeNs - 4 * NS_PER_SEC - 10) / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    alarmSet = processor->getAnomalyAlarmMonitor()->popSoonerThan(
+//                static_cast<uint32_t>(alarmFiredTimestampSec1));
+//    EXPECT_EQ(0u, alarmSet.size());
+//
+//    // Acquire wakelock wl1 near the end of bucket #0.
+//    acquire_event = CreateAcquireWakelockEvent(
+//            attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - 2);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC,
+//               anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//
+//    // Release the event at early bucket #1.
+//    release_event = CreateReleaseWakelockEvent(
+//            attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + NS_PER_SEC - 1);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    // Anomaly detected when stopping the alarm. The refractory period does not change.
+//    EXPECT_EQ(refractory_period_sec +
+//                    (bucketStartTimeNs + bucketSizeNs + NS_PER_SEC) / NS_PER_SEC,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Condition changes to false.
+//    screen_on_event = CreateScreenStateChangedEvent(
+//        android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//        bucketStartTimeNs + 2 * bucketSizeNs + 20);
+//    processor->OnLogEvent(screen_on_event.get());
+//    EXPECT_EQ(refractory_period_sec +
+//                    (bucketStartTimeNs + bucketSizeNs + NS_PER_SEC) / NS_PER_SEC,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions2, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 30);
+//    processor->OnLogEvent(acquire_event.get());
+//    // The condition is false. Do not start the alarm.
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(refractory_period_sec +
+//                    (bucketStartTimeNs + bucketSizeNs + NS_PER_SEC) / NS_PER_SEC,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Condition turns true.
+//    screen_off_event = CreateScreenStateChangedEvent(
+//        android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//        bucketStartTimeNs + 2 * bucketSizeNs + NS_PER_SEC);
+//    processor->OnLogEvent(screen_off_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + 2 * bucketSizeNs + NS_PER_SEC + threshold_ns) / NS_PER_SEC,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//
+//    // Condition turns to false.
+//    screen_on_event = CreateScreenStateChangedEvent(
+//        android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//        bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC + 1);
+//    processor->OnLogEvent(screen_on_event.get());
+//    // Condition turns to false. Cancelled the alarm.
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    //  Detected one anomaly.
+//    EXPECT_EQ(refractory_period_sec +
+//                    (bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC + 1) / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Condition turns to true again.
+//    screen_off_event = CreateScreenStateChangedEvent(
+//        android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//        bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC + 2);
+//    processor->OnLogEvent(screen_off_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + 2 * bucketSizeNs) / NS_PER_SEC + 2 + 2 + 1,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//
+//    release_event = CreateReleaseWakelockEvent(
+//        attributions2, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 5 * NS_PER_SEC);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(refractory_period_sec +
+//                    (bucketStartTimeNs + 2 * bucketSizeNs + 5 * NS_PER_SEC) / NS_PER_SEC,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//}
+//
+//TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_multiple_buckets) {
+//    const int num_buckets = 3;
+//    const uint64_t threshold_ns = NS_PER_SEC;
+//    auto config = CreateStatsdConfig(num_buckets, threshold_ns, DurationMetric::SUM, true);
+//    const uint64_t alert_id = config.alert(0).id();
+//    const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
+//
+//    int64_t bucketStartTimeNs = 10 * NS_PER_SEC;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
+//
+//    sp<AnomalyTracker> anomalyTracker =
+//        processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
+//
+//    auto screen_off_event = CreateScreenStateChangedEvent(
+//            android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 1);
+//    processor->OnLogEvent(screen_off_event.get());
+//
+//    // Acquire wakelock "wc1" in bucket #0.
+//    auto acquire_event = CreateAcquireWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + bucketSizeNs -  NS_PER_SEC / 2 - 1);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC + 1,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Release wakelock "wc1" in bucket #0.
+//    auto release_event = CreateReleaseWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - 1);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Acquire wakelock "wc1" in bucket #1.
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions2, "wl1", bucketStartTimeNs + bucketSizeNs + 1);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC + 1,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    release_event = CreateReleaseWakelockEvent(
+//        attributions2, "wl1", bucketStartTimeNs + bucketSizeNs + 100);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Acquire wakelock "wc2" in bucket #2.
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions3, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 1);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + 2 *  bucketSizeNs) / NS_PER_SEC + 2,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey2));
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+//
+//    // Release wakelock "wc2" in bucket #2.
+//    release_event = CreateReleaseWakelockEvent(
+//        attributions3, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey2));
+//    EXPECT_EQ(refractory_period_sec +
+//                   (bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC) / NS_PER_SEC,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+//
+//    // Acquire wakelock "wc1" in bucket #2.
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions2, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + 2 * bucketSizeNs) / NS_PER_SEC + 2 + 1,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Release wakelock "wc1" in bucket #2.
+//    release_event = CreateReleaseWakelockEvent(
+//        attributions2, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 2.5 * NS_PER_SEC);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(refractory_period_sec +
+//                   (int64_t)(bucketStartTimeNs + 2 * bucketSizeNs + 2.5 * NS_PER_SEC) / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions3, "wl2", bucketStartTimeNs + 6 * bucketSizeNs - NS_PER_SEC + 4);
+//    processor->OnLogEvent(acquire_event.get());
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + 6 * bucketSizeNs - NS_PER_SEC + 5);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + 6 * bucketSizeNs) / NS_PER_SEC + 1,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ((bucketStartTimeNs + 6 * bucketSizeNs) / NS_PER_SEC + 1,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey2));
+//
+//    release_event = CreateReleaseWakelockEvent(
+//        attributions3, "wl2", bucketStartTimeNs + 6 * bucketSizeNs + 2);
+//    processor->OnLogEvent(release_event.get());
+//    release_event = CreateReleaseWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + 6 * bucketSizeNs + 6);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey2));
+//    // The buckets are not messed up across dimensions. Only one dimension has anomaly triggered.
+//    EXPECT_EQ(refractory_period_sec +
+//                   (int64_t)(bucketStartTimeNs + 6 * bucketSizeNs) / NS_PER_SEC + 1,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//}
+//
+//TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_long_refractory_period) {
+//    const int num_buckets = 2;
+//    const uint64_t threshold_ns = 3 * NS_PER_SEC;
+//    auto config = CreateStatsdConfig(num_buckets, threshold_ns, DurationMetric::SUM, false);
+//    int64_t bucketStartTimeNs = 10 * NS_PER_SEC;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000;
+//
+//    const uint64_t alert_id = config.alert(0).id();
+//    const uint32_t refractory_period_sec = 3 * bucketSizeNs / NS_PER_SEC;
+//    config.mutable_alert(0)->set_refractory_period_secs(refractory_period_sec);
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
+//
+//    sp<AnomalyTracker> anomalyTracker =
+//        processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
+//
+//    auto screen_off_event = CreateScreenStateChangedEvent(
+//            android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 1);
+//    processor->OnLogEvent(screen_off_event.get());
+//
+//    // Acquire wakelock "wc1" in bucket #0.
+//    auto acquire_event = CreateAcquireWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - 100);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC + 3,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Acquire the wakelock "wc1" again.
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + 2 * NS_PER_SEC + 1);
+//    processor->OnLogEvent(acquire_event.get());
+//    // The alarm does not change.
+//    EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC + 3,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // Anomaly alarm fired late.
+//    const int64_t firedAlarmTimestampNs = bucketStartTimeNs + 2 * bucketSizeNs - NS_PER_SEC;
+//    auto alarmSet = processor->getAnomalyAlarmMonitor()->popSoonerThan(
+//            static_cast<uint32_t>(firedAlarmTimestampNs / NS_PER_SEC));
+//    EXPECT_EQ(1u, alarmSet.size());
+//    processor->onAnomalyAlarmFired(firedAlarmTimestampNs, alarmSet);
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + 2 * bucketSizeNs - 100);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    auto release_event = CreateReleaseWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 1);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//    // Within the refractory period. No anomaly.
+//    EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    // A new wakelock, but still within refractory period.
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 10 * NS_PER_SEC);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//
+//    release_event = CreateReleaseWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + 3 * bucketSizeNs - NS_PER_SEC);
+//    // Still in the refractory period. No anomaly.
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
+//              anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+//
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + 5 * bucketSizeNs - 3 * NS_PER_SEC - 5);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + 5 * bucketSizeNs) / NS_PER_SEC,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//
+//    release_event = CreateReleaseWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + 5 * bucketSizeNs - 3 * NS_PER_SEC - 4);
+//    processor->OnLogEvent(release_event.get());
+//    EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//
+//    acquire_event = CreateAcquireWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + 5 * bucketSizeNs - 3 * NS_PER_SEC - 3);
+//    processor->OnLogEvent(acquire_event.get());
+//    EXPECT_EQ((bucketStartTimeNs + 5 * bucketSizeNs) / NS_PER_SEC,
+//              anomalyTracker->getAlarmTimestampSec(dimensionKey));
+//}
 
 #else
 GTEST_LOG_(INFO) << "This test does nothing.\n";
diff --git a/cmds/statsd/tests/e2e/Attribution_e2e_test.cpp b/cmds/statsd/tests/e2e/Attribution_e2e_test.cpp
index 3382525..6051174 100644
--- a/cmds/statsd/tests/e2e/Attribution_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/Attribution_e2e_test.cpp
@@ -55,364 +55,365 @@
 
 }  // namespace
 
-TEST(AttributionE2eTest, TestAttributionMatchAndSliceByFirstUid) {
-    auto config = CreateStatsdConfig(Position::FIRST);
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-
-    // Here it assumes that GMS core has two uids.
-    processor->getUidMap()->updateMap(
-            1, {222, 444, 111, 333}, {1, 1, 2, 2},
-            {String16("v1"), String16("v1"), String16("v2"), String16("v2")},
-            {String16("com.android.gmscore"), String16("com.android.gmscore"), String16("app1"),
-             String16("APP3")},
-            {String16(""), String16(""), String16(""), String16("")});
-
-    // GMS core node is in the middle.
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1"),
-                                                          CreateAttribution(222, "GMSCoreModule1"),
-                                                          CreateAttribution(333, "App3")};
-
-    // GMS core node is the last one.
-    std::vector<AttributionNodeInternal> attributions2 = {CreateAttribution(111, "App1"),
-                                                          CreateAttribution(333, "App3"),
-                                                          CreateAttribution(222, "GMSCoreModule1")};
-
-    // GMS core node is the first one.
-    std::vector<AttributionNodeInternal> attributions3 = {CreateAttribution(222, "GMSCoreModule1"),
-                                                          CreateAttribution(333, "App3")};
-
-    // Single GMS core node.
-    std::vector<AttributionNodeInternal> attributions4 = {CreateAttribution(222, "GMSCoreModule1")};
-
-    // GMS core has another uid.
-    std::vector<AttributionNodeInternal> attributions5 = {CreateAttribution(111, "App1"),
-                                                          CreateAttribution(444, "GMSCoreModule2"),
-                                                          CreateAttribution(333, "App3")};
-
-    // Multiple GMS core nodes.
-    std::vector<AttributionNodeInternal> attributions6 = {CreateAttribution(444, "GMSCoreModule2"),
-                                                          CreateAttribution(222, "GMSCoreModule1")};
-
-    // No GMS core nodes.
-    std::vector<AttributionNodeInternal> attributions7 = {CreateAttribution(111, "App1"),
-                                                          CreateAttribution(333, "App3")};
-    std::vector<AttributionNodeInternal> attributions8 = {CreateAttribution(111, "App1")};
-
-    // GMS core node with isolated uid.
-    const int isolatedUid = 666;
-    std::vector<AttributionNodeInternal> attributions9 = {
-            CreateAttribution(isolatedUid, "GMSCoreModule3")};
-
-    std::vector<std::unique_ptr<LogEvent>> events;
-    // Events 1~4 are in the 1st bucket.
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + 2));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions2, "wl1", bucketStartTimeNs + 200));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions3, "wl1", bucketStartTimeNs + bucketSizeNs - 1));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions4, "wl1", bucketStartTimeNs + bucketSizeNs));
-
-    // Events 5~8 are in the 3rd bucket.
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions5, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 1));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions6, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 100));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions7, "wl2", bucketStartTimeNs + 3 * bucketSizeNs - 2));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions8, "wl2", bucketStartTimeNs + 3 * bucketSizeNs));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions9, "wl2", bucketStartTimeNs + 3 * bucketSizeNs + 1));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions9, "wl2", bucketStartTimeNs + 3 * bucketSizeNs + 100));
-    events.push_back(CreateIsolatedUidChangedEvent(
-        isolatedUid, 222, true/* is_create*/, bucketStartTimeNs + 3 * bucketSizeNs - 1));
-    events.push_back(CreateIsolatedUidChangedEvent(
-        isolatedUid, 222, false/* is_create*/, bucketStartTimeNs + 3 * bucketSizeNs + 10));
-
-    sortLogEventsByTimestamp(&events);
-
-    for (const auto& event : events) {
-        processor->OnLogEvent(event.get());
-    }
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + 4 * bucketSizeNs + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(reports.reports_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
-
-    StatsLogReport::CountMetricDataWrapper countMetrics;
-    sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
-    EXPECT_EQ(countMetrics.data_size(), 4);
-
-    auto data = countMetrics.data(0);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), android::util::WAKELOCK_STATE_CHANGED, 111,
-            "App1");
-    EXPECT_EQ(data.bucket_info_size(), 2);
-    EXPECT_EQ(data.bucket_info(0).count(), 2);
-    EXPECT_EQ(data.bucket_info(0).start_bucket_elapsed_nanos(), bucketStartTimeNs);
-    EXPECT_EQ(data.bucket_info(0).end_bucket_elapsed_nanos(), bucketStartTimeNs + bucketSizeNs);
-    EXPECT_EQ(data.bucket_info(1).count(), 1);
-    EXPECT_EQ(data.bucket_info(1).start_bucket_elapsed_nanos(), bucketStartTimeNs + 2 * bucketSizeNs);
-    EXPECT_EQ(data.bucket_info(1).end_bucket_elapsed_nanos(), bucketStartTimeNs + 3 * bucketSizeNs);
-
-    data = countMetrics.data(1);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), android::util::WAKELOCK_STATE_CHANGED, 222,
-            "GMSCoreModule1");
-    EXPECT_EQ(data.bucket_info_size(), 2);
-    EXPECT_EQ(data.bucket_info(0).count(), 1);
-    EXPECT_EQ(data.bucket_info(0).start_bucket_elapsed_nanos(), bucketStartTimeNs);
-    EXPECT_EQ(data.bucket_info(0).end_bucket_elapsed_nanos(), bucketStartTimeNs + bucketSizeNs);
-    EXPECT_EQ(data.bucket_info(1).count(), 1);
-    EXPECT_EQ(data.bucket_info(1).start_bucket_elapsed_nanos(), bucketStartTimeNs + bucketSizeNs);
-    EXPECT_EQ(data.bucket_info(1).end_bucket_elapsed_nanos(), bucketStartTimeNs + 2 * bucketSizeNs);
-
-    data = countMetrics.data(2);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), android::util::WAKELOCK_STATE_CHANGED, 222,
-            "GMSCoreModule3");
-    EXPECT_EQ(data.bucket_info_size(), 1);
-    EXPECT_EQ(data.bucket_info(0).count(), 1);
-    EXPECT_EQ(data.bucket_info(0).start_bucket_elapsed_nanos(), bucketStartTimeNs + 3 * bucketSizeNs);
-    EXPECT_EQ(data.bucket_info(0).end_bucket_elapsed_nanos(), bucketStartTimeNs + 4 * bucketSizeNs);
-
-    data = countMetrics.data(3);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), android::util::WAKELOCK_STATE_CHANGED, 444,
-            "GMSCoreModule2");
-    EXPECT_EQ(data.bucket_info_size(), 1);
-    EXPECT_EQ(data.bucket_info(0).count(), 1);
-    EXPECT_EQ(data.bucket_info(0).start_bucket_elapsed_nanos(), bucketStartTimeNs + 2 * bucketSizeNs);
-    EXPECT_EQ(data.bucket_info(0).end_bucket_elapsed_nanos(), bucketStartTimeNs + 3 * bucketSizeNs);
-}
-
-TEST(AttributionE2eTest, TestAttributionMatchAndSliceByChain) {
-    auto config = CreateStatsdConfig(Position::ALL);
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-
-    // Here it assumes that GMS core has two uids.
-    processor->getUidMap()->updateMap(
-            1, {222, 444, 111, 333}, {1, 1, 2, 2},
-            {String16("v1"), String16("v1"), String16("v2"), String16("v2")},
-            {String16("com.android.gmscore"), String16("com.android.gmscore"), String16("app1"),
-             String16("APP3")},
-            {String16(""), String16(""), String16(""), String16("")});
-
-    // GMS core node is in the middle.
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1"),
-                                                          CreateAttribution(222, "GMSCoreModule1"),
-                                                          CreateAttribution(333, "App3")};
-
-    // GMS core node is the last one.
-    std::vector<AttributionNodeInternal> attributions2 = {CreateAttribution(111, "App1"),
-                                                          CreateAttribution(333, "App3"),
-                                                          CreateAttribution(222, "GMSCoreModule1")};
-
-    // GMS core node is the first one.
-    std::vector<AttributionNodeInternal> attributions3 = {CreateAttribution(222, "GMSCoreModule1"),
-                                                          CreateAttribution(333, "App3")};
-
-    // Single GMS core node.
-    std::vector<AttributionNodeInternal> attributions4 = {CreateAttribution(222, "GMSCoreModule1")};
-
-    // GMS core has another uid.
-    std::vector<AttributionNodeInternal> attributions5 = {CreateAttribution(111, "App1"),
-                                                          CreateAttribution(444, "GMSCoreModule2"),
-                                                          CreateAttribution(333, "App3")};
-
-    // Multiple GMS core nodes.
-    std::vector<AttributionNodeInternal> attributions6 = {CreateAttribution(444, "GMSCoreModule2"),
-                                                          CreateAttribution(222, "GMSCoreModule1")};
-
-    // No GMS core nodes.
-    std::vector<AttributionNodeInternal> attributions7 = {CreateAttribution(111, "App1"),
-                                                          CreateAttribution(333, "App3")};
-    std::vector<AttributionNodeInternal> attributions8 = {CreateAttribution(111, "App1")};
-
-    // GMS core node with isolated uid.
-    const int isolatedUid = 666;
-    std::vector<AttributionNodeInternal> attributions9 = {
-            CreateAttribution(isolatedUid, "GMSCoreModule1")};
-
-    std::vector<std::unique_ptr<LogEvent>> events;
-    // Events 1~4 are in the 1st bucket.
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + 2));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions2, "wl1", bucketStartTimeNs + 200));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions3, "wl1", bucketStartTimeNs + bucketSizeNs - 1));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions4, "wl1", bucketStartTimeNs + bucketSizeNs));
-
-    // Events 5~8 are in the 3rd bucket.
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions5, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 1));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions6, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 100));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions7, "wl2", bucketStartTimeNs + 3 * bucketSizeNs - 2));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions8, "wl2", bucketStartTimeNs + 3 * bucketSizeNs));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions9, "wl2", bucketStartTimeNs + 3 * bucketSizeNs + 1));
-    events.push_back(CreateAcquireWakelockEvent(
-        attributions9, "wl2", bucketStartTimeNs + 3 * bucketSizeNs + 100));
-    events.push_back(CreateIsolatedUidChangedEvent(
-        isolatedUid, 222, true/* is_create*/, bucketStartTimeNs + 3 * bucketSizeNs - 1));
-    events.push_back(CreateIsolatedUidChangedEvent(
-        isolatedUid, 222, false/* is_create*/, bucketStartTimeNs + 3 * bucketSizeNs + 10));
-
-    sortLogEventsByTimestamp(&events);
-
-    for (const auto& event : events) {
-        processor->OnLogEvent(event.get());
-    }
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + 4 * bucketSizeNs + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(reports.reports_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
-
-    StatsLogReport::CountMetricDataWrapper countMetrics;
-    sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
-    EXPECT_EQ(countMetrics.data_size(), 6);
-
-    auto data = countMetrics.data(0);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), android::util::WAKELOCK_STATE_CHANGED, 222, "GMSCoreModule1");
-    EXPECT_EQ(2, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-    EXPECT_EQ(1, data.bucket_info(1).count());
-    EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
-              data.bucket_info(1).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + 4 * bucketSizeNs,
-              data.bucket_info(1).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(1);
-    ValidateUidDimension(
-        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 222);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 222, "GMSCoreModule1");
-    ValidateUidDimension(
-        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 333);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 333, "App3");
-    EXPECT_EQ(data.bucket_info_size(), 1);
-    EXPECT_EQ(data.bucket_info(0).count(), 1);
-    EXPECT_EQ(data.bucket_info(0).start_bucket_elapsed_nanos(), bucketStartTimeNs);
-    EXPECT_EQ(data.bucket_info(0).end_bucket_elapsed_nanos(), bucketStartTimeNs + bucketSizeNs);
-
-    data = countMetrics.data(2);
-    ValidateUidDimension(
-        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 444);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 444, "GMSCoreModule2");
-    ValidateUidDimension(
-        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 222);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 222, "GMSCoreModule1");
-    EXPECT_EQ(data.bucket_info_size(), 1);
-    EXPECT_EQ(data.bucket_info(0).count(), 1);
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(3);
-    ValidateUidDimension(
-        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 111);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 111, "App1");
-    ValidateUidDimension(
-        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 222);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 222, "GMSCoreModule1");
-    ValidateUidDimension(
-        data.dimensions_in_what(), 2, android::util::WAKELOCK_STATE_CHANGED, 333);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 2, android::util::WAKELOCK_STATE_CHANGED, 333, "App3");
-    EXPECT_EQ(data.bucket_info_size(), 1);
-    EXPECT_EQ(data.bucket_info(0).count(), 1);
-    EXPECT_EQ(bucketStartTimeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(4);
-    ValidateUidDimension(
-        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 111);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 111, "App1");
-    ValidateUidDimension(
-        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 333);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 333, "App3");
-    ValidateUidDimension(
-        data.dimensions_in_what(), 2, android::util::WAKELOCK_STATE_CHANGED, 222);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 2, android::util::WAKELOCK_STATE_CHANGED, 222, "GMSCoreModule1");
-    EXPECT_EQ(data.bucket_info_size(), 1);
-    EXPECT_EQ(data.bucket_info(0).count(), 1);
-    EXPECT_EQ(bucketStartTimeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(5);
-    ValidateUidDimension(
-        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 111);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 111, "App1");
-    ValidateUidDimension(
-        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 444);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 444, "GMSCoreModule2");
-    ValidateUidDimension(
-        data.dimensions_in_what(), 2, android::util::WAKELOCK_STATE_CHANGED, 333);
-    ValidateAttributionUidAndTagDimension(
-        data.dimensions_in_what(), 2, android::util::WAKELOCK_STATE_CHANGED, 333, "App3");
-    EXPECT_EQ(data.bucket_info_size(), 1);
-    EXPECT_EQ(data.bucket_info(0).count(), 1);
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//TEST(AttributionE2eTest, TestAttributionMatchAndSliceByFirstUid) {
+//    auto config = CreateStatsdConfig(Position::FIRST);
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//
+//    // Here it assumes that GMS core has two uids.
+//    processor->getUidMap()->updateMap(
+//            1, {222, 444, 111, 333}, {1, 1, 2, 2},
+//            {String16("v1"), String16("v1"), String16("v2"), String16("v2")},
+//            {String16("com.android.gmscore"), String16("com.android.gmscore"), String16("app1"),
+//             String16("APP3")},
+//            {String16(""), String16(""), String16(""), String16("")});
+//
+//    // GMS core node is in the middle.
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1"),
+//                                                          CreateAttribution(222, "GMSCoreModule1"),
+//                                                          CreateAttribution(333, "App3")};
+//
+//    // GMS core node is the last one.
+//    std::vector<AttributionNodeInternal> attributions2 = {CreateAttribution(111, "App1"),
+//                                                          CreateAttribution(333, "App3"),
+//                                                          CreateAttribution(222, "GMSCoreModule1")};
+//
+//    // GMS core node is the first one.
+//    std::vector<AttributionNodeInternal> attributions3 = {CreateAttribution(222, "GMSCoreModule1"),
+//                                                          CreateAttribution(333, "App3")};
+//
+//    // Single GMS core node.
+//    std::vector<AttributionNodeInternal> attributions4 = {CreateAttribution(222, "GMSCoreModule1")};
+//
+//    // GMS core has another uid.
+//    std::vector<AttributionNodeInternal> attributions5 = {CreateAttribution(111, "App1"),
+//                                                          CreateAttribution(444, "GMSCoreModule2"),
+//                                                          CreateAttribution(333, "App3")};
+//
+//    // Multiple GMS core nodes.
+//    std::vector<AttributionNodeInternal> attributions6 = {CreateAttribution(444, "GMSCoreModule2"),
+//                                                          CreateAttribution(222, "GMSCoreModule1")};
+//
+//    // No GMS core nodes.
+//    std::vector<AttributionNodeInternal> attributions7 = {CreateAttribution(111, "App1"),
+//                                                          CreateAttribution(333, "App3")};
+//    std::vector<AttributionNodeInternal> attributions8 = {CreateAttribution(111, "App1")};
+//
+//    // GMS core node with isolated uid.
+//    const int isolatedUid = 666;
+//    std::vector<AttributionNodeInternal> attributions9 = {
+//            CreateAttribution(isolatedUid, "GMSCoreModule3")};
+//
+//    std::vector<std::unique_ptr<LogEvent>> events;
+//    // Events 1~4 are in the 1st bucket.
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + 2));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions2, "wl1", bucketStartTimeNs + 200));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions3, "wl1", bucketStartTimeNs + bucketSizeNs - 1));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions4, "wl1", bucketStartTimeNs + bucketSizeNs));
+//
+//    // Events 5~8 are in the 3rd bucket.
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions5, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 1));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions6, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 100));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions7, "wl2", bucketStartTimeNs + 3 * bucketSizeNs - 2));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions8, "wl2", bucketStartTimeNs + 3 * bucketSizeNs));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions9, "wl2", bucketStartTimeNs + 3 * bucketSizeNs + 1));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions9, "wl2", bucketStartTimeNs + 3 * bucketSizeNs + 100));
+//    events.push_back(CreateIsolatedUidChangedEvent(
+//        isolatedUid, 222, true/* is_create*/, bucketStartTimeNs + 3 * bucketSizeNs - 1));
+//    events.push_back(CreateIsolatedUidChangedEvent(
+//        isolatedUid, 222, false/* is_create*/, bucketStartTimeNs + 3 * bucketSizeNs + 10));
+//
+//    sortLogEventsByTimestamp(&events);
+//
+//    for (const auto& event : events) {
+//        processor->OnLogEvent(event.get());
+//    }
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + 4 * bucketSizeNs + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(reports.reports_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
+//
+//    StatsLogReport::CountMetricDataWrapper countMetrics;
+//    sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
+//    EXPECT_EQ(countMetrics.data_size(), 4);
+//
+//    auto data = countMetrics.data(0);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), android::util::WAKELOCK_STATE_CHANGED, 111,
+//            "App1");
+//    EXPECT_EQ(data.bucket_info_size(), 2);
+//    EXPECT_EQ(data.bucket_info(0).count(), 2);
+//    EXPECT_EQ(data.bucket_info(0).start_bucket_elapsed_nanos(), bucketStartTimeNs);
+//    EXPECT_EQ(data.bucket_info(0).end_bucket_elapsed_nanos(), bucketStartTimeNs + bucketSizeNs);
+//    EXPECT_EQ(data.bucket_info(1).count(), 1);
+//    EXPECT_EQ(data.bucket_info(1).start_bucket_elapsed_nanos(), bucketStartTimeNs + 2 * bucketSizeNs);
+//    EXPECT_EQ(data.bucket_info(1).end_bucket_elapsed_nanos(), bucketStartTimeNs + 3 * bucketSizeNs);
+//
+//    data = countMetrics.data(1);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), android::util::WAKELOCK_STATE_CHANGED, 222,
+//            "GMSCoreModule1");
+//    EXPECT_EQ(data.bucket_info_size(), 2);
+//    EXPECT_EQ(data.bucket_info(0).count(), 1);
+//    EXPECT_EQ(data.bucket_info(0).start_bucket_elapsed_nanos(), bucketStartTimeNs);
+//    EXPECT_EQ(data.bucket_info(0).end_bucket_elapsed_nanos(), bucketStartTimeNs + bucketSizeNs);
+//    EXPECT_EQ(data.bucket_info(1).count(), 1);
+//    EXPECT_EQ(data.bucket_info(1).start_bucket_elapsed_nanos(), bucketStartTimeNs + bucketSizeNs);
+//    EXPECT_EQ(data.bucket_info(1).end_bucket_elapsed_nanos(), bucketStartTimeNs + 2 * bucketSizeNs);
+//
+//    data = countMetrics.data(2);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), android::util::WAKELOCK_STATE_CHANGED, 222,
+//            "GMSCoreModule3");
+//    EXPECT_EQ(data.bucket_info_size(), 1);
+//    EXPECT_EQ(data.bucket_info(0).count(), 1);
+//    EXPECT_EQ(data.bucket_info(0).start_bucket_elapsed_nanos(), bucketStartTimeNs + 3 * bucketSizeNs);
+//    EXPECT_EQ(data.bucket_info(0).end_bucket_elapsed_nanos(), bucketStartTimeNs + 4 * bucketSizeNs);
+//
+//    data = countMetrics.data(3);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), android::util::WAKELOCK_STATE_CHANGED, 444,
+//            "GMSCoreModule2");
+//    EXPECT_EQ(data.bucket_info_size(), 1);
+//    EXPECT_EQ(data.bucket_info(0).count(), 1);
+//    EXPECT_EQ(data.bucket_info(0).start_bucket_elapsed_nanos(), bucketStartTimeNs + 2 * bucketSizeNs);
+//    EXPECT_EQ(data.bucket_info(0).end_bucket_elapsed_nanos(), bucketStartTimeNs + 3 * bucketSizeNs);
+//}
+//
+//TEST(AttributionE2eTest, TestAttributionMatchAndSliceByChain) {
+//    auto config = CreateStatsdConfig(Position::ALL);
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//
+//    // Here it assumes that GMS core has two uids.
+//    processor->getUidMap()->updateMap(
+//            1, {222, 444, 111, 333}, {1, 1, 2, 2},
+//            {String16("v1"), String16("v1"), String16("v2"), String16("v2")},
+//            {String16("com.android.gmscore"), String16("com.android.gmscore"), String16("app1"),
+//             String16("APP3")},
+//            {String16(""), String16(""), String16(""), String16("")});
+//
+//    // GMS core node is in the middle.
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1"),
+//                                                          CreateAttribution(222, "GMSCoreModule1"),
+//                                                          CreateAttribution(333, "App3")};
+//
+//    // GMS core node is the last one.
+//    std::vector<AttributionNodeInternal> attributions2 = {CreateAttribution(111, "App1"),
+//                                                          CreateAttribution(333, "App3"),
+//                                                          CreateAttribution(222, "GMSCoreModule1")};
+//
+//    // GMS core node is the first one.
+//    std::vector<AttributionNodeInternal> attributions3 = {CreateAttribution(222, "GMSCoreModule1"),
+//                                                          CreateAttribution(333, "App3")};
+//
+//    // Single GMS core node.
+//    std::vector<AttributionNodeInternal> attributions4 = {CreateAttribution(222, "GMSCoreModule1")};
+//
+//    // GMS core has another uid.
+//    std::vector<AttributionNodeInternal> attributions5 = {CreateAttribution(111, "App1"),
+//                                                          CreateAttribution(444, "GMSCoreModule2"),
+//                                                          CreateAttribution(333, "App3")};
+//
+//    // Multiple GMS core nodes.
+//    std::vector<AttributionNodeInternal> attributions6 = {CreateAttribution(444, "GMSCoreModule2"),
+//                                                          CreateAttribution(222, "GMSCoreModule1")};
+//
+//    // No GMS core nodes.
+//    std::vector<AttributionNodeInternal> attributions7 = {CreateAttribution(111, "App1"),
+//                                                          CreateAttribution(333, "App3")};
+//    std::vector<AttributionNodeInternal> attributions8 = {CreateAttribution(111, "App1")};
+//
+//    // GMS core node with isolated uid.
+//    const int isolatedUid = 666;
+//    std::vector<AttributionNodeInternal> attributions9 = {
+//            CreateAttribution(isolatedUid, "GMSCoreModule1")};
+//
+//    std::vector<std::unique_ptr<LogEvent>> events;
+//    // Events 1~4 are in the 1st bucket.
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + 2));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions2, "wl1", bucketStartTimeNs + 200));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions3, "wl1", bucketStartTimeNs + bucketSizeNs - 1));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions4, "wl1", bucketStartTimeNs + bucketSizeNs));
+//
+//    // Events 5~8 are in the 3rd bucket.
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions5, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 1));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions6, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 100));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions7, "wl2", bucketStartTimeNs + 3 * bucketSizeNs - 2));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions8, "wl2", bucketStartTimeNs + 3 * bucketSizeNs));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions9, "wl2", bucketStartTimeNs + 3 * bucketSizeNs + 1));
+//    events.push_back(CreateAcquireWakelockEvent(
+//        attributions9, "wl2", bucketStartTimeNs + 3 * bucketSizeNs + 100));
+//    events.push_back(CreateIsolatedUidChangedEvent(
+//        isolatedUid, 222, true/* is_create*/, bucketStartTimeNs + 3 * bucketSizeNs - 1));
+//    events.push_back(CreateIsolatedUidChangedEvent(
+//        isolatedUid, 222, false/* is_create*/, bucketStartTimeNs + 3 * bucketSizeNs + 10));
+//
+//    sortLogEventsByTimestamp(&events);
+//
+//    for (const auto& event : events) {
+//        processor->OnLogEvent(event.get());
+//    }
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + 4 * bucketSizeNs + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(reports.reports_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
+//
+//    StatsLogReport::CountMetricDataWrapper countMetrics;
+//    sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
+//    EXPECT_EQ(countMetrics.data_size(), 6);
+//
+//    auto data = countMetrics.data(0);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), android::util::WAKELOCK_STATE_CHANGED, 222, "GMSCoreModule1");
+//    EXPECT_EQ(2, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//    EXPECT_EQ(1, data.bucket_info(1).count());
+//    EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
+//              data.bucket_info(1).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + 4 * bucketSizeNs,
+//              data.bucket_info(1).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(1);
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 222);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 222, "GMSCoreModule1");
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 333);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 333, "App3");
+//    EXPECT_EQ(data.bucket_info_size(), 1);
+//    EXPECT_EQ(data.bucket_info(0).count(), 1);
+//    EXPECT_EQ(data.bucket_info(0).start_bucket_elapsed_nanos(), bucketStartTimeNs);
+//    EXPECT_EQ(data.bucket_info(0).end_bucket_elapsed_nanos(), bucketStartTimeNs + bucketSizeNs);
+//
+//    data = countMetrics.data(2);
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 444);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 444, "GMSCoreModule2");
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 222);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 222, "GMSCoreModule1");
+//    EXPECT_EQ(data.bucket_info_size(), 1);
+//    EXPECT_EQ(data.bucket_info(0).count(), 1);
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(3);
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 111);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 111, "App1");
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 222);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 222, "GMSCoreModule1");
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 2, android::util::WAKELOCK_STATE_CHANGED, 333);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 2, android::util::WAKELOCK_STATE_CHANGED, 333, "App3");
+//    EXPECT_EQ(data.bucket_info_size(), 1);
+//    EXPECT_EQ(data.bucket_info(0).count(), 1);
+//    EXPECT_EQ(bucketStartTimeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(4);
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 111);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 111, "App1");
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 333);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 333, "App3");
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 2, android::util::WAKELOCK_STATE_CHANGED, 222);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 2, android::util::WAKELOCK_STATE_CHANGED, 222, "GMSCoreModule1");
+//    EXPECT_EQ(data.bucket_info_size(), 1);
+//    EXPECT_EQ(data.bucket_info(0).count(), 1);
+//    EXPECT_EQ(bucketStartTimeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(5);
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 111);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 0, android::util::WAKELOCK_STATE_CHANGED, 111, "App1");
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 444);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 1, android::util::WAKELOCK_STATE_CHANGED, 444, "GMSCoreModule2");
+//    ValidateUidDimension(
+//        data.dimensions_in_what(), 2, android::util::WAKELOCK_STATE_CHANGED, 333);
+//    ValidateAttributionUidAndTagDimension(
+//        data.dimensions_in_what(), 2, android::util::WAKELOCK_STATE_CHANGED, 333, "App3");
+//    EXPECT_EQ(data.bucket_info_size(), 1);
+//    EXPECT_EQ(data.bucket_info(0).count(), 1);
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//}
 
 #else
 GTEST_LOG_(INFO) << "This test does nothing.\n";
diff --git a/cmds/statsd/tests/e2e/ConfigTtl_e2e_test.cpp b/cmds/statsd/tests/e2e/ConfigTtl_e2e_test.cpp
index 325e869..f8edee5 100644
--- a/cmds/statsd/tests/e2e/ConfigTtl_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/ConfigTtl_e2e_test.cpp
@@ -56,52 +56,53 @@
 
 }  // namespace
 
-TEST(ConfigTtlE2eTest, TestCountMetric) {
-    const int num_buckets = 1;
-    const int threshold = 3;
-    auto config = CreateStatsdConfig(num_buckets, threshold);
-    const uint64_t alert_id = config.alert(0).id();
-    const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
-
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
-
-    FieldValue fieldValue1(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
-                           Value((int32_t)111));
-    HashableDimensionKey whatKey1({fieldValue1});
-    MetricDimensionKey dimensionKey1(whatKey1, DEFAULT_DIMENSION_KEY);
-
-    FieldValue fieldValue2(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
-                           Value((int32_t)222));
-    HashableDimensionKey whatKey2({fieldValue2});
-    MetricDimensionKey dimensionKey2(whatKey2, DEFAULT_DIMENSION_KEY);
-
-    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 2);
-    processor->OnLogEvent(event.get());
-
-    event = CreateAcquireWakelockEvent(attributions1, "wl2", bucketStartTimeNs + bucketSizeNs + 2);
-    processor->OnLogEvent(event.get());
-
-    event = CreateAcquireWakelockEvent(
-        attributions1, "wl1", bucketStartTimeNs + 25 * bucketSizeNs + 2);
-    processor->OnLogEvent(event.get());
-
-    EXPECT_EQ((int64_t)(bucketStartTimeNs + 25 * bucketSizeNs + 2 + 2 * 3600 * NS_PER_SEC),
-              processor->mMetricsManagers.begin()->second->getTtlEndNs());
-
-    // Clear the data stored on disk as a result of the ttl.
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + 25 * bucketSizeNs + 3, false, true,
-                                ADB_DUMP, FAST, &buffer);
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(ConfigTtlE2eTest, TestCountMetric) {
+//    const int num_buckets = 1;
+//    const int threshold = 3;
+//    auto config = CreateStatsdConfig(num_buckets, threshold);
+//    const uint64_t alert_id = config.alert(0).id();
+//    const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
+//
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
+//
+//    FieldValue fieldValue1(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
+//                           Value((int32_t)111));
+//    HashableDimensionKey whatKey1({fieldValue1});
+//    MetricDimensionKey dimensionKey1(whatKey1, DEFAULT_DIMENSION_KEY);
+//
+//    FieldValue fieldValue2(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
+//                           Value((int32_t)222));
+//    HashableDimensionKey whatKey2({fieldValue2});
+//    MetricDimensionKey dimensionKey2(whatKey2, DEFAULT_DIMENSION_KEY);
+//
+//    auto event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 2);
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateAcquireWakelockEvent(attributions1, "wl2", bucketStartTimeNs + bucketSizeNs + 2);
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateAcquireWakelockEvent(
+//        attributions1, "wl1", bucketStartTimeNs + 25 * bucketSizeNs + 2);
+//    processor->OnLogEvent(event.get());
+//
+//    EXPECT_EQ((int64_t)(bucketStartTimeNs + 25 * bucketSizeNs + 2 + 2 * 3600 * NS_PER_SEC),
+//              processor->mMetricsManagers.begin()->second->getTtlEndNs());
+//
+//    // Clear the data stored on disk as a result of the ttl.
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + 25 * bucketSizeNs + 3, false, true,
+//                                ADB_DUMP, FAST, &buffer);
+//}
 
 
 #else
diff --git a/cmds/statsd/tests/e2e/CountMetric_e2e_test.cpp b/cmds/statsd/tests/e2e/CountMetric_e2e_test.cpp
index 15fc468..a1f74a6 100644
--- a/cmds/statsd/tests/e2e/CountMetric_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/CountMetric_e2e_test.cpp
@@ -27,772 +27,773 @@
 
 #ifdef __ANDROID__
 
-/**
- * Test a count metric that has one slice_by_state with no primary fields.
- *
- * Once the CountMetricProducer is initialized, it has one atom id in
- * mSlicedStateAtoms and no entries in mStateGroupMap.
-
- * One StateTracker tracks the state atom, and it has one listener which is the
- * CountMetricProducer that was initialized.
- */
-TEST(CountMetricE2eTest, TestSlicedState) {
-    // Initialize config.
-    StatsdConfig config;
-    config.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
-
-    auto syncStartMatcher = CreateSyncStartAtomMatcher();
-    *config.add_atom_matcher() = syncStartMatcher;
-
-    auto state = CreateScreenState();
-    *config.add_state() = state;
-
-    // Create count metric that slices by screen state.
-    int64_t metricId = 123456;
-    auto countMetric = config.add_count_metric();
-    countMetric->set_id(metricId);
-    countMetric->set_what(syncStartMatcher.id());
-    countMetric->set_bucket(TimeUnit::FIVE_MINUTES);
-    countMetric->add_slice_by_state(state.id());
-
-    // Initialize StatsLogProcessor.
-    const uint64_t bucketStartTimeNs = 10000000000;  // 0:10
-    const uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
-    int uid = 12345;
-    int64_t cfgId = 98765;
-    ConfigKey cfgKey(uid, cfgId);
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-
-    // Check that CountMetricProducer was initialized correctly.
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    EXPECT_EQ(metricProducer->mSlicedStateAtoms.size(), 1);
-    EXPECT_EQ(metricProducer->mSlicedStateAtoms.at(0), SCREEN_STATE_ATOM_ID);
-    EXPECT_EQ(metricProducer->mStateGroupMap.size(), 0);
-
-    // Check that StateTrackers were initialized correctly.
-    EXPECT_EQ(1, StateManager::getInstance().getStateTrackersCount());
-    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(SCREEN_STATE_ATOM_ID));
-
-    /*
-               bucket #1                      bucket #2
-    |     1     2     3     4     5     6     7     8     9     10 (minutes)
-    |-----------------------------|-----------------------------|--
-            x                x         x    x        x      x       (syncStartEvents)
-          |                                       |                 (ScreenIsOnEvent)
-                   |     |                                          (ScreenIsOffEvent)
-                                                        |           (ScreenUnknownEvent)
-    */
-    // Initialize log events - first bucket.
-    int appUid = 123;
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(appUid, "App1")};
-    std::vector<std::unique_ptr<LogEvent>> events;
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + 50 * NS_PER_SEC));  // 1:00
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 75 * NS_PER_SEC));  // 1:25
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-                                          bucketStartTimeNs + 150 * NS_PER_SEC));  // 2:40
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-                                          bucketStartTimeNs + 200 * NS_PER_SEC));  // 3:30
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 250 * NS_PER_SEC));  // 4:20
-
-    // Initialize log events - second bucket.
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 350 * NS_PER_SEC));  // 6:00
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 400 * NS_PER_SEC));  // 6:50
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + 450 * NS_PER_SEC));  // 7:40
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 475 * NS_PER_SEC));  // 8:05
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_UNKNOWN,
-                                          bucketStartTimeNs + 500 * NS_PER_SEC));  // 8:30
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 520 * NS_PER_SEC));  // 8:50
-
-    // Send log events to StatsLogProcessor.
-    for (auto& event : events) {
-        processor->OnLogEvent(event.get());
-    }
-
-    // Check dump report.
-    vector<uint8_t> buffer;
-    ConfigMetricsReportList reports;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs * 2 + 1, false, true, ADB_DUMP,
-                            FAST, &buffer);
-    EXPECT_GT(buffer.size(), 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
-    EXPECT_EQ(3, reports.reports(0).metrics(0).count_metrics().data_size());
-
-    // For each CountMetricData, check StateValue info is correct and buckets
-    // have correct counts.
-    auto data = reports.reports(0).metrics(0).count_metrics().data(0);
-    EXPECT_EQ(1, data.slice_by_state_size());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON, data.slice_by_state(0).value());
-    EXPECT_EQ(2, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(1, data.bucket_info(1).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(1);
-    EXPECT_EQ(1, data.slice_by_state_size());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_UNKNOWN, data.slice_by_state(0).value());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(2);
-    EXPECT_EQ(1, data.slice_by_state_size());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_OFF, data.slice_by_state(0).value());
-    EXPECT_EQ(2, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(2, data.bucket_info(1).count());
-}
-
-/**
- * Test a count metric that has one slice_by_state with a mapping and no
- * primary fields.
- *
- * Once the CountMetricProducer is initialized, it has one atom id in
- * mSlicedStateAtoms and has one entry per state value in mStateGroupMap.
- *
- * One StateTracker tracks the state atom, and it has one listener which is the
- * CountMetricProducer that was initialized.
- */
-TEST(CountMetricE2eTest, TestSlicedStateWithMap) {
-    // Initialize config.
-    StatsdConfig config;
-    config.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
-
-    auto syncStartMatcher = CreateSyncStartAtomMatcher();
-    *config.add_atom_matcher() = syncStartMatcher;
-
-    auto state = CreateScreenStateWithOnOffMap();
-    *config.add_state() = state;
-
-    // Create count metric that slices by screen state with on/off map.
-    int64_t metricId = 123456;
-    auto countMetric = config.add_count_metric();
-    countMetric->set_id(metricId);
-    countMetric->set_what(syncStartMatcher.id());
-    countMetric->set_bucket(TimeUnit::FIVE_MINUTES);
-    countMetric->add_slice_by_state(state.id());
-
-    // Initialize StatsLogProcessor.
-    const uint64_t bucketStartTimeNs = 10000000000;  // 0:10
-    const uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
-    int uid = 12345;
-    int64_t cfgId = 98765;
-    ConfigKey cfgKey(uid, cfgId);
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-
-    // Check that StateTrackers were initialized correctly.
-    EXPECT_EQ(1, StateManager::getInstance().getStateTrackersCount());
-    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(SCREEN_STATE_ATOM_ID));
-
-    // Check that CountMetricProducer was initialized correctly.
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    EXPECT_EQ(metricProducer->mSlicedStateAtoms.size(), 1);
-    EXPECT_EQ(metricProducer->mSlicedStateAtoms.at(0), SCREEN_STATE_ATOM_ID);
-    EXPECT_EQ(metricProducer->mStateGroupMap.size(), 1);
-
-    StateMap map = state.map();
-    for (auto group : map.group()) {
-        for (auto value : group.value()) {
-            EXPECT_EQ(metricProducer->mStateGroupMap[SCREEN_STATE_ATOM_ID][value],
-                      group.group_id());
-        }
-    }
-
-    /*
-               bucket #1                      bucket #2
-    |     1     2     3     4     5     6     7     8     9     10 (minutes)
-    |-----------------------------|-----------------------------|--
-      x   x     x       x    x   x      x         x         x       (syncStartEvents)
-     -----------------------------------------------------------SCREEN_OFF events
-       |                                                            (ScreenStateUnknownEvent = 0)
-             |                  |                                   (ScreenStateOffEvent = 1)
-                          |                                         (ScreenStateDozeEvent = 3)
-                                                |                   (ScreenStateDozeSuspendEvent = 4)
-     -----------------------------------------------------------SCREEN_ON events
-                   |                                       |        (ScreenStateOnEvent = 2)
-                      |                                             (ScreenStateVrEvent = 5)
-                                            |                       (ScreenStateOnSuspendEvent = 6)
-    */
-    // Initialize log events - first bucket.
-    int appUid = 123;
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(appUid, "App1")};
-
-    std::vector<std::unique_ptr<LogEvent>> events;
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 20 * NS_PER_SEC));  // 0:30
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_UNKNOWN,
-                                          bucketStartTimeNs + 30 * NS_PER_SEC));  // 0:40
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 60 * NS_PER_SEC));  // 1:10
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-                                          bucketStartTimeNs + 90 * NS_PER_SEC));  // 1:40
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 120 * NS_PER_SEC));  // 2:10
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + 150 * NS_PER_SEC));  // 2:40
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_VR,
-                                          bucketStartTimeNs + 180 * NS_PER_SEC));  // 3:10
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 200 * NS_PER_SEC));  // 3:30
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_DOZE,
-                                          bucketStartTimeNs + 210 * NS_PER_SEC));  // 3:40
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 250 * NS_PER_SEC));  // 4:20
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-                                          bucketStartTimeNs + 280 * NS_PER_SEC));  // 4:50
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 285 * NS_PER_SEC));  // 4:55
-
-    // Initialize log events - second bucket.
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 360 * NS_PER_SEC));  // 6:10
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON_SUSPEND,
-                                          bucketStartTimeNs + 390 * NS_PER_SEC));  // 6:40
-    events.push_back(CreateScreenStateChangedEvent(
-            android::view::DisplayStateEnum::DISPLAY_STATE_DOZE_SUSPEND,
-            bucketStartTimeNs + 430 * NS_PER_SEC));  // 7:20
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 440 * NS_PER_SEC));  // 7:30
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + 540 * NS_PER_SEC));  // 9:10
-    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
-                                          bucketStartTimeNs + 570 * NS_PER_SEC));  // 9:40
-
-    // Send log events to StatsLogProcessor.
-    for (auto& event : events) {
-        processor->OnLogEvent(event.get());
-    }
-
-    // Check dump report.
-    vector<uint8_t> buffer;
-    ConfigMetricsReportList reports;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs * 2 + 1, false, true, ADB_DUMP,
-                            FAST, &buffer);
-    EXPECT_GT(buffer.size(), 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
-    EXPECT_EQ(3, reports.reports(0).metrics(0).count_metrics().data_size());
-
-    // For each CountMetricData, check StateValue info is correct and buckets
-    // have correct counts.
-    auto data = reports.reports(0).metrics(0).count_metrics().data(0);
-    EXPECT_EQ(1, data.slice_by_state_size());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(-1 /* StateTracker::kStateUnknown */, data.slice_by_state(0).value());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(1);
-    EXPECT_EQ(1, data.slice_by_state_size());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
-    EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id());
-    EXPECT_EQ(2, data.bucket_info_size());
-    EXPECT_EQ(4, data.bucket_info(0).count());
-    EXPECT_EQ(2, data.bucket_info(1).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(2);
-    EXPECT_EQ(1, data.slice_by_state_size());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
-    EXPECT_EQ(StringToId("SCREEN_ON"), data.slice_by_state(0).group_id());
-    EXPECT_EQ(2, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(1, data.bucket_info(1).count());
-}
-
-/**
- * Test a count metric that has one slice_by_state with a primary field.
-
- * Once the CountMetricProducer is initialized, it should have one
- * MetricStateLink stored. State querying using a non-empty primary key
- * should also work as intended.
- */
-TEST(CountMetricE2eTest, TestSlicedStateWithPrimaryFields) {
-    // Initialize config.
-    StatsdConfig config;
-    config.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
-
-    auto appCrashMatcher =
-            CreateSimpleAtomMatcher("APP_CRASH_OCCURRED", android::util::APP_CRASH_OCCURRED);
-    *config.add_atom_matcher() = appCrashMatcher;
-
-    auto state = CreateUidProcessState();
-    *config.add_state() = state;
-
-    // Create count metric that slices by uid process state.
-    int64_t metricId = 123456;
-    auto countMetric = config.add_count_metric();
-    countMetric->set_id(metricId);
-    countMetric->set_what(appCrashMatcher.id());
-    countMetric->set_bucket(TimeUnit::FIVE_MINUTES);
-    countMetric->add_slice_by_state(state.id());
-    MetricStateLink* stateLink = countMetric->add_state_link();
-    stateLink->set_state_atom_id(UID_PROCESS_STATE_ATOM_ID);
-    auto fieldsInWhat = stateLink->mutable_fields_in_what();
-    *fieldsInWhat = CreateDimensions(android::util::APP_CRASH_OCCURRED, {1 /* uid */});
-    auto fieldsInState = stateLink->mutable_fields_in_state();
-    *fieldsInState = CreateDimensions(UID_PROCESS_STATE_ATOM_ID, {1 /* uid */});
-
-    // Initialize StatsLogProcessor.
-    const uint64_t bucketStartTimeNs = 10000000000;  // 0:10
-    const uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
-    int uid = 12345;
-    int64_t cfgId = 98765;
-    ConfigKey cfgKey(uid, cfgId);
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-
-    // Check that StateTrackers were initialized correctly.
-    EXPECT_EQ(1, StateManager::getInstance().getStateTrackersCount());
-    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(UID_PROCESS_STATE_ATOM_ID));
-
-    // Check that CountMetricProducer was initialized correctly.
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    EXPECT_EQ(metricProducer->mSlicedStateAtoms.size(), 1);
-    EXPECT_EQ(metricProducer->mSlicedStateAtoms.at(0), UID_PROCESS_STATE_ATOM_ID);
-    EXPECT_EQ(metricProducer->mStateGroupMap.size(), 0);
-    EXPECT_EQ(metricProducer->mMetric2StateLinks.size(), 1);
-
-    /*
-    NOTE: "1" or "2" represents the uid associated with the state/app crash event
-               bucket #1                      bucket #2
-    |     1     2     3     4     5     6     7     8     9     10
-    |-----------------------------|-----------------------------|--
-      1   1     1       1    1   2      1         1          2      (AppCrashEvents)
-     -----------------------------------------------------------PROCESS STATE events
-             1                  2                                   (ProcessStateTopEvent = 1002)
-                          1                 1                       (ProcessStateForegroundServiceEvent = 1003)
-                                                2                   (ProcessStateImportantBackgroundEvent = 1006)
-        1          1                                       1        (ProcessStateImportantForegroundEvent = 1005)
-
-    Based on the diagram above, an AppCrashEvent querying for process state value would return:
-    - StateTracker::kStateUnknown
-    - Important foreground
-    - Top
-    - Important foreground
-    - Foreground service
-    - Top (both the app crash and state still have matching uid = 2)
-
-    - Foreground service
-    - Foreground service
-    - Important background
-    */
-    // Initialize log events - first bucket.
-    std::vector<std::unique_ptr<LogEvent>> events;
-    events.push_back(
-            CreateAppCrashOccurredEvent(1 /* uid */, bucketStartTimeNs + 20 * NS_PER_SEC));  // 0:30
-    events.push_back(CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
-            bucketStartTimeNs + 30 * NS_PER_SEC));  // 0:40
-    events.push_back(
-            CreateAppCrashOccurredEvent(1 /* uid */, bucketStartTimeNs + 60 * NS_PER_SEC));  // 1:10
-    events.push_back(CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_TOP,
-            bucketStartTimeNs + 90 * NS_PER_SEC));  // 1:40
-    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
-                                                 bucketStartTimeNs + 120 * NS_PER_SEC));  // 2:10
-    events.push_back(CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
-            bucketStartTimeNs + 150 * NS_PER_SEC));  // 2:40
-    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
-                                                 bucketStartTimeNs + 200 * NS_PER_SEC));  // 3:30
-    events.push_back(CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_FOREGROUND_SERVICE,
-            bucketStartTimeNs + 210 * NS_PER_SEC));  // 3:40
-    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
-                                                 bucketStartTimeNs + 250 * NS_PER_SEC));  // 4:20
-    events.push_back(CreateUidProcessStateChangedEvent(
-            2 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_TOP,
-            bucketStartTimeNs + 280 * NS_PER_SEC));  // 4:50
-    events.push_back(CreateAppCrashOccurredEvent(2 /* uid */,
-                                                 bucketStartTimeNs + 285 * NS_PER_SEC));  // 4:55
-
-    // Initialize log events - second bucket.
-    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
-                                                 bucketStartTimeNs + 360 * NS_PER_SEC));  // 6:10
-    events.push_back(CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_FOREGROUND_SERVICE,
-            bucketStartTimeNs + 390 * NS_PER_SEC));  // 6:40
-    events.push_back(CreateUidProcessStateChangedEvent(
-            2 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
-            bucketStartTimeNs + 430 * NS_PER_SEC));  // 7:20
-    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
-                                                 bucketStartTimeNs + 440 * NS_PER_SEC));  // 7:30
-    events.push_back(CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
-            bucketStartTimeNs + 540 * NS_PER_SEC));  // 9:10
-    events.push_back(CreateAppCrashOccurredEvent(2 /* uid */,
-                                                 bucketStartTimeNs + 570 * NS_PER_SEC));  // 9:40
-
-    // Send log events to StatsLogProcessor.
-    for (auto& event : events) {
-        processor->OnLogEvent(event.get());
-    }
-
-    // Check dump report.
-    vector<uint8_t> buffer;
-    ConfigMetricsReportList reports;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs * 2 + 1, false, true, ADB_DUMP,
-                            FAST, &buffer);
-    EXPECT_GT(buffer.size(), 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
-    EXPECT_EQ(5, reports.reports(0).metrics(0).count_metrics().data_size());
-
-    // For each CountMetricData, check StateValue info is correct and buckets
-    // have correct counts.
-    auto data = reports.reports(0).metrics(0).count_metrics().data(0);
-    EXPECT_EQ(1, data.slice_by_state_size());
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, data.slice_by_state(0).value());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(1);
-    EXPECT_EQ(1, data.slice_by_state_size());
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(-1 /* StateTracker::kStateUnknown */, data.slice_by_state(0).value());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(2);
-    EXPECT_EQ(1, data.slice_by_state_size());
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(0).value());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(2, data.bucket_info(0).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(3);
-    EXPECT_EQ(1, data.slice_by_state_size());
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(0).value());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(2, data.bucket_info(0).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(4);
-    EXPECT_EQ(1, data.slice_by_state_size());
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(android::app::PROCESS_STATE_FOREGROUND_SERVICE, data.slice_by_state(0).value());
-    EXPECT_EQ(2, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(2, data.bucket_info(1).count());
-}
-
-TEST(CountMetricE2eTest, TestMultipleSlicedStates) {
-    // Initialize config.
-    StatsdConfig config;
-    config.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
-
-    auto appCrashMatcher =
-            CreateSimpleAtomMatcher("APP_CRASH_OCCURRED", android::util::APP_CRASH_OCCURRED);
-    *config.add_atom_matcher() = appCrashMatcher;
-
-    auto state1 = CreateScreenStateWithOnOffMap();
-    *config.add_state() = state1;
-    auto state2 = CreateUidProcessState();
-    *config.add_state() = state2;
-
-    // Create count metric that slices by screen state with on/off map and
-    // slices by uid process state.
-    int64_t metricId = 123456;
-    auto countMetric = config.add_count_metric();
-    countMetric->set_id(metricId);
-    countMetric->set_what(appCrashMatcher.id());
-    countMetric->set_bucket(TimeUnit::FIVE_MINUTES);
-    countMetric->add_slice_by_state(state1.id());
-    countMetric->add_slice_by_state(state2.id());
-    MetricStateLink* stateLink = countMetric->add_state_link();
-    stateLink->set_state_atom_id(UID_PROCESS_STATE_ATOM_ID);
-    auto fieldsInWhat = stateLink->mutable_fields_in_what();
-    *fieldsInWhat = CreateDimensions(android::util::APP_CRASH_OCCURRED, {1 /* uid */});
-    auto fieldsInState = stateLink->mutable_fields_in_state();
-    *fieldsInState = CreateDimensions(UID_PROCESS_STATE_ATOM_ID, {1 /* uid */});
-
-    // Initialize StatsLogProcessor.
-    const uint64_t bucketStartTimeNs = 10000000000;  // 0:10
-    const uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
-    int uid = 12345;
-    int64_t cfgId = 98765;
-    ConfigKey cfgKey(uid, cfgId);
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-
-    // Check that StateTrackers were properly initialized.
-    EXPECT_EQ(2, StateManager::getInstance().getStateTrackersCount());
-    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(SCREEN_STATE_ATOM_ID));
-    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(UID_PROCESS_STATE_ATOM_ID));
-
-    // Check that CountMetricProducer was initialized correctly.
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    EXPECT_EQ(metricProducer->mSlicedStateAtoms.size(), 2);
-    EXPECT_EQ(metricProducer->mSlicedStateAtoms.at(0), SCREEN_STATE_ATOM_ID);
-    EXPECT_EQ(metricProducer->mSlicedStateAtoms.at(1), UID_PROCESS_STATE_ATOM_ID);
-    EXPECT_EQ(metricProducer->mStateGroupMap.size(), 1);
-    EXPECT_EQ(metricProducer->mMetric2StateLinks.size(), 1);
-
-    StateMap map = state1.map();
-    for (auto group : map.group()) {
-        for (auto value : group.value()) {
-            EXPECT_EQ(metricProducer->mStateGroupMap[SCREEN_STATE_ATOM_ID][value],
-                      group.group_id());
-        }
-    }
-
-    /*
-               bucket #1                      bucket #2
-    |     1     2     3     4     5     6     7     8     9     10 (minutes)
-    |-----------------------------|-----------------------------|--
-      1   1     1       1    1   2      1         1           2     (AppCrashEvents)
-     -----------------------------------------------------------SCREEN_OFF events
-       |                                                            (ScreenStateUnknownEvent = 0)
-             |                                  |                   (ScreenStateOffEvent = 1)
-                          |                                         (ScreenStateDozeEvent = 3)
-     -----------------------------------------------------------SCREEN_ON events
-                    |                                    |          (ScreenStateOnEvent = 2)
-                                            |                       (ScreenStateOnSuspendEvent = 6)
-     -----------------------------------------------------------PROCESS STATE events
-             1                  2                                   (ProcessStateTopEvent = 1002)
-                                          1                         (ProcessStateForegroundServiceEvent = 1003)
-                                               2                    (ProcessStateImportantBackgroundEvent = 1006)
-     1             1                                       1        (ProcessStateImportantForegroundEvent = 1005)
-
-     Based on the diagram above, Screen State / Process State pairs for each
-     AppCrashEvent are:
-     - StateTracker::kStateUnknown / important foreground
-     - off / important foreground
-     - off / Top
-     - on / important foreground
-     - off / important foreground
-     - off / top
-
-     - off / important foreground
-     - off / foreground service
-     - on / important background
-
-    */
-    // Initialize log events - first bucket.
-    std::vector<std::unique_ptr<LogEvent>> events;
-    events.push_back(CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
-            bucketStartTimeNs + 5 * NS_PER_SEC));  // 0:15
-    events.push_back(
-            CreateAppCrashOccurredEvent(1 /* uid */, bucketStartTimeNs + 20 * NS_PER_SEC));  // 0:30
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_UNKNOWN,
-                                          bucketStartTimeNs + 30 * NS_PER_SEC));  // 0:40
-    events.push_back(
-            CreateAppCrashOccurredEvent(1 /* uid */, bucketStartTimeNs + 60 * NS_PER_SEC));  // 1:10
-    events.push_back(CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_TOP,
-            bucketStartTimeNs + 90 * NS_PER_SEC));  // 1:40
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-                                          bucketStartTimeNs + 90 * NS_PER_SEC));  // 1:40
-    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
-                                                 bucketStartTimeNs + 120 * NS_PER_SEC));  // 2:10
-    events.push_back(CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
-            bucketStartTimeNs + 150 * NS_PER_SEC));  // 2:40
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + 160 * NS_PER_SEC));  // 2:50
-    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
-                                                 bucketStartTimeNs + 200 * NS_PER_SEC));  // 3:30
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_DOZE,
-                                          bucketStartTimeNs + 210 * NS_PER_SEC));  // 3:40
-    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
-                                                 bucketStartTimeNs + 250 * NS_PER_SEC));  // 4:20
-    events.push_back(CreateUidProcessStateChangedEvent(
-            2 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_TOP,
-            bucketStartTimeNs + 280 * NS_PER_SEC));  // 4:50
-    events.push_back(CreateAppCrashOccurredEvent(2 /* uid */,
-                                                 bucketStartTimeNs + 285 * NS_PER_SEC));  // 4:55
-
-    // Initialize log events - second bucket.
-    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
-                                                 bucketStartTimeNs + 360 * NS_PER_SEC));  // 6:10
-    events.push_back(CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_FOREGROUND_SERVICE,
-            bucketStartTimeNs + 380 * NS_PER_SEC));  // 6:30
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON_SUSPEND,
-                                          bucketStartTimeNs + 390 * NS_PER_SEC));  // 6:40
-    events.push_back(CreateUidProcessStateChangedEvent(
-            2 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
-            bucketStartTimeNs + 420 * NS_PER_SEC));  // 7:10
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-                                          bucketStartTimeNs + 440 * NS_PER_SEC));  // 7:30
-    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
-                                                 bucketStartTimeNs + 450 * NS_PER_SEC));  // 7:40
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + 520 * NS_PER_SEC));  // 8:50
-    events.push_back(CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
-            bucketStartTimeNs + 540 * NS_PER_SEC));  // 9:10
-    events.push_back(CreateAppCrashOccurredEvent(2 /* uid */,
-                                                 bucketStartTimeNs + 570 * NS_PER_SEC));  // 9:40
-
-    // Send log events to StatsLogProcessor.
-    for (auto& event : events) {
-        processor->OnLogEvent(event.get());
-    }
-
-    // Check dump report.
-    vector<uint8_t> buffer;
-    ConfigMetricsReportList reports;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs * 2 + 1, false, true, ADB_DUMP,
-                            FAST, &buffer);
-    EXPECT_GT(buffer.size(), 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
-    EXPECT_EQ(6, reports.reports(0).metrics(0).count_metrics().data_size());
-
-    // For each CountMetricData, check StateValue info is correct and buckets
-    // have correct counts.
-    auto data = reports.reports(0).metrics(0).count_metrics().data(0);
-    EXPECT_EQ(2, data.slice_by_state_size());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
-    EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id());
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
-    EXPECT_TRUE(data.slice_by_state(1).has_value());
-    EXPECT_EQ(android::app::PROCESS_STATE_FOREGROUND_SERVICE, data.slice_by_state(1).value());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(1);
-    EXPECT_EQ(2, data.slice_by_state_size());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(-1, data.slice_by_state(0).value());
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
-    EXPECT_TRUE(data.slice_by_state(1).has_value());
-    EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(2);
-    EXPECT_EQ(2, data.slice_by_state_size());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
-    EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id());
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
-    EXPECT_TRUE(data.slice_by_state(1).has_value());
-    EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
-    EXPECT_EQ(2, data.bucket_info_size());
-    EXPECT_EQ(2, data.bucket_info(0).count());
-    EXPECT_EQ(1, data.bucket_info(1).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(3);
-    EXPECT_EQ(2, data.slice_by_state_size());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
-    EXPECT_EQ(StringToId("SCREEN_ON"), data.slice_by_state(0).group_id());
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
-    EXPECT_TRUE(data.slice_by_state(1).has_value());
-    EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(4);
-    EXPECT_EQ(2, data.slice_by_state_size());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
-    EXPECT_EQ(StringToId("SCREEN_ON"), data.slice_by_state(0).group_id());
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
-    EXPECT_TRUE(data.slice_by_state(1).has_value());
-    EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, data.slice_by_state(1).value());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-
-    data = reports.reports(0).metrics(0).count_metrics().data(5);
-    EXPECT_EQ(2, data.slice_by_state_size());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
-    EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id());
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
-    EXPECT_TRUE(data.slice_by_state(1).has_value());
-    EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(1).value());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(2, data.bucket_info(0).count());
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+///**
+// * Test a count metric that has one slice_by_state with no primary fields.
+// *
+// * Once the CountMetricProducer is initialized, it has one atom id in
+// * mSlicedStateAtoms and no entries in mStateGroupMap.
+//
+// * One StateTracker tracks the state atom, and it has one listener which is the
+// * CountMetricProducer that was initialized.
+// */
+//TEST(CountMetricE2eTest, TestSlicedState) {
+//    // Initialize config.
+//    StatsdConfig config;
+//    config.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
+//
+//    auto syncStartMatcher = CreateSyncStartAtomMatcher();
+//    *config.add_atom_matcher() = syncStartMatcher;
+//
+//    auto state = CreateScreenState();
+//    *config.add_state() = state;
+//
+//    // Create count metric that slices by screen state.
+//    int64_t metricId = 123456;
+//    auto countMetric = config.add_count_metric();
+//    countMetric->set_id(metricId);
+//    countMetric->set_what(syncStartMatcher.id());
+//    countMetric->set_bucket(TimeUnit::FIVE_MINUTES);
+//    countMetric->add_slice_by_state(state.id());
+//
+//    // Initialize StatsLogProcessor.
+//    const uint64_t bucketStartTimeNs = 10000000000;  // 0:10
+//    const uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
+//    int uid = 12345;
+//    int64_t cfgId = 98765;
+//    ConfigKey cfgKey(uid, cfgId);
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//
+//    // Check that CountMetricProducer was initialized correctly.
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    EXPECT_EQ(metricProducer->mSlicedStateAtoms.size(), 1);
+//    EXPECT_EQ(metricProducer->mSlicedStateAtoms.at(0), SCREEN_STATE_ATOM_ID);
+//    EXPECT_EQ(metricProducer->mStateGroupMap.size(), 0);
+//
+//    // Check that StateTrackers were initialized correctly.
+//    EXPECT_EQ(1, StateManager::getInstance().getStateTrackersCount());
+//    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(SCREEN_STATE_ATOM_ID));
+//
+//    /*
+//               bucket #1                      bucket #2
+//    |     1     2     3     4     5     6     7     8     9     10 (minutes)
+//    |-----------------------------|-----------------------------|--
+//            x                x         x    x        x      x       (syncStartEvents)
+//          |                                       |                 (ScreenIsOnEvent)
+//                   |     |                                          (ScreenIsOffEvent)
+//                                                        |           (ScreenUnknownEvent)
+//    */
+//    // Initialize log events - first bucket.
+//    int appUid = 123;
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(appUid, "App1")};
+//    std::vector<std::unique_ptr<LogEvent>> events;
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + 50 * NS_PER_SEC));  // 1:00
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 75 * NS_PER_SEC));  // 1:25
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//                                          bucketStartTimeNs + 150 * NS_PER_SEC));  // 2:40
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//                                          bucketStartTimeNs + 200 * NS_PER_SEC));  // 3:30
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 250 * NS_PER_SEC));  // 4:20
+//
+//    // Initialize log events - second bucket.
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 350 * NS_PER_SEC));  // 6:00
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 400 * NS_PER_SEC));  // 6:50
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + 450 * NS_PER_SEC));  // 7:40
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 475 * NS_PER_SEC));  // 8:05
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_UNKNOWN,
+//                                          bucketStartTimeNs + 500 * NS_PER_SEC));  // 8:30
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 520 * NS_PER_SEC));  // 8:50
+//
+//    // Send log events to StatsLogProcessor.
+//    for (auto& event : events) {
+//        processor->OnLogEvent(event.get());
+//    }
+//
+//    // Check dump report.
+//    vector<uint8_t> buffer;
+//    ConfigMetricsReportList reports;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs * 2 + 1, false, true, ADB_DUMP,
+//                            FAST, &buffer);
+//    EXPECT_GT(buffer.size(), 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
+//    EXPECT_EQ(3, reports.reports(0).metrics(0).count_metrics().data_size());
+//
+//    // For each CountMetricData, check StateValue info is correct and buckets
+//    // have correct counts.
+//    auto data = reports.reports(0).metrics(0).count_metrics().data(0);
+//    EXPECT_EQ(1, data.slice_by_state_size());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON, data.slice_by_state(0).value());
+//    EXPECT_EQ(2, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(1, data.bucket_info(1).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(1);
+//    EXPECT_EQ(1, data.slice_by_state_size());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_UNKNOWN, data.slice_by_state(0).value());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(2);
+//    EXPECT_EQ(1, data.slice_by_state_size());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_OFF, data.slice_by_state(0).value());
+//    EXPECT_EQ(2, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(2, data.bucket_info(1).count());
+//}
+//
+///**
+// * Test a count metric that has one slice_by_state with a mapping and no
+// * primary fields.
+// *
+// * Once the CountMetricProducer is initialized, it has one atom id in
+// * mSlicedStateAtoms and has one entry per state value in mStateGroupMap.
+// *
+// * One StateTracker tracks the state atom, and it has one listener which is the
+// * CountMetricProducer that was initialized.
+// */
+//TEST(CountMetricE2eTest, TestSlicedStateWithMap) {
+//    // Initialize config.
+//    StatsdConfig config;
+//    config.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
+//
+//    auto syncStartMatcher = CreateSyncStartAtomMatcher();
+//    *config.add_atom_matcher() = syncStartMatcher;
+//
+//    auto state = CreateScreenStateWithOnOffMap();
+//    *config.add_state() = state;
+//
+//    // Create count metric that slices by screen state with on/off map.
+//    int64_t metricId = 123456;
+//    auto countMetric = config.add_count_metric();
+//    countMetric->set_id(metricId);
+//    countMetric->set_what(syncStartMatcher.id());
+//    countMetric->set_bucket(TimeUnit::FIVE_MINUTES);
+//    countMetric->add_slice_by_state(state.id());
+//
+//    // Initialize StatsLogProcessor.
+//    const uint64_t bucketStartTimeNs = 10000000000;  // 0:10
+//    const uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
+//    int uid = 12345;
+//    int64_t cfgId = 98765;
+//    ConfigKey cfgKey(uid, cfgId);
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//
+//    // Check that StateTrackers were initialized correctly.
+//    EXPECT_EQ(1, StateManager::getInstance().getStateTrackersCount());
+//    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(SCREEN_STATE_ATOM_ID));
+//
+//    // Check that CountMetricProducer was initialized correctly.
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    EXPECT_EQ(metricProducer->mSlicedStateAtoms.size(), 1);
+//    EXPECT_EQ(metricProducer->mSlicedStateAtoms.at(0), SCREEN_STATE_ATOM_ID);
+//    EXPECT_EQ(metricProducer->mStateGroupMap.size(), 1);
+//
+//    StateMap map = state.map();
+//    for (auto group : map.group()) {
+//        for (auto value : group.value()) {
+//            EXPECT_EQ(metricProducer->mStateGroupMap[SCREEN_STATE_ATOM_ID][value],
+//                      group.group_id());
+//        }
+//    }
+//
+//    /*
+//               bucket #1                      bucket #2
+//    |     1     2     3     4     5     6     7     8     9     10 (minutes)
+//    |-----------------------------|-----------------------------|--
+//      x   x     x       x    x   x      x         x         x       (syncStartEvents)
+//     -----------------------------------------------------------SCREEN_OFF events
+//       |                                                            (ScreenStateUnknownEvent = 0)
+//             |                  |                                   (ScreenStateOffEvent = 1)
+//                          |                                         (ScreenStateDozeEvent = 3)
+//                                                |                   (ScreenStateDozeSuspendEvent = 4)
+//     -----------------------------------------------------------SCREEN_ON events
+//                   |                                       |        (ScreenStateOnEvent = 2)
+//                      |                                             (ScreenStateVrEvent = 5)
+//                                            |                       (ScreenStateOnSuspendEvent = 6)
+//    */
+//    // Initialize log events - first bucket.
+//    int appUid = 123;
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(appUid, "App1")};
+//
+//    std::vector<std::unique_ptr<LogEvent>> events;
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 20 * NS_PER_SEC));  // 0:30
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_UNKNOWN,
+//                                          bucketStartTimeNs + 30 * NS_PER_SEC));  // 0:40
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 60 * NS_PER_SEC));  // 1:10
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//                                          bucketStartTimeNs + 90 * NS_PER_SEC));  // 1:40
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 120 * NS_PER_SEC));  // 2:10
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + 150 * NS_PER_SEC));  // 2:40
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_VR,
+//                                          bucketStartTimeNs + 180 * NS_PER_SEC));  // 3:10
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 200 * NS_PER_SEC));  // 3:30
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_DOZE,
+//                                          bucketStartTimeNs + 210 * NS_PER_SEC));  // 3:40
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 250 * NS_PER_SEC));  // 4:20
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//                                          bucketStartTimeNs + 280 * NS_PER_SEC));  // 4:50
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 285 * NS_PER_SEC));  // 4:55
+//
+//    // Initialize log events - second bucket.
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 360 * NS_PER_SEC));  // 6:10
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON_SUSPEND,
+//                                          bucketStartTimeNs + 390 * NS_PER_SEC));  // 6:40
+//    events.push_back(CreateScreenStateChangedEvent(
+//            android::view::DisplayStateEnum::DISPLAY_STATE_DOZE_SUSPEND,
+//            bucketStartTimeNs + 430 * NS_PER_SEC));  // 7:20
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 440 * NS_PER_SEC));  // 7:30
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + 540 * NS_PER_SEC));  // 9:10
+//    events.push_back(CreateSyncStartEvent(attributions1, "sync_name",
+//                                          bucketStartTimeNs + 570 * NS_PER_SEC));  // 9:40
+//
+//    // Send log events to StatsLogProcessor.
+//    for (auto& event : events) {
+//        processor->OnLogEvent(event.get());
+//    }
+//
+//    // Check dump report.
+//    vector<uint8_t> buffer;
+//    ConfigMetricsReportList reports;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs * 2 + 1, false, true, ADB_DUMP,
+//                            FAST, &buffer);
+//    EXPECT_GT(buffer.size(), 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
+//    EXPECT_EQ(3, reports.reports(0).metrics(0).count_metrics().data_size());
+//
+//    // For each CountMetricData, check StateValue info is correct and buckets
+//    // have correct counts.
+//    auto data = reports.reports(0).metrics(0).count_metrics().data(0);
+//    EXPECT_EQ(1, data.slice_by_state_size());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(-1 /* StateTracker::kStateUnknown */, data.slice_by_state(0).value());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(1);
+//    EXPECT_EQ(1, data.slice_by_state_size());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
+//    EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id());
+//    EXPECT_EQ(2, data.bucket_info_size());
+//    EXPECT_EQ(4, data.bucket_info(0).count());
+//    EXPECT_EQ(2, data.bucket_info(1).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(2);
+//    EXPECT_EQ(1, data.slice_by_state_size());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
+//    EXPECT_EQ(StringToId("SCREEN_ON"), data.slice_by_state(0).group_id());
+//    EXPECT_EQ(2, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(1, data.bucket_info(1).count());
+//}
+//
+///**
+// * Test a count metric that has one slice_by_state with a primary field.
+//
+// * Once the CountMetricProducer is initialized, it should have one
+// * MetricStateLink stored. State querying using a non-empty primary key
+// * should also work as intended.
+// */
+//TEST(CountMetricE2eTest, TestSlicedStateWithPrimaryFields) {
+//    // Initialize config.
+//    StatsdConfig config;
+//    config.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
+//
+//    auto appCrashMatcher =
+//            CreateSimpleAtomMatcher("APP_CRASH_OCCURRED", android::util::APP_CRASH_OCCURRED);
+//    *config.add_atom_matcher() = appCrashMatcher;
+//
+//    auto state = CreateUidProcessState();
+//    *config.add_state() = state;
+//
+//    // Create count metric that slices by uid process state.
+//    int64_t metricId = 123456;
+//    auto countMetric = config.add_count_metric();
+//    countMetric->set_id(metricId);
+//    countMetric->set_what(appCrashMatcher.id());
+//    countMetric->set_bucket(TimeUnit::FIVE_MINUTES);
+//    countMetric->add_slice_by_state(state.id());
+//    MetricStateLink* stateLink = countMetric->add_state_link();
+//    stateLink->set_state_atom_id(UID_PROCESS_STATE_ATOM_ID);
+//    auto fieldsInWhat = stateLink->mutable_fields_in_what();
+//    *fieldsInWhat = CreateDimensions(android::util::APP_CRASH_OCCURRED, {1 /* uid */});
+//    auto fieldsInState = stateLink->mutable_fields_in_state();
+//    *fieldsInState = CreateDimensions(UID_PROCESS_STATE_ATOM_ID, {1 /* uid */});
+//
+//    // Initialize StatsLogProcessor.
+//    const uint64_t bucketStartTimeNs = 10000000000;  // 0:10
+//    const uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
+//    int uid = 12345;
+//    int64_t cfgId = 98765;
+//    ConfigKey cfgKey(uid, cfgId);
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//
+//    // Check that StateTrackers were initialized correctly.
+//    EXPECT_EQ(1, StateManager::getInstance().getStateTrackersCount());
+//    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(UID_PROCESS_STATE_ATOM_ID));
+//
+//    // Check that CountMetricProducer was initialized correctly.
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    EXPECT_EQ(metricProducer->mSlicedStateAtoms.size(), 1);
+//    EXPECT_EQ(metricProducer->mSlicedStateAtoms.at(0), UID_PROCESS_STATE_ATOM_ID);
+//    EXPECT_EQ(metricProducer->mStateGroupMap.size(), 0);
+//    EXPECT_EQ(metricProducer->mMetric2StateLinks.size(), 1);
+//
+//    /*
+//    NOTE: "1" or "2" represents the uid associated with the state/app crash event
+//               bucket #1                      bucket #2
+//    |     1     2     3     4     5     6     7     8     9     10
+//    |-----------------------------|-----------------------------|--
+//      1   1     1       1    1   2      1         1          2      (AppCrashEvents)
+//     -----------------------------------------------------------PROCESS STATE events
+//             1                  2                                   (ProcessStateTopEvent = 1002)
+//                          1                 1                       (ProcessStateForegroundServiceEvent = 1003)
+//                                                2                   (ProcessStateImportantBackgroundEvent = 1006)
+//        1          1                                       1        (ProcessStateImportantForegroundEvent = 1005)
+//
+//    Based on the diagram above, an AppCrashEvent querying for process state value would return:
+//    - StateTracker::kStateUnknown
+//    - Important foreground
+//    - Top
+//    - Important foreground
+//    - Foreground service
+//    - Top (both the app crash and state still have matching uid = 2)
+//
+//    - Foreground service
+//    - Foreground service
+//    - Important background
+//    */
+//    // Initialize log events - first bucket.
+//    std::vector<std::unique_ptr<LogEvent>> events;
+//    events.push_back(
+//            CreateAppCrashOccurredEvent(1 /* uid */, bucketStartTimeNs + 20 * NS_PER_SEC));  // 0:30
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
+//            bucketStartTimeNs + 30 * NS_PER_SEC));  // 0:40
+//    events.push_back(
+//            CreateAppCrashOccurredEvent(1 /* uid */, bucketStartTimeNs + 60 * NS_PER_SEC));  // 1:10
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_TOP,
+//            bucketStartTimeNs + 90 * NS_PER_SEC));  // 1:40
+//    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
+//                                                 bucketStartTimeNs + 120 * NS_PER_SEC));  // 2:10
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
+//            bucketStartTimeNs + 150 * NS_PER_SEC));  // 2:40
+//    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
+//                                                 bucketStartTimeNs + 200 * NS_PER_SEC));  // 3:30
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_FOREGROUND_SERVICE,
+//            bucketStartTimeNs + 210 * NS_PER_SEC));  // 3:40
+//    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
+//                                                 bucketStartTimeNs + 250 * NS_PER_SEC));  // 4:20
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            2 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_TOP,
+//            bucketStartTimeNs + 280 * NS_PER_SEC));  // 4:50
+//    events.push_back(CreateAppCrashOccurredEvent(2 /* uid */,
+//                                                 bucketStartTimeNs + 285 * NS_PER_SEC));  // 4:55
+//
+//    // Initialize log events - second bucket.
+//    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
+//                                                 bucketStartTimeNs + 360 * NS_PER_SEC));  // 6:10
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_FOREGROUND_SERVICE,
+//            bucketStartTimeNs + 390 * NS_PER_SEC));  // 6:40
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            2 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
+//            bucketStartTimeNs + 430 * NS_PER_SEC));  // 7:20
+//    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
+//                                                 bucketStartTimeNs + 440 * NS_PER_SEC));  // 7:30
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
+//            bucketStartTimeNs + 540 * NS_PER_SEC));  // 9:10
+//    events.push_back(CreateAppCrashOccurredEvent(2 /* uid */,
+//                                                 bucketStartTimeNs + 570 * NS_PER_SEC));  // 9:40
+//
+//    // Send log events to StatsLogProcessor.
+//    for (auto& event : events) {
+//        processor->OnLogEvent(event.get());
+//    }
+//
+//    // Check dump report.
+//    vector<uint8_t> buffer;
+//    ConfigMetricsReportList reports;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs * 2 + 1, false, true, ADB_DUMP,
+//                            FAST, &buffer);
+//    EXPECT_GT(buffer.size(), 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
+//    EXPECT_EQ(5, reports.reports(0).metrics(0).count_metrics().data_size());
+//
+//    // For each CountMetricData, check StateValue info is correct and buckets
+//    // have correct counts.
+//    auto data = reports.reports(0).metrics(0).count_metrics().data(0);
+//    EXPECT_EQ(1, data.slice_by_state_size());
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, data.slice_by_state(0).value());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(1);
+//    EXPECT_EQ(1, data.slice_by_state_size());
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(-1 /* StateTracker::kStateUnknown */, data.slice_by_state(0).value());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(2);
+//    EXPECT_EQ(1, data.slice_by_state_size());
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(0).value());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(2, data.bucket_info(0).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(3);
+//    EXPECT_EQ(1, data.slice_by_state_size());
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(0).value());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(2, data.bucket_info(0).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(4);
+//    EXPECT_EQ(1, data.slice_by_state_size());
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(android::app::PROCESS_STATE_FOREGROUND_SERVICE, data.slice_by_state(0).value());
+//    EXPECT_EQ(2, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(2, data.bucket_info(1).count());
+//}
+//
+//TEST(CountMetricE2eTest, TestMultipleSlicedStates) {
+//    // Initialize config.
+//    StatsdConfig config;
+//    config.add_allowed_log_source("AID_ROOT");  // LogEvent defaults to UID of root.
+//
+//    auto appCrashMatcher =
+//            CreateSimpleAtomMatcher("APP_CRASH_OCCURRED", android::util::APP_CRASH_OCCURRED);
+//    *config.add_atom_matcher() = appCrashMatcher;
+//
+//    auto state1 = CreateScreenStateWithOnOffMap();
+//    *config.add_state() = state1;
+//    auto state2 = CreateUidProcessState();
+//    *config.add_state() = state2;
+//
+//    // Create count metric that slices by screen state with on/off map and
+//    // slices by uid process state.
+//    int64_t metricId = 123456;
+//    auto countMetric = config.add_count_metric();
+//    countMetric->set_id(metricId);
+//    countMetric->set_what(appCrashMatcher.id());
+//    countMetric->set_bucket(TimeUnit::FIVE_MINUTES);
+//    countMetric->add_slice_by_state(state1.id());
+//    countMetric->add_slice_by_state(state2.id());
+//    MetricStateLink* stateLink = countMetric->add_state_link();
+//    stateLink->set_state_atom_id(UID_PROCESS_STATE_ATOM_ID);
+//    auto fieldsInWhat = stateLink->mutable_fields_in_what();
+//    *fieldsInWhat = CreateDimensions(android::util::APP_CRASH_OCCURRED, {1 /* uid */});
+//    auto fieldsInState = stateLink->mutable_fields_in_state();
+//    *fieldsInState = CreateDimensions(UID_PROCESS_STATE_ATOM_ID, {1 /* uid */});
+//
+//    // Initialize StatsLogProcessor.
+//    const uint64_t bucketStartTimeNs = 10000000000;  // 0:10
+//    const uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
+//    int uid = 12345;
+//    int64_t cfgId = 98765;
+//    ConfigKey cfgKey(uid, cfgId);
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//
+//    // Check that StateTrackers were properly initialized.
+//    EXPECT_EQ(2, StateManager::getInstance().getStateTrackersCount());
+//    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(SCREEN_STATE_ATOM_ID));
+//    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(UID_PROCESS_STATE_ATOM_ID));
+//
+//    // Check that CountMetricProducer was initialized correctly.
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    EXPECT_EQ(metricProducer->mSlicedStateAtoms.size(), 2);
+//    EXPECT_EQ(metricProducer->mSlicedStateAtoms.at(0), SCREEN_STATE_ATOM_ID);
+//    EXPECT_EQ(metricProducer->mSlicedStateAtoms.at(1), UID_PROCESS_STATE_ATOM_ID);
+//    EXPECT_EQ(metricProducer->mStateGroupMap.size(), 1);
+//    EXPECT_EQ(metricProducer->mMetric2StateLinks.size(), 1);
+//
+//    StateMap map = state1.map();
+//    for (auto group : map.group()) {
+//        for (auto value : group.value()) {
+//            EXPECT_EQ(metricProducer->mStateGroupMap[SCREEN_STATE_ATOM_ID][value],
+//                      group.group_id());
+//        }
+//    }
+//
+//    /*
+//               bucket #1                      bucket #2
+//    |     1     2     3     4     5     6     7     8     9     10 (minutes)
+//    |-----------------------------|-----------------------------|--
+//      1   1     1       1    1   2      1         1           2     (AppCrashEvents)
+//     -----------------------------------------------------------SCREEN_OFF events
+//       |                                                            (ScreenStateUnknownEvent = 0)
+//             |                                  |                   (ScreenStateOffEvent = 1)
+//                          |                                         (ScreenStateDozeEvent = 3)
+//     -----------------------------------------------------------SCREEN_ON events
+//                    |                                    |          (ScreenStateOnEvent = 2)
+//                                            |                       (ScreenStateOnSuspendEvent = 6)
+//     -----------------------------------------------------------PROCESS STATE events
+//             1                  2                                   (ProcessStateTopEvent = 1002)
+//                                          1                         (ProcessStateForegroundServiceEvent = 1003)
+//                                               2                    (ProcessStateImportantBackgroundEvent = 1006)
+//     1             1                                       1        (ProcessStateImportantForegroundEvent = 1005)
+//
+//     Based on the diagram above, Screen State / Process State pairs for each
+//     AppCrashEvent are:
+//     - StateTracker::kStateUnknown / important foreground
+//     - off / important foreground
+//     - off / Top
+//     - on / important foreground
+//     - off / important foreground
+//     - off / top
+//
+//     - off / important foreground
+//     - off / foreground service
+//     - on / important background
+//
+//    */
+//    // Initialize log events - first bucket.
+//    std::vector<std::unique_ptr<LogEvent>> events;
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
+//            bucketStartTimeNs + 5 * NS_PER_SEC));  // 0:15
+//    events.push_back(
+//            CreateAppCrashOccurredEvent(1 /* uid */, bucketStartTimeNs + 20 * NS_PER_SEC));  // 0:30
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_UNKNOWN,
+//                                          bucketStartTimeNs + 30 * NS_PER_SEC));  // 0:40
+//    events.push_back(
+//            CreateAppCrashOccurredEvent(1 /* uid */, bucketStartTimeNs + 60 * NS_PER_SEC));  // 1:10
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_TOP,
+//            bucketStartTimeNs + 90 * NS_PER_SEC));  // 1:40
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//                                          bucketStartTimeNs + 90 * NS_PER_SEC));  // 1:40
+//    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
+//                                                 bucketStartTimeNs + 120 * NS_PER_SEC));  // 2:10
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
+//            bucketStartTimeNs + 150 * NS_PER_SEC));  // 2:40
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + 160 * NS_PER_SEC));  // 2:50
+//    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
+//                                                 bucketStartTimeNs + 200 * NS_PER_SEC));  // 3:30
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_DOZE,
+//                                          bucketStartTimeNs + 210 * NS_PER_SEC));  // 3:40
+//    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
+//                                                 bucketStartTimeNs + 250 * NS_PER_SEC));  // 4:20
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            2 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_TOP,
+//            bucketStartTimeNs + 280 * NS_PER_SEC));  // 4:50
+//    events.push_back(CreateAppCrashOccurredEvent(2 /* uid */,
+//                                                 bucketStartTimeNs + 285 * NS_PER_SEC));  // 4:55
+//
+//    // Initialize log events - second bucket.
+//    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
+//                                                 bucketStartTimeNs + 360 * NS_PER_SEC));  // 6:10
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_FOREGROUND_SERVICE,
+//            bucketStartTimeNs + 380 * NS_PER_SEC));  // 6:30
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON_SUSPEND,
+//                                          bucketStartTimeNs + 390 * NS_PER_SEC));  // 6:40
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            2 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
+//            bucketStartTimeNs + 420 * NS_PER_SEC));  // 7:10
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//                                          bucketStartTimeNs + 440 * NS_PER_SEC));  // 7:30
+//    events.push_back(CreateAppCrashOccurredEvent(1 /* uid */,
+//                                                 bucketStartTimeNs + 450 * NS_PER_SEC));  // 7:40
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + 520 * NS_PER_SEC));  // 8:50
+//    events.push_back(CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
+//            bucketStartTimeNs + 540 * NS_PER_SEC));  // 9:10
+//    events.push_back(CreateAppCrashOccurredEvent(2 /* uid */,
+//                                                 bucketStartTimeNs + 570 * NS_PER_SEC));  // 9:40
+//
+//    // Send log events to StatsLogProcessor.
+//    for (auto& event : events) {
+//        processor->OnLogEvent(event.get());
+//    }
+//
+//    // Check dump report.
+//    vector<uint8_t> buffer;
+//    ConfigMetricsReportList reports;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs * 2 + 1, false, true, ADB_DUMP,
+//                            FAST, &buffer);
+//    EXPECT_GT(buffer.size(), 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
+//    EXPECT_EQ(6, reports.reports(0).metrics(0).count_metrics().data_size());
+//
+//    // For each CountMetricData, check StateValue info is correct and buckets
+//    // have correct counts.
+//    auto data = reports.reports(0).metrics(0).count_metrics().data(0);
+//    EXPECT_EQ(2, data.slice_by_state_size());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
+//    EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id());
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(1).has_value());
+//    EXPECT_EQ(android::app::PROCESS_STATE_FOREGROUND_SERVICE, data.slice_by_state(1).value());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(1);
+//    EXPECT_EQ(2, data.slice_by_state_size());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(-1, data.slice_by_state(0).value());
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(1).has_value());
+//    EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(2);
+//    EXPECT_EQ(2, data.slice_by_state_size());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
+//    EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id());
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(1).has_value());
+//    EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
+//    EXPECT_EQ(2, data.bucket_info_size());
+//    EXPECT_EQ(2, data.bucket_info(0).count());
+//    EXPECT_EQ(1, data.bucket_info(1).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(3);
+//    EXPECT_EQ(2, data.slice_by_state_size());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
+//    EXPECT_EQ(StringToId("SCREEN_ON"), data.slice_by_state(0).group_id());
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(1).has_value());
+//    EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(4);
+//    EXPECT_EQ(2, data.slice_by_state_size());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
+//    EXPECT_EQ(StringToId("SCREEN_ON"), data.slice_by_state(0).group_id());
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(1).has_value());
+//    EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, data.slice_by_state(1).value());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//
+//    data = reports.reports(0).metrics(0).count_metrics().data(5);
+//    EXPECT_EQ(2, data.slice_by_state_size());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
+//    EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id());
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(1).has_value());
+//    EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(1).value());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(2, data.bucket_info(0).count());
+//}
 
 }  // namespace statsd
 }  // namespace os
diff --git a/cmds/statsd/tests/e2e/DurationMetric_e2e_test.cpp b/cmds/statsd/tests/e2e/DurationMetric_e2e_test.cpp
index 9093155..8eb5f69 100644
--- a/cmds/statsd/tests/e2e/DurationMetric_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/DurationMetric_e2e_test.cpp
@@ -26,687 +26,688 @@
 
 #ifdef __ANDROID__
 
-TEST(DurationMetricE2eTest, TestOneBucket) {
-    StatsdConfig config;
-    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
-
-    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
-    auto screenOffMatcher = CreateScreenTurnedOffAtomMatcher();
-    *config.add_atom_matcher() = screenOnMatcher;
-    *config.add_atom_matcher() = screenOffMatcher;
-
-    auto durationPredicate = CreateScreenIsOnPredicate();
-    *config.add_predicate() = durationPredicate;
-
-    int64_t metricId = 123456;
-    auto durationMetric = config.add_duration_metric();
-    durationMetric->set_id(metricId);
-    durationMetric->set_what(durationPredicate.id());
-    durationMetric->set_bucket(FIVE_MINUTES);
-    durationMetric->set_aggregation_type(DurationMetric_AggregationType_SUM);
-
-
-    const int64_t baseTimeNs = 0; // 0:00
-    const int64_t configAddedTimeNs = baseTimeNs + 1 * NS_PER_SEC; // 0:01
-    const int64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000LL * 1000LL;
-
-    int uid = 12345;
-    int64_t cfgId = 98765;
-    ConfigKey cfgKey(uid, cfgId);
-
-    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey);
-
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-
-    std::unique_ptr<LogEvent> event;
-
-    // Screen is off at start of bucket.
-    event = CreateScreenStateChangedEvent(
-            android::view::DISPLAY_STATE_OFF, configAddedTimeNs); // 0:01
-    processor->OnLogEvent(event.get());
-
-    // Turn screen on.
-    const int64_t durationStartNs = configAddedTimeNs + 10 * NS_PER_SEC; // 0:11
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, durationStartNs);
-    processor->OnLogEvent(event.get());
-
-    // Turn off screen 30 seconds after turning on.
-    const int64_t durationEndNs = durationStartNs + 30 * NS_PER_SEC; // 0:41
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, durationEndNs);
-    processor->OnLogEvent(event.get());
-
-    event = CreateScreenBrightnessChangedEvent(64, durationEndNs + 1 * NS_PER_SEC); // 0:42
-    processor->OnLogEvent(event.get());
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, configAddedTimeNs + bucketSizeNs + 1 * NS_PER_SEC, false, true,
-                            ADB_DUMP, FAST, &buffer); // 5:01
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_EQ(metricId, reports.reports(0).metrics(0).metric_id());
-    EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
-
-    const StatsLogReport::DurationMetricDataWrapper& durationMetrics =
-            reports.reports(0).metrics(0).duration_metrics();
-    EXPECT_EQ(1, durationMetrics.data_size());
-
-    auto data = durationMetrics.data(0);
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(durationEndNs - durationStartNs, data.bucket_info(0).duration_nanos());
-    EXPECT_EQ(configAddedTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-}
-
-TEST(DurationMetricE2eTest, TestTwoBuckets) {
-    StatsdConfig config;
-    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
-
-    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
-    auto screenOffMatcher = CreateScreenTurnedOffAtomMatcher();
-    *config.add_atom_matcher() = screenOnMatcher;
-    *config.add_atom_matcher() = screenOffMatcher;
-
-    auto durationPredicate = CreateScreenIsOnPredicate();
-    *config.add_predicate() = durationPredicate;
-
-    int64_t metricId = 123456;
-    auto durationMetric = config.add_duration_metric();
-    durationMetric->set_id(metricId);
-    durationMetric->set_what(durationPredicate.id());
-    durationMetric->set_bucket(FIVE_MINUTES);
-    durationMetric->set_aggregation_type(DurationMetric_AggregationType_SUM);
-
-
-    const int64_t baseTimeNs = 0; // 0:00
-    const int64_t configAddedTimeNs = baseTimeNs + 1 * NS_PER_SEC; // 0:01
-    const int64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000LL * 1000LL;
-
-    int uid = 12345;
-    int64_t cfgId = 98765;
-    ConfigKey cfgKey(uid, cfgId);
-
-    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey);
-
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-
-    std::unique_ptr<LogEvent> event;
-
-    // Screen is off at start of bucket.
-    event = CreateScreenStateChangedEvent(
-            android::view::DISPLAY_STATE_OFF, configAddedTimeNs); // 0:01
-    processor->OnLogEvent(event.get());
-
-    // Turn screen on.
-    const int64_t durationStartNs = configAddedTimeNs + 10 * NS_PER_SEC; // 0:11
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, durationStartNs);
-    processor->OnLogEvent(event.get());
-
-    // Turn off screen 30 seconds after turning on.
-    const int64_t durationEndNs = durationStartNs + 30 * NS_PER_SEC; // 0:41
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, durationEndNs);
-    processor->OnLogEvent(event.get());
-
-    event = CreateScreenBrightnessChangedEvent(64, durationEndNs + 1 * NS_PER_SEC); // 0:42
-    processor->OnLogEvent(event.get());
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, configAddedTimeNs + 2 * bucketSizeNs + 1 * NS_PER_SEC, false, true,
-                            ADB_DUMP, FAST, &buffer); // 10:01
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_EQ(metricId, reports.reports(0).metrics(0).metric_id());
-    EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
-
-    const StatsLogReport::DurationMetricDataWrapper& durationMetrics =
-            reports.reports(0).metrics(0).duration_metrics();
-    EXPECT_EQ(1, durationMetrics.data_size());
-
-    auto data = durationMetrics.data(0);
-    EXPECT_EQ(1, data.bucket_info_size());
-
-    auto bucketInfo = data.bucket_info(0);
-    EXPECT_EQ(0, bucketInfo.bucket_num());
-    EXPECT_EQ(durationEndNs - durationStartNs, bucketInfo.duration_nanos());
-    EXPECT_EQ(configAddedTimeNs, bucketInfo.start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
-}
-
-TEST(DurationMetricE2eTest, TestWithActivation) {
-    StatsdConfig config;
-    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
-
-    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
-    auto screenOffMatcher = CreateScreenTurnedOffAtomMatcher();
-    auto crashMatcher = CreateProcessCrashAtomMatcher();
-    *config.add_atom_matcher() = screenOnMatcher;
-    *config.add_atom_matcher() = screenOffMatcher;
-    *config.add_atom_matcher() = crashMatcher;
-
-    auto durationPredicate = CreateScreenIsOnPredicate();
-    *config.add_predicate() = durationPredicate;
-
-    int64_t metricId = 123456;
-    auto durationMetric = config.add_duration_metric();
-    durationMetric->set_id(metricId);
-    durationMetric->set_what(durationPredicate.id());
-    durationMetric->set_bucket(FIVE_MINUTES);
-    durationMetric->set_aggregation_type(DurationMetric_AggregationType_SUM);
-
-    auto metric_activation1 = config.add_metric_activation();
-    metric_activation1->set_metric_id(metricId);
-    auto event_activation1 = metric_activation1->add_event_activation();
-    event_activation1->set_atom_matcher_id(crashMatcher.id());
-    event_activation1->set_ttl_seconds(30); // 30 secs.
-
-    const int64_t bucketStartTimeNs = 10000000000;
-    const int64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000LL * 1000LL;
-
-    int uid = 12345;
-    int64_t cfgId = 98765;
-    ConfigKey cfgKey(uid, cfgId);
-
-    sp<UidMap> m = new UidMap();
-    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
-    sp<AlarmMonitor> anomalyAlarmMonitor;
-    sp<AlarmMonitor> subscriberAlarmMonitor;
-    vector<int64_t> activeConfigsBroadcast;
-
-    int broadcastCount = 0;
-    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
-            bucketStartTimeNs, [](const ConfigKey& key) { return true; },
-            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
-                    const vector<int64_t>& activeConfigs) {
-                broadcastCount++;
-                EXPECT_EQ(broadcastUid, uid);
-                activeConfigsBroadcast.clear();
-                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
-                        activeConfigs.begin(), activeConfigs.end());
-                return true;
-            });
-
-    processor.OnConfigUpdated(bucketStartTimeNs, cfgKey, config); // 0:00
-
-    EXPECT_EQ(processor.mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor.mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    auto& eventActivationMap = metricProducer->mEventActivationMap;
-
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap.size(), 1u);
-    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
-
-    std::unique_ptr<LogEvent> event;
-
-    // Turn screen off.
-    event = CreateScreenStateChangedEvent(
-            android::view::DISPLAY_STATE_OFF, bucketStartTimeNs + 2 * NS_PER_SEC); // 0:02
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 2 * NS_PER_SEC);
-
-    // Turn screen on.
-    const int64_t durationStartNs = bucketStartTimeNs + 5 * NS_PER_SEC; // 0:05
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, durationStartNs);
-    processor.OnLogEvent(event.get(), durationStartNs);
-
-    // Activate metric.
-    const int64_t activationStartNs = bucketStartTimeNs + 5 * NS_PER_SEC; // 0:10
-    const int64_t activationEndNs =
-            activationStartNs + event_activation1->ttl_seconds() * NS_PER_SEC; // 0:40
-    event = CreateAppCrashEvent(111, activationStartNs);
-    processor.OnLogEvent(event.get(), activationStartNs);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 1);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, activationStartNs);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
-
-    // Expire activation.
-    const int64_t expirationNs = activationEndNs + 7 * NS_PER_SEC;
-    event = CreateScreenBrightnessChangedEvent(64, expirationNs); // 0:47
-    processor.OnLogEvent(event.get(), expirationNs);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 2);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_EQ(eventActivationMap.size(), 1u);
-    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, activationStartNs);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
-
-    // Turn off screen 10 seconds after activation expiration.
-    const int64_t durationEndNs = activationEndNs + 10 * NS_PER_SEC; // 0:50
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, durationEndNs);
-    processor.OnLogEvent(event.get(),durationEndNs);
-
-    // Turn screen on.
-    const int64_t duration2StartNs = durationEndNs + 5 * NS_PER_SEC; // 0:55
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, duration2StartNs);
-    processor.OnLogEvent(event.get(), duration2StartNs);
-
-    // Turn off screen.
-    const int64_t duration2EndNs = duration2StartNs + 10 * NS_PER_SEC; // 1:05
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, duration2EndNs);
-    processor.OnLogEvent(event.get(), duration2EndNs);
-
-    // Activate metric.
-    const int64_t activation2StartNs = duration2EndNs + 5 * NS_PER_SEC; // 1:10
-    const int64_t activation2EndNs =
-            activation2StartNs + event_activation1->ttl_seconds() * NS_PER_SEC; // 1:40
-    event = CreateAppCrashEvent(211, activation2StartNs);
-    processor.OnLogEvent(event.get(), activation2StartNs);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 3);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, activation2StartNs);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor.onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs + 1 * NS_PER_SEC, false, true,
-                            ADB_DUMP, FAST, &buffer); // 5:01
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_EQ(metricId, reports.reports(0).metrics(0).metric_id());
-    EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
-
-    const StatsLogReport::DurationMetricDataWrapper& durationMetrics =
-            reports.reports(0).metrics(0).duration_metrics();
-    EXPECT_EQ(1, durationMetrics.data_size());
-
-    auto data = durationMetrics.data(0);
-    EXPECT_EQ(1, data.bucket_info_size());
-
-    auto bucketInfo = data.bucket_info(0);
-    EXPECT_EQ(0, bucketInfo.bucket_num());
-    EXPECT_EQ(bucketStartTimeNs, bucketInfo.start_bucket_elapsed_nanos());
-    EXPECT_EQ(expirationNs, bucketInfo.end_bucket_elapsed_nanos());
-    EXPECT_EQ(expirationNs - durationStartNs, bucketInfo.duration_nanos());
-}
-
-TEST(DurationMetricE2eTest, TestWithCondition) {
-    StatsdConfig config;
-    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
-    *config.add_atom_matcher() = CreateAcquireWakelockAtomMatcher();
-    *config.add_atom_matcher() = CreateReleaseWakelockAtomMatcher();
-    *config.add_atom_matcher() = CreateMoveToBackgroundAtomMatcher();
-    *config.add_atom_matcher() = CreateMoveToForegroundAtomMatcher();
-
-    auto holdingWakelockPredicate = CreateHoldingWakelockPredicate();
-    *config.add_predicate() = holdingWakelockPredicate;
-
-    auto isInBackgroundPredicate = CreateIsInBackgroundPredicate();
-    *config.add_predicate() = isInBackgroundPredicate;
-
-    auto durationMetric = config.add_duration_metric();
-    durationMetric->set_id(StringToId("WakelockDuration"));
-    durationMetric->set_what(holdingWakelockPredicate.id());
-    durationMetric->set_condition(isInBackgroundPredicate.id());
-    durationMetric->set_aggregation_type(DurationMetric::SUM);
-    durationMetric->set_bucket(FIVE_MINUTES);
-
-    ConfigKey cfgKey;
-    uint64_t bucketStartTimeNs = 10000000000;
-    uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    auto& eventActivationMap = metricProducer->mEventActivationMap;
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_TRUE(eventActivationMap.empty());
-
-    int appUid = 123;
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(appUid, "App1")};
-
-    auto event = CreateAcquireWakelockEvent(
-            attributions1, "wl1", bucketStartTimeNs + 10 * NS_PER_SEC); // 0:10
-    processor->OnLogEvent(event.get());
-
-    event = CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + 22 * NS_PER_SEC); // 0:22
-    processor->OnLogEvent(event.get());
-
-    event = CreateMoveToForegroundEvent(
-            appUid, bucketStartTimeNs + (3 * 60 + 15) * NS_PER_SEC); // 3:15
-    processor->OnLogEvent(event.get());
-
-    event = CreateReleaseWakelockEvent(
-            attributions1, "wl1", bucketStartTimeNs + 4 * 60 * NS_PER_SEC); // 4:00
-    processor->OnLogEvent(event.get());
-
-    vector<uint8_t> buffer;
-    ConfigMetricsReportList reports;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_GT(buffer.size(), 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_EQ(1, reports.reports(0).metrics(0).duration_metrics().data_size());
-
-    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
-
-    // Validate bucket info.
-    EXPECT_EQ(1, data.bucket_info_size());
-
-    auto bucketInfo = data.bucket_info(0);
-    EXPECT_EQ(bucketStartTimeNs, bucketInfo.start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
-    EXPECT_EQ((2 * 60 + 53) * NS_PER_SEC, bucketInfo.duration_nanos());
-}
-
-TEST(DurationMetricE2eTest, TestWithSlicedCondition) {
-    StatsdConfig config;
-    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
-    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
-    *config.add_atom_matcher() = CreateAcquireWakelockAtomMatcher();
-    *config.add_atom_matcher() = CreateReleaseWakelockAtomMatcher();
-    *config.add_atom_matcher() = CreateMoveToBackgroundAtomMatcher();
-    *config.add_atom_matcher() = CreateMoveToForegroundAtomMatcher();
-
-    auto holdingWakelockPredicate = CreateHoldingWakelockPredicate();
-    // The predicate is dimensioning by first attribution node by uid.
-    FieldMatcher dimensions = CreateAttributionUidDimensions(
-            android::util::WAKELOCK_STATE_CHANGED, {Position::FIRST});
-    *holdingWakelockPredicate.mutable_simple_predicate()->mutable_dimensions() = dimensions;
-    *config.add_predicate() = holdingWakelockPredicate;
-
-    auto isInBackgroundPredicate = CreateIsInBackgroundPredicate();
-    *isInBackgroundPredicate.mutable_simple_predicate()->mutable_dimensions() =
-        CreateDimensions(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, {Position::FIRST});
-    *config.add_predicate() = isInBackgroundPredicate;
-
-    auto durationMetric = config.add_duration_metric();
-    durationMetric->set_id(StringToId("WakelockDuration"));
-    durationMetric->set_what(holdingWakelockPredicate.id());
-    durationMetric->set_condition(isInBackgroundPredicate.id());
-    durationMetric->set_aggregation_type(DurationMetric::SUM);
-    // The metric is dimensioning by first attribution node and only by uid.
-    *durationMetric->mutable_dimensions_in_what() =
-        CreateAttributionUidDimensions(
-            android::util::WAKELOCK_STATE_CHANGED, {Position::FIRST});
-    durationMetric->set_bucket(FIVE_MINUTES);
-
-    // Links between wakelock state atom and condition of app is in background.
-    auto links = durationMetric->add_links();
-    links->set_condition(isInBackgroundPredicate.id());
-    auto dimensionWhat = links->mutable_fields_in_what();
-    dimensionWhat->set_field(android::util::WAKELOCK_STATE_CHANGED);
-    dimensionWhat->add_child()->set_field(1);  // uid field.
-    *links->mutable_fields_in_condition() = CreateAttributionUidDimensions(
-            android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, { Position::FIRST });
-
-    ConfigKey cfgKey;
-    uint64_t bucketStartTimeNs = 10000000000;
-    uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    auto& eventActivationMap = metricProducer->mEventActivationMap;
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_TRUE(eventActivationMap.empty());
-
-    int appUid = 123;
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(appUid, "App1")};
-
-    auto event = CreateAcquireWakelockEvent(
-            attributions1, "wl1", bucketStartTimeNs + 10 * NS_PER_SEC); // 0:10
-    processor->OnLogEvent(event.get());
-
-    event = CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + 22 * NS_PER_SEC); // 0:22
-    processor->OnLogEvent(event.get());
-
-    event = CreateReleaseWakelockEvent(
-            attributions1, "wl1", bucketStartTimeNs + 60 * NS_PER_SEC); // 1:00
-    processor->OnLogEvent(event.get());
-
-
-    event = CreateMoveToForegroundEvent(
-            appUid, bucketStartTimeNs + (3 * 60 + 15) * NS_PER_SEC); // 3:15
-    processor->OnLogEvent(event.get());
-
-    vector<uint8_t> buffer;
-    ConfigMetricsReportList reports;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_GT(buffer.size(), 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_EQ(1, reports.reports(0).metrics(0).duration_metrics().data_size());
-
-    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
-    // Validate dimension value.
-    ValidateAttributionUidDimension(data.dimensions_in_what(),
-                                    android::util::WAKELOCK_STATE_CHANGED, appUid);
-    // Validate bucket info.
-    EXPECT_EQ(1, data.bucket_info_size());
-
-    auto bucketInfo = data.bucket_info(0);
-    EXPECT_EQ(bucketStartTimeNs, bucketInfo.start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
-    EXPECT_EQ(38 * NS_PER_SEC, bucketInfo.duration_nanos());
-}
-
-TEST(DurationMetricE2eTest, TestWithActivationAndSlicedCondition) {
-    StatsdConfig config;
-    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
-    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
-    *config.add_atom_matcher() = CreateAcquireWakelockAtomMatcher();
-    *config.add_atom_matcher() = CreateReleaseWakelockAtomMatcher();
-    *config.add_atom_matcher() = CreateMoveToBackgroundAtomMatcher();
-    *config.add_atom_matcher() = CreateMoveToForegroundAtomMatcher();
-    *config.add_atom_matcher() = screenOnMatcher;
-
-    auto holdingWakelockPredicate = CreateHoldingWakelockPredicate();
-    // The predicate is dimensioning by first attribution node by uid.
-    FieldMatcher dimensions = CreateAttributionUidDimensions(
-            android::util::WAKELOCK_STATE_CHANGED, {Position::FIRST});
-    *holdingWakelockPredicate.mutable_simple_predicate()->mutable_dimensions() = dimensions;
-    *config.add_predicate() = holdingWakelockPredicate;
-
-    auto isInBackgroundPredicate = CreateIsInBackgroundPredicate();
-    *isInBackgroundPredicate.mutable_simple_predicate()->mutable_dimensions() =
-        CreateDimensions(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, {Position::FIRST});
-    *config.add_predicate() = isInBackgroundPredicate;
-
-    auto durationMetric = config.add_duration_metric();
-    durationMetric->set_id(StringToId("WakelockDuration"));
-    durationMetric->set_what(holdingWakelockPredicate.id());
-    durationMetric->set_condition(isInBackgroundPredicate.id());
-    durationMetric->set_aggregation_type(DurationMetric::SUM);
-    // The metric is dimensioning by first attribution node and only by uid.
-    *durationMetric->mutable_dimensions_in_what() =
-        CreateAttributionUidDimensions(
-            android::util::WAKELOCK_STATE_CHANGED, {Position::FIRST});
-    durationMetric->set_bucket(FIVE_MINUTES);
-
-    // Links between wakelock state atom and condition of app is in background.
-    auto links = durationMetric->add_links();
-    links->set_condition(isInBackgroundPredicate.id());
-    auto dimensionWhat = links->mutable_fields_in_what();
-    dimensionWhat->set_field(android::util::WAKELOCK_STATE_CHANGED);
-    dimensionWhat->add_child()->set_field(1);  // uid field.
-    *links->mutable_fields_in_condition() = CreateAttributionUidDimensions(
-            android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, { Position::FIRST });
-
-    auto metric_activation1 = config.add_metric_activation();
-    metric_activation1->set_metric_id(durationMetric->id());
-    auto event_activation1 = metric_activation1->add_event_activation();
-    event_activation1->set_atom_matcher_id(screenOnMatcher.id());
-    event_activation1->set_ttl_seconds(60 * 2);  // 2 minutes.
-
-    ConfigKey cfgKey;
-    uint64_t bucketStartTimeNs = 10000000000;
-    uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    auto& eventActivationMap = metricProducer->mEventActivationMap;
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap.size(), 1u);
-    EXPECT_TRUE(eventActivationMap.find(4) != eventActivationMap.end());
-    EXPECT_EQ(eventActivationMap[4]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[4]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[4]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
-
-    int appUid = 123;
-    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(appUid, "App1")};
-
-    auto event = CreateAcquireWakelockEvent(
-            attributions1, "wl1", bucketStartTimeNs + 10 * NS_PER_SEC); // 0:10
-    processor->OnLogEvent(event.get());
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[4]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[4]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[4]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
-
-    event = CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + 22 * NS_PER_SEC); // 0:22
-    processor->OnLogEvent(event.get());
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[4]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[4]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[4]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
-
-    const int64_t durationStartNs = bucketStartTimeNs + 30 * NS_PER_SEC; // 0:30
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, durationStartNs);
-    processor->OnLogEvent(event.get());
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[4]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[4]->start_ns, durationStartNs);
-    EXPECT_EQ(eventActivationMap[4]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
-
-    const int64_t durationEndNs =
-            durationStartNs + (event_activation1->ttl_seconds() + 30) * NS_PER_SEC; // 3:00
-    event = CreateAppCrashEvent(333, durationEndNs);
-    processor->OnLogEvent(event.get());
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[4]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[4]->start_ns, durationStartNs);
-    EXPECT_EQ(eventActivationMap[4]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
-
-    event = CreateMoveToForegroundEvent(
-            appUid, bucketStartTimeNs + (3 * 60 + 15) * NS_PER_SEC); // 3:15
-    processor->OnLogEvent(event.get());
-
-    event = CreateReleaseWakelockEvent(
-            attributions1, "wl1", bucketStartTimeNs + (4 * 60 + 17) * NS_PER_SEC); // 4:17
-    processor->OnLogEvent(event.get());
-
-    event = CreateMoveToBackgroundEvent(
-            appUid, bucketStartTimeNs + (4 * 60 + 20) * NS_PER_SEC); // 4:20
-    processor->OnLogEvent(event.get());
-
-    event = CreateAcquireWakelockEvent(
-            attributions1, "wl1", bucketStartTimeNs + (4 * 60 + 25) * NS_PER_SEC); // 4:25
-    processor->OnLogEvent(event.get());
-
-    const int64_t duration2StartNs = bucketStartTimeNs + (4 * 60 + 30) * NS_PER_SEC; // 4:30
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, duration2StartNs);
-    processor->OnLogEvent(event.get());
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[4]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[4]->start_ns, duration2StartNs);
-    EXPECT_EQ(eventActivationMap[4]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
-
-    vector<uint8_t> buffer;
-    ConfigMetricsReportList reports;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_GT(buffer.size(), 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_EQ(1, reports.reports(0).metrics(0).duration_metrics().data_size());
-
-    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
-    // Validate dimension value.
-    ValidateAttributionUidDimension(data.dimensions_in_what(),
-                                    android::util::WAKELOCK_STATE_CHANGED, appUid);
-    // Validate bucket info.
-    EXPECT_EQ(2, data.bucket_info_size());
-
-    auto bucketInfo = data.bucket_info(0);
-    EXPECT_EQ(bucketStartTimeNs, bucketInfo.start_bucket_elapsed_nanos());
-    EXPECT_EQ(durationEndNs, bucketInfo.end_bucket_elapsed_nanos());
-    EXPECT_EQ(durationEndNs - durationStartNs, bucketInfo.duration_nanos());
-
-    bucketInfo = data.bucket_info(1);
-    EXPECT_EQ(durationEndNs, bucketInfo.start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs - duration2StartNs, bucketInfo.duration_nanos());
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//TEST(DurationMetricE2eTest, TestOneBucket) {
+//    StatsdConfig config;
+//    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
+//
+//    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
+//    auto screenOffMatcher = CreateScreenTurnedOffAtomMatcher();
+//    *config.add_atom_matcher() = screenOnMatcher;
+//    *config.add_atom_matcher() = screenOffMatcher;
+//
+//    auto durationPredicate = CreateScreenIsOnPredicate();
+//    *config.add_predicate() = durationPredicate;
+//
+//    int64_t metricId = 123456;
+//    auto durationMetric = config.add_duration_metric();
+//    durationMetric->set_id(metricId);
+//    durationMetric->set_what(durationPredicate.id());
+//    durationMetric->set_bucket(FIVE_MINUTES);
+//    durationMetric->set_aggregation_type(DurationMetric_AggregationType_SUM);
+//
+//
+//    const int64_t baseTimeNs = 0; // 0:00
+//    const int64_t configAddedTimeNs = baseTimeNs + 1 * NS_PER_SEC; // 0:01
+//    const int64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000LL * 1000LL;
+//
+//    int uid = 12345;
+//    int64_t cfgId = 98765;
+//    ConfigKey cfgKey(uid, cfgId);
+//
+//    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey);
+//
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//
+//    std::unique_ptr<LogEvent> event;
+//
+//    // Screen is off at start of bucket.
+//    event = CreateScreenStateChangedEvent(
+//            android::view::DISPLAY_STATE_OFF, configAddedTimeNs); // 0:01
+//    processor->OnLogEvent(event.get());
+//
+//    // Turn screen on.
+//    const int64_t durationStartNs = configAddedTimeNs + 10 * NS_PER_SEC; // 0:11
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, durationStartNs);
+//    processor->OnLogEvent(event.get());
+//
+//    // Turn off screen 30 seconds after turning on.
+//    const int64_t durationEndNs = durationStartNs + 30 * NS_PER_SEC; // 0:41
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, durationEndNs);
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateScreenBrightnessChangedEvent(64, durationEndNs + 1 * NS_PER_SEC); // 0:42
+//    processor->OnLogEvent(event.get());
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, configAddedTimeNs + bucketSizeNs + 1 * NS_PER_SEC, false, true,
+//                            ADB_DUMP, FAST, &buffer); // 5:01
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_EQ(metricId, reports.reports(0).metrics(0).metric_id());
+//    EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
+//
+//    const StatsLogReport::DurationMetricDataWrapper& durationMetrics =
+//            reports.reports(0).metrics(0).duration_metrics();
+//    EXPECT_EQ(1, durationMetrics.data_size());
+//
+//    auto data = durationMetrics.data(0);
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(durationEndNs - durationStartNs, data.bucket_info(0).duration_nanos());
+//    EXPECT_EQ(configAddedTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//}
+//
+//TEST(DurationMetricE2eTest, TestTwoBuckets) {
+//    StatsdConfig config;
+//    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
+//
+//    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
+//    auto screenOffMatcher = CreateScreenTurnedOffAtomMatcher();
+//    *config.add_atom_matcher() = screenOnMatcher;
+//    *config.add_atom_matcher() = screenOffMatcher;
+//
+//    auto durationPredicate = CreateScreenIsOnPredicate();
+//    *config.add_predicate() = durationPredicate;
+//
+//    int64_t metricId = 123456;
+//    auto durationMetric = config.add_duration_metric();
+//    durationMetric->set_id(metricId);
+//    durationMetric->set_what(durationPredicate.id());
+//    durationMetric->set_bucket(FIVE_MINUTES);
+//    durationMetric->set_aggregation_type(DurationMetric_AggregationType_SUM);
+//
+//
+//    const int64_t baseTimeNs = 0; // 0:00
+//    const int64_t configAddedTimeNs = baseTimeNs + 1 * NS_PER_SEC; // 0:01
+//    const int64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000LL * 1000LL;
+//
+//    int uid = 12345;
+//    int64_t cfgId = 98765;
+//    ConfigKey cfgKey(uid, cfgId);
+//
+//    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey);
+//
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//
+//    std::unique_ptr<LogEvent> event;
+//
+//    // Screen is off at start of bucket.
+//    event = CreateScreenStateChangedEvent(
+//            android::view::DISPLAY_STATE_OFF, configAddedTimeNs); // 0:01
+//    processor->OnLogEvent(event.get());
+//
+//    // Turn screen on.
+//    const int64_t durationStartNs = configAddedTimeNs + 10 * NS_PER_SEC; // 0:11
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, durationStartNs);
+//    processor->OnLogEvent(event.get());
+//
+//    // Turn off screen 30 seconds after turning on.
+//    const int64_t durationEndNs = durationStartNs + 30 * NS_PER_SEC; // 0:41
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, durationEndNs);
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateScreenBrightnessChangedEvent(64, durationEndNs + 1 * NS_PER_SEC); // 0:42
+//    processor->OnLogEvent(event.get());
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, configAddedTimeNs + 2 * bucketSizeNs + 1 * NS_PER_SEC, false, true,
+//                            ADB_DUMP, FAST, &buffer); // 10:01
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_EQ(metricId, reports.reports(0).metrics(0).metric_id());
+//    EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
+//
+//    const StatsLogReport::DurationMetricDataWrapper& durationMetrics =
+//            reports.reports(0).metrics(0).duration_metrics();
+//    EXPECT_EQ(1, durationMetrics.data_size());
+//
+//    auto data = durationMetrics.data(0);
+//    EXPECT_EQ(1, data.bucket_info_size());
+//
+//    auto bucketInfo = data.bucket_info(0);
+//    EXPECT_EQ(0, bucketInfo.bucket_num());
+//    EXPECT_EQ(durationEndNs - durationStartNs, bucketInfo.duration_nanos());
+//    EXPECT_EQ(configAddedTimeNs, bucketInfo.start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
+//}
+//
+//TEST(DurationMetricE2eTest, TestWithActivation) {
+//    StatsdConfig config;
+//    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
+//
+//    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
+//    auto screenOffMatcher = CreateScreenTurnedOffAtomMatcher();
+//    auto crashMatcher = CreateProcessCrashAtomMatcher();
+//    *config.add_atom_matcher() = screenOnMatcher;
+//    *config.add_atom_matcher() = screenOffMatcher;
+//    *config.add_atom_matcher() = crashMatcher;
+//
+//    auto durationPredicate = CreateScreenIsOnPredicate();
+//    *config.add_predicate() = durationPredicate;
+//
+//    int64_t metricId = 123456;
+//    auto durationMetric = config.add_duration_metric();
+//    durationMetric->set_id(metricId);
+//    durationMetric->set_what(durationPredicate.id());
+//    durationMetric->set_bucket(FIVE_MINUTES);
+//    durationMetric->set_aggregation_type(DurationMetric_AggregationType_SUM);
+//
+//    auto metric_activation1 = config.add_metric_activation();
+//    metric_activation1->set_metric_id(metricId);
+//    auto event_activation1 = metric_activation1->add_event_activation();
+//    event_activation1->set_atom_matcher_id(crashMatcher.id());
+//    event_activation1->set_ttl_seconds(30); // 30 secs.
+//
+//    const int64_t bucketStartTimeNs = 10000000000;
+//    const int64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000LL * 1000LL;
+//
+//    int uid = 12345;
+//    int64_t cfgId = 98765;
+//    ConfigKey cfgKey(uid, cfgId);
+//
+//    sp<UidMap> m = new UidMap();
+//    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
+//    sp<AlarmMonitor> anomalyAlarmMonitor;
+//    sp<AlarmMonitor> subscriberAlarmMonitor;
+//    vector<int64_t> activeConfigsBroadcast;
+//
+//    int broadcastCount = 0;
+//    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
+//            bucketStartTimeNs, [](const ConfigKey& key) { return true; },
+//            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
+//                    const vector<int64_t>& activeConfigs) {
+//                broadcastCount++;
+//                EXPECT_EQ(broadcastUid, uid);
+//                activeConfigsBroadcast.clear();
+//                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
+//                        activeConfigs.begin(), activeConfigs.end());
+//                return true;
+//            });
+//
+//    processor.OnConfigUpdated(bucketStartTimeNs, cfgKey, config); // 0:00
+//
+//    EXPECT_EQ(processor.mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor.mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    auto& eventActivationMap = metricProducer->mEventActivationMap;
+//
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap.size(), 1u);
+//    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
+//
+//    std::unique_ptr<LogEvent> event;
+//
+//    // Turn screen off.
+//    event = CreateScreenStateChangedEvent(
+//            android::view::DISPLAY_STATE_OFF, bucketStartTimeNs + 2 * NS_PER_SEC); // 0:02
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 2 * NS_PER_SEC);
+//
+//    // Turn screen on.
+//    const int64_t durationStartNs = bucketStartTimeNs + 5 * NS_PER_SEC; // 0:05
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, durationStartNs);
+//    processor.OnLogEvent(event.get(), durationStartNs);
+//
+//    // Activate metric.
+//    const int64_t activationStartNs = bucketStartTimeNs + 5 * NS_PER_SEC; // 0:10
+//    const int64_t activationEndNs =
+//            activationStartNs + event_activation1->ttl_seconds() * NS_PER_SEC; // 0:40
+//    event = CreateAppCrashEvent(111, activationStartNs);
+//    processor.OnLogEvent(event.get(), activationStartNs);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 1);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, activationStartNs);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
+//
+//    // Expire activation.
+//    const int64_t expirationNs = activationEndNs + 7 * NS_PER_SEC;
+//    event = CreateScreenBrightnessChangedEvent(64, expirationNs); // 0:47
+//    processor.OnLogEvent(event.get(), expirationNs);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 2);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_EQ(eventActivationMap.size(), 1u);
+//    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, activationStartNs);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
+//
+//    // Turn off screen 10 seconds after activation expiration.
+//    const int64_t durationEndNs = activationEndNs + 10 * NS_PER_SEC; // 0:50
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, durationEndNs);
+//    processor.OnLogEvent(event.get(),durationEndNs);
+//
+//    // Turn screen on.
+//    const int64_t duration2StartNs = durationEndNs + 5 * NS_PER_SEC; // 0:55
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, duration2StartNs);
+//    processor.OnLogEvent(event.get(), duration2StartNs);
+//
+//    // Turn off screen.
+//    const int64_t duration2EndNs = duration2StartNs + 10 * NS_PER_SEC; // 1:05
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, duration2EndNs);
+//    processor.OnLogEvent(event.get(), duration2EndNs);
+//
+//    // Activate metric.
+//    const int64_t activation2StartNs = duration2EndNs + 5 * NS_PER_SEC; // 1:10
+//    const int64_t activation2EndNs =
+//            activation2StartNs + event_activation1->ttl_seconds() * NS_PER_SEC; // 1:40
+//    event = CreateAppCrashEvent(211, activation2StartNs);
+//    processor.OnLogEvent(event.get(), activation2StartNs);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 3);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, activation2StartNs);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor.onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs + 1 * NS_PER_SEC, false, true,
+//                            ADB_DUMP, FAST, &buffer); // 5:01
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_EQ(metricId, reports.reports(0).metrics(0).metric_id());
+//    EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
+//
+//    const StatsLogReport::DurationMetricDataWrapper& durationMetrics =
+//            reports.reports(0).metrics(0).duration_metrics();
+//    EXPECT_EQ(1, durationMetrics.data_size());
+//
+//    auto data = durationMetrics.data(0);
+//    EXPECT_EQ(1, data.bucket_info_size());
+//
+//    auto bucketInfo = data.bucket_info(0);
+//    EXPECT_EQ(0, bucketInfo.bucket_num());
+//    EXPECT_EQ(bucketStartTimeNs, bucketInfo.start_bucket_elapsed_nanos());
+//    EXPECT_EQ(expirationNs, bucketInfo.end_bucket_elapsed_nanos());
+//    EXPECT_EQ(expirationNs - durationStartNs, bucketInfo.duration_nanos());
+//}
+//
+//TEST(DurationMetricE2eTest, TestWithCondition) {
+//    StatsdConfig config;
+//    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
+//    *config.add_atom_matcher() = CreateAcquireWakelockAtomMatcher();
+//    *config.add_atom_matcher() = CreateReleaseWakelockAtomMatcher();
+//    *config.add_atom_matcher() = CreateMoveToBackgroundAtomMatcher();
+//    *config.add_atom_matcher() = CreateMoveToForegroundAtomMatcher();
+//
+//    auto holdingWakelockPredicate = CreateHoldingWakelockPredicate();
+//    *config.add_predicate() = holdingWakelockPredicate;
+//
+//    auto isInBackgroundPredicate = CreateIsInBackgroundPredicate();
+//    *config.add_predicate() = isInBackgroundPredicate;
+//
+//    auto durationMetric = config.add_duration_metric();
+//    durationMetric->set_id(StringToId("WakelockDuration"));
+//    durationMetric->set_what(holdingWakelockPredicate.id());
+//    durationMetric->set_condition(isInBackgroundPredicate.id());
+//    durationMetric->set_aggregation_type(DurationMetric::SUM);
+//    durationMetric->set_bucket(FIVE_MINUTES);
+//
+//    ConfigKey cfgKey;
+//    uint64_t bucketStartTimeNs = 10000000000;
+//    uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    auto& eventActivationMap = metricProducer->mEventActivationMap;
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_TRUE(eventActivationMap.empty());
+//
+//    int appUid = 123;
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(appUid, "App1")};
+//
+//    auto event = CreateAcquireWakelockEvent(
+//            attributions1, "wl1", bucketStartTimeNs + 10 * NS_PER_SEC); // 0:10
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + 22 * NS_PER_SEC); // 0:22
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateMoveToForegroundEvent(
+//            appUid, bucketStartTimeNs + (3 * 60 + 15) * NS_PER_SEC); // 3:15
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateReleaseWakelockEvent(
+//            attributions1, "wl1", bucketStartTimeNs + 4 * 60 * NS_PER_SEC); // 4:00
+//    processor->OnLogEvent(event.get());
+//
+//    vector<uint8_t> buffer;
+//    ConfigMetricsReportList reports;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_GT(buffer.size(), 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics(0).duration_metrics().data_size());
+//
+//    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
+//
+//    // Validate bucket info.
+//    EXPECT_EQ(1, data.bucket_info_size());
+//
+//    auto bucketInfo = data.bucket_info(0);
+//    EXPECT_EQ(bucketStartTimeNs, bucketInfo.start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
+//    EXPECT_EQ((2 * 60 + 53) * NS_PER_SEC, bucketInfo.duration_nanos());
+//}
+//
+//TEST(DurationMetricE2eTest, TestWithSlicedCondition) {
+//    StatsdConfig config;
+//    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
+//    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
+//    *config.add_atom_matcher() = CreateAcquireWakelockAtomMatcher();
+//    *config.add_atom_matcher() = CreateReleaseWakelockAtomMatcher();
+//    *config.add_atom_matcher() = CreateMoveToBackgroundAtomMatcher();
+//    *config.add_atom_matcher() = CreateMoveToForegroundAtomMatcher();
+//
+//    auto holdingWakelockPredicate = CreateHoldingWakelockPredicate();
+//    // The predicate is dimensioning by first attribution node by uid.
+//    FieldMatcher dimensions = CreateAttributionUidDimensions(
+//            android::util::WAKELOCK_STATE_CHANGED, {Position::FIRST});
+//    *holdingWakelockPredicate.mutable_simple_predicate()->mutable_dimensions() = dimensions;
+//    *config.add_predicate() = holdingWakelockPredicate;
+//
+//    auto isInBackgroundPredicate = CreateIsInBackgroundPredicate();
+//    *isInBackgroundPredicate.mutable_simple_predicate()->mutable_dimensions() =
+//        CreateDimensions(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, {Position::FIRST});
+//    *config.add_predicate() = isInBackgroundPredicate;
+//
+//    auto durationMetric = config.add_duration_metric();
+//    durationMetric->set_id(StringToId("WakelockDuration"));
+//    durationMetric->set_what(holdingWakelockPredicate.id());
+//    durationMetric->set_condition(isInBackgroundPredicate.id());
+//    durationMetric->set_aggregation_type(DurationMetric::SUM);
+//    // The metric is dimensioning by first attribution node and only by uid.
+//    *durationMetric->mutable_dimensions_in_what() =
+//        CreateAttributionUidDimensions(
+//            android::util::WAKELOCK_STATE_CHANGED, {Position::FIRST});
+//    durationMetric->set_bucket(FIVE_MINUTES);
+//
+//    // Links between wakelock state atom and condition of app is in background.
+//    auto links = durationMetric->add_links();
+//    links->set_condition(isInBackgroundPredicate.id());
+//    auto dimensionWhat = links->mutable_fields_in_what();
+//    dimensionWhat->set_field(android::util::WAKELOCK_STATE_CHANGED);
+//    dimensionWhat->add_child()->set_field(1);  // uid field.
+//    *links->mutable_fields_in_condition() = CreateAttributionUidDimensions(
+//            android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, { Position::FIRST });
+//
+//    ConfigKey cfgKey;
+//    uint64_t bucketStartTimeNs = 10000000000;
+//    uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    auto& eventActivationMap = metricProducer->mEventActivationMap;
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_TRUE(eventActivationMap.empty());
+//
+//    int appUid = 123;
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(appUid, "App1")};
+//
+//    auto event = CreateAcquireWakelockEvent(
+//            attributions1, "wl1", bucketStartTimeNs + 10 * NS_PER_SEC); // 0:10
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + 22 * NS_PER_SEC); // 0:22
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateReleaseWakelockEvent(
+//            attributions1, "wl1", bucketStartTimeNs + 60 * NS_PER_SEC); // 1:00
+//    processor->OnLogEvent(event.get());
+//
+//
+//    event = CreateMoveToForegroundEvent(
+//            appUid, bucketStartTimeNs + (3 * 60 + 15) * NS_PER_SEC); // 3:15
+//    processor->OnLogEvent(event.get());
+//
+//    vector<uint8_t> buffer;
+//    ConfigMetricsReportList reports;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_GT(buffer.size(), 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics(0).duration_metrics().data_size());
+//
+//    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
+//    // Validate dimension value.
+//    ValidateAttributionUidDimension(data.dimensions_in_what(),
+//                                    android::util::WAKELOCK_STATE_CHANGED, appUid);
+//    // Validate bucket info.
+//    EXPECT_EQ(1, data.bucket_info_size());
+//
+//    auto bucketInfo = data.bucket_info(0);
+//    EXPECT_EQ(bucketStartTimeNs, bucketInfo.start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
+//    EXPECT_EQ(38 * NS_PER_SEC, bucketInfo.duration_nanos());
+//}
+//
+//TEST(DurationMetricE2eTest, TestWithActivationAndSlicedCondition) {
+//    StatsdConfig config;
+//    config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
+//    auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
+//    *config.add_atom_matcher() = CreateAcquireWakelockAtomMatcher();
+//    *config.add_atom_matcher() = CreateReleaseWakelockAtomMatcher();
+//    *config.add_atom_matcher() = CreateMoveToBackgroundAtomMatcher();
+//    *config.add_atom_matcher() = CreateMoveToForegroundAtomMatcher();
+//    *config.add_atom_matcher() = screenOnMatcher;
+//
+//    auto holdingWakelockPredicate = CreateHoldingWakelockPredicate();
+//    // The predicate is dimensioning by first attribution node by uid.
+//    FieldMatcher dimensions = CreateAttributionUidDimensions(
+//            android::util::WAKELOCK_STATE_CHANGED, {Position::FIRST});
+//    *holdingWakelockPredicate.mutable_simple_predicate()->mutable_dimensions() = dimensions;
+//    *config.add_predicate() = holdingWakelockPredicate;
+//
+//    auto isInBackgroundPredicate = CreateIsInBackgroundPredicate();
+//    *isInBackgroundPredicate.mutable_simple_predicate()->mutable_dimensions() =
+//        CreateDimensions(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, {Position::FIRST});
+//    *config.add_predicate() = isInBackgroundPredicate;
+//
+//    auto durationMetric = config.add_duration_metric();
+//    durationMetric->set_id(StringToId("WakelockDuration"));
+//    durationMetric->set_what(holdingWakelockPredicate.id());
+//    durationMetric->set_condition(isInBackgroundPredicate.id());
+//    durationMetric->set_aggregation_type(DurationMetric::SUM);
+//    // The metric is dimensioning by first attribution node and only by uid.
+//    *durationMetric->mutable_dimensions_in_what() =
+//        CreateAttributionUidDimensions(
+//            android::util::WAKELOCK_STATE_CHANGED, {Position::FIRST});
+//    durationMetric->set_bucket(FIVE_MINUTES);
+//
+//    // Links between wakelock state atom and condition of app is in background.
+//    auto links = durationMetric->add_links();
+//    links->set_condition(isInBackgroundPredicate.id());
+//    auto dimensionWhat = links->mutable_fields_in_what();
+//    dimensionWhat->set_field(android::util::WAKELOCK_STATE_CHANGED);
+//    dimensionWhat->add_child()->set_field(1);  // uid field.
+//    *links->mutable_fields_in_condition() = CreateAttributionUidDimensions(
+//            android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, { Position::FIRST });
+//
+//    auto metric_activation1 = config.add_metric_activation();
+//    metric_activation1->set_metric_id(durationMetric->id());
+//    auto event_activation1 = metric_activation1->add_event_activation();
+//    event_activation1->set_atom_matcher_id(screenOnMatcher.id());
+//    event_activation1->set_ttl_seconds(60 * 2);  // 2 minutes.
+//
+//    ConfigKey cfgKey;
+//    uint64_t bucketStartTimeNs = 10000000000;
+//    uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    auto& eventActivationMap = metricProducer->mEventActivationMap;
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap.size(), 1u);
+//    EXPECT_TRUE(eventActivationMap.find(4) != eventActivationMap.end());
+//    EXPECT_EQ(eventActivationMap[4]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[4]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[4]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
+//
+//    int appUid = 123;
+//    std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(appUid, "App1")};
+//
+//    auto event = CreateAcquireWakelockEvent(
+//            attributions1, "wl1", bucketStartTimeNs + 10 * NS_PER_SEC); // 0:10
+//    processor->OnLogEvent(event.get());
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[4]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[4]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[4]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
+//
+//    event = CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + 22 * NS_PER_SEC); // 0:22
+//    processor->OnLogEvent(event.get());
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[4]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[4]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[4]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
+//
+//    const int64_t durationStartNs = bucketStartTimeNs + 30 * NS_PER_SEC; // 0:30
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, durationStartNs);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[4]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[4]->start_ns, durationStartNs);
+//    EXPECT_EQ(eventActivationMap[4]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
+//
+//    const int64_t durationEndNs =
+//            durationStartNs + (event_activation1->ttl_seconds() + 30) * NS_PER_SEC; // 3:00
+//    event = CreateAppCrashEvent(333, durationEndNs);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[4]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[4]->start_ns, durationStartNs);
+//    EXPECT_EQ(eventActivationMap[4]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
+//
+//    event = CreateMoveToForegroundEvent(
+//            appUid, bucketStartTimeNs + (3 * 60 + 15) * NS_PER_SEC); // 3:15
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateReleaseWakelockEvent(
+//            attributions1, "wl1", bucketStartTimeNs + (4 * 60 + 17) * NS_PER_SEC); // 4:17
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateMoveToBackgroundEvent(
+//            appUid, bucketStartTimeNs + (4 * 60 + 20) * NS_PER_SEC); // 4:20
+//    processor->OnLogEvent(event.get());
+//
+//    event = CreateAcquireWakelockEvent(
+//            attributions1, "wl1", bucketStartTimeNs + (4 * 60 + 25) * NS_PER_SEC); // 4:25
+//    processor->OnLogEvent(event.get());
+//
+//    const int64_t duration2StartNs = bucketStartTimeNs + (4 * 60 + 30) * NS_PER_SEC; // 4:30
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, duration2StartNs);
+//    processor->OnLogEvent(event.get());
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[4]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[4]->start_ns, duration2StartNs);
+//    EXPECT_EQ(eventActivationMap[4]->ttl_ns, event_activation1->ttl_seconds() * NS_PER_SEC);
+//
+//    vector<uint8_t> buffer;
+//    ConfigMetricsReportList reports;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + bucketSizeNs + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_GT(buffer.size(), 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics(0).duration_metrics().data_size());
+//
+//    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
+//    // Validate dimension value.
+//    ValidateAttributionUidDimension(data.dimensions_in_what(),
+//                                    android::util::WAKELOCK_STATE_CHANGED, appUid);
+//    // Validate bucket info.
+//    EXPECT_EQ(2, data.bucket_info_size());
+//
+//    auto bucketInfo = data.bucket_info(0);
+//    EXPECT_EQ(bucketStartTimeNs, bucketInfo.start_bucket_elapsed_nanos());
+//    EXPECT_EQ(durationEndNs, bucketInfo.end_bucket_elapsed_nanos());
+//    EXPECT_EQ(durationEndNs - durationStartNs, bucketInfo.duration_nanos());
+//
+//    bucketInfo = data.bucket_info(1);
+//    EXPECT_EQ(durationEndNs, bucketInfo.start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs - duration2StartNs, bucketInfo.duration_nanos());
+//}
 
 #else
 GTEST_LOG_(INFO) << "This test does nothing.\n";
diff --git a/cmds/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp b/cmds/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp
index 5e60aba..7f651d4 100644
--- a/cmds/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp
+++ b/cmds/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp
@@ -12,6 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include <android/binder_interface_utils.h>
 #include <gtest/gtest.h>
 
 #include <vector>
@@ -20,6 +21,8 @@
 #include "src/stats_log_util.h"
 #include "tests/statsd_test_util.h"
 
+using ::ndk::SharedRefBase;
+
 namespace android {
 namespace os {
 namespace statsd {
@@ -60,479 +63,484 @@
     return config;
 }
 
-}  // namespace
+}  // namespaces
 
-TEST(GaugeMetricE2eTest, TestRandomSamplePulledEvents) {
-    auto config = CreateStatsdConfig(GaugeMetric::RANDOM_ONE_SAMPLE);
-    int64_t baseTimeNs = getElapsedRealtimeNs();
-    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
-                                             new FakeSubsystemSleepCallback(), ATOM_TAG);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    processor->mPullerManager->ForceClearPullerCache();
-
-    int startBucketNum = processor->mMetricsManagers.begin()->second->
-            mAllMetricProducers[0]->getCurrentBucketNum();
-    EXPECT_GT(startBucketNum, (int64_t)0);
-
-    // When creating the config, the gauge metric producer should register the alarm at the
-    // end of the current bucket.
-    EXPECT_EQ((size_t)1, processor->mPullerManager->mReceivers.size());
-    EXPECT_EQ(bucketSizeNs,
-              processor->mPullerManager->mReceivers.begin()->second.front().intervalNs);
-    int64_t& nextPullTimeNs =
-            processor->mPullerManager->mReceivers.begin()->second.front().nextPullTimeNs;
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, nextPullTimeNs);
-
-    auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                        configAddedTimeNs + 55);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    // Pulling alarm arrives on time and reset the sequential pulling alarm.
-    processor->informPullAlarmFired(nextPullTimeNs + 1);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 2 * bucketSizeNs, nextPullTimeNs);
-
-    auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                                       configAddedTimeNs + bucketSizeNs + 10);
-    processor->OnLogEvent(screenOnEvent.get());
-
-    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                   configAddedTimeNs + bucketSizeNs + 100);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    processor->informPullAlarmFired(nextPullTimeNs + 1);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 3 * bucketSizeNs,
-              nextPullTimeNs);
-
-    processor->informPullAlarmFired(nextPullTimeNs + 1);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 4 * bucketSizeNs, nextPullTimeNs);
-
-    screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                                  configAddedTimeNs + 3 * bucketSizeNs + 2);
-    processor->OnLogEvent(screenOnEvent.get());
-
-    processor->informPullAlarmFired(nextPullTimeNs + 3);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 5 * bucketSizeNs, nextPullTimeNs);
-
-    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                  configAddedTimeNs + 5 * bucketSizeNs + 1);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    processor->informPullAlarmFired(nextPullTimeNs + 2);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 6 * bucketSizeNs, nextPullTimeNs);
-
-    processor->informPullAlarmFired(nextPullTimeNs + 2);
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    StatsLogReport::GaugeMetricDataWrapper gaugeMetrics;
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics);
-    EXPECT_GT((int)gaugeMetrics.data_size(), 1);
-
-    auto data = gaugeMetrics.data(0);
-    EXPECT_EQ(ATOM_TAG, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* subsystem name field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
-    EXPECT_EQ(6, data.bucket_info_size());
-
-    EXPECT_EQ(1, data.bucket_info(0).atom_size());
-    EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size());
-    EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(0, data.bucket_info(0).wall_clock_timestamp_nanos_size());
-    EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-    EXPECT_TRUE(data.bucket_info(0).atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(0).atom(0).subsystem_sleep_state().time_millis(), 0);
-
-    EXPECT_EQ(1, data.bucket_info(1).atom_size());
-    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs + 1,
-              data.bucket_info(1).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs + 1, data.bucket_info(1).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos());
-    EXPECT_TRUE(data.bucket_info(1).atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(1).atom(0).subsystem_sleep_state().time_millis(), 0);
-
-    EXPECT_EQ(1, data.bucket_info(2).atom_size());
-    EXPECT_EQ(1, data.bucket_info(2).elapsed_timestamp_nanos_size());
-    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs + 1,
-              data.bucket_info(2).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos());
-    EXPECT_TRUE(data.bucket_info(2).atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(2).atom(0).subsystem_sleep_state().time_millis(), 0);
-
-    EXPECT_EQ(1, data.bucket_info(3).atom_size());
-    EXPECT_EQ(1, data.bucket_info(3).elapsed_timestamp_nanos_size());
-    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs + 1,
-              data.bucket_info(3).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(3).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(3).end_bucket_elapsed_nanos());
-    EXPECT_TRUE(data.bucket_info(3).atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(3).atom(0).subsystem_sleep_state().time_millis(), 0);
-
-    EXPECT_EQ(1, data.bucket_info(4).atom_size());
-    EXPECT_EQ(1, data.bucket_info(4).elapsed_timestamp_nanos_size());
-    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs + 1,
-              data.bucket_info(4).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(4).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(4).end_bucket_elapsed_nanos());
-    EXPECT_TRUE(data.bucket_info(4).atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(4).atom(0).subsystem_sleep_state().time_millis(), 0);
-
-    EXPECT_EQ(1, data.bucket_info(5).atom_size());
-    EXPECT_EQ(1, data.bucket_info(5).elapsed_timestamp_nanos_size());
-    EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs + 2,
-              data.bucket_info(5).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(5).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 9 * bucketSizeNs, data.bucket_info(5).end_bucket_elapsed_nanos());
-    EXPECT_TRUE(data.bucket_info(5).atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(5).atom(0).subsystem_sleep_state().time_millis(), 0);
-}
-
-TEST(GaugeMetricE2eTest, TestConditionChangeToTrueSamplePulledEvents) {
-    auto config = CreateStatsdConfig(GaugeMetric::CONDITION_CHANGE_TO_TRUE);
-    int64_t baseTimeNs = getElapsedRealtimeNs();
-    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
-                                             new FakeSubsystemSleepCallback(), ATOM_TAG);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    processor->mPullerManager->ForceClearPullerCache();
-
-    int startBucketNum = processor->mMetricsManagers.begin()->second->
-            mAllMetricProducers[0]->getCurrentBucketNum();
-    EXPECT_GT(startBucketNum, (int64_t)0);
-
-    auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                        configAddedTimeNs + 55);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                                       configAddedTimeNs + bucketSizeNs + 10);
-    processor->OnLogEvent(screenOnEvent.get());
-
-    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                   configAddedTimeNs + bucketSizeNs + 100);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                                  configAddedTimeNs + 3 * bucketSizeNs + 2);
-    processor->OnLogEvent(screenOnEvent.get());
-
-    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                  configAddedTimeNs + 5 * bucketSizeNs + 1);
-    processor->OnLogEvent(screenOffEvent.get());
-    screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                                  configAddedTimeNs + 5 * bucketSizeNs + 3);
-    processor->OnLogEvent(screenOnEvent.get());
-    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                  configAddedTimeNs + 5 * bucketSizeNs + 10);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, configAddedTimeNs + 8 * bucketSizeNs + 10, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    StatsLogReport::GaugeMetricDataWrapper gaugeMetrics;
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics);
-    EXPECT_GT((int)gaugeMetrics.data_size(), 1);
-
-    auto data = gaugeMetrics.data(0);
-    EXPECT_EQ(ATOM_TAG, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* subsystem name field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
-    EXPECT_EQ(3, data.bucket_info_size());
-
-    EXPECT_EQ(1, data.bucket_info(0).atom_size());
-    EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size());
-    EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(0, data.bucket_info(0).wall_clock_timestamp_nanos_size());
-    EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-    EXPECT_TRUE(data.bucket_info(0).atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(0).atom(0).subsystem_sleep_state().time_millis(), 0);
-
-    EXPECT_EQ(1, data.bucket_info(1).atom_size());
-    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs + 100,
-              data.bucket_info(1).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos());
-    EXPECT_TRUE(data.bucket_info(1).atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(1).atom(0).subsystem_sleep_state().time_millis(), 0);
-
-    EXPECT_EQ(2, data.bucket_info(2).atom_size());
-    EXPECT_EQ(2, data.bucket_info(2).elapsed_timestamp_nanos_size());
-    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs + 1,
-              data.bucket_info(2).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs + 10,
-              data.bucket_info(2).elapsed_timestamp_nanos(1));
-    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos());
-    EXPECT_TRUE(data.bucket_info(2).atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(2).atom(0).subsystem_sleep_state().time_millis(), 0);
-    EXPECT_TRUE(data.bucket_info(2).atom(1).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(2).atom(1).subsystem_sleep_state().time_millis(), 0);
-}
-
-
-TEST(GaugeMetricE2eTest, TestRandomSamplePulledEvent_LateAlarm) {
-    auto config = CreateStatsdConfig(GaugeMetric::RANDOM_ONE_SAMPLE);
-    int64_t baseTimeNs = getElapsedRealtimeNs();
-    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
-                                             new FakeSubsystemSleepCallback, ATOM_TAG);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    processor->mPullerManager->ForceClearPullerCache();
-
-    int startBucketNum = processor->mMetricsManagers.begin()->second->
-            mAllMetricProducers[0]->getCurrentBucketNum();
-    EXPECT_GT(startBucketNum, (int64_t)0);
-
-    // When creating the config, the gauge metric producer should register the alarm at the
-    // end of the current bucket.
-    EXPECT_EQ((size_t)1, processor->mPullerManager->mReceivers.size());
-    EXPECT_EQ(bucketSizeNs,
-              processor->mPullerManager->mReceivers.begin()->second.front().intervalNs);
-    int64_t& nextPullTimeNs =
-            processor->mPullerManager->mReceivers.begin()->second.front().nextPullTimeNs;
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, nextPullTimeNs);
-
-    auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                        configAddedTimeNs + 55);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                                       configAddedTimeNs + bucketSizeNs + 10);
-    processor->OnLogEvent(screenOnEvent.get());
-
-    // Pulling alarm arrives one bucket size late.
-    processor->informPullAlarmFired(nextPullTimeNs + bucketSizeNs);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 3 * bucketSizeNs, nextPullTimeNs);
-
-    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                   configAddedTimeNs + 3 * bucketSizeNs + 11);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    // Pulling alarm arrives more than one bucket size late.
-    processor->informPullAlarmFired(nextPullTimeNs + bucketSizeNs + 12);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 5 * bucketSizeNs, nextPullTimeNs);
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    StatsLogReport::GaugeMetricDataWrapper gaugeMetrics;
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics);
-    EXPECT_GT((int)gaugeMetrics.data_size(), 1);
-
-    auto data = gaugeMetrics.data(0);
-    EXPECT_EQ(ATOM_TAG, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* subsystem name field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
-    EXPECT_EQ(3, data.bucket_info_size());
-
-    EXPECT_EQ(1, data.bucket_info(0).atom_size());
-    EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size());
-    EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-    EXPECT_TRUE(data.bucket_info(0).atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(0).atom(0).subsystem_sleep_state().time_millis(), 0);
-
-    EXPECT_EQ(1, data.bucket_info(1).atom_size());
-    EXPECT_EQ(configAddedTimeNs + 3 * bucketSizeNs + 11,
-              data.bucket_info(1).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos());
-    EXPECT_TRUE(data.bucket_info(1).atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(1).atom(0).subsystem_sleep_state().time_millis(), 0);
-
-    EXPECT_EQ(1, data.bucket_info(2).atom_size());
-    EXPECT_EQ(1, data.bucket_info(2).elapsed_timestamp_nanos_size());
-    EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs + 12,
-              data.bucket_info(2).elapsed_timestamp_nanos(0));
-    EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos());
-    EXPECT_TRUE(data.bucket_info(2).atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(data.bucket_info(2).atom(0).subsystem_sleep_state().time_millis(), 0);
-}
-
-TEST(GaugeMetricE2eTest, TestRandomSamplePulledEventsWithActivation) {
-    auto config = CreateStatsdConfig(GaugeMetric::RANDOM_ONE_SAMPLE, /*useCondition=*/false);
-
-    int64_t baseTimeNs = getElapsedRealtimeNs();
-    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000;
-
-    auto batterySaverStartMatcher = CreateBatterySaverModeStartAtomMatcher();
-    *config.add_atom_matcher() = batterySaverStartMatcher;
-    const int64_t ttlNs = 2 * bucketSizeNs; // Two buckets.
-    auto metric_activation = config.add_metric_activation();
-    metric_activation->set_metric_id(metricId);
-    metric_activation->set_activation_type(ACTIVATE_IMMEDIATELY);
-    auto event_activation = metric_activation->add_event_activation();
-    event_activation->set_atom_matcher_id(batterySaverStartMatcher.id());
-    event_activation->set_ttl_seconds(ttlNs / 1000000000);
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
-                                             new FakeSubsystemSleepCallback(), ATOM_TAG);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    processor->mPullerManager->ForceClearPullerCache();
-
-    int startBucketNum = processor->mMetricsManagers.begin()->second->
-            mAllMetricProducers[0]->getCurrentBucketNum();
-    EXPECT_GT(startBucketNum, (int64_t)0);
-    EXPECT_FALSE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
-
-    // When creating the config, the gauge metric producer should register the alarm at the
-    // end of the current bucket.
-    EXPECT_EQ((size_t)1, processor->mPullerManager->mReceivers.size());
-    EXPECT_EQ(bucketSizeNs,
-              processor->mPullerManager->mReceivers.begin()->second.front().intervalNs);
-    int64_t& nextPullTimeNs =
-            processor->mPullerManager->mReceivers.begin()->second.front().nextPullTimeNs;
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, nextPullTimeNs);
-
-    // Pulling alarm arrives on time and reset the sequential pulling alarm.
-    // Event should not be kept.
-    processor->informPullAlarmFired(nextPullTimeNs + 1); // 15 mins + 1 ns.
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 2 * bucketSizeNs, nextPullTimeNs);
-    EXPECT_FALSE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
-
-    // Activate the metric. A pull occurs upon activation.
-    const int64_t activationNs = configAddedTimeNs + bucketSizeNs + (2 * 1000 * 1000); // 2 millis.
-    auto batterySaverOnEvent = CreateBatterySaverOnEvent(activationNs);
-    processor->OnLogEvent(batterySaverOnEvent.get()); // 15 mins + 2 ms.
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
-
-    // This event should be kept. 2 total.
-    processor->informPullAlarmFired(nextPullTimeNs + 1); // 20 mins + 1 ns.
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 3 * bucketSizeNs,
-              nextPullTimeNs);
-
-    // This event should be kept. 3 total.
-    processor->informPullAlarmFired(nextPullTimeNs + 2); // 25 mins + 2 ns.
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 4 * bucketSizeNs, nextPullTimeNs);
-
-    // Create random event to deactivate metric.
-    auto deactivationEvent = CreateScreenBrightnessChangedEvent(50, activationNs + ttlNs + 1);
-    processor->OnLogEvent(deactivationEvent.get());
-    EXPECT_FALSE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
-
-    // Event should not be kept. 3 total.
-    processor->informPullAlarmFired(nextPullTimeNs + 3);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 5 * bucketSizeNs, nextPullTimeNs);
-
-    processor->informPullAlarmFired(nextPullTimeNs + 2);
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    StatsLogReport::GaugeMetricDataWrapper gaugeMetrics;
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics);
-    EXPECT_GT((int)gaugeMetrics.data_size(), 0);
-
-    auto data = gaugeMetrics.data(0);
-    EXPECT_EQ(ATOM_TAG, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* subsystem name field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
-    EXPECT_EQ(3, data.bucket_info_size());
-
-    auto bucketInfo = data.bucket_info(0);
-    EXPECT_EQ(1, bucketInfo.atom_size());
-    EXPECT_EQ(1, bucketInfo.elapsed_timestamp_nanos_size());
-    EXPECT_EQ(activationNs, bucketInfo.elapsed_timestamp_nanos(0));
-    EXPECT_EQ(0, bucketInfo.wall_clock_timestamp_nanos_size());
-    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, bucketInfo.start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
-    EXPECT_TRUE(bucketInfo.atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(bucketInfo.atom(0).subsystem_sleep_state().time_millis(), 0);
-
-    bucketInfo = data.bucket_info(1);
-    EXPECT_EQ(1, bucketInfo.atom_size());
-    EXPECT_EQ(1, bucketInfo.elapsed_timestamp_nanos_size());
-    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs + 1, bucketInfo.elapsed_timestamp_nanos(0));
-    EXPECT_EQ(0, bucketInfo.wall_clock_timestamp_nanos_size());
-    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, bucketInfo.start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
-    EXPECT_TRUE(bucketInfo.atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(bucketInfo.atom(0).subsystem_sleep_state().time_millis(), 0);
-
-    bucketInfo = data.bucket_info(2);
-    EXPECT_EQ(1, bucketInfo.atom_size());
-    EXPECT_EQ(1, bucketInfo.elapsed_timestamp_nanos_size());
-    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs + 2, bucketInfo.elapsed_timestamp_nanos(0));
-    EXPECT_EQ(0, bucketInfo.wall_clock_timestamp_nanos_size());
-    EXPECT_EQ(MillisToNano(NanoToMillis(baseTimeNs + 5 * bucketSizeNs)),
-            bucketInfo.start_bucket_elapsed_nanos());
-    EXPECT_EQ(MillisToNano(NanoToMillis(activationNs + ttlNs + 1)),
-            bucketInfo.end_bucket_elapsed_nanos());
-    EXPECT_TRUE(bucketInfo.atom(0).subsystem_sleep_state().subsystem_name().empty());
-    EXPECT_GT(bucketInfo.atom(0).subsystem_sleep_state().time_millis(), 0);
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(GaugeMetricE2eTest, TestRandomSamplePulledEvents) {
+//    auto config = CreateStatsdConfig(GaugeMetric::RANDOM_ONE_SAMPLE);
+//    int64_t baseTimeNs = getElapsedRealtimeNs();
+//    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
+//                                             SharedRefBase::make<FakeSubsystemSleepCallback>(),
+//                                             ATOM_TAG);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    processor->mPullerManager->ForceClearPullerCache();
+//
+//    int startBucketNum = processor->mMetricsManagers.begin()->second->
+//            mAllMetricProducers[0]->getCurrentBucketNum();
+//    EXPECT_GT(startBucketNum, (int64_t)0);
+//
+//    // When creating the config, the gauge metric producer should register the alarm at the
+//    // end of the current bucket.
+//    EXPECT_EQ((size_t)1, processor->mPullerManager->mReceivers.size());
+//    EXPECT_EQ(bucketSizeNs,
+//              processor->mPullerManager->mReceivers.begin()->second.front().intervalNs);
+//    int64_t& nextPullTimeNs =
+//            processor->mPullerManager->mReceivers.begin()->second.front().nextPullTimeNs;
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, nextPullTimeNs);
+//
+//    auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                        configAddedTimeNs + 55);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    // Pulling alarm arrives on time and reset the sequential pulling alarm.
+//    processor->informPullAlarmFired(nextPullTimeNs + 1);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 2 * bucketSizeNs, nextPullTimeNs);
+//
+//    auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                                       configAddedTimeNs + bucketSizeNs + 10);
+//    processor->OnLogEvent(screenOnEvent.get());
+//
+//    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                   configAddedTimeNs + bucketSizeNs + 100);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    processor->informPullAlarmFired(nextPullTimeNs + 1);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 3 * bucketSizeNs,
+//              nextPullTimeNs);
+//
+//    processor->informPullAlarmFired(nextPullTimeNs + 1);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 4 * bucketSizeNs, nextPullTimeNs);
+//
+//    screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                                  configAddedTimeNs + 3 * bucketSizeNs + 2);
+//    processor->OnLogEvent(screenOnEvent.get());
+//
+//    processor->informPullAlarmFired(nextPullTimeNs + 3);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 5 * bucketSizeNs, nextPullTimeNs);
+//
+//    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                  configAddedTimeNs + 5 * bucketSizeNs + 1);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    processor->informPullAlarmFired(nextPullTimeNs + 2);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 6 * bucketSizeNs, nextPullTimeNs);
+//
+//    processor->informPullAlarmFired(nextPullTimeNs + 2);
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    StatsLogReport::GaugeMetricDataWrapper gaugeMetrics;
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics);
+//    EXPECT_GT((int)gaugeMetrics.data_size(), 1);
+//
+//    auto data = gaugeMetrics.data(0);
+//    EXPECT_EQ(ATOM_TAG, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* subsystem name field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
+//    EXPECT_EQ(6, data.bucket_info_size());
+//
+//    EXPECT_EQ(1, data.bucket_info(0).atom_size());
+//    EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size());
+//    EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(0, data.bucket_info(0).wall_clock_timestamp_nanos_size());
+//    EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(data.bucket_info(0).atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(0).atom(0).subsystem_sleep_state().time_millis(), 0);
+//
+//    EXPECT_EQ(1, data.bucket_info(1).atom_size());
+//    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs + 1,
+//              data.bucket_info(1).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs + 1, data.bucket_info(1).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(data.bucket_info(1).atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(1).atom(0).subsystem_sleep_state().time_millis(), 0);
+//
+//    EXPECT_EQ(1, data.bucket_info(2).atom_size());
+//    EXPECT_EQ(1, data.bucket_info(2).elapsed_timestamp_nanos_size());
+//    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs + 1,
+//              data.bucket_info(2).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(data.bucket_info(2).atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(2).atom(0).subsystem_sleep_state().time_millis(), 0);
+//
+//    EXPECT_EQ(1, data.bucket_info(3).atom_size());
+//    EXPECT_EQ(1, data.bucket_info(3).elapsed_timestamp_nanos_size());
+//    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs + 1,
+//              data.bucket_info(3).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(3).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(3).end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(data.bucket_info(3).atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(3).atom(0).subsystem_sleep_state().time_millis(), 0);
+//
+//    EXPECT_EQ(1, data.bucket_info(4).atom_size());
+//    EXPECT_EQ(1, data.bucket_info(4).elapsed_timestamp_nanos_size());
+//    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs + 1,
+//              data.bucket_info(4).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(4).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(4).end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(data.bucket_info(4).atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(4).atom(0).subsystem_sleep_state().time_millis(), 0);
+//
+//    EXPECT_EQ(1, data.bucket_info(5).atom_size());
+//    EXPECT_EQ(1, data.bucket_info(5).elapsed_timestamp_nanos_size());
+//    EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs + 2,
+//              data.bucket_info(5).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(5).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 9 * bucketSizeNs, data.bucket_info(5).end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(data.bucket_info(5).atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(5).atom(0).subsystem_sleep_state().time_millis(), 0);
+//}
+//
+//TEST(GaugeMetricE2eTest, TestConditionChangeToTrueSamplePulledEvents) {
+//    auto config = CreateStatsdConfig(GaugeMetric::CONDITION_CHANGE_TO_TRUE);
+//    int64_t baseTimeNs = getElapsedRealtimeNs();
+//    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
+//                                             SharedRefBase::make<FakeSubsystemSleepCallback>(),
+//                                             ATOM_TAG);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    processor->mPullerManager->ForceClearPullerCache();
+//
+//    int startBucketNum = processor->mMetricsManagers.begin()->second->
+//            mAllMetricProducers[0]->getCurrentBucketNum();
+//    EXPECT_GT(startBucketNum, (int64_t)0);
+//
+//    auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                        configAddedTimeNs + 55);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                                       configAddedTimeNs + bucketSizeNs + 10);
+//    processor->OnLogEvent(screenOnEvent.get());
+//
+//    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                   configAddedTimeNs + bucketSizeNs + 100);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                                  configAddedTimeNs + 3 * bucketSizeNs + 2);
+//    processor->OnLogEvent(screenOnEvent.get());
+//
+//    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                  configAddedTimeNs + 5 * bucketSizeNs + 1);
+//    processor->OnLogEvent(screenOffEvent.get());
+//    screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                                  configAddedTimeNs + 5 * bucketSizeNs + 3);
+//    processor->OnLogEvent(screenOnEvent.get());
+//    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                  configAddedTimeNs + 5 * bucketSizeNs + 10);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, configAddedTimeNs + 8 * bucketSizeNs + 10, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    StatsLogReport::GaugeMetricDataWrapper gaugeMetrics;
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics);
+//    EXPECT_GT((int)gaugeMetrics.data_size(), 1);
+//
+//    auto data = gaugeMetrics.data(0);
+//    EXPECT_EQ(ATOM_TAG, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* subsystem name field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
+//    EXPECT_EQ(3, data.bucket_info_size());
+//
+//    EXPECT_EQ(1, data.bucket_info(0).atom_size());
+//    EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size());
+//    EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(0, data.bucket_info(0).wall_clock_timestamp_nanos_size());
+//    EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(data.bucket_info(0).atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(0).atom(0).subsystem_sleep_state().time_millis(), 0);
+//
+//    EXPECT_EQ(1, data.bucket_info(1).atom_size());
+//    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs + 100,
+//              data.bucket_info(1).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(data.bucket_info(1).atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(1).atom(0).subsystem_sleep_state().time_millis(), 0);
+//
+//    EXPECT_EQ(2, data.bucket_info(2).atom_size());
+//    EXPECT_EQ(2, data.bucket_info(2).elapsed_timestamp_nanos_size());
+//    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs + 1,
+//              data.bucket_info(2).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs + 10,
+//              data.bucket_info(2).elapsed_timestamp_nanos(1));
+//    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(data.bucket_info(2).atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(2).atom(0).subsystem_sleep_state().time_millis(), 0);
+//    EXPECT_TRUE(data.bucket_info(2).atom(1).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(2).atom(1).subsystem_sleep_state().time_millis(), 0);
+//}
+//
+//
+//TEST(GaugeMetricE2eTest, TestRandomSamplePulledEvent_LateAlarm) {
+//    auto config = CreateStatsdConfig(GaugeMetric::RANDOM_ONE_SAMPLE);
+//    int64_t baseTimeNs = getElapsedRealtimeNs();
+//    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
+//                                             SharedRefBase::make<FakeSubsystemSleepCallback>(),
+//                                             ATOM_TAG);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    processor->mPullerManager->ForceClearPullerCache();
+//
+//    int startBucketNum = processor->mMetricsManagers.begin()->second->
+//            mAllMetricProducers[0]->getCurrentBucketNum();
+//    EXPECT_GT(startBucketNum, (int64_t)0);
+//
+//    // When creating the config, the gauge metric producer should register the alarm at the
+//    // end of the current bucket.
+//    EXPECT_EQ((size_t)1, processor->mPullerManager->mReceivers.size());
+//    EXPECT_EQ(bucketSizeNs,
+//              processor->mPullerManager->mReceivers.begin()->second.front().intervalNs);
+//    int64_t& nextPullTimeNs =
+//            processor->mPullerManager->mReceivers.begin()->second.front().nextPullTimeNs;
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, nextPullTimeNs);
+//
+//    auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                        configAddedTimeNs + 55);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                                       configAddedTimeNs + bucketSizeNs + 10);
+//    processor->OnLogEvent(screenOnEvent.get());
+//
+//    // Pulling alarm arrives one bucket size late.
+//    processor->informPullAlarmFired(nextPullTimeNs + bucketSizeNs);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 3 * bucketSizeNs, nextPullTimeNs);
+//
+//    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                   configAddedTimeNs + 3 * bucketSizeNs + 11);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    // Pulling alarm arrives more than one bucket size late.
+//    processor->informPullAlarmFired(nextPullTimeNs + bucketSizeNs + 12);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 5 * bucketSizeNs, nextPullTimeNs);
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    StatsLogReport::GaugeMetricDataWrapper gaugeMetrics;
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics);
+//    EXPECT_GT((int)gaugeMetrics.data_size(), 1);
+//
+//    auto data = gaugeMetrics.data(0);
+//    EXPECT_EQ(ATOM_TAG, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* subsystem name field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
+//    EXPECT_EQ(3, data.bucket_info_size());
+//
+//    EXPECT_EQ(1, data.bucket_info(0).atom_size());
+//    EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size());
+//    EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(data.bucket_info(0).atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(0).atom(0).subsystem_sleep_state().time_millis(), 0);
+//
+//    EXPECT_EQ(1, data.bucket_info(1).atom_size());
+//    EXPECT_EQ(configAddedTimeNs + 3 * bucketSizeNs + 11,
+//              data.bucket_info(1).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(data.bucket_info(1).atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(1).atom(0).subsystem_sleep_state().time_millis(), 0);
+//
+//    EXPECT_EQ(1, data.bucket_info(2).atom_size());
+//    EXPECT_EQ(1, data.bucket_info(2).elapsed_timestamp_nanos_size());
+//    EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs + 12,
+//              data.bucket_info(2).elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(data.bucket_info(2).atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(data.bucket_info(2).atom(0).subsystem_sleep_state().time_millis(), 0);
+//}
+//
+//TEST(GaugeMetricE2eTest, TestRandomSamplePulledEventsWithActivation) {
+//    auto config = CreateStatsdConfig(GaugeMetric::RANDOM_ONE_SAMPLE, /*useCondition=*/false);
+//
+//    int64_t baseTimeNs = getElapsedRealtimeNs();
+//    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000;
+//
+//    auto batterySaverStartMatcher = CreateBatterySaverModeStartAtomMatcher();
+//    *config.add_atom_matcher() = batterySaverStartMatcher;
+//    const int64_t ttlNs = 2 * bucketSizeNs; // Two buckets.
+//    auto metric_activation = config.add_metric_activation();
+//    metric_activation->set_metric_id(metricId);
+//    metric_activation->set_activation_type(ACTIVATE_IMMEDIATELY);
+//    auto event_activation = metric_activation->add_event_activation();
+//    event_activation->set_atom_matcher_id(batterySaverStartMatcher.id());
+//    event_activation->set_ttl_seconds(ttlNs / 1000000000);
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
+//                                             SharedRefBase::make<FakeSubsystemSleepCallback>(),
+//                                             ATOM_TAG);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    processor->mPullerManager->ForceClearPullerCache();
+//
+//    int startBucketNum = processor->mMetricsManagers.begin()->second->
+//            mAllMetricProducers[0]->getCurrentBucketNum();
+//    EXPECT_GT(startBucketNum, (int64_t)0);
+//    EXPECT_FALSE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
+//
+//    // When creating the config, the gauge metric producer should register the alarm at the
+//    // end of the current bucket.
+//    EXPECT_EQ((size_t)1, processor->mPullerManager->mReceivers.size());
+//    EXPECT_EQ(bucketSizeNs,
+//              processor->mPullerManager->mReceivers.begin()->second.front().intervalNs);
+//    int64_t& nextPullTimeNs =
+//            processor->mPullerManager->mReceivers.begin()->second.front().nextPullTimeNs;
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, nextPullTimeNs);
+//
+//    // Pulling alarm arrives on time and reset the sequential pulling alarm.
+//    // Event should not be kept.
+//    processor->informPullAlarmFired(nextPullTimeNs + 1); // 15 mins + 1 ns.
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 2 * bucketSizeNs, nextPullTimeNs);
+//    EXPECT_FALSE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
+//
+//    // Activate the metric. A pull occurs upon activation.
+//    const int64_t activationNs = configAddedTimeNs + bucketSizeNs + (2 * 1000 * 1000); // 2 millis.
+//    auto batterySaverOnEvent = CreateBatterySaverOnEvent(activationNs);
+//    processor->OnLogEvent(batterySaverOnEvent.get()); // 15 mins + 2 ms.
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
+//
+//    // This event should be kept. 2 total.
+//    processor->informPullAlarmFired(nextPullTimeNs + 1); // 20 mins + 1 ns.
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 3 * bucketSizeNs,
+//              nextPullTimeNs);
+//
+//    // This event should be kept. 3 total.
+//    processor->informPullAlarmFired(nextPullTimeNs + 2); // 25 mins + 2 ns.
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 4 * bucketSizeNs, nextPullTimeNs);
+//
+//    // Create random event to deactivate metric.
+//    auto deactivationEvent = CreateScreenBrightnessChangedEvent(50, activationNs + ttlNs + 1);
+//    processor->OnLogEvent(deactivationEvent.get());
+//    EXPECT_FALSE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
+//
+//    // Event should not be kept. 3 total.
+//    processor->informPullAlarmFired(nextPullTimeNs + 3);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 5 * bucketSizeNs, nextPullTimeNs);
+//
+//    processor->informPullAlarmFired(nextPullTimeNs + 2);
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    StatsLogReport::GaugeMetricDataWrapper gaugeMetrics;
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics);
+//    EXPECT_GT((int)gaugeMetrics.data_size(), 0);
+//
+//    auto data = gaugeMetrics.data(0);
+//    EXPECT_EQ(ATOM_TAG, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* subsystem name field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
+//    EXPECT_EQ(3, data.bucket_info_size());
+//
+//    auto bucketInfo = data.bucket_info(0);
+//    EXPECT_EQ(1, bucketInfo.atom_size());
+//    EXPECT_EQ(1, bucketInfo.elapsed_timestamp_nanos_size());
+//    EXPECT_EQ(activationNs, bucketInfo.elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(0, bucketInfo.wall_clock_timestamp_nanos_size());
+//    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, bucketInfo.start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(bucketInfo.atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(bucketInfo.atom(0).subsystem_sleep_state().time_millis(), 0);
+//
+//    bucketInfo = data.bucket_info(1);
+//    EXPECT_EQ(1, bucketInfo.atom_size());
+//    EXPECT_EQ(1, bucketInfo.elapsed_timestamp_nanos_size());
+//    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs + 1, bucketInfo.elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(0, bucketInfo.wall_clock_timestamp_nanos_size());
+//    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, bucketInfo.start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(bucketInfo.atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(bucketInfo.atom(0).subsystem_sleep_state().time_millis(), 0);
+//
+//    bucketInfo = data.bucket_info(2);
+//    EXPECT_EQ(1, bucketInfo.atom_size());
+//    EXPECT_EQ(1, bucketInfo.elapsed_timestamp_nanos_size());
+//    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs + 2, bucketInfo.elapsed_timestamp_nanos(0));
+//    EXPECT_EQ(0, bucketInfo.wall_clock_timestamp_nanos_size());
+//    EXPECT_EQ(MillisToNano(NanoToMillis(baseTimeNs + 5 * bucketSizeNs)),
+//            bucketInfo.start_bucket_elapsed_nanos());
+//    EXPECT_EQ(MillisToNano(NanoToMillis(activationNs + ttlNs + 1)),
+//            bucketInfo.end_bucket_elapsed_nanos());
+//    EXPECT_TRUE(bucketInfo.atom(0).subsystem_sleep_state().subsystem_name().empty());
+//    EXPECT_GT(bucketInfo.atom(0).subsystem_sleep_state().time_millis(), 0);
+//}
 
 TEST(GaugeMetricE2eTest, TestRandomSamplePulledEventsNoCondition) {
     auto config = CreateStatsdConfig(GaugeMetric::RANDOM_ONE_SAMPLE, /*useCondition=*/false);
@@ -544,7 +552,8 @@
 
     ConfigKey cfgKey;
     auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
-                                             new FakeSubsystemSleepCallback(), ATOM_TAG);
+                                             SharedRefBase::make<FakeSubsystemSleepCallback>(),
+                                             ATOM_TAG);
     EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
     EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
     processor->mPullerManager->ForceClearPullerCache();
diff --git a/cmds/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp b/cmds/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp
index cd80310..ef6e753 100644
--- a/cmds/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp
+++ b/cmds/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp
@@ -68,219 +68,221 @@
     return config;
 }
 
-std::unique_ptr<LogEvent> CreateAppStartOccurredEvent(
-    const int uid, const string& pkg_name, AppStartOccurred::TransitionType type,
-    const string& activity_name, const string& calling_pkg_name, const bool is_instant_app,
-    int64_t activity_start_msec, uint64_t timestampNs) {
-    auto logEvent = std::make_unique<LogEvent>(
-        android::util::APP_START_OCCURRED, timestampNs);
-    logEvent->write(uid);
-    logEvent->write(pkg_name);
-    logEvent->write(type);
-    logEvent->write(activity_name);
-    logEvent->write(calling_pkg_name);
-    logEvent->write(is_instant_app);
-    logEvent->write(activity_start_msec);
-    logEvent->init();
-    return logEvent;
-}
+// TODO(b/149590301): Update this helper to use new socket schema.
+//std::unique_ptr<LogEvent> CreateAppStartOccurredEvent(
+//    const int uid, const string& pkg_name, AppStartOccurred::TransitionType type,
+//    const string& activity_name, const string& calling_pkg_name, const bool is_instant_app,
+//    int64_t activity_start_msec, uint64_t timestampNs) {
+//    auto logEvent = std::make_unique<LogEvent>(
+//        android::util::APP_START_OCCURRED, timestampNs);
+//    logEvent->write(uid);
+//    logEvent->write(pkg_name);
+//    logEvent->write(type);
+//    logEvent->write(activity_name);
+//    logEvent->write(calling_pkg_name);
+//    logEvent->write(is_instant_app);
+//    logEvent->write(activity_start_msec);
+//    logEvent->init();
+//    return logEvent;
+//}
 
 }  // namespace
 
-TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) {
-    for (const auto& sampling_type :
-            { GaugeMetric::FIRST_N_SAMPLES, GaugeMetric:: RANDOM_ONE_SAMPLE }) {
-        auto config = CreateStatsdConfigForPushedEvent(sampling_type);
-        int64_t bucketStartTimeNs = 10000000000;
-        int64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000;
-
-        ConfigKey cfgKey;
-        auto processor = CreateStatsLogProcessor(
-                bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-        EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-        EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-
-        int appUid1 = 123;
-        int appUid2 = 456;
-        std::vector<std::unique_ptr<LogEvent>> events;
-        events.push_back(CreateMoveToBackgroundEvent(appUid1, bucketStartTimeNs + 15));
-        events.push_back(CreateMoveToForegroundEvent(
-                appUid1, bucketStartTimeNs + bucketSizeNs + 250));
-        events.push_back(CreateMoveToBackgroundEvent(
-                appUid1, bucketStartTimeNs + bucketSizeNs + 350));
-        events.push_back(CreateMoveToForegroundEvent(
-            appUid1, bucketStartTimeNs + 2 * bucketSizeNs + 100));
-
-
-        events.push_back(CreateAppStartOccurredEvent(
-            appUid1, "app1", AppStartOccurred::WARM, "activity_name1", "calling_pkg_name1",
-            true /*is_instant_app*/, 101 /*activity_start_msec*/, bucketStartTimeNs + 10));
-        events.push_back(CreateAppStartOccurredEvent(
-            appUid1, "app1", AppStartOccurred::HOT, "activity_name2", "calling_pkg_name2",
-            true /*is_instant_app*/, 102 /*activity_start_msec*/, bucketStartTimeNs + 20));
-        events.push_back(CreateAppStartOccurredEvent(
-            appUid1, "app1", AppStartOccurred::COLD, "activity_name3", "calling_pkg_name3",
-            true /*is_instant_app*/, 103 /*activity_start_msec*/, bucketStartTimeNs + 30));
-        events.push_back(CreateAppStartOccurredEvent(
-            appUid1, "app1", AppStartOccurred::WARM, "activity_name4", "calling_pkg_name4",
-            true /*is_instant_app*/, 104 /*activity_start_msec*/,
-            bucketStartTimeNs + bucketSizeNs + 30));
-        events.push_back(CreateAppStartOccurredEvent(
-            appUid1, "app1", AppStartOccurred::COLD, "activity_name5", "calling_pkg_name5",
-            true /*is_instant_app*/, 105 /*activity_start_msec*/,
-            bucketStartTimeNs + 2 * bucketSizeNs));
-        events.push_back(CreateAppStartOccurredEvent(
-            appUid1, "app1", AppStartOccurred::HOT, "activity_name6", "calling_pkg_name6",
-            false /*is_instant_app*/, 106 /*activity_start_msec*/,
-            bucketStartTimeNs + 2 * bucketSizeNs + 10));
-
-        events.push_back(CreateMoveToBackgroundEvent(
-                appUid2, bucketStartTimeNs + bucketSizeNs + 10));
-        events.push_back(CreateAppStartOccurredEvent(
-            appUid2, "app2", AppStartOccurred::COLD, "activity_name7", "calling_pkg_name7",
-            true /*is_instant_app*/, 201 /*activity_start_msec*/,
-            bucketStartTimeNs + 2 * bucketSizeNs + 10));
-
-        sortLogEventsByTimestamp(&events);
-
-        for (const auto& event : events) {
-            processor->OnLogEvent(event.get());
-        }
-        ConfigMetricsReportList reports;
-        vector<uint8_t> buffer;
-        processor->onDumpReport(cfgKey, bucketStartTimeNs + 3 * bucketSizeNs, false, true,
-                                ADB_DUMP, FAST, &buffer);
-        EXPECT_TRUE(buffer.size() > 0);
-        EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-        backfillDimensionPath(&reports);
-        backfillStringInReport(&reports);
-        backfillStartEndTimestamp(&reports);
-        EXPECT_EQ(1, reports.reports_size());
-        EXPECT_EQ(1, reports.reports(0).metrics_size());
-        StatsLogReport::GaugeMetricDataWrapper gaugeMetrics;
-        sortMetricDataByDimensionsValue(
-                reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics);
-        EXPECT_EQ(2, gaugeMetrics.data_size());
-
-        auto data = gaugeMetrics.data(0);
-        EXPECT_EQ(android::util::APP_START_OCCURRED, data.dimensions_in_what().field());
-        EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-        EXPECT_EQ(1 /* uid field */,
-                  data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-        EXPECT_EQ(appUid1, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-        EXPECT_EQ(3, data.bucket_info_size());
-        if (sampling_type == GaugeMetric::FIRST_N_SAMPLES) {
-            EXPECT_EQ(2, data.bucket_info(0).atom_size());
-            EXPECT_EQ(2, data.bucket_info(0).elapsed_timestamp_nanos_size());
-            EXPECT_EQ(0, data.bucket_info(0).wall_clock_timestamp_nanos_size());
-            EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-            EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
-                      data.bucket_info(0).end_bucket_elapsed_nanos());
-            EXPECT_EQ(AppStartOccurred::HOT,
-                      data.bucket_info(0).atom(0).app_start_occurred().type());
-            EXPECT_EQ("activity_name2",
-                      data.bucket_info(0).atom(0).app_start_occurred().activity_name());
-            EXPECT_EQ(102L,
-                      data.bucket_info(0).atom(0).app_start_occurred().activity_start_millis());
-            EXPECT_EQ(AppStartOccurred::COLD,
-                      data.bucket_info(0).atom(1).app_start_occurred().type());
-            EXPECT_EQ("activity_name3",
-                      data.bucket_info(0).atom(1).app_start_occurred().activity_name());
-            EXPECT_EQ(103L,
-                      data.bucket_info(0).atom(1).app_start_occurred().activity_start_millis());
-
-            EXPECT_EQ(1, data.bucket_info(1).atom_size());
-            EXPECT_EQ(1, data.bucket_info(1).elapsed_timestamp_nanos_size());
-            EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
-                      data.bucket_info(1).start_bucket_elapsed_nanos());
-            EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-                      data.bucket_info(1).end_bucket_elapsed_nanos());
-            EXPECT_EQ(AppStartOccurred::WARM,
-                      data.bucket_info(1).atom(0).app_start_occurred().type());
-            EXPECT_EQ("activity_name4",
-                      data.bucket_info(1).atom(0).app_start_occurred().activity_name());
-            EXPECT_EQ(104L,
-                      data.bucket_info(1).atom(0).app_start_occurred().activity_start_millis());
-
-            EXPECT_EQ(2, data.bucket_info(2).atom_size());
-            EXPECT_EQ(2, data.bucket_info(2).elapsed_timestamp_nanos_size());
-            EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-                      data.bucket_info(2).start_bucket_elapsed_nanos());
-            EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
-                      data.bucket_info(2).end_bucket_elapsed_nanos());
-            EXPECT_EQ(AppStartOccurred::COLD,
-                      data.bucket_info(2).atom(0).app_start_occurred().type());
-            EXPECT_EQ("activity_name5",
-                      data.bucket_info(2).atom(0).app_start_occurred().activity_name());
-            EXPECT_EQ(105L,
-                      data.bucket_info(2).atom(0).app_start_occurred().activity_start_millis());
-            EXPECT_EQ(AppStartOccurred::HOT,
-                      data.bucket_info(2).atom(1).app_start_occurred().type());
-            EXPECT_EQ("activity_name6",
-                      data.bucket_info(2).atom(1).app_start_occurred().activity_name());
-            EXPECT_EQ(106L,
-                      data.bucket_info(2).atom(1).app_start_occurred().activity_start_millis());
-        } else {
-            EXPECT_EQ(1, data.bucket_info(0).atom_size());
-            EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size());
-            EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-            EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
-                      data.bucket_info(0).end_bucket_elapsed_nanos());
-            EXPECT_EQ(AppStartOccurred::HOT,
-                      data.bucket_info(0).atom(0).app_start_occurred().type());
-            EXPECT_EQ("activity_name2",
-                      data.bucket_info(0).atom(0).app_start_occurred().activity_name());
-            EXPECT_EQ(102L,
-                      data.bucket_info(0).atom(0).app_start_occurred().activity_start_millis());
-
-            EXPECT_EQ(1, data.bucket_info(1).atom_size());
-            EXPECT_EQ(1, data.bucket_info(1).elapsed_timestamp_nanos_size());
-            EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
-                      data.bucket_info(1).start_bucket_elapsed_nanos());
-            EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-                      data.bucket_info(1).end_bucket_elapsed_nanos());
-            EXPECT_EQ(AppStartOccurred::WARM,
-                      data.bucket_info(1).atom(0).app_start_occurred().type());
-            EXPECT_EQ("activity_name4",
-                      data.bucket_info(1).atom(0).app_start_occurred().activity_name());
-            EXPECT_EQ(104L,
-                      data.bucket_info(1).atom(0).app_start_occurred().activity_start_millis());
-
-            EXPECT_EQ(1, data.bucket_info(2).atom_size());
-            EXPECT_EQ(1, data.bucket_info(2).elapsed_timestamp_nanos_size());
-            EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-                      data.bucket_info(2).start_bucket_elapsed_nanos());
-            EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
-                      data.bucket_info(2).end_bucket_elapsed_nanos());
-            EXPECT_EQ(AppStartOccurred::COLD,
-                      data.bucket_info(2).atom(0).app_start_occurred().type());
-            EXPECT_EQ("activity_name5",
-                      data.bucket_info(2).atom(0).app_start_occurred().activity_name());
-            EXPECT_EQ(105L,
-                      data.bucket_info(2).atom(0).app_start_occurred().activity_start_millis());
-        }
-
-        data = gaugeMetrics.data(1);
-
-        EXPECT_EQ(data.dimensions_in_what().field(), android::util::APP_START_OCCURRED);
-        EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value_size(), 1);
-        EXPECT_EQ(1 /* uid field */,
-                  data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-        EXPECT_EQ(appUid2, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-        EXPECT_EQ(1, data.bucket_info_size());
-        EXPECT_EQ(1, data.bucket_info(0).atom_size());
-        EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size());
-        EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-                  data.bucket_info(0).start_bucket_elapsed_nanos());
-        EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
-                  data.bucket_info(0).end_bucket_elapsed_nanos());
-        EXPECT_EQ(AppStartOccurred::COLD, data.bucket_info(0).atom(0).app_start_occurred().type());
-        EXPECT_EQ("activity_name7",
-                  data.bucket_info(0).atom(0).app_start_occurred().activity_name());
-        EXPECT_EQ(201L, data.bucket_info(0).atom(0).app_start_occurred().activity_start_millis());
-    }
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) {
+//    for (const auto& sampling_type :
+//            { GaugeMetric::FIRST_N_SAMPLES, GaugeMetric:: RANDOM_ONE_SAMPLE }) {
+//        auto config = CreateStatsdConfigForPushedEvent(sampling_type);
+//        int64_t bucketStartTimeNs = 10000000000;
+//        int64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000;
+//
+//        ConfigKey cfgKey;
+//        auto processor = CreateStatsLogProcessor(
+//                bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//        EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//        EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//
+//        int appUid1 = 123;
+//        int appUid2 = 456;
+//        std::vector<std::unique_ptr<LogEvent>> events;
+//        events.push_back(CreateMoveToBackgroundEvent(appUid1, bucketStartTimeNs + 15));
+//        events.push_back(CreateMoveToForegroundEvent(
+//                appUid1, bucketStartTimeNs + bucketSizeNs + 250));
+//        events.push_back(CreateMoveToBackgroundEvent(
+//                appUid1, bucketStartTimeNs + bucketSizeNs + 350));
+//        events.push_back(CreateMoveToForegroundEvent(
+//            appUid1, bucketStartTimeNs + 2 * bucketSizeNs + 100));
+//
+//
+//        events.push_back(CreateAppStartOccurredEvent(
+//            appUid1, "app1", AppStartOccurred::WARM, "activity_name1", "calling_pkg_name1",
+//            true /*is_instant_app*/, 101 /*activity_start_msec*/, bucketStartTimeNs + 10));
+//        events.push_back(CreateAppStartOccurredEvent(
+//            appUid1, "app1", AppStartOccurred::HOT, "activity_name2", "calling_pkg_name2",
+//            true /*is_instant_app*/, 102 /*activity_start_msec*/, bucketStartTimeNs + 20));
+//        events.push_back(CreateAppStartOccurredEvent(
+//            appUid1, "app1", AppStartOccurred::COLD, "activity_name3", "calling_pkg_name3",
+//            true /*is_instant_app*/, 103 /*activity_start_msec*/, bucketStartTimeNs + 30));
+//        events.push_back(CreateAppStartOccurredEvent(
+//            appUid1, "app1", AppStartOccurred::WARM, "activity_name4", "calling_pkg_name4",
+//            true /*is_instant_app*/, 104 /*activity_start_msec*/,
+//            bucketStartTimeNs + bucketSizeNs + 30));
+//        events.push_back(CreateAppStartOccurredEvent(
+//            appUid1, "app1", AppStartOccurred::COLD, "activity_name5", "calling_pkg_name5",
+//            true /*is_instant_app*/, 105 /*activity_start_msec*/,
+//            bucketStartTimeNs + 2 * bucketSizeNs));
+//        events.push_back(CreateAppStartOccurredEvent(
+//            appUid1, "app1", AppStartOccurred::HOT, "activity_name6", "calling_pkg_name6",
+//            false /*is_instant_app*/, 106 /*activity_start_msec*/,
+//            bucketStartTimeNs + 2 * bucketSizeNs + 10));
+//
+//        events.push_back(CreateMoveToBackgroundEvent(
+//                appUid2, bucketStartTimeNs + bucketSizeNs + 10));
+//        events.push_back(CreateAppStartOccurredEvent(
+//            appUid2, "app2", AppStartOccurred::COLD, "activity_name7", "calling_pkg_name7",
+//            true /*is_instant_app*/, 201 /*activity_start_msec*/,
+//            bucketStartTimeNs + 2 * bucketSizeNs + 10));
+//
+//        sortLogEventsByTimestamp(&events);
+//
+//        for (const auto& event : events) {
+//            processor->OnLogEvent(event.get());
+//        }
+//        ConfigMetricsReportList reports;
+//        vector<uint8_t> buffer;
+//        processor->onDumpReport(cfgKey, bucketStartTimeNs + 3 * bucketSizeNs, false, true,
+//                                ADB_DUMP, FAST, &buffer);
+//        EXPECT_TRUE(buffer.size() > 0);
+//        EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//        backfillDimensionPath(&reports);
+//        backfillStringInReport(&reports);
+//        backfillStartEndTimestamp(&reports);
+//        EXPECT_EQ(1, reports.reports_size());
+//        EXPECT_EQ(1, reports.reports(0).metrics_size());
+//        StatsLogReport::GaugeMetricDataWrapper gaugeMetrics;
+//        sortMetricDataByDimensionsValue(
+//                reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics);
+//        EXPECT_EQ(2, gaugeMetrics.data_size());
+//
+//        auto data = gaugeMetrics.data(0);
+//        EXPECT_EQ(android::util::APP_START_OCCURRED, data.dimensions_in_what().field());
+//        EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//        EXPECT_EQ(1 /* uid field */,
+//                  data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//        EXPECT_EQ(appUid1, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//        EXPECT_EQ(3, data.bucket_info_size());
+//        if (sampling_type == GaugeMetric::FIRST_N_SAMPLES) {
+//            EXPECT_EQ(2, data.bucket_info(0).atom_size());
+//            EXPECT_EQ(2, data.bucket_info(0).elapsed_timestamp_nanos_size());
+//            EXPECT_EQ(0, data.bucket_info(0).wall_clock_timestamp_nanos_size());
+//            EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//            EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
+//                      data.bucket_info(0).end_bucket_elapsed_nanos());
+//            EXPECT_EQ(AppStartOccurred::HOT,
+//                      data.bucket_info(0).atom(0).app_start_occurred().type());
+//            EXPECT_EQ("activity_name2",
+//                      data.bucket_info(0).atom(0).app_start_occurred().activity_name());
+//            EXPECT_EQ(102L,
+//                      data.bucket_info(0).atom(0).app_start_occurred().activity_start_millis());
+//            EXPECT_EQ(AppStartOccurred::COLD,
+//                      data.bucket_info(0).atom(1).app_start_occurred().type());
+//            EXPECT_EQ("activity_name3",
+//                      data.bucket_info(0).atom(1).app_start_occurred().activity_name());
+//            EXPECT_EQ(103L,
+//                      data.bucket_info(0).atom(1).app_start_occurred().activity_start_millis());
+//
+//            EXPECT_EQ(1, data.bucket_info(1).atom_size());
+//            EXPECT_EQ(1, data.bucket_info(1).elapsed_timestamp_nanos_size());
+//            EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
+//                      data.bucket_info(1).start_bucket_elapsed_nanos());
+//            EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//                      data.bucket_info(1).end_bucket_elapsed_nanos());
+//            EXPECT_EQ(AppStartOccurred::WARM,
+//                      data.bucket_info(1).atom(0).app_start_occurred().type());
+//            EXPECT_EQ("activity_name4",
+//                      data.bucket_info(1).atom(0).app_start_occurred().activity_name());
+//            EXPECT_EQ(104L,
+//                      data.bucket_info(1).atom(0).app_start_occurred().activity_start_millis());
+//
+//            EXPECT_EQ(2, data.bucket_info(2).atom_size());
+//            EXPECT_EQ(2, data.bucket_info(2).elapsed_timestamp_nanos_size());
+//            EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//                      data.bucket_info(2).start_bucket_elapsed_nanos());
+//            EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
+//                      data.bucket_info(2).end_bucket_elapsed_nanos());
+//            EXPECT_EQ(AppStartOccurred::COLD,
+//                      data.bucket_info(2).atom(0).app_start_occurred().type());
+//            EXPECT_EQ("activity_name5",
+//                      data.bucket_info(2).atom(0).app_start_occurred().activity_name());
+//            EXPECT_EQ(105L,
+//                      data.bucket_info(2).atom(0).app_start_occurred().activity_start_millis());
+//            EXPECT_EQ(AppStartOccurred::HOT,
+//                      data.bucket_info(2).atom(1).app_start_occurred().type());
+//            EXPECT_EQ("activity_name6",
+//                      data.bucket_info(2).atom(1).app_start_occurred().activity_name());
+//            EXPECT_EQ(106L,
+//                      data.bucket_info(2).atom(1).app_start_occurred().activity_start_millis());
+//        } else {
+//            EXPECT_EQ(1, data.bucket_info(0).atom_size());
+//            EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size());
+//            EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//            EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
+//                      data.bucket_info(0).end_bucket_elapsed_nanos());
+//            EXPECT_EQ(AppStartOccurred::HOT,
+//                      data.bucket_info(0).atom(0).app_start_occurred().type());
+//            EXPECT_EQ("activity_name2",
+//                      data.bucket_info(0).atom(0).app_start_occurred().activity_name());
+//            EXPECT_EQ(102L,
+//                      data.bucket_info(0).atom(0).app_start_occurred().activity_start_millis());
+//
+//            EXPECT_EQ(1, data.bucket_info(1).atom_size());
+//            EXPECT_EQ(1, data.bucket_info(1).elapsed_timestamp_nanos_size());
+//            EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
+//                      data.bucket_info(1).start_bucket_elapsed_nanos());
+//            EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//                      data.bucket_info(1).end_bucket_elapsed_nanos());
+//            EXPECT_EQ(AppStartOccurred::WARM,
+//                      data.bucket_info(1).atom(0).app_start_occurred().type());
+//            EXPECT_EQ("activity_name4",
+//                      data.bucket_info(1).atom(0).app_start_occurred().activity_name());
+//            EXPECT_EQ(104L,
+//                      data.bucket_info(1).atom(0).app_start_occurred().activity_start_millis());
+//
+//            EXPECT_EQ(1, data.bucket_info(2).atom_size());
+//            EXPECT_EQ(1, data.bucket_info(2).elapsed_timestamp_nanos_size());
+//            EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//                      data.bucket_info(2).start_bucket_elapsed_nanos());
+//            EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
+//                      data.bucket_info(2).end_bucket_elapsed_nanos());
+//            EXPECT_EQ(AppStartOccurred::COLD,
+//                      data.bucket_info(2).atom(0).app_start_occurred().type());
+//            EXPECT_EQ("activity_name5",
+//                      data.bucket_info(2).atom(0).app_start_occurred().activity_name());
+//            EXPECT_EQ(105L,
+//                      data.bucket_info(2).atom(0).app_start_occurred().activity_start_millis());
+//        }
+//
+//        data = gaugeMetrics.data(1);
+//
+//        EXPECT_EQ(data.dimensions_in_what().field(), android::util::APP_START_OCCURRED);
+//        EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value_size(), 1);
+//        EXPECT_EQ(1 /* uid field */,
+//                  data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//        EXPECT_EQ(appUid2, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//        EXPECT_EQ(1, data.bucket_info_size());
+//        EXPECT_EQ(1, data.bucket_info(0).atom_size());
+//        EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size());
+//        EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//                  data.bucket_info(0).start_bucket_elapsed_nanos());
+//        EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
+//                  data.bucket_info(0).end_bucket_elapsed_nanos());
+//        EXPECT_EQ(AppStartOccurred::COLD, data.bucket_info(0).atom(0).app_start_occurred().type());
+//        EXPECT_EQ("activity_name7",
+//                  data.bucket_info(0).atom(0).app_start_occurred().activity_name());
+//        EXPECT_EQ(201L, data.bucket_info(0).atom(0).app_start_occurred().activity_start_millis());
+//    }
+//}
 
 #else
 GTEST_LOG_(INFO) << "This test does nothing.\n";
diff --git a/cmds/statsd/tests/e2e/MetricActivation_e2e_test.cpp b/cmds/statsd/tests/e2e/MetricActivation_e2e_test.cpp
index b6a6492..f3f7df77 100644
--- a/cmds/statsd/tests/e2e/MetricActivation_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/MetricActivation_e2e_test.cpp
@@ -233,1608 +233,1609 @@
 
 }  // namespace
 
-TEST(MetricActivationE2eTest, TestCountMetric) {
-    auto config = CreateStatsdConfig();
-
-    int64_t bucketStartTimeNs = NS_PER_SEC * 10; // 10 secs
-    int64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000LL * 1000LL;
-
-    int uid = 12345;
-    int64_t cfgId = 98765;
-    ConfigKey cfgKey(uid, cfgId);
-
-    sp<UidMap> m = new UidMap();
-    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
-    sp<AlarmMonitor> anomalyAlarmMonitor;
-    sp<AlarmMonitor> subscriberAlarmMonitor;
-    vector<int64_t> activeConfigsBroadcast;
-
-    long timeBase1 = 1;
-    int broadcastCount = 0;
-    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
-            bucketStartTimeNs, [](const ConfigKey& key) { return true; },
-            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
-                    const vector<int64_t>& activeConfigs) {
-                broadcastCount++;
-                EXPECT_EQ(broadcastUid, uid);
-                activeConfigsBroadcast.clear();
-                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
-                        activeConfigs.begin(), activeConfigs.end());
-                return true;
-            });
-
-    processor.OnConfigUpdated(bucketStartTimeNs, cfgKey, config);
-
-    EXPECT_EQ(processor.mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor.mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    auto& eventActivationMap = metricProducer->mEventActivationMap;
-
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    // Two activations: one is triggered by battery saver mode (tracker index 0), the other is
-    // triggered by screen on event (tracker index 2).
-    EXPECT_EQ(eventActivationMap.size(), 2u);
-    EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
-    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-
-    std::unique_ptr<LogEvent> event;
-
-    event = CreateAppCrashEvent(111, bucketStartTimeNs + 5);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 5);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 0);
-
-    // Activated by battery save mode.
-    event = CreateBatterySaverOnEvent(bucketStartTimeNs + 10);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 10);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 1);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-
-    // First processed event.
-    event = CreateAppCrashEvent(222, bucketStartTimeNs + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 15);
-
-    // Activated by screen on event.
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + 20);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 20);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-
-    // 2nd processed event.
-    // The activation by screen_on event expires, but the one by battery save mode is still active.
-    event = CreateAppCrashEvent(333, bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    // No new broadcast since the config should still be active.
-    EXPECT_EQ(broadcastCount, 1);
-
-    // 3rd processed event.
-    event = CreateAppCrashEvent(444, bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
-
-    // All activations expired.
-    event = CreateAppCrashEvent(555, bucketStartTimeNs + NS_PER_SEC * 60 * 8);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 8);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    // New broadcast since the config is no longer active.
-    EXPECT_EQ(broadcastCount, 2);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-
-    // Re-activate metric via screen on.
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 3);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-
-    // 4th processed event.
-    event = CreateAppCrashEvent(666, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor.onDumpReport(cfgKey, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_EQ(4, reports.reports(0).metrics(0).count_metrics().data_size());
-
-    StatsLogReport::CountMetricDataWrapper countMetrics;
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(0).count_metrics(), &countMetrics);
-    EXPECT_EQ(4, countMetrics.data_size());
-
-    auto data = countMetrics.data(0);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(222, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(1);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(333, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(2);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(444, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    // Partial bucket as metric is deactivated.
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 8,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(3);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(666, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-}
-
-TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
-    auto config = CreateStatsdConfigWithOneDeactivation();
-
-    int64_t bucketStartTimeNs = NS_PER_SEC * 10; // 10 secs
-    int64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000LL * 1000LL;
-
-    int uid = 12345;
-    int64_t cfgId = 98765;
-    ConfigKey cfgKey(uid, cfgId);
-
-    sp<UidMap> m = new UidMap();
-    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
-    sp<AlarmMonitor> anomalyAlarmMonitor;
-    sp<AlarmMonitor> subscriberAlarmMonitor;
-    vector<int64_t> activeConfigsBroadcast;
-
-    long timeBase1 = 1;
-    int broadcastCount = 0;
-    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
-            bucketStartTimeNs, [](const ConfigKey& key) { return true; },
-            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
-                    const vector<int64_t>& activeConfigs) {
-                broadcastCount++;
-                EXPECT_EQ(broadcastUid, uid);
-                activeConfigsBroadcast.clear();
-                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
-                        activeConfigs.begin(), activeConfigs.end());
-                return true;
-            });
-
-    processor.OnConfigUpdated(bucketStartTimeNs, cfgKey, config);
-
-    EXPECT_EQ(processor.mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor.mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    auto& eventActivationMap = metricProducer->mEventActivationMap;
-    auto& eventDeactivationMap = metricProducer->mEventDeactivationMap;
-
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    // Two activations: one is triggered by battery saver mode (tracker index 0), the other is
-    // triggered by screen on event (tracker index 2).
-    EXPECT_EQ(eventActivationMap.size(), 2u);
-    EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
-    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap.size(), 1u);
-    EXPECT_TRUE(eventDeactivationMap.find(3) != eventDeactivationMap.end());
-    EXPECT_EQ(eventDeactivationMap[3].size(), 1u);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-
-    std::unique_ptr<LogEvent> event;
-
-    event = CreateAppCrashEvent(111, bucketStartTimeNs + 5);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 5);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 0);
-
-    // Activated by battery save mode.
-    event = CreateBatterySaverOnEvent(bucketStartTimeNs + 10);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 10);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 1);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-
-    // First processed event.
-    event = CreateAppCrashEvent(222, bucketStartTimeNs + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 15);
-
-    // Activated by screen on event.
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + 20);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 20);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-
-    // 2nd processed event.
-    // The activation by screen_on event expires, but the one by battery save mode is still active.
-    event = CreateAppCrashEvent(333, bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
-    processor.OnLogEvent(event.get(),bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    // No new broadcast since the config should still be active.
-    EXPECT_EQ(broadcastCount, 1);
-
-    // 3rd processed event.
-    event = CreateAppCrashEvent(444, bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
-
-    // All activations expired.
-    event = CreateAppCrashEvent(555, bucketStartTimeNs + NS_PER_SEC * 60 * 8);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 8);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    // New broadcast since the config is no longer active.
-    EXPECT_EQ(broadcastCount, 2);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-
-    // Re-activate metric via screen on.
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 3);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-
-    // 4th processed event.
-    event = CreateAppCrashEvent(666, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
-
-    // Re-enable battery saver mode activation.
-    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 3);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-
-    // 5th processed event.
-    event = CreateAppCrashEvent(777, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
-
-    // Cancel battery saver mode activation.
-    event = CreateScreenBrightnessChangedEvent(64, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 60);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 60);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 3);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-
-    // Screen-on activation expired.
-    event = CreateAppCrashEvent(888, bucketStartTimeNs + NS_PER_SEC * 60 * 13);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 13);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    // New broadcast since the config is no longer active.
-    EXPECT_EQ(broadcastCount, 4);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-
-    event = CreateAppCrashEvent(999, bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
-
-    // Re-enable battery saver mode activation.
-    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 5);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-
-    // Cancel battery saver mode activation.
-    event = CreateScreenBrightnessChangedEvent(140, bucketStartTimeNs + NS_PER_SEC * 60 * 16);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 16);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 6);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor.onDumpReport(cfgKey, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_EQ(5, reports.reports(0).metrics(0).count_metrics().data_size());
-
-    StatsLogReport::CountMetricDataWrapper countMetrics;
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(0).count_metrics(), &countMetrics);
-    EXPECT_EQ(5, countMetrics.data_size());
-
-    auto data = countMetrics.data(0);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(222, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(1);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(333, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(2);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(444, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    // Partial bucket as metric is deactivated.
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 8,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(3);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(666, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 13,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(4);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(777, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 13,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-}
-
-TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
-    auto config = CreateStatsdConfigWithTwoDeactivations();
-
-    int64_t bucketStartTimeNs = NS_PER_SEC * 10; // 10 secs
-    int64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000LL * 1000LL;
-
-    int uid = 12345;
-    int64_t cfgId = 98765;
-    ConfigKey cfgKey(uid, cfgId);
-
-    sp<UidMap> m = new UidMap();
-    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
-    sp<AlarmMonitor> anomalyAlarmMonitor;
-    sp<AlarmMonitor> subscriberAlarmMonitor;
-    vector<int64_t> activeConfigsBroadcast;
-
-    long timeBase1 = 1;
-    int broadcastCount = 0;
-    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
-            bucketStartTimeNs, [](const ConfigKey& key) { return true; },
-            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
-                    const vector<int64_t>& activeConfigs) {
-                broadcastCount++;
-                EXPECT_EQ(broadcastUid, uid);
-                activeConfigsBroadcast.clear();
-                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
-                        activeConfigs.begin(), activeConfigs.end());
-                return true;
-            });
-
-    processor.OnConfigUpdated(bucketStartTimeNs, cfgKey, config);
-
-    EXPECT_EQ(processor.mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor.mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    auto& eventActivationMap = metricProducer->mEventActivationMap;
-    auto& eventDeactivationMap = metricProducer->mEventDeactivationMap;
-
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    // Two activations: one is triggered by battery saver mode (tracker index 0), the other is
-    // triggered by screen on event (tracker index 2).
-    EXPECT_EQ(eventActivationMap.size(), 2u);
-    EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
-    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap.size(), 2u);
-    EXPECT_TRUE(eventDeactivationMap.find(3) != eventDeactivationMap.end());
-    EXPECT_TRUE(eventDeactivationMap.find(4) != eventDeactivationMap.end());
-    EXPECT_EQ(eventDeactivationMap[3].size(), 1u);
-    EXPECT_EQ(eventDeactivationMap[4].size(), 1u);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-
-    std::unique_ptr<LogEvent> event;
-
-    event = CreateAppCrashEvent(111, bucketStartTimeNs + 5);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 5);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 0);
-
-    // Activated by battery save mode.
-    event = CreateBatterySaverOnEvent(bucketStartTimeNs + 10);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 10);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 1);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-
-    // First processed event.
-    event = CreateAppCrashEvent(222, bucketStartTimeNs + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 15);
-
-    // Activated by screen on event.
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + 20);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 20);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-
-    // 2nd processed event.
-    // The activation by screen_on event expires, but the one by battery save mode is still active.
-    event = CreateAppCrashEvent(333, bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-    // No new broadcast since the config should still be active.
-    EXPECT_EQ(broadcastCount, 1);
-
-    // 3rd processed event.
-    event = CreateAppCrashEvent(444, bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
-
-    // All activations expired.
-    event = CreateAppCrashEvent(555, bucketStartTimeNs + NS_PER_SEC * 60 * 8);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 8);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    // New broadcast since the config is no longer active.
-    EXPECT_EQ(broadcastCount, 2);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-
-    // Re-activate metric via screen on.
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 3);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-
-    // 4th processed event.
-    event = CreateAppCrashEvent(666, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
-
-    // Re-enable battery saver mode activation.
-    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 3);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-
-    // 5th processed event.
-    event = CreateAppCrashEvent(777, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
-
-    // Cancel battery saver mode and screen on activation.
-    event = CreateScreenBrightnessChangedEvent(64, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 60);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 60);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    // New broadcast since the config is no longer active.
-    EXPECT_EQ(broadcastCount, 4);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-
-    // Screen-on activation expired.
-    event = CreateAppCrashEvent(888, bucketStartTimeNs + NS_PER_SEC * 60 * 13);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 13);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 4);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-
-    event = CreateAppCrashEvent(999, bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
-
-    // Re-enable battery saver mode activation.
-    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 5);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-
-    // Cancel battery saver mode and screen on activation.
-    event = CreateScreenBrightnessChangedEvent(140, bucketStartTimeNs + NS_PER_SEC * 60 * 16);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 16);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 6);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor.onDumpReport(cfgKey, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_EQ(5, reports.reports(0).metrics(0).count_metrics().data_size());
-
-    StatsLogReport::CountMetricDataWrapper countMetrics;
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(0).count_metrics(), &countMetrics);
-    EXPECT_EQ(5, countMetrics.data_size());
-
-    auto data = countMetrics.data(0);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(222, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(1);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(333, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(2);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(444, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    // Partial bucket as metric is deactivated.
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 8,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(3);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(666, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 11,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(4);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(777, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 11,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-}
-
-TEST(MetricActivationE2eTest, TestCountMetricWithSameDeactivation) {
-    auto config = CreateStatsdConfigWithSameDeactivations();
-
-    int64_t bucketStartTimeNs = NS_PER_SEC * 10; // 10 secs
-    int64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000LL * 1000LL;
-
-    int uid = 12345;
-    int64_t cfgId = 98765;
-    ConfigKey cfgKey(uid, cfgId);
-
-    sp<UidMap> m = new UidMap();
-    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
-    sp<AlarmMonitor> anomalyAlarmMonitor;
-    sp<AlarmMonitor> subscriberAlarmMonitor;
-    vector<int64_t> activeConfigsBroadcast;
-
-    long timeBase1 = 1;
-    int broadcastCount = 0;
-    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
-            bucketStartTimeNs, [](const ConfigKey& key) { return true; },
-            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
-                    const vector<int64_t>& activeConfigs) {
-                broadcastCount++;
-                EXPECT_EQ(broadcastUid, uid);
-                activeConfigsBroadcast.clear();
-                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
-                        activeConfigs.begin(), activeConfigs.end());
-                return true;
-            });
-
-    processor.OnConfigUpdated(bucketStartTimeNs, cfgKey, config);
-
-    EXPECT_EQ(processor.mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor.mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    auto& eventActivationMap = metricProducer->mEventActivationMap;
-    auto& eventDeactivationMap = metricProducer->mEventDeactivationMap;
-
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    // Two activations: one is triggered by battery saver mode (tracker index 0), the other is
-    // triggered by screen on event (tracker index 2).
-    EXPECT_EQ(eventActivationMap.size(), 2u);
-    EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
-    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap.size(), 1u);
-    EXPECT_TRUE(eventDeactivationMap.find(3) != eventDeactivationMap.end());
-    EXPECT_EQ(eventDeactivationMap[3].size(), 2u);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[3][1], eventActivationMap[2]);
-    EXPECT_EQ(broadcastCount, 0);
-
-    std::unique_ptr<LogEvent> event;
-
-    // Event that should be ignored.
-    event = CreateAppCrashEvent(111, bucketStartTimeNs + 1);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 1);
-
-    // Activate metric via screen on for 2 minutes.
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, bucketStartTimeNs + 10);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 10);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 1);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 10);
-
-    // 1st processed event.
-    event = CreateAppCrashEvent(222, bucketStartTimeNs + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 15);
-
-    // Enable battery saver mode activation for 5 minutes.
-    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 + 10);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 + 10);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 1);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 + 10);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 10);
-
-    // 2nd processed event.
-    event = CreateAppCrashEvent(333, bucketStartTimeNs + NS_PER_SEC * 60 + 40);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 + 40);
-
-    // Cancel battery saver mode and screen on activation.
-    int64_t firstDeactivation = bucketStartTimeNs + NS_PER_SEC * 61;
-    event = CreateScreenBrightnessChangedEvent(64, firstDeactivation);
-    processor.OnLogEvent(event.get(), firstDeactivation);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    // New broadcast since the config is no longer active.
-    EXPECT_EQ(broadcastCount, 2);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-
-    // Should be ignored
-    event = CreateAppCrashEvent(444, bucketStartTimeNs + NS_PER_SEC * 61 + 80);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 61 + 80);
-
-    // Re-enable battery saver mode activation.
-    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 15);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 3);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 15);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-
-    // 3rd processed event.
-    event = CreateAppCrashEvent(555, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 80);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 80);
-
-    // Cancel battery saver mode activation.
-    int64_t secondDeactivation = bucketStartTimeNs + NS_PER_SEC * 60 * 13;
-    event = CreateScreenBrightnessChangedEvent(140, secondDeactivation);
-    processor.OnLogEvent(event.get(), secondDeactivation);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(broadcastCount, 4);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-
-    // Should be ignored.
-    event = CreateAppCrashEvent(666, bucketStartTimeNs + NS_PER_SEC * 60 * 13 + 80);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 13 + 80);
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor.onDumpReport(cfgKey, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_EQ(3, reports.reports(0).metrics(0).count_metrics().data_size());
-
-    StatsLogReport::CountMetricDataWrapper countMetrics;
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(0).count_metrics(), &countMetrics);
-    EXPECT_EQ(3, countMetrics.data_size());
-
-    auto data = countMetrics.data(0);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(222, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(firstDeactivation, data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(1);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(333, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(firstDeactivation, data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(2);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(555, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    // Partial bucket as metric is deactivated.
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(secondDeactivation, data.bucket_info(0).end_bucket_elapsed_nanos());
-}
-
-TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
-    auto config = CreateStatsdConfigWithTwoMetricsTwoDeactivations();
-
-    int64_t bucketStartTimeNs = NS_PER_SEC * 10; // 10 secs
-    int64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000LL * 1000LL;
-
-    int uid = 12345;
-    int64_t cfgId = 98765;
-    ConfigKey cfgKey(uid, cfgId);
-
-    sp<UidMap> m = new UidMap();
-    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
-    sp<AlarmMonitor> anomalyAlarmMonitor;
-    sp<AlarmMonitor> subscriberAlarmMonitor;
-    vector<int64_t> activeConfigsBroadcast;
-
-    long timeBase1 = 1;
-    int broadcastCount = 0;
-    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
-            bucketStartTimeNs, [](const ConfigKey& key) { return true; },
-            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
-                    const vector<int64_t>& activeConfigs) {
-                broadcastCount++;
-                EXPECT_EQ(broadcastUid, uid);
-                activeConfigsBroadcast.clear();
-                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
-                        activeConfigs.begin(), activeConfigs.end());
-                return true;
-            });
-
-    processor.OnConfigUpdated(bucketStartTimeNs, cfgKey, config);
-
-    EXPECT_EQ(processor.mMetricsManagers.size(), 1u);
-    sp<MetricsManager> metricsManager = processor.mMetricsManagers.begin()->second;
-    EXPECT_TRUE(metricsManager->isConfigValid());
-    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 2);
-    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
-    auto& eventActivationMap = metricProducer->mEventActivationMap;
-    auto& eventDeactivationMap = metricProducer->mEventDeactivationMap;
-    sp<MetricProducer> metricProducer2 = metricsManager->mAllMetricProducers[1];
-    auto& eventActivationMap2 = metricProducer2->mEventActivationMap;
-    auto& eventDeactivationMap2 = metricProducer2->mEventDeactivationMap;
-
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_FALSE(metricProducer2->mIsActive);
-    // Two activations: one is triggered by battery saver mode (tracker index 0), the other is
-    // triggered by screen on event (tracker index 2).
-    EXPECT_EQ(eventActivationMap.size(), 2u);
-    EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
-    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap.size(), 2u);
-    EXPECT_TRUE(eventDeactivationMap.find(3) != eventDeactivationMap.end());
-    EXPECT_TRUE(eventDeactivationMap.find(4) != eventDeactivationMap.end());
-    EXPECT_EQ(eventDeactivationMap[3].size(), 1u);
-    EXPECT_EQ(eventDeactivationMap[4].size(), 1u);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-
-    EXPECT_EQ(eventActivationMap2.size(), 2u);
-    EXPECT_TRUE(eventActivationMap2.find(0) != eventActivationMap2.end());
-    EXPECT_TRUE(eventActivationMap2.find(2) != eventActivationMap2.end());
-    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[0]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[2]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap2.size(), 2u);
-    EXPECT_TRUE(eventDeactivationMap2.find(3) != eventDeactivationMap2.end());
-    EXPECT_TRUE(eventDeactivationMap2.find(4) != eventDeactivationMap2.end());
-    EXPECT_EQ(eventDeactivationMap[3].size(), 1u);
-    EXPECT_EQ(eventDeactivationMap[4].size(), 1u);
-    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
-    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
-
-    std::unique_ptr<LogEvent> event;
-
-    event = CreateAppCrashEvent(111, bucketStartTimeNs + 5);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 5);
-    event = CreateMoveToForegroundEvent(1111, bucketStartTimeNs + 5);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 5);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_FALSE(metricProducer2->mIsActive);
-    EXPECT_EQ(broadcastCount, 0);
-
-    // Activated by battery save mode.
-    event = CreateBatterySaverOnEvent(bucketStartTimeNs + 10);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 10);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_EQ(broadcastCount, 1);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-    EXPECT_TRUE(metricProducer2->mIsActive);
-    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[2]->start_ns, 0);
-    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
-    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
-
-    // First processed event.
-    event = CreateAppCrashEvent(222, bucketStartTimeNs + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 15);
-    event = CreateMoveToForegroundEvent(2222, bucketStartTimeNs + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 15);
-
-    // Activated by screen on event.
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + 20);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + 20);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-    EXPECT_TRUE(metricProducer2->mIsActive);
-    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
-    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
-
-    // 2nd processed event.
-    // The activation by screen_on event expires, but the one by battery save mode is still active.
-    event = CreateAppCrashEvent(333, bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
-    event = CreateMoveToForegroundEvent(3333, bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-    EXPECT_TRUE(metricProducer2->mIsActive);
-    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
-    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
-    // No new broadcast since the config should still be active.
-    EXPECT_EQ(broadcastCount, 1);
-
-    // 3rd processed event.
-    event = CreateAppCrashEvent(444, bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
-    event = CreateMoveToForegroundEvent(4444, bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
-
-    // All activations expired.
-    event = CreateAppCrashEvent(555, bucketStartTimeNs + NS_PER_SEC * 60 * 8);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 8);
-    event = CreateMoveToForegroundEvent(5555, bucketStartTimeNs + NS_PER_SEC * 60 * 8);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 8);
-    EXPECT_FALSE(metricsManager->isActive());
-    // New broadcast since the config is no longer active.
-    EXPECT_EQ(broadcastCount, 2);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-    EXPECT_FALSE(metricProducer2->mIsActive);
-    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + 20);
-    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
-    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
-
-    // Re-activate metric via screen on.
-    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_EQ(broadcastCount, 3);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-    EXPECT_TRUE(metricProducer2->mIsActive);
-    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
-    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
-    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
-
-    // 4th processed event.
-    event = CreateAppCrashEvent(666, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
-    event = CreateMoveToForegroundEvent(6666, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
-
-    // Re-enable battery saver mode activation.
-    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_EQ(broadcastCount, 3);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-    EXPECT_TRUE(metricProducer2->mIsActive);
-    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
-    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
-
-    // 5th processed event.
-    event = CreateAppCrashEvent(777, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
-    event = CreateMoveToForegroundEvent(7777, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
-
-    // Cancel battery saver mode and screen on activation.
-    event = CreateScreenBrightnessChangedEvent(64, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 60);
-    processor.OnLogEvent(event.get(),bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 60);
-    EXPECT_FALSE(metricsManager->isActive());
-    // New broadcast since the config is no longer active.
-    EXPECT_EQ(broadcastCount, 4);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-    EXPECT_FALSE(metricProducer2->mIsActive);
-    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
-    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
-
-    // Screen-on activation expired.
-    event = CreateAppCrashEvent(888, bucketStartTimeNs + NS_PER_SEC * 60 * 13);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 13);
-    event = CreateMoveToForegroundEvent(8888, bucketStartTimeNs + NS_PER_SEC * 60 * 13);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 13);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_EQ(broadcastCount, 4);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-    EXPECT_FALSE(metricProducer2->mIsActive);
-    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
-    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
-    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
-
-    event = CreateAppCrashEvent(999, bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
-    event = CreateMoveToForegroundEvent(9999, bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
-
-    // Re-enable battery saver mode activation.
-    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    EXPECT_TRUE(metricsManager->isActive());
-    EXPECT_EQ(broadcastCount, 5);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
-    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
-    EXPECT_TRUE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-    EXPECT_TRUE(metricProducer2->mIsActive);
-    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
-    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
-    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
-
-    // Cancel battery saver mode and screen on activation.
-    event = CreateScreenBrightnessChangedEvent(140, bucketStartTimeNs + NS_PER_SEC * 60 * 16);
-    processor.OnLogEvent(event.get(),bucketStartTimeNs + NS_PER_SEC * 60 * 16);
-    EXPECT_FALSE(metricsManager->isActive());
-    EXPECT_EQ(broadcastCount, 6);
-    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
-    EXPECT_FALSE(metricProducer->mIsActive);
-    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
-    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
-    EXPECT_FALSE(metricProducer2->mIsActive);
-    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
-    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
-    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
-    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
-    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
-    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
-    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor.onDumpReport(cfgKey, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(2, reports.reports(0).metrics_size());
-    EXPECT_EQ(5, reports.reports(0).metrics(0).count_metrics().data_size());
-    EXPECT_EQ(5, reports.reports(0).metrics(1).count_metrics().data_size());
-
-    StatsLogReport::CountMetricDataWrapper countMetrics;
-
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(0).count_metrics(), &countMetrics);
-    EXPECT_EQ(5, countMetrics.data_size());
-
-    auto data = countMetrics.data(0);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(222, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(1);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(333, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(2);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(444, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    // Partial bucket as metric is deactivated.
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 8,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(3);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(666, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 11,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(4);
-    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(777, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 11,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-
-   countMetrics.clear_data();
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(1).count_metrics(), &countMetrics);
-    EXPECT_EQ(5, countMetrics.data_size());
-
-    data = countMetrics.data(0);
-    EXPECT_EQ(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(2222, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(1);
-    EXPECT_EQ(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(3333, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(2);
-    EXPECT_EQ(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(4444, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    // Partial bucket as metric is deactivated.
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 8,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(3);
-    EXPECT_EQ(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(6666, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 11,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-
-    data = countMetrics.data(4);
-    EXPECT_EQ(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* uid field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_EQ(7777, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(1, data.bucket_info(0).count());
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 11,
-              data.bucket_info(0).end_bucket_elapsed_nanos());
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//TEST(MetricActivationE2eTest, TestCountMetric) {
+//    auto config = CreateStatsdConfig();
+//
+//    int64_t bucketStartTimeNs = NS_PER_SEC * 10; // 10 secs
+//    int64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000LL * 1000LL;
+//
+//    int uid = 12345;
+//    int64_t cfgId = 98765;
+//    ConfigKey cfgKey(uid, cfgId);
+//
+//    sp<UidMap> m = new UidMap();
+//    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
+//    sp<AlarmMonitor> anomalyAlarmMonitor;
+//    sp<AlarmMonitor> subscriberAlarmMonitor;
+//    vector<int64_t> activeConfigsBroadcast;
+//
+//    long timeBase1 = 1;
+//    int broadcastCount = 0;
+//    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
+//            bucketStartTimeNs, [](const ConfigKey& key) { return true; },
+//            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
+//                    const vector<int64_t>& activeConfigs) {
+//                broadcastCount++;
+//                EXPECT_EQ(broadcastUid, uid);
+//                activeConfigsBroadcast.clear();
+//                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
+//                        activeConfigs.begin(), activeConfigs.end());
+//                return true;
+//            });
+//
+//    processor.OnConfigUpdated(bucketStartTimeNs, cfgKey, config);
+//
+//    EXPECT_EQ(processor.mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor.mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    auto& eventActivationMap = metricProducer->mEventActivationMap;
+//
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    // Two activations: one is triggered by battery saver mode (tracker index 0), the other is
+//    // triggered by screen on event (tracker index 2).
+//    EXPECT_EQ(eventActivationMap.size(), 2u);
+//    EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
+//    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//
+//    std::unique_ptr<LogEvent> event;
+//
+//    event = CreateAppCrashEvent(111, bucketStartTimeNs + 5);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 5);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 0);
+//
+//    // Activated by battery save mode.
+//    event = CreateBatterySaverOnEvent(bucketStartTimeNs + 10);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 10);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 1);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//
+//    // First processed event.
+//    event = CreateAppCrashEvent(222, bucketStartTimeNs + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 15);
+//
+//    // Activated by screen on event.
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + 20);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 20);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//
+//    // 2nd processed event.
+//    // The activation by screen_on event expires, but the one by battery save mode is still active.
+//    event = CreateAppCrashEvent(333, bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    // No new broadcast since the config should still be active.
+//    EXPECT_EQ(broadcastCount, 1);
+//
+//    // 3rd processed event.
+//    event = CreateAppCrashEvent(444, bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
+//
+//    // All activations expired.
+//    event = CreateAppCrashEvent(555, bucketStartTimeNs + NS_PER_SEC * 60 * 8);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 8);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    // New broadcast since the config is no longer active.
+//    EXPECT_EQ(broadcastCount, 2);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//
+//    // Re-activate metric via screen on.
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 3);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//
+//    // 4th processed event.
+//    event = CreateAppCrashEvent(666, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor.onDumpReport(cfgKey, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_EQ(4, reports.reports(0).metrics(0).count_metrics().data_size());
+//
+//    StatsLogReport::CountMetricDataWrapper countMetrics;
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(0).count_metrics(), &countMetrics);
+//    EXPECT_EQ(4, countMetrics.data_size());
+//
+//    auto data = countMetrics.data(0);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(222, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(1);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(333, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(2);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(444, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    // Partial bucket as metric is deactivated.
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 8,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(3);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(666, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//}
+//
+//TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
+//    auto config = CreateStatsdConfigWithOneDeactivation();
+//
+//    int64_t bucketStartTimeNs = NS_PER_SEC * 10; // 10 secs
+//    int64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000LL * 1000LL;
+//
+//    int uid = 12345;
+//    int64_t cfgId = 98765;
+//    ConfigKey cfgKey(uid, cfgId);
+//
+//    sp<UidMap> m = new UidMap();
+//    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
+//    sp<AlarmMonitor> anomalyAlarmMonitor;
+//    sp<AlarmMonitor> subscriberAlarmMonitor;
+//    vector<int64_t> activeConfigsBroadcast;
+//
+//    long timeBase1 = 1;
+//    int broadcastCount = 0;
+//    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
+//            bucketStartTimeNs, [](const ConfigKey& key) { return true; },
+//            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
+//                    const vector<int64_t>& activeConfigs) {
+//                broadcastCount++;
+//                EXPECT_EQ(broadcastUid, uid);
+//                activeConfigsBroadcast.clear();
+//                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
+//                        activeConfigs.begin(), activeConfigs.end());
+//                return true;
+//            });
+//
+//    processor.OnConfigUpdated(bucketStartTimeNs, cfgKey, config);
+//
+//    EXPECT_EQ(processor.mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor.mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    auto& eventActivationMap = metricProducer->mEventActivationMap;
+//    auto& eventDeactivationMap = metricProducer->mEventDeactivationMap;
+//
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    // Two activations: one is triggered by battery saver mode (tracker index 0), the other is
+//    // triggered by screen on event (tracker index 2).
+//    EXPECT_EQ(eventActivationMap.size(), 2u);
+//    EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
+//    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap.size(), 1u);
+//    EXPECT_TRUE(eventDeactivationMap.find(3) != eventDeactivationMap.end());
+//    EXPECT_EQ(eventDeactivationMap[3].size(), 1u);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//
+//    std::unique_ptr<LogEvent> event;
+//
+//    event = CreateAppCrashEvent(111, bucketStartTimeNs + 5);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 5);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 0);
+//
+//    // Activated by battery save mode.
+//    event = CreateBatterySaverOnEvent(bucketStartTimeNs + 10);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 10);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 1);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//
+//    // First processed event.
+//    event = CreateAppCrashEvent(222, bucketStartTimeNs + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 15);
+//
+//    // Activated by screen on event.
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + 20);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 20);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//
+//    // 2nd processed event.
+//    // The activation by screen_on event expires, but the one by battery save mode is still active.
+//    event = CreateAppCrashEvent(333, bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
+//    processor.OnLogEvent(event.get(),bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    // No new broadcast since the config should still be active.
+//    EXPECT_EQ(broadcastCount, 1);
+//
+//    // 3rd processed event.
+//    event = CreateAppCrashEvent(444, bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
+//
+//    // All activations expired.
+//    event = CreateAppCrashEvent(555, bucketStartTimeNs + NS_PER_SEC * 60 * 8);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 8);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    // New broadcast since the config is no longer active.
+//    EXPECT_EQ(broadcastCount, 2);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//
+//    // Re-activate metric via screen on.
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 3);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//
+//    // 4th processed event.
+//    event = CreateAppCrashEvent(666, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
+//
+//    // Re-enable battery saver mode activation.
+//    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 3);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//
+//    // 5th processed event.
+//    event = CreateAppCrashEvent(777, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
+//
+//    // Cancel battery saver mode activation.
+//    event = CreateScreenBrightnessChangedEvent(64, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 60);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 60);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 3);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//
+//    // Screen-on activation expired.
+//    event = CreateAppCrashEvent(888, bucketStartTimeNs + NS_PER_SEC * 60 * 13);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 13);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    // New broadcast since the config is no longer active.
+//    EXPECT_EQ(broadcastCount, 4);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//
+//    event = CreateAppCrashEvent(999, bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
+//
+//    // Re-enable battery saver mode activation.
+//    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 5);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//
+//    // Cancel battery saver mode activation.
+//    event = CreateScreenBrightnessChangedEvent(140, bucketStartTimeNs + NS_PER_SEC * 60 * 16);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 16);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 6);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor.onDumpReport(cfgKey, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_EQ(5, reports.reports(0).metrics(0).count_metrics().data_size());
+//
+//    StatsLogReport::CountMetricDataWrapper countMetrics;
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(0).count_metrics(), &countMetrics);
+//    EXPECT_EQ(5, countMetrics.data_size());
+//
+//    auto data = countMetrics.data(0);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(222, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(1);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(333, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(2);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(444, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    // Partial bucket as metric is deactivated.
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 8,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(3);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(666, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 13,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(4);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(777, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 13,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//}
+//
+//TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
+//    auto config = CreateStatsdConfigWithTwoDeactivations();
+//
+//    int64_t bucketStartTimeNs = NS_PER_SEC * 10; // 10 secs
+//    int64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000LL * 1000LL;
+//
+//    int uid = 12345;
+//    int64_t cfgId = 98765;
+//    ConfigKey cfgKey(uid, cfgId);
+//
+//    sp<UidMap> m = new UidMap();
+//    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
+//    sp<AlarmMonitor> anomalyAlarmMonitor;
+//    sp<AlarmMonitor> subscriberAlarmMonitor;
+//    vector<int64_t> activeConfigsBroadcast;
+//
+//    long timeBase1 = 1;
+//    int broadcastCount = 0;
+//    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
+//            bucketStartTimeNs, [](const ConfigKey& key) { return true; },
+//            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
+//                    const vector<int64_t>& activeConfigs) {
+//                broadcastCount++;
+//                EXPECT_EQ(broadcastUid, uid);
+//                activeConfigsBroadcast.clear();
+//                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
+//                        activeConfigs.begin(), activeConfigs.end());
+//                return true;
+//            });
+//
+//    processor.OnConfigUpdated(bucketStartTimeNs, cfgKey, config);
+//
+//    EXPECT_EQ(processor.mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor.mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    auto& eventActivationMap = metricProducer->mEventActivationMap;
+//    auto& eventDeactivationMap = metricProducer->mEventDeactivationMap;
+//
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    // Two activations: one is triggered by battery saver mode (tracker index 0), the other is
+//    // triggered by screen on event (tracker index 2).
+//    EXPECT_EQ(eventActivationMap.size(), 2u);
+//    EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
+//    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap.size(), 2u);
+//    EXPECT_TRUE(eventDeactivationMap.find(3) != eventDeactivationMap.end());
+//    EXPECT_TRUE(eventDeactivationMap.find(4) != eventDeactivationMap.end());
+//    EXPECT_EQ(eventDeactivationMap[3].size(), 1u);
+//    EXPECT_EQ(eventDeactivationMap[4].size(), 1u);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//
+//    std::unique_ptr<LogEvent> event;
+//
+//    event = CreateAppCrashEvent(111, bucketStartTimeNs + 5);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 5);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 0);
+//
+//    // Activated by battery save mode.
+//    event = CreateBatterySaverOnEvent(bucketStartTimeNs + 10);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 10);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 1);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//
+//    // First processed event.
+//    event = CreateAppCrashEvent(222, bucketStartTimeNs + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 15);
+//
+//    // Activated by screen on event.
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + 20);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 20);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//
+//    // 2nd processed event.
+//    // The activation by screen_on event expires, but the one by battery save mode is still active.
+//    event = CreateAppCrashEvent(333, bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//    // No new broadcast since the config should still be active.
+//    EXPECT_EQ(broadcastCount, 1);
+//
+//    // 3rd processed event.
+//    event = CreateAppCrashEvent(444, bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
+//
+//    // All activations expired.
+//    event = CreateAppCrashEvent(555, bucketStartTimeNs + NS_PER_SEC * 60 * 8);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 8);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    // New broadcast since the config is no longer active.
+//    EXPECT_EQ(broadcastCount, 2);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//
+//    // Re-activate metric via screen on.
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 3);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//
+//    // 4th processed event.
+//    event = CreateAppCrashEvent(666, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
+//
+//    // Re-enable battery saver mode activation.
+//    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 3);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//
+//    // 5th processed event.
+//    event = CreateAppCrashEvent(777, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
+//
+//    // Cancel battery saver mode and screen on activation.
+//    event = CreateScreenBrightnessChangedEvent(64, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 60);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 60);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    // New broadcast since the config is no longer active.
+//    EXPECT_EQ(broadcastCount, 4);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//
+//    // Screen-on activation expired.
+//    event = CreateAppCrashEvent(888, bucketStartTimeNs + NS_PER_SEC * 60 * 13);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 13);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 4);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//
+//    event = CreateAppCrashEvent(999, bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
+//
+//    // Re-enable battery saver mode activation.
+//    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 5);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//
+//    // Cancel battery saver mode and screen on activation.
+//    event = CreateScreenBrightnessChangedEvent(140, bucketStartTimeNs + NS_PER_SEC * 60 * 16);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 16);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 6);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor.onDumpReport(cfgKey, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_EQ(5, reports.reports(0).metrics(0).count_metrics().data_size());
+//
+//    StatsLogReport::CountMetricDataWrapper countMetrics;
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(0).count_metrics(), &countMetrics);
+//    EXPECT_EQ(5, countMetrics.data_size());
+//
+//    auto data = countMetrics.data(0);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(222, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(1);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(333, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(2);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(444, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    // Partial bucket as metric is deactivated.
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 8,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(3);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(666, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 11,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(4);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(777, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 11,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//}
+//
+//TEST(MetricActivationE2eTest, TestCountMetricWithSameDeactivation) {
+//    auto config = CreateStatsdConfigWithSameDeactivations();
+//
+//    int64_t bucketStartTimeNs = NS_PER_SEC * 10; // 10 secs
+//    int64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000LL * 1000LL;
+//
+//    int uid = 12345;
+//    int64_t cfgId = 98765;
+//    ConfigKey cfgKey(uid, cfgId);
+//
+//    sp<UidMap> m = new UidMap();
+//    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
+//    sp<AlarmMonitor> anomalyAlarmMonitor;
+//    sp<AlarmMonitor> subscriberAlarmMonitor;
+//    vector<int64_t> activeConfigsBroadcast;
+//
+//    long timeBase1 = 1;
+//    int broadcastCount = 0;
+//    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
+//            bucketStartTimeNs, [](const ConfigKey& key) { return true; },
+//            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
+//                    const vector<int64_t>& activeConfigs) {
+//                broadcastCount++;
+//                EXPECT_EQ(broadcastUid, uid);
+//                activeConfigsBroadcast.clear();
+//                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
+//                        activeConfigs.begin(), activeConfigs.end());
+//                return true;
+//            });
+//
+//    processor.OnConfigUpdated(bucketStartTimeNs, cfgKey, config);
+//
+//    EXPECT_EQ(processor.mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor.mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 1);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    auto& eventActivationMap = metricProducer->mEventActivationMap;
+//    auto& eventDeactivationMap = metricProducer->mEventDeactivationMap;
+//
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    // Two activations: one is triggered by battery saver mode (tracker index 0), the other is
+//    // triggered by screen on event (tracker index 2).
+//    EXPECT_EQ(eventActivationMap.size(), 2u);
+//    EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
+//    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap.size(), 1u);
+//    EXPECT_TRUE(eventDeactivationMap.find(3) != eventDeactivationMap.end());
+//    EXPECT_EQ(eventDeactivationMap[3].size(), 2u);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[3][1], eventActivationMap[2]);
+//    EXPECT_EQ(broadcastCount, 0);
+//
+//    std::unique_ptr<LogEvent> event;
+//
+//    // Event that should be ignored.
+//    event = CreateAppCrashEvent(111, bucketStartTimeNs + 1);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 1);
+//
+//    // Activate metric via screen on for 2 minutes.
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, bucketStartTimeNs + 10);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 10);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 1);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 10);
+//
+//    // 1st processed event.
+//    event = CreateAppCrashEvent(222, bucketStartTimeNs + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 15);
+//
+//    // Enable battery saver mode activation for 5 minutes.
+//    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 + 10);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 + 10);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 1);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 10);
+//
+//    // 2nd processed event.
+//    event = CreateAppCrashEvent(333, bucketStartTimeNs + NS_PER_SEC * 60 + 40);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 + 40);
+//
+//    // Cancel battery saver mode and screen on activation.
+//    int64_t firstDeactivation = bucketStartTimeNs + NS_PER_SEC * 61;
+//    event = CreateScreenBrightnessChangedEvent(64, firstDeactivation);
+//    processor.OnLogEvent(event.get(), firstDeactivation);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    // New broadcast since the config is no longer active.
+//    EXPECT_EQ(broadcastCount, 2);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//
+//    // Should be ignored
+//    event = CreateAppCrashEvent(444, bucketStartTimeNs + NS_PER_SEC * 61 + 80);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 61 + 80);
+//
+//    // Re-enable battery saver mode activation.
+//    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 15);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 3);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 15);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//
+//    // 3rd processed event.
+//    event = CreateAppCrashEvent(555, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 80);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 80);
+//
+//    // Cancel battery saver mode activation.
+//    int64_t secondDeactivation = bucketStartTimeNs + NS_PER_SEC * 60 * 13;
+//    event = CreateScreenBrightnessChangedEvent(140, secondDeactivation);
+//    processor.OnLogEvent(event.get(), secondDeactivation);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(broadcastCount, 4);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//
+//    // Should be ignored.
+//    event = CreateAppCrashEvent(666, bucketStartTimeNs + NS_PER_SEC * 60 * 13 + 80);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 13 + 80);
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor.onDumpReport(cfgKey, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_EQ(3, reports.reports(0).metrics(0).count_metrics().data_size());
+//
+//    StatsLogReport::CountMetricDataWrapper countMetrics;
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(0).count_metrics(), &countMetrics);
+//    EXPECT_EQ(3, countMetrics.data_size());
+//
+//    auto data = countMetrics.data(0);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(222, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(firstDeactivation, data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(1);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(333, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(firstDeactivation, data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(2);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(555, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    // Partial bucket as metric is deactivated.
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(secondDeactivation, data.bucket_info(0).end_bucket_elapsed_nanos());
+//}
+//
+//TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
+//    auto config = CreateStatsdConfigWithTwoMetricsTwoDeactivations();
+//
+//    int64_t bucketStartTimeNs = NS_PER_SEC * 10; // 10 secs
+//    int64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000LL * 1000LL;
+//
+//    int uid = 12345;
+//    int64_t cfgId = 98765;
+//    ConfigKey cfgKey(uid, cfgId);
+//
+//    sp<UidMap> m = new UidMap();
+//    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
+//    sp<AlarmMonitor> anomalyAlarmMonitor;
+//    sp<AlarmMonitor> subscriberAlarmMonitor;
+//    vector<int64_t> activeConfigsBroadcast;
+//
+//    long timeBase1 = 1;
+//    int broadcastCount = 0;
+//    StatsLogProcessor processor(m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor,
+//            bucketStartTimeNs, [](const ConfigKey& key) { return true; },
+//            [&uid, &broadcastCount, &activeConfigsBroadcast](const int& broadcastUid,
+//                    const vector<int64_t>& activeConfigs) {
+//                broadcastCount++;
+//                EXPECT_EQ(broadcastUid, uid);
+//                activeConfigsBroadcast.clear();
+//                activeConfigsBroadcast.insert(activeConfigsBroadcast.end(),
+//                        activeConfigs.begin(), activeConfigs.end());
+//                return true;
+//            });
+//
+//    processor.OnConfigUpdated(bucketStartTimeNs, cfgKey, config);
+//
+//    EXPECT_EQ(processor.mMetricsManagers.size(), 1u);
+//    sp<MetricsManager> metricsManager = processor.mMetricsManagers.begin()->second;
+//    EXPECT_TRUE(metricsManager->isConfigValid());
+//    EXPECT_EQ(metricsManager->mAllMetricProducers.size(), 2);
+//    sp<MetricProducer> metricProducer = metricsManager->mAllMetricProducers[0];
+//    auto& eventActivationMap = metricProducer->mEventActivationMap;
+//    auto& eventDeactivationMap = metricProducer->mEventDeactivationMap;
+//    sp<MetricProducer> metricProducer2 = metricsManager->mAllMetricProducers[1];
+//    auto& eventActivationMap2 = metricProducer2->mEventActivationMap;
+//    auto& eventDeactivationMap2 = metricProducer2->mEventDeactivationMap;
+//
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_FALSE(metricProducer2->mIsActive);
+//    // Two activations: one is triggered by battery saver mode (tracker index 0), the other is
+//    // triggered by screen on event (tracker index 2).
+//    EXPECT_EQ(eventActivationMap.size(), 2u);
+//    EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
+//    EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap.size(), 2u);
+//    EXPECT_TRUE(eventDeactivationMap.find(3) != eventDeactivationMap.end());
+//    EXPECT_TRUE(eventDeactivationMap.find(4) != eventDeactivationMap.end());
+//    EXPECT_EQ(eventDeactivationMap[3].size(), 1u);
+//    EXPECT_EQ(eventDeactivationMap[4].size(), 1u);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//
+//    EXPECT_EQ(eventActivationMap2.size(), 2u);
+//    EXPECT_TRUE(eventActivationMap2.find(0) != eventActivationMap2.end());
+//    EXPECT_TRUE(eventActivationMap2.find(2) != eventActivationMap2.end());
+//    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[0]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[2]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap2.size(), 2u);
+//    EXPECT_TRUE(eventDeactivationMap2.find(3) != eventDeactivationMap2.end());
+//    EXPECT_TRUE(eventDeactivationMap2.find(4) != eventDeactivationMap2.end());
+//    EXPECT_EQ(eventDeactivationMap[3].size(), 1u);
+//    EXPECT_EQ(eventDeactivationMap[4].size(), 1u);
+//    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
+//    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
+//
+//    std::unique_ptr<LogEvent> event;
+//
+//    event = CreateAppCrashEvent(111, bucketStartTimeNs + 5);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 5);
+//    event = CreateMoveToForegroundEvent(1111, bucketStartTimeNs + 5);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 5);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_FALSE(metricProducer2->mIsActive);
+//    EXPECT_EQ(broadcastCount, 0);
+//
+//    // Activated by battery save mode.
+//    event = CreateBatterySaverOnEvent(bucketStartTimeNs + 10);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 10);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_EQ(broadcastCount, 1);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//    EXPECT_TRUE(metricProducer2->mIsActive);
+//    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[2]->start_ns, 0);
+//    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
+//    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
+//
+//    // First processed event.
+//    event = CreateAppCrashEvent(222, bucketStartTimeNs + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 15);
+//    event = CreateMoveToForegroundEvent(2222, bucketStartTimeNs + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 15);
+//
+//    // Activated by screen on event.
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + 20);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + 20);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//    EXPECT_TRUE(metricProducer2->mIsActive);
+//    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
+//    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
+//
+//    // 2nd processed event.
+//    // The activation by screen_on event expires, but the one by battery save mode is still active.
+//    event = CreateAppCrashEvent(333, bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
+//    event = CreateMoveToForegroundEvent(3333, bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 2 + 25);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//    EXPECT_TRUE(metricProducer2->mIsActive);
+//    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
+//    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
+//    // No new broadcast since the config should still be active.
+//    EXPECT_EQ(broadcastCount, 1);
+//
+//    // 3rd processed event.
+//    event = CreateAppCrashEvent(444, bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
+//    event = CreateMoveToForegroundEvent(4444, bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 5 + 25);
+//
+//    // All activations expired.
+//    event = CreateAppCrashEvent(555, bucketStartTimeNs + NS_PER_SEC * 60 * 8);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 8);
+//    event = CreateMoveToForegroundEvent(5555, bucketStartTimeNs + NS_PER_SEC * 60 * 8);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 8);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    // New broadcast since the config is no longer active.
+//    EXPECT_EQ(broadcastCount, 2);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//    EXPECT_FALSE(metricProducer2->mIsActive);
+//    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + 20);
+//    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
+//    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
+//
+//    // Re-activate metric via screen on.
+//    event = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_EQ(broadcastCount, 3);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//    EXPECT_TRUE(metricProducer2->mIsActive);
+//    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
+//    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
+//    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
+//
+//    // 4th processed event.
+//    event = CreateAppCrashEvent(666, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
+//    event = CreateMoveToForegroundEvent(6666, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 1);
+//
+//    // Re-enable battery saver mode activation.
+//    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_EQ(broadcastCount, 3);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//    EXPECT_TRUE(metricProducer2->mIsActive);
+//    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
+//    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
+//
+//    // 5th processed event.
+//    event = CreateAppCrashEvent(777, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
+//    event = CreateMoveToForegroundEvent(7777, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 40);
+//
+//    // Cancel battery saver mode and screen on activation.
+//    event = CreateScreenBrightnessChangedEvent(64, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 60);
+//    processor.OnLogEvent(event.get(),bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 60);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    // New broadcast since the config is no longer active.
+//    EXPECT_EQ(broadcastCount, 4);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//    EXPECT_FALSE(metricProducer2->mIsActive);
+//    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
+//    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
+//
+//    // Screen-on activation expired.
+//    event = CreateAppCrashEvent(888, bucketStartTimeNs + NS_PER_SEC * 60 * 13);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 13);
+//    event = CreateMoveToForegroundEvent(8888, bucketStartTimeNs + NS_PER_SEC * 60 * 13);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 13);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_EQ(broadcastCount, 4);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//    EXPECT_FALSE(metricProducer2->mIsActive);
+//    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
+//    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
+//    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
+//
+//    event = CreateAppCrashEvent(999, bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
+//    event = CreateMoveToForegroundEvent(9999, bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 14 + 1);
+//
+//    // Re-enable battery saver mode activation.
+//    event = CreateBatterySaverOnEvent(bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    processor.OnLogEvent(event.get(), bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    EXPECT_TRUE(metricsManager->isActive());
+//    EXPECT_EQ(broadcastCount, 5);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 1);
+//    EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
+//    EXPECT_TRUE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//    EXPECT_TRUE(metricProducer2->mIsActive);
+//    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
+//    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
+//    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
+//
+//    // Cancel battery saver mode and screen on activation.
+//    event = CreateScreenBrightnessChangedEvent(140, bucketStartTimeNs + NS_PER_SEC * 60 * 16);
+//    processor.OnLogEvent(event.get(),bucketStartTimeNs + NS_PER_SEC * 60 * 16);
+//    EXPECT_FALSE(metricsManager->isActive());
+//    EXPECT_EQ(broadcastCount, 6);
+//    EXPECT_EQ(activeConfigsBroadcast.size(), 0);
+//    EXPECT_FALSE(metricProducer->mIsActive);
+//    EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap[3][0], eventActivationMap[0]);
+//    EXPECT_EQ(eventDeactivationMap[4][0], eventActivationMap[2]);
+//    EXPECT_FALSE(metricProducer2->mIsActive);
+//    EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
+//    EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
+//    EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
+//    EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
+//    EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
+//    EXPECT_EQ(eventDeactivationMap2[3][0], eventActivationMap2[0]);
+//    EXPECT_EQ(eventDeactivationMap2[4][0], eventActivationMap2[2]);
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor.onDumpReport(cfgKey, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(2, reports.reports(0).metrics_size());
+//    EXPECT_EQ(5, reports.reports(0).metrics(0).count_metrics().data_size());
+//    EXPECT_EQ(5, reports.reports(0).metrics(1).count_metrics().data_size());
+//
+//    StatsLogReport::CountMetricDataWrapper countMetrics;
+//
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(0).count_metrics(), &countMetrics);
+//    EXPECT_EQ(5, countMetrics.data_size());
+//
+//    auto data = countMetrics.data(0);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(222, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(1);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(333, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(2);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(444, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    // Partial bucket as metric is deactivated.
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 8,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(3);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(666, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 11,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(4);
+//    EXPECT_EQ(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(777, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 11,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//
+//   countMetrics.clear_data();
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(1).count_metrics(), &countMetrics);
+//    EXPECT_EQ(5, countMetrics.data_size());
+//
+//    data = countMetrics.data(0);
+//    EXPECT_EQ(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(2222, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(1);
+//    EXPECT_EQ(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(3333, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(2);
+//    EXPECT_EQ(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(4444, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    // Partial bucket as metric is deactivated.
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 8,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(3);
+//    EXPECT_EQ(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(6666, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 11,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//
+//    data = countMetrics.data(4);
+//    EXPECT_EQ(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* uid field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_EQ(7777, data.dimensions_in_what().value_tuple().dimensions_value(0).value_int());
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(1, data.bucket_info(0).count());
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(bucketStartTimeNs + NS_PER_SEC * 60 * 11,
+//              data.bucket_info(0).end_bucket_elapsed_nanos());
+//}
 
 #else
 GTEST_LOG_(INFO) << "This test does nothing.\n";
diff --git a/cmds/statsd/tests/e2e/MetricConditionLink_e2e_test.cpp b/cmds/statsd/tests/e2e/MetricConditionLink_e2e_test.cpp
index 78fb391..7d93fcc 100644
--- a/cmds/statsd/tests/e2e/MetricConditionLink_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/MetricConditionLink_e2e_test.cpp
@@ -97,249 +97,250 @@
 }
 }  // namespace
 
-// If we want to test multiple dump data, we must do it in separate tests, because in the e2e tests,
-// we should use the real API which will clear the data after dump data is called.
-TEST(MetricConditionLinkE2eTest, TestMultiplePredicatesAndLinks1) {
-    auto config = CreateStatsdConfig();
-    uint64_t bucketStartTimeNs = 10000000000;
-    uint64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-
-    int appUid = 123;
-    auto crashEvent1 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 1);
-    auto crashEvent2 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 201);
-    auto crashEvent3= CreateAppCrashEvent(appUid, bucketStartTimeNs + 2 * bucketSizeNs - 101);
-
-    auto crashEvent4 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 51);
-    auto crashEvent5 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 299);
-    auto crashEvent6 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 2001);
-
-    auto crashEvent7 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 16);
-    auto crashEvent8 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 249);
-
-    auto crashEvent9 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 351);
-    auto crashEvent10 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 2 * bucketSizeNs - 2);
-
-    auto screenTurnedOnEvent =
-        CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-                                      bucketStartTimeNs + 2);
-    auto screenTurnedOffEvent =
-        CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-                                      bucketStartTimeNs + 200);
-    auto screenTurnedOnEvent2 =
-        CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-                                      bucketStartTimeNs + 2 * bucketSizeNs - 100);
-
-    std::vector<AttributionNodeInternal> attributions = {
-            CreateAttribution(appUid, "App1"), CreateAttribution(appUid + 1, "GMSCoreModule1")};
-    auto syncOnEvent1 =
-        CreateSyncStartEvent(attributions, "ReadEmail", bucketStartTimeNs + 50);
-    auto syncOffEvent1 =
-        CreateSyncEndEvent(attributions, "ReadEmail", bucketStartTimeNs + bucketSizeNs + 300);
-    auto syncOnEvent2 =
-        CreateSyncStartEvent(attributions, "ReadDoc", bucketStartTimeNs + bucketSizeNs + 2000);
-
-    auto moveToBackgroundEvent1 =
-        CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + 15);
-    auto moveToForegroundEvent1 =
-        CreateMoveToForegroundEvent(appUid, bucketStartTimeNs + bucketSizeNs + 250);
-
-    auto moveToBackgroundEvent2 =
-        CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + bucketSizeNs + 350);
-    auto moveToForegroundEvent2 =
-        CreateMoveToForegroundEvent(appUid, bucketStartTimeNs + 2 * bucketSizeNs - 1);
-
-    /*
-                    bucket #1                               bucket #2
-
-
-       |      |   |  |                      |   |          |        |   |   |     (crashEvents)
-    |-------------------------------------|-----------------------------------|---------
-
-             |                                           |                        (MoveToBkground)
-
-                                             |                               |    (MoveToForeground)
-
-                |                                                 |                (SyncIsOn)
-                                                  |                                (SyncIsOff)
-          |                                                               |        (ScreenIsOn)
-                   |                                                               (ScreenIsOff)
-    */
-    std::vector<std::unique_ptr<LogEvent>> events;
-    events.push_back(std::move(crashEvent1));
-    events.push_back(std::move(crashEvent2));
-    events.push_back(std::move(crashEvent3));
-    events.push_back(std::move(crashEvent4));
-    events.push_back(std::move(crashEvent5));
-    events.push_back(std::move(crashEvent6));
-    events.push_back(std::move(crashEvent7));
-    events.push_back(std::move(crashEvent8));
-    events.push_back(std::move(crashEvent9));
-    events.push_back(std::move(crashEvent10));
-    events.push_back(std::move(screenTurnedOnEvent));
-    events.push_back(std::move(screenTurnedOffEvent));
-    events.push_back(std::move(screenTurnedOnEvent2));
-    events.push_back(std::move(syncOnEvent1));
-    events.push_back(std::move(syncOffEvent1));
-    events.push_back(std::move(syncOnEvent2));
-    events.push_back(std::move(moveToBackgroundEvent1));
-    events.push_back(std::move(moveToForegroundEvent1));
-    events.push_back(std::move(moveToBackgroundEvent2));
-    events.push_back(std::move(moveToForegroundEvent2));
-
-    sortLogEventsByTimestamp(&events);
-
-    for (const auto& event : events) {
-        processor->OnLogEvent(event.get());
-    }
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs - 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(reports.reports_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data(0).bucket_info_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data(0).bucket_info(0).count(), 1);
-    auto data = reports.reports(0).metrics(0).count_metrics().data(0);
-    // Validate dimension value.
-    EXPECT_EQ(data.dimensions_in_what().field(), android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED);
-    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value_size(), 1);
-    // Uid field.
-    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).field(), 1);
-    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).value_int(), appUid);
-}
-
-TEST(MetricConditionLinkE2eTest, TestMultiplePredicatesAndLinks2) {
-    auto config = CreateStatsdConfig();
-    uint64_t bucketStartTimeNs = 10000000000;
-    uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(
-            bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-
-    int appUid = 123;
-    auto crashEvent1 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 1);
-    auto crashEvent2 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 201);
-    auto crashEvent3 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 2 * bucketSizeNs - 101);
-
-    auto crashEvent4 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 51);
-    auto crashEvent5 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 299);
-    auto crashEvent6 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 2001);
-
-    auto crashEvent7 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 16);
-    auto crashEvent8 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 249);
-
-    auto crashEvent9 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 351);
-    auto crashEvent10 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 2 * bucketSizeNs - 2);
-
-    auto screenTurnedOnEvent = CreateScreenStateChangedEvent(
-            android::view::DisplayStateEnum::DISPLAY_STATE_ON, bucketStartTimeNs + 2);
-    auto screenTurnedOffEvent = CreateScreenStateChangedEvent(
-            android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 200);
-    auto screenTurnedOnEvent2 =
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + 2 * bucketSizeNs - 100);
-
-    std::vector<AttributionNodeInternal> attributions = {
-            CreateAttribution(appUid, "App1"), CreateAttribution(appUid + 1, "GMSCoreModule1")};
-    auto syncOnEvent1 = CreateSyncStartEvent(attributions, "ReadEmail", bucketStartTimeNs + 50);
-    auto syncOffEvent1 =
-            CreateSyncEndEvent(attributions, "ReadEmail", bucketStartTimeNs + bucketSizeNs + 300);
-    auto syncOnEvent2 =
-            CreateSyncStartEvent(attributions, "ReadDoc", bucketStartTimeNs + bucketSizeNs + 2000);
-
-    auto moveToBackgroundEvent1 = CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + 15);
-    auto moveToForegroundEvent1 =
-            CreateMoveToForegroundEvent(appUid, bucketStartTimeNs + bucketSizeNs + 250);
-
-    auto moveToBackgroundEvent2 =
-            CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + bucketSizeNs + 350);
-    auto moveToForegroundEvent2 =
-            CreateMoveToForegroundEvent(appUid, bucketStartTimeNs + 2 * bucketSizeNs - 1);
-
-    /*
-                    bucket #1                               bucket #2
-
-
-       |      |   |  |                      |   |          |        |   |   |     (crashEvents)
-    |-------------------------------------|-----------------------------------|---------
-
-             |                                           |                        (MoveToBkground)
-
-                                             |                               |    (MoveToForeground)
-
-                |                                                 |                (SyncIsOn)
-                                                  |                                (SyncIsOff)
-          |                                                               |        (ScreenIsOn)
-                   |                                                               (ScreenIsOff)
-    */
-    std::vector<std::unique_ptr<LogEvent>> events;
-    events.push_back(std::move(crashEvent1));
-    events.push_back(std::move(crashEvent2));
-    events.push_back(std::move(crashEvent3));
-    events.push_back(std::move(crashEvent4));
-    events.push_back(std::move(crashEvent5));
-    events.push_back(std::move(crashEvent6));
-    events.push_back(std::move(crashEvent7));
-    events.push_back(std::move(crashEvent8));
-    events.push_back(std::move(crashEvent9));
-    events.push_back(std::move(crashEvent10));
-    events.push_back(std::move(screenTurnedOnEvent));
-    events.push_back(std::move(screenTurnedOffEvent));
-    events.push_back(std::move(screenTurnedOnEvent2));
-    events.push_back(std::move(syncOnEvent1));
-    events.push_back(std::move(syncOffEvent1));
-    events.push_back(std::move(syncOnEvent2));
-    events.push_back(std::move(moveToBackgroundEvent1));
-    events.push_back(std::move(moveToForegroundEvent1));
-    events.push_back(std::move(moveToBackgroundEvent2));
-    events.push_back(std::move(moveToForegroundEvent2));
-
-    sortLogEventsByTimestamp(&events);
-
-    for (const auto& event : events) {
-        processor->OnLogEvent(event.get());
-    }
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(reports.reports_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data(0).bucket_info_size(), 2);
-    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data(0).bucket_info(0).count(), 1);
-    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data(0).bucket_info(1).count(), 3);
-    auto data = reports.reports(0).metrics(0).count_metrics().data(0);
-    // Validate dimension value.
-    EXPECT_EQ(data.dimensions_in_what().field(),
-              android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED);
-    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value_size(), 1);
-    // Uid field.
-    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).field(), 1);
-    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).value_int(), appUid);
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//// If we want to test multiple dump data, we must do it in separate tests, because in the e2e tests,
+//// we should use the real API which will clear the data after dump data is called.
+//TEST(MetricConditionLinkE2eTest, TestMultiplePredicatesAndLinks1) {
+//    auto config = CreateStatsdConfig();
+//    uint64_t bucketStartTimeNs = 10000000000;
+//    uint64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//
+//    int appUid = 123;
+//    auto crashEvent1 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 1);
+//    auto crashEvent2 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 201);
+//    auto crashEvent3= CreateAppCrashEvent(appUid, bucketStartTimeNs + 2 * bucketSizeNs - 101);
+//
+//    auto crashEvent4 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 51);
+//    auto crashEvent5 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 299);
+//    auto crashEvent6 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 2001);
+//
+//    auto crashEvent7 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 16);
+//    auto crashEvent8 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 249);
+//
+//    auto crashEvent9 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 351);
+//    auto crashEvent10 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 2 * bucketSizeNs - 2);
+//
+//    auto screenTurnedOnEvent =
+//        CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//                                      bucketStartTimeNs + 2);
+//    auto screenTurnedOffEvent =
+//        CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//                                      bucketStartTimeNs + 200);
+//    auto screenTurnedOnEvent2 =
+//        CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//                                      bucketStartTimeNs + 2 * bucketSizeNs - 100);
+//
+//    std::vector<AttributionNodeInternal> attributions = {
+//            CreateAttribution(appUid, "App1"), CreateAttribution(appUid + 1, "GMSCoreModule1")};
+//    auto syncOnEvent1 =
+//        CreateSyncStartEvent(attributions, "ReadEmail", bucketStartTimeNs + 50);
+//    auto syncOffEvent1 =
+//        CreateSyncEndEvent(attributions, "ReadEmail", bucketStartTimeNs + bucketSizeNs + 300);
+//    auto syncOnEvent2 =
+//        CreateSyncStartEvent(attributions, "ReadDoc", bucketStartTimeNs + bucketSizeNs + 2000);
+//
+//    auto moveToBackgroundEvent1 =
+//        CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + 15);
+//    auto moveToForegroundEvent1 =
+//        CreateMoveToForegroundEvent(appUid, bucketStartTimeNs + bucketSizeNs + 250);
+//
+//    auto moveToBackgroundEvent2 =
+//        CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + bucketSizeNs + 350);
+//    auto moveToForegroundEvent2 =
+//        CreateMoveToForegroundEvent(appUid, bucketStartTimeNs + 2 * bucketSizeNs - 1);
+//
+//    /*
+//                    bucket #1                               bucket #2
+//
+//
+//       |      |   |  |                      |   |          |        |   |   |     (crashEvents)
+//    |-------------------------------------|-----------------------------------|---------
+//
+//             |                                           |                        (MoveToBkground)
+//
+//                                             |                               |    (MoveToForeground)
+//
+//                |                                                 |                (SyncIsOn)
+//                                                  |                                (SyncIsOff)
+//          |                                                               |        (ScreenIsOn)
+//                   |                                                               (ScreenIsOff)
+//    */
+//    std::vector<std::unique_ptr<LogEvent>> events;
+//    events.push_back(std::move(crashEvent1));
+//    events.push_back(std::move(crashEvent2));
+//    events.push_back(std::move(crashEvent3));
+//    events.push_back(std::move(crashEvent4));
+//    events.push_back(std::move(crashEvent5));
+//    events.push_back(std::move(crashEvent6));
+//    events.push_back(std::move(crashEvent7));
+//    events.push_back(std::move(crashEvent8));
+//    events.push_back(std::move(crashEvent9));
+//    events.push_back(std::move(crashEvent10));
+//    events.push_back(std::move(screenTurnedOnEvent));
+//    events.push_back(std::move(screenTurnedOffEvent));
+//    events.push_back(std::move(screenTurnedOnEvent2));
+//    events.push_back(std::move(syncOnEvent1));
+//    events.push_back(std::move(syncOffEvent1));
+//    events.push_back(std::move(syncOnEvent2));
+//    events.push_back(std::move(moveToBackgroundEvent1));
+//    events.push_back(std::move(moveToForegroundEvent1));
+//    events.push_back(std::move(moveToBackgroundEvent2));
+//    events.push_back(std::move(moveToForegroundEvent2));
+//
+//    sortLogEventsByTimestamp(&events);
+//
+//    for (const auto& event : events) {
+//        processor->OnLogEvent(event.get());
+//    }
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs - 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(reports.reports_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data(0).bucket_info_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data(0).bucket_info(0).count(), 1);
+//    auto data = reports.reports(0).metrics(0).count_metrics().data(0);
+//    // Validate dimension value.
+//    EXPECT_EQ(data.dimensions_in_what().field(), android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED);
+//    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value_size(), 1);
+//    // Uid field.
+//    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).field(), 1);
+//    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).value_int(), appUid);
+//}
+//
+//TEST(MetricConditionLinkE2eTest, TestMultiplePredicatesAndLinks2) {
+//    auto config = CreateStatsdConfig();
+//    uint64_t bucketStartTimeNs = 10000000000;
+//    uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(
+//            bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//
+//    int appUid = 123;
+//    auto crashEvent1 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 1);
+//    auto crashEvent2 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 201);
+//    auto crashEvent3 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 2 * bucketSizeNs - 101);
+//
+//    auto crashEvent4 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 51);
+//    auto crashEvent5 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 299);
+//    auto crashEvent6 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 2001);
+//
+//    auto crashEvent7 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 16);
+//    auto crashEvent8 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 249);
+//
+//    auto crashEvent9 = CreateAppCrashEvent(appUid, bucketStartTimeNs + bucketSizeNs + 351);
+//    auto crashEvent10 = CreateAppCrashEvent(appUid, bucketStartTimeNs + 2 * bucketSizeNs - 2);
+//
+//    auto screenTurnedOnEvent = CreateScreenStateChangedEvent(
+//            android::view::DisplayStateEnum::DISPLAY_STATE_ON, bucketStartTimeNs + 2);
+//    auto screenTurnedOffEvent = CreateScreenStateChangedEvent(
+//            android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 200);
+//    auto screenTurnedOnEvent2 =
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + 2 * bucketSizeNs - 100);
+//
+//    std::vector<AttributionNodeInternal> attributions = {
+//            CreateAttribution(appUid, "App1"), CreateAttribution(appUid + 1, "GMSCoreModule1")};
+//    auto syncOnEvent1 = CreateSyncStartEvent(attributions, "ReadEmail", bucketStartTimeNs + 50);
+//    auto syncOffEvent1 =
+//            CreateSyncEndEvent(attributions, "ReadEmail", bucketStartTimeNs + bucketSizeNs + 300);
+//    auto syncOnEvent2 =
+//            CreateSyncStartEvent(attributions, "ReadDoc", bucketStartTimeNs + bucketSizeNs + 2000);
+//
+//    auto moveToBackgroundEvent1 = CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + 15);
+//    auto moveToForegroundEvent1 =
+//            CreateMoveToForegroundEvent(appUid, bucketStartTimeNs + bucketSizeNs + 250);
+//
+//    auto moveToBackgroundEvent2 =
+//            CreateMoveToBackgroundEvent(appUid, bucketStartTimeNs + bucketSizeNs + 350);
+//    auto moveToForegroundEvent2 =
+//            CreateMoveToForegroundEvent(appUid, bucketStartTimeNs + 2 * bucketSizeNs - 1);
+//
+//    /*
+//                    bucket #1                               bucket #2
+//
+//
+//       |      |   |  |                      |   |          |        |   |   |     (crashEvents)
+//    |-------------------------------------|-----------------------------------|---------
+//
+//             |                                           |                        (MoveToBkground)
+//
+//                                             |                               |    (MoveToForeground)
+//
+//                |                                                 |                (SyncIsOn)
+//                                                  |                                (SyncIsOff)
+//          |                                                               |        (ScreenIsOn)
+//                   |                                                               (ScreenIsOff)
+//    */
+//    std::vector<std::unique_ptr<LogEvent>> events;
+//    events.push_back(std::move(crashEvent1));
+//    events.push_back(std::move(crashEvent2));
+//    events.push_back(std::move(crashEvent3));
+//    events.push_back(std::move(crashEvent4));
+//    events.push_back(std::move(crashEvent5));
+//    events.push_back(std::move(crashEvent6));
+//    events.push_back(std::move(crashEvent7));
+//    events.push_back(std::move(crashEvent8));
+//    events.push_back(std::move(crashEvent9));
+//    events.push_back(std::move(crashEvent10));
+//    events.push_back(std::move(screenTurnedOnEvent));
+//    events.push_back(std::move(screenTurnedOffEvent));
+//    events.push_back(std::move(screenTurnedOnEvent2));
+//    events.push_back(std::move(syncOnEvent1));
+//    events.push_back(std::move(syncOffEvent1));
+//    events.push_back(std::move(syncOnEvent2));
+//    events.push_back(std::move(moveToBackgroundEvent1));
+//    events.push_back(std::move(moveToForegroundEvent1));
+//    events.push_back(std::move(moveToBackgroundEvent2));
+//    events.push_back(std::move(moveToForegroundEvent2));
+//
+//    sortLogEventsByTimestamp(&events);
+//
+//    for (const auto& event : events) {
+//        processor->OnLogEvent(event.get());
+//    }
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(reports.reports_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data(0).bucket_info_size(), 2);
+//    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data(0).bucket_info(0).count(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics(0).count_metrics().data(0).bucket_info(1).count(), 3);
+//    auto data = reports.reports(0).metrics(0).count_metrics().data(0);
+//    // Validate dimension value.
+//    EXPECT_EQ(data.dimensions_in_what().field(),
+//              android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED);
+//    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value_size(), 1);
+//    // Uid field.
+//    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).field(), 1);
+//    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).value_int(), appUid);
+//}
 
 #else
 GTEST_LOG_(INFO) << "This test does nothing.\n";
diff --git a/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp b/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp
index 9d58867..9ec831b 100644
--- a/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp
@@ -12,9 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <android/os/BnPullAtomCallback.h>
-#include <android/os/IPullAtomResultReceiver.h>
-#include <binder/IPCThreadState.h>
+#include <android/binder_ibinder.h>
+#include <android/binder_interface_utils.h>
 #include <gtest/gtest.h>
 
 #include <vector>
@@ -24,6 +23,9 @@
 #include "src/stats_log_util.h"
 #include "tests/statsd_test_util.h"
 
+using::ndk::SharedRefBase;
+using std::shared_ptr;
+
 namespace android {
 namespace os {
 namespace statsd {
@@ -34,19 +36,17 @@
 const int kConfigKey = 789130123;  // Randomly chosen to avoid collisions with existing configs.
 const int kCallingUid = 0; // Randomly chosen
 
-void SendConfig(StatsService& service, const StatsdConfig& config) {
+void SendConfig(shared_ptr<StatsService>& service, const StatsdConfig& config) {
     string str;
     config.SerializeToString(&str);
-    std::vector<uint8_t> configAsVec(str.begin(), str.end());
-    bool success;
-    service.addConfiguration(kConfigKey, configAsVec, kCallingUid);
+    std::vector<int8_t> configAsVec(str.begin(), str.end());
+    service->addConfiguration(kConfigKey, configAsVec, kCallingUid);
 }
 
 ConfigMetricsReport GetReports(sp<StatsLogProcessor> processor, int64_t timestamp,
                                bool include_current = false) {
     vector<uint8_t> output;
-    IPCThreadState* ipc = IPCThreadState::self();
-    ConfigKey configKey(ipc->getCallingUid(), kConfigKey);
+    ConfigKey configKey(AIBinder_getCallingUid(), kConfigKey);
     processor->onDumpReport(configKey, timestamp, include_current /* include_current_bucket*/,
                             true /* erase_data */, ADB_DUMP, NO_TIME_CONSTRAINTS, &output);
     ConfigMetricsReportList reports;
@@ -113,135 +113,136 @@
 }
 }  // anonymous namespace
 
-TEST(PartialBucketE2eTest, TestCountMetricWithoutSplit) {
-    StatsService service(nullptr, nullptr);
-    SendConfig(service, MakeConfig());
-    int64_t start = getElapsedRealtimeNs();  // This is the start-time the metrics producers are
-                                             // initialized with.
-
-    service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get());
-    service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 2).get());
-
-    ConfigMetricsReport report = GetReports(service.mProcessor, start + 3);
-    // Expect no metrics since the bucket has not finished yet.
-    EXPECT_EQ(1, report.metrics_size());
-    EXPECT_EQ(0, report.metrics(0).count_metrics().data_size());
-}
-
-TEST(PartialBucketE2eTest, TestCountMetricNoSplitOnNewApp) {
-    StatsService service(nullptr, nullptr);
-    SendConfig(service, MakeConfig());
-    int64_t start = getElapsedRealtimeNs();  // This is the start-time the metrics producers are
-                                             // initialized with.
-
-    // Force the uidmap to update at timestamp 2.
-    service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get());
-    // This is a new installation, so there shouldn't be a split (should be same as the without
-    // split case).
-    service.mUidMap->updateApp(start + 2, String16(kApp1.c_str()), 1, 2, String16("v2"),
-                               String16(""));
-    // Goes into the second bucket.
-    service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 3).get());
-
-    ConfigMetricsReport report = GetReports(service.mProcessor, start + 4);
-    EXPECT_EQ(1, report.metrics_size());
-    EXPECT_EQ(0, report.metrics(0).count_metrics().data_size());
-}
-
-TEST(PartialBucketE2eTest, TestCountMetricSplitOnUpgrade) {
-    StatsService service(nullptr, nullptr);
-    SendConfig(service, MakeConfig());
-    int64_t start = getElapsedRealtimeNs();  // This is the start-time the metrics producers are
-                                             // initialized with.
-    service.mUidMap->updateMap(start, {1}, {1}, {String16("v1")}, {String16(kApp1.c_str())},
-                               {String16("")});
-
-    // Force the uidmap to update at timestamp 2.
-    service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get());
-    service.mUidMap->updateApp(start + 2, String16(kApp1.c_str()), 1, 2, String16("v2"),
-                               String16(""));
-    // Goes into the second bucket.
-    service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 3).get());
-
-    ConfigMetricsReport report = GetReports(service.mProcessor, start + 4);
-    backfillStartEndTimestamp(&report);
-
-    ASSERT_EQ(1, report.metrics_size());
-    ASSERT_EQ(1, report.metrics(0).count_metrics().data_size());
-    ASSERT_EQ(1, report.metrics(0).count_metrics().data(0).bucket_info_size());
-    EXPECT_TRUE(report.metrics(0).count_metrics().data(0).bucket_info(0).
-                    has_start_bucket_elapsed_nanos());
-    EXPECT_TRUE(report.metrics(0).count_metrics().data(0).bucket_info(0).
-                    has_end_bucket_elapsed_nanos());
-    EXPECT_EQ(1, report.metrics(0).count_metrics().data(0).bucket_info(0).count());
-}
-
-TEST(PartialBucketE2eTest, TestCountMetricSplitOnRemoval) {
-    StatsService service(nullptr, nullptr);
-    SendConfig(service, MakeConfig());
-    int64_t start = getElapsedRealtimeNs();  // This is the start-time the metrics producers are
-                                             // initialized with.
-    service.mUidMap->updateMap(start, {1}, {1}, {String16("v1")}, {String16(kApp1.c_str())},
-                               {String16("")});
-
-    // Force the uidmap to update at timestamp 2.
-    service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get());
-    service.mUidMap->removeApp(start + 2, String16(kApp1.c_str()), 1);
-    // Goes into the second bucket.
-    service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 3).get());
-
-    ConfigMetricsReport report = GetReports(service.mProcessor, start + 4);
-    backfillStartEndTimestamp(&report);
-
-    ASSERT_EQ(1, report.metrics_size());
-    ASSERT_EQ(1, report.metrics(0).count_metrics().data_size());
-    ASSERT_EQ(1, report.metrics(0).count_metrics().data(0).bucket_info_size());
-    EXPECT_TRUE(report.metrics(0).count_metrics().data(0).bucket_info(0).
-                    has_start_bucket_elapsed_nanos());
-    EXPECT_TRUE(report.metrics(0).count_metrics().data(0).bucket_info(0).
-                    has_end_bucket_elapsed_nanos());
-    EXPECT_EQ(1, report.metrics(0).count_metrics().data(0).bucket_info(0).count());
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(PartialBucketE2eTest, TestCountMetricWithoutSplit) {
+//    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
+//    SendConfig(service, MakeConfig());
+//    int64_t start = getElapsedRealtimeNs();  // This is the start-time the metrics producers are
+//                                             // initialized with.
+//
+//    service->mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get());
+//    service->mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 2).get());
+//
+//    ConfigMetricsReport report = GetReports(service->mProcessor, start + 3);
+//    // Expect no metrics since the bucket has not finished yet.
+//    EXPECT_EQ(1, report.metrics_size());
+//    EXPECT_EQ(0, report.metrics(0).count_metrics().data_size());
+//}
+//
+//TEST(PartialBucketE2eTest, TestCountMetricNoSplitOnNewApp) {
+//    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
+//    SendConfig(service, MakeConfig());
+//    int64_t start = getElapsedRealtimeNs();  // This is the start-time the metrics producers are
+//                                             // initialized with.
+//
+//    // Force the uidmap to update at timestamp 2.
+//    service->mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get());
+//    // This is a new installation, so there shouldn't be a split (should be same as the without
+//    // split case).
+//    service->mUidMap->updateApp(start + 2, String16(kApp1.c_str()), 1, 2, String16("v2"),
+//                               String16(""));
+//    // Goes into the second bucket.
+//    service->mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 3).get());
+//
+//    ConfigMetricsReport report = GetReports(service->mProcessor, start + 4);
+//    EXPECT_EQ(1, report.metrics_size());
+//    EXPECT_EQ(0, report.metrics(0).count_metrics().data_size());
+//}
+//
+//TEST(PartialBucketE2eTest, TestCountMetricSplitOnUpgrade) {
+//    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
+//    SendConfig(service, MakeConfig());
+//    int64_t start = getElapsedRealtimeNs();  // This is the start-time the metrics producers are
+//                                             // initialized with.
+//    service->mUidMap->updateMap(start, {1}, {1}, {String16("v1")}, {String16(kApp1.c_str())},
+//                                {String16("")});
+//
+//    // Force the uidmap to update at timestamp 2.
+//    service->mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get());
+//    service->mUidMap->updateApp(start + 2, String16(kApp1.c_str()), 1, 2, String16("v2"),
+//                               String16(""));
+//    // Goes into the second bucket.
+//    service->mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 3).get());
+//
+//    ConfigMetricsReport report = GetReports(service->mProcessor, start + 4);
+//    backfillStartEndTimestamp(&report);
+//
+//    ASSERT_EQ(1, report.metrics_size());
+//    ASSERT_EQ(1, report.metrics(0).count_metrics().data_size());
+//    ASSERT_EQ(1, report.metrics(0).count_metrics().data(0).bucket_info_size());
+//    EXPECT_TRUE(report.metrics(0).count_metrics().data(0).bucket_info(0).
+//                    has_start_bucket_elapsed_nanos());
+//    EXPECT_TRUE(report.metrics(0).count_metrics().data(0).bucket_info(0).
+//                    has_end_bucket_elapsed_nanos());
+//    EXPECT_EQ(1, report.metrics(0).count_metrics().data(0).bucket_info(0).count());
+//}
+//
+//TEST(PartialBucketE2eTest, TestCountMetricSplitOnRemoval) {
+//    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
+//    SendConfig(service, MakeConfig());
+//    int64_t start = getElapsedRealtimeNs();  // This is the start-time the metrics producers are
+//                                             // initialized with.
+//    service->mUidMap->updateMap(start, {1}, {1}, {String16("v1")}, {String16(kApp1.c_str())},
+//                                {String16("")});
+//
+//    // Force the uidmap to update at timestamp 2.
+//    service->mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get());
+//    service->mUidMap->removeApp(start + 2, String16(kApp1.c_str()), 1);
+//    // Goes into the second bucket.
+//    service->mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 3).get());
+//
+//    ConfigMetricsReport report = GetReports(service->mProcessor, start + 4);
+//    backfillStartEndTimestamp(&report);
+//
+//    ASSERT_EQ(1, report.metrics_size());
+//    ASSERT_EQ(1, report.metrics(0).count_metrics().data_size());
+//    ASSERT_EQ(1, report.metrics(0).count_metrics().data(0).bucket_info_size());
+//    EXPECT_TRUE(report.metrics(0).count_metrics().data(0).bucket_info(0).
+//                    has_start_bucket_elapsed_nanos());
+//    EXPECT_TRUE(report.metrics(0).count_metrics().data(0).bucket_info(0).
+//                    has_end_bucket_elapsed_nanos());
+//    EXPECT_EQ(1, report.metrics(0).count_metrics().data(0).bucket_info(0).count());
+//}
 
 TEST(PartialBucketE2eTest, TestValueMetricWithoutMinPartialBucket) {
-    StatsService service(nullptr, nullptr);
-    service.mPullerManager->RegisterPullAtomCallback(
+    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
+    service->mPullerManager->RegisterPullAtomCallback(
             /*uid=*/0, android::util::SUBSYSTEM_SLEEP_STATE, NS_PER_SEC, NS_PER_SEC * 10, {},
-            new FakeSubsystemSleepCallback());
+            SharedRefBase::make<FakeSubsystemSleepCallback>());
     // Partial buckets don't occur when app is first installed.
-    service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1, String16("v1"), String16(""));
+    service->mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1, String16("v1"), String16(""));
     SendConfig(service, MakeValueMetricConfig(0));
     int64_t start = getElapsedRealtimeNs();  // This is the start-time the metrics producers are
                                              // initialized with.
 
-    service.mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start);
-    service.mUidMap->updateApp(5 * 60 * NS_PER_SEC + start + 2, String16(kApp1.c_str()), 1, 2,
-                               String16("v2"), String16(""));
+    service->mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start);
+    service->mUidMap->updateApp(5 * 60 * NS_PER_SEC + start + 2, String16(kApp1.c_str()), 1, 2,
+                                String16("v2"), String16(""));
 
     ConfigMetricsReport report =
-            GetReports(service.mProcessor, 5 * 60 * NS_PER_SEC + start + 100, true);
+            GetReports(service->mProcessor, 5 * 60 * NS_PER_SEC + start + 100, true);
     EXPECT_EQ(1, report.metrics_size());
     EXPECT_EQ(0, report.metrics(0).value_metrics().skipped_size());
 }
 
 TEST(PartialBucketE2eTest, TestValueMetricWithMinPartialBucket) {
-    StatsService service(nullptr, nullptr);
-    service.mPullerManager->RegisterPullAtomCallback(
+    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
+    service->mPullerManager->RegisterPullAtomCallback(
             /*uid=*/0, android::util::SUBSYSTEM_SLEEP_STATE, NS_PER_SEC, NS_PER_SEC * 10, {},
-            new FakeSubsystemSleepCallback());
+            SharedRefBase::make<FakeSubsystemSleepCallback>());
     // Partial buckets don't occur when app is first installed.
-    service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1, String16("v1"), String16(""));
+    service->mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1, String16("v1"), String16(""));
     SendConfig(service, MakeValueMetricConfig(60 * NS_PER_SEC /* One minute */));
     int64_t start = getElapsedRealtimeNs();  // This is the start-time the metrics producers are
                                              // initialized with.
 
     const int64_t endSkipped = 5 * 60 * NS_PER_SEC + start + 2;
-    service.mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start);
-    service.mUidMap->updateApp(endSkipped, String16(kApp1.c_str()), 1, 2, String16("v2"),
+    service->mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start);
+    service->mUidMap->updateApp(endSkipped, String16(kApp1.c_str()), 1, 2, String16("v2"),
                                String16(""));
 
     ConfigMetricsReport report =
-            GetReports(service.mProcessor, 5 * 60 * NS_PER_SEC + start + 100 * NS_PER_SEC, true);
+            GetReports(service->mProcessor, 5 * 60 * NS_PER_SEC + start + 100 * NS_PER_SEC, true);
     backfillStartEndTimestamp(&report);
 
     ASSERT_EQ(1, report.metrics_size());
@@ -253,38 +254,38 @@
 }
 
 TEST(PartialBucketE2eTest, TestGaugeMetricWithoutMinPartialBucket) {
-    StatsService service(nullptr, nullptr);
+    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
     // Partial buckets don't occur when app is first installed.
-    service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1, String16("v1"), String16(""));
+    service->mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1, String16("v1"), String16(""));
     SendConfig(service, MakeGaugeMetricConfig(0));
     int64_t start = getElapsedRealtimeNs();  // This is the start-time the metrics producers are
                                              // initialized with.
 
-    service.mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start);
-    service.mUidMap->updateApp(5 * 60 * NS_PER_SEC + start + 2, String16(kApp1.c_str()), 1, 2,
+    service->mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start);
+    service->mUidMap->updateApp(5 * 60 * NS_PER_SEC + start + 2, String16(kApp1.c_str()), 1, 2,
                                String16("v2"), String16(""));
 
     ConfigMetricsReport report =
-            GetReports(service.mProcessor, 5 * 60 * NS_PER_SEC + start + 100, true);
+            GetReports(service->mProcessor, 5 * 60 * NS_PER_SEC + start + 100, true);
     EXPECT_EQ(1, report.metrics_size());
     EXPECT_EQ(0, report.metrics(0).gauge_metrics().skipped_size());
 }
 
 TEST(PartialBucketE2eTest, TestGaugeMetricWithMinPartialBucket) {
-    StatsService service(nullptr, nullptr);
+    shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
     // Partial buckets don't occur when app is first installed.
-    service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1, String16("v1"), String16(""));
+    service->mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1, String16("v1"), String16(""));
     SendConfig(service, MakeGaugeMetricConfig(60 * NS_PER_SEC /* One minute */));
     int64_t start = getElapsedRealtimeNs();  // This is the start-time the metrics producers are
                                              // initialized with.
 
     const int64_t endSkipped = 5 * 60 * NS_PER_SEC + start + 2;
-    service.mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start);
-    service.mUidMap->updateApp(endSkipped, String16(kApp1.c_str()), 1, 2, String16("v2"),
-                               String16(""));
+    service->mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start);
+    service->mUidMap->updateApp(endSkipped, String16(kApp1.c_str()), 1, 2, String16("v2"),
+                                String16(""));
 
     ConfigMetricsReport report =
-            GetReports(service.mProcessor, 5 * 60 * NS_PER_SEC + start + 100 * NS_PER_SEC, true);
+            GetReports(service->mProcessor, 5 * 60 * NS_PER_SEC + start + 100 * NS_PER_SEC, true);
     backfillStartEndTimestamp(&report);
     ASSERT_EQ(1, report.metrics_size());
     ASSERT_EQ(1, report.metrics(0).gauge_metrics().skipped_size());
diff --git a/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp b/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp
index a140af8..99dbaf1 100644
--- a/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp
@@ -12,6 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include <android/binder_interface_utils.h>
 #include <gtest/gtest.h>
 
 #include "src/StatsLogProcessor.h"
@@ -20,6 +21,8 @@
 
 #include <vector>
 
+using ::ndk::SharedRefBase;
+
 namespace android {
 namespace os {
 namespace statsd {
@@ -61,316 +64,317 @@
 
 }  // namespace
 
-TEST(ValueMetricE2eTest, TestPulledEvents) {
-    auto config = CreateStatsdConfig();
-    int64_t baseTimeNs = getElapsedRealtimeNs();
-    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.value_metric(0).bucket()) * 1000000;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
-                                             new FakeSubsystemSleepCallback(),
-                                             android::util::SUBSYSTEM_SLEEP_STATE);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    processor->mPullerManager->ForceClearPullerCache();
-
-    int startBucketNum = processor->mMetricsManagers.begin()->second->
-            mAllMetricProducers[0]->getCurrentBucketNum();
-    EXPECT_GT(startBucketNum, (int64_t)0);
-
-    // When creating the config, the value metric producer should register the alarm at the
-    // end of the current bucket.
-    EXPECT_EQ((size_t)1, processor->mPullerManager->mReceivers.size());
-    EXPECT_EQ(bucketSizeNs,
-              processor->mPullerManager->mReceivers.begin()->second.front().intervalNs);
-    int64_t& expectedPullTimeNs =
-            processor->mPullerManager->mReceivers.begin()->second.front().nextPullTimeNs;
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, expectedPullTimeNs);
-
-    auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                        configAddedTimeNs + 55);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                                       configAddedTimeNs + 65);
-    processor->OnLogEvent(screenOnEvent.get());
-
-    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                   configAddedTimeNs + 75);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    // Pulling alarm arrives on time and reset the sequential pulling alarm.
-    processor->informPullAlarmFired(expectedPullTimeNs + 1);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 2 * bucketSizeNs, expectedPullTimeNs);
-
-    processor->informPullAlarmFired(expectedPullTimeNs + 1);
-
-    screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                                       configAddedTimeNs + 2 * bucketSizeNs + 15);
-    processor->OnLogEvent(screenOnEvent.get());
-
-    processor->informPullAlarmFired(expectedPullTimeNs + 1);
-
-    processor->informPullAlarmFired(expectedPullTimeNs + 1);
-
-    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                   configAddedTimeNs + 4 * bucketSizeNs + 11);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    processor->informPullAlarmFired(expectedPullTimeNs + 1);
-
-    processor->informPullAlarmFired(expectedPullTimeNs + 1);
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    StatsLogReport::ValueMetricDataWrapper valueMetrics;
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(0).value_metrics(), &valueMetrics);
-    EXPECT_GT((int)valueMetrics.data_size(), 1);
-
-    auto data = valueMetrics.data(0);
-    EXPECT_EQ(android::util::SUBSYSTEM_SLEEP_STATE, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* subsystem name field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
-    // We have 4 buckets, the first one was incomplete since the condition was unknown.
-    EXPECT_EQ(4, data.bucket_info_size());
-
-    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-    EXPECT_EQ(1, data.bucket_info(0).values_size());
-
-    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos());
-    EXPECT_EQ(1, data.bucket_info(1).values_size());
-
-    EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos());
-    EXPECT_EQ(1, data.bucket_info(2).values_size());
-
-    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(3).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(3).end_bucket_elapsed_nanos());
-    EXPECT_EQ(1, data.bucket_info(3).values_size());
-}
-
-TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm) {
-    auto config = CreateStatsdConfig();
-    int64_t baseTimeNs = getElapsedRealtimeNs();
-    // 10 mins == 2 bucket durations.
-    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.value_metric(0).bucket()) * 1000000;
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
-                                             new FakeSubsystemSleepCallback(),
-                                             android::util::SUBSYSTEM_SLEEP_STATE);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    processor->mPullerManager->ForceClearPullerCache();
-
-    int startBucketNum = processor->mMetricsManagers.begin()->second->
-            mAllMetricProducers[0]->getCurrentBucketNum();
-    EXPECT_GT(startBucketNum, (int64_t)0);
-
-    // When creating the config, the value metric producer should register the alarm at the
-    // end of the current bucket.
-    EXPECT_EQ((size_t)1, processor->mPullerManager->mReceivers.size());
-    EXPECT_EQ(bucketSizeNs,
-              processor->mPullerManager->mReceivers.begin()->second.front().intervalNs);
-    int64_t& expectedPullTimeNs =
-            processor->mPullerManager->mReceivers.begin()->second.front().nextPullTimeNs;
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, expectedPullTimeNs);
-
-    // Screen off/on/off events.
-    auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                        configAddedTimeNs + 55);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                                       configAddedTimeNs + 65);
-    processor->OnLogEvent(screenOnEvent.get());
-
-    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                   configAddedTimeNs + 75);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    // Pulling alarm arrives late by 2 buckets and 1 ns. 2 buckets late is too far away in the
-    // future, data will be skipped.
-    processor->informPullAlarmFired(expectedPullTimeNs + 2 * bucketSizeNs + 1);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 4 * bucketSizeNs, expectedPullTimeNs);
-
-    // This screen state change will start a new bucket.
-    screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
-                                                       configAddedTimeNs + 4 * bucketSizeNs + 65);
-    processor->OnLogEvent(screenOnEvent.get());
-
-    // The alarm is delayed but we already created a bucket thanks to the screen state condition.
-    // This bucket does not have to be skipped since the alarm arrives in time for the next bucket.
-    processor->informPullAlarmFired(expectedPullTimeNs + bucketSizeNs + 21);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 6 * bucketSizeNs, expectedPullTimeNs);
-
-    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
-                                                   configAddedTimeNs + 6 * bucketSizeNs + 31);
-    processor->OnLogEvent(screenOffEvent.get());
-
-    processor->informPullAlarmFired(expectedPullTimeNs + bucketSizeNs + 21);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 8 * bucketSizeNs, expectedPullTimeNs);
-
-    processor->informPullAlarmFired(expectedPullTimeNs + 1);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 9 * bucketSizeNs, expectedPullTimeNs);
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, configAddedTimeNs + 9 * bucketSizeNs + 10, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    StatsLogReport::ValueMetricDataWrapper valueMetrics;
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(0).value_metrics(), &valueMetrics);
-    EXPECT_GT((int)valueMetrics.data_size(), 1);
-
-    auto data = valueMetrics.data(0);
-    EXPECT_EQ(android::util::SUBSYSTEM_SLEEP_STATE, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* subsystem name field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
-    EXPECT_EQ(3, data.bucket_info_size());
-
-    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
-    EXPECT_EQ(1, data.bucket_info(0).values_size());
-
-    EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 9 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos());
-    EXPECT_EQ(1, data.bucket_info(1).values_size());
-
-    EXPECT_EQ(baseTimeNs + 9 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 10 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos());
-    EXPECT_EQ(1, data.bucket_info(2).values_size());
-}
-
-TEST(ValueMetricE2eTest, TestPulledEvents_WithActivation) {
-    auto config = CreateStatsdConfig(false);
-    int64_t baseTimeNs = getElapsedRealtimeNs();
-    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
-    int64_t bucketSizeNs =
-        TimeUnitToBucketSizeInMillis(config.value_metric(0).bucket()) * 1000000;
-
-    auto batterySaverStartMatcher = CreateBatterySaverModeStartAtomMatcher();
-    *config.add_atom_matcher() = batterySaverStartMatcher;
-    const int64_t ttlNs = 2 * bucketSizeNs; // Two buckets.
-    auto metric_activation = config.add_metric_activation();
-    metric_activation->set_metric_id(metricId);
-    metric_activation->set_activation_type(ACTIVATE_IMMEDIATELY);
-    auto event_activation = metric_activation->add_event_activation();
-    event_activation->set_atom_matcher_id(batterySaverStartMatcher.id());
-    event_activation->set_ttl_seconds(ttlNs / 1000000000);
-
-    ConfigKey cfgKey;
-    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
-                                             new FakeSubsystemSleepCallback(),
-                                             android::util::SUBSYSTEM_SLEEP_STATE);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    processor->mPullerManager->ForceClearPullerCache();
-
-    int startBucketNum = processor->mMetricsManagers.begin()->second->
-            mAllMetricProducers[0]->getCurrentBucketNum();
-    EXPECT_GT(startBucketNum, (int64_t)0);
-    EXPECT_FALSE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
-
-    // When creating the config, the value metric producer should register the alarm at the
-    // end of the current bucket.
-    EXPECT_EQ((size_t)1, processor->mPullerManager->mReceivers.size());
-    EXPECT_EQ(bucketSizeNs,
-              processor->mPullerManager->mReceivers.begin()->second.front().intervalNs);
-    int64_t& expectedPullTimeNs =
-            processor->mPullerManager->mReceivers.begin()->second.front().nextPullTimeNs;
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, expectedPullTimeNs);
-
-    // Pulling alarm arrives on time and reset the sequential pulling alarm.
-    processor->informPullAlarmFired(expectedPullTimeNs + 1); // 15 mins + 1 ns.
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 2 * bucketSizeNs, expectedPullTimeNs);
-    EXPECT_FALSE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
-
-    // Activate the metric. A pull occurs here
-    const int64_t activationNs = configAddedTimeNs + bucketSizeNs + (2 * 1000 * 1000); // 2 millis.
-    auto batterySaverOnEvent = CreateBatterySaverOnEvent(activationNs);
-    processor->OnLogEvent(batterySaverOnEvent.get()); // 15 mins + 2 ms.
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
-
-    processor->informPullAlarmFired(expectedPullTimeNs + 1); // 20 mins + 1 ns.
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 3 * bucketSizeNs, expectedPullTimeNs);
-
-    processor->informPullAlarmFired(expectedPullTimeNs + 2); // 25 mins + 2 ns.
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 4 * bucketSizeNs, expectedPullTimeNs);
-
-    // Create random event to deactivate metric.
-    auto deactivationEvent = CreateScreenBrightnessChangedEvent(50, activationNs + ttlNs + 1);
-    processor->OnLogEvent(deactivationEvent.get());
-    EXPECT_FALSE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
-
-    processor->informPullAlarmFired(expectedPullTimeNs + 3);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 5 * bucketSizeNs, expectedPullTimeNs);
-
-    processor->informPullAlarmFired(expectedPullTimeNs + 4);
-    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 6 * bucketSizeNs, expectedPullTimeNs);
-
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(1, reports.reports_size());
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    StatsLogReport::ValueMetricDataWrapper valueMetrics;
-    sortMetricDataByDimensionsValue(
-            reports.reports(0).metrics(0).value_metrics(), &valueMetrics);
-    EXPECT_GT((int)valueMetrics.data_size(), 0);
-
-    auto data = valueMetrics.data(0);
-    EXPECT_EQ(android::util::SUBSYSTEM_SLEEP_STATE, data.dimensions_in_what().field());
-    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
-    EXPECT_EQ(1 /* subsystem name field */,
-              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
-    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
-    // We have 2 full buckets, the two surrounding the activation are dropped.
-    EXPECT_EQ(2, data.bucket_info_size());
-
-    auto bucketInfo = data.bucket_info(0);
-    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, bucketInfo.start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
-    EXPECT_EQ(1, bucketInfo.values_size());
-
-    bucketInfo = data.bucket_info(1);
-    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, bucketInfo.start_bucket_elapsed_nanos());
-    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
-    EXPECT_EQ(1, bucketInfo.values_size());
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(ValueMetricE2eTest, TestPulledEvents) {
+//    auto config = CreateStatsdConfig();
+//    int64_t baseTimeNs = getElapsedRealtimeNs();
+//    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.value_metric(0).bucket()) * 1000000;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
+//                                             SharedRefBase::make<FakeSubsystemSleepCallback>(),
+//                                             android::util::SUBSYSTEM_SLEEP_STATE);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    processor->mPullerManager->ForceClearPullerCache();
+//
+//    int startBucketNum = processor->mMetricsManagers.begin()->second->
+//            mAllMetricProducers[0]->getCurrentBucketNum();
+//    EXPECT_GT(startBucketNum, (int64_t)0);
+//
+//    // When creating the config, the value metric producer should register the alarm at the
+//    // end of the current bucket.
+//    EXPECT_EQ((size_t)1, processor->mPullerManager->mReceivers.size());
+//    EXPECT_EQ(bucketSizeNs,
+//              processor->mPullerManager->mReceivers.begin()->second.front().intervalNs);
+//    int64_t& expectedPullTimeNs =
+//            processor->mPullerManager->mReceivers.begin()->second.front().nextPullTimeNs;
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, expectedPullTimeNs);
+//
+//    auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                        configAddedTimeNs + 55);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                                       configAddedTimeNs + 65);
+//    processor->OnLogEvent(screenOnEvent.get());
+//
+//    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                   configAddedTimeNs + 75);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    // Pulling alarm arrives on time and reset the sequential pulling alarm.
+//    processor->informPullAlarmFired(expectedPullTimeNs + 1);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 2 * bucketSizeNs, expectedPullTimeNs);
+//
+//    processor->informPullAlarmFired(expectedPullTimeNs + 1);
+//
+//    screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                                       configAddedTimeNs + 2 * bucketSizeNs + 15);
+//    processor->OnLogEvent(screenOnEvent.get());
+//
+//    processor->informPullAlarmFired(expectedPullTimeNs + 1);
+//
+//    processor->informPullAlarmFired(expectedPullTimeNs + 1);
+//
+//    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                   configAddedTimeNs + 4 * bucketSizeNs + 11);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    processor->informPullAlarmFired(expectedPullTimeNs + 1);
+//
+//    processor->informPullAlarmFired(expectedPullTimeNs + 1);
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    StatsLogReport::ValueMetricDataWrapper valueMetrics;
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(0).value_metrics(), &valueMetrics);
+//    EXPECT_GT((int)valueMetrics.data_size(), 1);
+//
+//    auto data = valueMetrics.data(0);
+//    EXPECT_EQ(android::util::SUBSYSTEM_SLEEP_STATE, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* subsystem name field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
+//    // We have 4 buckets, the first one was incomplete since the condition was unknown.
+//    EXPECT_EQ(4, data.bucket_info_size());
+//
+//    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//    EXPECT_EQ(1, data.bucket_info(0).values_size());
+//
+//    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos());
+//    EXPECT_EQ(1, data.bucket_info(1).values_size());
+//
+//    EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos());
+//    EXPECT_EQ(1, data.bucket_info(2).values_size());
+//
+//    EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(3).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(3).end_bucket_elapsed_nanos());
+//    EXPECT_EQ(1, data.bucket_info(3).values_size());
+//}
+//
+//TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm) {
+//    auto config = CreateStatsdConfig();
+//    int64_t baseTimeNs = getElapsedRealtimeNs();
+//    // 10 mins == 2 bucket durations.
+//    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.value_metric(0).bucket()) * 1000000;
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
+//                                             SharedRefBase::make<FakeSubsystemSleepCallback>(),
+//                                             android::util::SUBSYSTEM_SLEEP_STATE);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    processor->mPullerManager->ForceClearPullerCache();
+//
+//    int startBucketNum = processor->mMetricsManagers.begin()->second->
+//            mAllMetricProducers[0]->getCurrentBucketNum();
+//    EXPECT_GT(startBucketNum, (int64_t)0);
+//
+//    // When creating the config, the value metric producer should register the alarm at the
+//    // end of the current bucket.
+//    EXPECT_EQ((size_t)1, processor->mPullerManager->mReceivers.size());
+//    EXPECT_EQ(bucketSizeNs,
+//              processor->mPullerManager->mReceivers.begin()->second.front().intervalNs);
+//    int64_t& expectedPullTimeNs =
+//            processor->mPullerManager->mReceivers.begin()->second.front().nextPullTimeNs;
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, expectedPullTimeNs);
+//
+//    // Screen off/on/off events.
+//    auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                        configAddedTimeNs + 55);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                                       configAddedTimeNs + 65);
+//    processor->OnLogEvent(screenOnEvent.get());
+//
+//    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                   configAddedTimeNs + 75);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    // Pulling alarm arrives late by 2 buckets and 1 ns. 2 buckets late is too far away in the
+//    // future, data will be skipped.
+//    processor->informPullAlarmFired(expectedPullTimeNs + 2 * bucketSizeNs + 1);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 4 * bucketSizeNs, expectedPullTimeNs);
+//
+//    // This screen state change will start a new bucket.
+//    screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON,
+//                                                       configAddedTimeNs + 4 * bucketSizeNs + 65);
+//    processor->OnLogEvent(screenOnEvent.get());
+//
+//    // The alarm is delayed but we already created a bucket thanks to the screen state condition.
+//    // This bucket does not have to be skipped since the alarm arrives in time for the next bucket.
+//    processor->informPullAlarmFired(expectedPullTimeNs + bucketSizeNs + 21);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 6 * bucketSizeNs, expectedPullTimeNs);
+//
+//    screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF,
+//                                                   configAddedTimeNs + 6 * bucketSizeNs + 31);
+//    processor->OnLogEvent(screenOffEvent.get());
+//
+//    processor->informPullAlarmFired(expectedPullTimeNs + bucketSizeNs + 21);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 8 * bucketSizeNs, expectedPullTimeNs);
+//
+//    processor->informPullAlarmFired(expectedPullTimeNs + 1);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 9 * bucketSizeNs, expectedPullTimeNs);
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, configAddedTimeNs + 9 * bucketSizeNs + 10, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    StatsLogReport::ValueMetricDataWrapper valueMetrics;
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(0).value_metrics(), &valueMetrics);
+//    EXPECT_GT((int)valueMetrics.data_size(), 1);
+//
+//    auto data = valueMetrics.data(0);
+//    EXPECT_EQ(android::util::SUBSYSTEM_SLEEP_STATE, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* subsystem name field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
+//    EXPECT_EQ(3, data.bucket_info_size());
+//
+//    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos());
+//    EXPECT_EQ(1, data.bucket_info(0).values_size());
+//
+//    EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 9 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos());
+//    EXPECT_EQ(1, data.bucket_info(1).values_size());
+//
+//    EXPECT_EQ(baseTimeNs + 9 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 10 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos());
+//    EXPECT_EQ(1, data.bucket_info(2).values_size());
+//}
+//
+//TEST(ValueMetricE2eTest, TestPulledEvents_WithActivation) {
+//    auto config = CreateStatsdConfig(false);
+//    int64_t baseTimeNs = getElapsedRealtimeNs();
+//    int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
+//    int64_t bucketSizeNs =
+//        TimeUnitToBucketSizeInMillis(config.value_metric(0).bucket()) * 1000000;
+//
+//    auto batterySaverStartMatcher = CreateBatterySaverModeStartAtomMatcher();
+//    *config.add_atom_matcher() = batterySaverStartMatcher;
+//    const int64_t ttlNs = 2 * bucketSizeNs; // Two buckets.
+//    auto metric_activation = config.add_metric_activation();
+//    metric_activation->set_metric_id(metricId);
+//    metric_activation->set_activation_type(ACTIVATE_IMMEDIATELY);
+//    auto event_activation = metric_activation->add_event_activation();
+//    event_activation->set_atom_matcher_id(batterySaverStartMatcher.id());
+//    event_activation->set_ttl_seconds(ttlNs / 1000000000);
+//
+//    ConfigKey cfgKey;
+//    auto processor = CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
+//                                             SharedRefBase::make<FakeSubsystemSleepCallback>(),
+//                                             android::util::SUBSYSTEM_SLEEP_STATE);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    processor->mPullerManager->ForceClearPullerCache();
+//
+//    int startBucketNum = processor->mMetricsManagers.begin()->second->
+//            mAllMetricProducers[0]->getCurrentBucketNum();
+//    EXPECT_GT(startBucketNum, (int64_t)0);
+//    EXPECT_FALSE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
+//
+//    // When creating the config, the value metric producer should register the alarm at the
+//    // end of the current bucket.
+//    EXPECT_EQ((size_t)1, processor->mPullerManager->mReceivers.size());
+//    EXPECT_EQ(bucketSizeNs,
+//              processor->mPullerManager->mReceivers.begin()->second.front().intervalNs);
+//    int64_t& expectedPullTimeNs =
+//            processor->mPullerManager->mReceivers.begin()->second.front().nextPullTimeNs;
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, expectedPullTimeNs);
+//
+//    // Pulling alarm arrives on time and reset the sequential pulling alarm.
+//    processor->informPullAlarmFired(expectedPullTimeNs + 1); // 15 mins + 1 ns.
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 2 * bucketSizeNs, expectedPullTimeNs);
+//    EXPECT_FALSE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
+//
+//    // Activate the metric. A pull occurs here
+//    const int64_t activationNs = configAddedTimeNs + bucketSizeNs + (2 * 1000 * 1000); // 2 millis.
+//    auto batterySaverOnEvent = CreateBatterySaverOnEvent(activationNs);
+//    processor->OnLogEvent(batterySaverOnEvent.get()); // 15 mins + 2 ms.
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
+//
+//    processor->informPullAlarmFired(expectedPullTimeNs + 1); // 20 mins + 1 ns.
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 3 * bucketSizeNs, expectedPullTimeNs);
+//
+//    processor->informPullAlarmFired(expectedPullTimeNs + 2); // 25 mins + 2 ns.
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 4 * bucketSizeNs, expectedPullTimeNs);
+//
+//    // Create random event to deactivate metric.
+//    auto deactivationEvent = CreateScreenBrightnessChangedEvent(50, activationNs + ttlNs + 1);
+//    processor->OnLogEvent(deactivationEvent.get());
+//    EXPECT_FALSE(processor->mMetricsManagers.begin()->second->mAllMetricProducers[0]->isActive());
+//
+//    processor->informPullAlarmFired(expectedPullTimeNs + 3);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 5 * bucketSizeNs, expectedPullTimeNs);
+//
+//    processor->informPullAlarmFired(expectedPullTimeNs + 4);
+//    EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 6 * bucketSizeNs, expectedPullTimeNs);
+//
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(1, reports.reports_size());
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    StatsLogReport::ValueMetricDataWrapper valueMetrics;
+//    sortMetricDataByDimensionsValue(
+//            reports.reports(0).metrics(0).value_metrics(), &valueMetrics);
+//    EXPECT_GT((int)valueMetrics.data_size(), 0);
+//
+//    auto data = valueMetrics.data(0);
+//    EXPECT_EQ(android::util::SUBSYSTEM_SLEEP_STATE, data.dimensions_in_what().field());
+//    EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+//    EXPECT_EQ(1 /* subsystem name field */,
+//              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+//    EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty());
+//    // We have 2 full buckets, the two surrounding the activation are dropped.
+//    EXPECT_EQ(2, data.bucket_info_size());
+//
+//    auto bucketInfo = data.bucket_info(0);
+//    EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, bucketInfo.start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
+//    EXPECT_EQ(1, bucketInfo.values_size());
+//
+//    bucketInfo = data.bucket_info(1);
+//    EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, bucketInfo.start_bucket_elapsed_nanos());
+//    EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, bucketInfo.end_bucket_elapsed_nanos());
+//    EXPECT_EQ(1, bucketInfo.values_size());
+//}
 
 /**
  * Test initialization of a simple value metric that is sliced by a state.
diff --git a/cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp b/cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp
index e13bf14..21092e2 100644
--- a/cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp
+++ b/cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp
@@ -69,282 +69,284 @@
                                                       CreateAttribution(222, "GMSCoreModule1"),
                                                       CreateAttribution(222, "GMSCoreModule2")};
 
-/*
-Events:
-Screen off is met from (200ns,1 min+500ns].
-Acquire event for wl1 from 2ns to 1min+2ns
-Acquire event for wl2 from 1min-10ns to 2min-15ns
-*/
-void FeedEvents(StatsdConfig config, sp<StatsLogProcessor> processor) {
-    uint64_t bucketStartTimeNs = 10000000000;
-    uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
-
-    auto screenTurnedOnEvent = CreateScreenStateChangedEvent(
-            android::view::DisplayStateEnum::DISPLAY_STATE_ON, bucketStartTimeNs + 1);
-    auto screenTurnedOffEvent = CreateScreenStateChangedEvent(
-            android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 200);
-    auto screenTurnedOnEvent2 =
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-                                          bucketStartTimeNs + bucketSizeNs + 500);
-
-    auto acquireEvent1 = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 2);
-    auto releaseEvent1 =
-            CreateReleaseWakelockEvent(attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + 2);
-    auto acquireEvent2 =
-            CreateAcquireWakelockEvent(attributions2, "wl2", bucketStartTimeNs + bucketSizeNs - 10);
-    auto releaseEvent2 = CreateReleaseWakelockEvent(attributions2, "wl2",
-                                                    bucketStartTimeNs + 2 * bucketSizeNs - 15);
-
-    std::vector<std::unique_ptr<LogEvent>> events;
-
-    events.push_back(std::move(screenTurnedOnEvent));
-    events.push_back(std::move(screenTurnedOffEvent));
-    events.push_back(std::move(screenTurnedOnEvent2));
-    events.push_back(std::move(acquireEvent1));
-    events.push_back(std::move(acquireEvent2));
-    events.push_back(std::move(releaseEvent1));
-    events.push_back(std::move(releaseEvent2));
-
-    sortLogEventsByTimestamp(&events);
-
-    for (const auto& event : events) {
-        processor->OnLogEvent(event.get());
-    }
-}
+// TODO(b/149590301): Update this helper to use new socket schema.
+///*
+//Events:
+//Screen off is met from (200ns,1 min+500ns].
+//Acquire event for wl1 from 2ns to 1min+2ns
+//Acquire event for wl2 from 1min-10ns to 2min-15ns
+//*/
+//void FeedEvents(StatsdConfig config, sp<StatsLogProcessor> processor) {
+//    uint64_t bucketStartTimeNs = 10000000000;
+//    uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
+//
+//    auto screenTurnedOnEvent = CreateScreenStateChangedEvent(
+//            android::view::DisplayStateEnum::DISPLAY_STATE_ON, bucketStartTimeNs + 1);
+//    auto screenTurnedOffEvent = CreateScreenStateChangedEvent(
+//            android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 200);
+//    auto screenTurnedOnEvent2 =
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//                                          bucketStartTimeNs + bucketSizeNs + 500);
+//
+//    auto acquireEvent1 = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 2);
+//    auto releaseEvent1 =
+//            CreateReleaseWakelockEvent(attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + 2);
+//    auto acquireEvent2 =
+//            CreateAcquireWakelockEvent(attributions2, "wl2", bucketStartTimeNs + bucketSizeNs - 10);
+//    auto releaseEvent2 = CreateReleaseWakelockEvent(attributions2, "wl2",
+//                                                    bucketStartTimeNs + 2 * bucketSizeNs - 15);
+//
+//    std::vector<std::unique_ptr<LogEvent>> events;
+//
+//    events.push_back(std::move(screenTurnedOnEvent));
+//    events.push_back(std::move(screenTurnedOffEvent));
+//    events.push_back(std::move(screenTurnedOnEvent2));
+//    events.push_back(std::move(acquireEvent1));
+//    events.push_back(std::move(acquireEvent2));
+//    events.push_back(std::move(releaseEvent1));
+//    events.push_back(std::move(releaseEvent2));
+//
+//    sortLogEventsByTimestamp(&events);
+//
+//    for (const auto& event : events) {
+//        processor->OnLogEvent(event.get());
+//    }
+//}
 
 }  // namespace
 
-TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration1) {
-    ConfigKey cfgKey;
-    auto config = CreateStatsdConfig(DurationMetric::SUM);
-    uint64_t bucketStartTimeNs = 10000000000;
-    uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    FeedEvents(config, processor);
-    vector<uint8_t> buffer;
-    ConfigMetricsReportList reports;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs - 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-
-    EXPECT_EQ(reports.reports_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
-    // Only 1 dimension output. The tag dimension in the predicate has been aggregated.
-    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data_size(), 1);
-
-    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
-    // Validate dimension value.
-    ValidateAttributionUidDimension(data.dimensions_in_what(),
-                                    android::util::WAKELOCK_STATE_CHANGED, 111);
-    // Validate bucket info.
-    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data(0).bucket_info_size(), 1);
-    data = reports.reports(0).metrics(0).duration_metrics().data(0);
-    // The wakelock holding interval starts from the screen off event and to the end of the 1st
-    // bucket.
-    EXPECT_EQ((unsigned long long)data.bucket_info(0).duration_nanos(), bucketSizeNs - 200);
-}
-
-TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration2) {
-    ConfigKey cfgKey;
-    auto config = CreateStatsdConfig(DurationMetric::SUM);
-    uint64_t bucketStartTimeNs = 10000000000;
-    uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    FeedEvents(config, processor);
-    vector<uint8_t> buffer;
-    ConfigMetricsReportList reports;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(reports.reports_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data_size(), 1);
-    // Dump the report after the end of 2nd bucket.
-    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data(0).bucket_info_size(), 2);
-    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
-    // Validate dimension value.
-    ValidateAttributionUidDimension(data.dimensions_in_what(),
-                                    android::util::WAKELOCK_STATE_CHANGED, 111);
-    // Two output buckets.
-    // The wakelock holding interval in the 1st bucket starts from the screen off event and to
-    // the end of the 1st bucket.
-    EXPECT_EQ((unsigned long long)data.bucket_info(0).duration_nanos(),
-              bucketStartTimeNs + bucketSizeNs - (bucketStartTimeNs + 200));
-    // The wakelock holding interval in the 2nd bucket starts at the beginning of the bucket and
-    // ends at the second screen on event.
-    EXPECT_EQ((unsigned long long)data.bucket_info(1).duration_nanos(), 500UL);
-}
-TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration3) {
-    ConfigKey cfgKey;
-    auto config = CreateStatsdConfig(DurationMetric::SUM);
-    uint64_t bucketStartTimeNs = 10000000000;
-    uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    FeedEvents(config, processor);
-    vector<uint8_t> buffer;
-    ConfigMetricsReportList reports;
-
-    std::vector<std::unique_ptr<LogEvent>> events;
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-                                          bucketStartTimeNs + 2 * bucketSizeNs + 90));
-    events.push_back(CreateAcquireWakelockEvent(attributions1, "wl3",
-                                                bucketStartTimeNs + 2 * bucketSizeNs + 100));
-    events.push_back(CreateReleaseWakelockEvent(attributions1, "wl3",
-                                                bucketStartTimeNs + 5 * bucketSizeNs + 100));
-    sortLogEventsByTimestamp(&events);
-    for (const auto& event : events) {
-        processor->OnLogEvent(event.get());
-    }
-
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + 6 * bucketSizeNs + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(reports.reports_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data(0).bucket_info_size(), 6);
-    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
-    ValidateAttributionUidDimension(data.dimensions_in_what(),
-                                    android::util::WAKELOCK_STATE_CHANGED, 111);
-    // The last wakelock holding spans 4 buckets.
-    EXPECT_EQ((unsigned long long)data.bucket_info(2).duration_nanos(), bucketSizeNs - 100);
-    EXPECT_EQ((unsigned long long)data.bucket_info(3).duration_nanos(), bucketSizeNs);
-    EXPECT_EQ((unsigned long long)data.bucket_info(4).duration_nanos(), bucketSizeNs);
-    EXPECT_EQ((unsigned long long)data.bucket_info(5).duration_nanos(), 100UL);
-}
-
-TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration1) {
-    ConfigKey cfgKey;
-    auto config = CreateStatsdConfig(DurationMetric::MAX_SPARSE);
-    uint64_t bucketStartTimeNs = 10000000000;
-    uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    FeedEvents(config, processor);
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs - 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-
-    EXPECT_EQ(reports.reports_size(), 1);
-
-    // When using ProtoOutputStream, if nothing written to a sub msg, it won't be treated as
-    // one. It was previsouly 1 because we had a fake onDumpReport which calls add_metric() by
-    // itself.
-    EXPECT_EQ(1, reports.reports(0).metrics_size());
-    EXPECT_EQ(0, reports.reports(0).metrics(0).duration_metrics().data_size());
-}
-
-TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration2) {
-    ConfigKey cfgKey;
-    auto config = CreateStatsdConfig(DurationMetric::MAX_SPARSE);
-    uint64_t bucketStartTimeNs = 10000000000;
-    uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    FeedEvents(config, processor);
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(reports.reports_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data_size(), 1);
-    // Dump the report after the end of 2nd bucket. One dimension with one bucket.
-    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data(0).bucket_info_size(), 1);
-    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
-    // Validate dimension value.
-    ValidateAttributionUidDimension(data.dimensions_in_what(),
-                                    android::util::WAKELOCK_STATE_CHANGED, 111);
-    // The max is acquire event for wl1 to screen off start.
-    EXPECT_EQ((unsigned long long)data.bucket_info(0).duration_nanos(), bucketSizeNs + 2 - 200);
-}
-
-TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration3) {
-    ConfigKey cfgKey;
-    auto config = CreateStatsdConfig(DurationMetric::MAX_SPARSE);
-    uint64_t bucketStartTimeNs = 10000000000;
-    uint64_t bucketSizeNs =
-            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
-    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
-    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
-    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
-    FeedEvents(config, processor);
-    ConfigMetricsReportList reports;
-    vector<uint8_t> buffer;
-
-    std::vector<std::unique_ptr<LogEvent>> events;
-    events.push_back(
-            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-                                          bucketStartTimeNs + 2 * bucketSizeNs + 90));
-    events.push_back(CreateAcquireWakelockEvent(attributions1, "wl3",
-                                                bucketStartTimeNs + 2 * bucketSizeNs + 100));
-    events.push_back(CreateReleaseWakelockEvent(attributions1, "wl3",
-                                                bucketStartTimeNs + 5 * bucketSizeNs + 100));
-    sortLogEventsByTimestamp(&events);
-    for (const auto& event : events) {
-        processor->OnLogEvent(event.get());
-    }
-
-    processor->onDumpReport(cfgKey, bucketStartTimeNs + 6 * bucketSizeNs + 1, false, true,
-                            ADB_DUMP, FAST, &buffer);
-    EXPECT_TRUE(buffer.size() > 0);
-    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
-    backfillDimensionPath(&reports);
-    backfillStringInReport(&reports);
-    backfillStartEndTimestamp(&reports);
-    EXPECT_EQ(reports.reports_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data_size(), 1);
-    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data(0).bucket_info_size(), 2);
-    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
-    ValidateAttributionUidDimension(data.dimensions_in_what(),
-                                    android::util::WAKELOCK_STATE_CHANGED, 111);
-    // The last wakelock holding spans 4 buckets.
-    EXPECT_EQ((unsigned long long)data.bucket_info(1).duration_nanos(), 3 * bucketSizeNs);
-    EXPECT_EQ((unsigned long long)data.bucket_info(1).start_bucket_elapsed_nanos(),
-              bucketStartTimeNs + 5 * bucketSizeNs);
-    EXPECT_EQ((unsigned long long)data.bucket_info(1).end_bucket_elapsed_nanos(),
-              bucketStartTimeNs + 6 * bucketSizeNs);
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration1) {
+//    ConfigKey cfgKey;
+//    auto config = CreateStatsdConfig(DurationMetric::SUM);
+//    uint64_t bucketStartTimeNs = 10000000000;
+//    uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    FeedEvents(config, processor);
+//    vector<uint8_t> buffer;
+//    ConfigMetricsReportList reports;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs - 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//
+//    EXPECT_EQ(reports.reports_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
+//    // Only 1 dimension output. The tag dimension in the predicate has been aggregated.
+//    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data_size(), 1);
+//
+//    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
+//    // Validate dimension value.
+//    ValidateAttributionUidDimension(data.dimensions_in_what(),
+//                                    android::util::WAKELOCK_STATE_CHANGED, 111);
+//    // Validate bucket info.
+//    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data(0).bucket_info_size(), 1);
+//    data = reports.reports(0).metrics(0).duration_metrics().data(0);
+//    // The wakelock holding interval starts from the screen off event and to the end of the 1st
+//    // bucket.
+//    EXPECT_EQ((unsigned long long)data.bucket_info(0).duration_nanos(), bucketSizeNs - 200);
+//}
+//
+//TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration2) {
+//    ConfigKey cfgKey;
+//    auto config = CreateStatsdConfig(DurationMetric::SUM);
+//    uint64_t bucketStartTimeNs = 10000000000;
+//    uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    FeedEvents(config, processor);
+//    vector<uint8_t> buffer;
+//    ConfigMetricsReportList reports;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(reports.reports_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data_size(), 1);
+//    // Dump the report after the end of 2nd bucket.
+//    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data(0).bucket_info_size(), 2);
+//    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
+//    // Validate dimension value.
+//    ValidateAttributionUidDimension(data.dimensions_in_what(),
+//                                    android::util::WAKELOCK_STATE_CHANGED, 111);
+//    // Two output buckets.
+//    // The wakelock holding interval in the 1st bucket starts from the screen off event and to
+//    // the end of the 1st bucket.
+//    EXPECT_EQ((unsigned long long)data.bucket_info(0).duration_nanos(),
+//              bucketStartTimeNs + bucketSizeNs - (bucketStartTimeNs + 200));
+//    // The wakelock holding interval in the 2nd bucket starts at the beginning of the bucket and
+//    // ends at the second screen on event.
+//    EXPECT_EQ((unsigned long long)data.bucket_info(1).duration_nanos(), 500UL);
+//}
+//TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration3) {
+//    ConfigKey cfgKey;
+//    auto config = CreateStatsdConfig(DurationMetric::SUM);
+//    uint64_t bucketStartTimeNs = 10000000000;
+//    uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    FeedEvents(config, processor);
+//    vector<uint8_t> buffer;
+//    ConfigMetricsReportList reports;
+//
+//    std::vector<std::unique_ptr<LogEvent>> events;
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//                                          bucketStartTimeNs + 2 * bucketSizeNs + 90));
+//    events.push_back(CreateAcquireWakelockEvent(attributions1, "wl3",
+//                                                bucketStartTimeNs + 2 * bucketSizeNs + 100));
+//    events.push_back(CreateReleaseWakelockEvent(attributions1, "wl3",
+//                                                bucketStartTimeNs + 5 * bucketSizeNs + 100));
+//    sortLogEventsByTimestamp(&events);
+//    for (const auto& event : events) {
+//        processor->OnLogEvent(event.get());
+//    }
+//
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + 6 * bucketSizeNs + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(reports.reports_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data(0).bucket_info_size(), 6);
+//    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
+//    ValidateAttributionUidDimension(data.dimensions_in_what(),
+//                                    android::util::WAKELOCK_STATE_CHANGED, 111);
+//    // The last wakelock holding spans 4 buckets.
+//    EXPECT_EQ((unsigned long long)data.bucket_info(2).duration_nanos(), bucketSizeNs - 100);
+//    EXPECT_EQ((unsigned long long)data.bucket_info(3).duration_nanos(), bucketSizeNs);
+//    EXPECT_EQ((unsigned long long)data.bucket_info(4).duration_nanos(), bucketSizeNs);
+//    EXPECT_EQ((unsigned long long)data.bucket_info(5).duration_nanos(), 100UL);
+//}
+//
+//TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration1) {
+//    ConfigKey cfgKey;
+//    auto config = CreateStatsdConfig(DurationMetric::MAX_SPARSE);
+//    uint64_t bucketStartTimeNs = 10000000000;
+//    uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    FeedEvents(config, processor);
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs - 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//
+//    EXPECT_EQ(reports.reports_size(), 1);
+//
+//    // When using ProtoOutputStream, if nothing written to a sub msg, it won't be treated as
+//    // one. It was previsouly 1 because we had a fake onDumpReport which calls add_metric() by
+//    // itself.
+//    EXPECT_EQ(1, reports.reports(0).metrics_size());
+//    EXPECT_EQ(0, reports.reports(0).metrics(0).duration_metrics().data_size());
+//}
+//
+//TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration2) {
+//    ConfigKey cfgKey;
+//    auto config = CreateStatsdConfig(DurationMetric::MAX_SPARSE);
+//    uint64_t bucketStartTimeNs = 10000000000;
+//    uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    FeedEvents(config, processor);
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(reports.reports_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data_size(), 1);
+//    // Dump the report after the end of 2nd bucket. One dimension with one bucket.
+//    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data(0).bucket_info_size(), 1);
+//    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
+//    // Validate dimension value.
+//    ValidateAttributionUidDimension(data.dimensions_in_what(),
+//                                    android::util::WAKELOCK_STATE_CHANGED, 111);
+//    // The max is acquire event for wl1 to screen off start.
+//    EXPECT_EQ((unsigned long long)data.bucket_info(0).duration_nanos(), bucketSizeNs + 2 - 200);
+//}
+//
+//TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration3) {
+//    ConfigKey cfgKey;
+//    auto config = CreateStatsdConfig(DurationMetric::MAX_SPARSE);
+//    uint64_t bucketStartTimeNs = 10000000000;
+//    uint64_t bucketSizeNs =
+//            TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
+//    auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
+//    EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+//    EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+//    FeedEvents(config, processor);
+//    ConfigMetricsReportList reports;
+//    vector<uint8_t> buffer;
+//
+//    std::vector<std::unique_ptr<LogEvent>> events;
+//    events.push_back(
+//            CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//                                          bucketStartTimeNs + 2 * bucketSizeNs + 90));
+//    events.push_back(CreateAcquireWakelockEvent(attributions1, "wl3",
+//                                                bucketStartTimeNs + 2 * bucketSizeNs + 100));
+//    events.push_back(CreateReleaseWakelockEvent(attributions1, "wl3",
+//                                                bucketStartTimeNs + 5 * bucketSizeNs + 100));
+//    sortLogEventsByTimestamp(&events);
+//    for (const auto& event : events) {
+//        processor->OnLogEvent(event.get());
+//    }
+//
+//    processor->onDumpReport(cfgKey, bucketStartTimeNs + 6 * bucketSizeNs + 1, false, true,
+//                            ADB_DUMP, FAST, &buffer);
+//    EXPECT_TRUE(buffer.size() > 0);
+//    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+//    backfillDimensionPath(&reports);
+//    backfillStringInReport(&reports);
+//    backfillStartEndTimestamp(&reports);
+//    EXPECT_EQ(reports.reports_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data_size(), 1);
+//    EXPECT_EQ(reports.reports(0).metrics(0).duration_metrics().data(0).bucket_info_size(), 2);
+//    auto data = reports.reports(0).metrics(0).duration_metrics().data(0);
+//    ValidateAttributionUidDimension(data.dimensions_in_what(),
+//                                    android::util::WAKELOCK_STATE_CHANGED, 111);
+//    // The last wakelock holding spans 4 buckets.
+//    EXPECT_EQ((unsigned long long)data.bucket_info(1).duration_nanos(), 3 * bucketSizeNs);
+//    EXPECT_EQ((unsigned long long)data.bucket_info(1).start_bucket_elapsed_nanos(),
+//              bucketStartTimeNs + 5 * bucketSizeNs);
+//    EXPECT_EQ((unsigned long long)data.bucket_info(1).end_bucket_elapsed_nanos(),
+//              bucketStartTimeNs + 6 * bucketSizeNs);
+//}
 
 #else
 GTEST_LOG_(INFO) << "This test does nothing.\n";
diff --git a/cmds/statsd/tests/external/StatsCallbackPuller_test.cpp b/cmds/statsd/tests/external/StatsCallbackPuller_test.cpp
index a011692e..e416b4c 100644
--- a/cmds/statsd/tests/external/StatsCallbackPuller_test.cpp
+++ b/cmds/statsd/tests/external/StatsCallbackPuller_test.cpp
@@ -14,8 +14,10 @@
 
 #include "src/external/StatsCallbackPuller.h"
 
-#include <android/os/BnPullAtomCallback.h>
-#include <android/os/IPullAtomResultReceiver.h>
+#include <aidl/android/os/BnPullAtomCallback.h>
+#include <aidl/android/os/IPullAtomResultReceiver.h>
+#include <aidl/android/util/StatsEventParcel.h>
+#include <android/binder_interface_utils.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 #include <stdio.h>
@@ -35,6 +37,11 @@
 namespace statsd {
 
 using namespace testing;
+using Status = ::ndk::ScopedAStatus;
+using aidl::android::os::BnPullAtomCallback;
+using aidl::android::os::IPullAtomResultReceiver;
+using aidl::android::util::StatsEventParcel;
+using ::ndk::SharedRefBase;
 using std::make_shared;
 using std::shared_ptr;
 using std::vector;
@@ -58,15 +65,15 @@
     return event;
 }
 
-void executePull(const sp<IPullAtomResultReceiver>& resultReceiver) {
+void executePull(const shared_ptr<IPullAtomResultReceiver>& resultReceiver) {
     // Convert stats_events into StatsEventParcels.
-    std::vector<android::util::StatsEventParcel> parcels;
+    vector<StatsEventParcel> parcels;
     for (int i = 0; i < values.size(); i++) {
         AStatsEvent* event = createSimpleEvent(values[i]);
         size_t size;
         uint8_t* buffer = AStatsEvent_getBuffer(event, &size);
 
-        android::util::StatsEventParcel p;
+        StatsEventParcel p;
         // vector.assign() creates a copy, but this is inevitable unless
         // stats_event.h/c uses a vector as opposed to a buffer.
         p.buffer.assign(buffer, buffer + size);
@@ -80,11 +87,11 @@
 
 class FakePullAtomCallback : public BnPullAtomCallback {
 public:
-    binder::Status onPullAtom(int atomTag,
-                              const sp<IPullAtomResultReceiver>& resultReceiver) override {
+    Status onPullAtom(int atomTag,
+                      const shared_ptr<IPullAtomResultReceiver>& resultReceiver) override {
         // Force pull to happen in separate thread to simulate binder.
         pullThread = std::thread(executePull, resultReceiver);
-        return binder::Status::ok();
+        return Status::ok();
     }
 };
 
@@ -111,7 +118,7 @@
 }  // Anonymous namespace.
 
 TEST_F(StatsCallbackPullerTest, PullSuccess) {
-    sp<FakePullAtomCallback> cb = new FakePullAtomCallback();
+    shared_ptr<FakePullAtomCallback> cb = SharedRefBase::make<FakePullAtomCallback>();
     int64_t value = 43;
     pullSuccess = true;
     values.push_back(value);
@@ -132,20 +139,20 @@
 }
 
 TEST_F(StatsCallbackPullerTest, PullFail) {
-    sp<FakePullAtomCallback> cb = new FakePullAtomCallback();
+    shared_ptr<FakePullAtomCallback> cb = SharedRefBase::make<FakePullAtomCallback>();
     pullSuccess = false;
     int64_t value = 1234;
     values.push_back(value);
 
     StatsCallbackPuller puller(pullTagId, cb, pullCoolDownNs, pullTimeoutNs, {});
 
-    vector<std::shared_ptr<LogEvent>> dataHolder;
+    vector<shared_ptr<LogEvent>> dataHolder;
     EXPECT_FALSE(puller.PullInternal(&dataHolder));
     EXPECT_EQ(0, dataHolder.size());
 }
 
 TEST_F(StatsCallbackPullerTest, PullTimeout) {
-    sp<FakePullAtomCallback> cb = new FakePullAtomCallback();
+    shared_ptr<FakePullAtomCallback> cb = SharedRefBase::make<FakePullAtomCallback>();
     pullSuccess = true;
     pullDelayNs = 500000000;  // 500ms.
     pullTimeoutNs = 10000;    // 10 microseconds.
@@ -154,7 +161,7 @@
 
     StatsCallbackPuller puller(pullTagId, cb, pullCoolDownNs, pullTimeoutNs, {});
 
-    vector<std::shared_ptr<LogEvent>> dataHolder;
+    vector<shared_ptr<LogEvent>> dataHolder;
     int64_t startTimeNs = getElapsedRealtimeNs();
     // Returns true to let StatsPuller code evaluate the timeout.
     EXPECT_TRUE(puller.PullInternal(&dataHolder));
@@ -174,7 +181,7 @@
 
 // Register a puller and ensure that the timeout logic works.
 TEST_F(StatsCallbackPullerTest, RegisterAndTimeout) {
-    sp<FakePullAtomCallback> cb = new FakePullAtomCallback();
+    shared_ptr<FakePullAtomCallback> cb = SharedRefBase::make<FakePullAtomCallback>();
     pullSuccess = true;
     pullDelayNs = 500000000;  // 500 ms.
     pullTimeoutNs = 10000;    // 10 microsseconds.
@@ -184,7 +191,7 @@
     StatsPullerManager pullerManager;
     pullerManager.RegisterPullAtomCallback(/*uid=*/-1, pullTagId, pullCoolDownNs, pullTimeoutNs,
                                            vector<int32_t>(), cb);
-    vector<std::shared_ptr<LogEvent>> dataHolder;
+    vector<shared_ptr<LogEvent>> dataHolder;
     int64_t startTimeNs = getElapsedRealtimeNs();
     // Returns false, since StatsPuller code will evaluate the timeout.
     EXPECT_FALSE(pullerManager.Pull(pullTagId, &dataHolder));
diff --git a/cmds/statsd/tests/external/StatsPuller_test.cpp b/cmds/statsd/tests/external/StatsPuller_test.cpp
index f42356a..c0b4f43 100644
--- a/cmds/statsd/tests/external/StatsPuller_test.cpp
+++ b/cmds/statsd/tests/external/StatsPuller_test.cpp
@@ -57,12 +57,13 @@
 
 FakePuller puller;
 
-shared_ptr<LogEvent> createSimpleEvent(int64_t eventTimeNs, int64_t value) {
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(pullTagId, eventTimeNs);
-    event->write(value);
-    event->init();
-    return event;
-}
+// TODO(b/149590301): Update this helper to use new socket schema.
+//shared_ptr<LogEvent> createSimpleEvent(int64_t eventTimeNs, int64_t value) {
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(pullTagId, eventTimeNs);
+//    event->write(value);
+//    event->init();
+//    return event;
+//}
 
 class StatsPullerTest : public ::testing::Test {
 public:
@@ -79,148 +80,149 @@
 
 }  // Anonymous namespace.
 
-TEST_F(StatsPullerTest, PullSuccess) {
-    pullData.push_back(createSimpleEvent(1111L, 33));
-
-    pullSuccess = true;
-
-    vector<std::shared_ptr<LogEvent>> dataHolder;
-    EXPECT_TRUE(puller.Pull(&dataHolder));
-    EXPECT_EQ(1, dataHolder.size());
-    EXPECT_EQ(pullTagId, dataHolder[0]->GetTagId());
-    EXPECT_EQ(1111L, dataHolder[0]->GetElapsedTimestampNs());
-    EXPECT_EQ(1, dataHolder[0]->size());
-    EXPECT_EQ(33, dataHolder[0]->getValues()[0].mValue.int_value);
-
-    sleep_for(std::chrono::seconds(1));
-
-    pullData.clear();
-    pullData.push_back(createSimpleEvent(2222L, 44));
-
-    pullSuccess = true;
-
-    EXPECT_TRUE(puller.Pull(&dataHolder));
-    EXPECT_EQ(1, dataHolder.size());
-    EXPECT_EQ(pullTagId, dataHolder[0]->GetTagId());
-    EXPECT_EQ(2222L, dataHolder[0]->GetElapsedTimestampNs());
-    EXPECT_EQ(1, dataHolder[0]->size());
-    EXPECT_EQ(44, dataHolder[0]->getValues()[0].mValue.int_value);
-}
-
-TEST_F(StatsPullerTest, PullFailAfterSuccess) {
-    pullData.push_back(createSimpleEvent(1111L, 33));
-
-    pullSuccess = true;
-
-    vector<std::shared_ptr<LogEvent>> dataHolder;
-    EXPECT_TRUE(puller.Pull(&dataHolder));
-    EXPECT_EQ(1, dataHolder.size());
-    EXPECT_EQ(pullTagId, dataHolder[0]->GetTagId());
-    EXPECT_EQ(1111L, dataHolder[0]->GetElapsedTimestampNs());
-    EXPECT_EQ(1, dataHolder[0]->size());
-    EXPECT_EQ(33, dataHolder[0]->getValues()[0].mValue.int_value);
-
-    sleep_for(std::chrono::seconds(1));
-
-    pullData.clear();
-    pullData.push_back(createSimpleEvent(2222L, 44));
-
-    pullSuccess = false;
-    dataHolder.clear();
-    EXPECT_FALSE(puller.Pull(&dataHolder));
-    EXPECT_EQ(0, dataHolder.size());
-
-    pullSuccess = true;
-    dataHolder.clear();
-    EXPECT_FALSE(puller.Pull(&dataHolder));
-    EXPECT_EQ(0, dataHolder.size());
-}
-
-// Test pull takes longer than timeout, 2nd pull happens shorter than cooldown
-TEST_F(StatsPullerTest, PullTakeTooLongAndPullFast) {
-    pullData.push_back(createSimpleEvent(1111L, 33));
-    pullSuccess = true;
-    // timeout is 0.5
-    pullDelayNs = (long)(0.8 * NS_PER_SEC);
-
-    vector<std::shared_ptr<LogEvent>> dataHolder;
-    EXPECT_FALSE(puller.Pull(&dataHolder));
-    EXPECT_EQ(0, dataHolder.size());
-
-    pullData.clear();
-    pullData.push_back(createSimpleEvent(2222L, 44));
-
-    pullSuccess = true;
-    dataHolder.clear();
-    EXPECT_FALSE(puller.Pull(&dataHolder));
-    EXPECT_EQ(0, dataHolder.size());
-}
-
-TEST_F(StatsPullerTest, PullFail) {
-    pullData.push_back(createSimpleEvent(1111L, 33));
-
-    pullSuccess = false;
-
-    vector<std::shared_ptr<LogEvent>> dataHolder;
-    EXPECT_FALSE(puller.Pull(&dataHolder));
-    EXPECT_EQ(0, dataHolder.size());
-}
-
-TEST_F(StatsPullerTest, PullTakeTooLong) {
-    pullData.push_back(createSimpleEvent(1111L, 33));
-
-    pullSuccess = true;
-    pullDelayNs = NS_PER_SEC;
-
-    vector<std::shared_ptr<LogEvent>> dataHolder;
-    EXPECT_FALSE(puller.Pull(&dataHolder));
-    EXPECT_EQ(0, dataHolder.size());
-}
-
-TEST_F(StatsPullerTest, PullTooFast) {
-    pullData.push_back(createSimpleEvent(1111L, 33));
-
-    pullSuccess = true;
-
-    vector<std::shared_ptr<LogEvent>> dataHolder;
-    EXPECT_TRUE(puller.Pull(&dataHolder));
-    EXPECT_EQ(1, dataHolder.size());
-    EXPECT_EQ(pullTagId, dataHolder[0]->GetTagId());
-    EXPECT_EQ(1111L, dataHolder[0]->GetElapsedTimestampNs());
-    EXPECT_EQ(1, dataHolder[0]->size());
-    EXPECT_EQ(33, dataHolder[0]->getValues()[0].mValue.int_value);
-
-    pullData.clear();
-    pullData.push_back(createSimpleEvent(2222L, 44));
-
-    pullSuccess = true;
-
-    dataHolder.clear();
-    EXPECT_TRUE(puller.Pull(&dataHolder));
-    EXPECT_EQ(1, dataHolder.size());
-    EXPECT_EQ(pullTagId, dataHolder[0]->GetTagId());
-    EXPECT_EQ(1111L, dataHolder[0]->GetElapsedTimestampNs());
-    EXPECT_EQ(1, dataHolder[0]->size());
-    EXPECT_EQ(33, dataHolder[0]->getValues()[0].mValue.int_value);
-}
-
-TEST_F(StatsPullerTest, PullFailsAndTooFast) {
-    pullData.push_back(createSimpleEvent(1111L, 33));
-
-    pullSuccess = false;
-
-    vector<std::shared_ptr<LogEvent>> dataHolder;
-    EXPECT_FALSE(puller.Pull(&dataHolder));
-    EXPECT_EQ(0, dataHolder.size());
-
-    pullData.clear();
-    pullData.push_back(createSimpleEvent(2222L, 44));
-
-    pullSuccess = true;
-
-    EXPECT_FALSE(puller.Pull(&dataHolder));
-    EXPECT_EQ(0, dataHolder.size());
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//TEST_F(StatsPullerTest, PullSuccess) {
+//    pullData.push_back(createSimpleEvent(1111L, 33));
+//
+//    pullSuccess = true;
+//
+//    vector<std::shared_ptr<LogEvent>> dataHolder;
+//    EXPECT_TRUE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(1, dataHolder.size());
+//    EXPECT_EQ(pullTagId, dataHolder[0]->GetTagId());
+//    EXPECT_EQ(1111L, dataHolder[0]->GetElapsedTimestampNs());
+//    EXPECT_EQ(1, dataHolder[0]->size());
+//    EXPECT_EQ(33, dataHolder[0]->getValues()[0].mValue.int_value);
+//
+//    sleep_for(std::chrono::seconds(1));
+//
+//    pullData.clear();
+//    pullData.push_back(createSimpleEvent(2222L, 44));
+//
+//    pullSuccess = true;
+//
+//    EXPECT_TRUE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(1, dataHolder.size());
+//    EXPECT_EQ(pullTagId, dataHolder[0]->GetTagId());
+//    EXPECT_EQ(2222L, dataHolder[0]->GetElapsedTimestampNs());
+//    EXPECT_EQ(1, dataHolder[0]->size());
+//    EXPECT_EQ(44, dataHolder[0]->getValues()[0].mValue.int_value);
+//}
+//
+//TEST_F(StatsPullerTest, PullFailAfterSuccess) {
+//    pullData.push_back(createSimpleEvent(1111L, 33));
+//
+//    pullSuccess = true;
+//
+//    vector<std::shared_ptr<LogEvent>> dataHolder;
+//    EXPECT_TRUE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(1, dataHolder.size());
+//    EXPECT_EQ(pullTagId, dataHolder[0]->GetTagId());
+//    EXPECT_EQ(1111L, dataHolder[0]->GetElapsedTimestampNs());
+//    EXPECT_EQ(1, dataHolder[0]->size());
+//    EXPECT_EQ(33, dataHolder[0]->getValues()[0].mValue.int_value);
+//
+//    sleep_for(std::chrono::seconds(1));
+//
+//    pullData.clear();
+//    pullData.push_back(createSimpleEvent(2222L, 44));
+//
+//    pullSuccess = false;
+//    dataHolder.clear();
+//    EXPECT_FALSE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(0, dataHolder.size());
+//
+//    pullSuccess = true;
+//    dataHolder.clear();
+//    EXPECT_FALSE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(0, dataHolder.size());
+//}
+//
+//// Test pull takes longer than timeout, 2nd pull happens shorter than cooldown
+//TEST_F(StatsPullerTest, PullTakeTooLongAndPullFast) {
+//    pullData.push_back(createSimpleEvent(1111L, 33));
+//    pullSuccess = true;
+//    // timeout is 0.5
+//    pullDelayNs = (long)(0.8 * NS_PER_SEC);
+//
+//    vector<std::shared_ptr<LogEvent>> dataHolder;
+//    EXPECT_FALSE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(0, dataHolder.size());
+//
+//    pullData.clear();
+//    pullData.push_back(createSimpleEvent(2222L, 44));
+//
+//    pullSuccess = true;
+//    dataHolder.clear();
+//    EXPECT_FALSE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(0, dataHolder.size());
+//}
+//
+//TEST_F(StatsPullerTest, PullFail) {
+//    pullData.push_back(createSimpleEvent(1111L, 33));
+//
+//    pullSuccess = false;
+//
+//    vector<std::shared_ptr<LogEvent>> dataHolder;
+//    EXPECT_FALSE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(0, dataHolder.size());
+//}
+//
+//TEST_F(StatsPullerTest, PullTakeTooLong) {
+//    pullData.push_back(createSimpleEvent(1111L, 33));
+//
+//    pullSuccess = true;
+//    pullDelayNs = NS_PER_SEC;
+//
+//    vector<std::shared_ptr<LogEvent>> dataHolder;
+//    EXPECT_FALSE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(0, dataHolder.size());
+//}
+//
+//TEST_F(StatsPullerTest, PullTooFast) {
+//    pullData.push_back(createSimpleEvent(1111L, 33));
+//
+//    pullSuccess = true;
+//
+//    vector<std::shared_ptr<LogEvent>> dataHolder;
+//    EXPECT_TRUE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(1, dataHolder.size());
+//    EXPECT_EQ(pullTagId, dataHolder[0]->GetTagId());
+//    EXPECT_EQ(1111L, dataHolder[0]->GetElapsedTimestampNs());
+//    EXPECT_EQ(1, dataHolder[0]->size());
+//    EXPECT_EQ(33, dataHolder[0]->getValues()[0].mValue.int_value);
+//
+//    pullData.clear();
+//    pullData.push_back(createSimpleEvent(2222L, 44));
+//
+//    pullSuccess = true;
+//
+//    dataHolder.clear();
+//    EXPECT_TRUE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(1, dataHolder.size());
+//    EXPECT_EQ(pullTagId, dataHolder[0]->GetTagId());
+//    EXPECT_EQ(1111L, dataHolder[0]->GetElapsedTimestampNs());
+//    EXPECT_EQ(1, dataHolder[0]->size());
+//    EXPECT_EQ(33, dataHolder[0]->getValues()[0].mValue.int_value);
+//}
+//
+//TEST_F(StatsPullerTest, PullFailsAndTooFast) {
+//    pullData.push_back(createSimpleEvent(1111L, 33));
+//
+//    pullSuccess = false;
+//
+//    vector<std::shared_ptr<LogEvent>> dataHolder;
+//    EXPECT_FALSE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(0, dataHolder.size());
+//
+//    pullData.clear();
+//    pullData.push_back(createSimpleEvent(2222L, 44));
+//
+//    pullSuccess = true;
+//
+//    EXPECT_FALSE(puller.Pull(&dataHolder));
+//    EXPECT_EQ(0, dataHolder.size());
+//}
 
 }  // namespace statsd
 }  // namespace os
diff --git a/cmds/statsd/tests/external/puller_util_test.cpp b/cmds/statsd/tests/external/puller_util_test.cpp
index c25e657..81590a2 100644
--- a/cmds/statsd/tests/external/puller_util_test.cpp
+++ b/cmds/statsd/tests/external/puller_util_test.cpp
@@ -60,209 +60,210 @@
 }
 }  // anonymous namespace
 
-TEST(puller_util, MergeNoDimension) {
-  vector<shared_ptr<LogEvent>> inputData;
-  shared_ptr<LogEvent> event = make_shared<LogEvent>(uidAtomTagId, timestamp);
-  // 30->22->31
-  event->write(isolatedUid);
-  event->write(hostNonAdditiveData);
-  event->write(isolatedAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  // 20->22->21
-  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
-  event->write(hostUid);
-  event->write(hostNonAdditiveData);
-  event->write(hostAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
-  EXPECT_CALL(*uidMap, getHostUidOrSelf(isolatedUid))
-      .WillRepeatedly(Return(hostUid));
-  EXPECT_CALL(*uidMap, getHostUidOrSelf(Ne(isolatedUid)))
-      .WillRepeatedly(ReturnArg<0>());
-  mapAndMergeIsolatedUidsToHostUid(inputData, uidMap, uidAtomTagId, uidAdditiveFields);
-
-  vector<vector<int>> actual;
-  extractIntoVector(inputData, actual);
-  vector<int> expectedV1 = {20, 22, 52};
-  EXPECT_EQ(1, (int)actual.size());
-  EXPECT_THAT(actual, Contains(expectedV1));
-}
-
-TEST(puller_util, MergeWithDimension) {
-  vector<shared_ptr<LogEvent>> inputData;
-  shared_ptr<LogEvent> event = make_shared<LogEvent>(uidAtomTagId, timestamp);
-  // 30->32->31
-  event->write(isolatedUid);
-  event->write(isolatedNonAdditiveData);
-  event->write(isolatedAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  // 20->32->21
-  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
-  event->write(hostUid);
-  event->write(isolatedNonAdditiveData);
-  event->write(hostAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  // 20->22->21
-  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
-  event->write(hostUid);
-  event->write(hostNonAdditiveData);
-  event->write(hostAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
-  EXPECT_CALL(*uidMap, getHostUidOrSelf(isolatedUid))
-      .WillRepeatedly(Return(hostUid));
-  EXPECT_CALL(*uidMap, getHostUidOrSelf(Ne(isolatedUid)))
-      .WillRepeatedly(ReturnArg<0>());
-  mapAndMergeIsolatedUidsToHostUid(inputData, uidMap, uidAtomTagId, uidAdditiveFields);
-
-  vector<vector<int>> actual;
-  extractIntoVector(inputData, actual);
-  vector<int> expectedV1 = {20, 22, 21};
-  vector<int> expectedV2 = {20, 32, 52};
-  EXPECT_EQ(2, (int)actual.size());
-  EXPECT_THAT(actual, Contains(expectedV1));
-  EXPECT_THAT(actual, Contains(expectedV2));
-}
-
-TEST(puller_util, NoMergeHostUidOnly) {
-  vector<shared_ptr<LogEvent>> inputData;
-  shared_ptr<LogEvent> event = make_shared<LogEvent>(uidAtomTagId, timestamp);
-  // 20->32->31
-  event->write(hostUid);
-  event->write(isolatedNonAdditiveData);
-  event->write(isolatedAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  // 20->22->21
-  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
-  event->write(hostUid);
-  event->write(hostNonAdditiveData);
-  event->write(hostAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
-  EXPECT_CALL(*uidMap, getHostUidOrSelf(isolatedUid))
-      .WillRepeatedly(Return(hostUid));
-  EXPECT_CALL(*uidMap, getHostUidOrSelf(Ne(isolatedUid)))
-      .WillRepeatedly(ReturnArg<0>());
-  mapAndMergeIsolatedUidsToHostUid(inputData, uidMap, uidAtomTagId, uidAdditiveFields);
-
-  // 20->32->31
-  // 20->22->21
-  vector<vector<int>> actual;
-  extractIntoVector(inputData, actual);
-  vector<int> expectedV1 = {20, 32, 31};
-  vector<int> expectedV2 = {20, 22, 21};
-  EXPECT_EQ(2, (int)actual.size());
-  EXPECT_THAT(actual, Contains(expectedV1));
-  EXPECT_THAT(actual, Contains(expectedV2));
-}
-
-TEST(puller_util, IsolatedUidOnly) {
-  vector<shared_ptr<LogEvent>> inputData;
-  shared_ptr<LogEvent> event = make_shared<LogEvent>(uidAtomTagId, timestamp);
-  // 30->32->31
-  event->write(hostUid);
-  event->write(isolatedNonAdditiveData);
-  event->write(isolatedAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  // 30->22->21
-  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
-  event->write(hostUid);
-  event->write(hostNonAdditiveData);
-  event->write(hostAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
-  EXPECT_CALL(*uidMap, getHostUidOrSelf(isolatedUid))
-      .WillRepeatedly(Return(hostUid));
-  EXPECT_CALL(*uidMap, getHostUidOrSelf(Ne(isolatedUid)))
-      .WillRepeatedly(ReturnArg<0>());
-  mapAndMergeIsolatedUidsToHostUid(inputData, uidMap, uidAtomTagId, uidAdditiveFields);
-
-  // 20->32->31
-  // 20->22->21
-  vector<vector<int>> actual;
-  extractIntoVector(inputData, actual);
-  vector<int> expectedV1 = {20, 32, 31};
-  vector<int> expectedV2 = {20, 22, 21};
-  EXPECT_EQ(2, (int)actual.size());
-  EXPECT_THAT(actual, Contains(expectedV1));
-  EXPECT_THAT(actual, Contains(expectedV2));
-}
-
-TEST(puller_util, MultipleIsolatedUidToOneHostUid) {
-  vector<shared_ptr<LogEvent>> inputData;
-  shared_ptr<LogEvent> event = make_shared<LogEvent>(uidAtomTagId, timestamp);
-  // 30->32->31
-  event->write(isolatedUid);
-  event->write(isolatedNonAdditiveData);
-  event->write(isolatedAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  // 31->32->21
-  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
-  event->write(isolatedUid + 1);
-  event->write(isolatedNonAdditiveData);
-  event->write(hostAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  // 20->32->21
-  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
-  event->write(hostUid);
-  event->write(isolatedNonAdditiveData);
-  event->write(hostAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
-  EXPECT_CALL(*uidMap, getHostUidOrSelf(_)).WillRepeatedly(Return(hostUid));
-  mapAndMergeIsolatedUidsToHostUid(inputData, uidMap, uidAtomTagId, uidAdditiveFields);
-
-  vector<vector<int>> actual;
-  extractIntoVector(inputData, actual);
-  vector<int> expectedV1 = {20, 32, 73};
-  EXPECT_EQ(1, (int)actual.size());
-  EXPECT_THAT(actual, Contains(expectedV1));
-}
-
-TEST(puller_util, NoNeedToMerge) {
-  vector<shared_ptr<LogEvent>> inputData;
-  shared_ptr<LogEvent> event =
-      make_shared<LogEvent>(nonUidAtomTagId, timestamp);
-  // 32
-  event->write(isolatedNonAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  event = make_shared<LogEvent>(nonUidAtomTagId, timestamp);
-  // 22
-  event->write(hostNonAdditiveData);
-  event->init();
-  inputData.push_back(event);
-
-  sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
-  mapAndMergeIsolatedUidsToHostUid(inputData, uidMap, nonUidAtomTagId, {} /*no additive fields*/);
-
-  EXPECT_EQ(2, (int)inputData.size());
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//TEST(puller_util, MergeNoDimension) {
+//  vector<shared_ptr<LogEvent>> inputData;
+//  shared_ptr<LogEvent> event = make_shared<LogEvent>(uidAtomTagId, timestamp);
+//  // 30->22->31
+//  event->write(isolatedUid);
+//  event->write(hostNonAdditiveData);
+//  event->write(isolatedAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  // 20->22->21
+//  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
+//  event->write(hostUid);
+//  event->write(hostNonAdditiveData);
+//  event->write(hostAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
+//  EXPECT_CALL(*uidMap, getHostUidOrSelf(isolatedUid))
+//      .WillRepeatedly(Return(hostUid));
+//  EXPECT_CALL(*uidMap, getHostUidOrSelf(Ne(isolatedUid)))
+//      .WillRepeatedly(ReturnArg<0>());
+//  mapAndMergeIsolatedUidsToHostUid(inputData, uidMap, uidAtomTagId, uidAdditiveFields);
+//
+//  vector<vector<int>> actual;
+//  extractIntoVector(inputData, actual);
+//  vector<int> expectedV1 = {20, 22, 52};
+//  EXPECT_EQ(1, (int)actual.size());
+//  EXPECT_THAT(actual, Contains(expectedV1));
+//}
+//
+//TEST(puller_util, MergeWithDimension) {
+//  vector<shared_ptr<LogEvent>> inputData;
+//  shared_ptr<LogEvent> event = make_shared<LogEvent>(uidAtomTagId, timestamp);
+//  // 30->32->31
+//  event->write(isolatedUid);
+//  event->write(isolatedNonAdditiveData);
+//  event->write(isolatedAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  // 20->32->21
+//  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
+//  event->write(hostUid);
+//  event->write(isolatedNonAdditiveData);
+//  event->write(hostAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  // 20->22->21
+//  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
+//  event->write(hostUid);
+//  event->write(hostNonAdditiveData);
+//  event->write(hostAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
+//  EXPECT_CALL(*uidMap, getHostUidOrSelf(isolatedUid))
+//      .WillRepeatedly(Return(hostUid));
+//  EXPECT_CALL(*uidMap, getHostUidOrSelf(Ne(isolatedUid)))
+//      .WillRepeatedly(ReturnArg<0>());
+//  mapAndMergeIsolatedUidsToHostUid(inputData, uidMap, uidAtomTagId, uidAdditiveFields);
+//
+//  vector<vector<int>> actual;
+//  extractIntoVector(inputData, actual);
+//  vector<int> expectedV1 = {20, 22, 21};
+//  vector<int> expectedV2 = {20, 32, 52};
+//  EXPECT_EQ(2, (int)actual.size());
+//  EXPECT_THAT(actual, Contains(expectedV1));
+//  EXPECT_THAT(actual, Contains(expectedV2));
+//}
+//
+//TEST(puller_util, NoMergeHostUidOnly) {
+//  vector<shared_ptr<LogEvent>> inputData;
+//  shared_ptr<LogEvent> event = make_shared<LogEvent>(uidAtomTagId, timestamp);
+//  // 20->32->31
+//  event->write(hostUid);
+//  event->write(isolatedNonAdditiveData);
+//  event->write(isolatedAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  // 20->22->21
+//  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
+//  event->write(hostUid);
+//  event->write(hostNonAdditiveData);
+//  event->write(hostAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
+//  EXPECT_CALL(*uidMap, getHostUidOrSelf(isolatedUid))
+//      .WillRepeatedly(Return(hostUid));
+//  EXPECT_CALL(*uidMap, getHostUidOrSelf(Ne(isolatedUid)))
+//      .WillRepeatedly(ReturnArg<0>());
+//  mapAndMergeIsolatedUidsToHostUid(inputData, uidMap, uidAtomTagId, uidAdditiveFields);
+//
+//  // 20->32->31
+//  // 20->22->21
+//  vector<vector<int>> actual;
+//  extractIntoVector(inputData, actual);
+//  vector<int> expectedV1 = {20, 32, 31};
+//  vector<int> expectedV2 = {20, 22, 21};
+//  EXPECT_EQ(2, (int)actual.size());
+//  EXPECT_THAT(actual, Contains(expectedV1));
+//  EXPECT_THAT(actual, Contains(expectedV2));
+//}
+//
+//TEST(puller_util, IsolatedUidOnly) {
+//  vector<shared_ptr<LogEvent>> inputData;
+//  shared_ptr<LogEvent> event = make_shared<LogEvent>(uidAtomTagId, timestamp);
+//  // 30->32->31
+//  event->write(hostUid);
+//  event->write(isolatedNonAdditiveData);
+//  event->write(isolatedAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  // 30->22->21
+//  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
+//  event->write(hostUid);
+//  event->write(hostNonAdditiveData);
+//  event->write(hostAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
+//  EXPECT_CALL(*uidMap, getHostUidOrSelf(isolatedUid))
+//      .WillRepeatedly(Return(hostUid));
+//  EXPECT_CALL(*uidMap, getHostUidOrSelf(Ne(isolatedUid)))
+//      .WillRepeatedly(ReturnArg<0>());
+//  mapAndMergeIsolatedUidsToHostUid(inputData, uidMap, uidAtomTagId, uidAdditiveFields);
+//
+//  // 20->32->31
+//  // 20->22->21
+//  vector<vector<int>> actual;
+//  extractIntoVector(inputData, actual);
+//  vector<int> expectedV1 = {20, 32, 31};
+//  vector<int> expectedV2 = {20, 22, 21};
+//  EXPECT_EQ(2, (int)actual.size());
+//  EXPECT_THAT(actual, Contains(expectedV1));
+//  EXPECT_THAT(actual, Contains(expectedV2));
+//}
+//
+//TEST(puller_util, MultipleIsolatedUidToOneHostUid) {
+//  vector<shared_ptr<LogEvent>> inputData;
+//  shared_ptr<LogEvent> event = make_shared<LogEvent>(uidAtomTagId, timestamp);
+//  // 30->32->31
+//  event->write(isolatedUid);
+//  event->write(isolatedNonAdditiveData);
+//  event->write(isolatedAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  // 31->32->21
+//  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
+//  event->write(isolatedUid + 1);
+//  event->write(isolatedNonAdditiveData);
+//  event->write(hostAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  // 20->32->21
+//  event = make_shared<LogEvent>(uidAtomTagId, timestamp);
+//  event->write(hostUid);
+//  event->write(isolatedNonAdditiveData);
+//  event->write(hostAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
+//  EXPECT_CALL(*uidMap, getHostUidOrSelf(_)).WillRepeatedly(Return(hostUid));
+//  mapAndMergeIsolatedUidsToHostUid(inputData, uidMap, uidAtomTagId, uidAdditiveFields);
+//
+//  vector<vector<int>> actual;
+//  extractIntoVector(inputData, actual);
+//  vector<int> expectedV1 = {20, 32, 73};
+//  EXPECT_EQ(1, (int)actual.size());
+//  EXPECT_THAT(actual, Contains(expectedV1));
+//}
+//
+//TEST(puller_util, NoNeedToMerge) {
+//  vector<shared_ptr<LogEvent>> inputData;
+//  shared_ptr<LogEvent> event =
+//      make_shared<LogEvent>(nonUidAtomTagId, timestamp);
+//  // 32
+//  event->write(isolatedNonAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  event = make_shared<LogEvent>(nonUidAtomTagId, timestamp);
+//  // 22
+//  event->write(hostNonAdditiveData);
+//  event->init();
+//  inputData.push_back(event);
+//
+//  sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
+//  mapAndMergeIsolatedUidsToHostUid(inputData, uidMap, nonUidAtomTagId, {} /*no additive fields*/);
+//
+//  EXPECT_EQ(2, (int)inputData.size());
+//}
 
 }  // namespace statsd
 }  // namespace os
diff --git a/cmds/statsd/tests/metrics/CountMetricProducer_test.cpp b/cmds/statsd/tests/metrics/CountMetricProducer_test.cpp
index 8915c73..b882678 100644
--- a/cmds/statsd/tests/metrics/CountMetricProducer_test.cpp
+++ b/cmds/statsd/tests/metrics/CountMetricProducer_test.cpp
@@ -37,365 +37,366 @@
 
 const ConfigKey kConfigKey(0, 12345);
 
-TEST(CountMetricProducerTest, TestFirstBucket) {
-    CountMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-
-    CountMetricProducer countProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, 5,
-                                      600 * NS_PER_SEC + NS_PER_SEC / 2);
-    EXPECT_EQ(600500000000, countProducer.mCurrentBucketStartTimeNs);
-    EXPECT_EQ(10, countProducer.mCurrentBucketNum);
-    EXPECT_EQ(660000000005, countProducer.getCurrentBucketEndTimeNs());
-}
-
-TEST(CountMetricProducerTest, TestNonDimensionalEvents) {
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-    int64_t bucket2StartTimeNs = bucketStartTimeNs + bucketSizeNs;
-    int64_t bucket3StartTimeNs = bucketStartTimeNs + 2 * bucketSizeNs;
-    int tagId = 1;
-
-    CountMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-
-    LogEvent event1(tagId, bucketStartTimeNs + 1);
-    event1.init();
-    LogEvent event2(tagId, bucketStartTimeNs + 2);
-    event2.init();
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-
-    CountMetricProducer countProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      bucketStartTimeNs, bucketStartTimeNs);
-
-    // 2 events in bucket 1.
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event1);
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event2);
-
-    // Flushes at event #2.
-    countProducer.flushIfNeededLocked(bucketStartTimeNs + 2);
-    EXPECT_EQ(0UL, countProducer.mPastBuckets.size());
-
-    // Flushes.
-    countProducer.flushIfNeededLocked(bucketStartTimeNs + bucketSizeNs + 1);
-    EXPECT_EQ(1UL, countProducer.mPastBuckets.size());
-    EXPECT_TRUE(countProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
-                countProducer.mPastBuckets.end());
-    const auto& buckets = countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-    EXPECT_EQ(1UL, buckets.size());
-    EXPECT_EQ(bucketStartTimeNs, buckets[0].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[0].mBucketEndNs);
-    EXPECT_EQ(2LL, buckets[0].mCount);
-
-    // 1 matched event happens in bucket 2.
-    LogEvent event3(tagId, bucketStartTimeNs + bucketSizeNs + 2);
-    event3.init();
-
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event3);
-    countProducer.flushIfNeededLocked(bucketStartTimeNs + 2 * bucketSizeNs + 1);
-    EXPECT_EQ(1UL, countProducer.mPastBuckets.size());
-    EXPECT_TRUE(countProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
-                countProducer.mPastBuckets.end());
-    EXPECT_EQ(2UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    const auto& bucketInfo2 = countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][1];
-    EXPECT_EQ(bucket2StartTimeNs, bucketInfo2.mBucketStartNs);
-    EXPECT_EQ(bucket2StartTimeNs + bucketSizeNs, bucketInfo2.mBucketEndNs);
-    EXPECT_EQ(1LL, bucketInfo2.mCount);
-
-    // nothing happens in bucket 3. we should not record anything for bucket 3.
-    countProducer.flushIfNeededLocked(bucketStartTimeNs + 3 * bucketSizeNs + 1);
-    EXPECT_EQ(1UL, countProducer.mPastBuckets.size());
-    EXPECT_TRUE(countProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
-                countProducer.mPastBuckets.end());
-    const auto& buckets3 = countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-    EXPECT_EQ(2UL, buckets3.size());
-}
-
-TEST(CountMetricProducerTest, TestEventsWithNonSlicedCondition) {
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-
-    CountMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_condition(StringToId("SCREEN_ON"));
-
-    LogEvent event1(1, bucketStartTimeNs + 1);
-    event1.init();
-
-    LogEvent event2(1, bucketStartTimeNs + 10);
-    event2.init();
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-
-    CountMetricProducer countProducer(kConfigKey, metric, 1, wizard, bucketStartTimeNs,
-                                      bucketStartTimeNs);
-
-    countProducer.onConditionChanged(true, bucketStartTimeNs);
-    countProducer.onMatchedLogEvent(1 /*matcher index*/, event1);
-    EXPECT_EQ(0UL, countProducer.mPastBuckets.size());
-
-    countProducer.onConditionChanged(false /*new condition*/, bucketStartTimeNs + 2);
-    // Upon this match event, the matched event1 is flushed.
-    countProducer.onMatchedLogEvent(1 /*matcher index*/, event2);
-    EXPECT_EQ(0UL, countProducer.mPastBuckets.size());
-
-    countProducer.flushIfNeededLocked(bucketStartTimeNs + bucketSizeNs + 1);
-    EXPECT_EQ(1UL, countProducer.mPastBuckets.size());
-    EXPECT_TRUE(countProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
-                countProducer.mPastBuckets.end());
-    {
-        const auto& buckets = countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-        EXPECT_EQ(1UL, buckets.size());
-        const auto& bucketInfo = buckets[0];
-        EXPECT_EQ(bucketStartTimeNs, bucketInfo.mBucketStartNs);
-        EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, bucketInfo.mBucketEndNs);
-        EXPECT_EQ(1LL, bucketInfo.mCount);
-    }
-}
-
-TEST(CountMetricProducerTest, TestEventsWithSlicedCondition) {
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-
-    int tagId = 1;
-    int conditionTagId = 2;
-
-    CountMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_condition(StringToId("APP_IN_BACKGROUND_PER_UID_AND_SCREEN_ON"));
-    MetricConditionLink* link = metric.add_links();
-    link->set_condition(StringToId("APP_IN_BACKGROUND_PER_UID"));
-    buildSimpleAtomFieldMatcher(tagId, 1, link->mutable_fields_in_what());
-    buildSimpleAtomFieldMatcher(conditionTagId, 2, link->mutable_fields_in_condition());
-
-    LogEvent event1(tagId, bucketStartTimeNs + 1);
-    event1.write("111");  // uid
-    event1.init();
-    ConditionKey key1;
-    key1[StringToId("APP_IN_BACKGROUND_PER_UID")] =
-        {getMockedDimensionKey(conditionTagId, 2, "111")};
-
-    LogEvent event2(tagId, bucketStartTimeNs + 10);
-    event2.write("222");  // uid
-    event2.init();
-    ConditionKey key2;
-    key2[StringToId("APP_IN_BACKGROUND_PER_UID")] =
-        {getMockedDimensionKey(conditionTagId, 2, "222")};
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    EXPECT_CALL(*wizard, query(_, key1, _)).WillOnce(Return(ConditionState::kFalse));
-
-    EXPECT_CALL(*wizard, query(_, key2, _)).WillOnce(Return(ConditionState::kTrue));
-
-    CountMetricProducer countProducer(kConfigKey, metric, 1 /*condition tracker index*/, wizard,
-                                      bucketStartTimeNs, bucketStartTimeNs);
-
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event1);
-    countProducer.flushIfNeededLocked(bucketStartTimeNs + 1);
-    EXPECT_EQ(0UL, countProducer.mPastBuckets.size());
-
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event2);
-    countProducer.flushIfNeededLocked(bucketStartTimeNs + bucketSizeNs + 1);
-    EXPECT_EQ(1UL, countProducer.mPastBuckets.size());
-    EXPECT_TRUE(countProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
-                countProducer.mPastBuckets.end());
-    const auto& buckets = countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-    EXPECT_EQ(1UL, buckets.size());
-    const auto& bucketInfo = buckets[0];
-    EXPECT_EQ(bucketStartTimeNs, bucketInfo.mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, bucketInfo.mBucketEndNs);
-    EXPECT_EQ(1LL, bucketInfo.mCount);
-}
-
-TEST(CountMetricProducerTest, TestEventWithAppUpgrade) {
-    sp<AlarmMonitor> alarmMonitor;
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 15 * NS_PER_SEC;
-
-    int tagId = 1;
-    int conditionTagId = 2;
-
-    CountMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    Alert alert;
-    alert.set_num_buckets(3);
-    alert.set_trigger_if_sum_gt(2);
-    LogEvent event1(tagId, bucketStartTimeNs + 1);
-    event1.write("111");  // uid
-    event1.init();
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    CountMetricProducer countProducer(kConfigKey, metric, -1 /* no condition */, wizard,
-                                      bucketStartTimeNs, bucketStartTimeNs);
-
-    sp<AnomalyTracker> anomalyTracker = countProducer.addAnomalyTracker(alert, alarmMonitor);
-    EXPECT_TRUE(anomalyTracker != nullptr);
-
-    // Bucket is flushed yet.
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event1);
-    EXPECT_EQ(0UL, countProducer.mPastBuckets.size());
-    EXPECT_EQ(0, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
-
-    // App upgrade forces bucket flush.
-    // Check that there's a past bucket and the bucket end is not adjusted.
-    countProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
-    EXPECT_EQ(1UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ((long long)bucketStartTimeNs,
-              countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mBucketStartNs);
-    EXPECT_EQ((long long)eventUpgradeTimeNs,
-              countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mBucketEndNs);
-    EXPECT_EQ(eventUpgradeTimeNs, countProducer.mCurrentBucketStartTimeNs);
-    // Anomaly tracker only contains full buckets.
-    EXPECT_EQ(0, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
-
-    int64_t lastEndTimeNs = countProducer.getCurrentBucketEndTimeNs();
-    // Next event occurs in same bucket as partial bucket created.
-    LogEvent event2(tagId, bucketStartTimeNs + 59 * NS_PER_SEC + 10);
-    event2.write("222");  // uid
-    event2.init();
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event2);
-    EXPECT_EQ(1UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(eventUpgradeTimeNs, countProducer.mCurrentBucketStartTimeNs);
-    EXPECT_EQ(0, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
-
-    // Third event in following bucket.
-    LogEvent event3(tagId, bucketStartTimeNs + 62 * NS_PER_SEC + 10);
-    event3.write("333");  // uid
-    event3.init();
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event3);
-    EXPECT_EQ(2UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(lastEndTimeNs, countProducer.mCurrentBucketStartTimeNs);
-    EXPECT_EQ(2, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
-}
-
-TEST(CountMetricProducerTest, TestEventWithAppUpgradeInNextBucket) {
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 65 * NS_PER_SEC;
-
-    int tagId = 1;
-    int conditionTagId = 2;
-
-    CountMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    LogEvent event1(tagId, bucketStartTimeNs + 1);
-    event1.write("111");  // uid
-    event1.init();
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    CountMetricProducer countProducer(kConfigKey, metric, -1 /* no condition */, wizard,
-                                      bucketStartTimeNs, bucketStartTimeNs);
-
-    // Bucket is flushed yet.
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event1);
-    EXPECT_EQ(0UL, countProducer.mPastBuckets.size());
-
-    // App upgrade forces bucket flush.
-    // Check that there's a past bucket and the bucket end is not adjusted.
-    countProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
-    EXPECT_EQ(1UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ((int64_t)bucketStartTimeNs,
-              countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
-              countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mBucketEndNs);
-    EXPECT_EQ(eventUpgradeTimeNs, countProducer.mCurrentBucketStartTimeNs);
-
-    // Next event occurs in same bucket as partial bucket created.
-    LogEvent event2(tagId, bucketStartTimeNs + 70 * NS_PER_SEC + 10);
-    event2.write("222");  // uid
-    event2.init();
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event2);
-    EXPECT_EQ(1UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-
-    // Third event in following bucket.
-    LogEvent event3(tagId, bucketStartTimeNs + 121 * NS_PER_SEC + 10);
-    event3.write("333");  // uid
-    event3.init();
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event3);
-    EXPECT_EQ(2UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ((int64_t)eventUpgradeTimeNs,
-              countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][1].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
-              countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][1].mBucketEndNs);
-}
-
-TEST(CountMetricProducerTest, TestAnomalyDetectionUnSliced) {
-    sp<AlarmMonitor> alarmMonitor;
-    Alert alert;
-    alert.set_id(11);
-    alert.set_metric_id(1);
-    alert.set_trigger_if_sum_gt(2);
-    alert.set_num_buckets(2);
-    const int32_t refPeriodSec = 1;
-    alert.set_refractory_period_secs(refPeriodSec);
-
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-    int64_t bucket2StartTimeNs = bucketStartTimeNs + bucketSizeNs;
-    int64_t bucket3StartTimeNs = bucketStartTimeNs + 2 * bucketSizeNs;
-
-    CountMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    CountMetricProducer countProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      bucketStartTimeNs, bucketStartTimeNs);
-
-    sp<AnomalyTracker> anomalyTracker = countProducer.addAnomalyTracker(alert, alarmMonitor);
-
-    int tagId = 1;
-    LogEvent event1(tagId, bucketStartTimeNs + 1);
-    event1.init();
-    LogEvent event2(tagId, bucketStartTimeNs + 2);
-    event2.init();
-    LogEvent event3(tagId, bucketStartTimeNs + 2 * bucketSizeNs + 1);
-    event3.init();
-    LogEvent event4(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 1);
-    event4.init();
-    LogEvent event5(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 2);
-    event5.init();
-    LogEvent event6(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 3);
-    event6.init();
-    LogEvent event7(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 2 * NS_PER_SEC);
-    event7.init();
-
-    // Two events in bucket #0.
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event1);
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event2);
-
-    EXPECT_EQ(1UL, countProducer.mCurrentSlicedCounter->size());
-    EXPECT_EQ(2L, countProducer.mCurrentSlicedCounter->begin()->second);
-    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY), 0U);
-
-    // One event in bucket #2. No alarm as bucket #0 is trashed out.
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event3);
-    EXPECT_EQ(1UL, countProducer.mCurrentSlicedCounter->size());
-    EXPECT_EQ(1L, countProducer.mCurrentSlicedCounter->begin()->second);
-    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY), 0U);
-
-    // Two events in bucket #3.
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event4);
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event5);
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event6);
-    EXPECT_EQ(1UL, countProducer.mCurrentSlicedCounter->size());
-    EXPECT_EQ(3L, countProducer.mCurrentSlicedCounter->begin()->second);
-    // Anomaly at event 6 is within refractory period. The alarm is at event 5 timestamp not event 6
-    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
-            std::ceil(1.0 * event5.GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec));
-
-    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event7);
-    EXPECT_EQ(1UL, countProducer.mCurrentSlicedCounter->size());
-    EXPECT_EQ(4L, countProducer.mCurrentSlicedCounter->begin()->second);
-    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
-            std::ceil(1.0 * event7.GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec));
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//TEST(CountMetricProducerTest, TestFirstBucket) {
+//    CountMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//
+//    CountMetricProducer countProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, 5,
+//                                      600 * NS_PER_SEC + NS_PER_SEC / 2);
+//    EXPECT_EQ(600500000000, countProducer.mCurrentBucketStartTimeNs);
+//    EXPECT_EQ(10, countProducer.mCurrentBucketNum);
+//    EXPECT_EQ(660000000005, countProducer.getCurrentBucketEndTimeNs());
+//}
+//
+//TEST(CountMetricProducerTest, TestNonDimensionalEvents) {
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//    int64_t bucket2StartTimeNs = bucketStartTimeNs + bucketSizeNs;
+//    int64_t bucket3StartTimeNs = bucketStartTimeNs + 2 * bucketSizeNs;
+//    int tagId = 1;
+//
+//    CountMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//
+//    LogEvent event1(tagId, bucketStartTimeNs + 1);
+//    event1.init();
+//    LogEvent event2(tagId, bucketStartTimeNs + 2);
+//    event2.init();
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//
+//    CountMetricProducer countProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      bucketStartTimeNs, bucketStartTimeNs);
+//
+//    // 2 events in bucket 1.
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event1);
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event2);
+//
+//    // Flushes at event #2.
+//    countProducer.flushIfNeededLocked(bucketStartTimeNs + 2);
+//    EXPECT_EQ(0UL, countProducer.mPastBuckets.size());
+//
+//    // Flushes.
+//    countProducer.flushIfNeededLocked(bucketStartTimeNs + bucketSizeNs + 1);
+//    EXPECT_EQ(1UL, countProducer.mPastBuckets.size());
+//    EXPECT_TRUE(countProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
+//                countProducer.mPastBuckets.end());
+//    const auto& buckets = countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//    EXPECT_EQ(1UL, buckets.size());
+//    EXPECT_EQ(bucketStartTimeNs, buckets[0].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[0].mBucketEndNs);
+//    EXPECT_EQ(2LL, buckets[0].mCount);
+//
+//    // 1 matched event happens in bucket 2.
+//    LogEvent event3(tagId, bucketStartTimeNs + bucketSizeNs + 2);
+//    event3.init();
+//
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event3);
+//    countProducer.flushIfNeededLocked(bucketStartTimeNs + 2 * bucketSizeNs + 1);
+//    EXPECT_EQ(1UL, countProducer.mPastBuckets.size());
+//    EXPECT_TRUE(countProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
+//                countProducer.mPastBuckets.end());
+//    EXPECT_EQ(2UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    const auto& bucketInfo2 = countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][1];
+//    EXPECT_EQ(bucket2StartTimeNs, bucketInfo2.mBucketStartNs);
+//    EXPECT_EQ(bucket2StartTimeNs + bucketSizeNs, bucketInfo2.mBucketEndNs);
+//    EXPECT_EQ(1LL, bucketInfo2.mCount);
+//
+//    // nothing happens in bucket 3. we should not record anything for bucket 3.
+//    countProducer.flushIfNeededLocked(bucketStartTimeNs + 3 * bucketSizeNs + 1);
+//    EXPECT_EQ(1UL, countProducer.mPastBuckets.size());
+//    EXPECT_TRUE(countProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
+//                countProducer.mPastBuckets.end());
+//    const auto& buckets3 = countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//    EXPECT_EQ(2UL, buckets3.size());
+//}
+//
+//TEST(CountMetricProducerTest, TestEventsWithNonSlicedCondition) {
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//
+//    CountMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_condition(StringToId("SCREEN_ON"));
+//
+//    LogEvent event1(1, bucketStartTimeNs + 1);
+//    event1.init();
+//
+//    LogEvent event2(1, bucketStartTimeNs + 10);
+//    event2.init();
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//
+//    CountMetricProducer countProducer(kConfigKey, metric, 1, wizard, bucketStartTimeNs,
+//                                      bucketStartTimeNs);
+//
+//    countProducer.onConditionChanged(true, bucketStartTimeNs);
+//    countProducer.onMatchedLogEvent(1 /*matcher index*/, event1);
+//    EXPECT_EQ(0UL, countProducer.mPastBuckets.size());
+//
+//    countProducer.onConditionChanged(false /*new condition*/, bucketStartTimeNs + 2);
+//    // Upon this match event, the matched event1 is flushed.
+//    countProducer.onMatchedLogEvent(1 /*matcher index*/, event2);
+//    EXPECT_EQ(0UL, countProducer.mPastBuckets.size());
+//
+//    countProducer.flushIfNeededLocked(bucketStartTimeNs + bucketSizeNs + 1);
+//    EXPECT_EQ(1UL, countProducer.mPastBuckets.size());
+//    EXPECT_TRUE(countProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
+//                countProducer.mPastBuckets.end());
+//    {
+//        const auto& buckets = countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//        EXPECT_EQ(1UL, buckets.size());
+//        const auto& bucketInfo = buckets[0];
+//        EXPECT_EQ(bucketStartTimeNs, bucketInfo.mBucketStartNs);
+//        EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, bucketInfo.mBucketEndNs);
+//        EXPECT_EQ(1LL, bucketInfo.mCount);
+//    }
+//}
+//
+//TEST(CountMetricProducerTest, TestEventsWithSlicedCondition) {
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//
+//    int tagId = 1;
+//    int conditionTagId = 2;
+//
+//    CountMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_condition(StringToId("APP_IN_BACKGROUND_PER_UID_AND_SCREEN_ON"));
+//    MetricConditionLink* link = metric.add_links();
+//    link->set_condition(StringToId("APP_IN_BACKGROUND_PER_UID"));
+//    buildSimpleAtomFieldMatcher(tagId, 1, link->mutable_fields_in_what());
+//    buildSimpleAtomFieldMatcher(conditionTagId, 2, link->mutable_fields_in_condition());
+//
+//    LogEvent event1(tagId, bucketStartTimeNs + 1);
+//    event1.write("111");  // uid
+//    event1.init();
+//    ConditionKey key1;
+//    key1[StringToId("APP_IN_BACKGROUND_PER_UID")] =
+//        {getMockedDimensionKey(conditionTagId, 2, "111")};
+//
+//    LogEvent event2(tagId, bucketStartTimeNs + 10);
+//    event2.write("222");  // uid
+//    event2.init();
+//    ConditionKey key2;
+//    key2[StringToId("APP_IN_BACKGROUND_PER_UID")] =
+//        {getMockedDimensionKey(conditionTagId, 2, "222")};
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    EXPECT_CALL(*wizard, query(_, key1, _)).WillOnce(Return(ConditionState::kFalse));
+//
+//    EXPECT_CALL(*wizard, query(_, key2, _)).WillOnce(Return(ConditionState::kTrue));
+//
+//    CountMetricProducer countProducer(kConfigKey, metric, 1 /*condition tracker index*/, wizard,
+//                                      bucketStartTimeNs, bucketStartTimeNs);
+//
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event1);
+//    countProducer.flushIfNeededLocked(bucketStartTimeNs + 1);
+//    EXPECT_EQ(0UL, countProducer.mPastBuckets.size());
+//
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event2);
+//    countProducer.flushIfNeededLocked(bucketStartTimeNs + bucketSizeNs + 1);
+//    EXPECT_EQ(1UL, countProducer.mPastBuckets.size());
+//    EXPECT_TRUE(countProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
+//                countProducer.mPastBuckets.end());
+//    const auto& buckets = countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//    EXPECT_EQ(1UL, buckets.size());
+//    const auto& bucketInfo = buckets[0];
+//    EXPECT_EQ(bucketStartTimeNs, bucketInfo.mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, bucketInfo.mBucketEndNs);
+//    EXPECT_EQ(1LL, bucketInfo.mCount);
+//}
+//
+//TEST(CountMetricProducerTest, TestEventWithAppUpgrade) {
+//    sp<AlarmMonitor> alarmMonitor;
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 15 * NS_PER_SEC;
+//
+//    int tagId = 1;
+//    int conditionTagId = 2;
+//
+//    CountMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    Alert alert;
+//    alert.set_num_buckets(3);
+//    alert.set_trigger_if_sum_gt(2);
+//    LogEvent event1(tagId, bucketStartTimeNs + 1);
+//    event1.write("111");  // uid
+//    event1.init();
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    CountMetricProducer countProducer(kConfigKey, metric, -1 /* no condition */, wizard,
+//                                      bucketStartTimeNs, bucketStartTimeNs);
+//
+//    sp<AnomalyTracker> anomalyTracker = countProducer.addAnomalyTracker(alert, alarmMonitor);
+//    EXPECT_TRUE(anomalyTracker != nullptr);
+//
+//    // Bucket is flushed yet.
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event1);
+//    EXPECT_EQ(0UL, countProducer.mPastBuckets.size());
+//    EXPECT_EQ(0, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
+//
+//    // App upgrade forces bucket flush.
+//    // Check that there's a past bucket and the bucket end is not adjusted.
+//    countProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
+//    EXPECT_EQ(1UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ((long long)bucketStartTimeNs,
+//              countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mBucketStartNs);
+//    EXPECT_EQ((long long)eventUpgradeTimeNs,
+//              countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mBucketEndNs);
+//    EXPECT_EQ(eventUpgradeTimeNs, countProducer.mCurrentBucketStartTimeNs);
+//    // Anomaly tracker only contains full buckets.
+//    EXPECT_EQ(0, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
+//
+//    int64_t lastEndTimeNs = countProducer.getCurrentBucketEndTimeNs();
+//    // Next event occurs in same bucket as partial bucket created.
+//    LogEvent event2(tagId, bucketStartTimeNs + 59 * NS_PER_SEC + 10);
+//    event2.write("222");  // uid
+//    event2.init();
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event2);
+//    EXPECT_EQ(1UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(eventUpgradeTimeNs, countProducer.mCurrentBucketStartTimeNs);
+//    EXPECT_EQ(0, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
+//
+//    // Third event in following bucket.
+//    LogEvent event3(tagId, bucketStartTimeNs + 62 * NS_PER_SEC + 10);
+//    event3.write("333");  // uid
+//    event3.init();
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event3);
+//    EXPECT_EQ(2UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(lastEndTimeNs, countProducer.mCurrentBucketStartTimeNs);
+//    EXPECT_EQ(2, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
+//}
+//
+//TEST(CountMetricProducerTest, TestEventWithAppUpgradeInNextBucket) {
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 65 * NS_PER_SEC;
+//
+//    int tagId = 1;
+//    int conditionTagId = 2;
+//
+//    CountMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    LogEvent event1(tagId, bucketStartTimeNs + 1);
+//    event1.write("111");  // uid
+//    event1.init();
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    CountMetricProducer countProducer(kConfigKey, metric, -1 /* no condition */, wizard,
+//                                      bucketStartTimeNs, bucketStartTimeNs);
+//
+//    // Bucket is flushed yet.
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event1);
+//    EXPECT_EQ(0UL, countProducer.mPastBuckets.size());
+//
+//    // App upgrade forces bucket flush.
+//    // Check that there's a past bucket and the bucket end is not adjusted.
+//    countProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
+//    EXPECT_EQ(1UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ((int64_t)bucketStartTimeNs,
+//              countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs,
+//              countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mBucketEndNs);
+//    EXPECT_EQ(eventUpgradeTimeNs, countProducer.mCurrentBucketStartTimeNs);
+//
+//    // Next event occurs in same bucket as partial bucket created.
+//    LogEvent event2(tagId, bucketStartTimeNs + 70 * NS_PER_SEC + 10);
+//    event2.write("222");  // uid
+//    event2.init();
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event2);
+//    EXPECT_EQ(1UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//
+//    // Third event in following bucket.
+//    LogEvent event3(tagId, bucketStartTimeNs + 121 * NS_PER_SEC + 10);
+//    event3.write("333");  // uid
+//    event3.init();
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event3);
+//    EXPECT_EQ(2UL, countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ((int64_t)eventUpgradeTimeNs,
+//              countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][1].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs,
+//              countProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][1].mBucketEndNs);
+//}
+//
+//TEST(CountMetricProducerTest, TestAnomalyDetectionUnSliced) {
+//    sp<AlarmMonitor> alarmMonitor;
+//    Alert alert;
+//    alert.set_id(11);
+//    alert.set_metric_id(1);
+//    alert.set_trigger_if_sum_gt(2);
+//    alert.set_num_buckets(2);
+//    const int32_t refPeriodSec = 1;
+//    alert.set_refractory_period_secs(refPeriodSec);
+//
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//    int64_t bucket2StartTimeNs = bucketStartTimeNs + bucketSizeNs;
+//    int64_t bucket3StartTimeNs = bucketStartTimeNs + 2 * bucketSizeNs;
+//
+//    CountMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    CountMetricProducer countProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      bucketStartTimeNs, bucketStartTimeNs);
+//
+//    sp<AnomalyTracker> anomalyTracker = countProducer.addAnomalyTracker(alert, alarmMonitor);
+//
+//    int tagId = 1;
+//    LogEvent event1(tagId, bucketStartTimeNs + 1);
+//    event1.init();
+//    LogEvent event2(tagId, bucketStartTimeNs + 2);
+//    event2.init();
+//    LogEvent event3(tagId, bucketStartTimeNs + 2 * bucketSizeNs + 1);
+//    event3.init();
+//    LogEvent event4(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 1);
+//    event4.init();
+//    LogEvent event5(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 2);
+//    event5.init();
+//    LogEvent event6(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 3);
+//    event6.init();
+//    LogEvent event7(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 2 * NS_PER_SEC);
+//    event7.init();
+//
+//    // Two events in bucket #0.
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event1);
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event2);
+//
+//    EXPECT_EQ(1UL, countProducer.mCurrentSlicedCounter->size());
+//    EXPECT_EQ(2L, countProducer.mCurrentSlicedCounter->begin()->second);
+//    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY), 0U);
+//
+//    // One event in bucket #2. No alarm as bucket #0 is trashed out.
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event3);
+//    EXPECT_EQ(1UL, countProducer.mCurrentSlicedCounter->size());
+//    EXPECT_EQ(1L, countProducer.mCurrentSlicedCounter->begin()->second);
+//    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY), 0U);
+//
+//    // Two events in bucket #3.
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event4);
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event5);
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event6);
+//    EXPECT_EQ(1UL, countProducer.mCurrentSlicedCounter->size());
+//    EXPECT_EQ(3L, countProducer.mCurrentSlicedCounter->begin()->second);
+//    // Anomaly at event 6 is within refractory period. The alarm is at event 5 timestamp not event 6
+//    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
+//            std::ceil(1.0 * event5.GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec));
+//
+//    countProducer.onMatchedLogEvent(1 /*log matcher index*/, event7);
+//    EXPECT_EQ(1UL, countProducer.mCurrentSlicedCounter->size());
+//    EXPECT_EQ(4L, countProducer.mCurrentSlicedCounter->begin()->second);
+//    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
+//            std::ceil(1.0 * event7.GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec));
+//}
 
 TEST(CountMetricProducerTest, TestOneWeekTimeUnit) {
     CountMetric metric;
diff --git a/cmds/statsd/tests/metrics/DurationMetricProducer_test.cpp b/cmds/statsd/tests/metrics/DurationMetricProducer_test.cpp
index b294cad..6661374 100644
--- a/cmds/statsd/tests/metrics/DurationMetricProducer_test.cpp
+++ b/cmds/statsd/tests/metrics/DurationMetricProducer_test.cpp
@@ -56,382 +56,383 @@
     EXPECT_EQ(660000000005, durationProducer.getCurrentBucketEndTimeNs());
 }
 
-TEST(DurationMetricTrackerTest, TestNoCondition) {
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-
-    DurationMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_aggregation_type(DurationMetric_AggregationType_SUM);
-
-    int tagId = 1;
-    LogEvent event1(tagId, bucketStartTimeNs + 1);
-    event1.init();
-    LogEvent event2(tagId, bucketStartTimeNs + bucketSizeNs + 2);
-    event2.init();
-
-    FieldMatcher dimensions;
-    DurationMetricProducer durationProducer(
-            kConfigKey, metric, -1 /*no condition*/, 1 /* start index */, 2 /* stop index */,
-            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
-
-    durationProducer.onMatchedLogEvent(1 /* start index*/, event1);
-    durationProducer.onMatchedLogEvent(2 /* stop index*/, event2);
-    durationProducer.flushIfNeededLocked(bucketStartTimeNs + 2 * bucketSizeNs + 1);
-    EXPECT_EQ(1UL, durationProducer.mPastBuckets.size());
-    EXPECT_TRUE(durationProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
-                durationProducer.mPastBuckets.end());
-    const auto& buckets = durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-    EXPECT_EQ(2UL, buckets.size());
-    EXPECT_EQ(bucketStartTimeNs, buckets[0].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[0].mBucketEndNs);
-    EXPECT_EQ(bucketSizeNs - 1LL, buckets[0].mDuration);
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[1].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets[1].mBucketEndNs);
-    EXPECT_EQ(2LL, buckets[1].mDuration);
-}
-
-TEST(DurationMetricTrackerTest, TestNonSlicedCondition) {
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-
-    DurationMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_aggregation_type(DurationMetric_AggregationType_SUM);
-
-    int tagId = 1;
-    LogEvent event1(tagId, bucketStartTimeNs + 1);
-    event1.init();
-    LogEvent event2(tagId, bucketStartTimeNs + 2);
-    event2.init();
-    LogEvent event3(tagId, bucketStartTimeNs + bucketSizeNs + 1);
-    event3.init();
-    LogEvent event4(tagId, bucketStartTimeNs + bucketSizeNs + 3);
-    event4.init();
-
-    FieldMatcher dimensions;
-    DurationMetricProducer durationProducer(
-            kConfigKey, metric, 0 /* condition index */, 1 /* start index */, 2 /* stop index */,
-            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
-    durationProducer.mCondition = ConditionState::kFalse;
-
-    EXPECT_FALSE(durationProducer.mCondition);
-    EXPECT_FALSE(durationProducer.isConditionSliced());
-
-    durationProducer.onMatchedLogEvent(1 /* start index*/, event1);
-    durationProducer.onMatchedLogEvent(2 /* stop index*/, event2);
-    durationProducer.flushIfNeededLocked(bucketStartTimeNs + bucketSizeNs + 1);
-    EXPECT_EQ(0UL, durationProducer.mPastBuckets.size());
-
-    durationProducer.onMatchedLogEvent(1 /* start index*/, event3);
-    durationProducer.onConditionChanged(true /* condition */, bucketStartTimeNs + bucketSizeNs + 2);
-    durationProducer.onMatchedLogEvent(2 /* stop index*/, event4);
-    durationProducer.flushIfNeededLocked(bucketStartTimeNs + 2 * bucketSizeNs + 1);
-    EXPECT_EQ(1UL, durationProducer.mPastBuckets.size());
-    EXPECT_TRUE(durationProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
-                durationProducer.mPastBuckets.end());
-    const auto& buckets2 = durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-    EXPECT_EQ(1UL, buckets2.size());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets2[0].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets2[0].mBucketEndNs);
-    EXPECT_EQ(1LL, buckets2[0].mDuration);
-}
-
-TEST(DurationMetricTrackerTest, TestNonSlicedConditionUnknownState) {
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-
-    DurationMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_aggregation_type(DurationMetric_AggregationType_SUM);
-
-    int tagId = 1;
-    LogEvent event1(tagId, bucketStartTimeNs + 1);
-    event1.init();
-    LogEvent event2(tagId, bucketStartTimeNs + 2);
-    event2.init();
-    LogEvent event3(tagId, bucketStartTimeNs + bucketSizeNs + 1);
-    event3.init();
-    LogEvent event4(tagId, bucketStartTimeNs + bucketSizeNs + 3);
-    event4.init();
-
-    FieldMatcher dimensions;
-    DurationMetricProducer durationProducer(
-            kConfigKey, metric, 0 /* condition index */, 1 /* start index */, 2 /* stop index */,
-            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
-
-    EXPECT_EQ(ConditionState::kUnknown, durationProducer.mCondition);
-    EXPECT_FALSE(durationProducer.isConditionSliced());
-
-    durationProducer.onMatchedLogEvent(1 /* start index*/, event1);
-    durationProducer.onMatchedLogEvent(2 /* stop index*/, event2);
-    durationProducer.flushIfNeededLocked(bucketStartTimeNs + bucketSizeNs + 1);
-    EXPECT_EQ(0UL, durationProducer.mPastBuckets.size());
-
-    durationProducer.onMatchedLogEvent(1 /* start index*/, event3);
-    durationProducer.onConditionChanged(true /* condition */, bucketStartTimeNs + bucketSizeNs + 2);
-    durationProducer.onMatchedLogEvent(2 /* stop index*/, event4);
-    durationProducer.flushIfNeededLocked(bucketStartTimeNs + 2 * bucketSizeNs + 1);
-    EXPECT_EQ(1UL, durationProducer.mPastBuckets.size());
-    const auto& buckets2 = durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-    EXPECT_EQ(1UL, buckets2.size());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets2[0].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets2[0].mBucketEndNs);
-    EXPECT_EQ(1LL, buckets2[0].mDuration);
-}
-
-TEST(DurationMetricTrackerTest, TestSumDurationWithUpgrade) {
-    /**
-     * The duration starts from the first bucket, through the two partial buckets (10-70sec),
-     * another bucket, and ends at the beginning of the next full bucket.
-     * Expected buckets:
-     *  - [10,25]: 14 secs
-     *  - [25,70]: All 45 secs
-     *  - [70,130]: All 60 secs
-     *  - [130, 210]: Only 5 secs (event ended at 135sec)
-     */
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 15 * NS_PER_SEC;
-    int64_t startTimeNs = bucketStartTimeNs + 1 * NS_PER_SEC;
-    int64_t endTimeNs = startTimeNs + 125 * NS_PER_SEC;
-
-    int tagId = 1;
-
-    DurationMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_aggregation_type(DurationMetric_AggregationType_SUM);
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    FieldMatcher dimensions;
-    DurationMetricProducer durationProducer(
-            kConfigKey, metric, -1 /* no condition */, 1 /* start index */, 2 /* stop index */,
-            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
-
-    LogEvent start_event(tagId, startTimeNs);
-    start_event.init();
-    durationProducer.onMatchedLogEvent(1 /* start index*/, start_event);
-    EXPECT_EQ(0UL, durationProducer.mPastBuckets.size());
-    EXPECT_EQ(bucketStartTimeNs, durationProducer.mCurrentBucketStartTimeNs);
-
-    durationProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
-    EXPECT_EQ(1UL, durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    std::vector<DurationBucket> buckets =
-            durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-    EXPECT_EQ(bucketStartTimeNs, buckets[0].mBucketStartNs);
-    EXPECT_EQ(eventUpgradeTimeNs, buckets[0].mBucketEndNs);
-    EXPECT_EQ(eventUpgradeTimeNs - startTimeNs, buckets[0].mDuration);
-    EXPECT_EQ(eventUpgradeTimeNs, durationProducer.mCurrentBucketStartTimeNs);
-
-    // We skip ahead one bucket, so we fill in the first two partial buckets and one full bucket.
-    LogEvent end_event(tagId, endTimeNs);
-    end_event.init();
-    durationProducer.onMatchedLogEvent(2 /* stop index*/, end_event);
-    buckets = durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-    EXPECT_EQ(3UL, buckets.size());
-    EXPECT_EQ(eventUpgradeTimeNs, buckets[1].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[1].mBucketEndNs);
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs - eventUpgradeTimeNs, buckets[1].mDuration);
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[2].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets[2].mBucketEndNs);
-    EXPECT_EQ(bucketSizeNs, buckets[2].mDuration);
-}
-
-TEST(DurationMetricTrackerTest, TestSumDurationWithUpgradeInFollowingBucket) {
-    /**
-     * Expected buckets (start at 11s, upgrade at 75s, end at 135s):
-     *  - [10,70]: 59 secs
-     *  - [70,75]: 5 sec
-     *  - [75,130]: 55 secs
-     */
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 65 * NS_PER_SEC;
-    int64_t startTimeNs = bucketStartTimeNs + 1 * NS_PER_SEC;
-    int64_t endTimeNs = startTimeNs + 125 * NS_PER_SEC;
-
-    int tagId = 1;
-
-    DurationMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_aggregation_type(DurationMetric_AggregationType_SUM);
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    FieldMatcher dimensions;
-    DurationMetricProducer durationProducer(
-            kConfigKey, metric, -1 /* no condition */, 1 /* start index */, 2 /* stop index */,
-            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
-
-    LogEvent start_event(tagId, startTimeNs);
-    start_event.init();
-    durationProducer.onMatchedLogEvent(1 /* start index*/, start_event);
-    EXPECT_EQ(0UL, durationProducer.mPastBuckets.size());
-    EXPECT_EQ(bucketStartTimeNs, durationProducer.mCurrentBucketStartTimeNs);
-
-    durationProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
-    EXPECT_EQ(2UL, durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    std::vector<DurationBucket> buckets =
-            durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-    EXPECT_EQ(bucketStartTimeNs, buckets[0].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[0].mBucketEndNs);
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs - startTimeNs, buckets[0].mDuration);
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[1].mBucketStartNs);
-    EXPECT_EQ(eventUpgradeTimeNs, buckets[1].mBucketEndNs);
-    EXPECT_EQ(eventUpgradeTimeNs - (bucketStartTimeNs + bucketSizeNs), buckets[1].mDuration);
-    EXPECT_EQ(eventUpgradeTimeNs, durationProducer.mCurrentBucketStartTimeNs);
-
-    // We skip ahead one bucket, so we fill in the first two partial buckets and one full bucket.
-    LogEvent end_event(tagId, endTimeNs);
-    end_event.init();
-    durationProducer.onMatchedLogEvent(2 /* stop index*/, end_event);
-    buckets = durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-    EXPECT_EQ(3UL, buckets.size());
-    EXPECT_EQ(eventUpgradeTimeNs, buckets[2].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets[2].mBucketEndNs);
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs - eventUpgradeTimeNs, buckets[2].mDuration);
-}
-
-TEST(DurationMetricTrackerTest, TestSumDurationAnomalyWithUpgrade) {
-    sp<AlarmMonitor> alarmMonitor;
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 15 * NS_PER_SEC;
-    int64_t startTimeNs = bucketStartTimeNs + 1;
-    int64_t endTimeNs = startTimeNs + 65 * NS_PER_SEC;
-
-    int tagId = 1;
-
-    // Setup metric with alert.
-    DurationMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_aggregation_type(DurationMetric_AggregationType_SUM);
-    Alert alert;
-    alert.set_num_buckets(3);
-    alert.set_trigger_if_sum_gt(2);
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    FieldMatcher dimensions;
-    DurationMetricProducer durationProducer(
-            kConfigKey, metric, -1 /* no condition */, 1 /* start index */, 2 /* stop index */,
-            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
-
-    sp<AnomalyTracker> anomalyTracker = durationProducer.addAnomalyTracker(alert, alarmMonitor);
-    EXPECT_TRUE(anomalyTracker != nullptr);
-
-    LogEvent start_event(tagId, startTimeNs);
-    start_event.init();
-    durationProducer.onMatchedLogEvent(1 /* start index*/, start_event);
-    durationProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
-    // We skip ahead one bucket, so we fill in the first two partial buckets and one full bucket.
-    LogEvent end_event(tagId, endTimeNs);
-    end_event.init();
-    durationProducer.onMatchedLogEvent(2 /* stop index*/, end_event);
-
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs - startTimeNs,
-              anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
-}
-
-TEST(DurationMetricTrackerTest, TestMaxDurationWithUpgrade) {
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 15 * NS_PER_SEC;
-    int64_t startTimeNs = bucketStartTimeNs + 1;
-    int64_t endTimeNs = startTimeNs + 125 * NS_PER_SEC;
-
-    int tagId = 1;
-
-    DurationMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_aggregation_type(DurationMetric_AggregationType_MAX_SPARSE);
-    LogEvent event1(tagId, startTimeNs);
-    event1.write("111");  // uid
-    event1.init();
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    FieldMatcher dimensions;
-    DurationMetricProducer durationProducer(
-            kConfigKey, metric, -1 /* no condition */, 1 /* start index */, 2 /* stop index */,
-            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
-
-    LogEvent start_event(tagId, startTimeNs);
-    start_event.init();
-    durationProducer.onMatchedLogEvent(1 /* start index*/, start_event);
-    EXPECT_EQ(0UL, durationProducer.mPastBuckets.size());
-    EXPECT_EQ(bucketStartTimeNs, durationProducer.mCurrentBucketStartTimeNs);
-
-    durationProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
-    EXPECT_EQ(0UL, durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(eventUpgradeTimeNs, durationProducer.mCurrentBucketStartTimeNs);
-
-    // We skip ahead one bucket, so we fill in the first two partial buckets and one full bucket.
-    LogEvent end_event(tagId, endTimeNs);
-    end_event.init();
-    durationProducer.onMatchedLogEvent(2 /* stop index*/, end_event);
-    EXPECT_EQ(0UL, durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-
-    durationProducer.flushIfNeededLocked(bucketStartTimeNs + 3 * bucketSizeNs + 1);
-    std::vector<DurationBucket> buckets =
-            durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-    EXPECT_EQ(1UL, buckets.size());
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets[0].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs, buckets[0].mBucketEndNs);
-    EXPECT_EQ(endTimeNs - startTimeNs, buckets[0].mDuration);
-}
-
-TEST(DurationMetricTrackerTest, TestMaxDurationWithUpgradeInNextBucket) {
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
-    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 65 * NS_PER_SEC;
-    int64_t startTimeNs = bucketStartTimeNs + 1;
-    int64_t endTimeNs = startTimeNs + 115 * NS_PER_SEC;
-
-    int tagId = 1;
-
-    DurationMetric metric;
-    metric.set_id(1);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_aggregation_type(DurationMetric_AggregationType_MAX_SPARSE);
-    LogEvent event1(tagId, startTimeNs);
-    event1.write("111");  // uid
-    event1.init();
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    FieldMatcher dimensions;
-    DurationMetricProducer durationProducer(
-            kConfigKey, metric, -1 /* no condition */, 1 /* start index */, 2 /* stop index */,
-            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
-
-    LogEvent start_event(tagId, startTimeNs);
-    start_event.init();
-    durationProducer.onMatchedLogEvent(1 /* start index*/, start_event);
-    EXPECT_EQ(0UL, durationProducer.mPastBuckets.size());
-    EXPECT_EQ(bucketStartTimeNs, durationProducer.mCurrentBucketStartTimeNs);
-
-    durationProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
-    EXPECT_EQ(0UL, durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(eventUpgradeTimeNs, durationProducer.mCurrentBucketStartTimeNs);
-
-    // Stop occurs in the same partial bucket as created for the app upgrade.
-    LogEvent end_event(tagId, endTimeNs);
-    end_event.init();
-    durationProducer.onMatchedLogEvent(2 /* stop index*/, end_event);
-    EXPECT_EQ(0UL, durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(eventUpgradeTimeNs, durationProducer.mCurrentBucketStartTimeNs);
-
-    durationProducer.flushIfNeededLocked(bucketStartTimeNs + 2 * bucketSizeNs + 1);
-    std::vector<DurationBucket> buckets =
-            durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
-    EXPECT_EQ(1UL, buckets.size());
-    EXPECT_EQ(eventUpgradeTimeNs, buckets[0].mBucketStartNs);
-    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets[0].mBucketEndNs);
-    EXPECT_EQ(endTimeNs - startTimeNs, buckets[0].mDuration);
-}
+// TODO(b/149590301): Update these to use new socket schema.
+//TEST(DurationMetricTrackerTest, TestNoCondition) {
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//
+//    DurationMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_aggregation_type(DurationMetric_AggregationType_SUM);
+//
+//    int tagId = 1;
+//    LogEvent event1(tagId, bucketStartTimeNs + 1);
+//    event1.init();
+//    LogEvent event2(tagId, bucketStartTimeNs + bucketSizeNs + 2);
+//    event2.init();
+//
+//    FieldMatcher dimensions;
+//    DurationMetricProducer durationProducer(
+//            kConfigKey, metric, -1 /*no condition*/, 1 /* start index */, 2 /* stop index */,
+//            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
+//
+//    durationProducer.onMatchedLogEvent(1 /* start index*/, event1);
+//    durationProducer.onMatchedLogEvent(2 /* stop index*/, event2);
+//    durationProducer.flushIfNeededLocked(bucketStartTimeNs + 2 * bucketSizeNs + 1);
+//    EXPECT_EQ(1UL, durationProducer.mPastBuckets.size());
+//    EXPECT_TRUE(durationProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
+//                durationProducer.mPastBuckets.end());
+//    const auto& buckets = durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//    EXPECT_EQ(2UL, buckets.size());
+//    EXPECT_EQ(bucketStartTimeNs, buckets[0].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[0].mBucketEndNs);
+//    EXPECT_EQ(bucketSizeNs - 1LL, buckets[0].mDuration);
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[1].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets[1].mBucketEndNs);
+//    EXPECT_EQ(2LL, buckets[1].mDuration);
+//}
+//
+//TEST(DurationMetricTrackerTest, TestNonSlicedCondition) {
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//
+//    DurationMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_aggregation_type(DurationMetric_AggregationType_SUM);
+//
+//    int tagId = 1;
+//    LogEvent event1(tagId, bucketStartTimeNs + 1);
+//    event1.init();
+//    LogEvent event2(tagId, bucketStartTimeNs + 2);
+//    event2.init();
+//    LogEvent event3(tagId, bucketStartTimeNs + bucketSizeNs + 1);
+//    event3.init();
+//    LogEvent event4(tagId, bucketStartTimeNs + bucketSizeNs + 3);
+//    event4.init();
+//
+//    FieldMatcher dimensions;
+//    DurationMetricProducer durationProducer(
+//            kConfigKey, metric, 0 /* condition index */, 1 /* start index */, 2 /* stop index */,
+//            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
+//    durationProducer.mCondition = ConditionState::kFalse;
+//
+//    EXPECT_FALSE(durationProducer.mCondition);
+//    EXPECT_FALSE(durationProducer.isConditionSliced());
+//
+//    durationProducer.onMatchedLogEvent(1 /* start index*/, event1);
+//    durationProducer.onMatchedLogEvent(2 /* stop index*/, event2);
+//    durationProducer.flushIfNeededLocked(bucketStartTimeNs + bucketSizeNs + 1);
+//    EXPECT_EQ(0UL, durationProducer.mPastBuckets.size());
+//
+//    durationProducer.onMatchedLogEvent(1 /* start index*/, event3);
+//    durationProducer.onConditionChanged(true /* condition */, bucketStartTimeNs + bucketSizeNs + 2);
+//    durationProducer.onMatchedLogEvent(2 /* stop index*/, event4);
+//    durationProducer.flushIfNeededLocked(bucketStartTimeNs + 2 * bucketSizeNs + 1);
+//    EXPECT_EQ(1UL, durationProducer.mPastBuckets.size());
+//    EXPECT_TRUE(durationProducer.mPastBuckets.find(DEFAULT_METRIC_DIMENSION_KEY) !=
+//                durationProducer.mPastBuckets.end());
+//    const auto& buckets2 = durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//    EXPECT_EQ(1UL, buckets2.size());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets2[0].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets2[0].mBucketEndNs);
+//    EXPECT_EQ(1LL, buckets2[0].mDuration);
+//}
+//
+//TEST(DurationMetricTrackerTest, TestNonSlicedConditionUnknownState) {
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//
+//    DurationMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_aggregation_type(DurationMetric_AggregationType_SUM);
+//
+//    int tagId = 1;
+//    LogEvent event1(tagId, bucketStartTimeNs + 1);
+//    event1.init();
+//    LogEvent event2(tagId, bucketStartTimeNs + 2);
+//    event2.init();
+//    LogEvent event3(tagId, bucketStartTimeNs + bucketSizeNs + 1);
+//    event3.init();
+//    LogEvent event4(tagId, bucketStartTimeNs + bucketSizeNs + 3);
+//    event4.init();
+//
+//    FieldMatcher dimensions;
+//    DurationMetricProducer durationProducer(
+//            kConfigKey, metric, 0 /* condition index */, 1 /* start index */, 2 /* stop index */,
+//            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
+//
+//    EXPECT_EQ(ConditionState::kUnknown, durationProducer.mCondition);
+//    EXPECT_FALSE(durationProducer.isConditionSliced());
+//
+//    durationProducer.onMatchedLogEvent(1 /* start index*/, event1);
+//    durationProducer.onMatchedLogEvent(2 /* stop index*/, event2);
+//    durationProducer.flushIfNeededLocked(bucketStartTimeNs + bucketSizeNs + 1);
+//    EXPECT_EQ(0UL, durationProducer.mPastBuckets.size());
+//
+//    durationProducer.onMatchedLogEvent(1 /* start index*/, event3);
+//    durationProducer.onConditionChanged(true /* condition */, bucketStartTimeNs + bucketSizeNs + 2);
+//    durationProducer.onMatchedLogEvent(2 /* stop index*/, event4);
+//    durationProducer.flushIfNeededLocked(bucketStartTimeNs + 2 * bucketSizeNs + 1);
+//    EXPECT_EQ(1UL, durationProducer.mPastBuckets.size());
+//    const auto& buckets2 = durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//    EXPECT_EQ(1UL, buckets2.size());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets2[0].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets2[0].mBucketEndNs);
+//    EXPECT_EQ(1LL, buckets2[0].mDuration);
+//}
+//
+//TEST(DurationMetricTrackerTest, TestSumDurationWithUpgrade) {
+//    /**
+//     * The duration starts from the first bucket, through the two partial buckets (10-70sec),
+//     * another bucket, and ends at the beginning of the next full bucket.
+//     * Expected buckets:
+//     *  - [10,25]: 14 secs
+//     *  - [25,70]: All 45 secs
+//     *  - [70,130]: All 60 secs
+//     *  - [130, 210]: Only 5 secs (event ended at 135sec)
+//     */
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 15 * NS_PER_SEC;
+//    int64_t startTimeNs = bucketStartTimeNs + 1 * NS_PER_SEC;
+//    int64_t endTimeNs = startTimeNs + 125 * NS_PER_SEC;
+//
+//    int tagId = 1;
+//
+//    DurationMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_aggregation_type(DurationMetric_AggregationType_SUM);
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    FieldMatcher dimensions;
+//    DurationMetricProducer durationProducer(
+//            kConfigKey, metric, -1 /* no condition */, 1 /* start index */, 2 /* stop index */,
+//            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
+//
+//    LogEvent start_event(tagId, startTimeNs);
+//    start_event.init();
+//    durationProducer.onMatchedLogEvent(1 /* start index*/, start_event);
+//    EXPECT_EQ(0UL, durationProducer.mPastBuckets.size());
+//    EXPECT_EQ(bucketStartTimeNs, durationProducer.mCurrentBucketStartTimeNs);
+//
+//    durationProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
+//    EXPECT_EQ(1UL, durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    std::vector<DurationBucket> buckets =
+//            durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//    EXPECT_EQ(bucketStartTimeNs, buckets[0].mBucketStartNs);
+//    EXPECT_EQ(eventUpgradeTimeNs, buckets[0].mBucketEndNs);
+//    EXPECT_EQ(eventUpgradeTimeNs - startTimeNs, buckets[0].mDuration);
+//    EXPECT_EQ(eventUpgradeTimeNs, durationProducer.mCurrentBucketStartTimeNs);
+//
+//    // We skip ahead one bucket, so we fill in the first two partial buckets and one full bucket.
+//    LogEvent end_event(tagId, endTimeNs);
+//    end_event.init();
+//    durationProducer.onMatchedLogEvent(2 /* stop index*/, end_event);
+//    buckets = durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//    EXPECT_EQ(3UL, buckets.size());
+//    EXPECT_EQ(eventUpgradeTimeNs, buckets[1].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[1].mBucketEndNs);
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs - eventUpgradeTimeNs, buckets[1].mDuration);
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[2].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets[2].mBucketEndNs);
+//    EXPECT_EQ(bucketSizeNs, buckets[2].mDuration);
+//}
+//
+//TEST(DurationMetricTrackerTest, TestSumDurationWithUpgradeInFollowingBucket) {
+//    /**
+//     * Expected buckets (start at 11s, upgrade at 75s, end at 135s):
+//     *  - [10,70]: 59 secs
+//     *  - [70,75]: 5 sec
+//     *  - [75,130]: 55 secs
+//     */
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 65 * NS_PER_SEC;
+//    int64_t startTimeNs = bucketStartTimeNs + 1 * NS_PER_SEC;
+//    int64_t endTimeNs = startTimeNs + 125 * NS_PER_SEC;
+//
+//    int tagId = 1;
+//
+//    DurationMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_aggregation_type(DurationMetric_AggregationType_SUM);
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    FieldMatcher dimensions;
+//    DurationMetricProducer durationProducer(
+//            kConfigKey, metric, -1 /* no condition */, 1 /* start index */, 2 /* stop index */,
+//            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
+//
+//    LogEvent start_event(tagId, startTimeNs);
+//    start_event.init();
+//    durationProducer.onMatchedLogEvent(1 /* start index*/, start_event);
+//    EXPECT_EQ(0UL, durationProducer.mPastBuckets.size());
+//    EXPECT_EQ(bucketStartTimeNs, durationProducer.mCurrentBucketStartTimeNs);
+//
+//    durationProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
+//    EXPECT_EQ(2UL, durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    std::vector<DurationBucket> buckets =
+//            durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//    EXPECT_EQ(bucketStartTimeNs, buckets[0].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[0].mBucketEndNs);
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs - startTimeNs, buckets[0].mDuration);
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, buckets[1].mBucketStartNs);
+//    EXPECT_EQ(eventUpgradeTimeNs, buckets[1].mBucketEndNs);
+//    EXPECT_EQ(eventUpgradeTimeNs - (bucketStartTimeNs + bucketSizeNs), buckets[1].mDuration);
+//    EXPECT_EQ(eventUpgradeTimeNs, durationProducer.mCurrentBucketStartTimeNs);
+//
+//    // We skip ahead one bucket, so we fill in the first two partial buckets and one full bucket.
+//    LogEvent end_event(tagId, endTimeNs);
+//    end_event.init();
+//    durationProducer.onMatchedLogEvent(2 /* stop index*/, end_event);
+//    buckets = durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//    EXPECT_EQ(3UL, buckets.size());
+//    EXPECT_EQ(eventUpgradeTimeNs, buckets[2].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets[2].mBucketEndNs);
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs - eventUpgradeTimeNs, buckets[2].mDuration);
+//}
+//
+//TEST(DurationMetricTrackerTest, TestSumDurationAnomalyWithUpgrade) {
+//    sp<AlarmMonitor> alarmMonitor;
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 15 * NS_PER_SEC;
+//    int64_t startTimeNs = bucketStartTimeNs + 1;
+//    int64_t endTimeNs = startTimeNs + 65 * NS_PER_SEC;
+//
+//    int tagId = 1;
+//
+//    // Setup metric with alert.
+//    DurationMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_aggregation_type(DurationMetric_AggregationType_SUM);
+//    Alert alert;
+//    alert.set_num_buckets(3);
+//    alert.set_trigger_if_sum_gt(2);
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    FieldMatcher dimensions;
+//    DurationMetricProducer durationProducer(
+//            kConfigKey, metric, -1 /* no condition */, 1 /* start index */, 2 /* stop index */,
+//            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
+//
+//    sp<AnomalyTracker> anomalyTracker = durationProducer.addAnomalyTracker(alert, alarmMonitor);
+//    EXPECT_TRUE(anomalyTracker != nullptr);
+//
+//    LogEvent start_event(tagId, startTimeNs);
+//    start_event.init();
+//    durationProducer.onMatchedLogEvent(1 /* start index*/, start_event);
+//    durationProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
+//    // We skip ahead one bucket, so we fill in the first two partial buckets and one full bucket.
+//    LogEvent end_event(tagId, endTimeNs);
+//    end_event.init();
+//    durationProducer.onMatchedLogEvent(2 /* stop index*/, end_event);
+//
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs - startTimeNs,
+//              anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
+//}
+//
+//TEST(DurationMetricTrackerTest, TestMaxDurationWithUpgrade) {
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 15 * NS_PER_SEC;
+//    int64_t startTimeNs = bucketStartTimeNs + 1;
+//    int64_t endTimeNs = startTimeNs + 125 * NS_PER_SEC;
+//
+//    int tagId = 1;
+//
+//    DurationMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_aggregation_type(DurationMetric_AggregationType_MAX_SPARSE);
+//    LogEvent event1(tagId, startTimeNs);
+//    event1.write("111");  // uid
+//    event1.init();
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    FieldMatcher dimensions;
+//    DurationMetricProducer durationProducer(
+//            kConfigKey, metric, -1 /* no condition */, 1 /* start index */, 2 /* stop index */,
+//            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
+//
+//    LogEvent start_event(tagId, startTimeNs);
+//    start_event.init();
+//    durationProducer.onMatchedLogEvent(1 /* start index*/, start_event);
+//    EXPECT_EQ(0UL, durationProducer.mPastBuckets.size());
+//    EXPECT_EQ(bucketStartTimeNs, durationProducer.mCurrentBucketStartTimeNs);
+//
+//    durationProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
+//    EXPECT_EQ(0UL, durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(eventUpgradeTimeNs, durationProducer.mCurrentBucketStartTimeNs);
+//
+//    // We skip ahead one bucket, so we fill in the first two partial buckets and one full bucket.
+//    LogEvent end_event(tagId, endTimeNs);
+//    end_event.init();
+//    durationProducer.onMatchedLogEvent(2 /* stop index*/, end_event);
+//    EXPECT_EQ(0UL, durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//
+//    durationProducer.flushIfNeededLocked(bucketStartTimeNs + 3 * bucketSizeNs + 1);
+//    std::vector<DurationBucket> buckets =
+//            durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//    EXPECT_EQ(1UL, buckets.size());
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets[0].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs, buckets[0].mBucketEndNs);
+//    EXPECT_EQ(endTimeNs - startTimeNs, buckets[0].mDuration);
+//}
+//
+//TEST(DurationMetricTrackerTest, TestMaxDurationWithUpgradeInNextBucket) {
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
+//    int64_t eventUpgradeTimeNs = bucketStartTimeNs + 65 * NS_PER_SEC;
+//    int64_t startTimeNs = bucketStartTimeNs + 1;
+//    int64_t endTimeNs = startTimeNs + 115 * NS_PER_SEC;
+//
+//    int tagId = 1;
+//
+//    DurationMetric metric;
+//    metric.set_id(1);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_aggregation_type(DurationMetric_AggregationType_MAX_SPARSE);
+//    LogEvent event1(tagId, startTimeNs);
+//    event1.write("111");  // uid
+//    event1.init();
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    FieldMatcher dimensions;
+//    DurationMetricProducer durationProducer(
+//            kConfigKey, metric, -1 /* no condition */, 1 /* start index */, 2 /* stop index */,
+//            3 /* stop_all index */, false /*nesting*/, wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
+//
+//    LogEvent start_event(tagId, startTimeNs);
+//    start_event.init();
+//    durationProducer.onMatchedLogEvent(1 /* start index*/, start_event);
+//    EXPECT_EQ(0UL, durationProducer.mPastBuckets.size());
+//    EXPECT_EQ(bucketStartTimeNs, durationProducer.mCurrentBucketStartTimeNs);
+//
+//    durationProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
+//    EXPECT_EQ(0UL, durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(eventUpgradeTimeNs, durationProducer.mCurrentBucketStartTimeNs);
+//
+//    // Stop occurs in the same partial bucket as created for the app upgrade.
+//    LogEvent end_event(tagId, endTimeNs);
+//    end_event.init();
+//    durationProducer.onMatchedLogEvent(2 /* stop index*/, end_event);
+//    EXPECT_EQ(0UL, durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(eventUpgradeTimeNs, durationProducer.mCurrentBucketStartTimeNs);
+//
+//    durationProducer.flushIfNeededLocked(bucketStartTimeNs + 2 * bucketSizeNs + 1);
+//    std::vector<DurationBucket> buckets =
+//            durationProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY];
+//    EXPECT_EQ(1UL, buckets.size());
+//    EXPECT_EQ(eventUpgradeTimeNs, buckets[0].mBucketStartNs);
+//    EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, buckets[0].mBucketEndNs);
+//    EXPECT_EQ(endTimeNs - startTimeNs, buckets[0].mDuration);
+//}
 
 }  // namespace statsd
 }  // namespace os
diff --git a/cmds/statsd/tests/metrics/EventMetricProducer_test.cpp b/cmds/statsd/tests/metrics/EventMetricProducer_test.cpp
index f30873b..0f39efd5 100644
--- a/cmds/statsd/tests/metrics/EventMetricProducer_test.cpp
+++ b/cmds/statsd/tests/metrics/EventMetricProducer_test.cpp
@@ -85,46 +85,47 @@
     // eventProducer.onDumpReport();
 }
 
-TEST(EventMetricProducerTest, TestEventsWithSlicedCondition) {
-    int64_t bucketStartTimeNs = 10000000000;
-    int64_t bucketSizeNs = 30 * 1000 * 1000 * 1000LL;
-
-    int tagId = 1;
-    int conditionTagId = 2;
-
-    EventMetric metric;
-    metric.set_id(1);
-    metric.set_condition(StringToId("APP_IN_BACKGROUND_PER_UID_AND_SCREEN_ON"));
-    MetricConditionLink* link = metric.add_links();
-    link->set_condition(StringToId("APP_IN_BACKGROUND_PER_UID"));
-    buildSimpleAtomFieldMatcher(tagId, 1, link->mutable_fields_in_what());
-    buildSimpleAtomFieldMatcher(conditionTagId, 2, link->mutable_fields_in_condition());
-
-    LogEvent event1(tagId, bucketStartTimeNs + 1);
-    EXPECT_TRUE(event1.write("111"));
-    event1.init();
-    ConditionKey key1;
-    key1[StringToId("APP_IN_BACKGROUND_PER_UID")] = {getMockedDimensionKey(conditionTagId, 2, "111")};
-
-    LogEvent event2(tagId, bucketStartTimeNs + 10);
-    EXPECT_TRUE(event2.write("222"));
-    event2.init();
-    ConditionKey key2;
-    key2[StringToId("APP_IN_BACKGROUND_PER_UID")] = {getMockedDimensionKey(conditionTagId, 2, "222")};
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    EXPECT_CALL(*wizard, query(_, key1, _)).WillOnce(Return(ConditionState::kFalse));
-
-    EXPECT_CALL(*wizard, query(_, key2, _)).WillOnce(Return(ConditionState::kTrue));
-
-    EventMetricProducer eventProducer(kConfigKey, metric, 1, wizard, bucketStartTimeNs);
-
-    eventProducer.onMatchedLogEvent(1 /*matcher index*/, event1);
-    eventProducer.onMatchedLogEvent(1 /*matcher index*/, event2);
-
-    // TODO: get the report and check the content after the ProtoOutputStream change is done.
-    // eventProducer.onDumpReport();
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(EventMetricProducerTest, TestEventsWithSlicedCondition) {
+//    int64_t bucketStartTimeNs = 10000000000;
+//    int64_t bucketSizeNs = 30 * 1000 * 1000 * 1000LL;
+//
+//    int tagId = 1;
+//    int conditionTagId = 2;
+//
+//    EventMetric metric;
+//    metric.set_id(1);
+//    metric.set_condition(StringToId("APP_IN_BACKGROUND_PER_UID_AND_SCREEN_ON"));
+//    MetricConditionLink* link = metric.add_links();
+//    link->set_condition(StringToId("APP_IN_BACKGROUND_PER_UID"));
+//    buildSimpleAtomFieldMatcher(tagId, 1, link->mutable_fields_in_what());
+//    buildSimpleAtomFieldMatcher(conditionTagId, 2, link->mutable_fields_in_condition());
+//
+//    LogEvent event1(tagId, bucketStartTimeNs + 1);
+//    EXPECT_TRUE(event1.write("111"));
+//    event1.init();
+//    ConditionKey key1;
+//    key1[StringToId("APP_IN_BACKGROUND_PER_UID")] = {getMockedDimensionKey(conditionTagId, 2, "111")};
+//
+//    LogEvent event2(tagId, bucketStartTimeNs + 10);
+//    EXPECT_TRUE(event2.write("222"));
+//    event2.init();
+//    ConditionKey key2;
+//    key2[StringToId("APP_IN_BACKGROUND_PER_UID")] = {getMockedDimensionKey(conditionTagId, 2, "222")};
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    EXPECT_CALL(*wizard, query(_, key1, _)).WillOnce(Return(ConditionState::kFalse));
+//
+//    EXPECT_CALL(*wizard, query(_, key2, _)).WillOnce(Return(ConditionState::kTrue));
+//
+//    EventMetricProducer eventProducer(kConfigKey, metric, 1, wizard, bucketStartTimeNs);
+//
+//    eventProducer.onMatchedLogEvent(1 /*matcher index*/, event1);
+//    eventProducer.onMatchedLogEvent(1 /*matcher index*/, event2);
+//
+//    // TODO: get the report and check the content after the ProtoOutputStream change is done.
+//    // eventProducer.onDumpReport();
+//}
 
 }  // namespace statsd
 }  // namespace os
diff --git a/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp b/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp
index 308c43d..609324e 100644
--- a/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp
+++ b/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp
@@ -88,768 +88,769 @@
     EXPECT_EQ(660000000005, gaugeProducer.getCurrentBucketEndTimeNs());
 }
 
-TEST(GaugeMetricProducerTest, TestPulledEventsNoCondition) {
-    GaugeMetric metric;
-    metric.set_id(metricId);
-    metric.set_bucket(ONE_MINUTE);
-    metric.mutable_gauge_fields_filter()->set_include_all(false);
-    metric.set_max_pull_delay_sec(INT_MAX);
-    auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
-    gaugeFieldMatcher->set_field(tagId);
-    gaugeFieldMatcher->add_child()->set_field(1);
-    gaugeFieldMatcher->add_child()->set_field(3);
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
-        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-                event->write(3);
-                event->write("some value");
-                event->write(11);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard,
-                                      tagId, -1, tagId, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(10);
-    event->write("some value");
-    event->write(11);
-    event->init();
-    allData.push_back(event);
-
-    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    auto it = gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->begin();
-    EXPECT_EQ(INT, it->mValue.getType());
-    EXPECT_EQ(10, it->mValue.int_value);
-    it++;
-    EXPECT_EQ(11, it->mValue.int_value);
-    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
-    EXPECT_EQ(3, gaugeProducer.mPastBuckets.begin()->second.back().mGaugeAtoms
-        .front().mFields->begin()->mValue.int_value);
-
-    allData.clear();
-    std::shared_ptr<LogEvent> event2 = std::make_shared<LogEvent>(tagId, bucket3StartTimeNs + 10);
-    event2->write(24);
-    event2->write("some value");
-    event2->write(25);
-    event2->init();
-    allData.push_back(event2);
-    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    it = gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->begin();
-    EXPECT_EQ(INT, it->mValue.getType());
-    EXPECT_EQ(24, it->mValue.int_value);
-    it++;
-    EXPECT_EQ(INT, it->mValue.getType());
-    EXPECT_EQ(25, it->mValue.int_value);
-    // One dimension.
-    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
-    EXPECT_EQ(2UL, gaugeProducer.mPastBuckets.begin()->second.size());
-    it = gaugeProducer.mPastBuckets.begin()->second.back().mGaugeAtoms.front().mFields->begin();
-    EXPECT_EQ(INT, it->mValue.getType());
-    EXPECT_EQ(10L, it->mValue.int_value);
-    it++;
-    EXPECT_EQ(INT, it->mValue.getType());
-    EXPECT_EQ(11L, it->mValue.int_value);
-
-    gaugeProducer.flushIfNeededLocked(bucket4StartTimeNs);
-    EXPECT_EQ(0UL, gaugeProducer.mCurrentSlicedBucket->size());
-    // One dimension.
-    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
-    EXPECT_EQ(3UL, gaugeProducer.mPastBuckets.begin()->second.size());
-    it = gaugeProducer.mPastBuckets.begin()->second.back().mGaugeAtoms.front().mFields->begin();
-    EXPECT_EQ(INT, it->mValue.getType());
-    EXPECT_EQ(24L, it->mValue.int_value);
-    it++;
-    EXPECT_EQ(INT, it->mValue.getType());
-    EXPECT_EQ(25L, it->mValue.int_value);
-}
-
-TEST(GaugeMetricProducerTest, TestPushedEventsWithUpgrade) {
-    sp<AlarmMonitor> alarmMonitor;
-    GaugeMetric metric;
-    metric.set_id(metricId);
-    metric.set_bucket(ONE_MINUTE);
-    metric.mutable_gauge_fields_filter()->set_include_all(true);
-
-    Alert alert;
-    alert.set_id(101);
-    alert.set_metric_id(metricId);
-    alert.set_trigger_if_sum_gt(25);
-    alert.set_num_buckets(100);
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
-        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-
-    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard,
-                                      -1 /* -1 means no pulling */, -1, tagId, bucketStartTimeNs,
-                                      bucketStartTimeNs, pullerManager);
-
-    sp<AnomalyTracker> anomalyTracker = gaugeProducer.addAnomalyTracker(alert, alarmMonitor);
-    EXPECT_TRUE(anomalyTracker != nullptr);
-
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-    event1->write(1);
-    event1->write(10);
-    event1->init();
-    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
-    EXPECT_EQ(1UL, (*gaugeProducer.mCurrentSlicedBucket).count(DEFAULT_METRIC_DIMENSION_KEY));
-
-    gaugeProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
-    EXPECT_EQ(0UL, (*gaugeProducer.mCurrentSlicedBucket).count(DEFAULT_METRIC_DIMENSION_KEY));
-    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(0L, gaugeProducer.mCurrentBucketNum);
-    EXPECT_EQ(eventUpgradeTimeNs, gaugeProducer.mCurrentBucketStartTimeNs);
-    // Partial buckets are not sent to anomaly tracker.
-    EXPECT_EQ(0, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
-
-    // Create an event in the same partial bucket.
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 59 * NS_PER_SEC);
-    event2->write(1);
-    event2->write(10);
-    event2->init();
-    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
-    EXPECT_EQ(0L, gaugeProducer.mCurrentBucketNum);
-    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ((int64_t)eventUpgradeTimeNs, gaugeProducer.mCurrentBucketStartTimeNs);
-    // Partial buckets are not sent to anomaly tracker.
-    EXPECT_EQ(0, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
-
-    // Next event should trigger creation of new bucket and send previous full bucket to anomaly
-    // tracker.
-    shared_ptr<LogEvent> event3 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 65 * NS_PER_SEC);
-    event3->write(1);
-    event3->write(10);
-    event3->init();
-    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
-    EXPECT_EQ(1L, gaugeProducer.mCurrentBucketNum);
-    EXPECT_EQ(2UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ((int64_t)bucketStartTimeNs + bucketSizeNs, gaugeProducer.mCurrentBucketStartTimeNs);
-    EXPECT_EQ(1, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
-
-    // Next event should trigger creation of new bucket.
-    shared_ptr<LogEvent> event4 =
-            make_shared<LogEvent>(tagId, bucketStartTimeNs + 125 * NS_PER_SEC);
-    event4->write(1);
-    event4->write(10);
-    event4->init();
-    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, *event4);
-    EXPECT_EQ(2L, gaugeProducer.mCurrentBucketNum);
-    EXPECT_EQ(3UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(2, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
-}
-
-TEST(GaugeMetricProducerTest, TestPulledWithUpgrade) {
-    GaugeMetric metric;
-    metric.set_id(metricId);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_max_pull_delay_sec(INT_MAX);
-    auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
-    gaugeFieldMatcher->set_field(tagId);
-    gaugeFieldMatcher->add_child()->set_field(2);
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Return(false))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, eventUpgradeTimeNs);
-                event->write("some value");
-                event->write(2);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard, tagId, -1, tagId,
-                                      bucketStartTimeNs, bucketStartTimeNs, pullerManager);
-
-    vector<shared_ptr<LogEvent>> allData;
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
-    event->write("some value");
-    event->write(1);
-    event->init();
-    allData.push_back(event);
-    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucketStartTimeNs);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_EQ(1, gaugeProducer.mCurrentSlicedBucket->begin()
-                         ->second.front()
-                         .mFields->begin()
-                         ->mValue.int_value);
-
-    gaugeProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
-    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(0L, gaugeProducer.mCurrentBucketNum);
-    EXPECT_EQ((int64_t)eventUpgradeTimeNs, gaugeProducer.mCurrentBucketStartTimeNs);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_EQ(2, gaugeProducer.mCurrentSlicedBucket->begin()
-                         ->second.front()
-                         .mFields->begin()
-                         ->mValue.int_value);
-
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucketStartTimeNs + bucketSizeNs + 1);
-    event->write("some value");
-    event->write(3);
-    event->init();
-    allData.push_back(event);
-    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucketStartTimeNs + bucketSizeNs);
-    EXPECT_EQ(2UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_EQ(3, gaugeProducer.mCurrentSlicedBucket->begin()
-                         ->second.front()
-                         .mFields->begin()
-                         ->mValue.int_value);
-}
-
-TEST(GaugeMetricProducerTest, TestPulledWithAppUpgradeDisabled) {
-    GaugeMetric metric;
-    metric.set_id(metricId);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_max_pull_delay_sec(INT_MAX);
-    metric.set_split_bucket_for_app_upgrade(false);
-    auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
-    gaugeFieldMatcher->set_field(tagId);
-    gaugeFieldMatcher->add_child()->set_field(2);
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
-        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, Pull(tagId, _)).WillOnce(Return(false));
-
-    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard,
-                                      tagId, -1, tagId, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    vector<shared_ptr<LogEvent>> allData;
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
-    event->write("some value");
-    event->write(1);
-    event->init();
-    allData.push_back(event);
-    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucketStartTimeNs);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_EQ(1, gaugeProducer.mCurrentSlicedBucket->begin()
-                         ->second.front()
-                         .mFields->begin()
-                         ->mValue.int_value);
-
-    gaugeProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
-    EXPECT_EQ(0UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(0L, gaugeProducer.mCurrentBucketNum);
-    EXPECT_EQ(bucketStartTimeNs, gaugeProducer.mCurrentBucketStartTimeNs);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_EQ(1, gaugeProducer.mCurrentSlicedBucket->begin()
-                         ->second.front()
-                         .mFields->begin()
-                         ->mValue.int_value);
-}
-
-TEST(GaugeMetricProducerTest, TestPulledEventsWithCondition) {
-    GaugeMetric metric;
-    metric.set_id(metricId);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_max_pull_delay_sec(INT_MAX);
-    auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
-    gaugeFieldMatcher->set_field(tagId);
-    gaugeFieldMatcher->add_child()->set_field(2);
-    metric.set_condition(StringToId("SCREEN_ON"));
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
-        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-                event->write("some value");
-                event->write(100);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    GaugeMetricProducer gaugeProducer(kConfigKey, metric, 1, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard, tagId, -1, tagId,
-                                      bucketStartTimeNs, bucketStartTimeNs, pullerManager);
-
-    gaugeProducer.onConditionChanged(true, bucketStartTimeNs + 8);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_EQ(100, gaugeProducer.mCurrentSlicedBucket->begin()
-                           ->second.front()
-                           .mFields->begin()
-                           ->mValue.int_value);
-    EXPECT_EQ(0UL, gaugeProducer.mPastBuckets.size());
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write("some value");
-    event->write(110);
-    event->init();
-    allData.push_back(event);
-    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_EQ(110, gaugeProducer.mCurrentSlicedBucket->begin()
-                           ->second.front()
-                           .mFields->begin()
-                           ->mValue.int_value);
-    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
-    EXPECT_EQ(100, gaugeProducer.mPastBuckets.begin()
-                           ->second.back()
-                           .mGaugeAtoms.front()
-                           .mFields->begin()
-                           ->mValue.int_value);
-
-    gaugeProducer.onConditionChanged(false, bucket2StartTimeNs + 10);
-    gaugeProducer.flushIfNeededLocked(bucket3StartTimeNs + 10);
-    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
-    EXPECT_EQ(2UL, gaugeProducer.mPastBuckets.begin()->second.size());
-    EXPECT_EQ(110L, gaugeProducer.mPastBuckets.begin()
-                            ->second.back()
-                            .mGaugeAtoms.front()
-                            .mFields->begin()
-                            ->mValue.int_value);
-}
-
-TEST(GaugeMetricProducerTest, TestPulledEventsWithSlicedCondition) {
-    const int conditionTag = 65;
-    GaugeMetric metric;
-    metric.set_id(1111111);
-    metric.set_bucket(ONE_MINUTE);
-    metric.mutable_gauge_fields_filter()->set_include_all(true);
-    metric.set_condition(StringToId("APP_DIED"));
-    metric.set_max_pull_delay_sec(INT_MAX);
-    auto dim = metric.mutable_dimensions_in_what();
-    dim->set_field(tagId);
-    dim->add_child()->set_field(1);
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
-        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    EXPECT_CALL(*wizard, query(_, _, _))
-            .WillRepeatedly(
-                    Invoke([](const int conditionIndex, const ConditionKey& conditionParameters,
-                              const bool isPartialLink) {
-                        int pos[] = {1, 0, 0};
-                        Field f(conditionTag, pos, 0);
-                        HashableDimensionKey key;
-                        key.mutableValues()->emplace_back(f, Value((int32_t)1000000));
-
-                        return ConditionState::kTrue;
-                    }));
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-                event->write(1000);
-                event->write(100);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    GaugeMetricProducer gaugeProducer(kConfigKey, metric, 1, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard, tagId, -1, tagId,
-                                      bucketStartTimeNs, bucketStartTimeNs, pullerManager);
-
-    gaugeProducer.onSlicedConditionMayChange(true, bucketStartTimeNs + 8);
-
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    const auto& key = gaugeProducer.mCurrentSlicedBucket->begin()->first;
-    EXPECT_EQ(1UL, key.getDimensionKeyInWhat().getValues().size());
-    EXPECT_EQ(1000, key.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-
-    EXPECT_EQ(0UL, gaugeProducer.mPastBuckets.size());
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(1000);
-    event->write(110);
-    event->init();
-    allData.push_back(event);
-    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
-}
-
-TEST(GaugeMetricProducerTest, TestPulledEventsAnomalyDetection) {
-    sp<AlarmMonitor> alarmMonitor;
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, Pull(tagId, _)).WillOnce(Return(false));
-
-    GaugeMetric metric;
-    metric.set_id(metricId);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_max_pull_delay_sec(INT_MAX);
-    auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
-    gaugeFieldMatcher->set_field(tagId);
-    gaugeFieldMatcher->add_child()->set_field(2);
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
-        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-
-    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard,
-                                      tagId, -1, tagId, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    Alert alert;
-    alert.set_id(101);
-    alert.set_metric_id(metricId);
-    alert.set_trigger_if_sum_gt(25);
-    alert.set_num_buckets(2);
-    const int32_t refPeriodSec = 60;
-    alert.set_refractory_period_secs(refPeriodSec);
-    sp<AnomalyTracker> anomalyTracker = gaugeProducer.addAnomalyTracker(alert, alarmMonitor);
-
-    int tagId = 1;
-    std::shared_ptr<LogEvent> event1 = std::make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
-    event1->write("some value");
-    event1->write(13);
-    event1->init();
-
-    gaugeProducer.onDataPulled({event1}, /** succeed */ true, bucketStartTimeNs);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_EQ(13L, gaugeProducer.mCurrentSlicedBucket->begin()
-                           ->second.front()
-                           .mFields->begin()
-                           ->mValue.int_value);
-    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY), 0U);
-
-    std::shared_ptr<LogEvent> event2 =
-            std::make_shared<LogEvent>(tagId, bucketStartTimeNs + bucketSizeNs + 20);
-    event2->write("some value");
-    event2->write(15);
-    event2->init();
-
-    gaugeProducer.onDataPulled({event2}, /** succeed */ true, bucketStartTimeNs + bucketSizeNs);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_EQ(15L, gaugeProducer.mCurrentSlicedBucket->begin()
-                           ->second.front()
-                           .mFields->begin()
-                           ->mValue.int_value);
-    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
-              std::ceil(1.0 * event2->GetElapsedTimestampNs() / NS_PER_SEC) + refPeriodSec);
-
-    std::shared_ptr<LogEvent> event3 =
-            std::make_shared<LogEvent>(tagId, bucketStartTimeNs + 2 * bucketSizeNs + 10);
-    event3->write("some value");
-    event3->write(26);
-    event3->init();
-
-    gaugeProducer.onDataPulled({event3}, /** succeed */ true, bucket2StartTimeNs + 2 * bucketSizeNs);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_EQ(26L, gaugeProducer.mCurrentSlicedBucket->begin()
-                           ->second.front()
-                           .mFields->begin()
-                           ->mValue.int_value);
-    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
-              std::ceil(1.0 * event2->GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec));
-
-    // The event4 does not have the gauge field. Thus the current bucket value is 0.
-    std::shared_ptr<LogEvent> event4 =
-            std::make_shared<LogEvent>(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 10);
-    event4->write("some value");
-    event4->init();
-    gaugeProducer.onDataPulled({event4}, /** succeed */ true, bucketStartTimeNs + 3 * bucketSizeNs);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_TRUE(gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->empty());
-}
-
-TEST(GaugeMetricProducerTest, TestPullOnTrigger) {
-    GaugeMetric metric;
-    metric.set_id(metricId);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_sampling_type(GaugeMetric::FIRST_N_SAMPLES);
-    metric.mutable_gauge_fields_filter()->set_include_all(false);
-    metric.set_max_pull_delay_sec(INT_MAX);
-    auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
-    gaugeFieldMatcher->set_field(tagId);
-    gaugeFieldMatcher->add_child()->set_field(1);
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
-        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-                event->write(4);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
-                event->write(5);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Return(true));
-
-    int triggerId = 5;
-    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard,
-                                      tagId, triggerId, tagId, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    vector<shared_ptr<LogEvent>> allData;
-
-    EXPECT_EQ(0UL, gaugeProducer.mCurrentSlicedBucket->size());
-    LogEvent trigger(triggerId, bucketStartTimeNs + 10);
-    trigger.init();
-    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size());
-    trigger.setElapsedTimestampNs(bucketStartTimeNs + 20);
-    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
-    EXPECT_EQ(2UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size());
-    trigger.setElapsedTimestampNs(bucket2StartTimeNs + 1);
-    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
-
-    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
-    EXPECT_EQ(2UL, gaugeProducer.mPastBuckets.begin()->second.back().mGaugeAtoms.size());
-    EXPECT_EQ(4, gaugeProducer.mPastBuckets.begin()
-                         ->second.back()
-                         .mGaugeAtoms[0]
-                         .mFields->begin()
-                         ->mValue.int_value);
-    EXPECT_EQ(5, gaugeProducer.mPastBuckets.begin()
-                         ->second.back()
-                         .mGaugeAtoms[1]
-                         .mFields->begin()
-                         ->mValue.int_value);
-}
-
-TEST(GaugeMetricProducerTest, TestRemoveDimensionInOutput) {
-    GaugeMetric metric;
-    metric.set_id(metricId);
-    metric.set_bucket(ONE_MINUTE);
-    metric.set_sampling_type(GaugeMetric::FIRST_N_SAMPLES);
-    metric.mutable_gauge_fields_filter()->set_include_all(true);
-    metric.set_max_pull_delay_sec(INT_MAX);
-    auto dimensionMatcher = metric.mutable_dimensions_in_what();
-    // use field 1 as dimension.
-    dimensionMatcher->set_field(tagId);
-    dimensionMatcher->add_child()->set_field(1);
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
-        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 3);
-                event->write(3);
-                event->write(4);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-                event->write(4);
-                event->write(5);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
-                event->write(4);
-                event->write(6);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Return(true));
-
-    int triggerId = 5;
-    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard,
-                                      tagId, triggerId, tagId, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    vector<shared_ptr<LogEvent>> allData;
-
-    LogEvent trigger(triggerId, bucketStartTimeNs + 3);
-    trigger.init();
-    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
-    trigger.setElapsedTimestampNs(bucketStartTimeNs + 10);
-    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
-    EXPECT_EQ(2UL, gaugeProducer.mCurrentSlicedBucket->size());
-    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size());
-    trigger.setElapsedTimestampNs(bucketStartTimeNs + 20);
-    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
-    EXPECT_EQ(2UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size());
-    trigger.setElapsedTimestampNs(bucket2StartTimeNs + 1);
-    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
-
-    EXPECT_EQ(2UL, gaugeProducer.mPastBuckets.size());
-    auto bucketIt = gaugeProducer.mPastBuckets.begin();
-    EXPECT_EQ(1UL, bucketIt->second.back().mGaugeAtoms.size());
-    EXPECT_EQ(3, bucketIt->first.getDimensionKeyInWhat().getValues().begin()->mValue.int_value);
-    EXPECT_EQ(4, bucketIt->second.back().mGaugeAtoms[0].mFields->begin()->mValue.int_value);
-    bucketIt++;
-    EXPECT_EQ(2UL, bucketIt->second.back().mGaugeAtoms.size());
-    EXPECT_EQ(4, bucketIt->first.getDimensionKeyInWhat().getValues().begin()->mValue.int_value);
-    EXPECT_EQ(5, bucketIt->second.back().mGaugeAtoms[0].mFields->begin()->mValue.int_value);
-    EXPECT_EQ(6, bucketIt->second.back().mGaugeAtoms[1].mFields->begin()->mValue.int_value);
-}
-
-/*
- * Test that BUCKET_TOO_SMALL dump reason is logged when a flushed bucket size
- * is smaller than the "min_bucket_size_nanos" specified in the metric config.
- */
-TEST(GaugeMetricProducerTest_BucketDrop, TestBucketDropWhenBucketTooSmall) {
-    GaugeMetric metric;
-    metric.set_id(metricId);
-    metric.set_bucket(FIVE_MINUTES);
-    metric.set_sampling_type(GaugeMetric::FIRST_N_SAMPLES);
-    metric.set_min_bucket_size_nanos(10000000000);  // 10 seconds
-
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
-        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Bucket start.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write("field1");
-                event->write(10);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    int triggerId = 5;
-    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard,
-                                      tagId, triggerId, tagId, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    LogEvent trigger(triggerId, bucketStartTimeNs + 3);
-    trigger.init();
-    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    gaugeProducer.onDumpReport(bucketStartTimeNs + 9000000, true /* include recent buckets */,
-                                true, FAST /* dump_latency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_gauge_metrics());
-    EXPECT_EQ(0, report.gauge_metrics().data_size());
-    EXPECT_EQ(1, report.gauge_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
-              report.gauge_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 9000000),
-              report.gauge_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(1, report.gauge_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.gauge_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::BUCKET_TOO_SMALL, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 9000000), dropEvent.drop_time_millis());
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//TEST(GaugeMetricProducerTest, TestPulledEventsNoCondition) {
+//    GaugeMetric metric;
+//    metric.set_id(metricId);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.mutable_gauge_fields_filter()->set_include_all(false);
+//    metric.set_max_pull_delay_sec(INT_MAX);
+//    auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
+//    gaugeFieldMatcher->set_field(tagId);
+//    gaugeFieldMatcher->add_child()->set_field(1);
+//    gaugeFieldMatcher->add_child()->set_field(3);
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
+//        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//                event->write(3);
+//                event->write("some value");
+//                event->write(11);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard,
+//                                      tagId, -1, tagId, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(10);
+//    event->write("some value");
+//    event->write(11);
+//    event->init();
+//    allData.push_back(event);
+//
+//    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    auto it = gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->begin();
+//    EXPECT_EQ(INT, it->mValue.getType());
+//    EXPECT_EQ(10, it->mValue.int_value);
+//    it++;
+//    EXPECT_EQ(11, it->mValue.int_value);
+//    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
+//    EXPECT_EQ(3, gaugeProducer.mPastBuckets.begin()->second.back().mGaugeAtoms
+//        .front().mFields->begin()->mValue.int_value);
+//
+//    allData.clear();
+//    std::shared_ptr<LogEvent> event2 = std::make_shared<LogEvent>(tagId, bucket3StartTimeNs + 10);
+//    event2->write(24);
+//    event2->write("some value");
+//    event2->write(25);
+//    event2->init();
+//    allData.push_back(event2);
+//    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    it = gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->begin();
+//    EXPECT_EQ(INT, it->mValue.getType());
+//    EXPECT_EQ(24, it->mValue.int_value);
+//    it++;
+//    EXPECT_EQ(INT, it->mValue.getType());
+//    EXPECT_EQ(25, it->mValue.int_value);
+//    // One dimension.
+//    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
+//    EXPECT_EQ(2UL, gaugeProducer.mPastBuckets.begin()->second.size());
+//    it = gaugeProducer.mPastBuckets.begin()->second.back().mGaugeAtoms.front().mFields->begin();
+//    EXPECT_EQ(INT, it->mValue.getType());
+//    EXPECT_EQ(10L, it->mValue.int_value);
+//    it++;
+//    EXPECT_EQ(INT, it->mValue.getType());
+//    EXPECT_EQ(11L, it->mValue.int_value);
+//
+//    gaugeProducer.flushIfNeededLocked(bucket4StartTimeNs);
+//    EXPECT_EQ(0UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    // One dimension.
+//    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
+//    EXPECT_EQ(3UL, gaugeProducer.mPastBuckets.begin()->second.size());
+//    it = gaugeProducer.mPastBuckets.begin()->second.back().mGaugeAtoms.front().mFields->begin();
+//    EXPECT_EQ(INT, it->mValue.getType());
+//    EXPECT_EQ(24L, it->mValue.int_value);
+//    it++;
+//    EXPECT_EQ(INT, it->mValue.getType());
+//    EXPECT_EQ(25L, it->mValue.int_value);
+//}
+//
+//TEST(GaugeMetricProducerTest, TestPushedEventsWithUpgrade) {
+//    sp<AlarmMonitor> alarmMonitor;
+//    GaugeMetric metric;
+//    metric.set_id(metricId);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.mutable_gauge_fields_filter()->set_include_all(true);
+//
+//    Alert alert;
+//    alert.set_id(101);
+//    alert.set_metric_id(metricId);
+//    alert.set_trigger_if_sum_gt(25);
+//    alert.set_num_buckets(100);
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
+//        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//
+//    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard,
+//                                      -1 /* -1 means no pulling */, -1, tagId, bucketStartTimeNs,
+//                                      bucketStartTimeNs, pullerManager);
+//
+//    sp<AnomalyTracker> anomalyTracker = gaugeProducer.addAnomalyTracker(alert, alarmMonitor);
+//    EXPECT_TRUE(anomalyTracker != nullptr);
+//
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//    event1->write(1);
+//    event1->write(10);
+//    event1->init();
+//    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
+//    EXPECT_EQ(1UL, (*gaugeProducer.mCurrentSlicedBucket).count(DEFAULT_METRIC_DIMENSION_KEY));
+//
+//    gaugeProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
+//    EXPECT_EQ(0UL, (*gaugeProducer.mCurrentSlicedBucket).count(DEFAULT_METRIC_DIMENSION_KEY));
+//    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(0L, gaugeProducer.mCurrentBucketNum);
+//    EXPECT_EQ(eventUpgradeTimeNs, gaugeProducer.mCurrentBucketStartTimeNs);
+//    // Partial buckets are not sent to anomaly tracker.
+//    EXPECT_EQ(0, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
+//
+//    // Create an event in the same partial bucket.
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 59 * NS_PER_SEC);
+//    event2->write(1);
+//    event2->write(10);
+//    event2->init();
+//    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
+//    EXPECT_EQ(0L, gaugeProducer.mCurrentBucketNum);
+//    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ((int64_t)eventUpgradeTimeNs, gaugeProducer.mCurrentBucketStartTimeNs);
+//    // Partial buckets are not sent to anomaly tracker.
+//    EXPECT_EQ(0, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
+//
+//    // Next event should trigger creation of new bucket and send previous full bucket to anomaly
+//    // tracker.
+//    shared_ptr<LogEvent> event3 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 65 * NS_PER_SEC);
+//    event3->write(1);
+//    event3->write(10);
+//    event3->init();
+//    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
+//    EXPECT_EQ(1L, gaugeProducer.mCurrentBucketNum);
+//    EXPECT_EQ(2UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ((int64_t)bucketStartTimeNs + bucketSizeNs, gaugeProducer.mCurrentBucketStartTimeNs);
+//    EXPECT_EQ(1, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
+//
+//    // Next event should trigger creation of new bucket.
+//    shared_ptr<LogEvent> event4 =
+//            make_shared<LogEvent>(tagId, bucketStartTimeNs + 125 * NS_PER_SEC);
+//    event4->write(1);
+//    event4->write(10);
+//    event4->init();
+//    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, *event4);
+//    EXPECT_EQ(2L, gaugeProducer.mCurrentBucketNum);
+//    EXPECT_EQ(3UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(2, anomalyTracker->getSumOverPastBuckets(DEFAULT_METRIC_DIMENSION_KEY));
+//}
+//
+//TEST(GaugeMetricProducerTest, TestPulledWithUpgrade) {
+//    GaugeMetric metric;
+//    metric.set_id(metricId);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_max_pull_delay_sec(INT_MAX);
+//    auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
+//    gaugeFieldMatcher->set_field(tagId);
+//    gaugeFieldMatcher->add_child()->set_field(2);
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Return(false))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, eventUpgradeTimeNs);
+//                event->write("some value");
+//                event->write(2);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard, tagId, -1, tagId,
+//                                      bucketStartTimeNs, bucketStartTimeNs, pullerManager);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+//    event->write("some value");
+//    event->write(1);
+//    event->init();
+//    allData.push_back(event);
+//    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucketStartTimeNs);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_EQ(1, gaugeProducer.mCurrentSlicedBucket->begin()
+//                         ->second.front()
+//                         .mFields->begin()
+//                         ->mValue.int_value);
+//
+//    gaugeProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
+//    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(0L, gaugeProducer.mCurrentBucketNum);
+//    EXPECT_EQ((int64_t)eventUpgradeTimeNs, gaugeProducer.mCurrentBucketStartTimeNs);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_EQ(2, gaugeProducer.mCurrentSlicedBucket->begin()
+//                         ->second.front()
+//                         .mFields->begin()
+//                         ->mValue.int_value);
+//
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucketStartTimeNs + bucketSizeNs + 1);
+//    event->write("some value");
+//    event->write(3);
+//    event->init();
+//    allData.push_back(event);
+//    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucketStartTimeNs + bucketSizeNs);
+//    EXPECT_EQ(2UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_EQ(3, gaugeProducer.mCurrentSlicedBucket->begin()
+//                         ->second.front()
+//                         .mFields->begin()
+//                         ->mValue.int_value);
+//}
+//
+//TEST(GaugeMetricProducerTest, TestPulledWithAppUpgradeDisabled) {
+//    GaugeMetric metric;
+//    metric.set_id(metricId);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_max_pull_delay_sec(INT_MAX);
+//    metric.set_split_bucket_for_app_upgrade(false);
+//    auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
+//    gaugeFieldMatcher->set_field(tagId);
+//    gaugeFieldMatcher->add_child()->set_field(2);
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
+//        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _)).WillOnce(Return(false));
+//
+//    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard,
+//                                      tagId, -1, tagId, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+//    event->write("some value");
+//    event->write(1);
+//    event->init();
+//    allData.push_back(event);
+//    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucketStartTimeNs);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_EQ(1, gaugeProducer.mCurrentSlicedBucket->begin()
+//                         ->second.front()
+//                         .mFields->begin()
+//                         ->mValue.int_value);
+//
+//    gaugeProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1);
+//    EXPECT_EQ(0UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(0L, gaugeProducer.mCurrentBucketNum);
+//    EXPECT_EQ(bucketStartTimeNs, gaugeProducer.mCurrentBucketStartTimeNs);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_EQ(1, gaugeProducer.mCurrentSlicedBucket->begin()
+//                         ->second.front()
+//                         .mFields->begin()
+//                         ->mValue.int_value);
+//}
+//
+//TEST(GaugeMetricProducerTest, TestPulledEventsWithCondition) {
+//    GaugeMetric metric;
+//    metric.set_id(metricId);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_max_pull_delay_sec(INT_MAX);
+//    auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
+//    gaugeFieldMatcher->set_field(tagId);
+//    gaugeFieldMatcher->add_child()->set_field(2);
+//    metric.set_condition(StringToId("SCREEN_ON"));
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
+//        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//                event->write("some value");
+//                event->write(100);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    GaugeMetricProducer gaugeProducer(kConfigKey, metric, 1, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard, tagId, -1, tagId,
+//                                      bucketStartTimeNs, bucketStartTimeNs, pullerManager);
+//
+//    gaugeProducer.onConditionChanged(true, bucketStartTimeNs + 8);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_EQ(100, gaugeProducer.mCurrentSlicedBucket->begin()
+//                           ->second.front()
+//                           .mFields->begin()
+//                           ->mValue.int_value);
+//    EXPECT_EQ(0UL, gaugeProducer.mPastBuckets.size());
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write("some value");
+//    event->write(110);
+//    event->init();
+//    allData.push_back(event);
+//    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_EQ(110, gaugeProducer.mCurrentSlicedBucket->begin()
+//                           ->second.front()
+//                           .mFields->begin()
+//                           ->mValue.int_value);
+//    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
+//    EXPECT_EQ(100, gaugeProducer.mPastBuckets.begin()
+//                           ->second.back()
+//                           .mGaugeAtoms.front()
+//                           .mFields->begin()
+//                           ->mValue.int_value);
+//
+//    gaugeProducer.onConditionChanged(false, bucket2StartTimeNs + 10);
+//    gaugeProducer.flushIfNeededLocked(bucket3StartTimeNs + 10);
+//    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
+//    EXPECT_EQ(2UL, gaugeProducer.mPastBuckets.begin()->second.size());
+//    EXPECT_EQ(110L, gaugeProducer.mPastBuckets.begin()
+//                            ->second.back()
+//                            .mGaugeAtoms.front()
+//                            .mFields->begin()
+//                            ->mValue.int_value);
+//}
+//
+//TEST(GaugeMetricProducerTest, TestPulledEventsWithSlicedCondition) {
+//    const int conditionTag = 65;
+//    GaugeMetric metric;
+//    metric.set_id(1111111);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.mutable_gauge_fields_filter()->set_include_all(true);
+//    metric.set_condition(StringToId("APP_DIED"));
+//    metric.set_max_pull_delay_sec(INT_MAX);
+//    auto dim = metric.mutable_dimensions_in_what();
+//    dim->set_field(tagId);
+//    dim->add_child()->set_field(1);
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
+//        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    EXPECT_CALL(*wizard, query(_, _, _))
+//            .WillRepeatedly(
+//                    Invoke([](const int conditionIndex, const ConditionKey& conditionParameters,
+//                              const bool isPartialLink) {
+//                        int pos[] = {1, 0, 0};
+//                        Field f(conditionTag, pos, 0);
+//                        HashableDimensionKey key;
+//                        key.mutableValues()->emplace_back(f, Value((int32_t)1000000));
+//
+//                        return ConditionState::kTrue;
+//                    }));
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//                event->write(1000);
+//                event->write(100);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    GaugeMetricProducer gaugeProducer(kConfigKey, metric, 1, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard, tagId, -1, tagId,
+//                                      bucketStartTimeNs, bucketStartTimeNs, pullerManager);
+//
+//    gaugeProducer.onSlicedConditionMayChange(true, bucketStartTimeNs + 8);
+//
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    const auto& key = gaugeProducer.mCurrentSlicedBucket->begin()->first;
+//    EXPECT_EQ(1UL, key.getDimensionKeyInWhat().getValues().size());
+//    EXPECT_EQ(1000, key.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//
+//    EXPECT_EQ(0UL, gaugeProducer.mPastBuckets.size());
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(1000);
+//    event->write(110);
+//    event->init();
+//    allData.push_back(event);
+//    gaugeProducer.onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
+//}
+//
+//TEST(GaugeMetricProducerTest, TestPulledEventsAnomalyDetection) {
+//    sp<AlarmMonitor> alarmMonitor;
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _)).WillOnce(Return(false));
+//
+//    GaugeMetric metric;
+//    metric.set_id(metricId);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_max_pull_delay_sec(INT_MAX);
+//    auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
+//    gaugeFieldMatcher->set_field(tagId);
+//    gaugeFieldMatcher->add_child()->set_field(2);
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
+//        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//
+//    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard,
+//                                      tagId, -1, tagId, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    Alert alert;
+//    alert.set_id(101);
+//    alert.set_metric_id(metricId);
+//    alert.set_trigger_if_sum_gt(25);
+//    alert.set_num_buckets(2);
+//    const int32_t refPeriodSec = 60;
+//    alert.set_refractory_period_secs(refPeriodSec);
+//    sp<AnomalyTracker> anomalyTracker = gaugeProducer.addAnomalyTracker(alert, alarmMonitor);
+//
+//    int tagId = 1;
+//    std::shared_ptr<LogEvent> event1 = std::make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+//    event1->write("some value");
+//    event1->write(13);
+//    event1->init();
+//
+//    gaugeProducer.onDataPulled({event1}, /** succeed */ true, bucketStartTimeNs);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_EQ(13L, gaugeProducer.mCurrentSlicedBucket->begin()
+//                           ->second.front()
+//                           .mFields->begin()
+//                           ->mValue.int_value);
+//    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY), 0U);
+//
+//    std::shared_ptr<LogEvent> event2 =
+//            std::make_shared<LogEvent>(tagId, bucketStartTimeNs + bucketSizeNs + 20);
+//    event2->write("some value");
+//    event2->write(15);
+//    event2->init();
+//
+//    gaugeProducer.onDataPulled({event2}, /** succeed */ true, bucketStartTimeNs + bucketSizeNs);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_EQ(15L, gaugeProducer.mCurrentSlicedBucket->begin()
+//                           ->second.front()
+//                           .mFields->begin()
+//                           ->mValue.int_value);
+//    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
+//              std::ceil(1.0 * event2->GetElapsedTimestampNs() / NS_PER_SEC) + refPeriodSec);
+//
+//    std::shared_ptr<LogEvent> event3 =
+//            std::make_shared<LogEvent>(tagId, bucketStartTimeNs + 2 * bucketSizeNs + 10);
+//    event3->write("some value");
+//    event3->write(26);
+//    event3->init();
+//
+//    gaugeProducer.onDataPulled({event3}, /** succeed */ true, bucket2StartTimeNs + 2 * bucketSizeNs);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_EQ(26L, gaugeProducer.mCurrentSlicedBucket->begin()
+//                           ->second.front()
+//                           .mFields->begin()
+//                           ->mValue.int_value);
+//    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
+//              std::ceil(1.0 * event2->GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec));
+//
+//    // The event4 does not have the gauge field. Thus the current bucket value is 0.
+//    std::shared_ptr<LogEvent> event4 =
+//            std::make_shared<LogEvent>(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 10);
+//    event4->write("some value");
+//    event4->init();
+//    gaugeProducer.onDataPulled({event4}, /** succeed */ true, bucketStartTimeNs + 3 * bucketSizeNs);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_TRUE(gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->empty());
+//}
+//
+//TEST(GaugeMetricProducerTest, TestPullOnTrigger) {
+//    GaugeMetric metric;
+//    metric.set_id(metricId);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_sampling_type(GaugeMetric::FIRST_N_SAMPLES);
+//    metric.mutable_gauge_fields_filter()->set_include_all(false);
+//    metric.set_max_pull_delay_sec(INT_MAX);
+//    auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
+//    gaugeFieldMatcher->set_field(tagId);
+//    gaugeFieldMatcher->add_child()->set_field(1);
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
+//        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//                event->write(4);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
+//                event->write(5);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Return(true));
+//
+//    int triggerId = 5;
+//    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard,
+//                                      tagId, triggerId, tagId, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//
+//    EXPECT_EQ(0UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    LogEvent trigger(triggerId, bucketStartTimeNs + 10);
+//    trigger.init();
+//    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size());
+//    trigger.setElapsedTimestampNs(bucketStartTimeNs + 20);
+//    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
+//    EXPECT_EQ(2UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size());
+//    trigger.setElapsedTimestampNs(bucket2StartTimeNs + 1);
+//    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
+//
+//    EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
+//    EXPECT_EQ(2UL, gaugeProducer.mPastBuckets.begin()->second.back().mGaugeAtoms.size());
+//    EXPECT_EQ(4, gaugeProducer.mPastBuckets.begin()
+//                         ->second.back()
+//                         .mGaugeAtoms[0]
+//                         .mFields->begin()
+//                         ->mValue.int_value);
+//    EXPECT_EQ(5, gaugeProducer.mPastBuckets.begin()
+//                         ->second.back()
+//                         .mGaugeAtoms[1]
+//                         .mFields->begin()
+//                         ->mValue.int_value);
+//}
+//
+//TEST(GaugeMetricProducerTest, TestRemoveDimensionInOutput) {
+//    GaugeMetric metric;
+//    metric.set_id(metricId);
+//    metric.set_bucket(ONE_MINUTE);
+//    metric.set_sampling_type(GaugeMetric::FIRST_N_SAMPLES);
+//    metric.mutable_gauge_fields_filter()->set_include_all(true);
+//    metric.set_max_pull_delay_sec(INT_MAX);
+//    auto dimensionMatcher = metric.mutable_dimensions_in_what();
+//    // use field 1 as dimension.
+//    dimensionMatcher->set_field(tagId);
+//    dimensionMatcher->add_child()->set_field(1);
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
+//        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 3);
+//                event->write(3);
+//                event->write(4);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//                event->write(4);
+//                event->write(5);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
+//                event->write(4);
+//                event->write(6);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Return(true));
+//
+//    int triggerId = 5;
+//    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard,
+//                                      tagId, triggerId, tagId, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//
+//    LogEvent trigger(triggerId, bucketStartTimeNs + 3);
+//    trigger.init();
+//    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    trigger.setElapsedTimestampNs(bucketStartTimeNs + 10);
+//    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
+//    EXPECT_EQ(2UL, gaugeProducer.mCurrentSlicedBucket->size());
+//    EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size());
+//    trigger.setElapsedTimestampNs(bucketStartTimeNs + 20);
+//    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
+//    EXPECT_EQ(2UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size());
+//    trigger.setElapsedTimestampNs(bucket2StartTimeNs + 1);
+//    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
+//
+//    EXPECT_EQ(2UL, gaugeProducer.mPastBuckets.size());
+//    auto bucketIt = gaugeProducer.mPastBuckets.begin();
+//    EXPECT_EQ(1UL, bucketIt->second.back().mGaugeAtoms.size());
+//    EXPECT_EQ(3, bucketIt->first.getDimensionKeyInWhat().getValues().begin()->mValue.int_value);
+//    EXPECT_EQ(4, bucketIt->second.back().mGaugeAtoms[0].mFields->begin()->mValue.int_value);
+//    bucketIt++;
+//    EXPECT_EQ(2UL, bucketIt->second.back().mGaugeAtoms.size());
+//    EXPECT_EQ(4, bucketIt->first.getDimensionKeyInWhat().getValues().begin()->mValue.int_value);
+//    EXPECT_EQ(5, bucketIt->second.back().mGaugeAtoms[0].mFields->begin()->mValue.int_value);
+//    EXPECT_EQ(6, bucketIt->second.back().mGaugeAtoms[1].mFields->begin()->mValue.int_value);
+//}
+//
+///*
+// * Test that BUCKET_TOO_SMALL dump reason is logged when a flushed bucket size
+// * is smaller than the "min_bucket_size_nanos" specified in the metric config.
+// */
+//TEST(GaugeMetricProducerTest_BucketDrop, TestBucketDropWhenBucketTooSmall) {
+//    GaugeMetric metric;
+//    metric.set_id(metricId);
+//    metric.set_bucket(FIVE_MINUTES);
+//    metric.set_sampling_type(GaugeMetric::FIRST_N_SAMPLES);
+//    metric.set_min_bucket_size_nanos(10000000000);  // 10 seconds
+//
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard = new EventMatcherWizard({
+//        new SimpleLogMatchingTracker(atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Bucket start.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write("field1");
+//                event->write(10);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    int triggerId = 5;
+//    GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard,
+//                                      tagId, triggerId, tagId, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    LogEvent trigger(triggerId, bucketStartTimeNs + 3);
+//    trigger.init();
+//    gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    gaugeProducer.onDumpReport(bucketStartTimeNs + 9000000, true /* include recent buckets */,
+//                                true, FAST /* dump_latency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_gauge_metrics());
+//    EXPECT_EQ(0, report.gauge_metrics().data_size());
+//    EXPECT_EQ(1, report.gauge_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
+//              report.gauge_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 9000000),
+//              report.gauge_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(1, report.gauge_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.gauge_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::BUCKET_TOO_SMALL, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 9000000), dropEvent.drop_time_millis());
+//}
 
 }  // namespace statsd
 }  // namespace os
diff --git a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp
index f6245ac..e48f378 100644
--- a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp
+++ b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp
@@ -79,4533 +79,4535 @@
     }
 }
 
-class ValueMetricProducerTestHelper {
-
- public:
-    static shared_ptr<LogEvent> createEvent(int64_t eventTimeNs, int64_t value) {
-        shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, eventTimeNs);
-        event->write(tagId);
-        event->write(value);
-        event->write(value);
-        event->init();
-        return event;
-    }
-
-    static sp<ValueMetricProducer> createValueProducerNoConditions(
-            sp<MockStatsPullerManager>& pullerManager, ValueMetric& metric) {
-        UidMap uidMap;
-        SimpleAtomMatcher atomMatcher;
-        atomMatcher.set_atom_id(tagId);
-        sp<EventMatcherWizard> eventMatcherWizard =
-                new EventMatcherWizard({new SimpleLogMatchingTracker(
-                        atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-        sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-        EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-        EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
-
-        sp<ValueMetricProducer> valueProducer = new ValueMetricProducer(
-                kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                logEventMatcherIndex, eventMatcherWizard, tagId,
-                bucketStartTimeNs, bucketStartTimeNs, pullerManager);
-        return valueProducer;
-    }
-
-    static sp<ValueMetricProducer> createValueProducerWithCondition(
-            sp<MockStatsPullerManager>& pullerManager, ValueMetric& metric) {
-        UidMap uidMap;
-        SimpleAtomMatcher atomMatcher;
-        atomMatcher.set_atom_id(tagId);
-        sp<EventMatcherWizard> eventMatcherWizard =
-                new EventMatcherWizard({new SimpleLogMatchingTracker(
-                        atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-        sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-        EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-        EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
-
-        sp<ValueMetricProducer> valueProducer =
-                new ValueMetricProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex,
-                                        eventMatcherWizard, tagId, bucketStartTimeNs,
-                                        bucketStartTimeNs, pullerManager);
-        valueProducer->mCondition = ConditionState::kFalse;
-        return valueProducer;
-    }
-
-    static sp<ValueMetricProducer> createValueProducerWithNoInitialCondition(
-            sp<MockStatsPullerManager>& pullerManager, ValueMetric& metric) {
-        UidMap uidMap;
-        SimpleAtomMatcher atomMatcher;
-        atomMatcher.set_atom_id(tagId);
-        sp<EventMatcherWizard> eventMatcherWizard =
-                new EventMatcherWizard({new SimpleLogMatchingTracker(
-                        atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-        sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-        EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-        EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
-
-        sp<ValueMetricProducer> valueProducer = new ValueMetricProducer(
-                kConfigKey, metric, 1, wizard, logEventMatcherIndex, eventMatcherWizard, tagId,
-                bucketStartTimeNs, bucketStartTimeNs, pullerManager);
-        return valueProducer;
-    }
-
-    static sp<ValueMetricProducer> createValueProducerWithState(
-            sp<MockStatsPullerManager>& pullerManager, ValueMetric& metric,
-            vector<int32_t> slicedStateAtoms,
-            unordered_map<int, unordered_map<int, int64_t>> stateGroupMap) {
-        UidMap uidMap;
-        SimpleAtomMatcher atomMatcher;
-        atomMatcher.set_atom_id(tagId);
-        sp<EventMatcherWizard> eventMatcherWizard =
-                new EventMatcherWizard({new SimpleLogMatchingTracker(
-                        atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-        sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-        EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-        EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
-        sp<ValueMetricProducer> valueProducer = new ValueMetricProducer(
-                kConfigKey, metric, -1 /* no condition */, wizard, logEventMatcherIndex,
-                eventMatcherWizard, tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager, {},
-                {}, slicedStateAtoms, stateGroupMap);
-        return valueProducer;
-    }
-
-    static ValueMetric createMetric() {
-        ValueMetric metric;
-        metric.set_id(metricId);
-        metric.set_bucket(ONE_MINUTE);
-        metric.mutable_value_field()->set_field(tagId);
-        metric.mutable_value_field()->add_child()->set_field(2);
-        metric.set_max_pull_delay_sec(INT_MAX);
-        return metric;
-    }
-
-    static ValueMetric createMetricWithCondition() {
-        ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-        metric.set_condition(StringToId("SCREEN_ON"));
-        return metric;
-    }
-
-    static ValueMetric createMetricWithState(string state) {
-        ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-        metric.add_slice_by_state(StringToId(state));
-        return metric;
-    }
-};
-
-/*
- * Tests that the first bucket works correctly
- */
-TEST(ValueMetricProducerTest, TestCalcPreviousBucketEndTime) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    int64_t startTimeBase = 11;
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
-    // statsd started long ago.
-    // The metric starts in the middle of the bucket
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard, -1, startTimeBase,
-                                      22, pullerManager);
-
-    EXPECT_EQ(startTimeBase, valueProducer.calcPreviousBucketEndTime(60 * NS_PER_SEC + 10));
-    EXPECT_EQ(startTimeBase, valueProducer.calcPreviousBucketEndTime(60 * NS_PER_SEC + 10));
-    EXPECT_EQ(60 * NS_PER_SEC + startTimeBase,
-              valueProducer.calcPreviousBucketEndTime(2 * 60 * NS_PER_SEC));
-    EXPECT_EQ(2 * 60 * NS_PER_SEC + startTimeBase,
-              valueProducer.calcPreviousBucketEndTime(3 * 60 * NS_PER_SEC));
-}
-
-/*
- * Tests that the first bucket works correctly
- */
-TEST(ValueMetricProducerTest, TestFirstBucket) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
-    // statsd started long ago.
-    // The metric starts in the middle of the bucket
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard, -1, 5,
-                                      600 * NS_PER_SEC + NS_PER_SEC / 2, pullerManager);
-
-    EXPECT_EQ(600500000000, valueProducer.mCurrentBucketStartTimeNs);
-    EXPECT_EQ(10, valueProducer.mCurrentBucketNum);
-    EXPECT_EQ(660000000005, valueProducer.getCurrentBucketEndTimeNs());
-}
-
-/*
- * Tests pulled atoms with no conditions
- */
-TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(tagId);
-                event->write(3);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(tagId);
-    event->write(11);
-    event->init();
-    allData.push_back(event);
-
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(11, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(8, curInterval.value.long_value);
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-    EXPECT_EQ(8, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
-
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
-    event->write(tagId);
-    event->write(23);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(23, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(12, curInterval.value.long_value);
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-    EXPECT_EQ(2UL, valueProducer->mPastBuckets.begin()->second.size());
-    EXPECT_EQ(8, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
-    EXPECT_EQ(12, valueProducer->mPastBuckets.begin()->second.back().values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second.back().mConditionTrueNs);
-
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
-    event->write(tagId);
-    event->write(36);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(36, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(13, curInterval.value.long_value);
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-    EXPECT_EQ(3UL, valueProducer->mPastBuckets.begin()->second.size());
-    EXPECT_EQ(8, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
-    EXPECT_EQ(12, valueProducer->mPastBuckets.begin()->second[1].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[1].mConditionTrueNs);
-    EXPECT_EQ(13, valueProducer->mPastBuckets.begin()->second[2].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[2].mConditionTrueNs);
-}
-
-TEST(ValueMetricProducerTest, TestPartialBucketCreated) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Initialize bucket.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
-                event->write(tagId);
-                event->write(1);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Partial bucket.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 10);
-                event->write(tagId);
-                event->write(5);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    // First bucket ends.
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 10);
-    event->write(tagId);
-    event->write(2);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** success */ true, bucket2StartTimeNs);
-
-    // Partial buckets created in 2nd bucket.
-    valueProducer->notifyAppUpgrade(bucket2StartTimeNs + 2, "com.foo", 10000, 1);
-
-    // One full bucket and one partial bucket.
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-    vector<ValueBucket> buckets = valueProducer->mPastBuckets.begin()->second;
-    EXPECT_EQ(2UL, buckets.size());
-    // Full bucket (2 - 1)
-    EXPECT_EQ(1, buckets[0].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, buckets[0].mConditionTrueNs);
-    // Full bucket (5 - 3)
-    EXPECT_EQ(3, buckets[1].values[0].long_value);
-    // partial bucket [bucket2StartTimeNs, bucket2StartTimeNs + 2]
-    EXPECT_EQ(2, buckets[1].mConditionTrueNs);
-}
-
-/*
- * Tests pulled atoms with filtering
- */
-TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    auto keyValue = atomMatcher.add_field_value_matcher();
-    keyValue->set_field(1);
-    keyValue->set_eq_int(3);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(3);
-                event->write(3);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer = new ValueMetricProducer(
-            kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, logEventMatcherIndex,
-            eventMatcherWizard, tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(3);
-    event->write(11);
-    event->init();
-    allData.push_back(event);
-
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(11, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(8, curInterval.value.long_value);
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-    EXPECT_EQ(8, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
-
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
-    event->write(4);
-    event->write(23);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
-    // No new data seen, so data has been cleared.
-    EXPECT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
-
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(11, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(8, curInterval.value.long_value);
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-    EXPECT_EQ(8, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
-
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
-    event->write(3);
-    event->write(36);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-
-    // the base was reset
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(36, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.begin()->second.size());
-    EXPECT_EQ(8, valueProducer->mPastBuckets.begin()->second.back().values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second.back().mConditionTrueNs);
-}
-
-/*
- * Tests pulled atoms with no conditions and take absolute value after reset
- */
-TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.set_use_absolute_value_on_reset(true);
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _)).WillOnce(Return(true));
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(tagId);
-    event->write(11);
-    event->init();
-    allData.push_back(event);
-
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(11, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
-    event->write(tagId);
-    event->write(10);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(10, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(10, curInterval.value.long_value);
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-    EXPECT_EQ(10, valueProducer->mPastBuckets.begin()->second.back().values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second.back().mConditionTrueNs);
-
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
-    event->write(tagId);
-    event->write(36);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(36, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(26, curInterval.value.long_value);
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-    EXPECT_EQ(2UL, valueProducer->mPastBuckets.begin()->second.size());
-    EXPECT_EQ(10, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
-    EXPECT_EQ(26, valueProducer->mPastBuckets.begin()->second[1].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[1].mConditionTrueNs);
-}
-
-/*
- * Tests pulled atoms with no conditions and take zero value after reset
- */
-TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _)).WillOnce(Return(false));
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(tagId);
-    event->write(11);
-    event->init();
-    allData.push_back(event);
-
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(11, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
-    event->write(tagId);
-    event->write(10);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(10, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
-    event->write(tagId);
-    event->write(36);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(36, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(26, curInterval.value.long_value);
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-    EXPECT_EQ(26, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
-}
-
-/*
- * Test pulled event with non sliced condition.
- */
-TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
-                event->write(tagId);
-                event->write(100);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-                event->write(tagId);
-                event->write(130);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
-                event->write(tagId);
-                event->write(180);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    // startUpdated:false sum:0 start:100
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(100, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(1);
-    event->write(110);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {10}, {bucketSizeNs - 8});
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(110, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(10, curInterval.value.long_value);
-
-    valueProducer->onConditionChanged(false, bucket2StartTimeNs + 1);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {10}, {bucketSizeNs - 8});
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curInterval.hasValue);
-    EXPECT_EQ(20, curInterval.value.long_value);
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-
-    valueProducer->onConditionChanged(true, bucket3StartTimeNs + 1);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {10, 20}, {bucketSizeNs - 8, 1});
-}
-
-TEST(ValueMetricProducerTest, TestPushedEventsWithUpgrade) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-    event1->write(1);
-    event1->write(10);
-    event1->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-
-    valueProducer.notifyAppUpgrade(bucketStartTimeNs + 150, "ANY.APP", 1, 1);
-    EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(bucketStartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs);
-
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 59 * NS_PER_SEC);
-    event2->write(1);
-    event2->write(10);
-    event2->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
-    EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(bucketStartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs);
-
-    // Next value should create a new bucket.
-    shared_ptr<LogEvent> event3 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 65 * NS_PER_SEC);
-    event3->write(1);
-    event3->write(10);
-    event3->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
-    EXPECT_EQ(2UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, valueProducer.mCurrentBucketStartTimeNs);
-}
-
-TEST(ValueMetricProducerTest, TestPulledValueWithUpgrade) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Return(true))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 149);
-                event->write(tagId);
-                event->write(120);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, tagId, bucketStartTimeNs,
-                                      bucketStartTimeNs, pullerManager);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(tagId);
-    event->write(100);
-    event->init();
-    allData.push_back(event);
-
-    valueProducer.onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-
-    valueProducer.notifyAppUpgrade(bucket2StartTimeNs + 150, "ANY.APP", 1, 1);
-    EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(bucket2StartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs);
-    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {20}, {150});
-
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
-    event->write(tagId);
-    event->write(150);
-    event->init();
-    allData.push_back(event);
-    valueProducer.onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
-    EXPECT_EQ(2UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(bucket3StartTimeNs, valueProducer.mCurrentBucketStartTimeNs);
-    EXPECT_EQ(20L,
-              valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].values[0].long_value);
-    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {20, 30},
-                                    {150, bucketSizeNs - 150});
-}
-
-TEST(ValueMetricProducerTest, TestPulledWithAppUpgradeDisabled) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.set_split_bucket_for_app_upgrade(false);
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, Pull(tagId, _)).WillOnce(Return(true));
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, tagId, bucketStartTimeNs,
-                                      bucketStartTimeNs, pullerManager);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(tagId);
-    event->write(100);
-    event->init();
-    allData.push_back(event);
-
-    valueProducer.onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-
-    valueProducer.notifyAppUpgrade(bucket2StartTimeNs + 150, "ANY.APP", 1, 1);
-    EXPECT_EQ(0UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(bucket2StartTimeNs, valueProducer.mCurrentBucketStartTimeNs);
-}
-
-TEST(ValueMetricProducerTest, TestPulledValueWithUpgradeWhileConditionFalse) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
-                event->write(tagId);
-                event->write(100);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs - 100);
-                event->write(tagId);
-                event->write(120);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 1);
-
-    valueProducer->onConditionChanged(false, bucket2StartTimeNs-100);
-    EXPECT_FALSE(valueProducer->mCondition);
-
-    valueProducer->notifyAppUpgrade(bucket2StartTimeNs-50, "ANY.APP", 1, 1);
-    // Expect one full buckets already done and starting a partial bucket.
-    EXPECT_EQ(bucket2StartTimeNs-50, valueProducer->mCurrentBucketStartTimeNs);
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
-    EXPECT_EQ(bucketStartTimeNs,
-              valueProducer->mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mBucketStartNs);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20},
-                                    {(bucket2StartTimeNs - 100) - (bucketStartTimeNs + 1)});
-    EXPECT_FALSE(valueProducer->mCondition);
-}
-
-TEST(ValueMetricProducerTest, TestPushedEventsWithoutCondition) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-    event1->write(1);
-    event1->write(10);
-    event1->init();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
-    event2->write(1);
-    event2->write(20);
-    event2->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(10, curInterval.value.long_value);
-    EXPECT_EQ(true, curInterval.hasValue);
-
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(30, curInterval.value.long_value);
-
-    valueProducer.flushIfNeededLocked(bucket2StartTimeNs);
-    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {30}, {bucketSizeNs});
-}
-
-TEST(ValueMetricProducerTest, TestPushedEventsWithCondition) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
-    ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-    valueProducer.mCondition = ConditionState::kFalse;
-
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-    event1->write(1);
-    event1->write(10);
-    event1->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
-    // has 1 slice
-    EXPECT_EQ(0UL, valueProducer.mCurrentSlicedBucket.size());
-
-    valueProducer.onConditionChangedLocked(true, bucketStartTimeNs + 15);
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
-    event2->write(1);
-    event2->write(20);
-    event2->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval =
-            valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(20, curInterval.value.long_value);
-
-    shared_ptr<LogEvent> event3 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 30);
-    event3->write(1);
-    event3->write(30);
-    event3->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(50, curInterval.value.long_value);
-
-    valueProducer.onConditionChangedLocked(false, bucketStartTimeNs + 35);
-    shared_ptr<LogEvent> event4 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 40);
-    event4->write(1);
-    event4->write(40);
-    event4->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event4);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(50, curInterval.value.long_value);
-
-    valueProducer.flushIfNeededLocked(bucket2StartTimeNs);
-    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {50}, {20});
-}
-
-TEST(ValueMetricProducerTest, TestAnomalyDetection) {
-    sp<AlarmMonitor> alarmMonitor;
-    Alert alert;
-    alert.set_id(101);
-    alert.set_metric_id(metricId);
-    alert.set_trigger_if_sum_gt(130);
-    alert.set_num_buckets(2);
-    const int32_t refPeriodSec = 3;
-    alert.set_refractory_period_secs(refPeriodSec);
-
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
-                                      logEventMatcherIndex, eventMatcherWizard, -1 /*not pulled*/,
-                                      bucketStartTimeNs, bucketStartTimeNs, pullerManager);
-
-    sp<AnomalyTracker> anomalyTracker = valueProducer.addAnomalyTracker(alert, alarmMonitor);
-
-
-    shared_ptr<LogEvent> event1
-            = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1 * NS_PER_SEC);
-    event1->write(161);
-    event1->write(10); // value of interest
-    event1->init();
-    shared_ptr<LogEvent> event2
-            = make_shared<LogEvent>(tagId, bucketStartTimeNs + 2 + NS_PER_SEC);
-    event2->write(162);
-    event2->write(20); // value of interest
-    event2->init();
-    shared_ptr<LogEvent> event3
-            = make_shared<LogEvent>(tagId, bucketStartTimeNs + 2 * bucketSizeNs + 1 * NS_PER_SEC);
-    event3->write(163);
-    event3->write(130); // value of interest
-    event3->init();
-    shared_ptr<LogEvent> event4
-            = make_shared<LogEvent>(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 1 * NS_PER_SEC);
-    event4->write(35);
-    event4->write(1); // value of interest
-    event4->init();
-    shared_ptr<LogEvent> event5
-            = make_shared<LogEvent>(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 2 * NS_PER_SEC);
-    event5->write(45);
-    event5->write(150); // value of interest
-    event5->init();
-    shared_ptr<LogEvent> event6
-            = make_shared<LogEvent>(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 10 * NS_PER_SEC);
-    event6->write(25);
-    event6->write(160); // value of interest
-    event6->init();
-
-    // Two events in bucket #0.
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
-    // Value sum == 30 <= 130.
-    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY), 0U);
-
-    // One event in bucket #2. No alarm as bucket #0 is trashed out.
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
-    // Value sum == 130 <= 130.
-    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY), 0U);
-
-    // Three events in bucket #3.
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event4);
-    // Anomaly at event 4 since Value sum == 131 > 130!
-    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
-            std::ceil(1.0 * event4->GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec));
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event5);
-    // Event 5 is within 3 sec refractory period. Thus last alarm timestamp is still event4.
-    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
-            std::ceil(1.0 * event4->GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec));
-
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event6);
-    // Anomaly at event 6 since Value sum == 160 > 130 and after refractory period.
-    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
-            std::ceil(1.0 * event6->GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec));
-}
-
-// Test value metric no condition, the pull on bucket boundary come in time and too late
-TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _)).WillOnce(Return(true));
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    vector<shared_ptr<LogEvent>> allData;
-    // pull 1
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(tagId);
-    event->write(11);
-    event->init();
-    allData.push_back(event);
-
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-
-    // startUpdated:true sum:0 start:11
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(11, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-
-    // pull 2 at correct time
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
-    event->write(tagId);
-    event->write(23);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    // tartUpdated:false sum:12
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(23, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {12}, {bucketSizeNs});
-
-    // pull 3 come late.
-    // The previous bucket gets closed with error. (Has start value 23, no ending)
-    // Another bucket gets closed with error. (No start, but ending with 36)
-    // The new bucket is back to normal.
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucket6StartTimeNs + 1);
-    event->write(tagId);
-    event->write(36);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket6StartTimeNs);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    // startUpdated:false sum:12
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(36, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {12}, {bucketSizeNs});
-}
-
-/*
- * Test pulled event with non sliced condition. The pull on boundary come late because the alarm
- * was delivered late.
- */
-TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // condition becomes true
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
-                event->write(tagId);
-                event->write(100);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // condition becomes false
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-                event->write(tagId);
-                event->write(120);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(100, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-
-    // pull on bucket boundary come late, condition change happens before it
-    valueProducer->onConditionChanged(false, bucket2StartTimeNs + 1);
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8});
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-
-    // Now the alarm is delivered.
-    // since the condition turned to off before this pull finish, it has no effect
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 110));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8});
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-    EXPECT_EQ(false, curInterval.hasValue);
-}
-
-/*
- * Test pulled event with non sliced condition. The pull on boundary come late, after the condition
- * change to false, and then true again. This is due to alarm delivered late.
- */
-TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // condition becomes true
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
-                event->write(tagId);
-                event->write(100);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // condition becomes false
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-                event->write(tagId);
-                event->write(120);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // condition becomes true again
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 25);
-                event->write(tagId);
-                event->write(130);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    // startUpdated:false sum:0 start:100
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(100, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-
-    // pull on bucket boundary come late, condition change happens before it
-    valueProducer->onConditionChanged(false, bucket2StartTimeNs + 1);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8});
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-    EXPECT_EQ(false, curInterval.hasValue);
-
-    // condition changed to true again, before the pull alarm is delivered
-    valueProducer->onConditionChanged(true, bucket2StartTimeNs + 25);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8});
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(130, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-
-    // Now the alarm is delivered, but it is considered late, the data will be used
-    // for the new bucket since it was just pulled.
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 50, 140));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs + 50);
-
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(140, curBaseInfo.base.long_value);
-    EXPECT_EQ(true, curInterval.hasValue);
-    EXPECT_EQ(10, curInterval.value.long_value);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8});
-
-    allData.clear();
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket3StartTimeNs, 160));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20, 30},
-                                    {bucketSizeNs - 8, bucketSizeNs - 24});
-}
-
-TEST(ValueMetricProducerTest, TestPushedAggregateMin) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.set_aggregation_type(ValueMetric::MIN);
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-    event1->write(1);
-    event1->write(10);
-    event1->init();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
-    event2->write(1);
-    event2->write(20);
-    event2->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval =
-            valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(10, curInterval.value.long_value);
-    EXPECT_EQ(true, curInterval.hasValue);
-
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(10, curInterval.value.long_value);
-
-    valueProducer.flushIfNeededLocked(bucket2StartTimeNs);
-    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {10}, {bucketSizeNs});
-}
-
-TEST(ValueMetricProducerTest, TestPushedAggregateMax) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.set_aggregation_type(ValueMetric::MAX);
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-    event1->write(1);
-    event1->write(10);
-    event1->init();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
-    event2->write(1);
-    event2->write(20);
-    event2->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval =
-            valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(10, curInterval.value.long_value);
-    EXPECT_EQ(true, curInterval.hasValue);
-
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(20, curInterval.value.long_value);
-
-    valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
-    /* EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); */
-    /* EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); */
-    /* EXPECT_EQ(20, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); */
-}
-
-TEST(ValueMetricProducerTest, TestPushedAggregateAvg) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.set_aggregation_type(ValueMetric::AVG);
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-    event1->write(1);
-    event1->write(10);
-    event1->init();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
-    event2->write(1);
-    event2->write(15);
-    event2->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval;
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(10, curInterval.value.long_value);
-    EXPECT_EQ(true, curInterval.hasValue);
-    EXPECT_EQ(1, curInterval.sampleSize);
-
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(25, curInterval.value.long_value);
-    EXPECT_EQ(2, curInterval.sampleSize);
-
-    valueProducer.flushIfNeededLocked(bucket2StartTimeNs);
-    EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
-    EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
-
-    EXPECT_TRUE(std::abs(valueProducer.mPastBuckets.begin()->second.back().values[0].double_value -
-                         12.5) < epsilon);
-}
-
-TEST(ValueMetricProducerTest, TestPushedAggregateSum) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.set_aggregation_type(ValueMetric::SUM);
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-    event1->write(1);
-    event1->write(10);
-    event1->init();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
-    event2->write(1);
-    event2->write(15);
-    event2->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval =
-            valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(10, curInterval.value.long_value);
-    EXPECT_EQ(true, curInterval.hasValue);
-
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(25, curInterval.value.long_value);
-
-    valueProducer.flushIfNeededLocked(bucket2StartTimeNs);
-    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {25}, {bucketSizeNs});
-}
-
-TEST(ValueMetricProducerTest, TestSkipZeroDiffOutput) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.set_aggregation_type(ValueMetric::MIN);
-    metric.set_use_diff(true);
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-    event1->write(1);
-    event1->write(10);
-    event1->init();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 15);
-    event2->write(1);
-    event2->write(15);
-    event2->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval =
-            valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(10, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    EXPECT_EQ(true, curInterval.hasValue);
-    EXPECT_EQ(5, curInterval.value.long_value);
-
-    // no change in data.
-    shared_ptr<LogEvent> event3 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 10);
-    event3->write(1);
-    event3->write(15);
-    event3->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(15, curBaseInfo.base.long_value);
-    EXPECT_EQ(true, curInterval.hasValue);
-
-    shared_ptr<LogEvent> event4 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 15);
-    event4->write(1);
-    event4->write(15);
-    event4->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event4);
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(15, curBaseInfo.base.long_value);
-    EXPECT_EQ(true, curInterval.hasValue);
-
-    valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
-    EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
-    EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
-    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {5}, {bucketSizeNs});
-}
-
-TEST(ValueMetricProducerTest, TestSkipZeroDiffOutputMultiValue) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.mutable_value_field()->add_child()->set_field(3);
-    metric.set_aggregation_type(ValueMetric::MIN);
-    metric.set_use_diff(true);
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
-                                      pullerManager);
-
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-    event1->write(1);
-    event1->write(10);
-    event1->write(20);
-    event1->init();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 15);
-    event2->write(1);
-    event2->write(15);
-    event2->write(22);
-    event2->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval =
-            valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(10, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[1];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(20, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curInterval.hasValue);
-    EXPECT_EQ(5, curInterval.value.long_value);
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[1];
-    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[1];
-    EXPECT_EQ(true, curInterval.hasValue);
-    EXPECT_EQ(2, curInterval.value.long_value);
-
-    // no change in first value field
-    shared_ptr<LogEvent> event3 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 10);
-    event3->write(1);
-    event3->write(15);
-    event3->write(25);
-    event3->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
-
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(15, curBaseInfo.base.long_value);
-    EXPECT_EQ(true, curInterval.hasValue);
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[1];
-    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[1];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(25, curBaseInfo.base.long_value);
-    EXPECT_EQ(true, curInterval.hasValue);
-
-    shared_ptr<LogEvent> event4 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 15);
-    event4->write(1);
-    event4->write(15);
-    event4->write(29);
-    event4->init();
-    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event4);
-    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(15, curBaseInfo.base.long_value);
-    EXPECT_EQ(true, curInterval.hasValue);
-    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[1];
-    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[1];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(29, curBaseInfo.base.long_value);
-    EXPECT_EQ(true, curInterval.hasValue);
-
-    valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
-
-    EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
-    EXPECT_EQ(2UL, valueProducer.mPastBuckets.begin()->second.size());
-    EXPECT_EQ(2UL, valueProducer.mPastBuckets.begin()->second[0].values.size());
-    EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second[1].values.size());
-
-    EXPECT_EQ(bucketSizeNs, valueProducer.mPastBuckets.begin()->second[0].mConditionTrueNs);
-    EXPECT_EQ(5, valueProducer.mPastBuckets.begin()->second[0].values[0].long_value);
-    EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second[0].valueIndex[0]);
-    EXPECT_EQ(2, valueProducer.mPastBuckets.begin()->second[0].values[1].long_value);
-    EXPECT_EQ(1, valueProducer.mPastBuckets.begin()->second[0].valueIndex[1]);
-
-    EXPECT_EQ(bucketSizeNs, valueProducer.mPastBuckets.begin()->second[1].mConditionTrueNs);
-    EXPECT_EQ(3, valueProducer.mPastBuckets.begin()->second[1].values[0].long_value);
-    EXPECT_EQ(1, valueProducer.mPastBuckets.begin()->second[1].valueIndex[0]);
-}
-
-/*
- * Tests zero default base.
- */
-TEST(ValueMetricProducerTest, TestUseZeroDefaultBase) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.mutable_dimensions_in_what()->set_field(tagId);
-    metric.mutable_dimensions_in_what()->add_child()->set_field(1);
-    metric.set_use_zero_default_base(true);
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(1);
-                event->write(3);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    auto iter = valueProducer->mCurrentSlicedBucket.begin();
-    auto& interval1 = iter->second[0];
-    auto iterBase = valueProducer->mCurrentBaseInfo.begin();
-    auto& baseInfo1 = iterBase->second[0];
-    EXPECT_EQ(1, iter->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, baseInfo1.hasBase);
-    EXPECT_EQ(3, baseInfo1.base.long_value);
-    EXPECT_EQ(false, interval1.hasValue);
-    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-    vector<shared_ptr<LogEvent>> allData;
-
-    allData.clear();
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event1->write(2);
-    event1->write(4);
-    event1->init();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event2->write(1);
-    event2->write(11);
-    event2->init();
-    allData.push_back(event1);
-    allData.push_back(event2);
-
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
-    EXPECT_EQ(true, baseInfo1.hasBase);
-    EXPECT_EQ(11, baseInfo1.base.long_value);
-    EXPECT_EQ(false, interval1.hasValue);
-    EXPECT_EQ(8, interval1.value.long_value);
-
-    auto it = valueProducer->mCurrentSlicedBucket.begin();
-    for (; it != valueProducer->mCurrentSlicedBucket.end(); it++) {
-        if (it != iter) {
-            break;
-        }
-    }
-    auto itBase = valueProducer->mCurrentBaseInfo.begin();
-    for (; itBase != valueProducer->mCurrentBaseInfo.end(); it++) {
-        if (itBase != iterBase) {
-            break;
-        }
-    }
-    EXPECT_TRUE(it != iter);
-    EXPECT_TRUE(itBase != iterBase);
-    auto& interval2 = it->second[0];
-    auto& baseInfo2 = itBase->second[0];
-    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, baseInfo2.hasBase);
-    EXPECT_EQ(4, baseInfo2.base.long_value);
-    EXPECT_EQ(false, interval2.hasValue);
-    EXPECT_EQ(4, interval2.value.long_value);
-
-    EXPECT_EQ(2UL, valueProducer->mPastBuckets.size());
-    auto iterator = valueProducer->mPastBuckets.begin();
-    EXPECT_EQ(bucketSizeNs, iterator->second[0].mConditionTrueNs);
-    EXPECT_EQ(8, iterator->second[0].values[0].long_value);
-    iterator++;
-    EXPECT_EQ(bucketSizeNs, iterator->second[0].mConditionTrueNs);
-    EXPECT_EQ(4, iterator->second[0].values[0].long_value);
-}
-
-/*
- * Tests using zero default base with failed pull.
- */
-TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.mutable_dimensions_in_what()->set_field(tagId);
-    metric.mutable_dimensions_in_what()->add_child()->set_field(1);
-    metric.set_use_zero_default_base(true);
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(1);
-                event->write(3);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    auto it = valueProducer->mCurrentSlicedBucket.begin();
-    auto& interval1 = it->second[0];
-    auto& baseInfo1 =
-            valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat())->second[0];
-    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, baseInfo1.hasBase);
-    EXPECT_EQ(3, baseInfo1.base.long_value);
-    EXPECT_EQ(false, interval1.hasValue);
-    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-    vector<shared_ptr<LogEvent>> allData;
-
-    allData.clear();
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event1->write(2);
-    event1->write(4);
-    event1->init();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event2->write(1);
-    event2->write(11);
-    event2->init();
-    allData.push_back(event1);
-    allData.push_back(event2);
-
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
-    EXPECT_EQ(true, baseInfo1.hasBase);
-    EXPECT_EQ(11, baseInfo1.base.long_value);
-    EXPECT_EQ(false, interval1.hasValue);
-    EXPECT_EQ(8, interval1.value.long_value);
-
-    auto it2 = valueProducer->mCurrentSlicedBucket.begin();
-    for (; it2 != valueProducer->mCurrentSlicedBucket.end(); it2++) {
-        if (it2 != it) {
-            break;
-        }
-    }
-    // auto itBase = valueProducer->mCurrentBaseInfo.begin();
-    // for (; itBase != valueProducer->mCurrentBaseInfo.end(); it++) {
-    //     if (itBase != iterBase) {
-    //         break;
-    //     }
-    // }
-    EXPECT_TRUE(it2 != it);
-    // EXPECT_TRUE(itBase != iterBase);
-    auto& interval2 = it2->second[0];
-    auto& baseInfo2 =
-            valueProducer->mCurrentBaseInfo.find(it2->first.getDimensionKeyInWhat())->second[0];
-    EXPECT_EQ(2, it2->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, baseInfo2.hasBase);
-    EXPECT_EQ(4, baseInfo2.base.long_value);
-    EXPECT_EQ(false, interval2.hasValue);
-    EXPECT_EQ(4, interval2.value.long_value);
-    EXPECT_EQ(2UL, valueProducer->mPastBuckets.size());
-
-    // next pull somehow did not happen, skip to end of bucket 3
-    allData.clear();
-    event1 = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
-    event1->write(2);
-    event1->write(5);
-    event1->init();
-    allData.push_back(event1);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs);
-
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    EXPECT_EQ(true, baseInfo2.hasBase);
-    EXPECT_EQ(5, baseInfo2.base.long_value);
-    EXPECT_EQ(false, interval2.hasValue);
-    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
-    EXPECT_EQ(2UL, valueProducer->mPastBuckets.size());
-
-    allData.clear();
-    event1 = make_shared<LogEvent>(tagId, bucket5StartTimeNs + 1);
-    event1->write(2);
-    event1->write(13);
-    event1->init();
-    allData.push_back(event1);
-    event2 = make_shared<LogEvent>(tagId, bucket5StartTimeNs + 1);
-    event2->write(1);
-    event2->write(5);
-    event2->init();
-    allData.push_back(event2);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket5StartTimeNs);
-
-    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
-    it = valueProducer->mCurrentSlicedBucket.begin();
-    it2 = std::next(valueProducer->mCurrentSlicedBucket.begin());
-    interval1 = it->second[0];
-    interval2 = it2->second[0];
-    baseInfo1 = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat())->second[0];
-    baseInfo2 = valueProducer->mCurrentBaseInfo.find(it2->first.getDimensionKeyInWhat())->second[0];
-
-    EXPECT_EQ(true, baseInfo1.hasBase);
-    EXPECT_EQ(5, baseInfo1.base.long_value);
-    EXPECT_EQ(false, interval1.hasValue);
-    EXPECT_EQ(5, interval1.value.long_value);
-    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
-
-    EXPECT_EQ(true, baseInfo2.hasBase);
-    EXPECT_EQ(13, baseInfo2.base.long_value);
-    EXPECT_EQ(false, interval2.hasValue);
-    EXPECT_EQ(8, interval2.value.long_value);
-
-    EXPECT_EQ(2UL, valueProducer->mPastBuckets.size());
-}
-
-/*
- * Tests trim unused dimension key if no new data is seen in an entire bucket.
- */
-TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.mutable_dimensions_in_what()->set_field(tagId);
-    metric.mutable_dimensions_in_what()->add_child()->set_field(1);
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(1);
-                event->write(3);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    auto iter = valueProducer->mCurrentSlicedBucket.begin();
-    auto& interval1 = iter->second[0];
-    auto iterBase = valueProducer->mCurrentBaseInfo.begin();
-    auto& baseInfo1 = iterBase->second[0];
-    EXPECT_EQ(1, iter->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, baseInfo1.hasBase);
-    EXPECT_EQ(3, baseInfo1.base.long_value);
-    EXPECT_EQ(false, interval1.hasValue);
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-    vector<shared_ptr<LogEvent>> allData;
-
-    allData.clear();
-    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event1->write(2);
-    event1->write(4);
-    event1->init();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event2->write(1);
-    event2->write(11);
-    event2->init();
-    allData.push_back(event1);
-    allData.push_back(event2);
-
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
-    EXPECT_EQ(true, baseInfo1.hasBase);
-    EXPECT_EQ(11, baseInfo1.base.long_value);
-    EXPECT_EQ(false, interval1.hasValue);
-    EXPECT_EQ(8, interval1.value.long_value);
-    EXPECT_FALSE(interval1.seenNewData);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {8}, {bucketSizeNs});
-
-    auto it = valueProducer->mCurrentSlicedBucket.begin();
-    for (; it != valueProducer->mCurrentSlicedBucket.end(); it++) {
-        if (it != iter) {
-            break;
-        }
-    }
-    auto itBase = valueProducer->mCurrentBaseInfo.begin();
-    for (; itBase != valueProducer->mCurrentBaseInfo.end(); it++) {
-        if (itBase != iterBase) {
-            break;
-        }
-    }
-    EXPECT_TRUE(it != iter);
-    EXPECT_TRUE(itBase != iterBase);
-    auto& interval2 = it->second[0];
-    auto& baseInfo2 = itBase->second[0];
-    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, baseInfo2.hasBase);
-    EXPECT_EQ(4, baseInfo2.base.long_value);
-    EXPECT_EQ(false, interval2.hasValue);
-    EXPECT_FALSE(interval2.seenNewData);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {8}, {bucketSizeNs});
-
-    // next pull somehow did not happen, skip to end of bucket 3
-    allData.clear();
-    event1 = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
-    event1->write(2);
-    event1->write(5);
-    event1->init();
-    allData.push_back(event1);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs);
-    // Only one interval left. One was trimmed.
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    interval2 = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    baseInfo2 = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, baseInfo2.hasBase);
-    EXPECT_EQ(5, baseInfo2.base.long_value);
-    EXPECT_EQ(false, interval2.hasValue);
-    EXPECT_FALSE(interval2.seenNewData);
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {8}, {bucketSizeNs});
-
-    allData.clear();
-    event1 = make_shared<LogEvent>(tagId, bucket5StartTimeNs + 1);
-    event1->write(2);
-    event1->write(14);
-    event1->init();
-    allData.push_back(event1);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket5StartTimeNs);
-
-    interval2 = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    baseInfo2 = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, baseInfo2.hasBase);
-    EXPECT_EQ(14, baseInfo2.base.long_value);
-    EXPECT_EQ(false, interval2.hasValue);
-    EXPECT_FALSE(interval2.seenNewData);
-    ASSERT_EQ(2UL, valueProducer->mPastBuckets.size());
-    auto iterator = valueProducer->mPastBuckets.begin();
-    EXPECT_EQ(9, iterator->second[0].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, iterator->second[0].mConditionTrueNs);
-    iterator++;
-    EXPECT_EQ(8, iterator->second[0].values[0].long_value);
-    EXPECT_EQ(bucketSizeNs, iterator->second[0].mConditionTrueNs);
-}
-
-TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange_EndOfBucket) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    // Used by onConditionChanged.
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
-                event->write(tagId);
-                event->write(100);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval& curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo& curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(100, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-
-    vector<shared_ptr<LogEvent>> allData;
-    valueProducer->onDataPulled(allData, /** succeed */ false, bucket2StartTimeNs);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(false, valueProducer->mHasGlobalBase);
-}
-
-TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
-                event->write(tagId);
-                event->write(100);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Return(false));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval& curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo& curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(100, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 20);
-
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-    EXPECT_EQ(false, valueProducer->mHasGlobalBase);
-}
-
-TEST(ValueMetricProducerTest, TestResetBaseOnPullFailBeforeConditionChange) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(tagId);
-                event->write(50);
-                event->init();
-                data->push_back(event);
-                return false;
-            }))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
-                event->write(tagId);
-                event->write(100);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    // Don't directly set mCondition; the real code never does that. Go through regular code path
-    // to avoid unexpected behaviors.
-    // valueProducer->mCondition = ConditionState::kTrue;
-    valueProducer->onConditionChanged(true, bucketStartTimeNs);
-
-    EXPECT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
-
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 1);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval& curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(false, valueProducer->mHasGlobalBase);
-}
-
-TEST(ValueMetricProducerTest, TestResetBaseOnPullDelayExceeded) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.set_condition(StringToId("SCREEN_ON"));
-    metric.set_max_pull_delay_sec(0);
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
-                event->write(tagId);
-                event->write(120);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->mCondition = ConditionState::kFalse;
-
-    // Max delay is set to 0 so pull will exceed max delay.
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 1);
-    EXPECT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
-}
-
-TEST(ValueMetricProducerTest, TestResetBaseOnPullTooLate) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
-
-    ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, tagId, bucket2StartTimeNs,
-                                      bucket2StartTimeNs, pullerManager);
-    valueProducer.mCondition = ConditionState::kFalse;
-
-    // Event should be skipped since it is from previous bucket.
-    // Pull should not be called.
-    valueProducer.onConditionChanged(true, bucketStartTimeNs);
-    EXPECT_EQ(0UL, valueProducer.mCurrentSlicedBucket.size());
-}
-
-TEST(ValueMetricProducerTest, TestBaseSetOnConditionChange) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
-                event->write(tagId);
-                event->write(100);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->mCondition = ConditionState::kFalse;
-    valueProducer->mHasGlobalBase = false;
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 1);
-    valueProducer->mHasGlobalBase = true;
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval& curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(100, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
-}
-
-/*
- * Tests that a bucket is marked invalid when a condition change pull fails.
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenOneConditionFailed) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // First onConditionChanged
-            .WillOnce(Return(false))
-            // Second onConditionChanged
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
-                event->write(tagId);
-                event->write(130);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->mCondition = ConditionState::kTrue;
-
-    // Bucket start.
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
-    event->write(1);
-    event->write(110);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucketStartTimeNs);
-
-    // This will fail and should invalidate the whole bucket since we do not have all the data
-    // needed to compute the metric value when the screen was on.
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 2);
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 3);
-
-    // Bucket end.
-    allData.clear();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event2->write(1);
-    event2->write(140);
-    event2->init();
-    allData.push_back(event2);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    valueProducer->flushIfNeededLocked(bucket2StartTimeNs + 1);
-
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-    // Contains base from last pull which was successful.
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval& curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(140, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer->onDumpReport(bucket2StartTimeNs + 10, false /* include partial bucket */, true,
-                                FAST /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(0, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 2), dropEvent.drop_time_millis());
-}
-
-/*
- * Tests that a bucket is marked invalid when the guardrail is hit.
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenGuardRailHit) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.mutable_dimensions_in_what()->set_field(tagId);
-    metric.mutable_dimensions_in_what()->add_child()->set_field(1);
-    metric.set_condition(StringToId("SCREEN_ON"));
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // First onConditionChanged
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                for (int i = 0; i < 2000; i++) {
-                    shared_ptr<LogEvent> event =
-                            make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
-                    event->write(i);
-                    event->write(i);
-                    event->init();
-                    data->push_back(event);
-                }
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-    valueProducer->mCondition = ConditionState::kFalse;
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 2);
-    EXPECT_EQ(true, valueProducer->mCurrentBucketIsInvalid);
-    EXPECT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
-    EXPECT_EQ(0UL, valueProducer->mSkippedBuckets.size());
-
-    // Bucket 2 start.
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(1);
-    event->write(10);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    // First bucket added to mSkippedBuckets after flush.
-    EXPECT_EQ(1UL, valueProducer->mSkippedBuckets.size());
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer->onDumpReport(bucket2StartTimeNs + 10000, false /* include recent buckets */,
-                                true, FAST /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(0, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::DIMENSION_GUARDRAIL_REACHED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 2), dropEvent.drop_time_millis());
-}
-
-/*
- * Tests that a bucket is marked invalid when the bucket's initial pull fails.
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenInitialPullFailed) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // First onConditionChanged
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
-                event->write(tagId);
-                event->write(120);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Second onConditionChanged
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
-                event->write(tagId);
-                event->write(130);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->mCondition = ConditionState::kTrue;
-
-    // Bucket start.
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
-    event->write(1);
-    event->write(110);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ false, bucketStartTimeNs);
-
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 2);
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 3);
-
-    // Bucket end.
-    allData.clear();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event2->write(1);
-    event2->write(140);
-    event2->init();
-    allData.push_back(event2);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    valueProducer->flushIfNeededLocked(bucket2StartTimeNs + 1);
-
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-    // Contains base from last pull which was successful.
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval& curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(140, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer->onDumpReport(bucket2StartTimeNs + 10000, false /* include recent buckets */,
-                                true, FAST /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(0, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 2), dropEvent.drop_time_millis());
-}
-
-/*
- * Tests that a bucket is marked invalid when the bucket's final pull fails
- * (i.e. failed pull on bucket boundary).
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenLastPullFailed) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // First onConditionChanged
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
-                event->write(tagId);
-                event->write(120);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Second onConditionChanged
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
-                event->write(tagId);
-                event->write(130);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->mCondition = ConditionState::kTrue;
-
-    // Bucket start.
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
-    event->write(1);
-    event->write(110);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucketStartTimeNs);
-
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 2);
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 3);
-
-    // Bucket end.
-    allData.clear();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event2->write(1);
-    event2->write(140);
-    event2->init();
-    allData.push_back(event2);
-    valueProducer->onDataPulled(allData, /** succeed */ false, bucket2StartTimeNs);
-
-    valueProducer->flushIfNeededLocked(bucket2StartTimeNs + 1);
-
-    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
-    // Last pull failed so base has been reset.
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval& curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(false, valueProducer->mHasGlobalBase);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer->onDumpReport(bucket2StartTimeNs + 10000, false /* include recent buckets */,
-                                true, FAST /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(0, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs), dropEvent.drop_time_millis());
-}
-
-TEST(ValueMetricProducerTest, TestEmptyDataResetsBase_onDataPulled) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Start bucket.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(tagId);
-                event->write(3);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    // Bucket 2 start.
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(tagId);
-    event->write(110);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-
-    // Bucket 3 empty.
-    allData.clear();
-    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
-    event2->init();
-    allData.push_back(event2);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
-    // Data has been trimmed.
-    EXPECT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-}
-
-TEST(ValueMetricProducerTest, TestEmptyDataResetsBase_onConditionChanged) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // First onConditionChanged
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(tagId);
-                event->write(3);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval& curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
-
-    // Empty pull.
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 10);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(false, valueProducer->mHasGlobalBase);
-}
-
-TEST(ValueMetricProducerTest, TestEmptyDataResetsBase_onBucketBoundary) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // First onConditionChanged
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(tagId);
-                event->write(1);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(tagId);
-                event->write(2);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(tagId);
-                event->write(5);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 11);
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 12);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval& curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(true, curInterval.hasValue);
-    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
-
-    // End of bucket
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    // Data is empty, base should be reset.
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-    EXPECT_EQ(5, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
-
-    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {1}, {bucketSizeNs - 12 + 1});
-}
-
-TEST(ValueMetricProducerTest, TestPartialResetOnBucketBoundaries) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.mutable_dimensions_in_what()->set_field(tagId);
-    metric.mutable_dimensions_in_what()->add_child()->set_field(1);
-    metric.set_condition(StringToId("SCREEN_ON"));
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // First onConditionChanged
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(tagId);
-                event->write(1);
-                event->write(1);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-
-    // End of bucket
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(2);
-    event->write(2);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    // Key 1 should be reset since in not present in the most pull.
-    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
-    auto iterator = valueProducer->mCurrentSlicedBucket.begin();
-    auto baseInfoIter = valueProducer->mCurrentBaseInfo.begin();
-    EXPECT_EQ(true, baseInfoIter->second[0].hasBase);
-    EXPECT_EQ(2, baseInfoIter->second[0].base.long_value);
-    EXPECT_EQ(false, iterator->second[0].hasValue);
-    iterator++;
-    baseInfoIter++;
-    EXPECT_EQ(false, baseInfoIter->second[0].hasBase);
-    EXPECT_EQ(1, baseInfoIter->second[0].base.long_value);
-    EXPECT_EQ(false, iterator->second[0].hasValue);
-
-    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
-}
-
-TEST(ValueMetricProducerTest, TestFullBucketResetWhenLastBucketInvalid) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Initialization.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs, 1));
-                return true;
-            }))
-            // notifyAppUpgrade.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(ValueMetricProducerTestHelper::createEvent(
-                        bucketStartTimeNs + bucketSizeNs / 2, 10));
-                return true;
-            }));
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-    ASSERT_EQ(0UL, valueProducer->mCurrentFullBucket.size());
-
-    valueProducer->notifyAppUpgrade(bucketStartTimeNs + bucketSizeNs / 2, "com.foo", 10000, 1);
-    ASSERT_EQ(1UL, valueProducer->mCurrentFullBucket.size());
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket3StartTimeNs + 1, 4));
-    valueProducer->onDataPulled(allData, /** fails */ false, bucket3StartTimeNs + 1);
-    ASSERT_EQ(0UL, valueProducer->mCurrentFullBucket.size());
-}
-
-TEST(ValueMetricProducerTest, TestBucketBoundariesOnConditionChange) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Second onConditionChanged.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(
-                        ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 10, 5));
-                return true;
-            }))
-            // Third onConditionChanged.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(
-                        ValueMetricProducerTestHelper::createEvent(bucket3StartTimeNs + 10, 7));
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-    valueProducer->mCondition = ConditionState::kUnknown;
-
-    valueProducer->onConditionChanged(false, bucketStartTimeNs);
-    ASSERT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
-
-    // End of first bucket
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 1, 4));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs + 1);
-    ASSERT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
-
-    valueProducer->onConditionChanged(true, bucket2StartTimeNs + 10);
-    ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    auto curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    auto curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curBaseInfo.hasBase);
-    EXPECT_EQ(5, curBaseInfo.base.long_value);
-    EXPECT_EQ(false, curInterval.hasValue);
-
-    valueProducer->onConditionChanged(false, bucket3StartTimeNs + 10);
-
-    // Bucket should have been completed.
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {2}, {bucketSizeNs - 10});
-}
-
-TEST(ValueMetricProducerTest, TestLateOnDataPulledWithoutDiff) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.set_use_diff(false);
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 30, 10));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucketStartTimeNs + 30);
-
-    allData.clear();
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs, 20));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    // Bucket should have been completed.
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {30}, {bucketSizeNs});
-}
-
-TEST(ValueMetricProducerTest, TestLateOnDataPulledWithDiff) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Initialization.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs, 1));
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 30, 10));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucketStartTimeNs + 30);
-
-    allData.clear();
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs, 20));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    // Bucket should have been completed.
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {19}, {bucketSizeNs});
-}
-
-TEST(ValueMetricProducerTest, TestBucketBoundariesOnAppUpgrade) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Initialization.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs, 1));
-                return true;
-            }))
-            // notifyAppUpgrade.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(
-                        ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 2, 10));
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    valueProducer->notifyAppUpgrade(bucket2StartTimeNs + 2, "com.foo", 10000, 1);
-
-    // Bucket should have been completed.
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {9}, {bucketSizeNs});
-}
-
-TEST(ValueMetricProducerTest, TestDataIsNotUpdatedWhenNoConditionChanged) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // First on condition changed.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs, 1));
-                return true;
-            }))
-            // Second on condition changed.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs, 3));
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 10);
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 10);
-
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    auto curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    auto curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(true, curInterval.hasValue);
-    EXPECT_EQ(2, curInterval.value.long_value);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 1, 10));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs + 1);
-
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {2}, {2});
-}
-
-// TODO: b/145705635 fix or delete this test
-TEST(ValueMetricProducerTest, TestBucketInvalidIfGlobalBaseIsNotSet) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // First condition change.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs, 1));
-                return true;
-            }))
-            // 2nd condition change.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs, 1));
-                return true;
-            }))
-            // 3rd condition change.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs, 1));
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-    valueProducer->onConditionChanged(true, bucket2StartTimeNs + 10);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 3, 10));
-    valueProducer->onDataPulled(allData, /** succeed */ false, bucketStartTimeNs + 3);
-
-    allData.clear();
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs, 20));
-    valueProducer->onDataPulled(allData, /** succeed */ false, bucket2StartTimeNs);
-
-    valueProducer->onConditionChanged(false, bucket2StartTimeNs + 8);
-    valueProducer->onConditionChanged(true, bucket2StartTimeNs + 10);
-
-    allData.clear();
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket3StartTimeNs, 30));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    // There was not global base available so all buckets are invalid.
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {}, {});
-}
-
-TEST(ValueMetricProducerTest, TestPullNeededFastDump) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
-
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Initial pull.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(tagId);
-                event->write(1);
-                event->write(1);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, tagId, bucketStartTimeNs,
-                                      bucketStartTimeNs, pullerManager);
-
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer.onDumpReport(bucketStartTimeNs + 10, true /* include recent buckets */, true,
-                               FAST, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    // Bucket is invalid since we did not pull when dump report was called.
-    EXPECT_EQ(0, report.value_metrics().data_size());
-}
-
-TEST(ValueMetricProducerTest, TestFastDumpWithoutCurrentBucket) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
-
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Initial pull.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(tagId);
-                event->write(1);
-                event->write(1);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, tagId, bucketStartTimeNs,
-                                      bucketStartTimeNs, pullerManager);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.clear();
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
-    event->write(tagId);
-    event->write(2);
-    event->write(2);
-    event->init();
-    allData.push_back(event);
-    valueProducer.onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer.onDumpReport(bucket4StartTimeNs, false /* include recent buckets */, true, FAST,
-                               &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    // Previous bucket is part of the report.
-    EXPECT_EQ(1, report.value_metrics().data_size());
-    EXPECT_EQ(0, report.value_metrics().data(0).bucket_info(0).bucket_num());
-}
-
-TEST(ValueMetricProducerTest, TestPullNeededNoTimeConstraints) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-
-    UidMap uidMap;
-    SimpleAtomMatcher atomMatcher;
-    atomMatcher.set_atom_id(tagId);
-    sp<EventMatcherWizard> eventMatcherWizard =
-            new EventMatcherWizard({new SimpleLogMatchingTracker(
-                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
-    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
-    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
-
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Initial pull.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(tagId);
-                event->write(1);
-                event->write(1);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-                event->write(tagId);
-                event->write(3);
-                event->write(3);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
-                                      eventMatcherWizard, tagId, bucketStartTimeNs,
-                                      bucketStartTimeNs, pullerManager);
-
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer.onDumpReport(bucketStartTimeNs + 10, true /* include recent buckets */, true,
-                               NO_TIME_CONSTRAINTS, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_EQ(1, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().data(0).bucket_info_size());
-    EXPECT_EQ(2, report.value_metrics().data(0).bucket_info(0).values(0).value_long());
-}
-
-TEST(ValueMetricProducerTest, TestPulledData_noDiff_withoutCondition) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
-    metric.set_use_diff(false);
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
-
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 10));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs + 30);
-
-    // Bucket should have been completed.
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {10}, {bucketSizeNs});
-}
-
-TEST(ValueMetricProducerTest, TestPulledData_noDiff_withMultipleConditionChanges) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-    metric.set_use_diff(false);
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // condition becomes true
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(
-                        ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 30, 10));
-                return true;
-            }))
-            // condition becomes false
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(
-                        ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 50, 20));
-                return true;
-            }));
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-    valueProducer->mCondition = ConditionState::kFalse;
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 50);
-    // has one slice
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    ValueMetricProducer::Interval curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-    EXPECT_EQ(true, curInterval.hasValue);
-    EXPECT_EQ(20, curInterval.value.long_value);
-
-    // Now the alarm is delivered. Condition is off though.
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 110));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {50 - 8});
-    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-    EXPECT_EQ(false, curInterval.hasValue);
-}
-
-TEST(ValueMetricProducerTest, TestPulledData_noDiff_bucketBoundaryTrue) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-    metric.set_use_diff(false);
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // condition becomes true
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(
-                        ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 30, 10));
-                return true;
-            }));
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-    valueProducer->mCondition = ConditionState::kFalse;
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
-
-    // Now the alarm is delivered. Condition is off though.
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 30));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {30}, {bucketSizeNs - 8});
-    ValueMetricProducer::Interval curInterval =
-            valueProducer->mCurrentSlicedBucket.begin()->second[0];
-    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
-    EXPECT_EQ(false, curBaseInfo.hasBase);
-    EXPECT_EQ(false, curInterval.hasValue);
-}
-
-TEST(ValueMetricProducerTest, TestPulledData_noDiff_bucketBoundaryFalse) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-    metric.set_use_diff(false);
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-    valueProducer->mCondition = ConditionState::kFalse;
-
-    // Now the alarm is delivered. Condition is off though.
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 30));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    // Condition was always false.
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {}, {});
-}
-
-TEST(ValueMetricProducerTest, TestPulledData_noDiff_withFailure) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-    metric.set_use_diff(false);
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // condition becomes true
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                data->push_back(
-                        ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 30, 10));
-                return true;
-            }))
-            .WillOnce(Return(false));
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-    valueProducer->mCondition = ConditionState::kFalse;
-
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 50);
-
-    // Now the alarm is delivered. Condition is off though.
-    vector<shared_ptr<LogEvent>> allData;
-    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 30));
-    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
-    // No buckets, we had a failure.
-    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {}, {});
-}
-
-/*
- * Test that DUMP_REPORT_REQUESTED dump reason is logged.
- *
- * For the bucket to be marked invalid during a dump report requested,
- * three things must be true:
- * - we want to include the current partial bucket
- * - we need a pull (metric is pulled and condition is true)
- * - the dump latency must be FAST
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenDumpReportRequested) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Condition change to true.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
-                event->write("field1");
-                event->write(10);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    // Condition change event.
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 20);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer->onDumpReport(bucketStartTimeNs + 40, true /* include recent buckets */, true,
-                                FAST /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(0, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 40),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::DUMP_REPORT_REQUESTED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 40), dropEvent.drop_time_millis());
-}
-
-/*
- * Test that EVENT_IN_WRONG_BUCKET dump reason is logged for a late condition
- * change event (i.e. the condition change occurs in the wrong bucket).
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenConditionEventWrongBucket) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Condition change to true.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 50);
-                event->write("field1");
-                event->write(10);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    // Condition change event.
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 50);
-
-    // Bucket boundary pull.
-    vector<shared_ptr<LogEvent>> allData;
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs);
-    event->write("field1");
-    event->write(15);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeeds */ true, bucket2StartTimeNs + 1);
-
-    // Late condition change event.
-    valueProducer->onConditionChanged(false, bucket2StartTimeNs - 100);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer->onDumpReport(bucket2StartTimeNs + 100, true /* include recent buckets */, true,
-                                NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(1, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs + 100),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::EVENT_IN_WRONG_BUCKET, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs - 100), dropEvent.drop_time_millis());
-}
-
-/*
- * Test that EVENT_IN_WRONG_BUCKET dump reason is logged for a late accumulate
- * event (i.e. the accumulate events call occurs in the wrong bucket).
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenAccumulateEventWrongBucket) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Condition change to true.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 50);
-                event->write("field1");
-                event->write(10);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Dump report requested.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 100);
-                event->write("field1");
-                event->write(15);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    // Condition change event.
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 50);
-
-    // Bucket boundary pull.
-    vector<shared_ptr<LogEvent>> allData;
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs);
-    event->write("field1");
-    event->write(15);
-    event->init();
-    allData.push_back(event);
-    valueProducer->onDataPulled(allData, /** succeeds */ true, bucket2StartTimeNs + 1);
-
-    allData.clear();
-    event = make_shared<LogEvent>(tagId, bucket2StartTimeNs - 100);
-    event->write("field1");
-    event->write(20);
-    event->init();
-    allData.push_back(event);
-
-    // Late accumulateEvents event.
-    valueProducer->accumulateEvents(allData, bucket2StartTimeNs - 100, bucket2StartTimeNs - 100);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer->onDumpReport(bucket2StartTimeNs + 100, true /* include recent buckets */, true,
-                                NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(1, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs + 100),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::EVENT_IN_WRONG_BUCKET, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs - 100), dropEvent.drop_time_millis());
-}
-
-/*
- * Test that CONDITION_UNKNOWN dump reason is logged due to an unknown condition
- * when a metric is initialized.
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenConditionUnknown) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Condition change to true.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 50);
-                event->write("field1");
-                event->write(10);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Dump report requested.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 100);
-                event->write("field1");
-                event->write(15);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithNoInitialCondition(pullerManager,
-                                                                                     metric);
-
-    // Condition change event.
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 50);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    int64_t dumpReportTimeNs = bucketStartTimeNs + 10000;
-    valueProducer->onDumpReport(dumpReportTimeNs, true /* include recent buckets */, true,
-                                NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(0, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(dumpReportTimeNs),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::CONDITION_UNKNOWN, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(dumpReportTimeNs), dropEvent.drop_time_millis());
-}
-
-/*
- * Test that PULL_FAILED dump reason is logged due to a pull failure in
- * #pullAndMatchEventsLocked.
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenPullFailed) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Condition change to true.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 50);
-                event->write("field1");
-                event->write(10);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Dump report requested, pull fails.
-            .WillOnce(Return(false));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    // Condition change event.
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 50);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    int64_t dumpReportTimeNs = bucketStartTimeNs + 10000;
-    valueProducer->onDumpReport(dumpReportTimeNs, true /* include recent buckets */, true,
-                                NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(0, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(dumpReportTimeNs),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(dumpReportTimeNs), dropEvent.drop_time_millis());
-}
-
-/*
- * Test that MULTIPLE_BUCKETS_SKIPPED dump reason is logged when a log event
- * skips over more than one bucket.
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenMultipleBucketsSkipped) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Condition change to true.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-                event->write("field1");
-                event->write(10);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Dump report requested.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event =
-                        make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1000);
-                event->write("field1");
-                event->write(15);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    // Condition change event.
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
-
-    // Condition change event that skips forward by three buckets.
-    valueProducer->onConditionChanged(false, bucket4StartTimeNs + 10);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer->onDumpReport(bucket4StartTimeNs + 1000, true /* include recent buckets */, true,
-                                NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(0, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::MULTIPLE_BUCKETS_SKIPPED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucket4StartTimeNs + 10), dropEvent.drop_time_millis());
-}
-
-/*
- * Test that BUCKET_TOO_SMALL dump reason is logged when a flushed bucket size
- * is smaller than the "min_bucket_size_nanos" specified in the metric config.
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestBucketDropWhenBucketTooSmall) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-    metric.set_min_bucket_size_nanos(10000000000);  // 10 seconds
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Condition change to true.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-                event->write("field1");
-                event->write(10);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Dump report requested.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event =
-                        make_shared<LogEvent>(tagId, bucketStartTimeNs + 9000000);
-                event->write("field1");
-                event->write(15);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
-
-    // Condition change event.
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    int64_t dumpReportTimeNs = bucketStartTimeNs + 9000000;
-    valueProducer->onDumpReport(dumpReportTimeNs, true /* include recent buckets */, true,
-                                NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(0, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(dumpReportTimeNs),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::BUCKET_TOO_SMALL, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(dumpReportTimeNs), dropEvent.drop_time_millis());
-}
-
-/*
- * Test multiple bucket drop events in the same bucket.
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestMultipleBucketDropEvents) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // Condition change to true.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-                event->write("field1");
-                event->write(10);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithNoInitialCondition(pullerManager,
-                                                                                     metric);
-
-    // Condition change event.
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    int64_t dumpReportTimeNs = bucketStartTimeNs + 1000;
-    valueProducer->onDumpReport(dumpReportTimeNs, true /* include recent buckets */, true,
-                                FAST /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(0, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(dumpReportTimeNs),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(2, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::CONDITION_UNKNOWN, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 10), dropEvent.drop_time_millis());
-
-    dropEvent = report.value_metrics().skipped(0).drop_event(1);
-    EXPECT_EQ(BucketDropReason::DUMP_REPORT_REQUESTED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(dumpReportTimeNs), dropEvent.drop_time_millis());
-}
-
-/*
- * Test that the number of logged bucket drop events is capped at the maximum.
- * The maximum is currently 10 and is set in MetricProducer::maxDropEventsReached().
- */
-TEST(ValueMetricProducerTest_BucketDrop, TestMaxBucketDropEvents) {
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // First condition change event.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                for (int i = 0; i < 2000; i++) {
-                    shared_ptr<LogEvent> event =
-                            make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
-                    event->write(i);
-                    event->write(i);
-                    event->init();
-                    data->push_back(event);
-                }
-                return true;
-            }))
-            .WillOnce(Return(false))
-            .WillOnce(Return(false))
-            .WillOnce(Return(false))
-            .WillOnce(Return(false))
-            .WillOnce(Return(false))
-            .WillOnce(Return(false))
-            .WillOnce(Return(false))
-            .WillOnce(Return(false))
-            .WillOnce(Return(false))
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 220);
-                event->write("field1");
-                event->write(10);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithNoInitialCondition(pullerManager,
-                                                                                     metric);
-
-    // First condition change event causes guardrail to be reached.
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
-
-    // 2-10 condition change events result in failed pulls.
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 30);
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 50);
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 70);
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 90);
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 100);
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 150);
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 170);
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 190);
-    valueProducer->onConditionChanged(false, bucketStartTimeNs + 200);
-
-    // Condition change event 11
-    valueProducer->onConditionChanged(true, bucketStartTimeNs + 220);
-
-    // Check dump report.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    int64_t dumpReportTimeNs = bucketStartTimeNs + 1000;
-    // Because we already have 10 dump events in the current bucket,
-    // this case should not be added to the list of dump events.
-    valueProducer->onDumpReport(bucketStartTimeNs + 1000, true /* include recent buckets */, true,
-                                FAST /* dumpLatency */, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(0, report.value_metrics().data_size());
-    EXPECT_EQ(1, report.value_metrics().skipped_size());
-
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
-              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
-    EXPECT_EQ(NanoToMillis(dumpReportTimeNs),
-              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
-    EXPECT_EQ(10, report.value_metrics().skipped(0).drop_event_size());
-
-    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
-    EXPECT_EQ(BucketDropReason::CONDITION_UNKNOWN, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 10), dropEvent.drop_time_millis());
-
-    dropEvent = report.value_metrics().skipped(0).drop_event(1);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 30), dropEvent.drop_time_millis());
-
-    dropEvent = report.value_metrics().skipped(0).drop_event(2);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 50), dropEvent.drop_time_millis());
-
-    dropEvent = report.value_metrics().skipped(0).drop_event(3);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 70), dropEvent.drop_time_millis());
-
-    dropEvent = report.value_metrics().skipped(0).drop_event(4);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 90), dropEvent.drop_time_millis());
-
-    dropEvent = report.value_metrics().skipped(0).drop_event(5);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 100), dropEvent.drop_time_millis());
-
-    dropEvent = report.value_metrics().skipped(0).drop_event(6);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 150), dropEvent.drop_time_millis());
-
-    dropEvent = report.value_metrics().skipped(0).drop_event(7);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 170), dropEvent.drop_time_millis());
-
-    dropEvent = report.value_metrics().skipped(0).drop_event(8);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 190), dropEvent.drop_time_millis());
-
-    dropEvent = report.value_metrics().skipped(0).drop_event(9);
-    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
-    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 200), dropEvent.drop_time_millis());
-}
-
-/*
- * Test metric with a simple sliced state
- * - Increasing values
- * - Using diff
- * - Second field is value field
- */
-TEST(ValueMetricProducerTest, TestSlicedState) {
-    // Set up ValueMetricProducer.
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithState("SCREEN_STATE");
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // ValueMetricProducer initialized.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write("field1");
-                event->write(3);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Screen state change to ON.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 5);
-                event->write("field1");
-                event->write(5);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Screen state change to OFF.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-                event->write("field1");
-                event->write(9);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Screen state change to ON.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 15);
-                event->write("field1");
-                event->write(21);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Dump report requested.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 50);
-                event->write("field1");
-                event->write(30);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithState(
-                    pullerManager, metric, {android::util::SCREEN_STATE_CHANGED}, {});
-
-    // Set up StateManager and check that StateTrackers are initialized.
-    StateManager::getInstance().clear();
-    StateManager::getInstance().registerListener(SCREEN_STATE_ATOM_ID, valueProducer);
-    EXPECT_EQ(1, StateManager::getInstance().getStateTrackersCount());
-    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(SCREEN_STATE_ATOM_ID));
-
-    // Bucket status after metric initialized.
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    // Base for dimension key {}
-    auto it = valueProducer->mCurrentSlicedBucket.begin();
-    auto itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(3, itBase->second[0].base.long_value);
-    // Value for dimension, state key {{}, kStateUnknown}
-    EXPECT_EQ(false, it->second[0].hasValue);
-
-    // Bucket status after screen state change kStateUnknown->ON.
-    auto screenEvent = CreateScreenStateChangedEvent(
-            android::view::DisplayStateEnum::DISPLAY_STATE_ON, bucketStartTimeNs + 5);
-    StateManager::getInstance().onLogEvent(*screenEvent);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    // Base for dimension key {}
-    it = valueProducer->mCurrentSlicedBucket.begin();
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(5, itBase->second[0].base.long_value);
-    // Value for dimension, state key {{}, kStateUnknown}
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(2, it->second[0].value.long_value);
-
-    // Bucket status after screen state change ON->OFF.
-    screenEvent = CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-                                                bucketStartTimeNs + 10);
-    StateManager::getInstance().onLogEvent(*screenEvent);
-    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
-    // Base for dimension key {}
-    it = valueProducer->mCurrentSlicedBucket.begin();
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(9, itBase->second[0].base.long_value);
-    // Value for dimension, state key {{}, ON}
-    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-              it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(4, it->second[0].value.long_value);
-    // Value for dimension, state key {{}, kStateUnknown}
-    it++;
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(2, it->second[0].value.long_value);
-
-    // Bucket status after screen state change OFF->ON.
-    screenEvent = CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-                                                bucketStartTimeNs + 15);
-    StateManager::getInstance().onLogEvent(*screenEvent);
-    EXPECT_EQ(3UL, valueProducer->mCurrentSlicedBucket.size());
-    // Base for dimension key {}
-    it = valueProducer->mCurrentSlicedBucket.begin();
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(21, itBase->second[0].base.long_value);
-    // Value for dimension, state key {{}, OFF}
-    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-              it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(12, it->second[0].value.long_value);
-    // Value for dimension, state key {{}, ON}
-    it++;
-    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-              it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(4, it->second[0].value.long_value);
-    // Value for dimension, state key {{}, kStateUnknown}
-    it++;
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(2, it->second[0].value.long_value);
-
-    // Start dump report and check output.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer->onDumpReport(bucketStartTimeNs + 50, true /* include recent buckets */, true,
-                                NO_TIME_CONSTRAINTS, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(3, report.value_metrics().data_size());
-
-    auto data = report.value_metrics().data(0);
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(2, report.value_metrics().data(0).bucket_info(0).values(0).value_long());
-
-    data = report.value_metrics().data(1);
-    EXPECT_EQ(1, report.value_metrics().data(1).bucket_info_size());
-    EXPECT_EQ(13, report.value_metrics().data(1).bucket_info(0).values(0).value_long());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON, data.slice_by_state(0).value());
-
-    data = report.value_metrics().data(2);
-    EXPECT_EQ(1, report.value_metrics().data(2).bucket_info_size());
-    EXPECT_EQ(12, report.value_metrics().data(2).bucket_info(0).values(0).value_long());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_OFF, data.slice_by_state(0).value());
-}
-
-/*
- * Test metric with sliced state with map
- * - Increasing values
- * - Using diff
- * - Second field is value field
- */
-TEST(ValueMetricProducerTest, TestSlicedStateWithMap) {
-    // Set up ValueMetricProducer.
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithState("SCREEN_STATE_ONOFF");
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // ValueMetricProducer initialized.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write("field1");
-                event->write(3);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Screen state change to ON.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 5);
-                event->write("field1");
-                event->write(5);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Screen state change to VR.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
-                event->write("field1");
-                event->write(9);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Screen state change to OFF.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 15);
-                event->write("field1");
-                event->write(21);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Dump report requested.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 50);
-                event->write("field1");
-                event->write(30);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    const StateMap& stateMap = CreateScreenStateOnOffMap();
-    const StateMap_StateGroup screenOnGroup = stateMap.group(0);
-    const StateMap_StateGroup screenOffGroup = stateMap.group(1);
-
-    unordered_map<int, unordered_map<int, int64_t>> stateGroupMap;
-    for (auto group : stateMap.group()) {
-        for (auto value : group.value()) {
-            stateGroupMap[SCREEN_STATE_ATOM_ID][value] = group.group_id();
-        }
-    }
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithState(
-                    pullerManager, metric, {android::util::SCREEN_STATE_CHANGED}, stateGroupMap);
-
-    // Set up StateManager and check that StateTrackers are initialized.
-    StateManager::getInstance().clear();
-    StateManager::getInstance().registerListener(SCREEN_STATE_ATOM_ID, valueProducer);
-    EXPECT_EQ(1, StateManager::getInstance().getStateTrackersCount());
-    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(SCREEN_STATE_ATOM_ID));
-
-    // Bucket status after metric initialized.
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    // Base for dimension key {}
-    auto it = valueProducer->mCurrentSlicedBucket.begin();
-    auto itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(3, itBase->second[0].base.long_value);
-    // Value for dimension, state key {{}, {}}
-    EXPECT_EQ(false, it->second[0].hasValue);
-
-    // Bucket status after screen state change kStateUnknown->ON.
-    auto screenEvent = CreateScreenStateChangedEvent(
-            android::view::DisplayStateEnum::DISPLAY_STATE_ON, bucketStartTimeNs + 5);
-    StateManager::getInstance().onLogEvent(*screenEvent);
-    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
-    // Base for dimension key {}
-    it = valueProducer->mCurrentSlicedBucket.begin();
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(5, itBase->second[0].base.long_value);
-    // Value for dimension, state key {{}, kStateUnknown}
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(2, it->second[0].value.long_value);
-
-    // Bucket status after screen state change ON->VR (also ON).
-    screenEvent = CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_VR,
-                                                bucketStartTimeNs + 10);
-    StateManager::getInstance().onLogEvent(*screenEvent);
-    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
-    // Base for dimension key {}
-    it = valueProducer->mCurrentSlicedBucket.begin();
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(9, itBase->second[0].base.long_value);
-    // Value for dimension, state key {{}, ON GROUP}
-    EXPECT_EQ(screenOnGroup.group_id(),
-              it->first.getStateValuesKey().getValues()[0].mValue.long_value);
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(4, it->second[0].value.long_value);
-    // Value for dimension, state key {{}, kStateUnknown}
-    it++;
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(2, it->second[0].value.long_value);
-
-    // Bucket status after screen state change VR->OFF.
-    screenEvent = CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
-                                                bucketStartTimeNs + 15);
-    StateManager::getInstance().onLogEvent(*screenEvent);
-    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
-    // Base for dimension key {}
-    it = valueProducer->mCurrentSlicedBucket.begin();
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(21, itBase->second[0].base.long_value);
-    // Value for dimension, state key {{}, ON GROUP}
-    EXPECT_EQ(screenOnGroup.group_id(),
-              it->first.getStateValuesKey().getValues()[0].mValue.long_value);
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(16, it->second[0].value.long_value);
-    // Value for dimension, state key {{}, kStateUnknown}
-    it++;
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(2, it->second[0].value.long_value);
-
-    // Start dump report and check output.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer->onDumpReport(bucketStartTimeNs + 50, true /* include recent buckets */, true,
-                                NO_TIME_CONSTRAINTS, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(3, report.value_metrics().data_size());
-
-    auto data = report.value_metrics().data(0);
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(2, report.value_metrics().data(0).bucket_info(0).values(0).value_long());
-
-    data = report.value_metrics().data(1);
-    EXPECT_EQ(1, report.value_metrics().data(1).bucket_info_size());
-    EXPECT_EQ(16, report.value_metrics().data(1).bucket_info(0).values(0).value_long());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
-    EXPECT_EQ(screenOnGroup.group_id(), data.slice_by_state(0).group_id());
-
-    data = report.value_metrics().data(2);
-    EXPECT_EQ(1, report.value_metrics().data(2).bucket_info_size());
-    EXPECT_EQ(9, report.value_metrics().data(2).bucket_info(0).values(0).value_long());
-    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
-    EXPECT_EQ(screenOffGroup.group_id(), data.slice_by_state(0).group_id());
-}
-
-/*
- * Test metric that slices by state with a primary field and has dimensions
- * - Increasing values
- * - Using diff
- * - Second field is value field
- */
-TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) {
-    // Set up ValueMetricProducer.
-    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithState("UID_PROCESS_STATE");
-    metric.mutable_dimensions_in_what()->set_field(tagId);
-    metric.mutable_dimensions_in_what()->add_child()->set_field(1);
-
-    MetricStateLink* stateLink = metric.add_state_link();
-    stateLink->set_state_atom_id(UID_PROCESS_STATE_ATOM_ID);
-    auto fieldsInWhat = stateLink->mutable_fields_in_what();
-    *fieldsInWhat = CreateDimensions(tagId, {1 /* uid */});
-    auto fieldsInState = stateLink->mutable_fields_in_state();
-    *fieldsInState = CreateDimensions(UID_PROCESS_STATE_ATOM_ID, {1 /* uid */});
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(tagId, _))
-            // ValueMetricProducer initialized.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(2 /* uid */);
-                event->write(7);
-                event->init();
-                data->push_back(event);
-
-                event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
-                event->write(1 /* uid */);
-                event->write(3);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Uid 1 process state change from kStateUnknown -> Foreground
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
-                event->write(1 /* uid */);
-                event->write(6);
-                event->init();
-                data->push_back(event);
-
-                // This event should be skipped.
-                event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
-                event->write(2 /* uid */);
-                event->write(8);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Uid 2 process state change from kStateUnknown -> Background
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 40);
-                event->write(2 /* uid */);
-                event->write(9);
-                event->init();
-                data->push_back(event);
-
-                // This event should be skipped.
-                event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 40);
-                event->write(1 /* uid */);
-                event->write(12);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Uid 1 process state change from Foreground -> Background
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 20);
-                event->write(1 /* uid */);
-                event->write(13);
-                event->init();
-                data->push_back(event);
-
-                // This event should be skipped.
-                event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 20);
-                event->write(2 /* uid */);
-                event->write(11);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Uid 1 process state change from Background -> Foreground
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 40);
-                event->write(1 /* uid */);
-                event->write(17);
-                event->init();
-                data->push_back(event);
-
-                // This event should be skipped.
-                event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 40);
-                event->write(2 /* uid */);
-                event->write(15);
-                event->init();
-                data->push_back(event);
-                return true;
-            }))
-            // Dump report pull.
-            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 50);
-                event->write(2 /* uid */);
-                event->write(20);
-                event->init();
-                data->push_back(event);
-
-                event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 50);
-                event->write(1 /* uid */);
-                event->write(21);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    sp<ValueMetricProducer> valueProducer =
-            ValueMetricProducerTestHelper::createValueProducerWithState(
-                    pullerManager, metric, {UID_PROCESS_STATE_ATOM_ID}, {});
-
-    // Set up StateManager and check that StateTrackers are initialized.
-    StateManager::getInstance().clear();
-    StateManager::getInstance().registerListener(UID_PROCESS_STATE_ATOM_ID, valueProducer);
-    EXPECT_EQ(1, StateManager::getInstance().getStateTrackersCount());
-    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(UID_PROCESS_STATE_ATOM_ID));
-
-    // Bucket status after metric initialized.
-    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
-    // Base for dimension key {uid 1}.
-    auto it = valueProducer->mCurrentSlicedBucket.begin();
-    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    auto itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(3, itBase->second[0].base.long_value);
-    // Value for dimension, state key {{uid 1}, kStateUnknown}
-    // TODO(tsaichristine): test equality of state values key
-    // EXPECT_EQ(-1, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(false, it->second[0].hasValue);
-    // Base for dimension key {uid 2}
-    it++;
-    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(7, itBase->second[0].base.long_value);
-    // Value for dimension, state key {{uid 2}, kStateUnknown}
-    // EXPECT_EQ(-1, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(false, it->second[0].hasValue);
-
-    // Bucket status after uid 1 process state change kStateUnknown -> Foreground.
-    auto uidProcessEvent = CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, bucketStartTimeNs + 20);
-    StateManager::getInstance().onLogEvent(*uidProcessEvent);
-    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
-    // Base for dimension key {uid 1}.
-    it = valueProducer->mCurrentSlicedBucket.begin();
-    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(6, itBase->second[0].base.long_value);
-    // Value for key {uid 1, kStateUnknown}.
-    // EXPECT_EQ(-1, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(3, it->second[0].value.long_value);
-
-    // Base for dimension key {uid 2}
-    it++;
-    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(7, itBase->second[0].base.long_value);
-    // Value for key {uid 2, kStateUnknown}
-    EXPECT_EQ(false, it->second[0].hasValue);
-
-    // Bucket status after uid 2 process state change kStateUnknown -> Background.
-    uidProcessEvent = CreateUidProcessStateChangedEvent(
-            2 /* uid */, android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, bucketStartTimeNs + 40);
-    StateManager::getInstance().onLogEvent(*uidProcessEvent);
-    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
-    // Base for dimension key {uid 1}.
-    it = valueProducer->mCurrentSlicedBucket.begin();
-    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(6, itBase->second[0].base.long_value);
-    // Value for key {uid 1, kStateUnknown}.
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(3, it->second[0].value.long_value);
-
-    // Base for dimension key {uid 2}
-    it++;
-    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(9, itBase->second[0].base.long_value);
-    // Value for key {uid 2, kStateUnknown}
-    // EXPECT_EQ(-1, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(2, it->second[0].value.long_value);
-
-    // Pull at end of first bucket.
-    vector<shared_ptr<LogEvent>> allData;
-    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs);
-    event->write(1 /* uid */);
-    event->write(10);
-    event->init();
-    allData.push_back(event);
-
-    event = make_shared<LogEvent>(tagId, bucket2StartTimeNs);
-    event->write(2 /* uid */);
-    event->write(15);
-    event->init();
-    allData.push_back(event);
-
-    valueProducer->onDataPulled(allData, /** succeeds */ true, bucket2StartTimeNs + 1);
-
-    // Buckets flushed after end of first bucket.
-    // None of the buckets should have a value.
-    EXPECT_EQ(4UL, valueProducer->mCurrentSlicedBucket.size());
-    EXPECT_EQ(4UL, valueProducer->mPastBuckets.size());
-    EXPECT_EQ(2UL, valueProducer->mCurrentBaseInfo.size());
-    // Base for dimension key {uid 2}.
-    it = valueProducer->mCurrentSlicedBucket.begin();
-    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(15, itBase->second[0].base.long_value);
-    // Value for key {uid 2, BACKGROUND}.
-    EXPECT_EQ(1, it->first.getStateValuesKey().getValues().size());
-    EXPECT_EQ(1006, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(false, it->second[0].hasValue);
-
-    // Base for dimension key {uid 1}
-    it++;
-    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(10, itBase->second[0].base.long_value);
-    // Value for key {uid 1, kStateUnknown}
-    EXPECT_EQ(0, it->first.getStateValuesKey().getValues().size());
-    // EXPECT_EQ(-1, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(false, it->second[0].hasValue);
-
-    // Value for key {uid 1, FOREGROUND}
-    it++;
-    EXPECT_EQ(1, it->first.getStateValuesKey().getValues().size());
-    EXPECT_EQ(1005, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(false, it->second[0].hasValue);
-
-    // Value for key {uid 2, kStateUnknown}
-    it++;
-    EXPECT_EQ(false, it->second[0].hasValue);
-
-    // Bucket status after uid 1 process state change from Foreground -> Background.
-    uidProcessEvent = CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, bucket2StartTimeNs + 20);
-    StateManager::getInstance().onLogEvent(*uidProcessEvent);
-
-    EXPECT_EQ(4UL, valueProducer->mCurrentSlicedBucket.size());
-    EXPECT_EQ(4UL, valueProducer->mPastBuckets.size());
-    EXPECT_EQ(2UL, valueProducer->mCurrentBaseInfo.size());
-    // Base for dimension key {uid 2}.
-    it = valueProducer->mCurrentSlicedBucket.begin();
-    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(15, itBase->second[0].base.long_value);
-    // Value for key {uid 2, BACKGROUND}.
-    EXPECT_EQ(false, it->second[0].hasValue);
-    // Base for dimension key {uid 1}
-    it++;
-    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(13, itBase->second[0].base.long_value);
-    // Value for key {uid 1, kStateUnknown}
-    EXPECT_EQ(false, it->second[0].hasValue);
-    // Value for key {uid 1, FOREGROUND}
-    it++;
-    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    EXPECT_EQ(1005, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(3, it->second[0].value.long_value);
-    // Value for key {uid 2, kStateUnknown}
-    it++;
-    EXPECT_EQ(false, it->second[0].hasValue);
-
-    // Bucket status after uid 1 process state change Background->Foreground.
-    uidProcessEvent = CreateUidProcessStateChangedEvent(
-            1 /* uid */, android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, bucket2StartTimeNs + 40);
-    StateManager::getInstance().onLogEvent(*uidProcessEvent);
-
-    EXPECT_EQ(5UL, valueProducer->mCurrentSlicedBucket.size());
-    EXPECT_EQ(2UL, valueProducer->mCurrentBaseInfo.size());
-    // Base for dimension key {uid 2}
-    it = valueProducer->mCurrentSlicedBucket.begin();
-    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(true, itBase->second[0].hasBase);
-    EXPECT_EQ(15, itBase->second[0].base.long_value);
-    EXPECT_EQ(false, it->second[0].hasValue);
-
-    it++;
-    EXPECT_EQ(false, it->second[0].hasValue);
-
-    // Base for dimension key {uid 1}
-    it++;
-    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
-    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
-    EXPECT_EQ(17, itBase->second[0].base.long_value);
-    // Value for key {uid 1, BACKGROUND}
-    EXPECT_EQ(1006, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(4, it->second[0].value.long_value);
-    // Value for key {uid 1, FOREGROUND}
-    it++;
-    EXPECT_EQ(1005, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
-    EXPECT_EQ(true, it->second[0].hasValue);
-    EXPECT_EQ(3, it->second[0].value.long_value);
-
-    // Start dump report and check output.
-    ProtoOutputStream output;
-    std::set<string> strSet;
-    valueProducer->onDumpReport(bucket2StartTimeNs + 50, true /* include recent buckets */, true,
-                                NO_TIME_CONSTRAINTS, &strSet, &output);
-
-    StatsLogReport report = outputStreamToProto(&output);
-    EXPECT_TRUE(report.has_value_metrics());
-    EXPECT_EQ(5, report.value_metrics().data_size());
-
-    auto data = report.value_metrics().data(0);
-    EXPECT_EQ(1, data.bucket_info_size());
-    EXPECT_EQ(4, report.value_metrics().data(0).bucket_info(0).values(0).value_long());
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
-              data.slice_by_state(0).value());
-
-    data = report.value_metrics().data(1);
-    EXPECT_EQ(1, report.value_metrics().data(1).bucket_info_size());
-    EXPECT_EQ(2, report.value_metrics().data(1).bucket_info(0).values(0).value_long());
-
-    data = report.value_metrics().data(2);
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
-              data.slice_by_state(0).value());
-    EXPECT_EQ(2, report.value_metrics().data(2).bucket_info_size());
-    EXPECT_EQ(4, report.value_metrics().data(2).bucket_info(0).values(0).value_long());
-    EXPECT_EQ(7, report.value_metrics().data(2).bucket_info(1).values(0).value_long());
-
-    data = report.value_metrics().data(3);
-    EXPECT_EQ(1, report.value_metrics().data(3).bucket_info_size());
-    EXPECT_EQ(3, report.value_metrics().data(3).bucket_info(0).values(0).value_long());
-
-    data = report.value_metrics().data(4);
-    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
-    EXPECT_TRUE(data.slice_by_state(0).has_value());
-    EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
-              data.slice_by_state(0).value());
-    EXPECT_EQ(2, report.value_metrics().data(4).bucket_info_size());
-    EXPECT_EQ(6, report.value_metrics().data(4).bucket_info(0).values(0).value_long());
-    EXPECT_EQ(5, report.value_metrics().data(4).bucket_info(1).values(0).value_long());
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+//class ValueMetricProducerTestHelper {
+//
+// public:
+//    static shared_ptr<LogEvent> createEvent(int64_t eventTimeNs, int64_t value) {
+//        shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, eventTimeNs);
+//        event->write(tagId);
+//        event->write(value);
+//        event->write(value);
+//        event->init();
+//        return event;
+//    }
+//
+//    static sp<ValueMetricProducer> createValueProducerNoConditions(
+//            sp<MockStatsPullerManager>& pullerManager, ValueMetric& metric) {
+//        UidMap uidMap;
+//        SimpleAtomMatcher atomMatcher;
+//        atomMatcher.set_atom_id(tagId);
+//        sp<EventMatcherWizard> eventMatcherWizard =
+//                new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                        atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//        sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//        EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//        EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+//
+//        sp<ValueMetricProducer> valueProducer = new ValueMetricProducer(
+//                kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                logEventMatcherIndex, eventMatcherWizard, tagId,
+//                bucketStartTimeNs, bucketStartTimeNs, pullerManager);
+//        return valueProducer;
+//    }
+//
+//    static sp<ValueMetricProducer> createValueProducerWithCondition(
+//            sp<MockStatsPullerManager>& pullerManager, ValueMetric& metric) {
+//        UidMap uidMap;
+//        SimpleAtomMatcher atomMatcher;
+//        atomMatcher.set_atom_id(tagId);
+//        sp<EventMatcherWizard> eventMatcherWizard =
+//                new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                        atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//        sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//        EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//        EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+//
+//        sp<ValueMetricProducer> valueProducer =
+//                new ValueMetricProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex,
+//                                        eventMatcherWizard, tagId, bucketStartTimeNs,
+//                                        bucketStartTimeNs, pullerManager);
+//        valueProducer->mCondition = ConditionState::kFalse;
+//        return valueProducer;
+//    }
+//
+//    static sp<ValueMetricProducer> createValueProducerWithNoInitialCondition(
+//            sp<MockStatsPullerManager>& pullerManager, ValueMetric& metric) {
+//        UidMap uidMap;
+//        SimpleAtomMatcher atomMatcher;
+//        atomMatcher.set_atom_id(tagId);
+//        sp<EventMatcherWizard> eventMatcherWizard =
+//                new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                        atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//        sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//        EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//        EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+//
+//        sp<ValueMetricProducer> valueProducer = new ValueMetricProducer(
+//                kConfigKey, metric, 1, wizard, logEventMatcherIndex, eventMatcherWizard, tagId,
+//                bucketStartTimeNs, bucketStartTimeNs, pullerManager);
+//        return valueProducer;
+//    }
+//
+//    static sp<ValueMetricProducer> createValueProducerWithState(
+//            sp<MockStatsPullerManager>& pullerManager, ValueMetric& metric,
+//            vector<int32_t> slicedStateAtoms,
+//            unordered_map<int, unordered_map<int, int64_t>> stateGroupMap) {
+//        UidMap uidMap;
+//        SimpleAtomMatcher atomMatcher;
+//        atomMatcher.set_atom_id(tagId);
+//        sp<EventMatcherWizard> eventMatcherWizard =
+//                new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                        atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//        sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//        EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//        EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+//        sp<ValueMetricProducer> valueProducer = new ValueMetricProducer(
+//                kConfigKey, metric, -1 /* no condition */, wizard, logEventMatcherIndex,
+//                eventMatcherWizard, tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager, {},
+//                {}, slicedStateAtoms, stateGroupMap);
+//        return valueProducer;
+//    }
+//
+//    static ValueMetric createMetric() {
+//        ValueMetric metric;
+//        metric.set_id(metricId);
+//        metric.set_bucket(ONE_MINUTE);
+//        metric.mutable_value_field()->set_field(tagId);
+//        metric.mutable_value_field()->add_child()->set_field(2);
+//        metric.set_max_pull_delay_sec(INT_MAX);
+//        return metric;
+//    }
+//
+//    static ValueMetric createMetricWithCondition() {
+//        ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//        metric.set_condition(StringToId("SCREEN_ON"));
+//        return metric;
+//    }
+//
+//    static ValueMetric createMetricWithState(string state) {
+//        ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//        metric.add_slice_by_state(StringToId(state));
+//        return metric;
+//    }
+//};
+//
+///*
+// * Tests that the first bucket works correctly
+// */
+//TEST(ValueMetricProducerTest, TestCalcPreviousBucketEndTime) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    int64_t startTimeBase = 11;
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//
+//    // statsd started long ago.
+//    // The metric starts in the middle of the bucket
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard, -1, startTimeBase,
+//                                      22, pullerManager);
+//
+//    EXPECT_EQ(startTimeBase, valueProducer.calcPreviousBucketEndTime(60 * NS_PER_SEC + 10));
+//    EXPECT_EQ(startTimeBase, valueProducer.calcPreviousBucketEndTime(60 * NS_PER_SEC + 10));
+//    EXPECT_EQ(60 * NS_PER_SEC + startTimeBase,
+//              valueProducer.calcPreviousBucketEndTime(2 * 60 * NS_PER_SEC));
+//    EXPECT_EQ(2 * 60 * NS_PER_SEC + startTimeBase,
+//              valueProducer.calcPreviousBucketEndTime(3 * 60 * NS_PER_SEC));
+//}
+//
+///*
+// * Tests that the first bucket works correctly
+// */
+//TEST(ValueMetricProducerTest, TestFirstBucket) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//
+//    // statsd started long ago.
+//    // The metric starts in the middle of the bucket
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard, -1, 5,
+//                                      600 * NS_PER_SEC + NS_PER_SEC / 2, pullerManager);
+//
+//    EXPECT_EQ(600500000000, valueProducer.mCurrentBucketStartTimeNs);
+//    EXPECT_EQ(10, valueProducer.mCurrentBucketNum);
+//    EXPECT_EQ(660000000005, valueProducer.getCurrentBucketEndTimeNs());
+//}
+//
+///*
+// * Tests pulled atoms with no conditions
+// */
+//TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(tagId);
+//                event->write(3);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(11);
+//    event->init();
+//    allData.push_back(event);
+//
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(11, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(8, curInterval.value.long_value);
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//    EXPECT_EQ(8, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
+//
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(23);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(23, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(12, curInterval.value.long_value);
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//    EXPECT_EQ(2UL, valueProducer->mPastBuckets.begin()->second.size());
+//    EXPECT_EQ(8, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
+//    EXPECT_EQ(12, valueProducer->mPastBuckets.begin()->second.back().values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second.back().mConditionTrueNs);
+//
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(36);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(36, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(13, curInterval.value.long_value);
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//    EXPECT_EQ(3UL, valueProducer->mPastBuckets.begin()->second.size());
+//    EXPECT_EQ(8, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
+//    EXPECT_EQ(12, valueProducer->mPastBuckets.begin()->second[1].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[1].mConditionTrueNs);
+//    EXPECT_EQ(13, valueProducer->mPastBuckets.begin()->second[2].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[2].mConditionTrueNs);
+//}
+//
+//TEST(ValueMetricProducerTest, TestPartialBucketCreated) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Initialize bucket.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+//                event->write(tagId);
+//                event->write(1);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Partial bucket.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 10);
+//                event->write(tagId);
+//                event->write(5);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    // First bucket ends.
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 10);
+//    event->write(tagId);
+//    event->write(2);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** success */ true, bucket2StartTimeNs);
+//
+//    // Partial buckets created in 2nd bucket.
+//    valueProducer->notifyAppUpgrade(bucket2StartTimeNs + 2, "com.foo", 10000, 1);
+//
+//    // One full bucket and one partial bucket.
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//    vector<ValueBucket> buckets = valueProducer->mPastBuckets.begin()->second;
+//    EXPECT_EQ(2UL, buckets.size());
+//    // Full bucket (2 - 1)
+//    EXPECT_EQ(1, buckets[0].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, buckets[0].mConditionTrueNs);
+//    // Full bucket (5 - 3)
+//    EXPECT_EQ(3, buckets[1].values[0].long_value);
+//    // partial bucket [bucket2StartTimeNs, bucket2StartTimeNs + 2]
+//    EXPECT_EQ(2, buckets[1].mConditionTrueNs);
+//}
+//
+///*
+// * Tests pulled atoms with filtering
+// */
+//TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    auto keyValue = atomMatcher.add_field_value_matcher();
+//    keyValue->set_field(1);
+//    keyValue->set_eq_int(3);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(3);
+//                event->write(3);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer = new ValueMetricProducer(
+//            kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, logEventMatcherIndex,
+//            eventMatcherWizard, tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(3);
+//    event->write(11);
+//    event->init();
+//    allData.push_back(event);
+//
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(11, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(8, curInterval.value.long_value);
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//    EXPECT_EQ(8, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
+//
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
+//    event->write(4);
+//    event->write(23);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
+//    // No new data seen, so data has been cleared.
+//    EXPECT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
+//
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(11, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(8, curInterval.value.long_value);
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//    EXPECT_EQ(8, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
+//
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
+//    event->write(3);
+//    event->write(36);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//
+//    // the base was reset
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(36, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.begin()->second.size());
+//    EXPECT_EQ(8, valueProducer->mPastBuckets.begin()->second.back().values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second.back().mConditionTrueNs);
+//}
+//
+///*
+// * Tests pulled atoms with no conditions and take absolute value after reset
+// */
+//TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.set_use_absolute_value_on_reset(true);
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _)).WillOnce(Return(true));
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(11);
+//    event->init();
+//    allData.push_back(event);
+//
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(11, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(10);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(10, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(10, curInterval.value.long_value);
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//    EXPECT_EQ(10, valueProducer->mPastBuckets.begin()->second.back().values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second.back().mConditionTrueNs);
+//
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(36);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(36, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(26, curInterval.value.long_value);
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//    EXPECT_EQ(2UL, valueProducer->mPastBuckets.begin()->second.size());
+//    EXPECT_EQ(10, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
+//    EXPECT_EQ(26, valueProducer->mPastBuckets.begin()->second[1].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[1].mConditionTrueNs);
+//}
+//
+///*
+// * Tests pulled atoms with no conditions and take zero value after reset
+// */
+//TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _)).WillOnce(Return(false));
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(11);
+//    event->init();
+//    allData.push_back(event);
+//
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(11, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(10);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(10, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(36);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(36, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(26, curInterval.value.long_value);
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//    EXPECT_EQ(26, valueProducer->mPastBuckets.begin()->second[0].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, valueProducer->mPastBuckets.begin()->second[0].mConditionTrueNs);
+//}
+//
+///*
+// * Test pulled event with non sliced condition.
+// */
+//TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+//                event->write(tagId);
+//                event->write(100);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//                event->write(tagId);
+//                event->write(130);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
+//                event->write(tagId);
+//                event->write(180);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    // startUpdated:false sum:0 start:100
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(100, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(1);
+//    event->write(110);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {10}, {bucketSizeNs - 8});
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(110, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(10, curInterval.value.long_value);
+//
+//    valueProducer->onConditionChanged(false, bucket2StartTimeNs + 1);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {10}, {bucketSizeNs - 8});
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curInterval.hasValue);
+//    EXPECT_EQ(20, curInterval.value.long_value);
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//
+//    valueProducer->onConditionChanged(true, bucket3StartTimeNs + 1);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {10, 20}, {bucketSizeNs - 8, 1});
+//}
+//
+//TEST(ValueMetricProducerTest, TestPushedEventsWithUpgrade) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//    event1->write(1);
+//    event1->write(10);
+//    event1->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//
+//    valueProducer.notifyAppUpgrade(bucketStartTimeNs + 150, "ANY.APP", 1, 1);
+//    EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(bucketStartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs);
+//
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 59 * NS_PER_SEC);
+//    event2->write(1);
+//    event2->write(10);
+//    event2->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
+//    EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(bucketStartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs);
+//
+//    // Next value should create a new bucket.
+//    shared_ptr<LogEvent> event3 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 65 * NS_PER_SEC);
+//    event3->write(1);
+//    event3->write(10);
+//    event3->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
+//    EXPECT_EQ(2UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, valueProducer.mCurrentBucketStartTimeNs);
+//}
+//
+//TEST(ValueMetricProducerTest, TestPulledValueWithUpgrade) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Return(true))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 149);
+//                event->write(tagId);
+//                event->write(120);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, tagId, bucketStartTimeNs,
+//                                      bucketStartTimeNs, pullerManager);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(100);
+//    event->init();
+//    allData.push_back(event);
+//
+//    valueProducer.onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//
+//    valueProducer.notifyAppUpgrade(bucket2StartTimeNs + 150, "ANY.APP", 1, 1);
+//    EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(bucket2StartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs);
+//    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {20}, {150});
+//
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(150);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer.onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
+//    EXPECT_EQ(2UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(bucket3StartTimeNs, valueProducer.mCurrentBucketStartTimeNs);
+//    EXPECT_EQ(20L,
+//              valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].values[0].long_value);
+//    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {20, 30},
+//                                    {150, bucketSizeNs - 150});
+//}
+//
+//TEST(ValueMetricProducerTest, TestPulledWithAppUpgradeDisabled) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.set_split_bucket_for_app_upgrade(false);
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _)).WillOnce(Return(true));
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, tagId, bucketStartTimeNs,
+//                                      bucketStartTimeNs, pullerManager);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(100);
+//    event->init();
+//    allData.push_back(event);
+//
+//    valueProducer.onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//
+//    valueProducer.notifyAppUpgrade(bucket2StartTimeNs + 150, "ANY.APP", 1, 1);
+//    EXPECT_EQ(0UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(bucket2StartTimeNs, valueProducer.mCurrentBucketStartTimeNs);
+//}
+//
+//TEST(ValueMetricProducerTest, TestPulledValueWithUpgradeWhileConditionFalse) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+//                event->write(tagId);
+//                event->write(100);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs - 100);
+//                event->write(tagId);
+//                event->write(120);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 1);
+//
+//    valueProducer->onConditionChanged(false, bucket2StartTimeNs-100);
+//    EXPECT_FALSE(valueProducer->mCondition);
+//
+//    valueProducer->notifyAppUpgrade(bucket2StartTimeNs-50, "ANY.APP", 1, 1);
+//    // Expect one full buckets already done and starting a partial bucket.
+//    EXPECT_EQ(bucket2StartTimeNs-50, valueProducer->mCurrentBucketStartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
+//    EXPECT_EQ(bucketStartTimeNs,
+//              valueProducer->mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mBucketStartNs);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20},
+//                                    {(bucket2StartTimeNs - 100) - (bucketStartTimeNs + 1)});
+//    EXPECT_FALSE(valueProducer->mCondition);
+//}
+//
+//TEST(ValueMetricProducerTest, TestPushedEventsWithoutCondition) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//    event1->write(1);
+//    event1->write(10);
+//    event1->init();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
+//    event2->write(1);
+//    event2->write(20);
+//    event2->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(10, curInterval.value.long_value);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(30, curInterval.value.long_value);
+//
+//    valueProducer.flushIfNeededLocked(bucket2StartTimeNs);
+//    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {30}, {bucketSizeNs});
+//}
+//
+//TEST(ValueMetricProducerTest, TestPushedEventsWithCondition) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//
+//    ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//    valueProducer.mCondition = ConditionState::kFalse;
+//
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//    event1->write(1);
+//    event1->write(10);
+//    event1->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
+//    // has 1 slice
+//    EXPECT_EQ(0UL, valueProducer.mCurrentSlicedBucket.size());
+//
+//    valueProducer.onConditionChangedLocked(true, bucketStartTimeNs + 15);
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
+//    event2->write(1);
+//    event2->write(20);
+//    event2->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(20, curInterval.value.long_value);
+//
+//    shared_ptr<LogEvent> event3 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 30);
+//    event3->write(1);
+//    event3->write(30);
+//    event3->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(50, curInterval.value.long_value);
+//
+//    valueProducer.onConditionChangedLocked(false, bucketStartTimeNs + 35);
+//    shared_ptr<LogEvent> event4 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 40);
+//    event4->write(1);
+//    event4->write(40);
+//    event4->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event4);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(50, curInterval.value.long_value);
+//
+//    valueProducer.flushIfNeededLocked(bucket2StartTimeNs);
+//    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {50}, {20});
+//}
+//
+//TEST(ValueMetricProducerTest, TestAnomalyDetection) {
+//    sp<AlarmMonitor> alarmMonitor;
+//    Alert alert;
+//    alert.set_id(101);
+//    alert.set_metric_id(metricId);
+//    alert.set_trigger_if_sum_gt(130);
+//    alert.set_num_buckets(2);
+//    const int32_t refPeriodSec = 3;
+//    alert.set_refractory_period_secs(refPeriodSec);
+//
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard,
+//                                      logEventMatcherIndex, eventMatcherWizard, -1 /*not pulled*/,
+//                                      bucketStartTimeNs, bucketStartTimeNs, pullerManager);
+//
+//    sp<AnomalyTracker> anomalyTracker = valueProducer.addAnomalyTracker(alert, alarmMonitor);
+//
+//
+//    shared_ptr<LogEvent> event1
+//            = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1 * NS_PER_SEC);
+//    event1->write(161);
+//    event1->write(10); // value of interest
+//    event1->init();
+//    shared_ptr<LogEvent> event2
+//            = make_shared<LogEvent>(tagId, bucketStartTimeNs + 2 + NS_PER_SEC);
+//    event2->write(162);
+//    event2->write(20); // value of interest
+//    event2->init();
+//    shared_ptr<LogEvent> event3
+//            = make_shared<LogEvent>(tagId, bucketStartTimeNs + 2 * bucketSizeNs + 1 * NS_PER_SEC);
+//    event3->write(163);
+//    event3->write(130); // value of interest
+//    event3->init();
+//    shared_ptr<LogEvent> event4
+//            = make_shared<LogEvent>(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 1 * NS_PER_SEC);
+//    event4->write(35);
+//    event4->write(1); // value of interest
+//    event4->init();
+//    shared_ptr<LogEvent> event5
+//            = make_shared<LogEvent>(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 2 * NS_PER_SEC);
+//    event5->write(45);
+//    event5->write(150); // value of interest
+//    event5->init();
+//    shared_ptr<LogEvent> event6
+//            = make_shared<LogEvent>(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 10 * NS_PER_SEC);
+//    event6->write(25);
+//    event6->write(160); // value of interest
+//    event6->init();
+//
+//    // Two events in bucket #0.
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
+//    // Value sum == 30 <= 130.
+//    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY), 0U);
+//
+//    // One event in bucket #2. No alarm as bucket #0 is trashed out.
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
+//    // Value sum == 130 <= 130.
+//    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY), 0U);
+//
+//    // Three events in bucket #3.
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event4);
+//    // Anomaly at event 4 since Value sum == 131 > 130!
+//    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
+//            std::ceil(1.0 * event4->GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec));
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event5);
+//    // Event 5 is within 3 sec refractory period. Thus last alarm timestamp is still event4.
+//    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
+//            std::ceil(1.0 * event4->GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec));
+//
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event6);
+//    // Anomaly at event 6 since Value sum == 160 > 130 and after refractory period.
+//    EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY),
+//            std::ceil(1.0 * event6->GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec));
+//}
+//
+//// Test value metric no condition, the pull on bucket boundary come in time and too late
+//TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _)).WillOnce(Return(true));
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    // pull 1
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(11);
+//    event->init();
+//    allData.push_back(event);
+//
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//
+//    // startUpdated:true sum:0 start:11
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(11, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//
+//    // pull 2 at correct time
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(23);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    // tartUpdated:false sum:12
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(23, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {12}, {bucketSizeNs});
+//
+//    // pull 3 come late.
+//    // The previous bucket gets closed with error. (Has start value 23, no ending)
+//    // Another bucket gets closed with error. (No start, but ending with 36)
+//    // The new bucket is back to normal.
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucket6StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(36);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket6StartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    // startUpdated:false sum:12
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(36, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {12}, {bucketSizeNs});
+//}
+//
+///*
+// * Test pulled event with non sliced condition. The pull on boundary come late because the alarm
+// * was delivered late.
+// */
+//TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // condition becomes true
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+//                event->write(tagId);
+//                event->write(100);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // condition becomes false
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//                event->write(tagId);
+//                event->write(120);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(100, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//
+//    // pull on bucket boundary come late, condition change happens before it
+//    valueProducer->onConditionChanged(false, bucket2StartTimeNs + 1);
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8});
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//
+//    // Now the alarm is delivered.
+//    // since the condition turned to off before this pull finish, it has no effect
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 110));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8});
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//}
+//
+///*
+// * Test pulled event with non sliced condition. The pull on boundary come late, after the condition
+// * change to false, and then true again. This is due to alarm delivered late.
+// */
+//TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // condition becomes true
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+//                event->write(tagId);
+//                event->write(100);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // condition becomes false
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//                event->write(tagId);
+//                event->write(120);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // condition becomes true again
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 25);
+//                event->write(tagId);
+//                event->write(130);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    // startUpdated:false sum:0 start:100
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(100, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//
+//    // pull on bucket boundary come late, condition change happens before it
+//    valueProducer->onConditionChanged(false, bucket2StartTimeNs + 1);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8});
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//
+//    // condition changed to true again, before the pull alarm is delivered
+//    valueProducer->onConditionChanged(true, bucket2StartTimeNs + 25);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8});
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(130, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//
+//    // Now the alarm is delivered, but it is considered late, the data will be used
+//    // for the new bucket since it was just pulled.
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 50, 140));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs + 50);
+//
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(140, curBaseInfo.base.long_value);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//    EXPECT_EQ(10, curInterval.value.long_value);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8});
+//
+//    allData.clear();
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket3StartTimeNs, 160));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20, 30},
+//                                    {bucketSizeNs - 8, bucketSizeNs - 24});
+//}
+//
+//TEST(ValueMetricProducerTest, TestPushedAggregateMin) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.set_aggregation_type(ValueMetric::MIN);
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//    event1->write(1);
+//    event1->write(10);
+//    event1->init();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
+//    event2->write(1);
+//    event2->write(20);
+//    event2->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(10, curInterval.value.long_value);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(10, curInterval.value.long_value);
+//
+//    valueProducer.flushIfNeededLocked(bucket2StartTimeNs);
+//    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {10}, {bucketSizeNs});
+//}
+//
+//TEST(ValueMetricProducerTest, TestPushedAggregateMax) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.set_aggregation_type(ValueMetric::MAX);
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//    event1->write(1);
+//    event1->write(10);
+//    event1->init();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
+//    event2->write(1);
+//    event2->write(20);
+//    event2->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(10, curInterval.value.long_value);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(20, curInterval.value.long_value);
+//
+//    valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
+//    /* EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); */
+//    /* EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); */
+//    /* EXPECT_EQ(20, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); */
+//}
+//
+//TEST(ValueMetricProducerTest, TestPushedAggregateAvg) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.set_aggregation_type(ValueMetric::AVG);
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//    event1->write(1);
+//    event1->write(10);
+//    event1->init();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
+//    event2->write(1);
+//    event2->write(15);
+//    event2->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval;
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(10, curInterval.value.long_value);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//    EXPECT_EQ(1, curInterval.sampleSize);
+//
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(25, curInterval.value.long_value);
+//    EXPECT_EQ(2, curInterval.sampleSize);
+//
+//    valueProducer.flushIfNeededLocked(bucket2StartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
+//    EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
+//
+//    EXPECT_TRUE(std::abs(valueProducer.mPastBuckets.begin()->second.back().values[0].double_value -
+//                         12.5) < epsilon);
+//}
+//
+//TEST(ValueMetricProducerTest, TestPushedAggregateSum) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.set_aggregation_type(ValueMetric::SUM);
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//    event1->write(1);
+//    event1->write(10);
+//    event1->init();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
+//    event2->write(1);
+//    event2->write(15);
+//    event2->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(10, curInterval.value.long_value);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(25, curInterval.value.long_value);
+//
+//    valueProducer.flushIfNeededLocked(bucket2StartTimeNs);
+//    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {25}, {bucketSizeNs});
+//}
+//
+//TEST(ValueMetricProducerTest, TestSkipZeroDiffOutput) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.set_aggregation_type(ValueMetric::MIN);
+//    metric.set_use_diff(true);
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//    event1->write(1);
+//    event1->write(10);
+//    event1->init();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 15);
+//    event2->write(1);
+//    event2->write(15);
+//    event2->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(10, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    EXPECT_EQ(true, curInterval.hasValue);
+//    EXPECT_EQ(5, curInterval.value.long_value);
+//
+//    // no change in data.
+//    shared_ptr<LogEvent> event3 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 10);
+//    event3->write(1);
+//    event3->write(15);
+//    event3->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(15, curBaseInfo.base.long_value);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//
+//    shared_ptr<LogEvent> event4 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 15);
+//    event4->write(1);
+//    event4->write(15);
+//    event4->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event4);
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(15, curBaseInfo.base.long_value);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//
+//    valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
+//    EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size());
+//    assertPastBucketValuesSingleKey(valueProducer.mPastBuckets, {5}, {bucketSizeNs});
+//}
+//
+//TEST(ValueMetricProducerTest, TestSkipZeroDiffOutputMultiValue) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.mutable_value_field()->add_child()->set_field(3);
+//    metric.set_aggregation_type(ValueMetric::MIN);
+//    metric.set_use_diff(true);
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
+//                                      pullerManager);
+//
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//    event1->write(1);
+//    event1->write(10);
+//    event1->write(20);
+//    event1->init();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucketStartTimeNs + 15);
+//    event2->write(1);
+//    event2->write(15);
+//    event2->write(22);
+//    event2->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(10, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[1];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(20, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curInterval.hasValue);
+//    EXPECT_EQ(5, curInterval.value.long_value);
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[1];
+//    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[1];
+//    EXPECT_EQ(true, curInterval.hasValue);
+//    EXPECT_EQ(2, curInterval.value.long_value);
+//
+//    // no change in first value field
+//    shared_ptr<LogEvent> event3 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 10);
+//    event3->write(1);
+//    event3->write(15);
+//    event3->write(25);
+//    event3->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3);
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
+//
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(15, curBaseInfo.base.long_value);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[1];
+//    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[1];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(25, curBaseInfo.base.long_value);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//
+//    shared_ptr<LogEvent> event4 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 15);
+//    event4->write(1);
+//    event4->write(15);
+//    event4->write(29);
+//    event4->init();
+//    valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event4);
+//    EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(15, curBaseInfo.base.long_value);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//    curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[1];
+//    curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[1];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(29, curBaseInfo.base.long_value);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//
+//    valueProducer.flushIfNeededLocked(bucket3StartTimeNs);
+//
+//    EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
+//    EXPECT_EQ(2UL, valueProducer.mPastBuckets.begin()->second.size());
+//    EXPECT_EQ(2UL, valueProducer.mPastBuckets.begin()->second[0].values.size());
+//    EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second[1].values.size());
+//
+//    EXPECT_EQ(bucketSizeNs, valueProducer.mPastBuckets.begin()->second[0].mConditionTrueNs);
+//    EXPECT_EQ(5, valueProducer.mPastBuckets.begin()->second[0].values[0].long_value);
+//    EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second[0].valueIndex[0]);
+//    EXPECT_EQ(2, valueProducer.mPastBuckets.begin()->second[0].values[1].long_value);
+//    EXPECT_EQ(1, valueProducer.mPastBuckets.begin()->second[0].valueIndex[1]);
+//
+//    EXPECT_EQ(bucketSizeNs, valueProducer.mPastBuckets.begin()->second[1].mConditionTrueNs);
+//    EXPECT_EQ(3, valueProducer.mPastBuckets.begin()->second[1].values[0].long_value);
+//    EXPECT_EQ(1, valueProducer.mPastBuckets.begin()->second[1].valueIndex[0]);
+//}
+//
+///*
+// * Tests zero default base.
+// */
+//TEST(ValueMetricProducerTest, TestUseZeroDefaultBase) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.mutable_dimensions_in_what()->set_field(tagId);
+//    metric.mutable_dimensions_in_what()->add_child()->set_field(1);
+//    metric.set_use_zero_default_base(true);
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(1);
+//                event->write(3);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    auto iter = valueProducer->mCurrentSlicedBucket.begin();
+//    auto& interval1 = iter->second[0];
+//    auto iterBase = valueProducer->mCurrentBaseInfo.begin();
+//    auto& baseInfo1 = iterBase->second[0];
+//    EXPECT_EQ(1, iter->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, baseInfo1.hasBase);
+//    EXPECT_EQ(3, baseInfo1.base.long_value);
+//    EXPECT_EQ(false, interval1.hasValue);
+//    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//    vector<shared_ptr<LogEvent>> allData;
+//
+//    allData.clear();
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event1->write(2);
+//    event1->write(4);
+//    event1->init();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event2->write(1);
+//    event2->write(11);
+//    event2->init();
+//    allData.push_back(event1);
+//    allData.push_back(event2);
+//
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
+//    EXPECT_EQ(true, baseInfo1.hasBase);
+//    EXPECT_EQ(11, baseInfo1.base.long_value);
+//    EXPECT_EQ(false, interval1.hasValue);
+//    EXPECT_EQ(8, interval1.value.long_value);
+//
+//    auto it = valueProducer->mCurrentSlicedBucket.begin();
+//    for (; it != valueProducer->mCurrentSlicedBucket.end(); it++) {
+//        if (it != iter) {
+//            break;
+//        }
+//    }
+//    auto itBase = valueProducer->mCurrentBaseInfo.begin();
+//    for (; itBase != valueProducer->mCurrentBaseInfo.end(); it++) {
+//        if (itBase != iterBase) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(it != iter);
+//    EXPECT_TRUE(itBase != iterBase);
+//    auto& interval2 = it->second[0];
+//    auto& baseInfo2 = itBase->second[0];
+//    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, baseInfo2.hasBase);
+//    EXPECT_EQ(4, baseInfo2.base.long_value);
+//    EXPECT_EQ(false, interval2.hasValue);
+//    EXPECT_EQ(4, interval2.value.long_value);
+//
+//    EXPECT_EQ(2UL, valueProducer->mPastBuckets.size());
+//    auto iterator = valueProducer->mPastBuckets.begin();
+//    EXPECT_EQ(bucketSizeNs, iterator->second[0].mConditionTrueNs);
+//    EXPECT_EQ(8, iterator->second[0].values[0].long_value);
+//    iterator++;
+//    EXPECT_EQ(bucketSizeNs, iterator->second[0].mConditionTrueNs);
+//    EXPECT_EQ(4, iterator->second[0].values[0].long_value);
+//}
+//
+///*
+// * Tests using zero default base with failed pull.
+// */
+//TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.mutable_dimensions_in_what()->set_field(tagId);
+//    metric.mutable_dimensions_in_what()->add_child()->set_field(1);
+//    metric.set_use_zero_default_base(true);
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(1);
+//                event->write(3);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    auto it = valueProducer->mCurrentSlicedBucket.begin();
+//    auto& interval1 = it->second[0];
+//    auto& baseInfo1 =
+//            valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat())->second[0];
+//    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, baseInfo1.hasBase);
+//    EXPECT_EQ(3, baseInfo1.base.long_value);
+//    EXPECT_EQ(false, interval1.hasValue);
+//    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//    vector<shared_ptr<LogEvent>> allData;
+//
+//    allData.clear();
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event1->write(2);
+//    event1->write(4);
+//    event1->init();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event2->write(1);
+//    event2->write(11);
+//    event2->init();
+//    allData.push_back(event1);
+//    allData.push_back(event2);
+//
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
+//    EXPECT_EQ(true, baseInfo1.hasBase);
+//    EXPECT_EQ(11, baseInfo1.base.long_value);
+//    EXPECT_EQ(false, interval1.hasValue);
+//    EXPECT_EQ(8, interval1.value.long_value);
+//
+//    auto it2 = valueProducer->mCurrentSlicedBucket.begin();
+//    for (; it2 != valueProducer->mCurrentSlicedBucket.end(); it2++) {
+//        if (it2 != it) {
+//            break;
+//        }
+//    }
+//    // auto itBase = valueProducer->mCurrentBaseInfo.begin();
+//    // for (; itBase != valueProducer->mCurrentBaseInfo.end(); it++) {
+//    //     if (itBase != iterBase) {
+//    //         break;
+//    //     }
+//    // }
+//    EXPECT_TRUE(it2 != it);
+//    // EXPECT_TRUE(itBase != iterBase);
+//    auto& interval2 = it2->second[0];
+//    auto& baseInfo2 =
+//            valueProducer->mCurrentBaseInfo.find(it2->first.getDimensionKeyInWhat())->second[0];
+//    EXPECT_EQ(2, it2->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, baseInfo2.hasBase);
+//    EXPECT_EQ(4, baseInfo2.base.long_value);
+//    EXPECT_EQ(false, interval2.hasValue);
+//    EXPECT_EQ(4, interval2.value.long_value);
+//    EXPECT_EQ(2UL, valueProducer->mPastBuckets.size());
+//
+//    // next pull somehow did not happen, skip to end of bucket 3
+//    allData.clear();
+//    event1 = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
+//    event1->write(2);
+//    event1->write(5);
+//    event1->init();
+//    allData.push_back(event1);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs);
+//
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    EXPECT_EQ(true, baseInfo2.hasBase);
+//    EXPECT_EQ(5, baseInfo2.base.long_value);
+//    EXPECT_EQ(false, interval2.hasValue);
+//    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
+//    EXPECT_EQ(2UL, valueProducer->mPastBuckets.size());
+//
+//    allData.clear();
+//    event1 = make_shared<LogEvent>(tagId, bucket5StartTimeNs + 1);
+//    event1->write(2);
+//    event1->write(13);
+//    event1->init();
+//    allData.push_back(event1);
+//    event2 = make_shared<LogEvent>(tagId, bucket5StartTimeNs + 1);
+//    event2->write(1);
+//    event2->write(5);
+//    event2->init();
+//    allData.push_back(event2);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket5StartTimeNs);
+//
+//    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
+//    it = valueProducer->mCurrentSlicedBucket.begin();
+//    it2 = std::next(valueProducer->mCurrentSlicedBucket.begin());
+//    interval1 = it->second[0];
+//    interval2 = it2->second[0];
+//    baseInfo1 = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat())->second[0];
+//    baseInfo2 = valueProducer->mCurrentBaseInfo.find(it2->first.getDimensionKeyInWhat())->second[0];
+//
+//    EXPECT_EQ(true, baseInfo1.hasBase);
+//    EXPECT_EQ(5, baseInfo1.base.long_value);
+//    EXPECT_EQ(false, interval1.hasValue);
+//    EXPECT_EQ(5, interval1.value.long_value);
+//    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
+//
+//    EXPECT_EQ(true, baseInfo2.hasBase);
+//    EXPECT_EQ(13, baseInfo2.base.long_value);
+//    EXPECT_EQ(false, interval2.hasValue);
+//    EXPECT_EQ(8, interval2.value.long_value);
+//
+//    EXPECT_EQ(2UL, valueProducer->mPastBuckets.size());
+//}
+//
+///*
+// * Tests trim unused dimension key if no new data is seen in an entire bucket.
+// */
+//TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.mutable_dimensions_in_what()->set_field(tagId);
+//    metric.mutable_dimensions_in_what()->add_child()->set_field(1);
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(1);
+//                event->write(3);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    auto iter = valueProducer->mCurrentSlicedBucket.begin();
+//    auto& interval1 = iter->second[0];
+//    auto iterBase = valueProducer->mCurrentBaseInfo.begin();
+//    auto& baseInfo1 = iterBase->second[0];
+//    EXPECT_EQ(1, iter->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, baseInfo1.hasBase);
+//    EXPECT_EQ(3, baseInfo1.base.long_value);
+//    EXPECT_EQ(false, interval1.hasValue);
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//    vector<shared_ptr<LogEvent>> allData;
+//
+//    allData.clear();
+//    shared_ptr<LogEvent> event1 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event1->write(2);
+//    event1->write(4);
+//    event1->init();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event2->write(1);
+//    event2->write(11);
+//    event2->init();
+//    allData.push_back(event1);
+//    allData.push_back(event2);
+//
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
+//    EXPECT_EQ(true, baseInfo1.hasBase);
+//    EXPECT_EQ(11, baseInfo1.base.long_value);
+//    EXPECT_EQ(false, interval1.hasValue);
+//    EXPECT_EQ(8, interval1.value.long_value);
+//    EXPECT_FALSE(interval1.seenNewData);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {8}, {bucketSizeNs});
+//
+//    auto it = valueProducer->mCurrentSlicedBucket.begin();
+//    for (; it != valueProducer->mCurrentSlicedBucket.end(); it++) {
+//        if (it != iter) {
+//            break;
+//        }
+//    }
+//    auto itBase = valueProducer->mCurrentBaseInfo.begin();
+//    for (; itBase != valueProducer->mCurrentBaseInfo.end(); it++) {
+//        if (itBase != iterBase) {
+//            break;
+//        }
+//    }
+//    EXPECT_TRUE(it != iter);
+//    EXPECT_TRUE(itBase != iterBase);
+//    auto& interval2 = it->second[0];
+//    auto& baseInfo2 = itBase->second[0];
+//    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, baseInfo2.hasBase);
+//    EXPECT_EQ(4, baseInfo2.base.long_value);
+//    EXPECT_EQ(false, interval2.hasValue);
+//    EXPECT_FALSE(interval2.seenNewData);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {8}, {bucketSizeNs});
+//
+//    // next pull somehow did not happen, skip to end of bucket 3
+//    allData.clear();
+//    event1 = make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1);
+//    event1->write(2);
+//    event1->write(5);
+//    event1->init();
+//    allData.push_back(event1);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs);
+//    // Only one interval left. One was trimmed.
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    interval2 = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    baseInfo2 = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, baseInfo2.hasBase);
+//    EXPECT_EQ(5, baseInfo2.base.long_value);
+//    EXPECT_EQ(false, interval2.hasValue);
+//    EXPECT_FALSE(interval2.seenNewData);
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {8}, {bucketSizeNs});
+//
+//    allData.clear();
+//    event1 = make_shared<LogEvent>(tagId, bucket5StartTimeNs + 1);
+//    event1->write(2);
+//    event1->write(14);
+//    event1->init();
+//    allData.push_back(event1);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket5StartTimeNs);
+//
+//    interval2 = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    baseInfo2 = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, baseInfo2.hasBase);
+//    EXPECT_EQ(14, baseInfo2.base.long_value);
+//    EXPECT_EQ(false, interval2.hasValue);
+//    EXPECT_FALSE(interval2.seenNewData);
+//    ASSERT_EQ(2UL, valueProducer->mPastBuckets.size());
+//    auto iterator = valueProducer->mPastBuckets.begin();
+//    EXPECT_EQ(9, iterator->second[0].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, iterator->second[0].mConditionTrueNs);
+//    iterator++;
+//    EXPECT_EQ(8, iterator->second[0].values[0].long_value);
+//    EXPECT_EQ(bucketSizeNs, iterator->second[0].mConditionTrueNs);
+//}
+//
+//TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange_EndOfBucket) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    // Used by onConditionChanged.
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+//                event->write(tagId);
+//                event->write(100);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval& curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo& curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(100, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    valueProducer->onDataPulled(allData, /** succeed */ false, bucket2StartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(false, valueProducer->mHasGlobalBase);
+//}
+//
+//TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+//                event->write(tagId);
+//                event->write(100);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Return(false));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval& curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo& curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(100, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 20);
+//
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//    EXPECT_EQ(false, valueProducer->mHasGlobalBase);
+//}
+//
+//TEST(ValueMetricProducerTest, TestResetBaseOnPullFailBeforeConditionChange) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(tagId);
+//                event->write(50);
+//                event->init();
+//                data->push_back(event);
+//                return false;
+//            }))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+//                event->write(tagId);
+//                event->write(100);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    // Don't directly set mCondition; the real code never does that. Go through regular code path
+//    // to avoid unexpected behaviors.
+//    // valueProducer->mCondition = ConditionState::kTrue;
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs);
+//
+//    EXPECT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
+//
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 1);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval& curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(false, valueProducer->mHasGlobalBase);
+//}
+//
+//TEST(ValueMetricProducerTest, TestResetBaseOnPullDelayExceeded) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.set_condition(StringToId("SCREEN_ON"));
+//    metric.set_max_pull_delay_sec(0);
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+//                event->write(tagId);
+//                event->write(120);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->mCondition = ConditionState::kFalse;
+//
+//    // Max delay is set to 0 so pull will exceed max delay.
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 1);
+//    EXPECT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
+//}
+//
+//TEST(ValueMetricProducerTest, TestResetBaseOnPullTooLate) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+//
+//    ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, tagId, bucket2StartTimeNs,
+//                                      bucket2StartTimeNs, pullerManager);
+//    valueProducer.mCondition = ConditionState::kFalse;
+//
+//    // Event should be skipped since it is from previous bucket.
+//    // Pull should not be called.
+//    valueProducer.onConditionChanged(true, bucketStartTimeNs);
+//    EXPECT_EQ(0UL, valueProducer.mCurrentSlicedBucket.size());
+//}
+//
+//TEST(ValueMetricProducerTest, TestBaseSetOnConditionChange) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+//                event->write(tagId);
+//                event->write(100);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->mCondition = ConditionState::kFalse;
+//    valueProducer->mHasGlobalBase = false;
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 1);
+//    valueProducer->mHasGlobalBase = true;
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval& curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(100, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
+//}
+//
+///*
+// * Tests that a bucket is marked invalid when a condition change pull fails.
+// */
+//TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenOneConditionFailed) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // First onConditionChanged
+//            .WillOnce(Return(false))
+//            // Second onConditionChanged
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+//                event->write(tagId);
+//                event->write(130);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->mCondition = ConditionState::kTrue;
+//
+//    // Bucket start.
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+//    event->write(1);
+//    event->write(110);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucketStartTimeNs);
+//
+//    // This will fail and should invalidate the whole bucket since we do not have all the data
+//    // needed to compute the metric value when the screen was on.
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 2);
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 3);
+//
+//    // Bucket end.
+//    allData.clear();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event2->write(1);
+//    event2->write(140);
+//    event2->init();
+//    allData.push_back(event2);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    valueProducer->flushIfNeededLocked(bucket2StartTimeNs + 1);
+//
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//    // Contains base from last pull which was successful.
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval& curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(140, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer->onDumpReport(bucket2StartTimeNs + 10, false /* include partial bucket */, true,
+//                                FAST /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(0, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 2), dropEvent.drop_time_millis());
+//}
+//
+///*
+// * Tests that a bucket is marked invalid when the guardrail is hit.
+// */
+//TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenGuardRailHit) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.mutable_dimensions_in_what()->set_field(tagId);
+//    metric.mutable_dimensions_in_what()->add_child()->set_field(1);
+//    metric.set_condition(StringToId("SCREEN_ON"));
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // First onConditionChanged
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                for (int i = 0; i < 2000; i++) {
+//                    shared_ptr<LogEvent> event =
+//                            make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+//                    event->write(i);
+//                    event->write(i);
+//                    event->init();
+//                    data->push_back(event);
+//                }
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//    valueProducer->mCondition = ConditionState::kFalse;
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 2);
+//    EXPECT_EQ(true, valueProducer->mCurrentBucketIsInvalid);
+//    EXPECT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
+//    EXPECT_EQ(0UL, valueProducer->mSkippedBuckets.size());
+//
+//    // Bucket 2 start.
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(1);
+//    event->write(10);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    // First bucket added to mSkippedBuckets after flush.
+//    EXPECT_EQ(1UL, valueProducer->mSkippedBuckets.size());
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer->onDumpReport(bucket2StartTimeNs + 10000, false /* include recent buckets */,
+//                                true, FAST /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(0, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::DIMENSION_GUARDRAIL_REACHED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 2), dropEvent.drop_time_millis());
+//}
+//
+///*
+// * Tests that a bucket is marked invalid when the bucket's initial pull fails.
+// */
+//TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenInitialPullFailed) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // First onConditionChanged
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+//                event->write(tagId);
+//                event->write(120);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Second onConditionChanged
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+//                event->write(tagId);
+//                event->write(130);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->mCondition = ConditionState::kTrue;
+//
+//    // Bucket start.
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+//    event->write(1);
+//    event->write(110);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ false, bucketStartTimeNs);
+//
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 2);
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 3);
+//
+//    // Bucket end.
+//    allData.clear();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event2->write(1);
+//    event2->write(140);
+//    event2->init();
+//    allData.push_back(event2);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    valueProducer->flushIfNeededLocked(bucket2StartTimeNs + 1);
+//
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//    // Contains base from last pull which was successful.
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval& curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(140, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer->onDumpReport(bucket2StartTimeNs + 10000, false /* include recent buckets */,
+//                                true, FAST /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(0, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 2), dropEvent.drop_time_millis());
+//}
+//
+///*
+// * Tests that a bucket is marked invalid when the bucket's final pull fails
+// * (i.e. failed pull on bucket boundary).
+// */
+//TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenLastPullFailed) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // First onConditionChanged
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+//                event->write(tagId);
+//                event->write(120);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Second onConditionChanged
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+//                event->write(tagId);
+//                event->write(130);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->mCondition = ConditionState::kTrue;
+//
+//    // Bucket start.
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+//    event->write(1);
+//    event->write(110);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucketStartTimeNs);
+//
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 2);
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 3);
+//
+//    // Bucket end.
+//    allData.clear();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event2->write(1);
+//    event2->write(140);
+//    event2->init();
+//    allData.push_back(event2);
+//    valueProducer->onDataPulled(allData, /** succeed */ false, bucket2StartTimeNs);
+//
+//    valueProducer->flushIfNeededLocked(bucket2StartTimeNs + 1);
+//
+//    EXPECT_EQ(0UL, valueProducer->mPastBuckets.size());
+//    // Last pull failed so base has been reset.
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval& curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(false, valueProducer->mHasGlobalBase);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer->onDumpReport(bucket2StartTimeNs + 10000, false /* include recent buckets */,
+//                                true, FAST /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(0, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs), dropEvent.drop_time_millis());
+//}
+//
+//TEST(ValueMetricProducerTest, TestEmptyDataResetsBase_onDataPulled) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Start bucket.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(tagId);
+//                event->write(3);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    // Bucket 2 start.
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(110);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//
+//    // Bucket 3 empty.
+//    allData.clear();
+//    shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket3StartTimeNs + 1);
+//    event2->init();
+//    allData.push_back(event2);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket3StartTimeNs);
+//    // Data has been trimmed.
+//    EXPECT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//}
+//
+//TEST(ValueMetricProducerTest, TestEmptyDataResetsBase_onConditionChanged) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // First onConditionChanged
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(tagId);
+//                event->write(3);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval& curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
+//
+//    // Empty pull.
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 10);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(false, valueProducer->mHasGlobalBase);
+//}
+//
+//TEST(ValueMetricProducerTest, TestEmptyDataResetsBase_onBucketBoundary) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // First onConditionChanged
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(tagId);
+//                event->write(1);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(tagId);
+//                event->write(2);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(tagId);
+//                event->write(5);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 11);
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 12);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval& curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
+//
+//    // End of bucket
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    // Data is empty, base should be reset.
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//    EXPECT_EQ(5, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
+//
+//    EXPECT_EQ(1UL, valueProducer->mPastBuckets.size());
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {1}, {bucketSizeNs - 12 + 1});
+//}
+//
+//TEST(ValueMetricProducerTest, TestPartialResetOnBucketBoundaries) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.mutable_dimensions_in_what()->set_field(tagId);
+//    metric.mutable_dimensions_in_what()->add_child()->set_field(1);
+//    metric.set_condition(StringToId("SCREEN_ON"));
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // First onConditionChanged
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(tagId);
+//                event->write(1);
+//                event->write(1);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//
+//    // End of bucket
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(2);
+//    event->write(2);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    // Key 1 should be reset since in not present in the most pull.
+//    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
+//    auto iterator = valueProducer->mCurrentSlicedBucket.begin();
+//    auto baseInfoIter = valueProducer->mCurrentBaseInfo.begin();
+//    EXPECT_EQ(true, baseInfoIter->second[0].hasBase);
+//    EXPECT_EQ(2, baseInfoIter->second[0].base.long_value);
+//    EXPECT_EQ(false, iterator->second[0].hasValue);
+//    iterator++;
+//    baseInfoIter++;
+//    EXPECT_EQ(false, baseInfoIter->second[0].hasBase);
+//    EXPECT_EQ(1, baseInfoIter->second[0].base.long_value);
+//    EXPECT_EQ(false, iterator->second[0].hasValue);
+//
+//    EXPECT_EQ(true, valueProducer->mHasGlobalBase);
+//}
+//
+//TEST(ValueMetricProducerTest, TestFullBucketResetWhenLastBucketInvalid) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Initialization.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs, 1));
+//                return true;
+//            }))
+//            // notifyAppUpgrade.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(ValueMetricProducerTestHelper::createEvent(
+//                        bucketStartTimeNs + bucketSizeNs / 2, 10));
+//                return true;
+//            }));
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//    ASSERT_EQ(0UL, valueProducer->mCurrentFullBucket.size());
+//
+//    valueProducer->notifyAppUpgrade(bucketStartTimeNs + bucketSizeNs / 2, "com.foo", 10000, 1);
+//    ASSERT_EQ(1UL, valueProducer->mCurrentFullBucket.size());
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket3StartTimeNs + 1, 4));
+//    valueProducer->onDataPulled(allData, /** fails */ false, bucket3StartTimeNs + 1);
+//    ASSERT_EQ(0UL, valueProducer->mCurrentFullBucket.size());
+//}
+//
+//TEST(ValueMetricProducerTest, TestBucketBoundariesOnConditionChange) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Second onConditionChanged.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(
+//                        ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 10, 5));
+//                return true;
+//            }))
+//            // Third onConditionChanged.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(
+//                        ValueMetricProducerTestHelper::createEvent(bucket3StartTimeNs + 10, 7));
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//    valueProducer->mCondition = ConditionState::kUnknown;
+//
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs);
+//    ASSERT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
+//
+//    // End of first bucket
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 1, 4));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs + 1);
+//    ASSERT_EQ(0UL, valueProducer->mCurrentSlicedBucket.size());
+//
+//    valueProducer->onConditionChanged(true, bucket2StartTimeNs + 10);
+//    ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    auto curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    auto curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curBaseInfo.hasBase);
+//    EXPECT_EQ(5, curBaseInfo.base.long_value);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//
+//    valueProducer->onConditionChanged(false, bucket3StartTimeNs + 10);
+//
+//    // Bucket should have been completed.
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {2}, {bucketSizeNs - 10});
+//}
+//
+//TEST(ValueMetricProducerTest, TestLateOnDataPulledWithoutDiff) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.set_use_diff(false);
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 30, 10));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucketStartTimeNs + 30);
+//
+//    allData.clear();
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs, 20));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    // Bucket should have been completed.
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {30}, {bucketSizeNs});
+//}
+//
+//TEST(ValueMetricProducerTest, TestLateOnDataPulledWithDiff) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Initialization.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs, 1));
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 30, 10));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucketStartTimeNs + 30);
+//
+//    allData.clear();
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs, 20));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    // Bucket should have been completed.
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {19}, {bucketSizeNs});
+//}
+//
+//TEST(ValueMetricProducerTest, TestBucketBoundariesOnAppUpgrade) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Initialization.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs, 1));
+//                return true;
+//            }))
+//            // notifyAppUpgrade.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(
+//                        ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 2, 10));
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    valueProducer->notifyAppUpgrade(bucket2StartTimeNs + 2, "com.foo", 10000, 1);
+//
+//    // Bucket should have been completed.
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {9}, {bucketSizeNs});
+//}
+//
+//TEST(ValueMetricProducerTest, TestDataIsNotUpdatedWhenNoConditionChanged) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // First on condition changed.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs, 1));
+//                return true;
+//            }))
+//            // Second on condition changed.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs, 3));
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 10);
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 10);
+//
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    auto curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    auto curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(true, curInterval.hasValue);
+//    EXPECT_EQ(2, curInterval.value.long_value);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 1, 10));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs + 1);
+//
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {2}, {2});
+//}
+//
+//// TODO: b/145705635 fix or delete this test
+//TEST(ValueMetricProducerTest, TestBucketInvalidIfGlobalBaseIsNotSet) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // First condition change.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs, 1));
+//                return true;
+//            }))
+//            // 2nd condition change.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs, 1));
+//                return true;
+//            }))
+//            // 3rd condition change.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs, 1));
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//    valueProducer->onConditionChanged(true, bucket2StartTimeNs + 10);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 3, 10));
+//    valueProducer->onDataPulled(allData, /** succeed */ false, bucketStartTimeNs + 3);
+//
+//    allData.clear();
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs, 20));
+//    valueProducer->onDataPulled(allData, /** succeed */ false, bucket2StartTimeNs);
+//
+//    valueProducer->onConditionChanged(false, bucket2StartTimeNs + 8);
+//    valueProducer->onConditionChanged(true, bucket2StartTimeNs + 10);
+//
+//    allData.clear();
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket3StartTimeNs, 30));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    // There was not global base available so all buckets are invalid.
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {}, {});
+//}
+//
+//TEST(ValueMetricProducerTest, TestPullNeededFastDump) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+//
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Initial pull.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(tagId);
+//                event->write(1);
+//                event->write(1);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, tagId, bucketStartTimeNs,
+//                                      bucketStartTimeNs, pullerManager);
+//
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer.onDumpReport(bucketStartTimeNs + 10, true /* include recent buckets */, true,
+//                               FAST, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    // Bucket is invalid since we did not pull when dump report was called.
+//    EXPECT_EQ(0, report.value_metrics().data_size());
+//}
+//
+//TEST(ValueMetricProducerTest, TestFastDumpWithoutCurrentBucket) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+//
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Initial pull.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(tagId);
+//                event->write(1);
+//                event->write(1);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, tagId, bucketStartTimeNs,
+//                                      bucketStartTimeNs, pullerManager);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.clear();
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+//    event->write(tagId);
+//    event->write(2);
+//    event->write(2);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer.onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer.onDumpReport(bucket4StartTimeNs, false /* include recent buckets */, true, FAST,
+//                               &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    // Previous bucket is part of the report.
+//    EXPECT_EQ(1, report.value_metrics().data_size());
+//    EXPECT_EQ(0, report.value_metrics().data(0).bucket_info(0).bucket_num());
+//}
+//
+//TEST(ValueMetricProducerTest, TestPullNeededNoTimeConstraints) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//
+//    UidMap uidMap;
+//    SimpleAtomMatcher atomMatcher;
+//    atomMatcher.set_atom_id(tagId);
+//    sp<EventMatcherWizard> eventMatcherWizard =
+//            new EventMatcherWizard({new SimpleLogMatchingTracker(
+//                    atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+//    sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+//    EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+//
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Initial pull.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(tagId);
+//                event->write(1);
+//                event->write(1);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//                event->write(tagId);
+//                event->write(3);
+//                event->write(3);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex,
+//                                      eventMatcherWizard, tagId, bucketStartTimeNs,
+//                                      bucketStartTimeNs, pullerManager);
+//
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer.onDumpReport(bucketStartTimeNs + 10, true /* include recent buckets */, true,
+//                               NO_TIME_CONSTRAINTS, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_EQ(1, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().data(0).bucket_info_size());
+//    EXPECT_EQ(2, report.value_metrics().data(0).bucket_info(0).values(0).value_long());
+//}
+//
+//TEST(ValueMetricProducerTest, TestPulledData_noDiff_withoutCondition) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetric();
+//    metric.set_use_diff(false);
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager, metric);
+//
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 10));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs + 30);
+//
+//    // Bucket should have been completed.
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {10}, {bucketSizeNs});
+//}
+//
+//TEST(ValueMetricProducerTest, TestPulledData_noDiff_withMultipleConditionChanges) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//    metric.set_use_diff(false);
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // condition becomes true
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(
+//                        ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 30, 10));
+//                return true;
+//            }))
+//            // condition becomes false
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(
+//                        ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 50, 20));
+//                return true;
+//            }));
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//    valueProducer->mCondition = ConditionState::kFalse;
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 50);
+//    // has one slice
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//    EXPECT_EQ(true, curInterval.hasValue);
+//    EXPECT_EQ(20, curInterval.value.long_value);
+//
+//    // Now the alarm is delivered. Condition is off though.
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 110));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {50 - 8});
+//    curInterval = valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//}
+//
+//TEST(ValueMetricProducerTest, TestPulledData_noDiff_bucketBoundaryTrue) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//    metric.set_use_diff(false);
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // condition becomes true
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(
+//                        ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 30, 10));
+//                return true;
+//            }));
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//    valueProducer->mCondition = ConditionState::kFalse;
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
+//
+//    // Now the alarm is delivered. Condition is off though.
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 30));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {30}, {bucketSizeNs - 8});
+//    ValueMetricProducer::Interval curInterval =
+//            valueProducer->mCurrentSlicedBucket.begin()->second[0];
+//    ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0];
+//    EXPECT_EQ(false, curBaseInfo.hasBase);
+//    EXPECT_EQ(false, curInterval.hasValue);
+//}
+//
+//TEST(ValueMetricProducerTest, TestPulledData_noDiff_bucketBoundaryFalse) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//    metric.set_use_diff(false);
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//    valueProducer->mCondition = ConditionState::kFalse;
+//
+//    // Now the alarm is delivered. Condition is off though.
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 30));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    // Condition was always false.
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {}, {});
+//}
+//
+//TEST(ValueMetricProducerTest, TestPulledData_noDiff_withFailure) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//    metric.set_use_diff(false);
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // condition becomes true
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                data->push_back(
+//                        ValueMetricProducerTestHelper::createEvent(bucketStartTimeNs + 30, 10));
+//                return true;
+//            }))
+//            .WillOnce(Return(false));
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//    valueProducer->mCondition = ConditionState::kFalse;
+//
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 8);
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 50);
+//
+//    // Now the alarm is delivered. Condition is off though.
+//    vector<shared_ptr<LogEvent>> allData;
+//    allData.push_back(ValueMetricProducerTestHelper::createEvent(bucket2StartTimeNs + 30, 30));
+//    valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
+//
+//    // No buckets, we had a failure.
+//    assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {}, {});
+//}
+//
+///*
+// * Test that DUMP_REPORT_REQUESTED dump reason is logged.
+// *
+// * For the bucket to be marked invalid during a dump report requested,
+// * three things must be true:
+// * - we want to include the current partial bucket
+// * - we need a pull (metric is pulled and condition is true)
+// * - the dump latency must be FAST
+// */
+//
+//TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenDumpReportRequested) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Condition change to true.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
+//                event->write("field1");
+//                event->write(10);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    // Condition change event.
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 20);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer->onDumpReport(bucketStartTimeNs + 40, true /* include recent buckets */, true,
+//                                FAST /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(0, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 40),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::DUMP_REPORT_REQUESTED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 40), dropEvent.drop_time_millis());
+//}
+//
+///*
+// * Test that EVENT_IN_WRONG_BUCKET dump reason is logged for a late condition
+// * change event (i.e. the condition change occurs in the wrong bucket).
+// */
+//TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenConditionEventWrongBucket) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Condition change to true.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 50);
+//                event->write("field1");
+//                event->write(10);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    // Condition change event.
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 50);
+//
+//    // Bucket boundary pull.
+//    vector<shared_ptr<LogEvent>> allData;
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs);
+//    event->write("field1");
+//    event->write(15);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeeds */ true, bucket2StartTimeNs + 1);
+//
+//    // Late condition change event.
+//    valueProducer->onConditionChanged(false, bucket2StartTimeNs - 100);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer->onDumpReport(bucket2StartTimeNs + 100, true /* include recent buckets */, true,
+//                                NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(1, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs + 100),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::EVENT_IN_WRONG_BUCKET, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs - 100), dropEvent.drop_time_millis());
+//}
+//
+///*
+// * Test that EVENT_IN_WRONG_BUCKET dump reason is logged for a late accumulate
+// * event (i.e. the accumulate events call occurs in the wrong bucket).
+// */
+//TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenAccumulateEventWrongBucket) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Condition change to true.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 50);
+//                event->write("field1");
+//                event->write(10);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Dump report requested.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 100);
+//                event->write("field1");
+//                event->write(15);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    // Condition change event.
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 50);
+//
+//    // Bucket boundary pull.
+//    vector<shared_ptr<LogEvent>> allData;
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs);
+//    event->write("field1");
+//    event->write(15);
+//    event->init();
+//    allData.push_back(event);
+//    valueProducer->onDataPulled(allData, /** succeeds */ true, bucket2StartTimeNs + 1);
+//
+//    allData.clear();
+//    event = make_shared<LogEvent>(tagId, bucket2StartTimeNs - 100);
+//    event->write("field1");
+//    event->write(20);
+//    event->init();
+//    allData.push_back(event);
+//
+//    // Late accumulateEvents event.
+//    valueProducer->accumulateEvents(allData, bucket2StartTimeNs - 100, bucket2StartTimeNs - 100);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer->onDumpReport(bucket2StartTimeNs + 100, true /* include recent buckets */, true,
+//                                NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(1, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs + 100),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::EVENT_IN_WRONG_BUCKET, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs - 100), dropEvent.drop_time_millis());
+//}
+//
+///*
+// * Test that CONDITION_UNKNOWN dump reason is logged due to an unknown condition
+// * when a metric is initialized.
+// */
+//TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenConditionUnknown) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Condition change to true.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 50);
+//                event->write("field1");
+//                event->write(10);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Dump report requested.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 100);
+//                event->write("field1");
+//                event->write(15);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithNoInitialCondition(pullerManager,
+//                                                                                     metric);
+//
+//    // Condition change event.
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 50);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    int64_t dumpReportTimeNs = bucketStartTimeNs + 10000;
+//    valueProducer->onDumpReport(dumpReportTimeNs, true /* include recent buckets */, true,
+//                                NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(0, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(dumpReportTimeNs),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::CONDITION_UNKNOWN, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(dumpReportTimeNs), dropEvent.drop_time_millis());
+//}
+//
+///*
+// * Test that PULL_FAILED dump reason is logged due to a pull failure in
+// * #pullAndMatchEventsLocked.
+// */
+//TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenPullFailed) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Condition change to true.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 50);
+//                event->write("field1");
+//                event->write(10);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Dump report requested, pull fails.
+//            .WillOnce(Return(false));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    // Condition change event.
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 50);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    int64_t dumpReportTimeNs = bucketStartTimeNs + 10000;
+//    valueProducer->onDumpReport(dumpReportTimeNs, true /* include recent buckets */, true,
+//                                NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(0, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(dumpReportTimeNs),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(dumpReportTimeNs), dropEvent.drop_time_millis());
+//}
+//
+///*
+// * Test that MULTIPLE_BUCKETS_SKIPPED dump reason is logged when a log event
+// * skips over more than one bucket.
+// */
+//TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenMultipleBucketsSkipped) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Condition change to true.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//                event->write("field1");
+//                event->write(10);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Dump report requested.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event =
+//                        make_shared<LogEvent>(tagId, bucket4StartTimeNs + 1000);
+//                event->write("field1");
+//                event->write(15);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    // Condition change event.
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
+//
+//    // Condition change event that skips forward by three buckets.
+//    valueProducer->onConditionChanged(false, bucket4StartTimeNs + 10);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer->onDumpReport(bucket4StartTimeNs + 1000, true /* include recent buckets */, true,
+//                                NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(0, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(bucket2StartTimeNs),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::MULTIPLE_BUCKETS_SKIPPED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucket4StartTimeNs + 10), dropEvent.drop_time_millis());
+//}
+//
+///*
+// * Test that BUCKET_TOO_SMALL dump reason is logged when a flushed bucket size
+// * is smaller than the "min_bucket_size_nanos" specified in the metric config.
+// */
+//TEST(ValueMetricProducerTest_BucketDrop, TestBucketDropWhenBucketTooSmall) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//    metric.set_min_bucket_size_nanos(10000000000);  // 10 seconds
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Condition change to true.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//                event->write("field1");
+//                event->write(10);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Dump report requested.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event =
+//                        make_shared<LogEvent>(tagId, bucketStartTimeNs + 9000000);
+//                event->write("field1");
+//                event->write(15);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithCondition(pullerManager, metric);
+//
+//    // Condition change event.
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    int64_t dumpReportTimeNs = bucketStartTimeNs + 9000000;
+//    valueProducer->onDumpReport(dumpReportTimeNs, true /* include recent buckets */, true,
+//                                NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(0, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(dumpReportTimeNs),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(1, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::BUCKET_TOO_SMALL, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(dumpReportTimeNs), dropEvent.drop_time_millis());
+//}
+//
+///*
+// * Test multiple bucket drop events in the same bucket.
+// */
+//TEST(ValueMetricProducerTest_BucketDrop, TestMultipleBucketDropEvents) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // Condition change to true.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//                event->write("field1");
+//                event->write(10);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithNoInitialCondition(pullerManager,
+//                                                                                     metric);
+//
+//    // Condition change event.
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    int64_t dumpReportTimeNs = bucketStartTimeNs + 1000;
+//    valueProducer->onDumpReport(dumpReportTimeNs, true /* include recent buckets */, true,
+//                                FAST /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(0, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(dumpReportTimeNs),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(2, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::CONDITION_UNKNOWN, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 10), dropEvent.drop_time_millis());
+//
+//    dropEvent = report.value_metrics().skipped(0).drop_event(1);
+//    EXPECT_EQ(BucketDropReason::DUMP_REPORT_REQUESTED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(dumpReportTimeNs), dropEvent.drop_time_millis());
+//}
+//
+///*
+// * Test that the number of logged bucket drop events is capped at the maximum.
+// * The maximum is currently 10 and is set in MetricProducer::maxDropEventsReached().
+// */
+//TEST(ValueMetricProducerTest_BucketDrop, TestMaxBucketDropEvents) {
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithCondition();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // First condition change event.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                for (int i = 0; i < 2000; i++) {
+//                    shared_ptr<LogEvent> event =
+//                            make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+//                    event->write(i);
+//                    event->write(i);
+//                    event->init();
+//                    data->push_back(event);
+//                }
+//                return true;
+//            }))
+//            .WillOnce(Return(false))
+//            .WillOnce(Return(false))
+//            .WillOnce(Return(false))
+//            .WillOnce(Return(false))
+//            .WillOnce(Return(false))
+//            .WillOnce(Return(false))
+//            .WillOnce(Return(false))
+//            .WillOnce(Return(false))
+//            .WillOnce(Return(false))
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 220);
+//                event->write("field1");
+//                event->write(10);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithNoInitialCondition(pullerManager,
+//                                                                                     metric);
+//
+//    // First condition change event causes guardrail to be reached.
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 10);
+//
+//    // 2-10 condition change events result in failed pulls.
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 30);
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 50);
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 70);
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 90);
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 100);
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 150);
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 170);
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 190);
+//    valueProducer->onConditionChanged(false, bucketStartTimeNs + 200);
+//
+//    // Condition change event 11
+//    valueProducer->onConditionChanged(true, bucketStartTimeNs + 220);
+//
+//    // Check dump report.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    int64_t dumpReportTimeNs = bucketStartTimeNs + 1000;
+//    // Because we already have 10 dump events in the current bucket,
+//    // this case should not be added to the list of dump events.
+//    valueProducer->onDumpReport(bucketStartTimeNs + 1000, true /* include recent buckets */, true,
+//                                FAST /* dumpLatency */, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(0, report.value_metrics().data_size());
+//    EXPECT_EQ(1, report.value_metrics().skipped_size());
+//
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs),
+//              report.value_metrics().skipped(0).start_bucket_elapsed_millis());
+//    EXPECT_EQ(NanoToMillis(dumpReportTimeNs),
+//              report.value_metrics().skipped(0).end_bucket_elapsed_millis());
+//    EXPECT_EQ(10, report.value_metrics().skipped(0).drop_event_size());
+//
+//    auto dropEvent = report.value_metrics().skipped(0).drop_event(0);
+//    EXPECT_EQ(BucketDropReason::CONDITION_UNKNOWN, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 10), dropEvent.drop_time_millis());
+//
+//    dropEvent = report.value_metrics().skipped(0).drop_event(1);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 30), dropEvent.drop_time_millis());
+//
+//    dropEvent = report.value_metrics().skipped(0).drop_event(2);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 50), dropEvent.drop_time_millis());
+//
+//    dropEvent = report.value_metrics().skipped(0).drop_event(3);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 70), dropEvent.drop_time_millis());
+//
+//    dropEvent = report.value_metrics().skipped(0).drop_event(4);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 90), dropEvent.drop_time_millis());
+//
+//    dropEvent = report.value_metrics().skipped(0).drop_event(5);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 100), dropEvent.drop_time_millis());
+//
+//    dropEvent = report.value_metrics().skipped(0).drop_event(6);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 150), dropEvent.drop_time_millis());
+//
+//    dropEvent = report.value_metrics().skipped(0).drop_event(7);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 170), dropEvent.drop_time_millis());
+//
+//    dropEvent = report.value_metrics().skipped(0).drop_event(8);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 190), dropEvent.drop_time_millis());
+//
+//    dropEvent = report.value_metrics().skipped(0).drop_event(9);
+//    EXPECT_EQ(BucketDropReason::PULL_FAILED, dropEvent.drop_reason());
+//    EXPECT_EQ(NanoToMillis(bucketStartTimeNs + 200), dropEvent.drop_time_millis());
+//}
+//
+///*
+// * Test metric with a simple sliced state
+// * - Increasing values
+// * - Using diff
+// * - Second field is value field
+// */
+//TEST(ValueMetricProducerTest, TestSlicedState) {
+//    // Set up ValueMetricProducer.
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithState("SCREEN_STATE");
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // ValueMetricProducer initialized.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write("field1");
+//                event->write(3);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Screen state change to ON.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 5);
+//                event->write("field1");
+//                event->write(5);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Screen state change to OFF.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//                event->write("field1");
+//                event->write(9);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Screen state change to ON.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 15);
+//                event->write("field1");
+//                event->write(21);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Dump report requested.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 50);
+//                event->write("field1");
+//                event->write(30);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithState(
+//                    pullerManager, metric, {android::util::SCREEN_STATE_CHANGED}, {});
+//
+//    // Set up StateManager and check that StateTrackers are initialized.
+//    StateManager::getInstance().clear();
+//    StateManager::getInstance().registerListener(SCREEN_STATE_ATOM_ID, valueProducer);
+//    EXPECT_EQ(1, StateManager::getInstance().getStateTrackersCount());
+//    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(SCREEN_STATE_ATOM_ID));
+//
+//    // Bucket status after metric initialized.
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    // Base for dimension key {}
+//    auto it = valueProducer->mCurrentSlicedBucket.begin();
+//    auto itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(3, itBase->second[0].base.long_value);
+//    // Value for dimension, state key {{}, kStateUnknown}
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//
+//    // Bucket status after screen state change kStateUnknown->ON.
+//    auto screenEvent = CreateScreenStateChangedEvent(
+//            android::view::DisplayStateEnum::DISPLAY_STATE_ON, bucketStartTimeNs + 5);
+//    StateManager::getInstance().onLogEvent(*screenEvent);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    // Base for dimension key {}
+//    it = valueProducer->mCurrentSlicedBucket.begin();
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(5, itBase->second[0].base.long_value);
+//    // Value for dimension, state key {{}, kStateUnknown}
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(2, it->second[0].value.long_value);
+//
+//    // Bucket status after screen state change ON->OFF.
+//    screenEvent = CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//                                                bucketStartTimeNs + 10);
+//    StateManager::getInstance().onLogEvent(*screenEvent);
+//    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
+//    // Base for dimension key {}
+//    it = valueProducer->mCurrentSlicedBucket.begin();
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(9, itBase->second[0].base.long_value);
+//    // Value for dimension, state key {{}, ON}
+//    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//              it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(4, it->second[0].value.long_value);
+//    // Value for dimension, state key {{}, kStateUnknown}
+//    it++;
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(2, it->second[0].value.long_value);
+//
+//    // Bucket status after screen state change OFF->ON.
+//    screenEvent = CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//                                                bucketStartTimeNs + 15);
+//    StateManager::getInstance().onLogEvent(*screenEvent);
+//    EXPECT_EQ(3UL, valueProducer->mCurrentSlicedBucket.size());
+//    // Base for dimension key {}
+//    it = valueProducer->mCurrentSlicedBucket.begin();
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(21, itBase->second[0].base.long_value);
+//    // Value for dimension, state key {{}, OFF}
+//    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//              it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(12, it->second[0].value.long_value);
+//    // Value for dimension, state key {{}, ON}
+//    it++;
+//    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//              it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(4, it->second[0].value.long_value);
+//    // Value for dimension, state key {{}, kStateUnknown}
+//    it++;
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(2, it->second[0].value.long_value);
+//
+//    // Start dump report and check output.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer->onDumpReport(bucketStartTimeNs + 50, true /* include recent buckets */, true,
+//                                NO_TIME_CONSTRAINTS, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(3, report.value_metrics().data_size());
+//
+//    auto data = report.value_metrics().data(0);
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(2, report.value_metrics().data(0).bucket_info(0).values(0).value_long());
+//
+//    data = report.value_metrics().data(1);
+//    EXPECT_EQ(1, report.value_metrics().data(1).bucket_info_size());
+//    EXPECT_EQ(13, report.value_metrics().data(1).bucket_info(0).values(0).value_long());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON, data.slice_by_state(0).value());
+//
+//    data = report.value_metrics().data(2);
+//    EXPECT_EQ(1, report.value_metrics().data(2).bucket_info_size());
+//    EXPECT_EQ(12, report.value_metrics().data(2).bucket_info(0).values(0).value_long());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_OFF, data.slice_by_state(0).value());
+//}
+//
+///*
+// * Test metric with sliced state with map
+// * - Increasing values
+// * - Using diff
+// * - Second field is value field
+// */
+//TEST(ValueMetricProducerTest, TestSlicedStateWithMap) {
+//    // Set up ValueMetricProducer.
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithState("SCREEN_STATE_ONOFF");
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // ValueMetricProducer initialized.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write("field1");
+//                event->write(3);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Screen state change to ON.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 5);
+//                event->write("field1");
+//                event->write(5);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Screen state change to VR.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 10);
+//                event->write("field1");
+//                event->write(9);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Screen state change to OFF.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 15);
+//                event->write("field1");
+//                event->write(21);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Dump report requested.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 50);
+//                event->write("field1");
+//                event->write(30);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    const StateMap& stateMap = CreateScreenStateOnOffMap();
+//    const StateMap_StateGroup screenOnGroup = stateMap.group(0);
+//    const StateMap_StateGroup screenOffGroup = stateMap.group(1);
+//
+//    unordered_map<int, unordered_map<int, int64_t>> stateGroupMap;
+//    for (auto group : stateMap.group()) {
+//        for (auto value : group.value()) {
+//            stateGroupMap[SCREEN_STATE_ATOM_ID][value] = group.group_id();
+//        }
+//    }
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithState(
+//                    pullerManager, metric, {android::util::SCREEN_STATE_CHANGED}, stateGroupMap);
+//
+//    // Set up StateManager and check that StateTrackers are initialized.
+//    StateManager::getInstance().clear();
+//    StateManager::getInstance().registerListener(SCREEN_STATE_ATOM_ID, valueProducer);
+//    EXPECT_EQ(1, StateManager::getInstance().getStateTrackersCount());
+//    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(SCREEN_STATE_ATOM_ID));
+//
+//    // Bucket status after metric initialized.
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    // Base for dimension key {}
+//    auto it = valueProducer->mCurrentSlicedBucket.begin();
+//    auto itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(3, itBase->second[0].base.long_value);
+//    // Value for dimension, state key {{}, {}}
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//
+//    // Bucket status after screen state change kStateUnknown->ON.
+//    auto screenEvent = CreateScreenStateChangedEvent(
+//            android::view::DisplayStateEnum::DISPLAY_STATE_ON, bucketStartTimeNs + 5);
+//    StateManager::getInstance().onLogEvent(*screenEvent);
+//    EXPECT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size());
+//    // Base for dimension key {}
+//    it = valueProducer->mCurrentSlicedBucket.begin();
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(5, itBase->second[0].base.long_value);
+//    // Value for dimension, state key {{}, kStateUnknown}
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(2, it->second[0].value.long_value);
+//
+//    // Bucket status after screen state change ON->VR (also ON).
+//    screenEvent = CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_VR,
+//                                                bucketStartTimeNs + 10);
+//    StateManager::getInstance().onLogEvent(*screenEvent);
+//    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
+//    // Base for dimension key {}
+//    it = valueProducer->mCurrentSlicedBucket.begin();
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(9, itBase->second[0].base.long_value);
+//    // Value for dimension, state key {{}, ON GROUP}
+//    EXPECT_EQ(screenOnGroup.group_id(),
+//              it->first.getStateValuesKey().getValues()[0].mValue.long_value);
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(4, it->second[0].value.long_value);
+//    // Value for dimension, state key {{}, kStateUnknown}
+//    it++;
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(2, it->second[0].value.long_value);
+//
+//    // Bucket status after screen state change VR->OFF.
+//    screenEvent = CreateScreenStateChangedEvent(android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+//                                                bucketStartTimeNs + 15);
+//    StateManager::getInstance().onLogEvent(*screenEvent);
+//    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
+//    // Base for dimension key {}
+//    it = valueProducer->mCurrentSlicedBucket.begin();
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(21, itBase->second[0].base.long_value);
+//    // Value for dimension, state key {{}, ON GROUP}
+//    EXPECT_EQ(screenOnGroup.group_id(),
+//              it->first.getStateValuesKey().getValues()[0].mValue.long_value);
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(16, it->second[0].value.long_value);
+//    // Value for dimension, state key {{}, kStateUnknown}
+//    it++;
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(2, it->second[0].value.long_value);
+//
+//    // Start dump report and check output.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer->onDumpReport(bucketStartTimeNs + 50, true /* include recent buckets */, true,
+//                                NO_TIME_CONSTRAINTS, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(3, report.value_metrics().data_size());
+//
+//    auto data = report.value_metrics().data(0);
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(2, report.value_metrics().data(0).bucket_info(0).values(0).value_long());
+//
+//    data = report.value_metrics().data(1);
+//    EXPECT_EQ(1, report.value_metrics().data(1).bucket_info_size());
+//    EXPECT_EQ(16, report.value_metrics().data(1).bucket_info(0).values(0).value_long());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
+//    EXPECT_EQ(screenOnGroup.group_id(), data.slice_by_state(0).group_id());
+//
+//    data = report.value_metrics().data(2);
+//    EXPECT_EQ(1, report.value_metrics().data(2).bucket_info_size());
+//    EXPECT_EQ(9, report.value_metrics().data(2).bucket_info(0).values(0).value_long());
+//    EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_group_id());
+//    EXPECT_EQ(screenOffGroup.group_id(), data.slice_by_state(0).group_id());
+//}
+//
+///*
+// * Test metric that slices by state with a primary field and has dimensions
+// * - Increasing values
+// * - Using diff
+// * - Second field is value field
+// */
+//TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) {
+//    // Set up ValueMetricProducer.
+//    ValueMetric metric = ValueMetricProducerTestHelper::createMetricWithState("UID_PROCESS_STATE");
+//    metric.mutable_dimensions_in_what()->set_field(tagId);
+//    metric.mutable_dimensions_in_what()->add_child()->set_field(1);
+//
+//    MetricStateLink* stateLink = metric.add_state_link();
+//    stateLink->set_state_atom_id(UID_PROCESS_STATE_ATOM_ID);
+//    auto fieldsInWhat = stateLink->mutable_fields_in_what();
+//    *fieldsInWhat = CreateDimensions(tagId, {1 /* uid */});
+//    auto fieldsInState = stateLink->mutable_fields_in_state();
+//    *fieldsInState = CreateDimensions(UID_PROCESS_STATE_ATOM_ID, {1 /* uid */});
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(tagId, _))
+//            // ValueMetricProducer initialized.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(2 /* uid */);
+//                event->write(7);
+//                event->init();
+//                data->push_back(event);
+//
+//                event = make_shared<LogEvent>(tagId, bucketStartTimeNs);
+//                event->write(1 /* uid */);
+//                event->write(3);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Uid 1 process state change from kStateUnknown -> Foreground
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
+//                event->write(1 /* uid */);
+//                event->write(6);
+//                event->init();
+//                data->push_back(event);
+//
+//                // This event should be skipped.
+//                event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 20);
+//                event->write(2 /* uid */);
+//                event->write(8);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Uid 2 process state change from kStateUnknown -> Background
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 40);
+//                event->write(2 /* uid */);
+//                event->write(9);
+//                event->init();
+//                data->push_back(event);
+//
+//                // This event should be skipped.
+//                event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 40);
+//                event->write(1 /* uid */);
+//                event->write(12);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Uid 1 process state change from Foreground -> Background
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 20);
+//                event->write(1 /* uid */);
+//                event->write(13);
+//                event->init();
+//                data->push_back(event);
+//
+//                // This event should be skipped.
+//                event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 20);
+//                event->write(2 /* uid */);
+//                event->write(11);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Uid 1 process state change from Background -> Foreground
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 40);
+//                event->write(1 /* uid */);
+//                event->write(17);
+//                event->init();
+//                data->push_back(event);
+//
+//                // This event should be skipped.
+//                event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 40);
+//                event->write(2 /* uid */);
+//                event->write(15);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }))
+//            // Dump report pull.
+//            .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 50);
+//                event->write(2 /* uid */);
+//                event->write(20);
+//                event->init();
+//                data->push_back(event);
+//
+//                event = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 50);
+//                event->write(1 /* uid */);
+//                event->write(21);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    sp<ValueMetricProducer> valueProducer =
+//            ValueMetricProducerTestHelper::createValueProducerWithState(
+//                    pullerManager, metric, {UID_PROCESS_STATE_ATOM_ID}, {});
+//
+//    // Set up StateManager and check that StateTrackers are initialized.
+//    StateManager::getInstance().clear();
+//    StateManager::getInstance().registerListener(UID_PROCESS_STATE_ATOM_ID, valueProducer);
+//    EXPECT_EQ(1, StateManager::getInstance().getStateTrackersCount());
+//    EXPECT_EQ(1, StateManager::getInstance().getListenersCount(UID_PROCESS_STATE_ATOM_ID));
+//
+//    // Bucket status after metric initialized.
+//    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
+//    // Base for dimension key {uid 1}.
+//    auto it = valueProducer->mCurrentSlicedBucket.begin();
+//    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    auto itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(3, itBase->second[0].base.long_value);
+//    // Value for dimension, state key {{uid 1}, kStateUnknown}
+//    // TODO(tsaichristine): test equality of state values key
+//    // EXPECT_EQ(-1, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//    // Base for dimension key {uid 2}
+//    it++;
+//    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(7, itBase->second[0].base.long_value);
+//    // Value for dimension, state key {{uid 2}, kStateUnknown}
+//    // EXPECT_EQ(-1, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//
+//    // Bucket status after uid 1 process state change kStateUnknown -> Foreground.
+//    auto uidProcessEvent = CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, bucketStartTimeNs + 20);
+//    StateManager::getInstance().onLogEvent(*uidProcessEvent);
+//    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
+//    // Base for dimension key {uid 1}.
+//    it = valueProducer->mCurrentSlicedBucket.begin();
+//    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(6, itBase->second[0].base.long_value);
+//    // Value for key {uid 1, kStateUnknown}.
+//    // EXPECT_EQ(-1, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(3, it->second[0].value.long_value);
+//
+//    // Base for dimension key {uid 2}
+//    it++;
+//    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(7, itBase->second[0].base.long_value);
+//    // Value for key {uid 2, kStateUnknown}
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//
+//    // Bucket status after uid 2 process state change kStateUnknown -> Background.
+//    uidProcessEvent = CreateUidProcessStateChangedEvent(
+//            2 /* uid */, android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, bucketStartTimeNs + 40);
+//    StateManager::getInstance().onLogEvent(*uidProcessEvent);
+//    EXPECT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size());
+//    // Base for dimension key {uid 1}.
+//    it = valueProducer->mCurrentSlicedBucket.begin();
+//    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(6, itBase->second[0].base.long_value);
+//    // Value for key {uid 1, kStateUnknown}.
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(3, it->second[0].value.long_value);
+//
+//    // Base for dimension key {uid 2}
+//    it++;
+//    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(9, itBase->second[0].base.long_value);
+//    // Value for key {uid 2, kStateUnknown}
+//    // EXPECT_EQ(-1, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(2, it->second[0].value.long_value);
+//
+//    // Pull at end of first bucket.
+//    vector<shared_ptr<LogEvent>> allData;
+//    shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucket2StartTimeNs);
+//    event->write(1 /* uid */);
+//    event->write(10);
+//    event->init();
+//    allData.push_back(event);
+//
+//    event = make_shared<LogEvent>(tagId, bucket2StartTimeNs);
+//    event->write(2 /* uid */);
+//    event->write(15);
+//    event->init();
+//    allData.push_back(event);
+//
+//    valueProducer->onDataPulled(allData, /** succeeds */ true, bucket2StartTimeNs + 1);
+//
+//    // Buckets flushed after end of first bucket.
+//    // None of the buckets should have a value.
+//    EXPECT_EQ(4UL, valueProducer->mCurrentSlicedBucket.size());
+//    EXPECT_EQ(4UL, valueProducer->mPastBuckets.size());
+//    EXPECT_EQ(2UL, valueProducer->mCurrentBaseInfo.size());
+//    // Base for dimension key {uid 2}.
+//    it = valueProducer->mCurrentSlicedBucket.begin();
+//    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(15, itBase->second[0].base.long_value);
+//    // Value for key {uid 2, BACKGROUND}.
+//    EXPECT_EQ(1, it->first.getStateValuesKey().getValues().size());
+//    EXPECT_EQ(1006, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//
+//    // Base for dimension key {uid 1}
+//    it++;
+//    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(10, itBase->second[0].base.long_value);
+//    // Value for key {uid 1, kStateUnknown}
+//    EXPECT_EQ(0, it->first.getStateValuesKey().getValues().size());
+//    // EXPECT_EQ(-1, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//
+//    // Value for key {uid 1, FOREGROUND}
+//    it++;
+//    EXPECT_EQ(1, it->first.getStateValuesKey().getValues().size());
+//    EXPECT_EQ(1005, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//
+//    // Value for key {uid 2, kStateUnknown}
+//    it++;
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//
+//    // Bucket status after uid 1 process state change from Foreground -> Background.
+//    uidProcessEvent = CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, bucket2StartTimeNs + 20);
+//    StateManager::getInstance().onLogEvent(*uidProcessEvent);
+//
+//    EXPECT_EQ(4UL, valueProducer->mCurrentSlicedBucket.size());
+//    EXPECT_EQ(4UL, valueProducer->mPastBuckets.size());
+//    EXPECT_EQ(2UL, valueProducer->mCurrentBaseInfo.size());
+//    // Base for dimension key {uid 2}.
+//    it = valueProducer->mCurrentSlicedBucket.begin();
+//    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(15, itBase->second[0].base.long_value);
+//    // Value for key {uid 2, BACKGROUND}.
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//    // Base for dimension key {uid 1}
+//    it++;
+//    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(13, itBase->second[0].base.long_value);
+//    // Value for key {uid 1, kStateUnknown}
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//    // Value for key {uid 1, FOREGROUND}
+//    it++;
+//    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(1005, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(3, it->second[0].value.long_value);
+//    // Value for key {uid 2, kStateUnknown}
+//    it++;
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//
+//    // Bucket status after uid 1 process state change Background->Foreground.
+//    uidProcessEvent = CreateUidProcessStateChangedEvent(
+//            1 /* uid */, android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, bucket2StartTimeNs + 40);
+//    StateManager::getInstance().onLogEvent(*uidProcessEvent);
+//
+//    EXPECT_EQ(5UL, valueProducer->mCurrentSlicedBucket.size());
+//    EXPECT_EQ(2UL, valueProducer->mCurrentBaseInfo.size());
+//    // Base for dimension key {uid 2}
+//    it = valueProducer->mCurrentSlicedBucket.begin();
+//    EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(true, itBase->second[0].hasBase);
+//    EXPECT_EQ(15, itBase->second[0].base.long_value);
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//
+//    it++;
+//    EXPECT_EQ(false, it->second[0].hasValue);
+//
+//    // Base for dimension key {uid 1}
+//    it++;
+//    EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value);
+//    itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat());
+//    EXPECT_EQ(17, itBase->second[0].base.long_value);
+//    // Value for key {uid 1, BACKGROUND}
+//    EXPECT_EQ(1006, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(4, it->second[0].value.long_value);
+//    // Value for key {uid 1, FOREGROUND}
+//    it++;
+//    EXPECT_EQ(1005, it->first.getStateValuesKey().getValues()[0].mValue.int_value);
+//    EXPECT_EQ(true, it->second[0].hasValue);
+//    EXPECT_EQ(3, it->second[0].value.long_value);
+//
+//    // Start dump report and check output.
+//    ProtoOutputStream output;
+//    std::set<string> strSet;
+//    valueProducer->onDumpReport(bucket2StartTimeNs + 50, true /* include recent buckets */, true,
+//                                NO_TIME_CONSTRAINTS, &strSet, &output);
+//
+//    StatsLogReport report = outputStreamToProto(&output);
+//    EXPECT_TRUE(report.has_value_metrics());
+//    EXPECT_EQ(5, report.value_metrics().data_size());
+//
+//    auto data = report.value_metrics().data(0);
+//    EXPECT_EQ(1, data.bucket_info_size());
+//    EXPECT_EQ(4, report.value_metrics().data(0).bucket_info(0).values(0).value_long());
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
+//              data.slice_by_state(0).value());
+//
+//    data = report.value_metrics().data(1);
+//    EXPECT_EQ(1, report.value_metrics().data(1).bucket_info_size());
+//    EXPECT_EQ(2, report.value_metrics().data(1).bucket_info(0).values(0).value_long());
+//
+//    data = report.value_metrics().data(2);
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
+//              data.slice_by_state(0).value());
+//    EXPECT_EQ(2, report.value_metrics().data(2).bucket_info_size());
+//    EXPECT_EQ(4, report.value_metrics().data(2).bucket_info(0).values(0).value_long());
+//    EXPECT_EQ(7, report.value_metrics().data(2).bucket_info(1).values(0).value_long());
+//
+//    data = report.value_metrics().data(3);
+//    EXPECT_EQ(1, report.value_metrics().data(3).bucket_info_size());
+//    EXPECT_EQ(3, report.value_metrics().data(3).bucket_info(0).values(0).value_long());
+//
+//    data = report.value_metrics().data(4);
+//    EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+//    EXPECT_TRUE(data.slice_by_state(0).has_value());
+//    EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
+//              data.slice_by_state(0).value());
+//    EXPECT_EQ(2, report.value_metrics().data(4).bucket_info_size());
+//    EXPECT_EQ(6, report.value_metrics().data(4).bucket_info(0).values(0).value_long());
+//    EXPECT_EQ(5, report.value_metrics().data(4).bucket_info(1).values(0).value_long());
+//}
 
 }  // namespace statsd
 }  // namespace os
diff --git a/cmds/statsd/tests/shell/ShellSubscriber_test.cpp b/cmds/statsd/tests/shell/ShellSubscriber_test.cpp
index 73d1fd7..57e4265 100644
--- a/cmds/statsd/tests/shell/ShellSubscriber_test.cpp
+++ b/cmds/statsd/tests/shell/ShellSubscriber_test.cpp
@@ -34,27 +34,6 @@
 
 #ifdef __ANDROID__
 
-class MyResultReceiver : public BnResultReceiver {
-public:
-    Mutex mMutex;
-    Condition mCondition;
-    bool mHaveResult = false;
-    int32_t mResult = 0;
-
-    virtual void send(int32_t resultCode) {
-        AutoMutex _l(mMutex);
-        mResult = resultCode;
-        mHaveResult = true;
-        mCondition.signal();
-    }
-
-    int32_t waitForResult() {
-        AutoMutex _l(mMutex);
-        mCondition.waitRelative(mMutex, 1000000000);
-        return mResult;
-    }
-};
-
 void runShellTest(ShellSubscription config, sp<MockUidMap> uidMap,
                   sp<MockStatsPullerManager> pullerManager,
                   const vector<std::shared_ptr<LogEvent>>& pushedEvents,
@@ -67,10 +46,7 @@
     ASSERT_EQ(0, pipe(fds_data));
 
     size_t bufferSize = config.ByteSize();
-
     // write the config to pipe, first write size of the config
-    vector<uint8_t> size_buffer(sizeof(bufferSize));
-    std::memcpy(size_buffer.data(), &bufferSize, sizeof(bufferSize));
     write(fds_config[1], &bufferSize, sizeof(bufferSize));
     // then write config itself
     vector<uint8_t> buffer(bufferSize);
@@ -79,11 +55,10 @@
     close(fds_config[1]);
 
     sp<ShellSubscriber> shellClient = new ShellSubscriber(uidMap, pullerManager);
-    sp<MyResultReceiver> resultReceiver = new MyResultReceiver();
 
     // mimic a binder thread that a shell subscriber runs on. it would block.
-    std::thread reader([&resultReceiver, &fds_config, &fds_data, &shellClient] {
-        shellClient->startNewSubscription(fds_config[0], fds_data[1], resultReceiver, -1);
+    std::thread reader([&shellClient, &fds_config, &fds_data] {
+        shellClient->startNewSubscription(fds_config[0], fds_data[1], /*timeoutSec=*/-1);
     });
     reader.detach();
 
@@ -130,29 +105,30 @@
     close(fds_data[0]);
 }
 
-TEST(ShellSubscriberTest, testPushedSubscription) {
-    sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    vector<std::shared_ptr<LogEvent>> pushedList;
-
-    std::shared_ptr<LogEvent> event1 =
-            std::make_shared<LogEvent>(29 /*screen_state_atom_id*/, 1000 /*timestamp*/);
-    event1->write(::android::view::DisplayStateEnum::DISPLAY_STATE_ON);
-    event1->init();
-    pushedList.push_back(event1);
-
-    // create a simple config to get screen events
-    ShellSubscription config;
-    config.add_pushed()->set_atom_id(29);
-
-    // this is the expected screen event atom.
-    ShellData shellData;
-    shellData.add_atom()->mutable_screen_state_changed()->set_state(
-            ::android::view::DisplayStateEnum::DISPLAY_STATE_ON);
-
-    runShellTest(config, uidMap, pullerManager, pushedList, shellData);
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(ShellSubscriberTest, testPushedSubscription) {
+//    sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    vector<std::shared_ptr<LogEvent>> pushedList;
+//
+//    std::shared_ptr<LogEvent> event1 =
+//            std::make_shared<LogEvent>(29 /*screen_state_atom_id*/, 1000 /*timestamp*/);
+//    event1->write(::android::view::DisplayStateEnum::DISPLAY_STATE_ON);
+//    event1->init();
+//    pushedList.push_back(event1);
+//
+//    // create a simple config to get screen events
+//    ShellSubscription config;
+//    config.add_pushed()->set_atom_id(29);
+//
+//    // this is the expected screen event atom.
+//    ShellData shellData;
+//    shellData.add_atom()->mutable_screen_state_changed()->set_state(
+//            ::android::view::DisplayStateEnum::DISPLAY_STATE_ON);
+//
+//    runShellTest(config, uidMap, pullerManager, pushedList, shellData);
+//}
 
 namespace {
 
@@ -185,30 +161,31 @@
 
 }  // namespace
 
-TEST(ShellSubscriberTest, testPulledSubscription) {
-    sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
-
-    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-    EXPECT_CALL(*pullerManager, Pull(10016, _))
-            .WillRepeatedly(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
-                data->clear();
-                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, 1111L);
-                event->write(kUid1);
-                event->write(kCpuTime1);
-                event->init();
-                data->push_back(event);
-                // another event
-                event = make_shared<LogEvent>(tagId, 1111L);
-                event->write(kUid2);
-                event->write(kCpuTime2);
-                event->init();
-                data->push_back(event);
-                return true;
-            }));
-
-    runShellTest(getPulledConfig(), uidMap, pullerManager, vector<std::shared_ptr<LogEvent>>(),
-                 getExpectedShellData());
-}
+// TODO(b/149590301): Update this test to use new socket schema.
+//TEST(ShellSubscriberTest, testPulledSubscription) {
+//    sp<MockUidMap> uidMap = new NaggyMock<MockUidMap>();
+//
+//    sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+//    EXPECT_CALL(*pullerManager, Pull(10016, _))
+//            .WillRepeatedly(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+//                data->clear();
+//                shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, 1111L);
+//                event->write(kUid1);
+//                event->write(kCpuTime1);
+//                event->init();
+//                data->push_back(event);
+//                // another event
+//                event = make_shared<LogEvent>(tagId, 1111L);
+//                event->write(kUid2);
+//                event->write(kCpuTime2);
+//                event->init();
+//                data->push_back(event);
+//                return true;
+//            }));
+//
+//    runShellTest(getPulledConfig(), uidMap, pullerManager, vector<std::shared_ptr<LogEvent>>(),
+//                 getExpectedShellData());
+//}
 
 #else
 GTEST_LOG_(INFO) << "This test does nothing.\n";
diff --git a/cmds/statsd/tests/state/StateTracker_test.cpp b/cmds/statsd/tests/state/StateTracker_test.cpp
index b0acd5a..36c0f32 100644
--- a/cmds/statsd/tests/state/StateTracker_test.cpp
+++ b/cmds/statsd/tests/state/StateTracker_test.cpp
@@ -56,94 +56,95 @@
     return output.mValue.int_value;
 }
 
-// START: build event functions.
-// State with no primary fields - ScreenStateChanged
-std::shared_ptr<LogEvent> buildScreenEvent(int state) {
-    std::shared_ptr<LogEvent> event =
-            std::make_shared<LogEvent>(android::util::SCREEN_STATE_CHANGED, 1000 /*timestamp*/);
-    event->write((int32_t)state);
-    event->init();
-    return event;
-}
-
-// State with one primary field - UidProcessStateChanged
-std::shared_ptr<LogEvent> buildUidProcessEvent(int uid, int state) {
-    std::shared_ptr<LogEvent> event =
-            std::make_shared<LogEvent>(android::util::UID_PROCESS_STATE_CHANGED, 1000 /*timestamp*/);
-    event->write((int32_t)uid);
-    event->write((int32_t)state);
-    event->init();
-    return event;
-}
-
-// State with first uid in attribution chain as primary field - WakelockStateChanged
-std::shared_ptr<LogEvent> buildPartialWakelockEvent(int uid, const std::string& tag, bool acquire) {
-    std::vector<AttributionNodeInternal> chain;
-    chain.push_back(AttributionNodeInternal());
-    AttributionNodeInternal& attr = chain.back();
-    attr.set_uid(uid);
-
-    std::shared_ptr<LogEvent> event =
-            std::make_shared<LogEvent>(android::util::WAKELOCK_STATE_CHANGED, 1000 /* timestamp */);
-    event->write(chain);
-    event->write((int32_t)1);  // PARTIAL_WAKE_LOCK
-    event->write(tag);
-    event->write(acquire ? 1 : 0);
-    event->init();
-    return event;
-}
-
-// State with multiple primary fields - OverlayStateChanged
-std::shared_ptr<LogEvent> buildOverlayEvent(int uid, const std::string& packageName, int state) {
-    std::shared_ptr<LogEvent> event =
-            std::make_shared<LogEvent>(android::util::OVERLAY_STATE_CHANGED, 1000 /*timestamp*/);
-    event->write((int32_t)uid);
-    event->write(packageName);
-    event->write(true);  // using_alert_window
-    event->write((int32_t)state);
-    event->init();
-    return event;
-}
-
-// Incorrect event - missing fields
-std::shared_ptr<LogEvent> buildIncorrectOverlayEvent(int uid, const std::string& packageName, int state) {
-    std::shared_ptr<LogEvent> event =
-            std::make_shared<LogEvent>(android::util::OVERLAY_STATE_CHANGED, 1000 /*timestamp*/);
-    event->write((int32_t)uid);
-    event->write(packageName);
-    event->write((int32_t)state);
-    event->init();
-    return event;
-}
-
-// Incorrect event - exclusive state has wrong type
-std::shared_ptr<LogEvent> buildOverlayEventBadStateType(int uid, const std::string& packageName) {
-    std::shared_ptr<LogEvent> event =
-            std::make_shared<LogEvent>(android::util::OVERLAY_STATE_CHANGED, 1000 /*timestamp*/);
-    event->write((int32_t)uid);
-    event->write(packageName);
-    event->write(true);
-    event->write("string");  // exclusive state: string instead of int
-    event->init();
-    return event;
-}
-
-std::shared_ptr<LogEvent> buildBleScanEvent(int uid, bool acquire, bool reset) {
-    std::vector<AttributionNodeInternal> chain;
-    chain.push_back(AttributionNodeInternal());
-    AttributionNodeInternal& attr = chain.back();
-    attr.set_uid(uid);
-
-    std::shared_ptr<LogEvent> event =
-            std::make_shared<LogEvent>(android::util::BLE_SCAN_STATE_CHANGED, 1000);
-    event->write(chain);
-    event->write(reset ? 2 : acquire ? 1 : 0);  // PARTIAL_WAKE_LOCK
-    event->write(0);                            // filtered
-    event->write(0);                            // first match
-    event->write(0);                            // opportunistic
-    event->init();
-    return event;
-}
+// TODO(b/149590301): Update these helpers to use new socket schema.
+//// START: build event functions.
+//// State with no primary fields - ScreenStateChanged
+//std::shared_ptr<LogEvent> buildScreenEvent(int state) {
+//    std::shared_ptr<LogEvent> event =
+//            std::make_shared<LogEvent>(android::util::SCREEN_STATE_CHANGED, 1000 /*timestamp*/);
+//    event->write((int32_t)state);
+//    event->init();
+//    return event;
+//}
+//
+//// State with one primary field - UidProcessStateChanged
+//std::shared_ptr<LogEvent> buildUidProcessEvent(int uid, int state) {
+//    std::shared_ptr<LogEvent> event =
+//            std::make_shared<LogEvent>(android::util::UID_PROCESS_STATE_CHANGED, 1000 /*timestamp*/);
+//    event->write((int32_t)uid);
+//    event->write((int32_t)state);
+//    event->init();
+//    return event;
+//}
+//
+//// State with first uid in attribution chain as primary field - WakelockStateChanged
+//std::shared_ptr<LogEvent> buildPartialWakelockEvent(int uid, const std::string& tag, bool acquire) {
+//    std::vector<AttributionNodeInternal> chain;
+//    chain.push_back(AttributionNodeInternal());
+//    AttributionNodeInternal& attr = chain.back();
+//    attr.set_uid(uid);
+//
+//    std::shared_ptr<LogEvent> event =
+//            std::make_shared<LogEvent>(android::util::WAKELOCK_STATE_CHANGED, 1000 /* timestamp */);
+//    event->write(chain);
+//    event->write((int32_t)1);  // PARTIAL_WAKE_LOCK
+//    event->write(tag);
+//    event->write(acquire ? 1 : 0);
+//    event->init();
+//    return event;
+//}
+//
+//// State with multiple primary fields - OverlayStateChanged
+//std::shared_ptr<LogEvent> buildOverlayEvent(int uid, const std::string& packageName, int state) {
+//    std::shared_ptr<LogEvent> event =
+//            std::make_shared<LogEvent>(android::util::OVERLAY_STATE_CHANGED, 1000 /*timestamp*/);
+//    event->write((int32_t)uid);
+//    event->write(packageName);
+//    event->write(true);  // using_alert_window
+//    event->write((int32_t)state);
+//    event->init();
+//    return event;
+//}
+//
+//// Incorrect event - missing fields
+//std::shared_ptr<LogEvent> buildIncorrectOverlayEvent(int uid, const std::string& packageName, int state) {
+//    std::shared_ptr<LogEvent> event =
+//            std::make_shared<LogEvent>(android::util::OVERLAY_STATE_CHANGED, 1000 /*timestamp*/);
+//    event->write((int32_t)uid);
+//    event->write(packageName);
+//    event->write((int32_t)state);
+//    event->init();
+//    return event;
+//}
+//
+//// Incorrect event - exclusive state has wrong type
+//std::shared_ptr<LogEvent> buildOverlayEventBadStateType(int uid, const std::string& packageName) {
+//    std::shared_ptr<LogEvent> event =
+//            std::make_shared<LogEvent>(android::util::OVERLAY_STATE_CHANGED, 1000 /*timestamp*/);
+//    event->write((int32_t)uid);
+//    event->write(packageName);
+//    event->write(true);
+//    event->write("string");  // exclusive state: string instead of int
+//    event->init();
+//    return event;
+//}
+//
+//std::shared_ptr<LogEvent> buildBleScanEvent(int uid, bool acquire, bool reset) {
+//    std::vector<AttributionNodeInternal> chain;
+//    chain.push_back(AttributionNodeInternal());
+//    AttributionNodeInternal& attr = chain.back();
+//    attr.set_uid(uid);
+//
+//    std::shared_ptr<LogEvent> event =
+//            std::make_shared<LogEvent>(android::util::BLE_SCAN_STATE_CHANGED, 1000);
+//    event->write(chain);
+//    event->write(reset ? 2 : acquire ? 1 : 0);  // PARTIAL_WAKE_LOCK
+//    event->write(0);                            // filtered
+//    event->write(0);                            // first match
+//    event->write(0);                            // opportunistic
+//    event->init();
+//    return event;
+//}
 // END: build event functions.
 
 // START: get primary key functions
@@ -292,302 +293,302 @@
     EXPECT_EQ(0, mgr.getStateTrackersCount());
     EXPECT_EQ(-1, mgr.getListenersCount(android::util::SCREEN_STATE_CHANGED));
 }
-
-/**
- * Test a binary state atom with nested counting.
- *
- * To go from an "ON" state to an "OFF" state with nested counting, we must see
- * an equal number of "OFF" events as "ON" events.
- * For example, ACQUIRE, ACQUIRE, RELEASE will still be in the ACQUIRE state.
- * ACQUIRE, ACQUIRE, RELEASE, RELEASE will be in the RELEASE state.
- */
-TEST(StateTrackerTest, TestStateChangeNested) {
-    sp<TestStateListener> listener = new TestStateListener();
-    StateManager mgr;
-    mgr.registerListener(android::util::WAKELOCK_STATE_CHANGED, listener);
-
-    std::shared_ptr<LogEvent> event1 =
-            buildPartialWakelockEvent(1000 /* uid */, "tag", true /*acquire*/);
-    mgr.onLogEvent(*event1);
-    EXPECT_EQ(1, listener->updates.size());
-    EXPECT_EQ(1000, listener->updates[0].mKey.getValues()[0].mValue.int_value);
-    EXPECT_EQ(1, listener->updates[0].mState);
-    listener->updates.clear();
-
-    std::shared_ptr<LogEvent> event2 =
-            buildPartialWakelockEvent(1000 /* uid */, "tag", true /*acquire*/);
-    mgr.onLogEvent(*event2);
-    EXPECT_EQ(0, listener->updates.size());
-
-    std::shared_ptr<LogEvent> event3 =
-            buildPartialWakelockEvent(1000 /* uid */, "tag", false /*release*/);
-    mgr.onLogEvent(*event3);
-    EXPECT_EQ(0, listener->updates.size());
-
-    std::shared_ptr<LogEvent> event4 =
-            buildPartialWakelockEvent(1000 /* uid */, "tag", false /*release*/);
-    mgr.onLogEvent(*event4);
-    EXPECT_EQ(1, listener->updates.size());
-    EXPECT_EQ(1000, listener->updates[0].mKey.getValues()[0].mValue.int_value);
-    EXPECT_EQ(0, listener->updates[0].mState);
-}
-
-/**
- * Test a state atom with a reset state.
- *
- * If the reset state value is seen, every state in the map is set to the default
- * state and every listener is notified.
- */
-TEST(StateTrackerTest, TestStateChangeReset) {
-    sp<TestStateListener> listener = new TestStateListener();
-    StateManager mgr;
-    mgr.registerListener(android::util::BLE_SCAN_STATE_CHANGED, listener);
-
-    std::shared_ptr<LogEvent> event1 =
-            buildBleScanEvent(1000 /* uid */, true /*acquire*/, false /*reset*/);
-    mgr.onLogEvent(*event1);
-    EXPECT_EQ(1, listener->updates.size());
-    EXPECT_EQ(1000, listener->updates[0].mKey.getValues()[0].mValue.int_value);
-    EXPECT_EQ(BleScanStateChanged::ON, listener->updates[0].mState);
-    listener->updates.clear();
-
-    std::shared_ptr<LogEvent> event2 =
-            buildBleScanEvent(2000 /* uid */, true /*acquire*/, false /*reset*/);
-    mgr.onLogEvent(*event2);
-    EXPECT_EQ(1, listener->updates.size());
-    EXPECT_EQ(2000, listener->updates[0].mKey.getValues()[0].mValue.int_value);
-    EXPECT_EQ(BleScanStateChanged::ON, listener->updates[0].mState);
-    listener->updates.clear();
-
-    std::shared_ptr<LogEvent> event3 =
-            buildBleScanEvent(2000 /* uid */, false /*acquire*/, true /*reset*/);
-    mgr.onLogEvent(*event3);
-    EXPECT_EQ(2, listener->updates.size());
-    EXPECT_EQ(BleScanStateChanged::OFF, listener->updates[0].mState);
-    EXPECT_EQ(BleScanStateChanged::OFF, listener->updates[1].mState);
-}
-
-/**
- * Test StateManager's onLogEvent and StateListener's onStateChanged correctly
- * updates listener for states without primary keys.
- */
-TEST(StateTrackerTest, TestStateChangeNoPrimaryFields) {
-    sp<TestStateListener> listener1 = new TestStateListener();
-    StateManager mgr;
-    mgr.registerListener(android::util::SCREEN_STATE_CHANGED, listener1);
-
-    // log event
-    std::shared_ptr<LogEvent> event =
-            buildScreenEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON);
-    mgr.onLogEvent(*event);
-
-    // check listener was updated
-    EXPECT_EQ(1, listener1->updates.size());
-    EXPECT_EQ(DEFAULT_DIMENSION_KEY, listener1->updates[0].mKey);
-    EXPECT_EQ(2, listener1->updates[0].mState);
-
-    // check StateTracker was updated by querying for state
-    HashableDimensionKey queryKey = DEFAULT_DIMENSION_KEY;
-    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-              getStateInt(mgr, android::util::SCREEN_STATE_CHANGED, queryKey));
-}
-
-/**
- * Test StateManager's onLogEvent and StateListener's onStateChanged correctly
- * updates listener for states with one primary key.
- */
-TEST(StateTrackerTest, TestStateChangeOnePrimaryField) {
-    sp<TestStateListener> listener1 = new TestStateListener();
-    StateManager mgr;
-    mgr.registerListener(android::util::UID_PROCESS_STATE_CHANGED, listener1);
-
-    // log event
-    std::shared_ptr<LogEvent> event =
-            buildUidProcessEvent(1000 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_TOP);
-    mgr.onLogEvent(*event);
-
-    // check listener was updated
-    EXPECT_EQ(1, listener1->updates.size());
-    EXPECT_EQ(1000, listener1->updates[0].mKey.getValues()[0].mValue.int_value);
-    EXPECT_EQ(1002, listener1->updates[0].mState);
-
-    // check StateTracker was updated by querying for state
-    HashableDimensionKey queryKey;
-    getUidProcessKey(1000 /* uid */, &queryKey);
-    EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_TOP,
-              getStateInt(mgr, android::util::UID_PROCESS_STATE_CHANGED, queryKey));
-}
-
-TEST(StateTrackerTest, TestStateChangePrimaryFieldAttrChain) {
-    sp<TestStateListener> listener1 = new TestStateListener();
-    StateManager mgr;
-    mgr.registerListener(android::util::WAKELOCK_STATE_CHANGED, listener1);
-
-    // Log event.
-    std::shared_ptr<LogEvent> event =
-            buildPartialWakelockEvent(1001 /* uid */, "tag1", true /* acquire */);
-    mgr.onLogEvent(*event);
-
-    EXPECT_EQ(1, mgr.getStateTrackersCount());
-    EXPECT_EQ(1, mgr.getListenersCount(android::util::WAKELOCK_STATE_CHANGED));
-
-    // Check listener was updated.
-    EXPECT_EQ(1, listener1->updates.size());
-    EXPECT_EQ(3, listener1->updates[0].mKey.getValues().size());
-    EXPECT_EQ(1001, listener1->updates[0].mKey.getValues()[0].mValue.int_value);
-    EXPECT_EQ(1, listener1->updates[0].mKey.getValues()[1].mValue.int_value);
-    EXPECT_EQ("tag1", listener1->updates[0].mKey.getValues()[2].mValue.str_value);
-    EXPECT_EQ(WakelockStateChanged::ACQUIRE, listener1->updates[0].mState);
-
-    // Check StateTracker was updated by querying for state.
-    HashableDimensionKey queryKey;
-    getPartialWakelockKey(1001 /* uid */, "tag1", &queryKey);
-    EXPECT_EQ(WakelockStateChanged::ACQUIRE,
-              getStateInt(mgr, android::util::WAKELOCK_STATE_CHANGED, queryKey));
-
-    // No state stored for this query key.
-    HashableDimensionKey queryKey2;
-    getPartialWakelockKey(1002 /* uid */, "tag1", &queryKey2);
-    EXPECT_EQ(WakelockStateChanged::RELEASE,
-              getStateInt(mgr, android::util::WAKELOCK_STATE_CHANGED, queryKey2));
-
-    // Partial query fails.
-    HashableDimensionKey queryKey3;
-    getPartialWakelockKey(1001 /* uid */, &queryKey3);
-    EXPECT_EQ(WakelockStateChanged::RELEASE,
-              getStateInt(mgr, android::util::WAKELOCK_STATE_CHANGED, queryKey3));
-}
-
-/**
- * Test StateManager's onLogEvent and StateListener's onStateChanged correctly
- * updates listener for states with multiple primary keys.
- */
-TEST(StateTrackerTest, TestStateChangeMultiplePrimaryFields) {
-    sp<TestStateListener> listener1 = new TestStateListener();
-    StateManager mgr;
-    mgr.registerListener(android::util::OVERLAY_STATE_CHANGED, listener1);
-
-    // log event
-    std::shared_ptr<LogEvent> event =
-            buildOverlayEvent(1000 /* uid */, "package1", 1);  // state: ENTERED
-    mgr.onLogEvent(*event);
-
-    // check listener was updated
-    EXPECT_EQ(1, listener1->updates.size());
-    EXPECT_EQ(1000, listener1->updates[0].mKey.getValues()[0].mValue.int_value);
-    EXPECT_EQ(1, listener1->updates[0].mState);
-
-    // check StateTracker was updated by querying for state
-    HashableDimensionKey queryKey;
-    getOverlayKey(1000 /* uid */, "package1", &queryKey);
-    EXPECT_EQ(OverlayStateChanged::ENTERED,
-              getStateInt(mgr, android::util::OVERLAY_STATE_CHANGED, queryKey));
-}
-
-/**
- * Test StateManager's onLogEvent and StateListener's onStateChanged
- * when there is an error extracting state from log event. Listener is not
- * updated of state change.
- */
-TEST(StateTrackerTest, TestStateChangeEventError) {
-    sp<TestStateListener> listener1 = new TestStateListener();
-    StateManager mgr;
-    mgr.registerListener(android::util::OVERLAY_STATE_CHANGED, listener1);
-
-    // log event
-    std::shared_ptr<LogEvent> event1 =
-            buildIncorrectOverlayEvent(1000 /* uid */, "package1", 1 /* state */);
-    std::shared_ptr<LogEvent> event2 = buildOverlayEventBadStateType(1001 /* uid */, "package2");
-
-    // check listener was updated
-    mgr.onLogEvent(*event1);
-    EXPECT_EQ(0, listener1->updates.size());
-    mgr.onLogEvent(*event2);
-    EXPECT_EQ(0, listener1->updates.size());
-}
-
-TEST(StateTrackerTest, TestStateQuery) {
-    sp<TestStateListener> listener1 = new TestStateListener();
-    sp<TestStateListener> listener2 = new TestStateListener();
-    sp<TestStateListener> listener3 = new TestStateListener();
-    sp<TestStateListener> listener4 = new TestStateListener();
-    StateManager mgr;
-    mgr.registerListener(android::util::SCREEN_STATE_CHANGED, listener1);
-    mgr.registerListener(android::util::UID_PROCESS_STATE_CHANGED, listener2);
-    mgr.registerListener(android::util::OVERLAY_STATE_CHANGED, listener3);
-    mgr.registerListener(android::util::WAKELOCK_STATE_CHANGED, listener4);
-
-    std::shared_ptr<LogEvent> event1 = buildUidProcessEvent(
-            1000,
-            android::app::ProcessStateEnum::PROCESS_STATE_TOP);  //  state value: 1002
-    std::shared_ptr<LogEvent> event2 = buildUidProcessEvent(
-            1001,
-            android::app::ProcessStateEnum::PROCESS_STATE_FOREGROUND_SERVICE);  //  state value:
-                                                                                //  1003
-    std::shared_ptr<LogEvent> event3 = buildUidProcessEvent(
-            1002,
-            android::app::ProcessStateEnum::PROCESS_STATE_PERSISTENT);  //  state value: 1000
-    std::shared_ptr<LogEvent> event4 = buildUidProcessEvent(
-            1001,
-            android::app::ProcessStateEnum::PROCESS_STATE_TOP);  //  state value: 1002
-    std::shared_ptr<LogEvent> event5 =
-            buildScreenEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON);
-    std::shared_ptr<LogEvent> event6 =
-            buildOverlayEvent(1000, "package1", OverlayStateChanged::ENTERED);
-    std::shared_ptr<LogEvent> event7 =
-            buildOverlayEvent(1000, "package2", OverlayStateChanged::EXITED);
-    std::shared_ptr<LogEvent> event8 = buildPartialWakelockEvent(1005, "tag1", true);
-    std::shared_ptr<LogEvent> event9 = buildPartialWakelockEvent(1005, "tag2", false);
-
-    mgr.onLogEvent(*event1);
-    mgr.onLogEvent(*event2);
-    mgr.onLogEvent(*event3);
-    mgr.onLogEvent(*event5);
-    mgr.onLogEvent(*event5);
-    mgr.onLogEvent(*event6);
-    mgr.onLogEvent(*event7);
-    mgr.onLogEvent(*event8);
-    mgr.onLogEvent(*event9);
-
-    // Query for UidProcessState of uid 1001
-    HashableDimensionKey queryKey1;
-    getUidProcessKey(1001, &queryKey1);
-    EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_FOREGROUND_SERVICE,
-              getStateInt(mgr, android::util::UID_PROCESS_STATE_CHANGED, queryKey1));
-
-    // Query for UidProcessState of uid 1004 - not in state map
-    HashableDimensionKey queryKey2;
-    getUidProcessKey(1004, &queryKey2);
-    EXPECT_EQ(-1, getStateInt(mgr, android::util::UID_PROCESS_STATE_CHANGED,
-                              queryKey2));  // default state
-
-    // Query for UidProcessState of uid 1001 - after change in state
-    mgr.onLogEvent(*event4);
-    EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_TOP,
-              getStateInt(mgr, android::util::UID_PROCESS_STATE_CHANGED, queryKey1));
-
-    // Query for ScreenState
-    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
-              getStateInt(mgr, android::util::SCREEN_STATE_CHANGED, DEFAULT_DIMENSION_KEY));
-
-    // Query for OverlayState of uid 1000, package name "package2"
-    HashableDimensionKey queryKey3;
-    getOverlayKey(1000, "package2", &queryKey3);
-    EXPECT_EQ(OverlayStateChanged::EXITED,
-              getStateInt(mgr, android::util::OVERLAY_STATE_CHANGED, queryKey3));
-
-    // Query for WakelockState of uid 1005, tag 2
-    HashableDimensionKey queryKey4;
-    getPartialWakelockKey(1005, "tag2", &queryKey4);
-    EXPECT_EQ(WakelockStateChanged::RELEASE,
-              getStateInt(mgr, android::util::WAKELOCK_STATE_CHANGED, queryKey4));
-
-    // Query for WakelockState of uid 1005, tag 1
-    HashableDimensionKey queryKey5;
-    getPartialWakelockKey(1005, "tag1", &queryKey5);
-    EXPECT_EQ(WakelockStateChanged::ACQUIRE,
-              getStateInt(mgr, android::util::WAKELOCK_STATE_CHANGED, queryKey5));
-}
+// TODO(b/149590301): Update these tests to use new socket schema.
+///**
+// * Test a binary state atom with nested counting.
+// *
+// * To go from an "ON" state to an "OFF" state with nested counting, we must see
+// * an equal number of "OFF" events as "ON" events.
+// * For example, ACQUIRE, ACQUIRE, RELEASE will still be in the ACQUIRE state.
+// * ACQUIRE, ACQUIRE, RELEASE, RELEASE will be in the RELEASE state.
+// */
+//TEST(StateTrackerTest, TestStateChangeNested) {
+//    sp<TestStateListener> listener = new TestStateListener();
+//    StateManager mgr;
+//    mgr.registerListener(android::util::WAKELOCK_STATE_CHANGED, listener);
+//
+//    std::shared_ptr<LogEvent> event1 =
+//            buildPartialWakelockEvent(1000 /* uid */, "tag", true /*acquire*/);
+//    mgr.onLogEvent(*event1);
+//    EXPECT_EQ(1, listener->updates.size());
+//    EXPECT_EQ(1000, listener->updates[0].mKey.getValues()[0].mValue.int_value);
+//    EXPECT_EQ(1, listener->updates[0].mState);
+//    listener->updates.clear();
+//
+//    std::shared_ptr<LogEvent> event2 =
+//            buildPartialWakelockEvent(1000 /* uid */, "tag", true /*acquire*/);
+//    mgr.onLogEvent(*event2);
+//    EXPECT_EQ(0, listener->updates.size());
+//
+//    std::shared_ptr<LogEvent> event3 =
+//            buildPartialWakelockEvent(1000 /* uid */, "tag", false /*release*/);
+//    mgr.onLogEvent(*event3);
+//    EXPECT_EQ(0, listener->updates.size());
+//
+//    std::shared_ptr<LogEvent> event4 =
+//            buildPartialWakelockEvent(1000 /* uid */, "tag", false /*release*/);
+//    mgr.onLogEvent(*event4);
+//    EXPECT_EQ(1, listener->updates.size());
+//    EXPECT_EQ(1000, listener->updates[0].mKey.getValues()[0].mValue.int_value);
+//    EXPECT_EQ(0, listener->updates[0].mState);
+//}
+//
+///**
+// * Test a state atom with a reset state.
+// *
+// * If the reset state value is seen, every state in the map is set to the default
+// * state and every listener is notified.
+// */
+//TEST(StateTrackerTest, TestStateChangeReset) {
+//    sp<TestStateListener> listener = new TestStateListener();
+//    StateManager mgr;
+//    mgr.registerListener(android::util::BLE_SCAN_STATE_CHANGED, listener);
+//
+//    std::shared_ptr<LogEvent> event1 =
+//            buildBleScanEvent(1000 /* uid */, true /*acquire*/, false /*reset*/);
+//    mgr.onLogEvent(*event1);
+//    EXPECT_EQ(1, listener->updates.size());
+//    EXPECT_EQ(1000, listener->updates[0].mKey.getValues()[0].mValue.int_value);
+//    EXPECT_EQ(BleScanStateChanged::ON, listener->updates[0].mState);
+//    listener->updates.clear();
+//
+//    std::shared_ptr<LogEvent> event2 =
+//            buildBleScanEvent(2000 /* uid */, true /*acquire*/, false /*reset*/);
+//    mgr.onLogEvent(*event2);
+//    EXPECT_EQ(1, listener->updates.size());
+//    EXPECT_EQ(2000, listener->updates[0].mKey.getValues()[0].mValue.int_value);
+//    EXPECT_EQ(BleScanStateChanged::ON, listener->updates[0].mState);
+//    listener->updates.clear();
+//
+//    std::shared_ptr<LogEvent> event3 =
+//            buildBleScanEvent(2000 /* uid */, false /*acquire*/, true /*reset*/);
+//    mgr.onLogEvent(*event3);
+//    EXPECT_EQ(2, listener->updates.size());
+//    EXPECT_EQ(BleScanStateChanged::OFF, listener->updates[0].mState);
+//    EXPECT_EQ(BleScanStateChanged::OFF, listener->updates[1].mState);
+//}
+//
+///**
+// * Test StateManager's onLogEvent and StateListener's onStateChanged correctly
+// * updates listener for states without primary keys.
+// */
+//TEST(StateTrackerTest, TestStateChangeNoPrimaryFields) {
+//    sp<TestStateListener> listener1 = new TestStateListener();
+//    StateManager mgr;
+//    mgr.registerListener(android::util::SCREEN_STATE_CHANGED, listener1);
+//
+//    // log event
+//    std::shared_ptr<LogEvent> event =
+//            buildScreenEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON);
+//    mgr.onLogEvent(*event);
+//
+//    // check listener was updated
+//    EXPECT_EQ(1, listener1->updates.size());
+//    EXPECT_EQ(DEFAULT_DIMENSION_KEY, listener1->updates[0].mKey);
+//    EXPECT_EQ(2, listener1->updates[0].mState);
+//
+//    // check StateTracker was updated by querying for state
+//    HashableDimensionKey queryKey = DEFAULT_DIMENSION_KEY;
+//    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//              getStateInt(mgr, android::util::SCREEN_STATE_CHANGED, queryKey));
+//}
+//
+///**
+// * Test StateManager's onLogEvent and StateListener's onStateChanged correctly
+// * updates listener for states with one primary key.
+// */
+//TEST(StateTrackerTest, TestStateChangeOnePrimaryField) {
+//    sp<TestStateListener> listener1 = new TestStateListener();
+//    StateManager mgr;
+//    mgr.registerListener(android::util::UID_PROCESS_STATE_CHANGED, listener1);
+//
+//    // log event
+//    std::shared_ptr<LogEvent> event =
+//            buildUidProcessEvent(1000 /* uid */, android::app::ProcessStateEnum::PROCESS_STATE_TOP);
+//    mgr.onLogEvent(*event);
+//
+//    // check listener was updated
+//    EXPECT_EQ(1, listener1->updates.size());
+//    EXPECT_EQ(1000, listener1->updates[0].mKey.getValues()[0].mValue.int_value);
+//    EXPECT_EQ(1002, listener1->updates[0].mState);
+//
+//    // check StateTracker was updated by querying for state
+//    HashableDimensionKey queryKey;
+//    getUidProcessKey(1000 /* uid */, &queryKey);
+//    EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_TOP,
+//              getStateInt(mgr, android::util::UID_PROCESS_STATE_CHANGED, queryKey));
+//}
+//
+//TEST(StateTrackerTest, TestStateChangePrimaryFieldAttrChain) {
+//    sp<TestStateListener> listener1 = new TestStateListener();
+//    StateManager mgr;
+//    mgr.registerListener(android::util::WAKELOCK_STATE_CHANGED, listener1);
+//
+//    // Log event.
+//    std::shared_ptr<LogEvent> event =
+//            buildPartialWakelockEvent(1001 /* uid */, "tag1", true /* acquire */);
+//    mgr.onLogEvent(*event);
+//
+//    EXPECT_EQ(1, mgr.getStateTrackersCount());
+//    EXPECT_EQ(1, mgr.getListenersCount(android::util::WAKELOCK_STATE_CHANGED));
+//
+//    // Check listener was updated.
+//    EXPECT_EQ(1, listener1->updates.size());
+//    EXPECT_EQ(3, listener1->updates[0].mKey.getValues().size());
+//    EXPECT_EQ(1001, listener1->updates[0].mKey.getValues()[0].mValue.int_value);
+//    EXPECT_EQ(1, listener1->updates[0].mKey.getValues()[1].mValue.int_value);
+//    EXPECT_EQ("tag1", listener1->updates[0].mKey.getValues()[2].mValue.str_value);
+//    EXPECT_EQ(WakelockStateChanged::ACQUIRE, listener1->updates[0].mState);
+//
+//    // Check StateTracker was updated by querying for state.
+//    HashableDimensionKey queryKey;
+//    getPartialWakelockKey(1001 /* uid */, "tag1", &queryKey);
+//    EXPECT_EQ(WakelockStateChanged::ACQUIRE,
+//              getStateInt(mgr, android::util::WAKELOCK_STATE_CHANGED, queryKey));
+//
+//    // No state stored for this query key.
+//    HashableDimensionKey queryKey2;
+//    getPartialWakelockKey(1002 /* uid */, "tag1", &queryKey2);
+//    EXPECT_EQ(WakelockStateChanged::RELEASE,
+//              getStateInt(mgr, android::util::WAKELOCK_STATE_CHANGED, queryKey2));
+//
+//    // Partial query fails.
+//    HashableDimensionKey queryKey3;
+//    getPartialWakelockKey(1001 /* uid */, &queryKey3);
+//    EXPECT_EQ(WakelockStateChanged::RELEASE,
+//              getStateInt(mgr, android::util::WAKELOCK_STATE_CHANGED, queryKey3));
+//}
+//
+///**
+// * Test StateManager's onLogEvent and StateListener's onStateChanged correctly
+// * updates listener for states with multiple primary keys.
+// */
+//TEST(StateTrackerTest, TestStateChangeMultiplePrimaryFields) {
+//    sp<TestStateListener> listener1 = new TestStateListener();
+//    StateManager mgr;
+//    mgr.registerListener(android::util::OVERLAY_STATE_CHANGED, listener1);
+//
+//    // log event
+//    std::shared_ptr<LogEvent> event =
+//            buildOverlayEvent(1000 /* uid */, "package1", 1);  // state: ENTERED
+//    mgr.onLogEvent(*event);
+//
+//    // check listener was updated
+//    EXPECT_EQ(1, listener1->updates.size());
+//    EXPECT_EQ(1000, listener1->updates[0].mKey.getValues()[0].mValue.int_value);
+//    EXPECT_EQ(1, listener1->updates[0].mState);
+//
+//    // check StateTracker was updated by querying for state
+//    HashableDimensionKey queryKey;
+//    getOverlayKey(1000 /* uid */, "package1", &queryKey);
+//    EXPECT_EQ(OverlayStateChanged::ENTERED,
+//              getStateInt(mgr, android::util::OVERLAY_STATE_CHANGED, queryKey));
+//}
+//
+///**
+// * Test StateManager's onLogEvent and StateListener's onStateChanged
+// * when there is an error extracting state from log event. Listener is not
+// * updated of state change.
+// */
+//TEST(StateTrackerTest, TestStateChangeEventError) {
+//    sp<TestStateListener> listener1 = new TestStateListener();
+//    StateManager mgr;
+//    mgr.registerListener(android::util::OVERLAY_STATE_CHANGED, listener1);
+//
+//    // log event
+//    std::shared_ptr<LogEvent> event1 =
+//            buildIncorrectOverlayEvent(1000 /* uid */, "package1", 1 /* state */);
+//    std::shared_ptr<LogEvent> event2 = buildOverlayEventBadStateType(1001 /* uid */, "package2");
+//
+//    // check listener was updated
+//    mgr.onLogEvent(*event1);
+//    EXPECT_EQ(0, listener1->updates.size());
+//    mgr.onLogEvent(*event2);
+//    EXPECT_EQ(0, listener1->updates.size());
+//}
+//
+//TEST(StateTrackerTest, TestStateQuery) {
+//    sp<TestStateListener> listener1 = new TestStateListener();
+//    sp<TestStateListener> listener2 = new TestStateListener();
+//    sp<TestStateListener> listener3 = new TestStateListener();
+//    sp<TestStateListener> listener4 = new TestStateListener();
+//    StateManager mgr;
+//    mgr.registerListener(android::util::SCREEN_STATE_CHANGED, listener1);
+//    mgr.registerListener(android::util::UID_PROCESS_STATE_CHANGED, listener2);
+//    mgr.registerListener(android::util::OVERLAY_STATE_CHANGED, listener3);
+//    mgr.registerListener(android::util::WAKELOCK_STATE_CHANGED, listener4);
+//
+//    std::shared_ptr<LogEvent> event1 = buildUidProcessEvent(
+//            1000,
+//            android::app::ProcessStateEnum::PROCESS_STATE_TOP);  //  state value: 1002
+//    std::shared_ptr<LogEvent> event2 = buildUidProcessEvent(
+//            1001,
+//            android::app::ProcessStateEnum::PROCESS_STATE_FOREGROUND_SERVICE);  //  state value:
+//                                                                                //  1003
+//    std::shared_ptr<LogEvent> event3 = buildUidProcessEvent(
+//            1002,
+//            android::app::ProcessStateEnum::PROCESS_STATE_PERSISTENT);  //  state value: 1000
+//    std::shared_ptr<LogEvent> event4 = buildUidProcessEvent(
+//            1001,
+//            android::app::ProcessStateEnum::PROCESS_STATE_TOP);  //  state value: 1002
+//    std::shared_ptr<LogEvent> event5 =
+//            buildScreenEvent(android::view::DisplayStateEnum::DISPLAY_STATE_ON);
+//    std::shared_ptr<LogEvent> event6 =
+//            buildOverlayEvent(1000, "package1", OverlayStateChanged::ENTERED);
+//    std::shared_ptr<LogEvent> event7 =
+//            buildOverlayEvent(1000, "package2", OverlayStateChanged::EXITED);
+//    std::shared_ptr<LogEvent> event8 = buildPartialWakelockEvent(1005, "tag1", true);
+//    std::shared_ptr<LogEvent> event9 = buildPartialWakelockEvent(1005, "tag2", false);
+//
+//    mgr.onLogEvent(*event1);
+//    mgr.onLogEvent(*event2);
+//    mgr.onLogEvent(*event3);
+//    mgr.onLogEvent(*event5);
+//    mgr.onLogEvent(*event5);
+//    mgr.onLogEvent(*event6);
+//    mgr.onLogEvent(*event7);
+//    mgr.onLogEvent(*event8);
+//    mgr.onLogEvent(*event9);
+//
+//    // Query for UidProcessState of uid 1001
+//    HashableDimensionKey queryKey1;
+//    getUidProcessKey(1001, &queryKey1);
+//    EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_FOREGROUND_SERVICE,
+//              getStateInt(mgr, android::util::UID_PROCESS_STATE_CHANGED, queryKey1));
+//
+//    // Query for UidProcessState of uid 1004 - not in state map
+//    HashableDimensionKey queryKey2;
+//    getUidProcessKey(1004, &queryKey2);
+//    EXPECT_EQ(-1, getStateInt(mgr, android::util::UID_PROCESS_STATE_CHANGED,
+//                              queryKey2));  // default state
+//
+//    // Query for UidProcessState of uid 1001 - after change in state
+//    mgr.onLogEvent(*event4);
+//    EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_TOP,
+//              getStateInt(mgr, android::util::UID_PROCESS_STATE_CHANGED, queryKey1));
+//
+//    // Query for ScreenState
+//    EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+//              getStateInt(mgr, android::util::SCREEN_STATE_CHANGED, DEFAULT_DIMENSION_KEY));
+//
+//    // Query for OverlayState of uid 1000, package name "package2"
+//    HashableDimensionKey queryKey3;
+//    getOverlayKey(1000, "package2", &queryKey3);
+//    EXPECT_EQ(OverlayStateChanged::EXITED,
+//              getStateInt(mgr, android::util::OVERLAY_STATE_CHANGED, queryKey3));
+//
+//    // Query for WakelockState of uid 1005, tag 2
+//    HashableDimensionKey queryKey4;
+//    getPartialWakelockKey(1005, "tag2", &queryKey4);
+//    EXPECT_EQ(WakelockStateChanged::RELEASE,
+//              getStateInt(mgr, android::util::WAKELOCK_STATE_CHANGED, queryKey4));
+//
+//    // Query for WakelockState of uid 1005, tag 1
+//    HashableDimensionKey queryKey5;
+//    getPartialWakelockKey(1005, "tag1", &queryKey5);
+//    EXPECT_EQ(WakelockStateChanged::ACQUIRE,
+//              getStateInt(mgr, android::util::WAKELOCK_STATE_CHANGED, queryKey5));
+//}
 
 }  // namespace statsd
 }  // namespace os
diff --git a/cmds/statsd/tests/statsd_test_util.cpp b/cmds/statsd/tests/statsd_test_util.cpp
index db09ee9..2bfce9b 100644
--- a/cmds/statsd/tests/statsd_test_util.cpp
+++ b/cmds/statsd/tests/statsd_test_util.cpp
@@ -14,6 +14,11 @@
 
 #include "statsd_test_util.h"
 
+#include <aidl/android/util/StatsEventParcel.h>
+
+using aidl::android::util::StatsEventParcel;
+using std::shared_ptr;
+
 namespace android {
 namespace os {
 namespace statsd {
@@ -404,184 +409,185 @@
     return dimensions;
 }
 
-std::unique_ptr<LogEvent> CreateScreenStateChangedEvent(
-    const android::view::DisplayStateEnum state, uint64_t timestampNs) {
-    auto event = std::make_unique<LogEvent>(android::util::SCREEN_STATE_CHANGED, timestampNs);
-    EXPECT_TRUE(event->write(state));
-    event->init();
-    return event;
-}
-
-std::unique_ptr<LogEvent> CreateBatterySaverOnEvent(uint64_t timestampNs) {
-    auto event = std::make_unique<LogEvent>(
-        android::util::BATTERY_SAVER_MODE_STATE_CHANGED, timestampNs);
-    EXPECT_TRUE(event->write(BatterySaverModeStateChanged::ON));
-    event->init();
-    return event;
-}
-
-std::unique_ptr<LogEvent> CreateBatterySaverOffEvent(uint64_t timestampNs) {
-    auto event = std::make_unique<LogEvent>(
-        android::util::BATTERY_SAVER_MODE_STATE_CHANGED, timestampNs);
-    EXPECT_TRUE(event->write(BatterySaverModeStateChanged::OFF));
-    event->init();
-    return event;
-}
-
-std::unique_ptr<LogEvent> CreateScreenBrightnessChangedEvent(
-    int level, uint64_t timestampNs) {
-    auto event = std::make_unique<LogEvent>(android::util::SCREEN_BRIGHTNESS_CHANGED, timestampNs);
-    EXPECT_TRUE(event->write(level));
-    event->init();
-    return event;
-
-}
-
-std::unique_ptr<LogEvent> CreateScheduledJobStateChangedEvent(
-        const std::vector<AttributionNodeInternal>& attributions, const string& jobName,
-        const ScheduledJobStateChanged::State state, uint64_t timestampNs) {
-    auto event = std::make_unique<LogEvent>(android::util::SCHEDULED_JOB_STATE_CHANGED, timestampNs);
-    event->write(attributions);
-    event->write(jobName);
-    event->write(state);
-    event->init();
-    return event;
-}
-
-std::unique_ptr<LogEvent> CreateStartScheduledJobEvent(
-    const std::vector<AttributionNodeInternal>& attributions,
-    const string& name, uint64_t timestampNs) {
-    return CreateScheduledJobStateChangedEvent(
-            attributions, name, ScheduledJobStateChanged::STARTED, timestampNs);
-}
-
-// Create log event when scheduled job finishes.
-std::unique_ptr<LogEvent> CreateFinishScheduledJobEvent(
-    const std::vector<AttributionNodeInternal>& attributions,
-    const string& name, uint64_t timestampNs) {
-    return CreateScheduledJobStateChangedEvent(
-            attributions, name, ScheduledJobStateChanged::FINISHED, timestampNs);
-}
-
-std::unique_ptr<LogEvent> CreateWakelockStateChangedEvent(
-        const std::vector<AttributionNodeInternal>& attributions, const string& wakelockName,
-        const WakelockStateChanged::State state, uint64_t timestampNs) {
-    auto event = std::make_unique<LogEvent>(android::util::WAKELOCK_STATE_CHANGED, timestampNs);
-    event->write(attributions);
-    event->write(android::os::WakeLockLevelEnum::PARTIAL_WAKE_LOCK);
-    event->write(wakelockName);
-    event->write(state);
-    event->init();
-    return event;
-}
-
-std::unique_ptr<LogEvent> CreateAcquireWakelockEvent(
-        const std::vector<AttributionNodeInternal>& attributions, const string& wakelockName,
-        uint64_t timestampNs) {
-    return CreateWakelockStateChangedEvent(
-        attributions, wakelockName, WakelockStateChanged::ACQUIRE, timestampNs);
-}
-
-std::unique_ptr<LogEvent> CreateReleaseWakelockEvent(
-        const std::vector<AttributionNodeInternal>& attributions, const string& wakelockName,
-        uint64_t timestampNs) {
-    return CreateWakelockStateChangedEvent(
-        attributions, wakelockName, WakelockStateChanged::RELEASE, timestampNs);
-}
-
-std::unique_ptr<LogEvent> CreateActivityForegroundStateChangedEvent(
-    const int uid, const ActivityForegroundStateChanged::State state, uint64_t timestampNs) {
-    auto event = std::make_unique<LogEvent>(
-        android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, timestampNs);
-    event->write(uid);
-    event->write("pkg_name");
-    event->write("class_name");
-    event->write(state);
-    event->init();
-    return event;
-}
-
-std::unique_ptr<LogEvent> CreateMoveToBackgroundEvent(const int uid, uint64_t timestampNs) {
-    return CreateActivityForegroundStateChangedEvent(
-        uid, ActivityForegroundStateChanged::BACKGROUND, timestampNs);
-}
-
-std::unique_ptr<LogEvent> CreateMoveToForegroundEvent(const int uid, uint64_t timestampNs) {
-    return CreateActivityForegroundStateChangedEvent(
-        uid, ActivityForegroundStateChanged::FOREGROUND, timestampNs);
-}
-
-std::unique_ptr<LogEvent> CreateSyncStateChangedEvent(
-        const std::vector<AttributionNodeInternal>& attributions, const string& name,
-        const SyncStateChanged::State state, uint64_t timestampNs) {
-    auto event = std::make_unique<LogEvent>(android::util::SYNC_STATE_CHANGED, timestampNs);
-    event->write(attributions);
-    event->write(name);
-    event->write(state);
-    event->init();
-    return event;
-}
-
-std::unique_ptr<LogEvent> CreateSyncStartEvent(
-        const std::vector<AttributionNodeInternal>& attributions, const string& name,
-        uint64_t timestampNs) {
-    return CreateSyncStateChangedEvent(attributions, name, SyncStateChanged::ON, timestampNs);
-}
-
-std::unique_ptr<LogEvent> CreateSyncEndEvent(
-        const std::vector<AttributionNodeInternal>& attributions, const string& name,
-        uint64_t timestampNs) {
-    return CreateSyncStateChangedEvent(attributions, name, SyncStateChanged::OFF, timestampNs);
-}
-
-std::unique_ptr<LogEvent> CreateProcessLifeCycleStateChangedEvent(
-    const int uid, const ProcessLifeCycleStateChanged::State state, uint64_t timestampNs) {
-    auto logEvent = std::make_unique<LogEvent>(
-        android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, timestampNs);
-    logEvent->write(uid);
-    logEvent->write("");
-    logEvent->write(state);
-    logEvent->init();
-    return logEvent;
-}
-
-std::unique_ptr<LogEvent> CreateAppCrashEvent(const int uid, uint64_t timestampNs) {
-    return CreateProcessLifeCycleStateChangedEvent(
-        uid, ProcessLifeCycleStateChanged::CRASHED, timestampNs);
-}
-
-std::unique_ptr<LogEvent> CreateAppCrashOccurredEvent(const int uid, uint64_t timestampNs) {
-    auto event = std::make_unique<LogEvent>(android::util::APP_CRASH_OCCURRED, timestampNs);
-    event->write(uid);
-    event->write("eventType");
-    event->write("processName");
-    event->init();
-    return event;
-}
-
-std::unique_ptr<LogEvent> CreateIsolatedUidChangedEvent(
-    int isolatedUid, int hostUid, bool is_create, uint64_t timestampNs) {
-    auto logEvent = std::make_unique<LogEvent>(
-        android::util::ISOLATED_UID_CHANGED, timestampNs);
-    logEvent->write(hostUid);
-    logEvent->write(isolatedUid);
-    logEvent->write(is_create);
-    logEvent->init();
-    return logEvent;
-}
-
-std::unique_ptr<LogEvent> CreateUidProcessStateChangedEvent(
-        int uid, const android::app::ProcessStateEnum state, uint64_t timestampNs) {
-    auto event = std::make_unique<LogEvent>(android::util::UID_PROCESS_STATE_CHANGED, timestampNs);
-    event->write(uid);
-    event->write(state);
-    event->init();
-    return event;
-}
+// TODO(b/149590301): Update these helpers to use new socket schema.
+//std::unique_ptr<LogEvent> CreateScreenStateChangedEvent(
+//    const android::view::DisplayStateEnum state, uint64_t timestampNs) {
+//    auto event = std::make_unique<LogEvent>(android::util::SCREEN_STATE_CHANGED, timestampNs);
+//    EXPECT_TRUE(event->write(state));
+//    event->init();
+//    return event;
+//}
+//
+//std::unique_ptr<LogEvent> CreateBatterySaverOnEvent(uint64_t timestampNs) {
+//    auto event = std::make_unique<LogEvent>(
+//        android::util::BATTERY_SAVER_MODE_STATE_CHANGED, timestampNs);
+//    EXPECT_TRUE(event->write(BatterySaverModeStateChanged::ON));
+//    event->init();
+//    return event;
+//}
+//
+//std::unique_ptr<LogEvent> CreateBatterySaverOffEvent(uint64_t timestampNs) {
+//    auto event = std::make_unique<LogEvent>(
+//        android::util::BATTERY_SAVER_MODE_STATE_CHANGED, timestampNs);
+//    EXPECT_TRUE(event->write(BatterySaverModeStateChanged::OFF));
+//    event->init();
+//    return event;
+//}
+//
+//std::unique_ptr<LogEvent> CreateScreenBrightnessChangedEvent(
+//    int level, uint64_t timestampNs) {
+//    auto event = std::make_unique<LogEvent>(android::util::SCREEN_BRIGHTNESS_CHANGED, timestampNs);
+//    EXPECT_TRUE(event->write(level));
+//    event->init();
+//    return event;
+//
+//}
+//
+//std::unique_ptr<LogEvent> CreateScheduledJobStateChangedEvent(
+//        const std::vector<AttributionNodeInternal>& attributions, const string& jobName,
+//        const ScheduledJobStateChanged::State state, uint64_t timestampNs) {
+//    auto event = std::make_unique<LogEvent>(android::util::SCHEDULED_JOB_STATE_CHANGED, timestampNs);
+//    event->write(attributions);
+//    event->write(jobName);
+//    event->write(state);
+//    event->init();
+//    return event;
+//}
+//
+//std::unique_ptr<LogEvent> CreateStartScheduledJobEvent(
+//    const std::vector<AttributionNodeInternal>& attributions,
+//    const string& name, uint64_t timestampNs) {
+//    return CreateScheduledJobStateChangedEvent(
+//            attributions, name, ScheduledJobStateChanged::STARTED, timestampNs);
+//}
+//
+//// Create log event when scheduled job finishes.
+//std::unique_ptr<LogEvent> CreateFinishScheduledJobEvent(
+//    const std::vector<AttributionNodeInternal>& attributions,
+//    const string& name, uint64_t timestampNs) {
+//    return CreateScheduledJobStateChangedEvent(
+//            attributions, name, ScheduledJobStateChanged::FINISHED, timestampNs);
+//}
+//
+//std::unique_ptr<LogEvent> CreateWakelockStateChangedEvent(
+//        const std::vector<AttributionNodeInternal>& attributions, const string& wakelockName,
+//        const WakelockStateChanged::State state, uint64_t timestampNs) {
+//    auto event = std::make_unique<LogEvent>(android::util::WAKELOCK_STATE_CHANGED, timestampNs);
+//    event->write(attributions);
+//    event->write(android::os::WakeLockLevelEnum::PARTIAL_WAKE_LOCK);
+//    event->write(wakelockName);
+//    event->write(state);
+//    event->init();
+//    return event;
+//}
+//
+//std::unique_ptr<LogEvent> CreateAcquireWakelockEvent(
+//        const std::vector<AttributionNodeInternal>& attributions, const string& wakelockName,
+//        uint64_t timestampNs) {
+//    return CreateWakelockStateChangedEvent(
+//        attributions, wakelockName, WakelockStateChanged::ACQUIRE, timestampNs);
+//}
+//
+//std::unique_ptr<LogEvent> CreateReleaseWakelockEvent(
+//        const std::vector<AttributionNodeInternal>& attributions, const string& wakelockName,
+//        uint64_t timestampNs) {
+//    return CreateWakelockStateChangedEvent(
+//        attributions, wakelockName, WakelockStateChanged::RELEASE, timestampNs);
+//}
+//
+//std::unique_ptr<LogEvent> CreateActivityForegroundStateChangedEvent(
+//    const int uid, const ActivityForegroundStateChanged::State state, uint64_t timestampNs) {
+//    auto event = std::make_unique<LogEvent>(
+//        android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, timestampNs);
+//    event->write(uid);
+//    event->write("pkg_name");
+//    event->write("class_name");
+//    event->write(state);
+//    event->init();
+//    return event;
+//}
+//
+//std::unique_ptr<LogEvent> CreateMoveToBackgroundEvent(const int uid, uint64_t timestampNs) {
+//    return CreateActivityForegroundStateChangedEvent(
+//        uid, ActivityForegroundStateChanged::BACKGROUND, timestampNs);
+//}
+//
+//std::unique_ptr<LogEvent> CreateMoveToForegroundEvent(const int uid, uint64_t timestampNs) {
+//    return CreateActivityForegroundStateChangedEvent(
+//        uid, ActivityForegroundStateChanged::FOREGROUND, timestampNs);
+//}
+//
+//std::unique_ptr<LogEvent> CreateSyncStateChangedEvent(
+//        const std::vector<AttributionNodeInternal>& attributions, const string& name,
+//        const SyncStateChanged::State state, uint64_t timestampNs) {
+//    auto event = std::make_unique<LogEvent>(android::util::SYNC_STATE_CHANGED, timestampNs);
+//    event->write(attributions);
+//    event->write(name);
+//    event->write(state);
+//    event->init();
+//    return event;
+//}
+//
+//std::unique_ptr<LogEvent> CreateSyncStartEvent(
+//        const std::vector<AttributionNodeInternal>& attributions, const string& name,
+//        uint64_t timestampNs) {
+//    return CreateSyncStateChangedEvent(attributions, name, SyncStateChanged::ON, timestampNs);
+//}
+//
+//std::unique_ptr<LogEvent> CreateSyncEndEvent(
+//        const std::vector<AttributionNodeInternal>& attributions, const string& name,
+//        uint64_t timestampNs) {
+//    return CreateSyncStateChangedEvent(attributions, name, SyncStateChanged::OFF, timestampNs);
+//}
+//
+//std::unique_ptr<LogEvent> CreateProcessLifeCycleStateChangedEvent(
+//    const int uid, const ProcessLifeCycleStateChanged::State state, uint64_t timestampNs) {
+//    auto logEvent = std::make_unique<LogEvent>(
+//        android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, timestampNs);
+//    logEvent->write(uid);
+//    logEvent->write("");
+//    logEvent->write(state);
+//    logEvent->init();
+//    return logEvent;
+//}
+//
+//std::unique_ptr<LogEvent> CreateAppCrashEvent(const int uid, uint64_t timestampNs) {
+//    return CreateProcessLifeCycleStateChangedEvent(
+//        uid, ProcessLifeCycleStateChanged::CRASHED, timestampNs);
+//}
+//
+//std::unique_ptr<LogEvent> CreateAppCrashOccurredEvent(const int uid, uint64_t timestampNs) {
+//    auto event = std::make_unique<LogEvent>(android::util::APP_CRASH_OCCURRED, timestampNs);
+//    event->write(uid);
+//    event->write("eventType");
+//    event->write("processName");
+//    event->init();
+//    return event;
+//}
+//
+//std::unique_ptr<LogEvent> CreateIsolatedUidChangedEvent(
+//    int isolatedUid, int hostUid, bool is_create, uint64_t timestampNs) {
+//    auto logEvent = std::make_unique<LogEvent>(
+//        android::util::ISOLATED_UID_CHANGED, timestampNs);
+//    logEvent->write(hostUid);
+//    logEvent->write(isolatedUid);
+//    logEvent->write(is_create);
+//    logEvent->init();
+//    return logEvent;
+//}
+//
+//std::unique_ptr<LogEvent> CreateUidProcessStateChangedEvent(
+//        int uid, const android::app::ProcessStateEnum state, uint64_t timestampNs) {
+//    auto event = std::make_unique<LogEvent>(android::util::UID_PROCESS_STATE_CHANGED, timestampNs);
+//    event->write(uid);
+//    event->write(state);
+//    event->init();
+//    return event;
+//}
 
 sp<StatsLogProcessor> CreateStatsLogProcessor(const int64_t timeBaseNs, const int64_t currentTimeNs,
                                               const StatsdConfig& config, const ConfigKey& key,
-                                              const sp<IPullAtomCallback>& puller,
+                                              const shared_ptr<IPullAtomCallback>& puller,
                                               const int32_t atomTag) {
     sp<UidMap> uidMap = new UidMap();
     sp<StatsPullerManager> pullerManager = new StatsPullerManager();
@@ -590,11 +596,13 @@
                                                 puller);
     }
     sp<AlarmMonitor> anomalyAlarmMonitor =
-        new AlarmMonitor(1,  [](const sp<IStatsCompanionService>&, int64_t){},
-                [](const sp<IStatsCompanionService>&){});
+        new AlarmMonitor(1,
+                         [](const shared_ptr<IStatsCompanionService>&, int64_t){},
+                         [](const shared_ptr<IStatsCompanionService>&){});
     sp<AlarmMonitor> periodicAlarmMonitor =
-        new AlarmMonitor(1,  [](const sp<IStatsCompanionService>&, int64_t){},
-                [](const sp<IStatsCompanionService>&){});
+        new AlarmMonitor(1,
+                         [](const shared_ptr<IStatsCompanionService>&, int64_t){},
+                         [](const shared_ptr<IStatsCompanionService>&){});
     sp<StatsLogProcessor> processor =
             new StatsLogProcessor(uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor,
                                   timeBaseNs, [](const ConfigKey&) { return true; },
@@ -948,10 +956,10 @@
     }
 }
 
-binder::Status FakeSubsystemSleepCallback::onPullAtom(
-        int atomTag, const sp<IPullAtomResultReceiver>& resultReceiver) {
+Status FakeSubsystemSleepCallback::onPullAtom(int atomTag,
+        const shared_ptr<IPullAtomResultReceiver>& resultReceiver) {
     // Convert stats_events into StatsEventParcels.
-    std::vector<android::util::StatsEventParcel> parcels;
+    std::vector<StatsEventParcel> parcels;
     for (int i = 1; i < 3; i++) {
         AStatsEvent* event = AStatsEvent_obtain();
         AStatsEvent_setAtomId(event, atomTag);
@@ -965,7 +973,7 @@
         size_t size;
         uint8_t* buffer = AStatsEvent_getBuffer(event, &size);
 
-        android::util::StatsEventParcel p;
+        StatsEventParcel p;
         // vector.assign() creates a copy, but this is inevitable unless
         // stats_event.h/c uses a vector as opposed to a buffer.
         p.buffer.assign(buffer, buffer + size);
@@ -973,7 +981,7 @@
         AStatsEvent_write(event);
     }
     resultReceiver->pullFinished(atomTag, /*success=*/true, parcels);
-    return binder::Status::ok();
+    return Status::ok();
 }
 
 }  // namespace statsd
diff --git a/cmds/statsd/tests/statsd_test_util.h b/cmds/statsd/tests/statsd_test_util.h
index 576a491..c8326ee 100644
--- a/cmds/statsd/tests/statsd_test_util.h
+++ b/cmds/statsd/tests/statsd_test_util.h
@@ -14,9 +14,9 @@
 
 #pragma once
 
-#include <android/os/BnPullAtomCallback.h>
-#include <android/os/IPullAtomCallback.h>
-#include <android/os/IPullAtomResultReceiver.h>
+#include <aidl/android/os/BnPullAtomCallback.h>
+#include <aidl/android/os/IPullAtomCallback.h>
+#include <aidl/android/os/IPullAtomResultReceiver.h>
 #include <gtest/gtest.h>
 
 #include "frameworks/base/cmds/statsd/src/stats_log.pb.h"
@@ -31,8 +31,12 @@
 namespace os {
 namespace statsd {
 
+using ::aidl::android::os::BnPullAtomCallback;
+using ::aidl::android::os::IPullAtomCallback;
+using ::aidl::android::os::IPullAtomResultReceiver;
 using android::util::ProtoReader;
 using google::protobuf::RepeatedPtrField;
+using Status = ::ndk::ScopedAStatus;
 
 const int SCREEN_STATE_ATOM_ID = android::util::SCREEN_STATE_CHANGED;
 const int UID_PROCESS_STATE_ATOM_ID = android::util::UID_PROCESS_STATE_CHANGED;
@@ -230,7 +234,7 @@
 // Create a statsd log event processor upon the start time in seconds, config and key.
 sp<StatsLogProcessor> CreateStatsLogProcessor(const int64_t timeBaseNs, const int64_t currentTimeNs,
                                               const StatsdConfig& config, const ConfigKey& key,
-                                              const sp<IPullAtomCallback>& puller = nullptr,
+                                              const shared_ptr<IPullAtomCallback>& puller = nullptr,
                                               const int32_t atomTag = 0 /*for puller only*/);
 
 // Util function to sort the log events by timestamp.
@@ -285,8 +289,8 @@
 
 class FakeSubsystemSleepCallback : public BnPullAtomCallback {
 public:
-    binder::Status onPullAtom(int atomTag,
-                              const sp<IPullAtomResultReceiver>& resultReceiver) override;
+    Status onPullAtom(int atomTag,
+                      const shared_ptr<IPullAtomResultReceiver>& resultReceiver) override;
 };
 
 template <typename T>
diff --git a/cmds/statsd/tests/storage/StorageManager_test.cpp b/cmds/statsd/tests/storage/StorageManager_test.cpp
index b91e5a0..27a86e42 100644
--- a/cmds/statsd/tests/storage/StorageManager_test.cpp
+++ b/cmds/statsd/tests/storage/StorageManager_test.cpp
@@ -40,40 +40,12 @@
 
     bool result;
 
-    result = StorageManager::writeTrainInfo(trainInfo.trainVersionCode, trainInfo.trainName,
-                                            trainInfo.status, trainInfo.experimentIds);
+    result = StorageManager::writeTrainInfo(trainInfo);
 
     EXPECT_TRUE(result);
 
     InstallTrainInfo trainInfoResult;
-    result = StorageManager::readTrainInfo(trainInfoResult);
-    EXPECT_TRUE(result);
-
-    EXPECT_EQ(trainInfo.trainVersionCode, trainInfoResult.trainVersionCode);
-    EXPECT_EQ(trainInfo.trainName.size(), trainInfoResult.trainName.size());
-    EXPECT_EQ(trainInfo.trainName, trainInfoResult.trainName);
-    EXPECT_EQ(trainInfo.status, trainInfoResult.status);
-    EXPECT_EQ(trainInfo.experimentIds.size(), trainInfoResult.experimentIds.size());
-    EXPECT_EQ(trainInfo.experimentIds, trainInfoResult.experimentIds);
-}
-
-TEST(StorageManagerTest, TrainInfoReadWriteEmptyTrainNameTest) {
-    InstallTrainInfo trainInfo;
-    trainInfo.trainVersionCode = 12345;
-    trainInfo.trainName = "";
-    trainInfo.status = 1;
-    const char* expIds = "test_ids";
-    trainInfo.experimentIds.assign(expIds, expIds + strlen(expIds));
-
-    bool result;
-
-    result = StorageManager::writeTrainInfo(trainInfo.trainVersionCode, trainInfo.trainName,
-                                            trainInfo.status, trainInfo.experimentIds);
-
-    EXPECT_TRUE(result);
-
-    InstallTrainInfo trainInfoResult;
-    result = StorageManager::readTrainInfo(trainInfoResult);
+    result = StorageManager::readTrainInfo(trainInfo.trainName, trainInfoResult);
     EXPECT_TRUE(result);
 
     EXPECT_EQ(trainInfo.trainVersionCode, trainInfoResult.trainVersionCode);
@@ -94,13 +66,12 @@
 
     bool result;
 
-    result = StorageManager::writeTrainInfo(trainInfo.trainVersionCode, trainInfo.trainName,
-                                            trainInfo.status, trainInfo.experimentIds);
+    result = StorageManager::writeTrainInfo(trainInfo);
 
     EXPECT_TRUE(result);
 
     InstallTrainInfo trainInfoResult;
-    result = StorageManager::readTrainInfo(trainInfoResult);
+    result = StorageManager::readTrainInfo(trainInfo.trainName, trainInfoResult);
     EXPECT_TRUE(result);
 
     EXPECT_EQ(trainInfo.trainVersionCode, trainInfoResult.trainVersionCode);
diff --git a/config/boot-image-profile.txt b/config/boot-image-profile.txt
index 8982121..9f885aa 100644
--- a/config/boot-image-profile.txt
+++ b/config/boot-image-profile.txt
@@ -15,23 +15,7 @@
 #
 HSPLandroid/accessibilityservice/AccessibilityServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/accessibilityservice/AccessibilityServiceInfo;
 HSPLandroid/accessibilityservice/AccessibilityServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/accessibilityservice/AccessibilityServiceInfo;-><init>(Landroid/content/pm/ResolveInfo;Landroid/content/Context;)V
-PLandroid/accessibilityservice/AccessibilityServiceInfo;->equals(Ljava/lang/Object;)Z
-PLandroid/accessibilityservice/AccessibilityServiceInfo;->getCapabilities()I
-PLandroid/accessibilityservice/AccessibilityServiceInfo;->getComponentName()Landroid/content/ComponentName;
-HSPLandroid/accessibilityservice/AccessibilityServiceInfo;->getId()Ljava/lang/String;
-PLandroid/accessibilityservice/AccessibilityServiceInfo;->getResolveInfo()Landroid/content/pm/ResolveInfo;
 HSPLandroid/accessibilityservice/AccessibilityServiceInfo;->initFromParcel(Landroid/os/Parcel;)V
-PLandroid/accessibilityservice/AccessibilityServiceInfo;->isDirectBootAware()Z
-PLandroid/accessibilityservice/AccessibilityServiceInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/accounts/AbstractAccountAuthenticator$Transport;-><init>(Landroid/accounts/AbstractAccountAuthenticator;)V
-HSPLandroid/accounts/AbstractAccountAuthenticator$Transport;-><init>(Landroid/accounts/AbstractAccountAuthenticator;Landroid/accounts/AbstractAccountAuthenticator$1;)V
-HSPLandroid/accounts/AbstractAccountAuthenticator$Transport;->getAuthToken(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
-HPLandroid/accounts/AbstractAccountAuthenticator$Transport;->hasFeatures(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;[Ljava/lang/String;)V
-HSPLandroid/accounts/AbstractAccountAuthenticator;-><init>(Landroid/content/Context;)V
-HSPLandroid/accounts/AbstractAccountAuthenticator;->access$000(Landroid/accounts/AbstractAccountAuthenticator;)V
-HSPLandroid/accounts/AbstractAccountAuthenticator;->checkBinderPermission()V
-HSPLandroid/accounts/AbstractAccountAuthenticator;->getIBinder()Landroid/os/IBinder;
 HSPLandroid/accounts/Account$1;->createFromParcel(Landroid/os/Parcel;)Landroid/accounts/Account;
 HSPLandroid/accounts/Account$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/accounts/Account$1;->newArray(I)[Landroid/accounts/Account;
@@ -40,176 +24,90 @@
 HSPLandroid/accounts/Account;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/accounts/Account;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/accounts/Account;->equals(Ljava/lang/Object;)Z
-HPLandroid/accounts/Account;->getAccessId()Ljava/lang/String;
 HSPLandroid/accounts/Account;->hashCode()I
 HSPLandroid/accounts/Account;->toString()Ljava/lang/String;
 HSPLandroid/accounts/Account;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/accounts/AccountAndUser;-><init>(Landroid/accounts/Account;I)V
-HSPLandroid/accounts/AccountAndUser;->equals(Ljava/lang/Object;)Z
-HSPLandroid/accounts/AccountAndUser;->hashCode()I
-PLandroid/accounts/AccountAndUser;->toString()Ljava/lang/String;
-HSPLandroid/accounts/AccountAuthenticatorResponse$1;-><init>()V
-HSPLandroid/accounts/AccountAuthenticatorResponse;-><clinit>()V
-HSPLandroid/accounts/AccountAuthenticatorResponse;-><init>(Landroid/accounts/IAccountAuthenticatorResponse;)V
-HSPLandroid/accounts/AccountManager$10;->doWork()V
-HPLandroid/accounts/AccountManager$17;->run()V
-HPLandroid/accounts/AccountManager$18;-><init>(Landroid/accounts/AccountManager;Landroid/accounts/OnAccountsUpdateListener;[Landroid/accounts/Account;)V
-HSPLandroid/accounts/AccountManager$18;->run()V
-HSPLandroid/accounts/AccountManager$20;-><init>(Landroid/accounts/AccountManager;)V
-HSPLandroid/accounts/AccountManager$2;->bundleToResult(Landroid/os/Bundle;)Ljava/lang/Boolean;
-HSPLandroid/accounts/AccountManager$2;->bundleToResult(Landroid/os/Bundle;)Ljava/lang/Object;
-HSPLandroid/accounts/AccountManager$2;->doWork()V
-HSPLandroid/accounts/AccountManager$3;->bundleToResult(Landroid/os/Bundle;)Ljava/lang/Object;
-HSPLandroid/accounts/AccountManager$3;->bundleToResult(Landroid/os/Bundle;)[Landroid/accounts/Account;
-HSPLandroid/accounts/AccountManager$3;->doWork()V
+HSPLandroid/accounts/AccountManager$16;-><init>(Landroid/accounts/AccountManager;Landroid/accounts/OnAccountsUpdateListener;[Landroid/accounts/Account;)V
+HSPLandroid/accounts/AccountManager$16;->run()V
+HSPLandroid/accounts/AccountManager$18;-><init>(Landroid/accounts/AccountManager;)V
+HSPLandroid/accounts/AccountManager$8;-><init>(Landroid/accounts/AccountManager;Landroid/app/Activity;Landroid/os/Handler;Landroid/accounts/AccountManagerCallback;Landroid/accounts/Account;Ljava/lang/String;ZLandroid/os/Bundle;)V
+HSPLandroid/accounts/AccountManager$8;->doWork()V
 HSPLandroid/accounts/AccountManager$AmsTask$1;-><init>(Landroid/accounts/AccountManager;)V
+HSPLandroid/accounts/AccountManager$AmsTask$Response;-><init>(Landroid/accounts/AccountManager$AmsTask;)V
 HSPLandroid/accounts/AccountManager$AmsTask$Response;-><init>(Landroid/accounts/AccountManager$AmsTask;Landroid/accounts/AccountManager$1;)V
-HPLandroid/accounts/AccountManager$AmsTask$Response;->onError(ILjava/lang/String;)V
 HSPLandroid/accounts/AccountManager$AmsTask$Response;->onResult(Landroid/os/Bundle;)V
-HPLandroid/accounts/AccountManager$AmsTask;->access$800(Landroid/accounts/AccountManager$AmsTask;Ljava/lang/Throwable;)V
+HSPLandroid/accounts/AccountManager$AmsTask;-><init>(Landroid/accounts/AccountManager;Landroid/app/Activity;Landroid/os/Handler;Landroid/accounts/AccountManagerCallback;)V
 HSPLandroid/accounts/AccountManager$AmsTask;->done()V
 HSPLandroid/accounts/AccountManager$AmsTask;->getResult()Landroid/os/Bundle;
 HSPLandroid/accounts/AccountManager$AmsTask;->getResult()Ljava/lang/Object;
-HSPLandroid/accounts/AccountManager$AmsTask;->getResult(JLjava/util/concurrent/TimeUnit;)Landroid/os/Bundle;
-HSPLandroid/accounts/AccountManager$AmsTask;->getResult(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLandroid/accounts/AccountManager$AmsTask;->internalGetResult(Ljava/lang/Long;Ljava/util/concurrent/TimeUnit;)Landroid/os/Bundle;
 HSPLandroid/accounts/AccountManager$AmsTask;->set(Landroid/os/Bundle;)V
 HSPLandroid/accounts/AccountManager$AmsTask;->start()Landroid/accounts/AccountManagerFuture;
 HSPLandroid/accounts/AccountManager$BaseFutureTask$Response;->onResult(Landroid/os/Bundle;)V
-HSPLandroid/accounts/AccountManager$BaseFutureTask;->postRunnableToHandler(Ljava/lang/Runnable;)V
 HSPLandroid/accounts/AccountManager$BaseFutureTask;->startTask()V
-HSPLandroid/accounts/AccountManager$Future2Task$1;->run()V
 HSPLandroid/accounts/AccountManager$Future2Task;->done()V
-HSPLandroid/accounts/AccountManager$Future2Task;->getResult()Ljava/lang/Object;
-PLandroid/accounts/AccountManager$Future2Task;->getResult(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLandroid/accounts/AccountManager$Future2Task;->internalGetResult(Ljava/lang/Long;Ljava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLandroid/accounts/AccountManager;-><init>(Landroid/content/Context;Landroid/accounts/IAccountManager;)V
 HSPLandroid/accounts/AccountManager;->access$000(Landroid/accounts/AccountManager;)Landroid/accounts/IAccountManager;
-HSPLandroid/accounts/AccountManager;->access$100(Landroid/accounts/AccountManager;)Landroid/content/Context;
-HPLandroid/accounts/AccountManager;->access$200(Landroid/accounts/AccountManager;)Ljava/util/HashMap;
-HPLandroid/accounts/AccountManager;->access$300(Landroid/accounts/AccountManager;)Ljava/util/HashMap;
-HPLandroid/accounts/AccountManager;->access$700(Landroid/accounts/AccountManager;ILjava/lang/String;)Ljava/lang/Exception;
+HSPLandroid/accounts/AccountManager;->access$200(Landroid/accounts/AccountManager;)Ljava/util/HashMap;
+HSPLandroid/accounts/AccountManager;->access$300(Landroid/accounts/AccountManager;)Ljava/util/HashMap;
+HSPLandroid/accounts/AccountManager;->access$500(Landroid/accounts/AccountManager;)V
 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;
-HPLandroid/accounts/AccountManager;->convertErrorToException(ILjava/lang/String;)Ljava/lang/Exception;
 HSPLandroid/accounts/AccountManager;->ensureNotOnMainThread()V
 HSPLandroid/accounts/AccountManager;->get(Landroid/content/Context;)Landroid/accounts/AccountManager;
 HSPLandroid/accounts/AccountManager;->getAccounts()[Landroid/accounts/Account;
 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;->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;
-HSPLandroid/accounts/AccountManager;->getAuthenticatorTypes()[Landroid/accounts/AuthenticatorDescription;
-PLandroid/accounts/AccountManager;->getPassword(Landroid/accounts/Account;)Ljava/lang/String;
-HSPLandroid/accounts/AccountManager;->getPreviousName(Landroid/accounts/Account;)Ljava/lang/String;
-HPLandroid/accounts/AccountManager;->getUserData(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/accounts/AccountManager;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/UserHandle;)Z
-HSPLandroid/accounts/AccountManager;->hasFeatures(Landroid/accounts/Account;[Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;
-HSPLandroid/accounts/AccountManager;->invalidateAuthToken(Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/accounts/AccountManager;->peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/accounts/AccountManager;->postToHandler(Landroid/os/Handler;Landroid/accounts/OnAccountsUpdateListener;[Landroid/accounts/Account;)V
-PLandroid/accounts/AccountManager;->setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/accounts/AccountManager;->setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/accounts/AccountManagerInternal;-><init>()V
-HSPLandroid/accounts/AuthenticatorDescription$1;->createFromParcel(Landroid/os/Parcel;)Landroid/accounts/AuthenticatorDescription;
-HSPLandroid/accounts/AuthenticatorDescription$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/accounts/AuthenticatorDescription$1;->newArray(I)[Landroid/accounts/AuthenticatorDescription;
-HSPLandroid/accounts/AuthenticatorDescription$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/accounts/AuthenticatorDescription;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/accounts/AuthenticatorDescription;-><init>(Ljava/lang/String;)V
-HSPLandroid/accounts/AuthenticatorDescription;-><init>(Ljava/lang/String;Ljava/lang/String;IIIIZ)V
-HSPLandroid/accounts/AuthenticatorDescription;->equals(Ljava/lang/Object;)Z
-HSPLandroid/accounts/AuthenticatorDescription;->hashCode()I
-HSPLandroid/accounts/AuthenticatorDescription;->newKey(Ljava/lang/String;)Landroid/accounts/AuthenticatorDescription;
-PLandroid/accounts/AuthenticatorDescription;->toString()Ljava/lang/String;
-HPLandroid/accounts/AuthenticatorDescription;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/accounts/IAccountAuthenticator$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/accounts/IAccountAuthenticator$Stub$Proxy;->getAuthToken(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
-HPLandroid/accounts/IAccountAuthenticator$Stub$Proxy;->hasFeatures(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;[Ljava/lang/String;)V
-HSPLandroid/accounts/IAccountAuthenticator$Stub;-><init>()V
-HSPLandroid/accounts/IAccountAuthenticator$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/accounts/IAccountAuthenticator$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountAuthenticator;
-HSPLandroid/accounts/IAccountAuthenticator$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/accounts/IAccountAuthenticatorResponse$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/accounts/IAccountAuthenticatorResponse$Stub$Proxy;->onResult(Landroid/os/Bundle;)V
-HPLandroid/accounts/IAccountAuthenticatorResponse$Stub;-><init>()V
-HPLandroid/accounts/IAccountAuthenticatorResponse$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/accounts/IAccountAuthenticatorResponse$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountAuthenticatorResponse;
-PLandroid/accounts/IAccountAuthenticatorResponse$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/accounts/IAccountAuthenticatorResponse$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/accounts/AccountManager;->postToHandler(Landroid/os/Handler;Landroid/accounts/OnAccountsUpdateListener;[Landroid/accounts/Account;)V
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAccounts(Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAccountsAsUser(Ljava/lang/String;ILjava/lang/String;)[Landroid/accounts/Account;
-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
-HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAuthenticatorTypes(I)[Landroid/accounts/AuthenticatorDescription;
-PLandroid/accounts/IAccountManager$Stub$Proxy;->getPassword(Landroid/accounts/Account;)Ljava/lang/String;
-HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getPreviousName(Landroid/accounts/Account;)Ljava/lang/String;
-HPLandroid/accounts/IAccountManager$Stub$Proxy;->getUserData(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/accounts/IAccountManager$Stub$Proxy;->hasFeatures(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;[Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/accounts/IAccountManager$Stub$Proxy;->invalidateAuthToken(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;->onAccountAccessed(Ljava/lang/String;)V
-PLandroid/accounts/IAccountManager$Stub$Proxy;->peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;->registerAccountListener([Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/accounts/IAccountManager$Stub$Proxy;->setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/accounts/IAccountManager$Stub$Proxy;->setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/accounts/IAccountManager$Stub;-><init>()V
 HSPLandroid/accounts/IAccountManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountManager;
-PLandroid/accounts/IAccountManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/accounts/IAccountManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/accounts/IAccountManagerResponse$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/accounts/IAccountManagerResponse$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/accounts/IAccountManagerResponse$Stub$Proxy;->onError(ILjava/lang/String;)V
-HPLandroid/accounts/IAccountManagerResponse$Stub$Proxy;->onResult(Landroid/os/Bundle;)V
+HSPLandroid/accounts/IAccountManagerResponse$Stub;-><init>()V
 HSPLandroid/accounts/IAccountManagerResponse$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/accounts/IAccountManagerResponse$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountManagerResponse;
 HSPLandroid/accounts/IAccountManagerResponse$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/animation/AnimationHandler$1;-><init>(Landroid/animation/AnimationHandler;)V
 HSPLandroid/animation/AnimationHandler$1;->doFrame(J)V
-PLandroid/animation/AnimationHandler$MyFrameCallbackProvider;-><init>(Landroid/animation/AnimationHandler;)V
-PLandroid/animation/AnimationHandler$MyFrameCallbackProvider;-><init>(Landroid/animation/AnimationHandler;Landroid/animation/AnimationHandler$1;)V
+HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;-><init>(Landroid/animation/AnimationHandler;)V
+HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;-><init>(Landroid/animation/AnimationHandler;Landroid/animation/AnimationHandler$1;)V
 HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;->getFrameTime()J
 HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
 HSPLandroid/animation/AnimationHandler;-><init>()V
-PLandroid/animation/AnimationHandler;->access$000(Landroid/animation/AnimationHandler;)Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
-PLandroid/animation/AnimationHandler;->access$100(Landroid/animation/AnimationHandler;J)V
-PLandroid/animation/AnimationHandler;->access$200(Landroid/animation/AnimationHandler;)Ljava/util/ArrayList;
+HSPLandroid/animation/AnimationHandler;->access$000(Landroid/animation/AnimationHandler;)Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
+HSPLandroid/animation/AnimationHandler;->access$100(Landroid/animation/AnimationHandler;J)V
+HSPLandroid/animation/AnimationHandler;->access$200(Landroid/animation/AnimationHandler;)Ljava/util/ArrayList;
 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
 HSPLandroid/animation/AnimationHandler;->getAnimationCount()I
-PLandroid/animation/AnimationHandler;->getCallbackSize()I
-HPLandroid/animation/AnimationHandler;->getInstance()Landroid/animation/AnimationHandler;
-PLandroid/animation/AnimationHandler;->getProvider()Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
-PLandroid/animation/AnimationHandler;->isCallbackDue(Landroid/animation/AnimationHandler$AnimationFrameCallback;J)Z
+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;->removeCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;)V
-HSPLandroid/animation/AnimationHandler;->setProvider(Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;)V
-HPLandroid/animation/Animator$AnimatorConstantState;->getChangingConfigurations()I
+HSPLandroid/animation/Animator$AnimatorConstantState;-><init>(Landroid/animation/Animator;)V
 HSPLandroid/animation/Animator$AnimatorConstantState;->newInstance()Landroid/animation/Animator;
 HSPLandroid/animation/Animator$AnimatorConstantState;->newInstance()Ljava/lang/Object;
 HSPLandroid/animation/Animator$AnimatorListener;->onAnimationEnd(Landroid/animation/Animator;Z)V
 HSPLandroid/animation/Animator$AnimatorListener;->onAnimationStart(Landroid/animation/Animator;Z)V
 HSPLandroid/animation/Animator;-><init>()V
+HSPLandroid/animation/Animator;->access$002(Landroid/animation/Animator;Landroid/animation/Animator$AnimatorConstantState;)Landroid/animation/Animator$AnimatorConstantState;
 HSPLandroid/animation/Animator;->addListener(Landroid/animation/Animator$AnimatorListener;)V
-HPLandroid/animation/Animator;->addPauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V
 HSPLandroid/animation/Animator;->appendChangingConfigurations(I)V
 HSPLandroid/animation/Animator;->clone()Landroid/animation/Animator;
 HSPLandroid/animation/Animator;->createConstantState()Landroid/content/res/ConstantState;
 HSPLandroid/animation/Animator;->getChangingConfigurations()I
 HSPLandroid/animation/Animator;->getListeners()Ljava/util/ArrayList;
-PLandroid/animation/Animator;->pause()V
-HPLandroid/animation/Animator;->removeAllListeners()V
 HSPLandroid/animation/Animator;->removeListener(Landroid/animation/Animator$AnimatorListener;)V
-PLandroid/animation/Animator;->resume()V
-HPLandroid/animation/Animator;->setAllowRunningAsynchronously(Z)V
-HPLandroid/animation/AnimatorInflater$PathDataEvaluator;->evaluate(FLandroid/util/PathParser$PathData;Landroid/util/PathParser$PathData;)Landroid/util/PathParser$PathData;
-HPLandroid/animation/AnimatorInflater$PathDataEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/animation/Animator;->setAllowRunningAsynchronously(Z)V
+HSPLandroid/animation/AnimatorInflater;->createAnimatorFromXml(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Lorg/xmlpull/v1/XmlPullParser;F)Landroid/animation/Animator;
 HSPLandroid/animation/AnimatorInflater;->createAnimatorFromXml(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/animation/AnimatorSet;IF)Landroid/animation/Animator;
 HSPLandroid/animation/AnimatorInflater;->createStateListAnimatorFromXml(Landroid/content/Context;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/animation/StateListAnimator;
 HSPLandroid/animation/AnimatorInflater;->getChangingConfigs(Landroid/content/res/Resources;I)I
@@ -218,6 +116,7 @@
 HSPLandroid/animation/AnimatorInflater;->loadAnimator(Landroid/content/Context;I)Landroid/animation/Animator;
 HSPLandroid/animation/AnimatorInflater;->loadAnimator(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;IF)Landroid/animation/Animator;
 HSPLandroid/animation/AnimatorInflater;->loadAnimator(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;Landroid/animation/ValueAnimator;F)Landroid/animation/ValueAnimator;
+HSPLandroid/animation/AnimatorInflater;->loadObjectAnimator(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;F)Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/AnimatorInflater;->loadStateListAnimator(Landroid/content/Context;I)Landroid/animation/StateListAnimator;
 HSPLandroid/animation/AnimatorInflater;->parseAnimatorFromTypeArray(Landroid/animation/ValueAnimator;Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;F)V
 HSPLandroid/animation/AnimatorInflater;->setupObjectAnimator(Landroid/animation/ValueAnimator;Landroid/content/res/TypedArray;IF)V
@@ -225,28 +124,37 @@
 HSPLandroid/animation/AnimatorListenerAdapter;->onAnimationCancel(Landroid/animation/Animator;)V
 HSPLandroid/animation/AnimatorListenerAdapter;->onAnimationEnd(Landroid/animation/Animator;)V
 HSPLandroid/animation/AnimatorListenerAdapter;->onAnimationStart(Landroid/animation/Animator;)V
+HSPLandroid/animation/AnimatorSet$1;-><init>(Landroid/animation/AnimatorSet;)V
 HSPLandroid/animation/AnimatorSet$1;->onAnimationEnd(Landroid/animation/Animator;)V
+HSPLandroid/animation/AnimatorSet$2;-><init>(Landroid/animation/AnimatorSet;Landroid/animation/AnimatorSet;)V
 HSPLandroid/animation/AnimatorSet$2;->onAnimationEnd(Landroid/animation/Animator;)V
+HSPLandroid/animation/AnimatorSet$3;-><init>(Landroid/animation/AnimatorSet;)V
 HSPLandroid/animation/AnimatorSet$3;->compare(Landroid/animation/AnimatorSet$AnimationEvent;Landroid/animation/AnimatorSet$AnimationEvent;)I
 HSPLandroid/animation/AnimatorSet$3;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HPLandroid/animation/AnimatorSet$AnimationEvent;-><init>(Landroid/animation/AnimatorSet$Node;I)V
+HSPLandroid/animation/AnimatorSet$AnimationEvent;-><init>(Landroid/animation/AnimatorSet$Node;I)V
 HSPLandroid/animation/AnimatorSet$AnimationEvent;->getTime()J
-HPLandroid/animation/AnimatorSet$Builder;->after(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
+HSPLandroid/animation/AnimatorSet$Builder;-><init>(Landroid/animation/AnimatorSet;Landroid/animation/Animator;)V
 HSPLandroid/animation/AnimatorSet$Builder;->before(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
 HSPLandroid/animation/AnimatorSet$Builder;->with(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
+HSPLandroid/animation/AnimatorSet$Node;-><init>(Landroid/animation/Animator;)V
 HSPLandroid/animation/AnimatorSet$Node;->addChild(Landroid/animation/AnimatorSet$Node;)V
 HSPLandroid/animation/AnimatorSet$Node;->addParent(Landroid/animation/AnimatorSet$Node;)V
 HSPLandroid/animation/AnimatorSet$Node;->addParents(Ljava/util/ArrayList;)V
 HSPLandroid/animation/AnimatorSet$Node;->addSibling(Landroid/animation/AnimatorSet$Node;)V
 HSPLandroid/animation/AnimatorSet$Node;->clone()Landroid/animation/AnimatorSet$Node;
-HPLandroid/animation/AnimatorSet$SeekState;->getPlayTime()J
+HSPLandroid/animation/AnimatorSet$SeekState;-><init>(Landroid/animation/AnimatorSet;)V
+HSPLandroid/animation/AnimatorSet$SeekState;-><init>(Landroid/animation/AnimatorSet;Landroid/animation/AnimatorSet$1;)V
 HSPLandroid/animation/AnimatorSet$SeekState;->getPlayTimeNormalized()J
 HSPLandroid/animation/AnimatorSet$SeekState;->isActive()Z
 HSPLandroid/animation/AnimatorSet$SeekState;->reset()V
-HPLandroid/animation/AnimatorSet$SeekState;->setPlayTime(JZ)V
-HPLandroid/animation/AnimatorSet$SeekState;->updateSeekDirection(Z)V
 HSPLandroid/animation/AnimatorSet;-><init>()V
-HPLandroid/animation/AnimatorSet;->cancel()V
+HSPLandroid/animation/AnimatorSet;->access$100(Landroid/animation/AnimatorSet;)Landroid/util/ArrayMap;
+HSPLandroid/animation/AnimatorSet;->access$300(Landroid/animation/AnimatorSet;)Z
+HSPLandroid/animation/AnimatorSet;->access$402(Landroid/animation/AnimatorSet;Z)Z
+HSPLandroid/animation/AnimatorSet;->access$500(Landroid/animation/AnimatorSet;Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Node;
+HSPLandroid/animation/AnimatorSet;->addAnimationCallback(J)V
+HSPLandroid/animation/AnimatorSet;->addDummyListener()V
+HSPLandroid/animation/AnimatorSet;->cancel()V
 HSPLandroid/animation/AnimatorSet;->clone()Landroid/animation/Animator;
 HSPLandroid/animation/AnimatorSet;->clone()Landroid/animation/AnimatorSet;
 HSPLandroid/animation/AnimatorSet;->createDependencyGraph()V
@@ -257,171 +165,130 @@
 HSPLandroid/animation/AnimatorSet;->findSiblings(Landroid/animation/AnimatorSet$Node;Ljava/util/ArrayList;)V
 HSPLandroid/animation/AnimatorSet;->getChangingConfigurations()I
 HSPLandroid/animation/AnimatorSet;->getChildAnimations()Ljava/util/ArrayList;
-HPLandroid/animation/AnimatorSet;->getDuration()J
-HPLandroid/animation/AnimatorSet;->getInterpolator()Landroid/animation/TimeInterpolator;
-HPLandroid/animation/AnimatorSet;->getNodeForAnimation(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Node;
-HPLandroid/animation/AnimatorSet;->getStartDelay()J
-HPLandroid/animation/AnimatorSet;->getTotalDuration()J
+HSPLandroid/animation/AnimatorSet;->getNodeForAnimation(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Node;
+HSPLandroid/animation/AnimatorSet;->getPlayTimeForNode(JLandroid/animation/AnimatorSet$Node;)J
+HSPLandroid/animation/AnimatorSet;->getPlayTimeForNode(JLandroid/animation/AnimatorSet$Node;Z)J
+HSPLandroid/animation/AnimatorSet;->getStartDelay()J
+HSPLandroid/animation/AnimatorSet;->getTotalDuration()J
 HSPLandroid/animation/AnimatorSet;->handleAnimationEvents(IIJ)V
 HSPLandroid/animation/AnimatorSet;->initAnimation()V
 HSPLandroid/animation/AnimatorSet;->isEmptySet(Landroid/animation/AnimatorSet;)Z
 HSPLandroid/animation/AnimatorSet;->isInitialized()Z
-HSPLandroid/animation/AnimatorSet;->isRunning()Z
 HSPLandroid/animation/AnimatorSet;->isStarted()Z
 HSPLandroid/animation/AnimatorSet;->play(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
-HPLandroid/animation/AnimatorSet;->playSequentially(Ljava/util/List;)V
 HSPLandroid/animation/AnimatorSet;->playSequentially([Landroid/animation/Animator;)V
-HPLandroid/animation/AnimatorSet;->playTogether(Ljava/util/Collection;)V
 HSPLandroid/animation/AnimatorSet;->playTogether([Landroid/animation/Animator;)V
-HPLandroid/animation/AnimatorSet;->pulseAnimationFrame(J)Z
-HPLandroid/animation/AnimatorSet;->setCurrentPlayTime(J)V
-HPLandroid/animation/AnimatorSet;->setDuration(J)Landroid/animation/Animator;
+HSPLandroid/animation/AnimatorSet;->pulseAnimationFrame(J)Z
+HSPLandroid/animation/AnimatorSet;->pulseFrame(Landroid/animation/AnimatorSet$Node;J)V
+HSPLandroid/animation/AnimatorSet;->removeAnimationCallback()V
+HSPLandroid/animation/AnimatorSet;->removeDummyListener()V
 HSPLandroid/animation/AnimatorSet;->setDuration(J)Landroid/animation/AnimatorSet;
 HSPLandroid/animation/AnimatorSet;->setInterpolator(Landroid/animation/TimeInterpolator;)V
-HPLandroid/animation/AnimatorSet;->setStartDelay(J)V
 HSPLandroid/animation/AnimatorSet;->setTarget(Ljava/lang/Object;)V
 HSPLandroid/animation/AnimatorSet;->shouldPlayTogether()Z
-HPLandroid/animation/AnimatorSet;->skipToEndValue(Z)V
 HSPLandroid/animation/AnimatorSet;->sortAnimationEvents()V
 HSPLandroid/animation/AnimatorSet;->start()V
 HSPLandroid/animation/AnimatorSet;->start(ZZ)V
 HSPLandroid/animation/AnimatorSet;->startAnimation()V
-HPLandroid/animation/AnimatorSet;->startWithoutPulsing(Z)V
+HSPLandroid/animation/AnimatorSet;->startWithoutPulsing(Z)V
 HSPLandroid/animation/AnimatorSet;->updateAnimatorsDuration()V
 HSPLandroid/animation/AnimatorSet;->updatePlayTime(Landroid/animation/AnimatorSet$Node;Ljava/util/ArrayList;)V
-HPLandroid/animation/ArgbEvaluator;-><init>()V
-HPLandroid/animation/ArgbEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/animation/ArgbEvaluator;->getInstance()Landroid/animation/ArgbEvaluator;
-HPLandroid/animation/FloatEvaluator;-><init>()V
+HSPLandroid/animation/ArgbEvaluator;-><init>()V
+HSPLandroid/animation/ArgbEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 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
 HSPLandroid/animation/FloatKeyframeSet;->getValue(F)Ljava/lang/Object;
+HSPLandroid/animation/IntKeyframeSet;-><init>([Landroid/animation/Keyframe$IntKeyframe;)V
 HSPLandroid/animation/IntKeyframeSet;->clone()Landroid/animation/IntKeyframeSet;
 HSPLandroid/animation/IntKeyframeSet;->clone()Landroid/animation/Keyframes;
 HSPLandroid/animation/IntKeyframeSet;->getIntValue(F)I
+HSPLandroid/animation/Keyframe$FloatKeyframe;-><init>(F)V
 HSPLandroid/animation/Keyframe$FloatKeyframe;-><init>(FF)V
 HSPLandroid/animation/Keyframe$FloatKeyframe;->clone()Landroid/animation/Keyframe$FloatKeyframe;
 HSPLandroid/animation/Keyframe$FloatKeyframe;->clone()Landroid/animation/Keyframe;
 HSPLandroid/animation/Keyframe$FloatKeyframe;->getFloatValue()F
 HSPLandroid/animation/Keyframe$FloatKeyframe;->setValue(Ljava/lang/Object;)V
+HSPLandroid/animation/Keyframe$IntKeyframe;-><init>(FI)V
 HSPLandroid/animation/Keyframe$IntKeyframe;->clone()Landroid/animation/Keyframe$IntKeyframe;
 HSPLandroid/animation/Keyframe$IntKeyframe;->clone()Landroid/animation/Keyframe;
 HSPLandroid/animation/Keyframe$IntKeyframe;->getIntValue()I
-HSPLandroid/animation/Keyframe$IntKeyframe;->getValue()Ljava/lang/Object;
 HSPLandroid/animation/Keyframe$IntKeyframe;->setValue(Ljava/lang/Object;)V
-PLandroid/animation/Keyframe$ObjectKeyframe;-><init>(FLjava/lang/Object;)V
-HSPLandroid/animation/Keyframe$ObjectKeyframe;->clone()Landroid/animation/Keyframe$ObjectKeyframe;
-HSPLandroid/animation/Keyframe$ObjectKeyframe;->clone()Landroid/animation/Keyframe;
-HPLandroid/animation/Keyframe$ObjectKeyframe;->getValue()Ljava/lang/Object;
-HPLandroid/animation/Keyframe$ObjectKeyframe;->setValue(Ljava/lang/Object;)V
+HSPLandroid/animation/Keyframe$ObjectKeyframe;-><init>(FLjava/lang/Object;)V
+HSPLandroid/animation/Keyframe$ObjectKeyframe;->getValue()Ljava/lang/Object;
 HSPLandroid/animation/Keyframe;-><init>()V
 HSPLandroid/animation/Keyframe;->getFraction()F
 HSPLandroid/animation/Keyframe;->getInterpolator()Landroid/animation/TimeInterpolator;
 HSPLandroid/animation/Keyframe;->hasValue()Z
+HSPLandroid/animation/Keyframe;->ofFloat(F)Landroid/animation/Keyframe;
 HSPLandroid/animation/Keyframe;->ofFloat(FF)Landroid/animation/Keyframe;
-PLandroid/animation/Keyframe;->ofObject(FLjava/lang/Object;)Landroid/animation/Keyframe;
+HSPLandroid/animation/Keyframe;->ofInt(FI)Landroid/animation/Keyframe;
+HSPLandroid/animation/Keyframe;->ofObject(FLjava/lang/Object;)Landroid/animation/Keyframe;
+HSPLandroid/animation/Keyframe;->setInterpolator(Landroid/animation/TimeInterpolator;)V
 HSPLandroid/animation/Keyframe;->setValueWasSetOnStart(Z)V
 HSPLandroid/animation/Keyframe;->valueWasSetOnStart()Z
 HSPLandroid/animation/KeyframeSet;-><init>([Landroid/animation/Keyframe;)V
-HSPLandroid/animation/KeyframeSet;->clone()Landroid/animation/KeyframeSet;
-HSPLandroid/animation/KeyframeSet;->clone()Landroid/animation/Keyframes;
 HSPLandroid/animation/KeyframeSet;->getKeyframes()Ljava/util/List;
-HPLandroid/animation/KeyframeSet;->getValue(F)Ljava/lang/Object;
+HSPLandroid/animation/KeyframeSet;->getValue(F)Ljava/lang/Object;
 HSPLandroid/animation/KeyframeSet;->ofFloat([F)Landroid/animation/KeyframeSet;
 HSPLandroid/animation/KeyframeSet;->ofInt([I)Landroid/animation/KeyframeSet;
 HSPLandroid/animation/KeyframeSet;->ofObject([Ljava/lang/Object;)Landroid/animation/KeyframeSet;
-HPLandroid/animation/KeyframeSet;->ofPath(Landroid/graphics/Path;)Landroid/animation/PathKeyframes;
+HSPLandroid/animation/KeyframeSet;->ofPath(Landroid/graphics/Path;F)Landroid/animation/PathKeyframes;
 HSPLandroid/animation/KeyframeSet;->setEvaluator(Landroid/animation/TypeEvaluator;)V
-HSPLandroid/animation/LayoutTransition$1;->onAnimationEnd(Landroid/animation/Animator;)V
-HSPLandroid/animation/LayoutTransition$2;->onLayoutChange(Landroid/view/View;IIIIIIII)V
-HPLandroid/animation/LayoutTransition$3;->onAnimationCancel(Landroid/animation/Animator;)V
-HSPLandroid/animation/LayoutTransition$3;->onAnimationEnd(Landroid/animation/Animator;)V
-HSPLandroid/animation/LayoutTransition$3;->onAnimationStart(Landroid/animation/Animator;)V
-HPLandroid/animation/LayoutTransition$4;->onAnimationEnd(Landroid/animation/Animator;)V
-HPLandroid/animation/LayoutTransition$5;->onAnimationEnd(Landroid/animation/Animator;)V
-HSPLandroid/animation/LayoutTransition$CleanupCallback;->cleanup()V
-HSPLandroid/animation/LayoutTransition$CleanupCallback;->onPreDraw()Z
 HSPLandroid/animation/LayoutTransition;-><init>()V
-HPLandroid/animation/LayoutTransition;->access$1500(Landroid/animation/LayoutTransition;)Ljava/util/HashMap;
 HSPLandroid/animation/LayoutTransition;->addChild(Landroid/view/ViewGroup;Landroid/view/View;)V
 HSPLandroid/animation/LayoutTransition;->addChild(Landroid/view/ViewGroup;Landroid/view/View;Z)V
 HSPLandroid/animation/LayoutTransition;->addTransitionListener(Landroid/animation/LayoutTransition$TransitionListener;)V
-HSPLandroid/animation/LayoutTransition;->cancel()V
 HSPLandroid/animation/LayoutTransition;->cancel(I)V
-HSPLandroid/animation/LayoutTransition;->disableTransitionType(I)V
-HSPLandroid/animation/LayoutTransition;->enableTransitionType(I)V
-HPLandroid/animation/LayoutTransition;->hideChild(Landroid/view/ViewGroup;Landroid/view/View;I)V
 HSPLandroid/animation/LayoutTransition;->isChangingLayout()Z
-HSPLandroid/animation/LayoutTransition;->isRunning()Z
 HSPLandroid/animation/LayoutTransition;->layoutChange(Landroid/view/ViewGroup;)V
-HSPLandroid/animation/LayoutTransition;->removeChild(Landroid/view/ViewGroup;Landroid/view/View;)V
-HSPLandroid/animation/LayoutTransition;->removeChild(Landroid/view/ViewGroup;Landroid/view/View;Z)V
-HSPLandroid/animation/LayoutTransition;->removeTransitionListener(Landroid/animation/LayoutTransition$TransitionListener;)V
-HPLandroid/animation/LayoutTransition;->runAppearingTransition(Landroid/view/ViewGroup;Landroid/view/View;)V
-HSPLandroid/animation/LayoutTransition;->runChangeTransition(Landroid/view/ViewGroup;Landroid/view/View;I)V
-HPLandroid/animation/LayoutTransition;->runDisappearingTransition(Landroid/view/ViewGroup;Landroid/view/View;)V
-HPLandroid/animation/LayoutTransition;->setAnimateParentHierarchy(Z)V
-HPLandroid/animation/LayoutTransition;->setAnimator(ILandroid/animation/Animator;)V
-HPLandroid/animation/LayoutTransition;->setDuration(J)V
-HSPLandroid/animation/LayoutTransition;->setInterpolator(ILandroid/animation/TimeInterpolator;)V
-HSPLandroid/animation/LayoutTransition;->setStartDelay(IJ)V
-HSPLandroid/animation/LayoutTransition;->setupChangeAnimation(Landroid/view/ViewGroup;ILandroid/animation/Animator;JLandroid/view/View;)V
-HSPLandroid/animation/LayoutTransition;->showChild(Landroid/view/ViewGroup;Landroid/view/View;I)V
-HSPLandroid/animation/LayoutTransition;->startChangingAnimations()V
 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
 HSPLandroid/animation/ObjectAnimator;->clone()Landroid/animation/Animator;
+HSPLandroid/animation/ObjectAnimator;->clone()Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->getNameForTrace()Ljava/lang/String;
 HSPLandroid/animation/ObjectAnimator;->getPropertyName()Ljava/lang/String;
 HSPLandroid/animation/ObjectAnimator;->getTarget()Ljava/lang/Object;
-HPLandroid/animation/ObjectAnimator;->hasSameTargetAndProperties(Landroid/animation/Animator;)Z
 HSPLandroid/animation/ObjectAnimator;->initAnimation()V
 HSPLandroid/animation/ObjectAnimator;->isInitialized()Z
 HSPLandroid/animation/ObjectAnimator;->ofFloat(Ljava/lang/Object;Landroid/util/Property;[F)Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->ofFloat(Ljava/lang/Object;Ljava/lang/String;[F)Landroid/animation/ObjectAnimator;
-HPLandroid/animation/ObjectAnimator;->ofInt(Ljava/lang/Object;Landroid/util/Property;[I)Landroid/animation/ObjectAnimator;
-HPLandroid/animation/ObjectAnimator;->ofInt(Ljava/lang/Object;Ljava/lang/String;[I)Landroid/animation/ObjectAnimator;
-HPLandroid/animation/ObjectAnimator;->ofObject(Ljava/lang/Object;Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;
-HPLandroid/animation/ObjectAnimator;->ofObject(Ljava/lang/Object;Landroid/util/Property;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;
+HSPLandroid/animation/ObjectAnimator;->ofInt(Ljava/lang/Object;Ljava/lang/String;[I)Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->ofPropertyValuesHolder(Ljava/lang/Object;[Landroid/animation/PropertyValuesHolder;)Landroid/animation/ObjectAnimator;
-HPLandroid/animation/ObjectAnimator;->setAutoCancel(Z)V
 HSPLandroid/animation/ObjectAnimator;->setDuration(J)Landroid/animation/Animator;
 HSPLandroid/animation/ObjectAnimator;->setDuration(J)Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->setDuration(J)Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ObjectAnimator;->setFloatValues([F)V
-HPLandroid/animation/ObjectAnimator;->setIntValues([I)V
-HPLandroid/animation/ObjectAnimator;->setObjectValues([Ljava/lang/Object;)V
+HSPLandroid/animation/ObjectAnimator;->setIntValues([I)V
 HSPLandroid/animation/ObjectAnimator;->setProperty(Landroid/util/Property;)V
+HSPLandroid/animation/ObjectAnimator;->setPropertyName(Ljava/lang/String;)V
 HSPLandroid/animation/ObjectAnimator;->setTarget(Ljava/lang/Object;)V
-HSPLandroid/animation/ObjectAnimator;->setupEndValues()V
-HSPLandroid/animation/ObjectAnimator;->setupStartValues()V
-HPLandroid/animation/ObjectAnimator;->shouldAutoCancel(Landroid/animation/AnimationHandler$AnimationFrameCallback;)Z
+HSPLandroid/animation/ObjectAnimator;->shouldAutoCancel(Landroid/animation/AnimationHandler$AnimationFrameCallback;)Z
 HSPLandroid/animation/ObjectAnimator;->start()V
-HPLandroid/animation/PathKeyframes$1;->getFloatValue(F)F
-HPLandroid/animation/PathKeyframes$2;->getFloatValue(F)F
+HSPLandroid/animation/PathKeyframes$1;-><init>(Landroid/animation/PathKeyframes;)V
+HSPLandroid/animation/PathKeyframes$2;-><init>(Landroid/animation/PathKeyframes;)V
+HSPLandroid/animation/PathKeyframes$FloatKeyframesBase;-><init>()V
+HSPLandroid/animation/PathKeyframes$SimpleKeyframes;-><init>()V
+HSPLandroid/animation/PathKeyframes$SimpleKeyframes;-><init>(Landroid/animation/PathKeyframes$1;)V
 HSPLandroid/animation/PathKeyframes$SimpleKeyframes;->clone()Landroid/animation/Keyframes;
-HPLandroid/animation/PathKeyframes$SimpleKeyframes;->getKeyframes()Ljava/util/ArrayList;
-HPLandroid/animation/PathKeyframes$SimpleKeyframes;->getKeyframes()Ljava/util/List;
-HPLandroid/animation/PathKeyframes;-><init>(Landroid/graphics/Path;)V
 HSPLandroid/animation/PathKeyframes;-><init>(Landroid/graphics/Path;F)V
-HPLandroid/animation/PathKeyframes;->access$000()Ljava/util/ArrayList;
-HPLandroid/animation/PathKeyframes;->getKeyframes()Ljava/util/ArrayList;
-HPLandroid/animation/PathKeyframes;->getKeyframes()Ljava/util/List;
-HPLandroid/animation/PathKeyframes;->getValue(F)Ljava/lang/Object;
-HPLandroid/animation/PathKeyframes;->interpolateInRange(FII)Landroid/graphics/PointF;
+HSPLandroid/animation/PathKeyframes;->createXFloatKeyframes()Landroid/animation/Keyframes$FloatKeyframes;
+HSPLandroid/animation/PathKeyframes;->createYFloatKeyframes()Landroid/animation/Keyframes$FloatKeyframes;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;-><init>(Landroid/util/Property;[F)V
-PLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;-><init>(Ljava/lang/String;[F)V
+HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;-><init>(Ljava/lang/String;Landroid/animation/Keyframes$FloatKeyframes;)V
+HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;-><init>(Ljava/lang/String;[F)V
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->calculateValue(F)V
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder;
-HPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->getAnimatedValue()Ljava/lang/Object;
+HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->getAnimatedValue()Ljava/lang/Object;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setFloatValues([F)V
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setProperty(Landroid/util/Property;)V
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setupSetter(Ljava/lang/Class;)V
+HSPLandroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;-><init>(Ljava/lang/String;[I)V
 HSPLandroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;->calculateValue(F)V
 HSPLandroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder;
@@ -432,12 +299,16 @@
 HSPLandroid/animation/PropertyValuesHolder$PropertyValues;-><init>()V
 HSPLandroid/animation/PropertyValuesHolder;-><init>(Landroid/util/Property;)V
 HSPLandroid/animation/PropertyValuesHolder;-><init>(Landroid/util/Property;Landroid/animation/PropertyValuesHolder$1;)V
-PLandroid/animation/PropertyValuesHolder;-><init>(Ljava/lang/String;)V
+HSPLandroid/animation/PropertyValuesHolder;-><init>(Ljava/lang/String;)V
 HSPLandroid/animation/PropertyValuesHolder;-><init>(Ljava/lang/String;Landroid/animation/PropertyValuesHolder$1;)V
-HPLandroid/animation/PropertyValuesHolder;->calculateValue(F)V
+HSPLandroid/animation/PropertyValuesHolder;->access$200(Ljava/lang/Object;JI)V
+HSPLandroid/animation/PropertyValuesHolder;->access$300(Ljava/lang/Class;Ljava/lang/String;)J
+HSPLandroid/animation/PropertyValuesHolder;->access$400(Ljava/lang/Object;JF)V
+HSPLandroid/animation/PropertyValuesHolder;->access$500(Ljava/lang/Class;Ljava/lang/String;)J
+HSPLandroid/animation/PropertyValuesHolder;->calculateValue(F)V
 HSPLandroid/animation/PropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder;->convertBack(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/animation/PropertyValuesHolder;->getAnimatedValue()Ljava/lang/Object;
+HSPLandroid/animation/PropertyValuesHolder;->getAnimatedValue()Ljava/lang/Object;
 HSPLandroid/animation/PropertyValuesHolder;->getMethodName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/animation/PropertyValuesHolder;->getPropertyFunction(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/reflect/Method;
 HSPLandroid/animation/PropertyValuesHolder;->getPropertyName()Ljava/lang/String;
@@ -446,27 +317,28 @@
 HSPLandroid/animation/PropertyValuesHolder;->init()V
 HSPLandroid/animation/PropertyValuesHolder;->ofFloat(Landroid/util/Property;[F)Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder;->ofFloat(Ljava/lang/String;[F)Landroid/animation/PropertyValuesHolder;
+HSPLandroid/animation/PropertyValuesHolder;->ofInt(Ljava/lang/String;[I)Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder;->ofKeyframes(Ljava/lang/String;Landroid/animation/Keyframes;)Landroid/animation/PropertyValuesHolder;
-HPLandroid/animation/PropertyValuesHolder;->ofObject(Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;
-PLandroid/animation/PropertyValuesHolder;->ofObject(Ljava/lang/String;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;
-HPLandroid/animation/PropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V
-HPLandroid/animation/PropertyValuesHolder;->setConverter(Landroid/animation/TypeConverter;)V
-PLandroid/animation/PropertyValuesHolder;->setEvaluator(Landroid/animation/TypeEvaluator;)V
+HSPLandroid/animation/PropertyValuesHolder;->ofObject(Ljava/lang/String;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;
+HSPLandroid/animation/PropertyValuesHolder;->setEvaluator(Landroid/animation/TypeEvaluator;)V
 HSPLandroid/animation/PropertyValuesHolder;->setFloatValues([F)V
-PLandroid/animation/PropertyValuesHolder;->setObjectValues([Ljava/lang/Object;)V
-HSPLandroid/animation/PropertyValuesHolder;->setProperty(Landroid/util/Property;)V
+HSPLandroid/animation/PropertyValuesHolder;->setIntValues([I)V
+HSPLandroid/animation/PropertyValuesHolder;->setObjectValues([Ljava/lang/Object;)V
 HSPLandroid/animation/PropertyValuesHolder;->setPropertyName(Ljava/lang/String;)V
-HSPLandroid/animation/PropertyValuesHolder;->setupEndValue(Ljava/lang/Object;)V
+HSPLandroid/animation/PropertyValuesHolder;->setupGetter(Ljava/lang/Class;)V
 HSPLandroid/animation/PropertyValuesHolder;->setupSetterAndGetter(Ljava/lang/Object;)V
 HSPLandroid/animation/PropertyValuesHolder;->setupSetterOrGetter(Ljava/lang/Class;Ljava/util/HashMap;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/reflect/Method;
-HSPLandroid/animation/PropertyValuesHolder;->setupStartValue(Ljava/lang/Object;)V
-HSPLandroid/animation/PropertyValuesHolder;->setupValue(Ljava/lang/Object;Landroid/animation/Keyframe;)V
-HSPLandroid/animation/RectEvaluator;-><init>(Landroid/graphics/Rect;)V
+HSPLandroid/animation/StateListAnimator$1;-><init>(Landroid/animation/StateListAnimator;)V
 HSPLandroid/animation/StateListAnimator$1;->onAnimationEnd(Landroid/animation/Animator;)V
-HPLandroid/animation/StateListAnimator$StateListAnimatorConstantState;->getChangingConfigurations()I
+HSPLandroid/animation/StateListAnimator$StateListAnimatorConstantState;-><init>(Landroid/animation/StateListAnimator;)V
 HSPLandroid/animation/StateListAnimator$StateListAnimatorConstantState;->newInstance()Landroid/animation/StateListAnimator;
 HSPLandroid/animation/StateListAnimator$StateListAnimatorConstantState;->newInstance()Ljava/lang/Object;
+HSPLandroid/animation/StateListAnimator$Tuple;-><init>([ILandroid/animation/Animator;)V
+HSPLandroid/animation/StateListAnimator$Tuple;-><init>([ILandroid/animation/Animator;Landroid/animation/StateListAnimator$1;)V
 HSPLandroid/animation/StateListAnimator;-><init>()V
+HSPLandroid/animation/StateListAnimator;->access$000(Landroid/animation/StateListAnimator;)Landroid/animation/Animator;
+HSPLandroid/animation/StateListAnimator;->access$002(Landroid/animation/StateListAnimator;Landroid/animation/Animator;)Landroid/animation/Animator;
+HSPLandroid/animation/StateListAnimator;->access$202(Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator$StateListAnimatorConstantState;)Landroid/animation/StateListAnimator$StateListAnimatorConstantState;
 HSPLandroid/animation/StateListAnimator;->addState([ILandroid/animation/Animator;)V
 HSPLandroid/animation/StateListAnimator;->appendChangingConfigurations(I)V
 HSPLandroid/animation/StateListAnimator;->clearTarget()V
@@ -474,24 +346,19 @@
 HSPLandroid/animation/StateListAnimator;->createConstantState()Landroid/content/res/ConstantState;
 HSPLandroid/animation/StateListAnimator;->getChangingConfigurations()I
 HSPLandroid/animation/StateListAnimator;->getTarget()Landroid/view/View;
+HSPLandroid/animation/StateListAnimator;->initAnimatorListener()V
 HSPLandroid/animation/StateListAnimator;->jumpToCurrentState()V
 HSPLandroid/animation/StateListAnimator;->setChangingConfigurations(I)V
 HSPLandroid/animation/StateListAnimator;->setState([I)V
 HSPLandroid/animation/StateListAnimator;->setTarget(Landroid/view/View;)V
-HSPLandroid/animation/TimeAnimator;-><init>()V
-HPLandroid/animation/TimeAnimator;->animateBasedOnTime(J)Z
-HPLandroid/animation/TimeAnimator;->initAnimation()V
-HPLandroid/animation/TimeAnimator;->setCurrentPlayTime(J)V
-HSPLandroid/animation/TimeAnimator;->setTimeListener(Landroid/animation/TimeAnimator$TimeListener;)V
-HPLandroid/animation/TimeAnimator;->start()V
+HSPLandroid/animation/StateListAnimator;->start(Landroid/animation/StateListAnimator$Tuple;)V
 HSPLandroid/animation/ValueAnimator;-><init>()V
-PLandroid/animation/ValueAnimator;->addAnimationCallback(J)V
+HSPLandroid/animation/ValueAnimator;->addAnimationCallback(J)V
 HSPLandroid/animation/ValueAnimator;->addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V
 HSPLandroid/animation/ValueAnimator;->animateBasedOnTime(J)Z
 HSPLandroid/animation/ValueAnimator;->animateValue(F)V
-HSPLandroid/animation/ValueAnimator;->areAnimatorsEnabled()Z
 HSPLandroid/animation/ValueAnimator;->cancel()V
-HPLandroid/animation/ValueAnimator;->clampFraction(F)F
+HSPLandroid/animation/ValueAnimator;->clampFraction(F)F
 HSPLandroid/animation/ValueAnimator;->clone()Landroid/animation/Animator;
 HSPLandroid/animation/ValueAnimator;->clone()Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->doAnimationFrame(J)Z
@@ -501,325 +368,219 @@
 HSPLandroid/animation/ValueAnimator;->getAnimatedValue()Ljava/lang/Object;
 HSPLandroid/animation/ValueAnimator;->getAnimationHandler()Landroid/animation/AnimationHandler;
 HSPLandroid/animation/ValueAnimator;->getCurrentAnimationsCount()I
-HPLandroid/animation/ValueAnimator;->getCurrentIteration(F)I
-HPLandroid/animation/ValueAnimator;->getCurrentIterationFraction(FZ)F
-HPLandroid/animation/ValueAnimator;->getCurrentPlayTime()J
+HSPLandroid/animation/ValueAnimator;->getCurrentIteration(F)I
+HSPLandroid/animation/ValueAnimator;->getCurrentIterationFraction(FZ)F
 HSPLandroid/animation/ValueAnimator;->getDuration()J
 HSPLandroid/animation/ValueAnimator;->getDurationScale()F
 HSPLandroid/animation/ValueAnimator;->getInterpolator()Landroid/animation/TimeInterpolator;
 HSPLandroid/animation/ValueAnimator;->getNameForTrace()Ljava/lang/String;
 HSPLandroid/animation/ValueAnimator;->getRepeatCount()I
 HSPLandroid/animation/ValueAnimator;->getRepeatMode()I
-PLandroid/animation/ValueAnimator;->getScaledDuration()J
+HSPLandroid/animation/ValueAnimator;->getScaledDuration()J
 HSPLandroid/animation/ValueAnimator;->getStartDelay()J
 HSPLandroid/animation/ValueAnimator;->getTotalDuration()J
 HSPLandroid/animation/ValueAnimator;->getValues()[Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/ValueAnimator;->initAnimation()V
 HSPLandroid/animation/ValueAnimator;->isInitialized()Z
-PLandroid/animation/ValueAnimator;->isPulsingInternal()Z
+HSPLandroid/animation/ValueAnimator;->isPulsingInternal()Z
 HSPLandroid/animation/ValueAnimator;->isRunning()Z
 HSPLandroid/animation/ValueAnimator;->isStarted()Z
 HSPLandroid/animation/ValueAnimator;->notifyStartListeners()V
-HPLandroid/animation/ValueAnimator;->ofArgb([I)Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->ofFloat([F)Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->ofInt([I)Landroid/animation/ValueAnimator;
-PLandroid/animation/ValueAnimator;->overrideDurationScale(F)V
-PLandroid/animation/ValueAnimator;->pause()V
 HSPLandroid/animation/ValueAnimator;->pulseAnimationFrame(J)Z
-PLandroid/animation/ValueAnimator;->removeAnimationCallback()V
-PLandroid/animation/ValueAnimator;->resolveDurationScale()F
-PLandroid/animation/ValueAnimator;->resume()V
+HSPLandroid/animation/ValueAnimator;->removeAnimationCallback()V
+HSPLandroid/animation/ValueAnimator;->resolveDurationScale()F
 HSPLandroid/animation/ValueAnimator;->setAllowRunningAsynchronously(Z)V
 HSPLandroid/animation/ValueAnimator;->setCurrentFraction(F)V
 HSPLandroid/animation/ValueAnimator;->setCurrentPlayTime(J)V
 HSPLandroid/animation/ValueAnimator;->setDuration(J)Landroid/animation/Animator;
 HSPLandroid/animation/ValueAnimator;->setDuration(J)Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->setDurationScale(F)V
-PLandroid/animation/ValueAnimator;->setEvaluator(Landroid/animation/TypeEvaluator;)V
+HSPLandroid/animation/ValueAnimator;->setEvaluator(Landroid/animation/TypeEvaluator;)V
 HSPLandroid/animation/ValueAnimator;->setFloatValues([F)V
 HSPLandroid/animation/ValueAnimator;->setIntValues([I)V
 HSPLandroid/animation/ValueAnimator;->setInterpolator(Landroid/animation/TimeInterpolator;)V
-PLandroid/animation/ValueAnimator;->setObjectValues([Ljava/lang/Object;)V
 HSPLandroid/animation/ValueAnimator;->setRepeatCount(I)V
 HSPLandroid/animation/ValueAnimator;->setRepeatMode(I)V
 HSPLandroid/animation/ValueAnimator;->setStartDelay(J)V
 HSPLandroid/animation/ValueAnimator;->setValues([Landroid/animation/PropertyValuesHolder;)V
 HSPLandroid/animation/ValueAnimator;->shouldPlayBackward(IZ)Z
-HPLandroid/animation/ValueAnimator;->skipToEndValue(Z)V
+HSPLandroid/animation/ValueAnimator;->skipToEndValue(Z)V
 HSPLandroid/animation/ValueAnimator;->start()V
 HSPLandroid/animation/ValueAnimator;->start(Z)V
 HSPLandroid/animation/ValueAnimator;->startAnimation()V
 HSPLandroid/animation/ValueAnimator;->startWithoutPulsing(Z)V
-HSPLandroid/apex/ApexInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/apex/ApexInfo;
-HSPLandroid/apex/ApexInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/apex/ApexInfo$1;->newArray(I)[Landroid/apex/ApexInfo;
-HSPLandroid/apex/ApexInfo$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/apex/ApexInfo;-><init>()V
-HSPLandroid/apex/ApexInfo;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/apex/ApexSessionInfo$1;-><init>()V
-PLandroid/apex/ApexSessionInfo$1;->newArray(I)[Landroid/apex/ApexSessionInfo;
-PLandroid/apex/ApexSessionInfo$1;->newArray(I)[Ljava/lang/Object;
-PLandroid/apex/ApexSessionInfo;-><clinit>()V
-HSPLandroid/apex/IApexService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/apex/IApexService$Stub$Proxy;->getActivePackages()[Landroid/apex/ApexInfo;
-HSPLandroid/apex/IApexService$Stub$Proxy;->getAllPackages()[Landroid/apex/ApexInfo;
-PLandroid/apex/IApexService$Stub$Proxy;->getSessions()[Landroid/apex/ApexSessionInfo;
-HSPLandroid/apex/IApexService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/apex/IApexService;
+HSPLandroid/app/-$$Lambda$ActivityThread$A4ykhsPb8qV3ffTqpQDklHSMDJ0;-><init>(Landroid/app/ActivityThread;)V
 HSPLandroid/app/-$$Lambda$ActivityThread$A4ykhsPb8qV3ffTqpQDklHSMDJ0;->run()V
+HSPLandroid/app/-$$Lambda$ActivityThread$ActivityClientRecord$HOrG1qglSjSUHSjKBn2rXtX0gGg;-><init>(Landroid/app/ActivityThread$ActivityClientRecord;)V
 HSPLandroid/app/-$$Lambda$ActivityThread$ActivityClientRecord$HOrG1qglSjSUHSjKBn2rXtX0gGg;->onConfigurationChanged(Landroid/content/res/Configuration;I)V
 HSPLandroid/app/-$$Lambda$ActivityThread$ApplicationThread$tUGFX7CUhzB4Pg5wFd5yeqOnu38;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/app/-$$Lambda$ActivityThread$Wg40iAoNYFxps_KmrqtgptTB054;-><init>(Landroid/app/ActivityThread;)V
 HSPLandroid/app/-$$Lambda$ActivityThread$Wg40iAoNYFxps_KmrqtgptTB054;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-PLandroid/app/-$$Lambda$AppOpsManager$4Zbi7CSLEt0nvOmfJBVYtJkauTQ;-><init>(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V
-PLandroid/app/-$$Lambda$AppOpsManager$4Zbi7CSLEt0nvOmfJBVYtJkauTQ;->onResult(Landroid/os/Bundle;)V
-PLandroid/app/-$$Lambda$AppOpsManager$HistoricalOp$DkVcBvqB32SMHlxw0sWQPh3GL1A;-><init>(Landroid/app/AppOpsManager$HistoricalOp;)V
-HPLandroid/app/-$$Lambda$AppOpsManager$HistoricalOp$DkVcBvqB32SMHlxw0sWQPh3GL1A;->get()Ljava/lang/Object;
-PLandroid/app/-$$Lambda$AppOpsManager$HistoricalOp$HUOLFYs8TiaQIOXcrq6JzjxA6gs;-><init>(Landroid/app/AppOpsManager$HistoricalOp;)V
-HPLandroid/app/-$$Lambda$AppOpsManager$HistoricalOp$HUOLFYs8TiaQIOXcrq6JzjxA6gs;->get()Ljava/lang/Object;
-PLandroid/app/-$$Lambda$AppOpsManager$HistoricalOp$Vs6pDL0wjOBTquwNnreWVbPQrn4;-><init>(Landroid/app/AppOpsManager$HistoricalOp;)V
-HPLandroid/app/-$$Lambda$AppOpsManager$HistoricalOp$Vs6pDL0wjOBTquwNnreWVbPQrn4;->get()Ljava/lang/Object;
-HSPLandroid/app/-$$Lambda$AppOpsManager$OpEntry$VkVF13kpgTRuS3y_5H442ukf4lY;-><init>(I)V
-HSPLandroid/app/-$$Lambda$AppOpsManager$OpEntry$VkVF13kpgTRuS3y_5H442ukf4lY;->applyAsLong(Ljava/lang/Object;)J
-HSPLandroid/app/-$$Lambda$AppOpsManager$OpEntry$kdehJT0Vyrquji7c4qSeRkpnvBU;-><init>(III)V
-HSPLandroid/app/-$$Lambda$AppOpsManager$OpEntry$kdehJT0Vyrquji7c4qSeRkpnvBU;->applyAsLong(Ljava/lang/Object;)J
-HSPLandroid/app/-$$Lambda$AppOpsManager$OpEntry$oJrIzD9nj7b4wauCj0IMv_3cbRQ;-><init>(I)V
-HSPLandroid/app/-$$Lambda$AppOpsManager$OpEntry$oJrIzD9nj7b4wauCj0IMv_3cbRQ;->applyAsLong(Ljava/lang/Object;)J
-HSPLandroid/app/-$$Lambda$AppOpsManager$OpEntry$xDz1BLkc0ULiTpH5T24o2mMAUP0;-><init>(I)V
-HSPLandroid/app/-$$Lambda$AppOpsManager$OpEntry$xDz1BLkc0ULiTpH5T24o2mMAUP0;->applyAsLong(Ljava/lang/Object;)J
-PLandroid/app/-$$Lambda$AppOpsManager$frSyqmhVUmNbhMckfMS3PSwTMlw;-><init>(Ljava/util/function/Consumer;Landroid/app/AppOpsManager$HistoricalOps;)V
-PLandroid/app/-$$Lambda$AppOpsManager$frSyqmhVUmNbhMckfMS3PSwTMlw;->run()V
+HSPLandroid/app/-$$Lambda$Dialog$zXRzrq3I7H1_zmZ8d_W7t2CQN0I;-><init>(Landroid/app/Dialog;)V
 HSPLandroid/app/-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher$Args;)V
 HSPLandroid/app/-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA;->run()V
-PLandroid/app/-$$Lambda$Notification$hOCsSZH8tWalFSbIzQ9x9IcPa9M;-><init>(Landroid/app/Notification;Landroid/os/Parcel;)V
+HSPLandroid/app/-$$Lambda$Notification$hOCsSZH8tWalFSbIzQ9x9IcPa9M;-><init>(Landroid/app/Notification;Landroid/os/Parcel;)V
 HSPLandroid/app/-$$Lambda$Notification$hOCsSZH8tWalFSbIzQ9x9IcPa9M;->onMarshaled(Landroid/app/PendingIntent;Landroid/os/Parcel;I)V
 HSPLandroid/app/-$$Lambda$ResourcesManager$QJ7UiVk_XS90KuXAsIjIEym1DnM;->test(Ljava/lang/Object;)Z
+HSPLandroid/app/-$$Lambda$SharedPreferencesImpl$EditorImpl$3CAjkhzA131V3V-sLfP2uy0FWZ0;-><init>(Landroid/app/SharedPreferencesImpl$EditorImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V
 HSPLandroid/app/-$$Lambda$SharedPreferencesImpl$EditorImpl$3CAjkhzA131V3V-sLfP2uy0FWZ0;->run()V
-PLandroid/app/ActionBar$LayoutParams;-><init>(II)V
-HPLandroid/app/ActionBar;-><init>()V
-HPLandroid/app/ActionBar;->onDestroy()V
-HPLandroid/app/Activity$1;->isTaskRoot()Z
-HSPLandroid/app/Activity$1;->updateNavigationBarColor(I)V
-HSPLandroid/app/Activity$1;->updateStatusBarColor(I)V
+HSPLandroid/app/-$$Lambda$oslF4K8Uk6v-6nTRoaEpCmfAptE;-><init>(Landroid/app/Dialog;)V
+HSPLandroid/app/Activity$1;-><init>(Landroid/app/Activity;)V
+HSPLandroid/app/Activity$HostCallbacks;-><init>(Landroid/app/Activity;)V
 HSPLandroid/app/Activity$HostCallbacks;->onAttachFragment(Landroid/app/Fragment;)V
-HPLandroid/app/Activity$HostCallbacks;->onFindViewById(I)Landroid/view/View;
 HSPLandroid/app/Activity$HostCallbacks;->onGetLayoutInflater()Landroid/view/LayoutInflater;
-HPLandroid/app/Activity$HostCallbacks;->onGetWindowAnimations()I
-HPLandroid/app/Activity$HostCallbacks;->onHasView()Z
-HPLandroid/app/Activity$HostCallbacks;->onHasWindowAnimations()Z
 HSPLandroid/app/Activity$HostCallbacks;->onUseFragmentManagerInflaterFactory()Z
 HSPLandroid/app/Activity;-><init>()V
-HPLandroid/app/Activity;->access$000(Landroid/app/Activity;)Landroid/os/IBinder;
 HSPLandroid/app/Activity;->access$100(Landroid/app/Activity;)Landroid/app/ActivityManager$TaskDescription;
 HSPLandroid/app/Activity;->attach(Landroid/content/Context;Landroid/app/ActivityThread;Landroid/app/Instrumentation;Landroid/os/IBinder;ILandroid/app/Application;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/CharSequence;Landroid/app/Activity;Ljava/lang/String;Landroid/app/Activity$NonConfigurationInstances;Landroid/content/res/Configuration;Ljava/lang/String;Lcom/android/internal/app/IVoiceInteractor;Landroid/view/Window;Landroid/view/ViewRootImpl$ActivityConfigCallback;Landroid/os/IBinder;)V
 HSPLandroid/app/Activity;->attachBaseContext(Landroid/content/Context;)V
-HPLandroid/app/Activity;->autofillClientGetActivityToken()Landroid/os/IBinder;
 HSPLandroid/app/Activity;->autofillClientGetComponentName()Landroid/content/ComponentName;
-HPLandroid/app/Activity;->autofillClientIsFillUiShowing()Z
+HSPLandroid/app/Activity;->autofillClientIsFillUiShowing()Z
 HSPLandroid/app/Activity;->autofillClientRequestHideFillUi()Z
-HPLandroid/app/Activity;->autofillClientResetableStateAvailable()V
-HPLandroid/app/Activity;->autofillClientRunOnUiThread(Ljava/lang/Runnable;)V
+HSPLandroid/app/Activity;->cancelInputsAndStartExitTransition(Landroid/os/Bundle;)V
 HSPLandroid/app/Activity;->collectActivityLifecycleCallbacks()[Ljava/lang/Object;
-HPLandroid/app/Activity;->deviceSupportsPictureInPictureMode()Z
-HPLandroid/app/Activity;->dispatchActivityResult(Ljava/lang/String;IILandroid/content/Intent;Ljava/lang/String;)V
+HSPLandroid/app/Activity;->dispatchActivityCreated(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->dispatchActivityDestroyed()V
+HSPLandroid/app/Activity;->dispatchActivityPaused()V
+HSPLandroid/app/Activity;->dispatchActivityPostCreated(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->dispatchActivityPostDestroyed()V
+HSPLandroid/app/Activity;->dispatchActivityPostPaused()V
+HSPLandroid/app/Activity;->dispatchActivityPostResumed()V
+HSPLandroid/app/Activity;->dispatchActivityPostSaveInstanceState(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->dispatchActivityPostStarted()V
+HSPLandroid/app/Activity;->dispatchActivityPostStopped()V
+HSPLandroid/app/Activity;->dispatchActivityPreCreated(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->dispatchActivityPreDestroyed()V
+HSPLandroid/app/Activity;->dispatchActivityPrePaused()V
+HSPLandroid/app/Activity;->dispatchActivityPreResumed()V
+HSPLandroid/app/Activity;->dispatchActivityPreSaveInstanceState(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->dispatchActivityPreStarted()V
+HSPLandroid/app/Activity;->dispatchActivityPreStopped()V
+HSPLandroid/app/Activity;->dispatchActivityResumed()V
+HSPLandroid/app/Activity;->dispatchActivitySaveInstanceState(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->dispatchActivityStarted()V
+HSPLandroid/app/Activity;->dispatchActivityStopped()V
 HSPLandroid/app/Activity;->dispatchEnterAnimationComplete()V
-HPLandroid/app/Activity;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroid/app/Activity;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
 HSPLandroid/app/Activity;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
-HPLandroid/app/Activity;->ensureSearchManager()V
-HSPLandroid/app/Activity;->findViewById(I)Landroid/view/View;
+HSPLandroid/app/Activity;->enableAutofillCompatibilityIfNeeded()V
 HSPLandroid/app/Activity;->finish()V
 HSPLandroid/app/Activity;->finish(I)V
-HPLandroid/app/Activity;->finishAfterTransition()V
-HPLandroid/app/Activity;->getActionBar()Landroid/app/ActionBar;
 HSPLandroid/app/Activity;->getActivityOptions()Landroid/app/ActivityOptions;
 HSPLandroid/app/Activity;->getActivityToken()Landroid/os/IBinder;
 HSPLandroid/app/Activity;->getApplication()Landroid/app/Application;
 HSPLandroid/app/Activity;->getAutofillClient()Landroid/view/autofill/AutofillManager$AutofillClient;
-HSPLandroid/app/Activity;->getCallingActivity()Landroid/content/ComponentName;
-HSPLandroid/app/Activity;->getCallingPackage()Ljava/lang/String;
 HSPLandroid/app/Activity;->getComponentName()Landroid/content/ComponentName;
+HSPLandroid/app/Activity;->getContentCaptureManager()Landroid/view/contentcapture/ContentCaptureManager;
 HSPLandroid/app/Activity;->getContentCaptureTypeAsString(I)Ljava/lang/String;
-HPLandroid/app/Activity;->getCurrentFocus()Landroid/view/View;
 HSPLandroid/app/Activity;->getFragmentManager()Landroid/app/FragmentManager;
 HSPLandroid/app/Activity;->getIntent()Landroid/content/Intent;
 HSPLandroid/app/Activity;->getLastNonConfigurationInstance()Ljava/lang/Object;
 HSPLandroid/app/Activity;->getLayoutInflater()Landroid/view/LayoutInflater;
-HPLandroid/app/Activity;->getLoaderManager()Landroid/app/LoaderManager;
-HSPLandroid/app/Activity;->getLocalClassName()Ljava/lang/String;
-HPLandroid/app/Activity;->getMenuInflater()Landroid/view/MenuInflater;
 HSPLandroid/app/Activity;->getNextAutofillId()I
-HSPLandroid/app/Activity;->getParent()Landroid/app/Activity;
-HSPLandroid/app/Activity;->getRequestedOrientation()I
 HSPLandroid/app/Activity;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/app/Activity;->getTaskId()I
 HSPLandroid/app/Activity;->getTitle()Ljava/lang/CharSequence;
+HSPLandroid/app/Activity;->getTitleColor()I
 HSPLandroid/app/Activity;->getWindow()Landroid/view/Window;
 HSPLandroid/app/Activity;->getWindowManager()Landroid/view/WindowManager;
-HSPLandroid/app/Activity;->hasWindowFocus()Z
-HSPLandroid/app/Activity;->initWindowDecorActionBar()V
 HSPLandroid/app/Activity;->isChangingConfigurations()Z
+HSPLandroid/app/Activity;->isChild()Z
 HSPLandroid/app/Activity;->isDestroyed()Z
-HPLandroid/app/Activity;->isDisablingEnterExitEventForAutofill()Z
 HSPLandroid/app/Activity;->isFinishing()Z
-HSPLandroid/app/Activity;->isInMultiWindowMode()Z
-HPLandroid/app/Activity;->isTaskRoot()Z
 HSPLandroid/app/Activity;->makeVisible()V
 HSPLandroid/app/Activity;->notifyContentCaptureManagerIfNeeded(I)V
-HPLandroid/app/Activity;->onActivityResult(IILandroid/content/Intent;)V
 HSPLandroid/app/Activity;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V
 HSPLandroid/app/Activity;->onAttachFragment(Landroid/app/Fragment;)V
 HSPLandroid/app/Activity;->onAttachedToWindow()V
-HPLandroid/app/Activity;->onBackPressed()V
-HPLandroid/app/Activity;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLandroid/app/Activity;->onContentChanged()V
 HSPLandroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
 HSPLandroid/app/Activity;->onCreateDescription()Ljava/lang/CharSequence;
-HSPLandroid/app/Activity;->onCreateOptionsMenu(Landroid/view/Menu;)Z
 HSPLandroid/app/Activity;->onCreatePanelMenu(ILandroid/view/Menu;)Z
-HPLandroid/app/Activity;->onCreatePanelView(I)Landroid/view/View;
 HSPLandroid/app/Activity;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
 HSPLandroid/app/Activity;->onCreateView(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
 HSPLandroid/app/Activity;->onDestroy()V
 HSPLandroid/app/Activity;->onDetachedFromWindow()V
 HSPLandroid/app/Activity;->onEnterAnimationComplete()V
-HPLandroid/app/Activity;->onKeyDown(ILandroid/view/KeyEvent;)Z
-HPLandroid/app/Activity;->onKeyUp(ILandroid/view/KeyEvent;)Z
-HPLandroid/app/Activity;->onMenuItemSelected(ILandroid/view/MenuItem;)Z
-HPLandroid/app/Activity;->onNewIntent(Landroid/content/Intent;)V
+HSPLandroid/app/Activity;->onKeyDown(ILandroid/view/KeyEvent;)Z
+HSPLandroid/app/Activity;->onKeyUp(ILandroid/view/KeyEvent;)Z
 HSPLandroid/app/Activity;->onPause()V
+HSPLandroid/app/Activity;->onPictureInPictureRequested()V
 HSPLandroid/app/Activity;->onPostCreate(Landroid/os/Bundle;)V
 HSPLandroid/app/Activity;->onPostResume()V
 HSPLandroid/app/Activity;->onPrepareOptionsMenu(Landroid/view/Menu;)Z
 HSPLandroid/app/Activity;->onPreparePanel(ILandroid/view/View;Landroid/view/Menu;)Z
-HPLandroid/app/Activity;->onProvideAssistContent(Landroid/app/assist/AssistContent;)V
-HPLandroid/app/Activity;->onProvideAssistData(Landroid/os/Bundle;)V
 HSPLandroid/app/Activity;->onProvideReferrer()Landroid/net/Uri;
-HPLandroid/app/Activity;->onRestart()V
-HSPLandroid/app/Activity;->onRestoreInstanceState(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->onRestart()V
 HSPLandroid/app/Activity;->onResume()V
 HSPLandroid/app/Activity;->onSaveInstanceState(Landroid/os/Bundle;)V
 HSPLandroid/app/Activity;->onStart()V
-HSPLandroid/app/Activity;->onStateNotSaved()V
 HSPLandroid/app/Activity;->onStop()V
 HSPLandroid/app/Activity;->onTitleChanged(Ljava/lang/CharSequence;I)V
 HSPLandroid/app/Activity;->onTopResumedActivityChanged(Z)V
-HSPLandroid/app/Activity;->onTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLandroid/app/Activity;->onTrimMemory(I)V
 HSPLandroid/app/Activity;->onUserInteraction()V
 HSPLandroid/app/Activity;->onUserLeaveHint()V
 HSPLandroid/app/Activity;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/app/Activity;->onWindowFocusChanged(Z)V
-HSPLandroid/app/Activity;->overridePendingTransition(II)V
+HSPLandroid/app/Activity;->performCreate(Landroid/os/Bundle;)V
 HSPLandroid/app/Activity;->performCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
 HSPLandroid/app/Activity;->performDestroy()V
 HSPLandroid/app/Activity;->performPause()V
 HSPLandroid/app/Activity;->performRestart(ZLjava/lang/String;)V
 HSPLandroid/app/Activity;->performResume(ZLjava/lang/String;)V
+HSPLandroid/app/Activity;->performSaveInstanceState(Landroid/os/Bundle;)V
 HSPLandroid/app/Activity;->performStart(Ljava/lang/String;)V
 HSPLandroid/app/Activity;->performStop(ZLjava/lang/String;)V
 HSPLandroid/app/Activity;->performTopResumedActivityChanged(ZLjava/lang/String;)V
+HSPLandroid/app/Activity;->performUserLeaving()V
 HSPLandroid/app/Activity;->registerActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V
-HSPLandroid/app/Activity;->registerRemoteAnimations(Landroid/view/RemoteAnimationDefinition;)V
-HSPLandroid/app/Activity;->requestWindowFeature(I)Z
-HSPLandroid/app/Activity;->restoreManagedDialogs(Landroid/os/Bundle;)V
-HPLandroid/app/Activity;->runOnUiThread(Ljava/lang/Runnable;)V
+HSPLandroid/app/Activity;->restoreHasCurrentPermissionRequest(Landroid/os/Bundle;)V
 HSPLandroid/app/Activity;->saveManagedDialogs(Landroid/os/Bundle;)V
-HSPLandroid/app/Activity;->setContentView(I)V
-HSPLandroid/app/Activity;->setContentView(Landroid/view/View;)V
-HSPLandroid/app/Activity;->setDefaultKeyMode(I)V
-HPLandroid/app/Activity;->setDisablePreviewScreenshots(Z)V
-HSPLandroid/app/Activity;->setIntent(Landroid/content/Intent;)V
-HPLandroid/app/Activity;->setPictureInPictureParams(Landroid/app/PictureInPictureParams;)V
-HSPLandroid/app/Activity;->setRequestedOrientation(I)V
-HPLandroid/app/Activity;->setResult(I)V
 HSPLandroid/app/Activity;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V
 HSPLandroid/app/Activity;->setTheme(I)V
-HPLandroid/app/Activity;->setTitle(I)V
-HSPLandroid/app/Activity;->setTitle(Ljava/lang/CharSequence;)V
 HSPLandroid/app/Activity;->startActivity(Landroid/content/Intent;)V
 HSPLandroid/app/Activity;->startActivity(Landroid/content/Intent;Landroid/os/Bundle;)V
 HSPLandroid/app/Activity;->startActivityForResult(Landroid/content/Intent;I)V
 HSPLandroid/app/Activity;->startActivityForResult(Landroid/content/Intent;ILandroid/os/Bundle;)V
+HSPLandroid/app/Activity;->storeHasCurrentPermissionRequest(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->transferSpringboardActivityOptions(Landroid/os/Bundle;)Landroid/os/Bundle;
 HSPLandroid/app/ActivityManager$1;->create()Landroid/app/IActivityManager;
 HSPLandroid/app/ActivityManager$1;->create()Ljava/lang/Object;
 HSPLandroid/app/ActivityManager$MemoryInfo;-><init>()V
 HSPLandroid/app/ActivityManager$MemoryInfo;->readFromParcel(Landroid/os/Parcel;)V
-HPLandroid/app/ActivityManager$MemoryInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/ActivityManager$ProcessErrorStateInfo$1;-><init>()V
-PLandroid/app/ActivityManager$ProcessErrorStateInfo;-><clinit>()V
-PLandroid/app/ActivityManager$ProcessErrorStateInfo;-><init>()V
-HSPLandroid/app/ActivityManager$RecentTaskInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ActivityManager$RecentTaskInfo;
-HSPLandroid/app/ActivityManager$RecentTaskInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/ActivityManager$RecentTaskInfo;-><init>()V
-HPLandroid/app/ActivityManager$RecentTaskInfo;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLandroid/app/ActivityManager$RecentTaskInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/ActivityManager$RunningAppProcessInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ActivityManager$RunningAppProcessInfo;
 HSPLandroid/app/ActivityManager$RunningAppProcessInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/ActivityManager$RunningAppProcessInfo;-><init>()V
-PLandroid/app/ActivityManager$RunningAppProcessInfo;-><init>(Ljava/lang/String;I[Ljava/lang/String;)V
+HSPLandroid/app/ActivityManager$RunningAppProcessInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/ActivityManager$RunningAppProcessInfo;-><init>(Landroid/os/Parcel;Landroid/app/ActivityManager$1;)V
 HSPLandroid/app/ActivityManager$RunningAppProcessInfo;->importanceToProcState(I)I
 HSPLandroid/app/ActivityManager$RunningAppProcessInfo;->procStateToImportance(I)I
 HSPLandroid/app/ActivityManager$RunningAppProcessInfo;->procStateToImportanceForClient(ILandroid/content/Context;)I
 HSPLandroid/app/ActivityManager$RunningAppProcessInfo;->procStateToImportanceForTargetSdk(II)I
 HSPLandroid/app/ActivityManager$RunningAppProcessInfo;->readFromParcel(Landroid/os/Parcel;)V
-HPLandroid/app/ActivityManager$RunningAppProcessInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/ActivityManager$RunningServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ActivityManager$RunningServiceInfo;
 HSPLandroid/app/ActivityManager$RunningServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/ActivityManager$RunningServiceInfo;-><init>()V
+HSPLandroid/app/ActivityManager$RunningServiceInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/ActivityManager$RunningServiceInfo;-><init>(Landroid/os/Parcel;Landroid/app/ActivityManager$1;)V
 HSPLandroid/app/ActivityManager$RunningServiceInfo;->readFromParcel(Landroid/os/Parcel;)V
-HPLandroid/app/ActivityManager$RunningServiceInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/ActivityManager$RunningTaskInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ActivityManager$RunningTaskInfo;
-HSPLandroid/app/ActivityManager$RunningTaskInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/ActivityManager$RunningTaskInfo;-><init>()V
-HPLandroid/app/ActivityManager$RunningTaskInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/app/ActivityManager$StackInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ActivityManager$StackInfo;
-HPLandroid/app/ActivityManager$StackInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/ActivityManager$StackInfo;-><init>()V
-HPLandroid/app/ActivityManager$StackInfo;->readFromParcel(Landroid/os/Parcel;)V
-HPLandroid/app/ActivityManager$StackInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/ActivityManager$TaskDescription$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ActivityManager$TaskDescription;
 HSPLandroid/app/ActivityManager$TaskDescription$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/ActivityManager$TaskDescription;-><init>()V
-PLandroid/app/ActivityManager$TaskDescription;-><init>(Landroid/app/ActivityManager$TaskDescription;)V
-PLandroid/app/ActivityManager$TaskDescription;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/ActivityManager$TaskDescription;-><init>(Landroid/os/Parcel;Landroid/app/ActivityManager$1;)V
-PLandroid/app/ActivityManager$TaskDescription;-><init>(Ljava/lang/String;Landroid/graphics/Bitmap;ILjava/lang/String;IIIIZZIII)V
-HPLandroid/app/ActivityManager$TaskDescription;->copyFrom(Landroid/app/ActivityManager$TaskDescription;)V
-PLandroid/app/ActivityManager$TaskDescription;->getBackgroundColor()I
-PLandroid/app/ActivityManager$TaskDescription;->getEnsureNavigationBarContrastWhenTransparent()Z
-PLandroid/app/ActivityManager$TaskDescription;->getEnsureStatusBarContrastWhenTransparent()Z
-PLandroid/app/ActivityManager$TaskDescription;->getIcon()Landroid/graphics/Bitmap;
-PLandroid/app/ActivityManager$TaskDescription;->getIconFilename()Ljava/lang/String;
-PLandroid/app/ActivityManager$TaskDescription;->getIconResource()I
-PLandroid/app/ActivityManager$TaskDescription;->getInMemoryIcon()Landroid/graphics/Bitmap;
-PLandroid/app/ActivityManager$TaskDescription;->getLabel()Ljava/lang/String;
-PLandroid/app/ActivityManager$TaskDescription;->getMinHeight()I
-PLandroid/app/ActivityManager$TaskDescription;->getMinWidth()I
-PLandroid/app/ActivityManager$TaskDescription;->getNavigationBarColor()I
+HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Landroid/os/Parcel;Landroid/app/ActivityManager$1;)V
+HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Ljava/lang/String;Landroid/graphics/Bitmap;ILjava/lang/String;IIIIZZIII)V
+HSPLandroid/app/ActivityManager$TaskDescription;->getIconFilename()Ljava/lang/String;
 HSPLandroid/app/ActivityManager$TaskDescription;->getPrimaryColor()I
-PLandroid/app/ActivityManager$TaskDescription;->getResizeMode()I
-PLandroid/app/ActivityManager$TaskDescription;->getStatusBarColor()I
-PLandroid/app/ActivityManager$TaskDescription;->loadTaskDescriptionIcon(Ljava/lang/String;I)Landroid/graphics/Bitmap;
+HSPLandroid/app/ActivityManager$TaskDescription;->loadTaskDescriptionIcon(Ljava/lang/String;I)Landroid/graphics/Bitmap;
 HSPLandroid/app/ActivityManager$TaskDescription;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/app/ActivityManager$TaskDescription;->restoreFromXml(Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/app/ActivityManager$TaskDescription;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLandroid/app/ActivityManager$TaskDescription;->setBackgroundColor(I)V
 HSPLandroid/app/ActivityManager$TaskDescription;->setEnsureNavigationBarContrastWhenTransparent(Z)V
 HSPLandroid/app/ActivityManager$TaskDescription;->setEnsureStatusBarContrastWhenTransparent(Z)V
-PLandroid/app/ActivityManager$TaskDescription;->setIcon(I)V
-PLandroid/app/ActivityManager$TaskDescription;->setIconFilename(Ljava/lang/String;)V
-PLandroid/app/ActivityManager$TaskDescription;->setLabel(Ljava/lang/String;)V
-PLandroid/app/ActivityManager$TaskDescription;->setMinHeight(I)V
-PLandroid/app/ActivityManager$TaskDescription;->setMinWidth(I)V
 HSPLandroid/app/ActivityManager$TaskDescription;->setNavigationBarColor(I)V
 HSPLandroid/app/ActivityManager$TaskDescription;->setPrimaryColor(I)V
-PLandroid/app/ActivityManager$TaskDescription;->setResizeMode(I)V
 HSPLandroid/app/ActivityManager$TaskDescription;->setStatusBarColor(I)V
 HSPLandroid/app/ActivityManager$TaskDescription;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/ActivityManager$TaskSnapshot$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ActivityManager$TaskSnapshot;
-HSPLandroid/app/ActivityManager$TaskSnapshot$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/app/ActivityManager$TaskSnapshot;-><init>(JLandroid/content/ComponentName;Landroid/graphics/GraphicBuffer;Landroid/graphics/ColorSpace;ILandroid/graphics/Rect;ZFZIIZ)V
-HSPLandroid/app/ActivityManager$TaskSnapshot;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/app/ActivityManager$TaskSnapshot;-><init>(Landroid/os/Parcel;Landroid/app/ActivityManager$1;)V
 HSPLandroid/app/ActivityManager$TaskSnapshot;->getColorSpace()Landroid/graphics/ColorSpace;
 HSPLandroid/app/ActivityManager$TaskSnapshot;->getContentInsets()Landroid/graphics/Rect;
 HSPLandroid/app/ActivityManager$TaskSnapshot;->getId()J
@@ -827,122 +588,50 @@
 HSPLandroid/app/ActivityManager$TaskSnapshot;->getScale()F
 HSPLandroid/app/ActivityManager$TaskSnapshot;->getSnapshot()Landroid/graphics/GraphicBuffer;
 HSPLandroid/app/ActivityManager$TaskSnapshot;->getSystemUiVisibility()I
-PLandroid/app/ActivityManager$TaskSnapshot;->getTopActivityComponent()Landroid/content/ComponentName;
 HSPLandroid/app/ActivityManager$TaskSnapshot;->getWindowingMode()I
 HSPLandroid/app/ActivityManager$TaskSnapshot;->isRealSnapshot()Z
 HSPLandroid/app/ActivityManager$TaskSnapshot;->isReducedResolution()Z
 HSPLandroid/app/ActivityManager$TaskSnapshot;->isTranslucent()Z
-PLandroid/app/ActivityManager$TaskSnapshot;->toString()Ljava/lang/String;
-PLandroid/app/ActivityManager$TaskSnapshot;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/ActivityManager$UidObserver;-><init>(Landroid/app/ActivityManager$OnUidImportanceListener;Landroid/content/Context;)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;->broadcastStickyIntent(Landroid/content/Intent;I)V
-HSPLandroid/app/ActivityManager;->broadcastStickyIntent(Landroid/content/Intent;II)V
-HSPLandroid/app/ActivityManager;->checkComponentPermission(Ljava/lang/String;IIZ)I
-HSPLandroid/app/ActivityManager;->checkUidPermission(Ljava/lang/String;I)I
-HSPLandroid/app/ActivityManager;->getAppTasks()Ljava/util/List;
 HSPLandroid/app/ActivityManager;->getCurrentUser()I
-HSPLandroid/app/ActivityManager;->getDeviceConfigurationInfo()Landroid/content/pm/ConfigurationInfo;
-HSPLandroid/app/ActivityManager;->getLargeMemoryClass()I
-HSPLandroid/app/ActivityManager;->getLauncherLargeIconSize()I
-HSPLandroid/app/ActivityManager;->getLauncherLargeIconSizeInner(Landroid/content/Context;)I
-HPLandroid/app/ActivityManager;->getLockTaskModeState()I
 HSPLandroid/app/ActivityManager;->getMemoryClass()I
 HSPLandroid/app/ActivityManager;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V
 HSPLandroid/app/ActivityManager;->getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V
-HSPLandroid/app/ActivityManager;->getPackageImportance(Ljava/lang/String;)I
 HSPLandroid/app/ActivityManager;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
 HSPLandroid/app/ActivityManager;->getRunningAppProcesses()Ljava/util/List;
 HSPLandroid/app/ActivityManager;->getRunningServices(I)Ljava/util/List;
-HSPLandroid/app/ActivityManager;->getRunningTasks(I)Ljava/util/List;
 HSPLandroid/app/ActivityManager;->getService()Landroid/app/IActivityManager;
-PLandroid/app/ActivityManager;->getUidImportance(I)I
-HSPLandroid/app/ActivityManager;->handleIncomingUser(IIIZZLjava/lang/String;Ljava/lang/String;)I
-HSPLandroid/app/ActivityManager;->isForegroundService(I)Z
+HSPLandroid/app/ActivityManager;->getTaskService()Landroid/app/IActivityTaskManager;
 HSPLandroid/app/ActivityManager;->isHighEndGfx()Z
 HSPLandroid/app/ActivityManager;->isLowRamDevice()Z
 HSPLandroid/app/ActivityManager;->isLowRamDeviceStatic()Z
-HSPLandroid/app/ActivityManager;->isProcStateBackground(I)Z
 HSPLandroid/app/ActivityManager;->isRunningInTestHarness()Z
-HSPLandroid/app/ActivityManager;->isSmallBatteryDevice()Z
-PLandroid/app/ActivityManager;->isStartResultFatalError(I)Z
-PLandroid/app/ActivityManager;->isStartResultSuccessful(I)Z
+HSPLandroid/app/ActivityManager;->isStartResultFatalError(I)Z
 HSPLandroid/app/ActivityManager;->isUserAMonkey()Z
-HSPLandroid/app/ActivityManager;->isUserRunning(I)Z
-HPLandroid/app/ActivityManager;->noteAlarmFinish(Landroid/app/PendingIntent;Landroid/os/WorkSource;ILjava/lang/String;)V
-HPLandroid/app/ActivityManager;->noteAlarmStart(Landroid/app/PendingIntent;Landroid/os/WorkSource;ILjava/lang/String;)V
-HPLandroid/app/ActivityManager;->noteWakeupAlarm(Landroid/app/PendingIntent;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/ActivityManager;->processStateAmToProto(I)I
-PLandroid/app/ActivityManager;->staticGetLargeMemoryClass()I
 HSPLandroid/app/ActivityManager;->staticGetMemoryClass()I
-HSPLandroid/app/ActivityManagerInternal;-><init>()V
 HSPLandroid/app/ActivityOptions;-><init>()V
-PLandroid/app/ActivityOptions;-><init>(Landroid/os/Bundle;)V
-PLandroid/app/ActivityOptions;->abort()V
-PLandroid/app/ActivityOptions;->abort(Landroid/app/ActivityOptions;)V
-PLandroid/app/ActivityOptions;->canTaskOverlayResume()Z
-PLandroid/app/ActivityOptions;->disallowEnterPictureInPictureWhileLaunching()Z
-PLandroid/app/ActivityOptions;->freezeRecentTasksReordering()Z
-HPLandroid/app/ActivityOptions;->fromBundle(Landroid/os/Bundle;)Landroid/app/ActivityOptions;
-PLandroid/app/ActivityOptions;->getAnimationType()I
-PLandroid/app/ActivityOptions;->getAvoidMoveToFront()Z
-PLandroid/app/ActivityOptions;->getCallerDisplayId()I
-PLandroid/app/ActivityOptions;->getCustomEnterResId()I
-PLandroid/app/ActivityOptions;->getCustomExitResId()I
-PLandroid/app/ActivityOptions;->getHeight()I
-PLandroid/app/ActivityOptions;->getLaunchActivityType()I
-PLandroid/app/ActivityOptions;->getLaunchBounds()Landroid/graphics/Rect;
-PLandroid/app/ActivityOptions;->getLaunchDisplayId()I
-PLandroid/app/ActivityOptions;->getLaunchTaskBehind()Z
-PLandroid/app/ActivityOptions;->getLaunchTaskId()I
-PLandroid/app/ActivityOptions;->getLaunchWindowingMode()I
-PLandroid/app/ActivityOptions;->getLockTaskMode()Z
-PLandroid/app/ActivityOptions;->getOnAnimationStartListener()Landroid/os/IRemoteCallback;
-PLandroid/app/ActivityOptions;->getPackageName()Ljava/lang/String;
-PLandroid/app/ActivityOptions;->getPendingIntentLaunchFlags()I
-PLandroid/app/ActivityOptions;->getRemoteAnimationAdapter()Landroid/view/RemoteAnimationAdapter;
-PLandroid/app/ActivityOptions;->getRotationAnimationHint()I
-PLandroid/app/ActivityOptions;->getStartX()I
-PLandroid/app/ActivityOptions;->getStartY()I
-PLandroid/app/ActivityOptions;->getTaskOverlay()Z
-PLandroid/app/ActivityOptions;->getUsageTimeReport()Landroid/app/PendingIntent;
-PLandroid/app/ActivityOptions;->getWidth()I
-HSPLandroid/app/ActivityOptions;->makeBasic()Landroid/app/ActivityOptions;
-HPLandroid/app/ActivityOptions;->makeCustomAnimation(Landroid/content/Context;II)Landroid/app/ActivityOptions;
-HPLandroid/app/ActivityOptions;->makeCustomAnimation(Landroid/content/Context;IILandroid/os/Handler;Landroid/app/ActivityOptions$OnAnimationStartedListener;)Landroid/app/ActivityOptions;
-HPLandroid/app/ActivityOptions;->makeRemoteAnimation(Landroid/view/RemoteAnimationAdapter;)Landroid/app/ActivityOptions;
-PLandroid/app/ActivityOptions;->popAppVerificationBundle()Landroid/os/Bundle;
-PLandroid/app/ActivityOptions;->setAvoidMoveToFront()V
-HPLandroid/app/ActivityOptions;->setDisallowEnterPictureInPictureWhileLaunching(Z)V
-HPLandroid/app/ActivityOptions;->setFreezeRecentTasksReordering()V
-PLandroid/app/ActivityOptions;->setLaunchActivityType(I)V
-PLandroid/app/ActivityOptions;->setLaunchDisplayId(I)Landroid/app/ActivityOptions;
-PLandroid/app/ActivityOptions;->setLaunchTaskId(I)V
-PLandroid/app/ActivityOptions;->setLaunchWindowingMode(I)V
-HPLandroid/app/ActivityOptions;->setOnAnimationStartedListener(Landroid/os/Handler;Landroid/app/ActivityOptions$OnAnimationStartedListener;)V
-PLandroid/app/ActivityOptions;->setRemoteAnimationAdapter(Landroid/view/RemoteAnimationAdapter;)V
-HPLandroid/app/ActivityOptions;->setTaskOverlay(ZZ)V
-PLandroid/app/ActivityOptions;->toBundle()Landroid/os/Bundle;
-PLandroid/app/ActivityOptions;->toString()Ljava/lang/String;
+HSPLandroid/app/ActivityOptions;->fromBundle(Landroid/os/Bundle;)Landroid/app/ActivityOptions;
+HSPLandroid/app/ActivityOptions;->toBundle()Landroid/os/Bundle;
 HSPLandroid/app/ActivityTaskManager$1;->create()Landroid/app/IActivityTaskManager;
 HSPLandroid/app/ActivityTaskManager$1;->create()Ljava/lang/Object;
-HSPLandroid/app/ActivityTaskManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
-HSPLandroid/app/ActivityTaskManager;->getDefaultAppRecentsLimitStatic()I
-PLandroid/app/ActivityTaskManager;->getMaxAppRecentsLimitStatic()I
-HSPLandroid/app/ActivityTaskManager;->getMaxRecentTasksStatic()I
 HSPLandroid/app/ActivityTaskManager;->getService()Landroid/app/IActivityTaskManager;
-HSPLandroid/app/ActivityTaskManager;->supportsMultiWindow(Landroid/content/Context;)Z
-HSPLandroid/app/ActivityTaskManager;->supportsSplitScreenMultiWindow(Landroid/content/Context;)Z
 HSPLandroid/app/ActivityThread$1;-><init>(Landroid/app/ActivityThread;)V
 HSPLandroid/app/ActivityThread$1;->run()V
 HSPLandroid/app/ActivityThread$ActivityClientRecord;-><init>(Landroid/os/IBinder;Landroid/content/Intent;ILandroid/content/pm/ActivityInfo;Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/String;Lcom/android/internal/app/IVoiceInteractor;Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/util/List;Ljava/util/List;ZLandroid/app/ProfilerInfo;Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;)V
-HPLandroid/app/ActivityThread$ActivityClientRecord;->access$4102(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/content/res/Configuration;)Landroid/content/res/Configuration;
-HPLandroid/app/ActivityThread$ActivityClientRecord;->getLifecycleState()I
+HSPLandroid/app/ActivityThread$ActivityClientRecord;->access$3700(Landroid/app/ActivityThread$ActivityClientRecord;)Z
+HSPLandroid/app/ActivityThread$ActivityClientRecord;->access$3800(Landroid/app/ActivityThread$ActivityClientRecord;)Z
+HSPLandroid/app/ActivityThread$ActivityClientRecord;->access$4000(Landroid/app/ActivityThread$ActivityClientRecord;)Landroid/content/res/Configuration;
+HSPLandroid/app/ActivityThread$ActivityClientRecord;->access$4002(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/content/res/Configuration;)Landroid/content/res/Configuration;
+HSPLandroid/app/ActivityThread$ActivityClientRecord;->getLifecycleState()I
 HSPLandroid/app/ActivityThread$ActivityClientRecord;->init()V
 HSPLandroid/app/ActivityThread$ActivityClientRecord;->isPersistable()Z
+HSPLandroid/app/ActivityThread$ActivityClientRecord;->isPreHoneycomb()Z
+HSPLandroid/app/ActivityThread$ActivityClientRecord;->isPreP()Z
+HSPLandroid/app/ActivityThread$ActivityClientRecord;->lambda$init$0$ActivityThread$ActivityClientRecord(Landroid/content/res/Configuration;I)V
 HSPLandroid/app/ActivityThread$ActivityClientRecord;->setState(I)V
 HSPLandroid/app/ActivityThread$AndroidOs;-><init>(Llibcore/io/Os;)V
 HSPLandroid/app/ActivityThread$AndroidOs;->access(Ljava/lang/String;I)Z
@@ -952,26 +641,14 @@
 HSPLandroid/app/ActivityThread$AndroidOs;->rename(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread$AndroidOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;
 HSPLandroid/app/ActivityThread$AppBindData;-><init>()V
-PLandroid/app/ActivityThread$ApplicationThread$1;-><init>(Landroid/app/ActivityThread$ApplicationThread;Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
-PLandroid/app/ActivityThread$ApplicationThread$1;->run()V
 HSPLandroid/app/ActivityThread$ApplicationThread;-><init>(Landroid/app/ActivityThread;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;-><init>(Landroid/app/ActivityThread;Landroid/app/ActivityThread$1;)V
-PLandroid/app/ActivityThread$ApplicationThread;->access$500(Landroid/app/ActivityThread$ApplicationThread;Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;Z)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->bindApplication(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/util/List;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;[J)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->clearDnsCache()V
 HSPLandroid/app/ActivityThread$ApplicationThread;->dispatchPackageBroadcast(I[Ljava/lang/String;)V
-PLandroid/app/ActivityThread$ApplicationThread;->dumpDatabaseInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;Z)V
-PLandroid/app/ActivityThread$ApplicationThread;->dumpDbInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
-PLandroid/app/ActivityThread$ApplicationThread;->dumpGfxInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
-PLandroid/app/ActivityThread$ApplicationThread;->dumpMemInfo(Landroid/os/ParcelFileDescriptor;Landroid/os/Debug$MemoryInfo;ZZZZZ[Ljava/lang/String;)V
-PLandroid/app/ActivityThread$ApplicationThread;->dumpMemInfo(Landroid/util/proto/ProtoOutputStream;Landroid/os/Debug$MemoryInfo;ZZZZ)V
-PLandroid/app/ActivityThread$ApplicationThread;->dumpMemInfo(Ljava/io/PrintWriter;Landroid/os/Debug$MemoryInfo;ZZZZZ)V
-PLandroid/app/ActivityThread$ApplicationThread;->dumpMemInfoProto(Landroid/os/ParcelFileDescriptor;Landroid/os/Debug$MemoryInfo;ZZZZ[Ljava/lang/String;)V
-PLandroid/app/ActivityThread$ApplicationThread;->dumpProvider(Landroid/os/ParcelFileDescriptor;Landroid/os/IBinder;[Ljava/lang/String;)V
-PLandroid/app/ActivityThread$ApplicationThread;->dumpService(Landroid/os/ParcelFileDescriptor;Landroid/os/IBinder;[Ljava/lang/String;)V
-PLandroid/app/ActivityThread$ApplicationThread;->lambda$scheduleTrimMemory$0(Ljava/lang/Object;I)V
-HPLandroid/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;->dumpMemInfo(Landroid/os/ParcelFileDescriptor;Landroid/os/Debug$MemoryInfo;ZZZZZ[Ljava/lang/String;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->dumpMemInfo(Ljava/io/PrintWriter;Landroid/os/Debug$MemoryInfo;ZZZZZ)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->lambda$scheduleTrimMemory$0(Ljava/lang/Object;I)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleBindService(Landroid/os/IBinder;Landroid/content/Intent;ZI)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleCreateBackupAgent(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;II)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleCreateService(Landroid/os/IBinder;Landroid/content/pm/ServiceInfo;Landroid/content/res/CompatibilityInfo;I)V
@@ -982,24 +659,23 @@
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleReceiver(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/content/res/CompatibilityInfo;ILjava/lang/String;Landroid/os/Bundle;ZII)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleRegisteredReceiver(Landroid/content/IIntentReceiver;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZII)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleServiceArgs(Landroid/os/IBinder;Landroid/content/pm/ParceledListSlice;)V
-HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleSleeping(Landroid/os/IBinder;Z)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleStopService(Landroid/os/IBinder;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleTransaction(Landroid/app/servertransaction/ClientTransaction;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleTrimMemory(I)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleUnbindService(Landroid/os/IBinder;Landroid/content/Intent;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->setCoreSettings(Landroid/os/Bundle;)V
-HSPLandroid/app/ActivityThread$ApplicationThread;->setNetworkBlockSeq(J)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->setProcessState(I)V
 HSPLandroid/app/ActivityThread$BindServiceData;-><init>()V
 HSPLandroid/app/ActivityThread$ContextCleanupInfo;-><init>()V
-PLandroid/app/ActivityThread$CreateBackupAgentData;-><init>()V
+HSPLandroid/app/ActivityThread$CreateBackupAgentData;-><init>()V
 HSPLandroid/app/ActivityThread$CreateServiceData;-><init>()V
 HSPLandroid/app/ActivityThread$CreateServiceData;->toString()Ljava/lang/String;
-PLandroid/app/ActivityThread$DumpComponentInfo;-><init>()V
 HSPLandroid/app/ActivityThread$GcIdler;-><init>(Landroid/app/ActivityThread;)V
-PLandroid/app/ActivityThread$GcIdler;->queueIdle()Z
+HSPLandroid/app/ActivityThread$GcIdler;->queueIdle()Z
 HSPLandroid/app/ActivityThread$H;-><init>(Landroid/app/ActivityThread;)V
 HSPLandroid/app/ActivityThread$H;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/app/ActivityThread$Idler;-><init>(Landroid/app/ActivityThread;)V
+HSPLandroid/app/ActivityThread$Idler;-><init>(Landroid/app/ActivityThread;Landroid/app/ActivityThread$1;)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
@@ -1013,27 +689,31 @@
 HSPLandroid/app/ActivityThread$ServiceArgsData;-><init>()V
 HSPLandroid/app/ActivityThread$ServiceArgsData;->toString()Ljava/lang/String;
 HSPLandroid/app/ActivityThread;-><init>()V
-PLandroid/app/ActivityThread;->access$100(Landroid/app/ActivityThread;ILjava/lang/Object;I)V
-PLandroid/app/ActivityThread;->access$1100(Landroid/app/ActivityThread;I)V
+HSPLandroid/app/ActivityThread;->access$100(Landroid/app/ActivityThread;ILjava/lang/Object;I)V
+HSPLandroid/app/ActivityThread;->access$1100(Landroid/app/ActivityThread;I)V
 HSPLandroid/app/ActivityThread;->access$1300(Landroid/app/ActivityThread;Landroid/app/ActivityThread$AppBindData;)V
 HSPLandroid/app/ActivityThread;->access$1400(Landroid/app/ActivityThread;Landroid/app/ActivityThread$ReceiverData;)V
 HSPLandroid/app/ActivityThread;->access$1500(Landroid/app/ActivityThread;Landroid/app/ActivityThread$CreateServiceData;)V
 HSPLandroid/app/ActivityThread;->access$1600(Landroid/app/ActivityThread;Landroid/app/ActivityThread$BindServiceData;)V
 HSPLandroid/app/ActivityThread;->access$1700(Landroid/app/ActivityThread;Landroid/app/ActivityThread$BindServiceData;)V
 HSPLandroid/app/ActivityThread;->access$1800(Landroid/app/ActivityThread;Landroid/app/ActivityThread$ServiceArgsData;)V
-HSLandroid/app/ActivityThread;->access$1900(Landroid/app/ActivityThread;Landroid/os/IBinder;)V
-PLandroid/app/ActivityThread;->access$200(Landroid/app/ActivityThread;ILjava/lang/Object;IIZ)V
-PLandroid/app/ActivityThread;->access$2400(Landroid/app/ActivityThread;Landroid/app/ActivityThread$DumpComponentInfo;)V
-HSPLandroid/app/ActivityThread;->access$2500(Landroid/app/ActivityThread;Landroid/os/IBinder;Z)V
+HSPLandroid/app/ActivityThread;->access$1900(Landroid/app/ActivityThread;Landroid/os/IBinder;)V
+HSPLandroid/app/ActivityThread;->access$2100(Landroid/app/ActivityThread;Landroid/app/ActivityThread$CreateBackupAgentData;)V
+HSPLandroid/app/ActivityThread;->access$2200(Landroid/app/ActivityThread;Landroid/app/ActivityThread$CreateBackupAgentData;)V
+HSPLandroid/app/ActivityThread;->access$2500(Landroid/app/ActivityThread;Landroid/os/Bundle;)V
 HSPLandroid/app/ActivityThread;->access$2600(Landroid/app/ActivityThread;Landroid/os/Bundle;)V
+HSPLandroid/app/ActivityThread;->access$2700(Landroid/app/ActivityThread;Landroid/os/IBinder;)V
 HSPLandroid/app/ActivityThread;->access$2800(Landroid/app/ActivityThread;Landroid/os/IBinder;)V
+HSPLandroid/app/ActivityThread;->access$300(Landroid/app/ActivityThread;ILjava/lang/Object;I)V
+HSPLandroid/app/ActivityThread;->access$3200(Landroid/app/ActivityThread;)Landroid/app/servertransaction/TransactionExecutor;
 HSPLandroid/app/ActivityThread;->access$3300(Landroid/app/ActivityThread;)Landroid/app/servertransaction/TransactionExecutor;
+HSPLandroid/app/ActivityThread;->access$3400(Landroid/app/ActivityThread;)V
+HSPLandroid/app/ActivityThread;->access$3500(Landroid/app/ActivityThread;)V
 HSPLandroid/app/ActivityThread;->access$3600(Landroid/app/ActivityThread;)V
-PLandroid/app/ActivityThread;->access$400(Landroid/app/ActivityThread;Ljava/io/FileDescriptor;)V
 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;->applyCompatConfiguration(I)Landroid/content/res/Configuration;
-HSPLandroid/app/ActivityThread;->applyConfigurationToResources(Landroid/content/res/Configuration;)V
+HSPLandroid/app/ActivityThread;->applyConfigCompatMainThread(ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Configuration;
 HSPLandroid/app/ActivityThread;->applyPendingProcessState()V
 HSPLandroid/app/ActivityThread;->attach(ZJ)V
 HSPLandroid/app/ActivityThread;->callActivityOnSaveInstanceState(Landroid/app/ActivityThread$ActivityClientRecord;)V
@@ -1050,19 +730,14 @@
 HSPLandroid/app/ActivityThread;->currentOpPackageName()Ljava/lang/String;
 HSPLandroid/app/ActivityThread;->currentPackageName()Ljava/lang/String;
 HSPLandroid/app/ActivityThread;->currentProcessName()Ljava/lang/String;
-HPLandroid/app/ActivityThread;->deliverNewIntents(Landroid/app/ActivityThread$ActivityClientRecord;Ljava/util/List;)V
-HPLandroid/app/ActivityThread;->deliverResults(Landroid/app/ActivityThread$ActivityClientRecord;Ljava/util/List;Ljava/lang/String;)V
-PLandroid/app/ActivityThread;->doGcIfNeeded()V
-PLandroid/app/ActivityThread;->doGcIfNeeded(Ljava/lang/String;)V
-HPLandroid/app/ActivityThread;->dumpMemInfoTable(Landroid/util/proto/ProtoOutputStream;Landroid/os/Debug$MemoryInfo;ZZJJJJJJ)V
-PLandroid/app/ActivityThread;->dumpMemInfoTable(Ljava/io/PrintWriter;Landroid/os/Debug$MemoryInfo;ZZZZILjava/lang/String;JJJJJJ)V
-HPLandroid/app/ActivityThread;->dumpMemoryInfo(Landroid/util/proto/ProtoOutputStream;JLjava/lang/String;IIIIIIZIII)V
+HSPLandroid/app/ActivityThread;->doGcIfNeeded()V
+HSPLandroid/app/ActivityThread;->doGcIfNeeded(Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread;->freeTextLayoutCachesIfNeeded(I)V
 HSPLandroid/app/ActivityThread;->getActivitiesToBeDestroyed()Ljava/util/Map;
 HSPLandroid/app/ActivityThread;->getActivityClient(Landroid/os/IBinder;)Landroid/app/ActivityThread$ActivityClientRecord;
 HSPLandroid/app/ActivityThread;->getApplication()Landroid/app/Application;
 HSPLandroid/app/ActivityThread;->getApplicationThread()Landroid/app/ActivityThread$ApplicationThread;
-PLandroid/app/ActivityThread;->getBackupAgentsForUser(I)Landroid/util/ArrayMap;
+HSPLandroid/app/ActivityThread;->getBackupAgentsForUser(I)Landroid/util/ArrayMap;
 HSPLandroid/app/ActivityThread;->getExecutor()Ljava/util/concurrent/Executor;
 HSPLandroid/app/ActivityThread;->getGetProviderLock(Ljava/lang/String;I)Ljava/lang/Object;
 HSPLandroid/app/ActivityThread;->getHandler()Landroid/os/Handler;
@@ -1080,7 +755,6 @@
 HSPLandroid/app/ActivityThread;->getSystemUiContext()Landroid/app/ContextImpl;
 HSPLandroid/app/ActivityThread;->getTopLevelResources(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/app/LoadedApk;)Landroid/content/res/Resources;
 HSPLandroid/app/ActivityThread;->handleActivityConfigurationChanged(Landroid/os/IBinder;Landroid/content/res/Configuration;I)V
-PLandroid/app/ActivityThread;->handleApplicationInfoChanged(Landroid/content/pm/ApplicationInfo;)V
 HSPLandroid/app/ActivityThread;->handleBindApplication(Landroid/app/ActivityThread$AppBindData;)V
 HSPLandroid/app/ActivityThread;->handleBindService(Landroid/app/ActivityThread$BindServiceData;)V
 HSPLandroid/app/ActivityThread;->handleConfigurationChanged(Landroid/content/res/Configuration;)V
@@ -1090,37 +764,26 @@
 HSPLandroid/app/ActivityThread;->handleDestroyActivity(Landroid/os/IBinder;ZIZLjava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleDestroyBackupAgent(Landroid/app/ActivityThread$CreateBackupAgentData;)V
 HSPLandroid/app/ActivityThread;->handleDispatchPackageBroadcast(I[Ljava/lang/String;)V
-PLandroid/app/ActivityThread;->handleDumpProvider(Landroid/app/ActivityThread$DumpComponentInfo;)V
-PLandroid/app/ActivityThread;->handleDumpService(Landroid/app/ActivityThread$DumpComponentInfo;)V
 HSPLandroid/app/ActivityThread;->handleEnterAnimationComplete(Landroid/os/IBinder;)V
 HSPLandroid/app/ActivityThread;->handleInstallProvider(Landroid/content/pm/ProviderInfo;)V
 HSPLandroid/app/ActivityThread;->handleLaunchActivity(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/app/servertransaction/PendingTransactionActions;Landroid/content/Intent;)Landroid/app/Activity;
-PLandroid/app/ActivityThread;->handleLowMemory()V
-HPLandroid/app/ActivityThread;->handleNewIntent(Landroid/os/IBinder;Ljava/util/List;)V
+HPLandroid/app/ActivityThread;->handleLowMemory()V
 HSPLandroid/app/ActivityThread;->handlePauseActivity(Landroid/os/IBinder;ZZILandroid/app/servertransaction/PendingTransactionActions;Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleReceiver(Landroid/app/ActivityThread$ReceiverData;)V
-HPLandroid/app/ActivityThread;->handleRequestAssistContextExtras(Landroid/app/ActivityThread$RequestAssistContextExtras;)V
 HSPLandroid/app/ActivityThread;->handleResumeActivity(Landroid/os/IBinder;ZZLjava/lang/String;)V
-HPLandroid/app/ActivityThread;->handleSendResult(Landroid/os/IBinder;Ljava/util/List;Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleServiceArgs(Landroid/app/ActivityThread$ServiceArgsData;)V
 HSPLandroid/app/ActivityThread;->handleSetCoreSettings(Landroid/os/Bundle;)V
-HSPLandroid/app/ActivityThread;->handleSleeping(Landroid/os/IBinder;Z)V
-HSPLandroid/app/ActivityThread;->handleStartActivity(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/app/servertransaction/PendingTransactionActions;)V
-HSPLandroid/app/ActivityThread;->handleStopActivity(Landroid/os/IBinder;ZILandroid/app/servertransaction/PendingTransactionActions;ZLjava/lang/String;)V
+HSPLandroid/app/ActivityThread;->handleStartActivity(Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
+HSPLandroid/app/ActivityThread;->handleStopActivity(Landroid/os/IBinder;ILandroid/app/servertransaction/PendingTransactionActions;ZLjava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleStopService(Landroid/os/IBinder;)V
 HSPLandroid/app/ActivityThread;->handleTopResumedActivityChanged(Landroid/os/IBinder;ZLjava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleTrimMemory(I)V
 HSPLandroid/app/ActivityThread;->handleUnbindService(Landroid/app/ActivityThread$BindServiceData;)V
-HPLandroid/app/ActivityThread;->handleUnstableProviderDied(Landroid/os/IBinder;Z)V
-HPLandroid/app/ActivityThread;->handleUnstableProviderDiedLocked(Landroid/os/IBinder;Z)V
-HSPLandroid/app/ActivityThread;->handleWindowVisibility(Landroid/os/IBinder;Z)V
 HSPLandroid/app/ActivityThread;->incProviderRefLocked(Landroid/app/ActivityThread$ProviderRefCount;Z)V
 HSPLandroid/app/ActivityThread;->initializeMainlineModules()V
 HSPLandroid/app/ActivityThread;->installContentProviders(Landroid/content/Context;Ljava/util/List;)V
 HSPLandroid/app/ActivityThread;->installProvider(Landroid/content/Context;Landroid/app/ContentProviderHolder;Landroid/content/pm/ProviderInfo;ZZZ)Landroid/app/ContentProviderHolder;
 HSPLandroid/app/ActivityThread;->installProviderAuthoritiesLocked(Landroid/content/IContentProvider;Landroid/content/ContentProvider;Landroid/app/ContentProviderHolder;)Landroid/app/ActivityThread$ProviderClientRecord;
-HSPLandroid/app/ActivityThread;->installSystemApplicationInfo(Landroid/content/pm/ApplicationInfo;Ljava/lang/ClassLoader;)V
-HSPLandroid/app/ActivityThread;->installSystemProviders(Ljava/util/List;)V
 HSPLandroid/app/ActivityThread;->isLoadedApkResourceDirsUpToDate(Landroid/app/LoadedApk;Landroid/content/pm/ApplicationInfo;)Z
 HSPLandroid/app/ActivityThread;->isSystem()Z
 HSPLandroid/app/ActivityThread;->lambda$A4ykhsPb8qV3ffTqpQDklHSMDJ0(Landroid/app/ActivityThread;)V
@@ -1135,73 +798,60 @@
 HSPLandroid/app/ActivityThread;->performLaunchActivity(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/content/Intent;)Landroid/app/Activity;
 HSPLandroid/app/ActivityThread;->performPauseActivity(Landroid/app/ActivityThread$ActivityClientRecord;ZLjava/lang/String;Landroid/app/servertransaction/PendingTransactionActions;)Landroid/os/Bundle;
 HSPLandroid/app/ActivityThread;->performPauseActivityIfNeeded(Landroid/app/ActivityThread$ActivityClientRecord;Ljava/lang/String;)V
-HPLandroid/app/ActivityThread;->performRestartActivity(Landroid/os/IBinder;Z)V
+HSPLandroid/app/ActivityThread;->performRestartActivity(Landroid/os/IBinder;Z)V
 HSPLandroid/app/ActivityThread;->performResumeActivity(Landroid/os/IBinder;ZLjava/lang/String;)Landroid/app/ActivityThread$ActivityClientRecord;
-HSPLandroid/app/ActivityThread;->performStopActivityInner(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/app/servertransaction/PendingTransactionActions$StopInfo;ZZZLjava/lang/String;)V
-PLandroid/app/ActivityThread;->printRow(Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/Object;)V
+HSPLandroid/app/ActivityThread;->performStopActivityInner(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/app/servertransaction/PendingTransactionActions$StopInfo;ZZLjava/lang/String;)V
+HSPLandroid/app/ActivityThread;->performUserLeavingActivity(Landroid/app/ActivityThread$ActivityClientRecord;)V
 HSPLandroid/app/ActivityThread;->purgePendingResources()V
-PLandroid/app/ActivityThread;->relaunchAllActivities(Z)V
 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
 HSPLandroid/app/ActivityThread;->scheduleContextCleanup(Landroid/app/ContextImpl;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/app/ActivityThread;->scheduleGcIdler()V
+HSPLandroid/app/ActivityThread;->scheduleGcIdler()V
+HSPLandroid/app/ActivityThread;->schedulePauseAndReturnToCurrentState(Landroid/os/IBinder;)V
 HSPLandroid/app/ActivityThread;->schedulePurgeIdler()V
 HSPLandroid/app/ActivityThread;->sendMessage(ILjava/lang/Object;)V
-PLandroid/app/ActivityThread;->sendMessage(ILjava/lang/Object;I)V
+HSPLandroid/app/ActivityThread;->sendMessage(ILjava/lang/Object;I)V
 HSPLandroid/app/ActivityThread;->sendMessage(ILjava/lang/Object;IIZ)V
 HSPLandroid/app/ActivityThread;->setupGraphicsSupport(Landroid/content/Context;)V
-HSPLandroid/app/ActivityThread;->systemMain()Landroid/app/ActivityThread;
 HSPLandroid/app/ActivityThread;->unscheduleGcIdler()V
 HSPLandroid/app/ActivityThread;->updateDebugViewAttributeState()Z
 HSPLandroid/app/ActivityThread;->updateDefaultDensity()V
 HSPLandroid/app/ActivityThread;->updateLocaleListFromAppContext(Landroid/content/Context;Landroid/os/LocaleList;)V
-HPLandroid/app/ActivityThread;->updatePendingActivityConfiguration(Landroid/os/IBinder;Landroid/content/res/Configuration;)V
 HSPLandroid/app/ActivityThread;->updatePendingConfiguration(Landroid/content/res/Configuration;)V
 HSPLandroid/app/ActivityThread;->updateProcessState(IZ)V
 HSPLandroid/app/ActivityThread;->updateVisibility(Landroid/app/ActivityThread$ActivityClientRecord;Z)V
 HSPLandroid/app/ActivityThread;->updateVmProcessState(I)V
+HSPLandroid/app/ActivityTransitionState;-><init>()V
 HSPLandroid/app/ActivityTransitionState;->enterReady(Landroid/app/Activity;)V
+HSPLandroid/app/ActivityTransitionState;->getPendingExitNames()Ljava/util/ArrayList;
 HSPLandroid/app/ActivityTransitionState;->onResume(Landroid/app/Activity;)V
 HSPLandroid/app/ActivityTransitionState;->onStop()V
 HSPLandroid/app/ActivityTransitionState;->readState(Landroid/os/Bundle;)V
+HSPLandroid/app/ActivityTransitionState;->restoreExitedViews()V
+HSPLandroid/app/ActivityTransitionState;->restoreReenteringViews()V
 HSPLandroid/app/ActivityTransitionState;->saveState(Landroid/os/Bundle;)V
 HSPLandroid/app/ActivityTransitionState;->setEnterActivityOptions(Landroid/app/Activity;Landroid/app/ActivityOptions;)V
-HPLandroid/app/ActivityTransitionState;->startExitBackTransition(Landroid/app/Activity;)Z
-HPLandroid/app/ActivityTransitionState;->startExitOutTransition(Landroid/app/Activity;Landroid/os/Bundle;)V
-PLandroid/app/AlarmManager$AlarmClockInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/AlarmManager$AlarmClockInfo;
-PLandroid/app/AlarmManager$AlarmClockInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/AlarmManager$AlarmClockInfo;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/AlarmManager$AlarmClockInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/AlarmManager$ListenerWrapper;-><init>(Landroid/app/AlarmManager;Landroid/app/AlarmManager$OnAlarmListener;)V
 HSPLandroid/app/AlarmManager$ListenerWrapper;->cancel()V
-HPLandroid/app/AlarmManager$ListenerWrapper;->doAlarm(Landroid/app/IAlarmCompleteListener;)V
-HPLandroid/app/AlarmManager$ListenerWrapper;->run()V
+HSPLandroid/app/AlarmManager$ListenerWrapper;->doAlarm(Landroid/app/IAlarmCompleteListener;)V
+HSPLandroid/app/AlarmManager$ListenerWrapper;->run()V
 HSPLandroid/app/AlarmManager$ListenerWrapper;->setHandler(Landroid/os/Handler;)V
 HSPLandroid/app/AlarmManager;-><init>(Landroid/app/IAlarmManager;Landroid/content/Context;)V
-PLandroid/app/AlarmManager;->access$000(Landroid/app/AlarmManager;)Landroid/app/IAlarmManager;
-PLandroid/app/AlarmManager;->access$100()Landroid/util/ArrayMap;
+HSPLandroid/app/AlarmManager;->access$000(Landroid/app/AlarmManager;)Landroid/app/IAlarmManager;
+HSPLandroid/app/AlarmManager;->access$100()Landroid/util/ArrayMap;
 HSPLandroid/app/AlarmManager;->cancel(Landroid/app/AlarmManager$OnAlarmListener;)V
 HSPLandroid/app/AlarmManager;->cancel(Landroid/app/PendingIntent;)V
-HSPLandroid/app/AlarmManager;->getNextAlarmClock()Landroid/app/AlarmManager$AlarmClockInfo;
 HSPLandroid/app/AlarmManager;->getNextAlarmClock(I)Landroid/app/AlarmManager$AlarmClockInfo;
-PLandroid/app/AlarmManager;->getNextWakeFromIdleTime()J
 HSPLandroid/app/AlarmManager;->legacyExactLength()J
-HSPLandroid/app/AlarmManager;->set(IJJJLandroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;Landroid/os/WorkSource;)V
-HSPLandroid/app/AlarmManager;->set(IJJJLandroid/app/PendingIntent;Landroid/os/WorkSource;)V
-PLandroid/app/AlarmManager;->set(IJJJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;Landroid/os/WorkSource;)V
 HSPLandroid/app/AlarmManager;->set(IJLandroid/app/PendingIntent;)V
 HSPLandroid/app/AlarmManager;->set(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V
-HPLandroid/app/AlarmManager;->setAndAllowWhileIdle(IJLandroid/app/PendingIntent;)V
 HSPLandroid/app/AlarmManager;->setExact(IJLandroid/app/PendingIntent;)V
 HSPLandroid/app/AlarmManager;->setExact(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V
 HSPLandroid/app/AlarmManager;->setExactAndAllowWhileIdle(IJLandroid/app/PendingIntent;)V
-PLandroid/app/AlarmManager;->setIdleUntil(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V
 HSPLandroid/app/AlarmManager;->setImpl(IJJJILandroid/app/PendingIntent;Landroid/app/AlarmManager$OnAlarmListener;Ljava/lang/String;Landroid/os/Handler;Landroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;)V
 HSPLandroid/app/AlarmManager;->setInexactRepeating(IJJLandroid/app/PendingIntent;)V
-HSPLandroid/app/AlarmManager;->setRepeating(IJJLandroid/app/PendingIntent;)V
-PLandroid/app/AlarmManager;->setWindow(IJJLandroid/app/PendingIntent;)V
-PLandroid/app/AlarmManager;->setWindow(IJJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V
 HSPLandroid/app/AppCompatCallbacks;-><init>([J)V
 HSPLandroid/app/AppCompatCallbacks;->install([J)V
 HSPLandroid/app/AppCompatCallbacks;->isChangeEnabled(J)Z
@@ -1216,258 +866,32 @@
 HSPLandroid/app/AppGlobals;->getInitialApplication()Landroid/app/Application;
 HSPLandroid/app/AppGlobals;->getIntCoreSetting(Ljava/lang/String;I)I
 HSPLandroid/app/AppGlobals;->getPackageManager()Landroid/content/pm/IPackageManager;
-HSPLandroid/app/AppGlobals;->getPermissionManager()Landroid/permission/IPermissionManager;
-HSPLandroid/app/AppOpsManager$1;-><init>(Landroid/app/AppOpsManager;Landroid/app/AppOpsManager$OnOpChangedListener;)V
-HPLandroid/app/AppOpsManager$1;->opChanged(IILjava/lang/String;)V
-HSPLandroid/app/AppOpsManager$2;-><init>(Landroid/app/AppOpsManager;Ljava/util/concurrent/Executor;Landroid/app/AppOpsManager$OnOpActiveChangedListener;)V
-HPLandroid/app/AppOpsManager$2;->lambda$opActiveChanged$0(Landroid/app/AppOpsManager$OnOpActiveChangedListener;IILjava/lang/String;Z)V
-HPLandroid/app/AppOpsManager$2;->opActiveChanged(IILjava/lang/String;Z)V
-HPLandroid/app/AppOpsManager$3;->opNoted(IILjava/lang/String;I)V
-HSPLandroid/app/AppOpsManager$HistoricalOp;-><init>(I)V
-HPLandroid/app/AppOpsManager$HistoricalOp;-><init>(Landroid/app/AppOpsManager$HistoricalOp;)V
-PLandroid/app/AppOpsManager$HistoricalOp;-><init>(Landroid/app/AppOpsManager$HistoricalOp;Landroid/app/AppOpsManager$1;)V
-PLandroid/app/AppOpsManager$HistoricalOp;->access$3300(Landroid/app/AppOpsManager$HistoricalOp;D)Landroid/app/AppOpsManager$HistoricalOp;
-PLandroid/app/AppOpsManager$HistoricalOp;->access$3400(Landroid/app/AppOpsManager$HistoricalOp;Landroid/app/AppOpsManager$HistoricalOp;)V
-HPLandroid/app/AppOpsManager$HistoricalOp;->access$3500(Landroid/app/AppOpsManager$HistoricalOp;D)V
-PLandroid/app/AppOpsManager$HistoricalOp;->access$3600(Landroid/app/AppOpsManager$HistoricalOp;)Z
-HSPLandroid/app/AppOpsManager$HistoricalOp;->access$3700(Landroid/app/AppOpsManager$HistoricalOp;IIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalOp;->access$3800(Landroid/app/AppOpsManager$HistoricalOp;IIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalOp;->access$3900(Landroid/app/AppOpsManager$HistoricalOp;IIJ)V
-HPLandroid/app/AppOpsManager$HistoricalOp;->filter(D)V
-PLandroid/app/AppOpsManager$HistoricalOp;->getBackgroundAccessCount(I)J
-PLandroid/app/AppOpsManager$HistoricalOp;->getBackgroundAccessDuration(I)J
-PLandroid/app/AppOpsManager$HistoricalOp;->getBackgroundRejectCount(I)J
-PLandroid/app/AppOpsManager$HistoricalOp;->getForegroundAccessCount(I)J
-PLandroid/app/AppOpsManager$HistoricalOp;->getForegroundAccessDuration(I)J
-PLandroid/app/AppOpsManager$HistoricalOp;->getForegroundRejectCount(I)J
-PLandroid/app/AppOpsManager$HistoricalOp;->getOpCode()I
-PLandroid/app/AppOpsManager$HistoricalOp;->getOpName()Ljava/lang/String;
-HSPLandroid/app/AppOpsManager$HistoricalOp;->getOrCreateAccessCount()Landroid/util/LongSparseLongArray;
-HSPLandroid/app/AppOpsManager$HistoricalOp;->getOrCreateAccessDuration()Landroid/util/LongSparseLongArray;
-HSPLandroid/app/AppOpsManager$HistoricalOp;->getOrCreateRejectCount()Landroid/util/LongSparseLongArray;
-PLandroid/app/AppOpsManager$HistoricalOp;->hasData(Landroid/util/LongSparseLongArray;)Z
-HSPLandroid/app/AppOpsManager$HistoricalOp;->increaseAccessCount(IIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalOp;->increaseAccessDuration(IIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalOp;->increaseCount(Landroid/util/LongSparseLongArray;IIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalOp;->increaseRejectCount(IIJ)V
-PLandroid/app/AppOpsManager$HistoricalOp;->isEmpty()Z
-PLandroid/app/AppOpsManager$HistoricalOp;->lambda$DkVcBvqB32SMHlxw0sWQPh3GL1A(Landroid/app/AppOpsManager$HistoricalOp;)Landroid/util/LongSparseLongArray;
-PLandroid/app/AppOpsManager$HistoricalOp;->lambda$HUOLFYs8TiaQIOXcrq6JzjxA6gs(Landroid/app/AppOpsManager$HistoricalOp;)Landroid/util/LongSparseLongArray;
-PLandroid/app/AppOpsManager$HistoricalOp;->lambda$Vs6pDL0wjOBTquwNnreWVbPQrn4(Landroid/app/AppOpsManager$HistoricalOp;)Landroid/util/LongSparseLongArray;
-PLandroid/app/AppOpsManager$HistoricalOp;->merge(Landroid/app/AppOpsManager$HistoricalOp;)V
-HPLandroid/app/AppOpsManager$HistoricalOp;->merge(Ljava/util/function/Supplier;Landroid/util/LongSparseLongArray;)V
-HPLandroid/app/AppOpsManager$HistoricalOp;->scale(Landroid/util/LongSparseLongArray;D)V
-PLandroid/app/AppOpsManager$HistoricalOp;->splice(D)Landroid/app/AppOpsManager$HistoricalOp;
-HPLandroid/app/AppOpsManager$HistoricalOp;->splice(Landroid/util/LongSparseLongArray;Ljava/util/function/Supplier;D)V
-HSPLandroid/app/AppOpsManager$HistoricalOps;-><init>(JJ)V
-HPLandroid/app/AppOpsManager$HistoricalOps;-><init>(Landroid/app/AppOpsManager$HistoricalOps;)V
-HPLandroid/app/AppOpsManager$HistoricalOps;->filter(ILjava/lang/String;[Ljava/lang/String;JJ)V
-PLandroid/app/AppOpsManager$HistoricalOps;->getBeginTimeMillis()J
-PLandroid/app/AppOpsManager$HistoricalOps;->getDurationMillis()J
-PLandroid/app/AppOpsManager$HistoricalOps;->getEndTimeMillis()J
-HSPLandroid/app/AppOpsManager$HistoricalOps;->getOrCreateHistoricalUidOps(I)Landroid/app/AppOpsManager$HistoricalUidOps;
-PLandroid/app/AppOpsManager$HistoricalOps;->getUidCount()I
-PLandroid/app/AppOpsManager$HistoricalOps;->getUidOps(I)Landroid/app/AppOpsManager$HistoricalUidOps;
-HPLandroid/app/AppOpsManager$HistoricalOps;->getUidOpsAt(I)Landroid/app/AppOpsManager$HistoricalUidOps;
-HSPLandroid/app/AppOpsManager$HistoricalOps;->increaseAccessCount(IILjava/lang/String;IIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalOps;->increaseAccessDuration(IILjava/lang/String;IIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalOps;->increaseRejectCount(IILjava/lang/String;IIJ)V
-HPLandroid/app/AppOpsManager$HistoricalOps;->isEmpty()Z
-HPLandroid/app/AppOpsManager$HistoricalOps;->merge(Landroid/app/AppOpsManager$HistoricalOps;)V
-PLandroid/app/AppOpsManager$HistoricalOps;->round(D)D
-HSPLandroid/app/AppOpsManager$HistoricalOps;->setEndTime(J)V
-PLandroid/app/AppOpsManager$HistoricalOps;->splice(DZ)Landroid/app/AppOpsManager$HistoricalOps;
-HPLandroid/app/AppOpsManager$HistoricalOpsRequest$Builder;-><init>(JJ)V
-PLandroid/app/AppOpsManager$HistoricalOpsRequest$Builder;->build()Landroid/app/AppOpsManager$HistoricalOpsRequest;
-PLandroid/app/AppOpsManager$HistoricalOpsRequest$Builder;->setFlags(I)Landroid/app/AppOpsManager$HistoricalOpsRequest$Builder;
-PLandroid/app/AppOpsManager$HistoricalOpsRequest$Builder;->setOpNames(Ljava/util/List;)Landroid/app/AppOpsManager$HistoricalOpsRequest$Builder;
-PLandroid/app/AppOpsManager$HistoricalOpsRequest$Builder;->setPackageName(Ljava/lang/String;)Landroid/app/AppOpsManager$HistoricalOpsRequest$Builder;
-PLandroid/app/AppOpsManager$HistoricalOpsRequest$Builder;->setUid(I)Landroid/app/AppOpsManager$HistoricalOpsRequest$Builder;
-PLandroid/app/AppOpsManager$HistoricalOpsRequest;-><init>(ILjava/lang/String;Ljava/util/List;JJI)V
-PLandroid/app/AppOpsManager$HistoricalOpsRequest;-><init>(ILjava/lang/String;Ljava/util/List;JJILandroid/app/AppOpsManager$1;)V
-PLandroid/app/AppOpsManager$HistoricalOpsRequest;->access$4500(Landroid/app/AppOpsManager$HistoricalOpsRequest;)I
-PLandroid/app/AppOpsManager$HistoricalOpsRequest;->access$4600(Landroid/app/AppOpsManager$HistoricalOpsRequest;)Ljava/lang/String;
-PLandroid/app/AppOpsManager$HistoricalOpsRequest;->access$4700(Landroid/app/AppOpsManager$HistoricalOpsRequest;)Ljava/util/List;
-PLandroid/app/AppOpsManager$HistoricalOpsRequest;->access$4800(Landroid/app/AppOpsManager$HistoricalOpsRequest;)J
-PLandroid/app/AppOpsManager$HistoricalOpsRequest;->access$4900(Landroid/app/AppOpsManager$HistoricalOpsRequest;)J
-PLandroid/app/AppOpsManager$HistoricalOpsRequest;->access$5000(Landroid/app/AppOpsManager$HistoricalOpsRequest;)I
-HPLandroid/app/AppOpsManager$HistoricalPackageOps;-><init>(Landroid/app/AppOpsManager$HistoricalPackageOps;)V
-PLandroid/app/AppOpsManager$HistoricalPackageOps;-><init>(Landroid/app/AppOpsManager$HistoricalPackageOps;Landroid/app/AppOpsManager$1;)V
-HSPLandroid/app/AppOpsManager$HistoricalPackageOps;-><init>(Ljava/lang/String;)V
-PLandroid/app/AppOpsManager$HistoricalPackageOps;->access$2300(Landroid/app/AppOpsManager$HistoricalPackageOps;D)Landroid/app/AppOpsManager$HistoricalPackageOps;
-PLandroid/app/AppOpsManager$HistoricalPackageOps;->access$2400(Landroid/app/AppOpsManager$HistoricalPackageOps;Landroid/app/AppOpsManager$HistoricalPackageOps;)V
-PLandroid/app/AppOpsManager$HistoricalPackageOps;->access$2500(Landroid/app/AppOpsManager$HistoricalPackageOps;[Ljava/lang/String;D)V
-PLandroid/app/AppOpsManager$HistoricalPackageOps;->access$2600(Landroid/app/AppOpsManager$HistoricalPackageOps;)Z
-HSPLandroid/app/AppOpsManager$HistoricalPackageOps;->access$2700(Landroid/app/AppOpsManager$HistoricalPackageOps;IIIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalPackageOps;->access$2800(Landroid/app/AppOpsManager$HistoricalPackageOps;IIIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalPackageOps;->access$2900(Landroid/app/AppOpsManager$HistoricalPackageOps;IIIJ)V
-HPLandroid/app/AppOpsManager$HistoricalPackageOps;->filter([Ljava/lang/String;D)V
-PLandroid/app/AppOpsManager$HistoricalPackageOps;->getOp(Ljava/lang/String;)Landroid/app/AppOpsManager$HistoricalOp;
-HPLandroid/app/AppOpsManager$HistoricalPackageOps;->getOpAt(I)Landroid/app/AppOpsManager$HistoricalOp;
-HPLandroid/app/AppOpsManager$HistoricalPackageOps;->getOpCount()I
-HSPLandroid/app/AppOpsManager$HistoricalPackageOps;->getOrCreateHistoricalOp(I)Landroid/app/AppOpsManager$HistoricalOp;
-PLandroid/app/AppOpsManager$HistoricalPackageOps;->getPackageName()Ljava/lang/String;
-HSPLandroid/app/AppOpsManager$HistoricalPackageOps;->increaseAccessCount(IIIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalPackageOps;->increaseAccessDuration(IIIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalPackageOps;->increaseRejectCount(IIIJ)V
-PLandroid/app/AppOpsManager$HistoricalPackageOps;->isEmpty()Z
-HPLandroid/app/AppOpsManager$HistoricalPackageOps;->merge(Landroid/app/AppOpsManager$HistoricalPackageOps;)V
-PLandroid/app/AppOpsManager$HistoricalPackageOps;->splice(D)Landroid/app/AppOpsManager$HistoricalPackageOps;
-HSPLandroid/app/AppOpsManager$HistoricalUidOps;-><init>(I)V
-HPLandroid/app/AppOpsManager$HistoricalUidOps;-><init>(Landroid/app/AppOpsManager$HistoricalUidOps;)V
-PLandroid/app/AppOpsManager$HistoricalUidOps;-><init>(Landroid/app/AppOpsManager$HistoricalUidOps;Landroid/app/AppOpsManager$1;)V
-PLandroid/app/AppOpsManager$HistoricalUidOps;->access$1200(Landroid/app/AppOpsManager$HistoricalUidOps;D)Landroid/app/AppOpsManager$HistoricalUidOps;
-PLandroid/app/AppOpsManager$HistoricalUidOps;->access$1300(Landroid/app/AppOpsManager$HistoricalUidOps;Landroid/app/AppOpsManager$HistoricalUidOps;)V
-PLandroid/app/AppOpsManager$HistoricalUidOps;->access$1400(Landroid/app/AppOpsManager$HistoricalUidOps;Ljava/lang/String;[Ljava/lang/String;D)V
-PLandroid/app/AppOpsManager$HistoricalUidOps;->access$1500(Landroid/app/AppOpsManager$HistoricalUidOps;)Z
-HSPLandroid/app/AppOpsManager$HistoricalUidOps;->access$1600(Landroid/app/AppOpsManager$HistoricalUidOps;ILjava/lang/String;IIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalUidOps;->access$1700(Landroid/app/AppOpsManager$HistoricalUidOps;ILjava/lang/String;IIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalUidOps;->access$1800(Landroid/app/AppOpsManager$HistoricalUidOps;ILjava/lang/String;IIJ)V
-HPLandroid/app/AppOpsManager$HistoricalUidOps;->filter(Ljava/lang/String;[Ljava/lang/String;D)V
-HSPLandroid/app/AppOpsManager$HistoricalUidOps;->getOrCreateHistoricalPackageOps(Ljava/lang/String;)Landroid/app/AppOpsManager$HistoricalPackageOps;
-HPLandroid/app/AppOpsManager$HistoricalUidOps;->getPackageCount()I
-PLandroid/app/AppOpsManager$HistoricalUidOps;->getPackageOps(Ljava/lang/String;)Landroid/app/AppOpsManager$HistoricalPackageOps;
-HPLandroid/app/AppOpsManager$HistoricalUidOps;->getPackageOpsAt(I)Landroid/app/AppOpsManager$HistoricalPackageOps;
-PLandroid/app/AppOpsManager$HistoricalUidOps;->getUid()I
-HSPLandroid/app/AppOpsManager$HistoricalUidOps;->increaseAccessCount(ILjava/lang/String;IIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalUidOps;->increaseAccessDuration(ILjava/lang/String;IIJ)V
-HSPLandroid/app/AppOpsManager$HistoricalUidOps;->increaseRejectCount(ILjava/lang/String;IIJ)V
-PLandroid/app/AppOpsManager$HistoricalUidOps;->isEmpty()Z
-HPLandroid/app/AppOpsManager$HistoricalUidOps;->merge(Landroid/app/AppOpsManager$HistoricalUidOps;)V
-PLandroid/app/AppOpsManager$HistoricalUidOps;->splice(D)Landroid/app/AppOpsManager$HistoricalUidOps;
-HSPLandroid/app/AppOpsManager$OnOpChangedInternalListener;-><init>()V
-PLandroid/app/AppOpsManager$OnOpChangedInternalListener;->onOpChanged(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/AppOpsManager$OpEntry$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/AppOpsManager$OpEntry;
-HSPLandroid/app/AppOpsManager$OpEntry$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/AppOpsManager$OpEntry;-><init>(II[Landroid/util/Pair;)V
-HSPLandroid/app/AppOpsManager$OpEntry;->access$200(Landroid/app/AppOpsManager$OpEntry;)I
-HSPLandroid/app/AppOpsManager$OpEntry;->createFromParcel(Landroid/os/Parcel;)Landroid/app/AppOpsManager$OpEntry;
-HSPLandroid/app/AppOpsManager$OpEntry;->getDuration()J
-PLandroid/app/AppOpsManager$OpEntry;->getFeatures()Ljava/util/Map;
-HSPLandroid/app/AppOpsManager$OpEntry;->getLastAccessBackgroundTime(I)J
-HSPLandroid/app/AppOpsManager$OpEntry;->getLastAccessTime(I)J
-HSPLandroid/app/AppOpsManager$OpEntry;->getLastDuration(III)J
-HSPLandroid/app/AppOpsManager$OpEntry;->getLastRejectTime(I)J
-HSPLandroid/app/AppOpsManager$OpEntry;->getMaxOfFeatures(Ljava/util/function/ToLongFunction;)J
-PLandroid/app/AppOpsManager$OpEntry;->getMode()I
-HSPLandroid/app/AppOpsManager$OpEntry;->getOp()I
-HSPLandroid/app/AppOpsManager$OpEntry;->getRejectTime()J
-HSPLandroid/app/AppOpsManager$OpEntry;->getTime()J
-HPLandroid/app/AppOpsManager$OpEntry;->isRunning()Z
-HSPLandroid/app/AppOpsManager$OpEntry;->lambda$getLastAccessBackgroundTime$2(ILandroid/app/AppOpsManager$OpFeatureEntry;)J
-HSPLandroid/app/AppOpsManager$OpEntry;->lambda$getLastAccessTime$0(ILandroid/app/AppOpsManager$OpFeatureEntry;)J
-HSPLandroid/app/AppOpsManager$OpEntry;->lambda$getLastDuration$10(IIILandroid/app/AppOpsManager$OpFeatureEntry;)J
-HSPLandroid/app/AppOpsManager$OpEntry;->lambda$getLastRejectTime$4(ILandroid/app/AppOpsManager$OpFeatureEntry;)J
-HPLandroid/app/AppOpsManager$OpEntry;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/AppOpsManager$OpFeatureEntry$Builder;-><init>(ZLandroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;)V
-HSPLandroid/app/AppOpsManager$OpFeatureEntry$Builder;->build()Landroid/app/AppOpsManager$OpFeatureEntry;
-HSPLandroid/app/AppOpsManager$OpFeatureEntry$Builder;->setParent(Landroid/app/AppOpsManager$OpEntry;)Landroid/app/AppOpsManager$OpFeatureEntry$Builder;
-HSPLandroid/app/AppOpsManager$OpFeatureEntry;-><init>(Landroid/app/AppOpsManager$OpEntry;ZLandroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;)V
-HPLandroid/app/AppOpsManager$OpFeatureEntry;->access$700(Landroid/app/AppOpsManager$OpFeatureEntry;)Z
-HPLandroid/app/AppOpsManager$OpFeatureEntry;->collectKeys()Landroid/util/LongSparseArray;
-HSPLandroid/app/AppOpsManager$OpFeatureEntry;->createFromParcel(Landroid/os/Parcel;)Landroid/app/AppOpsManager$OpFeatureEntry$Builder;
-HSPLandroid/app/AppOpsManager$OpFeatureEntry;->getLastAccessBackgroundTime(I)J
-HSPLandroid/app/AppOpsManager$OpFeatureEntry;->getLastAccessTime(I)J
-HPLandroid/app/AppOpsManager$OpFeatureEntry;->getLastAccessTime(III)J
-HSPLandroid/app/AppOpsManager$OpFeatureEntry;->getLastDuration(III)J
-HSPLandroid/app/AppOpsManager$OpFeatureEntry;->getLastRejectTime(I)J
-HPLandroid/app/AppOpsManager$OpFeatureEntry;->getLastRejectTime(III)J
-HPLandroid/app/AppOpsManager$OpFeatureEntry;->getProxyFeatureId(II)Ljava/lang/String;
-HPLandroid/app/AppOpsManager$OpFeatureEntry;->getProxyPackageName(II)Ljava/lang/String;
-HPLandroid/app/AppOpsManager$OpFeatureEntry;->getProxyUid(II)I
-HPLandroid/app/AppOpsManager$OpFeatureEntry;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/AppOpsManager$PackageOps$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/AppOpsManager$PackageOps;
-HSPLandroid/app/AppOpsManager$PackageOps$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/AppOpsManager$PackageOps;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/AppOpsManager$PackageOps;-><init>(Ljava/lang/String;ILjava/util/List;)V
 HSPLandroid/app/AppOpsManager$PackageOps;->getOps()Ljava/util/List;
-HSPLandroid/app/AppOpsManager$PackageOps;->getPackageName()Ljava/lang/String;
-HSPLandroid/app/AppOpsManager$PackageOps;->getUid()I
-HPLandroid/app/AppOpsManager$PackageOps;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/AppOpsManager;-><init>(Landroid/content/Context;Lcom/android/internal/app/IAppOpsService;)V
-HPLandroid/app/AppOpsManager;->access$000(Landroid/util/LongSparseLongArray;Landroid/util/LongSparseArray;)Landroid/util/LongSparseArray;
-HSPLandroid/app/AppOpsManager;->access$100(Landroid/util/LongSparseLongArray;III)J
-HSPLandroid/app/AppOpsManager;->access$300(Landroid/util/LongSparseLongArray;III)J
-HPLandroid/app/AppOpsManager;->access$400(Landroid/util/LongSparseLongArray;III)J
-HPLandroid/app/AppOpsManager;->access$500(Landroid/util/LongSparseArray;III)Ljava/lang/String;
-HSPLandroid/app/AppOpsManager;->access$600()[Ljava/lang/String;
-PLandroid/app/AppOpsManager;->checkAudioOpNoThrow(IIILjava/lang/String;)I
+HSPLandroid/app/AppOpsManager;->access$200()[Ljava/lang/String;
 HSPLandroid/app/AppOpsManager;->checkOp(IILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->checkOpNoThrow(IILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->checkOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->checkPackage(ILjava/lang/String;)V
-HPLandroid/app/AppOpsManager;->collectKeys(Landroid/util/LongSparseLongArray;Landroid/util/LongSparseArray;)Landroid/util/LongSparseArray;
-HSPLandroid/app/AppOpsManager;->extractFlagsFromKey(J)I
-HSPLandroid/app/AppOpsManager;->extractUidStateFromKey(J)I
-HPLandroid/app/AppOpsManager;->findFirstNonNegativeForFlagsInStates(Landroid/util/LongSparseLongArray;III)J
-HPLandroid/app/AppOpsManager;->findFirstNonNullForFlagsInStates(Landroid/util/LongSparseArray;III)Ljava/lang/String;
-HSPLandroid/app/AppOpsManager;->finishOp(IILjava/lang/String;)V
-HSPLandroid/app/AppOpsManager;->finishOp(IILjava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/AppOpsManager;->finishOp(Ljava/lang/String;ILjava/lang/String;)V
-HPLandroid/app/AppOpsManager;->flagsToString(I)Ljava/lang/String;
-HPLandroid/app/AppOpsManager;->getFlagName(I)Ljava/lang/String;
+HSPLandroid/app/AppOpsManager;->collectNotedOpForSelf(ILjava/lang/String;)V
 HSPLandroid/app/AppOpsManager;->getFormattedStackTrace()Ljava/lang/String;
-PLandroid/app/AppOpsManager;->getHistoricalOps(Landroid/app/AppOpsManager$HistoricalOpsRequest;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V
-HSPLandroid/app/AppOpsManager;->getOpsForPackage(ILjava/lang/String;[I)Ljava/util/List;
+HSPLandroid/app/AppOpsManager;->getNotedOpCollectionMode(ILjava/lang/String;I)I
 HSPLandroid/app/AppOpsManager;->getPackagesForOps([I)Ljava/util/List;
-HSPLandroid/app/AppOpsManager;->getPackagesForOps([Ljava/lang/String;)Ljava/util/List;
-HSPLandroid/app/AppOpsManager;->getToken(Lcom/android/internal/app/IAppOpsService;)Landroid/os/IBinder;
-HPLandroid/app/AppOpsManager;->getUidStateName(I)Ljava/lang/String;
 HSPLandroid/app/AppOpsManager;->isCollectingNotedAppOps()Z
-PLandroid/app/AppOpsManager;->isOperationActive(IILjava/lang/String;)Z
-HPLandroid/app/AppOpsManager;->keyToString(J)Ljava/lang/String;
-PLandroid/app/AppOpsManager;->lambda$getHistoricalOps$0(Ljava/util/function/Consumer;Landroid/app/AppOpsManager$HistoricalOps;)V
-PLandroid/app/AppOpsManager;->lambda$getHistoricalOps$1(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;Landroid/os/Bundle;)V
-HSPLandroid/app/AppOpsManager;->makeKey(II)J
-HSPLandroid/app/AppOpsManager;->markAppOpNoted(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/AppOpsManager;->maxForFlagsInStates(Landroid/util/LongSparseLongArray;III)J
-HPLandroid/app/AppOpsManager;->modeToName(I)Ljava/lang/String;
-HSPLandroid/app/AppOpsManager;->noteOp(IILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteOp(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
-PLandroid/app/AppOpsManager;->noteOp(Ljava/lang/String;ILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
-PLandroid/app/AppOpsManager;->noteOpNoThrow(IILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteOpNoThrow(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/app/AppOpsManager;->noteOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteOpNoThrow(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteProxyOp(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteProxyOpNoThrow(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)I
-HSPLandroid/app/AppOpsManager;->noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/app/AppOpsManager;->noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)I
-HSPLandroid/app/AppOpsManager;->opToDefaultMode(I)I
-HPLandroid/app/AppOpsManager;->opToName(I)Ljava/lang/String;
-HSPLandroid/app/AppOpsManager;->opToPermission(I)Ljava/lang/String;
-HSPLandroid/app/AppOpsManager;->opToPublicName(I)Ljava/lang/String;
-PLandroid/app/AppOpsManager;->opToRestriction(I)Ljava/lang/String;
-HSPLandroid/app/AppOpsManager;->opToSwitch(I)I
 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
-HSPLandroid/app/AppOpsManager;->resolveFirstUnrestrictedUidState(I)I
-HSPLandroid/app/AppOpsManager;->resolveLastRestrictedUidState(I)I
-HSPLandroid/app/AppOpsManager;->setMode(Ljava/lang/String;ILjava/lang/String;I)V
-HSPLandroid/app/AppOpsManager;->setRestriction(III[Ljava/lang/String;)V
-HSPLandroid/app/AppOpsManager;->setUidMode(III)V
-PLandroid/app/AppOpsManager;->setUidMode(Ljava/lang/String;II)V
-HSPLandroid/app/AppOpsManager;->startOpNoThrow(IILjava/lang/String;)I
-PLandroid/app/AppOpsManager;->startOpNoThrow(IILjava/lang/String;Z)I
-HSPLandroid/app/AppOpsManager;->startOpNoThrow(IILjava/lang/String;ZLjava/lang/String;Ljava/lang/String;)I
-HSPLandroid/app/AppOpsManager;->startOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I
-HSPLandroid/app/AppOpsManager;->startOpNoThrow(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/app/AppOpsManager;->startWatchingActive([Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/app/AppOpsManager$OnOpActiveChangedListener;)V
-HSPLandroid/app/AppOpsManager;->startWatchingMode(ILjava/lang/String;ILandroid/app/AppOpsManager$OnOpChangedListener;)V
-HSPLandroid/app/AppOpsManager;->startWatchingMode(ILjava/lang/String;Landroid/app/AppOpsManager$OnOpChangedListener;)V
-HSPLandroid/app/AppOpsManager;->startWatchingMode(Ljava/lang/String;Ljava/lang/String;ILandroid/app/AppOpsManager$OnOpChangedListener;)V
-HSPLandroid/app/AppOpsManager;->startWatchingMode(Ljava/lang/String;Ljava/lang/String;Landroid/app/AppOpsManager$OnOpChangedListener;)V
-HSPLandroid/app/AppOpsManager;->stopWatchingMode(Landroid/app/AppOpsManager$OnOpChangedListener;)V
+HSPLandroid/app/AppOpsManager;->resumeNotedAppOpsCollection(Landroid/app/AppOpsManager$PausedNotedAppOpsCollection;)V
 HSPLandroid/app/AppOpsManager;->strOpToOp(Ljava/lang/String;)I
-HSPLandroid/app/AppOpsManager;->sumForFlagsInStates(Landroid/util/LongSparseLongArray;III)J
 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
-PLandroid/app/AppOpsManager;->unsafeCheckOpRawNoThrow(Ljava/lang/String;ILjava/lang/String;)I
-HSPLandroid/app/AppOpsManagerInternal;-><init>()V
 HSPLandroid/app/Application$ActivityLifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
 HSPLandroid/app/Application$ActivityLifecycleCallbacks;->onActivityPostDestroyed(Landroid/app/Activity;)V
 HSPLandroid/app/Application$ActivityLifecycleCallbacks;->onActivityPostPaused(Landroid/app/Activity;)V
@@ -1507,34 +931,19 @@
 HSPLandroid/app/Application;->dispatchActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V
 HSPLandroid/app/Application;->dispatchActivityStarted(Landroid/app/Activity;)V
 HSPLandroid/app/Application;->dispatchActivityStopped(Landroid/app/Activity;)V
-HPLandroid/app/Application;->dispatchOnProvideAssistData(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroid/app/Application;->getAutofillClient()Landroid/view/autofill/AutofillManager$AutofillClient;
 HSPLandroid/app/Application;->getProcessName()Ljava/lang/String;
 HSPLandroid/app/Application;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLandroid/app/Application;->onCreate()V
-PLandroid/app/Application;->onLowMemory()V
+HSPLandroid/app/Application;->onLowMemory()V
 HSPLandroid/app/Application;->onTrimMemory(I)V
 HSPLandroid/app/Application;->registerActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V
 HSPLandroid/app/Application;->registerComponentCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/app/Application;->unregisterActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V
-HPLandroid/app/Application;->unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V
-HSPLandroid/app/ApplicationErrorReport$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ApplicationErrorReport;
-HSPLandroid/app/ApplicationErrorReport$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/ApplicationErrorReport$CrashInfo;-><init>()V
-HSPLandroid/app/ApplicationErrorReport$CrashInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/Application;->unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/app/ApplicationErrorReport$CrashInfo;-><init>(Ljava/lang/Throwable;)V
 HSPLandroid/app/ApplicationErrorReport$CrashInfo;->sanitizeString(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/app/ApplicationErrorReport$CrashInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/ApplicationErrorReport$ParcelableCrashInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ApplicationErrorReport$ParcelableCrashInfo;
-PLandroid/app/ApplicationErrorReport$ParcelableCrashInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/ApplicationErrorReport$ParcelableCrashInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/ApplicationErrorReport$ParcelableCrashInfo;-><init>(Ljava/lang/Throwable;)V
-HSPLandroid/app/ApplicationErrorReport;-><init>()V
-HSPLandroid/app/ApplicationErrorReport;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/ApplicationErrorReport;->getErrorReportReceiver(Landroid/content/Context;Ljava/lang/String;I)Landroid/content/ComponentName;
-PLandroid/app/ApplicationErrorReport;->getErrorReportReceiver(Landroid/content/pm/PackageManager;Ljava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;
-HSPLandroid/app/ApplicationErrorReport;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/app/ApplicationErrorReport;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/ApplicationLoaders$CachedClassLoader;-><init>()V
 HSPLandroid/app/ApplicationLoaders$CachedClassLoader;-><init>(Landroid/app/ApplicationLoaders$1;)V
 HSPLandroid/app/ApplicationLoaders;->addNative(Ljava/lang/ClassLoader;Ljava/util/Collection;)V
@@ -1547,103 +956,64 @@
 HSPLandroid/app/ApplicationLoaders;->getDefault()Landroid/app/ApplicationLoaders;
 HSPLandroid/app/ApplicationLoaders;->getSharedLibraryClassLoaderWithSharedLibraries(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/util/List;)Ljava/lang/ClassLoader;
 HSPLandroid/app/ApplicationLoaders;->sharedLibrariesEquals(Ljava/util/List;Ljava/util/List;)Z
-HSPLandroid/app/ApplicationPackageManager$OnPermissionsChangeListenerDelegate;-><init>(Landroid/app/ApplicationPackageManager;Landroid/content/pm/PackageManager$OnPermissionsChangedListener;Landroid/os/Looper;)V
-PLandroid/app/ApplicationPackageManager$OnPermissionsChangeListenerDelegate;->handleMessage(Landroid/os/Message;)Z
-PLandroid/app/ApplicationPackageManager$OnPermissionsChangeListenerDelegate;->onPermissionsChanged(I)V
+HSPLandroid/app/ApplicationPackageManager$1;-><init>(Landroid/app/ApplicationPackageManager;ILjava/lang/String;)V
+HSPLandroid/app/ApplicationPackageManager$1;->recompute(Landroid/app/ApplicationPackageManager$HasSystemFeatureQuery;)Ljava/lang/Boolean;
+HSPLandroid/app/ApplicationPackageManager$1;->recompute(Landroid/app/ApplicationPackageManager$SystemFeatureQuery;)Ljava/lang/Boolean;
+HSPLandroid/app/ApplicationPackageManager$1;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/app/ApplicationPackageManager$HasSystemFeatureQuery;-><init>(Landroid/app/ApplicationPackageManager;Ljava/lang/String;I)V
+HSPLandroid/app/ApplicationPackageManager$HasSystemFeatureQuery;->equals(Ljava/lang/Object;)Z
+HSPLandroid/app/ApplicationPackageManager$HasSystemFeatureQuery;->hashCode()I
 HSPLandroid/app/ApplicationPackageManager$ResourceName;-><init>(Ljava/lang/String;I)V
 HSPLandroid/app/ApplicationPackageManager$ResourceName;->equals(Ljava/lang/Object;)Z
 HSPLandroid/app/ApplicationPackageManager$ResourceName;->hashCode()I
+HSPLandroid/app/ApplicationPackageManager$SystemFeatureQuery;-><init>(Landroid/app/ApplicationPackageManager;Ljava/lang/String;I)V
+HSPLandroid/app/ApplicationPackageManager$SystemFeatureQuery;->equals(Ljava/lang/Object;)Z
+HSPLandroid/app/ApplicationPackageManager$SystemFeatureQuery;->hashCode()I
 HSPLandroid/app/ApplicationPackageManager;-><init>(Landroid/app/ContextImpl;Landroid/content/pm/IPackageManager;Landroid/permission/IPermissionManager;)V
-HSPLandroid/app/ApplicationPackageManager;->addOnPermissionsChangeListener(Landroid/content/pm/PackageManager$OnPermissionsChangedListener;)V
-HSPLandroid/app/ApplicationPackageManager;->addPermissionAsync(Landroid/content/pm/PermissionInfo;)Z
-HPLandroid/app/ApplicationPackageManager;->canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/app/ApplicationPackageManager;->access$000(Landroid/app/ApplicationPackageManager;Ljava/lang/String;I)Z
 HSPLandroid/app/ApplicationPackageManager;->checkPermission(Ljava/lang/String;Ljava/lang/String;)I
-PLandroid/app/ApplicationPackageManager;->checkSignatures(II)I
 HSPLandroid/app/ApplicationPackageManager;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/ApplicationPackageManager;->configurationChanged()V
-HPLandroid/app/ApplicationPackageManager;->freeStorageAndNotify(Ljava/lang/String;JLandroid/content/pm/IPackageDataObserver;)V
 HSPLandroid/app/ApplicationPackageManager;->getActivityInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
-HSPLandroid/app/ApplicationPackageManager;->getAllPermissionGroups(I)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->getApplicationEnabledSetting(Ljava/lang/String;)I
-HSPLandroid/app/ApplicationPackageManager;->getApplicationIcon(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/app/ApplicationPackageManager;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
 HSPLandroid/app/ApplicationPackageManager;->getApplicationInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo;
 HSPLandroid/app/ApplicationPackageManager;->getApplicationLabel(Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;
-HPLandroid/app/ApplicationPackageManager;->getArtManager()Landroid/content/pm/dex/ArtManager;
-HSPLandroid/app/ApplicationPackageManager;->getAttentionServicePackageName()Ljava/lang/String;
-HSPLandroid/app/ApplicationPackageManager;->getBadgedDrawable(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/Rect;Z)Landroid/graphics/drawable/Drawable;
 HSPLandroid/app/ApplicationPackageManager;->getCachedIcon(Landroid/app/ApplicationPackageManager$ResourceName;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/app/ApplicationPackageManager;->getCachedString(Landroid/app/ApplicationPackageManager$ResourceName;)Ljava/lang/CharSequence;
-HSPLandroid/app/ApplicationPackageManager;->getChangedPackages(I)Landroid/content/pm/ChangedPackages;
 HSPLandroid/app/ApplicationPackageManager;->getComponentEnabledSetting(Landroid/content/ComponentName;)I
-PLandroid/app/ApplicationPackageManager;->getContentCaptureServicePackageName()Ljava/lang/String;
-HSPLandroid/app/ApplicationPackageManager;->getDeclaredSharedLibraries(Ljava/lang/String;I)Ljava/util/List;
-PLandroid/app/ApplicationPackageManager;->getDefaultActivityIcon()Landroid/graphics/drawable/Drawable;
 HSPLandroid/app/ApplicationPackageManager;->getDrawable(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
-HPLandroid/app/ApplicationPackageManager;->getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;
-PLandroid/app/ApplicationPackageManager;->getHomeActivities(Ljava/util/List;)Landroid/content/ComponentName;
 HSPLandroid/app/ApplicationPackageManager;->getInstalledApplications(I)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->getInstalledApplicationsAsUser(II)Ljava/util/List;
-HSPLandroid/app/ApplicationPackageManager;->getInstalledModules(I)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->getInstalledPackages(I)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->getInstalledPackagesAsUser(II)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/app/ApplicationPackageManager;->getInstantAppResolverSettingsComponent()Landroid/content/ComponentName;
-HSPLandroid/app/ApplicationPackageManager;->getInstantApps()Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->getLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;
-HSPLandroid/app/ApplicationPackageManager;->getModuleInfo(Ljava/lang/String;I)Landroid/content/pm/ModuleInfo;
 HSPLandroid/app/ApplicationPackageManager;->getNameForUid(I)Ljava/lang/String;
 HSPLandroid/app/ApplicationPackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
 HSPLandroid/app/ApplicationPackageManager;->getPackageInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/PackageInfo;
 HSPLandroid/app/ApplicationPackageManager;->getPackageInstaller()Landroid/content/pm/PackageInstaller;
 HSPLandroid/app/ApplicationPackageManager;->getPackageUid(Ljava/lang/String;I)I
-HSPLandroid/app/ApplicationPackageManager;->getPackageUidAsUser(Ljava/lang/String;I)I
 HSPLandroid/app/ApplicationPackageManager;->getPackageUidAsUser(Ljava/lang/String;II)I
 HSPLandroid/app/ApplicationPackageManager;->getPackagesForUid(I)[Ljava/lang/String;
-HSPLandroid/app/ApplicationPackageManager;->getPackagesHoldingPermissions([Ljava/lang/String;I)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->getPermissionControllerPackageName()Ljava/lang/String;
-HSPLandroid/app/ApplicationPackageManager;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)I
-HSPLandroid/app/ApplicationPackageManager;->getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;
 HSPLandroid/app/ApplicationPackageManager;->getPermissionInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;
-PLandroid/app/ApplicationPackageManager;->getPrimaryStorageCurrentVolume()Landroid/os/storage/VolumeInfo;
-HPLandroid/app/ApplicationPackageManager;->getProfileIconForDensity(Landroid/os/UserHandle;II)Landroid/graphics/drawable/Drawable;
-HSPLandroid/app/ApplicationPackageManager;->getProviderInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ProviderInfo;
 HSPLandroid/app/ApplicationPackageManager;->getReceiverInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
 HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/Resources;
 HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Ljava/lang/String;)Landroid/content/res/Resources;
-PLandroid/app/ApplicationPackageManager;->getResourcesForApplicationAsUser(Ljava/lang/String;I)Landroid/content/res/Resources;
 HSPLandroid/app/ApplicationPackageManager;->getServiceInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;
-PLandroid/app/ApplicationPackageManager;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String;
-HPLandroid/app/ApplicationPackageManager;->getSetupWizardPackageName()Ljava/lang/String;
-HPLandroid/app/ApplicationPackageManager;->getSharedLibraries(I)Ljava/util/List;
-HPLandroid/app/ApplicationPackageManager;->getSharedLibrariesAsUser(II)Ljava/util/List;
-HPLandroid/app/ApplicationPackageManager;->getSharedSystemSharedLibraryPackageName()Ljava/lang/String;
-HSPLandroid/app/ApplicationPackageManager;->getSystemAvailableFeatures()[Landroid/content/pm/FeatureInfo;
-PLandroid/app/ApplicationPackageManager;->getSystemCaptionsServicePackageName()Ljava/lang/String;
-HSPLandroid/app/ApplicationPackageManager;->getSystemSharedLibraryNames()[Ljava/lang/String;
-PLandroid/app/ApplicationPackageManager;->getSystemTextClassifierPackageName()Ljava/lang/String;
-HPLandroid/app/ApplicationPackageManager;->getSystemTextClassifierPackages()[Ljava/lang/String;
 HSPLandroid/app/ApplicationPackageManager;->getText(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;
-HSPLandroid/app/ApplicationPackageManager;->getUnsuspendablePackages([Ljava/lang/String;)[Ljava/lang/String;
-HPLandroid/app/ApplicationPackageManager;->getUserBadgeColor(Landroid/os/UserHandle;)I
-HPLandroid/app/ApplicationPackageManager;->getUserBadgeForDensityNoBackground(Landroid/os/UserHandle;I)Landroid/graphics/drawable/Drawable;
 HSPLandroid/app/ApplicationPackageManager;->getUserBadgedIcon(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/app/ApplicationPackageManager;->getUserBadgedLabel(Ljava/lang/CharSequence;Landroid/os/UserHandle;)Ljava/lang/CharSequence;
 HSPLandroid/app/ApplicationPackageManager;->getUserId()I
 HSPLandroid/app/ApplicationPackageManager;->getUserManager()Landroid/os/UserManager;
-HSPLandroid/app/ApplicationPackageManager;->getWhitelistedRestrictedPermissions(Ljava/lang/String;I)Ljava/util/Set;
 HSPLandroid/app/ApplicationPackageManager;->getXml(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/content/res/XmlResourceParser;
-PLandroid/app/ApplicationPackageManager;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLandroid/app/ApplicationPackageManager;->handlePackageBroadcast(I[Ljava/lang/String;Z)V
 HSPLandroid/app/ApplicationPackageManager;->hasSystemFeature(Ljava/lang/String;)Z
 HSPLandroid/app/ApplicationPackageManager;->hasSystemFeature(Ljava/lang/String;I)Z
+HSPLandroid/app/ApplicationPackageManager;->hasSystemFeatureUncached(Ljava/lang/String;I)Z
 HSPLandroid/app/ApplicationPackageManager;->hasUserBadge(I)Z
-PLandroid/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
-HSPLandroid/app/ApplicationPackageManager;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
-HSPLandroid/app/ApplicationPackageManager;->isPermissionRevokedByPolicy(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLandroid/app/ApplicationPackageManager;->isSafeMode()Z
 HSPLandroid/app/ApplicationPackageManager;->loadItemIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/app/ApplicationPackageManager;->loadUnbadgedItemIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
@@ -1653,72 +1023,34 @@
 HSPLandroid/app/ApplicationPackageManager;->putCachedString(Landroid/app/ApplicationPackageManager$ResourceName;Ljava/lang/CharSequence;)V
 HSPLandroid/app/ApplicationPackageManager;->queryBroadcastReceivers(Landroid/content/Intent;I)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryBroadcastReceiversAsUser(Landroid/content/Intent;II)Ljava/util/List;
-HSPLandroid/app/ApplicationPackageManager;->queryContentProviders(Ljava/lang/String;IILjava/lang/String;)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentActivitiesAsUser(Landroid/content/Intent;II)Ljava/util/List;
-HSPLandroid/app/ApplicationPackageManager;->queryIntentContentProviders(Landroid/content/Intent;I)Ljava/util/List;
-HSPLandroid/app/ApplicationPackageManager;->queryIntentContentProvidersAsUser(Landroid/content/Intent;II)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentServices(Landroid/content/Intent;I)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentServicesAsUser(Landroid/content/Intent;II)Ljava/util/List;
-HSPLandroid/app/ApplicationPackageManager;->queryPermissionsByGroup(Ljava/lang/String;I)Ljava/util/List;
-HSPLandroid/app/ApplicationPackageManager;->removeOnPermissionsChangeListener(Landroid/content/pm/PackageManager$OnPermissionsChangedListener;)V
-HSPLandroid/app/ApplicationPackageManager;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;)V
-HPLandroid/app/ApplicationPackageManager;->replacePreferredActivityAsUser(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V
 HSPLandroid/app/ApplicationPackageManager;->resolveActivity(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;
 HSPLandroid/app/ApplicationPackageManager;->resolveActivityAsUser(Landroid/content/Intent;II)Landroid/content/pm/ResolveInfo;
 HSPLandroid/app/ApplicationPackageManager;->resolveContentProvider(Ljava/lang/String;I)Landroid/content/pm/ProviderInfo;
 HSPLandroid/app/ApplicationPackageManager;->resolveContentProviderAsUser(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
 HSPLandroid/app/ApplicationPackageManager;->resolveService(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;
 HSPLandroid/app/ApplicationPackageManager;->resolveServiceAsUser(Landroid/content/Intent;II)Landroid/content/pm/ResolveInfo;
-HPLandroid/app/ApplicationPackageManager;->setApplicationCategoryHint(Ljava/lang/String;I)V
 HSPLandroid/app/ApplicationPackageManager;->setComponentEnabledSetting(Landroid/content/ComponentName;II)V
 HSPLandroid/app/ApplicationPackageManager;->updateFlagsForApplication(II)I
 HSPLandroid/app/ApplicationPackageManager;->updateFlagsForComponent(IILandroid/content/Intent;)I
 HSPLandroid/app/ApplicationPackageManager;->updateFlagsForPackage(II)I
-HSPLandroid/app/ApplicationPackageManager;->updatePermissionFlags(Ljava/lang/String;Ljava/lang/String;IILandroid/os/UserHandle;)V
-PLandroid/app/ApplicationPackageManager;->verifyIntentFilter(IILjava/util/List;)V
-HPLandroid/app/ApplicationPackageManager;->verifyPendingInstall(II)V
-PLandroid/app/AsyncNotedAppOp$1;-><init>()V
-PLandroid/app/AsyncNotedAppOp;-><clinit>()V
-HPLandroid/app/AsyncNotedAppOp;-><init>(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
-HSPLandroid/app/AutomaticZenRule$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/AutomaticZenRule;
-HSPLandroid/app/AutomaticZenRule$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/AutomaticZenRule;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/app/AutomaticZenRule;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/net/Uri;Landroid/service/notification/ZenPolicy;IZ)V
-HSPLandroid/app/AutomaticZenRule;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/net/Uri;Landroid/service/notification/ZenPolicy;IZJ)V
-HSPLandroid/app/AutomaticZenRule;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Landroid/net/Uri;IZ)V
-PLandroid/app/AutomaticZenRule;->getConditionId()Landroid/net/Uri;
-PLandroid/app/AutomaticZenRule;->getInterruptionFilter()I
-PLandroid/app/AutomaticZenRule;->getName()Ljava/lang/String;
-HSPLandroid/app/AutomaticZenRule;->getOwner()Landroid/content/ComponentName;
-PLandroid/app/AutomaticZenRule;->getZenPolicy()Landroid/service/notification/ZenPolicy;
-PLandroid/app/AutomaticZenRule;->isEnabled()Z
-PLandroid/app/AutomaticZenRule;->isModified()Z
-HSPLandroid/app/AutomaticZenRule;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/BackStackRecord$Op;-><init>(ILandroid/app/Fragment;)V
+HSPLandroid/app/BackStackRecord;-><init>(Landroid/app/FragmentManagerImpl;)V
 HSPLandroid/app/BackStackRecord;->add(Landroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/BackStackRecord;->addOp(Landroid/app/BackStackRecord$Op;)V
 HSPLandroid/app/BackStackRecord;->bumpBackStackNesting(I)V
 HSPLandroid/app/BackStackRecord;->commit()I
-HPLandroid/app/BackStackRecord;->commitAllowingStateLoss()I
 HSPLandroid/app/BackStackRecord;->commitInternal(Z)I
 HSPLandroid/app/BackStackRecord;->doAddOp(ILandroid/app/Fragment;Ljava/lang/String;I)V
 HSPLandroid/app/BackStackRecord;->executeOps()V
 HSPLandroid/app/BackStackRecord;->expandOps(Ljava/util/ArrayList;Landroid/app/Fragment;)Landroid/app/Fragment;
 HSPLandroid/app/BackStackRecord;->generateOps(Ljava/util/ArrayList;Ljava/util/ArrayList;)Z
-HPLandroid/app/BackStackRecord;->interactsWith(I)Z
-HPLandroid/app/BackStackRecord;->replace(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;
-HPLandroid/app/BackStackRecord;->setTransition(I)Landroid/app/FragmentTransaction;
-HSPLandroid/app/BroadcastOptions;-><init>()V
-PLandroid/app/BroadcastOptions;-><init>(Landroid/os/Bundle;)V
-PLandroid/app/BroadcastOptions;->allowsBackgroundActivityStarts()Z
-PLandroid/app/BroadcastOptions;->getMaxManifestReceiverApiLevel()I
-PLandroid/app/BroadcastOptions;->getMinManifestReceiverApiLevel()I
-PLandroid/app/BroadcastOptions;->getTemporaryAppWhitelistDuration()J
-PLandroid/app/BroadcastOptions;->isDontSendToRestrictedApps()Z
-HSPLandroid/app/BroadcastOptions;->makeBasic()Landroid/app/BroadcastOptions;
-HSPLandroid/app/BroadcastOptions;->setBackgroundActivityStartsAllowed(Z)V
-HSPLandroid/app/BroadcastOptions;->setMaxManifestReceiverApiLevel(I)V
-HSPLandroid/app/BroadcastOptions;->setTemporaryAppWhitelistDuration(J)V
-HSPLandroid/app/BroadcastOptions;->toBundle()Landroid/os/Bundle;
+HSPLandroid/app/BackStackRecord;->isFragmentPostponed(Landroid/app/BackStackRecord$Op;)Z
+HSPLandroid/app/BackStackRecord;->isPostponed()Z
+HSPLandroid/app/BackStackRecord;->runOnCommitRunnables()V
 HSPLandroid/app/ClientTransactionHandler;-><init>()V
 HSPLandroid/app/ClientTransactionHandler;->scheduleTransaction(Landroid/app/servertransaction/ClientTransaction;)V
 HSPLandroid/app/ContentProviderHolder$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ContentProviderHolder;
@@ -1734,52 +1066,42 @@
 HSPLandroid/app/ContextImpl$ApplicationContentResolver;->releaseProvider(Landroid/content/IContentProvider;)Z
 HSPLandroid/app/ContextImpl$ApplicationContentResolver;->releaseUnstableProvider(Landroid/content/IContentProvider;)Z
 HSPLandroid/app/ContextImpl$ApplicationContentResolver;->resolveUserIdFromAuthority(Ljava/lang/String;)I
-HPLandroid/app/ContextImpl$ApplicationContentResolver;->unstableProviderDied(Landroid/content/IContentProvider;)V
 HSPLandroid/app/ContextImpl;-><init>(Landroid/app/ContextImpl;Landroid/app/ActivityThread;Landroid/app/LoadedApk;Ljava/lang/String;Ljava/lang/String;Landroid/os/IBinder;Landroid/os/UserHandle;ILjava/lang/ClassLoader;Ljava/lang/String;)V
-HSPLandroid/app/ContextImpl;->bindIsolatedService(Landroid/content/Intent;ILjava/lang/String;Ljava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z
 HSPLandroid/app/ContextImpl;->bindService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z
-HSPLandroid/app/ContextImpl;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/Handler;Landroid/os/UserHandle;)Z
 HSPLandroid/app/ContextImpl;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z
 HSPLandroid/app/ContextImpl;->bindServiceCommon(Landroid/content/Intent;Landroid/content/ServiceConnection;ILjava/lang/String;Landroid/os/Handler;Ljava/util/concurrent/Executor;Landroid/os/UserHandle;)Z
 HSPLandroid/app/ContextImpl;->canLoadUnsafeResources()Z
 HSPLandroid/app/ContextImpl;->checkCallingOrSelfPermission(Ljava/lang/String;)I
 HSPLandroid/app/ContextImpl;->checkCallingPermission(Ljava/lang/String;)I
-HPLandroid/app/ContextImpl;->checkCallingUriPermission(Landroid/net/Uri;I)I
 HSPLandroid/app/ContextImpl;->checkMode(I)V
 HSPLandroid/app/ContextImpl;->checkPermission(Ljava/lang/String;II)I
 HSPLandroid/app/ContextImpl;->checkPermission(Ljava/lang/String;IILandroid/os/IBinder;)I
 HSPLandroid/app/ContextImpl;->checkSelfPermission(Ljava/lang/String;)I
 HSPLandroid/app/ContextImpl;->checkUriPermission(Landroid/net/Uri;III)I
-HSPLandroid/app/ContextImpl;->checkUriPermission(Landroid/net/Uri;IIILandroid/os/IBinder;)I
 HSPLandroid/app/ContextImpl;->createActivityContext(Landroid/app/ActivityThread;Landroid/app/LoadedApk;Landroid/content/pm/ActivityInfo;Landroid/os/IBinder;ILandroid/content/res/Configuration;)Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->createAppContext(Landroid/app/ActivityThread;Landroid/app/LoadedApk;)Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->createAppContext(Landroid/app/ActivityThread;Landroid/app/LoadedApk;Ljava/lang/String;)Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->createApplicationContext(Landroid/content/pm/ApplicationInfo;I)Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->createConfigurationContext(Landroid/content/res/Configuration;)Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->createContextAsUser(Landroid/os/UserHandle;I)Landroid/content/Context;
-HSPLandroid/app/ContextImpl;->createCredentialProtectedStorageContext()Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->createDeviceProtectedStorageContext()Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->createDisplayContext(Landroid/view/Display;)Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->createFeatureContext(Ljava/lang/String;)Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->createPackageContext(Ljava/lang/String;I)Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->createPackageContextAsUser(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->createResources(Landroid/os/IBinder;Landroid/app/LoadedApk;Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;
+HSPLandroid/app/ContextImpl;->createResources(Landroid/os/IBinder;Landroid/app/LoadedApk;Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/util/List;)Landroid/content/res/Resources;
 HSPLandroid/app/ContextImpl;->createSystemContext(Landroid/app/ActivityThread;)Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->createSystemUiContext(Landroid/app/ContextImpl;)Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->createSystemUiContext(Landroid/app/ContextImpl;I)Landroid/app/ContextImpl;
-HSPLandroid/app/ContextImpl;->databaseList()[Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->deleteDatabase(Ljava/lang/String;)Z
 HSPLandroid/app/ContextImpl;->deleteFile(Ljava/lang/String;)Z
-PLandroid/app/ContextImpl;->deleteSharedPreferences(Ljava/lang/String;)Z
 HSPLandroid/app/ContextImpl;->enforce(Ljava/lang/String;IZILjava/lang/String;)V
 HSPLandroid/app/ContextImpl;->enforceCallingOrSelfPermission(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/ContextImpl;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/ContextImpl;->enforcePermission(Ljava/lang/String;IILjava/lang/String;)V
 HSPLandroid/app/ContextImpl;->ensureExternalDirsExistOrFilter([Ljava/io/File;)[Ljava/io/File;
 HSPLandroid/app/ContextImpl;->ensurePrivateCacheDirExists(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->ensurePrivateDirExists(Ljava/io/File;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->ensurePrivateDirExists(Ljava/io/File;IILjava/lang/String;)Ljava/io/File;
-HSPLandroid/app/ContextImpl;->fileList()[Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->getActivityToken()Landroid/os/IBinder;
 HSPLandroid/app/ContextImpl;->getApplicationContext()Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
@@ -1804,24 +1126,19 @@
 HSPLandroid/app/ContextImpl;->getExternalCacheDirs()[Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getExternalFilesDir(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;
-HSPLandroid/app/ContextImpl;->getExternalMediaDirs()[Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getFeatureId()Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->getFileStreamPath(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getFilesDir()Ljava/io/File;
-HPLandroid/app/ContextImpl;->getIApplicationThread()Landroid/app/IApplicationThread;
 HSPLandroid/app/ContextImpl;->getImpl(Landroid/content/Context;)Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->getMainExecutor()Ljava/util/concurrent/Executor;
 HSPLandroid/app/ContextImpl;->getMainLooper()Landroid/os/Looper;
-HSPLandroid/app/ContextImpl;->getMainThreadHandler()Landroid/os/Handler;
 HSPLandroid/app/ContextImpl;->getNoBackupFilesDir()Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getOpPackageName()Ljava/lang/String;
 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;
-HSPLandroid/app/ContextImpl;->getPackageResourcePath()Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->getPreferencesDir()Ljava/io/File;
-HPLandroid/app/ContextImpl;->getPreloadsFileCache()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;
@@ -1831,44 +1148,31 @@
 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;
-PLandroid/app/ContextImpl;->getThemeResId()I
 HSPLandroid/app/ContextImpl;->getUser()Landroid/os/UserHandle;
 HSPLandroid/app/ContextImpl;->getUserId()I
-HSPLandroid/app/ContextImpl;->grantUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V
 HSPLandroid/app/ContextImpl;->initializeTheme()V
-HSPLandroid/app/ContextImpl;->installSystemApplicationInfo(Landroid/content/pm/ApplicationInfo;Ljava/lang/ClassLoader;)V
 HSPLandroid/app/ContextImpl;->isCredentialProtectedStorage()Z
 HSPLandroid/app/ContextImpl;->isDeviceProtectedStorage()Z
 HSPLandroid/app/ContextImpl;->isRestricted()Z
+HSPLandroid/app/ContextImpl;->isUiComponent(Ljava/lang/String;)Z
+HSPLandroid/app/ContextImpl;->isUiContext()Z
 HSPLandroid/app/ContextImpl;->makeFilename(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->openFileInput(Ljava/lang/String;)Ljava/io/FileInputStream;
 HSPLandroid/app/ContextImpl;->openFileOutput(Ljava/lang/String;I)Ljava/io/FileOutputStream;
-PLandroid/app/ContextImpl;->openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;
-PLandroid/app/ContextImpl;->openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;
-HSLandroid/app/ContextImpl;->performFinalCleanup(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/ContextImpl;->performFinalCleanup(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/ContextImpl;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
 HSPLandroid/app/ContextImpl;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)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;->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
 HSPLandroid/app/ContextImpl;->sendBroadcast(Landroid/content/Intent;)V
 HSPLandroid/app/ContextImpl;->sendBroadcast(Landroid/content/Intent;Ljava/lang/String;)V
-HSPLandroid/app/ContextImpl;->sendBroadcast(Landroid/content/Intent;Ljava/lang/String;Landroid/os/Bundle;)V
 HSPLandroid/app/ContextImpl;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
 HSPLandroid/app/ContextImpl;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;)V
 HSPLandroid/app/ContextImpl;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;I)V
-HSPLandroid/app/ContextImpl;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;Landroid/os/Bundle;)V
-PLandroid/app/ContextImpl;->sendBroadcastAsUserMultiplePermissions(Landroid/content/Intent;Landroid/os/UserHandle;[Ljava/lang/String;)V
-HPLandroid/app/ContextImpl;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;)V
-HSPLandroid/app/ContextImpl;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;ILandroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;Landroid/os/Bundle;)V
-HSPLandroid/app/ContextImpl;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V
-HPLandroid/app/ContextImpl;->sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;ILandroid/os/Bundle;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V
-HPLandroid/app/ContextImpl;->sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V
 HSPLandroid/app/ContextImpl;->sendStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
-PLandroid/app/ContextImpl;->sendStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/os/Bundle;)V
 HSPLandroid/app/ContextImpl;->setAutofillClient(Landroid/view/autofill/AutofillManager$AutofillClient;)V
 HSPLandroid/app/ContextImpl;->setAutofillOptions(Landroid/content/AutofillOptions;)V
 HSPLandroid/app/ContextImpl;->setContentCaptureOptions(Landroid/content/ContentCaptureOptions;)V
@@ -1876,11 +1180,8 @@
 HSPLandroid/app/ContextImpl;->setOuterContext(Landroid/content/Context;)V
 HSPLandroid/app/ContextImpl;->setResources(Landroid/content/res/Resources;)V
 HSPLandroid/app/ContextImpl;->setTheme(I)V
-PLandroid/app/ContextImpl;->startActivityAsUser(Landroid/content/Intent;Landroid/os/Bundle;Landroid/os/UserHandle;)V
-PLandroid/app/ContextImpl;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
 HSPLandroid/app/ContextImpl;->startForegroundService(Landroid/content/Intent;)Landroid/content/ComponentName;
 HSPLandroid/app/ContextImpl;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;
-HSPLandroid/app/ContextImpl;->startServiceAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/ComponentName;
 HSPLandroid/app/ContextImpl;->startServiceCommon(Landroid/content/Intent;ZLandroid/os/UserHandle;)Landroid/content/ComponentName;
 HSPLandroid/app/ContextImpl;->stopService(Landroid/content/Intent;)Z
 HSPLandroid/app/ContextImpl;->stopServiceCommon(Landroid/content/Intent;Landroid/os/UserHandle;)Z
@@ -1896,139 +1197,65 @@
 HSPLandroid/app/DexLoadReporter;->registerSecondaryDexForProfiling(Ljava/lang/String;[Ljava/lang/String;)V
 HSPLandroid/app/DexLoadReporter;->registerSecondaryDexForProfiling([Ljava/lang/String;)V
 HSPLandroid/app/DexLoadReporter;->report(Ljava/util/List;Ljava/util/List;)V
-HPLandroid/app/Dialog$ListenersHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/app/Dialog$ListenersHandler;-><init>(Landroid/app/Dialog;)V
 HSPLandroid/app/Dialog;-><init>(Landroid/content/Context;I)V
 HSPLandroid/app/Dialog;-><init>(Landroid/content/Context;IZ)V
-HPLandroid/app/Dialog;->cancel()V
-HPLandroid/app/Dialog;->dismiss()V
-HPLandroid/app/Dialog;->dismissDialog()V
-HPLandroid/app/Dialog;->dispatchOnCreate(Landroid/os/Bundle;)V
-HPLandroid/app/Dialog;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
-HPLandroid/app/Dialog;->findViewById(I)Landroid/view/View;
-HPLandroid/app/Dialog;->getContext()Landroid/content/Context;
-HPLandroid/app/Dialog;->getLayoutInflater()Landroid/view/LayoutInflater;
+HSPLandroid/app/Dialog;->dismiss()V
+HSPLandroid/app/Dialog;->dismissDialog()V
+HSPLandroid/app/Dialog;->dispatchOnCreate(Landroid/os/Bundle;)V
+HSPLandroid/app/Dialog;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/app/Dialog;->getContext()Landroid/content/Context;
 HSPLandroid/app/Dialog;->getWindow()Landroid/view/Window;
-HPLandroid/app/Dialog;->hide()V
-HPLandroid/app/Dialog;->onAttachedToWindow()V
+HSPLandroid/app/Dialog;->onAttachedToWindow()V
 HSPLandroid/app/Dialog;->onContentChanged()V
-HPLandroid/app/Dialog;->onCreate(Landroid/os/Bundle;)V
-HPLandroid/app/Dialog;->onDetachedFromWindow()V
-HPLandroid/app/Dialog;->onStart()V
-HPLandroid/app/Dialog;->onStop()V
-HPLandroid/app/Dialog;->onTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/app/Dialog;->onCreate(Landroid/os/Bundle;)V
+HSPLandroid/app/Dialog;->onDetachedFromWindow()V
+HSPLandroid/app/Dialog;->onStart()V
+HSPLandroid/app/Dialog;->onStop()V
 HSPLandroid/app/Dialog;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V
-HPLandroid/app/Dialog;->onWindowFocusChanged(Z)V
-HPLandroid/app/Dialog;->setCanceledOnTouchOutside(Z)V
-HPLandroid/app/Dialog;->setContentView(I)V
-HSPLandroid/app/Dialog;->setContentView(Landroid/view/View;)V
-HPLandroid/app/Dialog;->setOnCancelListener(Landroid/content/DialogInterface$OnCancelListener;)V
-HPLandroid/app/Dialog;->setOnDismissListener(Landroid/content/DialogInterface$OnDismissListener;)V
-HPLandroid/app/Dialog;->setOnShowListener(Landroid/content/DialogInterface$OnShowListener;)V
-HPLandroid/app/Dialog;->setTitle(I)V
-HPLandroid/app/Dialog;->setTitle(Ljava/lang/CharSequence;)V
-HPLandroid/app/Dialog;->show()V
-HPLandroid/app/DownloadManager$CursorTranslator;->getInt(I)I
-HPLandroid/app/DownloadManager$CursorTranslator;->getLong(I)J
-HPLandroid/app/DownloadManager$CursorTranslator;->translateStatus(I)I
-PLandroid/app/DownloadManager$Query;-><init>()V
-HPLandroid/app/DownloadManager$Query;->joinStrings(Ljava/lang/String;Ljava/lang/Iterable;)Ljava/lang/String;
-HPLandroid/app/DownloadManager$Query;->runQuery(Landroid/content/ContentResolver;[Ljava/lang/String;Landroid/net/Uri;)Landroid/database/Cursor;
-HPLandroid/app/DownloadManager$Query;->setFilterById([J)Landroid/app/DownloadManager$Query;
-PLandroid/app/DownloadManager$Query;->setFilterByStatus(I)Landroid/app/DownloadManager$Query;
-HPLandroid/app/DownloadManager$Query;->statusClause(Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/app/Dialog;->onWindowFocusChanged(Z)V
+HSPLandroid/app/Dialog;->sendDismissMessage()V
+HSPLandroid/app/Dialog;->sendShowMessage()V
+HSPLandroid/app/Dialog;->setCancelable(Z)V
+HSPLandroid/app/Dialog;->setCanceledOnTouchOutside(Z)V
+HSPLandroid/app/Dialog;->show()V
 HSPLandroid/app/DownloadManager;-><init>(Landroid/content/Context;)V
-HPLandroid/app/DownloadManager;->enqueue(Landroid/app/DownloadManager$Request;)J
-HPLandroid/app/DownloadManager;->getDownloadUri(J)Landroid/net/Uri;
-HSPLandroid/app/DownloadManager;->getMaxBytesOverMobile(Landroid/content/Context;)Ljava/lang/Long;
-HSPLandroid/app/DownloadManager;->getRecommendedMaxBytesOverMobile(Landroid/content/Context;)Ljava/lang/Long;
-HPLandroid/app/DownloadManager;->getWhereArgsForIds([J)[Ljava/lang/String;
-HPLandroid/app/DownloadManager;->getWhereArgsForIds([J[Ljava/lang/String;)[Ljava/lang/String;
-HPLandroid/app/DownloadManager;->getWhereClauseForIds([J)Ljava/lang/String;
-HPLandroid/app/DownloadManager;->markRowDeleted([J)I
-HPLandroid/app/DownloadManager;->openDownloadedFile(J)Landroid/os/ParcelFileDescriptor;
-PLandroid/app/DownloadManager;->query(Landroid/app/DownloadManager$Query;)Landroid/database/Cursor;
-PLandroid/app/DownloadManager;->query(Landroid/app/DownloadManager$Query;[Ljava/lang/String;)Landroid/database/Cursor;
-HPLandroid/app/DownloadManager;->remove([J)I
-HSPLandroid/app/DownloadManager;->setAccessAllDownloads(Z)V
-HSPLandroid/app/DownloadManager;->setAccessFilename(Z)V
-HPLandroid/app/EventLogTags;->writeWmOnActivityResultCalled(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/EventLogTags;->writeWmOnCreateCalled(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/EventLogTags;->writeWmOnDestroyCalled(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/EventLogTags;->writeWmOnPausedCalled(ILjava/lang/String;Ljava/lang/String;)V
-HPLandroid/app/EventLogTags;->writeWmOnRestartCalled(ILjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/EventLogTags;->writeWmOnRestartCalled(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/EventLogTags;->writeWmOnResumeCalled(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/EventLogTags;->writeWmOnStartCalled(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/EventLogTags;->writeWmOnStopCalled(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/EventLogTags;->writeWmOnTopResumedGainedCalled(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/EventLogTags;->writeWmOnTopResumedLostCalled(ILjava/lang/String;Ljava/lang/String;)V
-HPLandroid/app/Fragment$AnimationInfo;-><init>()V
-HPLandroid/app/Fragment$AnimationInfo;->access$000(Landroid/app/Fragment$AnimationInfo;)Ljava/lang/Boolean;
-HPLandroid/app/Fragment$AnimationInfo;->access$002(Landroid/app/Fragment$AnimationInfo;Ljava/lang/Boolean;)Ljava/lang/Boolean;
-HPLandroid/app/Fragment$AnimationInfo;->access$100(Landroid/app/Fragment$AnimationInfo;)Ljava/lang/Boolean;
-HPLandroid/app/Fragment$AnimationInfo;->access$102(Landroid/app/Fragment$AnimationInfo;Ljava/lang/Boolean;)Ljava/lang/Boolean;
-HPLandroid/app/Fragment$AnimationInfo;->access$302(Landroid/app/Fragment$AnimationInfo;Landroid/transition/Transition;)Landroid/transition/Transition;
-HPLandroid/app/Fragment$AnimationInfo;->access$400(Landroid/app/Fragment$AnimationInfo;)Landroid/transition/Transition;
-HPLandroid/app/Fragment$AnimationInfo;->access$402(Landroid/app/Fragment$AnimationInfo;Landroid/transition/Transition;)Landroid/transition/Transition;
-HPLandroid/app/Fragment$AnimationInfo;->access$500(Landroid/app/Fragment$AnimationInfo;)Landroid/transition/Transition;
-HPLandroid/app/Fragment$AnimationInfo;->access$502(Landroid/app/Fragment$AnimationInfo;Landroid/transition/Transition;)Landroid/transition/Transition;
-HPLandroid/app/Fragment$AnimationInfo;->access$600(Landroid/app/Fragment$AnimationInfo;)Landroid/transition/Transition;
-HPLandroid/app/Fragment$AnimationInfo;->access$602(Landroid/app/Fragment$AnimationInfo;Landroid/transition/Transition;)Landroid/transition/Transition;
-HPLandroid/app/Fragment$AnimationInfo;->access$700(Landroid/app/Fragment$AnimationInfo;)Landroid/transition/Transition;
-HPLandroid/app/Fragment$AnimationInfo;->access$702(Landroid/app/Fragment$AnimationInfo;Landroid/transition/Transition;)Landroid/transition/Transition;
+HSPLandroid/app/Fragment$1;-><init>(Landroid/app/Fragment;)V
 HSPLandroid/app/Fragment;-><init>()V
-HPLandroid/app/Fragment;->access$800()Landroid/transition/Transition;
-HPLandroid/app/Fragment;->ensureAnimationInfo()Landroid/app/Fragment$AnimationInfo;
-HSPLandroid/app/Fragment;->equals(Ljava/lang/Object;)Z
-HSPLandroid/app/Fragment;->getActivity()Landroid/app/Activity;
 HSPLandroid/app/Fragment;->getAnimatingAway()Landroid/animation/Animator;
-HPLandroid/app/Fragment;->getArguments()Landroid/os/Bundle;
 HSPLandroid/app/Fragment;->getChildFragmentManager()Landroid/app/FragmentManager;
 HSPLandroid/app/Fragment;->getContext()Landroid/content/Context;
-HPLandroid/app/Fragment;->getEnterTransition()Landroid/transition/Transition;
-HPLandroid/app/Fragment;->getExitTransition()Landroid/transition/Transition;
-HPLandroid/app/Fragment;->getLoaderManager()Landroid/app/LoaderManager;
 HSPLandroid/app/Fragment;->getNextAnim()I
 HSPLandroid/app/Fragment;->getNextTransition()I
 HSPLandroid/app/Fragment;->getNextTransitionStyle()I
-HPLandroid/app/Fragment;->getReenterTransition()Landroid/transition/Transition;
-HPLandroid/app/Fragment;->getResources()Landroid/content/res/Resources;
-HPLandroid/app/Fragment;->getReturnTransition()Landroid/transition/Transition;
-HPLandroid/app/Fragment;->getSharedElementEnterTransition()Landroid/transition/Transition;
-HPLandroid/app/Fragment;->getSharedElementReturnTransition()Landroid/transition/Transition;
-HPLandroid/app/Fragment;->getView()Landroid/view/View;
-HPLandroid/app/Fragment;->hashCode()I
 HSPLandroid/app/Fragment;->initState()V
-HPLandroid/app/Fragment;->instantiate(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;
 HSPLandroid/app/Fragment;->instantiateChildFragmentManager()V
-HPLandroid/app/Fragment;->isAdded()Z
-HPLandroid/app/Fragment;->isPostponed()Z
-HPLandroid/app/Fragment;->isResumed()Z
-HPLandroid/app/Fragment;->loadTransition(Landroid/content/Context;Landroid/content/res/TypedArray;Landroid/transition/Transition;Landroid/transition/Transition;I)Landroid/transition/Transition;
 HSPLandroid/app/Fragment;->noteStateNotSaved()V
 HSPLandroid/app/Fragment;->onActivityCreated(Landroid/os/Bundle;)V
 HSPLandroid/app/Fragment;->onAttach(Landroid/app/Activity;)V
 HSPLandroid/app/Fragment;->onAttach(Landroid/content/Context;)V
-HPLandroid/app/Fragment;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLandroid/app/Fragment;->onCreate(Landroid/os/Bundle;)V
-HPLandroid/app/Fragment;->onCreateAnimator(IZI)Landroid/animation/Animator;
 HSPLandroid/app/Fragment;->onCreateView(Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Landroid/os/Bundle;)Landroid/view/View;
 HSPLandroid/app/Fragment;->onDestroy()V
 HSPLandroid/app/Fragment;->onDestroyView()V
 HSPLandroid/app/Fragment;->onDetach()V
 HSPLandroid/app/Fragment;->onGetLayoutInflater(Landroid/os/Bundle;)Landroid/view/LayoutInflater;
-HPLandroid/app/Fragment;->onInflate(Landroid/app/Activity;Landroid/util/AttributeSet;Landroid/os/Bundle;)V
-HPLandroid/app/Fragment;->onInflate(Landroid/content/Context;Landroid/util/AttributeSet;Landroid/os/Bundle;)V
-HPLandroid/app/Fragment;->onInflate(Landroid/util/AttributeSet;Landroid/os/Bundle;)V
 HSPLandroid/app/Fragment;->onPause()V
 HSPLandroid/app/Fragment;->onResume()V
 HSPLandroid/app/Fragment;->onSaveInstanceState(Landroid/os/Bundle;)V
 HSPLandroid/app/Fragment;->onStart()V
 HSPLandroid/app/Fragment;->onStop()V
-HPLandroid/app/Fragment;->onTrimMemory(I)V
-HPLandroid/app/Fragment;->onViewCreated(Landroid/view/View;Landroid/os/Bundle;)V
-HPLandroid/app/Fragment;->onViewStateRestored(Landroid/os/Bundle;)V
+HSPLandroid/app/Fragment;->onTrimMemory(I)V
 HSPLandroid/app/Fragment;->performActivityCreated(Landroid/os/Bundle;)V
-HPLandroid/app/Fragment;->performConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLandroid/app/Fragment;->performCreate(Landroid/os/Bundle;)V
 HSPLandroid/app/Fragment;->performCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)Z
 HSPLandroid/app/Fragment;->performCreateView(Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Landroid/os/Bundle;)Landroid/view/View;
@@ -2042,27 +1269,16 @@
 HSPLandroid/app/Fragment;->performSaveInstanceState(Landroid/os/Bundle;)V
 HSPLandroid/app/Fragment;->performStart()V
 HSPLandroid/app/Fragment;->performStop()V
-HPLandroid/app/Fragment;->performTrimMemory(I)V
+HSPLandroid/app/Fragment;->performTrimMemory(I)V
 HSPLandroid/app/Fragment;->restoreChildFragmentState(Landroid/os/Bundle;Z)V
-HPLandroid/app/Fragment;->restoreViewState(Landroid/os/Bundle;)V
-HPLandroid/app/Fragment;->setAllowEnterTransitionOverlap(Z)V
-HPLandroid/app/Fragment;->setAllowReturnTransitionOverlap(Z)V
-HPLandroid/app/Fragment;->setArguments(Landroid/os/Bundle;)V
-HPLandroid/app/Fragment;->setEnterTransition(Landroid/transition/Transition;)V
-HPLandroid/app/Fragment;->setExitTransition(Landroid/transition/Transition;)V
 HSPLandroid/app/Fragment;->setIndex(ILandroid/app/Fragment;)V
 HSPLandroid/app/Fragment;->setNextAnim(I)V
 HSPLandroid/app/Fragment;->setNextTransition(II)V
-HPLandroid/app/Fragment;->setReenterTransition(Landroid/transition/Transition;)V
-HSPLandroid/app/Fragment;->setRetainInstance(Z)V
-HPLandroid/app/Fragment;->setReturnTransition(Landroid/transition/Transition;)V
-HPLandroid/app/Fragment;->setSharedElementEnterTransition(Landroid/transition/Transition;)V
-HPLandroid/app/Fragment;->setSharedElementReturnTransition(Landroid/transition/Transition;)V
-HPLandroid/app/Fragment;->shouldChangeTransition(Landroid/transition/Transition;Landroid/transition/Transition;)Z
-HPLandroid/app/FragmentContainer;->instantiate(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;
+HSPLandroid/app/FragmentContainer;-><init>()V
+HSPLandroid/app/FragmentController;-><init>(Landroid/app/FragmentHostCallback;)V
 HSPLandroid/app/FragmentController;->attachHost(Landroid/app/Fragment;)V
+HSPLandroid/app/FragmentController;->createController(Landroid/app/FragmentHostCallback;)Landroid/app/FragmentController;
 HSPLandroid/app/FragmentController;->dispatchActivityCreated()V
-HPLandroid/app/FragmentController;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLandroid/app/FragmentController;->dispatchCreate()V
 HSPLandroid/app/FragmentController;->dispatchCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)Z
 HSPLandroid/app/FragmentController;->dispatchDestroy()V
@@ -2077,12 +1293,11 @@
 HSPLandroid/app/FragmentController;->doLoaderStop(Z)V
 HSPLandroid/app/FragmentController;->execPendingActions()Z
 HSPLandroid/app/FragmentController;->getFragmentManager()Landroid/app/FragmentManager;
-HPLandroid/app/FragmentController;->getLoaderManager()Landroid/app/LoaderManager;
 HSPLandroid/app/FragmentController;->noteStateNotSaved()V
-HPLandroid/app/FragmentController;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
 HSPLandroid/app/FragmentController;->reportLoaderStart()V
-HSPLandroid/app/FragmentController;->restoreAllState(Landroid/os/Parcelable;Landroid/app/FragmentManagerNonConfig;)V
 HSPLandroid/app/FragmentController;->saveAllState()Landroid/os/Parcelable;
+HSPLandroid/app/FragmentHostCallback;-><init>(Landroid/app/Activity;)V
+HSPLandroid/app/FragmentHostCallback;-><init>(Landroid/app/Activity;Landroid/content/Context;Landroid/os/Handler;I)V
 HSPLandroid/app/FragmentHostCallback;->doLoaderDestroy()V
 HSPLandroid/app/FragmentHostCallback;->doLoaderStart()V
 HSPLandroid/app/FragmentHostCallback;->doLoaderStop(Z)V
@@ -2091,19 +1306,23 @@
 HSPLandroid/app/FragmentHostCallback;->getFragmentManagerImpl()Landroid/app/FragmentManagerImpl;
 HSPLandroid/app/FragmentHostCallback;->getHandler()Landroid/os/Handler;
 HSPLandroid/app/FragmentHostCallback;->getLoaderManager(Ljava/lang/String;ZZ)Landroid/app/LoaderManagerImpl;
-HPLandroid/app/FragmentHostCallback;->getLoaderManagerImpl()Landroid/app/LoaderManagerImpl;
-HPLandroid/app/FragmentHostCallback;->getRetainLoaders()Z
 HSPLandroid/app/FragmentHostCallback;->inactivateFragment(Ljava/lang/String;)V
 HSPLandroid/app/FragmentHostCallback;->reportLoaderStart()V
-HPLandroid/app/FragmentManagerImpl$AnimateOnHWLayerIfNeededListener;->onAnimationEnd(Landroid/animation/Animator;)V
-HPLandroid/app/FragmentManagerImpl$AnimateOnHWLayerIfNeededListener;->onAnimationStart(Landroid/animation/Animator;)V
+HSPLandroid/app/FragmentManager;-><init>()V
+HSPLandroid/app/FragmentManagerImpl$1;-><init>(Landroid/app/FragmentManagerImpl;)V
 HSPLandroid/app/FragmentManagerImpl;-><init>()V
 HSPLandroid/app/FragmentManagerImpl;->addAddedFragments(Landroid/util/ArraySet;)V
 HSPLandroid/app/FragmentManagerImpl;->addFragment(Landroid/app/Fragment;Z)V
+HSPLandroid/app/FragmentManagerImpl;->attachController(Landroid/app/FragmentHostCallback;Landroid/app/FragmentContainer;Landroid/app/Fragment;)V
 HSPLandroid/app/FragmentManagerImpl;->beginTransaction()Landroid/app/FragmentTransaction;
 HSPLandroid/app/FragmentManagerImpl;->burpActive()V
 HSPLandroid/app/FragmentManagerImpl;->checkStateLoss()V
+HSPLandroid/app/FragmentManagerImpl;->cleanupExec()V
+HSPLandroid/app/FragmentManagerImpl;->dispatchActivityCreated()V
+HSPLandroid/app/FragmentManagerImpl;->dispatchCreate()V
 HSPLandroid/app/FragmentManagerImpl;->dispatchCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)Z
+HSPLandroid/app/FragmentManagerImpl;->dispatchDestroy()V
+HSPLandroid/app/FragmentManagerImpl;->dispatchDestroyView()V
 HSPLandroid/app/FragmentManagerImpl;->dispatchMoveToState(I)V
 HSPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentActivityCreated(Landroid/app/Fragment;Landroid/os/Bundle;Z)V
 HSPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentAttached(Landroid/app/Fragment;Landroid/content/Context;Z)V
@@ -2117,9 +1336,13 @@
 HSPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentSaveInstanceState(Landroid/app/Fragment;Landroid/os/Bundle;Z)V
 HSPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentStarted(Landroid/app/Fragment;Z)V
 HSPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentStopped(Landroid/app/Fragment;Z)V
-HPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentViewCreated(Landroid/app/Fragment;Landroid/view/View;Landroid/os/Bundle;Z)V
 HSPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentViewDestroyed(Landroid/app/Fragment;Z)V
+HSPLandroid/app/FragmentManagerImpl;->dispatchPause()V
 HSPLandroid/app/FragmentManagerImpl;->dispatchPrepareOptionsMenu(Landroid/view/Menu;)Z
+HSPLandroid/app/FragmentManagerImpl;->dispatchResume()V
+HSPLandroid/app/FragmentManagerImpl;->dispatchStart()V
+HSPLandroid/app/FragmentManagerImpl;->dispatchStop()V
+HSPLandroid/app/FragmentManagerImpl;->dispatchTrimMemory(I)V
 HSPLandroid/app/FragmentManagerImpl;->doPendingDeferredStart()V
 HSPLandroid/app/FragmentManagerImpl;->endAnimatingAwayFragments()V
 HSPLandroid/app/FragmentManagerImpl;->enqueueAction(Landroid/app/FragmentManagerImpl$OpGenerator;Z)V
@@ -2130,42 +1353,34 @@
 HSPLandroid/app/FragmentManagerImpl;->executeOpsTogether(Ljava/util/ArrayList;Ljava/util/ArrayList;II)V
 HSPLandroid/app/FragmentManagerImpl;->executePendingTransactions()Z
 HSPLandroid/app/FragmentManagerImpl;->executePostponedTransaction(Ljava/util/ArrayList;Ljava/util/ArrayList;)V
-HPLandroid/app/FragmentManagerImpl;->findFragmentById(I)Landroid/app/Fragment;
 HSPLandroid/app/FragmentManagerImpl;->findFragmentByTag(Ljava/lang/String;)Landroid/app/Fragment;
-HPLandroid/app/FragmentManagerImpl;->findFragmentUnder(Landroid/app/Fragment;)Landroid/app/Fragment;
+HSPLandroid/app/FragmentManagerImpl;->forcePostponedTransactions()V
 HSPLandroid/app/FragmentManagerImpl;->generateOpsForPendingActions(Ljava/util/ArrayList;Ljava/util/ArrayList;)Z
-HPLandroid/app/FragmentManagerImpl;->isStateSaved()Z
-HPLandroid/app/FragmentManagerImpl;->loadAnimator(Landroid/app/Fragment;IZI)Landroid/animation/Animator;
+HSPLandroid/app/FragmentManagerImpl;->getLayoutInflaterFactory()Landroid/view/LayoutInflater$Factory2;
+HSPLandroid/app/FragmentManagerImpl;->getPrimaryNavigationFragment()Landroid/app/Fragment;
+HSPLandroid/app/FragmentManagerImpl;->getTargetSdk()I
 HSPLandroid/app/FragmentManagerImpl;->makeActive(Landroid/app/Fragment;)V
 HSPLandroid/app/FragmentManagerImpl;->makeInactive(Landroid/app/Fragment;)V
-HPLandroid/app/FragmentManagerImpl;->modifiesAlpha(Landroid/animation/Animator;)Z
+HSPLandroid/app/FragmentManagerImpl;->makeRemovedFragmentsInvisible(Landroid/util/ArraySet;)V
 HSPLandroid/app/FragmentManagerImpl;->moveFragmentToExpectedState(Landroid/app/Fragment;)V
 HSPLandroid/app/FragmentManagerImpl;->moveToState(IZ)V
 HSPLandroid/app/FragmentManagerImpl;->moveToState(Landroid/app/Fragment;IIIZ)V
-HPLandroid/app/FragmentManagerImpl;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
-HPLandroid/app/FragmentManagerImpl;->performPendingDeferredStart(Landroid/app/Fragment;)V
-HPLandroid/app/FragmentManagerImpl;->popBackStackImmediate()Z
-HPLandroid/app/FragmentManagerImpl;->popBackStackImmediate(Ljava/lang/String;II)Z
-HPLandroid/app/FragmentManagerImpl;->popBackStackState(Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/lang/String;II)Z
+HSPLandroid/app/FragmentManagerImpl;->noteStateNotSaved()V
+HSPLandroid/app/FragmentManagerImpl;->performPendingDeferredStart(Landroid/app/Fragment;)V
 HSPLandroid/app/FragmentManagerImpl;->postponePostponableTransactions(Ljava/util/ArrayList;Ljava/util/ArrayList;IILandroid/util/ArraySet;)I
 HSPLandroid/app/FragmentManagerImpl;->removeRedundantOperationsAndExecute(Ljava/util/ArrayList;Ljava/util/ArrayList;)V
-HSPLandroid/app/FragmentManagerImpl;->restoreAllState(Landroid/os/Parcelable;Landroid/app/FragmentManagerNonConfig;)V
 HSPLandroid/app/FragmentManagerImpl;->saveAllState()Landroid/os/Parcelable;
 HSPLandroid/app/FragmentManagerImpl;->saveFragmentBasicState(Landroid/app/Fragment;)Landroid/os/Bundle;
-HPLandroid/app/FragmentManagerImpl;->saveFragmentViewState(Landroid/app/Fragment;)V
 HSPLandroid/app/FragmentManagerImpl;->saveNonConfig()V
 HSPLandroid/app/FragmentManagerImpl;->scheduleCommit()V
-HPLandroid/app/FragmentManagerImpl;->shouldRunOnHWLayer(Landroid/view/View;Landroid/animation/Animator;)Z
-HPLandroid/app/FragmentManagerImpl;->startPendingDeferredFragments()V
-HPLandroid/app/FragmentManagerImpl;->transitToStyleIndex(IZ)I
+HSPLandroid/app/FragmentManagerImpl;->startPendingDeferredFragments()V
+HSPLandroid/app/FragmentManagerState;-><init>()V
 HSPLandroid/app/FragmentManagerState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/FragmentState;-><init>(Landroid/app/Fragment;)V
 HSPLandroid/app/FragmentState;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/FragmentTransaction;-><init>()V
 HSPLandroid/app/FragmentTransition;->addToFirstInLastOut(Landroid/app/BackStackRecord;Landroid/app/BackStackRecord$Op;Landroid/util/SparseArray;ZZ)V
-HPLandroid/app/FragmentTransition;->calculateNameOverrides(ILjava/util/ArrayList;Ljava/util/ArrayList;II)Landroid/util/ArrayMap;
-HPLandroid/app/FragmentTransition;->cloneTransition(Landroid/transition/Transition;)Landroid/transition/Transition;
-HPLandroid/app/FragmentTransition;->configureSharedElementsReordered(Landroid/view/ViewGroup;Landroid/view/View;Landroid/util/ArrayMap;Landroid/app/FragmentTransition$FragmentContainerTransition;Ljava/util/ArrayList;Ljava/util/ArrayList;Landroid/transition/Transition;Landroid/transition/Transition;)Landroid/transition/TransitionSet;
-HPLandroid/app/FragmentTransition;->configureTransitionsReordered(Landroid/app/FragmentManagerImpl;ILandroid/app/FragmentTransition$FragmentContainerTransition;Landroid/view/View;Landroid/util/ArrayMap;)V
+HSPLandroid/app/FragmentTransition;->calculateFragments(Landroid/app/BackStackRecord;Landroid/util/SparseArray;Z)V
 HSPLandroid/app/FragmentTransition;->startTransitions(Landroid/app/FragmentManagerImpl;Ljava/util/ArrayList;Ljava/util/ArrayList;IIZ)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->addPackageDependency(Ljava/lang/String;)V
@@ -2173,345 +1388,93 @@
 HSPLandroid/app/IActivityManager$Stub$Proxy;->backupAgentCreated(Ljava/lang/String;Landroid/os/IBinder;I)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->bindIsolatedService(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;ILjava/lang/String;Ljava/lang/String;I)I
 HSPLandroid/app/IActivityManager$Stub$Proxy;->broadcastIntent(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZI)I
-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;->checkPermissionWithToken(Ljava/lang/String;IILandroid/os/IBinder;)I
-HSPLandroid/app/IActivityManager$Stub$Proxy;->checkUriPermission(Landroid/net/Uri;IIIILandroid/os/IBinder;)I
-HPLandroid/app/IActivityManager$Stub$Proxy;->closeSystemDialogs(Ljava/lang/String;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getContentProvider(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;IZ)Landroid/app/ContentProviderHolder;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getCurrentUser()Landroid/content/pm/UserInfo;
-HPLandroid/app/IActivityManager$Stub$Proxy;->getIntentForIntentSender(Landroid/content/IIntentSender;)Landroid/content/Intent;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getIntentSender(ILjava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;I)Landroid/content/IIntentSender;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->getPackageForIntentSender(Landroid/content/IIntentSender;)Ljava/lang/String;
-HSPLandroid/app/IActivityManager$Stub$Proxy;->getPackageProcessState(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
-HSPLandroid/app/IActivityManager$Stub$Proxy;->getProviderMimeType(Landroid/net/Uri;I)Ljava/lang/String;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getRunningAppProcesses()Ljava/util/List;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getServices(II)Ljava/util/List;
-HPLandroid/app/IActivityManager$Stub$Proxy;->getTasks(I)Ljava/util/List;
-HSPLandroid/app/IActivityManager$Stub$Proxy;->getUidForIntentSender(Landroid/content/IIntentSender;)I
-HSPLandroid/app/IActivityManager$Stub$Proxy;->grantUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->handleApplicationStrictModeViolation(Landroid/os/IBinder;ILandroid/os/StrictMode$ViolationInfo;)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->handleApplicationWtf(Landroid/os/IBinder;Ljava/lang/String;ZLandroid/app/ApplicationErrorReport$ParcelableCrashInfo;)Z
-HSPLandroid/app/IActivityManager$Stub$Proxy;->isIntentSenderAnActivity(Landroid/content/IIntentSender;)Z
 HSPLandroid/app/IActivityManager$Stub$Proxy;->isUserAMonkey()Z
-HPLandroid/app/IActivityManager$Stub$Proxy;->isUserRunning(II)Z
 HSPLandroid/app/IActivityManager$Stub$Proxy;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->publishService(Landroid/os/IBinder;Landroid/content/Intent;Landroid/os/IBinder;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->refContentProvider(Landroid/os/IBinder;II)Z
-HPLandroid/app/IActivityManager$Stub$Proxy;->registerIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->registerReceiver(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;
-HSPLandroid/app/IActivityManager$Stub$Proxy;->registerUidObserver(Landroid/app/IUidObserver;IILjava/lang/String;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->removeContentProvider(Landroid/os/IBinder;Z)V
-HPLandroid/app/IActivityManager$Stub$Proxy;->resumeAppSwitches()V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->revokeUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->sendIntentSender(Landroid/content/IIntentSender;Landroid/os/IBinder;ILandroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)I
 HSPLandroid/app/IActivityManager$Stub$Proxy;->serviceDoneExecuting(Landroid/os/IBinder;III)V
-HPLandroid/app/IActivityManager$Stub$Proxy;->setHasTopUi(Z)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->setRenderThread(I)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->setServiceForeground(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;II)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->startService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;I)Landroid/content/ComponentName;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->stopService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;I)I
 HSPLandroid/app/IActivityManager$Stub$Proxy;->stopServiceToken(Landroid/content/ComponentName;Landroid/os/IBinder;I)Z
-HSPLandroid/app/IActivityManager$Stub$Proxy;->unbindFinished(Landroid/os/IBinder;Landroid/content/Intent;Z)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->unbindService(Landroid/app/IServiceConnection;)Z
-HPLandroid/app/IActivityManager$Stub$Proxy;->unregisterIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->unregisterReceiver(Landroid/content/IIntentReceiver;)V
-PLandroid/app/IActivityManager$Stub$Proxy;->unstableProviderDied(Landroid/os/IBinder;)V
-HPLandroid/app/IActivityManager$Stub$Proxy;->waitForNetworkStateUpdate(J)V
-HSPLandroid/app/IActivityManager$Stub;-><init>()V
 HSPLandroid/app/IActivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IActivityManager;
-PLandroid/app/IActivityManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/app/IActivityManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/app/IActivityTaskManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->activityDestroyed(Landroid/os/IBinder;)V
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->activityIdle(Landroid/os/IBinder;Landroid/content/res/Configuration;Z)V
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->activityPaused(Landroid/os/IBinder;)V
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->activityResumed(Landroid/os/IBinder;)V
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->activitySlept(Landroid/os/IBinder;)V
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->activityStopped(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/lang/CharSequence;)V
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->activityTopResumedStateLost()V
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->cancelRecentsAnimation(Z)V
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->finishActivity(Landroid/os/IBinder;ILandroid/content/Intent;I)Z
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->getActivityOptions(Landroid/os/IBinder;)Landroid/os/Bundle;
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->getAppTasks(Ljava/lang/String;)Ljava/util/List;
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->getCallingActivity(Landroid/os/IBinder;)Landroid/content/ComponentName;
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->getCallingPackage(Landroid/os/IBinder;)Ljava/lang/String;
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->getDeviceConfigurationInfo()Landroid/content/pm/ConfigurationInfo;
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->getDisplayId(Landroid/os/IBinder;)I
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->getFilteredTasks(III)Ljava/util/List;
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->getFocusedStackInfo()Landroid/app/ActivityManager$StackInfo;
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->getLastResumedActivityUserId()I
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->getLockTaskModeState()I
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->getRecentTasks(III)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->getRequestedOrientation(Landroid/os/IBinder;)I
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->getStackInfo(II)Landroid/app/ActivityManager$StackInfo;
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->getTaskForActivity(Landroid/os/IBinder;Z)I
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->getTaskSnapshot(IZ)Landroid/app/ActivityManager$TaskSnapshot;
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->getTasks(I)Ljava/util/List;
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->invalidateHomeTaskSnapshot(Landroid/os/IBinder;)V
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->isInMultiWindowMode(Landroid/os/IBinder;)Z
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->keyguardGoingAway(I)V
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->overridePendingTransition(Landroid/os/IBinder;Ljava/lang/String;II)V
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->registerRemoteAnimationForNextActivityStart(Ljava/lang/String;Landroid/view/RemoteAnimationAdapter;)V
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->registerRemoteAnimations(Landroid/os/IBinder;Landroid/view/RemoteAnimationDefinition;)V
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->removeTask(I)Z
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->reportAssistContextExtras(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;Landroid/net/Uri;)V
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->reportSizeConfigurations(Landroid/os/IBinder;[I[I[I)V
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->setDisablePreviewScreenshots(Landroid/os/IBinder;Z)V
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->setLockScreenShown(ZZ)V
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->setPictureInPictureParams(Landroid/os/IBinder;Landroid/app/PictureInPictureParams;)V
-HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->setRequestedOrientation(Landroid/os/IBinder;I)V
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->setTaskDescription(Landroid/os/IBinder;Landroid/app/ActivityManager$TaskDescription;)V
 HSPLandroid/app/IActivityTaskManager$Stub$Proxy;->startActivity(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;)I
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;I)I
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->startActivityFromRecents(ILandroid/os/Bundle;)I
-HPLandroid/app/IActivityTaskManager$Stub$Proxy;->startRecentsActivity(Landroid/content/Intent;Landroid/app/IAssistDataReceiver;Landroid/view/IRecentsAnimationRunner;)V
-HSPLandroid/app/IActivityTaskManager$Stub;-><init>()V
 HSPLandroid/app/IActivityTaskManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IActivityTaskManager;
-PLandroid/app/IActivityTaskManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/app/IActivityTaskManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/app/IAlarmCompleteListener$Stub$Proxy;->alarmComplete(Landroid/os/IBinder;)V
-HSPLandroid/app/IAlarmCompleteListener$Stub;-><init>()V
-PLandroid/app/IAlarmCompleteListener$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/app/IAlarmCompleteListener$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/app/IAlarmCompleteListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/IAlarmListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/app/IAlarmListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/app/IAlarmListener$Stub$Proxy;->doAlarm(Landroid/app/IAlarmCompleteListener;)V
 HSPLandroid/app/IAlarmListener$Stub;-><init>()V
 HSPLandroid/app/IAlarmListener$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/app/IAlarmListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IAlarmListener;
-HPLandroid/app/IAlarmListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/app/IAlarmManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/app/IAlarmManager$Stub$Proxy;->getNextAlarmClock(I)Landroid/app/AlarmManager$AlarmClockInfo;
 HSPLandroid/app/IAlarmManager$Stub$Proxy;->remove(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
 HSPLandroid/app/IAlarmManager$Stub$Proxy;->set(Ljava/lang/String;IJJJILandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;Landroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;)V
-HSPLandroid/app/IAlarmManager$Stub;-><init>()V
 HSPLandroid/app/IAlarmManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IAlarmManager;
-PLandroid/app/IAlarmManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/app/IAlarmManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/IAppTask$Stub;-><init>()V
-PLandroid/app/IAppTask$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/IApplicationThread$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/app/IApplicationThread$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/app/IApplicationThread$Stub$Proxy;->bindApplication(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/util/List;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;[J)V
-HPLandroid/app/IApplicationThread$Stub$Proxy;->clearDnsCache()V
-HPLandroid/app/IApplicationThread$Stub$Proxy;->dispatchPackageBroadcast(I[Ljava/lang/String;)V
-PLandroid/app/IApplicationThread$Stub$Proxy;->dumpActivity(Landroid/os/ParcelFileDescriptor;Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;)V
-HPLandroid/app/IApplicationThread$Stub$Proxy;->dumpDbInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
-HPLandroid/app/IApplicationThread$Stub$Proxy;->dumpGfxInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
-HPLandroid/app/IApplicationThread$Stub$Proxy;->dumpMemInfo(Landroid/os/ParcelFileDescriptor;Landroid/os/Debug$MemoryInfo;ZZZZZ[Ljava/lang/String;)V
-HPLandroid/app/IApplicationThread$Stub$Proxy;->dumpMemInfoProto(Landroid/os/ParcelFileDescriptor;Landroid/os/Debug$MemoryInfo;ZZZZ[Ljava/lang/String;)V
-HPLandroid/app/IApplicationThread$Stub$Proxy;->dumpProvider(Landroid/os/ParcelFileDescriptor;Landroid/os/IBinder;[Ljava/lang/String;)V
-PLandroid/app/IApplicationThread$Stub$Proxy;->dumpService(Landroid/os/ParcelFileDescriptor;Landroid/os/IBinder;[Ljava/lang/String;)V
-PLandroid/app/IApplicationThread$Stub$Proxy;->requestAssistContextExtras(Landroid/os/IBinder;Landroid/os/IBinder;III)V
-HSPLandroid/app/IApplicationThread$Stub$Proxy;->runIsolatedEntryPoint(Ljava/lang/String;[Ljava/lang/String;)V
-HSPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleBindService(Landroid/os/IBinder;Landroid/content/Intent;ZI)V
-PLandroid/app/IApplicationThread$Stub$Proxy;->scheduleCreateBackupAgent(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;II)V
-HSPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleCreateService(Landroid/os/IBinder;Landroid/content/pm/ServiceInfo;Landroid/content/res/CompatibilityInfo;I)V
-PLandroid/app/IApplicationThread$Stub$Proxy;->scheduleDestroyBackupAgent(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;I)V
-PLandroid/app/IApplicationThread$Stub$Proxy;->scheduleEnterAnimationComplete(Landroid/os/IBinder;)V
-PLandroid/app/IApplicationThread$Stub$Proxy;->scheduleInstallProvider(Landroid/content/pm/ProviderInfo;)V
-HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleReceiver(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/content/res/CompatibilityInfo;ILjava/lang/String;Landroid/os/Bundle;ZII)V
-HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleRegisteredReceiver(Landroid/content/IIntentReceiver;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZII)V
-HSPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleServiceArgs(Landroid/os/IBinder;Landroid/content/pm/ParceledListSlice;)V
-PLandroid/app/IApplicationThread$Stub$Proxy;->scheduleSleeping(Landroid/os/IBinder;Z)V
-HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleStopService(Landroid/os/IBinder;)V
-PLandroid/app/IApplicationThread$Stub$Proxy;->scheduleSuicide()V
-HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleTransaction(Landroid/app/servertransaction/ClientTransaction;)V
-PLandroid/app/IApplicationThread$Stub$Proxy;->scheduleTrimMemory(I)V
-HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleUnbindService(Landroid/os/IBinder;Landroid/content/Intent;)V
-PLandroid/app/IApplicationThread$Stub$Proxy;->setNetworkBlockSeq(J)V
-HSPLandroid/app/IApplicationThread$Stub$Proxy;->setProcessState(I)V
-PLandroid/app/IApplicationThread$Stub$Proxy;->unstableProviderDied(Landroid/os/IBinder;)V
 HSPLandroid/app/IApplicationThread$Stub;-><init>()V
 HSPLandroid/app/IApplicationThread$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/app/IApplicationThread$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IApplicationThread;
 HSPLandroid/app/IApplicationThread$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/IAssistDataReceiver$Stub;-><init>()V
-PLandroid/app/IAssistDataReceiver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IAssistDataReceiver;
-PLandroid/app/IBackupAgent$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/app/IBackupAgent$Stub$Proxy;->doBackup(Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;JLandroid/app/backup/IBackupCallback;I)V
-PLandroid/app/IBackupAgent$Stub$Proxy;->doFullBackup(Landroid/os/ParcelFileDescriptor;JILandroid/app/backup/IBackupManager;I)V
-PLandroid/app/IBackupAgent$Stub$Proxy;->doMeasureFullBackup(JILandroid/app/backup/IBackupManager;I)V
-PLandroid/app/IBackupAgent$Stub$Proxy;->doQuotaExceeded(JJLandroid/app/backup/IBackupCallback;)V
-PLandroid/app/IBackupAgent$Stub;-><init>()V
-PLandroid/app/IBackupAgent$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/app/IBackupAgent$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IBackupAgent;
+HSPLandroid/app/IBackupAgent$Stub;-><init>()V
+HSPLandroid/app/IBackupAgent$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/IBackupAgent$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/IInstantAppResolver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/app/IInstantAppResolver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/app/IInstantAppResolver$Stub$Proxy;->getInstantAppResolveInfoList(Landroid/content/Intent;[IILjava/lang/String;ILandroid/os/IRemoteCallback;)V
-PLandroid/app/IInstantAppResolver$Stub;-><init>()V
-PLandroid/app/IInstantAppResolver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IInstantAppResolver;
-HPLandroid/app/IInstantAppResolver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/app/IInstrumentationWatcher$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IInstrumentationWatcher;
 HSPLandroid/app/INotificationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/app/INotificationManager$Stub$Proxy;->applyEnqueuedAdjustmentFromAssistant(Landroid/service/notification/INotificationListener;Landroid/service/notification/Adjustment;)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->areNotificationsEnabled(Ljava/lang/String;)Z
-HSPLandroid/app/INotificationManager$Stub$Proxy;->cancelAllNotifications(Ljava/lang/String;I)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->createNotificationChannelGroups(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->createNotificationChannels(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->deleteNotificationChannel(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V
-HPLandroid/app/INotificationManager$Stub$Proxy;->enqueueTextToast(Ljava/lang/String;Landroid/app/ITransientNotification;II)V
-HPLandroid/app/INotificationManager$Stub$Proxy;->finishToken(Ljava/lang/String;Landroid/app/ITransientNotification;)V
-HSPLandroid/app/INotificationManager$Stub$Proxy;->getAllowedNotificationAssistant()Landroid/content/ComponentName;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getAppActiveNotifications(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/app/INotificationManager$Stub$Proxy;->getAppsBypassingDndCount(I)I
-HSPLandroid/app/INotificationManager$Stub$Proxy;->getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;
-HPLandroid/app/INotificationManager$Stub$Proxy;->getConsolidatedNotificationPolicy()Landroid/app/NotificationManager$Policy;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;
-HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannelGroup;
-HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannelGroups(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannels(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationPolicy(Ljava/lang/String;)Landroid/app/NotificationManager$Policy;
-HPLandroid/app/INotificationManager$Stub$Proxy;->getPrivateNotificationsAllowed()Z
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getZenMode()I
-HPLandroid/app/INotificationManager$Stub$Proxy;->getZenModeConfig()Landroid/service/notification/ZenModeConfig;
-HSPLandroid/app/INotificationManager$Stub$Proxy;->getZenRules()Ljava/util/List;
-HSPLandroid/app/INotificationManager$Stub$Proxy;->isNotificationPolicyAccessGranted(Ljava/lang/String;)Z
-HSPLandroid/app/INotificationManager$Stub$Proxy;->notifyConditions(Ljava/lang/String;Landroid/service/notification/IConditionProvider;[Landroid/service/notification/Condition;)V
-HSPLandroid/app/INotificationManager$Stub$Proxy;->requestBindListener(Landroid/content/ComponentName;)V
-HSPLandroid/app/INotificationManager$Stub$Proxy;->requestBindProvider(Landroid/content/ComponentName;)V
-HSPLandroid/app/INotificationManager$Stub$Proxy;->requestUnbindProvider(Landroid/service/notification/IConditionProvider;)V
-HPLandroid/app/INotificationManager$Stub$Proxy;->setNotificationsShownFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;)V
-HPLandroid/app/INotificationManager$Stub$Proxy;->setPrivateNotificationsAllowed(Z)V
-HPLandroid/app/INotificationManager$Stub$Proxy;->setZenMode(ILandroid/net/Uri;Ljava/lang/String;)V
-HSPLandroid/app/INotificationManager$Stub$Proxy;->updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;)Z
-HSPLandroid/app/INotificationManager$Stub;-><init>()V
 HSPLandroid/app/INotificationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/INotificationManager;
-PLandroid/app/INotificationManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/app/INotificationManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/IProcessObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/app/IProcessObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/app/IProcessObserver$Stub$Proxy;->onForegroundActivitiesChanged(IIZ)V
-PLandroid/app/IProcessObserver$Stub$Proxy;->onForegroundServicesChanged(III)V
-HPLandroid/app/IProcessObserver$Stub$Proxy;->onProcessDied(II)V
-HSPLandroid/app/IProcessObserver$Stub;-><init>()V
-HSPLandroid/app/IProcessObserver$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/app/IProcessObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IProcessObserver;
-HPLandroid/app/IProcessObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/IRequestFinishCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/app/IRequestFinishCallback$Stub$Proxy;->requestFinish()V
-PLandroid/app/IRequestFinishCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IRequestFinishCallback;
-HSPLandroid/app/ISearchManager$Stub;-><init>()V
-HSPLandroid/app/ISearchManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/ISearchManager;
-PLandroid/app/ISearchManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/IServiceConnection$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/app/IServiceConnection$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/app/IServiceConnection$Stub$Proxy;->connected(Landroid/content/ComponentName;Landroid/os/IBinder;Z)V
 HSPLandroid/app/IServiceConnection$Stub;-><init>()V
 HSPLandroid/app/IServiceConnection$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/app/IServiceConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IServiceConnection;
 HSPLandroid/app/IServiceConnection$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/ITaskStackListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/app/ITaskStackListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onActivityPinned(Ljava/lang/String;III)V
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onActivityRequestedOrientationChanged(II)V
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onActivityUnpinned()V
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onPinnedStackAnimationEnded()V
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onPinnedStackAnimationStarted()V
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onRecentTaskListFrozenChanged(Z)V
-HPLandroid/app/ITaskStackListener$Stub$Proxy;->onRecentTaskListUpdated()V
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onSizeCompatModeActivityChanged(ILandroid/os/IBinder;)V
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskCreated(ILandroid/content/ComponentName;)V
-HPLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskDescriptionChanged(Landroid/app/ActivityManager$RunningTaskInfo;)V
-HPLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskDisplayChanged(II)V
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskMovedToFront(Landroid/app/ActivityManager$RunningTaskInfo;)V
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskRemovalStarted(Landroid/app/ActivityManager$RunningTaskInfo;)V
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskRemoved(I)V
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskSnapshotChanged(ILandroid/app/ActivityManager$TaskSnapshot;)V
-PLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskStackChanged()V
 HSPLandroid/app/ITaskStackListener$Stub;-><init>()V
-HSPLandroid/app/ITaskStackListener$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/app/ITaskStackListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/ITaskStackListener;
-HSPLandroid/app/ITaskStackListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/ITransientNotification$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/app/ITransientNotification$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/app/ITransientNotification$Stub$Proxy;->hide()V
-PLandroid/app/ITransientNotification$Stub$Proxy;->show(Landroid/os/IBinder;)V
-PLandroid/app/ITransientNotification$Stub;-><init>()V
-PLandroid/app/ITransientNotification$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/app/ITransientNotification$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/ITransientNotification;
-HPLandroid/app/ITransientNotification$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/app/IUiAutomationConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IUiAutomationConnection;
+HSPLandroid/app/IUiModeManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/app/IUiModeManager$Stub$Proxy;->getCurrentModeType()I
-HSPLandroid/app/IUiModeManager$Stub$Proxy;->getNightMode()I
-HSPLandroid/app/IUiModeManager$Stub;-><init>()V
 HSPLandroid/app/IUiModeManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IUiModeManager;
-PLandroid/app/IUiModeManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/app/IUiModeManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/IUidObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/app/IUidObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/app/IUidObserver$Stub$Proxy;->onUidActive(I)V
-HSPLandroid/app/IUidObserver$Stub$Proxy;->onUidGone(IZ)V
-HSPLandroid/app/IUidObserver$Stub$Proxy;->onUidIdle(IZ)V
-HPLandroid/app/IUidObserver$Stub$Proxy;->onUidStateChanged(IIJI)V
 HSPLandroid/app/IUidObserver$Stub;-><init>()V
 HSPLandroid/app/IUidObserver$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/app/IUidObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IUidObserver;
-HSPLandroid/app/IUidObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/IUriGrantsManager$Stub$Proxy;->getUriPermissions(Ljava/lang/String;ZZ)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/app/IUriGrantsManager$Stub;-><init>()V
 HSPLandroid/app/IUriGrantsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IUriGrantsManager;
-PLandroid/app/IUriGrantsManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/IUserSwitchObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/app/IUserSwitchObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/app/IUserSwitchObserver$Stub$Proxy;->onForegroundProfileSwitch(I)V
-PLandroid/app/IUserSwitchObserver$Stub$Proxy;->onLockedBootComplete(I)V
-HSPLandroid/app/IUserSwitchObserver$Stub;-><init>()V
-HSPLandroid/app/IUserSwitchObserver$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/app/IUserSwitchObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IUserSwitchObserver;
-HPLandroid/app/IUserSwitchObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/IWallpaperManager$Stub$Proxy;->getHeightHint(I)I
-HSPLandroid/app/IWallpaperManager$Stub$Proxy;->getWallpaperColors(III)Landroid/app/WallpaperColors;
-HSPLandroid/app/IWallpaperManager$Stub$Proxy;->getWallpaperInfo(I)Landroid/app/WallpaperInfo;
-HPLandroid/app/IWallpaperManager$Stub$Proxy;->getWallpaperWithFeature(Ljava/lang/String;Ljava/lang/String;Landroid/app/IWallpaperManagerCallback;ILandroid/os/Bundle;I)Landroid/os/ParcelFileDescriptor;
-HSPLandroid/app/IWallpaperManager$Stub$Proxy;->getWidthHint(I)I
-HPLandroid/app/IWallpaperManager$Stub$Proxy;->isSetWallpaperAllowed(Ljava/lang/String;)Z
-HPLandroid/app/IWallpaperManager$Stub$Proxy;->isWallpaperSupported(Ljava/lang/String;)Z
-HSPLandroid/app/IWallpaperManager$Stub$Proxy;->registerWallpaperColorsCallback(Landroid/app/IWallpaperManagerCallback;II)V
-HPLandroid/app/IWallpaperManager$Stub$Proxy;->setInAmbientMode(ZJ)V
-HSPLandroid/app/IWallpaperManager$Stub;-><init>()V
 HSPLandroid/app/IWallpaperManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IWallpaperManager;
-PLandroid/app/IWallpaperManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/app/IWallpaperManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/IWallpaperManagerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/app/IWallpaperManagerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/app/IWallpaperManagerCallback$Stub$Proxy;->onWallpaperColorsChanged(Landroid/app/WallpaperColors;II)V
-PLandroid/app/IWallpaperManagerCallback$Stub;-><init>()V
-HSPLandroid/app/IWallpaperManagerCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/app/IWallpaperManagerCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IWallpaperManagerCallback;
-PLandroid/app/InstantAppResolverService$1;-><init>(Landroid/app/InstantAppResolverService;)V
-HPLandroid/app/InstantAppResolverService$1;->getInstantAppResolveInfoList(Landroid/content/Intent;[IILjava/lang/String;ILandroid/os/IRemoteCallback;)V
-PLandroid/app/InstantAppResolverService$InstantAppResolutionCallback;-><init>(ILandroid/os/IRemoteCallback;)V
-HPLandroid/app/InstantAppResolverService$InstantAppResolutionCallback;->onInstantAppResolveInfo(Ljava/util/List;)V
-PLandroid/app/InstantAppResolverService$ServiceHandler;-><init>(Landroid/app/InstantAppResolverService;Landroid/os/Looper;)V
-HPLandroid/app/InstantAppResolverService$ServiceHandler;->handleMessage(Landroid/os/Message;)V
-PLandroid/app/InstantAppResolverService;-><clinit>()V
-PLandroid/app/InstantAppResolverService;-><init>()V
-PLandroid/app/InstantAppResolverService;->access$000()Z
-PLandroid/app/InstantAppResolverService;->attachBaseContext(Landroid/content/Context;)V
-PLandroid/app/InstantAppResolverService;->getLooper()Landroid/os/Looper;
-PLandroid/app/InstantAppResolverService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
-PLandroid/app/InstantAppResolverService;->onGetInstantAppResolveInfo(Landroid/content/Intent;[ILandroid/os/UserHandle;Ljava/lang/String;Landroid/app/InstantAppResolverService$InstantAppResolutionCallback;)V
-PLandroid/app/InstantAppResolverService;->onGetInstantAppResolveInfo(Landroid/content/Intent;[ILjava/lang/String;Landroid/app/InstantAppResolverService$InstantAppResolutionCallback;)V
+HSPLandroid/app/IWallpaperManagerCallback$Stub;-><init>()V
 HSPLandroid/app/Instrumentation;-><init>()V
 HSPLandroid/app/Instrumentation;->basicInit(Landroid/app/ActivityThread;)V
 HSPLandroid/app/Instrumentation;->callActivityOnCreate(Landroid/app/Activity;Landroid/os/Bundle;)V
 HSPLandroid/app/Instrumentation;->callActivityOnDestroy(Landroid/app/Activity;)V
-HPLandroid/app/Instrumentation;->callActivityOnNewIntent(Landroid/app/Activity;Landroid/content/Intent;)V
-HPLandroid/app/Instrumentation;->callActivityOnNewIntent(Landroid/app/Activity;Lcom/android/internal/content/ReferrerIntent;)V
 HSPLandroid/app/Instrumentation;->callActivityOnPause(Landroid/app/Activity;)V
+HSPLandroid/app/Instrumentation;->callActivityOnPictureInPictureRequested(Landroid/app/Activity;)V
 HSPLandroid/app/Instrumentation;->callActivityOnPostCreate(Landroid/app/Activity;Landroid/os/Bundle;)V
-HPLandroid/app/Instrumentation;->callActivityOnRestart(Landroid/app/Activity;)V
-HSPLandroid/app/Instrumentation;->callActivityOnRestoreInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroid/app/Instrumentation;->callActivityOnRestart(Landroid/app/Activity;)V
 HSPLandroid/app/Instrumentation;->callActivityOnResume(Landroid/app/Activity;)V
 HSPLandroid/app/Instrumentation;->callActivityOnSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V
 HSPLandroid/app/Instrumentation;->callActivityOnStart(Landroid/app/Activity;)V
@@ -2528,31 +1491,19 @@
 HSPLandroid/app/Instrumentation;->postPerformCreate(Landroid/app/Activity;)V
 HSPLandroid/app/Instrumentation;->prePerformCreate(Landroid/app/Activity;)V
 HSPLandroid/app/IntentReceiverLeaked;-><init>(Ljava/lang/String;)V
-HSPLandroid/app/IntentService$ServiceHandler;->handleMessage(Landroid/os/Message;)V
-HSPLandroid/app/IntentService;-><init>(Ljava/lang/String;)V
-HSPLandroid/app/IntentService;->onCreate()V
-HSPLandroid/app/IntentService;->onDestroy()V
-HSPLandroid/app/IntentService;->onStart(Landroid/content/Intent;I)V
-HSPLandroid/app/IntentService;->onStartCommand(Landroid/content/Intent;II)I
-HPLandroid/app/IntentService;->setIntentRedelivery(Z)V
 HSPLandroid/app/JobSchedulerImpl;-><init>(Landroid/app/job/IJobScheduler;)V
 HSPLandroid/app/JobSchedulerImpl;->cancel(I)V
-HSPLandroid/app/JobSchedulerImpl;->cancelAll()V
 HSPLandroid/app/JobSchedulerImpl;->enqueue(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I
 HSPLandroid/app/JobSchedulerImpl;->getAllPendingJobs()Ljava/util/List;
 HSPLandroid/app/JobSchedulerImpl;->getPendingJob(I)Landroid/app/job/JobInfo;
 HSPLandroid/app/JobSchedulerImpl;->schedule(Landroid/app/job/JobInfo;)I
 HSPLandroid/app/JobSchedulerImpl;->scheduleAsPackage(Landroid/app/job/JobInfo;Ljava/lang/String;ILjava/lang/String;)I
 HSPLandroid/app/KeyguardManager;-><init>(Landroid/content/Context;)V
-HPLandroid/app/KeyguardManager;->getPrivateNotificationsAllowed()Z
 HSPLandroid/app/KeyguardManager;->inKeyguardRestrictedInputMode()Z
-HSPLandroid/app/KeyguardManager;->isDeviceLocked()Z
 HSPLandroid/app/KeyguardManager;->isDeviceLocked(I)Z
-HSPLandroid/app/KeyguardManager;->isDeviceSecure()Z
 HSPLandroid/app/KeyguardManager;->isDeviceSecure(I)Z
 HSPLandroid/app/KeyguardManager;->isKeyguardLocked()Z
 HSPLandroid/app/KeyguardManager;->isKeyguardSecure()Z
-HPLandroid/app/KeyguardManager;->setPrivateNotificationsAllowed(Z)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->getRunnable()Ljava/lang/Runnable;
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args()V
@@ -2565,17 +1516,16 @@
 HSPLandroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo;-><init>()V
 HSPLandroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo;-><init>(Landroid/app/LoadedApk$1;)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher$DeathMonitor;-><init>(Landroid/app/LoadedApk$ServiceDispatcher;Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLandroid/app/LoadedApk$ServiceDispatcher$DeathMonitor;->binderDied()V
+HSPLandroid/app/LoadedApk$ServiceDispatcher$DeathMonitor;->binderDied()V
 HSPLandroid/app/LoadedApk$ServiceDispatcher$InnerConnection;-><init>(Landroid/app/LoadedApk$ServiceDispatcher;)V
 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;I)V
-HSPLandroid/app/LoadedApk$ServiceDispatcher;-><init>(Landroid/content/ServiceConnection;Landroid/content/Context;Ljava/util/concurrent/Executor;I)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher;->connected(Landroid/content/ComponentName;Landroid/os/IBinder;Z)V
-PLandroid/app/LoadedApk$ServiceDispatcher;->death(Landroid/content/ComponentName;Landroid/os/IBinder;)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
-PLandroid/app/LoadedApk$ServiceDispatcher;->doDeath(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HSPLandroid/app/LoadedApk$ServiceDispatcher;->doDeath(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher;->doForget()V
 HSPLandroid/app/LoadedApk$ServiceDispatcher;->getFlags()I
 HSPLandroid/app/LoadedApk$ServiceDispatcher;->getIServiceConnection()Landroid/app/IServiceConnection;
@@ -2613,186 +1563,56 @@
 HSPLandroid/app/LoadedApk;->getServiceDispatcherCommon(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;Ljava/util/concurrent/Executor;I)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;
 HSPLandroid/app/LoadedApk;->initializeJavaContextClassLoader()V
-HSPLandroid/app/LoadedApk;->installSystemApplicationInfo(Landroid/content/pm/ApplicationInfo;Ljava/lang/ClassLoader;)V
 HSPLandroid/app/LoadedApk;->isSecurityViolation()Z
 HSPLandroid/app/LoadedApk;->makeApplication(ZLandroid/app/Instrumentation;)Landroid/app/Application;
 HSPLandroid/app/LoadedApk;->makePaths(Landroid/app/ActivityThread;ZLandroid/content/pm/ApplicationInfo;Ljava/util/List;Ljava/util/List;)V
 HSPLandroid/app/LoadedApk;->removeContextRegistrations(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/LoadedApk;->rewriteRValues(Ljava/lang/ClassLoader;Ljava/lang/String;I)V
 HSPLandroid/app/LoadedApk;->setApplicationInfo(Landroid/content/pm/ApplicationInfo;)V
 HSPLandroid/app/LoadedApk;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V
 HSPLandroid/app/LoadedApk;->setupJitProfileSupport()V
-HSPLandroid/app/LoadedApk;->updateApplicationInfo(Landroid/content/pm/ApplicationInfo;Ljava/util/List;)V
-HPLandroid/app/LoaderManagerImpl$LoaderInfo;-><init>(Landroid/app/LoaderManagerImpl;ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)V
-HPLandroid/app/LoaderManagerImpl$LoaderInfo;->callOnLoadFinished(Landroid/content/Loader;Ljava/lang/Object;)V
-HPLandroid/app/LoaderManagerImpl$LoaderInfo;->onLoadCanceled(Landroid/content/Loader;)V
-HPLandroid/app/LoaderManagerImpl$LoaderInfo;->onLoadComplete(Landroid/content/Loader;Ljava/lang/Object;)V
-HPLandroid/app/LoaderManagerImpl$LoaderInfo;->reportStart()V
-HPLandroid/app/LoaderManagerImpl$LoaderInfo;->start()V
-HPLandroid/app/LoaderManagerImpl$LoaderInfo;->stop()V
-HPLandroid/app/LoaderManagerImpl;->access$000(Landroid/app/LoaderManagerImpl;)Landroid/app/FragmentHostCallback;
-HPLandroid/app/LoaderManagerImpl;->createAndInstallLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/app/LoaderManagerImpl$LoaderInfo;
-HPLandroid/app/LoaderManagerImpl;->createLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/app/LoaderManagerImpl$LoaderInfo;
-HPLandroid/app/LoaderManagerImpl;->destroyLoader(I)V
-HPLandroid/app/LoaderManagerImpl;->doReportStart()V
-HPLandroid/app/LoaderManagerImpl;->doStart()V
-HPLandroid/app/LoaderManagerImpl;->doStop()V
-HPLandroid/app/LoaderManagerImpl;->finishRetain()V
-HPLandroid/app/LoaderManagerImpl;->getLoader(I)Landroid/content/Loader;
-HPLandroid/app/LoaderManagerImpl;->hasRunningLoaders()Z
-HPLandroid/app/LoaderManagerImpl;->initLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;
-HPLandroid/app/LoaderManagerImpl;->installLoader(Landroid/app/LoaderManagerImpl$LoaderInfo;)V
-HPLandroid/app/LoaderManagerImpl;->restartLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;
-HPLandroid/app/Notification$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/Notification;
-HPLandroid/app/Notification$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/app/Notification$Action$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/Notification$Action;
-HPLandroid/app/Notification$Action$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/app/Notification$Action$1;->newArray(I)[Landroid/app/Notification$Action;
-HPLandroid/app/Notification$Action$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/app/Notification$Action$Builder;-><init>(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)V
+HSPLandroid/app/Notification$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/Notification;
+HSPLandroid/app/Notification$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/Notification$Action$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/Notification$Action;
+HSPLandroid/app/Notification$Action$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/Notification$Action$1;->newArray(I)[Landroid/app/Notification$Action;
+HSPLandroid/app/Notification$Action$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/app/Notification$Action$Builder;-><init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V
-PLandroid/app/Notification$Action$Builder;-><init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Landroid/app/PendingIntent;Landroid/os/Bundle;[Landroid/app/RemoteInput;ZI)V
+HSPLandroid/app/Notification$Action$Builder;-><init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Landroid/app/PendingIntent;Landroid/os/Bundle;[Landroid/app/RemoteInput;ZI)V
 HSPLandroid/app/Notification$Action$Builder;->addExtras(Landroid/os/Bundle;)Landroid/app/Notification$Action$Builder;
-HSPLandroid/app/Notification$Action$Builder;->addRemoteInput(Landroid/app/RemoteInput;)Landroid/app/Notification$Action$Builder;
 HSPLandroid/app/Notification$Action$Builder;->build()Landroid/app/Notification$Action;
-PLandroid/app/Notification$Action$Builder;->checkContextualActionNullFields()V
+HSPLandroid/app/Notification$Action$Builder;->checkContextualActionNullFields()V
 HSPLandroid/app/Notification$Action$Builder;->setAllowGeneratedReplies(Z)Landroid/app/Notification$Action$Builder;
-HSPLandroid/app/Notification$Action$Builder;->setContextual(Z)Landroid/app/Notification$Action$Builder;
 HSPLandroid/app/Notification$Action$Builder;->setSemanticAction(I)Landroid/app/Notification$Action$Builder;
-HSPLandroid/app/Notification$Action;-><init>(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)V
 HSPLandroid/app/Notification$Action;-><init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Landroid/app/PendingIntent;Landroid/os/Bundle;[Landroid/app/RemoteInput;ZIZ)V
-PLandroid/app/Notification$Action;-><init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Landroid/app/PendingIntent;Landroid/os/Bundle;[Landroid/app/RemoteInput;ZIZLandroid/app/Notification$1;)V
-HPLandroid/app/Notification$Action;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/Notification$Action;-><init>(Landroid/os/Parcel;Landroid/app/Notification$1;)V
-HPLandroid/app/Notification$Action;->clone()Landroid/app/Notification$Action;
-HPLandroid/app/Notification$Action;->getAllowGeneratedReplies()Z
+HSPLandroid/app/Notification$Action;-><init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Landroid/app/PendingIntent;Landroid/os/Bundle;[Landroid/app/RemoteInput;ZIZLandroid/app/Notification$1;)V
+HSPLandroid/app/Notification$Action;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/Notification$Action;-><init>(Landroid/os/Parcel;Landroid/app/Notification$1;)V
 HSPLandroid/app/Notification$Action;->getIcon()Landroid/graphics/drawable/Icon;
-HPLandroid/app/Notification$Action;->getRemoteInputs()[Landroid/app/RemoteInput;
-HPLandroid/app/Notification$Action;->getSemanticAction()I
-HPLandroid/app/Notification$Action;->isContextual()Z
 HSPLandroid/app/Notification$Action;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/Notification$BigPictureStyle;-><init>()V
-HSPLandroid/app/Notification$BigPictureStyle;-><init>(Landroid/app/Notification$Builder;)V
-HSPLandroid/app/Notification$BigPictureStyle;->addExtras(Landroid/os/Bundle;)V
-PLandroid/app/Notification$BigPictureStyle;->areNotificationsVisiblyDifferent(Landroid/app/Notification$Style;)Z
-HSPLandroid/app/Notification$BigPictureStyle;->bigPicture(Landroid/graphics/Bitmap;)Landroid/app/Notification$BigPictureStyle;
-HPLandroid/app/Notification$BigPictureStyle;->hasSummaryInHeader()Z
-HPLandroid/app/Notification$BigPictureStyle;->makeBigContentView()Landroid/widget/RemoteViews;
-HSPLandroid/app/Notification$BigPictureStyle;->purgeResources()V
-HSPLandroid/app/Notification$BigPictureStyle;->reduceImageSizes(Landroid/content/Context;)V
-HPLandroid/app/Notification$BigPictureStyle;->restoreFromExtras(Landroid/os/Bundle;)V
-HSPLandroid/app/Notification$BigPictureStyle;->setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$BigPictureStyle;
-HSPLandroid/app/Notification$BigPictureStyle;->setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigPictureStyle;
 HSPLandroid/app/Notification$BigTextStyle;-><init>()V
 HSPLandroid/app/Notification$BigTextStyle;-><init>(Landroid/app/Notification$Builder;)V
 HSPLandroid/app/Notification$BigTextStyle;->addExtras(Landroid/os/Bundle;)V
-PLandroid/app/Notification$BigTextStyle;->areNotificationsVisiblyDifferent(Landroid/app/Notification$Style;)Z
 HSPLandroid/app/Notification$BigTextStyle;->bigText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;
-PLandroid/app/Notification$BigTextStyle;->getBigText()Ljava/lang/CharSequence;
-HPLandroid/app/Notification$BigTextStyle;->makeBigContentView()Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$BigTextStyle;->makeContentView(Z)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$BigTextStyle;->makeHeadsUpContentView(Z)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$BigTextStyle;->restoreFromExtras(Landroid/os/Bundle;)V
 HSPLandroid/app/Notification$BigTextStyle;->setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;
-HSPLandroid/app/Notification$BigTextStyle;->setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;
-HPLandroid/app/Notification$BubbleMetadata;-><init>(Landroid/app/PendingIntent;Landroid/app/PendingIntent;Landroid/graphics/drawable/Icon;II)V
-HPLandroid/app/Notification$BubbleMetadata;-><init>(Landroid/app/PendingIntent;Landroid/app/PendingIntent;Landroid/graphics/drawable/Icon;IILandroid/app/Notification$1;)V
-HPLandroid/app/Notification$BubbleMetadata;->setFlags(I)V
-HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;)V
 HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;Landroid/app/Notification;)V
 HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;Ljava/lang/String;)V
-HPLandroid/app/Notification$Builder;->access$2300(Landroid/app/Notification$Builder;ILandroid/app/Notification$StandardTemplateParams;Landroid/app/Notification$TemplateBindResult;)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$Builder;->access$2400(Landroid/app/Notification$Builder;)I
-HPLandroid/app/Notification$Builder;->access$2500(Landroid/app/Notification$Builder;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HPLandroid/app/Notification$Builder;->access$2600(Landroid/app/Notification$Builder;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HPLandroid/app/Notification$Builder;->access$2700(Landroid/app/Notification$Builder;Landroid/widget/RemoteViews;ILandroid/app/Notification$StandardTemplateParams;)V
-HPLandroid/app/Notification$Builder;->access$2800(Landroid/app/Notification$Builder;)Ljava/util/ArrayList;
-HPLandroid/app/Notification$Builder;->access$2802(Landroid/app/Notification$Builder;Ljava/util/ArrayList;)Ljava/util/ArrayList;
-HPLandroid/app/Notification$Builder;->access$2900(Landroid/app/Notification$Builder;)Ljava/util/ArrayList;
-HPLandroid/app/Notification$Builder;->access$2902(Landroid/app/Notification$Builder;Ljava/util/ArrayList;)Ljava/util/ArrayList;
-PLandroid/app/Notification$Builder;->access$300(Landroid/app/Notification$Builder;)Landroid/app/Notification;
-HPLandroid/app/Notification$Builder;->access$3100(Landroid/app/Notification$Builder;)I
-HSPLandroid/app/Notification$Builder;->access$3400(Landroid/app/Notification$Builder;)Landroid/content/Context;
-HPLandroid/app/Notification$Builder;->access$3700(Landroid/app/Notification$Builder;)I
-HPLandroid/app/Notification$Builder;->access$3800(Landroid/app/Notification$Builder;Landroid/app/Notification$StandardTemplateParams;)Z
-HPLandroid/app/Notification$Builder;->access$3900(Landroid/app/Notification$Builder;)I
-HPLandroid/app/Notification$Builder;->access$4000(Landroid/app/Notification$Builder;)Z
-HPLandroid/app/Notification$Builder;->access$4100(Landroid/app/Notification$Builder;ILandroid/app/Notification$StandardTemplateParams;Landroid/app/Notification$TemplateBindResult;)Landroid/widget/RemoteViews;
-HSPLandroid/app/Notification$Builder;->addAction(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->addAction(Landroid/app/Notification$Action;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->addExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;
-HPLandroid/app/Notification$Builder;->addPerson(Landroid/app/Person;)Landroid/app/Notification$Builder;
-HPLandroid/app/Notification$Builder;->addPerson(Ljava/lang/String;)Landroid/app/Notification$Builder;
-HPLandroid/app/Notification$Builder;->applyStandardTemplate(ILandroid/app/Notification$StandardTemplateParams;Landroid/app/Notification$TemplateBindResult;)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$Builder;->applyStandardTemplateWithActions(ILandroid/app/Notification$StandardTemplateParams;Landroid/app/Notification$TemplateBindResult;)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$Builder;->bindExpandButton(Landroid/widget/RemoteViews;Landroid/app/Notification$StandardTemplateParams;)V
-HPLandroid/app/Notification$Builder;->bindHeaderChronometerAndTime(Landroid/widget/RemoteViews;Landroid/app/Notification$StandardTemplateParams;)V
-HPLandroid/app/Notification$Builder;->bindHeaderText(Landroid/widget/RemoteViews;Landroid/app/Notification$StandardTemplateParams;)V
-HPLandroid/app/Notification$Builder;->bindHeaderTextSecondary(Landroid/widget/RemoteViews;Landroid/app/Notification$StandardTemplateParams;)V
-HPLandroid/app/Notification$Builder;->bindLargeIcon(Landroid/widget/RemoteViews;Landroid/app/Notification$StandardTemplateParams;)Z
-HPLandroid/app/Notification$Builder;->bindLargeIconAndReply(Landroid/widget/RemoteViews;Landroid/app/Notification$StandardTemplateParams;Landroid/app/Notification$TemplateBindResult;)V
-HPLandroid/app/Notification$Builder;->bindNotificationHeader(Landroid/widget/RemoteViews;Landroid/app/Notification$StandardTemplateParams;)V
-HPLandroid/app/Notification$Builder;->bindProfileBadge(Landroid/widget/RemoteViews;Landroid/app/Notification$StandardTemplateParams;)V
-HPLandroid/app/Notification$Builder;->bindReplyIcon(Landroid/widget/RemoteViews;Landroid/app/Notification$StandardTemplateParams;)Z
-HPLandroid/app/Notification$Builder;->bindSmallIcon(Landroid/widget/RemoteViews;Landroid/app/Notification$StandardTemplateParams;)V
 HSPLandroid/app/Notification$Builder;->build()Landroid/app/Notification;
 HSPLandroid/app/Notification$Builder;->buildUnstyled()Landroid/app/Notification;
-HPLandroid/app/Notification$Builder;->calculateMarginEnd(ZZ)I
-HPLandroid/app/Notification$Builder;->createBigContentView()Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$Builder;->createContentView()Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$Builder;->createContentView(Z)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$Builder;->createHeadsUpContentView(Z)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$Builder;->createSummaryText()Ljava/lang/CharSequence;
-HPLandroid/app/Notification$Builder;->ensureColorSpanContrast(Ljava/lang/CharSequence;I[Landroid/content/res/ColorStateList;)Ljava/lang/CharSequence;
-HPLandroid/app/Notification$Builder;->ensureColors(Landroid/app/Notification$StandardTemplateParams;)V
-PLandroid/app/Notification$Builder;->extend(Landroid/app/Notification$Extender;)Landroid/app/Notification$Builder;
-HPLandroid/app/Notification$Builder;->findReplyAction()Landroid/app/Notification$Action;
-HPLandroid/app/Notification$Builder;->generateActionButton(Landroid/app/Notification$Action;ZLandroid/app/Notification$StandardTemplateParams;)Landroid/widget/RemoteViews;
-PLandroid/app/Notification$Builder;->getAllExtras()Landroid/os/Bundle;
-HPLandroid/app/Notification$Builder;->getBigBaseLayoutResource()I
-HPLandroid/app/Notification$Builder;->getBigPictureLayoutResource()I
-HPLandroid/app/Notification$Builder;->getBigTextLayoutResource()I
-PLandroid/app/Notification$Builder;->getExtras()Landroid/os/Bundle;
-HPLandroid/app/Notification$Builder;->getHeadsUpStatusBarText(Z)Ljava/lang/CharSequence;
-HPLandroid/app/Notification$Builder;->getInboxLayoutResource()I
-HPLandroid/app/Notification$Builder;->getMessagingLayoutResource()I
-HPLandroid/app/Notification$Builder;->getPrimaryTextColor(Landroid/app/Notification$StandardTemplateParams;)I
-HPLandroid/app/Notification$Builder;->getProfileBadge()Landroid/graphics/Bitmap;
-HPLandroid/app/Notification$Builder;->getProfileBadgeDrawable()Landroid/graphics/drawable/Drawable;
-HPLandroid/app/Notification$Builder;->getSecondaryTextColor(Landroid/app/Notification$StandardTemplateParams;)I
-HPLandroid/app/Notification$Builder;->getStyle()Landroid/app/Notification$Style;
-HPLandroid/app/Notification$Builder;->handleProgressBar(Landroid/widget/RemoteViews;Landroid/os/Bundle;Landroid/app/Notification$StandardTemplateParams;)Z
-HPLandroid/app/Notification$Builder;->hasValidRemoteInput(Landroid/app/Notification$Action;)Z
-HPLandroid/app/Notification$Builder;->isColorized(Landroid/app/Notification$StandardTemplateParams;)Z
-HPLandroid/app/Notification$Builder;->loadHeaderAppName()Ljava/lang/String;
-HPLandroid/app/Notification$Builder;->makeHeaderExpanded(Landroid/widget/RemoteViews;)V
-HPLandroid/app/Notification$Builder;->makeLowPriorityContentView(Z)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$Builder;->makeNotificationHeader()Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$Builder;->makeNotificationHeader(Landroid/app/Notification$StandardTemplateParams;)Landroid/widget/RemoteViews;
+HSPLandroid/app/Notification$Builder;->getAllExtras()Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->maybeCloneStrippedForDelivery(Landroid/app/Notification;ZLandroid/content/Context;)Landroid/app/Notification;
-HPLandroid/app/Notification$Builder;->processLargeLegacyIcon(Landroid/graphics/drawable/Icon;Landroid/widget/RemoteViews;Landroid/app/Notification$StandardTemplateParams;)V
-HPLandroid/app/Notification$Builder;->processSmallIconColor(Landroid/graphics/drawable/Icon;Landroid/widget/RemoteViews;Landroid/app/Notification$StandardTemplateParams;)V
-HPLandroid/app/Notification$Builder;->processTextSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HPLandroid/app/Notification$Builder;->recoverBuilder(Landroid/content/Context;Landroid/app/Notification;)Landroid/app/Notification$Builder;
-HPLandroid/app/Notification$Builder;->resetNotificationHeader(Landroid/widget/RemoteViews;)V
-HPLandroid/app/Notification$Builder;->resetStandardTemplate(Landroid/widget/RemoteViews;)V
-HPLandroid/app/Notification$Builder;->resetStandardTemplateWithActions(Landroid/widget/RemoteViews;)V
-HPLandroid/app/Notification$Builder;->resolveContrastColor(Landroid/app/Notification$StandardTemplateParams;)I
-HPLandroid/app/Notification$Builder;->resolveNeutralColor()I
 HSPLandroid/app/Notification$Builder;->sanitizeColor()V
 HSPLandroid/app/Notification$Builder;->setAllowSystemGeneratedContextualActions(Z)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setAutoCancel(Z)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setBadgeIconType(I)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setBubbleMetadata(Landroid/app/Notification$BubbleMetadata;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setCategory(Ljava/lang/String;)Landroid/app/Notification$Builder;
-PLandroid/app/Notification$Builder;->setChannelId(Ljava/lang/String;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setColor(I)Landroid/app/Notification$Builder;
-HPLandroid/app/Notification$Builder;->setColorPalette(II)V
 HSPLandroid/app/Notification$Builder;->setContent(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setContentInfo(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setContentIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;
-HPLandroid/app/Notification$Builder;->setContentMinHeight(Landroid/widget/RemoteViews;Z)V
 HSPLandroid/app/Notification$Builder;->setContentText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setCustomContentView(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;
@@ -2814,7 +1634,6 @@
 HSPLandroid/app/Notification$Builder;->setPriority(I)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setProgress(IIZ)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setPublicVersion(Landroid/app/Notification;)Landroid/app/Notification$Builder;
-HPLandroid/app/Notification$Builder;->setRebuildStyledRemoteViews(Z)V
 HSPLandroid/app/Notification$Builder;->setRemoteInputHistory([Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setShortcutId(Ljava/lang/String;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setShowWhen(Z)Landroid/app/Notification$Builder;
@@ -2823,11 +1642,9 @@
 HSPLandroid/app/Notification$Builder;->setSmallIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setSortKey(Ljava/lang/String;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setSound(Landroid/net/Uri;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setSound(Landroid/net/Uri;I)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setSound(Landroid/net/Uri;Landroid/media/AudioAttributes;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setStyle(Landroid/app/Notification$Style;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setSubText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
-HPLandroid/app/Notification$Builder;->setTextViewColorSecondary(Landroid/widget/RemoteViews;ILandroid/app/Notification$StandardTemplateParams;)V
 HSPLandroid/app/Notification$Builder;->setTicker(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setTicker(Ljava/lang/CharSequence;Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setTimeoutAfter(J)Landroid/app/Notification$Builder;
@@ -2835,436 +1652,131 @@
 HSPLandroid/app/Notification$Builder;->setVibrate([J)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setVisibility(I)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setWhen(J)Landroid/app/Notification$Builder;
-HPLandroid/app/Notification$Builder;->shouldTintActionButtons()Z
-HPLandroid/app/Notification$Builder;->textColorsNeedInversion()Z
-PLandroid/app/Notification$Builder;->usesStandardHeader()Z
-HPLandroid/app/Notification$BuilderRemoteViews;->shouldUseStaticFilter()Z
-PLandroid/app/Notification$InboxStyle;-><init>()V
-HSPLandroid/app/Notification$InboxStyle;-><init>(Landroid/app/Notification$Builder;)V
-HSPLandroid/app/Notification$InboxStyle;->addExtras(Landroid/os/Bundle;)V
-HSPLandroid/app/Notification$InboxStyle;->addLine(Ljava/lang/CharSequence;)Landroid/app/Notification$InboxStyle;
-HPLandroid/app/Notification$InboxStyle;->areNotificationsVisiblyDifferent(Landroid/app/Notification$Style;)Z
-HPLandroid/app/Notification$InboxStyle;->getLines()Ljava/util/ArrayList;
-HPLandroid/app/Notification$InboxStyle;->handleInboxImageMargin(Landroid/widget/RemoteViews;IZI)V
-HPLandroid/app/Notification$InboxStyle;->makeBigContentView()Landroid/widget/RemoteViews;
-PLandroid/app/Notification$InboxStyle;->restoreFromExtras(Landroid/os/Bundle;)V
-HSPLandroid/app/Notification$InboxStyle;->setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$InboxStyle;
-HSPLandroid/app/Notification$InboxStyle;->setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$InboxStyle;
-PLandroid/app/Notification$MediaStyle;-><init>()V
-HPLandroid/app/Notification$MediaStyle;->addExtras(Landroid/os/Bundle;)V
-PLandroid/app/Notification$MediaStyle;->areNotificationsVisiblyDifferent(Landroid/app/Notification$Style;)Z
-HPLandroid/app/Notification$MediaStyle;->bindMediaActionButton(Landroid/widget/RemoteViews;ILandroid/app/Notification$Action;Landroid/app/Notification$StandardTemplateParams;)V
-HPLandroid/app/Notification$MediaStyle;->buildStyled(Landroid/app/Notification;)Landroid/app/Notification;
-HPLandroid/app/Notification$MediaStyle;->getActionColor(Landroid/app/Notification$StandardTemplateParams;)I
-HPLandroid/app/Notification$MediaStyle;->handleImage(Landroid/widget/RemoteViews;)V
-HPLandroid/app/Notification$MediaStyle;->makeBigContentView()Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$MediaStyle;->makeContentView(Z)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$MediaStyle;->makeMediaBigContentView()Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$MediaStyle;->makeMediaContentView()Landroid/widget/RemoteViews;
-PLandroid/app/Notification$MediaStyle;->restoreFromExtras(Landroid/os/Bundle;)V
-HPLandroid/app/Notification$MediaStyle;->setMediaSession(Landroid/media/session/MediaSession$Token;)Landroid/app/Notification$MediaStyle;
-HPLandroid/app/Notification$MediaStyle;->setShowActionsInCompactView([I)Landroid/app/Notification$MediaStyle;
-HSPLandroid/app/Notification$MessagingStyle$Message;-><init>(Ljava/lang/CharSequence;JLandroid/app/Person;)V
-HSPLandroid/app/Notification$MessagingStyle$Message;-><init>(Ljava/lang/CharSequence;JLandroid/app/Person;Z)V
-HSPLandroid/app/Notification$MessagingStyle$Message;->access$3500(Landroid/app/Notification$MessagingStyle$Message;)Ljava/lang/CharSequence;
-HSPLandroid/app/Notification$MessagingStyle$Message;->access$3600(Landroid/app/Notification$MessagingStyle$Message;)Landroid/app/Person;
-HSPLandroid/app/Notification$MessagingStyle$Message;->getBundleArrayForMessages(Ljava/util/List;)[Landroid/os/Bundle;
-HPLandroid/app/Notification$MessagingStyle$Message;->getDataMimeType()Ljava/lang/String;
-PLandroid/app/Notification$MessagingStyle$Message;->getDataUri()Landroid/net/Uri;
-PLandroid/app/Notification$MessagingStyle$Message;->getExtras()Landroid/os/Bundle;
-HPLandroid/app/Notification$MessagingStyle$Message;->getMessageFromBundle(Landroid/os/Bundle;)Landroid/app/Notification$MessagingStyle$Message;
-HPLandroid/app/Notification$MessagingStyle$Message;->getMessagesFromBundleArray([Landroid/os/Parcelable;)Ljava/util/List;
-HPLandroid/app/Notification$MessagingStyle$Message;->getSender()Ljava/lang/CharSequence;
-PLandroid/app/Notification$MessagingStyle$Message;->getSenderPerson()Landroid/app/Person;
-PLandroid/app/Notification$MessagingStyle$Message;->getText()Ljava/lang/CharSequence;
-HPLandroid/app/Notification$MessagingStyle$Message;->getTimestamp()J
-HPLandroid/app/Notification$MessagingStyle$Message;->isRemoteInputHistory()Z
-PLandroid/app/Notification$MessagingStyle$Message;->setData(Ljava/lang/String;Landroid/net/Uri;)Landroid/app/Notification$MessagingStyle$Message;
-HSPLandroid/app/Notification$MessagingStyle$Message;->toBundle()Landroid/os/Bundle;
-PLandroid/app/Notification$MessagingStyle;-><init>()V
-HSPLandroid/app/Notification$MessagingStyle;-><init>(Landroid/app/Person;)V
-HSPLandroid/app/Notification$MessagingStyle;->addExtras(Landroid/os/Bundle;)V
-HSPLandroid/app/Notification$MessagingStyle;->addMessage(Landroid/app/Notification$MessagingStyle$Message;)Landroid/app/Notification$MessagingStyle;
-PLandroid/app/Notification$MessagingStyle;->areNotificationsVisiblyDifferent(Landroid/app/Notification$Style;)Z
-HSPLandroid/app/Notification$MessagingStyle;->findLatestIncomingMessage()Landroid/app/Notification$MessagingStyle$Message;
-HSPLandroid/app/Notification$MessagingStyle;->findLatestIncomingMessage(Ljava/util/List;)Landroid/app/Notification$MessagingStyle$Message;
-HSPLandroid/app/Notification$MessagingStyle;->fixTitleAndTextExtras(Landroid/os/Bundle;)V
-HPLandroid/app/Notification$MessagingStyle;->getHeadsUpStatusBarText()Ljava/lang/CharSequence;
-PLandroid/app/Notification$MessagingStyle;->getMessages()Ljava/util/List;
-HPLandroid/app/Notification$MessagingStyle;->hasOnlyWhiteSpaceSenders()Z
-HPLandroid/app/Notification$MessagingStyle;->isWhiteSpace(Ljava/lang/CharSequence;)Z
-HPLandroid/app/Notification$MessagingStyle;->makeBigContentView()Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$MessagingStyle;->makeContentView(Z)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$MessagingStyle;->makeHeadsUpContentView(Z)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$MessagingStyle;->makeMessagingView(ZZ)Landroid/widget/RemoteViews;
-PLandroid/app/Notification$MessagingStyle;->restoreFromExtras(Landroid/os/Bundle;)V
-HSPLandroid/app/Notification$MessagingStyle;->setConversationTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$MessagingStyle;
-HSPLandroid/app/Notification$MessagingStyle;->setGroupConversation(Z)Landroid/app/Notification$MessagingStyle;
-HSPLandroid/app/Notification$MessagingStyle;->validate(Landroid/content/Context;)V
 HSPLandroid/app/Notification$StandardTemplateParams;-><init>()V
 HSPLandroid/app/Notification$StandardTemplateParams;-><init>(Landroid/app/Notification$1;)V
-HPLandroid/app/Notification$StandardTemplateParams;->fillTextsFrom(Landroid/app/Notification$Builder;)Landroid/app/Notification$StandardTemplateParams;
-HPLandroid/app/Notification$StandardTemplateParams;->hasProgress(Z)Landroid/app/Notification$StandardTemplateParams;
-HPLandroid/app/Notification$StandardTemplateParams;->headerTextSecondary(Ljava/lang/CharSequence;)Landroid/app/Notification$StandardTemplateParams;
-HPLandroid/app/Notification$StandardTemplateParams;->hideLargeIcon(Z)Landroid/app/Notification$StandardTemplateParams;
-HPLandroid/app/Notification$StandardTemplateParams;->hideReplyIcon(Z)Landroid/app/Notification$StandardTemplateParams;
-HPLandroid/app/Notification$StandardTemplateParams;->reset()Landroid/app/Notification$StandardTemplateParams;
-HPLandroid/app/Notification$StandardTemplateParams;->setMaxRemoteInputHistory(I)Landroid/app/Notification$StandardTemplateParams;
-HPLandroid/app/Notification$StandardTemplateParams;->text(Ljava/lang/CharSequence;)Landroid/app/Notification$StandardTemplateParams;
-HPLandroid/app/Notification$StandardTemplateParams;->title(Ljava/lang/CharSequence;)Landroid/app/Notification$StandardTemplateParams;
 HSPLandroid/app/Notification$Style;-><init>()V
-HPLandroid/app/Notification$Style;->access$3300(Landroid/app/Notification$Style;)Ljava/lang/CharSequence;
 HSPLandroid/app/Notification$Style;->addExtras(Landroid/os/Bundle;)V
-HPLandroid/app/Notification$Style;->build()Landroid/app/Notification;
 HSPLandroid/app/Notification$Style;->buildStyled(Landroid/app/Notification;)Landroid/app/Notification;
-HPLandroid/app/Notification$Style;->checkBuilder()V
-HPLandroid/app/Notification$Style;->getHeadsUpStatusBarText()Ljava/lang/CharSequence;
-HPLandroid/app/Notification$Style;->getStandardView(ILandroid/app/Notification$StandardTemplateParams;Landroid/app/Notification$TemplateBindResult;)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$Style;->hasSummaryInHeader()Z
 HSPLandroid/app/Notification$Style;->internalSetBigContentTitle(Ljava/lang/CharSequence;)V
-HSPLandroid/app/Notification$Style;->internalSetSummaryText(Ljava/lang/CharSequence;)V
-HPLandroid/app/Notification$Style;->makeContentView(Z)Landroid/widget/RemoteViews;
-HPLandroid/app/Notification$Style;->makeHeadsUpContentView(Z)Landroid/widget/RemoteViews;
 HSPLandroid/app/Notification$Style;->purgeResources()V
 HSPLandroid/app/Notification$Style;->reduceImageSizes(Landroid/content/Context;)V
-HPLandroid/app/Notification$Style;->restoreFromExtras(Landroid/os/Bundle;)V
 HSPLandroid/app/Notification$Style;->setBuilder(Landroid/app/Notification$Builder;)V
 HSPLandroid/app/Notification$Style;->validate(Landroid/content/Context;)V
-HPLandroid/app/Notification$TemplateBindResult;-><init>()V
-HPLandroid/app/Notification$TemplateBindResult;-><init>(Landroid/app/Notification$1;)V
-HPLandroid/app/Notification$TemplateBindResult;->getIconMarginEnd()I
-HPLandroid/app/Notification$TemplateBindResult;->isRightIconContainerVisible()Z
-HPLandroid/app/Notification$TemplateBindResult;->setIconMarginEnd(I)V
-HPLandroid/app/Notification$TemplateBindResult;->setRightIconContainerVisible(Z)V
-PLandroid/app/Notification$TvExtender;-><init>()V
-PLandroid/app/Notification$TvExtender;->extend(Landroid/app/Notification$Builder;)Landroid/app/Notification$Builder;
-PLandroid/app/Notification$TvExtender;->setChannelId(Ljava/lang/String;)Landroid/app/Notification$TvExtender;
 HSPLandroid/app/Notification;-><init>()V
-HPLandroid/app/Notification;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/Notification;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/Notification;->access$1002(Landroid/app/Notification;Landroid/app/Notification$BubbleMetadata;)Landroid/app/Notification$BubbleMetadata;
-PLandroid/app/Notification;->access$1102(Landroid/app/Notification;J)J
-HPLandroid/app/Notification;->access$1300(Landroid/app/Notification;)Landroid/graphics/drawable/Icon;
-PLandroid/app/Notification;->access$1302(Landroid/app/Notification;Landroid/graphics/drawable/Icon;)Landroid/graphics/drawable/Icon;
-PLandroid/app/Notification;->access$1402(Landroid/app/Notification;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/app/Notification;->access$1600(Landroid/app/Notification;)Z
-HPLandroid/app/Notification;->access$1800(Landroid/app/Notification;)Z
-PLandroid/app/Notification;->access$2002(Landroid/app/Notification;J)J
+HSPLandroid/app/Notification;->access$1102(Landroid/app/Notification;J)J
+HSPLandroid/app/Notification;->access$1302(Landroid/app/Notification;Landroid/graphics/drawable/Icon;)Landroid/graphics/drawable/Icon;
+HSPLandroid/app/Notification;->access$1402(Landroid/app/Notification;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/Notification;->access$1502(Landroid/app/Notification;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/Notification;->access$2002(Landroid/app/Notification;J)J
 HSPLandroid/app/Notification;->access$2202(Landroid/app/Notification;Z)Z
 HSPLandroid/app/Notification;->access$502(Landroid/app/Notification;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/app/Notification;->access$902(Landroid/app/Notification;I)I
-PLandroid/app/Notification;->addFieldsFromContext(Landroid/content/Context;Landroid/app/Notification;)V
-PLandroid/app/Notification;->addFieldsFromContext(Landroid/content/pm/ApplicationInfo;Landroid/app/Notification;)V
-PLandroid/app/Notification;->areActionsVisiblyDifferent(Landroid/app/Notification;Landroid/app/Notification;)Z
-PLandroid/app/Notification;->areRemoteViewsChanged(Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;)Z
-PLandroid/app/Notification;->areRemoteViewsChanged(Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;)Z
-PLandroid/app/Notification;->areStyledNotificationsVisiblyDifferent(Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;)Z
-HPLandroid/app/Notification;->clone()Landroid/app/Notification;
+HSPLandroid/app/Notification;->access$600(Landroid/app/Notification;)Ljava/lang/String;
+HSPLandroid/app/Notification;->access$602(Landroid/app/Notification;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/Notification;->access$802(Landroid/app/Notification;I)I
+HSPLandroid/app/Notification;->access$902(Landroid/app/Notification;I)I
+HSPLandroid/app/Notification;->addFieldsFromContext(Landroid/content/Context;Landroid/app/Notification;)V
+HSPLandroid/app/Notification;->addFieldsFromContext(Landroid/content/pm/ApplicationInfo;Landroid/app/Notification;)V
 HSPLandroid/app/Notification;->cloneInto(Landroid/app/Notification;Z)V
-PLandroid/app/Notification;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLandroid/app/Notification;->findRemoteInputActionPair(Z)Landroid/util/Pair;
-PLandroid/app/Notification;->fixDuplicateExtra(Landroid/os/Parcelable;Ljava/lang/String;)V
-PLandroid/app/Notification;->fixDuplicateExtras()V
-HPLandroid/app/Notification;->getAllowSystemGeneratedContextualActions()Z
-PLandroid/app/Notification;->getBubbleMetadata()Landroid/app/Notification$BubbleMetadata;
-HPLandroid/app/Notification;->getChannelId()Ljava/lang/String;
-HPLandroid/app/Notification;->getContextualActions()Ljava/util/List;
-HPLandroid/app/Notification;->getGroup()Ljava/lang/String;
-PLandroid/app/Notification;->getGroupAlertBehavior()I
-HPLandroid/app/Notification;->getLargeIcon()Landroid/graphics/drawable/Icon;
+HSPLandroid/app/Notification;->fixDuplicateExtra(Landroid/os/Parcelable;Ljava/lang/String;)V
+HSPLandroid/app/Notification;->fixDuplicateExtras()V
+HSPLandroid/app/Notification;->getChannelId()Ljava/lang/String;
+HSPLandroid/app/Notification;->getGroup()Ljava/lang/String;
+HSPLandroid/app/Notification;->getLargeIcon()Landroid/graphics/drawable/Icon;
 HSPLandroid/app/Notification;->getNotificationStyle()Ljava/lang/Class;
 HSPLandroid/app/Notification;->getNotificationStyleClass(Ljava/lang/String;)Ljava/lang/Class;
-HPLandroid/app/Notification;->getShortcutId()Ljava/lang/String;
+HSPLandroid/app/Notification;->getShortcutId()Ljava/lang/String;
 HSPLandroid/app/Notification;->getSmallIcon()Landroid/graphics/drawable/Icon;
-HPLandroid/app/Notification;->getSortKey()Ljava/lang/String;
-PLandroid/app/Notification;->getTimeoutAfter()J
-HPLandroid/app/Notification;->hasCompletedProgress()Z
-HPLandroid/app/Notification;->hasMediaSession()Z
-HPLandroid/app/Notification;->isColorized()Z
-HPLandroid/app/Notification;->isColorizedMedia()Z
-HPLandroid/app/Notification;->isForegroundService()Z
-PLandroid/app/Notification;->isGroupChild()Z
-HPLandroid/app/Notification;->isGroupSummary()Z
-HPLandroid/app/Notification;->isMediaNotification()Z
+HSPLandroid/app/Notification;->getSortKey()Ljava/lang/String;
 HSPLandroid/app/Notification;->lambda$writeToParcel$0$Notification(Landroid/os/Parcel;Landroid/app/PendingIntent;Landroid/os/Parcel;I)V
-HPLandroid/app/Notification;->lightenPayload()V
-HPLandroid/app/Notification;->readFromParcelImpl(Landroid/os/Parcel;)V
+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;
 HSPLandroid/app/Notification;->safeCharSequence(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/app/Notification;->setSmallIcon(Landroid/graphics/drawable/Icon;)V
-HPLandroid/app/Notification;->showsChronometer()Z
-HPLandroid/app/Notification;->showsTime()Z
-PLandroid/app/Notification;->suppressAlertingDueToGrouping()Z
-HPLandroid/app/Notification;->toString()Ljava/lang/String;
-HPLandroid/app/Notification;->visibilityToString(I)Ljava/lang/String;
-HPLandroid/app/Notification;->visitUris(Ljava/util/function/Consumer;)V
 HSPLandroid/app/Notification;->writeToParcel(Landroid/os/Parcel;I)V
 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>(Ljava/lang/String;Ljava/lang/CharSequence;I)V
-HSPLandroid/app/NotificationChannel;->canBubble()Z
-HSPLandroid/app/NotificationChannel;->canBypassDnd()Z
-HSPLandroid/app/NotificationChannel;->canShowBadge()Z
-HPLandroid/app/NotificationChannel;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLandroid/app/NotificationChannel;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLandroid/app/NotificationChannel;->enableLights(Z)V
 HSPLandroid/app/NotificationChannel;->enableVibration(Z)V
-HSPLandroid/app/NotificationChannel;->equals(Ljava/lang/Object;)Z
-HSPLandroid/app/NotificationChannel;->getAudioAttributes()Landroid/media/AudioAttributes;
-HSPLandroid/app/NotificationChannel;->getDescription()Ljava/lang/String;
 HSPLandroid/app/NotificationChannel;->getGroup()Ljava/lang/String;
 HSPLandroid/app/NotificationChannel;->getId()Ljava/lang/String;
 HSPLandroid/app/NotificationChannel;->getImportance()I
-HSPLandroid/app/NotificationChannel;->getLightColor()I
 HSPLandroid/app/NotificationChannel;->getLockscreenVisibility()I
 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;->getUserLockedFields()I
-HSPLandroid/app/NotificationChannel;->getVibrationPattern()[J
-PLandroid/app/NotificationChannel;->hasUserSetImportance()Z
-HSPLandroid/app/NotificationChannel;->hashCode()I
-HSPLandroid/app/NotificationChannel;->isBlockableSystem()Z
-HSPLandroid/app/NotificationChannel;->isDeleted()Z
-HSPLandroid/app/NotificationChannel;->isFgServiceShown()Z
-HSPLandroid/app/NotificationChannel;->lockFields(I)V
-HSPLandroid/app/NotificationChannel;->longArrayToString([J)Ljava/lang/String;
-PLandroid/app/NotificationChannel;->populateFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
-HSPLandroid/app/NotificationChannel;->populateFromXml(Lorg/xmlpull/v1/XmlPullParser;ZLandroid/content/Context;)V
-HSPLandroid/app/NotificationChannel;->safeAudioAttributes(Lorg/xmlpull/v1/XmlPullParser;)Landroid/media/AudioAttributes;
-HSPLandroid/app/NotificationChannel;->safeBool(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Z)Z
-HSPLandroid/app/NotificationChannel;->safeInt(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
-HSPLandroid/app/NotificationChannel;->safeLongArray(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[J)[J
-HSPLandroid/app/NotificationChannel;->safeUri(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/app/NotificationChannel;->setAllowBubbles(Z)V
 HSPLandroid/app/NotificationChannel;->setBlockableSystem(Z)V
-HSPLandroid/app/NotificationChannel;->setBypassDnd(Z)V
-HSPLandroid/app/NotificationChannel;->setDeleted(Z)V
 HSPLandroid/app/NotificationChannel;->setDescription(Ljava/lang/String;)V
-HSPLandroid/app/NotificationChannel;->setFgServiceShown(Z)V
 HSPLandroid/app/NotificationChannel;->setGroup(Ljava/lang/String;)V
-PLandroid/app/NotificationChannel;->setImportance(I)V
-HSPLandroid/app/NotificationChannel;->setImportanceLockedByCriticalDeviceFunction(Z)V
-HSPLandroid/app/NotificationChannel;->setImportanceLockedByOEM(Z)V
-HSPLandroid/app/NotificationChannel;->setLightColor(I)V
-HSPLandroid/app/NotificationChannel;->setLockscreenVisibility(I)V
-PLandroid/app/NotificationChannel;->setName(Ljava/lang/CharSequence;)V
-HSPLandroid/app/NotificationChannel;->setOriginalImportance(I)V
 HSPLandroid/app/NotificationChannel;->setShowBadge(Z)V
 HSPLandroid/app/NotificationChannel;->setSound(Landroid/net/Uri;Landroid/media/AudioAttributes;)V
-HSPLandroid/app/NotificationChannel;->setVibrationPattern([J)V
-HSPLandroid/app/NotificationChannel;->shouldShowLights()Z
-HSPLandroid/app/NotificationChannel;->shouldVibrate()Z
-PLandroid/app/NotificationChannel;->toJson()Lorg/json/JSONObject;
-HPLandroid/app/NotificationChannel;->toString()Ljava/lang/String;
-HSPLandroid/app/NotificationChannel;->tryParseInt(Ljava/lang/String;I)I
 HSPLandroid/app/NotificationChannel;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/NotificationChannel;->writeXml(Lorg/xmlpull/v1/XmlSerializer;)V
-HSPLandroid/app/NotificationChannel;->writeXml(Lorg/xmlpull/v1/XmlSerializer;ZLandroid/content/Context;)V
 HSPLandroid/app/NotificationChannelGroup$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/NotificationChannelGroup;
 HSPLandroid/app/NotificationChannelGroup$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/NotificationChannelGroup;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/NotificationChannelGroup;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;)V
-HPLandroid/app/NotificationChannelGroup;->addChannel(Landroid/app/NotificationChannel;)V
-HPLandroid/app/NotificationChannelGroup;->clone()Landroid/app/NotificationChannelGroup;
-HPLandroid/app/NotificationChannelGroup;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLandroid/app/NotificationChannelGroup;->equals(Ljava/lang/Object;)Z
-HSPLandroid/app/NotificationChannelGroup;->getChannels()Ljava/util/List;
-HSPLandroid/app/NotificationChannelGroup;->getDescription()Ljava/lang/String;
 HSPLandroid/app/NotificationChannelGroup;->getId()Ljava/lang/String;
-HSPLandroid/app/NotificationChannelGroup;->getName()Ljava/lang/CharSequence;
 HSPLandroid/app/NotificationChannelGroup;->getTrimmedString(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/app/NotificationChannelGroup;->getUserLockedFields()I
-HSPLandroid/app/NotificationChannelGroup;->hashCode()I
 HSPLandroid/app/NotificationChannelGroup;->isBlocked()Z
-PLandroid/app/NotificationChannelGroup;->lockFields(I)V
-HSPLandroid/app/NotificationChannelGroup;->populateFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
-HSPLandroid/app/NotificationChannelGroup;->safeBool(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Z)Z
-HSPLandroid/app/NotificationChannelGroup;->setBlocked(Z)V
-PLandroid/app/NotificationChannelGroup;->setChannels(Ljava/util/List;)V
-HSPLandroid/app/NotificationChannelGroup;->setDescription(Ljava/lang/String;)V
-PLandroid/app/NotificationChannelGroup;->toJson()Lorg/json/JSONObject;
-HPLandroid/app/NotificationChannelGroup;->toString()Ljava/lang/String;
-PLandroid/app/NotificationChannelGroup;->unlockFields(I)V
 HSPLandroid/app/NotificationChannelGroup;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/NotificationChannelGroup;->writeXml(Lorg/xmlpull/v1/XmlSerializer;)V
-HPLandroid/app/NotificationHistory$HistoricalNotification$Builder;-><init>()V
-HPLandroid/app/NotificationHistory$HistoricalNotification$Builder;->build()Landroid/app/NotificationHistory$HistoricalNotification;
-HPLandroid/app/NotificationHistory$HistoricalNotification$Builder;->setChannelId(Ljava/lang/String;)Landroid/app/NotificationHistory$HistoricalNotification$Builder;
-HPLandroid/app/NotificationHistory$HistoricalNotification$Builder;->setChannelName(Ljava/lang/String;)Landroid/app/NotificationHistory$HistoricalNotification$Builder;
-HPLandroid/app/NotificationHistory$HistoricalNotification$Builder;->setIcon(Landroid/graphics/drawable/Icon;)Landroid/app/NotificationHistory$HistoricalNotification$Builder;
-HPLandroid/app/NotificationHistory$HistoricalNotification$Builder;->setPackage(Ljava/lang/String;)Landroid/app/NotificationHistory$HistoricalNotification$Builder;
-HPLandroid/app/NotificationHistory$HistoricalNotification$Builder;->setPostedTimeMs(J)Landroid/app/NotificationHistory$HistoricalNotification$Builder;
-HPLandroid/app/NotificationHistory$HistoricalNotification$Builder;->setText(Ljava/lang/String;)Landroid/app/NotificationHistory$HistoricalNotification$Builder;
-HPLandroid/app/NotificationHistory$HistoricalNotification$Builder;->setTitle(Ljava/lang/String;)Landroid/app/NotificationHistory$HistoricalNotification$Builder;
-HPLandroid/app/NotificationHistory$HistoricalNotification$Builder;->setUid(I)Landroid/app/NotificationHistory$HistoricalNotification$Builder;
-HPLandroid/app/NotificationHistory$HistoricalNotification;-><init>()V
-PLandroid/app/NotificationHistory$HistoricalNotification;-><init>(Landroid/app/NotificationHistory$1;)V
-PLandroid/app/NotificationHistory$HistoricalNotification;->access$102(Landroid/app/NotificationHistory$HistoricalNotification;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/app/NotificationHistory$HistoricalNotification;->access$202(Landroid/app/NotificationHistory$HistoricalNotification;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/app/NotificationHistory$HistoricalNotification;->access$302(Landroid/app/NotificationHistory$HistoricalNotification;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/app/NotificationHistory$HistoricalNotification;->access$402(Landroid/app/NotificationHistory$HistoricalNotification;I)I
-PLandroid/app/NotificationHistory$HistoricalNotification;->access$502(Landroid/app/NotificationHistory$HistoricalNotification;I)I
-PLandroid/app/NotificationHistory$HistoricalNotification;->access$602(Landroid/app/NotificationHistory$HistoricalNotification;J)J
-PLandroid/app/NotificationHistory$HistoricalNotification;->access$702(Landroid/app/NotificationHistory$HistoricalNotification;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/app/NotificationHistory$HistoricalNotification;->access$802(Landroid/app/NotificationHistory$HistoricalNotification;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/app/NotificationHistory$HistoricalNotification;->access$902(Landroid/app/NotificationHistory$HistoricalNotification;Landroid/graphics/drawable/Icon;)Landroid/graphics/drawable/Icon;
-PLandroid/app/NotificationHistory$HistoricalNotification;->getUserId()I
-HSPLandroid/app/NotificationManager$Policy$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/NotificationManager$Policy;
-HSPLandroid/app/NotificationManager$Policy$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/NotificationManager$Policy;-><init>(IIIII)V
 HSPLandroid/app/NotificationManager$Policy;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/app/NotificationManager$Policy;->allowAlarms()Z
-HSPLandroid/app/NotificationManager$Policy;->allowCalls()Z
-PLandroid/app/NotificationManager$Policy;->allowCallsFrom()I
-PLandroid/app/NotificationManager$Policy;->allowEvents()Z
-HSPLandroid/app/NotificationManager$Policy;->allowMedia()Z
-PLandroid/app/NotificationManager$Policy;->allowMessages()Z
-HSPLandroid/app/NotificationManager$Policy;->allowRepeatCallers()Z
-HSPLandroid/app/NotificationManager$Policy;->allowSystem()Z
-HSPLandroid/app/NotificationManager$Policy;->areAllVisualEffectsSuppressed(I)Z
-PLandroid/app/NotificationManager$Policy;->bitwiseToProtoEnum(Landroid/util/proto/ProtoOutputStream;JI)V
-HSPLandroid/app/NotificationManager$Policy;->copy()Landroid/app/NotificationManager$Policy;
-PLandroid/app/NotificationManager$Policy;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLandroid/app/NotificationManager$Policy;->effectToString(I)Ljava/lang/String;
-HSPLandroid/app/NotificationManager$Policy;->equals(Ljava/lang/Object;)Z
-HSPLandroid/app/NotificationManager$Policy;->hashCode()I
-HSPLandroid/app/NotificationManager$Policy;->priorityCategoriesToString(I)Ljava/lang/String;
-HSPLandroid/app/NotificationManager$Policy;->priorityCategoryToString(I)Ljava/lang/String;
-HSPLandroid/app/NotificationManager$Policy;->prioritySendersToString(I)Ljava/lang/String;
-HSPLandroid/app/NotificationManager$Policy;->suppressedEffectsToString(I)Ljava/lang/String;
-HSPLandroid/app/NotificationManager$Policy;->suppressedVisualEffectsEqual(II)Z
-HSPLandroid/app/NotificationManager$Policy;->toString()Ljava/lang/String;
-HSPLandroid/app/NotificationManager$Policy;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/NotificationManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLandroid/app/NotificationManager;->areNotificationsEnabled()Z
 HSPLandroid/app/NotificationManager;->cancel(I)V
 HSPLandroid/app/NotificationManager;->cancel(Ljava/lang/String;I)V
-HSPLandroid/app/NotificationManager;->cancelAll()V
 HSPLandroid/app/NotificationManager;->cancelAsUser(Ljava/lang/String;ILandroid/os/UserHandle;)V
 HSPLandroid/app/NotificationManager;->createNotificationChannel(Landroid/app/NotificationChannel;)V
 HSPLandroid/app/NotificationManager;->createNotificationChannelGroup(Landroid/app/NotificationChannelGroup;)V
 HSPLandroid/app/NotificationManager;->createNotificationChannelGroups(Ljava/util/List;)V
 HSPLandroid/app/NotificationManager;->createNotificationChannels(Ljava/util/List;)V
 HSPLandroid/app/NotificationManager;->deleteNotificationChannel(Ljava/lang/String;)V
-PLandroid/app/NotificationManager;->fixLegacySmallIcon(Landroid/app/Notification;Ljava/lang/String;)V
+HSPLandroid/app/NotificationManager;->fixLegacySmallIcon(Landroid/app/Notification;Ljava/lang/String;)V
 HSPLandroid/app/NotificationManager;->fixNotification(Landroid/app/Notification;)Landroid/app/Notification;
-PLandroid/app/NotificationManager;->from(Landroid/content/Context;)Landroid/app/NotificationManager;
 HSPLandroid/app/NotificationManager;->getActiveNotifications()[Landroid/service/notification/StatusBarNotification;
-HSPLandroid/app/NotificationManager;->getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;
-HSPLandroid/app/NotificationManager;->getAutomaticZenRules()Ljava/util/Map;
-HSPLandroid/app/NotificationManager;->getConsolidatedNotificationPolicy()Landroid/app/NotificationManager$Policy;
-HSPLandroid/app/NotificationManager;->getCurrentInterruptionFilter()I
 HSPLandroid/app/NotificationManager;->getNotificationChannel(Ljava/lang/String;)Landroid/app/NotificationChannel;
-HSPLandroid/app/NotificationManager;->getNotificationChannelGroup(Ljava/lang/String;)Landroid/app/NotificationChannelGroup;
-HSPLandroid/app/NotificationManager;->getNotificationChannelGroups()Ljava/util/List;
 HSPLandroid/app/NotificationManager;->getNotificationChannels()Ljava/util/List;
-HSPLandroid/app/NotificationManager;->getNotificationPolicy()Landroid/app/NotificationManager$Policy;
 HSPLandroid/app/NotificationManager;->getService()Landroid/app/INotificationManager;
-HSPLandroid/app/NotificationManager;->getZenMode()I
-HPLandroid/app/NotificationManager;->getZenModeConfig()Landroid/service/notification/ZenModeConfig;
-HSPLandroid/app/NotificationManager;->isNotificationPolicyAccessGranted()Z
-HSPLandroid/app/NotificationManager;->notify(ILandroid/app/Notification;)V
 HSPLandroid/app/NotificationManager;->notify(Ljava/lang/String;ILandroid/app/Notification;)V
 HSPLandroid/app/NotificationManager;->notifyAsUser(Ljava/lang/String;ILandroid/app/Notification;Landroid/os/UserHandle;)V
-HPLandroid/app/NotificationManager;->setZenMode(ILandroid/net/Uri;Ljava/lang/String;)V
-PLandroid/app/NotificationManager;->silenceNotificationSound()V
-HSPLandroid/app/NotificationManager;->updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;)Z
-PLandroid/app/NotificationManager;->zenModeFromInterruptionFilter(II)I
 HSPLandroid/app/NotificationManager;->zenModeToInterruptionFilter(I)I
 HSPLandroid/app/PendingIntent$2;->createFromParcel(Landroid/os/Parcel;)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/PendingIntent$CanceledException;-><init>()V
-HSPLandroid/app/PendingIntent$FinishedDispatcher;-><init>(Landroid/app/PendingIntent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;)V
-HPLandroid/app/PendingIntent$FinishedDispatcher;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
-HPLandroid/app/PendingIntent$FinishedDispatcher;->run()V
 HSPLandroid/app/PendingIntent;-><init>(Landroid/content/IIntentSender;)V
-PLandroid/app/PendingIntent;-><init>(Landroid/os/IBinder;Ljava/lang/Object;)V
+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;->describeContents()I
-HPLandroid/app/PendingIntent;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 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;->getActivity(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->getActivity(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/PendingIntent;
-HSPLandroid/app/PendingIntent;->getActivityAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->getBroadcast(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->getBroadcastAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/UserHandle;)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->getCreatorPackage()Ljava/lang/String;
-HSPLandroid/app/PendingIntent;->getCreatorUid()I
-HPLandroid/app/PendingIntent;->getCreatorUserHandle()Landroid/os/UserHandle;
-PLandroid/app/PendingIntent;->getIntent()Landroid/content/Intent;
-HPLandroid/app/PendingIntent;->getIntentSender()Landroid/content/IntentSender;
 HSPLandroid/app/PendingIntent;->getService(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
-HSPLandroid/app/PendingIntent;->getTag(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/app/PendingIntent;->getTarget()Landroid/content/IIntentSender;
-HSPLandroid/app/PendingIntent;->getTargetPackage()Ljava/lang/String;
 HSPLandroid/app/PendingIntent;->hashCode()I
 HSPLandroid/app/PendingIntent;->isActivity()Z
-HPLandroid/app/PendingIntent;->isBroadcast()Z
-HPLandroid/app/PendingIntent;->isForegroundService()Z
-PLandroid/app/PendingIntent;->readPendingIntentOrNullFromParcel(Landroid/os/Parcel;)Landroid/app/PendingIntent;
-HPLandroid/app/PendingIntent;->registerCancelListener(Landroid/app/PendingIntent$CancelListener;)V
-HSPLandroid/app/PendingIntent;->send()V
-HSPLandroid/app/PendingIntent;->send(Landroid/content/Context;ILandroid/content/Intent;)V
-HPLandroid/app/PendingIntent;->send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;)V
 HSPLandroid/app/PendingIntent;->send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;)V
 HSPLandroid/app/PendingIntent;->sendAndReturnResult(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;)I
-PLandroid/app/PendingIntent;->setOnMarshaledListener(Landroid/app/PendingIntent$OnMarshaledListener;)V
-HSPLandroid/app/PendingIntent;->toString()Ljava/lang/String;
-HPLandroid/app/PendingIntent;->unregisterCancelListener(Landroid/app/PendingIntent$CancelListener;)V
-HSPLandroid/app/PendingIntent;->writePendingIntentOrNullToParcel(Landroid/app/PendingIntent;Landroid/os/Parcel;)V
+HSPLandroid/app/PendingIntent;->setOnMarshaledListener(Landroid/app/PendingIntent$OnMarshaledListener;)V
 HSPLandroid/app/PendingIntent;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/app/Person$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/Person;
-HPLandroid/app/Person$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/Person$Builder;-><init>()V
-HPLandroid/app/Person$Builder;-><init>(Landroid/app/Person;)V
-HPLandroid/app/Person$Builder;-><init>(Landroid/app/Person;Landroid/app/Person$1;)V
-HSPLandroid/app/Person$Builder;->build()Landroid/app/Person;
-HSPLandroid/app/Person$Builder;->setBot(Z)Landroid/app/Person$Builder;
-HSPLandroid/app/Person$Builder;->setIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Person$Builder;
-HSPLandroid/app/Person$Builder;->setImportant(Z)Landroid/app/Person$Builder;
-HSPLandroid/app/Person$Builder;->setKey(Ljava/lang/String;)Landroid/app/Person$Builder;
-HSPLandroid/app/Person$Builder;->setName(Ljava/lang/CharSequence;)Landroid/app/Person$Builder;
-HSPLandroid/app/Person$Builder;->setUri(Ljava/lang/String;)Landroid/app/Person$Builder;
+HSPLandroid/app/Person$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/Person;
+HSPLandroid/app/Person$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/Person;-><init>(Landroid/app/Person$Builder;)V
-HPLandroid/app/Person;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/Person;-><init>(Landroid/os/Parcel;Landroid/app/Person$1;)V
-HPLandroid/app/Person;->access$1000(Landroid/app/Person;)Ljava/lang/String;
-HPLandroid/app/Person;->access$1100(Landroid/app/Person;)Z
-HPLandroid/app/Person;->access$1200(Landroid/app/Person;)Z
-HPLandroid/app/Person;->access$700(Landroid/app/Person;)Ljava/lang/CharSequence;
-HPLandroid/app/Person;->access$800(Landroid/app/Person;)Landroid/graphics/drawable/Icon;
-HPLandroid/app/Person;->access$900(Landroid/app/Person;)Ljava/lang/String;
-HPLandroid/app/Person;->equals(Ljava/lang/Object;)Z
-HPLandroid/app/Person;->getIcon()Landroid/graphics/drawable/Icon;
-PLandroid/app/Person;->getKey()Ljava/lang/String;
-HSPLandroid/app/Person;->getName()Ljava/lang/CharSequence;
-PLandroid/app/Person;->hashCode()I
-HPLandroid/app/Person;->toBuilder()Landroid/app/Person$Builder;
+HSPLandroid/app/Person;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/Person;-><init>(Landroid/os/Parcel;Landroid/app/Person$1;)V
 HSPLandroid/app/Person;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/app/PictureInPictureParams$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/PictureInPictureParams;
-HPLandroid/app/PictureInPictureParams$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/PictureInPictureParams$Builder;-><init>()V
-PLandroid/app/PictureInPictureParams$Builder;->build()Landroid/app/PictureInPictureParams;
-HPLandroid/app/PictureInPictureParams$Builder;->setActions(Ljava/util/List;)Landroid/app/PictureInPictureParams$Builder;
-HPLandroid/app/PictureInPictureParams$Builder;->setAspectRatio(Landroid/util/Rational;)Landroid/app/PictureInPictureParams$Builder;
-HPLandroid/app/PictureInPictureParams;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/PictureInPictureParams;-><init>(Landroid/util/Rational;Ljava/util/List;Landroid/graphics/Rect;)V
-HPLandroid/app/PictureInPictureParams;->copyOnlySet(Landroid/app/PictureInPictureParams;)V
-PLandroid/app/PictureInPictureParams;->hasSetActions()Z
-PLandroid/app/PictureInPictureParams;->hasSetAspectRatio()Z
-PLandroid/app/PictureInPictureParams;->hasSourceBoundsHint()Z
-HPLandroid/app/PictureInPictureParams;->truncateActions(I)V
-HPLandroid/app/PictureInPictureParams;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/ProcessMemoryState$1;-><init>()V
-PLandroid/app/ProcessMemoryState;-><clinit>()V
-HPLandroid/app/ProcessMemoryState;-><init>(IILjava/lang/String;I)V
+HSPLandroid/app/PropertyInvalidatedCache$1;-><init>(Landroid/app/PropertyInvalidatedCache;IFZI)V
+HSPLandroid/app/PropertyInvalidatedCache$1;->removeEldestEntry(Ljava/util/Map$Entry;)Z
+HSPLandroid/app/PropertyInvalidatedCache;-><init>(ILjava/lang/String;)V
+HSPLandroid/app/PropertyInvalidatedCache;->getCurrentNonce()J
+HSPLandroid/app/PropertyInvalidatedCache;->maybeCheckConsistency(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/app/PropertyInvalidatedCache;->query(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/app/PropertyInvalidatedCache;->refresh(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/app/QueuedWork$QueuedWorkHandler;-><init>(Landroid/os/Looper;)V
 HSPLandroid/app/QueuedWork$QueuedWorkHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/app/QueuedWork;->access$000()V
@@ -3276,49 +1788,24 @@
 HSPLandroid/app/QueuedWork;->removeFinisher(Ljava/lang/Runnable;)V
 HSPLandroid/app/QueuedWork;->waitToFinish()V
 HSPLandroid/app/ReceiverRestrictedContext;-><init>(Landroid/content/Context;)V
-HSPLandroid/app/ReceiverRestrictedContext;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
-HSPLandroid/app/ReceiverRestrictedContext;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;
-PLandroid/app/RemoteAction$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/RemoteAction;
-PLandroid/app/RemoteAction$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/RemoteAction;-><init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V
-HPLandroid/app/RemoteAction;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/RemoteAction;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-HPLandroid/app/RemoteAction;->getActionIntent()Landroid/app/PendingIntent;
-HPLandroid/app/RemoteAction;->getContentDescription()Ljava/lang/CharSequence;
-HPLandroid/app/RemoteAction;->getIcon()Landroid/graphics/drawable/Icon;
-HPLandroid/app/RemoteAction;->getTitle()Ljava/lang/CharSequence;
-HPLandroid/app/RemoteAction;->isEnabled()Z
-HPLandroid/app/RemoteAction;->shouldShowIcon()Z
-HSPLandroid/app/RemoteAction;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/RemoteInput$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/RemoteInput;
-PLandroid/app/RemoteInput$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/RemoteInput$1;->newArray(I)[Landroid/app/RemoteInput;
-PLandroid/app/RemoteInput$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/app/RemoteInput$Builder;-><init>(Ljava/lang/String;)V
-HSPLandroid/app/RemoteInput$Builder;->addExtras(Landroid/os/Bundle;)Landroid/app/RemoteInput$Builder;
-HSPLandroid/app/RemoteInput$Builder;->build()Landroid/app/RemoteInput;
-HSPLandroid/app/RemoteInput$Builder;->setAllowFreeFormInput(Z)Landroid/app/RemoteInput$Builder;
-HSPLandroid/app/RemoteInput$Builder;->setChoices([Ljava/lang/CharSequence;)Landroid/app/RemoteInput$Builder;
-HSPLandroid/app/RemoteInput$Builder;->setFlag(IZ)V
-HSPLandroid/app/RemoteInput$Builder;->setLabel(Ljava/lang/CharSequence;)Landroid/app/RemoteInput$Builder;
-PLandroid/app/RemoteInput;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/RemoteInput;-><init>(Landroid/os/Parcel;Landroid/app/RemoteInput$1;)V
-HSPLandroid/app/RemoteInput;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;[Ljava/lang/CharSequence;IILandroid/os/Bundle;Landroid/util/ArraySet;)V
-HSPLandroid/app/RemoteInput;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;[Ljava/lang/CharSequence;IILandroid/os/Bundle;Landroid/util/ArraySet;Landroid/app/RemoteInput$1;)V
-HSPLandroid/app/RemoteInput;->getAllowFreeFormInput()Z
-HSPLandroid/app/RemoteInput;->getChoices()[Ljava/lang/CharSequence;
-HSPLandroid/app/RemoteInput;->getEditChoicesBeforeSending()I
-HSPLandroid/app/RemoteInput;->isDataOnly()Z
-HSPLandroid/app/RemoteInput;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/RemoteInput$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/RemoteInput;
+HSPLandroid/app/RemoteInput$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/RemoteInput$1;->newArray(I)[Landroid/app/RemoteInput;
+HSPLandroid/app/RemoteInput$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/app/RemoteInput;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/RemoteInput;-><init>(Landroid/os/Parcel;Landroid/app/RemoteInput$1;)V
+HSPLandroid/app/ResourcesManager$ActivityResources;-><init>()V
+HSPLandroid/app/ResourcesManager$ActivityResources;-><init>(Landroid/app/ResourcesManager$1;)V
 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$UpdateHandler;-><init>(Landroid/app/ResourcesManager;)V
+HSPLandroid/app/ResourcesManager$UpdateHandler;-><init>(Landroid/app/ResourcesManager;Landroid/app/ResourcesManager$1;)V
 HSPLandroid/app/ResourcesManager;-><init>()V
-HSPLandroid/app/ResourcesManager;->appendLibAssetsForMainAssetPath(Ljava/lang/String;[Ljava/lang/String;)V
 HSPLandroid/app/ResourcesManager;->applyCompatConfigurationLocked(ILandroid/content/res/Configuration;)Z
 HSPLandroid/app/ResourcesManager;->applyConfigurationToResourcesLocked(Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)Z
+HSPLandroid/app/ResourcesManager;->applyConfigurationToResourcesLocked(Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;Landroid/content/res/ResourcesKey;Landroid/content/res/ResourcesImpl;)V
 HSPLandroid/app/ResourcesManager;->applyConfigurationToResourcesLocked(Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/ResourcesKey;Landroid/content/res/ResourcesImpl;)V
-HSPLandroid/app/ResourcesManager;->applyNewResourceDirsLocked(Landroid/content/pm/ApplicationInfo;[Ljava/lang/String;)V
 HSPLandroid/app/ResourcesManager;->cleanupReferences(Landroid/os/IBinder;)V
 HSPLandroid/app/ResourcesManager;->createAssetManager(Landroid/content/res/ResourcesKey;)Landroid/content/res/AssetManager;
 HSPLandroid/app/ResourcesManager;->createBaseActivityResources(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;)Landroid/content/res/Resources;
@@ -3326,7 +1813,6 @@
 HSPLandroid/app/ResourcesManager;->createResourcesForActivityLocked(Landroid/os/IBinder;Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;
 HSPLandroid/app/ResourcesManager;->createResourcesImpl(Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;
 HSPLandroid/app/ResourcesManager;->createResourcesLocked(Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;
-HPLandroid/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;->findResourcesForActivityLocked(Landroid/os/IBinder;Landroid/content/res/ResourcesKey;Ljava/lang/ClassLoader;)Landroid/content/res/Resources;
 HSPLandroid/app/ResourcesManager;->findResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;
@@ -3339,49 +1825,23 @@
 HSPLandroid/app/ResourcesManager;->getInstance()Landroid/app/ResourcesManager;
 HSPLandroid/app/ResourcesManager;->getOrCreateActivityResourcesStructLocked(Landroid/os/IBinder;)Landroid/app/ResourcesManager$ActivityResources;
 HSPLandroid/app/ResourcesManager;->getResources(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;)Landroid/content/res/Resources;
+HSPLandroid/app/ResourcesManager;->getResources(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;Ljava/util/List;)Landroid/content/res/Resources;
 HSPLandroid/app/ResourcesManager;->isSameResourcesOverrideConfig(Landroid/os/IBinder;Landroid/content/res/Configuration;)Z
 HSPLandroid/app/ResourcesManager;->lambda$static$0(Ljava/lang/ref/WeakReference;)Z
 HSPLandroid/app/ResourcesManager;->loadApkAssets(Ljava/lang/String;ZZ)Landroid/content/res/ApkAssets;
 HSPLandroid/app/ResourcesManager;->overlayPathToIdmapPath(Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/app/ResourcesManager;->rebaseActivityOverrideConfig(Landroid/content/res/Resources;Landroid/content/res/Configuration;Landroid/content/res/Configuration;I)Landroid/content/res/ResourcesKey;
 HSPLandroid/app/ResourcesManager;->rebaseKeyForActivity(Landroid/os/IBinder;Landroid/content/res/ResourcesKey;)V
 HSPLandroid/app/ResourcesManager;->redirectResourcesToNewImplLocked(Landroid/util/ArrayMap;)V
 HSPLandroid/app/ResourcesManager;->updateResourcesForActivity(Landroid/os/IBinder;Landroid/content/res/Configuration;IZ)V
-HPLandroid/app/ResultInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ResultInfo;
-HPLandroid/app/ResultInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/app/ResultInfo;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/ResultInfo;-><init>(Ljava/lang/String;IILandroid/content/Intent;)V
-PLandroid/app/ResultInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/SearchManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
-HPLandroid/app/SearchManager;->getSearchableInfo(Landroid/content/ComponentName;)Landroid/app/SearchableInfo;
-HPLandroid/app/SearchManager;->stopSearch()V
-HPLandroid/app/SearchableInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/SearchableInfo;
-HPLandroid/app/SearchableInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/app/SearchableInfo;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;Landroid/content/ComponentName;)V
-HPLandroid/app/SearchableInfo;-><init>(Landroid/os/Parcel;)V
-HPLandroid/app/SearchableInfo;->createActivityContext(Landroid/content/Context;Landroid/content/ComponentName;)Landroid/content/Context;
-HPLandroid/app/SearchableInfo;->getActivityMetaData(Landroid/content/Context;Landroid/content/pm/ActivityInfo;I)Landroid/app/SearchableInfo;
-HPLandroid/app/SearchableInfo;->getActivityMetaData(Landroid/content/Context;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/ComponentName;)Landroid/app/SearchableInfo;
-HPLandroid/app/SearchableInfo;->getImeOptions()I
-HPLandroid/app/SearchableInfo;->getInputType()I
-PLandroid/app/SearchableInfo;->getSearchActivity()Landroid/content/ComponentName;
-HPLandroid/app/SearchableInfo;->getSuggestAuthority()Ljava/lang/String;
-HPLandroid/app/SearchableInfo;->getSuggestThreshold()I
-HPLandroid/app/SearchableInfo;->getVoiceSearchEnabled()Z
-HPLandroid/app/SearchableInfo;->getVoiceSearchLaunchRecognizer()Z
-HPLandroid/app/SearchableInfo;->getVoiceSearchLaunchWebSearch()Z
-PLandroid/app/SearchableInfo;->shouldIncludeInGlobalSearch()Z
-PLandroid/app/SearchableInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/Service;-><init>()V
 HSPLandroid/app/Service;->attach(Landroid/content/Context;Landroid/app/ActivityThread;Ljava/lang/String;Landroid/os/IBinder;Landroid/app/Application;Ljava/lang/Object;)V
 HSPLandroid/app/Service;->detachAndCleanUp()V
-PLandroid/app/Service;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLandroid/app/Service;->getApplication()Landroid/app/Application;
 HSPLandroid/app/Service;->getClassName()Ljava/lang/String;
 HSPLandroid/app/Service;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLandroid/app/Service;->onCreate()V
 HSPLandroid/app/Service;->onDestroy()V
-PLandroid/app/Service;->onLowMemory()V
+HPLandroid/app/Service;->onLowMemory()V
 HSPLandroid/app/Service;->onStart(Landroid/content/Intent;I)V
 HSPLandroid/app/Service;->onStartCommand(Landroid/content/Intent;II)I
 HSPLandroid/app/Service;->onTrimMemory(I)V
@@ -3391,13 +1851,10 @@
 HSPLandroid/app/Service;->stopForeground(Z)V
 HSPLandroid/app/Service;->stopSelf()V
 HSPLandroid/app/Service;->stopSelf(I)V
-HSPLandroid/app/Service;->stopSelfResult(I)Z
 HSPLandroid/app/ServiceConnectionLeaked;-><init>(Ljava/lang/String;)V
 HSPLandroid/app/ServiceStartArgs$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ServiceStartArgs;
 HSPLandroid/app/ServiceStartArgs$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/ServiceStartArgs;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/app/ServiceStartArgs;-><init>(ZIILandroid/content/Intent;)V
-HSPLandroid/app/ServiceStartArgs;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/SharedPreferencesImpl$1;-><init>(Landroid/app/SharedPreferencesImpl;Ljava/lang/String;)V
 HSPLandroid/app/SharedPreferencesImpl$1;->run()V
 HSPLandroid/app/SharedPreferencesImpl$2;-><init>(Landroid/app/SharedPreferencesImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;ZLjava/lang/Runnable;)V
@@ -3411,6 +1868,7 @@
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->clear()Landroid/content/SharedPreferences$Editor;
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->commit()Z
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->commitToMemory()Landroid/app/SharedPreferencesImpl$MemoryCommitResult;
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->lambda$notifyListeners$0$SharedPreferencesImpl$EditorImpl(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->notifyListeners(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V
 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;
@@ -3456,179 +1914,148 @@
 HSPLandroid/app/SharedPreferencesImpl;->startReloadIfChangedUnexpectedly()V
 HSPLandroid/app/SharedPreferencesImpl;->unregisterOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V
 HSPLandroid/app/SharedPreferencesImpl;->writeToFile(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Z)V
-PLandroid/app/StatsManager$StatsdDeathRecipient;-><init>(Landroid/app/StatsManager;)V
-PLandroid/app/StatsManager$StatsdDeathRecipient;-><init>(Landroid/app/StatsManager;Landroid/app/StatsManager$1;)V
-PLandroid/app/StatsManager;->addConfig(J[B)V
-PLandroid/app/StatsManager;->getIStatsdLocked()Landroid/os/IStatsd;
-PLandroid/app/StatsManager;->getRegisteredExperimentIds()[J
-PLandroid/app/StatsManager;->getReports(J)[B
-PLandroid/app/StatsManager;->getStatsMetadata()[B
-PLandroid/app/StatsManager;->setActiveConfigsChangedOperation(Landroid/app/PendingIntent;)[J
-PLandroid/app/StatsManager;->setFetchReportsOperation(Landroid/app/PendingIntent;J)V
 HSPLandroid/app/StatusBarManager;-><init>(Landroid/content/Context;)V
-HPLandroid/app/StatusBarManager;->disable(I)V
-HPLandroid/app/StatusBarManager;->getService()Lcom/android/internal/statusbar/IStatusBarService;
-PLandroid/app/StatusBarManager;->windowStateToString(I)Ljava/lang/String;
-HSPLandroid/app/SynchronousUserSwitchObserver;-><init>()V
-HSPLandroid/app/SystemServiceRegistry$101;->createService(Landroid/app/ContextImpl;)Landroid/permission/PermissionManager;
-HSPLandroid/app/SystemServiceRegistry$101;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$102;->createService(Landroid/app/ContextImpl;)Landroid/permission/PermissionControllerManager;
+HSPLandroid/app/SystemServiceRegistry$102;->createService(Landroid/app/ContextImpl;)Landroid/app/slice/SliceManager;
 HSPLandroid/app/SystemServiceRegistry$102;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$103;->createService(Landroid/app/ContextImpl;)Landroid/app/role/RoleManager;
 HSPLandroid/app/SystemServiceRegistry$103;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-PLandroid/app/SystemServiceRegistry$105;->createService(Landroid/app/ContextImpl;)Landroid/content/rollback/RollbackManager;
-PLandroid/app/SystemServiceRegistry$105;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$107;->createService(Landroid/app/ContextImpl;)Landroid/os/BatteryStatsManager;
+HSPLandroid/app/SystemServiceRegistry$105;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$107;->createService(Landroid/app/ContextImpl;)Landroid/app/role/RoleManager;
 HSPLandroid/app/SystemServiceRegistry$107;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$109;->createService()Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$10;->createService(Landroid/app/ContextImpl;)Landroid/bluetooth/BluetoothManager;
 HSPLandroid/app/SystemServiceRegistry$10;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$111;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$112;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$112;->createService()Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$114;->createService()Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$114;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$115;->createService()Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$115;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$116;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$117;->createService()Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$117;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$118;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$119;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$120;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$12;->createService(Landroid/app/ContextImpl;)Landroid/view/textclassifier/TextClassificationManager;
 HSPLandroid/app/SystemServiceRegistry$12;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$13;->createService(Landroid/app/ContextImpl;)Landroid/content/ClipboardManager;
 HSPLandroid/app/SystemServiceRegistry$13;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$14;->createService(Landroid/content/Context;)Landroid/net/ConnectivityManager;
 HSPLandroid/app/SystemServiceRegistry$14;->createService(Landroid/content/Context;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$15;->createService()Landroid/os/IBinder;
-HSPLandroid/app/SystemServiceRegistry$15;->createService()Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$18;->createService()Landroid/location/CountryDetector;
-HSPLandroid/app/SystemServiceRegistry$18;->createService()Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$19;->createService(Landroid/app/ContextImpl;)Landroid/app/admin/DevicePolicyManager;
-HSPLandroid/app/SystemServiceRegistry$19;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$1;->createService(Landroid/app/ContextImpl;)Landroid/view/accessibility/AccessibilityManager;
 HSPLandroid/app/SystemServiceRegistry$1;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$20;->createService(Landroid/app/ContextImpl;)Landroid/app/DownloadManager;
-HSPLandroid/app/SystemServiceRegistry$20;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$21;->createService(Landroid/app/ContextImpl;)Landroid/os/BatteryManager;
+HSPLandroid/app/SystemServiceRegistry$21;->createService(Landroid/app/ContextImpl;)Landroid/app/admin/DevicePolicyManager;
 HSPLandroid/app/SystemServiceRegistry$21;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$22;->createService(Landroid/app/ContextImpl;)Landroid/nfc/NfcManager;
 HSPLandroid/app/SystemServiceRegistry$22;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$23;->createService(Landroid/app/ContextImpl;)Landroid/os/DropBoxManager;
+HSPLandroid/app/SystemServiceRegistry$23;->createService(Landroid/app/ContextImpl;)Landroid/app/admin/DevicePolicyManager;
+HSPLandroid/app/SystemServiceRegistry$23;->createService(Landroid/app/ContextImpl;)Landroid/os/BatteryManager;
 HSPLandroid/app/SystemServiceRegistry$23;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$24;->createService()Landroid/hardware/input/InputManager;
-HSPLandroid/app/SystemServiceRegistry$24;->createService()Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$25;->createService(Landroid/app/ContextImpl;)Landroid/hardware/display/DisplayManager;
+HSPLandroid/app/SystemServiceRegistry$24;->createService(Landroid/app/ContextImpl;)Landroid/app/DownloadManager;
+HSPLandroid/app/SystemServiceRegistry$24;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$25;->createService(Landroid/app/ContextImpl;)Landroid/os/BatteryManager;
 HSPLandroid/app/SystemServiceRegistry$25;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$26;->createService(Landroid/app/ContextImpl;)Landroid/hardware/display/ColorDisplayManager;
 HSPLandroid/app/SystemServiceRegistry$26;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$27;->getService(Landroid/app/ContextImpl;)Landroid/view/inputmethod/InputMethodManager;
-HSPLandroid/app/SystemServiceRegistry$27;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$28;->createService(Landroid/app/ContextImpl;)Landroid/view/textservice/TextServicesManager;
-HSPLandroid/app/SystemServiceRegistry$28;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$29;->createService(Landroid/app/ContextImpl;)Landroid/app/KeyguardManager;
+HSPLandroid/app/SystemServiceRegistry$27;->createService(Landroid/app/ContextImpl;)Landroid/hardware/display/DisplayManager;
+HSPLandroid/app/SystemServiceRegistry$27;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$28;->createService()Landroid/hardware/input/InputManager;
+HSPLandroid/app/SystemServiceRegistry$28;->createService()Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$29;->createService(Landroid/app/ContextImpl;)Landroid/hardware/display/DisplayManager;
 HSPLandroid/app/SystemServiceRegistry$29;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$29;->getService(Landroid/app/ContextImpl;)Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/app/SystemServiceRegistry$29;->getService(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;->createService(Landroid/app/ContextImpl;)Landroid/view/LayoutInflater;
 HSPLandroid/app/SystemServiceRegistry$30;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$31;->createService(Landroid/app/ContextImpl;)Landroid/location/LocationManager;
+HSPLandroid/app/SystemServiceRegistry$31;->createService(Landroid/app/ContextImpl;)Landroid/app/KeyguardManager;
 HSPLandroid/app/SystemServiceRegistry$31;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$32;->createService(Landroid/app/ContextImpl;)Landroid/net/NetworkPolicyManager;
+HSPLandroid/app/SystemServiceRegistry$31;->getService(Landroid/app/ContextImpl;)Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/app/SystemServiceRegistry$31;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$32;->createService(Landroid/app/ContextImpl;)Landroid/view/LayoutInflater;
 HSPLandroid/app/SystemServiceRegistry$32;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$33;->createService(Landroid/app/ContextImpl;)Landroid/app/NotificationManager;
+HSPLandroid/app/SystemServiceRegistry$33;->createService(Landroid/app/ContextImpl;)Landroid/app/KeyguardManager;
+HSPLandroid/app/SystemServiceRegistry$33;->createService(Landroid/app/ContextImpl;)Landroid/location/LocationManager;
 HSPLandroid/app/SystemServiceRegistry$33;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$35;->createService(Landroid/app/ContextImpl;)Landroid/os/PowerManager;
+HSPLandroid/app/SystemServiceRegistry$34;->createService(Landroid/app/ContextImpl;)Landroid/app/NotificationManager;
+HSPLandroid/app/SystemServiceRegistry$34;->createService(Landroid/app/ContextImpl;)Landroid/view/LayoutInflater;
+HSPLandroid/app/SystemServiceRegistry$34;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$35;->createService(Landroid/app/ContextImpl;)Landroid/app/NotificationManager;
+HSPLandroid/app/SystemServiceRegistry$35;->createService(Landroid/app/ContextImpl;)Landroid/location/LocationManager;
 HSPLandroid/app/SystemServiceRegistry$35;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$37;->createService(Landroid/app/ContextImpl;)Landroid/app/SearchManager;
+HSPLandroid/app/SystemServiceRegistry$36;->createService(Landroid/app/ContextImpl;)Landroid/os/PowerManager;
+HSPLandroid/app/SystemServiceRegistry$36;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$37;->createService(Landroid/app/ContextImpl;)Landroid/app/NotificationManager;
+HSPLandroid/app/SystemServiceRegistry$37;->createService(Landroid/app/ContextImpl;)Landroid/os/PowerManager;
 HSPLandroid/app/SystemServiceRegistry$37;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$38;->createService(Landroid/app/ContextImpl;)Landroid/hardware/SensorManager;
-HSPLandroid/app/SystemServiceRegistry$38;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$39;->createService(Landroid/app/ContextImpl;)Landroid/os/PowerManager;
+HSPLandroid/app/SystemServiceRegistry$39;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$3;->createService(Landroid/app/ContextImpl;)Landroid/accounts/AccountManager;
 HSPLandroid/app/SystemServiceRegistry$3;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-PLandroid/app/SystemServiceRegistry$40;->createService(Landroid/app/ContextImpl;)Landroid/app/StatsManager;
-PLandroid/app/SystemServiceRegistry$40;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$41;->createService(Landroid/app/ContextImpl;)Landroid/app/StatusBarManager;
-HSPLandroid/app/SystemServiceRegistry$41;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$42;->createService(Landroid/app/ContextImpl;)Landroid/os/storage/StorageManager;
+HSPLandroid/app/SystemServiceRegistry$40;->createService(Landroid/app/ContextImpl;)Landroid/hardware/SensorManager;
+HSPLandroid/app/SystemServiceRegistry$40;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+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;)Landroid/app/usage/StorageStatsManager;
+HSPLandroid/app/SystemServiceRegistry$43;->createService(Landroid/app/ContextImpl;)Landroid/os/storage/StorageManager;
 HSPLandroid/app/SystemServiceRegistry$43;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$44;->createService(Landroid/app/ContextImpl;)Landroid/os/SystemUpdateManager;
+HSPLandroid/app/SystemServiceRegistry$44;->createService(Landroid/app/ContextImpl;)Landroid/os/storage/StorageManager;
 HSPLandroid/app/SystemServiceRegistry$44;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$45;->createService(Landroid/app/ContextImpl;)Landroid/telephony/TelephonyRegistryManager;
+HSPLandroid/app/SystemServiceRegistry$45;->createService(Landroid/app/ContextImpl;)Landroid/os/storage/StorageManager;
 HSPLandroid/app/SystemServiceRegistry$45;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$46;->createService(Landroid/app/ContextImpl;)Landroid/telecom/TelecomManager;
+HSPLandroid/app/SystemServiceRegistry$46;->createService(Landroid/app/ContextImpl;)Landroid/app/usage/StorageStatsManager;
 HSPLandroid/app/SystemServiceRegistry$46;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$47;->createService(Landroid/app/ContextImpl;)Landroid/app/UiModeManager;
 HSPLandroid/app/SystemServiceRegistry$47;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$48;->createService(Landroid/app/ContextImpl;)Landroid/hardware/usb/UsbManager;
 HSPLandroid/app/SystemServiceRegistry$48;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$49;->createService(Landroid/app/ContextImpl;)Landroid/telephony/TelephonyRegistryManager;
+HSPLandroid/app/SystemServiceRegistry$49;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$4;->createService(Landroid/app/ContextImpl;)Landroid/app/ActivityManager;
 HSPLandroid/app/SystemServiceRegistry$4;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$51;->createService(Landroid/app/ContextImpl;)Landroid/os/Vibrator;
+HSPLandroid/app/SystemServiceRegistry$50;->createService(Landroid/app/ContextImpl;)Landroid/telecom/TelecomManager;
+HSPLandroid/app/SystemServiceRegistry$50;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$51;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$52;->createService(Landroid/app/ContextImpl;)Landroid/app/WallpaperManager;
+HSPLandroid/app/SystemServiceRegistry$52;->createService(Landroid/app/ContextImpl;)Landroid/app/UiModeManager;
 HSPLandroid/app/SystemServiceRegistry$52;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$55;->createService(Landroid/app/ContextImpl;)Landroid/net/wifi/WifiCondManager;
-HSPLandroid/app/SystemServiceRegistry$55;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$56;->createService(Landroid/app/ContextImpl;)Landroid/view/WindowManager;
+HSPLandroid/app/SystemServiceRegistry$53;->createService(Landroid/app/ContextImpl;)Landroid/hardware/usb/UsbManager;
+HSPLandroid/app/SystemServiceRegistry$53;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$56;->createService(Landroid/app/ContextImpl;)Landroid/os/Vibrator;
 HSPLandroid/app/SystemServiceRegistry$56;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$57;->createService(Landroid/app/ContextImpl;)Landroid/os/UserManager;
+HSPLandroid/app/SystemServiceRegistry$57;->createService(Landroid/app/ContextImpl;)Landroid/view/WindowManager;
 HSPLandroid/app/SystemServiceRegistry$57;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$58;->createService(Landroid/app/ContextImpl;)Landroid/app/AppOpsManager;
+HSPLandroid/app/SystemServiceRegistry$58;->createService(Landroid/app/ContextImpl;)Landroid/os/UserManager;
 HSPLandroid/app/SystemServiceRegistry$58;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$59;->createService(Landroid/app/ContextImpl;)Landroid/hardware/camera2/CameraManager;
+HSPLandroid/app/SystemServiceRegistry$59;->createService(Landroid/app/ContextImpl;)Landroid/app/AppOpsManager;
+HSPLandroid/app/SystemServiceRegistry$59;->createService(Landroid/app/ContextImpl;)Landroid/view/WindowManager;
 HSPLandroid/app/SystemServiceRegistry$59;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$5;->createService(Landroid/app/ContextImpl;)Landroid/app/ActivityTaskManager;
-HSPLandroid/app/SystemServiceRegistry$5;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$60;->createService(Landroid/app/ContextImpl;)Landroid/content/pm/LauncherApps;
+HSPLandroid/app/SystemServiceRegistry$60;->createService(Landroid/app/ContextImpl;)Landroid/os/UserManager;
+HSPLandroid/app/SystemServiceRegistry$60;->createService(Landroid/app/ContextImpl;)Landroid/view/WindowManager;
 HSPLandroid/app/SystemServiceRegistry$60;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$61;->createService(Landroid/app/ContextImpl;)Landroid/content/RestrictionsManager;
+HSPLandroid/app/SystemServiceRegistry$61;->createService(Landroid/app/ContextImpl;)Landroid/app/AppOpsManager;
+HSPLandroid/app/SystemServiceRegistry$61;->createService(Landroid/app/ContextImpl;)Landroid/os/UserManager;
+HSPLandroid/app/SystemServiceRegistry$61;->createService(Landroid/app/ContextImpl;)Landroid/view/WindowManager;
 HSPLandroid/app/SystemServiceRegistry$61;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$62;->createService(Landroid/app/ContextImpl;)Landroid/print/PrintManager;
+HSPLandroid/app/SystemServiceRegistry$62;->createService(Landroid/app/ContextImpl;)Landroid/app/AppOpsManager;
+HSPLandroid/app/SystemServiceRegistry$62;->createService(Landroid/app/ContextImpl;)Landroid/os/UserManager;
 HSPLandroid/app/SystemServiceRegistry$62;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$65;->createService(Landroid/app/ContextImpl;)Landroid/media/session/MediaSessionManager;
-HSPLandroid/app/SystemServiceRegistry$65;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$66;->createService()Landroid/app/trust/TrustManager;
-HSPLandroid/app/SystemServiceRegistry$66;->createService()Ljava/lang/Object;
-HPLandroid/app/SystemServiceRegistry$67;->createService(Landroid/app/ContextImpl;)Landroid/hardware/fingerprint/FingerprintManager;
-HPLandroid/app/SystemServiceRegistry$67;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$68;->createService(Landroid/app/ContextImpl;)Landroid/hardware/face/FaceManager;
-HSPLandroid/app/SystemServiceRegistry$68;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-PLandroid/app/SystemServiceRegistry$70;->createService(Landroid/app/ContextImpl;)Landroid/hardware/biometrics/BiometricManager;
-PLandroid/app/SystemServiceRegistry$70;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$72;->createService(Landroid/app/ContextImpl;)Landroid/net/NetworkScoreManager;
-HSPLandroid/app/SystemServiceRegistry$72;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$73;->createService(Landroid/app/ContextImpl;)Landroid/app/usage/UsageStatsManager;
-HSPLandroid/app/SystemServiceRegistry$73;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$74;->createService(Landroid/app/ContextImpl;)Landroid/app/usage/NetworkStatsManager;
-HSPLandroid/app/SystemServiceRegistry$74;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$75;->createService()Landroid/service/persistentdata/PersistentDataBlockManager;
-HSPLandroid/app/SystemServiceRegistry$75;->createService()Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$76;->createService()Landroid/service/oemlock/OemLockManager;
-HSPLandroid/app/SystemServiceRegistry$76;->createService()Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$78;->createService(Landroid/app/ContextImpl;)Landroid/appwidget/AppWidgetManager;
+HSPLandroid/app/SystemServiceRegistry$63;->createService(Landroid/app/ContextImpl;)Landroid/app/AppOpsManager;
+HSPLandroid/app/SystemServiceRegistry$63;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$64;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$70;->createService(Landroid/app/ContextImpl;)Landroid/media/session/MediaSessionManager;
+HSPLandroid/app/SystemServiceRegistry$70;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$75;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$77;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$78;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$79;->createService(Landroid/app/ContextImpl;)Landroid/app/usage/NetworkStatsManager;
+HSPLandroid/app/SystemServiceRegistry$79;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$7;->createService(Landroid/app/ContextImpl;)Landroid/app/AlarmManager;
 HSPLandroid/app/SystemServiceRegistry$7;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HPLandroid/app/SystemServiceRegistry$81;->createService(Landroid/app/ContextImpl;)Landroid/os/HardwarePropertiesManager;
-HPLandroid/app/SystemServiceRegistry$81;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$83;->createService(Landroid/app/ContextImpl;)Landroid/content/pm/ShortcutManager;
+HSPLandroid/app/SystemServiceRegistry$83;->createService(Landroid/app/ContextImpl;)Landroid/appwidget/AppWidgetManager;
 HSPLandroid/app/SystemServiceRegistry$83;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HPLandroid/app/SystemServiceRegistry$86;->createService(Landroid/app/ContextImpl;)Landroid/os/health/SystemHealthManager;
-HPLandroid/app/SystemServiceRegistry$86;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$87;->createService(Landroid/app/ContextImpl;)Landroid/hardware/location/ContextHubManager;
-HSPLandroid/app/SystemServiceRegistry$87;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$88;->createService(Landroid/app/ContextImpl;)Landroid/os/IncidentManager;
+HSPLandroid/app/SystemServiceRegistry$88;->createService(Landroid/app/ContextImpl;)Landroid/content/pm/ShortcutManager;
 HSPLandroid/app/SystemServiceRegistry$88;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$8;->createService(Landroid/app/ContextImpl;)Landroid/media/AudioManager;
 HSPLandroid/app/SystemServiceRegistry$8;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$90;->createService(Landroid/app/ContextImpl;)Landroid/view/autofill/AutofillManager;
-HSPLandroid/app/SystemServiceRegistry$90;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$91;->createService(Landroid/app/ContextImpl;)Landroid/view/contentcapture/ContentCaptureManager;
 HSPLandroid/app/SystemServiceRegistry$91;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HPLandroid/app/SystemServiceRegistry$92;->createService(Landroid/app/ContextImpl;)Landroid/app/prediction/AppPredictionManager;
-HPLandroid/app/SystemServiceRegistry$92;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$96;->createService(Landroid/app/ContextImpl;)Landroid/content/pm/CrossProfileApps;
+HSPLandroid/app/SystemServiceRegistry$94;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$95;->createService(Landroid/app/ContextImpl;)Landroid/view/autofill/AutofillManager;
+HSPLandroid/app/SystemServiceRegistry$95;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$96;->createService(Landroid/app/ContextImpl;)Landroid/view/contentcapture/ContentCaptureManager;
 HSPLandroid/app/SystemServiceRegistry$96;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$97;->createService(Landroid/app/ContextImpl;)Landroid/app/slice/SliceManager;
-HSPLandroid/app/SystemServiceRegistry$97;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$98;->createService(Landroid/app/ContextImpl;)Landroid/app/timedetector/TimeDetector;
-HSPLandroid/app/SystemServiceRegistry$98;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$99;->createService(Landroid/app/ContextImpl;)Landroid/app/timezonedetector/TimeZoneDetector;
-HSPLandroid/app/SystemServiceRegistry$99;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$9;->createService(Landroid/app/ContextImpl;)Landroid/media/MediaRouter;
 HSPLandroid/app/SystemServiceRegistry$9;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$CachedServiceFetcher;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
@@ -3637,102 +2064,38 @@
 HSPLandroid/app/SystemServiceRegistry;->createServiceCache()[Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry;->getSystemService(Landroid/app/ContextImpl;Ljava/lang/String;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
-HPLandroid/app/TaskInfo;-><init>()V
+HSPLandroid/app/TaskInfo;-><init>()V
 HSPLandroid/app/TaskInfo;->readFromParcel(Landroid/os/Parcel;)V
-HPLandroid/app/TaskInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/TaskStackListener;-><init>()V
-PLandroid/app/TaskStackListener;->onActivityPinned(Ljava/lang/String;III)V
-PLandroid/app/TaskStackListener;->onActivityRequestedOrientationChanged(II)V
-PLandroid/app/TaskStackListener;->onActivityUnpinned()V
-PLandroid/app/TaskStackListener;->onPinnedStackAnimationEnded()V
-PLandroid/app/TaskStackListener;->onPinnedStackAnimationStarted()V
-PLandroid/app/TaskStackListener;->onRecentTaskListFrozenChanged(Z)V
-PLandroid/app/TaskStackListener;->onRecentTaskListUpdated()V
-HPLandroid/app/TaskStackListener;->onSizeCompatModeActivityChanged(ILandroid/os/IBinder;)V
-PLandroid/app/TaskStackListener;->onTaskCreated(ILandroid/content/ComponentName;)V
-PLandroid/app/TaskStackListener;->onTaskDescriptionChanged(ILandroid/app/ActivityManager$TaskDescription;)V
-PLandroid/app/TaskStackListener;->onTaskDescriptionChanged(Landroid/app/ActivityManager$RunningTaskInfo;)V
-HPLandroid/app/TaskStackListener;->onTaskDisplayChanged(II)V
-PLandroid/app/TaskStackListener;->onTaskMovedToFront(I)V
-PLandroid/app/TaskStackListener;->onTaskMovedToFront(Landroid/app/ActivityManager$RunningTaskInfo;)V
-PLandroid/app/TaskStackListener;->onTaskRemovalStarted(I)V
-PLandroid/app/TaskStackListener;->onTaskRemovalStarted(Landroid/app/ActivityManager$RunningTaskInfo;)V
-PLandroid/app/TaskStackListener;->onTaskRemoved(I)V
-PLandroid/app/TaskStackListener;->onTaskSnapshotChanged(ILandroid/app/ActivityManager$TaskSnapshot;)V
 HSPLandroid/app/UiModeManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/app/UiModeManager;->getCurrentModeType()I
-HSPLandroid/app/UiModeManager;->getNightMode()I
 HSPLandroid/app/UriGrantsManager$1;->create()Landroid/app/IUriGrantsManager;
 HSPLandroid/app/UriGrantsManager$1;->create()Ljava/lang/Object;
 HSPLandroid/app/UriGrantsManager;->getService()Landroid/app/IUriGrantsManager;
-HSPLandroid/app/UserSwitchObserver;-><init>()V
-PLandroid/app/UserSwitchObserver;->onForegroundProfileSwitch(I)V
-PLandroid/app/UserSwitchObserver;->onLockedBootComplete(I)V
 HSPLandroid/app/WallpaperColors$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/WallpaperColors;
 HSPLandroid/app/WallpaperColors$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/WallpaperColors;-><init>(Landroid/graphics/Color;Landroid/graphics/Color;Landroid/graphics/Color;I)V
 HSPLandroid/app/WallpaperColors;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/WallpaperColors;->getColorHints()I
 HSPLandroid/app/WallpaperColors;->getMainColors()Ljava/util/List;
-HSPLandroid/app/WallpaperColors;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/WallpaperManager$Globals;-><init>(Landroid/app/IWallpaperManager;Landroid/os/Looper;)V
-PLandroid/app/WallpaperManager$Globals;->access$200(Landroid/app/WallpaperManager$Globals;)Landroid/app/IWallpaperManager;
-HSPLandroid/app/WallpaperManager$Globals;->addOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;Landroid/os/Handler;II)V
+HSPLandroid/app/WallpaperManager$ColorManagementProxy;-><init>(Landroid/content/Context;)V
+HSPLandroid/app/WallpaperManager$Globals;-><init>(Landroid/app/IWallpaperManager;Landroid/os/Looper;)V
 HSPLandroid/app/WallpaperManager$Globals;->forgetLoadedWallpaper()V
-HPLandroid/app/WallpaperManager$Globals;->getCurrentWallpaperLocked(Landroid/content/Context;IZ)Landroid/graphics/Bitmap;
-HSPLandroid/app/WallpaperManager$Globals;->getWallpaperColors(III)Landroid/app/WallpaperColors;
-HPLandroid/app/WallpaperManager$Globals;->peekWallpaperBitmap(Landroid/content/Context;ZIIZ)Landroid/graphics/Bitmap;
 HSPLandroid/app/WallpaperManager;-><init>(Landroid/app/IWallpaperManager;Landroid/content/Context;Landroid/os/Handler;)V
-HSPLandroid/app/WallpaperManager;->addOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;Landroid/os/Handler;)V
-HSPLandroid/app/WallpaperManager;->addOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;Landroid/os/Handler;I)V
-HPLandroid/app/WallpaperManager;->forgetLoadedWallpaper()V
-HPLandroid/app/WallpaperManager;->getBitmap()Landroid/graphics/Bitmap;
-HPLandroid/app/WallpaperManager;->getBitmap(Z)Landroid/graphics/Bitmap;
-HPLandroid/app/WallpaperManager;->getBitmapAsUser(IZ)Landroid/graphics/Bitmap;
-HSPLandroid/app/WallpaperManager;->getDefaultWallpaperComponent(Landroid/content/Context;)Landroid/content/ComponentName;
-HSPLandroid/app/WallpaperManager;->getDesiredMinimumHeight()I
-HSPLandroid/app/WallpaperManager;->getDesiredMinimumWidth()I
-HSPLandroid/app/WallpaperManager;->getInstance(Landroid/content/Context;)Landroid/app/WallpaperManager;
-HSPLandroid/app/WallpaperManager;->getWallpaperColors(I)Landroid/app/WallpaperColors;
-HSPLandroid/app/WallpaperManager;->getWallpaperColors(II)Landroid/app/WallpaperColors;
-PLandroid/app/WallpaperManager;->getWallpaperFile(II)Landroid/os/ParcelFileDescriptor;
-PLandroid/app/WallpaperManager;->getWallpaperIdForUser(II)I
-HSPLandroid/app/WallpaperManager;->getWallpaperInfo()Landroid/app/WallpaperInfo;
-HSPLandroid/app/WallpaperManager;->getWallpaperInfo(I)Landroid/app/WallpaperInfo;
 HSPLandroid/app/WallpaperManager;->initGlobals(Landroid/app/IWallpaperManager;Landroid/os/Looper;)V
-HPLandroid/app/WallpaperManager;->isSetWallpaperAllowed()Z
-PLandroid/app/WallpaperManager;->isWallpaperBackupEligible(I)Z
-HPLandroid/app/WallpaperManager;->sendWallpaperCommand(Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;)V
-HSPLandroid/app/WallpaperManager;->setWallpaperOffsetSteps(FF)V
-HSPLandroid/app/WallpaperManager;->setWallpaperOffsets(Landroid/os/IBinder;FF)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
 HSPLandroid/app/WindowConfiguration;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/WindowConfiguration;-><init>(Landroid/os/Parcel;Landroid/app/WindowConfiguration$1;)V
-HSPLandroid/app/WindowConfiguration;->activityTypeToString(I)Ljava/lang/String;
-HSPLandroid/app/WindowConfiguration;->alwaysOnTopToString(I)Ljava/lang/String;
-HSPLandroid/app/WindowConfiguration;->canReceiveKeys()Z
-PLandroid/app/WindowConfiguration;->canResizeTask()Z
 HSPLandroid/app/WindowConfiguration;->compareTo(Landroid/app/WindowConfiguration;)I
 HSPLandroid/app/WindowConfiguration;->diff(Landroid/app/WindowConfiguration;Z)J
-HPLandroid/app/WindowConfiguration;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLandroid/app/WindowConfiguration;->equals(Ljava/lang/Object;)Z
-HSPLandroid/app/WindowConfiguration;->getActivityType()I
 HSPLandroid/app/WindowConfiguration;->getAppBounds()Landroid/graphics/Rect;
-HSPLandroid/app/WindowConfiguration;->getBounds()Landroid/graphics/Rect;
-PLandroid/app/WindowConfiguration;->getDisplayWindowingMode()I
-HSPLandroid/app/WindowConfiguration;->getRotation()I
 HSPLandroid/app/WindowConfiguration;->getWindowingMode()I
-PLandroid/app/WindowConfiguration;->hasMovementAnimations()Z
 HSPLandroid/app/WindowConfiguration;->hasWindowDecorCaption()Z
 HSPLandroid/app/WindowConfiguration;->hasWindowShadow()Z
-HSPLandroid/app/WindowConfiguration;->isAlwaysOnTop()Z
-PLandroid/app/WindowConfiguration;->isFloating(I)Z
-PLandroid/app/WindowConfiguration;->isSplitScreenWindowingMode(I)Z
-PLandroid/app/WindowConfiguration;->persistTaskBounds()Z
+HSPLandroid/app/WindowConfiguration;->isFloating(I)Z
 HSPLandroid/app/WindowConfiguration;->readFromParcel(Landroid/os/Parcel;)V
-HPLandroid/app/WindowConfiguration;->readFromProto(Landroid/util/proto/ProtoInputStream;J)V
 HSPLandroid/app/WindowConfiguration;->setActivityType(I)V
 HSPLandroid/app/WindowConfiguration;->setAlwaysOnTop(I)V
 HSPLandroid/app/WindowConfiguration;->setAppBounds(IIII)V
@@ -3743,639 +2106,86 @@
 HSPLandroid/app/WindowConfiguration;->setTo(Landroid/app/WindowConfiguration;)V
 HSPLandroid/app/WindowConfiguration;->setToDefaults()V
 HSPLandroid/app/WindowConfiguration;->setWindowingMode(I)V
-PLandroid/app/WindowConfiguration;->supportSplitScreenWindowingMode()Z
-PLandroid/app/WindowConfiguration;->supportSplitScreenWindowingMode(I)Z
 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
-HPLandroid/app/WindowConfiguration;->useWindowFrameForBackdrop()Z
-HSPLandroid/app/WindowConfiguration;->windowingModeToString(I)Ljava/lang/String;
-PLandroid/app/WindowConfiguration;->windowsAreScaleable()Z
 HSPLandroid/app/WindowConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/admin/DeviceAdminInfo;-><init>(Landroid/content/Context;Landroid/content/pm/ActivityInfo;)V
-HSPLandroid/app/admin/DeviceAdminInfo;->getActivityInfo()Landroid/content/pm/ActivityInfo;
-HSPLandroid/app/admin/DeviceAdminInfo;->getComponent()Landroid/content/ComponentName;
-HSPLandroid/app/admin/DeviceAdminInfo;->getPackageName()Ljava/lang/String;
-PLandroid/app/admin/DeviceAdminInfo;->getUsedPolicies()Ljava/util/ArrayList;
-HSPLandroid/app/admin/DeviceAdminInfo;->readPoliciesFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
-PLandroid/app/admin/DeviceAdminInfo;->usesPolicy(I)Z
-HPLandroid/app/admin/DeviceAdminInfo;->writePoliciesToXml(Lorg/xmlpull/v1/XmlSerializer;)V
-HSPLandroid/app/admin/DevicePolicyCache;-><init>()V
-PLandroid/app/admin/DevicePolicyCache;->getInstance()Landroid/app/admin/DevicePolicyCache;
-HPLandroid/app/admin/DevicePolicyEventLogger;-><init>(I)V
-PLandroid/app/admin/DevicePolicyEventLogger;->createEvent(I)Landroid/app/admin/DevicePolicyEventLogger;
-HPLandroid/app/admin/DevicePolicyEventLogger;->setAdmin(Landroid/content/ComponentName;)Landroid/app/admin/DevicePolicyEventLogger;
-PLandroid/app/admin/DevicePolicyEventLogger;->setAdmin(Ljava/lang/String;)Landroid/app/admin/DevicePolicyEventLogger;
-PLandroid/app/admin/DevicePolicyEventLogger;->setBoolean(Z)Landroid/app/admin/DevicePolicyEventLogger;
-PLandroid/app/admin/DevicePolicyEventLogger;->setInt(I)Landroid/app/admin/DevicePolicyEventLogger;
-PLandroid/app/admin/DevicePolicyEventLogger;->setStrings([Ljava/lang/String;)Landroid/app/admin/DevicePolicyEventLogger;
-PLandroid/app/admin/DevicePolicyEventLogger;->stringArrayValueToBytes([Ljava/lang/String;)[B
-PLandroid/app/admin/DevicePolicyEventLogger;->write()V
 HSPLandroid/app/admin/DevicePolicyManager;-><init>(Landroid/content/Context;Landroid/app/admin/IDevicePolicyManager;)V
 HSPLandroid/app/admin/DevicePolicyManager;-><init>(Landroid/content/Context;Landroid/app/admin/IDevicePolicyManager;Z)V
-HPLandroid/app/admin/DevicePolicyManager;->addCrossProfileIntentFilter(Landroid/content/ComponentName;Landroid/content/IntentFilter;I)V
-HPLandroid/app/admin/DevicePolicyManager;->addCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z
-HPLandroid/app/admin/DevicePolicyManager;->addUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;)V
-PLandroid/app/admin/DevicePolicyManager;->checkDeviceIdentifierAccess(Ljava/lang/String;II)Z
-HPLandroid/app/admin/DevicePolicyManager;->clearCrossProfileIntentFilters(Landroid/content/ComponentName;)V
-HPLandroid/app/admin/DevicePolicyManager;->clearUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;)V
-HSPLandroid/app/admin/DevicePolicyManager;->generateKeyPair(Landroid/content/ComponentName;Ljava/lang/String;Landroid/security/keystore/KeyGenParameterSpec;I)Landroid/security/AttestedKeyPair;
-HPLandroid/app/admin/DevicePolicyManager;->getAccountTypesWithManagementDisabled()[Ljava/lang/String;
-HPLandroid/app/admin/DevicePolicyManager;->getAccountTypesWithManagementDisabledAsUser(I)[Ljava/lang/String;
 HSPLandroid/app/admin/DevicePolicyManager;->getActiveAdmins()Ljava/util/List;
 HSPLandroid/app/admin/DevicePolicyManager;->getActiveAdminsAsUser(I)Ljava/util/List;
-HPLandroid/app/admin/DevicePolicyManager;->getAlwaysOnVpnPackage(Landroid/content/ComponentName;)Ljava/lang/String;
-HPLandroid/app/admin/DevicePolicyManager;->getApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;)Landroid/os/Bundle;
-HPLandroid/app/admin/DevicePolicyManager;->getBindDeviceAdminTargetUsers(Landroid/content/ComponentName;)Ljava/util/List;
-HSPLandroid/app/admin/DevicePolicyManager;->getBluetoothContactSharingDisabled(Landroid/os/UserHandle;)Z
-HPLandroid/app/admin/DevicePolicyManager;->getCameraDisabled(Landroid/content/ComponentName;I)Z
-HSPLandroid/app/admin/DevicePolicyManager;->getCrossProfileCallerIdDisabled(Landroid/os/UserHandle;)Z
-HSPLandroid/app/admin/DevicePolicyManager;->getCrossProfileContactsSearchDisabled(Landroid/os/UserHandle;)Z
-HPLandroid/app/admin/DevicePolicyManager;->getCrossProfileWidgetProviders(Landroid/content/ComponentName;)Ljava/util/List;
-HPLandroid/app/admin/DevicePolicyManager;->getCurrentFailedPasswordAttempts()I
-HPLandroid/app/admin/DevicePolicyManager;->getCurrentFailedPasswordAttempts(I)I
-HPLandroid/app/admin/DevicePolicyManager;->getDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;
-HSPLandroid/app/admin/DevicePolicyManager;->getDeviceOwner()Ljava/lang/String;
 HSPLandroid/app/admin/DevicePolicyManager;->getDeviceOwnerComponentInner(Z)Landroid/content/ComponentName;
-HSPLandroid/app/admin/DevicePolicyManager;->getDeviceOwnerComponentOnAnyUser()Landroid/content/ComponentName;
-HSPLandroid/app/admin/DevicePolicyManager;->getDeviceOwnerComponentOnCallingUser()Landroid/content/ComponentName;
-HPLandroid/app/admin/DevicePolicyManager;->getDeviceOwnerOrganizationName()Ljava/lang/CharSequence;
-HPLandroid/app/admin/DevicePolicyManager;->getDeviceOwnerUser()Landroid/os/UserHandle;
-HSPLandroid/app/admin/DevicePolicyManager;->getGuestUserDisabled(Landroid/content/ComponentName;)Z
-HPLandroid/app/admin/DevicePolicyManager;->getInstalledCaCerts(Landroid/content/ComponentName;)Ljava/util/List;
-HSPLandroid/app/admin/DevicePolicyManager;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;)I
 HSPLandroid/app/admin/DevicePolicyManager;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;I)I
-HPLandroid/app/admin/DevicePolicyManager;->getMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;I)I
-HPLandroid/app/admin/DevicePolicyManager;->getMaximumTimeToLock(Landroid/content/ComponentName;I)J
-HPLandroid/app/admin/DevicePolicyManager;->getOrganizationNameForUser(I)Ljava/lang/CharSequence;
-HPLandroid/app/admin/DevicePolicyManager;->getParentProfileInstance(Landroid/content/ComponentName;)Landroid/app/admin/DevicePolicyManager;
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordExpirationTimeout(Landroid/content/ComponentName;)J
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMaximumLength(I)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumLength(Landroid/content/ComponentName;)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumLength(Landroid/content/ComponentName;I)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumLetters(Landroid/content/ComponentName;)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumLetters(Landroid/content/ComponentName;I)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumLowerCase(Landroid/content/ComponentName;)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumLowerCase(Landroid/content/ComponentName;I)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumNonLetter(Landroid/content/ComponentName;)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumNonLetter(Landroid/content/ComponentName;I)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumNumeric(Landroid/content/ComponentName;)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumNumeric(Landroid/content/ComponentName;I)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumSymbols(Landroid/content/ComponentName;)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumSymbols(Landroid/content/ComponentName;I)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumUpperCase(Landroid/content/ComponentName;)I
-HPLandroid/app/admin/DevicePolicyManager;->getPasswordMinimumUpperCase(Landroid/content/ComponentName;I)I
-HSPLandroid/app/admin/DevicePolicyManager;->getPasswordQuality(Landroid/content/ComponentName;)I
-HSPLandroid/app/admin/DevicePolicyManager;->getPasswordQuality(Landroid/content/ComponentName;I)I
-HPLandroid/app/admin/DevicePolicyManager;->getPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/app/admin/DevicePolicyManager;->getProfileOwner()Landroid/content/ComponentName;
 HSPLandroid/app/admin/DevicePolicyManager;->getProfileOwnerAsUser(I)Landroid/content/ComponentName;
-PLandroid/app/admin/DevicePolicyManager;->getProfileOwnerAsUser(Landroid/os/UserHandle;)Landroid/content/ComponentName;
-PLandroid/app/admin/DevicePolicyManager;->getRequiredStrongAuthTimeout(Landroid/content/ComponentName;I)J
-HSPLandroid/app/admin/DevicePolicyManager;->getStorageEncryptionStatus()I
-HSPLandroid/app/admin/DevicePolicyManager;->getStorageEncryptionStatus(I)I
-HSPLandroid/app/admin/DevicePolicyManager;->getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;
-HPLandroid/app/admin/DevicePolicyManager;->hasGrantedPolicy(Landroid/content/ComponentName;I)Z
-HPLandroid/app/admin/DevicePolicyManager;->isActivePasswordSufficient()Z
-HSPLandroid/app/admin/DevicePolicyManager;->isAdminActive(Landroid/content/ComponentName;)Z
-HSPLandroid/app/admin/DevicePolicyManager;->isAdminActiveAsUser(Landroid/content/ComponentName;I)Z
-HSPLandroid/app/admin/DevicePolicyManager;->isDeviceIdAttestationSupported()Z
-HSPLandroid/app/admin/DevicePolicyManager;->isDeviceManaged()Z
 HSPLandroid/app/admin/DevicePolicyManager;->isDeviceOwnerApp(Ljava/lang/String;)Z
 HSPLandroid/app/admin/DevicePolicyManager;->isDeviceOwnerAppOnAnyUserInner(Ljava/lang/String;Z)Z
 HSPLandroid/app/admin/DevicePolicyManager;->isDeviceOwnerAppOnCallingUser(Ljava/lang/String;)Z
-HSPLandroid/app/admin/DevicePolicyManager;->isLockTaskPermitted(Ljava/lang/String;)Z
-HPLandroid/app/admin/DevicePolicyManager;->isLogoutEnabled()Z
-HPLandroid/app/admin/DevicePolicyManager;->isManagedProfile(Landroid/content/ComponentName;)Z
-HPLandroid/app/admin/DevicePolicyManager;->isNetworkLoggingEnabled(Landroid/content/ComponentName;)Z
-HPLandroid/app/admin/DevicePolicyManager;->isNotificationListenerServicePermitted(Ljava/lang/String;I)Z
-HPLandroid/app/admin/DevicePolicyManager;->isPackageSuspended(Landroid/content/ComponentName;Ljava/lang/String;)Z
 HSPLandroid/app/admin/DevicePolicyManager;->isProfileOwnerApp(Ljava/lang/String;)Z
-HSPLandroid/app/admin/DevicePolicyManager;->isSeparateProfileChallengeAllowed(I)Z
-HPLandroid/app/admin/DevicePolicyManager;->isUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;)Z
-HPLandroid/app/admin/DevicePolicyManager;->isUsingUnifiedPassword(Landroid/content/ComponentName;)Z
 HSPLandroid/app/admin/DevicePolicyManager;->myUserId()I
-HPLandroid/app/admin/DevicePolicyManager;->reportFailedBiometricAttempt(I)V
-HPLandroid/app/admin/DevicePolicyManager;->reportFailedPasswordAttempt(I)V
-HPLandroid/app/admin/DevicePolicyManager;->reportKeyguardDismissed(I)V
-HPLandroid/app/admin/DevicePolicyManager;->reportKeyguardSecured(I)V
-HPLandroid/app/admin/DevicePolicyManager;->reportSuccessfulBiometricAttempt(I)V
-HPLandroid/app/admin/DevicePolicyManager;->reportSuccessfulPasswordAttempt(I)V
-HPLandroid/app/admin/DevicePolicyManager;->setApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/Bundle;)V
-HPLandroid/app/admin/DevicePolicyManager;->setAutoTimeRequired(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/DevicePolicyManager;->setBackupServiceEnabled(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/DevicePolicyManager;->setBluetoothContactSharingDisabled(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/DevicePolicyManager;->setCameraDisabled(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/DevicePolicyManager;->setCrossProfileCallerIdDisabled(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/DevicePolicyManager;->setCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/DevicePolicyManager;->setKeyguardDisabledFeatures(Landroid/content/ComponentName;I)V
-HPLandroid/app/admin/DevicePolicyManager;->setLongSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
-HPLandroid/app/admin/DevicePolicyManager;->setMasterVolumeMuted(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/DevicePolicyManager;->setMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;I)V
-HPLandroid/app/admin/DevicePolicyManager;->setMaximumTimeToLock(Landroid/content/ComponentName;J)V
-HPLandroid/app/admin/DevicePolicyManager;->setPasswordExpirationTimeout(Landroid/content/ComponentName;J)V
-HPLandroid/app/admin/DevicePolicyManager;->setPasswordHistoryLength(Landroid/content/ComponentName;I)V
-HPLandroid/app/admin/DevicePolicyManager;->setPasswordMinimumLength(Landroid/content/ComponentName;I)V
-HPLandroid/app/admin/DevicePolicyManager;->setPasswordMinimumLetters(Landroid/content/ComponentName;I)V
-HPLandroid/app/admin/DevicePolicyManager;->setPasswordMinimumLowerCase(Landroid/content/ComponentName;I)V
-HPLandroid/app/admin/DevicePolicyManager;->setPasswordMinimumNonLetter(Landroid/content/ComponentName;I)V
-HPLandroid/app/admin/DevicePolicyManager;->setPasswordMinimumNumeric(Landroid/content/ComponentName;I)V
-HPLandroid/app/admin/DevicePolicyManager;->setPasswordMinimumSymbols(Landroid/content/ComponentName;I)V
-HPLandroid/app/admin/DevicePolicyManager;->setPasswordMinimumUpperCase(Landroid/content/ComponentName;I)V
-HPLandroid/app/admin/DevicePolicyManager;->setPasswordQuality(Landroid/content/ComponentName;I)V
-HPLandroid/app/admin/DevicePolicyManager;->setPermissionPolicy(Landroid/content/ComponentName;I)V
-HPLandroid/app/admin/DevicePolicyManager;->setPermittedAccessibilityServices(Landroid/content/ComponentName;Ljava/util/List;)Z
-HPLandroid/app/admin/DevicePolicyManager;->setPermittedInputMethods(Landroid/content/ComponentName;Ljava/util/List;)Z
-HPLandroid/app/admin/DevicePolicyManager;->setRequiredStrongAuthTimeout(Landroid/content/ComponentName;J)V
-HPLandroid/app/admin/DevicePolicyManager;->setScreenCaptureDisabled(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/DevicePolicyManager;->setShortSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
-HPLandroid/app/admin/DevicePolicyManager;->setStorageEncryption(Landroid/content/ComponentName;Z)I
-HPLandroid/app/admin/DevicePolicyManager;->setUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;Z)V
 HSPLandroid/app/admin/DevicePolicyManager;->throwIfParentInstance(Ljava/lang/String;)V
-HSPLandroid/app/admin/DevicePolicyManagerInternal;-><init>()V
-HSPLandroid/app/admin/DeviceStateCache;-><init>()V
-PLandroid/app/admin/IDeviceAdminService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/app/admin/IDeviceAdminService$Stub;-><init>()V
-HPLandroid/app/admin/IDeviceAdminService$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/app/admin/IDeviceAdminService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/admin/IDeviceAdminService;
 HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->addCrossProfileIntentFilter(Landroid/content/ComponentName;Landroid/content/IntentFilter;I)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->addCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->checkDeviceIdentifierAccess(Ljava/lang/String;II)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->clearCrossProfileIntentFilters(Landroid/content/ComponentName;)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->enforceCanManageCaCerts(Landroid/content/ComponentName;Ljava/lang/String;)V
-HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->generateKeyPair(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/security/keystore/ParcelableKeyGenParameterSpec;ILandroid/security/keymaster/KeymasterCertificateChain;)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getAccountTypesWithManagementDisabledAsUser(I)[Ljava/lang/String;
 HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getActiveAdmins(I)Ljava/util/List;
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getAlwaysOnVpnPackage(Landroid/content/ComponentName;)Ljava/lang/String;
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getBindDeviceAdminTargetUsers(Landroid/content/ComponentName;)Ljava/util/List;
-HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getBluetoothContactSharingDisabledForUser(I)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getCameraDisabled(Landroid/content/ComponentName;IZ)Z
-HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getCrossProfileCallerIdDisabledForUser(I)Z
-HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getCrossProfileContactsSearchDisabledForUser(I)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getCrossProfileWidgetProviders(Landroid/content/ComponentName;)Ljava/util/List;
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getCurrentFailedPasswordAttempts(IZ)I
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;
 HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getDeviceOwnerComponent(Z)Landroid/content/ComponentName;
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getDeviceOwnerOrganizationName()Ljava/lang/CharSequence;
-HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)I
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;IZ)I
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getMaximumTimeToLock(Landroid/content/ComponentName;IZ)J
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getOrganizationNameForUser(I)Ljava/lang/CharSequence;
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getPasswordExpirationTimeout(Landroid/content/ComponentName;IZ)J
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getPasswordMinimumLength(Landroid/content/ComponentName;IZ)I
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getPasswordMinimumLetters(Landroid/content/ComponentName;IZ)I
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getPasswordMinimumLowerCase(Landroid/content/ComponentName;IZ)I
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getPasswordMinimumNonLetter(Landroid/content/ComponentName;IZ)I
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getPasswordMinimumNumeric(Landroid/content/ComponentName;IZ)I
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getPasswordMinimumSymbols(Landroid/content/ComponentName;IZ)I
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getPasswordMinimumUpperCase(Landroid/content/ComponentName;IZ)I
-HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getPasswordQuality(Landroid/content/ComponentName;IZ)I
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getProfileOwner(I)Landroid/content/ComponentName;
 HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getProfileOwnerAsUser(I)Landroid/content/ComponentName;
-HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getStorageEncryptionStatus(Ljava/lang/String;I)I
-HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;
-HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->hasDeviceOwner()Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->hasGrantedPolicy(Landroid/content/ComponentName;II)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isActivePasswordSufficient(IZ)Z
-HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isAdminActive(Landroid/content/ComponentName;I)Z
-HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isLockTaskPermitted(Ljava/lang/String;)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isLogoutEnabled()Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isManagedProfile(Landroid/content/ComponentName;)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isNetworkLoggingEnabled(Landroid/content/ComponentName;Ljava/lang/String;)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isPackageSuspended(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Z
-HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isSeparateProfileChallengeAllowed(I)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isUsingUnifiedPassword(Landroid/content/ComponentName;)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->reportFailedBiometricAttempt(I)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->reportFailedPasswordAttempt(I)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->reportKeyguardDismissed(I)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->reportKeyguardSecured(I)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->reportSuccessfulBiometricAttempt(I)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->reportSuccessfulPasswordAttempt(I)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setAutoTimeRequired(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setBackupServiceEnabled(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setBluetoothContactSharingDisabled(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setCameraDisabled(Landroid/content/ComponentName;ZZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setCrossProfileCallerIdDisabled(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setLongSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setMasterVolumeMuted(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;IZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setMaximumTimeToLock(Landroid/content/ComponentName;JZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPasswordExpirationTimeout(Landroid/content/ComponentName;JZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPasswordHistoryLength(Landroid/content/ComponentName;IZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPasswordMinimumLength(Landroid/content/ComponentName;IZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPasswordMinimumLetters(Landroid/content/ComponentName;IZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPasswordMinimumLowerCase(Landroid/content/ComponentName;IZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPasswordMinimumNonLetter(Landroid/content/ComponentName;IZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPasswordMinimumNumeric(Landroid/content/ComponentName;IZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPasswordMinimumSymbols(Landroid/content/ComponentName;IZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPasswordMinimumUpperCase(Landroid/content/ComponentName;IZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPasswordQuality(Landroid/content/ComponentName;IZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPermissionPolicy(Landroid/content/ComponentName;Ljava/lang/String;I)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPermittedAccessibilityServices(Landroid/content/ComponentName;Ljava/util/List;)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setPermittedInputMethods(Landroid/content/ComponentName;Ljava/util/List;)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setRequiredStrongAuthTimeout(Landroid/content/ComponentName;JZ)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setScreenCaptureDisabled(Landroid/content/ComponentName;Z)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setShortSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setStorageEncryption(Landroid/content/ComponentName;Z)I
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Z)V
-HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->setUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;Z)V
-HSPLandroid/app/admin/IDevicePolicyManager$Stub;-><init>()V
 HSPLandroid/app/admin/IDevicePolicyManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/admin/IDevicePolicyManager;
-PLandroid/app/admin/IDevicePolicyManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/app/admin/IDevicePolicyManager$Stub;->onTransact$generateKeyPair$(Landroid/os/Parcel;Landroid/os/Parcel;)Z
-HPLandroid/app/admin/IDevicePolicyManager$Stub;->onTransact$getPermissionGrantState$(Landroid/os/Parcel;Landroid/os/Parcel;)Z
-HSPLandroid/app/admin/IDevicePolicyManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/admin/PasswordMetrics$ComplexityBucket$1;-><init>(Ljava/lang/String;II)V
-PLandroid/app/admin/PasswordMetrics$ComplexityBucket$2;-><init>(Ljava/lang/String;II)V
-PLandroid/app/admin/PasswordMetrics$ComplexityBucket$3;-><init>(Ljava/lang/String;II)V
-PLandroid/app/admin/PasswordMetrics$ComplexityBucket$4;-><init>(Ljava/lang/String;II)V
-PLandroid/app/admin/PasswordMetrics$ComplexityBucket$4;->allowsCredType(I)Z
-PLandroid/app/admin/PasswordMetrics$ComplexityBucket;-><clinit>()V
-PLandroid/app/admin/PasswordMetrics$ComplexityBucket;-><init>(Ljava/lang/String;II)V
-PLandroid/app/admin/PasswordMetrics$ComplexityBucket;-><init>(Ljava/lang/String;IILandroid/app/admin/PasswordMetrics$1;)V
-PLandroid/app/admin/PasswordMetrics$ComplexityBucket;->forComplexity(I)Landroid/app/admin/PasswordMetrics$ComplexityBucket;
-PLandroid/app/admin/PasswordMetrics$ComplexityBucket;->values()[Landroid/app/admin/PasswordMetrics$ComplexityBucket;
-HPLandroid/app/admin/PasswordMetrics;-><init>(I)V
-PLandroid/app/admin/PasswordMetrics;-><init>(IIIIIIIIII)V
-PLandroid/app/admin/PasswordMetrics;->categoryChar(C)I
-PLandroid/app/admin/PasswordMetrics;->computeForCredential(Lcom/android/internal/widget/LockscreenCredential;)Landroid/app/admin/PasswordMetrics;
-PLandroid/app/admin/PasswordMetrics;->computeForPassword([B)Landroid/app/admin/PasswordMetrics;
-PLandroid/app/admin/PasswordMetrics;->maxDiffCategory(I)I
-PLandroid/app/admin/PasswordMetrics;->maxLengthSequence([B)I
-PLandroid/app/admin/PasswordMetrics;->maxWith(Landroid/app/admin/PasswordMetrics;)V
-HPLandroid/app/admin/PasswordMetrics;->merge(Ljava/util/List;)Landroid/app/admin/PasswordMetrics;
-PLandroid/app/admin/PasswordMetrics;->validatePasswordMetrics(Landroid/app/admin/PasswordMetrics;IZLandroid/app/admin/PasswordMetrics;)Ljava/util/List;
-HSPLandroid/app/admin/PasswordPolicy;-><init>()V
-PLandroid/app/admin/PasswordPolicy;->getMinMetrics()Landroid/app/admin/PasswordMetrics;
-PLandroid/app/admin/SystemUpdateInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/admin/SystemUpdateInfo;
-PLandroid/app/admin/SystemUpdateInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/admin/SystemUpdateInfo;-><init>(JI)V
-PLandroid/app/admin/SystemUpdateInfo;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/admin/SystemUpdateInfo;-><init>(Landroid/os/Parcel;Landroid/app/admin/SystemUpdateInfo$1;)V
-PLandroid/app/admin/SystemUpdateInfo;->equals(Ljava/lang/Object;)Z
-HSPLandroid/app/admin/SystemUpdateInfo;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/app/admin/SystemUpdateInfo;
-PLandroid/app/admin/SystemUpdateInfo;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;)V
-HSPLandroid/app/appsearch/IAppSearchManager$Stub;-><init>()V
-PLandroid/app/appsearch/IAppSearchManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/assist/AssistContent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/assist/AssistContent;
-PLandroid/app/assist/AssistContent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/assist/AssistContent;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/assist/AssistContent;->getClipData()Landroid/content/ClipData;
-PLandroid/app/assist/AssistContent;->getIntent()Landroid/content/Intent;
-HPLandroid/app/assist/AssistContent;->setDefaultIntent(Landroid/content/Intent;)V
-PLandroid/app/assist/AssistContent;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/assist/AssistContent;->writeToParcelInternal(Landroid/os/Parcel;I)V
-PLandroid/app/assist/AssistStructure$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/assist/AssistStructure;
-PLandroid/app/assist/AssistStructure$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/assist/AssistStructure$AutofillOverlay;-><init>()V
-PLandroid/app/assist/AssistStructure$HtmlInfoNode$1;-><init>()V
-PLandroid/app/assist/AssistStructure$HtmlInfoNode$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/assist/AssistStructure$HtmlInfoNode;
-PLandroid/app/assist/AssistStructure$HtmlInfoNode$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/assist/AssistStructure$HtmlInfoNode;-><clinit>()V
-PLandroid/app/assist/AssistStructure$HtmlInfoNode;-><init>(Landroid/app/assist/AssistStructure$HtmlInfoNodeBuilder;)V
-PLandroid/app/assist/AssistStructure$HtmlInfoNode;-><init>(Landroid/app/assist/AssistStructure$HtmlInfoNodeBuilder;Landroid/app/assist/AssistStructure$1;)V
-PLandroid/app/assist/AssistStructure$HtmlInfoNode;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/assist/AssistStructure$HtmlInfoNodeBuilder;-><init>(Ljava/lang/String;)V
-PLandroid/app/assist/AssistStructure$HtmlInfoNodeBuilder;->access$1000(Landroid/app/assist/AssistStructure$HtmlInfoNodeBuilder;)Ljava/util/ArrayList;
-PLandroid/app/assist/AssistStructure$HtmlInfoNodeBuilder;->access$800(Landroid/app/assist/AssistStructure$HtmlInfoNodeBuilder;)Ljava/lang/String;
-PLandroid/app/assist/AssistStructure$HtmlInfoNodeBuilder;->access$900(Landroid/app/assist/AssistStructure$HtmlInfoNodeBuilder;)Ljava/util/ArrayList;
-HPLandroid/app/assist/AssistStructure$HtmlInfoNodeBuilder;->addAttribute(Ljava/lang/String;Ljava/lang/String;)Landroid/view/ViewStructure$HtmlInfo$Builder;
-PLandroid/app/assist/AssistStructure$HtmlInfoNodeBuilder;->build()Landroid/app/assist/AssistStructure$HtmlInfoNode;
-PLandroid/app/assist/AssistStructure$ParcelTransferReader;-><init>(Landroid/app/assist/AssistStructure;Landroid/os/IBinder;)V
-PLandroid/app/assist/AssistStructure$ParcelTransferReader;->fetchData()V
-PLandroid/app/assist/AssistStructure$ParcelTransferReader;->go()V
-PLandroid/app/assist/AssistStructure$ParcelTransferReader;->readParcel(II)Landroid/os/Parcel;
-PLandroid/app/assist/AssistStructure$ParcelTransferWriter;-><init>(Landroid/app/assist/AssistStructure;Landroid/os/Parcel;)V
-PLandroid/app/assist/AssistStructure$ParcelTransferWriter;->pushViewStackEntry(Landroid/app/assist/AssistStructure$ViewNode;I)V
-PLandroid/app/assist/AssistStructure$ParcelTransferWriter;->writeNextEntryToParcel(Landroid/app/assist/AssistStructure;Landroid/os/Parcel;Landroid/os/PooledStringWriter;)Z
-PLandroid/app/assist/AssistStructure$ParcelTransferWriter;->writeToParcel(Landroid/app/assist/AssistStructure;Landroid/os/Parcel;)V
-PLandroid/app/assist/AssistStructure$ParcelTransferWriter;->writeToParcelInner(Landroid/app/assist/AssistStructure;Landroid/os/Parcel;)Z
-PLandroid/app/assist/AssistStructure$ParcelTransferWriter;->writeView(Landroid/app/assist/AssistStructure$ViewNode;Landroid/os/Parcel;Landroid/os/PooledStringWriter;I)V
-PLandroid/app/assist/AssistStructure$SendChannel;-><init>(Landroid/app/assist/AssistStructure;)V
-PLandroid/app/assist/AssistStructure$SendChannel;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/app/assist/AssistStructure$ViewNode;-><init>()V
-PLandroid/app/assist/AssistStructure$ViewNode;-><init>(Landroid/app/assist/AssistStructure$ParcelTransferReader;I)V
-PLandroid/app/assist/AssistStructure$ViewNode;->getAlpha()F
-PLandroid/app/assist/AssistStructure$ViewNode;->getAutofillHints()[Ljava/lang/String;
-PLandroid/app/assist/AssistStructure$ViewNode;->getAutofillId()Landroid/view/autofill/AutofillId;
-PLandroid/app/assist/AssistStructure$ViewNode;->getAutofillOptions()[Ljava/lang/CharSequence;
-PLandroid/app/assist/AssistStructure$ViewNode;->getAutofillType()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getAutofillValue()Landroid/view/autofill/AutofillValue;
-PLandroid/app/assist/AssistStructure$ViewNode;->getChildAt(I)Landroid/app/assist/AssistStructure$ViewNode;
-PLandroid/app/assist/AssistStructure$ViewNode;->getChildCount()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getClassName()Ljava/lang/String;
-PLandroid/app/assist/AssistStructure$ViewNode;->getContentDescription()Ljava/lang/CharSequence;
-PLandroid/app/assist/AssistStructure$ViewNode;->getElevation()F
-PLandroid/app/assist/AssistStructure$ViewNode;->getExtras()Landroid/os/Bundle;
-PLandroid/app/assist/AssistStructure$ViewNode;->getHeight()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getHint()Ljava/lang/String;
-PLandroid/app/assist/AssistStructure$ViewNode;->getHintIdEntry()Ljava/lang/String;
-PLandroid/app/assist/AssistStructure$ViewNode;->getHtmlInfo()Landroid/view/ViewStructure$HtmlInfo;
-PLandroid/app/assist/AssistStructure$ViewNode;->getId()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getIdEntry()Ljava/lang/String;
-PLandroid/app/assist/AssistStructure$ViewNode;->getIdPackage()Ljava/lang/String;
-PLandroid/app/assist/AssistStructure$ViewNode;->getIdType()Ljava/lang/String;
-PLandroid/app/assist/AssistStructure$ViewNode;->getImportantForAutofill()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getInputType()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getLeft()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getLocaleList()Landroid/os/LocaleList;
-HPLandroid/app/assist/AssistStructure$ViewNode;->getMaxTextLength()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getScrollX()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getScrollY()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getText()Ljava/lang/CharSequence;
-PLandroid/app/assist/AssistStructure$ViewNode;->getTextBackgroundColor()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getTextColor()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getTextIdEntry()Ljava/lang/String;
-PLandroid/app/assist/AssistStructure$ViewNode;->getTextSelectionEnd()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getTextSelectionStart()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getTextSize()F
-PLandroid/app/assist/AssistStructure$ViewNode;->getTextStyle()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getTop()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getTransformation()Landroid/graphics/Matrix;
-HPLandroid/app/assist/AssistStructure$ViewNode;->getVisibility()I
-PLandroid/app/assist/AssistStructure$ViewNode;->getWebDomain()Ljava/lang/String;
-PLandroid/app/assist/AssistStructure$ViewNode;->getWidth()I
-PLandroid/app/assist/AssistStructure$ViewNode;->isAssistBlocked()Z
-HPLandroid/app/assist/AssistStructure$ViewNode;->isClickable()Z
-HPLandroid/app/assist/AssistStructure$ViewNode;->isFocused()Z
-PLandroid/app/assist/AssistStructure$ViewNode;->isSanitized()Z
-PLandroid/app/assist/AssistStructure$ViewNode;->setAutofillOverlay(Landroid/app/assist/AssistStructure$AutofillOverlay;)V
-PLandroid/app/assist/AssistStructure$ViewNode;->writeSelfToParcel(Landroid/os/Parcel;Landroid/os/PooledStringWriter;Z[F)I
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->getChildCount()I
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->getNodeText()Landroid/app/assist/AssistStructure$ViewNodeText;
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->getTempRect()Landroid/graphics/Rect;
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->newChild(I)Landroid/view/ViewStructure;
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setAutofillHints([Ljava/lang/String;)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setAutofillId(Landroid/view/autofill/AutofillId;)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setAutofillType(I)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setAutofillValue(Landroid/view/autofill/AutofillValue;)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setChildCount(I)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setClassName(Ljava/lang/String;)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setClickable(Z)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setContentDescription(Ljava/lang/CharSequence;)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setDataIsSensitive(Z)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setDimens(IIIIII)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setElevation(F)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setEnabled(Z)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setFocusable(Z)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setFocused(Z)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setHint(Ljava/lang/CharSequence;)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setHintIdEntry(Ljava/lang/String;)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setId(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setImportantForAutofill(I)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setInputType(I)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setLongClickable(Z)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setMaxTextEms(I)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setMaxTextLength(I)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setMinTextEms(I)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setOpaque(Z)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setSelected(Z)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setText(Ljava/lang/CharSequence;)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setText(Ljava/lang/CharSequence;II)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setTextStyle(FIII)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setTransformation(Landroid/graphics/Matrix;)V
-HPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setVisibility(I)V
-HPLandroid/app/assist/AssistStructure$ViewNodeText;-><init>()V
-PLandroid/app/assist/AssistStructure$ViewNodeText;-><init>(Landroid/os/Parcel;Z)V
-PLandroid/app/assist/AssistStructure$ViewNodeText;->isSimple()Z
-PLandroid/app/assist/AssistStructure$ViewNodeText;->writeToParcel(Landroid/os/Parcel;ZZ)V
-PLandroid/app/assist/AssistStructure$ViewStackEntry;-><init>()V
-PLandroid/app/assist/AssistStructure$WindowNode;-><init>(Landroid/app/assist/AssistStructure$ParcelTransferReader;)V
-HPLandroid/app/assist/AssistStructure$WindowNode;-><init>(Landroid/app/assist/AssistStructure;Landroid/view/ViewRootImpl;ZI)V
-HPLandroid/app/assist/AssistStructure$WindowNode;->getDisplayId()I
-PLandroid/app/assist/AssistStructure$WindowNode;->getHeight()I
-PLandroid/app/assist/AssistStructure$WindowNode;->getLeft()I
-PLandroid/app/assist/AssistStructure$WindowNode;->getRootViewNode()Landroid/app/assist/AssistStructure$ViewNode;
-PLandroid/app/assist/AssistStructure$WindowNode;->getTitle()Ljava/lang/CharSequence;
-PLandroid/app/assist/AssistStructure$WindowNode;->getTop()I
-PLandroid/app/assist/AssistStructure$WindowNode;->getWidth()I
-HPLandroid/app/assist/AssistStructure$WindowNode;->resolveViewAutofillFlags(Landroid/content/Context;I)I
-PLandroid/app/assist/AssistStructure$WindowNode;->writeSelfToParcel(Landroid/os/Parcel;Landroid/os/PooledStringWriter;[F)V
-HPLandroid/app/assist/AssistStructure;-><init>(Landroid/app/Activity;ZI)V
-PLandroid/app/assist/AssistStructure;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/assist/AssistStructure;->access$000(Landroid/app/assist/AssistStructure;)Z
-PLandroid/app/assist/AssistStructure;->access$100(Landroid/app/assist/AssistStructure;)I
-PLandroid/app/assist/AssistStructure;->access$102(Landroid/app/assist/AssistStructure;I)I
-PLandroid/app/assist/AssistStructure;->access$200(Landroid/app/assist/AssistStructure;)I
-PLandroid/app/assist/AssistStructure;->access$202(Landroid/app/assist/AssistStructure;I)I
-PLandroid/app/assist/AssistStructure;->access$300(Landroid/app/assist/AssistStructure;)J
-PLandroid/app/assist/AssistStructure;->access$302(Landroid/app/assist/AssistStructure;J)J
-PLandroid/app/assist/AssistStructure;->access$400(Landroid/app/assist/AssistStructure;)J
-PLandroid/app/assist/AssistStructure;->access$402(Landroid/app/assist/AssistStructure;J)J
-PLandroid/app/assist/AssistStructure;->access$500(Landroid/app/assist/AssistStructure;)Ljava/util/ArrayList;
-HPLandroid/app/assist/AssistStructure;->access$700(Landroid/app/assist/AssistStructure;)Landroid/graphics/Rect;
-HPLandroid/app/assist/AssistStructure;->clearSendChannel()V
-HPLandroid/app/assist/AssistStructure;->dump(Ljava/lang/String;Landroid/app/assist/AssistStructure$ViewNode;Z)V
-PLandroid/app/assist/AssistStructure;->dump(Z)V
-PLandroid/app/assist/AssistStructure;->ensureData()V
-PLandroid/app/assist/AssistStructure;->ensureDataForAutofill()V
-HPLandroid/app/assist/AssistStructure;->getActivityComponent()Landroid/content/ComponentName;
-PLandroid/app/assist/AssistStructure;->getFlags()I
-PLandroid/app/assist/AssistStructure;->getWindowNodeAt(I)Landroid/app/assist/AssistStructure$WindowNode;
-PLandroid/app/assist/AssistStructure;->getWindowNodeCount()I
-PLandroid/app/assist/AssistStructure;->sanitizeForParceling(Z)V
-PLandroid/app/assist/AssistStructure;->setActivityComponent(Landroid/content/ComponentName;)V
-PLandroid/app/assist/AssistStructure;->setHomeActivity(Z)V
-PLandroid/app/assist/AssistStructure;->setTaskId(I)V
-PLandroid/app/assist/AssistStructure;->waitForReady()Z
-PLandroid/app/assist/AssistStructure;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/backup/BackupAgent$BackupServiceBinder;-><init>(Landroid/app/backup/BackupAgent;)V
-PLandroid/app/backup/BackupAgent$BackupServiceBinder;-><init>(Landroid/app/backup/BackupAgent;Landroid/app/backup/BackupAgent$1;)V
+HSPLandroid/app/backup/BackupAgent$BackupServiceBinder;-><init>(Landroid/app/backup/BackupAgent;)V
+HSPLandroid/app/backup/BackupAgent$BackupServiceBinder;-><init>(Landroid/app/backup/BackupAgent;Landroid/app/backup/BackupAgent$1;)V
 HSPLandroid/app/backup/BackupAgent$BackupServiceBinder;->doBackup(Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;JLandroid/app/backup/IBackupCallback;I)V
-PLandroid/app/backup/BackupAgent$BackupServiceBinder;->doFullBackup(Landroid/os/ParcelFileDescriptor;JILandroid/app/backup/IBackupManager;I)V
-PLandroid/app/backup/BackupAgent$BackupServiceBinder;->doMeasureFullBackup(JILandroid/app/backup/IBackupManager;I)V
-PLandroid/app/backup/BackupAgent$SharedPrefsSynchronizer;-><init>(Landroid/app/backup/BackupAgent;)V
+HSPLandroid/app/backup/BackupAgent$SharedPrefsSynchronizer;-><init>(Landroid/app/backup/BackupAgent;)V
 HSPLandroid/app/backup/BackupAgent$SharedPrefsSynchronizer;->run()V
 HSPLandroid/app/backup/BackupAgent;-><init>()V
-PLandroid/app/backup/BackupAgent;->access$100(Landroid/app/backup/BackupAgent;)V
-PLandroid/app/backup/BackupAgent;->access$200(Landroid/app/backup/BackupAgent;)I
+HSPLandroid/app/backup/BackupAgent;->access$100(Landroid/app/backup/BackupAgent;)V
 HSPLandroid/app/backup/BackupAgent;->attach(Landroid/content/Context;)V
-PLandroid/app/backup/BackupAgent;->fullBackupFile(Ljava/io/File;Landroid/app/backup/FullBackupDataOutput;)V
-PLandroid/app/backup/BackupAgent;->getBackupUserId()I
 HSPLandroid/app/backup/BackupAgent;->getHandler()Landroid/os/Handler;
-PLandroid/app/backup/BackupAgent;->onBind()Landroid/os/IBinder;
-HSPLandroid/app/backup/BackupAgent;->onCreate()V
+HSPLandroid/app/backup/BackupAgent;->onBind()Landroid/os/IBinder;
 HSPLandroid/app/backup/BackupAgent;->onCreate(Landroid/os/UserHandle;)V
 HSPLandroid/app/backup/BackupAgent;->onDestroy()V
 HSPLandroid/app/backup/BackupAgent;->waitForSharedPrefs()V
 HSPLandroid/app/backup/BackupAgentHelper;-><init>()V
 HSPLandroid/app/backup/BackupAgentHelper;->addHelper(Ljava/lang/String;Landroid/app/backup/BackupHelper;)V
 HSPLandroid/app/backup/BackupAgentHelper;->onBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V
-PLandroid/app/backup/BackupDataInput$EntityHeader;-><init>()V
-PLandroid/app/backup/BackupDataInput$EntityHeader;-><init>(Landroid/app/backup/BackupDataInput$1;)V
-PLandroid/app/backup/BackupDataInput;-><init>(Ljava/io/FileDescriptor;)V
-PLandroid/app/backup/BackupDataInput;->finalize()V
-HPLandroid/app/backup/BackupDataInput;->getDataSize()I
-PLandroid/app/backup/BackupDataInput;->getKey()Ljava/lang/String;
-HPLandroid/app/backup/BackupDataInput;->readEntityData([BII)I
-PLandroid/app/backup/BackupDataInput;->readNextHeader()Z
-PLandroid/app/backup/BackupDataInput;->skipEntityData()V
 HSPLandroid/app/backup/BackupDataOutput;-><init>(Ljava/io/FileDescriptor;JI)V
 HSPLandroid/app/backup/BackupDataOutput;->finalize()V
-HPLandroid/app/backup/BackupDataOutput;->getTransportFlags()I
 HSPLandroid/app/backup/BackupDataOutput;->setKeyPrefix(Ljava/lang/String;)V
-HSPLandroid/app/backup/BackupDataOutput;->writeEntityData([BI)I
-HSPLandroid/app/backup/BackupDataOutput;->writeEntityHeader(Ljava/lang/String;I)I
-PLandroid/app/backup/BackupHelperDispatcher$Header;-><init>()V
-PLandroid/app/backup/BackupHelperDispatcher$Header;-><init>(Landroid/app/backup/BackupHelperDispatcher$1;)V
-PLandroid/app/backup/BackupHelperDispatcher;-><init>()V
+HSPLandroid/app/backup/BackupHelperDispatcher$Header;-><init>()V
+HSPLandroid/app/backup/BackupHelperDispatcher$Header;-><init>(Landroid/app/backup/BackupHelperDispatcher$1;)V
+HSPLandroid/app/backup/BackupHelperDispatcher;-><init>()V
 HSPLandroid/app/backup/BackupHelperDispatcher;->addHelper(Ljava/lang/String;Landroid/app/backup/BackupHelper;)V
 HSPLandroid/app/backup/BackupHelperDispatcher;->doOneBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupHelperDispatcher$Header;Landroid/app/backup/BackupHelper;)V
 HSPLandroid/app/backup/BackupHelperDispatcher;->performBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V
-PLandroid/app/backup/BackupManager$BackupManagerMonitorWrapper;-><init>(Landroid/app/backup/BackupManager;Landroid/app/backup/BackupManagerMonitor;)V
-HPLandroid/app/backup/BackupManager$BackupObserverWrapper$1;-><init>(Landroid/app/backup/BackupManager$BackupObserverWrapper;Landroid/os/Looper;Landroid/app/backup/BackupManager;)V
-HPLandroid/app/backup/BackupManager$BackupObserverWrapper$1;->handleMessage(Landroid/os/Message;)V
-HPLandroid/app/backup/BackupManager$BackupObserverWrapper;-><init>(Landroid/app/backup/BackupManager;Landroid/content/Context;Landroid/app/backup/BackupObserver;)V
-PLandroid/app/backup/BackupManager$BackupObserverWrapper;->backupFinished(I)V
-PLandroid/app/backup/BackupManager$BackupObserverWrapper;->onResult(Ljava/lang/String;I)V
 HSPLandroid/app/backup/BackupManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/app/backup/BackupManager;->checkServiceBinder()V
 HSPLandroid/app/backup/BackupManager;->dataChanged()V
 HSPLandroid/app/backup/BackupManager;->dataChanged(Ljava/lang/String;)V
-HSPLandroid/app/backup/BackupManager;->getCurrentTransport()Ljava/lang/String;
-HPLandroid/app/backup/BackupManager;->isAppEligibleForBackup(Ljava/lang/String;)Z
-PLandroid/app/backup/BackupManager;->isBackupEnabled()Z
-HSPLandroid/app/backup/BackupManager;->isBackupServiceActive(Landroid/os/UserHandle;)Z
-HPLandroid/app/backup/BackupManager;->listAllTransports()[Ljava/lang/String;
-HPLandroid/app/backup/BackupManager;->requestBackup([Ljava/lang/String;Landroid/app/backup/BackupObserver;Landroid/app/backup/BackupManagerMonitor;I)I
-HSPLandroid/app/backup/BackupManager;->requestRestore(Landroid/app/backup/RestoreObserver;)I
-HSPLandroid/app/backup/BackupManager;->requestRestore(Landroid/app/backup/RestoreObserver;Landroid/app/backup/BackupManagerMonitor;)I
-PLandroid/app/backup/BackupManager;->updateTransportAttributes(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V
-PLandroid/app/backup/BackupManager;->updateTransportAttributes(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;)V
-PLandroid/app/backup/BackupManagerMonitor;-><init>()V
-PLandroid/app/backup/BackupObserver;-><init>()V
-PLandroid/app/backup/BackupProgress$1;-><init>()V
-PLandroid/app/backup/BackupProgress;-><clinit>()V
-HPLandroid/app/backup/BackupProgress;-><init>(JJ)V
-PLandroid/app/backup/BackupProgress;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/backup/BackupTransport$TransportImpl;->cancelFullBackup()V
-PLandroid/app/backup/BackupTransport$TransportImpl;->checkFullBackupSize(J)I
-PLandroid/app/backup/BackupTransport$TransportImpl;->configurationIntent()Landroid/content/Intent;
-PLandroid/app/backup/BackupTransport$TransportImpl;->currentDestinationString()Ljava/lang/String;
-PLandroid/app/backup/BackupTransport$TransportImpl;->dataManagementIntent()Landroid/content/Intent;
-PLandroid/app/backup/BackupTransport$TransportImpl;->dataManagementIntentLabel()Ljava/lang/CharSequence;
-HPLandroid/app/backup/BackupTransport$TransportImpl;->finishBackup()I
-HPLandroid/app/backup/BackupTransport$TransportImpl;->getBackupQuota(Ljava/lang/String;Z)J
-PLandroid/app/backup/BackupTransport$TransportImpl;->getCurrentRestoreSet()J
-HPLandroid/app/backup/BackupTransport$TransportImpl;->getTransportFlags()I
-PLandroid/app/backup/BackupTransport$TransportImpl;->initializeDevice()I
-HPLandroid/app/backup/BackupTransport$TransportImpl;->isAppEligibleForBackup(Landroid/content/pm/PackageInfo;Z)Z
-PLandroid/app/backup/BackupTransport$TransportImpl;->name()Ljava/lang/String;
-HPLandroid/app/backup/BackupTransport$TransportImpl;->performBackup(Landroid/content/pm/PackageInfo;Landroid/os/ParcelFileDescriptor;I)I
-HPLandroid/app/backup/BackupTransport$TransportImpl;->performFullBackup(Landroid/content/pm/PackageInfo;Landroid/os/ParcelFileDescriptor;I)I
-PLandroid/app/backup/BackupTransport$TransportImpl;->requestBackupTime()J
-PLandroid/app/backup/BackupTransport$TransportImpl;->requestFullBackupTime()J
-HPLandroid/app/backup/BackupTransport$TransportImpl;->sendBackupData(I)I
-PLandroid/app/backup/BackupTransport$TransportImpl;->transportDirName()Ljava/lang/String;
-HSPLandroid/app/backup/BackupTransport;-><init>()V
-PLandroid/app/backup/BackupTransport;->configurationIntent()Landroid/content/Intent;
-PLandroid/app/backup/BackupTransport;->dataManagementIntent()Landroid/content/Intent;
-PLandroid/app/backup/BackupTransport;->dataManagementIntentLabel()Ljava/lang/CharSequence;
-HSPLandroid/app/backup/BackupTransport;->getBinder()Landroid/os/IBinder;
-PLandroid/app/backup/BackupTransport;->isAppEligibleForBackup(Landroid/content/pm/PackageInfo;Z)Z
-PLandroid/app/backup/BlobBackupHelper;-><init>(I[Ljava/lang/String;)V
-PLandroid/app/backup/BlobBackupHelper;->checksum([B)J
-PLandroid/app/backup/BlobBackupHelper;->deflate([B)[B
-PLandroid/app/backup/BlobBackupHelper;->performBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V
-PLandroid/app/backup/BlobBackupHelper;->readOldState(Landroid/os/ParcelFileDescriptor;)Landroid/util/ArrayMap;
-PLandroid/app/backup/BlobBackupHelper;->writeBackupState(Landroid/util/ArrayMap;Landroid/os/ParcelFileDescriptor;)V
-HSPLandroid/app/backup/FileBackupHelper;-><init>(Landroid/content/Context;[Ljava/lang/String;)V
-HSPLandroid/app/backup/FileBackupHelper;->performBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V
 HSPLandroid/app/backup/FileBackupHelperBase;-><init>(Landroid/content/Context;)V
-HSPLandroid/app/backup/FileBackupHelperBase;->finalize()V
 HSPLandroid/app/backup/FileBackupHelperBase;->performBackup_checked(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;[Ljava/lang/String;)V
-PLandroid/app/backup/FullBackupDataOutput;-><init>(JI)V
-PLandroid/app/backup/FullBackupDataOutput;-><init>(Landroid/os/ParcelFileDescriptor;JI)V
-PLandroid/app/backup/FullBackupDataOutput;->addSize(J)V
-PLandroid/app/backup/FullBackupDataOutput;->getSize()J
 HSPLandroid/app/backup/IBackupCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/app/backup/IBackupCallback$Stub$Proxy;->operationComplete(J)V
-PLandroid/app/backup/IBackupCallback$Stub;-><init>()V
-PLandroid/app/backup/IBackupCallback$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/backup/IBackupCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupCallback;
-PLandroid/app/backup/IBackupCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/app/backup/IBackupManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 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;->getDataManagementIntent(Ljava/lang/String;)Landroid/content/Intent;
-HPLandroid/app/backup/IBackupManager$Stub$Proxy;->isAppEligibleForBackupForUser(ILjava/lang/String;)Z
-PLandroid/app/backup/IBackupManager$Stub$Proxy;->isBackupEnabled()Z
-HSPLandroid/app/backup/IBackupManager$Stub$Proxy;->isBackupServiceActive(I)Z
-HPLandroid/app/backup/IBackupManager$Stub$Proxy;->listAllTransports()[Ljava/lang/String;
-HPLandroid/app/backup/IBackupManager$Stub$Proxy;->opCompleteForUser(IIJ)V
-HPLandroid/app/backup/IBackupManager$Stub$Proxy;->requestBackup([Ljava/lang/String;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;I)I
-PLandroid/app/backup/IBackupManager$Stub$Proxy;->updateTransportAttributesForUser(ILandroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V
-HSPLandroid/app/backup/IBackupManager$Stub;-><init>()V
-PLandroid/app/backup/IBackupManager$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/backup/IBackupManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupManager;
-PLandroid/app/backup/IBackupManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/app/backup/IBackupManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/app/backup/IBackupManagerMonitor$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/app/backup/IBackupManagerMonitor$Stub$Proxy;->onEvent(Landroid/os/Bundle;)V
-HPLandroid/app/backup/IBackupManagerMonitor$Stub;-><init>()V
-PLandroid/app/backup/IBackupManagerMonitor$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/app/backup/IBackupManagerMonitor$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupManagerMonitor;
-HPLandroid/app/backup/IBackupManagerMonitor$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/app/backup/IBackupObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/app/backup/IBackupObserver$Stub$Proxy;->backupFinished(I)V
-HPLandroid/app/backup/IBackupObserver$Stub$Proxy;->onResult(Ljava/lang/String;I)V
-HPLandroid/app/backup/IBackupObserver$Stub$Proxy;->onUpdate(Ljava/lang/String;Landroid/app/backup/BackupProgress;)V
-HPLandroid/app/backup/IBackupObserver$Stub;-><init>()V
-PLandroid/app/backup/IBackupObserver$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/app/backup/IBackupObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupObserver;
-HPLandroid/app/backup/IBackupObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/backup/RestoreDescription$1;-><init>()V
-PLandroid/app/backup/RestoreDescription$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/backup/RestoreDescription;
-PLandroid/app/backup/RestoreDescription$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/backup/RestoreDescription;-><clinit>()V
-PLandroid/app/backup/RestoreDescription;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/backup/RestoreDescription;-><init>(Landroid/os/Parcel;Landroid/app/backup/RestoreDescription$1;)V
-PLandroid/app/backup/RestoreDescription;-><init>(Ljava/lang/String;I)V
-PLandroid/app/backup/RestoreDescription;->access$100(Landroid/app/backup/RestoreDescription;)Ljava/lang/String;
-PLandroid/app/backup/RestoreDescription;->getPackageName()Ljava/lang/String;
 HSPLandroid/app/backup/SharedPreferencesBackupHelper;-><init>(Landroid/content/Context;[Ljava/lang/String;)V
 HSPLandroid/app/backup/SharedPreferencesBackupHelper;->performBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V
-HSPLandroid/app/blob/IBlobStoreManager$Stub;-><init>()V
-PLandroid/app/blob/IBlobStoreManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/contentsuggestions/IContentSuggestionsManager$Stub;-><init>()V
-PLandroid/app/contentsuggestions/IContentSuggestionsManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/job/-$$Lambda$FpGlzN9oJcl8o5soW-gU-DyTvXM;->createService(Landroid/content/Context;)Ljava/lang/Object;
 HSPLandroid/app/job/-$$Lambda$JobSchedulerFrameworkInitializer$PtYe8PQc1PVJQXRnpm3iSxcWTR0;->createService(Landroid/content/Context;Landroid/os/IBinder;)Ljava/lang/Object;
 HSPLandroid/app/job/-$$Lambda$JobSchedulerFrameworkInitializer$RHUxgww0pZFMmfQWKgaRAx0YFqA;->createService(Landroid/os/IBinder;)Ljava/lang/Object;
+HSPLandroid/app/job/IJobCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/app/job/IJobCallback$Stub$Proxy;->acknowledgeStartMessage(IZ)V
 HSPLandroid/app/job/IJobCallback$Stub$Proxy;->acknowledgeStopMessage(IZ)V
 HSPLandroid/app/job/IJobCallback$Stub$Proxy;->completeWork(II)Z
 HSPLandroid/app/job/IJobCallback$Stub$Proxy;->dequeueWork(I)Landroid/app/job/JobWorkItem;
 HSPLandroid/app/job/IJobCallback$Stub$Proxy;->jobFinished(IZ)V
-PLandroid/app/job/IJobCallback$Stub;-><init>()V
-PLandroid/app/job/IJobCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobCallback;
-PLandroid/app/job/IJobCallback$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/app/job/IJobCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/app/job/IJobCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobCallback;
 HSPLandroid/app/job/IJobScheduler$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->cancel(I)V
-HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->cancelAll()V
 HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->enqueue(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I
 HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->getAllPendingJobs()Landroid/content/pm/ParceledListSlice;
 HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->getPendingJob(I)Landroid/app/job/JobInfo;
 HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->schedule(Landroid/app/job/JobInfo;)I
-HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->scheduleAsPackage(Landroid/app/job/JobInfo;Ljava/lang/String;ILjava/lang/String;)I
-HSPLandroid/app/job/IJobScheduler$Stub;-><init>()V
 HSPLandroid/app/job/IJobScheduler$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobScheduler;
-PLandroid/app/job/IJobScheduler$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/app/job/IJobScheduler$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/job/IJobService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/app/job/IJobService$Stub$Proxy;->startJob(Landroid/app/job/JobParameters;)V
-PLandroid/app/job/IJobService$Stub$Proxy;->stopJob(Landroid/app/job/JobParameters;)V
 HSPLandroid/app/job/IJobService$Stub;-><init>()V
 HSPLandroid/app/job/IJobService$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/app/job/IJobService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobService;
 HSPLandroid/app/job/IJobService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/app/job/JobInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/job/JobInfo;
 HSPLandroid/app/job/JobInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -4409,102 +2219,59 @@
 HSPLandroid/app/job/JobInfo$Builder;->build()Landroid/app/job/JobInfo;
 HSPLandroid/app/job/JobInfo$Builder;->setBackoffCriteria(JI)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setExtras(Landroid/os/PersistableBundle;)Landroid/app/job/JobInfo$Builder;
-HSPLandroid/app/job/JobInfo$Builder;->setFlags(I)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setImportantWhileForeground(Z)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setMinimumLatency(J)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setOverrideDeadline(J)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setPeriodic(J)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setPeriodic(JJ)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setPersisted(Z)Landroid/app/job/JobInfo$Builder;
-PLandroid/app/job/JobInfo$Builder;->setPrefetch(Z)Landroid/app/job/JobInfo$Builder;
-HSPLandroid/app/job/JobInfo$Builder;->setPriority(I)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setRequiredNetwork(Landroid/net/NetworkRequest;)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setRequiredNetworkType(I)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setRequiresBatteryNotLow(Z)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setRequiresCharging(Z)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setRequiresDeviceIdle(Z)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$Builder;->setRequiresStorageNotLow(Z)Landroid/app/job/JobInfo$Builder;
-HSPLandroid/app/job/JobInfo$Builder;->setTransientExtras(Landroid/os/Bundle;)Landroid/app/job/JobInfo$Builder;
-HSPLandroid/app/job/JobInfo$Builder;->setTriggerContentMaxDelay(J)Landroid/app/job/JobInfo$Builder;
-HSPLandroid/app/job/JobInfo$Builder;->setTriggerContentUpdateDelay(J)Landroid/app/job/JobInfo$Builder;
 HSPLandroid/app/job/JobInfo$TriggerContentUri$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/job/JobInfo$TriggerContentUri;
 HSPLandroid/app/job/JobInfo$TriggerContentUri$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/job/JobInfo$TriggerContentUri$1;->newArray(I)[Landroid/app/job/JobInfo$TriggerContentUri;
 HSPLandroid/app/job/JobInfo$TriggerContentUri$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/app/job/JobInfo$TriggerContentUri;-><init>(Landroid/net/Uri;I)V
-PLandroid/app/job/JobInfo$TriggerContentUri;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/job/JobInfo$TriggerContentUri;-><init>(Landroid/os/Parcel;Landroid/app/job/JobInfo$1;)V
-PLandroid/app/job/JobInfo$TriggerContentUri;->equals(Ljava/lang/Object;)Z
-PLandroid/app/job/JobInfo$TriggerContentUri;->getFlags()I
-PLandroid/app/job/JobInfo$TriggerContentUri;->getUri()Landroid/net/Uri;
-PLandroid/app/job/JobInfo$TriggerContentUri;->hashCode()I
+HSPLandroid/app/job/JobInfo$TriggerContentUri;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/job/JobInfo$TriggerContentUri;-><init>(Landroid/os/Parcel;Landroid/app/job/JobInfo$1;)V
+HSPLandroid/app/job/JobInfo$TriggerContentUri;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/job/JobInfo;-><init>(Landroid/app/job/JobInfo$Builder;)V
 HSPLandroid/app/job/JobInfo;-><init>(Landroid/app/job/JobInfo$Builder;Landroid/app/job/JobInfo$1;)V
 HSPLandroid/app/job/JobInfo;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/job/JobInfo;-><init>(Landroid/os/Parcel;Landroid/app/job/JobInfo$1;)V
-PLandroid/app/job/JobInfo;->equals(Ljava/lang/Object;)Z
-HPLandroid/app/job/JobInfo;->getBackoffPolicy()I
-HSPLandroid/app/job/JobInfo;->getClipData()Landroid/content/ClipData;
-PLandroid/app/job/JobInfo;->getClipGrantFlags()I
-HSPLandroid/app/job/JobInfo;->getConstraintFlags()I
-HSPLandroid/app/job/JobInfo;->getEstimatedNetworkDownloadBytes()J
-HSPLandroid/app/job/JobInfo;->getEstimatedNetworkUploadBytes()J
+HSPLandroid/app/job/JobInfo;-><init>(Landroid/os/Parcel;Landroid/app/job/JobInfo$1;)V
 HSPLandroid/app/job/JobInfo;->getExtras()Landroid/os/PersistableBundle;
-HSPLandroid/app/job/JobInfo;->getFlags()I
-HSPLandroid/app/job/JobInfo;->getFlexMillis()J
 HSPLandroid/app/job/JobInfo;->getId()I
-HPLandroid/app/job/JobInfo;->getInitialBackoffMillis()J
 HSPLandroid/app/job/JobInfo;->getIntervalMillis()J
 HSPLandroid/app/job/JobInfo;->getMaxExecutionDelayMillis()J
 HSPLandroid/app/job/JobInfo;->getMinBackoffMillis()J
 HSPLandroid/app/job/JobInfo;->getMinFlexMillis()J
 HSPLandroid/app/job/JobInfo;->getMinLatencyMillis()J
 HSPLandroid/app/job/JobInfo;->getMinPeriodMillis()J
-HSPLandroid/app/job/JobInfo;->getNetworkType()I
-HPLandroid/app/job/JobInfo;->getPriority()I
-HSPLandroid/app/job/JobInfo;->getRequiredNetwork()Landroid/net/NetworkRequest;
 HSPLandroid/app/job/JobInfo;->getService()Landroid/content/ComponentName;
-PLandroid/app/job/JobInfo;->getTransientExtras()Landroid/os/Bundle;
-PLandroid/app/job/JobInfo;->getTriggerContentMaxDelay()J
-PLandroid/app/job/JobInfo;->getTriggerContentUpdateDelay()J
-HSPLandroid/app/job/JobInfo;->getTriggerContentUris()[Landroid/app/job/JobInfo$TriggerContentUri;
-HSPLandroid/app/job/JobInfo;->hasEarlyConstraint()Z
-HSPLandroid/app/job/JobInfo;->hasLateConstraint()Z
-HSPLandroid/app/job/JobInfo;->isExemptedFromAppStandby()Z
-HSPLandroid/app/job/JobInfo;->isPeriodic()Z
 HSPLandroid/app/job/JobInfo;->isPersisted()Z
-PLandroid/app/job/JobInfo;->isPrefetch()Z
-PLandroid/app/job/JobInfo;->isRequireBatteryNotLow()Z
 HSPLandroid/app/job/JobInfo;->isRequireCharging()Z
 HSPLandroid/app/job/JobInfo;->isRequireDeviceIdle()Z
-PLandroid/app/job/JobInfo;->isRequireStorageNotLow()Z
-PLandroid/app/job/JobInfo;->kindofEqualsBundle(Landroid/os/BaseBundle;Landroid/os/BaseBundle;)Z
 HSPLandroid/app/job/JobInfo;->writeToParcel(Landroid/os/Parcel;I)V
 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;
-PLandroid/app/job/JobParameters;-><init>(Landroid/os/IBinder;ILandroid/os/PersistableBundle;Landroid/os/Bundle;Landroid/content/ClipData;IZ[Landroid/net/Uri;[Ljava/lang/String;Landroid/net/Network;)V
 HSPLandroid/app/job/JobParameters;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/job/JobParameters;-><init>(Landroid/os/Parcel;Landroid/app/job/JobParameters$1;)V
 HSPLandroid/app/job/JobParameters;->completeWork(Landroid/app/job/JobWorkItem;)V
 HSPLandroid/app/job/JobParameters;->dequeueWork()Landroid/app/job/JobWorkItem;
 HSPLandroid/app/job/JobParameters;->getCallback()Landroid/app/job/IJobCallback;
-HSPLandroid/app/job/JobParameters;->getDebugStopReason()Ljava/lang/String;
 HSPLandroid/app/job/JobParameters;->getExtras()Landroid/os/PersistableBundle;
 HSPLandroid/app/job/JobParameters;->getJobId()I
-HPLandroid/app/job/JobParameters;->getJobStopReasonCodes()[I
 HSPLandroid/app/job/JobParameters;->getNetwork()Landroid/net/Network;
-PLandroid/app/job/JobParameters;->getReasonCodeDescription(I)Ljava/lang/String;
-PLandroid/app/job/JobParameters;->getReasonName(I)Ljava/lang/String;
-HPLandroid/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;
-HSPLandroid/app/job/JobParameters;->isOverrideDeadlineExpired()Z
-PLandroid/app/job/JobParameters;->setStopReason(ILjava/lang/String;)V
-HSPLandroid/app/job/JobParameters;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/job/JobScheduler;-><init>()V
 HSPLandroid/app/job/JobSchedulerFrameworkInitializer;->lambda$registerServiceWrappers$0(Landroid/os/IBinder;)Landroid/app/job/JobScheduler;
 HSPLandroid/app/job/JobSchedulerFrameworkInitializer;->lambda$registerServiceWrappers$1(Landroid/content/Context;Landroid/os/IBinder;)Landroid/os/DeviceIdleManager;
-PLandroid/app/job/JobService$1;-><init>(Landroid/app/job/JobService;Landroid/app/Service;)V
+HSPLandroid/app/job/JobService$1;-><init>(Landroid/app/job/JobService;Landroid/app/Service;)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
@@ -4524,227 +2291,61 @@
 HSPLandroid/app/job/JobWorkItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/job/JobWorkItem;-><init>(Landroid/content/Intent;)V
 HSPLandroid/app/job/JobWorkItem;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/job/JobWorkItem;->bumpDeliveryCount()V
-PLandroid/app/job/JobWorkItem;->getDeliveryCount()I
-PLandroid/app/job/JobWorkItem;->getGrants()Ljava/lang/Object;
 HSPLandroid/app/job/JobWorkItem;->getIntent()Landroid/content/Intent;
-PLandroid/app/job/JobWorkItem;->getWorkId()I
-PLandroid/app/job/JobWorkItem;->setWorkId(I)V
-HPLandroid/app/job/JobWorkItem;->toString()Ljava/lang/String;
+HSPLandroid/app/job/JobWorkItem;->getWorkId()I
 HSPLandroid/app/job/JobWorkItem;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/prediction/AppPredictionContext$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/prediction/AppPredictionContext;
-PLandroid/app/prediction/AppPredictionContext$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/prediction/AppPredictionContext;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/prediction/AppPredictionContext;-><init>(Landroid/os/Parcel;Landroid/app/prediction/AppPredictionContext$1;)V
-HPLandroid/app/prediction/AppPredictionContext;-><init>(Ljava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V
-HPLandroid/app/prediction/AppPredictionContext;-><init>(Ljava/lang/String;ILjava/lang/String;Landroid/os/Bundle;Landroid/app/prediction/AppPredictionContext$1;)V
-HPLandroid/app/prediction/AppPredictionContext;->getExtras()Landroid/os/Bundle;
-HPLandroid/app/prediction/AppPredictionContext;->getPredictedTargetCount()I
-HPLandroid/app/prediction/AppPredictionContext;->getUiSurface()Ljava/lang/String;
-PLandroid/app/prediction/AppPredictionContext;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/app/prediction/AppPredictionManager;-><init>(Landroid/content/Context;)V
-HPLandroid/app/prediction/AppPredictionManager;->createAppPredictionSession(Landroid/app/prediction/AppPredictionContext;)Landroid/app/prediction/AppPredictor;
-PLandroid/app/prediction/AppPredictionSessionId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/prediction/AppPredictionSessionId;
-PLandroid/app/prediction/AppPredictionSessionId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/prediction/AppPredictionSessionId;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/prediction/AppPredictionSessionId;-><init>(Landroid/os/Parcel;Landroid/app/prediction/AppPredictionSessionId$1;)V
-HPLandroid/app/prediction/AppPredictionSessionId;-><init>(Ljava/lang/String;)V
-HPLandroid/app/prediction/AppPredictionSessionId;->equals(Ljava/lang/Object;)Z
-HPLandroid/app/prediction/AppPredictionSessionId;->hashCode()I
-PLandroid/app/prediction/AppPredictionSessionId;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/app/prediction/AppPredictor;-><init>(Landroid/content/Context;Landroid/app/prediction/AppPredictionContext;)V
-HPLandroid/app/prediction/AppPredictor;->notifyAppTargetEvent(Landroid/app/prediction/AppTargetEvent;)V
-HPLandroid/app/prediction/AppPredictor;->registerPredictionUpdates(Ljava/util/concurrent/Executor;Landroid/app/prediction/AppPredictor$Callback;)V
-HPLandroid/app/prediction/AppPredictor;->requestPredictionUpdate()V
-PLandroid/app/prediction/AppTarget$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/prediction/AppTarget;
-PLandroid/app/prediction/AppTarget$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/app/prediction/AppTarget$Builder;-><init>(Landroid/app/prediction/AppTargetId;Ljava/lang/String;Landroid/os/UserHandle;)V
-HPLandroid/app/prediction/AppTarget$Builder;->build()Landroid/app/prediction/AppTarget;
-PLandroid/app/prediction/AppTarget$Builder;->setClassName(Ljava/lang/String;)Landroid/app/prediction/AppTarget$Builder;
-HPLandroid/app/prediction/AppTarget;-><init>(Landroid/app/prediction/AppTargetId;Ljava/lang/String;Landroid/os/UserHandle;Landroid/content/pm/ShortcutInfo;Ljava/lang/String;I)V
-HPLandroid/app/prediction/AppTarget;-><init>(Landroid/app/prediction/AppTargetId;Ljava/lang/String;Landroid/os/UserHandle;Landroid/content/pm/ShortcutInfo;Ljava/lang/String;ILandroid/app/prediction/AppTarget$1;)V
-PLandroid/app/prediction/AppTarget;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/prediction/AppTarget;-><init>(Landroid/os/Parcel;Landroid/app/prediction/AppTarget$1;)V
-HPLandroid/app/prediction/AppTarget;->getClassName()Ljava/lang/String;
-HPLandroid/app/prediction/AppTarget;->getPackageName()Ljava/lang/String;
-HPLandroid/app/prediction/AppTarget;->getShortcutInfo()Landroid/content/pm/ShortcutInfo;
-HPLandroid/app/prediction/AppTarget;->getUser()Landroid/os/UserHandle;
-PLandroid/app/prediction/AppTarget;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/prediction/AppTargetEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/prediction/AppTargetEvent;
-PLandroid/app/prediction/AppTargetEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/app/prediction/AppTargetEvent;-><init>(Landroid/app/prediction/AppTarget;Ljava/lang/String;I)V
-HPLandroid/app/prediction/AppTargetEvent;-><init>(Landroid/app/prediction/AppTarget;Ljava/lang/String;ILandroid/app/prediction/AppTargetEvent$1;)V
-PLandroid/app/prediction/AppTargetEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/prediction/AppTargetEvent;-><init>(Landroid/os/Parcel;Landroid/app/prediction/AppTargetEvent$1;)V
-HPLandroid/app/prediction/AppTargetEvent;->getLaunchLocation()Ljava/lang/String;
-HPLandroid/app/prediction/AppTargetEvent;->getTarget()Landroid/app/prediction/AppTarget;
-PLandroid/app/prediction/AppTargetEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/prediction/AppTargetId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/prediction/AppTargetId;
-PLandroid/app/prediction/AppTargetId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/prediction/AppTargetId;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/prediction/AppTargetId;-><init>(Landroid/os/Parcel;Landroid/app/prediction/AppTargetId$1;)V
-HPLandroid/app/prediction/AppTargetId;-><init>(Ljava/lang/String;)V
-PLandroid/app/prediction/AppTargetId;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/prediction/IPredictionCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/app/prediction/IPredictionCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/app/prediction/IPredictionCallback$Stub$Proxy;->onResult(Landroid/content/pm/ParceledListSlice;)V
-HPLandroid/app/prediction/IPredictionCallback$Stub;-><init>()V
-HPLandroid/app/prediction/IPredictionCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/app/prediction/IPredictionCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/prediction/IPredictionCallback;
-HPLandroid/app/prediction/IPredictionCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/app/prediction/IPredictionManager$Stub$Proxy;->createPredictionSession(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;)V
-HPLandroid/app/prediction/IPredictionManager$Stub$Proxy;->notifyAppTargetEvent(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;)V
-HPLandroid/app/prediction/IPredictionManager$Stub$Proxy;->registerPredictionUpdates(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
-HPLandroid/app/prediction/IPredictionManager$Stub$Proxy;->requestPredictionUpdate(Landroid/app/prediction/AppPredictionSessionId;)V
-HSPLandroid/app/prediction/IPredictionManager$Stub;-><init>()V
-HPLandroid/app/prediction/IPredictionManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/prediction/IPredictionManager;
-PLandroid/app/prediction/IPredictionManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/role/-$$Lambda$9DeAxmM9lUVr3-FTSefyo-BW8DY;-><init>(Lcom/android/internal/infra/AndroidFuture;)V
-PLandroid/app/role/-$$Lambda$9DeAxmM9lUVr3-FTSefyo-BW8DY;->onResult(Landroid/os/Bundle;)V
-PLandroid/app/role/-$$Lambda$RoleControllerManager$Jsb4ev7pHUqel8_lglNSRLiUzpg;->run(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/app/role/-$$Lambda$RoleControllerManager$hbh627Rh8mtJykW3vb1FWR34mIQ;-><init>(Ljava/util/concurrent/Executor;Ljava/lang/String;Ljava/util/function/Consumer;)V
-PLandroid/app/role/-$$Lambda$RoleControllerManager$hbh627Rh8mtJykW3vb1FWR34mIQ;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLandroid/app/role/-$$Lambda$RoleControllerManager$mCMKfoPdye0sMu6efs963HCR1Xk;-><init>(Ljava/lang/Throwable;Ljava/lang/String;Ljava/util/function/Consumer;Landroid/os/Bundle;)V
-PLandroid/app/role/-$$Lambda$RoleControllerManager$mCMKfoPdye0sMu6efs963HCR1Xk;->run()V
-PLandroid/app/role/-$$Lambda$Z0BwIRmLFQVA4XrF_I5nxvuecWE;-><clinit>()V
-PLandroid/app/role/-$$Lambda$Z0BwIRmLFQVA4XrF_I5nxvuecWE;-><init>()V
-PLandroid/app/role/-$$Lambda$Z0BwIRmLFQVA4XrF_I5nxvuecWE;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/app/role/-$$Lambda$o94o2jK_ei-IVw-3oY_QJ49zpAA;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroid/app/role/IOnRoleHoldersChangedListener$Stub;-><init>()V
-HSPLandroid/app/role/IOnRoleHoldersChangedListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/app/role/IRoleController$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/app/role/IRoleController$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/app/role/IRoleController$Stub$Proxy;->grantDefaultRoles(Landroid/os/RemoteCallback;)V
-HSPLandroid/app/role/IRoleController$Stub;-><init>()V
-PLandroid/app/role/IRoleController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/role/IRoleController;
-HSPLandroid/app/role/IRoleController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/app/role/IRoleManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/app/role/IRoleManager$Stub$Proxy;->getDefaultSmsPackage(I)Ljava/lang/String;
-HSPLandroid/app/role/IRoleManager$Stub$Proxy;->getRoleHoldersAsUser(Ljava/lang/String;I)Ljava/util/List;
-HSPLandroid/app/role/IRoleManager$Stub$Proxy;->isRoleAvailable(Ljava/lang/String;)Z
-HSPLandroid/app/role/IRoleManager$Stub$Proxy;->setRoleNamesFromController(Ljava/util/List;)V
-HSPLandroid/app/role/IRoleManager$Stub;-><init>()V
 HSPLandroid/app/role/IRoleManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/role/IRoleManager;
-PLandroid/app/role/IRoleManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/app/role/IRoleManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/role/RoleControllerManager$1;-><init>(Landroid/app/role/RoleControllerManager;Landroid/content/Context;Landroid/content/Intent;IILjava/util/function/Function;Landroid/os/Handler;)V
-PLandroid/app/role/RoleControllerManager$1;->getJobHandler()Landroid/os/Handler;
-PLandroid/app/role/RoleControllerManager;-><init>(Landroid/content/ComponentName;Landroid/os/Handler;Landroid/content/Context;)V
-PLandroid/app/role/RoleControllerManager;->createWithInitializedRemoteServiceComponentName(Landroid/os/Handler;Landroid/content/Context;)Landroid/app/role/RoleControllerManager;
-HSPLandroid/app/role/RoleControllerManager;->getRemoteServiceComponentName(Landroid/content/Context;)Landroid/content/ComponentName;
-PLandroid/app/role/RoleControllerManager;->grantDefaultRoles(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V
-HSPLandroid/app/role/RoleControllerManager;->initializeRemoteServiceComponentName(Landroid/content/Context;)V
-PLandroid/app/role/RoleControllerManager;->lambda$grantDefaultRoles$0(Landroid/app/role/IRoleController;)Ljava/util/concurrent/CompletableFuture;
-PLandroid/app/role/RoleControllerManager;->lambda$propagateCallback$7(Ljava/lang/Throwable;Ljava/lang/String;Ljava/util/function/Consumer;Landroid/os/Bundle;)V
-PLandroid/app/role/RoleControllerManager;->lambda$propagateCallback$8(Ljava/util/concurrent/Executor;Ljava/lang/String;Ljava/util/function/Consumer;Landroid/os/Bundle;Ljava/lang/Throwable;)V
-PLandroid/app/role/RoleControllerManager;->propagateCallback(Lcom/android/internal/infra/AndroidFuture;Ljava/lang/String;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V
-HSPLandroid/app/role/RoleManager$OnRoleHoldersChangedListenerDelegate;-><init>(Ljava/util/concurrent/Executor;Landroid/app/role/OnRoleHoldersChangedListener;)V
-PLandroid/app/role/RoleManager$OnRoleHoldersChangedListenerDelegate;->onRoleHoldersChanged(Ljava/lang/String;I)V
 HSPLandroid/app/role/RoleManager;-><init>(Landroid/content/Context;)V
-HSPLandroid/app/role/RoleManager;->addOnRoleHoldersChangedListenerAsUser(Ljava/util/concurrent/Executor;Landroid/app/role/OnRoleHoldersChangedListener;Landroid/os/UserHandle;)V
 HSPLandroid/app/role/RoleManager;->getDefaultSmsPackage(I)Ljava/lang/String;
-HSPLandroid/app/role/RoleManager;->getRoleHolders(Ljava/lang/String;)Ljava/util/List;
-HSPLandroid/app/role/RoleManager;->getRoleHoldersAsUser(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;
-HSPLandroid/app/role/RoleManager;->isRoleAvailable(Ljava/lang/String;)Z
-HSPLandroid/app/role/RoleManager;->setRoleNamesFromController(Ljava/util/List;)V
-HPLandroid/app/servertransaction/ActivityConfigurationChangeItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/ActivityConfigurationChangeItem;
-HPLandroid/app/servertransaction/ActivityConfigurationChangeItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/servertransaction/ActivityConfigurationChangeItem;-><init>()V
-HPLandroid/app/servertransaction/ActivityConfigurationChangeItem;-><init>(Landroid/os/Parcel;)V
-HPLandroid/app/servertransaction/ActivityConfigurationChangeItem;-><init>(Landroid/os/Parcel;Landroid/app/servertransaction/ActivityConfigurationChangeItem$1;)V
-HPLandroid/app/servertransaction/ActivityConfigurationChangeItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
-PLandroid/app/servertransaction/ActivityConfigurationChangeItem;->obtain(Landroid/content/res/Configuration;)Landroid/app/servertransaction/ActivityConfigurationChangeItem;
-HPLandroid/app/servertransaction/ActivityConfigurationChangeItem;->preExecute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;)V
-PLandroid/app/servertransaction/ActivityConfigurationChangeItem;->recycle()V
-PLandroid/app/servertransaction/ActivityConfigurationChangeItem;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/servertransaction/ActivityLifecycleItem;-><init>()V
-PLandroid/app/servertransaction/ActivityLifecycleItem;->recycle()V
-HPLandroid/app/servertransaction/ActivityResultItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/ActivityResultItem;
-HPLandroid/app/servertransaction/ActivityResultItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/servertransaction/ActivityResultItem;-><init>()V
-HPLandroid/app/servertransaction/ActivityResultItem;-><init>(Landroid/os/Parcel;)V
-HPLandroid/app/servertransaction/ActivityResultItem;-><init>(Landroid/os/Parcel;Landroid/app/servertransaction/ActivityResultItem$1;)V
-HPLandroid/app/servertransaction/ActivityResultItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
-PLandroid/app/servertransaction/ActivityResultItem;->obtain(Ljava/util/List;)Landroid/app/servertransaction/ActivityResultItem;
-PLandroid/app/servertransaction/ActivityResultItem;->recycle()V
-PLandroid/app/servertransaction/ActivityResultItem;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/servertransaction/ActivityLifecycleItem;-><init>()V
 HSPLandroid/app/servertransaction/BaseClientRequest;->postExecute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
 HSPLandroid/app/servertransaction/BaseClientRequest;->preExecute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;)V
 HSPLandroid/app/servertransaction/ClientTransaction$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/ClientTransaction;
 HSPLandroid/app/servertransaction/ClientTransaction$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/servertransaction/ClientTransaction;-><init>()V
 HSPLandroid/app/servertransaction/ClientTransaction;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/servertransaction/ClientTransaction;-><init>(Landroid/os/Parcel;Landroid/app/servertransaction/ClientTransaction$1;)V
-HSPLandroid/app/servertransaction/ClientTransaction;->addCallback(Landroid/app/servertransaction/ClientTransactionItem;)V
 HSPLandroid/app/servertransaction/ClientTransaction;->getActivityToken()Landroid/os/IBinder;
 HSPLandroid/app/servertransaction/ClientTransaction;->getCallbacks()Ljava/util/List;
-HSPLandroid/app/servertransaction/ClientTransaction;->getClient()Landroid/app/IApplicationThread;
 HSPLandroid/app/servertransaction/ClientTransaction;->getLifecycleStateRequest()Landroid/app/servertransaction/ActivityLifecycleItem;
-HSPLandroid/app/servertransaction/ClientTransaction;->obtain(Landroid/app/IApplicationThread;Landroid/os/IBinder;)Landroid/app/servertransaction/ClientTransaction;
 HSPLandroid/app/servertransaction/ClientTransaction;->preExecute(Landroid/app/ClientTransactionHandler;)V
-HPLandroid/app/servertransaction/ClientTransaction;->recycle()V
-HSPLandroid/app/servertransaction/ClientTransaction;->schedule()V
-PLandroid/app/servertransaction/ClientTransaction;->setLifecycleStateRequest(Landroid/app/servertransaction/ActivityLifecycleItem;)V
-HPLandroid/app/servertransaction/ClientTransaction;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/servertransaction/ClientTransactionItem;-><init>()V
 HSPLandroid/app/servertransaction/ClientTransactionItem;->getPostExecutionState()I
 HSPLandroid/app/servertransaction/ConfigurationChangeItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/ConfigurationChangeItem;
 HSPLandroid/app/servertransaction/ConfigurationChangeItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/servertransaction/ConfigurationChangeItem;-><init>()V
 HSPLandroid/app/servertransaction/ConfigurationChangeItem;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/servertransaction/ConfigurationChangeItem;-><init>(Landroid/os/Parcel;Landroid/app/servertransaction/ConfigurationChangeItem$1;)V
 HSPLandroid/app/servertransaction/ConfigurationChangeItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
-HSPLandroid/app/servertransaction/ConfigurationChangeItem;->obtain(Landroid/content/res/Configuration;)Landroid/app/servertransaction/ConfigurationChangeItem;
 HSPLandroid/app/servertransaction/ConfigurationChangeItem;->preExecute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;)V
-HPLandroid/app/servertransaction/ConfigurationChangeItem;->recycle()V
-HPLandroid/app/servertransaction/ConfigurationChangeItem;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/servertransaction/DestroyActivityItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/DestroyActivityItem;
 HSPLandroid/app/servertransaction/DestroyActivityItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/servertransaction/DestroyActivityItem;-><init>()V
+HSPLandroid/app/servertransaction/DestroyActivityItem;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/servertransaction/DestroyActivityItem;-><init>(Landroid/os/Parcel;Landroid/app/servertransaction/DestroyActivityItem$1;)V
 HSPLandroid/app/servertransaction/DestroyActivityItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
 HSPLandroid/app/servertransaction/DestroyActivityItem;->getTargetState()I
-PLandroid/app/servertransaction/DestroyActivityItem;->obtain(ZI)Landroid/app/servertransaction/DestroyActivityItem;
 HSPLandroid/app/servertransaction/DestroyActivityItem;->preExecute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;)V
-PLandroid/app/servertransaction/DestroyActivityItem;->recycle()V
-PLandroid/app/servertransaction/DestroyActivityItem;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/servertransaction/LaunchActivityItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/LaunchActivityItem;
 HSPLandroid/app/servertransaction/LaunchActivityItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/servertransaction/LaunchActivityItem;-><init>()V
 HSPLandroid/app/servertransaction/LaunchActivityItem;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/servertransaction/LaunchActivityItem;-><init>(Landroid/os/Parcel;Landroid/app/servertransaction/LaunchActivityItem$1;)V
 HSPLandroid/app/servertransaction/LaunchActivityItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
-PLandroid/app/servertransaction/LaunchActivityItem;->obtain(Landroid/content/Intent;ILandroid/content/pm/ActivityInfo;Landroid/content/res/Configuration;Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/String;Lcom/android/internal/app/IVoiceInteractor;ILandroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/util/List;Ljava/util/List;ZLandroid/app/ProfilerInfo;Landroid/os/IBinder;)Landroid/app/servertransaction/LaunchActivityItem;
 HSPLandroid/app/servertransaction/LaunchActivityItem;->postExecute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
 HSPLandroid/app/servertransaction/LaunchActivityItem;->preExecute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;)V
-PLandroid/app/servertransaction/LaunchActivityItem;->recycle()V
 HSPLandroid/app/servertransaction/LaunchActivityItem;->setValues(Landroid/app/servertransaction/LaunchActivityItem;Landroid/content/Intent;ILandroid/content/pm/ActivityInfo;Landroid/content/res/Configuration;Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/String;Lcom/android/internal/app/IVoiceInteractor;ILandroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/util/List;Ljava/util/List;ZLandroid/app/ProfilerInfo;Landroid/os/IBinder;)V
-PLandroid/app/servertransaction/LaunchActivityItem;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/servertransaction/MultiWindowModeChangeItem$1;-><init>()V
-PLandroid/app/servertransaction/MultiWindowModeChangeItem;-><clinit>()V
-PLandroid/app/servertransaction/MultiWindowModeChangeItem;-><init>()V
-PLandroid/app/servertransaction/MultiWindowModeChangeItem;->obtain(ZLandroid/content/res/Configuration;)Landroid/app/servertransaction/MultiWindowModeChangeItem;
-PLandroid/app/servertransaction/MultiWindowModeChangeItem;->recycle()V
-PLandroid/app/servertransaction/MultiWindowModeChangeItem;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/app/servertransaction/NewIntentItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/NewIntentItem;
-HPLandroid/app/servertransaction/NewIntentItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/servertransaction/NewIntentItem;-><init>()V
-HPLandroid/app/servertransaction/NewIntentItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
-HPLandroid/app/servertransaction/NewIntentItem;->getPostExecutionState()I
-PLandroid/app/servertransaction/NewIntentItem;->obtain(Ljava/util/List;Z)Landroid/app/servertransaction/NewIntentItem;
-PLandroid/app/servertransaction/NewIntentItem;->recycle()V
-PLandroid/app/servertransaction/NewIntentItem;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/servertransaction/ObjectPool;->obtain(Ljava/lang/Class;)Landroid/app/servertransaction/ObjectPoolItem;
-HPLandroid/app/servertransaction/ObjectPool;->recycle(Landroid/app/servertransaction/ObjectPoolItem;)V
 HSPLandroid/app/servertransaction/PauseActivityItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/PauseActivityItem;
 HSPLandroid/app/servertransaction/PauseActivityItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/servertransaction/PauseActivityItem;-><init>()V
+HSPLandroid/app/servertransaction/PauseActivityItem;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/servertransaction/PauseActivityItem;-><init>(Landroid/os/Parcel;Landroid/app/servertransaction/PauseActivityItem$1;)V
 HSPLandroid/app/servertransaction/PauseActivityItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
 HSPLandroid/app/servertransaction/PauseActivityItem;->getTargetState()I
-PLandroid/app/servertransaction/PauseActivityItem;->obtain(ZZIZ)Landroid/app/servertransaction/PauseActivityItem;
 HSPLandroid/app/servertransaction/PauseActivityItem;->postExecute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
-PLandroid/app/servertransaction/PauseActivityItem;->recycle()V
-PLandroid/app/servertransaction/PauseActivityItem;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/servertransaction/PendingTransactionActions$StopInfo;-><init>()V
 HSPLandroid/app/servertransaction/PendingTransactionActions$StopInfo;->run()V
+HSPLandroid/app/servertransaction/PendingTransactionActions$StopInfo;->setActivity(Landroid/app/ActivityThread$ActivityClientRecord;)V
 HSPLandroid/app/servertransaction/PendingTransactionActions$StopInfo;->setDescription(Ljava/lang/CharSequence;)V
+HSPLandroid/app/servertransaction/PendingTransactionActions$StopInfo;->setPersistentState(Landroid/os/PersistableBundle;)V
+HSPLandroid/app/servertransaction/PendingTransactionActions$StopInfo;->setState(Landroid/os/Bundle;)V
 HSPLandroid/app/servertransaction/PendingTransactionActions;-><init>()V
 HSPLandroid/app/servertransaction/PendingTransactionActions;->clear()V
 HSPLandroid/app/servertransaction/PendingTransactionActions;->getOldState()Landroid/os/Bundle;
@@ -4755,905 +2356,216 @@
 HSPLandroid/app/servertransaction/PendingTransactionActions;->setStopInfo(Landroid/app/servertransaction/PendingTransactionActions$StopInfo;)V
 HSPLandroid/app/servertransaction/PendingTransactionActions;->shouldCallOnPostCreate()Z
 HSPLandroid/app/servertransaction/PendingTransactionActions;->shouldRestoreInstanceState()Z
-PLandroid/app/servertransaction/PipModeChangeItem$1;-><init>()V
-PLandroid/app/servertransaction/PipModeChangeItem;-><clinit>()V
-PLandroid/app/servertransaction/PipModeChangeItem;-><init>()V
-PLandroid/app/servertransaction/PipModeChangeItem;->obtain(ZLandroid/content/res/Configuration;)Landroid/app/servertransaction/PipModeChangeItem;
-PLandroid/app/servertransaction/PipModeChangeItem;->recycle()V
-PLandroid/app/servertransaction/PipModeChangeItem;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/servertransaction/ResumeActivityItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/ResumeActivityItem;
 HSPLandroid/app/servertransaction/ResumeActivityItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/servertransaction/ResumeActivityItem;-><init>()V
+HSPLandroid/app/servertransaction/ResumeActivityItem;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/servertransaction/ResumeActivityItem;-><init>(Landroid/os/Parcel;Landroid/app/servertransaction/ResumeActivityItem$1;)V
 HSPLandroid/app/servertransaction/ResumeActivityItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
 HSPLandroid/app/servertransaction/ResumeActivityItem;->getTargetState()I
-PLandroid/app/servertransaction/ResumeActivityItem;->obtain(IZ)Landroid/app/servertransaction/ResumeActivityItem;
-PLandroid/app/servertransaction/ResumeActivityItem;->obtain(Z)Landroid/app/servertransaction/ResumeActivityItem;
 HSPLandroid/app/servertransaction/ResumeActivityItem;->postExecute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
 HSPLandroid/app/servertransaction/ResumeActivityItem;->preExecute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;)V
-PLandroid/app/servertransaction/ResumeActivityItem;->recycle()V
-PLandroid/app/servertransaction/ResumeActivityItem;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/servertransaction/StopActivityItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/StopActivityItem;
 HSPLandroid/app/servertransaction/StopActivityItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/servertransaction/StopActivityItem;-><init>()V
+HSPLandroid/app/servertransaction/StopActivityItem;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/servertransaction/StopActivityItem;-><init>(Landroid/os/Parcel;Landroid/app/servertransaction/StopActivityItem$1;)V
 HSPLandroid/app/servertransaction/StopActivityItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
 HSPLandroid/app/servertransaction/StopActivityItem;->getTargetState()I
-PLandroid/app/servertransaction/StopActivityItem;->obtain(ZI)Landroid/app/servertransaction/StopActivityItem;
 HSPLandroid/app/servertransaction/StopActivityItem;->postExecute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
-PLandroid/app/servertransaction/StopActivityItem;->recycle()V
-PLandroid/app/servertransaction/StopActivityItem;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/servertransaction/TopResumedActivityChangeItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/TopResumedActivityChangeItem;
 HSPLandroid/app/servertransaction/TopResumedActivityChangeItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/servertransaction/TopResumedActivityChangeItem;-><init>()V
+HSPLandroid/app/servertransaction/TopResumedActivityChangeItem;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/servertransaction/TopResumedActivityChangeItem;-><init>(Landroid/os/Parcel;Landroid/app/servertransaction/TopResumedActivityChangeItem$1;)V
 HSPLandroid/app/servertransaction/TopResumedActivityChangeItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
-PLandroid/app/servertransaction/TopResumedActivityChangeItem;->obtain(Z)Landroid/app/servertransaction/TopResumedActivityChangeItem;
 HSPLandroid/app/servertransaction/TopResumedActivityChangeItem;->postExecute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
-PLandroid/app/servertransaction/TopResumedActivityChangeItem;->recycle()V
-PLandroid/app/servertransaction/TopResumedActivityChangeItem;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/servertransaction/TransactionExecutor;-><init>(Landroid/app/ClientTransactionHandler;)V
-HPLandroid/app/servertransaction/TransactionExecutor;->cycleToPath(Landroid/app/ActivityThread$ActivityClientRecord;ILandroid/app/servertransaction/ClientTransaction;)V
-HPLandroid/app/servertransaction/TransactionExecutor;->cycleToPath(Landroid/app/ActivityThread$ActivityClientRecord;IZLandroid/app/servertransaction/ClientTransaction;)V
+HSPLandroid/app/servertransaction/TransactionExecutor;->cycleToPath(Landroid/app/ActivityThread$ActivityClientRecord;IZLandroid/app/servertransaction/ClientTransaction;)V
 HSPLandroid/app/servertransaction/TransactionExecutor;->execute(Landroid/app/servertransaction/ClientTransaction;)V
 HSPLandroid/app/servertransaction/TransactionExecutor;->executeCallbacks(Landroid/app/servertransaction/ClientTransaction;)V
 HSPLandroid/app/servertransaction/TransactionExecutor;->executeLifecycleState(Landroid/app/servertransaction/ClientTransaction;)V
 HSPLandroid/app/servertransaction/TransactionExecutor;->performLifecycleSequence(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/util/IntArray;Landroid/app/servertransaction/ClientTransaction;)V
 HSPLandroid/app/servertransaction/TransactionExecutorHelper;-><init>()V
-HPLandroid/app/servertransaction/TransactionExecutorHelper;->getClosestOfStates(Landroid/app/ActivityThread$ActivityClientRecord;[I)I
 HSPLandroid/app/servertransaction/TransactionExecutorHelper;->getClosestPreExecutionState(Landroid/app/ActivityThread$ActivityClientRecord;I)I
 HSPLandroid/app/servertransaction/TransactionExecutorHelper;->getLifecyclePath(IIZ)Landroid/util/IntArray;
 HSPLandroid/app/servertransaction/TransactionExecutorHelper;->lastCallbackRequestingState(Landroid/app/servertransaction/ClientTransaction;)I
-HPLandroid/app/servertransaction/TransactionExecutorHelper;->pathInvolvesDestruction(Landroid/util/IntArray;)Z
-HSPLandroid/app/servertransaction/WindowVisibilityItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/WindowVisibilityItem;
-HSPLandroid/app/servertransaction/WindowVisibilityItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/servertransaction/WindowVisibilityItem;-><init>()V
-HSPLandroid/app/servertransaction/WindowVisibilityItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/app/servertransaction/PendingTransactionActions;)V
-PLandroid/app/servertransaction/WindowVisibilityItem;->obtain(Z)Landroid/app/servertransaction/WindowVisibilityItem;
-PLandroid/app/servertransaction/WindowVisibilityItem;->recycle()V
-PLandroid/app/servertransaction/WindowVisibilityItem;->writeToParcel(Landroid/os/Parcel;I)V
-HSLandroid/app/slice/-$$Lambda$SliceProvider$bIgM5f4PsMvz_YYWEeFTjvTqevw;-><init>(Landroid/app/slice/SliceProvider;)V
-HSLandroid/app/slice/ISliceManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/app/slice/ISliceManager$Stub$Proxy;->checkSlicePermission(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;II[Ljava/lang/String;)I
-HSPLandroid/app/slice/ISliceManager$Stub$Proxy;->getPinnedSlices(Ljava/lang/String;)[Landroid/net/Uri;
-HPLandroid/app/slice/ISliceManager$Stub$Proxy;->getPinnedSpecs(Landroid/net/Uri;Ljava/lang/String;)[Landroid/app/slice/SliceSpec;
-HSPLandroid/app/slice/ISliceManager$Stub$Proxy;->grantSlicePermission(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)V
-HSPLandroid/app/slice/ISliceManager$Stub$Proxy;->pinSlice(Ljava/lang/String;Landroid/net/Uri;[Landroid/app/slice/SliceSpec;Landroid/os/IBinder;)V
-HSPLandroid/app/slice/ISliceManager$Stub$Proxy;->unpinSlice(Ljava/lang/String;Landroid/net/Uri;Landroid/os/IBinder;)V
-HSPLandroid/app/slice/ISliceManager$Stub;-><init>()V
+HSPLandroid/app/slice/-$$Lambda$SliceProvider$bIgM5f4PsMvz_YYWEeFTjvTqevw;-><init>(Landroid/app/slice/SliceProvider;)V
+HSPLandroid/app/slice/ISliceManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/app/slice/ISliceManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/slice/ISliceManager;
-PLandroid/app/slice/ISliceManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/app/slice/ISliceManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/slice/Slice$Builder;-><init>(Landroid/net/Uri;Landroid/app/slice/SliceSpec;)V
-HSPLandroid/app/slice/Slice$Builder;->addAction(Landroid/app/PendingIntent;Landroid/app/slice/Slice;Ljava/lang/String;)Landroid/app/slice/Slice$Builder;
-HSPLandroid/app/slice/Slice$Builder;->addHints(Ljava/util/List;)Landroid/app/slice/Slice$Builder;
-HSPLandroid/app/slice/Slice$Builder;->addIcon(Landroid/graphics/drawable/Icon;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;
-HSPLandroid/app/slice/Slice$Builder;->addInt(ILjava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;
-HSPLandroid/app/slice/Slice$Builder;->addLong(JLjava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;
-HSPLandroid/app/slice/Slice$Builder;->addSubSlice(Landroid/app/slice/Slice;Ljava/lang/String;)Landroid/app/slice/Slice$Builder;
-HSPLandroid/app/slice/Slice$Builder;->addText(Ljava/lang/CharSequence;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;
-HSPLandroid/app/slice/Slice$Builder;->build()Landroid/app/slice/Slice;
-HSPLandroid/app/slice/Slice;->getHints()Ljava/util/List;
-HSPLandroid/app/slice/Slice;->getItems()Ljava/util/List;
-HSPLandroid/app/slice/Slice;->getSpec()Landroid/app/slice/SliceSpec;
-HSPLandroid/app/slice/Slice;->getUri()Landroid/net/Uri;
-HSPLandroid/app/slice/SliceItem;->getAction()Landroid/app/PendingIntent;
-HSPLandroid/app/slice/SliceItem;->getFormat()Ljava/lang/String;
-HSPLandroid/app/slice/SliceItem;->getHints()Ljava/util/List;
-HSPLandroid/app/slice/SliceItem;->getIcon()Landroid/graphics/drawable/Icon;
-HSPLandroid/app/slice/SliceItem;->getInt()I
-HSPLandroid/app/slice/SliceItem;->getLong()J
-HSPLandroid/app/slice/SliceItem;->getSlice()Landroid/app/slice/Slice;
-HSPLandroid/app/slice/SliceItem;->getSubType()Ljava/lang/String;
-HSPLandroid/app/slice/SliceItem;->getText()Ljava/lang/CharSequence;
 HSPLandroid/app/slice/SliceManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
-HSPLandroid/app/slice/SliceManager;->bindSlice(Landroid/net/Uri;Ljava/util/Set;)Landroid/app/slice/Slice;
-HSPLandroid/app/slice/SliceManager;->checkSlicePermission(Landroid/net/Uri;II)I
-HSPLandroid/app/slice/SliceManager;->enforceSlicePermission(Landroid/net/Uri;Ljava/lang/String;II[Ljava/lang/String;)V
-HSPLandroid/app/slice/SliceManager;->getPinnedSlices()Ljava/util/List;
-HPLandroid/app/slice/SliceManager;->getPinnedSpecs(Landroid/net/Uri;)Ljava/util/Set;
-HSPLandroid/app/slice/SliceManager;->grantSlicePermission(Ljava/lang/String;Landroid/net/Uri;)V
-HSPLandroid/app/slice/SliceManager;->pinSlice(Landroid/net/Uri;Ljava/util/Set;)V
-HSPLandroid/app/slice/SliceManager;->unpinSlice(Landroid/net/Uri;)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;
-HSPLandroid/app/slice/SliceProvider;->handleBindSlice(Landroid/net/Uri;Ljava/util/List;Ljava/lang/String;II)Landroid/app/slice/Slice;
-HSPLandroid/app/slice/SliceProvider;->handlePinSlice(Landroid/net/Uri;)V
-HSPLandroid/app/slice/SliceProvider;->handleUnpinSlice(Landroid/net/Uri;)V
-HSPLandroid/app/slice/SliceProvider;->onBindSliceStrict(Landroid/net/Uri;Ljava/util/List;)Landroid/app/slice/Slice;
-PLandroid/app/slice/SliceSpec$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/slice/SliceSpec;
-PLandroid/app/slice/SliceSpec$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/slice/SliceSpec$1;->newArray(I)[Landroid/app/slice/SliceSpec;
-PLandroid/app/slice/SliceSpec$1;->newArray(I)[Ljava/lang/Object;
-PLandroid/app/slice/SliceSpec;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/app/slice/SliceSpec;-><init>(Ljava/lang/String;I)V
+HSPLandroid/app/slice/SliceSpec$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/slice/SliceSpec;
+HSPLandroid/app/slice/SliceSpec$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/slice/SliceSpec;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/slice/SliceSpec;->getRevision()I
 HSPLandroid/app/slice/SliceSpec;->getType()Ljava/lang/String;
-PLandroid/app/slice/SliceSpec;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/timedetector/ITimeDetectorService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/app/timedetector/ITimeDetectorService$Stub;-><init>()V
-HSPLandroid/app/timedetector/ITimeDetectorService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/timedetector/ITimeDetectorService;
-PLandroid/app/timedetector/ITimeDetectorService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/timedetector/TimeDetector;-><init>()V
-HSPLandroid/app/timezonedetector/ITimeZoneDetectorService$Stub;-><init>()V
-HSPLandroid/app/timezonedetector/ITimeZoneDetectorService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/timezonedetector/ITimeZoneDetectorService;
-PLandroid/app/timezonedetector/ITimeZoneDetectorService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$1;-><init>()V
-PLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;
-PLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;-><init>(I)V
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;->access$100(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;)I
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;->access$200(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;)Ljava/lang/String;
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;->access$300(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;)I
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;->access$400(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;)I
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;->access$500(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;)Ljava/util/List;
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;->build()Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;->setMatchType(I)Landroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;->setQuality(I)Landroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;->setZoneId(Ljava/lang/String;)Landroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;->validate()V
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion;-><clinit>()V
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion;-><init>(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;)V
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion;-><init>(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion$Builder;Landroid/app/timezonedetector/PhoneTimeZoneSuggestion$1;)V
-PLandroid/app/timezonedetector/PhoneTimeZoneSuggestion;->access$000(Landroid/os/Parcel;)Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;
-PLandroid/app/timezonedetector/PhoneTimeZoneSuggestion;->addDebugInfo(Ljava/util/List;)V
-PLandroid/app/timezonedetector/PhoneTimeZoneSuggestion;->createFromParcel(Landroid/os/Parcel;)Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;
-PLandroid/app/timezonedetector/PhoneTimeZoneSuggestion;->getMatchType()I
-PLandroid/app/timezonedetector/PhoneTimeZoneSuggestion;->getPhoneId()I
-PLandroid/app/timezonedetector/PhoneTimeZoneSuggestion;->getQuality()I
-PLandroid/app/timezonedetector/PhoneTimeZoneSuggestion;->getZoneId()Ljava/lang/String;
-HSPLandroid/app/timezonedetector/PhoneTimeZoneSuggestion;->toString()Ljava/lang/String;
-HSPLandroid/app/timezonedetector/TimeZoneDetector;-><init>()V
-HSPLandroid/app/timezonedetector/TimeZoneDetector;->suggestPhoneTimeZone(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;)V
-HSPLandroid/app/trust/IStrongAuthTracker$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/app/trust/IStrongAuthTracker$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/app/trust/IStrongAuthTracker$Stub$Proxy;->onStrongAuthRequiredChanged(II)V
-HSPLandroid/app/trust/IStrongAuthTracker$Stub;-><init>()V
-PLandroid/app/trust/IStrongAuthTracker$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/app/trust/IStrongAuthTracker$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/trust/IStrongAuthTracker;
-HPLandroid/app/trust/IStrongAuthTracker$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/trust/ITrustListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/app/trust/ITrustListener$Stub$Proxy;->onTrustChanged(ZII)V
-PLandroid/app/trust/ITrustListener$Stub$Proxy;->onTrustManagedChanged(ZI)V
-HSPLandroid/app/trust/ITrustListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/trust/ITrustListener;
-HPLandroid/app/trust/ITrustListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/app/slice/SliceSpec;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/trust/ITrustManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/app/trust/ITrustManager$Stub$Proxy;->clearAllBiometricRecognized(Landroid/hardware/biometrics/BiometricSourceType;)V
 HSPLandroid/app/trust/ITrustManager$Stub$Proxy;->isDeviceLocked(I)Z
-HSPLandroid/app/trust/ITrustManager$Stub$Proxy;->isDeviceSecure(I)Z
-HPLandroid/app/trust/ITrustManager$Stub$Proxy;->isTrustUsuallyManaged(I)Z
-HPLandroid/app/trust/ITrustManager$Stub$Proxy;->reportKeyguardShowingChanged()V
-HPLandroid/app/trust/ITrustManager$Stub$Proxy;->reportUnlockAttempt(ZI)V
-HPLandroid/app/trust/ITrustManager$Stub$Proxy;->unlockedByBiometricForUser(ILandroid/hardware/biometrics/BiometricSourceType;)V
-HSPLandroid/app/trust/ITrustManager$Stub;-><init>()V
 HSPLandroid/app/trust/ITrustManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/trust/ITrustManager;
-PLandroid/app/trust/ITrustManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/app/trust/ITrustManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/app/trust/TrustManager$1;->onTrustChanged(ZII)V
-HPLandroid/app/trust/TrustManager$1;->onTrustManagedChanged(ZI)V
-HSPLandroid/app/trust/TrustManager$2;-><init>(Landroid/app/trust/TrustManager;Landroid/os/Looper;)V
-HPLandroid/app/trust/TrustManager$2;->handleMessage(Landroid/os/Message;)V
-HSPLandroid/app/trust/TrustManager;-><init>(Landroid/os/IBinder;)V
-HPLandroid/app/trust/TrustManager;->access$000(Landroid/app/trust/TrustManager;)Landroid/os/Handler;
-HPLandroid/app/trust/TrustManager;->clearAllBiometricRecognized(Landroid/hardware/biometrics/BiometricSourceType;)V
-HPLandroid/app/trust/TrustManager;->isTrustUsuallyManaged(I)Z
-HPLandroid/app/trust/TrustManager;->reportKeyguardShowingChanged()V
-HPLandroid/app/trust/TrustManager;->reportUnlockAttempt(ZI)V
-HPLandroid/app/trust/TrustManager;->unlockedByBiometricForUser(ILandroid/hardware/biometrics/BiometricSourceType;)V
-HSPLandroid/app/usage/AppStandbyInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/AppStandbyInfo;
-HSPLandroid/app/usage/AppStandbyInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/app/usage/AppStandbyInfo;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/usage/AppStandbyInfo;-><init>(Landroid/os/Parcel;Landroid/app/usage/AppStandbyInfo$1;)V
-HSPLandroid/app/usage/AppStandbyInfo;-><init>(Ljava/lang/String;I)V
-HSPLandroid/app/usage/AppStandbyInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/usage/CacheQuotaHint$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/CacheQuotaHint;
-PLandroid/app/usage/CacheQuotaHint$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/usage/CacheQuotaHint$Builder;-><init>()V
-HSPLandroid/app/usage/CacheQuotaHint$Builder;->access$000(Landroid/app/usage/CacheQuotaHint$Builder;)Ljava/lang/String;
-HSPLandroid/app/usage/CacheQuotaHint$Builder;->access$100(Landroid/app/usage/CacheQuotaHint$Builder;)I
-HSPLandroid/app/usage/CacheQuotaHint$Builder;->access$200(Landroid/app/usage/CacheQuotaHint$Builder;)Landroid/app/usage/UsageStats;
-HSPLandroid/app/usage/CacheQuotaHint$Builder;->access$300(Landroid/app/usage/CacheQuotaHint$Builder;)J
-HSPLandroid/app/usage/CacheQuotaHint$Builder;->build()Landroid/app/usage/CacheQuotaHint;
-HSPLandroid/app/usage/CacheQuotaHint$Builder;->setQuota(J)Landroid/app/usage/CacheQuotaHint$Builder;
-HSPLandroid/app/usage/CacheQuotaHint$Builder;->setUid(I)Landroid/app/usage/CacheQuotaHint$Builder;
-PLandroid/app/usage/CacheQuotaHint$Builder;->setUsageStats(Landroid/app/usage/UsageStats;)Landroid/app/usage/CacheQuotaHint$Builder;
-HSPLandroid/app/usage/CacheQuotaHint$Builder;->setVolumeUuid(Ljava/lang/String;)Landroid/app/usage/CacheQuotaHint$Builder;
-HSPLandroid/app/usage/CacheQuotaHint;-><init>(Landroid/app/usage/CacheQuotaHint$Builder;)V
-HSPLandroid/app/usage/CacheQuotaHint;->getQuota()J
-HSPLandroid/app/usage/CacheQuotaHint;->getUid()I
-HSPLandroid/app/usage/CacheQuotaHint;->getVolumeUuid()Ljava/lang/String;
-PLandroid/app/usage/CacheQuotaHint;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/usage/ConfigurationStats;-><init>()V
-PLandroid/app/usage/EventList;-><init>()V
-PLandroid/app/usage/EventList;->clear()V
-HPLandroid/app/usage/EventList;->firstIndexOnOrAfter(J)I
-HPLandroid/app/usage/EventList;->get(I)Landroid/app/usage/UsageEvents$Event;
-HPLandroid/app/usage/EventList;->insert(Landroid/app/usage/UsageEvents$Event;)V
-PLandroid/app/usage/EventList;->remove(I)Landroid/app/usage/UsageEvents$Event;
-HPLandroid/app/usage/EventList;->size()I
-PLandroid/app/usage/ExternalStorageStats$1;-><init>()V
-PLandroid/app/usage/ExternalStorageStats;-><clinit>()V
-PLandroid/app/usage/ExternalStorageStats;-><init>()V
-PLandroid/app/usage/ExternalStorageStats;->getAudioBytes()J
-PLandroid/app/usage/ExternalStorageStats;->getImageBytes()J
-PLandroid/app/usage/ExternalStorageStats;->getTotalBytes()J
-PLandroid/app/usage/ExternalStorageStats;->getVideoBytes()J
-PLandroid/app/usage/ICacheQuotaService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/app/usage/ICacheQuotaService$Stub$Proxy;->computeCacheQuotaHints(Landroid/os/RemoteCallback;Ljava/util/List;)V
-PLandroid/app/usage/ICacheQuotaService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/usage/ICacheQuotaService;
-HSPLandroid/app/usage/IStorageStatsManager$Stub$Proxy;->getFreeBytes(Ljava/lang/String;Ljava/lang/String;)J
-HSPLandroid/app/usage/IStorageStatsManager$Stub$Proxy;->getTotalBytes(Ljava/lang/String;Ljava/lang/String;)J
-HPLandroid/app/usage/IStorageStatsManager$Stub$Proxy;->queryStatsForPackage(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/app/usage/StorageStats;
-HSPLandroid/app/usage/IStorageStatsManager$Stub;-><init>()V
-PLandroid/app/usage/IStorageStatsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/usage/IStorageStatsManager;
-PLandroid/app/usage/IStorageStatsManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/app/usage/IStorageStatsManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/app/usage/IUsageStatsManager$Stub$Proxy;->getAppStandbyBucket(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLandroid/app/usage/IUsageStatsManager$Stub$Proxy;->getAppStandbyBuckets(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/app/usage/IUsageStatsManager$Stub$Proxy;->getUsageSource()I
-HPLandroid/app/usage/IUsageStatsManager$Stub$Proxy;->isAppInactive(Ljava/lang/String;I)Z
-HSPLandroid/app/usage/IUsageStatsManager$Stub$Proxy;->queryEvents(JJLjava/lang/String;)Landroid/app/usage/UsageEvents;
-PLandroid/app/usage/IUsageStatsManager$Stub$Proxy;->queryUsageStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/app/usage/IUsageStatsManager$Stub$Proxy;->setAppStandbyBuckets(Landroid/content/pm/ParceledListSlice;I)V
-HSPLandroid/app/usage/IUsageStatsManager$Stub;-><init>()V
+HSPLandroid/app/usage/IStorageStatsManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/app/usage/IStorageStatsManager$Stub$Proxy;->queryStatsForPackage(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/app/usage/StorageStats;
+HSPLandroid/app/usage/IStorageStatsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/usage/IStorageStatsManager;
+HSPLandroid/app/usage/IUsageStatsManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/app/usage/IUsageStatsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/usage/IUsageStatsManager;
-PLandroid/app/usage/IUsageStatsManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/app/usage/IUsageStatsManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/app/usage/NetworkStats$Bucket;-><init>()V
-PLandroid/app/usage/NetworkStats$Bucket;->access$000(I)I
-PLandroid/app/usage/NetworkStats$Bucket;->access$102(Landroid/app/usage/NetworkStats$Bucket;I)I
-PLandroid/app/usage/NetworkStats$Bucket;->access$1102(Landroid/app/usage/NetworkStats$Bucket;I)I
-PLandroid/app/usage/NetworkStats$Bucket;->access$1302(Landroid/app/usage/NetworkStats$Bucket;J)J
-PLandroid/app/usage/NetworkStats$Bucket;->access$1402(Landroid/app/usage/NetworkStats$Bucket;J)J
-PLandroid/app/usage/NetworkStats$Bucket;->access$1502(Landroid/app/usage/NetworkStats$Bucket;J)J
-PLandroid/app/usage/NetworkStats$Bucket;->access$1602(Landroid/app/usage/NetworkStats$Bucket;J)J
-PLandroid/app/usage/NetworkStats$Bucket;->access$1702(Landroid/app/usage/NetworkStats$Bucket;J)J
-PLandroid/app/usage/NetworkStats$Bucket;->access$1802(Landroid/app/usage/NetworkStats$Bucket;J)J
-PLandroid/app/usage/NetworkStats$Bucket;->access$200(I)I
-PLandroid/app/usage/NetworkStats$Bucket;->access$302(Landroid/app/usage/NetworkStats$Bucket;I)I
-PLandroid/app/usage/NetworkStats$Bucket;->access$400(I)I
-PLandroid/app/usage/NetworkStats$Bucket;->access$502(Landroid/app/usage/NetworkStats$Bucket;I)I
-PLandroid/app/usage/NetworkStats$Bucket;->access$702(Landroid/app/usage/NetworkStats$Bucket;I)I
-PLandroid/app/usage/NetworkStats$Bucket;->access$902(Landroid/app/usage/NetworkStats$Bucket;I)I
-PLandroid/app/usage/NetworkStats$Bucket;->convertSet(I)I
-PLandroid/app/usage/NetworkStats$Bucket;->convertTag(I)I
-PLandroid/app/usage/NetworkStats$Bucket;->convertUid(I)I
-PLandroid/app/usage/NetworkStats$Bucket;->getEndTimeStamp()J
-PLandroid/app/usage/NetworkStats$Bucket;->getRxBytes()J
-PLandroid/app/usage/NetworkStats$Bucket;->getRxPackets()J
-PLandroid/app/usage/NetworkStats$Bucket;->getStartTimeStamp()J
-PLandroid/app/usage/NetworkStats$Bucket;->getTxBytes()J
-PLandroid/app/usage/NetworkStats$Bucket;->getTxPackets()J
-HPLandroid/app/usage/NetworkStats;-><init>(Landroid/content/Context;Landroid/net/NetworkTemplate;IJJLandroid/net/INetworkStatsService;)V
-HPLandroid/app/usage/NetworkStats;->close()V
-HPLandroid/app/usage/NetworkStats;->finalize()V
-HPLandroid/app/usage/NetworkStats;->getNextBucket(Landroid/app/usage/NetworkStats$Bucket;)Z
-HPLandroid/app/usage/NetworkStats;->getNextHistoryBucket(Landroid/app/usage/NetworkStats$Bucket;)Z
-PLandroid/app/usage/NetworkStats;->getUid()I
-HPLandroid/app/usage/NetworkStats;->hasNextUid()Z
-HPLandroid/app/usage/NetworkStats;->isUidEnumeration()Z
-PLandroid/app/usage/NetworkStats;->setSingleUidTagState(III)V
-HPLandroid/app/usage/NetworkStats;->startHistoryEnumeration(III)V
 HSPLandroid/app/usage/NetworkStatsManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/app/usage/NetworkStatsManager;-><init>(Landroid/content/Context;Landroid/net/INetworkStatsService;)V
-HPLandroid/app/usage/NetworkStatsManager;->createTemplate(ILjava/lang/String;)Landroid/net/NetworkTemplate;
-HPLandroid/app/usage/NetworkStatsManager;->queryDetailsForUidTag(ILjava/lang/String;JJII)Landroid/app/usage/NetworkStats;
-HPLandroid/app/usage/NetworkStatsManager;->queryDetailsForUidTagState(ILjava/lang/String;JJIII)Landroid/app/usage/NetworkStats;
-HPLandroid/app/usage/NetworkStatsManager;->queryDetailsForUidTagState(Landroid/net/NetworkTemplate;JJIII)Landroid/app/usage/NetworkStats;
-HPLandroid/app/usage/NetworkStatsManager;->querySummary(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats;
-HPLandroid/app/usage/NetworkStatsManager;->querySummary(Landroid/net/NetworkTemplate;JJ)Landroid/app/usage/NetworkStats;
 HSPLandroid/app/usage/NetworkStatsManager;->setPollOnOpen(Z)V
-HPLandroid/app/usage/StorageStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/StorageStats;
-HPLandroid/app/usage/StorageStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/app/usage/StorageStats;->getAppBytes()J
-HPLandroid/app/usage/StorageStats;->getCacheBytes()J
-HPLandroid/app/usage/StorageStats;->getDataBytes()J
-PLandroid/app/usage/StorageStats;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/app/usage/StorageStatsManager;-><init>(Landroid/content/Context;Landroid/app/usage/IStorageStatsManager;)V
-PLandroid/app/usage/StorageStatsManager;->getCacheBytes(Ljava/lang/String;)J
-PLandroid/app/usage/StorageStatsManager;->getCacheBytes(Ljava/util/UUID;)J
-PLandroid/app/usage/StorageStatsManager;->getCacheQuotaBytes(Ljava/lang/String;I)J
-HSPLandroid/app/usage/StorageStatsManager;->getFreeBytes(Ljava/util/UUID;)J
-HSPLandroid/app/usage/StorageStatsManager;->getTotalBytes(Ljava/util/UUID;)J
-PLandroid/app/usage/StorageStatsManager;->isQuotaSupported(Ljava/lang/String;)Z
-PLandroid/app/usage/StorageStatsManager;->isQuotaSupported(Ljava/util/UUID;)Z
-PLandroid/app/usage/StorageStatsManager;->queryExternalStatsForUser(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/app/usage/ExternalStorageStats;
-PLandroid/app/usage/StorageStatsManager;->queryExternalStatsForUser(Ljava/util/UUID;Landroid/os/UserHandle;)Landroid/app/usage/ExternalStorageStats;
-PLandroid/app/usage/StorageStatsManager;->queryStatsForPackage(Ljava/util/UUID;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/app/usage/StorageStats;
-PLandroid/app/usage/StorageStatsManager;->queryStatsForUid(Ljava/lang/String;I)Landroid/app/usage/StorageStats;
-PLandroid/app/usage/StorageStatsManager;->queryStatsForUid(Ljava/util/UUID;I)Landroid/app/usage/StorageStats;
-PLandroid/app/usage/TimeSparseArray;-><init>()V
-PLandroid/app/usage/TimeSparseArray;->closestIndexOnOrAfter(J)I
-PLandroid/app/usage/TimeSparseArray;->closestIndexOnOrBefore(J)I
-PLandroid/app/usage/TimeSparseArray;->put(JLjava/lang/Object;)V
+HSPLandroid/app/usage/StorageStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/StorageStats;
+HSPLandroid/app/usage/StorageStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/usage/StorageStats;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/usage/StorageStats;->getAppBytes()J
+HSPLandroid/app/usage/StorageStats;->getCacheBytes()J
+HSPLandroid/app/usage/StorageStats;->getDataBytes()J
+HSPLandroid/app/usage/StorageStatsManager;-><init>(Landroid/content/Context;Landroid/app/usage/IStorageStatsManager;)V
+HSPLandroid/app/usage/StorageStatsManager;->queryStatsForPackage(Ljava/util/UUID;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/app/usage/StorageStats;
 HSPLandroid/app/usage/UsageEvents$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/UsageEvents;
 HSPLandroid/app/usage/UsageEvents$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/usage/UsageEvents$Event;-><init>()V
-HSPLandroid/app/usage/UsageEvents$Event;-><init>(IJ)V
-PLandroid/app/usage/UsageEvents$Event;-><init>(Landroid/app/usage/UsageEvents$Event;)V
-PLandroid/app/usage/UsageEvents$Event;->getClassName()Ljava/lang/String;
-PLandroid/app/usage/UsageEvents$Event;->getConfiguration()Landroid/content/res/Configuration;
+HSPLandroid/app/usage/UsageEvents$Event;->getClassName()Ljava/lang/String;
 HSPLandroid/app/usage/UsageEvents$Event;->getEventType()I
-HSPLandroid/app/usage/UsageEvents$Event;->getInstanceId()I
-PLandroid/app/usage/UsageEvents$Event;->getObfuscatedIfInstantApp()Landroid/app/usage/UsageEvents$Event;
 HSPLandroid/app/usage/UsageEvents$Event;->getPackageName()Ljava/lang/String;
-HPLandroid/app/usage/UsageEvents$Event;->getTaskRootPackageName()Ljava/lang/String;
-HSPLandroid/app/usage/UsageEvents$Event;->getTimeStamp()J
-PLandroid/app/usage/UsageEvents$Event;->isInstantApp()Z
 HSPLandroid/app/usage/UsageEvents;-><init>(Landroid/os/Parcel;)V
-PLandroid/app/usage/UsageEvents;-><init>(Ljava/util/List;[Ljava/lang/String;Z)V
-HPLandroid/app/usage/UsageEvents;->findStringIndex(Ljava/lang/String;)I
 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
-HPLandroid/app/usage/UsageEvents;->writeEventToParcel(Landroid/app/usage/UsageEvents$Event;Landroid/os/Parcel;I)V
-HPLandroid/app/usage/UsageEvents;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/app/usage/UsageStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/UsageStats;
-HPLandroid/app/usage/UsageStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/app/usage/UsageStats$1;->readBundleToEventMap(Landroid/os/Bundle;Landroid/util/ArrayMap;)V
-PLandroid/app/usage/UsageStats$1;->readSparseIntArray(Landroid/os/Parcel;Landroid/util/SparseIntArray;)V
-HPLandroid/app/usage/UsageStats;-><init>()V
-HPLandroid/app/usage/UsageStats;-><init>(Landroid/app/usage/UsageStats;)V
-HPLandroid/app/usage/UsageStats;->add(Landroid/app/usage/UsageStats;)V
-PLandroid/app/usage/UsageStats;->anyForegroundServiceStarted()Z
-HPLandroid/app/usage/UsageStats;->eventMapToBundle(Landroid/util/ArrayMap;)Landroid/os/Bundle;
-HPLandroid/app/usage/UsageStats;->getFirstTimeStamp()J
-HPLandroid/app/usage/UsageStats;->getLastTimeStamp()J
-HPLandroid/app/usage/UsageStats;->getLastTimeUsed()J
-HPLandroid/app/usage/UsageStats;->getPackageName()Ljava/lang/String;
-PLandroid/app/usage/UsageStats;->getTotalTimeInForeground()J
-PLandroid/app/usage/UsageStats;->hasVisibleActivity()Z
-PLandroid/app/usage/UsageStats;->incrementServiceTimeUsed(J)V
-PLandroid/app/usage/UsageStats;->incrementTimeUsed(J)V
-PLandroid/app/usage/UsageStats;->incrementTimeVisible(J)V
-HPLandroid/app/usage/UsageStats;->mergeEventMap(Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
-HPLandroid/app/usage/UsageStats;->mergeEventMap(Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;)V
-HPLandroid/app/usage/UsageStats;->update(Ljava/lang/String;JII)V
-HPLandroid/app/usage/UsageStats;->updateActivity(Ljava/lang/String;JII)V
-PLandroid/app/usage/UsageStats;->updateForegroundService(Ljava/lang/String;JI)V
-PLandroid/app/usage/UsageStats;->writeSparseIntArray(Landroid/os/Parcel;Landroid/util/SparseIntArray;)V
-HPLandroid/app/usage/UsageStats;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/usage/UsageStats;-><init>()V
 HSPLandroid/app/usage/UsageStatsManager;-><init>(Landroid/content/Context;Landroid/app/usage/IUsageStatsManager;)V
-HSPLandroid/app/usage/UsageStatsManager;->getAppStandbyBucket()I
-HPLandroid/app/usage/UsageStatsManager;->getAppStandbyBucket(Ljava/lang/String;)I
-HSPLandroid/app/usage/UsageStatsManager;->getAppStandbyBuckets()Ljava/util/Map;
-HSPLandroid/app/usage/UsageStatsManager;->getUsageSource()I
-HPLandroid/app/usage/UsageStatsManager;->isAppInactive(Ljava/lang/String;)Z
-HPLandroid/app/usage/UsageStatsManager;->queryAndAggregateUsageStats(JJ)Ljava/util/Map;
-HSPLandroid/app/usage/UsageStatsManager;->queryEvents(JJ)Landroid/app/usage/UsageEvents;
-PLandroid/app/usage/UsageStatsManager;->queryUsageStats(IJJ)Ljava/util/List;
-HPLandroid/app/usage/UsageStatsManager;->reasonToString(I)Ljava/lang/String;
-HSPLandroid/app/usage/UsageStatsManager;->setAppStandbyBuckets(Ljava/util/Map;)V
-PLandroid/app/usage/UsageStatsManager;->usageSourceToString(I)Ljava/lang/String;
-HPLandroid/app/usage/UsageStatsManager;->whitelistAppTemporarily(Ljava/lang/String;JLandroid/os/UserHandle;)V
 HSPLandroid/appwidget/AppWidgetManager;-><init>(Landroid/content/Context;Lcom/android/internal/appwidget/IAppWidgetService;)V
-HSPLandroid/appwidget/AppWidgetManager;->getAppWidgetIds(Landroid/content/ComponentName;)[I
-HSPLandroid/appwidget/AppWidgetManager;->getInstalledProvidersForProfile(ILandroid/os/UserHandle;Ljava/lang/String;)Ljava/util/List;
-HSPLandroid/appwidget/AppWidgetManager;->getInstalledProvidersForProfile(Landroid/os/UserHandle;)Ljava/util/List;
 HSPLandroid/appwidget/AppWidgetManager;->getInstance(Landroid/content/Context;)Landroid/appwidget/AppWidgetManager;
-HSPLandroid/appwidget/AppWidgetManager;->isBoundWidgetPackage(Ljava/lang/String;I)Z
-HSPLandroid/appwidget/AppWidgetManager;->updateAppWidget(Landroid/content/ComponentName;Landroid/widget/RemoteViews;)V
-HSPLandroid/appwidget/AppWidgetManagerInternal;-><init>()V
-HSPLandroid/appwidget/AppWidgetProvider;-><init>()V
-HSPLandroid/appwidget/AppWidgetProvider;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HSPLandroid/appwidget/AppWidgetProviderInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/appwidget/AppWidgetProviderInfo;
-HSPLandroid/appwidget/AppWidgetProviderInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/appwidget/AppWidgetProviderInfo;-><init>()V
-HSPLandroid/appwidget/AppWidgetProviderInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/appwidget/AppWidgetProviderInfo;->getProfile()Landroid/os/UserHandle;
-HSPLandroid/appwidget/AppWidgetProviderInfo;->loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/String;
-HSPLandroid/appwidget/AppWidgetProviderInfo;->updateDimensions(Landroid/util/DisplayMetrics;)V
-HSPLandroid/appwidget/AppWidgetProviderInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/attention/AttentionManagerInternal$AttentionCallbackInternal;-><init>()V
-HSPLandroid/attention/AttentionManagerInternal;-><init>()V
-PLandroid/bluetooth/-$$Lambda$BluetoothAdapter$2$INSd_aND-SGWhhPZUtIqya_Uxw4;-><init>(Landroid/bluetooth/BluetoothAdapter$2;)V
+HSPLandroid/bluetooth/-$$Lambda$BluetoothAdapter$2$INSd_aND-SGWhhPZUtIqya_Uxw4;-><init>(Landroid/bluetooth/BluetoothAdapter$2;)V
 HSPLandroid/bluetooth/BluetoothA2dp$1;-><init>(Landroid/bluetooth/BluetoothA2dp;Landroid/bluetooth/BluetoothProfile;ILjava/lang/String;Ljava/lang/String;)V
-PLandroid/bluetooth/BluetoothA2dp$1;->getServiceInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothA2dp;
-PLandroid/bluetooth/BluetoothA2dp$1;->getServiceInterface(Landroid/os/IBinder;)Ljava/lang/Object;
+HSPLandroid/bluetooth/BluetoothA2dp$1;->getServiceInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothA2dp;
+HSPLandroid/bluetooth/BluetoothA2dp$1;->getServiceInterface(Landroid/os/IBinder;)Ljava/lang/Object;
 HSPLandroid/bluetooth/BluetoothA2dp;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
-HPLandroid/bluetooth/BluetoothA2dp;->getActiveDevice()Landroid/bluetooth/BluetoothDevice;
-PLandroid/bluetooth/BluetoothA2dp;->getCodecStatus(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothCodecStatus;
-PLandroid/bluetooth/BluetoothA2dp;->getConnectedDevices()Ljava/util/List;
-PLandroid/bluetooth/BluetoothA2dp;->getService()Landroid/bluetooth/IBluetoothA2dp;
-PLandroid/bluetooth/BluetoothA2dp;->isEnabled()Z
-PLandroid/bluetooth/BluetoothA2dp;->setAvrcpAbsoluteVolume(I)V
-PLandroid/bluetooth/BluetoothActivityEnergyInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/BluetoothActivityEnergyInfo;
-PLandroid/bluetooth/BluetoothActivityEnergyInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/bluetooth/BluetoothActivityEnergyInfo;-><init>(Landroid/os/Parcel;)V
-PLandroid/bluetooth/BluetoothActivityEnergyInfo;->getBluetoothStackState()I
-PLandroid/bluetooth/BluetoothActivityEnergyInfo;->getControllerEnergyUsed()J
-PLandroid/bluetooth/BluetoothActivityEnergyInfo;->getControllerIdleTimeMillis()J
-PLandroid/bluetooth/BluetoothActivityEnergyInfo;->getControllerRxTimeMillis()J
-PLandroid/bluetooth/BluetoothActivityEnergyInfo;->getControllerTxTimeMillis()J
-PLandroid/bluetooth/BluetoothActivityEnergyInfo;->getTimeStamp()J
-PLandroid/bluetooth/BluetoothActivityEnergyInfo;->getUidTraffic()[Landroid/bluetooth/UidTraffic;
+HSPLandroid/bluetooth/BluetoothA2dp;->getConnectedDevices()Ljava/util/List;
+HSPLandroid/bluetooth/BluetoothA2dp;->getService()Landroid/bluetooth/IBluetoothA2dp;
+HSPLandroid/bluetooth/BluetoothA2dp;->isEnabled()Z
 HSPLandroid/bluetooth/BluetoothAdapter$2;-><init>(Landroid/bluetooth/BluetoothAdapter;)V
-PLandroid/bluetooth/BluetoothAdapter$2;->onBluetoothServiceDown()V
 HSPLandroid/bluetooth/BluetoothAdapter$2;->onBluetoothServiceUp(Landroid/bluetooth/IBluetooth;)V
 HSPLandroid/bluetooth/BluetoothAdapter;-><init>(Landroid/bluetooth/IBluetoothManager;)V
-PLandroid/bluetooth/BluetoothAdapter;->access$000()Ljava/util/Map;
-PLandroid/bluetooth/BluetoothAdapter;->access$100(Landroid/bluetooth/BluetoothAdapter;)Ljava/util/concurrent/locks/ReentrantReadWriteLock;
-PLandroid/bluetooth/BluetoothAdapter;->access$200(Landroid/bluetooth/BluetoothAdapter;)Landroid/bluetooth/IBluetooth;
-PLandroid/bluetooth/BluetoothAdapter;->access$202(Landroid/bluetooth/BluetoothAdapter;Landroid/bluetooth/IBluetooth;)Landroid/bluetooth/IBluetooth;
-PLandroid/bluetooth/BluetoothAdapter;->access$300(Landroid/bluetooth/BluetoothAdapter;)Ljava/util/ArrayList;
-PLandroid/bluetooth/BluetoothAdapter;->access$400(Landroid/bluetooth/BluetoothAdapter;)Ljava/util/Map;
-PLandroid/bluetooth/BluetoothAdapter;->access$500()Landroid/bluetooth/le/BluetoothLeAdvertiser;
-PLandroid/bluetooth/BluetoothAdapter;->access$600()Landroid/bluetooth/le/BluetoothLeScanner;
+HSPLandroid/bluetooth/BluetoothAdapter;->access$000()Ljava/util/Map;
+HSPLandroid/bluetooth/BluetoothAdapter;->access$100(Landroid/bluetooth/BluetoothAdapter;)Ljava/util/concurrent/locks/ReentrantReadWriteLock;
+HSPLandroid/bluetooth/BluetoothAdapter;->access$202(Landroid/bluetooth/BluetoothAdapter;Landroid/bluetooth/IBluetooth;)Landroid/bluetooth/IBluetooth;
+HSPLandroid/bluetooth/BluetoothAdapter;->access$300(Landroid/bluetooth/BluetoothAdapter;)Ljava/util/ArrayList;
 HSPLandroid/bluetooth/BluetoothAdapter;->checkBluetoothAddress(Ljava/lang/String;)Z
-HPLandroid/bluetooth/BluetoothAdapter;->disable()Z
-HPLandroid/bluetooth/BluetoothAdapter;->disableBLE()Z
-HPLandroid/bluetooth/BluetoothAdapter;->enable()Z
-HPLandroid/bluetooth/BluetoothAdapter;->enableBLE()Z
-PLandroid/bluetooth/BluetoothAdapter;->getBluetoothLeScanner()Landroid/bluetooth/le/BluetoothLeScanner;
 HSPLandroid/bluetooth/BluetoothAdapter;->getBluetoothManager()Landroid/bluetooth/IBluetoothManager;
 HSPLandroid/bluetooth/BluetoothAdapter;->getBluetoothService(Landroid/bluetooth/IBluetoothManagerCallback;)Landroid/bluetooth/IBluetooth;
 HSPLandroid/bluetooth/BluetoothAdapter;->getBondedDevices()Ljava/util/Set;
-HPLandroid/bluetooth/BluetoothAdapter;->getConnectionState()I
 HSPLandroid/bluetooth/BluetoothAdapter;->getDefaultAdapter()Landroid/bluetooth/BluetoothAdapter;
-HSPLandroid/bluetooth/BluetoothAdapter;->getLeState()I
-HSPLandroid/bluetooth/BluetoothAdapter;->getName()Ljava/lang/String;
-HSPLandroid/bluetooth/BluetoothAdapter;->getProfileConnectionState(I)I
 HSPLandroid/bluetooth/BluetoothAdapter;->getProfileProxy(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;I)Z
-HSPLandroid/bluetooth/BluetoothAdapter;->getRemoteDevice(Ljava/lang/String;)Landroid/bluetooth/BluetoothDevice;
 HSPLandroid/bluetooth/BluetoothAdapter;->getState()I
-HSPLandroid/bluetooth/BluetoothAdapter;->getSupportedProfiles()Ljava/util/List;
-HPLandroid/bluetooth/BluetoothAdapter;->getUuids()[Landroid/os/ParcelUuid;
-HSPLandroid/bluetooth/BluetoothAdapter;->isBleScanAlwaysAvailable()Z
 HSPLandroid/bluetooth/BluetoothAdapter;->isEnabled()Z
 HSPLandroid/bluetooth/BluetoothAdapter;->isHearingAidProfileSupported()Z
-PLandroid/bluetooth/BluetoothAdapter;->isLeEnabled()Z
-HSPLandroid/bluetooth/BluetoothAdapter;->isOffloadedFilteringSupported()Z
-HSPLandroid/bluetooth/BluetoothAdapter;->nameForState(I)Ljava/lang/String;
-PLandroid/bluetooth/BluetoothAdapter;->requestControllerActivityEnergyInfo(Landroid/os/ResultReceiver;)V
 HSPLandroid/bluetooth/BluetoothAdapter;->setContext(Landroid/content/Context;)V
-HPLandroid/bluetooth/BluetoothAdapter;->toDeviceSet([Landroid/bluetooth/BluetoothDevice;)Ljava/util/Set;
-HPLandroid/bluetooth/BluetoothClass$1;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/BluetoothClass;
-HPLandroid/bluetooth/BluetoothClass$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/bluetooth/BluetoothClass;-><init>(I)V
-HSPLandroid/bluetooth/BluetoothClass;->toString()Ljava/lang/String;
-HSPLandroid/bluetooth/BluetoothClass;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/bluetooth/BluetoothCodecConfig$1;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/BluetoothCodecConfig;
-PLandroid/bluetooth/BluetoothCodecConfig$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/bluetooth/BluetoothCodecConfig$1;->newArray(I)[Landroid/bluetooth/BluetoothCodecConfig;
-PLandroid/bluetooth/BluetoothCodecConfig$1;->newArray(I)[Ljava/lang/Object;
-PLandroid/bluetooth/BluetoothCodecConfig;-><init>(IIIIIJJJJ)V
-PLandroid/bluetooth/BluetoothCodecStatus$1;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/BluetoothCodecStatus;
-PLandroid/bluetooth/BluetoothCodecStatus$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/bluetooth/BluetoothCodecStatus;-><init>(Landroid/bluetooth/BluetoothCodecConfig;[Landroid/bluetooth/BluetoothCodecConfig;[Landroid/bluetooth/BluetoothCodecConfig;)V
-PLandroid/bluetooth/BluetoothDevice$1;->onBluetoothServiceDown()V
-PLandroid/bluetooth/BluetoothDevice$1;->onBluetoothServiceUp(Landroid/bluetooth/IBluetooth;)V
-PLandroid/bluetooth/BluetoothDevice$2;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/BluetoothDevice;
-PLandroid/bluetooth/BluetoothDevice$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/bluetooth/BluetoothDevice$2;->newArray(I)[Landroid/bluetooth/BluetoothDevice;
-HPLandroid/bluetooth/BluetoothDevice$2;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/bluetooth/BluetoothAdapter;->toDeviceSet([Landroid/bluetooth/BluetoothDevice;)Ljava/util/Set;
+HSPLandroid/bluetooth/BluetoothDevice$2;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/BluetoothDevice;
+HSPLandroid/bluetooth/BluetoothDevice$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/bluetooth/BluetoothDevice;-><init>(Ljava/lang/String;)V
-PLandroid/bluetooth/BluetoothDevice;->access$000()Landroid/bluetooth/IBluetooth;
-PLandroid/bluetooth/BluetoothDevice;->access$002(Landroid/bluetooth/IBluetooth;)Landroid/bluetooth/IBluetooth;
-HSPLandroid/bluetooth/BluetoothDevice;->equals(Ljava/lang/Object;)Z
 HSPLandroid/bluetooth/BluetoothDevice;->getAddress()Ljava/lang/String;
-HPLandroid/bluetooth/BluetoothDevice;->getAlias()Ljava/lang/String;
-PLandroid/bluetooth/BluetoothDevice;->getBluetoothClass()Landroid/bluetooth/BluetoothClass;
-HPLandroid/bluetooth/BluetoothDevice;->getBondState()I
-PLandroid/bluetooth/BluetoothDevice;->getName()Ljava/lang/String;
-HPLandroid/bluetooth/BluetoothDevice;->getPhonebookAccessPermission()I
 HSPLandroid/bluetooth/BluetoothDevice;->getService()Landroid/bluetooth/IBluetooth;
-HPLandroid/bluetooth/BluetoothDevice;->getUuids()[Landroid/os/ParcelUuid;
-HPLandroid/bluetooth/BluetoothDevice;->hashCode()I
 HSPLandroid/bluetooth/BluetoothDevice;->toString()Ljava/lang/String;
 HSPLandroid/bluetooth/BluetoothDevice;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/bluetooth/BluetoothGattCallback;-><init>()V
 HSPLandroid/bluetooth/BluetoothHeadset$1;-><init>(Landroid/bluetooth/BluetoothHeadset;)V
-HSPLandroid/bluetooth/BluetoothHeadset$1;->onBluetoothStateChange(Z)V
 HSPLandroid/bluetooth/BluetoothHeadset$2;-><init>(Landroid/bluetooth/BluetoothHeadset;)V
 HSPLandroid/bluetooth/BluetoothHeadset$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLandroid/bluetooth/BluetoothHeadset$2;->onServiceDisconnected(Landroid/content/ComponentName;)V
 HSPLandroid/bluetooth/BluetoothHeadset$3;-><init>(Landroid/bluetooth/BluetoothHeadset;Landroid/os/Looper;)V
 HSPLandroid/bluetooth/BluetoothHeadset$3;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/bluetooth/BluetoothHeadset;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
-PLandroid/bluetooth/BluetoothHeadset;->access$000(Landroid/bluetooth/BluetoothHeadset;)V
-HSPLandroid/bluetooth/BluetoothHeadset;->access$100(Landroid/bluetooth/BluetoothHeadset;)Z
 HSPLandroid/bluetooth/BluetoothHeadset;->access$202(Landroid/bluetooth/BluetoothHeadset;Landroid/bluetooth/IBluetoothHeadset;)Landroid/bluetooth/IBluetoothHeadset;
 HSPLandroid/bluetooth/BluetoothHeadset;->access$300(Landroid/bluetooth/BluetoothHeadset;)Landroid/os/Handler;
 HSPLandroid/bluetooth/BluetoothHeadset;->access$400(Landroid/bluetooth/BluetoothHeadset;)Landroid/bluetooth/BluetoothProfile$ServiceListener;
-PLandroid/bluetooth/BluetoothHeadset;->clccResponse(IIIIZLjava/lang/String;I)V
 HSPLandroid/bluetooth/BluetoothHeadset;->doBind()Z
-PLandroid/bluetooth/BluetoothHeadset;->doUnbind()V
-PLandroid/bluetooth/BluetoothHeadset;->getActiveDevice()Landroid/bluetooth/BluetoothDevice;
-PLandroid/bluetooth/BluetoothHeadset;->getAudioState(Landroid/bluetooth/BluetoothDevice;)I
-HPLandroid/bluetooth/BluetoothHeadset;->getConnectedDevices()Ljava/util/List;
-PLandroid/bluetooth/BluetoothHeadset;->isDisabled()Z
-PLandroid/bluetooth/BluetoothHeadset;->isEnabled()Z
-PLandroid/bluetooth/BluetoothHeadset;->phoneStateChanged(IIILjava/lang/String;ILjava/lang/String;)V
-HSPLandroid/bluetooth/BluetoothHearingAid$1;-><init>(Landroid/bluetooth/BluetoothHearingAid;Landroid/bluetooth/BluetoothProfile;ILjava/lang/String;Ljava/lang/String;)V
-PLandroid/bluetooth/BluetoothHearingAid$1;->getServiceInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothHearingAid;
-PLandroid/bluetooth/BluetoothHearingAid$1;->getServiceInterface(Landroid/os/IBinder;)Ljava/lang/Object;
-HSPLandroid/bluetooth/BluetoothHearingAid;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
-PLandroid/bluetooth/BluetoothHearingAid;->getActiveDevices()Ljava/util/List;
-PLandroid/bluetooth/BluetoothHearingAid;->getConnectedDevices()Ljava/util/List;
-HPLandroid/bluetooth/BluetoothHearingAid;->getHiSyncId(Landroid/bluetooth/BluetoothDevice;)J
-PLandroid/bluetooth/BluetoothHearingAid;->getService()Landroid/bluetooth/IBluetoothHearingAid;
-PLandroid/bluetooth/BluetoothHearingAid;->isEnabled()Z
-HPLandroid/bluetooth/BluetoothHidDevice$1;->getServiceInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothHidDevice;
-HPLandroid/bluetooth/BluetoothHidDevice$1;->getServiceInterface(Landroid/os/IBinder;)Ljava/lang/Object;
-HSPLandroid/bluetooth/BluetoothHidDevice;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
-HPLandroid/bluetooth/BluetoothHidDevice;->getConnectedDevices()Ljava/util/List;
-HPLandroid/bluetooth/BluetoothHidDevice;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
-HPLandroid/bluetooth/BluetoothHidHost$1;->getServiceInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothHidHost;
-HPLandroid/bluetooth/BluetoothHidHost$1;->getServiceInterface(Landroid/os/IBinder;)Ljava/lang/Object;
-HSPLandroid/bluetooth/BluetoothHidHost;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
-HPLandroid/bluetooth/BluetoothHidHost;->getConnectedDevices()Ljava/util/List;
+HSPLandroid/bluetooth/BluetoothHeadset;->isEnabled()Z
 HSPLandroid/bluetooth/BluetoothManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/bluetooth/BluetoothManager;->getAdapter()Landroid/bluetooth/BluetoothAdapter;
-HPLandroid/bluetooth/BluetoothMap$1;->getServiceInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothMap;
-HPLandroid/bluetooth/BluetoothMap$1;->getServiceInterface(Landroid/os/IBinder;)Ljava/lang/Object;
-HSPLandroid/bluetooth/BluetoothMap;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
-HPLandroid/bluetooth/BluetoothMap;->getConnectedDevices()Ljava/util/List;
-HPLandroid/bluetooth/BluetoothMap;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
-HPLandroid/bluetooth/BluetoothPan$1;->getServiceInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothPan;
-HPLandroid/bluetooth/BluetoothPan$1;->getServiceInterface(Landroid/os/IBinder;)Ljava/lang/Object;
-HSPLandroid/bluetooth/BluetoothPan;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
-HPLandroid/bluetooth/BluetoothPbap$1;->onBluetoothStateChange(Z)V
-HPLandroid/bluetooth/BluetoothPbap$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-HPLandroid/bluetooth/BluetoothPbap$2;->onServiceDisconnected(Landroid/content/ComponentName;)V
-HSPLandroid/bluetooth/BluetoothPbap;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothPbap$ServiceListener;)V
-HPLandroid/bluetooth/BluetoothPbap;->access$000(Ljava/lang/String;)V
-HPLandroid/bluetooth/BluetoothPbap;->access$100(Landroid/bluetooth/BluetoothPbap;)V
-HPLandroid/bluetooth/BluetoothPbap;->access$300(Landroid/bluetooth/BluetoothPbap;)Landroid/bluetooth/BluetoothPbap$ServiceListener;
-HSPLandroid/bluetooth/BluetoothPbap;->doBind()Z
-HPLandroid/bluetooth/BluetoothPbap;->doUnbind()V
-HPLandroid/bluetooth/BluetoothPbap;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
-HPLandroid/bluetooth/BluetoothPbap;->isConnected(Landroid/bluetooth/BluetoothDevice;)Z
-HPLandroid/bluetooth/BluetoothPbap;->log(Ljava/lang/String;)V
 HSPLandroid/bluetooth/BluetoothProfileConnector$1;-><init>(Landroid/bluetooth/BluetoothProfileConnector;)V
-PLandroid/bluetooth/BluetoothProfileConnector$1;->onBluetoothStateChange(Z)V
 HSPLandroid/bluetooth/BluetoothProfileConnector$2;-><init>(Landroid/bluetooth/BluetoothProfileConnector;)V
-PLandroid/bluetooth/BluetoothProfileConnector$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLandroid/bluetooth/BluetoothProfileConnector$2;->onServiceDisconnected(Landroid/content/ComponentName;)V
+HSPLandroid/bluetooth/BluetoothProfileConnector$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 HSPLandroid/bluetooth/BluetoothProfileConnector;-><init>(Landroid/bluetooth/BluetoothProfile;ILjava/lang/String;Ljava/lang/String;)V
-PLandroid/bluetooth/BluetoothProfileConnector;->access$000(Landroid/bluetooth/BluetoothProfileConnector;)Z
-PLandroid/bluetooth/BluetoothProfileConnector;->access$100(Landroid/bluetooth/BluetoothProfileConnector;)V
-PLandroid/bluetooth/BluetoothProfileConnector;->access$200(Landroid/bluetooth/BluetoothProfileConnector;Ljava/lang/String;)V
-PLandroid/bluetooth/BluetoothProfileConnector;->access$302(Landroid/bluetooth/BluetoothProfileConnector;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/bluetooth/BluetoothProfileConnector;->access$400(Landroid/bluetooth/BluetoothProfileConnector;)Landroid/bluetooth/BluetoothProfile$ServiceListener;
-PLandroid/bluetooth/BluetoothProfileConnector;->access$500(Landroid/bluetooth/BluetoothProfileConnector;)I
-PLandroid/bluetooth/BluetoothProfileConnector;->access$600(Landroid/bluetooth/BluetoothProfileConnector;)Landroid/bluetooth/BluetoothProfile;
+HSPLandroid/bluetooth/BluetoothProfileConnector;->access$200(Landroid/bluetooth/BluetoothProfileConnector;Ljava/lang/String;)V
+HSPLandroid/bluetooth/BluetoothProfileConnector;->access$302(Landroid/bluetooth/BluetoothProfileConnector;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/bluetooth/BluetoothProfileConnector;->access$400(Landroid/bluetooth/BluetoothProfileConnector;)Landroid/bluetooth/BluetoothProfile$ServiceListener;
+HSPLandroid/bluetooth/BluetoothProfileConnector;->access$500(Landroid/bluetooth/BluetoothProfileConnector;)I
+HSPLandroid/bluetooth/BluetoothProfileConnector;->access$600(Landroid/bluetooth/BluetoothProfileConnector;)Landroid/bluetooth/BluetoothProfile;
 HSPLandroid/bluetooth/BluetoothProfileConnector;->connect(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
 HSPLandroid/bluetooth/BluetoothProfileConnector;->doBind()Z
-PLandroid/bluetooth/BluetoothProfileConnector;->doUnbind()V
-PLandroid/bluetooth/BluetoothProfileConnector;->getService()Ljava/lang/Object;
+HSPLandroid/bluetooth/BluetoothProfileConnector;->getService()Ljava/lang/Object;
 HSPLandroid/bluetooth/BluetoothProfileConnector;->logDebug(Ljava/lang/String;)V
-HPLandroid/bluetooth/BluetoothSap$1;->getServiceInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothSap;
-HPLandroid/bluetooth/BluetoothSap$1;->getServiceInterface(Landroid/os/IBinder;)Ljava/lang/Object;
-HSPLandroid/bluetooth/BluetoothSap;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
-HPLandroid/bluetooth/BluetoothSap;->getConnectedDevices()Ljava/util/List;
-HPLandroid/bluetooth/BluetoothUuid;->containsAnyUuid([Landroid/os/ParcelUuid;[Landroid/os/ParcelUuid;)Z
-HPLandroid/bluetooth/BluetoothUuid;->is16BitUuid(Landroid/os/ParcelUuid;)Z
-PLandroid/bluetooth/BluetoothUuid;->parseUuidFrom([B)Landroid/os/ParcelUuid;
-HPLandroid/bluetooth/BluetoothUuid;->uuidToBytes(Landroid/os/ParcelUuid;)[B
 HSPLandroid/bluetooth/IBluetooth$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/bluetooth/IBluetooth$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/bluetooth/IBluetooth$Stub$Proxy;->disable()Z
-PLandroid/bluetooth/IBluetooth$Stub$Proxy;->enable(Z)Z
-HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getAdapterConnectionState()I
-HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getBondState(Landroid/bluetooth/BluetoothDevice;)I
-HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getBondedDevices()[Landroid/bluetooth/BluetoothDevice;
-PLandroid/bluetooth/IBluetooth$Stub$Proxy;->getName()Ljava/lang/String;
-HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getPhonebookAccessPermission(Landroid/bluetooth/BluetoothDevice;)I
-HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getRemoteAlias(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;
-PLandroid/bluetooth/IBluetooth$Stub$Proxy;->getRemoteClass(Landroid/bluetooth/BluetoothDevice;)I
-PLandroid/bluetooth/IBluetooth$Stub$Proxy;->getRemoteName(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;
-HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getRemoteUuids(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;
 HSPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getState()I
-HSPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getSupportedProfiles()J
-HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getUuids()[Landroid/os/ParcelUuid;
-HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->isOffloadedFilteringSupported()Z
-PLandroid/bluetooth/IBluetooth$Stub$Proxy;->onBrEdrDown()V
-PLandroid/bluetooth/IBluetooth$Stub$Proxy;->onLeServiceUp()V
-PLandroid/bluetooth/IBluetooth$Stub$Proxy;->registerCallback(Landroid/bluetooth/IBluetoothCallback;)V
-PLandroid/bluetooth/IBluetooth$Stub$Proxy;->requestActivityInfo(Landroid/os/ResultReceiver;)V
-PLandroid/bluetooth/IBluetooth$Stub$Proxy;->unregisterCallback(Landroid/bluetooth/IBluetoothCallback;)V
-HSPLandroid/bluetooth/IBluetooth$Stub;-><init>()V
 HSPLandroid/bluetooth/IBluetooth$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetooth;
-HSPLandroid/bluetooth/IBluetooth$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/bluetooth/IBluetoothA2dp$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/bluetooth/IBluetoothA2dp$Stub$Proxy;->getActiveDevice()Landroid/bluetooth/BluetoothDevice;
-PLandroid/bluetooth/IBluetoothA2dp$Stub$Proxy;->getCodecStatus(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothCodecStatus;
-PLandroid/bluetooth/IBluetoothA2dp$Stub$Proxy;->getConnectedDevices()Ljava/util/List;
-PLandroid/bluetooth/IBluetoothA2dp$Stub$Proxy;->setAvrcpAbsoluteVolume(I)V
-PLandroid/bluetooth/IBluetoothA2dp$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothA2dp;
-HSPLandroid/bluetooth/IBluetoothCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/bluetooth/IBluetoothCallback$Stub$Proxy;->onBluetoothStateChange(II)V
-HSPLandroid/bluetooth/IBluetoothCallback$Stub;-><init>()V
-PLandroid/bluetooth/IBluetoothCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/bluetooth/IBluetoothCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothCallback;
-PLandroid/bluetooth/IBluetoothCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/bluetooth/IBluetoothGatt$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/bluetooth/IBluetoothGatt$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/bluetooth/IBluetoothGatt$Stub$Proxy;->registerScanner(Landroid/bluetooth/le/IScannerCallback;Landroid/os/WorkSource;)V
-HPLandroid/bluetooth/IBluetoothGatt$Stub$Proxy;->startScan(ILandroid/bluetooth/le/ScanSettings;Ljava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)V
-HPLandroid/bluetooth/IBluetoothGatt$Stub$Proxy;->stopScan(I)V
-PLandroid/bluetooth/IBluetoothGatt$Stub$Proxy;->unregAll()V
-HPLandroid/bluetooth/IBluetoothGatt$Stub$Proxy;->unregisterScanner(I)V
-HSPLandroid/bluetooth/IBluetoothGatt$Stub;-><init>()V
-PLandroid/bluetooth/IBluetoothGatt$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothGatt;
-HSPLandroid/bluetooth/IBluetoothGatt$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/bluetooth/IBluetoothA2dp$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/bluetooth/IBluetoothA2dp$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothA2dp;
 HSPLandroid/bluetooth/IBluetoothHeadset$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/bluetooth/IBluetoothHeadset$Stub$Proxy;->clccResponse(IIIIZLjava/lang/String;I)V
-PLandroid/bluetooth/IBluetoothHeadset$Stub$Proxy;->getActiveDevice()Landroid/bluetooth/BluetoothDevice;
-PLandroid/bluetooth/IBluetoothHeadset$Stub$Proxy;->getAudioState(Landroid/bluetooth/BluetoothDevice;)I
-HPLandroid/bluetooth/IBluetoothHeadset$Stub$Proxy;->getConnectedDevices()Ljava/util/List;
-PLandroid/bluetooth/IBluetoothHeadset$Stub$Proxy;->phoneStateChanged(IIILjava/lang/String;ILjava/lang/String;)V
 HSPLandroid/bluetooth/IBluetoothHeadset$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothHeadset;
-PLandroid/bluetooth/IBluetoothHeadsetPhone$Stub;-><init>()V
-PLandroid/bluetooth/IBluetoothHeadsetPhone$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/bluetooth/IBluetoothHearingAid$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/bluetooth/IBluetoothHearingAid$Stub$Proxy;->getActiveDevices()Ljava/util/List;
-PLandroid/bluetooth/IBluetoothHearingAid$Stub$Proxy;->getConnectedDevices()Ljava/util/List;
-HPLandroid/bluetooth/IBluetoothHearingAid$Stub$Proxy;->getHiSyncId(Landroid/bluetooth/BluetoothDevice;)J
-PLandroid/bluetooth/IBluetoothHearingAid$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothHearingAid;
-HPLandroid/bluetooth/IBluetoothHidDevice$Stub$Proxy;->getConnectedDevices()Ljava/util/List;
-HPLandroid/bluetooth/IBluetoothHidDevice$Stub$Proxy;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
-HPLandroid/bluetooth/IBluetoothHidDevice$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothHidDevice;
-HPLandroid/bluetooth/IBluetoothHidHost$Stub$Proxy;->getConnectedDevices()Ljava/util/List;
-HPLandroid/bluetooth/IBluetoothHidHost$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothHidHost;
 HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->bindBluetoothProfileService(ILandroid/bluetooth/IBluetoothProfileServiceConnection;)Z
-HPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->disable(Ljava/lang/String;Z)Z
-PLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->enable(Ljava/lang/String;)Z
-HPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->getBluetoothGatt()Landroid/bluetooth/IBluetoothGatt;
-HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->getName()Ljava/lang/String;
-HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->getSystemConfigEnabledProfilesForPackage(Ljava/lang/String;)Ljava/util/List;
-HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->isBleScanAlwaysAvailable()Z
-HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->isHearingAidProfileSupported()Z
 HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->registerAdapter(Landroid/bluetooth/IBluetoothManagerCallback;)Landroid/bluetooth/IBluetooth;
 HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->registerStateChangeCallback(Landroid/bluetooth/IBluetoothStateChangeCallback;)V
-HPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->unbindBluetoothProfileService(ILandroid/bluetooth/IBluetoothProfileServiceConnection;)V
-HPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->updateBleAppCount(Landroid/os/IBinder;ZLjava/lang/String;)I
-HSPLandroid/bluetooth/IBluetoothManager$Stub;-><init>()V
 HSPLandroid/bluetooth/IBluetoothManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothManager;
-PLandroid/bluetooth/IBluetoothManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/bluetooth/IBluetoothManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/bluetooth/IBluetoothManagerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/bluetooth/IBluetoothManagerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/bluetooth/IBluetoothManagerCallback$Stub$Proxy;->onBluetoothServiceDown()V
-PLandroid/bluetooth/IBluetoothManagerCallback$Stub$Proxy;->onBluetoothServiceUp(Landroid/bluetooth/IBluetooth;)V
 HSPLandroid/bluetooth/IBluetoothManagerCallback$Stub;-><init>()V
 HSPLandroid/bluetooth/IBluetoothManagerCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/bluetooth/IBluetoothManagerCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothManagerCallback;
-HSPLandroid/bluetooth/IBluetoothManagerCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/bluetooth/IBluetoothMap$Stub$Proxy;->getConnectedDevices()Ljava/util/List;
-HPLandroid/bluetooth/IBluetoothMap$Stub$Proxy;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
-HPLandroid/bluetooth/IBluetoothMap$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothMap;
-HPLandroid/bluetooth/IBluetoothPan$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothPan;
-HPLandroid/bluetooth/IBluetoothPbap$Stub$Proxy;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
-PLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub$Proxy;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub$Proxy;->onServiceDisconnected(Landroid/content/ComponentName;)V
 HSPLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub;-><init>()V
 HSPLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothProfileServiceConnection;
-HSPLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/bluetooth/IBluetoothSap$Stub$Proxy;->getConnectedDevices()Ljava/util/List;
-HPLandroid/bluetooth/IBluetoothSap$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothSap;
-HSPLandroid/bluetooth/IBluetoothSocketManager$Stub;-><init>()V
-PLandroid/bluetooth/IBluetoothStateChangeCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/bluetooth/IBluetoothStateChangeCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/bluetooth/IBluetoothStateChangeCallback$Stub$Proxy;->onBluetoothStateChange(Z)V
 HSPLandroid/bluetooth/IBluetoothStateChangeCallback$Stub;-><init>()V
 HSPLandroid/bluetooth/IBluetoothStateChangeCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/bluetooth/IBluetoothStateChangeCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothStateChangeCallback;
-HSPLandroid/bluetooth/IBluetoothStateChangeCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/bluetooth/UidTraffic$1;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/UidTraffic;
-PLandroid/bluetooth/UidTraffic$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/bluetooth/UidTraffic$1;->newArray(I)[Landroid/bluetooth/UidTraffic;
-PLandroid/bluetooth/UidTraffic$1;->newArray(I)[Ljava/lang/Object;
-HPLandroid/bluetooth/UidTraffic;-><init>(Landroid/os/Parcel;)V
-PLandroid/bluetooth/UidTraffic;->getRxBytes()J
-PLandroid/bluetooth/UidTraffic;->getTxBytes()J
-PLandroid/bluetooth/UidTraffic;->getUid()I
-PLandroid/bluetooth/le/BluetoothLeScanner;-><init>(Landroid/bluetooth/IBluetoothManager;Ljava/lang/String;Ljava/lang/String;)V
-HPLandroid/bluetooth/le/BluetoothLeScanner;->access$100(Landroid/bluetooth/le/BluetoothLeScanner;)Ljava/util/Map;
-HPLandroid/bluetooth/le/BluetoothLeScanner;->access$200(Landroid/bluetooth/le/BluetoothLeScanner;)Ljava/lang/String;
-HPLandroid/bluetooth/le/BluetoothLeScanner;->access$300(Landroid/bluetooth/le/BluetoothLeScanner;)Ljava/lang/String;
-HPLandroid/bluetooth/le/BluetoothLeScanner;->isHardwareResourcesAvailableForScan(Landroid/bluetooth/le/ScanSettings;)Z
-HPLandroid/bluetooth/le/BluetoothLeScanner;->isSettingsAndFilterComboAllowed(Landroid/bluetooth/le/ScanSettings;Ljava/util/List;)Z
-HPLandroid/bluetooth/le/BluetoothLeScanner;->isSettingsConfigAllowedForScan(Landroid/bluetooth/le/ScanSettings;)Z
-HPLandroid/bluetooth/le/BluetoothLeScanner;->startScan(Ljava/util/List;Landroid/bluetooth/le/ScanSettings;Landroid/bluetooth/le/ScanCallback;)V
-HPLandroid/bluetooth/le/BluetoothLeScanner;->startScan(Ljava/util/List;Landroid/bluetooth/le/ScanSettings;Landroid/os/WorkSource;Landroid/bluetooth/le/ScanCallback;Landroid/app/PendingIntent;Ljava/util/List;)I
-HPLandroid/bluetooth/le/BluetoothLeScanner;->startScanFromSource(Ljava/util/List;Landroid/bluetooth/le/ScanSettings;Landroid/os/WorkSource;Landroid/bluetooth/le/ScanCallback;)V
-HPLandroid/bluetooth/le/BluetoothLeScanner;->stopScan(Landroid/bluetooth/le/ScanCallback;)V
-HSPLandroid/bluetooth/le/IScannerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/bluetooth/le/IScannerCallback$Stub$Proxy;->onScanResult(Landroid/bluetooth/le/ScanResult;)V
-HSPLandroid/bluetooth/le/IScannerCallback$Stub$Proxy;->onScannerRegistered(II)V
-HPLandroid/bluetooth/le/IScannerCallback$Stub;-><init>()V
-HPLandroid/bluetooth/le/IScannerCallback$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/bluetooth/le/IScannerCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/bluetooth/le/ScanCallback;-><init>()V
-HSPLandroid/bluetooth/le/ScanFilter$1;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/le/ScanFilter;
-HSPLandroid/bluetooth/le/ScanFilter$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/bluetooth/le/ScanFilter$Builder;-><init>()V
 HSPLandroid/bluetooth/le/ScanFilter$Builder;->build()Landroid/bluetooth/le/ScanFilter;
-PLandroid/bluetooth/le/ScanFilter$Builder;->setServiceData(Landroid/os/ParcelUuid;[B[B)Landroid/bluetooth/le/ScanFilter$Builder;
-HSPLandroid/bluetooth/le/ScanFilter$Builder;->setServiceUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;
-HSPLandroid/bluetooth/le/ScanFilter;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;[B[BI[B[B)V
-HSPLandroid/bluetooth/le/ScanFilter;->getDeviceAddress()Ljava/lang/String;
-HSPLandroid/bluetooth/le/ScanFilter;->getDeviceName()Ljava/lang/String;
-HSPLandroid/bluetooth/le/ScanFilter;->getManufacturerData()[B
-HSPLandroid/bluetooth/le/ScanFilter;->getManufacturerDataMask()[B
-HSPLandroid/bluetooth/le/ScanFilter;->getManufacturerId()I
-HSPLandroid/bluetooth/le/ScanFilter;->getServiceData()[B
-HSPLandroid/bluetooth/le/ScanFilter;->getServiceDataMask()[B
-HSPLandroid/bluetooth/le/ScanFilter;->getServiceDataUuid()Landroid/os/ParcelUuid;
-HSPLandroid/bluetooth/le/ScanFilter;->getServiceSolicitationUuid()Landroid/os/ParcelUuid;
-HSPLandroid/bluetooth/le/ScanFilter;->getServiceSolicitationUuidMask()Landroid/os/ParcelUuid;
-HSPLandroid/bluetooth/le/ScanFilter;->getServiceUuid()Landroid/os/ParcelUuid;
-HSPLandroid/bluetooth/le/ScanFilter;->getServiceUuidMask()Landroid/os/ParcelUuid;
-HPLandroid/bluetooth/le/ScanFilter;->matches(Landroid/bluetooth/le/ScanResult;)Z
-HPLandroid/bluetooth/le/ScanFilter;->matchesPartialData([B[B[B)Z
-HPLandroid/bluetooth/le/ScanFilter;->matchesServiceUuids(Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;Ljava/util/List;)Z
-HPLandroid/bluetooth/le/ScanFilter;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/bluetooth/le/ScanRecord;->getBytes()[B
-HPLandroid/bluetooth/le/ScanRecord;->getServiceData(Landroid/os/ParcelUuid;)[B
-HPLandroid/bluetooth/le/ScanRecord;->getTxPowerLevel()I
-PLandroid/bluetooth/le/ScanRecord;->parseFromBytes([B)Landroid/bluetooth/le/ScanRecord;
-HPLandroid/bluetooth/le/ScanResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/le/ScanResult;
-HPLandroid/bluetooth/le/ScanResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/bluetooth/le/ScanResult;-><init>(Landroid/bluetooth/BluetoothDevice;IIIIIIILandroid/bluetooth/le/ScanRecord;J)V
-HPLandroid/bluetooth/le/ScanResult;->getDevice()Landroid/bluetooth/BluetoothDevice;
-HPLandroid/bluetooth/le/ScanResult;->getRssi()I
-HPLandroid/bluetooth/le/ScanResult;->getScanRecord()Landroid/bluetooth/le/ScanRecord;
-HPLandroid/bluetooth/le/ScanResult;->readFromParcel(Landroid/os/Parcel;)V
-HPLandroid/bluetooth/le/ScanResult;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/bluetooth/le/ScanSettings$1;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/le/ScanSettings;
-HSPLandroid/bluetooth/le/ScanSettings$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/bluetooth/le/ScanSettings$Builder;-><init>()V
-HSPLandroid/bluetooth/le/ScanSettings$Builder;->build()Landroid/bluetooth/le/ScanSettings;
-PLandroid/bluetooth/le/ScanSettings$Builder;->setCallbackType(I)Landroid/bluetooth/le/ScanSettings$Builder;
-HPLandroid/bluetooth/le/ScanSettings$Builder;->setMatchMode(I)Landroid/bluetooth/le/ScanSettings$Builder;
-PLandroid/bluetooth/le/ScanSettings$Builder;->setNumOfMatches(I)Landroid/bluetooth/le/ScanSettings$Builder;
-PLandroid/bluetooth/le/ScanSettings$Builder;->setReportDelay(J)Landroid/bluetooth/le/ScanSettings$Builder;
-HSPLandroid/bluetooth/le/ScanSettings$Builder;->setScanMode(I)Landroid/bluetooth/le/ScanSettings$Builder;
-HPLandroid/bluetooth/le/ScanSettings$Builder;->setScanResultType(I)Landroid/bluetooth/le/ScanSettings$Builder;
-HPLandroid/bluetooth/le/ScanSettings;-><init>(IIIJIIZI)V
-HSPLandroid/bluetooth/le/ScanSettings;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/bluetooth/le/ScanSettings;->getCallbackType()I
-HPLandroid/bluetooth/le/ScanSettings;->getLegacy()Z
-HPLandroid/bluetooth/le/ScanSettings;->getMatchMode()I
-HPLandroid/bluetooth/le/ScanSettings;->getNumOfMatches()I
-HSPLandroid/bluetooth/le/ScanSettings;->getReportDelayMillis()J
-HSPLandroid/bluetooth/le/ScanSettings;->getScanMode()I
-HPLandroid/bluetooth/le/ScanSettings;->getScanResultType()I
-HPLandroid/bluetooth/le/ScanSettings;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/companion/ICompanionDeviceManager$Stub;-><init>()V
-PLandroid/companion/ICompanionDeviceManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/companion/ICompanionDeviceManager;
-PLandroid/companion/ICompanionDeviceManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/compat/Compatibility$Callbacks;-><init>()V
-HPLandroid/compat/Compatibility;->isChangeEnabled(J)Z
+HSPLandroid/compat/Compatibility;->isChangeEnabled(J)Z
 HSPLandroid/compat/Compatibility;->setCallbacks(Landroid/compat/Compatibility$Callbacks;)V
-HSLandroid/content/-$$Lambda$AbstractThreadedSyncAdapter$ISyncAdapterImpl$L6ZtOCe8gjKwJj0908ytPlrD8Rc;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-HSLandroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;-><init>(Landroid/content/AbstractThreadedSyncAdapter;)V
-HSLandroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;-><init>(Landroid/content/AbstractThreadedSyncAdapter;Landroid/content/AbstractThreadedSyncAdapter$1;)V
-HSPLandroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;->cancelSync(Landroid/content/ISyncContext;)V
-HSLandroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;->lambda$onUnsyncableAccount$0(Ljava/lang/Object;Landroid/content/ISyncAdapterUnsyncableAccountCallback;)V
-HSLandroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;->onUnsyncableAccount(Landroid/content/ISyncAdapterUnsyncableAccountCallback;)V
+HSPLandroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;-><init>(Landroid/content/AbstractThreadedSyncAdapter;)V
+HSPLandroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;-><init>(Landroid/content/AbstractThreadedSyncAdapter;Landroid/content/AbstractThreadedSyncAdapter$1;)V
 HSPLandroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;->startSync(Landroid/content/ISyncContext;Ljava/lang/String;Landroid/accounts/Account;Landroid/os/Bundle;)V
-HSPLandroid/content/AbstractThreadedSyncAdapter$SyncThread;->access$800(Landroid/content/AbstractThreadedSyncAdapter$SyncThread;)Landroid/content/SyncContext;
+HSPLandroid/content/AbstractThreadedSyncAdapter$SyncThread;-><init>(Landroid/content/AbstractThreadedSyncAdapter;Ljava/lang/String;Landroid/content/SyncContext;Ljava/lang/String;Landroid/accounts/Account;Landroid/os/Bundle;)V
+HSPLandroid/content/AbstractThreadedSyncAdapter$SyncThread;-><init>(Landroid/content/AbstractThreadedSyncAdapter;Ljava/lang/String;Landroid/content/SyncContext;Ljava/lang/String;Landroid/accounts/Account;Landroid/os/Bundle;Landroid/content/AbstractThreadedSyncAdapter$1;)V
+HSPLandroid/content/AbstractThreadedSyncAdapter$SyncThread;->isCanceled()Z
 HSPLandroid/content/AbstractThreadedSyncAdapter$SyncThread;->run()V
-HSPLandroid/content/AbstractThreadedSyncAdapter;-><init>(Landroid/content/Context;Z)V
 HSPLandroid/content/AbstractThreadedSyncAdapter;-><init>(Landroid/content/Context;ZZ)V
-HSPLandroid/content/AbstractThreadedSyncAdapter;->access$100()Z
-HSPLandroid/content/AbstractThreadedSyncAdapter;->access$1100(Landroid/content/AbstractThreadedSyncAdapter;)Z
-HSLandroid/content/AbstractThreadedSyncAdapter;->access$1200(Landroid/content/AbstractThreadedSyncAdapter;Landroid/content/ISyncAdapterUnsyncableAccountCallback;)V
-HSPLandroid/content/AbstractThreadedSyncAdapter;->access$200(Landroid/content/AbstractThreadedSyncAdapter;Landroid/accounts/Account;)Landroid/accounts/Account;
-HSPLandroid/content/AbstractThreadedSyncAdapter;->access$300(Landroid/content/AbstractThreadedSyncAdapter;)Ljava/lang/Object;
-HSPLandroid/content/AbstractThreadedSyncAdapter;->access$400(Landroid/content/AbstractThreadedSyncAdapter;)Ljava/util/HashMap;
 HSPLandroid/content/AbstractThreadedSyncAdapter;->getContext()Landroid/content/Context;
 HSPLandroid/content/AbstractThreadedSyncAdapter;->getSyncAdapterBinder()Landroid/os/IBinder;
-HSLandroid/content/AbstractThreadedSyncAdapter;->handleOnUnsyncableAccount(Landroid/content/ISyncAdapterUnsyncableAccountCallback;)V
-HSPLandroid/content/AbstractThreadedSyncAdapter;->onSyncCanceled()V
-HSPLandroid/content/AbstractThreadedSyncAdapter;->onSyncCanceled(Ljava/lang/Thread;)V
-HSLandroid/content/AbstractThreadedSyncAdapter;->onUnsyncableAccount()Z
-PLandroid/content/AsyncQueryHandler$WorkerArgs;-><init>()V
-PLandroid/content/AsyncQueryHandler$WorkerHandler;-><init>(Landroid/content/AsyncQueryHandler;Landroid/os/Looper;)V
-HSPLandroid/content/AsyncQueryHandler$WorkerHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/content/AsyncQueryHandler$WorkerHandler;-><init>(Landroid/content/AsyncQueryHandler;Landroid/os/Looper;)V
 HSPLandroid/content/AsyncQueryHandler;-><init>(Landroid/content/ContentResolver;)V
 HSPLandroid/content/AsyncQueryHandler;->createHandler(Landroid/os/Looper;)Landroid/os/Handler;
-HSPLandroid/content/AsyncQueryHandler;->handleMessage(Landroid/os/Message;)V
-HSPLandroid/content/AsyncQueryHandler;->startQuery(ILjava/lang/Object;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
-HPLandroid/content/AsyncTaskLoader$LoadTask;->doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/content/AsyncTaskLoader$LoadTask;->doInBackground([Ljava/lang/Void;)Ljava/lang/Object;
-HPLandroid/content/AsyncTaskLoader$LoadTask;->onCancelled(Ljava/lang/Object;)V
-HPLandroid/content/AsyncTaskLoader$LoadTask;->onPostExecute(Ljava/lang/Object;)V
-HPLandroid/content/AsyncTaskLoader;-><init>(Landroid/content/Context;)V
-HPLandroid/content/AsyncTaskLoader;-><init>(Landroid/content/Context;Ljava/util/concurrent/Executor;)V
-HPLandroid/content/AsyncTaskLoader;->cancelLoadInBackground()V
-HPLandroid/content/AsyncTaskLoader;->dispatchOnCancelled(Landroid/content/AsyncTaskLoader$LoadTask;Ljava/lang/Object;)V
-HPLandroid/content/AsyncTaskLoader;->dispatchOnLoadComplete(Landroid/content/AsyncTaskLoader$LoadTask;Ljava/lang/Object;)V
-HPLandroid/content/AsyncTaskLoader;->executePendingTask()V
-HPLandroid/content/AsyncTaskLoader;->isLoadInBackgroundCanceled()Z
-HPLandroid/content/AsyncTaskLoader;->onCancelLoad()Z
-HPLandroid/content/AsyncTaskLoader;->onForceLoad()V
-HPLandroid/content/AsyncTaskLoader;->onLoadInBackground()Ljava/lang/Object;
 HSPLandroid/content/AutofillOptions$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/AutofillOptions;
 HSPLandroid/content/AutofillOptions$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/AutofillOptions;-><init>(IZ)V
-HSPLandroid/content/AutofillOptions;->isAugmentedAutofillEnabled(Landroid/content/Context;)Z
-HPLandroid/content/AutofillOptions;->isAutofillDisabledLocked(Landroid/content/ComponentName;)Z
-HSPLandroid/content/AutofillOptions;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/BroadcastReceiver$PendingResult$1;-><init>(Landroid/content/BroadcastReceiver$PendingResult;Landroid/app/IActivityManager;)V
 HSPLandroid/content/BroadcastReceiver$PendingResult$1;->run()V
 HSPLandroid/content/BroadcastReceiver$PendingResult;-><init>(ILjava/lang/String;Landroid/os/Bundle;IZZLandroid/os/IBinder;II)V
-HSPLandroid/content/BroadcastReceiver$PendingResult;->checkSynchronousHint()V
 HSPLandroid/content/BroadcastReceiver$PendingResult;->finish()V
-PLandroid/content/BroadcastReceiver$PendingResult;->getSendingUserId()I
 HSPLandroid/content/BroadcastReceiver$PendingResult;->sendFinished(Landroid/app/IActivityManager;)V
 HSPLandroid/content/BroadcastReceiver$PendingResult;->setExtrasClassLoader(Ljava/lang/ClassLoader;)V
-HSPLandroid/content/BroadcastReceiver$PendingResult;->setResultCode(I)V
 HSPLandroid/content/BroadcastReceiver;-><init>()V
-HSPLandroid/content/BroadcastReceiver;->abortBroadcast()V
 HSPLandroid/content/BroadcastReceiver;->checkSynchronousHint()V
 HSPLandroid/content/BroadcastReceiver;->getDebugUnregister()Z
 HSPLandroid/content/BroadcastReceiver;->getPendingResult()Landroid/content/BroadcastReceiver$PendingResult;
 HSPLandroid/content/BroadcastReceiver;->getResultCode()I
-HSPLandroid/content/BroadcastReceiver;->getResultExtras(Z)Landroid/os/Bundle;
-HPLandroid/content/BroadcastReceiver;->getSendingUserId()I
+HSPLandroid/content/BroadcastReceiver;->getSendingUserId()I
 HSPLandroid/content/BroadcastReceiver;->goAsync()Landroid/content/BroadcastReceiver$PendingResult;
 HSPLandroid/content/BroadcastReceiver;->isInitialStickyBroadcast()Z
 HSPLandroid/content/BroadcastReceiver;->isOrderedBroadcast()Z
 HSPLandroid/content/BroadcastReceiver;->setPendingResult(Landroid/content/BroadcastReceiver$PendingResult;)V
 HSPLandroid/content/BroadcastReceiver;->setResultCode(I)V
-HPLandroid/content/BroadcastReceiver;->setResultExtras(Landroid/os/Bundle;)V
-PLandroid/content/ClipData$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ClipData;
-PLandroid/content/ClipData$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/content/ClipData$Item;-><init>(Ljava/lang/CharSequence;Ljava/lang/String;Landroid/content/Intent;Landroid/net/Uri;)V
-PLandroid/content/ClipData$Item;->getIntent()Landroid/content/Intent;
-HPLandroid/content/ClipData$Item;->getText()Ljava/lang/CharSequence;
-PLandroid/content/ClipData$Item;->getUri()Landroid/net/Uri;
-PLandroid/content/ClipData;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/ClipData;->fixUrisLight(I)V
-PLandroid/content/ClipData;->getDescription()Landroid/content/ClipDescription;
-PLandroid/content/ClipData;->getItemAt(I)Landroid/content/ClipData$Item;
-PLandroid/content/ClipData;->getItemCount()I
-PLandroid/content/ClipData;->readHtmlTextFromParcel(Landroid/os/Parcel;)Ljava/lang/String;
-PLandroid/content/ClipData;->writeHtmlTextToParcel(Ljava/lang/String;Landroid/os/Parcel;I)V
-PLandroid/content/ClipData;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/ClipDescription;-><init>(Landroid/os/Parcel;)V
-HPLandroid/content/ClipDescription;->getTimestamp()J
-PLandroid/content/ClipDescription;->setTimestamp(J)V
-PLandroid/content/ClipDescription;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/content/ClipboardManager$1;->dispatchPrimaryClipChanged()V
-HPLandroid/content/ClipboardManager$1;->lambda$dispatchPrimaryClipChanged$0$ClipboardManager$1()V
+HSPLandroid/content/ClipboardManager$1;-><init>(Landroid/content/ClipboardManager;)V
 HSPLandroid/content/ClipboardManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
-HPLandroid/content/ClipboardManager;->access$000(Landroid/content/ClipboardManager;)Landroid/os/Handler;
 HSPLandroid/content/ClipboardManager;->addPrimaryClipChangedListener(Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;)V
-HPLandroid/content/ClipboardManager;->getPrimaryClip()Landroid/content/ClipData;
-HSPLandroid/content/ClipboardManager;->hasPrimaryClip()Z
-HPLandroid/content/ClipboardManager;->removePrimaryClipChangedListener(Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;)V
-HPLandroid/content/ClipboardManager;->reportPrimaryClipChanged()V
 HSPLandroid/content/ComponentName$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ComponentName;
 HSPLandroid/content/ComponentName$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/ComponentName$1;->newArray(I)[Landroid/content/ComponentName;
-HSPLandroid/content/ComponentName$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/content/ComponentName;-><init>(Landroid/content/Context;Ljava/lang/Class;)V
 HSPLandroid/content/ComponentName;-><init>(Landroid/content/Context;Ljava/lang/String;)V
 HSPLandroid/content/ComponentName;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/ComponentName;-><init>(Ljava/lang/String;Landroid/os/Parcel;)V
 HSPLandroid/content/ComponentName;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/ComponentName;->appendShortClassName(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/content/ComponentName;->appendShortString(Ljava/lang/StringBuilder;)V
 HSPLandroid/content/ComponentName;->appendShortString(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/ComponentName;->compareTo(Landroid/content/ComponentName;)I
-HPLandroid/content/ComponentName;->compareTo(Ljava/lang/Object;)I
-HSPLandroid/content/ComponentName;->createRelative(Landroid/content/Context;Ljava/lang/String;)Landroid/content/ComponentName;
-HSPLandroid/content/ComponentName;->createRelative(Ljava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;
-HPLandroid/content/ComponentName;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLandroid/content/ComponentName;->equals(Ljava/lang/Object;)Z
 HSPLandroid/content/ComponentName;->flattenToShortString()Ljava/lang/String;
-PLandroid/content/ComponentName;->flattenToShortString(Landroid/content/ComponentName;)Ljava/lang/String;
 HSPLandroid/content/ComponentName;->flattenToString()Ljava/lang/String;
 HSPLandroid/content/ComponentName;->getClassName()Ljava/lang/String;
 HSPLandroid/content/ComponentName;->getPackageName()Ljava/lang/String;
 HSPLandroid/content/ComponentName;->getShortClassName()Ljava/lang/String;
 HSPLandroid/content/ComponentName;->hashCode()I
-HPLandroid/content/ComponentName;->printShortClassName(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/ComponentName;->readFromParcel(Landroid/os/Parcel;)Landroid/content/ComponentName;
 HSPLandroid/content/ComponentName;->toShortString()Ljava/lang/String;
 HSPLandroid/content/ComponentName;->toString()Ljava/lang/String;
@@ -5662,17 +2574,12 @@
 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>(I)V
 HSPLandroid/content/ContentCaptureOptions;-><init>(IIIIILandroid/util/ArraySet;)V
 HSPLandroid/content/ContentCaptureOptions;-><init>(ZIIIIILandroid/util/ArraySet;)V
-HPLandroid/content/ContentCaptureOptions;->isWhitelisted(Landroid/content/Context;)Z
-PLandroid/content/ContentCaptureOptions;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/ContentCaptureOptions;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/ContentProvider$Transport;-><init>(Landroid/content/ContentProvider;)V
 HSPLandroid/content/ContentProvider$Transport;->access$300(Landroid/content/ContentProvider$Transport;Ljava/lang/String;Ljava/lang/String;I)I
-HSPLandroid/content/ContentProvider$Transport;->applyBatch(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;
-HSPLandroid/content/ContentProvider$Transport;->bulkInsert(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;[Landroid/content/ContentValues;)I
 HSPLandroid/content/ContentProvider$Transport;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
-HSPLandroid/content/ContentProvider$Transport;->canonicalize(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)Landroid/net/Uri;
 HSPLandroid/content/ContentProvider$Transport;->createCancellationSignal()Landroid/os/ICancellationSignal;
 HSPLandroid/content/ContentProvider$Transport;->delete(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;)I
 HSPLandroid/content/ContentProvider$Transport;->enforceFilePermission(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/IBinder;)V
@@ -5680,10 +2587,8 @@
 HSPLandroid/content/ContentProvider$Transport;->enforceWritePermission(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Landroid/os/IBinder;)I
 HSPLandroid/content/ContentProvider$Transport;->getContentProvider()Landroid/content/ContentProvider;
 HSPLandroid/content/ContentProvider$Transport;->getProviderName()Ljava/lang/String;
-HSPLandroid/content/ContentProvider$Transport;->getType(Landroid/net/Uri;)Ljava/lang/String;
 HSPLandroid/content/ContentProvider$Transport;->insert(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;
 HSPLandroid/content/ContentProvider$Transport;->noteProxyOp(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLandroid/content/ContentProvider$Transport;->openAssetFile(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/ICancellationSignal;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentProvider$Transport;->openTypedAssetFile(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentProvider$Transport;->query(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/content/ContentProvider$Transport;->update(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)I
@@ -5692,23 +2597,17 @@
 HSPLandroid/content/ContentProvider;->access$100(Landroid/content/ContentProvider;Landroid/util/Pair;)Landroid/util/Pair;
 HSPLandroid/content/ContentProvider;->access$200(Landroid/content/ContentProvider;Ljava/lang/String;)V
 HSPLandroid/content/ContentProvider;->applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;
-HSPLandroid/content/ContentProvider;->applyBatch(Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;
 HSPLandroid/content/ContentProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V
 HSPLandroid/content/ContentProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;Z)V
 HSPLandroid/content/ContentProvider;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
-HSPLandroid/content/ContentProvider;->canonicalize(Landroid/net/Uri;)Landroid/net/Uri;
 HSPLandroid/content/ContentProvider;->checkPermissionAndAppOp(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/IBinder;)I
 HSPLandroid/content/ContentProvider;->checkUser(IILandroid/content/Context;)Z
-HSPLandroid/content/ContentProvider;->clearCallingIdentity()Landroid/content/ContentProvider$CallingIdentity;
 HSPLandroid/content/ContentProvider;->coerceToLocalContentProvider(Landroid/content/IContentProvider;)Landroid/content/ContentProvider;
 HSPLandroid/content/ContentProvider;->delete(Landroid/net/Uri;Landroid/os/Bundle;)I
-PLandroid/content/ContentProvider;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLandroid/content/ContentProvider;->enforceReadPermissionInner(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Landroid/os/IBinder;)I
 HSPLandroid/content/ContentProvider;->enforceWritePermissionInner(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Landroid/os/IBinder;)I
 HSPLandroid/content/ContentProvider;->getAuthorityWithoutUserId(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/content/ContentProvider;->getCallingFeatureId()Ljava/lang/String;
 HSPLandroid/content/ContentProvider;->getCallingPackage()Ljava/lang/String;
-HSPLandroid/content/ContentProvider;->getCallingPackageUnchecked()Ljava/lang/String;
 HSPLandroid/content/ContentProvider;->getContext()Landroid/content/Context;
 HSPLandroid/content/ContentProvider;->getIContentProvider()Landroid/content/IContentProvider;
 HSPLandroid/content/ContentProvider;->getPathPermissions()[Landroid/content/pm/PathPermission;
@@ -5719,22 +2618,17 @@
 HSPLandroid/content/ContentProvider;->getUserIdFromUri(Landroid/net/Uri;I)I
 HSPLandroid/content/ContentProvider;->getWritePermission()Ljava/lang/String;
 HSPLandroid/content/ContentProvider;->insert(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;
-HSPLandroid/content/ContentProvider;->isTemporary()Z
 HSPLandroid/content/ContentProvider;->matchesOurAuthorities(Ljava/lang/String;)Z
 HSPLandroid/content/ContentProvider;->maybeAddUserId(Landroid/net/Uri;I)Landroid/net/Uri;
 HSPLandroid/content/ContentProvider;->maybeGetUriWithoutUserId(Landroid/net/Uri;)Landroid/net/Uri;
 HSPLandroid/content/ContentProvider;->onCallingPackageChanged()V
 HSPLandroid/content/ContentProvider;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-PLandroid/content/ContentProvider;->onLowMemory()V
 HSPLandroid/content/ContentProvider;->onTrimMemory(I)V
 HSPLandroid/content/ContentProvider;->openAssetFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;
-HSPLandroid/content/ContentProvider;->openAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentProvider;->openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentProvider;->openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentProvider;->query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 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;->setAppOps(II)V
 HSPLandroid/content/ContentProvider;->setAuthorities(Ljava/lang/String;)V
 HSPLandroid/content/ContentProvider;->setCallingPackage(Landroid/util/Pair;)Landroid/util/Pair;
 HSPLandroid/content/ContentProvider;->setPathPermissions([Landroid/content/pm/PathPermission;)V
@@ -5745,108 +2639,39 @@
 HSPLandroid/content/ContentProvider;->uriHasUserId(Landroid/net/Uri;)Z
 HSPLandroid/content/ContentProvider;->validateIncomingAuthority(Ljava/lang/String;)V
 HSPLandroid/content/ContentProvider;->validateIncomingUri(Landroid/net/Uri;)Landroid/net/Uri;
+HSPLandroid/content/ContentProviderClient$CursorWrapperInner;-><init>(Landroid/content/ContentProviderClient;Landroid/database/Cursor;)V
 HSPLandroid/content/ContentProviderClient$CursorWrapperInner;->close()V
 HSPLandroid/content/ContentProviderClient$CursorWrapperInner;->finalize()V
-PLandroid/content/ContentProviderClient$NotRespondingRunnable;-><init>(Landroid/content/ContentProviderClient;)V
-PLandroid/content/ContentProviderClient$NotRespondingRunnable;-><init>(Landroid/content/ContentProviderClient;Landroid/content/ContentProviderClient$1;)V
 HSPLandroid/content/ContentProviderClient;-><init>(Landroid/content/ContentResolver;Landroid/content/IContentProvider;Ljava/lang/String;Z)V
 HSPLandroid/content/ContentProviderClient;->afterRemote()V
-PLandroid/content/ContentProviderClient;->applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;
-PLandroid/content/ContentProviderClient;->applyBatch(Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;
 HSPLandroid/content/ContentProviderClient;->beforeRemote()V
 HSPLandroid/content/ContentProviderClient;->call(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
 HSPLandroid/content/ContentProviderClient;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
 HSPLandroid/content/ContentProviderClient;->close()V
 HSPLandroid/content/ContentProviderClient;->closeInternal()Z
-PLandroid/content/ContentProviderClient;->delete(Landroid/net/Uri;Landroid/os/Bundle;)I
-PLandroid/content/ContentProviderClient;->delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I
 HSPLandroid/content/ContentProviderClient;->finalize()V
-HSPLandroid/content/ContentProviderClient;->getLocalContentProvider()Landroid/content/ContentProvider;
-HPLandroid/content/ContentProviderClient;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
-HPLandroid/content/ContentProviderClient;->insert(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;
 HSPLandroid/content/ContentProviderClient;->query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/content/ContentProviderClient;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
 HSPLandroid/content/ContentProviderClient;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/content/ContentProviderClient;->release()Z
 HSPLandroid/content/ContentProviderClient;->setDetectNotResponding(J)V
-HSPLandroid/content/ContentProviderClient;->update(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)I
-HSPLandroid/content/ContentProviderClient;->update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I
 HSPLandroid/content/ContentProviderNative;-><init>()V
 HSPLandroid/content/ContentProviderNative;->asBinder()Landroid/os/IBinder;
 HSPLandroid/content/ContentProviderNative;->asInterface(Landroid/os/IBinder;)Landroid/content/IContentProvider;
 HSPLandroid/content/ContentProviderNative;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/content/ContentProviderOperation$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ContentProviderOperation;
-HSPLandroid/content/ContentProviderOperation$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/content/ContentProviderOperation$BackReference;-><clinit>()V
-HPLandroid/content/ContentProviderOperation$BackReference;-><init>(ILjava/lang/String;)V
-HPLandroid/content/ContentProviderOperation$BackReference;-><init>(ILjava/lang/String;Landroid/content/ContentProviderOperation$1;)V
-HPLandroid/content/ContentProviderOperation$BackReference;-><init>(Landroid/os/Parcel;)V
-HPLandroid/content/ContentProviderOperation$BackReference;->resolve([Landroid/content/ContentProviderResult;I)Ljava/lang/Object;
-HPLandroid/content/ContentProviderOperation$BackReference;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/ContentProviderOperation$Builder;-><init>(ILandroid/net/Uri;)V
-HSPLandroid/content/ContentProviderOperation$Builder;-><init>(ILandroid/net/Uri;Landroid/content/ContentProviderOperation$1;)V
-HSPLandroid/content/ContentProviderOperation$Builder;-><init>(ILandroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/ContentProviderOperation$Builder;->assertSelectionAllowed()V
-HSPLandroid/content/ContentProviderOperation$Builder;->assertValuesAllowed()V
-HSPLandroid/content/ContentProviderOperation$Builder;->build()Landroid/content/ContentProviderOperation;
-PLandroid/content/ContentProviderOperation$Builder;->ensureSelectionArgs()V
-HSPLandroid/content/ContentProviderOperation$Builder;->ensureValues()V
-PLandroid/content/ContentProviderOperation$Builder;->setSelectionArg(ILjava/lang/Object;)V
-HSPLandroid/content/ContentProviderOperation$Builder;->setValue(Ljava/lang/String;Ljava/lang/Object;)V
-HSPLandroid/content/ContentProviderOperation$Builder;->withExpectedCount(I)Landroid/content/ContentProviderOperation$Builder;
-HSPLandroid/content/ContentProviderOperation$Builder;->withSelection(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/ContentProviderOperation$Builder;
-PLandroid/content/ContentProviderOperation$Builder;->withValue(Ljava/lang/String;Ljava/lang/Object;)Landroid/content/ContentProviderOperation$Builder;
-HPLandroid/content/ContentProviderOperation$Builder;->withValueBackReference(Ljava/lang/String;I)Landroid/content/ContentProviderOperation$Builder;
-HSPLandroid/content/ContentProviderOperation$Builder;->withValues(Landroid/content/ContentValues;)Landroid/content/ContentProviderOperation$Builder;
-HSPLandroid/content/ContentProviderOperation$Builder;->withYieldAllowed(Z)Landroid/content/ContentProviderOperation$Builder;
-HSPLandroid/content/ContentProviderOperation;-><init>(Landroid/content/ContentProviderOperation$Builder;)V
-HSPLandroid/content/ContentProviderOperation;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/ContentProviderOperation;-><init>(Landroid/os/Parcel;Landroid/content/ContentProviderOperation$1;)V
-HSPLandroid/content/ContentProviderOperation;->apply(Landroid/content/ContentProvider;[Landroid/content/ContentProviderResult;I)Landroid/content/ContentProviderResult;
-HSPLandroid/content/ContentProviderOperation;->applyInternal(Landroid/content/ContentProvider;[Landroid/content/ContentProviderResult;I)Landroid/content/ContentProviderResult;
 HSPLandroid/content/ContentProviderOperation;->getUri()Landroid/net/Uri;
-HSPLandroid/content/ContentProviderOperation;->isReadOperation()Z
-HSPLandroid/content/ContentProviderOperation;->isWriteOperation()Z
-HSPLandroid/content/ContentProviderOperation;->isYieldAllowed()Z
-PLandroid/content/ContentProviderOperation;->newAssertQuery(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;
-PLandroid/content/ContentProviderOperation;->newDelete(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;
-PLandroid/content/ContentProviderOperation;->newInsert(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;
-HSPLandroid/content/ContentProviderOperation;->newUpdate(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;
-HSPLandroid/content/ContentProviderOperation;->resolveExtrasBackReferences([Landroid/content/ContentProviderResult;I)Landroid/os/Bundle;
-HSPLandroid/content/ContentProviderOperation;->resolveSelectionArgsBackReferences([Landroid/content/ContentProviderResult;I)[Ljava/lang/String;
-HSPLandroid/content/ContentProviderOperation;->resolveValueBackReferences([Landroid/content/ContentProviderResult;I)Landroid/content/ContentValues;
-HPLandroid/content/ContentProviderOperation;->toString()Ljava/lang/String;
-PLandroid/content/ContentProviderOperation;->typeToString(I)Ljava/lang/String;
-HPLandroid/content/ContentProviderOperation;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/ContentProviderProxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/content/ContentProviderProxy;->applyBatch(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;
 HSPLandroid/content/ContentProviderProxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/content/ContentProviderProxy;->bulkInsert(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;[Landroid/content/ContentValues;)I
 HSPLandroid/content/ContentProviderProxy;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
-PLandroid/content/ContentProviderProxy;->canonicalize(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)Landroid/net/Uri;
 HSPLandroid/content/ContentProviderProxy;->createCancellationSignal()Landroid/os/ICancellationSignal;
 HSPLandroid/content/ContentProviderProxy;->delete(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;)I
-HSPLandroid/content/ContentProviderProxy;->getType(Landroid/net/Uri;)Ljava/lang/String;
 HSPLandroid/content/ContentProviderProxy;->insert(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;
 HSPLandroid/content/ContentProviderProxy;->openTypedAssetFile(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentProviderProxy;->query(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/database/Cursor;
-HSPLandroid/content/ContentProviderProxy;->update(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)I
-HPLandroid/content/ContentProviderResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ContentProviderResult;
-HPLandroid/content/ContentProviderResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/content/ContentProviderResult$1;->newArray(I)[Landroid/content/ContentProviderResult;
-PLandroid/content/ContentProviderResult$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/content/ContentProviderResult;-><init>(I)V
-PLandroid/content/ContentProviderResult;-><init>(Landroid/net/Uri;)V
-HSPLandroid/content/ContentProviderResult;-><init>(Landroid/net/Uri;Ljava/lang/Integer;Landroid/os/Bundle;Ljava/lang/Exception;)V
-HPLandroid/content/ContentProviderResult;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/ContentProviderResult;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/ContentResolver$1;-><init>(Landroid/content/Context;Landroid/content/ContentInterface;)V
-HSPLandroid/content/ContentResolver$2;-><init>(Landroid/content/SyncStatusObserver;)V
-PLandroid/content/ContentResolver$2;->onStatusChanged(I)V
 HSPLandroid/content/ContentResolver$CursorWrapperInner;-><init>(Landroid/content/ContentResolver;Landroid/database/Cursor;Landroid/content/IContentProvider;)V
 HSPLandroid/content/ContentResolver$CursorWrapperInner;->close()V
 HSPLandroid/content/ContentResolver$CursorWrapperInner;->finalize()V
-HSPLandroid/content/ContentResolver$OpenResourceIdResult;-><init>(Landroid/content/ContentResolver;)V
+HSPLandroid/content/ContentResolver$ParcelFileDescriptorInner;-><init>(Landroid/content/ContentResolver;Landroid/os/ParcelFileDescriptor;Landroid/content/IContentProvider;)V
 HSPLandroid/content/ContentResolver$ParcelFileDescriptorInner;->releaseResources()V
 HSPLandroid/content/ContentResolver;-><init>(Landroid/content/Context;)V
 HSPLandroid/content/ContentResolver;-><init>(Landroid/content/Context;Landroid/content/ContentInterface;)V
@@ -5856,170 +2681,105 @@
 HSPLandroid/content/ContentResolver;->acquireProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;
 HSPLandroid/content/ContentResolver;->acquireProvider(Ljava/lang/String;)Landroid/content/IContentProvider;
 HSPLandroid/content/ContentResolver;->acquireUnstableContentProviderClient(Landroid/net/Uri;)Landroid/content/ContentProviderClient;
-PLandroid/content/ContentResolver;->acquireUnstableContentProviderClient(Ljava/lang/String;)Landroid/content/ContentProviderClient;
 HSPLandroid/content/ContentResolver;->acquireUnstableProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;
-HSPLandroid/content/ContentResolver;->addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V
-HSPLandroid/content/ContentResolver;->addStatusChangeListener(ILandroid/content/SyncStatusObserver;)Ljava/lang/Object;
-HSPLandroid/content/ContentResolver;->applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;
-HSPLandroid/content/ContentResolver;->bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I
 HSPLandroid/content/ContentResolver;->call(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
 HSPLandroid/content/ContentResolver;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
-HSPLandroid/content/ContentResolver;->cancelSync(Landroid/accounts/Account;Ljava/lang/String;)V
-HPLandroid/content/ContentResolver;->canonicalize(Landroid/net/Uri;)Landroid/net/Uri;
 HSPLandroid/content/ContentResolver;->createSqlQueryBundle(Ljava/lang/String;[Ljava/lang/String;)Landroid/os/Bundle;
 HSPLandroid/content/ContentResolver;->createSqlQueryBundle(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;
 HSPLandroid/content/ContentResolver;->delete(Landroid/net/Uri;Landroid/os/Bundle;)I
 HSPLandroid/content/ContentResolver;->delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I
 HSPLandroid/content/ContentResolver;->getContentService()Landroid/content/IContentService;
 HSPLandroid/content/ContentResolver;->getFeatureId()Ljava/lang/String;
-HSPLandroid/content/ContentResolver;->getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I
-PLandroid/content/ContentResolver;->getIsSyncableAsUser(Landroid/accounts/Account;Ljava/lang/String;I)I
-HSPLandroid/content/ContentResolver;->getMasterSyncAutomatically()Z
-PLandroid/content/ContentResolver;->getMasterSyncAutomaticallyAsUser(I)Z
-HSPLandroid/content/ContentResolver;->getOutgoingPersistedUriPermissions()Ljava/util/List;
 HSPLandroid/content/ContentResolver;->getPackageName()Ljava/lang/String;
-HSPLandroid/content/ContentResolver;->getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;)Ljava/util/List;
-HSPLandroid/content/ContentResolver;->getPersistedUriPermissions()Ljava/util/List;
-HSPLandroid/content/ContentResolver;->getResourceId(Landroid/net/Uri;)Landroid/content/ContentResolver$OpenResourceIdResult;
-HSPLandroid/content/ContentResolver;->getSyncAdapterPackagesForAuthorityAsUser(Ljava/lang/String;I)[Ljava/lang/String;
-HSPLandroid/content/ContentResolver;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType;
-PLandroid/content/ContentResolver;->getSyncAdapterTypesAsUser(I)[Landroid/content/SyncAdapterType;
-HSPLandroid/content/ContentResolver;->getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z
-PLandroid/content/ContentResolver;->getSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;I)Z
 HSPLandroid/content/ContentResolver;->getType(Landroid/net/Uri;)Ljava/lang/String;
 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;->invalidPeriodicExtras(Landroid/os/Bundle;)Z
-HPLandroid/content/ContentResolver;->isSyncPending(Landroid/accounts/Account;Ljava/lang/String;)Z
-HPLandroid/content/ContentResolver;->isSyncPendingAsUser(Landroid/accounts/Account;Ljava/lang/String;I)Z
 HSPLandroid/content/ContentResolver;->maybeLogQueryToEventLog(JLandroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;)V
 HSPLandroid/content/ContentResolver;->maybeLogUpdateToEventLog(JLandroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;)V
 HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;I)V
 HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;II)V
 HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;Z)V
-HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;ZI)V
 HSPLandroid/content/ContentResolver;->notifyChange([Landroid/net/Uri;Landroid/database/ContentObserver;II)V
 HSPLandroid/content/ContentResolver;->openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentResolver;->openFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
 HSPLandroid/content/ContentResolver;->openFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;
-HPLandroid/content/ContentResolver;->openInputStream(Landroid/net/Uri;)Ljava/io/InputStream;
+HSPLandroid/content/ContentResolver;->openInputStream(Landroid/net/Uri;)Ljava/io/InputStream;
 HSPLandroid/content/ContentResolver;->openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
 HSPLandroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/content/ContentResolver;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;)V
 HSPLandroid/content/ContentResolver;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;I)V
-HSPLandroid/content/ContentResolver;->removePeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
-HSPLandroid/content/ContentResolver;->requestSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
-PLandroid/content/ContentResolver;->requestSync(Landroid/content/SyncRequest;)V
-HSPLandroid/content/ContentResolver;->requestSyncAsUser(Landroid/accounts/Account;Ljava/lang/String;ILandroid/os/Bundle;)V
-HSPLandroid/content/ContentResolver;->resolveUserId(Landroid/net/Uri;)I
-HSPLandroid/content/ContentResolver;->setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V
-HSPLandroid/content/ContentResolver;->setSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;Z)V
-HSPLandroid/content/ContentResolver;->setSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;ZI)V
-PLandroid/content/ContentResolver;->syncErrorToString(I)Ljava/lang/String;
 HSPLandroid/content/ContentResolver;->unregisterContentObserver(Landroid/database/ContentObserver;)V
 HSPLandroid/content/ContentResolver;->update(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)I
 HSPLandroid/content/ContentResolver;->update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I
-HSPLandroid/content/ContentResolver;->validateSyncExtrasBundle(Landroid/os/Bundle;)V
-HSPLandroid/content/ContentResolver;->wrap(Landroid/content/ContentInterface;)Landroid/content/ContentResolver;
-HSPLandroid/content/ContentResolver;->wrap(Landroid/content/ContentProvider;)Landroid/content/ContentResolver;
 HSPLandroid/content/ContentUris;->appendId(Landroid/net/Uri$Builder;J)Landroid/net/Uri$Builder;
 HSPLandroid/content/ContentUris;->parseId(Landroid/net/Uri;)J
 HSPLandroid/content/ContentUris;->withAppendedId(Landroid/net/Uri;J)Landroid/net/Uri;
 HSPLandroid/content/ContentValues$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ContentValues;
 HSPLandroid/content/ContentValues$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/ContentValues$1;->newArray(I)[Landroid/content/ContentValues;
-HSPLandroid/content/ContentValues$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/content/ContentValues;-><init>()V
 HSPLandroid/content/ContentValues;-><init>(I)V
 HSPLandroid/content/ContentValues;-><init>(Landroid/content/ContentValues;)V
-PLandroid/content/ContentValues;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/ContentValues;-><init>(Landroid/os/Parcel;Landroid/content/ContentValues$1;)V
+HSPLandroid/content/ContentValues;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/ContentValues;-><init>(Landroid/os/Parcel;Landroid/content/ContentValues$1;)V
 HSPLandroid/content/ContentValues;->clear()V
 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;->getAsBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
-HSPLandroid/content/ContentValues;->getAsByteArray(Ljava/lang/String;)[B
-HPLandroid/content/ContentValues;->getAsDouble(Ljava/lang/String;)Ljava/lang/Double;
-HPLandroid/content/ContentValues;->getAsFloat(Ljava/lang/String;)Ljava/lang/Float;
 HSPLandroid/content/ContentValues;->getAsInteger(Ljava/lang/String;)Ljava/lang/Integer;
 HSPLandroid/content/ContentValues;->getAsLong(Ljava/lang/String;)Ljava/lang/Long;
 HSPLandroid/content/ContentValues;->getAsString(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/content/ContentValues;->getValues()Landroid/util/ArrayMap;
-HPLandroid/content/ContentValues;->hashCode()I
 HSPLandroid/content/ContentValues;->isEmpty()Z
-HPLandroid/content/ContentValues;->isSupportedValue(Ljava/lang/Object;)Z
 HSPLandroid/content/ContentValues;->keySet()Ljava/util/Set;
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Boolean;)V
-HPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Byte;)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;[B)V
-HSPLandroid/content/ContentValues;->putAll(Landroid/content/ContentValues;)V
 HSPLandroid/content/ContentValues;->putNull(Ljava/lang/String;)V
-HSPLandroid/content/ContentValues;->putObject(Ljava/lang/String;Ljava/lang/Object;)V
 HSPLandroid/content/ContentValues;->remove(Ljava/lang/String;)V
 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/Context;-><init>()V
-HSPLandroid/content/Context;->assertRuntimeOverlayThemable()V
 HSPLandroid/content/Context;->getColor(I)I
 HSPLandroid/content/Context;->getColorStateList(I)Landroid/content/res/ColorStateList;
 HSPLandroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable;
-HPLandroid/content/Context;->getNextAutofillId()I
+HSPLandroid/content/Context;->getNextAutofillId()I
 HSPLandroid/content/Context;->getSharedPrefsFile(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/content/Context;->getString(I)Ljava/lang/String;
 HSPLandroid/content/Context;->getString(I[Ljava/lang/Object;)Ljava/lang/String;
 HSPLandroid/content/Context;->getSystemService(Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/content/Context;->getText(I)Ljava/lang/CharSequence;
-PLandroid/content/Context;->isAutofillCompatibilityEnabled()Z
+HSPLandroid/content/Context;->isAutofillCompatibilityEnabled()Z
 HSPLandroid/content/Context;->obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;
 HSPLandroid/content/Context;->obtainStyledAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
 HSPLandroid/content/Context;->obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;
 HSPLandroid/content/Context;->obtainStyledAttributes([I)Landroid/content/res/TypedArray;
-HSPLandroid/content/Context;->registerComponentCallbacks(Landroid/content/ComponentCallbacks;)V
-HPLandroid/content/Context;->unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/ContextWrapper;-><init>(Landroid/content/Context;)V
 HSPLandroid/content/ContextWrapper;->attachBaseContext(Landroid/content/Context;)V
-HSPLandroid/content/ContextWrapper;->bindIsolatedService(Landroid/content/Intent;ILjava/lang/String;Ljava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z
 HSPLandroid/content/ContextWrapper;->bindService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z
-PLandroid/content/ContextWrapper;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/Handler;Landroid/os/UserHandle;)Z
 HSPLandroid/content/ContextWrapper;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z
 HSPLandroid/content/ContextWrapper;->canLoadUnsafeResources()Z
 HSPLandroid/content/ContextWrapper;->checkCallingOrSelfPermission(Ljava/lang/String;)I
-HSPLandroid/content/ContextWrapper;->checkCallingPermission(Ljava/lang/String;)I
-HPLandroid/content/ContextWrapper;->checkCallingUriPermission(Landroid/net/Uri;I)I
 HSPLandroid/content/ContextWrapper;->checkPermission(Ljava/lang/String;II)I
 HSPLandroid/content/ContextWrapper;->checkPermission(Ljava/lang/String;IILandroid/os/IBinder;)I
 HSPLandroid/content/ContextWrapper;->checkSelfPermission(Ljava/lang/String;)I
-HSPLandroid/content/ContextWrapper;->checkUriPermission(Landroid/net/Uri;III)I
-HSPLandroid/content/ContextWrapper;->checkUriPermission(Landroid/net/Uri;IIILandroid/os/IBinder;)I
 HSPLandroid/content/ContextWrapper;->createApplicationContext(Landroid/content/pm/ApplicationInfo;I)Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createConfigurationContext(Landroid/content/res/Configuration;)Landroid/content/Context;
-HSPLandroid/content/ContextWrapper;->createContextAsUser(Landroid/os/UserHandle;I)Landroid/content/Context;
-HSPLandroid/content/ContextWrapper;->createCredentialProtectedStorageContext()Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createDeviceProtectedStorageContext()Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createDisplayContext(Landroid/view/Display;)Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createFeatureContext(Ljava/lang/String;)Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createPackageContext(Ljava/lang/String;I)Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createPackageContextAsUser(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/Context;
-HSPLandroid/content/ContextWrapper;->databaseList()[Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->deleteDatabase(Ljava/lang/String;)Z
 HSPLandroid/content/ContextWrapper;->deleteFile(Ljava/lang/String;)Z
-PLandroid/content/ContextWrapper;->deleteSharedPreferences(Ljava/lang/String;)Z
 HSPLandroid/content/ContextWrapper;->enforceCallingOrSelfPermission(Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/content/ContextWrapper;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/ContextWrapper;->enforcePermission(Ljava/lang/String;IILjava/lang/String;)V
-HSPLandroid/content/ContextWrapper;->fileList()[Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getApplicationContext()Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
 HSPLandroid/content/ContextWrapper;->getAssets()Landroid/content/res/AssetManager;
@@ -6029,7 +2789,6 @@
 HSPLandroid/content/ContextWrapper;->getBasePackageName()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getCacheDir()Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getClassLoader()Ljava/lang/ClassLoader;
-HSPLandroid/content/ContextWrapper;->getCodeCacheDir()Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getContentCaptureOptions()Landroid/content/ContentCaptureOptions;
 HSPLandroid/content/ContextWrapper;->getContentResolver()Landroid/content/ContentResolver;
 HSPLandroid/content/ContextWrapper;->getDataDir()Ljava/io/File;
@@ -6038,10 +2797,8 @@
 HSPLandroid/content/ContextWrapper;->getDisplay()Landroid/view/Display;
 HSPLandroid/content/ContextWrapper;->getDisplayId()I
 HSPLandroid/content/ContextWrapper;->getExternalCacheDir()Ljava/io/File;
-HSPLandroid/content/ContextWrapper;->getExternalCacheDirs()[Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getExternalFilesDir(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;
-HSPLandroid/content/ContextWrapper;->getExternalMediaDirs()[Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getFeatureId()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getFileStreamPath(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getFilesDir()Ljava/io/File;
@@ -6053,147 +2810,62 @@
 HSPLandroid/content/ContextWrapper;->getPackageCodePath()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getPackageManager()Landroid/content/pm/PackageManager;
 HSPLandroid/content/ContextWrapper;->getPackageName()Ljava/lang/String;
-HSPLandroid/content/ContextWrapper;->getPackageResourcePath()Ljava/lang/String;
-HPLandroid/content/ContextWrapper;->getPreloadsFileCache()Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getResources()Landroid/content/res/Resources;
 HSPLandroid/content/ContextWrapper;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;
 HSPLandroid/content/ContextWrapper;->getSharedPreferencesPath(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
 HSPLandroid/content/ContextWrapper;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getTheme()Landroid/content/res/Resources$Theme;
-HPLandroid/content/ContextWrapper;->getThemeResId()I
 HSPLandroid/content/ContextWrapper;->getUser()Landroid/os/UserHandle;
 HSPLandroid/content/ContextWrapper;->getUserId()I
-HSPLandroid/content/ContextWrapper;->grantUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V
 HSPLandroid/content/ContextWrapper;->isDeviceProtectedStorage()Z
 HSPLandroid/content/ContextWrapper;->isRestricted()Z
 HSPLandroid/content/ContextWrapper;->openFileInput(Ljava/lang/String;)Ljava/io/FileInputStream;
 HSPLandroid/content/ContextWrapper;->openFileOutput(Ljava/lang/String;I)Ljava/io/FileOutputStream;
-PLandroid/content/ContextWrapper;->openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/content/ContextWrapper;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
 HSPLandroid/content/ContextWrapper;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;
 HSPLandroid/content/ContextWrapper;->registerReceiverAsUser(Landroid/content/BroadcastReceiver;Landroid/os/UserHandle;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;
-HSPLandroid/content/ContextWrapper;->registerReceiverForAllUsers(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;
-HSPLandroid/content/ContextWrapper;->revokeUriPermission(Landroid/net/Uri;I)V
 HSPLandroid/content/ContextWrapper;->sendBroadcast(Landroid/content/Intent;)V
 HSPLandroid/content/ContextWrapper;->sendBroadcast(Landroid/content/Intent;Ljava/lang/String;)V
-HSPLandroid/content/ContextWrapper;->sendBroadcast(Landroid/content/Intent;Ljava/lang/String;Landroid/os/Bundle;)V
 HSPLandroid/content/ContextWrapper;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
 HSPLandroid/content/ContextWrapper;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;)V
-HSPLandroid/content/ContextWrapper;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;Landroid/os/Bundle;)V
-PLandroid/content/ContextWrapper;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;)V
-HSPLandroid/content/ContextWrapper;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V
-HPLandroid/content/ContextWrapper;->sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V
 HSPLandroid/content/ContextWrapper;->sendStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
-HSPLandroid/content/ContextWrapper;->setAutofillClient(Landroid/view/autofill/AutofillManager$AutofillClient;)V
 HSPLandroid/content/ContextWrapper;->setAutofillOptions(Landroid/content/AutofillOptions;)V
 HSPLandroid/content/ContextWrapper;->setContentCaptureOptions(Landroid/content/ContentCaptureOptions;)V
-HPLandroid/content/ContextWrapper;->startActivityAsUser(Landroid/content/Intent;Landroid/os/Bundle;Landroid/os/UserHandle;)V
 HSPLandroid/content/ContextWrapper;->startForegroundService(Landroid/content/Intent;)Landroid/content/ComponentName;
 HSPLandroid/content/ContextWrapper;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;
 HSPLandroid/content/ContextWrapper;->stopService(Landroid/content/Intent;)Z
 HSPLandroid/content/ContextWrapper;->unbindService(Landroid/content/ServiceConnection;)V
 HSPLandroid/content/ContextWrapper;->unregisterReceiver(Landroid/content/BroadcastReceiver;)V
-HPLandroid/content/ContextWrapper;->updateDisplay(I)V
-HPLandroid/content/CursorLoader;-><init>(Landroid/content/Context;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
-HPLandroid/content/CursorLoader;->cancelLoadInBackground()V
-HPLandroid/content/CursorLoader;->deliverResult(Landroid/database/Cursor;)V
-HPLandroid/content/CursorLoader;->deliverResult(Ljava/lang/Object;)V
-HPLandroid/content/CursorLoader;->getUri()Landroid/net/Uri;
-HPLandroid/content/CursorLoader;->loadInBackground()Landroid/database/Cursor;
-HPLandroid/content/CursorLoader;->loadInBackground()Ljava/lang/Object;
-HPLandroid/content/CursorLoader;->onCanceled(Landroid/database/Cursor;)V
-HPLandroid/content/CursorLoader;->onCanceled(Ljava/lang/Object;)V
-HPLandroid/content/CursorLoader;->onStartLoading()V
+HSPLandroid/content/ContextWrapper;->updateDisplay(I)V
+HSPLandroid/content/IClipboard$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/content/IClipboard$Stub$Proxy;->addPrimaryClipChangedListener(Landroid/content/IOnPrimaryClipChangedListener;Ljava/lang/String;I)V
-HPLandroid/content/IClipboard$Stub$Proxy;->getPrimaryClip(Ljava/lang/String;I)Landroid/content/ClipData;
-HSPLandroid/content/IClipboard$Stub$Proxy;->hasPrimaryClip(Ljava/lang/String;I)Z
-HPLandroid/content/IClipboard$Stub$Proxy;->removePrimaryClipChangedListener(Landroid/content/IOnPrimaryClipChangedListener;Ljava/lang/String;I)V
-HSPLandroid/content/IClipboard$Stub;-><init>()V
-PLandroid/content/IClipboard$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/content/IClipboard$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/content/IClipboard$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IClipboard;
+HSPLandroid/content/IContentService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/content/IContentService$Stub$Proxy;->addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V
-HSPLandroid/content/IContentService$Stub$Proxy;->addStatusChangeListener(ILandroid/content/ISyncStatusObserver;)V
-HSPLandroid/content/IContentService$Stub$Proxy;->cancelSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)V
 HSPLandroid/content/IContentService$Stub$Proxy;->getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I
 HSPLandroid/content/IContentService$Stub$Proxy;->getMasterSyncAutomatically()Z
-HSPLandroid/content/IContentService$Stub$Proxy;->getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Ljava/util/List;
-HSPLandroid/content/IContentService$Stub$Proxy;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType;
 HSPLandroid/content/IContentService$Stub$Proxy;->getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z
-HPLandroid/content/IContentService$Stub$Proxy;->isSyncPendingAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;I)Z
 HSPLandroid/content/IContentService$Stub$Proxy;->notifyChange([Landroid/net/Uri;Landroid/database/IContentObserver;ZIIILjava/lang/String;)V
 HSPLandroid/content/IContentService$Stub$Proxy;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/IContentObserver;II)V
-HSPLandroid/content/IContentService$Stub$Proxy;->removePeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
-HSPLandroid/content/IContentService$Stub$Proxy;->setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V
-HSPLandroid/content/IContentService$Stub$Proxy;->setSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;ZI)V
-PLandroid/content/IContentService$Stub$Proxy;->sync(Landroid/content/SyncRequest;Ljava/lang/String;)V
-HSPLandroid/content/IContentService$Stub$Proxy;->syncAsUser(Landroid/content/SyncRequest;ILjava/lang/String;)V
 HSPLandroid/content/IContentService$Stub$Proxy;->unregisterContentObserver(Landroid/database/IContentObserver;)V
-HSPLandroid/content/IContentService$Stub;-><init>()V
 HSPLandroid/content/IContentService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IContentService;
-PLandroid/content/IContentService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/content/IContentService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/content/IIntentReceiver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/content/IIntentReceiver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/content/IIntentReceiver$Stub$Proxy;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 HSPLandroid/content/IIntentReceiver$Stub;-><init>()V
 HSPLandroid/content/IIntentReceiver$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/content/IIntentReceiver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentReceiver;
-HPLandroid/content/IIntentReceiver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSLandroid/content/IIntentSender$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/content/IIntentSender$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/content/IIntentSender$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/content/IIntentSender$Stub$Proxy;->send(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)V
-HSPLandroid/content/IIntentSender$Stub;-><init>()V
-HSPLandroid/content/IIntentSender$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/content/IIntentSender$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentSender;
-PLandroid/content/IOnPrimaryClipChangedListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/content/IOnPrimaryClipChangedListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/content/IOnPrimaryClipChangedListener$Stub$Proxy;->dispatchPrimaryClipChanged()V
+HSPLandroid/content/IOnPrimaryClipChangedListener$Stub;-><init>()V
 HSPLandroid/content/IOnPrimaryClipChangedListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/content/IOnPrimaryClipChangedListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IOnPrimaryClipChangedListener;
-HPLandroid/content/IOnPrimaryClipChangedListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/content/IRestrictionsManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/content/IRestrictionsManager$Stub$Proxy;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
-HSPLandroid/content/IRestrictionsManager$Stub;-><init>()V
-HSPLandroid/content/IRestrictionsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IRestrictionsManager;
-PLandroid/content/IRestrictionsManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/content/IRestrictionsManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/content/ISyncAdapter$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/content/ISyncAdapter$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/content/ISyncAdapter$Stub$Proxy;->cancelSync(Landroid/content/ISyncContext;)V
-PLandroid/content/ISyncAdapter$Stub$Proxy;->onUnsyncableAccount(Landroid/content/ISyncAdapterUnsyncableAccountCallback;)V
-PLandroid/content/ISyncAdapter$Stub$Proxy;->startSync(Landroid/content/ISyncContext;Ljava/lang/String;Landroid/accounts/Account;Landroid/os/Bundle;)V
-HSLandroid/content/ISyncAdapter$Stub;-><init>()V
+HSPLandroid/content/ISyncAdapter$Stub;-><init>()V
 HSPLandroid/content/ISyncAdapter$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/content/ISyncAdapter$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncAdapter;
 HSPLandroid/content/ISyncAdapter$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSLandroid/content/ISyncAdapterUnsyncableAccountCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSLandroid/content/ISyncAdapterUnsyncableAccountCallback$Stub$Proxy;->onUnsyncableAccountDone(Z)V
-PLandroid/content/ISyncAdapterUnsyncableAccountCallback$Stub;-><init>()V
-PLandroid/content/ISyncAdapterUnsyncableAccountCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSLandroid/content/ISyncAdapterUnsyncableAccountCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncAdapterUnsyncableAccountCallback;
-PLandroid/content/ISyncAdapterUnsyncableAccountCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/content/ISyncContext$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HSPLandroid/content/ISyncContext$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/content/ISyncContext$Stub$Proxy;->onFinished(Landroid/content/SyncResult;)V
-PLandroid/content/ISyncContext$Stub;-><init>()V
-PLandroid/content/ISyncContext$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/content/ISyncContext$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/content/ISyncContext$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/content/ISyncStatusObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/content/ISyncStatusObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/content/ISyncStatusObserver$Stub$Proxy;->onStatusChanged(I)V
-HSPLandroid/content/ISyncStatusObserver$Stub;-><init>()V
-HSPLandroid/content/ISyncStatusObserver$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/content/ISyncStatusObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncStatusObserver;
-PLandroid/content/ISyncStatusObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/content/ISyncContext$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncContext;
 HSPLandroid/content/Intent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/Intent;
 HSPLandroid/content/Intent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/Intent$1;->newArray(I)[Landroid/content/Intent;
-HSPLandroid/content/Intent$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/content/Intent$FilterComparison;-><init>(Landroid/content/Intent;)V
-HSPLandroid/content/Intent$FilterComparison;->equals(Ljava/lang/Object;)Z
-HSPLandroid/content/Intent$FilterComparison;->getIntent()Landroid/content/Intent;
-HSPLandroid/content/Intent$FilterComparison;->hashCode()I
 HSPLandroid/content/Intent;-><init>()V
 HSPLandroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V
 HSPLandroid/content/Intent;-><init>(Landroid/content/Intent;)V
@@ -6204,20 +2876,7 @@
 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;
-HSPLandroid/content/Intent;->canStripForHistory()Z
-HSPLandroid/content/Intent;->clone()Ljava/lang/Object;
 HSPLandroid/content/Intent;->cloneFilter()Landroid/content/Intent;
-HSPLandroid/content/Intent;->createChooser(Landroid/content/Intent;Ljava/lang/CharSequence;)Landroid/content/Intent;
-HSPLandroid/content/Intent;->createChooser(Landroid/content/Intent;Ljava/lang/CharSequence;Landroid/content/IntentSender;)Landroid/content/Intent;
-HSPLandroid/content/Intent;->describeContents()I
-HSPLandroid/content/Intent;->dockStateToString(I)Ljava/lang/String;
-HPLandroid/content/Intent;->dumpDebug(Landroid/util/proto/ProtoOutputStream;)V
-PLandroid/content/Intent;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLandroid/content/Intent;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JZZZZ)V
-HPLandroid/content/Intent;->dumpDebugWithoutFieldId(Landroid/util/proto/ProtoOutputStream;ZZZZ)V
-HPLandroid/content/Intent;->fillIn(Landroid/content/Intent;I)I
-HSPLandroid/content/Intent;->filterEquals(Landroid/content/Intent;)Z
-HSPLandroid/content/Intent;->filterHashCode()I
 HSPLandroid/content/Intent;->getAction()Ljava/lang/String;
 HSPLandroid/content/Intent;->getBooleanExtra(Ljava/lang/String;Z)Z
 HSPLandroid/content/Intent;->getBundleExtra(Ljava/lang/String;)Landroid/os/Bundle;
@@ -6225,82 +2884,48 @@
 HSPLandroid/content/Intent;->getCategories()Ljava/util/Set;
 HSPLandroid/content/Intent;->getClipData()Landroid/content/ClipData;
 HSPLandroid/content/Intent;->getComponent()Landroid/content/ComponentName;
-PLandroid/content/Intent;->getContentUserHint()I
 HSPLandroid/content/Intent;->getData()Landroid/net/Uri;
-PLandroid/content/Intent;->getDataString()Ljava/lang/String;
+HSPLandroid/content/Intent;->getDataString()Ljava/lang/String;
 HSPLandroid/content/Intent;->getExtras()Landroid/os/Bundle;
 HSPLandroid/content/Intent;->getFlags()I
 HSPLandroid/content/Intent;->getIntArrayExtra(Ljava/lang/String;)[I
 HSPLandroid/content/Intent;->getIntExtra(Ljava/lang/String;I)I
-HPLandroid/content/Intent;->getIntegerArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;
-PLandroid/content/Intent;->getLaunchToken()Ljava/lang/String;
 HSPLandroid/content/Intent;->getLongExtra(Ljava/lang/String;J)J
 HSPLandroid/content/Intent;->getPackage()Ljava/lang/String;
-HSPLandroid/content/Intent;->getParcelableArrayExtra(Ljava/lang/String;)[Landroid/os/Parcelable;
 HSPLandroid/content/Intent;->getParcelableArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLandroid/content/Intent;->getParcelableExtra(Ljava/lang/String;)Landroid/os/Parcelable;
 HSPLandroid/content/Intent;->getScheme()Ljava/lang/String;
-HSPLandroid/content/Intent;->getSelector()Landroid/content/Intent;
 HSPLandroid/content/Intent;->getSerializableExtra(Ljava/lang/String;)Ljava/io/Serializable;
-PLandroid/content/Intent;->getSourceBounds()Landroid/graphics/Rect;
 HSPLandroid/content/Intent;->getStringArrayExtra(Ljava/lang/String;)[Ljava/lang/String;
 HSPLandroid/content/Intent;->getStringArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLandroid/content/Intent;->getStringExtra(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/content/Intent;->getType()Ljava/lang/String;
-PLandroid/content/Intent;->hasCategory(Ljava/lang/String;)Z
+HSPLandroid/content/Intent;->hasCategory(Ljava/lang/String;)Z
 HSPLandroid/content/Intent;->hasExtra(Ljava/lang/String;)Z
-HSPLandroid/content/Intent;->hasFileDescriptors()Z
-HSPLandroid/content/Intent;->hasPackageEquivalentComponent()Z
-HSPLandroid/content/Intent;->hasWebURI()Z
-PLandroid/content/Intent;->isAccessUriMode(I)Z
-PLandroid/content/Intent;->isDocument()Z
-HSPLandroid/content/Intent;->isExcludingStopped()Z
-HSPLandroid/content/Intent;->isWebIntent()Z
-HSPLandroid/content/Intent;->makeMainActivity(Landroid/content/ComponentName;)Landroid/content/Intent;
-HSPLandroid/content/Intent;->makeMainSelectorActivity(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;
-PLandroid/content/Intent;->makeRestartActivityTask(Landroid/content/ComponentName;)Landroid/content/Intent;
-HPLandroid/content/Intent;->maybeStripForHistory()Landroid/content/Intent;
 HSPLandroid/content/Intent;->migrateExtraStreamToClipData()Z
-HSPLandroid/content/Intent;->normalizeMimeType(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/content/Intent;->parseCommandArgs(Landroid/os/ShellCommand;Landroid/content/Intent$CommandOptionHandler;)Landroid/content/Intent;
-PLandroid/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;->prepareToEnterProcess()V
 HSPLandroid/content/Intent;->prepareToLeaveProcess(Landroid/content/Context;)V
 HSPLandroid/content/Intent;->prepareToLeaveProcess(Z)V
-HPLandroid/content/Intent;->putCharSequenceArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;
-HPLandroid/content/Intent;->putExtra(Ljava/lang/String;B)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;J)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;Landroid/os/Parcelable;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/io/Serializable;)Landroid/content/Intent;
-HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;Z)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;[B)Landroid/content/Intent;
-HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;[I)Landroid/content/Intent;
-HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;[J)Landroid/content/Intent;
-HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;[Landroid/os/Parcelable;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/Intent;
-HSPLandroid/content/Intent;->putExtras(Landroid/content/Intent;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtras(Landroid/os/Bundle;)Landroid/content/Intent;
-HSPLandroid/content/Intent;->putIntegerArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putParcelableArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putStringArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/content/Intent;->removeCategory(Ljava/lang/String;)V
-HSPLandroid/content/Intent;->removeExtra(Ljava/lang/String;)V
-PLandroid/content/Intent;->removeFlags(I)V
-HPLandroid/content/Intent;->replaceExtras(Landroid/content/Intent;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->removeCategory(Ljava/lang/String;)V
 HSPLandroid/content/Intent;->replaceExtras(Landroid/os/Bundle;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->resolveActivity(Landroid/content/pm/PackageManager;)Landroid/content/ComponentName;
-HSPLandroid/content/Intent;->resolveActivityInfo(Landroid/content/pm/PackageManager;I)Landroid/content/pm/ActivityInfo;
 HSPLandroid/content/Intent;->resolveSystemService(Landroid/content/pm/PackageManager;I)Landroid/content/ComponentName;
 HSPLandroid/content/Intent;->resolveType(Landroid/content/ContentResolver;)Ljava/lang/String;
 HSPLandroid/content/Intent;->resolveTypeIfNeeded(Landroid/content/ContentResolver;)Ljava/lang/String;
-PLandroid/content/Intent;->restoreFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/content/Intent;
-PLandroid/content/Intent;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLandroid/content/Intent;->setAction(Ljava/lang/String;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->setAllowFds(Z)V
 HSPLandroid/content/Intent;->setClass(Landroid/content/Context;Ljava/lang/Class;)Landroid/content/Intent;
@@ -6312,15 +2937,10 @@
 HSPLandroid/content/Intent;->setDefusable(Z)V
 HSPLandroid/content/Intent;->setExtrasClassLoader(Ljava/lang/ClassLoader;)V
 HSPLandroid/content/Intent;->setFlags(I)Landroid/content/Intent;
-PLandroid/content/Intent;->setIdentifier(Ljava/lang/String;)Landroid/content/Intent;
-PLandroid/content/Intent;->setLaunchToken(Ljava/lang/String;)V
 HSPLandroid/content/Intent;->setPackage(Ljava/lang/String;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->setSelector(Landroid/content/Intent;)V
-PLandroid/content/Intent;->setSourceBounds(Landroid/graphics/Rect;)V
 HSPLandroid/content/Intent;->setType(Ljava/lang/String;)Landroid/content/Intent;
-PLandroid/content/Intent;->toInsecureString()Ljava/lang/String;
 HSPLandroid/content/Intent;->toShortString(Ljava/lang/StringBuilder;ZZZZ)V
-HSPLandroid/content/Intent;->toShortString(ZZZZ)Ljava/lang/String;
 HSPLandroid/content/Intent;->toString()Ljava/lang/String;
 HSPLandroid/content/Intent;->toUri(I)Ljava/lang/String;
 HSPLandroid/content/Intent;->toUriFragment(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
@@ -6328,23 +2948,11 @@
 HSPLandroid/content/Intent;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/IntentFilter$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/IntentFilter;
 HSPLandroid/content/IntentFilter$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/IntentFilter$AuthorityEntry;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/IntentFilter$AuthorityEntry;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/content/IntentFilter$AuthorityEntry;->access$000(Landroid/content/IntentFilter$AuthorityEntry;)Ljava/lang/String;
-PLandroid/content/IntentFilter$AuthorityEntry;->access$100(Landroid/content/IntentFilter$AuthorityEntry;)I
-PLandroid/content/IntentFilter$AuthorityEntry;->access$200(Landroid/content/IntentFilter$AuthorityEntry;)Z
-PLandroid/content/IntentFilter$AuthorityEntry;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLandroid/content/IntentFilter$AuthorityEntry;->equals(Ljava/lang/Object;)Z
-HSPLandroid/content/IntentFilter$AuthorityEntry;->getHost()Ljava/lang/String;
-HSPLandroid/content/IntentFilter$AuthorityEntry;->getPort()I
-HSPLandroid/content/IntentFilter$AuthorityEntry;->match(Landroid/content/IntentFilter$AuthorityEntry;)Z
-HPLandroid/content/IntentFilter$AuthorityEntry;->match(Landroid/net/Uri;)I
 HSPLandroid/content/IntentFilter$AuthorityEntry;->writeToParcel(Landroid/os/Parcel;)V
 HSPLandroid/content/IntentFilter;-><init>()V
-HSPLandroid/content/IntentFilter;-><init>(Landroid/content/IntentFilter;)V
 HSPLandroid/content/IntentFilter;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/IntentFilter;-><init>(Ljava/lang/String;)V
-HSPLandroid/content/IntentFilter;->actionsIterator()Ljava/util/Iterator;
 HSPLandroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
 HSPLandroid/content/IntentFilter;->addCategory(Ljava/lang/String;)V
 HSPLandroid/content/IntentFilter;->addDataAuthority(Landroid/content/IntentFilter$AuthorityEntry;)V
@@ -6355,874 +2963,161 @@
 HSPLandroid/content/IntentFilter;->addDataSchemeSpecificPart(Landroid/os/PatternMatcher;)V
 HSPLandroid/content/IntentFilter;->addDataSchemeSpecificPart(Ljava/lang/String;I)V
 HSPLandroid/content/IntentFilter;->addDataType(Ljava/lang/String;)V
-HSPLandroid/content/IntentFilter;->authoritiesIterator()Ljava/util/Iterator;
-HSPLandroid/content/IntentFilter;->categoriesIterator()Ljava/util/Iterator;
 HSPLandroid/content/IntentFilter;->countActions()I
-HSPLandroid/content/IntentFilter;->countCategories()I
-HSPLandroid/content/IntentFilter;->countDataAuthorities()I
-HSPLandroid/content/IntentFilter;->countDataPaths()I
-HSPLandroid/content/IntentFilter;->countDataSchemeSpecificParts()I
-HSPLandroid/content/IntentFilter;->countDataSchemes()I
-HSPLandroid/content/IntentFilter;->countDataTypes()I
-HSPLandroid/content/IntentFilter;->debugCheck()Z
-PLandroid/content/IntentFilter;->dump(Landroid/util/Printer;Ljava/lang/String;)V
-HPLandroid/content/IntentFilter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLandroid/content/IntentFilter;->findMimeType(Ljava/lang/String;)Z
 HSPLandroid/content/IntentFilter;->getAction(I)Ljava/lang/String;
 HSPLandroid/content/IntentFilter;->getAutoVerify()Z
-HSPLandroid/content/IntentFilter;->getCategory(I)Ljava/lang/String;
-HSPLandroid/content/IntentFilter;->getDataAuthority(I)Landroid/content/IntentFilter$AuthorityEntry;
-HSPLandroid/content/IntentFilter;->getDataPath(I)Landroid/os/PatternMatcher;
-HSPLandroid/content/IntentFilter;->getDataScheme(I)Ljava/lang/String;
-HSPLandroid/content/IntentFilter;->getDataType(I)Ljava/lang/String;
-HPLandroid/content/IntentFilter;->getHostsList()Ljava/util/ArrayList;
-HSPLandroid/content/IntentFilter;->getOrder()I
 HSPLandroid/content/IntentFilter;->getPriority()I
-HSPLandroid/content/IntentFilter;->handleAllWebDataURI()Z
-HSPLandroid/content/IntentFilter;->handlesWebUris(Z)Z
 HSPLandroid/content/IntentFilter;->hasAction(Ljava/lang/String;)Z
 HSPLandroid/content/IntentFilter;->hasCategory(Ljava/lang/String;)Z
-HSPLandroid/content/IntentFilter;->hasDataAuthority(Landroid/content/IntentFilter$AuthorityEntry;)Z
-HSPLandroid/content/IntentFilter;->hasDataPath(Landroid/os/PatternMatcher;)Z
-HPLandroid/content/IntentFilter;->hasDataPath(Ljava/lang/String;)Z
-HSPLandroid/content/IntentFilter;->hasDataScheme(Ljava/lang/String;)Z
-PLandroid/content/IntentFilter;->hasDataSchemeSpecificPart(Landroid/os/PatternMatcher;)Z
-HPLandroid/content/IntentFilter;->hasDataSchemeSpecificPart(Ljava/lang/String;)Z
-HSPLandroid/content/IntentFilter;->hasExactDataType(Ljava/lang/String;)Z
-HSPLandroid/content/IntentFilter;->isImplicitlyVisibleToInstantApp()Z
-HSPLandroid/content/IntentFilter;->isVisibleToInstantApp()Z
-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;->matchAction(Ljava/lang/String;)Z
 HSPLandroid/content/IntentFilter;->matchCategories(Ljava/util/Set;)Ljava/lang/String;
 HSPLandroid/content/IntentFilter;->matchData(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)I
-HPLandroid/content/IntentFilter;->matchDataAuthority(Landroid/net/Uri;)I
-PLandroid/content/IntentFilter;->needsVerification()Z
-HSPLandroid/content/IntentFilter;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
-HSPLandroid/content/IntentFilter;->schemesIterator()Ljava/util/Iterator;
 HSPLandroid/content/IntentFilter;->setAutoVerify(Z)V
-HSPLandroid/content/IntentFilter;->setOrder(I)V
 HSPLandroid/content/IntentFilter;->setPriority(I)V
-PLandroid/content/IntentFilter;->setVerified(Z)V
 HSPLandroid/content/IntentFilter;->setVisibilityToInstantApp(I)V
-HSPLandroid/content/IntentFilter;->typesIterator()Ljava/util/Iterator;
 HSPLandroid/content/IntentFilter;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/IntentFilter;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
-PLandroid/content/IntentSender$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/IntentSender;
-PLandroid/content/IntentSender$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/content/IntentSender;-><init>(Landroid/content/IIntentSender;Landroid/os/IBinder;)V
-PLandroid/content/IntentSender;-><init>(Landroid/os/IBinder;)V
-PLandroid/content/IntentSender;->sendIntent(Landroid/content/Context;ILandroid/content/Intent;Landroid/content/IntentSender$OnFinished;Landroid/os/Handler;)V
-PLandroid/content/IntentSender;->sendIntent(Landroid/content/Context;ILandroid/content/Intent;Landroid/content/IntentSender$OnFinished;Landroid/os/Handler;Ljava/lang/String;)V
-HPLandroid/content/IntentSender;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/content/Loader$ForceLoadContentObserver;-><init>(Landroid/content/Loader;)V
-HPLandroid/content/Loader$ForceLoadContentObserver;->onChange(Z)V
-HPLandroid/content/Loader;-><init>(Landroid/content/Context;)V
-HPLandroid/content/Loader;->abandon()V
-HPLandroid/content/Loader;->cancelLoad()Z
-HPLandroid/content/Loader;->commitContentChanged()V
-HPLandroid/content/Loader;->deliverCancellation()V
-HPLandroid/content/Loader;->deliverResult(Ljava/lang/Object;)V
-HPLandroid/content/Loader;->forceLoad()V
-HPLandroid/content/Loader;->getContext()Landroid/content/Context;
-HPLandroid/content/Loader;->getId()I
-HPLandroid/content/Loader;->isAbandoned()Z
-HPLandroid/content/Loader;->isReset()Z
-HPLandroid/content/Loader;->isStarted()Z
-HPLandroid/content/Loader;->onAbandon()V
-HPLandroid/content/Loader;->onContentChanged()V
-HPLandroid/content/Loader;->onForceLoad()V
-HPLandroid/content/Loader;->registerListener(ILandroid/content/Loader$OnLoadCompleteListener;)V
-HPLandroid/content/Loader;->registerOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V
-HPLandroid/content/Loader;->rollbackContentChanged()V
-HPLandroid/content/Loader;->startLoading()V
-HPLandroid/content/Loader;->stopLoading()V
-HPLandroid/content/Loader;->takeContentChanged()Z
-HPLandroid/content/Loader;->unregisterListener(Landroid/content/Loader$OnLoadCompleteListener;)V
-HPLandroid/content/Loader;->unregisterOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V
-HSPLandroid/content/MutableContextWrapper;-><init>(Landroid/content/Context;)V
-HSPLandroid/content/MutableContextWrapper;->setBaseContext(Landroid/content/Context;)V
-HSPLandroid/content/PeriodicSync$1;-><init>()V
-PLandroid/content/PeriodicSync$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/PeriodicSync;
-PLandroid/content/PeriodicSync$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/PeriodicSync;-><clinit>()V
-PLandroid/content/PeriodicSync;-><init>(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;JJ)V
-PLandroid/content/PeriodicSync;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/PeriodicSync;-><init>(Landroid/os/Parcel;Landroid/content/PeriodicSync$1;)V
-PLandroid/content/PeriodicSync;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/PermissionChecker;->checkPermissionCommon(Landroid/content/Context;Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)I
-PLandroid/content/PermissionChecker;->checkPermissionForPreflight(Landroid/content/Context;Ljava/lang/String;IILjava/lang/String;)I
-HSPLandroid/content/RestrictionsManager;-><init>(Landroid/content/Context;Landroid/content/IRestrictionsManager;)V
-HSPLandroid/content/RestrictionsManager;->getApplicationRestrictions()Landroid/os/Bundle;
-HPLandroid/content/RestrictionsManager;->getManifestRestrictions(Ljava/lang/String;)Ljava/util/List;
-HPLandroid/content/RestrictionsManager;->loadManifestRestrictions(Ljava/lang/String;Landroid/content/res/XmlResourceParser;)Ljava/util/List;
-HPLandroid/content/RestrictionsManager;->loadRestriction(Landroid/content/Context;Landroid/content/res/TypedArray;Landroid/content/res/XmlResourceParser;)Landroid/content/RestrictionEntry;
-HPLandroid/content/RestrictionsManager;->loadRestrictionElement(Landroid/content/Context;Landroid/content/res/XmlResourceParser;)Landroid/content/RestrictionEntry;
-HSPLandroid/content/SearchRecentSuggestionsProvider$DatabaseHelper;-><init>(Landroid/content/Context;I)V
-HSPLandroid/content/SearchRecentSuggestionsProvider;-><init>()V
-HSPLandroid/content/SearchRecentSuggestionsProvider;->onCreate()Z
-HSPLandroid/content/SearchRecentSuggestionsProvider;->setupSuggestions(Ljava/lang/String;I)V
-PLandroid/content/ServiceConnection;->onBindingDied(Landroid/content/ComponentName;)V
-PLandroid/content/ServiceConnection;->onNullBinding(Landroid/content/ComponentName;)V
-HSPLandroid/content/SyncAdapterType$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/SyncAdapterType;
-HSPLandroid/content/SyncAdapterType$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/SyncAdapterType$1;->newArray(I)[Landroid/content/SyncAdapterType;
-HSPLandroid/content/SyncAdapterType$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/content/SyncAdapterType;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/SyncAdapterType;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/SyncAdapterType;-><init>(Ljava/lang/String;Ljava/lang/String;ZZZZLjava/lang/String;Ljava/lang/String;)V
-PLandroid/content/SyncAdapterType;->allowParallelSyncs()Z
-HPLandroid/content/SyncAdapterType;->equals(Ljava/lang/Object;)Z
-HSPLandroid/content/SyncAdapterType;->hashCode()I
-PLandroid/content/SyncAdapterType;->isAlwaysSyncable()Z
-PLandroid/content/SyncAdapterType;->isUserVisible()Z
-HSPLandroid/content/SyncAdapterType;->newKey(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SyncAdapterType;
-PLandroid/content/SyncAdapterType;->supportsUploading()Z
-HPLandroid/content/SyncAdapterType;->toString()Ljava/lang/String;
-HPLandroid/content/SyncAdapterType;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/SyncAdaptersCache$MySerializer;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/content/SyncAdapterType;
-HSPLandroid/content/SyncAdaptersCache$MySerializer;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Ljava/lang/Object;
-HSPLandroid/content/SyncAdaptersCache;-><init>(Landroid/content/Context;)V
-HSPLandroid/content/SyncAdaptersCache;->getSyncAdapterPackagesForAuthority(Ljava/lang/String;I)[Ljava/lang/String;
-PLandroid/content/SyncAdaptersCache;->onServicesChangedLocked(I)V
-HSPLandroid/content/SyncAdaptersCache;->parseServiceAttributes(Landroid/content/res/Resources;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/content/SyncAdapterType;
-HSPLandroid/content/SyncAdaptersCache;->parseServiceAttributes(Landroid/content/res/Resources;Ljava/lang/String;Landroid/util/AttributeSet;)Ljava/lang/Object;
-HSPLandroid/content/SyncContext;->getSyncContextBinder()Landroid/os/IBinder;
+HSPLandroid/content/SyncContext;-><init>(Landroid/content/ISyncContext;)V
 HSPLandroid/content/SyncContext;->onFinished(Landroid/content/SyncResult;)V
-PLandroid/content/SyncInfo$1;-><init>()V
-PLandroid/content/SyncInfo;-><clinit>()V
-HPLandroid/content/SyncInfo;-><init>(ILandroid/accounts/Account;Ljava/lang/String;J)V
-PLandroid/content/SyncRequest$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/SyncRequest;
-PLandroid/content/SyncRequest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/content/SyncRequest$Builder;-><init>()V
-HSPLandroid/content/SyncRequest$Builder;->build()Landroid/content/SyncRequest;
-PLandroid/content/SyncRequest$Builder;->setDisallowMetered(Z)Landroid/content/SyncRequest$Builder;
-HSPLandroid/content/SyncRequest$Builder;->setExtras(Landroid/os/Bundle;)Landroid/content/SyncRequest$Builder;
-PLandroid/content/SyncRequest$Builder;->setRequiresCharging(Z)Landroid/content/SyncRequest$Builder;
-HSPLandroid/content/SyncRequest$Builder;->setSyncAdapter(Landroid/accounts/Account;Ljava/lang/String;)Landroid/content/SyncRequest$Builder;
-HSPLandroid/content/SyncRequest$Builder;->syncOnce()Landroid/content/SyncRequest$Builder;
-HSPLandroid/content/SyncRequest;-><init>(Landroid/content/SyncRequest$Builder;)V
-PLandroid/content/SyncRequest;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/SyncRequest;-><init>(Landroid/os/Parcel;Landroid/content/SyncRequest$1;)V
-PLandroid/content/SyncRequest;->getAccount()Landroid/accounts/Account;
-PLandroid/content/SyncRequest;->getBundle()Landroid/os/Bundle;
-PLandroid/content/SyncRequest;->getProvider()Ljava/lang/String;
-PLandroid/content/SyncRequest;->getSyncFlexTime()J
-PLandroid/content/SyncRequest;->getSyncRunTime()J
-PLandroid/content/SyncRequest;->isPeriodic()Z
-HSPLandroid/content/SyncRequest;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/SyncResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/SyncResult;
-PLandroid/content/SyncResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/content/SyncResult;-><init>()V
-PLandroid/content/SyncResult;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/SyncResult;-><init>(Landroid/os/Parcel;Landroid/content/SyncResult$1;)V
-HSPLandroid/content/SyncResult;->clear()V
+HSPLandroid/content/SyncResult;-><init>()V
+HSPLandroid/content/SyncResult;-><init>(Z)V
 HSPLandroid/content/SyncResult;->hasError()Z
 HSPLandroid/content/SyncResult;->hasHardError()Z
 HSPLandroid/content/SyncResult;->hasSoftError()Z
-PLandroid/content/SyncResult;->madeSomeProgress()Z
-PLandroid/content/SyncResult;->toString()Ljava/lang/String;
 HSPLandroid/content/SyncResult;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/SyncStats;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/SyncStats;->clear()V
-HSPLandroid/content/SyncStats;->toString()Ljava/lang/String;
+HSPLandroid/content/SyncStats;-><init>()V
 HSPLandroid/content/SyncStats;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/SyncStatusInfo$Stats;-><init>()V
-PLandroid/content/SyncStatusInfo$Stats;->clear()V
-PLandroid/content/SyncStatusInfo$Stats;->copyTo(Landroid/content/SyncStatusInfo$Stats;)V
-HSPLandroid/content/SyncStatusInfo;-><init>(I)V
-PLandroid/content/SyncStatusInfo;-><init>(Landroid/content/SyncStatusInfo;)V
-PLandroid/content/SyncStatusInfo;->addEvent(Ljava/lang/String;)V
-PLandroid/content/SyncStatusInfo;->areSameDates(JJ)Z
-PLandroid/content/SyncStatusInfo;->copy([J[J)V
-PLandroid/content/SyncStatusInfo;->copyFrom(Landroid/content/SyncStatusInfo;)V
-HPLandroid/content/SyncStatusInfo;->getEvent(I)Ljava/lang/String;
-HPLandroid/content/SyncStatusInfo;->getEventCount()I
-HPLandroid/content/SyncStatusInfo;->getEventTime(I)J
-PLandroid/content/SyncStatusInfo;->getPeriodicSyncTimesSize()I
-PLandroid/content/SyncStatusInfo;->maybeResetTodayStats(ZZ)V
-HSPLandroid/content/SyncStatusInfo;->populateLastEventsInformation(Ljava/util/ArrayList;)V
-PLandroid/content/SyncStatusInfo;->setLastFailure(IJLjava/lang/String;)V
-PLandroid/content/SyncStatusInfo;->setLastSuccess(IJ)V
-HPLandroid/content/UndoManager$UndoState;->addOperation(Landroid/content/UndoOperation;)V
-HPLandroid/content/UndoManager$UndoState;->destroy()V
-HPLandroid/content/UndoManager$UndoState;->getLastOperation(Ljava/lang/Class;Landroid/content/UndoOwner;)Landroid/content/UndoOperation;
-HPLandroid/content/UndoManager$UndoState;->writeToParcel(Landroid/os/Parcel;)V
-HPLandroid/content/UndoManager;->addOperation(Landroid/content/UndoOperation;I)V
-HPLandroid/content/UndoManager;->beginUpdate(Ljava/lang/CharSequence;)V
-HPLandroid/content/UndoManager;->endUpdate()V
+HSPLandroid/content/UndoManager;-><init>()V
 HSPLandroid/content/UndoManager;->forgetRedos([Landroid/content/UndoOwner;I)I
 HSPLandroid/content/UndoManager;->forgetUndos([Landroid/content/UndoOwner;I)I
-HPLandroid/content/UndoManager;->getLastOperation(Ljava/lang/Class;Landroid/content/UndoOwner;I)Landroid/content/UndoOperation;
 HSPLandroid/content/UndoManager;->getOwner(Ljava/lang/String;Ljava/lang/Object;)Landroid/content/UndoOwner;
-HPLandroid/content/UndoManager;->getTopUndo([Landroid/content/UndoOwner;)Landroid/content/UndoManager$UndoState;
-HPLandroid/content/UndoManager;->isInUndo()Z
-HPLandroid/content/UndoManager;->matchOwners(Landroid/content/UndoManager$UndoState;[Landroid/content/UndoOwner;)Z
-HPLandroid/content/UndoManager;->pushWorkingState()V
-HPLandroid/content/UndoManager;->removeOwner(Landroid/content/UndoOwner;)V
-HSPLandroid/content/UndoManager;->restoreInstanceState(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V
-HSPLandroid/content/UndoManager;->saveInstanceState(Landroid/os/Parcel;)V
-HPLandroid/content/UndoManager;->saveOwner(Landroid/content/UndoOwner;Landroid/os/Parcel;)V
-HPLandroid/content/UndoOperation;->getOwner()Landroid/content/UndoOwner;
-HPLandroid/content/UndoOperation;->hasData()Z
-HPLandroid/content/UndoOperation;->matchOwner(Landroid/content/UndoOwner;)Z
+HSPLandroid/content/UndoOwner;-><init>(Ljava/lang/String;Landroid/content/UndoManager;)V
 HSPLandroid/content/UriMatcher;-><init>(I)V
 HSPLandroid/content/UriMatcher;-><init>(ILjava/lang/String;)V
 HSPLandroid/content/UriMatcher;->addURI(Ljava/lang/String;Ljava/lang/String;I)V
 HSPLandroid/content/UriMatcher;->createChild(Ljava/lang/String;)Landroid/content/UriMatcher;
 HSPLandroid/content/UriMatcher;->match(Landroid/net/Uri;)I
-PLandroid/content/UriPermission$1;-><init>()V
-PLandroid/content/UriPermission;-><clinit>()V
-PLandroid/content/UriPermission;-><init>(Landroid/net/Uri;IJ)V
-PLandroid/content/UriPermission;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/om/IOverlayManager$Stub$Proxy;->getOverlayInfosForTarget(Ljava/lang/String;I)Ljava/util/List;
-HSPLandroid/content/om/IOverlayManager$Stub;-><init>()V
-HSPLandroid/content/om/IOverlayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/om/IOverlayManager;
-HPLandroid/content/om/IOverlayManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/content/om/OverlayInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/om/OverlayInfo;
-HSPLandroid/content/om/OverlayInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/om/OverlayInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/om/OverlayInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIZ)V
-HSPLandroid/content/om/OverlayInfo;->ensureValidState()V
-HSPLandroid/content/om/OverlayInfo;->isEnabled()Z
-PLandroid/content/om/OverlayInfo;->stateToString(I)Ljava/lang/String;
-HPLandroid/content/om/OverlayInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/pm/-$$Lambda$B12dZLpdwpXn89QSesmkaZjD72Q;-><clinit>()V
-PLandroid/content/pm/-$$Lambda$B12dZLpdwpXn89QSesmkaZjD72Q;-><init>()V
-PLandroid/content/pm/-$$Lambda$B12dZLpdwpXn89QSesmkaZjD72Q;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLandroid/content/pm/-$$Lambda$T1UQAuePWRRmVQ1KzTyMAktZUPM;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLandroid/content/pm/-$$Lambda$ciir_QAmv6RwJro4I58t77dPnxU;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroid/content/pm/-$$Lambda$hUJwdX9IqTlLwBds2BUGqVf-FM8;-><clinit>()V
-HSPLandroid/content/pm/-$$Lambda$hUJwdX9IqTlLwBds2BUGqVf-FM8;-><init>()V
-HSPLandroid/content/pm/-$$Lambda$hUJwdX9IqTlLwBds2BUGqVf-FM8;->get()Ljava/lang/Object;
-PLandroid/content/pm/-$$Lambda$n3uXeb1v-YRmq_BWTfosEqUUr9g;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLandroid/content/pm/-$$Lambda$zO9HBUVgPeroyDQPLJE-MNMvSqc;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ActivityInfo;
 HSPLandroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/ActivityInfo$1;->newArray(I)[Landroid/content/pm/ActivityInfo;
 HSPLandroid/content/pm/ActivityInfo$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/content/pm/ActivityInfo$WindowLayout;-><init>(IFIFIII)V
 HSPLandroid/content/pm/ActivityInfo$WindowLayout;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/ActivityInfo;-><init>()V
-PLandroid/content/pm/ActivityInfo;-><init>(Landroid/content/pm/ActivityInfo;)V
 HSPLandroid/content/pm/ActivityInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ActivityInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ActivityInfo$1;)V
 HSPLandroid/content/pm/ActivityInfo;->activityInfoConfigNativeToJava(I)I
-PLandroid/content/pm/ActivityInfo;->dump(Landroid/util/Printer;Ljava/lang/String;I)V
-PLandroid/content/pm/ActivityInfo;->getRealConfigChanged()I
 HSPLandroid/content/pm/ActivityInfo;->getThemeResource()I
-PLandroid/content/pm/ActivityInfo;->hasFixedAspectRatio()Z
-PLandroid/content/pm/ActivityInfo;->isFixedOrientation()Z
-PLandroid/content/pm/ActivityInfo;->isFixedOrientationLandscape()Z
-PLandroid/content/pm/ActivityInfo;->isFixedOrientationLandscape(I)Z
-PLandroid/content/pm/ActivityInfo;->isFixedOrientationPortrait()Z
-PLandroid/content/pm/ActivityInfo;->isFixedOrientationPortrait(I)Z
-PLandroid/content/pm/ActivityInfo;->isPreserveOrientationMode(I)Z
-PLandroid/content/pm/ActivityInfo;->isResizeableMode(I)Z
-PLandroid/content/pm/ActivityInfo;->isTranslucentOrFloating(Landroid/content/res/TypedArray;)Z
-PLandroid/content/pm/ActivityInfo;->resizeModeToString(I)Ljava/lang/String;
-HSPLandroid/content/pm/ActivityInfo;->screenOrientationToString(I)Ljava/lang/String;
-PLandroid/content/pm/ActivityInfo;->supportsPictureInPicture()Z
-HSPLandroid/content/pm/ActivityInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/pm/ActivityPresentationInfo;-><init>(IILandroid/content/ComponentName;)V
 HSPLandroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ApplicationInfo;
 HSPLandroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/ApplicationInfo;-><init>()V
 HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/content/pm/ApplicationInfo;)V
 HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/os/Parcel;)V
-HPLandroid/content/pm/ApplicationInfo;->dump(Landroid/util/Printer;Ljava/lang/String;I)V
+HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ApplicationInfo$1;)V
 HSPLandroid/content/pm/ApplicationInfo;->getAllApkPaths()[Ljava/lang/String;
 HSPLandroid/content/pm/ApplicationInfo;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
-HSPLandroid/content/pm/ApplicationInfo;->getBaseCodePath()Ljava/lang/String;
-HSPLandroid/content/pm/ApplicationInfo;->getBaseResourcePath()Ljava/lang/String;
 HSPLandroid/content/pm/ApplicationInfo;->getCodePath()Ljava/lang/String;
-HSPLandroid/content/pm/ApplicationInfo;->getHiddenApiEnforcementPolicy()I
-PLandroid/content/pm/ApplicationInfo;->getSplitCodePaths()[Ljava/lang/String;
-HSPLandroid/content/pm/ApplicationInfo;->hasRequestedLegacyExternalStorage()Z
 HSPLandroid/content/pm/ApplicationInfo;->hasRtlSupport()Z
-HSPLandroid/content/pm/ApplicationInfo;->initForUser(I)V
-HSPLandroid/content/pm/ApplicationInfo;->isAllowedToUseHiddenApis()Z
-PLandroid/content/pm/ApplicationInfo;->isAudioPlaybackCaptureAllowed()Z
-PLandroid/content/pm/ApplicationInfo;->isDirectBootAware()Z
-HSPLandroid/content/pm/ApplicationInfo;->isEmbeddedDexUsed()Z
-PLandroid/content/pm/ApplicationInfo;->isEncryptionAware()Z
 HSPLandroid/content/pm/ApplicationInfo;->isInstantApp()Z
-HSPLandroid/content/pm/ApplicationInfo;->isOem()Z
-HSPLandroid/content/pm/ApplicationInfo;->isPackageWhitelistedForHiddenApis()Z
 HSPLandroid/content/pm/ApplicationInfo;->isPrivilegedApp()Z
 HSPLandroid/content/pm/ApplicationInfo;->isProduct()Z
 HSPLandroid/content/pm/ApplicationInfo;->isProfileableByShell()Z
-HSPLandroid/content/pm/ApplicationInfo;->isSignedWithPlatformKey()Z
-HSPLandroid/content/pm/ApplicationInfo;->isStaticSharedLibrary()Z
 HSPLandroid/content/pm/ApplicationInfo;->isSystemApp()Z
 HSPLandroid/content/pm/ApplicationInfo;->isUpdatedSystemApp()Z
-HSPLandroid/content/pm/ApplicationInfo;->isValidHiddenApiEnforcementPolicy(I)Z
 HSPLandroid/content/pm/ApplicationInfo;->isVendor()Z
-HSPLandroid/content/pm/ApplicationInfo;->isVirtualPreload()Z
-HPLandroid/content/pm/ApplicationInfo;->loadDefaultIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/content/pm/ApplicationInfo;->maybeUpdateHiddenApiEnforcementPolicy(I)V
 HSPLandroid/content/pm/ApplicationInfo;->requestsIsolatedSplitLoading()Z
-HSPLandroid/content/pm/ApplicationInfo;->setBaseCodePath(Ljava/lang/String;)V
-HSPLandroid/content/pm/ApplicationInfo;->setBaseResourcePath(Ljava/lang/String;)V
-HSPLandroid/content/pm/ApplicationInfo;->setCodePath(Ljava/lang/String;)V
-HSPLandroid/content/pm/ApplicationInfo;->setHiddenApiEnforcementPolicy(I)V
-HSPLandroid/content/pm/ApplicationInfo;->setResourcePath(Ljava/lang/String;)V
-HSPLandroid/content/pm/ApplicationInfo;->setSplitCodePaths([Ljava/lang/String;)V
-HSPLandroid/content/pm/ApplicationInfo;->setSplitResourcePaths([Ljava/lang/String;)V
 HSPLandroid/content/pm/ApplicationInfo;->setVersionCode(J)V
-HPLandroid/content/pm/ApplicationInfo;->toString()Ljava/lang/String;
-HSPLandroid/content/pm/ApplicationInfo;->usesCompatibilityMode()Z
-HSPLandroid/content/pm/ApplicationInfo;->usesNonSdkApi()Z
 HSPLandroid/content/pm/ApplicationInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/pm/AuxiliaryResolveInfo$AuxiliaryFilter;-><init>(Landroid/content/IntentFilter;Landroid/content/pm/InstantAppResolveInfo;Ljava/lang/String;Landroid/os/Bundle;)V
-PLandroid/content/pm/AuxiliaryResolveInfo$AuxiliaryFilter;->toString()Ljava/lang/String;
-PLandroid/content/pm/AuxiliaryResolveInfo;-><init>(Ljava/lang/String;ZLandroid/content/Intent;Ljava/util/List;)V
-PLandroid/content/pm/BaseParceledListSlice$1;-><init>(Landroid/content/pm/BaseParceledListSlice;ILjava/lang/Class;I)V
-HPLandroid/content/pm/BaseParceledListSlice$1;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/content/pm/BaseParceledListSlice;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V
 HSPLandroid/content/pm/BaseParceledListSlice;-><init>(Ljava/util/List;)V
-PLandroid/content/pm/BaseParceledListSlice;->access$000()Z
-PLandroid/content/pm/BaseParceledListSlice;->access$200(Landroid/content/pm/BaseParceledListSlice;)Ljava/util/List;
-PLandroid/content/pm/BaseParceledListSlice;->access$300(Ljava/lang/Class;Ljava/lang/Class;)V
 HSPLandroid/content/pm/BaseParceledListSlice;->getList()Ljava/util/List;
 HSPLandroid/content/pm/BaseParceledListSlice;->readCreator(Landroid/os/Parcelable$Creator;Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;
-HSPLandroid/content/pm/BaseParceledListSlice;->setInlineCountLimit(I)V
 HSPLandroid/content/pm/BaseParceledListSlice;->verifySameType(Ljava/lang/Class;Ljava/lang/Class;)V
 HSPLandroid/content/pm/BaseParceledListSlice;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/ChangedPackages$1;-><init>()V
-HSPLandroid/content/pm/ChangedPackages$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ChangedPackages;
-HSPLandroid/content/pm/ChangedPackages$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/ChangedPackages;-><clinit>()V
-PLandroid/content/pm/ChangedPackages;-><init>(ILjava/util/List;)V
-HSPLandroid/content/pm/ChangedPackages;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/ChangedPackages;->getPackageNames()Ljava/util/List;
-HSPLandroid/content/pm/ChangedPackages;->getSequenceNumber()I
-PLandroid/content/pm/ChangedPackages;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/pm/ComponentInfo;-><init>()V
-HPLandroid/content/pm/ComponentInfo;-><init>(Landroid/content/pm/ComponentInfo;)V
 HSPLandroid/content/pm/ComponentInfo;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/pm/ComponentInfo;->dumpBack(Landroid/util/Printer;Ljava/lang/String;I)V
-HPLandroid/content/pm/ComponentInfo;->dumpFront(Landroid/util/Printer;Ljava/lang/String;)V
 HSPLandroid/content/pm/ComponentInfo;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
 HSPLandroid/content/pm/ComponentInfo;->getComponentName()Landroid/content/ComponentName;
 HSPLandroid/content/pm/ComponentInfo;->getIconResource()I
-PLandroid/content/pm/ComponentInfo;->getLogoResource()I
 HSPLandroid/content/pm/ComponentInfo;->isEnabled()Z
 HSPLandroid/content/pm/ComponentInfo;->loadUnsafeLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
 HSPLandroid/content/pm/ComponentInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/pm/ConfigurationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ConfigurationInfo;
 HSPLandroid/content/pm/ConfigurationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/ConfigurationInfo;-><init>()V
 HSPLandroid/content/pm/ConfigurationInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/ConfigurationInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ConfigurationInfo$1;)V
-HSPLandroid/content/pm/ConfigurationInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/CrossProfileApps;-><init>(Landroid/content/Context;Landroid/content/pm/ICrossProfileApps;)V
-HSPLandroid/content/pm/FallbackCategoryProvider;->getFallbackCategory(Ljava/lang/String;)I
-HSPLandroid/content/pm/FallbackCategoryProvider;->loadFallbacks()V
-HSPLandroid/content/pm/FeatureInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/FeatureInfo;
-HSPLandroid/content/pm/FeatureInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/FeatureInfo;-><init>()V
-HPLandroid/content/pm/FeatureInfo;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLandroid/content/pm/FeatureInfo;->getGlEsVersion()Ljava/lang/String;
-HSPLandroid/content/pm/FeatureInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/ICrossProfileApps$Stub;-><init>()V
-HSPLandroid/content/pm/ICrossProfileApps$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/ICrossProfileApps;
-PLandroid/content/pm/ICrossProfileApps$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/content/pm/IDataLoaderManager$Stub;-><init>()V
-PLandroid/content/pm/IDataLoaderManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/content/pm/ILauncherApps$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/content/pm/ILauncherApps$Stub$Proxy;->addOnAppsChangedListener(Ljava/lang/String;Landroid/content/pm/IOnAppsChangedListener;)V
-HSPLandroid/content/pm/ILauncherApps$Stub$Proxy;->getAllSessions(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
-HPLandroid/content/pm/ILauncherApps$Stub$Proxy;->getAppUsageLimit(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/LauncherApps$AppUsageLimit;
-HSPLandroid/content/pm/ILauncherApps$Stub$Proxy;->getApplicationInfo(Ljava/lang/String;Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;
-HSPLandroid/content/pm/ILauncherApps$Stub$Proxy;->getLauncherActivities(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/ILauncherApps$Stub$Proxy;->getShortcutConfigActivities(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
-HPLandroid/content/pm/ILauncherApps$Stub$Proxy;->getShortcutIconFd(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Landroid/os/ParcelFileDescriptor;
-HSPLandroid/content/pm/ILauncherApps$Stub$Proxy;->getShortcuts(Ljava/lang/String;JLjava/lang/String;Ljava/util/List;Landroid/content/ComponentName;ILandroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/ILauncherApps$Stub$Proxy;->hasShortcutHostPermission(Ljava/lang/String;)Z
-HSPLandroid/content/pm/ILauncherApps$Stub$Proxy;->isActivityEnabled(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Z
-HSPLandroid/content/pm/ILauncherApps$Stub$Proxy;->isPackageEnabled(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Z
-HSPLandroid/content/pm/ILauncherApps$Stub$Proxy;->registerPackageInstallerCallback(Ljava/lang/String;Landroid/content/pm/IPackageInstallerCallback;)V
-HSPLandroid/content/pm/ILauncherApps$Stub$Proxy;->resolveActivity(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Landroid/content/pm/ActivityInfo;
-HPLandroid/content/pm/ILauncherApps$Stub$Proxy;->shouldHideFromSuggestions(Ljava/lang/String;Landroid/os/UserHandle;)Z
-HPLandroid/content/pm/ILauncherApps$Stub$Proxy;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/ComponentName;Landroid/graphics/Rect;Landroid/os/Bundle;Landroid/os/UserHandle;)V
-HSPLandroid/content/pm/ILauncherApps$Stub;-><init>()V
 HSPLandroid/content/pm/ILauncherApps$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/ILauncherApps;
-PLandroid/content/pm/ILauncherApps$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/content/pm/ILauncherApps$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/content/pm/IOnAppsChangedListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/content/pm/IOnAppsChangedListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/content/pm/IOnAppsChangedListener$Stub$Proxy;->onPackageAdded(Landroid/os/UserHandle;Ljava/lang/String;)V
-PLandroid/content/pm/IOnAppsChangedListener$Stub$Proxy;->onPackageChanged(Landroid/os/UserHandle;Ljava/lang/String;)V
-PLandroid/content/pm/IOnAppsChangedListener$Stub$Proxy;->onPackagesUnsuspended(Landroid/os/UserHandle;[Ljava/lang/String;)V
-PLandroid/content/pm/IOnAppsChangedListener$Stub$Proxy;->onShortcutChanged(Landroid/os/UserHandle;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
-HSPLandroid/content/pm/IOnAppsChangedListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/content/pm/IOnAppsChangedListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IOnAppsChangedListener;
-HPLandroid/content/pm/IOnAppsChangedListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/content/pm/IOtaDexopt$Stub;-><init>()V
-PLandroid/content/pm/IOtaDexopt$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/content/pm/IOtaDexopt$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/content/pm/IPackageDataObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/content/pm/IPackageDataObserver$Stub$Proxy;->onRemoveCompleted(Ljava/lang/String;Z)V
-HPLandroid/content/pm/IPackageDataObserver$Stub;-><init>()V
-HPLandroid/content/pm/IPackageDataObserver$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/content/pm/IPackageDataObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDataObserver;
-HPLandroid/content/pm/IPackageDataObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/content/pm/IPackageInstallObserver2$Stub;-><init>()V
-HPLandroid/content/pm/IPackageInstaller$Stub$Proxy;->abandonSession(I)V
-HPLandroid/content/pm/IPackageInstaller$Stub$Proxy;->createSession(Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;I)I
-HPLandroid/content/pm/IPackageInstaller$Stub$Proxy;->getAllSessions(I)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/IPackageInstaller$Stub$Proxy;->getMySessions(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-HPLandroid/content/pm/IPackageInstaller$Stub$Proxy;->getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;
-HSPLandroid/content/pm/IPackageInstaller$Stub$Proxy;->getStagedSessions()Landroid/content/pm/ParceledListSlice;
-HPLandroid/content/pm/IPackageInstaller$Stub$Proxy;->openSession(I)Landroid/content/pm/IPackageInstallerSession;
-PLandroid/content/pm/IPackageInstaller$Stub$Proxy;->registerCallback(Landroid/content/pm/IPackageInstallerCallback;I)V
-HSPLandroid/content/pm/IPackageInstaller$Stub;-><init>()V
-PLandroid/content/pm/IPackageInstaller$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/content/pm/IPackageInstaller$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->onSessionActiveChanged(IZ)V
-HPLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->onSessionBadgingChanged(I)V
-PLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->onSessionCreated(I)V
-PLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->onSessionFinished(IZ)V
-PLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->onSessionProgressChanged(IF)V
+HSPLandroid/content/pm/IOnAppsChangedListener$Stub;-><init>()V
+HSPLandroid/content/pm/IPackageInstaller$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/content/pm/IPackageInstaller$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstaller;
 HSPLandroid/content/pm/IPackageInstallerCallback$Stub;-><init>()V
 HSPLandroid/content/pm/IPackageInstallerCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/content/pm/IPackageInstallerCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstallerCallback;
-HPLandroid/content/pm/IPackageInstallerCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/content/pm/IPackageInstallerSession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/content/pm/IPackageInstallerSession$Stub$Proxy;->close()V
-HPLandroid/content/pm/IPackageInstallerSession$Stub$Proxy;->commit(Landroid/content/IntentSender;Z)V
-HPLandroid/content/pm/IPackageInstallerSession$Stub$Proxy;->getNames()[Ljava/lang/String;
-HPLandroid/content/pm/IPackageInstallerSession$Stub$Proxy;->isMultiPackage()Z
-HPLandroid/content/pm/IPackageInstallerSession$Stub$Proxy;->openWrite(Ljava/lang/String;JJ)Landroid/os/ParcelFileDescriptor;
-HPLandroid/content/pm/IPackageInstallerSession$Stub$Proxy;->setClientProgress(F)V
-PLandroid/content/pm/IPackageInstallerSession$Stub;-><init>()V
-PLandroid/content/pm/IPackageInstallerSession$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/content/pm/IPackageInstallerSession$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstallerSession;
-PLandroid/content/pm/IPackageInstallerSession$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/content/pm/IPackageManager$Stub$Proxy;->canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I
-PLandroid/content/pm/IPackageManager$Stub$Proxy;->checkUidSignatures(II)I
-HPLandroid/content/pm/IPackageManager$Stub$Proxy;->freeStorageAndNotify(Ljava/lang/String;JILandroid/content/pm/IPackageDataObserver;)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getActivityInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getApplicationEnabledSetting(Ljava/lang/String;I)I
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getApplicationInfo(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo;
-HPLandroid/content/pm/IPackageManager$Stub$Proxy;->getArtManager()Landroid/content/pm/dex/IArtManager;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getAttentionServicePackageName()Ljava/lang/String;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getChangedPackages(II)Landroid/content/pm/ChangedPackages;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getComponentEnabledSetting(Landroid/content/ComponentName;I)I
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getDeclaredSharedLibraries(Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getHomeActivities(Ljava/util/List;)Landroid/content/ComponentName;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getInstalledApplications(II)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getInstalledModules(I)Ljava/util/List;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getInstalledPackages(II)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getInstantAppResolverSettingsComponent()Landroid/content/ComponentName;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getInstantApps(I)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getModuleInfo(Ljava/lang/String;I)Landroid/content/pm/ModuleInfo;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getNameForUid(I)Ljava/lang/String;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getPackageInfo(Ljava/lang/String;II)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;II)I
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getPackagesForUid(I)[Ljava/lang/String;
-HPLandroid/content/pm/IPackageManager$Stub$Proxy;->getPackagesHoldingPermissions([Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getPermissionControllerPackageName()Ljava/lang/String;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getProviderInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ProviderInfo;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getReceiverInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getServiceInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ServiceInfo;
-HPLandroid/content/pm/IPackageManager$Stub$Proxy;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String;
-HPLandroid/content/pm/IPackageManager$Stub$Proxy;->getSharedLibraries(Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
-HPLandroid/content/pm/IPackageManager$Stub$Proxy;->getSharedSystemSharedLibraryPackageName()Ljava/lang/String;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getSystemAvailableFeatures()Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getSystemSharedLibraryNames()[Ljava/lang/String;
-HPLandroid/content/pm/IPackageManager$Stub$Proxy;->getSystemTextClassifierPackages()[Ljava/lang/String;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getUnsuspendablePackagesForUser([Ljava/lang/String;I)[Ljava/lang/String;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->hasSystemFeature(Ljava/lang/String;I)Z
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isInstantApp(Ljava/lang/String;I)Z
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isSafeMode()Z
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->notifyDexLoad(Ljava/lang/String;Ljava/util/List;Ljava/util/List;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;->queryContentProviders(Ljava/lang/String;IILjava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentContentProviders(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentReceivers(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentServices(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->resolveContentProvider(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->resolveService(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo;
-HPLandroid/content/pm/IPackageManager$Stub$Proxy;->setApplicationCategoryHint(Ljava/lang/String;ILjava/lang/String;)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->setSystemAppHiddenUntilInstalled(Ljava/lang/String;Z)V
-PLandroid/content/pm/IPackageManager$Stub$Proxy;->verifyIntentFilter(IILjava/util/List;)V
-HPLandroid/content/pm/IPackageManager$Stub$Proxy;->verifyPendingInstall(II)V
-HSPLandroid/content/pm/IPackageManager$Stub;-><init>()V
 HSPLandroid/content/pm/IPackageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageManager;
-PLandroid/content/pm/IPackageManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/content/pm/IPackageManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/content/pm/IPackageManagerNative$Stub;-><init>()V
-HSPLandroid/content/pm/IPackageManagerNative$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/content/pm/IPackageMoveObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/content/pm/IPackageMoveObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/content/pm/IPackageMoveObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageMoveObserver;
-HSPLandroid/content/pm/IPackageStatsObserver$Stub;-><init>()V
-HSPLandroid/content/pm/IShortcutService$Stub$Proxy;->disableShortcuts(Ljava/lang/String;Ljava/util/List;Ljava/lang/CharSequence;II)V
-HSPLandroid/content/pm/IShortcutService$Stub$Proxy;->enableShortcuts(Ljava/lang/String;Ljava/util/List;I)V
-HSPLandroid/content/pm/IShortcutService$Stub$Proxy;->getDynamicShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-HPLandroid/content/pm/IShortcutService$Stub$Proxy;->getManifestShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-HPLandroid/content/pm/IShortcutService$Stub$Proxy;->getMaxShortcutCountPerActivity(Ljava/lang/String;I)I
-HSPLandroid/content/pm/IShortcutService$Stub$Proxy;->getPinnedShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/IShortcutService$Stub$Proxy;->setDynamicShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
-HSPLandroid/content/pm/IShortcutService$Stub$Proxy;->updateShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
-HSPLandroid/content/pm/IShortcutService$Stub;-><init>()V
+HSPLandroid/content/pm/IShortcutService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/content/pm/IShortcutService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IShortcutService;
-PLandroid/content/pm/IShortcutService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/content/pm/InstantAppIntentFilter$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/InstantAppIntentFilter;
-PLandroid/content/pm/InstantAppIntentFilter$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/content/pm/InstantAppIntentFilter;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/pm/InstantAppIntentFilter;-><init>(Ljava/lang/String;Ljava/util/List;)V
-PLandroid/content/pm/InstantAppIntentFilter;->getFilters()Ljava/util/List;
-PLandroid/content/pm/InstantAppIntentFilter;->getSplitName()Ljava/lang/String;
-PLandroid/content/pm/InstantAppIntentFilter;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/pm/InstantAppRequest;-><init>(Landroid/content/pm/AuxiliaryResolveInfo;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;ILandroid/os/Bundle;Z)V
-PLandroid/content/pm/InstantAppResolveInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/InstantAppResolveInfo;
-PLandroid/content/pm/InstantAppResolveInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest$1;-><init>()V
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest;
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;-><clinit>()V
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;-><init>(Ljava/lang/String;)V
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;-><init>(Ljava/lang/String;I)V
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;-><init>([[B[I)V
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;->access$000(Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest;)[[B
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;->generateDigest(Ljava/lang/String;I)[[B
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;->getDigestBytes()[[B
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;->getDigestPrefix()[I
-HPLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;->getDigestPrefixSecure()[I
-PLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/pm/InstantAppResolveInfo;-><init>(Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest;Ljava/lang/String;Ljava/util/List;I)V
-PLandroid/content/pm/InstantAppResolveInfo;-><init>(Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest;Ljava/lang/String;Ljava/util/List;JLandroid/os/Bundle;)V
-PLandroid/content/pm/InstantAppResolveInfo;-><init>(Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest;Ljava/lang/String;Ljava/util/List;JLandroid/os/Bundle;Z)V
-PLandroid/content/pm/InstantAppResolveInfo;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/pm/InstantAppResolveInfo;->getDigestBytes()[B
-PLandroid/content/pm/InstantAppResolveInfo;->getExtras()Landroid/os/Bundle;
-PLandroid/content/pm/InstantAppResolveInfo;->getIntentFilters()Ljava/util/List;
-PLandroid/content/pm/InstantAppResolveInfo;->getLongVersionCode()J
-PLandroid/content/pm/InstantAppResolveInfo;->getPackageName()Ljava/lang/String;
-PLandroid/content/pm/InstantAppResolveInfo;->shouldLetInstallerDecide()Z
-PLandroid/content/pm/InstantAppResolveInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/IntentFilterVerificationInfo;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V
-HPLandroid/content/pm/IntentFilterVerificationInfo;->getDomainsString()Ljava/lang/String;
-HSPLandroid/content/pm/IntentFilterVerificationInfo;->getIntFromXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
-HSPLandroid/content/pm/IntentFilterVerificationInfo;->getPackageName()Ljava/lang/String;
-PLandroid/content/pm/IntentFilterVerificationInfo;->getStatus()I
-PLandroid/content/pm/IntentFilterVerificationInfo;->getStatusString()Ljava/lang/String;
-PLandroid/content/pm/IntentFilterVerificationInfo;->getStatusStringFromValue(J)Ljava/lang/String;
-HSPLandroid/content/pm/IntentFilterVerificationInfo;->getStringFromXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/content/pm/IntentFilterVerificationInfo;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
-HSPLandroid/content/pm/IntentFilterVerificationInfo;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
-HSPLandroid/content/pm/LauncherActivityInfo;-><init>(Landroid/content/Context;)V
-HSPLandroid/content/pm/LauncherActivityInfo;-><init>(Landroid/content/Context;Landroid/content/pm/ActivityInfo;Landroid/os/UserHandle;)V
-HSPLandroid/content/pm/LauncherActivityInfo;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
-HSPLandroid/content/pm/LauncherActivityInfo;->getComponentName()Landroid/content/ComponentName;
-HPLandroid/content/pm/LauncherActivityInfo;->getIcon(I)Landroid/graphics/drawable/Drawable;
-HSPLandroid/content/pm/LauncherActivityInfo;->getLabel()Ljava/lang/CharSequence;
-HSPLandroid/content/pm/LauncherActivityInfo;->getUser()Landroid/os/UserHandle;
-HPLandroid/content/pm/LauncherApps$1;->onPackageChanged(Landroid/os/UserHandle;Ljava/lang/String;)V
-HPLandroid/content/pm/LauncherApps$1;->onShortcutChanged(Landroid/os/UserHandle;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
-HSPLandroid/content/pm/LauncherApps$Callback;-><init>()V
-HPLandroid/content/pm/LauncherApps$CallbackMessageHandler$CallbackInfo;-><init>()V
-PLandroid/content/pm/LauncherApps$CallbackMessageHandler$CallbackInfo;-><init>(Landroid/content/pm/LauncherApps$1;)V
-HPLandroid/content/pm/LauncherApps$CallbackMessageHandler;->handleMessage(Landroid/os/Message;)V
-HPLandroid/content/pm/LauncherApps$CallbackMessageHandler;->postOnPackageChanged(Ljava/lang/String;Landroid/os/UserHandle;)V
-HPLandroid/content/pm/LauncherApps$CallbackMessageHandler;->postOnShortcutChanged(Ljava/lang/String;Landroid/os/UserHandle;Ljava/util/List;)V
-HSPLandroid/content/pm/LauncherApps$ShortcutQuery;-><init>()V
-HPLandroid/content/pm/LauncherApps$ShortcutQuery;->setActivity(Landroid/content/ComponentName;)Landroid/content/pm/LauncherApps$ShortcutQuery;
-HPLandroid/content/pm/LauncherApps$ShortcutQuery;->setPackage(Ljava/lang/String;)Landroid/content/pm/LauncherApps$ShortcutQuery;
-HSPLandroid/content/pm/LauncherApps$ShortcutQuery;->setQueryFlags(I)Landroid/content/pm/LauncherApps$ShortcutQuery;
-HPLandroid/content/pm/LauncherApps$ShortcutQuery;->setShortcutIds(Ljava/util/List;)Landroid/content/pm/LauncherApps$ShortcutQuery;
+HSPLandroid/content/pm/LauncherApps$1;-><init>(Landroid/content/pm/LauncherApps;)V
 HSPLandroid/content/pm/LauncherApps;-><init>(Landroid/content/Context;)V
 HSPLandroid/content/pm/LauncherApps;-><init>(Landroid/content/Context;Landroid/content/pm/ILauncherApps;)V
-HSPLandroid/content/pm/LauncherApps;->convertToActivityList(Landroid/content/pm/ParceledListSlice;Landroid/os/UserHandle;)Ljava/util/List;
-HSPLandroid/content/pm/LauncherApps;->findCallbackLocked(Landroid/content/pm/LauncherApps$Callback;)I
-HSPLandroid/content/pm/LauncherApps;->getActivityList(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;
-HSPLandroid/content/pm/LauncherApps;->getAllPackageInstallerSessions()Ljava/util/List;
-HPLandroid/content/pm/LauncherApps;->getAppUsageLimit(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/LauncherApps$AppUsageLimit;
-HSPLandroid/content/pm/LauncherApps;->getApplicationInfo(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;
-HSPLandroid/content/pm/LauncherApps;->getShortcutConfigActivityList(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;
-HSPLandroid/content/pm/LauncherApps;->getShortcutIconDrawable(Landroid/content/pm/ShortcutInfo;I)Landroid/graphics/drawable/Drawable;
-HPLandroid/content/pm/LauncherApps;->getShortcutIconFd(Landroid/content/pm/ShortcutInfo;)Landroid/os/ParcelFileDescriptor;
-HPLandroid/content/pm/LauncherApps;->getShortcutIconFd(Ljava/lang/String;Ljava/lang/String;I)Landroid/os/ParcelFileDescriptor;
-HSPLandroid/content/pm/LauncherApps;->getShortcuts(Landroid/content/pm/LauncherApps$ShortcutQuery;Landroid/os/UserHandle;)Ljava/util/List;
-HSPLandroid/content/pm/LauncherApps;->hasShortcutHostPermission()Z
-HSPLandroid/content/pm/LauncherApps;->isActivityEnabled(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z
-HSPLandroid/content/pm/LauncherApps;->isPackageEnabled(Ljava/lang/String;Landroid/os/UserHandle;)Z
-HSPLandroid/content/pm/LauncherApps;->loadDrawableResourceFromPackage(Ljava/lang/String;ILandroid/os/UserHandle;I)Landroid/graphics/drawable/Drawable;
-HSPLandroid/content/pm/LauncherApps;->logErrorForInvalidProfileAccess(Landroid/os/UserHandle;)V
-HSPLandroid/content/pm/LauncherApps;->maybeUpdateDisabledMessage(Ljava/util/List;)Ljava/util/List;
-HSPLandroid/content/pm/LauncherApps;->registerCallback(Landroid/content/pm/LauncherApps$Callback;)V
-HSPLandroid/content/pm/LauncherApps;->registerCallback(Landroid/content/pm/LauncherApps$Callback;Landroid/os/Handler;)V
-HSPLandroid/content/pm/LauncherApps;->registerPackageInstallerSessionCallback(Ljava/util/concurrent/Executor;Landroid/content/pm/PackageInstaller$SessionCallback;)V
-HSPLandroid/content/pm/LauncherApps;->resolveActivity(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/pm/LauncherActivityInfo;
-HPLandroid/content/pm/LauncherApps;->shouldHideFromSuggestions(Ljava/lang/String;Landroid/os/UserHandle;)Z
-HPLandroid/content/pm/LauncherApps;->startMainActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;Landroid/graphics/Rect;Landroid/os/Bundle;)V
-HSPLandroid/content/pm/ModuleInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ModuleInfo;
-HSPLandroid/content/pm/ModuleInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/ModuleInfo;-><init>()V
-HSPLandroid/content/pm/ModuleInfo;->getPackageName()Ljava/lang/String;
-HSPLandroid/content/pm/ModuleInfo;->isHidden()Z
-HSPLandroid/content/pm/ModuleInfo;->setHidden(Z)Landroid/content/pm/ModuleInfo;
-HSPLandroid/content/pm/ModuleInfo;->setName(Ljava/lang/CharSequence;)Landroid/content/pm/ModuleInfo;
-HSPLandroid/content/pm/ModuleInfo;->setPackageName(Ljava/lang/String;)Landroid/content/pm/ModuleInfo;
-HPLandroid/content/pm/ModuleInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/pm/PackageInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageInfo;
 HSPLandroid/content/pm/PackageInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/PackageInfo;-><init>()V
 HSPLandroid/content/pm/PackageInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/PackageInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageInfo$1;)V
 HSPLandroid/content/pm/PackageInfo;->composeLongVersionCode(II)J
 HSPLandroid/content/pm/PackageInfo;->getLongVersionCode()J
-PLandroid/content/pm/PackageInfo;->isOverlayPackage()Z
-HSPLandroid/content/pm/PackageInfo;->isStaticOverlayPackage()Z
 HSPLandroid/content/pm/PackageInfo;->propagateApplicationInfo(Landroid/content/pm/ApplicationInfo;[Landroid/content/pm/ComponentInfo;)V
-HSPLandroid/content/pm/PackageInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/pm/PackageInfoLite$1;-><init>()V
-PLandroid/content/pm/PackageInfoLite;-><clinit>()V
-PLandroid/content/pm/PackageInfoLite;-><init>()V
-PLandroid/content/pm/PackageInfoLite;->getLongVersionCode()J
-HPLandroid/content/pm/PackageInstaller$Session;-><init>(Landroid/content/pm/IPackageInstallerSession;)V
-HPLandroid/content/pm/PackageInstaller$Session;->close()V
-HPLandroid/content/pm/PackageInstaller$Session;->commit(Landroid/content/IntentSender;)V
-HPLandroid/content/pm/PackageInstaller$Session;->fsync(Ljava/io/OutputStream;)V
-HPLandroid/content/pm/PackageInstaller$Session;->getNames()[Ljava/lang/String;
-HPLandroid/content/pm/PackageInstaller$Session;->isMultiPackage()Z
-HPLandroid/content/pm/PackageInstaller$Session;->openWrite(Ljava/lang/String;JJ)Ljava/io/OutputStream;
-HPLandroid/content/pm/PackageInstaller$Session;->setStagingProgress(F)V
 HSPLandroid/content/pm/PackageInstaller$SessionCallback;-><init>()V
 HSPLandroid/content/pm/PackageInstaller$SessionCallbackDelegate;-><init>(Landroid/content/pm/PackageInstaller$SessionCallback;Ljava/util/concurrent/Executor;)V
-PLandroid/content/pm/PackageInstaller$SessionCallbackDelegate;->onSessionActiveChanged(IZ)V
-PLandroid/content/pm/PackageInstaller$SessionCallbackDelegate;->onSessionBadgingChanged(I)V
-PLandroid/content/pm/PackageInstaller$SessionCallbackDelegate;->onSessionCreated(I)V
-PLandroid/content/pm/PackageInstaller$SessionCallbackDelegate;->onSessionFinished(IZ)V
-PLandroid/content/pm/PackageInstaller$SessionCallbackDelegate;->onSessionProgressChanged(IF)V
-PLandroid/content/pm/PackageInstaller$SessionInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageInstaller$SessionInfo;
-PLandroid/content/pm/PackageInstaller$SessionInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/content/pm/PackageInstaller$SessionInfo;-><init>()V
-HPLandroid/content/pm/PackageInstaller$SessionInfo;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/pm/PackageInstaller$SessionInfo;->describeContents()I
-HPLandroid/content/pm/PackageInstaller$SessionInfo;->getAppIcon()Landroid/graphics/Bitmap;
-HPLandroid/content/pm/PackageInstaller$SessionInfo;->getAppLabel()Ljava/lang/CharSequence;
-PLandroid/content/pm/PackageInstaller$SessionInfo;->getAppPackageName()Ljava/lang/String;
-HPLandroid/content/pm/PackageInstaller$SessionInfo;->getInstallReason()I
-PLandroid/content/pm/PackageInstaller$SessionInfo;->getInstallerPackageName()Ljava/lang/String;
-HPLandroid/content/pm/PackageInstaller$SessionInfo;->getProgress()F
-HPLandroid/content/pm/PackageInstaller$SessionInfo;->getSessionId()I
-HPLandroid/content/pm/PackageInstaller$SessionInfo;->getUser()Landroid/os/UserHandle;
-PLandroid/content/pm/PackageInstaller$SessionInfo;->isStaged()Z
-PLandroid/content/pm/PackageInstaller$SessionInfo;->setStagedSessionErrorCode(ILjava/lang/String;)V
-PLandroid/content/pm/PackageInstaller$SessionInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/pm/PackageInstaller$SessionParams$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageInstaller$SessionParams;
-PLandroid/content/pm/PackageInstaller$SessionParams$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/content/pm/PackageInstaller$SessionParams;-><init>(I)V
-PLandroid/content/pm/PackageInstaller$SessionParams;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/pm/PackageInstaller$SessionParams;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-HPLandroid/content/pm/PackageInstaller$SessionParams;->setAppLabel(Ljava/lang/CharSequence;)V
-HPLandroid/content/pm/PackageInstaller$SessionParams;->setAppPackageName(Ljava/lang/String;)V
-HPLandroid/content/pm/PackageInstaller$SessionParams;->setInstallAsInstantApp(Z)V
-HPLandroid/content/pm/PackageInstaller$SessionParams;->setInstallLocation(I)V
-HPLandroid/content/pm/PackageInstaller$SessionParams;->setInstallReason(I)V
-HPLandroid/content/pm/PackageInstaller$SessionParams;->setSize(J)V
-HPLandroid/content/pm/PackageInstaller$SessionParams;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/pm/PackageInstaller;-><init>(Landroid/content/pm/IPackageInstaller;Ljava/lang/String;I)V
-HPLandroid/content/pm/PackageInstaller;->abandonSession(I)V
-HPLandroid/content/pm/PackageInstaller;->createSession(Landroid/content/pm/PackageInstaller$SessionParams;)I
-HPLandroid/content/pm/PackageInstaller;->getAllSessions()Ljava/util/List;
-HSPLandroid/content/pm/PackageInstaller;->getMySessions()Ljava/util/List;
-PLandroid/content/pm/PackageInstaller;->getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;
-HSPLandroid/content/pm/PackageInstaller;->getStagedSessions()Ljava/util/List;
-HPLandroid/content/pm/PackageInstaller;->openSession(I)Landroid/content/pm/PackageInstaller$Session;
-PLandroid/content/pm/PackageInstaller;->registerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;)V
-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
-PLandroid/content/pm/PackageItemInfo;->dumpBack(Landroid/util/Printer;Ljava/lang/String;)V
-HPLandroid/content/pm/PackageItemInfo;->dumpFront(Landroid/util/Printer;Ljava/lang/String;)V
-HSPLandroid/content/pm/PackageItemInfo;->forceSafeLabels()V
-HSPLandroid/content/pm/PackageItemInfo;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
 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;
-HSPLandroid/content/pm/PackageItemInfo;->loadSafeLabel(Landroid/content/pm/PackageManager;FI)Ljava/lang/CharSequence;
-HPLandroid/content/pm/PackageItemInfo;->loadUnbadgedIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/pm/PackageItemInfo;->loadUnsafeLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
 HSPLandroid/content/pm/PackageItemInfo;->loadXmlMetaData(Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/res/XmlResourceParser;
 HSPLandroid/content/pm/PackageItemInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/pm/PackageManager$NameNotFoundException;-><init>(Ljava/lang/String;)V
 HSPLandroid/content/pm/PackageManager;-><init>()V
-HPLandroid/content/pm/PackageManager;->freeStorageAndNotify(JLandroid/content/pm/IPackageDataObserver;)V
 HSPLandroid/content/pm/PackageManager;->getApplicationInfoAsUser(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;
-HSPLandroid/content/pm/PackageManager;->getPackageArchiveInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
-PLandroid/content/pm/PackageManager;->installStatusToPublicStatus(I)I
-PLandroid/content/pm/PackageManager;->installStatusToString(I)Ljava/lang/String;
-PLandroid/content/pm/PackageManager;->installStatusToString(ILjava/lang/String;)Ljava/lang/String;
-HPLandroid/content/pm/PackageManager;->permissionFlagToString(I)Ljava/lang/String;
-PLandroid/content/pm/PackageManager;->queryBroadcastReceiversAsUser(Landroid/content/Intent;ILandroid/os/UserHandle;)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryBroadcastReceiversAsUser(Landroid/content/Intent;ILandroid/os/UserHandle;)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryIntentActivitiesAsUser(Landroid/content/Intent;ILandroid/os/UserHandle;)Ljava/util/List;
 HSPLandroid/content/pm/PackageManager;->queryIntentServicesAsUser(Landroid/content/Intent;ILandroid/os/UserHandle;)Ljava/util/List;
-HSPLandroid/content/pm/PackageManager;->replacePreferredActivity(Landroid/content/IntentFilter;ILjava/util/List;Landroid/content/ComponentName;)V
-HSPLandroid/content/pm/PackageParser$Activity;-><init>(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;Landroid/content/pm/ActivityInfo;)V
-HSPLandroid/content/pm/PackageParser$Activity;-><init>(Landroid/content/pm/PackageParser$ParseComponentArgs;Landroid/content/pm/ActivityInfo;)V
-HSPLandroid/content/pm/PackageParser$Activity;->access$200(Landroid/content/pm/PackageParser$Activity;F)V
-HSPLandroid/content/pm/PackageParser$Activity;->access$300(Landroid/content/pm/PackageParser$Activity;F)V
-HSPLandroid/content/pm/PackageParser$Activity;->access$400(Landroid/content/pm/PackageParser$Activity;)Z
-HSPLandroid/content/pm/PackageParser$Activity;->access$500(Landroid/content/pm/PackageParser$Activity;)Z
-HSPLandroid/content/pm/PackageParser$Activity;->hasMaxAspectRatio()Z
-HSPLandroid/content/pm/PackageParser$Activity;->hasMinAspectRatio()Z
-HSPLandroid/content/pm/PackageParser$Activity;->setMaxAspectRatio(F)V
-HSPLandroid/content/pm/PackageParser$Activity;->setMinAspectRatio(F)V
-HSPLandroid/content/pm/PackageParser$Activity;->setPackageName(Ljava/lang/String;)V
-HSPLandroid/content/pm/PackageParser$ActivityIntentInfo;-><init>(Landroid/content/pm/PackageParser$Activity;)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;ZZZZZZZII)V
-PLandroid/content/pm/PackageParser$ApkLite;->getLongVersionCode()J
-HSPLandroid/content/pm/PackageParser$CachedComponentArgs;-><init>()V
-HSPLandroid/content/pm/PackageParser$CachedComponentArgs;-><init>(Landroid/content/pm/PackageParser$1;)V
-HSPLandroid/content/pm/PackageParser$CallbackImpl;->hasFeature(Ljava/lang/String;)Z
-HSPLandroid/content/pm/PackageParser$Component;-><init>(Landroid/content/pm/PackageParser$Package;Ljava/util/ArrayList;Ljava/lang/String;)V
-HSPLandroid/content/pm/PackageParser$Component;-><init>(Landroid/content/pm/PackageParser$ParseComponentArgs;Landroid/content/pm/ComponentInfo;)V
-HSPLandroid/content/pm/PackageParser$Component;-><init>(Landroid/content/pm/PackageParser$ParsePackageItemArgs;Landroid/content/pm/PackageItemInfo;)V
-HSPLandroid/content/pm/PackageParser$Component;->setPackageName(Ljava/lang/String;)V
-HSPLandroid/content/pm/PackageParser$Package;-><init>(Ljava/lang/String;)V
-HSPLandroid/content/pm/PackageParser$Package;->getLongVersionCode()J
-HSPLandroid/content/pm/PackageParser$Package;->isMatch(I)Z
-HSPLandroid/content/pm/PackageParser$Package;->setApplicationVolumeUuid(Ljava/lang/String;)V
-HSPLandroid/content/pm/PackageParser$Package;->setBaseCodePath(Ljava/lang/String;)V
-HSPLandroid/content/pm/PackageParser$Package;->setCodePath(Ljava/lang/String;)V
-HSPLandroid/content/pm/PackageParser$Package;->setSigningDetails(Landroid/content/pm/PackageParser$SigningDetails;)V
-HSPLandroid/content/pm/PackageParser$Package;->setUse32bitAbi(Z)V
-HSPLandroid/content/pm/PackageParser$Package;->setVolumeUuid(Ljava/lang/String;)V
-HSPLandroid/content/pm/PackageParser$PackageLite;-><init>(Ljava/lang/String;Landroid/content/pm/PackageParser$ApkLite;[Ljava/lang/String;[Z[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[I)V
-PLandroid/content/pm/PackageParser$PackageLite;->getAllCodePaths()Ljava/util/List;
-HSPLandroid/content/pm/PackageParser$PackageParserException;-><init>(ILjava/lang/String;)V
-HSPLandroid/content/pm/PackageParser$ParseComponentArgs;-><init>(Landroid/content/pm/PackageParser$Package;[Ljava/lang/String;IIIIII[Ljava/lang/String;III)V
 HSPLandroid/content/pm/PackageParser$SigningDetails$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$SigningDetails;
 HSPLandroid/content/pm/PackageParser$SigningDetails$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/PackageParser$SigningDetails$Builder;-><init>()V
-HSPLandroid/content/pm/PackageParser$SigningDetails$Builder;->build()Landroid/content/pm/PackageParser$SigningDetails;
-HSPLandroid/content/pm/PackageParser$SigningDetails$Builder;->checkInvariants()V
-HSPLandroid/content/pm/PackageParser$SigningDetails$Builder;->setSignatureSchemeVersion(I)Landroid/content/pm/PackageParser$SigningDetails$Builder;
-HSPLandroid/content/pm/PackageParser$SigningDetails$Builder;->setSignatures([Landroid/content/pm/Signature;)Landroid/content/pm/PackageParser$SigningDetails$Builder;
-HSPLandroid/content/pm/PackageParser$SigningDetails;-><init>(Landroid/content/pm/PackageParser$SigningDetails;)V
-HSPLandroid/content/pm/PackageParser$SigningDetails;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/PackageParser$SigningDetails;-><init>([Landroid/content/pm/Signature;I)V
-HSPLandroid/content/pm/PackageParser$SigningDetails;-><init>([Landroid/content/pm/Signature;ILandroid/util/ArraySet;[Landroid/content/pm/Signature;)V
-HSPLandroid/content/pm/PackageParser$SigningDetails;-><init>([Landroid/content/pm/Signature;I[Landroid/content/pm/Signature;)V
-HSPLandroid/content/pm/PackageParser$SigningDetails;->checkCapability(Landroid/content/pm/PackageParser$SigningDetails;I)Z
-HSPLandroid/content/pm/PackageParser$SigningDetails;->hasAncestor(Landroid/content/pm/PackageParser$SigningDetails;)Z
-HSPLandroid/content/pm/PackageParser$SigningDetails;->hasAncestorOrSelf(Landroid/content/pm/PackageParser$SigningDetails;)Z
-HSPLandroid/content/pm/PackageParser$SigningDetails;->hasCertificate(Landroid/content/pm/Signature;)Z
-HSPLandroid/content/pm/PackageParser$SigningDetails;->hasCertificateInternal(Landroid/content/pm/Signature;I)Z
-HSPLandroid/content/pm/PackageParser$SigningDetails;->hasPastSigningCertificates()Z
-HSPLandroid/content/pm/PackageParser$SigningDetails;->hasSha256Certificate([B)Z
-HSPLandroid/content/pm/PackageParser$SigningDetails;->hasSha256CertificateInternal([BI)Z
-HSPLandroid/content/pm/PackageParser$SigningDetails;->hasSignatures()Z
-HSPLandroid/content/pm/PackageParser$SigningDetails;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/PackageParser$SplitNameComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroid/content/pm/PackageParser$SplitNameComparator;->compare(Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/content/pm/PackageParser;-><init>()V
-HSPLandroid/content/pm/PackageParser;->buildClassName(Ljava/lang/String;Ljava/lang/CharSequence;[Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/content/pm/PackageParser;->buildCompoundName(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/content/pm/PackageParser;->buildProcessName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;I[Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/content/pm/PackageParser;->buildTaskAffinityName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;[Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/content/pm/PackageParser;->cacheResult(Ljava/io/File;ILandroid/content/pm/parsing/ParsedPackage;)V
-HSPLandroid/content/pm/PackageParser;->checkUseInstalledOrHidden(ILandroid/content/pm/PackageUserState;Landroid/content/pm/ApplicationInfo;)Z
-HSPLandroid/content/pm/PackageParser;->collectCertificates(Landroid/content/pm/PackageParser$Package;Ljava/io/File;Z)V
-HSPLandroid/content/pm/PackageParser;->collectCertificates(Landroid/content/pm/PackageParser$Package;Z)V
-HSPLandroid/content/pm/PackageParser;->collectCertificatesInternal(Landroid/content/pm/PackageParser$Package;Z)V
-HSPLandroid/content/pm/PackageParser;->computeMinSdkVersion(ILjava/lang/String;I[Ljava/lang/String;[Ljava/lang/String;)I
-HSPLandroid/content/pm/PackageParser;->computeTargetSdkVersion(ILjava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)I
-HSPLandroid/content/pm/PackageParser;->copyNeeded(ILandroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageUserState;Landroid/os/Bundle;I)Z
-HSPLandroid/content/pm/PackageParser;->fromCacheEntry([B)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/PackageParser;->fromCacheEntryStatic([B)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/PackageParser;->generateAppDetailsHiddenActivity(Landroid/content/pm/PackageParser$Package;I[Ljava/lang/String;Z)Landroid/content/pm/PackageParser$Activity;
-PLandroid/content/pm/PackageParser;->generateApplicationInfo(Landroid/content/pm/ApplicationInfo;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ApplicationInfo;
-HSPLandroid/content/pm/PackageParser;->generateApplicationInfo(Landroid/content/pm/PackageParser$Package;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ApplicationInfo;
-HSPLandroid/content/pm/PackageParser;->generatePackageInfo(Landroid/content/pm/PackageParser$Package;Landroid/apex/ApexInfo;I)Landroid/content/pm/PackageInfo;
-HSPLandroid/content/pm/PackageParser;->generatePackageInfo(Landroid/content/pm/PackageParser$Package;Landroid/apex/ApexInfo;[IIJJLjava/util/Set;Landroid/content/pm/PackageUserState;I)Landroid/content/pm/PackageInfo;
-HSPLandroid/content/pm/PackageParser;->generatePackageInfo(Landroid/content/pm/PackageParser$Package;[IIJJLjava/util/Set;Landroid/content/pm/PackageUserState;I)Landroid/content/pm/PackageInfo;
-HSPLandroid/content/pm/PackageParser;->getActivityConfigChanges(II)I
-HSPLandroid/content/pm/PackageParser;->getCacheKey(Ljava/io/File;I)Ljava/lang/String;
-HSPLandroid/content/pm/PackageParser;->getCachedResult(Ljava/io/File;I)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/PackageParser;->hasDomainURLs(Landroid/content/pm/PackageParser$Package;)Z
-HSPLandroid/content/pm/PackageParser;->isApkFile(Ljava/io/File;)Z
-PLandroid/content/pm/PackageParser;->isApkPath(Ljava/lang/String;)Z
-HSPLandroid/content/pm/PackageParser;->isAvailable(Landroid/content/pm/PackageUserState;)Z
-HSPLandroid/content/pm/PackageParser;->isCacheUpToDate(Ljava/io/File;Ljava/io/File;)Z
-HSPLandroid/content/pm/PackageParser;->matchTargetCode([Ljava/lang/String;Ljava/lang/String;)Z
-HSPLandroid/content/pm/PackageParser;->parseActivity(Landroid/content/pm/PackageParser$Package;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;Landroid/content/pm/PackageParser$CachedComponentArgs;ZZ)Landroid/content/pm/PackageParser$Activity;
-HSPLandroid/content/pm/PackageParser;->parseApkLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$ApkLite;
-HSPLandroid/content/pm/PackageParser;->parseApkLite(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/pm/PackageParser$SigningDetails;)Landroid/content/pm/PackageParser$ApkLite;
-HSPLandroid/content/pm/PackageParser;->parseApkLiteInner(Ljava/io/File;Ljava/io/FileDescriptor;Ljava/lang/String;I)Landroid/content/pm/PackageParser$ApkLite;
-HSPLandroid/content/pm/PackageParser;->parseBaseApk(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Landroid/content/pm/PackageParser$Package;
-HSPLandroid/content/pm/PackageParser;->parseBaseApk(Ljava/io/File;Landroid/content/res/AssetManager;I)Landroid/content/pm/PackageParser$Package;
-HSPLandroid/content/pm/PackageParser;->parseBaseApkCommon(Landroid/content/pm/PackageParser$Package;Ljava/util/Set;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Landroid/content/pm/PackageParser$Package;
-HSPLandroid/content/pm/PackageParser;->parseBaseApplication(Landroid/content/pm/PackageParser$Package;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Z
-PLandroid/content/pm/PackageParser;->parseClusterPackageLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$PackageLite;
-HSPLandroid/content/pm/PackageParser;->parseIntent(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZZLandroid/content/pm/PackageParser$IntentInfo;[Ljava/lang/String;)Z
-HSPLandroid/content/pm/PackageParser;->parseMetaData(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/os/Bundle;[Ljava/lang/String;)Landroid/os/Bundle;
-HSPLandroid/content/pm/PackageParser;->parseMonolithicPackage(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package;
-HSPLandroid/content/pm/PackageParser;->parseMonolithicPackageLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$PackageLite;
-HSPLandroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;IZ)Landroid/content/pm/PackageParser$Package;
-HSPLandroid/content/pm/PackageParser;->parsePackageItemInfo(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageItemInfo;[Ljava/lang/String;Ljava/lang/String;Landroid/content/res/TypedArray;ZIIIIII)Z
-PLandroid/content/pm/PackageParser;->parsePackageLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$PackageLite;
-HSPLandroid/content/pm/PackageParser;->parsePackageSplitNames(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/util/Pair;
-HSPLandroid/content/pm/PackageParser;->parseParsedPackage(Ljava/io/File;IZ)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/PackageParser;->parsePublicKey(Ljava/lang/String;)Ljava/security/PublicKey;
-HSPLandroid/content/pm/PackageParser;->readConfigUseRoundIcon(Landroid/content/res/Resources;)V
-HSPLandroid/content/pm/PackageParser;->setCacheDir(Ljava/io/File;)V
-HSPLandroid/content/pm/PackageParser;->setCallback(Landroid/content/pm/PackageParser$Callback;)V
-HSPLandroid/content/pm/PackageParser;->setCompatibilityModeEnabled(Z)V
-HSPLandroid/content/pm/PackageParser;->setDisplayMetrics(Landroid/util/DisplayMetrics;)V
-HSPLandroid/content/pm/PackageParser;->setMaxAspectRatio(Landroid/content/pm/PackageParser$Package;)V
-HSPLandroid/content/pm/PackageParser;->setMinAspectRatio(Landroid/content/pm/PackageParser$Package;)V
-HSPLandroid/content/pm/PackageParser;->setOnlyCoreApps(Z)V
-HSPLandroid/content/pm/PackageParser;->setSeparateProcesses([Ljava/lang/String;)V
-HSPLandroid/content/pm/PackageParser;->toCacheEntry(Landroid/content/pm/parsing/ParsedPackage;)[B
-HSPLandroid/content/pm/PackageParser;->toCacheEntryStatic(Landroid/content/pm/parsing/ParsedPackage;)[B
-HSPLandroid/content/pm/PackageParser;->toSigningKeys([Landroid/content/pm/Signature;)Landroid/util/ArraySet;
-HSPLandroid/content/pm/PackageParser;->updateApplicationInfo(Landroid/content/pm/ApplicationInfo;ILandroid/content/pm/PackageUserState;)V
-HSPLandroid/content/pm/PackageParser;->validateName(Ljava/lang/String;ZZ)Ljava/lang/String;
-HSPLandroid/content/pm/PackageParserCacheHelper$ReadHelper;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/PackageParserCacheHelper$ReadHelper;->readString(Landroid/os/Parcel;)Ljava/lang/String;
-HSPLandroid/content/pm/PackageParserCacheHelper$ReadHelper;->startAndInstall()V
-HSPLandroid/content/pm/PackageParserCacheHelper$WriteHelper;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/PackageParserCacheHelper$WriteHelper;->finishAndUninstall()V
-HSPLandroid/content/pm/PackageParserCacheHelper$WriteHelper;->writeString(Landroid/os/Parcel;Ljava/lang/String;)V
-PLandroid/content/pm/PackageStats;-><init>(Landroid/content/pm/PackageStats;)V
-HPLandroid/content/pm/PackageStats;-><init>(Ljava/lang/String;)V
-HSPLandroid/content/pm/PackageUserState;-><init>()V
-HSPLandroid/content/pm/PackageUserState;->equals(Ljava/lang/Object;)Z
-HSPLandroid/content/pm/PackageUserState;->isAvailable(I)Z
-PLandroid/content/pm/PackageUserState;->isEnabled(Landroid/content/pm/ComponentInfo;I)Z
-HSPLandroid/content/pm/PackageUserState;->isEnabled(ZZLjava/lang/String;I)Z
-HSPLandroid/content/pm/PackageUserState;->isMatch(Landroid/content/pm/ComponentInfo;I)Z
-HSPLandroid/content/pm/PackageUserState;->isMatch(ZZLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;I)Z
-HSPLandroid/content/pm/PackageUserState;->isMatch(ZZZZLjava/lang/String;I)Z
-HSPLandroid/content/pm/PackageUserState;->reportIfDebug(ZI)Z
+HSPLandroid/content/pm/PackageStats;-><init>(Ljava/lang/String;)V
 HSPLandroid/content/pm/ParceledListSlice$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/ParceledListSlice$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/content/pm/ParceledListSlice$1;->createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Landroid/content/pm/ParceledListSlice;
-HPLandroid/content/pm/ParceledListSlice$1;->createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;
 HSPLandroid/content/pm/ParceledListSlice;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V
 HSPLandroid/content/pm/ParceledListSlice;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;Landroid/content/pm/ParceledListSlice$1;)V
 HSPLandroid/content/pm/ParceledListSlice;-><init>(Ljava/util/List;)V
-HSPLandroid/content/pm/ParceledListSlice;->emptyList()Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/ParceledListSlice;->getList()Ljava/util/List;
 HSPLandroid/content/pm/ParceledListSlice;->readParcelableCreator(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;
-HSPLandroid/content/pm/ParceledListSlice;->setInlineCountLimit(I)V
 HSPLandroid/content/pm/ParceledListSlice;->writeElement(Landroid/os/Parcelable;Landroid/os/Parcel;I)V
 HSPLandroid/content/pm/ParceledListSlice;->writeElement(Ljava/lang/Object;Landroid/os/Parcel;I)V
 HSPLandroid/content/pm/ParceledListSlice;->writeParcelableCreator(Landroid/os/Parcelable;Landroid/os/Parcel;)V
@@ -7233,1020 +3128,94 @@
 HSPLandroid/content/pm/PathPermission$1;->newArray(I)[Landroid/content/pm/PathPermission;
 HSPLandroid/content/pm/PathPermission$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/content/pm/PathPermission;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/PathPermission;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/pm/PathPermission;->getReadPermission()Ljava/lang/String;
-HSPLandroid/content/pm/PathPermission;->getWritePermission()Ljava/lang/String;
 HSPLandroid/content/pm/PathPermission;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/PermissionGroupInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PermissionGroupInfo;
-HSPLandroid/content/pm/PermissionGroupInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/content/pm/PermissionGroupInfo;-><init>(III)V
-HSPLandroid/content/pm/PermissionGroupInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/PermissionGroupInfo;->loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
-HPLandroid/content/pm/PermissionGroupInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/pm/PermissionInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PermissionInfo;
 HSPLandroid/content/pm/PermissionInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/PermissionInfo$1;->newArray(I)[Landroid/content/pm/PermissionInfo;
 HSPLandroid/content/pm/PermissionInfo$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/content/pm/PermissionInfo;-><init>()V
 HSPLandroid/content/pm/PermissionInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/PermissionInfo;-><init>(Ljava/lang/String;)V
-HSPLandroid/content/pm/PermissionInfo;->fixProtectionLevel(I)I
-HSPLandroid/content/pm/PermissionInfo;->getProtection()I
-HSPLandroid/content/pm/PermissionInfo;->isHardRestricted()Z
-PLandroid/content/pm/PermissionInfo;->isRestricted()Z
-HSPLandroid/content/pm/PermissionInfo;->isRuntime()Z
-HSPLandroid/content/pm/PermissionInfo;->isSoftRestricted()Z
-HSPLandroid/content/pm/PermissionInfo;->loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
-HPLandroid/content/pm/PermissionInfo;->protectionToString(I)Ljava/lang/String;
-HSPLandroid/content/pm/PermissionInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/PermissionInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/PermissionInfo$1;)V
 HSPLandroid/content/pm/ProviderInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ProviderInfo;
 HSPLandroid/content/pm/ProviderInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/ProviderInfo$1;->newArray(I)[Landroid/content/pm/ProviderInfo;
-HSPLandroid/content/pm/ProviderInfo$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/content/pm/ProviderInfo;-><init>()V
 HSPLandroid/content/pm/ProviderInfo;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/pm/ProviderInfo;->toString()Ljava/lang/String;
+HSPLandroid/content/pm/ProviderInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ProviderInfo$1;)V
 HSPLandroid/content/pm/ProviderInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/RegisteredServicesCache$1;-><init>(Landroid/content/pm/RegisteredServicesCache;)V
-PLandroid/content/pm/RegisteredServicesCache$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HSPLandroid/content/pm/RegisteredServicesCache$2;-><init>(Landroid/content/pm/RegisteredServicesCache;)V
-HSPLandroid/content/pm/RegisteredServicesCache$3;-><init>(Landroid/content/pm/RegisteredServicesCache;)V
-HSPLandroid/content/pm/RegisteredServicesCache$ServiceInfo;-><init>(Ljava/lang/Object;Landroid/content/pm/ComponentInfo;Landroid/content/ComponentName;)V
-HPLandroid/content/pm/RegisteredServicesCache$ServiceInfo;->toString()Ljava/lang/String;
-HSPLandroid/content/pm/RegisteredServicesCache$UserServices;-><init>()V
-HSPLandroid/content/pm/RegisteredServicesCache$UserServices;-><init>(Landroid/content/pm/RegisteredServicesCache$1;)V
-HSPLandroid/content/pm/RegisteredServicesCache;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/XmlSerializerAndParser;)V
-PLandroid/content/pm/RegisteredServicesCache;->access$100(Landroid/content/pm/RegisteredServicesCache;Landroid/content/Intent;I)V
-HSPLandroid/content/pm/RegisteredServicesCache;->containsType(Ljava/util/ArrayList;Ljava/lang/Object;)Z
-HSPLandroid/content/pm/RegisteredServicesCache;->createFileForUser(I)Landroid/util/AtomicFile;
-PLandroid/content/pm/RegisteredServicesCache;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;I)V
-HSPLandroid/content/pm/RegisteredServicesCache;->findOrCreateUserLocked(I)Landroid/content/pm/RegisteredServicesCache$UserServices;
-HSPLandroid/content/pm/RegisteredServicesCache;->findOrCreateUserLocked(IZ)Landroid/content/pm/RegisteredServicesCache$UserServices;
-HSPLandroid/content/pm/RegisteredServicesCache;->generateServicesMap([II)V
-HSPLandroid/content/pm/RegisteredServicesCache;->getAllServices(I)Ljava/util/Collection;
-HPLandroid/content/pm/RegisteredServicesCache;->getBindInstantServiceAllowed(I)Z
-HSPLandroid/content/pm/RegisteredServicesCache;->getDataDirectory()Ljava/io/File;
-HPLandroid/content/pm/RegisteredServicesCache;->getServiceInfo(Ljava/lang/Object;I)Landroid/content/pm/RegisteredServicesCache$ServiceInfo;
-HSPLandroid/content/pm/RegisteredServicesCache;->getUser(I)Landroid/content/pm/UserInfo;
-HSPLandroid/content/pm/RegisteredServicesCache;->getUserSystemDirectory(I)Ljava/io/File;
-PLandroid/content/pm/RegisteredServicesCache;->handlePackageEvent(Landroid/content/Intent;I)V
-HSPLandroid/content/pm/RegisteredServicesCache;->invalidateCache(I)V
-HSPLandroid/content/pm/RegisteredServicesCache;->migrateIfNecessaryLocked()V
-HSPLandroid/content/pm/RegisteredServicesCache;->onServicesChangedLocked(I)V
-HSPLandroid/content/pm/RegisteredServicesCache;->parseServiceInfo(Landroid/content/pm/ResolveInfo;)Landroid/content/pm/RegisteredServicesCache$ServiceInfo;
-HSPLandroid/content/pm/RegisteredServicesCache;->queryIntentServices(I)Ljava/util/List;
-HSPLandroid/content/pm/RegisteredServicesCache;->readPersistentServicesLocked(Ljava/io/InputStream;)V
-HSPLandroid/content/pm/RegisteredServicesCache;->setListener(Landroid/content/pm/RegisteredServicesCacheListener;Landroid/os/Handler;)V
-HPLandroid/content/pm/RegisteredServicesCache;->updateServices(I)V
 HSPLandroid/content/pm/ResolveInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ResolveInfo;
 HSPLandroid/content/pm/ResolveInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/ResolveInfo;-><init>()V
-PLandroid/content/pm/ResolveInfo;-><init>(Landroid/content/pm/ResolveInfo;)V
 HSPLandroid/content/pm/ResolveInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/ResolveInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ResolveInfo$1;)V
-PLandroid/content/pm/ResolveInfo;->dump(Landroid/util/Printer;Ljava/lang/String;)V
-HPLandroid/content/pm/ResolveInfo;->dump(Landroid/util/Printer;Ljava/lang/String;I)V
 HSPLandroid/content/pm/ResolveInfo;->getComponentInfo()Landroid/content/pm/ComponentInfo;
-HSPLandroid/content/pm/ResolveInfo;->loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/pm/ResolveInfo;->loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
-HSPLandroid/content/pm/ResolveInfo;->toString()Ljava/lang/String;
-HSPLandroid/content/pm/ResolveInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/SELinuxUtil;->assignSeinfoUser(Landroid/content/pm/PackageUserState;)Ljava/lang/String;
 HSPLandroid/content/pm/ServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ServiceInfo;
 HSPLandroid/content/pm/ServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/ServiceInfo$1;->newArray(I)[Landroid/content/pm/ServiceInfo;
 HSPLandroid/content/pm/ServiceInfo$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/content/pm/ServiceInfo;-><init>()V
-HPLandroid/content/pm/ServiceInfo;-><init>(Landroid/content/pm/ServiceInfo;)V
-PLandroid/content/pm/ServiceInfo;->dump(Landroid/util/Printer;Ljava/lang/String;)V
-PLandroid/content/pm/ServiceInfo;->dump(Landroid/util/Printer;Ljava/lang/String;I)V
-PLandroid/content/pm/ServiceInfo;->getForegroundServiceType()I
-PLandroid/content/pm/ServiceInfo;->toString()Ljava/lang/String;
-HSPLandroid/content/pm/ServiceInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/ServiceInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ServiceInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ServiceInfo$1;)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
 HSPLandroid/content/pm/SharedLibraryInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/SharedLibraryInfo$1;)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;)V
 HSPLandroid/content/pm/SharedLibraryInfo;->addDependency(Landroid/content/pm/SharedLibraryInfo;)V
-HSPLandroid/content/pm/SharedLibraryInfo;->clearDependencies()V
-HSPLandroid/content/pm/SharedLibraryInfo;->createForDynamic(Landroid/content/pm/parsing/AndroidPackage;Ljava/lang/String;)Landroid/content/pm/SharedLibraryInfo;
-HSPLandroid/content/pm/SharedLibraryInfo;->createForStatic(Landroid/content/pm/parsing/AndroidPackage;)Landroid/content/pm/SharedLibraryInfo;
 HSPLandroid/content/pm/SharedLibraryInfo;->getAllCodePaths()Ljava/util/List;
-HSPLandroid/content/pm/SharedLibraryInfo;->getDeclaringPackage()Landroid/content/pm/VersionedPackage;
 HSPLandroid/content/pm/SharedLibraryInfo;->getDependencies()Ljava/util/List;
-HSPLandroid/content/pm/SharedLibraryInfo;->getLongVersion()J
-HSPLandroid/content/pm/SharedLibraryInfo;->getName()Ljava/lang/String;
-HSPLandroid/content/pm/SharedLibraryInfo;->getPackageName()Ljava/lang/String;
 HSPLandroid/content/pm/SharedLibraryInfo;->getPath()Ljava/lang/String;
-HSPLandroid/content/pm/SharedLibraryInfo;->getType()I
-HPLandroid/content/pm/SharedLibraryInfo;->getVersion()I
-HPLandroid/content/pm/SharedLibraryInfo;->isStatic()Z
 HSPLandroid/content/pm/SharedLibraryInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/pm/ShortcutInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ShortcutInfo;
 HSPLandroid/content/pm/ShortcutInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/ShortcutInfo$Builder;-><init>(Landroid/content/Context;Ljava/lang/String;)V
-HSPLandroid/content/pm/ShortcutInfo$Builder;->build()Landroid/content/pm/ShortcutInfo;
-HSPLandroid/content/pm/ShortcutInfo$Builder;->setActivity(Landroid/content/ComponentName;)Landroid/content/pm/ShortcutInfo$Builder;
-HSPLandroid/content/pm/ShortcutInfo$Builder;->setDisabledMessage(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;
-HSPLandroid/content/pm/ShortcutInfo$Builder;->setIcon(Landroid/graphics/drawable/Icon;)Landroid/content/pm/ShortcutInfo$Builder;
-HSPLandroid/content/pm/ShortcutInfo$Builder;->setIntent(Landroid/content/Intent;)Landroid/content/pm/ShortcutInfo$Builder;
-HSPLandroid/content/pm/ShortcutInfo$Builder;->setIntents([Landroid/content/Intent;)Landroid/content/pm/ShortcutInfo$Builder;
-HSPLandroid/content/pm/ShortcutInfo$Builder;->setLongLabel(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;
-HSPLandroid/content/pm/ShortcutInfo$Builder;->setLongLived(Z)Landroid/content/pm/ShortcutInfo$Builder;
-HSPLandroid/content/pm/ShortcutInfo$Builder;->setRank(I)Landroid/content/pm/ShortcutInfo$Builder;
-HSPLandroid/content/pm/ShortcutInfo$Builder;->setShortLabel(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;
-PLandroid/content/pm/ShortcutInfo;-><init>(ILjava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;ILjava/lang/String;Ljava/lang/CharSequence;ILjava/lang/String;Ljava/lang/CharSequence;ILjava/lang/String;Ljava/util/Set;[Landroid/content/Intent;ILandroid/os/PersistableBundle;JIILjava/lang/String;Ljava/lang/String;I[Landroid/app/Person;Landroid/content/LocusId;)V
-HSPLandroid/content/pm/ShortcutInfo;-><init>(Landroid/content/pm/ShortcutInfo$Builder;)V
-HPLandroid/content/pm/ShortcutInfo;-><init>(Landroid/content/pm/ShortcutInfo;I)V
 HSPLandroid/content/pm/ShortcutInfo;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/pm/ShortcutInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ShortcutInfo$1;)V
-PLandroid/content/pm/ShortcutInfo;->addFlags(I)V
-HPLandroid/content/pm/ShortcutInfo;->addIndentOrComma(Ljava/lang/StringBuilder;Ljava/lang/String;)V
-PLandroid/content/pm/ShortcutInfo;->clearFlags(I)V
-PLandroid/content/pm/ShortcutInfo;->clone(I)Landroid/content/pm/ShortcutInfo;
+HSPLandroid/content/pm/ShortcutInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ShortcutInfo$1;)V
 HSPLandroid/content/pm/ShortcutInfo;->cloneCategories(Ljava/util/Set;)Landroid/util/ArraySet;
-PLandroid/content/pm/ShortcutInfo;->cloneIntents([Landroid/content/Intent;)[Landroid/content/Intent;
-PLandroid/content/pm/ShortcutInfo;->clonePersistableBundle([Landroid/os/PersistableBundle;)[Landroid/os/PersistableBundle;
+HSPLandroid/content/pm/ShortcutInfo;->cloneIntents([Landroid/content/Intent;)[Landroid/content/Intent;
 HSPLandroid/content/pm/ShortcutInfo;->clonePersons([Landroid/app/Person;)[Landroid/app/Person;
-PLandroid/content/pm/ShortcutInfo;->copyNonNullFieldsFrom(Landroid/content/pm/ShortcutInfo;)V
-PLandroid/content/pm/ShortcutInfo;->enforceMandatoryFields(Z)V
-PLandroid/content/pm/ShortcutInfo;->ensureUpdatableWith(Landroid/content/pm/ShortcutInfo;Z)V
 HSPLandroid/content/pm/ShortcutInfo;->fixUpIntentExtras()V
-HSPLandroid/content/pm/ShortcutInfo;->getActivity()Landroid/content/ComponentName;
-PLandroid/content/pm/ShortcutInfo;->getBitmapPath()Ljava/lang/String;
-PLandroid/content/pm/ShortcutInfo;->getCategories()Ljava/util/Set;
-PLandroid/content/pm/ShortcutInfo;->getDisabledMessage()Ljava/lang/CharSequence;
-PLandroid/content/pm/ShortcutInfo;->getDisabledMessageResName()Ljava/lang/String;
-PLandroid/content/pm/ShortcutInfo;->getDisabledMessageResourceId()I
-PLandroid/content/pm/ShortcutInfo;->getDisabledReason()I
-PLandroid/content/pm/ShortcutInfo;->getDisabledReasonDebugString(I)Ljava/lang/String;
-HSPLandroid/content/pm/ShortcutInfo;->getDisabledReasonForRestoreIssue(Landroid/content/Context;I)Ljava/lang/String;
-PLandroid/content/pm/ShortcutInfo;->getExtras()Landroid/os/PersistableBundle;
-PLandroid/content/pm/ShortcutInfo;->getFlags()I
-PLandroid/content/pm/ShortcutInfo;->getIconResName()Ljava/lang/String;
-HSPLandroid/content/pm/ShortcutInfo;->getIconResourceId()I
+HSPLandroid/content/pm/ShortcutInfo;->getDisabledReason()I
 HSPLandroid/content/pm/ShortcutInfo;->getId()Ljava/lang/String;
-PLandroid/content/pm/ShortcutInfo;->getImplicitRank()I
-PLandroid/content/pm/ShortcutInfo;->getIntentPersistableExtrases()[Landroid/os/PersistableBundle;
-PLandroid/content/pm/ShortcutInfo;->getIntentsNoExtras()[Landroid/content/Intent;
-PLandroid/content/pm/ShortcutInfo;->getLastChangedTimestamp()J
-PLandroid/content/pm/ShortcutInfo;->getLocusId()Landroid/content/LocusId;
 HSPLandroid/content/pm/ShortcutInfo;->getPackage()Ljava/lang/String;
-PLandroid/content/pm/ShortcutInfo;->getPersons()[Landroid/app/Person;
-PLandroid/content/pm/ShortcutInfo;->getRank()I
-HPLandroid/content/pm/ShortcutInfo;->getResourceEntryName(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/content/pm/ShortcutInfo;->getResourcePackageName(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/content/pm/ShortcutInfo;->getResourceString(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;
-HPLandroid/content/pm/ShortcutInfo;->getResourceTypeAndEntryName(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/content/pm/ShortcutInfo;->getShortLabel()Ljava/lang/CharSequence;
-PLandroid/content/pm/ShortcutInfo;->getText()Ljava/lang/CharSequence;
-PLandroid/content/pm/ShortcutInfo;->getTextResId()I
-PLandroid/content/pm/ShortcutInfo;->getTextResName()Ljava/lang/String;
-PLandroid/content/pm/ShortcutInfo;->getTitle()Ljava/lang/CharSequence;
-PLandroid/content/pm/ShortcutInfo;->getTitleResId()I
-PLandroid/content/pm/ShortcutInfo;->getTitleResName()Ljava/lang/String;
-HSPLandroid/content/pm/ShortcutInfo;->getUserHandle()Landroid/os/UserHandle;
-PLandroid/content/pm/ShortcutInfo;->getUserId()I
-HPLandroid/content/pm/ShortcutInfo;->hasAdaptiveBitmap()Z
-PLandroid/content/pm/ShortcutInfo;->hasAnyResources()Z
 HSPLandroid/content/pm/ShortcutInfo;->hasFlags(I)Z
-HSPLandroid/content/pm/ShortcutInfo;->hasIconFile()Z
-HSPLandroid/content/pm/ShortcutInfo;->hasIconResource()Z
-PLandroid/content/pm/ShortcutInfo;->hasKeyFieldsOnly()Z
-PLandroid/content/pm/ShortcutInfo;->hasStringResourcesResolved()Z
-PLandroid/content/pm/ShortcutInfo;->isAlive()Z
-HSPLandroid/content/pm/ShortcutInfo;->isDeclaredInManifest()Z
-PLandroid/content/pm/ShortcutInfo;->isDisabledForRestoreIssue(I)Z
-HSPLandroid/content/pm/ShortcutInfo;->isDynamic()Z
-PLandroid/content/pm/ShortcutInfo;->isDynamicVisible()Z
-HSPLandroid/content/pm/ShortcutInfo;->isEnabled()Z
-PLandroid/content/pm/ShortcutInfo;->isFloating()Z
-PLandroid/content/pm/ShortcutInfo;->isIconPendingSave()Z
-PLandroid/content/pm/ShortcutInfo;->isImmutable()Z
-PLandroid/content/pm/ShortcutInfo;->isLongLived()Z
-PLandroid/content/pm/ShortcutInfo;->isManifestShortcut()Z
-PLandroid/content/pm/ShortcutInfo;->isOriginallyFromManifest()Z
-HPLandroid/content/pm/ShortcutInfo;->isPinned()Z
-PLandroid/content/pm/ShortcutInfo;->isRankChanged()Z
-PLandroid/content/pm/ShortcutInfo;->isReturnedByServer()Z
-PLandroid/content/pm/ShortcutInfo;->isVisibleToPublisher()Z
-PLandroid/content/pm/ShortcutInfo;->lookUpResourceId(Landroid/content/res/Resources;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
-PLandroid/content/pm/ShortcutInfo;->lookUpResourceName(Landroid/content/res/Resources;IZLjava/lang/String;)Ljava/lang/String;
-PLandroid/content/pm/ShortcutInfo;->lookupAndFillInResourceIds(Landroid/content/res/Resources;)V
-PLandroid/content/pm/ShortcutInfo;->lookupAndFillInResourceNames(Landroid/content/res/Resources;)V
-PLandroid/content/pm/ShortcutInfo;->resolveResourceStrings(Landroid/content/res/Resources;)V
-PLandroid/content/pm/ShortcutInfo;->setBitmapPath(Ljava/lang/String;)V
-PLandroid/content/pm/ShortcutInfo;->setCategories(Ljava/util/Set;)V
-PLandroid/content/pm/ShortcutInfo;->setIconResName(Ljava/lang/String;)V
-PLandroid/content/pm/ShortcutInfo;->setIconResourceId(I)V
-PLandroid/content/pm/ShortcutInfo;->setIntentExtras(Landroid/content/Intent;Landroid/os/PersistableBundle;)Landroid/content/Intent;
-PLandroid/content/pm/ShortcutInfo;->setIntents([Landroid/content/Intent;)V
-PLandroid/content/pm/ShortcutInfo;->setReturnedByServer()V
-PLandroid/content/pm/ShortcutInfo;->setTimestamp(J)V
-HPLandroid/content/pm/ShortcutInfo;->toStringInner(ZZLjava/lang/String;)Ljava/lang/String;
+HSPLandroid/content/pm/ShortcutInfo;->hasKeyFieldsOnly()Z
 HSPLandroid/content/pm/ShortcutInfo;->validateIcon(Landroid/graphics/drawable/Icon;)Landroid/graphics/drawable/Icon;
 HSPLandroid/content/pm/ShortcutInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/pm/ShortcutManager$ShareShortcutInfo$1;-><init>()V
-PLandroid/content/pm/ShortcutManager$ShareShortcutInfo;-><clinit>()V
-PLandroid/content/pm/ShortcutManager$ShareShortcutInfo;-><init>(Landroid/content/pm/ShortcutInfo;Landroid/content/ComponentName;)V
-PLandroid/content/pm/ShortcutManager$ShareShortcutInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/pm/ShortcutManager;-><init>(Landroid/content/Context;Landroid/content/pm/IShortcutService;)V
-HSPLandroid/content/pm/ShortcutManager;->disableShortcuts(Ljava/util/List;)V
-HSPLandroid/content/pm/ShortcutManager;->disableShortcuts(Ljava/util/List;Ljava/lang/CharSequence;)V
-HSPLandroid/content/pm/ShortcutManager;->enableShortcuts(Ljava/util/List;)V
-HSPLandroid/content/pm/ShortcutManager;->getDynamicShortcuts()Ljava/util/List;
-HPLandroid/content/pm/ShortcutManager;->getManifestShortcuts()Ljava/util/List;
-HPLandroid/content/pm/ShortcutManager;->getMaxShortcutCountPerActivity()I
-HSPLandroid/content/pm/ShortcutManager;->getPinnedShortcuts()Ljava/util/List;
 HSPLandroid/content/pm/ShortcutManager;->injectMyUserId()I
-HSPLandroid/content/pm/ShortcutManager;->setDynamicShortcuts(Ljava/util/List;)Z
-HSPLandroid/content/pm/ShortcutManager;->updateShortcuts(Ljava/util/List;)Z
-HSPLandroid/content/pm/ShortcutServiceInternal;-><init>()V
 HSPLandroid/content/pm/Signature$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/Signature;
 HSPLandroid/content/pm/Signature$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/Signature$1;->newArray(I)[Landroid/content/pm/Signature;
 HSPLandroid/content/pm/Signature$1;->newArray(I)[Ljava/lang/Object;
-HSLandroid/content/pm/Signature;-><init>(Landroid/os/Parcel;)V
-HSLandroid/content/pm/Signature;-><init>(Landroid/os/Parcel;Landroid/content/pm/Signature$1;)V
-HSPLandroid/content/pm/Signature;-><init>(Ljava/lang/String;)V
+HSPLandroid/content/pm/Signature;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/Signature;-><init>(Landroid/os/Parcel;Landroid/content/pm/Signature$1;)V
 HSPLandroid/content/pm/Signature;-><init>([B)V
-HSPLandroid/content/pm/Signature;-><init>([Ljava/security/cert/Certificate;)V
-HSPLandroid/content/pm/Signature;->areExactMatch([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)Z
 HSPLandroid/content/pm/Signature;->equals(Ljava/lang/Object;)Z
-HSPLandroid/content/pm/Signature;->getPublicKey()Ljava/security/PublicKey;
 HSPLandroid/content/pm/Signature;->hashCode()I
-HSPLandroid/content/pm/Signature;->parseHexDigit(I)I
 HSPLandroid/content/pm/Signature;->toByteArray()[B
-HSPLandroid/content/pm/Signature;->toChars()[C
-HSPLandroid/content/pm/Signature;->toChars([C[I)[C
-HSPLandroid/content/pm/Signature;->toCharsString()Ljava/lang/String;
-HPLandroid/content/pm/Signature;->writeToParcel(Landroid/os/Parcel;I)V
-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;
-HSPLandroid/content/pm/SigningInfo;-><init>(Landroid/content/pm/PackageParser$SigningDetails;)V
-HSPLandroid/content/pm/SigningInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/SigningInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/SigningInfo$1;)V
-HSPLandroid/content/pm/SigningInfo;->getSigningCertificateHistory()[Landroid/content/pm/Signature;
-HSPLandroid/content/pm/SigningInfo;->hasMultipleSigners()Z
-HSPLandroid/content/pm/SigningInfo;->hasPastSigningCertificates()Z
-PLandroid/content/pm/SigningInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/content/pm/StringParceledListSlice$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/StringParceledListSlice;
-PLandroid/content/pm/StringParceledListSlice$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/content/pm/StringParceledListSlice;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V
-PLandroid/content/pm/StringParceledListSlice;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;Landroid/content/pm/StringParceledListSlice$1;)V
-PLandroid/content/pm/StringParceledListSlice;->getList()Ljava/util/List;
 HSPLandroid/content/pm/UserInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/UserInfo;
 HSPLandroid/content/pm/UserInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/UserInfo;-><init>(ILjava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
-PLandroid/content/pm/UserInfo;-><init>(Landroid/content/pm/UserInfo;)V
 HSPLandroid/content/pm/UserInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/UserInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/UserInfo$1;)V
-HPLandroid/content/pm/UserInfo;->flagsToString(I)Ljava/lang/String;
 HSPLandroid/content/pm/UserInfo;->getUserHandle()Landroid/os/UserHandle;
-HSPLandroid/content/pm/UserInfo;->isAdmin()Z
-PLandroid/content/pm/UserInfo;->isDemo()Z
-HSPLandroid/content/pm/UserInfo;->isEnabled()Z
 HSPLandroid/content/pm/UserInfo;->isEphemeral()Z
-HSPLandroid/content/pm/UserInfo;->isFull()Z
 HSPLandroid/content/pm/UserInfo;->isGuest()Z
-PLandroid/content/pm/UserInfo;->isInitialized()Z
 HSPLandroid/content/pm/UserInfo;->isManagedProfile()Z
-HSPLandroid/content/pm/UserInfo;->isPrimary()Z
 HSPLandroid/content/pm/UserInfo;->isProfile()Z
-PLandroid/content/pm/UserInfo;->isQuietModeEnabled()Z
 HSPLandroid/content/pm/UserInfo;->isRestricted()Z
-PLandroid/content/pm/UserInfo;->isSystemOnly()Z
-PLandroid/content/pm/UserInfo;->isSystemOnly(I)Z
 HSPLandroid/content/pm/UserInfo;->supportsSwitchTo()Z
 HSPLandroid/content/pm/UserInfo;->supportsSwitchToByUser()Z
-PLandroid/content/pm/UserInfo;->toString()Ljava/lang/String;
-HSPLandroid/content/pm/UserInfo;->writeToParcel(Landroid/os/Parcel;I)V
 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;
 HSPLandroid/content/pm/VersionedPackage;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/VersionedPackage;-><init>(Landroid/os/Parcel;Landroid/content/pm/VersionedPackage$1;)V
-HSPLandroid/content/pm/VersionedPackage;-><init>(Ljava/lang/String;J)V
-HSPLandroid/content/pm/VersionedPackage;->getLongVersionCode()J
-HSPLandroid/content/pm/VersionedPackage;->getPackageName()Ljava/lang/String;
 HSPLandroid/content/pm/VersionedPackage;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/content/pm/dex/ArtManager;-><init>(Landroid/content/Context;Landroid/content/pm/dex/IArtManager;)V
 HSPLandroid/content/pm/dex/ArtManager;->getCurrentProfilePath(Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
 HSPLandroid/content/pm/dex/ArtManager;->getProfileName(Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/content/pm/dex/ArtManager;->isRuntimeProfilingEnabled(I)Z
-HPLandroid/content/pm/dex/ArtManager;->snapshotRuntimeProfile(ILjava/lang/String;Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/content/pm/dex/ArtManager$SnapshotRuntimeProfileCallback;)V
-HSPLandroid/content/pm/dex/ArtManagerInternal;-><init>()V
-PLandroid/content/pm/dex/DexMetadataHelper;->buildDexMetadataPathForApk(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/content/pm/dex/DexMetadataHelper;->buildDexMetadataPathForFile(Ljava/io/File;)Ljava/lang/String;
-PLandroid/content/pm/dex/DexMetadataHelper;->buildPackageApkToDexMetadataMap(Ljava/util/List;)Ljava/util/Map;
-PLandroid/content/pm/dex/DexMetadataHelper;->findDexMetadataForFile(Ljava/io/File;)Ljava/io/File;
-PLandroid/content/pm/dex/DexMetadataHelper;->getPackageDexMetadata(Landroid/content/pm/PackageParser$PackageLite;)Ljava/util/Map;
-PLandroid/content/pm/dex/DexMetadataHelper;->getPackageDexMetadata(Landroid/content/pm/parsing/AndroidPackage;)Ljava/util/Map;
-PLandroid/content/pm/dex/DexMetadataHelper;->getPackageDexMetadataSize(Landroid/content/pm/PackageParser$PackageLite;)J
-PLandroid/content/pm/dex/DexMetadataHelper;->validateDexMetadataFile(Ljava/lang/String;)V
-PLandroid/content/pm/dex/DexMetadataHelper;->validatePackageDexMetadata(Landroid/content/pm/parsing/AndroidPackage;)V
-HSPLandroid/content/pm/dex/IArtManager$Stub;-><init>()V
-PLandroid/content/pm/dex/IArtManager$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/content/pm/dex/IArtManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/dex/IArtManager;
-PLandroid/content/pm/dex/IArtManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/content/pm/dex/ISnapshotRuntimeProfileCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/content/pm/dex/ISnapshotRuntimeProfileCallback$Stub$Proxy;->onError(I)V
-PLandroid/content/pm/dex/ISnapshotRuntimeProfileCallback$Stub$Proxy;->onSuccess(Landroid/os/ParcelFileDescriptor;)V
-HPLandroid/content/pm/dex/ISnapshotRuntimeProfileCallback$Stub;-><init>()V
-HPLandroid/content/pm/dex/ISnapshotRuntimeProfileCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/content/pm/dex/ISnapshotRuntimeProfileCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/dex/ISnapshotRuntimeProfileCallback;
-HPLandroid/content/pm/dex/ISnapshotRuntimeProfileCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/content/pm/dex/PackageOptimizationInfo;-><init>(II)V
-PLandroid/content/pm/dex/PackageOptimizationInfo;->createWithNoInfo()Landroid/content/pm/dex/PackageOptimizationInfo;
-PLandroid/content/pm/dex/PackageOptimizationInfo;->getCompilationFilter()I
-PLandroid/content/pm/dex/PackageOptimizationInfo;->getCompilationReason()I
-HSPLandroid/content/pm/parsing/ApkLiteParseUtils;->parseApkLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$ApkLite;
-HSPLandroid/content/pm/parsing/ApkLiteParseUtils;->parseApkLite(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/pm/PackageParser$SigningDetails;)Landroid/content/pm/PackageParser$ApkLite;
-HSPLandroid/content/pm/parsing/ApkLiteParseUtils;->parseApkLiteInner(Ljava/io/File;Ljava/io/FileDescriptor;Ljava/lang/String;I)Landroid/content/pm/PackageParser$ApkLite;
-HSPLandroid/content/pm/parsing/ApkLiteParseUtils;->parseClusterPackageLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$PackageLite;
-HSPLandroid/content/pm/parsing/ApkLiteParseUtils;->parseMonolithicPackageLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$PackageLite;
-HSPLandroid/content/pm/parsing/ApkParseUtils$ParseResult;-><init>()V
-HSPLandroid/content/pm/parsing/ApkParseUtils$ParseResult;->error(ILjava/lang/String;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils$ParseResult;->getErrorMessage()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ApkParseUtils$ParseResult;->getParseError()I
-HSPLandroid/content/pm/parsing/ApkParseUtils$ParseResult;->getResultAndNull()Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/ApkParseUtils$ParseResult;->isSuccess()Z
-HSPLandroid/content/pm/parsing/ApkParseUtils$ParseResult;->reset()Landroid/content/pm/parsing/ApkParseUtils$ParseInput;
-HSPLandroid/content/pm/parsing/ApkParseUtils$ParseResult;->success(Landroid/content/pm/parsing/ParsingPackage;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->buildClassName(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->checkOverlayRequiredSystemProperty(Ljava/lang/String;Ljava/lang/String;)Z
-HSPLandroid/content/pm/parsing/ApkParseUtils;->collectCertificates(Landroid/content/pm/parsing/AndroidPackage;Z)V
-HSPLandroid/content/pm/parsing/ApkParseUtils;->collectCertificates(Ljava/lang/String;ZZLandroid/content/pm/PackageParser$SigningDetails;)Landroid/content/pm/PackageParser$SigningDetails;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->convertNewPermissions(Landroid/content/pm/parsing/ParsingPackage;)V
-HSPLandroid/content/pm/parsing/ApkParseUtils;->convertSplitPermissions(Landroid/content/pm/parsing/ParsingPackage;)V
-HSPLandroid/content/pm/parsing/ApkParseUtils;->generateAppDetailsHiddenActivity(Landroid/content/pm/parsing/ParsingPackage;[Ljava/lang/String;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->hasDomainURLs(Landroid/content/pm/parsing/ParsingPackage;)Z
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseAdditionalCertificates(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;[Ljava/lang/String;)[Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseBaseApk(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;[Ljava/lang/String;Landroid/content/pm/PackageParser$Callback;Landroid/util/DisplayMetrics;Ljava/io/File;Landroid/content/res/AssetManager;I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseBaseApk(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;[Ljava/lang/String;Landroid/content/pm/PackageParser$Callback;Ljava/lang/String;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseBaseApkTags(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;[Ljava/lang/String;Landroid/content/pm/PackageParser$Callback;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/TypedArray;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseBaseApplication(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;[Ljava/lang/String;Landroid/content/pm/PackageParser$Callback;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseClusterPackage(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;[Ljava/lang/String;Landroid/content/pm/PackageParser$Callback;Landroid/util/DisplayMetrics;ZLjava/io/File;I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseFeatureInfo(Landroid/content/res/Resources;Landroid/util/AttributeSet;)Landroid/content/pm/FeatureInfo;
-PLandroid/content/pm/parsing/ApkParseUtils;->parseInstrumentation(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseManifestAttributes(Landroid/content/res/TypedArray;Landroid/content/pm/parsing/ParsingPackage;I)V
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseMetaData(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/os/Bundle;[Ljava/lang/String;)Landroid/os/Bundle;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseMonolithicPackage(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;[Ljava/lang/String;Landroid/content/pm/PackageParser$Callback;Landroid/util/DisplayMetrics;ZLjava/io/File;I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseOriginalPackage(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Z
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseOverlay(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parsePackage(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;[Ljava/lang/String;Landroid/content/pm/PackageParser$Callback;Landroid/util/DisplayMetrics;ZLjava/io/File;I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parsePackageItemInfo(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/content/pm/parsing/ParsingPackage;Ljava/lang/String;Landroid/content/res/TypedArray;ZIIIIII)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parsePermission(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parsePermissionGroup(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-PLandroid/content/pm/parsing/ApkParseUtils;->parsePermissionTree(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseProtectedBroadcast(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Z
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseQueries(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseRestrictUpdateHash(ILandroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Z
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseSharedUser(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/TypedArray;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseSplitApk(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/util/DisplayMetrics;[Ljava/lang/String;Landroid/content/pm/parsing/ParsingPackage;ILandroid/content/res/AssetManager;I)V
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseSplitApk(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;[Ljava/lang/String;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;II[Ljava/lang/String;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseSplitApplication(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;[Ljava/lang/String;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;II[Ljava/lang/String;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseSupportScreens(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Z
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseUnknownTag(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/XmlResourceParser;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseUsesFeature(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Z
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseUsesPermission(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/content/pm/PackageParser$Callback;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseUsesSdk(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->parseUsesStaticLibrary(Landroid/content/pm/parsing/ApkParseUtils$ParseInput;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/content/pm/parsing/ApkParseUtils$ParseResult;
-HSPLandroid/content/pm/parsing/ApkParseUtils;->setMaxAspectRatio(Landroid/content/pm/parsing/ParsingPackage;)V
-HSPLandroid/content/pm/parsing/ApkParseUtils;->setMinAspectRatio(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/pm/PackageParser$Callback;)V
-HSPLandroid/content/pm/parsing/ApkParseUtils;->validateName(Ljava/lang/String;ZZ)Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity$1;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;-><clinit>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;->addIntent(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;->hasMaxAspectRatio()Z
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;->hasMinAspectRatio()Z
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;->setMaxAspectRatio(IF)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;->setMinAspectRatio(IF)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;->setPackageName(Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo$1;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;-><clinit>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;->getComponentName()Landroid/content/ComponentName;
-HPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;->getMetaData()Landroid/os/Bundle;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;->getName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;->getPackageName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;->getSplitName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;->isDirectBootAware()Z
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;->isEnabled()Z
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;->setEnabled(Z)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;->setPackageName(Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;->setPackageNameInternal(Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;->setSplitName(Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation$1;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation;-><clinit>()V
-PLandroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation;-><init>(Landroid/os/Parcel;)V
-PLandroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation;->setTargetPackage(Ljava/lang/String;)V
-PLandroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation;->setTargetProcesses(Ljava/lang/String;)V
-PLandroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedIntentInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedIntentInfo;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedIntentInfo;->addRawDataType(Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedIntentInfo;->createIntentsList(Landroid/os/Parcel;)Ljava/util/ArrayList;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedIntentInfo;->getClassName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedIntentInfo;->getPackageName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedIntentInfo;->writeIntentInfoToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedIntentInfo;->writeIntentsList(Ljava/util/List;Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedMainComponent$1;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedMainComponent;-><clinit>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedMainComponent;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedMainComponent;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedMainComponent;->getPermission()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedMainComponent;->getProcessName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedMainComponent;->setPermission(Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedMainComponent;->setProcessName(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedMainComponent;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission$1;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;-><clinit>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;-><init>(Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;->getGroup()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;->getProtection()I
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;->getProtectionFlags()I
-PLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;->isAppOp()Z
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;->isRuntime()Z
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;->setGroup(Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;->setName(Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermissionGroup$1;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermissionGroup$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermissionGroup;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermissionGroup$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermissionGroup;-><clinit>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermissionGroup;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermissionGroup;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedPermissionGroup;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider$1;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;-><clinit>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;->getAuthority()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;->getIntents()Ljava/util/List;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;->getReadPermission()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;->getWritePermission()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;->isSyncable()Z
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;->setAuthority(Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;->setReadPermission(Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;->setWritePermission(Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProviderIntentInfo$1;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProviderIntentInfo;-><clinit>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProviderIntentInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedProviderIntentInfo;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedService$1;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedService$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedService;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedService$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedService;-><clinit>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedService;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedService;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedService;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedServiceIntentInfo$1;-><init>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedServiceIntentInfo;-><clinit>()V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedServiceIntentInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils$ParsedServiceIntentInfo;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/ComponentParseUtils;->getActivityResizeMode(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/TypedArray;I)I
-HSPLandroid/content/pm/parsing/ComponentParseUtils;->isImplicitlyExposedIntent(Landroid/content/pm/parsing/ComponentParseUtils$ParsedIntentInfo;)Z
-HSPLandroid/content/pm/parsing/ComponentParseUtils;->parseActivity([Ljava/lang/String;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;ZZ)Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;
-HSPLandroid/content/pm/parsing/ComponentParseUtils;->parseActivityAlias(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;[Ljava/lang/String;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;
-HSPLandroid/content/pm/parsing/ComponentParseUtils;->parseAllMetaData(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Ljava/lang/String;Landroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;[Ljava/lang/String;)Z
-PLandroid/content/pm/parsing/ComponentParseUtils;->parseInstrumentation(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;[Ljava/lang/String;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation;
-HSPLandroid/content/pm/parsing/ComponentParseUtils;->parseIntentInfo(Landroid/content/pm/parsing/ComponentParseUtils$ParsedIntentInfo;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZZ[Ljava/lang/String;)Z
-HSPLandroid/content/pm/parsing/ComponentParseUtils;->parseLayout(Landroid/content/res/Resources;Landroid/util/AttributeSet;)Landroid/content/pm/ActivityInfo$WindowLayout;
-HSPLandroid/content/pm/parsing/ComponentParseUtils;->parsePermission(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;[Ljava/lang/String;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;
-HSPLandroid/content/pm/parsing/ComponentParseUtils;->parsePermissionGroup(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;[Ljava/lang/String;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermissionGroup;
-PLandroid/content/pm/parsing/ComponentParseUtils;->parsePermissionTree(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;[Ljava/lang/String;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;
-HSPLandroid/content/pm/parsing/ComponentParseUtils;->parseProvider([Ljava/lang/String;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;
-HSPLandroid/content/pm/parsing/ComponentParseUtils;->parseProviderTags(Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZLandroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;[Ljava/lang/String;)Z
-HSPLandroid/content/pm/parsing/ComponentParseUtils;->parseService([Ljava/lang/String;Landroid/content/pm/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Landroid/content/pm/parsing/ComponentParseUtils$ParsedService;
-HSPLandroid/content/pm/parsing/PackageImpl$1;-><init>()V
-HSPLandroid/content/pm/parsing/PackageImpl;-><clinit>()V
-HSPLandroid/content/pm/parsing/PackageImpl;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/parsing/PackageImpl;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/content/res/TypedArray;Z)V
-HSPLandroid/content/pm/parsing/PackageImpl;->addActivity(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;)Landroid/content/pm/parsing/ParsingPackage;
-PLandroid/content/pm/parsing/PackageImpl;->addAdoptPermission(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-PLandroid/content/pm/parsing/PackageImpl;->addAdoptPermission(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addConfigPreference(Landroid/content/pm/ConfigurationInfo;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addConfigPreference(Landroid/content/pm/ConfigurationInfo;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addImplicitPermission(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addImplicitPermission(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-PLandroid/content/pm/parsing/PackageImpl;->addInstrumentation(Landroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation;)Landroid/content/pm/parsing/PackageImpl;
-PLandroid/content/pm/parsing/PackageImpl;->addInstrumentation(Landroid/content/pm/parsing/ComponentParseUtils$ParsedInstrumentation;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addLibraryName(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addLibraryName(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addOriginalPackage(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addOriginalPackage(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addPermission(Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addPermission(Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addPermissionGroup(Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermissionGroup;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addPermissionGroup(Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermissionGroup;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addProtectedBroadcast(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addProtectedBroadcast(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addProvider(Landroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addQueriesPackage(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addQueriesPackage(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addReceiver(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addReqFeature(Landroid/content/pm/FeatureInfo;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addReqFeature(Landroid/content/pm/FeatureInfo;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addRequestedPermission(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addRequestedPermission(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addService(Landroid/content/pm/parsing/ComponentParseUtils$ParsedService;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addUsesLibrary(ILjava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addUsesLibrary(ILjava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addUsesLibrary(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addUsesLibrary(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addUsesOptionalLibrary(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addUsesOptionalLibrary(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addUsesStaticLibrary(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addUsesStaticLibrary(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addUsesStaticLibraryCertDigests([Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addUsesStaticLibraryCertDigests([Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->addUsesStaticLibraryVersion(J)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->addUsesStaticLibraryVersion(J)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->asSplit([Ljava/lang/String;[Ljava/lang/String;[ILandroid/util/SparseArray;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->asSplit([Ljava/lang/String;[Ljava/lang/String;[ILandroid/util/SparseArray;)Landroid/content/pm/parsing/ParsingPackage;
-PLandroid/content/pm/parsing/PackageImpl;->canHaveOatDir()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->cantSaveState()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->capPermissionPriorities()Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->clearAdoptPermissions()Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->clearOriginalPackages()Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->clearProtectedBroadcasts()Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->forParsing(Ljava/lang/String;Ljava/lang/String;Landroid/content/res/TypedArray;Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->getActivities()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getAdoptPermissions()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getAllCodePaths()Ljava/util/List;
-HPLandroid/content/pm/parsing/PackageImpl;->getAllCodePathsExcludingResourceOnly()Ljava/util/List;
-PLandroid/content/pm/parsing/PackageImpl;->getAppInfoClassLoaderName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getAppInfoCodePath()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getAppInfoPackageName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getAppInfoProcessName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getAppInfoResourcePath()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getAppMetaData()Landroid/os/Bundle;
-HSPLandroid/content/pm/parsing/PackageImpl;->getApplicationInfoVolumeUuid()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getBaseCodePath()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getBaseRevisionCode()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getCodePath()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getCompileSdkVersion()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getCompileSdkVersionCodeName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getCpuAbiOverride()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getDataDir()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getFlags()I
-PLandroid/content/pm/parsing/PackageImpl;->getHiddenApiEnforcementPolicy()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getImplicitPermissions()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getInstallLocation()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getInstrumentations()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getKeySetMapping()Ljava/util/Map;
-HPLandroid/content/pm/parsing/PackageImpl;->getLatestForegroundPackageUseTimeInMills()J
-HPLandroid/content/pm/parsing/PackageImpl;->getLatestPackageUseTimeInMills()J
-HSPLandroid/content/pm/parsing/PackageImpl;->getLibraryNames()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getLongVersionCode()J
-HSPLandroid/content/pm/parsing/PackageImpl;->getManifestPackageName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getMaxAspectRatio()F
-HSPLandroid/content/pm/parsing/PackageImpl;->getMinAspectRatio()F
-PLandroid/content/pm/parsing/PackageImpl;->getMinSdkVersion()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getNativeLibraryDir()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getNativeLibraryRootDir()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getOriginalPackages()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getOverlayCategory()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getOverlayPriority()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getOverlayTarget()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getOverlayTargetName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getPackageName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getPermission()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getPermissionGroups()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getPermissions()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getPreferredOrder()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getPrimaryCpuAbi()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getPrivateFlags()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getProcessName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getProtectedBroadcasts()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getProviders()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getQueriesIntents()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getQueriesPackages()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getRealPackage()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getReceivers()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getRequestedPermissions()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getRequiredAccountType()Ljava/lang/String;
-PLandroid/content/pm/parsing/PackageImpl;->getRestrictUpdateHash()[B
-HSPLandroid/content/pm/parsing/PackageImpl;->getRestrictedAccountType()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getSeInfo()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getSeInfoUser()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getSecondaryCpuAbi()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getServices()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getSharedUserId()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getSharedUserLabel()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getSigningDetails()Landroid/content/pm/PackageParser$SigningDetails;
-HSPLandroid/content/pm/parsing/PackageImpl;->getSplitCodePaths()[Ljava/lang/String;
-PLandroid/content/pm/parsing/PackageImpl;->getSplitDependencies()Landroid/util/SparseArray;
-HSPLandroid/content/pm/parsing/PackageImpl;->getSplitFlags()[I
-HSPLandroid/content/pm/parsing/PackageImpl;->getSplitNames()[Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getSplitRevisionCodes()[I
-HSPLandroid/content/pm/parsing/PackageImpl;->getStaticSharedLibName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getStaticSharedLibVersion()J
-HSPLandroid/content/pm/parsing/PackageImpl;->getTargetSdkVersion()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getTaskAffinity()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getUiOptions()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getUid()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getUpgradeKeySets()Ljava/util/Set;
-HSPLandroid/content/pm/parsing/PackageImpl;->getUsesLibraries()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getUsesLibraryFiles()[Ljava/lang/String;
-PLandroid/content/pm/parsing/PackageImpl;->getUsesLibraryInfos()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getUsesOptionalLibraries()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getUsesStaticLibraries()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->getUsesStaticLibrariesCertDigests()[[Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getUsesStaticLibrariesVersions()[J
-HSPLandroid/content/pm/parsing/PackageImpl;->getVersionCode()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getVersionCodeMajor()I
-HSPLandroid/content/pm/parsing/PackageImpl;->getVersionName()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->getVolumeUuid()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->hasComponentClassName(Ljava/lang/String;)Z
-HSPLandroid/content/pm/parsing/PackageImpl;->hideAsFinal()Landroid/content/pm/parsing/AndroidPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->hideAsParsed()Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->initForUser(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->initForUser(I)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->internStringArrayList(Ljava/util/List;)V
-HPLandroid/content/pm/parsing/PackageImpl;->isAllowedToUseHiddenApis()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isBaseHardwareAccelerated()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isCoreApp()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isDirectBootAware()Z
-PLandroid/content/pm/parsing/PackageImpl;->isEmbeddedDexUsed()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isEnabled()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isEncryptionAware()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isExternal()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isForceQueryable()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isHiddenUntilInstalled()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isInstantApp()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isLibrary()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isMatch(I)Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isOverlayIsStatic()Z
-HPLandroid/content/pm/parsing/PackageImpl;->isPackageWhitelistedForHiddenApis()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isPrivileged()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isProduct()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isProfileableByShell()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isRequiredForAllUsers()Z
-PLandroid/content/pm/parsing/PackageImpl;->isSignedWithPlatformKey()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isStaticSharedLibrary()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isStub()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isSystem()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isSystemApp()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isSystemExt()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isUpdatedSystemApp()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isUse32BitAbi()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->isVendor()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->makeListAllCodePaths()Ljava/util/List;
-HSPLandroid/content/pm/parsing/PackageImpl;->markNotActivitiesAsNotExportedIfSingleUser()Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->mutate()Landroid/content/pm/parsing/AndroidPackageWrite;
-PLandroid/content/pm/parsing/PackageImpl;->removePermission(I)Landroid/content/pm/parsing/PackageImpl;
-PLandroid/content/pm/parsing/PackageImpl;->removePermission(I)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->removeUsesLibrary(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->removeUsesOptionalLibrary(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->removeUsesOptionalLibrary(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-PLandroid/content/pm/parsing/PackageImpl;->requestsIsolatedSplitLoading()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->setActivitiesResizeModeResizeable(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setActivitiesResizeModeResizeable(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setActivitiesResizeModeResizeableViaSdkVersion(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setActivitiesResizeModeResizeableViaSdkVersion(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAllComponentsDirectBootAware(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAllComponentsDirectBootAware(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAllowAudioPlaybackCapture(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAllowAudioPlaybackCapture(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAllowBackup(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAllowBackup(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAllowClearUserData(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAllowClearUserData(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAllowClearUserDataOnFailedRestore(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAllowClearUserDataOnFailedRestore(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAllowTaskReparenting(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAllowTaskReparenting(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAnyDensity(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAnyDensity(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAppComponentFactory(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAppComponentFactory(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAppMetaData(Landroid/os/Bundle;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setAppMetaData(Landroid/os/Bundle;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setApplicationInfoBaseResourcePath(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setApplicationInfoBaseResourcePath(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setApplicationInfoCodePath(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setApplicationInfoCodePath(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setApplicationInfoResourcePath(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setApplicationInfoResourcePath(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setApplicationInfoSplitResourcePaths([Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setApplicationInfoSplitResourcePaths([Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setApplicationVolumeUuid(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setApplicationVolumeUuid(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setApplicationVolumeUuid(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setBackupAgentName(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setBackupAgentName(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setBackupInForeground(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setBackupInForeground(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setBanner(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setBanner(I)Landroid/content/pm/parsing/ParsingPackage;
-PLandroid/content/pm/parsing/PackageImpl;->setBaseCodePath(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-PLandroid/content/pm/parsing/PackageImpl;->setBaseCodePath(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setBaseHardwareAccelerated(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setBaseHardwareAccelerated(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCantSaveState(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCantSaveState(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCategory(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCategory(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setClassLoaderName(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setClassLoaderName(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setClassName(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setClassName(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCodePath(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-PLandroid/content/pm/parsing/PackageImpl;->setCodePath(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCodePath(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCompatibleWidthLimitDp(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCompatibleWidthLimitDp(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCompileSdkVersionCodename(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCoreApp(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCoreApp(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCpuAbiOverride(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setCpuAbiOverride(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setDebuggable(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setDebuggable(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setDefaultToDeviceProtectedStorage(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setDefaultToDeviceProtectedStorage(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setDefaultToDeviceProtectedStorage(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setDescriptionRes(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setDescriptionRes(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setDirectBootAware(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setDirectBootAware(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setDirectBootAware(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setEnabled(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setEnabled(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setExternalStorage(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setExternalStorage(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setExtractNativeLibs(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setExtractNativeLibs(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setFactoryTest(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setForceQueryable(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setForceQueryable(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setFullBackupContent(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setFullBackupContent(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setFullBackupOnly(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setFullBackupOnly(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setHasCode(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setHasCode(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setHasDomainUrls(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setHasDomainUrls(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setHasFragileUserData(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setHasFragileUserData(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setHiddenUntilInstalled(Z)Landroid/content/pm/parsing/AndroidPackageWrite;
-HSPLandroid/content/pm/parsing/PackageImpl;->setHiddenUntilInstalled(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setIcon(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setIcon(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setIconRes(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setIconRes(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setInstallLocation(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setInstallLocation(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setIsGame(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setIsGame(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setIsOverlay(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setIsOverlay(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setIsStub(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setIsStub(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setIsolatedSplitLoading(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setIsolatedSplitLoading(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setKillAfterRestore(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setKillAfterRestore(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setLabelRes(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setLabelRes(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setLargeHeap(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setLargeHeap(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setLargestWidthLimitDp(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setLargestWidthLimitDp(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setLastPackageUsageTimeInMills(IJ)Landroid/content/pm/parsing/AndroidPackageWrite;
-HSPLandroid/content/pm/parsing/PackageImpl;->setLastPackageUsageTimeInMills(IJ)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setLogo(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setLogo(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setManageSpaceActivityName(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setManageSpaceActivityName(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setMaxAspectRatio(F)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setMaxAspectRatio(F)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setMinAspectRatio(F)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setMinAspectRatio(F)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setMinSdkVersion(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setMinSdkVersion(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setMultiArch(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setMultiArch(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setName(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setName(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setNativeLibraryDir(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setNativeLibraryDir(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setNativeLibraryRootDir(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setNativeLibraryRootDir(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setNativeLibraryRootRequiresIsa(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setNativeLibraryRootRequiresIsa(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setNetworkSecurityConfigRes(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setNetworkSecurityConfigRes(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setNonLocalizedLabel(Ljava/lang/CharSequence;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setNonLocalizedLabel(Ljava/lang/CharSequence;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setOdm(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setOem(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setOverlayCategory(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setOverlayCategory(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setOverlayIsStatic(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setOverlayIsStatic(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setOverlayPriority(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setOverlayPriority(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setOverlayTarget(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setOverlayTarget(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setOverlayTargetName(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setOverlayTargetName(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPackageName(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPackageName(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPackageSettingCallback(Landroid/content/pm/parsing/ParsedPackage$PackageSettingCallback;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPackageSettingCallback(Landroid/content/pm/parsing/ParsedPackage$PackageSettingCallback;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPartiallyDirectBootAware(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPartiallyDirectBootAware(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPermission(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPermission(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPersistent(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPersistent(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPersistent(Z)Landroid/content/pm/parsing/ParsingPackage;
-PLandroid/content/pm/parsing/PackageImpl;->setPrimaryCpuAbi(Ljava/lang/String;)Landroid/content/pm/parsing/AndroidPackageWrite;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPrimaryCpuAbi(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPrimaryCpuAbi(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setPrivileged(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setProcessName(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setProcessName(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setProcessName(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setProduct(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRealPackage(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRealPackage(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRealPackage(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRequestLegacyExternalStorage(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRequestLegacyExternalStorage(Z)Landroid/content/pm/parsing/ParsingPackage;
-PLandroid/content/pm/parsing/PackageImpl;->setRequiredAccountType(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-PLandroid/content/pm/parsing/PackageImpl;->setRequiredAccountType(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRequiredForAllUsers(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRequiredForAllUsers(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRequiresSmallestWidthDp(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRequiresSmallestWidthDp(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setResizeable(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setResizeable(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRestoreAnyVersion(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRestoreAnyVersion(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRestrictUpdateHash([B)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRestrictUpdateHash([B)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRestrictedAccountType(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRestrictedAccountType(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRoundIconRes(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setRoundIconRes(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSeInfo(Ljava/lang/String;)Landroid/content/pm/parsing/AndroidPackageWrite;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSeInfo(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSeInfo(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSeInfoUser(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSeInfoUser(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSecondaryCpuAbi(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSecondaryCpuAbi(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSecondaryNativeLibraryDir(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSecondaryNativeLibraryDir(Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSharedUserId(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSharedUserId(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSharedUserLabel(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSharedUserLabel(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSignedWithPlatformKey(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSigningDetails(Landroid/content/pm/PackageParser$SigningDetails;)Landroid/content/pm/parsing/AndroidPackageWrite;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSigningDetails(Landroid/content/pm/PackageParser$SigningDetails;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSigningDetails(Landroid/content/pm/PackageParser$SigningDetails;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSigningDetails(Landroid/content/pm/PackageParser$SigningDetails;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSplitClassLoaderName(ILjava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSplitClassLoaderName(ILjava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-PLandroid/content/pm/parsing/PackageImpl;->setSplitCodePaths([Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-PLandroid/content/pm/parsing/PackageImpl;->setSplitCodePaths([Ljava/lang/String;)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSplitHasCode(IZ)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSplitHasCode(IZ)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setStaticSharedLibName(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setStaticSharedLibName(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setStaticSharedLibVersion(J)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setStaticSharedLibVersion(J)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setStaticSharedLibrary(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setStaticSharedLibrary(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSupportsLargeScreens(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSupportsLargeScreens(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSupportsNormalScreens(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSupportsNormalScreens(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSupportsRtl(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSupportsRtl(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSupportsSmallScreens(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSupportsSmallScreens(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSupportsXLargeScreens(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSupportsXLargeScreens(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSystem(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSystem(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSystemExt(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setSystemExt(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setTargetSandboxVersion(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setTargetSandboxVersion(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setTargetSdkVersion(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setTargetSdkVersion(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setTaskAffinity(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setTaskAffinity(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setTestOnly(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setTestOnly(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setTheme(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setTheme(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUiOptions(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUiOptions(I)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUid(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUid(I)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUpdatedSystemApp(Z)Landroid/content/pm/parsing/AndroidPackageWrite;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUpdatedSystemApp(Z)Landroid/content/pm/parsing/PackageImpl;
-PLandroid/content/pm/parsing/PackageImpl;->setUpdatedSystemApp(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUse32BitAbi(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUse32BitAbi(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUseEmbeddedDex(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUseEmbeddedDex(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUsesCleartextTraffic(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUsesCleartextTraffic(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUsesLibraryFiles([Ljava/lang/String;)Landroid/content/pm/parsing/AndroidPackageWrite;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUsesLibraryFiles([Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUsesLibraryInfos(Ljava/util/List;)Landroid/content/pm/parsing/AndroidPackageWrite;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUsesLibraryInfos(Ljava/util/List;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUsesNonSdkApi(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setUsesNonSdkApi(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setVendor(Z)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setVersionCode(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setVersionCode(I)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setVersionCodeMajor(I)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setVersionCodeMajor(I)Landroid/content/pm/parsing/ParsedPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setVersionName(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setVisibleToInstantApps(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setVisibleToInstantApps(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setVmSafeMode(Z)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setVmSafeMode(Z)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setVolumeUuid(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setVolumeUuid(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->setZygotePreloadName(Ljava/lang/String;)Landroid/content/pm/parsing/PackageImpl;
-HSPLandroid/content/pm/parsing/PackageImpl;->setZygotePreloadName(Ljava/lang/String;)Landroid/content/pm/parsing/ParsingPackage;
-HSPLandroid/content/pm/parsing/PackageImpl;->toAppInfoWithoutState()Landroid/content/pm/ApplicationInfo;
-HPLandroid/content/pm/parsing/PackageImpl;->toString()Ljava/lang/String;
-HSPLandroid/content/pm/parsing/PackageImpl;->updateFlags()V
-HSPLandroid/content/pm/parsing/PackageImpl;->usesCompatibilityMode()Z
-PLandroid/content/pm/parsing/PackageImpl;->usesNonSdkApi()Z
-HSPLandroid/content/pm/parsing/PackageImpl;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->assignSharedFieldsForComponentInfo(Landroid/content/pm/ComponentInfo;Landroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;)V
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->assignSharedFieldsForPackageItemInfo(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;)V
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->checkUseInstalledOrHidden(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/PackageUserState;I)Z
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->generate(Landroid/content/pm/parsing/AndroidPackage;[IIJJLjava/util/Set;Landroid/content/pm/PackageUserState;I)Landroid/content/pm/PackageInfo;
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->generateActivityInfo(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ActivityInfo;
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->generateActivityInfo(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;ILandroid/content/pm/PackageUserState;Landroid/content/pm/ApplicationInfo;I)Landroid/content/pm/ActivityInfo;
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->generateApplicationInfo(Landroid/content/pm/parsing/AndroidPackage;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ApplicationInfo;
-HPLandroid/content/pm/parsing/PackageInfoUtils;->generatePermissionGroupInfo(Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermissionGroup;I)Landroid/content/pm/PermissionGroupInfo;
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->generatePermissionInfo(Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;I)Landroid/content/pm/PermissionInfo;
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->generateProviderInfo(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ProviderInfo;
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->generateProviderInfo(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;ILandroid/content/pm/PackageUserState;Landroid/content/pm/ApplicationInfo;I)Landroid/content/pm/ProviderInfo;
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->generateServiceInfo(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/ComponentParseUtils$ParsedService;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ServiceInfo;
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->generateServiceInfo(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/ComponentParseUtils$ParsedService;ILandroid/content/pm/PackageUserState;Landroid/content/pm/ApplicationInfo;I)Landroid/content/pm/ServiceInfo;
-HSPLandroid/content/pm/parsing/PackageInfoUtils;->updateApplicationInfo(Landroid/content/pm/ApplicationInfo;ILandroid/content/pm/PackageUserState;)V
-HSPLandroid/content/pm/parsing/library/AndroidHidlUpdater;->updatePackage(Landroid/content/pm/parsing/ParsedPackage;)V
-HSPLandroid/content/pm/parsing/library/OrgApacheHttpLegacyUpdater;->apkTargetsApiLevelLessThanOrEqualToOMR1(Landroid/content/pm/parsing/AndroidPackage;)Z
-HSPLandroid/content/pm/parsing/library/OrgApacheHttpLegacyUpdater;->updatePackage(Landroid/content/pm/parsing/ParsedPackage;)V
-HSPLandroid/content/pm/parsing/library/PackageBackwardCompatibility$AndroidTestRunnerSplitUpdater;->updatePackage(Landroid/content/pm/parsing/ParsedPackage;)V
-HSPLandroid/content/pm/parsing/library/PackageBackwardCompatibility;->modifySharedLibraries(Landroid/content/pm/parsing/ParsedPackage;)V
-HSPLandroid/content/pm/parsing/library/PackageBackwardCompatibility;->updatePackage(Landroid/content/pm/parsing/ParsedPackage;)V
-HSPLandroid/content/pm/parsing/library/PackageSharedLibraryUpdater;->isLibraryPresent(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)Z
-HSPLandroid/content/pm/parsing/library/PackageSharedLibraryUpdater;->prefixImplicitDependency(Landroid/content/pm/parsing/ParsedPackage;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/library/PackageSharedLibraryUpdater;->prefixRequiredLibrary(Landroid/content/pm/parsing/ParsedPackage;Ljava/lang/String;)V
-HSPLandroid/content/pm/parsing/library/PackageSharedLibraryUpdater;->removeLibrary(Landroid/content/pm/parsing/ParsedPackage;Ljava/lang/String;)V
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable$1;-><init>()V
-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;-><clinit>()V
 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;
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;->getTargetSdk()I
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;->onConstructed()V
-HPLandroid/content/pm/permission/SplitPermissionInfoParcelable;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/pm/split/DefaultSplitAssetLoader;-><init>(Landroid/content/pm/PackageParser$PackageLite;I)V
-HSPLandroid/content/pm/split/DefaultSplitAssetLoader;->close()V
-HSPLandroid/content/pm/split/DefaultSplitAssetLoader;->getBaseAssetManager()Landroid/content/res/AssetManager;
-HSPLandroid/content/pm/split/DefaultSplitAssetLoader;->getSplitAssetManager(I)Landroid/content/res/AssetManager;
-HSPLandroid/content/pm/split/DefaultSplitAssetLoader;->loadApkAssets(Ljava/lang/String;I)Landroid/content/res/ApkAssets;
-HPLandroid/content/res/-$$Lambda$Resources$4msWUw7LKsgLexLZjIfWa4oguq4;->test(Ljava/lang/Object;)Z
+HSPLandroid/content/res/-$$Lambda$Resources$4msWUw7LKsgLexLZjIfWa4oguq4;->test(Ljava/lang/Object;)Z
 HSPLandroid/content/res/-$$Lambda$ResourcesImpl$99dm2ENnzo9b0SIUjUj2Kl3pi90;->onHeaderDecoded(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
 HSPLandroid/content/res/-$$Lambda$ResourcesImpl$h3PTRX185BeQl8SVC2_w9arp5Og;->get()Ljava/lang/Object;
 HSPLandroid/content/res/ApkAssets;-><init>(Ljava/lang/String;ZZZZZ)V
@@ -8256,11 +3225,9 @@
 HSPLandroid/content/res/ApkAssets;->getStringFromPool(I)Ljava/lang/CharSequence;
 HSPLandroid/content/res/ApkAssets;->isForLoader()Z
 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;Z)Landroid/content/res/ApkAssets;
 HSPLandroid/content/res/ApkAssets;->loadFromPath(Ljava/lang/String;ZZ)Landroid/content/res/ApkAssets;
 HSPLandroid/content/res/ApkAssets;->loadOverlayFromPath(Ljava/lang/String;Z)Landroid/content/res/ApkAssets;
-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;-><init>(Landroid/os/Parcel;)V
@@ -8282,43 +3249,44 @@
 HSPLandroid/content/res/AssetManager$AssetInputStream;->ensureOpen()V
 HSPLandroid/content/res/AssetManager$AssetInputStream;->finalize()V
 HSPLandroid/content/res/AssetManager$AssetInputStream;->getNativeAsset()J
-HSPLandroid/content/res/AssetManager$AssetInputStream;->mark(I)V
-HSPLandroid/content/res/AssetManager$AssetInputStream;->markSupported()Z
 HSPLandroid/content/res/AssetManager$AssetInputStream;->read()I
 HSPLandroid/content/res/AssetManager$AssetInputStream;->read([B)I
 HSPLandroid/content/res/AssetManager$AssetInputStream;->read([BII)I
-HSPLandroid/content/res/AssetManager$AssetInputStream;->reset()V
-HSPLandroid/content/res/AssetManager$AssetInputStream;->skip(J)J
 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;-><init>()V
 HSPLandroid/content/res/AssetManager;-><init>(Z)V
 HSPLandroid/content/res/AssetManager;-><init>(ZLandroid/content/res/AssetManager$1;)V
+HSPLandroid/content/res/AssetManager;->access$1000(J)J
 HSPLandroid/content/res/AssetManager;->access$1000(J)V
 HSPLandroid/content/res/AssetManager;->access$102(Landroid/content/res/AssetManager;[Landroid/content/res/ApkAssets;)[Landroid/content/res/ApkAssets;
+HSPLandroid/content/res/AssetManager;->access$1100(J)V
 HSPLandroid/content/res/AssetManager;->access$1100(Landroid/content/res/AssetManager;J)V
+HSPLandroid/content/res/AssetManager;->access$1200(Landroid/content/res/AssetManager;J)V
 HSPLandroid/content/res/AssetManager;->access$200(Landroid/content/res/AssetManager;)J
 HSPLandroid/content/res/AssetManager;->access$300(J[Landroid/content/res/ApkAssets;Z)V
+HSPLandroid/content/res/AssetManager;->access$402(Landroid/content/res/AssetManager;[Landroid/content/res/loader/ResourcesLoader;)[Landroid/content/res/loader/ResourcesLoader;
 HSPLandroid/content/res/AssetManager;->access$500(J)J
-HSPLandroid/content/res/AssetManager;->access$600(J)I
+HSPLandroid/content/res/AssetManager;->access$600(J)J
 HSPLandroid/content/res/AssetManager;->access$700(J[BII)I
-HSPLandroid/content/res/AssetManager;->access$800(JJI)J
+HSPLandroid/content/res/AssetManager;->access$800(J[BII)I
 HSPLandroid/content/res/AssetManager;->access$900(J)J
+HSPLandroid/content/res/AssetManager;->addAssetPathAsSharedLibrary(Ljava/lang/String;)I
 HSPLandroid/content/res/AssetManager;->addAssetPathInternal(Ljava/lang/String;ZZ)I
 HSPLandroid/content/res/AssetManager;->applyStyle(JIILandroid/content/res/XmlBlock$Parser;[IJJ)V
 HSPLandroid/content/res/AssetManager;->applyStyleToTheme(JIZ)V
-HSPLandroid/content/res/AssetManager;->close()V
 HSPLandroid/content/res/AssetManager;->createSystemAssetsInZygoteLocked(ZLjava/lang/String;)V
 HSPLandroid/content/res/AssetManager;->createTheme()J
 HSPLandroid/content/res/AssetManager;->decRefsLocked(J)V
 HSPLandroid/content/res/AssetManager;->ensureOpenLocked()V
 HSPLandroid/content/res/AssetManager;->ensureValidLocked()V
 HSPLandroid/content/res/AssetManager;->finalize()V
-HSPLandroid/content/res/AssetManager;->findCookieForPath(Ljava/lang/String;)I
 HSPLandroid/content/res/AssetManager;->getApkAssets()[Landroid/content/res/ApkAssets;
+HSPLandroid/content/res/AssetManager;->getAssignedPackageIdentifiers()Landroid/util/SparseArray;
 HSPLandroid/content/res/AssetManager;->getAssignedPackageIdentifiers(ZZ)Landroid/util/SparseArray;
+HSPLandroid/content/res/AssetManager;->getLoaders()Ljava/util/List;
 HSPLandroid/content/res/AssetManager;->getLocales()[Ljava/lang/String;
+HSPLandroid/content/res/AssetManager;->getNonSystemLocales()[Ljava/lang/String;
 HSPLandroid/content/res/AssetManager;->getPooledStringForCookie(II)Ljava/lang/CharSequence;
 HSPLandroid/content/res/AssetManager;->getResourceArray(I[I)I
 HSPLandroid/content/res/AssetManager;->getResourceArraySize(I)I
@@ -8330,23 +3298,20 @@
 HSPLandroid/content/res/AssetManager;->getResourcePackageName(I)Ljava/lang/String;
 HSPLandroid/content/res/AssetManager;->getResourceStringArray(I)[Ljava/lang/String;
 HSPLandroid/content/res/AssetManager;->getResourceText(I)Ljava/lang/CharSequence;
-HSPLandroid/content/res/AssetManager;->getResourceTextArray(I)[Ljava/lang/CharSequence;
 HSPLandroid/content/res/AssetManager;->getResourceTypeName(I)Ljava/lang/String;
 HSPLandroid/content/res/AssetManager;->getResourceValue(IILandroid/util/TypedValue;Z)Z
 HSPLandroid/content/res/AssetManager;->getSizeConfigurations()[Landroid/content/res/Configuration;
 HSPLandroid/content/res/AssetManager;->getSystem()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;->invalidateCachesLocked(I)V
 HSPLandroid/content/res/AssetManager;->isUpToDate()Z
 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;
-HSPLandroid/content/res/AssetManager;->openFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/res/AssetManager;->openNonAsset(ILjava/lang/String;I)Ljava/io/InputStream;
 HSPLandroid/content/res/AssetManager;->openNonAssetFd(ILjava/lang/String;)Landroid/content/res/AssetFileDescriptor;
-HSPLandroid/content/res/AssetManager;->openNonAssetFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/res/AssetManager;->openXmlBlockAsset(ILjava/lang/String;)Landroid/content/res/XmlBlock;
-HSPLandroid/content/res/AssetManager;->openXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser;
 HSPLandroid/content/res/AssetManager;->releaseTheme(J)V
 HSPLandroid/content/res/AssetManager;->resolveAttrs(JII[I[I[I[I)Z
 HSPLandroid/content/res/AssetManager;->retrieveAttributes(Landroid/content/res/XmlBlock$Parser;[I[I[I)Z
@@ -8356,10 +3321,10 @@
 HSPLandroid/content/res/AssetManager;->setConfiguration(IILjava/lang/String;IIIIIIIIIIIIIII)V
 HSPLandroid/content/res/AssetManager;->setThemeTo(JLandroid/content/res/AssetManager;J)V
 HSPLandroid/content/res/AssetManager;->xmlBlockGone(I)V
-HPLandroid/content/res/ColorStateList$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/ColorStateList;
-HPLandroid/content/res/ColorStateList$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/res/ColorStateList$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/ColorStateList$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/res/ColorStateList$ColorStateListFactory;-><init>(Landroid/content/res/ColorStateList;)V
-HPLandroid/content/res/ColorStateList$ColorStateListFactory;->getChangingConfigurations()I
+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;
@@ -8367,6 +3332,7 @@
 HSPLandroid/content/res/ColorStateList;-><init>()V
 HSPLandroid/content/res/ColorStateList;-><init>(Landroid/content/res/ColorStateList;)V
 HSPLandroid/content/res/ColorStateList;-><init>([[I[I)V
+HSPLandroid/content/res/ColorStateList;->access$000(Landroid/content/res/ColorStateList;)I
 HSPLandroid/content/res/ColorStateList;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/content/res/ColorStateList;->canApplyTheme()Z
 HSPLandroid/content/res/ColorStateList;->createFromXmlInner(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
@@ -8379,27 +3345,19 @@
 HSPLandroid/content/res/ColorStateList;->modulateColorAlpha(IF)I
 HSPLandroid/content/res/ColorStateList;->obtainForTheme(Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/ColorStateList;->onColorsChanged()V
-HPLandroid/content/res/ColorStateList;->toString()Ljava/lang/String;
 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;
-HSPLandroid/content/res/CompatibilityInfo;-><init>(Landroid/content/pm/ApplicationInfo;IIZ)V
 HSPLandroid/content/res/CompatibilityInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/res/CompatibilityInfo;-><init>(Landroid/os/Parcel;Landroid/content/res/CompatibilityInfo$1;)V
-PLandroid/content/res/CompatibilityInfo;->alwaysSupportsScreen()Z
 HSPLandroid/content/res/CompatibilityInfo;->applyToConfiguration(ILandroid/content/res/Configuration;)V
 HSPLandroid/content/res/CompatibilityInfo;->applyToDisplayMetrics(Landroid/util/DisplayMetrics;)V
-HSPLandroid/content/res/CompatibilityInfo;->computeCompatibleScaling(Landroid/util/DisplayMetrics;Landroid/util/DisplayMetrics;)F
 HSPLandroid/content/res/CompatibilityInfo;->equals(Ljava/lang/Object;)Z
 HSPLandroid/content/res/CompatibilityInfo;->getTranslator()Landroid/content/res/CompatibilityInfo$Translator;
 HSPLandroid/content/res/CompatibilityInfo;->hashCode()I
 HSPLandroid/content/res/CompatibilityInfo;->isScalingRequired()Z
 HSPLandroid/content/res/CompatibilityInfo;->needsCompatResources()Z
-PLandroid/content/res/CompatibilityInfo;->neverSupportsScreen()Z
 HSPLandroid/content/res/CompatibilityInfo;->supportsScreen()Z
-HPLandroid/content/res/CompatibilityInfo;->toString()Ljava/lang/String;
-HSPLandroid/content/res/CompatibilityInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/res/ComplexColor;-><init>()V
 HSPLandroid/content/res/ComplexColor;->getChangingConfigurations()I
 HSPLandroid/content/res/ComplexColor;->setBaseChangingConfigurations(I)V
@@ -8413,9 +3371,6 @@
 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
-PLandroid/content/res/Configuration;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLandroid/content/res/Configuration;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JZ)V
-HPLandroid/content/res/Configuration;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JZZ)V
 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
@@ -8426,22 +3381,14 @@
 HSPLandroid/content/res/Configuration;->hashCode()I
 HSPLandroid/content/res/Configuration;->isLayoutSizeAtLeast(I)Z
 HSPLandroid/content/res/Configuration;->isOtherSeqNewer(Landroid/content/res/Configuration;)Z
-PLandroid/content/res/Configuration;->isScreenRound()Z
+HSPLandroid/content/res/Configuration;->isScreenRound()Z
 HSPLandroid/content/res/Configuration;->isScreenWideColorGamut()Z
-PLandroid/content/res/Configuration;->localesToResourceQualifier(Landroid/os/LocaleList;)Ljava/lang/String;
 HSPLandroid/content/res/Configuration;->needNewResources(II)Z
 HSPLandroid/content/res/Configuration;->readFromParcel(Landroid/os/Parcel;)V
-HPLandroid/content/res/Configuration;->readFromProto(Landroid/util/proto/ProtoInputStream;J)V
-HSPLandroid/content/res/Configuration;->reduceScreenLayout(III)I
-HSPLandroid/content/res/Configuration;->resetScreenLayout(I)I
-PLandroid/content/res/Configuration;->resourceQualifierString(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;)Ljava/lang/String;
 HSPLandroid/content/res/Configuration;->setLayoutDirection(Ljava/util/Locale;)V
-HSPLandroid/content/res/Configuration;->setLocale(Ljava/util/Locale;)V
 HSPLandroid/content/res/Configuration;->setLocales(Landroid/os/LocaleList;)V
 HSPLandroid/content/res/Configuration;->setTo(Landroid/content/res/Configuration;)V
 HSPLandroid/content/res/Configuration;->setToDefaults()V
-HSPLandroid/content/res/Configuration;->toString()Ljava/lang/String;
-PLandroid/content/res/Configuration;->uiModeToString(I)Ljava/lang/String;
 HSPLandroid/content/res/Configuration;->unset()V
 HSPLandroid/content/res/Configuration;->updateFrom(Landroid/content/res/Configuration;)I
 HSPLandroid/content/res/Configuration;->writeToParcel(Landroid/os/Parcel;I)V
@@ -8451,46 +3398,32 @@
 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
-HPLandroid/content/res/ConfigurationBoundResourceCache;->shouldInvalidateEntry(Landroid/content/res/ConstantState;I)Z
-HPLandroid/content/res/ConfigurationBoundResourceCache;->shouldInvalidateEntry(Ljava/lang/Object;I)Z
+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
 HSPLandroid/content/res/ConstantState;->newInstance(Landroid/content/res/Resources;)Ljava/lang/Object;
 HSPLandroid/content/res/ConstantState;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
 HSPLandroid/content/res/DrawableCache;-><init>()V
 HSPLandroid/content/res/DrawableCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
-HPLandroid/content/res/DrawableCache;->shouldInvalidateEntry(Landroid/graphics/drawable/Drawable$ConstantState;I)Z
-HPLandroid/content/res/DrawableCache;->shouldInvalidateEntry(Ljava/lang/Object;I)Z
-HSPLandroid/content/res/FontResourcesParser$FontFileResourceEntry;-><init>(Ljava/lang/String;IILjava/lang/String;I)V
+HSPLandroid/content/res/DrawableCache;->shouldInvalidateEntry(Landroid/graphics/drawable/Drawable$ConstantState;I)Z
+HSPLandroid/content/res/DrawableCache;->shouldInvalidateEntry(Ljava/lang/Object;I)Z
+HSPLandroid/content/res/FontResourcesParser$ProviderResourceEntry;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V
 HSPLandroid/content/res/FontResourcesParser;->parse(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;
 HSPLandroid/content/res/FontResourcesParser;->readFamilies(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;
 HSPLandroid/content/res/FontResourcesParser;->readFamily(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;
-HSPLandroid/content/res/FontResourcesParser;->readFont(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FontFileResourceEntry;
-HPLandroid/content/res/GradientColor$GradientColorFactory;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/content/res/GradientColor;
-HPLandroid/content/res/GradientColor$GradientColorFactory;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
-PLandroid/content/res/GradientColor;-><init>()V
-PLandroid/content/res/GradientColor;->canApplyTheme()Z
-PLandroid/content/res/GradientColor;->createFromXmlInner(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroid/content/res/GradientColor;
-PLandroid/content/res/GradientColor;->getConstantState()Landroid/content/res/ConstantState;
-PLandroid/content/res/GradientColor;->getDefaultColor()I
-PLandroid/content/res/GradientColor;->getShader()Landroid/graphics/Shader;
-PLandroid/content/res/GradientColor;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HPLandroid/content/res/GradientColor;->obtainForTheme(Landroid/content/res/Resources$Theme;)Landroid/content/res/GradientColor;
-PLandroid/content/res/GradientColor;->onColorsChange()V
-PLandroid/content/res/GradientColor;->updateRootElementState(Landroid/content/res/TypedArray;)V
-HPLandroid/content/res/ResourceId;->isValid(I)Z
-PLandroid/content/res/Resources$NotFoundException;-><init>(Ljava/lang/String;)V
+HSPLandroid/content/res/ResourceId;->isValid(I)Z
+HSPLandroid/content/res/Resources$NotFoundException;-><init>(Ljava/lang/String;)V
 HSPLandroid/content/res/Resources$Theme;-><init>(Landroid/content/res/Resources;)V
 HSPLandroid/content/res/Resources$Theme;-><init>(Landroid/content/res/Resources;Landroid/content/res/Resources$1;)V
 HSPLandroid/content/res/Resources$Theme;->applyStyle(IZ)V
 HSPLandroid/content/res/Resources$Theme;->getChangingConfigurations()I
-PLandroid/content/res/Resources$Theme;->getKey()Landroid/content/res/Resources$ThemeKey;
+HSPLandroid/content/res/Resources$Theme;->getKey()Landroid/content/res/Resources$ThemeKey;
 HSPLandroid/content/res/Resources$Theme;->getResources()Landroid/content/res/Resources;
 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;->resolveAttribute(ILandroid/util/TypedValue;Z)Z
-PLandroid/content/res/Resources$Theme;->resolveAttributes([I[I)Landroid/content/res/TypedArray;
+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
 HSPLandroid/content/res/Resources$ThemeKey;-><init>()V
@@ -8509,10 +3442,8 @@
 HSPLandroid/content/res/Resources;->getAssets()Landroid/content/res/AssetManager;
 HSPLandroid/content/res/Resources;->getAttributeSetSourceResId(Landroid/util/AttributeSet;)I
 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
-HPLandroid/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;
@@ -8523,11 +3454,9 @@
 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;
 HSPLandroid/content/res/Resources;->getDrawableForDensity(IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/res/Resources;->getDrawableInflater()Landroid/graphics/drawable/DrawableInflater;
 HSPLandroid/content/res/Resources;->getFloat(I)F
-HSPLandroid/content/res/Resources;->getFont(I)Landroid/graphics/Typeface;
 HSPLandroid/content/res/Resources;->getFont(Landroid/util/TypedValue;I)Landroid/graphics/Typeface;
 HSPLandroid/content/res/Resources;->getFraction(III)F
 HSPLandroid/content/res/Resources;->getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
@@ -8535,7 +3464,7 @@
 HSPLandroid/content/res/Resources;->getIntArray(I)[I
 HSPLandroid/content/res/Resources;->getInteger(I)I
 HSPLandroid/content/res/Resources;->getLayout(I)Landroid/content/res/XmlResourceParser;
-HPLandroid/content/res/Resources;->getQuantityString(II)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getLoaders()Ljava/util/List;
 HSPLandroid/content/res/Resources;->getQuantityString(II[Ljava/lang/Object;)Ljava/lang/String;
 HSPLandroid/content/res/Resources;->getQuantityText(II)Ljava/lang/CharSequence;
 HSPLandroid/content/res/Resources;->getResourceEntryName(I)Ljava/lang/String;
@@ -8549,11 +3478,10 @@
 HSPLandroid/content/res/Resources;->getStringArray(I)[Ljava/lang/String;
 HSPLandroid/content/res/Resources;->getSystem()Landroid/content/res/Resources;
 HSPLandroid/content/res/Resources;->getText(I)Ljava/lang/CharSequence;
-PLandroid/content/res/Resources;->getText(ILjava/lang/CharSequence;)Ljava/lang/CharSequence;
-HSPLandroid/content/res/Resources;->getTextArray(I)[Ljava/lang/CharSequence;
 HSPLandroid/content/res/Resources;->getValue(ILandroid/util/TypedValue;Z)V
 HSPLandroid/content/res/Resources;->getValueForDensity(IILandroid/util/TypedValue;Z)V
 HSPLandroid/content/res/Resources;->getXml(I)Landroid/content/res/XmlResourceParser;
+HSPLandroid/content/res/Resources;->lambda$newTheme$0(Ljava/lang/ref/WeakReference;)Z
 HSPLandroid/content/res/Resources;->loadColorStateList(Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/Resources;->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;
@@ -8567,11 +3495,11 @@
 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;
-HSPLandroid/content/res/Resources;->parseBundleExtra(Ljava/lang/String;Landroid/util/AttributeSet;Landroid/os/Bundle;)V
-HSPLandroid/content/res/Resources;->preloadFonts(I)V
 HSPLandroid/content/res/Resources;->releaseTempTypedValue(Landroid/util/TypedValue;)V
+HSPLandroid/content/res/Resources;->resourceHasPackage(I)Z
 HSPLandroid/content/res/Resources;->selectDefaultTheme(II)I
 HSPLandroid/content/res/Resources;->selectSystemTheme(IIIIII)I
+HSPLandroid/content/res/Resources;->setCallbacks(Landroid/content/res/Resources$UpdateCallbacks;)V
 HSPLandroid/content/res/Resources;->setImpl(Landroid/content/res/ResourcesImpl;)V
 HSPLandroid/content/res/Resources;->startPreloading()V
 HSPLandroid/content/res/Resources;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;)V
@@ -8583,7 +3511,7 @@
 HSPLandroid/content/res/ResourcesImpl$LookupStack;->pop()V
 HSPLandroid/content/res/ResourcesImpl$LookupStack;->push(I)V
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;-><init>(Landroid/content/res/ResourcesImpl;)V
-PLandroid/content/res/ResourcesImpl$ThemeImpl;->access$000(Landroid/content/res/ResourcesImpl$ThemeImpl;)Landroid/content/res/Resources$ThemeKey;
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->access$000(Landroid/content/res/ResourcesImpl$ThemeImpl;)Landroid/content/res/Resources$ThemeKey;
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->applyStyle(IZ)V
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->finalize()V
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->getChangingConfigurations()I
@@ -8603,7 +3531,7 @@
 HSPLandroid/content/res/ResourcesImpl;->flushLayoutCache()V
 HSPLandroid/content/res/ResourcesImpl;->getAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
 HSPLandroid/content/res/ResourcesImpl;->getAssets()Landroid/content/res/AssetManager;
-HPLandroid/content/res/ResourcesImpl;->getAttributeSetSourceResId(Landroid/util/AttributeSet;)I
+HSPLandroid/content/res/ResourcesImpl;->getAttributeSetSourceResId(Landroid/util/AttributeSet;)I
 HSPLandroid/content/res/ResourcesImpl;->getColorStateListFromInt(Landroid/util/TypedValue;J)Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/ResourcesImpl;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
 HSPLandroid/content/res/ResourcesImpl;->getConfiguration()Landroid/content/res/Configuration;
@@ -8639,11 +3567,15 @@
 HSPLandroid/content/res/ResourcesImpl;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V
 HSPLandroid/content/res/ResourcesImpl;->verifyPreloadConfig(IIILjava/lang/String;)Z
 HSPLandroid/content/res/ResourcesKey;-><init>(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)V
+HSPLandroid/content/res/ResourcesKey;-><init>(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;[Landroid/content/res/loader/ResourcesLoader;)V
 HSPLandroid/content/res/ResourcesKey;->equals(Ljava/lang/Object;)Z
 HSPLandroid/content/res/ResourcesKey;->hasOverrideConfiguration()Z
 HSPLandroid/content/res/ResourcesKey;->hashCode()I
+HSPLandroid/content/res/StringBlock$StyleIDs;->access$000(Landroid/content/res/StringBlock$StyleIDs;)I
+HSPLandroid/content/res/StringBlock$StyleIDs;->access$100(Landroid/content/res/StringBlock$StyleIDs;)I
+HSPLandroid/content/res/StringBlock$StyleIDs;->access$200(Landroid/content/res/StringBlock$StyleIDs;)I
 HSPLandroid/content/res/StringBlock;-><init>(JZ)V
-HPLandroid/content/res/StringBlock;->applyStyles(Ljava/lang/String;[ILandroid/content/res/StringBlock$StyleIDs;)Ljava/lang/CharSequence;
+HSPLandroid/content/res/StringBlock;->applyStyles(Ljava/lang/String;[ILandroid/content/res/StringBlock$StyleIDs;)Ljava/lang/CharSequence;
 HSPLandroid/content/res/StringBlock;->close()V
 HSPLandroid/content/res/StringBlock;->finalize()V
 HSPLandroid/content/res/StringBlock;->get(I)Ljava/lang/CharSequence;
@@ -8654,6 +3586,7 @@
 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;->pruneEntryLocked(Ljava/lang/Object;I)Z
 HSPLandroid/content/res/ThemedResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;)V
 HSPLandroid/content/res/ThemedResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;Z)V
 HSPLandroid/content/res/TypedArray;-><init>(Landroid/content/res/Resources;)V
@@ -8676,10 +3609,8 @@
 HSPLandroid/content/res/TypedArray;->getIndexCount()I
 HSPLandroid/content/res/TypedArray;->getInt(II)I
 HSPLandroid/content/res/TypedArray;->getInteger(II)I
-PLandroid/content/res/TypedArray;->getLayoutDimension(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;->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;
@@ -8703,7 +3634,6 @@
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeBooleanValue(IZ)Z
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeBooleanValue(Ljava/lang/String;Ljava/lang/String;Z)Z
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeCount()I
-HPLandroid/content/res/XmlBlock$Parser;->getAttributeFloatValue(Ljava/lang/String;Ljava/lang/String;F)F
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeIntValue(II)I
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeIntValue(Ljava/lang/String;Ljava/lang/String;I)I
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeName(I)Ljava/lang/String;
@@ -8714,21 +3644,19 @@
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/content/res/XmlBlock$Parser;->getDepth()I
 HSPLandroid/content/res/XmlBlock$Parser;->getEventType()I
-HPLandroid/content/res/XmlBlock$Parser;->getIdAttributeResourceValue(I)I
 HSPLandroid/content/res/XmlBlock$Parser;->getLineNumber()I
 HSPLandroid/content/res/XmlBlock$Parser;->getName()Ljava/lang/String;
 HSPLandroid/content/res/XmlBlock$Parser;->getPooledString(I)Ljava/lang/CharSequence;
 HSPLandroid/content/res/XmlBlock$Parser;->getPositionDescription()Ljava/lang/String;
-HPLandroid/content/res/XmlBlock$Parser;->getSourceResId()I
+HSPLandroid/content/res/XmlBlock$Parser;->getSourceResId()I
 HSPLandroid/content/res/XmlBlock$Parser;->getText()Ljava/lang/String;
 HSPLandroid/content/res/XmlBlock$Parser;->isEmptyElementTag()Z
 HSPLandroid/content/res/XmlBlock$Parser;->next()I
-HSPLandroid/content/res/XmlBlock$Parser;->nextTag()I
 HSPLandroid/content/res/XmlBlock$Parser;->nextText()Ljava/lang/String;
 HSPLandroid/content/res/XmlBlock$Parser;->require(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/res/XmlBlock;-><init>(Landroid/content/res/AssetManager;J)V
 HSPLandroid/content/res/XmlBlock;->access$008(Landroid/content/res/XmlBlock;)I
-HPLandroid/content/res/XmlBlock;->access$100(J)I
+HSPLandroid/content/res/XmlBlock;->access$100(J)I
 HSPLandroid/content/res/XmlBlock;->access$1000(JI)I
 HSPLandroid/content/res/XmlBlock;->access$1100(JLjava/lang/String;Ljava/lang/String;)I
 HSPLandroid/content/res/XmlBlock;->access$1200(JI)I
@@ -8743,14 +3671,7 @@
 HSPLandroid/content/res/XmlBlock;->close()V
 HSPLandroid/content/res/XmlBlock;->decOpenCountLocked()V
 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/rollback/IRollbackManager$Stub;-><init>()V
-PLandroid/content/rollback/IRollbackManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/rollback/IRollbackManager;
-PLandroid/content/rollback/IRollbackManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/content/rollback/IRollbackManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/content/rollback/RollbackManager;-><init>(Landroid/content/Context;Landroid/content/rollback/IRollbackManager;)V
-PLandroid/content/rollback/RollbackManager;->getAvailableRollbacks()Ljava/util/List;
 HSPLandroid/database/AbstractCursor$SelfContentObserver;-><init>(Landroid/database/AbstractCursor;)V
 HSPLandroid/database/AbstractCursor$SelfContentObserver;->onChange(Z)V
 HSPLandroid/database/AbstractCursor;-><init>()V
@@ -8762,27 +3683,19 @@
 HSPLandroid/database/AbstractCursor;->getColumnIndex(Ljava/lang/String;)I
 HSPLandroid/database/AbstractCursor;->getColumnIndexOrThrow(Ljava/lang/String;)I
 HSPLandroid/database/AbstractCursor;->getColumnName(I)Ljava/lang/String;
-HSPLandroid/database/AbstractCursor;->getExtras()Landroid/os/Bundle;
 HSPLandroid/database/AbstractCursor;->getPosition()I
 HSPLandroid/database/AbstractCursor;->getWantsAllOnMoveCalls()Z
 HSPLandroid/database/AbstractCursor;->getWindow()Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractCursor;->isAfterLast()Z
-HSPLandroid/database/AbstractCursor;->isBeforeFirst()Z
 HSPLandroid/database/AbstractCursor;->isClosed()Z
-HPLandroid/database/AbstractCursor;->isFirst()Z
 HSPLandroid/database/AbstractCursor;->isLast()Z
-HPLandroid/database/AbstractCursor;->move(I)Z
 HSPLandroid/database/AbstractCursor;->moveToFirst()Z
-HSPLandroid/database/AbstractCursor;->moveToLast()Z
 HSPLandroid/database/AbstractCursor;->moveToNext()Z
 HSPLandroid/database/AbstractCursor;->moveToPosition(I)Z
-HPLandroid/database/AbstractCursor;->moveToPrevious()Z
 HSPLandroid/database/AbstractCursor;->onChange(Z)V
 HSPLandroid/database/AbstractCursor;->onDeactivateOrClose()V
 HSPLandroid/database/AbstractCursor;->onMove(II)Z
 HSPLandroid/database/AbstractCursor;->registerContentObserver(Landroid/database/ContentObserver;)V
-PLandroid/database/AbstractCursor;->registerDataSetObserver(Landroid/database/DataSetObserver;)V
-HSPLandroid/database/AbstractCursor;->setExtras(Landroid/os/Bundle;)V
 HSPLandroid/database/AbstractCursor;->setNotificationUri(Landroid/content/ContentResolver;Landroid/net/Uri;)V
 HSPLandroid/database/AbstractCursor;->setNotificationUris(Landroid/content/ContentResolver;Ljava/util/List;)V
 HSPLandroid/database/AbstractCursor;->setNotificationUris(Landroid/content/ContentResolver;Ljava/util/List;IZ)V
@@ -8791,17 +3704,13 @@
 HSPLandroid/database/AbstractWindowedCursor;->checkPosition()V
 HSPLandroid/database/AbstractWindowedCursor;->clearOrCreateWindow(Ljava/lang/String;)V
 HSPLandroid/database/AbstractWindowedCursor;->closeWindow()V
-HSPLandroid/database/AbstractWindowedCursor;->copyStringToBuffer(ILandroid/database/CharArrayBuffer;)V
 HSPLandroid/database/AbstractWindowedCursor;->getBlob(I)[B
 HSPLandroid/database/AbstractWindowedCursor;->getDouble(I)D
-HSPLandroid/database/AbstractWindowedCursor;->getFloat(I)F
 HSPLandroid/database/AbstractWindowedCursor;->getInt(I)I
 HSPLandroid/database/AbstractWindowedCursor;->getLong(I)J
-HSPLandroid/database/AbstractWindowedCursor;->getShort(I)S
 HSPLandroid/database/AbstractWindowedCursor;->getString(I)Ljava/lang/String;
 HSPLandroid/database/AbstractWindowedCursor;->getType(I)I
 HSPLandroid/database/AbstractWindowedCursor;->getWindow()Landroid/database/CursorWindow;
-HPLandroid/database/AbstractWindowedCursor;->hasWindow()Z
 HSPLandroid/database/AbstractWindowedCursor;->isNull(I)Z
 HSPLandroid/database/AbstractWindowedCursor;->onDeactivateOrClose()V
 HSPLandroid/database/AbstractWindowedCursor;->setWindow(Landroid/database/CursorWindow;)V
@@ -8826,31 +3735,27 @@
 HSPLandroid/database/BulkCursorToCursorAdaptor;->initialize(Landroid/database/BulkCursorDescriptor;)V
 HSPLandroid/database/BulkCursorToCursorAdaptor;->onMove(II)Z
 HSPLandroid/database/BulkCursorToCursorAdaptor;->throwIfCursorIsClosed()V
-HSPLandroid/database/CharArrayBuffer;-><init>(I)V
 HSPLandroid/database/ContentObservable;-><init>()V
 HSPLandroid/database/ContentObservable;->dispatchChange(ZLandroid/net/Uri;)V
 HSPLandroid/database/ContentObservable;->registerObserver(Landroid/database/ContentObserver;)V
-PLandroid/database/ContentObserver$NotificationRunnable;-><init>(Landroid/database/ContentObserver;ZLandroid/net/Uri;I)V
+HSPLandroid/database/ContentObserver$NotificationRunnable;-><init>(Landroid/database/ContentObserver;ZLandroid/net/Uri;I)V
 HSPLandroid/database/ContentObserver$NotificationRunnable;->run()V
 HSPLandroid/database/ContentObserver$Transport;-><init>(Landroid/database/ContentObserver;)V
 HSPLandroid/database/ContentObserver$Transport;->onChange(ZLandroid/net/Uri;I)V
 HSPLandroid/database/ContentObserver$Transport;->releaseContentObserver()V
 HSPLandroid/database/ContentObserver;-><init>(Landroid/os/Handler;)V
-PLandroid/database/ContentObserver;->access$000(Landroid/database/ContentObserver;ZLandroid/net/Uri;I)V
-HPLandroid/database/ContentObserver;->dispatchChange(ZLandroid/net/Uri;)V
-PLandroid/database/ContentObserver;->dispatchChange(ZLandroid/net/Uri;I)V
+HSPLandroid/database/ContentObserver;->access$000(Landroid/database/ContentObserver;ZLandroid/net/Uri;I)V
+HSPLandroid/database/ContentObserver;->dispatchChange(ZLandroid/net/Uri;)V
+HSPLandroid/database/ContentObserver;->dispatchChange(ZLandroid/net/Uri;I)V
 HSPLandroid/database/ContentObserver;->getContentObserver()Landroid/database/IContentObserver;
-PLandroid/database/ContentObserver;->onChange(Z)V
+HSPLandroid/database/ContentObserver;->onChange(Z)V
 HSPLandroid/database/ContentObserver;->onChange(ZLandroid/net/Uri;)V
 HSPLandroid/database/ContentObserver;->onChange(ZLandroid/net/Uri;I)V
 HSPLandroid/database/ContentObserver;->releaseContentObserver()Landroid/database/IContentObserver;
 HSPLandroid/database/CrossProcessCursorWrapper;-><init>(Landroid/database/Cursor;)V
-HSPLandroid/database/CrossProcessCursorWrapper;->getWindow()Landroid/database/CursorWindow;
 HSPLandroid/database/CursorToBulkCursorAdaptor$ContentObserverProxy;-><init>(Landroid/database/IContentObserver;Landroid/os/IBinder$DeathRecipient;)V
-HSPLandroid/database/CursorToBulkCursorAdaptor$ContentObserverProxy;->onChange(ZLandroid/net/Uri;)V
 HSPLandroid/database/CursorToBulkCursorAdaptor$ContentObserverProxy;->unlinkToDeath(Landroid/os/IBinder$DeathRecipient;)Z
 HSPLandroid/database/CursorToBulkCursorAdaptor;-><init>(Landroid/database/Cursor;Landroid/database/IContentObserver;Ljava/lang/String;)V
-PLandroid/database/CursorToBulkCursorAdaptor;->binderDied()V
 HSPLandroid/database/CursorToBulkCursorAdaptor;->close()V
 HSPLandroid/database/CursorToBulkCursorAdaptor;->closeFilledWindowLocked()V
 HSPLandroid/database/CursorToBulkCursorAdaptor;->createAndRegisterObserverProxyLocked(Landroid/database/IContentObserver;)V
@@ -8867,28 +3772,21 @@
 HSPLandroid/database/CursorWindow;-><init>(Landroid/os/Parcel;Landroid/database/CursorWindow$1;)V
 HSPLandroid/database/CursorWindow;-><init>(Ljava/lang/String;)V
 HSPLandroid/database/CursorWindow;-><init>(Ljava/lang/String;J)V
-PLandroid/database/CursorWindow;-><init>(Z)V
 HSPLandroid/database/CursorWindow;->allocRow()Z
 HSPLandroid/database/CursorWindow;->clear()V
-HSPLandroid/database/CursorWindow;->copyStringToBuffer(IILandroid/database/CharArrayBuffer;)V
 HSPLandroid/database/CursorWindow;->dispose()V
 HSPLandroid/database/CursorWindow;->finalize()V
 HSPLandroid/database/CursorWindow;->getBlob(II)[B
 HSPLandroid/database/CursorWindow;->getCursorWindowSize()I
 HSPLandroid/database/CursorWindow;->getDouble(II)D
-HSPLandroid/database/CursorWindow;->getFloat(II)F
 HSPLandroid/database/CursorWindow;->getInt(II)I
 HSPLandroid/database/CursorWindow;->getLong(II)J
 HSPLandroid/database/CursorWindow;->getNumRows()I
-HSPLandroid/database/CursorWindow;->getShort(II)S
 HSPLandroid/database/CursorWindow;->getStartPosition()I
 HSPLandroid/database/CursorWindow;->getString(II)Ljava/lang/String;
 HSPLandroid/database/CursorWindow;->getType(II)I
-HSPLandroid/database/CursorWindow;->isNull(II)Z
-HSLandroid/database/CursorWindow;->newFromParcel(Landroid/os/Parcel;)Landroid/database/CursorWindow;
+HSPLandroid/database/CursorWindow;->newFromParcel(Landroid/os/Parcel;)Landroid/database/CursorWindow;
 HSPLandroid/database/CursorWindow;->onAllReferencesReleased()V
-HSPLandroid/database/CursorWindow;->putBlob([BII)Z
-PLandroid/database/CursorWindow;->putDouble(DII)Z
 HSPLandroid/database/CursorWindow;->putLong(JII)Z
 HSPLandroid/database/CursorWindow;->putNull(II)Z
 HSPLandroid/database/CursorWindow;->putString(Ljava/lang/String;II)Z
@@ -8899,55 +3797,27 @@
 HSPLandroid/database/CursorWindow;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/database/CursorWrapper;-><init>(Landroid/database/Cursor;)V
 HSPLandroid/database/CursorWrapper;->close()V
-HSPLandroid/database/CursorWrapper;->copyStringToBuffer(ILandroid/database/CharArrayBuffer;)V
 HSPLandroid/database/CursorWrapper;->getBlob(I)[B
 HSPLandroid/database/CursorWrapper;->getColumnCount()I
 HSPLandroid/database/CursorWrapper;->getColumnIndex(Ljava/lang/String;)I
 HSPLandroid/database/CursorWrapper;->getColumnIndexOrThrow(Ljava/lang/String;)I
-HPLandroid/database/CursorWrapper;->getColumnName(I)Ljava/lang/String;
-HSPLandroid/database/CursorWrapper;->getColumnNames()[Ljava/lang/String;
 HSPLandroid/database/CursorWrapper;->getCount()I
-HSPLandroid/database/CursorWrapper;->getDouble(I)D
-HSPLandroid/database/CursorWrapper;->getExtras()Landroid/os/Bundle;
-HSPLandroid/database/CursorWrapper;->getFloat(I)F
 HSPLandroid/database/CursorWrapper;->getInt(I)I
 HSPLandroid/database/CursorWrapper;->getLong(I)J
-HSPLandroid/database/CursorWrapper;->getPosition()I
 HSPLandroid/database/CursorWrapper;->getString(I)Ljava/lang/String;
-HSPLandroid/database/CursorWrapper;->getType(I)I
-HSPLandroid/database/CursorWrapper;->getWantsAllOnMoveCalls()Z
 HSPLandroid/database/CursorWrapper;->getWrappedCursor()Landroid/database/Cursor;
 HSPLandroid/database/CursorWrapper;->isAfterLast()Z
-PLandroid/database/CursorWrapper;->isClosed()Z
-HPLandroid/database/CursorWrapper;->isFirst()Z
-HSPLandroid/database/CursorWrapper;->isLast()Z
 HSPLandroid/database/CursorWrapper;->isNull(I)Z
 HSPLandroid/database/CursorWrapper;->moveToFirst()Z
-HSPLandroid/database/CursorWrapper;->moveToLast()Z
 HSPLandroid/database/CursorWrapper;->moveToNext()Z
 HSPLandroid/database/CursorWrapper;->moveToPosition(I)Z
-HPLandroid/database/CursorWrapper;->moveToPrevious()Z
 HSPLandroid/database/CursorWrapper;->registerContentObserver(Landroid/database/ContentObserver;)V
-HPLandroid/database/CursorWrapper;->registerDataSetObserver(Landroid/database/DataSetObserver;)V
-HSPLandroid/database/CursorWrapper;->setNotificationUri(Landroid/content/ContentResolver;Landroid/net/Uri;)V
-HSPLandroid/database/CursorWrapper;->unregisterContentObserver(Landroid/database/ContentObserver;)V
 HSPLandroid/database/DataSetObservable;-><init>()V
 HSPLandroid/database/DataSetObservable;->notifyChanged()V
 HSPLandroid/database/DataSetObservable;->notifyInvalidated()V
 HSPLandroid/database/DataSetObserver;-><init>()V
 HSPLandroid/database/DatabaseUtils;->appendEscapedSQLString(Ljava/lang/StringBuilder;Ljava/lang/String;)V
-HSPLandroid/database/DatabaseUtils;->appendSelectionArgs([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
-HSPLandroid/database/DatabaseUtils;->appendValueToSql(Ljava/lang/StringBuilder;Ljava/lang/Object;)V
-HSPLandroid/database/DatabaseUtils;->bindObjectToProgram(Landroid/database/sqlite/SQLiteProgram;ILjava/lang/Object;)V
-HSPLandroid/database/DatabaseUtils;->concatenateWhere(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/DatabaseUtils;->cursorFillWindow(Landroid/database/Cursor;ILandroid/database/CursorWindow;)V
-HSPLandroid/database/DatabaseUtils;->cursorIntToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V
-HSPLandroid/database/DatabaseUtils;->cursorLongToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V
-HSPLandroid/database/DatabaseUtils;->cursorRowToContentValues(Landroid/database/Cursor;Landroid/content/ContentValues;)V
-HSPLandroid/database/DatabaseUtils;->cursorStringToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V
-HSPLandroid/database/DatabaseUtils;->dumpCurrentRow(Landroid/database/Cursor;Ljava/lang/StringBuilder;)V
-HSPLandroid/database/DatabaseUtils;->dumpCursor(Landroid/database/Cursor;Ljava/lang/StringBuilder;)V
-HSPLandroid/database/DatabaseUtils;->dumpCursorToString(Landroid/database/Cursor;)Ljava/lang/String;
 HSPLandroid/database/DatabaseUtils;->getSqlStatementType(Ljava/lang/String;)I
 HSPLandroid/database/DatabaseUtils;->getTypeOfObject(Ljava/lang/Object;)I
 HSPLandroid/database/DatabaseUtils;->longForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)J
@@ -8955,12 +3825,8 @@
 HSPLandroid/database/DatabaseUtils;->queryNumEntries(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;)J
 HSPLandroid/database/DatabaseUtils;->queryNumEntries(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)J
 HSPLandroid/database/DatabaseUtils;->readExceptionFromParcel(Landroid/os/Parcel;)V
-HSPLandroid/database/DatabaseUtils;->readExceptionFromParcel(Landroid/os/Parcel;Ljava/lang/String;I)V
 HSPLandroid/database/DatabaseUtils;->readExceptionWithFileNotFoundExceptionFromParcel(Landroid/os/Parcel;)V
-PLandroid/database/DatabaseUtils;->readExceptionWithOperationApplicationExceptionFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/database/DatabaseUtils;->sqlEscapeString(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/database/DatabaseUtils;->stringForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/database/DatabaseUtils;->writeExceptionToParcel(Landroid/os/Parcel;Ljava/lang/Exception;)V
 HSPLandroid/database/DefaultDatabaseErrorHandler;-><init>()V
 HSPLandroid/database/IContentObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/database/IContentObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
@@ -8969,50 +3835,29 @@
 HSPLandroid/database/IContentObserver$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/database/IContentObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/database/IContentObserver;
 HSPLandroid/database/IContentObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/database/MatrixCursor$RowBuilder;-><init>(Landroid/database/MatrixCursor;I)V
+HSPLandroid/database/MatrixCursor$RowBuilder;-><init>(Landroid/database/MatrixCursor;I)V
 HSPLandroid/database/MatrixCursor$RowBuilder;->add(Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;
-HPLandroid/database/MatrixCursor$RowBuilder;->add(Ljava/lang/String;Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;
 HSPLandroid/database/MatrixCursor;-><init>([Ljava/lang/String;)V
 HSPLandroid/database/MatrixCursor;-><init>([Ljava/lang/String;I)V
-PLandroid/database/MatrixCursor;->access$000(Landroid/database/MatrixCursor;)I
+HSPLandroid/database/MatrixCursor;->access$000(Landroid/database/MatrixCursor;)I
 HSPLandroid/database/MatrixCursor;->access$100(Landroid/database/MatrixCursor;)[Ljava/lang/Object;
-HPLandroid/database/MatrixCursor;->access$200(Landroid/database/MatrixCursor;)[Ljava/lang/String;
-HPLandroid/database/MatrixCursor;->addRow(Ljava/lang/Iterable;)V
-HPLandroid/database/MatrixCursor;->addRow(Ljava/util/ArrayList;I)V
 HSPLandroid/database/MatrixCursor;->addRow([Ljava/lang/Object;)V
 HSPLandroid/database/MatrixCursor;->ensureCapacity(I)V
 HSPLandroid/database/MatrixCursor;->get(I)Ljava/lang/Object;
-HSPLandroid/database/MatrixCursor;->getBlob(I)[B
 HSPLandroid/database/MatrixCursor;->getColumnNames()[Ljava/lang/String;
 HSPLandroid/database/MatrixCursor;->getCount()I
-HSPLandroid/database/MatrixCursor;->getDouble(I)D
 HSPLandroid/database/MatrixCursor;->getInt(I)I
 HSPLandroid/database/MatrixCursor;->getLong(I)J
 HSPLandroid/database/MatrixCursor;->getString(I)Ljava/lang/String;
 HSPLandroid/database/MatrixCursor;->getType(I)I
 HSPLandroid/database/MatrixCursor;->newRow()Landroid/database/MatrixCursor$RowBuilder;
-HPLandroid/database/MergeCursor$1;-><init>(Landroid/database/MergeCursor;)V
-HPLandroid/database/MergeCursor$1;->onInvalidated()V
-HPLandroid/database/MergeCursor;-><init>([Landroid/database/Cursor;)V
-HPLandroid/database/MergeCursor;->close()V
-HPLandroid/database/MergeCursor;->getBlob(I)[B
-HPLandroid/database/MergeCursor;->getColumnNames()[Ljava/lang/String;
-HPLandroid/database/MergeCursor;->getCount()I
-HPLandroid/database/MergeCursor;->getInt(I)I
-HPLandroid/database/MergeCursor;->getLong(I)J
-HPLandroid/database/MergeCursor;->getString(I)Ljava/lang/String;
-HPLandroid/database/MergeCursor;->onMove(II)Z
 HSPLandroid/database/Observable;-><init>()V
 HSPLandroid/database/Observable;->registerObserver(Ljava/lang/Object;)V
 HSPLandroid/database/Observable;->unregisterAll()V
 HSPLandroid/database/Observable;->unregisterObserver(Ljava/lang/Object;)V
-HSPLandroid/database/SQLException;-><init>()V
 HSPLandroid/database/SQLException;-><init>(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/-$$Lambda$RBWjWVyGrOTsQrLCYzJ_G8Uk25Q;-><init>(Landroid/database/sqlite/SQLiteDatabase;)V
 HSPLandroid/database/sqlite/-$$Lambda$RBWjWVyGrOTsQrLCYzJ_G8Uk25Q;->get()Ljava/lang/Object;
-PLandroid/database/sqlite/-$$Lambda$SQLiteDatabase$1FsSJH2q7x3eeDFXCAu9l4piDsE;-><clinit>()V
-PLandroid/database/sqlite/-$$Lambda$SQLiteDatabase$1FsSJH2q7x3eeDFXCAu9l4piDsE;-><init>()V
-PLandroid/database/sqlite/-$$Lambda$SQLiteDatabase$1FsSJH2q7x3eeDFXCAu9l4piDsE;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/database/sqlite/DatabaseObjectNotClosedException;-><init>()V
 HSPLandroid/database/sqlite/SQLiteClosable;-><init>()V
 HSPLandroid/database/sqlite/SQLiteClosable;->acquireReference()V
@@ -9022,14 +3867,10 @@
 HSPLandroid/database/sqlite/SQLiteCompatibilityWalFlags;->init(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteCompatibilityWalFlags;->initIfNeeded()V
 HSPLandroid/database/sqlite/SQLiteCompatibilityWalFlags;->isLegacyCompatibilityWalEnabled()Z
-HSPLandroid/database/sqlite/SQLiteCompatibilityWalFlags;->reset()V
 HSPLandroid/database/sqlite/SQLiteConnection$Operation;-><init>()V
 HSPLandroid/database/sqlite/SQLiteConnection$Operation;-><init>(Landroid/database/sqlite/SQLiteConnection$1;)V
-HPLandroid/database/sqlite/SQLiteConnection$Operation;->describe(Ljava/lang/StringBuilder;Z)V
-PLandroid/database/sqlite/SQLiteConnection$Operation;->getStatus()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;-><init>(Landroid/database/sqlite/SQLiteConnectionPool;)V
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->beginOperation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I
-HPLandroid/database/sqlite/SQLiteConnection$OperationLog;->dump(Landroid/util/Printer;)V
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->endOperation(I)V
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLog(I)Z
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLogLocked(I)Z
@@ -9045,7 +3886,7 @@
 HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatementCache;->entryRemoved(ZLjava/lang/String;Landroid/database/sqlite/SQLiteConnection$PreparedStatement;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;->access$100(Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
-PLandroid/database/sqlite/SQLiteConnection;->access$200(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteConnection;->access$400()[B
 HSPLandroid/database/sqlite/SQLiteConnection;->acquirePreparedStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteConnection$PreparedStatement;
 HSPLandroid/database/sqlite/SQLiteConnection;->applyBlockGuardPolicy(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
 HSPLandroid/database/sqlite/SQLiteConnection;->attachCancellationSignal(Landroid/os/CancellationSignal;)V
@@ -9053,11 +3894,8 @@
 HSPLandroid/database/sqlite/SQLiteConnection;->canonicalizeSyncMode(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteConnection;->checkDatabaseWiped()V
 HSPLandroid/database/sqlite/SQLiteConnection;->close()V
-PLandroid/database/sqlite/SQLiteConnection;->collectDbStats(Ljava/util/ArrayList;)V
 HSPLandroid/database/sqlite/SQLiteConnection;->detachCancellationSignal(Landroid/os/CancellationSignal;)V
 HSPLandroid/database/sqlite/SQLiteConnection;->dispose(Z)V
-PLandroid/database/sqlite/SQLiteConnection;->dump(Landroid/util/Printer;Z)V
-PLandroid/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
 HSPLandroid/database/sqlite/SQLiteConnection;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Landroid/database/CursorWindow;IIZLandroid/os/CancellationSignal;)I
@@ -9067,8 +3905,8 @@
 HSPLandroid/database/sqlite/SQLiteConnection;->finalize()V
 HSPLandroid/database/sqlite/SQLiteConnection;->finalizePreparedStatement(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
 HSPLandroid/database/sqlite/SQLiteConnection;->getConnectionId()I
-PLandroid/database/sqlite/SQLiteConnection;->getMainDbStatsUnsafe(IJJ)Landroid/database/sqlite/SQLiteDebug$DbStats;
 HSPLandroid/database/sqlite/SQLiteConnection;->isCacheable(I)Z
+HSPLandroid/database/sqlite/SQLiteConnection;->isPreparedStatementInCache(Ljava/lang/String;)Z
 HSPLandroid/database/sqlite/SQLiteConnection;->isPrimaryConnection()Z
 HSPLandroid/database/sqlite/SQLiteConnection;->maybeTruncateWalFile()V
 HSPLandroid/database/sqlite/SQLiteConnection;->obtainPreparedStatement(Ljava/lang/String;JIIZ)Landroid/database/sqlite/SQLiteConnection$PreparedStatement;
@@ -9079,6 +3917,7 @@
 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;->setAutoCheckpointInterval()V
+HSPLandroid/database/sqlite/SQLiteConnection;->setCustomFunctionsFromConfiguration()V
 HSPLandroid/database/sqlite/SQLiteConnection;->setForeignKeyModeFromConfiguration()V
 HSPLandroid/database/sqlite/SQLiteConnection;->setJournalMode(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteConnection;->setJournalSizeLimit()V
@@ -9088,39 +3927,33 @@
 HSPLandroid/database/sqlite/SQLiteConnection;->setSyncMode(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteConnection;->setWalModeFromConfiguration()V
 HSPLandroid/database/sqlite/SQLiteConnection;->throwIfStatementForbidden(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
-PLandroid/database/sqlite/SQLiteConnection;->trimSqlForDisplay(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;-><init>()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;-><init>(Landroid/database/sqlite/SQLiteConnectionPool$1;)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;-><init>(Landroid/database/sqlite/SQLiteConnectionPool;Landroid/os/Looper;J)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;->connectionAcquired(Landroid/database/sqlite/SQLiteConnection;)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;->connectionClosed(Landroid/database/sqlite/SQLiteConnection;)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;->connectionReleased(Landroid/database/sqlite/SQLiteConnection;)V
-PLandroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;-><init>(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V
-PLandroid/database/sqlite/SQLiteConnectionPool;->access$000(Landroid/database/sqlite/SQLiteConnectionPool;)Ljava/lang/Object;
-PLandroid/database/sqlite/SQLiteConnectionPool;->access$300(Landroid/database/sqlite/SQLiteConnectionPool;)Landroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;
-PLandroid/database/sqlite/SQLiteConnectionPool;->access$400(Landroid/database/sqlite/SQLiteConnectionPool;I)Z
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->access$000(Landroid/database/sqlite/SQLiteConnectionPool;)Ljava/lang/Object;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->access$300(Landroid/database/sqlite/SQLiteConnectionPool;)Landroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->access$400(Landroid/database/sqlite/SQLiteConnectionPool;I)Z
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->acquireConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)Landroid/database/sqlite/SQLiteConnection;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->close()V
-HPLandroid/database/sqlite/SQLiteConnectionPool;->closeAvailableConnectionLocked(I)Z
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->closeAvailableConnectionLocked(I)Z
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->closeAvailableConnectionsAndLogExceptionsLocked()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->closeAvailableNonPrimaryConnectionsAndLogExceptions()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->closeAvailableNonPrimaryConnectionsAndLogExceptionsLocked()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->closeConnectionAndLogExceptionsLocked(Landroid/database/sqlite/SQLiteConnection;)V
-HSLandroid/database/sqlite/SQLiteConnectionPool;->closeExcessConnectionsAndLogExceptionsLocked()V
-PLandroid/database/sqlite/SQLiteConnectionPool;->collectDbStats(Ljava/util/ArrayList;)V
-HSPLandroid/database/sqlite/SQLiteConnectionPool;->disableIdleConnectionHandler()V
-HSLandroid/database/sqlite/SQLiteConnectionPool;->discardAcquiredConnectionsLocked()V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->closeExcessConnectionsAndLogExceptionsLocked()V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->discardAcquiredConnectionsLocked()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->dispose(Z)V
-PLandroid/database/sqlite/SQLiteConnectionPool;->dump(Landroid/util/Printer;ZLandroid/util/ArraySet;)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->finalize()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->finishAcquireConnectionLocked(Landroid/database/sqlite/SQLiteConnection;I)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->getPath()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->getPriority(I)I
-HPLandroid/database/sqlite/SQLiteConnectionPool;->isSessionBlockingImportantConnectionWaitersLocked(ZI)Z
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->markAcquiredConnectionsLocked(Landroid/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->obtainConnectionWaiterLocked(Ljava/lang/Thread;JIZLjava/lang/String;I)Landroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;
-HPLandroid/database/sqlite/SQLiteConnectionPool;->onConnectionLeaked()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->onStatementExecuted(J)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->open()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->open(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)Landroid/database/sqlite/SQLiteConnectionPool;
@@ -9128,17 +3961,15 @@
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->reconfigure(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->reconfigureAllConnectionsLocked()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->recycleConnectionLocked(Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;)Z
-HPLandroid/database/sqlite/SQLiteConnectionPool;->recycleConnectionWaiterLocked(Landroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;)V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->recycleConnectionWaiterLocked(Landroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->releaseConnection(Landroid/database/sqlite/SQLiteConnection;)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->setMaxConnectionPoolSizeLocked()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->setupIdleConnectionHandler(Landroid/os/Looper;J)V
-HPLandroid/database/sqlite/SQLiteConnectionPool;->shouldYieldConnection(Landroid/database/sqlite/SQLiteConnection;I)Z
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->throwIfClosedLocked()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Landroid/database/sqlite/SQLiteConnection;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->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
 HSPLandroid/database/sqlite/SQLiteCursor;->close()V
 HSPLandroid/database/sqlite/SQLiteCursor;->fillWindow(I)V
@@ -9148,11 +3979,8 @@
 HSPLandroid/database/sqlite/SQLiteCursor;->getCount()I
 HSPLandroid/database/sqlite/SQLiteCursor;->getDatabase()Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteCursor;->onMove(II)Z
-PLandroid/database/sqlite/SQLiteCursor;->setWindow(Landroid/database/CursorWindow;)V
-HSLandroid/database/sqlite/SQLiteDatabase$1;-><init>(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteDatabase$1;->accept(Ljava/io/File;)Z
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;-><init>()V
-HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;-><init>(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)V
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;->addOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;->build()Landroid/database/sqlite/SQLiteDatabase$OpenParams;
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;->isWriteAheadLoggingEnabled()Z
@@ -9171,24 +3999,16 @@
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;->access$500(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)J
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;->access$600(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;->access$700(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Ljava/lang/String;
-HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;->toBuilder()Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;
 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
 HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransactionNonExclusive()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransactionWithListener(Landroid/database/sqlite/SQLiteTransactionListener;)V
-HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransactionWithListenerNonExclusive(Landroid/database/sqlite/SQLiteTransactionListener;)V
-PLandroid/database/sqlite/SQLiteDatabase;->collectDbStats(Ljava/util/ArrayList;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteStatement;
 HSPLandroid/database/sqlite/SQLiteDatabase;->createSession()Landroid/database/sqlite/SQLiteSession;
 HSPLandroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I
-HSLandroid/database/sqlite/SQLiteDatabase;->deleteDatabase(Ljava/io/File;)Z
-HSPLandroid/database/sqlite/SQLiteDatabase;->deleteDatabase(Ljava/io/File;Z)Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->disableWriteAheadLogging()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->dispose(Z)V
-PLandroid/database/sqlite/SQLiteDatabase;->dump(Landroid/util/Printer;ZZLandroid/util/ArraySet;)V
-PLandroid/database/sqlite/SQLiteDatabase;->dumpAll(Landroid/util/Printer;ZZ)V
-PLandroid/database/sqlite/SQLiteDatabase;->dumpDatabaseDirectory(Landroid/util/Printer;Ljava/io/File;Z)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->enableWriteAheadLogging()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->endTransaction()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->execSQL(Ljava/lang/String;)V
@@ -9196,14 +4016,9 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->executeSql(Ljava/lang/String;[Ljava/lang/Object;)I
 HSPLandroid/database/sqlite/SQLiteDatabase;->finalize()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->findEditTable(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/database/sqlite/SQLiteDatabase;->getActiveDatabases()Ljava/util/ArrayList;
-HSPLandroid/database/sqlite/SQLiteDatabase;->getAttachedDbs()Ljava/util/List;
-PLandroid/database/sqlite/SQLiteDatabase;->getDbStats()Ljava/util/ArrayList;
-PLandroid/database/sqlite/SQLiteDatabase;->getFileTimestamps(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/database/sqlite/SQLiteDatabase;->getMaximumSize()J
-HSPLandroid/database/sqlite/SQLiteDatabase;->getPageSize()J
+HSPLandroid/database/sqlite/SQLiteDatabase;->getActiveDatabases()Ljava/util/ArrayList;
+HSPLandroid/database/sqlite/SQLiteDatabase;->getDbStats()Ljava/util/ArrayList;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getPath()Ljava/lang/String;
-HSPLandroid/database/sqlite/SQLiteDatabase;->getSyncedTables()Ljava/util/Map;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getThreadDefaultConnectionFlags(Z)I
 HSPLandroid/database/sqlite/SQLiteDatabase;->getThreadSession()Landroid/database/sqlite/SQLiteSession;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getVersion()I
@@ -9211,70 +4026,47 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->insert(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
 HSPLandroid/database/sqlite/SQLiteDatabase;->insertOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
 HSPLandroid/database/sqlite/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J
-HSPLandroid/database/sqlite/SQLiteDatabase;->isDatabaseIntegrityOk()Z
-HSPLandroid/database/sqlite/SQLiteDatabase;->isDbLockedByCurrentThread()Z
-HPLandroid/database/sqlite/SQLiteDatabase;->isDbLockedByOtherThreads()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isMainThread()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isOpen()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isReadOnly()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isReadOnlyLocked()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isWriteAheadLoggingEnabled()Z
-HPLandroid/database/sqlite/SQLiteDatabase;->lambda$dumpDatabaseDirectory$0(Ljava/io/File;Ljava/io/File;)I
-HSPLandroid/database/sqlite/SQLiteDatabase;->markTableSyncable(Ljava/lang/String;Ljava/lang/String;)V
 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;
-HSPLandroid/database/sqlite/SQLiteDatabase;->openDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase;->openDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ILandroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase;->openDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase;->openInner()V
-HSPLandroid/database/sqlite/SQLiteDatabase;->openOrCreateDatabase(Ljava/io/File;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;
-HSPLandroid/database/sqlite/SQLiteDatabase;->openOrCreateDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;
 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;)Landroid/database/Cursor;
 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;->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/os/CancellationSignal;)Landroid/database/Cursor;
-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;->setMaxSqlCacheSize(I)V
-HSPLandroid/database/sqlite/SQLiteDatabase;->setMaximumSize(J)J
-HSPLandroid/database/sqlite/SQLiteDatabase;->setPageSize(J)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->setTransactionSuccessful()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->setVersion(I)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V
-HSPLandroid/database/sqlite/SQLiteDatabase;->toString()Ljava/lang/String;
 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
 HSPLandroid/database/sqlite/SQLiteDatabase;->validateSql(Ljava/lang/String;Landroid/os/CancellationSignal;)V
-HPLandroid/database/sqlite/SQLiteDatabase;->yieldIfContendedHelper(ZJ)Z
-HPLandroid/database/sqlite/SQLiteDatabase;->yieldIfContendedSafely(J)Z
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;-><init>(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;-><init>(Ljava/lang/String;I)V
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->isInMemoryDb()Z
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->isLegacyCompatibilityWalEnabled()Z
-PLandroid/database/sqlite/SQLiteDatabaseConfiguration;->isLookasideConfigSet()Z
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->stripPathForLogs(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->updateParametersFrom(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V
-PLandroid/database/sqlite/SQLiteDatabaseLockedException;-><init>(Ljava/lang/String;)V
-PLandroid/database/sqlite/SQLiteDebug$DbStats;-><init>(Ljava/lang/String;JJIIII)V
 HSPLandroid/database/sqlite/SQLiteDebug$NoPreloadHolder;-><clinit>()V
 HSPLandroid/database/sqlite/SQLiteDebug$NoPreloadHolder;->access$000()Ljava/lang/String;
-PLandroid/database/sqlite/SQLiteDebug$PagerStats;-><init>()V
-PLandroid/database/sqlite/SQLiteDebug;->dump(Landroid/util/Printer;[Ljava/lang/String;Z)V
-PLandroid/database/sqlite/SQLiteDebug;->getDatabaseInfo()Landroid/database/sqlite/SQLiteDebug$PagerStats;
+HSPLandroid/database/sqlite/SQLiteDebug$PagerStats;-><init>()V
+HSPLandroid/database/sqlite/SQLiteDebug;->getDatabaseInfo()Landroid/database/sqlite/SQLiteDebug$PagerStats;
 HSPLandroid/database/sqlite/SQLiteDebug;->shouldLogSlowQuery(J)Z
 HSPLandroid/database/sqlite/SQLiteDirectCursorDriver;-><init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)V
 HSPLandroid/database/sqlite/SQLiteDirectCursorDriver;->cursorClosed()V
 HSPLandroid/database/sqlite/SQLiteDirectCursorDriver;->query(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;[Ljava/lang/String;)Landroid/database/Cursor;
-HSPLandroid/database/sqlite/SQLiteDoneException;-><init>()V
-HSPLandroid/database/sqlite/SQLiteException;-><init>()V
 HSPLandroid/database/sqlite/SQLiteException;-><init>(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteGlobal;->checkDbWipe()Z
 HSPLandroid/database/sqlite/SQLiteGlobal;->getDefaultJournalMode()Ljava/lang/String;
@@ -9286,7 +4078,6 @@
 HSPLandroid/database/sqlite/SQLiteGlobal;->getWALSyncMode()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteGlobal;->getWALTruncateSize()J
 HSPLandroid/database/sqlite/SQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;IILandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;)V
-HSPLandroid/database/sqlite/SQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$OpenParams;)V
 HSPLandroid/database/sqlite/SQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)V
 HSPLandroid/database/sqlite/SQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;IILandroid/database/DatabaseErrorHandler;)V
 HSPLandroid/database/sqlite/SQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ILandroid/database/DatabaseErrorHandler;)V
@@ -9299,14 +4090,12 @@
 HSPLandroid/database/sqlite/SQLiteOpenHelper;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V
 HSPLandroid/database/sqlite/SQLiteOpenHelper;->setFilePermissionsForDb(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteOpenHelper;->setIdleConnectionTimeout(J)V
-HSPLandroid/database/sqlite/SQLiteOpenHelper;->setOpenParams(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)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;->bind(ILjava/lang/Object;)V
 HSPLandroid/database/sqlite/SQLiteProgram;->bindAllArgsAsStrings([Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteProgram;->bindBlob(I[B)V
-HPLandroid/database/sqlite/SQLiteProgram;->bindDouble(ID)V
 HSPLandroid/database/sqlite/SQLiteProgram;->bindLong(IJ)V
 HSPLandroid/database/sqlite/SQLiteProgram;->bindNull(I)V
 HSPLandroid/database/sqlite/SQLiteProgram;->bindString(ILjava/lang/String;)V
@@ -9324,41 +4113,22 @@
 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;->appendWhere(Ljava/lang/CharSequence;)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendWhereEscapeString(Ljava/lang/String;)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendWhereStandalone(Ljava/lang/CharSequence;)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->buildDelete(Ljava/lang/String;)Ljava/lang/String;
 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;
-HPLandroid/database/sqlite/SQLiteQueryBuilder;->buildUnionQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->buildUpdate(Landroid/content/ContentValues;Ljava/lang/String;)Ljava/lang/String;
 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;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->computeWhere(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->delete(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)I
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->enforceStrictColumns(Landroid/content/ContentValues;)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->enforceStrictGrammar(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->enforceStrictGrammarOrderBy(Ljava/lang/String;)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->enforceStrictGrammarWhereHaving(Ljava/lang/String;)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->getProjectionMap()Ljava/util/Map;
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->getTables()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->isStrict()Z
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->isStrictColumns()Z
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->isStrictGrammar()Z
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->isTableOrColumn(Ljava/lang/String;)Z
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->lambda$8Xdbi4e9qj6B20afMr13v8eErCU(Landroid/database/sqlite/SQLiteQueryBuilder;Ljava/lang/String;)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->lambda$RN4X37kr4P69Zco8q57M-c-6Pcc(Landroid/database/sqlite/SQLiteQueryBuilder;Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->maybeWithOperator(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->query(Landroid/database/sqlite/SQLiteDatabase;[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/SQLiteQueryBuilder;->query(Landroid/database/sqlite/SQLiteDatabase;[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/SQLiteQueryBuilder;->setDistinct(Z)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->setProjectionAggregationAllowed(Z)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->setProjectionGreylist(Ljava/util/List;)V
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->setProjectionMap(Ljava/util/Map;)V
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->setStrict(Z)V
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->setTables(Ljava/lang/String;)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->update(Landroid/database/sqlite/SQLiteDatabase;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->wrap(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteSession$Transaction;-><init>()V
 HSPLandroid/database/sqlite/SQLiteSession$Transaction;-><init>(Landroid/database/sqlite/SQLiteSession$1;)V
@@ -9373,122 +4143,98 @@
 HSPLandroid/database/sqlite/SQLiteSession;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Landroid/database/CursorWindow;IIZILandroid/os/CancellationSignal;)I
 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;->hasConnection()Z
-HPLandroid/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
 HSPLandroid/database/sqlite/SQLiteSession;->recycleTransaction(Landroid/database/sqlite/SQLiteSession$Transaction;)V
 HSPLandroid/database/sqlite/SQLiteSession;->releaseConnection()V
 HSPLandroid/database/sqlite/SQLiteSession;->setTransactionSuccessful()V
-HPLandroid/database/sqlite/SQLiteSession;->throwIfNestedTransaction()V
 HSPLandroid/database/sqlite/SQLiteSession;->throwIfNoTransaction()V
 HSPLandroid/database/sqlite/SQLiteSession;->throwIfTransactionMarkedSuccessful()V
-HPLandroid/database/sqlite/SQLiteSession;->yieldTransaction(JZLandroid/os/CancellationSignal;)Z
-HPLandroid/database/sqlite/SQLiteSession;->yieldTransactionUnchecked(JLandroid/os/CancellationSignal;)Z
 HSPLandroid/database/sqlite/SQLiteStatement;-><init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V
 HSPLandroid/database/sqlite/SQLiteStatement;->execute()V
 HSPLandroid/database/sqlite/SQLiteStatement;->executeInsert()J
 HSPLandroid/database/sqlite/SQLiteStatement;->executeUpdateDelete()I
 HSPLandroid/database/sqlite/SQLiteStatement;->simpleQueryForLong()J
-HSPLandroid/database/sqlite/SQLiteStatement;->simpleQueryForString()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteStatementInfo;-><init>()V
-HPLandroid/database/sqlite/SqliteWrapper;->query(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
 HSPLandroid/ddm/DdmHandleAppName$Names;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/ddm/DdmHandleAppName$Names;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/ddm/DdmHandleAppName$1;)V
+HSPLandroid/ddm/DdmHandleAppName$Names;->getAppName()Ljava/lang/String;
+HSPLandroid/ddm/DdmHandleAppName$Names;->getPkgName()Ljava/lang/String;
+HSPLandroid/ddm/DdmHandleAppName;->getNames()Landroid/ddm/DdmHandleAppName$Names;
 HSPLandroid/ddm/DdmHandleAppName;->sendAPNM(Ljava/lang/String;Ljava/lang/String;I)V
 HSPLandroid/ddm/DdmHandleAppName;->setAppName(Ljava/lang/String;I)V
 HSPLandroid/ddm/DdmHandleAppName;->setAppName(Ljava/lang/String;Ljava/lang/String;I)V
-HSPLandroid/debug/AdbManagerInternal;-><init>()V
-HSPLandroid/debug/IAdbManager$Stub;-><init>()V
-HSPLandroid/debug/IAdbManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/debug/IAdbManager;
-PLandroid/debug/IAdbManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/debug/IAdbTransport$Stub;-><init>()V
-HSPLandroid/debug/IAdbTransport$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/graphics/-$$Lambda$ColorSpace$Rgb$8EkhO2jIf14tuA3BvrmYJMa7YXM;-><init>(Landroid/graphics/ColorSpace$Rgb;)V
-PLandroid/graphics/-$$Lambda$ColorSpace$Rgb$CqKld6797g7__JnuY0NeFz5q4_E;-><init>(D)V
-PLandroid/graphics/-$$Lambda$ColorSpace$Rgb$ZvS77aTfobOSa2o9MTqYMph4Rcg;-><init>(D)V
+HSPLandroid/ddm/DdmHandleExit;->connected()V
+HSPLandroid/ddm/DdmHandleHeap;->connected()V
+HSPLandroid/ddm/DdmHandleHeap;->handleChunk(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
+HSPLandroid/ddm/DdmHandleHeap;->handleHPIF(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
+HSPLandroid/ddm/DdmHandleHeap;->handleREAQ(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
+HSPLandroid/ddm/DdmHandleHello;->connected()V
+HSPLandroid/ddm/DdmHandleHello;->handleChunk(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
+HSPLandroid/ddm/DdmHandleHello;->handleFEAT(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
+HSPLandroid/ddm/DdmHandleHello;->handleHELO(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
+HSPLandroid/ddm/DdmHandleNativeHeap;->connected()V
+HSPLandroid/ddm/DdmHandleProfiling;->connected()V
+HSPLandroid/ddm/DdmHandleProfiling;->handleChunk(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
+HSPLandroid/ddm/DdmHandleProfiling;->handleMPRQ(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
+HSPLandroid/ddm/DdmHandleThread;->connected()V
+HSPLandroid/ddm/DdmHandleViewDebug;->connected()V
 HSPLandroid/graphics/BaseCanvas;-><init>()V
-HSPLandroid/graphics/BaseCanvas;->drawArc(FFFFFFZLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseCanvas;->drawArc(Landroid/graphics/RectF;FFZLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseCanvas;->drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/RectF;Landroid/graphics/Paint;)V
-HPLandroid/graphics/BaseCanvas;->drawColor(ILandroid/graphics/BlendMode;)V
-PLandroid/graphics/BaseCanvas;->drawColor(ILandroid/graphics/PorterDuff$Mode;)V
-HPLandroid/graphics/BaseCanvas;->drawLine(FFFFLandroid/graphics/Paint;)V
-HPLandroid/graphics/BaseCanvas;->drawPaint(Landroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseCanvas;->drawCircle(FFFLandroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseCanvas;->drawColor(I)V
+HSPLandroid/graphics/BaseCanvas;->drawColor(ILandroid/graphics/PorterDuff$Mode;)V
 HSPLandroid/graphics/BaseCanvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V
-PLandroid/graphics/BaseCanvas;->drawRect(FFFFLandroid/graphics/Paint;)V
-PLandroid/graphics/BaseCanvas;->drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V
-PLandroid/graphics/BaseCanvas;->drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
-HPLandroid/graphics/BaseCanvas;->drawRoundRect(FFFFFFLandroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseCanvas;->drawRect(FFFFLandroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseCanvas;->drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseCanvas;->drawRoundRect(FFFFFFLandroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseCanvas;->drawRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseCanvas;->drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V
-PLandroid/graphics/BaseCanvas;->drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseCanvas;->drawText([CIIFFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseCanvas;->throwIfCannotDraw(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/BaseCanvas;->throwIfHasHwBitmapInSwMode(Landroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseCanvas;->throwIfHasHwBitmapInSwMode(Landroid/graphics/Shader;)V
 HSPLandroid/graphics/BaseCanvas;->throwIfHwBitmapInSwMode(Landroid/graphics/Bitmap;)V
-PLandroid/graphics/BaseRecordingCanvas;-><init>(J)V
-HPLandroid/graphics/BaseRecordingCanvas;->drawARGB(IIII)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawArc(Landroid/graphics/RectF;FFZLandroid/graphics/Paint;)V
-HPLandroid/graphics/BaseRecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Matrix;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseRecordingCanvas;-><init>(J)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Paint;)V
-HPLandroid/graphics/BaseRecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/RectF;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawCircle(FFFLandroid/graphics/Paint;)V
-HPLandroid/graphics/BaseRecordingCanvas;->drawColor(I)V
-HPLandroid/graphics/BaseRecordingCanvas;->drawColor(ILandroid/graphics/PorterDuff$Mode;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawLine(FFFFLandroid/graphics/Paint;)V
-HPLandroid/graphics/BaseRecordingCanvas;->drawOval(FFFFLandroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseRecordingCanvas;->drawColor(I)V
+HSPLandroid/graphics/BaseRecordingCanvas;->drawOval(FFFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawOval(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
-HPLandroid/graphics/BaseRecordingCanvas;->drawPaint(Landroid/graphics/Paint;)V
-HPLandroid/graphics/BaseRecordingCanvas;->drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/Rect;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
-HPLandroid/graphics/BaseRecordingCanvas;->drawPicture(Landroid/graphics/Picture;)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
-PLandroid/graphics/BaseRecordingCanvas;->drawRoundRect(FFFFFFLandroid/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
 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
 HSPLandroid/graphics/Bitmap$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/graphics/Bitmap$CompressFormat;->valueOf(Ljava/lang/String;)Landroid/graphics/Bitmap$CompressFormat;
-HSPLandroid/graphics/Bitmap$CompressFormat;->values()[Landroid/graphics/Bitmap$CompressFormat;
 HSPLandroid/graphics/Bitmap$Config;->nativeToConfig(I)Landroid/graphics/Bitmap$Config;
 HSPLandroid/graphics/Bitmap$Config;->values()[Landroid/graphics/Bitmap$Config;
 HSPLandroid/graphics/Bitmap;-><init>(JIIIZ[BLandroid/graphics/NinePatch$InsetStruct;Z)V
-PLandroid/graphics/Bitmap;->access$000(Landroid/os/Parcel;)Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->access$000(Landroid/os/Parcel;)Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->checkHardware(Ljava/lang/String;)V
 HSPLandroid/graphics/Bitmap;->checkPixelAccess(II)V
 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
 HSPLandroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
-PLandroid/graphics/Bitmap;->copy(Landroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;
-HPLandroid/graphics/Bitmap;->copyPixelsToBuffer(Ljava/nio/Buffer;)V
-HSPLandroid/graphics/Bitmap;->createAshmemBitmap()Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->copy(Landroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->createBitmap(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->createBitmap(IILandroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;
-HSPLandroid/graphics/Bitmap;->createBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;
-HSPLandroid/graphics/Bitmap;->createBitmap(Landroid/graphics/Bitmap;IIII)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->createBitmap(Landroid/graphics/Bitmap;IIIILandroid/graphics/Matrix;Z)Landroid/graphics/Bitmap;
-HPLandroid/graphics/Bitmap;->createBitmap(Landroid/graphics/Picture;)Landroid/graphics/Bitmap;
-HPLandroid/graphics/Bitmap;->createBitmap(Landroid/graphics/Picture;IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;
-HPLandroid/graphics/Bitmap;->createBitmap(Landroid/util/DisplayMetrics;IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->createBitmap(Landroid/util/DisplayMetrics;IILandroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->createBitmap(Landroid/util/DisplayMetrics;IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;
-PLandroid/graphics/Bitmap;->createGraphicBufferHandle()Landroid/graphics/GraphicBuffer;
 HSPLandroid/graphics/Bitmap;->createScaledBitmap(Landroid/graphics/Bitmap;IIZ)Landroid/graphics/Bitmap;
-HPLandroid/graphics/Bitmap;->eraseColor(I)V
-HSPLandroid/graphics/Bitmap;->extractAlpha(Landroid/graphics/Paint;[I)Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->eraseColor(I)V
 HSPLandroid/graphics/Bitmap;->getAllocationByteCount()I
 HSPLandroid/graphics/Bitmap;->getByteCount()I
 HSPLandroid/graphics/Bitmap;->getColorSpace()Landroid/graphics/ColorSpace;
@@ -9497,57 +4243,43 @@
 HSPLandroid/graphics/Bitmap;->getHeight()I
 HSPLandroid/graphics/Bitmap;->getNativeInstance()J
 HSPLandroid/graphics/Bitmap;->getNinePatchChunk()[B
-PLandroid/graphics/Bitmap;->getNinePatchInsets()Landroid/graphics/NinePatch$InsetStruct;
-PLandroid/graphics/Bitmap;->getOpticalInsets(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/Bitmap;->getPixel(II)I
+HSPLandroid/graphics/Bitmap;->getNinePatchInsets()Landroid/graphics/NinePatch$InsetStruct;
+HSPLandroid/graphics/Bitmap;->getOpticalInsets(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/Bitmap;->getPixels([IIIIIII)V
 HSPLandroid/graphics/Bitmap;->getRowBytes()I
 HSPLandroid/graphics/Bitmap;->getScaledHeight(I)I
 HSPLandroid/graphics/Bitmap;->getScaledWidth(I)I
 HSPLandroid/graphics/Bitmap;->getWidth()I
 HSPLandroid/graphics/Bitmap;->hasAlpha()Z
-PLandroid/graphics/Bitmap;->hasMipMap()Z
+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
 HSPLandroid/graphics/Bitmap;->recycle()V
 HSPLandroid/graphics/Bitmap;->reinit(IIZ)V
 HSPLandroid/graphics/Bitmap;->scaleFromDensity(III)I
+HSPLandroid/graphics/Bitmap;->setDefaultDensity(I)V
 HSPLandroid/graphics/Bitmap;->setDensity(I)V
 HSPLandroid/graphics/Bitmap;->setHasAlpha(Z)V
-PLandroid/graphics/Bitmap;->setHasMipMap(Z)V
+HSPLandroid/graphics/Bitmap;->setHasMipMap(Z)V
 HSPLandroid/graphics/Bitmap;->setPremultiplied(Z)V
 HSPLandroid/graphics/Bitmap;->wrapHardwareBuffer(Landroid/graphics/GraphicBuffer;Landroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->wrapHardwareBuffer(Landroid/hardware/HardwareBuffer;Landroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/graphics/BitmapFactory$Options;-><init>()V
-PLandroid/graphics/BitmapFactory$Options;->nativeColorSpace(Landroid/graphics/BitmapFactory$Options;)J
-PLandroid/graphics/BitmapFactory$Options;->nativeInBitmap(Landroid/graphics/BitmapFactory$Options;)J
+HSPLandroid/graphics/BitmapFactory$Options;->nativeColorSpace(Landroid/graphics/BitmapFactory$Options;)J
+HSPLandroid/graphics/BitmapFactory$Options;->nativeInBitmap(Landroid/graphics/BitmapFactory$Options;)J
 HSPLandroid/graphics/BitmapFactory$Options;->validate(Landroid/graphics/BitmapFactory$Options;)V
-HSPLandroid/graphics/BitmapFactory;->decodeByteArray([BII)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
-HPLandroid/graphics/BitmapFactory;->decodeFile(Ljava/lang/String;)Landroid/graphics/Bitmap;
-PLandroid/graphics/BitmapFactory;->decodeFile(Ljava/lang/String;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
-HPLandroid/graphics/BitmapFactory;->decodeFileDescriptor(Ljava/io/FileDescriptor;)Landroid/graphics/Bitmap;
-HSPLandroid/graphics/BitmapFactory;->decodeFileDescriptor(Ljava/io/FileDescriptor;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/BitmapFactory;->decodeResource(Landroid/content/res/Resources;I)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/BitmapFactory;->decodeResource(Landroid/content/res/Resources;ILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/BitmapFactory;->decodeResourceStream(Landroid/content/res/Resources;Landroid/util/TypedValue;Ljava/io/InputStream;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
-PLandroid/graphics/BitmapFactory;->decodeStream(Ljava/io/InputStream;)Landroid/graphics/Bitmap;
+HSPLandroid/graphics/BitmapFactory;->decodeStream(Ljava/io/InputStream;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/BitmapFactory;->decodeStream(Ljava/io/InputStream;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
-PLandroid/graphics/BitmapFactory;->decodeStreamInternal(Ljava/io/InputStream;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
+HSPLandroid/graphics/BitmapFactory;->decodeStreamInternal(Ljava/io/InputStream;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/BitmapFactory;->setDensityFromOptions(Landroid/graphics/Bitmap;Landroid/graphics/BitmapFactory$Options;)V
-HPLandroid/graphics/BitmapRegionDecoder;-><init>(J)V
-HPLandroid/graphics/BitmapRegionDecoder;->checkRecycled(Ljava/lang/String;)V
-HPLandroid/graphics/BitmapRegionDecoder;->decodeRegion(Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
-HPLandroid/graphics/BitmapRegionDecoder;->finalize()V
-HPLandroid/graphics/BitmapRegionDecoder;->getHeight()I
-HPLandroid/graphics/BitmapRegionDecoder;->getWidth()I
-HPLandroid/graphics/BitmapRegionDecoder;->newInstance(Ljava/io/InputStream;Z)Landroid/graphics/BitmapRegionDecoder;
-HPLandroid/graphics/BitmapRegionDecoder;->recycle()V
 HSPLandroid/graphics/BitmapShader;-><init>(Landroid/graphics/Bitmap;II)V
 HSPLandroid/graphics/BitmapShader;-><init>(Landroid/graphics/Bitmap;Landroid/graphics/Shader$TileMode;Landroid/graphics/Shader$TileMode;)V
 HSPLandroid/graphics/BitmapShader;->createNativeInstance(J)J
@@ -9559,99 +4291,65 @@
 HSPLandroid/graphics/BlendModeColorFilter;->createNativeInstance()J
 HSPLandroid/graphics/BlendModeColorFilter;->getColor()I
 HSPLandroid/graphics/BlendModeColorFilter;->getMode()Landroid/graphics/BlendMode;
-HSPLandroid/graphics/BlurMaskFilter;-><init>(FLandroid/graphics/BlurMaskFilter$Blur;)V
 HSPLandroid/graphics/Canvas;-><init>()V
 HSPLandroid/graphics/Canvas;-><init>(J)V
 HSPLandroid/graphics/Canvas;-><init>(Landroid/graphics/Bitmap;)V
-HPLandroid/graphics/Canvas;->clipOutPath(Landroid/graphics/Path;)Z
-HSPLandroid/graphics/Canvas;->clipPath(Landroid/graphics/Path;)Z
+HSPLandroid/graphics/Canvas;->checkValidClipOp(Landroid/graphics/Region$Op;)V
+HSPLandroid/graphics/Canvas;->checkValidSaveFlags(I)V
 HSPLandroid/graphics/Canvas;->clipPath(Landroid/graphics/Path;Landroid/graphics/Region$Op;)Z
 HSPLandroid/graphics/Canvas;->clipRect(FFFF)Z
 HSPLandroid/graphics/Canvas;->clipRect(IIII)Z
 HSPLandroid/graphics/Canvas;->clipRect(Landroid/graphics/Rect;)Z
-HSPLandroid/graphics/Canvas;->clipRect(Landroid/graphics/Rect;Landroid/graphics/Region$Op;)Z
 HSPLandroid/graphics/Canvas;->concat(Landroid/graphics/Matrix;)V
-HPLandroid/graphics/Canvas;->drawARGB(IIII)V
-HSPLandroid/graphics/Canvas;->drawArc(FFFFFFZLandroid/graphics/Paint;)V
-HSPLandroid/graphics/Canvas;->drawArc(Landroid/graphics/RectF;FFZLandroid/graphics/Paint;)V
 HSPLandroid/graphics/Canvas;->drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/Canvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Matrix;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/Canvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/Canvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/RectF;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/Canvas;->drawCircle(FFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/Canvas;->drawColor(I)V
-HPLandroid/graphics/Canvas;->drawColor(ILandroid/graphics/BlendMode;)V
 HSPLandroid/graphics/Canvas;->drawColor(ILandroid/graphics/PorterDuff$Mode;)V
-HPLandroid/graphics/Canvas;->drawLine(FFFFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/Canvas;->drawOval(FFFFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/Canvas;->drawOval(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
-HPLandroid/graphics/Canvas;->drawPaint(Landroid/graphics/Paint;)V
 HSPLandroid/graphics/Canvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V
-HPLandroid/graphics/Canvas;->drawPicture(Landroid/graphics/Picture;)V
-HPLandroid/graphics/Canvas;->drawPicture(Landroid/graphics/Picture;Landroid/graphics/RectF;)V
 HSPLandroid/graphics/Canvas;->drawRect(FFFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/Canvas;->drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V
-HSPLandroid/graphics/Canvas;->drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/Canvas;->drawRoundRect(FFFFFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/Canvas;->drawRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/Canvas;->drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/Canvas;->drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/Canvas;->drawText([CIIFFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/Canvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V
 PLandroid/graphics/Canvas;->freeCaches()V
-PLandroid/graphics/Canvas;->freeTextLayoutCaches()V
+HSPLandroid/graphics/Canvas;->freeTextLayoutCaches()V
 HSPLandroid/graphics/Canvas;->getClipBounds(Landroid/graphics/Rect;)Z
-HPLandroid/graphics/Canvas;->getDensity()I
+HSPLandroid/graphics/Canvas;->getDensity()I
 HSPLandroid/graphics/Canvas;->getHeight()I
-HPLandroid/graphics/Canvas;->getMatrix(Landroid/graphics/Matrix;)V
 HSPLandroid/graphics/Canvas;->getNativeCanvasWrapper()J
 HSPLandroid/graphics/Canvas;->getSaveCount()I
 HSPLandroid/graphics/Canvas;->getWidth()I
 HSPLandroid/graphics/Canvas;->insertInorderBarrier()V
 HSPLandroid/graphics/Canvas;->insertReorderBarrier()V
 HSPLandroid/graphics/Canvas;->isHardwareAccelerated()Z
-PLandroid/graphics/Canvas;->isOpaque()Z
 HSPLandroid/graphics/Canvas;->isRecordingFor(Ljava/lang/Object;)Z
+HSPLandroid/graphics/Canvas;->quickReject(FFFF)Z
 HSPLandroid/graphics/Canvas;->quickReject(FFFFLandroid/graphics/Canvas$EdgeType;)Z
 HSPLandroid/graphics/Canvas;->restore()V
 HSPLandroid/graphics/Canvas;->restoreToCount(I)V
-HPLandroid/graphics/Canvas;->restoreUnclippedLayer(ILandroid/graphics/Paint;)V
 HSPLandroid/graphics/Canvas;->rotate(F)V
 HSPLandroid/graphics/Canvas;->rotate(FFF)V
 HSPLandroid/graphics/Canvas;->save()I
 HSPLandroid/graphics/Canvas;->save(I)I
-HPLandroid/graphics/Canvas;->saveLayer(FFFFLandroid/graphics/Paint;I)I
-HPLandroid/graphics/Canvas;->saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;)I
-HPLandroid/graphics/Canvas;->saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;I)I
-HSPLandroid/graphics/Canvas;->saveLayerAlpha(FFFFI)I
-HSPLandroid/graphics/Canvas;->saveLayerAlpha(FFFFII)I
-HPLandroid/graphics/Canvas;->saveUnclippedLayer(IIII)I
 HSPLandroid/graphics/Canvas;->scale(FF)V
-HPLandroid/graphics/Canvas;->scale(FFFF)V
+HSPLandroid/graphics/Canvas;->scale(FFFF)V
 HSPLandroid/graphics/Canvas;->setBitmap(Landroid/graphics/Bitmap;)V
-PLandroid/graphics/Canvas;->setCompatibilityVersion(I)V
-PLandroid/graphics/Canvas;->setDensity(I)V
+HSPLandroid/graphics/Canvas;->setCompatibilityVersion(I)V
 HSPLandroid/graphics/Canvas;->setDrawFilter(Landroid/graphics/DrawFilter;)V
-HSPLandroid/graphics/Canvas;->setMatrix(Landroid/graphics/Matrix;)V
-PLandroid/graphics/Canvas;->setScreenDensity(I)V
 HSPLandroid/graphics/Canvas;->translate(FF)V
-HPLandroid/graphics/CanvasProperty;-><init>(J)V
-HPLandroid/graphics/CanvasProperty;->createFloat(F)Landroid/graphics/CanvasProperty;
-HPLandroid/graphics/CanvasProperty;->createPaint(Landroid/graphics/Paint;)Landroid/graphics/CanvasProperty;
-HPLandroid/graphics/CanvasProperty;->getNativeContainer()J
-HPLandroid/graphics/Color;-><init>(FFFF)V
+HSPLandroid/graphics/CanvasProperty;-><init>(J)V
+HSPLandroid/graphics/CanvasProperty;->createFloat(F)Landroid/graphics/CanvasProperty;
+HSPLandroid/graphics/CanvasProperty;->createPaint(Landroid/graphics/Paint;)Landroid/graphics/CanvasProperty;
+HSPLandroid/graphics/CanvasProperty;->getNativeContainer()J
 HSPLandroid/graphics/Color;-><init>(FFFFLandroid/graphics/ColorSpace;)V
-HPLandroid/graphics/Color;->HSVToColor([F)I
-HPLandroid/graphics/Color;->RGBToHSV(III[F)V
 HSPLandroid/graphics/Color;->alpha(I)I
 HSPLandroid/graphics/Color;->alpha(J)F
-HPLandroid/graphics/Color;->argb(FFFF)I
 HSPLandroid/graphics/Color;->argb(IIII)I
 HSPLandroid/graphics/Color;->blue(I)I
 HSPLandroid/graphics/Color;->blue(J)F
-HPLandroid/graphics/Color;->colorSpace(J)Landroid/graphics/ColorSpace;
-HSPLandroid/graphics/Color;->colorToHSV(I[F)V
-HSPLandroid/graphics/Color;->getHtmlColor(Ljava/lang/String;)I
+HSPLandroid/graphics/Color;->colorSpace(J)Landroid/graphics/ColorSpace;
 HSPLandroid/graphics/Color;->green(I)I
 HSPLandroid/graphics/Color;->green(J)F
 HSPLandroid/graphics/Color;->pack(FFFFLandroid/graphics/ColorSpace;)J
@@ -9660,154 +4358,72 @@
 HSPLandroid/graphics/Color;->red(I)I
 HSPLandroid/graphics/Color;->red(J)F
 HSPLandroid/graphics/Color;->rgb(III)I
-HPLandroid/graphics/Color;->saturate(F)F
 HSPLandroid/graphics/Color;->toArgb()I
 HSPLandroid/graphics/Color;->toArgb(J)I
-HPLandroid/graphics/Color;->valueOf(FFFF)Landroid/graphics/Color;
 HSPLandroid/graphics/Color;->valueOf(I)Landroid/graphics/Color;
 HSPLandroid/graphics/ColorFilter;-><init>()V
-HPLandroid/graphics/ColorFilter;->discardNativeInstance()V
 HSPLandroid/graphics/ColorFilter;->getNativeInstance()J
 HSPLandroid/graphics/ColorMatrix;-><init>()V
-HPLandroid/graphics/ColorMatrix;-><init>([F)V
 HSPLandroid/graphics/ColorMatrix;->reset()V
-HPLandroid/graphics/ColorMatrix;->set([F)V
-HSPLandroid/graphics/ColorMatrix;->setSaturation(F)V
-HPLandroid/graphics/ColorMatrix;->setScale(FFFF)V
-HSPLandroid/graphics/ColorMatrixColorFilter;-><init>(Landroid/graphics/ColorMatrix;)V
-HPLandroid/graphics/ColorMatrixColorFilter;-><init>([F)V
-HPLandroid/graphics/ColorMatrixColorFilter;->createNativeInstance()J
-HPLandroid/graphics/ColorMatrixColorFilter;->setColorMatrixArray([F)V
 HSPLandroid/graphics/ColorSpace$Named;->values()[Landroid/graphics/ColorSpace$Named;
-PLandroid/graphics/ColorSpace$Rgb$TransferParameters;-><init>(DDDDD)V
-HSPLandroid/graphics/ColorSpace$Rgb$TransferParameters;-><init>(DDDDDDD)V
-HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Landroid/graphics/ColorSpace$Rgb;[F[F)V
-HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Landroid/graphics/ColorSpace$Rgb;[F[FLandroid/graphics/ColorSpace$1;)V
-HPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)V
-PLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[F[FD)V
-PLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[F[FDFFI)V
-HPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[F[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;I)V
-HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[F[F[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;FFLandroid/graphics/ColorSpace$Rgb$TransferParameters;I)V
-HSPLandroid/graphics/ColorSpace$Rgb;->access$000(Landroid/graphics/ColorSpace$Rgb;)[F
-HSPLandroid/graphics/ColorSpace$Rgb;->access$100(Landroid/graphics/ColorSpace$Rgb;)[F
-HSPLandroid/graphics/ColorSpace$Rgb;->access$300(Landroid/graphics/ColorSpace$Rgb;)Landroid/graphics/ColorSpace$Rgb$TransferParameters;
-HSPLandroid/graphics/ColorSpace$Rgb;->area([F)F
-HPLandroid/graphics/ColorSpace$Rgb;->computePrimaries([F)[F
-HPLandroid/graphics/ColorSpace$Rgb;->computeWhitePoint([F)[F
-PLandroid/graphics/ColorSpace$Rgb;->computeXYZMatrix([F[F)[F
-HSPLandroid/graphics/ColorSpace$Rgb;->contains([F[F)Z
-PLandroid/graphics/ColorSpace$Rgb;->cross(FFFF)F
-PLandroid/graphics/ColorSpace$Rgb;->getInverseTransform()[F
+HSPLandroid/graphics/ColorSpace$Rgb$TransferParameters;->hashCode()I
 HSPLandroid/graphics/ColorSpace$Rgb;->getNativeInstance()J
 HSPLandroid/graphics/ColorSpace$Rgb;->getTransferParameters()Landroid/graphics/ColorSpace$Rgb$TransferParameters;
-PLandroid/graphics/ColorSpace$Rgb;->getTransform()[F
-HSPLandroid/graphics/ColorSpace$Rgb;->getWhitePoint()[F
+HSPLandroid/graphics/ColorSpace$Rgb;->hashCode()I
 HSPLandroid/graphics/ColorSpace$Rgb;->isSrgb()Z
-HSPLandroid/graphics/ColorSpace$Rgb;->isSrgb([F[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;FFI)Z
-HSPLandroid/graphics/ColorSpace$Rgb;->isWideGamut()Z
-HSPLandroid/graphics/ColorSpace$Rgb;->isWideGamut([FFF)Z
-HSPLandroid/graphics/ColorSpace$Rgb;->xyPrimaries([F)[F
-HSPLandroid/graphics/ColorSpace$Rgb;->xyWhitePoint([F)[F
-HSPLandroid/graphics/ColorSpace;-><init>(Ljava/lang/String;Landroid/graphics/ColorSpace$Model;I)V
-HSPLandroid/graphics/ColorSpace;-><init>(Ljava/lang/String;Landroid/graphics/ColorSpace$Model;ILandroid/graphics/ColorSpace$1;)V
-HSPLandroid/graphics/ColorSpace;->access$1200([F)[F
-HSPLandroid/graphics/ColorSpace;->access$1300([F[F)[F
-HPLandroid/graphics/ColorSpace;->access$1500([F[F)[F
-PLandroid/graphics/ColorSpace;->access$1600()[F
-PLandroid/graphics/ColorSpace;->access$1700([F[F)Z
-PLandroid/graphics/ColorSpace;->access$1800()[F
-HSPLandroid/graphics/ColorSpace;->adapt(Landroid/graphics/ColorSpace;[F)Landroid/graphics/ColorSpace;
-HSPLandroid/graphics/ColorSpace;->adapt(Landroid/graphics/ColorSpace;[FLandroid/graphics/ColorSpace$Adaptation;)Landroid/graphics/ColorSpace;
-PLandroid/graphics/ColorSpace;->adaptToIlluminantD50([F[F)[F
-HPLandroid/graphics/ColorSpace;->cctToXyz(I)[F
-HPLandroid/graphics/ColorSpace;->chromaticAdaptation(Landroid/graphics/ColorSpace$Adaptation;[F[F)[F
-HSPLandroid/graphics/ColorSpace;->chromaticAdaptation([F[F[F)[F
-HSPLandroid/graphics/ColorSpace;->compare(Landroid/graphics/ColorSpace$Rgb$TransferParameters;Landroid/graphics/ColorSpace$Rgb$TransferParameters;)Z
-HSPLandroid/graphics/ColorSpace;->compare([F[F)Z
 HSPLandroid/graphics/ColorSpace;->get(I)Landroid/graphics/ColorSpace;
 HSPLandroid/graphics/ColorSpace;->get(Landroid/graphics/ColorSpace$Named;)Landroid/graphics/ColorSpace;
-HSPLandroid/graphics/ColorSpace;->getId()I
-HSPLandroid/graphics/ColorSpace;->getModel()Landroid/graphics/ColorSpace$Model;
-HSPLandroid/graphics/ColorSpace;->getName()Ljava/lang/String;
-HSPLandroid/graphics/ColorSpace;->inverse3x3([F)[F
-HSPLandroid/graphics/ColorSpace;->match([FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)Landroid/graphics/ColorSpace;
-HSPLandroid/graphics/ColorSpace;->mul3x3([F[F)[F
-HSPLandroid/graphics/ColorSpace;->mul3x3Diag([F[F)[F
-HSPLandroid/graphics/ColorSpace;->mul3x3Float3([F[F)[F
-PLandroid/graphics/ColorSpace;->toString()Ljava/lang/String;
-HSPLandroid/graphics/ColorSpace;->xyYToXyz([F)[F
-HSPLandroid/graphics/CornerPathEffect;-><init>(F)V
+HSPLandroid/graphics/ColorSpace;->hashCode()I
 HSPLandroid/graphics/DrawFilter;-><init>()V
-PLandroid/graphics/DrawFilter;->finalize()V
-HSPLandroid/graphics/FontFamily;-><init>()V
-HSPLandroid/graphics/FontFamily;->addFontFromAssetManager(Landroid/content/res/AssetManager;Ljava/lang/String;IZIII[Landroid/graphics/fonts/FontVariationAxis;)Z
-HSPLandroid/graphics/FontFamily;->addFontFromBuffer(Ljava/nio/ByteBuffer;I[Landroid/graphics/fonts/FontVariationAxis;II)Z
-HSPLandroid/graphics/FontFamily;->freeze()Z
 HSPLandroid/graphics/FrameInfo;-><init>()V
 HSPLandroid/graphics/FrameInfo;->addFlags(J)V
 HSPLandroid/graphics/FrameInfo;->markAnimationsStart()V
-PLandroid/graphics/FrameInfo;->markDrawStart()V
+HSPLandroid/graphics/FrameInfo;->markDrawStart()V
 HSPLandroid/graphics/FrameInfo;->markInputHandlingStart()V
 HSPLandroid/graphics/FrameInfo;->markPerformTraversalsStart()V
 HSPLandroid/graphics/FrameInfo;->setVsync(JJ)V
-HSPLandroid/graphics/GraphicBuffer$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/GraphicBuffer;
-HSPLandroid/graphics/GraphicBuffer$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/graphics/FrameInfo;->updateInputEventTime(JJ)V
 HSPLandroid/graphics/GraphicBuffer;-><init>(IIIIJ)V
-HSPLandroid/graphics/GraphicBuffer;-><init>(IIIIJLandroid/graphics/GraphicBuffer$1;)V
-HSPLandroid/graphics/GraphicBuffer;->access$000(Landroid/os/Parcel;)J
-PLandroid/graphics/GraphicBuffer;->createFromExisting(IIIIJ)Landroid/graphics/GraphicBuffer;
-HPLandroid/graphics/GraphicBuffer;->destroy()V
 HSPLandroid/graphics/GraphicBuffer;->finalize()V
-PLandroid/graphics/GraphicBuffer;->getFormat()I
-PLandroid/graphics/GraphicBuffer;->getHeight()I
-PLandroid/graphics/GraphicBuffer;->getWidth()I
-PLandroid/graphics/GraphicBuffer;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/graphics/HardwareRenderer$DestroyContextRunnable;-><init>(J)V
+HSPLandroid/graphics/HardwareRenderer$DestroyContextRunnable;-><init>(J)V
 HSPLandroid/graphics/HardwareRenderer$DestroyContextRunnable;->run()V
-PLandroid/graphics/HardwareRenderer$FrameRenderRequest;-><init>(Landroid/graphics/HardwareRenderer;)V
-PLandroid/graphics/HardwareRenderer$FrameRenderRequest;-><init>(Landroid/graphics/HardwareRenderer;Landroid/graphics/HardwareRenderer$1;)V
-PLandroid/graphics/HardwareRenderer$ProcessInitializer$1;->onRotateGraphicsStatsBuffer()V
+HSPLandroid/graphics/HardwareRenderer$FrameRenderRequest;-><init>(Landroid/graphics/HardwareRenderer;)V
+HSPLandroid/graphics/HardwareRenderer$FrameRenderRequest;-><init>(Landroid/graphics/HardwareRenderer;Landroid/graphics/HardwareRenderer$1;)V
 HSPLandroid/graphics/HardwareRenderer$ProcessInitializer;->init(J)V
 HSPLandroid/graphics/HardwareRenderer$ProcessInitializer;->initGraphicsStats()V
 HSPLandroid/graphics/HardwareRenderer$ProcessInitializer;->initSched(J)V
 HSPLandroid/graphics/HardwareRenderer$ProcessInitializer;->requestBuffer()V
 HSPLandroid/graphics/HardwareRenderer$ProcessInitializer;->setPackageName(Ljava/lang/String;)V
 HSPLandroid/graphics/HardwareRenderer;-><init>()V
-PLandroid/graphics/HardwareRenderer;->access$300(J)V
-PLandroid/graphics/HardwareRenderer;->access$500(J)I
+HSPLandroid/graphics/HardwareRenderer;->access$300(J)V
+HSPLandroid/graphics/HardwareRenderer;->access$500(J)I
+HSPLandroid/graphics/HardwareRenderer;->access$700(I)V
 HSPLandroid/graphics/HardwareRenderer;->allocateBuffers()V
-PLandroid/graphics/HardwareRenderer;->clearContent()V
-HPLandroid/graphics/HardwareRenderer;->copyLayerInto(Landroid/view/TextureLayer;Landroid/graphics/Bitmap;)Z
-HPLandroid/graphics/HardwareRenderer;->createHardwareBitmap(Landroid/graphics/RenderNode;II)Landroid/graphics/Bitmap;
-HPLandroid/graphics/HardwareRenderer;->createTextureLayer()Landroid/view/TextureLayer;
-PLandroid/graphics/HardwareRenderer;->destroy()V
-HPLandroid/graphics/HardwareRenderer;->detachSurfaceTexture(J)V
-PLandroid/graphics/HardwareRenderer;->isWideGamut()Z
-PLandroid/graphics/HardwareRenderer;->loadSystemProperties()Z
-PLandroid/graphics/HardwareRenderer;->notifyFramePending()V
-HPLandroid/graphics/HardwareRenderer;->onLayerDestroyed(Landroid/view/TextureLayer;)V
+HSPLandroid/graphics/HardwareRenderer;->clearContent()V
+HSPLandroid/graphics/HardwareRenderer;->destroy()V
+HSPLandroid/graphics/HardwareRenderer;->isWideGamut()Z
+HSPLandroid/graphics/HardwareRenderer;->loadSystemProperties()Z
+HSPLandroid/graphics/HardwareRenderer;->notifyFramePending()V
 HSPLandroid/graphics/HardwareRenderer;->pause()Z
-HPLandroid/graphics/HardwareRenderer;->pushLayerUpdate(Landroid/view/TextureLayer;)V
+HSPLandroid/graphics/HardwareRenderer;->registerAnimatingRenderNode(Landroid/graphics/RenderNode;)V
 HSPLandroid/graphics/HardwareRenderer;->registerVectorDrawableAnimator(Landroid/view/NativeVectorDrawableAnimator;)V
-HPLandroid/graphics/HardwareRenderer;->removeFrameMetricsObserver(Landroid/view/FrameMetricsObserver;)V
-HSPLandroid/graphics/HardwareRenderer;->setContextPriority(I)V
 HSPLandroid/graphics/HardwareRenderer;->setDebuggingEnabled(Z)V
 HSPLandroid/graphics/HardwareRenderer;->setFPSDivisor(I)V
-PLandroid/graphics/HardwareRenderer;->setForceDark(Z)Z
-PLandroid/graphics/HardwareRenderer;->setFrameCompleteCallback(Landroid/graphics/HardwareRenderer$FrameCompleteCallback;)V
+HSPLandroid/graphics/HardwareRenderer;->setForceDark(Z)Z
+HSPLandroid/graphics/HardwareRenderer;->setFrameCompleteCallback(Landroid/graphics/HardwareRenderer$FrameCompleteCallback;)V
 HSPLandroid/graphics/HardwareRenderer;->setHighContrastText(Z)V
-PLandroid/graphics/HardwareRenderer;->setLightSourceAlpha(FF)V
-PLandroid/graphics/HardwareRenderer;->setLightSourceGeometry(FFFF)V
-PLandroid/graphics/HardwareRenderer;->setName(Ljava/lang/String;)V
-PLandroid/graphics/HardwareRenderer;->setOpaque(Z)V
+HSPLandroid/graphics/HardwareRenderer;->setLightSourceAlpha(FF)V
+HSPLandroid/graphics/HardwareRenderer;->setLightSourceGeometry(FFFF)V
+HSPLandroid/graphics/HardwareRenderer;->setName(Ljava/lang/String;)V
+HSPLandroid/graphics/HardwareRenderer;->setOpaque(Z)V
 HSPLandroid/graphics/HardwareRenderer;->setPackageName(Ljava/lang/String;)V
-PLandroid/graphics/HardwareRenderer;->setStopped(Z)V
-PLandroid/graphics/HardwareRenderer;->setSurface(Landroid/view/Surface;)V
+HSPLandroid/graphics/HardwareRenderer;->setStopped(Z)V
+HSPLandroid/graphics/HardwareRenderer;->setSurface(Landroid/view/Surface;)V
 HSPLandroid/graphics/HardwareRenderer;->setSurface(Landroid/view/Surface;Z)V
-PLandroid/graphics/HardwareRenderer;->setWideGamut(Z)V
+HSPLandroid/graphics/HardwareRenderer;->setWideGamut(Z)V
 HSPLandroid/graphics/HardwareRenderer;->setupDiskCache(Ljava/io/File;)V
-PLandroid/graphics/HardwareRenderer;->syncAndDrawFrame(Landroid/graphics/FrameInfo;)I
-PLandroid/graphics/HardwareRenderer;->trimMemory(I)V
+HSPLandroid/graphics/HardwareRenderer;->syncAndDrawFrame(Landroid/graphics/FrameInfo;)I
+HSPLandroid/graphics/HardwareRenderer;->trimMemory(I)V
 HSPLandroid/graphics/HardwareRenderer;->validateAlpha(FLjava/lang/String;)V
 HSPLandroid/graphics/HardwareRenderer;->validateFinite(FLjava/lang/String;)V
 HSPLandroid/graphics/HardwareRenderer;->validatePositive(FLjava/lang/String;)V
@@ -9818,7 +4434,7 @@
 HSPLandroid/graphics/ImageDecoder$ImageInfo;-><init>(Landroid/graphics/ImageDecoder;)V
 HSPLandroid/graphics/ImageDecoder$ImageInfo;-><init>(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$1;)V
 HSPLandroid/graphics/ImageDecoder$ImageInfo;->access$1302(Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder;)Landroid/graphics/ImageDecoder;
-PLandroid/graphics/ImageDecoder$InputStreamSource;-><init>(Landroid/content/res/Resources;Ljava/io/InputStream;I)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;
@@ -9848,145 +4464,114 @@
 HSPLandroid/graphics/ImageDecoder;->getColorSpacePtr()J
 HSPLandroid/graphics/ImageDecoder;->requestedResize()Z
 HSPLandroid/graphics/ImageDecoder;->setAllocator(I)V
-PLandroid/graphics/ImageDecoder;->setOutPaddingRect(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/ImageDecoder;->setOutPaddingRect(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/ImageDecoder;->setTargetSize(II)V
+HSPLandroid/graphics/Insets$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/Insets;
+HSPLandroid/graphics/Insets$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/graphics/Insets;-><init>(IIII)V
+HSPLandroid/graphics/Insets;-><init>(IIIILandroid/graphics/Insets$1;)V
 HSPLandroid/graphics/Insets;->equals(Ljava/lang/Object;)Z
 HSPLandroid/graphics/Insets;->max(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;
 HSPLandroid/graphics/Insets;->of(IIII)Landroid/graphics/Insets;
-PLandroid/graphics/Insets;->of(Landroid/graphics/Rect;)Landroid/graphics/Insets;
-HPLandroid/graphics/Insets;->toRect()Landroid/graphics/Rect;
+HSPLandroid/graphics/Insets;->of(Landroid/graphics/Rect;)Landroid/graphics/Insets;
+HSPLandroid/graphics/Insets;->toRect()Landroid/graphics/Rect;
+HSPLandroid/graphics/Interpolator;-><init>(II)V
 HSPLandroid/graphics/Interpolator;->finalize()V
 HSPLandroid/graphics/Interpolator;->setKeyFrame(II[F)V
 HSPLandroid/graphics/Interpolator;->setKeyFrame(II[F[F)V
 HSPLandroid/graphics/Interpolator;->timeToValues(I[F)Landroid/graphics/Interpolator$Result;
 HSPLandroid/graphics/Interpolator;->timeToValues([F)Landroid/graphics/Interpolator$Result;
-HPLandroid/graphics/LeakyTypefaceStorage;->readTypefaceFromParcel(Landroid/os/Parcel;)Landroid/graphics/Typeface;
-HSPLandroid/graphics/LeakyTypefaceStorage;->writeTypefaceToParcel(Landroid/graphics/Typeface;Landroid/os/Parcel;)V
+HSPLandroid/graphics/LeakyTypefaceStorage;->readTypefaceFromParcel(Landroid/os/Parcel;)Landroid/graphics/Typeface;
 HSPLandroid/graphics/LinearGradient;-><init>(FFFFIILandroid/graphics/Shader$TileMode;)V
+HSPLandroid/graphics/LinearGradient;-><init>(FFFFJJLandroid/graphics/Shader$TileMode;)V
 HSPLandroid/graphics/LinearGradient;-><init>(FFFF[I[FLandroid/graphics/Shader$TileMode;)V
 HSPLandroid/graphics/LinearGradient;-><init>(FFFF[J[FLandroid/graphics/Shader$TileMode;)V
 HSPLandroid/graphics/LinearGradient;-><init>(FFFF[J[FLandroid/graphics/Shader$TileMode;Landroid/graphics/ColorSpace;)V
 HSPLandroid/graphics/LinearGradient;->createNativeInstance(J)J
-HSPLandroid/graphics/MaskFilter;->finalize()V
 HSPLandroid/graphics/Matrix;-><init>()V
-HPLandroid/graphics/Matrix;-><init>(Landroid/graphics/Matrix;)V
-HPLandroid/graphics/Matrix;->checkPointArrays([FI[FII)V
+HSPLandroid/graphics/Matrix;-><init>(Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/Matrix;->checkPointArrays([FI[FII)V
 HSPLandroid/graphics/Matrix;->equals(Ljava/lang/Object;)Z
-HPLandroid/graphics/Matrix;->getValues([F)V
+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([FI[FII)V
 HSPLandroid/graphics/Matrix;->mapRect(Landroid/graphics/RectF;)Z
 HSPLandroid/graphics/Matrix;->mapRect(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z
-HSPLandroid/graphics/Matrix;->ni()J
-PLandroid/graphics/Matrix;->postConcat(Landroid/graphics/Matrix;)Z
-HPLandroid/graphics/Matrix;->postRotate(F)Z
-HSPLandroid/graphics/Matrix;->postRotate(FFF)Z
 HSPLandroid/graphics/Matrix;->postScale(FF)Z
-HSPLandroid/graphics/Matrix;->postScale(FFFF)Z
 HSPLandroid/graphics/Matrix;->postTranslate(FF)Z
 HSPLandroid/graphics/Matrix;->preConcat(Landroid/graphics/Matrix;)Z
-HPLandroid/graphics/Matrix;->preRotate(F)Z
 HSPLandroid/graphics/Matrix;->preTranslate(FF)Z
-PLandroid/graphics/Matrix;->printShortString(Ljava/io/PrintWriter;)V
 HSPLandroid/graphics/Matrix;->rectStaysRect()Z
 HSPLandroid/graphics/Matrix;->reset()V
 HSPLandroid/graphics/Matrix;->set(Landroid/graphics/Matrix;)V
 HSPLandroid/graphics/Matrix;->setRectToRect(Landroid/graphics/RectF;Landroid/graphics/RectF;Landroid/graphics/Matrix$ScaleToFit;)Z
-PLandroid/graphics/Matrix;->setRotate(F)V
-PLandroid/graphics/Matrix;->setRotate(FFF)V
 HSPLandroid/graphics/Matrix;->setScale(FF)V
 HSPLandroid/graphics/Matrix;->setScale(FFFF)V
 HSPLandroid/graphics/Matrix;->setTranslate(FF)V
-HPLandroid/graphics/Matrix;->setValues([F)V
 HSPLandroid/graphics/NinePatch$InsetStruct;-><init>(IIIIIIIIFIF)V
 HSPLandroid/graphics/NinePatch$InsetStruct;->scaleInsets(IIIIF)Landroid/graphics/Rect;
-PLandroid/graphics/NinePatch;-><init>(Landroid/graphics/Bitmap;[B)V
-PLandroid/graphics/NinePatch;-><init>(Landroid/graphics/Bitmap;[BLjava/lang/String;)V
-HPLandroid/graphics/NinePatch;->draw(Landroid/graphics/Canvas;Landroid/graphics/Rect;Landroid/graphics/Paint;)V
-PLandroid/graphics/NinePatch;->finalize()V
+HSPLandroid/graphics/NinePatch;-><init>(Landroid/graphics/Bitmap;[B)V
+HSPLandroid/graphics/NinePatch;-><init>(Landroid/graphics/Bitmap;[BLjava/lang/String;)V
+HSPLandroid/graphics/NinePatch;->draw(Landroid/graphics/Canvas;Landroid/graphics/Rect;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/NinePatch;->finalize()V
 HSPLandroid/graphics/NinePatch;->getBitmap()Landroid/graphics/Bitmap;
 HSPLandroid/graphics/NinePatch;->getDensity()I
 HSPLandroid/graphics/NinePatch;->getHeight()I
 HSPLandroid/graphics/NinePatch;->getWidth()I
-PLandroid/graphics/NinePatch;->hasAlpha()Z
-PLandroid/graphics/Outline;-><init>()V
-PLandroid/graphics/Outline;->isEmpty()Z
-PLandroid/graphics/Outline;->setAlpha(F)V
+HSPLandroid/graphics/NinePatch;->hasAlpha()Z
+HSPLandroid/graphics/Outline;-><init>()V
+HSPLandroid/graphics/Outline;->isEmpty()Z
+HSPLandroid/graphics/Outline;->setAlpha(F)V
 HSPLandroid/graphics/Outline;->setConvexPath(Landroid/graphics/Path;)V
-PLandroid/graphics/Outline;->setEmpty()V
+HSPLandroid/graphics/Outline;->setEmpty()V
 HSPLandroid/graphics/Outline;->setOval(IIII)V
-HSPLandroid/graphics/Outline;->setOval(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/Outline;->setRect(IIII)V
 HSPLandroid/graphics/Outline;->setRect(Landroid/graphics/Rect;)V
-PLandroid/graphics/Outline;->setRoundRect(IIIIF)V
+HSPLandroid/graphics/Outline;->setRoundRect(IIIIF)V
 HSPLandroid/graphics/Outline;->setRoundRect(Landroid/graphics/Rect;F)V
-HPLandroid/graphics/Paint$FontMetrics;-><init>()V
-PLandroid/graphics/Paint$FontMetricsInt;-><init>()V
+HSPLandroid/graphics/Paint$FontMetrics;-><init>()V
+HSPLandroid/graphics/Paint$FontMetricsInt;-><init>()V
 HSPLandroid/graphics/Paint;-><init>()V
 HSPLandroid/graphics/Paint;-><init>(I)V
 HSPLandroid/graphics/Paint;-><init>(Landroid/graphics/Paint;)V
-HSPLandroid/graphics/Paint;->ascent()F
-HSPLandroid/graphics/Paint;->clearShadowLayer()V
-HSPLandroid/graphics/Paint;->descent()F
 HSPLandroid/graphics/Paint;->getAlpha()I
 HSPLandroid/graphics/Paint;->getColor()I
 HSPLandroid/graphics/Paint;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/Paint;->getEndHyphenEdit()I
 HSPLandroid/graphics/Paint;->getFlags()I
 HSPLandroid/graphics/Paint;->getFontFeatureSettings()Ljava/lang/String;
-HSPLandroid/graphics/Paint;->getFontMetrics()Landroid/graphics/Paint$FontMetrics;
 HSPLandroid/graphics/Paint;->getFontMetrics(Landroid/graphics/Paint$FontMetrics;)F
 HSPLandroid/graphics/Paint;->getFontMetricsInt()Landroid/graphics/Paint$FontMetricsInt;
 HSPLandroid/graphics/Paint;->getFontMetricsInt(Landroid/graphics/Paint$FontMetricsInt;)I
-HSPLandroid/graphics/Paint;->getFontVariationSettings()Ljava/lang/String;
-HSPLandroid/graphics/Paint;->getHinting()I
 HSPLandroid/graphics/Paint;->getLetterSpacing()F
 HSPLandroid/graphics/Paint;->getMaskFilter()Landroid/graphics/MaskFilter;
 HSPLandroid/graphics/Paint;->getNativeInstance()J
 HSPLandroid/graphics/Paint;->getRunAdvance(Ljava/lang/CharSequence;IIIIZI)F
 HSPLandroid/graphics/Paint;->getRunAdvance([CIIIIZI)F
 HSPLandroid/graphics/Paint;->getShader()Landroid/graphics/Shader;
-HSPLandroid/graphics/Paint;->getShadowLayerColor()I
-HSPLandroid/graphics/Paint;->getShadowLayerDx()F
-HSPLandroid/graphics/Paint;->getShadowLayerDy()F
-HSPLandroid/graphics/Paint;->getShadowLayerRadius()F
 HSPLandroid/graphics/Paint;->getStartHyphenEdit()I
-HSPLandroid/graphics/Paint;->getStrokeCap()Landroid/graphics/Paint$Cap;
-HSPLandroid/graphics/Paint;->getStrokeJoin()Landroid/graphics/Paint$Join;
-HSPLandroid/graphics/Paint;->getStrokeMiter()F
 HSPLandroid/graphics/Paint;->getStrokeWidth()F
 HSPLandroid/graphics/Paint;->getStyle()Landroid/graphics/Paint$Style;
-HSPLandroid/graphics/Paint;->getTextAlign()Landroid/graphics/Paint$Align;
 HSPLandroid/graphics/Paint;->getTextBounds(Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V
 HSPLandroid/graphics/Paint;->getTextBounds(Ljava/lang/String;IILandroid/graphics/Rect;)V
 HSPLandroid/graphics/Paint;->getTextBounds([CIILandroid/graphics/Rect;)V
 HSPLandroid/graphics/Paint;->getTextLocale()Ljava/util/Locale;
 HSPLandroid/graphics/Paint;->getTextLocales()Landroid/os/LocaleList;
 HSPLandroid/graphics/Paint;->getTextRunAdvances([CIIIIZ[FI)F
-HPLandroid/graphics/Paint;->getTextRunCursor(Ljava/lang/CharSequence;IIZII)I
-HPLandroid/graphics/Paint;->getTextRunCursor(Ljava/lang/String;IIZII)I
-HSPLandroid/graphics/Paint;->getTextScaleX()F
 HSPLandroid/graphics/Paint;->getTextSize()F
-HSPLandroid/graphics/Paint;->getTextSkewX()F
 HSPLandroid/graphics/Paint;->getTypeface()Landroid/graphics/Typeface;
-HSPLandroid/graphics/Paint;->getUnderlinePosition()F
-HSPLandroid/graphics/Paint;->getWordSpacing()F
 HSPLandroid/graphics/Paint;->getXfermode()Landroid/graphics/Xfermode;
-HSPLandroid/graphics/Paint;->hasGlyph(Ljava/lang/String;)Z
-PLandroid/graphics/Paint;->isAntiAlias()Z
-PLandroid/graphics/Paint;->isDither()Z
-HSPLandroid/graphics/Paint;->isElegantTextHeight()Z
-PLandroid/graphics/Paint;->isFilterBitmap()Z
-HSPLandroid/graphics/Paint;->measureText(Ljava/lang/CharSequence;II)F
+HSPLandroid/graphics/Paint;->installXfermode(Landroid/graphics/Xfermode;)Landroid/graphics/Xfermode;
+HSPLandroid/graphics/Paint;->isAntiAlias()Z
+HSPLandroid/graphics/Paint;->isDither()Z
+HSPLandroid/graphics/Paint;->isFilterBitmap()Z
+HSPLandroid/graphics/Paint;->isStrikeThruText()Z
+HSPLandroid/graphics/Paint;->isUnderlineText()Z
 HSPLandroid/graphics/Paint;->measureText(Ljava/lang/String;)F
 HSPLandroid/graphics/Paint;->measureText(Ljava/lang/String;II)F
-HSPLandroid/graphics/Paint;->measureText([CII)F
-HPLandroid/graphics/Paint;->reset()V
 HSPLandroid/graphics/Paint;->set(Landroid/graphics/Paint;)V
-HPLandroid/graphics/Paint;->setARGB(IIII)V
 HSPLandroid/graphics/Paint;->setAlpha(I)V
 HSPLandroid/graphics/Paint;->setAntiAlias(Z)V
 HSPLandroid/graphics/Paint;->setBlendMode(Landroid/graphics/BlendMode;)V
@@ -9995,13 +4580,11 @@
 HSPLandroid/graphics/Paint;->setColorFilter(Landroid/graphics/ColorFilter;)Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/Paint;->setCompatibilityScaling(F)V
 HSPLandroid/graphics/Paint;->setDither(Z)V
-HPLandroid/graphics/Paint;->setElegantTextHeight(Z)V
 HSPLandroid/graphics/Paint;->setEndHyphenEdit(I)V
 HSPLandroid/graphics/Paint;->setFakeBoldText(Z)V
 HSPLandroid/graphics/Paint;->setFilterBitmap(Z)V
 HSPLandroid/graphics/Paint;->setFlags(I)V
 HSPLandroid/graphics/Paint;->setLetterSpacing(F)V
-HSPLandroid/graphics/Paint;->setMaskFilter(Landroid/graphics/MaskFilter;)Landroid/graphics/MaskFilter;
 HSPLandroid/graphics/Paint;->setPathEffect(Landroid/graphics/PathEffect;)Landroid/graphics/PathEffect;
 HSPLandroid/graphics/Paint;->setShader(Landroid/graphics/Shader;)Landroid/graphics/Shader;
 HSPLandroid/graphics/Paint;->setShadowLayer(FFFI)V
@@ -10011,14 +4594,12 @@
 HSPLandroid/graphics/Paint;->setStrokeJoin(Landroid/graphics/Paint$Join;)V
 HSPLandroid/graphics/Paint;->setStrokeWidth(F)V
 HSPLandroid/graphics/Paint;->setStyle(Landroid/graphics/Paint$Style;)V
-HPLandroid/graphics/Paint;->setSubpixelText(Z)V
 HSPLandroid/graphics/Paint;->setTextAlign(Landroid/graphics/Paint$Align;)V
 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
 HSPLandroid/graphics/PaintFlagsDrawFilter;-><init>(II)V
@@ -10026,96 +4607,51 @@
 HSPLandroid/graphics/Path$Op;-><init>(Ljava/lang/String;I)V
 HSPLandroid/graphics/Path;-><init>()V
 HSPLandroid/graphics/Path;-><init>(Landroid/graphics/Path;)V
-HSPLandroid/graphics/Path;->addCircle(FFFLandroid/graphics/Path$Direction;)V
-HSPLandroid/graphics/Path;->addOval(FFFFLandroid/graphics/Path$Direction;)V
-HSPLandroid/graphics/Path;->addOval(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V
-HPLandroid/graphics/Path;->addPath(Landroid/graphics/Path;)V
-HPLandroid/graphics/Path;->addRect(FFFFLandroid/graphics/Path$Direction;)V
-HPLandroid/graphics/Path;->addRect(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V
-HSPLandroid/graphics/Path;->addRoundRect(FFFFFFLandroid/graphics/Path$Direction;)V
+HSPLandroid/graphics/Path;->addRect(FFFFLandroid/graphics/Path$Direction;)V
+HSPLandroid/graphics/Path;->addRect(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V
 HSPLandroid/graphics/Path;->addRoundRect(FFFF[FLandroid/graphics/Path$Direction;)V
 HSPLandroid/graphics/Path;->addRoundRect(Landroid/graphics/RectF;[FLandroid/graphics/Path$Direction;)V
 HSPLandroid/graphics/Path;->approximate(F)[F
-HPLandroid/graphics/Path;->arcTo(FFFFFFZ)V
-HPLandroid/graphics/Path;->arcTo(Landroid/graphics/RectF;FFZ)V
+HSPLandroid/graphics/Path;->arcTo(FFFFFFZ)V
 HSPLandroid/graphics/Path;->close()V
-HPLandroid/graphics/Path;->computeBounds(Landroid/graphics/RectF;Z)V
+HSPLandroid/graphics/Path;->computeBounds(Landroid/graphics/RectF;Z)V
 HSPLandroid/graphics/Path;->cubicTo(FFFFFF)V
-HPLandroid/graphics/Path;->detectSimplePath(FFFFLandroid/graphics/Path$Direction;)V
+HSPLandroid/graphics/Path;->detectSimplePath(FFFFLandroid/graphics/Path$Direction;)V
 HSPLandroid/graphics/Path;->getFillType()Landroid/graphics/Path$FillType;
-HSPLandroid/graphics/Path;->isConvex()Z
 HSPLandroid/graphics/Path;->isEmpty()Z
 HSPLandroid/graphics/Path;->lineTo(FF)V
 HSPLandroid/graphics/Path;->moveTo(FF)V
-HPLandroid/graphics/Path;->mutateNI()J
-HPLandroid/graphics/Path;->offset(FF)V
 HSPLandroid/graphics/Path;->op(Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z
 HSPLandroid/graphics/Path;->op(Landroid/graphics/Path;Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z
-HPLandroid/graphics/Path;->quadTo(FFFF)V
-HSPLandroid/graphics/Path;->rLineTo(FF)V
+HSPLandroid/graphics/Path;->readOnlyNI()J
 HSPLandroid/graphics/Path;->reset()V
 HSPLandroid/graphics/Path;->rewind()V
-HPLandroid/graphics/Path;->set(Landroid/graphics/Path;)V
+HSPLandroid/graphics/Path;->set(Landroid/graphics/Path;)V
 HSPLandroid/graphics/Path;->setFillType(Landroid/graphics/Path$FillType;)V
 HSPLandroid/graphics/Path;->transform(Landroid/graphics/Matrix;)V
 HSPLandroid/graphics/Path;->transform(Landroid/graphics/Matrix;Landroid/graphics/Path;)V
-HSPLandroid/graphics/PathMeasure;-><init>()V
-HSPLandroid/graphics/PathMeasure;-><init>(Landroid/graphics/Path;Z)V
-HSPLandroid/graphics/PathMeasure;->finalize()V
-HSPLandroid/graphics/PathMeasure;->getLength()F
-HSPLandroid/graphics/PathMeasure;->getPosTan(F[F[F)Z
-HPLandroid/graphics/PathMeasure;->getSegment(FFLandroid/graphics/Path;Z)Z
-HSPLandroid/graphics/PathMeasure;->setPath(Landroid/graphics/Path;Z)V
-HPLandroid/graphics/Picture;-><init>()V
-HPLandroid/graphics/Picture;-><init>(J)V
-HPLandroid/graphics/Picture;->beginRecording(II)Landroid/graphics/Canvas;
-HPLandroid/graphics/Picture;->close()V
-HPLandroid/graphics/Picture;->draw(Landroid/graphics/Canvas;)V
-HPLandroid/graphics/Picture;->endRecording()V
-HPLandroid/graphics/Picture;->finalize()V
-HPLandroid/graphics/Picture;->getHeight()I
-HPLandroid/graphics/Picture;->getWidth()I
-HPLandroid/graphics/Picture;->requiresHardwareAcceleration()Z
-HPLandroid/graphics/Picture;->verifyValid()V
-PLandroid/graphics/PixelFormat;->formatHasAlpha(I)Z
-PLandroid/graphics/PixelFormat;->formatToString(I)Ljava/lang/String;
+HSPLandroid/graphics/PixelFormat;->formatHasAlpha(I)Z
 HSPLandroid/graphics/Point$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/Point;
 HSPLandroid/graphics/Point$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/graphics/Point;-><init>()V
 HSPLandroid/graphics/Point;-><init>(II)V
-HSPLandroid/graphics/Point;-><init>(Landroid/graphics/Point;)V
-PLandroid/graphics/Point;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLandroid/graphics/Point;->equals(II)Z
 HSPLandroid/graphics/Point;->equals(Ljava/lang/Object;)Z
-HSPLandroid/graphics/Point;->offset(II)V
+HSPLandroid/graphics/Point;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/graphics/Point;->set(II)V
-HPLandroid/graphics/Point;->toString()Ljava/lang/String;
-PLandroid/graphics/Point;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/graphics/PointF;-><init>()V
 HSPLandroid/graphics/PointF;-><init>(FF)V
-HSPLandroid/graphics/PointF;->length(FF)F
-HPLandroid/graphics/PointF;->set(FF)V
-HPLandroid/graphics/PointF;->set(Landroid/graphics/PointF;)V
+HSPLandroid/graphics/PointF;->set(FF)V
 HSPLandroid/graphics/PorterDuffColorFilter;-><init>(ILandroid/graphics/PorterDuff$Mode;)V
 HSPLandroid/graphics/PorterDuffColorFilter;->createNativeInstance()J
-HSPLandroid/graphics/PorterDuffColorFilter;->equals(Ljava/lang/Object;)Z
 HSPLandroid/graphics/PorterDuffColorFilter;->getColor()I
 HSPLandroid/graphics/PorterDuffColorFilter;->getMode()Landroid/graphics/PorterDuff$Mode;
 HSPLandroid/graphics/PorterDuffXfermode;-><init>(Landroid/graphics/PorterDuff$Mode;)V
-PLandroid/graphics/RadialGradient;-><init>(FFF[I[FLandroid/graphics/Shader$TileMode;)V
-PLandroid/graphics/RadialGradient;-><init>(FFF[J[FLandroid/graphics/Shader$TileMode;Landroid/graphics/ColorSpace;)V
-PLandroid/graphics/RadialGradient;->createNativeInstance(J)J
-PLandroid/graphics/RecordingCanvas;-><init>(Landroid/graphics/RenderNode;II)V
+HSPLandroid/graphics/RecordingCanvas;-><init>(Landroid/graphics/RenderNode;II)V
 HSPLandroid/graphics/RecordingCanvas;->disableZ()V
-HPLandroid/graphics/RecordingCanvas;->drawCircle(Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;)V
+HSPLandroid/graphics/RecordingCanvas;->drawCircle(Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;)V
 HSPLandroid/graphics/RecordingCanvas;->drawRenderNode(Landroid/graphics/RenderNode;)V
-HPLandroid/graphics/RecordingCanvas;->drawRoundRect(Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;)V
-HPLandroid/graphics/RecordingCanvas;->drawTextureLayer(Landroid/view/TextureLayer;)V
-HPLandroid/graphics/RecordingCanvas;->drawWebViewFunctor(I)V
 HSPLandroid/graphics/RecordingCanvas;->enableZ()V
 HSPLandroid/graphics/RecordingCanvas;->finishRecording()J
-HSPLandroid/graphics/RecordingCanvas;->getHeight()I
-HSPLandroid/graphics/RecordingCanvas;->getWidth()I
 HSPLandroid/graphics/RecordingCanvas;->isHardwareAccelerated()Z
 HSPLandroid/graphics/RecordingCanvas;->isRecordingFor(Ljava/lang/Object;)Z
 HSPLandroid/graphics/RecordingCanvas;->obtain(Landroid/graphics/RenderNode;II)Landroid/graphics/RecordingCanvas;
@@ -10123,163 +4659,121 @@
 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;
-HSPLandroid/graphics/Rect$UnflattenHelper;-><clinit>()V
 HSPLandroid/graphics/Rect;-><init>()V
 HSPLandroid/graphics/Rect;-><init>(IIII)V
 HSPLandroid/graphics/Rect;-><init>(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/Rect;->centerX()I
 HSPLandroid/graphics/Rect;->centerY()I
 HSPLandroid/graphics/Rect;->contains(II)Z
-HSPLandroid/graphics/Rect;->contains(Landroid/graphics/Rect;)Z
-HPLandroid/graphics/Rect;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLandroid/graphics/Rect;->equals(Ljava/lang/Object;)Z
 HSPLandroid/graphics/Rect;->exactCenterX()F
 HSPLandroid/graphics/Rect;->exactCenterY()F
-HPLandroid/graphics/Rect;->flattenToString()Ljava/lang/String;
 HSPLandroid/graphics/Rect;->height()I
-HSPLandroid/graphics/Rect;->inset(II)V
-PLandroid/graphics/Rect;->inset(IIII)V
-HSPLandroid/graphics/Rect;->inset(Landroid/graphics/Insets;)V
-PLandroid/graphics/Rect;->inset(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/Rect;->intersect(IIII)Z
-PLandroid/graphics/Rect;->intersect(Landroid/graphics/Rect;)Z
-HPLandroid/graphics/Rect;->intersectUnchecked(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/Rect;->intersects(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/Rect;->isEmpty()Z
 HSPLandroid/graphics/Rect;->offset(II)V
 HSPLandroid/graphics/Rect;->offsetTo(II)V
-HSPLandroid/graphics/Rect;->printShortString(Ljava/io/PrintWriter;)V
 HSPLandroid/graphics/Rect;->readFromParcel(Landroid/os/Parcel;)V
-HPLandroid/graphics/Rect;->readFromProto(Landroid/util/proto/ProtoInputStream;J)V
 HSPLandroid/graphics/Rect;->scale(F)V
 HSPLandroid/graphics/Rect;->set(IIII)V
 HSPLandroid/graphics/Rect;->set(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/Rect;->setEmpty()V
 HSPLandroid/graphics/Rect;->setIntersect(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
-HSPLandroid/graphics/Rect;->toShortString()Ljava/lang/String;
-HSPLandroid/graphics/Rect;->toShortString(Ljava/lang/StringBuilder;)Ljava/lang/String;
 HSPLandroid/graphics/Rect;->toString()Ljava/lang/String;
-HSPLandroid/graphics/Rect;->unflattenFromString(Ljava/lang/String;)Landroid/graphics/Rect;
 HSPLandroid/graphics/Rect;->union(IIII)V
-HPLandroid/graphics/Rect;->union(Landroid/graphics/Rect;)V
+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
 HSPLandroid/graphics/RectF;-><init>(FFFF)V
-PLandroid/graphics/RectF;-><init>(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/RectF;-><init>(Landroid/graphics/RectF;)V
+HSPLandroid/graphics/RectF;-><init>(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/RectF;->centerX()F
 HSPLandroid/graphics/RectF;->centerY()F
-HPLandroid/graphics/RectF;->contains(FF)Z
-HSPLandroid/graphics/RectF;->equals(Ljava/lang/Object;)Z
 HSPLandroid/graphics/RectF;->height()F
 HSPLandroid/graphics/RectF;->inset(FF)V
 HSPLandroid/graphics/RectF;->intersect(FFFF)Z
-PLandroid/graphics/RectF;->isEmpty()Z
+HSPLandroid/graphics/RectF;->isEmpty()Z
 HSPLandroid/graphics/RectF;->offset(FF)V
-HSPLandroid/graphics/RectF;->offsetTo(FF)V
-HPLandroid/graphics/RectF;->roundOut(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/RectF;->set(FFFF)V
 HSPLandroid/graphics/RectF;->set(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/RectF;->set(Landroid/graphics/RectF;)V
 HSPLandroid/graphics/RectF;->setEmpty()V
-HSPLandroid/graphics/RectF;->union(FFFF)V
-HSPLandroid/graphics/RectF;->union(Landroid/graphics/RectF;)V
 HSPLandroid/graphics/RectF;->width()F
 HSPLandroid/graphics/Region$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/Region;
 HSPLandroid/graphics/Region$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/graphics/Region;-><init>()V
-HSPLandroid/graphics/Region;-><init>(IIII)V
 HSPLandroid/graphics/Region;-><init>(J)V
-HPLandroid/graphics/Region;-><init>(Landroid/graphics/Rect;)V
-PLandroid/graphics/Region;->access$000(Landroid/os/Parcel;)J
-HPLandroid/graphics/Region;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/Region;->equals(Ljava/lang/Object;)Z
 HSPLandroid/graphics/Region;->finalize()V
-HSPLandroid/graphics/Region;->getBounds()Landroid/graphics/Rect;
-PLandroid/graphics/Region;->ni()J
-PLandroid/graphics/Region;->obtain()Landroid/graphics/Region;
-HPLandroid/graphics/Region;->obtain(Landroid/graphics/Region;)Landroid/graphics/Region;
-HPLandroid/graphics/Region;->op(IIIILandroid/graphics/Region$Op;)Z
-HPLandroid/graphics/Region;->op(Landroid/graphics/Rect;Landroid/graphics/Region$Op;)Z
-HSPLandroid/graphics/Region;->op(Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z
-HSPLandroid/graphics/Region;->op(Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z
-HPLandroid/graphics/Region;->recycle()V
-HPLandroid/graphics/Region;->scale(F)V
-HPLandroid/graphics/Region;->set(IIII)Z
-HPLandroid/graphics/Region;->set(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/Region;->op(IIIILandroid/graphics/Region$Op;)Z
+HSPLandroid/graphics/Region;->op(Landroid/graphics/Rect;Landroid/graphics/Region$Op;)Z
+HSPLandroid/graphics/Region;->set(IIII)Z
 HSPLandroid/graphics/Region;->set(Landroid/graphics/Region;)Z
 HSPLandroid/graphics/Region;->setEmpty()V
-HSPLandroid/graphics/Region;->setPath(Landroid/graphics/Path;Landroid/graphics/Region;)Z
-HSPLandroid/graphics/Region;->toString()Ljava/lang/String;
-HPLandroid/graphics/Region;->translate(II)V
-PLandroid/graphics/Region;->union(Landroid/graphics/Rect;)Z
-HPLandroid/graphics/Region;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/graphics/RegionIterator;-><init>(Landroid/graphics/Region;)V
-HSPLandroid/graphics/RegionIterator;->finalize()V
-HSPLandroid/graphics/RegionIterator;->next(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/Region;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/graphics/RenderNode$CompositePositionUpdateListener;-><init>([Landroid/graphics/RenderNode$PositionUpdateListener;)V
 HSPLandroid/graphics/RenderNode$CompositePositionUpdateListener;->positionChanged(JIIII)V
 HSPLandroid/graphics/RenderNode$CompositePositionUpdateListener;->positionLost(J)V
-PLandroid/graphics/RenderNode;-><init>(J)V
-HPLandroid/graphics/RenderNode;-><init>(Ljava/lang/String;Landroid/graphics/RenderNode$AnimationHost;)V
+HSPLandroid/graphics/RenderNode;-><init>(J)V
+HSPLandroid/graphics/RenderNode;-><init>(Ljava/lang/String;Landroid/graphics/RenderNode$AnimationHost;)V
 HSPLandroid/graphics/RenderNode;->addAnimator(Landroid/view/RenderNodeAnimator;)V
-PLandroid/graphics/RenderNode;->adopt(J)Landroid/graphics/RenderNode;
-PLandroid/graphics/RenderNode;->beginRecording(II)Landroid/graphics/RecordingCanvas;
+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;->create(Ljava/lang/String;Landroid/graphics/RenderNode$AnimationHost;)Landroid/graphics/RenderNode;
-PLandroid/graphics/RenderNode;->discardDisplayList()V
-PLandroid/graphics/RenderNode;->endRecording()V
-PLandroid/graphics/RenderNode;->getClipToOutline()Z
-PLandroid/graphics/RenderNode;->getElevation()F
-PLandroid/graphics/RenderNode;->getMatrix(Landroid/graphics/Matrix;)V
-PLandroid/graphics/RenderNode;->getRotationX()F
-PLandroid/graphics/RenderNode;->getRotationY()F
-PLandroid/graphics/RenderNode;->getRotationZ()F
-PLandroid/graphics/RenderNode;->getScaleX()F
-PLandroid/graphics/RenderNode;->getScaleY()F
-PLandroid/graphics/RenderNode;->getTranslationX()F
-PLandroid/graphics/RenderNode;->getTranslationY()F
-PLandroid/graphics/RenderNode;->getTranslationZ()F
+HSPLandroid/graphics/RenderNode;->discardDisplayList()V
+HSPLandroid/graphics/RenderNode;->endRecording()V
+HSPLandroid/graphics/RenderNode;->getClipToOutline()Z
+HSPLandroid/graphics/RenderNode;->getElevation()F
+HSPLandroid/graphics/RenderNode;->getInverseMatrix(Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/RenderNode;->getMatrix(Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/RenderNode;->getPivotX()F
+HSPLandroid/graphics/RenderNode;->getPivotY()F
+HSPLandroid/graphics/RenderNode;->getRotationX()F
+HSPLandroid/graphics/RenderNode;->getRotationY()F
+HSPLandroid/graphics/RenderNode;->getRotationZ()F
+HSPLandroid/graphics/RenderNode;->getScaleX()F
+HSPLandroid/graphics/RenderNode;->getScaleY()F
+HSPLandroid/graphics/RenderNode;->getTranslationX()F
+HSPLandroid/graphics/RenderNode;->getTranslationY()F
+HSPLandroid/graphics/RenderNode;->getTranslationZ()F
 HSPLandroid/graphics/RenderNode;->hasDisplayList()Z
-PLandroid/graphics/RenderNode;->hasIdentityMatrix()Z
+HSPLandroid/graphics/RenderNode;->hasIdentityMatrix()Z
+HSPLandroid/graphics/RenderNode;->isAttached()Z
+HSPLandroid/graphics/RenderNode;->isPivotExplicitlySet()Z
+HSPLandroid/graphics/RenderNode;->offsetTopAndBottom(I)Z
+HSPLandroid/graphics/RenderNode;->registerVectorDrawableAnimator(Landroid/view/NativeVectorDrawableAnimator;)V
 HSPLandroid/graphics/RenderNode;->setAlpha(F)Z
-HSPLandroid/graphics/RenderNode;->setAnimationMatrix(Landroid/graphics/Matrix;)Z
-PLandroid/graphics/RenderNode;->setClipToBounds(Z)Z
-PLandroid/graphics/RenderNode;->setClipToOutline(Z)Z
-PLandroid/graphics/RenderNode;->setElevation(F)Z
+HSPLandroid/graphics/RenderNode;->setClipToBounds(Z)Z
+HSPLandroid/graphics/RenderNode;->setClipToOutline(Z)Z
+HSPLandroid/graphics/RenderNode;->setElevation(F)Z
 HSPLandroid/graphics/RenderNode;->setForceDarkAllowed(Z)Z
-PLandroid/graphics/RenderNode;->setHasOverlappingRendering(Z)Z
-PLandroid/graphics/RenderNode;->setLeftTopRightBottom(IIII)Z
+HSPLandroid/graphics/RenderNode;->setHasOverlappingRendering(Z)Z
+HSPLandroid/graphics/RenderNode;->setLayerPaint(Landroid/graphics/Paint;)Z
+HSPLandroid/graphics/RenderNode;->setLayerType(I)Z
+HSPLandroid/graphics/RenderNode;->setLeftTopRightBottom(IIII)Z
 HSPLandroid/graphics/RenderNode;->setOutline(Landroid/graphics/Outline;)Z
-PLandroid/graphics/RenderNode;->setProjectBackwards(Z)Z
-PLandroid/graphics/RenderNode;->setProjectionReceiver(Z)Z
-PLandroid/graphics/RenderNode;->setTranslationX(F)Z
-PLandroid/graphics/RenderNode;->setTranslationY(F)Z
-PLandroid/graphics/RenderNode;->setUsageHint(I)V
+HSPLandroid/graphics/RenderNode;->setPivotX(F)Z
+HSPLandroid/graphics/RenderNode;->setPivotY(F)Z
+HSPLandroid/graphics/RenderNode;->setProjectBackwards(Z)Z
+HSPLandroid/graphics/RenderNode;->setProjectionReceiver(Z)Z
+HSPLandroid/graphics/RenderNode;->setScaleX(F)Z
+HSPLandroid/graphics/RenderNode;->setScaleY(F)Z
+HSPLandroid/graphics/RenderNode;->setTranslationX(F)Z
+HSPLandroid/graphics/RenderNode;->setTranslationY(F)Z
+HSPLandroid/graphics/RenderNode;->setTranslationZ(F)Z
+HSPLandroid/graphics/RenderNode;->setUsageHint(I)V
+HSPLandroid/graphics/Shader;-><init>()V
 HSPLandroid/graphics/Shader;-><init>(Landroid/graphics/ColorSpace;)V
 HSPLandroid/graphics/Shader;->colorSpace()Landroid/graphics/ColorSpace;
 HSPLandroid/graphics/Shader;->convertColors([I)[J
 HSPLandroid/graphics/Shader;->detectColorSpace([J)Landroid/graphics/ColorSpace;
+HSPLandroid/graphics/Shader;->discardNativeInstance()V
 HSPLandroid/graphics/Shader;->getNativeInstance()J
 HSPLandroid/graphics/Shader;->setLocalMatrix(Landroid/graphics/Matrix;)V
 HSPLandroid/graphics/Shader;->verifyNativeInstance()V
-HPLandroid/graphics/SurfaceTexture$1;-><init>(Landroid/graphics/SurfaceTexture;Landroid/os/Looper;Landroid/os/Handler$Callback;ZLandroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V
-HPLandroid/graphics/SurfaceTexture$1;->handleMessage(Landroid/os/Message;)V
-PLandroid/graphics/SurfaceTexture;-><init>(I)V
-PLandroid/graphics/SurfaceTexture;-><init>(IZ)V
-HPLandroid/graphics/SurfaceTexture;-><init>(Z)V
-PLandroid/graphics/SurfaceTexture;->finalize()V
-PLandroid/graphics/SurfaceTexture;->getTransformMatrix([F)V
-PLandroid/graphics/SurfaceTexture;->isSingleBuffered()Z
-HPLandroid/graphics/SurfaceTexture;->postEventFromNative(Ljava/lang/ref/WeakReference;)V
-PLandroid/graphics/SurfaceTexture;->release()V
-HPLandroid/graphics/SurfaceTexture;->setDefaultBufferSize(II)V
-HPLandroid/graphics/SurfaceTexture;->setOnFrameAvailableListener(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V
-HPLandroid/graphics/SurfaceTexture;->setOnFrameAvailableListener(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;Landroid/os/Handler;)V
-PLandroid/graphics/SurfaceTexture;->updateTexImage()V
-HSPLandroid/graphics/SweepGradient;-><init>(FF[J[FLandroid/graphics/ColorSpace;)V
-HSPLandroid/graphics/SweepGradient;->createNativeInstance(J)J
 HSPLandroid/graphics/TemporaryBuffer;->obtain(I)[C
 HSPLandroid/graphics/TemporaryBuffer;->recycle([C)V
-HSPLandroid/graphics/Typeface$Builder;-><init>(Landroid/content/res/AssetManager;Ljava/lang/String;)V
 HSPLandroid/graphics/Typeface$Builder;-><init>(Landroid/content/res/AssetManager;Ljava/lang/String;ZI)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;
@@ -10287,56 +4781,45 @@
 HSPLandroid/graphics/Typeface$CustomFallbackBuilder;->build()Landroid/graphics/Typeface;
 HSPLandroid/graphics/Typeface$CustomFallbackBuilder;->setStyle(Landroid/graphics/fonts/FontStyle;)Landroid/graphics/Typeface$CustomFallbackBuilder;
 HSPLandroid/graphics/Typeface;-><init>(J)V
+HSPLandroid/graphics/Typeface;-><init>(JLandroid/graphics/Typeface$1;)V
+HSPLandroid/graphics/Typeface;->access$500()Ljava/lang/Object;
+HSPLandroid/graphics/Typeface;->access$600()Landroid/util/LruCache;
+HSPLandroid/graphics/Typeface;->access$700([JII)J
 HSPLandroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;
 HSPLandroid/graphics/Typeface;->create(Ljava/lang/String;I)Landroid/graphics/Typeface;
-HSPLandroid/graphics/Typeface;->createFromAsset(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;
-HSPLandroid/graphics/Typeface;->createFromFamiliesWithDefault([Landroid/graphics/FontFamily;Ljava/lang/String;II)Landroid/graphics/Typeface;
-HSPLandroid/graphics/Typeface;->createFromResources(Landroid/content/res/FontResourcesParser$FamilyResourceEntry;Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;
-HSPLandroid/graphics/Typeface;->createWeightStyle(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;
-HSPLandroid/graphics/Typeface;->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;
+HSPLandroid/graphics/Xfermode;-><init>()V
+HSPLandroid/graphics/drawable/-$$Lambda$AnimatedVectorDrawable$VectorDrawableAnimatorRT$PzjgSeyQweoFjbEZJP80UteZqm8;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V
 HSPLandroid/graphics/drawable/-$$Lambda$AnimatedVectorDrawable$VectorDrawableAnimatorRT$PzjgSeyQweoFjbEZJP80UteZqm8;->run()V
 HSPLandroid/graphics/drawable/-$$Lambda$BitmapDrawable$LMqt8JvxZ4giSOIRAtlCKDg39Jw;->onHeaderDecoded(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
-PLandroid/graphics/drawable/-$$Lambda$NinePatchDrawable$yQvfm7FAkslD5wdGFysjgwt8cLE;-><init>(Landroid/graphics/Rect;)V
-PLandroid/graphics/drawable/-$$Lambda$NinePatchDrawable$yQvfm7FAkslD5wdGFysjgwt8cLE;->onHeaderDecoded(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
-PLandroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;-><init>(I)V
+HSPLandroid/graphics/drawable/-$$Lambda$NinePatchDrawable$yQvfm7FAkslD5wdGFysjgwt8cLE;-><init>(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/-$$Lambda$NinePatchDrawable$yQvfm7FAkslD5wdGFysjgwt8cLE;->onHeaderDecoded(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;-><init>(I)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;-><init>(Landroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;Landroid/graphics/drawable/AdaptiveIconDrawable;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;->canApplyTheme()Z
-PLandroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;->setDensity(I)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;->setDensity(I)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;-><init>(Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;Landroid/graphics/drawable/AdaptiveIconDrawable;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->canApplyTheme()Z
-PLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->canConstantState()Z
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->canConstantState()Z
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->invalidateCache()V
-HPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->isStateful()Z
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->newDrawable()Landroid/graphics/drawable/Drawable;
-PLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
-PLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->setDensity(I)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->setDensity(I)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;-><init>()V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;-><init>(Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;-><init>(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
-PLandroid/graphics/drawable/AdaptiveIconDrawable;->addLayer(ILandroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->addLayer(ILandroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->createConstantState(Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->draw(Landroid/graphics/Canvas;)V
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getBackground()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getExtraInsetFraction()F
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getForeground()Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getIconMask()Landroid/graphics/Path;
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getIntrinsicHeight()I
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getIntrinsicWidth()I
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->inflateLayers(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->invalidateSelf()V
-HPLandroid/graphics/drawable/AdaptiveIconDrawable;->isStateful()Z
-HPLandroid/graphics/drawable/AdaptiveIconDrawable;->jumpToCurrentState()V
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
-HPLandroid/graphics/drawable/AdaptiveIconDrawable;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->resumeChildInvalidation()V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->suspendChildInvalidation()V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateLayerBounds(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateLayerBoundsInternal(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateLayerFromTypedArray(Landroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;Landroid/content/res/TypedArray;)V
@@ -10348,16 +4831,8 @@
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->generateTransitionKey(II)J
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->getKeyframeIdAt(I)I
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->indexOfKeyframe([I)I
-HPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->indexOfTransition(II)I
-HPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->isTransitionReversed(II)Z
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->mutate()V
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
-HPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->transitionHasReversibleFlag(II)Z
-HPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimationDrawableTransition;-><init>(Landroid/graphics/drawable/AnimationDrawable;ZZ)V
-HPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimationDrawableTransition;->start()V
-HPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimationDrawableTransition;->stop()V
-HPLandroid/graphics/drawable/AnimatedStateListDrawable$Transition;-><init>()V
-HPLandroid/graphics/drawable/AnimatedStateListDrawable$Transition;-><init>(Landroid/graphics/drawable/AnimatedStateListDrawable$1;)V
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable;-><init>()V
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable;-><init>(Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable;-><init>(Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;Landroid/content/res/Resources;Landroid/graphics/drawable/AnimatedStateListDrawable$1;)V
@@ -10376,12 +4851,9 @@
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->parseTransition(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)I
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->selectTransition(I)Z
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
-HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->setVisible(ZZ)Z
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$1;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$1;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$2;->onAnimationEnd(Landroid/animation/Animator;)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$2;->onAnimationStart(Landroid/animation/Animator;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator;-><init>(IFLjava/lang/String;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/animation/Animator;
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;Landroid/graphics/drawable/Drawable$Callback;Landroid/content/res/Resources;)V
@@ -10390,7 +4862,6 @@
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->inflatePendingAnimators(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->prepareLocalAnimator(I)Landroid/animation/Animator;
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->prepareLocalAnimators(Landroid/animation/AnimatorSet;Landroid/content/res/Resources;)V
@@ -10399,93 +4870,72 @@
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->createNativeChildAnimator(JJLandroid/animation/ObjectAnimator;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->createRTAnimator(Landroid/animation/ObjectAnimator;J)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->createRTAnimatorForFullPath(Landroid/animation/ObjectAnimator;Landroid/graphics/drawable/VectorDrawable$VFullPath;J)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->createRTAnimatorForGroup([Landroid/animation/PropertyValuesHolder;Landroid/animation/ObjectAnimator;Landroid/graphics/drawable/VectorDrawable$VGroup;J)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->createRTAnimatorForRootGroup([Landroid/animation/PropertyValuesHolder;Landroid/animation/ObjectAnimator;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;J)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->createRTAnimatorForGroup([Landroid/animation/PropertyValuesHolder;Landroid/animation/ObjectAnimator;Landroid/graphics/drawable/VectorDrawable$VGroup;J)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->end()V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->endAnimation()V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->getAnimatorNativePtr()J
-HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->handlePendingAction(I)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->init(Landroid/animation/AnimatorSet;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->invalidateOwningView()V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->isInfinite()Z
-HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->isRunning()Z
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->isStarted()Z
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->lambda$callOnFinished$0(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->onAnimationEnd(I)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->parseAnimatorSet(Landroid/animation/AnimatorSet;J)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->pause()V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->recordLastSeenTarget(Landroid/graphics/RecordingCanvas;)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->reset()V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->setListener(Landroid/animation/Animator$AnimatorListener;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->start()V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->startAnimation()V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->transferPendingActions(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorUI;->init(Landroid/animation/AnimatorSet;)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorUI;->invalidateOwningView()V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorUI;->isInfinite()Z
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorUI;->onDraw(Landroid/graphics/Canvas;)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorUI;->setListener(Landroid/animation/Animator$AnimatorListener;)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorUI;->start()V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->useLastSeenTarget()Z
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->useTarget(Landroid/graphics/RenderNode;)Z
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;-><init>()V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;Landroid/content/res/Resources;Landroid/graphics/drawable/AnimatedVectorDrawable$1;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->access$1000(JJ)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->access$1100(JIFF)J
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->access$1400(JIFF)J
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->access$1800(JJJJJII)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->access$1900(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->access$2000(J)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->access$400()Z
-HPLandroid/graphics/drawable/AnimatedVectorDrawable;->access$700(Landroid/graphics/drawable/AnimatedVectorDrawable;)Ljava/util/ArrayList;
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->access$600(Landroid/animation/Animator;Ljava/lang/String;Landroid/graphics/drawable/VectorDrawable;Z)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->access$800()J
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->access$900(Landroid/graphics/drawable/AnimatedVectorDrawable;)Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->canApplyTheme()Z
-HPLandroid/graphics/drawable/AnimatedVectorDrawable;->clearAnimationCallbacks()V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->clearMutated()V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->containsSameValueType(Landroid/animation/PropertyValuesHolder;Landroid/util/Property;)Z
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->draw(Landroid/graphics/Canvas;)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable;->fallbackOntoUI()V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable;->forceAnimationOnUI()V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->ensureAnimatorSet()V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->getIntrinsicHeight()I
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->getIntrinsicWidth()I
-HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->getOpacity()I
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->isRunning()Z
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->isStateful()Z
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable;->onStateChange([I)Z
-HPLandroid/graphics/drawable/AnimatedVectorDrawable;->registerAnimationCallback(Landroid/graphics/drawable/Animatable2$AnimationCallback;)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable;->removeAnimatorSetListener()V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable;->reset()V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
-HPLandroid/graphics/drawable/AnimatedVectorDrawable;->setHotspot(FF)V
-HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->setVisible(ZZ)Z
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->shouldIgnoreInvalidAnimation()Z
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->start()V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->stop()V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->updateAnimatorProperty(Landroid/animation/Animator;Ljava/lang/String;Landroid/graphics/drawable/VectorDrawable;Z)V
-HPLandroid/graphics/drawable/AnimationDrawable$AnimationState;-><init>(Landroid/graphics/drawable/AnimationDrawable$AnimationState;Landroid/graphics/drawable/AnimationDrawable;Landroid/content/res/Resources;)V
-HPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->access$002(Landroid/graphics/drawable/AnimationDrawable$AnimationState;Z)Z
-HPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->addFrame(Landroid/graphics/drawable/Drawable;I)V
-HSPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->growArray(II)V
+HSPLandroid/graphics/drawable/AnimationDrawable$AnimationState;-><init>(Landroid/graphics/drawable/AnimationDrawable$AnimationState;Landroid/graphics/drawable/AnimationDrawable;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->access$000(Landroid/graphics/drawable/AnimationDrawable$AnimationState;)Z
+HSPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->access$002(Landroid/graphics/drawable/AnimationDrawable$AnimationState;Z)Z
+HSPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->addFrame(Landroid/graphics/drawable/Drawable;I)V
 HSPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
-HPLandroid/graphics/drawable/AnimationDrawable;-><init>()V
-HPLandroid/graphics/drawable/AnimationDrawable;-><init>(Landroid/graphics/drawable/AnimationDrawable$AnimationState;Landroid/content/res/Resources;)V
-HPLandroid/graphics/drawable/AnimationDrawable;->addFrame(Landroid/graphics/drawable/Drawable;I)V
-HPLandroid/graphics/drawable/AnimationDrawable;->clearMutated()V
-HSPLandroid/graphics/drawable/AnimationDrawable;->cloneConstantState()Landroid/graphics/drawable/AnimationDrawable$AnimationState;
-HSPLandroid/graphics/drawable/AnimationDrawable;->cloneConstantState()Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;
-HPLandroid/graphics/drawable/AnimationDrawable;->getDuration(I)I
-HPLandroid/graphics/drawable/AnimationDrawable;->getNumberOfFrames()I
+HSPLandroid/graphics/drawable/AnimationDrawable;-><init>()V
+HSPLandroid/graphics/drawable/AnimationDrawable;-><init>(Landroid/graphics/drawable/AnimationDrawable$AnimationState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/AnimationDrawable;-><init>(Landroid/graphics/drawable/AnimationDrawable$AnimationState;Landroid/content/res/Resources;Landroid/graphics/drawable/AnimationDrawable$1;)V
 HSPLandroid/graphics/drawable/AnimationDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/AnimationDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HPLandroid/graphics/drawable/AnimationDrawable;->isRunning()Z
-HSPLandroid/graphics/drawable/AnimationDrawable;->mutate()Landroid/graphics/drawable/Drawable;
-HPLandroid/graphics/drawable/AnimationDrawable;->nextFrame(Z)V
-HPLandroid/graphics/drawable/AnimationDrawable;->run()V
 HSPLandroid/graphics/drawable/AnimationDrawable;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
 HSPLandroid/graphics/drawable/AnimationDrawable;->setFrame(IZZ)V
-HPLandroid/graphics/drawable/AnimationDrawable;->setOneShot(Z)V
 HSPLandroid/graphics/drawable/AnimationDrawable;->setVisible(ZZ)Z
-HPLandroid/graphics/drawable/AnimationDrawable;->start()V
-HPLandroid/graphics/drawable/AnimationDrawable;->stop()V
 HSPLandroid/graphics/drawable/AnimationDrawable;->unscheduleSelf(Ljava/lang/Runnable;)V
+HSPLandroid/graphics/drawable/AnimationDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/BitmapDrawable$BitmapState;-><init>(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/drawable/BitmapDrawable$BitmapState;-><init>(Landroid/graphics/drawable/BitmapDrawable$BitmapState;)V
 HSPLandroid/graphics/drawable/BitmapDrawable$BitmapState;->canApplyTheme()Z
@@ -10494,36 +4944,30 @@
 HSPLandroid/graphics/drawable/BitmapDrawable$BitmapState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/BitmapDrawable;-><init>()V
 HSPLandroid/graphics/drawable/BitmapDrawable;-><init>(Landroid/content/res/Resources;Landroid/graphics/Bitmap;)V
-HPLandroid/graphics/drawable/BitmapDrawable;-><init>(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;-><init>(Landroid/graphics/drawable/BitmapDrawable$BitmapState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;-><init>(Landroid/graphics/drawable/BitmapDrawable$BitmapState;Landroid/content/res/Resources;Landroid/graphics/drawable/BitmapDrawable$1;)V
-PLandroid/graphics/drawable/BitmapDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->canApplyTheme()Z
-PLandroid/graphics/drawable/BitmapDrawable;->clearMutated()V
 HSPLandroid/graphics/drawable/BitmapDrawable;->computeBitmapSize()V
 HSPLandroid/graphics/drawable/BitmapDrawable;->draw(Landroid/graphics/Canvas;)V
-HPLandroid/graphics/drawable/BitmapDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/BitmapDrawable;->getBitmap()Landroid/graphics/Bitmap;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getChangingConfigurations()I
-HPLandroid/graphics/drawable/BitmapDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
+HSPLandroid/graphics/drawable/BitmapDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getIntrinsicHeight()I
 HSPLandroid/graphics/drawable/BitmapDrawable;->getIntrinsicWidth()I
 HSPLandroid/graphics/drawable/BitmapDrawable;->getOpacity()I
 HSPLandroid/graphics/drawable/BitmapDrawable;->getOutline(Landroid/graphics/Outline;)V
-HSPLandroid/graphics/drawable/BitmapDrawable;->getPaint()Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/BitmapDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->init(Landroid/graphics/drawable/BitmapDrawable$BitmapState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->isAutoMirrored()Z
 HSPLandroid/graphics/drawable/BitmapDrawable;->isStateful()Z
-PLandroid/graphics/drawable/BitmapDrawable;->lambda$updateStateFromTypedArray$2(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->lambda$updateStateFromTypedArray$2(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/BitmapDrawable;->needMirroring()Z
 HSPLandroid/graphics/drawable/BitmapDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/BitmapDrawable;->setAlpha(I)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->setAutoMirrored(Z)V
-HSPLandroid/graphics/drawable/BitmapDrawable;->setBitmap(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->setDither(Z)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->setGravity(I)V
@@ -10534,18 +4978,6 @@
 HSPLandroid/graphics/drawable/BitmapDrawable;->updateLocalState(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;I)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
-HSPLandroid/graphics/drawable/ClipDrawable$ClipState;-><init>(Landroid/graphics/drawable/ClipDrawable$ClipState;Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/ClipDrawable$ClipState;->access$002(Landroid/graphics/drawable/ClipDrawable$ClipState;[I)[I
-HSPLandroid/graphics/drawable/ClipDrawable$ClipState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/ClipDrawable;-><init>(Landroid/graphics/drawable/ClipDrawable$ClipState;Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/ClipDrawable;-><init>(Landroid/graphics/drawable/ClipDrawable$ClipState;Landroid/content/res/Resources;Landroid/graphics/drawable/ClipDrawable$1;)V
-HSPLandroid/graphics/drawable/ClipDrawable;-><init>(Landroid/graphics/drawable/Drawable;II)V
-HPLandroid/graphics/drawable/ClipDrawable;->draw(Landroid/graphics/Canvas;)V
-HSPLandroid/graphics/drawable/ClipDrawable;->getOpacity()I
-HSPLandroid/graphics/drawable/ClipDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HPLandroid/graphics/drawable/ClipDrawable;->onLevelChange(I)Z
-HSPLandroid/graphics/drawable/ClipDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
-HSPLandroid/graphics/drawable/ClipDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/ColorDrawable$ColorState;-><init>()V
 HSPLandroid/graphics/drawable/ColorDrawable$ColorState;-><init>(Landroid/graphics/drawable/ColorDrawable$ColorState;)V
 HSPLandroid/graphics/drawable/ColorDrawable$ColorState;->canApplyTheme()Z
@@ -10562,7 +4994,6 @@
 HSPLandroid/graphics/drawable/ColorDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/ColorDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/ColorDrawable;->getColor()I
-HSPLandroid/graphics/drawable/ColorDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/ColorDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/ColorDrawable;->getOpacity()I
 HSPLandroid/graphics/drawable/ColorDrawable;->getOutline(Landroid/graphics/Outline;)V
@@ -10572,24 +5003,14 @@
 HSPLandroid/graphics/drawable/ColorDrawable;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/ColorDrawable;->setAlpha(I)V
 HSPLandroid/graphics/drawable/ColorDrawable;->setColor(I)V
-HSPLandroid/graphics/drawable/ColorDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
-HSPLandroid/graphics/drawable/ColorDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/ColorDrawable;->updateLocalState(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/ColorDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
-HPLandroid/graphics/drawable/ColorStateListDrawable$ColorStateListDrawableState;->getChangingConfigurations()I
-HPLandroid/graphics/drawable/ColorStateListDrawable$ColorStateListDrawableState;->isStateful()Z
-HPLandroid/graphics/drawable/ColorStateListDrawable;->draw(Landroid/graphics/Canvas;)V
-HPLandroid/graphics/drawable/ColorStateListDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/graphics/drawable/ColorStateListDrawable;->isStateful()Z
-HPLandroid/graphics/drawable/ColorStateListDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
-HPLandroid/graphics/drawable/ColorStateListDrawable;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/Drawable$ConstantState;-><init>()V
 HSPLandroid/graphics/drawable/Drawable$ConstantState;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/Drawable$ConstantState;->newDrawable(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/Drawable;-><init>()V
-PLandroid/graphics/drawable/Drawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/Drawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/Drawable;->canApplyTheme()Z
-HPLandroid/graphics/drawable/Drawable;->clearColorFilter()V
 HSPLandroid/graphics/drawable/Drawable;->clearMutated()V
 HSPLandroid/graphics/drawable/Drawable;->copyBounds(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/Drawable;->createFromXmlForDensity(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
@@ -10610,7 +5031,6 @@
 HSPLandroid/graphics/drawable/Drawable;->getOutline(Landroid/graphics/Outline;)V
 HSPLandroid/graphics/drawable/Drawable;->getPadding(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/drawable/Drawable;->getState()[I
-HPLandroid/graphics/drawable/Drawable;->hasFocusStateSpecified()Z
 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
@@ -10621,7 +5041,6 @@
 HSPLandroid/graphics/drawable/Drawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/Drawable;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
 HSPLandroid/graphics/drawable/Drawable;->onBoundsChange(Landroid/graphics/Rect;)V
-HPLandroid/graphics/drawable/Drawable;->onLayoutDirectionChanged(I)Z
 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;
@@ -10643,24 +5062,22 @@
 HSPLandroid/graphics/drawable/Drawable;->setSrcDensityOverride(I)V
 HSPLandroid/graphics/drawable/Drawable;->setState([I)Z
 HSPLandroid/graphics/drawable/Drawable;->setTint(I)V
-HSPLandroid/graphics/drawable/Drawable;->setTintMode(Landroid/graphics/PorterDuff$Mode;)V
 HSPLandroid/graphics/drawable/Drawable;->setVisible(ZZ)Z
-HPLandroid/graphics/drawable/Drawable;->setXfermode(Landroid/graphics/Xfermode;)V
-HPLandroid/graphics/drawable/Drawable;->unscheduleSelf(Ljava/lang/Runnable;)V
+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;
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;-><init>()V
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;-><init>(Landroid/graphics/drawable/DrawableContainer$1;)V
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->unwrap()Landroid/graphics/drawable/Drawable$Callback;
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->wrap(Landroid/graphics/drawable/Drawable$Callback;)Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;-><init>(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/DrawableContainer;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->access$100(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
 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
-HPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->computeConstantSize()V
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->clearMutated()V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->createAllFutures()V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getCapacity()I
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChangingConfigurations()I
@@ -10668,22 +5085,23 @@
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChildCount()I
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getConstantPadding()Landroid/graphics/Rect;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getOpacity()I
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->growArray(II)V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->invalidateCache()V
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->isConstantSize()Z
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->isStateful()Z
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->mutate()V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->prepareDrawable(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->setConstantSize(Z)V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->setEnterFadeDuration(I)V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->setExitFadeDuration(I)V
-HPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->setLayoutDirection(II)Z
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->setVariablePadding(Z)V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->updateDensity(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/DrawableContainer;-><init>()V
-HSPLandroid/graphics/drawable/DrawableContainer;->animate(Z)V
-HPLandroid/graphics/drawable/DrawableContainer;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/DrawableContainer;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/DrawableContainer;->clearMutated()V
 HSPLandroid/graphics/drawable/DrawableContainer;->cloneConstantState()Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;
 HSPLandroid/graphics/drawable/DrawableContainer;->draw(Landroid/graphics/Canvas;)V
-HPLandroid/graphics/drawable/DrawableContainer;->getAlpha()I
 HSPLandroid/graphics/drawable/DrawableContainer;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/DrawableContainer;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/DrawableContainer;->getCurrent()Landroid/graphics/drawable/Drawable;
@@ -10693,7 +5111,6 @@
 HSPLandroid/graphics/drawable/DrawableContainer;->getMinimumHeight()I
 HSPLandroid/graphics/drawable/DrawableContainer;->getMinimumWidth()I
 HSPLandroid/graphics/drawable/DrawableContainer;->getOpacity()I
-HSPLandroid/graphics/drawable/DrawableContainer;->getOpticalInsets()Landroid/graphics/Insets;
 HSPLandroid/graphics/drawable/DrawableContainer;->getOutline(Landroid/graphics/Outline;)V
 HSPLandroid/graphics/drawable/DrawableContainer;->getPadding(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/drawable/DrawableContainer;->initializeDrawableForDisplay(Landroid/graphics/drawable/Drawable;)V
@@ -10701,29 +5118,25 @@
 HSPLandroid/graphics/drawable/DrawableContainer;->isAutoMirrored()Z
 HSPLandroid/graphics/drawable/DrawableContainer;->isStateful()Z
 HSPLandroid/graphics/drawable/DrawableContainer;->jumpToCurrentState()V
+HSPLandroid/graphics/drawable/DrawableContainer;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->needsMirroring()Z
 HSPLandroid/graphics/drawable/DrawableContainer;->onBoundsChange(Landroid/graphics/Rect;)V
-HPLandroid/graphics/drawable/DrawableContainer;->onLayoutDirectionChanged(I)Z
-HSPLandroid/graphics/drawable/DrawableContainer;->onLevelChange(I)Z
 HSPLandroid/graphics/drawable/DrawableContainer;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/DrawableContainer;->selectDrawable(I)Z
-HSPLandroid/graphics/drawable/DrawableContainer;->setAlpha(I)V
 HSPLandroid/graphics/drawable/DrawableContainer;->setAutoMirrored(Z)V
-HPLandroid/graphics/drawable/DrawableContainer;->setColorFilter(Landroid/graphics/ColorFilter;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->setColorFilter(Landroid/graphics/ColorFilter;)V
 HSPLandroid/graphics/drawable/DrawableContainer;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
-HPLandroid/graphics/drawable/DrawableContainer;->setCurrentIndex(I)V
 HSPLandroid/graphics/drawable/DrawableContainer;->setDither(Z)V
-HPLandroid/graphics/drawable/DrawableContainer;->setHotspot(FF)V
-HSPLandroid/graphics/drawable/DrawableContainer;->setTintBlendMode(Landroid/graphics/BlendMode;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->setHotspot(FF)V
 HSPLandroid/graphics/drawable/DrawableContainer;->setTintList(Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/DrawableContainer;->setVisible(ZZ)Z
-HPLandroid/graphics/drawable/DrawableContainer;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V
 HSPLandroid/graphics/drawable/DrawableContainer;->updateDensity(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/DrawableInflater;-><init>(Landroid/content/res/Resources;Ljava/lang/ClassLoader;)V
 HSPLandroid/graphics/drawable/DrawableInflater;->inflateFromClass(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableInflater;->inflateFromTag(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableInflater;->inflateFromXmlForDensity(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;-><init>(Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;->access$000(Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;)[I
 HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;->access$002(Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;[I)[I
 HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;->canConstantState()Z
@@ -10731,14 +5144,12 @@
 HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;->onDensityChanged(II)V
 HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;->setDensity(I)V
-HSPLandroid/graphics/drawable/DrawableWrapper;-><init>(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;-><init>(Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->clearMutated()V
 HSPLandroid/graphics/drawable/DrawableWrapper;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->getChangingConfigurations()I
-HPLandroid/graphics/drawable/DrawableWrapper;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/DrawableWrapper;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/DrawableWrapper;->getDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableWrapper;->getIntrinsicHeight()I
@@ -10750,16 +5161,12 @@
 HSPLandroid/graphics/drawable/DrawableWrapper;->isStateful()Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->jumpToCurrentState()V
 HSPLandroid/graphics/drawable/DrawableWrapper;->mutate()Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/DrawableWrapper;->mutateConstantState()Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;
 HSPLandroid/graphics/drawable/DrawableWrapper;->onBoundsChange(Landroid/graphics/Rect;)V
-HPLandroid/graphics/drawable/DrawableWrapper;->onLayoutDirectionChanged(I)Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->onLevelChange(I)Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->onStateChange([I)Z
-HPLandroid/graphics/drawable/DrawableWrapper;->setAlpha(I)V
-HPLandroid/graphics/drawable/DrawableWrapper;->setColorFilter(Landroid/graphics/ColorFilter;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->setColorFilter(Landroid/graphics/ColorFilter;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->setDrawable(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/graphics/drawable/DrawableWrapper;->setHotspot(FF)V
-HSPLandroid/graphics/drawable/DrawableWrapper;->setTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->setHotspot(FF)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->setVisible(ZZ)Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->updateLocalState(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
@@ -10778,19 +5185,18 @@
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->setDensity(I)V
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->setGradientColors([I)V
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->setSolidColors(Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->setStroke(ILandroid/content/res/ColorStateList;FF)V
 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$1;)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;->buildRing(Landroid/graphics/drawable/GradientDrawable$GradientState;)Landroid/graphics/Path;
+HSPLandroid/graphics/drawable/GradientDrawable;->buildPathIfDirty()V
 HSPLandroid/graphics/drawable/GradientDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/GradientDrawable;->clearMutated()V
 HSPLandroid/graphics/drawable/GradientDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->ensureValidRect()Z
 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
@@ -10803,32 +5209,21 @@
 HSPLandroid/graphics/drawable/GradientDrawable;->isOpaque(I)Z
 HSPLandroid/graphics/drawable/GradientDrawable;->isOpaqueForState()Z
 HSPLandroid/graphics/drawable/GradientDrawable;->isStateful()Z
-PLandroid/graphics/drawable/GradientDrawable;->modulateAlpha(I)I
+HSPLandroid/graphics/drawable/GradientDrawable;->modulateAlpha(I)I
 HSPLandroid/graphics/drawable/GradientDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/GradientDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/drawable/GradientDrawable;->onLevelChange(I)Z
 HSPLandroid/graphics/drawable/GradientDrawable;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/GradientDrawable;->setAlpha(I)V
-HPLandroid/graphics/drawable/GradientDrawable;->setAntiAlias(Z)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setColor(I)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setColor(Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
-HPLandroid/graphics/drawable/GradientDrawable;->setColors([I)V
-HPLandroid/graphics/drawable/GradientDrawable;->setColors([I[F)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setCornerRadii([F)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setCornerRadius(F)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setDither(Z)V
-HSPLandroid/graphics/drawable/GradientDrawable;->setGradientType(I)V
-HPLandroid/graphics/drawable/GradientDrawable;->setOrientation(Landroid/graphics/drawable/GradientDrawable$Orientation;)V
-HSPLandroid/graphics/drawable/GradientDrawable;->setShape(I)V
-HPLandroid/graphics/drawable/GradientDrawable;->setStroke(II)V
-HPLandroid/graphics/drawable/GradientDrawable;->setStroke(IIFF)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setStroke(ILandroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setStroke(ILandroid/content/res/ColorStateList;FF)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setStrokeInternal(IIFF)V
-HPLandroid/graphics/drawable/GradientDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
-HPLandroid/graphics/drawable/GradientDrawable;->setXfermode(Landroid/graphics/Xfermode;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateDrawableCorners(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateGradientDrawableGradient(Landroid/content/res/Resources;Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateGradientDrawablePadding(Landroid/content/res/TypedArray;)V
@@ -10837,47 +5232,35 @@
 HSPLandroid/graphics/drawable/GradientDrawable;->updateGradientDrawableStroke(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateLocalState(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
-HPLandroid/graphics/drawable/Icon$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/drawable/Icon;
-HPLandroid/graphics/drawable/Icon$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/graphics/drawable/Icon$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/drawable/Icon;
+HSPLandroid/graphics/drawable/Icon$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/graphics/drawable/Icon;-><init>(I)V
-HPLandroid/graphics/drawable/Icon;-><init>(Landroid/os/Parcel;)V
-PLandroid/graphics/drawable/Icon;-><init>(Landroid/os/Parcel;Landroid/graphics/drawable/Icon$1;)V
-PLandroid/graphics/drawable/Icon;->createFromStream(Ljava/io/InputStream;)Landroid/graphics/drawable/Icon;
-HSPLandroid/graphics/drawable/Icon;->createWithAdaptiveBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/drawable/Icon;
+HSPLandroid/graphics/drawable/Icon;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/graphics/drawable/Icon;-><init>(Landroid/os/Parcel;Landroid/graphics/drawable/Icon$1;)V
 HSPLandroid/graphics/drawable/Icon;->createWithBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/drawable/Icon;
 HSPLandroid/graphics/drawable/Icon;->createWithResource(Landroid/content/Context;I)Landroid/graphics/drawable/Icon;
 HSPLandroid/graphics/drawable/Icon;->createWithResource(Ljava/lang/String;I)Landroid/graphics/drawable/Icon;
 HSPLandroid/graphics/drawable/Icon;->getBitmap()Landroid/graphics/Bitmap;
 HSPLandroid/graphics/drawable/Icon;->getResId()I
 HSPLandroid/graphics/drawable/Icon;->getResPackage()Ljava/lang/String;
-HPLandroid/graphics/drawable/Icon;->getResources()Landroid/content/res/Resources;
 HSPLandroid/graphics/drawable/Icon;->getType()I
-PLandroid/graphics/drawable/Icon;->hasTint()Z
-HPLandroid/graphics/drawable/Icon;->loadDrawable(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;
-HPLandroid/graphics/drawable/Icon;->loadDrawableAsUser(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
-HPLandroid/graphics/drawable/Icon;->loadDrawableAsync(Landroid/content/Context;Landroid/graphics/drawable/Icon$OnDrawableLoadedListener;Landroid/os/Handler;)V
-HPLandroid/graphics/drawable/Icon;->loadDrawableInner(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;
-HPLandroid/graphics/drawable/Icon;->sameAs(Landroid/graphics/drawable/Icon;)Z
-PLandroid/graphics/drawable/Icon;->scaleDownIfNecessary(II)V
+HSPLandroid/graphics/drawable/Icon;->hasTint()Z
+HSPLandroid/graphics/drawable/Icon;->scaleDownIfNecessary(II)V
 HSPLandroid/graphics/drawable/Icon;->scaleDownIfNecessary(Landroid/graphics/Bitmap;II)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/drawable/Icon;->setBitmap(Landroid/graphics/Bitmap;)V
-HPLandroid/graphics/drawable/Icon;->setTint(I)Landroid/graphics/drawable/Icon;
-HPLandroid/graphics/drawable/Icon;->setTintMode(Landroid/graphics/PorterDuff$Mode;)Landroid/graphics/drawable/Icon;
-HPLandroid/graphics/drawable/Icon;->toString()Ljava/lang/String;
-PLandroid/graphics/drawable/Icon;->typeToString(I)Ljava/lang/String;
 HSPLandroid/graphics/drawable/Icon;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/graphics/drawable/Icon;->writeToStream(Ljava/io/OutputStream;)V
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;-><init>(Landroid/graphics/drawable/InsetDrawable$InsetState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->access$000(Landroid/graphics/drawable/InsetDrawable$InsetState;)[I
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->access$002(Landroid/graphics/drawable/InsetDrawable$InsetState;[I)[I
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->onDensityChanged(II)V
 HSPLandroid/graphics/drawable/InsetDrawable$InsetValue;-><init>()V
 HSPLandroid/graphics/drawable/InsetDrawable$InsetValue;-><init>(FI)V
+HSPLandroid/graphics/drawable/InsetDrawable$InsetValue;->clone()Landroid/graphics/drawable/InsetDrawable$InsetValue;
 HSPLandroid/graphics/drawable/InsetDrawable$InsetValue;->getDimension(I)I
 HSPLandroid/graphics/drawable/InsetDrawable$InsetValue;->scaleFromDensity(II)V
 HSPLandroid/graphics/drawable/InsetDrawable;-><init>()V
-HSPLandroid/graphics/drawable/InsetDrawable;-><init>(Landroid/graphics/drawable/Drawable;I)V
 HSPLandroid/graphics/drawable/InsetDrawable;-><init>(Landroid/graphics/drawable/Drawable;IIII)V
 HSPLandroid/graphics/drawable/InsetDrawable;-><init>(Landroid/graphics/drawable/InsetDrawable$InsetState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/InsetDrawable;-><init>(Landroid/graphics/drawable/InsetDrawable$InsetState;Landroid/content/res/Resources;Landroid/graphics/drawable/InsetDrawable$1;)V
@@ -10897,10 +5280,12 @@
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;-><init>(I)V
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;Landroid/graphics/drawable/LayerDrawable;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->canApplyTheme()Z
-PLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->setDensity(I)V
+HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->setDensity(I)V
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;-><init>(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/graphics/drawable/LayerDrawable;Landroid/content/res/Resources;)V
-PLandroid/graphics/drawable/LayerDrawable$LayerState;->access$000(Landroid/graphics/drawable/LayerDrawable$LayerState;)[I
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->access$000(Landroid/graphics/drawable/LayerDrawable$LayerState;)[I
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->access$002(Landroid/graphics/drawable/LayerDrawable$LayerState;[I)[I
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->access$100(Landroid/graphics/drawable/LayerDrawable$LayerState;)Z
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->access$102(Landroid/graphics/drawable/LayerDrawable$LayerState;Z)Z
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->access$200(Landroid/graphics/drawable/LayerDrawable$LayerState;)I
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->access$202(Landroid/graphics/drawable/LayerDrawable$LayerState;I)I
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->applyDensityScaling(II)V
@@ -10910,7 +5295,6 @@
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->getOpacity()I
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->invalidateCache()V
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->isStateful()Z
-HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->onDensityChanged(II)V
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->setDensity(I)V
@@ -10926,10 +5310,10 @@
 HSPLandroid/graphics/drawable/LayerDrawable;->computeNestedPadding(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->computeStackedPadding(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->createConstantState(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/LayerDrawable$LayerState;
+HSPLandroid/graphics/drawable/LayerDrawable;->createLayer(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/LayerDrawable$ChildDrawable;
 HSPLandroid/graphics/drawable/LayerDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->ensurePadding()V
 HSPLandroid/graphics/drawable/LayerDrawable;->findDrawableByLayerId(I)Landroid/graphics/drawable/Drawable;
-HPLandroid/graphics/drawable/LayerDrawable;->findIndexByLayerId(I)I
 HSPLandroid/graphics/drawable/LayerDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/LayerDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/LayerDrawable;->getDrawable(I)Landroid/graphics/drawable/Drawable;
@@ -10948,66 +5332,60 @@
 HSPLandroid/graphics/drawable/LayerDrawable;->jumpToCurrentState()V
 HSPLandroid/graphics/drawable/LayerDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/LayerDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
-HPLandroid/graphics/drawable/LayerDrawable;->onLayoutDirectionChanged(I)Z
 HSPLandroid/graphics/drawable/LayerDrawable;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/LayerDrawable;->refreshChildPadding(ILandroid/graphics/drawable/LayerDrawable$ChildDrawable;)Z
 HSPLandroid/graphics/drawable/LayerDrawable;->refreshPadding()V
 HSPLandroid/graphics/drawable/LayerDrawable;->resolveGravity(IIIII)I
-PLandroid/graphics/drawable/LayerDrawable;->resumeChildInvalidation()V
-HSPLandroid/graphics/drawable/LayerDrawable;->setAlpha(I)V
+HSPLandroid/graphics/drawable/LayerDrawable;->resumeChildInvalidation()V
 HSPLandroid/graphics/drawable/LayerDrawable;->setAutoMirrored(Z)V
 HSPLandroid/graphics/drawable/LayerDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
-HPLandroid/graphics/drawable/LayerDrawable;->setDither(Z)V
-HSPLandroid/graphics/drawable/LayerDrawable;->setDrawable(ILandroid/graphics/drawable/Drawable;)V
-HPLandroid/graphics/drawable/LayerDrawable;->setDrawableByLayerId(ILandroid/graphics/drawable/Drawable;)Z
-HSPLandroid/graphics/drawable/LayerDrawable;->setHotspot(FF)V
-HPLandroid/graphics/drawable/LayerDrawable;->setId(II)V
-HSPLandroid/graphics/drawable/LayerDrawable;->setLayerInset(IIIII)V
 HSPLandroid/graphics/drawable/LayerDrawable;->setPaddingMode(I)V
-HSPLandroid/graphics/drawable/LayerDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->setVisible(ZZ)Z
-PLandroid/graphics/drawable/LayerDrawable;->suspendChildInvalidation()V
+HSPLandroid/graphics/drawable/LayerDrawable;->suspendChildInvalidation()V
 HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerBounds(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerBoundsInternal(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerFromTypedArray(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
-PLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;-><init>()V
+HSPLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;-><init>()V
+HSPLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;-><init>(Landroid/graphics/NinePatch;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;-><init>(Landroid/graphics/NinePatch;Landroid/graphics/Rect;Landroid/graphics/Rect;ZZ)V
 HSPLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;-><init>(Landroid/graphics/drawable/NinePatchDrawable$NinePatchState;)V
-PLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;->canApplyTheme()Z
-PLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;->getChangingConfigurations()I
-HSPLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;->newDrawable()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
-PLandroid/graphics/drawable/NinePatchDrawable;-><init>(Landroid/graphics/drawable/NinePatchDrawable$NinePatchState;Landroid/content/res/Resources;)V
-PLandroid/graphics/drawable/NinePatchDrawable;-><init>(Landroid/graphics/drawable/NinePatchDrawable$NinePatchState;Landroid/content/res/Resources;Landroid/graphics/drawable/NinePatchDrawable$1;)V
-PLandroid/graphics/drawable/NinePatchDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;-><init>()V
+HSPLandroid/graphics/drawable/NinePatchDrawable;-><init>(Landroid/content/res/Resources;Landroid/graphics/Bitmap;[BLandroid/graphics/Rect;Landroid/graphics/Rect;Ljava/lang/String;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;-><init>(Landroid/graphics/drawable/NinePatchDrawable$NinePatchState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;-><init>(Landroid/graphics/drawable/NinePatchDrawable$NinePatchState;Landroid/content/res/Resources;Landroid/graphics/drawable/NinePatchDrawable$1;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->canApplyTheme()Z
-PLandroid/graphics/drawable/NinePatchDrawable;->clearMutated()V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->clearMutated()V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->computeBitmapSize()V
-HPLandroid/graphics/drawable/NinePatchDrawable;->draw(Landroid/graphics/Canvas;)V
-HPLandroid/graphics/drawable/NinePatchDrawable;->getAlpha()I
+HSPLandroid/graphics/drawable/NinePatchDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
-PLandroid/graphics/drawable/NinePatchDrawable;->getIntrinsicHeight()I
-PLandroid/graphics/drawable/NinePatchDrawable;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getIntrinsicHeight()I
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getIntrinsicWidth()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getOpacity()I
-HPLandroid/graphics/drawable/NinePatchDrawable;->getOpticalInsets()Landroid/graphics/Insets;
-PLandroid/graphics/drawable/NinePatchDrawable;->getOutline(Landroid/graphics/Outline;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getOutline(Landroid/graphics/Outline;)V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getPadding(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getPaint()Landroid/graphics/Paint;
-PLandroid/graphics/drawable/NinePatchDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HPLandroid/graphics/drawable/NinePatchDrawable;->isAutoMirrored()Z
-PLandroid/graphics/drawable/NinePatchDrawable;->isStateful()Z
-PLandroid/graphics/drawable/NinePatchDrawable;->lambda$updateStateFromTypedArray$0(Landroid/graphics/Rect;Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->isAutoMirrored()Z
+HSPLandroid/graphics/drawable/NinePatchDrawable;->isStateful()Z
+HSPLandroid/graphics/drawable/NinePatchDrawable;->lambda$updateStateFromTypedArray$0(Landroid/graphics/Rect;Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->mutate()Landroid/graphics/drawable/Drawable;
-HPLandroid/graphics/drawable/NinePatchDrawable;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/NinePatchDrawable;->setAlpha(I)V
-HPLandroid/graphics/drawable/NinePatchDrawable;->setAutoMirrored(Z)V
-HPLandroid/graphics/drawable/NinePatchDrawable;->setDither(Z)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->needsMirroring()Z
+HSPLandroid/graphics/drawable/NinePatchDrawable;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/NinePatchDrawable;->setAutoMirrored(Z)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->setDither(Z)V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->updateLocalState(Landroid/content/res/Resources;)V
-PLandroid/graphics/drawable/NinePatchDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
-HPLandroid/graphics/drawable/RippleComponent;->getTargetRadius(Landroid/graphics/Rect;)F
-HPLandroid/graphics/drawable/RippleComponent;->onBoundsChange()V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/RippleComponent;-><init>(Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/RippleComponent;->getTargetRadius(Landroid/graphics/Rect;)F
+HSPLandroid/graphics/drawable/RippleComponent;->invalidateSelf()V
+HSPLandroid/graphics/drawable/RippleComponent;->setup(FI)V
 HSPLandroid/graphics/drawable/RippleDrawable$RippleState;-><init>(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/graphics/drawable/RippleDrawable;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/RippleDrawable$RippleState;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/RippleDrawable$RippleState;->canApplyTheme()Z
@@ -11020,10 +5398,13 @@
 HSPLandroid/graphics/drawable/RippleDrawable;-><init>(Landroid/graphics/drawable/RippleDrawable$RippleState;Landroid/content/res/Resources;Landroid/graphics/drawable/RippleDrawable$1;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/RippleDrawable;->cancelExitingRipples()V
+HSPLandroid/graphics/drawable/RippleDrawable;->clearHotspots()V
 HSPLandroid/graphics/drawable/RippleDrawable;->createConstantState(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/LayerDrawable$LayerState;
 HSPLandroid/graphics/drawable/RippleDrawable;->createConstantState(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/RippleDrawable$RippleState;
 HSPLandroid/graphics/drawable/RippleDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->drawBackgroundAndRipples(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/RippleDrawable;->drawContent(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/RippleDrawable;->getDirtyBounds()Landroid/graphics/Rect;
 HSPLandroid/graphics/drawable/RippleDrawable;->getMaskType()I
@@ -11033,21 +5414,21 @@
 HSPLandroid/graphics/drawable/RippleDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->invalidateSelf()V
 HSPLandroid/graphics/drawable/RippleDrawable;->invalidateSelf(Z)V
+HSPLandroid/graphics/drawable/RippleDrawable;->isBounded()Z
 HSPLandroid/graphics/drawable/RippleDrawable;->isProjected()Z
 HSPLandroid/graphics/drawable/RippleDrawable;->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;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/RippleDrawable;->pruneRipples()V
 HSPLandroid/graphics/drawable/RippleDrawable;->setBackgroundActive(ZZZ)V
 HSPLandroid/graphics/drawable/RippleDrawable;->setColor(Landroid/content/res/ColorStateList;)V
-HPLandroid/graphics/drawable/RippleDrawable;->setDrawableByLayerId(ILandroid/graphics/drawable/Drawable;)Z
-HPLandroid/graphics/drawable/RippleDrawable;->setForceSoftware(Z)V
 HSPLandroid/graphics/drawable/RippleDrawable;->setHotspot(FF)V
 HSPLandroid/graphics/drawable/RippleDrawable;->setHotspotBounds(IIII)V
 HSPLandroid/graphics/drawable/RippleDrawable;->setPaddingMode(I)V
-PLandroid/graphics/drawable/RippleDrawable;->setRippleActive(Z)V
+HSPLandroid/graphics/drawable/RippleDrawable;->setRippleActive(Z)V
 HSPLandroid/graphics/drawable/RippleDrawable;->setVisible(ZZ)Z
 HSPLandroid/graphics/drawable/RippleDrawable;->tryRippleEnter()V
 HSPLandroid/graphics/drawable/RippleDrawable;->tryRippleExit()V
@@ -11055,6 +5436,7 @@
 HSPLandroid/graphics/drawable/RippleDrawable;->updateMaskShaderIfNeeded()V
 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;-><init>(Landroid/graphics/drawable/RippleForeground;)V
 HSPLandroid/graphics/drawable/RippleForeground$1;->onAnimationEnd(Landroid/animation/Animator;)V
 HSPLandroid/graphics/drawable/RippleForeground$2;->get(Landroid/graphics/drawable/RippleForeground;)Ljava/lang/Float;
 HSPLandroid/graphics/drawable/RippleForeground$2;->get(Ljava/lang/Object;)Ljava/lang/Object;
@@ -11069,13 +5451,34 @@
 HSPLandroid/graphics/drawable/RippleForeground$4;->setValue(Landroid/graphics/drawable/RippleForeground;F)V
 HSPLandroid/graphics/drawable/RippleForeground$4;->setValue(Ljava/lang/Object;F)V
 HSPLandroid/graphics/drawable/RippleForeground;-><init>(Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/Rect;FFZ)V
+HSPLandroid/graphics/drawable/RippleForeground;->access$002(Landroid/graphics/drawable/RippleForeground;Z)Z
+HSPLandroid/graphics/drawable/RippleForeground;->access$100(Landroid/graphics/drawable/RippleForeground;)V
+HSPLandroid/graphics/drawable/RippleForeground;->access$200(Landroid/graphics/drawable/RippleForeground;)V
+HSPLandroid/graphics/drawable/RippleForeground;->access$300(Landroid/graphics/drawable/RippleForeground;)Ljava/util/ArrayList;
+HSPLandroid/graphics/drawable/RippleForeground;->access$400(Landroid/graphics/drawable/RippleForeground;)V
+HSPLandroid/graphics/drawable/RippleForeground;->access$500(Landroid/graphics/drawable/RippleForeground;)F
+HSPLandroid/graphics/drawable/RippleForeground;->access$502(Landroid/graphics/drawable/RippleForeground;F)F
+HSPLandroid/graphics/drawable/RippleForeground;->access$600(Landroid/graphics/drawable/RippleForeground;)V
+HSPLandroid/graphics/drawable/RippleForeground;->access$700(Landroid/graphics/drawable/RippleForeground;)F
+HSPLandroid/graphics/drawable/RippleForeground;->access$702(Landroid/graphics/drawable/RippleForeground;F)F
+HSPLandroid/graphics/drawable/RippleForeground;->access$802(Landroid/graphics/drawable/RippleForeground;F)F
+HSPLandroid/graphics/drawable/RippleForeground;->access$900(Landroid/graphics/drawable/RippleForeground;)F
+HSPLandroid/graphics/drawable/RippleForeground;->access$902(Landroid/graphics/drawable/RippleForeground;F)F
 HSPLandroid/graphics/drawable/RippleForeground;->clampStartingPosition()V
+HSPLandroid/graphics/drawable/RippleForeground;->clearHwProps()V
+HSPLandroid/graphics/drawable/RippleForeground;->computeFadeOutDelay()J
 HSPLandroid/graphics/drawable/RippleForeground;->draw(Landroid/graphics/Canvas;Landroid/graphics/Paint;)V
-HPLandroid/graphics/drawable/RippleForeground;->drawSoftware(Landroid/graphics/Canvas;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/drawable/RippleForeground;->drawHardware(Landroid/graphics/RecordingCanvas;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/drawable/RippleForeground;->end()V
-HPLandroid/graphics/drawable/RippleForeground;->getBounds(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/RippleForeground;->enter()V
+HSPLandroid/graphics/drawable/RippleForeground;->exit()V
+HSPLandroid/graphics/drawable/RippleForeground;->getBounds(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/RippleForeground;->getCurrentRadius()F
+HSPLandroid/graphics/drawable/RippleForeground;->getCurrentX()F
+HSPLandroid/graphics/drawable/RippleForeground;->getCurrentY()F
 HSPLandroid/graphics/drawable/RippleForeground;->hasFinishedExit()Z
 HSPLandroid/graphics/drawable/RippleForeground;->move(FF)V
+HSPLandroid/graphics/drawable/RippleForeground;->onAnimationPropertyChanged()V
 HSPLandroid/graphics/drawable/RippleForeground;->onTargetRadiusChanged(F)V
 HSPLandroid/graphics/drawable/RippleForeground;->pruneHwFinished()V
 HSPLandroid/graphics/drawable/RippleForeground;->pruneSwFinished()V
@@ -11086,33 +5489,34 @@
 HSPLandroid/graphics/drawable/RippleForeground;->startSoftwareExit()V
 HSPLandroid/graphics/drawable/RippleForeground;->switchToUiThreadAnimation()V
 HSPLandroid/graphics/drawable/RotateDrawable$RotateState;-><init>(Landroid/graphics/drawable/RotateDrawable$RotateState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/RotateDrawable$RotateState;->access$002(Landroid/graphics/drawable/RotateDrawable$RotateState;[I)[I
 HSPLandroid/graphics/drawable/RotateDrawable$RotateState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/RotateDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/RotateDrawable;-><init>()V
+HSPLandroid/graphics/drawable/RotateDrawable;-><init>(Landroid/graphics/drawable/RotateDrawable$RotateState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/RotateDrawable;-><init>(Landroid/graphics/drawable/RotateDrawable$RotateState;Landroid/content/res/Resources;Landroid/graphics/drawable/RotateDrawable$1;)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;
-HSPLandroid/graphics/drawable/RotateDrawable;->onLevelChange(I)Z
 HSPLandroid/graphics/drawable/RotateDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/RotateDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/ScaleDrawable$ScaleState;-><init>(Landroid/graphics/drawable/ScaleDrawable$ScaleState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/ScaleDrawable$ScaleState;->access$000(Landroid/graphics/drawable/ScaleDrawable$ScaleState;)[I
 HSPLandroid/graphics/drawable/ScaleDrawable$ScaleState;->access$002(Landroid/graphics/drawable/ScaleDrawable$ScaleState;[I)[I
 HSPLandroid/graphics/drawable/ScaleDrawable$ScaleState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/ScaleDrawable;-><init>()V
 HSPLandroid/graphics/drawable/ScaleDrawable;-><init>(Landroid/graphics/drawable/ScaleDrawable$ScaleState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/ScaleDrawable;-><init>(Landroid/graphics/drawable/ScaleDrawable$ScaleState;Landroid/content/res/Resources;Landroid/graphics/drawable/ScaleDrawable$1;)V
 HSPLandroid/graphics/drawable/ScaleDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/ScaleDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/ScaleDrawable;->getPercent(Landroid/content/res/TypedArray;IF)F
 HSPLandroid/graphics/drawable/ScaleDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/ScaleDrawable;->mutateConstantState()Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;
 HSPLandroid/graphics/drawable/ScaleDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/drawable/ScaleDrawable;->onLevelChange(I)Z
 HSPLandroid/graphics/drawable/ScaleDrawable;->updateLocalState()V
 HSPLandroid/graphics/drawable/ScaleDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/ScaleDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
-HSPLandroid/graphics/drawable/ShapeDrawable;-><init>()V
+HSPLandroid/graphics/drawable/ShapeDrawable$ShapeState;-><init>()V
+HSPLandroid/graphics/drawable/ShapeDrawable;-><init>(Landroid/graphics/drawable/ShapeDrawable$ShapeState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/ShapeDrawable;-><init>(Landroid/graphics/drawable/shapes/Shape;)V
 HSPLandroid/graphics/drawable/ShapeDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/ShapeDrawable;->getAlpha()I
-HSPLandroid/graphics/drawable/ShapeDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/ShapeDrawable;->getIntrinsicHeight()I
 HSPLandroid/graphics/drawable/ShapeDrawable;->getIntrinsicWidth()I
 HSPLandroid/graphics/drawable/ShapeDrawable;->getOpacity()I
@@ -11120,12 +5524,10 @@
 HSPLandroid/graphics/drawable/ShapeDrawable;->getPadding(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/drawable/ShapeDrawable;->getPaint()Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/ShapeDrawable;->isStateful()Z
-HPLandroid/graphics/drawable/ShapeDrawable;->mutate()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/ShapeDrawable;->modulateAlpha(II)I
 HSPLandroid/graphics/drawable/ShapeDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/ShapeDrawable;->onDraw(Landroid/graphics/drawable/shapes/Shape;Landroid/graphics/Canvas;Landroid/graphics/Paint;)V
-HSPLandroid/graphics/drawable/ShapeDrawable;->setAlpha(I)V
-HSPLandroid/graphics/drawable/ShapeDrawable;->setShape(Landroid/graphics/drawable/shapes/Shape;)V
-HPLandroid/graphics/drawable/ShapeDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/ShapeDrawable;->updateLocalState()V
 HSPLandroid/graphics/drawable/ShapeDrawable;->updateShape()V
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;-><init>(Landroid/graphics/drawable/StateListDrawable$StateListState;Landroid/graphics/drawable/StateListDrawable;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->addStateSet([ILandroid/graphics/drawable/Drawable;)I
@@ -11137,7 +5539,6 @@
 HSPLandroid/graphics/drawable/StateListDrawable;-><init>(Landroid/graphics/drawable/StateListDrawable$StateListState;)V
 HSPLandroid/graphics/drawable/StateListDrawable;-><init>(Landroid/graphics/drawable/StateListDrawable$StateListState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/StateListDrawable;-><init>(Landroid/graphics/drawable/StateListDrawable$StateListState;Landroid/content/res/Resources;Landroid/graphics/drawable/StateListDrawable$1;)V
-HPLandroid/graphics/drawable/StateListDrawable;->addState([ILandroid/graphics/drawable/Drawable;)V
 HSPLandroid/graphics/drawable/StateListDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/StateListDrawable;->clearMutated()V
 HSPLandroid/graphics/drawable/StateListDrawable;->cloneConstantState()Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;
@@ -11150,18 +5551,8 @@
 HSPLandroid/graphics/drawable/StateListDrawable;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/StateListDrawable;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
 HSPLandroid/graphics/drawable/StateListDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
-HSPLandroid/graphics/drawable/TransitionDrawable$TransitionState;->getChangingConfigurations()I
-HSPLandroid/graphics/drawable/TransitionDrawable;-><init>([Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/TransitionDrawable$TransitionState;-><init>(Landroid/graphics/drawable/TransitionDrawable$TransitionState;Landroid/graphics/drawable/TransitionDrawable;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/TransitionDrawable;->createConstantState(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/LayerDrawable$LayerState;
-HSPLandroid/graphics/drawable/TransitionDrawable;->draw(Landroid/graphics/Canvas;)V
-HPLandroid/graphics/drawable/TransitionDrawable;->resetTransition()V
-HSPLandroid/graphics/drawable/TransitionDrawable;->setCrossFadeEnabled(Z)V
-HSPLandroid/graphics/drawable/TransitionDrawable;->startTransition(I)V
-HPLandroid/graphics/drawable/VectorDrawable$VClipPath;->canApplyTheme()Z
-HPLandroid/graphics/drawable/VectorDrawable$VClipPath;->getNativePtr()J
-HPLandroid/graphics/drawable/VectorDrawable$VClipPath;->getNativeSize()I
-HPLandroid/graphics/drawable/VectorDrawable$VClipPath;->isStateful()Z
-HPLandroid/graphics/drawable/VectorDrawable$VClipPath;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;-><init>()V
 HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;-><init>(Landroid/graphics/drawable/VectorDrawable$VFullPath;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->applyTheme(Landroid/content/res/Resources$Theme;)V
@@ -11174,16 +5565,6 @@
 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;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup$2;->setValue(Landroid/graphics/drawable/VectorDrawable$VGroup;F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup$2;->setValue(Ljava/lang/Object;F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup$3;->setValue(Landroid/graphics/drawable/VectorDrawable$VGroup;F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup$3;->setValue(Ljava/lang/Object;F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup$4;->setValue(Landroid/graphics/drawable/VectorDrawable$VGroup;F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup$4;->setValue(Ljava/lang/Object;F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup$5;->setValue(Landroid/graphics/drawable/VectorDrawable$VGroup;F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup$5;->setValue(Ljava/lang/Object;F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup$8;->setValue(Landroid/graphics/drawable/VectorDrawable$VGroup;F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup$8;->setValue(Ljava/lang/Object;F)V
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;-><init>()V
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;-><init>(Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/util/ArrayMap;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->access$100(Landroid/graphics/drawable/VectorDrawable$VGroup;)I
@@ -11195,25 +5576,18 @@
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getNativePtr()J
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getNativeSize()I
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getProperty(Ljava/lang/String;)Landroid/util/Property;
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getPropertyIndex(Ljava/lang/String;)I
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->inflate(Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->isStateful()Z
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->onStateChange([I)Z
-HPLandroid/graphics/drawable/VectorDrawable$VGroup;->setRotation(F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup;->setScaleX(F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup;->setScaleY(F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup;->setTranslateX(F)V
-HPLandroid/graphics/drawable/VectorDrawable$VGroup;->setTranslateY(F)V
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->setTree(Lcom/android/internal/util/VirtualRefBasePtr;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VObject;-><init>()V
-HPLandroid/graphics/drawable/VectorDrawable$VObject;->isTreeValid()Z
 HSPLandroid/graphics/drawable/VectorDrawable$VObject;->setTree(Lcom/android/internal/util/VirtualRefBasePtr;)V
-HPLandroid/graphics/drawable/VectorDrawable$VPath$1;->set(Landroid/graphics/drawable/VectorDrawable$VPath;Landroid/util/PathParser$PathData;)V
-HPLandroid/graphics/drawable/VectorDrawable$VPath$1;->set(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VPath;-><init>()V
 HSPLandroid/graphics/drawable/VectorDrawable$VPath;-><init>(Landroid/graphics/drawable/VectorDrawable$VPath;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VPath;->getPathName()Ljava/lang/String;
-HPLandroid/graphics/drawable/VectorDrawable$VPath;->setPathData(Landroid/util/PathParser$PathData;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VPath;->getProperty(Ljava/lang/String;)Landroid/util/Property;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;-><init>(Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->access$000(Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VGroup;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->applyDensityScaling(II)V
@@ -11226,7 +5600,6 @@
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getAlpha()F
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getNativeRenderer()J
-HPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getProperty(Ljava/lang/String;)Landroid/util/Property;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->isStateful()Z
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
@@ -11245,7 +5618,6 @@
 HSPLandroid/graphics/drawable/VectorDrawable;->access$1900(J[FI)Z
 HSPLandroid/graphics/drawable/VectorDrawable;->access$2000(JLjava/lang/String;)V
 HSPLandroid/graphics/drawable/VectorDrawable;->access$2100(JFFFFFFF)V
-HPLandroid/graphics/drawable/VectorDrawable;->access$2300(JF)V
 HSPLandroid/graphics/drawable/VectorDrawable;->access$300(J)J
 HSPLandroid/graphics/drawable/VectorDrawable;->access$3900(JLjava/lang/String;I)V
 HSPLandroid/graphics/drawable/VectorDrawable;->access$400(JJ)J
@@ -11265,13 +5637,11 @@
 HSPLandroid/graphics/drawable/VectorDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/VectorDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getChangingConfigurations()I
-HPLandroid/graphics/drawable/VectorDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/VectorDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/VectorDrawable;->getIntrinsicHeight()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getIntrinsicWidth()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getNativeTree()J
 HSPLandroid/graphics/drawable/VectorDrawable;->getOpacity()I
-HSPLandroid/graphics/drawable/VectorDrawable;->getOpticalInsets()Landroid/graphics/Insets;
 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
@@ -11279,9 +5649,9 @@
 HSPLandroid/graphics/drawable/VectorDrawable;->isAutoMirrored()Z
 HSPLandroid/graphics/drawable/VectorDrawable;->isStateful()Z
 HSPLandroid/graphics/drawable/VectorDrawable;->mutate()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/VectorDrawable;->needMirroring()Z
 HSPLandroid/graphics/drawable/VectorDrawable;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/VectorDrawable;->setAllowCaching(Z)V
-HSPLandroid/graphics/drawable/VectorDrawable;->setAlpha(I)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setAutoMirrored(Z)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
@@ -11290,55 +5660,57 @@
 HSPLandroid/graphics/drawable/VectorDrawable;->updateLocalState(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/VectorDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/shapes/OvalShape;-><init>()V
-HSPLandroid/graphics/drawable/shapes/OvalShape;->draw(Landroid/graphics/Canvas;Landroid/graphics/Paint;)V
-HSPLandroid/graphics/drawable/shapes/OvalShape;->getOutline(Landroid/graphics/Outline;)V
-HPLandroid/graphics/drawable/shapes/PathShape;-><init>(Landroid/graphics/Path;FF)V
-HPLandroid/graphics/drawable/shapes/PathShape;->clone()Landroid/graphics/drawable/shapes/PathShape;
-HPLandroid/graphics/drawable/shapes/PathShape;->clone()Landroid/graphics/drawable/shapes/Shape;
-HPLandroid/graphics/drawable/shapes/PathShape;->draw(Landroid/graphics/Canvas;Landroid/graphics/Paint;)V
-HPLandroid/graphics/drawable/shapes/PathShape;->onResize(FF)V
-HSPLandroid/graphics/drawable/shapes/RectShape;->onResize(FF)V
-HPLandroid/graphics/drawable/shapes/RectShape;->rect()Landroid/graphics/RectF;
-HSPLandroid/graphics/drawable/shapes/RoundRectShape;-><init>([FLandroid/graphics/RectF;[F)V
-HPLandroid/graphics/drawable/shapes/RoundRectShape;->draw(Landroid/graphics/Canvas;Landroid/graphics/Paint;)V
-HPLandroid/graphics/drawable/shapes/RoundRectShape;->getOutline(Landroid/graphics/Outline;)V
-HSPLandroid/graphics/drawable/shapes/RoundRectShape;->onResize(FF)V
-HPLandroid/graphics/drawable/shapes/Shape;->resize(FF)V
+HSPLandroid/graphics/drawable/shapes/RectShape;-><init>()V
+HSPLandroid/graphics/drawable/shapes/RectShape;->rect()Landroid/graphics/RectF;
+HSPLandroid/graphics/drawable/shapes/Shape;-><init>()V
+HSPLandroid/graphics/drawable/shapes/Shape;->resize(FF)V
 HSPLandroid/graphics/fonts/Font$Builder;-><init>(Landroid/content/res/AssetManager;Ljava/lang/String;ZI)V
-HSPLandroid/graphics/fonts/Font$Builder;-><init>(Landroid/content/res/Resources;I)V
 HSPLandroid/graphics/fonts/Font$Builder;-><init>(Landroid/os/ParcelFileDescriptor;)V
 HSPLandroid/graphics/fonts/Font$Builder;-><init>(Landroid/os/ParcelFileDescriptor;JJ)V
 HSPLandroid/graphics/fonts/Font$Builder;-><init>(Ljava/nio/ByteBuffer;)V
 HSPLandroid/graphics/fonts/Font$Builder;->build()Landroid/graphics/fonts/Font;
+HSPLandroid/graphics/fonts/Font$Builder;->setFontVariationSettings([Landroid/graphics/fonts/FontVariationAxis;)Landroid/graphics/fonts/Font$Builder;
 HSPLandroid/graphics/fonts/Font$Builder;->setSlant(I)Landroid/graphics/fonts/Font$Builder;
 HSPLandroid/graphics/fonts/Font$Builder;->setTtcIndex(I)Landroid/graphics/fonts/Font$Builder;
 HSPLandroid/graphics/fonts/Font$Builder;->setWeight(I)Landroid/graphics/fonts/Font$Builder;
 HSPLandroid/graphics/fonts/Font;-><init>(JLjava/nio/ByteBuffer;Ljava/io/File;Landroid/graphics/fonts/FontStyle;I[Landroid/graphics/fonts/FontVariationAxis;Ljava/lang/String;)V
+HSPLandroid/graphics/fonts/Font;->getAxes()[Landroid/graphics/fonts/FontVariationAxis;
+HSPLandroid/graphics/fonts/Font;->getNativePtr()J
+HSPLandroid/graphics/fonts/Font;->getStyle()Landroid/graphics/fonts/FontStyle;
+HSPLandroid/graphics/fonts/Font;->getTtcIndex()I
 HSPLandroid/graphics/fonts/FontFamily$Builder;-><init>(Landroid/graphics/fonts/Font;)V
-HSPLandroid/graphics/fonts/FontFamily$Builder;->addFont(Landroid/graphics/fonts/Font;)Landroid/graphics/fonts/FontFamily$Builder;
 HSPLandroid/graphics/fonts/FontFamily$Builder;->build()Landroid/graphics/fonts/FontFamily;
 HSPLandroid/graphics/fonts/FontFamily$Builder;->build(Ljava/lang/String;IZ)Landroid/graphics/fonts/FontFamily;
+HSPLandroid/graphics/fonts/FontFamily$Builder;->makeStyleIdentifier(Landroid/graphics/fonts/Font;)I
+HSPLandroid/graphics/fonts/FontFamily;-><init>(Ljava/util/ArrayList;J)V
+HSPLandroid/graphics/fonts/FontFamily;-><init>(Ljava/util/ArrayList;JLandroid/graphics/fonts/FontFamily$1;)V
+HSPLandroid/graphics/fonts/FontFamily;->getFont(I)Landroid/graphics/fonts/Font;
+HSPLandroid/graphics/fonts/FontFamily;->getNativePtr()J
+HSPLandroid/graphics/fonts/FontFamily;->getSize()I
 HSPLandroid/graphics/fonts/FontFileUtil;->analyzeStyle(Ljava/nio/ByteBuffer;I[Landroid/graphics/fonts/FontVariationAxis;)I
 HSPLandroid/graphics/fonts/FontFileUtil;->pack(IZ)I
 HSPLandroid/graphics/fonts/FontStyle;-><init>(II)V
-HSPLandroid/graphics/fonts/FontVariationAxis;->fromFontVariationSettings(Ljava/lang/String;)[Landroid/graphics/fonts/FontVariationAxis;
+HSPLandroid/graphics/fonts/FontStyle;->getMatchScore(Landroid/graphics/fonts/FontStyle;)I
+HSPLandroid/graphics/fonts/FontStyle;->getSlant()I
+HSPLandroid/graphics/fonts/FontStyle;->getWeight()I
+HSPLandroid/graphics/fonts/SystemFonts;->getSystemFallback(Ljava/lang/String;)[Landroid/graphics/fonts/FontFamily;
 HSPLandroid/graphics/text/LineBreaker$Builder;-><init>()V
 HSPLandroid/graphics/text/LineBreaker$Builder;->build()Landroid/graphics/text/LineBreaker;
-PLandroid/graphics/text/LineBreaker$Builder;->setBreakStrategy(I)Landroid/graphics/text/LineBreaker$Builder;
-PLandroid/graphics/text/LineBreaker$Builder;->setHyphenationFrequency(I)Landroid/graphics/text/LineBreaker$Builder;
-PLandroid/graphics/text/LineBreaker$Builder;->setIndents([I)Landroid/graphics/text/LineBreaker$Builder;
-PLandroid/graphics/text/LineBreaker$Builder;->setJustificationMode(I)Landroid/graphics/text/LineBreaker$Builder;
+HSPLandroid/graphics/text/LineBreaker$Builder;->setBreakStrategy(I)Landroid/graphics/text/LineBreaker$Builder;
+HSPLandroid/graphics/text/LineBreaker$Builder;->setHyphenationFrequency(I)Landroid/graphics/text/LineBreaker$Builder;
+HSPLandroid/graphics/text/LineBreaker$Builder;->setIndents([I)Landroid/graphics/text/LineBreaker$Builder;
+HSPLandroid/graphics/text/LineBreaker$Builder;->setJustificationMode(I)Landroid/graphics/text/LineBreaker$Builder;
 HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;-><init>()V
-PLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$1000(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)F
-PLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$1100(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)[F
-PLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$1200(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)F
-PLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$800(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)F
-PLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$900(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)I
-PLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setIndent(FI)V
-PLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setTabStops([FF)V
-PLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setWidth(F)V
-PLandroid/graphics/text/LineBreaker$Result;-><init>(J)V
-PLandroid/graphics/text/LineBreaker$Result;-><init>(JLandroid/graphics/text/LineBreaker$1;)V
+HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$1000(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)F
+HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$1100(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)[F
+HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$1200(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)F
+HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$800(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)F
+HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$900(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)I
+HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setIndent(FI)V
+HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setTabStops([FF)V
+HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setWidth(F)V
+HSPLandroid/graphics/text/LineBreaker$Result;-><init>(J)V
+HSPLandroid/graphics/text/LineBreaker$Result;-><init>(JLandroid/graphics/text/LineBreaker$1;)V
 HSPLandroid/graphics/text/LineBreaker$Result;->getEndLineHyphenEdit(I)I
 HSPLandroid/graphics/text/LineBreaker$Result;->getLineAscent(I)F
 HSPLandroid/graphics/text/LineBreaker$Result;->getLineBreakOffset(I)I
@@ -11347,389 +5719,101 @@
 HSPLandroid/graphics/text/LineBreaker$Result;->getLineWidth(I)F
 HSPLandroid/graphics/text/LineBreaker$Result;->getStartLineHyphenEdit(I)I
 HSPLandroid/graphics/text/LineBreaker$Result;->hasLineTab(I)Z
-PLandroid/graphics/text/LineBreaker;-><init>(III[I)V
-PLandroid/graphics/text/LineBreaker;-><init>(III[ILandroid/graphics/text/LineBreaker$1;)V
-PLandroid/graphics/text/LineBreaker;->access$200(J)I
-PLandroid/graphics/text/LineBreaker;->access$300(JI)I
-PLandroid/graphics/text/LineBreaker;->access$400(JI)F
-PLandroid/graphics/text/LineBreaker;->access$500(JI)F
-PLandroid/graphics/text/LineBreaker;->access$600(JI)F
-PLandroid/graphics/text/LineBreaker;->access$700(JI)I
+HSPLandroid/graphics/text/LineBreaker;-><init>(III[I)V
+HSPLandroid/graphics/text/LineBreaker;-><init>(III[ILandroid/graphics/text/LineBreaker$1;)V
+HSPLandroid/graphics/text/LineBreaker;->access$200(J)I
+HSPLandroid/graphics/text/LineBreaker;->access$300(JI)I
+HSPLandroid/graphics/text/LineBreaker;->access$400(JI)F
+HSPLandroid/graphics/text/LineBreaker;->access$500(JI)F
+HSPLandroid/graphics/text/LineBreaker;->access$600(JI)F
+HSPLandroid/graphics/text/LineBreaker;->access$700(JI)I
 HSPLandroid/graphics/text/LineBreaker;->computeLineBreaks(Landroid/graphics/text/MeasuredText;Landroid/graphics/text/LineBreaker$ParagraphConstraints;I)Landroid/graphics/text/LineBreaker$Result;
-PLandroid/graphics/text/MeasuredText$Builder;-><init>([C)V
-HPLandroid/graphics/text/MeasuredText$Builder;->appendReplacementRun(Landroid/graphics/Paint;IF)Landroid/graphics/text/MeasuredText$Builder;
+HSPLandroid/graphics/text/MeasuredText$Builder;-><init>([C)V
 HSPLandroid/graphics/text/MeasuredText$Builder;->appendStyleRun(Landroid/graphics/Paint;IZ)Landroid/graphics/text/MeasuredText$Builder;
 HSPLandroid/graphics/text/MeasuredText$Builder;->build()Landroid/graphics/text/MeasuredText;
-PLandroid/graphics/text/MeasuredText$Builder;->ensureNativePtrNoReuse()V
-PLandroid/graphics/text/MeasuredText$Builder;->setComputeHyphenation(Z)Landroid/graphics/text/MeasuredText$Builder;
-PLandroid/graphics/text/MeasuredText$Builder;->setComputeLayout(Z)Landroid/graphics/text/MeasuredText$Builder;
-PLandroid/graphics/text/MeasuredText;-><init>(J[CZZ)V
-PLandroid/graphics/text/MeasuredText;-><init>(J[CZZLandroid/graphics/text/MeasuredText$1;)V
-HPLandroid/graphics/text/MeasuredText;->getCharWidthAt(I)F
+HSPLandroid/graphics/text/MeasuredText$Builder;->ensureNativePtrNoReuse()V
+HSPLandroid/graphics/text/MeasuredText$Builder;->setComputeHyphenation(Z)Landroid/graphics/text/MeasuredText$Builder;
+HSPLandroid/graphics/text/MeasuredText$Builder;->setComputeLayout(Z)Landroid/graphics/text/MeasuredText$Builder;
+HSPLandroid/graphics/text/MeasuredText;-><init>(J[CZZ)V
+HSPLandroid/graphics/text/MeasuredText;-><init>(J[CZZLandroid/graphics/text/MeasuredText$1;)V
+HSPLandroid/graphics/text/MeasuredText;->getCharWidthAt(I)F
 HSPLandroid/graphics/text/MeasuredText;->getChars()[C
 HSPLandroid/graphics/text/MeasuredText;->getNativePtr()J
-PLandroid/gsi/IGsiService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/gsi/IGsiService$Stub$Proxy;->isGsiRunning()Z
-PLandroid/gsi/IGsiService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/gsi/IGsiService;
-PLandroid/gsi/IGsid$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/gsi/IGsid$Stub$Proxy;->getClient()Landroid/gsi/IGsiService;
-PLandroid/gsi/IGsid$Stub;->asInterface(Landroid/os/IBinder;)Landroid/gsi/IGsid;
-HSPLandroid/hardware/Camera$CameraInfo;-><init>()V
-HSPLandroid/hardware/Camera;->getCameraInfo(ILandroid/hardware/Camera$CameraInfo;)V
 HSPLandroid/hardware/CameraStatus$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/CameraStatus;
 HSPLandroid/hardware/CameraStatus$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/hardware/CameraStatus$1;->newArray(I)[Landroid/hardware/CameraStatus;
 HSPLandroid/hardware/CameraStatus$1;->newArray(I)[Ljava/lang/Object;
-PLandroid/hardware/GeomagneticField$LegendreTable;-><init>(IF)V
-PLandroid/hardware/GeomagneticField;-><init>(FFFJ)V
-PLandroid/hardware/GeomagneticField;->computeGeocentricCoordinates(FFF)V
-PLandroid/hardware/GeomagneticField;->getDeclination()F
-HPLandroid/hardware/GeomagneticField;->getFieldStrength()F
-HPLandroid/hardware/GeomagneticField;->getHorizontalStrength()F
-HPLandroid/hardware/GeomagneticField;->getInclination()F
-PLandroid/hardware/GeomagneticField;->getX()F
-PLandroid/hardware/GeomagneticField;->getY()F
-PLandroid/hardware/GeomagneticField;->getZ()F
 HSPLandroid/hardware/HardwareBuffer;-><init>(J)V
 HSPLandroid/hardware/HardwareBuffer;->close()V
 HSPLandroid/hardware/HardwareBuffer;->createFromGraphicBuffer(Landroid/graphics/GraphicBuffer;)Landroid/hardware/HardwareBuffer;
 HSPLandroid/hardware/HardwareBuffer;->finalize()V
-PLandroid/hardware/HardwareBuffer;->getFormat()I
-PLandroid/hardware/HardwareBuffer;->getUsage()J
+HSPLandroid/hardware/HardwareBuffer;->getFormat()I
+HSPLandroid/hardware/HardwareBuffer;->getUsage()J
 HSPLandroid/hardware/HardwareBuffer;->isClosed()Z
-PLandroid/hardware/ICameraService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/hardware/ICameraService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/hardware/ICameraService$Stub$Proxy;->addListener(Landroid/hardware/ICameraServiceListener;)[Landroid/hardware/CameraStatus;
-HSPLandroid/hardware/ICameraService$Stub$Proxy;->getCameraCharacteristics(Ljava/lang/String;)Landroid/hardware/camera2/impl/CameraMetadataNative;
-HSPLandroid/hardware/ICameraService$Stub$Proxy;->isHiddenPhysicalCamera(Ljava/lang/String;)Z
-PLandroid/hardware/ICameraService$Stub$Proxy;->notifySystemEvent(I[I)V
-HSPLandroid/hardware/ICameraService$Stub$Proxy;->supportsCameraApi(Ljava/lang/String;I)Z
-PLandroid/hardware/ICameraService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/ICameraService;
+HSPLandroid/hardware/ICameraService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/ICameraService;
 HSPLandroid/hardware/ICameraServiceListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/hardware/ICameraServiceProxy$Stub;-><init>()V
-PLandroid/hardware/ICameraServiceProxy$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/hardware/ICameraServiceProxy$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/hardware/IConsumerIrService$Stub;-><init>()V
-PLandroid/hardware/IConsumerIrService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/hardware/ISensorPrivacyListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/hardware/ISensorPrivacyListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/hardware/ISensorPrivacyListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/ISensorPrivacyListener;
-HSPLandroid/hardware/ISensorPrivacyManager$Stub;-><init>()V
-HSPLandroid/hardware/ISensorPrivacyManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/hardware/ISerialManager$Stub;-><init>()V
-PLandroid/hardware/ISerialManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/hardware/Sensor;-><init>()V
-HSPLandroid/hardware/Sensor;->getFifoMaxEventCount()I
-PLandroid/hardware/Sensor;->getFifoReservedEventCount()I
 HSPLandroid/hardware/Sensor;->getHandle()I
 HSPLandroid/hardware/Sensor;->getMaxLengthValuesArray(Landroid/hardware/Sensor;I)I
 HSPLandroid/hardware/Sensor;->getMaximumRange()F
-HSPLandroid/hardware/Sensor;->getName()Ljava/lang/String;
-PLandroid/hardware/Sensor;->getPower()F
 HSPLandroid/hardware/Sensor;->getReportingMode()I
-PLandroid/hardware/Sensor;->getResolution()F
-HSPLandroid/hardware/Sensor;->getStringType()Ljava/lang/String;
 HSPLandroid/hardware/Sensor;->getType()I
-HSPLandroid/hardware/Sensor;->getVendor()Ljava/lang/String;
-PLandroid/hardware/Sensor;->getVersion()I
 HSPLandroid/hardware/Sensor;->isWakeUpSensor()Z
 HSPLandroid/hardware/Sensor;->setType(I)Z
 HSPLandroid/hardware/Sensor;->setUuid(JJ)V
-HSPLandroid/hardware/Sensor;->toString()Ljava/lang/String;
-PLandroid/hardware/SensorAdditionalInfo;-><init>(Landroid/hardware/Sensor;II[I[F)V
-PLandroid/hardware/SensorAdditionalInfo;->createLocalGeomagneticField(FFF)Landroid/hardware/SensorAdditionalInfo;
 HSPLandroid/hardware/SensorEvent;-><init>(I)V
 HSPLandroid/hardware/SensorManager;-><init>()V
-PLandroid/hardware/SensorManager;->cancelTriggerSensor(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z
 HSPLandroid/hardware/SensorManager;->getDefaultSensor(I)Landroid/hardware/Sensor;
-HSPLandroid/hardware/SensorManager;->getDefaultSensor(IZ)Landroid/hardware/Sensor;
 HSPLandroid/hardware/SensorManager;->getDelay(I)I
 HSPLandroid/hardware/SensorManager;->getSensorList(I)Ljava/util/List;
 HSPLandroid/hardware/SensorManager;->registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;I)Z
-HSPLandroid/hardware/SensorManager;->registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;IILandroid/os/Handler;)Z
 HSPLandroid/hardware/SensorManager;->registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;ILandroid/os/Handler;)Z
-PLandroid/hardware/SensorManager;->requestTriggerSensor(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z
-PLandroid/hardware/SensorManager;->setOperationParameter(Landroid/hardware/SensorAdditionalInfo;)Z
 HSPLandroid/hardware/SensorManager;->unregisterListener(Landroid/hardware/SensorEventListener;)V
-HPLandroid/hardware/SensorManager;->unregisterListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;)V
 HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;-><init>(Landroid/os/Looper;Landroid/hardware/SystemSensorManager;ILjava/lang/String;)V
 HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->addSensor(Landroid/hardware/Sensor;II)Z
-PLandroid/hardware/SystemSensorManager$BaseEventQueue;->disableSensor(Landroid/hardware/Sensor;)I
-PLandroid/hardware/SystemSensorManager$BaseEventQueue;->dispose()V
-PLandroid/hardware/SystemSensorManager$BaseEventQueue;->dispose(Z)V
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->disableSensor(Landroid/hardware/Sensor;)I
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->dispose()V
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->dispose(Z)V
 HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->enableSensor(Landroid/hardware/Sensor;II)I
 HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->finalize()V
-PLandroid/hardware/SystemSensorManager$BaseEventQueue;->hasSensors()Z
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->hasSensors()Z
 HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->removeAllSensors()Z
-PLandroid/hardware/SystemSensorManager$BaseEventQueue;->removeSensor(Landroid/hardware/Sensor;Z)Z
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->removeSensor(Landroid/hardware/Sensor;Z)Z
 HSPLandroid/hardware/SystemSensorManager$SensorEventQueue;-><init>(Landroid/hardware/SensorEventListener;Landroid/os/Looper;Landroid/hardware/SystemSensorManager;Ljava/lang/String;)V
 HSPLandroid/hardware/SystemSensorManager$SensorEventQueue;->addSensorEvent(Landroid/hardware/Sensor;)V
-HPLandroid/hardware/SystemSensorManager$SensorEventQueue;->dispatchAdditionalInfoEvent(III[F[I)V
 HSPLandroid/hardware/SystemSensorManager$SensorEventQueue;->dispatchSensorEvent(I[FIJ)V
 HSPLandroid/hardware/SystemSensorManager$SensorEventQueue;->removeSensorEvent(Landroid/hardware/Sensor;)V
-PLandroid/hardware/SystemSensorManager$TriggerEventQueue;-><init>(Landroid/hardware/TriggerEventListener;Landroid/os/Looper;Landroid/hardware/SystemSensorManager;Ljava/lang/String;)V
-PLandroid/hardware/SystemSensorManager$TriggerEventQueue;->addSensorEvent(Landroid/hardware/Sensor;)V
-PLandroid/hardware/SystemSensorManager$TriggerEventQueue;->dispatchSensorEvent(I[FIJ)V
-PLandroid/hardware/SystemSensorManager$TriggerEventQueue;->removeSensorEvent(Landroid/hardware/Sensor;)V
 HSPLandroid/hardware/SystemSensorManager;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
 HSPLandroid/hardware/SystemSensorManager;->access$200(Landroid/hardware/SystemSensorManager;)J
 HSPLandroid/hardware/SystemSensorManager;->access$300(Landroid/hardware/SystemSensorManager;)Landroid/content/Context;
 HSPLandroid/hardware/SystemSensorManager;->access$400(Landroid/hardware/SystemSensorManager;)Ljava/util/HashMap;
 HSPLandroid/hardware/SystemSensorManager;->access$500(Landroid/hardware/SystemSensorManager;)I
-PLandroid/hardware/SystemSensorManager;->cancelTriggerSensorImpl(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;Z)Z
 HSPLandroid/hardware/SystemSensorManager;->getFullSensorList()Ljava/util/List;
 HSPLandroid/hardware/SystemSensorManager;->registerListenerImpl(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;ILandroid/os/Handler;II)Z
-PLandroid/hardware/SystemSensorManager;->requestTriggerSensorImpl(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z
-PLandroid/hardware/SystemSensorManager;->setOperationParameterImpl(Landroid/hardware/SensorAdditionalInfo;)Z
 HSPLandroid/hardware/SystemSensorManager;->unregisterListenerImpl(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;)V
-PLandroid/hardware/TriggerEvent;-><init>(I)V
 HSPLandroid/hardware/TriggerEventListener;-><init>()V
-HSPLandroid/hardware/biometrics/BiometricAuthenticator$Identifier;-><init>(Ljava/lang/CharSequence;IJ)V
-HSPLandroid/hardware/biometrics/BiometricAuthenticator$Identifier;->getBiometricId()I
-HSPLandroid/hardware/biometrics/BiometricAuthenticator$Identifier;->getDeviceId()J
-HSPLandroid/hardware/biometrics/BiometricAuthenticator$Identifier;->getName()Ljava/lang/CharSequence;
-PLandroid/hardware/biometrics/BiometricManager;-><init>(Landroid/content/Context;Landroid/hardware/biometrics/IAuthService;)V
-PLandroid/hardware/biometrics/BiometricManager;->canAuthenticate()I
-PLandroid/hardware/biometrics/BiometricManager;->canAuthenticate(I)I
-PLandroid/hardware/biometrics/BiometricManager;->canAuthenticate(II)I
-PLandroid/hardware/biometrics/BiometricManager;->hasBiometrics(Landroid/content/Context;)Z
-PLandroid/hardware/biometrics/BiometricManager;->hasEnrolledBiometrics(I)Z
-PLandroid/hardware/biometrics/BiometricManager;->resetLockout([B)V
-PLandroid/hardware/biometrics/BiometricManager;->setActiveUser(I)V
-PLandroid/hardware/biometrics/BiometricSourceType$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/biometrics/BiometricSourceType;
-PLandroid/hardware/biometrics/BiometricSourceType$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/hardware/biometrics/BiometricSourceType;->valueOf(Ljava/lang/String;)Landroid/hardware/biometrics/BiometricSourceType;
-PLandroid/hardware/biometrics/BiometricSourceType;->values()[Landroid/hardware/biometrics/BiometricSourceType;
-HSPLandroid/hardware/biometrics/BiometricSourceType;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/hardware/biometrics/IAuthService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/hardware/biometrics/IAuthService$Stub$Proxy;->canAuthenticate(Ljava/lang/String;II)I
-HSPLandroid/hardware/biometrics/IAuthService$Stub;-><init>()V
-PLandroid/hardware/biometrics/IAuthService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/biometrics/IAuthService;
-PLandroid/hardware/biometrics/IAuthService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/hardware/biometrics/IAuthService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/hardware/biometrics/IBiometricAuthenticator$Stub;-><init>()V
-HSPLandroid/hardware/biometrics/IBiometricEnabledOnKeyguardCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/hardware/biometrics/IBiometricEnabledOnKeyguardCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/hardware/biometrics/IBiometricEnabledOnKeyguardCallback$Stub$Proxy;->onChanged(Landroid/hardware/biometrics/BiometricSourceType;ZI)V
-HSPLandroid/hardware/biometrics/IBiometricEnabledOnKeyguardCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/biometrics/IBiometricEnabledOnKeyguardCallback;
-HSPLandroid/hardware/biometrics/IBiometricService$Stub;-><init>()V
-HSPLandroid/hardware/biometrics/IBiometricService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/biometrics/IBiometricService;
-PLandroid/hardware/biometrics/IBiometricService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/hardware/biometrics/IBiometricServiceLockoutResetCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/hardware/biometrics/IBiometricServiceLockoutResetCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/hardware/biometrics/IBiometricServiceLockoutResetCallback$Stub$Proxy;->onLockoutReset(JLandroid/os/IRemoteCallback;)V
-HSPLandroid/hardware/biometrics/IBiometricServiceLockoutResetCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;
-HPLandroid/hardware/biometrics/IBiometricServiceLockoutResetCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/hardware/biometrics/IBiometricServiceReceiverInternal$Stub;-><init>()V
-HSPLandroid/hardware/camera2/-$$Lambda$CameraManager$CameraManagerGlobal$CONvadOBAEkcHSpx8j61v67qRGM;-><init>(Landroid/hardware/camera2/CameraManager$TorchCallback;Ljava/lang/String;I)V
-HSPLandroid/hardware/camera2/-$$Lambda$CameraManager$CameraManagerGlobal$CONvadOBAEkcHSpx8j61v67qRGM;->run()V
-HSPLandroid/hardware/camera2/CameraCharacteristics$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;)V
-HSPLandroid/hardware/camera2/CameraCharacteristics;->get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/CameraCharacteristics;->getPhysicalCameraIds()Ljava/util/Set;
-HPLandroid/hardware/camera2/CameraManager$AvailabilityCallback;->onCameraAccessPrioritiesChanged()V
-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;-><clinit>()V
-HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;-><init>()V
+HSPLandroid/hardware/biometrics/BiometricManager;-><init>(Landroid/content/Context;Landroid/hardware/biometrics/IAuthService;)V
+HSPLandroid/hardware/biometrics/BiometricManager;->hasBiometrics(Landroid/content/Context;)Z
+HSPLandroid/hardware/biometrics/IAuthService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/biometrics/IAuthService;
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->asBinder()Landroid/os/IBinder;
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->connectCameraServiceLocked()V
-HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->extractCameraIdListLocked()[Ljava/lang/String;
-HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->getCameraIdList()[Ljava/lang/String;
-HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->getCameraService()Landroid/hardware/ICameraService;
-HPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->isAvailable(I)Z
-HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->lambda$postSingleTorchUpdate$0(Landroid/hardware/camera2/CameraManager$TorchCallback;Ljava/lang/String;I)V
-HPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->lambda$postSingleTorchUpdate$1(Landroid/hardware/camera2/CameraManager$TorchCallback;Ljava/lang/String;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->get()Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onCameraAccessPrioritiesChanged()V
-HPLandroid/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
-HPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->postSingleAccessPriorityChangeUpdate(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Ljava/util/concurrent/Executor;)V
-HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->postSingleTorchUpdate(Landroid/hardware/camera2/CameraManager$TorchCallback;Ljava/util/concurrent/Executor;Ljava/lang/String;I)V
-HPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->postSingleUpdate(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Ljava/util/concurrent/Executor;Ljava/lang/String;I)V
-HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->registerTorchCallback(Landroid/hardware/camera2/CameraManager$TorchCallback;Ljava/util/concurrent/Executor;)V
-HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->updateTorchCallbackLocked(Landroid/hardware/camera2/CameraManager$TorchCallback;Ljava/util/concurrent/Executor;)V
-HSPLandroid/hardware/camera2/CameraManager$TorchCallback;-><init>()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;->getCameraIdList()[Ljava/lang/String;
-HSPLandroid/hardware/camera2/CameraManager;->getDisplaySize()Landroid/util/Size;
-HSPLandroid/hardware/camera2/CameraManager;->isHiddenPhysicalCamera(Ljava/lang/String;)Z
-HSPLandroid/hardware/camera2/CameraManager;->registerTorchCallback(Landroid/hardware/camera2/CameraManager$TorchCallback;Landroid/os/Handler;)V
-HSPLandroid/hardware/camera2/CameraManager;->supportsCameraApiLocked(Ljava/lang/String;I)Z
-HSPLandroid/hardware/camera2/CaptureRequest$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;)V
-HSPLandroid/hardware/camera2/CaptureResult$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;)V
-HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraHandlerExecutor;->execute(Ljava/lang/Runnable;)V
-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;-><init>(Ljava/lang/String;Ljava/lang/Class;)V
-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;->readValues(I)[B
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setCameraId(I)V
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setDisplaySize(Landroid/util/Size;)V
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setupGlobalVendorTagDescriptor()V
-HSPLandroid/hardware/camera2/marshal/MarshalHelpers;->checkNativeType(I)I
-HSPLandroid/hardware/camera2/marshal/MarshalHelpers;->getPrimitiveTypeSize(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;->hashCode()I
-HSPLandroid/hardware/camera2/marshal/MarshalRegistry;->getMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
-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;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableArray;Landroid/hardware/camera2/utils/TypeReference;I)V
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableArray$MarshalerArray;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableArray;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
-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;
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean$MarshalerBoolean;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableEnum;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger$MarshalerNativeByteToInteger;->getNativeSize()I
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger$MarshalerNativeByteToInteger;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Integer;
-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;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive;Landroid/hardware/camera2/utils/TypeReference;I)V
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->getNativeSize()I
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->unmarshalObject(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRect;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableSize$MarshalerSize;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableSize;Landroid/hardware/camera2/utils/TypeReference;I)V
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableSize$MarshalerSize;->unmarshal(Ljava/nio/ByteBuffer;)Landroid/util/Size;
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableSize$MarshalerSize;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableSize;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableSize;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
-HSPLandroid/hardware/camera2/utils/ArrayUtils;->contains([II)Z
-PLandroid/hardware/camera2/utils/ArrayUtils;->contains([Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroid/hardware/camera2/utils/ArrayUtils;->getArrayIndex([II)I
-PLandroid/hardware/camera2/utils/ArrayUtils;->getArrayIndex([Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroid/hardware/camera2/utils/TypeReference$SpecializedBaseTypeReference;-><init>(Ljava/lang/reflect/Type;)V
-HSPLandroid/hardware/camera2/utils/TypeReference;-><init>(Ljava/lang/reflect/Type;)V
-HSPLandroid/hardware/camera2/utils/TypeReference;-><init>(Ljava/lang/reflect/Type;Landroid/hardware/camera2/utils/TypeReference$1;)V
-HSPLandroid/hardware/camera2/utils/TypeReference;->containsTypeVariable(Ljava/lang/reflect/Type;)Z
-HSPLandroid/hardware/camera2/utils/TypeReference;->createSpecializedTypeReference(Ljava/lang/reflect/Type;)Landroid/hardware/camera2/utils/TypeReference;
-HSPLandroid/hardware/camera2/utils/TypeReference;->equals(Ljava/lang/Object;)Z
-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;
-HSPLandroid/hardware/camera2/utils/TypeReference;->getRawType(Ljava/lang/reflect/Type;)Ljava/lang/Class;
-HSPLandroid/hardware/camera2/utils/TypeReference;->getType()Ljava/lang/reflect/Type;
-HSPLandroid/hardware/camera2/utils/TypeReference;->hashCode()I
-HSPLandroid/hardware/contexthub/V1_0/ContextHub;-><init>()V
-HSPLandroid/hardware/contexthub/V1_0/ContextHub;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/contexthub/V1_0/ContextHub;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
-PLandroid/hardware/contexthub/V1_0/ContextHubMsg;-><init>()V
-HPLandroid/hardware/contexthub/V1_0/ContextHubMsg;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-PLandroid/hardware/contexthub/V1_0/ContextHubMsg;->readFromParcel(Landroid/os/HwParcel;)V
-HPLandroid/hardware/contexthub/V1_0/ContextHubMsg;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
-PLandroid/hardware/contexthub/V1_0/ContextHubMsg;->writeToParcel(Landroid/os/HwParcel;)V
-HSPLandroid/hardware/contexthub/V1_0/HubAppInfo;-><init>()V
-HSPLandroid/hardware/contexthub/V1_0/HubAppInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/contexthub/V1_0/HubAppInfo;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
-HSPLandroid/hardware/contexthub/V1_0/IContexthub$Proxy;-><init>(Landroid/os/IHwBinder;)V
-HSPLandroid/hardware/contexthub/V1_0/IContexthub$Proxy;->getHubs()Ljava/util/ArrayList;
-HSPLandroid/hardware/contexthub/V1_0/IContexthub$Proxy;->interfaceChain()Ljava/util/ArrayList;
-HSPLandroid/hardware/contexthub/V1_0/IContexthub$Proxy;->queryApps(I)I
-HSPLandroid/hardware/contexthub/V1_0/IContexthub$Proxy;->registerCallback(ILandroid/hardware/contexthub/V1_0/IContexthubCallback;)I
-PLandroid/hardware/contexthub/V1_0/IContexthub$Proxy;->sendMessageToHub(ILandroid/hardware/contexthub/V1_0/ContextHubMsg;)I
-HSPLandroid/hardware/contexthub/V1_0/IContexthub;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/contexthub/V1_0/IContexthub;
-HSPLandroid/hardware/contexthub/V1_0/IContexthub;->getService(Ljava/lang/String;Z)Landroid/hardware/contexthub/V1_0/IContexthub;
-HSPLandroid/hardware/contexthub/V1_0/IContexthub;->getService(Z)Landroid/hardware/contexthub/V1_0/IContexthub;
-HSPLandroid/hardware/contexthub/V1_0/IContexthubCallback$Stub;-><init>()V
-HSPLandroid/hardware/contexthub/V1_0/IContexthubCallback$Stub;->asBinder()Landroid/os/IHwBinder;
-HSPLandroid/hardware/contexthub/V1_0/IContexthubCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
-HPLandroid/hardware/display/-$$Lambda$NightDisplayListener$sOK1HmSbMnFLzc4SdDD1WpVWJiI;->run()V
-PLandroid/hardware/display/AmbientBrightnessDayStats;-><init>(Ljava/time/LocalDate;[F)V
-HSPLandroid/hardware/display/AmbientBrightnessDayStats;-><init>(Ljava/time/LocalDate;[F[F)V
-HSPLandroid/hardware/display/AmbientBrightnessDayStats;->checkSorted([F)V
-HSPLandroid/hardware/display/AmbientBrightnessDayStats;->getBucketIndex(F)I
-HSPLandroid/hardware/display/AmbientBrightnessDayStats;->getLocalDate()Ljava/time/LocalDate;
-HSPLandroid/hardware/display/AmbientBrightnessDayStats;->log(FF)V
-PLandroid/hardware/display/AmbientBrightnessDayStats;->toString()Ljava/lang/String;
-PLandroid/hardware/display/AmbientBrightnessDayStats;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/hardware/display/AmbientDisplayConfiguration;-><init>(Landroid/content/Context;)V
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->accessibilityInversionEnabled(I)Z
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->alwaysOnAvailable()Z
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->alwaysOnAvailableForUser(I)Z
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->alwaysOnEnabled(I)Z
 HSPLandroid/hardware/display/AmbientDisplayConfiguration;->ambientDisplayAvailable()Z
 HSPLandroid/hardware/display/AmbientDisplayConfiguration;->ambientDisplayComponent()Ljava/lang/String;
 HSPLandroid/hardware/display/AmbientDisplayConfiguration;->boolSetting(Ljava/lang/String;II)Z
 HSPLandroid/hardware/display/AmbientDisplayConfiguration;->boolSettingDefaultOn(Ljava/lang/String;I)Z
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->doubleTapSensorAvailable()Z
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->doubleTapSensorType()Ljava/lang/String;
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->dozePickupSensorAvailable()Z
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->enabled(I)Z
-HPLandroid/hardware/display/AmbientDisplayConfiguration;->getWakeLockScreenDebounce()J
-HPLandroid/hardware/display/AmbientDisplayConfiguration;->longPressSensorType()Ljava/lang/String;
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->pulseOnNotificationAvailable()Z
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->pulseOnNotificationEnabled(I)Z
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->tapSensorAvailable()Z
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->tapSensorType()Ljava/lang/String;
-HSPLandroid/hardware/display/AmbientDisplayConfiguration;->wakeScreenGestureAvailable()Z
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;-><init>()V
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->build()Landroid/hardware/display/BrightnessChangeEvent;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setBatteryLevel(F)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setBrightness(F)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setColorTemperature(I)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setIsDefaultBrightnessConfig(Z)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setLastBrightness(F)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setLuxTimestamps([J)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setLuxValues([F)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setNightMode(Z)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setPackageName(Ljava/lang/String;)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setPowerBrightnessFactor(F)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setTimeStamp(J)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setUserBrightnessPoint(Z)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent$Builder;->setUserId(I)Landroid/hardware/display/BrightnessChangeEvent$Builder;
-HSPLandroid/hardware/display/BrightnessChangeEvent;-><init>(FJLjava/lang/String;I[F[JFFZIFZZ[JJ)V
-HSPLandroid/hardware/display/BrightnessChangeEvent;-><init>(FJLjava/lang/String;I[F[JFFZIFZZ[JJLandroid/hardware/display/BrightnessChangeEvent$1;)V
-PLandroid/hardware/display/BrightnessChangeEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/hardware/display/BrightnessConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/display/BrightnessConfiguration;
-PLandroid/hardware/display/BrightnessConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/hardware/display/BrightnessConfiguration$Builder;-><init>([F[F)V
-HSPLandroid/hardware/display/BrightnessConfiguration$Builder;->build()Landroid/hardware/display/BrightnessConfiguration;
-HSPLandroid/hardware/display/BrightnessConfiguration$Builder;->checkMonotonic([FZLjava/lang/String;)V
-HSPLandroid/hardware/display/BrightnessConfiguration$Builder;->setDescription(Ljava/lang/String;)Landroid/hardware/display/BrightnessConfiguration$Builder;
-HSPLandroid/hardware/display/BrightnessConfiguration$Builder;->setShouldCollectColorSamples(Z)Landroid/hardware/display/BrightnessConfiguration$Builder;
-HSPLandroid/hardware/display/BrightnessConfiguration;-><init>([F[FLjava/util/Map;Ljava/util/Map;Ljava/lang/String;Z)V
-HSPLandroid/hardware/display/BrightnessConfiguration;-><init>([F[FLjava/util/Map;Ljava/util/Map;Ljava/lang/String;ZLandroid/hardware/display/BrightnessConfiguration$1;)V
-HSPLandroid/hardware/display/BrightnessConfiguration;->equals(Ljava/lang/Object;)Z
-PLandroid/hardware/display/BrightnessConfiguration;->getCorrectionByCategory(I)Landroid/hardware/display/BrightnessCorrection;
-PLandroid/hardware/display/BrightnessConfiguration;->getCorrectionByPackageName(Ljava/lang/String;)Landroid/hardware/display/BrightnessCorrection;
-HSPLandroid/hardware/display/BrightnessConfiguration;->getCurve()Landroid/util/Pair;
-HSPLandroid/hardware/display/BrightnessConfiguration;->loadFloatFromXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)F
-HSPLandroid/hardware/display/BrightnessConfiguration;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/hardware/display/BrightnessConfiguration;
-HSPLandroid/hardware/display/BrightnessConfiguration;->shouldCollectColorSamples()Z
-PLandroid/hardware/display/BrightnessConfiguration;->toString()Ljava/lang/String;
 HSPLandroid/hardware/display/ColorDisplayManager$ColorDisplayManagerInternal;->getInstance()Landroid/hardware/display/ColorDisplayManager$ColorDisplayManagerInternal;
-HPLandroid/hardware/display/ColorDisplayManager$ColorDisplayManagerInternal;->getNightDisplayAutoMode()I
-HPLandroid/hardware/display/ColorDisplayManager$ColorDisplayManagerInternal;->getNightDisplayAutoModeRaw()I
-HPLandroid/hardware/display/ColorDisplayManager$ColorDisplayManagerInternal;->getNightDisplayCustomEndTime()Landroid/hardware/display/Time;
-HPLandroid/hardware/display/ColorDisplayManager$ColorDisplayManagerInternal;->getNightDisplayCustomStartTime()Landroid/hardware/display/Time;
-HSPLandroid/hardware/display/ColorDisplayManager$ColorDisplayManagerInternal;->isDeviceColorManaged()Z
-HSPLandroid/hardware/display/ColorDisplayManager$ColorDisplayManagerInternal;->isNightDisplayActivated()Z
-HSPLandroid/hardware/display/ColorDisplayManager$ColorDisplayManagerInternal;->setSaturationLevel(I)Z
-HSPLandroid/hardware/display/ColorDisplayManager;->areAccessibilityTransformsEnabled(Landroid/content/Context;)Z
-PLandroid/hardware/display/ColorDisplayManager;->getMaximumColorTemperature(Landroid/content/Context;)I
-PLandroid/hardware/display/ColorDisplayManager;->getMinimumColorTemperature(Landroid/content/Context;)I
-HPLandroid/hardware/display/ColorDisplayManager;->getNightDisplayAutoMode()I
-HPLandroid/hardware/display/ColorDisplayManager;->getNightDisplayAutoModeRaw()I
-HPLandroid/hardware/display/ColorDisplayManager;->getNightDisplayCustomEndTime()Ljava/time/LocalTime;
-HPLandroid/hardware/display/ColorDisplayManager;->getNightDisplayCustomStartTime()Ljava/time/LocalTime;
-HSPLandroid/hardware/display/ColorDisplayManager;->isDeviceColorManaged()Z
-HSPLandroid/hardware/display/ColorDisplayManager;->isDisplayWhiteBalanceAvailable(Landroid/content/Context;)Z
-HSPLandroid/hardware/display/ColorDisplayManager;->isNightDisplayActivated()Z
+HSPLandroid/hardware/display/ColorDisplayManager;-><init>()V
 HSPLandroid/hardware/display/ColorDisplayManager;->isNightDisplayAvailable(Landroid/content/Context;)Z
-HSPLandroid/hardware/display/ColorDisplayManager;->setSaturationLevel(I)Z
-HSPLandroid/hardware/display/Curve;-><init>([F[F)V
-PLandroid/hardware/display/Curve;->toString()Ljava/lang/String;
 HSPLandroid/hardware/display/DisplayManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/hardware/display/DisplayManager;->addAllDisplaysLocked(Ljava/util/ArrayList;[I)V
 HSPLandroid/hardware/display/DisplayManager;->addPresentationDisplaysLocked(Ljava/util/ArrayList;[II)V
@@ -11737,12 +5821,11 @@
 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;->getStableDisplaySize()Landroid/graphics/Point;
 HSPLandroid/hardware/display/DisplayManager;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
 HSPLandroid/hardware/display/DisplayManager;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;)V
-PLandroid/hardware/display/DisplayManager;->unregisterDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;)V
+HSPLandroid/hardware/display/DisplayManager;->unregisterDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;-><init>(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Looper;)V
-PLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->clearEvents()V
+HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->clearEvents()V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->sendDisplayEvent(II)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;-><init>(Landroid/hardware/display/DisplayManagerGlobal;)V
@@ -11757,1356 +5840,2048 @@
 HSPLandroid/hardware/display/DisplayManagerGlobal;->getDisplayInfo(I)Landroid/view/DisplayInfo;
 HSPLandroid/hardware/display/DisplayManagerGlobal;->getInstance()Landroid/hardware/display/DisplayManagerGlobal;
 HSPLandroid/hardware/display/DisplayManagerGlobal;->getLooperForHandler(Landroid/os/Handler;)Landroid/os/Looper;
-HSPLandroid/hardware/display/DisplayManagerGlobal;->getRealDisplay(I)Landroid/view/Display;
-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;->registerCallbackIfNeededLocked()V
 HSPLandroid/hardware/display/DisplayManagerGlobal;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;)V
-HPLandroid/hardware/display/DisplayManagerGlobal;->setTemporaryBrightness(I)V
 HSPLandroid/hardware/display/DisplayManagerGlobal;->unregisterDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;)V
-HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;-><init>()V
-HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;-><init>(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;)V
-HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->copyFrom(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;)V
-HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->equals(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;)Z
-HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->floatEquals(FF)Z
-PLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->isBrightOrDim()Z
-PLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->policyToString(I)Ljava/lang/String;
-PLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->toString()Ljava/lang/String;
-HSPLandroid/hardware/display/DisplayManagerInternal;-><init>()V
-HSPLandroid/hardware/display/DisplayViewport;-><init>()V
-HSPLandroid/hardware/display/DisplayViewport;->copyFrom(Landroid/hardware/display/DisplayViewport;)V
-HSPLandroid/hardware/display/DisplayViewport;->equals(Ljava/lang/Object;)Z
-HSPLandroid/hardware/display/DisplayViewport;->makeCopy()Landroid/hardware/display/DisplayViewport;
-PLandroid/hardware/display/DisplayViewport;->toString()Ljava/lang/String;
-PLandroid/hardware/display/DisplayViewport;->typeToString(I)Ljava/lang/String;
-HPLandroid/hardware/display/IColorDisplayManager$Stub$Proxy;->getNightDisplayAutoMode()I
-HPLandroid/hardware/display/IColorDisplayManager$Stub$Proxy;->getNightDisplayAutoModeRaw()I
-HPLandroid/hardware/display/IColorDisplayManager$Stub$Proxy;->getNightDisplayCustomEndTime()Landroid/hardware/display/Time;
-HPLandroid/hardware/display/IColorDisplayManager$Stub$Proxy;->getNightDisplayCustomStartTime()Landroid/hardware/display/Time;
-HSPLandroid/hardware/display/IColorDisplayManager$Stub$Proxy;->isDeviceColorManaged()Z
-HSPLandroid/hardware/display/IColorDisplayManager$Stub$Proxy;->isNightDisplayActivated()Z
-HSPLandroid/hardware/display/IColorDisplayManager$Stub$Proxy;->setSaturationLevel(I)Z
-HSPLandroid/hardware/display/IColorDisplayManager$Stub;-><init>()V
-PLandroid/hardware/display/IColorDisplayManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/hardware/display/IColorDisplayManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getDisplayIds()[I
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getDisplayInfo(I)Landroid/view/DisplayInfo;
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getPreferredWideGamutColorSpaceId()I
-HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getStableDisplaySize()Landroid/graphics/Point;
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->registerCallback(Landroid/hardware/display/IDisplayManagerCallback;)V
-HPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->setTemporaryBrightness(I)V
-HSPLandroid/hardware/display/IDisplayManager$Stub;-><init>()V
 HSPLandroid/hardware/display/IDisplayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/display/IDisplayManager;
-PLandroid/hardware/display/IDisplayManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/hardware/display/IDisplayManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/hardware/display/IDisplayManagerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/hardware/display/IDisplayManagerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/hardware/display/IDisplayManagerCallback$Stub$Proxy;->onDisplayEvent(II)V
 HSPLandroid/hardware/display/IDisplayManagerCallback$Stub;-><init>()V
 HSPLandroid/hardware/display/IDisplayManagerCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/hardware/display/IDisplayManagerCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/display/IDisplayManagerCallback;
 HSPLandroid/hardware/display/IDisplayManagerCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/hardware/display/NightDisplayListener;->lambda$setCallback$0$NightDisplayListener(Landroid/hardware/display/NightDisplayListener$Callback;)V
-HPLandroid/hardware/display/NightDisplayListener;->setCallback(Landroid/hardware/display/NightDisplayListener$Callback;)V
-HPLandroid/hardware/display/NightDisplayListener;->setCallbackInternal(Landroid/hardware/display/NightDisplayListener$Callback;)V
-HPLandroid/hardware/display/Time$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/display/Time;
-HPLandroid/hardware/display/Time$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/hardware/display/Time;-><init>(Landroid/os/Parcel;)V
-PLandroid/hardware/display/Time;-><init>(Ljava/time/LocalTime;)V
-PLandroid/hardware/display/Time;->getLocalTime()Ljava/time/LocalTime;
-PLandroid/hardware/display/Time;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/hardware/display/WifiDisplay$1;->newArray(I)[Landroid/hardware/display/WifiDisplay;
 HSPLandroid/hardware/display/WifiDisplay$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/hardware/display/WifiDisplaySessionInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/display/WifiDisplaySessionInfo;
 HSPLandroid/hardware/display/WifiDisplaySessionInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/hardware/display/WifiDisplaySessionInfo;-><init>()V
 HSPLandroid/hardware/display/WifiDisplaySessionInfo;-><init>(ZILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/hardware/display/WifiDisplaySessionInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/hardware/display/WifiDisplayStatus$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/display/WifiDisplayStatus;
 HSPLandroid/hardware/display/WifiDisplayStatus$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/hardware/display/WifiDisplayStatus;-><init>()V
 HSPLandroid/hardware/display/WifiDisplayStatus;-><init>(IIILandroid/hardware/display/WifiDisplay;[Landroid/hardware/display/WifiDisplay;Landroid/hardware/display/WifiDisplaySessionInfo;)V
 HSPLandroid/hardware/display/WifiDisplayStatus;->getActiveDisplay()Landroid/hardware/display/WifiDisplay;
 HSPLandroid/hardware/display/WifiDisplayStatus;->getFeatureState()I
-PLandroid/hardware/display/WifiDisplayStatus;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/hardware/face/Face$1;-><init>()V
-HSPLandroid/hardware/face/Face;-><clinit>()V
-HSPLandroid/hardware/face/Face;-><init>(Ljava/lang/CharSequence;IJ)V
-PLandroid/hardware/face/Face;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/hardware/face/FaceManager$1;-><init>(Landroid/hardware/face/FaceManager;)V
-HSPLandroid/hardware/face/FaceManager$MyHandler;-><init>(Landroid/hardware/face/FaceManager;Landroid/content/Context;)V
-HSPLandroid/hardware/face/FaceManager$MyHandler;-><init>(Landroid/hardware/face/FaceManager;Landroid/content/Context;Landroid/hardware/face/FaceManager$1;)V
-HSPLandroid/hardware/face/FaceManager;-><init>(Landroid/content/Context;Landroid/hardware/face/IFaceService;)V
-HPLandroid/hardware/face/FaceManager;->access$000(Landroid/hardware/face/FaceManager;)Landroid/os/Handler;
-HPLandroid/hardware/face/FaceManager;->access$1000(Landroid/hardware/face/FaceManager;JII)V
-HPLandroid/hardware/face/FaceManager;->access$500(Landroid/hardware/face/FaceManager;Landroid/hardware/biometrics/CryptoObject;)V
-HPLandroid/hardware/face/FaceManager;->access$700(Landroid/hardware/face/FaceManager;JII)V
-HPLandroid/hardware/face/FaceManager;->access$800(Landroid/hardware/face/FaceManager;Landroid/hardware/face/Face;I)V
-HPLandroid/hardware/face/FaceManager;->authenticate(Landroid/hardware/biometrics/CryptoObject;Landroid/os/CancellationSignal;ILandroid/hardware/face/FaceManager$AuthenticationCallback;Landroid/os/Handler;I)V
-HPLandroid/hardware/face/FaceManager;->cancelAuthentication(Landroid/hardware/biometrics/CryptoObject;)V
-PLandroid/hardware/face/FaceManager;->generateChallenge()J
-HPLandroid/hardware/face/FaceManager;->getAcquiredString(Landroid/content/Context;II)Ljava/lang/String;
-HPLandroid/hardware/face/FaceManager;->getAuthenticatorId()J
-PLandroid/hardware/face/FaceManager;->getEnrolledFaces(I)Ljava/util/List;
-HPLandroid/hardware/face/FaceManager;->getErrorString(Landroid/content/Context;II)Ljava/lang/String;
-HSPLandroid/hardware/face/FaceManager;->hasEnrolledTemplates(I)Z
-HSPLandroid/hardware/face/FaceManager;->isHardwareDetected()Z
-PLandroid/hardware/face/FaceManager;->revokeChallenge()I
-HPLandroid/hardware/face/FaceManager;->sendAcquiredResult(JII)V
-HPLandroid/hardware/face/FaceManager;->sendAuthenticatedSucceeded(Landroid/hardware/face/Face;I)V
-HPLandroid/hardware/face/FaceManager;->sendErrorResult(JII)V
-HPLandroid/hardware/face/FaceManager;->useHandler(Landroid/os/Handler;)V
-HSPLandroid/hardware/face/IFaceService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/hardware/face/IFaceService$Stub$Proxy;->hasEnrolledFaces(ILjava/lang/String;)Z
-HSPLandroid/hardware/face/IFaceService$Stub$Proxy;->isHardwareDetected(Ljava/lang/String;)Z
-HSPLandroid/hardware/face/IFaceService$Stub;-><init>()V
-HSPLandroid/hardware/face/IFaceService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/face/IFaceService;
-PLandroid/hardware/face/IFaceService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/hardware/face/IFaceService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/hardware/face/IFaceServiceReceiver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/hardware/face/IFaceServiceReceiver$Stub$Proxy;->onAcquired(JII)V
-PLandroid/hardware/face/IFaceServiceReceiver$Stub$Proxy;->onAuthenticationFailed(J)V
-HPLandroid/hardware/face/IFaceServiceReceiver$Stub$Proxy;->onAuthenticationSucceeded(JLandroid/hardware/face/Face;I)V
-HPLandroid/hardware/face/IFaceServiceReceiver$Stub$Proxy;->onError(JII)V
-HSPLandroid/hardware/face/IFaceServiceReceiver$Stub;-><init>()V
-HPLandroid/hardware/face/IFaceServiceReceiver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/face/IFaceServiceReceiver;
-PLandroid/hardware/input/IInputDevicesChangedListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/hardware/input/IInputDevicesChangedListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/hardware/input/IInputDevicesChangedListener$Stub$Proxy;->onInputDevicesChanged([I)V
+HSPLandroid/hardware/input/IInputDevicesChangedListener$Stub;-><init>()V
 HSPLandroid/hardware/input/IInputDevicesChangedListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/hardware/input/IInputDevicesChangedListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/input/IInputDevicesChangedListener;
-PLandroid/hardware/input/IInputDevicesChangedListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/hardware/input/IInputManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/hardware/input/IInputManager$Stub$Proxy;->getInputDevice(I)Landroid/view/InputDevice;
 HSPLandroid/hardware/input/IInputManager$Stub$Proxy;->getInputDeviceIds()[I
-HSPLandroid/hardware/input/IInputManager$Stub$Proxy;->hasKeys(II[I[Z)Z
-HPLandroid/hardware/input/IInputManager$Stub$Proxy;->injectInputEvent(Landroid/view/InputEvent;I)Z
-HPLandroid/hardware/input/IInputManager$Stub$Proxy;->monitorGestureInput(Ljava/lang/String;I)Landroid/view/InputMonitor;
 HSPLandroid/hardware/input/IInputManager$Stub$Proxy;->registerInputDevicesChangedListener(Landroid/hardware/input/IInputDevicesChangedListener;)V
-HSPLandroid/hardware/input/IInputManager$Stub;-><init>()V
 HSPLandroid/hardware/input/IInputManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/input/IInputManager;
-PLandroid/hardware/input/IInputManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/hardware/input/IInputManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/hardware/input/InputDeviceIdentifier;-><init>(Ljava/lang/String;II)V
-PLandroid/hardware/input/InputDeviceIdentifier;->getDescriptor()Ljava/lang/String;
-PLandroid/hardware/input/InputDeviceIdentifier;->getProductId()I
-PLandroid/hardware/input/InputDeviceIdentifier;->getVendorId()I
-HPLandroid/hardware/input/InputManager$InputDeviceListenerDelegate;->handleMessage(Landroid/os/Message;)V
-PLandroid/hardware/input/InputManager$InputDevicesChangedListener;->onInputDevicesChanged([I)V
+HSPLandroid/hardware/input/InputManager$InputDeviceListenerDelegate;-><init>(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V
+HSPLandroid/hardware/input/InputManager$InputDevicesChangedListener;-><init>(Landroid/hardware/input/InputManager;)V
+HSPLandroid/hardware/input/InputManager$InputDevicesChangedListener;-><init>(Landroid/hardware/input/InputManager;Landroid/hardware/input/InputManager$1;)V
 HSPLandroid/hardware/input/InputManager;-><init>(Landroid/hardware/input/IInputManager;)V
-HSPLandroid/hardware/input/InputManager;->deviceHasKeys(I[I)[Z
-HSPLandroid/hardware/input/InputManager;->deviceHasKeys([I)[Z
 HSPLandroid/hardware/input/InputManager;->findInputDeviceListenerLocked(Landroid/hardware/input/InputManager$InputDeviceListener;)I
 HSPLandroid/hardware/input/InputManager;->getInputDevice(I)Landroid/view/InputDevice;
 HSPLandroid/hardware/input/InputManager;->getInputDeviceIds()[I
 HSPLandroid/hardware/input/InputManager;->getInstance()Landroid/hardware/input/InputManager;
-HPLandroid/hardware/input/InputManager;->injectInputEvent(Landroid/view/InputEvent;I)Z
-HSPLandroid/hardware/input/InputManager;->isMicMuted()I
-HPLandroid/hardware/input/InputManager;->monitorGestureInput(Ljava/lang/String;I)Landroid/view/InputMonitor;
-PLandroid/hardware/input/InputManager;->onInputDevicesChanged([I)V
 HSPLandroid/hardware/input/InputManager;->populateInputDevicesLocked()V
 HSPLandroid/hardware/input/InputManager;->registerInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V
-PLandroid/hardware/input/InputManager;->setPointerIconType(I)V
-HSPLandroid/hardware/input/InputManager;->unregisterInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;)V
-HSPLandroid/hardware/input/InputManagerInternal;-><init>()V
-PLandroid/hardware/input/KeyboardLayout;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/os/LocaleList;II)V
-PLandroid/hardware/input/KeyboardLayout;->getDescriptor()Ljava/lang/String;
-HSPLandroid/hardware/input/TouchCalibration;->getAffineTransform()[F
-HSPLandroid/hardware/location/-$$Lambda$ContextHubManager$3$U9x_HK_GdADIEQ3mS5mDWMNWMu8;-><init>(Landroid/hardware/location/ContextHubClientCallback;Landroid/hardware/location/ContextHubClient;Landroid/hardware/location/NanoAppMessage;)V
-HSPLandroid/hardware/location/-$$Lambda$ContextHubManager$3$U9x_HK_GdADIEQ3mS5mDWMNWMu8;->run()V
-HSPLandroid/hardware/location/-$$Lambda$ContextHubManager$4$sylEfC1Rx_cxuQRnKuthZXmV8KI;-><init>(Landroid/hardware/location/ContextHubManager$4;IILandroid/hardware/location/ContextHubMessage;)V
-HSPLandroid/hardware/location/-$$Lambda$ContextHubManager$4$sylEfC1Rx_cxuQRnKuthZXmV8KI;->run()V
-PLandroid/hardware/location/-$$Lambda$ContextHubTransaction$7a5H6DrY_dOy9M3qnYHhlmDHRNQ;-><init>(Landroid/hardware/location/ContextHubTransaction;)V
-PLandroid/hardware/location/-$$Lambda$ContextHubTransaction$7a5H6DrY_dOy9M3qnYHhlmDHRNQ;->run()V
-HSPLandroid/hardware/location/-$$Lambda$ContextHubTransaction$RNVGnle3xCUm9u68syzn6-2znnU;-><init>(Landroid/hardware/location/ContextHubTransaction;)V
-HSPLandroid/hardware/location/-$$Lambda$ContextHubTransaction$RNVGnle3xCUm9u68syzn6-2znnU;->run()V
-HSPLandroid/hardware/location/ActivityRecognitionHardware;->isSupported()Z
-HSPLandroid/hardware/location/ContextHubClient;-><init>(Landroid/hardware/location/ContextHubInfo;Z)V
-PLandroid/hardware/location/ContextHubClient;->close()V
-PLandroid/hardware/location/ContextHubClient;->finalize()V
-PLandroid/hardware/location/ContextHubClient;->getAttachedHub()Landroid/hardware/location/ContextHubInfo;
-HSPLandroid/hardware/location/ContextHubClient;->sendMessageToNanoApp(Landroid/hardware/location/NanoAppMessage;)I
-HPLandroid/hardware/location/ContextHubClient;->setClientProxy(Landroid/hardware/location/IContextHubClient;)V
-HSPLandroid/hardware/location/ContextHubClientCallback;-><init>()V
-HSPLandroid/hardware/location/ContextHubInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/location/ContextHubInfo;
-HSPLandroid/hardware/location/ContextHubInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/hardware/location/ContextHubInfo;-><init>(Landroid/hardware/contexthub/V1_0/ContextHub;)V
-HSPLandroid/hardware/location/ContextHubInfo;-><init>(Landroid/os/Parcel;)V
-HSLandroid/hardware/location/ContextHubInfo;-><init>(Landroid/os/Parcel;Landroid/hardware/location/ContextHubInfo$1;)V
-HPLandroid/hardware/location/ContextHubInfo;->describeContents()I
 HSPLandroid/hardware/location/ContextHubInfo;->getId()I
-HSPLandroid/hardware/location/ContextHubInfo;->getMaxPacketLengthBytes()I
-HPLandroid/hardware/location/ContextHubInfo;->toString()Ljava/lang/String;
-PLandroid/hardware/location/ContextHubInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/hardware/location/ContextHubManager$2;->onQueryResponse(ILjava/util/List;)V
-HSPLandroid/hardware/location/ContextHubManager$3;->lambda$onMessageFromNanoApp$0(Landroid/hardware/location/ContextHubClientCallback;Landroid/hardware/location/ContextHubClient;Landroid/hardware/location/NanoAppMessage;)V
-HSPLandroid/hardware/location/ContextHubManager$3;->onMessageFromNanoApp(Landroid/hardware/location/NanoAppMessage;)V
-HSLandroid/hardware/location/ContextHubManager$4;-><init>(Landroid/hardware/location/ContextHubManager;)V
-HSPLandroid/hardware/location/ContextHubManager$4;->lambda$onMessageReceipt$0$ContextHubManager$4(IILandroid/hardware/location/ContextHubMessage;)V
-HSPLandroid/hardware/location/ContextHubManager$4;->onMessageReceipt(IILandroid/hardware/location/ContextHubMessage;)V
-HSPLandroid/hardware/location/ContextHubManager$Callback;-><init>()V
-HSPLandroid/hardware/location/ContextHubManager;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
-HSPLandroid/hardware/location/ContextHubManager;->access$000(Landroid/hardware/location/ContextHubManager;)Landroid/hardware/location/ContextHubManager$Callback;
-HSPLandroid/hardware/location/ContextHubManager;->access$100(Landroid/hardware/location/ContextHubManager;)Landroid/os/Handler;
-HSPLandroid/hardware/location/ContextHubManager;->access$200(Landroid/hardware/location/ContextHubManager;)Landroid/hardware/location/ContextHubManager$ICallback;
-HSPLandroid/hardware/location/ContextHubManager;->access$300(Landroid/hardware/location/ContextHubManager;IILandroid/hardware/location/ContextHubMessage;)V
-HPLandroid/hardware/location/ContextHubManager;->createClient(Landroid/hardware/location/ContextHubInfo;Landroid/app/PendingIntent;J)Landroid/hardware/location/ContextHubClient;
-PLandroid/hardware/location/ContextHubManager;->createClient(Landroid/hardware/location/ContextHubInfo;Landroid/hardware/location/ContextHubClientCallback;)Landroid/hardware/location/ContextHubClient;
-HSPLandroid/hardware/location/ContextHubManager;->createClient(Landroid/hardware/location/ContextHubInfo;Landroid/hardware/location/ContextHubClientCallback;Ljava/util/concurrent/Executor;)Landroid/hardware/location/ContextHubClient;
-HSPLandroid/hardware/location/ContextHubManager;->findNanoAppOnHub(ILandroid/hardware/location/NanoAppFilter;)[I
-HSPLandroid/hardware/location/ContextHubManager;->getContextHubHandles()[I
-HSPLandroid/hardware/location/ContextHubManager;->getContextHubInfo(I)Landroid/hardware/location/ContextHubInfo;
-HSPLandroid/hardware/location/ContextHubManager;->getContextHubs()Ljava/util/List;
-HSPLandroid/hardware/location/ContextHubManager;->getNanoAppInstanceInfo(I)Landroid/hardware/location/NanoAppInstanceInfo;
-HSPLandroid/hardware/location/ContextHubManager;->invokeOnMessageReceiptCallback(IILandroid/hardware/location/ContextHubMessage;)V
-HSPLandroid/hardware/location/ContextHubManager;->queryNanoApps(Landroid/hardware/location/ContextHubInfo;)Landroid/hardware/location/ContextHubTransaction;
-HSPLandroid/hardware/location/ContextHubManager;->registerCallback(Landroid/hardware/location/ContextHubManager$Callback;Landroid/os/Handler;)I
-HSPLandroid/hardware/location/ContextHubManager;->sendMessage(IILandroid/hardware/location/ContextHubMessage;)I
 HSPLandroid/hardware/location/ContextHubMessage$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/location/ContextHubMessage;
 HSPLandroid/hardware/location/ContextHubMessage$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/hardware/location/ContextHubMessage;-><init>(II[B)V
-PLandroid/hardware/location/ContextHubMessage;-><init>(Landroid/os/Parcel;)V
-PLandroid/hardware/location/ContextHubMessage;-><init>(Landroid/os/Parcel;Landroid/hardware/location/ContextHubMessage$1;)V
-HSPLandroid/hardware/location/ContextHubMessage;->getData()[B
-HSPLandroid/hardware/location/ContextHubMessage;->getMsgType()I
-HPLandroid/hardware/location/ContextHubMessage;->getVersion()I
-HSPLandroid/hardware/location/ContextHubMessage;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/hardware/location/ContextHubTransaction$Response;-><init>(ILjava/lang/Object;)V
-HSPLandroid/hardware/location/ContextHubTransaction$Response;->getContents()Ljava/lang/Object;
-HSPLandroid/hardware/location/ContextHubTransaction$Response;->getResult()I
-PLandroid/hardware/location/ContextHubTransaction;->lambda$setOnCompleteListener$0$ContextHubTransaction()V
-HSPLandroid/hardware/location/ContextHubTransaction;->lambda$setResponse$1$ContextHubTransaction()V
-HSPLandroid/hardware/location/ContextHubTransaction;->setOnCompleteListener(Landroid/hardware/location/ContextHubTransaction$OnCompleteListener;Ljava/util/concurrent/Executor;)V
-HSPLandroid/hardware/location/ContextHubTransaction;->setResponse(Landroid/hardware/location/ContextHubTransaction$Response;)V
-HPLandroid/hardware/location/ContextHubTransaction;->waitForResponse(JLjava/util/concurrent/TimeUnit;)Landroid/hardware/location/ContextHubTransaction$Response;
-HSPLandroid/hardware/location/GeofenceHardware$GeofenceHardwareMonitorCallbackWrapper;-><init>(Landroid/hardware/location/GeofenceHardware;Landroid/hardware/location/GeofenceHardwareMonitorCallback;)V
-HSPLandroid/hardware/location/GeofenceHardware;-><init>(Landroid/hardware/location/IGeofenceHardware;)V
-HSPLandroid/hardware/location/GeofenceHardware;->getMonitorCallbackWrapper(Landroid/hardware/location/GeofenceHardwareMonitorCallback;)Landroid/hardware/location/GeofenceHardware$GeofenceHardwareMonitorCallbackWrapper;
-HSPLandroid/hardware/location/GeofenceHardware;->getMonitoringTypes()[I
-HSPLandroid/hardware/location/GeofenceHardware;->getStatusOfMonitoringType(I)I
-HSPLandroid/hardware/location/GeofenceHardware;->registerForMonitorStateChangeCallback(ILandroid/hardware/location/GeofenceHardwareMonitorCallback;)Z
-HSPLandroid/hardware/location/GeofenceHardwareCallback;-><init>()V
-PLandroid/hardware/location/GeofenceHardwareImpl$1;-><init>(Landroid/hardware/location/GeofenceHardwareImpl;)V
-PLandroid/hardware/location/GeofenceHardwareImpl$1;->handleMessage(Landroid/os/Message;)V
-PLandroid/hardware/location/GeofenceHardwareImpl$2;-><init>(Landroid/hardware/location/GeofenceHardwareImpl;)V
-PLandroid/hardware/location/GeofenceHardwareImpl$2;->handleMessage(Landroid/os/Message;)V
-PLandroid/hardware/location/GeofenceHardwareImpl$3;-><init>(Landroid/hardware/location/GeofenceHardwareImpl;)V
-PLandroid/hardware/location/GeofenceHardwareImpl$3;->handleMessage(Landroid/os/Message;)V
-PLandroid/hardware/location/GeofenceHardwareImpl$GeofenceTransition;-><init>(Landroid/hardware/location/GeofenceHardwareImpl;IIJLandroid/location/Location;II)V
-PLandroid/hardware/location/GeofenceHardwareImpl$GeofenceTransition;->access$1000(Landroid/hardware/location/GeofenceHardwareImpl$GeofenceTransition;)I
-PLandroid/hardware/location/GeofenceHardwareImpl$GeofenceTransition;->access$600(Landroid/hardware/location/GeofenceHardwareImpl$GeofenceTransition;)I
-PLandroid/hardware/location/GeofenceHardwareImpl$GeofenceTransition;->access$700(Landroid/hardware/location/GeofenceHardwareImpl$GeofenceTransition;)I
-PLandroid/hardware/location/GeofenceHardwareImpl$GeofenceTransition;->access$800(Landroid/hardware/location/GeofenceHardwareImpl$GeofenceTransition;)Landroid/location/Location;
-PLandroid/hardware/location/GeofenceHardwareImpl$GeofenceTransition;->access$900(Landroid/hardware/location/GeofenceHardwareImpl$GeofenceTransition;)J
-PLandroid/hardware/location/GeofenceHardwareImpl$Reaper;-><init>(Landroid/hardware/location/GeofenceHardwareImpl;Landroid/hardware/location/IGeofenceHardwareCallback;I)V
-PLandroid/hardware/location/GeofenceHardwareImpl$Reaper;-><init>(Landroid/hardware/location/GeofenceHardwareImpl;Landroid/hardware/location/IGeofenceHardwareMonitorCallback;I)V
-PLandroid/hardware/location/GeofenceHardwareImpl$Reaper;->access$300(Landroid/hardware/location/GeofenceHardwareImpl$Reaper;)Landroid/hardware/location/IGeofenceHardwareCallback;
-PLandroid/hardware/location/GeofenceHardwareImpl$Reaper;->access$400(Landroid/hardware/location/GeofenceHardwareImpl$Reaper;)Z
-PLandroid/hardware/location/GeofenceHardwareImpl$Reaper;->binderDied()V
-PLandroid/hardware/location/GeofenceHardwareImpl$Reaper;->binderEquals(Landroid/os/IInterface;Landroid/os/IInterface;)Z
-PLandroid/hardware/location/GeofenceHardwareImpl$Reaper;->equals(Ljava/lang/Object;)Z
-PLandroid/hardware/location/GeofenceHardwareImpl$Reaper;->unlinkToDeath()Z
-PLandroid/hardware/location/GeofenceHardwareImpl;-><clinit>()V
-PLandroid/hardware/location/GeofenceHardwareImpl;-><init>(Landroid/content/Context;)V
-PLandroid/hardware/location/GeofenceHardwareImpl;->access$000(Landroid/hardware/location/GeofenceHardwareImpl;)Landroid/util/SparseArray;
-PLandroid/hardware/location/GeofenceHardwareImpl;->access$100(Landroid/hardware/location/GeofenceHardwareImpl;)V
-PLandroid/hardware/location/GeofenceHardwareImpl;->access$1100(Landroid/hardware/location/GeofenceHardwareImpl;)[Ljava/util/ArrayList;
-PLandroid/hardware/location/GeofenceHardwareImpl;->access$1300(Landroid/hardware/location/GeofenceHardwareImpl;)Landroid/os/Handler;
-PLandroid/hardware/location/GeofenceHardwareImpl;->access$1400(Landroid/hardware/location/GeofenceHardwareImpl;)Landroid/os/Handler;
-PLandroid/hardware/location/GeofenceHardwareImpl;->access$200(Landroid/hardware/location/GeofenceHardwareImpl;)Ljava/util/ArrayList;
-PLandroid/hardware/location/GeofenceHardwareImpl;->access$500()Z
-PLandroid/hardware/location/GeofenceHardwareImpl;->acquireWakeLock()V
-PLandroid/hardware/location/GeofenceHardwareImpl;->addCircularFence(ILandroid/hardware/location/GeofenceHardwareRequestParcelable;Landroid/hardware/location/IGeofenceHardwareCallback;)Z
-PLandroid/hardware/location/GeofenceHardwareImpl;->getAllowedResolutionLevel(II)I
-PLandroid/hardware/location/GeofenceHardwareImpl;->getInstance(Landroid/content/Context;)Landroid/hardware/location/GeofenceHardwareImpl;
-PLandroid/hardware/location/GeofenceHardwareImpl;->getMonitoringResolutionLevel(I)I
-PLandroid/hardware/location/GeofenceHardwareImpl;->getMonitoringTypes()[I
-PLandroid/hardware/location/GeofenceHardwareImpl;->getStatusOfMonitoringType(I)I
-PLandroid/hardware/location/GeofenceHardwareImpl;->registerForMonitorStateChangeCallback(ILandroid/hardware/location/IGeofenceHardwareMonitorCallback;)Z
-PLandroid/hardware/location/GeofenceHardwareImpl;->releaseWakeLock()V
-PLandroid/hardware/location/GeofenceHardwareImpl;->removeGeofence(II)Z
-PLandroid/hardware/location/GeofenceHardwareImpl;->reportGeofenceAddStatus(II)V
-PLandroid/hardware/location/GeofenceHardwareImpl;->reportGeofenceMonitorStatus(IILandroid/location/Location;I)V
-PLandroid/hardware/location/GeofenceHardwareImpl;->reportGeofenceOperationStatus(III)V
-PLandroid/hardware/location/GeofenceHardwareImpl;->reportGeofenceRemoveStatus(II)V
-PLandroid/hardware/location/GeofenceHardwareImpl;->reportGeofenceTransition(ILandroid/location/Location;IJII)V
-PLandroid/hardware/location/GeofenceHardwareImpl;->setGpsHardwareGeofence(Landroid/location/IGpsGeofenceHardware;)V
-PLandroid/hardware/location/GeofenceHardwareImpl;->setMonitorAvailability(II)V
-PLandroid/hardware/location/GeofenceHardwareImpl;->updateGpsHardwareAvailability()V
-HSPLandroid/hardware/location/GeofenceHardwareMonitorCallback;-><init>()V
-HPLandroid/hardware/location/GeofenceHardwareMonitorEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/location/GeofenceHardwareMonitorEvent;
-HPLandroid/hardware/location/GeofenceHardwareMonitorEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/hardware/location/GeofenceHardwareMonitorEvent;-><init>(IIILandroid/location/Location;)V
-HPLandroid/hardware/location/GeofenceHardwareMonitorEvent;->getLocation()Landroid/location/Location;
-HPLandroid/hardware/location/GeofenceHardwareMonitorEvent;->getMonitoringStatus()I
-PLandroid/hardware/location/GeofenceHardwareMonitorEvent;->getMonitoringType()I
-PLandroid/hardware/location/GeofenceHardwareMonitorEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/hardware/location/GeofenceHardwareRequest;-><init>()V
-PLandroid/hardware/location/GeofenceHardwareRequest;->createCircularGeofence(DDD)Landroid/hardware/location/GeofenceHardwareRequest;
-PLandroid/hardware/location/GeofenceHardwareRequest;->getLastTransition()I
-PLandroid/hardware/location/GeofenceHardwareRequest;->getLatitude()D
-PLandroid/hardware/location/GeofenceHardwareRequest;->getLongitude()D
-PLandroid/hardware/location/GeofenceHardwareRequest;->getMonitorTransitions()I
-PLandroid/hardware/location/GeofenceHardwareRequest;->getNotificationResponsiveness()I
-PLandroid/hardware/location/GeofenceHardwareRequest;->getRadius()D
-HPLandroid/hardware/location/GeofenceHardwareRequest;->getSourceTechnologies()I
-HPLandroid/hardware/location/GeofenceHardwareRequest;->getType()I
-PLandroid/hardware/location/GeofenceHardwareRequest;->getUnknownTimer()I
-PLandroid/hardware/location/GeofenceHardwareRequest;->setCircularGeofence(DDD)V
-PLandroid/hardware/location/GeofenceHardwareRequest;->setLastTransition(I)V
-PLandroid/hardware/location/GeofenceHardwareRequest;->setMonitorTransitions(I)V
-PLandroid/hardware/location/GeofenceHardwareRequest;->setNotificationResponsiveness(I)V
-PLandroid/hardware/location/GeofenceHardwareRequest;->setSourceTechnologies(I)V
-PLandroid/hardware/location/GeofenceHardwareRequest;->setUnknownTimer(I)V
-PLandroid/hardware/location/GeofenceHardwareRequestParcelable$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/location/GeofenceHardwareRequestParcelable;
-PLandroid/hardware/location/GeofenceHardwareRequestParcelable$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/hardware/location/GeofenceHardwareRequestParcelable;-><init>(ILandroid/hardware/location/GeofenceHardwareRequest;)V
-PLandroid/hardware/location/GeofenceHardwareRequestParcelable;->getId()I
-PLandroid/hardware/location/GeofenceHardwareRequestParcelable;->getLastTransition()I
-PLandroid/hardware/location/GeofenceHardwareRequestParcelable;->getLatitude()D
-PLandroid/hardware/location/GeofenceHardwareRequestParcelable;->getLongitude()D
-PLandroid/hardware/location/GeofenceHardwareRequestParcelable;->getMonitorTransitions()I
-PLandroid/hardware/location/GeofenceHardwareRequestParcelable;->getNotificationResponsiveness()I
-PLandroid/hardware/location/GeofenceHardwareRequestParcelable;->getRadius()D
-HPLandroid/hardware/location/GeofenceHardwareRequestParcelable;->getSourceTechnologies()I
-HPLandroid/hardware/location/GeofenceHardwareRequestParcelable;->getType()I
-PLandroid/hardware/location/GeofenceHardwareRequestParcelable;->getUnknownTimer()I
-HPLandroid/hardware/location/GeofenceHardwareRequestParcelable;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/hardware/location/GeofenceHardwareService$1;-><init>(Landroid/hardware/location/GeofenceHardwareService;)V
-PLandroid/hardware/location/GeofenceHardwareService$1;->addCircularFence(ILandroid/hardware/location/GeofenceHardwareRequestParcelable;Landroid/hardware/location/IGeofenceHardwareCallback;)Z
-PLandroid/hardware/location/GeofenceHardwareService$1;->getMonitoringTypes()[I
-PLandroid/hardware/location/GeofenceHardwareService$1;->getStatusOfMonitoringType(I)I
-PLandroid/hardware/location/GeofenceHardwareService$1;->registerForMonitorStateChangeCallback(ILandroid/hardware/location/IGeofenceHardwareMonitorCallback;)Z
-PLandroid/hardware/location/GeofenceHardwareService$1;->removeGeofence(II)Z
-PLandroid/hardware/location/GeofenceHardwareService$1;->setGpsGeofenceHardware(Landroid/location/IGpsGeofenceHardware;)V
-PLandroid/hardware/location/GeofenceHardwareService;-><init>()V
-PLandroid/hardware/location/GeofenceHardwareService;->access$000(Landroid/hardware/location/GeofenceHardwareService;)Landroid/hardware/location/GeofenceHardwareImpl;
-PLandroid/hardware/location/GeofenceHardwareService;->access$100(Landroid/hardware/location/GeofenceHardwareService;)Landroid/content/Context;
-PLandroid/hardware/location/GeofenceHardwareService;->access$200(Landroid/hardware/location/GeofenceHardwareService;III)V
-PLandroid/hardware/location/GeofenceHardwareService;->checkPermission(III)V
-PLandroid/hardware/location/GeofenceHardwareService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
-PLandroid/hardware/location/GeofenceHardwareService;->onCreate()V
-HSPLandroid/hardware/location/IActivityRecognitionHardware$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IActivityRecognitionHardware;
-PLandroid/hardware/location/IActivityRecognitionHardwareClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/hardware/location/IActivityRecognitionHardwareClient$Stub$Proxy;->onAvailabilityChanged(ZLandroid/hardware/location/IActivityRecognitionHardware;)V
-HSPLandroid/hardware/location/IActivityRecognitionHardwareClient$Stub;-><init>()V
-PLandroid/hardware/location/IActivityRecognitionHardwareClient$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IActivityRecognitionHardwareClient;
-HSPLandroid/hardware/location/IActivityRecognitionHardwareClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/hardware/location/IContextHubCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/hardware/location/IContextHubCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/hardware/location/IContextHubCallback$Stub$Proxy;->onMessageReceipt(IILandroid/hardware/location/ContextHubMessage;)V
-HSLandroid/hardware/location/IContextHubCallback$Stub;-><init>()V
-HSPLandroid/hardware/location/IContextHubCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/hardware/location/IContextHubCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IContextHubCallback;
-HSPLandroid/hardware/location/IContextHubCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/hardware/location/IContextHubClient$Stub$Proxy;->close()V
-HSPLandroid/hardware/location/IContextHubClient$Stub$Proxy;->sendMessageToNanoApp(Landroid/hardware/location/NanoAppMessage;)I
-HSPLandroid/hardware/location/IContextHubClient$Stub;-><init>()V
-PLandroid/hardware/location/IContextHubClient$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/hardware/location/ContextHubMessage;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/hardware/location/ContextHubMessage;-><init>(Landroid/os/Parcel;Landroid/hardware/location/ContextHubMessage$1;)V
 HSPLandroid/hardware/location/IContextHubClient$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IContextHubClient;
-PLandroid/hardware/location/IContextHubClient$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/hardware/location/IContextHubClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/hardware/location/IContextHubClientCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/hardware/location/IContextHubClientCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/hardware/location/IContextHubClientCallback$Stub$Proxy;->onMessageFromNanoApp(Landroid/hardware/location/NanoAppMessage;)V
 HSPLandroid/hardware/location/IContextHubClientCallback$Stub;-><init>()V
 HSPLandroid/hardware/location/IContextHubClientCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/hardware/location/IContextHubClientCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IContextHubClientCallback;
-HSPLandroid/hardware/location/IContextHubClientCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSLandroid/hardware/location/IContextHubService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/hardware/location/IContextHubService$Stub$Proxy;->createClient(ILandroid/hardware/location/IContextHubClientCallback;)Landroid/hardware/location/IContextHubClient;
-HPLandroid/hardware/location/IContextHubService$Stub$Proxy;->createPendingIntentClient(ILandroid/app/PendingIntent;J)Landroid/hardware/location/IContextHubClient;
-HSPLandroid/hardware/location/IContextHubService$Stub$Proxy;->findNanoAppOnHub(ILandroid/hardware/location/NanoAppFilter;)[I
-HSPLandroid/hardware/location/IContextHubService$Stub$Proxy;->getContextHubHandles()[I
-HSPLandroid/hardware/location/IContextHubService$Stub$Proxy;->getContextHubInfo(I)Landroid/hardware/location/ContextHubInfo;
-HSPLandroid/hardware/location/IContextHubService$Stub$Proxy;->getContextHubs()Ljava/util/List;
-HSPLandroid/hardware/location/IContextHubService$Stub$Proxy;->getNanoAppInstanceInfo(I)Landroid/hardware/location/NanoAppInstanceInfo;
-HSPLandroid/hardware/location/IContextHubService$Stub$Proxy;->queryNanoApps(ILandroid/hardware/location/IContextHubTransactionCallback;)V
-HSPLandroid/hardware/location/IContextHubService$Stub$Proxy;->registerCallback(Landroid/hardware/location/IContextHubCallback;)I
-HSPLandroid/hardware/location/IContextHubService$Stub$Proxy;->sendMessage(IILandroid/hardware/location/ContextHubMessage;)I
-HSPLandroid/hardware/location/IContextHubService$Stub;-><init>()V
-HSLandroid/hardware/location/IContextHubService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IContextHubService;
-PLandroid/hardware/location/IContextHubService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/hardware/location/IContextHubService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/hardware/location/IContextHubTransactionCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/hardware/location/IContextHubTransactionCallback$Stub$Proxy;->onQueryResponse(ILjava/util/List;)V
 HSPLandroid/hardware/location/IContextHubTransactionCallback$Stub;-><init>()V
-HSPLandroid/hardware/location/IContextHubTransactionCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/hardware/location/IContextHubTransactionCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IContextHubTransactionCallback;
-HSPLandroid/hardware/location/IContextHubTransactionCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/hardware/location/IGeofenceHardware$Stub$Proxy;->addCircularFence(ILandroid/hardware/location/GeofenceHardwareRequestParcelable;Landroid/hardware/location/IGeofenceHardwareCallback;)Z
-HSPLandroid/hardware/location/IGeofenceHardware$Stub$Proxy;->getMonitoringTypes()[I
-HSPLandroid/hardware/location/IGeofenceHardware$Stub$Proxy;->getStatusOfMonitoringType(I)I
-HSPLandroid/hardware/location/IGeofenceHardware$Stub$Proxy;->registerForMonitorStateChangeCallback(ILandroid/hardware/location/IGeofenceHardwareMonitorCallback;)Z
-HPLandroid/hardware/location/IGeofenceHardware$Stub$Proxy;->removeGeofence(II)Z
-PLandroid/hardware/location/IGeofenceHardware$Stub;-><init>()V
-PLandroid/hardware/location/IGeofenceHardware$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/hardware/location/IGeofenceHardware$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IGeofenceHardware;
-PLandroid/hardware/location/IGeofenceHardware$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/hardware/location/IGeofenceHardwareCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/hardware/location/IGeofenceHardwareCallback$Stub$Proxy;->onGeofenceAdd(II)V
-PLandroid/hardware/location/IGeofenceHardwareCallback$Stub$Proxy;->onGeofenceRemove(II)V
-PLandroid/hardware/location/IGeofenceHardwareCallback$Stub$Proxy;->onGeofenceTransition(IILandroid/location/Location;JI)V
-HPLandroid/hardware/location/IGeofenceHardwareCallback$Stub;-><init>()V
-HPLandroid/hardware/location/IGeofenceHardwareCallback$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/hardware/location/IGeofenceHardwareCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub$Proxy;->onMonitoringSystemChange(Landroid/hardware/location/GeofenceHardwareMonitorEvent;)V
-HSPLandroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub;-><init>()V
-HSPLandroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IGeofenceHardwareMonitorCallback;
-HPLandroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/hardware/location/MemoryRegion$1;->newArray(I)[Landroid/hardware/location/MemoryRegion;
-HSPLandroid/hardware/location/MemoryRegion$1;->newArray(I)[Ljava/lang/Object;
-PLandroid/hardware/location/NanoAppFilter$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/location/NanoAppFilter;
-PLandroid/hardware/location/NanoAppFilter$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/hardware/location/NanoAppFilter;-><init>(JIIJ)V
-PLandroid/hardware/location/NanoAppFilter;-><init>(Landroid/os/Parcel;)V
-PLandroid/hardware/location/NanoAppFilter;-><init>(Landroid/os/Parcel;Landroid/hardware/location/NanoAppFilter$1;)V
-PLandroid/hardware/location/NanoAppFilter;->testMatch(Landroid/hardware/location/NanoAppInstanceInfo;)Z
-PLandroid/hardware/location/NanoAppFilter;->versionsMatch(III)Z
-HSPLandroid/hardware/location/NanoAppFilter;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/hardware/location/NanoAppInstanceInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/location/NanoAppInstanceInfo;
-HSPLandroid/hardware/location/NanoAppInstanceInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/hardware/location/NanoAppInstanceInfo;-><init>(IJII)V
-HSPLandroid/hardware/location/NanoAppInstanceInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/hardware/location/NanoAppInstanceInfo;->getAppId()J
-HSPLandroid/hardware/location/NanoAppInstanceInfo;->getAppVersion()I
-HSPLandroid/hardware/location/NanoAppInstanceInfo;->getContexthubId()I
-PLandroid/hardware/location/NanoAppInstanceInfo;->getHandle()I
-PLandroid/hardware/location/NanoAppInstanceInfo;->toString()Ljava/lang/String;
-PLandroid/hardware/location/NanoAppInstanceInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/hardware/location/NanoAppMessage$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/location/NanoAppMessage;
 HSPLandroid/hardware/location/NanoAppMessage$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/hardware/location/NanoAppMessage;-><init>(JI[BZ)V
+HSPLandroid/hardware/location/NanoAppMessage;-><init>(JI[BZ)V
 HSPLandroid/hardware/location/NanoAppMessage;-><init>(Landroid/os/Parcel;)V
-PLandroid/hardware/location/NanoAppMessage;-><init>(Landroid/os/Parcel;Landroid/hardware/location/NanoAppMessage$1;)V
-PLandroid/hardware/location/NanoAppMessage;->createMessageFromNanoApp(JI[BZ)Landroid/hardware/location/NanoAppMessage;
+HSPLandroid/hardware/location/NanoAppMessage;-><init>(Landroid/os/Parcel;Landroid/hardware/location/NanoAppMessage$1;)V
 HSPLandroid/hardware/location/NanoAppMessage;->createMessageToNanoApp(JI[B)Landroid/hardware/location/NanoAppMessage;
-HPLandroid/hardware/location/NanoAppMessage;->describeContents()I
-PLandroid/hardware/location/NanoAppMessage;->getMessageBody()[B
+HSPLandroid/hardware/location/NanoAppMessage;->getMessageBody()[B
 HSPLandroid/hardware/location/NanoAppMessage;->getMessageType()I
-PLandroid/hardware/location/NanoAppMessage;->getNanoAppId()J
-PLandroid/hardware/location/NanoAppMessage;->isBroadcastMessage()Z
-HPLandroid/hardware/location/NanoAppMessage;->toString()Ljava/lang/String;
+HSPLandroid/hardware/location/NanoAppMessage;->getNanoAppId()J
 HSPLandroid/hardware/location/NanoAppMessage;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/hardware/location/NanoAppState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/location/NanoAppState;
-HSPLandroid/hardware/location/NanoAppState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/hardware/location/NanoAppState;-><init>(JIZ)V
-HSPLandroid/hardware/location/NanoAppState;->getNanoAppId()J
-PLandroid/hardware/location/NanoAppState;->getNanoAppVersion()J
-PLandroid/hardware/location/NanoAppState;->isEnabled()Z
-PLandroid/hardware/location/NanoAppState;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/hardware/radio/V1_0/ActivityStatsInfo;-><init>()V
-HPLandroid/hardware/radio/V1_0/ActivityStatsInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HPLandroid/hardware/radio/V1_0/ActivityStatsInfo;->readFromParcel(Landroid/os/HwParcel;)V
-HSPLandroid/hardware/radio/V1_0/CardStatus;-><init>()V
-HSPLandroid/hardware/radio/V1_0/CardStatus;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_0/CdmaSignalStrength;-><init>()V
-HSPLandroid/hardware/radio/V1_0/CdmaSignalStrength;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_0/CellIdentityGsm;-><init>()V
-HPLandroid/hardware/radio/V1_0/CellIdentityGsm;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HPLandroid/hardware/radio/V1_0/CellIdentityGsm;->toString()Ljava/lang/String;
-HPLandroid/hardware/radio/V1_0/CellIdentityLte;-><init>()V
-HPLandroid/hardware/radio/V1_0/CellIdentityLte;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HPLandroid/hardware/radio/V1_0/CellIdentityLte;->toString()Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_0/CellIdentityWcdma;-><init>()V
-HSPLandroid/hardware/radio/V1_0/CellIdentityWcdma;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_0/CellIdentityWcdma;->toString()Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_0/CellInfoType;->toString(I)Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_0/EvdoSignalStrength;-><init>()V
-HSPLandroid/hardware/radio/V1_0/EvdoSignalStrength;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_0/GsmSignalStrength;-><init>()V
-HSPLandroid/hardware/radio/V1_0/GsmSignalStrength;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_0/HardwareConfig;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
-HSPLandroid/hardware/radio/V1_0/LteSignalStrength;-><init>()V
-HSPLandroid/hardware/radio/V1_0/LteSignalStrength;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_0/RadioCapability;-><init>()V
-HSPLandroid/hardware/radio/V1_0/RadioCapability;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_0/RadioCapability;->readFromParcel(Landroid/os/HwParcel;)V
-HSPLandroid/hardware/radio/V1_0/RadioResponseInfo;-><init>()V
-HSPLandroid/hardware/radio/V1_0/RadioResponseInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_0/RadioResponseInfo;->readFromParcel(Landroid/os/HwParcel;)V
-HSPLandroid/hardware/radio/V1_0/RegState;->toString(I)Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_0/WcdmaSignalStrength;-><init>()V
-HSPLandroid/hardware/radio/V1_0/WcdmaSignalStrength;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_2/Call;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
-HSPLandroid/hardware/radio/V1_2/CardStatus;-><init>()V
-HSPLandroid/hardware/radio/V1_2/CardStatus;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_2/CellIdentity;-><init>()V
-HSPLandroid/hardware/radio/V1_2/CellIdentity;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_2/CellIdentity;->toString()Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_2/CellIdentityGsm;-><init>()V
-HPLandroid/hardware/radio/V1_2/CellIdentityGsm;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HPLandroid/hardware/radio/V1_2/CellIdentityGsm;->toString()Ljava/lang/String;
-HPLandroid/hardware/radio/V1_2/CellIdentityLte;-><init>()V
-HPLandroid/hardware/radio/V1_2/CellIdentityLte;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HPLandroid/hardware/radio/V1_2/CellIdentityLte;->toString()Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_2/CellIdentityOperatorNames;-><init>()V
-HSPLandroid/hardware/radio/V1_2/CellIdentityOperatorNames;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_2/CellIdentityOperatorNames;->toString()Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_2/CellIdentityWcdma;-><init>()V
-HSPLandroid/hardware/radio/V1_2/CellIdentityWcdma;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_2/CellIdentityWcdma;->toString()Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_2/CellInfoGsm;-><init>()V
-HPLandroid/hardware/radio/V1_2/CellInfoGsm;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HPLandroid/hardware/radio/V1_2/CellInfoLte;-><init>()V
-HPLandroid/hardware/radio/V1_2/CellInfoLte;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_2/CellInfoWcdma;-><init>()V
-HSPLandroid/hardware/radio/V1_2/CellInfoWcdma;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_2/DataRegStateResult;-><init>()V
-HSPLandroid/hardware/radio/V1_2/DataRegStateResult;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_2/DataRegStateResult;->toString()Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_2/PhysicalChannelConfig;-><init>()V
-HSPLandroid/hardware/radio/V1_2/PhysicalChannelConfig;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_2/TdscdmaSignalStrength;-><init>()V
-HSPLandroid/hardware/radio/V1_2/TdscdmaSignalStrength;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_2/VoiceRegStateResult;-><init>()V
-HSPLandroid/hardware/radio/V1_2/VoiceRegStateResult;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_2/VoiceRegStateResult;->readFromParcel(Landroid/os/HwParcel;)V
-HSPLandroid/hardware/radio/V1_2/VoiceRegStateResult;->toString()Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_2/WcdmaSignalStrength;-><init>()V
-HSPLandroid/hardware/radio/V1_2/WcdmaSignalStrength;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_4/CardStatus;-><init>()V
-HSPLandroid/hardware/radio/V1_4/CardStatus;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_4/CardStatus;->readFromParcel(Landroid/os/HwParcel;)V
-HPLandroid/hardware/radio/V1_4/CarrierRestrictionsWithPriority;-><init>()V
-HPLandroid/hardware/radio/V1_4/CarrierRestrictionsWithPriority;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HPLandroid/hardware/radio/V1_4/CarrierRestrictionsWithPriority;->readFromParcel(Landroid/os/HwParcel;)V
-HSPLandroid/hardware/radio/V1_4/CellInfo;-><init>()V
-HSPLandroid/hardware/radio/V1_4/CellInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_4/CellInfo;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
-HSPLandroid/hardware/radio/V1_4/DataRegStateResult$VopsInfo;-><init>()V
-HSPLandroid/hardware/radio/V1_4/DataRegStateResult$VopsInfo;->getDiscriminator()B
-HSPLandroid/hardware/radio/V1_4/DataRegStateResult$VopsInfo;->noinit()Landroid/internal/hidl/safe_union/V1_0/Monostate;
-HSPLandroid/hardware/radio/V1_4/DataRegStateResult$VopsInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_4/DataRegStateResult$VopsInfo;->toString()Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_4/DataRegStateResult;-><init>()V
-HSPLandroid/hardware/radio/V1_4/DataRegStateResult;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_4/DataRegStateResult;->readFromParcel(Landroid/os/HwParcel;)V
-HSPLandroid/hardware/radio/V1_4/DataRegStateResult;->toString()Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_4/EmergencyNumber;-><init>()V
-HSPLandroid/hardware/radio/V1_4/EmergencyNumber;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_4/EmergencyNumber;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
-HSPLandroid/hardware/radio/V1_4/IRadio;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/radio/V1_4/IRadio;
-HSPLandroid/hardware/radio/V1_4/IRadio;->getService(Ljava/lang/String;Z)Landroid/hardware/radio/V1_4/IRadio;
-HSPLandroid/hardware/radio/V1_4/IRadioIndication$Stub;-><init>()V
-HSPLandroid/hardware/radio/V1_4/IRadioIndication$Stub;->asBinder()Landroid/os/IHwBinder;
-HSPLandroid/hardware/radio/V1_4/IRadioIndication$Stub;->interfaceChain()Ljava/util/ArrayList;
-HSPLandroid/hardware/radio/V1_4/IRadioIndication$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
-HSPLandroid/hardware/radio/V1_4/IRadioResponse$Stub;-><init>()V
-HSPLandroid/hardware/radio/V1_4/IRadioResponse$Stub;->asBinder()Landroid/os/IHwBinder;
-HSPLandroid/hardware/radio/V1_4/IRadioResponse$Stub;->interfaceChain()Ljava/util/ArrayList;
-HSPLandroid/hardware/radio/V1_4/IRadioResponse$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
-HSPLandroid/hardware/radio/V1_4/NrIndicators;-><init>()V
-HSPLandroid/hardware/radio/V1_4/NrIndicators;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_4/NrIndicators;->toString()Ljava/lang/String;
-HSPLandroid/hardware/radio/V1_4/PhysicalChannelConfig;-><init>()V
-HSPLandroid/hardware/radio/V1_4/PhysicalChannelConfig;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_4/PhysicalChannelConfig;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
-HSPLandroid/hardware/radio/V1_4/SignalStrength;-><init>()V
-HSPLandroid/hardware/radio/V1_4/SignalStrength;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/radio/V1_4/SignalStrength;->readFromParcel(Landroid/os/HwParcel;)V
-PLandroid/hardware/soundtrigger/IRecognitionStatusCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/hardware/soundtrigger/IRecognitionStatusCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/hardware/soundtrigger/IRecognitionStatusCallback$Stub$Proxy;->onKeyphraseDetected(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;)V
-HSPLandroid/hardware/soundtrigger/IRecognitionStatusCallback$Stub;-><init>()V
-HPLandroid/hardware/soundtrigger/IRecognitionStatusCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/hardware/soundtrigger/IRecognitionStatusCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/soundtrigger/IRecognitionStatusCallback;
-HPLandroid/hardware/soundtrigger/IRecognitionStatusCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;
-HPLandroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel$1;->newArray(I)[Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;
-PLandroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel$1;->newArray(I)[Ljava/lang/Object;
-PLandroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;-><init>(II)V
-HPLandroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;->access$600(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;
-HPLandroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;->fromParcel(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;
-PLandroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/hardware/soundtrigger/SoundTrigger$Keyphrase;-><init>(IILjava/lang/String;Ljava/lang/String;[I)V
-PLandroid/hardware/soundtrigger/SoundTrigger$Keyphrase;->equals(Ljava/lang/Object;)Z
-HPLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;
-HPLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;-><init>(IIZIIIZLandroid/media/AudioFormat;[B[Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;)V
-HPLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;->access$800(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;
-HPLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;->fromParcelForKeyphrase(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;
-PLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;
-PLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra$1;->newArray(I)[Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;
-PLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra$1;->newArray(I)[Ljava/lang/Object;
-PLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;-><init>(III[Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;)V
-PLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;->access$700(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;
-PLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;->fromParcel(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;
-PLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;-><init>(Ljava/util/UUID;Ljava/util/UUID;[B[Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;)V
-PLandroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;->equals(Ljava/lang/Object;)Z
-HSPLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
-HSPLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIIZIZIZ)V
-HSPLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;->access$000(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
-HSPLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;->fromParcel(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
-PLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;->toString()Ljava/lang/String;
-PLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;
-PLandroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;-><init>(ZZ[Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;[B)V
-PLandroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;->access$500(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;
-PLandroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;->fromParcel(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;
-HPLandroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;-><init>(IIZIIIZLandroid/media/AudioFormat;[B)V
-PLandroid/hardware/soundtrigger/SoundTrigger$SoundModel;-><init>(Ljava/util/UUID;Ljava/util/UUID;I[B)V
-HPLandroid/hardware/soundtrigger/SoundTrigger$SoundModel;->equals(Ljava/lang/Object;)Z
-PLandroid/hardware/soundtrigger/SoundTrigger;->attachModule(ILandroid/hardware/soundtrigger/SoundTrigger$StatusListener;Landroid/os/Handler;)Landroid/hardware/soundtrigger/SoundTriggerModule;
-HSPLandroid/hardware/soundtrigger/SoundTrigger;->getCurrentOpPackageName()Ljava/lang/String;
-HSPLandroid/hardware/soundtrigger/SoundTrigger;->listModules(Ljava/util/ArrayList;)I
-PLandroid/hardware/soundtrigger/SoundTriggerModule$NativeEventHandlerDelegate$1;-><init>(Landroid/hardware/soundtrigger/SoundTriggerModule$NativeEventHandlerDelegate;Landroid/os/Looper;Landroid/hardware/soundtrigger/SoundTriggerModule;Landroid/hardware/soundtrigger/SoundTrigger$StatusListener;)V
-PLandroid/hardware/soundtrigger/SoundTriggerModule$NativeEventHandlerDelegate$1;->handleMessage(Landroid/os/Message;)V
-PLandroid/hardware/soundtrigger/SoundTriggerModule$NativeEventHandlerDelegate;-><init>(Landroid/hardware/soundtrigger/SoundTriggerModule;Landroid/hardware/soundtrigger/SoundTrigger$StatusListener;Landroid/os/Handler;)V
-PLandroid/hardware/soundtrigger/SoundTriggerModule$NativeEventHandlerDelegate;->handler()Landroid/os/Handler;
-PLandroid/hardware/soundtrigger/SoundTriggerModule;-><init>(ILandroid/hardware/soundtrigger/SoundTrigger$StatusListener;Landroid/os/Handler;)V
-PLandroid/hardware/soundtrigger/SoundTriggerModule;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V
-HSPLandroid/hardware/thermal/V1_0/ThermalStatus;-><init>()V
-HSPLandroid/hardware/thermal/V1_0/ThermalStatus;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HSPLandroid/hardware/thermal/V1_0/ThermalStatus;->readFromParcel(Landroid/os/HwParcel;)V
-HPLandroid/hardware/thermal/V2_0/CoolingDevice;-><init>()V
-HPLandroid/hardware/thermal/V2_0/CoolingDevice;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-HPLandroid/hardware/thermal/V2_0/CoolingDevice;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
-HSPLandroid/hardware/thermal/V2_0/IThermal$Proxy;-><init>(Landroid/os/IHwBinder;)V
-HPLandroid/hardware/thermal/V2_0/IThermal$Proxy;->getCurrentCoolingDevices(ZILandroid/hardware/thermal/V2_0/IThermal$getCurrentCoolingDevicesCallback;)V
-HSPLandroid/hardware/thermal/V2_0/IThermal$Proxy;->getCurrentTemperatures(ZILandroid/hardware/thermal/V2_0/IThermal$getCurrentTemperaturesCallback;)V
-HSPLandroid/hardware/thermal/V2_0/IThermal$Proxy;->interfaceChain()Ljava/util/ArrayList;
-HSPLandroid/hardware/thermal/V2_0/IThermal$Proxy;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
-HSPLandroid/hardware/thermal/V2_0/IThermal$Proxy;->registerThermalChangedCallback(Landroid/hardware/thermal/V2_0/IThermalChangedCallback;ZI)Landroid/hardware/thermal/V1_0/ThermalStatus;
-HSPLandroid/hardware/thermal/V2_0/IThermal;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/thermal/V2_0/IThermal;
-HSPLandroid/hardware/thermal/V2_0/IThermal;->getService()Landroid/hardware/thermal/V2_0/IThermal;
-HSPLandroid/hardware/thermal/V2_0/IThermal;->getService(Ljava/lang/String;)Landroid/hardware/thermal/V2_0/IThermal;
-HSPLandroid/hardware/thermal/V2_0/IThermalChangedCallback$Stub;-><init>()V
-HSPLandroid/hardware/thermal/V2_0/IThermalChangedCallback$Stub;->asBinder()Landroid/os/IHwBinder;
-PLandroid/hardware/thermal/V2_0/IThermalChangedCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
-HSPLandroid/hardware/thermal/V2_0/Temperature;-><init>()V
-HSPLandroid/hardware/thermal/V2_0/Temperature;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-PLandroid/hardware/thermal/V2_0/Temperature;->readFromParcel(Landroid/os/HwParcel;)V
-HSPLandroid/hardware/thermal/V2_0/Temperature;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
-PLandroid/hardware/usb/AccessoryFilter;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/hardware/usb/AccessoryFilter;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
-PLandroid/hardware/usb/AccessoryFilter;->read(Lorg/xmlpull/v1/XmlPullParser;)Landroid/hardware/usb/AccessoryFilter;
-PLandroid/hardware/usb/DeviceFilter;-><clinit>()V
-PLandroid/hardware/usb/DeviceFilter;-><init>(IIIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/hardware/usb/DeviceFilter;-><init>(Landroid/hardware/usb/UsbDevice;)V
-PLandroid/hardware/usb/DeviceFilter;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
-PLandroid/hardware/usb/DeviceFilter;->hashCode()I
-PLandroid/hardware/usb/DeviceFilter;->matches(III)Z
-PLandroid/hardware/usb/DeviceFilter;->matches(Landroid/hardware/usb/UsbDevice;)Z
-HPLandroid/hardware/usb/DeviceFilter;->read(Lorg/xmlpull/v1/XmlPullParser;)Landroid/hardware/usb/DeviceFilter;
 HSPLandroid/hardware/usb/IUsbManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/hardware/usb/IUsbManager$Stub$Proxy;->getCurrentAccessory()Landroid/hardware/usb/UsbAccessory;
-HSPLandroid/hardware/usb/IUsbManager$Stub$Proxy;->getCurrentFunctions()J
-HSPLandroid/hardware/usb/IUsbManager$Stub$Proxy;->getDeviceList(Landroid/os/Bundle;)V
-HSPLandroid/hardware/usb/IUsbManager$Stub$Proxy;->getPortStatus(Ljava/lang/String;)Landroid/hardware/usb/UsbPortStatus;
-HSPLandroid/hardware/usb/IUsbManager$Stub$Proxy;->getPorts()Ljava/util/List;
-HSPLandroid/hardware/usb/IUsbManager$Stub;-><init>()V
 HSPLandroid/hardware/usb/IUsbManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/usb/IUsbManager;
-PLandroid/hardware/usb/IUsbManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/hardware/usb/IUsbManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/hardware/usb/IUsbSerialReader$Stub;-><init>()V
-PLandroid/hardware/usb/IUsbSerialReader$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/hardware/usb/ParcelableUsbPort$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/usb/ParcelableUsbPort;
-HSPLandroid/hardware/usb/ParcelableUsbPort$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/hardware/usb/ParcelableUsbPort;-><init>(Ljava/lang/String;IIZZ)V
-HSPLandroid/hardware/usb/ParcelableUsbPort;-><init>(Ljava/lang/String;IIZZLandroid/hardware/usb/ParcelableUsbPort$1;)V
-HSPLandroid/hardware/usb/ParcelableUsbPort;->describeContents()I
 HSPLandroid/hardware/usb/ParcelableUsbPort;->getUsbPort(Landroid/hardware/usb/UsbManager;)Landroid/hardware/usb/UsbPort;
-HSPLandroid/hardware/usb/ParcelableUsbPort;->of(Landroid/hardware/usb/UsbPort;)Landroid/hardware/usb/ParcelableUsbPort;
-PLandroid/hardware/usb/ParcelableUsbPort;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/hardware/usb/UsbConfiguration$1;-><init>()V
-PLandroid/hardware/usb/UsbConfiguration;-><clinit>()V
-PLandroid/hardware/usb/UsbConfiguration;-><init>(ILjava/lang/String;II)V
-PLandroid/hardware/usb/UsbConfiguration;->getInterfaceCount()I
-PLandroid/hardware/usb/UsbConfiguration;->setInterfaces([Landroid/os/Parcelable;)V
-PLandroid/hardware/usb/UsbConfiguration;->toString()Ljava/lang/String;
-PLandroid/hardware/usb/UsbConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/hardware/usb/UsbDevice$Builder;-><init>(Ljava/lang/String;IIIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Landroid/hardware/usb/UsbConfiguration;Ljava/lang/String;ZZZZZ)V
-PLandroid/hardware/usb/UsbDevice$Builder;->build(Landroid/hardware/usb/IUsbSerialReader;)Landroid/hardware/usb/UsbDevice;
-PLandroid/hardware/usb/UsbDevice;-><init>(Ljava/lang/String;IIIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Landroid/hardware/usb/UsbConfiguration;Landroid/hardware/usb/IUsbSerialReader;ZZZZZ)V
-PLandroid/hardware/usb/UsbDevice;-><init>(Ljava/lang/String;IIIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Landroid/hardware/usb/UsbConfiguration;Landroid/hardware/usb/IUsbSerialReader;ZZZZZLandroid/hardware/usb/UsbDevice$1;)V
-PLandroid/hardware/usb/UsbDevice;->describeContents()I
-PLandroid/hardware/usb/UsbDevice;->getConfiguration(I)Landroid/hardware/usb/UsbConfiguration;
-PLandroid/hardware/usb/UsbDevice;->getConfigurationCount()I
-PLandroid/hardware/usb/UsbDevice;->getDeviceClass()I
-PLandroid/hardware/usb/UsbDevice;->getDeviceId()I
-PLandroid/hardware/usb/UsbDevice;->getDeviceId(Ljava/lang/String;)I
-PLandroid/hardware/usb/UsbDevice;->getDeviceProtocol()I
-PLandroid/hardware/usb/UsbDevice;->getDeviceSubclass()I
-PLandroid/hardware/usb/UsbDevice;->getInterfaceCount()I
-PLandroid/hardware/usb/UsbDevice;->getInterfaceList()[Landroid/hardware/usb/UsbInterface;
-PLandroid/hardware/usb/UsbDevice;->getManufacturerName()Ljava/lang/String;
-PLandroid/hardware/usb/UsbDevice;->getProductId()I
-PLandroid/hardware/usb/UsbDevice;->getProductName()Ljava/lang/String;
-PLandroid/hardware/usb/UsbDevice;->getSerialNumber()Ljava/lang/String;
-PLandroid/hardware/usb/UsbDevice;->getVendorId()I
-PLandroid/hardware/usb/UsbDevice;->toString()Ljava/lang/String;
-HPLandroid/hardware/usb/UsbDevice;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/hardware/usb/UsbManager;-><init>(Landroid/content/Context;Landroid/hardware/usb/IUsbManager;)V
-PLandroid/hardware/usb/UsbManager;->getAccessoryList()[Landroid/hardware/usb/UsbAccessory;
-HSPLandroid/hardware/usb/UsbManager;->getCurrentFunctions()J
 HSPLandroid/hardware/usb/UsbManager;->getDeviceList()Ljava/util/HashMap;
-HSPLandroid/hardware/usb/UsbManager;->getPortStatus(Landroid/hardware/usb/UsbPort;)Landroid/hardware/usb/UsbPortStatus;
-HSPLandroid/hardware/usb/UsbManager;->getPorts()Ljava/util/List;
-HSPLandroid/hardware/usb/UsbManager;->usbFunctionsFromString(Ljava/lang/String;)J
-PLandroid/hardware/usb/UsbManager;->usbFunctionsToString(J)Ljava/lang/String;
 HSPLandroid/hardware/usb/UsbPort;-><init>(Landroid/hardware/usb/UsbManager;Ljava/lang/String;IIZZ)V
-HSPLandroid/hardware/usb/UsbPort;->checkRoles(II)V
-HSPLandroid/hardware/usb/UsbPort;->combineRolesAsBit(II)I
-PLandroid/hardware/usb/UsbPort;->contaminantPresenceStatusToString(I)Ljava/lang/String;
-HSPLandroid/hardware/usb/UsbPort;->dataRoleToString(I)Ljava/lang/String;
 HSPLandroid/hardware/usb/UsbPort;->getId()Ljava/lang/String;
-HSPLandroid/hardware/usb/UsbPort;->getStatus()Landroid/hardware/usb/UsbPortStatus;
-HSPLandroid/hardware/usb/UsbPort;->getSupportedContaminantProtectionModes()I
-HSPLandroid/hardware/usb/UsbPort;->getSupportedModes()I
-PLandroid/hardware/usb/UsbPort;->isModeSupported(I)Z
-HSPLandroid/hardware/usb/UsbPort;->modeToString(I)Ljava/lang/String;
-HSPLandroid/hardware/usb/UsbPort;->powerRoleToString(I)Ljava/lang/String;
-HSPLandroid/hardware/usb/UsbPort;->roleCombinationsToString(I)Ljava/lang/String;
-HSPLandroid/hardware/usb/UsbPort;->supportsEnableContaminantPresenceDetection()Z
-HSPLandroid/hardware/usb/UsbPort;->supportsEnableContaminantPresenceProtection()Z
-HSPLandroid/hardware/usb/UsbPort;->toString()Ljava/lang/String;
-HSPLandroid/hardware/usb/UsbPortStatus$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/usb/UsbPortStatus;
-HSPLandroid/hardware/usb/UsbPortStatus$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/hardware/usb/UsbPortStatus;-><init>(IIIIII)V
-HSPLandroid/hardware/usb/UsbPortStatus;->describeContents()I
-HSPLandroid/hardware/usb/UsbPortStatus;->getContaminantDetectionStatus()I
-HSPLandroid/hardware/usb/UsbPortStatus;->getContaminantProtectionStatus()I
-PLandroid/hardware/usb/UsbPortStatus;->getCurrentDataRole()I
-PLandroid/hardware/usb/UsbPortStatus;->getCurrentMode()I
-PLandroid/hardware/usb/UsbPortStatus;->getCurrentPowerRole()I
-PLandroid/hardware/usb/UsbPortStatus;->getSupportedRoleCombinations()I
 HSPLandroid/hardware/usb/UsbPortStatus;->isConnected()Z
-PLandroid/hardware/usb/UsbPortStatus;->isRoleCombinationSupported(II)Z
-HSPLandroid/hardware/usb/UsbPortStatus;->toString()Ljava/lang/String;
-PLandroid/hardware/usb/UsbPortStatus;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/hardware/usb/gadget/V1_0/IUsbGadget$Proxy;-><init>(Landroid/os/IHwBinder;)V
-HSPLandroid/hardware/usb/gadget/V1_0/IUsbGadget$Proxy;->getCurrentUsbFunctions(Landroid/hardware/usb/gadget/V1_0/IUsbGadgetCallback;)V
-HSPLandroid/hardware/usb/gadget/V1_0/IUsbGadget$Proxy;->interfaceChain()Ljava/util/ArrayList;
-HSPLandroid/hardware/usb/gadget/V1_0/IUsbGadget$Proxy;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
-HSPLandroid/hardware/usb/gadget/V1_0/IUsbGadget;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/usb/gadget/V1_0/IUsbGadget;
-HSPLandroid/hardware/usb/gadget/V1_0/IUsbGadget;->getService()Landroid/hardware/usb/gadget/V1_0/IUsbGadget;
-HSPLandroid/hardware/usb/gadget/V1_0/IUsbGadget;->getService(Ljava/lang/String;)Landroid/hardware/usb/gadget/V1_0/IUsbGadget;
-HSPLandroid/hardware/usb/gadget/V1_0/IUsbGadget;->getService(Ljava/lang/String;Z)Landroid/hardware/usb/gadget/V1_0/IUsbGadget;
-HSPLandroid/hardware/usb/gadget/V1_0/IUsbGadget;->getService(Z)Landroid/hardware/usb/gadget/V1_0/IUsbGadget;
-HSPLandroid/hardware/usb/gadget/V1_0/IUsbGadgetCallback$Stub;-><init>()V
-HSPLandroid/hardware/usb/gadget/V1_0/IUsbGadgetCallback$Stub;->asBinder()Landroid/os/IHwBinder;
-HSPLandroid/hardware/usb/gadget/V1_0/IUsbGadgetCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
-HPLandroid/inputmethodservice/-$$Lambda$InputMethodService$8T9TmAUIN7vW9eU6kTg8309_d4E;->onComputeInternalInsets(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)V
-HSPLandroid/inputmethodservice/-$$Lambda$InputMethodService$DHO7VgzZzl-Gpo6FN3F8arQtA4A;-><clinit>()V
-HSPLandroid/inputmethodservice/-$$Lambda$InputMethodService$DHO7VgzZzl-Gpo6FN3F8arQtA4A;-><init>()V
-HPLandroid/inputmethodservice/-$$Lambda$InputMethodService$DHO7VgzZzl-Gpo6FN3F8arQtA4A;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
-HPLandroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl;-><init>(Landroid/inputmethodservice/AbstractInputMethodService;)V
-HSPLandroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl;->createSession(Landroid/view/inputmethod/InputMethod$SessionCallback;)V
-HSPLandroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl;->setSessionEnabled(Landroid/view/inputmethod/InputMethodSession;Z)V
-HPLandroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;->dispatchKeyEvent(ILandroid/view/KeyEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V
-HPLandroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;->isEnabled()Z
-HSPLandroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;->setEnabled(Z)V
-HSPLandroid/inputmethodservice/AbstractInputMethodService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
-HPLandroid/inputmethodservice/IInputMethodSessionWrapper$ImeInputEventReceiver;->finishedEvent(IZ)V
-HPLandroid/inputmethodservice/IInputMethodSessionWrapper$ImeInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V
-HPLandroid/inputmethodservice/IInputMethodSessionWrapper;->displayCompletions([Landroid/view/inputmethod/CompletionInfo;)V
-HPLandroid/inputmethodservice/IInputMethodSessionWrapper;->executeMessage(Landroid/os/Message;)V
-HPLandroid/inputmethodservice/IInputMethodSessionWrapper;->finishSession()V
-HSPLandroid/inputmethodservice/IInputMethodSessionWrapper;->getInternalInputMethodSession()Landroid/view/inputmethod/InputMethodSession;
-HPLandroid/inputmethodservice/IInputMethodSessionWrapper;->updateSelection(IIIIII)V
-HPLandroid/inputmethodservice/IInputMethodSessionWrapper;->viewClicked(Z)V
-HSPLandroid/inputmethodservice/IInputMethodWrapper$InputMethodSessionCallbackWrapper;->sessionCreated(Landroid/view/inputmethod/InputMethodSession;)V
-HSPLandroid/inputmethodservice/IInputMethodWrapper;-><init>(Landroid/inputmethodservice/AbstractInputMethodService;Landroid/view/inputmethod/InputMethod;)V
-HSPLandroid/inputmethodservice/IInputMethodWrapper;->bindInput(Landroid/view/inputmethod/InputBinding;)V
-HSPLandroid/inputmethodservice/IInputMethodWrapper;->createSession(Landroid/view/InputChannel;Lcom/android/internal/view/IInputSessionCallback;)V
-HSPLandroid/inputmethodservice/IInputMethodWrapper;->executeMessage(Landroid/os/Message;)V
-HPLandroid/inputmethodservice/IInputMethodWrapper;->hideSoftInput(ILandroid/os/ResultReceiver;)V
-HSPLandroid/inputmethodservice/IInputMethodWrapper;->initializeInternal(Landroid/os/IBinder;ILcom/android/internal/inputmethod/IInputMethodPrivilegedOperations;)V
-HSPLandroid/inputmethodservice/IInputMethodWrapper;->setSessionEnabled(Lcom/android/internal/view/IInputMethodSession;Z)V
-HPLandroid/inputmethodservice/IInputMethodWrapper;->showSoftInput(ILandroid/os/ResultReceiver;)V
-HSPLandroid/inputmethodservice/IInputMethodWrapper;->startInput(Landroid/os/IBinder;Lcom/android/internal/view/IInputContext;ILandroid/view/inputmethod/EditorInfo;ZZ)V
-HPLandroid/inputmethodservice/IInputMethodWrapper;->unbindInput()V
-HSPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;-><init>(Landroid/inputmethodservice/InputMethodService;)V
-HSPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->attachToken(Landroid/os/IBinder;)V
-HSPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->bindInput(Landroid/view/inputmethod/InputBinding;)V
-HSPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->dispatchStartInputWithToken(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;ZLandroid/os/IBinder;Z)V
-HPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->hideSoftInput(ILandroid/os/ResultReceiver;)V
-HSPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->initializeInternal(Landroid/os/IBinder;ILcom/android/internal/inputmethod/IInputMethodPrivilegedOperations;)V
-HPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->restartInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V
-HPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->showSoftInput(ILandroid/os/ResultReceiver;)V
-HSPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->startInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V
-HPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->unbindInput()V
-HSPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->updateInputMethodDisplay(I)V
-HPLandroid/inputmethodservice/InputMethodService$InputMethodSessionImpl;->displayCompletions([Landroid/view/inputmethod/CompletionInfo;)V
-HPLandroid/inputmethodservice/InputMethodService$InputMethodSessionImpl;->updateSelection(IIIIII)V
-HPLandroid/inputmethodservice/InputMethodService$InputMethodSessionImpl;->viewClicked(Z)V
-HSPLandroid/inputmethodservice/InputMethodService$SettingsObserver;->shouldShowImeWithHardKeyboard()Z
-HPLandroid/inputmethodservice/InputMethodService$SettingsObserver;->unregister()V
-HSPLandroid/inputmethodservice/InputMethodService;-><init>()V
-HPLandroid/inputmethodservice/InputMethodService;->access$000(Landroid/inputmethodservice/InputMethodService;)Lcom/android/internal/inputmethod/InputMethodPrivilegedOperations;
-HPLandroid/inputmethodservice/InputMethodService;->access$100(Landroid/inputmethodservice/InputMethodService;)V
-HPLandroid/inputmethodservice/InputMethodService;->access$200(Landroid/inputmethodservice/InputMethodService;Z)V
-HPLandroid/inputmethodservice/InputMethodService;->access$300(Landroid/inputmethodservice/InputMethodService;II)V
-HPLandroid/inputmethodservice/InputMethodService;->access$500(Landroid/inputmethodservice/InputMethodService;)V
-HPLandroid/inputmethodservice/InputMethodService;->access$600(Landroid/inputmethodservice/InputMethodService;IZ)Z
-HPLandroid/inputmethodservice/InputMethodService;->access$700(Landroid/inputmethodservice/InputMethodService;)I
-HPLandroid/inputmethodservice/InputMethodService;->applyVisibilityInInsetsConsumerIfNecessary(Z)V
-HPLandroid/inputmethodservice/InputMethodService;->dispatchOnShowInputRequested(IZ)Z
-HSPLandroid/inputmethodservice/InputMethodService;->doFinishInput()V
-HPLandroid/inputmethodservice/InputMethodService;->doHideWindow()V
-HPLandroid/inputmethodservice/InputMethodService;->doMovementKey(ILandroid/view/KeyEvent;I)Z
-HSPLandroid/inputmethodservice/InputMethodService;->doStartInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;Z)V
-HSPLandroid/inputmethodservice/InputMethodService;->getCandidatesHiddenVisibility()I
-HSPLandroid/inputmethodservice/InputMethodService;->getCurrentInputBinding()Landroid/view/inputmethod/InputBinding;
-HSPLandroid/inputmethodservice/InputMethodService;->getCurrentInputConnection()Landroid/view/inputmethod/InputConnection;
-HSPLandroid/inputmethodservice/InputMethodService;->getCurrentInputEditorInfo()Landroid/view/inputmethod/EditorInfo;
-HPLandroid/inputmethodservice/InputMethodService;->getExtractEditTextIfVisible()Landroid/inputmethodservice/ExtractEditText;
-HPLandroid/inputmethodservice/InputMethodService;->getWindow()Landroid/app/Dialog;
-HPLandroid/inputmethodservice/InputMethodService;->handleBack(Z)Z
-HPLandroid/inputmethodservice/InputMethodService;->hideStatusIcon()V
-HPLandroid/inputmethodservice/InputMethodService;->hideWindow()V
-HSPLandroid/inputmethodservice/InputMethodService;->initViews()V
-HSPLandroid/inputmethodservice/InputMethodService;->initialize()V
-HSPLandroid/inputmethodservice/InputMethodService;->isExtractViewShown()Z
-HPLandroid/inputmethodservice/InputMethodService;->isFullscreenMode()Z
-HPLandroid/inputmethodservice/InputMethodService;->isInputViewShown()Z
-HPLandroid/inputmethodservice/InputMethodService;->isVisibilityAppliedUsingInsetsConsumer()Z
-HPLandroid/inputmethodservice/InputMethodService;->lambda$new$0$InputMethodService(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)V
-HPLandroid/inputmethodservice/InputMethodService;->lambda$onCreate$2(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
-HPLandroid/inputmethodservice/InputMethodService;->mapToImeWindowStatus()I
-HPLandroid/inputmethodservice/InputMethodService;->notifyUserActionIfNecessary()V
-HSPLandroid/inputmethodservice/InputMethodService;->onBindInput()V
-HPLandroid/inputmethodservice/InputMethodService;->onComputeInsets(Landroid/inputmethodservice/InputMethodService$Insets;)V
-HPLandroid/inputmethodservice/InputMethodService;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HPLandroid/inputmethodservice/InputMethodService;->onConfigureWindow(Landroid/view/Window;ZZ)V
-HSPLandroid/inputmethodservice/InputMethodService;->onCreate()V
-HSPLandroid/inputmethodservice/InputMethodService;->onCreateInputMethodSessionInterface()Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;
-HPLandroid/inputmethodservice/InputMethodService;->onDestroy()V
-HPLandroid/inputmethodservice/InputMethodService;->onDisplayCompletions([Landroid/view/inputmethod/CompletionInfo;)V
-HPLandroid/inputmethodservice/InputMethodService;->onEvaluateFullscreenMode()Z
-HSPLandroid/inputmethodservice/InputMethodService;->onEvaluateInputViewShown()Z
-HSPLandroid/inputmethodservice/InputMethodService;->onInitializeInterface()V
-HPLandroid/inputmethodservice/InputMethodService;->onKeyDown(ILandroid/view/KeyEvent;)Z
-HPLandroid/inputmethodservice/InputMethodService;->onKeyUp(ILandroid/view/KeyEvent;)Z
-HPLandroid/inputmethodservice/InputMethodService;->onShowInputRequested(IZ)Z
-HSPLandroid/inputmethodservice/InputMethodService;->onStartInput(Landroid/view/inputmethod/EditorInfo;Z)V
-HPLandroid/inputmethodservice/InputMethodService;->onStartInputView(Landroid/view/inputmethod/EditorInfo;Z)V
-HPLandroid/inputmethodservice/InputMethodService;->onUnbindInput()V
-HPLandroid/inputmethodservice/InputMethodService;->onUpdateSelection(IIIIII)V
-HPLandroid/inputmethodservice/InputMethodService;->onViewClicked(Z)V
-HPLandroid/inputmethodservice/InputMethodService;->onWindowHidden()V
-HPLandroid/inputmethodservice/InputMethodService;->onWindowShown()V
-HPLandroid/inputmethodservice/InputMethodService;->prepareWindow(Z)Z
-HPLandroid/inputmethodservice/InputMethodService;->reportFullscreenMode()V
-HPLandroid/inputmethodservice/InputMethodService;->requestHideSelf(I)V
-HPLandroid/inputmethodservice/InputMethodService;->resetStateForNewConfiguration()V
-HPLandroid/inputmethodservice/InputMethodService;->setBackDisposition(I)V
-HPLandroid/inputmethodservice/InputMethodService;->setImeWindowStatus(II)V
-HSPLandroid/inputmethodservice/InputMethodService;->setInputView(Landroid/view/View;)V
-HPLandroid/inputmethodservice/InputMethodService;->showWindow(Z)V
-HPLandroid/inputmethodservice/InputMethodService;->startExtractingText(Z)V
-HPLandroid/inputmethodservice/InputMethodService;->startViews(Z)V
-HPLandroid/inputmethodservice/InputMethodService;->updateCandidatesVisibility(Z)V
-HPLandroid/inputmethodservice/InputMethodService;->updateExtractFrameVisibility()V
-HPLandroid/inputmethodservice/InputMethodService;->updateFullscreenMode()V
-HPLandroid/inputmethodservice/InputMethodService;->updateInputViewShown()V
-HSPLandroid/inputmethodservice/SoftInputWindow;-><init>(Landroid/content/Context;Ljava/lang/String;ILandroid/inputmethodservice/SoftInputWindow$Callback;Landroid/view/KeyEvent$Callback;Landroid/view/KeyEvent$DispatcherState;IIZ)V
-HPLandroid/inputmethodservice/SoftInputWindow;->dismissForDestroyIfNecessary()V
-HPLandroid/inputmethodservice/SoftInputWindow;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
-HSPLandroid/inputmethodservice/SoftInputWindow;->initDockWindow()V
-HSPLandroid/inputmethodservice/SoftInputWindow;->setToken(Landroid/os/IBinder;)V
-HPLandroid/inputmethodservice/SoftInputWindow;->show()V
-HPLandroid/inputmethodservice/SoftInputWindow;->updateWindowState(I)V
-PLandroid/location/-$$Lambda$-z-Hjl12STdAybauR3BT-ftvWd0;-><clinit>()V
-PLandroid/location/-$$Lambda$-z-Hjl12STdAybauR3BT-ftvWd0;-><init>()V
-PLandroid/location/-$$Lambda$-z-Hjl12STdAybauR3BT-ftvWd0;->accept(Ljava/lang/Object;)V
-HPLandroid/location/-$$Lambda$AbstractListenerManager$Registration$TnkXgyOd99JHl00GzK6Oay_sYms;-><init>(Landroid/location/AbstractListenerManager$Registration;Ljava/util/function/Consumer;)V
-HPLandroid/location/-$$Lambda$AbstractListenerManager$Registration$TnkXgyOd99JHl00GzK6Oay_sYms;->run()V
-HPLandroid/location/-$$Lambda$GpsStatus$RTSonBp9m0T0NWA3SCfYgWf1mTo;-><init>(Landroid/location/GpsStatus;)V
-HPLandroid/location/-$$Lambda$GpsStatus$RTSonBp9m0T0NWA3SCfYgWf1mTo;->iterator()Ljava/util/Iterator;
-HPLandroid/location/-$$Lambda$LocationManager$GnssStatusListenerManager$GnssStatusListener$4EPi22o4xuVnpNhFHnDvebH4TG8;-><init>(Landroid/location/GnssStatus;)V
-HPLandroid/location/-$$Lambda$LocationManager$GnssStatusListenerManager$GnssStatusListener$4EPi22o4xuVnpNhFHnDvebH4TG8;->accept(Ljava/lang/Object;)V
-PLandroid/location/-$$Lambda$LocationManager$GnssStatusListenerManager$GnssStatusListener$7Fi5XkeF81eL_OKPS2GJMvyc3-8;-><init>(I)V
-PLandroid/location/-$$Lambda$LocationManager$GnssStatusListenerManager$GnssStatusListener$7Fi5XkeF81eL_OKPS2GJMvyc3-8;->accept(Ljava/lang/Object;)V
-HPLandroid/location/-$$Lambda$LocationManager$GnssStatusListenerManager$GnssStatusListener$gYcH61KCtV_OcJJszI1TfvnrJHY;-><init>(Ljava/lang/String;J)V
-HPLandroid/location/-$$Lambda$LocationManager$GnssStatusListenerManager$GnssStatusListener$gYcH61KCtV_OcJJszI1TfvnrJHY;->accept(Ljava/lang/Object;)V
-HPLandroid/location/-$$Lambda$LocationManager$LocationListenerTransport$OaIkiu4R0h4pgFbCDDlNkbmPaps;-><init>(Landroid/location/LocationManager$LocationListenerTransport;Ljava/util/concurrent/Executor;Landroid/location/Location;)V
-HPLandroid/location/-$$Lambda$LocationManager$LocationListenerTransport$OaIkiu4R0h4pgFbCDDlNkbmPaps;->run()V
-PLandroid/location/-$$Lambda$LocationManager$LocationListenerTransport$vDJFuk-DvyNgQEXUO2Jkf2ZFeE8;-><init>(Landroid/location/LocationManager$LocationListenerTransport;Ljava/util/concurrent/Executor;Ljava/lang/String;)V
-PLandroid/location/-$$Lambda$LocationManager$LocationListenerTransport$vDJFuk-DvyNgQEXUO2Jkf2ZFeE8;->run()V
-PLandroid/location/-$$Lambda$LocationManager$LocationListenerTransport$vtBApnyHdgybRqRKlCt1NFEyfeQ;-><init>(Landroid/location/LocationManager$LocationListenerTransport;Ljava/util/concurrent/Executor;)V
-PLandroid/location/-$$Lambda$LocationManager$LocationListenerTransport$vtBApnyHdgybRqRKlCt1NFEyfeQ;->run()V
-PLandroid/location/-$$Lambda$UmbtQF279SH5h72Ftfcj_s96jsY;-><clinit>()V
-PLandroid/location/-$$Lambda$UmbtQF279SH5h72Ftfcj_s96jsY;-><init>()V
-PLandroid/location/-$$Lambda$UmbtQF279SH5h72Ftfcj_s96jsY;->accept(Ljava/lang/Object;)V
-HSPLandroid/location/-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo;-><clinit>()V
-HSPLandroid/location/-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo;-><init>()V
-HPLandroid/location/-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo;->execute(Ljava/lang/Runnable;)V
-HSPLandroid/location/AbstractListenerManager$Registration;-><init>(Ljava/util/concurrent/Executor;Ljava/lang/Object;)V
-HSPLandroid/location/AbstractListenerManager$Registration;-><init>(Ljava/util/concurrent/Executor;Ljava/lang/Object;Landroid/location/AbstractListenerManager$1;)V
-HSPLandroid/location/AbstractListenerManager$Registration;->access$100(Landroid/location/AbstractListenerManager$Registration;)V
-PLandroid/location/AbstractListenerManager$Registration;->access$200(Landroid/location/AbstractListenerManager$Registration;Ljava/util/function/Consumer;)V
-PLandroid/location/AbstractListenerManager$Registration;->execute(Ljava/util/function/Consumer;)V
-HPLandroid/location/AbstractListenerManager$Registration;->lambda$execute$0$AbstractListenerManager$Registration(Ljava/util/function/Consumer;)V
-HSPLandroid/location/AbstractListenerManager$Registration;->unregister()V
+HSPLandroid/icu/impl/BMPSet;-><init>([II)V
+HSPLandroid/icu/impl/BMPSet;->contains(I)Z
+HSPLandroid/icu/impl/BMPSet;->containsSlow(III)Z
+HSPLandroid/icu/impl/BMPSet;->findCodePoint(III)I
+HSPLandroid/icu/impl/BMPSet;->initBits()V
+HSPLandroid/icu/impl/BMPSet;->set32x64Bits([III)V
+HSPLandroid/icu/impl/BMPSet;->span(Ljava/lang/CharSequence;ILandroid/icu/text/UnicodeSet$SpanCondition;Landroid/icu/util/OutputInt;)I
+HSPLandroid/icu/impl/BMPSet;->spanBack(Ljava/lang/CharSequence;ILandroid/icu/text/UnicodeSet$SpanCondition;)I
+HSPLandroid/icu/impl/CacheBase;-><init>()V
+HSPLandroid/icu/impl/CacheValue$NullValue;->isNull()Z
+HSPLandroid/icu/impl/CacheValue$SoftValue;-><init>(Ljava/lang/Object;)V
+HSPLandroid/icu/impl/CacheValue$SoftValue;->get()Ljava/lang/Object;
+HSPLandroid/icu/impl/CacheValue;-><init>()V
+HSPLandroid/icu/impl/CacheValue;->futureInstancesWillBeStrong()Z
+HSPLandroid/icu/impl/CacheValue;->getInstance(Ljava/lang/Object;)Landroid/icu/impl/CacheValue;
+HSPLandroid/icu/impl/CacheValue;->isNull()Z
+HSPLandroid/icu/impl/CacheValue;->setStrength(Landroid/icu/impl/CacheValue$Strength;)V
+HSPLandroid/icu/impl/CalType;->getId()Ljava/lang/String;
+HSPLandroid/icu/impl/CalType;->values()[Landroid/icu/impl/CalType;
+HSPLandroid/icu/impl/CalendarUtil$CalendarPreferences;->access$000()Landroid/icu/impl/CalendarUtil$CalendarPreferences;
+HSPLandroid/icu/impl/CalendarUtil$CalendarPreferences;->getCalendarTypeForRegion(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/CalendarUtil;->getCalendarType(Landroid/icu/util/ULocale;)Ljava/lang/String;
+HSPLandroid/icu/impl/CharTrie;-><clinit>()V
+HSPLandroid/icu/impl/CharTrie;-><init>(Ljava/nio/ByteBuffer;Landroid/icu/impl/Trie$DataManipulate;)V
+HSPLandroid/icu/impl/CharTrie;->unserialize(Ljava/nio/ByteBuffer;)V
+HSPLandroid/icu/impl/CharacterIteration;->nextTrail32(Ljava/text/CharacterIterator;I)I
+HSPLandroid/icu/impl/CharacterPropertiesImpl;-><clinit>()V
+HSPLandroid/icu/impl/CharacterPropertiesImpl;->getInclusionsForProperty(I)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/impl/CharacterPropertiesImpl;->getInclusionsForSource(I)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/impl/CharacterPropertiesImpl;->getIntPropInclusions(I)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/impl/ClassLoaderUtil;->getClassLoader(Ljava/lang/Class;)Ljava/lang/ClassLoader;
+HSPLandroid/icu/impl/CurrencyData$CurrencyDisplayInfo;-><init>()V
+HSPLandroid/icu/impl/CurrencyData$CurrencySpacingInfo;-><init>()V
+HSPLandroid/icu/impl/CurrencyData$CurrencySpacingInfo;->getAfterSymbols()[Ljava/lang/String;
+HSPLandroid/icu/impl/CurrencyData$CurrencySpacingInfo;->getBeforeSymbols()[Ljava/lang/String;
+HSPLandroid/icu/impl/CurrencyData$CurrencySpacingInfo;->setSymbolIfNull(Landroid/icu/impl/CurrencyData$CurrencySpacingInfo$SpacingType;Landroid/icu/impl/CurrencyData$CurrencySpacingInfo$SpacingPattern;Ljava/lang/String;)V
+HSPLandroid/icu/impl/DateNumberFormat;-><init>(Landroid/icu/util/ULocale;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/icu/impl/DateNumberFormat;->getDigits()[C
+HSPLandroid/icu/impl/DateNumberFormat;->initialize(Landroid/icu/util/ULocale;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/icu/impl/FormattedStringBuilder;-><clinit>()V
+HSPLandroid/icu/impl/FormattedStringBuilder;-><init>()V
+HSPLandroid/icu/impl/FormattedStringBuilder;-><init>(I)V
+HSPLandroid/icu/impl/FormattedStringBuilder;-><init>(Landroid/icu/impl/FormattedStringBuilder;)V
+HSPLandroid/icu/impl/FormattedStringBuilder;->charAt(I)C
+HSPLandroid/icu/impl/FormattedStringBuilder;->clear()Landroid/icu/impl/FormattedStringBuilder;
+HSPLandroid/icu/impl/FormattedStringBuilder;->copyFrom(Landroid/icu/impl/FormattedStringBuilder;)V
+HSPLandroid/icu/impl/FormattedStringBuilder;->fieldAt(I)Ljava/text/Format$Field;
+HSPLandroid/icu/impl/FormattedStringBuilder;->getCapacity()I
+HSPLandroid/icu/impl/FormattedStringBuilder;->insert(ILjava/lang/CharSequence;Ljava/text/Format$Field;)I
+HSPLandroid/icu/impl/FormattedStringBuilder;->insert(I[C[Ljava/text/Format$Field;)I
+HSPLandroid/icu/impl/FormattedStringBuilder;->insertCodePoint(IILjava/text/Format$Field;)I
+HSPLandroid/icu/impl/FormattedStringBuilder;->length()I
+HSPLandroid/icu/impl/FormattedStringBuilder;->prepareForInsert(II)I
+HSPLandroid/icu/impl/FormattedStringBuilder;->subSequence(II)Ljava/lang/CharSequence;
+HSPLandroid/icu/impl/FormattedStringBuilder;->toCharArray()[C
+HSPLandroid/icu/impl/FormattedStringBuilder;->toFieldArray()[Ljava/text/Format$Field;
+HSPLandroid/icu/impl/FormattedStringBuilder;->toString()Ljava/lang/String;
+HSPLandroid/icu/impl/FormattedValueStringBuilderImpl$NullField;-><clinit>()V
+HSPLandroid/icu/impl/FormattedValueStringBuilderImpl$NullField;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/impl/FormattedValueStringBuilderImpl;-><clinit>()V
+HSPLandroid/icu/impl/FormattedValueStringBuilderImpl;->isIntOrGroup(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
+HSPLandroid/icu/impl/Grego;-><clinit>()V
+HSPLandroid/icu/impl/Grego;->dayOfWeek(J)I
+HSPLandroid/icu/impl/Grego;->dayToFields(J[I)[I
+HSPLandroid/icu/impl/Grego;->fieldsToDay(III)J
+HSPLandroid/icu/impl/Grego;->floorDivide(JJ)J
+HSPLandroid/icu/impl/Grego;->floorDivide(JJ[J)J
+HSPLandroid/icu/impl/Grego;->isLeapYear(I)Z
+HSPLandroid/icu/impl/Grego;->monthLength(II)I
+HSPLandroid/icu/impl/Grego;->previousMonthLength(II)I
+HSPLandroid/icu/impl/Grego;->timeToFields(J[I)[I
+HSPLandroid/icu/impl/ICUBinary$DatPackageReader;->addBaseName(Ljava/nio/ByteBuffer;ILjava/lang/String;Ljava/lang/String;Ljava/lang/StringBuilder;Ljava/util/Set;)Z
+HSPLandroid/icu/impl/ICUBinary$DatPackageReader;->addBaseNamesInFolder(Ljava/nio/ByteBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V
+HSPLandroid/icu/impl/ICUBinary$DatPackageReader;->binarySearch(Ljava/nio/ByteBuffer;Ljava/lang/CharSequence;)I
+HSPLandroid/icu/impl/ICUBinary$DatPackageReader;->getData(Ljava/nio/ByteBuffer;Ljava/lang/CharSequence;)Ljava/nio/ByteBuffer;
+HSPLandroid/icu/impl/ICUBinary$DatPackageReader;->getDataOffset(Ljava/nio/ByteBuffer;I)I
+HSPLandroid/icu/impl/ICUBinary$DatPackageReader;->getNameOffset(Ljava/nio/ByteBuffer;I)I
+HSPLandroid/icu/impl/ICUBinary$PackageDataFile;->addBaseNamesInFolder(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V
+HSPLandroid/icu/impl/ICUBinary$PackageDataFile;->getData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
+HSPLandroid/icu/impl/ICUBinary;->addBaseNamesInFileFolder(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V
+HSPLandroid/icu/impl/ICUBinary;->compareKeys(Ljava/lang/CharSequence;Ljava/nio/ByteBuffer;I)I
+HSPLandroid/icu/impl/ICUBinary;->compareKeys(Ljava/lang/CharSequence;[BI)I
+HSPLandroid/icu/impl/ICUBinary;->getChars(Ljava/nio/ByteBuffer;II)[C
+HSPLandroid/icu/impl/ICUBinary;->getData(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;)Ljava/nio/ByteBuffer;
+HSPLandroid/icu/impl/ICUBinary;->getData(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Z)Ljava/nio/ByteBuffer;
+HSPLandroid/icu/impl/ICUBinary;->getDataFromFile(Ljava/lang/String;)Ljava/nio/ByteBuffer;
+HSPLandroid/icu/impl/ICUBinary;->getInts(Ljava/nio/ByteBuffer;II)[I
+HSPLandroid/icu/impl/ICUBinary;->getRequiredData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
+HSPLandroid/icu/impl/ICUBinary;->getShorts(Ljava/nio/ByteBuffer;II)[S
+HSPLandroid/icu/impl/ICUBinary;->getString(Ljava/nio/ByteBuffer;II)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUBinary;->getVersionByteArrayFromCompactInt(I)[B
+HSPLandroid/icu/impl/ICUBinary;->getVersionInfoFromCompactInt(I)Landroid/icu/util/VersionInfo;
+HSPLandroid/icu/impl/ICUBinary;->readHeader(Ljava/nio/ByteBuffer;ILandroid/icu/impl/ICUBinary$Authenticate;)I
+HSPLandroid/icu/impl/ICUBinary;->readHeaderAndDataVersion(Ljava/nio/ByteBuffer;ILandroid/icu/impl/ICUBinary$Authenticate;)Landroid/icu/util/VersionInfo;
+HSPLandroid/icu/impl/ICUBinary;->skipBytes(Ljava/nio/ByteBuffer;I)V
+HSPLandroid/icu/impl/ICUBinary;->sliceWithOrder(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
+HSPLandroid/icu/impl/ICUConfig;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$CurrencySink;-><init>(ZLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$CurrencySink$EntrypointTable;)V
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$CurrencySink;->consumeCurrenciesEntry(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$CurrencySink;->consumeCurrencySpacingTable(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+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;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->fetchSpacingInfo()Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getFormatInfo(Ljava/lang/String;)Landroid/icu/impl/CurrencyData$CurrencyFormatInfo;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getSpacingInfo()Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getSymbol(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider;->getInstance(Landroid/icu/util/ULocale;Z)Landroid/icu/impl/CurrencyData$CurrencyDisplayInfo;
+HSPLandroid/icu/impl/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/ICUDebug;->enabled(Ljava/lang/String;)Z
+HSPLandroid/icu/impl/ICULocaleService$ICUResourceBundleFactory;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/impl/ICULocaleService$ICUResourceBundleFactory;->getSupportedIDs()Ljava/util/Set;
+HSPLandroid/icu/impl/ICULocaleService$ICUResourceBundleFactory;->loader()Ljava/lang/ClassLoader;
+HSPLandroid/icu/impl/ICULocaleService$LocaleKey;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/icu/impl/ICULocaleService$LocaleKey;->createWithCanonical(Landroid/icu/util/ULocale;Ljava/lang/String;I)Landroid/icu/impl/ICULocaleService$LocaleKey;
+HSPLandroid/icu/impl/ICULocaleService$LocaleKey;->currentDescriptor()Ljava/lang/String;
+HSPLandroid/icu/impl/ICULocaleService$LocaleKey;->currentID()Ljava/lang/String;
+HSPLandroid/icu/impl/ICULocaleService$LocaleKey;->currentLocale()Landroid/icu/util/ULocale;
+HSPLandroid/icu/impl/ICULocaleService$LocaleKey;->kind()I
+HSPLandroid/icu/impl/ICULocaleService$LocaleKeyFactory;-><init>(Z)V
+HSPLandroid/icu/impl/ICULocaleService$LocaleKeyFactory;->create(Landroid/icu/impl/ICUService$Key;Landroid/icu/impl/ICUService;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICULocaleService$LocaleKeyFactory;->handlesKey(Landroid/icu/impl/ICUService$Key;)Z
+HSPLandroid/icu/impl/ICULocaleService;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/impl/ICULocaleService;->createKey(Landroid/icu/util/ULocale;I)Landroid/icu/impl/ICUService$Key;
+HSPLandroid/icu/impl/ICULocaleService;->get(Landroid/icu/util/ULocale;I[Landroid/icu/util/ULocale;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICULocaleService;->get(Landroid/icu/util/ULocale;[Landroid/icu/util/ULocale;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUNotifier;-><init>()V
+HSPLandroid/icu/impl/ICUNotifier;->notifyChanged()V
+HSPLandroid/icu/impl/ICURWLock;-><init>()V
+HSPLandroid/icu/impl/ICURWLock;->acquireRead()V
+HSPLandroid/icu/impl/ICURWLock;->acquireWrite()V
+HSPLandroid/icu/impl/ICURWLock;->releaseRead()V
+HSPLandroid/icu/impl/ICURWLock;->releaseWrite()V
+HSPLandroid/icu/impl/ICUResourceBundle$1;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundle$1;->createInstance(Ljava/lang/String;Landroid/icu/impl/ICUResourceBundle$Loader;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle$2$1;-><init>(Landroid/icu/impl/ICUResourceBundle$2;)V
+HSPLandroid/icu/impl/ICUResourceBundle$2;-><init>(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/util/Set;)V
+HSPLandroid/icu/impl/ICUResourceBundle$2;->run()Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundle$2;->run()Ljava/lang/Void;
+HSPLandroid/icu/impl/ICUResourceBundle$3;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundle$3;->createInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/impl/ICUResourceBundle$AvailEntry;
+HSPLandroid/icu/impl/ICUResourceBundle$4;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundle$OpenType;Ljava/lang/String;)V
+HSPLandroid/icu/impl/ICUResourceBundle$4;->load()Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle$AvailEntry;-><init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V
+HSPLandroid/icu/impl/ICUResourceBundle$AvailEntry;->getFullLocaleNameSet()Ljava/util/Set;
+HSPLandroid/icu/impl/ICUResourceBundle$Loader;-><init>()V
+HSPLandroid/icu/impl/ICUResourceBundle$Loader;-><init>(Landroid/icu/impl/ICUResourceBundle$1;)V
+HSPLandroid/icu/impl/ICUResourceBundle$WholeBundle;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundleReader;)V
+HSPLandroid/icu/impl/ICUResourceBundle;-><init>(Landroid/icu/impl/ICUResourceBundle$WholeBundle;)V
+HSPLandroid/icu/impl/ICUResourceBundle;-><init>(Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;)V
+HSPLandroid/icu/impl/ICUResourceBundle;->access$000()Z
+HSPLandroid/icu/impl/ICUResourceBundle;->access$300(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/util/Set;
+HSPLandroid/icu/impl/ICUResourceBundle;->access$500(Landroid/icu/impl/ICUResourceBundle;)Z
+HSPLandroid/icu/impl/ICUResourceBundle;->access$600(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->addBundleBaseNamesFromClassLoader(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/Set;)V
+HSPLandroid/icu/impl/ICUResourceBundle;->countPathKeys(Ljava/lang/String;)I
+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;->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;
+HSPLandroid/icu/impl/ICUResourceBundle;->get(Ljava/lang/String;Ljava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->getAliasedResource(Landroid/icu/impl/ICUResourceBundle;[Ljava/lang/String;ILjava/lang/String;ILjava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->getAllItemsWithFallback(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/ICUResourceBundleReader$ReaderValue;Landroid/icu/impl/UResource$Sink;)V
+HSPLandroid/icu/impl/ICUResourceBundle;->getAllItemsWithFallback(Ljava/lang/String;Landroid/icu/impl/UResource$Sink;)V
+HSPLandroid/icu/impl/ICUResourceBundle;->getAllItemsWithFallbackNoFail(Ljava/lang/String;Landroid/icu/impl/UResource$Sink;)V
+HSPLandroid/icu/impl/ICUResourceBundle;->getAvailEntry(Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/impl/ICUResourceBundle$AvailEntry;
+HSPLandroid/icu/impl/ICUResourceBundle;->getBaseName()Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundle;->getBundle(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->getBundleInstance(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->getFullLocaleNameSet(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/util/Set;
+HSPLandroid/icu/impl/ICUResourceBundle;->getKey()Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundle;->getLocale()Ljava/util/Locale;
+HSPLandroid/icu/impl/ICUResourceBundle;->getLocaleID()Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundle;->getNoFallback()Z
+HSPLandroid/icu/impl/ICUResourceBundle;->getParent()Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->getParent()Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->getResDepth()I
+HSPLandroid/icu/impl/ICUResourceBundle;->getResPathKeys(Ljava/lang/String;I[Ljava/lang/String;I)V
+HSPLandroid/icu/impl/ICUResourceBundle;->getResPathKeys([Ljava/lang/String;I)V
+HSPLandroid/icu/impl/ICUResourceBundle;->getStringWithFallback(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundle;->getULocale()Landroid/icu/util/ULocale;
+HSPLandroid/icu/impl/ICUResourceBundle;->getWithFallback(Ljava/lang/String;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->instantiateBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->setParent(Ljava/util/ResourceBundle;)V
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceArray;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceArray;->getStringArray()[Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceArray;->handleGet(ILjava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceArray;->handleGetStringArray()[Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceBinary;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceBinary;->getBinary([B)[B
+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;->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
+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
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->findString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->getType()I
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGet(ILjava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGet(Ljava/lang/String;Ljava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGetObject(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundleImpl;-><init>(Landroid/icu/impl/ICUResourceBundle$WholeBundle;)V
+HSPLandroid/icu/impl/ICUResourceBundleImpl;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
+HSPLandroid/icu/impl/ICUResourceBundleImpl;->createBundleObject(Ljava/lang/String;ILjava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundleImpl;->getResource()I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Array16;-><init>(Landroid/icu/impl/ICUResourceBundleReader;I)V
+HSPLandroid/icu/impl/ICUResourceBundleReader$Array16;->getContainerResource(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Array32;-><init>(Landroid/icu/impl/ICUResourceBundleReader;I)V
+HSPLandroid/icu/impl/ICUResourceBundleReader$Array32;->getContainerResource(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Array;-><init>()V
+HSPLandroid/icu/impl/ICUResourceBundleReader$Array;->getValue(ILandroid/icu/impl/UResource$Value;)Z
+HSPLandroid/icu/impl/ICUResourceBundleReader$Container;-><init>()V
+HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getContainer16Resource(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getContainer32Resource(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getSize()I
+HSPLandroid/icu/impl/ICUResourceBundleReader$IsAcceptable;->isDataVersionAcceptable([B)Z
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderCache;->createInstance(Landroid/icu/impl/ICUResourceBundleReader$ReaderCacheKey;Ljava/lang/ClassLoader;)Landroid/icu/impl/ICUResourceBundleReader;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderCache;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderCacheKey;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderCacheKey;->equals(Ljava/lang/Object;)Z
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderCacheKey;->hashCode()I
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;-><init>()V
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getAliasString()Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getArray()Landroid/icu/impl/UResource$Array;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getString()Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getStringArray()[Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getStringArray(Landroid/icu/impl/ICUResourceBundleReader$Array;)[Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getTable()Landroid/icu/impl/UResource$Table;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getType()I
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;-><init>(II)V
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;->get(I)Ljava/lang/Object;
+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;->access$2100(I)Z
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->findSimple(I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->get(I)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->makeKey(I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->putIfAbsent(ILjava/lang/Object;I)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->putIfCleared([Ljava/lang/Object;ILjava/lang/Object;I)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->storeDirectly(I)Z
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table1632;-><init>(Landroid/icu/impl/ICUResourceBundleReader;I)V
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table1632;->getContainerResource(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table16;-><init>(Landroid/icu/impl/ICUResourceBundleReader;I)V
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table16;->getContainerResource(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table;-><init>()V
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->findTableItem(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/CharSequence;)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getKey(Landroid/icu/impl/ICUResourceBundleReader;I)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getKeyAndValue(ILandroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)Z
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getResource(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/String;)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;-><init>(Ljava/nio/ByteBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V
+HSPLandroid/icu/impl/ICUResourceBundleReader;-><init>(Ljava/nio/ByteBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundleReader$1;)V
+HSPLandroid/icu/impl/ICUResourceBundleReader;->RES_GET_INT(I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->RES_GET_OFFSET(I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->RES_GET_TYPE(I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->URES_IS_ARRAY(I)Z
+HSPLandroid/icu/impl/ICUResourceBundleReader;->URES_IS_TABLE(I)Z
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$1000(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$1100(Landroid/icu/impl/ICUResourceBundleReader;I)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$1300(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/CharSequence;C)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$1500(Landroid/icu/impl/ICUResourceBundleReader;ILandroid/icu/impl/UResource$Key;)V
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$1700(Landroid/icu/impl/ICUResourceBundleReader;I)[C
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$1800(Landroid/icu/impl/ICUResourceBundleReader;I)[C
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$200()Landroid/icu/impl/ICUResourceBundleReader;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$2200(I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$400()[I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$600(Landroid/icu/impl/ICUResourceBundleReader;)Ljava/nio/CharBuffer;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$700(Landroid/icu/impl/ICUResourceBundleReader;)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$800(Landroid/icu/impl/ICUResourceBundleReader;)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->access$900(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->compareKeys(Ljava/lang/CharSequence;C)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getAlias(I)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getArray(I)Landroid/icu/impl/ICUResourceBundleReader$Array;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getBinary(I[B)[B
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getChars(II)[C
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getFullName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getIndexesInt(I)I
+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;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getNoFallback()Z
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getReader(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/impl/ICUResourceBundleReader;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getResourceByteOffset(I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getRootResource()I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getString(I)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getStringV2(I)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getTable(I)Landroid/icu/impl/ICUResourceBundleReader$Table;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getTable16KeyOffsets(I)[C
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getTableKeyOffsets(I)[C
+HSPLandroid/icu/impl/ICUResourceBundleReader;->init(Ljava/nio/ByteBuffer;)V
+HSPLandroid/icu/impl/ICUResourceBundleReader;->makeKeyStringFromBytes([BI)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->makeStringFromBytes(II)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->setKeyFromKey16(ILandroid/icu/impl/UResource$Key;)V
+HSPLandroid/icu/impl/ICUService$CacheEntry;-><init>(Ljava/lang/String;Ljava/lang/Object;)V
+HSPLandroid/icu/impl/ICUService$Key;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/impl/ICUService;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/impl/ICUService;->clearCaches()V
+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/ICUService;->markDefault()V
+HSPLandroid/icu/impl/ICUService;->registerFactory(Landroid/icu/impl/ICUService$Factory;)Landroid/icu/impl/ICUService$Factory;
+HSPLandroid/icu/impl/IDNA2003;-><clinit>()V
+HSPLandroid/icu/impl/IDNA2003;->convertIDNToASCII(Ljava/lang/String;I)Ljava/lang/StringBuffer;
+HSPLandroid/icu/impl/IDNA2003;->convertToASCII(Landroid/icu/text/UCharacterIterator;I)Ljava/lang/StringBuffer;
+HSPLandroid/icu/impl/IDNA2003;->getSeparatorIndex([CII)I
+HSPLandroid/icu/impl/IDNA2003;->isLDHChar(I)Z
+HSPLandroid/icu/impl/IDNA2003;->isLabelSeparator(I)Z
+HSPLandroid/icu/impl/JavaTimeZone;-><init>(Ljava/util/TimeZone;Ljava/lang/String;)V
+HSPLandroid/icu/impl/JavaTimeZone;->clone()Ljava/lang/Object;
+HSPLandroid/icu/impl/JavaTimeZone;->freeze()Landroid/icu/util/TimeZone;
+HSPLandroid/icu/impl/JavaTimeZone;->getOffset(JZ[I)V
+HSPLandroid/icu/impl/JavaTimeZone;->hashCode()I
+HSPLandroid/icu/impl/JavaTimeZone;->isFrozen()Z
+HSPLandroid/icu/impl/LocaleIDParser;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/impl/LocaleIDParser;-><init>(Ljava/lang/String;Z)V
+HSPLandroid/icu/impl/LocaleIDParser;->addSeparator()V
+HSPLandroid/icu/impl/LocaleIDParser;->append(C)V
+HSPLandroid/icu/impl/LocaleIDParser;->atTerminator()Z
+HSPLandroid/icu/impl/LocaleIDParser;->getCountry()Ljava/lang/String;
+HSPLandroid/icu/impl/LocaleIDParser;->getKeywordMap()Ljava/util/Map;
+HSPLandroid/icu/impl/LocaleIDParser;->getKeywordValue(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/LocaleIDParser;->getKeywords()Ljava/util/Iterator;
+HSPLandroid/icu/impl/LocaleIDParser;->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;->getVariant()Ljava/lang/String;
+HSPLandroid/icu/impl/LocaleIDParser;->haveExperimentalLanguagePrefix()Z
+HSPLandroid/icu/impl/LocaleIDParser;->isTerminator(C)Z
+HSPLandroid/icu/impl/LocaleIDParser;->isTerminatorOrIDSeparator(C)Z
+HSPLandroid/icu/impl/LocaleIDParser;->next()C
+HSPLandroid/icu/impl/LocaleIDParser;->parseBaseName()V
+HSPLandroid/icu/impl/LocaleIDParser;->parseCountry()I
+HSPLandroid/icu/impl/LocaleIDParser;->parseKeywords()I
+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;->set(ILjava/lang/String;)V
+HSPLandroid/icu/impl/LocaleIDParser;->setToKeywordStart()Z
+HSPLandroid/icu/impl/LocaleIDParser;->skipCountry()V
+HSPLandroid/icu/impl/LocaleIDParser;->skipLanguage()V
+HSPLandroid/icu/impl/LocaleIDParser;->skipScript()V
+HSPLandroid/icu/impl/LocaleIDParser;->skipUntilTerminatorOrIDSeparator()V
+HSPLandroid/icu/impl/LocaleIDs;->findIndex([Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/icu/impl/LocaleIDs;->threeToTwoLetterLanguage(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/Norm2AllModes$1;-><init>()V
+HSPLandroid/icu/impl/Norm2AllModes$ComposeNormalizer2;-><init>(Landroid/icu/impl/Normalizer2Impl;Z)V
+HSPLandroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;-><init>(Landroid/icu/impl/Normalizer2Impl;)V
+HSPLandroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;->spanQuickCheckYes(Ljava/lang/CharSequence;)I
+HSPLandroid/icu/impl/Norm2AllModes$FCDNormalizer2;-><init>(Landroid/icu/impl/Normalizer2Impl;)V
+HSPLandroid/icu/impl/Norm2AllModes$NFCSingleton;->access$200()Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;
+HSPLandroid/icu/impl/Norm2AllModes$NFKCSingleton;-><clinit>()V
+HSPLandroid/icu/impl/Norm2AllModes$NFKCSingleton;->access$300()Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;
+HSPLandroid/icu/impl/Norm2AllModes$NoopNormalizer2;-><init>()V
+HSPLandroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;-><init>(Ljava/lang/String;Landroid/icu/impl/Norm2AllModes$1;)V
+HSPLandroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;->access$000(Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;)Ljava/lang/RuntimeException;
+HSPLandroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;->access$100(Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;)Landroid/icu/impl/Norm2AllModes;
+HSPLandroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;-><init>(Landroid/icu/impl/Normalizer2Impl;)V
+HSPLandroid/icu/impl/Norm2AllModes;-><clinit>()V
+HSPLandroid/icu/impl/Norm2AllModes;-><init>(Landroid/icu/impl/Normalizer2Impl;)V
+HSPLandroid/icu/impl/Norm2AllModes;-><init>(Landroid/icu/impl/Normalizer2Impl;Landroid/icu/impl/Norm2AllModes$1;)V
+HSPLandroid/icu/impl/Norm2AllModes;->getInstanceFromSingleton(Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;)Landroid/icu/impl/Norm2AllModes;
+HSPLandroid/icu/impl/Norm2AllModes;->getNFCInstance()Landroid/icu/impl/Norm2AllModes;
+HSPLandroid/icu/impl/Norm2AllModes;->getNFKCInstance()Landroid/icu/impl/Norm2AllModes;
+HSPLandroid/icu/impl/Normalizer2Impl$1;-><init>()V
+HSPLandroid/icu/impl/Normalizer2Impl$IsAcceptable;-><init>()V
+HSPLandroid/icu/impl/Normalizer2Impl$IsAcceptable;-><init>(Landroid/icu/impl/Normalizer2Impl$1;)V
+HSPLandroid/icu/impl/Normalizer2Impl$IsAcceptable;->isDataVersionAcceptable([B)Z
+HSPLandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;-><init>(Landroid/icu/impl/Normalizer2Impl;Ljava/lang/Appendable;I)V
+HSPLandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;->append(Ljava/lang/CharSequence;IIZII)V
+HSPLandroid/icu/impl/Normalizer2Impl$UTF16Plus;->isLeadSurrogate(I)Z
+HSPLandroid/icu/impl/Normalizer2Impl;-><clinit>()V
+HSPLandroid/icu/impl/Normalizer2Impl;-><init>()V
+HSPLandroid/icu/impl/Normalizer2Impl;->decompose(IILandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)V
+HSPLandroid/icu/impl/Normalizer2Impl;->decompose(Ljava/lang/CharSequence;IILandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)I
+HSPLandroid/icu/impl/Normalizer2Impl;->hangulLVT()I
+HSPLandroid/icu/impl/Normalizer2Impl;->isDecompYes(I)Z
+HSPLandroid/icu/impl/Normalizer2Impl;->isHangulLV(I)Z
+HSPLandroid/icu/impl/Normalizer2Impl;->isHangulLVT(I)Z
+HSPLandroid/icu/impl/Normalizer2Impl;->isMostDecompYesAndZeroCC(I)Z
+HSPLandroid/icu/impl/Normalizer2Impl;->load(Ljava/lang/String;)Landroid/icu/impl/Normalizer2Impl;
+HSPLandroid/icu/impl/Normalizer2Impl;->load(Ljava/nio/ByteBuffer;)Landroid/icu/impl/Normalizer2Impl;
+HSPLandroid/icu/impl/OlsonTimeZone;-><clinit>()V
+HSPLandroid/icu/impl/OlsonTimeZone;-><init>(Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;Ljava/lang/String;)V
+HSPLandroid/icu/impl/OlsonTimeZone;->clone()Ljava/lang/Object;
+HSPLandroid/icu/impl/OlsonTimeZone;->cloneAsThawed()Landroid/icu/util/TimeZone;
+HSPLandroid/icu/impl/OlsonTimeZone;->construct(Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;Ljava/lang/String;)V
+HSPLandroid/icu/impl/OlsonTimeZone;->freeze()Landroid/icu/util/TimeZone;
+HSPLandroid/icu/impl/OlsonTimeZone;->getCanonicalID()Ljava/lang/String;
+HSPLandroid/icu/impl/OlsonTimeZone;->getInt(B)I
+HSPLandroid/icu/impl/OlsonTimeZone;->getNextTransition(JZ)Landroid/icu/util/TimeZoneTransition;
+HSPLandroid/icu/impl/OlsonTimeZone;->getOffset(JZ[I)V
+HSPLandroid/icu/impl/OlsonTimeZone;->getTimeZoneRules()[Landroid/icu/util/TimeZoneRule;
+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/PatternProps;-><clinit>()V
+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;->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;
+HSPLandroid/icu/impl/PatternTokenizer;->setSyntaxCharacters(Landroid/icu/text/UnicodeSet;)Landroid/icu/impl/PatternTokenizer;
+HSPLandroid/icu/impl/PatternTokenizer;->setUsingQuote(Z)Landroid/icu/impl/PatternTokenizer;
+HSPLandroid/icu/impl/PluralRulesLoader;->checkBuildRulesIdMaps()V
+HSPLandroid/icu/impl/PluralRulesLoader;->forLocale(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules$PluralType;)Landroid/icu/text/PluralRules;
+HSPLandroid/icu/impl/PluralRulesLoader;->getLocaleIdToRulesIdMap(Landroid/icu/text/PluralRules$PluralType;)Ljava/util/Map;
+HSPLandroid/icu/impl/PluralRulesLoader;->getPluralBundle()Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/impl/PluralRulesLoader;->getRulesForRulesId(Ljava/lang/String;)Landroid/icu/text/PluralRules;
+HSPLandroid/icu/impl/PluralRulesLoader;->getRulesIdForLocale(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules$PluralType;)Ljava/lang/String;
+HSPLandroid/icu/impl/RBBIDataWrapper$IsAcceptable;->isDataVersionAcceptable([B)Z
+HSPLandroid/icu/impl/RBBIDataWrapper$RBBIDataHeader;-><init>()V
+HSPLandroid/icu/impl/RBBIDataWrapper$RBBIStateTable;-><init>()V
+HSPLandroid/icu/impl/RBBIDataWrapper$RBBIStateTable;->get(Ljava/nio/ByteBuffer;I)Landroid/icu/impl/RBBIDataWrapper$RBBIStateTable;
+HSPLandroid/icu/impl/RBBIDataWrapper;-><init>()V
+HSPLandroid/icu/impl/RBBIDataWrapper;->get(Ljava/nio/ByteBuffer;)Landroid/icu/impl/RBBIDataWrapper;
+HSPLandroid/icu/impl/RBBIDataWrapper;->getRowIndex(I)I
+HSPLandroid/icu/impl/ReplaceableUCharacterIterator;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->getLength()I
+HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->getText([CI)I
+HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->next()I
+HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->setIndex(I)V
+HSPLandroid/icu/impl/RuleCharacterIterator;-><init>(Ljava/lang/String;Landroid/icu/text/SymbolTable;Ljava/text/ParsePosition;)V
+HSPLandroid/icu/impl/RuleCharacterIterator;->_advance(I)V
+HSPLandroid/icu/impl/RuleCharacterIterator;->_current()I
+HSPLandroid/icu/impl/RuleCharacterIterator;->atEnd()Z
+HSPLandroid/icu/impl/RuleCharacterIterator;->getPos(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/RuleCharacterIterator;->inVariable()Z
+HSPLandroid/icu/impl/RuleCharacterIterator;->isEscaped()Z
+HSPLandroid/icu/impl/RuleCharacterIterator;->jumpahead(I)V
+HSPLandroid/icu/impl/RuleCharacterIterator;->lookahead()Ljava/lang/String;
+HSPLandroid/icu/impl/RuleCharacterIterator;->next(I)I
+HSPLandroid/icu/impl/RuleCharacterIterator;->setPos(Ljava/lang/Object;)V
+HSPLandroid/icu/impl/RuleCharacterIterator;->skipIgnored(I)V
+HSPLandroid/icu/impl/SimpleCache;-><init>()V
+HSPLandroid/icu/impl/SimpleCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/SimpleCache;->put(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroid/icu/impl/SimpleFormatterImpl;->compileToStringMinMaxArguments(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;II)Ljava/lang/String;
+HSPLandroid/icu/impl/SimpleFormatterImpl;->format(Ljava/lang/String;[Ljava/lang/CharSequence;Ljava/lang/StringBuilder;Ljava/lang/String;Z[I)Ljava/lang/StringBuilder;
+HSPLandroid/icu/impl/SimpleFormatterImpl;->formatAndAppend(Ljava/lang/String;Ljava/lang/StringBuilder;[I[Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;
+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;-><init>()V
+HSPLandroid/icu/impl/SoftCache;->getInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/StandardPlural;-><clinit>()V
+HSPLandroid/icu/impl/StandardPlural;-><init>(Ljava/lang/String;ILjava/lang/String;)V
+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;->values()[Landroid/icu/impl/StandardPlural;
+HSPLandroid/icu/impl/StaticUnicodeSets$Key;-><clinit>()V
+HSPLandroid/icu/impl/StaticUnicodeSets$Key;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/impl/StaticUnicodeSets$Key;->values()[Landroid/icu/impl/StaticUnicodeSets$Key;
+HSPLandroid/icu/impl/StaticUnicodeSets$ParseDataSink;-><clinit>()V
+HSPLandroid/icu/impl/StaticUnicodeSets$ParseDataSink;-><init>()V
+HSPLandroid/icu/impl/StaticUnicodeSets$ParseDataSink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HSPLandroid/icu/impl/StaticUnicodeSets;-><clinit>()V
+HSPLandroid/icu/impl/StaticUnicodeSets;->access$000(Landroid/icu/impl/StaticUnicodeSets$Key;Ljava/lang/String;)V
+HSPLandroid/icu/impl/StaticUnicodeSets;->chooseFrom(Ljava/lang/String;Landroid/icu/impl/StaticUnicodeSets$Key;)Landroid/icu/impl/StaticUnicodeSets$Key;
+HSPLandroid/icu/impl/StaticUnicodeSets;->chooseFrom(Ljava/lang/String;Landroid/icu/impl/StaticUnicodeSets$Key;Landroid/icu/impl/StaticUnicodeSets$Key;)Landroid/icu/impl/StaticUnicodeSets$Key;
+HSPLandroid/icu/impl/StaticUnicodeSets;->computeUnion(Landroid/icu/impl/StaticUnicodeSets$Key;Landroid/icu/impl/StaticUnicodeSets$Key;)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/impl/StaticUnicodeSets;->computeUnion(Landroid/icu/impl/StaticUnicodeSets$Key;Landroid/icu/impl/StaticUnicodeSets$Key;Landroid/icu/impl/StaticUnicodeSets$Key;)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/impl/StaticUnicodeSets;->get(Landroid/icu/impl/StaticUnicodeSets$Key;)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/impl/StaticUnicodeSets;->saveSet(Landroid/icu/impl/StaticUnicodeSets$Key;Ljava/lang/String;)V
+HSPLandroid/icu/impl/StringPrepDataReader;-><clinit>()V
+HSPLandroid/icu/impl/StringPrepDataReader;-><init>(Ljava/nio/ByteBuffer;)V
+HSPLandroid/icu/impl/StringPrepDataReader;->getUnicodeVersion()[B
+HSPLandroid/icu/impl/StringPrepDataReader;->isDataVersionAcceptable([B)Z
+HSPLandroid/icu/impl/StringPrepDataReader;->read(I)[C
+HSPLandroid/icu/impl/StringPrepDataReader;->readIndexes(I)[I
+HSPLandroid/icu/impl/StringSegment;-><clinit>()V
+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;->codePointsEqual(IIZ)Z
+HSPLandroid/icu/impl/StringSegment;->getCodePoint()I
+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;->length()I
+HSPLandroid/icu/impl/StringSegment;->startsWith(Landroid/icu/text/UnicodeSet;)Z
+HSPLandroid/icu/impl/StringSegment;->startsWith(Ljava/lang/CharSequence;)Z
+HSPLandroid/icu/impl/TextTrieMap$Node;-><init>(Landroid/icu/impl/TextTrieMap;)V
+HSPLandroid/icu/impl/TextTrieMap$Node;-><init>(Landroid/icu/impl/TextTrieMap;Landroid/icu/impl/TextTrieMap$1;)V
+HSPLandroid/icu/impl/TextTrieMap;-><init>(Z)V
+HSPLandroid/icu/impl/TimeZoneNamesFactoryImpl;->getTimeZoneNames(Landroid/icu/util/ULocale;)Landroid/icu/text/TimeZoneNames;
+HSPLandroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;-><init>(Ljava/lang/String;JJ)V
+HSPLandroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;->from()J
+HSPLandroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;->mzID()Ljava/lang/String;
+HSPLandroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;->to()J
+HSPLandroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;->createInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;->parseDate(Ljava/lang/String;)J
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;-><init>([Ljava/lang/String;)V
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->createMetaZoneAndPutInCache(Ljava/util/Map;[Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->createTimeZoneAndPutInCache(Ljava/util/Map;[Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->getName(Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->getNameTypeIndex(Landroid/icu/text/TimeZoneNames$NameType;)I
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;-><init>()V
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;-><init>(Landroid/icu/impl/TimeZoneNamesImpl$1;)V
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->access$600(Landroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;)[Ljava/lang/String;
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->getNames()[Ljava/lang/String;
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->loadMetaZone(Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;)V
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->loadNames(Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;)V
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->loadTimeZone(Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;)V
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->nameTypeIndexFromKey(Landroid/icu/impl/UResource$Key;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames$NameTypeIndex;
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->setNameIfEmpty(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HSPLandroid/icu/impl/TimeZoneNamesImpl;-><init>(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/impl/TimeZoneNamesImpl;->getAvailableMetaZoneIDs(Ljava/lang/String;)Ljava/util/Set;
+HSPLandroid/icu/impl/TimeZoneNamesImpl;->getMetaZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
+HSPLandroid/icu/impl/TimeZoneNamesImpl;->getMetaZoneID(Ljava/lang/String;J)Ljava/lang/String;
+HSPLandroid/icu/impl/TimeZoneNamesImpl;->getTimeZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
+HSPLandroid/icu/impl/TimeZoneNamesImpl;->initialize(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/impl/TimeZoneNamesImpl;->loadMetaZoneNames(Ljava/lang/String;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
+HSPLandroid/icu/impl/TimeZoneNamesImpl;->loadStrings(Ljava/lang/String;)V
+HSPLandroid/icu/impl/TimeZoneNamesImpl;->loadTimeZoneNames(Ljava/lang/String;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
+HSPLandroid/icu/impl/Trie$DefaultGetFoldingOffset;-><init>()V
+HSPLandroid/icu/impl/Trie$DefaultGetFoldingOffset;-><init>(Landroid/icu/impl/Trie$1;)V
+HSPLandroid/icu/impl/Trie2$1;->map(I)I
+HSPLandroid/icu/impl/Trie2$Range;-><init>()V
+HSPLandroid/icu/impl/Trie2$Trie2Iterator;-><init>(Landroid/icu/impl/Trie2;Landroid/icu/impl/Trie2$ValueMapper;)V
+HSPLandroid/icu/impl/Trie2$Trie2Iterator;->hasNext()Z
+HSPLandroid/icu/impl/Trie2$Trie2Iterator;->next()Landroid/icu/impl/Trie2$Range;
+HSPLandroid/icu/impl/Trie2$Trie2Iterator;->next()Ljava/lang/Object;
+HSPLandroid/icu/impl/Trie2$Trie2Iterator;->rangeEndLS(C)I
+HSPLandroid/icu/impl/Trie2$UTrie2Header;-><init>()V
+HSPLandroid/icu/impl/Trie2;-><init>()V
+HSPLandroid/icu/impl/Trie2;->createFromSerialized(Ljava/nio/ByteBuffer;)Landroid/icu/impl/Trie2;
+HSPLandroid/icu/impl/Trie2;->iterator()Ljava/util/Iterator;
+HSPLandroid/icu/impl/Trie2;->iterator(Landroid/icu/impl/Trie2$ValueMapper;)Ljava/util/Iterator;
+HSPLandroid/icu/impl/Trie2_16;-><init>()V
+HSPLandroid/icu/impl/Trie2_16;->createFromSerialized(Ljava/nio/ByteBuffer;)Landroid/icu/impl/Trie2_16;
+HSPLandroid/icu/impl/Trie2_16;->get(I)I
+HSPLandroid/icu/impl/Trie2_16;->getFromU16SingleLead(C)I
+HSPLandroid/icu/impl/Trie2_16;->getSerializedLength()I
+HSPLandroid/icu/impl/Trie2_16;->rangeEnd(III)I
+HSPLandroid/icu/impl/Trie2_32;->get(I)I
+HSPLandroid/icu/impl/Trie2_32;->getFromU16SingleLead(C)I
+HSPLandroid/icu/impl/Trie;-><clinit>()V
+HSPLandroid/icu/impl/Trie;-><init>(Ljava/nio/ByteBuffer;Landroid/icu/impl/Trie$DataManipulate;)V
+HSPLandroid/icu/impl/Trie;->checkHeader(I)Z
+HSPLandroid/icu/impl/Trie;->isCharTrie()Z
+HSPLandroid/icu/impl/UBiDiProps;->addPropertyStarts(Landroid/icu/text/UnicodeSet;)V
+HSPLandroid/icu/impl/UBiDiProps;->getClass(I)I
+HSPLandroid/icu/impl/UBiDiProps;->getClassFromProps(I)I
+HSPLandroid/icu/impl/UBiDiProps;->getFlagFromProps(II)Z
+HSPLandroid/icu/impl/UBiDiProps;->getMirrorCodePoint(I)I
+HSPLandroid/icu/impl/UBiDiProps;->isBidiControl(I)Z
+HSPLandroid/icu/impl/UCaseProps$IsAcceptable;-><init>()V
+HSPLandroid/icu/impl/UCaseProps$IsAcceptable;-><init>(Landroid/icu/impl/UCaseProps$1;)V
+HSPLandroid/icu/impl/UCaseProps$IsAcceptable;->isDataVersionAcceptable([B)Z
+HSPLandroid/icu/impl/UCaseProps;-><clinit>()V
+HSPLandroid/icu/impl/UCaseProps;-><init>()V
+HSPLandroid/icu/impl/UCaseProps;->fold(II)I
+HSPLandroid/icu/impl/UCaseProps;->getCaseLocale(Ljava/util/Locale;)I
+HSPLandroid/icu/impl/UCaseProps;->getDelta(I)I
+HSPLandroid/icu/impl/UCaseProps;->isUpperOrTitleFromProps(I)Z
+HSPLandroid/icu/impl/UCaseProps;->propsHasException(I)Z
+HSPLandroid/icu/impl/UCaseProps;->readData(Ljava/nio/ByteBuffer;)V
+HSPLandroid/icu/impl/UCharacterProperty$1;->contains(I)Z
+HSPLandroid/icu/impl/UCharacterProperty$BinaryProperty;->contains(I)Z
+HSPLandroid/icu/impl/UCharacterProperty$BinaryProperty;->getSource()I
+HSPLandroid/icu/impl/UCharacterProperty$IntProperty;->getSource()I
+HSPLandroid/icu/impl/UCharacterProperty;->addPropertyStarts(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/impl/UCharacterProperty;->digit(I)I
+HSPLandroid/icu/impl/UCharacterProperty;->getAdditional(II)I
+HSPLandroid/icu/impl/UCharacterProperty;->getIntPropertyValue(II)I
+HSPLandroid/icu/impl/UCharacterProperty;->getNumericTypeValue(I)I
+HSPLandroid/icu/impl/UCharacterProperty;->getProperty(I)I
+HSPLandroid/icu/impl/UCharacterProperty;->getSource(I)I
+HSPLandroid/icu/impl/UCharacterProperty;->getType(I)I
+HSPLandroid/icu/impl/UCharacterProperty;->hasBinaryProperty(II)Z
+HSPLandroid/icu/impl/UCharacterProperty;->upropsvec_addPropertyStarts(Landroid/icu/text/UnicodeSet;)V
+HSPLandroid/icu/impl/UPropertyAliases$IsAcceptable;-><init>()V
+HSPLandroid/icu/impl/UPropertyAliases$IsAcceptable;-><init>(Landroid/icu/impl/UPropertyAliases$1;)V
+HSPLandroid/icu/impl/UPropertyAliases$IsAcceptable;->isDataVersionAcceptable([B)Z
+HSPLandroid/icu/impl/UPropertyAliases;-><clinit>()V
+HSPLandroid/icu/impl/UPropertyAliases;-><init>()V
+HSPLandroid/icu/impl/UPropertyAliases;->asciiToLowercase(I)I
+HSPLandroid/icu/impl/UPropertyAliases;->containsName(Landroid/icu/util/BytesTrie;Ljava/lang/CharSequence;)Z
+HSPLandroid/icu/impl/UPropertyAliases;->findProperty(I)I
+HSPLandroid/icu/impl/UPropertyAliases;->getPropertyEnum(Ljava/lang/CharSequence;)I
+HSPLandroid/icu/impl/UPropertyAliases;->getPropertyOrValueEnum(ILjava/lang/CharSequence;)I
+HSPLandroid/icu/impl/UPropertyAliases;->getPropertyValueEnum(ILjava/lang/CharSequence;)I
+HSPLandroid/icu/impl/UPropertyAliases;->getPropertyValueEnumNoThrow(ILjava/lang/CharSequence;)I
+HSPLandroid/icu/impl/UPropertyAliases;->load(Ljava/nio/ByteBuffer;)V
+HSPLandroid/icu/impl/UResource$Key;-><init>()V
+HSPLandroid/icu/impl/UResource$Key;->charAt(I)C
+HSPLandroid/icu/impl/UResource$Key;->contentEquals(Ljava/lang/CharSequence;)Z
+HSPLandroid/icu/impl/UResource$Key;->endsWith(Ljava/lang/CharSequence;)Z
+HSPLandroid/icu/impl/UResource$Key;->internalSubString(II)Ljava/lang/String;
+HSPLandroid/icu/impl/UResource$Key;->length()I
+HSPLandroid/icu/impl/UResource$Key;->regionMatches(ILjava/lang/CharSequence;I)Z
+HSPLandroid/icu/impl/UResource$Key;->setBytes([BI)Landroid/icu/impl/UResource$Key;
+HSPLandroid/icu/impl/UResource$Key;->setString(Ljava/lang/String;)Landroid/icu/impl/UResource$Key;
+HSPLandroid/icu/impl/UResource$Key;->toString()Ljava/lang/String;
+HSPLandroid/icu/impl/UResource$Sink;-><init>()V
+HSPLandroid/icu/impl/UResource$Value;-><init>()V
+HSPLandroid/icu/impl/UResource$Value;->toString()Ljava/lang/String;
+HSPLandroid/icu/impl/UnicodeSetStringSpan$OffsetList;-><clinit>()V
+HSPLandroid/icu/impl/UnicodeSetStringSpan$OffsetList;-><init>()V
+HSPLandroid/icu/impl/UnicodeSetStringSpan;-><init>(Landroid/icu/text/UnicodeSet;Ljava/util/ArrayList;I)V
+HSPLandroid/icu/impl/UnicodeSetStringSpan;->addToSpanNotSet(I)V
+HSPLandroid/icu/impl/UnicodeSetStringSpan;->makeSpanLengthByte(I)S
+HSPLandroid/icu/impl/UnicodeSetStringSpan;->needsStringSpanUTF16()Z
+HSPLandroid/icu/impl/Utility;->addExact(II)I
+HSPLandroid/icu/impl/Utility;->appendTo(Ljava/lang/CharSequence;Ljava/lang/Appendable;)Ljava/lang/Appendable;
+HSPLandroid/icu/impl/Utility;->sameObjects(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroid/icu/impl/Utility;->unescapeAt(Ljava/lang/String;[I)I
+HSPLandroid/icu/impl/ZoneMeta$SystemTimeZoneCache;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ZoneMeta$SystemTimeZoneCache;->createInstance(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/OlsonTimeZone;
+HSPLandroid/icu/impl/ZoneMeta;->findCLDRCanonicalID(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/ZoneMeta;->getCanonicalCLDRID(Landroid/icu/util/TimeZone;)Ljava/lang/String;
+HSPLandroid/icu/impl/ZoneMeta;->getCanonicalCLDRID(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/ZoneMeta;->getSystemTimeZone(Ljava/lang/String;)Landroid/icu/impl/OlsonTimeZone;
+HSPLandroid/icu/impl/ZoneMeta;->getZoneIDs()[Ljava/lang/String;
+HSPLandroid/icu/impl/ZoneMeta;->getZoneIndex(Ljava/lang/String;)I
+HSPLandroid/icu/impl/ZoneMeta;->openOlsonResource(Landroid/icu/util/UResourceBundle;Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/impl/coll/Collation;-><clinit>()V
+HSPLandroid/icu/impl/coll/Collation;->indexFromCE32(I)I
+HSPLandroid/icu/impl/coll/Collation;->isSpecialCE32(I)Z
+HSPLandroid/icu/impl/coll/Collation;->tagFromCE32(I)I
+HSPLandroid/icu/impl/coll/CollationData;->getCE32(I)I
+HSPLandroid/icu/impl/coll/CollationData;->isUnsafeBackward(IZ)Z
+HSPLandroid/icu/impl/coll/CollationFastLatin;->compareUTF16([C[CILjava/lang/CharSequence;Ljava/lang/CharSequence;I)I
+HSPLandroid/icu/impl/coll/CollationFastLatin;->getOptions(Landroid/icu/impl/coll/CollationData;Landroid/icu/impl/coll/CollationSettings;[C)I
+HSPLandroid/icu/impl/coll/CollationIterator$CEBuffer;-><init>()V
+HSPLandroid/icu/impl/coll/CollationIterator$CEBuffer;->append(J)V
+HSPLandroid/icu/impl/coll/CollationIterator$CEBuffer;->ensureAppendCapacity(I)V
+HSPLandroid/icu/impl/coll/CollationIterator$CEBuffer;->get(I)J
+HSPLandroid/icu/impl/coll/CollationIterator$CEBuffer;->incLength()V
+HSPLandroid/icu/impl/coll/CollationIterator$CEBuffer;->set(IJ)J
+HSPLandroid/icu/impl/coll/CollationIterator;-><clinit>()V
+HSPLandroid/icu/impl/coll/CollationIterator;-><init>(Landroid/icu/impl/coll/CollationData;)V
+HSPLandroid/icu/impl/coll/CollationIterator;->appendCEsFromCE32(Landroid/icu/impl/coll/CollationData;IIZ)V
+HSPLandroid/icu/impl/coll/CollationIterator;->makeCodePointAndCE32Pair(II)J
+HSPLandroid/icu/impl/coll/CollationIterator;->nextCE()J
+HSPLandroid/icu/impl/coll/CollationIterator;->nextCEFromCE32(Landroid/icu/impl/coll/CollationData;II)J
+HSPLandroid/icu/impl/coll/CollationIterator;->reset()V
+HSPLandroid/icu/impl/coll/CollationIterator;->reset(Z)V
+HSPLandroid/icu/impl/coll/CollationLoader;->findWithFallback(Landroid/icu/util/UResourceBundle;Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/impl/coll/CollationLoader;->loadTailoring(Landroid/icu/util/ULocale;Landroid/icu/util/Output;)Landroid/icu/impl/coll/CollationTailoring;
+HSPLandroid/icu/impl/coll/CollationRoot;->getRoot()Landroid/icu/impl/coll/CollationTailoring;
+HSPLandroid/icu/impl/coll/CollationSettings;->clone()Landroid/icu/impl/coll/CollationSettings;
+HSPLandroid/icu/impl/coll/CollationSettings;->clone()Landroid/icu/impl/coll/SharedObject;
+HSPLandroid/icu/impl/coll/CollationSettings;->dontCheckFCD()Z
+HSPLandroid/icu/impl/coll/CollationSettings;->getStrength()I
+HSPLandroid/icu/impl/coll/CollationSettings;->getStrength(I)I
+HSPLandroid/icu/impl/coll/CollationSettings;->hasReordering()Z
+HSPLandroid/icu/impl/coll/CollationSettings;->isNumeric()Z
+HSPLandroid/icu/impl/coll/CollationSettings;->setFlag(IZ)V
+HSPLandroid/icu/impl/coll/CollationSettings;->setStrength(I)V
+HSPLandroid/icu/impl/coll/CollationTailoring;-><init>(Landroid/icu/impl/coll/SharedObject$Reference;)V
+HSPLandroid/icu/impl/coll/FCDUTF16CollationIterator;-><clinit>()V
+HSPLandroid/icu/impl/coll/FCDUTF16CollationIterator;-><init>(Landroid/icu/impl/coll/CollationData;)V
+HSPLandroid/icu/impl/coll/SharedObject$Reference;->clear()V
+HSPLandroid/icu/impl/coll/SharedObject$Reference;->clone()Landroid/icu/impl/coll/SharedObject$Reference;
+HSPLandroid/icu/impl/coll/SharedObject$Reference;->copyOnWrite()Landroid/icu/impl/coll/SharedObject;
+HSPLandroid/icu/impl/coll/SharedObject$Reference;->finalize()V
+HSPLandroid/icu/impl/coll/SharedObject$Reference;->readOnly()Landroid/icu/impl/coll/SharedObject;
+HSPLandroid/icu/impl/coll/SharedObject;->addRef()V
+HSPLandroid/icu/impl/coll/SharedObject;->clone()Landroid/icu/impl/coll/SharedObject;
+HSPLandroid/icu/impl/coll/SharedObject;->getRefCount()I
+HSPLandroid/icu/impl/coll/SharedObject;->removeRef()V
+HSPLandroid/icu/impl/coll/UTF16CollationIterator;-><clinit>()V
+HSPLandroid/icu/impl/coll/UTF16CollationIterator;-><init>(Landroid/icu/impl/coll/CollationData;)V
+HSPLandroid/icu/impl/coll/UTF16CollationIterator;->setText(ZLjava/lang/CharSequence;I)V
+HSPLandroid/icu/impl/locale/AsciiUtil;->caseIgnoreMatch(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/icu/impl/locale/AsciiUtil;->isAlpha(C)Z
+HSPLandroid/icu/impl/locale/AsciiUtil;->toLower(C)C
+HSPLandroid/icu/impl/locale/AsciiUtil;->toLowerString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/locale/AsciiUtil;->toTitleString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/locale/AsciiUtil;->toUpper(C)C
+HSPLandroid/icu/impl/locale/AsciiUtil;->toUpperString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/locale/BaseLocale$Cache;->createObject(Landroid/icu/impl/locale/BaseLocale$Key;)Landroid/icu/impl/locale/BaseLocale;
+HSPLandroid/icu/impl/locale/BaseLocale$Cache;->createObject(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/locale/BaseLocale$Cache;->normalizeKey(Landroid/icu/impl/locale/BaseLocale$Key;)Landroid/icu/impl/locale/BaseLocale$Key;
+HSPLandroid/icu/impl/locale/BaseLocale$Cache;->normalizeKey(Ljava/lang/Object;)Ljava/lang/Object;
+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;->access$000(Landroid/icu/impl/locale/BaseLocale$Key;)Ljava/lang/String;
+HSPLandroid/icu/impl/locale/BaseLocale$Key;->access$100(Landroid/icu/impl/locale/BaseLocale$Key;)Ljava/lang/String;
+HSPLandroid/icu/impl/locale/BaseLocale$Key;->access$200(Landroid/icu/impl/locale/BaseLocale$Key;)Ljava/lang/String;
+HSPLandroid/icu/impl/locale/BaseLocale$Key;->access$300(Landroid/icu/impl/locale/BaseLocale$Key;)Ljava/lang/String;
+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;->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$1;)V
+HSPLandroid/icu/impl/locale/BaseLocale;->getInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/locale/BaseLocale;
+HSPLandroid/icu/impl/locale/BaseLocale;->getLanguage()Ljava/lang/String;
+HSPLandroid/icu/impl/locale/BaseLocale;->getRegion()Ljava/lang/String;
+HSPLandroid/icu/impl/locale/BaseLocale;->getScript()Ljava/lang/String;
+HSPLandroid/icu/impl/locale/BaseLocale;->getVariant()Ljava/lang/String;
+HSPLandroid/icu/impl/locale/LocaleObjectCache$CacheEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
+HSPLandroid/icu/impl/locale/LocaleObjectCache;->cleanStaleEntries()V
+HSPLandroid/icu/impl/locale/LocaleObjectCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/number/AdoptingModifierStore;-><clinit>()V
+HSPLandroid/icu/impl/number/AdoptingModifierStore;-><init>(Landroid/icu/impl/number/Modifier;Landroid/icu/impl/number/Modifier;Landroid/icu/impl/number/Modifier;)V
+HSPLandroid/icu/impl/number/AdoptingModifierStore;->getModifierWithoutPlural(I)Landroid/icu/impl/number/Modifier;
+HSPLandroid/icu/impl/number/AffixUtils;->containsType(Ljava/lang/CharSequence;I)Z
+HSPLandroid/icu/impl/number/AffixUtils;->escape(Ljava/lang/CharSequence;)Ljava/lang/String;
+HSPLandroid/icu/impl/number/AffixUtils;->getFieldForType(I)Landroid/icu/text/NumberFormat$Field;
+HSPLandroid/icu/impl/number/AffixUtils;->getOffset(J)I
+HSPLandroid/icu/impl/number/AffixUtils;->getState(J)I
+HSPLandroid/icu/impl/number/AffixUtils;->getType(J)I
+HSPLandroid/icu/impl/number/AffixUtils;->getTypeOrCp(J)I
+HSPLandroid/icu/impl/number/AffixUtils;->hasCurrencySymbols(Ljava/lang/CharSequence;)Z
+HSPLandroid/icu/impl/number/AffixUtils;->hasNext(JLjava/lang/CharSequence;)Z
+HSPLandroid/icu/impl/number/AffixUtils;->iterateWithConsumer(Ljava/lang/CharSequence;Landroid/icu/impl/number/AffixUtils$TokenConsumer;)V
+HSPLandroid/icu/impl/number/AffixUtils;->makeTag(IIII)J
+HSPLandroid/icu/impl/number/AffixUtils;->nextToken(JLjava/lang/CharSequence;)J
+HSPLandroid/icu/impl/number/AffixUtils;->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;-><clinit>()V
+HSPLandroid/icu/impl/number/ConstantAffixModifier;-><init>()V
+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;-><clinit>()V
+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/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;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->clear()Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->clone()Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->copyFrom(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getCompactStyle()Landroid/icu/text/CompactDecimalFormat$CompactStyle;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getCurrency()Landroid/icu/util/Currency;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getCurrencyPluralInfo()Landroid/icu/text/CurrencyPluralInfo;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getCurrencyUsage()Landroid/icu/util/Currency$CurrencyUsage;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getDecimalPatternMatchRequired()Z
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getDecimalSeparatorAlwaysShown()Z
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getExponentSignAlwaysShown()Z
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getFormatWidth()I
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getGroupingSize()I
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getGroupingUsed()Z
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getMagnitudeMultiplier()I
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getMathContext()Ljava/math/MathContext;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getMaximumFractionDigits()I
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getMaximumIntegerDigits()I
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getMaximumSignificantDigits()I
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getMinimumExponentDigits()I
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getMinimumFractionDigits()I
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getMinimumGroupingDigits()I
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getMinimumIntegerDigits()I
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getMinimumSignificantDigits()I
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getMultiplier()Ljava/math/BigDecimal;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getNegativePrefix()Ljava/lang/String;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getNegativePrefixPattern()Ljava/lang/String;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getNegativeSuffix()Ljava/lang/String;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getNegativeSuffixPattern()Ljava/lang/String;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getPadPosition()Landroid/icu/impl/number/Padder$PadPosition;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getPadString()Ljava/lang/String;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getParseCaseSensitive()Z
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getParseIntegerOnly()Z
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getParseMode()Landroid/icu/impl/number/DecimalFormatProperties$ParseMode;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getParseNoExponent()Z
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getParseToBigDecimal()Z
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getPluralRules()Landroid/icu/text/PluralRules;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getPositivePrefix()Ljava/lang/String;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getPositivePrefixPattern()Ljava/lang/String;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getPositiveSuffix()Ljava/lang/String;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getPositiveSuffixPattern()Ljava/lang/String;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getRoundingIncrement()Ljava/math/BigDecimal;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getRoundingMode()Ljava/math/RoundingMode;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getSecondaryGroupingSize()I
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->getSignAlwaysShown()Z
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setCurrency(Landroid/icu/util/Currency;)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setDecimalSeparatorAlwaysShown(Z)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setExponentSignAlwaysShown(Z)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setFormatWidth(I)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setGroupingSize(I)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setGroupingUsed(Z)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setMagnitudeMultiplier(I)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setMathContext(Ljava/math/MathContext;)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setMaximumFractionDigits(I)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setMaximumIntegerDigits(I)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setMaximumSignificantDigits(I)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setMinimumExponentDigits(I)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setMinimumFractionDigits(I)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setMinimumIntegerDigits(I)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setMinimumSignificantDigits(I)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setNegativePrefixPattern(Ljava/lang/String;)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setNegativeSuffixPattern(Ljava/lang/String;)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setPadPosition(Landroid/icu/impl/number/Padder$PadPosition;)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setPadString(Ljava/lang/String;)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setParseIntegerOnly(Z)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setParseMode(Landroid/icu/impl/number/DecimalFormatProperties$ParseMode;)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setPositivePrefixPattern(Ljava/lang/String;)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setPositiveSuffixPattern(Ljava/lang/String;)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setRoundingIncrement(Ljava/math/BigDecimal;)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setRoundingMode(Ljava/math/RoundingMode;)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalFormatProperties;->setSecondaryGroupingSize(I)Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;-><clinit>()V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;-><init>()V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->_setToDoubleFast(D)V
+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
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->applyMaxInteger(I)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->fitsInLong()Z
+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;->getUpperDisplayMagnitude()I
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->isInfinite()Z
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->isNaN()Z
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->isNegative()Z
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->isZeroish()Z
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->negate()V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->populateUFieldPosition(Ljava/text/FieldPosition;)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->roundToMagnitude(ILjava/math/MathContext;)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->roundToMagnitude(ILjava/math/MathContext;Z)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->safeSubtract(II)I
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setMinFraction(I)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setMinInteger(I)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setToDouble(D)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setToInt(I)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setToLong(J)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->signum()I
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->toLong(Z)J
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><clinit>()V
+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
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->compact()V
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->getDigitPos(I)B
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->readIntToBcd(I)V
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->readLongToBcd(J)V
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->setBcdToZero()V
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->setDigitPos(IB)V
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->shiftLeft(I)V
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->shiftRight(I)V
+HSPLandroid/icu/impl/number/Grouper;-><init>(SSS)V
+HSPLandroid/icu/impl/number/Grouper;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/Grouper;
+HSPLandroid/icu/impl/number/Grouper;->getInstance(SSS)Landroid/icu/impl/number/Grouper;
+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
+HSPLandroid/icu/impl/number/Grouper;->withLocaleData(Landroid/icu/util/ULocale;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;)Landroid/icu/impl/number/Grouper;
+HSPLandroid/icu/impl/number/MacroProps;-><init>()V
+HSPLandroid/icu/impl/number/MacroProps;->fallback(Landroid/icu/impl/number/MacroProps;)V
+HSPLandroid/icu/impl/number/MicroProps;-><init>(Z)V
+HSPLandroid/icu/impl/number/MicroProps;->clone()Ljava/lang/Object;
+HSPLandroid/icu/impl/number/MicroProps;->processQuantity(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
+HSPLandroid/icu/impl/number/MultiplierFormatHandler;-><init>(Landroid/icu/number/Scale;Landroid/icu/impl/number/MicroPropsGenerator;)V
+HSPLandroid/icu/impl/number/MultiplierFormatHandler;->processQuantity(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
+HSPLandroid/icu/impl/number/MutablePatternModifier$ImmutablePatternModifier;-><init>(Landroid/icu/impl/number/AdoptingModifierStore;Landroid/icu/text/PluralRules;Landroid/icu/impl/number/MicroPropsGenerator;)V
+HSPLandroid/icu/impl/number/MutablePatternModifier$ImmutablePatternModifier;->applyToMicros(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;)V
+HSPLandroid/icu/impl/number/MutablePatternModifier$ImmutablePatternModifier;->processQuantity(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
+HSPLandroid/icu/impl/number/MutablePatternModifier;-><clinit>()V
+HSPLandroid/icu/impl/number/MutablePatternModifier;-><init>(Z)V
+HSPLandroid/icu/impl/number/MutablePatternModifier;->addToChain(Landroid/icu/impl/number/MicroPropsGenerator;)Landroid/icu/impl/number/MicroPropsGenerator;
+HSPLandroid/icu/impl/number/MutablePatternModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
+HSPLandroid/icu/impl/number/MutablePatternModifier;->createConstantModifier(Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;)Landroid/icu/impl/number/ConstantMultiFieldModifier;
+HSPLandroid/icu/impl/number/MutablePatternModifier;->createImmutableAndChain(Landroid/icu/impl/number/MicroPropsGenerator;)Landroid/icu/impl/number/MutablePatternModifier$ImmutablePatternModifier;
+HSPLandroid/icu/impl/number/MutablePatternModifier;->getPrefixLength()I
+HSPLandroid/icu/impl/number/MutablePatternModifier;->getSymbol(I)Ljava/lang/CharSequence;
+HSPLandroid/icu/impl/number/MutablePatternModifier;->insertPrefix(Landroid/icu/impl/FormattedStringBuilder;I)I
+HSPLandroid/icu/impl/number/MutablePatternModifier;->insertSuffix(Landroid/icu/impl/FormattedStringBuilder;I)I
+HSPLandroid/icu/impl/number/MutablePatternModifier;->needsPlurals()Z
+HSPLandroid/icu/impl/number/MutablePatternModifier;->prepareAffix(Z)V
+HSPLandroid/icu/impl/number/MutablePatternModifier;->processQuantity(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
+HSPLandroid/icu/impl/number/MutablePatternModifier;->setNumberProperties(ILandroid/icu/impl/StandardPlural;)V
+HSPLandroid/icu/impl/number/MutablePatternModifier;->setPatternAttributes(Landroid/icu/number/NumberFormatter$SignDisplay;Z)V
+HSPLandroid/icu/impl/number/MutablePatternModifier;->setPatternInfo(Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/text/NumberFormat$Field;)V
+HSPLandroid/icu/impl/number/MutablePatternModifier;->setSymbols(Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/util/Currency;Landroid/icu/number/NumberFormatter$UnitWidth;Landroid/icu/text/PluralRules;)V
+HSPLandroid/icu/impl/number/Padder;-><clinit>()V
+HSPLandroid/icu/impl/number/Padder;-><init>(Ljava/lang/String;ILandroid/icu/impl/number/Padder$PadPosition;)V
+HSPLandroid/icu/impl/number/Padder;->isValid()Z
+HSPLandroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;-><init>(Ljava/lang/String;Landroid/icu/impl/number/PatternStringParser$1;)V
+HSPLandroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;->getEndpoints(I)J
+HSPLandroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;->getString(I)Ljava/lang/String;
+HSPLandroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;-><init>()V
+HSPLandroid/icu/impl/number/PatternStringParser$ParserState;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/impl/number/PatternStringParser$ParserState;->next()I
+HSPLandroid/icu/impl/number/PatternStringParser$ParserState;->peek()I
+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
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeFractionFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeIntegerFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeLiteral(Landroid/icu/impl/number/PatternStringParser$ParserState;)V
+HSPLandroid/icu/impl/number/PatternStringParser;->consumePadding(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;Landroid/icu/impl/number/Padder$PadPosition;)V
+HSPLandroid/icu/impl/number/PatternStringParser;->consumePattern(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;)V
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeSubpattern(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
+HSPLandroid/icu/impl/number/PatternStringParser;->parseToExistingProperties(Ljava/lang/String;Landroid/icu/impl/number/DecimalFormatProperties;I)V
+HSPLandroid/icu/impl/number/PatternStringParser;->parseToExistingPropertiesImpl(Ljava/lang/String;Landroid/icu/impl/number/DecimalFormatProperties;I)V
+HSPLandroid/icu/impl/number/PatternStringParser;->parseToPatternInfo(Ljava/lang/String;)Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;
+HSPLandroid/icu/impl/number/PatternStringParser;->patternInfoToProperties(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;I)V
+HSPLandroid/icu/impl/number/PatternStringUtils;-><clinit>()V
+HSPLandroid/icu/impl/number/PatternStringUtils;->patternInfoToStringBuilder(Landroid/icu/impl/number/AffixPatternProvider;ZILandroid/icu/number/NumberFormatter$SignDisplay;Landroid/icu/impl/StandardPlural;ZLjava/lang/StringBuilder;)V
+HSPLandroid/icu/impl/number/PatternStringUtils;->propertiesToPatternString(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/lang/String;
+HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;-><init>(Landroid/icu/impl/number/DecimalFormatProperties;)V
+HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->charAt(II)C
+HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->containsSymbolType(I)Z
+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
+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;
+HSPLandroid/icu/impl/number/parse/AffixMatcher$1;-><init>()V
+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;-><clinit>()V
+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;->access$000(Landroid/icu/impl/number/parse/AffixMatcher;)Landroid/icu/impl/number/parse/AffixPatternMatcher;
+HSPLandroid/icu/impl/number/parse/AffixMatcher;->access$100(Landroid/icu/impl/number/parse/AffixPatternMatcher;)I
+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;->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/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
+HSPLandroid/icu/impl/number/parse/AffixPatternMatcher;->fromAffixPattern(Ljava/lang/String;Landroid/icu/impl/number/parse/AffixTokenMatcherFactory;I)Landroid/icu/impl/number/parse/AffixPatternMatcher;
+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;-><clinit>()V
+HSPLandroid/icu/impl/number/parse/DecimalMatcher;-><init>(Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/Grouper;I)V
+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
+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
+HSPLandroid/icu/impl/number/parse/IgnorablesMatcher;-><clinit>()V
+HSPLandroid/icu/impl/number/parse/IgnorablesMatcher;-><init>(Landroid/icu/text/UnicodeSet;)V
+HSPLandroid/icu/impl/number/parse/IgnorablesMatcher;->getInstance(I)Landroid/icu/impl/number/parse/IgnorablesMatcher;
+HSPLandroid/icu/impl/number/parse/InfinityMatcher;-><clinit>()V
+HSPLandroid/icu/impl/number/parse/InfinityMatcher;-><init>()V
+HSPLandroid/icu/impl/number/parse/InfinityMatcher;->getInstance(Landroid/icu/text/DecimalFormatSymbols;)Landroid/icu/impl/number/parse/InfinityMatcher;
+HSPLandroid/icu/impl/number/parse/MinusSignMatcher;-><clinit>()V
+HSPLandroid/icu/impl/number/parse/MinusSignMatcher;-><init>(Z)V
+HSPLandroid/icu/impl/number/parse/MinusSignMatcher;->getInstance(Landroid/icu/text/DecimalFormatSymbols;Z)Landroid/icu/impl/number/parse/MinusSignMatcher;
+HSPLandroid/icu/impl/number/parse/NanMatcher;-><clinit>()V
+HSPLandroid/icu/impl/number/parse/NanMatcher;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/impl/number/parse/NanMatcher;->getInstance(Landroid/icu/text/DecimalFormatSymbols;I)Landroid/icu/impl/number/parse/NanMatcher;
+HSPLandroid/icu/impl/number/parse/NumberParserImpl;-><clinit>()V
+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;->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
+HSPLandroid/icu/impl/number/parse/NumberParserImpl;->parseGreedy(Landroid/icu/impl/StringSegment;Landroid/icu/impl/number/parse/ParsedNumber;)V
+HSPLandroid/icu/impl/number/parse/ParsedNumber$1;-><init>()V
+HSPLandroid/icu/impl/number/parse/ParsedNumber;-><clinit>()V
+HSPLandroid/icu/impl/number/parse/ParsedNumber;-><init>()V
+HSPLandroid/icu/impl/number/parse/ParsedNumber;->clear()V
+HSPLandroid/icu/impl/number/parse/ParsedNumber;->getNumber(I)Ljava/lang/Number;
+HSPLandroid/icu/impl/number/parse/ParsedNumber;->postProcess()V
+HSPLandroid/icu/impl/number/parse/ParsedNumber;->seenNumber()Z
+HSPLandroid/icu/impl/number/parse/ParsedNumber;->setCharsConsumed(Landroid/icu/impl/StringSegment;)V
+HSPLandroid/icu/impl/number/parse/ParsedNumber;->success()Z
+HSPLandroid/icu/impl/number/parse/ParsingUtils;->safeContains(Landroid/icu/text/UnicodeSet;Ljava/lang/CharSequence;)Z
+HSPLandroid/icu/impl/number/parse/RequireAffixValidator;-><init>()V
+HSPLandroid/icu/impl/number/parse/RequireAffixValidator;->postProcess(Landroid/icu/impl/number/parse/ParsedNumber;)V
+HSPLandroid/icu/impl/number/parse/RequireNumberValidator;-><init>()V
+HSPLandroid/icu/impl/number/parse/RequireNumberValidator;->postProcess(Landroid/icu/impl/number/parse/ParsedNumber;)V
+HSPLandroid/icu/impl/number/parse/ScientificMatcher;-><init>(Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/Grouper;)V
+HSPLandroid/icu/impl/number/parse/ScientificMatcher;->getInstance(Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/Grouper;)Landroid/icu/impl/number/parse/ScientificMatcher;
+HSPLandroid/icu/impl/number/parse/ScientificMatcher;->minusSignSet()Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/impl/number/parse/ScientificMatcher;->plusSignSet()Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/impl/number/parse/ScientificMatcher;->postProcess(Landroid/icu/impl/number/parse/ParsedNumber;)V
+HSPLandroid/icu/impl/number/parse/ScientificMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z
+HSPLandroid/icu/impl/number/parse/SeriesMatcher;-><clinit>()V
+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/SymbolMatcher;-><init>(Landroid/icu/impl/StaticUnicodeSets$Key;)V
+HSPLandroid/icu/impl/number/parse/SymbolMatcher;-><init>(Ljava/lang/String;Landroid/icu/text/UnicodeSet;)V
+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/ValidationMatcher;-><init>()V
+HSPLandroid/icu/impl/number/parse/ValidationMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z
+HSPLandroid/icu/lang/CharacterProperties;-><clinit>()V
+HSPLandroid/icu/lang/CharacterProperties;->getBinaryPropertySet(I)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/lang/CharacterProperties;->makeSet(I)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/lang/UCharacter;->digit(I)I
+HSPLandroid/icu/lang/UCharacter;->digit(II)I
+HSPLandroid/icu/lang/UCharacter;->foldCase(II)I
+HSPLandroid/icu/lang/UCharacter;->foldCase(IZ)I
+HSPLandroid/icu/lang/UCharacter;->getIntPropertyValue(II)I
+HSPLandroid/icu/lang/UCharacter;->getPropertyEnum(Ljava/lang/CharSequence;)I
+HSPLandroid/icu/lang/UCharacter;->getPropertyValueEnum(ILjava/lang/CharSequence;)I
+HSPLandroid/icu/lang/UCharacter;->getPropertyValueEnumNoThrow(ILjava/lang/CharSequence;)I
+HSPLandroid/icu/lang/UCharacter;->getType(I)I
+HSPLandroid/icu/lang/UCharacter;->getUnicodeVersion()Landroid/icu/util/VersionInfo;
+HSPLandroid/icu/lang/UCharacter;->hasBinaryProperty(II)Z
+HSPLandroid/icu/lang/UCharacter;->isDigit(I)Z
+HSPLandroid/icu/lang/UCharacter;->isLowerCase(I)Z
+HSPLandroid/icu/lang/UScript$ScriptMetadata;-><clinit>()V
+HSPLandroid/icu/lang/UScript$ScriptMetadata;->access$000(I)I
+HSPLandroid/icu/lang/UScript$ScriptMetadata;->getScriptProps(I)I
+HSPLandroid/icu/lang/UScript;->getCodeFromName(Ljava/lang/String;)I
+HSPLandroid/icu/lang/UScript;->isRightToLeft(I)Z
+HSPLandroid/icu/number/FormattedNumber;-><init>(Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/number/DecimalQuantity;)V
+HSPLandroid/icu/number/FormattedNumber;->appendTo(Ljava/lang/Appendable;)Ljava/lang/Appendable;
+HSPLandroid/icu/number/FormattedNumber;->nextFieldPosition(Ljava/text/FieldPosition;)Z
+HSPLandroid/icu/number/FractionPrecision;-><init>()V
+HSPLandroid/icu/number/IntegerWidth;-><init>(II)V
+HSPLandroid/icu/number/IntegerWidth;->truncateAt(I)Landroid/icu/number/IntegerWidth;
+HSPLandroid/icu/number/IntegerWidth;->zeroFillTo(I)Landroid/icu/number/IntegerWidth;
+HSPLandroid/icu/number/LocalizedNumberFormatter;-><init>(Landroid/icu/number/NumberFormatterSettings;ILjava/lang/Object;)V
+HSPLandroid/icu/number/LocalizedNumberFormatter;->computeCompiled()Z
+HSPLandroid/icu/number/LocalizedNumberFormatter;->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;)V
+HSPLandroid/icu/number/LocalizedNumberFormatter;->getAffixImpl(ZZ)Ljava/lang/String;
+HSPLandroid/icu/number/NumberFormatter$UnitWidth;-><clinit>()V
+HSPLandroid/icu/number/NumberFormatter$UnitWidth;-><init>(Ljava/lang/String;I)V
+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;
+HSPLandroid/icu/number/NumberFormatterImpl;-><clinit>()V
+HSPLandroid/icu/number/NumberFormatterImpl;->format(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;)I
+HSPLandroid/icu/number/NumberFormatterImpl;->formatStatic(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;)I
+HSPLandroid/icu/number/NumberFormatterImpl;->getPrefixSuffix(BLandroid/icu/impl/StandardPlural;Landroid/icu/impl/FormattedStringBuilder;)I
+HSPLandroid/icu/number/NumberFormatterImpl;->getPrefixSuffixImpl(Landroid/icu/impl/number/MicroPropsGenerator;BLandroid/icu/impl/FormattedStringBuilder;)I
+HSPLandroid/icu/number/NumberFormatterImpl;->getPrefixSuffixStatic(Landroid/icu/impl/number/MacroProps;BLandroid/icu/impl/StandardPlural;Landroid/icu/impl/FormattedStringBuilder;)I
+HSPLandroid/icu/number/NumberFormatterImpl;->macrosToMicroGenerator(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/MicroProps;Z)Landroid/icu/impl/number/MicroPropsGenerator;
+HSPLandroid/icu/number/NumberFormatterImpl;->preProcess(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
+HSPLandroid/icu/number/NumberFormatterImpl;->preProcessUnsafe(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
+HSPLandroid/icu/number/NumberFormatterImpl;->unitIsCurrency(Landroid/icu/util/MeasureUnit;)Z
+HSPLandroid/icu/number/NumberFormatterImpl;->unitIsNoUnit(Landroid/icu/util/MeasureUnit;)Z
+HSPLandroid/icu/number/NumberFormatterImpl;->unitIsPercent(Landroid/icu/util/MeasureUnit;)Z
+HSPLandroid/icu/number/NumberFormatterImpl;->unitIsPermille(Landroid/icu/util/MeasureUnit;)Z
+HSPLandroid/icu/number/NumberFormatterImpl;->writeAffixes(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/FormattedStringBuilder;II)I
+HSPLandroid/icu/number/NumberFormatterImpl;->writeFractionDigits(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I
+HSPLandroid/icu/number/NumberFormatterImpl;->writeIntegerDigits(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I
+HSPLandroid/icu/number/NumberFormatterImpl;->writeNumber(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I
+HSPLandroid/icu/number/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;->resolve()Landroid/icu/impl/number/MacroProps;
+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;
+HSPLandroid/icu/number/Precision$FractionRounderImpl;-><init>(II)V
+HSPLandroid/icu/number/Precision$FractionRounderImpl;->apply(Landroid/icu/impl/number/DecimalQuantity;)V
+HSPLandroid/icu/number/Precision;-><init>()V
+HSPLandroid/icu/number/Precision;->access$000(I)I
+HSPLandroid/icu/number/Precision;->access$100(I)I
+HSPLandroid/icu/number/Precision;->constructFraction(II)Landroid/icu/number/FractionPrecision;
+HSPLandroid/icu/number/Precision;->getDisplayMagnitudeFraction(I)I
+HSPLandroid/icu/number/Precision;->getRoundingMagnitudeFraction(I)I
+HSPLandroid/icu/number/Precision;->withLocaleData(Landroid/icu/util/Currency;)Landroid/icu/number/Precision;
+HSPLandroid/icu/number/Precision;->withMode(Ljava/math/MathContext;)Landroid/icu/number/Precision;
+HSPLandroid/icu/number/Scale;-><clinit>()V
+HSPLandroid/icu/number/Scale;-><init>(ILjava/math/BigDecimal;)V
+HSPLandroid/icu/number/Scale;-><init>(ILjava/math/BigDecimal;Ljava/math/MathContext;)V
+HSPLandroid/icu/number/Scale;->applyTo(Landroid/icu/impl/number/DecimalQuantity;)V
+HSPLandroid/icu/number/Scale;->powerOfTen(I)Landroid/icu/number/Scale;
+HSPLandroid/icu/number/Scale;->withMathContext(Ljava/math/MathContext;)Landroid/icu/number/Scale;
+HSPLandroid/icu/number/UnlocalizedNumberFormatter;-><init>(Landroid/icu/number/NumberFormatterSettings;ILjava/lang/Object;)V
+HSPLandroid/icu/number/UnlocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/NumberFormatterSettings;
+HSPLandroid/icu/number/UnlocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/UnlocalizedNumberFormatter;
+HSPLandroid/icu/number/UnlocalizedNumberFormatter;->locale(Landroid/icu/util/ULocale;)Landroid/icu/number/LocalizedNumberFormatter;
+HSPLandroid/icu/text/Bidi$InsertPoints;-><init>()V
+HSPLandroid/icu/text/Bidi;-><init>(II)V
+HSPLandroid/icu/text/Bidi;->DirPropFlag(B)I
+HSPLandroid/icu/text/Bidi;->DirPropFlagLR(B)I
+HSPLandroid/icu/text/Bidi;->GetParaLevelAt(I)B
+HSPLandroid/icu/text/Bidi;->IsDefaultLevel(B)Z
+HSPLandroid/icu/text/Bidi;->directionFromFlags()B
+HSPLandroid/icu/text/Bidi;->getCustomizedClass(I)I
+HSPLandroid/icu/text/Bidi;->getDirProps()V
+HSPLandroid/icu/text/Bidi;->getDirPropsMemory(I)V
+HSPLandroid/icu/text/Bidi;->getDirPropsMemory(ZI)V
+HSPLandroid/icu/text/Bidi;->getInitialDirPropsMemory(I)V
+HSPLandroid/icu/text/Bidi;->getInitialLevelsMemory(I)V
+HSPLandroid/icu/text/Bidi;->getLevelAt(I)B
+HSPLandroid/icu/text/Bidi;->getLevelsMemory(I)V
+HSPLandroid/icu/text/Bidi;->getLevelsMemory(ZI)V
+HSPLandroid/icu/text/Bidi;->getMemory(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Class;ZI)Ljava/lang/Object;
+HSPLandroid/icu/text/Bidi;->getParaLevel()B
+HSPLandroid/icu/text/Bidi;->resolveExplicitLevels()B
+HSPLandroid/icu/text/Bidi;->setPara([CB[B)V
+HSPLandroid/icu/text/Bidi;->setParaSuccess()V
+HSPLandroid/icu/text/Bidi;->verifyRange(III)V
+HSPLandroid/icu/text/Bidi;->verifyValidParaOrLine()V
+HSPLandroid/icu/text/BidiLine;->getLevelAt(Landroid/icu/text/Bidi;I)B
+HSPLandroid/icu/text/BidiRun;-><init>()V
+HSPLandroid/icu/text/BidiRun;-><init>(IIB)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;
+HSPLandroid/icu/text/BreakIterator$BreakIteratorCache;->getLocale()Landroid/icu/util/ULocale;
+HSPLandroid/icu/text/BreakIterator$BreakIteratorServiceShim;-><init>()V
+HSPLandroid/icu/text/BreakIterator;-><init>()V
+HSPLandroid/icu/text/BreakIterator;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/BreakIterator;->getBreakInstance(Landroid/icu/util/ULocale;I)Landroid/icu/text/BreakIterator;
+HSPLandroid/icu/text/BreakIterator;->getSentenceInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;
+HSPLandroid/icu/text/BreakIterator;->getShim()Landroid/icu/text/BreakIterator$BreakIteratorServiceShim;
+HSPLandroid/icu/text/BreakIterator;->getWordInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;
+HSPLandroid/icu/text/BreakIteratorFactory;-><init>()V
+HSPLandroid/icu/text/BreakIteratorFactory;->createBreakIterator(Landroid/icu/util/ULocale;I)Landroid/icu/text/BreakIterator;
+HSPLandroid/icu/text/CaseMap$Upper;->access$100()Landroid/icu/text/CaseMap$Upper;
+HSPLandroid/icu/text/CaseMap$Upper;->apply(Ljava/util/Locale;Ljava/lang/CharSequence;Ljava/lang/Appendable;Landroid/icu/text/Edits;)Ljava/lang/Appendable;
+HSPLandroid/icu/text/CaseMap;->access$500(Ljava/util/Locale;)I
+HSPLandroid/icu/text/CaseMap;->getCaseLocale(Ljava/util/Locale;)I
+HSPLandroid/icu/text/CaseMap;->toUpper()Landroid/icu/text/CaseMap$Upper;
+HSPLandroid/icu/text/Collator$ServiceShim;-><init>()V
+HSPLandroid/icu/text/Collator;-><init>()V
+HSPLandroid/icu/text/Collator;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/Collator;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/Collator;
+HSPLandroid/icu/text/Collator;->getInstance(Ljava/util/Locale;)Landroid/icu/text/Collator;
+HSPLandroid/icu/text/Collator;->getShim()Landroid/icu/text/Collator$ServiceShim;
+HSPLandroid/icu/text/CollatorServiceShim$CService$1CollatorFactory;->handleCreate(Landroid/icu/util/ULocale;ILandroid/icu/impl/ICUService;)Ljava/lang/Object;
+HSPLandroid/icu/text/CollatorServiceShim$CService;->validateFallbackLocale()Ljava/lang/String;
+HSPLandroid/icu/text/CollatorServiceShim;-><init>()V
+HSPLandroid/icu/text/CollatorServiceShim;->access$000(Landroid/icu/util/ULocale;)Landroid/icu/text/Collator;
+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$1;-><clinit>()V
+HSPLandroid/icu/text/ConstrainedFieldPosition$ConstraintType;-><clinit>()V
+HSPLandroid/icu/text/ConstrainedFieldPosition$ConstraintType;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/text/ConstrainedFieldPosition$ConstraintType;->values()[Landroid/icu/text/ConstrainedFieldPosition$ConstraintType;
+HSPLandroid/icu/text/ConstrainedFieldPosition;-><clinit>()V
+HSPLandroid/icu/text/ConstrainedFieldPosition;-><init>()V
+HSPLandroid/icu/text/ConstrainedFieldPosition;->constrainField(Ljava/text/Format$Field;)V
+HSPLandroid/icu/text/ConstrainedFieldPosition;->getLimit()I
+HSPLandroid/icu/text/ConstrainedFieldPosition;->getStart()I
+HSPLandroid/icu/text/ConstrainedFieldPosition;->matchesField(Ljava/text/Format$Field;Ljava/lang/Object;)Z
+HSPLandroid/icu/text/ConstrainedFieldPosition;->reset()V
+HSPLandroid/icu/text/ConstrainedFieldPosition;->setState(Ljava/text/Format$Field;Ljava/lang/Object;II)V
+HSPLandroid/icu/text/CurrencyDisplayNames;-><init>()V
+HSPLandroid/icu/text/CurrencyDisplayNames;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/CurrencyDisplayNames;
+HSPLandroid/icu/text/DateFormat$BooleanAttribute;->values()[Landroid/icu/text/DateFormat$BooleanAttribute;
+HSPLandroid/icu/text/DateFormat;-><init>()V
+HSPLandroid/icu/text/DateFormat;->get(IILandroid/icu/util/ULocale;Landroid/icu/util/Calendar;)Landroid/icu/text/DateFormat;
+HSPLandroid/icu/text/DateFormat;->getCalendar()Landroid/icu/util/Calendar;
+HSPLandroid/icu/text/DateFormat;->getContext(Landroid/icu/text/DisplayContext$Type;)Landroid/icu/text/DisplayContext;
+HSPLandroid/icu/text/DateFormat;->getDateInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
+HSPLandroid/icu/text/DateFormat;->getTimeInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
+HSPLandroid/icu/text/DateFormat;->setCalendar(Landroid/icu/util/Calendar;)V
+HSPLandroid/icu/text/DateFormat;->setTimeZone(Landroid/icu/util/TimeZone;)V
+HSPLandroid/icu/text/DateFormatSymbols$1;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/text/DateFormatSymbols$1;->createInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormatSymbols;
+HSPLandroid/icu/text/DateFormatSymbols$CalendarDataSink;-><init>()V
+HSPLandroid/icu/text/DateFormatSymbols$CalendarDataSink;->preEnumerate(Ljava/lang/String;)V
+HSPLandroid/icu/text/DateFormatSymbols$CalendarDataSink;->processAliasFromValue(Ljava/lang/String;Landroid/icu/impl/UResource$Value;)Landroid/icu/text/DateFormatSymbols$CalendarDataSink$AliasType;
+HSPLandroid/icu/text/DateFormatSymbols$CalendarDataSink;->processResource(Ljava/lang/String;Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HSPLandroid/icu/text/DateFormatSymbols$CalendarDataSink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HSPLandroid/icu/text/DateFormatSymbols$CapitalizationContextUsage;->values()[Landroid/icu/text/DateFormatSymbols$CapitalizationContextUsage;
+HSPLandroid/icu/text/DateFormatSymbols;-><init>(Landroid/icu/util/Calendar;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateFormatSymbols;-><init>(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateFormatSymbols;-><init>(Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;)V
+HSPLandroid/icu/text/DateFormatSymbols;-><init>(Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;Landroid/icu/text/DateFormatSymbols$1;)V
+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;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
+HSPLandroid/icu/text/DateIntervalFormat$BestMatchInfo;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/text/DateIntervalFormat;-><init>(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/text/SimpleDateFormat;)V
+HSPLandroid/icu/text/DateIntervalFormat;->format(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DateIntervalFormat;->formatImpl(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Landroid/icu/text/DateIntervalFormat$FormatOutput;Ljava/util/List;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DateIntervalFormat;->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;->getDateTimeSkeleton(Ljava/lang/String;Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;)V
+HSPLandroid/icu/text/DateIntervalFormat;->getInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateIntervalFormat;
+HSPLandroid/icu/text/DateIntervalFormat;->initializeIntervalPattern(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/util/Map;
+HSPLandroid/icu/text/DateIntervalFormat;->initializePattern(Landroid/icu/impl/ICUCache;)V
+HSPLandroid/icu/text/DateIntervalFormat;->setTimeZone(Landroid/icu/util/TimeZone;)V
+HSPLandroid/icu/text/DateIntervalInfo$DateIntervalSink;-><init>(Landroid/icu/text/DateIntervalInfo;)V
+HSPLandroid/icu/text/DateIntervalInfo$DateIntervalSink;->getAndResetNextCalendarType()Ljava/lang/String;
+HSPLandroid/icu/text/DateIntervalInfo$DateIntervalSink;->processSkeletonTable(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HSPLandroid/icu/text/DateIntervalInfo$DateIntervalSink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HSPLandroid/icu/text/DateIntervalInfo$DateIntervalSink;->setIntervalPatternIfAbsent(Ljava/lang/String;Ljava/lang/String;Landroid/icu/impl/UResource$Value;)V
+HSPLandroid/icu/text/DateIntervalInfo$DateIntervalSink;->validateAndProcessPatternLetter(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/icu/text/DateIntervalInfo$PatternInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLandroid/icu/text/DateIntervalInfo;-><init>(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateIntervalInfo;->access$000()Ljava/lang/String;
+HSPLandroid/icu/text/DateIntervalInfo;->access$200(Landroid/icu/text/DateIntervalInfo;)Ljava/util/Map;
+HSPLandroid/icu/text/DateIntervalInfo;->access$300(Landroid/icu/text/DateIntervalInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/text/DateIntervalInfo$PatternInfo;
+HSPLandroid/icu/text/DateIntervalInfo;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/DateIntervalInfo;->cloneUnfrozenDII()Ljava/lang/Object;
+HSPLandroid/icu/text/DateIntervalInfo;->freeze()Landroid/icu/text/DateIntervalInfo;
+HSPLandroid/icu/text/DateIntervalInfo;->genPatternInfo(Ljava/lang/String;Z)Landroid/icu/text/DateIntervalInfo$PatternInfo;
+HSPLandroid/icu/text/DateIntervalInfo;->getBestSkeleton(Ljava/lang/String;)Landroid/icu/text/DateIntervalFormat$BestMatchInfo;
+HSPLandroid/icu/text/DateIntervalInfo;->getIntervalPattern(Ljava/lang/String;I)Landroid/icu/text/DateIntervalInfo$PatternInfo;
+HSPLandroid/icu/text/DateIntervalInfo;->initializeData(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateIntervalInfo;->parseSkeleton(Ljava/lang/String;[I)V
+HSPLandroid/icu/text/DateIntervalInfo;->setFallbackIntervalPattern(Ljava/lang/String;)V
+HSPLandroid/icu/text/DateIntervalInfo;->setIntervalPatternInternally(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/text/DateIntervalInfo$PatternInfo;
+HSPLandroid/icu/text/DateIntervalInfo;->setup(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateIntervalInfo;->splitPatternInto2Part(Ljava/lang/String;)I
+HSPLandroid/icu/text/DateTimePatternGenerator$AppendItemFormatsSink;-><init>(Landroid/icu/text/DateTimePatternGenerator;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$AppendItemFormatsSink;-><init>(Landroid/icu/text/DateTimePatternGenerator;Landroid/icu/text/DateTimePatternGenerator$1;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$AppendItemFormatsSink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HSPLandroid/icu/text/DateTimePatternGenerator$AppendItemNamesSink;-><init>(Landroid/icu/text/DateTimePatternGenerator;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$AppendItemNamesSink;-><init>(Landroid/icu/text/DateTimePatternGenerator;Landroid/icu/text/DateTimePatternGenerator$1;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$AppendItemNamesSink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HSPLandroid/icu/text/DateTimePatternGenerator$AvailableFormatsSink;-><init>(Landroid/icu/text/DateTimePatternGenerator;Landroid/icu/text/DateTimePatternGenerator$PatternInfo;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$AvailableFormatsSink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HSPLandroid/icu/text/DateTimePatternGenerator$DTPGflags;->values()[Landroid/icu/text/DateTimePatternGenerator$DTPGflags;
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;-><init>()V
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;-><init>(Landroid/icu/text/DateTimePatternGenerator$1;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->access$1700(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;)Landroid/icu/text/DateTimePatternGenerator$SkeletonFields;
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->access$1800(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;)[I
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->compareTo(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;)I
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->compareTo(Ljava/lang/Object;)I
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->equals(Ljava/lang/Object;)Z
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->fieldIsNumeric(I)Z
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getBasePattern()Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getDistance(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;ILandroid/icu/text/DateTimePatternGenerator$DistanceInfo;)I
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->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$DisplayWidth;->access$100()I
+HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;-><init>()V
+HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;-><init>(Landroid/icu/text/DateTimePatternGenerator$1;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;->addExtra(I)V
+HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;->addMissing(I)V
+HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;->clear()V
+HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;->setTo(Landroid/icu/text/DateTimePatternGenerator$DistanceInfo;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;-><init>()V
+HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->access$1000(Landroid/icu/text/DateTimePatternGenerator$FormatParser;)Ljava/util/List;
+HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->addVariable(Ljava/lang/StringBuffer;Z)V
+HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->getItems()Ljava/util/List;
+HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->quoteLiteral(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->set(Ljava/lang/String;)Landroid/icu/text/DateTimePatternGenerator$FormatParser;
+HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->set(Ljava/lang/String;Z)Landroid/icu/text/DateTimePatternGenerator$FormatParser;
+HSPLandroid/icu/text/DateTimePatternGenerator$PatternWithMatcher;-><init>(Ljava/lang/String;Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$PatternWithSkeletonFlag;-><init>(Ljava/lang/String;Z)V
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;-><init>()V
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;-><init>(Landroid/icu/text/DateTimePatternGenerator$1;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->appendFieldTo(ILjava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->appendTo(Ljava/lang/StringBuilder;ZZ)Ljava/lang/StringBuilder;
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->clear()V
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->compareTo(Landroid/icu/text/DateTimePatternGenerator$SkeletonFields;)I
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->getFieldChar(I)C
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->getFieldLength(I)I
+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;->toString(Z)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator$VariableField;-><init>(Ljava/lang/String;Z)V
+HSPLandroid/icu/text/DateTimePatternGenerator$VariableField;->access$2100(Landroid/icu/text/DateTimePatternGenerator$VariableField;)I
+HSPLandroid/icu/text/DateTimePatternGenerator$VariableField;->getCanonicalIndex()I
+HSPLandroid/icu/text/DateTimePatternGenerator$VariableField;->getType()I
+HSPLandroid/icu/text/DateTimePatternGenerator$VariableField;->isNumeric()Z
+HSPLandroid/icu/text/DateTimePatternGenerator$VariableField;->toString()Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;-><init>()V
+HSPLandroid/icu/text/DateTimePatternGenerator;->access$000(Landroid/icu/impl/UResource$Key;)I
+HSPLandroid/icu/text/DateTimePatternGenerator;->access$1400(Ljava/lang/String;Z)I
+HSPLandroid/icu/text/DateTimePatternGenerator;->access$1500()[[I
+HSPLandroid/icu/text/DateTimePatternGenerator;->access$200()[Landroid/icu/text/DateTimePatternGenerator$DisplayWidth;
+HSPLandroid/icu/text/DateTimePatternGenerator;->access$300(Landroid/icu/text/DateTimePatternGenerator;ILandroid/icu/text/DateTimePatternGenerator$DisplayWidth;Ljava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->access$400(Landroid/icu/text/DateTimePatternGenerator;Ljava/lang/String;)Z
+HSPLandroid/icu/text/DateTimePatternGenerator;->access$500(Landroid/icu/text/DateTimePatternGenerator;Ljava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->addCLDRData(Landroid/icu/text/DateTimePatternGenerator$PatternInfo;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->addICUPatterns(Landroid/icu/text/DateTimePatternGenerator$PatternInfo;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->addPattern(Ljava/lang/String;ZLandroid/icu/text/DateTimePatternGenerator$PatternInfo;)Landroid/icu/text/DateTimePatternGenerator;
+HSPLandroid/icu/text/DateTimePatternGenerator;->addPatternWithSkeleton(Ljava/lang/String;Ljava/lang/String;ZLandroid/icu/text/DateTimePatternGenerator$PatternInfo;)Landroid/icu/text/DateTimePatternGenerator;
+HSPLandroid/icu/text/DateTimePatternGenerator;->adjustFieldTypes(Landroid/icu/text/DateTimePatternGenerator$PatternWithMatcher;Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;Ljava/util/EnumSet;I)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->checkFrozen()V
+HSPLandroid/icu/text/DateTimePatternGenerator;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/DateTimePatternGenerator;->cloneAsThawed()Landroid/icu/text/DateTimePatternGenerator;
+HSPLandroid/icu/text/DateTimePatternGenerator;->consumeShortTimePattern(Ljava/lang/String;Landroid/icu/text/DateTimePatternGenerator$PatternInfo;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->fillInMissing()V
+HSPLandroid/icu/text/DateTimePatternGenerator;->getAllowedHourFormats(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->getAllowedHourFormatsLangCountry(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getAppendFormatNumber(Landroid/icu/impl/UResource$Key;)I
+HSPLandroid/icu/text/DateTimePatternGenerator;->getAppendItemFormat(I)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getBestAppending(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;ILandroid/icu/text/DateTimePatternGenerator$DistanceInfo;Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;Ljava/util/EnumSet;I)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getBestPattern(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getBestPattern(Ljava/lang/String;Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;I)Ljava/lang/String;
+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;->getCalendarTypeToUse(Landroid/icu/util/ULocale;)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getDateTimeFormat()Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getFieldDisplayName(ILandroid/icu/text/DateTimePatternGenerator$DisplayWidth;)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->hackTimes(Landroid/icu/text/DateTimePatternGenerator$PatternInfo;Ljava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->isAvailableFormatSet(Ljava/lang/String;)Z
+HSPLandroid/icu/text/DateTimePatternGenerator;->isFrozen()Z
+HSPLandroid/icu/text/DateTimePatternGenerator;->mapSkeletonMetacharacters(Ljava/lang/String;Ljava/util/EnumSet;)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->setAppendItemFormat(ILjava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->setAvailableFormat(Ljava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->setFieldDisplayName(ILandroid/icu/text/DateTimePatternGenerator$DisplayWidth;Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormat;-><init>(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;)V
+HSPLandroid/icu/text/DecimalFormat;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/DecimalFormat;->fieldPositionHelper(Landroid/icu/number/FormattedNumber;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;
+HSPLandroid/icu/text/DecimalFormat;->getDecimalFormatSymbols()Landroid/icu/text/DecimalFormatSymbols;
+HSPLandroid/icu/text/DecimalFormat;->getMaximumFractionDigits()I
+HSPLandroid/icu/text/DecimalFormat;->getMaximumIntegerDigits()I
+HSPLandroid/icu/text/DecimalFormat;->getMinimumFractionDigits()I
+HSPLandroid/icu/text/DecimalFormat;->getMinimumIntegerDigits()I
+HSPLandroid/icu/text/DecimalFormat;->getNegativePrefix()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormat;->getNegativeSuffix()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormat;->getParser()Landroid/icu/impl/number/parse/NumberParserImpl;
+HSPLandroid/icu/text/DecimalFormat;->getPositivePrefix()Ljava/lang/String;
+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;
+HSPLandroid/icu/text/DecimalFormat;->refreshFormatter()V
+HSPLandroid/icu/text/DecimalFormat;->setDecimalSeparatorAlwaysShown(Z)V
+HSPLandroid/icu/text/DecimalFormat;->setGroupingUsed(Z)V
+HSPLandroid/icu/text/DecimalFormat;->setMaximumFractionDigits(I)V
+HSPLandroid/icu/text/DecimalFormat;->setMaximumIntegerDigits(I)V
+HSPLandroid/icu/text/DecimalFormat;->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
+HSPLandroid/icu/text/DecimalFormat;->toPattern()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols$1;->createInstance(Landroid/icu/util/ULocale;Ljava/lang/Void;)Landroid/icu/text/DecimalFormatSymbols$CacheData;
+HSPLandroid/icu/text/DecimalFormatSymbols$1;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/text/DecimalFormatSymbols$CacheData;-><init>(Landroid/icu/util/ULocale;[Ljava/lang/String;[Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols$DecFmtDataSink;-><init>([Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols$DecFmtDataSink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HSPLandroid/icu/text/DecimalFormatSymbols;-><init>(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;-><init>(Ljava/util/Locale;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->access$000()[Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->access$100(Landroid/icu/util/ULocale;)Landroid/icu/text/DecimalFormatSymbols$CacheData;
+HSPLandroid/icu/text/DecimalFormatSymbols;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getCodePointZero()I
+HSPLandroid/icu/text/DecimalFormatSymbols;->getCurrency()Landroid/icu/util/Currency;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getCurrencySymbol()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getDecimalSeparator()C
+HSPLandroid/icu/text/DecimalFormatSymbols;->getDecimalSeparatorString()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getDigit()C
+HSPLandroid/icu/text/DecimalFormatSymbols;->getExponentSeparator()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getGroupingSeparator()C
+HSPLandroid/icu/text/DecimalFormatSymbols;->getGroupingSeparatorString()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getInfinity()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getInternationalCurrencySymbol()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getLocale()Ljava/util/Locale;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getMinusSign()C
+HSPLandroid/icu/text/DecimalFormatSymbols;->getMinusSignString()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getMonetaryDecimalSeparator()C
+HSPLandroid/icu/text/DecimalFormatSymbols;->getNaN()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getPatternSeparator()C
+HSPLandroid/icu/text/DecimalFormatSymbols;->getPerMill()C
+HSPLandroid/icu/text/DecimalFormatSymbols;->getPercent()C
+HSPLandroid/icu/text/DecimalFormatSymbols;->getPercentString()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getPlusSignString()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getULocale()Landroid/icu/util/ULocale;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getZeroDigit()C
+HSPLandroid/icu/text/DecimalFormatSymbols;->initSpacingInfo(Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->initialize(Landroid/icu/util/ULocale;Landroid/icu/text/NumberingSystem;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->loadData(Landroid/icu/util/ULocale;)Landroid/icu/text/DecimalFormatSymbols$CacheData;
+HSPLandroid/icu/text/DecimalFormatSymbols;->setCurrency(Landroid/icu/util/Currency;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setCurrencySymbol(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setDecimalSeparator(C)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setDecimalSeparatorString(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setDigit(C)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setDigitStrings([Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setExponentMultiplicationSign(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setExponentSeparator(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setGroupingSeparator(C)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setGroupingSeparatorString(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setInfinity(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setInternationalCurrencySymbol(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setLocale(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setMinusSign(C)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setMinusSignString(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setMonetaryDecimalSeparator(C)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setMonetaryDecimalSeparatorString(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setMonetaryGroupingSeparator(C)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setMonetaryGroupingSeparatorString(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setNaN(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setPatternForCurrencySpacing(IZLjava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setPatternSeparator(C)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setPerMill(C)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setPerMillString(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setPercent(C)V
+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
+HSPLandroid/icu/text/DictionaryBreakEngine$DequeI;-><init>()V
+HSPLandroid/icu/text/DictionaryBreakEngine$DequeI;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/DictionaryBreakEngine$DequeI;->removeAllElements()V
+HSPLandroid/icu/text/DisplayContext;->type()Landroid/icu/text/DisplayContext$Type;
+HSPLandroid/icu/text/Edits;-><init>()V
+HSPLandroid/icu/text/Edits;->addReplace(II)V
+HSPLandroid/icu/text/Edits;->addUnchanged(I)V
+HSPLandroid/icu/text/Edits;->append(I)V
+HSPLandroid/icu/text/Edits;->hasChanges()Z
+HSPLandroid/icu/text/Edits;->lastUnit()I
+HSPLandroid/icu/text/Edits;->setLastUnit(I)V
+HSPLandroid/icu/text/IDNA;->convertIDNToASCII(Ljava/lang/String;I)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/Normalizer$ModeImpl;-><init>(Landroid/icu/text/Normalizer2;)V
+HSPLandroid/icu/text/Normalizer$ModeImpl;-><init>(Landroid/icu/text/Normalizer2;Landroid/icu/text/Normalizer$1;)V
+HSPLandroid/icu/text/Normalizer$ModeImpl;->access$300(Landroid/icu/text/Normalizer$ModeImpl;)Landroid/icu/text/Normalizer2;
+HSPLandroid/icu/text/Normalizer$NFKDMode;->getNormalizer2(I)Landroid/icu/text/Normalizer2;
+HSPLandroid/icu/text/Normalizer$NFKDModeImpl;-><clinit>()V
+HSPLandroid/icu/text/Normalizer$NFKDModeImpl;->access$600()Landroid/icu/text/Normalizer$ModeImpl;
+HSPLandroid/icu/text/Normalizer2;-><init>()V
+HSPLandroid/icu/text/Normalizer2;->getNFKDInstance()Landroid/icu/text/Normalizer2;
+HSPLandroid/icu/text/Normalizer2;->normalize(Ljava/lang/CharSequence;)Ljava/lang/String;
+HSPLandroid/icu/text/Normalizer;->normalize(Ljava/lang/String;Landroid/icu/text/Normalizer$Mode;)Ljava/lang/String;
+HSPLandroid/icu/text/Normalizer;->normalize(Ljava/lang/String;Landroid/icu/text/Normalizer$Mode;I)Ljava/lang/String;
+HSPLandroid/icu/text/NumberFormat$Field;-><clinit>()V
+HSPLandroid/icu/text/NumberFormat$Field;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/text/NumberFormat;-><init>()V
+HSPLandroid/icu/text/NumberFormat;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/NumberFormat;->getPatternForStyleAndNumberingSystem(Landroid/icu/util/ULocale;Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/icu/text/NumberingSystem$1;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/text/NumberingSystem$1;->createInstance(Ljava/lang/String;Landroid/icu/text/NumberingSystem$LocaleLookupData;)Landroid/icu/text/NumberingSystem;
+HSPLandroid/icu/text/NumberingSystem$LocaleLookupData;-><init>(Landroid/icu/util/ULocale;Ljava/lang/String;)V
+HSPLandroid/icu/text/NumberingSystem;->getDescription()Ljava/lang/String;
+HSPLandroid/icu/text/NumberingSystem;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberingSystem;
+HSPLandroid/icu/text/NumberingSystem;->getInstance(Ljava/util/Locale;)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
+HSPLandroid/icu/text/NumberingSystem;->isAlgorithmic()Z
+HSPLandroid/icu/text/NumberingSystem;->isValidDigitString(Ljava/lang/String;)Z
+HSPLandroid/icu/text/NumberingSystem;->lookupInstanceByLocale(Landroid/icu/text/NumberingSystem$LocaleLookupData;)Landroid/icu/text/NumberingSystem;
+HSPLandroid/icu/text/PluralRules$1;->isFulfilled(Landroid/icu/text/PluralRules$IFixedDecimal;)Z
+HSPLandroid/icu/text/PluralRules$AndConstraint;-><init>(Landroid/icu/text/PluralRules$Constraint;Landroid/icu/text/PluralRules$Constraint;)V
+HSPLandroid/icu/text/PluralRules$AndConstraint;->isFulfilled(Landroid/icu/text/PluralRules$IFixedDecimal;)Z
+HSPLandroid/icu/text/PluralRules$BinaryConstraint;-><init>(Landroid/icu/text/PluralRules$Constraint;Landroid/icu/text/PluralRules$Constraint;)V
+HSPLandroid/icu/text/PluralRules$FixedDecimal;-><init>(D)V
+HSPLandroid/icu/text/PluralRules$FixedDecimal;-><init>(DI)V
+HSPLandroid/icu/text/PluralRules$FixedDecimal;-><init>(DIJ)V
+HSPLandroid/icu/text/PluralRules$FixedDecimal;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/text/PluralRules$FixedDecimal;->decimals(D)I
+HSPLandroid/icu/text/PluralRules$FixedDecimal;->getFractionalDigits(DI)I
+HSPLandroid/icu/text/PluralRules$FixedDecimal;->getOperand(Ljava/lang/String;)Landroid/icu/text/PluralRules$Operand;
+HSPLandroid/icu/text/PluralRules$FixedDecimal;->getPluralOperand(Landroid/icu/text/PluralRules$Operand;)D
+HSPLandroid/icu/text/PluralRules$FixedDecimal;->getVisibleDecimalDigitCount()I
+HSPLandroid/icu/text/PluralRules$FixedDecimal;->getVisibleFractionCount(Ljava/lang/String;)I
+HSPLandroid/icu/text/PluralRules$FixedDecimal;->isInfinite()Z
+HSPLandroid/icu/text/PluralRules$FixedDecimal;->isNaN()Z
+HSPLandroid/icu/text/PluralRules$FixedDecimalRange;-><init>(Landroid/icu/text/PluralRules$FixedDecimal;Landroid/icu/text/PluralRules$FixedDecimal;)V
+HSPLandroid/icu/text/PluralRules$FixedDecimalSamples;-><init>(Landroid/icu/text/PluralRules$SampleType;Ljava/util/Set;Z)V
+HSPLandroid/icu/text/PluralRules$FixedDecimalSamples;->checkDecimal(Landroid/icu/text/PluralRules$SampleType;Landroid/icu/text/PluralRules$FixedDecimal;)V
+HSPLandroid/icu/text/PluralRules$FixedDecimalSamples;->parse(Ljava/lang/String;)Landroid/icu/text/PluralRules$FixedDecimalSamples;
+HSPLandroid/icu/text/PluralRules$Operand;->valueOf(Ljava/lang/String;)Landroid/icu/text/PluralRules$Operand;
+HSPLandroid/icu/text/PluralRules$Operand;->values()[Landroid/icu/text/PluralRules$Operand;
+HSPLandroid/icu/text/PluralRules$RangeConstraint;-><init>(IZLandroid/icu/text/PluralRules$Operand;ZDD[J)V
+HSPLandroid/icu/text/PluralRules$RangeConstraint;->isFulfilled(Landroid/icu/text/PluralRules$IFixedDecimal;)Z
+HSPLandroid/icu/text/PluralRules$Rule;->appliesTo(Landroid/icu/text/PluralRules$IFixedDecimal;)Z
+HSPLandroid/icu/text/PluralRules$Rule;->getKeyword()Ljava/lang/String;
+HSPLandroid/icu/text/PluralRules$RuleList;->addRule(Landroid/icu/text/PluralRules$Rule;)Landroid/icu/text/PluralRules$RuleList;
+HSPLandroid/icu/text/PluralRules$RuleList;->finish()Landroid/icu/text/PluralRules$RuleList;
+HSPLandroid/icu/text/PluralRules$RuleList;->getKeywords()Ljava/util/Set;
+HSPLandroid/icu/text/PluralRules$RuleList;->select(Landroid/icu/text/PluralRules$IFixedDecimal;)Ljava/lang/String;
+HSPLandroid/icu/text/PluralRules$RuleList;->selectRule(Landroid/icu/text/PluralRules$IFixedDecimal;)Landroid/icu/text/PluralRules$Rule;
+HSPLandroid/icu/text/PluralRules$SimpleTokenizer;->split(Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/icu/text/PluralRules;-><init>(Landroid/icu/text/PluralRules$RuleList;)V
+HSPLandroid/icu/text/PluralRules;->parseDescription(Ljava/lang/String;)Landroid/icu/text/PluralRules;
+HSPLandroid/icu/text/PluralRules;->select(D)Ljava/lang/String;
+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
+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
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->current()I
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->modChunkSize(I)I
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->next()V
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->populateFollowing()Z
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->reset()V
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->reset(II)V
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->seek(I)Z
+HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;)V
+HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;Landroid/icu/text/RuleBasedBreakIterator$DictionaryCache;)V
+HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;->following(I)Z
+HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;->reset()V
+HSPLandroid/icu/text/RuleBasedBreakIterator$LookAheadResults;-><init>()V
+HSPLandroid/icu/text/RuleBasedBreakIterator$LookAheadResults;->reset()V
+HSPLandroid/icu/text/RuleBasedBreakIterator;-><init>()V
+HSPLandroid/icu/text/RuleBasedBreakIterator;->access$202(Landroid/icu/text/RuleBasedBreakIterator;Z)Z
+HSPLandroid/icu/text/RuleBasedBreakIterator;->access$302(Landroid/icu/text/RuleBasedBreakIterator;I)I
+HSPLandroid/icu/text/RuleBasedBreakIterator;->access$400(Landroid/icu/text/RuleBasedBreakIterator;)I
+HSPLandroid/icu/text/RuleBasedBreakIterator;->access$402(Landroid/icu/text/RuleBasedBreakIterator;I)I
+HSPLandroid/icu/text/RuleBasedBreakIterator;->access$600(Landroid/icu/text/RuleBasedBreakIterator;)I
+HSPLandroid/icu/text/RuleBasedBreakIterator;->access$700(Landroid/icu/text/RuleBasedBreakIterator;)Landroid/icu/text/RuleBasedBreakIterator$DictionaryCache;
+HSPLandroid/icu/text/RuleBasedBreakIterator;->access$800(Landroid/icu/text/RuleBasedBreakIterator;)I
+HSPLandroid/icu/text/RuleBasedBreakIterator;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/RuleBasedBreakIterator;->first()I
+HSPLandroid/icu/text/RuleBasedBreakIterator;->handleNext()I
+HSPLandroid/icu/text/RuleBasedBreakIterator;->setText(Ljava/text/CharacterIterator;)V
+HSPLandroid/icu/text/RuleBasedCollator$CollationBuffer;-><init>(Landroid/icu/impl/coll/CollationData;)V
+HSPLandroid/icu/text/RuleBasedCollator$CollationBuffer;-><init>(Landroid/icu/impl/coll/CollationData;Landroid/icu/text/RuleBasedCollator$1;)V
+HSPLandroid/icu/text/RuleBasedCollator$FCDUTF16NFDIterator;-><init>()V
+HSPLandroid/icu/text/RuleBasedCollator$NFDIterator;-><init>()V
+HSPLandroid/icu/text/RuleBasedCollator$UTF16NFDIterator;-><init>()V
+HSPLandroid/icu/text/RuleBasedCollator;-><init>(Landroid/icu/impl/coll/CollationTailoring;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/RuleBasedCollator;->checkNotFrozen()V
+HSPLandroid/icu/text/RuleBasedCollator;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/RuleBasedCollator;->cloneAsThawed()Landroid/icu/text/RuleBasedCollator;
+HSPLandroid/icu/text/RuleBasedCollator;->compare(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/icu/text/RuleBasedCollator;->doCompare(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I
+HSPLandroid/icu/text/RuleBasedCollator;->getCollationBuffer()Landroid/icu/text/RuleBasedCollator$CollationBuffer;
+HSPLandroid/icu/text/RuleBasedCollator;->getOwnedSettings()Landroid/icu/impl/coll/CollationSettings;
+HSPLandroid/icu/text/RuleBasedCollator;->getStrength()I
+HSPLandroid/icu/text/RuleBasedCollator;->isFrozen()Z
+HSPLandroid/icu/text/RuleBasedCollator;->releaseCollationBuffer(Landroid/icu/text/RuleBasedCollator$CollationBuffer;)V
+HSPLandroid/icu/text/RuleBasedCollator;->setFastLatinOptions(Landroid/icu/impl/coll/CollationSettings;)V
+HSPLandroid/icu/text/RuleBasedCollator;->setStrength(I)V
+HSPLandroid/icu/text/SimpleDateFormat$PatternItem;-><init>(CI)V
+HSPLandroid/icu/text/SimpleDateFormat;-><init>(Ljava/lang/String;Landroid/icu/text/DateFormatSymbols;Landroid/icu/util/Calendar;Landroid/icu/text/NumberFormat;Landroid/icu/util/ULocale;ZLjava/lang/String;)V
+HSPLandroid/icu/text/SimpleDateFormat;-><init>(Ljava/lang/String;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/SimpleDateFormat;->access$000(CI)Z
+HSPLandroid/icu/text/SimpleDateFormat;->fastZeroPaddingNumber(Ljava/lang/StringBuffer;III)V
+HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Landroid/icu/text/DisplayContext;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Ljava/util/List;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Ljava/util/List;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/SimpleDateFormat;->getLocale()Landroid/icu/util/ULocale;
+HSPLandroid/icu/text/SimpleDateFormat;->getNumberFormat(C)Landroid/icu/text/NumberFormat;
+HSPLandroid/icu/text/SimpleDateFormat;->getPatternItems()[Ljava/lang/Object;
+HSPLandroid/icu/text/SimpleDateFormat;->initLocalZeroPaddingNumberFormat()V
+HSPLandroid/icu/text/SimpleDateFormat;->initialize()V
+HSPLandroid/icu/text/SimpleDateFormat;->isNumeric(CI)Z
+HSPLandroid/icu/text/SimpleDateFormat;->isSyntaxChar(C)Z
+HSPLandroid/icu/text/SimpleDateFormat;->parsePattern()V
+HSPLandroid/icu/text/SimpleDateFormat;->subFormat(Ljava/lang/StringBuffer;CIIILandroid/icu/text/DisplayContext;Ljava/text/FieldPosition;Landroid/icu/util/Calendar;)V
+HSPLandroid/icu/text/SimpleDateFormat;->toPattern()Ljava/lang/String;
+HSPLandroid/icu/text/SimpleDateFormat;->zeroPaddingNumber(Landroid/icu/text/NumberFormat;Ljava/lang/StringBuffer;III)V
+HSPLandroid/icu/text/StringPrep;-><clinit>()V
+HSPLandroid/icu/text/StringPrep;-><init>(Ljava/nio/ByteBuffer;)V
+HSPLandroid/icu/text/StringPrep;->getInstance(I)Landroid/icu/text/StringPrep;
+HSPLandroid/icu/text/StringPrep;->getVersionInfo(I)Landroid/icu/util/VersionInfo;
+HSPLandroid/icu/text/StringPrep;->getVersionInfo([B)Landroid/icu/util/VersionInfo;
+HSPLandroid/icu/text/TimeZoneNames$Cache;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/text/TimeZoneNames$Cache;->createInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/TimeZoneNames;
+HSPLandroid/icu/text/TimeZoneNames;-><init>()V
+HSPLandroid/icu/text/TimeZoneNames;->access$100()Landroid/icu/text/TimeZoneNames$Factory;
+HSPLandroid/icu/text/TimeZoneNames;->getDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;J)Ljava/lang/String;
+HSPLandroid/icu/text/UCharacterIterator;-><init>()V
+HSPLandroid/icu/text/UCharacterIterator;->getInstance(Ljava/lang/String;)Landroid/icu/text/UCharacterIterator;
+HSPLandroid/icu/text/UCharacterIterator;->getText()Ljava/lang/String;
+HSPLandroid/icu/text/UCharacterIterator;->getText([C)I
+HSPLandroid/icu/text/UCharacterIterator;->setToStart()V
+HSPLandroid/icu/text/UFormat;-><init>()V
+HSPLandroid/icu/text/UFormat;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale;
+HSPLandroid/icu/text/UFormat;->setLocale(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/UTF16;->_charAt(Ljava/lang/String;IC)I
+HSPLandroid/icu/text/UTF16;->append(Ljava/lang/StringBuffer;I)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/UTF16;->charAt(Ljava/lang/CharSequence;I)I
+HSPLandroid/icu/text/UTF16;->charAt(Ljava/lang/String;I)I
+HSPLandroid/icu/text/UTF16;->charAt([CIII)I
+HSPLandroid/icu/text/UTF16;->getCharCount(I)I
+HSPLandroid/icu/text/UTF16;->isLeadSurrogate(C)Z
+HSPLandroid/icu/text/UTF16;->isSurrogate(C)Z
+HSPLandroid/icu/text/UnicodeFilter;-><init>()V
+HSPLandroid/icu/text/UnicodeSet$GeneralCategoryMaskFilter;-><init>(I)V
+HSPLandroid/icu/text/UnicodeSet$GeneralCategoryMaskFilter;->contains(I)Z
+HSPLandroid/icu/text/UnicodeSet$IntPropertyFilter;-><init>(II)V
+HSPLandroid/icu/text/UnicodeSet$IntPropertyFilter;->contains(I)Z
+HSPLandroid/icu/text/UnicodeSet$SpanCondition;-><clinit>()V
+HSPLandroid/icu/text/UnicodeSet$SpanCondition;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/text/UnicodeSet;-><init>()V
+HSPLandroid/icu/text/UnicodeSet;-><init>(II)V
+HSPLandroid/icu/text/UnicodeSet;-><init>(Landroid/icu/text/UnicodeSet;)V
+HSPLandroid/icu/text/UnicodeSet;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/text/UnicodeSet;->_appendToPat(Ljava/lang/Appendable;IZ)Ljava/lang/Appendable;
+HSPLandroid/icu/text/UnicodeSet;->_appendToPat(Ljava/lang/Appendable;Ljava/lang/String;Z)Ljava/lang/Appendable;
+HSPLandroid/icu/text/UnicodeSet;->add(I)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->add(II)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->add(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->add([III)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->addAll(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->addString(Ljava/lang/CharSequence;)V
+HSPLandroid/icu/text/UnicodeSet;->add_unchecked(I)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->add_unchecked(II)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->append(Ljava/lang/Appendable;Ljava/lang/CharSequence;)V
+HSPLandroid/icu/text/UnicodeSet;->appendCodePoint(Ljava/lang/Appendable;I)V
+HSPLandroid/icu/text/UnicodeSet;->appendNewPattern(Ljava/lang/Appendable;ZZ)Ljava/lang/Appendable;
+HSPLandroid/icu/text/UnicodeSet;->applyFilter(Landroid/icu/text/UnicodeSet$Filter;Landroid/icu/text/UnicodeSet;)V
+HSPLandroid/icu/text/UnicodeSet;->applyIntPropertyValue(II)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->applyPattern(Landroid/icu/impl/RuleCharacterIterator;Landroid/icu/text/SymbolTable;Ljava/lang/Appendable;II)V
+HSPLandroid/icu/text/UnicodeSet;->applyPattern(Ljava/lang/String;Ljava/text/ParsePosition;Landroid/icu/text/SymbolTable;I)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->applyPropertyAlias(Ljava/lang/String;Ljava/lang/String;Landroid/icu/text/SymbolTable;)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->applyPropertyPattern(Landroid/icu/impl/RuleCharacterIterator;Ljava/lang/Appendable;Landroid/icu/text/SymbolTable;)V
+HSPLandroid/icu/text/UnicodeSet;->applyPropertyPattern(Ljava/lang/String;Ljava/text/ParsePosition;Landroid/icu/text/SymbolTable;)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->checkFrozen()V
+HSPLandroid/icu/text/UnicodeSet;->clear()Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/UnicodeSet;->cloneAsThawed()Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->compact()Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->complement()Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->contains(I)Z
+HSPLandroid/icu/text/UnicodeSet;->contains(Ljava/lang/CharSequence;)Z
+HSPLandroid/icu/text/UnicodeSet;->containsAll(Ljava/lang/String;)Z
+HSPLandroid/icu/text/UnicodeSet;->ensureBufferCapacity(I)V
+HSPLandroid/icu/text/UnicodeSet;->ensureCapacity(I)V
+HSPLandroid/icu/text/UnicodeSet;->findCodePoint(I)I
+HSPLandroid/icu/text/UnicodeSet;->freeze()Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->getRangeCount()I
+HSPLandroid/icu/text/UnicodeSet;->getRangeEnd(I)I
+HSPLandroid/icu/text/UnicodeSet;->getRangeStart(I)I
+HSPLandroid/icu/text/UnicodeSet;->getSingleCP(Ljava/lang/CharSequence;)I
+HSPLandroid/icu/text/UnicodeSet;->hasStrings()Z
+HSPLandroid/icu/text/UnicodeSet;->isFrozen()Z
+HSPLandroid/icu/text/UnicodeSet;->nextCapacity(I)I
+HSPLandroid/icu/text/UnicodeSet;->range(II)[I
+HSPLandroid/icu/text/UnicodeSet;->resemblesPropertyPattern(Landroid/icu/impl/RuleCharacterIterator;I)Z
+HSPLandroid/icu/text/UnicodeSet;->retain([III)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->retainAll(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->set(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->span(Ljava/lang/CharSequence;ILandroid/icu/text/UnicodeSet$SpanCondition;)I
+HSPLandroid/icu/text/UnicodeSet;->span(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSet$SpanCondition;)I
+HSPLandroid/icu/text/UnicodeSet;->spanBack(Ljava/lang/CharSequence;ILandroid/icu/text/UnicodeSet$SpanCondition;)I
+HSPLandroid/icu/text/UnicodeSet;->spanCodePointsAndCount(Ljava/lang/CharSequence;ILandroid/icu/text/UnicodeSet$SpanCondition;Landroid/icu/util/OutputInt;)I
+HSPLandroid/icu/util/AnnualTimeZoneRule;-><init>(Ljava/lang/String;IILandroid/icu/util/DateTimeRule;II)V
+HSPLandroid/icu/util/AnnualTimeZoneRule;->getEndYear()I
+HSPLandroid/icu/util/AnnualTimeZoneRule;->getFirstStart(II)Ljava/util/Date;
+HSPLandroid/icu/util/AnnualTimeZoneRule;->getNextStart(JIIZ)Ljava/util/Date;
+HSPLandroid/icu/util/AnnualTimeZoneRule;->getRule()Landroid/icu/util/DateTimeRule;
+HSPLandroid/icu/util/AnnualTimeZoneRule;->getStartInYear(III)Ljava/util/Date;
+HSPLandroid/icu/util/BasicTimeZone;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/util/BytesTrie$Result;-><clinit>()V
+HSPLandroid/icu/util/BytesTrie$Result;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/util/BytesTrie$Result;->hasNext()Z
+HSPLandroid/icu/util/BytesTrie$Result;->hasValue()Z
+HSPLandroid/icu/util/BytesTrie;-><clinit>()V
+HSPLandroid/icu/util/BytesTrie;-><init>([BI)V
+HSPLandroid/icu/util/BytesTrie;->branchNext(III)Landroid/icu/util/BytesTrie$Result;
+HSPLandroid/icu/util/BytesTrie;->getValue()I
+HSPLandroid/icu/util/BytesTrie;->jumpByDelta([BI)I
+HSPLandroid/icu/util/BytesTrie;->next(I)Landroid/icu/util/BytesTrie$Result;
+HSPLandroid/icu/util/BytesTrie;->nextImpl(II)Landroid/icu/util/BytesTrie$Result;
+HSPLandroid/icu/util/BytesTrie;->readValue([BII)I
+HSPLandroid/icu/util/BytesTrie;->skipDelta([BI)I
+HSPLandroid/icu/util/BytesTrie;->skipValue(II)I
+HSPLandroid/icu/util/BytesTrie;->skipValue([BI)I
+HSPLandroid/icu/util/BytesTrie;->stop()V
+HSPLandroid/icu/util/Calendar$FormatConfiguration;-><init>()V
+HSPLandroid/icu/util/Calendar$FormatConfiguration;-><init>(Landroid/icu/util/Calendar$1;)V
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->access$102(Landroid/icu/util/Calendar$FormatConfiguration;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->access$202(Landroid/icu/util/Calendar$FormatConfiguration;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->access$302(Landroid/icu/util/Calendar$FormatConfiguration;Landroid/icu/text/DateFormatSymbols;)Landroid/icu/text/DateFormatSymbols;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->access$402(Landroid/icu/util/Calendar$FormatConfiguration;Landroid/icu/util/ULocale;)Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->access$502(Landroid/icu/util/Calendar$FormatConfiguration;Landroid/icu/util/Calendar;)Landroid/icu/util/Calendar;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->getCalendar()Landroid/icu/util/Calendar;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->getDateFormatSymbols()Landroid/icu/text/DateFormatSymbols;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->getLocale()Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->getOverrideString()Ljava/lang/String;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->getPatternString()Ljava/lang/String;
+HSPLandroid/icu/util/Calendar$PatternData;-><init>([Ljava/lang/String;[Ljava/lang/String;)V
+HSPLandroid/icu/util/Calendar$PatternData;->access$600(Landroid/icu/util/Calendar;Landroid/icu/util/ULocale;)Landroid/icu/util/Calendar$PatternData;
+HSPLandroid/icu/util/Calendar$PatternData;->access$800(Landroid/icu/util/Calendar$PatternData;)[Ljava/lang/String;
+HSPLandroid/icu/util/Calendar$PatternData;->access$900(Landroid/icu/util/Calendar$PatternData;)[Ljava/lang/String;
+HSPLandroid/icu/util/Calendar$PatternData;->make(Landroid/icu/util/Calendar;Landroid/icu/util/ULocale;)Landroid/icu/util/Calendar$PatternData;
+HSPLandroid/icu/util/Calendar$PatternData;->make(Landroid/icu/util/ULocale;Ljava/lang/String;)Landroid/icu/util/Calendar$PatternData;
+HSPLandroid/icu/util/Calendar;-><init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/util/Calendar;->access$1100()Landroid/icu/impl/ICUCache;
+HSPLandroid/icu/util/Calendar;->access$1200(Landroid/icu/util/ULocale;Ljava/lang/String;)Landroid/icu/util/Calendar$PatternData;
+HSPLandroid/icu/util/Calendar;->clone()Ljava/lang/Object;
+HSPLandroid/icu/util/Calendar;->complete()V
+HSPLandroid/icu/util/Calendar;->computeFields()V
+HSPLandroid/icu/util/Calendar;->computeGregorianAndDOWFields(I)V
+HSPLandroid/icu/util/Calendar;->computeGregorianFields(I)V
+HSPLandroid/icu/util/Calendar;->computeWeekFields()V
+HSPLandroid/icu/util/Calendar;->createInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/Calendar;
+HSPLandroid/icu/util/Calendar;->floorDivide(II[I)I
+HSPLandroid/icu/util/Calendar;->floorDivide(JI[I)I
+HSPLandroid/icu/util/Calendar;->floorDivide(JJ)J
+HSPLandroid/icu/util/Calendar;->formatHelper(Landroid/icu/util/Calendar;Landroid/icu/util/ULocale;II)Landroid/icu/text/DateFormat;
+HSPLandroid/icu/util/Calendar;->get(I)I
+HSPLandroid/icu/util/Calendar;->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;->getFirstDayOfWeek()I
+HSPLandroid/icu/util/Calendar;->getGregorianDayOfMonth()I
+HSPLandroid/icu/util/Calendar;->getGregorianDayOfYear()I
+HSPLandroid/icu/util/Calendar;->getGregorianMonth()I
+HSPLandroid/icu/util/Calendar;->getGregorianYear()I
+HSPLandroid/icu/util/Calendar;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/Calendar;
+HSPLandroid/icu/util/Calendar;->getInstanceInternal(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)Landroid/icu/util/Calendar;
+HSPLandroid/icu/util/Calendar;->getKeywordValuesForLocale(Ljava/lang/String;Landroid/icu/util/ULocale;Z)[Ljava/lang/String;
+HSPLandroid/icu/util/Calendar;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/Calendar;->getMinimalDaysInFirstWeek()I
+HSPLandroid/icu/util/Calendar;->getPatternData(Landroid/icu/util/ULocale;Ljava/lang/String;)Landroid/icu/util/Calendar$PatternData;
+HSPLandroid/icu/util/Calendar;->getRegionForCalendar(Landroid/icu/util/ULocale;)Ljava/lang/String;
+HSPLandroid/icu/util/Calendar;->getRepeatedWallTimeOption()I
+HSPLandroid/icu/util/Calendar;->getSkippedWallTimeOption()I
+HSPLandroid/icu/util/Calendar;->getTimeInMillis()J
+HSPLandroid/icu/util/Calendar;->getTimeZone()Landroid/icu/util/TimeZone;
+HSPLandroid/icu/util/Calendar;->handleCreateFields()[I
+HSPLandroid/icu/util/Calendar;->handleGetDateFormat(Ljava/lang/String;Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
+HSPLandroid/icu/util/Calendar;->initInternal()V
+HSPLandroid/icu/util/Calendar;->internalSet(II)V
+HSPLandroid/icu/util/Calendar;->isEquivalentTo(Landroid/icu/util/Calendar;)Z
+HSPLandroid/icu/util/Calendar;->isLenient()Z
+HSPLandroid/icu/util/Calendar;->julianDayToDayOfWeek(I)I
+HSPLandroid/icu/util/Calendar;->setCalendarLocale(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/util/Calendar;->setFirstDayOfWeek(I)V
+HSPLandroid/icu/util/Calendar;->setLocale(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/util/Calendar;->setMinimalDaysInFirstWeek(I)V
+HSPLandroid/icu/util/Calendar;->setTimeInMillis(J)V
+HSPLandroid/icu/util/Calendar;->setTimeZone(Landroid/icu/util/TimeZone;)V
+HSPLandroid/icu/util/Calendar;->setWeekData(Landroid/icu/util/Calendar$WeekData;)Landroid/icu/util/Calendar;
+HSPLandroid/icu/util/Calendar;->setWeekData(Ljava/lang/String;)V
+HSPLandroid/icu/util/Calendar;->weekNumber(II)I
+HSPLandroid/icu/util/Calendar;->weekNumber(III)I
+HSPLandroid/icu/util/CodePointMap;-><clinit>()V
+HSPLandroid/icu/util/CodePointMap;-><init>()V
+HSPLandroid/icu/util/CodePointTrie$1;-><clinit>()V
+HSPLandroid/icu/util/CodePointTrie$Data16;-><init>([C)V
+HSPLandroid/icu/util/CodePointTrie$Data16;->getDataLength()I
+HSPLandroid/icu/util/CodePointTrie$Data16;->getFromIndex(I)I
+HSPLandroid/icu/util/CodePointTrie$Data;-><init>()V
+HSPLandroid/icu/util/CodePointTrie$Data;-><init>(Landroid/icu/util/CodePointTrie$1;)V
+HSPLandroid/icu/util/CodePointTrie$Fast16;-><clinit>()V
+HSPLandroid/icu/util/CodePointTrie$Fast16;-><init>([C[CIII)V
+HSPLandroid/icu/util/CodePointTrie$Fast16;->bmpGet(I)I
+HSPLandroid/icu/util/CodePointTrie$Fast16;->fromBinary(Ljava/nio/ByteBuffer;)Landroid/icu/util/CodePointTrie$Fast16;
+HSPLandroid/icu/util/CodePointTrie$Fast;-><init>([CLandroid/icu/util/CodePointTrie$Data;III)V
+HSPLandroid/icu/util/CodePointTrie$Fast;-><init>([CLandroid/icu/util/CodePointTrie$Data;IIILandroid/icu/util/CodePointTrie$1;)V
+HSPLandroid/icu/util/CodePointTrie$Type;-><clinit>()V
+HSPLandroid/icu/util/CodePointTrie$Type;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/util/CodePointTrie$ValueWidth;-><clinit>()V
+HSPLandroid/icu/util/CodePointTrie$ValueWidth;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/util/CodePointTrie$ValueWidth;->values()[Landroid/icu/util/CodePointTrie$ValueWidth;
+HSPLandroid/icu/util/CodePointTrie;-><clinit>()V
+HSPLandroid/icu/util/CodePointTrie;-><init>([CLandroid/icu/util/CodePointTrie$Data;III)V
+HSPLandroid/icu/util/CodePointTrie;-><init>([CLandroid/icu/util/CodePointTrie$Data;IIILandroid/icu/util/CodePointTrie$1;)V
+HSPLandroid/icu/util/CodePointTrie;->fastIndex(I)I
+HSPLandroid/icu/util/CodePointTrie;->fromBinary(Landroid/icu/util/CodePointTrie$Type;Landroid/icu/util/CodePointTrie$ValueWidth;Ljava/nio/ByteBuffer;)Landroid/icu/util/CodePointTrie;
+HSPLandroid/icu/util/Currency;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/util/Currency;->createCurrency(Landroid/icu/util/ULocale;)Landroid/icu/util/Currency;
+HSPLandroid/icu/util/Currency;->getCurrencyCode()Ljava/lang/String;
+HSPLandroid/icu/util/Currency;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/Currency;
+HSPLandroid/icu/util/Currency;->getInstance(Ljava/lang/String;)Landroid/icu/util/Currency;
+HSPLandroid/icu/util/Currency;->getInstance(Ljava/util/Locale;)Landroid/icu/util/Currency;
+HSPLandroid/icu/util/Currency;->getName(Landroid/icu/util/ULocale;I[Z)Ljava/lang/String;
+HSPLandroid/icu/util/Currency;->getSymbol(Landroid/icu/util/ULocale;)Ljava/lang/String;
+HSPLandroid/icu/util/Currency;->getSymbol(Ljava/util/Locale;)Ljava/lang/String;
+HSPLandroid/icu/util/Currency;->isAlpha3Code(Ljava/lang/String;)Z
+HSPLandroid/icu/util/DateTimeRule;-><init>(IIIZII)V
+HSPLandroid/icu/util/DateTimeRule;->getDateRuleType()I
+HSPLandroid/icu/util/DateTimeRule;->getRuleDayOfMonth()I
+HSPLandroid/icu/util/DateTimeRule;->getRuleDayOfWeek()I
+HSPLandroid/icu/util/DateTimeRule;->getRuleMillisInDay()I
+HSPLandroid/icu/util/DateTimeRule;->getRuleMonth()I
+HSPLandroid/icu/util/DateTimeRule;->getTimeRuleType()I
+HSPLandroid/icu/util/GregorianCalendar;-><init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/util/GregorianCalendar;->getType()Ljava/lang/String;
+HSPLandroid/icu/util/GregorianCalendar;->handleComputeFields(I)V
+HSPLandroid/icu/util/GregorianCalendar;->handleGetYearLength(I)I
+HSPLandroid/icu/util/GregorianCalendar;->isEquivalentTo(Landroid/icu/util/Calendar;)Z
+HSPLandroid/icu/util/GregorianCalendar;->isLeapYear(I)Z
+HSPLandroid/icu/util/InitialTimeZoneRule;-><init>(Ljava/lang/String;II)V
+HSPLandroid/icu/util/MeasureUnit$2;->create(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/MeasureUnit;
+HSPLandroid/icu/util/MeasureUnit;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/icu/util/MeasureUnit;->addUnit(Ljava/lang/String;Ljava/lang/String;Landroid/icu/util/MeasureUnit$Factory;)Landroid/icu/util/MeasureUnit;
+HSPLandroid/icu/util/MeasureUnit;->equals(Ljava/lang/Object;)Z
+HSPLandroid/icu/util/MeasureUnit;->internalGetInstance(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/MeasureUnit;
+HSPLandroid/icu/util/Output;-><init>(Ljava/lang/Object;)V
+HSPLandroid/icu/util/STZInfo;-><init>()V
+HSPLandroid/icu/util/SimpleTimeZone;-><clinit>()V
+HSPLandroid/icu/util/SimpleTimeZone;-><init>(ILjava/lang/String;IIIIIIIIIII)V
+HSPLandroid/icu/util/SimpleTimeZone;->clone()Ljava/lang/Object;
+HSPLandroid/icu/util/SimpleTimeZone;->cloneAsThawed()Landroid/icu/util/TimeZone;
+HSPLandroid/icu/util/SimpleTimeZone;->compareToRule(IIIIIIIIIIII)I
+HSPLandroid/icu/util/SimpleTimeZone;->construct(IIIIIIIIIIII)V
+HSPLandroid/icu/util/SimpleTimeZone;->decodeEndRule()V
+HSPLandroid/icu/util/SimpleTimeZone;->decodeRules()V
+HSPLandroid/icu/util/SimpleTimeZone;->decodeStartRule()V
+HSPLandroid/icu/util/SimpleTimeZone;->getDSTSavings()I
+HSPLandroid/icu/util/SimpleTimeZone;->getNextTransition(JZ)Landroid/icu/util/TimeZoneTransition;
+HSPLandroid/icu/util/SimpleTimeZone;->getOffset(IIIIII)I
+HSPLandroid/icu/util/SimpleTimeZone;->getOffset(IIIIIII)I
+HSPLandroid/icu/util/SimpleTimeZone;->getOffset(IIIIIIII)I
+HSPLandroid/icu/util/SimpleTimeZone;->getRawOffset()I
+HSPLandroid/icu/util/SimpleTimeZone;->getSTZInfo()Landroid/icu/util/STZInfo;
+HSPLandroid/icu/util/SimpleTimeZone;->getTimeZoneRules()[Landroid/icu/util/TimeZoneRule;
+HSPLandroid/icu/util/SimpleTimeZone;->initTransitionRules()V
+HSPLandroid/icu/util/SimpleTimeZone;->isFrozen()Z
+HSPLandroid/icu/util/SimpleTimeZone;->setStartYear(I)V
+HSPLandroid/icu/util/SimpleTimeZone;->useDaylightTime()Z
+HSPLandroid/icu/util/TimeArrayTimeZoneRule;-><init>(Ljava/lang/String;II[JI)V
+HSPLandroid/icu/util/TimeZone;-><init>()V
+HSPLandroid/icu/util/TimeZone;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/util/TimeZone;->cloneAsThawed()Landroid/icu/util/TimeZone;
+HSPLandroid/icu/util/TimeZone;->equals(Ljava/lang/Object;)Z
+HSPLandroid/icu/util/TimeZone;->getCanonicalID(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/TimeZone;->getCanonicalID(Ljava/lang/String;[Z)Ljava/lang/String;
+HSPLandroid/icu/util/TimeZone;->getDefault()Landroid/icu/util/TimeZone;
+HSPLandroid/icu/util/TimeZone;->getFrozenICUTimeZone(Ljava/lang/String;Z)Landroid/icu/util/BasicTimeZone;
+HSPLandroid/icu/util/TimeZone;->getFrozenTimeZone(Ljava/lang/String;)Landroid/icu/util/TimeZone;
+HSPLandroid/icu/util/TimeZone;->getID()Ljava/lang/String;
+HSPLandroid/icu/util/TimeZone;->getOffset(JZ[I)V
+HSPLandroid/icu/util/TimeZone;->getTimeZone(Ljava/lang/String;IZ)Landroid/icu/util/TimeZone;
+HSPLandroid/icu/util/TimeZone;->hashCode()I
+HSPLandroid/icu/util/TimeZone;->setICUDefault(Landroid/icu/util/TimeZone;)V
+HSPLandroid/icu/util/TimeZone;->setID(Ljava/lang/String;)V
+HSPLandroid/icu/util/TimeZoneRule;-><init>(Ljava/lang/String;II)V
+HSPLandroid/icu/util/TimeZoneRule;->getDSTSavings()I
+HSPLandroid/icu/util/TimeZoneRule;->getName()Ljava/lang/String;
+HSPLandroid/icu/util/TimeZoneRule;->getRawOffset()I
+HSPLandroid/icu/util/TimeZoneTransition;-><init>(JLandroid/icu/util/TimeZoneRule;Landroid/icu/util/TimeZoneRule;)V
+HSPLandroid/icu/util/TimeZoneTransition;->getFrom()Landroid/icu/util/TimeZoneRule;
+HSPLandroid/icu/util/TimeZoneTransition;->getTime()J
+HSPLandroid/icu/util/TimeZoneTransition;->getTo()Landroid/icu/util/TimeZoneRule;
+HSPLandroid/icu/util/ULocale$1;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/util/ULocale$1;->createInstance(Ljava/lang/String;Ljava/lang/Void;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale$2;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/util/ULocale$2;->createInstance(Ljava/util/Locale;Ljava/lang/Void;)Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/ULocale$JDKLocaleHelper;->toULocale(Ljava/util/Locale;)Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/ULocale;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/util/ULocale;-><init>(Ljava/lang/String;Ljava/util/Locale;)V
+HSPLandroid/icu/util/ULocale;-><init>(Ljava/lang/String;Ljava/util/Locale;Landroid/icu/util/ULocale$1;)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;
+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;->getBaseName()Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getBaseName(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getCountry()Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getDefault()Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/ULocale;->getKeywordValue(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getKeywordValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getKeywords()Ljava/util/Iterator;
+HSPLandroid/icu/util/ULocale;->getKeywords(Ljava/lang/String;)Ljava/util/Iterator;
+HSPLandroid/icu/util/ULocale;->getLanguage()Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getName()Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getName(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getRegionForSupplementalData(Landroid/icu/util/ULocale;Z)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getScript()Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getShortestSubtagLength(Ljava/lang/String;)I
+HSPLandroid/icu/util/ULocale;->getVariant()Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->hashCode()I
+HSPLandroid/icu/util/ULocale;->isEmptyString(Ljava/lang/String;)Z
+HSPLandroid/icu/util/ULocale;->isRightToLeft()Z
+HSPLandroid/icu/util/ULocale;->lookupLikelySubtags(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->parseTagString(Ljava/lang/String;[Ljava/lang/String;)I
+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;
+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;->getBundleInstance(Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/util/UResourceBundle;->getIterator()Landroid/icu/util/UResourceBundleIterator;
+HSPLandroid/icu/util/UResourceBundle;->getRootType(Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/util/UResourceBundle$RootType;
+HSPLandroid/icu/util/UResourceBundle;->handleGetObject(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/icu/util/UResourceBundle;->handleGetObjectImpl(Ljava/lang/String;Landroid/icu/util/UResourceBundle;)Ljava/lang/Object;
+HSPLandroid/icu/util/UResourceBundle;->instantiateBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/util/UResourceBundle;->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
+HSPLandroid/icu/util/UResourceBundleIterator;->next()Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/util/VersionInfo;->compareTo(Landroid/icu/util/VersionInfo;)I
+HSPLandroid/icu/util/VersionInfo;->getInstance(IIII)Landroid/icu/util/VersionInfo;
+HSPLandroid/icu/util/VersionInfo;->getInt(IIII)I
 HSPLandroid/location/AbstractListenerManager;-><init>()V
-HSPLandroid/location/AbstractListenerManager;->addInternal(Ljava/lang/Object;Landroid/location/AbstractListenerManager$Registration;)Z
-HSPLandroid/location/AbstractListenerManager;->addInternal(Ljava/lang/Object;Landroid/os/Handler;)Z
-HSPLandroid/location/AbstractListenerManager;->addInternal(Ljava/lang/Object;Ljava/util/concurrent/Executor;)Z
-HSPLandroid/location/AbstractListenerManager;->addListener(Ljava/lang/Object;Landroid/os/Handler;)Z
-HPLandroid/location/AbstractListenerManager;->addListener(Ljava/lang/Object;Ljava/util/concurrent/Executor;)Z
-HPLandroid/location/AbstractListenerManager;->convertKey(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/location/AbstractListenerManager;->execute(Ljava/util/function/Consumer;)V
-HSPLandroid/location/AbstractListenerManager;->removeListener(Ljava/lang/Object;)V
-HSPLandroid/location/Country$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/Country;
-HSPLandroid/location/Country$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/location/Country;-><init>(Landroid/location/Country;)V
-PLandroid/location/Country;-><init>(Ljava/lang/String;I)V
-HSPLandroid/location/Country;-><init>(Ljava/lang/String;IJ)V
-HSPLandroid/location/Country;-><init>(Ljava/lang/String;IJLandroid/location/Country$1;)V
-PLandroid/location/Country;->equals(Ljava/lang/Object;)Z
-PLandroid/location/Country;->getCountryIso()Ljava/lang/String;
-PLandroid/location/Country;->getSource()I
-PLandroid/location/Country;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/location/CountryDetector$ListenerTransport;-><init>(Landroid/location/CountryListener;Landroid/os/Looper;)V
-HSPLandroid/location/CountryDetector;-><init>(Landroid/location/ICountryDetector;)V
-HSPLandroid/location/CountryDetector;->addCountryListener(Landroid/location/CountryListener;Landroid/os/Looper;)V
-HSPLandroid/location/CountryDetector;->detectCountry()Landroid/location/Country;
-PLandroid/location/FusedBatchOptions$SourceTechnologies;-><clinit>()V
-HPLandroid/location/GnssClock$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/GnssClock;
-HPLandroid/location/GnssClock$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/location/GnssClock;-><init>()V
-HPLandroid/location/GnssClock;->access$002(Landroid/location/GnssClock;I)I
-HPLandroid/location/GnssClock;->access$1002(Landroid/location/GnssClock;J)J
-HPLandroid/location/GnssClock;->access$102(Landroid/location/GnssClock;I)I
-HPLandroid/location/GnssClock;->access$1102(Landroid/location/GnssClock;D)D
-HPLandroid/location/GnssClock;->access$202(Landroid/location/GnssClock;J)J
-HPLandroid/location/GnssClock;->access$302(Landroid/location/GnssClock;D)D
-HPLandroid/location/GnssClock;->access$402(Landroid/location/GnssClock;J)J
-HPLandroid/location/GnssClock;->access$502(Landroid/location/GnssClock;D)D
-HPLandroid/location/GnssClock;->access$602(Landroid/location/GnssClock;D)D
-HPLandroid/location/GnssClock;->access$702(Landroid/location/GnssClock;D)D
-HPLandroid/location/GnssClock;->access$802(Landroid/location/GnssClock;D)D
-HPLandroid/location/GnssClock;->access$902(Landroid/location/GnssClock;I)I
-HPLandroid/location/GnssClock;->getBiasNanos()D
-HPLandroid/location/GnssClock;->getBiasUncertaintyNanos()D
-HPLandroid/location/GnssClock;->getDriftNanosPerSecond()D
-HPLandroid/location/GnssClock;->getDriftUncertaintyNanosPerSecond()D
-HPLandroid/location/GnssClock;->getFullBiasNanos()J
-HPLandroid/location/GnssClock;->getHardwareClockDiscontinuityCount()I
-HPLandroid/location/GnssClock;->getTimeNanos()J
-HPLandroid/location/GnssClock;->hasBiasNanos()Z
-HPLandroid/location/GnssClock;->hasBiasUncertaintyNanos()Z
-HPLandroid/location/GnssClock;->hasDriftNanosPerSecond()Z
-HPLandroid/location/GnssClock;->hasDriftUncertaintyNanosPerSecond()Z
-HPLandroid/location/GnssClock;->hasFullBiasNanos()Z
-HPLandroid/location/GnssClock;->hasLeapSecond()Z
-HPLandroid/location/GnssClock;->hasTimeUncertaintyNanos()Z
-PLandroid/location/GnssClock;->initialize()V
-HPLandroid/location/GnssClock;->isFlagSet(I)Z
-PLandroid/location/GnssClock;->resetBiasNanos()V
-PLandroid/location/GnssClock;->resetBiasUncertaintyNanos()V
-PLandroid/location/GnssClock;->resetDriftNanosPerSecond()V
-PLandroid/location/GnssClock;->resetDriftUncertaintyNanosPerSecond()V
-PLandroid/location/GnssClock;->resetElapsedRealtimeNanos()V
-PLandroid/location/GnssClock;->resetElapsedRealtimeUncertaintyNanos()V
-PLandroid/location/GnssClock;->resetFlag(I)V
-PLandroid/location/GnssClock;->resetFullBiasNanos()V
-PLandroid/location/GnssClock;->resetLeapSecond()V
-PLandroid/location/GnssClock;->resetTimeUncertaintyNanos()V
-HPLandroid/location/GnssClock;->setBiasNanos(D)V
-HPLandroid/location/GnssClock;->setBiasUncertaintyNanos(D)V
-PLandroid/location/GnssClock;->setDriftNanosPerSecond(D)V
-PLandroid/location/GnssClock;->setDriftUncertaintyNanosPerSecond(D)V
-PLandroid/location/GnssClock;->setFlag(I)V
-HPLandroid/location/GnssClock;->setFullBiasNanos(J)V
-PLandroid/location/GnssClock;->setHardwareClockDiscontinuityCount(I)V
-PLandroid/location/GnssClock;->setTimeNanos(J)V
-PLandroid/location/GnssClock;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/location/GnssMeasurement$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/GnssMeasurement;
-HPLandroid/location/GnssMeasurement$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/location/GnssMeasurement;-><init>()V
-HPLandroid/location/GnssMeasurement;->access$002(Landroid/location/GnssMeasurement;I)I
-HPLandroid/location/GnssMeasurement;->access$1002(Landroid/location/GnssMeasurement;I)I
-HPLandroid/location/GnssMeasurement;->access$102(Landroid/location/GnssMeasurement;I)I
-HPLandroid/location/GnssMeasurement;->access$1102(Landroid/location/GnssMeasurement;D)D
-HPLandroid/location/GnssMeasurement;->access$1202(Landroid/location/GnssMeasurement;D)D
-HPLandroid/location/GnssMeasurement;->access$1302(Landroid/location/GnssMeasurement;F)F
-HPLandroid/location/GnssMeasurement;->access$1402(Landroid/location/GnssMeasurement;J)J
-HPLandroid/location/GnssMeasurement;->access$1502(Landroid/location/GnssMeasurement;D)D
-HPLandroid/location/GnssMeasurement;->access$1602(Landroid/location/GnssMeasurement;D)D
-HPLandroid/location/GnssMeasurement;->access$1702(Landroid/location/GnssMeasurement;I)I
-HPLandroid/location/GnssMeasurement;->access$1802(Landroid/location/GnssMeasurement;D)D
-HPLandroid/location/GnssMeasurement;->access$1902(Landroid/location/GnssMeasurement;D)D
-HPLandroid/location/GnssMeasurement;->access$2002(Landroid/location/GnssMeasurement;Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/location/GnssMeasurement;->access$202(Landroid/location/GnssMeasurement;I)I
-HPLandroid/location/GnssMeasurement;->access$2102(Landroid/location/GnssMeasurement;D)D
-HPLandroid/location/GnssMeasurement;->access$302(Landroid/location/GnssMeasurement;D)D
-HPLandroid/location/GnssMeasurement;->access$402(Landroid/location/GnssMeasurement;I)I
-HPLandroid/location/GnssMeasurement;->access$502(Landroid/location/GnssMeasurement;J)J
-HPLandroid/location/GnssMeasurement;->access$602(Landroid/location/GnssMeasurement;J)J
-HPLandroid/location/GnssMeasurement;->access$702(Landroid/location/GnssMeasurement;D)D
-HPLandroid/location/GnssMeasurement;->access$802(Landroid/location/GnssMeasurement;D)D
-HPLandroid/location/GnssMeasurement;->access$902(Landroid/location/GnssMeasurement;D)D
-HPLandroid/location/GnssMeasurement;->getAccumulatedDeltaRangeMeters()D
-HPLandroid/location/GnssMeasurement;->getAccumulatedDeltaRangeState()I
-HPLandroid/location/GnssMeasurement;->getAccumulatedDeltaRangeUncertaintyMeters()D
-HPLandroid/location/GnssMeasurement;->getCarrierFrequencyHz()F
-HPLandroid/location/GnssMeasurement;->getCn0DbHz()D
-HPLandroid/location/GnssMeasurement;->getConstellationType()I
-HPLandroid/location/GnssMeasurement;->getMultipathIndicator()I
-HPLandroid/location/GnssMeasurement;->getPseudorangeRateMetersPerSecond()D
-HPLandroid/location/GnssMeasurement;->getPseudorangeRateUncertaintyMetersPerSecond()D
-HPLandroid/location/GnssMeasurement;->getReceivedSvTimeNanos()J
-HPLandroid/location/GnssMeasurement;->getReceivedSvTimeUncertaintyNanos()J
-HPLandroid/location/GnssMeasurement;->getState()I
-HPLandroid/location/GnssMeasurement;->getSvid()I
-HPLandroid/location/GnssMeasurement;->getTimeOffsetNanos()D
-HPLandroid/location/GnssMeasurement;->hasCarrierCycles()Z
-HPLandroid/location/GnssMeasurement;->hasCarrierFrequencyHz()Z
-HPLandroid/location/GnssMeasurement;->hasCarrierPhase()Z
-HPLandroid/location/GnssMeasurement;->hasCarrierPhaseUncertainty()Z
-HPLandroid/location/GnssMeasurement;->hasSnrInDb()Z
-HPLandroid/location/GnssMeasurement;->initialize()V
-HPLandroid/location/GnssMeasurement;->isFlagSet(I)Z
-PLandroid/location/GnssMeasurement;->resetAutomaticGainControlLevel()V
-PLandroid/location/GnssMeasurement;->resetBasebandCn0DbHz()V
-PLandroid/location/GnssMeasurement;->resetCarrierCycles()V
-PLandroid/location/GnssMeasurement;->resetCarrierFrequencyHz()V
-PLandroid/location/GnssMeasurement;->resetCarrierPhase()V
-PLandroid/location/GnssMeasurement;->resetCarrierPhaseUncertainty()V
-PLandroid/location/GnssMeasurement;->resetCodeType()V
-PLandroid/location/GnssMeasurement;->resetFlag(I)V
-PLandroid/location/GnssMeasurement;->resetSnrInDb()V
-HPLandroid/location/GnssMeasurement;->setAccumulatedDeltaRangeMeters(D)V
-HPLandroid/location/GnssMeasurement;->setAccumulatedDeltaRangeState(I)V
-HPLandroid/location/GnssMeasurement;->setAccumulatedDeltaRangeUncertaintyMeters(D)V
-HPLandroid/location/GnssMeasurement;->setAutomaticGainControlLevelInDb(D)V
-HPLandroid/location/GnssMeasurement;->setCarrierFrequencyHz(F)V
-HPLandroid/location/GnssMeasurement;->setCn0DbHz(D)V
-HPLandroid/location/GnssMeasurement;->setCodeType(Ljava/lang/String;)V
-HPLandroid/location/GnssMeasurement;->setConstellationType(I)V
-PLandroid/location/GnssMeasurement;->setFlag(I)V
-HPLandroid/location/GnssMeasurement;->setMultipathIndicator(I)V
-HPLandroid/location/GnssMeasurement;->setPseudorangeRateMetersPerSecond(D)V
-HPLandroid/location/GnssMeasurement;->setPseudorangeRateUncertaintyMetersPerSecond(D)V
-HPLandroid/location/GnssMeasurement;->setReceivedSvTimeNanos(J)V
-HPLandroid/location/GnssMeasurement;->setReceivedSvTimeUncertaintyNanos(J)V
-HPLandroid/location/GnssMeasurement;->setState(I)V
-HPLandroid/location/GnssMeasurement;->setSvid(I)V
-HPLandroid/location/GnssMeasurement;->setTimeOffsetNanos(D)V
-HPLandroid/location/GnssMeasurement;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/location/GnssMeasurementsEvent$1;-><init>()V
-HPLandroid/location/GnssMeasurementsEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/GnssMeasurementsEvent;
-HPLandroid/location/GnssMeasurementsEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/location/GnssMeasurementsEvent;-><clinit>()V
-PLandroid/location/GnssMeasurementsEvent;-><init>(Landroid/location/GnssClock;[Landroid/location/GnssMeasurement;)V
-HPLandroid/location/GnssMeasurementsEvent;->getClock()Landroid/location/GnssClock;
-HPLandroid/location/GnssMeasurementsEvent;->getMeasurements()Ljava/util/Collection;
-HPLandroid/location/GnssMeasurementsEvent;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/location/GnssNavigationMessage$1;-><init>()V
-HSPLandroid/location/GnssNavigationMessage;-><clinit>()V
-HSPLandroid/location/GnssReflectingPlane$1;-><init>()V
-HSPLandroid/location/GnssReflectingPlane;-><clinit>()V
-HSPLandroid/location/GnssSingleSatCorrection$1;-><init>()V
-HSPLandroid/location/GnssSingleSatCorrection;-><clinit>()V
-HSPLandroid/location/GnssStatus$Callback;-><init>()V
-PLandroid/location/GnssStatus$Callback;->onFirstFix(I)V
-PLandroid/location/GnssStatus$Callback;->onStarted()V
-PLandroid/location/GnssStatus$Callback;->onStopped()V
-HPLandroid/location/GnssStatus;-><init>(I[I[F[F[F[F[F)V
-PLandroid/location/GnssStatus;->constellationTypeToString(I)Ljava/lang/String;
-PLandroid/location/GnssStatus;->getAzimuthDegrees(I)F
-PLandroid/location/GnssStatus;->getCarrierFrequencyHz(I)F
-HPLandroid/location/GnssStatus;->getCn0DbHz(I)F
-HPLandroid/location/GnssStatus;->getConstellationType(I)I
-PLandroid/location/GnssStatus;->getElevationDegrees(I)F
-HPLandroid/location/GnssStatus;->getSatelliteCount()I
-PLandroid/location/GnssStatus;->getSvid(I)I
-PLandroid/location/GnssStatus;->hasAlmanacData(I)Z
-PLandroid/location/GnssStatus;->hasCarrierFrequencyHz(I)Z
-PLandroid/location/GnssStatus;->hasEphemerisData(I)Z
-HPLandroid/location/GnssStatus;->usedInFix(I)Z
-HPLandroid/location/GnssStatus;->wrap(I[I[F[F[F[F[F)Landroid/location/GnssStatus;
-HPLandroid/location/GpsSatellite;-><init>(I)V
-PLandroid/location/GpsSatellite;->getPrn()I
-PLandroid/location/GpsSatellite;->getSnr()F
-PLandroid/location/GpsSatellite;->usedInFix()Z
-HPLandroid/location/GpsStatus$SatelliteIterator;-><init>(Landroid/location/GpsStatus;)V
-HPLandroid/location/GpsStatus$SatelliteIterator;->hasNext()Z
-HPLandroid/location/GpsStatus$SatelliteIterator;->next()Landroid/location/GpsSatellite;
-HPLandroid/location/GpsStatus$SatelliteIterator;->next()Ljava/lang/Object;
-HPLandroid/location/GpsStatus;-><init>()V
-HPLandroid/location/GpsStatus;->access$000(Landroid/location/GpsStatus;)Landroid/util/SparseArray;
-HPLandroid/location/GpsStatus;->create(Landroid/location/GnssStatus;I)Landroid/location/GpsStatus;
-PLandroid/location/GpsStatus;->getSatellites()Ljava/lang/Iterable;
-HPLandroid/location/GpsStatus;->lambda$new$0$GpsStatus()Ljava/util/Iterator;
-HPLandroid/location/GpsStatus;->setStatus(Landroid/location/GnssStatus;I)V
-HSPLandroid/location/ICountryDetector$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/location/ICountryDetector$Stub$Proxy;->addCountryListener(Landroid/location/ICountryListener;)V
-HSPLandroid/location/ICountryDetector$Stub$Proxy;->detectCountry()Landroid/location/Country;
-HSPLandroid/location/ICountryDetector$Stub;-><init>()V
-HSPLandroid/location/ICountryDetector$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ICountryDetector;
-PLandroid/location/ICountryDetector$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/location/ICountryListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/location/ICountryListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/location/ICountryListener$Stub;-><init>()V
-HSPLandroid/location/ICountryListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/location/ICountryListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ICountryListener;
-HSPLandroid/location/IGeocodeProvider$Stub;-><init>()V
-PLandroid/location/IGeofenceProvider$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/location/IGeofenceProvider$Stub$Proxy;->setGeofenceHardware(Landroid/hardware/location/IGeofenceHardware;)V
-HSPLandroid/location/IGeofenceProvider$Stub;-><init>()V
-PLandroid/location/IGeofenceProvider$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/IGeofenceProvider;
-HSPLandroid/location/IGeofenceProvider$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/location/IGnssMeasurementsListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/location/IGnssMeasurementsListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/location/IGnssMeasurementsListener$Stub$Proxy;->onGnssMeasurementsReceived(Landroid/location/GnssMeasurementsEvent;)V
-PLandroid/location/IGnssMeasurementsListener$Stub$Proxy;->onStatusChanged(I)V
-HPLandroid/location/IGnssMeasurementsListener$Stub;-><init>()V
-HPLandroid/location/IGnssMeasurementsListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/location/IGnssMeasurementsListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/IGnssMeasurementsListener;
-HPLandroid/location/IGnssMeasurementsListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/location/IGnssStatusListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/location/IGnssStatusListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/location/IGnssStatusListener$Stub$Proxy;->onFirstFix(I)V
-HPLandroid/location/IGnssStatusListener$Stub$Proxy;->onGnssStarted()V
-HPLandroid/location/IGnssStatusListener$Stub$Proxy;->onGnssStopped()V
-HPLandroid/location/IGnssStatusListener$Stub$Proxy;->onNmeaReceived(JLjava/lang/String;)V
-HPLandroid/location/IGnssStatusListener$Stub$Proxy;->onSvStatusChanged(I[I[F[F[F[F[F)V
-HSPLandroid/location/IGnssStatusListener$Stub;-><init>()V
-HSPLandroid/location/IGnssStatusListener$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/location/IGnssStatusListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/IGnssStatusListener;
-HPLandroid/location/IGnssStatusListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/location/IGpsGeofenceHardware$Stub;-><init>()V
-PLandroid/location/ILocationListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/location/ILocationListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/location/ILocationListener$Stub$Proxy;->onLocationChanged(Landroid/location/Location;)V
-PLandroid/location/ILocationListener$Stub$Proxy;->onProviderDisabled(Ljava/lang/String;)V
-PLandroid/location/ILocationListener$Stub$Proxy;->onProviderEnabled(Ljava/lang/String;)V
-PLandroid/location/ILocationListener$Stub$Proxy;->onRemoved()V
+HSPLandroid/location/Country;->getCountryIso()Ljava/lang/String;
 HSPLandroid/location/ILocationListener$Stub;-><init>()V
 HSPLandroid/location/ILocationListener$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/location/ILocationListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationListener;
-PLandroid/location/ILocationListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/location/ILocationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/location/ILocationManager$Stub$Proxy;->addGnssMeasurementsListener(Landroid/location/IGnssMeasurementsListener;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-HSPLandroid/location/ILocationManager$Stub$Proxy;->getAllProviders()Ljava/util/List;
-HSPLandroid/location/ILocationManager$Stub$Proxy;->getExtraLocationControllerPackage()Ljava/lang/String;
 HSPLandroid/location/ILocationManager$Stub$Proxy;->getLastLocation(Landroid/location/LocationRequest;Ljava/lang/String;Ljava/lang/String;)Landroid/location/Location;
-HSPLandroid/location/ILocationManager$Stub$Proxy;->getProviderProperties(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;
-HSPLandroid/location/ILocationManager$Stub$Proxy;->getProviders(Landroid/location/Criteria;Z)Ljava/util/List;
-HSPLandroid/location/ILocationManager$Stub$Proxy;->isExtraLocationControllerPackageEnabled()Z
 HSPLandroid/location/ILocationManager$Stub$Proxy;->isLocationEnabledForUser(I)Z
-HSPLandroid/location/ILocationManager$Stub$Proxy;->isProviderEnabledForUser(Ljava/lang/String;I)Z
-HSPLandroid/location/ILocationManager$Stub$Proxy;->isProviderPackage(Ljava/lang/String;)Z
-PLandroid/location/ILocationManager$Stub$Proxy;->locationCallbackFinished(Landroid/location/ILocationListener;)V
-HSPLandroid/location/ILocationManager$Stub$Proxy;->registerGnssStatusCallback(Landroid/location/IGnssStatusListener;Ljava/lang/String;Ljava/lang/String;)Z
-HPLandroid/location/ILocationManager$Stub$Proxy;->removeGnssMeasurementsListener(Landroid/location/IGnssMeasurementsListener;)V
-HSPLandroid/location/ILocationManager$Stub$Proxy;->removeUpdates(Landroid/location/ILocationListener;Landroid/app/PendingIntent;Ljava/lang/String;)V
-HSPLandroid/location/ILocationManager$Stub$Proxy;->requestLocationUpdates(Landroid/location/LocationRequest;Landroid/location/ILocationListener;Landroid/app/PendingIntent;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/location/ILocationManager$Stub$Proxy;->setExtraLocationControllerPackage(Ljava/lang/String;)V
-PLandroid/location/ILocationManager$Stub$Proxy;->setExtraLocationControllerPackageEnabled(Z)V
-HSPLandroid/location/ILocationManager$Stub$Proxy;->unregisterGnssStatusCallback(Landroid/location/IGnssStatusListener;)V
-HSPLandroid/location/ILocationManager$Stub;-><init>()V
 HSPLandroid/location/ILocationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationManager;
-PLandroid/location/ILocationManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/location/ILocationManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/location/INetInitiatedListener$Stub;-><init>()V
-PLandroid/location/Location$1;->initialValue()Landroid/location/Location$BearingDistanceCache;
-PLandroid/location/Location$1;->initialValue()Ljava/lang/Object;
 HSPLandroid/location/Location$2;->createFromParcel(Landroid/os/Parcel;)Landroid/location/Location;
 HSPLandroid/location/Location$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/location/Location$BearingDistanceCache;-><init>()V
-PLandroid/location/Location$BearingDistanceCache;-><init>(Landroid/location/Location$1;)V
-PLandroid/location/Location$BearingDistanceCache;->access$100(Landroid/location/Location$BearingDistanceCache;)F
-PLandroid/location/Location$BearingDistanceCache;->access$102(Landroid/location/Location$BearingDistanceCache;F)F
-PLandroid/location/Location$BearingDistanceCache;->access$202(Landroid/location/Location$BearingDistanceCache;F)F
-PLandroid/location/Location$BearingDistanceCache;->access$302(Landroid/location/Location$BearingDistanceCache;F)F
-PLandroid/location/Location$BearingDistanceCache;->access$400(Landroid/location/Location$BearingDistanceCache;)D
-PLandroid/location/Location$BearingDistanceCache;->access$402(Landroid/location/Location$BearingDistanceCache;D)D
-PLandroid/location/Location$BearingDistanceCache;->access$502(Landroid/location/Location$BearingDistanceCache;D)D
-PLandroid/location/Location$BearingDistanceCache;->access$602(Landroid/location/Location$BearingDistanceCache;D)D
-PLandroid/location/Location$BearingDistanceCache;->access$702(Landroid/location/Location$BearingDistanceCache;D)D
 HSPLandroid/location/Location;-><init>(Landroid/location/Location;)V
 HSPLandroid/location/Location;-><init>(Ljava/lang/String;)V
-PLandroid/location/Location;->access$1002(Landroid/location/Location;D)D
-PLandroid/location/Location;->access$1102(Landroid/location/Location;I)I
-PLandroid/location/Location;->access$1202(Landroid/location/Location;D)D
-PLandroid/location/Location;->access$1302(Landroid/location/Location;D)D
-PLandroid/location/Location;->access$1402(Landroid/location/Location;D)D
-PLandroid/location/Location;->access$1502(Landroid/location/Location;F)F
-PLandroid/location/Location;->access$1602(Landroid/location/Location;F)F
-PLandroid/location/Location;->access$1702(Landroid/location/Location;F)F
-PLandroid/location/Location;->access$1802(Landroid/location/Location;F)F
-PLandroid/location/Location;->access$1902(Landroid/location/Location;F)F
-PLandroid/location/Location;->access$2002(Landroid/location/Location;F)F
-PLandroid/location/Location;->access$2102(Landroid/location/Location;Landroid/os/Bundle;)Landroid/os/Bundle;
-PLandroid/location/Location;->access$802(Landroid/location/Location;J)J
-PLandroid/location/Location;->access$902(Landroid/location/Location;J)J
-HPLandroid/location/Location;->computeDistanceAndBearing(DDDDLandroid/location/Location$BearingDistanceCache;)V
-HPLandroid/location/Location;->distanceBetween(DDDD[F)V
-PLandroid/location/Location;->distanceTo(Landroid/location/Location;)F
+HSPLandroid/location/Location;->access$1002(Landroid/location/Location;D)D
+HSPLandroid/location/Location;->access$1102(Landroid/location/Location;I)I
+HSPLandroid/location/Location;->access$1202(Landroid/location/Location;D)D
+HSPLandroid/location/Location;->access$1302(Landroid/location/Location;D)D
+HSPLandroid/location/Location;->access$1402(Landroid/location/Location;D)D
+HSPLandroid/location/Location;->access$1502(Landroid/location/Location;F)F
+HSPLandroid/location/Location;->access$1602(Landroid/location/Location;F)F
+HSPLandroid/location/Location;->access$1702(Landroid/location/Location;F)F
+HSPLandroid/location/Location;->access$1802(Landroid/location/Location;F)F
+HSPLandroid/location/Location;->access$1902(Landroid/location/Location;F)F
+HSPLandroid/location/Location;->access$2002(Landroid/location/Location;F)F
+HSPLandroid/location/Location;->access$2102(Landroid/location/Location;Landroid/os/Bundle;)Landroid/os/Bundle;
+HSPLandroid/location/Location;->access$802(Landroid/location/Location;J)J
+HSPLandroid/location/Location;->access$902(Landroid/location/Location;J)J
 HSPLandroid/location/Location;->getAccuracy()F
 HSPLandroid/location/Location;->getAltitude()D
-HSPLandroid/location/Location;->getBearing()F
-PLandroid/location/Location;->getBearingAccuracyDegrees()F
 HSPLandroid/location/Location;->getElapsedRealtimeNanos()J
-HPLandroid/location/Location;->getExtraLocation(Ljava/lang/String;)Landroid/location/Location;
-HSPLandroid/location/Location;->getExtras()Landroid/os/Bundle;
 HSPLandroid/location/Location;->getLatitude()D
 HSPLandroid/location/Location;->getLongitude()D
 HSPLandroid/location/Location;->getProvider()Ljava/lang/String;
 HSPLandroid/location/Location;->getSpeed()F
-HSPLandroid/location/Location;->getSpeedAccuracyMetersPerSecond()F
 HSPLandroid/location/Location;->getTime()J
-HSPLandroid/location/Location;->getVerticalAccuracyMeters()F
 HSPLandroid/location/Location;->hasAccuracy()Z
-HSPLandroid/location/Location;->hasAltitude()Z
 HSPLandroid/location/Location;->hasBearing()Z
-HSPLandroid/location/Location;->hasBearingAccuracy()Z
-HSPLandroid/location/Location;->hasElapsedRealtimeUncertaintyNanos()Z
 HSPLandroid/location/Location;->hasSpeed()Z
-HSPLandroid/location/Location;->hasSpeedAccuracy()Z
-HSPLandroid/location/Location;->hasVerticalAccuracy()Z
-PLandroid/location/Location;->isComplete()Z
-HSPLandroid/location/Location;->isFromMockProvider()Z
-PLandroid/location/Location;->removeBearing()V
 HSPLandroid/location/Location;->set(Landroid/location/Location;)V
-HSPLandroid/location/Location;->setAccuracy(F)V
-HSPLandroid/location/Location;->setAltitude(D)V
-HSPLandroid/location/Location;->setBearing(F)V
-PLandroid/location/Location;->setBearingAccuracyDegrees(F)V
-HSPLandroid/location/Location;->setElapsedRealtimeNanos(J)V
-HPLandroid/location/Location;->setElapsedRealtimeUncertaintyNanos(D)V
-PLandroid/location/Location;->setExtraLocation(Ljava/lang/String;Landroid/location/Location;)V
-HSPLandroid/location/Location;->setExtras(Landroid/os/Bundle;)V
 HSPLandroid/location/Location;->setLatitude(D)V
 HSPLandroid/location/Location;->setLongitude(D)V
-PLandroid/location/Location;->setProvider(Ljava/lang/String;)V
-HSPLandroid/location/Location;->setSpeed(F)V
-HSPLandroid/location/Location;->setSpeedAccuracyMetersPerSecond(F)V
-HSPLandroid/location/Location;->setTime(J)V
-HSPLandroid/location/Location;->setVerticalAccuracyMeters(F)V
-HSPLandroid/location/Location;->toString()Ljava/lang/String;
-HPLandroid/location/Location;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/location/LocationManager$BatchedLocationCallbackManager;-><init>(Landroid/location/LocationManager;)V
 HSPLandroid/location/LocationManager$BatchedLocationCallbackManager;-><init>(Landroid/location/LocationManager;Landroid/location/LocationManager$1;)V
 HSPLandroid/location/LocationManager$GnssMeasurementsListenerManager;-><init>(Landroid/location/LocationManager;)V
 HSPLandroid/location/LocationManager$GnssMeasurementsListenerManager;-><init>(Landroid/location/LocationManager;Landroid/location/LocationManager$1;)V
-HPLandroid/location/LocationManager$GnssMeasurementsListenerManager;->registerService()Z
-HPLandroid/location/LocationManager$GnssMeasurementsListenerManager;->unregisterService()V
 HSPLandroid/location/LocationManager$GnssNavigationMessageListenerManager;-><init>(Landroid/location/LocationManager;)V
 HSPLandroid/location/LocationManager$GnssNavigationMessageListenerManager;-><init>(Landroid/location/LocationManager;Landroid/location/LocationManager$1;)V
-HSPLandroid/location/LocationManager$GnssStatusListenerManager$1;-><init>(Landroid/location/LocationManager$GnssStatusListenerManager;Ljava/lang/Object;)V
-PLandroid/location/LocationManager$GnssStatusListenerManager$1;->onFirstFix(I)V
-HPLandroid/location/LocationManager$GnssStatusListenerManager$1;->onSatelliteStatusChanged(Landroid/location/GnssStatus;)V
-PLandroid/location/LocationManager$GnssStatusListenerManager$1;->onStarted()V
-PLandroid/location/LocationManager$GnssStatusListenerManager$1;->onStopped()V
-HSPLandroid/location/LocationManager$GnssStatusListenerManager$GnssStatusListener;-><init>(Landroid/location/LocationManager$GnssStatusListenerManager;)V
-HSPLandroid/location/LocationManager$GnssStatusListenerManager$GnssStatusListener;-><init>(Landroid/location/LocationManager$GnssStatusListenerManager;Landroid/location/LocationManager$1;)V
-PLandroid/location/LocationManager$GnssStatusListenerManager$GnssStatusListener;->lambda$onFirstFix$0(ILandroid/location/GnssStatus$Callback;)V
-PLandroid/location/LocationManager$GnssStatusListenerManager$GnssStatusListener;->lambda$onNmeaReceived$2(Ljava/lang/String;JLandroid/location/GnssStatus$Callback;)V
-PLandroid/location/LocationManager$GnssStatusListenerManager$GnssStatusListener;->lambda$onSvStatusChanged$1(Landroid/location/GnssStatus;Landroid/location/GnssStatus$Callback;)V
-PLandroid/location/LocationManager$GnssStatusListenerManager$GnssStatusListener;->onFirstFix(I)V
-PLandroid/location/LocationManager$GnssStatusListenerManager$GnssStatusListener;->onGnssStarted()V
-PLandroid/location/LocationManager$GnssStatusListenerManager$GnssStatusListener;->onGnssStopped()V
-HPLandroid/location/LocationManager$GnssStatusListenerManager$GnssStatusListener;->onNmeaReceived(JLjava/lang/String;)V
-PLandroid/location/LocationManager$GnssStatusListenerManager$GnssStatusListener;->onSvStatusChanged(I[I[F[F[F[F[F)V
 HSPLandroid/location/LocationManager$GnssStatusListenerManager;-><init>(Landroid/location/LocationManager;)V
 HSPLandroid/location/LocationManager$GnssStatusListenerManager;-><init>(Landroid/location/LocationManager;Landroid/location/LocationManager$1;)V
-PLandroid/location/LocationManager$GnssStatusListenerManager;->access$1102(Landroid/location/LocationManager$GnssStatusListenerManager;I)I
-HPLandroid/location/LocationManager$GnssStatusListenerManager;->access$1202(Landroid/location/LocationManager$GnssStatusListenerManager;Landroid/location/GnssStatus;)Landroid/location/GnssStatus;
-HSPLandroid/location/LocationManager$GnssStatusListenerManager;->addListener(Landroid/location/GpsStatus$Listener;Ljava/util/concurrent/Executor;)Z
-HSPLandroid/location/LocationManager$GnssStatusListenerManager;->convertKey(Ljava/lang/Object;)Landroid/location/GnssStatus$Callback;
-HSPLandroid/location/LocationManager$GnssStatusListenerManager;->convertKey(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/location/LocationManager$GnssStatusListenerManager;->getGnssStatus()Landroid/location/GnssStatus;
-PLandroid/location/LocationManager$GnssStatusListenerManager;->getTtff()I
-HSPLandroid/location/LocationManager$GnssStatusListenerManager;->registerService()Z
-HSPLandroid/location/LocationManager$GnssStatusListenerManager;->unregisterService()V
 HSPLandroid/location/LocationManager$LocationListenerTransport;-><init>(Landroid/location/LocationManager;Landroid/location/LocationListener;)V
 HSPLandroid/location/LocationManager$LocationListenerTransport;-><init>(Landroid/location/LocationManager;Landroid/location/LocationListener;Landroid/location/LocationManager$1;)V
-HPLandroid/location/LocationManager$LocationListenerTransport;->lambda$onLocationChanged$0$LocationManager$LocationListenerTransport(Ljava/util/concurrent/Executor;Landroid/location/Location;)V
-PLandroid/location/LocationManager$LocationListenerTransport;->lambda$onProviderDisabled$2$LocationManager$LocationListenerTransport(Ljava/util/concurrent/Executor;Ljava/lang/String;)V
-HPLandroid/location/LocationManager$LocationListenerTransport;->lambda$onProviderEnabled$1$LocationManager$LocationListenerTransport(Ljava/util/concurrent/Executor;Ljava/lang/String;)V
-PLandroid/location/LocationManager$LocationListenerTransport;->lambda$onRemoved$3$LocationManager$LocationListenerTransport(Ljava/util/concurrent/Executor;)V
-HPLandroid/location/LocationManager$LocationListenerTransport;->locationCallbackFinished()V
-HPLandroid/location/LocationManager$LocationListenerTransport;->onLocationChanged(Landroid/location/Location;)V
-PLandroid/location/LocationManager$LocationListenerTransport;->onProviderDisabled(Ljava/lang/String;)V
-HPLandroid/location/LocationManager$LocationListenerTransport;->onProviderEnabled(Ljava/lang/String;)V
-PLandroid/location/LocationManager$LocationListenerTransport;->onRemoved()V
 HSPLandroid/location/LocationManager$LocationListenerTransport;->register(Ljava/util/concurrent/Executor;)V
-HSPLandroid/location/LocationManager$LocationListenerTransport;->unregister()V
 HSPLandroid/location/LocationManager;-><init>(Landroid/content/Context;Landroid/location/ILocationManager;)V
-HSPLandroid/location/LocationManager;->access$1000(Landroid/location/LocationManager;)Landroid/content/Context;
 HSPLandroid/location/LocationManager;->access$600(Landroid/location/LocationManager;)Landroid/location/ILocationManager;
-HSPLandroid/location/LocationManager;->addGpsStatusListener(Landroid/location/GpsStatus$Listener;)Z
-HSPLandroid/location/LocationManager;->getAllProviders()Ljava/util/List;
-HSPLandroid/location/LocationManager;->getExtraLocationControllerPackage()Ljava/lang/String;
-HPLandroid/location/LocationManager;->getGpsStatus(Landroid/location/GpsStatus;)Landroid/location/GpsStatus;
 HSPLandroid/location/LocationManager;->getLastKnownLocation(Ljava/lang/String;)Landroid/location/Location;
 HSPLandroid/location/LocationManager;->getListenerIdentifier(Ljava/lang/Object;)Ljava/lang/String;
-HSPLandroid/location/LocationManager;->getProvider(Ljava/lang/String;)Landroid/location/LocationProvider;
-HSPLandroid/location/LocationManager;->getProviders(Z)Ljava/util/List;
-HSPLandroid/location/LocationManager;->isExtraLocationControllerPackageEnabled()Z
-HSPLandroid/location/LocationManager;->isLocationEnabled()Z
 HSPLandroid/location/LocationManager;->isLocationEnabledForUser(Landroid/os/UserHandle;)Z
 HSPLandroid/location/LocationManager;->isProviderEnabled(Ljava/lang/String;)Z
 HSPLandroid/location/LocationManager;->isProviderEnabledForUser(Ljava/lang/String;Landroid/os/UserHandle;)Z
-HSPLandroid/location/LocationManager;->isProviderPackage(Ljava/lang/String;)Z
-HPLandroid/location/LocationManager;->registerGnssMeasurementsCallback(Landroid/location/GnssMeasurementsEvent$Callback;)Z
-HPLandroid/location/LocationManager;->registerGnssMeasurementsCallback(Ljava/util/concurrent/Executor;Landroid/location/GnssMeasurementsEvent$Callback;)Z
-HSPLandroid/location/LocationManager;->registerGnssStatusCallback(Landroid/location/GnssStatus$Callback;Landroid/os/Handler;)Z
-HSPLandroid/location/LocationManager;->removeGpsStatusListener(Landroid/location/GpsStatus$Listener;)V
 HSPLandroid/location/LocationManager;->removeUpdates(Landroid/location/LocationListener;)V
 HSPLandroid/location/LocationManager;->requestLocationUpdates(Landroid/location/LocationRequest;Landroid/location/LocationListener;Landroid/os/Looper;)V
 HSPLandroid/location/LocationManager;->requestLocationUpdates(Landroid/location/LocationRequest;Ljava/util/concurrent/Executor;Landroid/location/LocationListener;)V
-HSPLandroid/location/LocationManager;->requestLocationUpdates(Ljava/lang/String;JFLandroid/location/LocationListener;)V
-PLandroid/location/LocationManager;->requestLocationUpdates(Ljava/lang/String;JFLandroid/location/LocationListener;Landroid/os/Looper;)V
-HSPLandroid/location/LocationManager;->setExtraLocationControllerPackage(Ljava/lang/String;)V
-PLandroid/location/LocationManager;->setExtraLocationControllerPackageEnabled(Z)V
-HPLandroid/location/LocationManager;->unregisterGnssMeasurementsCallback(Landroid/location/GnssMeasurementsEvent$Callback;)V
-HSPLandroid/location/LocationManager;->unregisterGnssStatusCallback(Landroid/location/GnssStatus$Callback;)V
-PLandroid/location/LocationProvider;-><init>(Ljava/lang/String;Lcom/android/internal/location/ProviderProperties;)V
-HSPLandroid/location/LocationRequest$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/LocationRequest;
-HSPLandroid/location/LocationRequest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/location/LocationRequest;-><init>()V
-HSPLandroid/location/LocationRequest;-><init>(Landroid/location/LocationRequest;)V
 HSPLandroid/location/LocationRequest;->checkDisplacement(F)V
 HSPLandroid/location/LocationRequest;->checkProvider(Ljava/lang/String;)V
 HSPLandroid/location/LocationRequest;->checkQuality(I)V
-HSPLandroid/location/LocationRequest;->create()Landroid/location/LocationRequest;
 HSPLandroid/location/LocationRequest;->createFromDeprecatedProvider(Ljava/lang/String;JFZ)Landroid/location/LocationRequest;
-PLandroid/location/LocationRequest;->decrementNumUpdates()V
-HSPLandroid/location/LocationRequest;->getExpirationRealtimeMs(J)J
-HSPLandroid/location/LocationRequest;->getExpireIn()J
-HSPLandroid/location/LocationRequest;->getFastestInterval()J
-HSPLandroid/location/LocationRequest;->getHideFromAppOps()Z
-HSPLandroid/location/LocationRequest;->getInterval()J
-HSPLandroid/location/LocationRequest;->getNumUpdates()I
-HSPLandroid/location/LocationRequest;->getProvider()Ljava/lang/String;
-HSPLandroid/location/LocationRequest;->getQuality()I
-HSPLandroid/location/LocationRequest;->getSmallestDisplacement()F
-HSPLandroid/location/LocationRequest;->getWorkSource()Landroid/os/WorkSource;
-HSPLandroid/location/LocationRequest;->isLocationSettingsIgnored()Z
-HSPLandroid/location/LocationRequest;->isLowPowerMode()Z
-PLandroid/location/LocationRequest;->qualityToString(I)Ljava/lang/String;
-PLandroid/location/LocationRequest;->setExpireAt(J)Landroid/location/LocationRequest;
-PLandroid/location/LocationRequest;->setExpireIn(J)Landroid/location/LocationRequest;
 HSPLandroid/location/LocationRequest;->setFastestInterval(J)Landroid/location/LocationRequest;
-HSPLandroid/location/LocationRequest;->setHideFromAppOps(Z)V
 HSPLandroid/location/LocationRequest;->setInterval(J)Landroid/location/LocationRequest;
-HSPLandroid/location/LocationRequest;->setLocationSettingsIgnored(Z)Landroid/location/LocationRequest;
-HSPLandroid/location/LocationRequest;->setLowPowerMode(Z)Landroid/location/LocationRequest;
 HSPLandroid/location/LocationRequest;->setNumUpdates(I)Landroid/location/LocationRequest;
 HSPLandroid/location/LocationRequest;->setProvider(Ljava/lang/String;)Landroid/location/LocationRequest;
 HSPLandroid/location/LocationRequest;->setQuality(I)Landroid/location/LocationRequest;
 HSPLandroid/location/LocationRequest;->setSmallestDisplacement(F)Landroid/location/LocationRequest;
-HSPLandroid/location/LocationRequest;->setWorkSource(Landroid/os/WorkSource;)V
-PLandroid/location/LocationRequest;->toString()Ljava/lang/String;
 HSPLandroid/location/LocationRequest;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/media/-$$Lambda$MediaCodecInfo$VideoCapabilities$DpgwEn-gVFZT9EtP3qcxpiA2G0M;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/media/AudioAttributes$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/AudioAttributes;
@@ -13115,216 +7890,95 @@
 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;
-HPLandroid/media/AudioAttributes$Builder;->replaceFlags(I)Landroid/media/AudioAttributes$Builder;
-PLandroid/media/AudioAttributes$Builder;->setAllowedCapturePolicy(I)Landroid/media/AudioAttributes$Builder;
 HSPLandroid/media/AudioAttributes$Builder;->setCapturePreset(I)Landroid/media/AudioAttributes$Builder;
 HSPLandroid/media/AudioAttributes$Builder;->setContentType(I)Landroid/media/AudioAttributes$Builder;
 HSPLandroid/media/AudioAttributes$Builder;->setFlags(I)Landroid/media/AudioAttributes$Builder;
 HSPLandroid/media/AudioAttributes$Builder;->setInternalCapturePreset(I)Landroid/media/AudioAttributes$Builder;
 HSPLandroid/media/AudioAttributes$Builder;->setInternalLegacyStreamType(I)Landroid/media/AudioAttributes$Builder;
-HSPLandroid/media/AudioAttributes$Builder;->setLegacyStreamType(I)Landroid/media/AudioAttributes$Builder;
+HSPLandroid/media/AudioAttributes$Builder;->setSystemUsage(I)Landroid/media/AudioAttributes$Builder;
 HSPLandroid/media/AudioAttributes$Builder;->setUsage(I)Landroid/media/AudioAttributes$Builder;
 HSPLandroid/media/AudioAttributes;-><init>()V
 HSPLandroid/media/AudioAttributes;-><init>(Landroid/media/AudioAttributes$1;)V
 HSPLandroid/media/AudioAttributes;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/media/AudioAttributes;-><init>(Landroid/os/Parcel;Landroid/media/AudioAttributes$1;)V
-PLandroid/media/AudioAttributes;->access$000(Landroid/media/AudioAttributes;)I
+HSPLandroid/media/AudioAttributes;->access$000(Landroid/media/AudioAttributes;)I
 HSPLandroid/media/AudioAttributes;->access$002(Landroid/media/AudioAttributes;I)I
-PLandroid/media/AudioAttributes;->access$100(Landroid/media/AudioAttributes;)I
+HSPLandroid/media/AudioAttributes;->access$100(Landroid/media/AudioAttributes;)I
 HSPLandroid/media/AudioAttributes;->access$102(Landroid/media/AudioAttributes;I)I
-PLandroid/media/AudioAttributes;->access$200(Landroid/media/AudioAttributes;)Ljava/util/HashSet;
+HSPLandroid/media/AudioAttributes;->access$200(Landroid/media/AudioAttributes;)Ljava/util/HashSet;
 HSPLandroid/media/AudioAttributes;->access$202(Landroid/media/AudioAttributes;Ljava/util/HashSet;)Ljava/util/HashSet;
 HSPLandroid/media/AudioAttributes;->access$400(Landroid/media/AudioAttributes;)I
 HSPLandroid/media/AudioAttributes;->access$402(Landroid/media/AudioAttributes;I)I
 HSPLandroid/media/AudioAttributes;->access$502(Landroid/media/AudioAttributes;I)I
+HSPLandroid/media/AudioAttributes;->access$572(Landroid/media/AudioAttributes;I)I
 HSPLandroid/media/AudioAttributes;->access$576(Landroid/media/AudioAttributes;I)I
 HSPLandroid/media/AudioAttributes;->access$602(Landroid/media/AudioAttributes;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/media/AudioAttributes;->access$700(Landroid/media/AudioAttributes;)Landroid/os/Bundle;
-PLandroid/media/AudioAttributes;->areHapticChannelsMuted()Z
-HSPLandroid/media/AudioAttributes;->capturePolicyToFlags(II)I
-HPLandroid/media/AudioAttributes;->contentTypeToString()Ljava/lang/String;
-HPLandroid/media/AudioAttributes;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLandroid/media/AudioAttributes;->equals(Ljava/lang/Object;)Z
-PLandroid/media/AudioAttributes;->getAllFlags()I
-HSPLandroid/media/AudioAttributes;->getAllowedCapturePolicy()I
-HSPLandroid/media/AudioAttributes;->getContentType()I
-HSPLandroid/media/AudioAttributes;->getFlags()I
-PLandroid/media/AudioAttributes;->getTags()Ljava/util/Set;
+HSPLandroid/media/AudioAttributes;->access$700(Landroid/media/AudioAttributes;)Landroid/os/Bundle;
+HSPLandroid/media/AudioAttributes;->areHapticChannelsMuted()Z
+HSPLandroid/media/AudioAttributes;->getAllFlags()I
 HSPLandroid/media/AudioAttributes;->getUsage()I
-HPLandroid/media/AudioAttributes;->getVolumeControlStream()I
-HSPLandroid/media/AudioAttributes;->hashCode()I
-PLandroid/media/AudioAttributes;->toLegacyStreamType(Landroid/media/AudioAttributes;)I
-HPLandroid/media/AudioAttributes;->toString()Ljava/lang/String;
-PLandroid/media/AudioAttributes;->toVolumeStreamType(ZLandroid/media/AudioAttributes;)I
-PLandroid/media/AudioAttributes;->usageToString()Ljava/lang/String;
-PLandroid/media/AudioAttributes;->usageToString(I)Ljava/lang/String;
+HSPLandroid/media/AudioAttributes;->isSystemUsage(I)Z
 HSPLandroid/media/AudioAttributes;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/media/AudioDeviceCallback;-><init>()V
-PLandroid/media/AudioDeviceInfo;-><init>(Landroid/media/AudioDevicePort;)V
-PLandroid/media/AudioDeviceInfo;->convertInternalDeviceToDeviceType(I)I
-HSPLandroid/media/AudioDeviceInfo;->getProductName()Ljava/lang/CharSequence;
 HSPLandroid/media/AudioDeviceInfo;->getType()I
-HPLandroid/media/AudioDeviceInfo;->isSink()Z
 HSPLandroid/media/AudioDevicePort;-><init>(Landroid/media/AudioHandle;Ljava/lang/String;[I[I[I[I[Landroid/media/AudioGain;ILjava/lang/String;)V
 HSPLandroid/media/AudioDevicePort;->buildConfig(IIILandroid/media/AudioGainConfig;)Landroid/media/AudioDevicePortConfig;
 HSPLandroid/media/AudioDevicePort;->buildConfig(IIILandroid/media/AudioGainConfig;)Landroid/media/AudioPortConfig;
 HSPLandroid/media/AudioDevicePort;->type()I
 HSPLandroid/media/AudioDevicePortConfig;-><init>(Landroid/media/AudioDevicePort;IIILandroid/media/AudioGainConfig;)V
-PLandroid/media/AudioFocusInfo;-><init>(Landroid/media/AudioAttributes;ILjava/lang/String;Ljava/lang/String;IIII)V
-HSPLandroid/media/AudioFocusRequest$Builder;-><init>(I)V
-HSPLandroid/media/AudioFocusRequest$Builder;->build()Landroid/media/AudioFocusRequest;
-HSPLandroid/media/AudioFocusRequest$Builder;->setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/AudioFocusRequest$Builder;
-HSPLandroid/media/AudioFocusRequest$Builder;->setFocusGain(I)Landroid/media/AudioFocusRequest$Builder;
-HSPLandroid/media/AudioFocusRequest;->access$000()Landroid/media/AudioAttributes;
-HPLandroid/media/AudioFocusRequest;->getAudioAttributes()Landroid/media/AudioAttributes;
-HPLandroid/media/AudioFocusRequest;->getOnAudioFocusChangeListener()Landroid/media/AudioManager$OnAudioFocusChangeListener;
-HSPLandroid/media/AudioFocusRequest;->isValidFocusGain(I)Z
-HPLandroid/media/AudioFormat$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/AudioFormat;
-HPLandroid/media/AudioFormat$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/media/AudioFormat$Builder;-><init>()V
-HSPLandroid/media/AudioFormat$Builder;-><init>(Landroid/media/AudioFormat;)V
 HSPLandroid/media/AudioFormat$Builder;->build()Landroid/media/AudioFormat;
 HSPLandroid/media/AudioFormat$Builder;->setChannelMask(I)Landroid/media/AudioFormat$Builder;
 HSPLandroid/media/AudioFormat$Builder;->setEncoding(I)Landroid/media/AudioFormat$Builder;
 HSPLandroid/media/AudioFormat$Builder;->setSampleRate(I)Landroid/media/AudioFormat$Builder;
-PLandroid/media/AudioFormat;-><init>(IIII)V
 HSPLandroid/media/AudioFormat;-><init>(IIIII)V
-PLandroid/media/AudioFormat;-><init>(IIIIILandroid/media/AudioFormat$1;)V
-HPLandroid/media/AudioFormat;-><init>(Landroid/os/Parcel;)V
-HPLandroid/media/AudioFormat;-><init>(Landroid/os/Parcel;Landroid/media/AudioFormat$1;)V
-HSPLandroid/media/AudioFormat;->access$000(Landroid/media/AudioFormat;)I
-HSPLandroid/media/AudioFormat;->access$100(Landroid/media/AudioFormat;)I
-HSPLandroid/media/AudioFormat;->access$200(Landroid/media/AudioFormat;)I
-HSPLandroid/media/AudioFormat;->access$300(Landroid/media/AudioFormat;)I
-HSPLandroid/media/AudioFormat;->access$400(Landroid/media/AudioFormat;)I
-HSPLandroid/media/AudioFormat;->channelCountFromOutChannelMask(I)I
 HSPLandroid/media/AudioFormat;->getBytesPerSample(I)I
-HSPLandroid/media/AudioFormat;->getChannelCount()I
-PLandroid/media/AudioFormat;->getChannelIndexMask()I
 HSPLandroid/media/AudioFormat;->getChannelMask()I
-HSPLandroid/media/AudioFormat;->getEncoding()I
-HPLandroid/media/AudioFormat;->getPropertySetMask()I
-HSPLandroid/media/AudioFormat;->getSampleRate()I
-PLandroid/media/AudioFormat;->hashCode()I
-HSPLandroid/media/AudioFormat;->inChannelMaskFromOutChannelMask(I)I
-HPLandroid/media/AudioFormat;->isEncodingLinearFrames(I)Z
-HSPLandroid/media/AudioFormat;->isEncodingLinearPcm(I)Z
-HSPLandroid/media/AudioFormat;->isPublicEncoding(I)Z
-HPLandroid/media/AudioFormat;->isValidEncoding(I)Z
-PLandroid/media/AudioFormat;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/media/AudioHandle;-><init>(I)V
 HSPLandroid/media/AudioHandle;->equals(Ljava/lang/Object;)Z
 HSPLandroid/media/AudioHandle;->id()I
 HSPLandroid/media/AudioManager$1;-><init>(Landroid/media/AudioManager;)V
-HPLandroid/media/AudioManager$1;->dispatchAudioFocusChange(ILjava/lang/String;)V
 HSPLandroid/media/AudioManager$2;-><init>(Landroid/media/AudioManager;)V
-HPLandroid/media/AudioManager$2;->dispatchPlaybackConfigChange(Ljava/util/List;Z)V
+HSPLandroid/media/AudioManager$2;->dispatchPlaybackConfigChange(Ljava/util/List;Z)V
 HSPLandroid/media/AudioManager$3;-><init>(Landroid/media/AudioManager;)V
-HPLandroid/media/AudioManager$3;->dispatchRecordingConfigChange(Ljava/util/List;)V
 HSPLandroid/media/AudioManager$4;-><init>(Landroid/media/AudioManager;)V
 HSPLandroid/media/AudioManager$AudioPlaybackCallback;-><init>()V
-HPLandroid/media/AudioManager$AudioPlaybackCallback;->onPlaybackConfigChanged(Ljava/util/List;)V
 HSPLandroid/media/AudioManager$AudioPlaybackCallbackInfo;-><init>(Landroid/media/AudioManager$AudioPlaybackCallback;Landroid/os/Handler;)V
-HSPLandroid/media/AudioManager$AudioRecordingCallback;-><init>()V
-PLandroid/media/AudioManager$NativeEventHandlerDelegate$1;-><init>(Landroid/media/AudioManager$NativeEventHandlerDelegate;Landroid/os/Looper;Landroid/media/AudioManager;Landroid/media/AudioDeviceCallback;)V
+HSPLandroid/media/AudioManager$NativeEventHandlerDelegate$1;-><init>(Landroid/media/AudioManager$NativeEventHandlerDelegate;Landroid/os/Looper;Landroid/media/AudioManager;Landroid/media/AudioDeviceCallback;)V
 HSPLandroid/media/AudioManager$NativeEventHandlerDelegate$1;->handleMessage(Landroid/os/Message;)V
-PLandroid/media/AudioManager$NativeEventHandlerDelegate;-><init>(Landroid/media/AudioManager;Landroid/media/AudioDeviceCallback;Landroid/os/Handler;)V
-PLandroid/media/AudioManager$NativeEventHandlerDelegate;->getHandler()Landroid/os/Handler;
-PLandroid/media/AudioManager$OnAmPortUpdateListener;-><init>(Landroid/media/AudioManager;)V
-PLandroid/media/AudioManager$OnAmPortUpdateListener;-><init>(Landroid/media/AudioManager;Landroid/media/AudioManager$1;)V
+HSPLandroid/media/AudioManager$NativeEventHandlerDelegate;-><init>(Landroid/media/AudioManager;Landroid/media/AudioDeviceCallback;Landroid/os/Handler;)V
+HSPLandroid/media/AudioManager$NativeEventHandlerDelegate;->getHandler()Landroid/os/Handler;
+HSPLandroid/media/AudioManager$OnAmPortUpdateListener;-><init>(Landroid/media/AudioManager;)V
+HSPLandroid/media/AudioManager$OnAmPortUpdateListener;-><init>(Landroid/media/AudioManager;Landroid/media/AudioManager$1;)V
 HSPLandroid/media/AudioManager$OnAmPortUpdateListener;->onAudioPatchListUpdate([Landroid/media/AudioPatch;)V
 HSPLandroid/media/AudioManager$OnAmPortUpdateListener;->onAudioPortListUpdate([Landroid/media/AudioPort;)V
-PLandroid/media/AudioManager$PlaybackConfigChangeCallbackData;-><init>(Landroid/media/AudioManager$AudioPlaybackCallback;Ljava/util/List;)V
 HSPLandroid/media/AudioManager$ServiceEventHandlerDelegate$1;-><init>(Landroid/media/AudioManager$ServiceEventHandlerDelegate;Landroid/os/Looper;Landroid/media/AudioManager;)V
-HPLandroid/media/AudioManager$ServiceEventHandlerDelegate$1;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/media/AudioManager$ServiceEventHandlerDelegate$1;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/media/AudioManager$ServiceEventHandlerDelegate;-><init>(Landroid/media/AudioManager;Landroid/os/Handler;)V
 HSPLandroid/media/AudioManager$ServiceEventHandlerDelegate;->getHandler()Landroid/os/Handler;
 HSPLandroid/media/AudioManager;-><init>(Landroid/content/Context;)V
-HPLandroid/media/AudioManager;->abandonAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;)I
-HPLandroid/media/AudioManager;->abandonAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/media/AudioAttributes;)I
-HPLandroid/media/AudioManager;->abandonAudioFocusRequest(Landroid/media/AudioFocusRequest;)I
-HPLandroid/media/AudioManager;->access$000(Landroid/media/AudioManager;Ljava/lang/String;)Landroid/media/AudioManager$FocusRequestInfo;
-PLandroid/media/AudioManager;->access$1000(Landroid/media/AudioManager;)Landroid/util/ArrayMap;
-PLandroid/media/AudioManager;->access$1100(Landroid/media/AudioManager;Landroid/os/Handler;)V
-PLandroid/media/AudioManager;->access$500(Landroid/media/AudioManager;)Ljava/lang/Object;
-PLandroid/media/AudioManager;->access$600(Landroid/media/AudioManager;)Ljava/util/List;
-HPLandroid/media/AudioManager;->access$700(Landroid/media/AudioManager;)Ljava/lang/Object;
-HPLandroid/media/AudioManager;->access$800(Landroid/media/AudioManager;)Ljava/util/List;
-PLandroid/media/AudioManager;->adjustToString(I)Ljava/lang/String;
+HSPLandroid/media/AudioManager;->access$1000(Landroid/media/AudioManager;)Landroid/util/ArrayMap;
+HSPLandroid/media/AudioManager;->access$1100(Landroid/media/AudioManager;Landroid/os/Handler;)V
 HSPLandroid/media/AudioManager;->broadcastDeviceListChange_sync(Landroid/os/Handler;)V
-HSPLandroid/media/AudioManager;->calcListDeltas(Ljava/util/ArrayList;Ljava/util/ArrayList;I)[Landroid/media/AudioDeviceInfo;
-PLandroid/media/AudioManager;->checkFlags(Landroid/media/AudioDevicePort;I)Z
-PLandroid/media/AudioManager;->checkTypes(Landroid/media/AudioDevicePort;)Z
-HPLandroid/media/AudioManager;->filterDevicePorts(Ljava/util/ArrayList;Ljava/util/ArrayList;)V
-HPLandroid/media/AudioManager;->findFocusRequestInfo(Ljava/lang/String;)Landroid/media/AudioManager$FocusRequestInfo;
-HPLandroid/media/AudioManager;->forceVolumeControlStream(I)V
-HSPLandroid/media/AudioManager;->getActivePlaybackConfigurations()Ljava/util/List;
-HPLandroid/media/AudioManager;->getActiveRecordingConfigurations()Ljava/util/List;
+HSPLandroid/media/AudioManager;->filterDevicePorts(Ljava/util/ArrayList;Ljava/util/ArrayList;)V
 HSPLandroid/media/AudioManager;->getContext()Landroid/content/Context;
-HSPLandroid/media/AudioManager;->getDevices(I)[Landroid/media/AudioDeviceInfo;
-HPLandroid/media/AudioManager;->getDevicesForStream(I)I
-PLandroid/media/AudioManager;->getDevicesStatic(I)[Landroid/media/AudioDeviceInfo;
-PLandroid/media/AudioManager;->getFocusRampTimeMs(ILandroid/media/AudioAttributes;)I
-HPLandroid/media/AudioManager;->getIdForAudioFocusListener(Landroid/media/AudioManager$OnAudioFocusChangeListener;)Ljava/lang/String;
-HPLandroid/media/AudioManager;->getLastAudibleStreamVolume(I)I
-HSPLandroid/media/AudioManager;->getMode()I
-HPLandroid/media/AudioManager;->getProperty(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/media/AudioManager;->getRingerMode()I
 HSPLandroid/media/AudioManager;->getRingerModeInternal()I
-PLandroid/media/AudioManager;->getRingtonePlayer()Landroid/media/IRingtonePlayer;
 HSPLandroid/media/AudioManager;->getService()Landroid/media/IAudioService;
 HSPLandroid/media/AudioManager;->getStreamMaxVolume(I)I
-HSPLandroid/media/AudioManager;->getStreamMinVolume(I)I
-HSPLandroid/media/AudioManager;->getStreamMinVolumeInt(I)I
 HSPLandroid/media/AudioManager;->getStreamVolume(I)I
-HPLandroid/media/AudioManager;->getUiSoundsStreamType()I
 HSPLandroid/media/AudioManager;->hasPlaybackCallback_sync(Landroid/media/AudioManager$AudioPlaybackCallback;)Z
-HSPLandroid/media/AudioManager;->hasRecordCallback_sync(Landroid/media/AudioManager$AudioRecordingCallback;)Z
-HSPLandroid/media/AudioManager;->infoListFromPortList(Ljava/util/ArrayList;I)[Landroid/media/AudioDeviceInfo;
-PLandroid/media/AudioManager;->isAudioFocusExclusive()Z
-HPLandroid/media/AudioManager;->isAudioServerRunning()Z
-HPLandroid/media/AudioManager;->isBluetoothA2dpOn()Z
-HSPLandroid/media/AudioManager;->isBluetoothScoOn()Z
-PLandroid/media/AudioManager;->isHapticPlaybackSupported()Z
-PLandroid/media/AudioManager;->isInputDevice(I)Z
-HSPLandroid/media/AudioManager;->isMusicActive()Z
-HSPLandroid/media/AudioManager;->isPublicStreamType(I)Z
-HSPLandroid/media/AudioManager;->isSpeakerphoneOn()Z
-HPLandroid/media/AudioManager;->isStreamMute(I)Z
+HSPLandroid/media/AudioManager;->isInputDevice(I)Z
 HSPLandroid/media/AudioManager;->isVolumeFixed()Z
 HSPLandroid/media/AudioManager;->isWiredHeadsetOn()Z
-PLandroid/media/AudioManager;->listAudioDevicePorts(Ljava/util/ArrayList;)I
-HPLandroid/media/AudioManager;->notifyVolumeControllerVisible(Landroid/media/IVolumeController;Z)V
+HSPLandroid/media/AudioManager;->listAudioDevicePorts(Ljava/util/ArrayList;)I
 HSPLandroid/media/AudioManager;->playSoundEffect(I)V
-HPLandroid/media/AudioManager;->playSoundEffect(II)V
-HPLandroid/media/AudioManager;->preDispatchKeyEvent(Landroid/view/KeyEvent;I)V
-HPLandroid/media/AudioManager;->querySoundEffectsEnabled(I)Z
+HSPLandroid/media/AudioManager;->preDispatchKeyEvent(Landroid/view/KeyEvent;I)V
+HSPLandroid/media/AudioManager;->querySoundEffectsEnabled(I)Z
 HSPLandroid/media/AudioManager;->registerAudioDeviceCallback(Landroid/media/AudioDeviceCallback;Landroid/os/Handler;)V
-HPLandroid/media/AudioManager;->registerAudioFocusRequest(Landroid/media/AudioFocusRequest;)V
 HSPLandroid/media/AudioManager;->registerAudioPlaybackCallback(Landroid/media/AudioManager$AudioPlaybackCallback;Landroid/os/Handler;)V
-HSPLandroid/media/AudioManager;->registerAudioPolicy(Landroid/media/audiopolicy/AudioPolicy;)I
-HSPLandroid/media/AudioManager;->registerAudioPolicyStatic(Landroid/media/audiopolicy/AudioPolicy;)I
 HSPLandroid/media/AudioManager;->registerAudioPortUpdateListener(Landroid/media/AudioManager$OnAudioPortUpdateListener;)V
-HSPLandroid/media/AudioManager;->registerAudioRecordingCallback(Landroid/media/AudioManager$AudioRecordingCallback;Landroid/os/Handler;)V
-HPLandroid/media/AudioManager;->removePlaybackCallback_sync(Landroid/media/AudioManager$AudioPlaybackCallback;)Z
-HPLandroid/media/AudioManager;->requestAudioFocus(Landroid/media/AudioFocusRequest;)I
-HPLandroid/media/AudioManager;->requestAudioFocus(Landroid/media/AudioFocusRequest;Landroid/media/audiopolicy/AudioPolicy;)I
-HPLandroid/media/AudioManager;->requestAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;II)I
-HPLandroid/media/AudioManager;->requestAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/media/AudioAttributes;II)I
-HPLandroid/media/AudioManager;->requestAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/media/AudioAttributes;IILandroid/media/audiopolicy/AudioPolicy;)I
-PLandroid/media/AudioManager;->resetAudioPortGeneration()I
-HSPLandroid/media/AudioManager;->setAllowedCapturePolicy(I)V
 HSPLandroid/media/AudioManager;->setContext(Landroid/content/Context;)V
 HSPLandroid/media/AudioManager;->setParameters(Ljava/lang/String;)V
-HPLandroid/media/AudioManager;->setRingerModeInternal(I)V
-PLandroid/media/AudioManager;->setStreamVolume(III)V
-HPLandroid/media/AudioManager;->unregisterAudioFocusRequest(Landroid/media/AudioManager$OnAudioFocusChangeListener;)V
-HPLandroid/media/AudioManager;->unregisterAudioPlaybackCallback(Landroid/media/AudioManager$AudioPlaybackCallback;)V
-HPLandroid/media/AudioManager;->unregisterAudioPolicyAsync(Landroid/media/audiopolicy/AudioPolicy;)V
-HPLandroid/media/AudioManager;->unregisterAudioPolicyAsyncStatic(Landroid/media/audiopolicy/AudioPolicy;)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/AudioManagerInternal;-><init>()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;
 HSPLandroid/media/AudioMixPort;->buildConfig(IIILandroid/media/AudioGainConfig;)Landroid/media/AudioPortConfig;
@@ -13332,37 +7986,9 @@
 HSPLandroid/media/AudioPatch;-><init>(Landroid/media/AudioHandle;[Landroid/media/AudioPortConfig;[Landroid/media/AudioPortConfig;)V
 HSPLandroid/media/AudioPatch;->sinks()[Landroid/media/AudioPortConfig;
 HSPLandroid/media/AudioPatch;->sources()[Landroid/media/AudioPortConfig;
-HSPLandroid/media/AudioPlaybackConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/AudioPlaybackConfiguration;
-HSPLandroid/media/AudioPlaybackConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/media/AudioPlaybackConfiguration$IPlayerShell;-><init>(Landroid/media/AudioPlaybackConfiguration;Landroid/media/IPlayer;)V
-PLandroid/media/AudioPlaybackConfiguration$IPlayerShell;->binderDied()V
-PLandroid/media/AudioPlaybackConfiguration$IPlayerShell;->getIPlayer()Landroid/media/IPlayer;
-HSPLandroid/media/AudioPlaybackConfiguration$IPlayerShell;->monitorDeath()V
-PLandroid/media/AudioPlaybackConfiguration$IPlayerShell;->release()V
-PLandroid/media/AudioPlaybackConfiguration;-><init>(I)V
-HSPLandroid/media/AudioPlaybackConfiguration;-><init>(Landroid/media/PlayerBase$PlayerIdCard;III)V
-HSPLandroid/media/AudioPlaybackConfiguration;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/media/AudioPlaybackConfiguration;-><init>(Landroid/os/Parcel;Landroid/media/AudioPlaybackConfiguration$1;)V
-PLandroid/media/AudioPlaybackConfiguration;->access$300(Landroid/media/AudioPlaybackConfiguration;)V
-PLandroid/media/AudioPlaybackConfiguration;->anonymizedCopy(Landroid/media/AudioPlaybackConfiguration;)Landroid/media/AudioPlaybackConfiguration;
-HSPLandroid/media/AudioPlaybackConfiguration;->getAudioAttributes()Landroid/media/AudioAttributes;
-HSPLandroid/media/AudioPlaybackConfiguration;->getClientPid()I
-HSPLandroid/media/AudioPlaybackConfiguration;->getClientUid()I
-HSPLandroid/media/AudioPlaybackConfiguration;->getPlayerInterfaceId()I
-HSPLandroid/media/AudioPlaybackConfiguration;->getPlayerState()I
-HSPLandroid/media/AudioPlaybackConfiguration;->getPlayerType()I
-PLandroid/media/AudioPlaybackConfiguration;->handleStateEvent(I)Z
-HSPLandroid/media/AudioPlaybackConfiguration;->init()V
-PLandroid/media/AudioPlaybackConfiguration;->isActive()Z
-PLandroid/media/AudioPlaybackConfiguration;->playerDied()V
-PLandroid/media/AudioPlaybackConfiguration;->toLogFriendlyPlayerState(I)Ljava/lang/String;
-PLandroid/media/AudioPlaybackConfiguration;->toLogFriendlyPlayerType(I)Ljava/lang/String;
-PLandroid/media/AudioPlaybackConfiguration;->toLogFriendlyString(Landroid/media/AudioPlaybackConfiguration;)Ljava/lang/String;
-HPLandroid/media/AudioPlaybackConfiguration;->writeToParcel(Landroid/os/Parcel;I)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
-HSPLandroid/media/AudioPort;->name()Ljava/lang/String;
 HSPLandroid/media/AudioPort;->role()I
 HSPLandroid/media/AudioPortConfig;-><init>(Landroid/media/AudioPort;IIILandroid/media/AudioGainConfig;)V
 HSPLandroid/media/AudioPortConfig;->channelMask()I
@@ -13370,515 +7996,121 @@
 HSPLandroid/media/AudioPortConfig;->gain()Landroid/media/AudioGainConfig;
 HSPLandroid/media/AudioPortConfig;->port()Landroid/media/AudioPort;
 HSPLandroid/media/AudioPortConfig;->samplingRate()I
-PLandroid/media/AudioPortEventHandler$1;-><init>(Landroid/media/AudioPortEventHandler;Landroid/os/Looper;)V
+HSPLandroid/media/AudioPortEventHandler$1;-><init>(Landroid/media/AudioPortEventHandler;Landroid/os/Looper;)V
 HSPLandroid/media/AudioPortEventHandler$1;->handleMessage(Landroid/os/Message;)V
-PLandroid/media/AudioPortEventHandler;->access$000(Landroid/media/AudioPortEventHandler;)Ljava/lang/Object;
-PLandroid/media/AudioPortEventHandler;->access$100(Landroid/media/AudioPortEventHandler;)Ljava/util/ArrayList;
-PLandroid/media/AudioPortEventHandler;->handler()Landroid/os/Handler;
+HSPLandroid/media/AudioPortEventHandler;->access$000(Landroid/media/AudioPortEventHandler;)Ljava/lang/Object;
+HSPLandroid/media/AudioPortEventHandler;->access$100(Landroid/media/AudioPortEventHandler;)Ljava/util/ArrayList;
 HSPLandroid/media/AudioPortEventHandler;->init()V
-PLandroid/media/AudioPortEventHandler;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V
 HSPLandroid/media/AudioPortEventHandler;->registerListener(Landroid/media/AudioManager$OnAudioPortUpdateListener;)V
-HSPLandroid/media/AudioRecord;-><init>(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;II)V
-HSPLandroid/media/AudioRecord;->audioBuffSizeCheck(I)V
-HSPLandroid/media/AudioRecord;->audioParamCheck(III)V
-HPLandroid/media/AudioRecord;->finalize()V
-HSPLandroid/media/AudioRecord;->getChannelMaskFromLegacyConfig(IZ)I
-HSPLandroid/media/AudioRecord;->getMinBufferSize(III)I
-HSPLandroid/media/AudioRecord;->getRecordingState()I
-HPLandroid/media/AudioRecord;->getState()I
-HSPLandroid/media/AudioRecord;->handleFullVolumeRec(Z)V
-HPLandroid/media/AudioRecord;->read(Ljava/nio/ByteBuffer;I)I
-HPLandroid/media/AudioRecord;->read(Ljava/nio/ByteBuffer;II)I
-HPLandroid/media/AudioRecord;->read([BII)I
-HSPLandroid/media/AudioRecord;->read([BIII)I
-HPLandroid/media/AudioRecord;->release()V
-HSPLandroid/media/AudioRecord;->startRecording()V
-HPLandroid/media/AudioRecord;->stop()V
-PLandroid/media/AudioRecordingConfiguration$1;-><init>()V
-HPLandroid/media/AudioRecordingConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/AudioRecordingConfiguration;
-HPLandroid/media/AudioRecordingConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/media/AudioRecordingConfiguration;-><clinit>()V
-PLandroid/media/AudioRecordingConfiguration;-><init>(IIILandroid/media/AudioFormat;Landroid/media/AudioFormat;ILjava/lang/String;IZI[Landroid/media/audiofx/AudioEffect$Descriptor;[Landroid/media/audiofx/AudioEffect$Descriptor;)V
-HPLandroid/media/AudioRecordingConfiguration;-><init>(Landroid/os/Parcel;)V
-HPLandroid/media/AudioRecordingConfiguration;-><init>(Landroid/os/Parcel;Landroid/media/AudioRecordingConfiguration$1;)V
-PLandroid/media/AudioRecordingConfiguration;->anonymizedCopy(Landroid/media/AudioRecordingConfiguration;)Landroid/media/AudioRecordingConfiguration;
-PLandroid/media/AudioRecordingConfiguration;->equals(Ljava/lang/Object;)Z
-PLandroid/media/AudioRecordingConfiguration;->getClientAudioSessionId()I
-PLandroid/media/AudioRecordingConfiguration;->getClientAudioSource()I
-PLandroid/media/AudioRecordingConfiguration;->getClientPackageName()Ljava/lang/String;
-PLandroid/media/AudioRecordingConfiguration;->getClientUid()I
-PLandroid/media/AudioRecordingConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/media/AudioRoutesInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/AudioRoutesInfo;
 HSPLandroid/media/AudioRoutesInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/media/AudioRoutesInfo;-><init>()V
-HSPLandroid/media/AudioRoutesInfo;-><init>(Landroid/media/AudioRoutesInfo;)V
-PLandroid/media/AudioRoutesInfo;->toString()Ljava/lang/String;
-PLandroid/media/AudioRoutesInfo;->typeToString(I)Ljava/lang/String;
-PLandroid/media/AudioRoutesInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/media/AudioSystem;->errorCallbackFromNative(I)V
-PLandroid/media/AudioSystem;->forceUseConfigToString(I)Ljava/lang/String;
-PLandroid/media/AudioSystem;->forceUseUsageToString(I)Ljava/lang/String;
-PLandroid/media/AudioSystem;->getDeviceName(I)Ljava/lang/String;
-HSPLandroid/media/AudioSystem;->getNumStreamTypes()I
-HSPLandroid/media/AudioSystem;->getOutputDeviceName(I)Ljava/lang/String;
-HSPLandroid/media/AudioSystem;->getPlatformType(Landroid/content/Context;)I
-HSPLandroid/media/AudioSystem;->getValueForVibrateSetting(III)I
-HSPLandroid/media/AudioSystem;->isSingleVolume(Landroid/content/Context;)Z
-PLandroid/media/AudioSystem;->recordingCallbackFromNative(IIIIIIZ[I[Landroid/media/audiofx/AudioEffect$Descriptor;[Landroid/media/audiofx/AudioEffect$Descriptor;I)V
-PLandroid/media/AudioSystem;->setDynamicPolicyCallback(Landroid/media/AudioSystem$DynamicPolicyCallback;)V
-HSPLandroid/media/AudioSystem;->setErrorCallback(Landroid/media/AudioSystem$ErrorCallback;)V
-HSPLandroid/media/AudioSystem;->setRecordingCallback(Landroid/media/AudioSystem$AudioRecordingCallback;)V
-HSPLandroid/media/AudioSystem;->setStreamVolumeIndexAS(III)I
-PLandroid/media/AudioSystem;->streamToString(I)Ljava/lang/String;
-HPLandroid/media/AudioTimestamp;-><init>()V
-HPLandroid/media/AudioTrack;-><init>(IIIIII)V
-HPLandroid/media/AudioTrack;-><init>(IIIIIII)V
-HPLandroid/media/AudioTrack;-><init>(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;III)V
-HPLandroid/media/AudioTrack;-><init>(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;IIIZ)V
-HPLandroid/media/AudioTrack;->audioBuffSizeCheck(I)V
-HPLandroid/media/AudioTrack;->audioParamCheck(IIIII)V
-HPLandroid/media/AudioTrack;->blockUntilOffloadDrain(I)Z
-HPLandroid/media/AudioTrack;->clampGainOrLevel(F)F
-HPLandroid/media/AudioTrack;->createVolumeShaper(Landroid/media/VolumeShaper$Configuration;)Landroid/media/VolumeShaper;
-HPLandroid/media/AudioTrack;->endStreamEventHandling()V
-HPLandroid/media/AudioTrack;->finalize()V
-HPLandroid/media/AudioTrack;->flush()V
-HPLandroid/media/AudioTrack;->getAudioSessionId()I
-HPLandroid/media/AudioTrack;->getLatency()I
-HSPLandroid/media/AudioTrack;->getMinBufferSize(III)I
-HPLandroid/media/AudioTrack;->getNativeOutputSampleRate(I)I
-HPLandroid/media/AudioTrack;->getPlayState()I
-HPLandroid/media/AudioTrack;->getPlaybackHeadPosition()I
-HPLandroid/media/AudioTrack;->getSampleRate()I
-HPLandroid/media/AudioTrack;->getState()I
-HPLandroid/media/AudioTrack;->getTimestamp(Landroid/media/AudioTimestamp;)Z
-HPLandroid/media/AudioTrack;->pause()V
-HPLandroid/media/AudioTrack;->play()V
-HPLandroid/media/AudioTrack;->playerApplyVolumeShaper(Landroid/media/VolumeShaper$Configuration;Landroid/media/VolumeShaper$Operation;)I
-HPLandroid/media/AudioTrack;->playerSetVolume(ZFF)V
-HPLandroid/media/AudioTrack;->release()V
-HPLandroid/media/AudioTrack;->setStereoVolume(FF)I
-HPLandroid/media/AudioTrack;->setVolume(F)I
-HPLandroid/media/AudioTrack;->shouldEnablePowerSaving(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;II)Z
-HPLandroid/media/AudioTrack;->startImpl()V
-HPLandroid/media/AudioTrack;->stop()V
-HPLandroid/media/AudioTrack;->write(Ljava/nio/ByteBuffer;II)I
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;-><init>(Ljava/io/InputStream;)V
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;-><init>([B)V
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->access$1000(Landroid/media/ExifInterface$ByteOrderedDataInputStream;)I
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->access$900(Landroid/media/ExifInterface$ByteOrderedDataInputStream;)I
-HPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->available()I
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->peek()I
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->read()I
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->readByte()B
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->readFully([B)V
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->readInt()I
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->readShort()S
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->readUnsignedInt()J
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->readUnsignedShort()I
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->seek(J)V
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->setByteOrder(Ljava/nio/ByteOrder;)V
-HSPLandroid/media/ExifInterface$ByteOrderedDataInputStream;->skipBytes(I)I
-HSPLandroid/media/ExifInterface$ExifAttribute;-><init>(IIJ[B)V
-HSPLandroid/media/ExifInterface$ExifAttribute;-><init>(IIJ[BLandroid/media/ExifInterface$1;)V
-HSPLandroid/media/ExifInterface$ExifAttribute;-><init>(II[B)V
-HSPLandroid/media/ExifInterface$ExifAttribute;->createString(Ljava/lang/String;)Landroid/media/ExifInterface$ExifAttribute;
-HSPLandroid/media/ExifInterface$ExifAttribute;->createULong(JLjava/nio/ByteOrder;)Landroid/media/ExifInterface$ExifAttribute;
-HSPLandroid/media/ExifInterface$ExifAttribute;->createULong([JLjava/nio/ByteOrder;)Landroid/media/ExifInterface$ExifAttribute;
-HSPLandroid/media/ExifInterface$ExifAttribute;->createUShort([ILjava/nio/ByteOrder;)Landroid/media/ExifInterface$ExifAttribute;
-HSPLandroid/media/ExifInterface$ExifAttribute;->getIntValue(Ljava/nio/ByteOrder;)I
-HSPLandroid/media/ExifInterface$ExifAttribute;->getStringValue(Ljava/nio/ByteOrder;)Ljava/lang/String;
-HSPLandroid/media/ExifInterface$ExifAttribute;->getValue(Ljava/nio/ByteOrder;)Ljava/lang/Object;
-HSPLandroid/media/ExifInterface$ExifAttribute;->size()I
-HSPLandroid/media/ExifInterface;-><init>(Ljava/io/InputStream;)V
-HSPLandroid/media/ExifInterface;-><init>(Ljava/io/InputStream;Z)V
-HSPLandroid/media/ExifInterface;-><init>(Ljava/lang/String;)V
-HSPLandroid/media/ExifInterface;->access$000()[I
-HSPLandroid/media/ExifInterface;->access$100()Ljava/nio/charset/Charset;
-HSPLandroid/media/ExifInterface;->addDefaultValuesForCompatibility()V
-HSPLandroid/media/ExifInterface;->getAttribute(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/media/ExifInterface;->getAttributeInt(Ljava/lang/String;I)I
-HSPLandroid/media/ExifInterface;->getExifAttribute(Ljava/lang/String;)Landroid/media/ExifInterface$ExifAttribute;
-HSPLandroid/media/ExifInterface;->getJpegAttributes(Landroid/media/ExifInterface$ByteOrderedDataInputStream;II)V
-HSPLandroid/media/ExifInterface;->getMimeType(Ljava/io/BufferedInputStream;)I
-HSPLandroid/media/ExifInterface;->getPngAttributes(Landroid/media/ExifInterface$ByteOrderedDataInputStream;)V
-HPLandroid/media/ExifInterface;->getRawAttributes(Landroid/media/ExifInterface$ByteOrderedDataInputStream;)V
-HSPLandroid/media/ExifInterface;->getThumbnail()[B
-HSPLandroid/media/ExifInterface;->guessDataFormat(Ljava/lang/String;)Landroid/util/Pair;
-HSPLandroid/media/ExifInterface;->handleThumbnailFromJfif(Landroid/media/ExifInterface$ByteOrderedDataInputStream;Ljava/util/HashMap;)V
-HSPLandroid/media/ExifInterface;->initForFilename(Ljava/lang/String;)V
-HSPLandroid/media/ExifInterface;->isHeifFormat([B)Z
-HSPLandroid/media/ExifInterface;->isOrfFormat([B)Z
-HSPLandroid/media/ExifInterface;->isRw2Format([B)Z
-HSPLandroid/media/ExifInterface;->isSeekableFD(Ljava/io/FileDescriptor;)Z
-HPLandroid/media/ExifInterface;->isWebpFormat([B)Z
-HSPLandroid/media/ExifInterface;->loadAttributes(Ljava/io/InputStream;)V
-HSPLandroid/media/ExifInterface;->parseTiffHeaders(Landroid/media/ExifInterface$ByteOrderedDataInputStream;I)V
-HSPLandroid/media/ExifInterface;->readByteOrder(Landroid/media/ExifInterface$ByteOrderedDataInputStream;)Ljava/nio/ByteOrder;
-HSPLandroid/media/ExifInterface;->readImageFileDirectory(Landroid/media/ExifInterface$ByteOrderedDataInputStream;I)V
-HSPLandroid/media/ExifInterface;->removeAttribute(Ljava/lang/String;)V
-HSPLandroid/media/ExifInterface;->saveAttributes()V
-HSPLandroid/media/ExifInterface;->saveJpegAttributes(Ljava/io/InputStream;Ljava/io/OutputStream;)V
-HSPLandroid/media/ExifInterface;->setAttribute(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/media/ExifInterface;->setThumbnailData(Landroid/media/ExifInterface$ByteOrderedDataInputStream;)V
-HSPLandroid/media/ExifInterface;->writeExifSegment(Landroid/media/ExifInterface$ByteOrderedDataOutputStream;)I
-PLandroid/media/IAudioFocusDispatcher$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/IAudioFocusDispatcher$Stub$Proxy;->dispatchAudioFocusChange(ILjava/lang/String;)V
+HSPLandroid/media/AudioRoutesInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/media/IAudioFocusDispatcher$Stub;-><init>()V
-HPLandroid/media/IAudioFocusDispatcher$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/media/IAudioFocusDispatcher$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioFocusDispatcher;
-HPLandroid/media/IAudioFocusDispatcher$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/media/IAudioRoutesObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/IAudioRoutesObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/media/IAudioRoutesObserver$Stub$Proxy;->dispatchAudioRoutesChanged(Landroid/media/AudioRoutesInfo;)V
 HSPLandroid/media/IAudioRoutesObserver$Stub;-><init>()V
 HSPLandroid/media/IAudioRoutesObserver$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/media/IAudioRoutesObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioRoutesObserver;
-HPLandroid/media/IAudioRoutesObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/media/IAudioServerStateDispatcher$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/IAudioServerStateDispatcher$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/media/IAudioServerStateDispatcher$Stub;-><init>()V
-PLandroid/media/IAudioServerStateDispatcher$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioServerStateDispatcher;
-HPLandroid/media/IAudioService$Stub$Proxy;->abandonAudioFocus(Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Landroid/media/AudioAttributes;Ljava/lang/String;)I
-HSPLandroid/media/IAudioService$Stub$Proxy;->forceRemoteSubmixFullVolume(ZLandroid/os/IBinder;)V
-HPLandroid/media/IAudioService$Stub$Proxy;->forceVolumeControlStream(ILandroid/os/IBinder;)V
-HSPLandroid/media/IAudioService$Stub$Proxy;->getActivePlaybackConfigurations()Ljava/util/List;
-HPLandroid/media/IAudioService$Stub$Proxy;->getActiveRecordingConfigurations()Ljava/util/List;
-HPLandroid/media/IAudioService$Stub$Proxy;->getLastAudibleStreamVolume(I)I
-HSPLandroid/media/IAudioService$Stub$Proxy;->getMode()I
-HSPLandroid/media/IAudioService$Stub$Proxy;->getRingerModeExternal()I
-HSPLandroid/media/IAudioService$Stub$Proxy;->getRingerModeInternal()I
+HSPLandroid/media/IAudioService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/media/IAudioService$Stub$Proxy;->getStreamMaxVolume(I)I
-HSPLandroid/media/IAudioService$Stub$Proxy;->getStreamMinVolume(I)I
 HSPLandroid/media/IAudioService$Stub$Proxy;->getStreamVolume(I)I
-HPLandroid/media/IAudioService$Stub$Proxy;->getUiSoundsStreamType()I
-HPLandroid/media/IAudioService$Stub$Proxy;->isAudioServerRunning()Z
-HPLandroid/media/IAudioService$Stub$Proxy;->isBluetoothA2dpOn()Z
-HSPLandroid/media/IAudioService$Stub$Proxy;->isBluetoothScoOn()Z
-HSPLandroid/media/IAudioService$Stub$Proxy;->isCameraSoundForced()Z
-HSPLandroid/media/IAudioService$Stub$Proxy;->isSpeakerphoneOn()Z
-HPLandroid/media/IAudioService$Stub$Proxy;->isStreamMute(I)Z
-HPLandroid/media/IAudioService$Stub$Proxy;->notifyVolumeControllerVisible(Landroid/media/IVolumeController;Z)V
-HPLandroid/media/IAudioService$Stub$Proxy;->playSoundEffect(I)V
-HPLandroid/media/IAudioService$Stub$Proxy;->playerAttributes(ILandroid/media/AudioAttributes;)V
-PLandroid/media/IAudioService$Stub$Proxy;->playerEvent(II)V
-HSPLandroid/media/IAudioService$Stub$Proxy;->registerAudioPolicy(Landroid/media/audiopolicy/AudioPolicyConfig;Landroid/media/audiopolicy/IAudioPolicyCallback;ZZZZLandroid/media/projection/IMediaProjection;)Ljava/lang/String;
-HSPLandroid/media/IAudioService$Stub$Proxy;->registerPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;)V
-HSPLandroid/media/IAudioService$Stub$Proxy;->registerRecordingCallback(Landroid/media/IRecordingConfigDispatcher;)V
-HSPLandroid/media/IAudioService$Stub$Proxy;->releasePlayer(I)V
-HPLandroid/media/IAudioService$Stub$Proxy;->requestAudioFocus(Landroid/media/AudioAttributes;ILandroid/os/IBinder;Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Ljava/lang/String;ILandroid/media/audiopolicy/IAudioPolicyCallback;I)I
-HPLandroid/media/IAudioService$Stub$Proxy;->setRingerModeInternal(ILjava/lang/String;)V
-PLandroid/media/IAudioService$Stub$Proxy;->setStreamVolume(IIILjava/lang/String;)V
+HSPLandroid/media/IAudioService$Stub$Proxy;->playSoundEffect(I)V
 HSPLandroid/media/IAudioService$Stub$Proxy;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo;
 HSPLandroid/media/IAudioService$Stub$Proxy;->trackPlayer(Landroid/media/PlayerBase$PlayerIdCard;)I
-HPLandroid/media/IAudioService$Stub$Proxy;->unregisterAudioPolicyAsync(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
-HPLandroid/media/IAudioService$Stub$Proxy;->unregisterPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;)V
-HSPLandroid/media/IAudioService$Stub;-><init>()V
 HSPLandroid/media/IAudioService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioService;
-PLandroid/media/IAudioService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/media/IAudioService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/media/IMediaResourceMonitor$Stub;-><init>()V
-PLandroid/media/IMediaResourceMonitor$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/media/IMediaResourceMonitor$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/media/IMediaRouterClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/IMediaRouterClient$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/media/IMediaRouterClient$Stub$Proxy;->onRestoreRoute()V
-PLandroid/media/IMediaRouterClient$Stub$Proxy;->onStateChanged()V
 HSPLandroid/media/IMediaRouterClient$Stub;-><init>()V
 HSPLandroid/media/IMediaRouterClient$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/media/IMediaRouterClient$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IMediaRouterClient;
-PLandroid/media/IMediaRouterClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/media/IMediaRouterService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/media/IMediaRouterService$Stub$Proxy;->getState(Landroid/media/IMediaRouterClient;)Landroid/media/MediaRouterClientState;
 HSPLandroid/media/IMediaRouterService$Stub$Proxy;->isPlaybackActive(Landroid/media/IMediaRouterClient;)Z
 HSPLandroid/media/IMediaRouterService$Stub$Proxy;->registerClientAsUser(Landroid/media/IMediaRouterClient;Ljava/lang/String;I)V
-HSPLandroid/media/IMediaRouterService$Stub$Proxy;->registerClientGroupId(Landroid/media/IMediaRouterClient;Ljava/lang/String;)V
 HSPLandroid/media/IMediaRouterService$Stub$Proxy;->setDiscoveryRequest(Landroid/media/IMediaRouterClient;IZ)V
 HSPLandroid/media/IMediaRouterService$Stub$Proxy;->setSelectedRoute(Landroid/media/IMediaRouterClient;Ljava/lang/String;Z)V
-HSPLandroid/media/IMediaRouterService$Stub;-><init>()V
 HSPLandroid/media/IMediaRouterService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IMediaRouterService;
-PLandroid/media/IMediaRouterService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/media/IMediaRouterService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/media/IPlaybackConfigDispatcher$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/IPlaybackConfigDispatcher$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/media/IPlaybackConfigDispatcher$Stub$Proxy;->dispatchPlaybackConfigChange(Ljava/util/List;Z)V
 HSPLandroid/media/IPlaybackConfigDispatcher$Stub;-><init>()V
 HSPLandroid/media/IPlaybackConfigDispatcher$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/media/IPlaybackConfigDispatcher$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IPlaybackConfigDispatcher;
-HPLandroid/media/IPlaybackConfigDispatcher$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/media/IPlayer$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/IPlayer$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/media/IPlayer$Stub;-><init>()V
 HSPLandroid/media/IPlayer$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/media/IPlayer$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IPlayer;
-PLandroid/media/IRecordingConfigDispatcher$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/IRecordingConfigDispatcher$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/media/IRecordingConfigDispatcher$Stub$Proxy;->dispatchRecordingConfigChange(Ljava/util/List;)V
 HSPLandroid/media/IRecordingConfigDispatcher$Stub;-><init>()V
-HSPLandroid/media/IRecordingConfigDispatcher$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/media/IRecordingConfigDispatcher$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IRecordingConfigDispatcher;
-HPLandroid/media/IRecordingConfigDispatcher$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/media/IRemoteVolumeController$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/IRemoteVolumeController$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/media/IRemoteVolumeController$Stub$Proxy;->updateRemoteController(Landroid/media/session/MediaSession$Token;)V
-HSPLandroid/media/IRemoteVolumeController$Stub;-><init>()V
-PLandroid/media/IRemoteVolumeController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IRemoteVolumeController;
-HPLandroid/media/IRemoteVolumeController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/media/IRemoteVolumeObserver$Stub;-><init>()V
-PLandroid/media/IRingtonePlayer$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/IRingtonePlayer$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/media/IRingtonePlayer$Stub$Proxy;->stopAsync()V
-PLandroid/media/IRingtonePlayer$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IRingtonePlayer;
-HPLandroid/media/IRingtonePlayer$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/media/IVolumeController$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/IVolumeController$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/media/IVolumeController$Stub$Proxy;->setLayoutDirection(I)V
-PLandroid/media/IVolumeController$Stub$Proxy;->volumeChanged(II)V
-HPLandroid/media/IVolumeController$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/media/IVolumeController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IVolumeController;
-HPLandroid/media/IVolumeController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/media/MediaCodec$BufferInfo;-><init>()V
-HPLandroid/media/MediaCodec$BufferInfo;->set(IIJI)V
-HPLandroid/media/MediaCodec$BufferMap$CodecBuffer;-><init>()V
-HPLandroid/media/MediaCodec$BufferMap$CodecBuffer;-><init>(Landroid/media/MediaCodec$1;)V
-HPLandroid/media/MediaCodec$BufferMap$CodecBuffer;->free()V
-HPLandroid/media/MediaCodec$BufferMap$CodecBuffer;->setByteBuffer(Ljava/nio/ByteBuffer;)V
-HPLandroid/media/MediaCodec$BufferMap;->clear()V
-HPLandroid/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
-HPLandroid/media/MediaCodec$CryptoInfo;->set(I[I[I[B[BI)V
-HPLandroid/media/MediaCodec$CryptoInfo;->setPattern(Landroid/media/MediaCodec$CryptoInfo$Pattern;)V
-HSPLandroid/media/MediaCodec;-><init>(Ljava/lang/String;ZZ)V
-HSPLandroid/media/MediaCodec;->cacheBuffers(Z)V
-HSPLandroid/media/MediaCodec;->configure(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;I)V
-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
-HPLandroid/media/MediaCodec;->finalize()V
-HPLandroid/media/MediaCodec;->flush()V
-HPLandroid/media/MediaCodec;->freeAllTrackedBuffers()V
-HPLandroid/media/MediaCodec;->getInputBuffer(I)Ljava/nio/ByteBuffer;
-HSPLandroid/media/MediaCodec;->getInputBuffers()[Ljava/nio/ByteBuffer;
-HPLandroid/media/MediaCodec;->getOutputBuffer(I)Ljava/nio/ByteBuffer;
-HSPLandroid/media/MediaCodec;->getOutputBuffers()[Ljava/nio/ByteBuffer;
-HSPLandroid/media/MediaCodec;->getOutputFormat()Landroid/media/MediaFormat;
-HPLandroid/media/MediaCodec;->invalidateByteBuffer([Ljava/nio/ByteBuffer;I)V
-HPLandroid/media/MediaCodec;->invalidateByteBuffers([Ljava/nio/ByteBuffer;)V
-HSPLandroid/media/MediaCodec;->lockAndGetContext()J
-HSPLandroid/media/MediaCodec;->queueInputBuffer(IIIJI)V
-HPLandroid/media/MediaCodec;->queueSecureInputBuffer(IILandroid/media/MediaCodec$CryptoInfo;JI)V
-HPLandroid/media/MediaCodec;->release()V
-HPLandroid/media/MediaCodec;->releaseOutputBuffer(IJ)V
-HPLandroid/media/MediaCodec;->releaseOutputBuffer(IZ)V
-HSPLandroid/media/MediaCodec;->setAndUnlockContext(J)V
-HPLandroid/media/MediaCodec;->setOutputSurface(Landroid/view/Surface;)V
-HSPLandroid/media/MediaCodec;->start()V
-HPLandroid/media/MediaCodec;->stop()V
+HSPLandroid/media/MediaCodecInfo$AudioCapabilities;-><init>()V
 HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->applyLevelLimits()V
 HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->applyLimits(ILandroid/util/Range;)V
+HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->create(Landroid/media/MediaFormat;Landroid/media/MediaCodecInfo$CodecCapabilities;)Landroid/media/MediaCodecInfo$AudioCapabilities;
 HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->createDiscreteSampleRates()V
 HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->getDefaultFormat(Landroid/media/MediaFormat;)V
-HPLandroid/media/MediaCodecInfo$AudioCapabilities;->getMaxInputChannelCount()I
+HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->init(Landroid/media/MediaFormat;Landroid/media/MediaCodecInfo$CodecCapabilities;)V
 HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->initWithPlatformLimits()V
-HPLandroid/media/MediaCodecInfo$AudioCapabilities;->isSampleRateSupported(I)Z
 HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->limitSampleRates([I)V
 HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->limitSampleRates([Landroid/util/Range;)V
 HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->parseFromInfo(Landroid/media/MediaFormat;)V
-HPLandroid/media/MediaCodecInfo$AudioCapabilities;->supports(Ljava/lang/Integer;Ljava/lang/Integer;)Z
-HSPLandroid/media/MediaCodecInfo$CodecCapabilities;-><init>()V
+HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->supports(Ljava/lang/Integer;Ljava/lang/Integer;)Z
 HSPLandroid/media/MediaCodecInfo$CodecCapabilities;-><init>([Landroid/media/MediaCodecInfo$CodecProfileLevel;[IZLandroid/media/MediaFormat;Landroid/media/MediaFormat;)V
 HSPLandroid/media/MediaCodecInfo$CodecCapabilities;-><init>([Landroid/media/MediaCodecInfo$CodecProfileLevel;[IZLjava/util/Map;Ljava/util/Map;)V
 HSPLandroid/media/MediaCodecInfo$CodecCapabilities;->checkFeature(Ljava/lang/String;I)Z
-HSPLandroid/media/MediaCodecInfo$CodecCapabilities;->dup()Landroid/media/MediaCodecInfo$CodecCapabilities;
-HPLandroid/media/MediaCodecInfo$CodecCapabilities;->getAudioCapabilities()Landroid/media/MediaCodecInfo$AudioCapabilities;
 HSPLandroid/media/MediaCodecInfo$CodecCapabilities;->getMimeType()Ljava/lang/String;
 HSPLandroid/media/MediaCodecInfo$CodecCapabilities;->getValidFeatures()[Landroid/media/MediaCodecInfo$Feature;
-HSPLandroid/media/MediaCodecInfo$CodecCapabilities;->getVideoCapabilities()Landroid/media/MediaCodecInfo$VideoCapabilities;
 HSPLandroid/media/MediaCodecInfo$CodecCapabilities;->isEncoder()Z
 HSPLandroid/media/MediaCodecInfo$CodecCapabilities;->isFeatureRequired(Ljava/lang/String;)Z
-HSPLandroid/media/MediaCodecInfo$CodecCapabilities;->isFeatureSupported(Ljava/lang/String;)Z
+HSPLandroid/media/MediaCodecInfo$CodecCapabilities;->isRegular()Z
+HSPLandroid/media/MediaCodecInfo$EncoderCapabilities;-><init>()V
 HSPLandroid/media/MediaCodecInfo$EncoderCapabilities;->applyLevelLimits()V
+HSPLandroid/media/MediaCodecInfo$EncoderCapabilities;->create(Landroid/media/MediaFormat;Landroid/media/MediaCodecInfo$CodecCapabilities;)Landroid/media/MediaCodecInfo$EncoderCapabilities;
 HSPLandroid/media/MediaCodecInfo$EncoderCapabilities;->getDefaultFormat(Landroid/media/MediaFormat;)V
+HSPLandroid/media/MediaCodecInfo$EncoderCapabilities;->init(Landroid/media/MediaFormat;Landroid/media/MediaCodecInfo$CodecCapabilities;)V
+HSPLandroid/media/MediaCodecInfo$EncoderCapabilities;->parseBitrateMode(Ljava/lang/String;)I
 HSPLandroid/media/MediaCodecInfo$EncoderCapabilities;->parseFromInfo(Landroid/media/MediaFormat;)V
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;-><init>(IIIILandroid/util/Size;)V
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;-><init>(Landroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;Landroid/util/Size;)V
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;->covers(Landroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;)Z
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;->getCommonBlockSize(Landroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;)Landroid/util/Size;
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;->getMaxMacroBlocks()I
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;->saturateLongToInt(J)I
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities;-><init>()V
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->applyAlignment(II)V
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->applyBlockLimits(IILandroid/util/Range;Landroid/util/Range;Landroid/util/Range;)V
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->applyLevelLimits()V
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->applyMacroBlockLimits(IIIIIJIIII)V
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->applyMacroBlockLimits(IIIJIIII)V
-HPLandroid/media/MediaCodecInfo$VideoCapabilities;->areSizeAndRateSupported(IID)Z
-HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->estimateFrameRatesFor(II)Landroid/util/Range;
-HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->findClosestSize(II)Landroid/util/Size;
-HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->getAchievableFrameRatesFor(II)Landroid/util/Range;
-HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->getBlockCount(II)I
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->create(Landroid/media/MediaFormat;Landroid/media/MediaCodecInfo$CodecCapabilities;)Landroid/media/MediaCodecInfo$VideoCapabilities;
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->getMeasuredFrameRates(Ljava/util/Map;)Ljava/util/Map;
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->getPerformancePoints(Ljava/util/Map;)Ljava/util/List;
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->init(Landroid/media/MediaFormat;Landroid/media/MediaCodecInfo$CodecCapabilities;)V
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->initWithPlatformLimits()V
-HPLandroid/media/MediaCodecInfo$VideoCapabilities;->isSizeSupported(II)Z
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->lambda$getPerformancePoints$0(Landroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;Landroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;)I
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->parseFromInfo(Landroid/media/MediaFormat;)V
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->parseWidthHeightRanges(Ljava/lang/Object;)Landroid/util/Pair;
-HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->supports(Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Number;)Z
 HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->updateLimits()V
 HSPLandroid/media/MediaCodecInfo;-><init>(Ljava/lang/String;Ljava/lang/String;I[Landroid/media/MediaCodecInfo$CodecCapabilities;)V
+HSPLandroid/media/MediaCodecInfo;->access$000()Landroid/util/Range;
+HSPLandroid/media/MediaCodecInfo;->access$200(ILjava/lang/String;)I
+HSPLandroid/media/MediaCodecInfo;->access$300()Landroid/util/Range;
+HSPLandroid/media/MediaCodecInfo;->access$400()Landroid/util/Range;
+HSPLandroid/media/MediaCodecInfo;->access$500()Landroid/util/Range;
+HSPLandroid/media/MediaCodecInfo;->access$600()Landroid/util/Range;
+HSPLandroid/media/MediaCodecInfo;->access$700()Landroid/util/Range;
 HSPLandroid/media/MediaCodecInfo;->checkPowerOfTwo(ILjava/lang/String;)I
-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;->isEncoder()Z
-HSPLandroid/media/MediaCodecInfo;->isHardwareAccelerated()Z
-HSPLandroid/media/MediaCodecInfo;->isSoftwareOnly()Z
-HSPLandroid/media/MediaCodecInfo;->isVendor()Z
 HSPLandroid/media/MediaCodecInfo;->makeRegular()Landroid/media/MediaCodecInfo;
 HSPLandroid/media/MediaCodecList;-><init>(I)V
-HPLandroid/media/MediaCodecList;->getCodecCount()I
-HPLandroid/media/MediaCodecList;->getCodecInfoAt(I)Landroid/media/MediaCodecInfo;
 HSPLandroid/media/MediaCodecList;->getCodecInfos()[Landroid/media/MediaCodecInfo;
-HSPLandroid/media/MediaCodecList;->getGlobalSettings()Ljava/util/Map;
-HSPLandroid/media/MediaCodecList;->getNewCodecInfoAt(I)Landroid/media/MediaCodecInfo;
-HSPLandroid/media/MediaCodecList;->initCodecList()V
-HSPLandroid/media/MediaCrypto;-><init>(Ljava/util/UUID;[B)V
-HPLandroid/media/MediaCrypto;->finalize()V
-HSPLandroid/media/MediaCrypto;->getByteArrayFromUUID(Ljava/util/UUID;)[B
-HSPLandroid/media/MediaDescription;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/graphics/Bitmap;Landroid/net/Uri;Landroid/os/Bundle;Landroid/net/Uri;)V
-HSPLandroid/media/MediaDescription;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/graphics/Bitmap;Landroid/net/Uri;Landroid/os/Bundle;Landroid/net/Uri;Landroid/media/MediaDescription$1;)V
-HSPLandroid/media/MediaDescription;->toString()Ljava/lang/String;
-HSPLandroid/media/MediaDrm$KeyRequest;->getData()[B
-HPLandroid/media/MediaDrm$KeyStatus;-><init>([BI)V
-HPLandroid/media/MediaDrm$MediaDrmStateException;-><init>(ILjava/lang/String;)V
-HSPLandroid/media/MediaDrm;-><init>(Ljava/util/UUID;)V
-HSPLandroid/media/MediaDrm;->access$100(Landroid/media/MediaDrm;[BLjava/lang/String;)V
-HSPLandroid/media/MediaDrm;->access$200(Landroid/media/MediaDrm;[BLjava/lang/String;)V
-HSPLandroid/media/MediaDrm;->access$300(Landroid/media/MediaDrm;[B[B[B[B)[B
-HSPLandroid/media/MediaDrm;->access$400(Landroid/media/MediaDrm;[B[B[B[B)[B
-HSPLandroid/media/MediaDrm;->access$500(Landroid/media/MediaDrm;[B[B[B)[B
-HSPLandroid/media/MediaDrm;->access$600(Landroid/media/MediaDrm;[B[B[B[B)Z
-HSPLandroid/media/MediaDrm;->close()V
-HSPLandroid/media/MediaDrm;->createHandler()Landroid/os/Handler;
-HSPLandroid/media/MediaDrm;->createOnEventListener(Landroid/media/MediaDrm$OnEventListener;)Ljava/util/function/Consumer;
-HSPLandroid/media/MediaDrm;->finalize()V
-HSPLandroid/media/MediaDrm;->getByteArrayFromUUID(Ljava/util/UUID;)[B
-HSPLandroid/media/MediaDrm;->getCryptoSession([BLjava/lang/String;Ljava/lang/String;)Landroid/media/MediaDrm$CryptoSession;
-HSPLandroid/media/MediaDrm;->getMaxSecurityLevel()I
-HSPLandroid/media/MediaDrm;->isCryptoSchemeSupported(Ljava/util/UUID;)Z
-HSPLandroid/media/MediaDrm;->lambda$IvEWhXQgSYABwC6_1bdnhTJ4V2I(Landroid/media/MediaDrm;Landroid/media/MediaDrm$OnEventListener;)Ljava/util/function/Consumer;
-HSPLandroid/media/MediaDrm;->openSession()[B
-HSPLandroid/media/MediaDrm;->postEventFromNative(Ljava/lang/Object;III[B[BJLjava/util/List;Z)V
-HSPLandroid/media/MediaDrm;->release()V
-HSPLandroid/media/MediaDrm;->setGenericListener(ILjava/util/concurrent/Executor;Ljava/lang/Object;Ljava/util/function/Function;)V
-HSPLandroid/media/MediaDrm;->setListenerWithHandler(ILandroid/os/Handler;Ljava/lang/Object;Ljava/util/function/Function;)V
-HSPLandroid/media/MediaDrm;->setOnEventListener(Landroid/media/MediaDrm$OnEventListener;)V
-HSPLandroid/media/MediaDrm;->setOnEventListener(Landroid/media/MediaDrm$OnEventListener;Landroid/os/Handler;)V
 HSPLandroid/media/MediaFormat;-><init>()V
 HSPLandroid/media/MediaFormat;-><init>(Ljava/util/Map;)V
-HPLandroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z
-PLandroid/media/MediaFormat;->createSubtitleFormat(Ljava/lang/String;Ljava/lang/String;)Landroid/media/MediaFormat;
-HSPLandroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
+HSPLandroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z
+HSPLandroid/media/MediaFormat;->getMap()Ljava/util/Map;
 HSPLandroid/media/MediaFormat;->getString(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/media/MediaFormat;->setByteBuffer(Ljava/lang/String;Ljava/nio/ByteBuffer;)V
-HPLandroid/media/MediaFormat;->setFloat(Ljava/lang/String;F)V
 HSPLandroid/media/MediaFormat;->setInteger(Ljava/lang/String;I)V
-HSPLandroid/media/MediaFormat;->setLong(Ljava/lang/String;J)V
 HSPLandroid/media/MediaFormat;->setString(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/media/MediaMetadata$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/MediaMetadata;
 HSPLandroid/media/MediaMetadata$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/media/MediaMetadata$Builder;-><init>()V
-HSPLandroid/media/MediaMetadata$Builder;-><init>(Landroid/media/MediaMetadata;)V
-HSPLandroid/media/MediaMetadata$Builder;-><init>(Landroid/media/MediaMetadata;I)V
-HSPLandroid/media/MediaMetadata$Builder;->build()Landroid/media/MediaMetadata;
-HPLandroid/media/MediaMetadata$Builder;->putBitmap(Ljava/lang/String;Landroid/graphics/Bitmap;)Landroid/media/MediaMetadata$Builder;
-HPLandroid/media/MediaMetadata$Builder;->putText(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/media/MediaMetadata$Builder;
-PLandroid/media/MediaMetadata;-><init>(Landroid/os/Parcel;)V
-PLandroid/media/MediaMetadata;-><init>(Landroid/os/Parcel;Landroid/media/MediaMetadata$1;)V
-HPLandroid/media/MediaMetadata;->access$200()Landroid/util/ArrayMap;
-HSPLandroid/media/MediaMetadata;->containsKey(Ljava/lang/String;)Z
-HSPLandroid/media/MediaMetadata;->getBitmap(Ljava/lang/String;)Landroid/graphics/Bitmap;
-HSPLandroid/media/MediaMetadata;->getDescription()Landroid/media/MediaDescription;
-HSPLandroid/media/MediaMetadata;->getLong(Ljava/lang/String;)J
-HSPLandroid/media/MediaMetadata;->getString(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/media/MediaMetadata;->getText(Ljava/lang/String;)Ljava/lang/CharSequence;
-HSPLandroid/media/MediaMetadata;->size()I
-HSPLandroid/media/MediaMetadata;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/media/MediaMetadataRetriever;-><init>()V
-HSPLandroid/media/MediaMetadataRetriever;->finalize()V
-PLandroid/media/MediaPlayer$2$1;-><init>(Landroid/media/MediaPlayer$2;)V
-PLandroid/media/MediaPlayer$2$1;->getSubtitleLooper()Landroid/os/Looper;
-PLandroid/media/MediaPlayer$2$1;->setSubtitleWidget(Landroid/media/SubtitleTrack$RenderingWidget;)V
-PLandroid/media/MediaPlayer$2;-><init>(Landroid/media/MediaPlayer;Landroid/media/MediaPlayer$TimeProvider;Landroid/os/HandlerThread;)V
-PLandroid/media/MediaPlayer$2;->run()V
-PLandroid/media/MediaPlayer$3;-><init>(Landroid/media/MediaPlayer;)V
-PLandroid/media/MediaPlayer$7;-><init>(Landroid/media/MediaPlayer;)V
-PLandroid/media/MediaPlayer$EventHandler;-><init>(Landroid/media/MediaPlayer;Landroid/media/MediaPlayer;Landroid/os/Looper;)V
-PLandroid/media/MediaPlayer$EventHandler;->handleMessage(Landroid/os/Message;)V
-PLandroid/media/MediaPlayer$TimeProvider$EventHandler;-><init>(Landroid/media/MediaPlayer$TimeProvider;Landroid/os/Looper;)V
-HPLandroid/media/MediaPlayer$TimeProvider$EventHandler;->handleMessage(Landroid/os/Message;)V
-HSPLandroid/media/MediaPlayer$TimeProvider;-><init>(Landroid/media/MediaPlayer;)V
-PLandroid/media/MediaPlayer$TimeProvider;->access$200(Landroid/media/MediaPlayer$TimeProvider;)Landroid/os/Handler;
-HSPLandroid/media/MediaPlayer$TimeProvider;->close()V
-HSPLandroid/media/MediaPlayer$TimeProvider;->finalize()V
-HSPLandroid/media/MediaPlayer$TimeProvider;->getCurrentTimeUs(ZZ)J
-HPLandroid/media/MediaPlayer$TimeProvider;->notifySeek()V
-HPLandroid/media/MediaPlayer$TimeProvider;->onPaused(Z)V
-HPLandroid/media/MediaPlayer$TimeProvider;->scheduleNotification(IJ)V
-PLandroid/media/MediaPlayer$TrackInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/MediaPlayer$TrackInfo;
-PLandroid/media/MediaPlayer$TrackInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/media/MediaPlayer$TrackInfo$1;->newArray(I)[Landroid/media/MediaPlayer$TrackInfo;
-PLandroid/media/MediaPlayer$TrackInfo$1;->newArray(I)[Ljava/lang/Object;
-PLandroid/media/MediaPlayer$TrackInfo;-><init>(Landroid/os/Parcel;)V
-PLandroid/media/MediaPlayer$TrackInfo;->getTrackType()I
-HSPLandroid/media/MediaPlayer;-><init>()V
-PLandroid/media/MediaPlayer;->access$100(Landroid/media/MediaPlayer;)Landroid/media/SubtitleController;
-PLandroid/media/MediaPlayer;->access$1000(Landroid/media/MediaPlayer;)Landroid/media/MediaPlayer$OnPreparedListener;
-PLandroid/media/MediaPlayer;->access$102(Landroid/media/MediaPlayer;Landroid/media/SubtitleController;)Landroid/media/SubtitleController;
-PLandroid/media/MediaPlayer;->access$800(Landroid/media/MediaPlayer;)J
-PLandroid/media/MediaPlayer;->access$900(Landroid/media/MediaPlayer;)V
-HSPLandroid/media/MediaPlayer;->attemptDataSource(Landroid/content/ContentResolver;Landroid/net/Uri;)Z
-HSPLandroid/media/MediaPlayer;->cleanDrmObj()V
-HSPLandroid/media/MediaPlayer;->finalize()V
-PLandroid/media/MediaPlayer;->getInbandTrackInfo()[Landroid/media/MediaPlayer$TrackInfo;
-PLandroid/media/MediaPlayer;->getMediaTimeProvider()Landroid/media/MediaTimeProvider;
-PLandroid/media/MediaPlayer;->invoke(Landroid/os/Parcel;Landroid/os/Parcel;)V
-PLandroid/media/MediaPlayer;->playerSetVolume(ZFF)V
-PLandroid/media/MediaPlayer;->populateInbandTracks()V
-PLandroid/media/MediaPlayer;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V
-PLandroid/media/MediaPlayer;->prepare()V
-HSPLandroid/media/MediaPlayer;->release()V
-HSPLandroid/media/MediaPlayer;->reset()V
-HSPLandroid/media/MediaPlayer;->resetDrmState()V
-PLandroid/media/MediaPlayer;->scanInternalSubtitleTracks()V
-PLandroid/media/MediaPlayer;->setAudioAttributes(Landroid/media/AudioAttributes;)V
-HSPLandroid/media/MediaPlayer;->setDataSource(Landroid/content/Context;Landroid/net/Uri;)V
-HSPLandroid/media/MediaPlayer;->setDataSource(Landroid/content/Context;Landroid/net/Uri;Ljava/util/Map;Ljava/util/List;)V
-HSPLandroid/media/MediaPlayer;->setDataSource(Landroid/content/res/AssetFileDescriptor;)V
-PLandroid/media/MediaPlayer;->setDataSource(Ljava/io/FileDescriptor;)V
-HSPLandroid/media/MediaPlayer;->setDataSource(Ljava/io/FileDescriptor;JJ)V
-PLandroid/media/MediaPlayer;->setDataSource(Ljava/lang/String;)V
-PLandroid/media/MediaPlayer;->setDataSource(Ljava/lang/String;Ljava/util/Map;Ljava/util/List;)V
-PLandroid/media/MediaPlayer;->setDataSource(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Ljava/util/List;)V
-PLandroid/media/MediaPlayer;->setOnCompletionListener(Landroid/media/MediaPlayer$OnCompletionListener;)V
-HPLandroid/media/MediaPlayer;->setOnErrorListener(Landroid/media/MediaPlayer$OnErrorListener;)V
-HPLandroid/media/MediaPlayer;->setOnPreparedListener(Landroid/media/MediaPlayer$OnPreparedListener;)V
-PLandroid/media/MediaPlayer;->setSubtitleAnchor()V
-PLandroid/media/MediaPlayer;->setVolume(F)V
-PLandroid/media/MediaPlayer;->setVolume(FF)V
-HPLandroid/media/MediaPlayer;->start()V
-HSPLandroid/media/MediaPlayer;->stayAwake(Z)V
-HPLandroid/media/MediaPlayer;->stop()V
-PLandroid/media/MediaPlayer;->updateSurfaceScreenOn()V
-HPLandroid/media/MediaRecorder;->getAudioSourceMax()I
-PLandroid/media/MediaRecorder;->isSystemOnlyAudioSource(I)Z
-PLandroid/media/MediaRecorder;->toLogFriendlyAudioSource(I)Ljava/lang/String;
 HSPLandroid/media/MediaRouter$Callback;-><init>()V
 HSPLandroid/media/MediaRouter$CallbackInfo;-><init>(Landroid/media/MediaRouter$Callback;IILandroid/media/MediaRouter;)V
 HSPLandroid/media/MediaRouter$CallbackInfo;->filterRouteEvent(I)Z
 HSPLandroid/media/MediaRouter$CallbackInfo;->filterRouteEvent(Landroid/media/MediaRouter$RouteInfo;)Z
 HSPLandroid/media/MediaRouter$RouteCategory;-><init>(IIZ)V
+HSPLandroid/media/MediaRouter$RouteCategory;-><init>(Ljava/lang/CharSequence;IZ)V
 HSPLandroid/media/MediaRouter$RouteCategory;->getName()Ljava/lang/CharSequence;
 HSPLandroid/media/MediaRouter$RouteCategory;->getName(Landroid/content/res/Resources;)Ljava/lang/CharSequence;
 HSPLandroid/media/MediaRouter$RouteCategory;->isGroupable()Z
@@ -13906,22 +8138,11 @@
 HSPLandroid/media/MediaRouter$RouteInfo;->isSelected()Z
 HSPLandroid/media/MediaRouter$RouteInfo;->matchesTypes(I)Z
 HSPLandroid/media/MediaRouter$RouteInfo;->resolveStatusCode()Z
-HSPLandroid/media/MediaRouter$RouteInfo;->routeUpdated()V
-PLandroid/media/MediaRouter$RouteInfo;->select()V
-HSPLandroid/media/MediaRouter$RouteInfo;->setTag(Ljava/lang/Object;)V
 HSPLandroid/media/MediaRouter$RouteInfo;->toString()Ljava/lang/String;
 HSPLandroid/media/MediaRouter$RouteInfo;->updatePresentationDisplay()Z
 HSPLandroid/media/MediaRouter$SimpleCallback;-><init>()V
-PLandroid/media/MediaRouter$Static$1$1;-><init>(Landroid/media/MediaRouter$Static$1;Landroid/media/AudioRoutesInfo;)V
-PLandroid/media/MediaRouter$Static$1$1;->run()V
 HSPLandroid/media/MediaRouter$Static$1;-><init>(Landroid/media/MediaRouter$Static;)V
-PLandroid/media/MediaRouter$Static$1;->dispatchAudioRoutesChanged(Landroid/media/AudioRoutesInfo;)V
-PLandroid/media/MediaRouter$Static$Client$1;-><init>(Landroid/media/MediaRouter$Static$Client;)V
-PLandroid/media/MediaRouter$Static$Client$1;->run()V
-PLandroid/media/MediaRouter$Static$Client$2;->run()V
 HSPLandroid/media/MediaRouter$Static$Client;-><init>(Landroid/media/MediaRouter$Static;)V
-PLandroid/media/MediaRouter$Static$Client;->onRestoreRoute()V
-PLandroid/media/MediaRouter$Static$Client;->onStateChanged()V
 HSPLandroid/media/MediaRouter$Static;-><init>(Landroid/content/Context;)V
 HSPLandroid/media/MediaRouter$Static;->getAllPresentationDisplays()[Landroid/view/Display;
 HSPLandroid/media/MediaRouter$Static;->isBluetoothA2dpOn()Z
@@ -13930,546 +8151,118 @@
 HSPLandroid/media/MediaRouter$Static;->publishClientDiscoveryRequest()V
 HSPLandroid/media/MediaRouter$Static;->publishClientSelectedRoute(Z)V
 HSPLandroid/media/MediaRouter$Static;->rebindAsUser(I)V
-HSPLandroid/media/MediaRouter$Static;->setRouterGroupId(Ljava/lang/String;)V
 HSPLandroid/media/MediaRouter$Static;->setSelectedRoute(Landroid/media/MediaRouter$RouteInfo;Z)V
 HSPLandroid/media/MediaRouter$Static;->startMonitoringRoutes(Landroid/content/Context;)V
 HSPLandroid/media/MediaRouter$Static;->updateAudioRoutes(Landroid/media/AudioRoutesInfo;)V
 HSPLandroid/media/MediaRouter$Static;->updateClientState()V
 HSPLandroid/media/MediaRouter$Static;->updateDiscoveryRequest()V
 HSPLandroid/media/MediaRouter$Static;->updatePresentationDisplays(I)V
-HSPLandroid/media/MediaRouter$UserRouteInfo;-><init>(Landroid/media/MediaRouter$RouteCategory;)V
-HSPLandroid/media/MediaRouter$UserRouteInfo;->configureSessionVolume()V
-HSPLandroid/media/MediaRouter$UserRouteInfo;->setDescription(Ljava/lang/CharSequence;)V
-HSPLandroid/media/MediaRouter$UserRouteInfo;->setName(Ljava/lang/CharSequence;)V
-HSPLandroid/media/MediaRouter$UserRouteInfo;->setPlaybackStream(I)V
-HSPLandroid/media/MediaRouter$UserRouteInfo;->setPlaybackType(I)V
-HSPLandroid/media/MediaRouter$UserRouteInfo;->setVolume(I)V
-HSPLandroid/media/MediaRouter$UserRouteInfo;->setVolumeCallback(Landroid/media/MediaRouter$VolumeCallback;)V
-HSPLandroid/media/MediaRouter$UserRouteInfo;->setVolumeHandling(I)V
-HSPLandroid/media/MediaRouter$UserRouteInfo;->setVolumeMax(I)V
 HSPLandroid/media/MediaRouter$VolumeCallback;-><init>()V
-HSPLandroid/media/MediaRouter$VolumeCallbackInfo;-><init>(Landroid/media/MediaRouter$VolumeCallback;Landroid/media/MediaRouter$RouteInfo;)V
 HSPLandroid/media/MediaRouter$VolumeChangeReceiver;-><init>()V
-PLandroid/media/MediaRouter$VolumeChangeReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLandroid/media/MediaRouter$VolumeChangeReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLandroid/media/MediaRouter$WifiDisplayStatusChangedReceiver;-><init>()V
 HSPLandroid/media/MediaRouter;-><init>(Landroid/content/Context;)V
-HSPLandroid/media/MediaRouter;->access$100()Z
 HSPLandroid/media/MediaRouter;->addCallback(ILandroid/media/MediaRouter$Callback;I)V
 HSPLandroid/media/MediaRouter;->addRouteStatic(Landroid/media/MediaRouter$RouteInfo;)V
-HSPLandroid/media/MediaRouter;->addUserRoute(Landroid/media/MediaRouter$UserRouteInfo;)V
 HSPLandroid/media/MediaRouter;->createRouteCategory(Ljava/lang/CharSequence;Z)Landroid/media/MediaRouter$RouteCategory;
-HSPLandroid/media/MediaRouter;->createUserRoute(Landroid/media/MediaRouter$RouteCategory;)Landroid/media/MediaRouter$UserRouteInfo;
 HSPLandroid/media/MediaRouter;->dispatchRouteAdded(Landroid/media/MediaRouter$RouteInfo;)V
-HSPLandroid/media/MediaRouter;->dispatchRouteChanged(Landroid/media/MediaRouter$RouteInfo;)V
-HSPLandroid/media/MediaRouter;->dispatchRouteChanged(Landroid/media/MediaRouter$RouteInfo;I)V
-PLandroid/media/MediaRouter;->dispatchRouteRemoved(Landroid/media/MediaRouter$RouteInfo;)V
 HSPLandroid/media/MediaRouter;->dispatchRouteSelected(ILandroid/media/MediaRouter$RouteInfo;)V
-PLandroid/media/MediaRouter;->dispatchRouteUnselected(ILandroid/media/MediaRouter$RouteInfo;)V
-HSPLandroid/media/MediaRouter;->dispatchRouteVolumeChanged(Landroid/media/MediaRouter$RouteInfo;)V
 HSPLandroid/media/MediaRouter;->findCallbackInfo(Landroid/media/MediaRouter$Callback;)I
 HSPLandroid/media/MediaRouter;->getDefaultRoute()Landroid/media/MediaRouter$RouteInfo;
 HSPLandroid/media/MediaRouter;->getRouteAt(I)Landroid/media/MediaRouter$RouteInfo;
 HSPLandroid/media/MediaRouter;->getRouteCount()I
 HSPLandroid/media/MediaRouter;->getSelectedRoute(I)Landroid/media/MediaRouter$RouteInfo;
-HSPLandroid/media/MediaRouter;->removeCallback(Landroid/media/MediaRouter$Callback;)V
-PLandroid/media/MediaRouter;->removeRouteStatic(Landroid/media/MediaRouter$RouteInfo;)V
-HPLandroid/media/MediaRouter;->removeUserRoute(Landroid/media/MediaRouter$UserRouteInfo;)V
 HSPLandroid/media/MediaRouter;->selectDefaultRouteStatic()V
 HSPLandroid/media/MediaRouter;->selectRoute(ILandroid/media/MediaRouter$RouteInfo;)V
 HSPLandroid/media/MediaRouter;->selectRouteStatic(ILandroid/media/MediaRouter$RouteInfo;Z)V
-HSPLandroid/media/MediaRouter;->setRouterGroupId(Ljava/lang/String;)V
-PLandroid/media/MediaRouter;->systemVolumeChanged(I)V
 HSPLandroid/media/MediaRouter;->typesToString(I)Ljava/lang/String;
-HSPLandroid/media/MediaRouter;->updateRoute(Landroid/media/MediaRouter$RouteInfo;)V
 HSPLandroid/media/MediaRouter;->updateWifiDisplayStatus(Landroid/hardware/display/WifiDisplayStatus;)V
-HSPLandroid/media/MediaRouterClientState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/MediaRouterClientState;
-HSPLandroid/media/MediaRouterClientState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/media/MediaRouterClientState;->toString()Ljava/lang/String;
 HSPLandroid/media/PlayerBase$IPlayerWrapper;-><init>(Landroid/media/PlayerBase;)V
-PLandroid/media/PlayerBase$PlayerIdCard$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/PlayerBase$PlayerIdCard;
-PLandroid/media/PlayerBase$PlayerIdCard$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/media/PlayerBase$PlayerIdCard;-><init>(ILandroid/media/AudioAttributes;Landroid/media/IPlayer;)V
-PLandroid/media/PlayerBase$PlayerIdCard;-><init>(Landroid/os/Parcel;)V
-PLandroid/media/PlayerBase$PlayerIdCard;-><init>(Landroid/os/Parcel;Landroid/media/PlayerBase$1;)V
 HSPLandroid/media/PlayerBase$PlayerIdCard;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/media/PlayerBase;-><init>(Landroid/media/AudioAttributes;I)V
-HPLandroid/media/PlayerBase;->basePause()V
 HSPLandroid/media/PlayerBase;->baseRegisterPlayer()V
 HSPLandroid/media/PlayerBase;->baseRelease()V
-PLandroid/media/PlayerBase;->baseSetVolume(FF)V
-PLandroid/media/PlayerBase;->baseStart()V
-PLandroid/media/PlayerBase;->baseStop()V
-PLandroid/media/PlayerBase;->baseUpdateAudioAttributes(Landroid/media/AudioAttributes;)V
-HSPLandroid/media/PlayerBase;->deprecateStreamTypeForPlayback(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/media/PlayerBase;->getService()Landroid/media/IAudioService;
-PLandroid/media/PlayerBase;->getStartDelayMs()I
-PLandroid/media/PlayerBase;->isRestricted_sync()Z
-PLandroid/media/PlayerBase;->updateAppOpsPlayAudio_sync(Z)V
-PLandroid/media/PlayerBase;->updatePlayerVolume()V
-PLandroid/media/PlayerBase;->updateState(I)V
-PLandroid/media/Ringtone$MyOnCompletionListener;-><init>(Landroid/media/Ringtone;)V
-PLandroid/media/Ringtone;-><init>(Landroid/content/Context;Z)V
-PLandroid/media/Ringtone;->applyPlaybackProperties_sync()V
-PLandroid/media/Ringtone;->destroyLocalPlayer()V
-PLandroid/media/Ringtone;->finalize()V
-PLandroid/media/Ringtone;->play()V
-PLandroid/media/Ringtone;->setAudioAttributes(Landroid/media/AudioAttributes;)V
-PLandroid/media/Ringtone;->setStreamType(I)V
-PLandroid/media/Ringtone;->setUri(Landroid/net/Uri;Landroid/media/VolumeShaper$Configuration;)V
-HPLandroid/media/RingtoneManager;-><init>(Landroid/content/Context;)V
-HPLandroid/media/RingtoneManager;-><init>(Landroid/content/Context;Z)V
-HPLandroid/media/RingtoneManager;->constructBooleanTrueWhereClause(Ljava/util/List;)Ljava/lang/String;
-HSPLandroid/media/RingtoneManager;->ensureDefaultRingtones(Landroid/content/Context;)V
-HPLandroid/media/RingtoneManager;->getActualDefaultRingtoneUri(Landroid/content/Context;I)Landroid/net/Uri;
-HPLandroid/media/RingtoneManager;->getCursor()Landroid/database/Cursor;
-HSPLandroid/media/RingtoneManager;->getDefaultRingtoneSetting(I)Ljava/lang/String;
-HPLandroid/media/RingtoneManager;->getDefaultUri(I)Landroid/net/Uri;
-HPLandroid/media/RingtoneManager;->getInternalRingtones()Landroid/database/Cursor;
-HPLandroid/media/RingtoneManager;->getMediaRingtones()Landroid/database/Cursor;
-HPLandroid/media/RingtoneManager;->getMediaRingtones(Landroid/content/Context;)Landroid/database/Cursor;
-PLandroid/media/RingtoneManager;->getRingtone(Landroid/content/Context;Landroid/net/Uri;)Landroid/media/Ringtone;
-PLandroid/media/RingtoneManager;->getRingtone(Landroid/content/Context;Landroid/net/Uri;I)Landroid/media/Ringtone;
-PLandroid/media/RingtoneManager;->getRingtone(Landroid/content/Context;Landroid/net/Uri;ILandroid/media/VolumeShaper$Configuration;)Landroid/media/Ringtone;
-HPLandroid/media/RingtoneManager;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
-HPLandroid/media/RingtoneManager;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/content/Context;)Landroid/database/Cursor;
-HPLandroid/media/RingtoneManager;->setFilterColumnsList(I)V
-HPLandroid/media/RingtoneManager;->setType(I)V
+HSPLandroid/media/PlayerBase;->isRestricted_sync()Z
 HSPLandroid/media/SoundPool$Builder;-><init>()V
 HSPLandroid/media/SoundPool$Builder;->build()Landroid/media/SoundPool;
 HSPLandroid/media/SoundPool$Builder;->setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/SoundPool$Builder;
 HSPLandroid/media/SoundPool$Builder;->setMaxStreams(I)Landroid/media/SoundPool$Builder;
-HSPLandroid/media/SoundPool$EventHandler;-><init>(Landroid/media/SoundPool;Landroid/os/Looper;)V
-HSPLandroid/media/SoundPool$EventHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/media/SoundPool;-><init>(ILandroid/media/AudioAttributes;)V
 HSPLandroid/media/SoundPool;-><init>(ILandroid/media/AudioAttributes;Landroid/media/SoundPool$1;)V
-HSPLandroid/media/SoundPool;->access$000()Z
-HSPLandroid/media/SoundPool;->access$100(Landroid/media/SoundPool;)Ljava/lang/Object;
-HSPLandroid/media/SoundPool;->access$200(Landroid/media/SoundPool;)Landroid/media/SoundPool$OnLoadCompleteListener;
-HSPLandroid/media/SoundPool;->load(Ljava/lang/String;I)I
-HSPLandroid/media/SoundPool;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V
-HSPLandroid/media/SoundPool;->setOnLoadCompleteListener(Landroid/media/SoundPool$OnLoadCompleteListener;)V
-PLandroid/media/SubtitleController$1;-><init>(Landroid/media/SubtitleController;)V
-PLandroid/media/SubtitleController$1;->handleMessage(Landroid/os/Message;)Z
-PLandroid/media/SubtitleController$2;-><init>(Landroid/media/SubtitleController;)V
-PLandroid/media/SubtitleController;-><init>(Landroid/content/Context;Landroid/media/MediaTimeProvider;Landroid/media/SubtitleController$Listener;)V
-PLandroid/media/SubtitleController;->access$100(Landroid/media/SubtitleController;)V
-PLandroid/media/SubtitleController;->access$200(Landroid/media/SubtitleController;Landroid/media/SubtitleTrack;)V
-PLandroid/media/SubtitleController;->access$300(Landroid/media/SubtitleController;)V
-PLandroid/media/SubtitleController;->checkAnchorLooper()V
-PLandroid/media/SubtitleController;->doHide()V
-PLandroid/media/SubtitleController;->doSelectDefaultTrack()V
-PLandroid/media/SubtitleController;->doSelectTrack(Landroid/media/SubtitleTrack;)V
-PLandroid/media/SubtitleController;->finalize()V
-PLandroid/media/SubtitleController;->getDefaultTrack()Landroid/media/SubtitleTrack;
-PLandroid/media/SubtitleController;->getRenderingWidget()Landroid/media/SubtitleTrack$RenderingWidget;
-PLandroid/media/SubtitleController;->hide()V
-PLandroid/media/SubtitleController;->processOnAnchor(Landroid/os/Message;)V
-PLandroid/media/SubtitleController;->reset()V
-PLandroid/media/SubtitleController;->selectDefaultTrack()V
-PLandroid/media/SubtitleController;->selectTrack(Landroid/media/SubtitleTrack;)Z
-PLandroid/media/SubtitleController;->setAnchor(Landroid/media/SubtitleController$Anchor;)V
-HSPLandroid/media/ThumbnailUtils;->extractThumbnail(Landroid/graphics/Bitmap;II)Landroid/graphics/Bitmap;
-HSPLandroid/media/ThumbnailUtils;->extractThumbnail(Landroid/graphics/Bitmap;III)Landroid/graphics/Bitmap;
-HSPLandroid/media/ThumbnailUtils;->transform(Landroid/graphics/Matrix;Landroid/graphics/Bitmap;III)Landroid/graphics/Bitmap;
-HSPLandroid/media/ToneGenerator;-><init>(II)V
+HSPLandroid/media/Utils$1;-><init>()V
 HSPLandroid/media/Utils$1;->compare(Landroid/util/Range;Landroid/util/Range;)I
 HSPLandroid/media/Utils$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HPLandroid/media/Utils$2;-><init>()V
+HSPLandroid/media/Utils$2;-><init>()V
 HSPLandroid/media/Utils$2;->compare(Landroid/util/Range;Landroid/util/Range;)I
 HSPLandroid/media/Utils$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/media/Utils;->alignRange(Landroid/util/Range;I)Landroid/util/Range;
-HPLandroid/media/Utils;->binarySearchDistinctRanges([Landroid/util/Range;Ljava/lang/Comparable;)I
+HSPLandroid/media/Utils;->binarySearchDistinctRanges([Landroid/util/Range;Ljava/lang/Comparable;)I
 HSPLandroid/media/Utils;->divUp(II)I
 HSPLandroid/media/Utils;->divUp(JJ)J
 HSPLandroid/media/Utils;->factorRange(Landroid/util/Range;I)Landroid/util/Range;
 HSPLandroid/media/Utils;->factorRange(Landroid/util/Range;J)Landroid/util/Range;
-HPLandroid/media/Utils;->intRangeFor(D)Landroid/util/Range;
 HSPLandroid/media/Utils;->intersectSortedDistinctRanges([Landroid/util/Range;[Landroid/util/Range;)[Landroid/util/Range;
-HPLandroid/media/Utils;->longRangeFor(D)Landroid/util/Range;
 HSPLandroid/media/Utils;->parseIntRange(Ljava/lang/Object;Landroid/util/Range;)Landroid/util/Range;
 HSPLandroid/media/Utils;->parseIntSafely(Ljava/lang/Object;I)I
 HSPLandroid/media/Utils;->parseLongRange(Ljava/lang/Object;Landroid/util/Range;)Landroid/util/Range;
 HSPLandroid/media/Utils;->parseRationalRange(Ljava/lang/Object;Landroid/util/Range;)Landroid/util/Range;
 HSPLandroid/media/Utils;->parseSize(Ljava/lang/Object;Landroid/util/Size;)Landroid/util/Size;
 HSPLandroid/media/Utils;->parseSizeRange(Ljava/lang/Object;)Landroid/util/Pair;
-PLandroid/media/VolumePolicy$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/VolumePolicy;
-PLandroid/media/VolumePolicy$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/media/VolumePolicy;-><init>(ZZZI)V
-PLandroid/media/VolumePolicy;->equals(Ljava/lang/Object;)Z
-PLandroid/media/VolumePolicy;->toString()Ljava/lang/String;
-HSPLandroid/media/VolumeShaper$Configuration$Builder;-><init>()V
-HSPLandroid/media/VolumeShaper$Configuration$Builder;->build()Landroid/media/VolumeShaper$Configuration;
-HSPLandroid/media/VolumeShaper$Configuration$Builder;->setCurve([F[F)Landroid/media/VolumeShaper$Configuration$Builder;
-HSPLandroid/media/VolumeShaper$Configuration$Builder;->setDuration(J)Landroid/media/VolumeShaper$Configuration$Builder;
-HSPLandroid/media/VolumeShaper$Configuration$Builder;->setId(I)Landroid/media/VolumeShaper$Configuration$Builder;
-HPLandroid/media/VolumeShaper$Configuration$Builder;->setInterpolatorType(I)Landroid/media/VolumeShaper$Configuration$Builder;
-HSPLandroid/media/VolumeShaper$Configuration$Builder;->setOptionFlags(I)Landroid/media/VolumeShaper$Configuration$Builder;
-HSPLandroid/media/VolumeShaper$Configuration;-><init>(I)V
-HSPLandroid/media/VolumeShaper$Configuration;-><init>(IIIDI[F[F)V
-HSPLandroid/media/VolumeShaper$Configuration;-><init>(IIIDI[F[FLandroid/media/VolumeShaper$1;)V
-HSPLandroid/media/VolumeShaper$Configuration;->access$100([F[FZZ)V
-HSPLandroid/media/VolumeShaper$Configuration;->checkCurveForErrors([F[FZ)Ljava/lang/String;
-HSPLandroid/media/VolumeShaper$Configuration;->checkCurveForErrorsAndThrowException([F[FZZ)V
-HPLandroid/media/VolumeShaper$Operation$Builder;-><init>()V
-HSPLandroid/media/VolumeShaper$Operation$Builder;-><init>(Landroid/media/VolumeShaper$Operation;)V
-HSPLandroid/media/VolumeShaper$Operation$Builder;->build()Landroid/media/VolumeShaper$Operation;
-HSPLandroid/media/VolumeShaper$Operation$Builder;->createIfNeeded()Landroid/media/VolumeShaper$Operation$Builder;
-HPLandroid/media/VolumeShaper$Operation$Builder;->defer()Landroid/media/VolumeShaper$Operation$Builder;
-HSPLandroid/media/VolumeShaper$Operation$Builder;->setXOffset(F)Landroid/media/VolumeShaper$Operation$Builder;
-HPLandroid/media/VolumeShaper$Operation$Builder;->terminate()Landroid/media/VolumeShaper$Operation$Builder;
-HSPLandroid/media/VolumeShaper$Operation;-><init>(IIF)V
-HSPLandroid/media/VolumeShaper$Operation;-><init>(IIFLandroid/media/VolumeShaper$1;)V
-HSPLandroid/media/VolumeShaper$Operation;->access$500(Landroid/media/VolumeShaper$Operation;)I
-HSPLandroid/media/VolumeShaper$Operation;->access$600(Landroid/media/VolumeShaper$Operation;)I
-HSPLandroid/media/VolumeShaper$Operation;->access$700(Landroid/media/VolumeShaper$Operation;)F
-HPLandroid/media/audiofx/AudioEffect$Descriptor;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/media/audiopolicy/AudioMix$Builder;-><init>()V
-HSPLandroid/media/audiopolicy/AudioMix$Builder;->build()Landroid/media/audiopolicy/AudioMix;
-PLandroid/media/audiopolicy/AudioMix$Builder;->setCallbackFlags(I)Landroid/media/audiopolicy/AudioMix$Builder;
-PLandroid/media/audiopolicy/AudioMix$Builder;->setDevice(ILjava/lang/String;)Landroid/media/audiopolicy/AudioMix$Builder;
-HSPLandroid/media/audiopolicy/AudioMix$Builder;->setFormat(Landroid/media/AudioFormat;)Landroid/media/audiopolicy/AudioMix$Builder;
-PLandroid/media/audiopolicy/AudioMix$Builder;->setMixingRule(Landroid/media/audiopolicy/AudioMixingRule;)Landroid/media/audiopolicy/AudioMix$Builder;
-HSPLandroid/media/audiopolicy/AudioMix$Builder;->setRouteFlags(I)Landroid/media/audiopolicy/AudioMix$Builder;
-HSPLandroid/media/audiopolicy/AudioMix;-><init>(Landroid/media/audiopolicy/AudioMixingRule;Landroid/media/AudioFormat;IIILjava/lang/String;)V
-HSPLandroid/media/audiopolicy/AudioMix;-><init>(Landroid/media/audiopolicy/AudioMixingRule;Landroid/media/AudioFormat;IIILjava/lang/String;Landroid/media/audiopolicy/AudioMix$1;)V
-HSPLandroid/media/audiopolicy/AudioMix;->canBeUsedForPrivilegedCapture(Landroid/media/AudioFormat;)Ljava/lang/String;
-HSPLandroid/media/audiopolicy/AudioMix;->equals(Ljava/lang/Object;)Z
-HSPLandroid/media/audiopolicy/AudioMix;->getFormat()Landroid/media/AudioFormat;
-HSPLandroid/media/audiopolicy/AudioMix;->getMixType()I
-HSPLandroid/media/audiopolicy/AudioMix;->getRegistration()Ljava/lang/String;
-HSPLandroid/media/audiopolicy/AudioMix;->getRouteFlags()I
-HSPLandroid/media/audiopolicy/AudioMix;->getRule()Landroid/media/audiopolicy/AudioMixingRule;
-PLandroid/media/audiopolicy/AudioMix;->hashCode()I
-HSPLandroid/media/audiopolicy/AudioMix;->setRegistration(Ljava/lang/String;)V
-HSPLandroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;-><init>(Landroid/media/AudioAttributes;I)V
-HSPLandroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;-><init>(Ljava/lang/Integer;I)V
-PLandroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;->hashCode()I
-HSPLandroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;->writeToParcel(Landroid/os/Parcel;)V
-HSPLandroid/media/audiopolicy/AudioMixingRule$Builder;-><init>()V
-PLandroid/media/audiopolicy/AudioMixingRule$Builder;->addRuleFromParcel(Landroid/os/Parcel;)Landroid/media/audiopolicy/AudioMixingRule$Builder;
-HSPLandroid/media/audiopolicy/AudioMixingRule$Builder;->addRuleInternal(Landroid/media/AudioAttributes;Ljava/lang/Integer;I)Landroid/media/audiopolicy/AudioMixingRule$Builder;
-HSPLandroid/media/audiopolicy/AudioMixingRule$Builder;->allowPrivilegedPlaybackCapture(Z)Landroid/media/audiopolicy/AudioMixingRule$Builder;
-HSPLandroid/media/audiopolicy/AudioMixingRule$Builder;->build()Landroid/media/audiopolicy/AudioMixingRule;
-HSPLandroid/media/audiopolicy/AudioMixingRule;-><init>(ILjava/util/ArrayList;Z)V
-HSPLandroid/media/audiopolicy/AudioMixingRule;-><init>(ILjava/util/ArrayList;ZLandroid/media/audiopolicy/AudioMixingRule$1;)V
-HSPLandroid/media/audiopolicy/AudioMixingRule;->access$000(I)Z
-HSPLandroid/media/audiopolicy/AudioMixingRule;->access$100(I)Z
-HSPLandroid/media/audiopolicy/AudioMixingRule;->access$200(I)Z
-HSPLandroid/media/audiopolicy/AudioMixingRule;->access$300(I)Z
-HSPLandroid/media/audiopolicy/AudioMixingRule;->access$400(I)Z
-HSPLandroid/media/audiopolicy/AudioMixingRule;->allowPrivilegedPlaybackCapture()Z
-HSPLandroid/media/audiopolicy/AudioMixingRule;->getCriteria()Ljava/util/ArrayList;
-HSPLandroid/media/audiopolicy/AudioMixingRule;->getTargetMixType()I
-PLandroid/media/audiopolicy/AudioMixingRule;->hashCode()I
-HSPLandroid/media/audiopolicy/AudioMixingRule;->isAudioAttributeRule(I)Z
-HSPLandroid/media/audiopolicy/AudioMixingRule;->isPlayerRule(I)Z
-HSPLandroid/media/audiopolicy/AudioMixingRule;->isValidAttributesSystemApiRule(I)Z
-HSPLandroid/media/audiopolicy/AudioMixingRule;->isValidRule(I)Z
-HSPLandroid/media/audiopolicy/AudioMixingRule;->isValidSystemApiRule(I)Z
-HSPLandroid/media/audiopolicy/AudioPolicy;-><init>(Landroid/media/audiopolicy/AudioPolicyConfig;Landroid/content/Context;Landroid/os/Looper;Landroid/media/audiopolicy/AudioPolicy$AudioPolicyFocusListener;Landroid/media/audiopolicy/AudioPolicy$AudioPolicyStatusListener;ZZLandroid/media/audiopolicy/AudioPolicy$AudioPolicyVolumeCallback;Landroid/media/projection/MediaProjection;)V
-HSPLandroid/media/audiopolicy/AudioPolicy;-><init>(Landroid/media/audiopolicy/AudioPolicyConfig;Landroid/content/Context;Landroid/os/Looper;Landroid/media/audiopolicy/AudioPolicy$AudioPolicyFocusListener;Landroid/media/audiopolicy/AudioPolicy$AudioPolicyStatusListener;ZZLandroid/media/audiopolicy/AudioPolicy$AudioPolicyVolumeCallback;Landroid/media/projection/MediaProjection;Landroid/media/audiopolicy/AudioPolicy$1;)V
-HSPLandroid/media/audiopolicy/AudioPolicy;->access$300(Landroid/media/audiopolicy/AudioPolicy;)V
-HSPLandroid/media/audiopolicy/AudioPolicy;->addressForTag(Landroid/media/audiopolicy/AudioMix;)Ljava/lang/String;
-HSPLandroid/media/audiopolicy/AudioPolicy;->cb()Landroid/media/audiopolicy/IAudioPolicyCallback;
-HSPLandroid/media/audiopolicy/AudioPolicy;->checkCallingOrSelfPermission(Ljava/lang/String;)I
-HSPLandroid/media/audiopolicy/AudioPolicy;->checkMixReadyToUse(Landroid/media/audiopolicy/AudioMix;Z)V
-HSPLandroid/media/audiopolicy/AudioPolicy;->createAudioRecordSink(Landroid/media/audiopolicy/AudioMix;)Landroid/media/AudioRecord;
-HSPLandroid/media/audiopolicy/AudioPolicy;->getConfig()Landroid/media/audiopolicy/AudioPolicyConfig;
-HSPLandroid/media/audiopolicy/AudioPolicy;->getMediaProjection()Landroid/media/projection/MediaProjection;
-HSPLandroid/media/audiopolicy/AudioPolicy;->hasFocusListener()Z
-HSPLandroid/media/audiopolicy/AudioPolicy;->isFocusPolicy()Z
-HSPLandroid/media/audiopolicy/AudioPolicy;->isLoopbackRenderPolicy()Z
-HSPLandroid/media/audiopolicy/AudioPolicy;->isTestFocusPolicy()Z
-HSPLandroid/media/audiopolicy/AudioPolicy;->isVolumeController()Z
-HSPLandroid/media/audiopolicy/AudioPolicy;->lambda$isLoopbackRenderPolicy$0(Landroid/media/audiopolicy/AudioMix;)Z
-HSPLandroid/media/audiopolicy/AudioPolicy;->onPolicyStatusChange()V
-HSPLandroid/media/audiopolicy/AudioPolicy;->policyReadyToUse()Z
-HSPLandroid/media/audiopolicy/AudioPolicy;->sendMsg(I)V
-HSPLandroid/media/audiopolicy/AudioPolicy;->setRegistration(Ljava/lang/String;)V
-PLandroid/media/audiopolicy/AudioPolicyConfig$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/audiopolicy/AudioPolicyConfig;
-PLandroid/media/audiopolicy/AudioPolicyConfig$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/media/audiopolicy/AudioPolicyConfig;-><init>(Landroid/media/audiopolicy/AudioPolicyConfig;)V
-PLandroid/media/audiopolicy/AudioPolicyConfig;-><init>(Landroid/os/Parcel;)V
-PLandroid/media/audiopolicy/AudioPolicyConfig;-><init>(Landroid/os/Parcel;Landroid/media/audiopolicy/AudioPolicyConfig$1;)V
-HSPLandroid/media/audiopolicy/AudioPolicyConfig;-><init>(Ljava/util/ArrayList;)V
-PLandroid/media/audiopolicy/AudioPolicyConfig;->getMixes()Ljava/util/ArrayList;
-PLandroid/media/audiopolicy/AudioPolicyConfig;->getRegistration()Ljava/lang/String;
-PLandroid/media/audiopolicy/AudioPolicyConfig;->hashCode()I
-HSPLandroid/media/audiopolicy/AudioPolicyConfig;->mixTypeId(I)Ljava/lang/String;
-HSPLandroid/media/audiopolicy/AudioPolicyConfig;->setMixRegistration(Landroid/media/audiopolicy/AudioMix;)V
-HSPLandroid/media/audiopolicy/AudioPolicyConfig;->setRegistration(Ljava/lang/String;)V
-HSPLandroid/media/audiopolicy/AudioPolicyConfig;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/media/Utils;->scaleRange(Landroid/util/Range;II)Landroid/util/Range;
+HSPLandroid/media/Utils;->sortDistinctRanges([Landroid/util/Range;)V
 HSPLandroid/media/audiopolicy/AudioProductStrategy$AudioAttributesGroup;-><init>(II[Landroid/media/AudioAttributes;)V
 HSPLandroid/media/audiopolicy/AudioProductStrategy$AudioAttributesGroup;->getAudioAttributes()Landroid/media/AudioAttributes;
-PLandroid/media/audiopolicy/AudioProductStrategy$AudioAttributesGroup;->getStreamType()I
-HPLandroid/media/audiopolicy/AudioProductStrategy$AudioAttributesGroup;->supportsAttributes(Landroid/media/AudioAttributes;)Z
 HSPLandroid/media/audiopolicy/AudioProductStrategy$AudioAttributesGroup;->supportsStreamType(I)Z
 HSPLandroid/media/audiopolicy/AudioProductStrategy;-><init>(Ljava/lang/String;I[Landroid/media/audiopolicy/AudioProductStrategy$AudioAttributesGroup;)V
-HPLandroid/media/audiopolicy/AudioProductStrategy;->access$100(Landroid/media/AudioAttributes;Landroid/media/AudioAttributes;)Z
-HPLandroid/media/audiopolicy/AudioProductStrategy;->attributesMatches(Landroid/media/AudioAttributes;Landroid/media/AudioAttributes;)Z
 HSPLandroid/media/audiopolicy/AudioProductStrategy;->getAudioAttributesForLegacyStreamType(I)Landroid/media/AudioAttributes;
 HSPLandroid/media/audiopolicy/AudioProductStrategy;->getAudioAttributesForStrategyWithLegacyStreamType(I)Landroid/media/AudioAttributes;
 HSPLandroid/media/audiopolicy/AudioProductStrategy;->getAudioProductStrategies()Ljava/util/List;
-PLandroid/media/audiopolicy/AudioProductStrategy;->getLegacyStreamTypeForAudioAttributes(Landroid/media/AudioAttributes;)I
-HPLandroid/media/audiopolicy/AudioProductStrategy;->getLegacyStreamTypeForStrategyWithAudioAttributes(Landroid/media/AudioAttributes;)I
 HSPLandroid/media/audiopolicy/AudioProductStrategy;->initializeAudioProductStrategies()Ljava/util/List;
-HPLandroid/media/audiopolicy/AudioProductStrategy;->supportsAudioAttributes(Landroid/media/AudioAttributes;)Z
-PLandroid/media/audiopolicy/IAudioPolicyCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/media/audiopolicy/IAudioPolicyCallback$Stub$Proxy;->notifyUnregistration()V
-HSPLandroid/media/audiopolicy/IAudioPolicyCallback$Stub;-><init>()V
-HSPLandroid/media/audiopolicy/IAudioPolicyCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/media/audiopolicy/IAudioPolicyCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/audiopolicy/IAudioPolicyCallback;
-HPLandroid/media/audiopolicy/IAudioPolicyCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/media/browse/MediaBrowserUtils;->areSameOptions(Landroid/os/Bundle;Landroid/os/Bundle;)Z
-HSPLandroid/media/midi/IMidiManager$Stub;-><init>()V
-PLandroid/media/midi/IMidiManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/media/projection/IMediaProjection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/projection/IMediaProjection;
-HSPLandroid/media/projection/IMediaProjectionManager$Stub;-><init>()V
-PLandroid/media/projection/IMediaProjectionManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/media/projection/IMediaProjectionWatcherCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/projection/IMediaProjectionWatcherCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/media/projection/IMediaProjectionWatcherCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/projection/IMediaProjectionWatcherCallback;
-PLandroid/media/session/IActiveSessionsListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/session/IActiveSessionsListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/media/session/IActiveSessionsListener$Stub$Proxy;->onActiveSessionsChanged(Ljava/util/List;)V
-HPLandroid/media/session/IActiveSessionsListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/media/session/IActiveSessionsListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/IActiveSessionsListener;
-HPLandroid/media/session/IActiveSessionsListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/media/session/ICallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/session/ICallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/media/session/ICallback$Stub$Proxy;->onAddressedPlayerChangedToMediaButtonReceiver(Landroid/content/ComponentName;)V
-PLandroid/media/session/ICallback$Stub$Proxy;->onAddressedPlayerChangedToMediaSession(Landroid/media/session/MediaSession$Token;)V
-PLandroid/media/session/ICallback$Stub;-><init>()V
-PLandroid/media/session/ICallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ICallback;
-HSPLandroid/media/session/ISession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/media/session/ISession$Stub$Proxy;->destroySession()V
-HSPLandroid/media/session/ISession$Stub$Proxy;->getController()Landroid/media/session/ISessionController;
-HSPLandroid/media/session/ISession$Stub$Proxy;->setActive(Z)V
-HPLandroid/media/session/ISession$Stub$Proxy;->setExtras(Landroid/os/Bundle;)V
-HSPLandroid/media/session/ISession$Stub$Proxy;->setFlags(I)V
-HSPLandroid/media/session/ISession$Stub$Proxy;->setLaunchPendingIntent(Landroid/app/PendingIntent;)V
-HSPLandroid/media/session/ISession$Stub$Proxy;->setMediaButtonReceiver(Landroid/app/PendingIntent;)V
-HSPLandroid/media/session/ISession$Stub$Proxy;->setMetadata(Landroid/media/MediaMetadata;JLjava/lang/String;)V
-HSPLandroid/media/session/ISession$Stub$Proxy;->setPlaybackState(Landroid/media/session/PlaybackState;)V
-HSPLandroid/media/session/ISession$Stub$Proxy;->setPlaybackToLocal(Landroid/media/AudioAttributes;)V
-HSPLandroid/media/session/ISession$Stub$Proxy;->setRatingType(I)V
-PLandroid/media/session/ISession$Stub;-><init>()V
-PLandroid/media/session/ISession$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/media/session/ISession$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISession;
-PLandroid/media/session/ISession$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/media/session/ISession$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/media/session/ISessionCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/media/session/ISessionCallback$Stub;-><init>()V
+HSPLandroid/media/session/IOnMediaKeyEventDispatchedListener$Stub;-><init>()V
+HSPLandroid/media/session/IOnMediaKeyEventSessionChangedListener$Stub;-><init>()V
+HSPLandroid/media/session/ISessionCallback$Stub;-><init>()V
 HSPLandroid/media/session/ISessionCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/media/session/ISessionController$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/media/session/ISessionController$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/media/session/ISessionController$Stub$Proxy;->getMetadata()Landroid/media/MediaMetadata;
-HPLandroid/media/session/ISessionController$Stub$Proxy;->getPackageName()Ljava/lang/String;
-HPLandroid/media/session/ISessionController$Stub$Proxy;->getPlaybackState()Landroid/media/session/PlaybackState;
-HPLandroid/media/session/ISessionController$Stub$Proxy;->getVolumeAttributes()Landroid/media/session/MediaController$PlaybackInfo;
-HPLandroid/media/session/ISessionController$Stub$Proxy;->registerCallback(Ljava/lang/String;Landroid/media/session/ISessionControllerCallback;)V
-HPLandroid/media/session/ISessionController$Stub$Proxy;->unregisterCallback(Landroid/media/session/ISessionControllerCallback;)V
-PLandroid/media/session/ISessionController$Stub;-><init>()V
-PLandroid/media/session/ISessionController$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/media/session/ISessionController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISessionController;
-PLandroid/media/session/ISessionController$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/media/session/ISessionController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/media/session/ISessionControllerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onExtrasChanged(Landroid/os/Bundle;)V
-PLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onMetadataChanged(Landroid/media/MediaMetadata;)V
-PLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onPlaybackStateChanged(Landroid/media/session/PlaybackState;)V
-PLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onQueueChanged(Landroid/content/pm/ParceledListSlice;)V
-PLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onSessionDestroyed()V
-PLandroid/media/session/ISessionControllerCallback$Stub;-><init>()V
-HPLandroid/media/session/ISessionControllerCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/media/session/ISessionControllerCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISessionControllerCallback;
-HPLandroid/media/session/ISessionControllerCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/media/session/ISessionManager$Stub$Proxy;->addSessionsListener(Landroid/media/session/IActiveSessionsListener;Landroid/content/ComponentName;I)V
-HSPLandroid/media/session/ISessionManager$Stub$Proxy;->createSession(Ljava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;I)Landroid/media/session/ISession;
-HPLandroid/media/session/ISessionManager$Stub$Proxy;->dispatchVolumeKeyEvent(Ljava/lang/String;Ljava/lang/String;ZLandroid/view/KeyEvent;IZ)V
-HSPLandroid/media/session/ISessionManager$Stub$Proxy;->getSessions(Landroid/content/ComponentName;I)Ljava/util/List;
-HSPLandroid/media/session/ISessionManager$Stub;-><init>()V
-PLandroid/media/session/ISessionManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISessionManager;
-HPLandroid/media/session/ISessionManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/media/session/MediaController$Callback;-><init>()V
-HPLandroid/media/session/MediaController$Callback;->onExtrasChanged(Landroid/os/Bundle;)V
-HPLandroid/media/session/MediaController$Callback;->onMetadataChanged(Landroid/media/MediaMetadata;)V
-HPLandroid/media/session/MediaController$Callback;->onPlaybackStateChanged(Landroid/media/session/PlaybackState;)V
-PLandroid/media/session/MediaController$CallbackStub;-><init>(Landroid/media/session/MediaController;)V
-HPLandroid/media/session/MediaController$CallbackStub;->onExtrasChanged(Landroid/os/Bundle;)V
-HPLandroid/media/session/MediaController$CallbackStub;->onMetadataChanged(Landroid/media/MediaMetadata;)V
-HPLandroid/media/session/MediaController$CallbackStub;->onPlaybackStateChanged(Landroid/media/session/PlaybackState;)V
-HPLandroid/media/session/MediaController$CallbackStub;->onQueueChanged(Landroid/content/pm/ParceledListSlice;)V
-HPLandroid/media/session/MediaController$CallbackStub;->onSessionDestroyed()V
-HPLandroid/media/session/MediaController$MessageHandler;->handleMessage(Landroid/os/Message;)V
-HPLandroid/media/session/MediaController$PlaybackInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/session/MediaController$PlaybackInfo;
-HPLandroid/media/session/MediaController$PlaybackInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/media/session/MediaController$PlaybackInfo;-><init>(Landroid/os/Parcel;)V
-HPLandroid/media/session/MediaController$PlaybackInfo;->getPlaybackType()I
-PLandroid/media/session/MediaController$PlaybackInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/media/session/MediaController$TransportControls;-><init>(Landroid/media/session/MediaController;)V
-PLandroid/media/session/MediaController$TransportControls;-><init>(Landroid/media/session/MediaController;Landroid/media/session/MediaController$1;)V
+HSPLandroid/media/session/ISessionControllerCallback$Stub;-><init>()V
+HSPLandroid/media/session/ISessionManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/media/session/ISessionManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISessionManager;
+HSPLandroid/media/session/MediaController$CallbackStub;-><init>(Landroid/media/session/MediaController;)V
+HSPLandroid/media/session/MediaController$TransportControls;-><init>(Landroid/media/session/MediaController;)V
+HSPLandroid/media/session/MediaController$TransportControls;-><init>(Landroid/media/session/MediaController;Landroid/media/session/MediaController$1;)V
 HSPLandroid/media/session/MediaController;-><init>(Landroid/content/Context;Landroid/media/session/MediaSession$Token;)V
-HPLandroid/media/session/MediaController;->access$600(Landroid/media/session/MediaController;ILjava/lang/Object;Landroid/os/Bundle;)V
-HPLandroid/media/session/MediaController;->addCallbackLocked(Landroid/media/session/MediaController$Callback;Landroid/os/Handler;)V
-HPLandroid/media/session/MediaController;->controlsSameSession(Landroid/media/session/MediaController;)Z
-HPLandroid/media/session/MediaController;->getHandlerForCallbackLocked(Landroid/media/session/MediaController$Callback;)Landroid/media/session/MediaController$MessageHandler;
-HPLandroid/media/session/MediaController;->getMetadata()Landroid/media/MediaMetadata;
-HPLandroid/media/session/MediaController;->getPackageName()Ljava/lang/String;
-HPLandroid/media/session/MediaController;->getPlaybackInfo()Landroid/media/session/MediaController$PlaybackInfo;
-HPLandroid/media/session/MediaController;->getPlaybackState()Landroid/media/session/PlaybackState;
-HPLandroid/media/session/MediaController;->getSessionBinder()Landroid/media/session/ISessionController;
-HPLandroid/media/session/MediaController;->getSessionToken()Landroid/media/session/MediaSession$Token;
-HPLandroid/media/session/MediaController;->postMessage(ILjava/lang/Object;Landroid/os/Bundle;)V
-HPLandroid/media/session/MediaController;->registerCallback(Landroid/media/session/MediaController$Callback;)V
-HPLandroid/media/session/MediaController;->registerCallback(Landroid/media/session/MediaController$Callback;Landroid/os/Handler;)V
-HPLandroid/media/session/MediaController;->removeCallbackLocked(Landroid/media/session/MediaController$Callback;)Z
-HPLandroid/media/session/MediaController;->unregisterCallback(Landroid/media/session/MediaController$Callback;)V
 HSPLandroid/media/session/MediaSession$Callback;-><init>()V
-PLandroid/media/session/MediaSession$Callback;->access$102(Landroid/media/session/MediaSession$Callback;Landroid/media/session/MediaSession;)Landroid/media/session/MediaSession;
-PLandroid/media/session/MediaSession$Callback;->access$502(Landroid/media/session/MediaSession$Callback;Landroid/media/session/MediaSession$CallbackMessageHandler;)Landroid/media/session/MediaSession$CallbackMessageHandler;
-PLandroid/media/session/MediaSession$CallbackMessageHandler;-><init>(Landroid/media/session/MediaSession;Landroid/os/Looper;Landroid/media/session/MediaSession$Callback;)V
-PLandroid/media/session/MediaSession$CallbackStub;-><init>(Landroid/media/session/MediaSession;)V
-PLandroid/media/session/MediaSession$Token$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/session/MediaSession$Token;
-PLandroid/media/session/MediaSession$Token$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/media/session/MediaSession$Token;-><init>(Landroid/media/session/ISessionController;)V
-PLandroid/media/session/MediaSession$Token;-><init>(Landroid/os/Parcel;)V
-HPLandroid/media/session/MediaSession$Token;->equals(Ljava/lang/Object;)Z
-PLandroid/media/session/MediaSession$Token;->getBinder()Landroid/media/session/ISessionController;
-HPLandroid/media/session/MediaSession$Token;->hashCode()I
-HSPLandroid/media/session/MediaSession$Token;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/media/session/MediaSession;-><init>(Landroid/content/Context;Ljava/lang/String;)V
+HSPLandroid/media/session/MediaSession$Callback;->access$102(Landroid/media/session/MediaSession$Callback;Landroid/media/session/MediaSession;)Landroid/media/session/MediaSession;
+HSPLandroid/media/session/MediaSession$Callback;->access$502(Landroid/media/session/MediaSession$Callback;Landroid/media/session/MediaSession$CallbackMessageHandler;)Landroid/media/session/MediaSession$CallbackMessageHandler;
+HSPLandroid/media/session/MediaSession$CallbackMessageHandler;-><init>(Landroid/media/session/MediaSession;Landroid/os/Looper;Landroid/media/session/MediaSession$Callback;)V
+HSPLandroid/media/session/MediaSession$CallbackStub;-><init>(Landroid/media/session/MediaSession;)V
+HSPLandroid/media/session/MediaSession$Token$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/session/MediaSession$Token;
+HSPLandroid/media/session/MediaSession$Token$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/media/session/MediaSession$Token;-><init>(Landroid/media/session/ISessionController;)V
+HSPLandroid/media/session/MediaSession$Token;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/media/session/MediaSession$Token;->getBinder()Landroid/media/session/ISessionController;
 HSPLandroid/media/session/MediaSession;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)V
-HPLandroid/media/session/MediaSession;->getController()Landroid/media/session/MediaController;
-HSPLandroid/media/session/MediaSession;->getSessionToken()Landroid/media/session/MediaSession$Token;
 HSPLandroid/media/session/MediaSession;->hasCustomParcelable(Landroid/os/Bundle;)Z
-HPLandroid/media/session/MediaSession;->release()V
-HSPLandroid/media/session/MediaSession;->setActive(Z)V
-PLandroid/media/session/MediaSession;->setCallback(Landroid/media/session/MediaSession$Callback;)V
 HSPLandroid/media/session/MediaSession;->setCallback(Landroid/media/session/MediaSession$Callback;Landroid/os/Handler;)V
-HPLandroid/media/session/MediaSession;->setExtras(Landroid/os/Bundle;)V
 HSPLandroid/media/session/MediaSession;->setFlags(I)V
-HSPLandroid/media/session/MediaSession;->setMediaButtonReceiver(Landroid/app/PendingIntent;)V
-HSPLandroid/media/session/MediaSession;->setMetadata(Landroid/media/MediaMetadata;)V
-HSPLandroid/media/session/MediaSession;->setPlaybackState(Landroid/media/session/PlaybackState;)V
-HSPLandroid/media/session/MediaSession;->setPlaybackToLocal(Landroid/media/AudioAttributes;)V
-HSPLandroid/media/session/MediaSession;->setRatingType(I)V
-HSPLandroid/media/session/MediaSession;->setSessionActivity(Landroid/app/PendingIntent;)V
-PLandroid/media/session/MediaSessionLegacyHelper;-><clinit>()V
-PLandroid/media/session/MediaSessionLegacyHelper;-><init>(Landroid/content/Context;)V
-PLandroid/media/session/MediaSessionLegacyHelper;->getHelper(Landroid/content/Context;)Landroid/media/session/MediaSessionLegacyHelper;
-PLandroid/media/session/MediaSessionLegacyHelper;->sendVolumeKeyEvent(Landroid/view/KeyEvent;IZ)V
-PLandroid/media/session/MediaSessionManager$CallbackStub;-><init>(Landroid/media/session/MediaSessionManager;)V
-PLandroid/media/session/MediaSessionManager$CallbackStub;-><init>(Landroid/media/session/MediaSessionManager;Landroid/media/session/MediaSessionManager$1;)V
-HPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper$1$1;->run()V
-HPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper$1;->onActiveSessionsChanged(Ljava/util/List;)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$1;)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$1;)V
 HSPLandroid/media/session/MediaSessionManager;-><init>(Landroid/content/Context;)V
-HPLandroid/media/session/MediaSessionManager;->addOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;Landroid/content/ComponentName;ILandroid/os/Handler;)V
 HSPLandroid/media/session/MediaSessionManager;->createSession(Landroid/media/session/MediaSession$CallbackStub;Ljava/lang/String;Landroid/os/Bundle;)Landroid/media/session/ISession;
-PLandroid/media/session/MediaSessionManager;->dispatchVolumeKeyEvent(Landroid/view/KeyEvent;IZ)V
-HPLandroid/media/session/MediaSessionManager;->dispatchVolumeKeyEventAsSystemService(Landroid/view/KeyEvent;I)V
-PLandroid/media/session/MediaSessionManager;->dispatchVolumeKeyEventInternal(ZLandroid/view/KeyEvent;IZ)V
-HSPLandroid/media/session/MediaSessionManager;->getActiveSessions(Landroid/content/ComponentName;)Ljava/util/List;
-HSPLandroid/media/session/MediaSessionManager;->getActiveSessionsForUser(Landroid/content/ComponentName;I)Ljava/util/List;
-PLandroid/media/session/PlaybackState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/session/PlaybackState;
-PLandroid/media/session/PlaybackState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/media/session/PlaybackState$Builder;-><init>()V
-HPLandroid/media/session/PlaybackState$Builder;-><init>(Landroid/media/session/PlaybackState;)V
-HSPLandroid/media/session/PlaybackState$Builder;->build()Landroid/media/session/PlaybackState;
-HPLandroid/media/session/PlaybackState$Builder;->setActions(J)Landroid/media/session/PlaybackState$Builder;
-HPLandroid/media/session/PlaybackState$Builder;->setActiveQueueItemId(J)Landroid/media/session/PlaybackState$Builder;
-HPLandroid/media/session/PlaybackState$Builder;->setBufferedPosition(J)Landroid/media/session/PlaybackState$Builder;
-HPLandroid/media/session/PlaybackState$Builder;->setErrorMessage(Ljava/lang/CharSequence;)Landroid/media/session/PlaybackState$Builder;
-HPLandroid/media/session/PlaybackState$Builder;->setExtras(Landroid/os/Bundle;)Landroid/media/session/PlaybackState$Builder;
-HPLandroid/media/session/PlaybackState$Builder;->setState(IJF)Landroid/media/session/PlaybackState$Builder;
-HPLandroid/media/session/PlaybackState$Builder;->setState(IJFJ)Landroid/media/session/PlaybackState$Builder;
-PLandroid/media/session/PlaybackState$CustomAction$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/session/PlaybackState$CustomAction;
-PLandroid/media/session/PlaybackState$CustomAction$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/media/session/PlaybackState$CustomAction;-><init>(Landroid/os/Parcel;)V
-PLandroid/media/session/PlaybackState$CustomAction;-><init>(Landroid/os/Parcel;Landroid/media/session/PlaybackState$1;)V
-HSPLandroid/media/session/PlaybackState;-><init>(IJJFJJLjava/util/List;JLjava/lang/CharSequence;Landroid/os/Bundle;)V
-PLandroid/media/session/PlaybackState;-><init>(IJJFJJLjava/util/List;JLjava/lang/CharSequence;Landroid/os/Bundle;Landroid/media/session/PlaybackState$1;)V
-PLandroid/media/session/PlaybackState;-><init>(Landroid/os/Parcel;)V
-PLandroid/media/session/PlaybackState;-><init>(Landroid/os/Parcel;Landroid/media/session/PlaybackState$1;)V
-PLandroid/media/session/PlaybackState;->access$1000(Landroid/media/session/PlaybackState;)J
-PLandroid/media/session/PlaybackState;->access$1100(Landroid/media/session/PlaybackState;)J
-PLandroid/media/session/PlaybackState;->access$1200(Landroid/media/session/PlaybackState;)Landroid/os/Bundle;
-PLandroid/media/session/PlaybackState;->access$300(Landroid/media/session/PlaybackState;)I
-PLandroid/media/session/PlaybackState;->access$400(Landroid/media/session/PlaybackState;)J
-PLandroid/media/session/PlaybackState;->access$500(Landroid/media/session/PlaybackState;)J
-PLandroid/media/session/PlaybackState;->access$600(Landroid/media/session/PlaybackState;)F
-PLandroid/media/session/PlaybackState;->access$700(Landroid/media/session/PlaybackState;)J
-PLandroid/media/session/PlaybackState;->access$800(Landroid/media/session/PlaybackState;)Ljava/util/List;
-PLandroid/media/session/PlaybackState;->access$900(Landroid/media/session/PlaybackState;)Ljava/lang/CharSequence;
-HPLandroid/media/session/PlaybackState;->getState()I
-PLandroid/media/session/PlaybackState;->toString()Ljava/lang/String;
-HSPLandroid/media/session/PlaybackState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/metrics/LogMaker;-><init>(I)V
-PLandroid/metrics/LogMaker;-><init>([Ljava/lang/Object;)V
 HSPLandroid/metrics/LogMaker;->addTaggedData(ILjava/lang/Object;)Landroid/metrics/LogMaker;
-PLandroid/metrics/LogMaker;->clearTaggedData(I)Landroid/metrics/LogMaker;
-HPLandroid/metrics/LogMaker;->deserialize([Ljava/lang/Object;)V
-PLandroid/metrics/LogMaker;->getCategory()I
-PLandroid/metrics/LogMaker;->getCounterBucket()J
-PLandroid/metrics/LogMaker;->getCounterName()Ljava/lang/String;
-PLandroid/metrics/LogMaker;->getCounterValue()I
 HSPLandroid/metrics/LogMaker;->getEntries()Landroid/util/SparseArray;
-PLandroid/metrics/LogMaker;->getPackageName()Ljava/lang/String;
-PLandroid/metrics/LogMaker;->getSubtype()I
-PLandroid/metrics/LogMaker;->getTaggedData(I)Ljava/lang/Object;
-HPLandroid/metrics/LogMaker;->getTimestamp()J
 HSPLandroid/metrics/LogMaker;->getType()I
-PLandroid/metrics/LogMaker;->isLongCounterBucket()Z
 HSPLandroid/metrics/LogMaker;->isValidValue(Ljava/lang/Object;)Z
 HSPLandroid/metrics/LogMaker;->serialize()[Ljava/lang/Object;
 HSPLandroid/metrics/LogMaker;->setCategory(I)Landroid/metrics/LogMaker;
-PLandroid/metrics/LogMaker;->setComponentName(Landroid/content/ComponentName;)Landroid/metrics/LogMaker;
-HSPLandroid/metrics/LogMaker;->setCounterBucket(I)Landroid/metrics/LogMaker;
-HSPLandroid/metrics/LogMaker;->setCounterName(Ljava/lang/String;)Landroid/metrics/LogMaker;
-HSPLandroid/metrics/LogMaker;->setCounterValue(I)Landroid/metrics/LogMaker;
-PLandroid/metrics/LogMaker;->setLatency(J)Landroid/metrics/LogMaker;
-PLandroid/metrics/LogMaker;->setPackageName(Ljava/lang/String;)Landroid/metrics/LogMaker;
-PLandroid/metrics/LogMaker;->setProcessId(I)Landroid/metrics/LogMaker;
 HSPLandroid/metrics/LogMaker;->setSubtype(I)Landroid/metrics/LogMaker;
-PLandroid/metrics/LogMaker;->setTimestamp(J)Landroid/metrics/LogMaker;
 HSPLandroid/metrics/LogMaker;->setType(I)Landroid/metrics/LogMaker;
-PLandroid/metrics/LogMaker;->setUid(I)Landroid/metrics/LogMaker;
-HPLandroid/metrics/MetricsReader$Event;-><init>(Landroid/util/EventLog$Event;)V
-PLandroid/metrics/MetricsReader$Event;->getData()Ljava/lang/Object;
-PLandroid/metrics/MetricsReader$Event;->getProcessId()I
-PLandroid/metrics/MetricsReader$Event;->getTimeMillis()J
-PLandroid/metrics/MetricsReader$Event;->getUid()I
-PLandroid/metrics/MetricsReader$LogReader;-><init>()V
-HPLandroid/metrics/MetricsReader$LogReader;->readEvents([IJLjava/util/Collection;)V
-PLandroid/metrics/MetricsReader$LogReader;->writeCheckpoint(I)V
-PLandroid/metrics/MetricsReader;-><init>()V
-PLandroid/metrics/MetricsReader;->checkpoint()V
-HPLandroid/metrics/MetricsReader;->hasNext()Z
-HPLandroid/metrics/MetricsReader;->next()Landroid/metrics/LogMaker;
-HPLandroid/metrics/MetricsReader;->read(J)V
-PLandroid/metrics/MetricsReader;->reset()V
 HSPLandroid/net/-$$Lambda$FpGXkd3pLxeXY58eJ_84mi1PLWQ;->nameOf(I)Ljava/lang/String;
-HSPLandroid/net/-$$Lambda$Network$KD6DxaMRJIcajhj36TU1K7lJnHQ;->lookup(Ljava/lang/String;)Ljava/util/List;
-PLandroid/net/-$$Lambda$NetworkFactory$HfslgqyaKc_n0wXX5_qRYVZoGfI;-><init>(Landroid/net/NetworkFactory;)V
-PLandroid/net/-$$Lambda$NetworkFactory$HfslgqyaKc_n0wXX5_qRYVZoGfI;->run()V
-PLandroid/net/-$$Lambda$NetworkScoreManager$NetworkScoreCallbackProxy$PGkg1UrNyisY0wAts4zoVuYRgkw;-><init>(Landroid/net/NetworkScoreManager$NetworkScoreCallbackProxy;)V
-PLandroid/net/-$$Lambda$NetworkScoreManager$NetworkScoreCallbackProxy$PGkg1UrNyisY0wAts4zoVuYRgkw;->run()V
-PLandroid/net/-$$Lambda$NetworkScoreManager$NetworkScoreCallbackProxy$TEOhIiY2C9y8yDWwRR6zm_12TGY;-><init>(Landroid/net/NetworkScoreManager$NetworkScoreCallbackProxy;Ljava/util/List;)V
-PLandroid/net/-$$Lambda$NetworkScoreManager$NetworkScoreCallbackProxy$TEOhIiY2C9y8yDWwRR6zm_12TGY;->run()V
-HSPLandroid/net/-$$Lambda$NetworkStats$3raHHJpnJwsEAXnRXF2pK8-UDFY;-><clinit>()V
-HSPLandroid/net/-$$Lambda$NetworkStats$3raHHJpnJwsEAXnRXF2pK8-UDFY;-><init>()V
-HSPLandroid/net/-$$Lambda$NetworkStats$3raHHJpnJwsEAXnRXF2pK8-UDFY;->test(Ljava/lang/Object;)Z
-PLandroid/net/-$$Lambda$NetworkStats$xvFSsVoR0k5s7Fhw1yPDPVIpx8A;-><init>(II[Ljava/lang/String;)V
-PLandroid/net/-$$Lambda$NetworkStats$xvFSsVoR0k5s7Fhw1yPDPVIpx8A;->test(Ljava/lang/Object;)Z
 HSPLandroid/net/-$$Lambda$p1_56lwnt1xBuY1muPblbN1Dtkw;->nameOf(I)Ljava/lang/String;
-PLandroid/net/CaptivePortal$1;-><init>()V
-PLandroid/net/CaptivePortal;-><clinit>()V
-PLandroid/net/CaptivePortal;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/CaptivePortal;->describeContents()I
-PLandroid/net/CaptivePortal;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/ConnectivityManager$1;-><init>(Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager$OnNetworkActiveListener;)V
-PLandroid/net/ConnectivityManager$1;->onNetworkActive()V
 HSPLandroid/net/ConnectivityManager$CallbackHandler;-><init>(Landroid/net/ConnectivityManager;Landroid/os/Handler;)V
 HSPLandroid/net/ConnectivityManager$CallbackHandler;-><init>(Landroid/net/ConnectivityManager;Landroid/os/Looper;)V
 HSPLandroid/net/ConnectivityManager$CallbackHandler;->getObject(Landroid/os/Message;Ljava/lang/Class;)Ljava/lang/Object;
@@ -14482,76 +8275,41 @@
 HSPLandroid/net/ConnectivityManager$NetworkCallback;->onBlockedStatusChanged(Landroid/net/Network;Z)V
 HSPLandroid/net/ConnectivityManager$NetworkCallback;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
 HSPLandroid/net/ConnectivityManager$NetworkCallback;->onLinkPropertiesChanged(Landroid/net/Network;Landroid/net/LinkProperties;)V
-PLandroid/net/ConnectivityManager$NetworkCallback;->onLost(Landroid/net/Network;)V
-PLandroid/net/ConnectivityManager$NetworkCallback;->onPreCheck(Landroid/net/Network;)V
+HSPLandroid/net/ConnectivityManager$NetworkCallback;->onNetworkResumed(Landroid/net/Network;)V
+HSPLandroid/net/ConnectivityManager$NetworkCallback;->onNetworkSuspended(Landroid/net/Network;)V
+HSPLandroid/net/ConnectivityManager$NetworkCallback;->onPreCheck(Landroid/net/Network;)V
 HSPLandroid/net/ConnectivityManager;-><init>(Landroid/content/Context;Landroid/net/IConnectivityManager;)V
 HSPLandroid/net/ConnectivityManager;->access$800()Ljava/util/HashMap;
-PLandroid/net/ConnectivityManager;->addDefaultNetworkActiveListener(Landroid/net/ConnectivityManager$OnNetworkActiveListener;)V
 HSPLandroid/net/ConnectivityManager;->checkCallbackNotNull(Landroid/net/ConnectivityManager$NetworkCallback;)V
-PLandroid/net/ConnectivityManager;->enforceChangePermission(Landroid/content/Context;)V
-PLandroid/net/ConnectivityManager;->enforceTetherChangePermission(Landroid/content/Context;Ljava/lang/String;)V
 HSPLandroid/net/ConnectivityManager;->from(Landroid/content/Context;)Landroid/net/ConnectivityManager;
 HSPLandroid/net/ConnectivityManager;->getActiveNetwork()Landroid/net/Network;
-HSPLandroid/net/ConnectivityManager;->getActiveNetworkForUid(I)Landroid/net/Network;
-HSPLandroid/net/ConnectivityManager;->getActiveNetworkForUid(IZ)Landroid/net/Network;
 HSPLandroid/net/ConnectivityManager;->getActiveNetworkInfo()Landroid/net/NetworkInfo;
-HSPLandroid/net/ConnectivityManager;->getAllNetworkInfo()[Landroid/net/NetworkInfo;
 HSPLandroid/net/ConnectivityManager;->getAllNetworks()[Landroid/net/Network;
-PLandroid/net/ConnectivityManager;->getAlwaysOnVpnPackageForUser(I)Ljava/lang/String;
-PLandroid/net/ConnectivityManager;->getBackgroundDataSetting()Z
 HSPLandroid/net/ConnectivityManager;->getBoundNetworkForProcess()Landroid/net/Network;
-HSPLandroid/net/ConnectivityManager;->getCallbackName(I)Ljava/lang/String;
 HSPLandroid/net/ConnectivityManager;->getDefaultHandler()Landroid/net/ConnectivityManager$CallbackHandler;
-HPLandroid/net/ConnectivityManager;->getDefaultNetworkCapabilitiesForUser(I)[Landroid/net/NetworkCapabilities;
 HSPLandroid/net/ConnectivityManager;->getDefaultProxy()Landroid/net/ProxyInfo;
-PLandroid/net/ConnectivityManager;->getDefaultRequest()Landroid/net/NetworkRequest;
-HSPLandroid/net/ConnectivityManager;->getInstance()Landroid/net/ConnectivityManager;
-HSPLandroid/net/ConnectivityManager;->getInstanceOrNull()Landroid/net/ConnectivityManager;
 HSPLandroid/net/ConnectivityManager;->getLinkProperties(Landroid/net/Network;)Landroid/net/LinkProperties;
 HSPLandroid/net/ConnectivityManager;->getNetworkCapabilities(Landroid/net/Network;)Landroid/net/NetworkCapabilities;
 HSPLandroid/net/ConnectivityManager;->getNetworkInfo(I)Landroid/net/NetworkInfo;
 HSPLandroid/net/ConnectivityManager;->getNetworkInfo(Landroid/net/Network;)Landroid/net/NetworkInfo;
 HSPLandroid/net/ConnectivityManager;->getNetworkInfoForUid(Landroid/net/Network;IZ)Landroid/net/NetworkInfo;
-HSPLandroid/net/ConnectivityManager;->getNetworkManagementService()Landroid/os/INetworkManagementService;
 HSPLandroid/net/ConnectivityManager;->getNetworkPolicyManager()Landroid/net/INetworkPolicyManager;
-PLandroid/net/ConnectivityManager;->getNetworkTypeName(I)Ljava/lang/String;
 HSPLandroid/net/ConnectivityManager;->getProcessDefaultNetwork()Landroid/net/Network;
 HSPLandroid/net/ConnectivityManager;->getProxyForNetwork(Landroid/net/Network;)Landroid/net/ProxyInfo;
 HSPLandroid/net/ConnectivityManager;->getRestrictBackgroundStatus()I
-HSPLandroid/net/ConnectivityManager;->getTetherableBluetoothRegexs()[Ljava/lang/String;
-HSPLandroid/net/ConnectivityManager;->getTetherableUsbRegexs()[Ljava/lang/String;
-HSPLandroid/net/ConnectivityManager;->getTetherableWifiRegexs()[Ljava/lang/String;
-PLandroid/net/ConnectivityManager;->inferLegacyTypeForNetworkCapabilities(Landroid/net/NetworkCapabilities;)I
+HSPLandroid/net/ConnectivityManager;->inferLegacyTypeForNetworkCapabilities(Landroid/net/NetworkCapabilities;)I
 HSPLandroid/net/ConnectivityManager;->isActiveNetworkMetered()Z
-HSPLandroid/net/ConnectivityManager;->isDefaultNetworkActive()Z
 HSPLandroid/net/ConnectivityManager;->isNetworkSupported(I)Z
-HPLandroid/net/ConnectivityManager;->isNetworkTypeMobile(I)Z
 HSPLandroid/net/ConnectivityManager;->isNetworkTypeValid(I)Z
-PLandroid/net/ConnectivityManager;->isNetworkTypeWifi(I)Z
-HSPLandroid/net/ConnectivityManager;->isTetheringSupported()Z
 HSPLandroid/net/ConnectivityManager;->printStackTrace()V
 HSPLandroid/net/ConnectivityManager;->registerDefaultNetworkCallback(Landroid/net/ConnectivityManager$NetworkCallback;)V
 HSPLandroid/net/ConnectivityManager;->registerDefaultNetworkCallback(Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;)V
-PLandroid/net/ConnectivityManager;->registerNetworkAgent(Landroid/os/Messenger;Landroid/net/NetworkInfo;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;ILandroid/net/NetworkMisc;I)I
 HSPLandroid/net/ConnectivityManager;->registerNetworkCallback(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;)V
 HSPLandroid/net/ConnectivityManager;->registerNetworkCallback(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;)V
-HSPLandroid/net/ConnectivityManager;->registerNetworkFactory(Landroid/os/Messenger;Ljava/lang/String;)I
-HPLandroid/net/ConnectivityManager;->reportNetworkConnectivity(Landroid/net/Network;Z)V
-HPLandroid/net/ConnectivityManager;->requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;)V
-PLandroid/net/ConnectivityManager;->requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;IILandroid/os/Handler;)V
-PLandroid/net/ConnectivityManager;->requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;)V
+HSPLandroid/net/ConnectivityManager;->requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;IILandroid/os/Handler;)V
+HSPLandroid/net/ConnectivityManager;->requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;)V
 HSPLandroid/net/ConnectivityManager;->sendRequestForNetwork(Landroid/net/NetworkCapabilities;Landroid/net/ConnectivityManager$NetworkCallback;IIILandroid/net/ConnectivityManager$CallbackHandler;)Landroid/net/NetworkRequest;
-HPLandroid/net/ConnectivityManager;->setAirplaneMode(Z)V
-HSPLandroid/net/ConnectivityManager;->setProcessDefaultNetwork(Landroid/net/Network;)Z
-HPLandroid/net/ConnectivityManager;->shouldAvoidBadWifi()Z
-HPLandroid/net/ConnectivityManager;->startCaptivePortalApp(Landroid/net/Network;Landroid/os/Bundle;)V
 HSPLandroid/net/ConnectivityManager;->unregisterNetworkCallback(Landroid/net/ConnectivityManager$NetworkCallback;)V
-HPLandroid/net/ConnectivityMetricsEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/ConnectivityMetricsEvent;
-HPLandroid/net/ConnectivityMetricsEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/net/ConnectivityMetricsEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/ConnectivityMetricsEvent;-><init>(Landroid/os/Parcel;Landroid/net/ConnectivityMetricsEvent$1;)V
-HPLandroid/net/ConnectivityMetricsEvent;->toString()Ljava/lang/String;
-HPLandroid/net/ConnectivityMetricsEvent;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/net/ConnectivityThread$Singleton;-><clinit>()V
 HSPLandroid/net/ConnectivityThread$Singleton;->access$100()Landroid/net/ConnectivityThread;
 HSPLandroid/net/ConnectivityThread;-><init>()V
@@ -14561,256 +8319,124 @@
 HSPLandroid/net/Credentials;-><init>(III)V
 HSPLandroid/net/Credentials;->getPid()I
 HSPLandroid/net/Credentials;->getUid()I
-PLandroid/net/DhcpInfo$1;-><init>()V
-HPLandroid/net/DhcpInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/DhcpInfo;
-HPLandroid/net/DhcpInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/DhcpInfo;-><clinit>()V
-PLandroid/net/DhcpInfo;-><init>()V
-PLandroid/net/DhcpInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/DhcpResults;-><init>(Landroid/net/DhcpResults;)V
-PLandroid/net/DhcpResults;-><init>(Landroid/net/StaticIpConfiguration;)V
-PLandroid/net/DhcpResults;->clear()V
-PLandroid/net/DhcpResults;->getLeaseDuration()I
-PLandroid/net/DhcpResults;->hasMeteredHint()Z
-PLandroid/net/DhcpResults;->toStaticIpConfiguration()Landroid/net/StaticIpConfiguration;
-PLandroid/net/DhcpResults;->toString()Ljava/lang/String;
-PLandroid/net/EventLogTags;->writeNtpFailure(Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/net/EventLogTags;->writeNtpSuccess(Ljava/lang/String;JJ)V
-PLandroid/net/ICaptivePortal$Stub;-><init>()V
-PLandroid/net/ICaptivePortal$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/net/ICaptivePortal$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;->getActiveNetwork()Landroid/net/Network;
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;->getActiveNetworkInfo()Landroid/net/NetworkInfo;
-HSPLandroid/net/IConnectivityManager$Stub$Proxy;->getAllNetworkInfo()[Landroid/net/NetworkInfo;
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;->getAllNetworks()[Landroid/net/Network;
-HPLandroid/net/IConnectivityManager$Stub$Proxy;->getDefaultNetworkCapabilitiesForUser(I)[Landroid/net/NetworkCapabilities;
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;->getLinkProperties(Landroid/net/Network;)Landroid/net/LinkProperties;
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;->getNetworkCapabilities(Landroid/net/Network;)Landroid/net/NetworkCapabilities;
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;->getNetworkInfo(I)Landroid/net/NetworkInfo;
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;->getNetworkInfoForUid(Landroid/net/Network;IZ)Landroid/net/NetworkInfo;
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;->getProxyForNetwork(Landroid/net/Network;)Landroid/net/ProxyInfo;
-HSPLandroid/net/IConnectivityManager$Stub$Proxy;->getTetherableBluetoothRegexs()[Ljava/lang/String;
-HSPLandroid/net/IConnectivityManager$Stub$Proxy;->getTetherableUsbRegexs()[Ljava/lang/String;
-HSPLandroid/net/IConnectivityManager$Stub$Proxy;->getTetherableWifiRegexs()[Ljava/lang/String;
-HPLandroid/net/IConnectivityManager$Stub$Proxy;->getVpnConfig(I)Lcom/android/internal/net/VpnConfig;
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;->isActiveNetworkMetered()Z
-HSPLandroid/net/IConnectivityManager$Stub$Proxy;->isNetworkSupported(I)Z
-HSPLandroid/net/IConnectivityManager$Stub$Proxy;->isTetheringSupported(Ljava/lang/String;)Z
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;->listenForNetwork(Landroid/net/NetworkCapabilities;Landroid/os/Messenger;Landroid/os/IBinder;)Landroid/net/NetworkRequest;
-HSPLandroid/net/IConnectivityManager$Stub$Proxy;->registerNetworkFactory(Landroid/os/Messenger;Ljava/lang/String;)I
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;->releaseNetworkRequest(Landroid/net/NetworkRequest;)V
-HPLandroid/net/IConnectivityManager$Stub$Proxy;->reportNetworkConnectivity(Landroid/net/Network;Z)V
 HSPLandroid/net/IConnectivityManager$Stub$Proxy;->requestNetwork(Landroid/net/NetworkCapabilities;Landroid/os/Messenger;ILandroid/os/IBinder;I)Landroid/net/NetworkRequest;
-HPLandroid/net/IConnectivityManager$Stub$Proxy;->setAirplaneMode(Z)V
-HPLandroid/net/IConnectivityManager$Stub$Proxy;->shouldAvoidBadWifi()Z
-HPLandroid/net/IConnectivityManager$Stub$Proxy;->startCaptivePortalAppInternal(Landroid/net/Network;Landroid/os/Bundle;)V
-HSPLandroid/net/IConnectivityManager$Stub;-><init>()V
 HSPLandroid/net/IConnectivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IConnectivityManager;
-PLandroid/net/IConnectivityManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/net/IConnectivityManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/net/IEthernetManager$Stub;-><init>()V
-PLandroid/net/IEthernetManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/net/IIpConnectivityMetrics$Stub$Proxy;->logEvent(Landroid/net/ConnectivityMetricsEvent;)I
-HSPLandroid/net/IIpConnectivityMetrics$Stub;-><init>()V
-HSPLandroid/net/IIpConnectivityMetrics$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IIpConnectivityMetrics;
-PLandroid/net/IIpConnectivityMetrics$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/net/IIpConnectivityMetrics$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/net/IIpSecService$Stub;-><init>()V
-PLandroid/net/IIpSecService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/net/INetdEventCallback$Stub;-><init>()V
-HSPLandroid/net/INetworkManagementEventObserver$Stub;-><init>()V
-HSPLandroid/net/INetworkManagementEventObserver$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/net/INetworkPolicyListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/INetworkPolicyListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/net/INetworkPolicyListener$Stub$Proxy;->onMeteredIfacesChanged([Ljava/lang/String;)V
-PLandroid/net/INetworkPolicyListener$Stub$Proxy;->onSubscriptionPlansChanged(I[Landroid/telephony/SubscriptionPlan;)V
-HPLandroid/net/INetworkPolicyListener$Stub$Proxy;->onUidRulesChanged(II)V
 HSPLandroid/net/INetworkPolicyListener$Stub;-><init>()V
 HSPLandroid/net/INetworkPolicyListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/net/INetworkPolicyListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkPolicyListener;
-HSPLandroid/net/INetworkPolicyListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/net/INetworkPolicyManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/net/INetworkPolicyManager$Stub$Proxy;->getRestrictBackground()Z
 HSPLandroid/net/INetworkPolicyManager$Stub$Proxy;->getRestrictBackgroundByCaller()I
-HSPLandroid/net/INetworkPolicyManager$Stub$Proxy;->registerListener(Landroid/net/INetworkPolicyListener;)V
-HSPLandroid/net/INetworkPolicyManager$Stub$Proxy;->unregisterListener(Landroid/net/INetworkPolicyListener;)V
-HSPLandroid/net/INetworkPolicyManager$Stub;-><init>()V
 HSPLandroid/net/INetworkPolicyManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkPolicyManager;
-PLandroid/net/INetworkPolicyManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/net/INetworkPolicyManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/net/INetworkRecommendationProvider$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/net/INetworkRecommendationProvider$Stub$Proxy;->requestScores([Landroid/net/NetworkKey;)V
-HSPLandroid/net/INetworkRecommendationProvider$Stub;-><init>()V
-PLandroid/net/INetworkRecommendationProvider$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkRecommendationProvider;
-HSPLandroid/net/INetworkRecommendationProvider$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/net/INetworkScoreCache$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/INetworkScoreCache$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/net/INetworkScoreCache$Stub$Proxy;->clearScores()V
-PLandroid/net/INetworkScoreCache$Stub$Proxy;->updateScores(Ljava/util/List;)V
 HSPLandroid/net/INetworkScoreCache$Stub;-><init>()V
 HSPLandroid/net/INetworkScoreCache$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/net/INetworkScoreCache$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkScoreCache;
-HPLandroid/net/INetworkScoreCache$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSLandroid/net/INetworkScoreService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/net/INetworkScoreService$Stub$Proxy;->getActiveScorer()Landroid/net/NetworkScorerAppData;
-HSPLandroid/net/INetworkScoreService$Stub$Proxy;->getActiveScorerPackage()Ljava/lang/String;
-HPLandroid/net/INetworkScoreService$Stub$Proxy;->requestScores([Landroid/net/NetworkKey;)Z
-HPLandroid/net/INetworkScoreService$Stub$Proxy;->updateScores([Landroid/net/ScoredNetwork;)Z
-HSPLandroid/net/INetworkScoreService$Stub;-><init>()V
 HSPLandroid/net/INetworkScoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkScoreService;
-PLandroid/net/INetworkScoreService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/net/INetworkScoreService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSLandroid/net/INetworkStatsService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/net/INetworkStatsService$Stub$Proxy;->getMobileIfaces()[Ljava/lang/String;
-HSPLandroid/net/INetworkStatsService$Stub$Proxy;->getTotalStats(I)J
-HSPLandroid/net/INetworkStatsService$Stub$Proxy;->getUidStats(II)J
-HSPLandroid/net/INetworkStatsService$Stub$Proxy;->incrementOperationCount(III)V
-HPLandroid/net/INetworkStatsService$Stub$Proxy;->openSessionForUsageStats(ILjava/lang/String;)Landroid/net/INetworkStatsSession;
-HSPLandroid/net/INetworkStatsService$Stub;-><init>()V
+HSPLandroid/net/INetworkStatsService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/net/INetworkStatsService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkStatsService;
-PLandroid/net/INetworkStatsService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/net/INetworkStatsService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/net/INetworkStatsSession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/net/INetworkStatsSession$Stub$Proxy;->close()V
-HPLandroid/net/INetworkStatsSession$Stub$Proxy;->getHistoryIntervalForUid(Landroid/net/NetworkTemplate;IIIIJJ)Landroid/net/NetworkStatsHistory;
-PLandroid/net/INetworkStatsSession$Stub;-><init>()V
-HPLandroid/net/INetworkStatsSession$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/net/INetworkStatsSession$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkStatsSession;
-PLandroid/net/INetworkStatsSession$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/net/INetworkStatsSession$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/net/ITetheringStatsProvider$Stub;-><init>()V
-HSPLandroid/net/InetAddresses;->parseNumericAddress(Ljava/lang/String;)Ljava/net/InetAddress;
 HSPLandroid/net/IpConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/IpConfiguration;
 HSPLandroid/net/IpConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/IpConfiguration$IpAssignment;->valueOf(Ljava/lang/String;)Landroid/net/IpConfiguration$IpAssignment;
+HSPLandroid/net/IpConfiguration$IpAssignment;->valueOf(Ljava/lang/String;)Landroid/net/IpConfiguration$IpAssignment;
 HSPLandroid/net/IpConfiguration$IpAssignment;->values()[Landroid/net/IpConfiguration$IpAssignment;
-PLandroid/net/IpConfiguration$ProxySettings;->valueOf(Ljava/lang/String;)Landroid/net/IpConfiguration$ProxySettings;
+HSPLandroid/net/IpConfiguration$ProxySettings;->valueOf(Ljava/lang/String;)Landroid/net/IpConfiguration$ProxySettings;
 HSPLandroid/net/IpConfiguration$ProxySettings;->values()[Landroid/net/IpConfiguration$ProxySettings;
-PLandroid/net/IpConfiguration;-><init>()V
-PLandroid/net/IpConfiguration;-><init>(Landroid/net/IpConfiguration;)V
-HPLandroid/net/IpConfiguration;->getIpAssignment()Landroid/net/IpConfiguration$IpAssignment;
-HPLandroid/net/IpConfiguration;->getProxySettings()Landroid/net/IpConfiguration$ProxySettings;
-PLandroid/net/IpConfiguration;->init(Landroid/net/IpConfiguration$IpAssignment;Landroid/net/IpConfiguration$ProxySettings;Landroid/net/StaticIpConfiguration;Landroid/net/ProxyInfo;)V
-PLandroid/net/IpConfiguration;->setIpAssignment(Landroid/net/IpConfiguration$IpAssignment;)V
-PLandroid/net/IpConfiguration;->setProxySettings(Landroid/net/IpConfiguration$ProxySettings;)V
-HPLandroid/net/IpConfiguration;->toString()Ljava/lang/String;
-PLandroid/net/IpConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/IpConfiguration;-><init>()V
+HSPLandroid/net/IpConfiguration;->init(Landroid/net/IpConfiguration$IpAssignment;Landroid/net/IpConfiguration$ProxySettings;Landroid/net/StaticIpConfiguration;Landroid/net/ProxyInfo;)V
 HSPLandroid/net/IpPrefix$2;->createFromParcel(Landroid/os/Parcel;)Landroid/net/IpPrefix;
 HSPLandroid/net/IpPrefix$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/net/IpPrefix;-><init>(Ljava/lang/String;)V
-PLandroid/net/IpPrefix;-><init>(Ljava/net/InetAddress;I)V
 HSPLandroid/net/IpPrefix;-><init>([BI)V
 HSPLandroid/net/IpPrefix;->checkAndMaskAddressAndPrefixLength()V
 HSPLandroid/net/IpPrefix;->equals(Ljava/lang/Object;)Z
 HSPLandroid/net/IpPrefix;->getAddress()Ljava/net/InetAddress;
 HSPLandroid/net/IpPrefix;->getPrefixLength()I
-PLandroid/net/IpPrefix;->hashCode()I
 HSPLandroid/net/IpPrefix;->toString()Ljava/lang/String;
-HPLandroid/net/IpPrefix;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/IpPrefix;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/net/LinkAddress$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/LinkAddress;
 HSPLandroid/net/LinkAddress$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/net/LinkAddress;-><init>(Ljava/lang/String;)V
 HSPLandroid/net/LinkAddress;-><init>(Ljava/lang/String;II)V
-HSPLandroid/net/LinkAddress;-><init>(Ljava/net/InetAddress;I)V
 HSPLandroid/net/LinkAddress;-><init>(Ljava/net/InetAddress;III)V
-HPLandroid/net/LinkAddress;->equals(Ljava/lang/Object;)Z
+HSPLandroid/net/LinkAddress;-><init>(Ljava/net/InetAddress;IIIJJ)V
 HSPLandroid/net/LinkAddress;->getAddress()Ljava/net/InetAddress;
-HSPLandroid/net/LinkAddress;->getFlags()I
-PLandroid/net/LinkAddress;->getPrefixLength()I
-HSPLandroid/net/LinkAddress;->getScope()I
 HSPLandroid/net/LinkAddress;->init(Ljava/net/InetAddress;III)V
-PLandroid/net/LinkAddress;->isGlobalPreferred()Z
-PLandroid/net/LinkAddress;->isIpv6()Z
-PLandroid/net/LinkAddress;->isIpv6ULA()Z
+HSPLandroid/net/LinkAddress;->init(Ljava/net/InetAddress;IIIJJ)V
 HSPLandroid/net/LinkAddress;->isSameAddressAs(Landroid/net/LinkAddress;)Z
 HSPLandroid/net/LinkAddress;->scopeForUnicastAddress(Ljava/net/InetAddress;)I
 HSPLandroid/net/LinkAddress;->toString()Ljava/lang/String;
-HPLandroid/net/LinkAddress;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/LinkAddress;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/net/LinkProperties$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/LinkProperties;
 HSPLandroid/net/LinkProperties$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/LinkProperties$CompareResult;-><init>(Ljava/util/Collection;Ljava/util/Collection;)V
 HSPLandroid/net/LinkProperties;-><init>()V
-HPLandroid/net/LinkProperties;-><init>(Landroid/net/LinkProperties;)V
+HSPLandroid/net/LinkProperties;-><init>(Landroid/net/LinkProperties;)V
+HSPLandroid/net/LinkProperties;->access$000(Landroid/os/Parcel;)Ljava/net/InetAddress;
 HSPLandroid/net/LinkProperties;->addDnsServer(Ljava/net/InetAddress;)Z
 HSPLandroid/net/LinkProperties;->addLinkAddress(Landroid/net/LinkAddress;)Z
+HSPLandroid/net/LinkProperties;->addPcscfServer(Ljava/net/InetAddress;)Z
 HSPLandroid/net/LinkProperties;->addRoute(Landroid/net/RouteInfo;)Z
-PLandroid/net/LinkProperties;->addValidatedPrivateDnsServer(Ljava/net/InetAddress;)Z
-PLandroid/net/LinkProperties;->clear()V
-PLandroid/net/LinkProperties;->describeContents()I
-PLandroid/net/LinkProperties;->ensureDirectlyConnectedRoutes()V
-PLandroid/net/LinkProperties;->equals(Ljava/lang/Object;)Z
+HSPLandroid/net/LinkProperties;->addStackedLink(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->addValidatedPrivateDnsServer(Ljava/net/InetAddress;)Z
+HSPLandroid/net/LinkProperties;->equals(Ljava/lang/Object;)Z
 HSPLandroid/net/LinkProperties;->findLinkAddressIndex(Landroid/net/LinkAddress;)I
-PLandroid/net/LinkProperties;->getAddresses()Ljava/util/List;
-PLandroid/net/LinkProperties;->getAllInterfaceNames()Ljava/util/List;
-PLandroid/net/LinkProperties;->getAllRoutes()Ljava/util/List;
+HSPLandroid/net/LinkProperties;->getAddresses()Ljava/util/List;
+HSPLandroid/net/LinkProperties;->getDhcpServerAddress()Ljava/net/Inet4Address;
 HSPLandroid/net/LinkProperties;->getDnsServers()Ljava/util/List;
-PLandroid/net/LinkProperties;->getDomains()Ljava/lang/String;
-PLandroid/net/LinkProperties;->getHttpProxy()Landroid/net/ProxyInfo;
-PLandroid/net/LinkProperties;->getInterfaceName()Ljava/lang/String;
+HSPLandroid/net/LinkProperties;->getDomains()Ljava/lang/String;
+HSPLandroid/net/LinkProperties;->getHttpProxy()Landroid/net/ProxyInfo;
+HSPLandroid/net/LinkProperties;->getInterfaceName()Ljava/lang/String;
 HSPLandroid/net/LinkProperties;->getLinkAddresses()Ljava/util/List;
-PLandroid/net/LinkProperties;->getMtu()I
-PLandroid/net/LinkProperties;->getPcscfServers()Ljava/util/List;
+HSPLandroid/net/LinkProperties;->getMtu()I
+HSPLandroid/net/LinkProperties;->getPcscfServers()Ljava/util/List;
 HSPLandroid/net/LinkProperties;->getPrivateDnsServerName()Ljava/lang/String;
 HSPLandroid/net/LinkProperties;->getRoutes()Ljava/util/List;
-PLandroid/net/LinkProperties;->getStackedLinks()Ljava/util/List;
-PLandroid/net/LinkProperties;->getValidatedPrivateDnsServers()Ljava/util/List;
-PLandroid/net/LinkProperties;->hasGlobalIpv6Address()Z
-PLandroid/net/LinkProperties;->hasIPv4DefaultRoute()Z
-PLandroid/net/LinkProperties;->hasIPv4DnsServer()Z
-PLandroid/net/LinkProperties;->hasIPv6DnsServer()Z
-PLandroid/net/LinkProperties;->hasIpv4Address()Z
-HPLandroid/net/LinkProperties;->hasIpv4AddressOnInterface(Ljava/lang/String;)Z
-PLandroid/net/LinkProperties;->hasIpv4DefaultRoute()Z
-HPLandroid/net/LinkProperties;->hasIpv4DnsServer()Z
-PLandroid/net/LinkProperties;->hasIpv6DefaultRoute()Z
-PLandroid/net/LinkProperties;->hasIpv6DnsServer()Z
-PLandroid/net/LinkProperties;->isIdenticalAddresses(Landroid/net/LinkProperties;)Z
-PLandroid/net/LinkProperties;->isIdenticalDnses(Landroid/net/LinkProperties;)Z
-PLandroid/net/LinkProperties;->isIdenticalHttpProxy(Landroid/net/LinkProperties;)Z
-PLandroid/net/LinkProperties;->isIdenticalInterfaceName(Landroid/net/LinkProperties;)Z
-PLandroid/net/LinkProperties;->isIdenticalMtu(Landroid/net/LinkProperties;)Z
-PLandroid/net/LinkProperties;->isIdenticalNat64Prefix(Landroid/net/LinkProperties;)Z
-PLandroid/net/LinkProperties;->isIdenticalPcscfs(Landroid/net/LinkProperties;)Z
-PLandroid/net/LinkProperties;->isIdenticalPrivateDns(Landroid/net/LinkProperties;)Z
-PLandroid/net/LinkProperties;->isIdenticalRoutes(Landroid/net/LinkProperties;)Z
-PLandroid/net/LinkProperties;->isIdenticalStackedLinks(Landroid/net/LinkProperties;)Z
-PLandroid/net/LinkProperties;->isIdenticalTcpBufferSizes(Landroid/net/LinkProperties;)Z
-PLandroid/net/LinkProperties;->isIdenticalValidatedPrivateDnses(Landroid/net/LinkProperties;)Z
-PLandroid/net/LinkProperties;->isIdenticalWakeOnLan(Landroid/net/LinkProperties;)Z
-HPLandroid/net/LinkProperties;->isIpv4Provisioned()Z
-HPLandroid/net/LinkProperties;->isIpv6Provisioned()Z
+HSPLandroid/net/LinkProperties;->getValidatedPrivateDnsServers()Ljava/util/List;
+HSPLandroid/net/LinkProperties;->hasGlobalIpv6Address()Z
+HSPLandroid/net/LinkProperties;->isIdenticalAddresses(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalDhcpServerAddress(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalDnses(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalHttpProxy(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalInterfaceName(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalMtu(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalNat64Prefix(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalPcscfs(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalPrivateDns(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalRoutes(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalStackedLinks(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalTcpBufferSizes(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalValidatedPrivateDnses(Landroid/net/LinkProperties;)Z
+HSPLandroid/net/LinkProperties;->isIdenticalWakeOnLan(Landroid/net/LinkProperties;)Z
 HSPLandroid/net/LinkProperties;->isPrivateDnsActive()Z
-HPLandroid/net/LinkProperties;->isProvisioned()Z
-HPLandroid/net/LinkProperties;->isReachable(Ljava/net/InetAddress;)Z
-PLandroid/net/LinkProperties;->isWakeOnLanSupported()Z
-HPLandroid/net/LinkProperties;->removeDnsServer(Ljava/net/InetAddress;)Z
-HPLandroid/net/LinkProperties;->removeLinkAddress(Landroid/net/LinkAddress;)Z
-HPLandroid/net/LinkProperties;->removeRoute(Landroid/net/RouteInfo;)Z
+HSPLandroid/net/LinkProperties;->isWakeOnLanSupported()Z
+HSPLandroid/net/LinkProperties;->readAddress(Landroid/os/Parcel;)Ljava/net/InetAddress;
 HSPLandroid/net/LinkProperties;->routeWithInterface(Landroid/net/RouteInfo;)Landroid/net/RouteInfo;
-HPLandroid/net/LinkProperties;->setDnsServers(Ljava/util/Collection;)V
+HSPLandroid/net/LinkProperties;->setCaptivePortalApiUrl(Landroid/net/Uri;)V
+HSPLandroid/net/LinkProperties;->setCaptivePortalData(Landroid/net/CaptivePortalData;)V
+HSPLandroid/net/LinkProperties;->setDhcpServerAddress(Ljava/net/Inet4Address;)V
 HSPLandroid/net/LinkProperties;->setDomains(Ljava/lang/String;)V
 HSPLandroid/net/LinkProperties;->setInterfaceName(Ljava/lang/String;)V
-HPLandroid/net/LinkProperties;->setLinkAddresses(Ljava/util/Collection;)V
 HSPLandroid/net/LinkProperties;->setMtu(I)V
 HSPLandroid/net/LinkProperties;->setNat64Prefix(Landroid/net/IpPrefix;)V
 HSPLandroid/net/LinkProperties;->setPrivateDnsServerName(Ljava/lang/String;)V
 HSPLandroid/net/LinkProperties;->setTcpBufferSizes(Ljava/lang/String;)V
 HSPLandroid/net/LinkProperties;->setUsePrivateDns(Z)V
-PLandroid/net/LinkProperties;->setValidatedPrivateDnsServers(Ljava/util/Collection;)V
 HSPLandroid/net/LinkProperties;->setWakeOnLanSupported(Z)V
 HSPLandroid/net/LinkProperties;->toString()Ljava/lang/String;
-HPLandroid/net/LinkProperties;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/LinkProperties;->writeAddress(Landroid/os/Parcel;Ljava/net/InetAddress;)V
+HSPLandroid/net/LinkProperties;->writeAddresses(Landroid/os/Parcel;Ljava/util/List;)V
+HSPLandroid/net/LinkProperties;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/net/LocalServerSocket;-><init>(Ljava/io/FileDescriptor;)V
-HSPLandroid/net/LocalServerSocket;-><init>(Ljava/lang/String;)V
 HSPLandroid/net/LocalServerSocket;->accept()Landroid/net/LocalSocket;
 HSPLandroid/net/LocalServerSocket;->close()V
 HSPLandroid/net/LocalServerSocket;->getFileDescriptor()Ljava/io/FileDescriptor;
-HSPLandroid/net/LocalSocket;-><init>()V
-HSPLandroid/net/LocalSocket;-><init>(I)V
 HSPLandroid/net/LocalSocket;-><init>(Landroid/net/LocalSocketImpl;I)V
 HSPLandroid/net/LocalSocket;->close()V
-HSPLandroid/net/LocalSocket;->connect(Landroid/net/LocalSocketAddress;)V
 HSPLandroid/net/LocalSocket;->createConnectedLocalSocket(Landroid/net/LocalSocketImpl;I)Landroid/net/LocalSocket;
 HSPLandroid/net/LocalSocket;->createLocalSocketForAccept(Landroid/net/LocalSocketImpl;)Landroid/net/LocalSocket;
 HSPLandroid/net/LocalSocket;->getFileDescriptor()Ljava/io/FileDescriptor;
@@ -14819,15 +8445,8 @@
 HSPLandroid/net/LocalSocket;->getPeerCredentials()Landroid/net/Credentials;
 HSPLandroid/net/LocalSocket;->implCreateIfNeeded()V
 HSPLandroid/net/LocalSocket;->setSoTimeout(I)V
-HSPLandroid/net/LocalSocketAddress$Namespace;->getId()I
-HSPLandroid/net/LocalSocketAddress;-><init>(Ljava/lang/String;)V
-HSPLandroid/net/LocalSocketAddress;-><init>(Ljava/lang/String;Landroid/net/LocalSocketAddress$Namespace;)V
-HSPLandroid/net/LocalSocketAddress;->getName()Ljava/lang/String;
-HSPLandroid/net/LocalSocketAddress;->getNamespace()Landroid/net/LocalSocketAddress$Namespace;
 HSPLandroid/net/LocalSocketImpl$SocketInputStream;-><init>(Landroid/net/LocalSocketImpl;)V
 HSPLandroid/net/LocalSocketImpl$SocketInputStream;->available()I
-HSPLandroid/net/LocalSocketImpl$SocketInputStream;->read()I
-PLandroid/net/LocalSocketImpl$SocketInputStream;->read([B)I
 HSPLandroid/net/LocalSocketImpl$SocketInputStream;->read([BII)I
 HSPLandroid/net/LocalSocketImpl$SocketOutputStream;-><init>(Landroid/net/LocalSocketImpl;)V
 HSPLandroid/net/LocalSocketImpl$SocketOutputStream;->write(I)V
@@ -14837,15 +8456,11 @@
 HSPLandroid/net/LocalSocketImpl;->accept(Landroid/net/LocalSocketImpl;)V
 HSPLandroid/net/LocalSocketImpl;->access$000(Landroid/net/LocalSocketImpl;)Ljava/io/FileDescriptor;
 HSPLandroid/net/LocalSocketImpl;->access$100(Landroid/net/LocalSocketImpl;)Ljava/lang/Object;
-HSPLandroid/net/LocalSocketImpl;->access$200(Landroid/net/LocalSocketImpl;Ljava/io/FileDescriptor;)I
 HSPLandroid/net/LocalSocketImpl;->access$300(Landroid/net/LocalSocketImpl;[BIILjava/io/FileDescriptor;)I
 HSPLandroid/net/LocalSocketImpl;->access$400(Landroid/net/LocalSocketImpl;)Ljava/lang/Object;
 HSPLandroid/net/LocalSocketImpl;->access$500(Landroid/net/LocalSocketImpl;[BIILjava/io/FileDescriptor;)V
 HSPLandroid/net/LocalSocketImpl;->access$600(Landroid/net/LocalSocketImpl;ILjava/io/FileDescriptor;)V
-HSPLandroid/net/LocalSocketImpl;->bind(Landroid/net/LocalSocketAddress;)V
 HSPLandroid/net/LocalSocketImpl;->close()V
-HSPLandroid/net/LocalSocketImpl;->connect(Landroid/net/LocalSocketAddress;I)V
-HSPLandroid/net/LocalSocketImpl;->create(I)V
 HSPLandroid/net/LocalSocketImpl;->finalize()V
 HSPLandroid/net/LocalSocketImpl;->getFileDescriptor()Ljava/io/FileDescriptor;
 HSPLandroid/net/LocalSocketImpl;->getInputStream()Ljava/io/InputStream;
@@ -14857,75 +8472,31 @@
 HSPLandroid/net/MacAddress$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/MacAddress;
 HSPLandroid/net/MacAddress$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/net/MacAddress;-><init>(J)V
-PLandroid/net/MacAddress;-><init>(JLandroid/net/MacAddress$1;)V
-HSPLandroid/net/MacAddress;->byteAddrFromLongAddr(J)[B
-HPLandroid/net/MacAddress;->equals(Ljava/lang/Object;)Z
-PLandroid/net/MacAddress;->fromBytes([B)Landroid/net/MacAddress;
+HSPLandroid/net/MacAddress;-><init>(JLandroid/net/MacAddress$1;)V
 HSPLandroid/net/MacAddress;->fromString(Ljava/lang/String;)Landroid/net/MacAddress;
-PLandroid/net/MacAddress;->getAddressType()I
-PLandroid/net/MacAddress;->hashCode()I
-PLandroid/net/MacAddress;->isLocallyAssigned()Z
-PLandroid/net/MacAddress;->isMacAddress([B)Z
-PLandroid/net/MacAddress;->isMulticastAddress()Z
-HPLandroid/net/MacAddress;->longAddrFromByteAddr([B)J
 HSPLandroid/net/MacAddress;->longAddrFromStringAddr(Ljava/lang/String;)J
-HPLandroid/net/MacAddress;->stringAddrFromLongAddr(J)Ljava/lang/String;
-HSPLandroid/net/MacAddress;->toByteArray()[B
-PLandroid/net/MacAddress;->toString()Ljava/lang/String;
-PLandroid/net/MacAddress;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/MatchAllNetworkSpecifier;-><init>()V
-PLandroid/net/MatchAllNetworkSpecifier;->hashCode()I
 HSPLandroid/net/Network$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/Network;
 HSPLandroid/net/Network$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/net/Network$1;->newArray(I)[Landroid/net/Network;
 HSPLandroid/net/Network$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/net/Network$NetworkBoundSocketFactory;->createSocket()Ljava/net/Socket;
 HSPLandroid/net/Network;-><init>(I)V
 HSPLandroid/net/Network;-><init>(IZ)V
-HPLandroid/net/Network;-><init>(Landroid/net/Network;)V
 HSPLandroid/net/Network;->bindSocket(Ljava/io/FileDescriptor;)V
-PLandroid/net/Network;->bindSocket(Ljava/net/DatagramSocket;)V
 HSPLandroid/net/Network;->bindSocket(Ljava/net/Socket;)V
-PLandroid/net/Network;->describeContents()I
-PLandroid/net/Network;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLandroid/net/Network;->equals(Ljava/lang/Object;)Z
-HPLandroid/net/Network;->fromNetworkHandle(J)Landroid/net/Network;
-HSPLandroid/net/Network;->getAllByName(Ljava/lang/String;)[Ljava/net/InetAddress;
-PLandroid/net/Network;->getByName(Ljava/lang/String;)Ljava/net/InetAddress;
 HSPLandroid/net/Network;->getNetIdForResolv()I
 HSPLandroid/net/Network;->getNetworkHandle()J
-PLandroid/net/Network;->getPrivateDnsBypassingCopy()Landroid/net/Network;
-HSPLandroid/net/Network;->getSocketFactory()Ljavax/net/SocketFactory;
 HSPLandroid/net/Network;->hashCode()I
-HSPLandroid/net/Network;->lambda$maybeInitUrlConnectionFactory$0$Network(Ljava/lang/String;)Ljava/util/List;
-HSPLandroid/net/Network;->maybeInitUrlConnectionFactory()V
-HSPLandroid/net/Network;->openConnection(Ljava/net/URL;)Ljava/net/URLConnection;
-HSPLandroid/net/Network;->openConnection(Ljava/net/URL;Ljava/net/Proxy;)Ljava/net/URLConnection;
 HSPLandroid/net/Network;->toString()Ljava/lang/String;
 HSPLandroid/net/Network;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/NetworkAgent;-><init>(Landroid/os/Looper;Landroid/content/Context;Ljava/lang/String;Landroid/net/NetworkInfo;Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;ILandroid/net/NetworkMisc;)V
-PLandroid/net/NetworkAgent;-><init>(Landroid/os/Looper;Landroid/content/Context;Ljava/lang/String;Landroid/net/NetworkInfo;Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;ILandroid/net/NetworkMisc;I)V
-PLandroid/net/NetworkAgent;->explicitlySelected(ZZ)V
-PLandroid/net/NetworkAgent;->handleMessage(Landroid/os/Message;)V
-PLandroid/net/NetworkAgent;->log(Ljava/lang/String;)V
-PLandroid/net/NetworkAgent;->queueOrSendMessage(III)V
-PLandroid/net/NetworkAgent;->queueOrSendMessage(IIILjava/lang/Object;)V
-PLandroid/net/NetworkAgent;->queueOrSendMessage(ILjava/lang/Object;)V
-PLandroid/net/NetworkAgent;->queueOrSendMessage(Landroid/os/Message;)V
-PLandroid/net/NetworkAgent;->sendLinkProperties(Landroid/net/LinkProperties;)V
-PLandroid/net/NetworkAgent;->sendNetworkCapabilities(Landroid/net/NetworkCapabilities;)V
-PLandroid/net/NetworkAgent;->sendNetworkInfo(Landroid/net/NetworkInfo;)V
-PLandroid/net/NetworkAgent;->sendNetworkScore(I)V
-PLandroid/net/NetworkAgent;->updateScore(Landroid/net/NetworkScore;)V
 HSPLandroid/net/NetworkCapabilities$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/NetworkCapabilities;
 HSPLandroid/net/NetworkCapabilities$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/net/NetworkCapabilities$1;->newArray(I)[Landroid/net/NetworkCapabilities;
-HPLandroid/net/NetworkCapabilities$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/net/NetworkCapabilities;-><init>()V
 HSPLandroid/net/NetworkCapabilities;-><init>(Landroid/net/NetworkCapabilities;)V
 HSPLandroid/net/NetworkCapabilities;->access$002(Landroid/net/NetworkCapabilities;J)J
 HSPLandroid/net/NetworkCapabilities;->access$1002(Landroid/net/NetworkCapabilities;Z)Z
 HSPLandroid/net/NetworkCapabilities;->access$102(Landroid/net/NetworkCapabilities;J)J
+HSPLandroid/net/NetworkCapabilities;->access$1102(Landroid/net/NetworkCapabilities;I)I
 HSPLandroid/net/NetworkCapabilities;->access$202(Landroid/net/NetworkCapabilities;J)J
 HSPLandroid/net/NetworkCapabilities;->access$302(Landroid/net/NetworkCapabilities;I)I
 HSPLandroid/net/NetworkCapabilities;->access$402(Landroid/net/NetworkCapabilities;I)I
@@ -14941,14 +8512,10 @@
 HSPLandroid/net/NetworkCapabilities;->checkValidCapability(I)V
 HSPLandroid/net/NetworkCapabilities;->checkValidTransportType(I)V
 HSPLandroid/net/NetworkCapabilities;->clearAll()V
-HSPLandroid/net/NetworkCapabilities;->describeFirstNonRequestableCapability()Ljava/lang/String;
-PLandroid/net/NetworkCapabilities;->describeImmutableDifferences(Landroid/net/NetworkCapabilities;)Ljava/lang/String;
-HPLandroid/net/NetworkCapabilities;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLandroid/net/NetworkCapabilities;->equalRequestableCapabilities(Landroid/net/NetworkCapabilities;)Z
+HSPLandroid/net/NetworkCapabilities;->deduceRestrictedCapability()Z
 HSPLandroid/net/NetworkCapabilities;->equals(Ljava/lang/Object;)Z
 HSPLandroid/net/NetworkCapabilities;->equalsLinkBandwidths(Landroid/net/NetworkCapabilities;)Z
 HSPLandroid/net/NetworkCapabilities;->equalsNetCapabilities(Landroid/net/NetworkCapabilities;)Z
-PLandroid/net/NetworkCapabilities;->equalsNetCapabilitiesRequestable(Landroid/net/NetworkCapabilities;)Z
 HSPLandroid/net/NetworkCapabilities;->equalsPrivateDnsBroken(Landroid/net/NetworkCapabilities;)Z
 HSPLandroid/net/NetworkCapabilities;->equalsSSID(Landroid/net/NetworkCapabilities;)Z
 HSPLandroid/net/NetworkCapabilities;->equalsSignalStrength(Landroid/net/NetworkCapabilities;)Z
@@ -14956,91 +8523,30 @@
 HSPLandroid/net/NetworkCapabilities;->equalsTransportInfo(Landroid/net/NetworkCapabilities;)Z
 HSPLandroid/net/NetworkCapabilities;->equalsTransportTypes(Landroid/net/NetworkCapabilities;)Z
 HSPLandroid/net/NetworkCapabilities;->equalsUids(Landroid/net/NetworkCapabilities;)Z
-PLandroid/net/NetworkCapabilities;->getCapabilities()[I
-PLandroid/net/NetworkCapabilities;->getLinkDownstreamBandwidthKbps()I
-HPLandroid/net/NetworkCapabilities;->getLinkUpstreamBandwidthKbps()I
 HSPLandroid/net/NetworkCapabilities;->getNetworkSpecifier()Landroid/net/NetworkSpecifier;
-HSPLandroid/net/NetworkCapabilities;->getSSID()Ljava/lang/String;
 HSPLandroid/net/NetworkCapabilities;->getTransportTypes()[I
-PLandroid/net/NetworkCapabilities;->getUnwantedCapabilities()[I
 HSPLandroid/net/NetworkCapabilities;->hasCapability(I)Z
 HSPLandroid/net/NetworkCapabilities;->hasSignalStrength()Z
 HSPLandroid/net/NetworkCapabilities;->hasTransport(I)Z
 HSPLandroid/net/NetworkCapabilities;->hashCode()I
-HSPLandroid/net/NetworkCapabilities;->isPrivateDnsBroken()Z
 HSPLandroid/net/NetworkCapabilities;->isValidCapability(I)Z
 HSPLandroid/net/NetworkCapabilities;->isValidTransport(I)Z
 HSPLandroid/net/NetworkCapabilities;->maybeMarkCapabilitiesRestricted()V
 HSPLandroid/net/NetworkCapabilities;->removeCapability(I)Landroid/net/NetworkCapabilities;
-HSPLandroid/net/NetworkCapabilities;->satisfiedByLinkBandwidths(Landroid/net/NetworkCapabilities;)Z
-HSPLandroid/net/NetworkCapabilities;->satisfiedByNetCapabilities(Landroid/net/NetworkCapabilities;Z)Z
-HSPLandroid/net/NetworkCapabilities;->satisfiedByNetworkCapabilities(Landroid/net/NetworkCapabilities;)Z
-HSPLandroid/net/NetworkCapabilities;->satisfiedByNetworkCapabilities(Landroid/net/NetworkCapabilities;Z)Z
-HSPLandroid/net/NetworkCapabilities;->satisfiedBySSID(Landroid/net/NetworkCapabilities;)Z
-HSPLandroid/net/NetworkCapabilities;->satisfiedBySignalStrength(Landroid/net/NetworkCapabilities;)Z
-HSPLandroid/net/NetworkCapabilities;->satisfiedBySpecifier(Landroid/net/NetworkCapabilities;)Z
-HSPLandroid/net/NetworkCapabilities;->satisfiedByTransportTypes(Landroid/net/NetworkCapabilities;)Z
-HSPLandroid/net/NetworkCapabilities;->satisfiedByUids(Landroid/net/NetworkCapabilities;)Z
 HSPLandroid/net/NetworkCapabilities;->set(Landroid/net/NetworkCapabilities;)V
-HSPLandroid/net/NetworkCapabilities;->setCapabilities([I[I)V
-HSPLandroid/net/NetworkCapabilities;->setLinkDownstreamBandwidthKbps(I)Landroid/net/NetworkCapabilities;
-HSPLandroid/net/NetworkCapabilities;->setLinkUpstreamBandwidthKbps(I)Landroid/net/NetworkCapabilities;
+HSPLandroid/net/NetworkCapabilities;->setAdministratorUids(Ljava/util/List;)V
 HSPLandroid/net/NetworkCapabilities;->setNetworkSpecifier(Landroid/net/NetworkSpecifier;)Landroid/net/NetworkCapabilities;
-PLandroid/net/NetworkCapabilities;->setSSID(Ljava/lang/String;)Landroid/net/NetworkCapabilities;
-HSPLandroid/net/NetworkCapabilities;->setSignalStrength(I)Landroid/net/NetworkCapabilities;
 HSPLandroid/net/NetworkCapabilities;->setSingleUid(I)Landroid/net/NetworkCapabilities;
-HSPLandroid/net/NetworkCapabilities;->setTransportTypes([I)V
 HSPLandroid/net/NetworkCapabilities;->setUids(Ljava/util/Set;)Landroid/net/NetworkCapabilities;
 HSPLandroid/net/NetworkCapabilities;->toString()Ljava/lang/String;
 HSPLandroid/net/NetworkCapabilities;->transportNameOf(I)Ljava/lang/String;
 HSPLandroid/net/NetworkCapabilities;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/NetworkConfig;-><init>(Ljava/lang/String;)V
-HSPLandroid/net/NetworkFactory$NetworkRequestInfo;-><init>(Landroid/net/NetworkFactory;Landroid/net/NetworkRequest;II)V
-HPLandroid/net/NetworkFactory$NetworkRequestInfo;->toString()Ljava/lang/String;
-HSPLandroid/net/NetworkFactory$SerialNumber;->nextSerialNumber()I
-HSPLandroid/net/NetworkFactory;-><init>(Landroid/os/Looper;Landroid/content/Context;Ljava/lang/String;Landroid/net/NetworkCapabilities;)V
-HSPLandroid/net/NetworkFactory;->acceptRequest(Landroid/net/NetworkRequest;I)Z
-PLandroid/net/NetworkFactory;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-HSPLandroid/net/NetworkFactory;->evalRequest(Landroid/net/NetworkFactory$NetworkRequestInfo;)V
-HSPLandroid/net/NetworkFactory;->evalRequests()V
-HSPLandroid/net/NetworkFactory;->handleAddRequest(Landroid/net/NetworkRequest;II)V
-HSPLandroid/net/NetworkFactory;->handleMessage(Landroid/os/Message;)V
-HPLandroid/net/NetworkFactory;->handleRemoveRequest(Landroid/net/NetworkRequest;)V
-HSPLandroid/net/NetworkFactory;->handleSetFilter(Landroid/net/NetworkCapabilities;)V
-HSPLandroid/net/NetworkFactory;->handleSetScore(I)V
-PLandroid/net/NetworkFactory;->lambda$reevaluateAllRequests$0$NetworkFactory()V
-HSPLandroid/net/NetworkFactory;->log(Ljava/lang/String;)V
-PLandroid/net/NetworkFactory;->reevaluateAllRequests()V
-HSPLandroid/net/NetworkFactory;->register()V
-HSPLandroid/net/NetworkFactory;->setCapabilityFilter(Landroid/net/NetworkCapabilities;)V
-HSPLandroid/net/NetworkFactory;->setScoreFilter(I)V
-HSPLandroid/net/NetworkFactory;->shouldNeedNetworkFor(Landroid/net/NetworkFactory$NetworkRequestInfo;)Z
-HSPLandroid/net/NetworkFactory;->shouldReleaseNetworkFor(Landroid/net/NetworkFactory$NetworkRequestInfo;)Z
-PLandroid/net/NetworkFactory;->toString()Ljava/lang/String;
-HSPLandroid/net/NetworkIdentity;-><init>(IILjava/lang/String;Ljava/lang/String;ZZZ)V
-PLandroid/net/NetworkIdentity;->buildNetworkIdentity(Landroid/content/Context;Landroid/net/NetworkState;Z)Landroid/net/NetworkIdentity;
-HPLandroid/net/NetworkIdentity;->compareTo(Landroid/net/NetworkIdentity;)I
-HPLandroid/net/NetworkIdentity;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLandroid/net/NetworkIdentity;->equals(Ljava/lang/Object;)Z
-HPLandroid/net/NetworkIdentity;->getDefaultNetwork()Z
-HPLandroid/net/NetworkIdentity;->getMetered()Z
-HPLandroid/net/NetworkIdentity;->getNetworkId()Ljava/lang/String;
-HPLandroid/net/NetworkIdentity;->getRoaming()Z
-HPLandroid/net/NetworkIdentity;->getSubType()I
-HPLandroid/net/NetworkIdentity;->getSubscriberId()Ljava/lang/String;
-HPLandroid/net/NetworkIdentity;->getType()I
-HSPLandroid/net/NetworkIdentity;->hashCode()I
-PLandroid/net/NetworkIdentity;->toString()Ljava/lang/String;
 HSPLandroid/net/NetworkInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/NetworkInfo;
 HSPLandroid/net/NetworkInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/net/NetworkInfo$1;->newArray(I)[Landroid/net/NetworkInfo;
-HSPLandroid/net/NetworkInfo$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/net/NetworkInfo$DetailedState;->valueOf(Ljava/lang/String;)Landroid/net/NetworkInfo$DetailedState;
-HPLandroid/net/NetworkInfo$DetailedState;->values()[Landroid/net/NetworkInfo$DetailedState;
 HSPLandroid/net/NetworkInfo$State;->valueOf(Ljava/lang/String;)Landroid/net/NetworkInfo$State;
 HSPLandroid/net/NetworkInfo$State;->values()[Landroid/net/NetworkInfo$State;
 HSPLandroid/net/NetworkInfo;-><init>(IILjava/lang/String;Ljava/lang/String;)V
-HPLandroid/net/NetworkInfo;-><init>(Landroid/net/NetworkInfo;)V
 HSPLandroid/net/NetworkInfo;->access$002(Landroid/net/NetworkInfo;Landroid/net/NetworkInfo$State;)Landroid/net/NetworkInfo$State;
 HSPLandroid/net/NetworkInfo;->access$102(Landroid/net/NetworkInfo;Landroid/net/NetworkInfo$DetailedState;)Landroid/net/NetworkInfo$DetailedState;
 HSPLandroid/net/NetworkInfo;->access$202(Landroid/net/NetworkInfo;Z)Z
@@ -15048,66 +8554,30 @@
 HSPLandroid/net/NetworkInfo;->access$402(Landroid/net/NetworkInfo;Z)Z
 HSPLandroid/net/NetworkInfo;->access$502(Landroid/net/NetworkInfo;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/net/NetworkInfo;->access$602(Landroid/net/NetworkInfo;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/net/NetworkInfo;->describeContents()I
 HSPLandroid/net/NetworkInfo;->getDetailedState()Landroid/net/NetworkInfo$DetailedState;
 HSPLandroid/net/NetworkInfo;->getExtraInfo()Ljava/lang/String;
-PLandroid/net/NetworkInfo;->getReason()Ljava/lang/String;
 HSPLandroid/net/NetworkInfo;->getState()Landroid/net/NetworkInfo$State;
 HSPLandroid/net/NetworkInfo;->getSubtype()I
 HSPLandroid/net/NetworkInfo;->getSubtypeName()Ljava/lang/String;
 HSPLandroid/net/NetworkInfo;->getType()I
 HSPLandroid/net/NetworkInfo;->getTypeName()Ljava/lang/String;
-HSPLandroid/net/NetworkInfo;->isAvailable()Z
 HSPLandroid/net/NetworkInfo;->isConnected()Z
 HSPLandroid/net/NetworkInfo;->isConnectedOrConnecting()Z
-PLandroid/net/NetworkInfo;->isFailover()Z
 HSPLandroid/net/NetworkInfo;->isRoaming()Z
 HSPLandroid/net/NetworkInfo;->setDetailedState(Landroid/net/NetworkInfo$DetailedState;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/net/NetworkInfo;->setExtraInfo(Ljava/lang/String;)V
-HSPLandroid/net/NetworkInfo;->setIsAvailable(Z)V
-HPLandroid/net/NetworkInfo;->setType(I)V
 HSPLandroid/net/NetworkInfo;->toString()Ljava/lang/String;
-HPLandroid/net/NetworkInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/net/NetworkKey$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/NetworkKey;
 HSPLandroid/net/NetworkKey$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/net/NetworkKey$1;->newArray(I)[Landroid/net/NetworkKey;
-HSPLandroid/net/NetworkKey$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/net/NetworkKey;-><init>(Landroid/net/WifiKey;)V
 HSPLandroid/net/NetworkKey;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/net/NetworkKey;-><init>(Landroid/os/Parcel;Landroid/net/NetworkKey$1;)V
-HPLandroid/net/NetworkKey;->createFromScanResult(Landroid/net/wifi/ScanResult;)Landroid/net/NetworkKey;
-PLandroid/net/NetworkKey;->createFromWifiInfo(Landroid/net/wifi/WifiInfo;)Landroid/net/NetworkKey;
-HSPLandroid/net/NetworkKey;->equals(Ljava/lang/Object;)Z
-HSPLandroid/net/NetworkKey;->hashCode()I
-PLandroid/net/NetworkKey;->toString()Ljava/lang/String;
-HPLandroid/net/NetworkKey;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/NetworkMisc;-><init>()V
+HSPLandroid/net/NetworkKey;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/net/NetworkPolicyManager$Listener;-><init>()V
 HSPLandroid/net/NetworkPolicyManager$Listener;->onMeteredIfacesChanged([Ljava/lang/String;)V
-PLandroid/net/NetworkPolicyManager$Listener;->onSubscriptionPlansChanged(I[Landroid/telephony/SubscriptionPlan;)V
 HSPLandroid/net/NetworkPolicyManager$Listener;->onUidRulesChanged(II)V
 HSPLandroid/net/NetworkPolicyManager;-><init>(Landroid/content/Context;Landroid/net/INetworkPolicyManager;)V
-HSPLandroid/net/NetworkPolicyManager;->from(Landroid/content/Context;)Landroid/net/NetworkPolicyManager;
-PLandroid/net/NetworkPolicyManager;->getNetworkPolicies()[Landroid/net/NetworkPolicy;
-HPLandroid/net/NetworkPolicyManager;->getRestrictBackground()Z
-HSPLandroid/net/NetworkPolicyManager;->isProcStateAllowedWhileIdleOrPowerSaveMode(I)Z
-HSPLandroid/net/NetworkPolicyManager;->isProcStateAllowedWhileOnRestrictBackground(I)Z
 HSPLandroid/net/NetworkPolicyManager;->registerListener(Landroid/net/INetworkPolicyListener;)V
-PLandroid/net/NetworkPolicyManager;->uidPoliciesToString(I)Ljava/lang/String;
-HPLandroid/net/NetworkPolicyManager;->uidRulesToString(I)Ljava/lang/String;
-HSPLandroid/net/NetworkPolicyManager;->unregisterListener(Landroid/net/INetworkPolicyListener;)V
-HSPLandroid/net/NetworkRecommendationProvider$ServiceWrapper$1;-><init>(Landroid/net/NetworkRecommendationProvider$ServiceWrapper;[Landroid/net/NetworkKey;)V
-HSPLandroid/net/NetworkRecommendationProvider$ServiceWrapper$1;->run()V
-HSPLandroid/net/NetworkRecommendationProvider$ServiceWrapper;-><init>(Landroid/net/NetworkRecommendationProvider;Landroid/content/Context;Ljava/util/concurrent/Executor;)V
-HSPLandroid/net/NetworkRecommendationProvider$ServiceWrapper;->enforceCallingPermission()V
-HSPLandroid/net/NetworkRecommendationProvider$ServiceWrapper;->execute(Ljava/lang/Runnable;)V
-HSPLandroid/net/NetworkRecommendationProvider$ServiceWrapper;->requestScores([Landroid/net/NetworkKey;)V
-HSPLandroid/net/NetworkRecommendationProvider;-><clinit>()V
-HSPLandroid/net/NetworkRecommendationProvider;-><init>(Landroid/content/Context;Ljava/util/concurrent/Executor;)V
-HSPLandroid/net/NetworkRecommendationProvider;->getBinder()Landroid/os/IBinder;
 HSPLandroid/net/NetworkRequest$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/NetworkRequest;
 HSPLandroid/net/NetworkRequest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/NetworkRequest$2;-><clinit>()V
 HSPLandroid/net/NetworkRequest$Builder;-><init>()V
 HSPLandroid/net/NetworkRequest$Builder;->addCapability(I)Landroid/net/NetworkRequest$Builder;
 HSPLandroid/net/NetworkRequest$Builder;->addTransportType(I)Landroid/net/NetworkRequest$Builder;
@@ -15117,264 +8587,55 @@
 HSPLandroid/net/NetworkRequest$Type;->valueOf(Ljava/lang/String;)Landroid/net/NetworkRequest$Type;
 HSPLandroid/net/NetworkRequest$Type;->values()[Landroid/net/NetworkRequest$Type;
 HSPLandroid/net/NetworkRequest;-><init>(Landroid/net/NetworkCapabilities;IILandroid/net/NetworkRequest$Type;)V
-PLandroid/net/NetworkRequest;-><init>(Landroid/net/NetworkRequest;)V
-HPLandroid/net/NetworkRequest;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLandroid/net/NetworkRequest;->equals(Ljava/lang/Object;)Z
-HSPLandroid/net/NetworkRequest;->hasCapability(I)Z
 HSPLandroid/net/NetworkRequest;->hashCode()I
-HSPLandroid/net/NetworkRequest;->isBackgroundRequest()Z
-HSPLandroid/net/NetworkRequest;->isForegroundRequest()Z
-HSPLandroid/net/NetworkRequest;->isListen()Z
-HSPLandroid/net/NetworkRequest;->isRequest()Z
-HSPLandroid/net/NetworkRequest;->toString()Ljava/lang/String;
-PLandroid/net/NetworkRequest;->typeToProtoEnum(Landroid/net/NetworkRequest$Type;)I
 HSPLandroid/net/NetworkRequest;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/NetworkScore$1;-><init>()V
-PLandroid/net/NetworkScore;-><clinit>()V
-PLandroid/net/NetworkScore;-><init>()V
-PLandroid/net/NetworkScore;-><init>(Landroid/net/NetworkScore;)V
-HPLandroid/net/NetworkScore;->getIntExtension(Ljava/lang/String;)I
-PLandroid/net/NetworkScore;->putIntExtension(Ljava/lang/String;I)V
-HSPLandroid/net/NetworkScoreManager$NetworkScoreCallbackProxy;-><init>(Landroid/net/NetworkScoreManager;Ljava/util/concurrent/Executor;Landroid/net/NetworkScoreManager$NetworkScoreCallback;)V
-PLandroid/net/NetworkScoreManager$NetworkScoreCallbackProxy;->clearScores()V
-PLandroid/net/NetworkScoreManager$NetworkScoreCallbackProxy;->lambda$clearScores$1$NetworkScoreManager$NetworkScoreCallbackProxy()V
-PLandroid/net/NetworkScoreManager$NetworkScoreCallbackProxy;->lambda$updateScores$0$NetworkScoreManager$NetworkScoreCallbackProxy(Ljava/util/List;)V
-PLandroid/net/NetworkScoreManager$NetworkScoreCallbackProxy;->updateScores(Ljava/util/List;)V
 HSPLandroid/net/NetworkScoreManager;-><init>(Landroid/content/Context;)V
-HSPLandroid/net/NetworkScoreManager;->getActiveScorer()Landroid/net/NetworkScorerAppData;
-HSPLandroid/net/NetworkScoreManager;->getActiveScorerPackage()Ljava/lang/String;
 HSPLandroid/net/NetworkScoreManager;->registerNetworkScoreCache(ILandroid/net/INetworkScoreCache;I)V
-HSPLandroid/net/NetworkScoreManager;->registerNetworkScoreCallback(IILjava/util/concurrent/Executor;Landroid/net/NetworkScoreManager$NetworkScoreCallback;)V
-PLandroid/net/NetworkScoreManager;->requestScores([Landroid/net/NetworkKey;)Z
-HPLandroid/net/NetworkScoreManager;->updateScores([Landroid/net/ScoredNetwork;)Z
-HSPLandroid/net/NetworkScorerAppData$1;-><init>()V
-HSPLandroid/net/NetworkScorerAppData$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/NetworkScorerAppData;
-HSPLandroid/net/NetworkScorerAppData$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/net/NetworkScorerAppData;-><clinit>()V
-PLandroid/net/NetworkScorerAppData;-><init>(ILandroid/content/ComponentName;Ljava/lang/String;Landroid/content/ComponentName;Ljava/lang/String;)V
-HSPLandroid/net/NetworkScorerAppData;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/NetworkScorerAppData;->equals(Ljava/lang/Object;)Z
-HSPLandroid/net/NetworkScorerAppData;->getEnableUseOpenWifiActivity()Landroid/content/ComponentName;
-HPLandroid/net/NetworkScorerAppData;->getRecommendationServiceComponent()Landroid/content/ComponentName;
-PLandroid/net/NetworkScorerAppData;->getRecommendationServicePackageName()Ljava/lang/String;
-PLandroid/net/NetworkScorerAppData;->toString()Ljava/lang/String;
-PLandroid/net/NetworkScorerAppData;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/net/NetworkSpecifier;-><init>()V
-HSPLandroid/net/NetworkStack;->checkAnyPermissionOf(Landroid/content/Context;[Ljava/lang/String;)Z
-HSPLandroid/net/NetworkStack;->checkNetworkStackPermission(Landroid/content/Context;)V
-HSPLandroid/net/NetworkStack;->checkNetworkStackPermissionOr(Landroid/content/Context;[Ljava/lang/String;)V
-HSPLandroid/net/NetworkStack;->enforceAnyPermissionOf(Landroid/content/Context;[Ljava/lang/String;)V
-PLandroid/net/NetworkState;-><init>(Landroid/net/NetworkInfo;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;Landroid/net/Network;Ljava/lang/String;Ljava/lang/String;)V
-HPLandroid/net/NetworkStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/NetworkStats;
-HPLandroid/net/NetworkStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/net/NetworkStats$Entry;-><init>()V
 HSPLandroid/net/NetworkStats$Entry;-><init>(Ljava/lang/String;IIIIIIJJJJJ)V
 HSPLandroid/net/NetworkStats$Entry;-><init>(Ljava/lang/String;IIIJJJJJ)V
-HSPLandroid/net/NetworkStats$Entry;->isEmpty()Z
-HSPLandroid/net/NetworkStats$Entry;->isNegative()Z
 HSPLandroid/net/NetworkStats;-><init>(JI)V
-HPLandroid/net/NetworkStats;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/net/NetworkStats;->addValues(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats;
-HSPLandroid/net/NetworkStats;->apply464xlatAdjustments(Landroid/net/NetworkStats;Landroid/net/NetworkStats;Ljava/util/Map;Z)V
-HSPLandroid/net/NetworkStats;->apply464xlatAdjustments(Ljava/util/Map;Z)V
-HSPLandroid/net/NetworkStats;->clear()V
-HSPLandroid/net/NetworkStats;->clone()Landroid/net/NetworkStats;
-HSPLandroid/net/NetworkStats;->combineAllValues(Landroid/net/NetworkStats;)V
-HSPLandroid/net/NetworkStats;->combineValues(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats;
-PLandroid/net/NetworkStats;->combineValues(Ljava/lang/String;IIIJJJJJ)Landroid/net/NetworkStats;
-HPLandroid/net/NetworkStats;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-HSPLandroid/net/NetworkStats;->filter(I[Ljava/lang/String;I)V
-HSPLandroid/net/NetworkStats;->filter(Ljava/util/function/Predicate;)V
-HSPLandroid/net/NetworkStats;->filterDebugEntries()V
-HSPLandroid/net/NetworkStats;->findIndex(Ljava/lang/String;IIIIII)I
-HSPLandroid/net/NetworkStats;->findIndexHinted(Ljava/lang/String;IIIIIII)I
-HSPLandroid/net/NetworkStats;->getElapsedRealtime()J
-HPLandroid/net/NetworkStats;->getTotal(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
-PLandroid/net/NetworkStats;->getTotal(Landroid/net/NetworkStats$Entry;Ljava/util/HashSet;)Landroid/net/NetworkStats$Entry;
-HPLandroid/net/NetworkStats;->getTotal(Landroid/net/NetworkStats$Entry;Ljava/util/HashSet;IZ)Landroid/net/NetworkStats$Entry;
-HSPLandroid/net/NetworkStats;->getValues(ILandroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
-HPLandroid/net/NetworkStats;->groupedByUid()Landroid/net/NetworkStats;
-PLandroid/net/NetworkStats;->lambda$filter$0(II[Ljava/lang/String;Landroid/net/NetworkStats$Entry;)Z
-HSPLandroid/net/NetworkStats;->lambda$filterDebugEntries$1(Landroid/net/NetworkStats$Entry;)Z
-HSPLandroid/net/NetworkStats;->maybeCopyEntry(II)V
-HSPLandroid/net/NetworkStats;->removeUids([I)V
-HSPLandroid/net/NetworkStats;->setElapsedRealtime(J)V
-PLandroid/net/NetworkStats;->setToCheckinString(I)Ljava/lang/String;
-PLandroid/net/NetworkStats;->setToString(I)Ljava/lang/String;
-HSPLandroid/net/NetworkStats;->setValues(ILandroid/net/NetworkStats$Entry;)V
-PLandroid/net/NetworkStats;->size()I
-HSPLandroid/net/NetworkStats;->subtract(Landroid/net/NetworkStats;)Landroid/net/NetworkStats;
-HSPLandroid/net/NetworkStats;->subtract(Landroid/net/NetworkStats;Landroid/net/NetworkStats;Landroid/net/NetworkStats$NonMonotonicObserver;Ljava/lang/Object;)Landroid/net/NetworkStats;
-HSPLandroid/net/NetworkStats;->subtract(Landroid/net/NetworkStats;Landroid/net/NetworkStats;Landroid/net/NetworkStats$NonMonotonicObserver;Ljava/lang/Object;Landroid/net/NetworkStats;)Landroid/net/NetworkStats;
-HPLandroid/net/NetworkStats;->toString()Ljava/lang/String;
-PLandroid/net/NetworkStats;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/NetworkStatsHistory$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/NetworkStatsHistory;
-PLandroid/net/NetworkStatsHistory$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/net/NetworkStatsHistory$DataStreamUtils;->readVarLong(Ljava/io/DataInputStream;)J
-HSPLandroid/net/NetworkStatsHistory$DataStreamUtils;->readVarLongArray(Ljava/io/DataInputStream;)[J
-PLandroid/net/NetworkStatsHistory$DataStreamUtils;->writeVarLong(Ljava/io/DataOutputStream;J)V
-HPLandroid/net/NetworkStatsHistory$DataStreamUtils;->writeVarLongArray(Ljava/io/DataOutputStream;[JI)V
-PLandroid/net/NetworkStatsHistory$Entry;-><init>()V
-HPLandroid/net/NetworkStatsHistory$ParcelUtils;->readLongArray(Landroid/os/Parcel;)[J
-HPLandroid/net/NetworkStatsHistory$ParcelUtils;->writeLongArray(Landroid/os/Parcel;[JI)V
-HSPLandroid/net/NetworkStatsHistory;-><init>(J)V
-PLandroid/net/NetworkStatsHistory;-><init>(JI)V
-HSPLandroid/net/NetworkStatsHistory;-><init>(JII)V
-HPLandroid/net/NetworkStatsHistory;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/net/NetworkStatsHistory;-><init>(Ljava/io/DataInputStream;)V
-HSPLandroid/net/NetworkStatsHistory;->addLong([JIJ)V
-HPLandroid/net/NetworkStatsHistory;->dump(Lcom/android/internal/util/IndentingPrintWriter;Z)V
-PLandroid/net/NetworkStatsHistory;->dumpCheckin(Ljava/io/PrintWriter;)V
-HPLandroid/net/NetworkStatsHistory;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLandroid/net/NetworkStatsHistory;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J[JI)V
-HSPLandroid/net/NetworkStatsHistory;->ensureBuckets(JJ)V
-HSPLandroid/net/NetworkStatsHistory;->getBucketDuration()J
-HSPLandroid/net/NetworkStatsHistory;->getEnd()J
-HSPLandroid/net/NetworkStatsHistory;->getIndexAfter(J)I
-HSPLandroid/net/NetworkStatsHistory;->getLong([JIJ)J
-HSPLandroid/net/NetworkStatsHistory;->getStart()J
-HSPLandroid/net/NetworkStatsHistory;->getTotalBytes()J
-HPLandroid/net/NetworkStatsHistory;->getValues(ILandroid/net/NetworkStatsHistory$Entry;)Landroid/net/NetworkStatsHistory$Entry;
-HPLandroid/net/NetworkStatsHistory;->getValues(JJJLandroid/net/NetworkStatsHistory$Entry;)Landroid/net/NetworkStatsHistory$Entry;
-HSPLandroid/net/NetworkStatsHistory;->insertBucket(IJ)V
-HSPLandroid/net/NetworkStatsHistory;->recordData(JJLandroid/net/NetworkStats$Entry;)V
-HSPLandroid/net/NetworkStatsHistory;->recordEntireHistory(Landroid/net/NetworkStatsHistory;)V
-HSPLandroid/net/NetworkStatsHistory;->recordHistory(Landroid/net/NetworkStatsHistory;JJ)V
-HSPLandroid/net/NetworkStatsHistory;->setLong([JIJ)V
-HSPLandroid/net/NetworkStatsHistory;->size()I
-HPLandroid/net/NetworkStatsHistory;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/net/NetworkStatsHistory;->writeToStream(Ljava/io/DataOutputStream;)V
-HPLandroid/net/NetworkTemplate$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/NetworkTemplate;
-HPLandroid/net/NetworkTemplate$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/NetworkTemplate;-><init>(ILjava/lang/String;Ljava/lang/String;)V
-PLandroid/net/NetworkTemplate;-><init>(ILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
-HPLandroid/net/NetworkTemplate;-><init>(ILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;III)V
-HPLandroid/net/NetworkTemplate;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/NetworkTemplate;-><init>(Landroid/os/Parcel;Landroid/net/NetworkTemplate$1;)V
-PLandroid/net/NetworkTemplate;->buildTemplateMobileWildcard()Landroid/net/NetworkTemplate;
-PLandroid/net/NetworkTemplate;->buildTemplateWifiWildcard()Landroid/net/NetworkTemplate;
-PLandroid/net/NetworkTemplate;->isKnownMatchRule(I)Z
-HPLandroid/net/NetworkTemplate;->matches(Landroid/net/NetworkIdentity;)Z
-PLandroid/net/NetworkTemplate;->matchesDefaultNetwork(Landroid/net/NetworkIdentity;)Z
-PLandroid/net/NetworkTemplate;->matchesMetered(Landroid/net/NetworkIdentity;)Z
-PLandroid/net/NetworkTemplate;->matchesMobileWildcard(Landroid/net/NetworkIdentity;)Z
-PLandroid/net/NetworkTemplate;->matchesRoaming(Landroid/net/NetworkIdentity;)Z
-PLandroid/net/NetworkTemplate;->matchesWifiWildcard(Landroid/net/NetworkIdentity;)Z
-HPLandroid/net/NetworkTemplate;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/NetworkUtils;->intToInetAddress(I)Ljava/net/InetAddress;
-PLandroid/net/NetworkUtils;->makeStrings(Ljava/util/Collection;)[Ljava/lang/String;
+HSPLandroid/net/NetworkTemplate$1;-><init>()V
+HSPLandroid/net/NetworkTemplate;-><clinit>()V
+HSPLandroid/net/NetworkTemplate;-><init>(ILjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/net/NetworkTemplate;-><init>(ILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/net/NetworkTemplate;-><init>(ILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;III)V
+HSPLandroid/net/NetworkTemplate;->buildTemplateWifiWildcard()Landroid/net/NetworkTemplate;
+HSPLandroid/net/NetworkTemplate;->isKnownMatchRule(I)Z
 HSPLandroid/net/NetworkUtils;->maskRawAddress([BI)V
-HSPLandroid/net/NetworkUtils;->parseIpAndMask(Ljava/lang/String;)Landroid/util/Pair;
-HPLandroid/net/NetworkUtils;->protectFromVpn(Ljava/io/FileDescriptor;)Z
-PLandroid/net/NetworkWatchlistManager;->reportWatchlistIfNecessary()V
 HSPLandroid/net/Proxy;->setHttpProxySystemProperty(Landroid/net/ProxyInfo;)V
 HSPLandroid/net/Proxy;->setHttpProxySystemProperty(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)V
 HSPLandroid/net/RouteInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/RouteInfo;
 HSPLandroid/net/RouteInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/net/RouteInfo;-><init>(Landroid/net/IpPrefix;Ljava/net/InetAddress;Ljava/lang/String;)V
 HSPLandroid/net/RouteInfo;-><init>(Landroid/net/IpPrefix;Ljava/net/InetAddress;Ljava/lang/String;I)V
-PLandroid/net/RouteInfo;-><init>(Landroid/net/LinkAddress;Ljava/net/InetAddress;Ljava/lang/String;)V
+HSPLandroid/net/RouteInfo;-><init>(Landroid/net/IpPrefix;Ljava/net/InetAddress;Ljava/lang/String;II)V
 HSPLandroid/net/RouteInfo;->equals(Ljava/lang/Object;)Z
 HSPLandroid/net/RouteInfo;->getDestination()Landroid/net/IpPrefix;
 HSPLandroid/net/RouteInfo;->getGateway()Ljava/net/InetAddress;
 HSPLandroid/net/RouteInfo;->getInterface()Ljava/lang/String;
 HSPLandroid/net/RouteInfo;->getType()I
-HPLandroid/net/RouteInfo;->hasGateway()Z
 HSPLandroid/net/RouteInfo;->isDefaultRoute()Z
 HSPLandroid/net/RouteInfo;->isHost()Z
-PLandroid/net/RouteInfo;->isIPv4Default()Z
-PLandroid/net/RouteInfo;->isIPv6Default()Z
-HPLandroid/net/RouteInfo;->matches(Ljava/net/InetAddress;)Z
-HPLandroid/net/RouteInfo;->selectBestRoute(Ljava/util/Collection;Ljava/net/InetAddress;)Landroid/net/RouteInfo;
 HSPLandroid/net/RouteInfo;->toString()Ljava/lang/String;
-HPLandroid/net/RouteInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/RssiCurve$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/RssiCurve;
-PLandroid/net/RssiCurve$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/net/RssiCurve;-><init>(II[B)V
-HPLandroid/net/RssiCurve;-><init>(II[BI)V
-HPLandroid/net/RssiCurve;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/RssiCurve;-><init>(Landroid/os/Parcel;Landroid/net/RssiCurve$1;)V
-HPLandroid/net/RssiCurve;->lookupScore(I)B
-HPLandroid/net/RssiCurve;->lookupScore(IZ)B
-HPLandroid/net/RssiCurve;->toString()Ljava/lang/String;
-PLandroid/net/RssiCurve;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/SSLCertificateSocketFactory;-><init>(ILandroid/net/SSLSessionCache;Z)V
-HPLandroid/net/SSLCertificateSocketFactory;->castToOpenSSLSocket(Ljava/net/Socket;)Lcom/android/org/conscrypt/OpenSSLSocketImpl;
-HSPLandroid/net/SSLCertificateSocketFactory;->createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;
-HSPLandroid/net/SSLCertificateSocketFactory;->getDefault(I)Ljavax/net/SocketFactory;
-HSPLandroid/net/SSLCertificateSocketFactory;->getDefault(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;
-HSPLandroid/net/SSLCertificateSocketFactory;->getDelegate()Ljavax/net/ssl/SSLSocketFactory;
-HSPLandroid/net/SSLCertificateSocketFactory;->getHttpSocketFactory(ILandroid/net/SSLSessionCache;)Lorg/apache/http/conn/ssl/SSLSocketFactory;
-HSPLandroid/net/SSLCertificateSocketFactory;->isSslCheckRelaxed()Z
-HSPLandroid/net/SSLCertificateSocketFactory;->makeSocketFactory([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;)Ljavax/net/ssl/SSLSocketFactory;
-HPLandroid/net/SSLCertificateSocketFactory;->setUseSessionTickets(Ljava/net/Socket;Z)V
-HSPLandroid/net/SSLCertificateSocketFactory;->verifyHostname(Ljava/net/Socket;Ljava/lang/String;)V
-HSPLandroid/net/SSLSessionCache;-><init>(Landroid/content/Context;)V
-HSPLandroid/net/SSLSessionCache;-><init>(Ljava/io/File;)V
-PLandroid/net/ScoredNetwork$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/ScoredNetwork;
-PLandroid/net/ScoredNetwork$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/ScoredNetwork$1;->newArray(I)[Landroid/net/ScoredNetwork;
-PLandroid/net/ScoredNetwork$1;->newArray(I)[Ljava/lang/Object;
-HPLandroid/net/ScoredNetwork;-><init>(Landroid/net/NetworkKey;Landroid/net/RssiCurve;Z)V
-HPLandroid/net/ScoredNetwork;-><init>(Landroid/net/NetworkKey;Landroid/net/RssiCurve;ZLandroid/os/Bundle;)V
-PLandroid/net/ScoredNetwork;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/ScoredNetwork;-><init>(Landroid/os/Parcel;Landroid/net/ScoredNetwork$1;)V
-HPLandroid/net/ScoredNetwork;->calculateBadge(I)I
-HPLandroid/net/ScoredNetwork;->toString()Ljava/lang/String;
-PLandroid/net/ScoredNetwork;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/SntpClient;-><init>()V
-PLandroid/net/SntpClient;->checkValidServerReply(BBIJ)V
-PLandroid/net/SntpClient;->getNtpTime()J
-PLandroid/net/SntpClient;->getNtpTimeReference()J
-PLandroid/net/SntpClient;->getRoundTripTime()J
-PLandroid/net/SntpClient;->read32([BI)J
-PLandroid/net/SntpClient;->readTimeStamp([BI)J
-PLandroid/net/SntpClient;->requestTime(Ljava/lang/String;ILandroid/net/Network;)Z
-PLandroid/net/SntpClient;->requestTime(Ljava/net/InetAddress;IILandroid/net/Network;)Z
-PLandroid/net/SntpClient;->writeTimeStamp([BIJ)V
-PLandroid/net/StaticIpConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/StaticIpConfiguration;
-PLandroid/net/StaticIpConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/net/StaticIpConfiguration$Builder;-><init>()V
-HPLandroid/net/StaticIpConfiguration$Builder;->build()Landroid/net/StaticIpConfiguration;
-HPLandroid/net/StaticIpConfiguration$Builder;->setDnsServers(Ljava/lang/Iterable;)Landroid/net/StaticIpConfiguration$Builder;
-PLandroid/net/StaticIpConfiguration$Builder;->setDomains(Ljava/lang/String;)Landroid/net/StaticIpConfiguration$Builder;
-PLandroid/net/StaticIpConfiguration$Builder;->setGateway(Ljava/net/InetAddress;)Landroid/net/StaticIpConfiguration$Builder;
-PLandroid/net/StaticIpConfiguration$Builder;->setIpAddress(Landroid/net/LinkAddress;)Landroid/net/StaticIpConfiguration$Builder;
-PLandroid/net/StaticIpConfiguration;-><init>()V
-PLandroid/net/StaticIpConfiguration;->getDnsServers()Ljava/util/List;
-PLandroid/net/StaticIpConfiguration;->getDomains()Ljava/lang/String;
-PLandroid/net/StaticIpConfiguration;->getGateway()Ljava/net/InetAddress;
-PLandroid/net/StaticIpConfiguration;->getIpAddress()Landroid/net/LinkAddress;
-HPLandroid/net/StaticIpConfiguration;->getRoutes(Ljava/lang/String;)Ljava/util/List;
-HPLandroid/net/StaticIpConfiguration;->readFromParcel(Landroid/os/Parcel;)Landroid/net/StaticIpConfiguration;
-HPLandroid/net/StaticIpConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/RouteInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/StringNetworkSpecifier$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/StringNetworkSpecifier;
+HSPLandroid/net/StringNetworkSpecifier$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/net/StringNetworkSpecifier;-><init>(Ljava/lang/String;)V
+HSPLandroid/net/TelephonyNetworkSpecifier$1;-><init>()V
+HSPLandroid/net/TelephonyNetworkSpecifier$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/TelephonyNetworkSpecifier;
+HSPLandroid/net/TelephonyNetworkSpecifier$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/net/TelephonyNetworkSpecifier;-><clinit>()V
+HSPLandroid/net/TelephonyNetworkSpecifier;-><init>(I)V
 HSPLandroid/net/TrafficStats;->clearThreadStatsTag()V
-HSPLandroid/net/TrafficStats;->clearThreadStatsUid()V
-PLandroid/net/TrafficStats;->getAndSetThreadStatsTag(I)I
-HSPLandroid/net/TrafficStats;->getMobileIfaces()[Ljava/lang/String;
-HSPLandroid/net/TrafficStats;->getMobileRxBytes()J
-HSPLandroid/net/TrafficStats;->getMobileTxBytes()J
-PLandroid/net/TrafficStats;->getRxPackets(Ljava/lang/String;)J
 HSPLandroid/net/TrafficStats;->getStatsService()Landroid/net/INetworkStatsService;
-HSPLandroid/net/TrafficStats;->getThreadStatsTag()I
-HSPLandroid/net/TrafficStats;->getTotalRxBytes()J
-PLandroid/net/TrafficStats;->getTxPackets(Ljava/lang/String;)J
 HSPLandroid/net/TrafficStats;->getUidRxBytes(I)J
-HSPLandroid/net/TrafficStats;->getUidRxPackets(I)J
 HSPLandroid/net/TrafficStats;->getUidTxBytes(I)J
-HSPLandroid/net/TrafficStats;->getUidTxPackets(I)J
-HSPLandroid/net/TrafficStats;->incrementOperationCount(I)V
-HSPLandroid/net/TrafficStats;->incrementOperationCount(II)V
 HSPLandroid/net/TrafficStats;->setThreadStatsTag(I)V
-HPLandroid/net/TrafficStats;->setThreadStatsTagBackup()V
-HSPLandroid/net/TrafficStats;->setThreadStatsUid(I)V
-PLandroid/net/TrafficStats;->tagSocket(Ljava/net/Socket;)V
-HSPLandroid/net/TrafficStats;->untagSocket(Ljava/net/Socket;)V
 HSPLandroid/net/UidRange$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/UidRange;
 HSPLandroid/net/UidRange$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/net/UidRange;-><init>(II)V
-HSPLandroid/net/UidRange;->count()I
 HSPLandroid/net/UidRange;->equals(Ljava/lang/Object;)Z
 HSPLandroid/net/UidRange;->hashCode()I
 HSPLandroid/net/UidRange;->writeToParcel(Landroid/os/Parcel;I)V
@@ -15387,11 +8648,11 @@
 HSPLandroid/net/Uri$AbstractHierarchicalUri;->findPortSeparator(Ljava/lang/String;)I
 HSPLandroid/net/Uri$AbstractHierarchicalUri;->getHost()Ljava/lang/String;
 HSPLandroid/net/Uri$AbstractHierarchicalUri;->getLastPathSegment()Ljava/lang/String;
-PLandroid/net/Uri$AbstractHierarchicalUri;->getPort()I
+HSPLandroid/net/Uri$AbstractHierarchicalUri;->getPort()I
 HSPLandroid/net/Uri$AbstractHierarchicalUri;->getUserInfo()Ljava/lang/String;
 HSPLandroid/net/Uri$AbstractHierarchicalUri;->getUserInfoPart()Landroid/net/Uri$Part;
 HSPLandroid/net/Uri$AbstractHierarchicalUri;->parseHost()Ljava/lang/String;
-PLandroid/net/Uri$AbstractHierarchicalUri;->parsePort()I
+HSPLandroid/net/Uri$AbstractHierarchicalUri;->parsePort()I
 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;
@@ -15406,17 +8667,12 @@
 HSPLandroid/net/Uri$Builder;->clearQuery()Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->encodedAuthority(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->encodedFragment(Ljava/lang/String;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->encodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->encodedQuery(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->fragment(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->fragment(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->hasSchemeOrAuthority()Z
-PLandroid/net/Uri$Builder;->opaquePart(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
-HPLandroid/net/Uri$Builder;->opaquePart(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->path(Landroid/net/Uri$PathPart;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->path(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->query(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->query(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->scheme(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->toString()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;-><init>(Ljava/lang/String;Landroid/net/Uri$Part;Landroid/net/Uri$PathPart;Landroid/net/Uri$Part;Landroid/net/Uri$Part;)V
@@ -15428,26 +8684,24 @@
 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;
 HSPLandroid/net/Uri$HierarchicalUri;->getQuery()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->getScheme()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->getSchemeSpecificPart()Ljava/lang/String;
-PLandroid/net/Uri$HierarchicalUri;->getSsp()Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$HierarchicalUri;->getSsp()Landroid/net/Uri$Part;
 HSPLandroid/net/Uri$HierarchicalUri;->isHierarchical()Z
-PLandroid/net/Uri$HierarchicalUri;->makeSchemeSpecificPart()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->makeSchemeSpecificPart()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->makeUriString()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri;
 HSPLandroid/net/Uri$HierarchicalUri;->toString()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->writeToParcel(Landroid/os/Parcel;I)V
 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$1;)V
-HPLandroid/net/Uri$OpaqueUri;->buildUpon()Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$OpaqueUri;->getEncodedSchemeSpecificPart()Ljava/lang/String;
-HPLandroid/net/Uri$OpaqueUri;->getFragment()Ljava/lang/String;
 HSPLandroid/net/Uri$OpaqueUri;->getScheme()Ljava/lang/String;
 HSPLandroid/net/Uri$OpaqueUri;->getSchemeSpecificPart()Ljava/lang/String;
+HSPLandroid/net/Uri$OpaqueUri;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri;
 HSPLandroid/net/Uri$OpaqueUri;->toString()Ljava/lang/String;
 HSPLandroid/net/Uri$OpaqueUri;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/net/Uri$Part$EmptyPart;->isEmpty()Z
@@ -15473,6 +8727,7 @@
 HSPLandroid/net/Uri$PathSegments;->get(I)Ljava/lang/Object;
 HSPLandroid/net/Uri$PathSegments;->get(I)Ljava/lang/String;
 HSPLandroid/net/Uri$PathSegments;->size()I
+HSPLandroid/net/Uri$PathSegmentsBuilder;-><init>()V
 HSPLandroid/net/Uri$PathSegmentsBuilder;->add(Ljava/lang/String;)V
 HSPLandroid/net/Uri$PathSegmentsBuilder;->build()Landroid/net/Uri$PathSegments;
 HSPLandroid/net/Uri$StringUri;-><init>(Ljava/lang/String;)V
@@ -15483,37 +8738,31 @@
 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;
-PLandroid/net/Uri$StringUri;->getEncodedFragment()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->getEncodedPath()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->getEncodedQuery()Ljava/lang/String;
-HPLandroid/net/Uri$StringUri;->getFragment()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->getFragmentPart()Landroid/net/Uri$Part;
 HSPLandroid/net/Uri$StringUri;->getPath()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->getPathPart()Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$StringUri;->getPathSegments()Ljava/util/List;
-HSPLandroid/net/Uri$StringUri;->getQuery()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->getQueryPart()Landroid/net/Uri$Part;
 HSPLandroid/net/Uri$StringUri;->getScheme()Ljava/lang/String;
-PLandroid/net/Uri$StringUri;->getSchemeSpecificPart()Ljava/lang/String;
-PLandroid/net/Uri$StringUri;->getSsp()Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$StringUri;->getSchemeSpecificPart()Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->getSsp()Landroid/net/Uri$Part;
 HSPLandroid/net/Uri$StringUri;->isHierarchical()Z
-HSPLandroid/net/Uri$StringUri;->isRelative()Z
 HSPLandroid/net/Uri$StringUri;->parseAuthority(Ljava/lang/String;I)Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parseFragment()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parsePath()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parsePath(Ljava/lang/String;I)Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parseQuery()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parseScheme()Ljava/lang/String;
-PLandroid/net/Uri$StringUri;->parseSsp()Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->parseSsp()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri;
 HSPLandroid/net/Uri$StringUri;->toString()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/net/Uri;-><init>()V
 HSPLandroid/net/Uri;-><init>(Landroid/net/Uri$1;)V
 HSPLandroid/net/Uri;->access$300()Ljava/lang/String;
-HSPLandroid/net/Uri;->checkContentUriWithoutPermission(Ljava/lang/String;I)V
 HSPLandroid/net/Uri;->checkFileUriExposed(Ljava/lang/String;)V
-HPLandroid/net/Uri;->compareTo(Landroid/net/Uri;)I
 HSPLandroid/net/Uri;->decode(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/net/Uri;->encode(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/net/Uri;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
@@ -15523,13 +8772,9 @@
 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;->getQueryParameters(Ljava/lang/String;)Ljava/util/List;
 HSPLandroid/net/Uri;->hashCode()I
-HSPLandroid/net/Uri;->isAbsolute()Z
 HSPLandroid/net/Uri;->isAllowed(CLjava/lang/String;)Z
 HSPLandroid/net/Uri;->isOpaque()Z
-HSPLandroid/net/Uri;->isPathPrefixMatch(Landroid/net/Uri;)Z
-PLandroid/net/Uri;->normalizeScheme()Landroid/net/Uri;
 HSPLandroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
 HSPLandroid/net/Uri;->toSafeString()Ljava/lang/String;
 HSPLandroid/net/Uri;->withAppendedPath(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;
@@ -15539,892 +8784,36 @@
 HSPLandroid/net/UriCodec;->flushDecodingByteAccumulator(Ljava/lang/StringBuilder;Ljava/nio/charset/CharsetDecoder;Ljava/nio/ByteBuffer;Z)V
 HSPLandroid/net/UriCodec;->getNextCharacter(Ljava/lang/String;IILjava/lang/String;)C
 HSPLandroid/net/UriCodec;->hexCharToValue(C)I
-HSPLandroid/net/WebAddress;-><init>(Ljava/lang/String;)V
-HSPLandroid/net/WebAddress;->toString()Ljava/lang/String;
 HSPLandroid/net/WifiKey$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/WifiKey;
 HSPLandroid/net/WifiKey$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/net/WifiKey;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/net/WifiKey;-><init>(Landroid/os/Parcel;Landroid/net/WifiKey$1;)V
 HSPLandroid/net/WifiKey;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/net/WifiKey;->equals(Ljava/lang/Object;)Z
-HSPLandroid/net/WifiKey;->hashCode()I
-HPLandroid/net/WifiKey;->toString()Ljava/lang/String;
-HPLandroid/net/WifiKey;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/net/apf/ApfCapabilities$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/apf/ApfCapabilities;
-HPLandroid/net/apf/ApfCapabilities$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/net/apf/ApfCapabilities;-><init>(III)V
-HPLandroid/net/apf/ApfCapabilities;->getApfDrop8023Frames()Z
-HPLandroid/net/apf/ApfCapabilities;->getApfEtherTypeBlackList()[I
-HPLandroid/net/apf/ApfCapabilities;->hasDataAccess()Z
-HPLandroid/net/apf/ApfCapabilities;->toString()Ljava/lang/String;
-HSPLandroid/net/http/HttpResponseCache;-><init>(Lcom/android/okhttp/internalandroidapi/AndroidResponseCacheAdapter;)V
-HPLandroid/net/http/HttpResponseCache;->getCacheHolder()Lcom/android/okhttp/internalandroidapi/HasCacheHolder$CacheHolder;
-HSPLandroid/net/http/HttpResponseCache;->install(Ljava/io/File;J)Landroid/net/http/HttpResponseCache;
+HSPLandroid/net/WifiKey;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/net/http/X509TrustManagerExtensions;-><init>(Ljavax/net/ssl/X509TrustManager;)V
 HSPLandroid/net/http/X509TrustManagerExtensions;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
-PLandroid/net/metrics/ApfProgramEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/metrics/ApfProgramEvent;
-PLandroid/net/metrics/ApfProgramEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/metrics/ApfProgramEvent$Decoder;-><clinit>()V
-HPLandroid/net/metrics/ApfProgramEvent;-><init>(JJIIII)V
-HPLandroid/net/metrics/ApfProgramEvent;-><init>(JJIIIILandroid/net/metrics/ApfProgramEvent$1;)V
-PLandroid/net/metrics/ApfProgramEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/metrics/ApfProgramEvent;-><init>(Landroid/os/Parcel;Landroid/net/metrics/ApfProgramEvent$1;)V
-HPLandroid/net/metrics/ApfProgramEvent;->flagsFor(ZZ)I
-PLandroid/net/metrics/ApfProgramEvent;->namesOf(I)Ljava/lang/String;
-PLandroid/net/metrics/ApfProgramEvent;->toString()Ljava/lang/String;
-HPLandroid/net/metrics/ApfProgramEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/metrics/ApfStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/metrics/ApfStats;
-PLandroid/net/metrics/ApfStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/net/metrics/ApfStats;-><init>(JIIIIIIIII)V
-HPLandroid/net/metrics/ApfStats;-><init>(JIIIIIIIIILandroid/net/metrics/ApfStats$1;)V
-PLandroid/net/metrics/ApfStats;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/metrics/ApfStats;-><init>(Landroid/os/Parcel;Landroid/net/metrics/ApfStats$1;)V
-PLandroid/net/metrics/ApfStats;->toString()Ljava/lang/String;
-HPLandroid/net/metrics/ApfStats;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/metrics/ConnectStats;-><clinit>()V
-PLandroid/net/metrics/ConnectStats;-><init>(IJLcom/android/internal/util/TokenBucket;I)V
-HPLandroid/net/metrics/ConnectStats;->addEvent(IILjava/lang/String;)Z
-PLandroid/net/metrics/ConnectStats;->countConnect(ILjava/lang/String;)V
-PLandroid/net/metrics/ConnectStats;->countError(I)V
-HPLandroid/net/metrics/ConnectStats;->countLatency(II)V
-PLandroid/net/metrics/ConnectStats;->isIPv6(Ljava/lang/String;)Z
-PLandroid/net/metrics/ConnectStats;->isNonBlocking(I)Z
-PLandroid/net/metrics/ConnectStats;->isSuccess(I)Z
-PLandroid/net/metrics/ConnectStats;->toString()Ljava/lang/String;
-HSPLandroid/net/metrics/DefaultNetworkEvent;-><init>(J)V
-PLandroid/net/metrics/DefaultNetworkEvent;->ipSupport()Ljava/lang/String;
-HPLandroid/net/metrics/DefaultNetworkEvent;->toString()Ljava/lang/String;
-PLandroid/net/metrics/DefaultNetworkEvent;->updateDuration(J)V
-PLandroid/net/metrics/DhcpClientEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/metrics/DhcpClientEvent;
-PLandroid/net/metrics/DhcpClientEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/metrics/DhcpClientEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/metrics/DhcpClientEvent;-><init>(Landroid/os/Parcel;Landroid/net/metrics/DhcpClientEvent$1;)V
-HPLandroid/net/metrics/DhcpClientEvent;-><init>(Ljava/lang/String;I)V
-HPLandroid/net/metrics/DhcpClientEvent;-><init>(Ljava/lang/String;ILandroid/net/metrics/DhcpClientEvent$1;)V
-PLandroid/net/metrics/DhcpClientEvent;->toString()Ljava/lang/String;
-HPLandroid/net/metrics/DhcpClientEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/metrics/DhcpErrorEvent$1;-><init>()V
-PLandroid/net/metrics/DhcpErrorEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/metrics/DhcpErrorEvent;
-HPLandroid/net/metrics/DhcpErrorEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/metrics/DhcpErrorEvent$Decoder;-><clinit>()V
-PLandroid/net/metrics/DhcpErrorEvent;-><clinit>()V
-HPLandroid/net/metrics/DhcpErrorEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/metrics/DhcpErrorEvent;-><init>(Landroid/os/Parcel;Landroid/net/metrics/DhcpErrorEvent$1;)V
-PLandroid/net/metrics/DhcpErrorEvent;->toString()Ljava/lang/String;
-PLandroid/net/metrics/DnsEvent;-><init>(IJI)V
-HPLandroid/net/metrics/DnsEvent;->addResult(BBI)Z
-PLandroid/net/metrics/DnsEvent;->resize(I)V
-PLandroid/net/metrics/DnsEvent;->toString()Ljava/lang/String;
-HSPLandroid/net/metrics/IpConnectivityLog;-><init>()V
-HPLandroid/net/metrics/IpConnectivityLog;->log(I[ILandroid/net/metrics/IpConnectivityLog$Event;)Z
-HPLandroid/net/metrics/IpConnectivityLog;->log(Landroid/net/ConnectivityMetricsEvent;)Z
-HPLandroid/net/metrics/IpConnectivityLog;->log(Landroid/net/Network;[ILandroid/net/metrics/IpConnectivityLog$Event;)Z
-HPLandroid/net/metrics/IpConnectivityLog;->log(Landroid/net/metrics/IpConnectivityLog$Event;)Z
-HPLandroid/net/metrics/IpConnectivityLog;->log(Ljava/lang/String;Landroid/net/metrics/IpConnectivityLog$Event;)Z
-PLandroid/net/metrics/IpManagerEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/metrics/IpManagerEvent;
-PLandroid/net/metrics/IpManagerEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/metrics/IpManagerEvent$Decoder;-><clinit>()V
-HPLandroid/net/metrics/IpManagerEvent;-><init>(IJ)V
-PLandroid/net/metrics/IpManagerEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/metrics/IpManagerEvent;-><init>(Landroid/os/Parcel;Landroid/net/metrics/IpManagerEvent$1;)V
-PLandroid/net/metrics/IpManagerEvent;->toString()Ljava/lang/String;
-HPLandroid/net/metrics/IpManagerEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/metrics/IpReachabilityEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/metrics/IpReachabilityEvent;
-PLandroid/net/metrics/IpReachabilityEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/metrics/IpReachabilityEvent$Decoder;-><clinit>()V
-HPLandroid/net/metrics/IpReachabilityEvent;-><init>(I)V
-PLandroid/net/metrics/IpReachabilityEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/metrics/IpReachabilityEvent;-><init>(Landroid/os/Parcel;Landroid/net/metrics/IpReachabilityEvent$1;)V
-PLandroid/net/metrics/IpReachabilityEvent;->toString()Ljava/lang/String;
-HPLandroid/net/metrics/IpReachabilityEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/metrics/NetworkEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/metrics/NetworkEvent;
-PLandroid/net/metrics/NetworkEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/metrics/NetworkEvent$Decoder;-><clinit>()V
-HPLandroid/net/metrics/NetworkEvent;-><init>(I)V
-HPLandroid/net/metrics/NetworkEvent;-><init>(IJ)V
-PLandroid/net/metrics/NetworkEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/metrics/NetworkEvent;-><init>(Landroid/os/Parcel;Landroid/net/metrics/NetworkEvent$1;)V
-PLandroid/net/metrics/NetworkEvent;->toString()Ljava/lang/String;
-HPLandroid/net/metrics/NetworkEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/metrics/NetworkMetrics$Metrics;-><init>()V
-PLandroid/net/metrics/NetworkMetrics$Metrics;->average()D
-HPLandroid/net/metrics/NetworkMetrics$Metrics;->count(D)V
-HPLandroid/net/metrics/NetworkMetrics$Metrics;->count(DI)V
-HPLandroid/net/metrics/NetworkMetrics$Metrics;->merge(Landroid/net/metrics/NetworkMetrics$Metrics;)V
-PLandroid/net/metrics/NetworkMetrics$Summary;-><init>(IJ)V
-PLandroid/net/metrics/NetworkMetrics$Summary;->merge(Landroid/net/metrics/NetworkMetrics$Summary;)V
-HPLandroid/net/metrics/NetworkMetrics$Summary;->toString()Ljava/lang/String;
-PLandroid/net/metrics/NetworkMetrics;-><init>(IJLcom/android/internal/util/TokenBucket;)V
-HPLandroid/net/metrics/NetworkMetrics;->addConnectResult(IILjava/lang/String;)V
-HPLandroid/net/metrics/NetworkMetrics;->addDnsResult(III)V
-PLandroid/net/metrics/NetworkMetrics;->addTcpStatsResult(IIII)V
-PLandroid/net/metrics/NetworkMetrics;->getPendingStats()Landroid/net/metrics/NetworkMetrics$Summary;
-PLandroid/net/metrics/RaEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/metrics/RaEvent;
-PLandroid/net/metrics/RaEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/net/metrics/RaEvent;-><init>(JJJJJJ)V
-PLandroid/net/metrics/RaEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/metrics/RaEvent;-><init>(Landroid/os/Parcel;Landroid/net/metrics/RaEvent$1;)V
-HPLandroid/net/metrics/RaEvent;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/net/metrics/ValidationProbeEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/metrics/ValidationProbeEvent;
-HPLandroid/net/metrics/ValidationProbeEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/metrics/ValidationProbeEvent$Decoder;-><clinit>()V
-HPLandroid/net/metrics/ValidationProbeEvent;-><init>(JII)V
-HPLandroid/net/metrics/ValidationProbeEvent;-><init>(JIILandroid/net/metrics/ValidationProbeEvent$1;)V
-PLandroid/net/metrics/ValidationProbeEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/net/metrics/ValidationProbeEvent;-><init>(Landroid/os/Parcel;Landroid/net/metrics/ValidationProbeEvent$1;)V
-HPLandroid/net/metrics/ValidationProbeEvent;->access$000(IZ)I
-HPLandroid/net/metrics/ValidationProbeEvent;->getProbeName(I)Ljava/lang/String;
-PLandroid/net/metrics/ValidationProbeEvent;->getValidationStage(I)Ljava/lang/String;
-HPLandroid/net/metrics/ValidationProbeEvent;->makeProbeType(IZ)I
-HPLandroid/net/metrics/ValidationProbeEvent;->toString()Ljava/lang/String;
-HPLandroid/net/metrics/ValidationProbeEvent;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/net/metrics/WakeupEvent;->toString()Ljava/lang/String;
-PLandroid/net/metrics/WakeupStats;-><init>(Ljava/lang/String;)V
-PLandroid/net/metrics/WakeupStats;->countEvent(Landroid/net/metrics/WakeupEvent;)V
-PLandroid/net/metrics/WakeupStats;->increment(Landroid/util/SparseIntArray;I)V
-PLandroid/net/metrics/WakeupStats;->updateDuration()V
-HSPLandroid/net/nsd/INsdManager$Stub;-><init>()V
-PLandroid/net/nsd/INsdManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/net/shared/Inet4AddressUtils;->inet4AddressToIntHTH(Ljava/net/Inet4Address;)I
-HPLandroid/net/shared/Inet4AddressUtils;->inet4AddressToIntHTL(Ljava/net/Inet4Address;)I
-HSPLandroid/net/shared/Inet4AddressUtils;->intToInet4AddressHTH(I)Ljava/net/Inet4Address;
-HSPLandroid/net/shared/Inet4AddressUtils;->intToInet4AddressHTL(I)Ljava/net/Inet4Address;
-HPLandroid/net/shared/InetAddressUtils;->unparcelInetAddress(Landroid/os/Parcel;)Ljava/net/InetAddress;
-HPLandroid/net/sip/ISipService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/sip/ISipService;
-HPLandroid/net/sip/ISipService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/net/sip/SipManager;-><init>(Landroid/content/Context;)V
-HPLandroid/net/sip/SipManager;->createSipService()V
-HPLandroid/net/sip/SipManager;->isApiSupported(Landroid/content/Context;)Z
-HPLandroid/net/sip/SipManager;->newInstance(Landroid/content/Context;)Landroid/net/sip/SipManager;
-HSPLandroid/net/util/-$$Lambda$MultinetworkPolicyTracker$8YMQ0fPTKk7Fw-_gJjln0JT-g8E;-><init>(Landroid/net/util/MultinetworkPolicyTracker;)V
-HSPLandroid/net/util/-$$Lambda$MultinetworkPolicyTracker$8YMQ0fPTKk7Fw-_gJjln0JT-g8E;->run()V
-HSPLandroid/net/util/KeepaliveUtils;->getSupportedKeepalives(Landroid/content/Context;)[I
-HSPLandroid/net/util/MultinetworkPolicyTracker$1;-><init>(Landroid/net/util/MultinetworkPolicyTracker;)V
-HSPLandroid/net/util/MultinetworkPolicyTracker$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HSPLandroid/net/util/MultinetworkPolicyTracker$2;-><init>(Landroid/net/util/MultinetworkPolicyTracker;Landroid/os/Looper;)V
-HSPLandroid/net/util/MultinetworkPolicyTracker$SettingObserver;-><init>(Landroid/net/util/MultinetworkPolicyTracker;)V
-HSPLandroid/net/util/MultinetworkPolicyTracker;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/Runnable;)V
-HSPLandroid/net/util/MultinetworkPolicyTracker;->access$000(Landroid/net/util/MultinetworkPolicyTracker;)V
-HSPLandroid/net/util/MultinetworkPolicyTracker;->configMeteredMultipathPreference()I
-HSPLandroid/net/util/MultinetworkPolicyTracker;->configRestrictsAvoidBadWifi()Z
-PLandroid/net/util/MultinetworkPolicyTracker;->getAvoidBadWifi()Z
-HSPLandroid/net/util/MultinetworkPolicyTracker;->getAvoidBadWifiSetting()Ljava/lang/String;
-HSPLandroid/net/util/MultinetworkPolicyTracker;->getResourcesForActiveSubId()Landroid/content/res/Resources;
-HSPLandroid/net/util/MultinetworkPolicyTracker;->lambda$8YMQ0fPTKk7Fw-_gJjln0JT-g8E(Landroid/net/util/MultinetworkPolicyTracker;)V
-HSPLandroid/net/util/MultinetworkPolicyTracker;->reevaluate()V
-HSPLandroid/net/util/MultinetworkPolicyTracker;->reevaluateInternal()V
-PLandroid/net/util/MultinetworkPolicyTracker;->shouldNotifyWifiUnvalidated()Z
-HSPLandroid/net/util/MultinetworkPolicyTracker;->start()V
-HSPLandroid/net/util/MultinetworkPolicyTracker;->updateAvoidBadWifi()Z
-HSPLandroid/net/util/MultinetworkPolicyTracker;->updateMeteredMultipathPreference()V
-HPLandroid/net/wifi/-$$Lambda$O5kkps4d9X9Xr5DI8L3NlcZliu8;-><init>(Landroid/net/wifi/WifiScanner$ActionListener;)V
-PLandroid/net/wifi/-$$Lambda$O5kkps4d9X9Xr5DI8L3NlcZliu8;->run()V
-PLandroid/net/wifi/-$$Lambda$WifiCondManager$SendMgmtFrameEvent$1tO80MJuvPzKd00CdTg5cClA2xA;-><init>(Landroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;I)V
-PLandroid/net/wifi/-$$Lambda$WifiCondManager$SendMgmtFrameEvent$1tO80MJuvPzKd00CdTg5cClA2xA;->run()V
-PLandroid/net/wifi/-$$Lambda$WifiCondManager$SendMgmtFrameEvent$E9ui8NEiUJK3zeulsnOnYA7nzFQ;-><init>(Landroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;I)V
-PLandroid/net/wifi/-$$Lambda$WifiCondManager$SendMgmtFrameEvent$E9ui8NEiUJK3zeulsnOnYA7nzFQ;->run()V
-PLandroid/net/wifi/-$$Lambda$WifiCondManager$SendMgmtFrameEvent$j70mudiuCDDmvr1zZ2hrjd3FYPo;-><init>(Landroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;I)V
-PLandroid/net/wifi/-$$Lambda$WifiCondManager$SendMgmtFrameEvent$j70mudiuCDDmvr1zZ2hrjd3FYPo;->run()V
-PLandroid/net/wifi/-$$Lambda$WifiCondManager$SendMgmtFrameEvent$qiEHBeULnzDLqmGDFQVnLgJh27U;-><init>(Landroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;)V
-PLandroid/net/wifi/-$$Lambda$WifiCondManager$SendMgmtFrameEvent$qv6ZgxyWgi5zz2qCmJjiuvrSHyA;-><init>(Landroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;I)V
-PLandroid/net/wifi/-$$Lambda$WifiCondManager$SendMgmtFrameEvent$qv6ZgxyWgi5zz2qCmJjiuvrSHyA;->run()V
-HSPLandroid/net/wifi/-$$Lambda$WifiFrameworkInitializer$K4DpGPGObWI293pmRTuiEj5r-DE;->createService(Landroid/content/Context;Landroid/os/IBinder;)Ljava/lang/Object;
-HSPLandroid/net/wifi/-$$Lambda$WifiFrameworkInitializer$Q8AMcrAZzPqZKp4l5Zz4DRDq6rY;->createService(Landroid/content/Context;Landroid/os/IBinder;)Ljava/lang/Object;
-HSPLandroid/net/wifi/-$$Lambda$WifiFrameworkInitializer$evN9sVM7TGOwMVxoJTGBCfu_880;->createService(Landroid/os/IBinder;)Ljava/lang/Object;
-PLandroid/net/wifi/-$$Lambda$WifiFrameworkInitializer$qxuZsnr_-ppKI2ad2pa3htyx2u0;->createService(Landroid/content/Context;Landroid/os/IBinder;)Ljava/lang/Object;
-HSPLandroid/net/wifi/-$$Lambda$WifiFrameworkInitializer$y82Bone6wQbJ8BixuAZ6L5k501Y;->createService(Landroid/content/Context;Landroid/os/IBinder;)Ljava/lang/Object;
-HPLandroid/net/wifi/-$$Lambda$WifiManager$OnWifiActivityEnergyInfoProxy$BQ8Vxtnu_10AGVrPkHlwcL-8IEY;-><init>(Landroid/net/wifi/WifiManager$OnWifiActivityEnergyInfoListener;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
-HPLandroid/net/wifi/-$$Lambda$WifiManager$OnWifiActivityEnergyInfoProxy$BQ8Vxtnu_10AGVrPkHlwcL-8IEY;->run()V
-PLandroid/net/wifi/-$$Lambda$WifiScanner$ServiceHandler$cKqGOMxI2R2uyUjgsLnrUOSFRS8;-><init>(Landroid/net/wifi/WifiScanner$ActionListener;Landroid/net/wifi/WifiScanner$OperationResult;)V
-PLandroid/net/wifi/-$$Lambda$WifiScanner$ServiceHandler$cKqGOMxI2R2uyUjgsLnrUOSFRS8;->run()V
-HPLandroid/net/wifi/-$$Lambda$WifiScanner$ServiceHandler$tfzaoDCMuySQuJsgvPXn9A60XqE;-><init>(Landroid/net/wifi/WifiScanner$ScanListener;Landroid/net/wifi/WifiScanner$ParcelableScanData;)V
-HPLandroid/net/wifi/-$$Lambda$WifiScanner$ServiceHandler$tfzaoDCMuySQuJsgvPXn9A60XqE;->run()V
-HPLandroid/net/wifi/-$$Lambda$WifiScanner$ServiceHandler$y6fV_BVhUdL0OIhrI7CZr_ohobM;-><init>(Landroid/net/wifi/WifiScanner$ScanListener;Landroid/net/wifi/ScanResult;)V
-HPLandroid/net/wifi/-$$Lambda$WifiScanner$ServiceHandler$y6fV_BVhUdL0OIhrI7CZr_ohobM;->run()V
-PLandroid/net/wifi/IActionListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/wifi/IActionListener$Stub$Proxy;->onSuccess()V
-PLandroid/net/wifi/IActionListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IActionListener;
-HSPLandroid/net/wifi/IClientInterface$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/wifi/IClientInterface$Stub$Proxy;->SendMgmtFrame([BLandroid/net/wifi/ISendMgmtFrameEvent;I)V
-HSPLandroid/net/wifi/IClientInterface$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/net/wifi/IClientInterface$Stub$Proxy;->getWifiScannerImpl()Landroid/net/wifi/IWifiScannerImpl;
-HPLandroid/net/wifi/IClientInterface$Stub$Proxy;->signalPoll()[I
-HSPLandroid/net/wifi/IClientInterface$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IClientInterface;
-HPLandroid/net/wifi/IOnWifiActivityEnergyInfoListener$Stub;-><init>()V
-PLandroid/net/wifi/IOnWifiUsabilityStatsListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/net/wifi/IOnWifiUsabilityStatsListener$Stub$Proxy;->onWifiUsabilityStats(IZLandroid/net/wifi/WifiUsabilityStatsEntry;)V
-HPLandroid/net/wifi/IOnWifiUsabilityStatsListener$Stub;-><init>()V
-HPLandroid/net/wifi/IOnWifiUsabilityStatsListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/net/wifi/IOnWifiUsabilityStatsListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IOnWifiUsabilityStatsListener;
-HPLandroid/net/wifi/IOnWifiUsabilityStatsListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/net/wifi/IPnoScanEvent$Stub;-><init>()V
-HSPLandroid/net/wifi/IPnoScanEvent$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/net/wifi/IScanEvent$Stub;-><init>()V
-HSPLandroid/net/wifi/IScanEvent$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/net/wifi/IScanEvent$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/net/wifi/IScanEvent$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/net/wifi/ISendMgmtFrameEvent$Stub;-><init>()V
-PLandroid/net/wifi/ISendMgmtFrameEvent$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/net/wifi/ISendMgmtFrameEvent$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/net/wifi/ISoftApCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/wifi/ISoftApCallback$Stub$Proxy;->onConnectedClientsChanged(Ljava/util/List;)V
-PLandroid/net/wifi/ISoftApCallback$Stub$Proxy;->onInfoChanged(Landroid/net/wifi/SoftApInfo;)V
-PLandroid/net/wifi/ISoftApCallback$Stub$Proxy;->onStateChanged(II)V
-PLandroid/net/wifi/ISoftApCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/ISoftApCallback;
-PLandroid/net/wifi/ITrafficStateCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/wifi/ITrafficStateCallback$Stub$Proxy;->onStateChanged(I)V
-PLandroid/net/wifi/ITrafficStateCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/ITrafficStateCallback;
-HPLandroid/net/wifi/ITrafficStateCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->acquireMulticastLock(Landroid/os/IBinder;Ljava/lang/String;)V
-HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->acquireWifiLock(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/WorkSource;)Z
-HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->addOnWifiUsabilityStatsListener(Landroid/os/IBinder;Landroid/net/wifi/IOnWifiUsabilityStatsListener;I)V
-HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->calculateSignalLevel(I)I
-HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getConfiguredNetworks(Ljava/lang/String;Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getConnectionInfo(Ljava/lang/String;Ljava/lang/String;)Landroid/net/wifi/WifiInfo;
-HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getCurrentNetwork()Landroid/net/Network;
-HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getDhcpInfo()Landroid/net/DhcpInfo;
-HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getPrivilegedConfiguredNetworks(Ljava/lang/String;Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getScanResults(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
-HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getVerboseLoggingLevel()I
-PLandroid/net/wifi/IWifiManager$Stub$Proxy;->getWifiApConfiguration()Landroid/net/wifi/WifiConfiguration;
-HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getWifiApEnabledState()I
-HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getWifiEnabledState()I
-HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->isScanAlwaysAvailable()Z
-HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->needs5GHzToAnyApBandConversion()Z
-HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->releaseMulticastLock(Ljava/lang/String;)V
-HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->releaseWifiLock(Landroid/os/IBinder;)Z
-HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->setDeviceMobilityState(I)V
-HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->setWifiEnabled(Ljava/lang/String;Z)Z
-HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->startScan(Ljava/lang/String;Ljava/lang/String;)Z
-HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->updateWifiUsabilityScore(III)V
-HSPLandroid/net/wifi/IWifiManager$Stub;-><init>()V
-HSPLandroid/net/wifi/IWifiManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiManager;
-PLandroid/net/wifi/IWifiManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/net/wifi/IWifiManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/net/wifi/IWifiScanner$Stub$Proxy;->getMessenger()Landroid/os/Messenger;
-HSPLandroid/net/wifi/IWifiScanner$Stub;-><init>()V
-HSPLandroid/net/wifi/IWifiScanner$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiScanner;
-PLandroid/net/wifi/IWifiScanner$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->abortScan()V
-HSPLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->getScanResults()[Landroid/net/wifi/wificond/NativeScanResult;
-HPLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->scan(Landroid/net/wifi/wificond/SingleScanSettings;)Z
-HPLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->startPnoScan(Landroid/net/wifi/wificond/PnoSettings;)Z
-HSPLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->subscribePnoScanEvents(Landroid/net/wifi/IPnoScanEvent;)V
-HSPLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->subscribeScanEvents(Landroid/net/wifi/IScanEvent;)V
-PLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->unsubscribePnoScanEvents()V
-PLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->unsubscribeScanEvents()V
-HSPLandroid/net/wifi/IWifiScannerImpl$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiScannerImpl;
-HSPLandroid/net/wifi/IWificond$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/net/wifi/IWificond$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/net/wifi/IWificond$Stub$Proxy;->createClientInterface(Ljava/lang/String;)Landroid/net/wifi/IClientInterface;
-HSPLandroid/net/wifi/IWificond$Stub$Proxy;->getAvailable2gChannels()[I
-HSPLandroid/net/wifi/IWificond$Stub$Proxy;->getAvailable5gNonDFSChannels()[I
-HSPLandroid/net/wifi/IWificond$Stub$Proxy;->getAvailable6gChannels()[I
-HSPLandroid/net/wifi/IWificond$Stub$Proxy;->getAvailableDFSChannels()[I
-PLandroid/net/wifi/IWificond$Stub$Proxy;->tearDownClientInterface(Ljava/lang/String;)Z
-HSPLandroid/net/wifi/IWificond$Stub$Proxy;->tearDownInterfaces()V
-HSPLandroid/net/wifi/IWificond$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWificond;
-PLandroid/net/wifi/ParcelUtil;->readCertificates(Landroid/os/Parcel;)[Ljava/security/cert/X509Certificate;
-HSPLandroid/net/wifi/ParcelUtil;->readPrivateKey(Landroid/os/Parcel;)Ljava/security/PrivateKey;
-PLandroid/net/wifi/ParcelUtil;->writeCertificates(Landroid/os/Parcel;[Ljava/security/cert/X509Certificate;)V
-PLandroid/net/wifi/ParcelUtil;->writePrivateKey(Landroid/os/Parcel;Ljava/security/PrivateKey;)V
-HSPLandroid/net/wifi/ScanResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/ScanResult;
-HSPLandroid/net/wifi/ScanResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/net/wifi/ScanResult$InformationElement;-><init>()V
-HSPLandroid/net/wifi/ScanResult$RadioChainInfo;-><init>()V
-HPLandroid/net/wifi/ScanResult$RadioChainInfo;->toString()Ljava/lang/String;
-HPLandroid/net/wifi/ScanResult;-><init>(Landroid/net/wifi/ScanResult;)V
-HPLandroid/net/wifi/ScanResult;-><init>(Landroid/net/wifi/WifiSsid;Ljava/lang/String;JI[BLjava/lang/String;IIJ)V
-HSPLandroid/net/wifi/ScanResult;-><init>(Landroid/net/wifi/WifiSsid;Ljava/lang/String;Ljava/lang/String;JILjava/lang/String;IIJIIIIIZ)V
-HSPLandroid/net/wifi/ScanResult;-><init>(Ljava/lang/String;Ljava/lang/String;JILjava/lang/String;IIJIIIIIZ)V
-HSPLandroid/net/wifi/ScanResult;->access$002(Landroid/net/wifi/ScanResult;I)I
-PLandroid/net/wifi/ScanResult;->getWifiStandard()I
-PLandroid/net/wifi/ScanResult;->is24GHz()Z
-PLandroid/net/wifi/ScanResult;->is24GHz(I)Z
-PLandroid/net/wifi/ScanResult;->is5GHz()Z
-PLandroid/net/wifi/ScanResult;->is5GHz(I)Z
-PLandroid/net/wifi/ScanResult;->is80211mcResponder()Z
-PLandroid/net/wifi/ScanResult;->isPasspointNetwork()Z
-PLandroid/net/wifi/ScanResult;->setFlag(J)V
-PLandroid/net/wifi/ScanResult;->setWifiStandard(I)V
-HPLandroid/net/wifi/ScanResult;->toString()Ljava/lang/String;
-HPLandroid/net/wifi/ScanResult;->wifiStandardToString(I)Ljava/lang/String;
-HPLandroid/net/wifi/ScanResult;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/wifi/SoftApConfiguration$1;-><init>()V
-PLandroid/net/wifi/SoftApConfiguration$Builder;-><init>()V
-PLandroid/net/wifi/SoftApConfiguration$Builder;-><init>(Landroid/net/wifi/SoftApConfiguration;)V
-PLandroid/net/wifi/SoftApConfiguration$Builder;->build()Landroid/net/wifi/SoftApConfiguration;
-PLandroid/net/wifi/SoftApConfiguration$Builder;->clearAllPassphrase()V
-PLandroid/net/wifi/SoftApConfiguration$Builder;->setBand(I)Landroid/net/wifi/SoftApConfiguration$Builder;
-PLandroid/net/wifi/SoftApConfiguration$Builder;->setChannel(I)Landroid/net/wifi/SoftApConfiguration$Builder;
-PLandroid/net/wifi/SoftApConfiguration$Builder;->setHiddenSsid(Z)Landroid/net/wifi/SoftApConfiguration$Builder;
-PLandroid/net/wifi/SoftApConfiguration$Builder;->setSecurityType()I
-PLandroid/net/wifi/SoftApConfiguration$Builder;->setSsid(Ljava/lang/String;)Landroid/net/wifi/SoftApConfiguration$Builder;
-PLandroid/net/wifi/SoftApConfiguration$Builder;->setWpa2Passphrase(Ljava/lang/String;)Landroid/net/wifi/SoftApConfiguration$Builder;
-PLandroid/net/wifi/SoftApConfiguration;-><clinit>()V
-PLandroid/net/wifi/SoftApConfiguration;-><init>(Ljava/lang/String;Landroid/net/MacAddress;Ljava/lang/String;ZIII)V
-PLandroid/net/wifi/SoftApConfiguration;-><init>(Ljava/lang/String;Landroid/net/MacAddress;Ljava/lang/String;ZIIILandroid/net/wifi/SoftApConfiguration$1;)V
-PLandroid/net/wifi/SoftApConfiguration;->access$100(Landroid/net/wifi/SoftApConfiguration;)Ljava/lang/String;
-PLandroid/net/wifi/SoftApConfiguration;->access$200(Landroid/net/wifi/SoftApConfiguration;)Landroid/net/MacAddress;
-PLandroid/net/wifi/SoftApConfiguration;->access$300(Landroid/net/wifi/SoftApConfiguration;)Ljava/lang/String;
-PLandroid/net/wifi/SoftApConfiguration;->access$400(Landroid/net/wifi/SoftApConfiguration;)Z
-PLandroid/net/wifi/SoftApConfiguration;->access$500(Landroid/net/wifi/SoftApConfiguration;)I
-PLandroid/net/wifi/SoftApConfiguration;->access$600(Landroid/net/wifi/SoftApConfiguration;)I
-PLandroid/net/wifi/SoftApConfiguration;->getBand()I
-PLandroid/net/wifi/SoftApConfiguration;->getBssid()Landroid/net/MacAddress;
-PLandroid/net/wifi/SoftApConfiguration;->getChannel()I
-PLandroid/net/wifi/SoftApConfiguration;->getSecurityType()I
-PLandroid/net/wifi/SoftApConfiguration;->getSsid()Ljava/lang/String;
-PLandroid/net/wifi/SoftApConfiguration;->getWpa2Passphrase()Ljava/lang/String;
-PLandroid/net/wifi/SoftApConfiguration;->isHiddenSsid()Z
-HSPLandroid/net/wifi/SoftApInfo$1;-><init>()V
-HSPLandroid/net/wifi/SoftApInfo;-><clinit>()V
-HSPLandroid/net/wifi/SoftApInfo;-><init>()V
-HPLandroid/net/wifi/SoftApInfo;->access$002(Landroid/net/wifi/SoftApInfo;I)I
-HPLandroid/net/wifi/SoftApInfo;->access$102(Landroid/net/wifi/SoftApInfo;I)I
-PLandroid/net/wifi/SoftApInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/wifi/SupplicantState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/SupplicantState;
-HSPLandroid/net/wifi/SupplicantState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/wifi/SupplicantState;->describeContents()I
-PLandroid/net/wifi/SupplicantState;->isConnecting(Landroid/net/wifi/SupplicantState;)Z
-PLandroid/net/wifi/SupplicantState;->isHandshakeState(Landroid/net/wifi/SupplicantState;)Z
-HSPLandroid/net/wifi/SupplicantState;->valueOf(Ljava/lang/String;)Landroid/net/wifi/SupplicantState;
-PLandroid/net/wifi/SupplicantState;->values()[Landroid/net/wifi/SupplicantState;
-PLandroid/net/wifi/SupplicantState;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/wifi/SynchronousExecutor;-><init>()V
-HPLandroid/net/wifi/SynchronousExecutor;->execute(Ljava/lang/Runnable;)V
-HPLandroid/net/wifi/WifiClient;-><clinit>()V
-HSPLandroid/net/wifi/WifiCondManager$PnoScanEventHandler;-><init>(Landroid/net/wifi/WifiCondManager;Landroid/net/wifi/WifiCondManager$ScanEventCallback;)V
-HSPLandroid/net/wifi/WifiCondManager$ScanEventHandler;-><init>(Landroid/net/wifi/WifiCondManager;Landroid/net/wifi/WifiCondManager$ScanEventCallback;)V
-PLandroid/net/wifi/WifiCondManager$ScanEventHandler;->OnScanFailed()V
-HPLandroid/net/wifi/WifiCondManager$ScanEventHandler;->OnScanResultReady()V
-PLandroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;-><init>(Landroid/net/wifi/WifiCondManager;Landroid/net/wifi/WifiCondManager$SendMgmtFrameCallback;)V
-PLandroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;->OnAck(I)V
-PLandroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;->OnFailure(I)V
-PLandroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;->lambda$OnAck$2$WifiCondManager$SendMgmtFrameEvent(I)V
-PLandroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;->lambda$OnAck$3$WifiCondManager$SendMgmtFrameEvent(I)V
-PLandroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;->lambda$OnFailure$4$WifiCondManager$SendMgmtFrameEvent(I)V
-PLandroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;->lambda$OnFailure$5$WifiCondManager$SendMgmtFrameEvent(I)V
-PLandroid/net/wifi/WifiCondManager$SendMgmtFrameEvent;->runIfFirstCall(Ljava/lang/Runnable;)V
-HPLandroid/net/wifi/WifiCondManager$SignalPollResult;-><init>()V
-HSPLandroid/net/wifi/WifiCondManager;-><init>(Landroid/content/Context;)V
-PLandroid/net/wifi/WifiCondManager;->abortScan(Ljava/lang/String;)V
-PLandroid/net/wifi/WifiCondManager;->access$100(Landroid/net/wifi/WifiCondManager;)Ljava/util/concurrent/atomic/AtomicBoolean;
-PLandroid/net/wifi/WifiCondManager;->access$200(Landroid/net/wifi/WifiCondManager;)Landroid/os/Handler;
-PLandroid/net/wifi/WifiCondManager;->access$300(Landroid/net/wifi/WifiCondManager;)Landroid/app/AlarmManager;
-HSPLandroid/net/wifi/WifiCondManager;->clearState()V
-HSPLandroid/net/wifi/WifiCondManager;->enableVerboseLogging(Z)V
-HSPLandroid/net/wifi/WifiCondManager;->getChannelsForBand(I)[I
-HPLandroid/net/wifi/WifiCondManager;->getClientInterface(Ljava/lang/String;)Landroid/net/wifi/IClientInterface;
-HPLandroid/net/wifi/WifiCondManager;->getScanResults(Ljava/lang/String;I)Ljava/util/List;
-HPLandroid/net/wifi/WifiCondManager;->getScanType(I)I
-HPLandroid/net/wifi/WifiCondManager;->getScannerImpl(Ljava/lang/String;)Landroid/net/wifi/IWifiScannerImpl;
-HSPLandroid/net/wifi/WifiCondManager;->initialize(Ljava/lang/Runnable;)Z
-HSPLandroid/net/wifi/WifiCondManager;->retrieveWificondAndRegisterForDeath()Z
-HPLandroid/net/wifi/WifiCondManager;->scan(Ljava/lang/String;ILjava/util/Set;Ljava/util/List;)Z
-PLandroid/net/wifi/WifiCondManager;->sendMgmtFrame(Ljava/lang/String;[BLandroid/net/wifi/WifiCondManager$SendMgmtFrameCallback;I)V
-HSPLandroid/net/wifi/WifiCondManager;->setupInterfaceForClientMode(Ljava/lang/String;Landroid/net/wifi/WifiCondManager$ScanEventCallback;Landroid/net/wifi/WifiCondManager$ScanEventCallback;)Z
-HPLandroid/net/wifi/WifiCondManager;->signalPoll(Ljava/lang/String;)Landroid/net/wifi/WifiCondManager$SignalPollResult;
-PLandroid/net/wifi/WifiCondManager;->startPnoScan(Ljava/lang/String;Landroid/net/wifi/wificond/PnoSettings;Landroid/net/wifi/WifiCondManager$PnoScanRequestCallback;)Z
-PLandroid/net/wifi/WifiCondManager;->stopPnoScan(Ljava/lang/String;)Z
-PLandroid/net/wifi/WifiCondManager;->tearDownClientInterface(Ljava/lang/String;)Z
-HSPLandroid/net/wifi/WifiCondManager;->tearDownInterfaces()Z
-HSPLandroid/net/wifi/WifiConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiConfiguration;
-HSPLandroid/net/wifi/WifiConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/wifi/WifiConfiguration$AuthAlgorithm;-><clinit>()V
-PLandroid/net/wifi/WifiConfiguration$GroupCipher;-><clinit>()V
-PLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;-><init>()V
-PLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->clearDisableReasonCounter()V
-PLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->clearDisableReasonCounter(I)V
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->copy(Landroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;)V
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getCandidate()Landroid/net/wifi/ScanResult;
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getCandidateScore()I
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getConnectChoice()Ljava/lang/String;
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getConnectChoiceTimestamp()J
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getDisableReasonByString(Ljava/lang/String;)I
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getDisableReasonCounter(I)I
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getDisableTime()J
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getHasEverConnected()Z
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getNetworkDisableReasonString()Ljava/lang/String;
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getNetworkDisableReasonString(I)Ljava/lang/String;
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getNetworkSelectionBSSID()Ljava/lang/String;
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getNetworkSelectionDisableReason()I
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getNetworkSelectionStatus()I
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getNetworkStatusString()Ljava/lang/String;
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->getSeenInLastQualifiedNetworkSelection()Z
-PLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->incrementDisableReasonCounter(I)V
-PLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->isNetworkEnabled()Z
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->isNetworkPermanentlyDisabled()Z
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->isNetworkTemporaryDisabled()Z
-HSPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->readFromParcel(Landroid/os/Parcel;)V
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setCandidate(Landroid/net/wifi/ScanResult;)V
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setCandidateScore(I)V
-HSPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setConnectChoice(Ljava/lang/String;)V
-HSPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setConnectChoiceTimestamp(J)V
-HSPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setDisableReasonCounter(II)V
-HSPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setDisableTime(J)V
-HSPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setHasEverConnected(Z)V
-HSPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setNetworkSelectionBSSID(Ljava/lang/String;)V
-HSPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setNetworkSelectionDisableReason(I)V
-HSPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setNetworkSelectionStatus(I)V
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setSeenInLastQualifiedNetworkSelection(Z)V
-HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->writeToParcel(Landroid/os/Parcel;)V
-PLandroid/net/wifi/WifiConfiguration$PairwiseCipher;-><clinit>()V
-PLandroid/net/wifi/WifiConfiguration$Protocol;-><clinit>()V
-HPLandroid/net/wifi/WifiConfiguration$RecentFailure;-><init>()V
-PLandroid/net/wifi/WifiConfiguration$RecentFailure;-><init>(Landroid/net/wifi/WifiConfiguration$1;)V
-PLandroid/net/wifi/WifiConfiguration$RecentFailure;->clear()V
-HPLandroid/net/wifi/WifiConfiguration$RecentFailure;->getAssociationStatus()I
-HSPLandroid/net/wifi/WifiConfiguration$RecentFailure;->setAssociationStatus(I)V
-HSPLandroid/net/wifi/WifiConfiguration;-><init>()V
-HPLandroid/net/wifi/WifiConfiguration;-><init>(Landroid/net/wifi/WifiConfiguration;)V
-PLandroid/net/wifi/WifiConfiguration;->access$300(Landroid/net/wifi/WifiConfiguration;)Landroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;
-PLandroid/net/wifi/WifiConfiguration;->access$400(Landroid/os/Parcel;)Ljava/util/BitSet;
-PLandroid/net/wifi/WifiConfiguration;->access$502(Landroid/net/wifi/WifiConfiguration;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/net/wifi/WifiConfiguration;->access$602(Landroid/net/wifi/WifiConfiguration;Landroid/net/MacAddress;)Landroid/net/MacAddress;
-PLandroid/net/wifi/WifiConfiguration;->describeContents()I
-PLandroid/net/wifi/WifiConfiguration;->getHttpProxy()Landroid/net/ProxyInfo;
-PLandroid/net/wifi/WifiConfiguration;->getIpAssignment()Landroid/net/IpConfiguration$IpAssignment;
-PLandroid/net/wifi/WifiConfiguration;->getIpConfiguration()Landroid/net/IpConfiguration;
-HPLandroid/net/wifi/WifiConfiguration;->getKey()Ljava/lang/String;
-HPLandroid/net/wifi/WifiConfiguration;->getNetworkSelectionStatus()Landroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;
-PLandroid/net/wifi/WifiConfiguration;->getPrintableSsid()Ljava/lang/String;
-PLandroid/net/wifi/WifiConfiguration;->getProxySettings()Landroid/net/IpConfiguration$ProxySettings;
-PLandroid/net/wifi/WifiConfiguration;->getRandomizedMacAddress()Landroid/net/MacAddress;
-HPLandroid/net/wifi/WifiConfiguration;->getSsidAndSecurityTypeString()Ljava/lang/String;
-PLandroid/net/wifi/WifiConfiguration;->hasNoInternetAccess()Z
-HPLandroid/net/wifi/WifiConfiguration;->isEnterprise()Z
-PLandroid/net/wifi/WifiConfiguration;->isEphemeral()Z
-PLandroid/net/wifi/WifiConfiguration;->isMetered(Landroid/net/wifi/WifiConfiguration;Landroid/net/wifi/WifiInfo;)Z
-PLandroid/net/wifi/WifiConfiguration;->isOpenNetwork()Z
-HPLandroid/net/wifi/WifiConfiguration;->isPasspoint()Z
-PLandroid/net/wifi/WifiConfiguration;->isValidMacAddressForRandomization(Landroid/net/MacAddress;)Z
-PLandroid/net/wifi/WifiConfiguration;->logTimeOfDay(J)Ljava/lang/String;
-PLandroid/net/wifi/WifiConfiguration;->readBitSet(Landroid/os/Parcel;)Ljava/util/BitSet;
-PLandroid/net/wifi/WifiConfiguration;->setIpAssignment(Landroid/net/IpConfiguration$IpAssignment;)V
-PLandroid/net/wifi/WifiConfiguration;->setIpConfiguration(Landroid/net/IpConfiguration;)V
-PLandroid/net/wifi/WifiConfiguration;->setNetworkSelectionStatus(Landroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;)V
-PLandroid/net/wifi/WifiConfiguration;->setProxySettings(Landroid/net/IpConfiguration$ProxySettings;)V
-PLandroid/net/wifi/WifiConfiguration;->setRandomizedMacAddress(Landroid/net/MacAddress;)V
-HPLandroid/net/wifi/WifiConfiguration;->toString()Ljava/lang/String;
-PLandroid/net/wifi/WifiConfiguration;->writeBitSet(Landroid/os/Parcel;Ljava/util/BitSet;)V
-HPLandroid/net/wifi/WifiConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/wifi/WifiEnterpriseConfig$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiEnterpriseConfig;
-HSPLandroid/net/wifi/WifiEnterpriseConfig$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/net/wifi/WifiEnterpriseConfig;-><init>()V
-HPLandroid/net/wifi/WifiEnterpriseConfig;-><init>(Landroid/net/wifi/WifiEnterpriseConfig;)V
-PLandroid/net/wifi/WifiEnterpriseConfig;->access$102(Landroid/net/wifi/WifiEnterpriseConfig;I)I
-PLandroid/net/wifi/WifiEnterpriseConfig;->access$202(Landroid/net/wifi/WifiEnterpriseConfig;I)I
-PLandroid/net/wifi/WifiEnterpriseConfig;->access$302(Landroid/net/wifi/WifiEnterpriseConfig;[Ljava/security/cert/X509Certificate;)[Ljava/security/cert/X509Certificate;
-PLandroid/net/wifi/WifiEnterpriseConfig;->access$402(Landroid/net/wifi/WifiEnterpriseConfig;Ljava/security/PrivateKey;)Ljava/security/PrivateKey;
-PLandroid/net/wifi/WifiEnterpriseConfig;->access$502(Landroid/net/wifi/WifiEnterpriseConfig;[Ljava/security/cert/X509Certificate;)[Ljava/security/cert/X509Certificate;
-PLandroid/net/wifi/WifiEnterpriseConfig;->access$602(Landroid/net/wifi/WifiEnterpriseConfig;Z)Z
-PLandroid/net/wifi/WifiEnterpriseConfig;->access$702(Landroid/net/wifi/WifiEnterpriseConfig;Z)Z
-PLandroid/net/wifi/WifiEnterpriseConfig;->access$802(Landroid/net/wifi/WifiEnterpriseConfig;I)I
-PLandroid/net/wifi/WifiEnterpriseConfig;->convertToQuotedString(Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/net/wifi/WifiEnterpriseConfig;->copyFrom(Landroid/net/wifi/WifiEnterpriseConfig;ZLjava/lang/String;)V
-PLandroid/net/wifi/WifiEnterpriseConfig;->copyFromExternal(Landroid/net/wifi/WifiEnterpriseConfig;Ljava/lang/String;)V
-PLandroid/net/wifi/WifiEnterpriseConfig;->getAnonymousIdentity()Ljava/lang/String;
-PLandroid/net/wifi/WifiEnterpriseConfig;->getCaCertificates()[Ljava/security/cert/X509Certificate;
-PLandroid/net/wifi/WifiEnterpriseConfig;->getEapMethod()I
-HPLandroid/net/wifi/WifiEnterpriseConfig;->getFieldValue(Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/net/wifi/WifiEnterpriseConfig;->getFieldValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/net/wifi/WifiEnterpriseConfig;->getIdentity()Ljava/lang/String;
-HPLandroid/net/wifi/WifiEnterpriseConfig;->getPassword()Ljava/lang/String;
-PLandroid/net/wifi/WifiEnterpriseConfig;->getPhase2Method()I
-PLandroid/net/wifi/WifiEnterpriseConfig;->requireSimCredential()Z
-HPLandroid/net/wifi/WifiEnterpriseConfig;->toString()Ljava/lang/String;
-HPLandroid/net/wifi/WifiEnterpriseConfig;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/wifi/WifiFrameworkInitializer$NoPreloadHolder;-><clinit>()V
-HSPLandroid/net/wifi/WifiFrameworkInitializer$NoPreloadHolder;->access$000()Landroid/os/HandlerThread;
-HSPLandroid/net/wifi/WifiFrameworkInitializer$NoPreloadHolder;->createInstance()Landroid/os/HandlerThread;
-HSPLandroid/net/wifi/WifiFrameworkInitializer;->getInstanceLooper()Landroid/os/Looper;
-HSPLandroid/net/wifi/WifiFrameworkInitializer;->lambda$registerServiceWrappers$0(Landroid/content/Context;Landroid/os/IBinder;)Landroid/net/wifi/WifiManager;
-HSPLandroid/net/wifi/WifiFrameworkInitializer;->lambda$registerServiceWrappers$1(Landroid/os/IBinder;)Landroid/net/wifi/p2p/WifiP2pManager;
-HSPLandroid/net/wifi/WifiFrameworkInitializer;->lambda$registerServiceWrappers$2(Landroid/content/Context;Landroid/os/IBinder;)Landroid/net/wifi/aware/WifiAwareManager;
-PLandroid/net/wifi/WifiFrameworkInitializer;->lambda$registerServiceWrappers$3(Landroid/content/Context;Landroid/os/IBinder;)Landroid/net/wifi/WifiScanner;
-HSPLandroid/net/wifi/WifiFrameworkInitializer;->lambda$registerServiceWrappers$5(Landroid/content/Context;Landroid/os/IBinder;)Landroid/net/wifi/rtt/WifiRttManager;
-HSPLandroid/net/wifi/WifiInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiInfo;
-HSPLandroid/net/wifi/WifiInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/net/wifi/WifiInfo;-><init>()V
-HPLandroid/net/wifi/WifiInfo;-><init>(Landroid/net/wifi/WifiInfo;)V
-HSPLandroid/net/wifi/WifiInfo;->access$002(Landroid/net/wifi/WifiInfo;Landroid/net/wifi/WifiSsid;)Landroid/net/wifi/WifiSsid;
-HSPLandroid/net/wifi/WifiInfo;->access$1002(Landroid/net/wifi/WifiInfo;Landroid/net/wifi/SupplicantState;)Landroid/net/wifi/SupplicantState;
-HSPLandroid/net/wifi/WifiInfo;->access$102(Landroid/net/wifi/WifiInfo;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/net/wifi/WifiInfo;->access$1102(Landroid/net/wifi/WifiInfo;Z)Z
-HSPLandroid/net/wifi/WifiInfo;->access$1202(Landroid/net/wifi/WifiInfo;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/net/wifi/WifiInfo;->access$1302(Landroid/net/wifi/WifiInfo;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/net/wifi/WifiInfo;->access$1402(Landroid/net/wifi/WifiInfo;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/net/wifi/WifiInfo;->access$1502(Landroid/net/wifi/WifiInfo;I)I
-HSPLandroid/net/wifi/WifiInfo;->access$202(Landroid/net/wifi/WifiInfo;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/net/wifi/WifiInfo;->access$302(Landroid/net/wifi/WifiInfo;Z)Z
-HSPLandroid/net/wifi/WifiInfo;->access$402(Landroid/net/wifi/WifiInfo;Z)Z
-HSPLandroid/net/wifi/WifiInfo;->access$502(Landroid/net/wifi/WifiInfo;Z)Z
-HSPLandroid/net/wifi/WifiInfo;->access$602(Landroid/net/wifi/WifiInfo;D)D
-HSPLandroid/net/wifi/WifiInfo;->access$702(Landroid/net/wifi/WifiInfo;D)D
-HSPLandroid/net/wifi/WifiInfo;->access$802(Landroid/net/wifi/WifiInfo;D)D
-HSPLandroid/net/wifi/WifiInfo;->access$902(Landroid/net/wifi/WifiInfo;D)D
-HSPLandroid/net/wifi/WifiInfo;->getBSSID()Ljava/lang/String;
-PLandroid/net/wifi/WifiInfo;->getDetailedStateOf(Landroid/net/wifi/SupplicantState;)Landroid/net/NetworkInfo$DetailedState;
-HSPLandroid/net/wifi/WifiInfo;->getFrequency()I
-HPLandroid/net/wifi/WifiInfo;->getHiddenSSID()Z
-HSPLandroid/net/wifi/WifiInfo;->getIpAddress()I
-HSPLandroid/net/wifi/WifiInfo;->getLinkSpeed()I
-PLandroid/net/wifi/WifiInfo;->getMacAddress()Ljava/lang/String;
-PLandroid/net/wifi/WifiInfo;->getMeteredHint()Z
-HSPLandroid/net/wifi/WifiInfo;->getNetworkId()I
-HSPLandroid/net/wifi/WifiInfo;->getRssi()I
-HSPLandroid/net/wifi/WifiInfo;->getRxLinkSpeedMbps()I
-PLandroid/net/wifi/WifiInfo;->getRxSuccessRate()D
-HSPLandroid/net/wifi/WifiInfo;->getSSID()Ljava/lang/String;
-PLandroid/net/wifi/WifiInfo;->getScore()I
-PLandroid/net/wifi/WifiInfo;->getSupplicantState()Landroid/net/wifi/SupplicantState;
-PLandroid/net/wifi/WifiInfo;->getTxBadRate()D
-HSPLandroid/net/wifi/WifiInfo;->getTxLinkSpeedMbps()I
-PLandroid/net/wifi/WifiInfo;->getTxRetriesRate()D
-PLandroid/net/wifi/WifiInfo;->getTxSuccessRate()D
-PLandroid/net/wifi/WifiInfo;->getWifiSsid()Landroid/net/wifi/WifiSsid;
-PLandroid/net/wifi/WifiInfo;->is24GHz()Z
-PLandroid/net/wifi/WifiInfo;->isEphemeral()Z
-HPLandroid/net/wifi/WifiInfo;->isOsuAp()Z
-HPLandroid/net/wifi/WifiInfo;->isPasspointAp()Z
-PLandroid/net/wifi/WifiInfo;->isTrusted()Z
-PLandroid/net/wifi/WifiInfo;->removeDoubleQuotes(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/net/wifi/WifiInfo;->reset()V
-PLandroid/net/wifi/WifiInfo;->setAppPackageName(Ljava/lang/String;)V
-PLandroid/net/wifi/WifiInfo;->setBSSID(Ljava/lang/String;)V
-PLandroid/net/wifi/WifiInfo;->setEphemeral(Z)V
-PLandroid/net/wifi/WifiInfo;->setFQDN(Ljava/lang/String;)V
-HSPLandroid/net/wifi/WifiInfo;->setFrequency(I)V
-HSPLandroid/net/wifi/WifiInfo;->setInetAddress(Ljava/net/InetAddress;)V
-HSPLandroid/net/wifi/WifiInfo;->setLinkSpeed(I)V
-PLandroid/net/wifi/WifiInfo;->setMacAddress(Ljava/lang/String;)V
-PLandroid/net/wifi/WifiInfo;->setMeteredHint(Z)V
-HSPLandroid/net/wifi/WifiInfo;->setNetworkId(I)V
-PLandroid/net/wifi/WifiInfo;->setOsuAp(Z)V
-PLandroid/net/wifi/WifiInfo;->setProviderFriendlyName(Ljava/lang/String;)V
-HSPLandroid/net/wifi/WifiInfo;->setRssi(I)V
-HSPLandroid/net/wifi/WifiInfo;->setRxLinkSpeedMbps(I)V
-PLandroid/net/wifi/WifiInfo;->setRxSuccessRate(D)V
-PLandroid/net/wifi/WifiInfo;->setSSID(Landroid/net/wifi/WifiSsid;)V
-PLandroid/net/wifi/WifiInfo;->setScore(I)V
-PLandroid/net/wifi/WifiInfo;->setSupplicantState(Landroid/net/wifi/SupplicantState;)V
-PLandroid/net/wifi/WifiInfo;->setTrusted(Z)V
-PLandroid/net/wifi/WifiInfo;->setTxBadRate(D)V
-HSPLandroid/net/wifi/WifiInfo;->setTxLinkSpeedMbps(I)V
-PLandroid/net/wifi/WifiInfo;->setTxRetriesRate(D)V
-PLandroid/net/wifi/WifiInfo;->setTxSuccessRate(D)V
-PLandroid/net/wifi/WifiInfo;->setWifiStandard(I)V
-PLandroid/net/wifi/WifiInfo;->toString()Ljava/lang/String;
-HPLandroid/net/wifi/WifiInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/net/wifi/WifiManager$MulticastLock;->acquire()V
-HPLandroid/net/wifi/WifiManager$MulticastLock;->release()V
-HPLandroid/net/wifi/WifiManager$MulticastLock;->setReferenceCounted(Z)V
-HPLandroid/net/wifi/WifiManager$OnWifiActivityEnergyInfoProxy;-><init>(Ljava/util/concurrent/Executor;Landroid/net/wifi/WifiManager$OnWifiActivityEnergyInfoListener;)V
-HPLandroid/net/wifi/WifiManager$OnWifiActivityEnergyInfoProxy;->lambda$onWifiActivityEnergyInfo$0(Landroid/net/wifi/WifiManager$OnWifiActivityEnergyInfoListener;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
-HPLandroid/net/wifi/WifiManager$OnWifiActivityEnergyInfoProxy;->onWifiActivityEnergyInfo(Landroid/os/connectivity/WifiActivityEnergyInfo;)V
-HPLandroid/net/wifi/WifiManager$SoftApCallback;->onInfoChanged(Landroid/net/wifi/SoftApInfo;)V
-HPLandroid/net/wifi/WifiManager$TrafficStateCallbackProxy;->lambda$onStateChanged$0$WifiManager$TrafficStateCallbackProxy(I)V
-HPLandroid/net/wifi/WifiManager$TrafficStateCallbackProxy;->onStateChanged(I)V
-HSPLandroid/net/wifi/WifiManager$WifiLock;-><init>(Landroid/net/wifi/WifiManager;ILjava/lang/String;)V
-HSPLandroid/net/wifi/WifiManager$WifiLock;-><init>(Landroid/net/wifi/WifiManager;ILjava/lang/String;Landroid/net/wifi/WifiManager$1;)V
-HSPLandroid/net/wifi/WifiManager$WifiLock;->acquire()V
-HSPLandroid/net/wifi/WifiManager$WifiLock;->finalize()V
-HPLandroid/net/wifi/WifiManager$WifiLock;->isHeld()Z
-HSPLandroid/net/wifi/WifiManager$WifiLock;->release()V
-HSPLandroid/net/wifi/WifiManager$WifiLock;->setReferenceCounted(Z)V
-HSPLandroid/net/wifi/WifiManager;-><init>(Landroid/content/Context;Landroid/net/wifi/IWifiManager;Landroid/os/Looper;)V
-HPLandroid/net/wifi/WifiManager;->access$000(Landroid/net/wifi/WifiManager;)Z
-HPLandroid/net/wifi/WifiManager;->access$300(Landroid/net/wifi/WifiManager;)I
-HPLandroid/net/wifi/WifiManager;->access$308(Landroid/net/wifi/WifiManager;)I
-HPLandroid/net/wifi/WifiManager;->access$310(Landroid/net/wifi/WifiManager;)I
-HPLandroid/net/wifi/WifiManager;->addOnWifiUsabilityStatsListener(Ljava/util/concurrent/Executor;Landroid/net/wifi/WifiManager$OnWifiUsabilityStatsListener;)V
-HPLandroid/net/wifi/WifiManager;->calculateSignalLevel(I)I
-HSPLandroid/net/wifi/WifiManager;->calculateSignalLevel(II)I
-HPLandroid/net/wifi/WifiManager;->createMulticastLock(Ljava/lang/String;)Landroid/net/wifi/WifiManager$MulticastLock;
-HSPLandroid/net/wifi/WifiManager;->createWifiLock(ILjava/lang/String;)Landroid/net/wifi/WifiManager$WifiLock;
-HSPLandroid/net/wifi/WifiManager;->createWifiLock(Ljava/lang/String;)Landroid/net/wifi/WifiManager$WifiLock;
-HSPLandroid/net/wifi/WifiManager;->getConfiguredNetworks()Ljava/util/List;
-HSPLandroid/net/wifi/WifiManager;->getConnectionInfo()Landroid/net/wifi/WifiInfo;
-HPLandroid/net/wifi/WifiManager;->getCurrentNetwork()Landroid/net/Network;
-HPLandroid/net/wifi/WifiManager;->getDhcpInfo()Landroid/net/DhcpInfo;
-HPLandroid/net/wifi/WifiManager;->getPrivilegedConfiguredNetworks()Ljava/util/List;
-HSPLandroid/net/wifi/WifiManager;->getScanResults()Ljava/util/List;
-HSPLandroid/net/wifi/WifiManager;->getSupportedFeatures()J
-HSPLandroid/net/wifi/WifiManager;->getVerboseLoggingLevel()I
-HPLandroid/net/wifi/WifiManager;->getWifiActivityEnergyInfoAsync(Ljava/util/concurrent/Executor;Landroid/net/wifi/WifiManager$OnWifiActivityEnergyInfoListener;)V
-PLandroid/net/wifi/WifiManager;->getWifiApConfiguration()Landroid/net/wifi/WifiConfiguration;
-HSPLandroid/net/wifi/WifiManager;->getWifiApState()I
-HSPLandroid/net/wifi/WifiManager;->getWifiState()I
-HSPLandroid/net/wifi/WifiManager;->isDualModeSupported()Z
-HSPLandroid/net/wifi/WifiManager;->isEnhancedPowerReportingSupported()Z
-HSPLandroid/net/wifi/WifiManager;->isFeatureSupported(J)Z
-HSPLandroid/net/wifi/WifiManager;->isScanAlwaysAvailable()Z
-HSPLandroid/net/wifi/WifiManager;->isWifiApEnabled()Z
-HSPLandroid/net/wifi/WifiManager;->isWifiEnabled()Z
-PLandroid/net/wifi/WifiManager;->retrieveBackupData()[B
-PLandroid/net/wifi/WifiManager;->retrieveSoftApBackupData()[B
-HPLandroid/net/wifi/WifiManager;->setDeviceMobilityState(I)V
-HPLandroid/net/wifi/WifiManager;->setWifiEnabled(Z)Z
-PLandroid/net/wifi/WifiManager;->startScan()Z
-PLandroid/net/wifi/WifiManager;->startScan(Landroid/os/WorkSource;)Z
-PLandroid/net/wifi/WifiManager;->updateInterfaceIpState(Ljava/lang/String;I)V
-HSPLandroid/net/wifi/WifiManager;->updateVerboseLoggingEnabledFromService()V
-HPLandroid/net/wifi/WifiManager;->updateWifiUsabilityScore(III)V
-HPLandroid/net/wifi/WifiNetworkAgentSpecifier$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiNetworkAgentSpecifier;
-HPLandroid/net/wifi/WifiNetworkAgentSpecifier$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/wifi/WifiNetworkAgentSpecifier;-><init>(Landroid/net/wifi/WifiConfiguration;ILjava/lang/String;)V
-PLandroid/net/wifi/WifiNetworkAgentSpecifier;->equals(Ljava/lang/Object;)Z
-HPLandroid/net/wifi/WifiNetworkAgentSpecifier;->redact()Landroid/net/NetworkSpecifier;
-PLandroid/net/wifi/WifiNetworkAgentSpecifier;->satisfiedBy(Landroid/net/NetworkSpecifier;)Z
-PLandroid/net/wifi/WifiNetworkAgentSpecifier;->toString()Ljava/lang/String;
-HPLandroid/net/wifi/WifiNetworkAgentSpecifier;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/net/wifi/WifiNetworkScoreCache$CacheListener$1;->run()V
-HSPLandroid/net/wifi/WifiNetworkScoreCache$CacheListener;-><init>(Landroid/os/Handler;)V
-HPLandroid/net/wifi/WifiNetworkScoreCache$CacheListener;->post(Ljava/util/List;)V
-HSPLandroid/net/wifi/WifiNetworkScoreCache;-><init>(Landroid/content/Context;)V
-HPLandroid/net/wifi/WifiNetworkScoreCache;->buildNetworkKey(Landroid/net/NetworkKey;)Ljava/lang/String;
-HPLandroid/net/wifi/WifiNetworkScoreCache;->clearScores()V
-HPLandroid/net/wifi/WifiNetworkScoreCache;->getScoredNetwork(Landroid/net/NetworkKey;)Landroid/net/ScoredNetwork;
-HPLandroid/net/wifi/WifiNetworkScoreCache;->updateScores(Ljava/util/List;)V
-HSPLandroid/net/wifi/WifiScanner$ChannelSpec;-><init>(I)V
-HPLandroid/net/wifi/WifiScanner$ListenerWithExecutor;-><init>(Ljava/lang/Object;Ljava/util/concurrent/Executor;)V
-HPLandroid/net/wifi/WifiScanner$OperationResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiScanner$OperationResult;
-HPLandroid/net/wifi/WifiScanner$OperationResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/wifi/WifiScanner$OperationResult;-><init>(ILjava/lang/String;)V
-PLandroid/net/wifi/WifiScanner$OperationResult;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/wifi/WifiScanner$ParcelableScanData$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiScanner$ParcelableScanData;
-PLandroid/net/wifi/WifiScanner$ParcelableScanData$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/wifi/WifiScanner$ParcelableScanData;-><init>([Landroid/net/wifi/WifiScanner$ScanData;)V
-PLandroid/net/wifi/WifiScanner$ParcelableScanData;->getResults()[Landroid/net/wifi/WifiScanner$ScanData;
-PLandroid/net/wifi/WifiScanner$ParcelableScanData;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/wifi/WifiScanner$ParcelableScanResults;-><init>([Landroid/net/wifi/ScanResult;)V
-PLandroid/net/wifi/WifiScanner$ParcelableScanResults;->getResults()[Landroid/net/wifi/ScanResult;
-PLandroid/net/wifi/WifiScanner$PnoSettings$1;-><init>()V
-PLandroid/net/wifi/WifiScanner$PnoSettings$PnoNetwork;-><init>(Ljava/lang/String;)V
-PLandroid/net/wifi/WifiScanner$PnoSettings;-><clinit>()V
-PLandroid/net/wifi/WifiScanner$PnoSettings;-><init>()V
-HPLandroid/net/wifi/WifiScanner$ScanData$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiScanner$ScanData;
-PLandroid/net/wifi/WifiScanner$ScanData$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/net/wifi/WifiScanner$ScanData;-><init>(IIIILjava/util/List;)V
-HPLandroid/net/wifi/WifiScanner$ScanData;-><init>(IIII[Landroid/net/wifi/ScanResult;)V
-HSPLandroid/net/wifi/WifiScanner$ScanData;-><init>(II[Landroid/net/wifi/ScanResult;)V
-HPLandroid/net/wifi/WifiScanner$ScanData;-><init>(Landroid/net/wifi/WifiScanner$ScanData;)V
-PLandroid/net/wifi/WifiScanner$ScanData;->getBandScanned()I
-PLandroid/net/wifi/WifiScanner$ScanData;->getBucketsScanned()I
-PLandroid/net/wifi/WifiScanner$ScanData;->getFlags()I
-PLandroid/net/wifi/WifiScanner$ScanData;->getId()I
-HPLandroid/net/wifi/WifiScanner$ScanData;->getResults()[Landroid/net/wifi/ScanResult;
-HPLandroid/net/wifi/WifiScanner$ScanData;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/wifi/WifiScanner$ScanSettings$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiScanner$ScanSettings;
-PLandroid/net/wifi/WifiScanner$ScanSettings$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/wifi/WifiScanner$ScanSettings$HiddenNetwork;-><init>(Ljava/lang/String;)V
-HSPLandroid/net/wifi/WifiScanner$ScanSettings;-><init>()V
-PLandroid/net/wifi/WifiScanner$ScanSettings;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/wifi/WifiScanner$ServiceHandler;-><init>(Landroid/net/wifi/WifiScanner;Landroid/os/Looper;)V
-HPLandroid/net/wifi/WifiScanner$ServiceHandler;->handleMessage(Landroid/os/Message;)V
-PLandroid/net/wifi/WifiScanner$ServiceHandler;->lambda$handleMessage$0(Landroid/net/wifi/WifiScanner$ActionListener;Landroid/net/wifi/WifiScanner$OperationResult;)V
-HPLandroid/net/wifi/WifiScanner$ServiceHandler;->lambda$handleMessage$1(Landroid/net/wifi/WifiScanner$ScanListener;Landroid/net/wifi/WifiScanner$ParcelableScanData;)V
-HPLandroid/net/wifi/WifiScanner$ServiceHandler;->lambda$handleMessage$2(Landroid/net/wifi/WifiScanner$ScanListener;Landroid/net/wifi/ScanResult;)V
-HSPLandroid/net/wifi/WifiScanner;-><init>(Landroid/content/Context;Landroid/net/wifi/IWifiScanner;Landroid/os/Looper;)V
-PLandroid/net/wifi/WifiScanner;->access$100(Landroid/net/wifi/WifiScanner;I)Landroid/net/wifi/WifiScanner$ListenerWithExecutor;
-PLandroid/net/wifi/WifiScanner;->access$200(Landroid/net/wifi/WifiScanner;I)Ljava/lang/Object;
-PLandroid/net/wifi/WifiScanner;->addListener(Landroid/net/wifi/WifiScanner$ActionListener;)I
-HSPLandroid/net/wifi/WifiScanner;->addListener(Landroid/net/wifi/WifiScanner$ActionListener;Ljava/util/concurrent/Executor;)I
-HSPLandroid/net/wifi/WifiScanner;->getListenerKey(Ljava/lang/Object;)I
-HPLandroid/net/wifi/WifiScanner;->getListenerWithExecutor(I)Landroid/net/wifi/WifiScanner$ListenerWithExecutor;
-PLandroid/net/wifi/WifiScanner;->getSingleScanResults()Ljava/util/List;
-HSPLandroid/net/wifi/WifiScanner;->putListener(Ljava/lang/Object;)I
-HSPLandroid/net/wifi/WifiScanner;->registerScanListener(Landroid/net/wifi/WifiScanner$ScanListener;)V
-HSPLandroid/net/wifi/WifiScanner;->registerScanListener(Ljava/util/concurrent/Executor;Landroid/net/wifi/WifiScanner$ScanListener;)V
-PLandroid/net/wifi/WifiScanner;->removeListener(I)Ljava/lang/Object;
-HSPLandroid/net/wifi/WifiScanner;->removeListener(Ljava/lang/Object;)I
-HSPLandroid/net/wifi/WifiScanner;->setScanningEnabled(Z)V
-PLandroid/net/wifi/WifiScanner;->startDisconnectedPnoScan(Landroid/net/wifi/WifiScanner$ScanSettings;Landroid/net/wifi/WifiScanner$PnoSettings;Landroid/net/wifi/WifiScanner$PnoScanListener;)V
-PLandroid/net/wifi/WifiScanner;->startPnoScan(Landroid/net/wifi/WifiScanner$ScanSettings;Landroid/net/wifi/WifiScanner$PnoSettings;I)V
-HPLandroid/net/wifi/WifiScanner;->startScan(Landroid/net/wifi/WifiScanner$ScanSettings;Landroid/net/wifi/WifiScanner$ScanListener;)V
-PLandroid/net/wifi/WifiScanner;->startScan(Landroid/net/wifi/WifiScanner$ScanSettings;Landroid/net/wifi/WifiScanner$ScanListener;Landroid/os/WorkSource;)V
-PLandroid/net/wifi/WifiScanner;->stopPnoScan(Landroid/net/wifi/WifiScanner$ScanListener;)V
-HSPLandroid/net/wifi/WifiScanner;->unregisterScanListener(Landroid/net/wifi/WifiScanner$ScanListener;)V
-HSPLandroid/net/wifi/WifiScanner;->validateChannel()V
-HSPLandroid/net/wifi/WifiSsid$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiSsid;
-HSPLandroid/net/wifi/WifiSsid$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/net/wifi/WifiSsid;-><init>()V
-HSPLandroid/net/wifi/WifiSsid;-><init>(Landroid/net/wifi/WifiSsid$1;)V
-PLandroid/net/wifi/WifiSsid;->createFromByteArray([B)Landroid/net/wifi/WifiSsid;
-HPLandroid/net/wifi/WifiSsid;->createFromHex(Ljava/lang/String;)Landroid/net/wifi/WifiSsid;
-HSPLandroid/net/wifi/WifiSsid;->getHexString()Ljava/lang/String;
-HSPLandroid/net/wifi/WifiSsid;->isArrayAllZeroes([B)Z
-HPLandroid/net/wifi/WifiSsid;->isHidden()Z
-HSPLandroid/net/wifi/WifiSsid;->toString()Ljava/lang/String;
-PLandroid/net/wifi/WifiSsid;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/wifi/WifiUsabilityStatsEntry$1;-><init>()V
-HPLandroid/net/wifi/WifiUsabilityStatsEntry$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiUsabilityStatsEntry;
-HPLandroid/net/wifi/WifiUsabilityStatsEntry$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/wifi/WifiUsabilityStatsEntry;-><clinit>()V
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;-><init>(JIIJJJJJJJJJJJJJJJJIIIIIIIZ)V
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getLinkSpeedMbps()I
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getRssi()I
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getTimeStampMillis()J
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getTotalCcaBusyFreqTimeMillis()J
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getTotalRadioOnFreqTimeMillis()J
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getTotalRadioOnTimeMillis()J
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getTotalRadioRxTimeMillis()J
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getTotalRadioTxTimeMillis()J
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getTotalRoamScanTimeMillis()J
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getTotalRxSuccess()J
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getTotalScanTimeMillis()J
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getTotalTxBad()J
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getTotalTxRetries()J
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->getTotalTxSuccess()J
-HPLandroid/net/wifi/WifiUsabilityStatsEntry;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/wifi/WpsInfo;-><init>()V
-PLandroid/net/wifi/WpsInfo;->toString()Ljava/lang/String;
-HSPLandroid/net/wifi/aware/IWifiAwareManager$Stub;-><init>()V
-HSPLandroid/net/wifi/aware/IWifiAwareManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/aware/IWifiAwareManager;
-PLandroid/net/wifi/aware/IWifiAwareManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/net/wifi/aware/WifiAwareManager;-><init>(Landroid/content/Context;Landroid/net/wifi/aware/IWifiAwareManager;)V
-HSPLandroid/net/wifi/p2p/IWifiP2pManager$Stub;-><init>()V
-HSPLandroid/net/wifi/p2p/IWifiP2pManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/p2p/IWifiP2pManager;
-PLandroid/net/wifi/p2p/IWifiP2pManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/net/wifi/p2p/WifiP2pConfig;-><init>()V
-PLandroid/net/wifi/p2p/WifiP2pConfig;->toString()Ljava/lang/String;
-HSPLandroid/net/wifi/p2p/WifiP2pDevice$1;-><init>()V
-HSPLandroid/net/wifi/p2p/WifiP2pDevice;-><clinit>()V
-HSPLandroid/net/wifi/p2p/WifiP2pDevice;-><init>()V
-HSPLandroid/net/wifi/p2p/WifiP2pDeviceList;-><init>()V
-HSPLandroid/net/wifi/p2p/WifiP2pGroupList$1;-><init>(Landroid/net/wifi/p2p/WifiP2pGroupList;I)V
-HSPLandroid/net/wifi/p2p/WifiP2pGroupList;-><init>(Landroid/net/wifi/p2p/WifiP2pGroupList;Landroid/net/wifi/p2p/WifiP2pGroupList$GroupDeleteListener;)V
-PLandroid/net/wifi/p2p/WifiP2pGroupList;->toString()Ljava/lang/String;
-HSPLandroid/net/wifi/p2p/WifiP2pInfo;-><init>()V
-PLandroid/net/wifi/p2p/WifiP2pInfo;->toString()Ljava/lang/String;
-HSPLandroid/net/wifi/p2p/WifiP2pManager;-><init>(Landroid/net/wifi/p2p/IWifiP2pManager;)V
-PLandroid/net/wifi/p2p/WifiP2pManager;->getP2pStateMachineMessenger()Landroid/os/Messenger;
-HSPLandroid/net/wifi/rtt/IWifiRttManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/net/wifi/rtt/IWifiRttManager$Stub$Proxy;->isAvailable()Z
-HSPLandroid/net/wifi/rtt/IWifiRttManager$Stub;-><init>()V
-HSPLandroid/net/wifi/rtt/IWifiRttManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/rtt/IWifiRttManager;
-PLandroid/net/wifi/rtt/IWifiRttManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/net/wifi/rtt/RangingRequest;->getMaxPeers()I
-HSPLandroid/net/wifi/rtt/WifiRttManager;-><init>(Landroid/content/Context;Landroid/net/wifi/rtt/IWifiRttManager;)V
-HSPLandroid/net/wifi/rtt/WifiRttManager;->isAvailable()Z
-HSPLandroid/net/wifi/util/HexEncoding;-><clinit>()V
-HSPLandroid/net/wifi/util/HexEncoding;->decode([CZ)[B
-PLandroid/net/wifi/util/HexEncoding;->encode([B)[C
-PLandroid/net/wifi/util/HexEncoding;->encode([BII)[C
-HPLandroid/net/wifi/util/HexEncoding;->encode([BIIZ)[C
-PLandroid/net/wifi/util/HexEncoding;->toDigit([CI)I
-PLandroid/net/wifi/wificond/ChannelSettings$1;-><init>()V
-PLandroid/net/wifi/wificond/ChannelSettings;-><clinit>()V
-PLandroid/net/wifi/wificond/ChannelSettings;-><init>()V
-HPLandroid/net/wifi/wificond/ChannelSettings;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/wifi/wificond/HiddenNetwork$1;-><init>()V
-PLandroid/net/wifi/wificond/HiddenNetwork;-><clinit>()V
-PLandroid/net/wifi/wificond/HiddenNetwork;-><init>()V
-PLandroid/net/wifi/wificond/HiddenNetwork;->equals(Ljava/lang/Object;)Z
-HPLandroid/net/wifi/wificond/HiddenNetwork;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/wifi/wificond/NativeScanResult$1;-><init>()V
-HPLandroid/net/wifi/wificond/NativeScanResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/wificond/NativeScanResult;
-HPLandroid/net/wifi/wificond/NativeScanResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/wifi/wificond/NativeScanResult$1;->newArray(I)[Landroid/net/wifi/wificond/NativeScanResult;
-HPLandroid/net/wifi/wificond/NativeScanResult$1;->newArray(I)[Ljava/lang/Object;
-PLandroid/net/wifi/wificond/NativeScanResult;-><clinit>()V
-PLandroid/net/wifi/wificond/NativeScanResult;-><init>()V
-PLandroid/net/wifi/wificond/PnoNetwork$1;-><init>()V
-PLandroid/net/wifi/wificond/PnoNetwork;-><clinit>()V
-HPLandroid/net/wifi/wificond/PnoNetwork;-><init>()V
-HPLandroid/net/wifi/wificond/PnoNetwork;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/wifi/wificond/PnoSettings$1;-><init>()V
-PLandroid/net/wifi/wificond/PnoSettings;-><clinit>()V
-PLandroid/net/wifi/wificond/PnoSettings;-><init>()V
-HPLandroid/net/wifi/wificond/PnoSettings;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/wifi/wificond/RadioChainInfo$1;-><init>()V
-HPLandroid/net/wifi/wificond/RadioChainInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/wificond/RadioChainInfo;
-HPLandroid/net/wifi/wificond/RadioChainInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/wifi/wificond/RadioChainInfo;-><clinit>()V
-HPLandroid/net/wifi/wificond/RadioChainInfo;-><init>()V
-PLandroid/net/wifi/wificond/SingleScanSettings$1;-><init>()V
-PLandroid/net/wifi/wificond/SingleScanSettings;-><clinit>()V
-PLandroid/net/wifi/wificond/SingleScanSettings;-><init>()V
-PLandroid/net/wifi/wificond/SingleScanSettings;->isValidScanType(I)Z
-HPLandroid/net/wifi/wificond/SingleScanSettings;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/nfc/INfcAdapter$Stub$Proxy;->deviceSupportsNfcSecure()Z
+HSPLandroid/nfc/INfcAdapter$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/nfc/INfcAdapter$Stub$Proxy;->getNfcCardEmulationInterface()Landroid/nfc/INfcCardEmulation;
 HSPLandroid/nfc/INfcAdapter$Stub$Proxy;->getNfcFCardEmulationInterface()Landroid/nfc/INfcFCardEmulation;
 HSPLandroid/nfc/INfcAdapter$Stub$Proxy;->getNfcTagInterface()Landroid/nfc/INfcTag;
-HSPLandroid/nfc/INfcAdapter$Stub$Proxy;->getState()I
-HPLandroid/nfc/INfcAdapter$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/nfc/INfcCardEmulation$Stub$Proxy;->getAidGroupForService(ILandroid/content/ComponentName;Ljava/lang/String;)Landroid/nfc/cardemulation/AidGroup;
-HSPLandroid/nfc/INfcCardEmulation$Stub$Proxy;->getServices(ILjava/lang/String;)Ljava/util/List;
-PLandroid/nfc/INfcCardEmulation$Stub$Proxy;->registerAidGroupForService(ILandroid/content/ComponentName;Landroid/nfc/cardemulation/AidGroup;)Z
-PLandroid/nfc/INfcCardEmulation$Stub$Proxy;->removeAidGroupForService(ILandroid/content/ComponentName;Ljava/lang/String;)Z
-HPLandroid/nfc/INfcCardEmulation$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/nfc/INfcCardEmulation$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/nfc/INfcFCardEmulation$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/nfc/INfcTag$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/nfc/INfcAdapter$Stub;->asInterface(Landroid/os/IBinder;)Landroid/nfc/INfcAdapter;
 HSPLandroid/nfc/NfcAdapter;-><init>(Landroid/content/Context;)V
-HSPLandroid/nfc/NfcAdapter;->getCardEmulationService()Landroid/nfc/INfcCardEmulation;
-HSPLandroid/nfc/NfcAdapter;->getContext()Landroid/content/Context;
 HSPLandroid/nfc/NfcAdapter;->getDefaultAdapter(Landroid/content/Context;)Landroid/nfc/NfcAdapter;
 HSPLandroid/nfc/NfcAdapter;->getNfcAdapter(Landroid/content/Context;)Landroid/nfc/NfcAdapter;
+HSPLandroid/nfc/NfcAdapter;->getServiceInterface()Landroid/nfc/INfcAdapter;
 HSPLandroid/nfc/NfcAdapter;->hasBeamFeature()Z
 HSPLandroid/nfc/NfcAdapter;->hasNfcFeature()Z
 HSPLandroid/nfc/NfcAdapter;->hasNfcHceFeature()Z
-HSPLandroid/nfc/NfcAdapter;->isEnabled()Z
-HSPLandroid/nfc/NfcAdapter;->isSecureNfcSupported()Z
 HSPLandroid/nfc/NfcManager;-><init>(Landroid/content/Context;)V
-HSPLandroid/nfc/cardemulation/AidGroup$1;-><init>()V
-HSPLandroid/nfc/cardemulation/AidGroup$1;->createFromParcel(Landroid/os/Parcel;)Landroid/nfc/cardemulation/AidGroup;
-HSPLandroid/nfc/cardemulation/AidGroup$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/nfc/cardemulation/AidGroup;-><clinit>()V
-HSPLandroid/nfc/cardemulation/AidGroup;-><init>(Ljava/util/List;Ljava/lang/String;)V
-PLandroid/nfc/cardemulation/AidGroup;->getAids()Ljava/util/List;
-HSPLandroid/nfc/cardemulation/AidGroup;->isValidCategory(Ljava/lang/String;)Z
-PLandroid/nfc/cardemulation/AidGroup;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/nfc/cardemulation/CardEmulation;-><clinit>()V
-HSPLandroid/nfc/cardemulation/CardEmulation;-><init>(Landroid/content/Context;Landroid/nfc/INfcCardEmulation;)V
-PLandroid/nfc/cardemulation/CardEmulation;->getAidsForService(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;
-HSPLandroid/nfc/cardemulation/CardEmulation;->getInstance(Landroid/nfc/NfcAdapter;)Landroid/nfc/cardemulation/CardEmulation;
-HSPLandroid/nfc/cardemulation/CardEmulation;->isValidAid(Ljava/lang/String;)Z
-PLandroid/nfc/cardemulation/CardEmulation;->registerAidsForService(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)Z
-PLandroid/nfc/cardemulation/CardEmulation;->removeAidsForService(Landroid/content/ComponentName;Ljava/lang/String;)Z
-PLandroid/opengl/EGL14;->eglCreateWindowSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Ljava/lang/Object;[II)Landroid/opengl/EGLSurface;
-PLandroid/opengl/EGLConfig;-><init>(J)V
 HSPLandroid/opengl/EGLContext;-><init>(J)V
-PLandroid/opengl/EGLDisplay;-><init>(J)V
-HPLandroid/opengl/EGLDisplay;->equals(Ljava/lang/Object;)Z
-PLandroid/opengl/EGLObjectHandle;-><init>(J)V
-HPLandroid/opengl/EGLObjectHandle;->getNativeHandle()J
-PLandroid/opengl/EGLSurface;-><init>(J)V
-HPLandroid/opengl/EGLSurface;->equals(Ljava/lang/Object;)Z
-HSPLandroid/opengl/GLES20;->glVertexAttribPointer(IIIZILjava/nio/Buffer;)V
-HPLandroid/opengl/GLUtils;->texImage2D(IILandroid/graphics/Bitmap;I)V
-HSPLandroid/opengl/Matrix;->setIdentityM([FI)V
+HSPLandroid/opengl/EGLObjectHandle;-><init>(J)V
 HSPLandroid/os/-$$Lambda$Build$WrC6eL7oW2Zm9UDTcXXKr0DnOMw;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/os/-$$Lambda$IyvVQC-0mKtsfXbnO0kDL64hrk0;->applyAsString(I)Ljava/lang/String;
-HSPLandroid/os/-$$Lambda$PowerManager$1$-RL9hKNKSaGL1mmR-EjQ-Cm9KuA;-><init>(Landroid/os/PowerManager$OnThermalStatusChangedListener;I)V
-PLandroid/os/-$$Lambda$PowerManager$1$-RL9hKNKSaGL1mmR-EjQ-Cm9KuA;->run()V
-PLandroid/os/-$$Lambda$PowerManager$WakeLock$VvFzmRZ4ZGlXx7u3lSAJ_T-YUjw;-><init>(Landroid/os/PowerManager$WakeLock;Ljava/lang/Runnable;)V
-PLandroid/os/-$$Lambda$PowerManager$WakeLock$VvFzmRZ4ZGlXx7u3lSAJ_T-YUjw;->run()V
 HSPLandroid/os/-$$Lambda$StrictMode$1yH8AK0bTwVwZOb9x8HoiSBdzr0;->log(Landroid/os/StrictMode$ViolationInfo;)V
 HSPLandroid/os/-$$Lambda$StrictMode$AndroidBlockGuardPolicy$9nBulCQKaMajrWr41SB7f7YRT1I;-><init>(Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/view/IWindowManager;Ljava/util/ArrayList;)V
 HSPLandroid/os/-$$Lambda$StrictMode$AndroidBlockGuardPolicy$9nBulCQKaMajrWr41SB7f7YRT1I;->run()V
-HSPLandroid/os/-$$Lambda$StrictMode$yZJXPvy2veRNA-xL_SWdXzX_OLg;-><init>(ILandroid/os/StrictMode$ViolationInfo;)V
 HSPLandroid/os/-$$Lambda$StrictMode$yZJXPvy2veRNA-xL_SWdXzX_OLg;->run()V
 HSPLandroid/os/-$$Lambda$ThreadLocalWorkSource$IP9vRFCDG5YwbWbXAEGHH52B9IE;->get()Ljava/lang/Object;
-PLandroid/os/AppZygote;-><init>(Landroid/content/pm/ApplicationInfo;III)V
-PLandroid/os/AppZygote;->connectToZygoteIfNeededLocked()V
-PLandroid/os/AppZygote;->getAppInfo()Landroid/content/pm/ApplicationInfo;
-PLandroid/os/AppZygote;->getProcess()Landroid/os/ChildZygoteProcess;
-PLandroid/os/AppZygote;->stopZygote()V
-PLandroid/os/AppZygote;->stopZygoteLocked()V
-HSPLandroid/os/AsyncResult;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Throwable;)V
-HSPLandroid/os/AsyncResult;->forMessage(Landroid/os/Message;Ljava/lang/Object;Ljava/lang/Throwable;)Landroid/os/AsyncResult;
 HSPLandroid/os/AsyncTask$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
-HPLandroid/os/AsyncTask$2;->rejectedExecution(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V
 HSPLandroid/os/AsyncTask$3;-><init>(Landroid/os/AsyncTask;)V
 HSPLandroid/os/AsyncTask$3;->call()Ljava/lang/Object;
 HSPLandroid/os/AsyncTask$4;-><init>(Landroid/os/AsyncTask;Ljava/util/concurrent/Callable;)V
@@ -16440,11 +8829,6 @@
 HSPLandroid/os/AsyncTask$WorkerRunnable;-><init>(Landroid/os/AsyncTask$1;)V
 HSPLandroid/os/AsyncTask;-><init>()V
 HSPLandroid/os/AsyncTask;-><init>(Landroid/os/Looper;)V
-HPLandroid/os/AsyncTask;->access$000()Ljava/util/concurrent/ThreadPoolExecutor;
-HPLandroid/os/AsyncTask;->access$002(Ljava/util/concurrent/ThreadPoolExecutor;)Ljava/util/concurrent/ThreadPoolExecutor;
-HPLandroid/os/AsyncTask;->access$100()Ljava/util/concurrent/LinkedBlockingQueue;
-HPLandroid/os/AsyncTask;->access$102(Ljava/util/concurrent/LinkedBlockingQueue;)Ljava/util/concurrent/LinkedBlockingQueue;
-HPLandroid/os/AsyncTask;->access$200()Ljava/util/concurrent/ThreadFactory;
 HSPLandroid/os/AsyncTask;->access$500(Landroid/os/AsyncTask;)Ljava/util/concurrent/atomic/AtomicBoolean;
 HSPLandroid/os/AsyncTask;->access$700(Landroid/os/AsyncTask;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/os/AsyncTask;->access$800(Landroid/os/AsyncTask;Ljava/lang/Object;)V
@@ -16454,18 +8838,13 @@
 HSPLandroid/os/AsyncTask;->execute([Ljava/lang/Object;)Landroid/os/AsyncTask;
 HSPLandroid/os/AsyncTask;->executeOnExecutor(Ljava/util/concurrent/Executor;[Ljava/lang/Object;)Landroid/os/AsyncTask;
 HSPLandroid/os/AsyncTask;->finish(Ljava/lang/Object;)V
-HPLandroid/os/AsyncTask;->get()Ljava/lang/Object;
 HSPLandroid/os/AsyncTask;->getHandler()Landroid/os/Handler;
 HSPLandroid/os/AsyncTask;->getMainHandler()Landroid/os/Handler;
-HPLandroid/os/AsyncTask;->getStatus()Landroid/os/AsyncTask$Status;
 HSPLandroid/os/AsyncTask;->isCancelled()Z
-HSPLandroid/os/AsyncTask;->onCancelled()V
-HSPLandroid/os/AsyncTask;->onCancelled(Ljava/lang/Object;)V
 HSPLandroid/os/AsyncTask;->onPostExecute(Ljava/lang/Object;)V
 HSPLandroid/os/AsyncTask;->onPreExecute()V
 HSPLandroid/os/AsyncTask;->postResult(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/os/AsyncTask;->postResultIfNotInvoked(Ljava/lang/Object;)V
-HPLandroid/os/AsyncTask;->publishProgress([Ljava/lang/Object;)V
 HSPLandroid/os/BaseBundle;-><init>()V
 HSPLandroid/os/BaseBundle;-><init>(I)V
 HSPLandroid/os/BaseBundle;-><init>(Landroid/os/BaseBundle;)V
@@ -16476,27 +8855,19 @@
 HSPLandroid/os/BaseBundle;->containsKey(Ljava/lang/String;)Z
 HSPLandroid/os/BaseBundle;->copyInternal(Landroid/os/BaseBundle;Z)V
 HSPLandroid/os/BaseBundle;->deepCopyValue(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/os/BaseBundle;->deepcopyArrayList(Ljava/util/ArrayList;)Ljava/util/ArrayList;
 HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;)Ljava/lang/Object;
 HSPLandroid/os/BaseBundle;->getBoolean(Ljava/lang/String;)Z
 HSPLandroid/os/BaseBundle;->getBoolean(Ljava/lang/String;Z)Z
-HPLandroid/os/BaseBundle;->getBooleanArray(Ljava/lang/String;)[Z
 HSPLandroid/os/BaseBundle;->getByteArray(Ljava/lang/String;)[B
 HSPLandroid/os/BaseBundle;->getCharSequence(Ljava/lang/String;)Ljava/lang/CharSequence;
-PLandroid/os/BaseBundle;->getCharSequenceArray(Ljava/lang/String;)[Ljava/lang/CharSequence;
-HSPLandroid/os/BaseBundle;->getCharSequenceArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
-PLandroid/os/BaseBundle;->getDouble(Ljava/lang/String;)D
-PLandroid/os/BaseBundle;->getDouble(Ljava/lang/String;D)D
 HSPLandroid/os/BaseBundle;->getFloat(Ljava/lang/String;F)F
-HSPLandroid/os/BaseBundle;->getFloatArray(Ljava/lang/String;)[F
 HSPLandroid/os/BaseBundle;->getInt(Ljava/lang/String;)I
 HSPLandroid/os/BaseBundle;->getInt(Ljava/lang/String;I)I
 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
-PLandroid/os/BaseBundle;->getMap()Landroid/util/ArrayMap;
+HSPLandroid/os/BaseBundle;->getMap()Landroid/util/ArrayMap;
 HSPLandroid/os/BaseBundle;->getSerializable(Ljava/lang/String;)Ljava/io/Serializable;
 HSPLandroid/os/BaseBundle;->getString(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/os/BaseBundle;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
@@ -16508,268 +8879,96 @@
 HSPLandroid/os/BaseBundle;->isEmptyParcel(Landroid/os/Parcel;)Z
 HSPLandroid/os/BaseBundle;->isParcelled()Z
 HSPLandroid/os/BaseBundle;->keySet()Ljava/util/Set;
-PLandroid/os/BaseBundle;->kindofEquals(Landroid/os/BaseBundle;)Z
-PLandroid/os/BaseBundle;->maybeIsEmpty()Z
-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
-HPLandroid/os/BaseBundle;->putBooleanArray(Ljava/lang/String;[Z)V
-HPLandroid/os/BaseBundle;->putByte(Ljava/lang/String;B)V
+HSPLandroid/os/BaseBundle;->putByteArray(Ljava/lang/String;[B)V
 HSPLandroid/os/BaseBundle;->putCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)V
-HSPLandroid/os/BaseBundle;->putDouble(Ljava/lang/String;D)V
+HSPLandroid/os/BaseBundle;->putCharSequenceArray(Ljava/lang/String;[Ljava/lang/CharSequence;)V
 HSPLandroid/os/BaseBundle;->putFloat(Ljava/lang/String;F)V
-HSPLandroid/os/BaseBundle;->putFloatArray(Ljava/lang/String;[F)V
 HSPLandroid/os/BaseBundle;->putInt(Ljava/lang/String;I)V
 HSPLandroid/os/BaseBundle;->putIntArray(Ljava/lang/String;[I)V
+HSPLandroid/os/BaseBundle;->putIntegerArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
 HSPLandroid/os/BaseBundle;->putLong(Ljava/lang/String;J)V
 HSPLandroid/os/BaseBundle;->putLongArray(Ljava/lang/String;[J)V
 HSPLandroid/os/BaseBundle;->putSerializable(Ljava/lang/String;Ljava/io/Serializable;)V
 HSPLandroid/os/BaseBundle;->putString(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/os/BaseBundle;->putStringArray(Ljava/lang/String;[Ljava/lang/String;)V
 HSPLandroid/os/BaseBundle;->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
+HSPLandroid/os/BaseBundle;->recycleParcel(Landroid/os/Parcel;)V
 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;->typeWarning(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/ClassCastException;)V
 HSPLandroid/os/BaseBundle;->unparcel()V
 HSPLandroid/os/BaseBundle;->writeToParcelInner(Landroid/os/Parcel;I)V
-HSPLandroid/os/BasicShellCommandHandler;-><init>()V
-HPLandroid/os/BasicShellCommandHandler;->exec(Landroid/os/Binder;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;)I
-PLandroid/os/BasicShellCommandHandler;->getNextArg()Ljava/lang/String;
-PLandroid/os/BasicShellCommandHandler;->getNextArgRequired()Ljava/lang/String;
-PLandroid/os/BasicShellCommandHandler;->getNextOption()Ljava/lang/String;
-PLandroid/os/BasicShellCommandHandler;->getOutPrintWriter()Ljava/io/PrintWriter;
-PLandroid/os/BasicShellCommandHandler;->getRawOutputStream()Ljava/io/OutputStream;
-PLandroid/os/BasicShellCommandHandler;->init(Landroid/os/Binder;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;I)V
 HSPLandroid/os/BatteryManager;-><init>(Landroid/content/Context;Lcom/android/internal/app/IBatteryStats;Landroid/os/IBatteryPropertiesRegistrar;)V
-HSPLandroid/os/BatteryManager;->getIntProperty(I)I
-HSPLandroid/os/BatteryManager;->getLongProperty(I)J
 HSPLandroid/os/BatteryManager;->isCharging()Z
-HSPLandroid/os/BatteryManager;->queryProperty(I)J
-HSPLandroid/os/BatteryManagerInternal;-><init>()V
 HSPLandroid/os/BatteryProperty;-><init>()V
-HSPLandroid/os/BatteryProperty;->getLong()J
-HSPLandroid/os/BatteryProperty;->readFromParcel(Landroid/os/Parcel;)V
-HPLandroid/os/BatteryProperty;->setLong(J)V
-PLandroid/os/BatteryProperty;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/os/BatteryStats$1;-><init>(Landroid/os/BatteryStats;)V
-PLandroid/os/BatteryStats$1;->compare(Landroid/os/BatteryStats$TimerEntry;Landroid/os/BatteryStats$TimerEntry;)I
-HPLandroid/os/BatteryStats$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroid/os/BatteryStats$ControllerActivityCounter;-><init>()V
-HSPLandroid/os/BatteryStats$DailyItem;-><init>()V
-HSPLandroid/os/BatteryStats$HistoryEventTracker;-><init>()V
-HSPLandroid/os/BatteryStats$HistoryEventTracker;->getStateForEvent(I)Ljava/util/HashMap;
-HSPLandroid/os/BatteryStats$HistoryEventTracker;->updateState(ILjava/lang/String;II)Z
-HSPLandroid/os/BatteryStats$HistoryItem;-><init>()V
-HSPLandroid/os/BatteryStats$HistoryItem;->clear()V
-PLandroid/os/BatteryStats$HistoryItem;->readFromParcel(Landroid/os/Parcel;)V
-HSPLandroid/os/BatteryStats$HistoryItem;->setTo(JBLandroid/os/BatteryStats$HistoryItem;)V
-HSPLandroid/os/BatteryStats$HistoryItem;->setTo(Landroid/os/BatteryStats$HistoryItem;)V
-HSPLandroid/os/BatteryStats$HistoryItem;->setToCommon(Landroid/os/BatteryStats$HistoryItem;)V
-HSPLandroid/os/BatteryStats$HistoryItem;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/os/BatteryStats$HistoryPrinter;-><init>()V
-HPLandroid/os/BatteryStats$HistoryPrinter;->printNextItem(Landroid/os/BatteryStats$HistoryItem;JZZ)Ljava/lang/String;
-HPLandroid/os/BatteryStats$HistoryPrinter;->printNextItem(Landroid/util/proto/ProtoOutputStream;Landroid/os/BatteryStats$HistoryItem;JZ)V
-HPLandroid/os/BatteryStats$HistoryPrinter;->printNextItem(Ljava/io/PrintWriter;Landroid/os/BatteryStats$HistoryItem;JZZ)V
-PLandroid/os/BatteryStats$HistoryPrinter;->reset()V
-HSPLandroid/os/BatteryStats$HistoryStepDetails;-><init>()V
-HSPLandroid/os/BatteryStats$HistoryStepDetails;->clear()V
-HPLandroid/os/BatteryStats$HistoryStepDetails;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/os/BatteryStats$HistoryStepDetails;->writeToParcel(Landroid/os/Parcel;)V
-HSPLandroid/os/BatteryStats$HistoryTag;-><init>()V
-HSPLandroid/os/BatteryStats$HistoryTag;->equals(Ljava/lang/Object;)Z
-HSPLandroid/os/BatteryStats$HistoryTag;->hashCode()I
-PLandroid/os/BatteryStats$HistoryTag;->readFromParcel(Landroid/os/Parcel;)V
-HSPLandroid/os/BatteryStats$HistoryTag;->setTo(Landroid/os/BatteryStats$HistoryTag;)V
-HSPLandroid/os/BatteryStats$HistoryTag;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/os/BatteryStats$LevelStepTracker;-><init>(I)V
-HSPLandroid/os/BatteryStats$LevelStepTracker;-><init>(I[J)V
-PLandroid/os/BatteryStats$LevelStepTracker;->addLevelSteps(IJJ)V
-HSPLandroid/os/BatteryStats$LevelStepTracker;->appendHex(JILjava/lang/StringBuilder;)V
-HSPLandroid/os/BatteryStats$LevelStepTracker;->clearTime()V
-HPLandroid/os/BatteryStats$LevelStepTracker;->computeTimeEstimate(JJ[I)J
-PLandroid/os/BatteryStats$LevelStepTracker;->computeTimePerLevel()J
-HSPLandroid/os/BatteryStats$LevelStepTracker;->decodeEntryAt(ILjava/lang/String;)V
-HSPLandroid/os/BatteryStats$LevelStepTracker;->encodeEntryAt(ILjava/lang/StringBuilder;)V
-HPLandroid/os/BatteryStats$LevelStepTracker;->getDurationAt(I)J
-HPLandroid/os/BatteryStats$LevelStepTracker;->getInitModeAt(I)I
-HPLandroid/os/BatteryStats$LevelStepTracker;->getLevelAt(I)I
-HPLandroid/os/BatteryStats$LevelStepTracker;->getModModeAt(I)I
-HSPLandroid/os/BatteryStats$LevelStepTracker;->init()V
-HSPLandroid/os/BatteryStats$LevelStepTracker;->readFromParcel(Landroid/os/Parcel;)V
-HSPLandroid/os/BatteryStats$LevelStepTracker;->writeToParcel(Landroid/os/Parcel;)V
-HSPLandroid/os/BatteryStats$LongCounterArray;-><init>()V
-HSPLandroid/os/BatteryStats$PackageChange;-><init>()V
-HSPLandroid/os/BatteryStats$Timer;-><init>()V
-HPLandroid/os/BatteryStats$Timer;->getCurrentDurationMsLocked(J)J
-HPLandroid/os/BatteryStats$Timer;->getMaxDurationMsLocked(J)J
-HPLandroid/os/BatteryStats$Timer;->getTotalDurationMsLocked(J)J
-PLandroid/os/BatteryStats$Timer;->isRunningLocked()Z
-PLandroid/os/BatteryStats$TimerEntry;-><init>(Ljava/lang/String;ILandroid/os/BatteryStats$Timer;J)V
-HSPLandroid/os/BatteryStats$Uid$Pid;-><init>(Landroid/os/BatteryStats$Uid;)V
-HSPLandroid/os/BatteryStats$Uid$Proc$ExcessivePower;-><init>()V
-HSPLandroid/os/BatteryStats$Uid$Proc;-><init>()V
-HSPLandroid/os/BatteryStats$Uid$Sensor;-><init>()V
-HSPLandroid/os/BatteryStats$Uid;-><init>()V
-HSPLandroid/os/BatteryStats;-><init>()V
-HPLandroid/os/BatteryStats;->computeWakeLock(Landroid/os/BatteryStats$Timer;JI)J
-HPLandroid/os/BatteryStats;->controllerActivityHasData(Landroid/os/BatteryStats$ControllerActivityCounter;I)Z
-HPLandroid/os/BatteryStats;->dumpCheckinLocked(Landroid/content/Context;Ljava/io/PrintWriter;IIZ)V
-HPLandroid/os/BatteryStats;->dumpCheckinLocked(Landroid/content/Context;Ljava/io/PrintWriter;Ljava/util/List;IJ)V
-HPLandroid/os/BatteryStats;->dumpControllerActivityLine(Ljava/io/PrintWriter;ILjava/lang/String;Ljava/lang/String;Landroid/os/BatteryStats$ControllerActivityCounter;I)V
-HPLandroid/os/BatteryStats;->dumpControllerActivityProto(Landroid/util/proto/ProtoOutputStream;JLandroid/os/BatteryStats$ControllerActivityCounter;I)V
-PLandroid/os/BatteryStats;->dumpDailyLevelStepSummary(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Landroid/os/BatteryStats$LevelStepTracker;Ljava/lang/StringBuilder;[I)V
-HPLandroid/os/BatteryStats;->dumpDailyPackageChanges(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/util/ArrayList;)V
-PLandroid/os/BatteryStats;->dumpDurationSteps(Landroid/util/proto/ProtoOutputStream;JLandroid/os/BatteryStats$LevelStepTracker;)V
-HPLandroid/os/BatteryStats;->dumpDurationSteps(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Landroid/os/BatteryStats$LevelStepTracker;Z)Z
-HPLandroid/os/BatteryStats;->dumpHistoryLocked(Ljava/io/PrintWriter;IJZ)V
-HPLandroid/os/BatteryStats;->dumpLine(Ljava/io/PrintWriter;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
-HPLandroid/os/BatteryStats;->dumpLineHeader(Ljava/io/PrintWriter;ILjava/lang/String;Ljava/lang/String;)V
-HPLandroid/os/BatteryStats;->dumpLocked(Landroid/content/Context;Ljava/io/PrintWriter;IIJ)V
-HPLandroid/os/BatteryStats;->dumpLocked(Landroid/content/Context;Ljava/io/PrintWriter;Ljava/lang/String;IIZ)V
-HPLandroid/os/BatteryStats;->dumpProtoAppsLocked(Landroid/util/proto/ProtoOutputStream;Lcom/android/internal/os/BatteryStatsHelper;Ljava/util/List;)V
-HPLandroid/os/BatteryStats;->dumpProtoHistoryLocked(Landroid/util/proto/ProtoOutputStream;IJ)V
-PLandroid/os/BatteryStats;->dumpProtoLocked(Landroid/content/Context;Ljava/io/FileDescriptor;Ljava/util/List;IJ)V
-HPLandroid/os/BatteryStats;->dumpProtoSystemLocked(Landroid/util/proto/ProtoOutputStream;Lcom/android/internal/os/BatteryStatsHelper;)V
-PLandroid/os/BatteryStats;->dumpTimeEstimate(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)Z
-HPLandroid/os/BatteryStats;->dumpTimer(Landroid/util/proto/ProtoOutputStream;JLandroid/os/BatteryStats$Timer;JI)V
-HPLandroid/os/BatteryStats;->dumpTimer(Ljava/io/PrintWriter;ILjava/lang/String;Ljava/lang/String;Landroid/os/BatteryStats$Timer;JI)V
-PLandroid/os/BatteryStats;->formatBytesLocked(J)Ljava/lang/String;
-HPLandroid/os/BatteryStats;->formatRatioLocked(JJ)Ljava/lang/String;
-HPLandroid/os/BatteryStats;->formatTimeMs(Ljava/lang/StringBuilder;J)V
-PLandroid/os/BatteryStats;->formatTimeMsNoSpace(Ljava/lang/StringBuilder;J)V
-HPLandroid/os/BatteryStats;->formatTimeRaw(Ljava/lang/StringBuilder;J)V
-HSPLandroid/os/BatteryStats;->mapToInternalProcessState(I)I
-HPLandroid/os/BatteryStats;->printBitDescriptions(Ljava/lang/StringBuilder;IILandroid/os/BatteryStats$HistoryTag;[Landroid/os/BatteryStats$BitDescription;Z)V
-HPLandroid/os/BatteryStats;->printControllerActivity(Ljava/io/PrintWriter;Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;Landroid/os/BatteryStats$ControllerActivityCounter;I)V
-PLandroid/os/BatteryStats;->printControllerActivityIfInteresting(Ljava/io/PrintWriter;Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;Landroid/os/BatteryStats$ControllerActivityCounter;I)V
-PLandroid/os/BatteryStats;->printSizeValue(Ljava/io/PrintWriter;J)V
-HPLandroid/os/BatteryStats;->printTimer(Ljava/io/PrintWriter;Ljava/lang/StringBuilder;Landroid/os/BatteryStats$Timer;JILjava/lang/String;Ljava/lang/String;)Z
-HPLandroid/os/BatteryStats;->printWakeLock(Ljava/lang/StringBuilder;Landroid/os/BatteryStats$Timer;JLjava/lang/String;ILjava/lang/String;)Ljava/lang/String;
-HPLandroid/os/BatteryStats;->printWakeLockCheckin(Ljava/lang/StringBuilder;Landroid/os/BatteryStats$Timer;JLjava/lang/String;ILjava/lang/String;)Ljava/lang/String;
-HPLandroid/os/BatteryStats;->printmAh(Ljava/io/PrintWriter;D)V
-PLandroid/os/BatteryStats;->roundUsToMs(J)J
-HSPLandroid/os/BatteryStatsManager;-><init>(Lcom/android/internal/app/IBatteryStats;)V
-HPLandroid/os/BatteryStatsManager;->getCellularBatteryStats()Landroid/os/connectivity/CellularBatteryStats;
-PLandroid/os/BatteryStatsManager;->getWifiBatteryStats()Landroid/os/connectivity/WifiBatteryStats;
-PLandroid/os/BatteryStatsManager;->noteFullWifiLockAcquiredFromSource(Landroid/os/WorkSource;)V
-PLandroid/os/BatteryStatsManager;->noteFullWifiLockReleasedFromSource(Landroid/os/WorkSource;)V
-PLandroid/os/BatteryStatsManager;->noteWifiMulticastDisabled(I)V
-PLandroid/os/BatteryStatsManager;->noteWifiMulticastEnabled(I)V
-PLandroid/os/BatteryStatsManager;->noteWifiOff()V
-HSPLandroid/os/BatteryStatsManager;->noteWifiOn()V
-PLandroid/os/BatteryStatsManager;->noteWifiRssiChanged(I)V
-HPLandroid/os/BatteryStatsManager;->noteWifiScanStartedFromSource(Landroid/os/WorkSource;)V
-HPLandroid/os/BatteryStatsManager;->noteWifiScanStoppedFromSource(Landroid/os/WorkSource;)V
-PLandroid/os/BatteryStatsManager;->noteWifiState(ILjava/lang/String;)V
-HPLandroid/os/BatteryStatsManager;->noteWifiSupplicantStateChanged(IZ)V
-HSPLandroid/os/BestClock;-><init>(Ljava/time/ZoneId;[Ljava/time/Clock;)V
-HSPLandroid/os/BestClock;->millis()J
-HSPLandroid/os/Binder$PropagateWorkSourceTransactListener;-><init>()V
-HSPLandroid/os/Binder$PropagateWorkSourceTransactListener;->onTransactEnded(Ljava/lang/Object;)V
-HSPLandroid/os/Binder$PropagateWorkSourceTransactListener;->onTransactStarted(Landroid/os/IBinder;I)Ljava/lang/Object;
-HSPLandroid/os/Binder$ProxyTransactListener;->onTransactStarted(Landroid/os/IBinder;II)Ljava/lang/Object;
 HSPLandroid/os/Binder;-><init>()V
 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
 HSPLandroid/os/Binder;->copyAllowBlocking(Landroid/os/IBinder;Landroid/os/IBinder;)V
-PLandroid/os/Binder;->defaultBlocking(Landroid/os/IBinder;)Landroid/os/IBinder;
-PLandroid/os/Binder;->doDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLandroid/os/Binder;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLandroid/os/Binder;->dump(Ljava/io/FileDescriptor;[Ljava/lang/String;)V
+HSPLandroid/os/Binder;->defaultBlocking(Landroid/os/IBinder;)Landroid/os/IBinder;
 HSPLandroid/os/Binder;->execTransact(IJJI)Z
 HSPLandroid/os/Binder;->execTransactInternal(IJJII)Z
 HSPLandroid/os/Binder;->getCallingUserHandle()Landroid/os/UserHandle;
 HSPLandroid/os/Binder;->getInterfaceDescriptor()Ljava/lang/String;
 HSPLandroid/os/Binder;->isBinderAlive()Z
-PLandroid/os/Binder;->isProxy(Landroid/os/IInterface;)Z
 HSPLandroid/os/Binder;->isTracingEnabled()Z
 HSPLandroid/os/Binder;->linkToDeath(Landroid/os/IBinder$DeathRecipient;I)V
 HSPLandroid/os/Binder;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/Binder;->pingBinder()Z
 HSPLandroid/os/Binder;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;
-HSPLandroid/os/Binder;->setObserver(Lcom/android/internal/os/BinderInternal$Observer;)V
-HSPLandroid/os/Binder;->setProxyTransactListener(Landroid/os/Binder$ProxyTransactListener;)V
-HSPLandroid/os/Binder;->setWarnOnBlocking(Z)V
-HSPLandroid/os/Binder;->setWorkSourceProvider(Lcom/android/internal/os/BinderInternal$WorkSourceProvider;)V
-PLandroid/os/Binder;->shellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
 HSPLandroid/os/Binder;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/os/Binder;->unlinkToDeath(Landroid/os/IBinder$DeathRecipient;I)Z
 HSPLandroid/os/Binder;->withCleanCallingIdentity(Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;)V
-PLandroid/os/BinderProxy$ProxyMap;->access$300(Landroid/os/BinderProxy$ProxyMap;)I
 HSPLandroid/os/BinderProxy$ProxyMap;->get(J)Landroid/os/BinderProxy;
 HSPLandroid/os/BinderProxy$ProxyMap;->hash(J)I
 HSPLandroid/os/BinderProxy$ProxyMap;->remove(II)V
 HSPLandroid/os/BinderProxy$ProxyMap;->set(JLandroid/os/BinderProxy;)V
-PLandroid/os/BinderProxy$ProxyMap;->size()I
 HSPLandroid/os/BinderProxy;-><init>(J)V
-PLandroid/os/BinderProxy;->dump(Ljava/io/FileDescriptor;[Ljava/lang/String;)V
-PLandroid/os/BinderProxy;->dumpAsync(Ljava/io/FileDescriptor;[Ljava/lang/String;)V
 HSPLandroid/os/BinderProxy;->getInstance(JJ)Landroid/os/BinderProxy;
-PLandroid/os/BinderProxy;->getProxyCount()I
 HSPLandroid/os/BinderProxy;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;
-HSPLandroid/os/BinderProxy;->sendDeathNotice(Landroid/os/IBinder$DeathRecipient;)V
-HSPLandroid/os/BinderProxy;->setTransactListener(Landroid/os/Binder$ProxyTransactListener;)V
+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/Build;->ensureFingerprintProperty()V
 HSPLandroid/os/Build;->getRadioVersion()Ljava/lang/String;
-HSPLandroid/os/Build;->getSerial()Ljava/lang/String;
-PLandroid/os/Build;->isBuildConsistent()Z
-PLandroid/os/Build;->joinListOrElse(Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/os/Build;->lambda$joinListOrElse$0(Ljava/lang/Object;)Ljava/lang/String;
 HSPLandroid/os/Bundle$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/Bundle;
 HSPLandroid/os/Bundle$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/os/Bundle$1;->newArray(I)[Landroid/os/Bundle;
-HPLandroid/os/Bundle$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/os/Bundle;-><init>()V
 HSPLandroid/os/Bundle;-><init>(I)V
 HSPLandroid/os/Bundle;-><init>(Landroid/os/Bundle;)V
-HPLandroid/os/Bundle;-><init>(Landroid/os/Parcel;I)V
+HSPLandroid/os/Bundle;-><init>(Landroid/os/Parcel;I)V
 HSPLandroid/os/Bundle;-><init>(Landroid/os/PersistableBundle;)V
 HSPLandroid/os/Bundle;-><init>(Z)V
 HSPLandroid/os/Bundle;->clear()V
 HSPLandroid/os/Bundle;->clone()Ljava/lang/Object;
 HSPLandroid/os/Bundle;->deepCopy()Landroid/os/Bundle;
-PLandroid/os/Bundle;->describeContents()I
-PLandroid/os/Bundle;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-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;->getByteArray(Ljava/lang/String;)[B
 HSPLandroid/os/Bundle;->getCharSequence(Ljava/lang/String;)Ljava/lang/CharSequence;
-PLandroid/os/Bundle;->getCharSequenceArray(Ljava/lang/String;)[Ljava/lang/CharSequence;
-HSPLandroid/os/Bundle;->getCharSequenceArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
-PLandroid/os/Bundle;->getFloat(Ljava/lang/String;)F
 HSPLandroid/os/Bundle;->getFloat(Ljava/lang/String;F)F
-HSPLandroid/os/Bundle;->getFloatArray(Ljava/lang/String;)[F
 HSPLandroid/os/Bundle;->getIntegerArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLandroid/os/Bundle;->getParcelable(Ljava/lang/String;)Landroid/os/Parcelable;
 HSPLandroid/os/Bundle;->getParcelableArray(Ljava/lang/String;)[Landroid/os/Parcelable;
 HSPLandroid/os/Bundle;->getParcelableArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLandroid/os/Bundle;->getSerializable(Ljava/lang/String;)Ljava/io/Serializable;
-HSPLandroid/os/Bundle;->getSparseParcelableArray(Ljava/lang/String;)Landroid/util/SparseArray;
 HSPLandroid/os/Bundle;->getStringArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
-HSPLandroid/os/Bundle;->hasFileDescriptors()Z
-HPLandroid/os/Bundle;->maybePrefillHasFds()V
+HSPLandroid/os/Bundle;->maybePrefillHasFds()V
 HSPLandroid/os/Bundle;->putAll(Landroid/os/Bundle;)V
 HSPLandroid/os/Bundle;->putBinder(Ljava/lang/String;Landroid/os/IBinder;)V
 HSPLandroid/os/Bundle;->putBundle(Ljava/lang/String;Landroid/os/Bundle;)V
-HPLandroid/os/Bundle;->putByte(Ljava/lang/String;B)V
 HSPLandroid/os/Bundle;->putByteArray(Ljava/lang/String;[B)V
 HSPLandroid/os/Bundle;->putCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)V
 HSPLandroid/os/Bundle;->putCharSequenceArray(Ljava/lang/String;[Ljava/lang/CharSequence;)V
-HPLandroid/os/Bundle;->putCharSequenceArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
 HSPLandroid/os/Bundle;->putFloat(Ljava/lang/String;F)V
-HSPLandroid/os/Bundle;->putFloatArray(Ljava/lang/String;[F)V
 HSPLandroid/os/Bundle;->putIntegerArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
 HSPLandroid/os/Bundle;->putParcelable(Ljava/lang/String;Landroid/os/Parcelable;)V
 HSPLandroid/os/Bundle;->putParcelableArray(Ljava/lang/String;[Landroid/os/Parcelable;)V
 HSPLandroid/os/Bundle;->putParcelableArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
-PLandroid/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
 HSPLandroid/os/Bundle;->putStringArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
@@ -16779,248 +8978,116 @@
 HSPLandroid/os/Bundle;->setClassLoader(Ljava/lang/ClassLoader;)V
 HSPLandroid/os/Bundle;->setDefusable(Landroid/os/Bundle;Z)Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->setDefusable(Z)V
-HPLandroid/os/Bundle;->toShortString()Ljava/lang/String;
 HSPLandroid/os/Bundle;->toString()Ljava/lang/String;
 HSPLandroid/os/Bundle;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/os/CancellationSignal$Transport;->cancel()V
+HSPLandroid/os/CancellationSignal$Transport;-><init>()V
+HSPLandroid/os/CancellationSignal$Transport;-><init>(Landroid/os/CancellationSignal$1;)V
 HSPLandroid/os/CancellationSignal;-><init>()V
-PLandroid/os/CancellationSignal;->cancel()V
-PLandroid/os/CancellationSignal;->createTransport()Landroid/os/ICancellationSignal;
+HSPLandroid/os/CancellationSignal;->cancel()V
+HSPLandroid/os/CancellationSignal;->createTransport()Landroid/os/ICancellationSignal;
 HSPLandroid/os/CancellationSignal;->fromTransport(Landroid/os/ICancellationSignal;)Landroid/os/CancellationSignal;
 HSPLandroid/os/CancellationSignal;->isCanceled()Z
 HSPLandroid/os/CancellationSignal;->setOnCancelListener(Landroid/os/CancellationSignal$OnCancelListener;)V
 HSPLandroid/os/CancellationSignal;->setRemote(Landroid/os/ICancellationSignal;)V
 HSPLandroid/os/CancellationSignal;->throwIfCanceled()V
 HSPLandroid/os/CancellationSignal;->waitForCancelFinishedLocked()V
-HSPLandroid/os/ChildZygoteProcess;-><init>(Landroid/net/LocalSocketAddress;I)V
-PLandroid/os/ChildZygoteProcess;->getPid()I
 HSPLandroid/os/ConditionVariable;-><init>()V
 HSPLandroid/os/ConditionVariable;-><init>(Z)V
 HSPLandroid/os/ConditionVariable;->block()V
 HSPLandroid/os/ConditionVariable;->block(J)Z
 HSPLandroid/os/ConditionVariable;->close()V
 HSPLandroid/os/ConditionVariable;->open()V
-PLandroid/os/CoolingDevice$1;-><init>()V
-PLandroid/os/CoolingDevice;-><clinit>()V
-HPLandroid/os/CoolingDevice;-><init>(JILjava/lang/String;)V
-PLandroid/os/CoolingDevice;->getName()Ljava/lang/String;
-PLandroid/os/CoolingDevice;->getType()I
-PLandroid/os/CoolingDevice;->getValue()J
-PLandroid/os/CoolingDevice;->isValidType(I)Z
-PLandroid/os/CoolingDevice;->toString()Ljava/lang/String;
-PLandroid/os/CpuUsageInfo;-><init>(JJ)V
 HSPLandroid/os/DeadObjectException;-><init>()V
-PLandroid/os/DeadObjectException;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/Debug$MemoryInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/Debug$MemoryInfo;
 HSPLandroid/os/Debug$MemoryInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/Debug$MemoryInfo$1;->newArray(I)[Landroid/os/Debug$MemoryInfo;
 HSPLandroid/os/Debug$MemoryInfo$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/os/Debug$MemoryInfo;-><init>()V
+HSPLandroid/os/Debug$MemoryInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/os/Debug$MemoryInfo;-><init>(Landroid/os/Parcel;Landroid/os/Debug$1;)V
 HSPLandroid/os/Debug$MemoryInfo;->getMemoryStats()Ljava/util/Map;
-PLandroid/os/Debug$MemoryInfo;->getOtherLabel(I)Ljava/lang/String;
+HSPLandroid/os/Debug$MemoryInfo;->getOtherLabel(I)Ljava/lang/String;
 HSPLandroid/os/Debug$MemoryInfo;->getOtherPrivate(I)I
 HSPLandroid/os/Debug$MemoryInfo;->getOtherPrivateClean(I)I
 HSPLandroid/os/Debug$MemoryInfo;->getOtherPrivateDirty(I)I
 HSPLandroid/os/Debug$MemoryInfo;->getOtherPss(I)I
-HPLandroid/os/Debug$MemoryInfo;->getOtherRss(I)I
-PLandroid/os/Debug$MemoryInfo;->getOtherSharedClean(I)I
-PLandroid/os/Debug$MemoryInfo;->getOtherSharedDirty(I)I
-PLandroid/os/Debug$MemoryInfo;->getOtherSwappablePss(I)I
-PLandroid/os/Debug$MemoryInfo;->getOtherSwappedOut(I)I
-HPLandroid/os/Debug$MemoryInfo;->getOtherSwappedOutPss(I)I
+HSPLandroid/os/Debug$MemoryInfo;->getOtherRss(I)I
+HSPLandroid/os/Debug$MemoryInfo;->getOtherSharedClean(I)I
+HSPLandroid/os/Debug$MemoryInfo;->getOtherSharedDirty(I)I
+HSPLandroid/os/Debug$MemoryInfo;->getOtherSwappablePss(I)I
+HSPLandroid/os/Debug$MemoryInfo;->getOtherSwappedOut(I)I
+HSPLandroid/os/Debug$MemoryInfo;->getOtherSwappedOutPss(I)I
 HSPLandroid/os/Debug$MemoryInfo;->getSummaryCode()I
-PLandroid/os/Debug$MemoryInfo;->getSummaryCodeRss()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryCodeRss()I
 HSPLandroid/os/Debug$MemoryInfo;->getSummaryGraphics()I
-PLandroid/os/Debug$MemoryInfo;->getSummaryGraphicsRss()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryGraphicsRss()I
 HSPLandroid/os/Debug$MemoryInfo;->getSummaryJavaHeap()I
-PLandroid/os/Debug$MemoryInfo;->getSummaryJavaHeapRss()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryJavaHeapRss()I
 HSPLandroid/os/Debug$MemoryInfo;->getSummaryNativeHeap()I
-PLandroid/os/Debug$MemoryInfo;->getSummaryNativeHeapRss()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryNativeHeapRss()I
 HSPLandroid/os/Debug$MemoryInfo;->getSummaryPrivateOther()I
 HSPLandroid/os/Debug$MemoryInfo;->getSummaryStack()I
-PLandroid/os/Debug$MemoryInfo;->getSummaryStackRss()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryStackRss()I
 HSPLandroid/os/Debug$MemoryInfo;->getSummarySystem()I
 HSPLandroid/os/Debug$MemoryInfo;->getSummaryTotalPss()I
 HSPLandroid/os/Debug$MemoryInfo;->getSummaryTotalSwap()I
-PLandroid/os/Debug$MemoryInfo;->getSummaryTotalSwapPss()I
-PLandroid/os/Debug$MemoryInfo;->getSummaryUnknownRss()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryTotalSwapPss()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryUnknownRss()I
 HSPLandroid/os/Debug$MemoryInfo;->getTotalPrivateClean()I
 HSPLandroid/os/Debug$MemoryInfo;->getTotalPrivateDirty()I
 HSPLandroid/os/Debug$MemoryInfo;->getTotalPss()I
-PLandroid/os/Debug$MemoryInfo;->getTotalRss()I
-PLandroid/os/Debug$MemoryInfo;->getTotalSharedClean()I
+HSPLandroid/os/Debug$MemoryInfo;->getTotalRss()I
+HSPLandroid/os/Debug$MemoryInfo;->getTotalSharedClean()I
 HSPLandroid/os/Debug$MemoryInfo;->getTotalSharedDirty()I
 HSPLandroid/os/Debug$MemoryInfo;->getTotalSwappablePss()I
 HSPLandroid/os/Debug$MemoryInfo;->getTotalSwappedOut()I
 HSPLandroid/os/Debug$MemoryInfo;->getTotalSwappedOutPss()I
-PLandroid/os/Debug$MemoryInfo;->getTotalUss()I
-HSPLandroid/os/Debug$MemoryInfo;->hasSwappedOutPss()Z
 HSPLandroid/os/Debug$MemoryInfo;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/os/Debug$MemoryInfo;->set(Landroid/os/Debug$MemoryInfo;)V
-HPLandroid/os/Debug$MemoryInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/Debug;->countInstancesOfClass(Ljava/lang/Class;)J
-HPLandroid/os/Debug;->dumpService(Ljava/lang/String;Ljava/io/FileDescriptor;[Ljava/lang/String;)Z
-HPLandroid/os/Debug;->fixTracePath(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/os/Debug;->getCaller([Ljava/lang/StackTraceElement;I)Ljava/lang/String;
-HSPLandroid/os/Debug;->getCallers(I)Ljava/lang/String;
-HPLandroid/os/Debug;->getRuntimeStats()Ljava/util/Map;
+HSPLandroid/os/Debug;->getMethodTracingMode()I
+HSPLandroid/os/Debug;->getVmFeatureList()[Ljava/lang/String;
 HSPLandroid/os/Debug;->isDebuggerConnected()Z
-HPLandroid/os/Debug;->startMethodTracingSampling(Ljava/lang/String;II)V
-HPLandroid/os/Debug;->stopMethodTracing()V
-HSPLandroid/os/Debug;->threadCpuTimeNanos()J
 HSPLandroid/os/Debug;->waitingForDebugger()Z
 HSPLandroid/os/DeviceIdleManager;-><init>(Landroid/content/Context;Landroid/os/IDeviceIdleController;)V
-HSPLandroid/os/DeviceIdleManager;->getService()Landroid/os/IDeviceIdleController;
-HSPLandroid/os/DeviceIdleManager;->isApplicationWhitelisted(Ljava/lang/String;)Z
-HSPLandroid/os/DropBoxManager$Entry$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/DropBoxManager$Entry;
-HSPLandroid/os/DropBoxManager$Entry$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/os/DropBoxManager$Entry;-><init>(Ljava/lang/String;J)V
-HSPLandroid/os/DropBoxManager$Entry;-><init>(Ljava/lang/String;JLandroid/os/ParcelFileDescriptor;I)V
-HPLandroid/os/DropBoxManager$Entry;-><init>(Ljava/lang/String;JLjava/io/File;I)V
-HSPLandroid/os/DropBoxManager$Entry;-><init>(Ljava/lang/String;JLjava/lang/String;)V
-PLandroid/os/DropBoxManager$Entry;-><init>(Ljava/lang/String;J[BI)V
-HSPLandroid/os/DropBoxManager$Entry;->close()V
-HSPLandroid/os/DropBoxManager$Entry;->getFlags()I
-HSPLandroid/os/DropBoxManager$Entry;->getInputStream()Ljava/io/InputStream;
-HSPLandroid/os/DropBoxManager$Entry;->getTag()Ljava/lang/String;
-HPLandroid/os/DropBoxManager$Entry;->getText(I)Ljava/lang/String;
-HSPLandroid/os/DropBoxManager$Entry;->getTimeMillis()J
-HPLandroid/os/DropBoxManager$Entry;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/DropBoxManager;-><init>(Landroid/content/Context;Lcom/android/internal/os/IDropBoxManagerService;)V
-PLandroid/os/DropBoxManager;->addFile(Ljava/lang/String;Ljava/io/File;I)V
-HSPLandroid/os/DropBoxManager;->addText(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/os/DropBoxManager;->getNextEntry(Ljava/lang/String;J)Landroid/os/DropBoxManager$Entry;
-HSPLandroid/os/DropBoxManager;->isTagEnabled(Ljava/lang/String;)Z
 HSPLandroid/os/Environment$UserEnvironment;-><init>(I)V
 HSPLandroid/os/Environment$UserEnvironment;->buildExternalStorageAppCacheDirs(Ljava/lang/String;)[Ljava/io/File;
-HSPLandroid/os/Environment$UserEnvironment;->buildExternalStorageAppDataDirs(Ljava/lang/String;)[Ljava/io/File;
 HSPLandroid/os/Environment$UserEnvironment;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File;
-HSPLandroid/os/Environment$UserEnvironment;->buildExternalStorageAppMediaDirs(Ljava/lang/String;)[Ljava/io/File;
-PLandroid/os/Environment$UserEnvironment;->buildExternalStorageAppObbDirs(Ljava/lang/String;)[Ljava/io/File;
 HSPLandroid/os/Environment$UserEnvironment;->buildExternalStoragePublicDirs(Ljava/lang/String;)[Ljava/io/File;
 HSPLandroid/os/Environment$UserEnvironment;->getExternalDirs()[Ljava/io/File;
-HSPLandroid/os/Environment;->buildExternalStorageAppDataDirs(Ljava/lang/String;)[Ljava/io/File;
-HSLandroid/os/Environment;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File;
-HSPLandroid/os/Environment;->buildExternalStorageAppMediaDirs(Ljava/lang/String;)[Ljava/io/File;
+HSPLandroid/os/Environment;->buildExternalStorageAppFilesDirs(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;
-HSPLandroid/os/Environment;->getApexDirectory()Ljava/io/File;
-HSPLandroid/os/Environment;->getDataAppDirectory(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/os/Environment;->getDataDirectory()Ljava/io/File;
-HSPLandroid/os/Environment;->getDataDirectory(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/os/Environment;->getDataMiscCeDirectory()Ljava/io/File;
-HPLandroid/os/Environment;->getDataPreloadsDirectory()Ljava/io/File;
-HPLandroid/os/Environment;->getDataPreloadsFileCacheDirectory()Ljava/io/File;
-HPLandroid/os/Environment;->getDataPreloadsFileCacheDirectory(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/os/Environment;->getDataProfilesDeDirectory(I)Ljava/io/File;
 HSPLandroid/os/Environment;->getDataProfilesDePackageDirectory(ILjava/lang/String;)Ljava/io/File;
-PLandroid/os/Environment;->getDataRefProfilesDePackageDirectory(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/os/Environment;->getDataSystemCeDirectory()Ljava/io/File;
-PLandroid/os/Environment;->getDataSystemCeDirectory(I)Ljava/io/File;
-HSPLandroid/os/Environment;->getDataSystemDeDirectory()Ljava/io/File;
-HSPLandroid/os/Environment;->getDataSystemDeDirectory(I)Ljava/io/File;
-HSPLandroid/os/Environment;->getDataSystemDirectory()Ljava/io/File;
-HSPLandroid/os/Environment;->getDataUserCeDirectory(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/os/Environment;->getDataUserCeDirectory(Ljava/lang/String;I)Ljava/io/File;
-HSPLandroid/os/Environment;->getDataUserCePackageDirectory(Ljava/lang/String;ILjava/lang/String;)Ljava/io/File;
-HSPLandroid/os/Environment;->getDataUserDeDirectory(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/os/Environment;->getDataUserDeDirectory(Ljava/lang/String;I)Ljava/io/File;
-HSPLandroid/os/Environment;->getDataUserDePackageDirectory(Ljava/lang/String;ILjava/lang/String;)Ljava/io/File;
-HSPLandroid/os/Environment;->getDataVendorDeDirectory(I)Ljava/io/File;
-HSPLandroid/os/Environment;->getDownloadCacheDirectory()Ljava/io/File;
 HSPLandroid/os/Environment;->getExternalStorageDirectory()Ljava/io/File;
-HSPLandroid/os/Environment;->getExternalStoragePublicDirectory(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/os/Environment;->getExternalStorageState()Ljava/lang/String;
 HSPLandroid/os/Environment;->getExternalStorageState(Ljava/io/File;)Ljava/lang/String;
-HSPLandroid/os/Environment;->getLegacyExternalStorageDirectory()Ljava/io/File;
-HSPLandroid/os/Environment;->getOdmDirectory()Ljava/io/File;
-HSPLandroid/os/Environment;->getOemDirectory()Ljava/io/File;
-HSPLandroid/os/Environment;->getPackageCacheDirectory()Ljava/io/File;
-HSPLandroid/os/Environment;->getProductDirectory()Ljava/io/File;
-HSPLandroid/os/Environment;->getRootDirectory()Ljava/io/File;
-HSPLandroid/os/Environment;->getStorageDirectory()Ljava/io/File;
-HSPLandroid/os/Environment;->getStorageState(Ljava/io/File;)Ljava/lang/String;
-HSPLandroid/os/Environment;->getSystemExtDirectory()Ljava/io/File;
 HSPLandroid/os/Environment;->getUserConfigDirectory(I)Ljava/io/File;
-HSPLandroid/os/Environment;->getUserSystemDirectory(I)Ljava/io/File;
-HSPLandroid/os/Environment;->getVendorDirectory()Ljava/io/File;
 HSPLandroid/os/Environment;->initForCurrentUser()V
 HSPLandroid/os/Environment;->isExternalStorageEmulated()Z
 HSPLandroid/os/Environment;->isExternalStorageEmulated(Ljava/io/File;)Z
-HPLandroid/os/Environment;->isExternalStorageLegacy()Z
-HPLandroid/os/Environment;->isExternalStorageLegacy(Ljava/io/File;)Z
-HSPLandroid/os/Environment;->isExternalStorageRemovable()Z
-HSPLandroid/os/Environment;->isExternalStorageRemovable(Ljava/io/File;)Z
-HSPLandroid/os/Environment;->setUserRequired(Z)V
 HSPLandroid/os/Environment;->throwIfUserRequired()V
 HSPLandroid/os/EventLogTags;->writeServiceManagerSlow(ILjava/lang/String;)V
+HSPLandroid/os/EventLogTags;->writeServiceManagerStats(III)V
 HSPLandroid/os/FactoryTest;->getMode()I
-PLandroid/os/FactoryTest;->isLongPressOnPowerOffEnabled()Z
-HPLandroid/os/FileBridge$FileBridgeOutputStream;-><init>(Landroid/os/ParcelFileDescriptor;)V
-HPLandroid/os/FileBridge$FileBridgeOutputStream;->close()V
-HPLandroid/os/FileBridge$FileBridgeOutputStream;->fsync()V
-HPLandroid/os/FileBridge$FileBridgeOutputStream;->write([BII)V
-HPLandroid/os/FileBridge$FileBridgeOutputStream;->writeCommandAndBlock(ILjava/lang/String;)V
-PLandroid/os/FileBridge;-><init>()V
-PLandroid/os/FileBridge;->forceClose()V
-PLandroid/os/FileBridge;->getClientSocket()Ljava/io/FileDescriptor;
-PLandroid/os/FileBridge;->isClosed()Z
-HPLandroid/os/FileBridge;->run()V
-PLandroid/os/FileBridge;->setTargetFile(Ljava/io/FileDescriptor;)V
 HSPLandroid/os/FileObserver$ObserverThread;-><init>()V
 HSPLandroid/os/FileObserver$ObserverThread;->onEvent(IILjava/lang/String;)V
 HSPLandroid/os/FileObserver$ObserverThread;->run()V
 HSPLandroid/os/FileObserver$ObserverThread;->startWatching(Ljava/util/List;ILandroid/os/FileObserver;)[I
-HPLandroid/os/FileObserver$ObserverThread;->stopWatching([I)V
 HSPLandroid/os/FileObserver;-><clinit>()V
-HSPLandroid/os/FileObserver;-><init>(Ljava/io/File;)V
 HSPLandroid/os/FileObserver;-><init>(Ljava/io/File;I)V
-HSPLandroid/os/FileObserver;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/FileObserver;-><init>(Ljava/lang/String;I)V
-HSPLandroid/os/FileObserver;-><init>(Ljava/util/List;)V
 HSPLandroid/os/FileObserver;-><init>(Ljava/util/List;I)V
-HPLandroid/os/FileObserver;->finalize()V
 HSPLandroid/os/FileObserver;->startWatching()V
-HPLandroid/os/FileObserver;->stopWatching()V
-PLandroid/os/FileUtils$1;-><init>()V
-HPLandroid/os/FileUtils$1;->compare(Ljava/io/File;Ljava/io/File;)I
-HPLandroid/os/FileUtils$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroid/os/FileUtils;->buildValidExtFilename(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/os/FileUtils;->buildValidFatFilename(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/os/FileUtils;->bytesToFile(Ljava/lang/String;[B)V
-PLandroid/os/FileUtils;->closeQuietly(Ljava/io/FileDescriptor;)V
-HSPLandroid/os/FileUtils;->closeQuietly(Ljava/lang/AutoCloseable;)V
 HSPLandroid/os/FileUtils;->contains(Ljava/io/File;Ljava/io/File;)Z
 HSPLandroid/os/FileUtils;->contains(Ljava/lang/String;Ljava/lang/String;)Z
-PLandroid/os/FileUtils;->contains([Ljava/io/File;Ljava/io/File;)Z
-PLandroid/os/FileUtils;->copy(Ljava/io/InputStream;Ljava/io/OutputStream;)J
-PLandroid/os/FileUtils;->copy(Ljava/io/InputStream;Ljava/io/OutputStream;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/os/FileUtils$ProgressListener;)J
-HPLandroid/os/FileUtils;->copyInternalUserspace(Ljava/io/InputStream;Ljava/io/OutputStream;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/os/FileUtils$ProgressListener;)J
-HSPLandroid/os/FileUtils;->createDir(Ljava/io/File;)Z
-HSPLandroid/os/FileUtils;->createDir(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/os/FileUtils;->deleteContents(Ljava/io/File;)Z
-HSPLandroid/os/FileUtils;->deleteContentsAndDir(Ljava/io/File;)Z
-HPLandroid/os/FileUtils;->deleteOlderFiles(Ljava/io/File;IJ)Z
-HSPLandroid/os/FileUtils;->isValidExtFilename(Ljava/lang/String;)Z
-HSPLandroid/os/FileUtils;->isValidExtFilenameChar(C)Z
-HSPLandroid/os/FileUtils;->isValidFatFilenameChar(C)Z
-HSPLandroid/os/FileUtils;->listFilesOrEmpty(Ljava/io/File;)[Ljava/io/File;
 HSPLandroid/os/FileUtils;->listOrEmpty(Ljava/io/File;)[Ljava/lang/String;
 HSPLandroid/os/FileUtils;->newFileOrNull(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/os/FileUtils;->readTextFile(Ljava/io/File;ILjava/lang/String;)Ljava/lang/String;
-PLandroid/os/FileUtils;->rewriteAfterRename(Ljava/io/File;Ljava/io/File;Ljava/io/File;)Ljava/io/File;
-PLandroid/os/FileUtils;->rewriteAfterRename(Ljava/io/File;Ljava/io/File;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/os/FileUtils;->rewriteAfterRename(Ljava/io/File;Ljava/io/File;[Ljava/lang/String;)[Ljava/lang/String;
-PLandroid/os/FileUtils;->roundStorageSize(J)J
-HSPLandroid/os/FileUtils;->setPermissions(Ljava/io/File;III)I
-HSPLandroid/os/FileUtils;->setPermissions(Ljava/io/FileDescriptor;III)I
 HSPLandroid/os/FileUtils;->setPermissions(Ljava/lang/String;III)I
-HSPLandroid/os/FileUtils;->stringToFile(Ljava/io/File;Ljava/lang/String;)V
-HSPLandroid/os/FileUtils;->stringToFile(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/os/FileUtils;->sync(Ljava/io/FileOutputStream;)Z
 HSPLandroid/os/FileUtils;->translateModePfdToPosix(I)I
-HSPLandroid/os/FileUtils;->translateModePosixToPfd(I)I
-HSPLandroid/os/FileUtils;->translateModeStringToPosix(Ljava/lang/String;)I
 HSPLandroid/os/FileUtils;->trimFilename(Ljava/lang/StringBuilder;I)V
 HSPLandroid/os/GraphicsEnvironment;->checkAngleWhitelist(Landroid/content/Context;Landroid/os/Bundle;Ljava/lang/String;)Z
 HSPLandroid/os/GraphicsEnvironment;->chooseDriver(Landroid/content/Context;Landroid/os/Bundle;Landroid/content/pm/PackageManager;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)Z
@@ -17038,9 +9105,6 @@
 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;->showAngleInUseDialogBox(Landroid/content/Context;)V
-HSPLandroid/os/Handler$BlockingRunnable;-><init>(Ljava/lang/Runnable;)V
-HSPLandroid/os/Handler$BlockingRunnable;->postAndWait(Landroid/os/Handler;J)Z
-HSPLandroid/os/Handler$BlockingRunnable;->run()V
 HSPLandroid/os/Handler$MessengerImpl;-><init>(Landroid/os/Handler;)V
 HSPLandroid/os/Handler$MessengerImpl;-><init>(Landroid/os/Handler;Landroid/os/Handler$1;)V
 HSPLandroid/os/Handler$MessengerImpl;->send(Landroid/os/Message;)V
@@ -17053,22 +9117,17 @@
 HSPLandroid/os/Handler;-><init>(Z)V
 HSPLandroid/os/Handler;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
 HSPLandroid/os/Handler;->dispatchMessage(Landroid/os/Message;)V
-PLandroid/os/Handler;->dump(Landroid/util/Printer;Ljava/lang/String;)V
 HSPLandroid/os/Handler;->enqueueMessage(Landroid/os/MessageQueue;Landroid/os/Message;J)Z
-HSPLandroid/os/Handler;->executeOrSendMessage(Landroid/os/Message;)Z
 HSPLandroid/os/Handler;->getIMessenger()Landroid/os/IMessenger;
 HSPLandroid/os/Handler;->getLooper()Landroid/os/Looper;
 HSPLandroid/os/Handler;->getMain()Landroid/os/Handler;
-PLandroid/os/Handler;->getMessageName(Landroid/os/Message;)Ljava/lang/String;
 HSPLandroid/os/Handler;->getPostMessage(Ljava/lang/Runnable;)Landroid/os/Message;
 HSPLandroid/os/Handler;->getPostMessage(Ljava/lang/Runnable;Ljava/lang/Object;)Landroid/os/Message;
-HPLandroid/os/Handler;->getTraceName(Landroid/os/Message;)Ljava/lang/String;
 HSPLandroid/os/Handler;->handleCallback(Landroid/os/Message;)V
 HSPLandroid/os/Handler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/os/Handler;->hasCallbacks(Ljava/lang/Runnable;)Z
 HSPLandroid/os/Handler;->hasMessages(I)Z
 HSPLandroid/os/Handler;->hasMessages(ILjava/lang/Object;)Z
-HSPLandroid/os/Handler;->hasMessagesOrCallbacks()Z
 HSPLandroid/os/Handler;->obtainMessage()Landroid/os/Message;
 HSPLandroid/os/Handler;->obtainMessage(I)Landroid/os/Message;
 HSPLandroid/os/Handler;->obtainMessage(III)Landroid/os/Message;
@@ -17076,17 +9135,15 @@
 HSPLandroid/os/Handler;->obtainMessage(ILjava/lang/Object;)Landroid/os/Message;
 HSPLandroid/os/Handler;->post(Ljava/lang/Runnable;)Z
 HSPLandroid/os/Handler;->postAtFrontOfQueue(Ljava/lang/Runnable;)Z
-PLandroid/os/Handler;->postAtTime(Ljava/lang/Runnable;J)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;J)Z
-HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;Ljava/lang/Object;J)Z
 HSPLandroid/os/Handler;->removeCallbacks(Ljava/lang/Runnable;)V
 HSPLandroid/os/Handler;->removeCallbacksAndMessages(Ljava/lang/Object;)V
 HSPLandroid/os/Handler;->removeMessages(I)V
 HSPLandroid/os/Handler;->removeMessages(ILjava/lang/Object;)V
-HSPLandroid/os/Handler;->runWithScissors(Ljava/lang/Runnable;J)Z
 HSPLandroid/os/Handler;->sendEmptyMessage(I)Z
-PLandroid/os/Handler;->sendEmptyMessageAtTime(IJ)Z
+HSPLandroid/os/Handler;->sendEmptyMessageAtTime(IJ)Z
 HSPLandroid/os/Handler;->sendEmptyMessageDelayed(IJ)Z
 HSPLandroid/os/Handler;->sendMessage(Landroid/os/Message;)Z
 HSPLandroid/os/Handler;->sendMessageAtFrontOfQueue(Landroid/os/Message;)Z
@@ -17098,117 +9155,32 @@
 HSPLandroid/os/HandlerThread;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/HandlerThread;-><init>(Ljava/lang/String;I)V
 HSPLandroid/os/HandlerThread;->getLooper()Landroid/os/Looper;
-HSPLandroid/os/HandlerThread;->getThreadHandler()Landroid/os/Handler;
-HSPLandroid/os/HandlerThread;->getThreadId()I
 HSPLandroid/os/HandlerThread;->onLooperPrepared()V
 HSPLandroid/os/HandlerThread;->quit()Z
 HSPLandroid/os/HandlerThread;->quitSafely()Z
 HSPLandroid/os/HandlerThread;->run()V
-HPLandroid/os/HardwarePropertiesManager;-><init>(Landroid/content/Context;Landroid/os/IHardwarePropertiesManager;)V
-HSPLandroid/os/HidlSupport;->interfacesEqual(Landroid/os/IHwInterface;Ljava/lang/Object;)Z
 HSPLandroid/os/HwBinder;-><init>()V
 HSPLandroid/os/HwBinder;->getService(Ljava/lang/String;Ljava/lang/String;)Landroid/os/IHwBinder;
 HSPLandroid/os/HwBlob;-><init>(I)V
-HPLandroid/os/HwBlob;->wrapArray([B)[Ljava/lang/Byte;
-HSPLandroid/os/HwBlob;->wrapArray([I)[Ljava/lang/Integer;
+HSPLandroid/os/HwBlob;->wrapArray([B)[Ljava/lang/Byte;
 HSPLandroid/os/HwParcel;-><init>()V
 HSPLandroid/os/HwParcel;-><init>(Z)V
-HSPLandroid/os/HwParcel;->readInt32Vector()Ljava/util/ArrayList;
-PLandroid/os/HwParcel;->readInt8Vector()Ljava/util/ArrayList;
+HSPLandroid/os/HwParcel;->readInt8Vector()Ljava/util/ArrayList;
 HSPLandroid/os/HwParcel;->readStringVector()Ljava/util/ArrayList;
-PLandroid/os/HwParcel;->writeInt16Vector(Ljava/util/ArrayList;)V
-HSPLandroid/os/HwParcel;->writeInt32Vector(Ljava/util/ArrayList;)V
-HPLandroid/os/HwParcel;->writeInt8Vector(Ljava/util/ArrayList;)V
 HSPLandroid/os/HwParcel;->writeStringVector(Ljava/util/ArrayList;)V
 HSPLandroid/os/HwRemoteBinder;-><init>()V
 HSPLandroid/os/HwRemoteBinder;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IHwInterface;
-PLandroid/os/HwRemoteBinder;->sendDeathNotice(Landroid/os/IHwBinder$DeathRecipient;J)V
 HSPLandroid/os/IBatteryPropertiesRegistrar$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/os/IBatteryPropertiesRegistrar$Stub$Proxy;->getProperty(ILandroid/os/BatteryProperty;)I
-HSPLandroid/os/IBatteryPropertiesRegistrar$Stub;-><init>()V
 HSPLandroid/os/IBatteryPropertiesRegistrar$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IBatteryPropertiesRegistrar;
-PLandroid/os/IBatteryPropertiesRegistrar$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/os/IBatteryPropertiesRegistrar$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/os/ICancellationSignal$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/os/IBinder$DeathRecipient;->binderDied(Landroid/os/IBinder;)V
+HSPLandroid/os/IBinder;->getSuggestedMaxIpcSizeBytes()I
+HSPLandroid/os/ICancellationSignal$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/os/ICancellationSignal$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/os/ICancellationSignal$Stub$Proxy;->cancel()V
-PLandroid/os/ICancellationSignal$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/os/ICancellationSignal$Stub;-><init>()V
 HSPLandroid/os/ICancellationSignal$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/ICancellationSignal;
-PLandroid/os/ICancellationSignal$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/IDeviceIdentifiersPolicyService$Stub$Proxy;->getSerialForPackage(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/os/IDeviceIdentifiersPolicyService$Stub;-><init>()V
 HSPLandroid/os/IDeviceIdentifiersPolicyService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IDeviceIdentifiersPolicyService;
-PLandroid/os/IDeviceIdentifiersPolicyService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/os/IDeviceIdentifiersPolicyService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/os/IDeviceIdleController$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/os/IDeviceIdleController$Stub$Proxy;->addPowerSaveTempWhitelistApp(Ljava/lang/String;JILjava/lang/String;)V
-HPLandroid/os/IDeviceIdleController$Stub$Proxy;->getFullPowerWhitelist()[Ljava/lang/String;
-HPLandroid/os/IDeviceIdleController$Stub$Proxy;->getSystemPowerWhitelist()[Ljava/lang/String;
-HPLandroid/os/IDeviceIdleController$Stub$Proxy;->getSystemPowerWhitelistExceptIdle()[Ljava/lang/String;
-HSPLandroid/os/IDeviceIdleController$Stub$Proxy;->isPowerSaveWhitelistApp(Ljava/lang/String;)Z
-HSPLandroid/os/IDeviceIdleController$Stub;-><init>()V
 HSPLandroid/os/IDeviceIdleController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IDeviceIdleController;
-PLandroid/os/IDeviceIdleController$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/os/IDeviceIdleController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/os/IDumpstate$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/IDumpstate$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/os/IDumpstate$Stub$Proxy;->startBugreport(ILjava/lang/String;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;ILandroid/os/IDumpstateListener;)V
-HSPLandroid/os/IDumpstate$Stub;-><init>()V
-PLandroid/os/IDumpstate$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IDumpstate;
-PLandroid/os/IDumpstate$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/os/IDumpstateListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/IDumpstateListener$Stub$Proxy;->onFinished()V
-HPLandroid/os/IDumpstateListener$Stub$Proxy;->onProgress(I)V
-PLandroid/os/IDumpstateListener$Stub;-><init>()V
-PLandroid/os/IDumpstateListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/os/IDumpstateListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IDumpstateListener;
-PLandroid/os/IDumpstateListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/IExternalVibratorService$Stub;-><init>()V
-PLandroid/os/IExternalVibratorService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/IHardwarePropertiesManager$Stub;-><init>()V
-HPLandroid/os/IHardwarePropertiesManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IHardwarePropertiesManager;
-PLandroid/os/IHardwarePropertiesManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/os/IIncidentAuthListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/IIncidentAuthListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/os/IIncidentAuthListener$Stub$Proxy;->onReportDenied()V
-PLandroid/os/IIncidentAuthListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IIncidentAuthListener;
-HSPLandroid/os/IIncidentCompanion$Stub;-><init>()V
-HSPLandroid/os/IIncidentCompanion$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IIncidentCompanion;
-HPLandroid/os/IIncidentCompanion$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/os/IIncidentManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/IIncidentManager$Stub$Proxy;->deleteIncidentReports(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/os/IIncidentManager$Stub$Proxy;->getIncidentReport(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/os/IncidentManager$IncidentReport;
-PLandroid/os/IIncidentManager$Stub$Proxy;->getIncidentReportList(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
-PLandroid/os/IIncidentManager$Stub$Proxy;->systemRunning()V
-PLandroid/os/IIncidentManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IIncidentManager;
-HSPLandroid/os/IInstalld$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/IInstalld$Stub$Proxy;->clearAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
-HSPLandroid/os/IInstalld$Stub$Proxy;->clearAppProfiles(Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/os/IInstalld$Stub$Proxy;->copySystemProfile(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
-HSPLandroid/os/IInstalld$Stub$Proxy;->createAppData(Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;I)J
-PLandroid/os/IInstalld$Stub$Proxy;->createProfileSnapshot(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-PLandroid/os/IInstalld$Stub$Proxy;->createUserData(Ljava/lang/String;III)V
-PLandroid/os/IInstalld$Stub$Proxy;->destroyAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
-PLandroid/os/IInstalld$Stub$Proxy;->destroyProfileSnapshot(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/os/IInstalld$Stub$Proxy;->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;)V
-HSPLandroid/os/IInstalld$Stub$Proxy;->fixupAppData(Ljava/lang/String;I)V
-HPLandroid/os/IInstalld$Stub$Proxy;->getAppSize(Ljava/lang/String;[Ljava/lang/String;III[J[Ljava/lang/String;)[J
-PLandroid/os/IInstalld$Stub$Proxy;->getExternalSize(Ljava/lang/String;II[I)[J
-HPLandroid/os/IInstalld$Stub$Proxy;->getUserSize(Ljava/lang/String;II[I)[J
-PLandroid/os/IInstalld$Stub$Proxy;->hashSecondaryDexFile(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;I)[B
-HSPLandroid/os/IInstalld$Stub$Proxy;->invalidateMounts()V
-PLandroid/os/IInstalld$Stub$Proxy;->isQuotaSupported(Ljava/lang/String;)Z
-PLandroid/os/IInstalld$Stub$Proxy;->linkNativeLibraryDirectory(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
-PLandroid/os/IInstalld$Stub$Proxy;->markBootComplete(Ljava/lang/String;)V
-PLandroid/os/IInstalld$Stub$Proxy;->mergeProfiles(ILjava/lang/String;Ljava/lang/String;)Z
-PLandroid/os/IInstalld$Stub$Proxy;->migrateLegacyObbData()V
-PLandroid/os/IInstalld$Stub$Proxy;->moveAb(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/os/IInstalld$Stub$Proxy;->prepareAppProfile(Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-PLandroid/os/IInstalld$Stub$Proxy;->reconcileSecondaryDexFile(Ljava/lang/String;Ljava/lang/String;I[Ljava/lang/String;Ljava/lang/String;I)Z
-PLandroid/os/IInstalld$Stub$Proxy;->rmPackageDir(Ljava/lang/String;)V
-PLandroid/os/IInstalld$Stub$Proxy;->rmdex(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/os/IInstalld$Stub$Proxy;->setAppQuota(Ljava/lang/String;IIJ)V
-HSPLandroid/os/IInstalld$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IInstalld;
 HSPLandroid/os/IMessenger$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/os/IMessenger$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/os/IMessenger$Stub$Proxy;->send(Landroid/os/Message;)V
@@ -17216,211 +9188,63 @@
 HSPLandroid/os/IMessenger$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/os/IMessenger$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IMessenger;
 HSPLandroid/os/IMessenger$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/os/INetworkActivityListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/INetworkActivityListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/os/INetworkActivityListener$Stub$Proxy;->onNetworkActive()V
-PLandroid/os/INetworkActivityListener$Stub;-><init>()V
-PLandroid/os/INetworkActivityListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/os/INetworkActivityListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/INetworkActivityListener;
-HPLandroid/os/INetworkActivityListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/os/INetworkManagementService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/os/INetworkManagementService$Stub$Proxy;->isNetworkActive()Z
-PLandroid/os/INetworkManagementService$Stub$Proxy;->registerNetworkActivityListener(Landroid/os/INetworkActivityListener;)V
 HSPLandroid/os/INetworkManagementService$Stub$Proxy;->setUidCleartextNetworkPolicy(II)V
-HSPLandroid/os/INetworkManagementService$Stub;-><init>()V
 HSPLandroid/os/INetworkManagementService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/INetworkManagementService;
-PLandroid/os/INetworkManagementService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/os/INetworkManagementService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/IPermissionController$Stub;-><init>()V
-PLandroid/os/IPermissionController$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/os/IPermissionController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/os/IPowerManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/os/IPowerManager$Stub$Proxy;->acquireWakeLock(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;)V
-HPLandroid/os/IPowerManager$Stub$Proxy;->getPowerSaveState(I)Landroid/os/PowerSaveState;
 HSPLandroid/os/IPowerManager$Stub$Proxy;->isDeviceIdleMode()Z
 HSPLandroid/os/IPowerManager$Stub$Proxy;->isInteractive()Z
-HSPLandroid/os/IPowerManager$Stub$Proxy;->isLightDeviceIdleMode()Z
 HSPLandroid/os/IPowerManager$Stub$Proxy;->isPowerSaveMode()Z
 HSPLandroid/os/IPowerManager$Stub$Proxy;->releaseWakeLock(Landroid/os/IBinder;I)V
-HSPLandroid/os/IPowerManager$Stub$Proxy;->setDynamicPowerSaveHint(ZI)Z
-HSPLandroid/os/IPowerManager$Stub$Proxy;->updateWakeLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;)V
-HPLandroid/os/IPowerManager$Stub$Proxy;->userActivity(JII)V
-HPLandroid/os/IPowerManager$Stub$Proxy;->wakeUp(JILjava/lang/String;Ljava/lang/String;)V
-HSPLandroid/os/IPowerManager$Stub;-><init>()V
 HSPLandroid/os/IPowerManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IPowerManager;
-PLandroid/os/IPowerManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/os/IPowerManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/IProcessInfoService$Stub;-><init>()V
-PLandroid/os/IProcessInfoService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/os/IProcessInfoService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/IProgressListener$Stub;-><init>()V
-HSPLandroid/os/IProgressListener$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/os/IRecoverySystem$Stub;-><init>()V
-PLandroid/os/IRecoverySystem$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/os/IRemoteCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/os/IRemoteCallback$Stub$Proxy;->sendResult(Landroid/os/Bundle;)V
 HSPLandroid/os/IRemoteCallback$Stub;-><init>()V
-PLandroid/os/IRemoteCallback$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/os/IRemoteCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IRemoteCallback;
-PLandroid/os/IRemoteCallback$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/os/IRemoteCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/ISchedulingPolicyService$Stub;-><init>()V
-PLandroid/os/ISchedulingPolicyService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/os/ISchedulingPolicyService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/os/IServiceManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/os/IServiceManager$Stub$Proxy;->addService(Ljava/lang/String;Landroid/os/IBinder;ZI)V
 HSPLandroid/os/IServiceManager$Stub$Proxy;->checkService(Ljava/lang/String;)Landroid/os/IBinder;
 HSPLandroid/os/IServiceManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IServiceManager;
-HSPLandroid/os/IStatsCompanionService$Stub;-><init>()V
-PLandroid/os/IStatsCompanionService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/os/IStatsCompanionService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/IStatsd$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/IStatsd$Stub$Proxy;->addConfiguration(J[BLjava/lang/String;)V
-HSPLandroid/os/IStatsd$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/os/IStatsd$Stub$Proxy;->getData(JLjava/lang/String;)[B
-PLandroid/os/IStatsd$Stub$Proxy;->getMetadata(Ljava/lang/String;)[B
-HPLandroid/os/IStatsd$Stub$Proxy;->getRegisteredExperimentIds()[J
-HPLandroid/os/IStatsd$Stub$Proxy;->informAlarmForSubscriberTriggeringFired()V
-HSPLandroid/os/IStatsd$Stub$Proxy;->informAllUidData(Landroid/os/ParcelFileDescriptor;)V
-PLandroid/os/IStatsd$Stub$Proxy;->informAnomalyAlarmFired()V
-HPLandroid/os/IStatsd$Stub$Proxy;->informOnePackage(Ljava/lang/String;IJLjava/lang/String;Ljava/lang/String;)V
-HPLandroid/os/IStatsd$Stub$Proxy;->informPollAlarmFired()V
-PLandroid/os/IStatsd$Stub$Proxy;->removeActiveConfigsChangedOperation(Ljava/lang/String;)V
-PLandroid/os/IStatsd$Stub$Proxy;->sendAppBreadcrumbAtom(II)V
-PLandroid/os/IStatsd$Stub$Proxy;->setActiveConfigsChangedOperation(Landroid/os/IBinder;Ljava/lang/String;)[J
-HPLandroid/os/IStatsd$Stub$Proxy;->setDataFetchOperation(JLandroid/os/IBinder;Ljava/lang/String;)V
-HSPLandroid/os/IStatsd$Stub$Proxy;->statsCompanionReady()V
-HSPLandroid/os/IStatsd$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IStatsd;
-HSPLandroid/os/IStoraged$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/IStoraged$Stub$Proxy;->getRecentPerf()I
-PLandroid/os/IStoraged$Stub$Proxy;->onUserStarted(I)V
-HSPLandroid/os/IStoraged$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IStoraged;
-PLandroid/os/ISystemUpdateManager$Stub$Proxy;->retrieveSystemUpdateInfo()Landroid/os/Bundle;
-HPLandroid/os/ISystemUpdateManager$Stub$Proxy;->updateSystemUpdateInfo(Landroid/os/PersistableBundle;)V
-HSPLandroid/os/ISystemUpdateManager$Stub;-><init>()V
-HSPLandroid/os/ISystemUpdateManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/ISystemUpdateManager;
-PLandroid/os/ISystemUpdateManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/os/ISystemUpdateManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/os/IThermalEventListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/IThermalEventListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/os/IThermalEventListener$Stub$Proxy;->notifyThrottling(Landroid/os/Temperature;)V
-HSPLandroid/os/IThermalEventListener$Stub;-><init>()V
-HSPLandroid/os/IThermalEventListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/os/IThermalEventListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IThermalEventListener;
-HPLandroid/os/IThermalEventListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/IThermalService$Stub$Proxy;->getCurrentThermalStatus()I
-HSPLandroid/os/IThermalService$Stub;-><init>()V
+HSPLandroid/os/IStatsManagerService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IStatsManagerService;
 HSPLandroid/os/IThermalService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IThermalService;
-PLandroid/os/IThermalService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/os/IThermalStatusListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/IThermalStatusListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/os/IThermalStatusListener$Stub$Proxy;->onStatusChange(I)V
-HSPLandroid/os/IThermalStatusListener$Stub;-><init>()V
-HSPLandroid/os/IThermalStatusListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/os/IThermalStatusListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IThermalStatusListener;
-PLandroid/os/IUpdateEngine$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/IUpdateEngine$Stub$Proxy;->bind(Landroid/os/IUpdateEngineCallback;)Z
-PLandroid/os/IUpdateEngine$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IUpdateEngine;
-PLandroid/os/IUpdateEngineCallback$Stub;-><init>()V
-PLandroid/os/IUpdateEngineCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/os/IUpdateEngineCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/IUpdateLock$Stub;-><init>()V
-PLandroid/os/IUpdateLock$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/os/IUserManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/os/IUserManager$Stub$Proxy;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
 HSPLandroid/os/IUserManager$Stub$Proxy;->getProfileIds(IZ)[I
-HSPLandroid/os/IUserManager$Stub$Proxy;->getProfileParent(I)Landroid/content/pm/UserInfo;
 HSPLandroid/os/IUserManager$Stub$Proxy;->getProfiles(IZ)Ljava/util/List;
-HSPLandroid/os/IUserManager$Stub$Proxy;->getUserBadgeColorResId(I)I
-HSPLandroid/os/IUserManager$Stub$Proxy;->getUserBadgeLabelResId(I)I
-HPLandroid/os/IUserManager$Stub$Proxy;->getUserBadgeNoBackgroundResId(I)I
-HSPLandroid/os/IUserManager$Stub$Proxy;->getUserCreationTime(I)J
-HSPLandroid/os/IUserManager$Stub$Proxy;->getUserHandle(I)I
-HSPLandroid/os/IUserManager$Stub$Proxy;->getUserIcon(I)Landroid/os/ParcelFileDescriptor;
-HSPLandroid/os/IUserManager$Stub$Proxy;->getUserIconBadgeResId(I)I
-HSPLandroid/os/IUserManager$Stub$Proxy;->getUserInfo(I)Landroid/content/pm/UserInfo;
-HSPLandroid/os/IUserManager$Stub$Proxy;->getUserName()Ljava/lang/String;
-HSPLandroid/os/IUserManager$Stub$Proxy;->getUserRestrictionSources(Ljava/lang/String;I)Ljava/util/List;
-HSPLandroid/os/IUserManager$Stub$Proxy;->getUserRestrictions(I)Landroid/os/Bundle;
 HSPLandroid/os/IUserManager$Stub$Proxy;->getUserSerialNumber(I)I
-HSPLandroid/os/IUserManager$Stub$Proxy;->getUserStartRealtime()J
-HSPLandroid/os/IUserManager$Stub$Proxy;->getUserUnlockRealtime()J
 HSPLandroid/os/IUserManager$Stub$Proxy;->getUsers(ZZZ)Ljava/util/List;
-HSPLandroid/os/IUserManager$Stub$Proxy;->hasBadge(I)Z
-HSPLandroid/os/IUserManager$Stub$Proxy;->hasBaseUserRestriction(Ljava/lang/String;I)Z
 HSPLandroid/os/IUserManager$Stub$Proxy;->hasUserRestriction(Ljava/lang/String;I)Z
 HSPLandroid/os/IUserManager$Stub$Proxy;->isDemoUser(I)Z
 HSPLandroid/os/IUserManager$Stub$Proxy;->isManagedProfile(I)Z
 HSPLandroid/os/IUserManager$Stub$Proxy;->isProfile(I)Z
-HSPLandroid/os/IUserManager$Stub$Proxy;->isQuietModeEnabled(I)Z
-HSPLandroid/os/IUserManager$Stub$Proxy;->isRestricted()Z
 HSPLandroid/os/IUserManager$Stub$Proxy;->isUserRunning(I)Z
 HSPLandroid/os/IUserManager$Stub$Proxy;->isUserUnlocked(I)Z
 HSPLandroid/os/IUserManager$Stub$Proxy;->isUserUnlockingOrUnlocked(I)Z
-HSPLandroid/os/IUserManager$Stub;-><init>()V
 HSPLandroid/os/IUserManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IUserManager;
-PLandroid/os/IUserManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/os/IUserManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/IUserRestrictionsListener$Stub;-><init>()V
-HSPLandroid/os/IVibratorService$Stub$Proxy;->hasVibrator()Z
-HPLandroid/os/IVibratorService$Stub$Proxy;->vibrate(ILjava/lang/String;Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;Ljava/lang/String;Landroid/os/IBinder;)V
-HSPLandroid/os/IVibratorService$Stub;-><init>()V
+HSPLandroid/os/IVibratorService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/os/IVibratorService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IVibratorService;
-PLandroid/os/IVibratorService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/IVold$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/IVold$Stub$Proxy;->abortIdleMaint(Landroid/os/IVoldTaskListener;)V
-PLandroid/os/IVold$Stub$Proxy;->commitChanges()V
-PLandroid/os/IVold$Stub$Proxy;->fdeClearPassword()V
-PLandroid/os/IVold$Stub$Proxy;->fdeGetPassword()Ljava/lang/String;
-HSPLandroid/os/IVold$Stub$Proxy;->fstrim(ILandroid/os/IVoldTaskListener;)V
-PLandroid/os/IVold$Stub$Proxy;->mkdirs(Ljava/lang/String;)V
-PLandroid/os/IVold$Stub$Proxy;->monitor()V
-PLandroid/os/IVold$Stub$Proxy;->mount(Ljava/lang/String;IILandroid/os/IVoldMountCallback;)V
-PLandroid/os/IVold$Stub$Proxy;->mountAppFuse(II)Ljava/io/FileDescriptor;
-HSPLandroid/os/IVold$Stub$Proxy;->needsCheckpoint()Z
-PLandroid/os/IVold$Stub$Proxy;->onSecureKeyguardStateChanged(Z)V
-PLandroid/os/IVold$Stub$Proxy;->onUserAdded(II)V
-PLandroid/os/IVold$Stub$Proxy;->onUserStarted(I)V
-PLandroid/os/IVold$Stub$Proxy;->openAppFuseFile(IIII)Ljava/io/FileDescriptor;
-PLandroid/os/IVold$Stub$Proxy;->prepareUserStorage(Ljava/lang/String;III)V
-HPLandroid/os/IVold$Stub$Proxy;->remountUid(II)V
-PLandroid/os/IVold$Stub$Proxy;->reset()V
-PLandroid/os/IVold$Stub$Proxy;->runIdleMaint(Landroid/os/IVoldTaskListener;)V
-HSPLandroid/os/IVold$Stub$Proxy;->setListener(Landroid/os/IVoldListener;)V
-PLandroid/os/IVold$Stub$Proxy;->supportsBlockCheckpoint()Z
-PLandroid/os/IVold$Stub$Proxy;->unlockUserKey(IILjava/lang/String;Ljava/lang/String;)V
-PLandroid/os/IVold$Stub$Proxy;->unmountAppFuse(II)V
-HSPLandroid/os/IVold$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IVold;
-HSPLandroid/os/IVoldListener$Stub;-><init>()V
-HSPLandroid/os/IVoldListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/os/IVoldListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/os/IVoldMountCallback$Stub;-><init>()V
-PLandroid/os/IVoldMountCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/os/IVoldTaskListener$Stub;-><init>()V
-HSPLandroid/os/IVoldTaskListener$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/os/IVoldTaskListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/IncidentManager$IncidentReport$1;-><init>()V
-HSPLandroid/os/IncidentManager$IncidentReport$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/IncidentManager$IncidentReport;
-HSPLandroid/os/IncidentManager$IncidentReport$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/os/IncidentManager$IncidentReport;-><clinit>()V
-HSPLandroid/os/IncidentManager$IncidentReport;-><init>(Landroid/os/Parcel;)V
-PLandroid/os/IncidentManager$IncidentReport;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/os/IncidentManager;-><init>(Landroid/content/Context;)V
-HSPLandroid/os/IncidentManager;->getCompanionServiceLocked()Landroid/os/IIncidentCompanion;
-HSPLandroid/os/IncidentManager;->getIncidentReport(Landroid/net/Uri;)Landroid/os/IncidentManager$IncidentReport;
-HSPLandroid/os/IncidentManager;->getIncidentReportList(Ljava/lang/String;)Ljava/util/List;
 HSPLandroid/os/LocaleList$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/LocaleList;
 HSPLandroid/os/LocaleList$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/LocaleList;-><init>(Ljava/util/Locale;Landroid/os/LocaleList;)V
 HSPLandroid/os/LocaleList;-><init>([Ljava/util/Locale;)V
+HSPLandroid/os/LocaleList;->computeFirstMatch(Ljava/util/Collection;Z)Ljava/util/Locale;
+HSPLandroid/os/LocaleList;->computeFirstMatchIndex(Ljava/util/Collection;Z)I
 HSPLandroid/os/LocaleList;->equals(Ljava/lang/Object;)Z
+HSPLandroid/os/LocaleList;->findFirstMatchIndex(Ljava/util/Locale;)I
 HSPLandroid/os/LocaleList;->forLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList;
 HSPLandroid/os/LocaleList;->get(I)Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->getAdjustedDefault()Landroid/os/LocaleList;
 HSPLandroid/os/LocaleList;->getDefault()Landroid/os/LocaleList;
 HSPLandroid/os/LocaleList;->getEmptyLocaleList()Landroid/os/LocaleList;
+HSPLandroid/os/LocaleList;->getFirstMatchWithEnglishSupported([Ljava/lang/String;)Ljava/util/Locale;
+HSPLandroid/os/LocaleList;->getLikelyScript(Ljava/util/Locale;)Ljava/lang/String;
 HSPLandroid/os/LocaleList;->hashCode()I
 HSPLandroid/os/LocaleList;->isEmpty()Z
+HSPLandroid/os/LocaleList;->isPseudoLocale(Ljava/lang/String;)Z
+HSPLandroid/os/LocaleList;->isPseudoLocale(Ljava/util/Locale;)Z
+HSPLandroid/os/LocaleList;->isPseudoLocalesOnly([Ljava/lang/String;)Z
+HSPLandroid/os/LocaleList;->matchScore(Ljava/util/Locale;Ljava/util/Locale;)I
 HSPLandroid/os/LocaleList;->setDefault(Landroid/os/LocaleList;)V
 HSPLandroid/os/LocaleList;->setDefault(Landroid/os/LocaleList;I)V
 HSPLandroid/os/LocaleList;->size()I
@@ -17428,8 +9252,6 @@
 HSPLandroid/os/LocaleList;->toString()Ljava/lang/String;
 HSPLandroid/os/LocaleList;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/Looper;-><init>(Z)V
-HSPLandroid/os/Looper;->dump(Landroid/util/Printer;Ljava/lang/String;)V
-PLandroid/os/Looper;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLandroid/os/Looper;->getMainLooper()Landroid/os/Looper;
 HSPLandroid/os/Looper;->getQueue()Landroid/os/MessageQueue;
 HSPLandroid/os/Looper;->getThread()Ljava/lang/Thread;
@@ -17442,31 +9264,20 @@
 HSPLandroid/os/Looper;->prepareMainLooper()V
 HSPLandroid/os/Looper;->quit()V
 HSPLandroid/os/Looper;->quitSafely()V
-HSPLandroid/os/Looper;->setMessageLogging(Landroid/util/Printer;)V
-HSPLandroid/os/Looper;->setObserver(Landroid/os/Looper$Observer;)V
 HSPLandroid/os/Looper;->setSlowLogThresholdMs(JJ)V
 HSPLandroid/os/Looper;->setTraceTag(J)V
 HSPLandroid/os/Looper;->showSlowLog(JJJLjava/lang/String;Landroid/os/Message;)Z
 HSPLandroid/os/Looper;->toString()Ljava/lang/String;
-PLandroid/os/MemoryFile;-><init>(Ljava/lang/String;I)V
-PLandroid/os/MemoryFile;->beginAccess()V
-PLandroid/os/MemoryFile;->checkActive()V
-PLandroid/os/MemoryFile;->close()V
-PLandroid/os/MemoryFile;->deactivate()V
-PLandroid/os/MemoryFile;->endAccess()V
-PLandroid/os/MemoryFile;->getFileDescriptor()Ljava/io/FileDescriptor;
-PLandroid/os/MemoryFile;->readBytes([BIII)I
-PLandroid/os/MemoryFile;->writeBytes([BIII)V
 HSPLandroid/os/Message$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/Message;
 HSPLandroid/os/Message$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/Message;-><init>()V
 HSPLandroid/os/Message;->access$000(Landroid/os/Message;Landroid/os/Parcel;)V
 HSPLandroid/os/Message;->copyFrom(Landroid/os/Message;)V
-PLandroid/os/Message;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLandroid/os/Message;->getCallback()Ljava/lang/Runnable;
 HSPLandroid/os/Message;->getData()Landroid/os/Bundle;
 HSPLandroid/os/Message;->getTarget()Landroid/os/Handler;
-PLandroid/os/Message;->getWhen()J
+HSPLandroid/os/Message;->getWhen()J
+HSPLandroid/os/Message;->isAsynchronous()Z
 HSPLandroid/os/Message;->isInUse()Z
 HSPLandroid/os/Message;->markInUse()V
 HSPLandroid/os/Message;->obtain()Landroid/os/Message;
@@ -17485,8 +9296,6 @@
 HSPLandroid/os/Message;->setAsynchronous(Z)V
 HSPLandroid/os/Message;->setCallback(Ljava/lang/Runnable;)Landroid/os/Message;
 HSPLandroid/os/Message;->setData(Landroid/os/Bundle;)V
-HSPLandroid/os/Message;->setTarget(Landroid/os/Handler;)V
-HSPLandroid/os/Message;->setWhat(I)Landroid/os/Message;
 HSPLandroid/os/Message;->toString()Ljava/lang/String;
 HSPLandroid/os/Message;->toString(J)Ljava/lang/String;
 HSPLandroid/os/Message;->updateCheckRecycle(I)V
@@ -17496,59 +9305,45 @@
 HSPLandroid/os/MessageQueue;->addIdleHandler(Landroid/os/MessageQueue$IdleHandler;)V
 HSPLandroid/os/MessageQueue;->addOnFileDescriptorEventListener(Ljava/io/FileDescriptor;ILandroid/os/MessageQueue$OnFileDescriptorEventListener;)V
 HSPLandroid/os/MessageQueue;->dispatchEvents(II)I
-PLandroid/os/MessageQueue;->dispose()V
-HSPLandroid/os/MessageQueue;->dump(Landroid/util/Printer;Ljava/lang/String;Landroid/os/Handler;)V
-PLandroid/os/MessageQueue;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLandroid/os/MessageQueue;->dispose()V
 HSPLandroid/os/MessageQueue;->enqueueMessage(Landroid/os/Message;J)Z
 HSPLandroid/os/MessageQueue;->finalize()V
-HSPLandroid/os/MessageQueue;->hasMessages(Landroid/os/Handler;)Z
 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;->isIdle()Z
-HSPLandroid/os/MessageQueue;->isPolling()Z
-HSPLandroid/os/MessageQueue;->isPollingLocked()Z
 HSPLandroid/os/MessageQueue;->next()Landroid/os/Message;
-PLandroid/os/MessageQueue;->postSyncBarrier()I
+HSPLandroid/os/MessageQueue;->postSyncBarrier()I
 HSPLandroid/os/MessageQueue;->postSyncBarrier(J)I
 HSPLandroid/os/MessageQueue;->quit(Z)V
 HSPLandroid/os/MessageQueue;->removeAllFutureMessagesLocked()V
-PLandroid/os/MessageQueue;->removeAllMessagesLocked()V
+HSPLandroid/os/MessageQueue;->removeAllMessagesLocked()V
 HSPLandroid/os/MessageQueue;->removeCallbacksAndMessages(Landroid/os/Handler;Ljava/lang/Object;)V
 HSPLandroid/os/MessageQueue;->removeIdleHandler(Landroid/os/MessageQueue$IdleHandler;)V
 HSPLandroid/os/MessageQueue;->removeMessages(Landroid/os/Handler;ILjava/lang/Object;)V
 HSPLandroid/os/MessageQueue;->removeMessages(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;)V
-HSPLandroid/os/MessageQueue;->removeOnFileDescriptorEventListener(Ljava/io/FileDescriptor;)V
 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;
 HSPLandroid/os/Messenger;-><init>(Landroid/os/Handler;)V
 HSPLandroid/os/Messenger;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/os/Messenger;->equals(Ljava/lang/Object;)Z
 HSPLandroid/os/Messenger;->getBinder()Landroid/os/IBinder;
-HSPLandroid/os/Messenger;->hashCode()I
 HSPLandroid/os/Messenger;->readMessengerOrNullFromParcel(Landroid/os/Parcel;)Landroid/os/Messenger;
 HSPLandroid/os/Messenger;->send(Landroid/os/Message;)V
 HSPLandroid/os/Messenger;->writeMessengerOrNullToParcel(Landroid/os/Messenger;Landroid/os/Parcel;)V
 HSPLandroid/os/Messenger;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/os/NativeHandle;-><init>([I[IZ)V
-HPLandroid/os/NativeHandle;-><init>([Ljava/io/FileDescriptor;[IZ)V
-HPLandroid/os/NativeHandle;->createFileDescriptorArray([I)[Ljava/io/FileDescriptor;
-PLandroid/os/Parcel$2;-><init>(Landroid/os/Parcel;Ljava/io/InputStream;Ljava/lang/ClassLoader;)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$ReadWriteHelper;-><init>()V
 HSPLandroid/os/Parcel$ReadWriteHelper;->readString(Landroid/os/Parcel;)Ljava/lang/String;
 HSPLandroid/os/Parcel$ReadWriteHelper;->writeString(Landroid/os/Parcel;Ljava/lang/String;)V
 HSPLandroid/os/Parcel;-><init>(J)V
+HSPLandroid/os/Parcel;->access$000(Landroid/os/Parcel;)J
+HSPLandroid/os/Parcel;->adoptClassCookies(Landroid/os/Parcel;)V
 HSPLandroid/os/Parcel;->appendFrom(Landroid/os/Parcel;II)V
-PLandroid/os/Parcel;->compareData(Landroid/os/Parcel;)I
-PLandroid/os/Parcel;->copyClassCookies()Ljava/util/Map;
-HSPLandroid/os/Parcel;->createBinderArrayList()Ljava/util/ArrayList;
-PLandroid/os/Parcel;->createBooleanArray()[Z
+HSPLandroid/os/Parcel;->copyClassCookies()Ljava/util/Map;
 HSPLandroid/os/Parcel;->createByteArray()[B
-HPLandroid/os/Parcel;->createDoubleArray()[D
 HSPLandroid/os/Parcel;->createException(ILjava/lang/String;)Ljava/lang/Exception;
-PLandroid/os/Parcel;->createFloatArray()[F
+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;->createStringArray()[Ljava/lang/String;
@@ -17561,7 +9356,9 @@
 HSPLandroid/os/Parcel;->destroy()V
 HSPLandroid/os/Parcel;->enforceInterface(Ljava/lang/String;)V
 HSPLandroid/os/Parcel;->finalize()V
-PLandroid/os/Parcel;->getClassCookie(Ljava/lang/Class;)Ljava/lang/Object;
+HSPLandroid/os/Parcel;->freeBuffer()V
+HSPLandroid/os/Parcel;->getClassCookie(Ljava/lang/Class;)Ljava/lang/Object;
+HSPLandroid/os/Parcel;->getExceptionCode(Ljava/lang/Throwable;)I
 HSPLandroid/os/Parcel;->hasFileDescriptors()Z
 HSPLandroid/os/Parcel;->hasReadWriteHelper()Z
 HSPLandroid/os/Parcel;->init(J)V
@@ -17571,46 +9368,42 @@
 HSPLandroid/os/Parcel;->pushAllowFds(Z)Z
 HSPLandroid/os/Parcel;->readArrayList(Ljava/lang/ClassLoader;)Ljava/util/ArrayList;
 HSPLandroid/os/Parcel;->readArrayMap(Landroid/util/ArrayMap;Ljava/lang/ClassLoader;)V
-PLandroid/os/Parcel;->readArrayMapInternal(Landroid/util/ArrayMap;ILjava/lang/ClassLoader;)V
+HSPLandroid/os/Parcel;->readArrayMapInternal(Landroid/util/ArrayMap;ILjava/lang/ClassLoader;)V
 HSPLandroid/os/Parcel;->readArraySet(Ljava/lang/ClassLoader;)Landroid/util/ArraySet;
-PLandroid/os/Parcel;->readBlob()[B
+HSPLandroid/os/Parcel;->readBlob()[B
 HSPLandroid/os/Parcel;->readBoolean()Z
-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;->readByteArray([B)V
 HSPLandroid/os/Parcel;->readCharSequence()Ljava/lang/CharSequence;
-PLandroid/os/Parcel;->readCharSequenceArray()[Ljava/lang/CharSequence;
+HSPLandroid/os/Parcel;->readCharSequenceArray()[Ljava/lang/CharSequence;
 HSPLandroid/os/Parcel;->readDouble()D
 HSPLandroid/os/Parcel;->readException()V
 HSPLandroid/os/Parcel;->readException(ILjava/lang/String;)V
 HSPLandroid/os/Parcel;->readExceptionCode()I
-PLandroid/os/Parcel;->readFileDescriptor()Landroid/os/ParcelFileDescriptor;
 HSPLandroid/os/Parcel;->readFloat()F
-PLandroid/os/Parcel;->readFloatArray([F)V
 HSPLandroid/os/Parcel;->readHashMap(Ljava/lang/ClassLoader;)Ljava/util/HashMap;
 HSPLandroid/os/Parcel;->readInt()I
-HSLandroid/os/Parcel;->readIntArray([I)V
+HSPLandroid/os/Parcel;->readIntArray([I)V
 HSPLandroid/os/Parcel;->readList(Ljava/util/List;Ljava/lang/ClassLoader;)V
 HSPLandroid/os/Parcel;->readListInternal(Ljava/util/List;ILjava/lang/ClassLoader;)V
 HSPLandroid/os/Parcel;->readLong()J
-HPLandroid/os/Parcel;->readLongArray([J)V
-PLandroid/os/Parcel;->readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V
+HSPLandroid/os/Parcel;->readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V
 HSPLandroid/os/Parcel;->readMapInternal(Ljava/util/Map;ILjava/lang/ClassLoader;)V
 HSPLandroid/os/Parcel;->readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;
-PLandroid/os/Parcel;->readParcelableArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Landroid/os/Parcelable;
+HSPLandroid/os/Parcel;->readParcelableArray(Ljava/lang/ClassLoader;)[Landroid/os/Parcelable;
+HSPLandroid/os/Parcel;->readParcelableArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Landroid/os/Parcelable;
 HSPLandroid/os/Parcel;->readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;
 HSPLandroid/os/Parcel;->readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;
 HSPLandroid/os/Parcel;->readPersistableBundle()Landroid/os/PersistableBundle;
 HSPLandroid/os/Parcel;->readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;
 HSPLandroid/os/Parcel;->readRawFileDescriptor()Ljava/io/FileDescriptor;
-PLandroid/os/Parcel;->readSerializable()Ljava/io/Serializable;
+HSPLandroid/os/Parcel;->readSerializable()Ljava/io/Serializable;
 HSPLandroid/os/Parcel;->readSerializable(Ljava/lang/ClassLoader;)Ljava/io/Serializable;
 HSPLandroid/os/Parcel;->readSparseArray(Ljava/lang/ClassLoader;)Landroid/util/SparseArray;
 HSPLandroid/os/Parcel;->readString()Ljava/lang/String;
 HSPLandroid/os/Parcel;->readStringArray()[Ljava/lang/String;
-HSPLandroid/os/Parcel;->readStringArray([Ljava/lang/String;)V
 HSPLandroid/os/Parcel;->readStringList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->readStrongBinder()Landroid/os/IBinder;
 HSPLandroid/os/Parcel;->readTypedArray([Ljava/lang/Object;Landroid/os/Parcelable$Creator;)V
@@ -17619,35 +9412,26 @@
 HSPLandroid/os/Parcel;->readValue(Ljava/lang/ClassLoader;)Ljava/lang/Object;
 HSPLandroid/os/Parcel;->recycle()V
 HSPLandroid/os/Parcel;->restoreAllowFds(Z)V
-PLandroid/os/Parcel;->setClassCookie(Ljava/lang/Class;Ljava/lang/Object;)V
-HSPLandroid/os/Parcel;->setDataCapacity(I)V
+HSPLandroid/os/Parcel;->setClassCookie(Ljava/lang/Class;Ljava/lang/Object;)V
 HSPLandroid/os/Parcel;->setDataPosition(I)V
 HSPLandroid/os/Parcel;->setDataSize(I)V
-HSPLandroid/os/Parcel;->setReadWriteHelper(Landroid/os/Parcel$ReadWriteHelper;)V
-HSPLandroid/os/Parcel;->setStackTraceParceling(Z)V
 HSPLandroid/os/Parcel;->unmarshall([BII)V
 HSPLandroid/os/Parcel;->updateNativeSize(J)V
 HSPLandroid/os/Parcel;->writeArrayMap(Landroid/util/ArrayMap;)V
 HSPLandroid/os/Parcel;->writeArrayMapInternal(Landroid/util/ArrayMap;)V
 HSPLandroid/os/Parcel;->writeArraySet(Landroid/util/ArraySet;)V
 HSPLandroid/os/Parcel;->writeBinderList(Ljava/util/List;)V
-PLandroid/os/Parcel;->writeBlob([B)V
-PLandroid/os/Parcel;->writeBlob([BII)V
 HSPLandroid/os/Parcel;->writeBoolean(Z)V
-PLandroid/os/Parcel;->writeBooleanArray([Z)V
 HSPLandroid/os/Parcel;->writeBundle(Landroid/os/Bundle;)V
 HSPLandroid/os/Parcel;->writeByte(B)V
 HSPLandroid/os/Parcel;->writeByteArray([B)V
 HSPLandroid/os/Parcel;->writeByteArray([BII)V
 HSPLandroid/os/Parcel;->writeCharSequence(Ljava/lang/CharSequence;)V
-PLandroid/os/Parcel;->writeCharSequenceArray([Ljava/lang/CharSequence;)V
-PLandroid/os/Parcel;->writeCharSequenceList(Ljava/util/ArrayList;)V
 HSPLandroid/os/Parcel;->writeDouble(D)V
-HPLandroid/os/Parcel;->writeDoubleArray([D)V
-PLandroid/os/Parcel;->writeException(Ljava/lang/Exception;)V
+HSPLandroid/os/Parcel;->writeException(Ljava/lang/Exception;)V
 HSPLandroid/os/Parcel;->writeFileDescriptor(Ljava/io/FileDescriptor;)V
 HSPLandroid/os/Parcel;->writeFloat(F)V
-HPLandroid/os/Parcel;->writeFloatArray([F)V
+HSPLandroid/os/Parcel;->writeFloatArray([F)V
 HSPLandroid/os/Parcel;->writeInt(I)V
 HSPLandroid/os/Parcel;->writeIntArray([I)V
 HSPLandroid/os/Parcel;->writeInterfaceToken(Ljava/lang/String;)V
@@ -17658,32 +9442,26 @@
 HSPLandroid/os/Parcel;->writeMapInternal(Ljava/util/Map;)V
 HSPLandroid/os/Parcel;->writeNoException()V
 HSPLandroid/os/Parcel;->writeParcelable(Landroid/os/Parcelable;I)V
-PLandroid/os/Parcel;->writeParcelableArray([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;->writeParcelableList(Ljava/util/List;I)V
-PLandroid/os/Parcel;->writePersistableBundle(Landroid/os/PersistableBundle;)V
-PLandroid/os/Parcel;->writeRawFileDescriptor(Ljava/io/FileDescriptor;)V
+HSPLandroid/os/Parcel;->writePersistableBundle(Landroid/os/PersistableBundle;)V
 HSPLandroid/os/Parcel;->writeSerializable(Ljava/io/Serializable;)V
 HSPLandroid/os/Parcel;->writeSparseArray(Landroid/util/SparseArray;)V
-HPLandroid/os/Parcel;->writeSparseBooleanArray(Landroid/util/SparseBooleanArray;)V
 HSPLandroid/os/Parcel;->writeString(Ljava/lang/String;)V
 HSPLandroid/os/Parcel;->writeStringArray([Ljava/lang/String;)V
 HSPLandroid/os/Parcel;->writeStringList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->writeStrongBinder(Landroid/os/IBinder;)V
 HSPLandroid/os/Parcel;->writeStrongInterface(Landroid/os/IInterface;)V
 HSPLandroid/os/Parcel;->writeTypedArray([Landroid/os/Parcelable;I)V
-PLandroid/os/Parcel;->writeTypedArrayMap(Landroid/util/ArrayMap;I)V
 HSPLandroid/os/Parcel;->writeTypedList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->writeTypedList(Ljava/util/List;I)V
 HSPLandroid/os/Parcel;->writeTypedObject(Landroid/os/Parcelable;I)V
 HSPLandroid/os/Parcel;->writeValue(Ljava/lang/Object;)V
-HSPLandroid/os/ParcelFileDescriptor$1;-><init>(Landroid/os/MessageQueue;Landroid/os/ParcelFileDescriptor$OnCloseListener;)V
-HSPLandroid/os/ParcelFileDescriptor$1;->onFileDescriptorEvents(Ljava/io/FileDescriptor;I)I
 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()I
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;->read([B)I
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;->read([BII)I
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseOutputStream;-><init>(Landroid/os/ParcelFileDescriptor;)V
@@ -17691,230 +9469,108 @@
 HSPLandroid/os/ParcelFileDescriptor;-><init>(Landroid/os/ParcelFileDescriptor;)V
 HSPLandroid/os/ParcelFileDescriptor;-><init>(Ljava/io/FileDescriptor;)V
 HSPLandroid/os/ParcelFileDescriptor;-><init>(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;)V
-HSPLandroid/os/ParcelFileDescriptor;->access$000(Ljava/io/FileDescriptor;[B)Landroid/os/ParcelFileDescriptor$Status;
-PLandroid/os/ParcelFileDescriptor;->adoptFd(I)Landroid/os/ParcelFileDescriptor;
 HSPLandroid/os/ParcelFileDescriptor;->canDetectErrors()Z
 HSPLandroid/os/ParcelFileDescriptor;->close()V
 HSPLandroid/os/ParcelFileDescriptor;->closeWithStatus(ILjava/lang/String;)V
-HSPLandroid/os/ParcelFileDescriptor;->createCommSocketPair()[Ljava/io/FileDescriptor;
 HSPLandroid/os/ParcelFileDescriptor;->createPipe()[Landroid/os/ParcelFileDescriptor;
 HSPLandroid/os/ParcelFileDescriptor;->detachFd()I
-PLandroid/os/ParcelFileDescriptor;->dup()Landroid/os/ParcelFileDescriptor;
+HSPLandroid/os/ParcelFileDescriptor;->dup()Landroid/os/ParcelFileDescriptor;
 HSPLandroid/os/ParcelFileDescriptor;->dup(Ljava/io/FileDescriptor;)Landroid/os/ParcelFileDescriptor;
 HSPLandroid/os/ParcelFileDescriptor;->finalize()V
-PLandroid/os/ParcelFileDescriptor;->fromData([BLjava/lang/String;)Landroid/os/ParcelFileDescriptor;
 HSPLandroid/os/ParcelFileDescriptor;->fromFd(I)Landroid/os/ParcelFileDescriptor;
-HSPLandroid/os/ParcelFileDescriptor;->fromFd(Ljava/io/FileDescriptor;Landroid/os/Handler;Landroid/os/ParcelFileDescriptor$OnCloseListener;)Landroid/os/ParcelFileDescriptor;
 HSPLandroid/os/ParcelFileDescriptor;->getFd()I
-HSPLandroid/os/ParcelFileDescriptor;->getFile(Ljava/io/FileDescriptor;)Ljava/io/File;
 HSPLandroid/os/ParcelFileDescriptor;->getFileDescriptor()Ljava/io/FileDescriptor;
-HSPLandroid/os/ParcelFileDescriptor;->getStatSize()J
 HSPLandroid/os/ParcelFileDescriptor;->ifAtLeastQ(I)I
 HSPLandroid/os/ParcelFileDescriptor;->isAtLeastQ()Z
 HSPLandroid/os/ParcelFileDescriptor;->open(Ljava/io/File;I)Landroid/os/ParcelFileDescriptor;
-HSPLandroid/os/ParcelFileDescriptor;->open(Ljava/io/File;ILandroid/os/Handler;Landroid/os/ParcelFileDescriptor$OnCloseListener;)Landroid/os/ParcelFileDescriptor;
 HSPLandroid/os/ParcelFileDescriptor;->openInternal(Ljava/io/File;I)Ljava/io/FileDescriptor;
-HSPLandroid/os/ParcelFileDescriptor;->parseMode(Ljava/lang/String;)I
-HSPLandroid/os/ParcelFileDescriptor;->readCommStatus(Ljava/io/FileDescriptor;[B)Landroid/os/ParcelFileDescriptor$Status;
 HSPLandroid/os/ParcelFileDescriptor;->releaseResources()V
 HSPLandroid/os/ParcelFileDescriptor;->writeCommStatusAndClose(ILjava/lang/String;)V
 HSPLandroid/os/ParcelFileDescriptor;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/ParcelUuid$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/ParcelUuid;
 HSPLandroid/os/ParcelUuid$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/os/ParcelUuid$1;->newArray(I)[Landroid/os/ParcelUuid;
-HPLandroid/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;->fromString(Ljava/lang/String;)Landroid/os/ParcelUuid;
+HSPLandroid/os/ParcelUuid;->getUuid()Ljava/util/UUID;
 HSPLandroid/os/ParcelUuid;->hashCode()I
 HSPLandroid/os/ParcelUuid;->toString()Ljava/lang/String;
-PLandroid/os/ParcelUuid;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/os/ParcelableException;-><init>(Ljava/lang/Throwable;)V
-HSPLandroid/os/ParcelableException;->maybeRethrow(Ljava/lang/Class;)V
-HSPLandroid/os/ParcelableParcel;->getClassLoader()Ljava/lang/ClassLoader;
-HSPLandroid/os/ParcelableParcel;->getParcel()Landroid/os/Parcel;
-HPLandroid/os/ParcelableParcel;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/ParcelUuid;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/PatternMatcher$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/PatternMatcher;
 HSPLandroid/os/PatternMatcher$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/PatternMatcher$1;->newArray(I)[Landroid/os/PatternMatcher;
 HSPLandroid/os/PatternMatcher$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/os/PatternMatcher;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/os/PatternMatcher;-><init>(Ljava/lang/String;I)V
-PLandroid/os/PatternMatcher;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLandroid/os/PatternMatcher;->getPath()Ljava/lang/String;
-HSPLandroid/os/PatternMatcher;->getType()I
-HSPLandroid/os/PatternMatcher;->match(Ljava/lang/String;)Z
-HPLandroid/os/PatternMatcher;->matchGlobPattern(Ljava/lang/String;Ljava/lang/String;)Z
-HSPLandroid/os/PatternMatcher;->matchPattern(Ljava/lang/String;Ljava/lang/String;[II)Z
-PLandroid/os/PatternMatcher;->toString()Ljava/lang/String;
 HSPLandroid/os/PatternMatcher;->writeToParcel(Landroid/os/Parcel;I)V
 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
-HSPLandroid/os/PersistableBundle$MyReadMapCallback;->readThisUnknownObjectXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/Object;
 HSPLandroid/os/PersistableBundle;-><init>()V
-HSPLandroid/os/PersistableBundle;-><init>(I)V
-PLandroid/os/PersistableBundle;-><init>(Landroid/os/Bundle;)V
+HSPLandroid/os/PersistableBundle;-><init>(Landroid/os/Bundle;)V
 HSPLandroid/os/PersistableBundle;-><init>(Landroid/os/Parcel;I)V
 HSPLandroid/os/PersistableBundle;-><init>(Landroid/os/PersistableBundle;)V
 HSPLandroid/os/PersistableBundle;-><init>(Landroid/util/ArrayMap;)V
 HSPLandroid/os/PersistableBundle;-><init>(Z)V
-PLandroid/os/PersistableBundle;->clone()Ljava/lang/Object;
 HSPLandroid/os/PersistableBundle;->deepCopy()Landroid/os/PersistableBundle;
-HPLandroid/os/PersistableBundle;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLandroid/os/PersistableBundle;->getPersistableBundle(Ljava/lang/String;)Landroid/os/PersistableBundle;
 HSPLandroid/os/PersistableBundle;->isValidType(Ljava/lang/Object;)Z
-HSPLandroid/os/PersistableBundle;->putPersistableBundle(Ljava/lang/String;Landroid/os/PersistableBundle;)V
-HSPLandroid/os/PersistableBundle;->restoreFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/os/PersistableBundle;
-PLandroid/os/PersistableBundle;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
-HPLandroid/os/PersistableBundle;->toShortString()Ljava/lang/String;
-HSPLandroid/os/PersistableBundle;->toString()Ljava/lang/String;
 HSPLandroid/os/PersistableBundle;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/os/PersistableBundle;->writeUnknownObject(Ljava/lang/Object;Ljava/lang/String;Lorg/xmlpull/v1/XmlSerializer;)V
-PLandroid/os/PooledStringReader;-><init>(Landroid/os/Parcel;)V
-PLandroid/os/PooledStringReader;->readString()Ljava/lang/String;
-PLandroid/os/PooledStringWriter;-><init>(Landroid/os/Parcel;)V
-PLandroid/os/PooledStringWriter;->finish()V
-PLandroid/os/PooledStringWriter;->writeString(Ljava/lang/String;)V
-HSPLandroid/os/PowerManager$1;-><init>(Landroid/os/PowerManager;Ljava/util/concurrent/Executor;Landroid/os/PowerManager$OnThermalStatusChangedListener;)V
-PLandroid/os/PowerManager$1;->lambda$onStatusChange$0(Landroid/os/PowerManager$OnThermalStatusChangedListener;I)V
-HSPLandroid/os/PowerManager$1;->onStatusChange(I)V
-PLandroid/os/PowerManager$WakeData;-><init>(JI)V
 HSPLandroid/os/PowerManager$WakeLock$1;-><init>(Landroid/os/PowerManager$WakeLock;)V
 HSPLandroid/os/PowerManager$WakeLock$1;->run()V
 HSPLandroid/os/PowerManager$WakeLock;-><init>(Landroid/os/PowerManager;ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/os/PowerManager$WakeLock;->acquire()V
 HSPLandroid/os/PowerManager$WakeLock;->acquire(J)V
 HSPLandroid/os/PowerManager$WakeLock;->acquireLocked()V
-PLandroid/os/PowerManager$WakeLock;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLandroid/os/PowerManager$WakeLock;->finalize()V
 HSPLandroid/os/PowerManager$WakeLock;->isHeld()Z
-PLandroid/os/PowerManager$WakeLock;->lambda$wrap$0$PowerManager$WakeLock(Ljava/lang/Runnable;)V
 HSPLandroid/os/PowerManager$WakeLock;->release()V
 HSPLandroid/os/PowerManager$WakeLock;->release(I)V
-PLandroid/os/PowerManager$WakeLock;->setHistoryTag(Ljava/lang/String;)V
 HSPLandroid/os/PowerManager$WakeLock;->setReferenceCounted(Z)V
 HSPLandroid/os/PowerManager$WakeLock;->setWorkSource(Landroid/os/WorkSource;)V
-HSPLandroid/os/PowerManager$WakeLock;->toString()Ljava/lang/String;
-PLandroid/os/PowerManager$WakeLock;->wrap(Ljava/lang/Runnable;)Ljava/lang/Runnable;
 HSPLandroid/os/PowerManager;-><init>(Landroid/content/Context;Landroid/os/IPowerManager;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
-HSPLandroid/os/PowerManager;->getCurrentThermalStatus()I
-HSPLandroid/os/PowerManager;->getDefaultScreenBrightnessSetting()I
-HSPLandroid/os/PowerManager;->getDeviceIdleManager()Landroid/os/DeviceIdleManager;
-HSPLandroid/os/PowerManager;->getLocationPowerSaveMode()I
-HSPLandroid/os/PowerManager;->getMaximumScreenBrightnessForVrSetting()I
 HSPLandroid/os/PowerManager;->getMaximumScreenBrightnessSetting()I
-HSPLandroid/os/PowerManager;->getMinimumScreenBrightnessForVrSetting()I
 HSPLandroid/os/PowerManager;->getMinimumScreenBrightnessSetting()I
-HSPLandroid/os/PowerManager;->getPowerSaveState(I)Landroid/os/PowerSaveState;
-PLandroid/os/PowerManager;->goToSleep(JII)V
 HSPLandroid/os/PowerManager;->isDeviceIdleMode()Z
-HSPLandroid/os/PowerManager;->isIgnoringBatteryOptimizations(Ljava/lang/String;)Z
 HSPLandroid/os/PowerManager;->isInteractive()Z
 HSPLandroid/os/PowerManager;->isLightDeviceIdleMode()Z
 HSPLandroid/os/PowerManager;->isPowerSaveMode()Z
 HSPLandroid/os/PowerManager;->isScreenOn()Z
-PLandroid/os/PowerManager;->isWakeLockLevelSupported(I)Z
-PLandroid/os/PowerManager;->locationPowerSaveModeToString(I)Ljava/lang/String;
 HSPLandroid/os/PowerManager;->newWakeLock(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;
-HSPLandroid/os/PowerManager;->setDynamicPowerSaveHint(ZI)Z
-PLandroid/os/PowerManager;->sleepReasonToString(I)Ljava/lang/String;
-PLandroid/os/PowerManager;->userActivity(JII)V
-PLandroid/os/PowerManager;->userActivity(JZ)V
 HSPLandroid/os/PowerManager;->validateWakeLockParameters(ILjava/lang/String;)V
-PLandroid/os/PowerManager;->wakeReasonToString(I)Ljava/lang/String;
-PLandroid/os/PowerManager;->wakeUp(JILjava/lang/String;)V
-HSPLandroid/os/PowerManagerInternal$1;-><init>(Landroid/os/PowerManagerInternal;ILjava/util/function/Consumer;)V
-HSPLandroid/os/PowerManagerInternal;-><init>()V
-HSPLandroid/os/PowerManagerInternal;->isInteractive(I)Z
-HSPLandroid/os/PowerManagerInternal;->registerLowPowerModeObserver(ILjava/util/function/Consumer;)V
-HSPLandroid/os/PowerManagerInternal;->wakefulnessToString(I)Ljava/lang/String;
-HPLandroid/os/PowerSaveState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/PowerSaveState;
-HPLandroid/os/PowerSaveState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/os/PowerSaveState$Builder;-><init>()V
-HSPLandroid/os/PowerSaveState$Builder;->build()Landroid/os/PowerSaveState;
-HSPLandroid/os/PowerSaveState$Builder;->setBatterySaverEnabled(Z)Landroid/os/PowerSaveState$Builder;
-PLandroid/os/PowerSaveState$Builder;->setBrightnessFactor(F)Landroid/os/PowerSaveState$Builder;
-HSPLandroid/os/PowerSaveState$Builder;->setGlobalBatterySaverEnabled(Z)Landroid/os/PowerSaveState$Builder;
-PLandroid/os/PowerSaveState$Builder;->setLocationMode(I)Landroid/os/PowerSaveState$Builder;
-HPLandroid/os/PowerSaveState;-><init>(Landroid/os/Parcel;)V
-PLandroid/os/PowerSaveState;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/os/PowerWhitelistManager;-><init>(Landroid/content/Context;)V
-HPLandroid/os/PowerWhitelistManager;->whitelistAppTemporarily(Ljava/lang/String;J)V
-HSPLandroid/os/Process$ProcessStartResult;-><init>()V
 HSPLandroid/os/Process;->getStartElapsedRealtime()J
-PLandroid/os/Process;->getThreadGroupLeader(I)I
-HSPLandroid/os/Process;->getUidForPid(I)I
 HSPLandroid/os/Process;->is64Bit()Z
 HSPLandroid/os/Process;->isApplicationUid(I)Z
 HSPLandroid/os/Process;->isIsolated()Z
 HSPLandroid/os/Process;->isIsolated(I)Z
-PLandroid/os/Process;->isThreadInProcess(II)Z
-PLandroid/os/Process;->killProcess(I)V
-PLandroid/os/Process;->killProcessQuiet(I)V
 HSPLandroid/os/Process;->myPid()I
 HSPLandroid/os/Process;->myTid()I
 HSPLandroid/os/Process;->myUid()I
 HSPLandroid/os/Process;->myUserHandle()Landroid/os/UserHandle;
 HSPLandroid/os/Process;->setStartTimes(JJ)V
-HSPLandroid/os/Process;->start(Ljava/lang/String;Ljava/lang/String;II[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z[J[Ljava/lang/String;)Landroid/os/Process$ProcessStartResult;
-PLandroid/os/Process;->startWebView(Ljava/lang/String;Ljava/lang/String;II[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[J[Ljava/lang/String;)Landroid/os/Process$ProcessStartResult;
-PLandroid/os/RecoverySystem;->handleAftermath(Landroid/content/Context;)Ljava/lang/String;
-HPLandroid/os/Registrant;->getHandler()Landroid/os/Handler;
-HPLandroid/os/Registrant;->internalNotifyRegistrant(Ljava/lang/Object;Ljava/lang/Throwable;)V
-HPLandroid/os/Registrant;->notifyRegistrant(Landroid/os/AsyncResult;)V
-HSPLandroid/os/RegistrantList;-><init>()V
-HPLandroid/os/RegistrantList;->internalNotifyRegistrants(Ljava/lang/Object;Ljava/lang/Throwable;)V
-HPLandroid/os/RegistrantList;->notifyRegistrants(Landroid/os/AsyncResult;)V
 HSPLandroid/os/RemoteCallback$1;-><init>(Landroid/os/RemoteCallback;)V
-PLandroid/os/RemoteCallback$1;->sendResult(Landroid/os/Bundle;)V
-HSPLandroid/os/RemoteCallback$3;->createFromParcel(Landroid/os/Parcel;)Landroid/os/RemoteCallback;
-HSPLandroid/os/RemoteCallback$3;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSLandroid/os/RemoteCallback;-><init>(Landroid/os/Parcel;)V
 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
-PLandroid/os/RemoteCallback;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/RemoteCallbackList$Callback;-><init>(Landroid/os/RemoteCallbackList;Landroid/os/IInterface;Ljava/lang/Object;)V
-PLandroid/os/RemoteCallbackList$Callback;->binderDied()V
 HSPLandroid/os/RemoteCallbackList;-><init>()V
 HSPLandroid/os/RemoteCallbackList;->beginBroadcast()I
-PLandroid/os/RemoteCallbackList;->broadcast(Ljava/util/function/Consumer;)V
-HPLandroid/os/RemoteCallbackList;->broadcastForEachCookie(Ljava/util/function/Consumer;)V
-PLandroid/os/RemoteCallbackList;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLandroid/os/RemoteCallbackList;->finishBroadcast()V
-HSPLandroid/os/RemoteCallbackList;->getBroadcastCookie(I)Ljava/lang/Object;
 HSPLandroid/os/RemoteCallbackList;->getBroadcastItem(I)Landroid/os/IInterface;
-PLandroid/os/RemoteCallbackList;->getRegisteredCallbackCookie(I)Ljava/lang/Object;
-HSPLandroid/os/RemoteCallbackList;->getRegisteredCallbackCount()I
-PLandroid/os/RemoteCallbackList;->getRegisteredCallbackItem(I)Landroid/os/IInterface;
-PLandroid/os/RemoteCallbackList;->kill()V
 HSPLandroid/os/RemoteCallbackList;->logExcessiveCallbacks()V
-PLandroid/os/RemoteCallbackList;->onCallbackDied(Landroid/os/IInterface;)V
-PLandroid/os/RemoteCallbackList;->onCallbackDied(Landroid/os/IInterface;Ljava/lang/Object;)V
 HSPLandroid/os/RemoteCallbackList;->register(Landroid/os/IInterface;)Z
 HSPLandroid/os/RemoteCallbackList;->register(Landroid/os/IInterface;Ljava/lang/Object;)Z
 HSPLandroid/os/RemoteCallbackList;->unregister(Landroid/os/IInterface;)Z
-PLandroid/os/RemoteException;-><init>()V
+HSPLandroid/os/RemoteException;-><init>()V
 HSPLandroid/os/RemoteException;-><init>(Ljava/lang/String;)V
-PLandroid/os/ResultReceiver$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/ResultReceiver;
-PLandroid/os/ResultReceiver$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/os/ResultReceiver$MyResultReceiver;-><init>(Landroid/os/ResultReceiver;)V
-PLandroid/os/ResultReceiver$MyResultReceiver;->send(ILandroid/os/Bundle;)V
-PLandroid/os/ResultReceiver$MyRunnable;->run()V
+HSPLandroid/os/RemoteException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
+HSPLandroid/os/ResultReceiver$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/ResultReceiver;
+HSPLandroid/os/ResultReceiver$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/os/ResultReceiver$MyResultReceiver;-><init>(Landroid/os/ResultReceiver;)V
+HSPLandroid/os/ResultReceiver$MyResultReceiver;->send(ILandroid/os/Bundle;)V
 HSPLandroid/os/ResultReceiver;-><init>(Landroid/os/Handler;)V
-PLandroid/os/ResultReceiver;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/os/ResultReceiver;->onReceiveResult(ILandroid/os/Bundle;)V
+HSPLandroid/os/ResultReceiver;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/os/ResultReceiver;->send(ILandroid/os/Bundle;)V
-PLandroid/os/ResultReceiver;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/os/SELinux;->restorecon(Ljava/io/File;)Z
-PLandroid/os/SELinux;->restoreconRecursive(Ljava/io/File;)Z
-PLandroid/os/ServiceManager$ServiceNotFoundException;-><init>(Ljava/lang/String;)V
+HSPLandroid/os/ResultReceiver;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;)V
 HSPLandroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;ZI)V
-HSPLandroid/os/ServiceManager;->checkService(Ljava/lang/String;)Landroid/os/IBinder;
 HSPLandroid/os/ServiceManager;->getIServiceManager()Landroid/os/IServiceManager;
 HSPLandroid/os/ServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder;
 HSPLandroid/os/ServiceManager;->getServiceOrThrow(Ljava/lang/String;)Landroid/os/IBinder;
@@ -17925,33 +9581,6 @@
 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;
-PLandroid/os/ServiceSpecificException;-><init>(ILjava/lang/String;)V
-PLandroid/os/ServiceSpecificException;->toString()Ljava/lang/String;
-PLandroid/os/SharedMemory$Closer;-><init>(Ljava/io/FileDescriptor;Landroid/os/SharedMemory$MemoryRegistration;)V
-PLandroid/os/SharedMemory$Closer;-><init>(Ljava/io/FileDescriptor;Landroid/os/SharedMemory$MemoryRegistration;Landroid/os/SharedMemory$1;)V
-PLandroid/os/SharedMemory$Closer;->run()V
-PLandroid/os/SharedMemory$MemoryRegistration;-><init>(I)V
-PLandroid/os/SharedMemory$MemoryRegistration;-><init>(ILandroid/os/SharedMemory$1;)V
-PLandroid/os/SharedMemory$MemoryRegistration;->acquire()Landroid/os/SharedMemory$MemoryRegistration;
-PLandroid/os/SharedMemory$MemoryRegistration;->release()V
-PLandroid/os/SharedMemory$Unmapper;-><init>(JILandroid/os/SharedMemory$MemoryRegistration;)V
-PLandroid/os/SharedMemory$Unmapper;-><init>(JILandroid/os/SharedMemory$MemoryRegistration;Landroid/os/SharedMemory$1;)V
-PLandroid/os/SharedMemory$Unmapper;->run()V
-PLandroid/os/SharedMemory;-><init>(Ljava/io/FileDescriptor;)V
-PLandroid/os/SharedMemory;->checkOpen()V
-PLandroid/os/SharedMemory;->close()V
-PLandroid/os/SharedMemory;->create(Ljava/lang/String;I)Landroid/os/SharedMemory;
-PLandroid/os/SharedMemory;->getFileDescriptor()Ljava/io/FileDescriptor;
-PLandroid/os/SharedMemory;->map(III)Ljava/nio/ByteBuffer;
-PLandroid/os/SharedMemory;->mapReadWrite()Ljava/nio/ByteBuffer;
-PLandroid/os/SharedMemory;->unmap(Ljava/nio/ByteBuffer;)V
-PLandroid/os/SharedMemory;->validateProt(I)V
-PLandroid/os/ShellCallback$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/ShellCallback;
-PLandroid/os/ShellCallback$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/os/ShellCallback;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/os/ShellCommand;-><init>()V
-PLandroid/os/ShellCommand;->exec(Landroid/os/Binder;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)I
-HSPLandroid/os/SimpleClock;-><init>(Ljava/time/ZoneId;)V
 HSPLandroid/os/StatFs;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/StatFs;->doStat(Ljava/lang/String;)Landroid/system/StructStatVfs;
 HSPLandroid/os/StatFs;->getAvailableBlocks()I
@@ -17961,30 +9590,8 @@
 HSPLandroid/os/StatFs;->getBlockCountLong()J
 HSPLandroid/os/StatFs;->getBlockSize()I
 HSPLandroid/os/StatFs;->getBlockSizeLong()J
-HSPLandroid/os/StatFs;->getFreeBytes()J
 HSPLandroid/os/StatFs;->getTotalBytes()J
-HSPLandroid/os/StatFs;->restat(Ljava/lang/String;)V
-HSPLandroid/os/StatsDimensionsValue$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/StatsDimensionsValue;
-HSPLandroid/os/StatsDimensionsValue$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/os/StatsDimensionsValue;-><init>(Landroid/os/Parcel;)V
-PLandroid/os/StatsDimensionsValue;->describeContents()I
-HPLandroid/os/StatsDimensionsValue;->getField()I
-HPLandroid/os/StatsDimensionsValue;->getIntValue()I
-HPLandroid/os/StatsDimensionsValue;->getTupleValueList()Ljava/util/List;
-HPLandroid/os/StatsDimensionsValue;->isValueType(I)Z
-HSPLandroid/os/StatsDimensionsValue;->readValueFromParcel(ILandroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/os/StatsDimensionsValue;->toString()Ljava/lang/String;
-HSPLandroid/os/StatsDimensionsValue;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/os/StatsDimensionsValue;->writeValueToParcel(ILjava/lang/Object;Landroid/os/Parcel;I)Z
-PLandroid/os/StatsLogEventWrapper$1;-><init>()V
-PLandroid/os/StatsLogEventWrapper;-><clinit>()V
-HPLandroid/os/StatsLogEventWrapper;-><init>(IJJ)V
-HPLandroid/os/StatsLogEventWrapper;->writeBoolean(Z)V
-HPLandroid/os/StatsLogEventWrapper;->writeInt(I)V
-HPLandroid/os/StatsLogEventWrapper;->writeLong(J)V
-HPLandroid/os/StatsLogEventWrapper;->writeStorage([B)V
-HPLandroid/os/StatsLogEventWrapper;->writeString(Ljava/lang/String;)V
-HPLandroid/os/StatsLogEventWrapper;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/StatsServiceManager;-><init>()V
 HSPLandroid/os/StrictMode$1;->initialValue()Ljava/lang/Object;
 HSPLandroid/os/StrictMode$1;->initialValue()Ljava/util/ArrayList;
 HSPLandroid/os/StrictMode$2;->initialValue()Ljava/lang/Object;
@@ -18001,10 +9608,7 @@
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->handleViolationWithTimingAttempt(Landroid/os/StrictMode$ViolationInfo;)V
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->lambda$handleViolationWithTimingAttempt$0$StrictMode$AndroidBlockGuardPolicy(Landroid/view/IWindowManager;Ljava/util/ArrayList;)V
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onCustomSlowCall(Ljava/lang/String;)V
-PLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onExplicitGc()V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onNetwork()V
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onReadFromDisk()V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onResourceMismatch(Ljava/lang/Object;)V
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onThreadPolicyViolation(Landroid/os/StrictMode$ViolationInfo;)V
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onUnbufferedIO()V
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onWriteToDisk()V
@@ -18012,16 +9616,9 @@
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->startHandlingViolationException(Landroid/os/strictmode/Violation;)V
 HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;-><init>()V
 HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;-><init>(Landroid/os/StrictMode$1;)V
-PLandroid/os/StrictMode$AndroidCloseGuardReporter;->report(Ljava/lang/String;Ljava/lang/Throwable;)V
+HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;->report(Ljava/lang/String;Ljava/lang/Throwable;)V
 HSPLandroid/os/StrictMode$InstanceTracker;-><init>(Ljava/lang/Object;)V
 HSPLandroid/os/StrictMode$InstanceTracker;->finalize()V
-HPLandroid/os/StrictMode$Span;-><init>(Landroid/os/StrictMode$ThreadSpanState;)V
-HPLandroid/os/StrictMode$Span;->access$2000(Landroid/os/StrictMode$Span;)Landroid/os/StrictMode$Span;
-HPLandroid/os/StrictMode$Span;->access$2002(Landroid/os/StrictMode$Span;Landroid/os/StrictMode$Span;)Landroid/os/StrictMode$Span;
-HPLandroid/os/StrictMode$Span;->access$2102(Landroid/os/StrictMode$Span;Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/os/StrictMode$Span;->access$2202(Landroid/os/StrictMode$Span;J)J
-HPLandroid/os/StrictMode$Span;->access$2302(Landroid/os/StrictMode$Span;Landroid/os/StrictMode$Span;)Landroid/os/StrictMode$Span;
-HPLandroid/os/StrictMode$Span;->finish()V
 HSPLandroid/os/StrictMode$ThreadPolicy$Builder;-><init>()V
 HSPLandroid/os/StrictMode$ThreadPolicy$Builder;-><init>(Landroid/os/StrictMode$ThreadPolicy;)V
 HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->build()Landroid/os/StrictMode$ThreadPolicy;
@@ -18041,27 +9638,20 @@
 HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->permitAll()Landroid/os/StrictMode$ThreadPolicy$Builder;
 HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->permitDiskReads()Landroid/os/StrictMode$ThreadPolicy$Builder;
 HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->permitDiskWrites()Landroid/os/StrictMode$ThreadPolicy$Builder;
-HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->permitNetwork()Landroid/os/StrictMode$ThreadPolicy$Builder;
-HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->permitUnbufferedIo()Landroid/os/StrictMode$ThreadPolicy$Builder;
 HSPLandroid/os/StrictMode$ThreadPolicy;-><init>(ILandroid/os/StrictMode$OnThreadViolationListener;Ljava/util/concurrent/Executor;)V
 HSPLandroid/os/StrictMode$ThreadPolicy;-><init>(ILandroid/os/StrictMode$OnThreadViolationListener;Ljava/util/concurrent/Executor;Landroid/os/StrictMode$1;)V
 HSPLandroid/os/StrictMode$ThreadSpanState;-><init>()V
 HSPLandroid/os/StrictMode$ThreadSpanState;-><init>(Landroid/os/StrictMode$1;)V
-PLandroid/os/StrictMode$ViolationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/StrictMode$ViolationInfo;
-PLandroid/os/StrictMode$ViolationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/os/StrictMode$ViolationInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/os/StrictMode$ViolationInfo;-><init>(Landroid/os/Parcel;Z)V
 HSPLandroid/os/StrictMode$ViolationInfo;-><init>(Landroid/os/strictmode/Violation;I)V
 HSPLandroid/os/StrictMode$ViolationInfo;->access$1200(Landroid/os/StrictMode$ViolationInfo;)Landroid/os/strictmode/Violation;
 HSPLandroid/os/StrictMode$ViolationInfo;->access$500(Landroid/os/StrictMode$ViolationInfo;)I
 HSPLandroid/os/StrictMode$ViolationInfo;->addLocalStack(Ljava/lang/Throwable;)V
 HSPLandroid/os/StrictMode$ViolationInfo;->getStackTrace()Ljava/lang/String;
-HSPLandroid/os/StrictMode$ViolationInfo;->getViolationDetails()Ljava/lang/String;
 HSPLandroid/os/StrictMode$ViolationInfo;->hashCode()I
 HSPLandroid/os/StrictMode$ViolationInfo;->penaltyEnabled(I)Z
 HSPLandroid/os/StrictMode$ViolationInfo;->writeToParcel(Landroid/os/Parcel;I)V
 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;
 HSPLandroid/os/StrictMode$VmPolicy$Builder;->detectActivityLeaks()Landroid/os/StrictMode$VmPolicy$Builder;
 HSPLandroid/os/StrictMode$VmPolicy$Builder;->detectAll()Landroid/os/StrictMode$VmPolicy$Builder;
@@ -18082,6 +9672,7 @@
 HSPLandroid/os/StrictMode$VmPolicy;-><init>(ILjava/util/HashMap;Landroid/os/StrictMode$OnVmViolationListener;Ljava/util/concurrent/Executor;Landroid/os/StrictMode$1;)V
 HSPLandroid/os/StrictMode;->access$100()Ljava/util/HashMap;
 HSPLandroid/os/StrictMode;->access$1000()Ljava/lang/ThreadLocal;
+HSPLandroid/os/StrictMode;->access$1100()Landroid/os/StrictMode$ViolationLogger;
 HSPLandroid/os/StrictMode;->access$1400(ILandroid/os/StrictMode$ViolationInfo;)V
 HSPLandroid/os/StrictMode;->access$1500()Ljava/lang/ThreadLocal;
 HSPLandroid/os/StrictMode;->access$1600()Ljava/lang/ThreadLocal;
@@ -18097,19 +9688,14 @@
 HSPLandroid/os/StrictMode;->allowThreadDiskWritesMask()I
 HSPLandroid/os/StrictMode;->clearGatheredViolations()V
 HSPLandroid/os/StrictMode;->decrementExpectedActivityCount(Ljava/lang/Class;)V
-HSPLandroid/os/StrictMode;->dropboxViolationAsync(ILandroid/os/StrictMode$ViolationInfo;)V
-HPLandroid/os/StrictMode;->enterCriticalSpan(Ljava/lang/String;)Landroid/os/StrictMode$Span;
 HSPLandroid/os/StrictMode;->getThreadPolicy()Landroid/os/StrictMode$ThreadPolicy;
 HSPLandroid/os/StrictMode;->getThreadPolicyMask()I
-HSPLandroid/os/StrictMode;->getVmPolicy()Landroid/os/StrictMode$VmPolicy;
-HSPLandroid/os/StrictMode;->handleApplicationStrictModeViolation(ILandroid/os/StrictMode$ViolationInfo;)V
 HSPLandroid/os/StrictMode;->hasGatheredViolations()Z
 HSPLandroid/os/StrictMode;->incrementExpectedActivityCount(Ljava/lang/Class;)V
 HSPLandroid/os/StrictMode;->initThreadDefaults(Landroid/content/pm/ApplicationInfo;)V
 HSPLandroid/os/StrictMode;->initVmDefaults(Landroid/content/pm/ApplicationInfo;)V
 HSPLandroid/os/StrictMode;->isBundledSystemApp(Landroid/content/pm/ApplicationInfo;)Z
 HSPLandroid/os/StrictMode;->isUserKeyUnlocked(I)Z
-HSPLandroid/os/StrictMode;->lambda$dropboxViolationAsync$2(ILandroid/os/StrictMode$ViolationInfo;)V
 HSPLandroid/os/StrictMode;->lambda$static$0(Landroid/os/StrictMode$ViolationInfo;)V
 HSPLandroid/os/StrictMode;->noteSlowCall(Ljava/lang/String;)V
 HSPLandroid/os/StrictMode;->onBinderStrictModePolicyChange(I)V
@@ -18124,27 +9710,22 @@
 HSPLandroid/os/StrictMode;->setThreadPolicyMask(I)V
 HSPLandroid/os/StrictMode;->setVmPolicy(Landroid/os/StrictMode$VmPolicy;)V
 HSPLandroid/os/StrictMode;->tooManyViolationsThisLoop()Z
+HSPLandroid/os/StrictMode;->trackActivity(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/os/StrictMode;->vmClosableObjectLeaksEnabled()Z
-PLandroid/os/StrictMode;->vmContentUriWithoutPermissionEnabled()Z
-PLandroid/os/StrictMode;->vmFileUriExposureEnabled()Z
+HSPLandroid/os/StrictMode;->vmContentUriWithoutPermissionEnabled()Z
+HSPLandroid/os/StrictMode;->vmFileUriExposureEnabled()Z
 HSPLandroid/os/StrictMode;->vmImplicitDirectBootEnabled()Z
 HSPLandroid/os/StrictMode;->vmRegistrationLeaksEnabled()Z
 HSPLandroid/os/StrictMode;->vmSqliteObjectLeaksEnabled()Z
 HSPLandroid/os/StrictMode;->vmUntaggedSocketEnabled()Z
-HSPLandroid/os/StrictMode;->writeGatheredViolationsToParcel(Landroid/os/Parcel;)V
-HSPLandroid/os/SynchronousResultReceiver$Result;-><init>(ILandroid/os/Bundle;)V
-HSPLandroid/os/SynchronousResultReceiver;-><init>(Ljava/lang/String;)V
-HSPLandroid/os/SynchronousResultReceiver;->awaitResult(J)Landroid/os/SynchronousResultReceiver$Result;
-HSPLandroid/os/SynchronousResultReceiver;->getName()Ljava/lang/String;
-HSPLandroid/os/SynchronousResultReceiver;->onReceiveResult(ILandroid/os/Bundle;)V
-HSPLandroid/os/SystemClock$3;-><init>(Ljava/time/ZoneId;)V
-HSPLandroid/os/SystemClock$3;->millis()J
-HSPLandroid/os/SystemClock;->currentNetworkTimeClock()Ljava/time/Clock;
-HSPLandroid/os/SystemClock;->currentNetworkTimeMillis()J
-PLandroid/os/SystemClock;->sleep(J)V
+HSPLandroid/os/SystemClock;->sleep(J)V
+HSPLandroid/os/SystemProperties$Handle;-><init>(J)V
+HSPLandroid/os/SystemProperties$Handle;-><init>(JLandroid/os/SystemProperties$1;)V
+HSPLandroid/os/SystemProperties$Handle;->getLong(J)J
+HSPLandroid/os/SystemProperties;->access$300(JJ)J
 HSPLandroid/os/SystemProperties;->addChangeCallback(Ljava/lang/Runnable;)V
-HPLandroid/os/SystemProperties;->callChangeCallbacks()V
-HSPLandroid/os/SystemProperties;->digestOf([Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/os/SystemProperties;->callChangeCallbacks()V
+HSPLandroid/os/SystemProperties;->find(Ljava/lang/String;)Landroid/os/SystemProperties$Handle;
 HSPLandroid/os/SystemProperties;->get(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/os/SystemProperties;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/os/SystemProperties;->getBoolean(Ljava/lang/String;Z)Z
@@ -18152,800 +9733,184 @@
 HSPLandroid/os/SystemProperties;->getLong(Ljava/lang/String;J)J
 HSPLandroid/os/SystemProperties;->native_get(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/os/SystemProperties;->set(Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/os/SystemService$1;-><init>()V
-HPLandroid/os/SystemService$1;->run()V
-PLandroid/os/SystemService$State;-><clinit>()V
-PLandroid/os/SystemService$State;-><init>(Ljava/lang/String;ILjava/lang/String;)V
-PLandroid/os/SystemService;-><clinit>()V
-PLandroid/os/SystemService;->access$000()Ljava/util/HashMap;
-PLandroid/os/SystemService;->access$100()Ljava/lang/Object;
-PLandroid/os/SystemService;->getState(Ljava/lang/String;)Landroid/os/SystemService$State;
-PLandroid/os/SystemService;->isRunning(Ljava/lang/String;)Z
-PLandroid/os/SystemUpdateManager;->retrieveSystemUpdateInfo()Landroid/os/Bundle;
-HPLandroid/os/SystemUpdateManager;->updateSystemUpdateInfo(Landroid/os/PersistableBundle;)V
+HSPLandroid/os/SystemService$1;->run()V
+HSPLandroid/os/SystemService;->access$100()Ljava/lang/Object;
 HSPLandroid/os/SystemVibrator;-><init>(Landroid/content/Context;)V
-PLandroid/os/SystemVibrator;->cancel()V
 HSPLandroid/os/SystemVibrator;->hasVibrator()Z
-PLandroid/os/SystemVibrator;->vibrate(ILjava/lang/String;Landroid/os/VibrationEffect;Ljava/lang/String;Landroid/media/AudioAttributes;)V
 HSPLandroid/os/TelephonyServiceManager$ServiceRegisterer;-><init>(Landroid/os/TelephonyServiceManager;Ljava/lang/String;)V
+HSPLandroid/os/TelephonyServiceManager$ServiceRegisterer;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/TelephonyServiceManager$ServiceRegisterer;->get()Landroid/os/IBinder;
 HSPLandroid/os/TelephonyServiceManager;-><init>()V
+HSPLandroid/os/TelephonyServiceManager;->getCarrierConfigServiceRegisterer()Landroid/os/TelephonyServiceManager$ServiceRegisterer;
+HSPLandroid/os/TelephonyServiceManager;->getPhoneSubServiceRegisterer()Landroid/os/TelephonyServiceManager$ServiceRegisterer;
+HSPLandroid/os/TelephonyServiceManager;->getSubscriptionServiceRegisterer()Landroid/os/TelephonyServiceManager$ServiceRegisterer;
+HSPLandroid/os/TelephonyServiceManager;->getTelephonyRegistryServiceRegisterer()Landroid/os/TelephonyServiceManager$ServiceRegisterer;
 HSPLandroid/os/TelephonyServiceManager;->getTelephonyServiceRegisterer()Landroid/os/TelephonyServiceManager$ServiceRegisterer;
-HPLandroid/os/Temperature$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/Temperature;
-HPLandroid/os/Temperature$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/os/Temperature;-><init>(FILjava/lang/String;I)V
-HSPLandroid/os/Temperature;->getName()Ljava/lang/String;
-HSPLandroid/os/Temperature;->getStatus()I
-HSPLandroid/os/Temperature;->getType()I
-HSPLandroid/os/Temperature;->getValue()F
-HSPLandroid/os/Temperature;->isValidStatus(I)Z
-HSPLandroid/os/Temperature;->isValidType(I)Z
-PLandroid/os/Temperature;->toString()Ljava/lang/String;
-PLandroid/os/Temperature;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/ThreadLocalWorkSource;->getToken()J
 HSPLandroid/os/ThreadLocalWorkSource;->getUid()I
 HSPLandroid/os/ThreadLocalWorkSource;->lambda$static$0()Ljava/lang/Integer;
 HSPLandroid/os/ThreadLocalWorkSource;->parseUidFromToken(J)I
 HSPLandroid/os/ThreadLocalWorkSource;->restore(J)V
 HSPLandroid/os/ThreadLocalWorkSource;->setUid(I)J
-HSPLandroid/os/TokenWatcher$1;-><init>(Landroid/os/TokenWatcher;)V
-HSPLandroid/os/TokenWatcher;-><init>(Landroid/os/Handler;Ljava/lang/String;)V
-PLandroid/os/TokenWatcher;->dump(Ljava/io/PrintWriter;)V
-PLandroid/os/TokenWatcher;->dumpInternal()Ljava/util/ArrayList;
 HSPLandroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V
 HSPLandroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V
-HPLandroid/os/Trace;->beginAsyncSection(Ljava/lang/String;I)V
 HSPLandroid/os/Trace;->beginSection(Ljava/lang/String;)V
-HPLandroid/os/Trace;->endAsyncSection(Ljava/lang/String;I)V
 HSPLandroid/os/Trace;->endSection()V
 HSPLandroid/os/Trace;->isEnabled()Z
 HSPLandroid/os/Trace;->isTagEnabled(J)Z
 HSPLandroid/os/Trace;->setAppTracingAllowed(Z)V
-HPLandroid/os/Trace;->setCounter(Ljava/lang/String;J)V
 HSPLandroid/os/Trace;->setTracingEnabled(ZI)V
 HSPLandroid/os/Trace;->traceBegin(JLjava/lang/String;)V
 HSPLandroid/os/Trace;->traceCounter(JLjava/lang/String;I)V
 HSPLandroid/os/Trace;->traceEnd(J)V
-PLandroid/os/TransactionTooLargeException;-><init>(Ljava/lang/String;)V
-HPLandroid/os/UEventObserver$UEvent;-><init>(Ljava/lang/String;)V
-PLandroid/os/UEventObserver$UEvent;->get(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/os/UEventObserver$UEventThread;-><init>()V
-HSPLandroid/os/UEventObserver$UEventThread;->addObserver(Ljava/lang/String;Landroid/os/UEventObserver;)V
-HSPLandroid/os/UEventObserver$UEventThread;->run()V
-HPLandroid/os/UEventObserver$UEventThread;->sendEvent(Ljava/lang/String;)V
-HSPLandroid/os/UEventObserver;-><init>()V
-HSPLandroid/os/UEventObserver;->access$000()V
-HSPLandroid/os/UEventObserver;->access$100()Ljava/lang/String;
-HSPLandroid/os/UEventObserver;->access$200(Ljava/lang/String;)V
-HSPLandroid/os/UEventObserver;->getThread()Landroid/os/UEventObserver$UEventThread;
-HSPLandroid/os/UEventObserver;->startObserving(Ljava/lang/String;)V
-PLandroid/os/UpdateEngine$1;-><init>(Landroid/os/UpdateEngine;Landroid/os/Handler;Landroid/os/UpdateEngineCallback;)V
-PLandroid/os/UpdateEngine$1;->onStatusUpdate(IF)V
-PLandroid/os/UpdateEngine;-><init>()V
-PLandroid/os/UpdateEngine;->bind(Landroid/os/UpdateEngineCallback;)Z
-PLandroid/os/UpdateEngine;->bind(Landroid/os/UpdateEngineCallback;Landroid/os/Handler;)Z
-PLandroid/os/UpdateEngineCallback;-><init>()V
-HSPLandroid/os/UpdateLock;-><init>(Ljava/lang/String;)V
-PLandroid/os/UpdateLock;->isHeld()Z
 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
-PLandroid/os/UserHandle;->describeContents()I
 HSPLandroid/os/UserHandle;->equals(Ljava/lang/Object;)Z
-HPLandroid/os/UserHandle;->formatUid(I)Ljava/lang/String;
-HSPLandroid/os/UserHandle;->formatUid(Ljava/io/PrintWriter;I)V
-HSPLandroid/os/UserHandle;->formatUid(Ljava/lang/StringBuilder;I)V
 HSPLandroid/os/UserHandle;->getAppId(I)I
 HSPLandroid/os/UserHandle;->getCacheAppGid(I)I
 HSPLandroid/os/UserHandle;->getCacheAppGid(II)I
 HSPLandroid/os/UserHandle;->getCallingUserId()I
 HSPLandroid/os/UserHandle;->getIdentifier()I
-HSPLandroid/os/UserHandle;->getSharedAppGid(I)I
-HSPLandroid/os/UserHandle;->getSharedAppGid(II)I
 HSPLandroid/os/UserHandle;->getUid(II)I
-HSPLandroid/os/UserHandle;->getUserGid(I)I
 HSPLandroid/os/UserHandle;->getUserHandleForUid(I)Landroid/os/UserHandle;
 HSPLandroid/os/UserHandle;->getUserId(I)I
 HSPLandroid/os/UserHandle;->hashCode()I
 HSPLandroid/os/UserHandle;->isApp(I)Z
 HSPLandroid/os/UserHandle;->isCore(I)Z
-HSPLandroid/os/UserHandle;->isIsolated(I)Z
-HSPLandroid/os/UserHandle;->isOwner()Z
 HSPLandroid/os/UserHandle;->isSameApp(II)Z
-HSPLandroid/os/UserHandle;->isSameUser(II)Z
-HSPLandroid/os/UserHandle;->isSystem()Z
 HSPLandroid/os/UserHandle;->myUserId()I
 HSPLandroid/os/UserHandle;->of(I)Landroid/os/UserHandle;
-PLandroid/os/UserHandle;->parseUserArg(Ljava/lang/String;)I
-PLandroid/os/UserHandle;->readFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;
+HSPLandroid/os/UserHandle;->readFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;
 HSPLandroid/os/UserHandle;->toString()Ljava/lang/String;
 HSPLandroid/os/UserHandle;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/os/UserHandle;->writeToParcel(Landroid/os/UserHandle;Landroid/os/Parcel;)V
+HSPLandroid/os/UserHandle;->writeToParcel(Landroid/os/UserHandle;Landroid/os/Parcel;)V
 HSPLandroid/os/UserManager;-><init>(Landroid/content/Context;Landroid/os/IUserManager;)V
-HSPLandroid/os/UserManager;->addUserRestrictionsListener(Landroid/os/IUserRestrictionsListener;)V
 HSPLandroid/os/UserManager;->get(Landroid/content/Context;)Landroid/os/UserManager;
 HSPLandroid/os/UserManager;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
-HPLandroid/os/UserManager;->getApplicationRestrictions(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/os/Bundle;
-HSPLandroid/os/UserManager;->getBadgedLabelForUser(Ljava/lang/CharSequence;Landroid/os/UserHandle;)Ljava/lang/CharSequence;
-HSPLandroid/os/UserManager;->getCredentialOwnerProfile(I)I
-PLandroid/os/UserManager;->getEnabledProfileIds(I)[I
-HSPLandroid/os/UserManager;->getEnabledProfiles(I)Ljava/util/List;
 HSPLandroid/os/UserManager;->getMaxSupportedUsers()I
-HSPLandroid/os/UserManager;->getPrimaryUser()Landroid/content/pm/UserInfo;
 HSPLandroid/os/UserManager;->getProfileIds(IZ)[I
 HSPLandroid/os/UserManager;->getProfileIdsWithDisabled(I)[I
 HSPLandroid/os/UserManager;->getProfileParent(I)Landroid/content/pm/UserInfo;
-HSPLandroid/os/UserManager;->getProfileParent(Landroid/os/UserHandle;)Landroid/os/UserHandle;
 HSPLandroid/os/UserManager;->getProfiles(I)Ljava/util/List;
 HSPLandroid/os/UserManager;->getSerialNumberForUser(Landroid/os/UserHandle;)J
-HSPLandroid/os/UserManager;->getSerialNumbersOfUsers(Z)[J
-HSPLandroid/os/UserManager;->getUserBadgeColor(I)I
-HPLandroid/os/UserManager;->getUserBadgeNoBackgroundResId(I)I
-HSPLandroid/os/UserManager;->getUserCount()I
-HSPLandroid/os/UserManager;->getUserCreationTime(Landroid/os/UserHandle;)J
 HSPLandroid/os/UserManager;->getUserForSerialNumber(J)Landroid/os/UserHandle;
 HSPLandroid/os/UserManager;->getUserHandle()I
 HSPLandroid/os/UserManager;->getUserHandle(I)I
-HSPLandroid/os/UserManager;->getUserIcon()Landroid/graphics/Bitmap;
-HSPLandroid/os/UserManager;->getUserIcon(I)Landroid/graphics/Bitmap;
-HSPLandroid/os/UserManager;->getUserIconBadgeResId(I)I
 HSPLandroid/os/UserManager;->getUserInfo(I)Landroid/content/pm/UserInfo;
-HSPLandroid/os/UserManager;->getUserName()Ljava/lang/String;
 HSPLandroid/os/UserManager;->getUserProfiles()Ljava/util/List;
-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;
 HSPLandroid/os/UserManager;->getUserSerialNumber(I)I
-HSPLandroid/os/UserManager;->getUserStartRealtime()J
-HSPLandroid/os/UserManager;->getUserUnlockRealtime()J
 HSPLandroid/os/UserManager;->getUsers()Ljava/util/List;
 HSPLandroid/os/UserManager;->getUsers(Z)Ljava/util/List;
 HSPLandroid/os/UserManager;->getUsers(ZZZ)Ljava/util/List;
 HSPLandroid/os/UserManager;->hasBadge(I)Z
-HSPLandroid/os/UserManager;->hasBaseUserRestriction(Ljava/lang/String;Landroid/os/UserHandle;)Z
 HSPLandroid/os/UserManager;->hasUserRestriction(Ljava/lang/String;)Z
 HSPLandroid/os/UserManager;->hasUserRestriction(Ljava/lang/String;Landroid/os/UserHandle;)Z
 HSPLandroid/os/UserManager;->hasUserRestrictionForUser(Ljava/lang/String;Landroid/os/UserHandle;)Z
-HSPLandroid/os/UserManager;->isAdminUser()Z
 HSPLandroid/os/UserManager;->isDemoUser()Z
 HSPLandroid/os/UserManager;->isDeviceInDemoMode(Landroid/content/Context;)Z
-HSPLandroid/os/UserManager;->isGuestUser()Z
-HPLandroid/os/UserManager;->isGuestUser(I)Z
 HSPLandroid/os/UserManager;->isHeadlessSystemUserMode()Z
-HSPLandroid/os/UserManager;->isLinkedUser()Z
 HSPLandroid/os/UserManager;->isManagedProfile()Z
 HSPLandroid/os/UserManager;->isManagedProfile(I)Z
-PLandroid/os/UserManager;->isPrimaryUser()Z
-HSPLandroid/os/UserManager;->isProfile()Z
 HSPLandroid/os/UserManager;->isProfile(I)Z
-HSPLandroid/os/UserManager;->isQuietModeEnabled(Landroid/os/UserHandle;)Z
-HSPLandroid/os/UserManager;->isRestrictedProfile()Z
-HSPLandroid/os/UserManager;->isRestrictedProfile(Landroid/os/UserHandle;)Z
-PLandroid/os/UserManager;->isSameProfileGroup(II)Z
-PLandroid/os/UserManager;->isSameProfileGroup(Landroid/os/UserHandle;Landroid/os/UserHandle;)Z
-HSPLandroid/os/UserManager;->isSettingRestrictedForUser(Ljava/lang/String;ILjava/lang/String;I)Z
-PLandroid/os/UserManager;->isSplitSystemUser()Z
 HSPLandroid/os/UserManager;->isSystemUser()Z
-HSPLandroid/os/UserManager;->isUserAdmin(I)Z
 HSPLandroid/os/UserManager;->isUserRunning(I)Z
 HSPLandroid/os/UserManager;->isUserRunning(Landroid/os/UserHandle;)Z
-HSPLandroid/os/UserManager;->isUserSwitcherEnabled()Z
-PLandroid/os/UserManager;->isUserTypeDemo(Ljava/lang/String;)Z
-PLandroid/os/UserManager;->isUserTypeGuest(Ljava/lang/String;)Z
+HSPLandroid/os/UserManager;->isUserTypeGuest(Ljava/lang/String;)Z
 HSPLandroid/os/UserManager;->isUserTypeManagedProfile(Ljava/lang/String;)Z
-HPLandroid/os/UserManager;->isUserTypeRestricted(Ljava/lang/String;)Z
+HSPLandroid/os/UserManager;->isUserTypeRestricted(Ljava/lang/String;)Z
 HSPLandroid/os/UserManager;->isUserUnlocked()Z
 HSPLandroid/os/UserManager;->isUserUnlocked(I)Z
 HSPLandroid/os/UserManager;->isUserUnlocked(Landroid/os/UserHandle;)Z
 HSPLandroid/os/UserManager;->isUserUnlockingOrUnlocked(I)Z
-HPLandroid/os/UserManager;->isUserUnlockingOrUnlocked(Landroid/os/UserHandle;)Z
-HPLandroid/os/UserManager;->setApplicationRestrictions(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;)V
 HSPLandroid/os/UserManager;->supportsMultipleUsers()Z
-PLandroid/os/VibrationEffect$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/VibrationEffect;
-PLandroid/os/VibrationEffect$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/os/VibrationEffect$OneShot;-><init>(JI)V
-PLandroid/os/VibrationEffect$OneShot;-><init>(Landroid/os/Parcel;)V
-PLandroid/os/VibrationEffect$OneShot;->getAmplitude()I
-PLandroid/os/VibrationEffect$OneShot;->getDuration()J
-PLandroid/os/VibrationEffect$OneShot;->resolve(I)Landroid/os/VibrationEffect$OneShot;
-PLandroid/os/VibrationEffect$OneShot;->scale(FI)Landroid/os/VibrationEffect$OneShot;
-PLandroid/os/VibrationEffect$OneShot;->toString()Ljava/lang/String;
-HSPLandroid/os/VibrationEffect$OneShot;->validate()V
-HSPLandroid/os/VibrationEffect$Prebaked;-><init>(IZ)V
-PLandroid/os/VibrationEffect$Prebaked;-><init>(Landroid/os/Parcel;)V
-PLandroid/os/VibrationEffect$Prebaked;->getDuration()J
-PLandroid/os/VibrationEffect$Prebaked;->getEffectStrength()I
-PLandroid/os/VibrationEffect$Prebaked;->getId()I
-HSPLandroid/os/VibrationEffect$Prebaked;->isValidEffectStrength(I)Z
-PLandroid/os/VibrationEffect$Prebaked;->setEffectStrength(I)V
-PLandroid/os/VibrationEffect$Prebaked;->toString()Ljava/lang/String;
-HSPLandroid/os/VibrationEffect$Prebaked;->validate()V
-HPLandroid/os/VibrationEffect$Prebaked;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/os/VibrationEffect$Waveform;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/os/VibrationEffect$Waveform;-><init>([J[II)V
-PLandroid/os/VibrationEffect$Waveform;->getAmplitudes()[I
-PLandroid/os/VibrationEffect$Waveform;->getDuration()J
-PLandroid/os/VibrationEffect$Waveform;->getRepeatIndex()I
-PLandroid/os/VibrationEffect$Waveform;->getTimings()[J
-HSPLandroid/os/VibrationEffect$Waveform;->hasNonZeroEntry([J)Z
-PLandroid/os/VibrationEffect$Waveform;->resolve(I)Landroid/os/VibrationEffect$Waveform;
-PLandroid/os/VibrationEffect$Waveform;->scale(FI)Landroid/os/VibrationEffect$Waveform;
-PLandroid/os/VibrationEffect$Waveform;->toString()Ljava/lang/String;
-HSPLandroid/os/VibrationEffect$Waveform;->validate()V
+HSPLandroid/os/VibrationAttributes$1;-><init>()V
+HSPLandroid/os/VibrationAttributes$Builder;->build()Landroid/os/VibrationAttributes;
+HSPLandroid/os/VibrationAttributes;-><clinit>()V
+HSPLandroid/os/VibrationAttributes;-><init>(IILandroid/media/AudioAttributes;)V
+HSPLandroid/os/VibrationAttributes;-><init>(IILandroid/media/AudioAttributes;Landroid/os/VibrationAttributes$1;)V
 HSPLandroid/os/VibrationEffect;-><init>()V
-HSPLandroid/os/VibrationEffect;->createOneShot(JI)Landroid/os/VibrationEffect;
-HPLandroid/os/VibrationEffect;->createPredefined(I)Landroid/os/VibrationEffect;
-HSPLandroid/os/VibrationEffect;->createWaveform([JI)Landroid/os/VibrationEffect;
-HSPLandroid/os/VibrationEffect;->createWaveform([J[II)Landroid/os/VibrationEffect;
-HSPLandroid/os/VibrationEffect;->get(I)Landroid/os/VibrationEffect;
-HSPLandroid/os/VibrationEffect;->get(IZ)Landroid/os/VibrationEffect;
-PLandroid/os/VibrationEffect;->scale(IFI)I
-HSPLandroid/os/Vibrator;-><init>()V
 HSPLandroid/os/Vibrator;-><init>(Landroid/content/Context;)V
-HSPLandroid/os/Vibrator;->getDefaultHapticFeedbackIntensity()I
-HSPLandroid/os/Vibrator;->getDefaultNotificationVibrationIntensity()I
-HSPLandroid/os/Vibrator;->getDefaultRingVibrationIntensity()I
 HSPLandroid/os/Vibrator;->loadDefaultIntensity(Landroid/content/Context;I)I
 HSPLandroid/os/Vibrator;->loadVibrationIntensities(Landroid/content/Context;)V
-PLandroid/os/Vibrator;->vibrate(Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;)V
 HSPLandroid/os/WorkSource$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/WorkSource;
 HSPLandroid/os/WorkSource$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/os/WorkSource$WorkChain$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/WorkSource$WorkChain;
-HPLandroid/os/WorkSource$WorkChain$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSLandroid/os/WorkSource$WorkChain;-><init>()V
-PLandroid/os/WorkSource$WorkChain;-><init>(Landroid/os/Parcel;)V
-PLandroid/os/WorkSource$WorkChain;-><init>(Landroid/os/Parcel;Landroid/os/WorkSource$1;)V
-HSPLandroid/os/WorkSource$WorkChain;-><init>(Landroid/os/WorkSource$WorkChain;)V
-HSPLandroid/os/WorkSource$WorkChain;->addNode(ILjava/lang/String;)Landroid/os/WorkSource$WorkChain;
-HSPLandroid/os/WorkSource$WorkChain;->equals(Ljava/lang/Object;)Z
-PLandroid/os/WorkSource$WorkChain;->getAttributionUid()I
-PLandroid/os/WorkSource$WorkChain;->getTags()[Ljava/lang/String;
-PLandroid/os/WorkSource$WorkChain;->getUids()[I
-HSPLandroid/os/WorkSource$WorkChain;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/WorkSource;-><init>()V
-HSPLandroid/os/WorkSource;-><init>(I)V
 HSPLandroid/os/WorkSource;-><init>(ILjava/lang/String;)V
 HSPLandroid/os/WorkSource;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/os/WorkSource;-><init>(Landroid/os/WorkSource;)V
-PLandroid/os/WorkSource;->add(I)Z
-HSPLandroid/os/WorkSource;->add(ILjava/lang/String;)Z
 HSPLandroid/os/WorkSource;->add(Landroid/os/WorkSource;)Z
-PLandroid/os/WorkSource;->addWork(Landroid/os/WorkSource;ILjava/lang/String;)Landroid/os/WorkSource;
-PLandroid/os/WorkSource;->clearNames()V
-PLandroid/os/WorkSource;->compare(Landroid/os/WorkSource;II)I
-HSPLandroid/os/WorkSource;->createWorkChain()Landroid/os/WorkSource$WorkChain;
-HSPLandroid/os/WorkSource;->diff(Landroid/os/WorkSource;)Z
-HPLandroid/os/WorkSource;->diffChains(Landroid/os/WorkSource;Landroid/os/WorkSource;)[Ljava/util/ArrayList;
-PLandroid/os/WorkSource;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLandroid/os/WorkSource;->equals(Ljava/lang/Object;)Z
-HPLandroid/os/WorkSource;->get(I)I
-HPLandroid/os/WorkSource;->getAttributionUid()I
-HSPLandroid/os/WorkSource;->getName(I)Ljava/lang/String;
 HSPLandroid/os/WorkSource;->getPackageName(I)Ljava/lang/String;
 HSPLandroid/os/WorkSource;->getUid(I)I
-HSPLandroid/os/WorkSource;->getWorkChains()Ljava/util/List;
-HSPLandroid/os/WorkSource;->hashCode()I
-PLandroid/os/WorkSource;->insert(II)V
 HSPLandroid/os/WorkSource;->insert(IILjava/lang/String;)V
-HSPLandroid/os/WorkSource;->isChainedBatteryAttributionEnabled(Landroid/content/Context;)Z
 HSPLandroid/os/WorkSource;->isEmpty()Z
-HSPLandroid/os/WorkSource;->remove(Landroid/os/WorkSource;)Z
-HSPLandroid/os/WorkSource;->removeUidsAndNames(Landroid/os/WorkSource;)Z
-PLandroid/os/WorkSource;->set(I)V
-HSPLandroid/os/WorkSource;->set(Landroid/os/WorkSource;)V
-PLandroid/os/WorkSource;->setReturningDiffs(Landroid/os/WorkSource;)[Landroid/os/WorkSource;
 HSPLandroid/os/WorkSource;->size()I
-PLandroid/os/WorkSource;->toString()Ljava/lang/String;
 HSPLandroid/os/WorkSource;->updateLocked(Landroid/os/WorkSource;ZZ)Z
 HSPLandroid/os/WorkSource;->updateUidsAndNamesLocked(Landroid/os/WorkSource;ZZ)Z
-HSPLandroid/os/WorkSource;->updateUidsLocked(Landroid/os/WorkSource;ZZ)Z
-HPLandroid/os/WorkSource;->withoutNames()Landroid/os/WorkSource;
 HSPLandroid/os/WorkSource;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/os/ZygoteProcess$ZygoteState;-><init>(Landroid/net/LocalSocketAddress;Landroid/net/LocalSocketAddress;Landroid/net/LocalSocket;Ljava/io/DataInputStream;Ljava/io/BufferedWriter;Ljava/util/List;)V
-HSPLandroid/os/ZygoteProcess$ZygoteState;->close()V
-HSPLandroid/os/ZygoteProcess$ZygoteState;->connect(Landroid/net/LocalSocketAddress;Landroid/net/LocalSocketAddress;)Landroid/os/ZygoteProcess$ZygoteState;
-HSPLandroid/os/ZygoteProcess$ZygoteState;->isClosed()Z
-HSPLandroid/os/ZygoteProcess$ZygoteState;->matches(Ljava/lang/String;)Z
-HSPLandroid/os/ZygoteProcess;-><init>(Landroid/net/LocalSocketAddress;Landroid/net/LocalSocketAddress;)V
-HSPLandroid/os/ZygoteProcess;->access$000(Ljava/io/BufferedWriter;Ljava/io/DataInputStream;)Ljava/util/List;
-HSPLandroid/os/ZygoteProcess;->attemptConnectionToPrimaryZygote()V
-HSPLandroid/os/ZygoteProcess;->attemptConnectionToSecondaryZygote()V
-HSPLandroid/os/ZygoteProcess;->attemptZygoteSendArgsAndGetResult(Landroid/os/ZygoteProcess$ZygoteState;Ljava/lang/String;)Landroid/os/Process$ProcessStartResult;
-PLandroid/os/ZygoteProcess;->bootCompleted()V
-PLandroid/os/ZygoteProcess;->bootCompleted(Ljava/lang/String;)V
-PLandroid/os/ZygoteProcess;->close()V
-PLandroid/os/ZygoteProcess;->establishZygoteConnectionForAbi(Ljava/lang/String;)V
-HSPLandroid/os/ZygoteProcess;->fetchUsapPoolEnabledProp()Z
-HSPLandroid/os/ZygoteProcess;->fetchUsapPoolEnabledPropWithMinInterval()Z
-HSPLandroid/os/ZygoteProcess;->getAbiList(Ljava/io/BufferedWriter;Ljava/io/DataInputStream;)Ljava/util/List;
-HSPLandroid/os/ZygoteProcess;->getPrimarySocketAddress()Landroid/net/LocalSocketAddress;
-HSPLandroid/os/ZygoteProcess;->maybeSetApiBlacklistExemptions(Landroid/os/ZygoteProcess$ZygoteState;Z)Z
-HSPLandroid/os/ZygoteProcess;->maybeSetHiddenApiAccessLogSampleRate(Landroid/os/ZygoteProcess$ZygoteState;)V
-PLandroid/os/ZygoteProcess;->maybeSetHiddenApiAccessStatslogSampleRate(Landroid/os/ZygoteProcess$ZygoteState;)V
-HSPLandroid/os/ZygoteProcess;->openZygoteSocketIfNeeded(Ljava/lang/String;)Landroid/os/ZygoteProcess$ZygoteState;
-HSPLandroid/os/ZygoteProcess;->preloadApp(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;)Z
-HSPLandroid/os/ZygoteProcess;->preloadDefault(Ljava/lang/String;)Z
-PLandroid/os/ZygoteProcess;->setHiddenApiAccessLogSampleRate(I)V
-PLandroid/os/ZygoteProcess;->setHiddenApiAccessStatslogSampleRate(I)V
-HSPLandroid/os/ZygoteProcess;->start(Ljava/lang/String;Ljava/lang/String;II[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[J[Ljava/lang/String;)Landroid/os/Process$ProcessStartResult;
-HSPLandroid/os/ZygoteProcess;->startChildZygote(Ljava/lang/String;Ljava/lang/String;II[IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)Landroid/os/ChildZygoteProcess;
-HSPLandroid/os/ZygoteProcess;->startViaZygote(Ljava/lang/String;Ljava/lang/String;II[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;ZZ[J[Ljava/lang/String;)Landroid/os/Process$ProcessStartResult;
-HSPLandroid/os/ZygoteProcess;->waitForConnectionToZygote(Landroid/net/LocalSocketAddress;)V
-HSPLandroid/os/ZygoteProcess;->waitForConnectionToZygote(Ljava/lang/String;)V
-HSPLandroid/os/ZygoteProcess;->zygoteSendArgsAndGetResult(Landroid/os/ZygoteProcess$ZygoteState;ZLjava/util/ArrayList;)Landroid/os/Process$ProcessStartResult;
-HPLandroid/os/connectivity/CellularBatteryStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/connectivity/CellularBatteryStats;
-HPLandroid/os/connectivity/CellularBatteryStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/os/connectivity/CellularBatteryStats;-><init>()V
-HPLandroid/os/connectivity/CellularBatteryStats;-><init>(Landroid/os/Parcel;)V
-HPLandroid/os/connectivity/CellularBatteryStats;->getEnergyConsumedMaMillis()J
-HPLandroid/os/connectivity/CellularBatteryStats;->getIdleTimeMillis()J
-HPLandroid/os/connectivity/CellularBatteryStats;->getKernelActiveTimeMillis()J
-HPLandroid/os/connectivity/CellularBatteryStats;->getLoggingDurationMillis()J
-HPLandroid/os/connectivity/CellularBatteryStats;->getMonitoredRailChargeConsumedMaMillis()J
-HPLandroid/os/connectivity/CellularBatteryStats;->getNumBytesRx()J
-HPLandroid/os/connectivity/CellularBatteryStats;->getNumBytesTx()J
-HPLandroid/os/connectivity/CellularBatteryStats;->getNumPacketsRx()J
-HPLandroid/os/connectivity/CellularBatteryStats;->getNumPacketsTx()J
-HPLandroid/os/connectivity/CellularBatteryStats;->getRxTimeMillis()J
-HPLandroid/os/connectivity/CellularBatteryStats;->getSleepTimeMillis()J
-HPLandroid/os/connectivity/CellularBatteryStats;->getTimeInRatMicros()[J
-HPLandroid/os/connectivity/CellularBatteryStats;->getTimeInRxSignalStrengthLevelMicros()[J
-HPLandroid/os/connectivity/CellularBatteryStats;->getTxTimeMillis()[J
-HPLandroid/os/connectivity/CellularBatteryStats;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/os/connectivity/CellularBatteryStats;->setEnergyConsumedMaMillis(J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setIdleTimeMillis(J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setKernelActiveTimeMillis(J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setLoggingDurationMillis(J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setMonitoredRailChargeConsumedMaMillis(J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setNumBytesRx(J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setNumBytesTx(J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setNumPacketsRx(J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setNumPacketsTx(J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setRxTimeMillis(J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setSleepTimeMillis(J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setTimeInRatMicros([J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setTimeInRxSignalStrengthLevelMicros([J)V
-PLandroid/os/connectivity/CellularBatteryStats;->setTxTimeMillis([J)V
-HPLandroid/os/connectivity/CellularBatteryStats;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/os/connectivity/GpsBatteryStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/connectivity/GpsBatteryStats;
-HPLandroid/os/connectivity/GpsBatteryStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/os/connectivity/GpsBatteryStats;-><init>()V
-HPLandroid/os/connectivity/GpsBatteryStats;-><init>(Landroid/os/Parcel;)V
-HPLandroid/os/connectivity/GpsBatteryStats;-><init>(Landroid/os/Parcel;Landroid/os/connectivity/GpsBatteryStats$1;)V
-PLandroid/os/connectivity/GpsBatteryStats;->getEnergyConsumedMaMs()J
-PLandroid/os/connectivity/GpsBatteryStats;->getLoggingDurationMs()J
-PLandroid/os/connectivity/GpsBatteryStats;->getTimeInGpsSignalQualityLevel()[J
-PLandroid/os/connectivity/GpsBatteryStats;->initialize()V
-HPLandroid/os/connectivity/GpsBatteryStats;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/os/connectivity/GpsBatteryStats;->setEnergyConsumedMaMs(J)V
-PLandroid/os/connectivity/GpsBatteryStats;->setLoggingDurationMs(J)V
-PLandroid/os/connectivity/GpsBatteryStats;->setTimeInGpsSignalQualityLevel([J)V
-PLandroid/os/connectivity/GpsBatteryStats;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/os/connectivity/WifiActivityEnergyInfo$1;-><init>()V
-HSPLandroid/os/connectivity/WifiActivityEnergyInfo;-><clinit>()V
-HSPLandroid/os/connectivity/WifiActivityEnergyInfo;-><init>(JIJJJJ)V
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->getControllerEnergyUsedMicroJoules()J
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->getControllerIdleDurationMillis()J
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->getControllerRxDurationMillis()J
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->getControllerScanDurationMillis()J
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->getControllerTxDurationMillis()J
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->getStackState()I
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->getTimeSinceBootMillis()J
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->isValid()Z
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->setControllerEnergyUsedMicroJoules(J)V
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->setControllerIdleDurationMillis(J)V
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->setControllerRxDurationMillis(J)V
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->setControllerScanDurationMillis(J)V
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->setControllerTxDurationMillis(J)V
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->setStackState(I)V
-PLandroid/os/connectivity/WifiActivityEnergyInfo;->setTimeSinceBootMillis(J)V
-HPLandroid/os/connectivity/WifiActivityEnergyInfo;->toString()Ljava/lang/String;
-HPLandroid/os/connectivity/WifiBatteryStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/connectivity/WifiBatteryStats;
-HPLandroid/os/connectivity/WifiBatteryStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/os/connectivity/WifiBatteryStats;-><init>()V
-HPLandroid/os/connectivity/WifiBatteryStats;-><init>(Landroid/os/Parcel;)V
-HPLandroid/os/connectivity/WifiBatteryStats;-><init>(Landroid/os/Parcel;Landroid/os/connectivity/WifiBatteryStats$1;)V
-PLandroid/os/connectivity/WifiBatteryStats;->getEnergyConsumedMaMillis()J
-PLandroid/os/connectivity/WifiBatteryStats;->getIdleTimeMillis()J
-PLandroid/os/connectivity/WifiBatteryStats;->getKernelActiveTimeMillis()J
-PLandroid/os/connectivity/WifiBatteryStats;->getLoggingDurationMillis()J
-PLandroid/os/connectivity/WifiBatteryStats;->getMonitoredRailChargeConsumedMaMillis()J
-HPLandroid/os/connectivity/WifiBatteryStats;->getNumAppScanRequest()J
-PLandroid/os/connectivity/WifiBatteryStats;->getNumBytesTx()J
-PLandroid/os/connectivity/WifiBatteryStats;->getNumPacketsRx()J
-PLandroid/os/connectivity/WifiBatteryStats;->getNumPacketsTx()J
-PLandroid/os/connectivity/WifiBatteryStats;->getRxTimeMillis()J
-PLandroid/os/connectivity/WifiBatteryStats;->getScanTimeMillis()J
-PLandroid/os/connectivity/WifiBatteryStats;->getSleepTimeMillis()J
-PLandroid/os/connectivity/WifiBatteryStats;->getTxTimeMillis()J
-HPLandroid/os/connectivity/WifiBatteryStats;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/os/connectivity/WifiBatteryStats;->setEnergyConsumedMaMillis(J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setIdleTimeMillis(J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setKernelActiveTimeMillis(J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setLoggingDurationMillis(J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setMonitoredRailChargeConsumedMaMillis(J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setNumAppScanRequest(J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setNumBytesRx(J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setNumBytesTx(J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setNumPacketsRx(J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setNumPacketsTx(J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setRxTimeMillis(J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setScanTimeMillis(J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setSleepTimeMillis(J)V
-HPLandroid/os/connectivity/WifiBatteryStats;->setTimeInRxSignalStrengthLevelMillis([J)V
-HPLandroid/os/connectivity/WifiBatteryStats;->setTimeInStateMillis([J)V
-HPLandroid/os/connectivity/WifiBatteryStats;->setTimeInSupplicantStateMillis([J)V
-PLandroid/os/connectivity/WifiBatteryStats;->setTxTimeMillis(J)V
-HPLandroid/os/connectivity/WifiBatteryStats;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/os/health/HealthKeys$Constants;-><init>(Ljava/lang/Class;)V
-PLandroid/os/health/HealthKeys$Constants;->getDataType()Ljava/lang/String;
-HPLandroid/os/health/HealthKeys$Constants;->getIndex(II)I
-HPLandroid/os/health/HealthKeys$Constants;->getKeys(I)[I
-HPLandroid/os/health/HealthKeys$Constants;->getSize(I)I
-PLandroid/os/health/HealthKeys$SortedIntArray;-><init>(I)V
-PLandroid/os/health/HealthKeys$SortedIntArray;->addValue(I)V
-PLandroid/os/health/HealthKeys$SortedIntArray;->getArray()[I
-HPLandroid/os/health/HealthStats;-><init>(Landroid/os/Parcel;)V
-HPLandroid/os/health/HealthStats;->getIndex([II)I
-HPLandroid/os/health/HealthStats;->getMeasurement(I)J
-HPLandroid/os/health/HealthStats;->getMeasurements(I)Ljava/util/Map;
-HPLandroid/os/health/HealthStats;->getStats(I)Ljava/util/Map;
-HPLandroid/os/health/HealthStats;->getTimer(I)Landroid/os/health/TimerStat;
-HPLandroid/os/health/HealthStats;->getTimers(I)Ljava/util/Map;
-HPLandroid/os/health/HealthStats;->hasMeasurement(I)Z
-HPLandroid/os/health/HealthStats;->hasMeasurements(I)Z
-HPLandroid/os/health/HealthStats;->hasStats(I)Z
-HPLandroid/os/health/HealthStats;->hasTimer(I)Z
-HPLandroid/os/health/HealthStats;->hasTimers(I)Z
-HPLandroid/os/health/HealthStatsParceler$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/health/HealthStatsParceler;
-HPLandroid/os/health/HealthStatsParceler$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/os/health/HealthStatsParceler;->getHealthStats()Landroid/os/health/HealthStats;
-PLandroid/os/health/HealthStatsParceler;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/os/health/HealthStatsWriter;-><init>(Landroid/os/health/HealthKeys$Constants;)V
-HPLandroid/os/health/HealthStatsWriter;->addMeasurement(IJ)V
-PLandroid/os/health/HealthStatsWriter;->addMeasurements(ILjava/lang/String;J)V
-PLandroid/os/health/HealthStatsWriter;->addStats(ILjava/lang/String;Landroid/os/health/HealthStatsWriter;)V
-PLandroid/os/health/HealthStatsWriter;->addTimer(IIJ)V
-PLandroid/os/health/HealthStatsWriter;->addTimers(ILjava/lang/String;Landroid/os/health/TimerStat;)V
-PLandroid/os/health/HealthStatsWriter;->countBooleanArray([Z)I
-PLandroid/os/health/HealthStatsWriter;->countObjectArray([Ljava/lang/Object;)I
-HPLandroid/os/health/HealthStatsWriter;->flattenToParcel(Landroid/os/Parcel;)V
-PLandroid/os/health/HealthStatsWriter;->writeHealthStatsWriterMap(Landroid/os/Parcel;Landroid/util/ArrayMap;)V
-PLandroid/os/health/HealthStatsWriter;->writeLongsMap(Landroid/os/Parcel;Landroid/util/ArrayMap;)V
-PLandroid/os/health/HealthStatsWriter;->writeParcelableMap(Landroid/os/Parcel;Landroid/util/ArrayMap;)V
-PLandroid/os/health/PackageHealthStats;-><clinit>()V
-PLandroid/os/health/PidHealthStats;-><clinit>()V
-PLandroid/os/health/ProcessHealthStats;-><clinit>()V
-PLandroid/os/health/ServiceHealthStats;-><clinit>()V
-HPLandroid/os/health/SystemHealthManager;-><init>(Lcom/android/internal/app/IBatteryStats;)V
-HPLandroid/os/health/SystemHealthManager;->takeMyUidSnapshot()Landroid/os/health/HealthStats;
-HPLandroid/os/health/SystemHealthManager;->takeUidSnapshot(I)Landroid/os/health/HealthStats;
-HPLandroid/os/health/TimerStat$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/health/TimerStat;
-HPLandroid/os/health/TimerStat$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/os/health/TimerStat;-><init>(IJ)V
-HPLandroid/os/health/TimerStat;->getCount()I
-HPLandroid/os/health/TimerStat;->getTime()J
-PLandroid/os/health/TimerStat;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/os/health/UidHealthStats;-><clinit>()V
-HSPLandroid/os/image/IDynamicSystemService$Stub;-><init>()V
-PLandroid/os/image/IDynamicSystemService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/os/image/IDynamicSystemService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/os/incremental/IncrementalManager;->isIncrementalPath(Ljava/lang/String;)Z
+HSPLandroid/os/health/TimerStat;-><init>(IJ)V
 HSPLandroid/os/storage/IObbActionListener$Stub;-><init>()V
-PLandroid/os/storage/IStorageEventListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/storage/IStorageEventListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/os/storage/IStorageEventListener$Stub$Proxy;->onStorageStateChanged(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/os/storage/IStorageEventListener$Stub$Proxy;->onVolumeStateChanged(Landroid/os/storage/VolumeInfo;II)V
 HSPLandroid/os/storage/IStorageEventListener$Stub;-><init>()V
 HSPLandroid/os/storage/IStorageEventListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/os/storage/IStorageEventListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/storage/IStorageEventListener;
 HSPLandroid/os/storage/IStorageManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/os/storage/IStorageManager$Stub$Proxy;->allocateBytes(Ljava/lang/String;JILjava/lang/String;)V
-HPLandroid/os/storage/IStorageManager$Stub$Proxy;->getAllocatableBytes(Ljava/lang/String;ILjava/lang/String;)J
-HSPLandroid/os/storage/IStorageManager$Stub$Proxy;->getCacheQuotaBytes(Ljava/lang/String;I)J
-HSPLandroid/os/storage/IStorageManager$Stub$Proxy;->getCacheSizeBytes(Ljava/lang/String;I)J
 HSPLandroid/os/storage/IStorageManager$Stub$Proxy;->getVolumeList(ILjava/lang/String;I)[Landroid/os/storage/StorageVolume;
-HSPLandroid/os/storage/IStorageManager$Stub$Proxy;->getVolumeRecords(I)[Landroid/os/storage/VolumeRecord;
-HSPLandroid/os/storage/IStorageManager$Stub$Proxy;->getVolumes(I)[Landroid/os/storage/VolumeInfo;
 HSPLandroid/os/storage/IStorageManager$Stub$Proxy;->isUserKeyUnlocked(I)Z
-HSPLandroid/os/storage/IStorageManager$Stub$Proxy;->registerListener(Landroid/os/storage/IStorageEventListener;)V
-HSPLandroid/os/storage/IStorageManager$Stub;-><init>()V
 HSPLandroid/os/storage/IStorageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/storage/IStorageManager;
-PLandroid/os/storage/IStorageManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/os/storage/IStorageManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/os/storage/StorageEventListener;-><init>()V
-PLandroid/os/storage/StorageEventListener;->onStorageStateChanged(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/os/storage/StorageManager$ObbActionListener;-><init>(Landroid/os/storage/StorageManager;)V
 HSPLandroid/os/storage/StorageManager$ObbActionListener;-><init>(Landroid/os/storage/StorageManager;Landroid/os/storage/StorageManager$1;)V
-HSPLandroid/os/storage/StorageManager$StorageEventListenerDelegate;-><init>(Landroid/os/storage/StorageEventListener;Landroid/os/Looper;)V
-PLandroid/os/storage/StorageManager$StorageEventListenerDelegate;->handleMessage(Landroid/os/Message;)Z
-PLandroid/os/storage/StorageManager$StorageEventListenerDelegate;->onStorageStateChanged(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/os/storage/StorageManager$StorageEventListenerDelegate;->onVolumeStateChanged(Landroid/os/storage/VolumeInfo;II)V
+HSPLandroid/os/storage/StorageManager$StorageEventListenerDelegate;-><init>(Landroid/os/storage/StorageManager;Ljava/util/concurrent/Executor;Landroid/os/storage/StorageEventListener;Landroid/os/storage/StorageManager$StorageVolumeCallback;)V
+HSPLandroid/os/storage/StorageManager$StorageVolumeCallback;-><init>()V
 HSPLandroid/os/storage/StorageManager;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
-HSPLandroid/os/storage/StorageManager;->allocateBytes(Ljava/io/FileDescriptor;J)V
-HSPLandroid/os/storage/StorageManager;->allocateBytes(Ljava/io/FileDescriptor;JI)V
-HSPLandroid/os/storage/StorageManager;->allocateBytes(Ljava/util/UUID;JI)V
-PLandroid/os/storage/StorageManager;->checkPermissionAndAppOp(Landroid/content/Context;ZIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Z
-HSPLandroid/os/storage/StorageManager;->checkPermissionAndAppOp(Landroid/content/Context;ZIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IZ)Z
-PLandroid/os/storage/StorageManager;->checkPermissionAndAppOp(ZIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Z
-HSPLandroid/os/storage/StorageManager;->checkPermissionAndCheckOp(Landroid/content/Context;ZIILjava/lang/String;Ljava/lang/String;I)Z
-PLandroid/os/storage/StorageManager;->checkPermissionReadImages(ZIILjava/lang/String;Ljava/lang/String;)Z
-HSPLandroid/os/storage/StorageManager;->convert(Ljava/lang/String;)Ljava/util/UUID;
 HSPLandroid/os/storage/StorageManager;->convert(Ljava/util/UUID;)Ljava/lang/String;
-PLandroid/os/storage/StorageManager;->findEmulatedForPrivate(Landroid/os/storage/VolumeInfo;)Landroid/os/storage/VolumeInfo;
-PLandroid/os/storage/StorageManager;->findPathForUuid(Ljava/lang/String;)Ljava/io/File;
-HPLandroid/os/storage/StorageManager;->findPrivateForEmulated(Landroid/os/storage/VolumeInfo;)Landroid/os/storage/VolumeInfo;
-HPLandroid/os/storage/StorageManager;->findVolumeById(Ljava/lang/String;)Landroid/os/storage/VolumeInfo;
-PLandroid/os/storage/StorageManager;->findVolumeByQualifiedUuid(Ljava/lang/String;)Landroid/os/storage/VolumeInfo;
-HPLandroid/os/storage/StorageManager;->findVolumeByUuid(Ljava/lang/String;)Landroid/os/storage/VolumeInfo;
-HSPLandroid/os/storage/StorageManager;->from(Landroid/content/Context;)Landroid/os/storage/StorageManager;
-HPLandroid/os/storage/StorageManager;->getAllocatableBytes(Ljava/util/UUID;)J
-PLandroid/os/storage/StorageManager;->getAllocatableBytes(Ljava/util/UUID;I)J
-HPLandroid/os/storage/StorageManager;->getBestVolumeDescription(Landroid/os/storage/VolumeInfo;)Ljava/lang/String;
-HSPLandroid/os/storage/StorageManager;->getCacheQuotaBytes(Ljava/util/UUID;)J
-HSPLandroid/os/storage/StorageManager;->getCacheSizeBytes(Ljava/util/UUID;)J
-PLandroid/os/storage/StorageManager;->getPrimaryStorageSize()J
-PLandroid/os/storage/StorageManager;->getPrimaryStorageUuid()Ljava/lang/String;
-HSPLandroid/os/storage/StorageManager;->getPrimaryVolume()Landroid/os/storage/StorageVolume;
-HSPLandroid/os/storage/StorageManager;->getPrimaryVolume([Landroid/os/storage/StorageVolume;)Landroid/os/storage/StorageVolume;
-PLandroid/os/storage/StorageManager;->getStorageCacheBytes(Ljava/io/File;I)J
-HSPLandroid/os/storage/StorageManager;->getStorageFullBytes(Ljava/io/File;)J
-HSPLandroid/os/storage/StorageManager;->getStorageLowBytes(Ljava/io/File;)J
-HSPLandroid/os/storage/StorageManager;->getStorageVolume(Ljava/io/File;)Landroid/os/storage/StorageVolume;
 HSPLandroid/os/storage/StorageManager;->getStorageVolume(Ljava/io/File;I)Landroid/os/storage/StorageVolume;
 HSPLandroid/os/storage/StorageManager;->getStorageVolume([Landroid/os/storage/StorageVolume;Ljava/io/File;)Landroid/os/storage/StorageVolume;
 HSPLandroid/os/storage/StorageManager;->getStorageVolumes()Ljava/util/List;
 HSPLandroid/os/storage/StorageManager;->getUuidForPath(Ljava/io/File;)Ljava/util/UUID;
-HSPLandroid/os/storage/StorageManager;->getVolumeList()[Landroid/os/storage/StorageVolume;
 HSPLandroid/os/storage/StorageManager;->getVolumeList(II)[Landroid/os/storage/StorageVolume;
-HSPLandroid/os/storage/StorageManager;->getVolumeRecords()Ljava/util/List;
 HSPLandroid/os/storage/StorageManager;->getVolumes()Ljava/util/List;
-HSPLandroid/os/storage/StorageManager;->getWritablePrivateVolumes()Ljava/util/List;
-HSPLandroid/os/storage/StorageManager;->hasAdoptable()Z
-HSPLandroid/os/storage/StorageManager;->hasIsolatedStorage()Z
-HSPLandroid/os/storage/StorageManager;->inCryptKeeperBounce()Z
-HSPLandroid/os/storage/StorageManager;->isAllocationSupported(Ljava/io/FileDescriptor;)Z
-HSPLandroid/os/storage/StorageManager;->isBlockEncrypted()Z
-HSPLandroid/os/storage/StorageManager;->isEncrypted()Z
-HSPLandroid/os/storage/StorageManager;->isFileEncryptedEmulatedOnly()Z
-HSPLandroid/os/storage/StorageManager;->isFileEncryptedNativeOnly()Z
-HSPLandroid/os/storage/StorageManager;->isFileEncryptedNativeOrEmulated()Z
-HSPLandroid/os/storage/StorageManager;->isUserKeyUnlocked(I)Z
-PLandroid/os/storage/StorageManager;->maybeTranslateEmulatedPathToInternal(Ljava/io/File;)Ljava/io/File;
-PLandroid/os/storage/StorageManager;->noteAppOpAllowingLegacy(ZIILjava/lang/String;Ljava/lang/String;I)Z
-PLandroid/os/storage/StorageManager;->prepareUserStorage(Ljava/lang/String;III)V
-HSPLandroid/os/storage/StorageManager;->registerListener(Landroid/os/storage/StorageEventListener;)V
-HSPLandroid/os/storage/StorageManager;->translateAppToSystem(Ljava/io/File;II)Ljava/io/File;
-HSPLandroid/os/storage/StorageManagerInternal;-><init>()V
 HSPLandroid/os/storage/StorageVolume$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/storage/StorageVolume;
 HSPLandroid/os/storage/StorageVolume$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/storage/StorageVolume$1;->newArray(I)[Landroid/os/storage/StorageVolume;
 HSPLandroid/os/storage/StorageVolume$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/os/storage/StorageVolume;-><init>(Landroid/os/Parcel;)V
-HSLandroid/os/storage/StorageVolume;-><init>(Landroid/os/Parcel;Landroid/os/storage/StorageVolume$1;)V
-HSPLandroid/os/storage/StorageVolume;-><init>(Ljava/lang/String;Ljava/io/File;Ljava/io/File;Ljava/lang/String;ZZZZJLandroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/os/storage/StorageVolume;->allowMassStorage()Z
-PLandroid/os/storage/StorageVolume;->describeContents()I
-PLandroid/os/storage/StorageVolume;->getId()Ljava/lang/String;
-PLandroid/os/storage/StorageVolume;->getOwner()Landroid/os/UserHandle;
-PLandroid/os/storage/StorageVolume;->getPath()Ljava/lang/String;
+HSPLandroid/os/storage/StorageVolume;-><init>(Landroid/os/Parcel;Landroid/os/storage/StorageVolume$1;)V
 HSPLandroid/os/storage/StorageVolume;->getPathFile()Ljava/io/File;
 HSPLandroid/os/storage/StorageVolume;->getState()Ljava/lang/String;
 HSPLandroid/os/storage/StorageVolume;->getUuid()Ljava/lang/String;
-PLandroid/os/storage/StorageVolume;->isEmulated()Z
-HSPLandroid/os/storage/StorageVolume;->isPrimary()Z
-HSPLandroid/os/storage/StorageVolume;->isRemovable()Z
-HSPLandroid/os/storage/StorageVolume;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/storage/VolumeInfo$2;->createFromParcel(Landroid/os/Parcel;)Landroid/os/storage/VolumeInfo;
 HSPLandroid/os/storage/VolumeInfo$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/os/storage/VolumeInfo$2;->newArray(I)[Landroid/os/storage/VolumeInfo;
-HSPLandroid/os/storage/VolumeInfo$2;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/os/storage/VolumeInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/os/storage/VolumeInfo;-><init>(Ljava/lang/String;ILandroid/os/storage/DiskInfo;Ljava/lang/String;)V
-HPLandroid/os/storage/VolumeInfo;->buildStorageVolume(Landroid/content/Context;IZ)Landroid/os/storage/StorageVolume;
-PLandroid/os/storage/VolumeInfo;->clone()Landroid/os/storage/VolumeInfo;
-PLandroid/os/storage/VolumeInfo;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLandroid/os/storage/VolumeInfo;->getBroadcastForEnvironment(Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/os/storage/VolumeInfo;->getDescription()Ljava/lang/String;
-PLandroid/os/storage/VolumeInfo;->getDisk()Landroid/os/storage/DiskInfo;
-PLandroid/os/storage/VolumeInfo;->getDiskId()Ljava/lang/String;
-HPLandroid/os/storage/VolumeInfo;->getEnvironmentForState(I)Ljava/lang/String;
-HSPLandroid/os/storage/VolumeInfo;->getFsUuid()Ljava/lang/String;
-HPLandroid/os/storage/VolumeInfo;->getId()Ljava/lang/String;
-HPLandroid/os/storage/VolumeInfo;->getInternalPathForUser(I)Ljava/io/File;
-HPLandroid/os/storage/VolumeInfo;->getMountUserId()I
-HSPLandroid/os/storage/VolumeInfo;->getPath()Ljava/io/File;
-HSPLandroid/os/storage/VolumeInfo;->getPathForUser(I)Ljava/io/File;
-PLandroid/os/storage/VolumeInfo;->getState()I
 HSPLandroid/os/storage/VolumeInfo;->getType()I
-HSPLandroid/os/storage/VolumeInfo;->isMountedReadable()Z
-HSPLandroid/os/storage/VolumeInfo;->isMountedWritable()Z
-HSPLandroid/os/storage/VolumeInfo;->isPrimary()Z
-HPLandroid/os/storage/VolumeInfo;->isPrimaryEmulatedForUser(I)Z
-HSPLandroid/os/storage/VolumeInfo;->isVisible()Z
-HPLandroid/os/storage/VolumeInfo;->isVisibleForRead(I)Z
-HSPLandroid/os/storage/VolumeInfo;->isVisibleForUser(I)Z
-HPLandroid/os/storage/VolumeInfo;->isVisibleForWrite(I)Z
-PLandroid/os/storage/VolumeInfo;->toString()Ljava/lang/String;
-HPLandroid/os/storage/VolumeInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/os/storage/VolumeRecord$1;->newArray(I)[Landroid/os/storage/VolumeRecord;
-HSPLandroid/os/storage/VolumeRecord$1;->newArray(I)[Ljava/lang/Object;
-HSLandroid/os/strictmode/CredentialProtectedWhileLockedViolation;-><init>(Ljava/lang/String;)V
-PLandroid/os/strictmode/CustomViolation;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/strictmode/DiskReadViolation;-><init>()V
-HSPLandroid/os/strictmode/DiskWriteViolation;-><init>()V
-PLandroid/os/strictmode/LeakedClosableViolation;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
-HSPLandroid/os/strictmode/UnbufferedIoViolation;-><init>()V
+HSPLandroid/os/strictmode/LeakedClosableViolation;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
 HSPLandroid/os/strictmode/Violation;-><init>(Ljava/lang/String;)V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$2gyb4miANgsuR_Cn3HPTnP6sL54;-><init>(Ljava/lang/String;Landroid/os/UserHandle;)V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$2gyb4miANgsuR_Cn3HPTnP6sL54;->run(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/permission/-$$Lambda$PermissionControllerManager$Iy-7wiKMCV-MFSPGyIJxP_DSf8E;-><init>(Landroid/os/UserHandle;)V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$Iy-7wiKMCV-MFSPGyIJxP_DSf8E;->run(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/permission/-$$Lambda$PermissionControllerManager$WcxnBH4VsthEHNc7qKClONaAHtQ;-><init>(Ljava/util/function/Consumer;)V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$WcxnBH4VsthEHNc7qKClONaAHtQ;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$eHuRmDpRAUfA3qanHHMVMV_C0lI;-><init>(Landroid/permission/IPermissionController;Landroid/os/UserHandle;)V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$eHuRmDpRAUfA3qanHHMVMV_C0lI;->acceptOrThrow(Ljava/lang/Object;)V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$u5bno-vHXoMY3ADbZMAlZp7v9oI;-><clinit>()V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$u5bno-vHXoMY3ADbZMAlZp7v9oI;-><init>()V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$u5bno-vHXoMY3ADbZMAlZp7v9oI;->run(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/permission/-$$Lambda$PermissionControllerManager$vBYanTuMAWBbfOp_XdHzQXYNpXY;-><init>(Ljava/lang/String;Ljava/util/function/Consumer;)V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$vBYanTuMAWBbfOp_XdHzQXYNpXY;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$wPNqW0yZff7KXoWmrKVyzMgY2jc;-><init>(Ljava/util/function/Consumer;)V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$wPNqW0yZff7KXoWmrKVyzMgY2jc;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$yqGWw4vOTpW9pDZRlfJdxzYUsF0;-><clinit>()V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$yqGWw4vOTpW9pDZRlfJdxzYUsF0;-><init>()V
-PLandroid/permission/-$$Lambda$PermissionControllerManager$yqGWw4vOTpW9pDZRlfJdxzYUsF0;->run(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/permission/-$$Lambda$ViMr_PAGHrCLBQPYNzqdYUNU5zI;-><clinit>()V
-HSPLandroid/permission/-$$Lambda$ViMr_PAGHrCLBQPYNzqdYUNU5zI;-><init>()V
-PLandroid/permission/-$$Lambda$ViMr_PAGHrCLBQPYNzqdYUNU5zI;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/permission/IOnPermissionsChangeListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/permission/IOnPermissionsChangeListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/permission/IOnPermissionsChangeListener$Stub;-><init>()V
-HSPLandroid/permission/IOnPermissionsChangeListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/permission/IOnPermissionsChangeListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/permission/IOnPermissionsChangeListener;
-PLandroid/permission/IPermissionController$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/permission/IPermissionController$Stub$Proxy;->applyStagedRuntimePermissionBackup(Ljava/lang/String;Landroid/os/UserHandle;Lcom/android/internal/infra/AndroidFuture;)V
-PLandroid/permission/IPermissionController$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/permission/IPermissionController$Stub$Proxy;->getRuntimePermissionBackup(Landroid/os/UserHandle;Landroid/os/ParcelFileDescriptor;)V
-PLandroid/permission/IPermissionController$Stub$Proxy;->grantOrUpgradeDefaultRuntimePermissions(Lcom/android/internal/infra/AndroidFuture;)V
-PLandroid/permission/IPermissionController$Stub$Proxy;->updateUserSensitive(Lcom/android/internal/infra/AndroidFuture;)V
-HSPLandroid/permission/IPermissionController$Stub;-><init>()V
-PLandroid/permission/IPermissionController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/permission/IPermissionController;
-HSPLandroid/permission/IPermissionController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 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;->addPermission(Landroid/content/pm/PermissionInfo;Z)Z
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLandroid/permission/IPermissionManager$Stub$Proxy;->getAllPermissionGroups(I)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/permission/IPermissionManager$Stub$Proxy;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLandroid/permission/IPermissionManager$Stub$Proxy;->getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;
-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;->getWhitelistedRestrictedPermissions(Ljava/lang/String;II)Ljava/util/List;
-HSPLandroid/permission/IPermissionManager$Stub$Proxy;->grantDefaultPermissionsToEnabledImsServices([Ljava/lang/String;I)V
-HSPLandroid/permission/IPermissionManager$Stub$Proxy;->grantDefaultPermissionsToEnabledTelephonyDataServices([Ljava/lang/String;I)V
-HSPLandroid/permission/IPermissionManager$Stub$Proxy;->isPermissionRevokedByPolicy(Ljava/lang/String;Ljava/lang/String;I)Z
-HSPLandroid/permission/IPermissionManager$Stub$Proxy;->queryPermissionsByGroup(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/permission/IPermissionManager$Stub$Proxy;->removeOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V
-HSPLandroid/permission/IPermissionManager$Stub$Proxy;->revokeDefaultPermissionsFromDisabledTelephonyDataServices([Ljava/lang/String;I)V
-HSPLandroid/permission/IPermissionManager$Stub$Proxy;->updatePermissionFlags(Ljava/lang/String;Ljava/lang/String;IIZI)V
-HSPLandroid/permission/IPermissionManager$Stub;-><init>()V
 HSPLandroid/permission/IPermissionManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/permission/IPermissionManager;
-PLandroid/permission/IPermissionManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/permission/IPermissionManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/permission/PermissionControllerManager$1;-><init>(Landroid/permission/PermissionControllerManager;Landroid/content/Context;Landroid/content/Intent;IILjava/util/function/Function;Landroid/os/Handler;)V
-PLandroid/permission/PermissionControllerManager$1;->getAutoDisconnectTimeoutMs()J
-PLandroid/permission/PermissionControllerManager$1;->getJobHandler()Landroid/os/Handler;
-HSPLandroid/permission/PermissionControllerManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
-PLandroid/permission/PermissionControllerManager;->applyStagedRuntimePermissionBackup(Ljava/lang/String;Landroid/os/UserHandle;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V
-PLandroid/permission/PermissionControllerManager;->enforceSomePermissionsGrantedToSelf([Ljava/lang/String;)V
-PLandroid/permission/PermissionControllerManager;->getRuntimePermissionBackup(Landroid/os/UserHandle;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V
-PLandroid/permission/PermissionControllerManager;->grantOrUpgradeDefaultRuntimePermissions(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V
-PLandroid/permission/PermissionControllerManager;->lambda$applyStagedRuntimePermissionBackup$10(Ljava/lang/String;Landroid/os/UserHandle;Landroid/permission/IPermissionController;)Ljava/util/concurrent/CompletableFuture;
-PLandroid/permission/PermissionControllerManager;->lambda$applyStagedRuntimePermissionBackup$11(Ljava/lang/String;Ljava/util/function/Consumer;Ljava/lang/Boolean;Ljava/lang/Throwable;)V
-PLandroid/permission/PermissionControllerManager;->lambda$getRuntimePermissionBackup$4(Landroid/permission/IPermissionController;Landroid/os/UserHandle;Landroid/os/ParcelFileDescriptor;)V
-PLandroid/permission/PermissionControllerManager;->lambda$getRuntimePermissionBackup$5(Landroid/os/UserHandle;Landroid/permission/IPermissionController;)Ljava/util/concurrent/CompletableFuture;
-PLandroid/permission/PermissionControllerManager;->lambda$getRuntimePermissionBackup$6(Ljava/util/function/Consumer;[BLjava/lang/Throwable;)V
-PLandroid/permission/PermissionControllerManager;->lambda$grantOrUpgradeDefaultRuntimePermissions$21(Landroid/permission/IPermissionController;)Ljava/util/concurrent/CompletableFuture;
-PLandroid/permission/PermissionControllerManager;->lambda$grantOrUpgradeDefaultRuntimePermissions$22(Ljava/util/function/Consumer;Ljava/lang/Boolean;Ljava/lang/Throwable;)V
-PLandroid/permission/PermissionControllerManager;->lambda$updateUserSensitive$23(Landroid/permission/IPermissionController;)Ljava/util/concurrent/CompletableFuture;
-PLandroid/permission/PermissionControllerManager;->updateUserSensitive()V
-HSPLandroid/permission/PermissionManager$SplitPermissionInfo;-><init>(Landroid/content/pm/permission/SplitPermissionInfoParcelable;)V
-PLandroid/permission/PermissionManager$SplitPermissionInfo;-><init>(Landroid/content/pm/permission/SplitPermissionInfoParcelable;Landroid/permission/PermissionManager$1;)V
-HSPLandroid/permission/PermissionManager$SplitPermissionInfo;-><init>(Ljava/lang/String;Ljava/util/List;I)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;-><init>(Landroid/content/Context;Landroid/content/pm/IPackageManager;)V
-HSPLandroid/permission/PermissionManager;->getSplitPermissions()Ljava/util/List;
-PLandroid/permission/PermissionManager;->splitPermissionInfoListToNonParcelableList(Ljava/util/List;)Ljava/util/List;
-HSPLandroid/permission/PermissionManager;->splitPermissionInfoListToParcelableList(Ljava/util/List;)Ljava/util/List;
-HSPLandroid/permission/PermissionManagerInternal;-><init>()V
 HSPLandroid/preference/PreferenceManager;->getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences;
 HSPLandroid/preference/PreferenceManager;->getDefaultSharedPreferencesMode()I
 HSPLandroid/preference/PreferenceManager;->getDefaultSharedPreferencesName(Landroid/content/Context;)Ljava/lang/String;
-HSPLandroid/preference/PreferenceManager;->setDefaultValues(Landroid/content/Context;IZ)V
-HSPLandroid/preference/PreferenceManager;->setDefaultValues(Landroid/content/Context;Ljava/lang/String;IIZ)V
-HSPLandroid/print/IPrintManager$Stub;-><init>()V
-HSPLandroid/print/IPrintManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/print/IPrintManager;
-PLandroid/print/IPrintManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/print/IPrintSpooler$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/print/IPrintSpooler$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/print/IPrintSpooler$Stub$Proxy;->pruneApprovedPrintServices(Ljava/util/List;)V
-PLandroid/print/IPrintSpooler$Stub$Proxy;->removeObsoletePrintJobs()V
-PLandroid/print/IPrintSpooler$Stub$Proxy;->setClient(Landroid/print/IPrintSpoolerClient;)V
-PLandroid/print/IPrintSpooler$Stub;->asInterface(Landroid/os/IBinder;)Landroid/print/IPrintSpooler;
-PLandroid/print/IPrintSpoolerCallbacks$Stub;-><init>()V
-PLandroid/print/IPrintSpoolerClient$Stub;-><init>()V
-PLandroid/print/IPrintSpoolerClient$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/print/IPrintSpoolerClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/print/PrintManager;-><init>(Landroid/content/Context;Landroid/print/IPrintManager;II)V
-HSPLandroid/print/PrintManager;->getGlobalPrintManagerForUser(I)Landroid/print/PrintManager;
-PLandroid/printservice/IPrintServiceClient$Stub;-><init>()V
-PLandroid/printservice/PrintServiceInfo;-><init>(Landroid/content/pm/ResolveInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/printservice/PrintServiceInfo;->create(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)Landroid/printservice/PrintServiceInfo;
-PLandroid/printservice/PrintServiceInfo;->getResolveInfo()Landroid/content/pm/ResolveInfo;
-PLandroid/printservice/PrintServiceInfo;->hashCode()I
-PLandroid/privacy/internal/longitudinalreporting/LongitudinalReportingConfig;-><init>(Ljava/lang/String;DDD)V
-HPLandroid/privacy/internal/longitudinalreporting/LongitudinalReportingConfig;->getEncoderId()Ljava/lang/String;
-PLandroid/privacy/internal/longitudinalreporting/LongitudinalReportingConfig;->getIRRConfig()Landroid/privacy/internal/rappor/RapporConfig;
-PLandroid/privacy/internal/longitudinalreporting/LongitudinalReportingConfig;->getProbabilityP()D
-PLandroid/privacy/internal/longitudinalreporting/LongitudinalReportingConfig;->getProbabilityQ()D
-PLandroid/privacy/internal/longitudinalreporting/LongitudinalReportingEncoder;-><init>(Landroid/privacy/internal/longitudinalreporting/LongitudinalReportingConfig;Z[B)V
-PLandroid/privacy/internal/longitudinalreporting/LongitudinalReportingEncoder;->createEncoder(Landroid/privacy/internal/longitudinalreporting/LongitudinalReportingConfig;[B)Landroid/privacy/internal/longitudinalreporting/LongitudinalReportingEncoder;
-PLandroid/privacy/internal/longitudinalreporting/LongitudinalReportingEncoder;->encodeBoolean(Z)[B
-HPLandroid/privacy/internal/longitudinalreporting/LongitudinalReportingEncoder;->getLongTermRandomizedResult(DZ[BLjava/lang/String;)Z
-HPLandroid/privacy/internal/rappor/RapporConfig;-><init>(Ljava/lang/String;IDDDII)V
-PLandroid/privacy/internal/rappor/RapporEncoder;-><clinit>()V
-HPLandroid/privacy/internal/rappor/RapporEncoder;-><init>(Landroid/privacy/internal/rappor/RapporConfig;Z[B)V
-PLandroid/privacy/internal/rappor/RapporEncoder;->createEncoder(Landroid/privacy/internal/rappor/RapporConfig;[B)Landroid/privacy/internal/rappor/RapporEncoder;
-PLandroid/privacy/internal/rappor/RapporEncoder;->encodeBoolean(Z)[B
-PLandroid/provider/-$$Lambda$DeviceConfig$6U9gBH6h5Oab2DB_e83az4n_WEo;-><init>(Landroid/provider/DeviceConfig$OnPropertiesChangedListener;Landroid/provider/DeviceConfig$Properties;)V
-PLandroid/provider/-$$Lambda$DeviceConfig$6U9gBH6h5Oab2DB_e83az4n_WEo;->run()V
+HPLandroid/provider/-$$Lambda$DeviceConfig$6U9gBH6h5Oab2DB_e83az4n_WEo;-><init>(Landroid/provider/DeviceConfig$OnPropertiesChangedListener;Landroid/provider/DeviceConfig$Properties;)V
+HPLandroid/provider/-$$Lambda$DeviceConfig$6U9gBH6h5Oab2DB_e83az4n_WEo;->run()V
+HSPLandroid/provider/-$$Lambda$FontsContract$rqfIZKvP1frnI9vP1hVA8jQN_RE;-><init>(Landroid/provider/FontRequest;Ljava/lang/String;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/locks/Lock;Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/locks/Condition;)V
 HSPLandroid/provider/-$$Lambda$FontsContract$rqfIZKvP1frnI9vP1hVA8jQN_RE;->run()V
 HSPLandroid/provider/-$$Lambda$Settings$NameValueCache$cLX_nUBDGp9SYpFxrABk-2ceeMI;-><init>(Landroid/provider/Settings$NameValueCache;)V
 HSPLandroid/provider/-$$Lambda$Settings$NameValueCache$qSyMM6rUAHCa-5rsP-atfAqR3sA;-><init>(Landroid/provider/Settings$NameValueCache;)V
-PLandroid/provider/BlockedNumberContract$SystemContract;->shouldShowEmergencyCallNotification(Landroid/content/Context;)Z
 HSPLandroid/provider/CalendarContract$Attendees;-><clinit>()V
-HSPLandroid/provider/CalendarContract;-><clinit>()V
-HSPLandroid/provider/CallLog$Calls;->shouldHaveSharedCallLogEntries(Landroid/content/Context;Landroid/os/UserManager;I)Z
-HSPLandroid/provider/CallLog;-><clinit>()V
-HSPLandroid/provider/ContactsContract$CommonDataKinds$Email;->getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;
-HSPLandroid/provider/ContactsContract$CommonDataKinds$Email;->getTypeLabelResource(I)I
-HSPLandroid/provider/ContactsContract$CommonDataKinds$Phone;->getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/provider/ContactsContract$CommonDataKinds$Phone;->getTypeLabelResource(I)I
-HSPLandroid/provider/ContactsContract$CommonDataKinds$StructuredPostal;-><clinit>()V
-PLandroid/provider/ContactsContract$CommonDataKinds$StructuredPostal;->getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;
-HSPLandroid/provider/ContactsContract$CommonDataKinds$StructuredPostal;->getTypeLabelResource(I)I
-HSPLandroid/provider/ContactsContract$Contacts;->getLookupUri(JLjava/lang/String;)Landroid/net/Uri;
-HPLandroid/provider/ContactsContract$Contacts;->isEnterpriseContactId(J)Z
-HSPLandroid/provider/ContactsContract$DeletedContacts;-><clinit>()V
-HSPLandroid/provider/ContactsContract$DisplayPhoto;-><clinit>()V
-HSPLandroid/provider/ContactsContract$Groups;-><clinit>()V
-HSPLandroid/provider/ContactsContract$MetadataSync;-><clinit>()V
-HSPLandroid/provider/ContactsContract$Profile;-><clinit>()V
-HSPLandroid/provider/ContactsContract$ProviderStatus;-><clinit>()V
-HSPLandroid/provider/ContactsContract$RawContacts;-><clinit>()V
-HSPLandroid/provider/ContactsContract$RawContactsEntity;-><clinit>()V
-HSPLandroid/provider/ContactsContract$Settings;-><clinit>()V
-PLandroid/provider/ContactsContract$SyncState;-><clinit>()V
 HSPLandroid/provider/DeviceConfig$1;-><init>(Landroid/os/Handler;)V
 PLandroid/provider/DeviceConfig$1;->onChange(ZLandroid/net/Uri;)V
-PLandroid/provider/DeviceConfig$Properties$Builder;-><init>(Ljava/lang/String;)V
-PLandroid/provider/DeviceConfig$Properties$Builder;->build()Landroid/provider/DeviceConfig$Properties;
+HPLandroid/provider/DeviceConfig$Properties$Builder;-><init>(Ljava/lang/String;)V
+HPLandroid/provider/DeviceConfig$Properties$Builder;->build()Landroid/provider/DeviceConfig$Properties;
 HPLandroid/provider/DeviceConfig$Properties$Builder;->setString(Ljava/lang/String;Ljava/lang/String;)Landroid/provider/DeviceConfig$Properties$Builder;
 HSPLandroid/provider/DeviceConfig$Properties;-><init>(Ljava/lang/String;Ljava/util/Map;)V
-PLandroid/provider/DeviceConfig$Properties;->access$000(Landroid/provider/DeviceConfig$Properties;)Ljava/util/HashMap;
-HPLandroid/provider/DeviceConfig$Properties;->getBoolean(Ljava/lang/String;Z)Z
-PLandroid/provider/DeviceConfig$Properties;->getInt(Ljava/lang/String;I)I
-PLandroid/provider/DeviceConfig$Properties;->getKeyset()Ljava/util/Set;
-PLandroid/provider/DeviceConfig$Properties;->getLong(Ljava/lang/String;J)J
-PLandroid/provider/DeviceConfig$Properties;->getNamespace()Ljava/lang/String;
+HSPLandroid/provider/DeviceConfig$Properties;->getKeyset()Ljava/util/Set;
+HPLandroid/provider/DeviceConfig$Properties;->getNamespace()Ljava/lang/String;
 HSPLandroid/provider/DeviceConfig$Properties;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/provider/DeviceConfig;->access$100(Landroid/net/Uri;)V
+HPLandroid/provider/DeviceConfig;->access$100(Landroid/net/Uri;)V
 HSPLandroid/provider/DeviceConfig;->addOnPropertiesChangedListener(Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/provider/DeviceConfig$OnPropertiesChangedListener;)V
 HSPLandroid/provider/DeviceConfig;->createNamespaceUri(Ljava/lang/String;)Landroid/net/Uri;
-HPLandroid/provider/DeviceConfig;->decrementNamespace(Ljava/lang/String;)V
 HSPLandroid/provider/DeviceConfig;->enforceReadPermission(Landroid/content/Context;Ljava/lang/String;)V
 HSPLandroid/provider/DeviceConfig;->getBoolean(Ljava/lang/String;Ljava/lang/String;Z)Z
 HSPLandroid/provider/DeviceConfig;->getFloat(Ljava/lang/String;Ljava/lang/String;F)F
@@ -18954,30 +9919,29 @@
 HSPLandroid/provider/DeviceConfig;->getProperties(Ljava/lang/String;[Ljava/lang/String;)Landroid/provider/DeviceConfig$Properties;
 HSPLandroid/provider/DeviceConfig;->getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/provider/DeviceConfig;->getString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/provider/DeviceConfig;->handleChange(Landroid/net/Uri;)V
+HPLandroid/provider/DeviceConfig;->handleChange(Landroid/net/Uri;)V
 HSPLandroid/provider/DeviceConfig;->incrementNamespace(Ljava/lang/String;)V
-PLandroid/provider/DeviceConfig;->lambda$handleChange$0(Landroid/provider/DeviceConfig$OnPropertiesChangedListener;Landroid/provider/DeviceConfig$Properties;)V
-HPLandroid/provider/DeviceConfig;->removeOnPropertiesChangedListener(Landroid/provider/DeviceConfig$OnPropertiesChangedListener;)V
-PLandroid/provider/DeviceConfig;->setProperties(Landroid/provider/DeviceConfig$Properties;)Z
-HSPLandroid/provider/DocumentsContract;->buildDocumentUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/DocumentsContract;->buildRootsUri(Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/DocumentsContract;->getBaseDocumentUriBuilder(Ljava/lang/String;)Landroid/net/Uri$Builder;
-HSPLandroid/provider/DocumentsProvider;-><init>()V
-HSPLandroid/provider/DocumentsProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V
-HSPLandroid/provider/DocumentsProvider;->query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
-HSPLandroid/provider/DocumentsProvider;->registerAuthority(Ljava/lang/String;)V
-HSPLandroid/provider/Downloads$Impl;->statusToString(I)Ljava/lang/String;
-PLandroid/provider/Downloads;->removeAllDownloadsByPackage(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/provider/DeviceConfig;->lambda$handleChange$0(Landroid/provider/DeviceConfig$OnPropertiesChangedListener;Landroid/provider/DeviceConfig$Properties;)V
 HSPLandroid/provider/FontRequest;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V
+HSPLandroid/provider/FontRequest;->getIdentifier()Ljava/lang/String;
+HSPLandroid/provider/FontRequest;->getProviderAuthority()Ljava/lang/String;
+HSPLandroid/provider/FontRequest;->getProviderPackage()Ljava/lang/String;
+HSPLandroid/provider/FontRequest;->getQuery()Ljava/lang/String;
 PLandroid/provider/FontsContract$1;->run()V
+HSPLandroid/provider/FontsContract$FontFamilyResult;-><init>(I[Landroid/provider/FontsContract$FontInfo;)V
 HSPLandroid/provider/FontsContract$FontFamilyResult;->getFonts()[Landroid/provider/FontsContract$FontInfo;
 HSPLandroid/provider/FontsContract$FontFamilyResult;->getStatusCode()I
+HSPLandroid/provider/FontsContract$FontInfo;-><init>(Landroid/net/Uri;I[Landroid/graphics/fonts/FontVariationAxis;IZI)V
 HSPLandroid/provider/FontsContract$FontInfo;->getAxes()[Landroid/graphics/fonts/FontVariationAxis;
 HSPLandroid/provider/FontsContract$FontInfo;->getResultCode()I
 HSPLandroid/provider/FontsContract$FontInfo;->getTtcIndex()I
 HSPLandroid/provider/FontsContract$FontInfo;->getUri()Landroid/net/Uri;
 HSPLandroid/provider/FontsContract$FontInfo;->getWeight()I
 HSPLandroid/provider/FontsContract$FontInfo;->isItalic()Z
+PLandroid/provider/FontsContract;->access$000()Ljava/lang/Object;
+PLandroid/provider/FontsContract;->access$100()Landroid/os/HandlerThread;
+PLandroid/provider/FontsContract;->access$102(Landroid/os/HandlerThread;)Landroid/os/HandlerThread;
+PLandroid/provider/FontsContract;->access$202(Landroid/os/Handler;)Landroid/os/Handler;
 HSPLandroid/provider/FontsContract;->buildTypeface(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroid/provider/FontsContract$FontInfo;)Landroid/graphics/Typeface;
 HSPLandroid/provider/FontsContract;->fetchFonts(Landroid/content/Context;Landroid/os/CancellationSignal;Landroid/provider/FontRequest;)Landroid/provider/FontsContract$FontFamilyResult;
 HSPLandroid/provider/FontsContract;->getFontFromProvider(Landroid/content/Context;Landroid/provider/FontRequest;Ljava/lang/String;Landroid/os/CancellationSignal;)[Landroid/provider/FontsContract$FontInfo;
@@ -18986,219 +9950,54 @@
 HSPLandroid/provider/FontsContract;->lambda$getFontSync$0(Landroid/provider/FontRequest;Ljava/lang/String;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/locks/Lock;Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/locks/Condition;)V
 HSPLandroid/provider/FontsContract;->prepareFontData(Landroid/content/Context;[Landroid/provider/FontsContract$FontInfo;Landroid/os/CancellationSignal;)Ljava/util/Map;
 HSPLandroid/provider/FontsContract;->setApplicationContextForResources(Landroid/content/Context;)V
-PLandroid/provider/MediaStore$Audio$Playlists;-><clinit>()V
-PLandroid/provider/MediaStore$Audio$Playlists;->getContentUri(Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/MediaStore$Files;->getContentUri(Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/MediaStore$Files;->getContentUri(Ljava/lang/String;J)Landroid/net/Uri;
-HSPLandroid/provider/MediaStore$Files;->getContentUriForPath(Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/MediaStore$Images$Media;->getContentUri(Ljava/lang/String;)Landroid/net/Uri;
-HPLandroid/provider/MediaStore$Images$Thumbnails;-><clinit>()V
-HPLandroid/provider/MediaStore$Images$Thumbnails;->getContentUri(Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/MediaStore$Video$Media;->getContentUri(Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/MediaStore;->addCanonicalFile(Ljava/util/List;Ljava/io/File;)V
-HSPLandroid/provider/MediaStore;->checkArgumentVolumeName(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/provider/MediaStore;->getExternalVolumeNames(Landroid/content/Context;)Ljava/util/Set;
-HSPLandroid/provider/MediaStore;->getIncludePending(Landroid/net/Uri;)Z
-HSPLandroid/provider/MediaStore;->getMediaScannerUri()Landroid/net/Uri;
-HSPLandroid/provider/MediaStore;->getRecentExternalVolumeNames(Landroid/content/Context;)Ljava/util/Set;
-HSPLandroid/provider/MediaStore;->getVolumeName(Landroid/net/Uri;)Ljava/lang/String;
-HSPLandroid/provider/MediaStore;->getVolumeName(Ljava/io/File;)Ljava/lang/String;
-HSPLandroid/provider/MediaStore;->getVolumePath(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/provider/MediaStore;->getVolumePath(Ljava/util/List;Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/provider/MediaStore;->getVolumeScanPaths(Ljava/lang/String;)Ljava/util/Collection;
-HSPLandroid/provider/MediaStore;->parseBoolean(Ljava/lang/String;)Z
-HSPLandroid/provider/MediaStore;->setIncludePending(Landroid/net/Uri$Builder;)Landroid/net/Uri$Builder;
-HPLandroid/provider/MediaStore;->setRequireOriginal(Landroid/net/Uri;)Landroid/net/Uri;
-HSPLandroid/provider/SearchIndexableData;-><init>()V
-HSPLandroid/provider/SearchIndexableData;-><init>(Landroid/content/Context;)V
-HSPLandroid/provider/SearchIndexableResource;-><init>(IILjava/lang/String;I)V
-HSPLandroid/provider/SearchIndexableResource;-><init>(Landroid/content/Context;)V
 HSPLandroid/provider/SearchIndexablesContract;-><clinit>()V
 HSPLandroid/provider/SearchIndexablesProvider;-><init>()V
 HSPLandroid/provider/SearchIndexablesProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V
 HSPLandroid/provider/SearchIndexablesProvider;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
 HSPLandroid/provider/SearchIndexablesProvider;->queryDynamicRawData([Ljava/lang/String;)Landroid/database/Cursor;
-HSPLandroid/provider/SearchIndexablesProvider;->querySiteMapPairs()Landroid/database/Cursor;
-HSPLandroid/provider/SearchIndexablesProvider;->querySliceUriPairs()Landroid/database/Cursor;
 HSPLandroid/provider/Settings$Config;->createCompositeName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/provider/Settings$Config;->createPrefix(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/provider/Settings$Config;->getStrings(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/List;)Ljava/util/Map;
-HPLandroid/provider/Settings$Config;->setStrings(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/Map;)Z
 HSPLandroid/provider/Settings$ContentProviderHolder;->access$000(Landroid/provider/Settings$ContentProviderHolder;)Landroid/net/Uri;
 HSPLandroid/provider/Settings$ContentProviderHolder;->getProvider(Landroid/content/ContentResolver;)Landroid/content/IContentProvider;
 HSPLandroid/provider/Settings$GenerationTracker;-><init>(Landroid/util/MemoryIntArray;IILjava/lang/Runnable;)V
-HSPLandroid/provider/Settings$GenerationTracker;->destroy()V
 HSPLandroid/provider/Settings$GenerationTracker;->getCurrentGeneration()I
 HSPLandroid/provider/Settings$GenerationTracker;->isGenerationChanged()Z
 HSPLandroid/provider/Settings$GenerationTracker;->readCurrentGeneration()I
 HSPLandroid/provider/Settings$Global;->getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F
 HSPLandroid/provider/Settings$Global;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I
 HSPLandroid/provider/Settings$Global;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
-HSPLandroid/provider/Settings$Global;->getLong(Landroid/content/ContentResolver;Ljava/lang/String;)J
 HSPLandroid/provider/Settings$Global;->getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J
-HSPLandroid/provider/Settings$Global;->getMovedToSecureSettings(Ljava/util/Set;)V
 HSPLandroid/provider/Settings$Global;->getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/provider/Settings$Global;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
 HSPLandroid/provider/Settings$Global;->getUriFor(Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/Settings$Global;->isValidZenMode(I)Z
 HSPLandroid/provider/Settings$Global;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
-HSPLandroid/provider/Settings$Global;->putLong(Landroid/content/ContentResolver;Ljava/lang/String;J)Z
 HSPLandroid/provider/Settings$Global;->putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z
-PLandroid/provider/Settings$Global;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z
-HSPLandroid/provider/Settings$Global;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZI)Z
-HSPLandroid/provider/Settings$Global;->zenModeToString(I)Ljava/lang/String;
+HSPLandroid/provider/Settings$Global;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZIZ)Z
 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;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZI)Z
-HPLandroid/provider/Settings$NameValueCache;->setStringsForPrefix(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/HashMap;)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;
-HSPLandroid/provider/Settings$Secure;->getCloneToManagedProfileSettings(Ljava/util/Set;)V
 HSPLandroid/provider/Settings$Secure;->getFloatForUser(Landroid/content/ContentResolver;Ljava/lang/String;FI)F
 HSPLandroid/provider/Settings$Secure;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I
 HSPLandroid/provider/Settings$Secure;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
 HSPLandroid/provider/Settings$Secure;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)I
 HSPLandroid/provider/Settings$Secure;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I
-HSPLandroid/provider/Settings$Secure;->getLong(Landroid/content/ContentResolver;Ljava/lang/String;)J
-HSPLandroid/provider/Settings$Secure;->getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J
-HSPLandroid/provider/Settings$Secure;->getLongForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)J
-HSPLandroid/provider/Settings$Secure;->getLongForUser(Landroid/content/ContentResolver;Ljava/lang/String;JI)J
-HSPLandroid/provider/Settings$Secure;->getMovedToGlobalSettings(Ljava/util/Set;)V
 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;->getUriFor(Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/Settings$Secure;->isLocationProviderEnabled(Landroid/content/ContentResolver;Ljava/lang/String;)Z
-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
-HPLandroid/provider/Settings$Secure;->putLong(Landroid/content/ContentResolver;Ljava/lang/String;J)Z
-HPLandroid/provider/Settings$Secure;->putLongForUser(Landroid/content/ContentResolver;Ljava/lang/String;JI)Z
-PLandroid/provider/Settings$Secure;->putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z
-HSPLandroid/provider/Settings$Secure;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z
-HSPLandroid/provider/Settings$Secure;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZI)Z
 HSPLandroid/provider/Settings$SettingNotFoundException;-><init>(Ljava/lang/String;)V
-HSPLandroid/provider/Settings$System;->adjustConfigurationForUser(Landroid/content/ContentResolver;Landroid/content/res/Configuration;IZ)V
-PLandroid/provider/Settings$System;->canWrite(Landroid/content/Context;)Z
-HSPLandroid/provider/Settings$System;->clearConfiguration(Landroid/content/res/Configuration;)V
-HSPLandroid/provider/Settings$System;->getCloneFromParentOnValueSettings(Ljava/util/Map;)V
-HSPLandroid/provider/Settings$System;->getCloneToManagedProfileSettings(Ljava/util/Set;)V
-HSPLandroid/provider/Settings$System;->getConfiguration(Landroid/content/ContentResolver;Landroid/content/res/Configuration;)V
-HSPLandroid/provider/Settings$System;->getFloat(Landroid/content/ContentResolver;Ljava/lang/String;)F
-HSPLandroid/provider/Settings$System;->getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F
-HSPLandroid/provider/Settings$System;->getFloatForUser(Landroid/content/ContentResolver;Ljava/lang/String;FI)F
-HSPLandroid/provider/Settings$System;->getFloatForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)F
-HPLandroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I
 HSPLandroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
 HSPLandroid/provider/Settings$System;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)I
 HSPLandroid/provider/Settings$System;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I
-HSPLandroid/provider/Settings$System;->getMovedToGlobalSettings(Ljava/util/Set;)V
-HSPLandroid/provider/Settings$System;->getMovedToSecureSettings(Ljava/util/Set;)V
 HSPLandroid/provider/Settings$System;->getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/provider/Settings$System;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
 HSPLandroid/provider/Settings$System;->getUriFor(Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/Settings$System;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
 HSPLandroid/provider/Settings$System;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z
 HSPLandroid/provider/Settings$System;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z
-HSPLandroid/provider/Settings;->canDrawOverlays(Landroid/content/Context;)Z
-PLandroid/provider/Settings;->checkAndNoteChangeNetworkStateOperation(Landroid/content/Context;ILjava/lang/String;Z)Z
-PLandroid/provider/Settings;->checkAndNoteWriteSettingsOperation(Landroid/content/Context;ILjava/lang/String;Z)Z
-PLandroid/provider/Settings;->getPackageNameForUid(Landroid/content/Context;I)Ljava/lang/String;
-HSPLandroid/provider/Settings;->isCallingPackageAllowedToDrawOverlays(Landroid/content/Context;ILjava/lang/String;Z)Z
-HSPLandroid/provider/Settings;->isCallingPackageAllowedToPerformAppOpsProtectedOperation(Landroid/content/Context;ILjava/lang/String;ZI[Ljava/lang/String;Z)Z
 HSPLandroid/provider/Settings;->isInSystemServer()Z
-HSPLandroid/provider/Settings;->setInSystemServer()V
-HSPLandroid/provider/Telephony$Mms$Inbox;-><clinit>()V
-HSPLandroid/provider/Telephony$Mms$Sent;-><clinit>()V
-HSPLandroid/provider/Telephony$Mms;-><clinit>()V
-HPLandroid/provider/Telephony$Mms;->extractAddrSpec(Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/provider/Telephony$Mms;->isEmailAddress(Ljava/lang/String;)Z
-HPLandroid/provider/Telephony$Mms;->isPhoneNumber(Ljava/lang/String;)Z
-HSPLandroid/provider/Telephony$MmsSms;-><clinit>()V
-HSPLandroid/provider/Telephony$ServiceStateTable;->getContentValuesForServiceState(Landroid/telephony/ServiceState;)Landroid/content/ContentValues;
-HSPLandroid/provider/Telephony$ServiceStateTable;->getUriForSubscriptionId(I)Landroid/net/Uri;
-HSPLandroid/provider/Telephony$ServiceStateTable;->getUriForSubscriptionIdAndField(ILjava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/Telephony$Sms$Sent;-><clinit>()V
 HSPLandroid/provider/Telephony$Sms;->getDefaultSmsPackage(Landroid/content/Context;)Ljava/lang/String;
-HSPLandroid/provider/Telephony$Threads;-><clinit>()V
-HPLandroid/provider/Telephony$Threads;->getOrCreateThreadId(Landroid/content/Context;Ljava/util/Set;)J
-HSPLandroid/provider/VoicemailContract$Status;-><clinit>()V
-HSPLandroid/provider/VoicemailContract$Voicemails;-><clinit>()V
-HSPLandroid/renderscript/BaseObj;-><init>(JLandroid/renderscript/RenderScript;)V
-HSPLandroid/renderscript/BaseObj;->equals(Ljava/lang/Object;)Z
-HSPLandroid/renderscript/BaseObj;->getID(Landroid/renderscript/RenderScript;)J
-HSPLandroid/renderscript/Element$1;-><clinit>()V
-HSPLandroid/renderscript/Element$DataKind;-><clinit>()V
-HSPLandroid/renderscript/Element$DataKind;-><init>(Ljava/lang/String;II)V
-HSPLandroid/renderscript/Element$DataKind;->values()[Landroid/renderscript/Element$DataKind;
-HSPLandroid/renderscript/Element$DataType;-><clinit>()V
-HSPLandroid/renderscript/Element$DataType;-><init>(Ljava/lang/String;II)V
-HSPLandroid/renderscript/Element$DataType;-><init>(Ljava/lang/String;III)V
-HSPLandroid/renderscript/Element$DataType;->values()[Landroid/renderscript/Element$DataType;
-HSPLandroid/renderscript/Element;-><init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Element$DataType;Landroid/renderscript/Element$DataKind;ZI)V
-HSPLandroid/renderscript/Element;->U8_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;
-HSPLandroid/renderscript/Element;->createVector(Landroid/renderscript/RenderScript;Landroid/renderscript/Element$DataType;I)Landroid/renderscript/Element;
-HSPLandroid/renderscript/Element;->isCompatible(Landroid/renderscript/Element;)Z
-HSPLandroid/renderscript/RenderScript$ContextType;-><clinit>()V
-HSPLandroid/renderscript/RenderScript$ContextType;-><init>(Ljava/lang/String;II)V
-HSPLandroid/renderscript/RenderScript$MessageThread;-><init>(Landroid/renderscript/RenderScript;)V
-HSPLandroid/renderscript/RenderScript$MessageThread;->run()V
-HSPLandroid/renderscript/RenderScript;-><clinit>()V
-HSPLandroid/renderscript/RenderScript;-><init>(Landroid/content/Context;)V
-HSPLandroid/renderscript/RenderScript;->create(Landroid/content/Context;)Landroid/renderscript/RenderScript;
-HSPLandroid/renderscript/RenderScript;->create(Landroid/content/Context;ILandroid/renderscript/RenderScript$ContextType;I)Landroid/renderscript/RenderScript;
-HSPLandroid/renderscript/RenderScript;->create(Landroid/content/Context;Landroid/renderscript/RenderScript$ContextType;)Landroid/renderscript/RenderScript;
-HSPLandroid/renderscript/RenderScript;->create(Landroid/content/Context;Landroid/renderscript/RenderScript$ContextType;I)Landroid/renderscript/RenderScript;
-HSPLandroid/renderscript/RenderScript;->getCachePath()Ljava/lang/String;
-HSPLandroid/renderscript/RenderScript;->internalCreate(Landroid/content/Context;ILandroid/renderscript/RenderScript$ContextType;I)Landroid/renderscript/RenderScript;
-HSPLandroid/renderscript/RenderScript;->nContextCreate(JIII)J
-HSPLandroid/renderscript/RenderScript;->nContextSetCacheDir(Ljava/lang/String;)V
-HSPLandroid/renderscript/RenderScript;->nElementCreate(JIZI)J
-HSPLandroid/renderscript/RenderScript;->nScriptIntrinsicCreate(IJ)J
-HSPLandroid/renderscript/RenderScript;->nScriptSetVarF(JIF)V
-HSPLandroid/renderscript/RenderScript;->validate()V
 HSPLandroid/renderscript/RenderScriptCacheDir;->setupDiskCache(Ljava/io/File;)V
-HSPLandroid/renderscript/Script;-><init>(JLandroid/renderscript/RenderScript;)V
-HSPLandroid/renderscript/Script;->setVar(IF)V
-HSPLandroid/renderscript/ScriptIntrinsic;-><init>(JLandroid/renderscript/RenderScript;)V
-HSPLandroid/renderscript/ScriptIntrinsicBlur;-><init>(JLandroid/renderscript/RenderScript;)V
-HSPLandroid/renderscript/ScriptIntrinsicBlur;->create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicBlur;
-HSPLandroid/renderscript/ScriptIntrinsicBlur;->setRadius(F)V
-HSPLandroid/security/AttestedKeyPair;-><init>(Ljava/security/KeyPair;[Ljava/security/cert/Certificate;)V
-HSPLandroid/security/Credentials;->deleteAllTypesForAlias(Landroid/security/KeyStore;Ljava/lang/String;)Z
-HSPLandroid/security/Credentials;->deleteAllTypesForAlias(Landroid/security/KeyStore;Ljava/lang/String;I)Z
-HSPLandroid/security/Credentials;->deleteCertificateTypesForAlias(Landroid/security/KeyStore;Ljava/lang/String;I)Z
-HSPLandroid/security/Credentials;->deleteUserKeyTypeForAlias(Landroid/security/KeyStore;Ljava/lang/String;I)Z
-PLandroid/security/GateKeeper;->getSecureUserId()J
-PLandroid/security/GateKeeper;->getService()Landroid/service/gatekeeper/IGateKeeperService;
-PLandroid/security/IKeyChainService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/security/IKeyChainService$Stub$Proxy;->generateKeyPair(Ljava/lang/String;Landroid/security/keystore/ParcelableKeyGenParameterSpec;)I
-HSPLandroid/security/IKeyChainService$Stub$Proxy;->getCertificate(Ljava/lang/String;)[B
-PLandroid/security/IKeyChainService$Stub$Proxy;->getUserCaAliases()Landroid/content/pm/StringParceledListSlice;
-HSPLandroid/security/IKeyChainService$Stub$Proxy;->requestPrivateKey(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/security/IKeyChainService$Stub$Proxy;->setGrant(ILjava/lang/String;Z)V
-HSPLandroid/security/IKeyChainService$Stub;-><init>()V
-PLandroid/security/IKeyChainService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/IKeyChainService;
-HSPLandroid/security/IKeyChainService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/security/KeyChain$1;-><init>(Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/CountDownLatch;)V
-HSPLandroid/security/KeyChain$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLandroid/security/KeyChain$KeyChainConnection;-><init>(Landroid/content/Context;Landroid/content/ServiceConnection;Landroid/security/IKeyChainService;)V
-HSPLandroid/security/KeyChain$KeyChainConnection;->close()V
-HSPLandroid/security/KeyChain$KeyChainConnection;->getService()Landroid/security/IKeyChainService;
-HSPLandroid/security/KeyChain;->bind(Landroid/content/Context;)Landroid/security/KeyChain$KeyChainConnection;
-HSPLandroid/security/KeyChain;->bindAsUser(Landroid/content/Context;Landroid/os/UserHandle;)Landroid/security/KeyChain$KeyChainConnection;
-PLandroid/security/KeyChain;->ensureNotOnMainThread(Landroid/content/Context;)V
-HSPLandroid/security/KeyChain;->getCertificateChain(Landroid/content/Context;Ljava/lang/String;)[Ljava/security/cert/X509Certificate;
-HSPLandroid/security/KeyChain;->getKeyPair(Landroid/content/Context;Ljava/lang/String;)Ljava/security/KeyPair;
-HSPLandroid/security/KeyChain;->getPrivateKey(Landroid/content/Context;Ljava/lang/String;)Ljava/security/PrivateKey;
-PLandroid/security/KeyStore$CertificateChainPromise;-><init>(Landroid/security/KeyStore;)V
-PLandroid/security/KeyStore$CertificateChainPromise;-><init>(Landroid/security/KeyStore;Landroid/security/KeyStore$1;)V
-PLandroid/security/KeyStore$CertificateChainPromise;->getFuture()Ljava/util/concurrent/CompletableFuture;
-PLandroid/security/KeyStore$CertificateChainPromise;->onFinished(Landroid/security/keystore/KeystoreResponse;Landroid/security/keymaster/KeymasterCertificateChain;)V
-HSPLandroid/security/KeyStore$ExportKeyPromise;-><init>(Landroid/security/KeyStore;)V
-HSPLandroid/security/KeyStore$ExportKeyPromise;-><init>(Landroid/security/KeyStore;Landroid/security/KeyStore$1;)V
-HSPLandroid/security/KeyStore$ExportKeyPromise;->getFuture()Ljava/util/concurrent/CompletableFuture;
-HSPLandroid/security/KeyStore$ExportKeyPromise;->onFinished(Landroid/security/keymaster/ExportResult;)V
-PLandroid/security/KeyStore$KeyAttestationCallbackResult;-><init>(Landroid/security/KeyStore;Landroid/security/keystore/KeystoreResponse;Landroid/security/keymaster/KeymasterCertificateChain;)V
-PLandroid/security/KeyStore$KeyAttestationCallbackResult;->getCertificateChain()Landroid/security/keymaster/KeymasterCertificateChain;
-PLandroid/security/KeyStore$KeyAttestationCallbackResult;->getKeystoreResponse()Landroid/security/keystore/KeystoreResponse;
 HSPLandroid/security/KeyStore$KeyCharacteristicsCallbackResult;-><init>(Landroid/security/KeyStore;Landroid/security/keystore/KeystoreResponse;Landroid/security/keymaster/KeyCharacteristics;)V
 HSPLandroid/security/KeyStore$KeyCharacteristicsCallbackResult;->getKeyCharacteristics()Landroid/security/keymaster/KeyCharacteristics;
 HSPLandroid/security/KeyStore$KeyCharacteristicsCallbackResult;->getKeystoreResponse()Landroid/security/keystore/KeystoreResponse;
@@ -19206,81 +10005,28 @@
 HSPLandroid/security/KeyStore$KeyCharacteristicsPromise;-><init>(Landroid/security/KeyStore;Landroid/security/KeyStore$1;)V
 HSPLandroid/security/KeyStore$KeyCharacteristicsPromise;->getFuture()Ljava/util/concurrent/CompletableFuture;
 HSPLandroid/security/KeyStore$KeyCharacteristicsPromise;->onFinished(Landroid/security/keystore/KeystoreResponse;Landroid/security/keymaster/KeyCharacteristics;)V
-PLandroid/security/KeyStore$KeystoreResultPromise;-><init>(Landroid/security/KeyStore;)V
-PLandroid/security/KeyStore$KeystoreResultPromise;-><init>(Landroid/security/KeyStore;Landroid/security/KeyStore$1;)V
-PLandroid/security/KeyStore$KeystoreResultPromise;->getFuture()Ljava/util/concurrent/CompletableFuture;
-PLandroid/security/KeyStore$KeystoreResultPromise;->onFinished(Landroid/security/keystore/KeystoreResponse;)V
+HSPLandroid/security/KeyStore$KeystoreResultPromise;-><init>(Landroid/security/KeyStore;)V
+HSPLandroid/security/KeyStore$KeystoreResultPromise;-><init>(Landroid/security/KeyStore;Landroid/security/KeyStore$1;)V
 HSPLandroid/security/KeyStore$OperationPromise;-><init>(Landroid/security/KeyStore;)V
 HSPLandroid/security/KeyStore$OperationPromise;-><init>(Landroid/security/KeyStore;Landroid/security/KeyStore$1;)V
 HSPLandroid/security/KeyStore$OperationPromise;->getFuture()Ljava/util/concurrent/CompletableFuture;
 HSPLandroid/security/KeyStore$OperationPromise;->onFinished(Landroid/security/keymaster/OperationResult;)V
 HSPLandroid/security/KeyStore;-><init>(Landroid/security/keystore/IKeystoreService;)V
 HSPLandroid/security/KeyStore;->abort(Landroid/os/IBinder;)I
-PLandroid/security/KeyStore;->addAuthToken([B)I
-PLandroid/security/KeyStore;->attestKey(Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;Landroid/security/keymaster/KeymasterCertificateChain;)I
 HSPLandroid/security/KeyStore;->begin(Ljava/lang/String;IZLandroid/security/keymaster/KeymasterArguments;[BI)Landroid/security/keymaster/OperationResult;
-HSPLandroid/security/KeyStore;->contains(Ljava/lang/String;)Z
 HSPLandroid/security/KeyStore;->contains(Ljava/lang/String;I)Z
-HSPLandroid/security/KeyStore;->delete(Ljava/lang/String;I)Z
-HSPLandroid/security/KeyStore;->delete2(Ljava/lang/String;I)I
-HSPLandroid/security/KeyStore;->exportKey(Ljava/lang/String;ILandroid/security/keymaster/KeymasterBlob;Landroid/security/keymaster/KeymasterBlob;I)Landroid/security/keymaster/ExportResult;
 HSPLandroid/security/KeyStore;->finish(Landroid/os/IBinder;Landroid/security/keymaster/KeymasterArguments;[B[B[B)Landroid/security/keymaster/OperationResult;
-HSPLandroid/security/KeyStore;->generateKey(Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;[BIILandroid/security/keymaster/KeyCharacteristics;)I
-HSPLandroid/security/KeyStore;->generateKeyInternal(Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;[BIILandroid/security/keymaster/KeyCharacteristics;)I
-PLandroid/security/KeyStore;->get(Ljava/lang/String;I)[B
-PLandroid/security/KeyStore;->get(Ljava/lang/String;IZ)[B
 HSPLandroid/security/KeyStore;->getApplicationContext()Landroid/content/Context;
-HPLandroid/security/KeyStore;->getFaceOnlySid()J
-HPLandroid/security/KeyStore;->getFingerprintOnlySid()J
 HSPLandroid/security/KeyStore;->getInstance()Landroid/security/KeyStore;
-PLandroid/security/KeyStore;->getInvalidKeyException(Ljava/lang/String;II)Ljava/security/InvalidKeyException;
-PLandroid/security/KeyStore;->getInvalidKeyException(Ljava/lang/String;ILandroid/security/KeyStoreException;)Ljava/security/InvalidKeyException;
 HSPLandroid/security/KeyStore;->getKeyCharacteristics(Ljava/lang/String;Landroid/security/keymaster/KeymasterBlob;Landroid/security/keymaster/KeymasterBlob;ILandroid/security/keymaster/KeyCharacteristics;)I
-PLandroid/security/KeyStore;->getKeyStoreException(I)Landroid/security/KeyStoreException;
 HSPLandroid/security/KeyStore;->getToken()Landroid/os/IBinder;
-HSPLandroid/security/KeyStore;->getmtime(Ljava/lang/String;I)J
-PLandroid/security/KeyStore;->grant(Ljava/lang/String;I)Ljava/lang/String;
-PLandroid/security/KeyStore;->importKey(Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;I[BIILandroid/security/keymaster/KeyCharacteristics;)I
-PLandroid/security/KeyStore;->importKeyInternal(Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;I[BIILandroid/security/keymaster/KeyCharacteristics;)I
-HSPLandroid/security/KeyStore;->insert(Ljava/lang/String;[BII)I
-PLandroid/security/KeyStore;->list(Ljava/lang/String;I)[Ljava/lang/String;
-HPLandroid/security/KeyStore;->onUserLockedStateChanged(IZ)V
-PLandroid/security/KeyStore;->state(I)Landroid/security/KeyStore$State;
-PLandroid/security/KeyStore;->unlock(ILjava/lang/String;)Z
 HSPLandroid/security/KeyStore;->update(Landroid/os/IBinder;Landroid/security/keymaster/KeymasterArguments;[B)Landroid/security/keymaster/OperationResult;
-PLandroid/security/KeyStoreException;-><init>(ILjava/lang/String;)V
-PLandroid/security/KeyStoreException;->getErrorCode()I
-HSPLandroid/security/NetworkSecurityPolicy;->getApplicationConfigForPackage(Landroid/content/Context;Ljava/lang/String;)Landroid/security/net/config/ApplicationConfig;
-HSPLandroid/security/NetworkSecurityPolicy;->getInstance()Landroid/security/NetworkSecurityPolicy;
-HSPLandroid/security/NetworkSecurityPolicy;->isCleartextTrafficPermitted()Z
-HSPLandroid/security/NetworkSecurityPolicy;->isCleartextTrafficPermitted(Ljava/lang/String;)Z
-PLandroid/security/Scrypt;-><init>()V
-PLandroid/security/Scrypt;->scrypt([B[BIIII)[B
-HSPLandroid/security/keymaster/ExportResult$1;-><init>()V
-HSPLandroid/security/keymaster/ExportResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keymaster/ExportResult;
-HSPLandroid/security/keymaster/ExportResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/security/keymaster/ExportResult;-><clinit>()V
-HSPLandroid/security/keymaster/ExportResult;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/security/keymaster/IKeyAttestationApplicationIdProvider$Stub;-><init>()V
-PLandroid/security/keymaster/IKeyAttestationApplicationIdProvider$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/security/keymaster/KeyAttestationApplicationId$1;-><init>()V
-PLandroid/security/keymaster/KeyAttestationApplicationId;-><clinit>()V
-PLandroid/security/keymaster/KeyAttestationApplicationId;-><init>([Landroid/security/keymaster/KeyAttestationPackageInfo;)V
-PLandroid/security/keymaster/KeyAttestationApplicationId;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/security/keymaster/KeyAttestationPackageInfo$1;-><init>()V
-PLandroid/security/keymaster/KeyAttestationPackageInfo;-><clinit>()V
-PLandroid/security/keymaster/KeyAttestationPackageInfo;-><init>(Ljava/lang/String;J[Landroid/content/pm/Signature;)V
-PLandroid/security/keymaster/KeyAttestationPackageInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/security/keymaster/KeyCharacteristics$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keymaster/KeyCharacteristics;
 HSPLandroid/security/keymaster/KeyCharacteristics$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/security/keymaster/KeyCharacteristics;-><init>()V
 HSPLandroid/security/keymaster/KeyCharacteristics;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/security/keymaster/KeyCharacteristics;->getBoolean(I)Z
-HSPLandroid/security/keymaster/KeyCharacteristics;->getDate(I)Ljava/util/Date;
 HSPLandroid/security/keymaster/KeyCharacteristics;->getEnum(I)Ljava/lang/Integer;
 HSPLandroid/security/keymaster/KeyCharacteristics;->getEnums(I)Ljava/util/List;
-HSPLandroid/security/keymaster/KeyCharacteristics;->getUnsignedInt(IJ)J
-HSPLandroid/security/keymaster/KeyCharacteristics;->getUnsignedLongs(I)Ljava/util/List;
 HSPLandroid/security/keymaster/KeyCharacteristics;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/security/keymaster/KeyCharacteristics;->shallowCopyFrom(Landroid/security/keymaster/KeyCharacteristics;)V
 HSPLandroid/security/keymaster/KeymasterArgument$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keymaster/KeymasterArgument;
@@ -19292,97 +10038,38 @@
 HSPLandroid/security/keymaster/KeymasterArguments;-><init>()V
 HSPLandroid/security/keymaster/KeymasterArguments;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/security/keymaster/KeymasterArguments;-><init>(Landroid/os/Parcel;Landroid/security/keymaster/KeymasterArguments$1;)V
-HSPLandroid/security/keymaster/KeymasterArguments;->addBoolean(I)V
 HSPLandroid/security/keymaster/KeymasterArguments;->addBytes(I[B)V
-HSPLandroid/security/keymaster/KeymasterArguments;->addDateIfNotNull(ILjava/util/Date;)V
 HSPLandroid/security/keymaster/KeymasterArguments;->addEnum(II)V
 HSPLandroid/security/keymaster/KeymasterArguments;->addEnumTag(II)V
-HSPLandroid/security/keymaster/KeymasterArguments;->addEnums(I[I)V
-HSPLandroid/security/keymaster/KeymasterArguments;->addLongTag(ILjava/math/BigInteger;)V
 HSPLandroid/security/keymaster/KeymasterArguments;->addUnsignedInt(IJ)V
-HSPLandroid/security/keymaster/KeymasterArguments;->addUnsignedLong(ILjava/math/BigInteger;)V
 HSPLandroid/security/keymaster/KeymasterArguments;->containsTag(I)Z
 HSPLandroid/security/keymaster/KeymasterArguments;->getArgumentByTag(I)Landroid/security/keymaster/KeymasterArgument;
-HSPLandroid/security/keymaster/KeymasterArguments;->getBoolean(I)Z
 HSPLandroid/security/keymaster/KeymasterArguments;->getBytes(I[B)[B
-HSPLandroid/security/keymaster/KeymasterArguments;->getDate(ILjava/util/Date;)Ljava/util/Date;
 HSPLandroid/security/keymaster/KeymasterArguments;->getEnum(II)I
 HSPLandroid/security/keymaster/KeymasterArguments;->getEnumTagValue(Landroid/security/keymaster/KeymasterArgument;)I
 HSPLandroid/security/keymaster/KeymasterArguments;->getEnums(I)Ljava/util/List;
-PLandroid/security/keymaster/KeymasterArguments;->getLongTagValue(Landroid/security/keymaster/KeymasterArgument;)Ljava/math/BigInteger;
-HSPLandroid/security/keymaster/KeymasterArguments;->getUnsignedInt(IJ)J
-HSPLandroid/security/keymaster/KeymasterArguments;->getUnsignedLongs(I)Ljava/util/List;
-PLandroid/security/keymaster/KeymasterArguments;->toUint64(J)Ljava/math/BigInteger;
 HSPLandroid/security/keymaster/KeymasterArguments;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/security/keymaster/KeymasterBlob;-><init>([B)V
 HSPLandroid/security/keymaster/KeymasterBlob;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/security/keymaster/KeymasterBlobArgument;-><init>(I[B)V
 HSPLandroid/security/keymaster/KeymasterBlobArgument;->writeValue(Landroid/os/Parcel;)V
-HSPLandroid/security/keymaster/KeymasterBooleanArgument;-><init>(I)V
 HSPLandroid/security/keymaster/KeymasterBooleanArgument;-><init>(ILandroid/os/Parcel;)V
-HSPLandroid/security/keymaster/KeymasterBooleanArgument;->writeValue(Landroid/os/Parcel;)V
-PLandroid/security/keymaster/KeymasterCertificateChain$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keymaster/KeymasterCertificateChain;
-PLandroid/security/keymaster/KeymasterCertificateChain$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/security/keymaster/KeymasterCertificateChain;-><init>()V
-PLandroid/security/keymaster/KeymasterCertificateChain;-><init>(Landroid/os/Parcel;)V
-PLandroid/security/keymaster/KeymasterCertificateChain;-><init>(Landroid/os/Parcel;Landroid/security/keymaster/KeymasterCertificateChain$1;)V
-HSPLandroid/security/keymaster/KeymasterCertificateChain;->getCertificates()Ljava/util/List;
-HSPLandroid/security/keymaster/KeymasterCertificateChain;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/security/keymaster/KeymasterCertificateChain;->shallowCopyFrom(Landroid/security/keymaster/KeymasterCertificateChain;)V
-PLandroid/security/keymaster/KeymasterCertificateChain;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/security/keymaster/KeymasterDateArgument;-><init>(ILandroid/os/Parcel;)V
-PLandroid/security/keymaster/KeymasterDefs;->getErrorMessage(I)Ljava/lang/String;
 HSPLandroid/security/keymaster/KeymasterDefs;->getTagType(I)I
 HSPLandroid/security/keymaster/KeymasterIntArgument;-><init>(II)V
 HSPLandroid/security/keymaster/KeymasterIntArgument;-><init>(ILandroid/os/Parcel;)V
 HSPLandroid/security/keymaster/KeymasterIntArgument;->writeValue(Landroid/os/Parcel;)V
-HSPLandroid/security/keymaster/KeymasterLongArgument;-><init>(IJ)V
-PLandroid/security/keymaster/KeymasterLongArgument;-><init>(ILandroid/os/Parcel;)V
-HSPLandroid/security/keymaster/KeymasterLongArgument;->writeValue(Landroid/os/Parcel;)V
 HSPLandroid/security/keymaster/OperationResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keymaster/OperationResult;
 HSPLandroid/security/keymaster/OperationResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/security/keymaster/OperationResult;-><init>(ILandroid/os/IBinder;JI[BLandroid/security/keymaster/KeymasterArguments;)V
 HSPLandroid/security/keymaster/OperationResult;-><init>(Landroid/os/Parcel;)V
-PLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$AdditionalAuthenticationDataStream;-><init>(Landroid/security/KeyStore;Landroid/os/IBinder;)V
-PLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$AdditionalAuthenticationDataStream;-><init>(Landroid/security/KeyStore;Landroid/os/IBinder;Landroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$1;)V
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$AdditionalAuthenticationDataStream;->finish([B[B[B)Landroid/security/keymaster/OperationResult;
-PLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$BufferAllOutputUntilDoFinalStreamer;-><init>(Landroid/security/keystore/KeyStoreCryptoOperationStreamer;)V
-PLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$BufferAllOutputUntilDoFinalStreamer;-><init>(Landroid/security/keystore/KeyStoreCryptoOperationStreamer;Landroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$1;)V
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$BufferAllOutputUntilDoFinalStreamer;->doFinal([BII[B[B)[B
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM$NoPadding;-><init>()V
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM$NoPadding;->finalize()V
-PLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;-><init>(I)V
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->addAlgorithmSpecificParametersToBegin(Landroid/security/keymaster/KeymasterArguments;)V
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->createAdditionalAuthenticationDataStreamer(Landroid/security/KeyStore;Landroid/os/IBinder;)Landroid/security/keystore/KeyStoreCryptoOperationStreamer;
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->createMainDataStreamer(Landroid/security/KeyStore;Landroid/os/IBinder;)Landroid/security/keystore/KeyStoreCryptoOperationStreamer;
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->getAdditionalEntropyAmountForBegin()I
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->getAdditionalEntropyAmountForFinish()I
-PLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->initAlgorithmSpecificParameters()V
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->initAlgorithmSpecificParameters(Ljava/security/spec/AlgorithmParameterSpec;)V
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->resetAll()V
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->resetWhilePreservingInitState()V
-PLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi;-><init>(II)V
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi;->addAlgorithmSpecificParametersToBegin(Landroid/security/keymaster/KeymasterArguments;)V
-PLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi;->engineGetIV()[B
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi;->getIv()[B
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi;->initKey(ILjava/security/Key;)V
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi;->loadAlgorithmSpecificParametersFromBeginResult(Landroid/security/keymaster/KeymasterArguments;)V
-PLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi;->resetAll()V
-HSPLandroid/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi;->setIv([B)V
 HSPLandroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;-><init>()V
-HSPLandroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;->getSupportedEcdsaSignatureDigests()[Ljava/lang/String;
 HSPLandroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;->putAsymmetricCipherImpl(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;->putMacImpl(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;->putSignatureImpl(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;->putSymmetricCipherImpl(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;-><init>()V
-HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->createAdditionalAuthenticationDataStreamer(Landroid/security/KeyStore;Landroid/os/IBinder;)Landroid/security/keystore/KeyStoreCryptoOperationStreamer;
-HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->createMainDataStreamer(Landroid/security/KeyStore;Landroid/os/IBinder;)Landroid/security/keystore/KeyStoreCryptoOperationStreamer;
 HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->engineDoFinal([BII)[B
-PLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V
 HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
-HPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->engineUnwrap([BLjava/lang/String;I)Ljava/security/Key;
-HPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->engineWrap(Ljava/security/Key;)[B
 HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->ensureKeystoreOperationInitialized()V
 HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->finalize()V
 HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->flushAAD()V
@@ -19391,432 +10078,69 @@
 HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->resetAll()V
 HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->resetWhilePreservingInitState()V
 HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->setKey(Landroid/security/keystore/AndroidKeyStoreKey;)V
-HSPLandroid/security/keystore/AndroidKeyStoreECDSASignatureSpi$SHA256;-><init>()V
-HSPLandroid/security/keystore/AndroidKeyStoreECDSASignatureSpi;-><init>(I)V
-HSPLandroid/security/keystore/AndroidKeyStoreECDSASignatureSpi;->addAlgorithmSpecificParametersToBegin(Landroid/security/keymaster/KeymasterArguments;)V
-HSPLandroid/security/keystore/AndroidKeyStoreECDSASignatureSpi;->getAdditionalEntropyAmountForSign()I
-HSPLandroid/security/keystore/AndroidKeyStoreECDSASignatureSpi;->initKey(Landroid/security/keystore/AndroidKeyStoreKey;)V
-HSPLandroid/security/keystore/AndroidKeyStoreECDSASignatureSpi;->resetAll()V
-HSPLandroid/security/keystore/AndroidKeyStoreECDSASignatureSpi;->resetWhilePreservingInitState()V
-HSPLandroid/security/keystore/AndroidKeyStoreECPrivateKey;-><init>(Ljava/lang/String;ILjava/security/spec/ECParameterSpec;)V
-HSPLandroid/security/keystore/AndroidKeyStoreECPublicKey;-><init>(Ljava/lang/String;ILjava/security/interfaces/ECPublicKey;)V
-HSPLandroid/security/keystore/AndroidKeyStoreECPublicKey;-><init>(Ljava/lang/String;I[BLjava/security/spec/ECParameterSpec;Ljava/security/spec/ECPoint;)V
-HSPLandroid/security/keystore/AndroidKeyStoreECPublicKey;->getParams()Ljava/security/spec/ECParameterSpec;
-HSPLandroid/security/keystore/AndroidKeyStoreHmacSpi$HmacSHA256;-><init>()V
-HSPLandroid/security/keystore/AndroidKeyStoreHmacSpi;-><init>(I)V
-PLandroid/security/keystore/AndroidKeyStoreHmacSpi;->engineDoFinal()[B
-HSPLandroid/security/keystore/AndroidKeyStoreHmacSpi;->engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
-PLandroid/security/keystore/AndroidKeyStoreHmacSpi;->engineReset()V
-PLandroid/security/keystore/AndroidKeyStoreHmacSpi;->engineUpdate([BII)V
-HSPLandroid/security/keystore/AndroidKeyStoreHmacSpi;->ensureKeystoreOperationInitialized()V
-HSPLandroid/security/keystore/AndroidKeyStoreHmacSpi;->init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
-HSPLandroid/security/keystore/AndroidKeyStoreHmacSpi;->resetAll()V
-PLandroid/security/keystore/AndroidKeyStoreHmacSpi;->resetWhilePreservingInitState()V
 HSPLandroid/security/keystore/AndroidKeyStoreKey;-><init>(Ljava/lang/String;ILjava/lang/String;)V
 HSPLandroid/security/keystore/AndroidKeyStoreKey;->getAlgorithm()Ljava/lang/String;
 HSPLandroid/security/keystore/AndroidKeyStoreKey;->getAlias()Ljava/lang/String;
 HSPLandroid/security/keystore/AndroidKeyStoreKey;->getFormat()Ljava/lang/String;
 HSPLandroid/security/keystore/AndroidKeyStoreKey;->getUid()I
-HSPLandroid/security/keystore/AndroidKeyStoreKeyFactorySpi;-><init>()V
-HSPLandroid/security/keystore/AndroidKeyStoreKeyFactorySpi;->engineGeneratePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
-HSPLandroid/security/keystore/AndroidKeyStoreKeyFactorySpi;->engineGetKeySpec(Ljava/security/Key;Ljava/lang/Class;)Ljava/security/spec/KeySpec;
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi$EC;-><init>()V
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi$RSA;-><init>()V
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;-><clinit>()V
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;-><init>(I)V
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->addAlgorithmSpecificParameters(Landroid/security/keymaster/KeymasterArguments;)V
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->checkValidKeySize(IIZ)V
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->constructKeyGenerationArguments()Landroid/security/keymaster/KeymasterArguments;
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->createCertificateChain(Ljava/lang/String;Ljava/security/KeyPair;)Ljava/lang/Iterable;
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->generateKeyPair()Ljava/security/KeyPair;
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->generateKeystoreKeyPair(Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;[BI)V
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->generateSelfSignedCertificate(Ljava/security/PrivateKey;Ljava/security/PublicKey;)Ljava/security/cert/X509Certificate;
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->generateSelfSignedCertificateBytes(Ljava/security/KeyPair;)[B
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->generateSelfSignedCertificateWithFakeSignature(Ljava/security/PublicKey;)Ljava/security/cert/X509Certificate;
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->generateSelfSignedCertificateWithValidSignature(Ljava/security/PrivateKey;Ljava/security/PublicKey;Ljava/lang/String;)Ljava/security/cert/X509Certificate;
-PLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->getAttestationChain(Ljava/lang/String;Ljava/security/KeyPair;Landroid/security/keymaster/KeymasterArguments;)Ljava/lang/Iterable;
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->getAvailableKeymasterSignatureDigests([Ljava/lang/String;[Ljava/lang/String;)Ljava/util/Set;
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->getCertificateSignatureAlgorithm(IILandroid/security/keystore/KeyGenParameterSpec;)Ljava/lang/String;
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->getDefaultKeySize(I)I
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->initAlgorithmSpecificParameters()V
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->initialize(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->loadKeystoreKeyPair(Ljava/lang/String;)Ljava/security/KeyPair;
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->resetAll()V
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->storeCertificate(Ljava/lang/String;[BILjava/lang/String;)V
-HSPLandroid/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi;->storeCertificateChain(ILjava/lang/Iterable;)V
-HSPLandroid/security/keystore/AndroidKeyStoreLoadStoreParameter;-><init>(I)V
-HSPLandroid/security/keystore/AndroidKeyStoreLoadStoreParameter;->getUid()I
-HSPLandroid/security/keystore/AndroidKeyStorePrivateKey;-><init>(Ljava/lang/String;ILjava/lang/String;)V
 HSPLandroid/security/keystore/AndroidKeyStoreProvider;-><init>()V
-HSPLandroid/security/keystore/AndroidKeyStoreProvider;->getAndroidKeyStorePrivateKey(Landroid/security/keystore/AndroidKeyStorePublicKey;)Landroid/security/keystore/AndroidKeyStorePrivateKey;
-HSPLandroid/security/keystore/AndroidKeyStoreProvider;->getAndroidKeyStorePublicKey(Ljava/lang/String;ILjava/lang/String;[B)Landroid/security/keystore/AndroidKeyStorePublicKey;
 HSPLandroid/security/keystore/AndroidKeyStoreProvider;->getKeyCharacteristics(Landroid/security/KeyStore;Ljava/lang/String;I)Landroid/security/keymaster/KeyCharacteristics;
-HSPLandroid/security/keystore/AndroidKeyStoreProvider;->getKeyStoreForUid(I)Ljava/security/KeyStore;
 HSPLandroid/security/keystore/AndroidKeyStoreProvider;->install()V
 HSPLandroid/security/keystore/AndroidKeyStoreProvider;->loadAndroidKeyStoreKeyFromKeystore(Landroid/security/KeyStore;Ljava/lang/String;I)Landroid/security/keystore/AndroidKeyStoreKey;
-HSPLandroid/security/keystore/AndroidKeyStoreProvider;->loadAndroidKeyStoreKeyPairFromKeystore(Landroid/security/KeyStore;Ljava/lang/String;I)Ljava/security/KeyPair;
-HSPLandroid/security/keystore/AndroidKeyStoreProvider;->loadAndroidKeyStoreKeyPairFromKeystore(Landroid/security/KeyStore;Ljava/lang/String;ILandroid/security/keymaster/KeyCharacteristics;)Ljava/security/KeyPair;
-HSPLandroid/security/keystore/AndroidKeyStoreProvider;->loadAndroidKeyStorePublicKeyFromKeystore(Landroid/security/KeyStore;Ljava/lang/String;ILandroid/security/keymaster/KeyCharacteristics;)Landroid/security/keystore/AndroidKeyStorePublicKey;
 HSPLandroid/security/keystore/AndroidKeyStoreProvider;->loadAndroidKeyStoreSecretKeyFromKeystore(Ljava/lang/String;ILandroid/security/keymaster/KeyCharacteristics;)Landroid/security/keystore/AndroidKeyStoreSecretKey;
 HSPLandroid/security/keystore/AndroidKeyStoreProvider;->putKeyFactoryImpl(Ljava/lang/String;)V
 HSPLandroid/security/keystore/AndroidKeyStoreProvider;->putSecretKeyFactoryImpl(Ljava/lang/String;)V
-HSPLandroid/security/keystore/AndroidKeyStorePublicKey;-><init>(Ljava/lang/String;ILjava/lang/String;[B)V
-HSPLandroid/security/keystore/AndroidKeyStorePublicKey;->getEncoded()[B
-HSPLandroid/security/keystore/AndroidKeyStoreRSAPrivateKey;-><init>(Ljava/lang/String;ILjava/math/BigInteger;)V
-HSPLandroid/security/keystore/AndroidKeyStoreRSAPublicKey;-><init>(Ljava/lang/String;ILjava/security/interfaces/RSAPublicKey;)V
-HSPLandroid/security/keystore/AndroidKeyStoreRSAPublicKey;-><init>(Ljava/lang/String;I[BLjava/math/BigInteger;Ljava/math/BigInteger;)V
-HSPLandroid/security/keystore/AndroidKeyStoreRSAPublicKey;->getModulus()Ljava/math/BigInteger;
 HSPLandroid/security/keystore/AndroidKeyStoreSecretKey;-><init>(Ljava/lang/String;ILjava/lang/String;)V
-PLandroid/security/keystore/AndroidKeyStoreSecretKeyFactorySpi;-><init>()V
-PLandroid/security/keystore/AndroidKeyStoreSecretKeyFactorySpi;->engineGetKeySpec(Ljavax/crypto/SecretKey;Ljava/lang/Class;)Ljava/security/spec/KeySpec;
-HSPLandroid/security/keystore/AndroidKeyStoreSecretKeyFactorySpi;->getKeyInfo(Landroid/security/KeyStore;Ljava/lang/String;Ljava/lang/String;I)Landroid/security/keystore/KeyInfo;
-HSPLandroid/security/keystore/AndroidKeyStoreSignatureSpiBase;-><init>()V
-HSPLandroid/security/keystore/AndroidKeyStoreSignatureSpiBase;->createMainDataStreamer(Landroid/security/KeyStore;Landroid/os/IBinder;)Landroid/security/keystore/KeyStoreCryptoOperationStreamer;
-HSPLandroid/security/keystore/AndroidKeyStoreSignatureSpiBase;->engineInitSign(Ljava/security/PrivateKey;)V
-HSPLandroid/security/keystore/AndroidKeyStoreSignatureSpiBase;->engineInitSign(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V
-HSPLandroid/security/keystore/AndroidKeyStoreSignatureSpiBase;->engineSign()[B
-HSPLandroid/security/keystore/AndroidKeyStoreSignatureSpiBase;->engineUpdate([BII)V
-HSPLandroid/security/keystore/AndroidKeyStoreSignatureSpiBase;->ensureKeystoreOperationInitialized()V
-HSPLandroid/security/keystore/AndroidKeyStoreSignatureSpiBase;->getKeyStore()Landroid/security/KeyStore;
-HSPLandroid/security/keystore/AndroidKeyStoreSignatureSpiBase;->initKey(Landroid/security/keystore/AndroidKeyStoreKey;)V
-HSPLandroid/security/keystore/AndroidKeyStoreSignatureSpiBase;->resetAll()V
-HSPLandroid/security/keystore/AndroidKeyStoreSignatureSpiBase;->resetWhilePreservingInitState()V
-PLandroid/security/keystore/AndroidKeyStoreSpi$KeyStoreX509Certificate;-><init>(Ljava/lang/String;ILjava/security/cert/X509Certificate;)V
-PLandroid/security/keystore/AndroidKeyStoreSpi$KeyStoreX509Certificate;->getPublicKey()Ljava/security/PublicKey;
 HSPLandroid/security/keystore/AndroidKeyStoreSpi;-><init>()V
-PLandroid/security/keystore/AndroidKeyStoreSpi;->engineAliases()Ljava/util/Enumeration;
 HSPLandroid/security/keystore/AndroidKeyStoreSpi;->engineContainsAlias(Ljava/lang/String;)Z
-PLandroid/security/keystore/AndroidKeyStoreSpi;->engineDeleteEntry(Ljava/lang/String;)V
-PLandroid/security/keystore/AndroidKeyStoreSpi;->engineGetCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;
-PLandroid/security/keystore/AndroidKeyStoreSpi;->engineGetCertificateChain(Ljava/lang/String;)[Ljava/security/cert/Certificate;
-HSPLandroid/security/keystore/AndroidKeyStoreSpi;->engineGetCreationDate(Ljava/lang/String;)Ljava/util/Date;
 HSPLandroid/security/keystore/AndroidKeyStoreSpi;->engineGetKey(Ljava/lang/String;[C)Ljava/security/Key;
-HSPLandroid/security/keystore/AndroidKeyStoreSpi;->engineIsCertificateEntry(Ljava/lang/String;)Z
-HSPLandroid/security/keystore/AndroidKeyStoreSpi;->engineIsKeyEntry(Ljava/lang/String;)Z
 HSPLandroid/security/keystore/AndroidKeyStoreSpi;->engineLoad(Ljava/security/KeyStore$LoadStoreParameter;)V
-PLandroid/security/keystore/AndroidKeyStoreSpi;->engineSetEntry(Ljava/lang/String;Ljava/security/KeyStore$Entry;Ljava/security/KeyStore$ProtectionParameter;)V
-PLandroid/security/keystore/AndroidKeyStoreSpi;->getCertificateForPrivateKeyEntry(Ljava/lang/String;[B)Ljava/security/cert/Certificate;
-HSPLandroid/security/keystore/AndroidKeyStoreSpi;->getModificationDate(Ljava/lang/String;)Ljava/util/Date;
-PLandroid/security/keystore/AndroidKeyStoreSpi;->getUniqueAliases()Ljava/util/Set;
-HSPLandroid/security/keystore/AndroidKeyStoreSpi;->isKeyEntry(Ljava/lang/String;)Z
-PLandroid/security/keystore/AndroidKeyStoreSpi;->setSecretKeyEntry(Ljava/lang/String;Ljavax/crypto/SecretKey;Ljava/security/KeyStore$ProtectionParameter;)V
-PLandroid/security/keystore/AndroidKeyStoreSpi;->toCertificate([B)Ljava/security/cert/X509Certificate;
-PLandroid/security/keystore/AndroidKeyStoreSpi;->toCertificates([B)Ljava/util/Collection;
-PLandroid/security/keystore/AndroidKeyStoreSpi;->wrapIntoKeyStoreCertificate(Ljava/lang/String;ILjava/security/cert/X509Certificate;)Landroid/security/keystore/AndroidKeyStoreSpi$KeyStoreX509Certificate;
-HSPLandroid/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding;-><init>()V
-HSPLandroid/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding;->finalize()V
-HSPLandroid/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC;-><init>(I)V
-HSPLandroid/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi;-><init>(IIZ)V
-HSPLandroid/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi;->addAlgorithmSpecificParametersToBegin(Landroid/security/keymaster/KeymasterArguments;)V
-HSPLandroid/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi;->getAdditionalEntropyAmountForBegin()I
-HSPLandroid/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi;->initKey(ILjava/security/Key;)V
-HSPLandroid/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi;->loadAlgorithmSpecificParametersFromBeginResult(Landroid/security/keymaster/KeymasterArguments;)V
-HSPLandroid/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi;->resetAll()V
-HSPLandroid/security/keystore/ArrayUtils;->cloneIfNotEmpty([B)[B
-HSPLandroid/security/keystore/ArrayUtils;->cloneIfNotEmpty([Ljava/lang/String;)[Ljava/lang/String;
-PLandroid/security/keystore/ArrayUtils;->concat([BII[BII)[B
-PLandroid/security/keystore/ArrayUtils;->concat([B[B)[B
-HSPLandroid/security/keystore/ArrayUtils;->nullToEmpty([Ljava/lang/String;)[Ljava/lang/String;
-PLandroid/security/keystore/ArrayUtils;->subarray([BII)[B
-HSPLandroid/security/keystore/AttestationUtils;->isChainValid(Landroid/security/keymaster/KeymasterCertificateChain;)Z
-PLandroid/security/keystore/DelegatingX509Certificate;-><init>(Ljava/security/cert/X509Certificate;)V
-PLandroid/security/keystore/DelegatingX509Certificate;->getEncoded()[B
-PLandroid/security/keystore/DelegatingX509Certificate;->getPublicKey()Ljava/security/PublicKey;
-PLandroid/security/keystore/IKeystoreCertificateChainCallback$Stub;-><init>()V
-PLandroid/security/keystore/IKeystoreCertificateChainCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/security/keystore/IKeystoreCertificateChainCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/security/keystore/IKeystoreExportKeyCallback$Stub;-><init>()V
-HSPLandroid/security/keystore/IKeystoreExportKeyCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/security/keystore/IKeystoreExportKeyCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/security/keystore/ArrayUtils;->concat([BII[BII)[B
+HSPLandroid/security/keystore/ArrayUtils;->concat([B[B)[B
+HSPLandroid/security/keystore/ArrayUtils;->copy([BI[BII)I
+HSPLandroid/security/keystore/ArrayUtils;->subarray([BII)[B
 HSPLandroid/security/keystore/IKeystoreKeyCharacteristicsCallback$Stub;-><init>()V
 HSPLandroid/security/keystore/IKeystoreKeyCharacteristicsCallback$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/security/keystore/IKeystoreKeyCharacteristicsCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/security/keystore/IKeystoreOperationResultCallback$Stub;-><init>()V
 HSPLandroid/security/keystore/IKeystoreOperationResultCallback$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/security/keystore/IKeystoreOperationResultCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/security/keystore/IKeystoreResponseCallback$Stub;-><init>()V
+HSPLandroid/security/keystore/IKeystoreResponseCallback$Stub;-><init>()V
 HSPLandroid/security/keystore/IKeystoreResponseCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/security/keystore/IKeystoreResponseCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->abort(Landroid/security/keystore/IKeystoreResponseCallback;Landroid/os/IBinder;)I
-PLandroid/security/keystore/IKeystoreService$Stub$Proxy;->addAuthToken([B)I
 HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/security/keystore/IKeystoreService$Stub$Proxy;->attestKey(Landroid/security/keystore/IKeystoreCertificateChainCallback;Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;)I
 HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->begin(Landroid/security/keystore/IKeystoreOperationResultCallback;Landroid/os/IBinder;Ljava/lang/String;IZLandroid/security/keymaster/KeymasterArguments;[BI)I
-HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->del(Ljava/lang/String;I)I
 HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->exist(Ljava/lang/String;I)I
-HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->exportKey(Landroid/security/keystore/IKeystoreExportKeyCallback;Ljava/lang/String;ILandroid/security/keymaster/KeymasterBlob;Landroid/security/keymaster/KeymasterBlob;I)I
 HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->finish(Landroid/security/keystore/IKeystoreOperationResultCallback;Landroid/os/IBinder;Landroid/security/keymaster/KeymasterArguments;[B[B[B)I
-HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->generateKey(Landroid/security/keystore/IKeystoreKeyCharacteristicsCallback;Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;[BII)I
-HPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->get(Ljava/lang/String;I)[B
 HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->getKeyCharacteristics(Landroid/security/keystore/IKeystoreKeyCharacteristicsCallback;Ljava/lang/String;Landroid/security/keymaster/KeymasterBlob;Landroid/security/keymaster/KeymasterBlob;I)I
-PLandroid/security/keystore/IKeystoreService$Stub$Proxy;->getState(I)I
-HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->getmtime(Ljava/lang/String;I)J
-PLandroid/security/keystore/IKeystoreService$Stub$Proxy;->grant(Ljava/lang/String;I)Ljava/lang/String;
-PLandroid/security/keystore/IKeystoreService$Stub$Proxy;->importKey(Landroid/security/keystore/IKeystoreKeyCharacteristicsCallback;Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;I[BII)I
-HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->insert(Ljava/lang/String;[BII)I
-PLandroid/security/keystore/IKeystoreService$Stub$Proxy;->list(Ljava/lang/String;I)[Ljava/lang/String;
-PLandroid/security/keystore/IKeystoreService$Stub$Proxy;->onKeyguardVisibilityChanged(ZI)I
-PLandroid/security/keystore/IKeystoreService$Stub$Proxy;->unlock(ILjava/lang/String;)I
 HSPLandroid/security/keystore/IKeystoreService$Stub$Proxy;->update(Landroid/security/keystore/IKeystoreOperationResultCallback;Landroid/os/IBinder;Landroid/security/keymaster/KeymasterArguments;[B)I
 HSPLandroid/security/keystore/IKeystoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/keystore/IKeystoreService;
-PLandroid/security/keystore/KeyGenParameterSpec$Builder;-><init>(Landroid/security/keystore/KeyGenParameterSpec;)V
-HSPLandroid/security/keystore/KeyGenParameterSpec$Builder;-><init>(Ljava/lang/String;I)V
-HSPLandroid/security/keystore/KeyGenParameterSpec$Builder;->build()Landroid/security/keystore/KeyGenParameterSpec;
-HSPLandroid/security/keystore/KeyGenParameterSpec$Builder;->setAlgorithmParameterSpec(Ljava/security/spec/AlgorithmParameterSpec;)Landroid/security/keystore/KeyGenParameterSpec$Builder;
-PLandroid/security/keystore/KeyGenParameterSpec$Builder;->setAttestationChallenge([B)Landroid/security/keystore/KeyGenParameterSpec$Builder;
-HSPLandroid/security/keystore/KeyGenParameterSpec$Builder;->setDigests([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;
-HSPLandroid/security/keystore/KeyGenParameterSpec$Builder;->setIsStrongBoxBacked(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;
-PLandroid/security/keystore/KeyGenParameterSpec$Builder;->setUniqueIdIncluded(Z)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;ZZIZ[BZZZZZZ)V
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getAttestationChallenge()[B
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getBlockModes()[Ljava/lang/String;
-HPLandroid/security/keystore/KeyGenParameterSpec;->getBoundToSpecificSecureUserId()J
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getCertificateNotAfter()Ljava/util/Date;
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getCertificateNotBefore()Ljava/util/Date;
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getCertificateSerialNumber()Ljava/math/BigInteger;
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getCertificateSubject()Ljavax/security/auth/x500/X500Principal;
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getDigests()[Ljava/lang/String;
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getEncryptionPaddings()[Ljava/lang/String;
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getKeySize()I
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getKeyValidityForConsumptionEnd()Ljava/util/Date;
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getKeyValidityForOriginationEnd()Ljava/util/Date;
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getKeyValidityStart()Ljava/util/Date;
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getKeystoreAlias()Ljava/lang/String;
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getPurposes()I
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getSignaturePaddings()[Ljava/lang/String;
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getUid()I
-HSPLandroid/security/keystore/KeyGenParameterSpec;->getUserAuthenticationValidityDurationSeconds()I
-HSPLandroid/security/keystore/KeyGenParameterSpec;->isDigestsSpecified()Z
-HSPLandroid/security/keystore/KeyGenParameterSpec;->isInvalidatedByBiometricEnrollment()Z
-HSPLandroid/security/keystore/KeyGenParameterSpec;->isRandomizedEncryptionRequired()Z
-HSPLandroid/security/keystore/KeyGenParameterSpec;->isStrongBoxBacked()Z
-HSPLandroid/security/keystore/KeyGenParameterSpec;->isUniqueIdIncluded()Z
-HSPLandroid/security/keystore/KeyGenParameterSpec;->isUnlockedDeviceRequired()Z
-HSPLandroid/security/keystore/KeyGenParameterSpec;->isUserAuthenticationRequired()Z
-HSPLandroid/security/keystore/KeyGenParameterSpec;->isUserAuthenticationValidWhileOnBody()Z
-HSPLandroid/security/keystore/KeyGenParameterSpec;->isUserConfirmationRequired()Z
-HSPLandroid/security/keystore/KeyGenParameterSpec;->isUserPresenceRequired()Z
-HSPLandroid/security/keystore/KeyInfo;-><init>(Ljava/lang/String;ZIILjava/util/Date;Ljava/util/Date;Ljava/util/Date;I[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ZIZZZZZ)V
-PLandroid/security/keystore/KeyInfo;->getUserAuthenticationValidityDurationSeconds()I
-HSPLandroid/security/keystore/KeyInfo;->isInsideSecureHardware()Z
-HSPLandroid/security/keystore/KeyProperties$BlockMode;->allFromKeymaster(Ljava/util/Collection;)[Ljava/lang/String;
-HSPLandroid/security/keystore/KeyProperties$BlockMode;->allToKeymaster([Ljava/lang/String;)[I
-PLandroid/security/keystore/KeyProperties$BlockMode;->fromKeymaster(I)Ljava/lang/String;
-HSPLandroid/security/keystore/KeyProperties$BlockMode;->toKeymaster(Ljava/lang/String;)I
-HSPLandroid/security/keystore/KeyProperties$Digest;->allFromKeymaster(Ljava/util/Collection;)[Ljava/lang/String;
-HSPLandroid/security/keystore/KeyProperties$Digest;->allToKeymaster([Ljava/lang/String;)[I
-HSPLandroid/security/keystore/KeyProperties$Digest;->fromKeymaster(I)Ljava/lang/String;
-HSPLandroid/security/keystore/KeyProperties$Digest;->fromKeymasterToSignatureAlgorithmDigest(I)Ljava/lang/String;
-HSPLandroid/security/keystore/KeyProperties$Digest;->toKeymaster(Ljava/lang/String;)I
-HSPLandroid/security/keystore/KeyProperties$EncryptionPadding;->allToKeymaster([Ljava/lang/String;)[I
-PLandroid/security/keystore/KeyProperties$EncryptionPadding;->fromKeymaster(I)Ljava/lang/String;
-HSPLandroid/security/keystore/KeyProperties$EncryptionPadding;->toKeymaster(Ljava/lang/String;)I
-HSPLandroid/security/keystore/KeyProperties$KeyAlgorithm;->fromKeymasterAsymmetricKeyAlgorithm(I)Ljava/lang/String;
 HSPLandroid/security/keystore/KeyProperties$KeyAlgorithm;->fromKeymasterSecretKeyAlgorithm(II)Ljava/lang/String;
-PLandroid/security/keystore/KeyProperties$KeyAlgorithm;->toKeymasterSecretKeyAlgorithm(Ljava/lang/String;)I
-HSPLandroid/security/keystore/KeyProperties$Origin;->fromKeymaster(I)I
-HSPLandroid/security/keystore/KeyProperties$Purpose;->allFromKeymaster(Ljava/util/Collection;)I
-HSPLandroid/security/keystore/KeyProperties$Purpose;->allToKeymaster(I)[I
-HSPLandroid/security/keystore/KeyProperties$Purpose;->fromKeymaster(I)I
-HSPLandroid/security/keystore/KeyProperties$Purpose;->toKeymaster(I)I
-HSPLandroid/security/keystore/KeyProperties$SignaturePadding;->allToKeymaster([Ljava/lang/String;)[I
-HSPLandroid/security/keystore/KeyProperties;->access$000(I)[I
-HSPLandroid/security/keystore/KeyProperties;->getSetBitCount(I)I
-HSPLandroid/security/keystore/KeyProperties;->getSetFlags(I)[I
-PLandroid/security/keystore/KeyProtection$Builder;-><init>(I)V
-PLandroid/security/keystore/KeyProtection$Builder;->build()Landroid/security/keystore/KeyProtection;
-PLandroid/security/keystore/KeyProtection$Builder;->setBlockModes([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;
-PLandroid/security/keystore/KeyProtection$Builder;->setEncryptionPaddings([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;
-PLandroid/security/keystore/KeyProtection;-><init>(Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;I[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ZZIZZZJZZZZ)V
-PLandroid/security/keystore/KeyProtection;-><init>(Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;I[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ZZIZZZJZZZZLandroid/security/keystore/KeyProtection$1;)V
-PLandroid/security/keystore/KeyProtection;->getBlockModes()[Ljava/lang/String;
-PLandroid/security/keystore/KeyProtection;->getEncryptionPaddings()[Ljava/lang/String;
-PLandroid/security/keystore/KeyProtection;->getKeyValidityForConsumptionEnd()Ljava/util/Date;
-PLandroid/security/keystore/KeyProtection;->getKeyValidityForOriginationEnd()Ljava/util/Date;
-PLandroid/security/keystore/KeyProtection;->getKeyValidityStart()Ljava/util/Date;
-PLandroid/security/keystore/KeyProtection;->getPurposes()I
-PLandroid/security/keystore/KeyProtection;->getSignaturePaddings()[Ljava/lang/String;
-PLandroid/security/keystore/KeyProtection;->isCriticalToDeviceEncryption()Z
-PLandroid/security/keystore/KeyProtection;->isDigestsSpecified()Z
-PLandroid/security/keystore/KeyProtection;->isRandomizedEncryptionRequired()Z
-PLandroid/security/keystore/KeyProtection;->isStrongBoxBacked()Z
-PLandroid/security/keystore/KeyProtection;->isUnlockedDeviceRequired()Z
-PLandroid/security/keystore/KeyProtection;->isUserAuthenticationRequired()Z
-PLandroid/security/keystore/KeyProtection;->isUserConfirmationRequired()Z
-PLandroid/security/keystore/KeyProtection;->isUserPresenceRequired()Z
 HSPLandroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer$MainDataStream;-><init>(Landroid/security/KeyStore;Landroid/os/IBinder;)V
 HSPLandroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer$MainDataStream;->finish([B[B[B)Landroid/security/keymaster/OperationResult;
 HSPLandroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer$MainDataStream;->update([B)Landroid/security/keymaster/OperationResult;
-HSPLandroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer;-><init>(Landroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer$Stream;)V
 HSPLandroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer;-><init>(Landroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer$Stream;I)V
+HSPLandroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer;-><init>(Landroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer$Stream;II)V
 HSPLandroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer;->doFinal([BII[B[B)[B
-HSPLandroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer;->flush()[B
 HSPLandroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer;->update([BII)[B
 HSPLandroid/security/keystore/KeyStoreCryptoOperationUtils;->getExceptionForCipherInit(Landroid/security/KeyStore;Landroid/security/keystore/AndroidKeyStoreKey;I)Ljava/security/GeneralSecurityException;
-HSPLandroid/security/keystore/KeyStoreCryptoOperationUtils;->getInvalidKeyExceptionForInit(Landroid/security/KeyStore;Landroid/security/keystore/AndroidKeyStoreKey;I)Ljava/security/InvalidKeyException;
 HSPLandroid/security/keystore/KeyStoreCryptoOperationUtils;->getRandomBytesToMixIntoKeystoreRng(Ljava/security/SecureRandom;I)[B
-HSPLandroid/security/keystore/KeyStoreCryptoOperationUtils;->getRng()Ljava/security/SecureRandom;
-PLandroid/security/keystore/KeymasterUtils;->addMinMacLengthAuthorizationIfNecessary(Landroid/security/keymaster/KeymasterArguments;I[I[I)V
-HSPLandroid/security/keystore/KeymasterUtils;->addUserAuthArgs(Landroid/security/keymaster/KeymasterArguments;Landroid/security/keystore/UserAuthArgs;)V
-HSPLandroid/security/keystore/KeymasterUtils;->getDigestOutputSizeBits(I)I
-HPLandroid/security/keystore/KeymasterUtils;->getRootSid()J
-PLandroid/security/keystore/KeymasterUtils;->isKeymasterBlockModeIndCpaCompatibleWithSymmetricCrypto(I)Z
 HSPLandroid/security/keystore/KeystoreResponse$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keystore/KeystoreResponse;
 HSPLandroid/security/keystore/KeystoreResponse$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/security/keystore/KeystoreResponse;-><init>(ILjava/lang/String;)V
 HSPLandroid/security/keystore/KeystoreResponse;->getErrorCode()I
-HSPLandroid/security/keystore/ParcelableKeyGenParameterSpec$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keystore/ParcelableKeyGenParameterSpec;
-HSPLandroid/security/keystore/ParcelableKeyGenParameterSpec$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/security/keystore/ParcelableKeyGenParameterSpec;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/security/keystore/ParcelableKeyGenParameterSpec;-><init>(Landroid/os/Parcel;Landroid/security/keystore/ParcelableKeyGenParameterSpec$1;)V
-HSPLandroid/security/keystore/ParcelableKeyGenParameterSpec;-><init>(Landroid/security/keystore/KeyGenParameterSpec;)V
-HSPLandroid/security/keystore/ParcelableKeyGenParameterSpec;->getSpec()Landroid/security/keystore/KeyGenParameterSpec;
-HSPLandroid/security/keystore/ParcelableKeyGenParameterSpec;->readDateOrNull(Landroid/os/Parcel;)Ljava/util/Date;
-HSPLandroid/security/keystore/ParcelableKeyGenParameterSpec;->writeOptionalDate(Landroid/os/Parcel;Ljava/util/Date;)V
-HSPLandroid/security/keystore/ParcelableKeyGenParameterSpec;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/security/keystore/UserNotAuthenticatedException;-><init>()V
-HSPLandroid/security/keystore/Utils;->cloneIfNotNull(Ljava/util/Date;)Ljava/util/Date;
-HSPLandroid/security/keystore/Utils;->cloneIfNotNull([B)[B
-PLandroid/security/keystore/recovery/KeyChainProtectionParams$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keystore/recovery/KeyChainProtectionParams;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams$Builder;-><init>()V
-PLandroid/security/keystore/recovery/KeyChainProtectionParams$Builder;->build()Landroid/security/keystore/recovery/KeyChainProtectionParams;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams$Builder;->setKeyDerivationParams(Landroid/security/keystore/recovery/KeyDerivationParams;)Landroid/security/keystore/recovery/KeyChainProtectionParams$Builder;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams$Builder;->setLockScreenUiFormat(I)Landroid/security/keystore/recovery/KeyChainProtectionParams$Builder;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams$Builder;->setSecret([B)Landroid/security/keystore/recovery/KeyChainProtectionParams$Builder;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams$Builder;->setUserSecretType(I)Landroid/security/keystore/recovery/KeyChainProtectionParams$Builder;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;-><init>()V
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;-><init>(Landroid/os/Parcel;)V
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;-><init>(Landroid/security/keystore/recovery/KeyChainProtectionParams$1;)V
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;->access$100(Landroid/security/keystore/recovery/KeyChainProtectionParams;)Ljava/lang/Integer;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;->access$102(Landroid/security/keystore/recovery/KeyChainProtectionParams;Ljava/lang/Integer;)Ljava/lang/Integer;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;->access$200(Landroid/security/keystore/recovery/KeyChainProtectionParams;)Ljava/lang/Integer;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;->access$202(Landroid/security/keystore/recovery/KeyChainProtectionParams;Ljava/lang/Integer;)Ljava/lang/Integer;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;->access$300(Landroid/security/keystore/recovery/KeyChainProtectionParams;)Landroid/security/keystore/recovery/KeyDerivationParams;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;->access$302(Landroid/security/keystore/recovery/KeyChainProtectionParams;Landroid/security/keystore/recovery/KeyDerivationParams;)Landroid/security/keystore/recovery/KeyDerivationParams;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;->access$400(Landroid/security/keystore/recovery/KeyChainProtectionParams;)[B
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;->access$402(Landroid/security/keystore/recovery/KeyChainProtectionParams;[B)[B
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;->getKeyDerivationParams()Landroid/security/keystore/recovery/KeyDerivationParams;
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;->getLockScreenUiFormat()I
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;->getUserSecretType()I
-PLandroid/security/keystore/recovery/KeyChainProtectionParams;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/security/keystore/recovery/KeyChainSnapshot$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keystore/recovery/KeyChainSnapshot;
-PLandroid/security/keystore/recovery/KeyChainSnapshot$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/security/keystore/recovery/KeyChainSnapshot$Builder;-><init>()V
-PLandroid/security/keystore/recovery/KeyChainSnapshot$Builder;->build()Landroid/security/keystore/recovery/KeyChainSnapshot;
-PLandroid/security/keystore/recovery/KeyChainSnapshot$Builder;->setCounterId(J)Landroid/security/keystore/recovery/KeyChainSnapshot$Builder;
-PLandroid/security/keystore/recovery/KeyChainSnapshot$Builder;->setEncryptedRecoveryKeyBlob([B)Landroid/security/keystore/recovery/KeyChainSnapshot$Builder;
-PLandroid/security/keystore/recovery/KeyChainSnapshot$Builder;->setKeyChainProtectionParams(Ljava/util/List;)Landroid/security/keystore/recovery/KeyChainSnapshot$Builder;
-PLandroid/security/keystore/recovery/KeyChainSnapshot$Builder;->setMaxAttempts(I)Landroid/security/keystore/recovery/KeyChainSnapshot$Builder;
-PLandroid/security/keystore/recovery/KeyChainSnapshot$Builder;->setServerParams([B)Landroid/security/keystore/recovery/KeyChainSnapshot$Builder;
-PLandroid/security/keystore/recovery/KeyChainSnapshot$Builder;->setSnapshotVersion(I)Landroid/security/keystore/recovery/KeyChainSnapshot$Builder;
-PLandroid/security/keystore/recovery/KeyChainSnapshot$Builder;->setTrustedHardwareCertPath(Ljava/security/cert/CertPath;)Landroid/security/keystore/recovery/KeyChainSnapshot$Builder;
-PLandroid/security/keystore/recovery/KeyChainSnapshot$Builder;->setWrappedApplicationKeys(Ljava/util/List;)Landroid/security/keystore/recovery/KeyChainSnapshot$Builder;
-PLandroid/security/keystore/recovery/KeyChainSnapshot;-><init>()V
-PLandroid/security/keystore/recovery/KeyChainSnapshot;-><init>(Landroid/os/Parcel;)V
-PLandroid/security/keystore/recovery/KeyChainSnapshot;-><init>(Landroid/security/keystore/recovery/KeyChainSnapshot$1;)V
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$102(Landroid/security/keystore/recovery/KeyChainSnapshot;I)I
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$202(Landroid/security/keystore/recovery/KeyChainSnapshot;I)I
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$302(Landroid/security/keystore/recovery/KeyChainSnapshot;J)J
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$400(Landroid/security/keystore/recovery/KeyChainSnapshot;)[B
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$402(Landroid/security/keystore/recovery/KeyChainSnapshot;[B)[B
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$500(Landroid/security/keystore/recovery/KeyChainSnapshot;)Landroid/security/keystore/recovery/RecoveryCertPath;
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$502(Landroid/security/keystore/recovery/KeyChainSnapshot;Landroid/security/keystore/recovery/RecoveryCertPath;)Landroid/security/keystore/recovery/RecoveryCertPath;
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$600(Landroid/security/keystore/recovery/KeyChainSnapshot;)Ljava/util/List;
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$602(Landroid/security/keystore/recovery/KeyChainSnapshot;Ljava/util/List;)Ljava/util/List;
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$700(Landroid/security/keystore/recovery/KeyChainSnapshot;)Ljava/util/List;
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$702(Landroid/security/keystore/recovery/KeyChainSnapshot;Ljava/util/List;)Ljava/util/List;
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$800(Landroid/security/keystore/recovery/KeyChainSnapshot;)[B
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->access$802(Landroid/security/keystore/recovery/KeyChainSnapshot;[B)[B
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->getCounterId()J
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->getEncryptedRecoveryKeyBlob()[B
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->getKeyChainProtectionParams()Ljava/util/List;
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->getMaxAttempts()I
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->getServerParams()[B
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->getSnapshotVersion()I
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->getTrustedHardwareCertPath()Ljava/security/cert/CertPath;
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->getWrappedApplicationKeys()Ljava/util/List;
-PLandroid/security/keystore/recovery/KeyChainSnapshot;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/security/keystore/recovery/KeyDerivationParams$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keystore/recovery/KeyDerivationParams;
-PLandroid/security/keystore/recovery/KeyDerivationParams$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/security/keystore/recovery/KeyDerivationParams;-><init>(I[B)V
-PLandroid/security/keystore/recovery/KeyDerivationParams;-><init>(I[BI)V
-PLandroid/security/keystore/recovery/KeyDerivationParams;-><init>(Landroid/os/Parcel;)V
-PLandroid/security/keystore/recovery/KeyDerivationParams;->createSha256Params([B)Landroid/security/keystore/recovery/KeyDerivationParams;
-PLandroid/security/keystore/recovery/KeyDerivationParams;->getAlgorithm()I
-PLandroid/security/keystore/recovery/KeyDerivationParams;->getMemoryDifficulty()I
-PLandroid/security/keystore/recovery/KeyDerivationParams;->getSalt()[B
-PLandroid/security/keystore/recovery/KeyDerivationParams;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/security/keystore/recovery/RecoveryCertPath$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keystore/recovery/RecoveryCertPath;
-PLandroid/security/keystore/recovery/RecoveryCertPath$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/security/keystore/recovery/RecoveryCertPath;-><init>(Landroid/os/Parcel;)V
-PLandroid/security/keystore/recovery/RecoveryCertPath;-><init>(Landroid/os/Parcel;Landroid/security/keystore/recovery/RecoveryCertPath$1;)V
-PLandroid/security/keystore/recovery/RecoveryCertPath;-><init>([B)V
-PLandroid/security/keystore/recovery/RecoveryCertPath;->createRecoveryCertPath(Ljava/security/cert/CertPath;)Landroid/security/keystore/recovery/RecoveryCertPath;
-PLandroid/security/keystore/recovery/RecoveryCertPath;->decodeCertPath([B)Ljava/security/cert/CertPath;
-PLandroid/security/keystore/recovery/RecoveryCertPath;->encodeCertPath(Ljava/security/cert/CertPath;)[B
-PLandroid/security/keystore/recovery/RecoveryCertPath;->getCertPath()Ljava/security/cert/CertPath;
-PLandroid/security/keystore/recovery/RecoveryCertPath;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/security/keystore/recovery/RecoveryController;->generateKey(Ljava/lang/String;)Ljava/security/Key;
-PLandroid/security/keystore/recovery/RecoveryController;->getAliases()Ljava/util/List;
-PLandroid/security/keystore/recovery/RecoveryController;->getInstance(Landroid/content/Context;)Landroid/security/keystore/recovery/RecoveryController;
-HPLandroid/security/keystore/recovery/RecoveryController;->getKey(Ljava/lang/String;)Ljava/security/Key;
-PLandroid/security/keystore/recovery/RecoveryController;->getKeyChainSnapshot()Landroid/security/keystore/recovery/KeyChainSnapshot;
-HPLandroid/security/keystore/recovery/RecoveryController;->getKeyFromGrant(Ljava/lang/String;)Ljava/security/Key;
-PLandroid/security/keystore/recovery/RecoveryController;->getRecoverySecretTypes()[I
-HPLandroid/security/keystore/recovery/RecoveryController;->getRecoveryStatus(Ljava/lang/String;)I
-PLandroid/security/keystore/recovery/RecoveryController;->initRecoveryService(Ljava/lang/String;[B[B)V
-HPLandroid/security/keystore/recovery/RecoveryController;->isRecoverableKeyStoreEnabled(Landroid/content/Context;)Z
-PLandroid/security/keystore/recovery/RecoveryController;->setRecoverySecretTypes([I)V
-HPLandroid/security/keystore/recovery/RecoveryController;->setRecoveryStatus(Ljava/lang/String;I)V
-PLandroid/security/keystore/recovery/RecoveryController;->setServerParams([B)V
-PLandroid/security/keystore/recovery/RecoveryController;->setSnapshotCreatedPendingIntent(Landroid/app/PendingIntent;)V
-PLandroid/security/keystore/recovery/TrustedRootCertificates;-><clinit>()V
-PLandroid/security/keystore/recovery/TrustedRootCertificates;->constructRootCertificateMap()Landroid/util/ArrayMap;
-PLandroid/security/keystore/recovery/TrustedRootCertificates;->getRootCertificate(Ljava/lang/String;)Ljava/security/cert/X509Certificate;
-PLandroid/security/keystore/recovery/TrustedRootCertificates;->getRootCertificates()Ljava/util/Map;
-PLandroid/security/keystore/recovery/TrustedRootCertificates;->parseBase64Certificate(Ljava/lang/String;)Ljava/security/cert/X509Certificate;
-PLandroid/security/keystore/recovery/WrappedApplicationKey$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keystore/recovery/WrappedApplicationKey;
-PLandroid/security/keystore/recovery/WrappedApplicationKey$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/security/keystore/recovery/WrappedApplicationKey$Builder;-><init>()V
-PLandroid/security/keystore/recovery/WrappedApplicationKey$Builder;->build()Landroid/security/keystore/recovery/WrappedApplicationKey;
-PLandroid/security/keystore/recovery/WrappedApplicationKey$Builder;->setAlias(Ljava/lang/String;)Landroid/security/keystore/recovery/WrappedApplicationKey$Builder;
-PLandroid/security/keystore/recovery/WrappedApplicationKey$Builder;->setEncryptedKeyMaterial([B)Landroid/security/keystore/recovery/WrappedApplicationKey$Builder;
-PLandroid/security/keystore/recovery/WrappedApplicationKey$Builder;->setMetadata([B)Landroid/security/keystore/recovery/WrappedApplicationKey$Builder;
-PLandroid/security/keystore/recovery/WrappedApplicationKey;-><init>()V
-PLandroid/security/keystore/recovery/WrappedApplicationKey;-><init>(Landroid/os/Parcel;)V
-PLandroid/security/keystore/recovery/WrappedApplicationKey;-><init>(Landroid/security/keystore/recovery/WrappedApplicationKey$1;)V
-PLandroid/security/keystore/recovery/WrappedApplicationKey;->access$100(Landroid/security/keystore/recovery/WrappedApplicationKey;)Ljava/lang/String;
-PLandroid/security/keystore/recovery/WrappedApplicationKey;->access$102(Landroid/security/keystore/recovery/WrappedApplicationKey;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/security/keystore/recovery/WrappedApplicationKey;->access$200(Landroid/security/keystore/recovery/WrappedApplicationKey;)[B
-PLandroid/security/keystore/recovery/WrappedApplicationKey;->access$202(Landroid/security/keystore/recovery/WrappedApplicationKey;[B)[B
-PLandroid/security/keystore/recovery/WrappedApplicationKey;->access$302(Landroid/security/keystore/recovery/WrappedApplicationKey;[B)[B
-PLandroid/security/keystore/recovery/WrappedApplicationKey;->getAlias()Ljava/lang/String;
-PLandroid/security/keystore/recovery/WrappedApplicationKey;->getEncryptedKeyMaterial()[B
-PLandroid/security/keystore/recovery/WrappedApplicationKey;->getMetadata()[B
-PLandroid/security/keystore/recovery/WrappedApplicationKey;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/security/keystore/recovery/X509CertificateParsingUtils;->decodeBase64(Ljava/lang/String;)[B
-PLandroid/security/keystore/recovery/X509CertificateParsingUtils;->decodeBase64Cert(Ljava/lang/String;)Ljava/security/cert/X509Certificate;
-PLandroid/security/keystore/recovery/X509CertificateParsingUtils;->decodeCert(Ljava/io/InputStream;)Ljava/security/cert/X509Certificate;
-PLandroid/security/keystore/recovery/X509CertificateParsingUtils;->decodeCert([B)Ljava/security/cert/X509Certificate;
 HSPLandroid/security/net/config/ApplicationConfig;-><init>(Landroid/security/net/config/ConfigSource;)V
 HSPLandroid/security/net/config/ApplicationConfig;->ensureInitialized()V
 HSPLandroid/security/net/config/ApplicationConfig;->getConfigForHostname(Ljava/lang/String;)Landroid/security/net/config/NetworkSecurityConfig;
 HSPLandroid/security/net/config/ApplicationConfig;->getDefaultInstance()Landroid/security/net/config/ApplicationConfig;
 HSPLandroid/security/net/config/ApplicationConfig;->getTrustManager()Ljavax/net/ssl/X509TrustManager;
-HSPLandroid/security/net/config/ApplicationConfig;->isCleartextTrafficPermitted()Z
-HSPLandroid/security/net/config/ApplicationConfig;->isCleartextTrafficPermitted(Ljava/lang/String;)Z
 HSPLandroid/security/net/config/ApplicationConfig;->setDefaultInstance(Landroid/security/net/config/ApplicationConfig;)V
-HSLandroid/security/net/config/CertificatesEntryRef;-><init>(Landroid/security/net/config/CertificateSource;Z)V
-HPLandroid/security/net/config/CertificatesEntryRef;->findAllCertificatesByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
-HPLandroid/security/net/config/CertificatesEntryRef;->findBySubjectAndPublicKey(Ljava/security/cert/X509Certificate;)Landroid/security/net/config/TrustAnchor;
-HSPLandroid/security/net/config/CertificatesEntryRef;->overridesPins()Z
+HSPLandroid/security/net/config/CertificatesEntryRef;-><init>(Landroid/security/net/config/CertificateSource;Z)V
+HSPLandroid/security/net/config/CertificatesEntryRef;->findAllCertificatesByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
+HSPLandroid/security/net/config/CertificatesEntryRef;->findBySubjectAndPublicKey(Ljava/security/cert/X509Certificate;)Landroid/security/net/config/TrustAnchor;
 HSPLandroid/security/net/config/ConfigNetworkSecurityPolicy;-><init>(Landroid/security/net/config/ApplicationConfig;)V
 HSPLandroid/security/net/config/ConfigNetworkSecurityPolicy;->isCertificateTransparencyVerificationRequired(Ljava/lang/String;)Z
-HSPLandroid/security/net/config/ConfigNetworkSecurityPolicy;->isCleartextTrafficPermitted()Z
-HSPLandroid/security/net/config/ConfigNetworkSecurityPolicy;->isCleartextTrafficPermitted(Ljava/lang/String;)Z
 HSPLandroid/security/net/config/DirectoryCertificateSource$1;-><init>(Landroid/security/net/config/DirectoryCertificateSource;Ljava/security/cert/X509Certificate;)V
 HSPLandroid/security/net/config/DirectoryCertificateSource$3;-><init>(Landroid/security/net/config/DirectoryCertificateSource;Ljava/security/cert/X509Certificate;)V
 HSPLandroid/security/net/config/DirectoryCertificateSource$3;->match(Ljava/security/cert/X509Certificate;)Z
@@ -19825,37 +10149,41 @@
 HSPLandroid/security/net/config/DirectoryCertificateSource;->findBySubjectAndPublicKey(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate;
 HSPLandroid/security/net/config/DirectoryCertificateSource;->findCert(Ljavax/security/auth/x500/X500Principal;Landroid/security/net/config/DirectoryCertificateSource$CertSelector;)Ljava/security/cert/X509Certificate;
 HSPLandroid/security/net/config/DirectoryCertificateSource;->findCerts(Ljavax/security/auth/x500/X500Principal;Landroid/security/net/config/DirectoryCertificateSource$CertSelector;)Ljava/util/Set;
+HSPLandroid/security/net/config/DirectoryCertificateSource;->getHash(Ljavax/security/auth/x500/X500Principal;)Ljava/lang/String;
 HSPLandroid/security/net/config/DirectoryCertificateSource;->hashName(Ljavax/security/auth/x500/X500Principal;)I
 HSPLandroid/security/net/config/DirectoryCertificateSource;->intToHexString(II)Ljava/lang/String;
 HSPLandroid/security/net/config/DirectoryCertificateSource;->readCertificate(Ljava/lang/String;)Ljava/security/cert/X509Certificate;
 HSPLandroid/security/net/config/Domain;->hashCode()I
+HSPLandroid/security/net/config/KeyStoreCertificateSource;-><init>(Ljava/security/KeyStore;)V
+HSPLandroid/security/net/config/KeyStoreConfigSource;-><init>(Ljava/security/KeyStore;)V
 HSPLandroid/security/net/config/KeyStoreConfigSource;->getDefaultConfig()Landroid/security/net/config/NetworkSecurityConfig;
 HSPLandroid/security/net/config/KeyStoreConfigSource;->getPerDomainConfigs()Ljava/util/Set;
+HSPLandroid/security/net/config/ManifestConfigSource$DefaultConfigSource;-><init>(ZLandroid/content/pm/ApplicationInfo;)V
 HSPLandroid/security/net/config/ManifestConfigSource$DefaultConfigSource;->getDefaultConfig()Landroid/security/net/config/NetworkSecurityConfig;
 HSPLandroid/security/net/config/ManifestConfigSource$DefaultConfigSource;->getPerDomainConfigs()Ljava/util/Set;
 HSPLandroid/security/net/config/ManifestConfigSource;-><init>(Landroid/content/Context;)V
 HSPLandroid/security/net/config/ManifestConfigSource;->getConfigSource()Landroid/security/net/config/ConfigSource;
 HSPLandroid/security/net/config/ManifestConfigSource;->getDefaultConfig()Landroid/security/net/config/NetworkSecurityConfig;
 HSPLandroid/security/net/config/ManifestConfigSource;->getPerDomainConfigs()Ljava/util/Set;
-HSLandroid/security/net/config/NetworkSecurityConfig$1;-><init>(Landroid/security/net/config/NetworkSecurityConfig;)V
-HSPLandroid/security/net/config/NetworkSecurityConfig$1;->compare(Landroid/security/net/config/CertificatesEntryRef;Landroid/security/net/config/CertificatesEntryRef;)I
-HSPLandroid/security/net/config/NetworkSecurityConfig$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSLandroid/security/net/config/NetworkSecurityConfig$Builder;-><init>()V
-HSLandroid/security/net/config/NetworkSecurityConfig$Builder;->addCertificatesEntryRef(Landroid/security/net/config/CertificatesEntryRef;)Landroid/security/net/config/NetworkSecurityConfig$Builder;
-HSLandroid/security/net/config/NetworkSecurityConfig$Builder;->build()Landroid/security/net/config/NetworkSecurityConfig;
+HSPLandroid/security/net/config/NetworkSecurityConfig$1;-><init>(Landroid/security/net/config/NetworkSecurityConfig;)V
+HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;-><init>()V
+HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->addCertificatesEntryRef(Landroid/security/net/config/CertificatesEntryRef;)Landroid/security/net/config/NetworkSecurityConfig$Builder;
+HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->addCertificatesEntryRefs(Ljava/util/Collection;)Landroid/security/net/config/NetworkSecurityConfig$Builder;
+HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->build()Landroid/security/net/config/NetworkSecurityConfig;
 HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getEffectiveCertificatesEntryRefs()Ljava/util/List;
 HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getEffectiveCleartextTrafficPermitted()Z
 HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getEffectiveHstsEnforced()Z
 HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getEffectivePinSet()Landroid/security/net/config/PinSet;
-HSLandroid/security/net/config/NetworkSecurityConfig$Builder;->getParent()Landroid/security/net/config/NetworkSecurityConfig$Builder;
-HSLandroid/security/net/config/NetworkSecurityConfig$Builder;->setCleartextTrafficPermitted(Z)Landroid/security/net/config/NetworkSecurityConfig$Builder;
-HSLandroid/security/net/config/NetworkSecurityConfig$Builder;->setHstsEnforced(Z)Landroid/security/net/config/NetworkSecurityConfig$Builder;
-HSLandroid/security/net/config/NetworkSecurityConfig$Builder;->setParent(Landroid/security/net/config/NetworkSecurityConfig$Builder;)Landroid/security/net/config/NetworkSecurityConfig$Builder;
+HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getParent()Landroid/security/net/config/NetworkSecurityConfig$Builder;
+HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->setCleartextTrafficPermitted(Z)Landroid/security/net/config/NetworkSecurityConfig$Builder;
+HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->setHstsEnforced(Z)Landroid/security/net/config/NetworkSecurityConfig$Builder;
+HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->setParent(Landroid/security/net/config/NetworkSecurityConfig$Builder;)Landroid/security/net/config/NetworkSecurityConfig$Builder;
 HSPLandroid/security/net/config/NetworkSecurityConfig;-><init>(ZZLandroid/security/net/config/PinSet;Ljava/util/List;)V
 HSPLandroid/security/net/config/NetworkSecurityConfig;-><init>(ZZLandroid/security/net/config/PinSet;Ljava/util/List;Landroid/security/net/config/NetworkSecurityConfig$1;)V
-HPLandroid/security/net/config/NetworkSecurityConfig;->findAllCertificatesByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
-HPLandroid/security/net/config/NetworkSecurityConfig;->findTrustAnchorBySubjectAndPublicKey(Ljava/security/cert/X509Certificate;)Landroid/security/net/config/TrustAnchor;
+HSPLandroid/security/net/config/NetworkSecurityConfig;->findAllCertificatesByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
+HSPLandroid/security/net/config/NetworkSecurityConfig;->findTrustAnchorBySubjectAndPublicKey(Ljava/security/cert/X509Certificate;)Landroid/security/net/config/TrustAnchor;
 HSPLandroid/security/net/config/NetworkSecurityConfig;->getDefaultBuilder(Landroid/content/pm/ApplicationInfo;)Landroid/security/net/config/NetworkSecurityConfig$Builder;
+HSPLandroid/security/net/config/NetworkSecurityConfig;->getPins()Landroid/security/net/config/PinSet;
 HSPLandroid/security/net/config/NetworkSecurityConfig;->getTrustManager()Landroid/security/net/config/NetworkSecurityTrustManager;
 HSPLandroid/security/net/config/NetworkSecurityConfig;->isCleartextTrafficPermitted()Z
 HSPLandroid/security/net/config/NetworkSecurityConfigProvider;-><init>()V
@@ -19864,34 +10192,25 @@
 HSPLandroid/security/net/config/NetworkSecurityTrustManager;->checkPins(Ljava/util/List;)V
 HSPLandroid/security/net/config/NetworkSecurityTrustManager;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
 HSPLandroid/security/net/config/NetworkSecurityTrustManager;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V
-HSPLandroid/security/net/config/ResourceCertificateSource;-><init>(ILandroid/content/Context;)V
-HSPLandroid/security/net/config/ResourceCertificateSource;->ensureInitialized()V
-HSPLandroid/security/net/config/ResourceCertificateSource;->findAllByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
-HSPLandroid/security/net/config/ResourceCertificateSource;->findBySubjectAndPublicKey(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate;
-HSLandroid/security/net/config/RootTrustManager;-><init>(Landroid/security/net/config/ApplicationConfig;)V
+HSPLandroid/security/net/config/RootTrustManager;-><init>(Landroid/security/net/config/ApplicationConfig;)V
 HSPLandroid/security/net/config/RootTrustManager;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
 HSPLandroid/security/net/config/RootTrustManager;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V
 HSPLandroid/security/net/config/RootTrustManagerFactorySpi;-><init>()V
 HSPLandroid/security/net/config/RootTrustManagerFactorySpi;->engineGetTrustManagers()[Ljavax/net/ssl/TrustManager;
 HSPLandroid/security/net/config/RootTrustManagerFactorySpi;->engineInit(Ljava/security/KeyStore;)V
 HSPLandroid/security/net/config/SystemCertificateSource$NoPreloadHolder;-><clinit>()V
-HSLandroid/security/net/config/SystemCertificateSource$NoPreloadHolder;->access$100()Landroid/security/net/config/SystemCertificateSource;
+HSPLandroid/security/net/config/SystemCertificateSource$NoPreloadHolder;->access$100()Landroid/security/net/config/SystemCertificateSource;
 HSPLandroid/security/net/config/SystemCertificateSource;-><init>()V
 HSPLandroid/security/net/config/SystemCertificateSource;-><init>(Landroid/security/net/config/SystemCertificateSource$1;)V
 HSPLandroid/security/net/config/SystemCertificateSource;->findAllByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
 HSPLandroid/security/net/config/SystemCertificateSource;->findBySubjectAndPublicKey(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate;
-HSLandroid/security/net/config/SystemCertificateSource;->getInstance()Landroid/security/net/config/SystemCertificateSource;
+HSPLandroid/security/net/config/SystemCertificateSource;->getInstance()Landroid/security/net/config/SystemCertificateSource;
 HSPLandroid/security/net/config/SystemCertificateSource;->isCertMarkedAsRemoved(Ljava/lang/String;)Z
-PLandroid/security/net/config/TrustedCertificateStoreAdapter;-><init>(Landroid/security/net/config/NetworkSecurityConfig;)V
+HSPLandroid/security/net/config/TrustedCertificateStoreAdapter;-><init>(Landroid/security/net/config/NetworkSecurityConfig;)V
 HSPLandroid/security/net/config/TrustedCertificateStoreAdapter;->findAllIssuers(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
 HSPLandroid/security/net/config/TrustedCertificateStoreAdapter;->getTrustAnchor(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate;
-HSPLandroid/security/net/config/UserCertificateSource$NoPreloadHolder;-><clinit>()V
-HSPLandroid/security/net/config/UserCertificateSource;-><init>()V
-HSPLandroid/security/net/config/UserCertificateSource;-><init>(Landroid/security/net/config/UserCertificateSource$1;)V
-HSPLandroid/security/net/config/UserCertificateSource;->findAllByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
-HSPLandroid/security/net/config/UserCertificateSource;->findBySubjectAndPublicKey(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate;
 HSPLandroid/security/net/config/XmlConfigSource;-><init>(Landroid/content/Context;ILandroid/content/pm/ApplicationInfo;)V
-HSLandroid/security/net/config/XmlConfigSource;->addDebugAnchorsIfNeeded(Landroid/security/net/config/NetworkSecurityConfig$Builder;Landroid/security/net/config/NetworkSecurityConfig$Builder;)V
+HSPLandroid/security/net/config/XmlConfigSource;->addDebugAnchorsIfNeeded(Landroid/security/net/config/NetworkSecurityConfig$Builder;Landroid/security/net/config/NetworkSecurityConfig$Builder;)V
 HSPLandroid/security/net/config/XmlConfigSource;->ensureInitialized()V
 HSPLandroid/security/net/config/XmlConfigSource;->getDefaultConfig()Landroid/security/net/config/NetworkSecurityConfig;
 HSPLandroid/security/net/config/XmlConfigSource;->getPerDomainConfigs()Ljava/util/Set;
@@ -19900,1026 +10219,147 @@
 HSPLandroid/security/net/config/XmlConfigSource;->parseDomain(Landroid/content/res/XmlResourceParser;Ljava/util/Set;)Landroid/security/net/config/Domain;
 HSPLandroid/security/net/config/XmlConfigSource;->parseNetworkSecurityConfig(Landroid/content/res/XmlResourceParser;)V
 HSPLandroid/security/net/config/XmlConfigSource;->parseTrustAnchors(Landroid/content/res/XmlResourceParser;Z)Ljava/util/Collection;
-PLandroid/service/appprediction/IPredictionService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/appprediction/IPredictionService$Stub$Proxy;->notifyAppTargetEvent(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;)V
-PLandroid/service/appprediction/IPredictionService$Stub$Proxy;->onCreatePredictionSession(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;)V
-PLandroid/service/appprediction/IPredictionService$Stub$Proxy;->onDestroyPredictionSession(Landroid/app/prediction/AppPredictionSessionId;)V
-PLandroid/service/appprediction/IPredictionService$Stub$Proxy;->registerPredictionUpdates(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
-PLandroid/service/appprediction/IPredictionService$Stub$Proxy;->requestPredictionUpdate(Landroid/app/prediction/AppPredictionSessionId;)V
-PLandroid/service/appprediction/IPredictionService$Stub$Proxy;->unregisterPredictionUpdates(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
-HPLandroid/service/appprediction/IPredictionService$Stub;-><init>()V
-HPLandroid/service/appprediction/IPredictionService$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/service/appprediction/IPredictionService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/appprediction/IPredictionService;
-HPLandroid/service/appprediction/IPredictionService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/autofill/AutofillServiceInfo;-><init>(Landroid/content/Context;Landroid/content/ComponentName;I)V
-PLandroid/service/autofill/AutofillServiceInfo;-><init>(Landroid/content/Context;Landroid/content/pm/ServiceInfo;)V
-PLandroid/service/autofill/AutofillServiceInfo;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLandroid/service/autofill/AutofillServiceInfo;->getCompatibilityPackages()Landroid/util/ArrayMap;
-PLandroid/service/autofill/AutofillServiceInfo;->getServiceInfo()Landroid/content/pm/ServiceInfo;
-PLandroid/service/autofill/AutofillServiceInfo;->getServiceInfoOrThrow(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;
-PLandroid/service/autofill/AutofillServiceInfo;->parseCompatibilityPackages(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/util/ArrayMap;
-PLandroid/service/autofill/FillContext$1;-><init>()V
-HPLandroid/service/autofill/FillContext$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/autofill/FillContext;
-HPLandroid/service/autofill/FillContext$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/service/autofill/FillContext;-><clinit>()V
-PLandroid/service/autofill/FillContext;-><init>(ILandroid/app/assist/AssistStructure;Landroid/view/autofill/AutofillId;)V
-HPLandroid/service/autofill/FillContext;->findViewNodesByAutofillIds([Landroid/view/autofill/AutofillId;)[Landroid/app/assist/AssistStructure$ViewNode;
-PLandroid/service/autofill/FillContext;->getRequestId()I
-PLandroid/service/autofill/FillContext;->getStructure()Landroid/app/assist/AssistStructure;
-PLandroid/service/autofill/FillContext;->toString()Ljava/lang/String;
-PLandroid/service/autofill/FillContext;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/service/autofill/FillRequest$1;-><init>()V
-HPLandroid/service/autofill/FillRequest$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/autofill/FillRequest;
-HPLandroid/service/autofill/FillRequest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/service/autofill/FillRequest;-><clinit>()V
-PLandroid/service/autofill/FillRequest;-><init>(ILjava/util/List;Landroid/os/Bundle;I)V
-HPLandroid/service/autofill/FillRequest;->getClientState()Landroid/os/Bundle;
-HPLandroid/service/autofill/FillRequest;->getFillContexts()Ljava/util/List;
-PLandroid/service/autofill/FillRequest;->getFlags()I
-PLandroid/service/autofill/FillRequest;->getId()I
-PLandroid/service/autofill/FillRequest;->onConstructed()V
-PLandroid/service/autofill/FillRequest;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/service/autofill/IAutoFillService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/autofill/IAutoFillService$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/service/autofill/IAutoFillService$Stub$Proxy;->onConnectedStateChanged(Z)V
-PLandroid/service/autofill/IAutoFillService$Stub$Proxy;->onFillRequest(Landroid/service/autofill/FillRequest;Landroid/service/autofill/IFillCallback;)V
-HPLandroid/service/autofill/IAutoFillService$Stub;-><init>()V
-HPLandroid/service/autofill/IAutoFillService$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/service/autofill/IAutoFillService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/autofill/IAutoFillService;
-HPLandroid/service/autofill/IAutoFillService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/autofill/IFillCallback$Stub;-><init>()V
-PLandroid/service/autofill/IFillCallback$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/service/autofill/IFillCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/autofill/IFillCallback;
-PLandroid/service/autofill/IFillCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/autofill/UserData$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/autofill/UserData;
-PLandroid/service/autofill/UserData$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/service/autofill/UserData$Builder;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/service/autofill/UserData$Builder;->access$000(Landroid/service/autofill/UserData$Builder;)Ljava/lang/String;
-PLandroid/service/autofill/UserData$Builder;->access$100(Landroid/service/autofill/UserData$Builder;)Ljava/util/ArrayList;
-PLandroid/service/autofill/UserData$Builder;->access$200(Landroid/service/autofill/UserData$Builder;)Ljava/util/ArrayList;
-PLandroid/service/autofill/UserData$Builder;->access$300(Landroid/service/autofill/UserData$Builder;)Ljava/lang/String;
-PLandroid/service/autofill/UserData$Builder;->access$400(Landroid/service/autofill/UserData$Builder;)Landroid/os/Bundle;
-PLandroid/service/autofill/UserData$Builder;->access$500(Landroid/service/autofill/UserData$Builder;)Landroid/util/ArrayMap;
-PLandroid/service/autofill/UserData$Builder;->access$600(Landroid/service/autofill/UserData$Builder;)Landroid/util/ArrayMap;
-PLandroid/service/autofill/UserData$Builder;->addMapping(Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/service/autofill/UserData$Builder;->build()Landroid/service/autofill/UserData;
-PLandroid/service/autofill/UserData$Builder;->checkNotEmpty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/service/autofill/UserData$Builder;->checkValidValue(Ljava/lang/String;)V
-PLandroid/service/autofill/UserData$Builder;->setFieldClassificationAlgorithm(Ljava/lang/String;Landroid/os/Bundle;)Landroid/service/autofill/UserData$Builder;
-PLandroid/service/autofill/UserData$Builder;->throwIfDestroyed()V
-PLandroid/service/autofill/UserData;-><init>(Landroid/service/autofill/UserData$Builder;)V
-PLandroid/service/autofill/UserData;-><init>(Landroid/service/autofill/UserData$Builder;Landroid/service/autofill/UserData$1;)V
-PLandroid/service/autofill/UserData;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLandroid/service/autofill/UserData;->dumpConstraints(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLandroid/service/autofill/UserData;->getInt(Ljava/lang/String;I)I
-PLandroid/service/autofill/UserData;->getMaxCategoryCount()I
-PLandroid/service/autofill/UserData;->getMaxFieldClassificationIdsSize()I
-PLandroid/service/autofill/UserData;->getMaxUserDataSize()I
-PLandroid/service/autofill/UserData;->getMaxValueLength()I
-PLandroid/service/autofill/UserData;->getMinValueLength()I
-HPLandroid/service/autofill/UserData;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/service/autofill/augmented/IAugmentedAutofillService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/autofill/augmented/IAugmentedAutofillService$Stub$Proxy;->onConnected(ZZ)V
-PLandroid/service/autofill/augmented/IAugmentedAutofillService$Stub$Proxy;->onDestroyAllFillWindowsRequest()V
-PLandroid/service/autofill/augmented/IAugmentedAutofillService$Stub$Proxy;->onDisconnected()V
-PLandroid/service/autofill/augmented/IAugmentedAutofillService$Stub$Proxy;->onFillRequest(ILandroid/os/IBinder;ILandroid/content/ComponentName;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;JLandroid/service/autofill/augmented/IFillCallback;)V
-HPLandroid/service/autofill/augmented/IAugmentedAutofillService$Stub;-><init>()V
-HPLandroid/service/autofill/augmented/IAugmentedAutofillService$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/service/autofill/augmented/IAugmentedAutofillService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/autofill/augmented/IAugmentedAutofillService;
-HPLandroid/service/autofill/augmented/IAugmentedAutofillService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/autofill/augmented/IFillCallback$Stub;-><init>()V
-PLandroid/service/autofill/augmented/IFillCallback$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/service/autofill/augmented/IFillCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/autofill/augmented/IFillCallback;
-PLandroid/service/autofill/augmented/IFillCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/service/carrier/CarrierIdentifier;->toString()Ljava/lang/String;
-HPLandroid/service/carrier/CarrierIdentifier;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/service/carrier/ICarrierService$Stub$Proxy;->getCarrierConfig(Landroid/service/carrier/CarrierIdentifier;Landroid/os/ResultReceiver;)V
-HPLandroid/service/carrier/ICarrierService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/carrier/ICarrierService;
-PLandroid/service/contentcapture/ActivityEvent$1;-><init>()V
-HPLandroid/service/contentcapture/ActivityEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/contentcapture/ActivityEvent;
-HPLandroid/service/contentcapture/ActivityEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/service/contentcapture/ActivityEvent;-><clinit>()V
-HPLandroid/service/contentcapture/ActivityEvent;-><init>(Landroid/content/ComponentName;I)V
-HPLandroid/service/contentcapture/ActivityEvent;->getComponentName()Landroid/content/ComponentName;
-HPLandroid/service/contentcapture/ActivityEvent;->getEventType()I
-HPLandroid/service/contentcapture/ActivityEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/service/contentcapture/ContentCaptureServiceInfo;-><init>(Landroid/content/Context;Landroid/content/ComponentName;ZI)V
-PLandroid/service/contentcapture/ContentCaptureServiceInfo;-><init>(Landroid/content/Context;Landroid/content/pm/ServiceInfo;)V
-PLandroid/service/contentcapture/ContentCaptureServiceInfo;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLandroid/service/contentcapture/ContentCaptureServiceInfo;->getServiceInfo()Landroid/content/pm/ServiceInfo;
-PLandroid/service/contentcapture/ContentCaptureServiceInfo;->getServiceInfoOrThrow(Landroid/content/ComponentName;ZI)Landroid/content/pm/ServiceInfo;
-PLandroid/service/contentcapture/ContentCaptureServiceInfo;->getSettingsActivity()Ljava/lang/String;
-HPLandroid/service/contentcapture/FlushMetrics$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/contentcapture/FlushMetrics;
-HPLandroid/service/contentcapture/FlushMetrics$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/service/contentcapture/FlushMetrics;-><init>()V
-HPLandroid/service/contentcapture/FlushMetrics;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/service/contentcapture/IContentCaptureService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/contentcapture/IContentCaptureService$Stub$Proxy;->onActivityEvent(Landroid/service/contentcapture/ActivityEvent;)V
-PLandroid/service/contentcapture/IContentCaptureService$Stub$Proxy;->onConnected(Landroid/os/IBinder;ZZ)V
-PLandroid/service/contentcapture/IContentCaptureService$Stub$Proxy;->onSessionFinished(I)V
-PLandroid/service/contentcapture/IContentCaptureService$Stub$Proxy;->onSessionStarted(Landroid/view/contentcapture/ContentCaptureContext;IILcom/android/internal/os/IResultReceiver;I)V
-HPLandroid/service/contentcapture/IContentCaptureService$Stub;-><init>()V
-HPLandroid/service/contentcapture/IContentCaptureService$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/service/contentcapture/IContentCaptureService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/contentcapture/IContentCaptureService;
-HPLandroid/service/contentcapture/IContentCaptureService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/contentcapture/IContentCaptureServiceCallback$Stub;-><init>()V
-PLandroid/service/contentcapture/IContentCaptureServiceCallback$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/service/contentcapture/IContentCaptureServiceCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/contentcapture/IContentCaptureServiceCallback;
-PLandroid/service/contentcapture/IContentCaptureServiceCallback$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/service/contentcapture/IContentCaptureServiceCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/service/dreams/DreamManagerInternal;-><init>()V
-HPLandroid/service/dreams/IDreamManager$Stub$Proxy;->finishSelf(Landroid/os/IBinder;Z)V
-HPLandroid/service/dreams/IDreamManager$Stub$Proxy;->forceAmbientDisplayEnabled(Z)V
-HSPLandroid/service/dreams/IDreamManager$Stub$Proxy;->getDefaultDreamComponent()Landroid/content/ComponentName;
-HSPLandroid/service/dreams/IDreamManager$Stub$Proxy;->getDreamComponents()[Landroid/content/ComponentName;
-HPLandroid/service/dreams/IDreamManager$Stub$Proxy;->isDreaming()Z
-HPLandroid/service/dreams/IDreamManager$Stub$Proxy;->startDozing(Landroid/os/IBinder;II)V
-HSPLandroid/service/dreams/IDreamManager$Stub;-><init>()V
-HSPLandroid/service/dreams/IDreamManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/dreams/IDreamManager;
-PLandroid/service/dreams/IDreamManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/service/dreams/IDreamManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/dreams/IDreamService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/dreams/IDreamService$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/service/dreams/IDreamService$Stub$Proxy;->attach(Landroid/os/IBinder;ZLandroid/os/IRemoteCallback;)V
-PLandroid/service/dreams/IDreamService$Stub$Proxy;->detach()V
-PLandroid/service/dreams/IDreamService$Stub$Proxy;->wakeUp()V
-HPLandroid/service/dreams/IDreamService$Stub;-><init>()V
-PLandroid/service/dreams/IDreamService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/dreams/IDreamService;
-HPLandroid/service/dreams/IDreamService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/service/euicc/GetEuiccProfileInfoListResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/euicc/GetEuiccProfileInfoListResult;
-HSPLandroid/service/euicc/GetEuiccProfileInfoListResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/service/euicc/GetEuiccProfileInfoListResult;-><init>(I[Landroid/service/euicc/EuiccProfileInfo;Z)V
-HSPLandroid/service/euicc/GetEuiccProfileInfoListResult;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/service/euicc/GetEuiccProfileInfoListResult;-><init>(Landroid/os/Parcel;Landroid/service/euicc/GetEuiccProfileInfoListResult$1;)V
-HSPLandroid/service/euicc/GetEuiccProfileInfoListResult;->getProfiles()Ljava/util/List;
-HSPLandroid/service/euicc/GetEuiccProfileInfoListResult;->getResult()I
-HSPLandroid/service/euicc/GetEuiccProfileInfoListResult;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/service/euicc/IEuiccService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/service/euicc/IEuiccService$Stub$Proxy;->getEuiccProfileInfoList(ILandroid/service/euicc/IGetEuiccProfileInfoListCallback;)V
-HSPLandroid/service/euicc/IEuiccService$Stub;-><init>()V
-HSPLandroid/service/euicc/IEuiccService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/euicc/IEuiccService;
-HSPLandroid/service/euicc/IEuiccService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/service/euicc/IGetEuiccProfileInfoListCallback$Stub;-><init>()V
-HSPLandroid/service/euicc/IGetEuiccProfileInfoListCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/service/euicc/IGetEuiccProfileInfoListCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/euicc/IGetEuiccProfileInfoListCallback;
-HSPLandroid/service/euicc/IGetEuiccProfileInfoListCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/gatekeeper/GateKeeperResponse$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/gatekeeper/GateKeeperResponse;
-PLandroid/service/gatekeeper/GateKeeperResponse$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/service/gatekeeper/GateKeeperResponse;-><init>(I)V
-PLandroid/service/gatekeeper/GateKeeperResponse;->createOkResponse([BZ)Landroid/service/gatekeeper/GateKeeperResponse;
-PLandroid/service/gatekeeper/GateKeeperResponse;->getPayload()[B
-PLandroid/service/gatekeeper/GateKeeperResponse;->getResponseCode()I
-PLandroid/service/gatekeeper/GateKeeperResponse;->getShouldReEnroll()Z
-HSPLandroid/service/gatekeeper/IGateKeeperService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/gatekeeper/IGateKeeperService$Stub$Proxy;->getSecureUserId(I)J
-PLandroid/service/gatekeeper/IGateKeeperService$Stub$Proxy;->verifyChallenge(IJ[B[B)Landroid/service/gatekeeper/GateKeeperResponse;
-HSPLandroid/service/gatekeeper/IGateKeeperService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/gatekeeper/IGateKeeperService;
-HSPLandroid/service/media/IMediaBrowserService$Stub;-><init>()V
-HSPLandroid/service/media/IMediaBrowserService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/service/media/IMediaBrowserServiceCallbacks$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/service/media/IMediaBrowserServiceCallbacks$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/service/media/IMediaBrowserServiceCallbacks$Stub$Proxy;->onConnect(Ljava/lang/String;Landroid/media/session/MediaSession$Token;Landroid/os/Bundle;)V
-HSPLandroid/service/media/IMediaBrowserServiceCallbacks$Stub$Proxy;->onLoadChildrenWithOptions(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;Landroid/os/Bundle;)V
-HSPLandroid/service/media/IMediaBrowserServiceCallbacks$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/media/IMediaBrowserServiceCallbacks;
-HSPLandroid/service/media/MediaBrowserService$1;-><init>(Landroid/service/media/MediaBrowserService;Landroid/media/session/MediaSession$Token;)V
-HSPLandroid/service/media/MediaBrowserService$1;->run()V
-HSPLandroid/service/media/MediaBrowserService$3;-><init>(Landroid/service/media/MediaBrowserService;Ljava/lang/Object;Landroid/service/media/MediaBrowserService$ConnectionRecord;Ljava/lang/String;Landroid/os/Bundle;)V
-HSPLandroid/service/media/MediaBrowserService$3;->onResultSent(Ljava/lang/Object;I)V
-HSPLandroid/service/media/MediaBrowserService$3;->onResultSent(Ljava/util/List;I)V
-HSPLandroid/service/media/MediaBrowserService$BrowserRoot;-><init>(Ljava/lang/String;Landroid/os/Bundle;)V
-HSPLandroid/service/media/MediaBrowserService$BrowserRoot;->getExtras()Landroid/os/Bundle;
-HSPLandroid/service/media/MediaBrowserService$BrowserRoot;->getRootId()Ljava/lang/String;
-HSPLandroid/service/media/MediaBrowserService$ConnectionRecord;-><init>(Landroid/service/media/MediaBrowserService;)V
-HSPLandroid/service/media/MediaBrowserService$ConnectionRecord;-><init>(Landroid/service/media/MediaBrowserService;Landroid/service/media/MediaBrowserService$1;)V
-HSPLandroid/service/media/MediaBrowserService$Result;-><init>(Landroid/service/media/MediaBrowserService;Ljava/lang/Object;)V
-HSPLandroid/service/media/MediaBrowserService$Result;->isDone()Z
-HSPLandroid/service/media/MediaBrowserService$Result;->sendResult(Ljava/lang/Object;)V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder$1;-><init>(Landroid/service/media/MediaBrowserService$ServiceBinder;Landroid/service/media/IMediaBrowserServiceCallbacks;Ljava/lang/String;IILandroid/os/Bundle;)V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder$1;->run()V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder$2;-><init>(Landroid/service/media/MediaBrowserService$ServiceBinder;Landroid/service/media/IMediaBrowserServiceCallbacks;)V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder$2;->run()V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder$3;-><init>(Landroid/service/media/MediaBrowserService$ServiceBinder;Landroid/service/media/IMediaBrowserServiceCallbacks;Ljava/lang/String;Landroid/os/IBinder;Landroid/os/Bundle;)V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder$3;->run()V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder$4;-><init>(Landroid/service/media/MediaBrowserService$ServiceBinder;Landroid/service/media/IMediaBrowserServiceCallbacks;Ljava/lang/String;Landroid/os/IBinder;)V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder$4;->run()V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder;-><init>(Landroid/service/media/MediaBrowserService;)V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder;-><init>(Landroid/service/media/MediaBrowserService;Landroid/service/media/MediaBrowserService$1;)V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder;->addSubscription(Ljava/lang/String;Landroid/os/IBinder;Landroid/os/Bundle;Landroid/service/media/IMediaBrowserServiceCallbacks;)V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder;->addSubscriptionDeprecated(Ljava/lang/String;Landroid/service/media/IMediaBrowserServiceCallbacks;)V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder;->connect(Ljava/lang/String;Landroid/os/Bundle;Landroid/service/media/IMediaBrowserServiceCallbacks;)V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder;->disconnect(Landroid/service/media/IMediaBrowserServiceCallbacks;)V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder;->removeSubscription(Ljava/lang/String;Landroid/os/IBinder;Landroid/service/media/IMediaBrowserServiceCallbacks;)V
-HSPLandroid/service/media/MediaBrowserService$ServiceBinder;->removeSubscriptionDeprecated(Ljava/lang/String;Landroid/service/media/IMediaBrowserServiceCallbacks;)V
-HSPLandroid/service/media/MediaBrowserService;-><init>()V
-HSPLandroid/service/media/MediaBrowserService;->access$000(Landroid/service/media/MediaBrowserService;)Landroid/util/ArrayMap;
-HSPLandroid/service/media/MediaBrowserService;->access$100(Landroid/service/media/MediaBrowserService;)Landroid/os/Handler;
-HSPLandroid/service/media/MediaBrowserService;->access$200(Landroid/service/media/MediaBrowserService;Ljava/lang/String;I)Z
-HSPLandroid/service/media/MediaBrowserService;->access$402(Landroid/service/media/MediaBrowserService;Landroid/service/media/MediaBrowserService$ConnectionRecord;)Landroid/service/media/MediaBrowserService$ConnectionRecord;
-HSPLandroid/service/media/MediaBrowserService;->access$500(Landroid/service/media/MediaBrowserService;Ljava/lang/String;Landroid/service/media/MediaBrowserService$ConnectionRecord;Landroid/os/IBinder;Landroid/os/Bundle;)V
-HSPLandroid/service/media/MediaBrowserService;->access$600(Landroid/service/media/MediaBrowserService;Ljava/lang/String;Landroid/service/media/MediaBrowserService$ConnectionRecord;Landroid/os/IBinder;)Z
-HSPLandroid/service/media/MediaBrowserService;->addSubscription(Ljava/lang/String;Landroid/service/media/MediaBrowserService$ConnectionRecord;Landroid/os/IBinder;Landroid/os/Bundle;)V
-HSPLandroid/service/media/MediaBrowserService;->isValidPackage(Ljava/lang/String;I)Z
-HSPLandroid/service/media/MediaBrowserService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
-HSPLandroid/service/media/MediaBrowserService;->onCreate()V
-HSPLandroid/service/media/MediaBrowserService;->performLoadChildren(Ljava/lang/String;Landroid/service/media/MediaBrowserService$ConnectionRecord;Landroid/os/Bundle;)V
-HSPLandroid/service/media/MediaBrowserService;->removeSubscription(Ljava/lang/String;Landroid/service/media/MediaBrowserService$ConnectionRecord;Landroid/os/IBinder;)Z
-HSPLandroid/service/media/MediaBrowserService;->setSessionToken(Landroid/media/session/MediaSession$Token;)V
-PLandroid/service/notification/Adjustment$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/Adjustment;
-PLandroid/service/notification/Adjustment$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/service/notification/Adjustment;-><init>(Landroid/os/Parcel;)V
-HPLandroid/service/notification/Adjustment;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/CharSequence;I)V
-PLandroid/service/notification/Adjustment;->getKey()Ljava/lang/String;
-PLandroid/service/notification/Adjustment;->getSignals()Landroid/os/Bundle;
-PLandroid/service/notification/Adjustment;->getUser()I
-HPLandroid/service/notification/Adjustment;->setIssuer(Ljava/lang/String;)V
-HPLandroid/service/notification/Adjustment;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/service/notification/Condition$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/Condition;
-HSPLandroid/service/notification/Condition$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/service/notification/Condition$1;->newArray(I)[Landroid/service/notification/Condition;
-PLandroid/service/notification/Condition$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/service/notification/Condition;-><init>(Landroid/net/Uri;Ljava/lang/String;I)V
-HSPLandroid/service/notification/Condition;-><init>(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;III)V
-HSPLandroid/service/notification/Condition;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/service/notification/Condition;->equals(Ljava/lang/Object;)Z
-HPLandroid/service/notification/Condition;->hashCode()I
-HSPLandroid/service/notification/Condition;->isValidId(Landroid/net/Uri;Ljava/lang/String;)Z
-HSPLandroid/service/notification/Condition;->isValidState(I)Z
-HSPLandroid/service/notification/Condition;->stateToString(I)Ljava/lang/String;
-HSPLandroid/service/notification/Condition;->toString()Ljava/lang/String;
-HSPLandroid/service/notification/Condition;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/service/notification/ConditionProviderService$H;-><init>(Landroid/service/notification/ConditionProviderService;)V
-HSPLandroid/service/notification/ConditionProviderService$H;-><init>(Landroid/service/notification/ConditionProviderService;Landroid/service/notification/ConditionProviderService$1;)V
-HSPLandroid/service/notification/ConditionProviderService$H;->handleMessage(Landroid/os/Message;)V
-HSPLandroid/service/notification/ConditionProviderService$Provider;-><init>(Landroid/service/notification/ConditionProviderService;)V
-HSPLandroid/service/notification/ConditionProviderService$Provider;-><init>(Landroid/service/notification/ConditionProviderService;Landroid/service/notification/ConditionProviderService$1;)V
-HSPLandroid/service/notification/ConditionProviderService$Provider;->onConnected()V
-HSPLandroid/service/notification/ConditionProviderService$Provider;->onSubscribe(Landroid/net/Uri;)V
-HSPLandroid/service/notification/ConditionProviderService;-><init>()V
-HSPLandroid/service/notification/ConditionProviderService;->access$200(Landroid/service/notification/ConditionProviderService;)Landroid/service/notification/ConditionProviderService$H;
-HSPLandroid/service/notification/ConditionProviderService;->getNotificationInterface()Landroid/app/INotificationManager;
-HSPLandroid/service/notification/ConditionProviderService;->isBound()Z
-HSPLandroid/service/notification/ConditionProviderService;->notifyCondition(Landroid/service/notification/Condition;)V
-HSPLandroid/service/notification/ConditionProviderService;->notifyConditions([Landroid/service/notification/Condition;)V
-HSPLandroid/service/notification/ConditionProviderService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
-HSPLandroid/service/notification/ConditionProviderService;->requestRebind(Landroid/content/ComponentName;)V
-HSPLandroid/service/notification/ConditionProviderService;->requestUnbind()V
-PLandroid/service/notification/IConditionProvider$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/notification/IConditionProvider$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/service/notification/IConditionProvider$Stub$Proxy;->onConnected()V
-PLandroid/service/notification/IConditionProvider$Stub$Proxy;->onSubscribe(Landroid/net/Uri;)V
-HSPLandroid/service/notification/IConditionProvider$Stub;-><init>()V
-HSPLandroid/service/notification/IConditionProvider$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/service/notification/IConditionProvider$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/notification/IConditionProvider;
-HSPLandroid/service/notification/IConditionProvider$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/notification/INotificationListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/service/notification/INotificationListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/service/notification/INotificationListener$Stub$Proxy;->onActionClicked(Ljava/lang/String;Landroid/app/Notification$Action;I)V
-PLandroid/service/notification/INotificationListener$Stub$Proxy;->onInterruptionFilterChanged(I)V
-PLandroid/service/notification/INotificationListener$Stub$Proxy;->onListenerConnected(Landroid/service/notification/NotificationRankingUpdate;)V
-PLandroid/service/notification/INotificationListener$Stub$Proxy;->onNotificationEnqueuedWithChannel(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/app/NotificationChannel;)V
-PLandroid/service/notification/INotificationListener$Stub$Proxy;->onNotificationExpansionChanged(Ljava/lang/String;ZZ)V
-HPLandroid/service/notification/INotificationListener$Stub$Proxy;->onNotificationPosted(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;)V
-PLandroid/service/notification/INotificationListener$Stub$Proxy;->onNotificationRankingUpdate(Landroid/service/notification/NotificationRankingUpdate;)V
-PLandroid/service/notification/INotificationListener$Stub$Proxy;->onNotificationRemoved(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
-PLandroid/service/notification/INotificationListener$Stub$Proxy;->onNotificationsSeen(Ljava/util/List;)V
-HSLandroid/service/notification/INotificationListener$Stub;-><init>()V
-HPLandroid/service/notification/INotificationListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/service/notification/INotificationListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/notification/INotificationListener;
-HSPLandroid/service/notification/INotificationListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/service/notification/IStatusBarNotificationHolder$Stub$Proxy;->get()Landroid/service/notification/StatusBarNotification;
-PLandroid/service/notification/IStatusBarNotificationHolder$Stub;-><init>()V
-HPLandroid/service/notification/IStatusBarNotificationHolder$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/service/notification/IStatusBarNotificationHolder$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/service/notification/IStatusBarNotificationHolder$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSLandroid/service/notification/NotificationAssistantService$MyHandler;-><init>(Landroid/service/notification/NotificationAssistantService;Landroid/os/Looper;)V
-HPLandroid/service/notification/NotificationAssistantService$MyHandler;->handleMessage(Landroid/os/Message;)V
-HSLandroid/service/notification/NotificationAssistantService$NotificationAssistantServiceWrapper;-><init>(Landroid/service/notification/NotificationAssistantService;)V
-HSLandroid/service/notification/NotificationAssistantService$NotificationAssistantServiceWrapper;-><init>(Landroid/service/notification/NotificationAssistantService;Landroid/service/notification/NotificationAssistantService$1;)V
-HPLandroid/service/notification/NotificationAssistantService$NotificationAssistantServiceWrapper;->onNotificationEnqueuedWithChannel(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/app/NotificationChannel;)V
-HPLandroid/service/notification/NotificationAssistantService$NotificationAssistantServiceWrapper;->onNotificationExpansionChanged(Ljava/lang/String;ZZ)V
-HPLandroid/service/notification/NotificationAssistantService$NotificationAssistantServiceWrapper;->onNotificationsSeen(Ljava/util/List;)V
-HSPLandroid/service/notification/NotificationAssistantService;-><init>()V
-HPLandroid/service/notification/NotificationAssistantService;->adjustNotification(Landroid/service/notification/Adjustment;)V
-HSPLandroid/service/notification/NotificationAssistantService;->attachBaseContext(Landroid/content/Context;)V
-HSPLandroid/service/notification/NotificationAssistantService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
-HPLandroid/service/notification/NotificationAssistantService;->setAdjustmentIssuer(Landroid/service/notification/Adjustment;)V
-HSLandroid/service/notification/NotificationListenerService$MyHandler;-><init>(Landroid/service/notification/NotificationListenerService;Landroid/os/Looper;)V
+HSPLandroid/service/notification/INotificationListener$Stub;-><init>()V
+HSPLandroid/service/notification/INotificationListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/service/notification/NotificationListenerService$MyHandler;-><init>(Landroid/service/notification/NotificationListenerService;Landroid/os/Looper;)V
 HSPLandroid/service/notification/NotificationListenerService$MyHandler;->handleMessage(Landroid/os/Message;)V
-HSLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;-><init>(Landroid/service/notification/NotificationListenerService;)V
-HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onInterruptionFilterChanged(I)V
+HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;-><init>(Landroid/service/notification/NotificationListenerService;)V
 HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onListenerConnected(Landroid/service/notification/NotificationRankingUpdate;)V
-HPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationPosted(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;)V
-HPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRankingUpdate(Landroid/service/notification/NotificationRankingUpdate;)V
-HPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRemoved(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
-HPLandroid/service/notification/NotificationListenerService$Ranking;-><init>()V
-HPLandroid/service/notification/NotificationListenerService$Ranking;-><init>(Landroid/os/Parcel;)V
-HPLandroid/service/notification/NotificationListenerService$Ranking;->canBubble()Z
-HPLandroid/service/notification/NotificationListenerService$Ranking;->getChannel()Landroid/app/NotificationChannel;
-HPLandroid/service/notification/NotificationListenerService$Ranking;->getImportance()I
-PLandroid/service/notification/NotificationListenerService$Ranking;->getKey()Ljava/lang/String;
-HPLandroid/service/notification/NotificationListenerService$Ranking;->getLastAudiblyAlertedMillis()J
-HPLandroid/service/notification/NotificationListenerService$Ranking;->getOverrideGroupKey()Ljava/lang/String;
-HPLandroid/service/notification/NotificationListenerService$Ranking;->getRank()I
-HPLandroid/service/notification/NotificationListenerService$Ranking;->getSmartActions()Ljava/util/List;
-HPLandroid/service/notification/NotificationListenerService$Ranking;->getSmartReplies()Ljava/util/List;
-HPLandroid/service/notification/NotificationListenerService$Ranking;->getSuppressedVisualEffects()I
-HPLandroid/service/notification/NotificationListenerService$Ranking;->getUserSentiment()I
-HPLandroid/service/notification/NotificationListenerService$Ranking;->getVisibilityOverride()I
-PLandroid/service/notification/NotificationListenerService$Ranking;->importanceToString(I)Ljava/lang/String;
-HPLandroid/service/notification/NotificationListenerService$Ranking;->isAmbient()Z
-HPLandroid/service/notification/NotificationListenerService$Ranking;->isSuspended()Z
-HPLandroid/service/notification/NotificationListenerService$Ranking;->populate(Landroid/service/notification/NotificationListenerService$Ranking;)V
-HPLandroid/service/notification/NotificationListenerService$Ranking;->populate(Ljava/lang/String;IZIIILjava/lang/CharSequence;Ljava/lang/String;Landroid/app/NotificationChannel;Ljava/util/ArrayList;Ljava/util/ArrayList;ZIZJZLjava/util/ArrayList;Ljava/util/ArrayList;ZZ)V
-HPLandroid/service/notification/NotificationListenerService$Ranking;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/service/notification/NotificationListenerService$RankingMap$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/NotificationListenerService$RankingMap;
-HSPLandroid/service/notification/NotificationListenerService$RankingMap$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/service/notification/NotificationListenerService$RankingMap;-><init>(Landroid/os/Parcel;)V
-HSLandroid/service/notification/NotificationListenerService$RankingMap;-><init>(Landroid/os/Parcel;Landroid/service/notification/NotificationListenerService$1;)V
-HPLandroid/service/notification/NotificationListenerService$RankingMap;-><init>([Landroid/service/notification/NotificationListenerService$Ranking;)V
-HPLandroid/service/notification/NotificationListenerService$RankingMap;->getOrderedKeys()[Ljava/lang/String;
-HPLandroid/service/notification/NotificationListenerService$RankingMap;->getRanking(Ljava/lang/String;Landroid/service/notification/NotificationListenerService$Ranking;)Z
-HPLandroid/service/notification/NotificationListenerService$RankingMap;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationPosted(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRankingUpdate(Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRemoved(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
+HSPLandroid/service/notification/NotificationListenerService$Ranking;-><init>()V
+HSPLandroid/service/notification/NotificationListenerService$Ranking;->getKey()Ljava/lang/String;
 HSPLandroid/service/notification/NotificationListenerService;-><init>()V
-HSLandroid/service/notification/NotificationListenerService;->access$300(Landroid/service/notification/NotificationListenerService;)Ljava/lang/Object;
-HSLandroid/service/notification/NotificationListenerService;->access$500(Landroid/service/notification/NotificationListenerService;)Landroid/os/Handler;
-HSLandroid/service/notification/NotificationListenerService;->access$600(Landroid/service/notification/NotificationListenerService;)Z
-HSLandroid/service/notification/NotificationListenerService;->access$602(Landroid/service/notification/NotificationListenerService;Z)Z
-HSLandroid/service/notification/NotificationListenerService;->applyUpdateLocked(Landroid/service/notification/NotificationRankingUpdate;)V
-HSPLandroid/service/notification/NotificationListenerService;->attachBaseContext(Landroid/content/Context;)V
-HPLandroid/service/notification/NotificationListenerService;->createLegacyIconExtras(Landroid/app/Notification;)V
+HSPLandroid/service/notification/NotificationListenerService;->access$100(Landroid/service/notification/NotificationListenerService;Landroid/app/Notification;)V
+HSPLandroid/service/notification/NotificationListenerService;->access$200(Landroid/service/notification/NotificationListenerService;Landroid/app/Notification;)V
+HSPLandroid/service/notification/NotificationListenerService;->access$300(Landroid/service/notification/NotificationListenerService;)Ljava/lang/Object;
+HSPLandroid/service/notification/NotificationListenerService;->access$400(Landroid/service/notification/NotificationListenerService;)Landroid/service/notification/NotificationListenerService$RankingMap;
+HSPLandroid/service/notification/NotificationListenerService;->access$500(Landroid/service/notification/NotificationListenerService;)Landroid/os/Handler;
+HSPLandroid/service/notification/NotificationListenerService;->access$600(Landroid/service/notification/NotificationListenerService;)Z
+HSPLandroid/service/notification/NotificationListenerService;->access$602(Landroid/service/notification/NotificationListenerService;Z)Z
+HSPLandroid/service/notification/NotificationListenerService;->applyUpdateLocked(Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLandroid/service/notification/NotificationListenerService;->createLegacyIconExtras(Landroid/app/Notification;)V
 HSPLandroid/service/notification/NotificationListenerService;->getContext()Landroid/content/Context;
-HPLandroid/service/notification/NotificationListenerService;->getCurrentRanking()Landroid/service/notification/NotificationListenerService$RankingMap;
-HPLandroid/service/notification/NotificationListenerService;->isBound()Z
-HPLandroid/service/notification/NotificationListenerService;->maybePopulatePeople(Landroid/app/Notification;)V
-HPLandroid/service/notification/NotificationListenerService;->maybePopulateRemoteViews(Landroid/app/Notification;)V
-HPLandroid/service/notification/NotificationListenerService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
-HSPLandroid/service/notification/NotificationListenerService;->onInterruptionFilterChanged(I)V
-HPLandroid/service/notification/NotificationListenerService;->onListenerConnected()V
-HPLandroid/service/notification/NotificationListenerService;->onNotificationPosted(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V
-HPLandroid/service/notification/NotificationListenerService;->onNotificationRankingUpdate(Landroid/service/notification/NotificationListenerService$RankingMap;)V
-HPLandroid/service/notification/NotificationListenerService;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V
-HPLandroid/service/notification/NotificationListenerService;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;I)V
-HPLandroid/service/notification/NotificationListenerService;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;Landroid/service/notification/NotificationStats;I)V
-HSPLandroid/service/notification/NotificationListenerService;->requestRebind(Landroid/content/ComponentName;)V
-HPLandroid/service/notification/NotificationListenerService;->setNotificationsShown([Ljava/lang/String;)V
-HSPLandroid/service/notification/NotificationRankingUpdate$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/NotificationRankingUpdate;
-HSPLandroid/service/notification/NotificationRankingUpdate$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSLandroid/service/notification/NotificationRankingUpdate;-><init>(Landroid/os/Parcel;)V
-HPLandroid/service/notification/NotificationRankingUpdate;-><init>([Landroid/service/notification/NotificationListenerService$Ranking;)V
+HSPLandroid/service/notification/NotificationListenerService;->getNotificationInterface()Landroid/app/INotificationManager;
+HSPLandroid/service/notification/NotificationListenerService;->maybePopulatePeople(Landroid/app/Notification;)V
+HSPLandroid/service/notification/NotificationListenerService;->maybePopulateRemoteViews(Landroid/app/Notification;)V
+HSPLandroid/service/notification/NotificationListenerService;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;Landroid/service/notification/NotificationStats;I)V
 HSPLandroid/service/notification/NotificationRankingUpdate;->getRankingMap()Landroid/service/notification/NotificationListenerService$RankingMap;
-HPLandroid/service/notification/NotificationRankingUpdate;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/service/notification/NotificationStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/NotificationStats;
-HPLandroid/service/notification/NotificationStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/service/notification/NotificationStats;-><init>()V
-HPLandroid/service/notification/NotificationStats;-><init>(Landroid/os/Parcel;)V
-PLandroid/service/notification/NotificationStats;->hasSeen()Z
-PLandroid/service/notification/NotificationStats;->setExpanded()V
-PLandroid/service/notification/NotificationStats;->setSeen()V
-PLandroid/service/notification/NotificationStats;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/service/notification/ScheduleCalendar;-><clinit>()V
-PLandroid/service/notification/ScheduleCalendar;-><init>()V
-PLandroid/service/notification/ScheduleCalendar;->addDays(JI)J
-HPLandroid/service/notification/ScheduleCalendar;->exitAtAlarm()Z
-PLandroid/service/notification/ScheduleCalendar;->getDayOfWeek(J)I
-PLandroid/service/notification/ScheduleCalendar;->getNextChangeTime(J)J
-PLandroid/service/notification/ScheduleCalendar;->getNextTime(JII)J
-PLandroid/service/notification/ScheduleCalendar;->getTime(JII)J
-PLandroid/service/notification/ScheduleCalendar;->isAlarmInSchedule(JJ)Z
-PLandroid/service/notification/ScheduleCalendar;->isInSchedule(IJJJ)Z
-PLandroid/service/notification/ScheduleCalendar;->isInSchedule(J)Z
-PLandroid/service/notification/ScheduleCalendar;->maybeSetNextAlarm(JJ)V
-PLandroid/service/notification/ScheduleCalendar;->setSchedule(Landroid/service/notification/ZenModeConfig$ScheduleInfo;)V
-PLandroid/service/notification/ScheduleCalendar;->setTimeZone(Ljava/util/TimeZone;)V
-PLandroid/service/notification/ScheduleCalendar;->shouldExitForAlarm(J)Z
-PLandroid/service/notification/ScheduleCalendar;->toString()Ljava/lang/String;
-PLandroid/service/notification/ScheduleCalendar;->updateDays()V
-HPLandroid/service/notification/StatusBarNotification$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/StatusBarNotification;
-HPLandroid/service/notification/StatusBarNotification$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/service/notification/StatusBarNotification;-><init>(Landroid/os/Parcel;)V
-HPLandroid/service/notification/StatusBarNotification;-><init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IIILandroid/app/Notification;Landroid/os/UserHandle;J)V
-HPLandroid/service/notification/StatusBarNotification;-><init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IILandroid/app/Notification;Landroid/os/UserHandle;Ljava/lang/String;J)V
-HPLandroid/service/notification/StatusBarNotification;->clone()Landroid/service/notification/StatusBarNotification;
-HPLandroid/service/notification/StatusBarNotification;->cloneLight()Landroid/service/notification/StatusBarNotification;
-PLandroid/service/notification/StatusBarNotification;->getChannelIdLogTag()Ljava/lang/String;
-HPLandroid/service/notification/StatusBarNotification;->getGroup()Ljava/lang/String;
-HPLandroid/service/notification/StatusBarNotification;->getGroupKey()Ljava/lang/String;
-PLandroid/service/notification/StatusBarNotification;->getGroupLogTag()Ljava/lang/String;
-HPLandroid/service/notification/StatusBarNotification;->getId()I
-PLandroid/service/notification/StatusBarNotification;->getInitialPid()I
-HPLandroid/service/notification/StatusBarNotification;->getKey()Ljava/lang/String;
-HPLandroid/service/notification/StatusBarNotification;->getLogMaker()Landroid/metrics/LogMaker;
-HPLandroid/service/notification/StatusBarNotification;->getNotification()Landroid/app/Notification;
-HPLandroid/service/notification/StatusBarNotification;->getOpPkg()Ljava/lang/String;
-HPLandroid/service/notification/StatusBarNotification;->getOverrideGroupKey()Ljava/lang/String;
-PLandroid/service/notification/StatusBarNotification;->getPackageContext(Landroid/content/Context;)Landroid/content/Context;
-HPLandroid/service/notification/StatusBarNotification;->getPackageName()Ljava/lang/String;
-HPLandroid/service/notification/StatusBarNotification;->getPostTime()J
-HPLandroid/service/notification/StatusBarNotification;->getTag()Ljava/lang/String;
-HPLandroid/service/notification/StatusBarNotification;->getUid()I
-HPLandroid/service/notification/StatusBarNotification;->getUser()Landroid/os/UserHandle;
-HPLandroid/service/notification/StatusBarNotification;->getUserId()I
-HPLandroid/service/notification/StatusBarNotification;->groupKey()Ljava/lang/String;
-HPLandroid/service/notification/StatusBarNotification;->isAppGroup()Z
-HPLandroid/service/notification/StatusBarNotification;->isClearable()Z
-HPLandroid/service/notification/StatusBarNotification;->isGroup()Z
-PLandroid/service/notification/StatusBarNotification;->isOngoing()Z
-HPLandroid/service/notification/StatusBarNotification;->key()Ljava/lang/String;
-PLandroid/service/notification/StatusBarNotification;->setOverrideGroupKey(Ljava/lang/String;)V
-HPLandroid/service/notification/StatusBarNotification;->shortenTag(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/service/notification/StatusBarNotification;->toString()Ljava/lang/String;
-HPLandroid/service/notification/StatusBarNotification;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/service/notification/ZenModeConfig$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/ZenModeConfig;
-HPLandroid/service/notification/ZenModeConfig$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/service/notification/ZenModeConfig$Diff;-><init>()V
-HSPLandroid/service/notification/ZenModeConfig$Diff;->access$000(Landroid/service/notification/ZenModeConfig$Diff;Ljava/lang/String;Ljava/lang/String;)Landroid/service/notification/ZenModeConfig$Diff;
-HSPLandroid/service/notification/ZenModeConfig$Diff;->addLine(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Landroid/service/notification/ZenModeConfig$Diff;
-HSPLandroid/service/notification/ZenModeConfig$Diff;->addLine(Ljava/lang/String;Ljava/lang/String;)Landroid/service/notification/ZenModeConfig$Diff;
-PLandroid/service/notification/ZenModeConfig$Diff;->addLine(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Landroid/service/notification/ZenModeConfig$Diff;
-HSPLandroid/service/notification/ZenModeConfig$Diff;->toString()Ljava/lang/String;
-HSPLandroid/service/notification/ZenModeConfig$EventInfo;-><init>()V
-HSPLandroid/service/notification/ZenModeConfig$ScheduleInfo;-><init>()V
-PLandroid/service/notification/ZenModeConfig$ScheduleInfo;->toString()Ljava/lang/String;
-PLandroid/service/notification/ZenModeConfig$ScheduleInfo;->ts(J)Ljava/lang/String;
-HSPLandroid/service/notification/ZenModeConfig$ZenRule$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/ZenModeConfig$ZenRule;
-HSPLandroid/service/notification/ZenModeConfig$ZenRule$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/service/notification/ZenModeConfig$ZenRule;-><init>()V
-HSPLandroid/service/notification/ZenModeConfig$ZenRule;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/service/notification/ZenModeConfig$ZenRule;->access$100(Landroid/service/notification/ZenModeConfig$Diff;Ljava/lang/String;Landroid/service/notification/ZenModeConfig$ZenRule;Landroid/service/notification/ZenModeConfig$ZenRule;)V
-HSPLandroid/service/notification/ZenModeConfig$ZenRule;->appendDiff(Landroid/service/notification/ZenModeConfig$Diff;Ljava/lang/String;Landroid/service/notification/ZenModeConfig$ZenRule;)V
-HSPLandroid/service/notification/ZenModeConfig$ZenRule;->appendDiff(Landroid/service/notification/ZenModeConfig$Diff;Ljava/lang/String;Landroid/service/notification/ZenModeConfig$ZenRule;Landroid/service/notification/ZenModeConfig$ZenRule;)V
-PLandroid/service/notification/ZenModeConfig$ZenRule;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLandroid/service/notification/ZenModeConfig$ZenRule;->equals(Ljava/lang/Object;)Z
-HPLandroid/service/notification/ZenModeConfig$ZenRule;->hashCode()I
-HSPLandroid/service/notification/ZenModeConfig$ZenRule;->isAutomaticActive()Z
-HSPLandroid/service/notification/ZenModeConfig$ZenRule;->isTrueOrUnknown()Z
-HSPLandroid/service/notification/ZenModeConfig$ZenRule;->toString()Ljava/lang/String;
-HSPLandroid/service/notification/ZenModeConfig$ZenRule;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/service/notification/ZenModeConfig;-><init>()V
-HSPLandroid/service/notification/ZenModeConfig;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/service/notification/ZenModeConfig;->addKeys(Landroid/util/ArraySet;Landroid/util/ArrayMap;)V
-HSPLandroid/service/notification/ZenModeConfig;->areAllPriorityOnlyRingerSoundsMuted(Landroid/app/NotificationManager$Policy;)Z
-HSPLandroid/service/notification/ZenModeConfig;->areAllPriorityOnlyRingerSoundsMuted(Landroid/service/notification/ZenModeConfig;)Z
-HSPLandroid/service/notification/ZenModeConfig;->areAllZenBehaviorSoundsMuted(Landroid/app/NotificationManager$Policy;)Z
-HSPLandroid/service/notification/ZenModeConfig;->copy()Landroid/service/notification/ZenModeConfig;
-HSPLandroid/service/notification/ZenModeConfig;->diff(Landroid/service/notification/ZenModeConfig;)Landroid/service/notification/ZenModeConfig$Diff;
-HSPLandroid/service/notification/ZenModeConfig;->diff(Landroid/service/notification/ZenModeConfig;Landroid/service/notification/ZenModeConfig;)Landroid/service/notification/ZenModeConfig$Diff;
-HSPLandroid/service/notification/ZenModeConfig;->equals(Ljava/lang/Object;)Z
-HPLandroid/service/notification/ZenModeConfig;->getDescription(Landroid/content/Context;ZLandroid/service/notification/ZenModeConfig;Z)Ljava/lang/String;
-HPLandroid/service/notification/ZenModeConfig;->getNextAlarm(Landroid/content/Context;)J
-HSPLandroid/service/notification/ZenModeConfig;->getNotificationPolicySenders(II)I
-PLandroid/service/notification/ZenModeConfig;->hashCode()I
-HSPLandroid/service/notification/ZenModeConfig;->isPriorityCategoryEnabled(ILandroid/app/NotificationManager$Policy;)Z
-HSPLandroid/service/notification/ZenModeConfig;->isValid()Z
-HSPLandroid/service/notification/ZenModeConfig;->isValidAutomaticRule(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
-HSPLandroid/service/notification/ZenModeConfig;->isValidCountdownConditionId(Landroid/net/Uri;)Z
-HSPLandroid/service/notification/ZenModeConfig;->isValidEventConditionId(Landroid/net/Uri;)Z
-HSPLandroid/service/notification/ZenModeConfig;->isValidHour(I)Z
-HSPLandroid/service/notification/ZenModeConfig;->isValidManualRule(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
-HSPLandroid/service/notification/ZenModeConfig;->isValidMinute(I)Z
-HSPLandroid/service/notification/ZenModeConfig;->isValidScheduleConditionId(Landroid/net/Uri;)Z
-HSPLandroid/service/notification/ZenModeConfig;->isValidSource(I)Z
-HSPLandroid/service/notification/ZenModeConfig;->isVisualEffectAllowed(ILandroid/app/NotificationManager$Policy;)Z
-HPLandroid/service/notification/ZenModeConfig;->isZenOverridingRinger(ILandroid/app/NotificationManager$Policy;)Z
-HPLandroid/service/notification/ZenModeConfig;->parseAutomaticRuleEndTime(Landroid/content/Context;Landroid/net/Uri;)J
-HSPLandroid/service/notification/ZenModeConfig;->readConditionXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/service/notification/Condition;
-HSPLandroid/service/notification/ZenModeConfig;->readRuleXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/service/notification/ZenModeConfig$ZenRule;
-HSPLandroid/service/notification/ZenModeConfig;->readXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/service/notification/ZenModeConfig;
-HSPLandroid/service/notification/ZenModeConfig;->readZenPolicyXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/service/notification/ZenPolicy;
-HSPLandroid/service/notification/ZenModeConfig;->rulesToString()Ljava/lang/String;
-HSPLandroid/service/notification/ZenModeConfig;->safeBoolean(Ljava/lang/String;Z)Z
-HSPLandroid/service/notification/ZenModeConfig;->safeBoolean(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Z)Z
-HSPLandroid/service/notification/ZenModeConfig;->safeComponentName(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/content/ComponentName;
-HSPLandroid/service/notification/ZenModeConfig;->safeInt(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
-HSPLandroid/service/notification/ZenModeConfig;->safeLong(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;J)J
-HSPLandroid/service/notification/ZenModeConfig;->safeUri(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/service/notification/ZenModeConfig;->sameCondition(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
-HSPLandroid/service/notification/ZenModeConfig;->sourceToPrioritySenders(II)I
-HSPLandroid/service/notification/ZenModeConfig;->sourceToString(I)Ljava/lang/String;
-HSPLandroid/service/notification/ZenModeConfig;->toNotificationPolicy()Landroid/app/NotificationManager$Policy;
-HSPLandroid/service/notification/ZenModeConfig;->toNotificationPolicy(Landroid/service/notification/ZenPolicy;)Landroid/app/NotificationManager$Policy;
-PLandroid/service/notification/ZenModeConfig;->toScheduleCalendar(Landroid/net/Uri;)Landroid/service/notification/ScheduleCalendar;
-HSPLandroid/service/notification/ZenModeConfig;->toString()Ljava/lang/String;
-HSPLandroid/service/notification/ZenModeConfig;->tryParseCountdownConditionId(Landroid/net/Uri;)J
-HSPLandroid/service/notification/ZenModeConfig;->tryParseDayList(Ljava/lang/String;Ljava/lang/String;)[I
-HSPLandroid/service/notification/ZenModeConfig;->tryParseEventConditionId(Landroid/net/Uri;)Landroid/service/notification/ZenModeConfig$EventInfo;
-HSPLandroid/service/notification/ZenModeConfig;->tryParseHourAndMinute(Ljava/lang/String;)[I
-HSPLandroid/service/notification/ZenModeConfig;->tryParseInt(Ljava/lang/String;I)I
-HSPLandroid/service/notification/ZenModeConfig;->tryParseLong(Ljava/lang/String;J)J
-HSPLandroid/service/notification/ZenModeConfig;->tryParseLong(Ljava/lang/String;Ljava/lang/Long;)Ljava/lang/Long;
-HSPLandroid/service/notification/ZenModeConfig;->tryParseScheduleConditionId(Landroid/net/Uri;)Landroid/service/notification/ZenModeConfig$ScheduleInfo;
-HSPLandroid/service/notification/ZenModeConfig;->tryParseZenMode(Ljava/lang/String;I)I
-HSPLandroid/service/notification/ZenModeConfig;->unsafeBoolean(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/Boolean;
-HSPLandroid/service/notification/ZenModeConfig;->writeConditionXml(Landroid/service/notification/Condition;Lorg/xmlpull/v1/XmlSerializer;)V
-HSPLandroid/service/notification/ZenModeConfig;->writeRuleXml(Landroid/service/notification/ZenModeConfig$ZenRule;Lorg/xmlpull/v1/XmlSerializer;)V
-HSPLandroid/service/notification/ZenModeConfig;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/service/notification/ZenModeConfig;->writeXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/Integer;)V
-HSPLandroid/service/notification/ZenPolicy$Builder;-><init>()V
-HSPLandroid/service/notification/ZenPolicy;-><init>()V
-HSPLandroid/service/notification/ZenPolicy;->apply(Landroid/service/notification/ZenPolicy;)V
-HSPLandroid/service/notification/ZenPolicy;->getPriorityCallSenders()I
-HSPLandroid/service/notification/ZenPolicy;->getPriorityCategoryAlarms()I
-HSPLandroid/service/notification/ZenPolicy;->getPriorityCategoryCalls()I
-HSPLandroid/service/notification/ZenPolicy;->getPriorityCategoryEvents()I
-HSPLandroid/service/notification/ZenPolicy;->getPriorityCategoryMedia()I
-HSPLandroid/service/notification/ZenPolicy;->getPriorityCategoryMessages()I
-HSPLandroid/service/notification/ZenPolicy;->getPriorityCategoryReminders()I
-HSPLandroid/service/notification/ZenPolicy;->getPriorityCategoryRepeatCallers()I
-HSPLandroid/service/notification/ZenPolicy;->getPriorityCategorySystem()I
-HSPLandroid/service/notification/ZenPolicy;->getVisualEffectAmbient()I
-HSPLandroid/service/notification/ZenPolicy;->getVisualEffectBadge()I
-HSPLandroid/service/notification/ZenPolicy;->getVisualEffectFullScreenIntent()I
-HSPLandroid/service/notification/ZenPolicy;->getVisualEffectLights()I
-HSPLandroid/service/notification/ZenPolicy;->getVisualEffectNotificationList()I
-HSPLandroid/service/notification/ZenPolicy;->getVisualEffectPeek()I
-HSPLandroid/service/notification/ZenPolicy;->getVisualEffectStatusBar()I
-HSPLandroid/service/notification/ZenPolicy;->getZenPolicyPriorityCategoryState(I)I
-HSPLandroid/service/notification/ZenPolicy;->getZenPolicyVisualEffectState(I)I
-HSPLandroid/service/notification/ZenPolicy;->isCategoryAllowed(IZ)Z
-HSPLandroid/service/notification/ZenPolicy;->isVisualEffectAllowed(IZ)Z
-HSPLandroid/service/oemlock/IOemLockService$Stub;-><init>()V
-HSPLandroid/service/oemlock/IOemLockService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/oemlock/IOemLockService;
-PLandroid/service/oemlock/IOemLockService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/service/oemlock/OemLockManager;-><init>(Landroid/service/oemlock/IOemLockService;)V
-HSPLandroid/service/persistentdata/IPersistentDataBlockService$Stub$Proxy;->getFlashLockState()I
-HPLandroid/service/persistentdata/IPersistentDataBlockService$Stub$Proxy;->getMaximumDataBlockSize()J
-HPLandroid/service/persistentdata/IPersistentDataBlockService$Stub$Proxy;->read()[B
-HPLandroid/service/persistentdata/IPersistentDataBlockService$Stub$Proxy;->write([B)I
-HSPLandroid/service/persistentdata/IPersistentDataBlockService$Stub;-><init>()V
-HSPLandroid/service/persistentdata/IPersistentDataBlockService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/persistentdata/IPersistentDataBlockService;
-HPLandroid/service/persistentdata/IPersistentDataBlockService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/service/persistentdata/IPersistentDataBlockService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/service/persistentdata/PersistentDataBlockManager;-><init>(Landroid/service/persistentdata/IPersistentDataBlockService;)V
-HSPLandroid/service/persistentdata/PersistentDataBlockManager;->getFlashLockState()I
-HPLandroid/service/persistentdata/PersistentDataBlockManager;->getMaximumDataBlockSize()J
-HPLandroid/service/persistentdata/PersistentDataBlockManager;->read()[B
-HPLandroid/service/persistentdata/PersistentDataBlockManager;->write([B)I
-PLandroid/service/textclassifier/ITextClassifierCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/service/textclassifier/ITextClassifierCallback$Stub$Proxy;->onSuccess(Landroid/os/Bundle;)V
-HPLandroid/service/textclassifier/ITextClassifierCallback$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/service/textclassifier/ITextClassifierCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/textclassifier/ITextClassifierService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/textclassifier/ITextClassifierService$Stub$Proxy;->onClassifyText(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassification$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
-PLandroid/service/textclassifier/ITextClassifierService$Stub$Proxy;->onConnectedStateChanged(I)V
-HPLandroid/service/textclassifier/ITextClassifierService$Stub$Proxy;->onCreateTextClassificationSession(Landroid/view/textclassifier/TextClassificationContext;Landroid/view/textclassifier/TextClassificationSessionId;)V
-HPLandroid/service/textclassifier/ITextClassifierService$Stub$Proxy;->onDestroyTextClassificationSession(Landroid/view/textclassifier/TextClassificationSessionId;)V
-PLandroid/service/textclassifier/ITextClassifierService$Stub$Proxy;->onGenerateLinks(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextLinks$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
-PLandroid/service/textclassifier/ITextClassifierService$Stub$Proxy;->onSelectionEvent(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/SelectionEvent;)V
-PLandroid/service/textclassifier/ITextClassifierService$Stub$Proxy;->onSuggestConversationActions(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/ConversationActions$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
-PLandroid/service/textclassifier/ITextClassifierService$Stub$Proxy;->onSuggestSelection(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextSelection$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
-PLandroid/service/textclassifier/ITextClassifierService$Stub$Proxy;->onTextClassifierEvent(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassifierEvent;)V
-HSPLandroid/service/textclassifier/ITextClassifierService$Stub;-><init>()V
-PLandroid/service/textclassifier/ITextClassifierService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/textclassifier/ITextClassifierService;
-PLandroid/service/textclassifier/ITextClassifierService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/service/textclassifier/ITextClassifierService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/service/textclassifier/TextClassifierService;-><init>()V
-HPLandroid/service/textclassifier/TextClassifierService;->access$000(Landroid/service/textclassifier/TextClassifierService;)Landroid/os/Handler;
-HPLandroid/service/textclassifier/TextClassifierService;->getDefaultTextClassifierImplementation(Landroid/content/Context;)Landroid/view/textclassifier/TextClassifier;
-HPLandroid/service/textclassifier/TextClassifierService;->getLocalTextClassifier()Landroid/view/textclassifier/TextClassifier;
-PLandroid/service/textclassifier/TextClassifierService;->getServiceComponentName(Landroid/content/Context;)Landroid/content/ComponentName;
-HPLandroid/service/textclassifier/TextClassifierService;->getServiceComponentNameByPackage(Landroid/content/Context;Ljava/lang/String;Z)Landroid/content/ComponentName;
-HPLandroid/service/textclassifier/TextClassifierService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
-HPLandroid/service/textclassifier/TextClassifierService;->onConnected()V
-PLandroid/service/trust/ITrustAgentService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/service/trust/ITrustAgentService$Stub$Proxy;->onConfigure(Ljava/util/List;Landroid/os/IBinder;)V
-PLandroid/service/trust/ITrustAgentService$Stub$Proxy;->onDeviceLocked()V
-PLandroid/service/trust/ITrustAgentService$Stub$Proxy;->onDeviceUnlocked()V
-PLandroid/service/trust/ITrustAgentService$Stub$Proxy;->onUnlockAttempt(Z)V
-PLandroid/service/trust/ITrustAgentService$Stub$Proxy;->setCallback(Landroid/service/trust/ITrustAgentServiceCallback;)V
-HSPLandroid/service/trust/ITrustAgentService$Stub;-><init>()V
-PLandroid/service/trust/ITrustAgentService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/trust/ITrustAgentService;
-HSPLandroid/service/trust/ITrustAgentService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/service/trust/ITrustAgentServiceCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/trust/ITrustAgentServiceCallback$Stub;-><init>()V
-PLandroid/service/trust/ITrustAgentServiceCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/service/trust/ITrustAgentServiceCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/trust/ITrustAgentServiceCallback;
-HSPLandroid/service/trust/TrustAgentService$1;-><init>(Landroid/service/trust/TrustAgentService;)V
-HSPLandroid/service/trust/TrustAgentService$1;->handleMessage(Landroid/os/Message;)V
-HSPLandroid/service/trust/TrustAgentService$ConfigurationData;-><init>(Ljava/util/List;Landroid/os/IBinder;)V
-HSPLandroid/service/trust/TrustAgentService$TrustAgentServiceWrapper;-><init>(Landroid/service/trust/TrustAgentService;)V
-HSPLandroid/service/trust/TrustAgentService$TrustAgentServiceWrapper;-><init>(Landroid/service/trust/TrustAgentService;Landroid/service/trust/TrustAgentService$1;)V
-HSPLandroid/service/trust/TrustAgentService$TrustAgentServiceWrapper;->onConfigure(Ljava/util/List;Landroid/os/IBinder;)V
-HSPLandroid/service/trust/TrustAgentService$TrustAgentServiceWrapper;->onDeviceLocked()V
-HSPLandroid/service/trust/TrustAgentService$TrustAgentServiceWrapper;->setCallback(Landroid/service/trust/ITrustAgentServiceCallback;)V
-HSPLandroid/service/trust/TrustAgentService;-><init>()V
-HSPLandroid/service/trust/TrustAgentService;->access$000(Landroid/service/trust/TrustAgentService;)Ljava/lang/Object;
-HSPLandroid/service/trust/TrustAgentService;->access$102(Landroid/service/trust/TrustAgentService;Landroid/service/trust/ITrustAgentServiceCallback;)Landroid/service/trust/ITrustAgentServiceCallback;
-HSPLandroid/service/trust/TrustAgentService;->access$400(Landroid/service/trust/TrustAgentService;)Landroid/os/Handler;
-HSPLandroid/service/trust/TrustAgentService;->access$500(Landroid/service/trust/TrustAgentService;)Z
-HSPLandroid/service/trust/TrustAgentService;->access$600(Landroid/service/trust/TrustAgentService;)Ljava/lang/Runnable;
-HSPLandroid/service/trust/TrustAgentService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
-PLandroid/service/voice/IVoiceInteractionService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/voice/IVoiceInteractionService$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/service/voice/IVoiceInteractionService$Stub$Proxy;->ready()V
-HSPLandroid/service/voice/IVoiceInteractionService$Stub;-><init>()V
-HSPLandroid/service/voice/IVoiceInteractionService$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/service/voice/IVoiceInteractionService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/voice/IVoiceInteractionService;
-HSPLandroid/service/voice/IVoiceInteractionService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/voice/IVoiceInteractionSession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/voice/IVoiceInteractionSession$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/service/voice/IVoiceInteractionSession$Stub$Proxy;->closeSystemDialogs()V
-PLandroid/service/voice/IVoiceInteractionSession$Stub$Proxy;->destroy()V
-PLandroid/service/voice/IVoiceInteractionSession$Stub$Proxy;->handleAssist(ILandroid/os/IBinder;Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;II)V
-PLandroid/service/voice/IVoiceInteractionSession$Stub$Proxy;->handleScreenshot(Landroid/graphics/Bitmap;)V
-PLandroid/service/voice/IVoiceInteractionSession$Stub$Proxy;->hide()V
-PLandroid/service/voice/IVoiceInteractionSession$Stub$Proxy;->onLockscreenShown()V
-PLandroid/service/voice/IVoiceInteractionSession$Stub$Proxy;->show(Landroid/os/Bundle;ILcom/android/internal/app/IVoiceInteractionSessionShowCallback;)V
-HSPLandroid/service/voice/IVoiceInteractionSession$Stub;-><init>()V
-HSPLandroid/service/voice/IVoiceInteractionSession$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/service/voice/IVoiceInteractionSession$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/voice/IVoiceInteractionSession;
-HSPLandroid/service/voice/IVoiceInteractionSession$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/voice/IVoiceInteractionSessionService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/voice/IVoiceInteractionSessionService$Stub$Proxy;->newSession(Landroid/os/IBinder;Landroid/os/Bundle;I)V
-HSPLandroid/service/voice/IVoiceInteractionSessionService$Stub;-><init>()V
-HSPLandroid/service/voice/IVoiceInteractionSessionService$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/service/voice/IVoiceInteractionSessionService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/voice/IVoiceInteractionSessionService;
-HSPLandroid/service/voice/IVoiceInteractionSessionService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/service/voice/VoiceInteractionManagerInternal;-><init>()V
-PLandroid/service/voice/VoiceInteractionServiceInfo;-><init>(Landroid/content/pm/PackageManager;Landroid/content/ComponentName;I)V
-HSPLandroid/service/voice/VoiceInteractionServiceInfo;-><init>(Landroid/content/pm/PackageManager;Landroid/content/pm/ServiceInfo;)V
-HSPLandroid/service/voice/VoiceInteractionServiceInfo;->getParseError()Ljava/lang/String;
-HSPLandroid/service/voice/VoiceInteractionServiceInfo;->getRecognitionService()Ljava/lang/String;
-HSPLandroid/service/voice/VoiceInteractionServiceInfo;->getServiceInfo()Landroid/content/pm/ServiceInfo;
-PLandroid/service/voice/VoiceInteractionServiceInfo;->getServiceInfoOrThrow(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;
-PLandroid/service/voice/VoiceInteractionServiceInfo;->getSessionService()Ljava/lang/String;
-HSPLandroid/service/voice/VoiceInteractionServiceInfo;->getSettingsActivity()Ljava/lang/String;
-HSPLandroid/service/voice/VoiceInteractionServiceInfo;->getSupportsAssist()Z
-PLandroid/service/voice/VoiceInteractionServiceInfo;->getSupportsLaunchFromKeyguard()Z
-HSPLandroid/service/vr/IPersistentVrStateCallbacks$Stub;-><init>()V
+HSPLandroid/service/notification/StatusBarNotification$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/StatusBarNotification;
+HSPLandroid/service/notification/StatusBarNotification$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/service/notification/StatusBarNotification;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/service/notification/StatusBarNotification;->getGroupKey()Ljava/lang/String;
+HSPLandroid/service/notification/StatusBarNotification;->getId()I
+HSPLandroid/service/notification/StatusBarNotification;->getKey()Ljava/lang/String;
+HSPLandroid/service/notification/StatusBarNotification;->getNotification()Landroid/app/Notification;
+HSPLandroid/service/notification/StatusBarNotification;->getPackageName()Ljava/lang/String;
+HSPLandroid/service/notification/StatusBarNotification;->getPostTime()J
+HSPLandroid/service/notification/StatusBarNotification;->getTag()Ljava/lang/String;
+HSPLandroid/service/notification/StatusBarNotification;->getUser()Landroid/os/UserHandle;
+HSPLandroid/service/notification/StatusBarNotification;->getUserId()I
+HSPLandroid/service/notification/StatusBarNotification;->groupKey()Ljava/lang/String;
+HSPLandroid/service/notification/StatusBarNotification;->isAppGroup()Z
+HSPLandroid/service/notification/StatusBarNotification;->isGroup()Z
+HSPLandroid/service/notification/StatusBarNotification;->key()Ljava/lang/String;
 HSPLandroid/service/vr/IVrManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/vr/IVrManager;
 HSPLandroid/service/vr/IVrStateCallbacks$Stub;-><init>()V
-HSPLandroid/service/wallpaper/IWallpaperConnection$Stub;-><init>()V
-PLandroid/service/wallpaper/IWallpaperConnection$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/service/wallpaper/IWallpaperConnection$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/wallpaper/IWallpaperEngine$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/wallpaper/IWallpaperEngine$Stub$Proxy;->requestWallpaperColors()V
-PLandroid/service/wallpaper/IWallpaperEngine$Stub$Proxy;->setInAmbientMode(ZJ)V
-PLandroid/service/wallpaper/IWallpaperEngine$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/wallpaper/IWallpaperEngine;
-HPLandroid/service/wallpaper/IWallpaperEngine$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/service/wallpaper/IWallpaperService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/wallpaper/IWallpaperService$Stub$Proxy;->attach(Landroid/service/wallpaper/IWallpaperConnection;Landroid/os/IBinder;IZIILandroid/graphics/Rect;I)V
-PLandroid/service/wallpaper/IWallpaperService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/wallpaper/IWallpaperService;
-HSPLandroid/service/watchdog/ExplicitHealthCheckService$PackageConfig$1;-><init>()V
-PLandroid/service/watchdog/ExplicitHealthCheckService$PackageConfig$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/watchdog/ExplicitHealthCheckService$PackageConfig;
-PLandroid/service/watchdog/ExplicitHealthCheckService$PackageConfig$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/service/watchdog/ExplicitHealthCheckService$PackageConfig;-><clinit>()V
-PLandroid/service/watchdog/ExplicitHealthCheckService$PackageConfig;-><init>(Landroid/os/Parcel;)V
-PLandroid/service/watchdog/ExplicitHealthCheckService$PackageConfig;-><init>(Landroid/os/Parcel;Landroid/service/watchdog/ExplicitHealthCheckService$1;)V
-PLandroid/service/watchdog/ExplicitHealthCheckService$PackageConfig;->getHealthCheckTimeoutMillis()J
-PLandroid/service/watchdog/ExplicitHealthCheckService$PackageConfig;->getPackageName()Ljava/lang/String;
-PLandroid/service/watchdog/ExplicitHealthCheckService$PackageConfig;->toString()Ljava/lang/String;
-PLandroid/service/watchdog/IExplicitHealthCheckService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/service/watchdog/IExplicitHealthCheckService$Stub$Proxy;->getRequestedPackages(Landroid/os/RemoteCallback;)V
-PLandroid/service/watchdog/IExplicitHealthCheckService$Stub$Proxy;->getSupportedPackages(Landroid/os/RemoteCallback;)V
-PLandroid/service/watchdog/IExplicitHealthCheckService$Stub$Proxy;->setCallback(Landroid/os/RemoteCallback;)V
-PLandroid/service/watchdog/IExplicitHealthCheckService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/watchdog/IExplicitHealthCheckService;
-HSPLandroid/speech/SpeechRecognizer;->isRecognitionAvailable(Landroid/content/Context;)Z
-HSPLandroid/speech/tts/TtsEngines;-><init>(Landroid/content/Context;)V
-HSPLandroid/speech/tts/TtsEngines;->getEngineInfo(Landroid/content/pm/ResolveInfo;Landroid/content/pm/PackageManager;)Landroid/speech/tts/TextToSpeech$EngineInfo;
-HSPLandroid/speech/tts/TtsEngines;->getEngines()Ljava/util/List;
-HSPLandroid/speech/tts/TtsEngines;->isSystemEngine(Landroid/content/pm/ServiceInfo;)Z
-PLandroid/stats/devicepolicy/nano/StringList;-><init>()V
-PLandroid/stats/devicepolicy/nano/StringList;->clear()Landroid/stats/devicepolicy/nano/StringList;
-HPLandroid/stats/devicepolicy/nano/StringList;->computeSerializedSize()I
-HPLandroid/stats/devicepolicy/nano/StringList;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$0Zy6hglFVc-K9jiJWmuHmilIMkY;-><clinit>()V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$0Zy6hglFVc-K9jiJWmuHmilIMkY;-><init>()V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$0Zy6hglFVc-K9jiJWmuHmilIMkY;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$2V_2ZQoGHfOIfKo_A8Ss547oL-c;-><clinit>()V
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$2V_2ZQoGHfOIfKo_A8Ss547oL-c;-><init>()V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$2V_2ZQoGHfOIfKo_A8Ss547oL-c;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$BfPaTA0e9gauJmR4vGNCDkGZ3uc;-><clinit>()V
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$BfPaTA0e9gauJmR4vGNCDkGZ3uc;-><init>()V
-HPLandroid/sysprop/-$$Lambda$TelephonyProperties$BfPaTA0e9gauJmR4vGNCDkGZ3uc;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$BfPaTA0e9gauJmR4vGNCDkGZ3uc;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$EV4LSOwY7Dsh1rJalZDLmnGJw5I;-><clinit>()V
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$EV4LSOwY7Dsh1rJalZDLmnGJw5I;-><init>()V
-HPLandroid/sysprop/-$$Lambda$TelephonyProperties$EV4LSOwY7Dsh1rJalZDLmnGJw5I;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$EV4LSOwY7Dsh1rJalZDLmnGJw5I;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$H4jN0VIBNpZQBeWYt6qS3DCe_M8;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$JNTRmlscGaFlYo_3krOr_WWd2QI;-><clinit>()V
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$JNTRmlscGaFlYo_3krOr_WWd2QI;-><init>()V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$UKEfAuJVPm5cKR_UnPj1L66mN34;-><clinit>()V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$UKEfAuJVPm5cKR_UnPj1L66mN34;-><init>()V
+HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$JNTRmlscGaFlYo_3krOr_WWd2QI;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$UKEfAuJVPm5cKR_UnPj1L66mN34;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$VtSZ_Uto4bMa49ncgAfdWewMFOU;-><clinit>()V
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$VtSZ_Uto4bMa49ncgAfdWewMFOU;-><init>()V
+HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$VtSZ_Uto4bMa49ncgAfdWewMFOU;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$dc-CgjsF3BtDxLSSKL5bQ9ullG0;-><clinit>()V
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$dc-CgjsF3BtDxLSSKL5bQ9ullG0;-><init>()V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$fdR0mRnJd3OymvjDc_MI1AHnMwc;-><clinit>()V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$fdR0mRnJd3OymvjDc_MI1AHnMwc;-><init>()V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$fdR0mRnJd3OymvjDc_MI1AHnMwc;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$iJa3afMQmWbO1DX4jS9zkcOKZlY;-><clinit>()V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$iJa3afMQmWbO1DX4jS9zkcOKZlY;-><init>()V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$kCQNtMqtfi6MMlFLqtIufNXwOS8;-><clinit>()V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$kCQNtMqtfi6MMlFLqtIufNXwOS8;-><init>()V
+HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$dc-CgjsF3BtDxLSSKL5bQ9ullG0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$kemQbl44ndTqXdQVvnYppJuQboQ;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$rKoNB08X7R8OCPq-VDCWDOm3lDM;-><clinit>()V
-HSPLandroid/sysprop/-$$Lambda$TelephonyProperties$rKoNB08X7R8OCPq-VDCWDOm3lDM;-><init>()V
-HSPLandroid/sysprop/AdbProperties;->secure()Ljava/util/Optional;
-HSPLandroid/sysprop/AdbProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
-HSPLandroid/sysprop/ApexProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
-HSPLandroid/sysprop/ApexProperties;->updatable()Ljava/util/Optional;
-HSPLandroid/sysprop/ContactsProperties;->aggregate_contacts()Ljava/util/Optional;
-HSPLandroid/sysprop/ContactsProperties;->debug_scan_all_packages()Ljava/util/Optional;
-HSPLandroid/sysprop/ContactsProperties;->display_photo_size()Ljava/util/Optional;
-HSPLandroid/sysprop/ContactsProperties;->thumbnail_size()Ljava/util/Optional;
-HSPLandroid/sysprop/ContactsProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
-HSPLandroid/sysprop/ContactsProperties;->tryParseInteger(Ljava/lang/String;)Ljava/lang/Integer;
 HSPLandroid/sysprop/DisplayProperties;->debug_force_rtl()Ljava/util/Optional;
-HSPLandroid/sysprop/DisplayProperties;->debug_force_rtl(Ljava/lang/Boolean;)V
-PLandroid/sysprop/DisplayProperties;->debug_layout()Ljava/util/Optional;
+HSPLandroid/sysprop/DisplayProperties;->debug_layout()Ljava/util/Optional;
 HSPLandroid/sysprop/DisplayProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
-HSPLandroid/sysprop/ProductProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
-HSPLandroid/sysprop/ProductProperties;->unbundled_apps()Ljava/util/Optional;
-HPLandroid/sysprop/TelephonyProperties;->airplane_mode_on(Ljava/lang/Boolean;)V
 HSPLandroid/sysprop/TelephonyProperties;->baseband_version()Ljava/util/List;
-HSPLandroid/sysprop/TelephonyProperties;->baseband_version(Ljava/util/List;)V
-HSPLandroid/sysprop/TelephonyProperties;->call_ring_delay()Ljava/util/Optional;
 HSPLandroid/sysprop/TelephonyProperties;->current_active_phone()Ljava/util/List;
-HSPLandroid/sysprop/TelephonyProperties;->current_active_phone(Ljava/util/List;)V
-HSPLandroid/sysprop/TelephonyProperties;->data_network_type()Ljava/util/List;
-HSPLandroid/sysprop/TelephonyProperties;->data_network_type(Ljava/util/List;)V
 HSPLandroid/sysprop/TelephonyProperties;->default_network()Ljava/util/List;
-HSPLandroid/sysprop/TelephonyProperties;->formatList(Ljava/util/List;)Ljava/lang/String;
-PLandroid/sysprop/TelephonyProperties;->icc_operator_iso_country()Ljava/util/List;
-PLandroid/sysprop/TelephonyProperties;->icc_operator_numeric()Ljava/util/List;
-HSPLandroid/sysprop/TelephonyProperties;->in_ecm_mode()Ljava/util/Optional;
+HSPLandroid/sysprop/TelephonyProperties;->icc_operator_alpha()Ljava/util/List;
+HSPLandroid/sysprop/TelephonyProperties;->icc_operator_iso_country()Ljava/util/List;
+HSPLandroid/sysprop/TelephonyProperties;->icc_operator_numeric()Ljava/util/List;
 HSPLandroid/sysprop/TelephonyProperties;->lambda$baseband_version$0(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/sysprop/TelephonyProperties;->lambda$current_active_phone$5(Ljava/lang/String;)Ljava/lang/Integer;
-HSPLandroid/sysprop/TelephonyProperties;->lambda$data_network_type$10(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/sysprop/TelephonyProperties;->lambda$default_network$14(Ljava/lang/String;)Ljava/lang/Integer;
-HPLandroid/sysprop/TelephonyProperties;->lambda$operator_alpha$1(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/sysprop/TelephonyProperties;->lambda$icc_operator_alpha$8(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/sysprop/TelephonyProperties;->lambda$icc_operator_iso_country$9(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/sysprop/TelephonyProperties;->lambda$icc_operator_numeric$7(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/sysprop/TelephonyProperties;->lambda$operator_alpha$1(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/sysprop/TelephonyProperties;->lambda$operator_is_roaming$3(Ljava/lang/String;)Ljava/lang/Boolean;
-HSPLandroid/sysprop/TelephonyProperties;->lambda$operator_iso_country$4(Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/sysprop/TelephonyProperties;->lambda$operator_numeric$2(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/sysprop/TelephonyProperties;->lambda$sim_state$6(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/sysprop/TelephonyProperties;->max_active_modems()Ljava/util/Optional;
-HSPLandroid/sysprop/TelephonyProperties;->mobile_data()Ljava/util/Optional;
+HSPLandroid/sysprop/TelephonyProperties;->lambda$operator_numeric$2(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/sysprop/TelephonyProperties;->multi_sim_config()Ljava/util/Optional;
 HSPLandroid/sysprop/TelephonyProperties;->operator_alpha()Ljava/util/List;
-HSPLandroid/sysprop/TelephonyProperties;->operator_alpha(Ljava/util/List;)V
 HSPLandroid/sysprop/TelephonyProperties;->operator_is_roaming()Ljava/util/List;
-HSPLandroid/sysprop/TelephonyProperties;->operator_is_roaming(Ljava/util/List;)V
-HSPLandroid/sysprop/TelephonyProperties;->operator_iso_country()Ljava/util/List;
-HSPLandroid/sysprop/TelephonyProperties;->operator_iso_country(Ljava/util/List;)V
 HSPLandroid/sysprop/TelephonyProperties;->operator_numeric()Ljava/util/List;
-HSPLandroid/sysprop/TelephonyProperties;->operator_numeric(Ljava/util/List;)V
-HSPLandroid/sysprop/TelephonyProperties;->otasp_num_schema()Ljava/util/List;
-HSPLandroid/sysprop/TelephonyProperties;->reset_on_radio_tech_change()Ljava/util/Optional;
-HSPLandroid/sysprop/TelephonyProperties;->ril_sends_multiple_call_ring()Ljava/util/Optional;
-HSPLandroid/sysprop/TelephonyProperties;->sim_state()Ljava/util/List;
-HSPLandroid/sysprop/TelephonyProperties;->sim_state(Ljava/util/List;)V
-HSPLandroid/sysprop/TelephonyProperties;->sms_receive()Ljava/util/List;
-HSPLandroid/sysprop/TelephonyProperties;->sms_send()Ljava/util/List;
 HSPLandroid/sysprop/TelephonyProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
 HSPLandroid/sysprop/TelephonyProperties;->tryParseInteger(Ljava/lang/String;)Ljava/lang/Integer;
 HSPLandroid/sysprop/TelephonyProperties;->tryParseList(Ljava/util/function/Function;Ljava/lang/String;)Ljava/util/List;
 HSPLandroid/sysprop/TelephonyProperties;->tryParseString(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/sysprop/TelephonyProperties;->wake_lock_timeout()Ljava/util/Optional;
-HSPLandroid/sysprop/VoldProperties;->decrypt()Ljava/util/Optional;
-HSPLandroid/sysprop/VoldProperties;->encrypt_progress()Ljava/util/Optional;
-HSPLandroid/sysprop/VoldProperties;->tryParseString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/sysprop/VndkProperties;->product_vndk_version()Ljava/util/Optional;
+HSPLandroid/sysprop/VndkProperties;->tryParseString(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/system/ErrnoException;-><init>(Ljava/lang/String;I)V
 HSPLandroid/system/ErrnoException;->getMessage()Ljava/lang/String;
-HSPLandroid/system/ErrnoException;->rethrowAsIOException()Ljava/io/IOException;
-HPLandroid/system/ErrnoException;->rethrowAsSocketException()Ljava/net/SocketException;
 HSPLandroid/system/GaiException;-><init>(Ljava/lang/String;I)V
-HSPLandroid/system/GaiException;-><init>(Ljava/lang/String;ILjava/lang/Throwable;)V
-HSPLandroid/system/GaiException;->getMessage()Ljava/lang/String;
 HSPLandroid/system/GaiException;->rethrowAsUnknownHostException(Ljava/lang/String;)Ljava/net/UnknownHostException;
 HSPLandroid/system/Int32Ref;-><init>(I)V
-HPLandroid/system/NetlinkSocketAddress;-><init>(II)V
 HSPLandroid/system/Os;->accept(Ljava/io/FileDescriptor;Ljava/net/InetSocketAddress;)Ljava/io/FileDescriptor;
 HSPLandroid/system/Os;->accept(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)Ljava/io/FileDescriptor;
-HSPLandroid/system/Os;->access(Ljava/lang/String;I)Z
-HPLandroid/system/Os;->bind(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
-HSPLandroid/system/Os;->bind(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V
 HSPLandroid/system/Os;->capget(Landroid/system/StructCapUserHeader;)[Landroid/system/StructCapUserData;
 HSPLandroid/system/Os;->chmod(Ljava/lang/String;I)V
-HSPLandroid/system/Os;->chown(Ljava/lang/String;II)V
 HSPLandroid/system/Os;->close(Ljava/io/FileDescriptor;)V
-HPLandroid/system/Os;->connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
-HPLandroid/system/Os;->connect(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V
-HSPLandroid/system/Os;->fchmod(Ljava/io/FileDescriptor;I)V
-HSPLandroid/system/Os;->fchown(Ljava/io/FileDescriptor;II)V
 HSPLandroid/system/Os;->fcntlInt(Ljava/io/FileDescriptor;II)I
 HSPLandroid/system/Os;->fdatasync(Ljava/io/FileDescriptor;)V
 HSPLandroid/system/Os;->fstat(Ljava/io/FileDescriptor;)Landroid/system/StructStat;
-HPLandroid/system/Os;->fsync(Ljava/io/FileDescriptor;)V
-HSPLandroid/system/Os;->ftruncate(Ljava/io/FileDescriptor;J)V
-HSPLandroid/system/Os;->getenv(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/system/Os;->getpeername(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;
 HSPLandroid/system/Os;->getpgid(I)I
 HSPLandroid/system/Os;->getpid()I
-HSPLandroid/system/Os;->getrlimit(I)Landroid/system/StructRlimit;
-HPLandroid/system/Os;->getsockname(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;
 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;ILandroid/system/Int32Ref;)I
-HPLandroid/system/Os;->kill(II)V
 HSPLandroid/system/Os;->listen(Ljava/io/FileDescriptor;I)V
-HSPLandroid/system/Os;->lseek(Ljava/io/FileDescriptor;JI)J
-HSPLandroid/system/Os;->lstat(Ljava/lang/String;)Landroid/system/StructStat;
 HSPLandroid/system/Os;->mkdir(Ljava/lang/String;I)V
-HSPLandroid/system/Os;->mlock(JJ)V
-HSPLandroid/system/Os;->mmap(JJIILjava/io/FileDescriptor;J)J
-HSPLandroid/system/Os;->munmap(JJ)V
 HSPLandroid/system/Os;->open(Ljava/lang/String;II)Ljava/io/FileDescriptor;
 HSPLandroid/system/Os;->pipe2(I)[Ljava/io/FileDescriptor;
 HSPLandroid/system/Os;->poll([Landroid/system/StructPollfd;I)I
-HSPLandroid/system/Os;->posix_fallocate(Ljava/io/FileDescriptor;JJ)V
-HSPLandroid/system/Os;->prctl(IJJJJ)I
-HPLandroid/system/Os;->read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
 HSPLandroid/system/Os;->read(Ljava/io/FileDescriptor;[BII)I
-HSPLandroid/system/Os;->readlink(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/system/Os;->rename(Ljava/lang/String;Ljava/lang/String;)V
-HPLandroid/system/Os;->sendto(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;ILjava/net/InetAddress;I)I
-HPLandroid/system/Os;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/SocketAddress;)I
 HSPLandroid/system/Os;->setpgid(II)V
 HSPLandroid/system/Os;->setregid(II)V
 HSPLandroid/system/Os;->setreuid(II)V
-HPLandroid/system/Os;->setsockoptIfreq(Ljava/io/FileDescriptor;IILjava/lang/String;)V
-PLandroid/system/Os;->setsockoptInt(Ljava/io/FileDescriptor;III)V
 HSPLandroid/system/Os;->setsockoptTimeval(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V
 HSPLandroid/system/Os;->socket(III)Ljava/io/FileDescriptor;
-HSPLandroid/system/Os;->socketpair(IIILjava/io/FileDescriptor;Ljava/io/FileDescriptor;)V
 HSPLandroid/system/Os;->stat(Ljava/lang/String;)Landroid/system/StructStat;
 HSPLandroid/system/Os;->statvfs(Ljava/lang/String;)Landroid/system/StructStatVfs;
-PLandroid/system/Os;->strsignal(I)Ljava/lang/String;
-HSPLandroid/system/Os;->symlink(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/system/Os;->sysconf(I)J
-HSPLandroid/system/Os;->umask(I)I
-HSPLandroid/system/Os;->uname()Landroid/system/StructUtsname;
-HPLandroid/system/Os;->write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
 HSPLandroid/system/Os;->write(Ljava/io/FileDescriptor;[BII)I
 HSPLandroid/system/OsConstants;->S_ISDIR(I)Z
-HSPLandroid/system/OsConstants;->S_ISLNK(I)Z
 HSPLandroid/system/OsConstants;->S_ISREG(I)Z
-HSPLandroid/system/OsConstants;->errnoName(I)Ljava/lang/String;
-HSPLandroid/system/OsConstants;->gaiName(I)Ljava/lang/String;
-HPLandroid/system/PacketSocketAddress;-><init>(II[B)V
 HSPLandroid/system/StructAddrinfo;-><init>()V
 HSPLandroid/system/StructCapUserData;-><init>(III)V
 HSPLandroid/system/StructCapUserHeader;-><init>(II)V
-HSPLandroid/system/StructGroupReq;-><init>(ILjava/net/InetAddress;)V
 HSPLandroid/system/StructIfaddrs;-><init>(Ljava/lang/String;ILjava/net/InetAddress;Ljava/net/InetAddress;Ljava/net/InetAddress;[B)V
 HSPLandroid/system/StructLinger;-><init>(II)V
 HSPLandroid/system/StructLinger;->isOn()Z
 HSPLandroid/system/StructPollfd;-><init>()V
-HSPLandroid/system/StructRlimit;-><init>(JJ)V
 HSPLandroid/system/StructStat;-><init>(JJIJIIJJLandroid/system/StructTimespec;Landroid/system/StructTimespec;Landroid/system/StructTimespec;JJ)V
 HSPLandroid/system/StructStatVfs;-><init>(JJJJJJJJJJJ)V
 HSPLandroid/system/StructTimespec;-><init>(JJ)V
 HSPLandroid/system/StructTimespec;->equals(Ljava/lang/Object;)Z
 HSPLandroid/system/StructTimeval;-><init>(JJ)V
 HSPLandroid/system/StructTimeval;->fromMillis(J)Landroid/system/StructTimeval;
-HSPLandroid/system/StructUtsname;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/system/UnixSocketAddress;-><init>([B)V
-HSPLandroid/system/UnixSocketAddress;->createFileSystem(Ljava/lang/String;)Landroid/system/UnixSocketAddress;
-HSPLandroid/system/suspend/ISuspendControlService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/system/suspend/ISuspendControlService$Stub$Proxy;->getWakeLockStats()[Landroid/system/suspend/WakeLockInfo;
-HSPLandroid/system/suspend/ISuspendControlService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/system/suspend/ISuspendControlService;
-HSPLandroid/system/suspend/WakeLockInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/system/suspend/WakeLockInfo;
-HSPLandroid/system/suspend/WakeLockInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/system/suspend/WakeLockInfo$1;->newArray(I)[Landroid/system/suspend/WakeLockInfo;
-HSPLandroid/system/suspend/WakeLockInfo$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/system/suspend/WakeLockInfo;-><init>()V
-HSPLandroid/system/suspend/WakeLockInfo;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/telecom/-$$Lambda$qa4s1Fm2YuohEunaJUJcmJXDXG0;->getSessionId()Ljava/lang/String;
-PLandroid/telecom/CallAudioState;-><init>(ZIILandroid/bluetooth/BluetoothDevice;Ljava/util/Collection;)V
-PLandroid/telecom/CallAudioState;->getRoute()I
-PLandroid/telecom/CallAudioState;->getSupportedRouteMask()I
-PLandroid/telecom/CallAudioState;->isMuted()Z
-HPLandroid/telecom/DefaultDialerManager;->getDefaultDialerApplication(Landroid/content/Context;)Ljava/lang/String;
-HPLandroid/telecom/DefaultDialerManager;->getDefaultDialerApplication(Landroid/content/Context;I)Ljava/lang/String;
-PLandroid/telecom/Log;->addEvent(Landroid/telecom/Logging/EventManager$Loggable;Ljava/lang/String;Ljava/lang/Object;)V
-PLandroid/telecom/Log;->addRequestResponsePair(Landroid/telecom/Logging/EventManager$TimedEventPair;)V
-PLandroid/telecom/Log;->buildMessage(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
-PLandroid/telecom/Log;->continueSession(Landroid/telecom/Logging/Session;Ljava/lang/String;)V
-PLandroid/telecom/Log;->createSubsession()Landroid/telecom/Logging/Session;
-PLandroid/telecom/Log;->d(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)V
-PLandroid/telecom/Log;->d(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
-PLandroid/telecom/Log;->dumpEvents(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLandroid/telecom/Log;->endSession()V
-PLandroid/telecom/Log;->getDialableCount(Ljava/lang/String;)I
-PLandroid/telecom/Log;->getEventManager()Landroid/telecom/Logging/EventManager;
-PLandroid/telecom/Log;->getPrefixFromObject(Ljava/lang/Object;)Ljava/lang/String;
-PLandroid/telecom/Log;->getSessionId()Ljava/lang/String;
-HPLandroid/telecom/Log;->getSessionManager()Landroid/telecom/Logging/SessionManager;
-PLandroid/telecom/Log;->i(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)V
-PLandroid/telecom/Log;->i(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
-PLandroid/telecom/Log;->isLoggable(I)Z
-PLandroid/telecom/Log;->obfuscatePhoneNumber(Ljava/lang/StringBuilder;Ljava/lang/String;)V
-HSPLandroid/telecom/Log;->pii(Ljava/lang/Object;)Ljava/lang/String;
-PLandroid/telecom/Log;->piiHandle(Ljava/lang/Object;)Ljava/lang/String;
-PLandroid/telecom/Log;->registerEventListener(Landroid/telecom/Logging/EventManager$EventListener;)V
-PLandroid/telecom/Log;->registerSessionListener(Landroid/telecom/Logging/SessionManager$ISessionListener;)V
-PLandroid/telecom/Log;->setSessionContext(Landroid/content/Context;)V
-PLandroid/telecom/Log;->setTag(Ljava/lang/String;)V
-PLandroid/telecom/Log;->startSession(Ljava/lang/String;)V
-PLandroid/telecom/Log;->v(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)V
-PLandroid/telecom/Log;->v(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
-HPLandroid/telecom/Logging/-$$Lambda$L5F_SL2jOCUETYvgdB36aGwY50E;->get()I
-PLandroid/telecom/Logging/-$$Lambda$SessionManager$VyH2gT1EjIvzDy_C9JfTT60CISM;-><init>(Landroid/telecom/Logging/SessionManager;)V
-PLandroid/telecom/Logging/-$$Lambda$SessionManager$VyH2gT1EjIvzDy_C9JfTT60CISM;->run()V
-PLandroid/telecom/Logging/-$$Lambda$SessionManager$hhtZwTEbvO-fLNlAvB6Do9_2gW4;-><init>(Landroid/telecom/Logging/SessionManager;)V
-PLandroid/telecom/Logging/-$$Lambda$SessionManager$hhtZwTEbvO-fLNlAvB6Do9_2gW4;->get()J
-PLandroid/telecom/Logging/EventManager$TimedEventPair;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/telecom/Logging/EventManager$TimedEventPair;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
-PLandroid/telecom/Logging/EventManager;-><clinit>()V
-PLandroid/telecom/Logging/EventManager;-><init>(Landroid/telecom/Logging/SessionManager$ISessionIdQueryHandler;)V
-PLandroid/telecom/Logging/EventManager;->addRequestResponsePair(Landroid/telecom/Logging/EventManager$TimedEventPair;)V
-PLandroid/telecom/Logging/EventManager;->dumpEvents(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLandroid/telecom/Logging/EventManager;->event(Landroid/telecom/Logging/EventManager$Loggable;Ljava/lang/String;Ljava/lang/Object;)V
-PLandroid/telecom/Logging/EventManager;->registerEventListener(Landroid/telecom/Logging/EventManager$EventListener;)V
-PLandroid/telecom/Logging/Session;-><init>(Ljava/lang/String;Ljava/lang/String;JZLjava/lang/String;)V
-PLandroid/telecom/Logging/Session;->addChild(Landroid/telecom/Logging/Session;)V
-PLandroid/telecom/Logging/Session;->equals(Ljava/lang/Object;)Z
-PLandroid/telecom/Logging/Session;->getChildSessions()Ljava/util/ArrayList;
-PLandroid/telecom/Logging/Session;->getExecutionStartTimeMilliseconds()J
-HPLandroid/telecom/Logging/Session;->getFullMethodPath(Ljava/lang/StringBuilder;ZI)V
-PLandroid/telecom/Logging/Session;->getFullMethodPath(Z)Ljava/lang/String;
-PLandroid/telecom/Logging/Session;->getFullSessionId()Ljava/lang/String;
-HPLandroid/telecom/Logging/Session;->getFullSessionId(I)Ljava/lang/String;
-PLandroid/telecom/Logging/Session;->getLocalExecutionTime()J
-PLandroid/telecom/Logging/Session;->getNextChildId()Ljava/lang/String;
-HPLandroid/telecom/Logging/Session;->getParentSession()Landroid/telecom/Logging/Session;
-PLandroid/telecom/Logging/Session;->getShortMethodName()Ljava/lang/String;
-PLandroid/telecom/Logging/Session;->isExternal()Z
-PLandroid/telecom/Logging/Session;->isSessionCompleted()Z
-PLandroid/telecom/Logging/Session;->isStartedFromActiveSession()Z
-PLandroid/telecom/Logging/Session;->markSessionCompleted(J)V
-PLandroid/telecom/Logging/Session;->removeChild(Landroid/telecom/Logging/Session;)V
-PLandroid/telecom/Logging/Session;->setExecutionStartTimeMs(J)V
-PLandroid/telecom/Logging/Session;->setParentSession(Landroid/telecom/Logging/Session;)V
-PLandroid/telecom/Logging/Session;->setSessionId(Ljava/lang/String;)V
-PLandroid/telecom/Logging/Session;->setShortMethodName(Ljava/lang/String;)V
-PLandroid/telecom/Logging/Session;->toString()Ljava/lang/String;
-PLandroid/telecom/Logging/SessionManager;-><init>()V
-PLandroid/telecom/Logging/SessionManager;->cleanupStaleSessions(J)V
-PLandroid/telecom/Logging/SessionManager;->continueSession(Landroid/telecom/Logging/Session;Ljava/lang/String;)V
-PLandroid/telecom/Logging/SessionManager;->createSubsession()Landroid/telecom/Logging/Session;
-PLandroid/telecom/Logging/SessionManager;->createSubsession(Z)Landroid/telecom/Logging/Session;
-HPLandroid/telecom/Logging/SessionManager;->endParentSessions(Landroid/telecom/Logging/Session;)V
-PLandroid/telecom/Logging/SessionManager;->endSession()V
-HPLandroid/telecom/Logging/SessionManager;->getBase64Encoding(I)Ljava/lang/String;
-PLandroid/telecom/Logging/SessionManager;->getCallingThreadId()I
-PLandroid/telecom/Logging/SessionManager;->getCleanupTimeout(Landroid/content/Context;)J
-PLandroid/telecom/Logging/SessionManager;->getNextSessionID()Ljava/lang/String;
-PLandroid/telecom/Logging/SessionManager;->getSessionCleanupTimeoutMs()J
-PLandroid/telecom/Logging/SessionManager;->getSessionId()Ljava/lang/String;
-PLandroid/telecom/Logging/SessionManager;->lambda$new$0$SessionManager()V
-PLandroid/telecom/Logging/SessionManager;->lambda$new$1$SessionManager()J
-PLandroid/telecom/Logging/SessionManager;->notifySessionCompleteListeners(Ljava/lang/String;J)V
-PLandroid/telecom/Logging/SessionManager;->registerSessionListener(Landroid/telecom/Logging/SessionManager$ISessionListener;)V
-PLandroid/telecom/Logging/SessionManager;->resetStaleSessionTimer()V
-PLandroid/telecom/Logging/SessionManager;->setContext(Landroid/content/Context;)V
-PLandroid/telecom/Logging/SessionManager;->startSession(Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/telecom/PhoneAccount$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telecom/PhoneAccount;
-PLandroid/telecom/PhoneAccount$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/telecom/PhoneAccount$Builder;-><init>(Landroid/telecom/PhoneAccount;)V
-HSPLandroid/telecom/PhoneAccount$Builder;-><init>(Landroid/telecom/PhoneAccountHandle;Ljava/lang/CharSequence;)V
-HSPLandroid/telecom/PhoneAccount$Builder;->addSupportedUriScheme(Ljava/lang/String;)Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount$Builder;->build()Landroid/telecom/PhoneAccount;
-HSPLandroid/telecom/PhoneAccount$Builder;->setAddress(Landroid/net/Uri;)Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount$Builder;->setCapabilities(I)Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount$Builder;->setExtras(Landroid/os/Bundle;)Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount$Builder;->setGroupId(Ljava/lang/String;)Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount$Builder;->setHighlightColor(I)Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount$Builder;->setIcon(Landroid/graphics/drawable/Icon;)Landroid/telecom/PhoneAccount$Builder;
-PLandroid/telecom/PhoneAccount$Builder;->setIsEnabled(Z)Landroid/telecom/PhoneAccount$Builder;
-PLandroid/telecom/PhoneAccount$Builder;->setLabel(Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount$Builder;->setShortDescription(Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount$Builder;->setSubscriptionAddress(Landroid/net/Uri;)Landroid/telecom/PhoneAccount$Builder;
-PLandroid/telecom/PhoneAccount$Builder;->setSupportedAudioRoutes(I)Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount$Builder;->setSupportedUriSchemes(Ljava/util/List;)Landroid/telecom/PhoneAccount$Builder;
-PLandroid/telecom/PhoneAccount;-><init>(Landroid/os/Parcel;)V
-PLandroid/telecom/PhoneAccount;-><init>(Landroid/os/Parcel;Landroid/telecom/PhoneAccount$1;)V
-HSPLandroid/telecom/PhoneAccount;-><init>(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;Landroid/net/Uri;ILandroid/graphics/drawable/Icon;ILjava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/util/List;Landroid/os/Bundle;IZLjava/lang/String;)V
-HSPLandroid/telecom/PhoneAccount;-><init>(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;Landroid/net/Uri;ILandroid/graphics/drawable/Icon;ILjava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/util/List;Landroid/os/Bundle;IZLjava/lang/String;Landroid/telecom/PhoneAccount$1;)V
-HSPLandroid/telecom/PhoneAccount;->audioRoutesToString()Ljava/lang/String;
-HSPLandroid/telecom/PhoneAccount;->builder(Landroid/telecom/PhoneAccountHandle;Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount;->capabilitiesToString()Ljava/lang/String;
-PLandroid/telecom/PhoneAccount;->equals(Ljava/lang/Object;)Z
-PLandroid/telecom/PhoneAccount;->getAccountHandle()Landroid/telecom/PhoneAccountHandle;
-PLandroid/telecom/PhoneAccount;->getAddress()Landroid/net/Uri;
-PLandroid/telecom/PhoneAccount;->getCapabilities()I
-PLandroid/telecom/PhoneAccount;->getExtras()Landroid/os/Bundle;
-PLandroid/telecom/PhoneAccount;->getGroupId()Ljava/lang/String;
-PLandroid/telecom/PhoneAccount;->getHighlightColor()I
-PLandroid/telecom/PhoneAccount;->getIcon()Landroid/graphics/drawable/Icon;
-PLandroid/telecom/PhoneAccount;->getLabel()Ljava/lang/CharSequence;
-PLandroid/telecom/PhoneAccount;->getShortDescription()Ljava/lang/CharSequence;
-PLandroid/telecom/PhoneAccount;->getSubscriptionAddress()Landroid/net/Uri;
-PLandroid/telecom/PhoneAccount;->getSupportedAudioRoutes()I
-PLandroid/telecom/PhoneAccount;->getSupportedUriSchemes()Ljava/util/List;
-HSPLandroid/telecom/PhoneAccount;->hasAudioRoutes(I)Z
-HSPLandroid/telecom/PhoneAccount;->hasCapabilities(I)Z
-PLandroid/telecom/PhoneAccount;->isEnabled()Z
-PLandroid/telecom/PhoneAccount;->setIsEnabled(Z)V
-PLandroid/telecom/PhoneAccount;->supportsUriScheme(Ljava/lang/String;)Z
-PLandroid/telecom/PhoneAccount;->toBuilder()Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount;->toString()Ljava/lang/String;
-HSPLandroid/telecom/PhoneAccount;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telecom/PhoneAccountHandle$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telecom/PhoneAccountHandle;
 HSPLandroid/telecom/PhoneAccountHandle$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/telecom/PhoneAccountHandle;-><init>(Landroid/content/ComponentName;Ljava/lang/String;)V
@@ -20930,1191 +10370,286 @@
 HSPLandroid/telecom/PhoneAccountHandle;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telecom/PhoneAccountHandle;->getComponentName()Landroid/content/ComponentName;
 HSPLandroid/telecom/PhoneAccountHandle;->getId()Ljava/lang/String;
-HSPLandroid/telecom/PhoneAccountHandle;->getUserHandle()Landroid/os/UserHandle;
-HSPLandroid/telecom/PhoneAccountHandle;->toString()Ljava/lang/String;
 HSPLandroid/telecom/PhoneAccountHandle;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telecom/TelecomManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/telecom/TelecomManager;-><init>(Landroid/content/Context;Lcom/android/internal/telecom/ITelecomService;)V
-HSPLandroid/telecom/TelecomManager;->getCallCapablePhoneAccounts()Ljava/util/List;
-HSPLandroid/telecom/TelecomManager;->getCallCapablePhoneAccounts(Z)Ljava/util/List;
 HSPLandroid/telecom/TelecomManager;->getCallState()I
-HSPLandroid/telecom/TelecomManager;->getCurrentTtyMode()I
 HSPLandroid/telecom/TelecomManager;->getDefaultDialerPackage()Ljava/lang/String;
-PLandroid/telecom/TelecomManager;->getDefaultPhoneApp()Landroid/content/ComponentName;
-HPLandroid/telecom/TelecomManager;->getPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/telecom/PhoneAccount;
-HPLandroid/telecom/TelecomManager;->getPhoneAccountsSupportingScheme(Ljava/lang/String;)Ljava/util/List;
-PLandroid/telecom/TelecomManager;->getSimCallManager()Landroid/telecom/PhoneAccountHandle;
-PLandroid/telecom/TelecomManager;->getSimCallManager(I)Landroid/telecom/PhoneAccountHandle;
-HSPLandroid/telecom/TelecomManager;->getSystemDialerPackage()Ljava/lang/String;
 HSPLandroid/telecom/TelecomManager;->getTelecomService()Lcom/android/internal/telecom/ITelecomService;
-HSPLandroid/telecom/TelecomManager;->getUserSelectedOutgoingPhoneAccount()Landroid/telecom/PhoneAccountHandle;
-HSPLandroid/telecom/TelecomManager;->isInCall()Z
-HPLandroid/telecom/TelecomManager;->isInEmergencyCall()Z
-PLandroid/telecom/TelecomManager;->isRinging()Z
 HSPLandroid/telecom/TelecomManager;->isServiceConnected()Z
-HSPLandroid/telecom/TelecomManager;->registerPhoneAccount(Landroid/telecom/PhoneAccount;)V
-PLandroid/telecom/TimedEvent;->averageTimings(Ljava/util/Collection;)Ljava/util/Map;
 HSPLandroid/telephony/-$$Lambda$NetworkRegistrationInfo$1JuZmO5PoYGZY8bHhZYwvmqwOB0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$6czWSGzxct0CXPVO54T0aq05qls;-><init>(Landroid/telephony/PhoneStateListener;ILjava/lang/String;)V
+HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$6czWSGzxct0CXPVO54T0aq05qls;->run()V
 HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$MtX5gtAKHxLcUp_ibya6VO1zuoE;-><init>(Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;Landroid/telephony/PhoneStateListener;I)V
 HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$MtX5gtAKHxLcUp_ibya6VO1zuoE;->runOrThrow()V
 HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$Rh4FuYaAZPAbrOYr6GGF6llSePE;-><init>(Landroid/telephony/PhoneStateListener;I)V
 HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$Rh4FuYaAZPAbrOYr6GGF6llSePE;->run()V
+HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$j6NpsS_PE3VHutxIDEmwFHop7Yc;-><init>(Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;Landroid/telephony/PhoneStateListener;Landroid/telephony/SignalStrength;)V
+HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$j6NpsS_PE3VHutxIDEmwFHop7Yc;->runOrThrow()V
+HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$lP7_Xy6P82nXGbUQ_ZUY6rZR4bI;-><init>(Landroid/telephony/PhoneStateListener;Landroid/telephony/SignalStrength;)V
+HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$lP7_Xy6P82nXGbUQ_ZUY6rZR4bI;->run()V
+HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$nrGqSRBJrc3_EwotCDNwfKeizIo;-><init>(Landroid/telephony/PhoneStateListener;Landroid/telephony/ServiceState;)V
+HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$nrGqSRBJrc3_EwotCDNwfKeizIo;->run()V
+HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$oDAZqs8paeefe_3k_uRKV5plQW4;-><init>(Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;Landroid/telephony/PhoneStateListener;ILjava/lang/String;)V
+HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$oDAZqs8paeefe_3k_uRKV5plQW4;->runOrThrow()V
+HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$uC5syhzl229gIpaK7Jfs__OCJxQ;-><init>(Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;Landroid/telephony/PhoneStateListener;Landroid/telephony/ServiceState;)V
+HSPLandroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$uC5syhzl229gIpaK7Jfs__OCJxQ;->runOrThrow()V
 HSPLandroid/telephony/-$$Lambda$SubscriptionManager$R_uORt9bKcmEo6JnjiGP2KgjIOQ;-><init>(Landroid/telephony/SubscriptionManager;)V
+HSPLandroid/telephony/-$$Lambda$SubscriptionManager$R_uORt9bKcmEo6JnjiGP2KgjIOQ;->test(Ljava/lang/Object;)Z
 HSPLandroid/telephony/-$$Lambda$TelephonyFrameworkInitializer$3Kis6wL1IbLustWe9A2o4-2YpGo;->createService(Landroid/content/Context;)Ljava/lang/Object;
 HSPLandroid/telephony/-$$Lambda$TelephonyFrameworkInitializer$b_92_3ZijRrdEa9yLyFA5xu19OM;->createService(Landroid/content/Context;)Ljava/lang/Object;
-HSPLandroid/telephony/-$$Lambda$TelephonyFrameworkInitializer$mpe0Kh92VEQmEtmo60oqykdvnBE;->createService(Landroid/content/Context;)Ljava/lang/Object;
 HSPLandroid/telephony/-$$Lambda$TelephonyFrameworkInitializer$sQClc4rjc9ydh0nXpY79gr33av4;->createService(Landroid/content/Context;)Ljava/lang/Object;
-HPLandroid/telephony/-$$Lambda$TelephonyManager$2$l6Pazxfi7QghMr2Z0MpduhNe6yc;-><init>(Landroid/telephony/TelephonyManager$CellInfoCallback;Ljava/util/List;)V
-PLandroid/telephony/-$$Lambda$TelephonyManager$2$l6Pazxfi7QghMr2Z0MpduhNe6yc;->run()V
 HSPLandroid/telephony/-$$Lambda$TelephonyRegistryManager$1$cLzLZB4oGnI-HG_-4MhxcXoHys8;-><init>(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V
 HSPLandroid/telephony/-$$Lambda$TelephonyRegistryManager$1$cLzLZB4oGnI-HG_-4MhxcXoHys8;->run()V
 HSPLandroid/telephony/AccessNetworkConstants;->transportTypeToString(I)Ljava/lang/String;
-HPLandroid/telephony/AnomalyReporter;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-HSPLandroid/telephony/AnomalyReporter;->initialize(Landroid/content/Context;)V
-HSPLandroid/telephony/CallAttributes;-><init>(Landroid/telephony/PreciseCallState;ILandroid/telephony/CallQuality;)V
-PLandroid/telephony/CallAttributes;->toString()Ljava/lang/String;
-HSPLandroid/telephony/CallQuality;-><init>(IIIIIIIIIII)V
-PLandroid/telephony/CallQuality;->toString()Ljava/lang/String;
+HSPLandroid/telephony/AccessNetworkUtils;->getOperatingBandForEarfcn(I)I
 HSPLandroid/telephony/CarrierConfigManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/telephony/CarrierConfigManager;->getConfig()Landroid/os/PersistableBundle;
-HPLandroid/telephony/CarrierConfigManager;->getConfigByComponentForSubId(Ljava/lang/String;I)Landroid/os/PersistableBundle;
 HSPLandroid/telephony/CarrierConfigManager;->getConfigForSubId(I)Landroid/os/PersistableBundle;
-PLandroid/telephony/CarrierConfigManager;->getDefaultCarrierServicePackageName()Ljava/lang/String;
-HSPLandroid/telephony/CarrierConfigManager;->getDefaultConfig()Landroid/os/PersistableBundle;
 HSPLandroid/telephony/CarrierConfigManager;->getICarrierConfigLoader()Lcom/android/internal/telephony/ICarrierConfigLoader;
-HSPLandroid/telephony/CarrierConfigManager;->updateConfigForPhoneId(ILjava/lang/String;)V
-HPLandroid/telephony/CarrierRestrictionRules;-><init>()V
-HPLandroid/telephony/CarrierRestrictionRules;-><init>(Landroid/telephony/CarrierRestrictionRules$1;)V
-HPLandroid/telephony/CarrierRestrictionRules;->access$202(Landroid/telephony/CarrierRestrictionRules;Ljava/util/List;)Ljava/util/List;
-HPLandroid/telephony/CarrierRestrictionRules;->access$302(Landroid/telephony/CarrierRestrictionRules;Ljava/util/List;)Ljava/util/List;
-HPLandroid/telephony/CarrierRestrictionRules;->access$402(Landroid/telephony/CarrierRestrictionRules;I)I
-HPLandroid/telephony/CarrierRestrictionRules;->access$502(Landroid/telephony/CarrierRestrictionRules;I)I
-HPLandroid/telephony/CarrierRestrictionRules;->newBuilder()Landroid/telephony/CarrierRestrictionRules$Builder;
-HPLandroid/telephony/CarrierRestrictionRules;->toString()Ljava/lang/String;
-HPLandroid/telephony/CarrierRestrictionRules;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/telephony/CellConfigLte$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellConfigLte;
-PLandroid/telephony/CellConfigLte$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/telephony/CellConfigLte;-><init>(Landroid/hardware/radio/V1_4/CellConfigLte;)V
-PLandroid/telephony/CellConfigLte;-><init>(Landroid/os/Parcel;)V
-PLandroid/telephony/CellConfigLte;-><init>(Landroid/os/Parcel;Landroid/telephony/CellConfigLte$1;)V
-HPLandroid/telephony/CellConfigLte;->toString()Ljava/lang/String;
-HPLandroid/telephony/CellConfigLte;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellIdentity$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellIdentity;
 HSPLandroid/telephony/CellIdentity$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/telephony/CellIdentity;-><init>(Ljava/lang/String;ILandroid/os/Parcel;)V
 HSPLandroid/telephony/CellIdentity;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HPLandroid/telephony/CellIdentity;->equals(Ljava/lang/Object;)Z
-HSPLandroid/telephony/CellIdentity;->getOperatorAlphaLong()Ljava/lang/CharSequence;
-HSPLandroid/telephony/CellIdentity;->getOperatorAlphaShort()Ljava/lang/CharSequence;
-HSPLandroid/telephony/CellIdentity;->getType()I
-HSPLandroid/telephony/CellIdentity;->inRangeOrUnavailable(III)I
 HSPLandroid/telephony/CellIdentity;->isMcc(Ljava/lang/String;)Z
 HSPLandroid/telephony/CellIdentity;->isMnc(Ljava/lang/String;)Z
-HSPLandroid/telephony/CellIdentity;->setOperatorAlphaLong(Ljava/lang/String;)V
-HSPLandroid/telephony/CellIdentity;->setOperatorAlphaShort(Ljava/lang/String;)V
 HSPLandroid/telephony/CellIdentity;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/telephony/CellIdentityGsm$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellIdentityGsm;
-PLandroid/telephony/CellIdentityGsm$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/telephony/CellIdentityGsm;-><init>(IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HPLandroid/telephony/CellIdentityGsm;-><init>(Landroid/hardware/radio/V1_2/CellIdentityGsm;)V
-PLandroid/telephony/CellIdentityGsm;-><init>(Landroid/os/Parcel;)V
-HPLandroid/telephony/CellIdentityGsm;->asCellLocation()Landroid/telephony/CellLocation;
-HPLandroid/telephony/CellIdentityGsm;->asCellLocation()Landroid/telephony/gsm/GsmCellLocation;
-PLandroid/telephony/CellIdentityGsm;->createFromParcelBody(Landroid/os/Parcel;)Landroid/telephony/CellIdentityGsm;
-HPLandroid/telephony/CellIdentityGsm;->equals(Ljava/lang/Object;)Z
-HPLandroid/telephony/CellIdentityGsm;->getChannelNumber()I
-HPLandroid/telephony/CellIdentityGsm;->getCid()I
-HPLandroid/telephony/CellIdentityGsm;->getMccString()Ljava/lang/String;
-HPLandroid/telephony/CellIdentityGsm;->getMncString()Ljava/lang/String;
-HPLandroid/telephony/CellIdentityGsm;->toString()Ljava/lang/String;
-PLandroid/telephony/CellIdentityGsm;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/telephony/CellIdentityLte$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellIdentityLte;
-PLandroid/telephony/CellIdentityLte$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/telephony/CellIdentityLte;-><init>(IIIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HPLandroid/telephony/CellIdentityLte;-><init>(Landroid/hardware/radio/V1_2/CellIdentityLte;)V
-PLandroid/telephony/CellIdentityLte;-><init>(Landroid/os/Parcel;)V
-HPLandroid/telephony/CellIdentityLte;->asCellLocation()Landroid/telephony/CellLocation;
-PLandroid/telephony/CellIdentityLte;->createFromParcelBody(Landroid/os/Parcel;)Landroid/telephony/CellIdentityLte;
-HPLandroid/telephony/CellIdentityLte;->equals(Ljava/lang/Object;)Z
-HPLandroid/telephony/CellIdentityLte;->getBandwidth()I
-HPLandroid/telephony/CellIdentityLte;->getChannelNumber()I
-PLandroid/telephony/CellIdentityLte;->getCi()I
-HPLandroid/telephony/CellIdentityLte;->getMcc()I
-HPLandroid/telephony/CellIdentityLte;->getMccString()Ljava/lang/String;
-HPLandroid/telephony/CellIdentityLte;->getMnc()I
-HPLandroid/telephony/CellIdentityLte;->getMncString()Ljava/lang/String;
-HPLandroid/telephony/CellIdentityLte;->getPci()I
-HPLandroid/telephony/CellIdentityLte;->getTac()I
-PLandroid/telephony/CellIdentityLte;->toString()Ljava/lang/String;
-PLandroid/telephony/CellIdentityLte;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/telephony/CellIdentityLte$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellIdentityLte;
+HSPLandroid/telephony/CellIdentityLte$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/telephony/CellIdentityLte;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellIdentityLte;->createFromParcelBody(Landroid/os/Parcel;)Landroid/telephony/CellIdentityLte;
+HSPLandroid/telephony/CellIdentityLte;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellIdentityWcdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellIdentityWcdma;
 HSPLandroid/telephony/CellIdentityWcdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellIdentityWcdma;-><init>(IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/telephony/CellIdentityWcdma;-><init>(Landroid/hardware/radio/V1_2/CellIdentityWcdma;)V
 HSPLandroid/telephony/CellIdentityWcdma;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/telephony/CellIdentityWcdma;->asCellLocation()Landroid/telephony/CellLocation;
-HSPLandroid/telephony/CellIdentityWcdma;->asCellLocation()Landroid/telephony/gsm/GsmCellLocation;
 HSPLandroid/telephony/CellIdentityWcdma;->createFromParcelBody(Landroid/os/Parcel;)Landroid/telephony/CellIdentityWcdma;
-HSPLandroid/telephony/CellIdentityWcdma;->equals(Ljava/lang/Object;)Z
-HSPLandroid/telephony/CellIdentityWcdma;->getChannelNumber()I
-HSPLandroid/telephony/CellIdentityWcdma;->getCid()I
-HSPLandroid/telephony/CellIdentityWcdma;->getMccString()Ljava/lang/String;
-HSPLandroid/telephony/CellIdentityWcdma;->getMncString()Ljava/lang/String;
-HSPLandroid/telephony/CellIdentityWcdma;->toString()Ljava/lang/String;
-HSPLandroid/telephony/CellIdentityWcdma;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/telephony/CellInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellInfo;
-PLandroid/telephony/CellInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellInfo;-><init>(Landroid/hardware/radio/V1_4/CellInfo;J)V
-PLandroid/telephony/CellInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/telephony/CellInfo;->create(Landroid/hardware/radio/V1_4/CellInfo;J)Landroid/telephony/CellInfo;
-HSPLandroid/telephony/CellInfo;->isRegistered()Z
-HSPLandroid/telephony/CellInfo;->toString()Ljava/lang/String;
-HSPLandroid/telephony/CellInfo;->writeToParcel(Landroid/os/Parcel;II)V
-HPLandroid/telephony/CellInfoGsm;-><init>(Landroid/hardware/radio/V1_4/CellInfo;J)V
-PLandroid/telephony/CellInfoGsm;-><init>(Landroid/os/Parcel;)V
-PLandroid/telephony/CellInfoGsm;->createFromParcelBody(Landroid/os/Parcel;)Landroid/telephony/CellInfoGsm;
-HPLandroid/telephony/CellInfoGsm;->getCellIdentity()Landroid/telephony/CellIdentity;
-HPLandroid/telephony/CellInfoGsm;->getCellIdentity()Landroid/telephony/CellIdentityGsm;
-HPLandroid/telephony/CellInfoGsm;->toString()Ljava/lang/String;
-HPLandroid/telephony/CellInfoGsm;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/telephony/CellInfoLte;-><init>(Landroid/hardware/radio/V1_4/CellInfo;J)V
-PLandroid/telephony/CellInfoLte;-><init>(Landroid/os/Parcel;)V
-HPLandroid/telephony/CellInfoLte;->getCellIdentity()Landroid/telephony/CellIdentity;
-HPLandroid/telephony/CellInfoLte;->getCellIdentity()Landroid/telephony/CellIdentityLte;
-HPLandroid/telephony/CellInfoLte;->getCellSignalStrength()Landroid/telephony/CellSignalStrengthLte;
-HPLandroid/telephony/CellInfoLte;->toString()Ljava/lang/String;
-HPLandroid/telephony/CellInfoLte;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/telephony/CellInfoWcdma;-><init>(Landroid/hardware/radio/V1_4/CellInfo;J)V
-PLandroid/telephony/CellInfoWcdma;-><init>(Landroid/os/Parcel;)V
-PLandroid/telephony/CellInfoWcdma;->createFromParcelBody(Landroid/os/Parcel;)Landroid/telephony/CellInfoWcdma;
-HPLandroid/telephony/CellInfoWcdma;->getCellIdentity()Landroid/telephony/CellIdentity;
-HSPLandroid/telephony/CellInfoWcdma;->getCellIdentity()Landroid/telephony/CellIdentityWcdma;
-HPLandroid/telephony/CellInfoWcdma;->getCellSignalStrength()Landroid/telephony/CellSignalStrengthWcdma;
-HSPLandroid/telephony/CellInfoWcdma;->toString()Ljava/lang/String;
-HSPLandroid/telephony/CellInfoWcdma;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/telephony/CellLocation;-><init>()V
-HSPLandroid/telephony/CellLocation;->getEmpty()Landroid/telephony/CellLocation;
+HSPLandroid/telephony/CellInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellInfo;
+HSPLandroid/telephony/CellInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/telephony/CellSignalStrength;-><init>()V
-HSPLandroid/telephony/CellSignalStrength;->getEcNoDbFromAsu(I)I
 HSPLandroid/telephony/CellSignalStrength;->getNumSignalStrengthLevels()I
-HSPLandroid/telephony/CellSignalStrength;->getRscpDbmFromAsu(I)I
-HSPLandroid/telephony/CellSignalStrength;->getRssiDbmFromAsu(I)I
-HSPLandroid/telephony/CellSignalStrength;->inRangeOrUnavailable(III)I
-HSPLandroid/telephony/CellSignalStrength;->inRangeOrUnavailable(IIII)I
-PLandroid/telephony/CellSignalStrengthCdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthCdma;
-PLandroid/telephony/CellSignalStrengthCdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthCdma;-><init>()V
-HSPLandroid/telephony/CellSignalStrengthCdma;-><init>(IIIII)V
-HSPLandroid/telephony/CellSignalStrengthCdma;-><init>(Landroid/hardware/radio/V1_0/CdmaSignalStrength;Landroid/hardware/radio/V1_0/EvdoSignalStrength;)V
-PLandroid/telephony/CellSignalStrengthCdma;-><init>(Landroid/os/Parcel;)V
-PLandroid/telephony/CellSignalStrengthCdma;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthCdma$1;)V
-PLandroid/telephony/CellSignalStrengthCdma;->describeContents()I
+HSPLandroid/telephony/CellSignalStrengthCdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthCdma;
+HSPLandroid/telephony/CellSignalStrengthCdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/telephony/CellSignalStrengthCdma;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthCdma;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthCdma$1;)V
 HSPLandroid/telephony/CellSignalStrengthCdma;->equals(Ljava/lang/Object;)Z
-HSPLandroid/telephony/CellSignalStrengthCdma;->getCdmaDbm()I
-HSPLandroid/telephony/CellSignalStrengthCdma;->getCdmaEcio()I
-HSPLandroid/telephony/CellSignalStrengthCdma;->getCdmaLevel()I
-HSPLandroid/telephony/CellSignalStrengthCdma;->getEvdoDbm()I
-HSPLandroid/telephony/CellSignalStrengthCdma;->getEvdoLevel()I
-HSPLandroid/telephony/CellSignalStrengthCdma;->getEvdoSnr()I
-PLandroid/telephony/CellSignalStrengthCdma;->isValid()Z
-HSPLandroid/telephony/CellSignalStrengthCdma;->setDefaultValues()V
-HSPLandroid/telephony/CellSignalStrengthCdma;->toString()Ljava/lang/String;
-HSPLandroid/telephony/CellSignalStrengthCdma;->updateLevel(Landroid/os/PersistableBundle;Landroid/telephony/ServiceState;)V
-HSPLandroid/telephony/CellSignalStrengthCdma;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/telephony/CellSignalStrengthGsm$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthGsm;
-PLandroid/telephony/CellSignalStrengthGsm$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthGsm;-><init>()V
-HSPLandroid/telephony/CellSignalStrengthGsm;-><init>(III)V
-HSPLandroid/telephony/CellSignalStrengthGsm;-><init>(Landroid/hardware/radio/V1_0/GsmSignalStrength;)V
-PLandroid/telephony/CellSignalStrengthGsm;-><init>(Landroid/os/Parcel;)V
-PLandroid/telephony/CellSignalStrengthGsm;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthGsm$1;)V
-PLandroid/telephony/CellSignalStrengthGsm;->describeContents()I
+HSPLandroid/telephony/CellSignalStrengthCdma;->isValid()Z
+HSPLandroid/telephony/CellSignalStrengthGsm$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthGsm;
+HSPLandroid/telephony/CellSignalStrengthGsm$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/telephony/CellSignalStrengthGsm;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthGsm;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthGsm$1;)V
 HSPLandroid/telephony/CellSignalStrengthGsm;->equals(Ljava/lang/Object;)Z
-PLandroid/telephony/CellSignalStrengthGsm;->getLevel()I
-PLandroid/telephony/CellSignalStrengthGsm;->isValid()Z
-HSPLandroid/telephony/CellSignalStrengthGsm;->setDefaultValues()V
-HSPLandroid/telephony/CellSignalStrengthGsm;->toString()Ljava/lang/String;
-HSPLandroid/telephony/CellSignalStrengthGsm;->updateLevel(Landroid/os/PersistableBundle;Landroid/telephony/ServiceState;)V
-HSPLandroid/telephony/CellSignalStrengthGsm;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/telephony/CellSignalStrengthLte$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthLte;
-PLandroid/telephony/CellSignalStrengthLte$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthLte;-><init>()V
-HSPLandroid/telephony/CellSignalStrengthLte;-><init>(IIIIII)V
-HSPLandroid/telephony/CellSignalStrengthLte;-><init>(Landroid/hardware/radio/V1_0/LteSignalStrength;)V
-PLandroid/telephony/CellSignalStrengthLte;-><init>(Landroid/os/Parcel;)V
-PLandroid/telephony/CellSignalStrengthLte;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthLte$1;)V
-HSPLandroid/telephony/CellSignalStrengthLte;->convertRssiAsuToDBm(I)I
-PLandroid/telephony/CellSignalStrengthLte;->describeContents()I
+HSPLandroid/telephony/CellSignalStrengthGsm;->isValid()Z
+HSPLandroid/telephony/CellSignalStrengthLte$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthLte;
+HSPLandroid/telephony/CellSignalStrengthLte$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/telephony/CellSignalStrengthLte;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthLte;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthLte$1;)V
 HSPLandroid/telephony/CellSignalStrengthLte;->equals(Ljava/lang/Object;)Z
-HPLandroid/telephony/CellSignalStrengthLte;->getDbm()I
-PLandroid/telephony/CellSignalStrengthLte;->getLevel()I
-HPLandroid/telephony/CellSignalStrengthLte;->getTimingAdvance()I
+HSPLandroid/telephony/CellSignalStrengthLte;->getLevel()I
 HSPLandroid/telephony/CellSignalStrengthLte;->isValid()Z
-HSPLandroid/telephony/CellSignalStrengthLte;->setDefaultValues()V
-HSPLandroid/telephony/CellSignalStrengthLte;->toString()Ljava/lang/String;
-HSPLandroid/telephony/CellSignalStrengthLte;->updateLevel(Landroid/os/PersistableBundle;Landroid/telephony/ServiceState;)V
-HSPLandroid/telephony/CellSignalStrengthLte;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/telephony/CellSignalStrengthNr$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthNr;
-PLandroid/telephony/CellSignalStrengthNr$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthNr;-><init>()V
-HSPLandroid/telephony/CellSignalStrengthNr;-><init>(IIIIII)V
-HSPLandroid/telephony/CellSignalStrengthNr;-><init>(Landroid/hardware/radio/V1_4/NrSignalStrength;)V
-PLandroid/telephony/CellSignalStrengthNr;-><init>(Landroid/os/Parcel;)V
-PLandroid/telephony/CellSignalStrengthNr;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthNr$1;)V
-PLandroid/telephony/CellSignalStrengthNr;->describeContents()I
+HSPLandroid/telephony/CellSignalStrengthNr$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthNr;
+HSPLandroid/telephony/CellSignalStrengthNr$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/telephony/CellSignalStrengthNr;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthNr;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthNr$1;)V
 HSPLandroid/telephony/CellSignalStrengthNr;->equals(Ljava/lang/Object;)Z
-HSPLandroid/telephony/CellSignalStrengthNr;->isLevelForParameter(I)Z
-PLandroid/telephony/CellSignalStrengthNr;->isValid()Z
-HSPLandroid/telephony/CellSignalStrengthNr;->setDefaultValues()V
-HSPLandroid/telephony/CellSignalStrengthNr;->toString()Ljava/lang/String;
-HSPLandroid/telephony/CellSignalStrengthNr;->updateLevel(Landroid/os/PersistableBundle;Landroid/telephony/ServiceState;)V
-HSPLandroid/telephony/CellSignalStrengthNr;->updateLevelWithMeasure(I[I)I
-HSPLandroid/telephony/CellSignalStrengthNr;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/telephony/CellSignalStrengthTdscdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthTdscdma;
-PLandroid/telephony/CellSignalStrengthTdscdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthTdscdma;-><init>()V
-HSPLandroid/telephony/CellSignalStrengthTdscdma;-><init>(III)V
-HSPLandroid/telephony/CellSignalStrengthTdscdma;-><init>(Landroid/hardware/radio/V1_2/TdscdmaSignalStrength;)V
-PLandroid/telephony/CellSignalStrengthTdscdma;-><init>(Landroid/os/Parcel;)V
-PLandroid/telephony/CellSignalStrengthTdscdma;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthTdscdma$1;)V
-PLandroid/telephony/CellSignalStrengthTdscdma;->describeContents()I
+HSPLandroid/telephony/CellSignalStrengthTdscdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthTdscdma;
+HSPLandroid/telephony/CellSignalStrengthTdscdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/telephony/CellSignalStrengthTdscdma;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthTdscdma;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthTdscdma$1;)V
 HSPLandroid/telephony/CellSignalStrengthTdscdma;->equals(Ljava/lang/Object;)Z
-PLandroid/telephony/CellSignalStrengthTdscdma;->isValid()Z
-HSPLandroid/telephony/CellSignalStrengthTdscdma;->setDefaultValues()V
-HSPLandroid/telephony/CellSignalStrengthTdscdma;->toString()Ljava/lang/String;
-HSPLandroid/telephony/CellSignalStrengthTdscdma;->updateLevel(Landroid/os/PersistableBundle;Landroid/telephony/ServiceState;)V
-HSPLandroid/telephony/CellSignalStrengthTdscdma;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/telephony/CellSignalStrengthWcdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthWcdma;
-PLandroid/telephony/CellSignalStrengthWcdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthWcdma;-><init>()V
-HSPLandroid/telephony/CellSignalStrengthWcdma;-><init>(IIII)V
-HSPLandroid/telephony/CellSignalStrengthWcdma;-><init>(Landroid/hardware/radio/V1_2/WcdmaSignalStrength;)V
-PLandroid/telephony/CellSignalStrengthWcdma;-><init>(Landroid/os/Parcel;)V
-PLandroid/telephony/CellSignalStrengthWcdma;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthWcdma$1;)V
-PLandroid/telephony/CellSignalStrengthWcdma;->describeContents()I
+HSPLandroid/telephony/CellSignalStrengthTdscdma;->isValid()Z
+HSPLandroid/telephony/CellSignalStrengthWcdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthWcdma;
+HSPLandroid/telephony/CellSignalStrengthWcdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/telephony/CellSignalStrengthWcdma;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthWcdma;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthWcdma$1;)V
 HSPLandroid/telephony/CellSignalStrengthWcdma;->equals(Ljava/lang/Object;)Z
-PLandroid/telephony/CellSignalStrengthWcdma;->getLevel()I
-PLandroid/telephony/CellSignalStrengthWcdma;->isValid()Z
-HSPLandroid/telephony/CellSignalStrengthWcdma;->setDefaultValues()V
-HSPLandroid/telephony/CellSignalStrengthWcdma;->toString()Ljava/lang/String;
-HSPLandroid/telephony/CellSignalStrengthWcdma;->updateLevel(Landroid/os/PersistableBundle;Landroid/telephony/ServiceState;)V
-HSPLandroid/telephony/CellSignalStrengthWcdma;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/telephony/ClientRequestStats;-><init>()V
-HSPLandroid/telephony/ClientRequestStats;->addCompletedWakelockTime(J)V
-HSPLandroid/telephony/ClientRequestStats;->incrementCompletedRequestsCount()V
-HSPLandroid/telephony/ClientRequestStats;->setCallingPackage(Ljava/lang/String;)V
-HPLandroid/telephony/ClientRequestStats;->toString()Ljava/lang/String;
-HSPLandroid/telephony/ClientRequestStats;->updateRequestHistograms(II)V
-PLandroid/telephony/DataFailCause;->getFailCause(I)I
-PLandroid/telephony/DataFailCause;->toString(I)Ljava/lang/String;
+HSPLandroid/telephony/CellSignalStrengthWcdma;->isValid()Z
 HSPLandroid/telephony/DataSpecificRegistrationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/DataSpecificRegistrationInfo;
 HSPLandroid/telephony/DataSpecificRegistrationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/DataSpecificRegistrationInfo;-><init>(IZZZLandroid/telephony/LteVopsSupportInfo;Z)V
 HSPLandroid/telephony/DataSpecificRegistrationInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/telephony/DataSpecificRegistrationInfo;-><init>(Landroid/os/Parcel;Landroid/telephony/DataSpecificRegistrationInfo$1;)V
 HSPLandroid/telephony/DataSpecificRegistrationInfo;-><init>(Landroid/telephony/DataSpecificRegistrationInfo;)V
-HPLandroid/telephony/DataSpecificRegistrationInfo;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/DataSpecificRegistrationInfo;->isUsingCarrierAggregation()Z
 HSPLandroid/telephony/DataSpecificRegistrationInfo;->toString()Ljava/lang/String;
-HSPLandroid/telephony/DataSpecificRegistrationInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/telephony/ICellInfoCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/telephony/ICellInfoCallback$Stub$Proxy;->onCellInfo(Ljava/util/List;)V
-HPLandroid/telephony/ICellInfoCallback$Stub$Proxy;->onError(ILjava/lang/String;Ljava/lang/String;)V
-HPLandroid/telephony/ICellInfoCallback$Stub;-><init>()V
-PLandroid/telephony/ICellInfoCallback$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/telephony/ICellInfoCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/ICellInfoCallback;
-HPLandroid/telephony/ICellInfoCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/telephony/INetworkService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/telephony/INetworkService$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/telephony/INetworkService$Stub$Proxy;->createNetworkServiceProvider(I)V
-HSPLandroid/telephony/INetworkService$Stub$Proxy;->registerForNetworkRegistrationInfoChanged(ILandroid/telephony/INetworkServiceCallback;)V
-HSPLandroid/telephony/INetworkService$Stub$Proxy;->requestNetworkRegistrationInfo(IILandroid/telephony/INetworkServiceCallback;)V
-HSPLandroid/telephony/INetworkService$Stub;-><init>()V
-HSPLandroid/telephony/INetworkService$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/telephony/INetworkService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/INetworkService;
-HSPLandroid/telephony/INetworkService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/telephony/INetworkServiceCallback$Stub;-><init>()V
-HSPLandroid/telephony/INetworkServiceCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/telephony/INetworkServiceCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/INetworkServiceCallback;
-HSPLandroid/telephony/INetworkServiceCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;-><init>()V
-HSPLandroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;->build()Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;
-HSPLandroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;->setCallingPackage(Ljava/lang/String;)Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;
-HSPLandroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;->setCallingPid(I)Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;
-HSPLandroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;->setCallingUid(I)Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;
-HSPLandroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;->setMethod(Ljava/lang/String;)Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;
-HSPLandroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;->setMinSdkVersionForFine(I)Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;
-HSPLandroid/telephony/LocationAccessPolicy$LocationPermissionQuery;-><init>(Ljava/lang/String;Ljava/lang/String;IIIIZLjava/lang/String;)V
-HSPLandroid/telephony/LocationAccessPolicy$LocationPermissionQuery;-><init>(Ljava/lang/String;Ljava/lang/String;IIIIZLjava/lang/String;Landroid/telephony/LocationAccessPolicy$1;)V
-HSPLandroid/telephony/LocationAccessPolicy$LocationPermissionResult;->values()[Landroid/telephony/LocationAccessPolicy$LocationPermissionResult;
-HPLandroid/telephony/LocationAccessPolicy;->appOpsModeToPermissionResult(I)Landroid/telephony/LocationAccessPolicy$LocationPermissionResult;
-HPLandroid/telephony/LocationAccessPolicy;->checkAppLocationPermissionHelper(Landroid/content/Context;Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;Ljava/lang/String;)Landroid/telephony/LocationAccessPolicy$LocationPermissionResult;
-HSPLandroid/telephony/LocationAccessPolicy;->checkLocationPermission(Landroid/content/Context;Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)Landroid/telephony/LocationAccessPolicy$LocationPermissionResult;
-HPLandroid/telephony/LocationAccessPolicy;->checkManifestPermission(Landroid/content/Context;IILjava/lang/String;)Z
-HPLandroid/telephony/LocationAccessPolicy;->checkSystemLocationAccess(Landroid/content/Context;II)Z
-HPLandroid/telephony/LocationAccessPolicy;->getAppOpsString(Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/telephony/LocationAccessPolicy;->isAppAtLeastSdkVersion(Landroid/content/Context;Ljava/lang/String;I)Z
-HPLandroid/telephony/LocationAccessPolicy;->isCurrentProfile(Landroid/content/Context;I)Z
-HPLandroid/telephony/LocationAccessPolicy;->isLocationModeEnabled(Landroid/content/Context;I)Z
-HPLandroid/telephony/LocationAccessPolicy;->logError(Landroid/content/Context;Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;Ljava/lang/String;)V
 HSPLandroid/telephony/LteVopsSupportInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/LteVopsSupportInfo;
 HSPLandroid/telephony/LteVopsSupportInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/LteVopsSupportInfo;-><init>(II)V
 HSPLandroid/telephony/LteVopsSupportInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/telephony/LteVopsSupportInfo;-><init>(Landroid/os/Parcel;Landroid/telephony/LteVopsSupportInfo$1;)V
 HSPLandroid/telephony/LteVopsSupportInfo;->toString()Ljava/lang/String;
-HSPLandroid/telephony/LteVopsSupportInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/telephony/ModemActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/ModemActivityInfo;
-PLandroid/telephony/ModemActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/ModemActivityInfo$TransmitPower;-><init>(Landroid/telephony/ModemActivityInfo;Landroid/util/Range;I)V
-HPLandroid/telephony/ModemActivityInfo$TransmitPower;->getTimeInMillis()I
-HPLandroid/telephony/ModemActivityInfo$TransmitPower;->toString()Ljava/lang/String;
-HSPLandroid/telephony/ModemActivityInfo;-><init>(JII[II)V
-PLandroid/telephony/ModemActivityInfo;->getIdleTimeMillis()I
-PLandroid/telephony/ModemActivityInfo;->getReceiveTimeMillis()I
-PLandroid/telephony/ModemActivityInfo;->getSleepTimeMillis()I
-PLandroid/telephony/ModemActivityInfo;->getTimestamp()J
-PLandroid/telephony/ModemActivityInfo;->getTransmitPowerInfo()Ljava/util/List;
-HPLandroid/telephony/ModemActivityInfo;->getTransmitTimeMillis()[I
-PLandroid/telephony/ModemActivityInfo;->isEmpty()Z
-PLandroid/telephony/ModemActivityInfo;->isValid()Z
-HSPLandroid/telephony/ModemActivityInfo;->populateTransmitPowerRange([I)V
-HPLandroid/telephony/ModemActivityInfo;->setTransmitTimeMillis([I)V
-HPLandroid/telephony/ModemActivityInfo;->toString()Ljava/lang/String;
-HPLandroid/telephony/ModemActivityInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/telephony/ModemInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/ModemInfo;
-PLandroid/telephony/ModemInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/ModemInfo;-><init>(I)V
-HSPLandroid/telephony/ModemInfo;-><init>(IIZZ)V
-PLandroid/telephony/ModemInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/telephony/ModemInfo;->hashCode()I
-HSPLandroid/telephony/ModemInfo;->toString()Ljava/lang/String;
-HSPLandroid/telephony/ModemInfo;->writeToParcel(Landroid/os/Parcel;I)V
 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$Builder;-><init>()V
-HSPLandroid/telephony/NetworkRegistrationInfo$Builder;->build()Landroid/telephony/NetworkRegistrationInfo;
-HSPLandroid/telephony/NetworkRegistrationInfo$Builder;->setDomain(I)Landroid/telephony/NetworkRegistrationInfo$Builder;
-HSPLandroid/telephony/NetworkRegistrationInfo$Builder;->setRegistrationState(I)Landroid/telephony/NetworkRegistrationInfo$Builder;
-HSPLandroid/telephony/NetworkRegistrationInfo$Builder;->setTransportType(I)Landroid/telephony/NetworkRegistrationInfo$Builder;
-HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(IIIIIZLjava/util/List;Landroid/telephony/CellIdentity;)V
-HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(IIIIIZLjava/util/List;Landroid/telephony/CellIdentity;IZZZLandroid/telephony/LteVopsSupportInfo;Z)V
-HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(IIIIIZLjava/util/List;Landroid/telephony/CellIdentity;Landroid/telephony/NetworkRegistrationInfo$1;)V
-HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(IIIIIZLjava/util/List;Landroid/telephony/CellIdentity;ZIII)V
 HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/os/Parcel;Landroid/telephony/NetworkRegistrationInfo$1;)V
 HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/telephony/NetworkRegistrationInfo;)V
-HSPLandroid/telephony/NetworkRegistrationInfo;->equals(Ljava/lang/Object;)Z
+HSPLandroid/telephony/NetworkRegistrationInfo;->domainToString(I)Ljava/lang/String;
 HSPLandroid/telephony/NetworkRegistrationInfo;->getAccessNetworkTechnology()I
-HSPLandroid/telephony/NetworkRegistrationInfo;->getCellIdentity()Landroid/telephony/CellIdentity;
 HSPLandroid/telephony/NetworkRegistrationInfo;->getDataSpecificInfo()Landroid/telephony/DataSpecificRegistrationInfo;
 HSPLandroid/telephony/NetworkRegistrationInfo;->getDomain()I
-HSPLandroid/telephony/NetworkRegistrationInfo;->getNrState()I
-HSPLandroid/telephony/NetworkRegistrationInfo;->getRegistrationState()I
-HSPLandroid/telephony/NetworkRegistrationInfo;->getRejectCause()I
 HSPLandroid/telephony/NetworkRegistrationInfo;->getRoamingType()I
 HSPLandroid/telephony/NetworkRegistrationInfo;->getTransportType()I
-HSPLandroid/telephony/NetworkRegistrationInfo;->getVoiceSpecificInfo()Landroid/telephony/VoiceSpecificRegistrationInfo;
-HSPLandroid/telephony/NetworkRegistrationInfo;->isEmergencyEnabled()Z
 HSPLandroid/telephony/NetworkRegistrationInfo;->isInService()Z
 HSPLandroid/telephony/NetworkRegistrationInfo;->lambda$toString$0(Ljava/lang/Integer;)Ljava/lang/String;
 HSPLandroid/telephony/NetworkRegistrationInfo;->nrStateToString(I)Ljava/lang/String;
 HSPLandroid/telephony/NetworkRegistrationInfo;->registrationStateToString(I)Ljava/lang/String;
 HSPLandroid/telephony/NetworkRegistrationInfo;->serviceTypeToString(I)Ljava/lang/String;
-HSPLandroid/telephony/NetworkRegistrationInfo;->setNrState(I)V
-HSPLandroid/telephony/NetworkRegistrationInfo;->setRoamingType(I)V
 HSPLandroid/telephony/NetworkRegistrationInfo;->toString()Ljava/lang/String;
-HSPLandroid/telephony/NetworkRegistrationInfo;->updateNrState(Landroid/telephony/DataSpecificRegistrationInfo;)V
-HSPLandroid/telephony/NetworkRegistrationInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/telephony/NetworkService$INetworkServiceWrapper;-><init>(Landroid/telephony/NetworkService;)V
-HSPLandroid/telephony/NetworkService$INetworkServiceWrapper;-><init>(Landroid/telephony/NetworkService;Landroid/telephony/NetworkService$1;)V
-HSPLandroid/telephony/NetworkService$INetworkServiceWrapper;->createNetworkServiceProvider(I)V
-HSPLandroid/telephony/NetworkService$INetworkServiceWrapper;->registerForNetworkRegistrationInfoChanged(ILandroid/telephony/INetworkServiceCallback;)V
-HSPLandroid/telephony/NetworkService$INetworkServiceWrapper;->requestNetworkRegistrationInfo(IILandroid/telephony/INetworkServiceCallback;)V
-HSPLandroid/telephony/NetworkService$NetworkServiceHandler;-><init>(Landroid/telephony/NetworkService;Landroid/os/Looper;)V
-HSPLandroid/telephony/NetworkService$NetworkServiceHandler;->handleMessage(Landroid/os/Message;)V
-HSPLandroid/telephony/NetworkService$NetworkServiceProvider;-><init>(Landroid/telephony/NetworkService;I)V
-HSPLandroid/telephony/NetworkService$NetworkServiceProvider;->access$300(Landroid/telephony/NetworkService$NetworkServiceProvider;Landroid/telephony/INetworkServiceCallback;)V
-HSPLandroid/telephony/NetworkService$NetworkServiceProvider;->access$500(Landroid/telephony/NetworkService$NetworkServiceProvider;)V
-HSPLandroid/telephony/NetworkService$NetworkServiceProvider;->getSlotIndex()I
-HSPLandroid/telephony/NetworkService$NetworkServiceProvider;->notifyInfoChangedToCallbacks()V
-HSPLandroid/telephony/NetworkService$NetworkServiceProvider;->notifyNetworkRegistrationInfoChanged()V
-HSPLandroid/telephony/NetworkService$NetworkServiceProvider;->registerForInfoChanged(Landroid/telephony/INetworkServiceCallback;)V
-HSPLandroid/telephony/NetworkService;-><init>()V
-HSPLandroid/telephony/NetworkService;->access$100(Landroid/telephony/NetworkService;)Landroid/telephony/NetworkService$NetworkServiceHandler;
-HSPLandroid/telephony/NetworkService;->access$200(Landroid/telephony/NetworkService;)Landroid/util/SparseArray;
-HSPLandroid/telephony/NetworkService;->log(Ljava/lang/String;)V
-HSPLandroid/telephony/NetworkService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
-HSPLandroid/telephony/NetworkServiceCallback;-><init>(Landroid/telephony/INetworkServiceCallback;)V
-HSPLandroid/telephony/NetworkServiceCallback;->onRequestNetworkRegistrationInfoComplete(ILandroid/telephony/NetworkRegistrationInfo;)V
-HSPLandroid/telephony/PackageChangeReceiver;-><init>()V
-HPLandroid/telephony/PackageChangeReceiver;->getPackageName(Landroid/content/Intent;)Ljava/lang/String;
-HPLandroid/telephony/PackageChangeReceiver;->onPackageAppeared()V
-HPLandroid/telephony/PackageChangeReceiver;->onPackageDisappeared()V
-HPLandroid/telephony/PackageChangeReceiver;->onPackageUpdateFinished(Ljava/lang/String;)V
-HPLandroid/telephony/PackageChangeReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HSPLandroid/telephony/PackageChangeReceiver;->register(Landroid/content/Context;Landroid/os/Looper;Landroid/os/UserHandle;)V
-PLandroid/telephony/PhoneCapability$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/PhoneCapability;
-PLandroid/telephony/PhoneCapability$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/PhoneCapability;-><init>(IIILjava/util/List;Z)V
-PLandroid/telephony/PhoneCapability;-><init>(Landroid/os/Parcel;)V
-PLandroid/telephony/PhoneCapability;-><init>(Landroid/os/Parcel;Landroid/telephony/PhoneCapability$1;)V
-HSPLandroid/telephony/PhoneCapability;->equals(Ljava/lang/Object;)Z
-HSPLandroid/telephony/PhoneCapability;->hashCode()I
-HSPLandroid/telephony/PhoneCapability;->toString()Ljava/lang/String;
-HSPLandroid/telephony/PhoneCapability;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/telephony/PhoneNumberUtils;->compare(Ljava/lang/String;Ljava/lang/String;)Z
-HPLandroid/telephony/PhoneNumberUtils;->compareLoosely(Ljava/lang/String;Ljava/lang/String;)Z
-HPLandroid/telephony/PhoneNumberUtils;->convertKeypadLettersToDigits(Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/telephony/PhoneNumberUtils;->extractNetworkPortionAlt(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/telephony/PhoneNumberUtils;->formatNumberInternal(Ljava/lang/String;Ljava/lang/String;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;)Ljava/lang/String;
-PLandroid/telephony/PhoneNumberUtils;->formatNumberToE164(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/telephony/PhoneNumberUtils;->getMinMatch()I
-HPLandroid/telephony/PhoneNumberUtils;->internalGetStrippedReversed(Ljava/lang/String;I)Ljava/lang/String;
-HSPLandroid/telephony/PhoneNumberUtils;->isEmergencyNumber(Ljava/lang/String;)Z
-HSPLandroid/telephony/PhoneNumberUtils;->isEmergencyNumberInternal(ILjava/lang/String;Ljava/lang/String;Z)Z
-HSPLandroid/telephony/PhoneNumberUtils;->isNonSeparator(C)Z
-HPLandroid/telephony/PhoneNumberUtils;->matchIntlPrefix(Ljava/lang/String;I)Z
-HPLandroid/telephony/PhoneNumberUtils;->normalizeNumber(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/telephony/PhoneNumberUtils;->stripSeparators(Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/telephony/PhoneNumberUtils;->toCallerIDMinMatch(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;-><init>(Landroid/telephony/PhoneStateListener;Ljava/util/concurrent/Executor;)V
 HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;->lambda$onActiveDataSubIdChanged$54(Landroid/telephony/PhoneStateListener;I)V
 HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;->lambda$onActiveDataSubIdChanged$55$PhoneStateListener$IPhoneStateListenerStub(Landroid/telephony/PhoneStateListener;I)V
+HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;->lambda$onCallStateChanged$10(Landroid/telephony/PhoneStateListener;ILjava/lang/String;)V
+HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;->lambda$onCallStateChanged$11$PhoneStateListener$IPhoneStateListenerStub(Landroid/telephony/PhoneStateListener;ILjava/lang/String;)V
+HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;->lambda$onServiceStateChanged$0(Landroid/telephony/PhoneStateListener;Landroid/telephony/ServiceState;)V
+HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;->lambda$onServiceStateChanged$1$PhoneStateListener$IPhoneStateListenerStub(Landroid/telephony/PhoneStateListener;Landroid/telephony/ServiceState;)V
+HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;->lambda$onSignalStrengthsChanged$18(Landroid/telephony/PhoneStateListener;Landroid/telephony/SignalStrength;)V
+HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;->lambda$onSignalStrengthsChanged$19$PhoneStateListener$IPhoneStateListenerStub(Landroid/telephony/PhoneStateListener;Landroid/telephony/SignalStrength;)V
 HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;->onActiveDataSubIdChanged(I)V
+HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;->onCallStateChanged(ILjava/lang/String;)V
+HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;->onServiceStateChanged(Landroid/telephony/ServiceState;)V
+HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;->onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V
 HSPLandroid/telephony/PhoneStateListener;-><init>()V
-HSPLandroid/telephony/PhoneStateListener;-><init>(Landroid/os/Looper;)V
 HSPLandroid/telephony/PhoneStateListener;-><init>(Ljava/lang/Integer;Landroid/os/Looper;)V
 HSPLandroid/telephony/PhoneStateListener;-><init>(Ljava/lang/Integer;Ljava/util/concurrent/Executor;)V
 HSPLandroid/telephony/PhoneStateListener;-><init>(Ljava/util/concurrent/Executor;)V
-HSPLandroid/telephony/PhysicalChannelConfig$Builder;-><init>()V
-HSLandroid/telephony/PhysicalChannelConfig$Builder;->access$100(Landroid/telephony/PhysicalChannelConfig$Builder;)I
-HSLandroid/telephony/PhysicalChannelConfig$Builder;->access$200(Landroid/telephony/PhysicalChannelConfig$Builder;)I
-HSLandroid/telephony/PhysicalChannelConfig$Builder;->access$300(Landroid/telephony/PhysicalChannelConfig$Builder;)I
-HSLandroid/telephony/PhysicalChannelConfig$Builder;->access$400(Landroid/telephony/PhysicalChannelConfig$Builder;)I
-HSLandroid/telephony/PhysicalChannelConfig$Builder;->access$500(Landroid/telephony/PhysicalChannelConfig$Builder;)I
-HSLandroid/telephony/PhysicalChannelConfig$Builder;->access$600(Landroid/telephony/PhysicalChannelConfig$Builder;)[I
-HSLandroid/telephony/PhysicalChannelConfig$Builder;->access$700(Landroid/telephony/PhysicalChannelConfig$Builder;)I
-HSPLandroid/telephony/PhysicalChannelConfig$Builder;->build()Landroid/telephony/PhysicalChannelConfig;
-HSPLandroid/telephony/PhysicalChannelConfig$Builder;->setCellBandwidthDownlinkKhz(I)Landroid/telephony/PhysicalChannelConfig$Builder;
-HSPLandroid/telephony/PhysicalChannelConfig$Builder;->setCellConnectionStatus(I)Landroid/telephony/PhysicalChannelConfig$Builder;
-HSPLandroid/telephony/PhysicalChannelConfig$Builder;->setContextIds([I)Landroid/telephony/PhysicalChannelConfig$Builder;
-HSPLandroid/telephony/PhysicalChannelConfig$Builder;->setFrequencyRange(I)Landroid/telephony/PhysicalChannelConfig$Builder;
-HSPLandroid/telephony/PhysicalChannelConfig$Builder;->setPhysicalCellId(I)Landroid/telephony/PhysicalChannelConfig$Builder;
-HSPLandroid/telephony/PhysicalChannelConfig$Builder;->setRat(I)Landroid/telephony/PhysicalChannelConfig$Builder;
-HSPLandroid/telephony/PhysicalChannelConfig;-><init>(Landroid/telephony/PhysicalChannelConfig$Builder;)V
-HSLandroid/telephony/PhysicalChannelConfig;-><init>(Landroid/telephony/PhysicalChannelConfig$Builder;Landroid/telephony/PhysicalChannelConfig$1;)V
-HSPLandroid/telephony/PhysicalChannelConfig;->getCellBandwidthDownlink()I
-HSPLandroid/telephony/PhysicalChannelConfig;->getConnectionStatusString()Ljava/lang/String;
-HSPLandroid/telephony/PhysicalChannelConfig;->getRat()I
-HSPLandroid/telephony/PhysicalChannelConfig;->toString()Ljava/lang/String;
-HSPLandroid/telephony/PreciseCallState;-><init>()V
-PLandroid/telephony/PreciseCallState;-><init>(IIIII)V
-PLandroid/telephony/PreciseCallState;->getForegroundCallState()I
-PLandroid/telephony/PreciseCallState;->toString()Ljava/lang/String;
-HSPLandroid/telephony/PreciseDataConnectionState;-><init>()V
-PLandroid/telephony/PreciseDataConnectionState;-><init>(IIILjava/lang/String;Landroid/net/LinkProperties;I)V
-PLandroid/telephony/PreciseDataConnectionState;->toString()Ljava/lang/String;
-HSPLandroid/telephony/Rlog;->d(Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/telephony/Rlog;->e(Ljava/lang/String;Ljava/lang/String;)I
-HPLandroid/telephony/Rlog;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
-HSPLandroid/telephony/Rlog;->i(Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/telephony/Rlog;->isLoggable(Ljava/lang/String;I)Z
-HSPLandroid/telephony/Rlog;->pii(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;
-HPLandroid/telephony/Rlog;->pii(ZLjava/lang/Object;)Ljava/lang/String;
-HSPLandroid/telephony/Rlog;->secureHash([B)Ljava/lang/String;
-HSPLandroid/telephony/Rlog;->v(Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/telephony/Rlog;->w(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/telephony/ServiceState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/ServiceState;
 HSPLandroid/telephony/ServiceState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/telephony/ServiceState;-><init>()V
 HSPLandroid/telephony/ServiceState;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/telephony/ServiceState;-><init>(Landroid/telephony/ServiceState;)V
-HSPLandroid/telephony/ServiceState;->addNetworkRegistrationInfo(Landroid/telephony/NetworkRegistrationInfo;)V
-HSPLandroid/telephony/ServiceState;->bearerBitmapHasCdma(I)Z
-HSPLandroid/telephony/ServiceState;->bitmaskHasTech(II)Z
-HSPLandroid/telephony/ServiceState;->convertNetworkTypeBitmaskToBearerBitmask(I)I
 HSPLandroid/telephony/ServiceState;->copyFrom(Landroid/telephony/ServiceState;)V
-PLandroid/telephony/ServiceState;->describeContents()I
-HSPLandroid/telephony/ServiceState;->equals(Ljava/lang/Object;)Z
-HSPLandroid/telephony/ServiceState;->equalsHandlesNulls(Ljava/lang/Object;Ljava/lang/Object;)Z
-PLandroid/telephony/ServiceState;->fillInNotifierBundle(Landroid/os/Bundle;)V
-HSPLandroid/telephony/ServiceState;->getBitmaskForTech(I)I
-HSPLandroid/telephony/ServiceState;->getCdmaDefaultRoamingIndicator()I
-HSPLandroid/telephony/ServiceState;->getCdmaRoamingIndicator()I
-HSPLandroid/telephony/ServiceState;->getCdmaSystemId()I
-HSPLandroid/telephony/ServiceState;->getCellBandwidths()[I
-HSPLandroid/telephony/ServiceState;->getChannelNumber()I
-HSPLandroid/telephony/ServiceState;->getCssIndicator()I
 HSPLandroid/telephony/ServiceState;->getDataNetworkType()I
-HSPLandroid/telephony/ServiceState;->getDataRegState()I
-HSPLandroid/telephony/ServiceState;->getDataRoaming()Z
-HSPLandroid/telephony/ServiceState;->getDataRoamingFromRegistration()Z
 HSPLandroid/telephony/ServiceState;->getDataRoamingType()I
 HSPLandroid/telephony/ServiceState;->getDuplexMode()I
-HSPLandroid/telephony/ServiceState;->getLteEarfcnRsrpBoost()I
 HSPLandroid/telephony/ServiceState;->getNetworkRegistrationInfo(II)Landroid/telephony/NetworkRegistrationInfo;
 HSPLandroid/telephony/ServiceState;->getNetworkRegistrationInfoList()Ljava/util/List;
-HSPLandroid/telephony/ServiceState;->getNetworkRegistrationInfoListForDomain(I)Ljava/util/List;
-HSPLandroid/telephony/ServiceState;->getNrFrequencyRange()I
-HSPLandroid/telephony/ServiceState;->getNrState()I
-HSPLandroid/telephony/ServiceState;->getOperatorAlpha()Ljava/lang/String;
-HSPLandroid/telephony/ServiceState;->getOperatorAlphaLong()Ljava/lang/String;
-HSPLandroid/telephony/ServiceState;->getOperatorAlphaShort()Ljava/lang/String;
-HSPLandroid/telephony/ServiceState;->getOperatorNumeric()Ljava/lang/String;
-HPLandroid/telephony/ServiceState;->getRadioTechnology()I
 HSPLandroid/telephony/ServiceState;->getRilDataRadioTechnology()I
 HSPLandroid/telephony/ServiceState;->getRilVoiceRadioTechnology()I
-HSPLandroid/telephony/ServiceState;->getRoaming()Z
 HSPLandroid/telephony/ServiceState;->getState()I
 HSPLandroid/telephony/ServiceState;->getVoiceRegState()I
-HSPLandroid/telephony/ServiceState;->getVoiceRoaming()Z
 HSPLandroid/telephony/ServiceState;->getVoiceRoamingType()I
-HSPLandroid/telephony/ServiceState;->init()V
-HSPLandroid/telephony/ServiceState;->isCdma(I)Z
-HSPLandroid/telephony/ServiceState;->isEmergencyOnly()Z
-HSPLandroid/telephony/ServiceState;->isGsm(I)Z
-HSPLandroid/telephony/ServiceState;->isIwlanPreferred()Z
-HSPLandroid/telephony/ServiceState;->isLte(I)Z
 HSPLandroid/telephony/ServiceState;->isUsingCarrierAggregation()Z
 HSPLandroid/telephony/ServiceState;->networkTypeToRilRadioTechnology(I)I
-HSPLandroid/telephony/ServiceState;->newFromBundle(Landroid/os/Bundle;)Landroid/telephony/ServiceState;
-HSPLandroid/telephony/ServiceState;->rilRadioTechnologyToNetworkType(I)I
 HSPLandroid/telephony/ServiceState;->rilRadioTechnologyToString(I)Ljava/lang/String;
 HSPLandroid/telephony/ServiceState;->rilServiceStateToString(I)Ljava/lang/String;
 HSPLandroid/telephony/ServiceState;->roamingTypeToString(I)Ljava/lang/String;
-HSPLandroid/telephony/ServiceState;->setCdmaDefaultRoamingIndicator(I)V
-HSPLandroid/telephony/ServiceState;->setCdmaEriIconIndex(I)V
-HSPLandroid/telephony/ServiceState;->setCdmaEriIconMode(I)V
-HSPLandroid/telephony/ServiceState;->setCdmaRoamingIndicator(I)V
-HSPLandroid/telephony/ServiceState;->setCdmaSystemAndNetworkId(II)V
-HSPLandroid/telephony/ServiceState;->setCellBandwidths([I)V
-HSPLandroid/telephony/ServiceState;->setChannelNumber(I)V
-HSPLandroid/telephony/ServiceState;->setCssIndicator(I)V
-HSPLandroid/telephony/ServiceState;->setDataRegState(I)V
-HSPLandroid/telephony/ServiceState;->setDataRoaming(Z)V
-HSPLandroid/telephony/ServiceState;->setDataRoamingType(I)V
-HSPLandroid/telephony/ServiceState;->setEmergencyOnly(Z)V
-HSPLandroid/telephony/ServiceState;->setFromNotifierBundle(Landroid/os/Bundle;)V
-HSPLandroid/telephony/ServiceState;->setIsManualSelection(Z)V
-HSPLandroid/telephony/ServiceState;->setIwlanPreferred(Z)V
-HSPLandroid/telephony/ServiceState;->setLteEarfcnRsrpBoost(I)V
-HSPLandroid/telephony/ServiceState;->setNrFrequencyRange(I)V
-HPLandroid/telephony/ServiceState;->setOperatorAlphaLong(Ljava/lang/String;)V
-HSPLandroid/telephony/ServiceState;->setOperatorAlphaLongRaw(Ljava/lang/String;)V
-HSPLandroid/telephony/ServiceState;->setOperatorAlphaShortRaw(Ljava/lang/String;)V
-HSPLandroid/telephony/ServiceState;->setOperatorName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/telephony/ServiceState;->setStateOff()V
-HSPLandroid/telephony/ServiceState;->setStateOutOfService()V
-HSPLandroid/telephony/ServiceState;->setVoiceRegState(I)V
-HSPLandroid/telephony/ServiceState;->setVoiceRoaming(Z)V
-HSPLandroid/telephony/ServiceState;->setVoiceRoamingType(I)V
 HSPLandroid/telephony/ServiceState;->toString()Ljava/lang/String;
-HSPLandroid/telephony/ServiceState;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/telephony/SignalStrength$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/SignalStrength;
-PLandroid/telephony/SignalStrength$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/SignalStrength;-><init>()V
-HSPLandroid/telephony/SignalStrength;-><init>(Landroid/hardware/radio/V1_4/SignalStrength;)V
-PLandroid/telephony/SignalStrength;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/telephony/SignalStrength;-><init>(Landroid/telephony/CellSignalStrengthCdma;Landroid/telephony/CellSignalStrengthGsm;Landroid/telephony/CellSignalStrengthWcdma;Landroid/telephony/CellSignalStrengthTdscdma;Landroid/telephony/CellSignalStrengthLte;Landroid/telephony/CellSignalStrengthNr;)V
-HSPLandroid/telephony/SignalStrength;->equals(Ljava/lang/Object;)Z
-PLandroid/telephony/SignalStrength;->fillInNotifierBundle(Landroid/os/Bundle;)V
-PLandroid/telephony/SignalStrength;->getLevel()I
+HSPLandroid/telephony/SignalStrength$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/SignalStrength;
+HSPLandroid/telephony/SignalStrength$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/telephony/SignalStrength;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/SignalStrength;->getLevel()I
 HSPLandroid/telephony/SignalStrength;->getPrimary()Landroid/telephony/CellSignalStrength;
-HSPLandroid/telephony/SignalStrength;->toString()Ljava/lang/String;
-HSPLandroid/telephony/SignalStrength;->updateLevel(Landroid/os/PersistableBundle;Landroid/telephony/ServiceState;)V
-HSPLandroid/telephony/SignalStrength;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/telephony/SmsManager;->getDefault()Landroid/telephony/SmsManager;
-HSPLandroid/telephony/SmsManager;->getDefaultSmsSubscriptionId()I
-HSPLandroid/telephony/SmsManager;->getISmsService()Lcom/android/internal/telephony/ISms;
-HSPLandroid/telephony/SubscriptionInfo;->givePrintableIccid(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/telephony/SubscriptionInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/SubscriptionInfo;
+HSPLandroid/telephony/SubscriptionInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/telephony/SubscriptionInfo;-><init>(ILjava/lang/String;ILjava/lang/CharSequence;Ljava/lang/CharSequence;IILjava/lang/String;ILandroid/graphics/Bitmap;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z[Landroid/telephony/UiccAccessRule;Ljava/lang/String;IZLjava/lang/String;ZIIILjava/lang/String;[Landroid/telephony/UiccAccessRule;Z)V
+HSPLandroid/telephony/SubscriptionInfo;->getGroupUuid()Landroid/os/ParcelUuid;
+HSPLandroid/telephony/SubscriptionInfo;->getIccId()Ljava/lang/String;
+HSPLandroid/telephony/SubscriptionInfo;->getMcc()I
+HSPLandroid/telephony/SubscriptionInfo;->getMnc()I
+HSPLandroid/telephony/SubscriptionInfo;->getNumber()Ljava/lang/String;
+HSPLandroid/telephony/SubscriptionInfo;->getSimSlotIndex()I
+HSPLandroid/telephony/SubscriptionInfo;->getSubscriptionId()I
+HSPLandroid/telephony/SubscriptionInfo;->isOpportunistic()Z
+HSPLandroid/telephony/SubscriptionInfo;->setAssociatedPlmns([Ljava/lang/String;[Ljava/lang/String;)V
 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;-><init>()V
-HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;-><init>(Landroid/os/Looper;)V
 HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;->access$000(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)Lcom/android/internal/telephony/util/HandlerExecutor;
-HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;->getHandlerExecutor()Lcom/android/internal/telephony/util/HandlerExecutor;
 HSPLandroid/telephony/SubscriptionManager;-><init>(Landroid/content/Context;)V
-HSPLandroid/telephony/SubscriptionManager;->addOnOpportunisticSubscriptionsChangedListener(Ljava/util/concurrent/Executor;Landroid/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener;)V
 HSPLandroid/telephony/SubscriptionManager;->addOnSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V
+HSPLandroid/telephony/SubscriptionManager;->addOnSubscriptionsChangedListener(Ljava/util/concurrent/Executor;Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V
 HSPLandroid/telephony/SubscriptionManager;->from(Landroid/content/Context;)Landroid/telephony/SubscriptionManager;
-HPLandroid/telephony/SubscriptionManager;->getActiveAndHiddenSubscriptionInfoList()Ljava/util/List;
 HSPLandroid/telephony/SubscriptionManager;->getActiveDataSubscriptionId()I
-HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionIdList()[I
-HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionIdList(Z)[I
 HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionInfo(I)Landroid/telephony/SubscriptionInfo;
-HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionInfoCount()I
-HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionInfoCountMax()I
-HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionInfoForSimSlotIndex(I)Landroid/telephony/SubscriptionInfo;
 HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionInfoList()Ljava/util/List;
 HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionInfoList(Z)Ljava/util/List;
-HSPLandroid/telephony/SubscriptionManager;->getAllSubscriptionInfoList()Ljava/util/List;
-PLandroid/telephony/SubscriptionManager;->getAvailableSubscriptionInfoList()Ljava/util/List;
-HPLandroid/telephony/SubscriptionManager;->getDefaultDataPhoneId()I
 HSPLandroid/telephony/SubscriptionManager;->getDefaultDataSubscriptionId()I
-HSPLandroid/telephony/SubscriptionManager;->getDefaultDataSubscriptionInfo()Landroid/telephony/SubscriptionInfo;
-HPLandroid/telephony/SubscriptionManager;->getDefaultSmsPhoneId()I
 HSPLandroid/telephony/SubscriptionManager;->getDefaultSmsSubscriptionId()I
 HSPLandroid/telephony/SubscriptionManager;->getDefaultSubscriptionId()I
-HPLandroid/telephony/SubscriptionManager;->getDefaultVoicePhoneId()I
 HSPLandroid/telephony/SubscriptionManager;->getDefaultVoiceSubscriptionId()I
-HSPLandroid/telephony/SubscriptionManager;->getIntegerSubscriptionProperty(ILjava/lang/String;ILandroid/content/Context;)I
-HSPLandroid/telephony/SubscriptionManager;->getOpportunisticSubscriptions()Ljava/util/List;
 HSPLandroid/telephony/SubscriptionManager;->getPhoneId(I)I
 HSPLandroid/telephony/SubscriptionManager;->getResourcesForSubId(Landroid/content/Context;I)Landroid/content/res/Resources;
 HSPLandroid/telephony/SubscriptionManager;->getResourcesForSubId(Landroid/content/Context;IZ)Landroid/content/res/Resources;
 HSPLandroid/telephony/SubscriptionManager;->getSimStateForSlotIndex(I)I
 HSPLandroid/telephony/SubscriptionManager;->getSlotIndex(I)I
-HSPLandroid/telephony/SubscriptionManager;->getSubId(I)[I
-HSPLandroid/telephony/SubscriptionManager;->getSubscriptionIds(I)[I
-HSPLandroid/telephony/SubscriptionManager;->getSubscriptionProperty(ILjava/lang/String;Landroid/content/Context;)Ljava/lang/String;
-HSPLandroid/telephony/SubscriptionManager;->isActiveSubId(I)Z
+HSPLandroid/telephony/SubscriptionManager;->isSubscriptionVisible(Landroid/telephony/SubscriptionInfo;)Z
 HSPLandroid/telephony/SubscriptionManager;->isUsableSubIdValue(I)Z
-HPLandroid/telephony/SubscriptionManager;->isUsableSubscriptionId(I)Z
-HSPLandroid/telephony/SubscriptionManager;->isValidPhoneId(I)Z
-HSPLandroid/telephony/SubscriptionManager;->isValidSlotIndex(I)Z
 HSPLandroid/telephony/SubscriptionManager;->isValidSubscriptionId(I)Z
-HSPLandroid/telephony/SubscriptionManager;->logd(Ljava/lang/String;)V
-HSPLandroid/telephony/SubscriptionManager;->putPhoneIdAndSubIdExtra(Landroid/content/Intent;I)V
-HSPLandroid/telephony/SubscriptionManager;->putPhoneIdAndSubIdExtra(Landroid/content/Intent;II)V
-HSPLandroid/telephony/SubscriptionManager;->requestEmbeddedSubscriptionInfoListRefresh(I)V
-PLandroid/telephony/SubscriptionPlan$1;->newArray(I)[Landroid/telephony/SubscriptionPlan;
-PLandroid/telephony/SubscriptionPlan$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/telephony/SubscriptionManager;->lambda$getActiveSubscriptionInfoList$0$SubscriptionManager(Landroid/telephony/SubscriptionInfo;)Z
 HSPLandroid/telephony/TelephonyFrameworkInitializer;->getTelephonyServiceManager()Landroid/os/TelephonyServiceManager;
 HSPLandroid/telephony/TelephonyFrameworkInitializer;->lambda$registerServiceWrappers$0(Landroid/content/Context;)Landroid/telephony/TelephonyManager;
 HSPLandroid/telephony/TelephonyFrameworkInitializer;->lambda$registerServiceWrappers$1(Landroid/content/Context;)Landroid/telephony/SubscriptionManager;
 HSPLandroid/telephony/TelephonyFrameworkInitializer;->lambda$registerServiceWrappers$2(Landroid/content/Context;)Landroid/telephony/CarrierConfigManager;
-HSPLandroid/telephony/TelephonyFrameworkInitializer;->lambda$registerServiceWrappers$3(Landroid/content/Context;)Landroid/telephony/euicc/EuiccManager;
 HSPLandroid/telephony/TelephonyFrameworkInitializer;->setTelephonyServiceManager(Landroid/os/TelephonyServiceManager;)V
-HSPLandroid/telephony/TelephonyHistogram;-><init>(III)V
-HPLandroid/telephony/TelephonyHistogram;-><init>(Landroid/telephony/TelephonyHistogram;)V
-HSPLandroid/telephony/TelephonyHistogram;->addTimeTaken(I)V
-HSPLandroid/telephony/TelephonyHistogram;->addToBucketCounter([I[II)V
-HSPLandroid/telephony/TelephonyHistogram;->calculateBucketEndPoints([I)V
-HPLandroid/telephony/TelephonyHistogram;->getAverageTime()I
-HPLandroid/telephony/TelephonyHistogram;->getBucketCount()I
-HPLandroid/telephony/TelephonyHistogram;->getBucketCounters()[I
-HPLandroid/telephony/TelephonyHistogram;->getBucketEndPoints()[I
-HPLandroid/telephony/TelephonyHistogram;->getCategory()I
-HPLandroid/telephony/TelephonyHistogram;->getId()I
-HPLandroid/telephony/TelephonyHistogram;->getMaxTime()I
-HPLandroid/telephony/TelephonyHistogram;->getMinTime()I
-HPLandroid/telephony/TelephonyHistogram;->getSampleCount()I
-PLandroid/telephony/TelephonyManager$2;-><init>(Landroid/telephony/TelephonyManager;Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyManager$CellInfoCallback;)V
-PLandroid/telephony/TelephonyManager$2;->lambda$onCellInfo$0(Landroid/telephony/TelephonyManager$CellInfoCallback;Ljava/util/List;)V
-HPLandroid/telephony/TelephonyManager$2;->onCellInfo(Ljava/util/List;)V
-HPLandroid/telephony/TelephonyManager$CellInfoCallback;-><init>()V
 HSPLandroid/telephony/TelephonyManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/telephony/TelephonyManager;-><init>(Landroid/content/Context;I)V
 HSPLandroid/telephony/TelephonyManager;->checkCarrierPrivilegesForPackageAnyPhone(Ljava/lang/String;)I
-HPLandroid/telephony/TelephonyManager;->createForPhoneAccountHandle(Landroid/telecom/PhoneAccountHandle;)Landroid/telephony/TelephonyManager;
 HSPLandroid/telephony/TelephonyManager;->createForSubscriptionId(I)Landroid/telephony/TelephonyManager;
-HPLandroid/telephony/TelephonyManager;->disableIms(I)V
-HSPLandroid/telephony/TelephonyManager;->from(Landroid/content/Context;)Landroid/telephony/TelephonyManager;
 HSPLandroid/telephony/TelephonyManager;->getActiveModemCount()I
-HPLandroid/telephony/TelephonyManager;->getActiveVisualVoicemailSmsFilterSettings(I)Landroid/telephony/VisualVoicemailSmsFilterSettings;
-HSPLandroid/telephony/TelephonyManager;->getAllCellInfo()Ljava/util/List;
 HSPLandroid/telephony/TelephonyManager;->getCallState()I
-HSPLandroid/telephony/TelephonyManager;->getCardIdForDefaultEuicc()I
-HSPLandroid/telephony/TelephonyManager;->getCarrierPackageNamesForIntentAndPhone(Landroid/content/Intent;I)Ljava/util/List;
-HSPLandroid/telephony/TelephonyManager;->getCarrierPrivilegedPackagesForAllActiveSubscriptions()Ljava/util/List;
 HSPLandroid/telephony/TelephonyManager;->getCurrentPhoneType()I
 HSPLandroid/telephony/TelephonyManager;->getCurrentPhoneType(I)I
 HSPLandroid/telephony/TelephonyManager;->getCurrentPhoneTypeForSlot(I)I
-HPLandroid/telephony/TelephonyManager;->getDataActivity()I
-PLandroid/telephony/TelephonyManager;->getDataEnabled()Z
 HSPLandroid/telephony/TelephonyManager;->getDataEnabled(I)Z
-PLandroid/telephony/TelephonyManager;->getDataNetworkType()I
-HSPLandroid/telephony/TelephonyManager;->getDataNetworkType(I)I
-HPLandroid/telephony/TelephonyManager;->getDataState()I
 HSPLandroid/telephony/TelephonyManager;->getDefault()Landroid/telephony/TelephonyManager;
 HSPLandroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String;
-PLandroid/telephony/TelephonyManager;->getEmergencyNumberList()Ljava/util/Map;
 HSPLandroid/telephony/TelephonyManager;->getFeatureId()Ljava/lang/String;
-HPLandroid/telephony/TelephonyManager;->getGroupIdLevel1()Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->getGroupIdLevel1()Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getITelephony()Lcom/android/internal/telephony/ITelephony;
-PLandroid/telephony/TelephonyManager;->getImei()Ljava/lang/String;
-HSPLandroid/telephony/TelephonyManager;->getImei(I)Ljava/lang/String;
-HSPLandroid/telephony/TelephonyManager;->getImsConfig(II)Landroid/telephony/ims/aidl/IImsConfig;
-HSPLandroid/telephony/TelephonyManager;->getImsMmTelFeatureAndListen(ILcom/android/ims/internal/IImsServiceFeatureCallback;)Landroid/telephony/ims/aidl/IImsMmTelFeature;
-HSPLandroid/telephony/TelephonyManager;->getImsRcsFeatureAndListen(ILcom/android/ims/internal/IImsServiceFeatureCallback;)Landroid/telephony/ims/aidl/IImsRcsFeature;
-HSPLandroid/telephony/TelephonyManager;->getImsRegistration(II)Landroid/telephony/ims/aidl/IImsRegistration;
-HPLandroid/telephony/TelephonyManager;->getLine1Number()Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->getLine1Number()Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getLine1Number(I)Ljava/lang/String;
-HSPLandroid/telephony/TelephonyManager;->getLteOnCdmaMode()I
-HSPLandroid/telephony/TelephonyManager;->getLteOnCdmaMode(I)I
-HPLandroid/telephony/TelephonyManager;->getMeid()Ljava/lang/String;
-HPLandroid/telephony/TelephonyManager;->getMeid(I)Ljava/lang/String;
-HSPLandroid/telephony/TelephonyManager;->getMergedSubscriberIds()[Ljava/lang/String;
-HSPLandroid/telephony/TelephonyManager;->getMmsUAProfUrl()Ljava/lang/String;
-HSPLandroid/telephony/TelephonyManager;->getMmsUserAgent()Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getMultiSimConfiguration()Landroid/telephony/TelephonyManager$MultiSimVariants;
 HSPLandroid/telephony/TelephonyManager;->getNetworkCountryIso()Ljava/lang/String;
-HPLandroid/telephony/TelephonyManager;->getNetworkCountryIso(I)Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getNetworkOperator()Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getNetworkOperatorForPhone(I)Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getNetworkOperatorName()Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getNetworkOperatorName(I)Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getNetworkType()I
 HSPLandroid/telephony/TelephonyManager;->getNetworkType(I)I
-HSPLandroid/telephony/TelephonyManager;->getNetworkTypeName(I)Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getOpPackageName()Ljava/lang/String;
-HSPLandroid/telephony/TelephonyManager;->getOtaSpNumberSchemaForPhone(ILjava/lang/String;)Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getPhoneCount()I
 HSPLandroid/telephony/TelephonyManager;->getPhoneId()I
 HSPLandroid/telephony/TelephonyManager;->getPhoneType()I
 HSPLandroid/telephony/TelephonyManager;->getPhoneType(I)I
 HSPLandroid/telephony/TelephonyManager;->getPhoneTypeFromNetworkType(I)I
 HSPLandroid/telephony/TelephonyManager;->getPhoneTypeFromProperty(I)I
-PLandroid/telephony/TelephonyManager;->getServiceState()Landroid/telephony/ServiceState;
-PLandroid/telephony/TelephonyManager;->getServiceStateForSubscriber(I)Landroid/telephony/ServiceState;
-HPLandroid/telephony/TelephonyManager;->getSignalStrength()Landroid/telephony/SignalStrength;
-HSPLandroid/telephony/TelephonyManager;->getSimCardState()I
-HSPLandroid/telephony/TelephonyManager;->getSimCardStateFromSimState(I)I
-HSPLandroid/telephony/TelephonyManager;->getSimCount()I
+HSPLandroid/telephony/TelephonyManager;->getServiceState()Landroid/telephony/ServiceState;
+HSPLandroid/telephony/TelephonyManager;->getServiceStateForSubscriber(I)Landroid/telephony/ServiceState;
 HSPLandroid/telephony/TelephonyManager;->getSimCountryIso()Ljava/lang/String;
-PLandroid/telephony/TelephonyManager;->getSimCountryIsoForPhone(I)Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->getSimCountryIsoForPhone(I)Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getSimOperator()Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getSimOperatorName()Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getSimOperatorNameForPhone(I)Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getSimOperatorNumeric()Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getSimOperatorNumeric(I)Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getSimOperatorNumericForPhone(I)Ljava/lang/String;
-PLandroid/telephony/TelephonyManager;->getSimSerialNumber()Ljava/lang/String;
-PLandroid/telephony/TelephonyManager;->getSimSerialNumber(I)Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getSimState()I
-HSPLandroid/telephony/TelephonyManager;->getSimState(I)I
 HSPLandroid/telephony/TelephonyManager;->getSimStateIncludingLoaded()I
 HSPLandroid/telephony/TelephonyManager;->getSlotIndex()I
-HSPLandroid/telephony/TelephonyManager;->getSmsReceiveCapableForPhone(IZ)Z
-HSPLandroid/telephony/TelephonyManager;->getSmsSendCapableForPhone(IZ)Z
 HSPLandroid/telephony/TelephonyManager;->getSubId()I
 HSPLandroid/telephony/TelephonyManager;->getSubId(I)I
 HSPLandroid/telephony/TelephonyManager;->getSubscriberId()Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getSubscriberId(I)Ljava/lang/String;
 HSPLandroid/telephony/TelephonyManager;->getSubscriberInfo()Lcom/android/internal/telephony/IPhoneSubInfo;
-HPLandroid/telephony/TelephonyManager;->getSubscriptionId(Landroid/telecom/PhoneAccountHandle;)I
-HSPLandroid/telephony/TelephonyManager;->getSupportedModemCount()I
 HSPLandroid/telephony/TelephonyManager;->getTelephonyProperty(ILjava/util/List;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/telephony/TelephonyManager;->getTelephonyRegistry()Lcom/android/internal/telephony/ITelephonyRegistry;
-HSPLandroid/telephony/TelephonyManager;->getUiccCardsInfo()Ljava/util/List;
-HSPLandroid/telephony/TelephonyManager;->getUiccSlotsInfo()[Landroid/telephony/UiccSlotInfo;
-HPLandroid/telephony/TelephonyManager;->getVisualVoicemailPackageName()Ljava/lang/String;
-HPLandroid/telephony/TelephonyManager;->getVoiceNetworkType()I
-HPLandroid/telephony/TelephonyManager;->getVoiceNetworkType(I)I
-HSPLandroid/telephony/TelephonyManager;->getVtDataUsage(I)Landroid/net/NetworkStats;
-HPLandroid/telephony/TelephonyManager;->hasCarrierPrivileges()Z
-HPLandroid/telephony/TelephonyManager;->hasCarrierPrivileges(I)Z
-HPLandroid/telephony/TelephonyManager;->isConcurrentVoiceAndDataSupported()Z
-HPLandroid/telephony/TelephonyManager;->isDataCapable()Z
 HSPLandroid/telephony/TelephonyManager;->isDataEnabled()Z
-HSPLandroid/telephony/TelephonyManager;->isEmergencyAssistanceEnabled()Z
-HSPLandroid/telephony/TelephonyManager;->isEmergencyNumber(Ljava/lang/String;)Z
-HSPLandroid/telephony/TelephonyManager;->isMultiSimEnabled()Z
 HSPLandroid/telephony/TelephonyManager;->isNetworkRoaming()Z
 HSPLandroid/telephony/TelephonyManager;->isNetworkRoaming(I)Z
 HSPLandroid/telephony/TelephonyManager;->isSmsCapable()Z
-PLandroid/telephony/TelephonyManager;->isTetheringApnRequired(I)Z
 HSPLandroid/telephony/TelephonyManager;->isVoiceCapable()Z
 HSPLandroid/telephony/TelephonyManager;->listen(Landroid/telephony/PhoneStateListener;I)V
-HPLandroid/telephony/TelephonyManager;->requestCellInfoUpdate(Landroid/os/WorkSource;Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyManager$CellInfoCallback;)V
-HSPLandroid/telephony/TelephonyManager;->requestModemActivityInfo(Landroid/os/ResultReceiver;)V
-HSPLandroid/telephony/TelephonyManager;->setBasebandVersionForPhone(ILjava/lang/String;)V
-HSPLandroid/telephony/TelephonyManager;->setDataNetworkTypeForPhone(II)V
-HSPLandroid/telephony/TelephonyManager;->setNetworkOperatorNameForPhone(ILjava/lang/String;)V
-HSPLandroid/telephony/TelephonyManager;->setNetworkOperatorNumericForPhone(ILjava/lang/String;)V
-HSPLandroid/telephony/TelephonyManager;->setNetworkRoamingForPhone(IZ)V
-HSPLandroid/telephony/TelephonyManager;->setPhoneType(II)V
-HSPLandroid/telephony/TelephonyManager;->setSimStateForPhone(ILjava/lang/String;)V
-HSPLandroid/telephony/TelephonyManager;->updateTelephonyProperty(Ljava/util/List;ILjava/lang/Object;)Ljava/util/List;
 HSPLandroid/telephony/TelephonyRegistryManager$1;-><init>(Landroid/telephony/TelephonyRegistryManager;Ljava/util/concurrent/Executor;Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V
 HSPLandroid/telephony/TelephonyRegistryManager$1;->lambda$onSubscriptionsChanged$0(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V
 HSPLandroid/telephony/TelephonyRegistryManager$1;->onSubscriptionsChanged()V
-HSPLandroid/telephony/TelephonyRegistryManager$2;-><init>(Landroid/telephony/TelephonyRegistryManager;Ljava/util/concurrent/Executor;Landroid/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener;)V
 HSPLandroid/telephony/TelephonyRegistryManager;-><init>(Landroid/content/Context;)V
-HSPLandroid/telephony/TelephonyRegistryManager;->addOnOpportunisticSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener;Ljava/util/concurrent/Executor;)V
 HSPLandroid/telephony/TelephonyRegistryManager;->addOnSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;Ljava/util/concurrent/Executor;)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyActiveDataSubIdChanged(I)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyCellInfoChanged(ILjava/util/List;)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyCellLocation(ILandroid/os/Bundle;)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyDataActivationStateChanged(III)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyDataActivityChanged(II)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyDataConnectionForSubscriber(IIIZLjava/lang/String;Ljava/lang/String;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;IZ)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyEmergencyNumberList(II)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyOtaspChanged(II)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyPhoneCapabilityChanged(Landroid/telephony/PhoneCapability;)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyPreciseCallState(IIIII)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyRadioPowerStateChanged(III)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyServiceStateChanged(IILandroid/telephony/ServiceState;)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifySignalStrengthChanged(IILandroid/telephony/SignalStrength;)V
-HSPLandroid/telephony/TelephonyRegistryManager;->notifyVoiceActivationStateChanged(III)V
-HSPLandroid/telephony/UiccCardInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/UiccCardInfo;
-HSPLandroid/telephony/UiccCardInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/UiccCardInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/telephony/UiccCardInfo;-><init>(Landroid/os/Parcel;Landroid/telephony/UiccCardInfo$1;)V
-HSPLandroid/telephony/UiccCardInfo;-><init>(ZILjava/lang/String;Ljava/lang/String;IZ)V
-HSPLandroid/telephony/UiccCardInfo;->getCardId()I
-HSPLandroid/telephony/UiccCardInfo;->getEid()Ljava/lang/String;
-HSPLandroid/telephony/UiccCardInfo;->getIccId()Ljava/lang/String;
-HSPLandroid/telephony/UiccCardInfo;->getSlotIndex()I
-HSPLandroid/telephony/UiccCardInfo;->isEuicc()Z
-HSPLandroid/telephony/UiccCardInfo;->isRemovable()Z
-HSPLandroid/telephony/UiccCardInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/telephony/UiccSlotInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/UiccSlotInfo;
-HSPLandroid/telephony/UiccSlotInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/UiccSlotInfo$1;->newArray(I)[Landroid/telephony/UiccSlotInfo;
-HSPLandroid/telephony/UiccSlotInfo$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/telephony/UiccSlotInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/telephony/UiccSlotInfo;-><init>(Landroid/os/Parcel;Landroid/telephony/UiccSlotInfo$1;)V
-HSPLandroid/telephony/UiccSlotInfo;->getCardId()Ljava/lang/String;
-HSPLandroid/telephony/UiccSlotInfo;->getCardStateInfo()I
-HSPLandroid/telephony/UiccSlotInfo;->getIsActive()Z
-HSPLandroid/telephony/UiccSlotInfo;->getIsEuicc()Z
-HSPLandroid/telephony/UiccSlotInfo;->getLogicalSlotIdx()I
-HSPLandroid/telephony/UiccSlotInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/telephony/TelephonyRegistryManager;->listenForSubscriber(ILjava/lang/String;Ljava/lang/String;Landroid/telephony/PhoneStateListener;IZ)V
 HSPLandroid/telephony/VoiceSpecificRegistrationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/VoiceSpecificRegistrationInfo;
 HSPLandroid/telephony/VoiceSpecificRegistrationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/telephony/VoiceSpecificRegistrationInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/telephony/VoiceSpecificRegistrationInfo;-><init>(Landroid/os/Parcel;Landroid/telephony/VoiceSpecificRegistrationInfo$1;)V
 HSPLandroid/telephony/VoiceSpecificRegistrationInfo;-><init>(Landroid/telephony/VoiceSpecificRegistrationInfo;)V
-HSPLandroid/telephony/VoiceSpecificRegistrationInfo;-><init>(ZIII)V
-HPLandroid/telephony/VoiceSpecificRegistrationInfo;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/VoiceSpecificRegistrationInfo;->toString()Ljava/lang/String;
-HSPLandroid/telephony/VoiceSpecificRegistrationInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/telephony/data/ApnSetting$Builder;-><init>()V
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$000(Landroid/telephony/data/ApnSetting$Builder;)Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$100(Landroid/telephony/data/ApnSetting$Builder;)Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$1000(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$1100(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$1200(Landroid/telephony/data/ApnSetting$Builder;)Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$1300(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$1400(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$1500(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$1600(Landroid/telephony/data/ApnSetting$Builder;)Z
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$1700(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$1800(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$1900(Landroid/telephony/data/ApnSetting$Builder;)Z
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$200(Landroid/telephony/data/ApnSetting$Builder;)Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$2000(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$2100(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$2200(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$2300(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$2400(Landroid/telephony/data/ApnSetting$Builder;)Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$2500(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$2600(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$2700(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$300(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$400(Landroid/telephony/data/ApnSetting$Builder;)Landroid/net/Uri;
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$500(Landroid/telephony/data/ApnSetting$Builder;)Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$600(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$700(Landroid/telephony/data/ApnSetting$Builder;)Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$800(Landroid/telephony/data/ApnSetting$Builder;)Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting$Builder;->access$900(Landroid/telephony/data/ApnSetting$Builder;)I
-HSPLandroid/telephony/data/ApnSetting$Builder;->build()Landroid/telephony/data/ApnSetting;
-HSPLandroid/telephony/data/ApnSetting$Builder;->setApnName(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;
-HSPLandroid/telephony/data/ApnSetting$Builder;->setApnTypeBitmask(I)Landroid/telephony/data/ApnSetting$Builder;
-HSPLandroid/telephony/data/ApnSetting$Builder;->setEntryName(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;
-HSPLandroid/telephony/data/ApnSetting$Builder;->setNetworkTypeBitmask(I)Landroid/telephony/data/ApnSetting$Builder;
-HSPLandroid/telephony/data/ApnSetting$Builder;->setProtocol(I)Landroid/telephony/data/ApnSetting$Builder;
-HSPLandroid/telephony/data/ApnSetting$Builder;->setRoamingProtocol(I)Landroid/telephony/data/ApnSetting$Builder;
-HSPLandroid/telephony/data/ApnSetting;-><init>(Landroid/telephony/data/ApnSetting$Builder;)V
-HSPLandroid/telephony/data/ApnSetting;-><init>(Landroid/telephony/data/ApnSetting$Builder;Landroid/telephony/data/ApnSetting$1;)V
-HSPLandroid/telephony/data/ApnSetting;->UriToString(Landroid/net/Uri;)Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting;->canHandleType(I)Z
-HSPLandroid/telephony/data/ApnSetting;->equals(Ljava/lang/Object;)Z
-HSPLandroid/telephony/data/ApnSetting;->getApnName()Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting;->getApnTypeBitmask()I
-HSPLandroid/telephony/data/ApnSetting;->getApnTypeString(I)Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting;->getApnTypesBitmaskFromString(Ljava/lang/String;)I
-HSPLandroid/telephony/data/ApnSetting;->getApnTypesStringFromBitmask(I)Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting;->getAuthType()I
-HSPLandroid/telephony/data/ApnSetting;->getMaxConns()I
-HSPLandroid/telephony/data/ApnSetting;->getMaxConnsTime()I
-HSPLandroid/telephony/data/ApnSetting;->getMtu()I
-HSPLandroid/telephony/data/ApnSetting;->getNetworkTypeBitmask()I
-HSPLandroid/telephony/data/ApnSetting;->getPassword()Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting;->getProfileId()I
-HSPLandroid/telephony/data/ApnSetting;->getProtocol()I
-HSPLandroid/telephony/data/ApnSetting;->getRoamingProtocol()I
-HSPLandroid/telephony/data/ApnSetting;->getUser()Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting;->getWaitTime()I
-HSPLandroid/telephony/data/ApnSetting;->isEnabled()Z
-HSPLandroid/telephony/data/ApnSetting;->isPersistent()Z
-HSPLandroid/telephony/data/ApnSetting;->portToString(I)Ljava/lang/String;
-HSPLandroid/telephony/data/ApnSetting;->toString()Ljava/lang/String;
-HSPLandroid/telephony/data/DataProfile$Builder;-><init>()V
-HSPLandroid/telephony/data/DataProfile$Builder;->build()Landroid/telephony/data/DataProfile;
-HSPLandroid/telephony/data/DataProfile$Builder;->enable(Z)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setApn(Ljava/lang/String;)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setAuthType(I)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setBearerBitmask(I)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setMaxConnections(I)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setMaxConnectionsTime(I)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setMtu(I)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setPassword(Ljava/lang/String;)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setPersistent(Z)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setPreferred(Z)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setProfileId(I)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setProtocolType(I)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setRoamingProtocolType(I)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setSupportedApnTypesBitmask(I)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setType(I)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setUserName(Ljava/lang/String;)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile$Builder;->setWaitTime(I)Landroid/telephony/data/DataProfile$Builder;
-HSPLandroid/telephony/data/DataProfile;-><init>(ILjava/lang/String;IILjava/lang/String;Ljava/lang/String;IIIIZIIIIZZ)V
-HSPLandroid/telephony/data/DataProfile;-><init>(ILjava/lang/String;IILjava/lang/String;Ljava/lang/String;IIIIZIIIIZZLandroid/telephony/data/DataProfile$1;)V
-HSPLandroid/telephony/data/DataService$DataServiceHandler;-><init>(Landroid/telephony/data/DataService;Landroid/os/Looper;)V
-HSPLandroid/telephony/data/DataService$DataServiceHandler;->handleMessage(Landroid/os/Message;)V
-HSPLandroid/telephony/data/DataService$DataServiceProvider;-><init>(Landroid/telephony/data/DataService;I)V
-HSPLandroid/telephony/data/DataService$DataServiceProvider;->access$300(Landroid/telephony/data/DataService$DataServiceProvider;Landroid/telephony/data/IDataServiceCallback;)V
-HSPLandroid/telephony/data/DataService$DataServiceProvider;->getSlotIndex()I
-HSPLandroid/telephony/data/DataService$DataServiceProvider;->registerForDataCallListChanged(Landroid/telephony/data/IDataServiceCallback;)V
-HSPLandroid/telephony/data/DataService$IDataServiceWrapper;-><init>(Landroid/telephony/data/DataService;)V
-HSPLandroid/telephony/data/DataService$IDataServiceWrapper;-><init>(Landroid/telephony/data/DataService;Landroid/telephony/data/DataService$1;)V
-HSPLandroid/telephony/data/DataService$IDataServiceWrapper;->createDataServiceProvider(I)V
-HSPLandroid/telephony/data/DataService$IDataServiceWrapper;->registerForDataCallListChanged(ILandroid/telephony/data/IDataServiceCallback;)V
-HSPLandroid/telephony/data/DataService;-><init>()V
-HSPLandroid/telephony/data/DataService;->access$100(Landroid/telephony/data/DataService;)Landroid/telephony/data/DataService$DataServiceHandler;
-HSPLandroid/telephony/data/DataService;->access$200(Landroid/telephony/data/DataService;)Landroid/util/SparseArray;
-HSPLandroid/telephony/data/DataService;->log(Ljava/lang/String;)V
-HSPLandroid/telephony/data/DataService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
-HSPLandroid/telephony/data/IDataService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/telephony/data/IDataService$Stub$Proxy;->createDataServiceProvider(I)V
-HSPLandroid/telephony/data/IDataService$Stub$Proxy;->registerForDataCallListChanged(ILandroid/telephony/data/IDataServiceCallback;)V
-HSPLandroid/telephony/data/IDataService$Stub;-><init>()V
-HSPLandroid/telephony/data/IDataService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/data/IDataService;
-HSPLandroid/telephony/data/IDataService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/telephony/data/IDataServiceCallback$Stub;-><init>()V
-HSPLandroid/telephony/data/IDataServiceCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/telephony/data/IDataServiceCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/data/IDataServiceCallback;
-HSPLandroid/telephony/data/IQualifiedNetworksService$Stub;-><init>()V
-HSPLandroid/telephony/data/IQualifiedNetworksService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/data/IQualifiedNetworksService;
-HSPLandroid/telephony/data/IQualifiedNetworksService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/telephony/data/IQualifiedNetworksServiceCallback$Stub;-><init>()V
-HSPLandroid/telephony/data/IQualifiedNetworksServiceCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/telephony/data/IQualifiedNetworksServiceCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/data/IQualifiedNetworksServiceCallback;
-PLandroid/telephony/emergency/EmergencyNumber$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/emergency/EmergencyNumber;
-PLandroid/telephony/emergency/EmergencyNumber$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/telephony/emergency/EmergencyNumber;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/telephony/emergency/EmergencyNumber;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/util/List;II)V
-HSPLandroid/telephony/emergency/EmergencyNumber;->areSameEmergencyNumbers(Landroid/telephony/emergency/EmergencyNumber;Landroid/telephony/emergency/EmergencyNumber;)Z
-HSPLandroid/telephony/emergency/EmergencyNumber;->compareTo(Landroid/telephony/emergency/EmergencyNumber;)I
-HSPLandroid/telephony/emergency/EmergencyNumber;->compareTo(Ljava/lang/Object;)I
-HSPLandroid/telephony/emergency/EmergencyNumber;->equals(Ljava/lang/Object;)Z
-HSPLandroid/telephony/emergency/EmergencyNumber;->getCountryIso()Ljava/lang/String;
-HSPLandroid/telephony/emergency/EmergencyNumber;->getDisplayPriorityScore()I
-HSPLandroid/telephony/emergency/EmergencyNumber;->getEmergencyCallRouting()I
-HSPLandroid/telephony/emergency/EmergencyNumber;->getEmergencyNumberSourceBitmask()I
-HSPLandroid/telephony/emergency/EmergencyNumber;->getEmergencyServiceCategoryBitmask()I
-HSPLandroid/telephony/emergency/EmergencyNumber;->getEmergencyUrns()Ljava/util/List;
-HSPLandroid/telephony/emergency/EmergencyNumber;->getMnc()Ljava/lang/String;
-HSPLandroid/telephony/emergency/EmergencyNumber;->getNumber()Ljava/lang/String;
-HSPLandroid/telephony/emergency/EmergencyNumber;->isFromSources(I)Z
-HSPLandroid/telephony/emergency/EmergencyNumber;->mergeSameEmergencyNumbers(Landroid/telephony/emergency/EmergencyNumber;Landroid/telephony/emergency/EmergencyNumber;)Landroid/telephony/emergency/EmergencyNumber;
-HSPLandroid/telephony/emergency/EmergencyNumber;->mergeSameNumbersInEmergencyNumberList(Ljava/util/List;)V
-HSPLandroid/telephony/emergency/EmergencyNumber;->toString()Ljava/lang/String;
-HSPLandroid/telephony/emergency/EmergencyNumber;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/telephony/euicc/EuiccManager;-><init>(Landroid/content/Context;)V
-HSPLandroid/telephony/euicc/EuiccManager;->getIEuiccController()Lcom/android/internal/telephony/euicc/IEuiccController;
-HSPLandroid/telephony/euicc/EuiccManager;->isEnabled()Z
-HSPLandroid/telephony/euicc/EuiccManager;->refreshCardIdIfUninitialized()Z
-HSPLandroid/telephony/gsm/GsmCellLocation;-><init>()V
-HSPLandroid/telephony/gsm/GsmCellLocation;->fillInNotifierBundle(Landroid/os/Bundle;)V
-HSPLandroid/telephony/gsm/GsmCellLocation;->setLacAndCid(II)V
-HSPLandroid/telephony/gsm/GsmCellLocation;->setPsc(I)V
-HSPLandroid/telephony/ims/-$$Lambda$ImsMmTelManager$CapabilityCallback$CapabilityBinder$4YNlUy9HsD02E7Sbv2VeVtbao08;-><init>(Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback$CapabilityBinder;I)V
-HSPLandroid/telephony/ims/-$$Lambda$ImsMmTelManager$CapabilityCallback$CapabilityBinder$4YNlUy9HsD02E7Sbv2VeVtbao08;->run()V
-HSPLandroid/telephony/ims/-$$Lambda$ProvisioningManager$Callback$CallbackBinder$R_8jXQuOM7aV7dIwYBzcWwV-YpM;-><init>(Landroid/telephony/ims/ProvisioningManager$Callback$CallbackBinder;II)V
-HSPLandroid/telephony/ims/-$$Lambda$ProvisioningManager$Callback$CallbackBinder$R_8jXQuOM7aV7dIwYBzcWwV-YpM;->run()V
-HSPLandroid/telephony/ims/ImsMmTelManager$CapabilityCallback$CapabilityBinder;-><init>(Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback;)V
-HSPLandroid/telephony/ims/ImsMmTelManager$CapabilityCallback$CapabilityBinder;->access$000(Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback$CapabilityBinder;Ljava/util/concurrent/Executor;)V
-HSPLandroid/telephony/ims/ImsMmTelManager$CapabilityCallback$CapabilityBinder;->lambda$onCapabilitiesStatusChanged$0$ImsMmTelManager$CapabilityCallback$CapabilityBinder(I)V
-HSPLandroid/telephony/ims/ImsMmTelManager$CapabilityCallback$CapabilityBinder;->onCapabilitiesStatusChanged(I)V
-HSPLandroid/telephony/ims/ImsMmTelManager$CapabilityCallback$CapabilityBinder;->setExecutor(Ljava/util/concurrent/Executor;)V
-HSPLandroid/telephony/ims/ImsMmTelManager$CapabilityCallback;-><init>()V
-HSPLandroid/telephony/ims/ImsMmTelManager$CapabilityCallback;->getBinder()Landroid/telephony/ims/aidl/IImsCapabilityCallback;
-HSPLandroid/telephony/ims/ImsMmTelManager$CapabilityCallback;->setExecutor(Ljava/util/concurrent/Executor;)V
-HSPLandroid/telephony/ims/ImsReasonInfo;-><init>()V
-HPLandroid/telephony/ims/ImsReasonInfo;-><init>(II)V
-HSPLandroid/telephony/ims/ImsReasonInfo;->getCode()I
-HSPLandroid/telephony/ims/ImsReasonInfo;->getExtraCode()I
-HSPLandroid/telephony/ims/ImsReasonInfo;->getExtraMessage()Ljava/lang/String;
-HSPLandroid/telephony/ims/ImsReasonInfo;->toString()Ljava/lang/String;
-HSPLandroid/telephony/ims/ImsReasonInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/telephony/ims/ImsService$1;-><init>(Landroid/telephony/ims/ImsService;)V
-HSPLandroid/telephony/ims/ImsService$1;->createMmTelFeature(ILcom/android/ims/internal/IImsFeatureStatusCallback;)Landroid/telephony/ims/aidl/IImsMmTelFeature;
-HPLandroid/telephony/ims/ImsService$1;->disableIms(I)V
-HSPLandroid/telephony/ims/ImsService$1;->getConfig(I)Landroid/telephony/ims/aidl/IImsConfig;
-HSPLandroid/telephony/ims/ImsService$1;->getRegistration(I)Landroid/telephony/ims/aidl/IImsRegistration;
-HSPLandroid/telephony/ims/ImsService$1;->notifyImsServiceReadyForFeatureCreation()V
-HSPLandroid/telephony/ims/ImsService$1;->setListener(Landroid/telephony/ims/aidl/IImsServiceControllerListener;)V
-HSPLandroid/telephony/ims/ImsService$Listener;-><init>()V
-HSPLandroid/telephony/ims/ImsService;-><init>()V
-HSPLandroid/telephony/ims/ImsService;->access$002(Landroid/telephony/ims/ImsService;Landroid/telephony/ims/aidl/IImsServiceControllerListener;)Landroid/telephony/ims/aidl/IImsServiceControllerListener;
-HSPLandroid/telephony/ims/ImsService;->access$100(Landroid/telephony/ims/ImsService;ILcom/android/ims/internal/IImsFeatureStatusCallback;)Landroid/telephony/ims/aidl/IImsMmTelFeature;
-HSPLandroid/telephony/ims/ImsService;->addImsFeature(IILandroid/telephony/ims/feature/ImsFeature;)V
-HSPLandroid/telephony/ims/ImsService;->createMmTelFeatureInternal(ILcom/android/ims/internal/IImsFeatureStatusCallback;)Landroid/telephony/ims/aidl/IImsMmTelFeature;
-HSPLandroid/telephony/ims/ImsService;->setupFeature(Landroid/telephony/ims/feature/ImsFeature;IILcom/android/ims/internal/IImsFeatureStatusCallback;)V
-HSPLandroid/telephony/ims/ImsUtListener;-><init>(Lcom/android/ims/internal/IImsUtListener;)V
-HSPLandroid/telephony/ims/ProvisioningManager$Callback$CallbackBinder;-><init>(Landroid/telephony/ims/ProvisioningManager$Callback;)V
-HSPLandroid/telephony/ims/ProvisioningManager$Callback$CallbackBinder;-><init>(Landroid/telephony/ims/ProvisioningManager$Callback;Landroid/telephony/ims/ProvisioningManager$1;)V
-HSPLandroid/telephony/ims/ProvisioningManager$Callback$CallbackBinder;->access$100(Landroid/telephony/ims/ProvisioningManager$Callback$CallbackBinder;Ljava/util/concurrent/Executor;)V
-HSPLandroid/telephony/ims/ProvisioningManager$Callback$CallbackBinder;->lambda$onIntConfigChanged$0$ProvisioningManager$Callback$CallbackBinder(II)V
-HSPLandroid/telephony/ims/ProvisioningManager$Callback$CallbackBinder;->onIntConfigChanged(II)V
-HSPLandroid/telephony/ims/ProvisioningManager$Callback$CallbackBinder;->setExecutor(Ljava/util/concurrent/Executor;)V
-HSPLandroid/telephony/ims/ProvisioningManager$Callback;-><init>()V
-HSPLandroid/telephony/ims/ProvisioningManager$Callback;->getBinder()Landroid/telephony/ims/aidl/IImsConfigCallback;
-HSPLandroid/telephony/ims/ProvisioningManager$Callback;->setExecutor(Ljava/util/concurrent/Executor;)V
 HSPLandroid/telephony/ims/RegistrationManager$RegistrationCallback$RegistrationBinder;-><init>(Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V
-HSPLandroid/telephony/ims/RegistrationManager$RegistrationCallback$RegistrationBinder;->access$000(Landroid/telephony/ims/RegistrationManager$RegistrationCallback$RegistrationBinder;Ljava/util/concurrent/Executor;)V
-HSPLandroid/telephony/ims/RegistrationManager$RegistrationCallback$RegistrationBinder;->lambda$onDeregistered$2$RegistrationManager$RegistrationCallback$RegistrationBinder(Landroid/telephony/ims/ImsReasonInfo;)V
-HSPLandroid/telephony/ims/RegistrationManager$RegistrationCallback$RegistrationBinder;->onDeregistered(Landroid/telephony/ims/ImsReasonInfo;)V
-HSPLandroid/telephony/ims/RegistrationManager$RegistrationCallback$RegistrationBinder;->setExecutor(Ljava/util/concurrent/Executor;)V
 HSPLandroid/telephony/ims/RegistrationManager$RegistrationCallback;-><init>()V
-HSPLandroid/telephony/ims/RegistrationManager$RegistrationCallback;->getBinder()Landroid/telephony/ims/aidl/IImsRegistrationCallback;
-HSPLandroid/telephony/ims/RegistrationManager$RegistrationCallback;->setExecutor(Ljava/util/concurrent/Executor;)V
-HSPLandroid/telephony/ims/aidl/IImsCapabilityCallback$Stub;-><init>()V
-HSPLandroid/telephony/ims/aidl/IImsCapabilityCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/telephony/ims/aidl/IImsConfig$Stub;-><init>()V
-HSPLandroid/telephony/ims/aidl/IImsConfig$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/telephony/ims/aidl/IImsConfig$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/telephony/ims/aidl/IImsConfigCallback$Stub;-><init>()V
-HSPLandroid/telephony/ims/aidl/IImsConfigCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/telephony/ims/aidl/IImsMmTelFeature$Stub;-><init>()V
-HSPLandroid/telephony/ims/aidl/IImsMmTelFeature$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/telephony/ims/aidl/IImsMmTelFeature$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/ims/aidl/IImsMmTelFeature;
-HSPLandroid/telephony/ims/aidl/IImsMmTelFeature$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/telephony/ims/aidl/IImsMmTelListener$Stub;-><init>()V
-HSPLandroid/telephony/ims/aidl/IImsRegistration$Stub;-><init>()V
-HPLandroid/telephony/ims/aidl/IImsRegistration$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/ims/aidl/IImsRegistration;
 HSPLandroid/telephony/ims/aidl/IImsRegistrationCallback$Stub;-><init>()V
-HSPLandroid/telephony/ims/aidl/IImsRegistrationCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/telephony/ims/aidl/IImsServiceController$Stub;-><init>()V
-HSPLandroid/telephony/ims/aidl/IImsServiceController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/ims/aidl/IImsServiceController;
-HSPLandroid/telephony/ims/aidl/IImsServiceControllerListener$Stub;-><init>()V
-HSPLandroid/telephony/ims/aidl/IImsSmsListener$Stub;-><init>()V
-HSPLandroid/telephony/ims/feature/-$$Lambda$ImsFeature$9bLETU1BeS-dFzQnbBBs3kwaz-8;-><init>(Landroid/telephony/ims/feature/ImsFeature$Capabilities;)V
-HSPLandroid/telephony/ims/feature/-$$Lambda$ImsFeature$9bLETU1BeS-dFzQnbBBs3kwaz-8;->accept(Ljava/lang/Object;)V
-HSPLandroid/telephony/ims/feature/-$$Lambda$ImsFeature$rPSMsRhoup9jfT6nt1MV2qhomrM;-><init>(I)V
-HPLandroid/telephony/ims/feature/-$$Lambda$ImsFeature$rPSMsRhoup9jfT6nt1MV2qhomrM;->accept(Ljava/lang/Object;)V
-HPLandroid/telephony/ims/feature/CapabilityChangeRequest$CapabilityPair;->getCapability()I
-HPLandroid/telephony/ims/feature/CapabilityChangeRequest$CapabilityPair;->getRadioTech()I
-HPLandroid/telephony/ims/feature/CapabilityChangeRequest$CapabilityPair;->hashCode()I
-HPLandroid/telephony/ims/feature/CapabilityChangeRequest$CapabilityPair;->toString()Ljava/lang/String;
-HPLandroid/telephony/ims/feature/CapabilityChangeRequest;-><init>()V
-HPLandroid/telephony/ims/feature/CapabilityChangeRequest;->addCapabilitiesToDisableForTech(II)V
-HPLandroid/telephony/ims/feature/CapabilityChangeRequest;->getCapabilitiesToDisable()Ljava/util/List;
-HPLandroid/telephony/ims/feature/CapabilityChangeRequest;->getCapabilitiesToEnable()Ljava/util/List;
-HPLandroid/telephony/ims/feature/CapabilityChangeRequest;->toString()Ljava/lang/String;
-HSPLandroid/telephony/ims/feature/ImsFeature$Capabilities;-><init>()V
-HSPLandroid/telephony/ims/feature/ImsFeature$Capabilities;-><init>(I)V
-HSPLandroid/telephony/ims/feature/ImsFeature$Capabilities;->copy()Landroid/telephony/ims/feature/ImsFeature$Capabilities;
-HSPLandroid/telephony/ims/feature/ImsFeature$Capabilities;->isCapable(I)Z
-HSPLandroid/telephony/ims/feature/ImsFeature;-><init>()V
-HSPLandroid/telephony/ims/feature/ImsFeature;->addCapabilityCallback(Landroid/telephony/ims/aidl/IImsCapabilityCallback;)V
-HSPLandroid/telephony/ims/feature/ImsFeature;->addImsFeatureStatusCallback(Lcom/android/ims/internal/IImsFeatureStatusCallback;)V
-HSPLandroid/telephony/ims/feature/ImsFeature;->getFeatureState()I
-HSPLandroid/telephony/ims/feature/ImsFeature;->initialize(Landroid/content/Context;I)V
-HSPLandroid/telephony/ims/feature/ImsFeature;->lambda$notifyCapabilitiesStatusChanged$1(Landroid/telephony/ims/feature/ImsFeature$Capabilities;Landroid/telephony/ims/aidl/IImsCapabilityCallback;)V
-HPLandroid/telephony/ims/feature/ImsFeature;->lambda$notifyFeatureState$0(ILcom/android/ims/internal/IImsFeatureStatusCallback;)V
-HSPLandroid/telephony/ims/feature/ImsFeature;->notifyCapabilitiesStatusChanged(Landroid/telephony/ims/feature/ImsFeature$Capabilities;)V
-HSPLandroid/telephony/ims/feature/ImsFeature;->notifyFeatureState(I)V
-HSPLandroid/telephony/ims/feature/ImsFeature;->queryCapabilityStatus()Landroid/telephony/ims/feature/ImsFeature$Capabilities;
-HSPLandroid/telephony/ims/feature/ImsFeature;->setFeatureState(I)V
-HSPLandroid/telephony/ims/feature/MmTelFeature$1;-><init>(Landroid/telephony/ims/feature/MmTelFeature;)V
-HSPLandroid/telephony/ims/feature/MmTelFeature$1;->addCapabilityCallback(Landroid/telephony/ims/aidl/IImsCapabilityCallback;)V
-HPLandroid/telephony/ims/feature/MmTelFeature$1;->changeCapabilitiesConfiguration(Landroid/telephony/ims/feature/CapabilityChangeRequest;Landroid/telephony/ims/aidl/IImsCapabilityCallback;)V
-HSPLandroid/telephony/ims/feature/MmTelFeature$1;->getEcbmInterface()Lcom/android/ims/internal/IImsEcbm;
-HSPLandroid/telephony/ims/feature/MmTelFeature$1;->getFeatureState()I
-HSPLandroid/telephony/ims/feature/MmTelFeature$1;->getMultiEndpointInterface()Lcom/android/ims/internal/IImsMultiEndpoint;
-HSPLandroid/telephony/ims/feature/MmTelFeature$1;->getUtInterface()Lcom/android/ims/internal/IImsUt;
-HSPLandroid/telephony/ims/feature/MmTelFeature$1;->onSmsReady()V
-HSPLandroid/telephony/ims/feature/MmTelFeature$1;->setListener(Landroid/telephony/ims/aidl/IImsMmTelListener;)V
-HSPLandroid/telephony/ims/feature/MmTelFeature$1;->setSmsListener(Landroid/telephony/ims/aidl/IImsSmsListener;)V
-HSPLandroid/telephony/ims/feature/MmTelFeature$1;->setUiTtyMode(ILandroid/os/Message;)V
-HSPLandroid/telephony/ims/feature/MmTelFeature$Listener;-><init>()V
-HSPLandroid/telephony/ims/feature/MmTelFeature$MmTelCapabilities;-><init>()V
-HSPLandroid/telephony/ims/feature/MmTelFeature$MmTelCapabilities;-><init>(I)V
-HSPLandroid/telephony/ims/feature/MmTelFeature$MmTelCapabilities;-><init>(Landroid/telephony/ims/feature/ImsFeature$Capabilities;)V
-HSPLandroid/telephony/ims/feature/MmTelFeature$MmTelCapabilities;->isCapable(I)Z
-HSPLandroid/telephony/ims/feature/MmTelFeature$MmTelCapabilities;->toString()Ljava/lang/String;
-HSPLandroid/telephony/ims/feature/MmTelFeature;-><init>()V
-HSPLandroid/telephony/ims/feature/MmTelFeature;->access$000(Landroid/telephony/ims/feature/MmTelFeature;Landroid/telephony/ims/aidl/IImsMmTelListener;)V
-HSPLandroid/telephony/ims/feature/MmTelFeature;->access$100(Landroid/telephony/ims/feature/MmTelFeature;Landroid/telephony/ims/aidl/IImsSmsListener;)V
-HSPLandroid/telephony/ims/feature/MmTelFeature;->access$600(Landroid/telephony/ims/feature/MmTelFeature;)V
-HSPLandroid/telephony/ims/feature/MmTelFeature;->getBinder()Landroid/telephony/ims/aidl/IImsMmTelFeature;
-HSPLandroid/telephony/ims/feature/MmTelFeature;->getEcbmInterface()Lcom/android/ims/internal/IImsEcbm;
-HSPLandroid/telephony/ims/feature/MmTelFeature;->getMultiEndpointInterface()Lcom/android/ims/internal/IImsMultiEndpoint;
-HSPLandroid/telephony/ims/feature/MmTelFeature;->getUtInterface()Lcom/android/ims/internal/IImsUt;
-HSPLandroid/telephony/ims/feature/MmTelFeature;->notifyCapabilitiesStatusChanged(Landroid/telephony/ims/feature/MmTelFeature$MmTelCapabilities;)V
-HSPLandroid/telephony/ims/feature/MmTelFeature;->onSmsReady()V
-HSPLandroid/telephony/ims/feature/MmTelFeature;->queryCapabilityStatus()Landroid/telephony/ims/feature/ImsFeature$Capabilities;
-HSPLandroid/telephony/ims/feature/MmTelFeature;->queryCapabilityStatus()Landroid/telephony/ims/feature/MmTelFeature$MmTelCapabilities;
-HSPLandroid/telephony/ims/feature/MmTelFeature;->setListener(Landroid/telephony/ims/aidl/IImsMmTelListener;)V
-HSPLandroid/telephony/ims/feature/MmTelFeature;->setSmsListener(Landroid/telephony/ims/aidl/IImsSmsListener;)V
-HSPLandroid/telephony/ims/stub/-$$Lambda$ImsConfigImplBase$yL4863k-FoQyqg_FX2mWsLMqbyA;-><init>(II)V
-HSPLandroid/telephony/ims/stub/-$$Lambda$ImsConfigImplBase$yL4863k-FoQyqg_FX2mWsLMqbyA;->accept(Ljava/lang/Object;)V
-HSPLandroid/telephony/ims/stub/-$$Lambda$ImsRegistrationImplBase$s7PspXVbCf1Q_WSzodP2glP9TjI;-><init>(Landroid/telephony/ims/ImsReasonInfo;)V
-HSPLandroid/telephony/ims/stub/-$$Lambda$ImsRegistrationImplBase$s7PspXVbCf1Q_WSzodP2glP9TjI;->accept(Ljava/lang/Object;)V
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase$ImsConfigStub;-><init>(Landroid/telephony/ims/stub/ImsConfigImplBase;)V
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase$ImsConfigStub;->addImsConfigCallback(Landroid/telephony/ims/aidl/IImsConfigCallback;)V
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase$ImsConfigStub;->getImsConfigImpl()Landroid/telephony/ims/stub/ImsConfigImplBase;
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase$ImsConfigStub;->notifyImsConfigChanged(II)V
-HPLandroid/telephony/ims/stub/ImsConfigImplBase$ImsConfigStub;->removeImsConfigCallback(Landroid/telephony/ims/aidl/IImsConfigCallback;)V
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase$ImsConfigStub;->setConfigInt(II)I
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase$ImsConfigStub;->updateCachedValue(IIZ)V
-HPLandroid/telephony/ims/stub/ImsConfigImplBase$ImsConfigStub;->updateImsCarrierConfigs(Landroid/os/PersistableBundle;)V
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase;-><init>()V
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase;->access$000(Landroid/telephony/ims/stub/ImsConfigImplBase;Landroid/telephony/ims/aidl/IImsConfigCallback;)V
-HPLandroid/telephony/ims/stub/ImsConfigImplBase;->access$100(Landroid/telephony/ims/stub/ImsConfigImplBase;Landroid/telephony/ims/aidl/IImsConfigCallback;)V
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase;->access$200(Landroid/telephony/ims/stub/ImsConfigImplBase;II)V
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase;->addImsConfigCallback(Landroid/telephony/ims/aidl/IImsConfigCallback;)V
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase;->getIImsConfig()Landroid/telephony/ims/aidl/IImsConfig;
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase;->lambda$notifyConfigChanged$0(IILandroid/telephony/ims/aidl/IImsConfigCallback;)V
-HSPLandroid/telephony/ims/stub/ImsConfigImplBase;->notifyConfigChanged(II)V
-HPLandroid/telephony/ims/stub/ImsConfigImplBase;->removeImsConfigCallback(Landroid/telephony/ims/aidl/IImsConfigCallback;)V
-HPLandroid/telephony/ims/stub/ImsConfigImplBase;->updateImsCarrierConfigs(Landroid/os/PersistableBundle;)V
-HSPLandroid/telephony/ims/stub/ImsEcbmImplBase$1;-><init>(Landroid/telephony/ims/stub/ImsEcbmImplBase;)V
-HSPLandroid/telephony/ims/stub/ImsEcbmImplBase$1;->setListener(Lcom/android/ims/internal/IImsEcbmListener;)V
-HSPLandroid/telephony/ims/stub/ImsEcbmImplBase;-><init>()V
-HSPLandroid/telephony/ims/stub/ImsEcbmImplBase;->access$002(Landroid/telephony/ims/stub/ImsEcbmImplBase;Lcom/android/ims/internal/IImsEcbmListener;)Lcom/android/ims/internal/IImsEcbmListener;
-HSPLandroid/telephony/ims/stub/ImsEcbmImplBase;->getImsEcbm()Lcom/android/ims/internal/IImsEcbm;
-HSPLandroid/telephony/ims/stub/ImsFeatureConfiguration$FeatureSlotPair;-><init>(II)V
-HSPLandroid/telephony/ims/stub/ImsFeatureConfiguration$FeatureSlotPair;->equals(Ljava/lang/Object;)Z
-HSPLandroid/telephony/ims/stub/ImsFeatureConfiguration$FeatureSlotPair;->hashCode()I
-HSPLandroid/telephony/ims/stub/ImsFeatureConfiguration$FeatureSlotPair;->toString()Ljava/lang/String;
-HSPLandroid/telephony/ims/stub/ImsMultiEndpointImplBase$1;-><init>(Landroid/telephony/ims/stub/ImsMultiEndpointImplBase;)V
-HSPLandroid/telephony/ims/stub/ImsMultiEndpointImplBase$1;->setListener(Lcom/android/ims/internal/IImsExternalCallStateListener;)V
-HSPLandroid/telephony/ims/stub/ImsMultiEndpointImplBase;-><init>()V
-HSPLandroid/telephony/ims/stub/ImsMultiEndpointImplBase;->access$002(Landroid/telephony/ims/stub/ImsMultiEndpointImplBase;Lcom/android/ims/internal/IImsExternalCallStateListener;)Lcom/android/ims/internal/IImsExternalCallStateListener;
-HSPLandroid/telephony/ims/stub/ImsMultiEndpointImplBase;->getIImsMultiEndpoint()Lcom/android/ims/internal/IImsMultiEndpoint;
-HSPLandroid/telephony/ims/stub/ImsMultiEndpointImplBase;->onImsExternalCallStateUpdate(Ljava/util/List;)V
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase$1;-><init>(Landroid/telephony/ims/stub/ImsRegistrationImplBase;)V
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase$1;->addRegistrationCallback(Landroid/telephony/ims/aidl/IImsRegistrationCallback;)V
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase$1;->getRegistrationTechnology()I
-HPLandroid/telephony/ims/stub/ImsRegistrationImplBase$1;->removeRegistrationCallback(Landroid/telephony/ims/aidl/IImsRegistrationCallback;)V
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase;-><init>()V
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase;->access$000(Landroid/telephony/ims/stub/ImsRegistrationImplBase;Landroid/telephony/ims/aidl/IImsRegistrationCallback;)V
-HPLandroid/telephony/ims/stub/ImsRegistrationImplBase;->access$100(Landroid/telephony/ims/stub/ImsRegistrationImplBase;Landroid/telephony/ims/aidl/IImsRegistrationCallback;)V
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase;->addRegistrationCallback(Landroid/telephony/ims/aidl/IImsRegistrationCallback;)V
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase;->getBinder()Landroid/telephony/ims/aidl/IImsRegistration;
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase;->getConnectionType()I
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase;->lambda$onDeregistered$2(Landroid/telephony/ims/ImsReasonInfo;Landroid/telephony/ims/aidl/IImsRegistrationCallback;)V
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase;->onDeregistered(Landroid/telephony/ims/ImsReasonInfo;)V
-HPLandroid/telephony/ims/stub/ImsRegistrationImplBase;->removeRegistrationCallback(Landroid/telephony/ims/aidl/IImsRegistrationCallback;)V
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase;->updateNewCallbackWithState(Landroid/telephony/ims/aidl/IImsRegistrationCallback;)V
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase;->updateToDisconnectedState(Landroid/telephony/ims/ImsReasonInfo;)V
-HSPLandroid/telephony/ims/stub/ImsRegistrationImplBase;->updateToState(II)V
-HSPLandroid/telephony/ims/stub/ImsSmsImplBase;-><init>()V
-HSPLandroid/telephony/ims/stub/ImsSmsImplBase;->registerSmsListener(Landroid/telephony/ims/aidl/IImsSmsListener;)V
-HSPLandroid/telephony/ims/stub/ImsUtImplBase$1;-><init>(Landroid/telephony/ims/stub/ImsUtImplBase;)V
-HSPLandroid/telephony/ims/stub/ImsUtImplBase$1;->setListener(Lcom/android/ims/internal/IImsUtListener;)V
-HSPLandroid/telephony/ims/stub/ImsUtImplBase;-><init>()V
-HSPLandroid/telephony/ims/stub/ImsUtImplBase;->getInterface()Lcom/android/ims/internal/IImsUt;
 HSPLandroid/text/AndroidBidi$EmojiBidiOverride;->classify(I)I
-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
 HSPLandroid/text/AutoGrowArray$ByteArray;->clear()V
@@ -22133,22 +10668,27 @@
 HSPLandroid/text/AutoGrowArray$IntArray;->append(I)V
 HSPLandroid/text/AutoGrowArray$IntArray;->clear()V
 HSPLandroid/text/AutoGrowArray$IntArray;->clearWithReleasingLargeArray()V
-PLandroid/text/AutoGrowArray$IntArray;->ensureCapacity(I)V
+HSPLandroid/text/AutoGrowArray$IntArray;->ensureCapacity(I)V
 HSPLandroid/text/AutoGrowArray$IntArray;->getRawArray()[I
 HSPLandroid/text/AutoGrowArray;->access$000(II)I
 HSPLandroid/text/AutoGrowArray;->computeNewCapacity(II)I
+HSPLandroid/text/BidiFormatter$DirectionalityEstimator;-><init>(Ljava/lang/CharSequence;Z)V
 HSPLandroid/text/BidiFormatter$DirectionalityEstimator;->dirTypeBackward()B
 HSPLandroid/text/BidiFormatter$DirectionalityEstimator;->dirTypeForward()B
+HSPLandroid/text/BidiFormatter$DirectionalityEstimator;->getCachedDirectionality(C)B
 HSPLandroid/text/BidiFormatter$DirectionalityEstimator;->getEntryDir()I
 HSPLandroid/text/BidiFormatter$DirectionalityEstimator;->getExitDir()I
+HSPLandroid/text/BidiFormatter;->getDefaultInstanceFromContext(Z)Landroid/text/BidiFormatter;
+HSPLandroid/text/BidiFormatter;->getEntryDir(Ljava/lang/CharSequence;)I
+HSPLandroid/text/BidiFormatter;->getExitDir(Ljava/lang/CharSequence;)I
 HSPLandroid/text/BidiFormatter;->getInstance()Landroid/text/BidiFormatter;
+HSPLandroid/text/BidiFormatter;->getStereoReset()Z
 HSPLandroid/text/BidiFormatter;->markAfter(Ljava/lang/CharSequence;Landroid/text/TextDirectionHeuristic;)Ljava/lang/String;
 HSPLandroid/text/BidiFormatter;->markBefore(Ljava/lang/CharSequence;Landroid/text/TextDirectionHeuristic;)Ljava/lang/String;
-HSPLandroid/text/BidiFormatter;->unicodeWrap(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/text/BidiFormatter;->unicodeWrap(Ljava/lang/CharSequence;Landroid/text/TextDirectionHeuristic;Z)Ljava/lang/CharSequence;
-PLandroid/text/BoringLayout$Metrics;-><init>()V
-PLandroid/text/BoringLayout$Metrics;->access$000(Landroid/text/BoringLayout$Metrics;)V
-PLandroid/text/BoringLayout$Metrics;->reset()V
+HSPLandroid/text/BoringLayout$Metrics;-><init>()V
+HSPLandroid/text/BoringLayout$Metrics;->access$000(Landroid/text/BoringLayout$Metrics;)V
+HSPLandroid/text/BoringLayout$Metrics;->reset()V
 HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)V
 HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)V
 HSPLandroid/text/BoringLayout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
@@ -22169,24 +10709,54 @@
 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;ZZ)V
 HSPLandroid/text/BoringLayout;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;Landroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics;
-PLandroid/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;Z)Landroid/text/BoringLayout;
+HSPLandroid/text/BoringLayout;->make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
 HSPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;
-HPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
+HSPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
+HSPLandroid/text/ClipboardManager;-><init>()V
+HSPLandroid/text/DynamicLayout$Builder;-><init>()V
+HSPLandroid/text/DynamicLayout$Builder;->access$1000(Landroid/text/DynamicLayout$Builder;)Z
+HSPLandroid/text/DynamicLayout$Builder;->access$1100(Landroid/text/DynamicLayout$Builder;)I
+HSPLandroid/text/DynamicLayout$Builder;->access$1200(Landroid/text/DynamicLayout$Builder;)I
+HSPLandroid/text/DynamicLayout$Builder;->access$1300(Landroid/text/DynamicLayout$Builder;)I
+HSPLandroid/text/DynamicLayout$Builder;->access$1400(Landroid/text/DynamicLayout$Builder;)Ljava/lang/CharSequence;
+HSPLandroid/text/DynamicLayout$Builder;->access$1500(Landroid/text/DynamicLayout$Builder;)Z
+HSPLandroid/text/DynamicLayout$Builder;->access$1700(Landroid/text/DynamicLayout$Builder;)Landroid/graphics/Paint$FontMetricsInt;
+HSPLandroid/text/DynamicLayout$Builder;->access$200(Landroid/text/DynamicLayout$Builder;)Landroid/text/TextUtils$TruncateAt;
+HSPLandroid/text/DynamicLayout$Builder;->access$300(Landroid/text/DynamicLayout$Builder;)Ljava/lang/CharSequence;
+HSPLandroid/text/DynamicLayout$Builder;->access$400(Landroid/text/DynamicLayout$Builder;)Landroid/text/TextPaint;
+HSPLandroid/text/DynamicLayout$Builder;->access$500(Landroid/text/DynamicLayout$Builder;)I
+HSPLandroid/text/DynamicLayout$Builder;->access$600(Landroid/text/DynamicLayout$Builder;)Landroid/text/Layout$Alignment;
+HSPLandroid/text/DynamicLayout$Builder;->access$700(Landroid/text/DynamicLayout$Builder;)Landroid/text/TextDirectionHeuristic;
+HSPLandroid/text/DynamicLayout$Builder;->access$800(Landroid/text/DynamicLayout$Builder;)F
+HSPLandroid/text/DynamicLayout$Builder;->access$900(Landroid/text/DynamicLayout$Builder;)F
+HSPLandroid/text/DynamicLayout$Builder;->build()Landroid/text/DynamicLayout;
 HSPLandroid/text/DynamicLayout$Builder;->obtain(Ljava/lang/CharSequence;Landroid/text/TextPaint;I)Landroid/text/DynamicLayout$Builder;
-HPLandroid/text/DynamicLayout$ChangeWatcher;->afterTextChanged(Landroid/text/Editable;)V
-HPLandroid/text/DynamicLayout$ChangeWatcher;->beforeTextChanged(Ljava/lang/CharSequence;III)V
+HSPLandroid/text/DynamicLayout$Builder;->recycle(Landroid/text/DynamicLayout$Builder;)V
+HSPLandroid/text/DynamicLayout$Builder;->setAlignment(Landroid/text/Layout$Alignment;)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$Builder;->setBreakStrategy(I)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$Builder;->setDisplayText(Ljava/lang/CharSequence;)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$Builder;->setEllipsize(Landroid/text/TextUtils$TruncateAt;)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$Builder;->setEllipsizedWidth(I)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$Builder;->setHyphenationFrequency(I)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$Builder;->setIncludePad(Z)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$Builder;->setJustificationMode(I)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$Builder;->setLineSpacing(FF)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$Builder;->setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$Builder;->setUseLineSpacingFromFallbacks(Z)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$ChangeWatcher;-><init>(Landroid/text/DynamicLayout;)V
 HSPLandroid/text/DynamicLayout$ChangeWatcher;->onSpanAdded(Landroid/text/Spannable;Ljava/lang/Object;II)V
-HSPLandroid/text/DynamicLayout$ChangeWatcher;->onSpanChanged(Landroid/text/Spannable;Ljava/lang/Object;IIII)V
-HSPLandroid/text/DynamicLayout$ChangeWatcher;->onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V
-HPLandroid/text/DynamicLayout$ChangeWatcher;->onTextChanged(Ljava/lang/CharSequence;III)V
 HSPLandroid/text/DynamicLayout;-><init>(Landroid/text/DynamicLayout$Builder;)V
+HSPLandroid/text/DynamicLayout;-><init>(Landroid/text/DynamicLayout$Builder;Landroid/text/DynamicLayout$1;)V
 HSPLandroid/text/DynamicLayout;->addBlockAtOffset(I)V
 HSPLandroid/text/DynamicLayout;->contentMayProtrudeFromLineTopOrBottom(Ljava/lang/CharSequence;II)Z
 HSPLandroid/text/DynamicLayout;->createBlocks()V
+HSPLandroid/text/DynamicLayout;->createEllipsizer(Landroid/text/TextUtils$TruncateAt;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 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;->getContentMayProtrudeFromTopOrBottom(I)Z
 HSPLandroid/text/DynamicLayout;->getEllipsisCount(I)I
 HSPLandroid/text/DynamicLayout;->getEllipsisStart(I)I
 HSPLandroid/text/DynamicLayout;->getEllipsizedWidth()I
@@ -22196,7 +10766,6 @@
 HSPLandroid/text/DynamicLayout;->getLineCount()I
 HSPLandroid/text/DynamicLayout;->getLineDescent(I)I
 HSPLandroid/text/DynamicLayout;->getLineDirections(I)Landroid/text/Layout$Directions;
-HPLandroid/text/DynamicLayout;->getLineExtra(I)I
 HSPLandroid/text/DynamicLayout;->getLineStart(I)I
 HSPLandroid/text/DynamicLayout;->getLineTop(I)I
 HSPLandroid/text/DynamicLayout;->getNumberOfBlocks()I
@@ -22210,95 +10779,49 @@
 HSPLandroid/text/Editable$Factory;->newEditable(Ljava/lang/CharSequence;)Landroid/text/Editable;
 HSPLandroid/text/Emoji;->isNewEmoji(I)Z
 HSPLandroid/text/Html$HtmlParser;->access$000()Lorg/ccil/cowan/tagsoup/HTMLSchema;
-HPLandroid/text/Html;->encodeTextAlignmentByDiv(Ljava/lang/StringBuilder;Landroid/text/Spanned;I)V
 HSPLandroid/text/Html;->fromHtml(Ljava/lang/String;)Landroid/text/Spanned;
-HSPLandroid/text/Html;->fromHtml(Ljava/lang/String;I)Landroid/text/Spanned;
 HSPLandroid/text/Html;->fromHtml(Ljava/lang/String;ILandroid/text/Html$ImageGetter;Landroid/text/Html$TagHandler;)Landroid/text/Spanned;
-HSPLandroid/text/Html;->fromHtml(Ljava/lang/String;Landroid/text/Html$ImageGetter;Landroid/text/Html$TagHandler;)Landroid/text/Spanned;
-HPLandroid/text/Html;->getTextDirection(Landroid/text/Spanned;II)Ljava/lang/String;
-HPLandroid/text/Html;->toHtml(Landroid/text/Spanned;)Ljava/lang/String;
-HPLandroid/text/Html;->toHtml(Landroid/text/Spanned;I)Ljava/lang/String;
-HPLandroid/text/Html;->withinBlockquote(Ljava/lang/StringBuilder;Landroid/text/Spanned;III)V
-HPLandroid/text/Html;->withinBlockquoteConsecutive(Ljava/lang/StringBuilder;Landroid/text/Spanned;II)V
-HPLandroid/text/Html;->withinDiv(Ljava/lang/StringBuilder;Landroid/text/Spanned;III)V
-HPLandroid/text/Html;->withinHtml(Ljava/lang/StringBuilder;Landroid/text/Spanned;I)V
-HPLandroid/text/Html;->withinParagraph(Ljava/lang/StringBuilder;Landroid/text/Spanned;II)V
-HPLandroid/text/Html;->withinStyle(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;II)V
-HPLandroid/text/HtmlToSpannedConverter$Heading;->access$1300(Landroid/text/HtmlToSpannedConverter$Heading;)I
 HSPLandroid/text/HtmlToSpannedConverter;-><init>(Ljava/lang/String;Landroid/text/Html$ImageGetter;Landroid/text/Html$TagHandler;Lorg/ccil/cowan/tagsoup/Parser;I)V
-HPLandroid/text/HtmlToSpannedConverter;->appendNewlines(Landroid/text/Editable;I)V
 HSPLandroid/text/HtmlToSpannedConverter;->characters([CII)V
 HSPLandroid/text/HtmlToSpannedConverter;->convert()Landroid/text/Spanned;
-HSPLandroid/text/HtmlToSpannedConverter;->end(Landroid/text/Editable;Ljava/lang/Class;Ljava/lang/Object;)V
-HSPLandroid/text/HtmlToSpannedConverter;->endA(Landroid/text/Editable;)V
-HPLandroid/text/HtmlToSpannedConverter;->endBlockElement(Landroid/text/Editable;)V
-HPLandroid/text/HtmlToSpannedConverter;->endBlockquote(Landroid/text/Editable;)V
-HPLandroid/text/HtmlToSpannedConverter;->endCssStyle(Landroid/text/Editable;)V
 HSPLandroid/text/HtmlToSpannedConverter;->endDocument()V
 HSPLandroid/text/HtmlToSpannedConverter;->endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/text/HtmlToSpannedConverter;->endFont(Landroid/text/Editable;)V
-HPLandroid/text/HtmlToSpannedConverter;->endHeading(Landroid/text/Editable;)V
-HPLandroid/text/HtmlToSpannedConverter;->endLi(Landroid/text/Editable;)V
 HSPLandroid/text/HtmlToSpannedConverter;->endPrefixMapping(Ljava/lang/String;)V
-HPLandroid/text/HtmlToSpannedConverter;->getBackgroundColorPattern()Ljava/util/regex/Pattern;
-HPLandroid/text/HtmlToSpannedConverter;->getForegroundColorPattern()Ljava/util/regex/Pattern;
-HSPLandroid/text/HtmlToSpannedConverter;->getHtmlColor(Ljava/lang/String;)I
-HSPLandroid/text/HtmlToSpannedConverter;->getLast(Landroid/text/Spanned;Ljava/lang/Class;)Ljava/lang/Object;
-HPLandroid/text/HtmlToSpannedConverter;->getTextAlignPattern()Ljava/util/regex/Pattern;
-HPLandroid/text/HtmlToSpannedConverter;->getTextDecorationPattern()Ljava/util/regex/Pattern;
-HPLandroid/text/HtmlToSpannedConverter;->handleBr(Landroid/text/Editable;)V
 HSPLandroid/text/HtmlToSpannedConverter;->handleEndTag(Ljava/lang/String;)V
 HSPLandroid/text/HtmlToSpannedConverter;->handleStartTag(Ljava/lang/String;Lorg/xml/sax/Attributes;)V
 HSPLandroid/text/HtmlToSpannedConverter;->setDocumentLocator(Lorg/xml/sax/Locator;)V
-HSPLandroid/text/HtmlToSpannedConverter;->setSpanFromMark(Landroid/text/Spannable;Ljava/lang/Object;[Ljava/lang/Object;)V
-HSPLandroid/text/HtmlToSpannedConverter;->start(Landroid/text/Editable;Ljava/lang/Object;)V
-HPLandroid/text/HtmlToSpannedConverter;->startBlockElement(Landroid/text/Editable;Lorg/xml/sax/Attributes;I)V
-HPLandroid/text/HtmlToSpannedConverter;->startCssStyle(Landroid/text/Editable;Lorg/xml/sax/Attributes;)V
 HSPLandroid/text/HtmlToSpannedConverter;->startDocument()V
 HSPLandroid/text/HtmlToSpannedConverter;->startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V
-HSPLandroid/text/HtmlToSpannedConverter;->startFont(Landroid/text/Editable;Lorg/xml/sax/Attributes;)V
-HPLandroid/text/HtmlToSpannedConverter;->startImg(Landroid/text/Editable;Lorg/xml/sax/Attributes;Landroid/text/Html$ImageGetter;)V
 HSPLandroid/text/HtmlToSpannedConverter;->startPrefixMapping(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/text/Hyphenator;->init()V
-HSPLandroid/text/InputFilter$LengthFilter;-><init>(I)V
-HSPLandroid/text/InputFilter$LengthFilter;->filter(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence;
 HSPLandroid/text/Layout$Directions;->getRunCount()I
 HSPLandroid/text/Layout$Directions;->getRunLength(I)I
 HSPLandroid/text/Layout$Directions;->getRunStart(I)I
 HSPLandroid/text/Layout$Directions;->isRunRtl(I)Z
+HSPLandroid/text/Layout$Ellipsizer;-><init>(Ljava/lang/CharSequence;)V
 HSPLandroid/text/Layout$Ellipsizer;->charAt(I)C
 HSPLandroid/text/Layout$Ellipsizer;->getChars(II[CI)V
 HSPLandroid/text/Layout$Ellipsizer;->length()I
-HPLandroid/text/Layout$HorizontalMeasurementProvider;->init()V
-HPLandroid/text/Layout$SpannedEllipsizer;->getSpanEnd(Ljava/lang/Object;)I
-HPLandroid/text/Layout$SpannedEllipsizer;->getSpanFlags(Ljava/lang/Object;)I
-HPLandroid/text/Layout$SpannedEllipsizer;->getSpanStart(Ljava/lang/Object;)I
-HPLandroid/text/Layout$SpannedEllipsizer;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
-HPLandroid/text/Layout$SpannedEllipsizer;->nextSpanTransition(IILjava/lang/Class;)I
-HPLandroid/text/Layout$TabStops;-><init>(F[Ljava/lang/Object;)V
-HPLandroid/text/Layout$TabStops;->nextDefaultStop(FF)F
-HPLandroid/text/Layout$TabStops;->nextTab(F)F
-HPLandroid/text/Layout$TabStops;->reset(F[Ljava/lang/Object;)V
+HSPLandroid/text/Layout$SpannedEllipsizer;-><init>(Ljava/lang/CharSequence;)V
+HSPLandroid/text/Layout$SpannedEllipsizer;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/Layout$SpannedEllipsizer;->nextSpanTransition(IILjava/lang/Class;)I
 HSPLandroid/text/Layout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FF)V
 HSPLandroid/text/Layout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FF)V
-HPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/text/Layout;->access$200(Landroid/text/Layout;III[CILandroid/text/TextUtils$TruncateAt;)V
 HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
 HSPLandroid/text/Layout;->drawBackground(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;III)V
 HSPLandroid/text/Layout;->drawText(Landroid/graphics/Canvas;II)V
 HSPLandroid/text/Layout;->ellipsize(III[CILandroid/text/TextUtils$TruncateAt;)V
-HPLandroid/text/Layout;->getCursorPath(ILandroid/graphics/Path;Ljava/lang/CharSequence;)V
-HPLandroid/text/Layout;->getDesiredWidth(Ljava/lang/CharSequence;IILandroid/text/TextPaint;)F
-HPLandroid/text/Layout;->getDesiredWidth(Ljava/lang/CharSequence;IILandroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)F
-HPLandroid/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
 HSPLandroid/text/Layout;->getHeight(Z)I
-HPLandroid/text/Layout;->getHorizontal(IZ)F
 HSPLandroid/text/Layout;->getHorizontal(IZIZ)F
+HSPLandroid/text/Layout;->getHorizontal(IZZ)F
 HSPLandroid/text/Layout;->getIndentAdjust(ILandroid/text/Layout$Alignment;)I
-HPLandroid/text/Layout;->getLineBottom(I)I
-PLandroid/text/Layout;->getLineEnd(I)I
+HSPLandroid/text/Layout;->getLineBaseline(I)I
+HSPLandroid/text/Layout;->getLineBottom(I)I
+HSPLandroid/text/Layout;->getLineEnd(I)I
 HSPLandroid/text/Layout;->getLineExtent(ILandroid/text/Layout$TabStops;Z)F
 HSPLandroid/text/Layout;->getLineExtent(IZ)F
 HSPLandroid/text/Layout;->getLineForOffset(I)I
@@ -22310,38 +10833,34 @@
 HSPLandroid/text/Layout;->getLineStartPos(III)I
 HSPLandroid/text/Layout;->getLineVisibleEnd(I)I
 HSPLandroid/text/Layout;->getLineVisibleEnd(III)I
-HPLandroid/text/Layout;->getLineWidth(I)F
-HPLandroid/text/Layout;->getOffsetAtStartOf(I)I
-HPLandroid/text/Layout;->getOffsetForHorizontal(IF)I
-HPLandroid/text/Layout;->getOffsetForHorizontal(IFZ)I
+HSPLandroid/text/Layout;->getLineWidth(I)F
 HSPLandroid/text/Layout;->getPaint()Landroid/text/TextPaint;
 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;
-HPLandroid/text/Layout;->getPrimaryHorizontal(I)F
 HSPLandroid/text/Layout;->getPrimaryHorizontal(IZ)F
-HPLandroid/text/Layout;->getSpacingAdd()F
-HPLandroid/text/Layout;->getSpacingMultiplier()F
+HSPLandroid/text/Layout;->getSpacingAdd()F
+HSPLandroid/text/Layout;->getSpacingMultiplier()F
 HSPLandroid/text/Layout;->getStartHyphenEdit(I)I
-PLandroid/text/Layout;->getText()Ljava/lang/CharSequence;
-PLandroid/text/Layout;->getWidth()I
+HSPLandroid/text/Layout;->getText()Ljava/lang/CharSequence;
+HSPLandroid/text/Layout;->getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic;
+HSPLandroid/text/Layout;->getWidth()I
 HSPLandroid/text/Layout;->increaseWidthTo(I)V
 HSPLandroid/text/Layout;->isJustificationRequired(I)Z
-HPLandroid/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
 HSPLandroid/text/Layout;->replaceWith(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FF)V
 HSPLandroid/text/Layout;->setJustificationMode(I)V
-HPLandroid/text/Layout;->shouldClampCursor(I)Z
 HSPLandroid/text/MeasuredParagraph;-><init>()V
 HSPLandroid/text/MeasuredParagraph;->applyMetricsAffectingSpan(Landroid/text/TextPaint;[Landroid/text/style/MetricAffectingSpan;IILandroid/graphics/text/MeasuredText$Builder;)V
-HPLandroid/text/MeasuredParagraph;->applyReplacementRun(Landroid/text/style/ReplacementSpan;IILandroid/graphics/text/MeasuredText$Builder;)V
 HSPLandroid/text/MeasuredParagraph;->applyStyleRun(IILandroid/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;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;ZZLandroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph;
-HPLandroid/text/MeasuredParagraph;->getCharWidthAt(I)F
+HSPLandroid/text/MeasuredParagraph;->getCharWidthAt(I)F
 HSPLandroid/text/MeasuredParagraph;->getChars()[C
 HSPLandroid/text/MeasuredParagraph;->getDirections(II)Landroid/text/Layout$Directions;
 HSPLandroid/text/MeasuredParagraph;->getFontMetrics()Landroid/text/AutoGrowArray$IntArray;
@@ -22354,6 +10873,7 @@
 HSPLandroid/text/MeasuredParagraph;->release()V
 HSPLandroid/text/MeasuredParagraph;->reset()V
 HSPLandroid/text/MeasuredParagraph;->resetAndAnalyzeBidi(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;)V
+HSPLandroid/text/PackedIntVector;-><init>(I)V
 HSPLandroid/text/PackedIntVector;->adjustValuesBelow(III)V
 HSPLandroid/text/PackedIntVector;->deleteAt(II)V
 HSPLandroid/text/PackedIntVector;->getValue(II)I
@@ -22361,8 +10881,10 @@
 HSPLandroid/text/PackedIntVector;->insertAt(I[I)V
 HSPLandroid/text/PackedIntVector;->moveRowGapTo(I)V
 HSPLandroid/text/PackedIntVector;->moveValueGapTo(II)V
+HSPLandroid/text/PackedIntVector;->setValueInternal(III)V
 HSPLandroid/text/PackedIntVector;->size()I
 HSPLandroid/text/PackedIntVector;->width()I
+HSPLandroid/text/PackedObjectVector;-><init>(I)V
 HSPLandroid/text/PackedObjectVector;->deleteAt(II)V
 HSPLandroid/text/PackedObjectVector;->getValue(II)Ljava/lang/Object;
 HSPLandroid/text/PackedObjectVector;->growBuffer()V
@@ -22370,60 +10892,45 @@
 HSPLandroid/text/PackedObjectVector;->moveRowGapTo(I)V
 HSPLandroid/text/PackedObjectVector;->setValue(IILjava/lang/Object;)V
 HSPLandroid/text/PackedObjectVector;->size()I
-PLandroid/text/PrecomputedText$ParagraphInfo;-><init>(ILandroid/text/MeasuredParagraph;)V
+HSPLandroid/text/PrecomputedText$ParagraphInfo;-><init>(ILandroid/text/MeasuredParagraph;)V
 HSPLandroid/text/PrecomputedText$Params;-><init>(Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;II)V
-PLandroid/text/PrecomputedText$Params;->getBreakStrategy()I
-PLandroid/text/PrecomputedText$Params;->getHyphenationFrequency()I
-PLandroid/text/PrecomputedText$Params;->getTextDirection()Landroid/text/TextDirectionHeuristic;
-PLandroid/text/PrecomputedText$Params;->getTextPaint()Landroid/text/TextPaint;
+HSPLandroid/text/PrecomputedText$Params;->getBreakStrategy()I
+HSPLandroid/text/PrecomputedText$Params;->getHyphenationFrequency()I
+HSPLandroid/text/PrecomputedText$Params;->getTextDirection()Landroid/text/TextDirectionHeuristic;
+HSPLandroid/text/PrecomputedText$Params;->getTextPaint()Landroid/text/TextPaint;
 HSPLandroid/text/PrecomputedText;->createMeasuredParagraphs(Ljava/lang/CharSequence;Landroid/text/PrecomputedText$Params;IIZ)[Landroid/text/PrecomputedText$ParagraphInfo;
 HSPLandroid/text/Selection;->getSelectionEnd(Ljava/lang/CharSequence;)I
 HSPLandroid/text/Selection;->getSelectionStart(Ljava/lang/CharSequence;)I
-HPLandroid/text/Selection;->removeMemory(Landroid/text/Spannable;)V
-HPLandroid/text/Selection;->removeSelection(Landroid/text/Spannable;)V
+HSPLandroid/text/Selection;->removeMemory(Landroid/text/Spannable;)V
 HSPLandroid/text/Selection;->setSelection(Landroid/text/Spannable;I)V
-HPLandroid/text/Selection;->setSelection(Landroid/text/Spannable;II)V
+HSPLandroid/text/Selection;->setSelection(Landroid/text/Spannable;II)V
 HSPLandroid/text/Selection;->setSelection(Landroid/text/Spannable;III)V
 HSPLandroid/text/Selection;->updateMemory(Landroid/text/Spannable;I)V
 HSPLandroid/text/SpanSet;-><init>(Ljava/lang/Class;)V
 HSPLandroid/text/SpanSet;->getNextTransition(II)I
-HPLandroid/text/SpanSet;->hasSpansIntersecting(II)Z
 HSPLandroid/text/SpanSet;->init(Landroid/text/Spanned;II)V
 HSPLandroid/text/SpanSet;->recycle()V
-HSPLandroid/text/Spannable$Factory;-><init>()V
 HSPLandroid/text/Spannable$Factory;->getInstance()Landroid/text/Spannable$Factory;
 HSPLandroid/text/Spannable$Factory;->newSpannable(Ljava/lang/CharSequence;)Landroid/text/Spannable;
 HSPLandroid/text/SpannableString;-><init>(Ljava/lang/CharSequence;)V
-HPLandroid/text/SpannableString;-><init>(Ljava/lang/CharSequence;Z)V
-HPLandroid/text/SpannableString;->equals(Ljava/lang/Object;)Z
+HSPLandroid/text/SpannableString;-><init>(Ljava/lang/CharSequence;Z)V
 HSPLandroid/text/SpannableString;->getSpanEnd(Ljava/lang/Object;)I
 HSPLandroid/text/SpannableString;->getSpanFlags(Ljava/lang/Object;)I
 HSPLandroid/text/SpannableString;->getSpanStart(Ljava/lang/Object;)I
 HSPLandroid/text/SpannableString;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
 HSPLandroid/text/SpannableString;->nextSpanTransition(IILjava/lang/Class;)I
-HSPLandroid/text/SpannableString;->removeSpan(Ljava/lang/Object;)V
-HSPLandroid/text/SpannableString;->removeSpan(Ljava/lang/Object;I)V
 HSPLandroid/text/SpannableString;->setSpan(Ljava/lang/Object;III)V
-HPLandroid/text/SpannableString;->valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;
 HSPLandroid/text/SpannableStringBuilder;-><init>()V
 HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;)V
 HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;II)V
-HPLandroid/text/SpannableStringBuilder;->append(C)Landroid/text/Editable;
-HPLandroid/text/SpannableStringBuilder;->append(C)Landroid/text/SpannableStringBuilder;
-HPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;)Landroid/text/Editable;
 HSPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
-HSPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;
-HSPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;
-HSPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;Ljava/lang/Object;I)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->calcMax(I)I
 HSPLandroid/text/SpannableStringBuilder;->change(IILjava/lang/CharSequence;II)V
 HSPLandroid/text/SpannableStringBuilder;->charAt(I)C
 HSPLandroid/text/SpannableStringBuilder;->checkRange(Ljava/lang/String;II)V
-HPLandroid/text/SpannableStringBuilder;->clear()V
+HSPLandroid/text/SpannableStringBuilder;->checkSortBuffer([II)[I
+HSPLandroid/text/SpannableStringBuilder;->compareSpans(II[I[I)I
 HSPLandroid/text/SpannableStringBuilder;->countSpans(IILjava/lang/Class;I)I
-HSPLandroid/text/SpannableStringBuilder;->delete(II)Landroid/text/SpannableStringBuilder;
-HSPLandroid/text/SpannableStringBuilder;->drawTextRun(Landroid/graphics/BaseCanvas;IIIIFFZLandroid/graphics/Paint;)V
-HPLandroid/text/SpannableStringBuilder;->equals(Ljava/lang/Object;)Z
 HSPLandroid/text/SpannableStringBuilder;->getChars(II[CI)V
 HSPLandroid/text/SpannableStringBuilder;->getSpanEnd(Ljava/lang/Object;)I
 HSPLandroid/text/SpannableStringBuilder;->getSpanFlags(Ljava/lang/Object;)I
@@ -22431,12 +10938,11 @@
 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
-HPLandroid/text/SpannableStringBuilder;->getTextWatcherDepth()I
 HSPLandroid/text/SpannableStringBuilder;->hasNonExclusiveExclusiveSpanAt(Ljava/lang/CharSequence;I)Z
-HPLandroid/text/SpannableStringBuilder;->hashCode()I
-HPLandroid/text/SpannableStringBuilder;->insert(ILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->invalidateIndex(I)V
+HSPLandroid/text/SpannableStringBuilder;->isInvalidParagraph(II)Z
+HSPLandroid/text/SpannableStringBuilder;->leftChild(I)I
 HSPLandroid/text/SpannableStringBuilder;->length()I
-HSPLandroid/text/SpannableStringBuilder;->measureText(IILandroid/graphics/Paint;)F
 HSPLandroid/text/SpannableStringBuilder;->moveGapTo(I)V
 HSPLandroid/text/SpannableStringBuilder;->nextSpanTransition(IILjava/lang/Class;)I
 HSPLandroid/text/SpannableStringBuilder;->nextSpanTransitionRec(IILjava/lang/Class;I)I
@@ -22445,15 +10951,17 @@
 HSPLandroid/text/SpannableStringBuilder;->removeSpan(II)V
 HSPLandroid/text/SpannableStringBuilder;->removeSpan(Ljava/lang/Object;)V
 HSPLandroid/text/SpannableStringBuilder;->removeSpan(Ljava/lang/Object;I)V
-HSPLandroid/text/SpannableStringBuilder;->removeSpansForChange(IIZI)Z
-HPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/Editable;
 HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->resizeFor(I)V
+HSPLandroid/text/SpannableStringBuilder;->resolveGap(I)I
 HSPLandroid/text/SpannableStringBuilder;->restoreInvariants()V
+HSPLandroid/text/SpannableStringBuilder;->rightChild(I)I
 HSPLandroid/text/SpannableStringBuilder;->sendAfterTextChanged([Landroid/text/TextWatcher;)V
 HSPLandroid/text/SpannableStringBuilder;->sendBeforeTextChanged([Landroid/text/TextWatcher;III)V
+HSPLandroid/text/SpannableStringBuilder;->sendSpanAdded(Ljava/lang/Object;II)V
 HSPLandroid/text/SpannableStringBuilder;->sendSpanChanged(Ljava/lang/Object;IIII)V
+HSPLandroid/text/SpannableStringBuilder;->sendSpanRemoved(Ljava/lang/Object;II)V
 HSPLandroid/text/SpannableStringBuilder;->sendTextChanged([Landroid/text/TextWatcher;III)V
 HSPLandroid/text/SpannableStringBuilder;->sendToSpanWatchers(III)V
 HSPLandroid/text/SpannableStringBuilder;->setFilters([Landroid/text/InputFilter;)V
@@ -22461,49 +10969,45 @@
 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
-HPLandroid/text/SpannableStringBuilder;->subSequence(II)Ljava/lang/CharSequence;
+HSPLandroid/text/SpannableStringBuilder;->subSequence(II)Ljava/lang/CharSequence;
 HSPLandroid/text/SpannableStringBuilder;->toString()Ljava/lang/String;
-HSPLandroid/text/SpannableStringBuilder;->updatedIntervalBound(IIIIZZ)I
+HSPLandroid/text/SpannableStringBuilder;->treeRoot()I
 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;->copySpans(Landroid/text/SpannableStringInternal;IIZ)V
-HSPLandroid/text/SpannableStringInternal;->copySpans(Landroid/text/Spanned;IIZ)V
-HPLandroid/text/SpannableStringInternal;->equals(Ljava/lang/Object;)Z
+HSPLandroid/text/SpannableStringInternal;->copySpansFromInternal(Landroid/text/SpannableStringInternal;IIZ)V
+HSPLandroid/text/SpannableStringInternal;->copySpansFromSpanned(Landroid/text/Spanned;IIZ)V
 HSPLandroid/text/SpannableStringInternal;->getChars(II[CI)V
-PLandroid/text/SpannableStringInternal;->getSpanEnd(Ljava/lang/Object;)I
-PLandroid/text/SpannableStringInternal;->getSpanFlags(Ljava/lang/Object;)I
-PLandroid/text/SpannableStringInternal;->getSpanStart(Ljava/lang/Object;)I
+HSPLandroid/text/SpannableStringInternal;->getSpanEnd(Ljava/lang/Object;)I
+HSPLandroid/text/SpannableStringInternal;->getSpanFlags(Ljava/lang/Object;)I
+HSPLandroid/text/SpannableStringInternal;->getSpanStart(Ljava/lang/Object;)I
 HSPLandroid/text/SpannableStringInternal;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/SpannableStringInternal;->isOutOfCopyRange(IIII)Z
 HSPLandroid/text/SpannableStringInternal;->length()I
 HSPLandroid/text/SpannableStringInternal;->nextSpanTransition(IILjava/lang/Class;)I
-HSPLandroid/text/SpannableStringInternal;->removeSpan(Ljava/lang/Object;I)V
-PLandroid/text/SpannableStringInternal;->sendSpanAdded(Ljava/lang/Object;II)V
-HSPLandroid/text/SpannableStringInternal;->sendSpanChanged(Ljava/lang/Object;IIII)V
-HPLandroid/text/SpannableStringInternal;->setSpan(Ljava/lang/Object;III)V
+HSPLandroid/text/SpannableStringInternal;->sendSpanAdded(Ljava/lang/Object;II)V
+HSPLandroid/text/SpannableStringInternal;->setSpan(Ljava/lang/Object;III)V
 HSPLandroid/text/SpannableStringInternal;->setSpan(Ljava/lang/Object;IIIZ)V
 HSPLandroid/text/SpannableStringInternal;->toString()Ljava/lang/String;
 HSPLandroid/text/SpannedString;-><init>(Ljava/lang/CharSequence;)V
-HPLandroid/text/SpannedString;-><init>(Ljava/lang/CharSequence;Z)V
+HSPLandroid/text/SpannedString;-><init>(Ljava/lang/CharSequence;Z)V
 HSPLandroid/text/SpannedString;->getSpanEnd(Ljava/lang/Object;)I
 HSPLandroid/text/SpannedString;->getSpanFlags(Ljava/lang/Object;)I
 HSPLandroid/text/SpannedString;->getSpanStart(Ljava/lang/Object;)I
 HSPLandroid/text/SpannedString;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
 HSPLandroid/text/SpannedString;->nextSpanTransition(IILjava/lang/Class;)I
-HPLandroid/text/SpannedString;->valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannedString;
-PLandroid/text/StaticLayout$Builder;-><init>()V
-PLandroid/text/StaticLayout$Builder;->access$100(Landroid/text/StaticLayout$Builder;)Z
+HSPLandroid/text/StaticLayout$Builder;-><init>()V
+HSPLandroid/text/StaticLayout$Builder;->access$100(Landroid/text/StaticLayout$Builder;)Z
 HSPLandroid/text/StaticLayout$Builder;->access$1000(Landroid/text/StaticLayout$Builder;)F
 HSPLandroid/text/StaticLayout$Builder;->access$1100(Landroid/text/StaticLayout$Builder;)I
-PLandroid/text/StaticLayout$Builder;->access$1200(Landroid/text/StaticLayout$Builder;)I
-PLandroid/text/StaticLayout$Builder;->access$1300(Landroid/text/StaticLayout$Builder;)[I
-PLandroid/text/StaticLayout$Builder;->access$1400(Landroid/text/StaticLayout$Builder;)[I
+HSPLandroid/text/StaticLayout$Builder;->access$1200(Landroid/text/StaticLayout$Builder;)I
+HSPLandroid/text/StaticLayout$Builder;->access$1300(Landroid/text/StaticLayout$Builder;)[I
+HSPLandroid/text/StaticLayout$Builder;->access$1400(Landroid/text/StaticLayout$Builder;)[I
 HSPLandroid/text/StaticLayout$Builder;->access$1500(Landroid/text/StaticLayout$Builder;)I
 HSPLandroid/text/StaticLayout$Builder;->access$1600(Landroid/text/StaticLayout$Builder;)I
 HSPLandroid/text/StaticLayout$Builder;->access$1700(Landroid/text/StaticLayout$Builder;)I
 HSPLandroid/text/StaticLayout$Builder;->access$1800(Landroid/text/StaticLayout$Builder;)Z
 HSPLandroid/text/StaticLayout$Builder;->access$1900(Landroid/text/StaticLayout$Builder;)Z
-HPLandroid/text/StaticLayout$Builder;->access$200(Landroid/text/StaticLayout$Builder;)V
 HSPLandroid/text/StaticLayout$Builder;->access$2000(Landroid/text/StaticLayout$Builder;)Landroid/graphics/Paint$FontMetricsInt;
 HSPLandroid/text/StaticLayout$Builder;->access$2100(Landroid/text/StaticLayout$Builder;)I
 HSPLandroid/text/StaticLayout$Builder;->access$2200(Landroid/text/StaticLayout$Builder;)I
@@ -22511,36 +11015,36 @@
 HSPLandroid/text/StaticLayout$Builder;->access$400(Landroid/text/StaticLayout$Builder;)Ljava/lang/CharSequence;
 HSPLandroid/text/StaticLayout$Builder;->access$500(Landroid/text/StaticLayout$Builder;)Landroid/text/TextPaint;
 HSPLandroid/text/StaticLayout$Builder;->access$600(Landroid/text/StaticLayout$Builder;)I
-PLandroid/text/StaticLayout$Builder;->access$700(Landroid/text/StaticLayout$Builder;)Landroid/text/Layout$Alignment;
+HSPLandroid/text/StaticLayout$Builder;->access$700(Landroid/text/StaticLayout$Builder;)Landroid/text/Layout$Alignment;
 HSPLandroid/text/StaticLayout$Builder;->access$800(Landroid/text/StaticLayout$Builder;)Landroid/text/TextDirectionHeuristic;
 HSPLandroid/text/StaticLayout$Builder;->access$900(Landroid/text/StaticLayout$Builder;)F
-PLandroid/text/StaticLayout$Builder;->build()Landroid/text/StaticLayout;
+HSPLandroid/text/StaticLayout$Builder;->build()Landroid/text/StaticLayout;
+HSPLandroid/text/StaticLayout$Builder;->finish()V
 HSPLandroid/text/StaticLayout$Builder;->obtain(Ljava/lang/CharSequence;IILandroid/text/TextPaint;I)Landroid/text/StaticLayout$Builder;
-PLandroid/text/StaticLayout$Builder;->recycle(Landroid/text/StaticLayout$Builder;)V
-PLandroid/text/StaticLayout$Builder;->setAlignment(Landroid/text/Layout$Alignment;)Landroid/text/StaticLayout$Builder;
-PLandroid/text/StaticLayout$Builder;->setBreakStrategy(I)Landroid/text/StaticLayout$Builder;
-HPLandroid/text/StaticLayout$Builder;->setEllipsize(Landroid/text/TextUtils$TruncateAt;)Landroid/text/StaticLayout$Builder;
-HPLandroid/text/StaticLayout$Builder;->setEllipsizedWidth(I)Landroid/text/StaticLayout$Builder;
-PLandroid/text/StaticLayout$Builder;->setHyphenationFrequency(I)Landroid/text/StaticLayout$Builder;
-PLandroid/text/StaticLayout$Builder;->setIncludePad(Z)Landroid/text/StaticLayout$Builder;
-HPLandroid/text/StaticLayout$Builder;->setIndents([I[I)Landroid/text/StaticLayout$Builder;
-PLandroid/text/StaticLayout$Builder;->setJustificationMode(I)Landroid/text/StaticLayout$Builder;
-PLandroid/text/StaticLayout$Builder;->setLineSpacing(FF)Landroid/text/StaticLayout$Builder;
-PLandroid/text/StaticLayout$Builder;->setMaxLines(I)Landroid/text/StaticLayout$Builder;
-PLandroid/text/StaticLayout$Builder;->setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/StaticLayout$Builder;
-PLandroid/text/StaticLayout$Builder;->setUseLineSpacingFromFallbacks(Z)Landroid/text/StaticLayout$Builder;
+HSPLandroid/text/StaticLayout$Builder;->recycle(Landroid/text/StaticLayout$Builder;)V
+HSPLandroid/text/StaticLayout$Builder;->setAddLastLineLineSpacing(Z)Landroid/text/StaticLayout$Builder;
+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;
+HSPLandroid/text/StaticLayout$Builder;->setEllipsizedWidth(I)Landroid/text/StaticLayout$Builder;
+HSPLandroid/text/StaticLayout$Builder;->setHyphenationFrequency(I)Landroid/text/StaticLayout$Builder;
+HSPLandroid/text/StaticLayout$Builder;->setIncludePad(Z)Landroid/text/StaticLayout$Builder;
+HSPLandroid/text/StaticLayout$Builder;->setJustificationMode(I)Landroid/text/StaticLayout$Builder;
+HSPLandroid/text/StaticLayout$Builder;->setLineSpacing(FF)Landroid/text/StaticLayout$Builder;
+HSPLandroid/text/StaticLayout$Builder;->setMaxLines(I)Landroid/text/StaticLayout$Builder;
+HSPLandroid/text/StaticLayout$Builder;->setPaint(Landroid/text/TextPaint;)Landroid/text/StaticLayout$Builder;
+HSPLandroid/text/StaticLayout$Builder;->setText(Ljava/lang/CharSequence;II)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$Builder;->setWidth(I)Landroid/text/StaticLayout$Builder;
 HSPLandroid/text/StaticLayout;-><init>(Landroid/text/StaticLayout$Builder;)V
-PLandroid/text/StaticLayout;-><init>(Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$1;)V
+HSPLandroid/text/StaticLayout;-><init>(Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$1;)V
 HSPLandroid/text/StaticLayout;-><init>(Ljava/lang/CharSequence;)V
-HPLandroid/text/StaticLayout;-><init>(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V
-HPLandroid/text/StaticLayout;-><init>(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZLandroid/text/TextUtils$TruncateAt;I)V
-HPLandroid/text/StaticLayout;-><init>(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FFZLandroid/text/TextUtils$TruncateAt;II)V
-HPLandroid/text/StaticLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)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
 HSPLandroid/text/StaticLayout;->getBottomPadding()I
 HSPLandroid/text/StaticLayout;->getEllipsisCount(I)I
-HPLandroid/text/StaticLayout;->getEllipsisStart(I)I
+HSPLandroid/text/StaticLayout;->getEllipsisStart(I)I
 HSPLandroid/text/StaticLayout;->getEllipsizedWidth()I
 HSPLandroid/text/StaticLayout;->getEndHyphenEdit(I)I
 HSPLandroid/text/StaticLayout;->getHeight(Z)I
@@ -22556,50 +11060,42 @@
 HSPLandroid/text/StaticLayout;->getParagraphDirection(I)I
 HSPLandroid/text/StaticLayout;->getStartHyphenEdit(I)I
 HSPLandroid/text/StaticLayout;->getTopPadding()I
+HSPLandroid/text/StaticLayout;->getTotalInsets(I)F
 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
-PLandroid/text/StaticLayout;->packHyphenEdit(II)I
-PLandroid/text/StaticLayout;->unpackEndHyphenEdit(I)I
-PLandroid/text/StaticLayout;->unpackStartHyphenEdit(I)I
+HSPLandroid/text/StaticLayout;->packHyphenEdit(II)I
+HSPLandroid/text/StaticLayout;->unpackEndHyphenEdit(I)I
+HSPLandroid/text/StaticLayout;->unpackStartHyphenEdit(I)I
 HSPLandroid/text/TextDirectionHeuristics$FirstStrong;->checkRtl(Ljava/lang/CharSequence;II)I
-PLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->doCheck(Ljava/lang/CharSequence;II)Z
+HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->doCheck(Ljava/lang/CharSequence;II)Z
 HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->isRtl(Ljava/lang/CharSequence;II)Z
-HPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->isRtl([CII)Z
 HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;->defaultIsRtl()Z
-HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;->defaultIsRtl()Z
-PLandroid/text/TextDirectionHeuristics;->access$100(I)I
+HSPLandroid/text/TextDirectionHeuristics;->access$100(I)I
 HSPLandroid/text/TextDirectionHeuristics;->isRtlCodePoint(I)I
-PLandroid/text/TextLine$DecorationInfo;-><init>()V
-PLandroid/text/TextLine$DecorationInfo;-><init>(Landroid/text/TextLine$1;)V
-HSPLandroid/text/TextLine$DecorationInfo;->copyInfo()Landroid/text/TextLine$DecorationInfo;
+HSPLandroid/text/TextLine$DecorationInfo;-><init>()V
+HSPLandroid/text/TextLine$DecorationInfo;-><init>(Landroid/text/TextLine$1;)V
+HSPLandroid/text/TextLine$DecorationInfo;->hasDecoration()Z
 HSPLandroid/text/TextLine;-><init>()V
-PLandroid/text/TextLine;->adjustEndHyphenEdit(II)I
-PLandroid/text/TextLine;->adjustStartHyphenEdit(II)I
+HSPLandroid/text/TextLine;->adjustEndHyphenEdit(II)I
+HSPLandroid/text/TextLine;->adjustStartHyphenEdit(II)I
 HSPLandroid/text/TextLine;->draw(Landroid/graphics/Canvas;FIII)V
 HSPLandroid/text/TextLine;->drawRun(Landroid/graphics/Canvas;IIZFIIIZ)F
-HSPLandroid/text/TextLine;->drawStroke(Landroid/text/TextPaint;Landroid/graphics/Canvas;IFFFFF)V
 HSPLandroid/text/TextLine;->drawTextRun(Landroid/graphics/Canvas;Landroid/text/TextPaint;IIIIZFI)V
 HSPLandroid/text/TextLine;->equalAttributes(Landroid/text/TextPaint;Landroid/text/TextPaint;)Z
 HSPLandroid/text/TextLine;->expandMetricsFromPaint(Landroid/graphics/Paint$FontMetricsInt;Landroid/text/TextPaint;)V
 HSPLandroid/text/TextLine;->extractDecorationInfo(Landroid/text/TextPaint;Landroid/text/TextLine$DecorationInfo;)V
-HPLandroid/text/TextLine;->getOffsetBeforeAfter(IIIZIZ)I
-HPLandroid/text/TextLine;->getOffsetToLeftRightOf(IZ)I
 HSPLandroid/text/TextLine;->getRunAdvance(Landroid/text/TextPaint;IIIIZI)F
-HPLandroid/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;FIIILandroid/graphics/Paint$FontMetricsInt;Z)F
 HSPLandroid/text/TextLine;->handleText(Landroid/text/TextPaint;IIIIZLandroid/graphics/Canvas;FIIILandroid/graphics/Paint$FontMetricsInt;ZILjava/util/ArrayList;)F
 HSPLandroid/text/TextLine;->isLineEndSpace(C)Z
 HSPLandroid/text/TextLine;->measure(IZLandroid/graphics/Paint$FontMetricsInt;)F
-PLandroid/text/TextLine;->measureRun(IIIZLandroid/graphics/Paint$FontMetricsInt;)F
+HSPLandroid/text/TextLine;->measureRun(IIIZLandroid/graphics/Paint$FontMetricsInt;)F
 HSPLandroid/text/TextLine;->metrics(Landroid/graphics/Paint$FontMetricsInt;)F
-HPLandroid/text/TextLine;->nextTab(F)F
 HSPLandroid/text/TextLine;->obtain()Landroid/text/TextLine;
 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;II)V
 HSPLandroid/text/TextLine;->updateMetrics(Landroid/graphics/Paint$FontMetricsInt;IIIII)V
 HSPLandroid/text/TextPaint;-><init>()V
 HSPLandroid/text/TextPaint;-><init>(I)V
-HSPLandroid/text/TextPaint;-><init>(Landroid/graphics/Paint;)V
-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;
@@ -22610,351 +11106,122 @@
 HSPLandroid/text/TextUtils$SimpleStringSplitter;->next()Ljava/lang/Object;
 HSPLandroid/text/TextUtils$SimpleStringSplitter;->next()Ljava/lang/String;
 HSPLandroid/text/TextUtils$SimpleStringSplitter;->setString(Ljava/lang/String;)V
-HSPLandroid/text/TextUtils$StringWithRemovedChars;-><init>(Ljava/lang/String;)V
-HSPLandroid/text/TextUtils$StringWithRemovedChars;->codePointAt(I)I
-HSPLandroid/text/TextUtils$StringWithRemovedChars;->length()I
-HSPLandroid/text/TextUtils$StringWithRemovedChars;->toString()Ljava/lang/String;
 HSPLandroid/text/TextUtils;->concat([Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HPLandroid/text/TextUtils;->copySpansFrom(Landroid/text/Spanned;IILjava/lang/Class;Landroid/text/Spannable;I)V
 HSPLandroid/text/TextUtils;->couldAffectRtl(C)Z
-HSPLandroid/text/TextUtils;->delimitedStringContains(Ljava/lang/String;CLjava/lang/String;)Z
 HSPLandroid/text/TextUtils;->doesNotNeedBidi([CII)Z
 HSPLandroid/text/TextUtils;->ellipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLandroid/text/TextUtils$TruncateAt;)Ljava/lang/CharSequence;
 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;->expandTemplate(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HPLandroid/text/TextUtils;->getCapsMode(Ljava/lang/CharSequence;II)I
 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;->htmlEncode(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;C)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
-HPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I
-HPLandroid/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
-HSPLandroid/text/TextUtils;->isGraphic(C)Z
-HSPLandroid/text/TextUtils;->isGraphic(Ljava/lang/CharSequence;)Z
-HSPLandroid/text/TextUtils;->isNewline(I)Z
-HSPLandroid/text/TextUtils;->isWhiteSpace(I)Z
 HSPLandroid/text/TextUtils;->join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;
 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
-HSPLandroid/text/TextUtils;->makeSafeForPresentation(Ljava/lang/String;IFI)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->obtain(I)[C
-PLandroid/text/TextUtils;->packRangeInLong(II)J
+HSPLandroid/text/TextUtils;->packRangeInLong(II)J
 HSPLandroid/text/TextUtils;->recycle([C)V
-HPLandroid/text/TextUtils;->regionMatches(Ljava/lang/CharSequence;ILjava/lang/CharSequence;II)Z
 HSPLandroid/text/TextUtils;->removeEmptySpans([Ljava/lang/Object;Landroid/text/Spanned;Ljava/lang/Class;)[Ljava/lang/Object;
-HSPLandroid/text/TextUtils;->safeIntern(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/text/TextUtils;->split(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
-PLandroid/text/TextUtils;->split(Ljava/lang/String;Ljava/util/regex/Pattern;)[Ljava/lang/String;
 HSPLandroid/text/TextUtils;->stringOrSpannedString(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HPLandroid/text/TextUtils;->substring(Ljava/lang/CharSequence;II)Ljava/lang/String;
 HSPLandroid/text/TextUtils;->toUpperCase(Ljava/util/Locale;Ljava/lang/CharSequence;Z)Ljava/lang/CharSequence;
-HPLandroid/text/TextUtils;->trimNoCopySpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HPLandroid/text/TextUtils;->trimToLengthWithEllipsis(Ljava/lang/CharSequence;I)Ljava/lang/CharSequence;
-HPLandroid/text/TextUtils;->trimToParcelableSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-PLandroid/text/TextUtils;->trimToSize(Ljava/lang/CharSequence;I)Ljava/lang/CharSequence;
-PLandroid/text/TextUtils;->unpackRangeEndFromLong(J)I
-PLandroid/text/TextUtils;->unpackRangeStartFromLong(J)I
+HSPLandroid/text/TextUtils;->trimNoCopySpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/text/TextUtils;->trimToParcelableSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/text/TextUtils;->trimToSize(Ljava/lang/CharSequence;I)Ljava/lang/CharSequence;
+HSPLandroid/text/TextUtils;->unpackRangeEndFromLong(J)I
+HSPLandroid/text/TextUtils;->unpackRangeStartFromLong(J)I
 HSPLandroid/text/TextUtils;->writeToParcel(Ljava/lang/CharSequence;Landroid/os/Parcel;I)V
-HSPLandroid/text/format/DateFormat;-><init>()V
-HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;J)Ljava/lang/CharSequence;
 HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;Ljava/util/Calendar;)Ljava/lang/CharSequence;
 HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;Ljava/util/Date;)Ljava/lang/CharSequence;
 HSPLandroid/text/format/DateFormat;->getBestDateTimePattern(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;
-PLandroid/text/format/DateFormat;->getDayOfWeekString(Llibcore/icu/LocaleData;III)Ljava/lang/String;
 HSPLandroid/text/format/DateFormat;->getMonthString(Llibcore/icu/LocaleData;III)Ljava/lang/String;
-HSPLandroid/text/format/DateFormat;->getTimeFormat(Landroid/content/Context;)Ljava/text/DateFormat;
-HPLandroid/text/format/DateFormat;->getTimeFormatString(Landroid/content/Context;)Ljava/lang/String;
-HSPLandroid/text/format/DateFormat;->getYearString(II)Ljava/lang/String;
+HSPLandroid/text/format/DateFormat;->hasDesignator(Ljava/lang/CharSequence;C)Z
 HSPLandroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;)Z
 HSPLandroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;I)Z
+HSPLandroid/text/format/DateFormat;->is24HourLocale(Ljava/util/Locale;)Z
 HSPLandroid/text/format/DateFormat;->zeroPad(II)Ljava/lang/String;
-HPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;JJI)Ljava/lang/String;
-PLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJI)Ljava/util/Formatter;
 HSPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJILjava/lang/String;)Ljava/util/Formatter;
-HSPLandroid/text/format/DateUtils;->formatDateTime(Landroid/content/Context;JI)Ljava/lang/String;
-HPLandroid/text/format/DateUtils;->formatDuration(J)Ljava/lang/CharSequence;
-HPLandroid/text/format/DateUtils;->formatDuration(JI)Ljava/lang/CharSequence;
 HSPLandroid/text/format/DateUtils;->formatElapsedTime(J)Ljava/lang/String;
 HSPLandroid/text/format/DateUtils;->formatElapsedTime(Ljava/lang/StringBuilder;J)Ljava/lang/String;
-HPLandroid/text/format/DateUtils;->getRelativeTimeSpanString(Landroid/content/Context;J)Ljava/lang/CharSequence;
-HPLandroid/text/format/DateUtils;->getRelativeTimeSpanString(Landroid/content/Context;JZ)Ljava/lang/CharSequence;
 HSPLandroid/text/format/DateUtils;->initFormatStrings()V
 HSPLandroid/text/format/DateUtils;->initFormatStringsLocked()V
-HPLandroid/text/format/DateUtils;->isSameDate(JJ)Z
-HPLandroid/text/format/DateUtils;->isToday(J)Z
-PLandroid/text/format/Formatter$BytesResult;-><init>(Ljava/lang/String;Ljava/lang/String;J)V
-HSPLandroid/text/format/Formatter;->bidiWrap(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/text/format/Formatter;->formatBytes(Landroid/content/res/Resources;JI)Landroid/text/format/Formatter$BytesResult;
-PLandroid/text/format/Formatter;->formatFileSize(Landroid/content/Context;JI)Ljava/lang/String;
-HSPLandroid/text/format/Formatter;->formatIpAddress(I)Ljava/lang/String;
-HPLandroid/text/format/Formatter;->formatShortElapsedTime(Landroid/content/Context;J)Ljava/lang/String;
-HPLandroid/text/format/Formatter;->formatShortElapsedTimeRoundingUpToMinutes(Landroid/content/Context;J)Ljava/lang/String;
-HSPLandroid/text/format/Formatter;->formatShortFileSize(Landroid/content/Context;J)Ljava/lang/String;
-HSPLandroid/text/format/Formatter;->localeFromContext(Landroid/content/Context;)Ljava/util/Locale;
-HSPLandroid/text/format/Time$TimeCalculator;->copyFieldsFromTime(Landroid/text/format/Time;)V
-HSPLandroid/text/format/Time$TimeCalculator;->copyFieldsToTime(Landroid/text/format/Time;)V
-HPLandroid/text/format/Time$TimeCalculator;->format2445(Z)Ljava/lang/String;
+HSPLandroid/text/format/Time$TimeCalculator;-><init>(Ljava/lang/String;)V
 HSPLandroid/text/format/Time$TimeCalculator;->lookupZoneInfo(Ljava/lang/String;)Llibcore/util/ZoneInfo;
-HSPLandroid/text/format/Time$TimeCalculator;->setTimeInMillis(J)V
-HPLandroid/text/format/Time$TimeCalculator;->switchTimeZone(Ljava/lang/String;)V
-HPLandroid/text/format/Time$TimeCalculator;->toChar(I)C
-HSPLandroid/text/format/Time$TimeCalculator;->toMillis(Z)J
-HPLandroid/text/format/Time$TimeCalculator;->updateZoneInfoFromTimeZone()V
 HSPLandroid/text/format/Time;-><init>()V
-HPLandroid/text/format/Time;-><init>(Ljava/lang/String;)V
-HPLandroid/text/format/Time;->checkChar(Ljava/lang/String;IC)V
-HPLandroid/text/format/Time;->clear(Ljava/lang/String;)V
-HPLandroid/text/format/Time;->format2445()Ljava/lang/String;
-HPLandroid/text/format/Time;->getActualMaximum(I)I
-HPLandroid/text/format/Time;->getChar(Ljava/lang/String;II)I
-HSPLandroid/text/format/Time;->getCurrentTimezone()Ljava/lang/String;
-HSPLandroid/text/format/Time;->getJulianDay(JJ)I
-HSPLandroid/text/format/Time;->normalize(Z)J
-HPLandroid/text/format/Time;->parse(Ljava/lang/String;)Z
-HPLandroid/text/format/Time;->parseInternal(Ljava/lang/String;)Z
-HPLandroid/text/format/Time;->set(III)V
-HSPLandroid/text/format/Time;->set(IIIIII)V
-HSPLandroid/text/format/Time;->set(J)V
-HPLandroid/text/format/Time;->set(Landroid/text/format/Time;)V
-HPLandroid/text/format/Time;->setJulianDay(I)J
-HSPLandroid/text/format/Time;->setToNow()V
-HPLandroid/text/format/Time;->switchTimezone(Ljava/lang/String;)V
-HSPLandroid/text/format/Time;->toMillis(Z)J
-HPLandroid/text/format/TimeFormatter;-><init>()V
-HPLandroid/text/format/TimeFormatter;->append2DigitNumber(Ljava/lang/StringBuilder;I)V
-HPLandroid/text/format/TimeFormatter;->formatMillisWithFixedFormat(J)Ljava/lang/String;
-HPLandroid/text/format/TimeFormatter;->localizeDigits(Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/text/format/TimeMigrationUtils;->formatMillisWithFixedFormat(J)Ljava/lang/String;
+HSPLandroid/text/format/Time;->initialize(Ljava/lang/String;)V
 HSPLandroid/text/method/AllCapsTransformationMethod;-><init>(Landroid/content/Context;)V
 HSPLandroid/text/method/AllCapsTransformationMethod;->getTransformation(Ljava/lang/CharSequence;Landroid/view/View;)Ljava/lang/CharSequence;
 HSPLandroid/text/method/AllCapsTransformationMethod;->setLengthChangesAllowed(Z)V
+HSPLandroid/text/method/ArrowKeyMovementMethod;-><init>()V
 HSPLandroid/text/method/ArrowKeyMovementMethod;->canSelectArbitrarily()Z
 HSPLandroid/text/method/ArrowKeyMovementMethod;->getInstance()Landroid/text/method/MovementMethod;
 HSPLandroid/text/method/ArrowKeyMovementMethod;->initialize(Landroid/widget/TextView;Landroid/text/Spannable;)V
-HPLandroid/text/method/ArrowKeyMovementMethod;->isSelecting(Landroid/text/Spannable;)Z
-HPLandroid/text/method/ArrowKeyMovementMethod;->onTakeFocus(Landroid/widget/TextView;Landroid/text/Spannable;I)V
-HPLandroid/text/method/ArrowKeyMovementMethod;->onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z
+HSPLandroid/text/method/BaseKeyListener;-><init>()V
 HSPLandroid/text/method/BaseMovementMethod;-><init>()V
-HSPLandroid/text/method/LinkMovementMethod;-><init>()V
-HPLandroid/text/method/LinkMovementMethod;->canSelectArbitrarily()Z
-HSPLandroid/text/method/LinkMovementMethod;->getInstance()Landroid/text/method/MovementMethod;
-HSPLandroid/text/method/LinkMovementMethod;->initialize(Landroid/widget/TextView;Landroid/text/Spannable;)V
-HPLandroid/text/method/LinkMovementMethod;->onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z
-HPLandroid/text/method/MetaKeyKeyListener;->getMetaState(Ljava/lang/CharSequence;I)I
-HPLandroid/text/method/MetaKeyKeyListener;->resetMetaState(Landroid/text/Spannable;)V
-HPLandroid/text/method/ReplacementTransformationMethod$ReplacementCharSequence;->charAt(I)C
+HSPLandroid/text/method/MetaKeyKeyListener;-><init>()V
+HSPLandroid/text/method/MetaKeyKeyListener;->isMetaTracker(Ljava/lang/CharSequence;Ljava/lang/Object;)Z
+HSPLandroid/text/method/ReplacementTransformationMethod$ReplacementCharSequence;-><init>(Ljava/lang/CharSequence;[C[C)V
 HSPLandroid/text/method/ReplacementTransformationMethod$ReplacementCharSequence;->getChars(II[CI)V
 HSPLandroid/text/method/ReplacementTransformationMethod$ReplacementCharSequence;->length()I
-HPLandroid/text/method/ReplacementTransformationMethod$ReplacementCharSequence;->toString()Ljava/lang/String;
-HPLandroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;->getSpanEnd(Ljava/lang/Object;)I
-HPLandroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;->getSpanFlags(Ljava/lang/Object;)I
-HPLandroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;->getSpanStart(Ljava/lang/Object;)I
+HSPLandroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;-><init>(Landroid/text/Spanned;[C[C)V
 HSPLandroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
-HPLandroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;->nextSpanTransition(IILjava/lang/Class;)I
-PLandroid/text/method/ReplacementTransformationMethod;-><init>()V
+HSPLandroid/text/method/ReplacementTransformationMethod;-><init>()V
 HSPLandroid/text/method/ReplacementTransformationMethod;->getTransformation(Ljava/lang/CharSequence;Landroid/view/View;)Ljava/lang/CharSequence;
-HPLandroid/text/method/ReplacementTransformationMethod;->onFocusChanged(Landroid/view/View;Ljava/lang/CharSequence;ZILandroid/graphics/Rect;)V
-HSPLandroid/text/method/ScrollingMovementMethod;-><init>()V
-HPLandroid/text/method/ScrollingMovementMethod;->onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z
-PLandroid/text/method/SingleLineTransformationMethod;-><init>()V
-PLandroid/text/method/SingleLineTransformationMethod;->getInstance()Landroid/text/method/SingleLineTransformationMethod;
+HSPLandroid/text/method/SingleLineTransformationMethod;-><init>()V
+HSPLandroid/text/method/SingleLineTransformationMethod;->getInstance()Landroid/text/method/SingleLineTransformationMethod;
 HSPLandroid/text/method/SingleLineTransformationMethod;->getOriginal()[C
 HSPLandroid/text/method/SingleLineTransformationMethod;->getReplacement()[C
-HSPLandroid/text/method/TextKeyListener;->getInstance()Landroid/text/method/TextKeyListener;
+HSPLandroid/text/method/TextKeyListener;-><init>(Landroid/text/method/TextKeyListener$Capitalize;Z)V
+HSPLandroid/text/method/TextKeyListener;->getInstance(ZLandroid/text/method/TextKeyListener$Capitalize;)Landroid/text/method/TextKeyListener;
 HSPLandroid/text/method/TextKeyListener;->onSpanAdded(Landroid/text/Spannable;Ljava/lang/Object;II)V
-HSPLandroid/text/method/TextKeyListener;->onSpanChanged(Landroid/text/Spannable;Ljava/lang/Object;IIII)V
-HPLandroid/text/method/TextKeyListener;->onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V
-HPLandroid/text/method/Touch;->onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z
-HPLandroid/text/style/AbsoluteSizeSpan;-><init>(I)V
-HPLandroid/text/style/AbsoluteSizeSpan;-><init>(IZ)V
-HPLandroid/text/style/AbsoluteSizeSpan;->updateDrawState(Landroid/text/TextPaint;)V
-HSPLandroid/text/style/AlignmentSpan$Standard;-><init>(Landroid/text/Layout$Alignment;)V
-HPLandroid/text/style/AlignmentSpan$Standard;->getAlignment()Landroid/text/Layout$Alignment;
-HPLandroid/text/style/BackgroundColorSpan;-><init>(I)V
-HPLandroid/text/style/BulletSpan;-><init>()V
-HPLandroid/text/style/BulletSpan;-><init>(IIZI)V
+HSPLandroid/text/method/TextKeyListener;->onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V
 HSPLandroid/text/style/CharacterStyle;-><init>()V
-PLandroid/text/style/CharacterStyle;->getUnderlying()Landroid/text/style/CharacterStyle;
-HPLandroid/text/style/CharacterStyle;->wrap(Landroid/text/style/CharacterStyle;)Landroid/text/style/CharacterStyle;
+HSPLandroid/text/style/CharacterStyle;->getUnderlying()Landroid/text/style/CharacterStyle;
 HSPLandroid/text/style/ClickableSpan;-><init>()V
-HSPLandroid/text/style/ClickableSpan;->updateDrawState(Landroid/text/TextPaint;)V
-HPLandroid/text/style/DynamicDrawableSpan;-><init>(I)V
-HPLandroid/text/style/DynamicDrawableSpan;->draw(Landroid/graphics/Canvas;Ljava/lang/CharSequence;IIFIIILandroid/graphics/Paint;)V
-HPLandroid/text/style/DynamicDrawableSpan;->getCachedDrawable()Landroid/graphics/drawable/Drawable;
-HPLandroid/text/style/DynamicDrawableSpan;->getSize(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Paint$FontMetricsInt;)I
 HSPLandroid/text/style/ForegroundColorSpan;-><init>(I)V
-PLandroid/text/style/ForegroundColorSpan;->getSpanTypeIdInternal()I
-HSPLandroid/text/style/ForegroundColorSpan;->updateDrawState(Landroid/text/TextPaint;)V
-PLandroid/text/style/ForegroundColorSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
-HPLandroid/text/style/ImageSpan;-><init>(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/text/style/ImageSpan;-><init>(Landroid/graphics/drawable/Drawable;I)V
-HPLandroid/text/style/ImageSpan;-><init>(Landroid/graphics/drawable/Drawable;Ljava/lang/String;)V
-HPLandroid/text/style/ImageSpan;-><init>(Landroid/graphics/drawable/Drawable;Ljava/lang/String;I)V
-HPLandroid/text/style/ImageSpan;->getDrawable()Landroid/graphics/drawable/Drawable;
-HPLandroid/text/style/LocaleSpan;-><init>(Ljava/util/Locale;)V
 HSPLandroid/text/style/MetricAffectingSpan;-><init>()V
 HSPLandroid/text/style/MetricAffectingSpan;->getUnderlying()Landroid/text/style/CharacterStyle;
 HSPLandroid/text/style/MetricAffectingSpan;->getUnderlying()Landroid/text/style/MetricAffectingSpan;
-HPLandroid/text/style/QuoteSpan;-><init>()V
-HPLandroid/text/style/QuoteSpan;-><init>(III)V
-HSPLandroid/text/style/RelativeSizeSpan;-><init>(F)V
-HPLandroid/text/style/RelativeSizeSpan;->updateDrawState(Landroid/text/TextPaint;)V
-HPLandroid/text/style/RelativeSizeSpan;->updateMeasureState(Landroid/text/TextPaint;)V
-HPLandroid/text/style/ReplacementSpan;-><init>()V
-PLandroid/text/style/SpellCheckSpan;->getSpanTypeIdInternal()I
-PLandroid/text/style/SpellCheckSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
 HSPLandroid/text/style/StyleSpan;-><init>(I)V
-HSPLandroid/text/style/StyleSpan;->apply(Landroid/graphics/Paint;I)V
-HSPLandroid/text/style/StyleSpan;->getSpanTypeIdInternal()I
-HSPLandroid/text/style/StyleSpan;->updateDrawState(Landroid/text/TextPaint;)V
-HSPLandroid/text/style/StyleSpan;->updateMeasureState(Landroid/text/TextPaint;)V
-HSPLandroid/text/style/StyleSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
-PLandroid/text/style/SuggestionSpan;-><init>(Landroid/os/Parcel;)V
-PLandroid/text/style/SuggestionSpan;->getSpanTypeIdInternal()I
-PLandroid/text/style/SuggestionSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
-HSPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/content/Context;I)V
-HSPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/content/Context;II)V
-HPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/text/style/TextAppearanceSpan;-><init>(Ljava/lang/String;IILandroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;)V
-HSPLandroid/text/style/TextAppearanceSpan;->getFamily()Ljava/lang/String;
-HSPLandroid/text/style/TextAppearanceSpan;->getLinkTextColor()Landroid/content/res/ColorStateList;
-HSPLandroid/text/style/TextAppearanceSpan;->getSpanTypeIdInternal()I
-HSPLandroid/text/style/TextAppearanceSpan;->getTextColor()Landroid/content/res/ColorStateList;
-HPLandroid/text/style/TextAppearanceSpan;->getTextSize()I
-HSPLandroid/text/style/TextAppearanceSpan;->getTextStyle()I
-HPLandroid/text/style/TextAppearanceSpan;->updateDrawState(Landroid/text/TextPaint;)V
-HPLandroid/text/style/TextAppearanceSpan;->updateMeasureState(Landroid/text/TextPaint;)V
-HSPLandroid/text/style/TextAppearanceSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
-HSPLandroid/text/style/TtsSpan;-><init>(Ljava/lang/String;Landroid/os/PersistableBundle;)V
-HPLandroid/text/style/TypefaceSpan;-><init>(Ljava/lang/String;)V
-HPLandroid/text/style/TypefaceSpan;-><init>(Ljava/lang/String;Landroid/graphics/Typeface;)V
-HSPLandroid/text/style/URLSpan;-><init>(Ljava/lang/String;)V
-HSPLandroid/text/style/UnderlineSpan;-><init>()V
-PLandroid/text/style/UnderlineSpan;->getSpanTypeIdInternal()I
-HSPLandroid/text/style/UnderlineSpan;->updateDrawState(Landroid/text/TextPaint;)V
-PLandroid/text/style/UnderlineSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
-HSPLandroid/text/util/Rfc822Token;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/text/util/Rfc822Token;->getAddress()Ljava/lang/String;
-HSPLandroid/text/util/Rfc822Tokenizer;->crunch(Ljava/lang/StringBuilder;)V
-HSPLandroid/text/util/Rfc822Tokenizer;->tokenize(Ljava/lang/CharSequence;)[Landroid/text/util/Rfc822Token;
-HSPLandroid/text/util/Rfc822Tokenizer;->tokenize(Ljava/lang/CharSequence;Ljava/util/Collection;)V
-PLandroid/transition/ChangeBounds;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-PLandroid/transition/ChangeBounds;->setResizeClip(Z)V
-PLandroid/transition/ChangeClipBounds;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-PLandroid/transition/ChangeImageTransform;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/transition/ChangeBounds;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/transition/ChangeBounds;->setResizeClip(Z)V
+HSPLandroid/transition/ChangeClipBounds;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/transition/ChangeImageTransform;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/transition/ChangeTransform;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-PLandroid/transition/Fade;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLandroid/transition/Scene;->enter()V
-HPLandroid/transition/Scene;->getCurrentScene(Landroid/view/ViewGroup;)Landroid/transition/Scene;
-HSPLandroid/transition/Scene;->getSceneRoot()Landroid/view/ViewGroup;
-HSPLandroid/transition/Scene;->setCurrentScene(Landroid/view/ViewGroup;Landroid/transition/Scene;)V
-HPLandroid/transition/Transition$2;-><init>(Landroid/transition/Transition;Landroid/util/ArrayMap;)V
-HPLandroid/transition/Transition$2;->onAnimationEnd(Landroid/animation/Animator;)V
-HPLandroid/transition/Transition$2;->onAnimationStart(Landroid/animation/Animator;)V
-HPLandroid/transition/Transition$3;-><init>(Landroid/transition/Transition;)V
-HPLandroid/transition/Transition$3;->onAnimationEnd(Landroid/animation/Animator;)V
-HPLandroid/transition/Transition$AnimationInfo;-><init>(Landroid/view/View;Ljava/lang/String;Landroid/transition/Transition;Landroid/view/WindowId;Landroid/transition/TransitionValues;)V
+HSPLandroid/transition/Fade;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/transition/Transition;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/transition/Transition;->access$000(Landroid/transition/Transition;)Ljava/util/ArrayList;
-HPLandroid/transition/Transition;->addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;
-HPLandroid/transition/Transition;->addUnmatched(Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
-HPLandroid/transition/Transition;->addViewValues(Landroid/transition/TransitionValuesMaps;Landroid/view/View;Landroid/transition/TransitionValues;)V
-HPLandroid/transition/Transition;->animate(Landroid/animation/Animator;)V
-HPLandroid/transition/Transition;->captureHierarchy(Landroid/view/View;Z)V
-HPLandroid/transition/Transition;->capturePropagationValues(Landroid/transition/TransitionValues;)V
-HPLandroid/transition/Transition;->captureValues(Landroid/view/ViewGroup;Z)V
-HPLandroid/transition/Transition;->clearValues(Z)V
-HPLandroid/transition/Transition;->clone()Landroid/transition/Transition;
-HPLandroid/transition/Transition;->createAnimators(Landroid/view/ViewGroup;Landroid/transition/TransitionValuesMaps;Landroid/transition/TransitionValuesMaps;Ljava/util/ArrayList;Ljava/util/ArrayList;)V
-HPLandroid/transition/Transition;->end()V
-HPLandroid/transition/Transition;->getDuration()J
-HPLandroid/transition/Transition;->getInterpolator()Landroid/animation/TimeInterpolator;
-HPLandroid/transition/Transition;->getName()Ljava/lang/String;
-HPLandroid/transition/Transition;->getRunningAnimators()Landroid/util/ArrayMap;
-HPLandroid/transition/Transition;->getStartDelay()J
-HPLandroid/transition/Transition;->isValidTarget(Landroid/view/View;)Z
-HPLandroid/transition/Transition;->matchIds(Landroid/util/ArrayMap;Landroid/util/ArrayMap;Landroid/util/SparseArray;Landroid/util/SparseArray;)V
-HPLandroid/transition/Transition;->matchInstances(Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
-HPLandroid/transition/Transition;->matchItemIds(Landroid/util/ArrayMap;Landroid/util/ArrayMap;Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;)V
-HPLandroid/transition/Transition;->matchNames(Landroid/util/ArrayMap;Landroid/util/ArrayMap;Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
-HPLandroid/transition/Transition;->matchStartAndEnd(Landroid/transition/TransitionValuesMaps;Landroid/transition/TransitionValuesMaps;)V
-HPLandroid/transition/Transition;->playTransition(Landroid/view/ViewGroup;)V
-HPLandroid/transition/Transition;->removeListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;
-HPLandroid/transition/Transition;->runAnimator(Landroid/animation/Animator;Landroid/util/ArrayMap;)V
-HPLandroid/transition/Transition;->runAnimators()V
-HPLandroid/transition/Transition;->start()V
-PLandroid/transition/TransitionInflater;-><init>(Landroid/content/Context;)V
+HSPLandroid/transition/TransitionInflater;-><init>(Landroid/content/Context;)V
 HSPLandroid/transition/TransitionInflater;->createTransitionFromXml(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/transition/Transition;)Landroid/transition/Transition;
-PLandroid/transition/TransitionInflater;->from(Landroid/content/Context;)Landroid/transition/TransitionInflater;
+HSPLandroid/transition/TransitionInflater;->from(Landroid/content/Context;)Landroid/transition/TransitionInflater;
 HSPLandroid/transition/TransitionInflater;->inflateTransition(I)Landroid/transition/Transition;
-HPLandroid/transition/TransitionListenerAdapter;-><init>()V
-HPLandroid/transition/TransitionListenerAdapter;->onTransitionEnd(Landroid/transition/Transition;)V
-HPLandroid/transition/TransitionListenerAdapter;->onTransitionStart(Landroid/transition/Transition;)V
-HPLandroid/transition/TransitionManager$MultiListener$1;-><init>(Landroid/transition/TransitionManager$MultiListener;Landroid/util/ArrayMap;)V
-HPLandroid/transition/TransitionManager$MultiListener$1;->onTransitionEnd(Landroid/transition/Transition;)V
-HPLandroid/transition/TransitionManager$MultiListener;->onPreDraw()Z
-HPLandroid/transition/TransitionManager$MultiListener;->removeListeners()V
-PLandroid/transition/TransitionManager;-><init>()V
-HPLandroid/transition/TransitionManager;->access$000()Ljava/util/ArrayList;
-HPLandroid/transition/TransitionManager;->access$100()Landroid/util/ArrayMap;
-HPLandroid/transition/TransitionManager;->beginDelayedTransition(Landroid/view/ViewGroup;Landroid/transition/Transition;)V
-HPLandroid/transition/TransitionManager;->endTransitions(Landroid/view/ViewGroup;)V
-HPLandroid/transition/TransitionManager;->getRunningTransitions()Landroid/util/ArrayMap;
-HPLandroid/transition/TransitionManager;->sceneChangeSetup(Landroid/view/ViewGroup;Landroid/transition/Transition;)V
-HPLandroid/transition/TransitionSet$TransitionSetListener;-><init>(Landroid/transition/TransitionSet;)V
-HPLandroid/transition/TransitionSet$TransitionSetListener;->onTransitionEnd(Landroid/transition/Transition;)V
-HPLandroid/transition/TransitionSet$TransitionSetListener;->onTransitionStart(Landroid/transition/Transition;)V
+HSPLandroid/transition/TransitionManager;-><init>()V
 HSPLandroid/transition/TransitionSet;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/transition/TransitionSet;->addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;
-HPLandroid/transition/TransitionSet;->addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/TransitionSet;
 HSPLandroid/transition/TransitionSet;->addTransition(Landroid/transition/Transition;)Landroid/transition/TransitionSet;
-PLandroid/transition/TransitionSet;->addTransitionInternal(Landroid/transition/Transition;)V
-HPLandroid/transition/TransitionSet;->captureEndValues(Landroid/transition/TransitionValues;)V
-HPLandroid/transition/TransitionSet;->capturePropagationValues(Landroid/transition/TransitionValues;)V
-HPLandroid/transition/TransitionSet;->captureStartValues(Landroid/transition/TransitionValues;)V
-HPLandroid/transition/TransitionSet;->clone()Landroid/transition/Transition;
-HPLandroid/transition/TransitionSet;->clone()Landroid/transition/TransitionSet;
-HPLandroid/transition/TransitionSet;->createAnimators(Landroid/view/ViewGroup;Landroid/transition/TransitionValuesMaps;Landroid/transition/TransitionValuesMaps;Ljava/util/ArrayList;Ljava/util/ArrayList;)V
+HSPLandroid/transition/TransitionSet;->addTransitionInternal(Landroid/transition/Transition;)V
 HSPLandroid/transition/TransitionSet;->getTransitionCount()I
-HPLandroid/transition/TransitionSet;->removeListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;
-HPLandroid/transition/TransitionSet;->removeListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/TransitionSet;
-HPLandroid/transition/TransitionSet;->runAnimators()V
 HSPLandroid/transition/TransitionSet;->setOrdering(I)Landroid/transition/TransitionSet;
-HPLandroid/transition/TransitionSet;->setupStartEndListeners()V
-HPLandroid/transition/TransitionValues;-><init>(Landroid/view/View;)V
-HPLandroid/transition/TransitionValuesMaps;-><init>()V
-PLandroid/transition/Visibility;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/transition/Visibility;->captureStartValues(Landroid/transition/TransitionValues;)V
-HPLandroid/transition/Visibility;->captureValues(Landroid/transition/TransitionValues;)V
-HPLandroid/transition/Visibility;->createAnimator(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;
-PLandroid/transition/Visibility;->getMode()I
-HPLandroid/transition/Visibility;->getTransitionProperties()[Ljava/lang/String;
-HPLandroid/transition/Visibility;->getVisibilityChangeInfo(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/transition/Visibility$VisibilityInfo;
-HPLandroid/transition/Visibility;->isTransitionRequired(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Z
-HPLandroid/transition/Visibility;->onAppear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;
-HPLandroid/transition/Visibility;->onDisappear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;
-PLandroid/transition/Visibility;->setMode(I)V
-PLandroid/util/AndroidException;-><init>()V
-PLandroid/util/AndroidException;-><init>(Ljava/lang/Exception;)V
+HSPLandroid/transition/TransitionValuesMaps;-><init>()V
+HSPLandroid/transition/Visibility;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/transition/Visibility;->getMode()I
+HSPLandroid/transition/Visibility;->setMode(I)V
+HSPLandroid/util/AndroidException;-><init>()V
 HSPLandroid/util/AndroidException;-><init>(Ljava/lang/String;)V
+HSPLandroid/util/AndroidException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
 HSPLandroid/util/AndroidRuntimeException;-><init>(Ljava/lang/String;)V
-HPLandroid/util/ArrayMap$1;-><init>(Landroid/util/ArrayMap;)V
+HSPLandroid/util/ArrayMap$1;-><init>(Landroid/util/ArrayMap;)V
 HSPLandroid/util/ArrayMap$1;->colGetEntry(II)Ljava/lang/Object;
-HSPLandroid/util/ArrayMap$1;->colGetMap()Ljava/util/Map;
 HSPLandroid/util/ArrayMap$1;->colGetSize()I
-HPLandroid/util/ArrayMap$1;->colIndexOfKey(Ljava/lang/Object;)I
-HSPLandroid/util/ArrayMap$1;->colIndexOfValue(Ljava/lang/Object;)I
+HSPLandroid/util/ArrayMap$1;->colIndexOfKey(Ljava/lang/Object;)I
 HSPLandroid/util/ArrayMap$1;->colRemoveAt(I)V
-HSPLandroid/util/ArrayMap$1;->colSetValue(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;-><init>()V
 HSPLandroid/util/ArrayMap;-><init>(I)V
 HSPLandroid/util/ArrayMap;-><init>(IZ)V
@@ -22963,9 +11230,7 @@
 HSPLandroid/util/ArrayMap;->append(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/util/ArrayMap;->binarySearchHashes([III)I
 HSPLandroid/util/ArrayMap;->clear()V
-HSPLandroid/util/ArrayMap;->containsAll(Ljava/util/Collection;)Z
 HSPLandroid/util/ArrayMap;->containsKey(Ljava/lang/Object;)Z
-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
@@ -22973,7 +11238,6 @@
 HSPLandroid/util/ArrayMap;->freeArrays([I[Ljava/lang/Object;I)V
 HSPLandroid/util/ArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->getCollection()Landroid/util/MapCollections;
-HSPLandroid/util/ArrayMap;->hashCode()I
 HSPLandroid/util/ArrayMap;->indexOf(Ljava/lang/Object;I)I
 HSPLandroid/util/ArrayMap;->indexOfKey(Ljava/lang/Object;)I
 HSPLandroid/util/ArrayMap;->indexOfNull()I
@@ -22985,24 +11249,20 @@
 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;->removeAll(Ljava/util/Collection;)Z
 HSPLandroid/util/ArrayMap;->removeAt(I)Ljava/lang/Object;
-HSPLandroid/util/ArrayMap;->retainAll(Ljava/util/Collection;)Z
-HSPLandroid/util/ArrayMap;->setValueAt(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->size()I
 HSPLandroid/util/ArrayMap;->toString()Ljava/lang/String;
 HSPLandroid/util/ArrayMap;->validate()V
 HSPLandroid/util/ArrayMap;->valueAt(I)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->values()Ljava/util/Collection;
+HSPLandroid/util/ArraySet$1;-><init>(Landroid/util/ArraySet;)V
 HSPLandroid/util/ArraySet$1;->colGetEntry(II)Ljava/lang/Object;
 HSPLandroid/util/ArraySet$1;->colGetSize()I
-HSPLandroid/util/ArraySet$1;->colRemoveAt(I)V
 HSPLandroid/util/ArraySet;-><init>()V
 HSPLandroid/util/ArraySet;-><init>(I)V
 HSPLandroid/util/ArraySet;-><init>(IZ)V
 HSPLandroid/util/ArraySet;-><init>(Landroid/util/ArraySet;)V
 HSPLandroid/util/ArraySet;-><init>(Ljava/util/Collection;)V
-HSPLandroid/util/ArraySet;-><init>([Ljava/lang/Object;)V
 HSPLandroid/util/ArraySet;->add(Ljava/lang/Object;)Z
 HSPLandroid/util/ArraySet;->addAll(Landroid/util/ArraySet;)V
 HSPLandroid/util/ArraySet;->addAll(Ljava/util/Collection;)Z
@@ -23014,6 +11274,7 @@
 HSPLandroid/util/ArraySet;->ensureCapacity(I)V
 HSPLandroid/util/ArraySet;->equals(Ljava/lang/Object;)Z
 HSPLandroid/util/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V
+HSPLandroid/util/ArraySet;->getCollection()Landroid/util/MapCollections;
 HSPLandroid/util/ArraySet;->hashCode()I
 HSPLandroid/util/ArraySet;->indexOf(Ljava/lang/Object;)I
 HSPLandroid/util/ArraySet;->indexOf(Ljava/lang/Object;I)I
@@ -23021,30 +11282,17 @@
 HSPLandroid/util/ArraySet;->isEmpty()Z
 HSPLandroid/util/ArraySet;->iterator()Ljava/util/Iterator;
 HSPLandroid/util/ArraySet;->remove(Ljava/lang/Object;)Z
-HPLandroid/util/ArraySet;->removeAll(Landroid/util/ArraySet;)Z
 HSPLandroid/util/ArraySet;->removeAll(Ljava/util/Collection;)Z
 HSPLandroid/util/ArraySet;->removeAt(I)Ljava/lang/Object;
-HSPLandroid/util/ArraySet;->removeIf(Ljava/util/function/Predicate;)Z
-PLandroid/util/ArraySet;->retainAll(Ljava/util/Collection;)Z
-HPLandroid/util/ArraySet;->shouldShrink()Z
+HSPLandroid/util/ArraySet;->shouldShrink()Z
 HSPLandroid/util/ArraySet;->size()I
 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;
-PLandroid/util/ArraySet;->valueAtUnchecked(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;Ljava/lang/String;)V
-HSPLandroid/util/AtomicFile;->delete()V
-HSPLandroid/util/AtomicFile;->exists()Z
-PLandroid/util/AtomicFile;->failWrite(Ljava/io/FileOutputStream;)V
-HSPLandroid/util/AtomicFile;->finishWrite(Ljava/io/FileOutputStream;)V
-HSPLandroid/util/AtomicFile;->getBaseFile()Ljava/io/File;
-HSPLandroid/util/AtomicFile;->getLastModifiedTime()J
 HSPLandroid/util/AtomicFile;->openRead()Ljava/io/FileInputStream;
-HSPLandroid/util/AtomicFile;->readFully()[B
-HSPLandroid/util/AtomicFile;->startWrite()Ljava/io/FileOutputStream;
-HSPLandroid/util/AtomicFile;->startWrite(J)Ljava/io/FileOutputStream;
 HSPLandroid/util/Base64$Coder;-><init>()V
 HSPLandroid/util/Base64$Decoder;-><init>(I[B)V
 HSPLandroid/util/Base64$Decoder;->process([BIIZ)Z
@@ -23059,71 +11307,34 @@
 HSPLandroid/util/Base64;->encodeToString([BIII)Ljava/lang/String;
 HSPLandroid/util/ContainerHelpers;->binarySearch([III)I
 HSPLandroid/util/ContainerHelpers;->binarySearch([JIJ)I
-HPLandroid/util/DataUnit$4;->toBytes(J)J
-HSPLandroid/util/DataUnit$5;->toBytes(J)J
-HPLandroid/util/DebugUtils;->constNameWithoutPrefix(Ljava/lang/String;Ljava/lang/reflect/Field;)Ljava/lang/String;
-HPLandroid/util/DebugUtils;->flagsToString(Ljava/lang/Class;Ljava/lang/String;I)Ljava/lang/String;
-HPLandroid/util/DebugUtils;->printSizeValue(Ljava/io/PrintWriter;J)V
-PLandroid/util/DebugUtils;->valueToString(Ljava/lang/Class;Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/util/DebugUtils;->constNameWithoutPrefix(Ljava/lang/String;Ljava/lang/reflect/Field;)Ljava/lang/String;
+HSPLandroid/util/DebugUtils;->flagsToString(Ljava/lang/Class;Ljava/lang/String;I)Ljava/lang/String;
 HSPLandroid/util/DisplayMetrics;-><init>()V
 HSPLandroid/util/DisplayMetrics;->setTo(Landroid/util/DisplayMetrics;)V
 HSPLandroid/util/DisplayMetrics;->setToDefaults()V
-HSPLandroid/util/DisplayMetrics;->toString()Ljava/lang/String;
-HSPLandroid/util/EventLog$Event;-><init>([B)V
-HSPLandroid/util/EventLog$Event;->decodeObject()Ljava/lang/Object;
-HSPLandroid/util/EventLog$Event;->getData()Ljava/lang/Object;
-PLandroid/util/EventLog$Event;->getProcessId()I
-HSPLandroid/util/EventLog$Event;->getTag()I
-HPLandroid/util/EventLog$Event;->getThreadId()I
-HSPLandroid/util/EventLog$Event;->getTimeNanos()J
-HPLandroid/util/EventLog$Event;->getUid()I
-PLandroid/util/EventLog;->getTagCode(Ljava/lang/String;)I
-HPLandroid/util/EventLog;->readTagsFile()V
-HSPLandroid/util/FastImmutableArraySet$FastIterator;-><init>([Ljava/lang/Object;)V
-HSPLandroid/util/FastImmutableArraySet$FastIterator;->hasNext()Z
-HSPLandroid/util/FastImmutableArraySet$FastIterator;->next()Ljava/lang/Object;
-PLandroid/util/FastImmutableArraySet;-><init>([Ljava/lang/Object;)V
-HSPLandroid/util/FastImmutableArraySet;->iterator()Ljava/util/Iterator;
-HSPLandroid/util/FeatureFlagUtils;->isEnabled(Landroid/content/Context;Ljava/lang/String;)Z
+HSPLandroid/util/ExceptionUtils;->appendCause(Ljava/lang/Throwable;Ljava/lang/Throwable;)Ljava/lang/Throwable;
+HSPLandroid/util/ExceptionUtils;->getRootCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
 HSPLandroid/util/FloatProperty;-><init>(Ljava/lang/String;)V
-HSPLandroid/util/FloatProperty;->set(Ljava/lang/Object;Ljava/lang/Float;)V
-HSPLandroid/util/FloatProperty;->set(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroid/util/IconDrawableFactory;->newInstance(Landroid/content/Context;)Landroid/util/IconDrawableFactory;
 HSPLandroid/util/IntArray;-><init>()V
 HSPLandroid/util/IntArray;-><init>(I)V
-PLandroid/util/IntArray;-><init>([II)V
 HSPLandroid/util/IntArray;->add(I)V
 HSPLandroid/util/IntArray;->add(II)V
-PLandroid/util/IntArray;->addAll(Landroid/util/IntArray;)V
 HSPLandroid/util/IntArray;->clear()V
 HSPLandroid/util/IntArray;->ensureCapacity(I)V
 HSPLandroid/util/IntArray;->get(I)I
-HSPLandroid/util/IntArray;->indexOf(I)I
 HSPLandroid/util/IntArray;->remove(I)V
 HSPLandroid/util/IntArray;->size()I
-HSPLandroid/util/IntArray;->toArray()[I
-PLandroid/util/IntArray;->wrap([I)Landroid/util/IntArray;
 HSPLandroid/util/IntProperty;-><init>(Ljava/lang/String;)V
-HSPLandroid/util/IntProperty;->set(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/util/JsonReader;-><init>(Ljava/io/Reader;)V
 HSPLandroid/util/JsonReader;->advance()Landroid/util/JsonToken;
-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;->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;->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;->nextInt()I
 HSPLandroid/util/JsonReader;->nextLiteral(Z)Ljava/lang/String;
-HSPLandroid/util/JsonReader;->nextLong()J
 HSPLandroid/util/JsonReader;->nextName()Ljava/lang/String;
 HSPLandroid/util/JsonReader;->nextNonWhitespace()I
 HSPLandroid/util/JsonReader;->nextString()Ljava/lang/String;
@@ -23131,61 +11342,17 @@
 HSPLandroid/util/JsonReader;->nextValue()Landroid/util/JsonToken;
 HSPLandroid/util/JsonReader;->objectValue()Landroid/util/JsonToken;
 HSPLandroid/util/JsonReader;->peek()Landroid/util/JsonToken;
-HPLandroid/util/JsonReader;->peekStack()Landroid/util/JsonScope;
-HSPLandroid/util/JsonReader;->readEscapeCharacter()C
+HSPLandroid/util/JsonReader;->peekStack()Landroid/util/JsonScope;
+HSPLandroid/util/JsonReader;->pop()Landroid/util/JsonScope;
+HSPLandroid/util/JsonReader;->push(Landroid/util/JsonScope;)V
 HSPLandroid/util/JsonReader;->readLiteral()Landroid/util/JsonToken;
-HPLandroid/util/JsonReader;->replaceTop(Landroid/util/JsonScope;)V
-HSPLandroid/util/JsonReader;->setLenient(Z)V
-HSPLandroid/util/JsonReader;->skipValue()V
-HSPLandroid/util/JsonToken;->values()[Landroid/util/JsonToken;
-HSPLandroid/util/JsonWriter;-><init>(Ljava/io/Writer;)V
-HSPLandroid/util/JsonWriter;->beforeName()V
-HSPLandroid/util/JsonWriter;->beforeValue(Z)V
-HSPLandroid/util/JsonWriter;->beginArray()Landroid/util/JsonWriter;
-HSPLandroid/util/JsonWriter;->beginObject()Landroid/util/JsonWriter;
-HSPLandroid/util/JsonWriter;->close()V
-HSPLandroid/util/JsonWriter;->close(Landroid/util/JsonScope;Landroid/util/JsonScope;Ljava/lang/String;)Landroid/util/JsonWriter;
-HSPLandroid/util/JsonWriter;->endArray()Landroid/util/JsonWriter;
-HSPLandroid/util/JsonWriter;->endObject()Landroid/util/JsonWriter;
-HSPLandroid/util/JsonWriter;->flush()V
-HSPLandroid/util/JsonWriter;->name(Ljava/lang/String;)Landroid/util/JsonWriter;
-HPLandroid/util/JsonWriter;->open(Landroid/util/JsonScope;Ljava/lang/String;)Landroid/util/JsonWriter;
-HSPLandroid/util/JsonWriter;->setLenient(Z)V
-HSPLandroid/util/JsonWriter;->string(Ljava/lang/String;)V
-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;
-HSPLandroid/util/KeyValueListParser$IntValue;-><init>(Ljava/lang/String;I)V
-PLandroid/util/KeyValueListParser$IntValue;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLandroid/util/KeyValueListParser$IntValue;->dumpProto(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLandroid/util/KeyValueListParser$IntValue;->getValue()I
-HSPLandroid/util/KeyValueListParser$IntValue;->parse(Landroid/util/KeyValueListParser;)V
+HSPLandroid/util/JsonReader;->replaceTop(Landroid/util/JsonScope;)V
 HSPLandroid/util/KeyValueListParser;-><init>(C)V
-HSPLandroid/util/KeyValueListParser;->getBoolean(Ljava/lang/String;Z)Z
-HSPLandroid/util/KeyValueListParser;->getDurationMillis(Ljava/lang/String;J)J
-HSPLandroid/util/KeyValueListParser;->getFloat(Ljava/lang/String;F)F
-HSPLandroid/util/KeyValueListParser;->getInt(Ljava/lang/String;I)I
-HSPLandroid/util/KeyValueListParser;->getLong(Ljava/lang/String;J)J
-HSPLandroid/util/KeyValueListParser;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/util/KeyValueListParser;->setString(Ljava/lang/String;)V
-PLandroid/util/KeyValueSettingObserver$SettingObserver;-><init>(Landroid/util/KeyValueSettingObserver;Landroid/os/Handler;)V
-PLandroid/util/KeyValueSettingObserver$SettingObserver;-><init>(Landroid/util/KeyValueSettingObserver;Landroid/os/Handler;Landroid/util/KeyValueSettingObserver$1;)V
-PLandroid/util/KeyValueSettingObserver;-><init>(Landroid/os/Handler;Landroid/content/ContentResolver;Landroid/net/Uri;)V
-PLandroid/util/KeyValueSettingObserver;->setParserValue()V
-PLandroid/util/KeyValueSettingObserver;->start()V
-HSPLandroid/util/LauncherIcons;->getBadgedDrawable(Landroid/graphics/drawable/Drawable;II)Landroid/graphics/drawable/Drawable;
-PLandroid/util/LocalLog$ReadOnlyLocalLog;-><init>(Landroid/util/LocalLog;)V
-PLandroid/util/LocalLog$ReadOnlyLocalLog;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLandroid/util/LocalLog;-><init>(I)V
 HSPLandroid/util/LocalLog;-><init>(IZ)V
 HSPLandroid/util/LocalLog;->append(Ljava/lang/String;)V
-PLandroid/util/LocalLog;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLandroid/util/LocalLog;->dump(Ljava/io/PrintWriter;)V
-HPLandroid/util/LocalLog;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLandroid/util/LocalLog;->log(Ljava/lang/String;)V
-PLandroid/util/LocalLog;->readOnlyLocalLog()Landroid/util/LocalLog$ReadOnlyLocalLog;
-PLandroid/util/LocalLog;->reverseDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLandroid/util/LocalLog;->reverseDump(Ljava/io/PrintWriter;)V
 HSPLandroid/util/Log$1;->onTerribleFailure(Ljava/lang/String;Landroid/util/Log$TerribleFailure;Z)V
 HSPLandroid/util/Log$ImmediateLogWriter;-><init>(IILjava/lang/String;)V
 HSPLandroid/util/Log$ImmediateLogWriter;->flush()V
@@ -23193,208 +11360,114 @@
 HSPLandroid/util/Log$ImmediateLogWriter;->write([CII)V
 HSPLandroid/util/Log$TerribleFailure;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
 HSPLandroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
-HPLandroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
+HSPLandroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
 HSPLandroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
 HSPLandroid/util/Log;->getStackTraceString(Ljava/lang/Throwable;)Ljava/lang/String;
 HSPLandroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
+HSPLandroid/util/Log;->logToRadioBuffer(ILjava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/Log;->println(ILjava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/Log;->printlns(IILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
 HSPLandroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
-HPLandroid/util/Log;->w(Ljava/lang/String;Ljava/lang/Throwable;)I
 HSPLandroid/util/Log;->wtf(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ZZ)I
-HPLandroid/util/Log;->wtf(Ljava/lang/String;Ljava/lang/String;)I
-HPLandroid/util/Log;->wtf(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
-PLandroid/util/Log;->wtf(Ljava/lang/String;Ljava/lang/Throwable;)I
 HSPLandroid/util/LogPrinter;-><init>(ILjava/lang/String;)V
 HSPLandroid/util/LongArray;-><init>()V
 HSPLandroid/util/LongArray;-><init>(I)V
 HSPLandroid/util/LongArray;->add(IJ)V
 HSPLandroid/util/LongArray;->add(J)V
-HPLandroid/util/LongArray;->clear()V
-HPLandroid/util/LongArray;->clone()Landroid/util/LongArray;
 HSPLandroid/util/LongArray;->ensureCapacity(I)V
 HSPLandroid/util/LongArray;->get(I)J
-HPLandroid/util/LongArray;->indexOf(J)I
 HSPLandroid/util/LongArray;->size()I
-HSPLandroid/util/LongArray;->toArray()[J
-HSPLandroid/util/LongArrayQueue;-><init>()V
-HSPLandroid/util/LongArrayQueue;-><init>(I)V
-PLandroid/util/LongArrayQueue;->addLast(J)V
-PLandroid/util/LongArrayQueue;->clear()V
-HPLandroid/util/LongArrayQueue;->get(I)J
-PLandroid/util/LongArrayQueue;->grow()V
-HPLandroid/util/LongArrayQueue;->peekFirst()J
-HPLandroid/util/LongArrayQueue;->peekLast()J
-PLandroid/util/LongArrayQueue;->removeFirst()J
-HPLandroid/util/LongArrayQueue;->size()I
-HSPLandroid/util/LongSparseArray$StringParcelling;-><init>()V
-HPLandroid/util/LongSparseArray$StringParcelling;->parcel(Landroid/util/LongSparseArray;Landroid/os/Parcel;I)V
-HSPLandroid/util/LongSparseArray$StringParcelling;->unparcel(Landroid/os/Parcel;)Landroid/util/LongSparseArray;
 HSPLandroid/util/LongSparseArray;-><init>()V
 HSPLandroid/util/LongSparseArray;-><init>(I)V
-PLandroid/util/LongSparseArray;->access$000(Landroid/util/LongSparseArray;)I
-HSPLandroid/util/LongSparseArray;->access$002(Landroid/util/LongSparseArray;I)I
-HSPLandroid/util/LongSparseArray;->access$100(Landroid/util/LongSparseArray;)[J
-HSPLandroid/util/LongSparseArray;->access$102(Landroid/util/LongSparseArray;[J)[J
-HSPLandroid/util/LongSparseArray;->access$200(Landroid/util/LongSparseArray;)[Ljava/lang/Object;
-HSPLandroid/util/LongSparseArray;->access$202(Landroid/util/LongSparseArray;[Ljava/lang/Object;)[Ljava/lang/Object;
-PLandroid/util/LongSparseArray;->append(JLjava/lang/Object;)V
-PLandroid/util/LongSparseArray;->clear()V
+HSPLandroid/util/LongSparseArray;->clear()V
 HSPLandroid/util/LongSparseArray;->delete(J)V
 HSPLandroid/util/LongSparseArray;->gc()V
 HSPLandroid/util/LongSparseArray;->get(J)Ljava/lang/Object;
 HSPLandroid/util/LongSparseArray;->get(JLjava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/util/LongSparseArray;->indexOfKey(J)I
-HSPLandroid/util/LongSparseArray;->indexOfValue(Ljava/lang/Object;)I
 HSPLandroid/util/LongSparseArray;->keyAt(I)J
 HSPLandroid/util/LongSparseArray;->put(JLjava/lang/Object;)V
 HSPLandroid/util/LongSparseArray;->remove(J)V
 HSPLandroid/util/LongSparseArray;->removeAt(I)V
-PLandroid/util/LongSparseArray;->setValueAt(ILjava/lang/Object;)V
 HSPLandroid/util/LongSparseArray;->size()I
 HSPLandroid/util/LongSparseArray;->valueAt(I)Ljava/lang/Object;
-HSPLandroid/util/LongSparseLongArray$Parcelling;-><init>()V
-HPLandroid/util/LongSparseLongArray$Parcelling;->parcel(Landroid/util/LongSparseLongArray;Landroid/os/Parcel;I)V
-HSPLandroid/util/LongSparseLongArray$Parcelling;->unparcel(Landroid/os/Parcel;)Landroid/util/LongSparseLongArray;
 HSPLandroid/util/LongSparseLongArray;-><init>()V
 HSPLandroid/util/LongSparseLongArray;-><init>(I)V
-PLandroid/util/LongSparseLongArray;->access$000(Landroid/util/LongSparseLongArray;)I
-HSPLandroid/util/LongSparseLongArray;->access$002(Landroid/util/LongSparseLongArray;I)I
-HSPLandroid/util/LongSparseLongArray;->access$100(Landroid/util/LongSparseLongArray;)[J
-HSPLandroid/util/LongSparseLongArray;->access$102(Landroid/util/LongSparseLongArray;[J)[J
-HSPLandroid/util/LongSparseLongArray;->access$200(Landroid/util/LongSparseLongArray;)[J
-HSPLandroid/util/LongSparseLongArray;->access$202(Landroid/util/LongSparseLongArray;[J)[J
 HSPLandroid/util/LongSparseLongArray;->append(JJ)V
 HSPLandroid/util/LongSparseLongArray;->clear()V
 HSPLandroid/util/LongSparseLongArray;->clone()Landroid/util/LongSparseLongArray;
-HSPLandroid/util/LongSparseLongArray;->delete(J)V
-HSPLandroid/util/LongSparseLongArray;->get(J)J
 HSPLandroid/util/LongSparseLongArray;->get(JJ)J
 HSPLandroid/util/LongSparseLongArray;->indexOfKey(J)I
-HPLandroid/util/LongSparseLongArray;->keyAt(I)J
 HSPLandroid/util/LongSparseLongArray;->put(JJ)V
-HSPLandroid/util/LongSparseLongArray;->removeAt(I)V
-HSPLandroid/util/LongSparseLongArray;->size()I
 HSPLandroid/util/LongSparseLongArray;->valueAt(I)J
 HSPLandroid/util/LruCache;-><init>(I)V
 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;
-PLandroid/util/LruCache;->hitCount()I
-PLandroid/util/LruCache;->missCount()I
 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
+HSPLandroid/util/MapCollections$ArrayIterator;-><init>(Landroid/util/MapCollections;I)V
 HSPLandroid/util/MapCollections$ArrayIterator;->hasNext()Z
 HSPLandroid/util/MapCollections$ArrayIterator;->next()Ljava/lang/Object;
 HSPLandroid/util/MapCollections$ArrayIterator;->remove()V
+HSPLandroid/util/MapCollections$EntrySet;-><init>(Landroid/util/MapCollections;)V
 HSPLandroid/util/MapCollections$EntrySet;->iterator()Ljava/util/Iterator;
 HSPLandroid/util/MapCollections$EntrySet;->size()I
-HPLandroid/util/MapCollections$KeySet;->contains(Ljava/lang/Object;)Z
-HSPLandroid/util/MapCollections$KeySet;->containsAll(Ljava/util/Collection;)Z
-HSPLandroid/util/MapCollections$KeySet;->equals(Ljava/lang/Object;)Z
-HSPLandroid/util/MapCollections$KeySet;->isEmpty()Z
+HSPLandroid/util/MapCollections$KeySet;-><init>(Landroid/util/MapCollections;)V
+HSPLandroid/util/MapCollections$KeySet;->contains(Ljava/lang/Object;)Z
 HSPLandroid/util/MapCollections$KeySet;->iterator()Ljava/util/Iterator;
 HSPLandroid/util/MapCollections$KeySet;->size()I
 HSPLandroid/util/MapCollections$KeySet;->toArray()[Ljava/lang/Object;
 HSPLandroid/util/MapCollections$KeySet;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLandroid/util/MapCollections$MapIterator;-><init>(Landroid/util/MapCollections;)V
 HSPLandroid/util/MapCollections$MapIterator;->getKey()Ljava/lang/Object;
 HSPLandroid/util/MapCollections$MapIterator;->getValue()Ljava/lang/Object;
 HSPLandroid/util/MapCollections$MapIterator;->hasNext()Z
 HSPLandroid/util/MapCollections$MapIterator;->next()Ljava/lang/Object;
-HSPLandroid/util/MapCollections$MapIterator;->remove()V
-HSPLandroid/util/MapCollections$MapIterator;->setValue(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/util/MapCollections$ValuesCollection;->contains(Ljava/lang/Object;)Z
+HSPLandroid/util/MapCollections$MapIterator;->next()Ljava/util/Map$Entry;
+HSPLandroid/util/MapCollections$ValuesCollection;-><init>(Landroid/util/MapCollections;)V
 HSPLandroid/util/MapCollections$ValuesCollection;->iterator()Ljava/util/Iterator;
 HSPLandroid/util/MapCollections$ValuesCollection;->size()I
 HSPLandroid/util/MapCollections$ValuesCollection;->toArray()[Ljava/lang/Object;
-PLandroid/util/MapCollections;-><init>()V
-HSPLandroid/util/MapCollections;->containsAllHelper(Ljava/util/Map;Ljava/util/Collection;)Z
-HSPLandroid/util/MapCollections;->equalsSetHelper(Ljava/util/Set;Ljava/lang/Object;)Z
+HSPLandroid/util/MapCollections;-><init>()V
 HSPLandroid/util/MapCollections;->getEntrySet()Ljava/util/Set;
 HSPLandroid/util/MapCollections;->getKeySet()Ljava/util/Set;
 HSPLandroid/util/MapCollections;->getValues()Ljava/util/Collection;
-HSPLandroid/util/MapCollections;->removeAllHelper(Ljava/util/Map;Ljava/util/Collection;)Z
-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;
-HPLandroid/util/MathUtils;->abs(F)F
 HSPLandroid/util/MathUtils;->addOrThrow(II)I
 HSPLandroid/util/MathUtils;->constrain(FFF)F
 HSPLandroid/util/MathUtils;->constrain(III)I
-HSPLandroid/util/MathUtils;->constrain(JJJ)J
-HPLandroid/util/MathUtils;->exp(F)F
-HPLandroid/util/MathUtils;->fitRect(Landroid/graphics/Rect;I)V
 HSPLandroid/util/MathUtils;->lerp(FFF)F
-HPLandroid/util/MathUtils;->log(F)F
-HPLandroid/util/MathUtils;->mag(FF)F
-HPLandroid/util/MathUtils;->map(FFFFF)F
-HPLandroid/util/MathUtils;->max(FF)F
-HPLandroid/util/MathUtils;->min(II)F
-HPLandroid/util/MathUtils;->norm(FFF)F
-HSPLandroid/util/MathUtils;->pow(FF)F
-HPLandroid/util/MathUtils;->saturate(F)F
-HPLandroid/util/MathUtils;->smoothStep(FFF)F
-HPLandroid/util/MathUtils;->sq(F)F
-HPLandroid/util/MathUtils;->sqrt(F)F
 HSPLandroid/util/MemoryIntArray$1;->createFromParcel(Landroid/os/Parcel;)Landroid/util/MemoryIntArray;
 HSPLandroid/util/MemoryIntArray$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/util/MemoryIntArray;-><init>(I)V
 HSPLandroid/util/MemoryIntArray;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/util/MemoryIntArray;-><init>(Landroid/os/Parcel;Landroid/util/MemoryIntArray$1;)V
-HSPLandroid/util/MemoryIntArray;->close()V
 HSPLandroid/util/MemoryIntArray;->enforceNotClosed()V
 HSPLandroid/util/MemoryIntArray;->enforceValidIndex(I)V
-HSPLandroid/util/MemoryIntArray;->enforceWritable()V
-HSPLandroid/util/MemoryIntArray;->finalize()V
 HSPLandroid/util/MemoryIntArray;->get(I)I
 HSPLandroid/util/MemoryIntArray;->isClosed()Z
-HSPLandroid/util/MemoryIntArray;->isWritable()Z
-HSPLandroid/util/MemoryIntArray;->set(II)V
 HSPLandroid/util/MemoryIntArray;->size()I
-HSPLandroid/util/MemoryIntArray;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/util/MergedConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/util/MergedConfiguration;
 HSPLandroid/util/MergedConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/util/MergedConfiguration;-><init>()V
-PLandroid/util/MergedConfiguration;-><init>(Landroid/content/res/Configuration;)V
-PLandroid/util/MergedConfiguration;-><init>(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)V
-PLandroid/util/MergedConfiguration;-><init>(Landroid/util/MergedConfiguration;)V
-HPLandroid/util/MergedConfiguration;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLandroid/util/MergedConfiguration;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/util/MergedConfiguration;-><init>(Landroid/os/Parcel;Landroid/util/MergedConfiguration$1;)V
 HSPLandroid/util/MergedConfiguration;->equals(Ljava/lang/Object;)Z
 HSPLandroid/util/MergedConfiguration;->getGlobalConfiguration()Landroid/content/res/Configuration;
-HPLandroid/util/MergedConfiguration;->getMergedConfiguration()Landroid/content/res/Configuration;
 HSPLandroid/util/MergedConfiguration;->getOverrideConfiguration()Landroid/content/res/Configuration;
 HSPLandroid/util/MergedConfiguration;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/util/MergedConfiguration;->setConfiguration(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)V
-PLandroid/util/MergedConfiguration;->setGlobalConfiguration(Landroid/content/res/Configuration;)V
-HPLandroid/util/MergedConfiguration;->setTo(Landroid/util/MergedConfiguration;)V
-HPLandroid/util/MergedConfiguration;->updateMergedConfig()V
-HPLandroid/util/MergedConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/util/MutableBoolean;-><init>(Z)V
-HSPLandroid/util/MutableInt;-><init>(I)V
-HSPLandroid/util/MutableLong;-><init>(J)V
-HSPLandroid/util/NtpTrustedTime;-><init>(Ljava/lang/String;J)V
-PLandroid/util/NtpTrustedTime;->currentTimeMillis()J
-PLandroid/util/NtpTrustedTime;->forceRefresh()Z
-PLandroid/util/NtpTrustedTime;->forceRefresh(Landroid/net/Network;)Z
-PLandroid/util/NtpTrustedTime;->getCacheAge()J
-PLandroid/util/NtpTrustedTime;->getCacheCertainty()J
-PLandroid/util/NtpTrustedTime;->getCachedNtpTime()J
-PLandroid/util/NtpTrustedTime;->getCachedNtpTimeReference()J
-HSPLandroid/util/NtpTrustedTime;->getInstance(Landroid/content/Context;)Landroid/util/NtpTrustedTime;
-HSPLandroid/util/NtpTrustedTime;->hasCache()Z
-PLandroid/util/PackageUtils;->computeSha256Digest([B)Ljava/lang/String;
-HSPLandroid/util/PackageUtils;->computeSha256DigestBytes([B)[B
+HSPLandroid/util/MergedConfiguration;->updateMergedConfig()V
 HSPLandroid/util/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/util/Pair;->create(Ljava/lang/Object;Ljava/lang/Object;)Landroid/util/Pair;
 HSPLandroid/util/Pair;->equals(Ljava/lang/Object;)Z
@@ -23403,13 +11476,10 @@
 HSPLandroid/util/PathParser$PathData;-><init>(Landroid/util/PathParser$PathData;)V
 HSPLandroid/util/PathParser$PathData;-><init>(Ljava/lang/String;)V
 HSPLandroid/util/PathParser$PathData;->finalize()V
-HPLandroid/util/PathParser$PathData;->getNativePtr()J
-HPLandroid/util/PathParser$PathData;->setPathData(Landroid/util/PathParser$PathData;)V
-HSPLandroid/util/PathParser;->access$000()J
 HSPLandroid/util/PathParser;->access$100(J)J
 HSPLandroid/util/PathParser;->access$200(Ljava/lang/String;I)J
 HSPLandroid/util/PathParser;->access$400(J)V
-PLandroid/util/PathParser;->createPathFromPathData(Ljava/lang/String;)Landroid/graphics/Path;
+HSPLandroid/util/PathParser;->createPathFromPathData(Ljava/lang/String;)Landroid/graphics/Path;
 HSPLandroid/util/Patterns;-><clinit>()V
 HSPLandroid/util/Pools$SimplePool;-><init>(I)V
 HSPLandroid/util/Pools$SimplePool;->acquire()Ljava/lang/Object;
@@ -23419,31 +11489,24 @@
 HSPLandroid/util/Pools$SynchronizedPool;-><init>(ILjava/lang/Object;)V
 HSPLandroid/util/Pools$SynchronizedPool;->acquire()Ljava/lang/Object;
 HSPLandroid/util/Pools$SynchronizedPool;->release(Ljava/lang/Object;)Z
-PLandroid/util/PrefixPrinter;-><init>(Landroid/util/Printer;Ljava/lang/String;)V
-PLandroid/util/PrefixPrinter;->create(Landroid/util/Printer;Ljava/lang/String;)Landroid/util/Printer;
-PLandroid/util/PrefixPrinter;->println(Ljava/lang/String;)V
-HSPLandroid/util/PrintWriterPrinter;-><init>(Ljava/io/PrintWriter;)V
-HSPLandroid/util/PrintWriterPrinter;->println(Ljava/lang/String;)V
 HSPLandroid/util/Property;-><init>(Ljava/lang/Class;Ljava/lang/String;)V
 HSPLandroid/util/Property;->getName()Ljava/lang/String;
 HSPLandroid/util/Property;->getType()Ljava/lang/Class;
 HSPLandroid/util/Range;-><init>(Ljava/lang/Comparable;Ljava/lang/Comparable;)V
-HPLandroid/util/Range;->clamp(Ljava/lang/Comparable;)Ljava/lang/Comparable;
-HPLandroid/util/Range;->contains(Landroid/util/Range;)Z
-HSPLandroid/util/Range;->contains(Ljava/lang/Comparable;)Z
+HSPLandroid/util/Range;->clamp(Ljava/lang/Comparable;)Ljava/lang/Comparable;
 HSPLandroid/util/Range;->create(Ljava/lang/Comparable;Ljava/lang/Comparable;)Landroid/util/Range;
 HSPLandroid/util/Range;->getLower()Ljava/lang/Comparable;
 HSPLandroid/util/Range;->getUpper()Ljava/lang/Comparable;
 HSPLandroid/util/Range;->intersect(Landroid/util/Range;)Landroid/util/Range;
 HSPLandroid/util/Range;->intersect(Ljava/lang/Comparable;Ljava/lang/Comparable;)Landroid/util/Range;
-HSPLandroid/util/Range;->toString()Ljava/lang/String;
 HSPLandroid/util/Rational;-><init>(II)V
 HSPLandroid/util/Rational;->compareTo(Landroid/util/Rational;)I
 HSPLandroid/util/Rational;->compareTo(Ljava/lang/Object;)I
-PLandroid/util/Rational;->gcd(II)I
-HPLandroid/util/Rational;->getDenominator()I
-HPLandroid/util/Rational;->getNumerator()I
-HSPLandroid/util/Singleton;-><init>()V
+HSPLandroid/util/Rational;->equals(Landroid/util/Rational;)Z
+HSPLandroid/util/Rational;->gcd(II)I
+HSPLandroid/util/Rational;->isNaN()Z
+HSPLandroid/util/Rational;->isNegInf()Z
+HSPLandroid/util/Rational;->isPosInf()Z
 HSPLandroid/util/Singleton;->get()Ljava/lang/Object;
 HSPLandroid/util/Size;-><init>(II)V
 HSPLandroid/util/Size;->getHeight()I
@@ -23452,14 +11515,7 @@
 HSPLandroid/util/Size;->parseSize(Ljava/lang/String;)Landroid/util/Size;
 HSPLandroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/Slog;->e(Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/util/Slog;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
 HSPLandroid/util/Slog;->i(Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/util/Slog;->println(ILjava/lang/String;Ljava/lang/String;)I
-HSPLandroid/util/Slog;->v(Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
-HSPLandroid/util/Slog;->wtf(Ljava/lang/String;Ljava/lang/String;)I
-PLandroid/util/Slog;->wtf(Ljava/lang/String;Ljava/lang/Throwable;)I
 HSPLandroid/util/SparseArray;-><init>()V
 HSPLandroid/util/SparseArray;-><init>(I)V
 HSPLandroid/util/SparseArray;->append(ILjava/lang/Object;)V
@@ -23470,34 +11526,18 @@
 HSPLandroid/util/SparseArray;->get(I)Ljava/lang/Object;
 HSPLandroid/util/SparseArray;->get(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/SparseArray;->indexOfKey(I)I
-HSPLandroid/util/SparseArray;->indexOfValue(Ljava/lang/Object;)I
 HSPLandroid/util/SparseArray;->keyAt(I)I
 HSPLandroid/util/SparseArray;->put(ILjava/lang/Object;)V
 HSPLandroid/util/SparseArray;->remove(I)V
 HSPLandroid/util/SparseArray;->removeAt(I)V
-HSPLandroid/util/SparseArray;->removeReturnOld(I)Ljava/lang/Object;
 HSPLandroid/util/SparseArray;->setValueAt(ILjava/lang/Object;)V
 HSPLandroid/util/SparseArray;->size()I
-HSPLandroid/util/SparseArray;->toString()Ljava/lang/String;
 HSPLandroid/util/SparseArray;->valueAt(I)Ljava/lang/Object;
-HSPLandroid/util/SparseArrayMap;-><init>()V
-HSPLandroid/util/SparseArrayMap;->add(ILjava/lang/String;Ljava/lang/Object;)V
-PLandroid/util/SparseArrayMap;->clear()V
-HSPLandroid/util/SparseArrayMap;->forEach(Ljava/util/function/Consumer;)V
-HSPLandroid/util/SparseArrayMap;->get(ILjava/lang/String;)Ljava/lang/Object;
-PLandroid/util/SparseArrayMap;->indexOfKey(I)I
-HPLandroid/util/SparseArrayMap;->keyAt(I)I
-HPLandroid/util/SparseArrayMap;->keyAt(II)Ljava/lang/String;
-HPLandroid/util/SparseArrayMap;->numElementsForKey(I)I
-HSPLandroid/util/SparseArrayMap;->numMaps()I
-HPLandroid/util/SparseArrayMap;->valueAt(II)Ljava/lang/Object;
 HSPLandroid/util/SparseBooleanArray;-><init>()V
 HSPLandroid/util/SparseBooleanArray;-><init>(I)V
 HSPLandroid/util/SparseBooleanArray;->append(IZ)V
 HSPLandroid/util/SparseBooleanArray;->clear()V
-PLandroid/util/SparseBooleanArray;->clone()Landroid/util/SparseBooleanArray;
 HSPLandroid/util/SparseBooleanArray;->delete(I)V
-PLandroid/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
@@ -23505,94 +11545,36 @@
 HSPLandroid/util/SparseBooleanArray;->keyAt(I)I
 HSPLandroid/util/SparseBooleanArray;->put(IZ)V
 HSPLandroid/util/SparseBooleanArray;->size()I
-HSPLandroid/util/SparseBooleanArray;->toString()Ljava/lang/String;
 HSPLandroid/util/SparseBooleanArray;->valueAt(I)Z
 HSPLandroid/util/SparseIntArray;-><init>()V
 HSPLandroid/util/SparseIntArray;-><init>(I)V
 HSPLandroid/util/SparseIntArray;->append(II)V
 HSPLandroid/util/SparseIntArray;->clear()V
 HSPLandroid/util/SparseIntArray;->clone()Landroid/util/SparseIntArray;
-HPLandroid/util/SparseIntArray;->copyKeys()[I
-HSPLandroid/util/SparseIntArray;->delete(I)V
+HSPLandroid/util/SparseIntArray;->copyKeys()[I
 HSPLandroid/util/SparseIntArray;->get(I)I
 HSPLandroid/util/SparseIntArray;->get(II)I
 HSPLandroid/util/SparseIntArray;->indexOfKey(I)I
-HSPLandroid/util/SparseIntArray;->indexOfValue(I)I
 HSPLandroid/util/SparseIntArray;->keyAt(I)I
 HSPLandroid/util/SparseIntArray;->put(II)V
 HSPLandroid/util/SparseIntArray;->removeAt(I)V
-HSPLandroid/util/SparseIntArray;->setValueAt(II)V
 HSPLandroid/util/SparseIntArray;->size()I
-HSPLandroid/util/SparseIntArray;->toString()Ljava/lang/String;
 HSPLandroid/util/SparseIntArray;->valueAt(I)I
 HSPLandroid/util/SparseLongArray;-><init>()V
 HSPLandroid/util/SparseLongArray;-><init>(I)V
-PLandroid/util/SparseLongArray;->clear()V
-HPLandroid/util/SparseLongArray;->delete(I)V
 HSPLandroid/util/SparseLongArray;->get(I)J
 HSPLandroid/util/SparseLongArray;->get(IJ)J
-HSPLandroid/util/SparseLongArray;->indexOfKey(I)I
 HSPLandroid/util/SparseLongArray;->keyAt(I)I
 HSPLandroid/util/SparseLongArray;->put(IJ)V
-HPLandroid/util/SparseLongArray;->removeAt(I)V
 HSPLandroid/util/SparseLongArray;->size()I
-PLandroid/util/SparseLongArray;->toString()Ljava/lang/String;
 HSPLandroid/util/SparseLongArray;->valueAt(I)J
-HSPLandroid/util/SparseSetArray;-><init>()V
-HSPLandroid/util/SparseSetArray;->add(ILjava/lang/Object;)Z
-HSPLandroid/util/SparseSetArray;->contains(ILjava/lang/Object;)Z
-HPLandroid/util/SparseSetArray;->get(I)Landroid/util/ArraySet;
-HPLandroid/util/SparseSetArray;->keyAt(I)I
-PLandroid/util/SparseSetArray;->remove(I)V
-PLandroid/util/SparseSetArray;->remove(ILjava/lang/Object;)Z
-HPLandroid/util/SparseSetArray;->size()I
-HPLandroid/util/SparseSetArray;->sizeAt(I)I
-HPLandroid/util/SparseSetArray;->valueAt(II)Ljava/lang/Object;
-HSPLandroid/util/Spline$LinearSpline;-><init>([F[F)V
-HSPLandroid/util/Spline$LinearSpline;->interpolate(F)F
-PLandroid/util/Spline$LinearSpline;->toString()Ljava/lang/String;
-HSPLandroid/util/Spline$MonotoneCubicSpline;-><init>([F[F)V
-HSPLandroid/util/Spline$MonotoneCubicSpline;->interpolate(F)F
-PLandroid/util/Spline$MonotoneCubicSpline;->toString()Ljava/lang/String;
-HSPLandroid/util/Spline;-><init>()V
-HSPLandroid/util/Spline;->createMonotoneCubicSpline([F[F)Landroid/util/Spline;
-HSPLandroid/util/Spline;->createSpline([F[F)Landroid/util/Spline;
-HSPLandroid/util/Spline;->isMonotonic([F)Z
-HSPLandroid/util/Spline;->isStrictlyIncreasing([F)Z
-PLandroid/util/StateSet;->get(I)[I
+HSPLandroid/util/StateSet;->get(I)[I
 HSPLandroid/util/StateSet;->stateSetMatches([I[I)Z
 HSPLandroid/util/StateSet;->trimStateSet([II)[I
-PLandroid/util/StatsLog;->getIStatsdLocked()Landroid/os/IStatsd;
-PLandroid/util/StatsLog;->logEvent(I)Z
 HSPLandroid/util/StatsLog;->writeRaw([BI)V
-HPLandroid/util/StatsLogInternal;->write(ILandroid/os/WorkSource;I)V
-HSPLandroid/util/StatsLogInternal;->write(ILandroid/os/WorkSource;IZZZ)V
-HPLandroid/util/StatsLogInternal;->write(ILandroid/os/WorkSource;Ljava/lang/String;Ljava/lang/String;I)V
-PLandroid/util/StringBuilderPrinter;-><init>(Ljava/lang/StringBuilder;)V
-PLandroid/util/StringBuilderPrinter;->println(Ljava/lang/String;)V
-HPLandroid/util/TimeUtils;->accumField(IIZI)I
-PLandroid/util/TimeUtils;->dumpTimeWithDelta(Ljava/io/PrintWriter;JJ)V
-HSPLandroid/util/TimeUtils;->formatDuration(J)Ljava/lang/String;
-HSPLandroid/util/TimeUtils;->formatDuration(JJLjava/io/PrintWriter;)V
-HPLandroid/util/TimeUtils;->formatDuration(JLjava/io/PrintWriter;)V
-HSPLandroid/util/TimeUtils;->formatDuration(JLjava/io/PrintWriter;I)V
 HSPLandroid/util/TimeUtils;->formatDuration(JLjava/lang/StringBuilder;)V
-HPLandroid/util/TimeUtils;->formatDuration(JLjava/lang/StringBuilder;I)V
 HSPLandroid/util/TimeUtils;->formatDurationLocked(JI)I
-PLandroid/util/TimeUtils;->formatForLogging(J)Ljava/lang/String;
-PLandroid/util/TimeUtils;->formatUptime(J)Ljava/lang/String;
-HSPLandroid/util/TimeUtils;->getTimeZoneDatabaseVersion()Ljava/lang/String;
-PLandroid/util/TimeUtils;->logTimeOfDay(J)Ljava/lang/String;
 HSPLandroid/util/TimeUtils;->printFieldLocked([CICIZI)I
-HSPLandroid/util/TimedRemoteCaller;-><init>(J)V
-PLandroid/util/TimedRemoteCaller;->getResultTimed(I)Ljava/lang/Object;
-PLandroid/util/TimedRemoteCaller;->onBeforeRemoteCall()I
-PLandroid/util/TimedRemoteCaller;->onRemoteMethodResult(Ljava/lang/Object;I)V
-HSPLandroid/util/TimingLogger;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/util/TimingLogger;->addSplit(Ljava/lang/String;)V
-HSPLandroid/util/TimingLogger;->dumpToLog()V
-HSPLandroid/util/TimingLogger;->reset()V
-HSPLandroid/util/TimingLogger;->reset(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/util/TimingsTraceLog;-><init>(Ljava/lang/String;J)V
 HSPLandroid/util/TimingsTraceLog;-><init>(Ljava/lang/String;JI)V
 HSPLandroid/util/TimingsTraceLog;->assertSameThread()V
@@ -23612,243 +11594,50 @@
 HSPLandroid/util/TypedValue;->getFloat()F
 HSPLandroid/util/TypedValue;->getFraction(FF)F
 HSPLandroid/util/UtilConfig;->setThrowExceptionForUpperArrayOutOfBounds(Z)V
-HSPLandroid/util/Xml$Encoding;-><clinit>()V
-HSPLandroid/util/Xml$Encoding;-><init>(Ljava/lang/String;ILjava/lang/String;)V
 HSPLandroid/util/Xml;->asAttributeSet(Lorg/xmlpull/v1/XmlPullParser;)Landroid/util/AttributeSet;
 HSPLandroid/util/Xml;->newPullParser()Lorg/xmlpull/v1/XmlPullParser;
-HSPLandroid/util/Xml;->newSerializer()Lorg/xmlpull/v1/XmlSerializer;
-HSPLandroid/util/Xml;->parse(Ljava/io/InputStream;Landroid/util/Xml$Encoding;Lorg/xml/sax/ContentHandler;)V
-HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$VerifiedSigner;-><init>([[Ljava/security/cert/X509Certificate;[B)V
-HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->findSignature(Ljava/io/RandomAccessFile;)Landroid/util/apk/SignatureInfo;
-HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->isSupportedSignatureAlgorithm(I)Z
-HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->unsafeGetCertsWithoutVerification(Ljava/lang/String;)[[Ljava/security/cert/X509Certificate;
-HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->verify(Ljava/io/RandomAccessFile;Landroid/util/apk/SignatureInfo;Z)Landroid/util/apk/ApkSignatureSchemeV2Verifier$VerifiedSigner;
-HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->verify(Ljava/io/RandomAccessFile;Z)Landroid/util/apk/ApkSignatureSchemeV2Verifier$VerifiedSigner;
-HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->verify(Ljava/lang/String;)[[Ljava/security/cert/X509Certificate;
-HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->verify(Ljava/lang/String;Z)Landroid/util/apk/ApkSignatureSchemeV2Verifier$VerifiedSigner;
-HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->verifyAdditionalAttributes(Ljava/nio/ByteBuffer;)V
-HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->verifySigner(Ljava/nio/ByteBuffer;Ljava/util/Map;Ljava/security/cert/CertificateFactory;)[Ljava/security/cert/X509Certificate;
-HSPLandroid/util/apk/ApkSignatureSchemeV3Verifier$VerifiedSigner;-><init>([Ljava/security/cert/X509Certificate;Landroid/util/apk/ApkSignatureSchemeV3Verifier$VerifiedProofOfRotation;)V
-HSPLandroid/util/apk/ApkSignatureSchemeV3Verifier;->findSignature(Ljava/io/RandomAccessFile;)Landroid/util/apk/SignatureInfo;
-HSPLandroid/util/apk/ApkSignatureSchemeV3Verifier;->isSupportedSignatureAlgorithm(I)Z
-HSPLandroid/util/apk/ApkSignatureSchemeV3Verifier;->unsafeGetCertsWithoutVerification(Ljava/lang/String;)Landroid/util/apk/ApkSignatureSchemeV3Verifier$VerifiedSigner;
-HSPLandroid/util/apk/ApkSignatureSchemeV3Verifier;->verify(Ljava/io/RandomAccessFile;Landroid/util/apk/SignatureInfo;Z)Landroid/util/apk/ApkSignatureSchemeV3Verifier$VerifiedSigner;
-HSPLandroid/util/apk/ApkSignatureSchemeV3Verifier;->verify(Ljava/io/RandomAccessFile;Z)Landroid/util/apk/ApkSignatureSchemeV3Verifier$VerifiedSigner;
-HSPLandroid/util/apk/ApkSignatureSchemeV3Verifier;->verify(Ljava/lang/String;)Landroid/util/apk/ApkSignatureSchemeV3Verifier$VerifiedSigner;
-HSPLandroid/util/apk/ApkSignatureSchemeV3Verifier;->verify(Ljava/lang/String;Z)Landroid/util/apk/ApkSignatureSchemeV3Verifier$VerifiedSigner;
-HSPLandroid/util/apk/ApkSignatureSchemeV3Verifier;->verifyAdditionalAttributes(Ljava/nio/ByteBuffer;Ljava/util/List;Ljava/security/cert/CertificateFactory;)Landroid/util/apk/ApkSignatureSchemeV3Verifier$VerifiedSigner;
-HSPLandroid/util/apk/ApkSignatureSchemeV3Verifier;->verifySigner(Ljava/nio/ByteBuffer;Ljava/util/Map;Ljava/security/cert/CertificateFactory;)Landroid/util/apk/ApkSignatureSchemeV3Verifier$VerifiedSigner;
-HSPLandroid/util/apk/ApkSignatureVerifier;->closeQuietly(Landroid/util/jar/StrictJarFile;)V
-HSPLandroid/util/apk/ApkSignatureVerifier;->convertToSignatures([[Ljava/security/cert/Certificate;)[Landroid/content/pm/Signature;
-HSPLandroid/util/apk/ApkSignatureVerifier;->loadCertificates(Landroid/util/jar/StrictJarFile;Ljava/util/zip/ZipEntry;)[[Ljava/security/cert/Certificate;
-HSPLandroid/util/apk/ApkSignatureVerifier;->readFullyIgnoringContents(Ljava/io/InputStream;)V
-HSPLandroid/util/apk/ApkSignatureVerifier;->unsafeGetCertsWithoutVerification(Ljava/lang/String;I)Landroid/content/pm/PackageParser$SigningDetails;
-HSPLandroid/util/apk/ApkSignatureVerifier;->verify(Ljava/lang/String;I)Landroid/content/pm/PackageParser$SigningDetails;
-HSPLandroid/util/apk/ApkSignatureVerifier;->verifyV1Signature(Ljava/lang/String;Z)Landroid/content/pm/PackageParser$SigningDetails;
-HSPLandroid/util/apk/ApkSigningBlockUtils$1;-><init>()V
-HSPLandroid/util/apk/ApkSigningBlockUtils$1;->create(I)Ljava/nio/ByteBuffer;
-HSPLandroid/util/apk/ApkSigningBlockUtils$MultipleDigestDataDigester;-><init>([Ljava/security/MessageDigest;)V
-HSPLandroid/util/apk/ApkSigningBlockUtils$MultipleDigestDataDigester;->consume(Ljava/nio/ByteBuffer;)V
-HSPLandroid/util/apk/ApkSigningBlockUtils;->checkByteOrderLittleEndian(Ljava/nio/ByteBuffer;)V
-HSPLandroid/util/apk/ApkSigningBlockUtils;->compareContentDigestAlgorithm(II)I
-HSPLandroid/util/apk/ApkSigningBlockUtils;->compareSignatureAlgorithm(II)I
-HSPLandroid/util/apk/ApkSigningBlockUtils;->computeContentDigestsPer1MbChunk([I[Landroid/util/apk/DataSource;)[[B
-HSPLandroid/util/apk/ApkSigningBlockUtils;->findApkSignatureSchemeBlock(Ljava/nio/ByteBuffer;I)Ljava/nio/ByteBuffer;
-HSPLandroid/util/apk/ApkSigningBlockUtils;->findApkSigningBlock(Ljava/io/RandomAccessFile;J)Landroid/util/Pair;
-HSPLandroid/util/apk/ApkSigningBlockUtils;->findSignature(Ljava/io/RandomAccessFile;I)Landroid/util/apk/SignatureInfo;
-HSPLandroid/util/apk/ApkSigningBlockUtils;->getByteBuffer(Ljava/nio/ByteBuffer;I)Ljava/nio/ByteBuffer;
-HSPLandroid/util/apk/ApkSigningBlockUtils;->getCentralDirOffset(Ljava/nio/ByteBuffer;J)J
-HSPLandroid/util/apk/ApkSigningBlockUtils;->getChunkCount(J)J
-HSPLandroid/util/apk/ApkSigningBlockUtils;->getContentDigestAlgorithmJcaDigestAlgorithm(I)Ljava/lang/String;
-HSPLandroid/util/apk/ApkSigningBlockUtils;->getContentDigestAlgorithmOutputSizeBytes(I)I
-HSPLandroid/util/apk/ApkSigningBlockUtils;->getEocd(Ljava/io/RandomAccessFile;)Landroid/util/Pair;
-HSPLandroid/util/apk/ApkSigningBlockUtils;->getLengthPrefixedSlice(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
-HSPLandroid/util/apk/ApkSigningBlockUtils;->getSignatureAlgorithmContentDigestAlgorithm(I)I
-HSPLandroid/util/apk/ApkSigningBlockUtils;->getSignatureAlgorithmJcaKeyAlgorithm(I)Ljava/lang/String;
-HSPLandroid/util/apk/ApkSigningBlockUtils;->getSignatureAlgorithmJcaSignatureAlgorithm(I)Landroid/util/Pair;
-HSPLandroid/util/apk/ApkSigningBlockUtils;->parseVerityDigestAndVerifySourceLength([BJLandroid/util/apk/SignatureInfo;)[B
-HSPLandroid/util/apk/ApkSigningBlockUtils;->readLengthPrefixedByteArray(Ljava/nio/ByteBuffer;)[B
-HSPLandroid/util/apk/ApkSigningBlockUtils;->setUnsignedInt32LittleEndian(I[BI)V
-HSPLandroid/util/apk/ApkSigningBlockUtils;->sliceFromTo(Ljava/nio/ByteBuffer;II)Ljava/nio/ByteBuffer;
-HSPLandroid/util/apk/ApkSigningBlockUtils;->verifyIntegrity(Ljava/util/Map;Ljava/io/RandomAccessFile;Landroid/util/apk/SignatureInfo;)V
-HSPLandroid/util/apk/ApkSigningBlockUtils;->verifyIntegrityFor1MbChunkBasedAlgorithm(Ljava/util/Map;Ljava/io/FileDescriptor;Landroid/util/apk/SignatureInfo;)V
-HSPLandroid/util/apk/ApkSigningBlockUtils;->verifyIntegrityForVerityBasedAlgorithm([BLjava/io/RandomAccessFile;Landroid/util/apk/SignatureInfo;)V
-HSPLandroid/util/apk/ByteBufferDataSource;-><init>(Ljava/nio/ByteBuffer;)V
-HSPLandroid/util/apk/ByteBufferDataSource;->feedIntoDataDigester(Landroid/util/apk/DataDigester;JI)V
-HSPLandroid/util/apk/ByteBufferDataSource;->size()J
-HSPLandroid/util/apk/MemoryMappedFileDataSource;-><clinit>()V
-HSPLandroid/util/apk/MemoryMappedFileDataSource;-><init>(Ljava/io/FileDescriptor;JJ)V
-HSPLandroid/util/apk/MemoryMappedFileDataSource;->feedIntoDataDigester(Landroid/util/apk/DataDigester;JI)V
-HSPLandroid/util/apk/MemoryMappedFileDataSource;->size()J
-HSPLandroid/util/apk/SignatureInfo;-><init>(Ljava/nio/ByteBuffer;JJJLjava/nio/ByteBuffer;)V
-HSPLandroid/util/apk/SignatureNotFoundException;-><init>(Ljava/lang/String;)V
-HSPLandroid/util/apk/VerbatimX509Certificate;-><init>(Ljava/security/cert/X509Certificate;[B)V
-HSPLandroid/util/apk/VerbatimX509Certificate;->getEncoded()[B
-HSPLandroid/util/apk/VerityBuilder$BufferedDigester;-><init>([BLjava/nio/ByteBuffer;)V
-HSPLandroid/util/apk/VerityBuilder$BufferedDigester;-><init>([BLjava/nio/ByteBuffer;Landroid/util/apk/VerityBuilder$1;)V
-HSPLandroid/util/apk/VerityBuilder$BufferedDigester;->access$200(Landroid/util/apk/VerityBuilder$BufferedDigester;)V
-HSPLandroid/util/apk/VerityBuilder$BufferedDigester;->assertEmptyBuffer()V
-HSPLandroid/util/apk/VerityBuilder$BufferedDigester;->consume(Ljava/nio/ByteBuffer;)V
-HSPLandroid/util/apk/VerityBuilder$BufferedDigester;->fillUpLastOutputChunk()V
-HSPLandroid/util/apk/VerityBuilder$VerityResult;-><init>(Ljava/nio/ByteBuffer;I[B)V
-HSPLandroid/util/apk/VerityBuilder$VerityResult;-><init>(Ljava/nio/ByteBuffer;I[BLandroid/util/apk/VerityBuilder$1;)V
-HSPLandroid/util/apk/VerityBuilder;->assertSigningBlockAlignedAndHasFullPages(Landroid/util/apk/SignatureInfo;)V
-HSPLandroid/util/apk/VerityBuilder;->calculateVerityLevelOffset(J)[I
-HSPLandroid/util/apk/VerityBuilder;->consumeByChunk(Landroid/util/apk/DataDigester;Landroid/util/apk/DataSource;I)V
-HSPLandroid/util/apk/VerityBuilder;->divideRoundup(JJ)J
-HSPLandroid/util/apk/VerityBuilder;->generateApkVerityDigestAtLeafLevel(Ljava/io/RandomAccessFile;Landroid/util/apk/SignatureInfo;[BLjava/nio/ByteBuffer;)V
-HSPLandroid/util/apk/VerityBuilder;->generateApkVerityTree(Ljava/io/RandomAccessFile;Landroid/util/apk/SignatureInfo;Landroid/util/apk/ByteBufferFactory;)Landroid/util/apk/VerityBuilder$VerityResult;
-HSPLandroid/util/apk/VerityBuilder;->generateVerityTreeInternal(Ljava/io/RandomAccessFile;Landroid/util/apk/ByteBufferFactory;Landroid/util/apk/SignatureInfo;)Landroid/util/apk/VerityBuilder$VerityResult;
-HSPLandroid/util/apk/VerityBuilder;->generateVerityTreeInternal(Ljava/io/RandomAccessFile;Landroid/util/apk/SignatureInfo;[B[ILjava/nio/ByteBuffer;)[B
-HSPLandroid/util/apk/VerityBuilder;->slice(Ljava/nio/ByteBuffer;II)Ljava/nio/ByteBuffer;
-HSPLandroid/util/apk/WrappedX509Certificate;-><init>(Ljava/security/cert/X509Certificate;)V
-HSPLandroid/util/apk/WrappedX509Certificate;->getPublicKey()Ljava/security/PublicKey;
-HSPLandroid/util/apk/ZipUtils;->assertByteOrderLittleEndian(Ljava/nio/ByteBuffer;)V
-HSPLandroid/util/apk/ZipUtils;->findZipEndOfCentralDirectoryRecord(Ljava/io/RandomAccessFile;)Landroid/util/Pair;
-HSPLandroid/util/apk/ZipUtils;->findZipEndOfCentralDirectoryRecord(Ljava/io/RandomAccessFile;I)Landroid/util/Pair;
-HSPLandroid/util/apk/ZipUtils;->findZipEndOfCentralDirectoryRecord(Ljava/nio/ByteBuffer;)I
-HSPLandroid/util/apk/ZipUtils;->getUnsignedInt16(Ljava/nio/ByteBuffer;I)I
-HSPLandroid/util/apk/ZipUtils;->getUnsignedInt32(Ljava/nio/ByteBuffer;I)J
-HSPLandroid/util/apk/ZipUtils;->getZipEocdCentralDirectoryOffset(Ljava/nio/ByteBuffer;)J
-HSPLandroid/util/apk/ZipUtils;->getZipEocdCentralDirectorySizeBytes(Ljava/nio/ByteBuffer;)J
-HSPLandroid/util/apk/ZipUtils;->isZip64EndOfCentralDirectoryLocatorPresent(Ljava/io/RandomAccessFile;J)Z
-HSPLandroid/util/apk/ZipUtils;->setUnsignedInt32(Ljava/nio/ByteBuffer;IJ)V
-HSPLandroid/util/apk/ZipUtils;->setZipEocdCentralDirectoryOffset(Ljava/nio/ByteBuffer;J)V
-HSPLandroid/util/jar/StrictJarFile$EntryIterator;-><init>(JLjava/lang/String;)V
-HSPLandroid/util/jar/StrictJarFile$EntryIterator;->hasNext()Z
-HSPLandroid/util/jar/StrictJarFile$EntryIterator;->next()Ljava/lang/Object;
-HSPLandroid/util/jar/StrictJarFile$EntryIterator;->next()Ljava/util/zip/ZipEntry;
-HSPLandroid/util/jar/StrictJarFile$FDStream;-><init>(Ljava/io/FileDescriptor;JJ)V
-HSPLandroid/util/jar/StrictJarFile$FDStream;->read([BII)I
-HSPLandroid/util/jar/StrictJarFile$JarFileInputStream;-><init>(Ljava/io/InputStream;JLandroid/util/jar/StrictJarVerifier$VerifierEntry;)V
-HSPLandroid/util/jar/StrictJarFile$JarFileInputStream;->read([BII)I
-HSPLandroid/util/jar/StrictJarFile$ZipInflaterInputStream;-><init>(Ljava/io/InputStream;Ljava/util/zip/Inflater;ILjava/util/zip/ZipEntry;)V
-HSPLandroid/util/jar/StrictJarFile$ZipInflaterInputStream;->close()V
-HSPLandroid/util/jar/StrictJarFile$ZipInflaterInputStream;->read([BII)I
-HSPLandroid/util/jar/StrictJarFile;-><init>(Ljava/lang/String;Ljava/io/FileDescriptor;ZZ)V
-HSPLandroid/util/jar/StrictJarFile;-><init>(Ljava/lang/String;ZZ)V
-HSPLandroid/util/jar/StrictJarFile;->access$000(JLjava/lang/String;)J
-HSPLandroid/util/jar/StrictJarFile;->access$100(J)Ljava/util/zip/ZipEntry;
-HSPLandroid/util/jar/StrictJarFile;->close()V
-HSPLandroid/util/jar/StrictJarFile;->finalize()V
-HSPLandroid/util/jar/StrictJarFile;->findEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;
-HSPLandroid/util/jar/StrictJarFile;->getCertificateChains(Ljava/util/zip/ZipEntry;)[[Ljava/security/cert/Certificate;
-HSPLandroid/util/jar/StrictJarFile;->getInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/InputStream;
-HSPLandroid/util/jar/StrictJarFile;->getMetaEntries()Ljava/util/HashMap;
-HSPLandroid/util/jar/StrictJarFile;->getZipInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/InputStream;
-PLandroid/util/jar/StrictJarFile;->iterator()Ljava/util/Iterator;
-HSPLandroid/util/jar/StrictJarManifest$Chunk;-><init>(II)V
-HSPLandroid/util/jar/StrictJarManifest;-><init>()V
-HSPLandroid/util/jar/StrictJarManifest;-><init>([BZ)V
-HSPLandroid/util/jar/StrictJarManifest;->getAttributes(Ljava/lang/String;)Ljava/util/jar/Attributes;
-HSPLandroid/util/jar/StrictJarManifest;->getEntries()Ljava/util/Map;
-HSPLandroid/util/jar/StrictJarManifest;->getMainAttributesEnd()I
-HSPLandroid/util/jar/StrictJarManifest;->read([B)V
-HSPLandroid/util/jar/StrictJarManifestReader;-><init>([BLjava/util/jar/Attributes;)V
-HSPLandroid/util/jar/StrictJarManifestReader;->getEndOfMainSection()I
-HSPLandroid/util/jar/StrictJarManifestReader;->readEntries(Ljava/util/Map;Ljava/util/Map;)V
-HSPLandroid/util/jar/StrictJarManifestReader;->readHeader()Z
-HSPLandroid/util/jar/StrictJarManifestReader;->readName()V
-HSPLandroid/util/jar/StrictJarManifestReader;->readValue()V
-HSPLandroid/util/jar/StrictJarVerifier$VerifierEntry;-><init>(Ljava/lang/String;Ljava/security/MessageDigest;[B[[Ljava/security/cert/Certificate;Ljava/util/Hashtable;)V
-HSPLandroid/util/jar/StrictJarVerifier$VerifierEntry;->verify()V
-HSPLandroid/util/jar/StrictJarVerifier$VerifierEntry;->write([BII)V
-HSPLandroid/util/jar/StrictJarVerifier;-><init>(Ljava/lang/String;Landroid/util/jar/StrictJarManifest;Ljava/util/HashMap;Z)V
-HSPLandroid/util/jar/StrictJarVerifier;->access$000([B[B)Z
-HSPLandroid/util/jar/StrictJarVerifier;->getCertificateChains(Ljava/lang/String;)[[Ljava/security/cert/Certificate;
-HSPLandroid/util/jar/StrictJarVerifier;->initEntry(Ljava/lang/String;)Landroid/util/jar/StrictJarVerifier$VerifierEntry;
-HSPLandroid/util/jar/StrictJarVerifier;->isSignedJar()Z
-HSPLandroid/util/jar/StrictJarVerifier;->readCertificates()Z
-HSPLandroid/util/jar/StrictJarVerifier;->verify(Ljava/util/jar/Attributes;Ljava/lang/String;[BIIZZ)Z
-HSPLandroid/util/jar/StrictJarVerifier;->verifyBytes([B[B)[Ljava/security/cert/Certificate;
-HSPLandroid/util/jar/StrictJarVerifier;->verifyCertificate(Ljava/lang/String;)V
-HSPLandroid/util/jar/StrictJarVerifier;->verifyMessageDigest([B[B)Z
 HSPLandroid/util/proto/EncodedBuffer;-><init>(I)V
 HSPLandroid/util/proto/EncodedBuffer;->editRawFixed32(II)V
-HPLandroid/util/proto/EncodedBuffer;->getBytes(I)[B
+HSPLandroid/util/proto/EncodedBuffer;->getBytes(I)[B
 HSPLandroid/util/proto/EncodedBuffer;->getRawFixed32At(I)I
 HSPLandroid/util/proto/EncodedBuffer;->getRawVarint32Size(I)I
-PLandroid/util/proto/EncodedBuffer;->getReadPos()I
-PLandroid/util/proto/EncodedBuffer;->getReadableSize()I
+HSPLandroid/util/proto/EncodedBuffer;->getReadPos()I
+HSPLandroid/util/proto/EncodedBuffer;->getReadableSize()I
 HSPLandroid/util/proto/EncodedBuffer;->getWritePos()I
-HSPLandroid/util/proto/EncodedBuffer;->nextWriteBuffer()V
-HPLandroid/util/proto/EncodedBuffer;->readRawByte()B
-HPLandroid/util/proto/EncodedBuffer;->readRawFixed32()I
-HPLandroid/util/proto/EncodedBuffer;->readRawUnsigned()J
-PLandroid/util/proto/EncodedBuffer;->rewindRead()V
-HPLandroid/util/proto/EncodedBuffer;->rewindWriteTo(I)V
-HPLandroid/util/proto/EncodedBuffer;->skipRead(I)V
-HPLandroid/util/proto/EncodedBuffer;->startEditing()V
-HPLandroid/util/proto/EncodedBuffer;->writeFromThisBuffer(II)V
+HSPLandroid/util/proto/EncodedBuffer;->readRawByte()B
+HSPLandroid/util/proto/EncodedBuffer;->readRawFixed32()I
+HSPLandroid/util/proto/EncodedBuffer;->readRawUnsigned()J
+HSPLandroid/util/proto/EncodedBuffer;->rewindRead()V
+HSPLandroid/util/proto/EncodedBuffer;->skipRead(I)V
+HSPLandroid/util/proto/EncodedBuffer;->startEditing()V
+HSPLandroid/util/proto/EncodedBuffer;->writeFromThisBuffer(II)V
 HSPLandroid/util/proto/EncodedBuffer;->writeRawBuffer([B)V
 HSPLandroid/util/proto/EncodedBuffer;->writeRawBuffer([BII)V
 HSPLandroid/util/proto/EncodedBuffer;->writeRawByte(B)V
 HSPLandroid/util/proto/EncodedBuffer;->writeRawFixed32(I)V
-HPLandroid/util/proto/EncodedBuffer;->writeRawFixed64(J)V
 HSPLandroid/util/proto/EncodedBuffer;->writeRawVarint32(I)V
 HSPLandroid/util/proto/EncodedBuffer;->writeRawVarint64(J)V
-HPLandroid/util/proto/EncodedBuffer;->writeRawZigZag32(I)V
-HPLandroid/util/proto/EncodedBuffer;->writeRawZigZag64(J)V
-PLandroid/util/proto/EncodedBuffer;->zigZag32(I)I
-PLandroid/util/proto/EncodedBuffer;->zigZag64(J)J
-HSPLandroid/util/proto/ProtoInputStream;-><init>(Ljava/io/InputStream;)V
-HSPLandroid/util/proto/ProtoInputStream;-><init>(Ljava/io/InputStream;I)V
-HSPLandroid/util/proto/ProtoInputStream;->assertFieldNumber(J)V
-HSPLandroid/util/proto/ProtoInputStream;->assertFreshData()V
-HSPLandroid/util/proto/ProtoInputStream;->assertWireType(I)V
-HSPLandroid/util/proto/ProtoInputStream;->checkPacked(J)V
-HSPLandroid/util/proto/ProtoInputStream;->end(J)V
-HSPLandroid/util/proto/ProtoInputStream;->fillBuffer()V
-PLandroid/util/proto/ProtoInputStream;->getFieldNumber()I
-HSPLandroid/util/proto/ProtoInputStream;->incOffset(I)V
-HSPLandroid/util/proto/ProtoInputStream;->nextField()I
-HSPLandroid/util/proto/ProtoInputStream;->nextField(J)Z
-HSPLandroid/util/proto/ProtoInputStream;->readBoolean(J)Z
-HPLandroid/util/proto/ProtoInputStream;->readFixed32()I
-HPLandroid/util/proto/ProtoInputStream;->readFloat(J)F
-HSPLandroid/util/proto/ProtoInputStream;->readInt(J)I
-HSPLandroid/util/proto/ProtoInputStream;->readLong(J)J
-HSPLandroid/util/proto/ProtoInputStream;->readRawString(I)Ljava/lang/String;
-HSPLandroid/util/proto/ProtoInputStream;->readString(J)Ljava/lang/String;
-HSPLandroid/util/proto/ProtoInputStream;->readTag()V
-HSPLandroid/util/proto/ProtoInputStream;->readVarint()J
-HSPLandroid/util/proto/ProtoInputStream;->start(J)J
 HSPLandroid/util/proto/ProtoOutputStream;-><init>()V
 HSPLandroid/util/proto/ProtoOutputStream;-><init>(I)V
-PLandroid/util/proto/ProtoOutputStream;-><init>(Ljava/io/FileDescriptor;)V
+HSPLandroid/util/proto/ProtoOutputStream;-><init>(Ljava/io/FileDescriptor;)V
 HSPLandroid/util/proto/ProtoOutputStream;-><init>(Ljava/io/OutputStream;)V
 HSPLandroid/util/proto/ProtoOutputStream;->assertNotCompacted()V
-PLandroid/util/proto/ProtoOutputStream;->compactIfNecessary()V
-HPLandroid/util/proto/ProtoOutputStream;->compactSizes(I)V
-HPLandroid/util/proto/ProtoOutputStream;->editEncodedSize(I)I
+HSPLandroid/util/proto/ProtoOutputStream;->compactIfNecessary()V
+HSPLandroid/util/proto/ProtoOutputStream;->compactSizes(I)V
+HSPLandroid/util/proto/ProtoOutputStream;->editEncodedSize(I)I
 HSPLandroid/util/proto/ProtoOutputStream;->end(J)V
 HSPLandroid/util/proto/ProtoOutputStream;->endObjectImpl(JZ)V
-PLandroid/util/proto/ProtoOutputStream;->flush()V
-PLandroid/util/proto/ProtoOutputStream;->getBytes()[B
+HSPLandroid/util/proto/ProtoOutputStream;->flush()V
 HSPLandroid/util/proto/ProtoOutputStream;->getTagSize(I)I
-PLandroid/util/proto/ProtoOutputStream;->readRawTag()I
+HSPLandroid/util/proto/ProtoOutputStream;->readRawTag()I
 HSPLandroid/util/proto/ProtoOutputStream;->start(J)J
 HSPLandroid/util/proto/ProtoOutputStream;->startObjectImpl(IZ)J
-HPLandroid/util/proto/ProtoOutputStream;->write(JD)V
-HPLandroid/util/proto/ProtoOutputStream;->write(JF)V
 HSPLandroid/util/proto/ProtoOutputStream;->write(JI)V
 HSPLandroid/util/proto/ProtoOutputStream;->write(JJ)V
 HSPLandroid/util/proto/ProtoOutputStream;->write(JLjava/lang/String;)V
-HPLandroid/util/proto/ProtoOutputStream;->write(JZ)V
-HPLandroid/util/proto/ProtoOutputStream;->write(J[B)V
-PLandroid/util/proto/ProtoOutputStream;->writeBoolImpl(IZ)V
-PLandroid/util/proto/ProtoOutputStream;->writeBytesImpl(I[B)V
-HPLandroid/util/proto/ProtoOutputStream;->writeDoubleImpl(ID)V
-PLandroid/util/proto/ProtoOutputStream;->writeFloatImpl(IF)V
 HSPLandroid/util/proto/ProtoOutputStream;->writeInt32Impl(II)V
 HSPLandroid/util/proto/ProtoOutputStream;->writeInt64Impl(IJ)V
 HSPLandroid/util/proto/ProtoOutputStream;->writeKnownLengthHeader(II)V
-PLandroid/util/proto/ProtoOutputStream;->writeObjectImpl(I[B)V
-HPLandroid/util/proto/ProtoOutputStream;->writeRepeatedEnumImpl(II)V
-HPLandroid/util/proto/ProtoOutputStream;->writeRepeatedInt64Impl(IJ)V
-PLandroid/util/proto/ProtoOutputStream;->writeRepeatedObjectImpl(I[B)V
-HPLandroid/util/proto/ProtoOutputStream;->writeSInt32Impl(II)V
-HPLandroid/util/proto/ProtoOutputStream;->writeSInt64Impl(IJ)V
 HSPLandroid/util/proto/ProtoOutputStream;->writeStringImpl(ILjava/lang/String;)V
 HSPLandroid/util/proto/ProtoOutputStream;->writeTag(II)V
 HSPLandroid/util/proto/ProtoOutputStream;->writeUnsignedVarintFromSignedInt(I)V
@@ -23858,35 +11647,30 @@
 HSPLandroid/util/proto/ProtoStream;->getOffsetFromToken(J)I
 HSPLandroid/util/proto/ProtoStream;->getRepeatedFromToken(J)Z
 HSPLandroid/util/proto/ProtoStream;->makeToken(IZIII)J
-HPLandroid/util/proto/ProtoUtils;->toAggStatsProto(Landroid/util/proto/ProtoOutputStream;JJJJ)V
-HPLandroid/util/proto/ProtoUtils;->toDuration(Landroid/util/proto/ProtoOutputStream;JJJ)V
-HPLandroid/util/proto/ProtoUtils;->writeBitWiseFlagsToProtoEnum(Landroid/util/proto/ProtoOutputStream;JI[I[I)V
+HSPLandroid/view/-$$Lambda$1kvF4JuyM42-wmyDVPAIYdPz1jE;-><init>(Landroid/view/RenderNodeAnimator;)V
 HSPLandroid/view/-$$Lambda$1kvF4JuyM42-wmyDVPAIYdPz1jE;->run()V
-HPLandroid/view/-$$Lambda$FocusFinder$FocusSorter$h0f2ZYL6peSaaEeCCkAoYs_YZvU;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HPLandroid/view/-$$Lambda$FocusFinder$FocusSorter$kW7K1t9q7Y62V38r-7g6xRzqqq8;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLandroid/view/-$$Lambda$InsetsController$HI9QZ2HvGm6iykc-WONz2KPG61Q;-><init>(Landroid/view/InsetsController;)V
-HPLandroid/view/-$$Lambda$SurfaceView$SyyzxOgxKwZMRgiiTGcRYbOU5JY;-><init>(Landroid/view/SurfaceView;)V
-HPLandroid/view/-$$Lambda$SurfaceView$SyyzxOgxKwZMRgiiTGcRYbOU5JY;->run()V
-HPLandroid/view/-$$Lambda$SurfaceView$w68OV7dB_zKVNsA-r0IrAUtyWas;->onPreDraw()Z
-HPLandroid/view/-$$Lambda$TextureView$WAq1rgfoZeDSt6cBQga7iQDymYk;-><init>(Landroid/view/TextureView;)V
-HPLandroid/view/-$$Lambda$TextureView$WAq1rgfoZeDSt6cBQga7iQDymYk;->onFrameAvailable(Landroid/graphics/SurfaceTexture;)V
-HPLandroid/view/-$$Lambda$ThreadedRenderer$ydBD-R1iP5u-97XYakm-jKvC1b4;->onFrameDraw(J)V
+HSPLandroid/view/-$$Lambda$FocusFinder$FocusSorter$h0f2ZYL6peSaaEeCCkAoYs_YZvU;-><init>(Landroid/view/FocusFinder$FocusSorter;)V
+HSPLandroid/view/-$$Lambda$FocusFinder$FocusSorter$kW7K1t9q7Y62V38r-7g6xRzqqq8;-><init>(Landroid/view/FocusFinder$FocusSorter;)V
+HSPLandroid/view/-$$Lambda$InsetsController$6uoSHBPvxV1C0JOZKhH1AyuNXmo;-><init>(Landroid/view/InsetsController;)V
+HSPLandroid/view/-$$Lambda$InsetsController$HI9QZ2HvGm6iykc-WONz2KPG61Q;-><init>(Landroid/view/InsetsController;)V
+HSPLandroid/view/-$$Lambda$InsetsController$RZT3QkL9zMFTeHtZbfcaHIzvlsc;-><clinit>()V
+HSPLandroid/view/-$$Lambda$InsetsController$RZT3QkL9zMFTeHtZbfcaHIzvlsc;-><init>()V
+HSPLandroid/view/-$$Lambda$InsetsController$zpmOxHfTFV_3me2u3C8YaXSUauQ;-><init>(Landroid/view/InsetsController;)V
+HSPLandroid/view/-$$Lambda$QI1s392qW8l6mC24bcy9050SkuY;-><init>(Landroid/view/View;)V
+HSPLandroid/view/-$$Lambda$View$llq76MkPXP4bNcb9oJt_msw0fnQ;-><init>(Landroid/view/View;)V
 HSPLandroid/view/-$$Lambda$ViewRootImpl$7A_3tkr_Kw4TZAeIUGVlOoTcZhg;-><init>(Landroid/view/ViewRootImpl;Ljava/util/ArrayList;)V
 HSPLandroid/view/-$$Lambda$ViewRootImpl$7A_3tkr_Kw4TZAeIUGVlOoTcZhg;->run()V
-HPLandroid/view/-$$Lambda$ViewRootImpl$IReiNMSbDakZSGbIZuL_ifaFWn8;->onFrameDraw(J)V
-PLandroid/view/-$$Lambda$ViewRootImpl$YBiqAhbCbXVPSKdbE3K4rH2gpxI;-><init>(Landroid/view/ViewRootImpl;Landroid/os/Handler;Ljava/util/ArrayList;)V
+HSPLandroid/view/-$$Lambda$ViewRootImpl$DJd0VUYJgsebcnSohO6h8zc_ONI;-><init>(Landroid/view/ViewRootImpl;ZLjava/util/ArrayList;)V
+HSPLandroid/view/-$$Lambda$ViewRootImpl$DJd0VUYJgsebcnSohO6h8zc_ONI;->run()V
+HSPLandroid/view/-$$Lambda$ViewRootImpl$YBiqAhbCbXVPSKdbE3K4rH2gpxI;-><init>(Landroid/view/ViewRootImpl;Landroid/os/Handler;Ljava/util/ArrayList;)V
 HSPLandroid/view/-$$Lambda$ViewRootImpl$YBiqAhbCbXVPSKdbE3K4rH2gpxI;->onFrameComplete(J)V
-HPLandroid/view/-$$Lambda$WlJa6OPA72p3gYtA3nVKC7Z1tGY;-><init>(Landroid/view/View;)V
+HSPLandroid/view/-$$Lambda$ViewRootImpl$vBfxngTfPtkwcFoa96FB0CWn5ZI;-><init>(Landroid/view/ViewRootImpl;Landroid/os/Handler;ZLjava/util/ArrayList;)V
+HSPLandroid/view/-$$Lambda$ViewRootImpl$vBfxngTfPtkwcFoa96FB0CWn5ZI;->onFrameComplete(J)V
+HSPLandroid/view/-$$Lambda$WlJa6OPA72p3gYtA3nVKC7Z1tGY;-><init>(Landroid/view/View;)V
 HSPLandroid/view/-$$Lambda$WlJa6OPA72p3gYtA3nVKC7Z1tGY;->run()V
-HSPLandroid/view/-$$Lambda$cZhmLzK8aetUdx4VlP9w5jR7En0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/view/AbsSavedState$2;->createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Landroid/view/AbsSavedState;
-HSPLandroid/view/AbsSavedState$2;->createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;
-HSPLandroid/view/AbsSavedState;->getSuperState()Landroid/os/Parcelable;
+HSPLandroid/view/-$$Lambda$Y3lG3v_J32-xL0IjMGgNorZjESw;->get()Ljava/lang/Object;
+HSPLandroid/view/AbsSavedState;-><init>(Landroid/os/Parcelable;)V
 HSPLandroid/view/AbsSavedState;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/AppTransitionAnimationSpec;-><init>(ILandroid/graphics/GraphicBuffer;Landroid/graphics/Rect;)V
-HSPLandroid/view/BatchedInputEventReceiver$BatchedInputRunnable;-><init>(Landroid/view/BatchedInputEventReceiver;)V
-HSPLandroid/view/BatchedInputEventReceiver$BatchedInputRunnable;-><init>(Landroid/view/BatchedInputEventReceiver;Landroid/view/BatchedInputEventReceiver$1;)V
-HSPLandroid/view/BatchedInputEventReceiver;-><init>(Landroid/view/InputChannel;Landroid/os/Looper;Landroid/view/Choreographer;)V
 HSPLandroid/view/Choreographer$1;->initialValue()Landroid/view/Choreographer;
 HSPLandroid/view/Choreographer$1;->initialValue()Ljava/lang/Object;
 HSPLandroid/view/Choreographer$2;->initialValue()Landroid/view/Choreographer;
@@ -23906,7 +11690,7 @@
 HSPLandroid/view/Choreographer$FrameHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/view/Choreographer;-><init>(Landroid/os/Looper;I)V
 HSPLandroid/view/Choreographer;-><init>(Landroid/os/Looper;ILandroid/view/Choreographer$1;)V
-PLandroid/view/Choreographer;->access$102(Landroid/view/Choreographer;)Landroid/view/Choreographer;
+HSPLandroid/view/Choreographer;->access$102(Landroid/view/Choreographer;)Landroid/view/Choreographer;
 HSPLandroid/view/Choreographer;->access$400(Landroid/view/Choreographer;)Landroid/view/Choreographer$FrameHandler;
 HSPLandroid/view/Choreographer;->access$500()Ljava/lang/Object;
 HSPLandroid/view/Choreographer;->access$600(Landroid/view/Choreographer;JLjava/lang/Object;Ljava/lang/Object;)Landroid/view/Choreographer$CallbackRecord;
@@ -23915,52 +11699,42 @@
 HSPLandroid/view/Choreographer;->doFrame(JI)V
 HSPLandroid/view/Choreographer;->doScheduleCallback(I)V
 HSPLandroid/view/Choreographer;->doScheduleVsync()V
-PLandroid/view/Choreographer;->getFrameIntervalNanos()J
-PLandroid/view/Choreographer;->getFrameTime()J
+HSPLandroid/view/Choreographer;->getFrameIntervalNanos()J
+HSPLandroid/view/Choreographer;->getFrameTime()J
 HSPLandroid/view/Choreographer;->getFrameTimeNanos()J
 HSPLandroid/view/Choreographer;->getInstance()Landroid/view/Choreographer;
-PLandroid/view/Choreographer;->getMainThreadInstance()Landroid/view/Choreographer;
+HSPLandroid/view/Choreographer;->getMainThreadInstance()Landroid/view/Choreographer;
 HSPLandroid/view/Choreographer;->getRefreshRate()F
-HSPLandroid/view/Choreographer;->getSfInstance()Landroid/view/Choreographer;
 HSPLandroid/view/Choreographer;->isRunningOnLooperThreadLocked()Z
 HSPLandroid/view/Choreographer;->obtainCallbackLocked(JLjava/lang/Object;Ljava/lang/Object;)Landroid/view/Choreographer$CallbackRecord;
-PLandroid/view/Choreographer;->postCallback(ILjava/lang/Runnable;Ljava/lang/Object;)V
-PLandroid/view/Choreographer;->postCallbackDelayed(ILjava/lang/Runnable;Ljava/lang/Object;J)V
+HSPLandroid/view/Choreographer;->postCallback(ILjava/lang/Runnable;Ljava/lang/Object;)V
+HSPLandroid/view/Choreographer;->postCallbackDelayed(ILjava/lang/Runnable;Ljava/lang/Object;J)V
 HSPLandroid/view/Choreographer;->postCallbackDelayedInternal(ILjava/lang/Object;Ljava/lang/Object;J)V
 HSPLandroid/view/Choreographer;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
 HSPLandroid/view/Choreographer;->postFrameCallbackDelayed(Landroid/view/Choreographer$FrameCallback;J)V
 HSPLandroid/view/Choreographer;->recycleCallbackLocked(Landroid/view/Choreographer$CallbackRecord;)V
-PLandroid/view/Choreographer;->removeCallbacks(ILjava/lang/Runnable;Ljava/lang/Object;)V
+HSPLandroid/view/Choreographer;->removeCallbacks(ILjava/lang/Runnable;Ljava/lang/Object;)V
 HSPLandroid/view/Choreographer;->removeCallbacksInternal(ILjava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/view/Choreographer;->removeFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
 HSPLandroid/view/Choreographer;->scheduleFrameLocked(J)V
 HSPLandroid/view/Choreographer;->scheduleVsyncLocked()V
 HSPLandroid/view/Choreographer;->setFPSDivisor(I)V
-HPLandroid/view/CompositionSamplingListener;->dispatchOnSampleCollected(Landroid/view/CompositionSamplingListener;F)V
-HPLandroid/view/CompositionSamplingListener;->lambda$dispatchOnSampleCollected$0(Landroid/view/CompositionSamplingListener;F)V
-HPLandroid/view/CompositionSamplingListener;->register(Landroid/view/CompositionSamplingListener;ILandroid/view/SurfaceControl;Landroid/graphics/Rect;)V
-HPLandroid/view/CompositionSamplingListener;->unregister(Landroid/view/CompositionSamplingListener;)V
+HSPLandroid/view/ContextThemeWrapper;-><init>()V
 HSPLandroid/view/ContextThemeWrapper;-><init>(Landroid/content/Context;I)V
-HPLandroid/view/ContextThemeWrapper;-><init>(Landroid/content/Context;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/view/ContextThemeWrapper;->applyOverrideConfiguration(Landroid/content/res/Configuration;)V
-HSPLandroid/view/ContextThemeWrapper;->getAssets()Landroid/content/res/AssetManager;
-HPLandroid/view/ContextThemeWrapper;->getOverrideConfiguration()Landroid/content/res/Configuration;
+HSPLandroid/view/ContextThemeWrapper;-><init>(Landroid/content/Context;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/view/ContextThemeWrapper;->attachBaseContext(Landroid/content/Context;)V
 HSPLandroid/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources;
-PLandroid/view/ContextThemeWrapper;->getResourcesInternal()Landroid/content/res/Resources;
+HSPLandroid/view/ContextThemeWrapper;->getResourcesInternal()Landroid/content/res/Resources;
 HSPLandroid/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
 HSPLandroid/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;
 HSPLandroid/view/ContextThemeWrapper;->initializeTheme()V
 HSPLandroid/view/ContextThemeWrapper;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V
-HPLandroid/view/ContextThemeWrapper;->setTheme(I)V
+HSPLandroid/view/ContextThemeWrapper;->setTheme(I)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;Landroid/view/Display$1;)V
-HSPLandroid/view/Display$HdrCapabilities;-><init>([IFFF)V
-HSPLandroid/view/Display$HdrCapabilities;->getSupportedHdrTypes()[I
 HSPLandroid/view/Display$HdrCapabilities;->readFromParcel(Landroid/os/Parcel;)V
-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;
 HSPLandroid/view/Display$Mode$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/Display$Mode;-><init>(IIIF)V
@@ -23972,56 +11746,34 @@
 HSPLandroid/view/Display$Mode;->getPhysicalWidth()I
 HSPLandroid/view/Display$Mode;->getRefreshRate()F
 HSPLandroid/view/Display$Mode;->matches(IIF)Z
-HSPLandroid/view/Display$Mode;->toString()Ljava/lang/String;
-HSPLandroid/view/Display$Mode;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/content/res/Resources;)V
 HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;)V
 HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;Landroid/content/res/Resources;)V
-HPLandroid/view/Display;->getAppVsyncOffsetNanos()J
-HSPLandroid/view/Display;->getCurrentSizeRange(Landroid/graphics/Point;Landroid/graphics/Point;)V
-HSPLandroid/view/Display;->getCutout()Landroid/view/DisplayCutout;
 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
-HSPLandroid/view/Display;->getHdrCapabilities()Landroid/view/Display$HdrCapabilities;
 HSPLandroid/view/Display;->getHeight()I
-HSPLandroid/view/Display;->getMaximumSizeDimension()I
 HSPLandroid/view/Display;->getMetrics(Landroid/util/DisplayMetrics;)V
 HSPLandroid/view/Display;->getMode()Landroid/view/Display$Mode;
-HPLandroid/view/Display;->getPresentationDeadlineNanos()J
 HSPLandroid/view/Display;->getRealMetrics(Landroid/util/DisplayMetrics;)V
 HSPLandroid/view/Display;->getRealSize(Landroid/graphics/Point;)V
-HSPLandroid/view/Display;->getRectSize(Landroid/graphics/Rect;)V
 HSPLandroid/view/Display;->getRefreshRate()F
 HSPLandroid/view/Display;->getRotation()I
 HSPLandroid/view/Display;->getSize(Landroid/graphics/Point;)V
 HSPLandroid/view/Display;->getState()I
+HSPLandroid/view/Display;->getSupportedColorModes()[I
 HSPLandroid/view/Display;->getSupportedModes()[Landroid/view/Display$Mode;
-HSPLandroid/view/Display;->getType()I
+HSPLandroid/view/Display;->getSupportedWideColorGamut()[Landroid/graphics/ColorSpace;
 HSPLandroid/view/Display;->getWidth()I
-HSPLandroid/view/Display;->hasAccess(I)Z
-HSPLandroid/view/Display;->hasAccess(IIII)Z
-HSPLandroid/view/Display;->isDozeState(I)Z
-HSPLandroid/view/Display;->isSuspendedState(I)Z
 HSPLandroid/view/Display;->isValid()Z
 HSPLandroid/view/Display;->isWideColorGamut()Z
-HSPLandroid/view/Display;->stateToString(I)Ljava/lang/String;
-HSPLandroid/view/Display;->toString()Ljava/lang/String;
-HSPLandroid/view/Display;->typeToString(I)Ljava/lang/String;
 HSPLandroid/view/Display;->updateCachedAppSizeIfNeededLocked()V
 HSPLandroid/view/Display;->updateDisplayInfoLocked()V
 HSPLandroid/view/DisplayAddress$Physical$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/DisplayAddress$Physical;
 HSPLandroid/view/DisplayAddress$Physical$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/DisplayAddress$Physical;-><init>(J)V
 HSPLandroid/view/DisplayAddress$Physical;-><init>(JLandroid/view/DisplayAddress$1;)V
-HSPLandroid/view/DisplayAddress$Physical;->equals(Ljava/lang/Object;)Z
-HSPLandroid/view/DisplayAddress$Physical;->getModel()Ljava/lang/Long;
-HSPLandroid/view/DisplayAddress$Physical;->getPort()B
-HSPLandroid/view/DisplayAddress$Physical;->toString()Ljava/lang/String;
-HSPLandroid/view/DisplayAddress$Physical;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/DisplayAddress;-><init>()V
-HSPLandroid/view/DisplayAddress;->fromPhysicalDisplayId(J)Landroid/view/DisplayAddress$Physical;
 HSPLandroid/view/DisplayAdjustments;-><init>()V
 HSPLandroid/view/DisplayAdjustments;-><init>(Landroid/content/res/Configuration;)V
 HSPLandroid/view/DisplayAdjustments;-><init>(Landroid/view/DisplayAdjustments;)V
@@ -24030,500 +11782,257 @@
 HSPLandroid/view/DisplayAdjustments;->getConfiguration()Landroid/content/res/Configuration;
 HSPLandroid/view/DisplayAdjustments;->hashCode()I
 HSPLandroid/view/DisplayAdjustments;->setCompatibilityInfo(Landroid/content/res/CompatibilityInfo;)V
-PLandroid/view/DisplayCutout$Bounds;->access$500(Landroid/view/DisplayCutout$Bounds;I)Landroid/graphics/Rect;
-HPLandroid/view/DisplayCutout$Bounds;->getRect(I)Landroid/graphics/Rect;
-HSPLandroid/view/DisplayCutout$Bounds;->toString()Ljava/lang/String;
+HSPLandroid/view/DisplayAdjustments;->setConfiguration(Landroid/content/res/Configuration;)V
+HSPLandroid/view/DisplayCutout$Bounds;-><init>([Landroid/graphics/Rect;Z)V
+HSPLandroid/view/DisplayCutout$Bounds;-><init>([Landroid/graphics/Rect;ZLandroid/view/DisplayCutout$1;)V
 HSPLandroid/view/DisplayCutout$ParcelableWrapper$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/DisplayCutout$ParcelableWrapper;
 HSPLandroid/view/DisplayCutout$ParcelableWrapper$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/view/DisplayCutout$ParcelableWrapper;-><init>()V
+HSPLandroid/view/DisplayCutout$ParcelableWrapper;-><init>()V
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;-><init>(Landroid/view/DisplayCutout;)V
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->get()Landroid/view/DisplayCutout;
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->readCutoutFromParcel(Landroid/os/Parcel;)Landroid/view/DisplayCutout;
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/view/DisplayCutout$ParcelableWrapper;->set(Landroid/view/DisplayCutout$ParcelableWrapper;)V
-PLandroid/view/DisplayCutout$ParcelableWrapper;->set(Landroid/view/DisplayCutout;)V
-HSPLandroid/view/DisplayCutout$ParcelableWrapper;->writeCutoutToParcel(Landroid/view/DisplayCutout;Landroid/os/Parcel;I)V
-HPLandroid/view/DisplayCutout$ParcelableWrapper;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/DisplayCutout;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLandroid/view/DisplayCutout$ParcelableWrapper;->set(Landroid/view/DisplayCutout$ParcelableWrapper;)V
+HSPLandroid/view/DisplayCutout$ParcelableWrapper;->set(Landroid/view/DisplayCutout;)V
+HSPLandroid/view/DisplayCutout;-><init>(Landroid/graphics/Rect;Landroid/graphics/Insets;[Landroid/graphics/Rect;Z)V
+HSPLandroid/view/DisplayCutout;-><init>(Landroid/graphics/Rect;Landroid/graphics/Insets;[Landroid/graphics/Rect;ZLandroid/view/DisplayCutout$1;)V
 HSPLandroid/view/DisplayCutout;->equals(Ljava/lang/Object;)Z
-HSPLandroid/view/DisplayCutout;->fromResourcesRectApproximation(Landroid/content/res/Resources;II)Landroid/view/DisplayCutout;
-HSPLandroid/view/DisplayCutout;->fromSpec(Ljava/lang/String;IIF)Landroid/view/DisplayCutout;
-HSPLandroid/view/DisplayCutout;->getSafeInsetBottom()I
-HSPLandroid/view/DisplayCutout;->getSafeInsetLeft()I
-HSPLandroid/view/DisplayCutout;->getSafeInsetRight()I
-HSPLandroid/view/DisplayCutout;->getSafeInsetTop()I
-PLandroid/view/DisplayCutout;->getSafeInsets()Landroid/graphics/Rect;
+HSPLandroid/view/DisplayCutout;->getCopyOrRef(Landroid/graphics/Rect;Z)Landroid/graphics/Rect;
 HSPLandroid/view/DisplayCutout;->isEmpty()Z
-HSPLandroid/view/DisplayCutout;->pathAndDisplayCutoutFromSpec(Ljava/lang/String;IIF)Landroid/util/Pair;
-HSPLandroid/view/DisplayCutout;->toString()Ljava/lang/String;
 HSPLandroid/view/DisplayEventReceiver;-><init>(Landroid/os/Looper;II)V
-HSPLandroid/view/DisplayEventReceiver;->dispatchConfigChanged(JJI)V
 HSPLandroid/view/DisplayEventReceiver;->dispatchVsync(JJI)V
-HPLandroid/view/DisplayEventReceiver;->dispose(Z)V
-HPLandroid/view/DisplayEventReceiver;->finalize()V
 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;Landroid/view/DisplayInfo$1;)V
-HSPLandroid/view/DisplayInfo;-><init>(Landroid/view/DisplayInfo;)V
-HSPLandroid/view/DisplayInfo;->copyFrom(Landroid/view/DisplayInfo;)V
-PLandroid/view/DisplayInfo;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLandroid/view/DisplayInfo;->equals(Landroid/view/DisplayInfo;)Z
-HSPLandroid/view/DisplayInfo;->findDefaultModeByRefreshRate(F)I
 HSPLandroid/view/DisplayInfo;->findMode(I)Landroid/view/Display$Mode;
-HSPLandroid/view/DisplayInfo;->flagsToString(I)Ljava/lang/String;
-HSPLandroid/view/DisplayInfo;->getAppMetrics(Landroid/util/DisplayMetrics;)V
-HSPLandroid/view/DisplayInfo;->getAppMetrics(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;)V
 HSPLandroid/view/DisplayInfo;->getAppMetrics(Landroid/util/DisplayMetrics;Landroid/view/DisplayAdjustments;)V
-HSPLandroid/view/DisplayInfo;->getDefaultMode()Landroid/view/Display$Mode;
-HSPLandroid/view/DisplayInfo;->getDefaultRefreshRates()[F
 HSPLandroid/view/DisplayInfo;->getLogicalMetrics(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;->getMode()Landroid/view/Display$Mode;
-PLandroid/view/DisplayInfo;->getNaturalHeight()I
-PLandroid/view/DisplayInfo;->getNaturalWidth()I
-HSPLandroid/view/DisplayInfo;->hasAccess(I)Z
-HSPLandroid/view/DisplayInfo;->isHdr()Z
 HSPLandroid/view/DisplayInfo;->isWideColorGamut()Z
 HSPLandroid/view/DisplayInfo;->readFromParcel(Landroid/os/Parcel;)V
-HSPLandroid/view/DisplayInfo;->toString()Ljava/lang/String;
-HSPLandroid/view/DisplayInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/DisplayListCanvas;-><init>(J)V
+HSPLandroid/view/DisplayListCanvas;-><init>(J)V
 HSPLandroid/view/FocusFinder$1;->initialValue()Landroid/view/FocusFinder;
 HSPLandroid/view/FocusFinder$1;->initialValue()Ljava/lang/Object;
-HPLandroid/view/FocusFinder$FocusSorter;->lambda$new$0$FocusFinder$FocusSorter(Landroid/view/View;Landroid/view/View;)I
-HPLandroid/view/FocusFinder$FocusSorter;->lambda$new$1$FocusFinder$FocusSorter(Landroid/view/View;Landroid/view/View;)I
+HSPLandroid/view/FocusFinder$FocusSorter;-><init>()V
 HSPLandroid/view/FocusFinder$FocusSorter;->sort([Landroid/view/View;IILandroid/view/ViewGroup;Z)V
 HSPLandroid/view/FocusFinder$UserSpecifiedFocusComparator;-><init>(Landroid/view/FocusFinder$UserSpecifiedFocusComparator$NextFocusGetter;)V
 HSPLandroid/view/FocusFinder;-><init>()V
+HSPLandroid/view/FocusFinder;-><init>(Landroid/view/FocusFinder$1;)V
 HSPLandroid/view/FocusFinder;->findNextFocus(Landroid/view/ViewGroup;Landroid/view/View;I)Landroid/view/View;
 HSPLandroid/view/FocusFinder;->findNextFocus(Landroid/view/ViewGroup;Landroid/view/View;Landroid/graphics/Rect;I)Landroid/view/View;
-HSPLandroid/view/FocusFinder;->findNextFocus(Landroid/view/ViewGroup;Landroid/view/View;Landroid/graphics/Rect;ILjava/util/ArrayList;)Landroid/view/View;
-HSPLandroid/view/FocusFinder;->findNextFocusInAbsoluteDirection(Ljava/util/ArrayList;Landroid/view/ViewGroup;Landroid/view/View;Landroid/graphics/Rect;I)Landroid/view/View;
-HPLandroid/view/FocusFinder;->findNextUserSpecifiedFocus(Landroid/view/ViewGroup;Landroid/view/View;I)Landroid/view/View;
 HSPLandroid/view/FocusFinder;->getEffectiveRoot(Landroid/view/ViewGroup;Landroid/view/View;)Landroid/view/ViewGroup;
 HSPLandroid/view/FocusFinder;->getInstance()Landroid/view/FocusFinder;
-HPLandroid/view/FocusFinder;->isBetterCandidate(ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
-HPLandroid/view/FocusFinder;->isCandidate(Landroid/graphics/Rect;Landroid/graphics/Rect;I)Z
-HSPLandroid/view/FrameMetrics;-><init>()V
-HSPLandroid/view/FrameMetrics;->getMetric(I)J
-HSPLandroid/view/FrameMetricsObserver;-><init>(Landroid/view/Window;Landroid/os/Looper;Landroid/view/Window$OnFrameMetricsAvailableListener;)V
-HSPLandroid/view/FrameMetricsObserver;->notifyDataAvailable(I)V
+HSPLandroid/view/FocusFinder;->sort([Landroid/view/View;IILandroid/view/ViewGroup;Z)V
+HSPLandroid/view/GestureDetector$GestureHandler;-><init>(Landroid/view/GestureDetector;)V
 HSPLandroid/view/GestureDetector$GestureHandler;-><init>(Landroid/view/GestureDetector;Landroid/os/Handler;)V
-PLandroid/view/GestureDetector$GestureHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/view/GestureDetector$GestureHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/view/GestureDetector$SimpleOnGestureListener;-><init>()V
-PLandroid/view/GestureDetector$SimpleOnGestureListener;->onDoubleTap(Landroid/view/MotionEvent;)Z
-PLandroid/view/GestureDetector$SimpleOnGestureListener;->onDoubleTapEvent(Landroid/view/MotionEvent;)Z
-PLandroid/view/GestureDetector$SimpleOnGestureListener;->onDown(Landroid/view/MotionEvent;)Z
-HPLandroid/view/GestureDetector$SimpleOnGestureListener;->onFling(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
-PLandroid/view/GestureDetector$SimpleOnGestureListener;->onLongPress(Landroid/view/MotionEvent;)V
-HPLandroid/view/GestureDetector$SimpleOnGestureListener;->onScroll(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
-PLandroid/view/GestureDetector$SimpleOnGestureListener;->onShowPress(Landroid/view/MotionEvent;)V
-PLandroid/view/GestureDetector$SimpleOnGestureListener;->onSingleTapConfirmed(Landroid/view/MotionEvent;)Z
-HPLandroid/view/GestureDetector$SimpleOnGestureListener;->onSingleTapUp(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector$SimpleOnGestureListener;->onDown(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector$SimpleOnGestureListener;->onFling(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
+HSPLandroid/view/GestureDetector$SimpleOnGestureListener;->onScroll(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
+HSPLandroid/view/GestureDetector$SimpleOnGestureListener;->onShowPress(Landroid/view/MotionEvent;)V
+HSPLandroid/view/GestureDetector$SimpleOnGestureListener;->onSingleTapConfirmed(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector$SimpleOnGestureListener;->onSingleTapUp(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/GestureDetector;-><init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;)V
 HSPLandroid/view/GestureDetector;-><init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V
-PLandroid/view/GestureDetector;->access$000(Landroid/view/GestureDetector;)Landroid/view/MotionEvent;
-PLandroid/view/GestureDetector;->access$100(Landroid/view/GestureDetector;)Landroid/view/GestureDetector$OnGestureListener;
-PLandroid/view/GestureDetector;->access$200(Landroid/view/GestureDetector;I)V
-PLandroid/view/GestureDetector;->access$300(Landroid/view/GestureDetector;)V
-PLandroid/view/GestureDetector;->access$400(Landroid/view/GestureDetector;)Landroid/view/GestureDetector$OnDoubleTapListener;
-PLandroid/view/GestureDetector;->access$500(Landroid/view/GestureDetector;)Z
-PLandroid/view/GestureDetector;->access$602(Landroid/view/GestureDetector;Z)Z
-PLandroid/view/GestureDetector;->cancel()V
-PLandroid/view/GestureDetector;->cancelTaps()V
-PLandroid/view/GestureDetector;->dispatchLongPress()V
+HSPLandroid/view/GestureDetector;->access$000(Landroid/view/GestureDetector;)Landroid/view/MotionEvent;
+HSPLandroid/view/GestureDetector;->access$100(Landroid/view/GestureDetector;)Landroid/view/GestureDetector$OnGestureListener;
+HSPLandroid/view/GestureDetector;->access$200(Landroid/view/GestureDetector;I)V
+HSPLandroid/view/GestureDetector;->access$300(Landroid/view/GestureDetector;)V
+HSPLandroid/view/GestureDetector;->access$400(Landroid/view/GestureDetector;)Landroid/view/GestureDetector$OnDoubleTapListener;
+HSPLandroid/view/GestureDetector;->access$500(Landroid/view/GestureDetector;)Z
+HSPLandroid/view/GestureDetector;->cancel()V
+HSPLandroid/view/GestureDetector;->dispatchLongPress()V
 HSPLandroid/view/GestureDetector;->init(Landroid/content/Context;)V
-PLandroid/view/GestureDetector;->isConsideredDoubleTap(Landroid/view/MotionEvent;Landroid/view/MotionEvent;Landroid/view/MotionEvent;)Z
-HPLandroid/view/GestureDetector;->onTouchEvent(Landroid/view/MotionEvent;)Z
-HPLandroid/view/GestureDetector;->recordGestureClassification(I)V
+HSPLandroid/view/GestureDetector;->isConsideredDoubleTap(Landroid/view/MotionEvent;Landroid/view/MotionEvent;Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector;->onTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector;->recordGestureClassification(I)V
 HSPLandroid/view/GestureDetector;->setContextClickListener(Landroid/view/GestureDetector$OnContextClickListener;)V
-HPLandroid/view/GestureDetector;->setIsLongpressEnabled(Z)V
 HSPLandroid/view/GestureDetector;->setOnDoubleTapListener(Landroid/view/GestureDetector$OnDoubleTapListener;)V
-HPLandroid/view/GestureExclusionTracker$GestureExclusionViewInfo;-><init>(Landroid/view/View;)V
+HSPLandroid/view/GestureExclusionTracker$GestureExclusionViewInfo;-><init>(Landroid/view/View;)V
 HSPLandroid/view/GestureExclusionTracker$GestureExclusionViewInfo;->getView()Landroid/view/View;
 HSPLandroid/view/GestureExclusionTracker$GestureExclusionViewInfo;->update()I
 HSPLandroid/view/GestureExclusionTracker;-><init>()V
 HSPLandroid/view/GestureExclusionTracker;->computeChangedRects()Ljava/util/List;
 HSPLandroid/view/GestureExclusionTracker;->updateRectsForView(Landroid/view/View;)V
 HSPLandroid/view/Gravity;->apply(IIILandroid/graphics/Rect;IILandroid/graphics/Rect;)V
-HPLandroid/view/Gravity;->apply(IIILandroid/graphics/Rect;Landroid/graphics/Rect;)V
 HSPLandroid/view/Gravity;->apply(IIILandroid/graphics/Rect;Landroid/graphics/Rect;I)V
-HPLandroid/view/Gravity;->applyDisplay(ILandroid/graphics/Rect;Landroid/graphics/Rect;)V
 HSPLandroid/view/Gravity;->getAbsoluteGravity(II)I
-PLandroid/view/Gravity;->isHorizontal(I)Z
-PLandroid/view/Gravity;->isVertical(I)Z
-PLandroid/view/Gravity;->toString(I)Ljava/lang/String;
+HSPLandroid/view/Gravity;->isHorizontal(I)Z
+HSPLandroid/view/Gravity;->isVertical(I)Z
+HSPLandroid/view/HandlerActionQueue$HandlerAction;-><init>(Ljava/lang/Runnable;J)V
 HSPLandroid/view/HandlerActionQueue$HandlerAction;->matches(Ljava/lang/Runnable;)Z
-PLandroid/view/HandlerActionQueue;-><init>()V
+HSPLandroid/view/HandlerActionQueue;-><init>()V
 HSPLandroid/view/HandlerActionQueue;->executeActions(Landroid/os/Handler;)V
 HSPLandroid/view/HandlerActionQueue;->post(Ljava/lang/Runnable;)V
 HSPLandroid/view/HandlerActionQueue;->postDelayed(Ljava/lang/Runnable;J)V
 HSPLandroid/view/HandlerActionQueue;->removeCallbacks(Ljava/lang/Runnable;)V
-PLandroid/view/IApplicationToken$Stub;-><init>()V
-PLandroid/view/IApplicationToken$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/view/IDisplayWindowRotationCallback$Stub;-><init>()V
-PLandroid/view/IDockedStackListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/IDockedStackListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IDockedStackListener$Stub$Proxy;->onAdjustedForImeChanged(ZJ)V
-PLandroid/view/IDockedStackListener$Stub$Proxy;->onDividerVisibilityChanged(Z)V
-PLandroid/view/IDockedStackListener$Stub$Proxy;->onDockedStackExistsChanged(Z)V
-PLandroid/view/IDockedStackListener$Stub$Proxy;->onDockedStackMinimizedChanged(ZJZ)V
-PLandroid/view/IDockedStackListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IDockedStackListener;
+HSPLandroid/view/IGraphicsStats$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/view/IGraphicsStats$Stub$Proxy;->requestBufferForProcess(Ljava/lang/String;Landroid/view/IGraphicsStatsCallback;)Landroid/os/ParcelFileDescriptor;
-HSPLandroid/view/IGraphicsStats$Stub;-><init>()V
 HSPLandroid/view/IGraphicsStats$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IGraphicsStats;
-PLandroid/view/IGraphicsStats$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/IGraphicsStatsCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/IGraphicsStatsCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IGraphicsStatsCallback$Stub$Proxy;->onRotateGraphicsStatsBuffer()V
 HSPLandroid/view/IGraphicsStatsCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IGraphicsStatsCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IGraphicsStatsCallback;
-PLandroid/view/IGraphicsStatsCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/view/IInputMonitorHost$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/view/IInputMonitorHost$Stub$Proxy;->pilferPointers()V
-PLandroid/view/IInputMonitorHost$Stub;-><init>()V
-PLandroid/view/IInputMonitorHost$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/view/IInputMonitorHost$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IInputMonitorHost;
-PLandroid/view/IInputMonitorHost$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/view/IPinnedStackController$Stub$Proxy;->startAnimation(Landroid/graphics/Rect;Landroid/graphics/Rect;I)V
-HSPLandroid/view/IPinnedStackController$Stub;-><init>()V
-PLandroid/view/IPinnedStackController$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IPinnedStackController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/IPinnedStackListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/IPinnedStackListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IPinnedStackListener$Stub$Proxy;->onActionsChanged(Landroid/content/pm/ParceledListSlice;)V
-PLandroid/view/IPinnedStackListener$Stub$Proxy;->onAspectRatioChanged(F)V
-HPLandroid/view/IPinnedStackListener$Stub$Proxy;->onDisplayInfoChanged(Landroid/view/DisplayInfo;)V
-PLandroid/view/IPinnedStackListener$Stub$Proxy;->onImeVisibilityChanged(ZI)V
-PLandroid/view/IPinnedStackListener$Stub$Proxy;->onListenerRegistered(Landroid/view/IPinnedStackController;)V
-PLandroid/view/IPinnedStackListener$Stub$Proxy;->onMinimizedStateChanged(Z)V
-HPLandroid/view/IPinnedStackListener$Stub$Proxy;->onMovementBoundsChanged(Landroid/graphics/Rect;ZZ)V
-PLandroid/view/IPinnedStackListener$Stub$Proxy;->onPrepareAnimation(Landroid/graphics/Rect;FLandroid/graphics/Rect;)V
-HPLandroid/view/IPinnedStackListener$Stub$Proxy;->onResetReentryBounds(Landroid/content/ComponentName;)V
-PLandroid/view/IPinnedStackListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IPinnedStackListener;
-HPLandroid/view/IPinnedStackListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/IRecentsAnimationController$Stub;-><init>()V
-PLandroid/view/IRecentsAnimationController$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/view/IRecentsAnimationController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IRecentsAnimationController;
-PLandroid/view/IRecentsAnimationController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/IRecentsAnimationRunner$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/IRecentsAnimationRunner$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IRecentsAnimationRunner$Stub$Proxy;->onAnimationCanceled(Landroid/app/ActivityManager$TaskSnapshot;)V
-HPLandroid/view/IRecentsAnimationRunner$Stub$Proxy;->onAnimationStart(Landroid/view/IRecentsAnimationController;[Landroid/view/RemoteAnimationTarget;[Landroid/view/RemoteAnimationTarget;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-HPLandroid/view/IRecentsAnimationRunner$Stub;-><init>()V
-HPLandroid/view/IRecentsAnimationRunner$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IRecentsAnimationRunner$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IRecentsAnimationRunner;
-HPLandroid/view/IRecentsAnimationRunner$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/IRemoteAnimationFinishedCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/IRemoteAnimationFinishedCallback$Stub$Proxy;->onAnimationFinished()V
-PLandroid/view/IRemoteAnimationFinishedCallback$Stub;-><init>()V
-PLandroid/view/IRemoteAnimationFinishedCallback$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/view/IRemoteAnimationFinishedCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IRemoteAnimationFinishedCallback;
-PLandroid/view/IRemoteAnimationFinishedCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/IRemoteAnimationRunner$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/IRemoteAnimationRunner$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IRemoteAnimationRunner$Stub$Proxy;->onAnimationCancelled()V
-HPLandroid/view/IRemoteAnimationRunner$Stub$Proxy;->onAnimationStart([Landroid/view/RemoteAnimationTarget;[Landroid/view/RemoteAnimationTarget;Landroid/view/IRemoteAnimationFinishedCallback;)V
-HSPLandroid/view/IRemoteAnimationRunner$Stub;-><init>()V
-HSPLandroid/view/IRemoteAnimationRunner$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IRemoteAnimationRunner$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IRemoteAnimationRunner;
-HPLandroid/view/IRemoteAnimationRunner$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/IRotationWatcher$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/IRotationWatcher$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IRotationWatcher$Stub$Proxy;->onRotationChanged(I)V
-HSPLandroid/view/IRotationWatcher$Stub;-><init>()V
-HPLandroid/view/IRotationWatcher$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IRotationWatcher$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IRotationWatcher;
-HPLandroid/view/IRotationWatcher$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/ISystemGestureExclusionListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/ISystemGestureExclusionListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/view/ISystemGestureExclusionListener$Stub$Proxy;->onSystemGestureExclusionChanged(ILandroid/graphics/Region;Landroid/graphics/Region;)V
-HSPLandroid/view/ISystemGestureExclusionListener$Stub;-><init>()V
-PLandroid/view/ISystemGestureExclusionListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/ISystemGestureExclusionListener;
-HPLandroid/view/ISystemGestureExclusionListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/IWallpaperVisibilityListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/IWallpaperVisibilityListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IWallpaperVisibilityListener$Stub$Proxy;->onWallpaperVisibilityChanged(ZI)V
-PLandroid/view/IWallpaperVisibilityListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWallpaperVisibilityListener;
-HPLandroid/view/IWallpaperVisibilityListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/IWindow$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLandroid/view/IWindow$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IWindow$Stub$Proxy;->closeSystemDialogs(Ljava/lang/String;)V
-PLandroid/view/IWindow$Stub$Proxy;->dispatchAppVisibility(Z)V
-PLandroid/view/IWindow$Stub$Proxy;->dispatchSystemUiVisibilityChanged(IIII)V
-PLandroid/view/IWindow$Stub$Proxy;->dispatchWallpaperCommand(Ljava/lang/String;IIILandroid/os/Bundle;Z)V
-PLandroid/view/IWindow$Stub$Proxy;->dispatchWallpaperOffsets(FFFFZ)V
-PLandroid/view/IWindow$Stub$Proxy;->dispatchWindowShown()V
-PLandroid/view/IWindow$Stub$Proxy;->executeCommand(Ljava/lang/String;Ljava/lang/String;Landroid/os/ParcelFileDescriptor;)V
-PLandroid/view/IWindow$Stub$Proxy;->insetsChanged(Landroid/view/InsetsState;)V
-PLandroid/view/IWindow$Stub$Proxy;->moved(II)V
-HPLandroid/view/IWindow$Stub$Proxy;->resized(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZILandroid/view/DisplayCutout$ParcelableWrapper;)V
-PLandroid/view/IWindow$Stub$Proxy;->windowFocusChanged(ZZ)V
 HSPLandroid/view/IWindow$Stub;-><init>()V
 HSPLandroid/view/IWindow$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/view/IWindow$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindow;
 HSPLandroid/view/IWindow$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/view/IWindowContainer$Stub;-><init>()V
-HPLandroid/view/IWindowContainer$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/view/IWindowContainer$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowContainer;
-PLandroid/view/IWindowId$Stub;-><init>()V
-PLandroid/view/IWindowId$Stub;->asBinder()Landroid/os/IBinder;
-HPLandroid/view/IWindowId$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowId;
-PLandroid/view/IWindowId$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;->createInputConsumer(Landroid/os/IBinder;Ljava/lang/String;ILandroid/view/InputChannel;)V
-HSPLandroid/view/IWindowManager$Stub$Proxy;->destroyInputConsumer(Ljava/lang/String;I)Z
-HPLandroid/view/IWindowManager$Stub$Proxy;->freezeRotation(I)V
 HSPLandroid/view/IWindowManager$Stub$Proxy;->getCurrentAnimatorScale()F
-HPLandroid/view/IWindowManager$Stub$Proxy;->getDockedStackSide()I
-HPLandroid/view/IWindowManager$Stub$Proxy;->getStableInsets(ILandroid/graphics/Rect;)V
 HSPLandroid/view/IWindowManager$Stub$Proxy;->hasNavigationBar(I)Z
-HPLandroid/view/IWindowManager$Stub$Proxy;->hideTransientBars(I)V
 HSPLandroid/view/IWindowManager$Stub$Proxy;->isKeyguardLocked()Z
-HSPLandroid/view/IWindowManager$Stub$Proxy;->isKeyguardSecure(I)Z
 HSPLandroid/view/IWindowManager$Stub$Proxy;->openSession(Landroid/view/IWindowSessionCallback;)Landroid/view/IWindowSession;
-HPLandroid/view/IWindowManager$Stub$Proxy;->removeRotationWatcher(Landroid/view/IRotationWatcher;)V
-HPLandroid/view/IWindowManager$Stub$Proxy;->setDockedStackDividerTouchRegion(Landroid/graphics/Rect;)V
-HPLandroid/view/IWindowManager$Stub$Proxy;->setNavBarVirtualKeyHapticFeedbackEnabled(Z)V
-HPLandroid/view/IWindowManager$Stub$Proxy;->setPipVisibility(Z)V
-HPLandroid/view/IWindowManager$Stub$Proxy;->watchRotation(Landroid/view/IRotationWatcher;I)I
-HSPLandroid/view/IWindowManager$Stub;-><init>()V
 HSPLandroid/view/IWindowManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowManager;
-PLandroid/view/IWindowManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/view/IWindowManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/view/IWindowSession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/view/IWindowSession$Stub$Proxy;->addToDisplay(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/InputChannel;Landroid/view/InsetsState;)I
 HSPLandroid/view/IWindowSession$Stub$Proxy;->finishDrawing(Landroid/view/IWindow;Landroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/IWindowSession$Stub$Proxy;->getDisplayFrame(Landroid/view/IWindow;Landroid/graphics/Rect;)V
 HSPLandroid/view/IWindowSession$Stub$Proxy;->getInTouchMode()Z
-HPLandroid/view/IWindowSession$Stub$Proxy;->getWindowId(Landroid/os/IBinder;)Landroid/view/IWindowId;
-HPLandroid/view/IWindowSession$Stub$Proxy;->onRectangleOnScreenRequested(Landroid/os/IBinder;Landroid/graphics/Rect;)V
-HPLandroid/view/IWindowSession$Stub$Proxy;->performHapticFeedback(IZ)Z
-HSPLandroid/view/IWindowSession$Stub$Proxy;->relayout(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIIJLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;)I
+HSPLandroid/view/IWindowSession$Stub$Proxy;->insetsModified(Landroid/view/IWindow;Landroid/view/InsetsState;)V
+HSPLandroid/view/IWindowSession$Stub$Proxy;->pokeDrawLock(Landroid/os/IBinder;)V
+HSPLandroid/view/IWindowSession$Stub$Proxy;->relayout(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIIJLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;Landroid/graphics/Point;Landroid/view/SurfaceControl;)I
 HSPLandroid/view/IWindowSession$Stub$Proxy;->remove(Landroid/view/IWindow;)V
 HSPLandroid/view/IWindowSession$Stub$Proxy;->reportSystemGestureExclusionChanged(Landroid/view/IWindow;Ljava/util/List;)V
-HPLandroid/view/IWindowSession$Stub$Proxy;->sendWallpaperCommand(Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;Z)Landroid/os/Bundle;
-HPLandroid/view/IWindowSession$Stub$Proxy;->setInsets(Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
-HPLandroid/view/IWindowSession$Stub$Proxy;->setTransparentRegion(Landroid/view/IWindow;Landroid/graphics/Region;)V
-HSPLandroid/view/IWindowSession$Stub$Proxy;->setWallpaperPosition(Landroid/os/IBinder;FFFF)V
-HSPLandroid/view/IWindowSession$Stub$Proxy;->updatePointerIcon(Landroid/view/IWindow;)V
-HPLandroid/view/IWindowSession$Stub$Proxy;->wallpaperOffsetsComplete(Landroid/os/IBinder;)V
-PLandroid/view/IWindowSession$Stub;-><init>()V
-PLandroid/view/IWindowSession$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IWindowSession$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLandroid/view/IWindowSession$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/IWindowSessionCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/IWindowSessionCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/view/IWindowSessionCallback$Stub;-><init>()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;
-PLandroid/view/IWindowSessionCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowSessionCallback;
-PLandroid/view/InflateException;-><init>(Ljava/lang/String;)V
-PLandroid/view/InputApplicationHandle;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/InputApplicationHandle;->finalize()V
+HSPLandroid/view/ImeFocusController;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ImeFocusController;->checkFocus(ZZ)Z
+HSPLandroid/view/ImeFocusController;->getImmDelegate()Landroid/view/ImeFocusController$InputMethodManagerDelegate;
+HSPLandroid/view/ImeFocusController;->getServedView()Landroid/view/View;
+HSPLandroid/view/ImeFocusController;->isInLocalFocusMode(Landroid/view/WindowManager$LayoutParams;)Z
+HSPLandroid/view/ImeFocusController;->onPostWindowFocus(Landroid/view/View;ZLandroid/view/WindowManager$LayoutParams;)V
+HSPLandroid/view/ImeFocusController;->onPreWindowFocus(ZLandroid/view/WindowManager$LayoutParams;)V
+HSPLandroid/view/ImeFocusController;->onProcessImeInputStage(Ljava/lang/Object;Landroid/view/InputEvent;Landroid/view/WindowManager$LayoutParams;Landroid/view/inputmethod/InputMethodManager$FinishedInputEventCallback;)I
+HSPLandroid/view/ImeFocusController;->onTraversal(ZLandroid/view/WindowManager$LayoutParams;)V
+HSPLandroid/view/ImeFocusController;->onViewDetachedFromWindow(Landroid/view/View;)V
+HSPLandroid/view/ImeFocusController;->onViewFocusChanged(Landroid/view/View;Z)V
+HSPLandroid/view/ImeFocusController;->onWindowDismissed()V
+HSPLandroid/view/ImeFocusController;->setNextServedView(Landroid/view/View;)V
+HSPLandroid/view/ImeFocusController;->setServedView(Landroid/view/View;)V
+HSPLandroid/view/ImeFocusController;->updateImeFocusable(Landroid/view/WindowManager$LayoutParams;Z)Z
 HSPLandroid/view/InputChannel$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InputChannel;
 HSPLandroid/view/InputChannel$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/InputChannel;-><init>()V
 HSPLandroid/view/InputChannel;->dispose()V
-PLandroid/view/InputChannel;->dup()Landroid/view/InputChannel;
 HSPLandroid/view/InputChannel;->finalize()V
-PLandroid/view/InputChannel;->getName()Ljava/lang/String;
-PLandroid/view/InputChannel;->getToken()Landroid/os/IBinder;
-HSPLandroid/view/InputChannel;->openInputChannelPair(Ljava/lang/String;)[Landroid/view/InputChannel;
 HSPLandroid/view/InputChannel;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/view/InputChannel;->toString()Ljava/lang/String;
-PLandroid/view/InputChannel;->transferTo(Landroid/view/InputChannel;)V
-PLandroid/view/InputChannel;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/InputDevice$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InputDevice;
 HSPLandroid/view/InputDevice$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/InputDevice$MotionRange;-><init>(IIFFFFF)V
 HSPLandroid/view/InputDevice$MotionRange;-><init>(IIFFFFFLandroid/view/InputDevice$1;)V
-PLandroid/view/InputDevice$MotionRange;->access$100(Landroid/view/InputDevice$MotionRange;)I
-PLandroid/view/InputDevice$MotionRange;->access$200(Landroid/view/InputDevice$MotionRange;)I
-PLandroid/view/InputDevice$MotionRange;->access$400(Landroid/view/InputDevice$MotionRange;)F
-PLandroid/view/InputDevice$MotionRange;->access$500(Landroid/view/InputDevice$MotionRange;)F
-PLandroid/view/InputDevice$MotionRange;->access$600(Landroid/view/InputDevice$MotionRange;)F
-PLandroid/view/InputDevice$MotionRange;->access$700(Landroid/view/InputDevice$MotionRange;)F
-PLandroid/view/InputDevice$MotionRange;->access$800(Landroid/view/InputDevice$MotionRange;)F
-HSPLandroid/view/InputDevice$MotionRange;->getAxis()I
-HSPLandroid/view/InputDevice$MotionRange;->getSource()I
-HSPLandroid/view/InputDevice;-><init>(IIILjava/lang/String;IILjava/lang/String;ZIILandroid/view/KeyCharacterMap;ZZZ)V
 HSPLandroid/view/InputDevice;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/InputDevice;-><init>(Landroid/os/Parcel;Landroid/view/InputDevice$1;)V
 HSPLandroid/view/InputDevice;->addMotionRange(IIFFFFF)V
 HSPLandroid/view/InputDevice;->getDevice(I)Landroid/view/InputDevice;
 HSPLandroid/view/InputDevice;->getDeviceIds()[I
 HSPLandroid/view/InputDevice;->getGeneration()I
-HSPLandroid/view/InputDevice;->getId()I
-HSPLandroid/view/InputDevice;->getKeyboardType()I
-HSPLandroid/view/InputDevice;->getMotionRanges()Ljava/util/List;
+HSPLandroid/view/InputDevice;->getKeyCharacterMap()Landroid/view/KeyCharacterMap;
 HSPLandroid/view/InputDevice;->getSources()I
-HSPLandroid/view/InputDevice;->getVibrator()Landroid/os/Vibrator;
-HSPLandroid/view/InputDevice;->hasKeys([I)[Z
-HSPLandroid/view/InputDevice;->isExternal()Z
-HSPLandroid/view/InputDevice;->isFullKeyboard()Z
-HSPLandroid/view/InputDevice;->isVirtual()Z
-PLandroid/view/InputDevice;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/InputEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InputEvent;
-PLandroid/view/InputEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/view/InputEvent;-><init>()V
+HSPLandroid/view/InputEvent;-><init>()V
 HSPLandroid/view/InputEvent;->getSequenceNumber()I
-HPLandroid/view/InputEvent;->isFromSource(I)Z
-PLandroid/view/InputEvent;->prepareForReuse()V
+HSPLandroid/view/InputEvent;->isFromSource(I)Z
+HSPLandroid/view/InputEvent;->prepareForReuse()V
 HSPLandroid/view/InputEvent;->recycle()V
 HSPLandroid/view/InputEvent;->recycleIfNeededAfterDispatch()V
 HSPLandroid/view/InputEventCompatProcessor;-><init>(Landroid/content/Context;)V
 HSPLandroid/view/InputEventCompatProcessor;->processInputEventForCompatibility(Landroid/view/InputEvent;)Ljava/util/List;
 HSPLandroid/view/InputEventConsistencyVerifier;->isInstrumentationEnabled()Z
 HSPLandroid/view/InputEventReceiver;-><init>(Landroid/view/InputChannel;Landroid/os/Looper;)V
-HPLandroid/view/InputEventReceiver;->consumeBatchedInputEvents(J)Z
+HSPLandroid/view/InputEventReceiver;->consumeBatchedInputEvents(J)Z
 HSPLandroid/view/InputEventReceiver;->dispatchBatchedInputEventPending()V
 HSPLandroid/view/InputEventReceiver;->dispatchInputEvent(ILandroid/view/InputEvent;)V
-PLandroid/view/InputEventReceiver;->dispose()V
+HSPLandroid/view/InputEventReceiver;->dispose()V
 HSPLandroid/view/InputEventReceiver;->dispose(Z)V
 HSPLandroid/view/InputEventReceiver;->finalize()V
 HSPLandroid/view/InputEventReceiver;->finishInputEvent(Landroid/view/InputEvent;Z)V
-HPLandroid/view/InputEventReceiver;->onBatchedInputEventPending()V
-HPLandroid/view/InputEventSender;-><init>(Landroid/view/InputChannel;Landroid/os/Looper;)V
-HPLandroid/view/InputEventSender;->dispatchInputEventFinished(IZ)V
-HPLandroid/view/InputEventSender;->dispose(Z)V
-HPLandroid/view/InputEventSender;->finalize()V
-HPLandroid/view/InputEventSender;->sendInputEvent(ILandroid/view/InputEvent;)Z
-HSPLandroid/view/InputMonitor$1;-><init>()V
-HSPLandroid/view/InputMonitor$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InputMonitor;
-HSPLandroid/view/InputMonitor$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/view/InputMonitor;-><clinit>()V
-HSPLandroid/view/InputMonitor;-><init>(Landroid/os/Parcel;)V
-PLandroid/view/InputMonitor;-><init>(Landroid/view/InputChannel;Landroid/view/IInputMonitorHost;)V
-HPLandroid/view/InputMonitor;->dispose()V
-HSPLandroid/view/InputMonitor;->getInputChannel()Landroid/view/InputChannel;
-HPLandroid/view/InputMonitor;->pilferPointers()V
-PLandroid/view/InputMonitor;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/view/InputWindowHandle;-><init>(Landroid/view/InputApplicationHandle;I)V
-PLandroid/view/InputWindowHandle;->finalize()V
-PLandroid/view/InputWindowHandle;->setTouchableRegionCrop(Landroid/view/SurfaceControl;)V
+HSPLandroid/view/InputEventSender;-><init>(Landroid/view/InputChannel;Landroid/os/Looper;)V
+HSPLandroid/view/InputEventSender;->dispatchInputEventFinished(IZ)V
+HSPLandroid/view/InputEventSender;->dispose(Z)V
+HSPLandroid/view/InputEventSender;->finalize()V
+HSPLandroid/view/InputEventSender;->sendInputEvent(ILandroid/view/InputEvent;)Z
 HSPLandroid/view/InsetsController;-><init>(Landroid/view/ViewRootImpl;)V
-PLandroid/view/InsetsController;->applyLocalVisibilityOverride()V
+HSPLandroid/view/InsetsController;-><init>(Landroid/view/ViewRootImpl;Ljava/util/function/BiFunction;Landroid/os/Handler;)V
+HSPLandroid/view/InsetsController;->applyLocalVisibilityOverride()V
 HSPLandroid/view/InsetsController;->calculateInsets(ZZLandroid/view/DisplayCutout;Landroid/graphics/Rect;Landroid/graphics/Rect;I)Landroid/view/WindowInsets;
+HSPLandroid/view/InsetsController;->calculateInsets(ZZLandroid/view/DisplayCutout;Landroid/graphics/Rect;Landroid/graphics/Rect;II)Landroid/view/WindowInsets;
+HSPLandroid/view/InsetsController;->calculateVisibleInsets(Landroid/graphics/Rect;I)Landroid/graphics/Rect;
 HSPLandroid/view/InsetsController;->getState()Landroid/view/InsetsState;
 HSPLandroid/view/InsetsController;->onFrameChanged(Landroid/graphics/Rect;)V
 HSPLandroid/view/InsetsController;->onStateChanged(Landroid/view/InsetsState;)Z
+HSPLandroid/view/InsetsController;->sendStateToWindowManager()V
 HSPLandroid/view/InsetsFlags;-><init>()V
-PLandroid/view/InsetsFlags;->convertFlag(III)I
-PLandroid/view/InsetsFlags;->convertNoFlag(III)I
-HPLandroid/view/InsetsFlags;->getAppearance(I)I
 HSPLandroid/view/InsetsSource$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InsetsSource;
 HSPLandroid/view/InsetsSource$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/view/InsetsSource;-><init>(I)V
-HPLandroid/view/InsetsSource;-><init>(Landroid/os/Parcel;)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;
 HSPLandroid/view/InsetsSource;->calculateInsets(Landroid/graphics/Rect;Z)Landroid/graphics/Insets;
-HSPLandroid/view/InsetsSource;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLandroid/view/InsetsSource;->equals(Ljava/lang/Object;)Z
-PLandroid/view/InsetsSource;->getFrame()Landroid/graphics/Rect;
 HSPLandroid/view/InsetsSource;->getType()I
 HSPLandroid/view/InsetsSource;->isVisible()Z
-PLandroid/view/InsetsSource;->setFrame(Landroid/graphics/Rect;)V
-HPLandroid/view/InsetsSource;->setVisible(Z)V
-HPLandroid/view/InsetsSource;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/view/InsetsSourceControl;-><init>(ILandroid/view/SurfaceControl;Landroid/graphics/Point;)V
-HPLandroid/view/InsetsState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InsetsState;
-HPLandroid/view/InsetsState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/view/InsetsState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InsetsState;
+HSPLandroid/view/InsetsState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/InsetsState;-><init>()V
+HSPLandroid/view/InsetsState;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/InsetsState;->calculateInsets(Landroid/graphics/Rect;ZZLandroid/view/DisplayCutout;Landroid/graphics/Rect;Landroid/graphics/Rect;IILandroid/util/SparseIntArray;)Landroid/view/WindowInsets;
 HSPLandroid/view/InsetsState;->calculateInsets(Landroid/graphics/Rect;ZZLandroid/view/DisplayCutout;Landroid/graphics/Rect;Landroid/graphics/Rect;ILandroid/util/SparseIntArray;)Landroid/view/WindowInsets;
-HPLandroid/view/InsetsState;->containsType([II)Z
-HSPLandroid/view/InsetsState;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+HSPLandroid/view/InsetsState;->calculateVisibleInsets(Landroid/graphics/Rect;Landroid/graphics/Rect;I)Landroid/graphics/Rect;
 HSPLandroid/view/InsetsState;->equals(Ljava/lang/Object;)Z
-HSPLandroid/view/InsetsState;->getDefaultVisibility(I)Z
 HSPLandroid/view/InsetsState;->getSource(I)Landroid/view/InsetsSource;
 HSPLandroid/view/InsetsState;->processSource(Landroid/view/InsetsSource;Landroid/graphics/Rect;Z[Landroid/graphics/Insets;Landroid/util/SparseIntArray;[Z)V
 HSPLandroid/view/InsetsState;->processSourceAsPublicType(Landroid/view/InsetsSource;[Landroid/graphics/Insets;Landroid/util/SparseIntArray;[ZLandroid/graphics/Insets;I)V
 HSPLandroid/view/InsetsState;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/view/InsetsState;->set(Landroid/view/InsetsState;)V
 HSPLandroid/view/InsetsState;->set(Landroid/view/InsetsState;Z)V
-HSPLandroid/view/InsetsState;->setDisplayFrame(Landroid/graphics/Rect;)V
-HPLandroid/view/InsetsState;->setSourceVisible(IZ)V
 HSPLandroid/view/InsetsState;->toPublicType(I)I
-HSPLandroid/view/InsetsState;->typeToString(I)Ljava/lang/String;
-HPLandroid/view/InsetsState;->writeToParcel(Landroid/os/Parcel;I)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;
-HSPLandroid/view/KeyCharacterMap;-><init>(J)V
 HSPLandroid/view/KeyCharacterMap;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/view/KeyCharacterMap;->deviceHasKey(I)Z
-HSPLandroid/view/KeyCharacterMap;->finalize()V
-HPLandroid/view/KeyCharacterMap;->get(II)I
-HPLandroid/view/KeyCharacterMap;->load(I)Landroid/view/KeyCharacterMap;
-PLandroid/view/KeyCharacterMap;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/KeyEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/KeyEvent;
-PLandroid/view/KeyEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/view/KeyCharacterMap;-><init>(Landroid/os/Parcel;Landroid/view/KeyCharacterMap$1;)V
+HSPLandroid/view/KeyCharacterMap;->get(II)I
+HSPLandroid/view/KeyCharacterMap;->load(I)Landroid/view/KeyCharacterMap;
 HSPLandroid/view/KeyEvent$DispatcherState;-><init>()V
-HPLandroid/view/KeyEvent$DispatcherState;->handleUpEvent(Landroid/view/KeyEvent;)V
-HPLandroid/view/KeyEvent$DispatcherState;->isTracking(Landroid/view/KeyEvent;)Z
+HSPLandroid/view/KeyEvent$DispatcherState;->handleUpEvent(Landroid/view/KeyEvent;)V
 HSPLandroid/view/KeyEvent$DispatcherState;->reset()V
-HPLandroid/view/KeyEvent$DispatcherState;->reset(Ljava/lang/Object;)V
-HPLandroid/view/KeyEvent$DispatcherState;->startTracking(Landroid/view/KeyEvent;Ljava/lang/Object;)V
-PLandroid/view/KeyEvent;-><init>()V
-HPLandroid/view/KeyEvent;-><init>(JJIIIIIII)V
-HPLandroid/view/KeyEvent;-><init>(JJIIIIIIII)V
-PLandroid/view/KeyEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/view/KeyEvent;->actionToString(I)Ljava/lang/String;
-HPLandroid/view/KeyEvent;->cancel()V
-PLandroid/view/KeyEvent;->createFromParcelBody(Landroid/os/Parcel;)Landroid/view/KeyEvent;
-HPLandroid/view/KeyEvent;->dispatch(Landroid/view/KeyEvent$Callback;Landroid/view/KeyEvent$DispatcherState;Ljava/lang/Object;)Z
-PLandroid/view/KeyEvent;->getAction()I
-HPLandroid/view/KeyEvent;->getDeviceId()I
-PLandroid/view/KeyEvent;->getDisplayId()I
-PLandroid/view/KeyEvent;->getDownTime()J
-PLandroid/view/KeyEvent;->getEventTime()J
-HPLandroid/view/KeyEvent;->getEventTimeNano()J
-PLandroid/view/KeyEvent;->getFlags()I
-PLandroid/view/KeyEvent;->getKeyCode()I
-PLandroid/view/KeyEvent;->getMetaState()I
-PLandroid/view/KeyEvent;->getRepeatCount()I
-HPLandroid/view/KeyEvent;->getScanCode()I
-HPLandroid/view/KeyEvent;->getSource()I
-HPLandroid/view/KeyEvent;->getUnicodeChar()I
-HPLandroid/view/KeyEvent;->getUnicodeChar(I)I
-HPLandroid/view/KeyEvent;->hasModifiers(I)Z
-PLandroid/view/KeyEvent;->isAltPressed()Z
-PLandroid/view/KeyEvent;->isCanceled()Z
-PLandroid/view/KeyEvent;->isCtrlPressed()Z
-PLandroid/view/KeyEvent;->isLongPress()Z
-PLandroid/view/KeyEvent;->isMetaKey(I)Z
-PLandroid/view/KeyEvent;->isMetaPressed()Z
-PLandroid/view/KeyEvent;->isModifierKey(I)Z
-PLandroid/view/KeyEvent;->isShiftPressed()Z
-HPLandroid/view/KeyEvent;->isSystem()Z
-HPLandroid/view/KeyEvent;->isSystemKey(I)Z
-PLandroid/view/KeyEvent;->isWakeKey()Z
-HPLandroid/view/KeyEvent;->isWakeKey(I)Z
-PLandroid/view/KeyEvent;->keyCodeToString(I)Ljava/lang/String;
-HPLandroid/view/KeyEvent;->metaStateFilterDirectionalModifiers(IIIII)I
-HPLandroid/view/KeyEvent;->metaStateHasModifiers(II)Z
-PLandroid/view/KeyEvent;->metaStateToString(I)Ljava/lang/String;
-HPLandroid/view/KeyEvent;->normalizeMetaState(I)I
-PLandroid/view/KeyEvent;->obtain()Landroid/view/KeyEvent;
-PLandroid/view/KeyEvent;->obtain(JJIIIIIIIIILjava/lang/String;)Landroid/view/KeyEvent;
-PLandroid/view/KeyEvent;->recycle()V
-PLandroid/view/KeyEvent;->recycleIfNeededAfterDispatch()V
-HPLandroid/view/KeyEvent;->setDisplayId(I)V
-HPLandroid/view/KeyEvent;->startTracking()V
-PLandroid/view/KeyEvent;->toString()Ljava/lang/String;
-HPLandroid/view/KeyEvent;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/KeyEvent$DispatcherState;->reset(Ljava/lang/Object;)V
+HSPLandroid/view/KeyEvent$DispatcherState;->startTracking(Landroid/view/KeyEvent;Ljava/lang/Object;)V
+HSPLandroid/view/KeyEvent;-><init>()V
+HSPLandroid/view/KeyEvent;->access$076(Landroid/view/KeyEvent;I)I
+HSPLandroid/view/KeyEvent;->dispatch(Landroid/view/KeyEvent$Callback;Landroid/view/KeyEvent$DispatcherState;Ljava/lang/Object;)Z
+HSPLandroid/view/KeyEvent;->getAction()I
+HSPLandroid/view/KeyEvent;->getDeviceId()I
+HSPLandroid/view/KeyEvent;->getEventTimeNano()J
+HSPLandroid/view/KeyEvent;->getFlags()I
+HSPLandroid/view/KeyEvent;->getKeyCharacterMap()Landroid/view/KeyCharacterMap;
+HSPLandroid/view/KeyEvent;->getKeyCode()I
+HSPLandroid/view/KeyEvent;->getMetaState()I
+HSPLandroid/view/KeyEvent;->getRepeatCount()I
+HSPLandroid/view/KeyEvent;->getUnicodeChar()I
+HSPLandroid/view/KeyEvent;->getUnicodeChar(I)I
+HSPLandroid/view/KeyEvent;->isCanceled()Z
+HSPLandroid/view/KeyEvent;->isLongPress()Z
+HSPLandroid/view/KeyEvent;->isModifierKey(I)Z
+HSPLandroid/view/KeyEvent;->isTracking()Z
+HSPLandroid/view/KeyEvent;->normalizeMetaState(I)I
+HSPLandroid/view/KeyEvent;->obtain()Landroid/view/KeyEvent;
+HSPLandroid/view/KeyEvent;->obtain(JJIIIIIIIII[BLjava/lang/String;)Landroid/view/KeyEvent;
+HSPLandroid/view/KeyEvent;->recycleIfNeededAfterDispatch()V
+HSPLandroid/view/KeyEvent;->startTracking()V
+HSPLandroid/view/LayoutInflater$FactoryMerger;-><init>(Landroid/view/LayoutInflater$Factory;Landroid/view/LayoutInflater$Factory2;Landroid/view/LayoutInflater$Factory;Landroid/view/LayoutInflater$Factory2;)V
 HSPLandroid/view/LayoutInflater$FactoryMerger;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
 HSPLandroid/view/LayoutInflater;-><init>(Landroid/content/Context;)V
 HSPLandroid/view/LayoutInflater;-><init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V
 HSPLandroid/view/LayoutInflater;->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;
 HSPLandroid/view/LayoutInflater;->createView(Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
-PLandroid/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;)Landroid/view/View;
 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;
-HPLandroid/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;
@@ -24534,658 +12043,318 @@
 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
-PLandroid/view/LayoutInflater;->rInflateChildren(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;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;
 HSPLandroid/view/LayoutInflater;->tryInflatePrecompiled(ILandroid/content/res/Resources;Landroid/view/ViewGroup;Z)Landroid/view/View;
-PLandroid/view/LayoutInflater;->verifyClassLoader(Ljava/lang/reflect/Constructor;)Z
+HSPLandroid/view/LayoutInflater;->verifyClassLoader(Ljava/lang/reflect/Constructor;)Z
 HSPLandroid/view/MenuInflater;-><init>(Landroid/content/Context;)V
-HPLandroid/view/MotionEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/MotionEvent;
-HPLandroid/view/MotionEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/view/MotionEvent$PointerCoords;-><init>()V
-HPLandroid/view/MotionEvent$PointerProperties;-><init>()V
-HPLandroid/view/MotionEvent$PointerProperties;->access$000(Landroid/view/MotionEvent$PointerProperties;Landroid/view/MotionEvent$PointerProperties;)Z
-HPLandroid/view/MotionEvent$PointerProperties;->clear()V
-HPLandroid/view/MotionEvent$PointerProperties;->equals(Landroid/view/MotionEvent$PointerProperties;)Z
-PLandroid/view/MotionEvent;-><init>()V
-HPLandroid/view/MotionEvent;->addBatch(Landroid/view/MotionEvent;)Z
-HPLandroid/view/MotionEvent;->copy()Landroid/view/MotionEvent;
-HPLandroid/view/MotionEvent;->createFromParcelBody(Landroid/os/Parcel;)Landroid/view/MotionEvent;
+HSPLandroid/view/MotionEvent$PointerCoords;-><init>()V
+HSPLandroid/view/MotionEvent$PointerCoords;->clear()V
+HSPLandroid/view/MotionEvent$PointerCoords;->createArray(I)[Landroid/view/MotionEvent$PointerCoords;
+HSPLandroid/view/MotionEvent$PointerProperties;-><init>()V
+HSPLandroid/view/MotionEvent$PointerProperties;->clear()V
+HSPLandroid/view/MotionEvent$PointerProperties;->createArray(I)[Landroid/view/MotionEvent$PointerProperties;
+HSPLandroid/view/MotionEvent;-><init>()V
 HSPLandroid/view/MotionEvent;->ensureSharedTempPointerCapacity(I)V
-HPLandroid/view/MotionEvent;->finalize()V
+HSPLandroid/view/MotionEvent;->finalize()V
 HSPLandroid/view/MotionEvent;->findPointerIndex(I)I
 HSPLandroid/view/MotionEvent;->getAction()I
 HSPLandroid/view/MotionEvent;->getActionIndex()I
 HSPLandroid/view/MotionEvent;->getActionMasked()I
-HPLandroid/view/MotionEvent;->getAxisValue(I)F
-HPLandroid/view/MotionEvent;->getButtonState()I
-HPLandroid/view/MotionEvent;->getClassification()I
-HPLandroid/view/MotionEvent;->getDeviceId()I
+HSPLandroid/view/MotionEvent;->getButtonState()I
+HSPLandroid/view/MotionEvent;->getClassification()I
 HSPLandroid/view/MotionEvent;->getDownTime()J
-HPLandroid/view/MotionEvent;->getEdgeFlags()I
-PLandroid/view/MotionEvent;->getEventTime()J
+HSPLandroid/view/MotionEvent;->getEventTime()J
 HSPLandroid/view/MotionEvent;->getEventTimeNano()J
-HPLandroid/view/MotionEvent;->getFlags()I
-PLandroid/view/MotionEvent;->getHistoricalEventTime(I)J
-HPLandroid/view/MotionEvent;->getHistoricalPointerCoords(IILandroid/view/MotionEvent$PointerCoords;)V
-HPLandroid/view/MotionEvent;->getHistoricalPressure(I)F
-HPLandroid/view/MotionEvent;->getHistoricalPressure(II)F
-HPLandroid/view/MotionEvent;->getHistoricalTouchMajor(I)F
-HPLandroid/view/MotionEvent;->getHistoricalX(I)F
-PLandroid/view/MotionEvent;->getHistoricalX(II)F
-HPLandroid/view/MotionEvent;->getHistoricalY(I)F
-PLandroid/view/MotionEvent;->getHistoricalY(II)F
-PLandroid/view/MotionEvent;->getHistorySize()I
-HPLandroid/view/MotionEvent;->getMetaState()I
-HPLandroid/view/MotionEvent;->getOrientation()F
+HSPLandroid/view/MotionEvent;->getFlags()I
+HSPLandroid/view/MotionEvent;->getHistoricalEventTime(I)J
+HSPLandroid/view/MotionEvent;->getHistoricalEventTimeNano(I)J
+HSPLandroid/view/MotionEvent;->getHistoricalX(II)F
+HSPLandroid/view/MotionEvent;->getHistoricalY(II)F
+HSPLandroid/view/MotionEvent;->getHistorySize()I
 HSPLandroid/view/MotionEvent;->getPointerCount()I
 HSPLandroid/view/MotionEvent;->getPointerId(I)I
-HPLandroid/view/MotionEvent;->getPointerProperties(ILandroid/view/MotionEvent$PointerProperties;)V
-HPLandroid/view/MotionEvent;->getPressure()F
-HPLandroid/view/MotionEvent;->getPressure(I)F
-PLandroid/view/MotionEvent;->getRawX()F
-PLandroid/view/MotionEvent;->getRawY()F
+HSPLandroid/view/MotionEvent;->getPointerIdBits()I
+HSPLandroid/view/MotionEvent;->getRawX()F
+HSPLandroid/view/MotionEvent;->getRawY()F
 HSPLandroid/view/MotionEvent;->getSource()I
-HPLandroid/view/MotionEvent;->getToolType(I)I
-HPLandroid/view/MotionEvent;->getTouchMajor()F
-HPLandroid/view/MotionEvent;->getTouchMinor()F
+HSPLandroid/view/MotionEvent;->getToolType(I)I
 HSPLandroid/view/MotionEvent;->getX()F
 HSPLandroid/view/MotionEvent;->getX(I)F
-HPLandroid/view/MotionEvent;->getXPrecision()F
 HSPLandroid/view/MotionEvent;->getY()F
 HSPLandroid/view/MotionEvent;->getY(I)F
-HPLandroid/view/MotionEvent;->getYPrecision()F
 HSPLandroid/view/MotionEvent;->initialize(IIIIIIIIIFFFFJJI[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;)Z
-HPLandroid/view/MotionEvent;->isButtonPressed(I)Z
-PLandroid/view/MotionEvent;->isTouchEvent()Z
-HPLandroid/view/MotionEvent;->isWithinBoundsNoHistory(FFFF)Z
+HSPLandroid/view/MotionEvent;->isTouchEvent()Z
 HSPLandroid/view/MotionEvent;->obtain()Landroid/view/MotionEvent;
-HPLandroid/view/MotionEvent;->obtain(JJIFFFFIFFII)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;
-HPLandroid/view/MotionEvent;->obtain(JJII[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;IIFFIIII)Landroid/view/MotionEvent;
-HPLandroid/view/MotionEvent;->obtain(JJII[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;IIFFIIIII)Landroid/view/MotionEvent;
-HPLandroid/view/MotionEvent;->obtain(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;
-HPLandroid/view/MotionEvent;->obtainNoHistory(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;
-HPLandroid/view/MotionEvent;->offsetLocation(FF)V
+HSPLandroid/view/MotionEvent;->obtain(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;
+HSPLandroid/view/MotionEvent;->offsetLocation(FF)V
 HSPLandroid/view/MotionEvent;->recycle()V
 HSPLandroid/view/MotionEvent;->setAction(I)V
 HSPLandroid/view/MotionEvent;->setCursorPosition(FF)V
-HPLandroid/view/MotionEvent;->setEdgeFlags(I)V
-HPLandroid/view/MotionEvent;->setSource(I)V
-HPLandroid/view/MotionEvent;->split(I)Landroid/view/MotionEvent;
-HPLandroid/view/MotionEvent;->transform(Landroid/graphics/Matrix;)V
 HSPLandroid/view/MotionEvent;->updateCursorPosition()V
-HPLandroid/view/MotionEvent;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/view/OrientationEventListener$SensorEventListenerImpl;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
-HSPLandroid/view/OrientationEventListener$SensorEventListenerImpl;->onSensorChanged(Landroid/hardware/SensorEvent;)V
-HSPLandroid/view/OrientationEventListener;-><init>(Landroid/content/Context;)V
-HSPLandroid/view/OrientationEventListener;-><init>(Landroid/content/Context;I)V
-HSPLandroid/view/OrientationEventListener;->access$000(Landroid/view/OrientationEventListener;)Landroid/view/OrientationListener;
-HSPLandroid/view/OrientationEventListener;->access$100(Landroid/view/OrientationEventListener;)I
-HSPLandroid/view/OrientationEventListener;->access$102(Landroid/view/OrientationEventListener;I)I
-HPLandroid/view/OrientationEventListener;->disable()V
-HSPLandroid/view/OrientationEventListener;->enable()V
-HSPLandroid/view/PointerIcon$2;->onDisplayChanged(I)V
-HSPLandroid/view/PointerIcon;->access$200()Landroid/util/SparseArray;
+HSPLandroid/view/PointerIcon$2;-><init>()V
+HSPLandroid/view/PointerIcon;-><init>(I)V
 HSPLandroid/view/PointerIcon;->getSystemIcon(Landroid/content/Context;I)Landroid/view/PointerIcon;
 HSPLandroid/view/PointerIcon;->getSystemIconTypeIndex(I)I
-HSPLandroid/view/PointerIcon;->setUseLargeIcons(Z)V
-PLandroid/view/RemoteAnimationAdapter$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/RemoteAnimationAdapter;
-PLandroid/view/RemoteAnimationAdapter$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/view/RemoteAnimationAdapter;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/view/RemoteAnimationAdapter;-><init>(Landroid/view/IRemoteAnimationRunner;JJ)V
-PLandroid/view/RemoteAnimationAdapter;->getCallingPid()I
-PLandroid/view/RemoteAnimationAdapter;->getCallingUid()I
-PLandroid/view/RemoteAnimationAdapter;->getDuration()J
-PLandroid/view/RemoteAnimationAdapter;->getRunner()Landroid/view/IRemoteAnimationRunner;
-PLandroid/view/RemoteAnimationAdapter;->getStatusBarTransitionDelay()J
-PLandroid/view/RemoteAnimationAdapter;->setCallingPidUid(II)V
-HSPLandroid/view/RemoteAnimationAdapter;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/RemoteAnimationDefinition$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/RemoteAnimationDefinition;
-PLandroid/view/RemoteAnimationDefinition$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/view/RemoteAnimationDefinition$RemoteAnimationAdapterEntry$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/RemoteAnimationDefinition$RemoteAnimationAdapterEntry;
-PLandroid/view/RemoteAnimationDefinition$RemoteAnimationAdapterEntry$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/view/RemoteAnimationDefinition$RemoteAnimationAdapterEntry;-><init>(Landroid/os/Parcel;)V
-PLandroid/view/RemoteAnimationDefinition$RemoteAnimationAdapterEntry;-><init>(Landroid/os/Parcel;Landroid/view/RemoteAnimationDefinition$1;)V
-HSPLandroid/view/RemoteAnimationDefinition$RemoteAnimationAdapterEntry;-><init>(Landroid/view/RemoteAnimationAdapter;I)V
-PLandroid/view/RemoteAnimationDefinition$RemoteAnimationAdapterEntry;->access$000()Landroid/os/Parcelable$Creator;
-HSPLandroid/view/RemoteAnimationDefinition$RemoteAnimationAdapterEntry;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/view/RemoteAnimationDefinition;-><init>()V
-PLandroid/view/RemoteAnimationDefinition;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/view/RemoteAnimationDefinition;->addRemoteAnimation(IILandroid/view/RemoteAnimationAdapter;)V
-PLandroid/view/RemoteAnimationDefinition;->getAdapter(ILandroid/util/ArraySet;)Landroid/view/RemoteAnimationAdapter;
-PLandroid/view/RemoteAnimationDefinition;->hasTransition(ILandroid/util/ArraySet;)Z
-PLandroid/view/RemoteAnimationDefinition;->setCallingPidUid(II)V
-HSPLandroid/view/RemoteAnimationDefinition;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/RemoteAnimationTarget$1;-><init>()V
-HPLandroid/view/RemoteAnimationTarget$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/RemoteAnimationTarget;
-HPLandroid/view/RemoteAnimationTarget$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/view/RemoteAnimationTarget$1;->newArray(I)[Landroid/view/RemoteAnimationTarget;
-HPLandroid/view/RemoteAnimationTarget$1;->newArray(I)[Ljava/lang/Object;
-PLandroid/view/RemoteAnimationTarget;-><clinit>()V
-PLandroid/view/RemoteAnimationTarget;-><init>(IILandroid/view/SurfaceControl;ZLandroid/graphics/Rect;Landroid/graphics/Rect;ILandroid/graphics/Point;Landroid/graphics/Rect;Landroid/app/WindowConfiguration;ZLandroid/view/SurfaceControl;Landroid/graphics/Rect;)V
-HPLandroid/view/RemoteAnimationTarget;-><init>(Landroid/os/Parcel;)V
-HPLandroid/view/RemoteAnimationTarget;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLandroid/view/RemoteAnimationTarget;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/RenderNodeAnimator$DelayedAnimationHelper;->addDelayedAnimation(Landroid/view/RenderNodeAnimator;)V
-HPLandroid/view/RenderNodeAnimator$DelayedAnimationHelper;->run()V
-HPLandroid/view/RenderNodeAnimator$DelayedAnimationHelper;->scheduleCallback()V
-HPLandroid/view/RenderNodeAnimator;-><init>(IF)V
+HSPLandroid/view/PointerIcon;->registerDisplayListener(Landroid/content/Context;)V
 HSPLandroid/view/RenderNodeAnimator;-><init>(Landroid/graphics/CanvasProperty;F)V
 HSPLandroid/view/RenderNodeAnimator;-><init>(Landroid/graphics/CanvasProperty;IF)V
-HPLandroid/view/RenderNodeAnimator;->access$000(Landroid/view/RenderNodeAnimator;J)Z
 HSPLandroid/view/RenderNodeAnimator;->applyInterpolator()V
 HSPLandroid/view/RenderNodeAnimator;->callOnFinished(Landroid/view/RenderNodeAnimator;)V
-HPLandroid/view/RenderNodeAnimator;->cancel()V
 HSPLandroid/view/RenderNodeAnimator;->checkMutable()V
-HPLandroid/view/RenderNodeAnimator;->cloneListeners()Ljava/util/ArrayList;
-HPLandroid/view/RenderNodeAnimator;->doStart()V
-HPLandroid/view/RenderNodeAnimator;->end()V
+HSPLandroid/view/RenderNodeAnimator;->cloneListeners()Ljava/util/ArrayList;
+HSPLandroid/view/RenderNodeAnimator;->doStart()V
+HSPLandroid/view/RenderNodeAnimator;->end()V
 HSPLandroid/view/RenderNodeAnimator;->getNativeAnimator()J
-HPLandroid/view/RenderNodeAnimator;->init(J)V
+HSPLandroid/view/RenderNodeAnimator;->init(J)V
+HSPLandroid/view/RenderNodeAnimator;->isNativeInterpolator(Landroid/animation/TimeInterpolator;)Z
 HSPLandroid/view/RenderNodeAnimator;->isRunning()Z
-HPLandroid/view/RenderNodeAnimator;->moveToRunningState()V
-HPLandroid/view/RenderNodeAnimator;->notifyStartListeners()V
+HSPLandroid/view/RenderNodeAnimator;->moveToRunningState()V
+HSPLandroid/view/RenderNodeAnimator;->notifyStartListeners()V
 HSPLandroid/view/RenderNodeAnimator;->onFinished()V
-HPLandroid/view/RenderNodeAnimator;->processDelayed(J)Z
-HPLandroid/view/RenderNodeAnimator;->setDuration(J)Landroid/animation/Animator;
+HSPLandroid/view/RenderNodeAnimator;->releaseNativePtr()V
 HSPLandroid/view/RenderNodeAnimator;->setDuration(J)Landroid/view/RenderNodeAnimator;
-HPLandroid/view/RenderNodeAnimator;->setInterpolator(Landroid/animation/TimeInterpolator;)V
+HSPLandroid/view/RenderNodeAnimator;->setInterpolator(Landroid/animation/TimeInterpolator;)V
 HSPLandroid/view/RenderNodeAnimator;->setStartDelay(J)V
+HSPLandroid/view/RenderNodeAnimator;->setStartValue(F)V
 HSPLandroid/view/RenderNodeAnimator;->setTarget(Landroid/graphics/RecordingCanvas;)V
-HPLandroid/view/RenderNodeAnimator;->setTarget(Landroid/graphics/RenderNode;)V
-HPLandroid/view/RenderNodeAnimator;->setTarget(Landroid/view/View;)V
+HSPLandroid/view/RenderNodeAnimator;->setTarget(Landroid/graphics/RenderNode;)V
 HSPLandroid/view/RenderNodeAnimator;->start()V
 HSPLandroid/view/RenderNodeAnimatorSetHelper;->createNativeInterpolator(Landroid/animation/TimeInterpolator;J)J
-HPLandroid/view/ScaleGestureDetector$1;->onDoubleTap(Landroid/view/MotionEvent;)Z
-HPLandroid/view/ScaleGestureDetector$SimpleOnScaleGestureListener;-><init>()V
-HPLandroid/view/ScaleGestureDetector$SimpleOnScaleGestureListener;->onScale(Landroid/view/ScaleGestureDetector;)Z
-HPLandroid/view/ScaleGestureDetector$SimpleOnScaleGestureListener;->onScaleEnd(Landroid/view/ScaleGestureDetector;)V
-HSPLandroid/view/ScaleGestureDetector;-><init>(Landroid/content/Context;Landroid/view/ScaleGestureDetector$OnScaleGestureListener;)V
-HSPLandroid/view/ScaleGestureDetector;-><init>(Landroid/content/Context;Landroid/view/ScaleGestureDetector$OnScaleGestureListener;Landroid/os/Handler;)V
-HPLandroid/view/ScaleGestureDetector;->access$002(Landroid/view/ScaleGestureDetector;F)F
-HPLandroid/view/ScaleGestureDetector;->access$102(Landroid/view/ScaleGestureDetector;F)F
-HPLandroid/view/ScaleGestureDetector;->access$202(Landroid/view/ScaleGestureDetector;I)I
-HPLandroid/view/ScaleGestureDetector;->getCurrentSpan()F
-HPLandroid/view/ScaleGestureDetector;->getCurrentSpanX()F
-HPLandroid/view/ScaleGestureDetector;->getFocusX()F
-HPLandroid/view/ScaleGestureDetector;->getFocusY()F
-HPLandroid/view/ScaleGestureDetector;->getScaleFactor()F
-HPLandroid/view/ScaleGestureDetector;->inAnchoredScaleMode()Z
-HPLandroid/view/ScaleGestureDetector;->onTouchEvent(Landroid/view/MotionEvent;)Z
-HSPLandroid/view/ScaleGestureDetector;->setQuickScaleEnabled(Z)V
-HSPLandroid/view/ScaleGestureDetector;->setStylusScaleEnabled(Z)V
-HSPLandroid/view/Surface$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/Surface;
-HSPLandroid/view/Surface$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/view/Surface$CompatibleCanvas;-><init>(Landroid/view/Surface;)V
-PLandroid/view/Surface$CompatibleCanvas;-><init>(Landroid/view/Surface;Landroid/view/Surface$1;)V
+HSPLandroid/view/RenderNodeAnimatorSetHelper;->getTarget(Landroid/graphics/RecordingCanvas;)Landroid/graphics/RenderNode;
+HSPLandroid/view/Surface$CompatibleCanvas;-><init>(Landroid/view/Surface;)V
+HSPLandroid/view/Surface$CompatibleCanvas;-><init>(Landroid/view/Surface;Landroid/view/Surface$1;)V
 HSPLandroid/view/Surface;-><init>()V
-PLandroid/view/Surface;-><init>(Landroid/graphics/SurfaceTexture;)V
-HPLandroid/view/Surface;->attachAndQueueBufferWithColorSpace(Landroid/graphics/GraphicBuffer;Landroid/graphics/ColorSpace;)V
 HSPLandroid/view/Surface;->checkNotReleasedLocked()V
 HSPLandroid/view/Surface;->copyFrom(Landroid/view/SurfaceControl;)V
-PLandroid/view/Surface;->destroy()V
 HSPLandroid/view/Surface;->finalize()V
-HPLandroid/view/Surface;->forceScopedDisconnect()V
 HSPLandroid/view/Surface;->getGenerationId()I
 HSPLandroid/view/Surface;->getNextFrameNumber()J
 HSPLandroid/view/Surface;->isValid()Z
-PLandroid/view/Surface;->lockCanvas(Landroid/graphics/Rect;)Landroid/graphics/Canvas;
-HSPLandroid/view/Surface;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/view/Surface;->release()V
-HSPLandroid/view/Surface;->rotationToString(I)Ljava/lang/String;
 HSPLandroid/view/Surface;->setNativeObjectLocked(J)V
-HSPLandroid/view/Surface;->toString()Ljava/lang/String;
-PLandroid/view/Surface;->unlockCanvasAndPost(Landroid/graphics/Canvas;)V
-PLandroid/view/Surface;->unlockSwCanvasAndPost(Landroid/graphics/Canvas;)V
-HPLandroid/view/SurfaceControl$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/SurfaceControl;
-HPLandroid/view/SurfaceControl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/SurfaceControl$Builder;-><init>(Landroid/view/SurfaceSession;)V
 HSPLandroid/view/SurfaceControl$Builder;->build()Landroid/view/SurfaceControl;
-PLandroid/view/SurfaceControl$Builder;->isColorLayerSet()Z
-PLandroid/view/SurfaceControl$Builder;->isContainerLayerSet()Z
-PLandroid/view/SurfaceControl$Builder;->setBufferSize(II)Landroid/view/SurfaceControl$Builder;
-PLandroid/view/SurfaceControl$Builder;->setColorLayer()Landroid/view/SurfaceControl$Builder;
+HSPLandroid/view/SurfaceControl$Builder;->isColorLayerSet()Z
+HSPLandroid/view/SurfaceControl$Builder;->isContainerLayerSet()Z
+HSPLandroid/view/SurfaceControl$Builder;->setBufferSize(II)Landroid/view/SurfaceControl$Builder;
+HSPLandroid/view/SurfaceControl$Builder;->setColorLayer()Landroid/view/SurfaceControl$Builder;
 HSPLandroid/view/SurfaceControl$Builder;->setContainerLayer()Landroid/view/SurfaceControl$Builder;
-PLandroid/view/SurfaceControl$Builder;->setFlags(I)Landroid/view/SurfaceControl$Builder;
+HSPLandroid/view/SurfaceControl$Builder;->setFlags(I)Landroid/view/SurfaceControl$Builder;
 HSPLandroid/view/SurfaceControl$Builder;->setFlags(II)Landroid/view/SurfaceControl$Builder;
-PLandroid/view/SurfaceControl$Builder;->setFormat(I)Landroid/view/SurfaceControl$Builder;
-PLandroid/view/SurfaceControl$Builder;->setMetadata(II)Landroid/view/SurfaceControl$Builder;
+HSPLandroid/view/SurfaceControl$Builder;->setFormat(I)Landroid/view/SurfaceControl$Builder;
 HSPLandroid/view/SurfaceControl$Builder;->setName(Ljava/lang/String;)Landroid/view/SurfaceControl$Builder;
 HSPLandroid/view/SurfaceControl$Builder;->setOpaque(Z)Landroid/view/SurfaceControl$Builder;
 HSPLandroid/view/SurfaceControl$Builder;->setParent(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Builder;
-PLandroid/view/SurfaceControl$Builder;->setSecure(Z)Landroid/view/SurfaceControl$Builder;
 HSPLandroid/view/SurfaceControl$Builder;->unsetBufferSize()V
-PLandroid/view/SurfaceControl$CieXyz;-><init>()V
-HSPLandroid/view/SurfaceControl$DesiredDisplayConfigSpecs;-><init>(IFF)V
-PLandroid/view/SurfaceControl$DisplayPrimaries;-><init>()V
-HSPLandroid/view/SurfaceControl$PhysicalDisplayInfo;-><init>()V
-PLandroid/view/SurfaceControl$PhysicalDisplayInfo;->toString()Ljava/lang/String;
-PLandroid/view/SurfaceControl$ScreenshotGraphicBuffer;-><init>(Landroid/graphics/GraphicBuffer;Landroid/graphics/ColorSpace;Z)V
-PLandroid/view/SurfaceControl$ScreenshotGraphicBuffer;->containsSecureLayers()Z
-HPLandroid/view/SurfaceControl$ScreenshotGraphicBuffer;->createFromNative(IIIIJIZ)Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;
-PLandroid/view/SurfaceControl$ScreenshotGraphicBuffer;->getColorSpace()Landroid/graphics/ColorSpace;
-PLandroid/view/SurfaceControl$ScreenshotGraphicBuffer;->getGraphicBuffer()Landroid/graphics/GraphicBuffer;
-PLandroid/view/SurfaceControl$Transaction$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/SurfaceControl$Transaction;-><init>()V
-HPLandroid/view/SurfaceControl$Transaction;-><init>(Landroid/os/Parcel;)V
-HPLandroid/view/SurfaceControl$Transaction;-><init>(Landroid/os/Parcel;Landroid/view/SurfaceControl$1;)V
 HSPLandroid/view/SurfaceControl$Transaction;->apply()V
 HSPLandroid/view/SurfaceControl$Transaction;->apply(Z)V
 HSPLandroid/view/SurfaceControl$Transaction;->applyResizedSurfaces()V
-PLandroid/view/SurfaceControl$Transaction;->deferTransactionUntil(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;J)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction;->deferTransactionUntilSurface(Landroid/view/SurfaceControl;Landroid/view/Surface;J)Landroid/view/SurfaceControl$Transaction;
-PLandroid/view/SurfaceControl$Transaction;->detachChildren(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction;->hide(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
-HSPLandroid/view/SurfaceControl$Transaction;->merge(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction;->readFromParcel(Landroid/os/Parcel;)V
-HPLandroid/view/SurfaceControl$Transaction;->remove(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction;->reparent(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction;->setAlpha(Landroid/view/SurfaceControl;F)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction;->setAnimationTransaction()Landroid/view/SurfaceControl$Transaction;
-PLandroid/view/SurfaceControl$Transaction;->setBufferSize(Landroid/view/SurfaceControl;II)Landroid/view/SurfaceControl$Transaction;
-PLandroid/view/SurfaceControl$Transaction;->setColor(Landroid/view/SurfaceControl;[F)Landroid/view/SurfaceControl$Transaction;
-PLandroid/view/SurfaceControl$Transaction;->setColorSpaceAgnostic(Landroid/view/SurfaceControl;Z)Landroid/view/SurfaceControl$Transaction;
-PLandroid/view/SurfaceControl$Transaction;->setCornerRadius(Landroid/view/SurfaceControl;F)Landroid/view/SurfaceControl$Transaction;
-HSPLandroid/view/SurfaceControl$Transaction;->setDisplayLayerStack(Landroid/os/IBinder;I)Landroid/view/SurfaceControl$Transaction;
-HSPLandroid/view/SurfaceControl$Transaction;->setDisplayProjection(Landroid/os/IBinder;ILandroid/graphics/Rect;Landroid/graphics/Rect;)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction;->setEarlyWakeup()Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction;->setInputWindowInfo(Landroid/view/SurfaceControl;Landroid/view/InputWindowHandle;)Landroid/view/SurfaceControl$Transaction;
+HSPLandroid/view/SurfaceControl$Transaction;->checkPreconditions(Landroid/view/SurfaceControl;)V
+HSPLandroid/view/SurfaceControl$Transaction;->hide(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
+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;->setCornerRadius(Landroid/view/SurfaceControl;F)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->setLayer(Landroid/view/SurfaceControl;I)Landroid/view/SurfaceControl$Transaction;
-HSPLandroid/view/SurfaceControl$Transaction;->setLayerStack(Landroid/view/SurfaceControl;I)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction;->setMatrix(Landroid/view/SurfaceControl;FFFF)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction;->setMatrix(Landroid/view/SurfaceControl;Landroid/graphics/Matrix;[F)Landroid/view/SurfaceControl$Transaction;
-PLandroid/view/SurfaceControl$Transaction;->setOpaque(Landroid/view/SurfaceControl;Z)Landroid/view/SurfaceControl$Transaction;
-PLandroid/view/SurfaceControl$Transaction;->setOverrideScalingMode(Landroid/view/SurfaceControl;I)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction;->setPosition(Landroid/view/SurfaceControl;FF)Landroid/view/SurfaceControl$Transaction;
+HSPLandroid/view/SurfaceControl$Transaction;->setMatrix(Landroid/view/SurfaceControl;FFFF)Landroid/view/SurfaceControl$Transaction;
+HSPLandroid/view/SurfaceControl$Transaction;->setPosition(Landroid/view/SurfaceControl;FF)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->setRelativeLayer(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;I)Landroid/view/SurfaceControl$Transaction;
-PLandroid/view/SurfaceControl$Transaction;->setSecure(Landroid/view/SurfaceControl;Z)Landroid/view/SurfaceControl$Transaction;
-PLandroid/view/SurfaceControl$Transaction;->setTransparentRegionHint(Landroid/view/SurfaceControl;Landroid/graphics/Region;)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->setWindowCrop(Landroid/view/SurfaceControl;II)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceControl$Transaction;->setWindowCrop(Landroid/view/SurfaceControl;Landroid/graphics/Rect;)Landroid/view/SurfaceControl$Transaction;
+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;-><init>()V
 HSPLandroid/view/SurfaceControl;-><init>(Landroid/view/SurfaceSession;Ljava/lang/String;IIIILandroid/view/SurfaceControl;Landroid/util/SparseIntArray;)V
 HSPLandroid/view/SurfaceControl;-><init>(Landroid/view/SurfaceSession;Ljava/lang/String;IIIILandroid/view/SurfaceControl;Landroid/util/SparseIntArray;Landroid/view/SurfaceControl$1;)V
-PLandroid/view/SurfaceControl;->access$1000(JJFF)V
-PLandroid/view/SurfaceControl;->access$1100(JJII)V
-HSPLandroid/view/SurfaceControl;->access$1200(JJI)V
-HSPLandroid/view/SurfaceControl;->access$1300(JJJI)V
-PLandroid/view/SurfaceControl;->access$1400(JJLandroid/graphics/Region;)V
-PLandroid/view/SurfaceControl;->access$1500(JJF)V
-HPLandroid/view/SurfaceControl;->access$1600(JJLandroid/view/InputWindowHandle;)V
-HPLandroid/view/SurfaceControl;->access$1900(JJFFFF)V
-PLandroid/view/SurfaceControl;->access$2100(JJZ)V
-HSPLandroid/view/SurfaceControl;->access$2200(JJIIII)V
-PLandroid/view/SurfaceControl;->access$2300(JJF)V
-HSPLandroid/view/SurfaceControl;->access$2400(JJI)V
-PLandroid/view/SurfaceControl;->access$2500(JJJJ)V
-PLandroid/view/SurfaceControl;->access$2800(JJJ)V
-PLandroid/view/SurfaceControl;->access$2900(JJ)V
-HSPLandroid/view/SurfaceControl;->access$300()J
-PLandroid/view/SurfaceControl;->access$3000(JJI)V
-PLandroid/view/SurfaceControl;->access$3100(JJ[F)V
-HSPLandroid/view/SurfaceControl;->access$3300(JLandroid/os/IBinder;I)V
-HSPLandroid/view/SurfaceControl;->access$3400(JLandroid/os/IBinder;IIIIIIIII)V
-PLandroid/view/SurfaceControl;->access$3600(J)V
-PLandroid/view/SurfaceControl;->access$3700(J)V
-HSPLandroid/view/SurfaceControl;->access$400(JZ)V
-HSPLandroid/view/SurfaceControl;->access$4000(JJ)V
-HSPLandroid/view/SurfaceControl;->access$4100(JLandroid/os/Parcel;)V
-HPLandroid/view/SurfaceControl;->access$4200(Landroid/os/Parcel;)J
-PLandroid/view/SurfaceControl;->access$500(Landroid/view/SurfaceControl;)Ljava/lang/Object;
-PLandroid/view/SurfaceControl;->access$602(Landroid/view/SurfaceControl;I)I
-PLandroid/view/SurfaceControl;->access$702(Landroid/view/SurfaceControl;I)I
-HSPLandroid/view/SurfaceControl;->access$800(Landroid/view/SurfaceControl;)V
-HSPLandroid/view/SurfaceControl;->access$900(JJII)V
-PLandroid/view/SurfaceControl;->assignNativeObject(J)V
-PLandroid/view/SurfaceControl;->captureLayers(Landroid/view/SurfaceControl;Landroid/graphics/Rect;FI)Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;
+HSPLandroid/view/SurfaceControl;->access$1000(JJII)V
+HSPLandroid/view/SurfaceControl;->access$1100(JJFF)V
+HSPLandroid/view/SurfaceControl;->access$2000(JJFFFF)V
+HSPLandroid/view/SurfaceControl;->access$2300(JJIIII)V
+HSPLandroid/view/SurfaceControl;->access$300(Landroid/view/SurfaceControl;)V
+HSPLandroid/view/SurfaceControl;->access$400()J
+HSPLandroid/view/SurfaceControl;->access$4400(JLandroid/os/Parcel;)V
+HSPLandroid/view/SurfaceControl;->access$500(JZ)V
+HSPLandroid/view/SurfaceControl;->assignNativeObject(J)V
 HSPLandroid/view/SurfaceControl;->checkNotReleased()V
-HSPLandroid/view/SurfaceControl;->closeTransaction()V
-PLandroid/view/SurfaceControl;->copyFrom(Landroid/view/SurfaceControl;)V
-PLandroid/view/SurfaceControl;->deferTransactionUntil(Landroid/view/SurfaceControl;J)V
-PLandroid/view/SurfaceControl;->detachChildren()V
-HPLandroid/view/SurfaceControl;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLandroid/view/SurfaceControl;->finalize()V
-HSPLandroid/view/SurfaceControl;->getActiveColorMode(Landroid/os/IBinder;)I
-HSPLandroid/view/SurfaceControl;->getActiveConfig(Landroid/os/IBinder;)I
-HSPLandroid/view/SurfaceControl;->getAllowedDisplayConfigs(Landroid/os/IBinder;)[I
-HSPLandroid/view/SurfaceControl;->getCompositionColorSpaces()[Landroid/graphics/ColorSpace;
-HSPLandroid/view/SurfaceControl;->getDisplayBrightnessSupport(Landroid/os/IBinder;)Z
-HSPLandroid/view/SurfaceControl;->getDisplayColorModes(Landroid/os/IBinder;)[I
-HSPLandroid/view/SurfaceControl;->getDisplayConfigs(Landroid/os/IBinder;)[Landroid/view/SurfaceControl$PhysicalDisplayInfo;
-PLandroid/view/SurfaceControl;->getDisplayNativePrimaries(Landroid/os/IBinder;)Landroid/view/SurfaceControl$DisplayPrimaries;
-HSPLandroid/view/SurfaceControl;->getHdrCapabilities(Landroid/os/IBinder;)Landroid/view/Display$HdrCapabilities;
-PLandroid/view/SurfaceControl;->getHeight()I
-HSPLandroid/view/SurfaceControl;->getInternalDisplayToken()Landroid/os/IBinder;
-HSPLandroid/view/SurfaceControl;->getPhysicalDisplayIds()[J
-HSPLandroid/view/SurfaceControl;->getPhysicalDisplayToken(J)Landroid/os/IBinder;
-PLandroid/view/SurfaceControl;->getWidth()I
-PLandroid/view/SurfaceControl;->isValid()Z
-HSPLandroid/view/SurfaceControl;->mergeToGlobalTransaction(Landroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/SurfaceControl;->openTransaction()V
+HSPLandroid/view/SurfaceControl;->isValid()Z
 HSPLandroid/view/SurfaceControl;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/view/SurfaceControl;->release()V
-PLandroid/view/SurfaceControl;->rotateCropForSF(Landroid/graphics/Rect;I)V
-PLandroid/view/SurfaceControl;->screenshot(Landroid/graphics/Rect;IIZI)Landroid/graphics/Bitmap;
-PLandroid/view/SurfaceControl;->screenshot(Landroid/os/IBinder;Landroid/view/Surface;)V
-PLandroid/view/SurfaceControl;->screenshot(Landroid/os/IBinder;Landroid/view/Surface;Landroid/graphics/Rect;IIZI)V
-PLandroid/view/SurfaceControl;->screenshotToBuffer(Landroid/os/IBinder;Landroid/graphics/Rect;IIZI)Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;
-PLandroid/view/SurfaceControl;->screenshotToBufferWithSecureLayersUnsafe(Landroid/os/IBinder;Landroid/graphics/Rect;IIZI)Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;
-HSPLandroid/view/SurfaceControl;->setAllowedDisplayConfigs(Landroid/os/IBinder;[I)Z
-HPLandroid/view/SurfaceControl;->setAlpha(F)V
-PLandroid/view/SurfaceControl;->setBufferSize(II)V
-PLandroid/view/SurfaceControl;->setColorSpaceAgnostic(Z)V
-HSPLandroid/view/SurfaceControl;->setDesiredDisplayConfigSpecs(Landroid/os/IBinder;Landroid/view/SurfaceControl$DesiredDisplayConfigSpecs;)Z
-HSPLandroid/view/SurfaceControl;->setDisplayPowerMode(Landroid/os/IBinder;I)V
-HSPLandroid/view/SurfaceControl;->setGlobalShadowSettings([F[FFFF)V
-HPLandroid/view/SurfaceControl;->setMatrix(FFFF)V
-PLandroid/view/SurfaceControl;->setOpaque(Z)V
-PLandroid/view/SurfaceControl;->setOverrideScalingMode(I)V
-PLandroid/view/SurfaceControl;->setPosition(FF)V
-PLandroid/view/SurfaceControl;->setSecure(Z)V
-PLandroid/view/SurfaceControl;->setTransparentRegionHint(Landroid/graphics/Region;)V
-PLandroid/view/SurfaceControl;->setWindowCrop(Landroid/graphics/Rect;)V
-PLandroid/view/SurfaceControl;->show()V
-HPLandroid/view/SurfaceControl;->toString()Ljava/lang/String;
-HSPLandroid/view/SurfaceControl;->validateColorArg([F)V
-HPLandroid/view/SurfaceControl;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/SurfaceSession;-><init>()V
 HSPLandroid/view/SurfaceSession;->finalize()V
-PLandroid/view/SurfaceSession;->kill()V
-HPLandroid/view/SurfaceView$1;->positionChanged(JIIII)V
-HPLandroid/view/SurfaceView$1;->positionLost(J)V
-HSPLandroid/view/SurfaceView$2;->addCallback(Landroid/view/SurfaceHolder$Callback;)V
-HPLandroid/view/SurfaceView$2;->getSurface()Landroid/view/Surface;
-HPLandroid/view/SurfaceView$2;->removeCallback(Landroid/view/SurfaceHolder$Callback;)V
-HSPLandroid/view/SurfaceView$2;->setFormat(I)V
-HSPLandroid/view/SurfaceView;-><init>(Landroid/content/Context;)V
-HPLandroid/view/SurfaceView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/view/SurfaceView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/view/SurfaceView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/view/SurfaceView;->access$002(Landroid/view/SurfaceView;Z)Z
-HPLandroid/view/SurfaceView;->access$100(Landroid/view/SurfaceView;)Landroid/graphics/Rect;
-HPLandroid/view/SurfaceView;->access$200(Landroid/view/SurfaceView;Landroid/graphics/Rect;J)V
-HPLandroid/view/SurfaceView;->access$300(Landroid/view/SurfaceView;)Landroid/view/SurfaceControl$Transaction;
-HPLandroid/view/SurfaceView;->access$400(Landroid/view/SurfaceView;)Z
-HPLandroid/view/SurfaceView;->access$402(Landroid/view/SurfaceView;Z)Z
-HPLandroid/view/SurfaceView;->applyChildSurfaceTransaction_renderWorker(Landroid/view/SurfaceControl$Transaction;Landroid/view/Surface;J)V
-HPLandroid/view/SurfaceView;->applySurfaceTransforms(Landroid/view/SurfaceControl;Landroid/graphics/Rect;J)V
-HPLandroid/view/SurfaceView;->clearSurfaceViewPort(Landroid/graphics/Canvas;)V
-HPLandroid/view/SurfaceView;->dispatchDraw(Landroid/graphics/Canvas;)V
-HPLandroid/view/SurfaceView;->gatherTransparentRegion(Landroid/graphics/Region;)Z
-HSPLandroid/view/SurfaceView;->getHolder()Landroid/view/SurfaceHolder;
-HPLandroid/view/SurfaceView;->getSurfaceCallbacks()[Landroid/view/SurfaceHolder$Callback;
-HPLandroid/view/SurfaceView;->isAboveParent()Z
-HPLandroid/view/SurfaceView;->lambda$SyyzxOgxKwZMRgiiTGcRYbOU5JY(Landroid/view/SurfaceView;)V
-HPLandroid/view/SurfaceView;->lambda$TWz4D2u33ZlAmRtgKzbqqDue3iM(Landroid/view/SurfaceView;)V
-HPLandroid/view/SurfaceView;->lambda$new$0$SurfaceView()Z
-HPLandroid/view/SurfaceView;->notifyDrawFinished()V
-HPLandroid/view/SurfaceView;->onAttachedToWindow()V
-HPLandroid/view/SurfaceView;->onDetachedFromWindow()V
-HPLandroid/view/SurfaceView;->onDrawFinished()V
-HPLandroid/view/SurfaceView;->onMeasure(II)V
-HPLandroid/view/SurfaceView;->onWindowVisibilityChanged(I)V
-HPLandroid/view/SurfaceView;->performDrawFinished()V
-HPLandroid/view/SurfaceView;->releaseSurfaces()V
-HPLandroid/view/SurfaceView;->runOnUiThread(Ljava/lang/Runnable;)V
-HPLandroid/view/SurfaceView;->setFrame(IIII)Z
-HPLandroid/view/SurfaceView;->setParentSpaceRectangle(Landroid/graphics/Rect;J)V
-HPLandroid/view/SurfaceView;->setSecure(Z)V
-HSPLandroid/view/SurfaceView;->setVisibility(I)V
-HPLandroid/view/SurfaceView;->setWindowStopped(Z)V
-HSPLandroid/view/SurfaceView;->setZOrderMediaOverlay(Z)V
-HPLandroid/view/SurfaceView;->surfaceCreated(Landroid/view/SurfaceControl$Transaction;)V
-HPLandroid/view/SurfaceView;->surfaceDestroyed()V
-HPLandroid/view/SurfaceView;->updateBackgroundVisibility(Landroid/view/SurfaceControl$Transaction;)V
-HPLandroid/view/SurfaceView;->updateOpaqueFlag()V
-HPLandroid/view/SurfaceView;->updateRelativeZ(Landroid/view/SurfaceControl$Transaction;)V
-HPLandroid/view/SurfaceView;->updateRequestedVisibility()V
-HSPLandroid/view/SurfaceView;->updateSurface()V
-HPLandroid/view/TextureLayer;-><init>(Landroid/graphics/HardwareRenderer;J)V
-HPLandroid/view/TextureLayer;->adoptTextureLayer(Landroid/graphics/HardwareRenderer;J)Landroid/view/TextureLayer;
-HPLandroid/view/TextureLayer;->copyInto(Landroid/graphics/Bitmap;)Z
-HPLandroid/view/TextureLayer;->destroy()V
-HPLandroid/view/TextureLayer;->detachSurfaceTexture()V
-HPLandroid/view/TextureLayer;->getDeferredLayerUpdater()J
-HPLandroid/view/TextureLayer;->getLayerHandle()J
-HPLandroid/view/TextureLayer;->isValid()Z
-HPLandroid/view/TextureLayer;->prepare(IIZ)Z
-HPLandroid/view/TextureLayer;->setLayerPaint(Landroid/graphics/Paint;)V
-HPLandroid/view/TextureLayer;->setSurfaceTexture(Landroid/graphics/SurfaceTexture;)V
-HPLandroid/view/TextureLayer;->updateSurfaceTexture()V
-HPLandroid/view/TextureView;-><init>(Landroid/content/Context;)V
-HPLandroid/view/TextureView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/view/TextureView;->applyTransformMatrix()V
-HPLandroid/view/TextureView;->applyUpdate()V
-HPLandroid/view/TextureView;->destroyHardwareLayer()V
-HPLandroid/view/TextureView;->destroyHardwareResources()V
-HPLandroid/view/TextureView;->draw(Landroid/graphics/Canvas;)V
-HPLandroid/view/TextureView;->getBitmap()Landroid/graphics/Bitmap;
-HPLandroid/view/TextureView;->getBitmap(II)Landroid/graphics/Bitmap;
-HPLandroid/view/TextureView;->getBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;
-HPLandroid/view/TextureView;->getLayerType()I
-HPLandroid/view/TextureView;->getSurfaceTexture()Landroid/graphics/SurfaceTexture;
-HPLandroid/view/TextureView;->getSurfaceTextureListener()Landroid/view/TextureView$SurfaceTextureListener;
-HPLandroid/view/TextureView;->getTextureLayer()Landroid/view/TextureLayer;
-HPLandroid/view/TextureView;->isAvailable()Z
-HPLandroid/view/TextureView;->isOpaque()Z
-HPLandroid/view/TextureView;->lambda$new$0$TextureView(Landroid/graphics/SurfaceTexture;)V
-HPLandroid/view/TextureView;->onAttachedToWindow()V
-HPLandroid/view/TextureView;->onDetachedFromWindowInternal()V
-HPLandroid/view/TextureView;->onSizeChanged(IIII)V
-HPLandroid/view/TextureView;->onVisibilityChanged(Landroid/view/View;I)V
-HPLandroid/view/TextureView;->releaseSurfaceTexture()V
-HPLandroid/view/TextureView;->setSurfaceTextureListener(Landroid/view/TextureView$SurfaceTextureListener;)V
-HPLandroid/view/TextureView;->updateLayer()V
 HSPLandroid/view/ThreadedRenderer;-><init>(Landroid/content/Context;ZLjava/lang/String;)V
-PLandroid/view/ThreadedRenderer;->create(Landroid/content/Context;ZLjava/lang/String;)Landroid/view/ThreadedRenderer;
-PLandroid/view/ThreadedRenderer;->destroy()V
-PLandroid/view/ThreadedRenderer;->destroyHardwareResources(Landroid/view/View;)V
-PLandroid/view/ThreadedRenderer;->destroyResources(Landroid/view/View;)V
+HSPLandroid/view/ThreadedRenderer;->create(Landroid/content/Context;ZLjava/lang/String;)Landroid/view/ThreadedRenderer;
+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
-HSPLandroid/view/ThreadedRenderer;->enableForegroundTrimming()V
 HSPLandroid/view/ThreadedRenderer;->getHeight()I
 HSPLandroid/view/ThreadedRenderer;->getWidth()I
 HSPLandroid/view/ThreadedRenderer;->initialize(Landroid/view/Surface;)Z
-PLandroid/view/ThreadedRenderer;->isAvailable()Z
+HSPLandroid/view/ThreadedRenderer;->initializeIfNeeded(IILandroid/view/View$AttachInfo;Landroid/view/Surface;Landroid/graphics/Rect;)Z
+HSPLandroid/view/ThreadedRenderer;->isAvailable()Z
 HSPLandroid/view/ThreadedRenderer;->isEnabled()Z
-HPLandroid/view/ThreadedRenderer;->lambda$updateRootDisplayList$0(Ljava/util/ArrayList;J)V
-PLandroid/view/ThreadedRenderer;->loadSystemProperties()Z
-PLandroid/view/ThreadedRenderer;->setEnabled(Z)V
-PLandroid/view/ThreadedRenderer;->setLightCenter(Landroid/view/View$AttachInfo;)V
-PLandroid/view/ThreadedRenderer;->setRequested(Z)V
-PLandroid/view/ThreadedRenderer;->setSurface(Landroid/view/Surface;)V
+HSPLandroid/view/ThreadedRenderer;->isRequested()Z
+HSPLandroid/view/ThreadedRenderer;->loadSystemProperties()Z
+HSPLandroid/view/ThreadedRenderer;->setEnabled(Z)V
+HSPLandroid/view/ThreadedRenderer;->setLightCenter(Landroid/view/View$AttachInfo;)V
+HSPLandroid/view/ThreadedRenderer;->setRequested(Z)V
+HSPLandroid/view/ThreadedRenderer;->setSurface(Landroid/view/Surface;)V
 HSPLandroid/view/ThreadedRenderer;->setup(IILandroid/view/View$AttachInfo;Landroid/graphics/Rect;)V
-PLandroid/view/ThreadedRenderer;->updateEnabledState(Landroid/view/Surface;)V
+HSPLandroid/view/ThreadedRenderer;->updateEnabledState(Landroid/view/Surface;)V
 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
-HSPLandroid/view/TouchDelegate;-><init>(Landroid/graphics/Rect;Landroid/view/View;)V
-HPLandroid/view/TouchDelegate;->onTouchEvent(Landroid/view/MotionEvent;)Z
-PLandroid/view/VelocityTracker;-><init>(Ljava/lang/String;)V
+HSPLandroid/view/VelocityTracker;-><init>(Ljava/lang/String;)V
 HSPLandroid/view/VelocityTracker;->addMovement(Landroid/view/MotionEvent;)V
 HSPLandroid/view/VelocityTracker;->clear()V
-HPLandroid/view/VelocityTracker;->computeCurrentVelocity(I)V
-PLandroid/view/VelocityTracker;->computeCurrentVelocity(IF)V
-HPLandroid/view/VelocityTracker;->finalize()V
-HPLandroid/view/VelocityTracker;->getXVelocity()F
-PLandroid/view/VelocityTracker;->getXVelocity(I)F
-HPLandroid/view/VelocityTracker;->getYVelocity()F
-PLandroid/view/VelocityTracker;->getYVelocity(I)F
+HSPLandroid/view/VelocityTracker;->computeCurrentVelocity(IF)V
+HSPLandroid/view/VelocityTracker;->finalize()V
+HSPLandroid/view/VelocityTracker;->getXVelocity(I)F
+HSPLandroid/view/VelocityTracker;->getYVelocity(I)F
 HSPLandroid/view/VelocityTracker;->obtain()Landroid/view/VelocityTracker;
 HSPLandroid/view/VelocityTracker;->recycle()V
-HPLandroid/view/View$10;->setValue(Landroid/view/View;F)V
-HPLandroid/view/View$10;->setValue(Ljava/lang/Object;F)V
-HPLandroid/view/View$13;->get(Landroid/view/View;)Ljava/lang/Float;
-HPLandroid/view/View$13;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/view/View$13;->setValue(Landroid/view/View;F)V
-HPLandroid/view/View$13;->setValue(Ljava/lang/Object;F)V
-HPLandroid/view/View$14;->get(Landroid/view/View;)Ljava/lang/Float;
-HPLandroid/view/View$14;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/view/View$14;->setValue(Landroid/view/View;F)V
-HPLandroid/view/View$14;->setValue(Ljava/lang/Object;F)V
+HSPLandroid/view/View$1;-><init>(Landroid/view/View;)V
 HSPLandroid/view/View$1;->positionChanged(JIIII)V
 HSPLandroid/view/View$1;->positionLost(J)V
-HPLandroid/view/View$3;->get(Landroid/view/View;)Ljava/lang/Float;
-HPLandroid/view/View$3;->get(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/view/View$3;->setValue(Landroid/view/View;F)V
 HSPLandroid/view/View$3;->setValue(Ljava/lang/Object;F)V
-HPLandroid/view/View$4;->get(Landroid/view/View;)Ljava/lang/Float;
-HPLandroid/view/View$4;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/view/View$4;->setValue(Landroid/view/View;F)V
-HSPLandroid/view/View$4;->setValue(Ljava/lang/Object;F)V
-HPLandroid/view/View$5;->get(Landroid/view/View;)Ljava/lang/Float;
-HPLandroid/view/View$5;->get(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/view/View$5;->setValue(Landroid/view/View;F)V
 HSPLandroid/view/View$5;->setValue(Ljava/lang/Object;F)V
-HSPLandroid/view/View$6;->get(Landroid/view/View;)Ljava/lang/Float;
-HSPLandroid/view/View$6;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/view/View$6;->setValue(Landroid/view/View;F)V
-HSPLandroid/view/View$6;->setValue(Ljava/lang/Object;F)V
-HPLandroid/view/View$7;->get(Landroid/view/View;)Ljava/lang/Float;
-HPLandroid/view/View$7;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/view/View$7;->setValue(Landroid/view/View;F)V
-HPLandroid/view/View$7;->setValue(Ljava/lang/Object;F)V
-HPLandroid/view/View$8;->get(Landroid/view/View;)Ljava/lang/Float;
-HPLandroid/view/View$8;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/view/View$8;->setValue(Landroid/view/View;F)V
-HPLandroid/view/View$8;->setValue(Ljava/lang/Object;F)V
 HSPLandroid/view/View$AccessibilityDelegate;-><init>()V
-HPLandroid/view/View$AccessibilityDelegate;->createAccessibilityNodeInfo(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeInfo;
-HPLandroid/view/View$AccessibilityDelegate;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider;
-HPLandroid/view/View$AccessibilityDelegate;->onInitializeAccessibilityNodeInfo(Landroid/view/View;Landroid/view/accessibility/AccessibilityNodeInfo;)V
-HPLandroid/view/View$AccessibilityDelegate;->sendAccessibilityEvent(Landroid/view/View;I)V
+HSPLandroid/view/View$AccessibilityDelegate;->sendAccessibilityEvent(Landroid/view/View;I)V
 HSPLandroid/view/View$AttachInfo;-><init>(Landroid/view/IWindowSession;Landroid/view/IWindow;Landroid/view/Display;Landroid/view/ViewRootImpl;Landroid/os/Handler;Landroid/view/View$AttachInfo$Callbacks;Landroid/content/Context;)V
 HSPLandroid/view/View$BaseSavedState;-><init>(Landroid/os/Parcelable;)V
 HSPLandroid/view/View$BaseSavedState;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/View$CheckForLongPress;->run()V
-HPLandroid/view/View$CheckForTap;->run()V
-PLandroid/view/View$ForegroundInfo;-><init>()V
-PLandroid/view/View$ForegroundInfo;-><init>(Landroid/view/View$1;)V
+HSPLandroid/view/View$CheckForTap;-><init>(Landroid/view/View;)V
+HSPLandroid/view/View$CheckForTap;-><init>(Landroid/view/View;Landroid/view/View$1;)V
+HSPLandroid/view/View$CheckForTap;->run()V
+HSPLandroid/view/View$ForegroundInfo;-><init>()V
+HSPLandroid/view/View$ForegroundInfo;-><init>(Landroid/view/View$1;)V
 HSPLandroid/view/View$ForegroundInfo;->access$100(Landroid/view/View$ForegroundInfo;)Z
 HSPLandroid/view/View$ForegroundInfo;->access$102(Landroid/view/View$ForegroundInfo;Z)Z
-PLandroid/view/View$ForegroundInfo;->access$1500(Landroid/view/View$ForegroundInfo;)Landroid/graphics/drawable/Drawable;
-PLandroid/view/View$ForegroundInfo;->access$2102(Landroid/view/View$ForegroundInfo;Z)Z
-PLandroid/view/View$ForegroundInfo;->access$2600(Landroid/view/View$ForegroundInfo;)I
-PLandroid/view/View$ForegroundInfo;->access$2602(Landroid/view/View$ForegroundInfo;I)I
-PLandroid/view/View$ListenerInfo;-><init>()V
-HSPLandroid/view/View$ListenerInfo;->access$1700(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnSystemUiVisibilityChangeListener;
-HSPLandroid/view/View$ListenerInfo;->access$1702(Landroid/view/View$ListenerInfo;Landroid/view/View$OnSystemUiVisibilityChangeListener;)Landroid/view/View$OnSystemUiVisibilityChangeListener;
-HPLandroid/view/View$MatchLabelForPredicate;-><init>()V
-HPLandroid/view/View$MatchLabelForPredicate;-><init>(Landroid/view/View$1;)V
-HPLandroid/view/View$MatchLabelForPredicate;->access$1102(Landroid/view/View$MatchLabelForPredicate;I)I
-HPLandroid/view/View$MatchLabelForPredicate;->test(Landroid/view/View;)Z
-HPLandroid/view/View$MatchLabelForPredicate;->test(Ljava/lang/Object;)Z
+HSPLandroid/view/View$ForegroundInfo;->access$1700(Landroid/view/View$ForegroundInfo;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/view/View$ForegroundInfo;->access$1702(Landroid/view/View$ForegroundInfo;Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/view/View$ForegroundInfo;->access$2302(Landroid/view/View$ForegroundInfo;Z)Z
+HSPLandroid/view/View$ForegroundInfo;->access$2600(Landroid/view/View$ForegroundInfo;)I
+HSPLandroid/view/View$ForegroundInfo;->access$2602(Landroid/view/View$ForegroundInfo;I)I
+HSPLandroid/view/View$ForegroundInfo;->access$2700(Landroid/view/View$ForegroundInfo;)I
+HSPLandroid/view/View$ForegroundInfo;->access$2702(Landroid/view/View$ForegroundInfo;I)I
+HSPLandroid/view/View$ForegroundInfo;->access$2800(Landroid/view/View$ForegroundInfo;)Landroid/view/View$TintInfo;
+HSPLandroid/view/View$ListenerInfo;-><init>()V
+HSPLandroid/view/View$ListenerInfo;->access$1500(Landroid/view/View$ListenerInfo;)Ljava/util/List;
+HSPLandroid/view/View$ListenerInfo;->access$1900(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnSystemUiVisibilityChangeListener;
+HSPLandroid/view/View$ListenerInfo;->access$200(Landroid/view/View$ListenerInfo;)Ljava/util/ArrayList;
+HSPLandroid/view/View$ListenerInfo;->access$202(Landroid/view/View$ListenerInfo;Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HSPLandroid/view/View$ListenerInfo;->access$300(Landroid/view/View$ListenerInfo;)Ljava/util/concurrent/CopyOnWriteArrayList;
+HSPLandroid/view/View$ListenerInfo;->access$302(Landroid/view/View$ListenerInfo;Ljava/util/concurrent/CopyOnWriteArrayList;)Ljava/util/concurrent/CopyOnWriteArrayList;
+HSPLandroid/view/View$ListenerInfo;->access$400(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnKeyListener;
+HSPLandroid/view/View$ListenerInfo;->access$402(Landroid/view/View$ListenerInfo;Landroid/view/View$OnKeyListener;)Landroid/view/View$OnKeyListener;
+HSPLandroid/view/View$ListenerInfo;->access$4200(Landroid/view/View$ListenerInfo;)Ljava/util/ArrayList;
+HSPLandroid/view/View$ListenerInfo;->access$4300(Landroid/view/View$ListenerInfo;)Ljava/util/ArrayList;
+HSPLandroid/view/View$ListenerInfo;->access$500(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnTouchListener;
+HSPLandroid/view/View$ListenerInfo;->access$502(Landroid/view/View$ListenerInfo;Landroid/view/View$OnTouchListener;)Landroid/view/View$OnTouchListener;
+HSPLandroid/view/View$ListenerInfo;->access$600(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnGenericMotionListener;
+HSPLandroid/view/View$ListenerInfo;->access$700(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnHoverListener;
+HSPLandroid/view/View$ListenerInfo;->access$800(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnDragListener;
 HSPLandroid/view/View$MeasureSpec;->getMode(I)I
 HSPLandroid/view/View$MeasureSpec;->getSize(I)I
 HSPLandroid/view/View$MeasureSpec;->makeMeasureSpec(II)I
 HSPLandroid/view/View$MeasureSpec;->makeSafeMeasureSpec(II)I
+HSPLandroid/view/View$PerformClick;-><init>(Landroid/view/View;)V
+HSPLandroid/view/View$PerformClick;-><init>(Landroid/view/View;Landroid/view/View$1;)V
 HSPLandroid/view/View$PerformClick;->run()V
 HSPLandroid/view/View$ScrollabilityCache;-><init>(Landroid/view/ViewConfiguration;Landroid/view/View;)V
 HSPLandroid/view/View$ScrollabilityCache;->run()V
-HSPLandroid/view/View$TintInfo;-><init>()V
-PLandroid/view/View$TransformationInfo;-><init>()V
-PLandroid/view/View$TransformationInfo;->access$2200(Landroid/view/View$TransformationInfo;)Landroid/graphics/Matrix;
+HSPLandroid/view/View$TooltipInfo;-><init>()V
+HSPLandroid/view/View$TooltipInfo;-><init>(Landroid/view/View$1;)V
+HSPLandroid/view/View$TooltipInfo;->clearAnchorPos()V
+HSPLandroid/view/View$TransformationInfo;-><init>()V
 HSPLandroid/view/View$TransformationInfo;->access$2400(Landroid/view/View$TransformationInfo;)F
+HSPLandroid/view/View$TransformationInfo;->access$2400(Landroid/view/View$TransformationInfo;)Landroid/graphics/Matrix;
+HSPLandroid/view/View$TransformationInfo;->access$2500(Landroid/view/View$TransformationInfo;)Landroid/graphics/Matrix;
+HSPLandroid/view/View$TransformationInfo;->access$2502(Landroid/view/View$TransformationInfo;Landroid/graphics/Matrix;)Landroid/graphics/Matrix;
+HSPLandroid/view/View$TransformationInfo;->access$2600(Landroid/view/View$TransformationInfo;)F
+HSPLandroid/view/View$TransformationInfo;->access$2602(Landroid/view/View$TransformationInfo;F)F
+HSPLandroid/view/View$UnsetPressedState;-><init>(Landroid/view/View;)V
+HSPLandroid/view/View$UnsetPressedState;-><init>(Landroid/view/View;Landroid/view/View$1;)V
 HSPLandroid/view/View$UnsetPressedState;->run()V
 HSPLandroid/view/View$VisibilityChangeForAutofillHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/view/View;-><init>(Landroid/content/Context;)V
 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
-HPLandroid/view/View;->access$3100()Z
-HPLandroid/view/View;->access$3200(Landroid/view/View;I)V
-HPLandroid/view/View;->access$3302(Landroid/view/View;Z)Z
-HPLandroid/view/View;->access$3800(Landroid/view/View;)I
+HSPLandroid/view/View;->access$3100()Z
+HSPLandroid/view/View;->access$3200()Z
+HSPLandroid/view/View;->access$3300(Landroid/view/View;I)V
+HSPLandroid/view/View;->access$3700(Landroid/view/View;)Z
 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
 HSPLandroid/view/View;->addOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V
 HSPLandroid/view/View;->addOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V
 HSPLandroid/view/View;->animate()Landroid/view/ViewPropertyAnimator;
-HPLandroid/view/View;->announceForAccessibility(Ljava/lang/CharSequence;)V
 HSPLandroid/view/View;->applyBackgroundTint()V
 HSPLandroid/view/View;->applyForegroundTint()V
+HSPLandroid/view/View;->applyInsets(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->applyLegacyAnimation(Landroid/view/ViewGroup;JLandroid/view/animation/Animation;Z)Z
 HSPLandroid/view/View;->areDrawablesResolved()Z
 HSPLandroid/view/View;->assignParent(Landroid/view/ViewParent;)V
 HSPLandroid/view/View;->awakenScrollBars()Z
-HPLandroid/view/View;->awakenScrollBars(I)Z
 HSPLandroid/view/View;->awakenScrollBars(IZ)Z
 HSPLandroid/view/View;->bringToFront()V
-HPLandroid/view/View;->buildDrawingCache(Z)V
-HPLandroid/view/View;->buildDrawingCacheImpl(Z)V
-HPLandroid/view/View;->buildLayer()V
 HSPLandroid/view/View;->calculateIsImportantForContentCapture()Z
 HSPLandroid/view/View;->canHaveDisplayList()Z
 HSPLandroid/view/View;->canNotifyAutofillEnterExitEvent()Z
 HSPLandroid/view/View;->canReceivePointerEvents()Z
 HSPLandroid/view/View;->canResolveLayoutDirection()Z
 HSPLandroid/view/View;->canResolveTextDirection()Z
-HPLandroid/view/View;->canScrollHorizontally(I)Z
 HSPLandroid/view/View;->canScrollVertically(I)Z
 HSPLandroid/view/View;->canTakeFocus()Z
-PLandroid/view/View;->cancel(Landroid/view/View$SendViewScrolledAccessibilityEvent;)V
+HSPLandroid/view/View;->cancel(Landroid/view/View$SendAccessibilityEventThrottle;)V
 HSPLandroid/view/View;->cancelLongPress()V
 HSPLandroid/view/View;->cancelPendingInputEvents()V
-HPLandroid/view/View;->checkForLongClick(JFFI)V
+HSPLandroid/view/View;->checkForLongClick(JFFI)V
 HSPLandroid/view/View;->checkInputConnectionProxy(Landroid/view/View;)Z
-PLandroid/view/View;->cleanupDraw()V
+HSPLandroid/view/View;->cleanupDraw()V
 HSPLandroid/view/View;->clearAccessibilityFocus()V
 HSPLandroid/view/View;->clearAccessibilityFocusNoCallbacks(I)V
+HSPLandroid/view/View;->clearAccessibilityThrottles()V
 HSPLandroid/view/View;->clearAnimation()V
-HPLandroid/view/View;->clearFocus()V
+HSPLandroid/view/View;->clearFocus()V
 HSPLandroid/view/View;->clearFocusInternal(Landroid/view/View;ZZ)V
-HPLandroid/view/View;->clearParentsWantFocus()V
+HSPLandroid/view/View;->clearParentsWantFocus()V
 HSPLandroid/view/View;->combineMeasuredStates(II)I
 HSPLandroid/view/View;->combineVisibility(II)I
 HSPLandroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
-HPLandroid/view/View;->computeHorizontalScrollExtent()I
-HPLandroid/view/View;->computeHorizontalScrollOffset()I
-HPLandroid/view/View;->computeHorizontalScrollRange()I
+HSPLandroid/view/View;->computeHorizontalScrollExtent()I
 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
 HSPLandroid/view/View;->computeVerticalScrollOffset()I
-HSPLandroid/view/View;->computeVerticalScrollRange()I
-HPLandroid/view/View;->createAccessibilityNodeInfo()Landroid/view/accessibility/AccessibilityNodeInfo;
-HPLandroid/view/View;->createAccessibilityNodeInfoInternal()Landroid/view/accessibility/AccessibilityNodeInfo;
 HSPLandroid/view/View;->damageInParent()V
-PLandroid/view/View;->debugDraw()Z
 HSPLandroid/view/View;->destroyDrawingCache()V
 HSPLandroid/view/View;->destroyHardwareResources()V
 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
-HPLandroid/view/View;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLandroid/view/View;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLandroid/view/View;->dispatchDetachedFromWindow()V
 HSPLandroid/view/View;->dispatchDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/view/View;->dispatchDrawableHotspotChanged(FF)V
-HSPLandroid/view/View;->dispatchFinishTemporaryDetach()V
-HPLandroid/view/View;->dispatchKeyEventPreIme(Landroid/view/KeyEvent;)Z
-HPLandroid/view/View;->dispatchNestedFling(FFZ)Z
-HPLandroid/view/View;->dispatchNestedPreFling(FF)Z
-HPLandroid/view/View;->dispatchNestedPreScroll(II[I[I)Z
-HPLandroid/view/View;->dispatchNestedScroll(IIII[I)Z
-HPLandroid/view/View;->dispatchProvideAutofillStructure(Landroid/view/ViewStructure;I)V
-HPLandroid/view/View;->dispatchProvideStructure(Landroid/view/ViewStructure;)V
-HPLandroid/view/View;->dispatchProvideStructure(Landroid/view/ViewStructure;II)V
-HSPLandroid/view/View;->dispatchRestoreInstanceState(Landroid/util/SparseArray;)V
+HSPLandroid/view/View;->dispatchPointerEvent(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/View;->dispatchSaveInstanceState(Landroid/util/SparseArray;)V
-HPLandroid/view/View;->dispatchScreenStateChanged(I)V
-HSPLandroid/view/View;->dispatchSetActivated(Z)V
+HSPLandroid/view/View;->dispatchScreenStateChanged(I)V
 HSPLandroid/view/View;->dispatchSetPressed(Z)V
 HSPLandroid/view/View;->dispatchSetSelected(Z)V
-HSPLandroid/view/View;->dispatchStartTemporaryDetach()V
-HSPLandroid/view/View;->dispatchSystemUiVisibilityChanged(I)V
 HSPLandroid/view/View;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/View;->dispatchVisibilityAggregated(Z)Z
 HSPLandroid/view/View;->dispatchVisibilityChanged(Landroid/view/View;I)V
@@ -25200,46 +12369,28 @@
 HSPLandroid/view/View;->drawableHotspotChanged(FF)V
 HSPLandroid/view/View;->drawableStateChanged()V
 HSPLandroid/view/View;->ensureTransformationInfo()V
-PLandroid/view/View;->findFocus()Landroid/view/View;
-HPLandroid/view/View;->findFrameMetricsObserver(Landroid/view/Window$OnFrameMetricsAvailableListener;)Landroid/view/FrameMetricsObserver;
+HSPLandroid/view/View;->findAccessibilityFocusHost(Z)Landroid/view/View;
+HSPLandroid/view/View;->findFocus()Landroid/view/View;
 HSPLandroid/view/View;->findKeyboardNavigationCluster()Landroid/view/View;
-HPLandroid/view/View;->findLabelForView(Landroid/view/View;I)Landroid/view/View;
-HPLandroid/view/View;->findUserSetNextFocus(Landroid/view/View;I)Landroid/view/View;
 HSPLandroid/view/View;->findViewById(I)Landroid/view/View;
-HPLandroid/view/View;->findViewByPredicate(Ljava/util/function/Predicate;)Landroid/view/View;
-HPLandroid/view/View;->findViewByPredicateInsideOut(Landroid/view/View;Ljava/util/function/Predicate;)Landroid/view/View;
-HPLandroid/view/View;->findViewByPredicateTraversal(Ljava/util/function/Predicate;Landroid/view/View;)Landroid/view/View;
 HSPLandroid/view/View;->findViewTraversal(I)Landroid/view/View;
-HPLandroid/view/View;->findViewWithTag(Ljava/lang/Object;)Landroid/view/View;
-HPLandroid/view/View;->findViewWithTagTraversal(Ljava/lang/Object;)Landroid/view/View;
 HSPLandroid/view/View;->fitSystemWindows(Landroid/graphics/Rect;)Z
 HSPLandroid/view/View;->fitSystemWindowsInt(Landroid/graphics/Rect;)Z
-HPLandroid/view/View;->focusSearch(I)Landroid/view/View;
-HPLandroid/view/View;->forceHasOverlappingRendering(Z)V
 HSPLandroid/view/View;->forceLayout()V
-HPLandroid/view/View;->gatherTransparentRegion(Landroid/graphics/Region;)Z
-HSPLandroid/view/View;->generateViewId()I
-HPLandroid/view/View;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate;
 HSPLandroid/view/View;->getAccessibilityLiveRegion()I
 HSPLandroid/view/View;->getAccessibilityNodeProvider()Landroid/view/accessibility/AccessibilityNodeProvider;
-HPLandroid/view/View;->getAccessibilityPaneTitle()Ljava/lang/CharSequence;
 HSPLandroid/view/View;->getAccessibilityViewId()I
-HPLandroid/view/View;->getAccessibilityWindowId()I
 HSPLandroid/view/View;->getAlpha()F
-HPLandroid/view/View;->getAndCacheContentCaptureSession()Landroid/view/contentcapture/ContentCaptureSession;
 HSPLandroid/view/View;->getAnimation()Landroid/view/animation/Animation;
-HPLandroid/view/View;->getAutofillHints()[Ljava/lang/String;
 HSPLandroid/view/View;->getAutofillId()Landroid/view/autofill/AutofillId;
+HSPLandroid/view/View;->getAutofillManager()Landroid/view/autofill/AutofillManager;
 HSPLandroid/view/View;->getAutofillType()I
 HSPLandroid/view/View;->getAutofillViewId()I
 HSPLandroid/view/View;->getBackground()Landroid/graphics/drawable/Drawable;
 HSPLandroid/view/View;->getBaseline()I
 HSPLandroid/view/View;->getBottom()I
-HPLandroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;)V
-HPLandroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;Z)V
-HPLandroid/view/View;->getClipBounds()Landroid/graphics/Rect;
-PLandroid/view/View;->getClipToOutline()Z
+HSPLandroid/view/View;->getClipToOutline()Z
 HSPLandroid/view/View;->getContentDescription()Ljava/lang/CharSequence;
 HSPLandroid/view/View;->getContext()Landroid/content/Context;
 HSPLandroid/view/View;->getDefaultSize(II)I
@@ -25254,45 +12405,34 @@
 HSPLandroid/view/View;->getFitsSystemWindows()Z
 HSPLandroid/view/View;->getFocusable()I
 HSPLandroid/view/View;->getFocusableAttribute(Landroid/content/res/TypedArray;)I
-HSPLandroid/view/View;->getFocusables(I)Ljava/util/ArrayList;
-HPLandroid/view/View;->getFocusedRect(Landroid/graphics/Rect;)V
 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
 HSPLandroid/view/View;->getHandler()Landroid/os/Handler;
-PLandroid/view/View;->getHasOverlappingRendering()Z
+HSPLandroid/view/View;->getHasOverlappingRendering()Z
 HSPLandroid/view/View;->getHeight()I
 HSPLandroid/view/View;->getHitRect(Landroid/graphics/Rect;)V
-HPLandroid/view/View;->getHorizontalFadingEdgeLength()I
-HPLandroid/view/View;->getHorizontalScrollBarBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-HPLandroid/view/View;->getHorizontalScrollbarHeight()I
 HSPLandroid/view/View;->getId()I
 HSPLandroid/view/View;->getImportantForAccessibility()I
 HSPLandroid/view/View;->getImportantForAutofill()I
 HSPLandroid/view/View;->getImportantForContentCapture()I
-HPLandroid/view/View;->getInverseMatrix()Landroid/graphics/Matrix;
-HPLandroid/view/View;->getIterableTextForAccessibility()Ljava/lang/CharSequence;
-HPLandroid/view/View;->getKeyDispatcherState()Landroid/view/KeyEvent$DispatcherState;
+HSPLandroid/view/View;->getInverseMatrix()Landroid/graphics/Matrix;
+HSPLandroid/view/View;->getKeyDispatcherState()Landroid/view/KeyEvent$DispatcherState;
 HSPLandroid/view/View;->getLayerType()I
 HSPLandroid/view/View;->getLayoutDirection()I
 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
-HPLandroid/view/View;->getLocationInSurface([I)V
 HSPLandroid/view/View;->getLocationInWindow([I)V
-HPLandroid/view/View;->getLocationOnScreen()[I
 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
-PLandroid/view/View;->getMeasuredWidthAndState()I
+HSPLandroid/view/View;->getMeasuredWidthAndState()I
 HSPLandroid/view/View;->getMinimumHeight()I
 HSPLandroid/view/View;->getMinimumWidth()I
 HSPLandroid/view/View;->getNotifiedContentCaptureAppeared()Z
-HPLandroid/view/View;->getOutlineProvider()Landroid/view/ViewOutlineProvider;
 HSPLandroid/view/View;->getOverScrollMode()I
 HSPLandroid/view/View;->getPaddingBottom()I
 HSPLandroid/view/View;->getPaddingEnd()I
@@ -25301,27 +12441,24 @@
 HSPLandroid/view/View;->getPaddingStart()I
 HSPLandroid/view/View;->getPaddingTop()I
 HSPLandroid/view/View;->getParent()Landroid/view/ViewParent;
-HPLandroid/view/View;->getParentForAccessibility()Landroid/view/ViewParent;
 HSPLandroid/view/View;->getPivotX()F
 HSPLandroid/view/View;->getPivotY()F
+HSPLandroid/view/View;->getProjectionReceiver()Landroid/view/View;
 HSPLandroid/view/View;->getRawLayoutDirection()I
 HSPLandroid/view/View;->getRawTextAlignment()I
 HSPLandroid/view/View;->getRawTextDirection()I
 HSPLandroid/view/View;->getResources()Landroid/content/res/Resources;
 HSPLandroid/view/View;->getRight()I
 HSPLandroid/view/View;->getRootView()Landroid/view/View;
-HPLandroid/view/View;->getRootWindowInsets()Landroid/view/WindowInsets;
+HSPLandroid/view/View;->getRootWindowInsets()Landroid/view/WindowInsets;
 HSPLandroid/view/View;->getRotation()F
 HSPLandroid/view/View;->getRotationX()F
 HSPLandroid/view/View;->getRotationY()F
-PLandroid/view/View;->getRunQueue()Landroid/view/HandlerActionQueue;
+HSPLandroid/view/View;->getRunQueue()Landroid/view/HandlerActionQueue;
 HSPLandroid/view/View;->getScaleX()F
 HSPLandroid/view/View;->getScaleY()F
-HSPLandroid/view/View;->getScrollBarStyle()I
 HSPLandroid/view/View;->getScrollX()I
 HSPLandroid/view/View;->getScrollY()I
-HPLandroid/view/View;->getSolidColor()I
-HPLandroid/view/View;->getStateDescription()Ljava/lang/CharSequence;
 HSPLandroid/view/View;->getStraightVerticalScrollBarBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->getSuggestedMinimumHeight()I
 HSPLandroid/view/View;->getSuggestedMinimumWidth()I
@@ -25331,51 +12468,48 @@
 HSPLandroid/view/View;->getTag(I)Ljava/lang/Object;
 HSPLandroid/view/View;->getTextAlignment()I
 HSPLandroid/view/View;->getTextDirection()I
-HSPLandroid/view/View;->getThreadedRenderer()Landroid/view/ThreadedRenderer;
 HSPLandroid/view/View;->getTop()I
 HSPLandroid/view/View;->getTransitionAlpha()F
-HPLandroid/view/View;->getTransitionName()Ljava/lang/String;
 HSPLandroid/view/View;->getTranslationX()F
 HSPLandroid/view/View;->getTranslationY()F
 HSPLandroid/view/View;->getTranslationZ()F
+HSPLandroid/view/View;->getVerticalScrollBarBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->getVerticalScrollbarWidth()I
 HSPLandroid/view/View;->getViewRootImpl()Landroid/view/ViewRootImpl;
 HSPLandroid/view/View;->getViewTreeObserver()Landroid/view/ViewTreeObserver;
 HSPLandroid/view/View;->getVisibility()I
 HSPLandroid/view/View;->getWidth()I
-HSPLandroid/view/View;->getWindowAttachCount()I
-HPLandroid/view/View;->getWindowId()Landroid/view/WindowId;
 HSPLandroid/view/View;->getWindowInsetsController()Landroid/view/WindowInsetsController;
 HSPLandroid/view/View;->getWindowSystemUiVisibility()I
 HSPLandroid/view/View;->getWindowToken()Landroid/os/IBinder;
 HSPLandroid/view/View;->getWindowVisibility()I
-HSPLandroid/view/View;->getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V
-HPLandroid/view/View;->getX()F
+HSPLandroid/view/View;->getX()F
 HSPLandroid/view/View;->getY()F
 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
 HSPLandroid/view/View;->hasDefaultFocus()Z
-HSPLandroid/view/View;->hasExplicitFocusable()Z
 HSPLandroid/view/View;->hasFocus()Z
 HSPLandroid/view/View;->hasFocusable()Z
 HSPLandroid/view/View;->hasFocusable(ZZ)Z
 HSPLandroid/view/View;->hasIdentityMatrix()Z
+HSPLandroid/view/View;->hasImeFocus()Z
 HSPLandroid/view/View;->hasListenersForAccessibility()Z
-HSPLandroid/view/View;->hasNestedScrollingParent()Z
 HSPLandroid/view/View;->hasOnClickListeners()Z
 HSPLandroid/view/View;->hasOverlappingRendering()Z
-HPLandroid/view/View;->hasRtlSupport()Z
-PLandroid/view/View;->hasSize()Z
+HSPLandroid/view/View;->hasPendingLongPressCallback()Z
+HSPLandroid/view/View;->hasRtlSupport()Z
+HSPLandroid/view/View;->hasSize()Z
 HSPLandroid/view/View;->hasTransientState()Z
 HSPLandroid/view/View;->hasUnhandledKeyListener()Z
 HSPLandroid/view/View;->hasWindowFocus()Z
 HSPLandroid/view/View;->hideTooltip()V
 HSPLandroid/view/View;->includeForAccessibility()Z
 HSPLandroid/view/View;->inflate(Landroid/content/Context;ILandroid/view/ViewGroup;)Landroid/view/View;
-PLandroid/view/View;->initialAwakenScrollBars()Z
-HPLandroid/view/View;->initializeScrollIndicatorsInternal()V
+HSPLandroid/view/View;->initScrollCache()V
+HSPLandroid/view/View;->initialAwakenScrollBars()Z
+HSPLandroid/view/View;->initializeScrollIndicatorsInternal()V
 HSPLandroid/view/View;->initializeScrollbarsInternal(Landroid/content/res/TypedArray;)V
 HSPLandroid/view/View;->internalSetPadding(IIII)V
 HSPLandroid/view/View;->invalidate()V
@@ -25391,24 +12525,21 @@
 HSPLandroid/view/View;->invalidateViewProperty(ZZ)V
 HSPLandroid/view/View;->isAccessibilityFocused()Z
 HSPLandroid/view/View;->isAccessibilityFocusedViewOrHost()Z
-HPLandroid/view/View;->isAccessibilityHeading()Z
-PLandroid/view/View;->isAccessibilityPane()Z
+HSPLandroid/view/View;->isAccessibilityPane()Z
 HSPLandroid/view/View;->isActionableForAccessibility()Z
-HPLandroid/view/View;->isActivated()Z
+HSPLandroid/view/View;->isActivated()Z
 HSPLandroid/view/View;->isAggregatedVisible()Z
-HPLandroid/view/View;->isAssistBlocked()Z
 HSPLandroid/view/View;->isAttachedToWindow()Z
 HSPLandroid/view/View;->isAutofillable()Z
 HSPLandroid/view/View;->isAutofilled()Z
 HSPLandroid/view/View;->isClickable()Z
-HPLandroid/view/View;->isContextClickable()Z
 HSPLandroid/view/View;->isDefaultFocusHighlightNeeded(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)Z
 HSPLandroid/view/View;->isEnabled()Z
 HSPLandroid/view/View;->isFocusable()Z
+HSPLandroid/view/View;->isFocusableInTouchMode()Z
 HSPLandroid/view/View;->isFocused()Z
-PLandroid/view/View;->isFocusedByDefault()Z
+HSPLandroid/view/View;->isFocusedByDefault()Z
 HSPLandroid/view/View;->isForegroundInsidePadding()Z
-HPLandroid/view/View;->isHapticFeedbackEnabled()Z
 HSPLandroid/view/View;->isHardwareAccelerated()Z
 HSPLandroid/view/View;->isHorizontalFadingEdgeEnabled()Z
 HSPLandroid/view/View;->isHorizontalScrollBarEnabled()Z
@@ -25416,27 +12547,26 @@
 HSPLandroid/view/View;->isImportantForAutofill()Z
 HSPLandroid/view/View;->isImportantForContentCapture()Z
 HSPLandroid/view/View;->isInEditMode()Z
-HPLandroid/view/View;->isInLayout()Z
 HSPLandroid/view/View;->isInScrollingContainer()Z
 HSPLandroid/view/View;->isInTouchMode()Z
-PLandroid/view/View;->isKeyboardNavigationCluster()Z
+HSPLandroid/view/View;->isKeyboardNavigationCluster()Z
 HSPLandroid/view/View;->isLaidOut()Z
 HSPLandroid/view/View;->isLayoutDirectionInherited()Z
 HSPLandroid/view/View;->isLayoutDirectionResolved()Z
-HPLandroid/view/View;->isLayoutModeOptical(Ljava/lang/Object;)Z
+HSPLandroid/view/View;->isLayoutModeOptical(Ljava/lang/Object;)Z
 HSPLandroid/view/View;->isLayoutRequested()Z
 HSPLandroid/view/View;->isLayoutRtl()Z
 HSPLandroid/view/View;->isLayoutValid()Z
 HSPLandroid/view/View;->isLongClickable()Z
 HSPLandroid/view/View;->isNestedScrollingEnabled()Z
 HSPLandroid/view/View;->isOpaque()Z
-HPLandroid/view/View;->isPaddingRelative()Z
 HSPLandroid/view/View;->isPaddingResolved()Z
 HSPLandroid/view/View;->isPressed()Z
-HPLandroid/view/View;->isRootNamespace()Z
+HSPLandroid/view/View;->isProjectionReceiver()Z
+HSPLandroid/view/View;->isRootNamespace()Z
 HSPLandroid/view/View;->isRtlCompatibilityMode()Z
-HPLandroid/view/View;->isScreenReaderFocusable()Z
 HSPLandroid/view/View;->isSelected()Z
+HSPLandroid/view/View;->isShowingLayoutBounds()Z
 HSPLandroid/view/View;->isShown()Z
 HSPLandroid/view/View;->isSoundEffectsEnabled()Z
 HSPLandroid/view/View;->isTemporarilyDetached()Z
@@ -25444,111 +12574,90 @@
 HSPLandroid/view/View;->isTextAlignmentResolved()Z
 HSPLandroid/view/View;->isTextDirectionInherited()Z
 HSPLandroid/view/View;->isTextDirectionResolved()Z
-HSPLandroid/view/View;->isVerticalFadingEdgeEnabled()Z
 HSPLandroid/view/View;->isVerticalScrollBarEnabled()Z
 HSPLandroid/view/View;->isVerticalScrollBarHidden()Z
-HPLandroid/view/View;->isVisibleToUser()Z
-HPLandroid/view/View;->isVisibleToUser(Landroid/graphics/Rect;)Z
+HSPLandroid/view/View;->isVisibleToUser()Z
+HSPLandroid/view/View;->isVisibleToUser(Landroid/graphics/Rect;)Z
 HSPLandroid/view/View;->jumpDrawablesToCurrentState()V
 HSPLandroid/view/View;->layout(IIII)V
+HSPLandroid/view/View;->makeFrameworkOptionalFitsSystemWindows()V
 HSPLandroid/view/View;->makeOptionalFitsSystemWindows()V
-HPLandroid/view/View;->mapRectFromViewToScreenCoords(Landroid/graphics/RectF;Z)V
 HSPLandroid/view/View;->measure(II)V
 HSPLandroid/view/View;->mergeDrawableStates([I[I)[I
 HSPLandroid/view/View;->needGlobalAttributesUpdate(Z)V
-HPLandroid/view/View;->needRtlPropertiesResolution()Z
+HSPLandroid/view/View;->needRtlPropertiesResolution()Z
 HSPLandroid/view/View;->notifyAppearedOrDisappearedForContentCaptureIfNeeded(Z)V
 HSPLandroid/view/View;->notifyAppearedOrDisappearedForContentCaptureIfNeededNoTrace(Z)V
 HSPLandroid/view/View;->notifyAutofillManagerOnClick()V
 HSPLandroid/view/View;->notifyEnterOrExitForAutoFillIfNeeded(Z)V
-HPLandroid/view/View;->notifyGlobalFocusCleared(Landroid/view/View;)V
+HSPLandroid/view/View;->notifyFocusChangeToImeFocusController(Z)V
+HSPLandroid/view/View;->notifyGlobalFocusCleared(Landroid/view/View;)V
 HSPLandroid/view/View;->notifySubtreeAccessibilityStateChangedIfNeeded()V
 HSPLandroid/view/View;->notifyViewAccessibilityStateChangedIfNeeded(I)V
-HPLandroid/view/View;->numViewsForAccessibility(Landroid/view/View;)I
 HSPLandroid/view/View;->offsetLeftAndRight(I)V
 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
 HSPLandroid/view/View;->onCancelPendingInputEvents()V
 HSPLandroid/view/View;->onCheckIsTextEditor()Z
-PLandroid/view/View;->onCloseSystemDialogs(Ljava/lang/String;)V
-HPLandroid/view/View;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLandroid/view/View;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 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
 HSPLandroid/view/View;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/view/View;->onDrawForeground(Landroid/graphics/Canvas;)V
-HPLandroid/view/View;->onDrawHorizontalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
 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
 HSPLandroid/view/View;->onFinishInflate()V
-HSPLandroid/view/View;->onFinishTemporaryDetach()V
 HSPLandroid/view/View;->onFocusChanged(ZILandroid/graphics/Rect;)V
 HSPLandroid/view/View;->onFocusLost()V
-HPLandroid/view/View;->onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V
-HPLandroid/view/View;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
-HPLandroid/view/View;->onKeyPreIme(ILandroid/view/KeyEvent;)Z
 HSPLandroid/view/View;->onLayout(ZIIII)V
 HSPLandroid/view/View;->onMeasure(II)V
-HPLandroid/view/View;->onProvideAutofillStructure(Landroid/view/ViewStructure;I)V
-HPLandroid/view/View;->onProvideAutofillVirtualStructure(Landroid/view/ViewStructure;I)V
-HPLandroid/view/View;->onProvideStructure(Landroid/view/ViewStructure;)V
-HPLandroid/view/View;->onProvideStructure(Landroid/view/ViewStructure;II)V
-HPLandroid/view/View;->onProvideVirtualStructure(Landroid/view/ViewStructure;)V
-HPLandroid/view/View;->onProvideVirtualStructureCompat(Landroid/view/ViewStructure;Z)V
 HSPLandroid/view/View;->onResolveDrawables(I)V
-HSPLandroid/view/View;->onRestoreInstanceState(Landroid/os/Parcelable;)V
 HSPLandroid/view/View;->onRtlPropertiesChanged(I)V
 HSPLandroid/view/View;->onSaveInstanceState()Landroid/os/Parcelable;
-HPLandroid/view/View;->onScreenStateChanged(I)V
+HSPLandroid/view/View;->onScreenStateChanged(I)V
 HSPLandroid/view/View;->onScrollChanged(IIII)V
 HSPLandroid/view/View;->onSetAlpha(I)Z
 HSPLandroid/view/View;->onSizeChanged(IIII)V
-HSPLandroid/view/View;->onStartTemporaryDetach()V
 HSPLandroid/view/View;->onTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/View;->onVisibilityAggregated(Z)V
 HSPLandroid/view/View;->onVisibilityChanged(Landroid/view/View;I)V
 HSPLandroid/view/View;->onWindowFocusChanged(Z)V
 HSPLandroid/view/View;->onWindowSystemUiVisibilityChanged(I)V
 HSPLandroid/view/View;->onWindowVisibilityChanged(I)V
-HPLandroid/view/View;->overScrollBy(IIIIIIIIZ)Z
 HSPLandroid/view/View;->performButtonActionOnTouchDown(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/View;->performClick()Z
+HSPLandroid/view/View;->performClickInternal()Z
 HSPLandroid/view/View;->performCollectViewAttributes(Landroid/view/View$AttachInfo;I)V
-HPLandroid/view/View;->performHapticFeedback(I)Z
-HPLandroid/view/View;->performHapticFeedback(II)Z
-HPLandroid/view/View;->performLongClick()Z
-HPLandroid/view/View;->performLongClick(FF)Z
-HPLandroid/view/View;->performLongClickInternal(FF)Z
 HSPLandroid/view/View;->playSoundEffect(I)V
+HSPLandroid/view/View;->pointInView(FF)Z
 HSPLandroid/view/View;->pointInView(FFF)Z
-HPLandroid/view/View;->populateAccessibilityNodeInfoDrawingOrderInParent(Landroid/view/accessibility/AccessibilityNodeInfo;)V
-HPLandroid/view/View;->populateVirtualStructure(Landroid/view/ViewStructure;Landroid/view/accessibility/AccessibilityNodeProvider;Landroid/view/accessibility/AccessibilityNodeInfo;Z)V
 HSPLandroid/view/View;->post(Ljava/lang/Runnable;)Z
 HSPLandroid/view/View;->postDelayed(Ljava/lang/Runnable;J)Z
 HSPLandroid/view/View;->postInvalidate()V
 HSPLandroid/view/View;->postInvalidateDelayed(J)V
 HSPLandroid/view/View;->postInvalidateOnAnimation()V
 HSPLandroid/view/View;->postOnAnimation(Ljava/lang/Runnable;)V
-HSPLandroid/view/View;->postOnAnimationDelayed(Ljava/lang/Runnable;J)V
+HSPLandroid/view/View;->postSendViewScrolledAccessibilityEventCallback(II)V
 HSPLandroid/view/View;->postUpdateSystemGestureExclusionRects()V
 HSPLandroid/view/View;->rebuildOutline()V
-HPLandroid/view/View;->recomputePadding()V
-HPLandroid/view/View;->recordGestureClassification(I)V
+HSPLandroid/view/View;->recordGestureClassification(I)V
 HSPLandroid/view/View;->refreshDrawableState()V
 HSPLandroid/view/View;->registerPendingFrameMetricsObservers()V
 HSPLandroid/view/View;->removeCallbacks(Ljava/lang/Runnable;)Z
-HPLandroid/view/View;->removeFrameMetricsListener(Landroid/view/Window$OnFrameMetricsAvailableListener;)V
-PLandroid/view/View;->removeLongPressCallback()V
+HSPLandroid/view/View;->removeLongPressCallback()V
 HSPLandroid/view/View;->removeOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V
 HSPLandroid/view/View;->removeOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V
-PLandroid/view/View;->removePerformClickCallback()V
-PLandroid/view/View;->removeUnsetPressCallback()V
+HSPLandroid/view/View;->removePerformClickCallback()V
+HSPLandroid/view/View;->removeTapCallback()V
+HSPLandroid/view/View;->removeUnsetPressCallback()V
 HSPLandroid/view/View;->requestApplyInsets()V
 HSPLandroid/view/View;->requestFitSystemWindows()V
 HSPLandroid/view/View;->requestFocus()Z
@@ -25556,11 +12665,8 @@
 HSPLandroid/view/View;->requestFocus(ILandroid/graphics/Rect;)Z
 HSPLandroid/view/View;->requestFocusNoSearch(ILandroid/graphics/Rect;)Z
 HSPLandroid/view/View;->requestLayout()V
-HPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;)Z
-HPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;Z)Z
-HSPLandroid/view/View;->requireViewById(I)Landroid/view/View;
-PLandroid/view/View;->resetDisplayList()V
-HSPLandroid/view/View;->resetPaddingToInitialValues()V
+HSPLandroid/view/View;->resetDisplayList()V
+HSPLandroid/view/View;->resetPressedState()V
 HSPLandroid/view/View;->resetResolvedDrawables()V
 HSPLandroid/view/View;->resetResolvedDrawablesInternal()V
 HSPLandroid/view/View;->resetResolvedLayoutDirection()V
@@ -25579,24 +12685,16 @@
 HSPLandroid/view/View;->resolveSizeAndState(III)I
 HSPLandroid/view/View;->resolveTextAlignment()Z
 HSPLandroid/view/View;->resolveTextDirection()Z
-PLandroid/view/View;->restoreDefaultFocus()Z
-HSPLandroid/view/View;->restoreHierarchyState(Landroid/util/SparseArray;)V
 HSPLandroid/view/View;->retrieveExplicitStyle(Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;)V
-HPLandroid/view/View;->rootViewRequestFocus()Z
-PLandroid/view/View;->sanitizeFloatPropertyValue(FLjava/lang/String;)F
+HSPLandroid/view/View;->sanitizeFloatPropertyValue(FLjava/lang/String;)F
 HSPLandroid/view/View;->sanitizeFloatPropertyValue(FLjava/lang/String;FF)F
 HSPLandroid/view/View;->saveAttributeDataForStyleable(Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V
 HSPLandroid/view/View;->saveHierarchyState(Landroid/util/SparseArray;)V
-HPLandroid/view/View;->scheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;J)V
-HSPLandroid/view/View;->scrollBy(II)V
 HSPLandroid/view/View;->scrollTo(II)V
 HSPLandroid/view/View;->sendAccessibilityEvent(I)V
 HSPLandroid/view/View;->sendAccessibilityEventInternal(I)V
 HSPLandroid/view/View;->setAccessibilityDelegate(Landroid/view/View$AccessibilityDelegate;)V
 HSPLandroid/view/View;->setAccessibilityLiveRegion(I)V
-HSPLandroid/view/View;->setAccessibilityPaneTitle(Ljava/lang/CharSequence;)V
-HPLandroid/view/View;->setAccessibilityTraversalAfter(I)V
-HPLandroid/view/View;->setAccessibilityTraversalBefore(I)V
 HSPLandroid/view/View;->setActivated(Z)V
 HSPLandroid/view/View;->setAlpha(F)V
 HSPLandroid/view/View;->setAlphaInternal(F)V
@@ -25607,20 +12705,14 @@
 HSPLandroid/view/View;->setBackgroundBounds()V
 HSPLandroid/view/View;->setBackgroundColor(I)V
 HSPLandroid/view/View;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
-PLandroid/view/View;->setBackgroundRenderNodeProperties(Landroid/graphics/RenderNode;)V
+HSPLandroid/view/View;->setBackgroundRenderNodeProperties(Landroid/graphics/RenderNode;)V
 HSPLandroid/view/View;->setBackgroundResource(I)V
-HPLandroid/view/View;->setBackgroundTintBlendMode(Landroid/graphics/BlendMode;)V
-HSPLandroid/view/View;->setBackgroundTintList(Landroid/content/res/ColorStateList;)V
-HPLandroid/view/View;->setBackgroundTintMode(Landroid/graphics/PorterDuff$Mode;)V
 HSPLandroid/view/View;->setBottom(I)V
 HSPLandroid/view/View;->setClickable(Z)V
-HSPLandroid/view/View;->setClipBounds(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->setClipToOutline(Z)V
 HSPLandroid/view/View;->setContentDescription(Ljava/lang/CharSequence;)V
 HSPLandroid/view/View;->setDefaultFocusHighlightEnabled(Z)V
 HSPLandroid/view/View;->setDisplayListProperties(Landroid/graphics/RenderNode;)V
-HSPLandroid/view/View;->setDrawingCacheEnabled(Z)V
-HPLandroid/view/View;->setDuplicateParentStateEnabled(Z)V
 HSPLandroid/view/View;->setElevation(F)V
 HSPLandroid/view/View;->setEnabled(Z)V
 HSPLandroid/view/View;->setFitsSystemWindows(Z)V
@@ -25628,59 +12720,39 @@
 HSPLandroid/view/View;->setFocusable(I)V
 HSPLandroid/view/View;->setFocusable(Z)V
 HSPLandroid/view/View;->setFocusableInTouchMode(Z)V
-HPLandroid/view/View;->setFocusedByDefault(Z)V
 HSPLandroid/view/View;->setForeground(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/view/View;->setForegroundGravity(I)V
 HSPLandroid/view/View;->setFrame(IIII)Z
-HSPLandroid/view/View;->setHapticFeedbackEnabled(Z)V
 HSPLandroid/view/View;->setHasTransientState(Z)V
-HPLandroid/view/View;->setHorizontalFadingEdgeEnabled(Z)V
-HSPLandroid/view/View;->setHorizontalScrollBarEnabled(Z)V
+HSPLandroid/view/View;->setHorizontalFadingEdgeEnabled(Z)V
 HSPLandroid/view/View;->setId(I)V
 HSPLandroid/view/View;->setImportantForAccessibility(I)V
 HSPLandroid/view/View;->setImportantForAutofill(I)V
 HSPLandroid/view/View;->setImportantForContentCapture(I)V
 HSPLandroid/view/View;->setIsRootNamespace(Z)V
-HPLandroid/view/View;->setKeepScreenOn(Z)V
 HSPLandroid/view/View;->setKeyboardNavigationCluster(Z)V
-HPLandroid/view/View;->setKeyedTag(ILjava/lang/Object;)V
-HSPLandroid/view/View;->setLayerPaint(Landroid/graphics/Paint;)V
+HSPLandroid/view/View;->setKeyedTag(ILjava/lang/Object;)V
 HSPLandroid/view/View;->setLayerType(ILandroid/graphics/Paint;)V
 HSPLandroid/view/View;->setLayoutDirection(I)V
 HSPLandroid/view/View;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
-HSPLandroid/view/View;->setLeft(I)V
-HPLandroid/view/View;->setLeftTopRightBottom(IIII)V
 HSPLandroid/view/View;->setLongClickable(Z)V
 HSPLandroid/view/View;->setMeasuredDimension(II)V
-HPLandroid/view/View;->setMeasuredDimensionRaw(II)V
+HSPLandroid/view/View;->setMeasuredDimensionRaw(II)V
 HSPLandroid/view/View;->setMinimumHeight(I)V
-HSPLandroid/view/View;->setMinimumWidth(I)V
-HPLandroid/view/View;->setNestedScrollingEnabled(Z)V
-HPLandroid/view/View;->setNextFocusDownId(I)V
-HPLandroid/view/View;->setNextFocusForwardId(I)V
-HPLandroid/view/View;->setNextFocusLeftId(I)V
-HPLandroid/view/View;->setNextFocusRightId(I)V
-HPLandroid/view/View;->setNextFocusUpId(I)V
 HSPLandroid/view/View;->setOnApplyWindowInsetsListener(Landroid/view/View$OnApplyWindowInsetsListener;)V
 HSPLandroid/view/View;->setOnClickListener(Landroid/view/View$OnClickListener;)V
-HPLandroid/view/View;->setOnCreateContextMenuListener(Landroid/view/View$OnCreateContextMenuListener;)V
 HSPLandroid/view/View;->setOnFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V
-HSPLandroid/view/View;->setOnHoverListener(Landroid/view/View$OnHoverListener;)V
-HPLandroid/view/View;->setOnKeyListener(Landroid/view/View$OnKeyListener;)V
+HSPLandroid/view/View;->setOnKeyListener(Landroid/view/View$OnKeyListener;)V
 HSPLandroid/view/View;->setOnLongClickListener(Landroid/view/View$OnLongClickListener;)V
-HPLandroid/view/View;->setOnScrollChangeListener(Landroid/view/View$OnScrollChangeListener;)V
-HSPLandroid/view/View;->setOnSystemUiVisibilityChangeListener(Landroid/view/View$OnSystemUiVisibilityChangeListener;)V
 HSPLandroid/view/View;->setOnTouchListener(Landroid/view/View$OnTouchListener;)V
 HSPLandroid/view/View;->setOutlineProvider(Landroid/view/ViewOutlineProvider;)V
-HPLandroid/view/View;->setOutlineProviderFromAttribute(I)V
 HSPLandroid/view/View;->setOverScrollMode(I)V
 HSPLandroid/view/View;->setPadding(IIII)V
 HSPLandroid/view/View;->setPaddingRelative(IIII)V
 HSPLandroid/view/View;->setPivotX(F)V
 HSPLandroid/view/View;->setPivotY(F)V
-HSPLandroid/view/View;->setPointerIcon(Landroid/view/PointerIcon;)V
 HSPLandroid/view/View;->setPressed(Z)V
-HSPLandroid/view/View;->setRight(I)V
+HSPLandroid/view/View;->setPressed(ZFF)V
 HSPLandroid/view/View;->setRotation(F)V
 HSPLandroid/view/View;->setRotationX(F)V
 HSPLandroid/view/View;->setRotationY(F)V
@@ -25689,8 +12761,6 @@
 HSPLandroid/view/View;->setScaleX(F)V
 HSPLandroid/view/View;->setScaleY(F)V
 HSPLandroid/view/View;->setScrollContainer(Z)V
-HSPLandroid/view/View;->setScrollX(I)V
-HSPLandroid/view/View;->setScrollY(I)V
 HSPLandroid/view/View;->setSelected(Z)V
 HSPLandroid/view/View;->setStateDescription(Ljava/lang/CharSequence;)V
 HSPLandroid/view/View;->setStateListAnimator(Landroid/animation/StateListAnimator;)V
@@ -25699,95 +12769,68 @@
 HSPLandroid/view/View;->setTag(ILjava/lang/Object;)V
 HSPLandroid/view/View;->setTag(Ljava/lang/Object;)V
 HSPLandroid/view/View;->setTagInternal(ILjava/lang/Object;)V
-HSPLandroid/view/View;->setTextAlignment(I)V
-HSPLandroid/view/View;->setTextDirection(I)V
 HSPLandroid/view/View;->setTooltipText(Ljava/lang/CharSequence;)V
-HSPLandroid/view/View;->setTop(I)V
-HSPLandroid/view/View;->setTouchDelegate(Landroid/view/TouchDelegate;)V
-HPLandroid/view/View;->setTransitionAlpha(F)V
 HSPLandroid/view/View;->setTransitionName(Ljava/lang/String;)V
-HPLandroid/view/View;->setTransitionVisibility(I)V
 HSPLandroid/view/View;->setTranslationX(F)V
 HSPLandroid/view/View;->setTranslationY(F)V
 HSPLandroid/view/View;->setTranslationZ(F)V
-HSPLandroid/view/View;->setVerticalFadingEdgeEnabled(Z)V
-HPLandroid/view/View;->setVerticalScrollBarEnabled(Z)V
 HSPLandroid/view/View;->setVisibility(I)V
 HSPLandroid/view/View;->setWillNotDraw(Z)V
 HSPLandroid/view/View;->setX(F)V
-HPLandroid/view/View;->setY(F)V
+HSPLandroid/view/View;->setY(F)V
 HSPLandroid/view/View;->shouldDrawRoundScrollbar()Z
 HSPLandroid/view/View;->sizeChange(IIII)V
-HPLandroid/view/View;->skipInvalidate()Z
+HSPLandroid/view/View;->skipInvalidate()Z
 HSPLandroid/view/View;->startAnimation(Landroid/view/animation/Animation;)V
-HSPLandroid/view/View;->startNestedScroll(I)Z
 HSPLandroid/view/View;->stopNestedScroll()V
 HSPLandroid/view/View;->switchDefaultFocusHighlight()V
 HSPLandroid/view/View;->toString()Ljava/lang/String;
 HSPLandroid/view/View;->transformFromViewToWindowSpace([I)V
-HPLandroid/view/View;->transformMatrixToGlobal(Landroid/graphics/Matrix;)V
-HPLandroid/view/View;->transformMatrixToLocal(Landroid/graphics/Matrix;)V
-HPLandroid/view/View;->unFocus(Landroid/view/View;)V
+HSPLandroid/view/View;->unFocus(Landroid/view/View;)V
 HSPLandroid/view/View;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/view/View;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V
+HSPLandroid/view/View;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V
 HSPLandroid/view/View;->updateDisplayListIfDirty()Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->updateFocusedInCluster(Landroid/view/View;I)V
-HPLandroid/view/View;->updateLocalSystemUiVisibility(II)Z
 HSPLandroid/view/View;->updateSystemGestureExclusionRects()V
 HSPLandroid/view/View;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
-HPLandroid/view/View;->willNotDraw()Z
-HPLandroid/view/ViewAnimationHostBridge;-><init>(Landroid/view/View;)V
+HSPLandroid/view/ViewAnimationHostBridge;-><init>(Landroid/view/View;)V
 HSPLandroid/view/ViewAnimationHostBridge;->isAttached()Z
 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;
-PLandroid/view/ViewConfiguration;->getAccessibilityShortcutKeyTimeout()J
-PLandroid/view/ViewConfiguration;->getDeviceGlobalActionKeyTimeout()J
 HSPLandroid/view/ViewConfiguration;->getDoubleTapTimeout()I
-HSPLandroid/view/ViewConfiguration;->getHoverTapSlop()I
-HSPLandroid/view/ViewConfiguration;->getHoverTapTimeout()I
-HSPLandroid/view/ViewConfiguration;->getKeyRepeatDelay()I
-HSPLandroid/view/ViewConfiguration;->getKeyRepeatTimeout()I
 HSPLandroid/view/ViewConfiguration;->getLongPressTimeout()I
-HPLandroid/view/ViewConfiguration;->getMinimumFlingVelocity()I
+HSPLandroid/view/ViewConfiguration;->getPressedStateDuration()I
+HSPLandroid/view/ViewConfiguration;->getScaledAmbiguousGestureMultiplier()F
 HSPLandroid/view/ViewConfiguration;->getScaledDoubleTapSlop()I
 HSPLandroid/view/ViewConfiguration;->getScaledDoubleTapTouchSlop()I
 HSPLandroid/view/ViewConfiguration;->getScaledFadingEdgeLength()I
 HSPLandroid/view/ViewConfiguration;->getScaledHorizontalScrollFactor()F
 HSPLandroid/view/ViewConfiguration;->getScaledHoverSlop()I
-HPLandroid/view/ViewConfiguration;->getScaledMaximumDrawingCacheSize()I
 HSPLandroid/view/ViewConfiguration;->getScaledMaximumFlingVelocity()I
 HSPLandroid/view/ViewConfiguration;->getScaledMinScrollbarTouchTarget()I
 HSPLandroid/view/ViewConfiguration;->getScaledMinimumFlingVelocity()I
-HSPLandroid/view/ViewConfiguration;->getScaledMinimumScalingSpan()I
 HSPLandroid/view/ViewConfiguration;->getScaledOverflingDistance()I
 HSPLandroid/view/ViewConfiguration;->getScaledOverscrollDistance()I
 HSPLandroid/view/ViewConfiguration;->getScaledPagingTouchSlop()I
 HSPLandroid/view/ViewConfiguration;->getScaledScrollBarSize()I
 HSPLandroid/view/ViewConfiguration;->getScaledTouchSlop()I
 HSPLandroid/view/ViewConfiguration;->getScaledVerticalScrollFactor()F
-HSPLandroid/view/ViewConfiguration;->getScaledWindowTouchSlop()I
-PLandroid/view/ViewConfiguration;->getScreenshotChordKeyTimeout()J
 HSPLandroid/view/ViewConfiguration;->getScrollBarFadeDuration()I
 HSPLandroid/view/ViewConfiguration;->getScrollDefaultDelay()I
 HSPLandroid/view/ViewConfiguration;->getScrollFriction()F
 HSPLandroid/view/ViewConfiguration;->getTapTimeout()I
-HPLandroid/view/ViewConfiguration;->isFadingMarqueeEnabled()Z
-HPLandroid/view/ViewDebug;->flagsToString(Ljava/lang/Class;Ljava/lang/String;I)Ljava/lang/String;
-PLandroid/view/ViewDebug;->getFlagMapping(Ljava/lang/Class;Ljava/lang/String;)[Landroid/view/ViewDebug$FlagToString;
-PLandroid/view/ViewDebug;->getMapping(Ljava/lang/Class;Ljava/lang/String;)[Landroid/view/ViewDebug$IntToString;
-PLandroid/view/ViewDebug;->getViewInstanceCount()J
-PLandroid/view/ViewDebug;->getViewRootImplCount()J
-PLandroid/view/ViewDebug;->intToString(Ljava/lang/Class;Ljava/lang/String;I)Ljava/lang/String;
-PLandroid/view/ViewGroup$4;-><init>(Landroid/view/ViewGroup;)V
+HSPLandroid/view/ViewConfiguration;->isFadingMarqueeEnabled()Z
+HSPLandroid/view/ViewDebug;->getViewInstanceCount()J
+HSPLandroid/view/ViewDebug;->getViewRootImplCount()J
+HSPLandroid/view/ViewGroup$4;-><init>(Landroid/view/ViewGroup;)V
 HSPLandroid/view/ViewGroup$4;->endTransition(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;I)V
 HSPLandroid/view/ViewGroup$4;->startTransition(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;I)V
-HPLandroid/view/ViewGroup$ChildListForAutoFillOrContentCapture;->recycle()V
-HPLandroid/view/ViewGroup$LayoutParams;-><init>()V
+HSPLandroid/view/ViewGroup$LayoutParams;-><init>()V
 HSPLandroid/view/ViewGroup$LayoutParams;-><init>(II)V
 HSPLandroid/view/ViewGroup$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-PLandroid/view/ViewGroup$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/ViewGroup$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/ViewGroup$LayoutParams;->resolveLayoutDirection(I)V
 HSPLandroid/view/ViewGroup$LayoutParams;->setBaseAttributes(Landroid/content/res/TypedArray;II)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(II)V
@@ -25804,6 +12847,7 @@
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginEnd(I)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginStart(I)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMargins(IIII)V
+HSPLandroid/view/ViewGroup$TouchTarget;-><init>()V
 HSPLandroid/view/ViewGroup$TouchTarget;->obtain(Landroid/view/View;I)Landroid/view/ViewGroup$TouchTarget;
 HSPLandroid/view/ViewGroup$TouchTarget;->recycle()V
 HSPLandroid/view/ViewGroup;-><init>(Landroid/content/Context;)V
@@ -25813,10 +12857,9 @@
 HSPLandroid/view/ViewGroup;->addFocusables(Ljava/util/ArrayList;II)V
 HSPLandroid/view/ViewGroup;->addInArray(Landroid/view/View;I)V
 HSPLandroid/view/ViewGroup;->addTouchTarget(Landroid/view/View;I)Landroid/view/ViewGroup$TouchTarget;
-HPLandroid/view/ViewGroup;->addTransientView(Landroid/view/View;I)V
 HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;I)V
-HPLandroid/view/ViewGroup;->addView(Landroid/view/View;II)V
+HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;II)V
 HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/ViewGroup;->addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)Z
@@ -25824,7 +12867,7 @@
 HSPLandroid/view/ViewGroup;->addViewInner(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;Z)V
 HSPLandroid/view/ViewGroup;->attachViewToParent(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/ViewGroup;->bringChildToFront(Landroid/view/View;)V
-HPLandroid/view/ViewGroup;->brokenDispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
+HSPLandroid/view/ViewGroup;->brokenDispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
 HSPLandroid/view/ViewGroup;->buildOrderedChildList()Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->buildTouchDispatchChildList()Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->cancelAndClearTouchTargets(Landroid/view/MotionEvent;)V
@@ -25833,12 +12876,10 @@
 HSPLandroid/view/ViewGroup;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
 HSPLandroid/view/ViewGroup;->childDrawableStateChanged(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->childHasTransientStateChanged(Landroid/view/View;Z)V
-HSPLandroid/view/ViewGroup;->cleanupLayoutState(Landroid/view/View;)V
-PLandroid/view/ViewGroup;->clearCachedLayoutMode()V
-HPLandroid/view/ViewGroup;->clearChildFocus(Landroid/view/View;)V
-HPLandroid/view/ViewGroup;->clearDefaultFocus(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->clearCachedLayoutMode()V
+HSPLandroid/view/ViewGroup;->clearChildFocus(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->clearDisappearingChildren()V
-HPLandroid/view/ViewGroup;->clearFocus()V
+HSPLandroid/view/ViewGroup;->clearFocus()V
 HSPLandroid/view/ViewGroup;->clearTouchTargets()V
 HSPLandroid/view/ViewGroup;->destroyHardwareResources()V
 HSPLandroid/view/ViewGroup;->detachAllViewsFromParent()V
@@ -25847,29 +12888,21 @@
 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
-HPLandroid/view/ViewGroup;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLandroid/view/ViewGroup;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLandroid/view/ViewGroup;->dispatchDetachedFromWindow()V
 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
-HPLandroid/view/ViewGroup;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
-HPLandroid/view/ViewGroup;->dispatchKeyEventPreIme(Landroid/view/KeyEvent;)Z
-HPLandroid/view/ViewGroup;->dispatchProvideAutofillStructure(Landroid/view/ViewStructure;I)V
-HPLandroid/view/ViewGroup;->dispatchProvideStructure(Landroid/view/ViewStructure;)V
-HSPLandroid/view/ViewGroup;->dispatchRestoreInstanceState(Landroid/util/SparseArray;)V
+HSPLandroid/view/ViewGroup;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroid/view/ViewGroup;->dispatchKeyEventPreIme(Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewGroup;->dispatchSaveInstanceState(Landroid/util/SparseArray;)V
-HPLandroid/view/ViewGroup;->dispatchScreenStateChanged(I)V
-HSPLandroid/view/ViewGroup;->dispatchSetActivated(Z)V
+HSPLandroid/view/ViewGroup;->dispatchScreenStateChanged(I)V
 HSPLandroid/view/ViewGroup;->dispatchSetPressed(Z)V
 HSPLandroid/view/ViewGroup;->dispatchSetSelected(Z)V
-HSPLandroid/view/ViewGroup;->dispatchStartTemporaryDetach()V
-HSPLandroid/view/ViewGroup;->dispatchSystemUiVisibilityChanged(I)V
-HSPLandroid/view/ViewGroup;->dispatchThawSelfOnly(Landroid/util/SparseArray;)V
 HSPLandroid/view/ViewGroup;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/ViewGroup;->dispatchTransformedTouchEvent(Landroid/view/MotionEvent;ZLandroid/view/View;I)Z
-HPLandroid/view/ViewGroup;->dispatchUnhandledKeyEvent(Landroid/view/KeyEvent;)Landroid/view/View;
+HSPLandroid/view/ViewGroup;->dispatchUnhandledKeyEvent(Landroid/view/KeyEvent;)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->dispatchViewAdded(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->dispatchViewRemoved(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->dispatchVisibilityAggregated(Z)Z
@@ -25883,16 +12916,11 @@
 HSPLandroid/view/ViewGroup;->exitHoverTargets()V
 HSPLandroid/view/ViewGroup;->exitTooltipHoverTargets()V
 HSPLandroid/view/ViewGroup;->findFocus()Landroid/view/View;
-HPLandroid/view/ViewGroup;->findViewByPredicateTraversal(Ljava/util/function/Predicate;Landroid/view/View;)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->findViewTraversal(I)Landroid/view/View;
-HPLandroid/view/ViewGroup;->findViewWithTagTraversal(Ljava/lang/Object;)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->finishAnimatingView(Landroid/view/View;Landroid/view/animation/Animation;)V
-HPLandroid/view/ViewGroup;->focusSearch(Landroid/view/View;I)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->focusableViewAvailable(Landroid/view/View;)V
-HPLandroid/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;
-HPLandroid/view/ViewGroup;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/view/ViewGroup;->getAndVerifyPreorderedIndex(IIZ)I
 HSPLandroid/view/ViewGroup;->getAndVerifyPreorderedView(Ljava/util/ArrayList;[Landroid/view/View;I)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->getChildAt(I)Landroid/view/View;
@@ -25905,19 +12933,13 @@
 HSPLandroid/view/ViewGroup;->getClipToPadding()Z
 HSPLandroid/view/ViewGroup;->getDescendantFocusability()I
 HSPLandroid/view/ViewGroup;->getFocusedChild()Landroid/view/View;
-HPLandroid/view/ViewGroup;->getLayoutMode()I
 HSPLandroid/view/ViewGroup;->getLayoutTransition()Landroid/animation/LayoutTransition;
-HPLandroid/view/ViewGroup;->getNestedScrollAxes()I
-HPLandroid/view/ViewGroup;->getNumChildrenForAccessibility()I
-HPLandroid/view/ViewGroup;->getOverlay()Landroid/view/ViewGroupOverlay;
-HPLandroid/view/ViewGroup;->getOverlay()Landroid/view/ViewOverlay;
+HSPLandroid/view/ViewGroup;->getTempPoint()[F
 HSPLandroid/view/ViewGroup;->getTouchTarget(Landroid/view/View;)Landroid/view/ViewGroup$TouchTarget;
 HSPLandroid/view/ViewGroup;->getTouchscreenBlocksFocus()Z
-HPLandroid/view/ViewGroup;->getTransientView(I)Landroid/view/View;
-HPLandroid/view/ViewGroup;->getTransientViewCount()I
 HSPLandroid/view/ViewGroup;->handleFocusGainInternal(ILandroid/graphics/Rect;)V
-PLandroid/view/ViewGroup;->hasBooleanFlag(I)Z
-PLandroid/view/ViewGroup;->hasChildWithZ()Z
+HSPLandroid/view/ViewGroup;->hasBooleanFlag(I)Z
+HSPLandroid/view/ViewGroup;->hasChildWithZ()Z
 HSPLandroid/view/ViewGroup;->hasDefaultFocus()Z
 HSPLandroid/view/ViewGroup;->hasFocus()Z
 HSPLandroid/view/ViewGroup;->hasFocusable(ZZ)Z
@@ -25929,52 +12951,45 @@
 HSPLandroid/view/ViewGroup;->initViewGroup()V
 HSPLandroid/view/ViewGroup;->internalSetPadding(IIII)V
 HSPLandroid/view/ViewGroup;->invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V
-PLandroid/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;->isTransitionGroup()Z
 HSPLandroid/view/ViewGroup;->isViewTransitioning(Landroid/view/View;)Z
 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
-HSPLandroid/view/ViewGroup;->measureChildren(II)V
 HSPLandroid/view/ViewGroup;->notifySubtreeAccessibilityStateChangedIfNeeded()V
-HPLandroid/view/ViewGroup;->offsetRectBetweenParentAndChild(Landroid/view/View;Landroid/graphics/Rect;ZZ)V
-HPLandroid/view/ViewGroup;->offsetRectIntoDescendantCoords(Landroid/view/View;Landroid/graphics/Rect;)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
 HSPLandroid/view/ViewGroup;->onChildVisibilityChanged(Landroid/view/View;II)V
 HSPLandroid/view/ViewGroup;->onCreateDrawableState(I)[I
 HSPLandroid/view/ViewGroup;->onDescendantInvalidated(Landroid/view/View;Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->onDetachedFromWindow()V
 HSPLandroid/view/ViewGroup;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
-PLandroid/view/ViewGroup;->onRequestFocusInDescendants(ILandroid/graphics/Rect;)Z
+HSPLandroid/view/ViewGroup;->onRequestFocusInDescendants(ILandroid/graphics/Rect;)Z
 HSPLandroid/view/ViewGroup;->onSetLayoutParams(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/ViewGroup;->onStartNestedScroll(Landroid/view/View;Landroid/view/View;I)Z
 HSPLandroid/view/ViewGroup;->onViewAdded(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->onViewRemoved(Landroid/view/View;)V
-HPLandroid/view/ViewGroup;->populateChildrenForAutofill(Ljava/util/ArrayList;I)V
-HPLandroid/view/ViewGroup;->recomputeViewAttributes(Landroid/view/View;)V
-HPLandroid/view/ViewGroup;->recreateChildDisplayList(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->recreateChildDisplayList(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->removeAllViews()V
 HSPLandroid/view/ViewGroup;->removeAllViewsInLayout()V
 HSPLandroid/view/ViewGroup;->removeDetachedView(Landroid/view/View;Z)V
 HSPLandroid/view/ViewGroup;->removeFromArray(I)V
 HSPLandroid/view/ViewGroup;->removePointersFromTouchTargets(I)V
-HPLandroid/view/ViewGroup;->removeTransientView(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->removeView(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->removeViewAt(I)V
 HSPLandroid/view/ViewGroup;->removeViewInLayout(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->removeViewInternal(ILandroid/view/View;)V
+HSPLandroid/view/ViewGroup;->removeViewInternal(Landroid/view/View;)Z
 HSPLandroid/view/ViewGroup;->requestChildFocus(Landroid/view/View;Landroid/view/View;)V
-HPLandroid/view/ViewGroup;->requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z
-HPLandroid/view/ViewGroup;->requestDisallowInterceptTouchEvent(Z)V
+HSPLandroid/view/ViewGroup;->requestDisallowInterceptTouchEvent(Z)V
 HSPLandroid/view/ViewGroup;->requestFocus(ILandroid/graphics/Rect;)Z
-HSPLandroid/view/ViewGroup;->requestTransitionStart(Landroid/animation/LayoutTransition;)V
-HPLandroid/view/ViewGroup;->requestTransparentRegion(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->resetCancelNextUpFlag(Landroid/view/View;)Z
 HSPLandroid/view/ViewGroup;->resetResolvedDrawables()V
 HSPLandroid/view/ViewGroup;->resetResolvedLayoutDirection()V
@@ -25990,115 +13005,80 @@
 HSPLandroid/view/ViewGroup;->resolveRtlPropertiesIfNeeded()Z
 HSPLandroid/view/ViewGroup;->resolveTextAlignment()Z
 HSPLandroid/view/ViewGroup;->resolveTextDirection()Z
-PLandroid/view/ViewGroup;->restoreDefaultFocus()Z
-HPLandroid/view/ViewGroup;->setAddStatesFromChildren(Z)V
 HSPLandroid/view/ViewGroup;->setAlwaysDrawnWithCacheEnabled(Z)V
-PLandroid/view/ViewGroup;->setBooleanFlag(IZ)V
+HSPLandroid/view/ViewGroup;->setBooleanFlag(IZ)V
 HSPLandroid/view/ViewGroup;->setChildrenDrawingCacheEnabled(Z)V
 HSPLandroid/view/ViewGroup;->setChildrenDrawingOrderEnabled(Z)V
 HSPLandroid/view/ViewGroup;->setClipChildren(Z)V
 HSPLandroid/view/ViewGroup;->setClipToPadding(Z)V
-HPLandroid/view/ViewGroup;->setDefaultFocus(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->setDescendantFocusability(I)V
-HPLandroid/view/ViewGroup;->setLayoutAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V
 HSPLandroid/view/ViewGroup;->setLayoutTransition(Landroid/animation/LayoutTransition;)V
 HSPLandroid/view/ViewGroup;->setMotionEventSplittingEnabled(Z)V
 HSPLandroid/view/ViewGroup;->setOnHierarchyChangeListener(Landroid/view/ViewGroup$OnHierarchyChangeListener;)V
 HSPLandroid/view/ViewGroup;->setTouchscreenBlocksFocus(Z)V
-HSPLandroid/view/ViewGroup;->setTransitionGroup(Z)V
 HSPLandroid/view/ViewGroup;->shouldBlockFocusForTouchscreen()Z
 HSPLandroid/view/ViewGroup;->shouldDelayChildPressedState()Z
-HPLandroid/view/ViewGroup;->startViewTransition(Landroid/view/View;)V
-HPLandroid/view/ViewGroup;->suppressLayout(Z)V
-PLandroid/view/ViewGroup;->touchAccessibilityNodeProviderIfNeeded(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->touchAccessibilityNodeProviderIfNeeded(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->transformPointToViewLocal([FLandroid/view/View;)V
-HPLandroid/view/ViewGroup;->unFocus(Landroid/view/View;)V
-HPLandroid/view/ViewGroup;->updateLocalSystemUiVisibility(II)Z
-HPLandroid/view/ViewGroup;->updateViewLayout(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
-HPLandroid/view/ViewGroupOverlay;-><init>(Landroid/content/Context;Landroid/view/View;)V
-HPLandroid/view/ViewGroupOverlay;->add(Landroid/view/View;)V
-HPLandroid/view/ViewGroupOverlay;->remove(Landroid/view/View;)V
 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
-HPLandroid/view/ViewOverlay$OverlayViewGroup;-><init>(Landroid/content/Context;Landroid/view/View;)V
-HPLandroid/view/ViewOverlay$OverlayViewGroup;->add(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/view/ViewOverlay$OverlayViewGroup;->add(Landroid/view/View;)V
-HPLandroid/view/ViewOverlay$OverlayViewGroup;->dispatchDraw(Landroid/graphics/Canvas;)V
-HPLandroid/view/ViewOverlay$OverlayViewGroup;->invalidate(IIII)V
-HPLandroid/view/ViewOverlay$OverlayViewGroup;->invalidate(Landroid/graphics/Rect;)V
-HPLandroid/view/ViewOverlay$OverlayViewGroup;->invalidate(Z)V
-HPLandroid/view/ViewOverlay$OverlayViewGroup;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/view/ViewOverlay$OverlayViewGroup;->invalidateParentIfNeeded()V
-HPLandroid/view/ViewOverlay$OverlayViewGroup;->isEmpty()Z
-HPLandroid/view/ViewOverlay$OverlayViewGroup;->onDescendantInvalidated(Landroid/view/View;Landroid/view/View;)V
-HPLandroid/view/ViewOverlay$OverlayViewGroup;->remove(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/view/ViewOverlay$OverlayViewGroup;->remove(Landroid/view/View;)V
-HPLandroid/view/ViewOverlay;-><init>(Landroid/content/Context;Landroid/view/View;)V
-HPLandroid/view/ViewOverlay;->add(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/view/ViewOverlay;->getOverlayView()Landroid/view/ViewGroup;
-HPLandroid/view/ViewOverlay;->isEmpty()Z
-HPLandroid/view/ViewOverlay;->remove(Landroid/graphics/drawable/Drawable;)V
-PLandroid/view/ViewPropertyAnimator$1;-><init>(Landroid/view/ViewPropertyAnimator;)V
+HSPLandroid/view/ViewPropertyAnimator$1;-><init>(Landroid/view/ViewPropertyAnimator;)V
 HSPLandroid/view/ViewPropertyAnimator$1;->run()V
-HPLandroid/view/ViewPropertyAnimator$2;->run()V
-HPLandroid/view/ViewPropertyAnimator$3;->run()V
-PLandroid/view/ViewPropertyAnimator$AnimatorEventListener;-><init>(Landroid/view/ViewPropertyAnimator;)V
-PLandroid/view/ViewPropertyAnimator$AnimatorEventListener;-><init>(Landroid/view/ViewPropertyAnimator;Landroid/view/ViewPropertyAnimator$1;)V
+HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;-><init>(Landroid/view/ViewPropertyAnimator;)V
+HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;-><init>(Landroid/view/ViewPropertyAnimator;Landroid/view/ViewPropertyAnimator$1;)V
 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
-HSPLandroid/view/ViewPropertyAnimator$PropertyBundle;->cancel(I)Z
+HSPLandroid/view/ViewPropertyAnimator$NameValuesHolder;-><init>(IFF)V
+HSPLandroid/view/ViewPropertyAnimator$PropertyBundle;-><init>(ILjava/util/ArrayList;)V
 HSPLandroid/view/ViewPropertyAnimator;-><init>(Landroid/view/View;)V
+HSPLandroid/view/ViewPropertyAnimator;->access$100(Landroid/view/ViewPropertyAnimator;)V
+HSPLandroid/view/ViewPropertyAnimator;->access$200(Landroid/view/ViewPropertyAnimator;)Ljava/util/HashMap;
+HSPLandroid/view/ViewPropertyAnimator;->access$300(Landroid/view/ViewPropertyAnimator;)Ljava/util/HashMap;
+HSPLandroid/view/ViewPropertyAnimator;->access$400(Landroid/view/ViewPropertyAnimator;)Landroid/animation/Animator$AnimatorListener;
+HSPLandroid/view/ViewPropertyAnimator;->access$500(Landroid/view/ViewPropertyAnimator;)Ljava/util/HashMap;
+HSPLandroid/view/ViewPropertyAnimator;->access$600(Landroid/view/ViewPropertyAnimator;)Ljava/util/HashMap;
+HSPLandroid/view/ViewPropertyAnimator;->access$700(Landroid/view/ViewPropertyAnimator;)Ljava/util/HashMap;
+HSPLandroid/view/ViewPropertyAnimator;->access$800(Landroid/view/ViewPropertyAnimator;IF)V
+HSPLandroid/view/ViewPropertyAnimator;->access$900(Landroid/view/ViewPropertyAnimator;)Landroid/animation/ValueAnimator$AnimatorUpdateListener;
 HSPLandroid/view/ViewPropertyAnimator;->alpha(F)Landroid/view/ViewPropertyAnimator;
-HPLandroid/view/ViewPropertyAnimator;->animateProperty(IF)V
-HPLandroid/view/ViewPropertyAnimator;->animatePropertyBy(IF)V
+HSPLandroid/view/ViewPropertyAnimator;->animateProperty(IF)V
 HSPLandroid/view/ViewPropertyAnimator;->animatePropertyBy(IFF)V
 HSPLandroid/view/ViewPropertyAnimator;->cancel()V
 HSPLandroid/view/ViewPropertyAnimator;->getValue(I)F
-HPLandroid/view/ViewPropertyAnimator;->scaleX(F)Landroid/view/ViewPropertyAnimator;
-HPLandroid/view/ViewPropertyAnimator;->scaleY(F)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->setDuration(J)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->setListener(Landroid/animation/Animator$AnimatorListener;)Landroid/view/ViewPropertyAnimator;
-HPLandroid/view/ViewPropertyAnimator;->setStartDelay(J)Landroid/view/ViewPropertyAnimator;
-HPLandroid/view/ViewPropertyAnimator;->setUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)Landroid/view/ViewPropertyAnimator;
-HPLandroid/view/ViewPropertyAnimator;->setValue(IF)V
+HSPLandroid/view/ViewPropertyAnimator;->setValue(IF)V
 HSPLandroid/view/ViewPropertyAnimator;->start()V
 HSPLandroid/view/ViewPropertyAnimator;->startAnimation()V
-HPLandroid/view/ViewPropertyAnimator;->translationX(F)Landroid/view/ViewPropertyAnimator;
-HPLandroid/view/ViewPropertyAnimator;->translationY(F)Landroid/view/ViewPropertyAnimator;
-HPLandroid/view/ViewPropertyAnimator;->translationYBy(F)Landroid/view/ViewPropertyAnimator;
-HPLandroid/view/ViewPropertyAnimator;->withEndAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
-HPLandroid/view/ViewPropertyAnimator;->withLayer()Landroid/view/ViewPropertyAnimator;
-HPLandroid/view/ViewPropertyAnimator;->withStartAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
-HPLandroid/view/ViewPropertyAnimator;->y(F)Landroid/view/ViewPropertyAnimator;
+HSPLandroid/view/ViewPropertyAnimator;->translationY(F)Landroid/view/ViewPropertyAnimator;
+HSPLandroid/view/ViewPropertyAnimator;->withEndAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewRootImpl$1;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$1;->onDisplayChanged(I)V
-PLandroid/view/ViewRootImpl$1;->toViewScreenState(I)I
+HSPLandroid/view/ViewRootImpl$1;->toViewScreenState(I)I
 HSPLandroid/view/ViewRootImpl$4;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$4;->run()V
 HSPLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;-><init>(Landroid/view/ViewRootImpl;)V
-PLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;->ensureNoConnection()V
-PLandroid/view/ViewRootImpl$AsyncInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
+HSPLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;->ensureNoConnection()V
+HSPLandroid/view/ViewRootImpl$AsyncInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
 HSPLandroid/view/ViewRootImpl$AsyncInputStage;->apply(Landroid/view/ViewRootImpl$QueuedInputEvent;I)V
-HPLandroid/view/ViewRootImpl$AsyncInputStage;->defer(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
-HPLandroid/view/ViewRootImpl$AsyncInputStage;->dequeue(Landroid/view/ViewRootImpl$QueuedInputEvent;Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$AsyncInputStage;->defer(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$AsyncInputStage;->dequeue(Landroid/view/ViewRootImpl$QueuedInputEvent;Landroid/view/ViewRootImpl$QueuedInputEvent;)V
 HSPLandroid/view/ViewRootImpl$AsyncInputStage;->forward(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
 HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputImmediatelyRunnable;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;->run()V
-PLandroid/view/ViewRootImpl$EarlyPostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
+HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
 HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
-HPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processKeyEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processKeyEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processMotionEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processPointerEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
-PLandroid/view/ViewRootImpl$GfxInfo;-><init>()V
 HSPLandroid/view/ViewRootImpl$HighContrastTextManager;-><init>(Landroid/view/ViewRootImpl;)V
-PLandroid/view/ViewRootImpl$ImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
-HPLandroid/view/ViewRootImpl$ImeInputStage;->onFinishedInputEvent(Ljava/lang/Object;Z)V
-HPLandroid/view/ViewRootImpl$ImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$ImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
+HSPLandroid/view/ViewRootImpl$ImeInputStage;->onFinishedInputEvent(Ljava/lang/Object;Z)V
+HSPLandroid/view/ViewRootImpl$ImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$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
@@ -26111,12 +13091,16 @@
 HSPLandroid/view/ViewRootImpl$InputStage;->traceEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;J)V
 HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->addView(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->postIfNeededLocked()V
 HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->removeView(Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->run()V
-PLandroid/view/ViewRootImpl$NativePostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
+HSPLandroid/view/ViewRootImpl$NativePostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
 HSPLandroid/view/ViewRootImpl$NativePostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
-PLandroid/view/ViewRootImpl$NativePreImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
-HPLandroid/view/ViewRootImpl$NativePreImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$NativePreImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
+HSPLandroid/view/ViewRootImpl$NativePreImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$QueuedInputEvent;-><init>()V
+HSPLandroid/view/ViewRootImpl$QueuedInputEvent;-><init>(Landroid/view/ViewRootImpl$1;)V
+HSPLandroid/view/ViewRootImpl$QueuedInputEvent;->shouldSendToSynthesizer()Z
 HSPLandroid/view/ViewRootImpl$QueuedInputEvent;->shouldSkipIme()Z
 HSPLandroid/view/ViewRootImpl$SyntheticInputStage;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
@@ -26124,94 +13108,101 @@
 HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onWindowFocusChanged(Z)V
 HSPLandroid/view/ViewRootImpl$SyntheticJoystickHandler$JoystickAxesState;-><init>(Landroid/view/ViewRootImpl$SyntheticJoystickHandler;)V
-PLandroid/view/ViewRootImpl$SyntheticJoystickHandler$JoystickAxesState;->resetState()V
-PLandroid/view/ViewRootImpl$SyntheticJoystickHandler;-><init>(Landroid/view/ViewRootImpl;)V
-PLandroid/view/ViewRootImpl$SyntheticJoystickHandler;->access$2600(Landroid/view/ViewRootImpl$SyntheticJoystickHandler;)V
+HSPLandroid/view/ViewRootImpl$SyntheticJoystickHandler$JoystickAxesState;->resetState()V
+HSPLandroid/view/ViewRootImpl$SyntheticJoystickHandler;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$SyntheticJoystickHandler;->access$2600(Landroid/view/ViewRootImpl$SyntheticJoystickHandler;)V
 HSPLandroid/view/ViewRootImpl$SyntheticJoystickHandler;->cancel()V
-PLandroid/view/ViewRootImpl$SyntheticKeyboardHandler;-><init>(Landroid/view/ViewRootImpl;)V
-PLandroid/view/ViewRootImpl$SyntheticTouchNavigationHandler$1;-><init>(Landroid/view/ViewRootImpl$SyntheticTouchNavigationHandler;)V
-PLandroid/view/ViewRootImpl$SyntheticTouchNavigationHandler;-><init>(Landroid/view/ViewRootImpl;)V
-PLandroid/view/ViewRootImpl$SyntheticTrackballHandler;-><init>(Landroid/view/ViewRootImpl;)V
-PLandroid/view/ViewRootImpl$TrackballAxis;-><init>()V
+HSPLandroid/view/ViewRootImpl$SyntheticKeyboardHandler;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$SyntheticTouchNavigationHandler$1;-><init>(Landroid/view/ViewRootImpl$SyntheticTouchNavigationHandler;)V
+HSPLandroid/view/ViewRootImpl$SyntheticTouchNavigationHandler;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$SyntheticTrackballHandler;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$SystemUiVisibilityInfo;-><init>()V
+HSPLandroid/view/ViewRootImpl$TrackballAxis;-><init>()V
 HSPLandroid/view/ViewRootImpl$TraversalRunnable;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$TraversalRunnable;->run()V
 HSPLandroid/view/ViewRootImpl$UnhandledKeyManager;-><init>()V
 HSPLandroid/view/ViewRootImpl$UnhandledKeyManager;-><init>(Landroid/view/ViewRootImpl$1;)V
-HPLandroid/view/ViewRootImpl$UnhandledKeyManager;->dispatch(Landroid/view/View;Landroid/view/KeyEvent;)Z
-HPLandroid/view/ViewRootImpl$UnhandledKeyManager;->preDispatch(Landroid/view/KeyEvent;)V
-HPLandroid/view/ViewRootImpl$UnhandledKeyManager;->preViewDispatch(Landroid/view/KeyEvent;)Z
-PLandroid/view/ViewRootImpl$ViewPostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
+HSPLandroid/view/ViewRootImpl$UnhandledKeyManager;->dispatch(Landroid/view/View;Landroid/view/KeyEvent;)Z
+HSPLandroid/view/ViewRootImpl$UnhandledKeyManager;->preDispatch(Landroid/view/KeyEvent;)V
+HSPLandroid/view/ViewRootImpl$UnhandledKeyManager;->preViewDispatch(Landroid/view/KeyEvent;)Z
+HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
 HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->maybeUpdatePointerIcon(Landroid/view/MotionEvent;)V
 HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
 HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
-HPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->processKeyEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->processKeyEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->processPointerEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
-PLandroid/view/ViewRootImpl$ViewPreImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
-HPLandroid/view/ViewRootImpl$ViewPreImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$ViewPreImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
+HSPLandroid/view/ViewRootImpl$ViewPreImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$ViewPreImeInputStage;->processKeyEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$ViewRootHandler;-><init>(Landroid/view/ViewRootImpl;)V
-PLandroid/view/ViewRootImpl$ViewRootHandler;->getMessageName(Landroid/os/Message;)Ljava/lang/String;
 HSPLandroid/view/ViewRootImpl$ViewRootHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/view/ViewRootImpl$ViewRootHandler;->sendMessageAtTime(Landroid/os/Message;J)Z
 HSPLandroid/view/ViewRootImpl$W;-><init>(Landroid/view/ViewRootImpl;)V
-PLandroid/view/ViewRootImpl$W;->closeSystemDialogs(Ljava/lang/String;)V
+HSPLandroid/view/ViewRootImpl$W;->closeSystemDialogs(Ljava/lang/String;)V
 HSPLandroid/view/ViewRootImpl$W;->dispatchAppVisibility(Z)V
-HSPLandroid/view/ViewRootImpl$W;->dispatchSystemUiVisibilityChanged(IIII)V
-PLandroid/view/ViewRootImpl$W;->dispatchWindowShown()V
-PLandroid/view/ViewRootImpl$W;->insetsChanged(Landroid/view/InsetsState;)V
-HSPLandroid/view/ViewRootImpl$W;->moved(II)V
+HSPLandroid/view/ViewRootImpl$W;->insetsChanged(Landroid/view/InsetsState;)V
 HSPLandroid/view/ViewRootImpl$W;->resized(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZILandroid/view/DisplayCutout$ParcelableWrapper;)V
 HSPLandroid/view/ViewRootImpl$W;->windowFocusChanged(ZZ)V
-PLandroid/view/ViewRootImpl$WindowInputEventReceiver;-><init>(Landroid/view/ViewRootImpl;Landroid/view/InputChannel;Landroid/os/Looper;)V
-PLandroid/view/ViewRootImpl$WindowInputEventReceiver;->dispose()V
+HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;-><init>(Landroid/view/ViewRootImpl;Landroid/view/InputChannel;Landroid/os/Looper;)V
+HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->dispose()V
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onBatchedInputEventPending()V
+HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onFocusEvent(ZZ)V
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V
-PLandroid/view/ViewRootImpl;-><init>(Landroid/content/Context;Landroid/view/Display;)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;)V
-HSPLandroid/view/ViewRootImpl;->access$1000(Landroid/view/ViewRootImpl;Landroid/graphics/Rect;)V
-PLandroid/view/ViewRootImpl;->access$300(Landroid/view/ViewRootImpl;)Landroid/util/MergedConfiguration;
-PLandroid/view/ViewRootImpl;->access$3502(Landroid/view/ViewRootImpl;Z)Z
-PLandroid/view/ViewRootImpl;->access$3600(Landroid/view/ViewRootImpl;Z)V
+HSPLandroid/view/ViewRootImpl;->access$1100(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl;->access$1600(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl;->access$1900(Landroid/view/ViewRootImpl;)Landroid/view/ImeFocusController;
+HSPLandroid/view/ViewRootImpl;->access$2000(Landroid/view/ViewRootImpl;Landroid/view/KeyEvent;)Z
+HSPLandroid/view/ViewRootImpl;->access$2100(Landroid/view/ViewRootImpl;)Landroid/view/autofill/AutofillManager;
+HSPLandroid/view/ViewRootImpl;->access$2200(Landroid/view/ViewRootImpl;)Landroid/view/ViewRootImpl$UnhandledKeyManager;
+HSPLandroid/view/ViewRootImpl;->access$2300(Landroid/view/ViewRootImpl;Landroid/view/MotionEvent;)V
+HSPLandroid/view/ViewRootImpl;->access$300(Landroid/view/ViewRootImpl;)Landroid/util/MergedConfiguration;
+HSPLandroid/view/ViewRootImpl;->access$3502(Landroid/view/ViewRootImpl;Z)Z
+HSPLandroid/view/ViewRootImpl;->access$3600(Landroid/view/ViewRootImpl;Z)V
+HSPLandroid/view/ViewRootImpl;->access$3800(Landroid/view/ViewRootImpl;)Landroid/view/InputEventCompatProcessor;
 HSPLandroid/view/ViewRootImpl;->access$4000(Landroid/view/ViewRootImpl;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZILandroid/view/DisplayCutout$ParcelableWrapper;)V
-PLandroid/view/ViewRootImpl;->access$4100(Landroid/view/ViewRootImpl;Landroid/view/InsetsState;)V
+HSPLandroid/view/ViewRootImpl;->access$4100(Landroid/view/ViewRootImpl;Landroid/view/InsetsState;)V
 HSPLandroid/view/ViewRootImpl;->access$600(Landroid/view/ViewRootImpl;Landroid/graphics/Rect;)V
-PLandroid/view/ViewRootImpl;->access$800(Landroid/view/View;)V
-PLandroid/view/ViewRootImpl;->access$900(Landroid/view/ViewRootImpl;)Landroid/view/InsetsController;
+HSPLandroid/view/ViewRootImpl;->access$700(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl;->access$800(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->access$900(Landroid/view/ViewRootImpl;)Landroid/view/InsetsController;
 HSPLandroid/view/ViewRootImpl;->addConfigCallback(Landroid/view/ViewRootImpl$ConfigChangedCallback;)V
 HSPLandroid/view/ViewRootImpl;->addWindowCallbacks(Landroid/view/WindowCallbacks;)V
 HSPLandroid/view/ViewRootImpl;->adjustLayoutParamsForCompatibility(Landroid/view/WindowManager$LayoutParams;)V
-PLandroid/view/ViewRootImpl;->applyKeepScreenOnFlag(Landroid/view/WindowManager$LayoutParams;)V
+HSPLandroid/view/ViewRootImpl;->applyKeepScreenOnFlag(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ViewRootImpl;->canResolveTextDirection()Z
-PLandroid/view/ViewRootImpl;->cancelInvalidate(Landroid/view/View;)V
-HPLandroid/view/ViewRootImpl;->checkForLeavingTouchModeAndConsume(Landroid/view/KeyEvent;)Z
-PLandroid/view/ViewRootImpl;->checkThread()V
+HSPLandroid/view/ViewRootImpl;->cancelInvalidate(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->checkForLeavingTouchModeAndConsume(Landroid/view/KeyEvent;)Z
+HSPLandroid/view/ViewRootImpl;->checkThread()V
 HSPLandroid/view/ViewRootImpl;->childDrawableStateChanged(Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->childHasTransientStateChanged(Landroid/view/View;Z)V
-HPLandroid/view/ViewRootImpl;->clearChildFocus(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->clearChildFocus(Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->collectViewAttributes()Z
 HSPLandroid/view/ViewRootImpl;->controlInsetsForCompatibility(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ViewRootImpl;->deliverInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
-PLandroid/view/ViewRootImpl;->destroyHardwareRenderer()V
+HSPLandroid/view/ViewRootImpl;->destroyHardwareRenderer()V
 HSPLandroid/view/ViewRootImpl;->destroyHardwareResources()V
 HSPLandroid/view/ViewRootImpl;->destroySurface()V
 HSPLandroid/view/ViewRootImpl;->die(Z)Z
 HSPLandroid/view/ViewRootImpl;->dipToPx(I)I
-PLandroid/view/ViewRootImpl;->dispatchAppVisibility(Z)V
+HSPLandroid/view/ViewRootImpl;->dispatchAppVisibility(Z)V
 HSPLandroid/view/ViewRootImpl;->dispatchApplyInsets(Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->dispatchCheckFocus()V
-PLandroid/view/ViewRootImpl;->dispatchCloseSystemDialogs(Ljava/lang/String;)V
+HSPLandroid/view/ViewRootImpl;->dispatchCloseSystemDialogs(Ljava/lang/String;)V
 HSPLandroid/view/ViewRootImpl;->dispatchDetachedFromWindow()V
-PLandroid/view/ViewRootImpl;->dispatchInsetsChanged(Landroid/view/InsetsState;)V
-HSPLandroid/view/ViewRootImpl;->dispatchMoved(II)V
+HSPLandroid/view/ViewRootImpl;->dispatchInsetsChanged(Landroid/view/InsetsState;)V
+HSPLandroid/view/ViewRootImpl;->dispatchInvalidateDelayed(Landroid/view/View;J)V
+HSPLandroid/view/ViewRootImpl;->dispatchInvalidateOnAnimation(Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->dispatchResized(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZILandroid/view/DisplayCutout$ParcelableWrapper;)V
-PLandroid/view/ViewRootImpl;->dispatchWindowShown()V
-HPLandroid/view/ViewRootImpl;->doConsumeBatchedInput(J)V
+HSPLandroid/view/ViewRootImpl;->dispatchUnhandledKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroid/view/ViewRootImpl;->doConsumeBatchedInput(J)V
 HSPLandroid/view/ViewRootImpl;->doDie()V
 HSPLandroid/view/ViewRootImpl;->doProcessInputEvents()V
 HSPLandroid/view/ViewRootImpl;->doTraversal()V
 HSPLandroid/view/ViewRootImpl;->draw(Z)Z
 HSPLandroid/view/ViewRootImpl;->drawAccessibilityFocusedDrawableIfNeeded(Landroid/graphics/Canvas;)V
-PLandroid/view/ViewRootImpl;->drawPending()V
-PLandroid/view/ViewRootImpl;->drawSoftware(Landroid/view/Surface;Landroid/view/View$AttachInfo;IIZLandroid/graphics/Rect;Landroid/graphics/Rect;)Z
+HSPLandroid/view/ViewRootImpl;->drawPending()V
 HSPLandroid/view/ViewRootImpl;->enableHardwareAcceleration(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ViewRootImpl;->endDragResizing()V
 HSPLandroid/view/ViewRootImpl;->enqueueInputEvent(Landroid/view/InputEvent;Landroid/view/InputEventReceiver;IZ)V
@@ -26219,60 +13210,58 @@
 HSPLandroid/view/ViewRootImpl;->ensureTouchMode(Z)Z
 HSPLandroid/view/ViewRootImpl;->ensureTouchModeLocally(Z)Z
 HSPLandroid/view/ViewRootImpl;->enterTouchMode()Z
-HPLandroid/view/ViewRootImpl;->findAncestorToTakeFocusInTouchMode(Landroid/view/View;)Landroid/view/ViewGroup;
+HSPLandroid/view/ViewRootImpl;->finishBLASTSync()V
 HSPLandroid/view/ViewRootImpl;->finishInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
 HSPLandroid/view/ViewRootImpl;->fireAccessibilityFocusEventIfHasFocusedNode()V
 HSPLandroid/view/ViewRootImpl;->focusableViewAvailable(Landroid/view/View;)V
-HPLandroid/view/ViewRootImpl;->forceLayout(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->forceLayout(Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->getAccessibilityFocusedHost()Landroid/view/View;
 HSPLandroid/view/ViewRootImpl;->getAccessibilityFocusedRect(Landroid/graphics/Rect;)Z
 HSPLandroid/view/ViewRootImpl;->getAudioManager()Landroid/media/AudioManager;
 HSPLandroid/view/ViewRootImpl;->getAutofillManager()Landroid/view/autofill/AutofillManager;
-HPLandroid/view/ViewRootImpl;->getBoundsLayer()Landroid/view/SurfaceControl;
 HSPLandroid/view/ViewRootImpl;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z
+HSPLandroid/view/ViewRootImpl;->getDisplayId()I
 HSPLandroid/view/ViewRootImpl;->getHostVisibility()I
-PLandroid/view/ViewRootImpl;->getImpliedSystemUiVisibility(Landroid/view/WindowManager$LayoutParams;)I
+HSPLandroid/view/ViewRootImpl;->getImeFocusController()Landroid/view/ImeFocusController;
+HSPLandroid/view/ViewRootImpl;->getImpliedSystemUiVisibility(Landroid/view/WindowManager$LayoutParams;)I
 HSPLandroid/view/ViewRootImpl;->getInsetsController()Landroid/view/InsetsController;
-PLandroid/view/ViewRootImpl;->getNightMode()I
+HSPLandroid/view/ViewRootImpl;->getNightMode()I
 HSPLandroid/view/ViewRootImpl;->getParent()Landroid/view/ViewParent;
 HSPLandroid/view/ViewRootImpl;->getRootMeasureSpec(II)I
 HSPLandroid/view/ViewRootImpl;->getRunQueue()Landroid/view/HandlerActionQueue;
-HPLandroid/view/ViewRootImpl;->getSurfaceControl()Landroid/view/SurfaceControl;
 HSPLandroid/view/ViewRootImpl;->getTextDirection()I
-HPLandroid/view/ViewRootImpl;->getTitle()Ljava/lang/CharSequence;
 HSPLandroid/view/ViewRootImpl;->getValidLayoutRequesters(Ljava/util/ArrayList;Z)Ljava/util/ArrayList;
-PLandroid/view/ViewRootImpl;->getView()Landroid/view/View;
+HSPLandroid/view/ViewRootImpl;->getView()Landroid/view/View;
 HSPLandroid/view/ViewRootImpl;->getWindowInsets(Z)Landroid/view/WindowInsets;
-PLandroid/view/ViewRootImpl;->handleAppVisibility(Z)V
+HSPLandroid/view/ViewRootImpl;->handleAppVisibility(Z)V
 HSPLandroid/view/ViewRootImpl;->handleContentCaptureFlush()V
-HSPLandroid/view/ViewRootImpl;->handleDispatchSystemUiVisibilityChanged(Landroid/view/ViewRootImpl$SystemUiVisibilityInfo;)V
-PLandroid/view/ViewRootImpl;->handleDispatchWindowShown()V
 HSPLandroid/view/ViewRootImpl;->handleWindowFocusChanged()V
 HSPLandroid/view/ViewRootImpl;->hasColorModeChanged(I)Z
-HPLandroid/view/ViewRootImpl;->invalidate()V
+HSPLandroid/view/ViewRootImpl;->invalidate()V
 HSPLandroid/view/ViewRootImpl;->invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V
 HSPLandroid/view/ViewRootImpl;->invalidateChildInParent([ILandroid/graphics/Rect;)Landroid/view/ViewParent;
 HSPLandroid/view/ViewRootImpl;->invalidateRectOnScreen(Landroid/graphics/Rect;)V
 HSPLandroid/view/ViewRootImpl;->isContentCaptureEnabled()Z
-PLandroid/view/ViewRootImpl;->isContentCaptureReallyEnabled()Z
-PLandroid/view/ViewRootImpl;->isInLayout()Z
-HSPLandroid/view/ViewRootImpl;->isInLocalFocusMode()Z
+HSPLandroid/view/ViewRootImpl;->isContentCaptureReallyEnabled()Z
+HSPLandroid/view/ViewRootImpl;->isInLayout()Z
 HSPLandroid/view/ViewRootImpl;->isInTouchMode()Z
 HSPLandroid/view/ViewRootImpl;->isLayoutRequested()Z
-HPLandroid/view/ViewRootImpl;->isNavigationKey(Landroid/view/KeyEvent;)Z
-HPLandroid/view/ViewRootImpl;->isTerminalInputEvent(Landroid/view/InputEvent;)Z
+HSPLandroid/view/ViewRootImpl;->isNavigationKey(Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewRootImpl;->isTextDirectionResolved()Z
+HSPLandroid/view/ViewRootImpl;->isTypingKey(Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewRootImpl;->lambda$performDraw$1$ViewRootImpl(Ljava/util/ArrayList;)V
+HSPLandroid/view/ViewRootImpl;->lambda$performDraw$1$ViewRootImpl(ZLjava/util/ArrayList;)V
 HSPLandroid/view/ViewRootImpl;->lambda$performDraw$2$ViewRootImpl(Landroid/os/Handler;Ljava/util/ArrayList;J)V
-HPLandroid/view/ViewRootImpl;->lambda$registerRtFrameCallback$0(Landroid/graphics/HardwareRenderer$FrameDrawingCallback;J)V
+HSPLandroid/view/ViewRootImpl;->lambda$performDraw$2$ViewRootImpl(Landroid/os/Handler;ZLjava/util/ArrayList;J)V
 HSPLandroid/view/ViewRootImpl;->loadSystemProperties()V
 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;II)Z
-PLandroid/view/ViewRootImpl;->notifyInsetsChanged()V
-PLandroid/view/ViewRootImpl;->notifyRendererOfFramePending()V
+HSPLandroid/view/ViewRootImpl;->notifyInsetsChanged()V
+HSPLandroid/view/ViewRootImpl;->notifyRendererOfFramePending()V
 HSPLandroid/view/ViewRootImpl;->notifySurfaceCreated()V
 HSPLandroid/view/ViewRootImpl;->notifySurfaceDestroyed()V
+HSPLandroid/view/ViewRootImpl;->obtainQueuedInputEvent(Landroid/view/InputEvent;Landroid/view/InputEventReceiver;I)Landroid/view/ViewRootImpl$QueuedInputEvent;
 HSPLandroid/view/ViewRootImpl;->onDescendantInvalidated(Landroid/view/View;Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->onPostDraw(Landroid/graphics/RecordingCanvas;)V
 HSPLandroid/view/ViewRootImpl;->onPreDraw(Landroid/graphics/RecordingCanvas;)V
@@ -26281,472 +13270,319 @@
 HSPLandroid/view/ViewRootImpl;->performConfigurationChange(Landroid/util/MergedConfiguration;ZI)V
 HSPLandroid/view/ViewRootImpl;->performContentCaptureInitialReport()V
 HSPLandroid/view/ViewRootImpl;->performDraw()V
-HPLandroid/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
 HSPLandroid/view/ViewRootImpl;->playSoundEffect(I)V
 HSPLandroid/view/ViewRootImpl;->pokeDrawLockIfNeeded()V
 HSPLandroid/view/ViewRootImpl;->profileRendering(Z)V
-HPLandroid/view/ViewRootImpl;->recomputeViewAttributes(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->recycleQueuedInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
 HSPLandroid/view/ViewRootImpl;->registerAnimatingRenderNode(Landroid/graphics/RenderNode;)V
-HPLandroid/view/ViewRootImpl;->registerRtFrameCallback(Landroid/graphics/HardwareRenderer$FrameDrawingCallback;)V
+HSPLandroid/view/ViewRootImpl;->registerVectorDrawableAnimator(Landroid/view/NativeVectorDrawableAnimator;)V
 HSPLandroid/view/ViewRootImpl;->relayoutWindow(Landroid/view/WindowManager$LayoutParams;IZ)I
-PLandroid/view/ViewRootImpl;->removeSendWindowContentChangedCallback()V
+HSPLandroid/view/ViewRootImpl;->removeSendWindowContentChangedCallback()V
 HSPLandroid/view/ViewRootImpl;->removeWindowCallbacks(Landroid/view/WindowCallbacks;)V
 HSPLandroid/view/ViewRootImpl;->reportDrawFinished()V
 HSPLandroid/view/ViewRootImpl;->reportNextDraw()V
-HPLandroid/view/ViewRootImpl;->requestChildFocus(Landroid/view/View;Landroid/view/View;)V
-HPLandroid/view/ViewRootImpl;->requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z
-HPLandroid/view/ViewRootImpl;->requestDisallowInterceptTouchEvent(Z)V
+HSPLandroid/view/ViewRootImpl;->requestChildFocus(Landroid/view/View;Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->requestDisallowInterceptTouchEvent(Z)V
 HSPLandroid/view/ViewRootImpl;->requestFitSystemWindows()V
-PLandroid/view/ViewRootImpl;->requestInvalidateRootRenderNode()V
 HSPLandroid/view/ViewRootImpl;->requestLayout()V
-HPLandroid/view/ViewRootImpl;->requestTransparentRegion(Landroid/view/View;)V
-PLandroid/view/ViewRootImpl;->scheduleConsumeBatchedInput()V
+HSPLandroid/view/ViewRootImpl;->requestLayoutDuringLayout(Landroid/view/View;)Z
+HSPLandroid/view/ViewRootImpl;->scheduleConsumeBatchedInput()V
 HSPLandroid/view/ViewRootImpl;->scheduleTraversals()V
 HSPLandroid/view/ViewRootImpl;->scrollToRectOrFocus(Landroid/graphics/Rect;Z)Z
 HSPLandroid/view/ViewRootImpl;->setAccessibilityFocus(Landroid/view/View;Landroid/view/accessibility/AccessibilityNodeInfo;)V
-PLandroid/view/ViewRootImpl;->setActivityConfigCallback(Landroid/view/ViewRootImpl$ActivityConfigCallback;)V
-HPLandroid/view/ViewRootImpl;->setBoundsLayerCrop()V
-PLandroid/view/ViewRootImpl;->setFrame(Landroid/graphics/Rect;)V
+HSPLandroid/view/ViewRootImpl;->setActivityConfigCallback(Landroid/view/ViewRootImpl$ActivityConfigCallback;)V
+HSPLandroid/view/ViewRootImpl;->setFrame(Landroid/graphics/Rect;)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
 HSPLandroid/view/ViewRootImpl;->setView(Landroid/view/View;Landroid/view/WindowManager$LayoutParams;Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->setWindowStopped(Z)V
 HSPLandroid/view/ViewRootImpl;->shouldUseDisplaySize(Landroid/view/WindowManager$LayoutParams;)Z
 HSPLandroid/view/ViewRootImpl;->systemGestureExclusionChanged()V
-HPLandroid/view/ViewRootImpl;->transformMatrixToGlobal(Landroid/graphics/Matrix;)V
-HPLandroid/view/ViewRootImpl;->transformMatrixToLocal(Landroid/graphics/Matrix;)V
-PLandroid/view/ViewRootImpl;->unscheduleConsumeBatchedInput()V
-PLandroid/view/ViewRootImpl;->unscheduleTraversals()V
+HSPLandroid/view/ViewRootImpl;->unscheduleConsumeBatchedInput()V
+HSPLandroid/view/ViewRootImpl;->unscheduleTraversals()V
 HSPLandroid/view/ViewRootImpl;->updateBoundsLayer()V
 HSPLandroid/view/ViewRootImpl;->updateConfiguration(I)V
 HSPLandroid/view/ViewRootImpl;->updateContentDrawBounds()Z
 HSPLandroid/view/ViewRootImpl;->updateForceDarkMode()V
-PLandroid/view/ViewRootImpl;->updateInternalDisplay(ILandroid/content/res/Resources;)V
+HSPLandroid/view/ViewRootImpl;->updateInternalDisplay(ILandroid/content/res/Resources;)V
+HSPLandroid/view/ViewRootImpl;->updateSystemGestureExclusionRectsForView(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->updateVisibleInsets()V
 HSPLandroid/view/ViewRootImpl;->windowFocusChanged(ZZ)V
-PLandroid/view/ViewStructure$HtmlInfo$Builder;-><init>()V
-PLandroid/view/ViewStructure$HtmlInfo;-><init>()V
-HPLandroid/view/ViewStub$ViewReplaceRunnable;->run()V
 HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-PLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)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
-HPLandroid/view/ViewStub;->access$000(Landroid/view/ViewStub;Landroid/view/View;Landroid/view/ViewGroup;)V
 HSPLandroid/view/ViewStub;->inflate()Landroid/view/View;
-HPLandroid/view/ViewStub;->replaceSelfWithView(Landroid/view/View;Landroid/view/ViewGroup;)V
-PLandroid/view/ViewStub;->setLayoutInflater(Landroid/view/LayoutInflater;)V
-HSPLandroid/view/ViewStub;->setLayoutResource(I)V
-HPLandroid/view/ViewStub;->setOnInflateListener(Landroid/view/ViewStub$OnInflateListener;)V
+HSPLandroid/view/ViewStub;->inflateViewNoAdd(Landroid/view/ViewGroup;)Landroid/view/View;
+HSPLandroid/view/ViewStub;->replaceSelfWithView(Landroid/view/View;Landroid/view/ViewGroup;)V
+HSPLandroid/view/ViewStub;->setLayoutInflater(Landroid/view/LayoutInflater;)V
 HSPLandroid/view/ViewStub;->setVisibility(I)V
-HPLandroid/view/ViewStub;->setVisibilityAsync(I)Ljava/lang/Runnable;
-PLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;-><init>()V
-PLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->access$000(Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;)Ljava/util/ArrayList;
-PLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->access$002(Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;Ljava/util/ArrayList;)Ljava/util/ArrayList;
-PLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->access$102(Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;I)I
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;-><init>()V
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->access$000(Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;)Ljava/util/ArrayList;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->access$002(Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->access$102(Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;I)I
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->get(I)Ljava/lang/Object;
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->size()I
-PLandroid/view/ViewTreeObserver$CopyOnWriteArray;-><init>()V
+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
-PLandroid/view/ViewTreeObserver$CopyOnWriteArray;->getArray()Ljava/util/ArrayList;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->getArray()Ljava/util/ArrayList;
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->remove(Ljava/lang/Object;)V
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->size()I
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->start()Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;-><init>()V
-HPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->equals(Ljava/lang/Object;)Z
-HPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->isEmpty()Z
-HPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->reset()V
-HPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->set(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)V
-HPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->setTouchableInsets(I)V
-PLandroid/view/ViewTreeObserver;-><init>(Landroid/content/Context;)V
-HPLandroid/view/ViewTreeObserver;->addOnComputeInternalInsetsListener(Landroid/view/ViewTreeObserver$OnComputeInternalInsetsListener;)V
+HSPLandroid/view/ViewTreeObserver;-><init>(Landroid/content/Context;)V
 HSPLandroid/view/ViewTreeObserver;->addOnDrawListener(Landroid/view/ViewTreeObserver$OnDrawListener;)V
-HSPLandroid/view/ViewTreeObserver;->addOnGlobalFocusChangeListener(Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;)V
 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
-PLandroid/view/ViewTreeObserver;->captureFrameCommitCallbacks()Ljava/util/ArrayList;
+HSPLandroid/view/ViewTreeObserver;->addOnTouchModeChangeListener(Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;)V
+HSPLandroid/view/ViewTreeObserver;->captureFrameCommitCallbacks()Ljava/util/ArrayList;
 HSPLandroid/view/ViewTreeObserver;->checkIsAlive()V
-HPLandroid/view/ViewTreeObserver;->dispatchOnComputeInternalInsets(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)V
-PLandroid/view/ViewTreeObserver;->dispatchOnDraw()V
+HSPLandroid/view/ViewTreeObserver;->dispatchOnDraw()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnEnterAnimationComplete()V
+HSPLandroid/view/ViewTreeObserver;->dispatchOnGlobalFocusChange(Landroid/view/View;Landroid/view/View;)V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnGlobalLayout()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnPreDraw()Z
 HSPLandroid/view/ViewTreeObserver;->dispatchOnScrollChanged()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnSystemGestureExclusionRectsChanged(Ljava/util/List;)V
-PLandroid/view/ViewTreeObserver;->dispatchOnTouchModeChanged(Z)V
+HSPLandroid/view/ViewTreeObserver;->dispatchOnTouchModeChanged(Z)V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnWindowAttachedChange(Z)V
-PLandroid/view/ViewTreeObserver;->dispatchOnWindowShown()V
+HSPLandroid/view/ViewTreeObserver;->dispatchOnWindowFocusChange(Z)V
 HSPLandroid/view/ViewTreeObserver;->hasComputeInternalInsetsListeners()Z
 HSPLandroid/view/ViewTreeObserver;->isAlive()Z
+HSPLandroid/view/ViewTreeObserver;->kill()V
 HSPLandroid/view/ViewTreeObserver;->merge(Landroid/view/ViewTreeObserver;)V
-HSPLandroid/view/ViewTreeObserver;->removeGlobalOnLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V
-HPLandroid/view/ViewTreeObserver;->removeOnComputeInternalInsetsListener(Landroid/view/ViewTreeObserver$OnComputeInternalInsetsListener;)V
 HSPLandroid/view/ViewTreeObserver;->removeOnDrawListener(Landroid/view/ViewTreeObserver$OnDrawListener;)V
-HPLandroid/view/ViewTreeObserver;->removeOnGlobalFocusChangeListener(Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;)V
 HSPLandroid/view/ViewTreeObserver;->removeOnGlobalLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V
 HSPLandroid/view/ViewTreeObserver;->removeOnPreDrawListener(Landroid/view/ViewTreeObserver$OnPreDrawListener;)V
-HSPLandroid/view/ViewTreeObserver;->removeOnScrollChangedListener(Landroid/view/ViewTreeObserver$OnScrollChangedListener;)V
+HSPLandroid/view/ViewTreeObserver;->removeOnTouchModeChangeListener(Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;)V
 HSPLandroid/view/Window;-><init>(Landroid/content/Context;)V
 HSPLandroid/view/Window;->addFlags(I)V
-HSPLandroid/view/Window;->addOnFrameMetricsAvailableListener(Landroid/view/Window$OnFrameMetricsAvailableListener;Landroid/os/Handler;)V
-HSPLandroid/view/Window;->addPrivateFlags(I)V
 HSPLandroid/view/Window;->adjustLayoutParamsForSubWindow(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/Window;->clearFlags(I)V
+HSPLandroid/view/Window;->destroy()V
 HSPLandroid/view/Window;->dispatchWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/Window;->findViewById(I)Landroid/view/View;
 HSPLandroid/view/Window;->getAttributes()Landroid/view/WindowManager$LayoutParams;
 HSPLandroid/view/Window;->getCallback()Landroid/view/Window$Callback;
-HPLandroid/view/Window;->getColorMode()I
-PLandroid/view/Window;->getContainer()Landroid/view/Window;
-PLandroid/view/Window;->getContext()Landroid/content/Context;
-PLandroid/view/Window;->getDefaultFeatures(Landroid/content/Context;)I
-PLandroid/view/Window;->getFeatures()I
-PLandroid/view/Window;->getForcedWindowFlags()I
-PLandroid/view/Window;->getLocalFeatures()I
+HSPLandroid/view/Window;->getContainer()Landroid/view/Window;
+HSPLandroid/view/Window;->getContext()Landroid/content/Context;
+HSPLandroid/view/Window;->getDefaultFeatures(Landroid/content/Context;)I
+HSPLandroid/view/Window;->getFeatures()I
+HSPLandroid/view/Window;->getForcedWindowFlags()I
+HSPLandroid/view/Window;->getLocalFeatures()I
+HSPLandroid/view/Window;->getWindowControllerCallback()Landroid/view/Window$WindowControllerCallback;
 HSPLandroid/view/Window;->getWindowManager()Landroid/view/WindowManager;
 HSPLandroid/view/Window;->getWindowStyle()Landroid/content/res/TypedArray;
 HSPLandroid/view/Window;->hasFeature(I)Z
-PLandroid/view/Window;->hasSoftInputMode()Z
+HSPLandroid/view/Window;->hasSoftInputMode()Z
 HSPLandroid/view/Window;->haveDimAmount()Z
-PLandroid/view/Window;->isDestroyed()Z
-HSPLandroid/view/Window;->isOutOfBounds(Landroid/content/Context;Landroid/view/MotionEvent;)Z
-HPLandroid/view/Window;->isWideColorGamut()Z
-HPLandroid/view/Window;->removeOnFrameMetricsAvailableListener(Landroid/view/Window$OnFrameMetricsAvailableListener;)V
-PLandroid/view/Window;->requestFeature(I)Z
+HSPLandroid/view/Window;->isActive()Z
+HSPLandroid/view/Window;->isDestroyed()Z
+HSPLandroid/view/Window;->makeActive()V
+HSPLandroid/view/Window;->requestFeature(I)Z
+HSPLandroid/view/Window;->setAttributes(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/Window;->setCallback(Landroid/view/Window$Callback;)V
-HPLandroid/view/Window;->setCloseOnTouchOutside(Z)V
+HSPLandroid/view/Window;->setCloseOnTouchOutside(Z)V
 HSPLandroid/view/Window;->setCloseOnTouchOutsideIfNotSet(Z)V
 HSPLandroid/view/Window;->setColorMode(I)V
-PLandroid/view/Window;->setDefaultWindowFormat(I)V
-HSPLandroid/view/Window;->setFitWindowInsetsTypes(I)V
+HSPLandroid/view/Window;->setDefaultWindowFormat(I)V
 HSPLandroid/view/Window;->setFlags(II)V
 HSPLandroid/view/Window;->setGravity(I)V
 HSPLandroid/view/Window;->setLayout(II)V
-HSPLandroid/view/Window;->setPrivateFlags(II)V
+HSPLandroid/view/Window;->setOnWindowDismissedCallback(Landroid/view/Window$OnWindowDismissedCallback;)V
+HSPLandroid/view/Window;->setOnWindowSwipeDismissedCallback(Landroid/view/Window$OnWindowSwipeDismissedCallback;)V
+HSPLandroid/view/Window;->setPreferMinimalPostProcessing(Z)V
 HSPLandroid/view/Window;->setSoftInputMode(I)V
-PLandroid/view/Window;->setType(I)V
-HPLandroid/view/Window;->setWindowAnimations(I)V
+HSPLandroid/view/Window;->setWindowControllerCallback(Landroid/view/Window$WindowControllerCallback;)V
+HSPLandroid/view/Window;->setWindowManager(Landroid/view/WindowManager;Landroid/os/IBinder;Ljava/lang/String;)V
 HSPLandroid/view/Window;->setWindowManager(Landroid/view/WindowManager;Landroid/os/IBinder;Ljava/lang/String;Z)V
 HSPLandroid/view/Window;->shouldCloseOnTouch(Landroid/content/Context;Landroid/view/MotionEvent;)Z
-HPLandroid/view/WindowId$1;-><init>()V
 HSPLandroid/view/WindowInsets$Builder;-><init>(Landroid/view/WindowInsets;)V
 HSPLandroid/view/WindowInsets$Builder;->build()Landroid/view/WindowInsets;
-HPLandroid/view/WindowInsets$Builder;->setSystemWindowInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;
+HSPLandroid/view/WindowInsets$Builder;->setSystemWindowInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;
 HSPLandroid/view/WindowInsets$Side;->all()I
-HSPLandroid/view/WindowInsets$Type;->all()I
-HSPLandroid/view/WindowInsets$Type;->compatSystemInsets()I
+HSPLandroid/view/WindowInsets$Type;->ime()I
 HSPLandroid/view/WindowInsets$Type;->indexOf(I)I
-PLandroid/view/WindowInsets$Type;->navigationBars()I
-PLandroid/view/WindowInsets$Type;->systemBars()I
-PLandroid/view/WindowInsets;-><init>(Landroid/graphics/Rect;)V
-HPLandroid/view/WindowInsets;-><init>(Landroid/graphics/Rect;Landroid/graphics/Rect;ZZLandroid/view/DisplayCutout;)V
-HSPLandroid/view/WindowInsets;-><init>(Landroid/view/WindowInsets;)V
-HSPLandroid/view/WindowInsets;-><init>([Landroid/graphics/Insets;[Landroid/graphics/Insets;[ZZZLandroid/view/DisplayCutout;)V
+HSPLandroid/view/WindowInsets$Type;->navigationBars()I
+HSPLandroid/view/WindowInsets$Type;->systemBars()I
+HSPLandroid/view/WindowInsets;-><init>(Landroid/graphics/Rect;)V
+HSPLandroid/view/WindowInsets;-><init>([Landroid/graphics/Insets;[Landroid/graphics/Insets;[ZZZLandroid/view/DisplayCutout;I)V
+HSPLandroid/view/WindowInsets;-><init>([Landroid/graphics/Insets;[Landroid/graphics/Insets;[ZZZLandroid/view/DisplayCutout;IZ)V
+HSPLandroid/view/WindowInsets;->access$000(Landroid/view/WindowInsets;)[Landroid/graphics/Insets;
+HSPLandroid/view/WindowInsets;->access$100(Landroid/view/WindowInsets;)[Landroid/graphics/Insets;
+HSPLandroid/view/WindowInsets;->access$200(Landroid/view/WindowInsets;)[Z
+HSPLandroid/view/WindowInsets;->access$300(Landroid/view/WindowInsets;)Z
+HSPLandroid/view/WindowInsets;->access$400(Landroid/view/WindowInsets;)Z
+HSPLandroid/view/WindowInsets;->access$500(Landroid/view/WindowInsets;)Landroid/view/DisplayCutout;
+HSPLandroid/view/WindowInsets;->access$600(Landroid/view/WindowInsets;)Z
+HSPLandroid/view/WindowInsets;->access$700(Landroid/view/WindowInsets;)Z
 HSPLandroid/view/WindowInsets;->assignCompatInsets([Landroid/graphics/Insets;Landroid/graphics/Rect;)V
 HSPLandroid/view/WindowInsets;->consumeDisplayCutout()Landroid/view/WindowInsets;
-PLandroid/view/WindowInsets;->consumeStableInsets()Landroid/view/WindowInsets;
 HSPLandroid/view/WindowInsets;->consumeSystemWindowInsets()Landroid/view/WindowInsets;
-PLandroid/view/WindowInsets;->createCompatTypeMap(Landroid/graphics/Rect;)[Landroid/graphics/Insets;
-HPLandroid/view/WindowInsets;->createCompatVisibilityMap([Landroid/graphics/Insets;)[Z
+HSPLandroid/view/WindowInsets;->createCompatTypeMap(Landroid/graphics/Rect;)[Landroid/graphics/Insets;
 HSPLandroid/view/WindowInsets;->displayCutoutCopyConstructorArgument(Landroid/view/WindowInsets;)Landroid/view/DisplayCutout;
 HSPLandroid/view/WindowInsets;->equals(Ljava/lang/Object;)Z
-HPLandroid/view/WindowInsets;->getDisplayCutout()Landroid/view/DisplayCutout;
+HSPLandroid/view/WindowInsets;->getInsets(I)Landroid/graphics/Insets;
 HSPLandroid/view/WindowInsets;->getInsets([Landroid/graphics/Insets;I)Landroid/graphics/Insets;
-HSPLandroid/view/WindowInsets;->getMandatorySystemGestureInsets()Landroid/graphics/Insets;
-HPLandroid/view/WindowInsets;->getMaxInsets(I)Landroid/graphics/Insets;
 HSPLandroid/view/WindowInsets;->getStableInsetBottom()I
-PLandroid/view/WindowInsets;->getStableInsetLeft()I
-PLandroid/view/WindowInsets;->getStableInsetRight()I
-PLandroid/view/WindowInsets;->getStableInsetTop()I
+HSPLandroid/view/WindowInsets;->getStableInsetLeft()I
+HSPLandroid/view/WindowInsets;->getStableInsetRight()I
+HSPLandroid/view/WindowInsets;->getStableInsetTop()I
 HSPLandroid/view/WindowInsets;->getStableInsets()Landroid/graphics/Insets;
-HPLandroid/view/WindowInsets;->getSystemGestureInsets()Landroid/graphics/Insets;
 HSPLandroid/view/WindowInsets;->getSystemWindowInsetBottom()I
 HSPLandroid/view/WindowInsets;->getSystemWindowInsetLeft()I
 HSPLandroid/view/WindowInsets;->getSystemWindowInsetRight()I
 HSPLandroid/view/WindowInsets;->getSystemWindowInsetTop()I
 HSPLandroid/view/WindowInsets;->getSystemWindowInsets()Landroid/graphics/Insets;
-HPLandroid/view/WindowInsets;->getSystemWindowInsetsAsRect()Landroid/graphics/Rect;
-HSPLandroid/view/WindowInsets;->getTappableElementInsets()Landroid/graphics/Insets;
-HSPLandroid/view/WindowInsets;->hasInsets()Z
-HSPLandroid/view/WindowInsets;->hasSystemWindowInsets()Z
+HSPLandroid/view/WindowInsets;->getSystemWindowInsetsAsRect()Landroid/graphics/Rect;
 HSPLandroid/view/WindowInsets;->inset(IIII)Landroid/view/WindowInsets;
-PLandroid/view/WindowInsets;->inset(Landroid/graphics/Rect;)Landroid/view/WindowInsets;
+HSPLandroid/view/WindowInsets;->inset(Landroid/graphics/Insets;)Landroid/view/WindowInsets;
+HSPLandroid/view/WindowInsets;->inset(Landroid/graphics/Rect;)Landroid/view/WindowInsets;
 HSPLandroid/view/WindowInsets;->insetInsets(Landroid/graphics/Insets;IIII)Landroid/graphics/Insets;
 HSPLandroid/view/WindowInsets;->insetInsets([Landroid/graphics/Insets;IIII)[Landroid/graphics/Insets;
 HSPLandroid/view/WindowInsets;->isConsumed()Z
-PLandroid/view/WindowInsets;->isSystemWindowInsetsConsumed()Z
+HSPLandroid/view/WindowInsets;->isSystemWindowInsetsConsumed()Z
 HSPLandroid/view/WindowInsets;->replaceSystemWindowInsets(IIII)Landroid/view/WindowInsets;
-PLandroid/view/WindowInsets;->shouldAlwaysConsumeSystemBars()Z
+HSPLandroid/view/WindowInsets;->shouldAlwaysConsumeSystemBars()Z
 HSPLandroid/view/WindowLeaked;-><init>(Ljava/lang/String;)V
-PLandroid/view/WindowManager$LayoutParams$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/WindowManager$LayoutParams;
-PLandroid/view/WindowManager$LayoutParams$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/WindowManager$LayoutParams;-><init>()V
-PLandroid/view/WindowManager$LayoutParams;-><init>(IIIII)V
-HPLandroid/view/WindowManager$LayoutParams;-><init>(IIIIIII)V
-HPLandroid/view/WindowManager$LayoutParams;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/view/WindowManager$LayoutParams;->copyFrom(Landroid/view/WindowManager$LayoutParams;)I
-HPLandroid/view/WindowManager$LayoutParams;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLandroid/view/WindowManager$LayoutParams;->dumpDimensions(Ljava/lang/StringBuilder;)V
 HSPLandroid/view/WindowManager$LayoutParams;->getColorMode()I
 HSPLandroid/view/WindowManager$LayoutParams;->getFitWindowInsetsSides()I
 HSPLandroid/view/WindowManager$LayoutParams;->getFitWindowInsetsTypes()I
-PLandroid/view/WindowManager$LayoutParams;->getTitle()Ljava/lang/CharSequence;
-PLandroid/view/WindowManager$LayoutParams;->inputFeatureToString(I)Ljava/lang/String;
-HPLandroid/view/WindowManager$LayoutParams;->isFullscreen()Z
-PLandroid/view/WindowManager$LayoutParams;->isSystemAlertWindowType(I)Z
-PLandroid/view/WindowManager$LayoutParams;->layoutInDisplayCutoutModeToString(I)Ljava/lang/String;
+HSPLandroid/view/WindowManager$LayoutParams;->getTitle()Ljava/lang/CharSequence;
 HSPLandroid/view/WindowManager$LayoutParams;->mayUseInputMethod(I)Z
 HSPLandroid/view/WindowManager$LayoutParams;->setColorMode(I)V
-PLandroid/view/WindowManager$LayoutParams;->setFitIgnoreVisibility(Z)V
-HSPLandroid/view/WindowManager$LayoutParams;->setFitWindowInsetsTypes(I)V
+HSPLandroid/view/WindowManager$LayoutParams;->setFitInsetsSides(I)V
+HSPLandroid/view/WindowManager$LayoutParams;->setFitInsetsTypes(I)V
 HSPLandroid/view/WindowManager$LayoutParams;->setSurfaceInsets(Landroid/view/View;ZZ)V
-PLandroid/view/WindowManager$LayoutParams;->setTitle(Ljava/lang/CharSequence;)V
-PLandroid/view/WindowManager$LayoutParams;->softInputModeToString(I)Ljava/lang/String;
-HPLandroid/view/WindowManager$LayoutParams;->toString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/view/WindowManager$LayoutParams;->setTitle(Ljava/lang/CharSequence;)V
 HSPLandroid/view/WindowManager$LayoutParams;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/WindowManagerGlobal$1;-><init>()V
-PLandroid/view/WindowManagerGlobal$2;-><init>(Landroid/view/WindowManagerGlobal;)V
-HPLandroid/view/WindowManagerGlobal$2;->run()V
+HSPLandroid/view/WindowManagerGlobal$1;-><init>()V
+HSPLandroid/view/WindowManagerGlobal$2;-><init>(Landroid/view/WindowManagerGlobal;)V
+HSPLandroid/view/WindowManagerGlobal$2;->run()V
 HSPLandroid/view/WindowManagerGlobal;-><init>()V
-PLandroid/view/WindowManagerGlobal;->access$000(Landroid/view/WindowManagerGlobal;)Ljava/lang/Object;
-PLandroid/view/WindowManagerGlobal;->access$100(Landroid/view/WindowManagerGlobal;)Ljava/util/ArrayList;
+HSPLandroid/view/WindowManagerGlobal;->access$000(Landroid/view/WindowManagerGlobal;)Ljava/lang/Object;
+HSPLandroid/view/WindowManagerGlobal;->access$100(Landroid/view/WindowManagerGlobal;)Ljava/util/ArrayList;
 HSPLandroid/view/WindowManagerGlobal;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;Landroid/view/Display;Landroid/view/Window;)V
-HPLandroid/view/WindowManagerGlobal;->closeAll(Landroid/os/IBinder;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/view/WindowManagerGlobal;->closeAll(Landroid/os/IBinder;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/view/WindowManagerGlobal;->closeAllExceptView(Landroid/os/IBinder;Landroid/view/View;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/view/WindowManagerGlobal;->doRemoveView(Landroid/view/ViewRootImpl;)V
-PLandroid/view/WindowManagerGlobal;->doTrimForeground()V
-PLandroid/view/WindowManagerGlobal;->dumpGfxInfo(Ljava/io/FileDescriptor;[Ljava/lang/String;)V
 HSPLandroid/view/WindowManagerGlobal;->findViewLocked(Landroid/view/View;Z)I
 HSPLandroid/view/WindowManagerGlobal;->getInstance()Landroid/view/WindowManagerGlobal;
-HPLandroid/view/WindowManagerGlobal;->getRootViews(Landroid/os/IBinder;)Ljava/util/ArrayList;
 HSPLandroid/view/WindowManagerGlobal;->getWindowManagerService()Landroid/view/IWindowManager;
 HSPLandroid/view/WindowManagerGlobal;->getWindowSession()Landroid/view/IWindowSession;
+HSPLandroid/view/WindowManagerGlobal;->initialize()V
 HSPLandroid/view/WindowManagerGlobal;->peekWindowSession()Landroid/view/IWindowSession;
 HSPLandroid/view/WindowManagerGlobal;->removeView(Landroid/view/View;Z)V
 HSPLandroid/view/WindowManagerGlobal;->removeViewLocked(IZ)V
 HSPLandroid/view/WindowManagerGlobal;->setStoppedState(Landroid/os/IBinder;Z)V
-PLandroid/view/WindowManagerGlobal;->shouldDestroyEglContext(I)Z
+HSPLandroid/view/WindowManagerGlobal;->shouldDestroyEglContext(I)Z
+HSPLandroid/view/WindowManagerGlobal;->trimForeground()V
 HSPLandroid/view/WindowManagerGlobal;->trimMemory(I)V
 HSPLandroid/view/WindowManagerGlobal;->updateViewLayout(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/WindowManagerImpl;-><init>(Landroid/content/Context;)V
 HSPLandroid/view/WindowManagerImpl;-><init>(Landroid/content/Context;Landroid/view/Window;)V
 HSPLandroid/view/WindowManagerImpl;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/WindowManagerImpl;->applyDefaultToken(Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/WindowManagerImpl;->createLocalWindowManager(Landroid/view/Window;)Landroid/view/WindowManagerImpl;
 HSPLandroid/view/WindowManagerImpl;->getDefaultDisplay()Landroid/view/Display;
-PLandroid/view/WindowManagerImpl;->removeView(Landroid/view/View;)V
 HSPLandroid/view/WindowManagerImpl;->removeViewImmediate(Landroid/view/View;)V
 HSPLandroid/view/WindowManagerImpl;->updateViewLayout(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
-PLandroid/view/WindowManagerPolicyConstants;->offReasonToString(I)Ljava/lang/String;
-PLandroid/view/accessibility/-$$Lambda$AccessibilityManager$1$o7fCplskH9NlBwJvkl6NoZ0L_BA;-><init>(Landroid/view/accessibility/AccessibilityManager$1;Landroid/view/accessibility/AccessibilityManager$AccessibilityServicesStateChangeListener;)V
-PLandroid/view/accessibility/-$$Lambda$AccessibilityManager$1$o7fCplskH9NlBwJvkl6NoZ0L_BA;->run()V
 HSPLandroid/view/accessibility/AccessibilityManager$1;-><init>(Landroid/view/accessibility/AccessibilityManager;)V
-PLandroid/view/accessibility/AccessibilityManager$1;->lambda$notifyServicesStateChanged$0$AccessibilityManager$1(Landroid/view/accessibility/AccessibilityManager$AccessibilityServicesStateChangeListener;)V
-PLandroid/view/accessibility/AccessibilityManager$1;->notifyServicesStateChanged(J)V
-PLandroid/view/accessibility/AccessibilityManager$1;->setState(I)V
+HSPLandroid/view/accessibility/AccessibilityManager$1;->notifyServicesStateChanged(J)V
+HSPLandroid/view/accessibility/AccessibilityManager$1;->setState(I)V
 HSPLandroid/view/accessibility/AccessibilityManager$MyCallback;-><init>(Landroid/view/accessibility/AccessibilityManager;)V
 HSPLandroid/view/accessibility/AccessibilityManager$MyCallback;-><init>(Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager$1;)V
-PLandroid/view/accessibility/AccessibilityManager$MyCallback;->handleMessage(Landroid/os/Message;)Z
+HSPLandroid/view/accessibility/AccessibilityManager$MyCallback;->handleMessage(Landroid/os/Message;)Z
 HSPLandroid/view/accessibility/AccessibilityManager;-><init>(Landroid/content/Context;Landroid/view/accessibility/IAccessibilityManager;I)V
-PLandroid/view/accessibility/AccessibilityManager;->access$000(Landroid/view/accessibility/AccessibilityManager;J)V
-PLandroid/view/accessibility/AccessibilityManager;->access$100(Landroid/view/accessibility/AccessibilityManager;)Ljava/lang/Object;
-PLandroid/view/accessibility/AccessibilityManager;->access$200(Landroid/view/accessibility/AccessibilityManager;)Landroid/util/ArrayMap;
-PLandroid/view/accessibility/AccessibilityManager;->access$400(Landroid/view/accessibility/AccessibilityManager;I)V
-HSPLandroid/view/accessibility/AccessibilityManager;->addAccessibilityServicesStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityServicesStateChangeListener;Landroid/os/Handler;)V
+HSPLandroid/view/accessibility/AccessibilityManager;->access$000(Landroid/view/accessibility/AccessibilityManager;J)V
+HSPLandroid/view/accessibility/AccessibilityManager;->access$100(Landroid/view/accessibility/AccessibilityManager;)Ljava/lang/Object;
+HSPLandroid/view/accessibility/AccessibilityManager;->access$200(Landroid/view/accessibility/AccessibilityManager;)Landroid/util/ArrayMap;
+HSPLandroid/view/accessibility/AccessibilityManager;->access$400(Landroid/view/accessibility/AccessibilityManager;I)V
 HSPLandroid/view/accessibility/AccessibilityManager;->addAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;)Z
 HSPLandroid/view/accessibility/AccessibilityManager;->addAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;Landroid/os/Handler;)V
 HSPLandroid/view/accessibility/AccessibilityManager;->addHighTextContrastStateChangeListener(Landroid/view/accessibility/AccessibilityManager$HighTextContrastChangeListener;Landroid/os/Handler;)V
-HSPLandroid/view/accessibility/AccessibilityManager;->addTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;)Z
 HSPLandroid/view/accessibility/AccessibilityManager;->addTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;Landroid/os/Handler;)V
 HSPLandroid/view/accessibility/AccessibilityManager;->getEnabledAccessibilityServiceList(I)Ljava/util/List;
-HSPLandroid/view/accessibility/AccessibilityManager;->getInstalledAccessibilityServiceList()Ljava/util/List;
-HPLandroid/view/accessibility/AccessibilityManager;->getInstalledAccessibilityShortcutListAsUser(Landroid/content/Context;I)Ljava/util/List;
 HSPLandroid/view/accessibility/AccessibilityManager;->getInstance(Landroid/content/Context;)Landroid/view/accessibility/AccessibilityManager;
-PLandroid/view/accessibility/AccessibilityManager;->getRecommendedTimeoutMillis(II)I
 HSPLandroid/view/accessibility/AccessibilityManager;->getServiceLocked()Landroid/view/accessibility/IAccessibilityManager;
-HSPLandroid/view/accessibility/AccessibilityManager;->isAccessibilityVolumeStreamActive()Z
 HSPLandroid/view/accessibility/AccessibilityManager;->isEnabled()Z
 HSPLandroid/view/accessibility/AccessibilityManager;->isHighTextContrastEnabled()Z
 HSPLandroid/view/accessibility/AccessibilityManager;->isTouchExplorationEnabled()Z
-PLandroid/view/accessibility/AccessibilityManager;->notifyAccessibilityButtonVisibilityChanged(Z)V
 HSPLandroid/view/accessibility/AccessibilityManager;->removeAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;)Z
 HSPLandroid/view/accessibility/AccessibilityManager;->removeHighTextContrastStateChangeListener(Landroid/view/accessibility/AccessibilityManager$HighTextContrastChangeListener;)V
-HPLandroid/view/accessibility/AccessibilityManager;->removeTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;)Z
-HPLandroid/view/accessibility/AccessibilityManager;->setPictureInPictureActionReplacingConnection(Landroid/view/accessibility/IAccessibilityInteractionConnection;)V
 HSPLandroid/view/accessibility/AccessibilityManager;->setStateLocked(I)V
 HSPLandroid/view/accessibility/AccessibilityManager;->tryConnectToServiceLocked(Landroid/view/accessibility/IAccessibilityManager;)V
 HSPLandroid/view/accessibility/AccessibilityManager;->updateUiTimeout(J)V
-PLandroid/view/accessibility/AccessibilityNodeIdManager;-><init>()V
+HSPLandroid/view/accessibility/AccessibilityNodeIdManager;-><init>()V
 HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->getInstance()Landroid/view/accessibility/AccessibilityNodeIdManager;
 HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->registerViewWithId(Landroid/view/View;I)V
 HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->unregisterViewWithId(I)V
 HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;-><init>(ILjava/lang/CharSequence;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->equals(Ljava/lang/Object;)Z
-HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->getId()I
-HPLandroid/view/accessibility/AccessibilityNodeInfo;-><init>()V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->addAction(I)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->addAction(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->addActionUnchecked(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->addChild(Landroid/view/View;I)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->addChildInternal(Landroid/view/View;IZ)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->addStandardActions(J)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->clear()V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->enforceNotSealed()V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getActionSingletonBySerializationFlag(J)Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getActions()I
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getBooleanProperty(I)Z
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getBoundsInParent(Landroid/graphics/Rect;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getBoundsInScreen(Landroid/graphics/Rect;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getChildCount()I
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getChildId(I)J
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getChildNodeIds()Landroid/util/LongArray;
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getClassName()Ljava/lang/CharSequence;
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getContentDescription()Ljava/lang/CharSequence;
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getError()Ljava/lang/CharSequence;
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getExtras()Landroid/os/Bundle;
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getSourceNodeId()J
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getText()Ljava/lang/CharSequence;
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getViewIdResourceName()Ljava/lang/String;
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->getVirtualDescendantId(J)I
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->init(Landroid/view/accessibility/AccessibilityNodeInfo;Z)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->initPoolingInfos(Landroid/view/accessibility/AccessibilityNodeInfo;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->isAccessibilityFocused()Z
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->isCheckable()Z
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->isClickable()Z
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->isContextClickable()Z
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->isEnabled()Z
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->isFocusable()Z
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->isFocused()Z
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->isLongClickable()Z
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->isSealed()Z
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->isSelected()Z
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->makeNodeId(II)J
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->obtain()Landroid/view/accessibility/AccessibilityNodeInfo;
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->obtain(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeInfo;
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->obtain(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroid/view/accessibility/AccessibilityNodeInfo;
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->recycle()V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setAccessibilityFocused(Z)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setBooleanProperty(IZ)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setBoundsInParent(Landroid/graphics/Rect;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setBoundsInScreen(Landroid/graphics/Rect;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setClassName(Ljava/lang/CharSequence;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setClickable(Z)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setContentDescription(Ljava/lang/CharSequence;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setContextClickable(Z)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setDrawingOrder(I)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setEnabled(Z)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setFocusable(Z)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setFocused(Z)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setHeading(Z)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setImportantForAccessibility(Z)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setLiveRegion(I)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setLongClickable(Z)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setPackageName(Ljava/lang/CharSequence;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setPaneTitle(Ljava/lang/CharSequence;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setParent(Landroid/view/View;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setParent(Landroid/view/View;I)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setScreenReaderFocusable(Z)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setSelected(Z)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setSource(Landroid/view/View;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setSource(Landroid/view/View;I)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setStateDescription(Ljava/lang/CharSequence;)V
-HPLandroid/view/accessibility/AccessibilityNodeInfo;->setVisibleToUser(Z)V
-HPLandroid/view/accessibility/AccessibilityNodeProvider;-><init>()V
 HSPLandroid/view/accessibility/CaptioningManager$1;-><init>(Landroid/view/accessibility/CaptioningManager;)V
-HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;->getTypeface()Landroid/graphics/Typeface;
-HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;->hasBackgroundColor()Z
-HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;->hasForegroundColor()Z
 HSPLandroid/view/accessibility/CaptioningManager$CaptioningChangeListener;-><init>()V
 HSPLandroid/view/accessibility/CaptioningManager$MyContentObserver;-><init>(Landroid/view/accessibility/CaptioningManager;Landroid/os/Handler;)V
 HSPLandroid/view/accessibility/CaptioningManager;-><init>(Landroid/content/Context;)V
-HSPLandroid/view/accessibility/CaptioningManager;->addCaptioningChangeListener(Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;)V
-HSPLandroid/view/accessibility/CaptioningManager;->getFontScale()F
 HSPLandroid/view/accessibility/CaptioningManager;->getLocale()Ljava/util/Locale;
-PLandroid/view/accessibility/CaptioningManager;->getRawLocale()Ljava/lang/String;
-HSPLandroid/view/accessibility/CaptioningManager;->getRawUserStyle()I
-HSPLandroid/view/accessibility/CaptioningManager;->getUserStyle()Landroid/view/accessibility/CaptioningManager$CaptionStyle;
+HSPLandroid/view/accessibility/CaptioningManager;->getRawLocale()Ljava/lang/String;
 HSPLandroid/view/accessibility/CaptioningManager;->isEnabled()Z
-HSPLandroid/view/accessibility/CaptioningManager;->registerObserver(Ljava/lang/String;)V
-PLandroid/view/accessibility/CaptioningManager;->removeCaptioningChangeListener(Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;)V
-PLandroid/view/accessibility/IAccessibilityInteractionConnection$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLandroid/view/accessibility/IAccessibilityInteractionConnection$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/view/accessibility/IAccessibilityInteractionConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/accessibility/IAccessibilityInteractionConnection;
+HSPLandroid/view/accessibility/CaptioningManager;->removeCaptioningChangeListener(Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;)V
+HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->addClient(Landroid/view/accessibility/IAccessibilityManagerClient;I)J
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getEnabledAccessibilityServiceList(II)Ljava/util/List;
-HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getInstalledAccessibilityServiceList(I)Ljava/util/List;
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getRecommendedTimeoutMillis()J
-HPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->setPictureInPictureActionReplacingConnection(Landroid/view/accessibility/IAccessibilityInteractionConnection;)V
-HSPLandroid/view/accessibility/IAccessibilityManager$Stub;-><init>()V
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/accessibility/IAccessibilityManager;
-PLandroid/view/accessibility/IAccessibilityManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;->notifyServicesStateChanged(J)V
-PLandroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;->setState(I)V
 HSPLandroid/view/accessibility/IAccessibilityManagerClient$Stub;-><init>()V
 HSPLandroid/view/accessibility/IAccessibilityManagerClient$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/view/accessibility/IAccessibilityManagerClient$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/accessibility/IAccessibilityManagerClient;
-HPLandroid/view/accessibility/WeakSparseArray$WeakReferenceWithId;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;I)V
-PLandroid/view/accessibility/WeakSparseArray;-><init>()V
-HPLandroid/view/accessibility/WeakSparseArray;->append(ILjava/lang/Object;)V
-PLandroid/view/accessibility/WeakSparseArray;->remove(I)V
-PLandroid/view/accessibility/WeakSparseArray;->removeUnreachableValues()V
+HSPLandroid/view/accessibility/WeakSparseArray$WeakReferenceWithId;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;I)V
+HSPLandroid/view/accessibility/WeakSparseArray;-><init>()V
+HSPLandroid/view/accessibility/WeakSparseArray;->append(ILjava/lang/Object;)V
+HSPLandroid/view/accessibility/WeakSparseArray;->remove(I)V
+HSPLandroid/view/accessibility/WeakSparseArray;->removeUnreachableValues()V
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;-><init>()V
-HSPLandroid/view/animation/AccelerateDecelerateInterpolator;->createNativeInterpolator()J
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;->getInterpolation(F)F
 HSPLandroid/view/animation/AccelerateInterpolator;-><init>()V
-HSPLandroid/view/animation/AccelerateInterpolator;-><init>(F)V
 HSPLandroid/view/animation/AccelerateInterpolator;-><init>(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;)V
 HSPLandroid/view/animation/AccelerateInterpolator;->getInterpolation(F)F
-PLandroid/view/animation/AlphaAnimation;-><init>(FF)V
-PLandroid/view/animation/AlphaAnimation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/view/animation/AlphaAnimation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/view/animation/AlphaAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
-HSPLandroid/view/animation/AlphaAnimation;->hasAlpha()Z
 HSPLandroid/view/animation/AlphaAnimation;->willChangeBounds()Z
 HSPLandroid/view/animation/AlphaAnimation;->willChangeTransformationMatrix()Z
-HPLandroid/view/animation/Animation$1;->run()V
-HPLandroid/view/animation/Animation$3;->run()V
+HSPLandroid/view/animation/Animation$1;-><init>(Landroid/view/animation/Animation;)V
+HSPLandroid/view/animation/Animation$2;-><init>(Landroid/view/animation/Animation;)V
+HSPLandroid/view/animation/Animation$3;-><init>(Landroid/view/animation/Animation;)V
 HSPLandroid/view/animation/Animation$Description;-><init>()V
 HSPLandroid/view/animation/Animation$Description;->parseValue(Landroid/util/TypedValue;)Landroid/view/animation/Animation$Description;
 HSPLandroid/view/animation/Animation;-><init>()V
 HSPLandroid/view/animation/Animation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-PLandroid/view/animation/Animation;->cancel()V
-PLandroid/view/animation/Animation;->computeDurationHint()J
 HSPLandroid/view/animation/Animation;->detach()V
 HSPLandroid/view/animation/Animation;->dispatchAnimationEnd()V
 HSPLandroid/view/animation/Animation;->dispatchAnimationStart()V
 HSPLandroid/view/animation/Animation;->ensureInterpolator()V
 HSPLandroid/view/animation/Animation;->finalize()V
-PLandroid/view/animation/Animation;->fireAnimationEnd()V
-PLandroid/view/animation/Animation;->fireAnimationStart()V
+HSPLandroid/view/animation/Animation;->fireAnimationEnd()V
+HSPLandroid/view/animation/Animation;->fireAnimationStart()V
 HSPLandroid/view/animation/Animation;->getDuration()J
 HSPLandroid/view/animation/Animation;->getFillAfter()Z
-PLandroid/view/animation/Animation;->getInterpolator()Landroid/view/animation/Interpolator;
-HSPLandroid/view/animation/Animation;->getInvalidateRegion(IIIILandroid/graphics/RectF;Landroid/view/animation/Transformation;)V
-PLandroid/view/animation/Animation;->getRepeatCount()I
 HSPLandroid/view/animation/Animation;->getScaleFactor()F
-PLandroid/view/animation/Animation;->getShowWallpaper()Z
 HSPLandroid/view/animation/Animation;->getStartOffset()J
-PLandroid/view/animation/Animation;->getStartTime()J
 HSPLandroid/view/animation/Animation;->getTransformation(JLandroid/view/animation/Transformation;)Z
 HSPLandroid/view/animation/Animation;->getTransformation(JLandroid/view/animation/Transformation;F)Z
-PLandroid/view/animation/Animation;->getZAdjustment()I
-HSPLandroid/view/animation/Animation;->hasAlpha()Z
-PLandroid/view/animation/Animation;->hasAnimationListener()Z
+HSPLandroid/view/animation/Animation;->hasAnimationListener()Z
 HSPLandroid/view/animation/Animation;->hasEnded()Z
-HPLandroid/view/animation/Animation;->hasRoundedCorners()Z
 HSPLandroid/view/animation/Animation;->hasStarted()Z
 HSPLandroid/view/animation/Animation;->initialize(IIII)V
-HSPLandroid/view/animation/Animation;->initializeInvalidateRegion(IIII)V
-PLandroid/view/animation/Animation;->isCanceled()Z
-HSPLandroid/view/animation/Animation;->isFillEnabled()Z
+HSPLandroid/view/animation/Animation;->isCanceled()Z
 HSPLandroid/view/animation/Animation;->isInitialized()Z
 HSPLandroid/view/animation/Animation;->reset()V
 HSPLandroid/view/animation/Animation;->resolveSize(IFII)F
-PLandroid/view/animation/Animation;->restrictDuration(J)V
-PLandroid/view/animation/Animation;->scaleCurrentDuration(F)V
 HSPLandroid/view/animation/Animation;->setAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V
 HSPLandroid/view/animation/Animation;->setBackgroundColor(I)V
 HSPLandroid/view/animation/Animation;->setDetachWallpaper(Z)V
@@ -26767,29 +13603,18 @@
 HSPLandroid/view/animation/Animation;->willChangeBounds()Z
 HSPLandroid/view/animation/Animation;->willChangeTransformationMatrix()Z
 HSPLandroid/view/animation/AnimationSet;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLandroid/view/animation/AnimationSet;-><init>(Z)V
 HSPLandroid/view/animation/AnimationSet;->addAnimation(Landroid/view/animation/Animation;)V
-PLandroid/view/animation/AnimationSet;->computeDurationHint()J
-PLandroid/view/animation/AnimationSet;->getAnimations()Ljava/util/List;
-HSPLandroid/view/animation/AnimationSet;->getDuration()J
 HSPLandroid/view/animation/AnimationSet;->getTransformation(JLandroid/view/animation/Transformation;)Z
-HSPLandroid/view/animation/AnimationSet;->hasAlpha()Z
 HSPLandroid/view/animation/AnimationSet;->init()V
 HSPLandroid/view/animation/AnimationSet;->initialize(IIII)V
-HSPLandroid/view/animation/AnimationSet;->initializeInvalidateRegion(IIII)V
 HSPLandroid/view/animation/AnimationSet;->reset()V
 HSPLandroid/view/animation/AnimationSet;->restoreChildrenStartOffset()V
-PLandroid/view/animation/AnimationSet;->restrictDuration(J)V
-PLandroid/view/animation/AnimationSet;->scaleCurrentDuration(F)V
 HSPLandroid/view/animation/AnimationSet;->setDuration(J)V
 HSPLandroid/view/animation/AnimationSet;->setFillAfter(Z)V
 HSPLandroid/view/animation/AnimationSet;->setFillBefore(Z)V
 HSPLandroid/view/animation/AnimationSet;->setFlag(IZ)V
 HSPLandroid/view/animation/AnimationSet;->setRepeatMode(I)V
 HSPLandroid/view/animation/AnimationSet;->setStartOffset(J)V
-HSPLandroid/view/animation/AnimationSet;->setStartTime(J)V
-HSPLandroid/view/animation/AnimationSet;->willChangeBounds()Z
-HSPLandroid/view/animation/AnimationSet;->willChangeTransformationMatrix()Z
 HSPLandroid/view/animation/AnimationUtils$1;->initialValue()Landroid/view/animation/AnimationUtils$AnimationState;
 HSPLandroid/view/animation/AnimationUtils$1;->initialValue()Ljava/lang/Object;
 HSPLandroid/view/animation/AnimationUtils$AnimationState;-><init>()V
@@ -26806,11 +13631,6 @@
 HSPLandroid/view/animation/BaseInterpolator;-><init>()V
 HSPLandroid/view/animation/BaseInterpolator;->getChangingConfiguration()I
 HSPLandroid/view/animation/BaseInterpolator;->setChangingConfiguration(I)V
-HPLandroid/view/animation/BounceInterpolator;->bounce(F)F
-HPLandroid/view/animation/BounceInterpolator;->getInterpolation(F)F
-PLandroid/view/animation/ClipRectAnimation;-><init>(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-PLandroid/view/animation/ClipRectAnimation;->initialize(IIII)V
-PLandroid/view/animation/ClipRectAnimation;->willChangeTransformationMatrix()Z
 HSPLandroid/view/animation/DecelerateInterpolator;-><init>()V
 HSPLandroid/view/animation/DecelerateInterpolator;-><init>(F)V
 HSPLandroid/view/animation/DecelerateInterpolator;-><init>(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;)V
@@ -26818,815 +13638,160 @@
 HSPLandroid/view/animation/LinearInterpolator;-><init>()V
 HSPLandroid/view/animation/LinearInterpolator;->createNativeInterpolator()J
 HSPLandroid/view/animation/LinearInterpolator;->getInterpolation(F)F
-HPLandroid/view/animation/OvershootInterpolator;-><init>()V
-HSPLandroid/view/animation/OvershootInterpolator;-><init>(F)V
-HPLandroid/view/animation/OvershootInterpolator;->getInterpolation(F)F
 HSPLandroid/view/animation/PathInterpolator;-><init>(FFFF)V
 HSPLandroid/view/animation/PathInterpolator;-><init>(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;)V
-HSPLandroid/view/animation/PathInterpolator;-><init>(Landroid/graphics/Path;)V
 HSPLandroid/view/animation/PathInterpolator;->createNativeInterpolator()J
 HSPLandroid/view/animation/PathInterpolator;->getInterpolation(F)F
 HSPLandroid/view/animation/PathInterpolator;->initCubic(FFFF)V
 HSPLandroid/view/animation/PathInterpolator;->initPath(Landroid/graphics/Path;)V
 HSPLandroid/view/animation/PathInterpolator;->parseInterpolatorFromTypeArray(Landroid/content/res/TypedArray;)V
-PLandroid/view/animation/RotateAnimation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-PLandroid/view/animation/RotateAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
-PLandroid/view/animation/RotateAnimation;->initialize(IIII)V
-PLandroid/view/animation/RotateAnimation;->initializePivotPoint()V
-HSPLandroid/view/animation/ScaleAnimation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLandroid/view/animation/ScaleAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
-HSPLandroid/view/animation/ScaleAnimation;->initialize(IIII)V
-PLandroid/view/animation/ScaleAnimation;->initializePivotPoint()V
-HSPLandroid/view/animation/ScaleAnimation;->resolveScale(FIIII)F
 HSPLandroid/view/animation/Transformation;-><init>()V
 HSPLandroid/view/animation/Transformation;->clear()V
 HSPLandroid/view/animation/Transformation;->compose(Landroid/view/animation/Transformation;)V
 HSPLandroid/view/animation/Transformation;->getAlpha()F
-PLandroid/view/animation/Transformation;->getClipRect()Landroid/graphics/Rect;
 HSPLandroid/view/animation/Transformation;->getMatrix()Landroid/graphics/Matrix;
-HSPLandroid/view/animation/Transformation;->getTransformationType()I
-HPLandroid/view/animation/Transformation;->hasClipRect()Z
-PLandroid/view/animation/Transformation;->printShortString(Ljava/io/PrintWriter;)V
-HSPLandroid/view/animation/Transformation;->set(Landroid/view/animation/Transformation;)V
 HSPLandroid/view/animation/Transformation;->setAlpha(F)V
-PLandroid/view/animation/Transformation;->setClipRect(IIII)V
-PLandroid/view/animation/Transformation;->setClipRect(Landroid/graphics/Rect;)V
-PLandroid/view/animation/TranslateAnimation;-><init>(FFFF)V
 HSPLandroid/view/animation/TranslateAnimation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLandroid/view/animation/TranslateAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
-HSPLandroid/view/animation/TranslateAnimation;->initialize(IIII)V
-HPLandroid/view/autofill/-$$Lambda$AutofillManager$YfpJNFodEuj5lbXfPlc77fsEvC8;->run()V
-PLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/autofill/AutofillId;
-PLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+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/AutofillId;-><init>(I)V
-PLandroid/view/autofill/AutofillId;-><init>(II)V
 HSPLandroid/view/autofill/AutofillId;-><init>(IIJI)V
-PLandroid/view/autofill/AutofillId;-><init>(IIJILandroid/view/autofill/AutofillId$1;)V
+HSPLandroid/view/autofill/AutofillId;-><init>(IIJILandroid/view/autofill/AutofillId$1;)V
 HSPLandroid/view/autofill/AutofillId;->equals(Ljava/lang/Object;)Z
-PLandroid/view/autofill/AutofillId;->getSessionId()I
-PLandroid/view/autofill/AutofillId;->getViewId()I
-PLandroid/view/autofill/AutofillId;->getVirtualChildIntId()I
-PLandroid/view/autofill/AutofillId;->hasSession()Z
+HSPLandroid/view/autofill/AutofillId;->hasSession()Z
 HSPLandroid/view/autofill/AutofillId;->hashCode()I
-PLandroid/view/autofill/AutofillId;->isVirtualInt()Z
-PLandroid/view/autofill/AutofillId;->isVirtualLong()Z
-HPLandroid/view/autofill/AutofillId;->resetSessionId()V
-PLandroid/view/autofill/AutofillId;->toString()Ljava/lang/String;
-PLandroid/view/autofill/AutofillId;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/autofill/AutofillManager$AutofillManagerClient;->getAugmentedAutofillClient(Lcom/android/internal/os/IResultReceiver;)V
-HPLandroid/view/autofill/AutofillManager$AutofillManagerClient;->lambda$getAugmentedAutofillClient$12(Landroid/view/autofill/AutofillManager;Lcom/android/internal/os/IResultReceiver;)V
-HPLandroid/view/autofill/AutofillManager$AutofillManagerClient;->lambda$setState$0(Landroid/view/autofill/AutofillManager;I)V
-HPLandroid/view/autofill/AutofillManager$AutofillManagerClient;->setState(I)V
+HSPLandroid/view/autofill/AutofillId;->isVirtualInt()Z
+HSPLandroid/view/autofill/AutofillId;->isVirtualLong()Z
+HSPLandroid/view/autofill/AutofillId;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/autofill/AutofillManager;-><init>(Landroid/content/Context;Landroid/view/autofill/IAutoFillManager;)V
-HPLandroid/view/autofill/AutofillManager;->access$1300(Landroid/view/autofill/AutofillManager;Ljava/lang/Runnable;)V
-HPLandroid/view/autofill/AutofillManager;->access$1400(Landroid/view/autofill/AutofillManager;Lcom/android/internal/os/IResultReceiver;)V
-HPLandroid/view/autofill/AutofillManager;->access$2500(Landroid/view/autofill/AutofillManager;I)V
-HPLandroid/view/autofill/AutofillManager;->addEnteredIdLocked(Landroid/view/autofill/AutofillId;)V
-HPLandroid/view/autofill/AutofillManager;->cancelLocked()V
-HPLandroid/view/autofill/AutofillManager;->cancelSessionLocked()V
 HSPLandroid/view/autofill/AutofillManager;->ensureServiceClientAddedIfNeededLocked()V
-HPLandroid/view/autofill/AutofillManager;->getAugmentedAutofillClient(Lcom/android/internal/os/IResultReceiver;)V
-PLandroid/view/autofill/AutofillManager;->getAutofillServiceComponentName()Landroid/content/ComponentName;
 HSPLandroid/view/autofill/AutofillManager;->getClient()Landroid/view/autofill/AutofillManager$AutofillClient;
-HPLandroid/view/autofill/AutofillManager;->getFillEventHistory()Landroid/service/autofill/FillEventHistory;
-PLandroid/view/autofill/AutofillManager;->getSmartSuggestionModeToString(I)Ljava/lang/String;
 HSPLandroid/view/autofill/AutofillManager;->hasAutofillFeature()Z
-HPLandroid/view/autofill/AutofillManager;->isActiveLocked()Z
-HSPLandroid/view/autofill/AutofillManager;->isAutofillSupported()Z
-HPLandroid/view/autofill/AutofillManager;->isClientDisablingEnterExitEvent()Z
-HPLandroid/view/autofill/AutofillManager;->isCompatibilityModeEnabledLocked()Z
-HPLandroid/view/autofill/AutofillManager;->isDisabledByServiceLocked()Z
-HSPLandroid/view/autofill/AutofillManager;->isEnabled()Z
-HPLandroid/view/autofill/AutofillManager;->isFinishedLocked()Z
-HPLandroid/view/autofill/AutofillManager;->lambda$onVisibleForAutofill$0$AutofillManager()V
+HSPLandroid/view/autofill/AutofillManager;->isAutofillUiShowing()Z
 HSPLandroid/view/autofill/AutofillManager;->notifyValueChanged(Landroid/view/View;)V
-HPLandroid/view/autofill/AutofillManager;->notifyViewEntered(Landroid/view/View;I)V
-HSPLandroid/view/autofill/AutofillManager;->notifyViewEnteredForAugmentedAutofill(Landroid/view/View;)V
-HPLandroid/view/autofill/AutofillManager;->notifyViewEnteredLocked(Landroid/view/View;I)Landroid/view/autofill/AutofillManager$AutofillCallback;
-HPLandroid/view/autofill/AutofillManager;->notifyViewExited(Landroid/view/View;)V
-HPLandroid/view/autofill/AutofillManager;->notifyViewExitedLocked(Landroid/view/View;)V
+HSPLandroid/view/autofill/AutofillManager;->notifyViewVisibilityChanged(Landroid/view/View;Z)V
 HSPLandroid/view/autofill/AutofillManager;->notifyViewVisibilityChangedInternal(Landroid/view/View;IZZ)V
-HPLandroid/view/autofill/AutofillManager;->onActivityFinishing()V
-HPLandroid/view/autofill/AutofillManager;->onInvisibleForAutofill()V
-HPLandroid/view/autofill/AutofillManager;->onSaveInstanceState(Landroid/os/Bundle;)V
-HPLandroid/view/autofill/AutofillManager;->post(Ljava/lang/Runnable;)V
-HSPLandroid/view/autofill/AutofillManager;->registerCallback(Landroid/view/autofill/AutofillManager$AutofillCallback;)V
+HSPLandroid/view/autofill/AutofillManager;->requestHideFillUi()V
 HSPLandroid/view/autofill/AutofillManager;->requestHideFillUi(Landroid/view/autofill/AutofillId;Z)V
-HPLandroid/view/autofill/AutofillManager;->resetSessionLocked(Z)V
-HPLandroid/view/autofill/AutofillManager;->setAugmentedAutofillWhitelist(Ljava/util/Set;Ljava/util/Set;)V
-HPLandroid/view/autofill/AutofillManager;->setState(I)V
-HPLandroid/view/autofill/AutofillManager;->setUserData(Landroid/service/autofill/UserData;)V
-HPLandroid/view/autofill/AutofillManager;->shouldIgnoreViewEnteredLocked(Landroid/view/autofill/AutofillId;I)Z
 HSPLandroid/view/autofill/AutofillManager;->startAutofillIfNeededLocked(Landroid/view/View;)Z
-HPLandroid/view/autofill/AutofillManager;->startSessionLocked(Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;I)V
-HPLandroid/view/autofill/AutofillManager;->unregisterCallback(Landroid/view/autofill/AutofillManager$AutofillCallback;)V
-HPLandroid/view/autofill/AutofillManager;->updateSessionLocked(Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;II)V
-HSPLandroid/view/autofill/AutofillManagerInternal;-><init>()V
-PLandroid/view/autofill/AutofillValue$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/autofill/AutofillValue;
-PLandroid/view/autofill/AutofillValue$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/view/autofill/AutofillValue;-><init>(ILjava/lang/Object;)V
-PLandroid/view/autofill/AutofillValue;-><init>(Landroid/os/Parcel;)V
-PLandroid/view/autofill/AutofillValue;-><init>(Landroid/os/Parcel;Landroid/view/autofill/AutofillValue$1;)V
-PLandroid/view/autofill/AutofillValue;->equals(Ljava/lang/Object;)Z
-HPLandroid/view/autofill/AutofillValue;->forText(Ljava/lang/CharSequence;)Landroid/view/autofill/AutofillValue;
-HPLandroid/view/autofill/AutofillValue;->getTextValue()Ljava/lang/CharSequence;
-PLandroid/view/autofill/AutofillValue;->isEmpty()Z
-PLandroid/view/autofill/AutofillValue;->isText()Z
-PLandroid/view/autofill/AutofillValue;->toString()Ljava/lang/String;
-PLandroid/view/autofill/AutofillValue;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/autofill/Helper;->appendRedacted(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;)V
-PLandroid/view/autofill/Helper;->getRedacted(Ljava/lang/CharSequence;)Ljava/lang/String;
-HPLandroid/view/autofill/Helper;->toList(Ljava/util/Set;)Ljava/util/ArrayList;
-HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->addClient(Landroid/view/autofill/IAutoFillManagerClient;Landroid/content/ComponentName;ILcom/android/internal/os/IResultReceiver;)V
-HPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->cancelSession(II)V
-PLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->getAutofillServiceComponentName(Lcom/android/internal/os/IResultReceiver;)V
-HPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->getFillEventHistory(Lcom/android/internal/os/IResultReceiver;)V
-HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->isServiceSupported(ILcom/android/internal/os/IResultReceiver;)V
-HPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->setAugmentedAutofillWhitelist(Ljava/util/List;Ljava/util/List;Lcom/android/internal/os/IResultReceiver;)V
-HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->setHasCallback(IIZ)V
-HPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->setUserData(Landroid/service/autofill/UserData;)V
-HPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->startSession(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;IZILandroid/content/ComponentName;ZLcom/android/internal/os/IResultReceiver;)V
-HPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->updateSession(ILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;III)V
-HSPLandroid/view/autofill/IAutoFillManager$Stub;-><init>()V
+HSPLandroid/view/autofill/AutofillValue;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/view/autofill/IAutoFillManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/autofill/IAutoFillManager;
-PLandroid/view/autofill/IAutoFillManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLandroid/view/autofill/IAutoFillManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/view/autofill/IAutoFillManagerClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/view/autofill/IAutoFillManagerClient$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLandroid/view/autofill/IAutoFillManagerClient$Stub$Proxy;->getAugmentedAutofillClient(Lcom/android/internal/os/IResultReceiver;)V
-PLandroid/view/autofill/IAutoFillManagerClient$Stub$Proxy;->setState(I)V
-HSPLandroid/view/autofill/IAutoFillManagerClient$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/view/autofill/IAutoFillManagerClient$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/autofill/IAutoFillManagerClient;
-HPLandroid/view/autofill/IAutoFillManagerClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/view/contentcapture/ContentCaptureContext$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/contentcapture/ContentCaptureContext;
-HPLandroid/view/contentcapture/ContentCaptureContext$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/view/contentcapture/ContentCaptureContext;-><init>(Landroid/view/contentcapture/ContentCaptureContext;Landroid/content/ComponentName;III)V
-PLandroid/view/contentcapture/ContentCaptureContext;->dump(Ljava/io/PrintWriter;)V
-PLandroid/view/contentcapture/ContentCaptureContext;->fromServer()Z
-PLandroid/view/contentcapture/ContentCaptureContext;->getActivityComponent()Landroid/content/ComponentName;
-HPLandroid/view/contentcapture/ContentCaptureContext;->getExtras()Landroid/os/Bundle;
-HPLandroid/view/contentcapture/ContentCaptureContext;->getFlags()I
-HPLandroid/view/contentcapture/ContentCaptureContext;->getLocusId()Landroid/content/LocusId;
-HPLandroid/view/contentcapture/ContentCaptureContext;->getParentSessionId()Landroid/view/contentcapture/ContentCaptureSessionId;
-HPLandroid/view/contentcapture/ContentCaptureContext;->getTaskId()I
-PLandroid/view/contentcapture/ContentCaptureContext;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/contentcapture/ContentCaptureEvent$1;-><init>()V
-PLandroid/view/contentcapture/ContentCaptureEvent;-><clinit>()V
-PLandroid/view/contentcapture/ContentCaptureEvent;-><init>(IIJ)V
-PLandroid/view/contentcapture/ContentCaptureEvent;->getType()I
-PLandroid/view/contentcapture/ContentCaptureEvent;->setAutofillId(Landroid/view/autofill/AutofillId;)Landroid/view/contentcapture/ContentCaptureEvent;
-PLandroid/view/contentcapture/ContentCaptureEvent;->setText(Ljava/lang/CharSequence;)Landroid/view/contentcapture/ContentCaptureEvent;
-HSPLandroid/view/contentcapture/ContentCaptureHelper;->getDefaultLoggingLevel()I
-HSPLandroid/view/contentcapture/ContentCaptureHelper;->getLoggingLevelAsString(I)Ljava/lang/String;
-HSPLandroid/view/contentcapture/ContentCaptureHelper;->setLoggingLevel(I)V
-PLandroid/view/contentcapture/ContentCaptureHelper;->toList(Ljava/util/Set;)Ljava/util/ArrayList;
-HPLandroid/view/contentcapture/ContentCaptureManager;-><init>(Landroid/content/Context;Landroid/view/contentcapture/IContentCaptureManager;Landroid/content/ContentCaptureOptions;)V
-HPLandroid/view/contentcapture/ContentCaptureManager;->getMainContentCaptureSession()Landroid/view/contentcapture/MainContentCaptureSession;
-HSPLandroid/view/contentcapture/ContentCaptureManager;->getServiceSettingsComponentName()Landroid/content/ComponentName;
-HPLandroid/view/contentcapture/ContentCaptureManager;->isContentCaptureEnabled()Z
-HPLandroid/view/contentcapture/ContentCaptureSession;-><clinit>()V
-HPLandroid/view/contentcapture/ContentCaptureSession;-><init>()V
-HPLandroid/view/contentcapture/ContentCaptureSession;-><init>(I)V
-HPLandroid/view/contentcapture/ContentCaptureSession;->getRandomSessionId()I
-HPLandroid/view/contentcapture/ContentCaptureSession;->getStateAsString(I)Ljava/lang/String;
-HPLandroid/view/contentcapture/ContentCaptureSession;->isContentCaptureEnabled()Z
-HPLandroid/view/contentcapture/ContentCaptureSession;->notifyViewTextChanged(Landroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V
-HSPLandroid/view/contentcapture/IContentCaptureManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/view/contentcapture/IContentCaptureManager$Stub;-><init>()V
-HSPLandroid/view/contentcapture/IContentCaptureManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/contentcapture/IContentCaptureManager;
-PLandroid/view/contentcapture/IContentCaptureManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLandroid/view/contentcapture/MainContentCaptureSession;-><clinit>()V
-HPLandroid/view/contentcapture/MainContentCaptureSession;-><init>(Landroid/content/Context;Landroid/view/contentcapture/ContentCaptureManager;Landroid/os/Handler;Landroid/view/contentcapture/IContentCaptureManager;)V
-HPLandroid/view/contentcapture/MainContentCaptureSession;->getActivityName()Ljava/lang/String;
-HPLandroid/view/contentcapture/MainContentCaptureSession;->getDebugState()Ljava/lang/String;
-HPLandroid/view/contentcapture/MainContentCaptureSession;->hasStarted()Z
-HPLandroid/view/contentcapture/MainContentCaptureSession;->internalNotifyViewTextChanged(Landroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V
-HPLandroid/view/contentcapture/MainContentCaptureSession;->isContentCaptureEnabled()Z
-HPLandroid/view/contentcapture/MainContentCaptureSession;->isDisabled()Z
-HPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewTextChanged(ILandroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V
-HPLandroid/view/contentcapture/MainContentCaptureSession;->sendEvent(Landroid/view/contentcapture/ContentCaptureEvent;)V
-HPLandroid/view/contentcapture/MainContentCaptureSession;->sendEvent(Landroid/view/contentcapture/ContentCaptureEvent;Z)V
+HSPLandroid/view/inputmethod/-$$Lambda$InputMethodManager$DelegateImpl$imXagcrnfBo6bvJbiHKCn0Q2ZzU;-><init>(Landroid/view/inputmethod/InputMethodManager$DelegateImpl;ZLandroid/view/View;III)V
+HSPLandroid/view/inputmethod/-$$Lambda$InputMethodManager$DelegateImpl$imXagcrnfBo6bvJbiHKCn0Q2ZzU;->run()V
+HSPLandroid/view/inputmethod/-$$Lambda$InputMethodManager$DelegateImpl$r2X8PLo_YIORJTYJGDfinf_IvK4;-><init>(Landroid/view/inputmethod/InputMethodManager$DelegateImpl;Landroid/view/View;)V
+HSPLandroid/view/inputmethod/-$$Lambda$InputMethodManager$DelegateImpl$r2X8PLo_YIORJTYJGDfinf_IvK4;->run()V
 HSPLandroid/view/inputmethod/-$$Lambda$InputMethodManager$dfnCauFoZCf-HfXs1QavrkwWDf0;-><init>(Landroid/view/inputmethod/InputMethodManager;I)V
 HSPLandroid/view/inputmethod/-$$Lambda$InputMethodManager$dfnCauFoZCf-HfXs1QavrkwWDf0;->run()V
-HSPLandroid/view/inputmethod/-$$Lambda$InputMethodManager$i_90CXuqg7HqaqWjKFApAxiw7ac;-><init>(Landroid/view/inputmethod/InputMethodManager;ZLandroid/view/View;III)V
-HSPLandroid/view/inputmethod/-$$Lambda$InputMethodManager$i_90CXuqg7HqaqWjKFApAxiw7ac;->run()V
-PLandroid/view/inputmethod/BaseInputConnection;-><init>(Landroid/view/inputmethod/InputMethodManager;Z)V
+HSPLandroid/view/inputmethod/BaseInputConnection;-><init>(Landroid/view/inputmethod/InputMethodManager;Z)V
 HSPLandroid/view/inputmethod/BaseInputConnection;->beginBatchEdit()Z
 HSPLandroid/view/inputmethod/BaseInputConnection;->endBatchEdit()Z
 HSPLandroid/view/inputmethod/BaseInputConnection;->finishComposingText()Z
 HSPLandroid/view/inputmethod/BaseInputConnection;->getEditable()Landroid/text/Editable;
-HPLandroid/view/inputmethod/BaseInputConnection;->getHandler()Landroid/os/Handler;
-HPLandroid/view/inputmethod/BaseInputConnection;->getSelectedText(I)Ljava/lang/CharSequence;
-HPLandroid/view/inputmethod/BaseInputConnection;->getTextAfterCursor(II)Ljava/lang/CharSequence;
-HPLandroid/view/inputmethod/BaseInputConnection;->getTextBeforeCursor(II)Ljava/lang/CharSequence;
 HSPLandroid/view/inputmethod/BaseInputConnection;->removeComposingSpans(Landroid/text/Spannable;)V
-HPLandroid/view/inputmethod/BaseInputConnection;->replaceText(Ljava/lang/CharSequence;IZ)V
-HPLandroid/view/inputmethod/BaseInputConnection;->reportFullscreenMode(Z)Z
 HSPLandroid/view/inputmethod/BaseInputConnection;->sendCurrentText()V
 HSPLandroid/view/inputmethod/CursorAnchorInfo$Builder;-><init>()V
-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$InitialSurroundingText$1;-><init>()V
+HSPLandroid/view/inputmethod/EditorInfo$InitialSurroundingText;-><clinit>()V
+HSPLandroid/view/inputmethod/EditorInfo$InitialSurroundingText;-><init>()V
+HSPLandroid/view/inputmethod/EditorInfo$InitialSurroundingText;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/inputmethod/EditorInfo;-><init>()V
-HSPLandroid/view/inputmethod/EditorInfo;->makeCompatible(I)V
 HSPLandroid/view/inputmethod/EditorInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/view/inputmethod/ExtractedTextRequest;-><init>()V
-HSPLandroid/view/inputmethod/InputBinding$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/inputmethod/InputBinding;
-HSPLandroid/view/inputmethod/InputBinding$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/view/inputmethod/InputBinding;-><init>(Landroid/view/inputmethod/InputConnection;Landroid/os/IBinder;II)V
-HSPLandroid/view/inputmethod/InputBinding;->getConnection()Landroid/view/inputmethod/InputConnection;
-PLandroid/view/inputmethod/InputBinding;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/inputmethod/InputConnectionInspector;->getMissingMethodFlags(Landroid/view/inputmethod/InputConnection;)I
-HSPLandroid/view/inputmethod/InputMethodInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/inputmethod/InputMethodInfo;
-HSPLandroid/view/inputmethod/InputMethodInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/view/inputmethod/InputMethodInfo;-><init>(Landroid/content/Context;Landroid/content/pm/ResolveInfo;Ljava/util/List;)V
-HSPLandroid/view/inputmethod/InputMethodInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/view/inputmethod/InputMethodInfo;->computeId(Landroid/content/pm/ResolveInfo;)Ljava/lang/String;
-PLandroid/view/inputmethod/InputMethodInfo;->dump(Landroid/util/Printer;Ljava/lang/String;)V
-HSPLandroid/view/inputmethod/InputMethodInfo;->equals(Ljava/lang/Object;)Z
-PLandroid/view/inputmethod/InputMethodInfo;->getComponent()Landroid/content/ComponentName;
 HSPLandroid/view/inputmethod/InputMethodInfo;->getId()Ljava/lang/String;
 HSPLandroid/view/inputmethod/InputMethodInfo;->getPackageName()Ljava/lang/String;
-HSPLandroid/view/inputmethod/InputMethodInfo;->getServiceInfo()Landroid/content/pm/ServiceInfo;
-HSPLandroid/view/inputmethod/InputMethodInfo;->getSubtypeAt(I)Landroid/view/inputmethod/InputMethodSubtype;
-HSPLandroid/view/inputmethod/InputMethodInfo;->getSubtypeCount()I
-HSPLandroid/view/inputmethod/InputMethodInfo;->isAuxiliaryIme()Z
-HSPLandroid/view/inputmethod/InputMethodInfo;->isVrOnly()Z
-PLandroid/view/inputmethod/InputMethodInfo;->loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
-HSPLandroid/view/inputmethod/InputMethodInfo;->supportsSwitchingToNextInputMethod()Z
-PLandroid/view/inputmethod/InputMethodInfo;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/inputmethod/InputMethodManager$1;-><init>(Landroid/view/inputmethod/InputMethodManager;)V
+HSPLandroid/view/inputmethod/InputMethodManager$1;-><init>(Landroid/view/inputmethod/InputMethodManager;)V
 HSPLandroid/view/inputmethod/InputMethodManager$1;->onBindMethod(Lcom/android/internal/view/InputBindResult;)V
 HSPLandroid/view/inputmethod/InputMethodManager$1;->onUnbindMethod(II)V
 HSPLandroid/view/inputmethod/InputMethodManager$1;->reportFullscreenMode(Z)V
 HSPLandroid/view/inputmethod/InputMethodManager$1;->setActive(ZZ)V
-PLandroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper;-><init>(Landroid/os/Looper;Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/InputMethodManager;)V
-HPLandroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper;->deactivate()V
-HPLandroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper;->isActive()Z
-PLandroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper;->toString()Ljava/lang/String;
-PLandroid/view/inputmethod/InputMethodManager$H;-><init>(Landroid/view/inputmethod/InputMethodManager;Landroid/os/Looper;)V
+HSPLandroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper;-><init>(Landroid/os/Looper;Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/InputMethodManager;)V
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;-><init>(Landroid/view/inputmethod/InputMethodManager;)V
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;-><init>(Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager$1;)V
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->finishComposingText()V
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->finishInput()V
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->isCurrentRootView(Landroid/view/ViewRootImpl;)Z
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->isRestartOnNextWindowFocus(Z)Z
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->lambda$startInput$0$InputMethodManager$DelegateImpl(Landroid/view/View;)V
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->lambda$startInputAsyncOnWindowFocusGain$1$InputMethodManager$DelegateImpl(ZLandroid/view/View;III)V
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->setCurrentRootView(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->startInput(ILandroid/view/View;III)Z
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->startInputAsyncOnWindowFocusGain(Landroid/view/View;IIZ)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
-HPLandroid/view/inputmethod/InputMethodManager$ImeInputEventSender;->onInputEventFinished(IZ)V
-HPLandroid/view/inputmethod/InputMethodManager$PendingEvent;->run()V
+HSPLandroid/view/inputmethod/InputMethodManager$ImeInputEventSender;->onInputEventFinished(IZ)V
+HSPLandroid/view/inputmethod/InputMethodManager$ImeThreadFactory;-><init>(Ljava/lang/String;)V
+HSPLandroid/view/inputmethod/InputMethodManager$ImeThreadFactory;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+HSPLandroid/view/inputmethod/InputMethodManager$PendingEvent;->run()V
 HSPLandroid/view/inputmethod/InputMethodManager;-><init>(Lcom/android/internal/view/IInputMethodManager;ILandroid/os/Looper;)V
-PLandroid/view/inputmethod/InputMethodManager;->checkFocus()V
+HSPLandroid/view/inputmethod/InputMethodManager;->access$100(Landroid/view/inputmethod/InputMethodManager;)Landroid/view/View;
+HSPLandroid/view/inputmethod/InputMethodManager;->access$1000(Landroid/view/View;)Z
+HSPLandroid/view/inputmethod/InputMethodManager;->access$200(Landroid/view/inputmethod/InputMethodManager;Landroid/view/View;I)I
+HSPLandroid/view/inputmethod/InputMethodManager;->access$300(Landroid/view/inputmethod/InputMethodManager;)Ljava/util/concurrent/Future;
+HSPLandroid/view/inputmethod/InputMethodManager;->access$302(Landroid/view/inputmethod/InputMethodManager;Ljava/util/concurrent/Future;)Ljava/util/concurrent/Future;
+HSPLandroid/view/inputmethod/InputMethodManager;->access$400(Landroid/view/inputmethod/InputMethodManager;)Ljava/util/concurrent/ExecutorService;
+HSPLandroid/view/inputmethod/InputMethodManager;->access$500(Landroid/view/inputmethod/InputMethodManager;)Z
+HSPLandroid/view/inputmethod/InputMethodManager;->access$502(Landroid/view/inputmethod/InputMethodManager;Z)Z
+HSPLandroid/view/inputmethod/InputMethodManager;->access$600(Landroid/view/inputmethod/InputMethodManager;)Landroid/view/ImeFocusController;
+HSPLandroid/view/inputmethod/InputMethodManager;->access$700(Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/EditorInfo;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->access$802(Landroid/view/inputmethod/InputMethodManager;I)I
+HSPLandroid/view/inputmethod/InputMethodManager;->access$902(Landroid/view/inputmethod/InputMethodManager;Landroid/graphics/Matrix;)Landroid/graphics/Matrix;
+HSPLandroid/view/inputmethod/InputMethodManager;->canStartInput(Landroid/view/View;)Z
+HSPLandroid/view/inputmethod/InputMethodManager;->checkFocus()V
 HSPLandroid/view/inputmethod/InputMethodManager;->checkFocusNoStartInput(Z)Z
-HPLandroid/view/inputmethod/InputMethodManager;->closeCurrentInput()V
-PLandroid/view/inputmethod/InputMethodManager;->createInstance(ILandroid/os/Looper;)Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/view/inputmethod/InputMethodManager;->clearBindingLocked()V
+HSPLandroid/view/inputmethod/InputMethodManager;->clearConnectionLocked()V
+HSPLandroid/view/inputmethod/InputMethodManager;->createInstance(ILandroid/os/Looper;)Landroid/view/inputmethod/InputMethodManager;
 HSPLandroid/view/inputmethod/InputMethodManager;->createRealInstance(ILandroid/os/Looper;)Landroid/view/inputmethod/InputMethodManager;
-HPLandroid/view/inputmethod/InputMethodManager;->dispatchInputEvent(Landroid/view/InputEvent;Ljava/lang/Object;Landroid/view/inputmethod/InputMethodManager$FinishedInputEventCallback;Landroid/os/Handler;)I
-HPLandroid/view/inputmethod/InputMethodManager;->displayCompletions(Landroid/view/View;[Landroid/view/inputmethod/CompletionInfo;)V
-PLandroid/view/inputmethod/InputMethodManager;->ensureDefaultInstanceForDefaultDisplayIfNecessary()V
-HPLandroid/view/inputmethod/InputMethodManager;->finishedInputEvent(IZZ)V
-HPLandroid/view/inputmethod/InputMethodManager;->flushPendingEventsLocked()V
-HPLandroid/view/inputmethod/InputMethodManager;->focusIn(Landroid/view/View;)V
-HSPLandroid/view/inputmethod/InputMethodManager;->focusInLocked(Landroid/view/View;)V
-HPLandroid/view/inputmethod/InputMethodManager;->focusOut(Landroid/view/View;)V
-PLandroid/view/inputmethod/InputMethodManager;->forContext(Landroid/content/Context;)Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/view/inputmethod/InputMethodManager;->dispatchInputEvent(Landroid/view/InputEvent;Ljava/lang/Object;Landroid/view/inputmethod/InputMethodManager$FinishedInputEventCallback;Landroid/os/Handler;)I
+HSPLandroid/view/inputmethod/InputMethodManager;->ensureDefaultInstanceForDefaultDisplayIfNecessary()V
+HSPLandroid/view/inputmethod/InputMethodManager;->finishInputLocked()V
+HSPLandroid/view/inputmethod/InputMethodManager;->finishedInputEvent(IZZ)V
+HSPLandroid/view/inputmethod/InputMethodManager;->flushPendingEventsLocked()V
+HSPLandroid/view/inputmethod/InputMethodManager;->forContext(Landroid/content/Context;)Landroid/view/inputmethod/InputMethodManager;
 HSPLandroid/view/inputmethod/InputMethodManager;->forContextInternal(ILandroid/os/Looper;)Landroid/view/inputmethod/InputMethodManager;
-HSPLandroid/view/inputmethod/InputMethodManager;->getEnabledInputMethodList()Ljava/util/List;
+HSPLandroid/view/inputmethod/InputMethodManager;->getDelegate()Landroid/view/inputmethod/InputMethodManager$DelegateImpl;
 HSPLandroid/view/inputmethod/InputMethodManager;->getFallbackInputMethodManagerIfNecessary(Landroid/view/View;)Landroid/view/inputmethod/InputMethodManager;
-HSPLandroid/view/inputmethod/InputMethodManager;->getInputMethodList()Ljava/util/List;
-HPLandroid/view/inputmethod/InputMethodManager;->hideSoftInputFromWindow(Landroid/os/IBinder;I)Z
-HPLandroid/view/inputmethod/InputMethodManager;->hideSoftInputFromWindow(Landroid/os/IBinder;ILandroid/os/ResultReceiver;)Z
+HSPLandroid/view/inputmethod/InputMethodManager;->getFocusController()Landroid/view/ImeFocusController;
+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
+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;->isActive(Landroid/view/View;)Z
-HPLandroid/view/inputmethod/InputMethodManager;->isCursorAnchorInfoEnabled()Z
+HSPLandroid/view/inputmethod/InputMethodManager;->isAutofillUIShowing(Landroid/view/View;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->isFullscreenMode()Z
-PLandroid/view/inputmethod/InputMethodManager;->isInEditMode()Z
-HSPLandroid/view/inputmethod/InputMethodManager;->lambda$onPostWindowFocus$2$InputMethodManager(ZLandroid/view/View;III)V
+HSPLandroid/view/inputmethod/InputMethodManager;->isInEditMode()Z
 HSPLandroid/view/inputmethod/InputMethodManager;->lambda$startInputInner$1$InputMethodManager(I)V
 HSPLandroid/view/inputmethod/InputMethodManager;->maybeCallServedViewChangedLocked(Landroid/view/inputmethod/EditorInfo;)V
-HSPLandroid/view/inputmethod/InputMethodManager;->onPostWindowFocus(Landroid/view/View;Landroid/view/View;II)V
-HSPLandroid/view/inputmethod/InputMethodManager;->onPreWindowFocus(Landroid/view/View;Z)V
 HSPLandroid/view/inputmethod/InputMethodManager;->onViewDetachedFromWindow(Landroid/view/View;)V
 HSPLandroid/view/inputmethod/InputMethodManager;->restartInput(Landroid/view/View;)V
-HSPLandroid/view/inputmethod/InputMethodManager;->scheduleCheckFocusLocked(Landroid/view/View;)V
-HPLandroid/view/inputmethod/InputMethodManager;->sendInputEventOnMainLooperLocked(Landroid/view/inputmethod/InputMethodManager$PendingEvent;)I
+HSPLandroid/view/inputmethod/InputMethodManager;->sendInputEventOnMainLooperLocked(Landroid/view/inputmethod/InputMethodManager$PendingEvent;)I
 HSPLandroid/view/inputmethod/InputMethodManager;->setInputChannelLocked(Landroid/view/InputChannel;)V
-HPLandroid/view/inputmethod/InputMethodManager;->showSoftInput(Landroid/view/View;I)Z
-HPLandroid/view/inputmethod/InputMethodManager;->showSoftInput(Landroid/view/View;ILandroid/os/ResultReceiver;)Z
+HSPLandroid/view/inputmethod/InputMethodManager;->setNextServedViewLocked(Landroid/view/View;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->setServedViewLocked(Landroid/view/View;)V
 HSPLandroid/view/inputmethod/InputMethodManager;->startInputInner(ILandroid/os/IBinder;III)Z
-HPLandroid/view/inputmethod/InputMethodManager;->updateSelection(Landroid/view/View;IIII)V
-HSPLandroid/view/inputmethod/InputMethodManager;->windowDismissed(Landroid/os/IBinder;)V
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;-><init>()V
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->access$100(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)I
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->access$1000(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Ljava/lang/String;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->access$200(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)I
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->access$300(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Ljava/lang/String;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->access$400(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Ljava/lang/String;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->access$500(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Ljava/lang/String;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->access$600(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Z
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->access$700(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Z
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->access$800(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)I
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->access$900(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Z
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->build()Landroid/view/inputmethod/InputMethodSubtype;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setIsAsciiCapable(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setIsAuxiliary(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setLanguageTag(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setOverridesImplicitlyEnabledSubtype(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setSubtypeExtraValue(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setSubtypeIconResId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setSubtypeId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setSubtypeLocale(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setSubtypeMode(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
-HSPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setSubtypeNameResId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
-HSPLandroid/view/inputmethod/InputMethodSubtype;-><init>(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)V
-HSPLandroid/view/inputmethod/InputMethodSubtype;-><init>(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;Landroid/view/inputmethod/InputMethodSubtype$1;)V
-PLandroid/view/inputmethod/InputMethodSubtype;->getExtraValueHashMap()Ljava/util/HashMap;
-PLandroid/view/inputmethod/InputMethodSubtype;->getLocale()Ljava/lang/String;
-HSPLandroid/view/inputmethod/InputMethodSubtype;->getMode()Ljava/lang/String;
-HSPLandroid/view/inputmethod/InputMethodSubtype;->hashCode()I
-HSPLandroid/view/inputmethod/InputMethodSubtype;->hashCodeInternal(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZZ)I
-HSPLandroid/view/inputmethod/InputMethodSubtype;->isAuxiliary()Z
-HSPLandroid/view/inputmethod/InputMethodSubtype;->overridesImplicitlyEnabledSubtype()Z
-HSPLandroid/view/inputmethod/InputMethodSubtype;->sort(Landroid/content/Context;ILandroid/view/inputmethod/InputMethodInfo;Ljava/util/List;)Ljava/util/List;
-HPLandroid/view/inputmethod/InputMethodSubtype;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/inputmethod/InputMethodSubtypeArray;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/view/inputmethod/InputMethodSubtypeArray;-><init>(Ljava/util/List;)V
-PLandroid/view/inputmethod/InputMethodSubtypeArray;->compress([B)[B
-HSPLandroid/view/inputmethod/InputMethodSubtypeArray;->get(I)Landroid/view/inputmethod/InputMethodSubtype;
-HSPLandroid/view/inputmethod/InputMethodSubtypeArray;->getCount()I
-HPLandroid/view/inputmethod/InputMethodSubtypeArray;->marshall([Landroid/view/inputmethod/InputMethodSubtype;)[B
-PLandroid/view/inputmethod/InputMethodSubtypeArray;->writeToParcel(Landroid/os/Parcel;)V
-PLandroid/view/textclassifier/-$$Lambda$0biFK4yZBmWN1EO2wtnXskzuEcE;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/view/textclassifier/-$$Lambda$9N8WImc0VBjy2oxI_Gk5_Pbye_A;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/view/textclassifier/-$$Lambda$ActionsModelParamsSupplier$zElxNeuL3A8paTXvw8GWdpp4rFo;-><init>(Landroid/view/textclassifier/ActionsModelParamsSupplier;)V
-HPLandroid/view/textclassifier/-$$Lambda$ActionsSuggestionsHelper$6oTtcn9bDE-u-8FbiyGdntqoQG0;->test(Ljava/lang/Object;)Z
-HPLandroid/view/textclassifier/-$$Lambda$ActionsSuggestionsHelper$sY0w9od2zcl4YFel0lG4VB3vf7I;->chooseTitle(Landroid/view/textclassifier/intent/LabeledIntent;Landroid/content/pm/ResolveInfo;)Ljava/lang/CharSequence;
-HPLandroid/view/textclassifier/-$$Lambda$EntityConfidence$YPh8hwgSYYK8OyQ1kFlQngc71Q0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLandroid/view/textclassifier/-$$Lambda$NxwbyZSxofZ4Z5SQhfXmtLQ1nxk;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/view/textclassifier/-$$Lambda$OGSS2qx6njxlnp0dnKb4lA3jnw8;->get()Ljava/lang/Object;
 HSPLandroid/view/textclassifier/-$$Lambda$TextClassificationManager$JIaezIJbMig_-kVzN6oArzkTsJE;-><init>(Landroid/view/textclassifier/TextClassificationManager;)V
-HPLandroid/view/textclassifier/-$$Lambda$TextClassificationManager$JIaezIJbMig_-kVzN6oArzkTsJE;->createTextClassificationSession(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifier;
-PLandroid/view/textclassifier/-$$Lambda$TextClassifierImpl$RRbXefHgcUymI9-P95ArUyMvfbw;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/view/textclassifier/-$$Lambda$TextClassifierImpl$ftq-sQqJYwUdrdbbr9jz3p4AWos;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/view/textclassifier/-$$Lambda$TextClassifierImpl$iSt_Guet-O6Vtdk0MA4z-Z4lzaM;-><init>(Landroid/view/textclassifier/TextClassifierImpl;)V
-PLandroid/view/textclassifier/-$$Lambda$XeE_KI7QgMKzF9vYRSoFWAolyuA;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/view/textclassifier/-$$Lambda$jJq8RXuVdjYF3lPq-77PEw1NJLM;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/view/textclassifier/ActionsModelParamsSupplier$ActionsModelParams;->getSerializedPreconditions(Landroid/view/textclassifier/ModelFileManager$ModelFile;)[B
-PLandroid/view/textclassifier/ActionsModelParamsSupplier$SettingsObserver;-><init>(Landroid/content/Context;Ljava/lang/Runnable;)V
-PLandroid/view/textclassifier/ActionsModelParamsSupplier;-><init>(Landroid/content/Context;Ljava/lang/Runnable;)V
-HPLandroid/view/textclassifier/ActionsModelParamsSupplier;->get()Landroid/view/textclassifier/ActionsModelParamsSupplier$ActionsModelParams;
-HPLandroid/view/textclassifier/ActionsModelParamsSupplier;->get()Ljava/lang/Object;
-HPLandroid/view/textclassifier/ActionsModelParamsSupplier;->parse(Landroid/content/ContentResolver;)Landroid/view/textclassifier/ActionsModelParamsSupplier$ActionsModelParams;
-HPLandroid/view/textclassifier/ActionsSuggestionsHelper$PersonEncoder;->encode(Landroid/app/Person;)I
-HPLandroid/view/textclassifier/ActionsSuggestionsHelper;->createLabeledIntentResult(Landroid/content/Context;Landroid/view/textclassifier/intent/TemplateIntentFactory;Lcom/google/android/textclassifier/ActionsSuggestionsModel$ActionSuggestion;)Landroid/view/textclassifier/intent/LabeledIntent$Result;
-HPLandroid/view/textclassifier/ActionsSuggestionsHelper;->createResultId(Landroid/content/Context;Ljava/util/List;ILjava/util/List;)Ljava/lang/String;
-HPLandroid/view/textclassifier/ActionsSuggestionsHelper;->getRepresentation(Landroid/view/textclassifier/ConversationAction;)Landroid/util/Pair;
-HPLandroid/view/textclassifier/ActionsSuggestionsHelper;->removeActionsWithDuplicates(Ljava/util/List;)Ljava/util/List;
-HPLandroid/view/textclassifier/ActionsSuggestionsHelper;->toNativeMessages(Ljava/util/List;Ljava/util/function/Function;)[Lcom/google/android/textclassifier/ActionsSuggestionsModel$ConversationMessage;
-HPLandroid/view/textclassifier/ConversationAction$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/ConversationAction;
-HPLandroid/view/textclassifier/ConversationAction$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/view/textclassifier/ConversationAction$Builder;-><init>(Ljava/lang/String;)V
-HPLandroid/view/textclassifier/ConversationAction$Builder;->build()Landroid/view/textclassifier/ConversationAction;
-HPLandroid/view/textclassifier/ConversationAction$Builder;->setAction(Landroid/app/RemoteAction;)Landroid/view/textclassifier/ConversationAction$Builder;
-HPLandroid/view/textclassifier/ConversationAction$Builder;->setConfidenceScore(F)Landroid/view/textclassifier/ConversationAction$Builder;
-HPLandroid/view/textclassifier/ConversationAction$Builder;->setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/ConversationAction$Builder;
-HPLandroid/view/textclassifier/ConversationAction$Builder;->setTextReply(Ljava/lang/CharSequence;)Landroid/view/textclassifier/ConversationAction$Builder;
-HPLandroid/view/textclassifier/ConversationAction;-><init>(Landroid/os/Parcel;)V
-HPLandroid/view/textclassifier/ConversationAction;-><init>(Landroid/os/Parcel;Landroid/view/textclassifier/ConversationAction$1;)V
-HPLandroid/view/textclassifier/ConversationAction;-><init>(Ljava/lang/String;Landroid/app/RemoteAction;Ljava/lang/CharSequence;FLandroid/os/Bundle;)V
-HPLandroid/view/textclassifier/ConversationAction;-><init>(Ljava/lang/String;Landroid/app/RemoteAction;Ljava/lang/CharSequence;FLandroid/os/Bundle;Landroid/view/textclassifier/ConversationAction$1;)V
-HPLandroid/view/textclassifier/ConversationAction;->getAction()Landroid/app/RemoteAction;
-HPLandroid/view/textclassifier/ConversationAction;->getConfidenceScore()F
-HPLandroid/view/textclassifier/ConversationAction;->getExtras()Landroid/os/Bundle;
-HPLandroid/view/textclassifier/ConversationAction;->getTextReply()Ljava/lang/CharSequence;
-HPLandroid/view/textclassifier/ConversationAction;->getType()Ljava/lang/String;
-HPLandroid/view/textclassifier/ConversationAction;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/textclassifier/ConversationActions$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/ConversationActions;
-HPLandroid/view/textclassifier/ConversationActions$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/view/textclassifier/ConversationActions$Message$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/ConversationActions$Message;
-PLandroid/view/textclassifier/ConversationActions$Message$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/view/textclassifier/ConversationActions$Message$Builder;-><init>(Landroid/app/Person;)V
-HPLandroid/view/textclassifier/ConversationActions$Message$Builder;->build()Landroid/view/textclassifier/ConversationActions$Message;
-HPLandroid/view/textclassifier/ConversationActions$Message$Builder;->setReferenceTime(Ljava/time/ZonedDateTime;)Landroid/view/textclassifier/ConversationActions$Message$Builder;
-HPLandroid/view/textclassifier/ConversationActions$Message$Builder;->setText(Ljava/lang/CharSequence;)Landroid/view/textclassifier/ConversationActions$Message$Builder;
-HPLandroid/view/textclassifier/ConversationActions$Message;-><init>(Landroid/app/Person;Ljava/time/ZonedDateTime;Ljava/lang/CharSequence;Landroid/os/Bundle;)V
-HPLandroid/view/textclassifier/ConversationActions$Message;-><init>(Landroid/app/Person;Ljava/time/ZonedDateTime;Ljava/lang/CharSequence;Landroid/os/Bundle;Landroid/view/textclassifier/ConversationActions$1;)V
-PLandroid/view/textclassifier/ConversationActions$Message;-><init>(Landroid/os/Parcel;)V
-PLandroid/view/textclassifier/ConversationActions$Message;-><init>(Landroid/os/Parcel;Landroid/view/textclassifier/ConversationActions$1;)V
-HPLandroid/view/textclassifier/ConversationActions$Message;->getAuthor()Landroid/app/Person;
-HPLandroid/view/textclassifier/ConversationActions$Message;->getExtras()Landroid/os/Bundle;
-HPLandroid/view/textclassifier/ConversationActions$Message;->getReferenceTime()Ljava/time/ZonedDateTime;
-HPLandroid/view/textclassifier/ConversationActions$Message;->getText()Ljava/lang/CharSequence;
-PLandroid/view/textclassifier/ConversationActions$Message;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/textclassifier/ConversationActions$Request$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/ConversationActions$Request;
-PLandroid/view/textclassifier/ConversationActions$Request$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/view/textclassifier/ConversationActions$Request$Builder;-><init>(Ljava/util/List;)V
-HPLandroid/view/textclassifier/ConversationActions$Request$Builder;->build()Landroid/view/textclassifier/ConversationActions$Request;
-HPLandroid/view/textclassifier/ConversationActions$Request$Builder;->setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/ConversationActions$Request$Builder;
-HPLandroid/view/textclassifier/ConversationActions$Request$Builder;->setHints(Ljava/util/List;)Landroid/view/textclassifier/ConversationActions$Request$Builder;
-HPLandroid/view/textclassifier/ConversationActions$Request$Builder;->setMaxSuggestions(I)Landroid/view/textclassifier/ConversationActions$Request$Builder;
-HPLandroid/view/textclassifier/ConversationActions$Request$Builder;->setTypeConfig(Landroid/view/textclassifier/TextClassifier$EntityConfig;)Landroid/view/textclassifier/ConversationActions$Request$Builder;
-PLandroid/view/textclassifier/ConversationActions$Request;-><init>(Ljava/util/List;Landroid/view/textclassifier/TextClassifier$EntityConfig;ILjava/util/List;Landroid/os/Bundle;)V
-HPLandroid/view/textclassifier/ConversationActions$Request;-><init>(Ljava/util/List;Landroid/view/textclassifier/TextClassifier$EntityConfig;ILjava/util/List;Landroid/os/Bundle;Landroid/view/textclassifier/ConversationActions$1;)V
-PLandroid/view/textclassifier/ConversationActions$Request;->access$300(Landroid/os/Parcel;)Landroid/view/textclassifier/ConversationActions$Request;
-HPLandroid/view/textclassifier/ConversationActions$Request;->getCallingPackageName()Ljava/lang/String;
-HPLandroid/view/textclassifier/ConversationActions$Request;->getConversation()Ljava/util/List;
-HPLandroid/view/textclassifier/ConversationActions$Request;->getExtras()Landroid/os/Bundle;
-HPLandroid/view/textclassifier/ConversationActions$Request;->getHints()Ljava/util/List;
-HPLandroid/view/textclassifier/ConversationActions$Request;->getMaxSuggestions()I
-HPLandroid/view/textclassifier/ConversationActions$Request;->getTypeConfig()Landroid/view/textclassifier/TextClassifier$EntityConfig;
-PLandroid/view/textclassifier/ConversationActions$Request;->readFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/ConversationActions$Request;
-PLandroid/view/textclassifier/ConversationActions$Request;->setCallingPackageName(Ljava/lang/String;)V
-PLandroid/view/textclassifier/ConversationActions$Request;->setUserId(I)V
-PLandroid/view/textclassifier/ConversationActions$Request;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/textclassifier/ConversationActions;-><init>(Landroid/os/Parcel;)V
-HPLandroid/view/textclassifier/ConversationActions;-><init>(Landroid/os/Parcel;Landroid/view/textclassifier/ConversationActions$1;)V
-HSPLandroid/view/textclassifier/ConversationActions;-><init>(Ljava/util/List;Ljava/lang/String;)V
-HPLandroid/view/textclassifier/ConversationActions;->getConversationActions()Ljava/util/List;
-HPLandroid/view/textclassifier/ConversationActions;->getId()Ljava/lang/String;
-HPLandroid/view/textclassifier/ConversationActions;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/textclassifier/EntityConfidence;-><init>(Ljava/util/Map;)V
-HPLandroid/view/textclassifier/EntityConfidence;->getConfidenceScore(Ljava/lang/String;)F
-HPLandroid/view/textclassifier/EntityConfidence;->getEntities()Ljava/util/List;
-HPLandroid/view/textclassifier/EntityConfidence;->resetSortedEntitiesFromMap()V
-HPLandroid/view/textclassifier/EntityConfidence;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/textclassifier/ExtrasUtils;->isSerializedEntityDataEnabled(Landroid/view/textclassifier/TextLinks$Request;)Z
-PLandroid/view/textclassifier/GenerateLinksLogger;-><init>(I)V
-HPLandroid/view/textclassifier/GenerateLinksLogger;->logGenerateLinks(Ljava/lang/CharSequence;Landroid/view/textclassifier/TextLinks;Ljava/lang/String;J)V
-HPLandroid/view/textclassifier/GenerateLinksLogger;->shouldLog()Z
-PLandroid/view/textclassifier/Log;-><clinit>()V
-PLandroid/view/textclassifier/Log;->d(Ljava/lang/String;Ljava/lang/String;)V
-HPLandroid/view/textclassifier/Log;->w(Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/view/textclassifier/ModelFileManager$ModelFile;-><init>(Ljava/io/File;ILjava/util/List;Ljava/lang/String;Z)V
-PLandroid/view/textclassifier/ModelFileManager$ModelFile;->getName()Ljava/lang/String;
-PLandroid/view/textclassifier/ModelFileManager$ModelFile;->getPath()Ljava/lang/String;
-HPLandroid/view/textclassifier/ModelFileManager$ModelFile;->isPreferredTo(Landroid/view/textclassifier/ModelFileManager$ModelFile;)Z
-PLandroid/view/textclassifier/ModelFileManager$ModelFile;->toString()Ljava/lang/String;
-PLandroid/view/textclassifier/ModelFileManager$ModelFileSupplierImpl;-><init>(Ljava/io/File;Ljava/lang/String;Ljava/io/File;Ljava/util/function/Function;Ljava/util/function/Function;)V
-PLandroid/view/textclassifier/ModelFileManager$ModelFileSupplierImpl;->createModelFile(Ljava/io/File;)Landroid/view/textclassifier/ModelFileManager$ModelFile;
-PLandroid/view/textclassifier/ModelFileManager$ModelFileSupplierImpl;->get()Ljava/lang/Object;
-PLandroid/view/textclassifier/ModelFileManager$ModelFileSupplierImpl;->get()Ljava/util/List;
-PLandroid/view/textclassifier/ModelFileManager$ModelFileSupplierImpl;->maybeCloseAndLogError(Landroid/os/ParcelFileDescriptor;)V
-PLandroid/view/textclassifier/ModelFileManager;-><init>(Ljava/util/function/Supplier;)V
-HPLandroid/view/textclassifier/ModelFileManager;->findBestModelFile(Landroid/os/LocaleList;)Landroid/view/textclassifier/ModelFileManager$ModelFile;
-PLandroid/view/textclassifier/ModelFileManager;->listModelFiles()Ljava/util/List;
-PLandroid/view/textclassifier/SelectionEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/SelectionEvent;
-PLandroid/view/textclassifier/SelectionEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/view/textclassifier/SelectionEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/view/textclassifier/SelectionEvent;-><init>(Landroid/os/Parcel;Landroid/view/textclassifier/SelectionEvent$1;)V
-PLandroid/view/textclassifier/SelectionEvent;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/textclassifier/SelectionSessionLogger$SignatureParser;->getModelName(Ljava/lang/String;)Ljava/lang/String;
-PLandroid/view/textclassifier/SelectionSessionLogger;-><init>()V
-HPLandroid/view/textclassifier/SystemTextClassifier$BlockingCallback;->onSuccess(Landroid/os/Bundle;)V
-HPLandroid/view/textclassifier/SystemTextClassifier$ResponseReceiver;->get()Ljava/lang/Object;
-PLandroid/view/textclassifier/SystemTextClassifier;-><init>(Landroid/content/Context;Landroid/view/textclassifier/TextClassificationConstants;)V
-HPLandroid/view/textclassifier/SystemTextClassifier;->destroy()V
-PLandroid/view/textclassifier/SystemTextClassifier;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-HPLandroid/view/textclassifier/SystemTextClassifier;->initializeRemoteSession(Landroid/view/textclassifier/TextClassificationContext;Landroid/view/textclassifier/TextClassificationSessionId;)V
-HPLandroid/view/textclassifier/SystemTextClassifier;->onTextClassifierEvent(Landroid/view/textclassifier/TextClassifierEvent;)V
-HPLandroid/view/textclassifier/SystemTextClassifier;->suggestConversationActions(Landroid/view/textclassifier/ConversationActions$Request;)Landroid/view/textclassifier/ConversationActions;
-PLandroid/view/textclassifier/TextClassification$Request$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/TextClassification$Request;
-PLandroid/view/textclassifier/TextClassification$Request$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/view/textclassifier/TextClassification$Request;-><init>(Ljava/lang/CharSequence;IILandroid/os/LocaleList;Ljava/time/ZonedDateTime;Landroid/os/Bundle;)V
-PLandroid/view/textclassifier/TextClassification$Request;->access$200(Landroid/os/Parcel;)Landroid/view/textclassifier/TextClassification$Request;
-PLandroid/view/textclassifier/TextClassification$Request;->readFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/TextClassification$Request;
-PLandroid/view/textclassifier/TextClassification$Request;->setCallingPackageName(Ljava/lang/String;)V
-PLandroid/view/textclassifier/TextClassification$Request;->setUserId(I)V
-PLandroid/view/textclassifier/TextClassification$Request;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/textclassifier/SelectionSessionLogger;->getTokenIterator(Ljava/util/Locale;)Ljava/text/BreakIterator;
 HSPLandroid/view/textclassifier/TextClassificationConstants;-><init>()V
-PLandroid/view/textclassifier/TextClassificationConstants;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLandroid/view/textclassifier/TextClassificationConstants;->getClassifyTextMaxRangeLength()I
-PLandroid/view/textclassifier/TextClassificationConstants;->getDeviceConfigFloatArray(Ljava/lang/String;[F)[F
-PLandroid/view/textclassifier/TextClassificationConstants;->getDeviceConfigStringList(Ljava/lang/String;Ljava/util/List;)Ljava/util/List;
-PLandroid/view/textclassifier/TextClassificationConstants;->getEntityListDefault()Ljava/util/List;
-PLandroid/view/textclassifier/TextClassificationConstants;->getEntityListEditable()Ljava/util/List;
-PLandroid/view/textclassifier/TextClassificationConstants;->getEntityListNotEditable()Ljava/util/List;
-PLandroid/view/textclassifier/TextClassificationConstants;->getGenerateLinksLogSampleRate()I
-PLandroid/view/textclassifier/TextClassificationConstants;->getGenerateLinksMaxTextLength()I
-PLandroid/view/textclassifier/TextClassificationConstants;->getInAppConversationActionTypes()Ljava/util/List;
-PLandroid/view/textclassifier/TextClassificationConstants;->getLangIdContextSettings()[F
-PLandroid/view/textclassifier/TextClassificationConstants;->getLangIdThresholdOverride()F
-PLandroid/view/textclassifier/TextClassificationConstants;->getNotificationConversationActionTypes()Ljava/util/List;
-PLandroid/view/textclassifier/TextClassificationConstants;->getSuggestSelectionMaxRangeLength()I
-HSPLandroid/view/textclassifier/TextClassificationConstants;->getTextClassifierServicePackageOverride()Ljava/lang/String;
-PLandroid/view/textclassifier/TextClassificationConstants;->isDetectLanguagesFromTextEnabled()Z
-PLandroid/view/textclassifier/TextClassificationConstants;->isLocalTextClassifierEnabled()Z
-PLandroid/view/textclassifier/TextClassificationConstants;->isModelDarkLaunchEnabled()Z
-PLandroid/view/textclassifier/TextClassificationConstants;->isSmartLinkifyEnabled()Z
-PLandroid/view/textclassifier/TextClassificationConstants;->isSmartSelectionAnimationEnabled()Z
-PLandroid/view/textclassifier/TextClassificationConstants;->isSmartSelectionEnabled()Z
-PLandroid/view/textclassifier/TextClassificationConstants;->isSmartTextShareEnabled()Z
-PLandroid/view/textclassifier/TextClassificationConstants;->isSystemTextClassifierEnabled()Z
-PLandroid/view/textclassifier/TextClassificationConstants;->isTemplateIntentFactoryEnabled()Z
-PLandroid/view/textclassifier/TextClassificationConstants;->isTranslateInClassificationEnabled()Z
-PLandroid/view/textclassifier/TextClassificationConstants;->parse(Ljava/lang/String;Ljava/util/List;)Ljava/util/List;
-PLandroid/view/textclassifier/TextClassificationConstants;->parse(Ljava/lang/String;[F)[F
-PLandroid/view/textclassifier/TextClassificationContext$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/TextClassificationContext;
-PLandroid/view/textclassifier/TextClassificationContext$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/view/textclassifier/TextClassificationContext$Builder;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/view/textclassifier/TextClassificationContext$Builder;->build()Landroid/view/textclassifier/TextClassificationContext;
-PLandroid/view/textclassifier/TextClassificationContext;-><init>(Landroid/os/Parcel;)V
-PLandroid/view/textclassifier/TextClassificationContext;-><init>(Landroid/os/Parcel;Landroid/view/textclassifier/TextClassificationContext$1;)V
-HSLandroid/view/textclassifier/TextClassificationContext;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSLandroid/view/textclassifier/TextClassificationContext;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/view/textclassifier/TextClassificationContext$1;)V
-PLandroid/view/textclassifier/TextClassificationContext;->getPackageName()Ljava/lang/String;
-PLandroid/view/textclassifier/TextClassificationContext;->getUserId()I
-HPLandroid/view/textclassifier/TextClassificationContext;->getWidgetType()Ljava/lang/String;
-HPLandroid/view/textclassifier/TextClassificationContext;->getWidgetVersion()Ljava/lang/String;
-HPLandroid/view/textclassifier/TextClassificationContext;->setUserId(I)V
-HPLandroid/view/textclassifier/TextClassificationContext;->toString()Ljava/lang/String;
-PLandroid/view/textclassifier/TextClassificationContext;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/textclassifier/TextClassificationConstants;->isSmartSelectionAnimationEnabled()Z
 HSPLandroid/view/textclassifier/TextClassificationManager$SettingsObserver;-><init>(Landroid/view/textclassifier/TextClassificationManager;)V
-PLandroid/view/textclassifier/TextClassificationManager$SettingsObserver;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
+HPLandroid/view/textclassifier/TextClassificationManager$SettingsObserver;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLandroid/view/textclassifier/TextClassificationManager;-><init>(Landroid/content/Context;)V
-HPLandroid/view/textclassifier/TextClassificationManager;->createTextClassificationSession(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifier;
-PLandroid/view/textclassifier/TextClassificationManager;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-HPLandroid/view/textclassifier/TextClassificationManager;->finalize()V
-PLandroid/view/textclassifier/TextClassificationManager;->getLocalTextClassifier()Landroid/view/textclassifier/TextClassifier;
 HSPLandroid/view/textclassifier/TextClassificationManager;->getSettings()Landroid/view/textclassifier/TextClassificationConstants;
 HSPLandroid/view/textclassifier/TextClassificationManager;->getSettings(Landroid/content/Context;)Landroid/view/textclassifier/TextClassificationConstants;
-PLandroid/view/textclassifier/TextClassificationManager;->getSystemTextClassifier()Landroid/view/textclassifier/TextClassifier;
-HPLandroid/view/textclassifier/TextClassificationManager;->getTextClassifier()Landroid/view/textclassifier/TextClassifier;
-PLandroid/view/textclassifier/TextClassificationManager;->getTextClassifier(I)Landroid/view/textclassifier/TextClassifier;
-PLandroid/view/textclassifier/TextClassificationManager;->isSystemTextClassifierEnabled()Z
-HPLandroid/view/textclassifier/TextClassificationManager;->lambda$new$0$TextClassificationManager(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifier;
-HPLandroid/view/textclassifier/TextClassificationSessionId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/TextClassificationSessionId;
-HPLandroid/view/textclassifier/TextClassificationSessionId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/view/textclassifier/TextClassificationSessionId;-><init>()V
-HPLandroid/view/textclassifier/TextClassificationSessionId;-><init>(Ljava/lang/String;)V
-HPLandroid/view/textclassifier/TextClassificationSessionId;->equals(Ljava/lang/Object;)Z
-HPLandroid/view/textclassifier/TextClassificationSessionId;->hashCode()I
-HPLandroid/view/textclassifier/TextClassificationSessionId;->toString()Ljava/lang/String;
-PLandroid/view/textclassifier/TextClassificationSessionId;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/textclassifier/TextClassifier$1;->toString()Ljava/lang/String;
-PLandroid/view/textclassifier/TextClassifier$EntityConfig$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/TextClassifier$EntityConfig;
-PLandroid/view/textclassifier/TextClassifier$EntityConfig$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/view/textclassifier/TextClassifier$EntityConfig$Builder;-><init>()V
-HPLandroid/view/textclassifier/TextClassifier$EntityConfig$Builder;->build()Landroid/view/textclassifier/TextClassifier$EntityConfig;
-HPLandroid/view/textclassifier/TextClassifier$EntityConfig$Builder;->includeTypesFromTextClassifier(Z)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;
-HPLandroid/view/textclassifier/TextClassifier$EntityConfig$Builder;->setExcludedTypes(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;
-HPLandroid/view/textclassifier/TextClassifier$EntityConfig$Builder;->setHints(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;
-HPLandroid/view/textclassifier/TextClassifier$EntityConfig$Builder;->setIncludedTypes(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;
-PLandroid/view/textclassifier/TextClassifier$EntityConfig;-><init>(Landroid/os/Parcel;)V
-PLandroid/view/textclassifier/TextClassifier$EntityConfig;-><init>(Landroid/os/Parcel;Landroid/view/textclassifier/TextClassifier$1;)V
-HPLandroid/view/textclassifier/TextClassifier$EntityConfig;->createWithHints(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;
-HPLandroid/view/textclassifier/TextClassifier$EntityConfig;->getHints()Ljava/util/Collection;
-HPLandroid/view/textclassifier/TextClassifier$EntityConfig;->resolveEntityListModifications(Ljava/util/Collection;)Ljava/util/Collection;
-PLandroid/view/textclassifier/TextClassifier$EntityConfig;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/textclassifier/TextClassifier$Utils;-><clinit>()V
-HPLandroid/view/textclassifier/TextClassifier$Utils;->checkMainThread()V
-HPLandroid/view/textclassifier/TextClassifier$Utils;->checkTextLength(Ljava/lang/CharSequence;I)V
-PLandroid/view/textclassifier/TextClassifierEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/TextClassifierEvent;
-PLandroid/view/textclassifier/TextClassifierEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;-><init>(II)V
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;-><init>(IILandroid/view/textclassifier/TextClassifierEvent$1;)V
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->access$000(Landroid/view/textclassifier/TextClassifierEvent$Builder;)I
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->access$100(Landroid/view/textclassifier/TextClassifierEvent$Builder;)I
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->access$1000(Landroid/view/textclassifier/TextClassifierEvent$Builder;)Landroid/os/Bundle;
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->access$200(Landroid/view/textclassifier/TextClassifierEvent$Builder;)[Ljava/lang/String;
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->access$300(Landroid/view/textclassifier/TextClassifierEvent$Builder;)Landroid/view/textclassifier/TextClassificationContext;
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->access$400(Landroid/view/textclassifier/TextClassifierEvent$Builder;)Ljava/lang/String;
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->access$500(Landroid/view/textclassifier/TextClassifierEvent$Builder;)I
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->access$600(Landroid/view/textclassifier/TextClassifierEvent$Builder;)[F
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->access$700(Landroid/view/textclassifier/TextClassifierEvent$Builder;)Ljava/lang/String;
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->access$800(Landroid/view/textclassifier/TextClassifierEvent$Builder;)[I
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->access$900(Landroid/view/textclassifier/TextClassifierEvent$Builder;)Landroid/icu/util/ULocale;
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->setEntityTypes([Ljava/lang/String;)Landroid/view/textclassifier/TextClassifierEvent$Builder;
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->setEventContext(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifierEvent$Builder;
-HPLandroid/view/textclassifier/TextClassifierEvent$Builder;->setResultId(Ljava/lang/String;)Landroid/view/textclassifier/TextClassifierEvent$Builder;
-PLandroid/view/textclassifier/TextClassifierEvent$ConversationActionsEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/view/textclassifier/TextClassifierEvent$ConversationActionsEvent;-><init>(Landroid/os/Parcel;Landroid/view/textclassifier/TextClassifierEvent$1;)V
-HPLandroid/view/textclassifier/TextClassifierEvent$ConversationActionsEvent;-><init>(Landroid/view/textclassifier/TextClassifierEvent$ConversationActionsEvent$Builder;)V
-HPLandroid/view/textclassifier/TextClassifierEvent$ConversationActionsEvent;-><init>(Landroid/view/textclassifier/TextClassifierEvent$ConversationActionsEvent$Builder;Landroid/view/textclassifier/TextClassifierEvent$1;)V
-HPLandroid/view/textclassifier/TextClassifierEvent;-><init>(Landroid/os/Parcel;)V
-PLandroid/view/textclassifier/TextClassifierEvent;-><init>(Landroid/os/Parcel;Landroid/view/textclassifier/TextClassifierEvent$1;)V
-HPLandroid/view/textclassifier/TextClassifierEvent;-><init>(Landroid/view/textclassifier/TextClassifierEvent$Builder;)V
-HPLandroid/view/textclassifier/TextClassifierEvent;-><init>(Landroid/view/textclassifier/TextClassifierEvent$Builder;Landroid/view/textclassifier/TextClassifierEvent$1;)V
-HPLandroid/view/textclassifier/TextClassifierEvent;->getEntityTypes()[Ljava/lang/String;
-HPLandroid/view/textclassifier/TextClassifierEvent;->getEventCategory()I
-HPLandroid/view/textclassifier/TextClassifierEvent;->getEventContext()Landroid/view/textclassifier/TextClassificationContext;
-HPLandroid/view/textclassifier/TextClassifierEvent;->getEventType()I
-HPLandroid/view/textclassifier/TextClassifierEvent;->getModelName()Ljava/lang/String;
-PLandroid/view/textclassifier/TextClassifierEvent;->getParcelToken()I
-HPLandroid/view/textclassifier/TextClassifierEvent;->getResultId()Ljava/lang/String;
-HPLandroid/view/textclassifier/TextClassifierEvent;->getScores()[F
-HPLandroid/view/textclassifier/TextClassifierEvent;->setEventContext(Landroid/view/textclassifier/TextClassificationContext;)V
-HPLandroid/view/textclassifier/TextClassifierEvent;->toSelectionEvent()Landroid/view/textclassifier/SelectionEvent;
-HPLandroid/view/textclassifier/TextClassifierEvent;->toString()Ljava/lang/String;
-HPLandroid/view/textclassifier/TextClassifierEvent;->toString(Ljava/lang/StringBuilder;)V
-PLandroid/view/textclassifier/TextClassifierEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/textclassifier/TextClassifierEventTronLogger;-><init>()V
-PLandroid/view/textclassifier/TextClassifierEventTronLogger;-><init>(Lcom/android/internal/logging/MetricsLogger;)V
-HPLandroid/view/textclassifier/TextClassifierEventTronLogger;->debugLog(Landroid/metrics/LogMaker;)V
-HPLandroid/view/textclassifier/TextClassifierEventTronLogger;->getCategory(Landroid/view/textclassifier/TextClassifierEvent;)I
-HPLandroid/view/textclassifier/TextClassifierEventTronLogger;->getLogType(Landroid/view/textclassifier/TextClassifierEvent;)I
-HPLandroid/view/textclassifier/TextClassifierEventTronLogger;->getModelName(Landroid/view/textclassifier/TextClassifierEvent;)Ljava/lang/String;
-HPLandroid/view/textclassifier/TextClassifierEventTronLogger;->writeEvent(Landroid/view/textclassifier/TextClassifierEvent;)V
-PLandroid/view/textclassifier/TextClassifierImpl;-><init>(Landroid/content/Context;Landroid/view/textclassifier/TextClassificationConstants;Landroid/view/textclassifier/TextClassifier;)V
-HPLandroid/view/textclassifier/TextClassifierImpl;->concatenateLocales(Landroid/os/LocaleList;)Ljava/lang/String;
-HPLandroid/view/textclassifier/TextClassifierImpl;->createConversationActionResult(Landroid/view/textclassifier/ConversationActions$Request;[Lcom/google/android/textclassifier/ActionsSuggestionsModel$ActionSuggestion;)Landroid/view/textclassifier/ConversationActions;
-HPLandroid/view/textclassifier/TextClassifierImpl;->detectLanguage(Landroid/view/textclassifier/TextLanguage$Request;)Landroid/view/textclassifier/TextLanguage;
-HPLandroid/view/textclassifier/TextClassifierImpl;->detectLanguageTagsFromText(Ljava/lang/CharSequence;)Ljava/lang/String;
-PLandroid/view/textclassifier/TextClassifierImpl;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-HPLandroid/view/textclassifier/TextClassifierImpl;->generateLinks(Landroid/view/textclassifier/TextLinks$Request;)Landroid/view/textclassifier/TextLinks;
-HPLandroid/view/textclassifier/TextClassifierImpl;->getActionsImpl()Lcom/google/android/textclassifier/ActionsSuggestionsModel;
-HPLandroid/view/textclassifier/TextClassifierImpl;->getAnnotatorImpl(Landroid/os/LocaleList;)Lcom/google/android/textclassifier/AnnotatorModel;
-HPLandroid/view/textclassifier/TextClassifierImpl;->getEntitiesForHints(Ljava/util/Collection;)Ljava/util/Collection;
-HPLandroid/view/textclassifier/TextClassifierImpl;->getLangIdImpl()Lcom/google/android/textclassifier/LangIdModel;
-HPLandroid/view/textclassifier/TextClassifierImpl;->getLangIdThreshold()F
-HPLandroid/view/textclassifier/TextClassifierImpl;->getMaxGenerateLinksTextLength()I
-HPLandroid/view/textclassifier/TextClassifierImpl;->getResourceLocalesString()Ljava/lang/String;
-PLandroid/view/textclassifier/TextClassifierImpl;->lambda$new$0(Ljava/lang/Integer;)Ljava/lang/String;
-HPLandroid/view/textclassifier/TextClassifierImpl;->maybeCloseAndLogError(Landroid/os/ParcelFileDescriptor;)V
-HPLandroid/view/textclassifier/TextClassifierImpl;->onTextClassifierEvent(Landroid/view/textclassifier/TextClassifierEvent;)V
-HPLandroid/view/textclassifier/TextClassifierImpl;->resolveActionTypesFromRequest(Landroid/view/textclassifier/ConversationActions$Request;)Ljava/util/Collection;
-HPLandroid/view/textclassifier/TextClassifierImpl;->suggestConversationActions(Landroid/view/textclassifier/ConversationActions$Request;)Landroid/view/textclassifier/ConversationActions;
-HPLandroid/view/textclassifier/TextLanguage$Builder;->putLocale(Landroid/icu/util/ULocale;F)Landroid/view/textclassifier/TextLanguage$Builder;
-PLandroid/view/textclassifier/TextLinks$Request$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/TextLinks$Request;
-PLandroid/view/textclassifier/TextLinks$Request$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/view/textclassifier/TextLinks$Request;-><init>(Ljava/lang/CharSequence;Landroid/os/LocaleList;Landroid/view/textclassifier/TextClassifier$EntityConfig;ZLandroid/os/Bundle;)V
-HPLandroid/view/textclassifier/TextLinks$Request;-><init>(Ljava/lang/CharSequence;Landroid/os/LocaleList;Landroid/view/textclassifier/TextClassifier$EntityConfig;ZLandroid/os/Bundle;Landroid/view/textclassifier/TextLinks$1;)V
-PLandroid/view/textclassifier/TextLinks$Request;->access$300(Landroid/os/Parcel;)Landroid/view/textclassifier/TextLinks$Request;
-HPLandroid/view/textclassifier/TextLinks$Request;->getCallingPackageName()Ljava/lang/String;
-HPLandroid/view/textclassifier/TextLinks$Request;->getDefaultLocales()Landroid/os/LocaleList;
-HPLandroid/view/textclassifier/TextLinks$Request;->getEntityConfig()Landroid/view/textclassifier/TextClassifier$EntityConfig;
-HPLandroid/view/textclassifier/TextLinks$Request;->getExtras()Landroid/os/Bundle;
-HPLandroid/view/textclassifier/TextLinks$Request;->getText()Ljava/lang/CharSequence;
-PLandroid/view/textclassifier/TextLinks$Request;->readFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/TextLinks$Request;
-PLandroid/view/textclassifier/TextLinks$Request;->setCallingPackageName(Ljava/lang/String;)V
-PLandroid/view/textclassifier/TextLinks$Request;->setUserId(I)V
-PLandroid/view/textclassifier/TextLinks$Request;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/view/textclassifier/TextSelection$Request$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/TextSelection$Request;
-PLandroid/view/textclassifier/TextSelection$Request$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/view/textclassifier/TextSelection$Request;-><init>(Ljava/lang/CharSequence;IILandroid/os/LocaleList;ZLandroid/os/Bundle;)V
-PLandroid/view/textclassifier/TextSelection$Request;->access$200(Landroid/os/Parcel;)Landroid/view/textclassifier/TextSelection$Request;
-PLandroid/view/textclassifier/TextSelection$Request;->readFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/TextSelection$Request;
-PLandroid/view/textclassifier/TextSelection$Request;->setCallingPackageName(Ljava/lang/String;)V
-PLandroid/view/textclassifier/TextSelection$Request;->setUserId(I)V
-PLandroid/view/textclassifier/TextSelection$Request;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/textclassifier/intent/-$$Lambda$LabeledIntent$LaL7EfxShgNu4lrdo3mv85g49Jg;->chooseTitle(Landroid/view/textclassifier/intent/LabeledIntent;Landroid/content/pm/ResolveInfo;)Ljava/lang/CharSequence;
-HPLandroid/view/textclassifier/intent/LabeledIntent;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;I)V
-HPLandroid/view/textclassifier/intent/LabeledIntent;->getApplicationName(Landroid/content/pm/ResolveInfo;Landroid/content/pm/PackageManager;)Ljava/lang/String;
-HPLandroid/view/textclassifier/intent/LabeledIntent;->lambda$static$0(Landroid/view/textclassifier/intent/LabeledIntent;Landroid/content/pm/ResolveInfo;)Ljava/lang/CharSequence;
-HPLandroid/view/textclassifier/intent/LabeledIntent;->resolve(Landroid/content/Context;Landroid/view/textclassifier/intent/LabeledIntent$TitleChooser;Landroid/os/Bundle;)Landroid/view/textclassifier/intent/LabeledIntent$Result;
-HPLandroid/view/textclassifier/intent/LabeledIntent;->resolveDescription(Landroid/content/pm/ResolveInfo;Landroid/content/pm/PackageManager;)Ljava/lang/String;
-PLandroid/view/textclassifier/intent/LegacyClassificationIntentFactory;-><init>()V
-PLandroid/view/textclassifier/intent/TemplateClassificationIntentFactory;-><init>(Landroid/view/textclassifier/intent/TemplateIntentFactory;Landroid/view/textclassifier/intent/ClassificationIntentFactory;)V
-PLandroid/view/textclassifier/intent/TemplateIntentFactory;-><init>()V
-HPLandroid/view/textclassifier/intent/TemplateIntentFactory;->create([Lcom/google/android/textclassifier/RemoteActionTemplate;)Ljava/util/List;
-HPLandroid/view/textclassifier/intent/TemplateIntentFactory;->createIntent(Lcom/google/android/textclassifier/RemoteActionTemplate;)Landroid/content/Intent;
-HPLandroid/view/textclassifier/intent/TemplateIntentFactory;->isValidTemplate(Lcom/google/android/textclassifier/RemoteActionTemplate;)Z
-HPLandroid/view/textclassifier/intent/TemplateIntentFactory;->nameVariantsToBundle([Lcom/google/android/textclassifier/NamedVariant;)Landroid/os/Bundle;
-HPLandroid/view/textservice/SpellCheckerInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textservice/SpellCheckerInfo;
-HPLandroid/view/textservice/SpellCheckerInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/view/textservice/SpellCheckerInfo;-><init>(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)V
-HPLandroid/view/textservice/SpellCheckerInfo;-><init>(Landroid/os/Parcel;)V
-HPLandroid/view/textservice/SpellCheckerInfo;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLandroid/view/textservice/SpellCheckerInfo;->getId()Ljava/lang/String;
-PLandroid/view/textservice/SpellCheckerInfo;->getSubtypeAt(I)Landroid/view/textservice/SpellCheckerSubtype;
-PLandroid/view/textservice/SpellCheckerInfo;->getSubtypeCount()I
-PLandroid/view/textservice/SpellCheckerInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/textservice/SpellCheckerSession$1;-><init>(Landroid/view/textservice/SpellCheckerSession;)V
-HPLandroid/view/textservice/SpellCheckerSession$InternalListener;-><init>(Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListenerImpl;)V
-HPLandroid/view/textservice/SpellCheckerSession$InternalListener;->onServiceConnected(Lcom/android/internal/textservice/ISpellCheckerSession;)V
-HPLandroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListenerImpl;-><init>(Landroid/os/Handler;)V
-HPLandroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListenerImpl;->close()V
-HPLandroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListenerImpl;->onServiceConnected(Lcom/android/internal/textservice/ISpellCheckerSession;)V
-HPLandroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListenerImpl;->processCloseLocked()V
-HPLandroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListenerImpl;->processOrEnqueueTask(Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListenerImpl$SpellCheckerParams;)V
-HPLandroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListenerImpl;->processTask(Lcom/android/internal/textservice/ISpellCheckerSession;Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListenerImpl$SpellCheckerParams;Z)V
-HPLandroid/view/textservice/SpellCheckerSession;-><init>(Landroid/view/textservice/SpellCheckerInfo;Landroid/view/textservice/TextServicesManager;Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListener;)V
-HPLandroid/view/textservice/SpellCheckerSession;->close()V
-HPLandroid/view/textservice/SpellCheckerSession;->finalize()V
-HPLandroid/view/textservice/SpellCheckerSession;->getSpellCheckerSessionListener()Lcom/android/internal/textservice/ISpellCheckerSessionListener;
-HPLandroid/view/textservice/SpellCheckerSession;->getTextServicesSessionListener()Lcom/android/internal/textservice/ITextServicesSessionListener;
-HPLandroid/view/textservice/SpellCheckerSubtype$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textservice/SpellCheckerSubtype;
-HPLandroid/view/textservice/SpellCheckerSubtype$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/view/textservice/SpellCheckerSubtype;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
-HPLandroid/view/textservice/SpellCheckerSubtype;-><init>(Landroid/os/Parcel;)V
-PLandroid/view/textservice/SpellCheckerSubtype;->getExtraValue()Ljava/lang/String;
-PLandroid/view/textservice/SpellCheckerSubtype;->getLanguageTag()Ljava/lang/String;
-PLandroid/view/textservice/SpellCheckerSubtype;->getLocale()Ljava/lang/String;
-PLandroid/view/textservice/SpellCheckerSubtype;->hashCodeInternal(Ljava/lang/String;Ljava/lang/String;)I
-PLandroid/view/textservice/SpellCheckerSubtype;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/view/textservice/TextServicesManager;-><init>(I)V
-HPLandroid/view/textservice/TextServicesManager;->createInstance(Landroid/content/Context;)Landroid/view/textservice/TextServicesManager;
-HPLandroid/view/textservice/TextServicesManager;->finishSpellCheckerService(Lcom/android/internal/textservice/ISpellCheckerSessionListener;)V
-HPLandroid/view/textservice/TextServicesManager;->getCurrentSpellCheckerSubtype(Z)Landroid/view/textservice/SpellCheckerSubtype;
-HPLandroid/view/textservice/TextServicesManager;->isSpellCheckerEnabled()Z
-HPLandroid/view/textservice/TextServicesManager;->newSpellCheckerSession(Landroid/os/Bundle;Ljava/util/Locale;Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListener;Z)Landroid/view/textservice/SpellCheckerSession;
-HPLandroid/view/textservice/TextServicesManager;->parseLanguageFromLocaleString(Ljava/lang/String;)Ljava/lang/String;
-HPLandroid/webkit/ConsoleMessage$MessageLevel;->values()[Landroid/webkit/ConsoleMessage$MessageLevel;
-HPLandroid/webkit/ConsoleMessage;->lineNumber()I
-HPLandroid/webkit/ConsoleMessage;->message()Ljava/lang/String;
-HPLandroid/webkit/ConsoleMessage;->messageLevel()Landroid/webkit/ConsoleMessage$MessageLevel;
-HPLandroid/webkit/ConsoleMessage;->sourceId()Ljava/lang/String;
-HSPLandroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager;
-HSPLandroid/webkit/CookieSyncManager;->checkInstanceIsAllowed()V
-HSPLandroid/webkit/CookieSyncManager;->createInstance(Landroid/content/Context;)Landroid/webkit/CookieSyncManager;
-HSPLandroid/webkit/CookieSyncManager;->getInstance()Landroid/webkit/CookieSyncManager;
-HSPLandroid/webkit/CookieSyncManager;->setGetInstanceIsAllowed()V
-HPLandroid/webkit/CookieSyncManager;->sync()V
+HSPLandroid/view/textservice/SpellCheckerSubtype;->getLocaleObject()Ljava/util/Locale;
+HSPLandroid/view/textservice/SpellCheckerSubtype;->hashCodeInternal(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/view/textservice/TextServicesManager;-><init>(I)V
+HSPLandroid/view/textservice/TextServicesManager;->createInstance(Landroid/content/Context;)Landroid/view/textservice/TextServicesManager;
 HSPLandroid/webkit/IWebViewUpdateService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/webkit/IWebViewUpdateService$Stub$Proxy;->getCurrentWebViewPackage()Landroid/content/pm/PackageInfo;
-HSPLandroid/webkit/IWebViewUpdateService$Stub$Proxy;->getCurrentWebViewPackageName()Ljava/lang/String;
 HSPLandroid/webkit/IWebViewUpdateService$Stub$Proxy;->isMultiProcessEnabled()Z
 HSPLandroid/webkit/IWebViewUpdateService$Stub$Proxy;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
-HSPLandroid/webkit/IWebViewUpdateService$Stub;-><init>()V
 HSPLandroid/webkit/IWebViewUpdateService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/webkit/IWebViewUpdateService;
-PLandroid/webkit/IWebViewUpdateService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLandroid/webkit/IWebViewUpdateService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/webkit/MimeTypeMap;-><clinit>()V
-HSPLandroid/webkit/MimeTypeMap;-><init>()V
-HSPLandroid/webkit/MimeTypeMap;->getFileExtensionFromUrl(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/webkit/MimeTypeMap;->getMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/webkit/MimeTypeMap;->getSingleton()Landroid/webkit/MimeTypeMap;
-HPLandroid/webkit/URLUtil;->isHttpUrl(Ljava/lang/String;)Z
-HPLandroid/webkit/URLUtil;->isHttpsUrl(Ljava/lang/String;)Z
-HSPLandroid/webkit/URLUtil;->isValidUrl(Ljava/lang/String;)Z
-HSPLandroid/webkit/UserPackage;-><init>(Landroid/content/pm/UserInfo;Landroid/content/pm/PackageInfo;)V
-HSPLandroid/webkit/UserPackage;->getAllUsers(Landroid/content/Context;)Ljava/util/List;
-PLandroid/webkit/UserPackage;->getPackageInfo()Landroid/content/pm/PackageInfo;
-HSPLandroid/webkit/UserPackage;->getPackageInfosAllUsers(Landroid/content/Context;Ljava/lang/String;I)Ljava/util/List;
-HSPLandroid/webkit/UserPackage;->hasCorrectTargetSdkVersion(Landroid/content/pm/PackageInfo;)Z
-HSPLandroid/webkit/UserPackage;->isEnabledPackage()Z
-HSPLandroid/webkit/UserPackage;->isInstalledPackage()Z
-HSPLandroid/webkit/WebChromeClient;-><init>()V
-HSPLandroid/webkit/WebChromeClient;->getVisitedHistory(Landroid/webkit/ValueCallback;)V
-HPLandroid/webkit/WebChromeClient;->onConsoleMessage(Landroid/webkit/ConsoleMessage;)Z
-HPLandroid/webkit/WebChromeClient;->onConsoleMessage(Ljava/lang/String;ILjava/lang/String;)V
-HSPLandroid/webkit/WebChromeClient;->onProgressChanged(Landroid/webkit/WebView;I)V
-HSPLandroid/webkit/WebChromeClient;->onReceivedIcon(Landroid/webkit/WebView;Landroid/graphics/Bitmap;)V
-HSPLandroid/webkit/WebChromeClient;->onReceivedTitle(Landroid/webkit/WebView;Ljava/lang/String;)V
-HSPLandroid/webkit/WebSettings$PluginState;-><clinit>()V
-HSPLandroid/webkit/WebSettings$PluginState;-><init>(Ljava/lang/String;I)V
-HSPLandroid/webkit/WebSettings;->getDefaultUserAgent(Landroid/content/Context;)Ljava/lang/String;
-HSPLandroid/webkit/WebView$PrivateAccess;-><init>(Landroid/webkit/WebView;)V
-HPLandroid/webkit/WebView$PrivateAccess;->overScrollBy(IIIIIIIIZ)V
-HSPLandroid/webkit/WebView$PrivateAccess;->super_getScrollBarStyle()I
-HPLandroid/webkit/WebView$PrivateAccess;->super_onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
-HPLandroid/webkit/WebView$PrivateAccess;->super_scrollTo(II)V
-HPLandroid/webkit/WebView$PrivateAccess;->super_setFrame(IIII)Z
-HSPLandroid/webkit/WebView$PrivateAccess;->super_setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
-HSPLandroid/webkit/WebView;-><init>(Landroid/content/Context;)V
-HSPLandroid/webkit/WebView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLandroid/webkit/WebView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/webkit/WebView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/webkit/WebView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;IILjava/util/Map;Z)V
-HSPLandroid/webkit/WebView;->access$101(Landroid/webkit/WebView;)I
-HSPLandroid/webkit/WebView;->access$1101(Landroid/webkit/WebView;Landroid/view/ViewGroup$LayoutParams;)V
-HPLandroid/webkit/WebView;->access$1300(Landroid/webkit/WebView;IIIIIIIIZ)Z
-HPLandroid/webkit/WebView;->access$2001(Landroid/webkit/WebView;Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
-HPLandroid/webkit/WebView;->access$201(Landroid/webkit/WebView;II)V
-HPLandroid/webkit/WebView;->access$701(Landroid/webkit/WebView;IIII)Z
-HSPLandroid/webkit/WebView;->addJavascriptInterface(Ljava/lang/Object;Ljava/lang/String;)V
-HSPLandroid/webkit/WebView;->checkThread()V
-HPLandroid/webkit/WebView;->computeHorizontalScrollOffset()I
-HPLandroid/webkit/WebView;->computeHorizontalScrollRange()I
-HPLandroid/webkit/WebView;->computeScroll()V
-HPLandroid/webkit/WebView;->computeVerticalScrollExtent()I
-HPLandroid/webkit/WebView;->computeVerticalScrollOffset()I
-HPLandroid/webkit/WebView;->computeVerticalScrollRange()I
-HPLandroid/webkit/WebView;->destroy()V
-HPLandroid/webkit/WebView;->dispatchDraw(Landroid/graphics/Canvas;)V
-HSPLandroid/webkit/WebView;->ensureProviderCreated()V
-HSPLandroid/webkit/WebView;->evaluateJavascript(Ljava/lang/String;Landroid/webkit/ValueCallback;)V
-HSPLandroid/webkit/WebView;->getCurrentWebViewPackage()Landroid/content/pm/PackageInfo;
-HSPLandroid/webkit/WebView;->getFactory()Landroid/webkit/WebViewFactoryProvider;
-HSPLandroid/webkit/WebView;->getFavicon()Landroid/graphics/Bitmap;
-HSPLandroid/webkit/WebView;->getHandler()Landroid/os/Handler;
-HSPLandroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings;
-HSPLandroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
-HSPLandroid/webkit/WebView;->onAttachedToWindow()V
-HPLandroid/webkit/WebView;->onDetachedFromWindowInternal()V
-HPLandroid/webkit/WebView;->onDraw(Landroid/graphics/Canvas;)V
-HPLandroid/webkit/WebView;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
-HPLandroid/webkit/WebView;->onOverScrolled(IIZZ)V
-HSPLandroid/webkit/WebView;->onPause()V
-HPLandroid/webkit/WebView;->onScrollChanged(IIII)V
-HPLandroid/webkit/WebView;->onSizeChanged(IIII)V
-HPLandroid/webkit/WebView;->onTouchEvent(Landroid/view/MotionEvent;)Z
-HSPLandroid/webkit/WebView;->onVisibilityChanged(Landroid/view/View;I)V
-HPLandroid/webkit/WebView;->onWindowFocusChanged(Z)V
-HPLandroid/webkit/WebView;->onWindowVisibilityChanged(I)V
-HSPLandroid/webkit/WebView;->removeJavascriptInterface(Ljava/lang/String;)V
-HSPLandroid/webkit/WebView;->setBackgroundColor(I)V
-HPLandroid/webkit/WebView;->setDataDirectorySuffix(Ljava/lang/String;)V
-HSPLandroid/webkit/WebView;->setDownloadListener(Landroid/webkit/DownloadListener;)V
-HPLandroid/webkit/WebView;->setFrame(IIII)Z
-HSPLandroid/webkit/WebView;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
-HSPLandroid/webkit/WebView;->setOverScrollMode(I)V
-HSPLandroid/webkit/WebView;->setWebChromeClient(Landroid/webkit/WebChromeClient;)V
-HSPLandroid/webkit/WebView;->setWebViewClient(Landroid/webkit/WebViewClient;)V
-HSPLandroid/webkit/WebViewClient;-><init>()V
-HSPLandroid/webkit/WebViewClient;->doUpdateVisitedHistory(Landroid/webkit/WebView;Ljava/lang/String;Z)V
-HSPLandroid/webkit/WebViewClient;->onPageCommitVisible(Landroid/webkit/WebView;Ljava/lang/String;)V
-HSPLandroid/webkit/WebViewClient;->onPageStarted(Landroid/webkit/WebView;Ljava/lang/String;Landroid/graphics/Bitmap;)V
-HPLandroid/webkit/WebViewClient;->onReceivedError(Landroid/webkit/WebView;ILjava/lang/String;Ljava/lang/String;)V
-HPLandroid/webkit/WebViewClient;->onReceivedError(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;Landroid/webkit/WebResourceError;)V
-HSPLandroid/webkit/WebViewClient;->onScaleChanged(Landroid/webkit/WebView;FF)V
-HSPLandroid/webkit/WebViewDelegate$1;-><init>(Landroid/webkit/WebViewDelegate;Landroid/webkit/WebViewDelegate$OnTraceEnabledChangeListener;)V
-PLandroid/webkit/WebViewDelegate$1;->run()V
-HSPLandroid/webkit/WebViewDelegate;->addWebViewAssetPath(Landroid/content/Context;)V
-HPLandroid/webkit/WebViewDelegate;->drawWebViewFunctor(Landroid/graphics/Canvas;I)V
+HSPLandroid/webkit/WebViewDelegate;-><init>()V
 HSPLandroid/webkit/WebViewDelegate;->getApplication()Landroid/app/Application;
 HSPLandroid/webkit/WebViewDelegate;->getDataDirectorySuffix()Ljava/lang/String;
 HSPLandroid/webkit/WebViewDelegate;->getPackageId(Landroid/content/res/Resources;Ljava/lang/String;)I
 HSPLandroid/webkit/WebViewDelegate;->isMultiProcessEnabled()Z
-HSPLandroid/webkit/WebViewDelegate;->isTraceTagEnabled()Z
-HSPLandroid/webkit/WebViewDelegate;->setOnTraceEnabledChangeListener(Landroid/webkit/WebViewDelegate$OnTraceEnabledChangeListener;)V
 HSPLandroid/webkit/WebViewFactory;->getDataDirectorySuffix()Ljava/lang/String;
 HSPLandroid/webkit/WebViewFactory;->getLoadedPackageInfo()Landroid/content/pm/PackageInfo;
 HSPLandroid/webkit/WebViewFactory;->getProvider()Landroid/webkit/WebViewFactoryProvider;
@@ -27635,44 +13800,24 @@
 HSPLandroid/webkit/WebViewFactory;->getUpdateServiceUnchecked()Landroid/webkit/IWebViewUpdateService;
 HSPLandroid/webkit/WebViewFactory;->getWebViewContextAndSetProvider()Landroid/content/Context;
 HSPLandroid/webkit/WebViewFactory;->getWebViewLibrary(Landroid/content/pm/ApplicationInfo;)Ljava/lang/String;
+HSPLandroid/webkit/WebViewFactory;->getWebViewProviderClass(Ljava/lang/ClassLoader;)Ljava/lang/Class;
 HSPLandroid/webkit/WebViewFactory;->isWebViewSupported()Z
-HSPLandroid/webkit/WebViewFactory;->onWebViewProviderChanged(Landroid/content/pm/PackageInfo;)I
 HSPLandroid/webkit/WebViewFactory;->prepareWebViewInZygote()V
-HPLandroid/webkit/WebViewFactory;->setDataDirectorySuffix(Ljava/lang/String;)V
 HSPLandroid/webkit/WebViewFactory;->signaturesEquals([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)Z
 HSPLandroid/webkit/WebViewFactory;->verifyPackageInfo(Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageInfo;)V
-HSPLandroid/webkit/WebViewLibraryLoader$1;-><init>(Ljava/lang/String;)V
-HSPLandroid/webkit/WebViewLibraryLoader;->createRelroFile(ZLjava/lang/String;Ljava/lang/String;)V
-HSPLandroid/webkit/WebViewLibraryLoader;->createRelros(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/webkit/WebViewLibraryLoader;->loadNativeLibrary(Ljava/lang/ClassLoader;Ljava/lang/String;)I
-HSPLandroid/webkit/WebViewLibraryLoader;->prepareNativeLibraries(Landroid/content/pm/PackageInfo;)I
 HSPLandroid/webkit/WebViewLibraryLoader;->reserveAddressSpaceInZygote()V
-HSPLandroid/webkit/WebViewProviderInfo;-><init>(Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)V
 HSPLandroid/webkit/WebViewProviderResponse$1;->createFromParcel(Landroid/os/Parcel;)Landroid/webkit/WebViewProviderResponse;
 HSPLandroid/webkit/WebViewProviderResponse$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/webkit/WebViewProviderResponse;-><init>(Landroid/content/pm/PackageInfo;I)V
-PLandroid/webkit/WebViewProviderResponse;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/webkit/WebViewZygote;->connectToZygoteIfNeededLocked()V
-PLandroid/webkit/WebViewZygote;->getPackageName()Ljava/lang/String;
-HSPLandroid/webkit/WebViewZygote;->getProcess()Landroid/os/ZygoteProcess;
-PLandroid/webkit/WebViewZygote;->isMultiprocessEnabled()Z
-HSPLandroid/webkit/WebViewZygote;->onWebViewProviderChanged(Landroid/content/pm/PackageInfo;)V
-HSPLandroid/webkit/WebViewZygote;->setMultiprocessEnabled(Z)V
-HPLandroid/widget/-$$Lambda$PopupWindow$8Gc2stI5cSJZbuKX7X4Qr_vU2nI;-><init>(Landroid/widget/PopupWindow;)V
-HPLandroid/widget/-$$Lambda$PopupWindow$nV1HS3Nc6Ck5JRIbIHe3mkyHWzc;-><init>(Landroid/widget/PopupWindow;)V
-HPLandroid/widget/-$$Lambda$RemoteViews$FAOkoZgPKPkiYdtkDxAhkeoykww;->onLoadClass(Ljava/lang/Class;)Z
-HSPLandroid/widget/AbsListView$3;->run()V
+HSPLandroid/webkit/WebViewProviderResponse;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/webkit/WebViewProviderResponse;-><init>(Landroid/os/Parcel;Landroid/webkit/WebViewProviderResponse$1;)V
+HSPLandroid/widget/-$$Lambda$IfzAW5fP9thoftErKAjo9SLZufw;-><init>(Landroid/widget/TextView;)V
+HSPLandroid/widget/-$$Lambda$yIdmBO6ZxaY03PGN08RySVVQXuE;-><init>(Landroid/widget/TextView;)V
 HSPLandroid/widget/AbsListView$AdapterDataSetObserver;-><init>(Landroid/widget/AbsListView;)V
-HPLandroid/widget/AbsListView$AdapterDataSetObserver;->onChanged()V
-HPLandroid/widget/AbsListView$CheckForTap;->run()V
-HPLandroid/widget/AbsListView$LayoutParams;-><init>(II)V
-HPLandroid/widget/AbsListView$LayoutParams;-><init>(III)V
-HSPLandroid/widget/AbsListView$PerformClick;->run()V
-HSPLandroid/widget/AbsListView$RecycleBin;->addScrapView(Landroid/view/View;I)V
+HSPLandroid/widget/AbsListView$AdapterDataSetObserver;->onChanged()V
+HSPLandroid/widget/AbsListView$RecycleBin;-><init>(Landroid/widget/AbsListView;)V
 HSPLandroid/widget/AbsListView$RecycleBin;->clear()V
 HSPLandroid/widget/AbsListView$RecycleBin;->clearTransientStateViews()V
-HSPLandroid/widget/AbsListView$RecycleBin;->fillActiveViews(II)V
-HSPLandroid/widget/AbsListView$RecycleBin;->getActiveView(I)Landroid/view/View;
 HSPLandroid/widget/AbsListView$RecycleBin;->getScrapView(I)Landroid/view/View;
 HSPLandroid/widget/AbsListView$RecycleBin;->getTransientStateView(I)Landroid/view/View;
 HSPLandroid/widget/AbsListView$RecycleBin;->markChildrenDirty()V
@@ -27681,77 +13826,29 @@
 HSPLandroid/widget/AbsListView$RecycleBin;->retrieveFromScrap(Ljava/util/ArrayList;I)Landroid/view/View;
 HSPLandroid/widget/AbsListView$RecycleBin;->scrapActiveViews()V
 HSPLandroid/widget/AbsListView$RecycleBin;->setViewTypeCount(I)V
-HSPLandroid/widget/AbsListView$RecycleBin;->shouldRecycleViewType(I)Z
-HPLandroid/widget/AbsListView$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/widget/AbsListView$WindowRunnnable;->rememberWindowAttachCount()V
-HSPLandroid/widget/AbsListView$WindowRunnnable;->sameWindow()Z
 HSPLandroid/widget/AbsListView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/AbsListView;->access$1000(Landroid/widget/AbsListView;)[F
-HSPLandroid/widget/AbsListView;->access$1602(Landroid/widget/AbsListView;Ljava/lang/Runnable;)Ljava/lang/Runnable;
-HSPLandroid/widget/AbsListView;->access$1700(Landroid/widget/AbsListView;)Z
-HSPLandroid/widget/AbsListView;->access$600(Landroid/widget/AbsListView;)I
-HSPLandroid/widget/AbsListView;->access$700(Landroid/widget/AbsListView;)I
 HSPLandroid/widget/AbsListView;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
 HSPLandroid/widget/AbsListView;->clearChoices()V
-HPLandroid/widget/AbsListView;->clearScrollingCache()V
-HPLandroid/widget/AbsListView;->computeVerticalScrollExtent()I
-HPLandroid/widget/AbsListView;->computeVerticalScrollOffset()I
-HPLandroid/widget/AbsListView;->computeVerticalScrollRange()I
-HPLandroid/widget/AbsListView;->contentFits()Z
-HPLandroid/widget/AbsListView;->createScrollingCache()V
-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;->dismissPopup()V
 HSPLandroid/widget/AbsListView;->drawableStateChanged()V
-HPLandroid/widget/AbsListView;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
-HSPLandroid/widget/AbsListView;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
-HSPLandroid/widget/AbsListView;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/AbsListView$LayoutParams;
-HSPLandroid/widget/AbsListView;->getDrawableStateForSelector()[I
-HSPLandroid/widget/AbsListView;->getVerticalScrollbarWidth()I
 HSPLandroid/widget/AbsListView;->handleBoundsChange()V
-HSPLandroid/widget/AbsListView;->handleDataChanged()V
-HSPLandroid/widget/AbsListView;->handleScrollBarDragging(Landroid/view/MotionEvent;)Z
 HSPLandroid/widget/AbsListView;->hideSelector()V
 HSPLandroid/widget/AbsListView;->initAbsListView()V
 HSPLandroid/widget/AbsListView;->internalSetPadding(IIII)V
 HSPLandroid/widget/AbsListView;->invokeOnItemScrollListener()V
-HSPLandroid/widget/AbsListView;->isFastScrollEnabled()Z
 HSPLandroid/widget/AbsListView;->isInFilterMode()Z
-HPLandroid/widget/AbsListView;->isItemChecked(I)Z
-HSPLandroid/widget/AbsListView;->isStackFromBottom()Z
-HSPLandroid/widget/AbsListView;->isVerticalScrollBarHidden()Z
 HSPLandroid/widget/AbsListView;->jumpDrawablesToCurrentState()V
 HSPLandroid/widget/AbsListView;->layoutChildren()V
 HSPLandroid/widget/AbsListView;->obtainView(I[Z)Landroid/view/View;
 HSPLandroid/widget/AbsListView;->onAttachedToWindow()V
-HSPLandroid/widget/AbsListView;->onCancelPendingInputEvents()V
-HSPLandroid/widget/AbsListView;->onDetachedFromWindow()V
-HSPLandroid/widget/AbsListView;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLandroid/widget/AbsListView;->onLayout(ZIIII)V
 HSPLandroid/widget/AbsListView;->onMeasure(II)V
-HPLandroid/widget/AbsListView;->onOverScrolled(IIZZ)V
 HSPLandroid/widget/AbsListView;->onRtlPropertiesChanged(I)V
-HPLandroid/widget/AbsListView;->onSaveInstanceState()Landroid/os/Parcelable;
-HPLandroid/widget/AbsListView;->onSecondaryPointerUp(Landroid/view/MotionEvent;)V
 HSPLandroid/widget/AbsListView;->onSizeChanged(IIII)V
-HPLandroid/widget/AbsListView;->onTouchCancel()V
-HSPLandroid/widget/AbsListView;->onTouchDown(Landroid/view/MotionEvent;)V
-HSPLandroid/widget/AbsListView;->onTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLandroid/widget/AbsListView;->onTouchModeChanged(Z)V
-HSPLandroid/widget/AbsListView;->onTouchMove(Landroid/view/MotionEvent;Landroid/view/MotionEvent;)V
-HSPLandroid/widget/AbsListView;->onTouchUp(Landroid/view/MotionEvent;)V
 HSPLandroid/widget/AbsListView;->onWindowFocusChanged(Z)V
-HSPLandroid/widget/AbsListView;->performItemClick(Landroid/view/View;IJ)Z
-HSPLandroid/widget/AbsListView;->pointToPosition(II)I
-HSPLandroid/widget/AbsListView;->positionSelector(ILandroid/view/View;)V
-HSPLandroid/widget/AbsListView;->positionSelector(ILandroid/view/View;ZFF)V
-HPLandroid/widget/AbsListView;->reconcileSelectedPosition()I
-HPLandroid/widget/AbsListView;->recycleVelocityTracker()V
-HPLandroid/widget/AbsListView;->reportScrollStateChange(I)V
 HSPLandroid/widget/AbsListView;->requestLayout()V
-HSPLandroid/widget/AbsListView;->requestLayoutIfNecessary()V
 HSPLandroid/widget/AbsListView;->resetList()V
-HPLandroid/widget/AbsListView;->scrollIfNeeded(IILandroid/view/MotionEvent;)V
 HSPLandroid/widget/AbsListView;->setAdapter(Landroid/widget/ListAdapter;)V
 HSPLandroid/widget/AbsListView;->setCacheColorHint(I)V
 HSPLandroid/widget/AbsListView;->setChoiceMode(I)V
@@ -27759,352 +13856,149 @@
 HSPLandroid/widget/AbsListView;->setFastScrollEnabled(Z)V
 HSPLandroid/widget/AbsListView;->setFastScrollStyle(I)V
 HSPLandroid/widget/AbsListView;->setFrame(IIII)Z
-HPLandroid/widget/AbsListView;->setItemChecked(IZ)V
 HSPLandroid/widget/AbsListView;->setItemViewLayoutParams(Landroid/view/View;I)V
 HSPLandroid/widget/AbsListView;->setScrollingCacheEnabled(Z)V
-HPLandroid/widget/AbsListView;->setSelectionFromTop(II)V
-HPLandroid/widget/AbsListView;->setSelector(I)V
 HSPLandroid/widget/AbsListView;->setSelector(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/AbsListView;->setSmoothScrollbarEnabled(Z)V
 HSPLandroid/widget/AbsListView;->setStackFromBottom(Z)V
 HSPLandroid/widget/AbsListView;->setTextFilterEnabled(Z)V
 HSPLandroid/widget/AbsListView;->setTranscriptMode(I)V
 HSPLandroid/widget/AbsListView;->setVisibleRangeHint(II)V
-HPLandroid/widget/AbsListView;->shouldDisplayEdgeEffects()Z
 HSPLandroid/widget/AbsListView;->shouldShowSelector()Z
-HSPLandroid/widget/AbsListView;->startScrollIfNeeded(IILandroid/view/MotionEvent;)Z
 HSPLandroid/widget/AbsListView;->touchModeDrawsInPressedState()Z
-HPLandroid/widget/AbsListView;->trackMotionScroll(II)Z
-HPLandroid/widget/AbsListView;->updateOnScreenCheckedViews()V
 HSPLandroid/widget/AbsListView;->updateScrollIndicators()V
 HSPLandroid/widget/AbsListView;->updateSelectorState()V
 HSPLandroid/widget/AbsListView;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
-HSPLandroid/widget/AbsSeekBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/widget/AbsSeekBar;->applyThumbTint()V
-HSPLandroid/widget/AbsSeekBar;->applyTickMarkTint()V
-HPLandroid/widget/AbsSeekBar;->attemptClaimDrag()V
-HSPLandroid/widget/AbsSeekBar;->drawThumb(Landroid/graphics/Canvas;)V
-HSPLandroid/widget/AbsSeekBar;->drawTickMarks(Landroid/graphics/Canvas;)V
-HSPLandroid/widget/AbsSeekBar;->drawTrack(Landroid/graphics/Canvas;)V
-HPLandroid/widget/AbsSeekBar;->drawableHotspotChanged(FF)V
-HSPLandroid/widget/AbsSeekBar;->drawableStateChanged()V
-HSPLandroid/widget/AbsSeekBar;->getThumb()Landroid/graphics/drawable/Drawable;
-HSPLandroid/widget/AbsSeekBar;->getThumbOffset()I
-HSPLandroid/widget/AbsSeekBar;->growRectTo(Landroid/graphics/Rect;I)V
-HSPLandroid/widget/AbsSeekBar;->jumpDrawablesToCurrentState()V
-HSPLandroid/widget/AbsSeekBar;->onDraw(Landroid/graphics/Canvas;)V
-HSPLandroid/widget/AbsSeekBar;->onMeasure(II)V
-HSPLandroid/widget/AbsSeekBar;->onResolveDrawables(I)V
-HSPLandroid/widget/AbsSeekBar;->onRtlPropertiesChanged(I)V
-HSPLandroid/widget/AbsSeekBar;->onSizeChanged(IIII)V
-HPLandroid/widget/AbsSeekBar;->onStartTrackingTouch()V
-HPLandroid/widget/AbsSeekBar;->onStopTrackingTouch()V
-HPLandroid/widget/AbsSeekBar;->onTouchEvent(Landroid/view/MotionEvent;)Z
-HSPLandroid/widget/AbsSeekBar;->onVisualProgressChanged(IF)V
-HPLandroid/widget/AbsSeekBar;->setHotspot(FF)V
-HSPLandroid/widget/AbsSeekBar;->setKeyProgressIncrement(I)V
-HSPLandroid/widget/AbsSeekBar;->setMax(I)V
-HSPLandroid/widget/AbsSeekBar;->setMin(I)V
-HSPLandroid/widget/AbsSeekBar;->setSplitTrack(Z)V
-HSPLandroid/widget/AbsSeekBar;->setThumb(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/widget/AbsSeekBar;->setThumbOffset(I)V
-HSPLandroid/widget/AbsSeekBar;->setThumbPos(ILandroid/graphics/drawable/Drawable;FI)V
-HPLandroid/widget/AbsSeekBar;->setThumbTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/widget/AbsSeekBar;->setTickMark(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/widget/AbsSeekBar;->startDrag(Landroid/view/MotionEvent;)V
-HPLandroid/widget/AbsSeekBar;->trackTouchEvent(Landroid/view/MotionEvent;)V
-HSPLandroid/widget/AbsSeekBar;->updateGestureExclusionRects()V
-HSPLandroid/widget/AbsSeekBar;->updateThumbAndTrackPos(II)V
-HSPLandroid/widget/AbsSeekBar;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
-HSPLandroid/widget/AbsoluteLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/AbsoluteLayout;->onLayout(ZIIII)V
-HPLandroid/widget/ActionMenuPresenter$2;->onViewDetachedFromWindow(Landroid/view/View;)V
-HPLandroid/widget/ActionMenuPresenter;-><init>(Landroid/content/Context;)V
-HPLandroid/widget/ActionMenuPresenter;->dismissPopupMenus()Z
-HPLandroid/widget/ActionMenuPresenter;->filterLeftoverView(Landroid/view/ViewGroup;I)Z
-HPLandroid/widget/ActionMenuPresenter;->hideOverflowMenu()Z
-HPLandroid/widget/ActionMenuPresenter;->hideSubMenus()Z
-HPLandroid/widget/ActionMenuPresenter;->initForMenu(Landroid/content/Context;Lcom/android/internal/view/menu/MenuBuilder;)V
-HPLandroid/widget/ActionMenuPresenter;->isOverflowMenuShowing()Z
-HPLandroid/widget/ActionMenuPresenter;->setExpandedActionViewsExclusive(Z)V
-HPLandroid/widget/ActionMenuPresenter;->setMenuView(Landroid/widget/ActionMenuView;)V
-HPLandroid/widget/ActionMenuPresenter;->shouldIncludeItem(ILcom/android/internal/view/menu/MenuItemImpl;)Z
-HPLandroid/widget/ActionMenuPresenter;->updateMenuView(Z)V
-HSPLandroid/widget/ActionMenuView;-><init>(Landroid/content/Context;)V
-HSPLandroid/widget/ActionMenuView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/widget/ActionMenuView;->dismissPopupMenus()V
-HPLandroid/widget/ActionMenuView;->hasDividerBeforeChildAt(I)Z
-HPLandroid/widget/ActionMenuView;->initialize(Lcom/android/internal/view/menu/MenuBuilder;)V
-HPLandroid/widget/ActionMenuView;->isOverflowMenuShowing()Z
-HPLandroid/widget/ActionMenuView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HPLandroid/widget/ActionMenuView;->onDetachedFromWindow()V
-HPLandroid/widget/ActionMenuView;->onMeasure(II)V
-HPLandroid/widget/ActionMenuView;->peekMenu()Lcom/android/internal/view/menu/MenuBuilder;
-HPLandroid/widget/ActionMenuView;->setMenuCallbacks(Lcom/android/internal/view/menu/MenuPresenter$Callback;Lcom/android/internal/view/menu/MenuBuilder$Callback;)V
-HPLandroid/widget/ActionMenuView;->setOnMenuItemClickListener(Landroid/widget/ActionMenuView$OnMenuItemClickListener;)V
-HPLandroid/widget/ActionMenuView;->setOverflowReserved(Z)V
-HPLandroid/widget/ActionMenuView;->setPopupTheme(I)V
-HPLandroid/widget/ActionMenuView;->setPresenter(Landroid/widget/ActionMenuPresenter;)V
 HSPLandroid/widget/AdapterView$AdapterDataSetObserver;-><init>(Landroid/widget/AdapterView;)V
-HPLandroid/widget/AdapterView$AdapterDataSetObserver;->onChanged()V
+HSPLandroid/widget/AdapterView$AdapterDataSetObserver;->onChanged()V
 HSPLandroid/widget/AdapterView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/AdapterView;->checkFocus()V
 HSPLandroid/widget/AdapterView;->checkSelectionChanged()V
-HPLandroid/widget/AdapterView;->dispatchSaveInstanceState(Landroid/util/SparseArray;)V
 HSPLandroid/widget/AdapterView;->getItemIdAtPosition(I)J
-HPLandroid/widget/AdapterView;->getSelectedItemId()J
-HPLandroid/widget/AdapterView;->onProvideAutofillStructure(Landroid/view/ViewStructure;I)V
-HPLandroid/widget/AdapterView;->onProvideStructure(Landroid/view/ViewStructure;II)V
-HSPLandroid/widget/AdapterView;->performItemClick(Landroid/view/View;IJ)Z
+HSPLandroid/widget/AdapterView;->onLayout(ZIIII)V
 HSPLandroid/widget/AdapterView;->rememberSyncState()V
-HPLandroid/widget/AdapterView;->setEmptyView(Landroid/view/View;)V
-HPLandroid/widget/AdapterView;->setFocusable(I)V
 HSPLandroid/widget/AdapterView;->setFocusableInTouchMode(Z)V
 HSPLandroid/widget/AdapterView;->setNextSelectedPositionInt(I)V
 HSPLandroid/widget/AdapterView;->setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V
 HSPLandroid/widget/AdapterView;->setSelectedPositionInt(I)V
-HPLandroid/widget/AdapterView;->updateEmptyStatus(Z)V
-HPLandroid/widget/AutoCompleteTextView$DropDownItemClickListener;-><init>(Landroid/widget/AutoCompleteTextView;)V
-HPLandroid/widget/AutoCompleteTextView$DropDownItemClickListener;-><init>(Landroid/widget/AutoCompleteTextView;Landroid/widget/AutoCompleteTextView$1;)V
-HPLandroid/widget/AutoCompleteTextView$MyWatcher;-><init>(Landroid/widget/AutoCompleteTextView;)V
-HPLandroid/widget/AutoCompleteTextView$MyWatcher;-><init>(Landroid/widget/AutoCompleteTextView;Landroid/widget/AutoCompleteTextView$1;)V
-HPLandroid/widget/AutoCompleteTextView$MyWatcher;->afterTextChanged(Landroid/text/Editable;)V
-HPLandroid/widget/AutoCompleteTextView$MyWatcher;->beforeTextChanged(Ljava/lang/CharSequence;III)V
-HPLandroid/widget/AutoCompleteTextView$MyWatcher;->onTextChanged(Ljava/lang/CharSequence;III)V
-HPLandroid/widget/AutoCompleteTextView$PassThroughClickListener;-><init>(Landroid/widget/AutoCompleteTextView;)V
-HPLandroid/widget/AutoCompleteTextView$PassThroughClickListener;-><init>(Landroid/widget/AutoCompleteTextView;Landroid/widget/AutoCompleteTextView$1;)V
-HPLandroid/widget/AutoCompleteTextView$PassThroughClickListener;->access$302(Landroid/widget/AutoCompleteTextView$PassThroughClickListener;Landroid/view/View$OnClickListener;)Landroid/view/View$OnClickListener;
-HPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;IILandroid/content/res/Resources$Theme;)V
-HPLandroid/widget/AutoCompleteTextView;->access$500(Landroid/widget/AutoCompleteTextView;)Z
-HPLandroid/widget/AutoCompleteTextView;->dismissDropDown()V
-HPLandroid/widget/AutoCompleteTextView;->doAfterTextChanged()V
-HPLandroid/widget/AutoCompleteTextView;->doBeforeTextChanged()V
-HPLandroid/widget/AutoCompleteTextView;->enoughToFilter()Z
-HPLandroid/widget/AutoCompleteTextView;->getDropDownAnchor()I
-HPLandroid/widget/AutoCompleteTextView;->getDropDownBackground()Landroid/graphics/drawable/Drawable;
-HPLandroid/widget/AutoCompleteTextView;->getThreshold()I
-HPLandroid/widget/AutoCompleteTextView;->isPopupShowing()Z
-HPLandroid/widget/AutoCompleteTextView;->onAttachedToWindow()V
-HPLandroid/widget/AutoCompleteTextView;->onDetachedFromWindow()V
-HPLandroid/widget/AutoCompleteTextView;->onFocusChanged(ZILandroid/graphics/Rect;)V
-HPLandroid/widget/AutoCompleteTextView;->onKeyPreIme(ILandroid/view/KeyEvent;)Z
-HPLandroid/widget/AutoCompleteTextView;->onWindowFocusChanged(Z)V
-HPLandroid/widget/AutoCompleteTextView;->performValidation()V
-HPLandroid/widget/AutoCompleteTextView;->refreshAutoCompleteResults()V
-HPLandroid/widget/AutoCompleteTextView;->setCompletionHint(Ljava/lang/CharSequence;)V
-HPLandroid/widget/AutoCompleteTextView;->setDropDownAnimationStyle(I)V
-HPLandroid/widget/AutoCompleteTextView;->setDropDownHorizontalOffset(I)V
-HPLandroid/widget/AutoCompleteTextView;->setDropDownWidth(I)V
-HPLandroid/widget/AutoCompleteTextView;->setFrame(IIII)Z
-HPLandroid/widget/AutoCompleteTextView;->setOnClickListener(Landroid/view/View$OnClickListener;)V
-HPLandroid/widget/AutoCompleteTextView;->setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V
-HPLandroid/widget/AutoCompleteTextView;->setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)V
-HPLandroid/widget/AutoCompleteTextView;->setThreshold(I)V
 HSPLandroid/widget/BaseAdapter;-><init>()V
-HPLandroid/widget/BaseAdapter;->areAllItemsEnabled()Z
-HPLandroid/widget/BaseAdapter;->getAutofillOptions()[Ljava/lang/CharSequence;
-HSPLandroid/widget/BaseAdapter;->getItemViewType(I)I
-HSPLandroid/widget/BaseAdapter;->getViewTypeCount()I
+HSPLandroid/widget/BaseAdapter;->areAllItemsEnabled()Z
 HSPLandroid/widget/BaseAdapter;->hasStableIds()Z
-HSPLandroid/widget/BaseAdapter;->isEnabled(I)Z
 HSPLandroid/widget/BaseAdapter;->notifyDataSetChanged()V
 HSPLandroid/widget/BaseAdapter;->registerDataSetObserver(Landroid/database/DataSetObserver;)V
-HSPLandroid/widget/BaseAdapter;->unregisterDataSetObserver(Landroid/database/DataSetObserver;)V
-HPLandroid/widget/Button;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/Button;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/Button;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HPLandroid/widget/Button;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/Button;->getAccessibilityClassName()Ljava/lang/CharSequence;
-HSPLandroid/widget/CheckBox;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/CheckBox;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/widget/CheckedTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/CheckedTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/widget/CheckedTextView;->applyCheckMarkTint()V
-HSPLandroid/widget/CheckedTextView;->drawableStateChanged()V
-HSPLandroid/widget/CheckedTextView;->internalSetPadding(IIII)V
-HSPLandroid/widget/CheckedTextView;->isCheckMarkAtStart()Z
-HSPLandroid/widget/CheckedTextView;->isChecked()Z
-HSPLandroid/widget/CheckedTextView;->jumpDrawablesToCurrentState()V
-HSPLandroid/widget/CheckedTextView;->onCreateDrawableState(I)[I
-HSPLandroid/widget/CheckedTextView;->onDraw(Landroid/graphics/Canvas;)V
-HSPLandroid/widget/CheckedTextView;->onRtlPropertiesChanged(I)V
-HSPLandroid/widget/CheckedTextView;->setBasePadding(Z)V
-HSPLandroid/widget/CheckedTextView;->setCheckMarkDrawable(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/widget/CheckedTextView;->setCheckMarkDrawableInternal(Landroid/graphics/drawable/Drawable;I)V
-HSPLandroid/widget/CheckedTextView;->setChecked(Z)V
-HSPLandroid/widget/CheckedTextView;->setVisibility(I)V
-HSPLandroid/widget/CheckedTextView;->updatePadding()V
-HPLandroid/widget/Chronometer$1;->run()V
-HPLandroid/widget/Chronometer;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/widget/Chronometer;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/Chronometer;->access$000(Landroid/widget/Chronometer;)Z
-HPLandroid/widget/Chronometer;->access$100(Landroid/widget/Chronometer;J)V
-HPLandroid/widget/Chronometer;->access$200(Landroid/widget/Chronometer;)Ljava/lang/Runnable;
-HPLandroid/widget/Chronometer;->dispatchChronometerTick()V
-HPLandroid/widget/Chronometer;->onDetachedFromWindow()V
-HPLandroid/widget/Chronometer;->onVisibilityChanged(Landroid/view/View;I)V
-HPLandroid/widget/Chronometer;->onWindowVisibilityChanged(I)V
-HPLandroid/widget/Chronometer;->setBase(J)V
-HPLandroid/widget/Chronometer;->setCountDown(Z)V
-HPLandroid/widget/Chronometer;->setFormat(Ljava/lang/String;)V
-HPLandroid/widget/Chronometer;->setStarted(Z)V
-HPLandroid/widget/Chronometer;->updateRunning()V
-HPLandroid/widget/Chronometer;->updateText(J)V
+HSPLandroid/widget/Button;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/CompoundButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/CompoundButton;->applyButtonTint()V
-HPLandroid/widget/CompoundButton;->drawableHotspotChanged(FF)V
 HSPLandroid/widget/CompoundButton;->drawableStateChanged()V
 HSPLandroid/widget/CompoundButton;->getAutofillType()I
-HSPLandroid/widget/CompoundButton;->getButtonDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/widget/CompoundButton;->getButtonStateDescription()Ljava/lang/CharSequence;
 HSPLandroid/widget/CompoundButton;->getCompoundPaddingLeft()I
 HSPLandroid/widget/CompoundButton;->getCompoundPaddingRight()I
-HSPLandroid/widget/CompoundButton;->getHorizontalOffsetForDrawables()I
 HSPLandroid/widget/CompoundButton;->isChecked()Z
 HSPLandroid/widget/CompoundButton;->jumpDrawablesToCurrentState()V
 HSPLandroid/widget/CompoundButton;->onCreateDrawableState(I)[I
-HSPLandroid/widget/CompoundButton;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/CompoundButton;->onResolveDrawables(I)V
-HPLandroid/widget/CompoundButton;->onSaveInstanceState()Landroid/os/Parcelable;
-HSPLandroid/widget/CompoundButton;->setButtonDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/CompoundButton;->setChecked(Z)V
 HSPLandroid/widget/CompoundButton;->setDefaultStateDescritption()V
+HSPLandroid/widget/CompoundButton;->setOnCheckedChangeListener(Landroid/widget/CompoundButton$OnCheckedChangeListener;)V
 HSPLandroid/widget/CompoundButton;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
 HSPLandroid/widget/EdgeEffect;-><init>(Landroid/content/Context;)V
-HPLandroid/widget/EdgeEffect;->draw(Landroid/graphics/Canvas;)Z
-HSPLandroid/widget/EdgeEffect;->finish()V
+HSPLandroid/widget/EdgeEffect;->draw(Landroid/graphics/Canvas;)Z
 HSPLandroid/widget/EdgeEffect;->isFinished()Z
-HPLandroid/widget/EdgeEffect;->onAbsorb(I)V
-HPLandroid/widget/EdgeEffect;->onPull(F)V
-HPLandroid/widget/EdgeEffect;->onPull(FF)V
 HSPLandroid/widget/EdgeEffect;->onRelease()V
 HSPLandroid/widget/EdgeEffect;->setSize(II)V
-HPLandroid/widget/EdgeEffect;->update()V
+HSPLandroid/widget/EdgeEffect;->update()V
 HSPLandroid/widget/EditText;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/EditText;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HPLandroid/widget/EditText;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/EditText;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HSPLandroid/widget/EditText;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/EditText;->getDefaultEditable()Z
 HSPLandroid/widget/EditText;->getDefaultMovementMethod()Landroid/text/method/MovementMethod;
-HSPLandroid/widget/EditText;->getFreezesText()Z
 HSPLandroid/widget/EditText;->getText()Landroid/text/Editable;
 HSPLandroid/widget/EditText;->getText()Ljava/lang/CharSequence;
-HSPLandroid/widget/EditText;->setEllipsize(Landroid/text/TextUtils$TruncateAt;)V
-HPLandroid/widget/EditText;->setSelection(I)V
-HPLandroid/widget/EditText;->setSelection(II)V
 HSPLandroid/widget/EditText;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)V
 HSPLandroid/widget/EditText;->supportsAutoSizeText()Z
-HSPLandroid/widget/Editor$1;->run()V
+HSPLandroid/widget/Editor$1;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$2;-><init>(Landroid/widget/Editor;)V
 HSPLandroid/widget/Editor$2;->onDraw()V
-HPLandroid/widget/Editor$Blink;->cancel()V
-HPLandroid/widget/Editor$Blink;->run()V
-HPLandroid/widget/Editor$Blink;->uncancel()V
+HSPLandroid/widget/Editor$3;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$5;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$CursorAnchorInfoNotifier;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$CursorAnchorInfoNotifier;-><init>(Landroid/widget/Editor;Landroid/widget/Editor$1;)V
 HSPLandroid/widget/Editor$CursorAnchorInfoNotifier;->updatePosition(IIZZ)V
-HPLandroid/widget/Editor$EditOperation;-><init>(Landroid/widget/Editor;Ljava/lang/String;ILjava/lang/String;Z)V
-HPLandroid/widget/Editor$EditOperation;->commit()V
-HPLandroid/widget/Editor$EditOperation;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/widget/Editor$InsertionPointCursorController;->hide()V
-HPLandroid/widget/Editor$InsertionPointCursorController;->isActive()Z
-HPLandroid/widget/Editor$InsertionPointCursorController;->isCursorBeingModified()Z
-HPLandroid/widget/Editor$InsertionPointCursorController;->onDetached()V
-HSPLandroid/widget/Editor$MagnifierMotionAnimator;-><init>(Landroid/widget/Magnifier;)V
+HSPLandroid/widget/Editor$InputContentType;-><init>()V
+HSPLandroid/widget/Editor$PositionListener;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$PositionListener;-><init>(Landroid/widget/Editor;Landroid/widget/Editor$1;)V
 HSPLandroid/widget/Editor$PositionListener;->addSubscriber(Landroid/widget/Editor$TextViewPositionListener;Z)V
 HSPLandroid/widget/Editor$PositionListener;->onPreDraw()Z
 HSPLandroid/widget/Editor$PositionListener;->removeSubscriber(Landroid/widget/Editor$TextViewPositionListener;)V
 HSPLandroid/widget/Editor$PositionListener;->updatePosition()V
 HSPLandroid/widget/Editor$ProcessTextIntentActionsHandler;-><init>(Landroid/widget/Editor;)V
-HPLandroid/widget/Editor$SelectionModifierCursorController;->getMinTouchOffset()I
-HPLandroid/widget/Editor$SelectionModifierCursorController;->isCursorBeingModified()Z
-HPLandroid/widget/Editor$SelectionModifierCursorController;->isDragAcceleratorActive()Z
-HPLandroid/widget/Editor$SelectionModifierCursorController;->isSelectionStartDragged()Z
-HPLandroid/widget/Editor$SelectionModifierCursorController;->onDetached()V
-HPLandroid/widget/Editor$SelectionModifierCursorController;->onTouchEvent(Landroid/view/MotionEvent;)V
-HPLandroid/widget/Editor$SelectionModifierCursorController;->resetDragAcceleratorState()V
-HPLandroid/widget/Editor$SelectionModifierCursorController;->resetTouchOffsets()V
-HPLandroid/widget/Editor$SelectionModifierCursorController;->updateSelection(Landroid/view/MotionEvent;)V
+HSPLandroid/widget/Editor$ProcessTextIntentActionsHandler;-><init>(Landroid/widget/Editor;Landroid/widget/Editor$1;)V
+HSPLandroid/widget/Editor$SpanController;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$SpanController;-><init>(Landroid/widget/Editor;Landroid/widget/Editor$1;)V
 HSPLandroid/widget/Editor$SpanController;->hide()V
+HSPLandroid/widget/Editor$SpanController;->isNonIntermediateSelectionSpan(Landroid/text/Spannable;Ljava/lang/Object;)Z
 HSPLandroid/widget/Editor$SpanController;->onSpanAdded(Landroid/text/Spannable;Ljava/lang/Object;II)V
-HSPLandroid/widget/Editor$SpanController;->onSpanChanged(Landroid/text/Spannable;Ljava/lang/Object;IIII)V
 HSPLandroid/widget/Editor$SpanController;->onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V
+HSPLandroid/widget/Editor$SuggestionHelper$SuggestionSpanComparator;-><init>(Landroid/widget/Editor$SuggestionHelper;)V
+HSPLandroid/widget/Editor$SuggestionHelper$SuggestionSpanComparator;-><init>(Landroid/widget/Editor$SuggestionHelper;Landroid/widget/Editor$1;)V
+HSPLandroid/widget/Editor$SuggestionHelper;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$SuggestionHelper;-><init>(Landroid/widget/Editor;Landroid/widget/Editor$1;)V
 HSPLandroid/widget/Editor$TextRenderNode;->needsRecord()Z
-HPLandroid/widget/Editor$UndoInputFilter;->beginBatchEdit()V
-HPLandroid/widget/Editor$UndoInputFilter;->canUndoEdit(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Z
-HPLandroid/widget/Editor$UndoInputFilter;->endBatchEdit()V
-HPLandroid/widget/Editor$UndoInputFilter;->filter(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence;
-HPLandroid/widget/Editor$UndoInputFilter;->handleEdit(Ljava/lang/CharSequence;IILandroid/text/Spanned;IIZ)V
-HPLandroid/widget/Editor$UndoInputFilter;->recordEdit(Landroid/widget/Editor$EditOperation;I)V
-HSPLandroid/widget/Editor$UndoInputFilter;->restoreInstanceState(Landroid/os/Parcel;)V
-HSPLandroid/widget/Editor$UndoInputFilter;->saveInstanceState(Landroid/os/Parcel;)V
+HSPLandroid/widget/Editor$UndoInputFilter;-><init>(Landroid/widget/Editor;)V
 HSPLandroid/widget/Editor;-><init>(Landroid/widget/TextView;)V
-HPLandroid/widget/Editor;->access$2200(Landroid/widget/Editor;)Z
-HPLandroid/widget/Editor;->access$300(Landroid/widget/Editor;)Landroid/widget/TextView;
-HPLandroid/widget/Editor;->access$6800(Landroid/widget/Editor;)Landroid/widget/EditorTouchState;
+HSPLandroid/widget/Editor;->access$000(Landroid/widget/Editor;)Landroid/widget/Editor$MagnifierMotionAnimator;
+HSPLandroid/widget/Editor;->access$1600(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor;->access$300(Landroid/widget/Editor;)Landroid/widget/TextView;
 HSPLandroid/widget/Editor;->addSpanWatchers(Landroid/text/Spannable;)V
 HSPLandroid/widget/Editor;->adjustInputType(ZZZZ)V
-HPLandroid/widget/Editor;->beginBatchEdit()V
-HPLandroid/widget/Editor;->clampHorizontalPosition(Landroid/graphics/drawable/Drawable;F)I
 HSPLandroid/widget/Editor;->createInputContentTypeIfNeeded()V
-HPLandroid/widget/Editor;->createInputMethodStateIfNeeded()V
 HSPLandroid/widget/Editor;->discardTextDisplayLists()V
-HPLandroid/widget/Editor;->downgradeEasyCorrectionSpans()V
 HSPLandroid/widget/Editor;->drawHardwareAccelerated(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
 HSPLandroid/widget/Editor;->drawHardwareAcceleratedInner(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I[I[IIII)I
-HPLandroid/widget/Editor;->endBatchEdit()V
 HSPLandroid/widget/Editor;->ensureEndedBatchEdit()V
 HSPLandroid/widget/Editor;->ensureNoSelectionIfNonSelectable()V
-HPLandroid/widget/Editor;->extractedTextModeWillBeStarted()Z
-HPLandroid/widget/Editor;->finishBatchEdit(Landroid/widget/Editor$InputMethodState;)V
+HSPLandroid/widget/Editor;->extractedTextModeWillBeStarted()Z
 HSPLandroid/widget/Editor;->forgetUndoRedo()V
 HSPLandroid/widget/Editor;->getAvailableDisplayListIndex([III)I
-HPLandroid/widget/Editor;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;
-HPLandroid/widget/Editor;->getLastTapPosition()I
+HSPLandroid/widget/Editor;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/widget/Editor;->getInsertionController()Landroid/widget/Editor$InsertionPointCursorController;
+HSPLandroid/widget/Editor;->getPositionListener()Landroid/widget/Editor$PositionListener;
+HSPLandroid/widget/Editor;->getSelectionActionModeHelper()Landroid/widget/SelectionActionModeHelper;
 HSPLandroid/widget/Editor;->getSelectionController()Landroid/widget/Editor$SelectionModifierCursorController;
 HSPLandroid/widget/Editor;->getTextActionMode()Landroid/view/ActionMode;
 HSPLandroid/widget/Editor;->getTextView()Landroid/widget/TextView;
-HPLandroid/widget/Editor;->hasSelectionController()Z
 HSPLandroid/widget/Editor;->hideCursorAndSpanControllers()V
+HSPLandroid/widget/Editor;->hideCursorControllers()V
 HSPLandroid/widget/Editor;->hideInsertionPointCursorController()V
+HSPLandroid/widget/Editor;->hideSpanControllers()V
 HSPLandroid/widget/Editor;->invalidateTextDisplayList()V
-HPLandroid/widget/Editor;->loadCursorDrawable()V
+HSPLandroid/widget/Editor;->isCursorVisible()Z
 HSPLandroid/widget/Editor;->makeBlink()V
 HSPLandroid/widget/Editor;->onAttachedToWindow()V
 HSPLandroid/widget/Editor;->onDetachedFromWindow()V
 HSPLandroid/widget/Editor;->onDraw(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
-HPLandroid/widget/Editor;->onFocusChanged(ZI)V
-HPLandroid/widget/Editor;->onLocaleChanged()V
-HPLandroid/widget/Editor;->onScreenStateChanged(I)V
-HPLandroid/widget/Editor;->onTextOperationUserChanged()V
-HPLandroid/widget/Editor;->onTouchEvent(Landroid/view/MotionEvent;)V
+HSPLandroid/widget/Editor;->onScreenStateChanged(I)V
 HSPLandroid/widget/Editor;->onWindowFocusChanged(Z)V
 HSPLandroid/widget/Editor;->prepareCursorControllers()V
 HSPLandroid/widget/Editor;->refreshTextActionMode()V
-HPLandroid/widget/Editor;->reportExtractedText()Z
-HSPLandroid/widget/Editor;->restoreInstanceState(Landroid/os/ParcelableParcel;)V
-HSPLandroid/widget/Editor;->saveInstanceState()Landroid/os/ParcelableParcel;
+HSPLandroid/widget/Editor;->resumeBlink()V
 HSPLandroid/widget/Editor;->sendOnTextChanged(III)V
 HSPLandroid/widget/Editor;->sendUpdateSelection()V
 HSPLandroid/widget/Editor;->setFrame()V
 HSPLandroid/widget/Editor;->shouldBlink()Z
-HPLandroid/widget/Editor;->shouldFilterOutTouchEvent(Landroid/view/MotionEvent;)Z
-HPLandroid/widget/Editor;->shouldRenderCursor()Z
 HSPLandroid/widget/Editor;->stopTextActionMode()V
-HPLandroid/widget/Editor;->updateCursorPosition()V
-HPLandroid/widget/Editor;->updateCursorPosition(IIF)V
-HPLandroid/widget/Editor;->updateFloatingToolbarVisibility(Landroid/view/MotionEvent;)V
+HSPLandroid/widget/Editor;->stopTextActionModeWithPreservingSelection()V
+HSPLandroid/widget/Editor;->suspendBlink()V
 HSPLandroid/widget/Editor;->updateSpellCheckSpans(IIZ)V
 HSPLandroid/widget/EditorTouchState;-><init>()V
-HPLandroid/widget/EditorTouchState;->getLastDownX()F
-HPLandroid/widget/EditorTouchState;->getLastDownY()F
-HPLandroid/widget/EditorTouchState;->update(Landroid/view/MotionEvent;Landroid/view/ViewConfiguration;)V
-HPLandroid/widget/Filter;-><init>()V
-HPLandroid/widget/ForwardingListener;-><init>(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
-PLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$MarginLayoutParams;)V
 HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
@@ -28115,133 +14009,38 @@
 HSPLandroid/widget/FrameLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/FrameLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/FrameLayout$LayoutParams;
 HSPLandroid/widget/FrameLayout;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/view/ViewGroup$LayoutParams;
-HPLandroid/widget/FrameLayout;->getAccessibilityClassName()Ljava/lang/CharSequence;
-HPLandroid/widget/FrameLayout;->getPaddingBottomWithForeground()I
+HSPLandroid/widget/FrameLayout;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HSPLandroid/widget/FrameLayout;->getPaddingBottomWithForeground()I
 HSPLandroid/widget/FrameLayout;->getPaddingLeftWithForeground()I
 HSPLandroid/widget/FrameLayout;->getPaddingRightWithForeground()I
-HPLandroid/widget/FrameLayout;->getPaddingTopWithForeground()I
+HSPLandroid/widget/FrameLayout;->getPaddingTopWithForeground()I
 HSPLandroid/widget/FrameLayout;->layoutChildren(IIIIZ)V
 HSPLandroid/widget/FrameLayout;->onLayout(ZIIII)V
 HSPLandroid/widget/FrameLayout;->onMeasure(II)V
 HSPLandroid/widget/FrameLayout;->setForegroundGravity(I)V
-HPLandroid/widget/FrameLayout;->setMeasureAllChildren(Z)V
-HPLandroid/widget/FrameLayout;->shouldDelayChildPressedState()Z
-HPLandroid/widget/GridLayout$3;->getAlignmentValue(Landroid/view/View;II)I
-HPLandroid/widget/GridLayout$3;->getGravityOffset(Landroid/view/View;I)I
-HPLandroid/widget/GridLayout$7$1;->getOffset(Landroid/widget/GridLayout;Landroid/view/View;Landroid/widget/GridLayout$Alignment;IZ)I
-HPLandroid/widget/GridLayout$7$1;->include(II)V
-HPLandroid/widget/GridLayout$7$1;->reset()V
-HPLandroid/widget/GridLayout$7$1;->size(Z)I
-HPLandroid/widget/GridLayout$7;->getAlignmentValue(Landroid/view/View;II)I
-HPLandroid/widget/GridLayout$7;->getGravityOffset(Landroid/view/View;I)I
-HPLandroid/widget/GridLayout$Alignment;->getSizeInCell(Landroid/view/View;II)I
-HPLandroid/widget/GridLayout$Axis;->computeGroupBounds()V
-HPLandroid/widget/GridLayout$Axis;->computeLinks(Landroid/widget/GridLayout$PackedMap;Z)V
-HPLandroid/widget/GridLayout$Axis;->computeLocations([I)V
-HPLandroid/widget/GridLayout$Axis;->getGroupBounds()Landroid/widget/GridLayout$PackedMap;
-HPLandroid/widget/GridLayout$Axis;->getLocations()[I
-HPLandroid/widget/GridLayout$Axis;->getMeasure(I)I
-HPLandroid/widget/GridLayout$Axis;->layout(I)V
-HPLandroid/widget/GridLayout$Axis;->solve([Landroid/widget/GridLayout$Arc;[IZ)Z
-HPLandroid/widget/GridLayout$Bounds;->getOffset(Landroid/widget/GridLayout;Landroid/view/View;Landroid/widget/GridLayout$Alignment;IZ)I
-HPLandroid/widget/GridLayout$Bounds;->include(II)V
-HPLandroid/widget/GridLayout$Bounds;->reset()V
-HPLandroid/widget/GridLayout$Bounds;->size(Z)I
-HPLandroid/widget/GridLayout$LayoutParams;->hashCode()I
-HPLandroid/widget/GridLayout$PackedMap;->getValue(I)Ljava/lang/Object;
-HPLandroid/widget/GridLayout$Spec;->access$100(Landroid/widget/GridLayout$Spec;Z)Landroid/widget/GridLayout$Alignment;
-HPLandroid/widget/GridLayout$Spec;->hashCode()I
-HPLandroid/widget/GridLayout;->computeLayoutParamsHashCode()I
-HPLandroid/widget/GridLayout;->consistencyCheck()V
-HPLandroid/widget/GridLayout;->getDefaultMargin(Landroid/view/View;Landroid/widget/GridLayout$LayoutParams;ZZ)I
-HPLandroid/widget/GridLayout;->getLayoutParams(Landroid/view/View;)Landroid/widget/GridLayout$LayoutParams;
-HPLandroid/widget/GridLayout;->getMargin(Landroid/view/View;ZZ)I
-HPLandroid/widget/GridLayout;->getMargin1(Landroid/view/View;ZZ)I
-HPLandroid/widget/GridLayout;->getMeasurement(Landroid/view/View;Z)I
-HPLandroid/widget/GridLayout;->measureChildrenWithMargins(IIZ)V
-HPLandroid/widget/GridLayout;->onLayout(ZIIII)V
-HPLandroid/widget/GridLayout;->onMeasure(II)V
-HPLandroid/widget/GridLayout;->requestLayout()V
-HPLandroid/widget/HeaderViewListAdapter;-><init>(Ljava/util/ArrayList;Ljava/util/ArrayList;Landroid/widget/ListAdapter;)V
-HPLandroid/widget/HeaderViewListAdapter;->areAllItemsEnabled()Z
-HPLandroid/widget/HeaderViewListAdapter;->areAllListInfosSelectable(Ljava/util/ArrayList;)Z
-HPLandroid/widget/HeaderViewListAdapter;->getCount()I
-HPLandroid/widget/HeaderViewListAdapter;->getFootersCount()I
-HPLandroid/widget/HeaderViewListAdapter;->getHeadersCount()I
-HPLandroid/widget/HeaderViewListAdapter;->getItemId(I)J
-HPLandroid/widget/HeaderViewListAdapter;->getItemViewType(I)I
-HPLandroid/widget/HeaderViewListAdapter;->getView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;
-HPLandroid/widget/HeaderViewListAdapter;->getViewTypeCount()I
-HPLandroid/widget/HeaderViewListAdapter;->hasStableIds()Z
-HPLandroid/widget/HeaderViewListAdapter;->isEnabled(I)Z
-HPLandroid/widget/HeaderViewListAdapter;->registerDataSetObserver(Landroid/database/DataSetObserver;)V
-HSPLandroid/widget/HorizontalScrollView$SavedState;-><init>(Landroid/os/Parcelable;)V
-HSPLandroid/widget/HorizontalScrollView$SavedState;->toString()Ljava/lang/String;
-HSPLandroid/widget/HorizontalScrollView$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/widget/HorizontalScrollView;-><init>(Landroid/content/Context;)V
-HPLandroid/widget/HorizontalScrollView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/FrameLayout;->shouldDelayChildPressedState()Z
 HSPLandroid/widget/HorizontalScrollView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
 HSPLandroid/widget/HorizontalScrollView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/HorizontalScrollView;->addView(Landroid/view/View;)V
-HPLandroid/widget/HorizontalScrollView;->addView(Landroid/view/View;I)V
 HSPLandroid/widget/HorizontalScrollView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
-HPLandroid/widget/HorizontalScrollView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
-HPLandroid/widget/HorizontalScrollView;->computeHorizontalScrollOffset()I
-HPLandroid/widget/HorizontalScrollView;->computeHorizontalScrollRange()I
-HSPLandroid/widget/HorizontalScrollView;->computeScroll()V
-HSPLandroid/widget/HorizontalScrollView;->draw(Landroid/graphics/Canvas;)V
-HPLandroid/widget/HorizontalScrollView;->findFocusableViewInBounds(ZII)Landroid/view/View;
-HPLandroid/widget/HorizontalScrollView;->findFocusableViewInMyBounds(ZILandroid/view/View;)Landroid/view/View;
-HPLandroid/widget/HorizontalScrollView;->fling(I)V
-HPLandroid/widget/HorizontalScrollView;->getScrollRange()I
-HPLandroid/widget/HorizontalScrollView;->inChild(II)Z
-HPLandroid/widget/HorizontalScrollView;->initOrResetVelocityTracker()V
 HSPLandroid/widget/HorizontalScrollView;->initScrollView()V
-HPLandroid/widget/HorizontalScrollView;->initVelocityTrackerIfNotExists()V
-HSPLandroid/widget/HorizontalScrollView;->measureChildWithMargins(Landroid/view/View;IIII)V
-HPLandroid/widget/HorizontalScrollView;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
-HSPLandroid/widget/HorizontalScrollView;->onLayout(ZIIII)V
-HSPLandroid/widget/HorizontalScrollView;->onMeasure(II)V
-HPLandroid/widget/HorizontalScrollView;->onOverScrolled(IIZZ)V
-HPLandroid/widget/HorizontalScrollView;->onRequestFocusInDescendants(ILandroid/graphics/Rect;)Z
-HSPLandroid/widget/HorizontalScrollView;->onRestoreInstanceState(Landroid/os/Parcelable;)V
-HSPLandroid/widget/HorizontalScrollView;->onSaveInstanceState()Landroid/os/Parcelable;
-HSPLandroid/widget/HorizontalScrollView;->onSizeChanged(IIII)V
-HPLandroid/widget/HorizontalScrollView;->onTouchEvent(Landroid/view/MotionEvent;)Z
-HPLandroid/widget/HorizontalScrollView;->recycleVelocityTracker()V
 HSPLandroid/widget/HorizontalScrollView;->requestLayout()V
-HSPLandroid/widget/HorizontalScrollView;->scrollTo(II)V
 HSPLandroid/widget/HorizontalScrollView;->setFillViewport(Z)V
-HPLandroid/widget/HorizontalScrollView;->shouldDelayChildPressedState()Z
-HPLandroid/widget/HorizontalScrollView;->shouldDisplayEdgeEffects()Z
-HPLandroid/widget/HorizontalScrollView;->smoothScrollBy(II)V
-HPLandroid/widget/HorizontalScrollView;->smoothScrollTo(II)V
-HPLandroid/widget/ImageButton;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/ImageButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/ImageButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-PLandroid/widget/ImageButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/ImageButton;->onSetAlpha(I)Z
-HPLandroid/widget/ImageView$ImageDrawableCallback;-><init>(Landroid/widget/ImageView;Landroid/graphics/drawable/Drawable;Landroid/net/Uri;I)V
-HPLandroid/widget/ImageView$ImageDrawableCallback;->run()V
-HSPLandroid/widget/ImageView$ScaleType;->values()[Landroid/widget/ImageView$ScaleType;
+HSPLandroid/widget/ImageButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 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
-HPLandroid/widget/ImageView;->access$002(Landroid/widget/ImageView;Landroid/net/Uri;)Landroid/net/Uri;
-HPLandroid/widget/ImageView;->access$102(Landroid/widget/ImageView;I)I
+HSPLandroid/widget/ImageView;->applyAlpha()V
+HSPLandroid/widget/ImageView;->applyColorFilter()V
 HSPLandroid/widget/ImageView;->applyImageTint()V
-HPLandroid/widget/ImageView;->clearColorFilter()V
+HSPLandroid/widget/ImageView;->applyXfermode()V
 HSPLandroid/widget/ImageView;->configureBounds()V
 HSPLandroid/widget/ImageView;->drawableHotspotChanged(FF)V
 HSPLandroid/widget/ImageView;->drawableStateChanged()V
-HPLandroid/widget/ImageView;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/widget/ImageView;->getBaseline()I
 HSPLandroid/widget/ImageView;->getDrawable()Landroid/graphics/drawable/Drawable;
-HPLandroid/widget/ImageView;->getImageAlpha()I
-HPLandroid/widget/ImageView;->getImageMatrix()Landroid/graphics/Matrix;
-HSPLandroid/widget/ImageView;->getImageTintList()Landroid/content/res/ColorStateList;
-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
@@ -28256,27 +14055,19 @@
 HSPLandroid/widget/ImageView;->onRtlPropertiesChanged(I)V
 HSPLandroid/widget/ImageView;->onVisibilityAggregated(Z)V
 HSPLandroid/widget/ImageView;->resizeFromDrawable()V
-HSPLandroid/widget/ImageView;->resolveAdjustedSize(III)I
 HSPLandroid/widget/ImageView;->resolveUri()V
+HSPLandroid/widget/ImageView;->scaleTypeToScaleToFit(Landroid/widget/ImageView$ScaleType;)Landroid/graphics/Matrix$ScaleToFit;
 HSPLandroid/widget/ImageView;->setAdjustViewBounds(Z)V
 HSPLandroid/widget/ImageView;->setAlpha(I)V
-HPLandroid/widget/ImageView;->setColorFilter(I)V
-HPLandroid/widget/ImageView;->setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/widget/ImageView;->setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V
 HSPLandroid/widget/ImageView;->setColorFilter(Landroid/graphics/ColorFilter;)V
-HPLandroid/widget/ImageView;->setCropToPadding(Z)V
 HSPLandroid/widget/ImageView;->setFrame(IIII)Z
 HSPLandroid/widget/ImageView;->setImageAlpha(I)V
 HSPLandroid/widget/ImageView;->setImageBitmap(Landroid/graphics/Bitmap;)V
 HSPLandroid/widget/ImageView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/widget/ImageView;->setImageIcon(Landroid/graphics/drawable/Icon;)V
-HPLandroid/widget/ImageView;->setImageIconAsync(Landroid/graphics/drawable/Icon;)Ljava/lang/Runnable;
-HPLandroid/widget/ImageView;->setImageLevel(I)V
 HSPLandroid/widget/ImageView;->setImageMatrix(Landroid/graphics/Matrix;)V
 HSPLandroid/widget/ImageView;->setImageResource(I)V
-HPLandroid/widget/ImageView;->setImageResourceAsync(I)Ljava/lang/Runnable;
-HPLandroid/widget/ImageView;->setImageTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/widget/ImageView;->setImageTintList(Landroid/content/res/ColorStateList;)V
-HPLandroid/widget/ImageView;->setImageTintMode(Landroid/graphics/PorterDuff$Mode;)V
 HSPLandroid/widget/ImageView;->setMaxHeight(I)V
 HSPLandroid/widget/ImageView;->setMaxWidth(I)V
 HSPLandroid/widget/ImageView;->setScaleType(Landroid/widget/ImageView$ScaleType;)V
@@ -28285,15 +14076,14 @@
 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
-HPLandroid/widget/LinearLayout$LayoutParams;-><init>(IIF)V
 HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
-HPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$MarginLayoutParams;)V
+HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$MarginLayoutParams;)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
-HPLandroid/widget/LinearLayout;->allViewsAreGoneBefore(I)Z
+HSPLandroid/widget/LinearLayout;->allViewsAreGoneBefore(I)Z
 HSPLandroid/widget/LinearLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
 HSPLandroid/widget/LinearLayout;->forceUniformHeight(II)V
 HSPLandroid/widget/LinearLayout;->forceUniformWidth(II)V
@@ -28303,7 +14093,6 @@
 HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/LinearLayout$LayoutParams;
 HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/LinearLayout$LayoutParams;
-HPLandroid/widget/LinearLayout;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/widget/LinearLayout;->getBaseline()I
 HSPLandroid/widget/LinearLayout;->getChildrenSkipCount(Landroid/view/View;I)I
 HSPLandroid/widget/LinearLayout;->getLocationOffset(Landroid/view/View;)I
@@ -28325,186 +14114,75 @@
 HSPLandroid/widget/LinearLayout;->setDividerDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/LinearLayout;->setGravity(I)V
 HSPLandroid/widget/LinearLayout;->setOrientation(I)V
-HPLandroid/widget/LinearLayout;->shouldDelayChildPressedState()Z
-HPLandroid/widget/ListPopupWindow$ListSelectorHider;-><init>(Landroid/widget/ListPopupWindow;)V
-HPLandroid/widget/ListPopupWindow$ListSelectorHider;-><init>(Landroid/widget/ListPopupWindow;Landroid/widget/ListPopupWindow$1;)V
-HPLandroid/widget/ListPopupWindow$PopupScrollListener;-><init>(Landroid/widget/ListPopupWindow;)V
-HPLandroid/widget/ListPopupWindow$PopupScrollListener;-><init>(Landroid/widget/ListPopupWindow;Landroid/widget/ListPopupWindow$1;)V
-HPLandroid/widget/ListPopupWindow$PopupTouchInterceptor;-><init>(Landroid/widget/ListPopupWindow;)V
-HPLandroid/widget/ListPopupWindow$PopupTouchInterceptor;-><init>(Landroid/widget/ListPopupWindow;Landroid/widget/ListPopupWindow$1;)V
-HPLandroid/widget/ListPopupWindow$ResizePopupRunnable;-><init>(Landroid/widget/ListPopupWindow;)V
-HPLandroid/widget/ListPopupWindow$ResizePopupRunnable;-><init>(Landroid/widget/ListPopupWindow;Landroid/widget/ListPopupWindow$1;)V
-HPLandroid/widget/ListPopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/ListPopupWindow;->dismiss()V
-HPLandroid/widget/ListPopupWindow;->getBackground()Landroid/graphics/drawable/Drawable;
-HPLandroid/widget/ListPopupWindow;->isDropDownAlwaysVisible()Z
-HPLandroid/widget/ListPopupWindow;->isShowing()Z
-HPLandroid/widget/ListPopupWindow;->removePromptView()V
-HPLandroid/widget/ListPopupWindow;->setAnimationStyle(I)V
-HPLandroid/widget/ListPopupWindow;->setHeight(I)V
-HPLandroid/widget/ListPopupWindow;->setHorizontalOffset(I)V
-HPLandroid/widget/ListPopupWindow;->setListSelector(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/widget/ListPopupWindow;->setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V
-HPLandroid/widget/ListPopupWindow;->setPromptPosition(I)V
-HPLandroid/widget/ListPopupWindow;->setPromptView(Landroid/view/View;)V
-HPLandroid/widget/ListPopupWindow;->setSoftInputMode(I)V
-HPLandroid/widget/ListPopupWindow;->setWidth(I)V
-HPLandroid/widget/ListView$FixedViewInfo;-><init>(Landroid/widget/ListView;)V
-HPLandroid/widget/ListView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/widget/ListView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/ListView;->addHeaderView(Landroid/view/View;)V
-HPLandroid/widget/ListView;->addHeaderView(Landroid/view/View;Ljava/lang/Object;Z)V
-HPLandroid/widget/ListView;->adjustViewsUpOrDown()V
-HPLandroid/widget/ListView;->clearRecycledState(Ljava/util/ArrayList;)V
-HPLandroid/widget/ListView;->correctTooHigh(I)V
-HPLandroid/widget/ListView;->dispatchDraw(Landroid/graphics/Canvas;)V
-HPLandroid/widget/ListView;->drawChild(Landroid/graphics/Canvas;Landroid/view/View;J)Z
-HPLandroid/widget/ListView;->fillDown(II)Landroid/view/View;
-HPLandroid/widget/ListView;->fillFromTop(I)Landroid/view/View;
-HPLandroid/widget/ListView;->fillSpecific(II)Landroid/view/View;
-HPLandroid/widget/ListView;->fillUp(II)Landroid/view/View;
-HPLandroid/widget/ListView;->findMotionRow(I)I
-HPLandroid/widget/ListView;->findViewInHeadersOrFooters(Ljava/util/ArrayList;I)Landroid/view/View;
-HPLandroid/widget/ListView;->findViewTraversal(I)Landroid/view/View;
-HPLandroid/widget/ListView;->getAdapter()Landroid/widget/Adapter;
-HPLandroid/widget/ListView;->getAdapter()Landroid/widget/ListAdapter;
-HPLandroid/widget/ListView;->getHeaderViewsCount()I
-HPLandroid/widget/ListView;->isOpaque()Z
-HPLandroid/widget/ListView;->layoutChildren()V
-HPLandroid/widget/ListView;->lookForSelectablePosition(IZ)I
-HPLandroid/widget/ListView;->makeAndAddView(IIZIZ)Landroid/view/View;
-HPLandroid/widget/ListView;->measureHeightOfChildren(IIIII)I
-HPLandroid/widget/ListView;->measureScrapChild(Landroid/view/View;III)V
-HPLandroid/widget/ListView;->onDetachedFromWindow()V
-HPLandroid/widget/ListView;->onFinishInflate()V
-HPLandroid/widget/ListView;->onMeasure(II)V
-HPLandroid/widget/ListView;->onSizeChanged(IIII)V
-HPLandroid/widget/ListView;->recycleOnMeasure()Z
-HPLandroid/widget/ListView;->removeUnusedFixedViews(Ljava/util/List;)V
-HPLandroid/widget/ListView;->resetList()V
-HPLandroid/widget/ListView;->setAdapter(Landroid/widget/ListAdapter;)V
-HPLandroid/widget/ListView;->setCacheColorHint(I)V
-HPLandroid/widget/ListView;->setDivider(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/widget/ListView;->setSelection(I)V
-HPLandroid/widget/ListView;->setupChild(Landroid/view/View;IIZIZZ)V
-HPLandroid/widget/ListView;->trackMotionScroll(II)Z
-HPLandroid/widget/ListView;->wrapHeaderListAdapterInternal(Ljava/util/ArrayList;Ljava/util/ArrayList;Landroid/widget/ListAdapter;)Landroid/widget/HeaderViewListAdapter;
-HSPLandroid/widget/Magnifier$Builder;-><init>(Landroid/view/View;)V
-HSPLandroid/widget/Magnifier$Builder;->access$002(Landroid/widget/Magnifier$Builder;I)I
-HSPLandroid/widget/Magnifier$Builder;->access$1002(Landroid/widget/Magnifier$Builder;I)I
-HSPLandroid/widget/Magnifier$Builder;->access$102(Landroid/widget/Magnifier$Builder;I)I
-HSPLandroid/widget/Magnifier$Builder;->access$1102(Landroid/widget/Magnifier$Builder;I)I
-HSPLandroid/widget/Magnifier$Builder;->access$1202(Landroid/widget/Magnifier$Builder;I)I
-HSPLandroid/widget/Magnifier$Builder;->access$202(Landroid/widget/Magnifier$Builder;F)F
-HSPLandroid/widget/Magnifier$Builder;->access$302(Landroid/widget/Magnifier$Builder;F)F
-HSPLandroid/widget/Magnifier$Builder;->access$402(Landroid/widget/Magnifier$Builder;F)F
-HSPLandroid/widget/Magnifier$Builder;->access$502(Landroid/widget/Magnifier$Builder;I)I
-HSPLandroid/widget/Magnifier$Builder;->access$602(Landroid/widget/Magnifier$Builder;I)I
-HSPLandroid/widget/Magnifier$Builder;->access$702(Landroid/widget/Magnifier$Builder;Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/widget/Magnifier$Builder;->access$802(Landroid/widget/Magnifier$Builder;Z)Z
-HSPLandroid/widget/Magnifier$Builder;->access$902(Landroid/widget/Magnifier$Builder;I)I
-HSPLandroid/widget/Magnifier$Builder;->applyDefaults()V
-HSPLandroid/widget/Magnifier;-><clinit>()V
-HSPLandroid/widget/Magnifier;-><init>(Landroid/widget/Magnifier$Builder;)V
-HSPLandroid/widget/Magnifier;->createBuilderWithOldMagnifierDefaults(Landroid/view/View;)Landroid/widget/Magnifier$Builder;
-HSPLandroid/widget/Magnifier;->getDeviceDefaultDialogCornerRadius(Landroid/content/Context;)F
-HSPLandroid/widget/Magnifier;->update()V
+HSPLandroid/widget/LinearLayout;->shouldDelayChildPressedState()Z
+HSPLandroid/widget/ListView$ArrowScrollFocusResult;-><init>()V
+HSPLandroid/widget/ListView$ArrowScrollFocusResult;-><init>(Landroid/widget/ListView$1;)V
+HSPLandroid/widget/ListView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/ListView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/ListView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/ListView;->adjustViewsUpOrDown()V
+HSPLandroid/widget/ListView;->clearRecycledState(Ljava/util/ArrayList;)V
+HSPLandroid/widget/ListView;->fillDown(II)Landroid/view/View;
+HSPLandroid/widget/ListView;->findViewTraversal(I)Landroid/view/View;
+HSPLandroid/widget/ListView;->getAdapter()Landroid/widget/Adapter;
+HSPLandroid/widget/ListView;->getAdapter()Landroid/widget/ListAdapter;
+HSPLandroid/widget/ListView;->isOpaque()Z
+HSPLandroid/widget/ListView;->layoutChildren()V
+HSPLandroid/widget/ListView;->lookForSelectablePosition(IZ)I
+HSPLandroid/widget/ListView;->makeAndAddView(IIZIZ)Landroid/view/View;
+HSPLandroid/widget/ListView;->onFinishInflate()V
+HSPLandroid/widget/ListView;->onMeasure(II)V
+HSPLandroid/widget/ListView;->onSizeChanged(IIII)V
+HSPLandroid/widget/ListView;->removeUnusedFixedViews(Ljava/util/List;)V
+HSPLandroid/widget/ListView;->resetList()V
+HSPLandroid/widget/ListView;->setAdapter(Landroid/widget/ListAdapter;)V
+HSPLandroid/widget/ListView;->setCacheColorHint(I)V
+HSPLandroid/widget/ListView;->setupChild(Landroid/view/View;IIZIZZ)V
 HSPLandroid/widget/OverScroller$SplineOverScroller;-><init>(Landroid/content/Context;)V
-PLandroid/widget/OverScroller$SplineOverScroller;->access$000(Landroid/widget/OverScroller$SplineOverScroller;)Z
-PLandroid/widget/OverScroller$SplineOverScroller;->access$002(Landroid/widget/OverScroller$SplineOverScroller;Z)Z
-PLandroid/widget/OverScroller$SplineOverScroller;->access$200(Landroid/widget/OverScroller$SplineOverScroller;)F
-PLandroid/widget/OverScroller$SplineOverScroller;->access$500(Landroid/widget/OverScroller$SplineOverScroller;)I
-HPLandroid/widget/OverScroller$SplineOverScroller;->adjustDuration(III)V
-PLandroid/widget/OverScroller$SplineOverScroller;->continueWhenFinished()Z
+HSPLandroid/widget/OverScroller$SplineOverScroller;->access$000(Landroid/widget/OverScroller$SplineOverScroller;)Z
+HSPLandroid/widget/OverScroller$SplineOverScroller;->access$100(Landroid/widget/OverScroller$SplineOverScroller;)I
+HSPLandroid/widget/OverScroller$SplineOverScroller;->access$200(Landroid/widget/OverScroller$SplineOverScroller;)F
+HSPLandroid/widget/OverScroller$SplineOverScroller;->access$400(Landroid/widget/OverScroller$SplineOverScroller;)I
+HSPLandroid/widget/OverScroller$SplineOverScroller;->continueWhenFinished()Z
 HSPLandroid/widget/OverScroller$SplineOverScroller;->finish()V
-HPLandroid/widget/OverScroller$SplineOverScroller;->fitOnBounceCurve(III)V
-PLandroid/widget/OverScroller$SplineOverScroller;->fling(IIIII)V
-HPLandroid/widget/OverScroller$SplineOverScroller;->getDeceleration(I)F
-PLandroid/widget/OverScroller$SplineOverScroller;->getSplineDeceleration(I)D
-PLandroid/widget/OverScroller$SplineOverScroller;->getSplineFlingDistance(I)D
-PLandroid/widget/OverScroller$SplineOverScroller;->getSplineFlingDuration(I)I
-HPLandroid/widget/OverScroller$SplineOverScroller;->onEdgeReached()V
-HPLandroid/widget/OverScroller$SplineOverScroller;->springback(III)Z
-HPLandroid/widget/OverScroller$SplineOverScroller;->startAfterEdge(IIII)V
-HPLandroid/widget/OverScroller$SplineOverScroller;->startBounceAfterEdge(III)V
-HSPLandroid/widget/OverScroller$SplineOverScroller;->startScroll(III)V
-HPLandroid/widget/OverScroller$SplineOverScroller;->startSpringback(III)V
-PLandroid/widget/OverScroller$SplineOverScroller;->update()Z
-HPLandroid/widget/OverScroller$SplineOverScroller;->updateScroll(F)V
+HSPLandroid/widget/OverScroller$SplineOverScroller;->fling(IIIII)V
+HSPLandroid/widget/OverScroller$SplineOverScroller;->getSplineDeceleration(I)D
+HSPLandroid/widget/OverScroller$SplineOverScroller;->getSplineFlingDistance(I)D
+HSPLandroid/widget/OverScroller$SplineOverScroller;->getSplineFlingDuration(I)I
+HSPLandroid/widget/OverScroller$SplineOverScroller;->update()Z
 HSPLandroid/widget/OverScroller;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/OverScroller;-><init>(Landroid/content/Context;Landroid/view/animation/Interpolator;)V
 HSPLandroid/widget/OverScroller;-><init>(Landroid/content/Context;Landroid/view/animation/Interpolator;Z)V
 HSPLandroid/widget/OverScroller;->abortAnimation()V
 HSPLandroid/widget/OverScroller;->computeScrollOffset()Z
-PLandroid/widget/OverScroller;->fling(IIIIIIII)V
-PLandroid/widget/OverScroller;->fling(IIIIIIIIII)V
-PLandroid/widget/OverScroller;->forceFinished(Z)V
-HPLandroid/widget/OverScroller;->getCurrVelocity()F
-HPLandroid/widget/OverScroller;->getCurrX()I
-HPLandroid/widget/OverScroller;->getCurrY()I
-PLandroid/widget/OverScroller;->getDuration()I
-HPLandroid/widget/OverScroller;->getFinalX()I
-HPLandroid/widget/OverScroller;->getFinalY()I
+HSPLandroid/widget/OverScroller;->fling(IIIIIIII)V
+HSPLandroid/widget/OverScroller;->fling(IIIIIIIIII)V
+HSPLandroid/widget/OverScroller;->getCurrVelocity()F
+HSPLandroid/widget/OverScroller;->getCurrX()I
+HSPLandroid/widget/OverScroller;->getCurrY()I
+HSPLandroid/widget/OverScroller;->getFinalX()I
+HSPLandroid/widget/OverScroller;->getFinalY()I
 HSPLandroid/widget/OverScroller;->isFinished()Z
-HPLandroid/widget/OverScroller;->springBack(IIIIII)Z
-HSPLandroid/widget/OverScroller;->startScroll(IIII)V
-HSPLandroid/widget/OverScroller;->startScroll(IIIII)V
-HPLandroid/widget/PopupWindow$1;-><init>(Landroid/widget/PopupWindow;)V
-HPLandroid/widget/PopupWindow$2;-><init>(Landroid/widget/PopupWindow;)V
-HPLandroid/widget/PopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/PopupWindow;-><init>(Landroid/view/View;II)V
-HPLandroid/widget/PopupWindow;-><init>(Landroid/view/View;IIZ)V
-HPLandroid/widget/PopupWindow;->dismiss()V
-HPLandroid/widget/PopupWindow;->getBackground()Landroid/graphics/drawable/Drawable;
-HPLandroid/widget/PopupWindow;->getTransition(I)Landroid/transition/Transition;
-HPLandroid/widget/PopupWindow;->isShowing()Z
-HPLandroid/widget/PopupWindow;->isTouchable()Z
-HPLandroid/widget/PopupWindow;->setAnimationStyle(I)V
-HPLandroid/widget/PopupWindow;->setAttachedInDecor(Z)V
-HPLandroid/widget/PopupWindow;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/widget/PopupWindow;->setContentView(Landroid/view/View;)V
-HPLandroid/widget/PopupWindow;->setEnterTransition(Landroid/transition/Transition;)V
-HPLandroid/widget/PopupWindow;->setExitTransition(Landroid/transition/Transition;)V
-HPLandroid/widget/PopupWindow;->setFocusable(Z)V
-HPLandroid/widget/PopupWindow;->setHeight(I)V
-HPLandroid/widget/PopupWindow;->setInputMethodMode(I)V
-HPLandroid/widget/PopupWindow;->setSoftInputMode(I)V
-HPLandroid/widget/PopupWindow;->setTouchable(Z)V
-HPLandroid/widget/PopupWindow;->setWidth(I)V
-HPLandroid/widget/ProgressBar$1;->get(Landroid/widget/ProgressBar;)Ljava/lang/Float;
-HPLandroid/widget/ProgressBar$1;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/widget/ProgressBar$1;->setValue(Landroid/widget/ProgressBar;F)V
-HPLandroid/widget/ProgressBar$1;->setValue(Ljava/lang/Object;F)V
-HPLandroid/widget/ProgressBar$ProgressTintInfo;-><init>()V
-HPLandroid/widget/ProgressBar$ProgressTintInfo;-><init>(Landroid/widget/ProgressBar$1;)V
-HPLandroid/widget/ProgressBar$RefreshData;->recycle()V
-HPLandroid/widget/ProgressBar$RefreshProgressRunnable;->run()V
+HSPLandroid/widget/PopupWindow;->isShowing()Z
+HSPLandroid/widget/ProgressBar$1;-><init>(Landroid/widget/ProgressBar;Ljava/lang/String;)V
+HSPLandroid/widget/ProgressBar$SavedState;-><init>(Landroid/os/Parcelable;)V
 HSPLandroid/widget/ProgressBar$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
 HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/ProgressBar;->access$100(Landroid/widget/ProgressBar;)Ljava/util/ArrayList;
-HPLandroid/widget/ProgressBar;->access$200(Landroid/widget/ProgressBar;IIZZZ)V
-HPLandroid/widget/ProgressBar;->access$302(Landroid/widget/ProgressBar;Z)Z
 HSPLandroid/widget/ProgressBar;->applyIndeterminateTint()V
-HSPLandroid/widget/ProgressBar;->applyPrimaryProgressTint()V
-HSPLandroid/widget/ProgressBar;->applyProgressBackgroundTint()V
-HSPLandroid/widget/ProgressBar;->applySecondaryProgressTint()V
+HSPLandroid/widget/ProgressBar;->applyProgressTints()V
 HSPLandroid/widget/ProgressBar;->doRefreshProgress(IIZZZ)V
 HSPLandroid/widget/ProgressBar;->drawTrack(Landroid/graphics/Canvas;)V
-HPLandroid/widget/ProgressBar;->drawableHotspotChanged(FF)V
 HSPLandroid/widget/ProgressBar;->drawableStateChanged()V
-HPLandroid/widget/ProgressBar;->getAccessibilityClassName()Ljava/lang/CharSequence;
-HSPLandroid/widget/ProgressBar;->getCurrentDrawable()Landroid/graphics/drawable/Drawable;
-HSPLandroid/widget/ProgressBar;->getIndeterminateDrawable()Landroid/graphics/drawable/Drawable;
+HSPLandroid/widget/ProgressBar;->formatStateDescription(I)Ljava/lang/CharSequence;
 HSPLandroid/widget/ProgressBar;->getMax()I
 HSPLandroid/widget/ProgressBar;->getMin()I
+HSPLandroid/widget/ProgressBar;->getPercent(I)F
 HSPLandroid/widget/ProgressBar;->getProgress()I
 HSPLandroid/widget/ProgressBar;->getProgressDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/widget/ProgressBar;->initProgressBar()V
 HSPLandroid/widget/ProgressBar;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/widget/ProgressBar;->isIndeterminate()Z
 HSPLandroid/widget/ProgressBar;->jumpDrawablesToCurrentState()V
 HSPLandroid/widget/ProgressBar;->needsTileify(Landroid/graphics/drawable/Drawable;)Z
 HSPLandroid/widget/ProgressBar;->onAttachedToWindow()V
@@ -28513,7 +14191,6 @@
 HSPLandroid/widget/ProgressBar;->onMeasure(II)V
 HSPLandroid/widget/ProgressBar;->onProgressRefresh(FZI)V
 HSPLandroid/widget/ProgressBar;->onResolveDrawables(I)V
-HSPLandroid/widget/ProgressBar;->onRestoreInstanceState(Landroid/os/Parcelable;)V
 HSPLandroid/widget/ProgressBar;->onSaveInstanceState()Landroid/os/Parcelable;
 HSPLandroid/widget/ProgressBar;->onSizeChanged(IIII)V
 HSPLandroid/widget/ProgressBar;->onVisibilityAggregated(Z)V
@@ -28522,19 +14199,13 @@
 HSPLandroid/widget/ProgressBar;->refreshProgress(IIZZ)V
 HSPLandroid/widget/ProgressBar;->setIndeterminate(Z)V
 HSPLandroid/widget/ProgressBar;->setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/widget/ProgressBar;->setIndeterminateTintBlendMode(Landroid/graphics/BlendMode;)V
-HPLandroid/widget/ProgressBar;->setIndeterminateTintList(Landroid/content/res/ColorStateList;)V
-HPLandroid/widget/ProgressBar;->setIndeterminateTintMode(Landroid/graphics/PorterDuff$Mode;)V
 HSPLandroid/widget/ProgressBar;->setInterpolator(Landroid/content/Context;I)V
 HSPLandroid/widget/ProgressBar;->setInterpolator(Landroid/view/animation/Interpolator;)V
 HSPLandroid/widget/ProgressBar;->setMax(I)V
 HSPLandroid/widget/ProgressBar;->setMin(I)V
 HSPLandroid/widget/ProgressBar;->setProgress(I)V
-HPLandroid/widget/ProgressBar;->setProgress(IZ)V
-HPLandroid/widget/ProgressBar;->setProgressBackgroundTintList(Landroid/content/res/ColorStateList;)V
 HSPLandroid/widget/ProgressBar;->setProgressDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/ProgressBar;->setProgressInternal(IZZ)Z
-HPLandroid/widget/ProgressBar;->setProgressTintList(Landroid/content/res/ColorStateList;)V
 HSPLandroid/widget/ProgressBar;->setSecondaryProgress(I)V
 HSPLandroid/widget/ProgressBar;->setVisualProgress(IF)V
 HSPLandroid/widget/ProgressBar;->startAnimation()V
@@ -28543,46 +14214,49 @@
 HSPLandroid/widget/ProgressBar;->updateDrawableBounds(II)V
 HSPLandroid/widget/ProgressBar;->updateDrawableState()V
 HSPLandroid/widget/ProgressBar;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
-HPLandroid/widget/RelativeLayout$DependencyGraph$Node;->acquire(Landroid/view/View;)Landroid/widget/RelativeLayout$DependencyGraph$Node;
+HSPLandroid/widget/RelativeLayout$DependencyGraph$Node;-><init>()V
+HSPLandroid/widget/RelativeLayout$DependencyGraph$Node;->acquire(Landroid/view/View;)Landroid/widget/RelativeLayout$DependencyGraph$Node;
 HSPLandroid/widget/RelativeLayout$DependencyGraph$Node;->release()V
+HSPLandroid/widget/RelativeLayout$DependencyGraph;-><init>()V
+HSPLandroid/widget/RelativeLayout$DependencyGraph;-><init>(Landroid/widget/RelativeLayout$1;)V
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->access$500(Landroid/widget/RelativeLayout$DependencyGraph;)Landroid/util/SparseArray;
 HSPLandroid/widget/RelativeLayout$DependencyGraph;->add(Landroid/view/View;)V
 HSPLandroid/widget/RelativeLayout$DependencyGraph;->clear()V
 HSPLandroid/widget/RelativeLayout$DependencyGraph;->findRoots([I)Ljava/util/ArrayDeque;
 HSPLandroid/widget/RelativeLayout$DependencyGraph;->getSortedViews([Landroid/view/View;[I)V
-HPLandroid/widget/RelativeLayout$LayoutParams;-><init>(II)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/widget/RelativeLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->access$100(Landroid/widget/RelativeLayout$LayoutParams;)I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->access$102(Landroid/widget/RelativeLayout$LayoutParams;I)I
 HSPLandroid/widget/RelativeLayout$LayoutParams;->access$200(Landroid/widget/RelativeLayout$LayoutParams;)I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->access$202(Landroid/widget/RelativeLayout$LayoutParams;I)I
 HSPLandroid/widget/RelativeLayout$LayoutParams;->access$300(Landroid/widget/RelativeLayout$LayoutParams;)I
 HSPLandroid/widget/RelativeLayout$LayoutParams;->access$302(Landroid/widget/RelativeLayout$LayoutParams;I)I
 HSPLandroid/widget/RelativeLayout$LayoutParams;->access$400(Landroid/widget/RelativeLayout$LayoutParams;)I
 HSPLandroid/widget/RelativeLayout$LayoutParams;->access$402(Landroid/widget/RelativeLayout$LayoutParams;I)I
-HPLandroid/widget/RelativeLayout$LayoutParams;->addRule(I)V
-HPLandroid/widget/RelativeLayout$LayoutParams;->addRule(II)V
+HSPLandroid/widget/RelativeLayout$LayoutParams;->access$700(Landroid/widget/RelativeLayout$LayoutParams;)[I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->addRule(II)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->getRules()[I
 HSPLandroid/widget/RelativeLayout$LayoutParams;->getRules(I)[I
 HSPLandroid/widget/RelativeLayout$LayoutParams;->hasRelativeRules()Z
-HPLandroid/widget/RelativeLayout$LayoutParams;->removeRule(I)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->resolveLayoutDirection(I)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->resolveRules(I)V
-HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;)V
+HSPLandroid/widget/RelativeLayout$LayoutParams;->shouldResolveLayoutDirection(I)Z
 HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
 HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/RelativeLayout;->applyHorizontalSizeRules(Landroid/widget/RelativeLayout$LayoutParams;I[I)V
 HSPLandroid/widget/RelativeLayout;->applyVerticalSizeRules(Landroid/widget/RelativeLayout$LayoutParams;II)V
-HPLandroid/widget/RelativeLayout;->centerHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;I)V
+HSPLandroid/widget/RelativeLayout;->centerHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;I)V
 HSPLandroid/widget/RelativeLayout;->centerVertical(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;I)V
 HSPLandroid/widget/RelativeLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
 HSPLandroid/widget/RelativeLayout;->compareLayoutPosition(Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;)I
 HSPLandroid/widget/RelativeLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/RelativeLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/RelativeLayout$LayoutParams;
-HPLandroid/widget/RelativeLayout;->getAccessibilityClassName()Ljava/lang/CharSequence;
-HPLandroid/widget/RelativeLayout;->getBaseline()I
+HSPLandroid/widget/RelativeLayout;->getBaseline()I
 HSPLandroid/widget/RelativeLayout;->getChildMeasureSpec(IIIIIIII)I
 HSPLandroid/widget/RelativeLayout;->getRelatedView([II)Landroid/view/View;
 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
 HSPLandroid/widget/RelativeLayout;->measureChildHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;II)V
@@ -28591,156 +14265,43 @@
 HSPLandroid/widget/RelativeLayout;->positionAtEdge(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;I)V
 HSPLandroid/widget/RelativeLayout;->positionChildHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;IZ)Z
 HSPLandroid/widget/RelativeLayout;->positionChildVertical(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;IZ)Z
+HSPLandroid/widget/RelativeLayout;->queryCompatibilityModes(Landroid/content/Context;)V
 HSPLandroid/widget/RelativeLayout;->requestLayout()V
-HPLandroid/widget/RelativeLayout;->shouldDelayChildPressedState()Z
+HSPLandroid/widget/RelativeLayout;->shouldDelayChildPressedState()Z
 HSPLandroid/widget/RelativeLayout;->sortChildren()V
-HPLandroid/widget/RemoteViews$1;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
-PLandroid/widget/RemoteViews$2;->createFromParcel(Landroid/os/Parcel;)Landroid/widget/RemoteViews;
-PLandroid/widget/RemoteViews$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLandroid/widget/RemoteViews$Action;-><init>()V
-HPLandroid/widget/RemoteViews$Action;-><init>(Landroid/widget/RemoteViews$1;)V
+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
+HSPLandroid/widget/RemoteViews$Action;-><init>(Landroid/widget/RemoteViews$1;)V
 HSPLandroid/widget/RemoteViews$Action;->hasSameAppInfo(Landroid/content/pm/ApplicationInfo;)Z
-HPLandroid/widget/RemoteViews$Action;->initActionAsync(Landroid/widget/RemoteViews$ViewTree;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)Landroid/widget/RemoteViews$Action;
-HPLandroid/widget/RemoteViews$Action;->setBitmapCache(Landroid/widget/RemoteViews$BitmapCache;)V
-HPLandroid/widget/RemoteViews$AsyncApplyTask;-><init>(Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;Landroid/view/ViewGroup;Landroid/content/Context;Landroid/widget/RemoteViews$OnViewAppliedListener;Landroid/widget/RemoteViews$OnClickHandler;Landroid/view/View;)V
-HPLandroid/widget/RemoteViews$AsyncApplyTask;-><init>(Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;Landroid/view/ViewGroup;Landroid/content/Context;Landroid/widget/RemoteViews$OnViewAppliedListener;Landroid/widget/RemoteViews$OnClickHandler;Landroid/view/View;Landroid/widget/RemoteViews$1;)V
-HPLandroid/widget/RemoteViews$AsyncApplyTask;->access$1700(Landroid/widget/RemoteViews$AsyncApplyTask;)Landroid/view/View;
-HPLandroid/widget/RemoteViews$AsyncApplyTask;->doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroid/widget/RemoteViews$AsyncApplyTask;->doInBackground([Ljava/lang/Void;)Landroid/widget/RemoteViews$ViewTree;
-HPLandroid/widget/RemoteViews$AsyncApplyTask;->onCancel()V
-HPLandroid/widget/RemoteViews$AsyncApplyTask;->onPostExecute(Landroid/widget/RemoteViews$ViewTree;)V
-HPLandroid/widget/RemoteViews$AsyncApplyTask;->onPostExecute(Ljava/lang/Object;)V
-PLandroid/widget/RemoteViews$BitmapCache;-><init>(Landroid/os/Parcel;)V
-PLandroid/widget/RemoteViews$BitmapCache;->getBitmapForId(I)Landroid/graphics/Bitmap;
+HSPLandroid/widget/RemoteViews$BitmapCache;-><init>()V
+HSPLandroid/widget/RemoteViews$BitmapCache;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/widget/RemoteViews$BitmapCache;->getBitmapId(Landroid/graphics/Bitmap;)I
 HSPLandroid/widget/RemoteViews$BitmapCache;->writeBitmapsToParcel(Landroid/os/Parcel;I)V
-PLandroid/widget/RemoteViews$BitmapReflectionAction;-><init>(Landroid/widget/RemoteViews;Landroid/os/Parcel;)V
-HPLandroid/widget/RemoteViews$BitmapReflectionAction;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
-HSPLandroid/widget/RemoteViews$BitmapReflectionAction;->getActionTag()I
-HSPLandroid/widget/RemoteViews$BitmapReflectionAction;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/widget/RemoteViews$LayoutParamAction;-><init>(III)V
-HPLandroid/widget/RemoteViews$LayoutParamAction;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
-HPLandroid/widget/RemoteViews$MethodKey;->equals(Ljava/lang/Object;)Z
-HPLandroid/widget/RemoteViews$MethodKey;->hashCode()I
-HPLandroid/widget/RemoteViews$MethodKey;->set(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)V
-HPLandroid/widget/RemoteViews$ReflectionAction;-><init>(Landroid/widget/RemoteViews;ILjava/lang/String;ILjava/lang/Object;)V
-PLandroid/widget/RemoteViews$ReflectionAction;-><init>(Landroid/widget/RemoteViews;Landroid/os/Parcel;)V
-HPLandroid/widget/RemoteViews$ReflectionAction;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)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
-HPLandroid/widget/RemoteViews$ReflectionAction;->getParameterType()Ljava/lang/Class;
-HPLandroid/widget/RemoteViews$ReflectionAction;->initActionAsync(Landroid/widget/RemoteViews$ViewTree;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)Landroid/widget/RemoteViews$Action;
 HSPLandroid/widget/RemoteViews$ReflectionAction;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/widget/RemoteViews$RemoteResponse;-><init>()V
-PLandroid/widget/RemoteViews$RemoteResponse;->access$300(Landroid/widget/RemoteViews$RemoteResponse;Landroid/os/Parcel;)V
-PLandroid/widget/RemoteViews$RemoteResponse;->readFromParcel(Landroid/os/Parcel;)V
-HSPLandroid/widget/RemoteViews$RemoteResponse;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/widget/RemoteViews$RemoteViewsContextWrapper;->getPackageName()Ljava/lang/String;
-HPLandroid/widget/RemoteViews$RemoteViewsContextWrapper;->getResources()Landroid/content/res/Resources;
-HPLandroid/widget/RemoteViews$RemoteViewsContextWrapper;->getTheme()Landroid/content/res/Resources$Theme;
-HPLandroid/widget/RemoteViews$RunnableAction;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
-HPLandroid/widget/RemoteViews$RuntimeAction;-><init>(Landroid/widget/RemoteViews$1;)V
-HPLandroid/widget/RemoteViews$SetDrawableTint;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
-HPLandroid/widget/RemoteViews$SetIntTagAction;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
-PLandroid/widget/RemoteViews$SetOnClickResponse;-><init>(Landroid/widget/RemoteViews;Landroid/os/Parcel;)V
-HPLandroid/widget/RemoteViews$SetOnClickResponse;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
-HSPLandroid/widget/RemoteViews$SetOnClickResponse;->getActionTag()I
-HSPLandroid/widget/RemoteViews$SetOnClickResponse;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/widget/RemoteViews$SetRemoteInputsAction;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
-HPLandroid/widget/RemoteViews$SetRippleDrawableColor;-><init>(Landroid/widget/RemoteViews;ILandroid/content/res/ColorStateList;)V
-HPLandroid/widget/RemoteViews$SetRippleDrawableColor;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
-HPLandroid/widget/RemoteViews$TextViewSizeAction;-><init>(Landroid/widget/RemoteViews;IIF)V
-HPLandroid/widget/RemoteViews$TextViewSizeAction;->getActionTag()I
-HPLandroid/widget/RemoteViews$TextViewSizeAction;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/widget/RemoteViews$ViewGroupActionAdd;->access$1800(Landroid/widget/RemoteViews$ViewGroupActionAdd;)I
-HPLandroid/widget/RemoteViews$ViewGroupActionAdd;->initActionAsync(Landroid/widget/RemoteViews$ViewTree;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)Landroid/widget/RemoteViews$Action;
-HPLandroid/widget/RemoteViews$ViewGroupActionRemove;->access$2100(Landroid/widget/RemoteViews$ViewGroupActionRemove;)I
-HPLandroid/widget/RemoteViews$ViewGroupActionRemove;->initActionAsync(Landroid/widget/RemoteViews$ViewTree;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)Landroid/widget/RemoteViews$Action;
-HPLandroid/widget/RemoteViews$ViewPaddingAction;-><init>(Landroid/widget/RemoteViews;IIIII)V
-HPLandroid/widget/RemoteViews$ViewPaddingAction;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
-HPLandroid/widget/RemoteViews$ViewPaddingAction;->getActionTag()I
-HPLandroid/widget/RemoteViews$ViewPaddingAction;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/widget/RemoteViews$ViewTree;-><init>(Landroid/view/View;)V
-HPLandroid/widget/RemoteViews$ViewTree;-><init>(Landroid/view/View;Landroid/widget/RemoteViews$1;)V
-HPLandroid/widget/RemoteViews$ViewTree;->access$1400(Landroid/widget/RemoteViews$ViewTree;)Landroid/view/View;
-HPLandroid/widget/RemoteViews$ViewTree;->access$2002(Landroid/widget/RemoteViews$ViewTree;Ljava/util/ArrayList;)Ljava/util/ArrayList;
-HPLandroid/widget/RemoteViews$ViewTree;->addChild(Landroid/widget/RemoteViews$ViewTree;I)V
-HPLandroid/widget/RemoteViews$ViewTree;->addViewChild(Landroid/view/View;)V
-HPLandroid/widget/RemoteViews$ViewTree;->createTree()V
-HPLandroid/widget/RemoteViews$ViewTree;->findViewById(I)Landroid/view/View;
-HPLandroid/widget/RemoteViews$ViewTree;->findViewTreeById(I)Landroid/widget/RemoteViews$ViewTree;
-HPLandroid/widget/RemoteViews$ViewTree;->replaceView(Landroid/view/View;)V
-PLandroid/widget/RemoteViews;-><init>(Landroid/os/Parcel;)V
-HPLandroid/widget/RemoteViews;-><init>(Landroid/os/Parcel;Landroid/widget/RemoteViews$BitmapCache;Landroid/content/pm/ApplicationInfo;ILjava/util/Map;)V
-HSPLandroid/widget/RemoteViews;-><init>(Ljava/lang/String;I)V
-HPLandroid/widget/RemoteViews;->access$1500(Landroid/widget/RemoteViews;Landroid/content/Context;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnViewAppliedListener;Landroid/widget/RemoteViews$OnClickHandler;)Landroid/widget/RemoteViews$AsyncApplyTask;
-HPLandroid/widget/RemoteViews;->access$2400(Landroid/widget/RemoteViews;Landroid/content/Context;Landroid/widget/RemoteViews;Landroid/view/ViewGroup;)Landroid/view/View;
-HPLandroid/widget/RemoteViews;->access$2600(Landroid/widget/RemoteViews;)Ljava/util/ArrayList;
-PLandroid/widget/RemoteViews;->access$800(Landroid/widget/RemoteViews;)Landroid/widget/RemoteViews$BitmapCache;
-HPLandroid/widget/RemoteViews;->addAction(Landroid/widget/RemoteViews$Action;)V
-HPLandroid/widget/RemoteViews;->addView(ILandroid/widget/RemoteViews;)V
-HPLandroid/widget/RemoteViews;->apply(Landroid/content/Context;Landroid/view/ViewGroup;)Landroid/view/View;
-HPLandroid/widget/RemoteViews;->apply(Landroid/content/Context;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)Landroid/view/View;
-HPLandroid/widget/RemoteViews;->applyAsync(Landroid/content/Context;Landroid/view/ViewGroup;Ljava/util/concurrent/Executor;Landroid/widget/RemoteViews$OnViewAppliedListener;Landroid/widget/RemoteViews$OnClickHandler;)Landroid/os/CancellationSignal;
-HPLandroid/widget/RemoteViews;->getActionFromParcel(Landroid/os/Parcel;I)Landroid/widget/RemoteViews$Action;
-HSPLandroid/widget/RemoteViews;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
-HPLandroid/widget/RemoteViews;->getContextForResources(Landroid/content/Context;)Landroid/content/Context;
-HPLandroid/widget/RemoteViews;->getLayoutId()I
-HPLandroid/widget/RemoteViews;->getMethod(Landroid/view/View;Ljava/lang/String;Ljava/lang/Class;Z)Ljava/lang/invoke/MethodHandle;
-HPLandroid/widget/RemoteViews;->getPackage()Ljava/lang/String;
-HPLandroid/widget/RemoteViews;->getRemoteViewsToApply(Landroid/content/Context;)Landroid/widget/RemoteViews;
-HPLandroid/widget/RemoteViews;->hasFlags(I)Z
-HPLandroid/widget/RemoteViews;->hasLandscapeAndPortraitLayouts()Z
-HPLandroid/widget/RemoteViews;->inflateView(Landroid/content/Context;Landroid/widget/RemoteViews;Landroid/view/ViewGroup;)Landroid/view/View;
-HPLandroid/widget/RemoteViews;->inflateView(Landroid/content/Context;Landroid/widget/RemoteViews;Landroid/view/ViewGroup;I)Landroid/view/View;
-HPLandroid/widget/RemoteViews;->lambda$static$0(Ljava/lang/Class;)Z
-HPLandroid/widget/RemoteViews;->performApply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
-PLandroid/widget/RemoteViews;->readActionsFromParcel(Landroid/os/Parcel;I)V
-HPLandroid/widget/RemoteViews;->reapply(Landroid/content/Context;Landroid/view/View;)V
-HPLandroid/widget/RemoteViews;->reapply(Landroid/content/Context;Landroid/view/View;Landroid/widget/RemoteViews$OnClickHandler;)V
-HPLandroid/widget/RemoteViews;->reapplyAsync(Landroid/content/Context;Landroid/view/View;Ljava/util/concurrent/Executor;Landroid/widget/RemoteViews$OnViewAppliedListener;Landroid/widget/RemoteViews$OnClickHandler;)Landroid/os/CancellationSignal;
-HPLandroid/widget/RemoteViews;->removeAllViews(I)V
-HSPLandroid/widget/RemoteViews;->setBitmap(ILjava/lang/String;Landroid/graphics/Bitmap;)V
-HPLandroid/widget/RemoteViews;->setBitmapCache(Landroid/widget/RemoteViews$BitmapCache;)V
-HPLandroid/widget/RemoteViews;->setBoolean(ILjava/lang/String;Z)V
-HPLandroid/widget/RemoteViews;->setBundle(ILjava/lang/String;Landroid/os/Bundle;)V
+HSPLandroid/widget/RemoteViews$RemoteResponse;-><init>()V
+HSPLandroid/widget/RemoteViews;-><init>(Landroid/content/pm/ApplicationInfo;I)V
+HSPLandroid/widget/RemoteViews;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/widget/RemoteViews;-><init>(Landroid/os/Parcel;Landroid/widget/RemoteViews$BitmapCache;Landroid/content/pm/ApplicationInfo;ILjava/util/Map;)V
+HSPLandroid/widget/RemoteViews;->access$800(Landroid/widget/RemoteViews;)Landroid/widget/RemoteViews$BitmapCache;
+HSPLandroid/widget/RemoteViews;->addAction(Landroid/widget/RemoteViews$Action;)V
+HSPLandroid/widget/RemoteViews;->getActionFromParcel(Landroid/os/Parcel;I)Landroid/widget/RemoteViews$Action;
+HSPLandroid/widget/RemoteViews;->hasLandscapeAndPortraitLayouts()Z
+HSPLandroid/widget/RemoteViews;->readActionsFromParcel(Landroid/os/Parcel;I)V
 HSPLandroid/widget/RemoteViews;->setCharSequence(ILjava/lang/String;Ljava/lang/CharSequence;)V
-HPLandroid/widget/RemoteViews;->setChronometerCountDown(IZ)V
-HSPLandroid/widget/RemoteViews;->setContentDescription(ILjava/lang/CharSequence;)V
-HPLandroid/widget/RemoteViews;->setDrawableTint(IZILandroid/graphics/PorterDuff$Mode;)V
-HPLandroid/widget/RemoteViews;->setIcon(ILjava/lang/String;Landroid/graphics/drawable/Icon;)V
-HSPLandroid/widget/RemoteViews;->setImageViewBitmap(ILandroid/graphics/Bitmap;)V
-HPLandroid/widget/RemoteViews;->setImageViewIcon(ILandroid/graphics/drawable/Icon;)V
 HSPLandroid/widget/RemoteViews;->setInt(ILjava/lang/String;I)V
-HPLandroid/widget/RemoteViews;->setLong(ILjava/lang/String;J)V
-HPLandroid/widget/RemoteViews;->setNotRoot()V
 HSPLandroid/widget/RemoteViews;->setOnClickPendingIntent(ILandroid/app/PendingIntent;)V
 HSPLandroid/widget/RemoteViews;->setOnClickResponse(ILandroid/widget/RemoteViews$RemoteResponse;)V
-HPLandroid/widget/RemoteViews;->setProgressBackgroundTintList(ILandroid/content/res/ColorStateList;)V
-HPLandroid/widget/RemoteViews;->setProgressBar(IIIZ)V
-HPLandroid/widget/RemoteViews;->setProgressIndeterminateTintList(ILandroid/content/res/ColorStateList;)V
-HPLandroid/widget/RemoteViews;->setProgressTintList(ILandroid/content/res/ColorStateList;)V
-HPLandroid/widget/RemoteViews;->setRemoteInputs(I[Landroid/app/RemoteInput;)V
-HPLandroid/widget/RemoteViews;->setRippleDrawableColor(ILandroid/content/res/ColorStateList;)V
-HPLandroid/widget/RemoteViews;->setTextColor(II)V
-HSPLandroid/widget/RemoteViews;->setTextViewText(ILjava/lang/CharSequence;)V
-HPLandroid/widget/RemoteViews;->setTextViewTextSize(IIF)V
-HPLandroid/widget/RemoteViews;->setViewLayoutMarginBottomDimen(II)V
-HPLandroid/widget/RemoteViews;->setViewLayoutMarginEnd(II)V
-HPLandroid/widget/RemoteViews;->setViewLayoutMarginEndDimen(II)V
-HPLandroid/widget/RemoteViews;->setViewPadding(IIIII)V
 HSPLandroid/widget/RemoteViews;->setViewVisibility(II)V
-HPLandroid/widget/RemoteViews;->startTaskOnExecutor(Landroid/widget/RemoteViews$AsyncApplyTask;Ljava/util/concurrent/Executor;)Landroid/os/CancellationSignal;
 HSPLandroid/widget/RemoteViews;->writeActionsToParcel(Landroid/os/Parcel;)V
 HSPLandroid/widget/RemoteViews;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/widget/RemoteViewsService;-><clinit>()V
-PLandroid/widget/RtlSpacingHelper;-><init>()V
-HPLandroid/widget/RtlSpacingHelper;->getEnd()I
-HPLandroid/widget/RtlSpacingHelper;->getStart()I
-PLandroid/widget/RtlSpacingHelper;->setAbsolute(II)V
-PLandroid/widget/RtlSpacingHelper;->setDirection(Z)V
-PLandroid/widget/RtlSpacingHelper;->setRelative(II)V
+HSPLandroid/widget/ScrollBarDrawable;-><init>()V
 HSPLandroid/widget/ScrollBarDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/ScrollBarDrawable;->drawThumb(Landroid/graphics/Canvas;Landroid/graphics/Rect;IIZ)V
+HSPLandroid/widget/ScrollBarDrawable;->drawTrack(Landroid/graphics/Canvas;Landroid/graphics/Rect;Z)V
 HSPLandroid/widget/ScrollBarDrawable;->getSize(Z)I
 HSPLandroid/widget/ScrollBarDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/ScrollBarDrawable;->isStateful()Z
@@ -28754,172 +14315,87 @@
 HSPLandroid/widget/ScrollBarDrawable;->setParameters(IIIZ)V
 HSPLandroid/widget/ScrollBarDrawable;->setVerticalThumbDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/ScrollBarDrawable;->setVerticalTrackDrawable(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/widget/ScrollView$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
-HPLandroid/widget/ScrollView;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/ScrollView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/ScrollView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
 HSPLandroid/widget/ScrollView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/ScrollView;->addView(Landroid/view/View;)V
-HPLandroid/widget/ScrollView;->addView(Landroid/view/View;I)V
 HSPLandroid/widget/ScrollView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/widget/ScrollView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/widget/ScrollView;->clamp(III)I
 HSPLandroid/widget/ScrollView;->computeScroll()V
 HSPLandroid/widget/ScrollView;->computeVerticalScrollOffset()I
 HSPLandroid/widget/ScrollView;->computeVerticalScrollRange()I
-HSPLandroid/widget/ScrollView;->doScrollY(I)V
 HSPLandroid/widget/ScrollView;->draw(Landroid/graphics/Canvas;)V
-HPLandroid/widget/ScrollView;->endDrag()V
-HSPLandroid/widget/ScrollView;->findFocusableViewInBounds(ZII)Landroid/view/View;
-HPLandroid/widget/ScrollView;->fling(I)V
-HPLandroid/widget/ScrollView;->flingWithNestedDispatch(I)V
-HSPLandroid/widget/ScrollView;->fullScroll(I)Z
-HPLandroid/widget/ScrollView;->getAccessibilityClassName()Ljava/lang/CharSequence;
-HPLandroid/widget/ScrollView;->getScrollRange()I
-HPLandroid/widget/ScrollView;->inChild(II)Z
 HSPLandroid/widget/ScrollView;->initScrollView()V
-HPLandroid/widget/ScrollView;->initVelocityTrackerIfNotExists()V
 HSPLandroid/widget/ScrollView;->measureChildWithMargins(Landroid/view/View;IIII)V
 HSPLandroid/widget/ScrollView;->onDetachedFromWindow()V
-HSPLandroid/widget/ScrollView;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLandroid/widget/ScrollView;->onLayout(ZIIII)V
 HSPLandroid/widget/ScrollView;->onMeasure(II)V
-HPLandroid/widget/ScrollView;->onOverScrolled(IIZZ)V
-HSPLandroid/widget/ScrollView;->onRequestFocusInDescendants(ILandroid/graphics/Rect;)Z
-HPLandroid/widget/ScrollView;->onSaveInstanceState()Landroid/os/Parcelable;
 HSPLandroid/widget/ScrollView;->onSizeChanged(IIII)V
-HPLandroid/widget/ScrollView;->onTouchEvent(Landroid/view/MotionEvent;)Z
-HPLandroid/widget/ScrollView;->recycleVelocityTracker()V
-HPLandroid/widget/ScrollView;->requestDisallowInterceptTouchEvent(Z)V
 HSPLandroid/widget/ScrollView;->requestLayout()V
-HSPLandroid/widget/ScrollView;->scrollAndFocus(III)Z
 HSPLandroid/widget/ScrollView;->scrollTo(II)V
 HSPLandroid/widget/ScrollView;->setFillViewport(Z)V
-HPLandroid/widget/ScrollView;->shouldDelayChildPressedState()Z
-HPLandroid/widget/ScrollView;->shouldDisplayEdgeEffects()Z
-HSPLandroid/widget/ScrollView;->smoothScrollBy(II)V
 HSPLandroid/widget/Scroller$ViscousFluidInterpolator;-><init>()V
-HPLandroid/widget/Scroller$ViscousFluidInterpolator;->getInterpolation(F)F
-HPLandroid/widget/Scroller$ViscousFluidInterpolator;->viscousFluid(F)F
 HSPLandroid/widget/Scroller;-><init>(Landroid/content/Context;Landroid/view/animation/Interpolator;)V
 HSPLandroid/widget/Scroller;-><init>(Landroid/content/Context;Landroid/view/animation/Interpolator;Z)V
-HPLandroid/widget/Scroller;->abortAnimation()V
-HSPLandroid/widget/Scroller;->computeScrollOffset()Z
-HPLandroid/widget/Scroller;->getCurrX()I
-HPLandroid/widget/Scroller;->getCurrY()I
+HSPLandroid/widget/Scroller;->computeDeceleration(F)F
 HSPLandroid/widget/Scroller;->isFinished()Z
-HPLandroid/widget/Scroller;->startScroll(IIIII)V
-HSPLandroid/widget/SeekBar;-><init>(Landroid/content/Context;)V
-HSPLandroid/widget/SeekBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLandroid/widget/SeekBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/SeekBar;->onProgressRefresh(FZI)V
-HPLandroid/widget/SeekBar;->onStartTrackingTouch()V
-HPLandroid/widget/SeekBar;->onStopTrackingTouch()V
-HSPLandroid/widget/SeekBar;->setOnSeekBarChangeListener(Landroid/widget/SeekBar$OnSeekBarChangeListener;)V
+HSPLandroid/widget/SelectionActionModeHelper$SelectionMetricsLogger;-><init>(Landroid/widget/TextView;)V
+HSPLandroid/widget/SelectionActionModeHelper$SelectionTracker$LogAbandonRunnable;-><init>(Landroid/widget/SelectionActionModeHelper$SelectionTracker;)V
+HSPLandroid/widget/SelectionActionModeHelper$SelectionTracker$LogAbandonRunnable;-><init>(Landroid/widget/SelectionActionModeHelper$SelectionTracker;Landroid/widget/SelectionActionModeHelper$1;)V
+HSPLandroid/widget/SelectionActionModeHelper$SelectionTracker;-><init>(Landroid/widget/TextView;)V
+HSPLandroid/widget/SelectionActionModeHelper$SelectionTracker;->isSelectionStarted()Z
+HSPLandroid/widget/SelectionActionModeHelper$SelectionTracker;->onTextChanged(IILandroid/view/textclassifier/TextClassification;)V
+HSPLandroid/widget/SelectionActionModeHelper$TextClassificationHelper;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Ljava/lang/CharSequence;IILandroid/os/LocaleList;)V
 HSPLandroid/widget/SelectionActionModeHelper$TextClassificationHelper;->init(Ljava/util/function/Supplier;Ljava/lang/CharSequence;IILandroid/os/LocaleList;)V
 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;->isDrawingHighlight()Z
+HSPLandroid/widget/SelectionActionModeHelper;->onDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/SelectionActionModeHelper;->onTextChanged(II)V
 HSPLandroid/widget/SmartSelectSprite;-><init>(Landroid/content/Context;ILjava/lang/Runnable;)V
-HPLandroid/widget/Space;-><init>(Landroid/content/Context;)V
+HSPLandroid/widget/SmartSelectSprite;->isAnimationActive()Z
 HSPLandroid/widget/Space;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/widget/Space;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/Space;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/Space;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/Space;->getDefaultSize2(II)I
 HSPLandroid/widget/Space;->onMeasure(II)V
-HPLandroid/widget/SpellChecker$SpellParser;->isFinished()Z
-HPLandroid/widget/SpellChecker$SpellParser;->parse(II)V
-HPLandroid/widget/SpellChecker$SpellParser;->removeRangeSpan(Landroid/text/Editable;)V
-HPLandroid/widget/SpellChecker$SpellParser;->stop()V
-HPLandroid/widget/SpellChecker;-><init>(Landroid/widget/TextView;)V
-HPLandroid/widget/SpellChecker;->access$200(Landroid/widget/SpellChecker;)Landroid/widget/TextView;
-HPLandroid/widget/SpellChecker;->closeSession()V
-HPLandroid/widget/SpellChecker;->resetSession()V
-HPLandroid/widget/SpellChecker;->spellCheck(II)V
-HPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HPLandroid/widget/Switch;->drawableStateChanged()V
-HPLandroid/widget/Switch;->getButtonStateDescription()Ljava/lang/CharSequence;
-HPLandroid/widget/Switch;->getCompoundPaddingLeft()I
-HPLandroid/widget/Switch;->getCompoundPaddingRight()I
-HPLandroid/widget/Switch;->jumpDrawablesToCurrentState()V
-HPLandroid/widget/Switch;->onCreateDrawableState(I)[I
-HPLandroid/widget/Switch;->onLayout(ZIIII)V
-HPLandroid/widget/Switch;->onMeasure(II)V
-HPLandroid/widget/Switch;->setChecked(Z)V
-HPLandroid/widget/Switch;->setSwitchTextAppearance(Landroid/content/Context;I)V
-HPLandroid/widget/Switch;->setSwitchTypeface(Landroid/graphics/Typeface;)V
-HPLandroid/widget/Switch;->setSwitchTypeface(Landroid/graphics/Typeface;I)V
-HPLandroid/widget/Switch;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
-HPLandroid/widget/TextView$2;->run()V
-HPLandroid/widget/TextView$3;->run()V
-HPLandroid/widget/TextView$ChangeWatcher;->afterTextChanged(Landroid/text/Editable;)V
-HPLandroid/widget/TextView$ChangeWatcher;->beforeTextChanged(Ljava/lang/CharSequence;III)V
+HSPLandroid/widget/TextView$ChangeWatcher;-><init>(Landroid/widget/TextView;)V
+HSPLandroid/widget/TextView$ChangeWatcher;-><init>(Landroid/widget/TextView;Landroid/widget/TextView$1;)V
 HSPLandroid/widget/TextView$ChangeWatcher;->onSpanAdded(Landroid/text/Spannable;Ljava/lang/Object;II)V
-HSPLandroid/widget/TextView$ChangeWatcher;->onSpanChanged(Landroid/text/Spannable;Ljava/lang/Object;IIII)V
 HSPLandroid/widget/TextView$ChangeWatcher;->onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V
-HPLandroid/widget/TextView$ChangeWatcher;->onTextChanged(Ljava/lang/CharSequence;III)V
 HSPLandroid/widget/TextView$Drawables;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/TextView$Drawables;->applyErrorDrawableIfNeeded(I)V
 HSPLandroid/widget/TextView$Drawables;->hasMetadata()Z
 HSPLandroid/widget/TextView$Drawables;->resolveWithLayoutDirection(I)Z
-HPLandroid/widget/TextView$Marquee;-><init>(Landroid/widget/TextView;)V
-HPLandroid/widget/TextView$Marquee;->access$600(Landroid/widget/TextView$Marquee;)B
-HPLandroid/widget/TextView$Marquee;->access$602(Landroid/widget/TextView$Marquee;B)B
-HPLandroid/widget/TextView$Marquee;->access$702(Landroid/widget/TextView$Marquee;J)J
-HPLandroid/widget/TextView$Marquee;->access$800(Landroid/widget/TextView$Marquee;)Landroid/view/Choreographer;
-HPLandroid/widget/TextView$Marquee;->access$900(Landroid/widget/TextView$Marquee;)I
-HPLandroid/widget/TextView$Marquee;->getMaxFadeScroll()F
-HPLandroid/widget/TextView$Marquee;->getScroll()F
-HPLandroid/widget/TextView$Marquee;->isStopped()Z
-HPLandroid/widget/TextView$Marquee;->shouldDrawLeftFade()Z
-HPLandroid/widget/TextView$Marquee;->start(I)V
-HPLandroid/widget/TextView$Marquee;->tick()V
-HSPLandroid/widget/TextView$SavedState;->toString()Ljava/lang/String;
-HPLandroid/widget/TextView$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/widget/TextView$TextAppearanceAttributes;-><init>()V
 HSPLandroid/widget/TextView$TextAppearanceAttributes;-><init>(Landroid/widget/TextView$1;)V
 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
-HPLandroid/widget/TextView;->access$1000(Landroid/widget/TextView;)Landroid/text/Layout;
 HSPLandroid/widget/TextView;->addTextChangedListener(Landroid/text/TextWatcher;)V
 HSPLandroid/widget/TextView;->applyCompoundDrawableTint()V
 HSPLandroid/widget/TextView;->applySingleLine(ZZZ)V
 HSPLandroid/widget/TextView;->applyTextAppearance(Landroid/widget/TextView$TextAppearanceAttributes;)V
 HSPLandroid/widget/TextView;->assumeLayout()V
 HSPLandroid/widget/TextView;->autoSizeText()V
-HPLandroid/widget/TextView;->beginBatchEdit()V
 HSPLandroid/widget/TextView;->bringPointIntoView(I)Z
 HSPLandroid/widget/TextView;->bringTextIntoView()Z
-HPLandroid/widget/TextView;->canMarquee()Z
 HSPLandroid/widget/TextView;->cancelLongPress()V
 HSPLandroid/widget/TextView;->checkForRelayout()V
 HSPLandroid/widget/TextView;->checkForResize()V
-HSPLandroid/widget/TextView;->cleanupAutoSizePresetSizes([I)[I
-HPLandroid/widget/TextView;->compressText(F)Z
-HPLandroid/widget/TextView;->computeHorizontalScrollRange()I
+HSPLandroid/widget/TextView;->compressText(F)Z
 HSPLandroid/widget/TextView;->computeScroll()V
-HPLandroid/widget/TextView;->computeVerticalScrollExtent()I
-HPLandroid/widget/TextView;->computeVerticalScrollRange()I
-HPLandroid/widget/TextView;->convertToLocalHorizontalCoordinate(F)F
 HSPLandroid/widget/TextView;->createEditorIfNeeded()V
 HSPLandroid/widget/TextView;->desired(Landroid/text/Layout;)I
-HPLandroid/widget/TextView;->didTouchFocusSelect()Z
 HSPLandroid/widget/TextView;->drawableHotspotChanged(FF)V
 HSPLandroid/widget/TextView;->drawableStateChanged()V
-HPLandroid/widget/TextView;->endBatchEdit()V
-HSPLandroid/widget/TextView;->findLargestTextSizeWhichFits(Landroid/graphics/RectF;)I
-HSPLandroid/widget/TextView;->fixFocusableAndClickableSettings()V
-HPLandroid/widget/TextView;->getAccessibilityClassName()Ljava/lang/CharSequence;
-HSPLandroid/widget/TextView;->getAutoSizeMinTextSize()I
-HSPLandroid/widget/TextView;->getAutoSizeStepGranularity()I
-HSPLandroid/widget/TextView;->getAutoSizeTextType()I
+HSPLandroid/widget/TextView;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/widget/TextView;->getAutofillType()I
-HPLandroid/widget/TextView;->getAutofillValue()Landroid/view/autofill/AutofillValue;
 HSPLandroid/widget/TextView;->getBaseline()I
 HSPLandroid/widget/TextView;->getBaselineOffset()I
-HPLandroid/widget/TextView;->getBottomVerticalOffset(Z)I
 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;
-HSPLandroid/widget/TextView;->getCompoundDrawablesRelative()[Landroid/graphics/drawable/Drawable;
 HSPLandroid/widget/TextView;->getCompoundPaddingBottom()I
 HSPLandroid/widget/TextView;->getCompoundPaddingLeft()I
 HSPLandroid/widget/TextView;->getCompoundPaddingRight()I
@@ -28929,115 +14405,65 @@
 HSPLandroid/widget/TextView;->getDefaultMovementMethod()Landroid/text/method/MovementMethod;
 HSPLandroid/widget/TextView;->getDesiredHeight()I
 HSPLandroid/widget/TextView;->getDesiredHeight(Landroid/text/Layout;Z)I
-HPLandroid/widget/TextView;->getEditableText()Landroid/text/Editable;
-HPLandroid/widget/TextView;->getEllipsize()Landroid/text/TextUtils$TruncateAt;
-HSPLandroid/widget/TextView;->getError()Ljava/lang/CharSequence;
 HSPLandroid/widget/TextView;->getExtendedPaddingBottom()I
 HSPLandroid/widget/TextView;->getExtendedPaddingTop()I
-HPLandroid/widget/TextView;->getFadeHeight(Z)I
-HPLandroid/widget/TextView;->getFadeTop(Z)I
 HSPLandroid/widget/TextView;->getFilters()[Landroid/text/InputFilter;
-HPLandroid/widget/TextView;->getFocusedRect(Landroid/graphics/Rect;)V
 HSPLandroid/widget/TextView;->getFreezesText()Z
 HSPLandroid/widget/TextView;->getGravity()I
-HSPLandroid/widget/TextView;->getHighlightColor()I
-HPLandroid/widget/TextView;->getHint()Ljava/lang/CharSequence;
-HPLandroid/widget/TextView;->getHorizontalFadingEdgeStrength(FF)F
 HSPLandroid/widget/TextView;->getHorizontalOffsetForDrawables()I
 HSPLandroid/widget/TextView;->getHorizontallyScrolling()Z
-HSPLandroid/widget/TextView;->getHyphenationFrequency()I
-HSPLandroid/widget/TextView;->getIncludeFontPadding()Z
-HPLandroid/widget/TextView;->getInputType()I
-HPLandroid/widget/TextView;->getInterestingRect(Landroid/graphics/Rect;I)V
-HSPLandroid/widget/TextView;->getJustificationMode()I
+HSPLandroid/widget/TextView;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/widget/TextView;->getInputType()I
 HSPLandroid/widget/TextView;->getKeyListener()Landroid/text/method/KeyListener;
 HSPLandroid/widget/TextView;->getLayout()Landroid/text/Layout;
 HSPLandroid/widget/TextView;->getLayoutAlignment()Landroid/text/Layout$Alignment;
-HPLandroid/widget/TextView;->getLeftFadingEdgeStrength()F
-HPLandroid/widget/TextView;->getLineAtCoordinate(F)I
 HSPLandroid/widget/TextView;->getLineCount()I
-HSPLandroid/widget/TextView;->getLineHeight()I
-HSPLandroid/widget/TextView;->getLineSpacingExtra()F
-HSPLandroid/widget/TextView;->getLineSpacingMultiplier()F
-HPLandroid/widget/TextView;->getMaxEms()I
-HPLandroid/widget/TextView;->getMaxHeight()I
 HSPLandroid/widget/TextView;->getMaxLines()I
-HPLandroid/widget/TextView;->getMaxWidth()I
-HPLandroid/widget/TextView;->getMinEms()I
-HPLandroid/widget/TextView;->getOffsetAtCoordinate(IF)I
-HPLandroid/widget/TextView;->getOffsetForPosition(FF)I
 HSPLandroid/widget/TextView;->getPaint()Landroid/text/TextPaint;
-HPLandroid/widget/TextView;->getRightFadingEdgeStrength()F
-HSPLandroid/widget/TextView;->getRightPaddingOffset()I
 HSPLandroid/widget/TextView;->getSelectionEnd()I
 HSPLandroid/widget/TextView;->getSelectionStart()I
-HPLandroid/widget/TextView;->getServiceManagerForUser(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
-HPLandroid/widget/TextView;->getSpellCheckerLocale()Ljava/util/Locale;
 HSPLandroid/widget/TextView;->getText()Ljava/lang/CharSequence;
-HSPLandroid/widget/TextView;->getTextColors()Landroid/content/res/ColorStateList;
-HPLandroid/widget/TextView;->getTextCursorDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/widget/TextView;->getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic;
 HSPLandroid/widget/TextView;->getTextLocale()Ljava/util/Locale;
 HSPLandroid/widget/TextView;->getTextLocales()Landroid/os/LocaleList;
 HSPLandroid/widget/TextView;->getTextSize()F
-HPLandroid/widget/TextView;->getTotalPaddingBottom()I
-HSPLandroid/widget/TextView;->getTotalPaddingLeft()I
-HSPLandroid/widget/TextView;->getTotalPaddingRight()I
-HPLandroid/widget/TextView;->getTotalPaddingTop()I
 HSPLandroid/widget/TextView;->getTransformationMethod()Landroid/text/method/TransformationMethod;
-HPLandroid/widget/TextView;->getTypeface()Landroid/graphics/Typeface;
-HPLandroid/widget/TextView;->getTypefaceStyle()I
 HSPLandroid/widget/TextView;->getUpdatedHighlightPath()Landroid/graphics/Path;
 HSPLandroid/widget/TextView;->getVerticalOffset(Z)I
-HPLandroid/widget/TextView;->handleBackInTextActionModeIfNeeded(Landroid/view/KeyEvent;)Z
-HPLandroid/widget/TextView;->handleTextChanged(Ljava/lang/CharSequence;III)V
 HSPLandroid/widget/TextView;->hasOverlappingRendering()Z
 HSPLandroid/widget/TextView;->hasPasswordTransformationMethod()Z
 HSPLandroid/widget/TextView;->hasSelection()Z
-HSPLandroid/widget/TextView;->hideErrorIfUnchanged()V
-HPLandroid/widget/TextView;->invalidateCursor()V
-HPLandroid/widget/TextView;->invalidateCursor(III)V
-HPLandroid/widget/TextView;->invalidateCursorPath()V
+HSPLandroid/widget/TextView;->invalidateCursor(III)V
 HSPLandroid/widget/TextView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/TextView;->invalidateRegion(IIZ)V
-HPLandroid/widget/TextView;->isAutoSizeEnabled()Z
-PLandroid/widget/TextView;->isAutofillable()Z
+HSPLandroid/widget/TextView;->isAutoSizeEnabled()Z
+HSPLandroid/widget/TextView;->isAutofillable()Z
 HSPLandroid/widget/TextView;->isInExtractedMode()Z
 HSPLandroid/widget/TextView;->isInputMethodTarget()Z
-PLandroid/widget/TextView;->isMarqueeFadeEnabled()Z
+HSPLandroid/widget/TextView;->isMarqueeFadeEnabled()Z
 HSPLandroid/widget/TextView;->isMultilineInputType(I)Z
-HPLandroid/widget/TextView;->isPaddingOffsetRequired()Z
-PLandroid/widget/TextView;->isShowingHint()Z
+HSPLandroid/widget/TextView;->isShowingHint()Z
 HSPLandroid/widget/TextView;->isSuggestionsEnabled()Z
 HSPLandroid/widget/TextView;->isTextEditable()Z
 HSPLandroid/widget/TextView;->isTextSelectable()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
 HSPLandroid/widget/TextView;->makeSingleLayout(ILandroid/text/BoringLayout$Metrics;ILandroid/text/Layout$Alignment;ZLandroid/text/TextUtils$TruncateAt;Z)Landroid/text/Layout;
 HSPLandroid/widget/TextView;->notifyListeningManagersAfterTextChanged()V
 HSPLandroid/widget/TextView;->nullLayouts()V
 HSPLandroid/widget/TextView;->onAttachedToWindow()V
-HPLandroid/widget/TextView;->onBeginBatchEdit()V
 HSPLandroid/widget/TextView;->onCheckIsTextEditor()Z
-HPLandroid/widget/TextView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLandroid/widget/TextView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLandroid/widget/TextView;->onCreateDrawableState(I)[I
-HPLandroid/widget/TextView;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
 HSPLandroid/widget/TextView;->onDetachedFromWindowInternal()V
 HSPLandroid/widget/TextView;->onDraw(Landroid/graphics/Canvas;)V
-HPLandroid/widget/TextView;->onEndBatchEdit()V
-HPLandroid/widget/TextView;->onFocusChanged(ZILandroid/graphics/Rect;)V
-HPLandroid/widget/TextView;->onKeyPreIme(ILandroid/view/KeyEvent;)Z
 HSPLandroid/widget/TextView;->onLayout(ZIIII)V
-HPLandroid/widget/TextView;->onLocaleChanged()V
 HSPLandroid/widget/TextView;->onMeasure(II)V
 HSPLandroid/widget/TextView;->onPreDraw()Z
-HPLandroid/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
 HSPLandroid/widget/TextView;->onSaveInstanceState()Landroid/os/Parcelable;
-HPLandroid/widget/TextView;->onScreenStateChanged(I)V
+HSPLandroid/widget/TextView;->onScreenStateChanged(I)V
 HSPLandroid/widget/TextView;->onScrollChanged(IIII)V
 HSPLandroid/widget/TextView;->onSelectionChanged(II)V
 HSPLandroid/widget/TextView;->onTextChanged(Ljava/lang/CharSequence;III)V
@@ -29045,35 +14471,24 @@
 HSPLandroid/widget/TextView;->onVisibilityChanged(Landroid/view/View;I)V
 HSPLandroid/widget/TextView;->onWindowFocusChanged(Z)V
 HSPLandroid/widget/TextView;->preloadFontCache()V
+HSPLandroid/widget/TextView;->prepareDrawableForDisplay(Landroid/graphics/drawable/Drawable;)V
 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
 HSPLandroid/widget/TextView;->removeMisspelledSpans(Landroid/text/Spannable;)V
 HSPLandroid/widget/TextView;->removeSuggestionSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HPLandroid/widget/TextView;->removeTextChangedListener(Landroid/text/TextWatcher;)V
-HPLandroid/widget/TextView;->resetErrorChangedFlag()V
 HSPLandroid/widget/TextView;->resetResolvedDrawables()V
-PLandroid/widget/TextView;->resolveStyleAndSetTypeface(Landroid/graphics/Typeface;II)V
+HSPLandroid/widget/TextView;->resolveStyleAndSetTypeface(Landroid/graphics/Typeface;II)V
 HSPLandroid/widget/TextView;->restartMarqueeIfNeeded()V
 HSPLandroid/widget/TextView;->sendAccessibilityEventInternal(I)V
-HSPLandroid/widget/TextView;->sendAfterTextChanged(Landroid/text/Editable;)V
 HSPLandroid/widget/TextView;->sendBeforeTextChanged(Ljava/lang/CharSequence;III)V
 HSPLandroid/widget/TextView;->sendOnTextChanged(Ljava/lang/CharSequence;III)V
-HSPLandroid/widget/TextView;->setAllCaps(Z)V
-HSPLandroid/widget/TextView;->setAutoSizeTextTypeUniformWithPresetSizes([II)V
-HPLandroid/widget/TextView;->setBreakStrategy(I)V
 HSPLandroid/widget/TextView;->setCompoundDrawablePadding(I)V
-HPLandroid/widget/TextView;->setCompoundDrawableTintList(Landroid/content/res/ColorStateList;)V
 HSPLandroid/widget/TextView;->setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/TextView;->setCompoundDrawablesRelative(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/widget/TextView;->setCompoundDrawablesRelativeWithIntrinsicBounds(IIII)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
-HPLandroid/widget/TextView;->setCustomSelectionActionModeCallback(Landroid/view/ActionMode$Callback;)V
 HSPLandroid/widget/TextView;->setEllipsize(Landroid/text/TextUtils$TruncateAt;)V
-HSPLandroid/widget/TextView;->setEms(I)V
 HSPLandroid/widget/TextView;->setEnabled(Z)V
 HSPLandroid/widget/TextView;->setFilters(Landroid/text/Editable;[Landroid/text/InputFilter;)V
 HSPLandroid/widget/TextView;->setFilters([Landroid/text/InputFilter;)V
@@ -29082,33 +14497,21 @@
 HSPLandroid/widget/TextView;->setHighlightColor(I)V
 HSPLandroid/widget/TextView;->setHint(Ljava/lang/CharSequence;)V
 HSPLandroid/widget/TextView;->setHintInternal(Ljava/lang/CharSequence;)V
-HSPLandroid/widget/TextView;->setHintTextColor(I)V
-PLandroid/widget/TextView;->setHintTextColor(Landroid/content/res/ColorStateList;)V
+HSPLandroid/widget/TextView;->setHintTextColor(Landroid/content/res/ColorStateList;)V
 HSPLandroid/widget/TextView;->setHorizontallyScrolling(Z)V
-HPLandroid/widget/TextView;->setImeOptions(I)V
 HSPLandroid/widget/TextView;->setIncludeFontPadding(Z)V
-HPLandroid/widget/TextView;->setInputType(I)V
 HSPLandroid/widget/TextView;->setInputType(IZ)V
 HSPLandroid/widget/TextView;->setInputTypeSingleLine(Z)V
-HPLandroid/widget/TextView;->setKeyListenerOnly(Landroid/text/method/KeyListener;)V
 HSPLandroid/widget/TextView;->setLetterSpacing(F)V
-HPLandroid/widget/TextView;->setLineHeight(I)V
-HPLandroid/widget/TextView;->setLineSpacing(FF)V
 HSPLandroid/widget/TextView;->setLines(I)V
-HSPLandroid/widget/TextView;->setLinkTextColor(I)V
-PLandroid/widget/TextView;->setLinkTextColor(Landroid/content/res/ColorStateList;)V
-HPLandroid/widget/TextView;->setMarqueeRepeatLimit(I)V
-HPLandroid/widget/TextView;->setMaxEms(I)V
+HSPLandroid/widget/TextView;->setLinkTextColor(Landroid/content/res/ColorStateList;)V
 HSPLandroid/widget/TextView;->setMaxLines(I)V
 HSPLandroid/widget/TextView;->setMaxWidth(I)V
 HSPLandroid/widget/TextView;->setMinHeight(I)V
-HSPLandroid/widget/TextView;->setMinLines(I)V
 HSPLandroid/widget/TextView;->setMinWidth(I)V
-HSPLandroid/widget/TextView;->setMovementMethod(Landroid/text/method/MovementMethod;)V
 HSPLandroid/widget/TextView;->setOnEditorActionListener(Landroid/widget/TextView$OnEditorActionListener;)V
 HSPLandroid/widget/TextView;->setPadding(IIII)V
-HPLandroid/widget/TextView;->setPaddingRelative(IIII)V
-HSPLandroid/widget/TextView;->setPrivateImeOptions(Ljava/lang/String;)V
+HSPLandroid/widget/TextView;->setPaddingRelative(IIII)V
 HSPLandroid/widget/TextView;->setRawInputType(I)V
 HSPLandroid/widget/TextView;->setRawTextSize(FZ)V
 HSPLandroid/widget/TextView;->setRelativeDrawablesIfNeeded(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
@@ -29116,861 +14519,95 @@
 HSPLandroid/widget/TextView;->setShadowLayer(FFFI)V
 HSPLandroid/widget/TextView;->setSingleLine()V
 HSPLandroid/widget/TextView;->setSingleLine(Z)V
-HSPLandroid/widget/TextView;->setSpannableFactory(Landroid/text/Spannable$Factory;)V
 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
 HSPLandroid/widget/TextView;->setTextAppearance(I)V
 HSPLandroid/widget/TextView;->setTextAppearance(Landroid/content/Context;I)V
-HSPLandroid/widget/TextView;->setTextClassifier(Landroid/view/textclassifier/TextClassifier;)V
 HSPLandroid/widget/TextView;->setTextColor(I)V
 HSPLandroid/widget/TextView;->setTextColor(Landroid/content/res/ColorStateList;)V
 HSPLandroid/widget/TextView;->setTextInternal(Ljava/lang/CharSequence;)V
-HSPLandroid/widget/TextView;->setTextIsSelectable(Z)V
-HPLandroid/widget/TextView;->setTextOperationUser(Landroid/os/UserHandle;)V
-HPLandroid/widget/TextView;->setTextSize(F)V
 HSPLandroid/widget/TextView;->setTextSize(IF)V
-HPLandroid/widget/TextView;->setTextSizeInternal(IFZ)V
+HSPLandroid/widget/TextView;->setTextSizeInternal(IFZ)V
 HSPLandroid/widget/TextView;->setTransformationMethod(Landroid/text/method/TransformationMethod;)V
 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
-HPLandroid/widget/TextView;->setWidth(I)V
-HSPLandroid/widget/TextView;->setupAutoSizeText()Z
-HSPLandroid/widget/TextView;->setupAutoSizeUniformPresetSizesConfiguration()Z
-HPLandroid/widget/TextView;->shouldAdvanceFocusOnEnter()Z
 HSPLandroid/widget/TextView;->spanChange(Landroid/text/Spanned;Ljava/lang/Object;IIII)V
-HPLandroid/widget/TextView;->startMarquee()V
+HSPLandroid/widget/TextView;->startMarquee()V
+HSPLandroid/widget/TextView;->startStopMarquee(Z)V
 HSPLandroid/widget/TextView;->stopMarquee()V
 HSPLandroid/widget/TextView;->stopTextActionMode()V
-HSPLandroid/widget/TextView;->suggestedSizeFitsInSpace(ILandroid/graphics/RectF;)Z
 HSPLandroid/widget/TextView;->supportsAutoSizeText()Z
 HSPLandroid/widget/TextView;->textCanBeSelected()Z
-PLandroid/widget/TextView;->unregisterForPreDraw()V
-HPLandroid/widget/TextView;->updateAfterEdit()V
+HSPLandroid/widget/TextView;->unregisterForPreDraw()V
 HSPLandroid/widget/TextView;->updateTextColors()V
 HSPLandroid/widget/TextView;->useDynamicLayout()Z
 HSPLandroid/widget/TextView;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
-HPLandroid/widget/TextView;->viewportToContentHorizontalOffset()I
-HPLandroid/widget/TextView;->viewportToContentVerticalOffset()I
-PLandroid/widget/Toast$TN$1;-><init>(Landroid/widget/Toast$TN;Landroid/os/Looper;Landroid/os/Handler$Callback;)V
-PLandroid/widget/Toast$TN$1;->handleMessage(Landroid/os/Message;)V
-PLandroid/widget/Toast$TN;-><init>(Ljava/lang/String;Landroid/os/Looper;)V
-PLandroid/widget/Toast$TN;->handleHide()V
-PLandroid/widget/Toast$TN;->handleShow(Landroid/os/IBinder;)V
-PLandroid/widget/Toast$TN;->hide()V
-PLandroid/widget/Toast$TN;->show(Landroid/os/IBinder;)V
-PLandroid/widget/Toast$TN;->trySendAccessibilityEvent()V
-PLandroid/widget/Toast;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
-PLandroid/widget/Toast;->access$100()Landroid/app/INotificationManager;
-PLandroid/widget/Toast;->getService()Landroid/app/INotificationManager;
-PLandroid/widget/Toast;->makeText(Landroid/content/Context;Landroid/os/Looper;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
-HPLandroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
-PLandroid/widget/Toast;->show()V
-HSPLandroid/widget/ToggleButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/ToggleButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/widget/ToggleButton;->drawableStateChanged()V
-HSPLandroid/widget/ToggleButton;->getButtonStateDescription()Ljava/lang/CharSequence;
-HSPLandroid/widget/ToggleButton;->onFinishInflate()V
-HSPLandroid/widget/ToggleButton;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/widget/ToggleButton;->setChecked(Z)V
-HSPLandroid/widget/ToggleButton;->syncTextState()V
-HSPLandroid/widget/ToggleButton;->updateReferenceToIndicatorDrawable(Landroid/graphics/drawable/Drawable;)V
-PLandroid/widget/Toolbar$1;-><init>(Landroid/widget/Toolbar;)V
-PLandroid/widget/Toolbar$2;-><init>(Landroid/widget/Toolbar;)V
-HPLandroid/widget/Toolbar$ExpandedActionViewMenuPresenter;-><init>(Landroid/widget/Toolbar;)V
-HPLandroid/widget/Toolbar$ExpandedActionViewMenuPresenter;-><init>(Landroid/widget/Toolbar;Landroid/widget/Toolbar$1;)V
-HPLandroid/widget/Toolbar$ExpandedActionViewMenuPresenter;->initForMenu(Landroid/content/Context;Lcom/android/internal/view/menu/MenuBuilder;)V
-HPLandroid/widget/Toolbar$ExpandedActionViewMenuPresenter;->updateMenuView(Z)V
-PLandroid/widget/Toolbar$LayoutParams;-><init>(II)V
-HPLandroid/widget/Toolbar$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/widget/Toolbar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-PLandroid/widget/Toolbar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-PLandroid/widget/Toolbar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-PLandroid/widget/Toolbar;->addCustomViewsWithGravity(Ljava/util/List;I)V
-PLandroid/widget/Toolbar;->addSystemView(Landroid/view/View;Z)V
-PLandroid/widget/Toolbar;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
-PLandroid/widget/Toolbar;->dismissPopupMenus()V
-PLandroid/widget/Toolbar;->ensureContentInsets()V
-HPLandroid/widget/Toolbar;->ensureMenuView()V
-PLandroid/widget/Toolbar;->ensureNavButtonView()V
-PLandroid/widget/Toolbar;->generateDefaultLayoutParams()Landroid/widget/Toolbar$LayoutParams;
-HPLandroid/widget/Toolbar;->getContentInsetEnd()I
-HPLandroid/widget/Toolbar;->getContentInsetStart()I
-HPLandroid/widget/Toolbar;->getCurrentContentInsetEnd()I
-PLandroid/widget/Toolbar;->getCurrentContentInsetLeft()I
-PLandroid/widget/Toolbar;->getCurrentContentInsetRight()I
-HPLandroid/widget/Toolbar;->getCurrentContentInsetStart()I
-PLandroid/widget/Toolbar;->getHorizontalMargins(Landroid/view/View;)I
-PLandroid/widget/Toolbar;->getNavigationContentDescription()Ljava/lang/CharSequence;
-HPLandroid/widget/Toolbar;->getNavigationIcon()Landroid/graphics/drawable/Drawable;
-PLandroid/widget/Toolbar;->getSubtitle()Ljava/lang/CharSequence;
-PLandroid/widget/Toolbar;->getTitle()Ljava/lang/CharSequence;
-PLandroid/widget/Toolbar;->getVerticalMargins(Landroid/view/View;)I
-PLandroid/widget/Toolbar;->getViewListMeasuredWidth(Ljava/util/List;[I)I
-PLandroid/widget/Toolbar;->getWrapper()Lcom/android/internal/widget/DecorToolbar;
-PLandroid/widget/Toolbar;->isChildOrHidden(Landroid/view/View;)Z
-HPLandroid/widget/Toolbar;->isOverflowMenuShowing()Z
-HPLandroid/widget/Toolbar;->measureChildCollapseMargins(Landroid/view/View;IIII[I)I
-HPLandroid/widget/Toolbar;->measureChildConstrained(Landroid/view/View;IIIII)V
-PLandroid/widget/Toolbar;->onAttachedToWindow()V
-PLandroid/widget/Toolbar;->onDetachedFromWindow()V
-PLandroid/widget/Toolbar;->onLayout(ZIIII)V
-HPLandroid/widget/Toolbar;->onMeasure(II)V
-PLandroid/widget/Toolbar;->onRtlPropertiesChanged(I)V
-HPLandroid/widget/Toolbar;->onSaveInstanceState()Landroid/os/Parcelable;
-HPLandroid/widget/Toolbar;->setCollapsible(Z)V
-PLandroid/widget/Toolbar;->setContentInsetsRelative(II)V
-PLandroid/widget/Toolbar;->setLogo(Landroid/graphics/drawable/Drawable;)V
-HPLandroid/widget/Toolbar;->setMenu(Lcom/android/internal/view/menu/MenuBuilder;Landroid/widget/ActionMenuPresenter;)V
-PLandroid/widget/Toolbar;->setNavigationContentDescription(Ljava/lang/CharSequence;)V
-PLandroid/widget/Toolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
-PLandroid/widget/Toolbar;->setNavigationOnClickListener(Landroid/view/View$OnClickListener;)V
-PLandroid/widget/Toolbar;->setPopupTheme(I)V
-PLandroid/widget/Toolbar;->setSubtitle(Ljava/lang/CharSequence;)V
-PLandroid/widget/Toolbar;->setSubtitleTextAppearance(Landroid/content/Context;I)V
-PLandroid/widget/Toolbar;->setTitle(Ljava/lang/CharSequence;)V
-PLandroid/widget/Toolbar;->setTitleTextAppearance(Landroid/content/Context;I)V
-HPLandroid/widget/Toolbar;->shouldCollapse()Z
-PLandroid/widget/Toolbar;->shouldLayout(Landroid/view/View;)Z
-HPLandroid/widget/ViewAnimator;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/widget/ViewAnimator;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
-HPLandroid/widget/ViewAnimator;->getDisplayedChild()I
-HPLandroid/widget/ViewAnimator;->initViewAnimator(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HPLandroid/widget/ViewAnimator;->setAnimateFirstView(Z)V
-HPLandroid/widget/ViewAnimator;->setDisplayedChild(I)V
-HPLandroid/widget/ViewAnimator;->showOnly(I)V
-HPLandroid/widget/ViewAnimator;->showOnly(IZ)V
-HPLandroid/widget/ViewSwitcher;-><init>(Landroid/content/Context;)V
-HPLandroid/widget/ViewSwitcher;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;-><init>([BII)V
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->checkLastTagWas(I)V
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->isAtEnd()Z
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->newInstance([BII)Lcom/android/framework/protobuf/nano/CodedInputByteBufferNano;
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readBool()Z
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readFloat()F
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readInt32()I
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readInt64()J
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readRawByte()B
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readRawLittleEndian32()I
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readRawVarint32()I
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readRawVarint64()J
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readString()Ljava/lang/String;
-PLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readTag()I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;-><init>(Ljava/nio/ByteBuffer;)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;-><init>([BII)V
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->checkNoSpaceLeft()V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeBoolSize(IZ)I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeBoolSizeNoTag(Z)I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeDoubleSize(ID)I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeDoubleSizeNoTag(D)I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeFloatSize(IF)I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeFloatSizeNoTag(F)I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeInt32Size(II)I
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeInt32SizeNoTag(I)I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeInt64Size(IJ)I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeInt64SizeNoTag(J)I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeMessageSize(ILcom/android/framework/protobuf/nano/MessageNano;)I
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeMessageSizeNoTag(Lcom/android/framework/protobuf/nano/MessageNano;)I
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeRawVarint32Size(I)I
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeRawVarint64Size(J)I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeStringSize(ILjava/lang/String;)I
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeStringSizeNoTag(Ljava/lang/String;)I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeTagSize(I)I
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->encode(Ljava/lang/CharSequence;Ljava/nio/ByteBuffer;)V
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->encode(Ljava/lang/CharSequence;[BII)I
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->encodedLength(Ljava/lang/CharSequence;)I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->newInstance([BII)Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->spaceLeft()I
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeBool(IZ)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeBoolNoTag(Z)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeDouble(ID)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeDoubleNoTag(D)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeFloat(IF)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeFloatNoTag(F)V
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeInt32(II)V
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeInt32NoTag(I)V
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeInt64(IJ)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeInt64NoTag(J)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeMessage(ILcom/android/framework/protobuf/nano/MessageNano;)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeMessageNoTag(Lcom/android/framework/protobuf/nano/MessageNano;)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeRawByte(B)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeRawByte(I)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeRawLittleEndian32(I)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeRawLittleEndian64(J)V
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeRawVarint32(I)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeRawVarint64(J)V
-PLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeString(ILjava/lang/String;)V
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeStringNoTag(Ljava/lang/String;)V
-HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeTag(II)V
-PLcom/android/framework/protobuf/nano/InternalNano;-><clinit>()V
-HPLcom/android/framework/protobuf/nano/MessageNano;-><init>()V
-PLcom/android/framework/protobuf/nano/MessageNano;->computeSerializedSize()I
-HPLcom/android/framework/protobuf/nano/MessageNano;->getCachedSize()I
-HPLcom/android/framework/protobuf/nano/MessageNano;->getSerializedSize()I
-PLcom/android/framework/protobuf/nano/MessageNano;->mergeFrom(Lcom/android/framework/protobuf/nano/MessageNano;[B)Lcom/android/framework/protobuf/nano/MessageNano;
-PLcom/android/framework/protobuf/nano/MessageNano;->mergeFrom(Lcom/android/framework/protobuf/nano/MessageNano;[BII)Lcom/android/framework/protobuf/nano/MessageNano;
-PLcom/android/framework/protobuf/nano/MessageNano;->toByteArray(Lcom/android/framework/protobuf/nano/MessageNano;)[B
-HPLcom/android/framework/protobuf/nano/MessageNano;->toByteArray(Lcom/android/framework/protobuf/nano/MessageNano;[BII)V
-PLcom/android/framework/protobuf/nano/MessageNano;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-PLcom/android/framework/protobuf/nano/WireFormatNano;->makeTag(II)I
-HSPLcom/android/i18n/phonenumbers/CountryCodeToRegionCodeMap;->getCountryCodeToRegionCodeMap()Ljava/util/Map;
-HSPLcom/android/i18n/phonenumbers/MetadataManager$1;->loadMetadata(Ljava/lang/String;)Ljava/io/InputStream;
-HSPLcom/android/i18n/phonenumbers/MetadataManager;->getMetadataFromMultiFilePrefix(Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap;Ljava/lang/String;Lcom/android/i18n/phonenumbers/MetadataLoader;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/MetadataManager;->getMetadataFromSingleFileName(Ljava/lang/String;Lcom/android/i18n/phonenumbers/MetadataLoader;)Ljava/util/List;
-HSPLcom/android/i18n/phonenumbers/MetadataManager;->loadMetadataAndCloseInput(Ljava/io/InputStream;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadataCollection;
-HSPLcom/android/i18n/phonenumbers/MultiFileMetadataSourceImpl;->getMetadataForRegion(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;-><init>(Lcom/android/i18n/phonenumbers/MetadataSource;Ljava/util/Map;)V
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->buildNationalNumberForParsing(Ljava/lang/String;Ljava/lang/StringBuilder;)V
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->chooseFormattingPatternForNumber(Ljava/util/List;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;
-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;->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;->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;
-HPLcom/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;->getNationalSignificantNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNddPrefixForRegion(Ljava/lang/String;Z)Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNumberDescByType(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-PLcom/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;
-PLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String;
-HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForNumberFromRegionList(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/util/List;)Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->hasFormattingPatternForNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Z
-HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isNumberMatchingDesc(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Z
-PLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isValidNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Z
-PLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isValidNumberForRegion(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/lang/String;)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;->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;->normalizeDigits(Ljava/lang/CharSequence;Z)Ljava/lang/StringBuilder;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeHelper(Ljava/lang/CharSequence;Ljava/util/Map;Z)Ljava/lang/String;
-PLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parse(Ljava/lang/CharSequence;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
-PLcom/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;->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;->rawInputContainsNationalPrefix(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-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$PhoneNumberType;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getFormat()Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getLeadingDigitsPattern(I)Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getNationalPrefixFormattingRule()Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getPattern()Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->leadingDigitsPatternSize()I
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->readExternal(Ljava/io/ObjectInput;)V
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->setDomesticCarrierCodeFormattingRule(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->setFormat(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->setNationalPrefixFormattingRule(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->setNationalPrefixOptionalWhenFormatting(Z)Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->setPattern(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;-><init>()V
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getCountryCode()I
-HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getFixedLine()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getGeneralDesc()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getInternationalPrefix()Ljava/lang/String;
-PLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getLeadingDigits()Ljava/lang/String;
-HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getMobile()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getNationalPrefix()Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getNationalPrefixForParsing()Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getNationalPrefixTransformRule()Ljava/lang/String;
-HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getPager()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getPersonalNumber()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getPremiumRate()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getSameMobileAndFixedLinePattern()Z
-HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getSharedCost()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getTollFree()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getUan()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getVoicemail()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getVoip()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->hasLeadingDigits()Z
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->intlNumberFormats()Ljava/util/List;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->numberFormats()Ljava/util/List;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->readExternal(Ljava/io/ObjectInput;)V
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setCountryCode(I)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setFixedLine(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setGeneralDesc(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setId(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setInternationalPrefix(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-PLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setLeadingDigits(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setLeadingZeroPossible(Z)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setMainCountryForCode(Z)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setMobile(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setMobileNumberPortableRegion(Z)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setNationalPrefix(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setNationalPrefixForParsing(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-PLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setNationalPrefixTransformRule(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setNoInternationalDialling(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setPager(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setPersonalNumber(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setPreferredExtnPrefix(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setPreferredInternationalPrefix(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setPremiumRate(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setSameMobileAndFixedLinePattern(Z)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setSharedCost(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setTollFree(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setUan(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setVoicemail(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setVoip(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadataCollection;->getMetadataList()Ljava/util/List;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;->getNationalNumberPattern()Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;->getPossibleLengthList()Ljava/util/List;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;->getPossibleLengthLocalOnlyList()Ljava/util/List;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;->readExternal(Ljava/io/ObjectInput;)V
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;->setExampleNumber(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;->setNationalNumberPattern(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getCountryCode()I
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getCountryCodeSource()Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getNationalNumber()J
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getNumberOfLeadingZeros()I
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getRawInput()Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->hasCountryCodeSource()Z
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->hasExtension()Z
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->hasRawInput()Z
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->isItalianLeadingZero()Z
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->setCountryCode(I)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->setCountryCodeSource(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->setItalianLeadingZero(Z)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->setNationalNumber(J)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
-HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->setNumberOfLeadingZeros(I)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
-HSPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->setRawInput(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
-HSPLcom/android/i18n/phonenumbers/internal/RegexBasedMatcher;->matchNationalNumber(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;Z)Z
-HSPLcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache$1;->removeEldestEntry(Ljava/util/Map$Entry;)Z
-HSPLcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache;->put(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLcom/android/i18n/phonenumbers/internal/RegexCache;->getPatternForRegex(Ljava/lang/String;)Ljava/util/regex/Pattern;
-HSPLcom/android/ims/ImsConfig;-><init>(Landroid/telephony/ims/aidl/IImsConfig;)V
-HSPLcom/android/ims/ImsConfig;->addConfigCallback(Landroid/telephony/ims/ProvisioningManager$Callback;)V
-HSPLcom/android/ims/ImsConfig;->addConfigCallback(Landroid/telephony/ims/aidl/IImsConfigCallback;)V
-HSPLcom/android/ims/ImsConfig;->getThreadExecutor()Ljava/util/concurrent/Executor;
-HPLcom/android/ims/ImsConfig;->removeConfigCallback(Landroid/telephony/ims/aidl/IImsConfigCallback;)V
-HPLcom/android/ims/ImsConfig;->setConfig(II)I
-HSPLcom/android/ims/ImsConfigListener$Stub;-><init>()V
-HSPLcom/android/ims/ImsException;-><init>(Ljava/lang/String;I)V
-HSPLcom/android/ims/ImsException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;I)V
-HSPLcom/android/ims/ImsException;->getCode()I
-HSPLcom/android/ims/internal/IImsEcbm$Stub;-><init>()V
-HSPLcom/android/ims/internal/IImsEcbmListener$Stub;-><init>()V
-HSPLcom/android/ims/internal/IImsExternalCallStateListener$Stub;-><init>()V
-HSPLcom/android/ims/internal/IImsFeatureStatusCallback$Stub;-><init>()V
-HSPLcom/android/ims/internal/IImsFeatureStatusCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLcom/android/ims/internal/IImsMultiEndpoint$Stub;-><init>()V
-HSPLcom/android/ims/internal/IImsServiceFeatureCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLcom/android/ims/internal/IImsServiceFeatureCallback$Stub$Proxy;->imsFeatureCreated(II)V
-HPLcom/android/ims/internal/IImsServiceFeatureCallback$Stub$Proxy;->imsStatusChanged(III)V
-HSPLcom/android/ims/internal/IImsServiceFeatureCallback$Stub;-><init>()V
-HPLcom/android/ims/internal/IImsServiceFeatureCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLcom/android/ims/internal/IImsServiceFeatureCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsServiceFeatureCallback;
-HPLcom/android/ims/internal/IImsServiceFeatureCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/ims/internal/IImsUt$Stub;-><init>()V
-HSPLcom/android/ims/internal/IImsUtListener$Stub;-><init>()V
-HSPLcom/android/internal/accessibility/AccessibilityShortcutController$1;-><init>(Lcom/android/internal/accessibility/AccessibilityShortcutController;Landroid/os/Handler;)V
-HSPLcom/android/internal/accessibility/AccessibilityShortcutController$FrameworkObjectProvider;-><init>()V
-PLcom/android/internal/accessibility/AccessibilityShortcutController$ToggleableFrameworkFeatureInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLcom/android/internal/accessibility/AccessibilityShortcutController;-><init>(Landroid/content/Context;Landroid/os/Handler;I)V
-PLcom/android/internal/accessibility/AccessibilityShortcutController;->getFrameworkShortcutFeaturesMap()Ljava/util/Map;
-HSPLcom/android/internal/accessibility/AccessibilityShortcutController;->hasShortcutTarget()Z
-PLcom/android/internal/accessibility/AccessibilityShortcutController;->isAccessibilityShortcutAvailable(Z)Z
-HSPLcom/android/internal/accessibility/AccessibilityShortcutController;->onSettingsChanged()V
-HSPLcom/android/internal/accessibility/AccessibilityShortcutController;->setCurrentUser(I)V
-PLcom/android/internal/alsa/AlsaCardsParser$AlsaCardRecord;-><init>(Lcom/android/internal/alsa/AlsaCardsParser;)V
-PLcom/android/internal/alsa/AlsaCardsParser$AlsaCardRecord;->access$100(Lcom/android/internal/alsa/AlsaCardsParser$AlsaCardRecord;Ljava/lang/String;I)Z
-PLcom/android/internal/alsa/AlsaCardsParser$AlsaCardRecord;->isUsb()Z
-PLcom/android/internal/alsa/AlsaCardsParser$AlsaCardRecord;->parse(Ljava/lang/String;I)Z
-HSPLcom/android/internal/alsa/AlsaCardsParser;-><init>()V
-PLcom/android/internal/alsa/AlsaCardsParser;->access$000()Lcom/android/internal/alsa/LineTokenizer;
-PLcom/android/internal/alsa/AlsaCardsParser;->findCardNumFor(Ljava/lang/String;)Lcom/android/internal/alsa/AlsaCardsParser$AlsaCardRecord;
-PLcom/android/internal/alsa/AlsaCardsParser;->getScanStatus()I
-PLcom/android/internal/alsa/AlsaCardsParser;->scan()I
-PLcom/android/internal/alsa/LineTokenizer;->nextDelimiter(Ljava/lang/String;I)I
-PLcom/android/internal/alsa/LineTokenizer;->nextToken(Ljava/lang/String;I)I
+HSPLcom/android/icu/charset/CharsetDecoderICU;-><init>(Ljava/nio/charset/Charset;FJ)V
+HSPLcom/android/icu/charset/CharsetDecoderICU;->decodeLoop(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
+HSPLcom/android/icu/charset/CharsetDecoderICU;->getArray(Ljava/nio/ByteBuffer;)I
+HSPLcom/android/icu/charset/CharsetDecoderICU;->getArray(Ljava/nio/CharBuffer;)I
+HSPLcom/android/icu/charset/CharsetDecoderICU;->implFlush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
+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/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;
+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;
+HSPLcom/android/icu/charset/CharsetEncoderICU;->implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V
+HSPLcom/android/icu/charset/CharsetEncoderICU;->implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V
+HSPLcom/android/icu/charset/CharsetEncoderICU;->implReset()V
+HSPLcom/android/icu/charset/CharsetEncoderICU;->makeReplacement(Ljava/lang/String;J)[B
+HSPLcom/android/icu/charset/CharsetEncoderICU;->newInstance(Ljava/nio/charset/Charset;Ljava/lang/String;)Lcom/android/icu/charset/CharsetEncoderICU;
+HSPLcom/android/icu/charset/CharsetEncoderICU;->setPosition(Ljava/nio/ByteBuffer;)V
+HSPLcom/android/icu/charset/CharsetEncoderICU;->setPosition(Ljava/nio/CharBuffer;)V
+HSPLcom/android/icu/charset/CharsetEncoderICU;->updateCallback()V
+HSPLcom/android/icu/charset/CharsetICU;-><init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
+HSPLcom/android/icu/charset/CharsetICU;->charsetForName(Ljava/lang/String;)Ljava/nio/charset/Charset;
+HSPLcom/android/icu/charset/CharsetICU;->newDecoder()Ljava/nio/charset/CharsetDecoder;
+HSPLcom/android/icu/charset/CharsetICU;->newEncoder()Ljava/nio/charset/CharsetEncoder;
+HSPLcom/android/icu/charset/NativeConverter;->U_FAILURE(I)Z
+HSPLcom/android/icu/charset/NativeConverter;->registerConverter(Ljava/lang/Object;J)V
+HSPLcom/android/icu/charset/NativeConverter;->setCallbackDecode(JLjava/nio/charset/CharsetDecoder;)V
+HSPLcom/android/icu/charset/NativeConverter;->setCallbackEncode(JLjava/nio/charset/CharsetEncoder;)V
+HSPLcom/android/icu/charset/NativeConverter;->translateCodingErrorAction(Ljava/nio/charset/CodingErrorAction;)I
+HSPLcom/android/icu/util/regex/MatcherNative;-><init>(Lcom/android/icu/util/regex/PatternNative;)V
+HSPLcom/android/icu/util/regex/MatcherNative;->create(Lcom/android/icu/util/regex/PatternNative;)Lcom/android/icu/util/regex/MatcherNative;
+HSPLcom/android/icu/util/regex/MatcherNative;->find(I[I)Z
+HSPLcom/android/icu/util/regex/MatcherNative;->findNext([I)Z
+HSPLcom/android/icu/util/regex/MatcherNative;->groupCount()I
+HSPLcom/android/icu/util/regex/MatcherNative;->hitEnd()Z
+HSPLcom/android/icu/util/regex/MatcherNative;->lookingAt([I)Z
+HSPLcom/android/icu/util/regex/MatcherNative;->matches([I)Z
+HSPLcom/android/icu/util/regex/MatcherNative;->setInput(Ljava/lang/String;II)V
+HSPLcom/android/icu/util/regex/MatcherNative;->useAnchoringBounds(Z)V
+HSPLcom/android/icu/util/regex/MatcherNative;->useTransparentBounds(Z)V
+HSPLcom/android/icu/util/regex/PatternNative;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/icu/util/regex/PatternNative;->create(Ljava/lang/String;I)Lcom/android/icu/util/regex/PatternNative;
+HSPLcom/android/icu/util/regex/PatternNative;->openMatcher()J
 HSPLcom/android/internal/app/AssistUtils;-><init>(Landroid/content/Context;)V
-HSPLcom/android/internal/app/AssistUtils;->allowDisablingAssistDisclosure(Landroid/content/Context;)Z
-HPLcom/android/internal/app/AssistUtils;->getActiveServiceComponentName()Landroid/content/ComponentName;
 HSPLcom/android/internal/app/AssistUtils;->getAssistComponentForUser(I)Landroid/content/ComponentName;
-HPLcom/android/internal/app/AssistUtils;->hideCurrentSession()V
-PLcom/android/internal/app/AssistUtils;->isPreinstalledAssistant(Landroid/content/Context;Landroid/content/ComponentName;)Z
-HPLcom/android/internal/app/AssistUtils;->isSessionRunning()Z
-HPLcom/android/internal/app/AssistUtils;->onLockscreenShown()V
-HPLcom/android/internal/app/AssistUtils;->showSessionForActiveService(Landroid/os/Bundle;ILcom/android/internal/app/IVoiceInteractionSessionShowCallback;Landroid/os/IBinder;)Z
-PLcom/android/internal/app/IAppOpsActiveCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/app/IAppOpsActiveCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/app/IAppOpsActiveCallback$Stub$Proxy;->opActiveChanged(IILjava/lang/String;Z)V
-HSPLcom/android/internal/app/IAppOpsActiveCallback$Stub;-><init>()V
-HSPLcom/android/internal/app/IAppOpsActiveCallback$Stub;->asBinder()Landroid/os/IBinder;
-HPLcom/android/internal/app/IAppOpsActiveCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IAppOpsActiveCallback;
-HPLcom/android/internal/app/IAppOpsActiveCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/app/IAppOpsCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/app/IAppOpsCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLcom/android/internal/app/IAppOpsCallback$Stub$Proxy;->opChanged(IILjava/lang/String;)V
-HSPLcom/android/internal/app/IAppOpsCallback$Stub;-><init>()V
-HSPLcom/android/internal/app/IAppOpsCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/app/IAppOpsCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IAppOpsCallback;
-PLcom/android/internal/app/IAppOpsCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/app/IAppOpsNotedCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/app/IAppOpsNotedCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLcom/android/internal/app/IAppOpsNotedCallback$Stub$Proxy;->opNoted(IILjava/lang/String;I)V
-PLcom/android/internal/app/IAppOpsNotedCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IAppOpsNotedCallback;
-HPLcom/android/internal/app/IAppOpsNotedCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkOperation(IILjava/lang/String;)I
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkOperationRaw(IILjava/lang/String;)I
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkPackage(ILjava/lang/String;)I
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->getOpsForPackage(ILjava/lang/String;[I)Ljava/util/List;
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->getPackagesForOps([I)Ljava/util/List;
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->getToken(Landroid/os/IBinder;)Landroid/os/IBinder;
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->noteAsyncOp(Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->noteOperation(IILjava/lang/String;Ljava/lang/String;)I
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->noteProxyOperation(IILjava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)I
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->setMode(IILjava/lang/String;I)V
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->setUidMode(III)V
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->noteOperation(IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->noteProxyOperation(IILjava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;)I
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->shouldCollectNotes(I)Z
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->startOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;Z)I
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->startWatchingActive([ILcom/android/internal/app/IAppOpsActiveCallback;)V
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->startWatchingModeWithFlags(ILjava/lang/String;ILcom/android/internal/app/IAppOpsCallback;)V
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->stopWatchingMode(Lcom/android/internal/app/IAppOpsCallback;)V
-HSPLcom/android/internal/app/IAppOpsService$Stub;-><init>()V
-HSPLcom/android/internal/app/IAppOpsService$Stub;->asBinder()Landroid/os/IBinder;
 HSPLcom/android/internal/app/IAppOpsService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IAppOpsService;
-PLcom/android/internal/app/IAppOpsService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLcom/android/internal/app/IAppOpsService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/internal/app/IBatteryStats$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->computeChargeTimeRemaining()J
-HPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->getCellularBatteryStats()Landroid/os/connectivity/CellularBatteryStats;
-HPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->getGpsBatteryStats()Landroid/os/connectivity/GpsBatteryStats;
-HPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->getWifiBatteryStats()Landroid/os/connectivity/WifiBatteryStats;
-HSPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->isCharging()Z
-HPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->noteBleScanResults(Landroid/os/WorkSource;I)V
-HSPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->noteBleScanStarted(Landroid/os/WorkSource;Z)V
-HPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->noteBleScanStopped(Landroid/os/WorkSource;Z)V
-HSPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->noteResetBleScan()V
-HPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->takeUidSnapshot(I)Landroid/os/health/HealthStatsParceler;
-HSPLcom/android/internal/app/IBatteryStats$Stub;-><init>()V
-HSPLcom/android/internal/app/IBatteryStats$Stub;->asBinder()Landroid/os/IBinder;
 HSPLcom/android/internal/app/IBatteryStats$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IBatteryStats;
-PLcom/android/internal/app/IBatteryStats$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLcom/android/internal/app/IBatteryStats$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/app/ISoundTriggerService$Stub;-><init>()V
-PLcom/android/internal/app/ISoundTriggerService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->deliverNewSession(Landroid/os/IBinder;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;)Z
-HPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->getActiveServiceComponentName()Landroid/content/ComponentName;
-HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->getDspModuleProperties(Landroid/service/voice/IVoiceInteractionService;)Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
-HPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->hideCurrentSession()V
-HPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->hideSessionFromSession(Landroid/os/IBinder;)Z
-HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->isEnrolledForKeyphrase(Landroid/service/voice/IVoiceInteractionService;ILjava/lang/String;)Z
-HPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->isSessionRunning()Z
-HPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->onLockscreenShown()V
-HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->setUiHints(Landroid/service/voice/IVoiceInteractionService;Landroid/os/Bundle;)V
-HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->showSession(Landroid/service/voice/IVoiceInteractionService;Landroid/os/Bundle;I)V
-HPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->showSessionForActiveService(Landroid/os/Bundle;ILcom/android/internal/app/IVoiceInteractionSessionShowCallback;Landroid/os/IBinder;)Z
-HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->showSessionFromSession(Landroid/os/IBinder;Landroid/os/Bundle;I)Z
-HPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->startRecognition(Landroid/service/voice/IVoiceInteractionService;ILjava/lang/String;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
-HPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->stopRecognition(Landroid/service/voice/IVoiceInteractionService;ILandroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
-HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub;-><init>()V
 HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractionManagerService;
-PLcom/android/internal/app/IVoiceInteractionManagerService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLcom/android/internal/app/IVoiceInteractionManagerService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/app/IVoiceInteractionSessionListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/app/IVoiceInteractionSessionListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLcom/android/internal/app/IVoiceInteractionSessionListener$Stub$Proxy;->onSetUiHints(Landroid/os/Bundle;)V
-PLcom/android/internal/app/IVoiceInteractionSessionListener$Stub$Proxy;->onVoiceSessionHidden()V
-PLcom/android/internal/app/IVoiceInteractionSessionListener$Stub$Proxy;->onVoiceSessionShown()V
-PLcom/android/internal/app/IVoiceInteractionSessionListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractionSessionListener;
-HPLcom/android/internal/app/IVoiceInteractionSessionListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/app/IVoiceInteractionSessionShowCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/app/IVoiceInteractionSessionShowCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLcom/android/internal/app/IVoiceInteractionSessionShowCallback$Stub$Proxy;->onShown()V
-PLcom/android/internal/app/IVoiceInteractionSessionShowCallback$Stub;-><init>()V
-PLcom/android/internal/app/IVoiceInteractionSessionShowCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLcom/android/internal/app/IVoiceInteractionSessionShowCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractionSessionShowCallback;
-PLcom/android/internal/app/IVoiceInteractionSessionShowCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/app/IVoiceInteractor$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLcom/android/internal/app/IVoiceInteractor$Stub;-><init>()V
-HSPLcom/android/internal/app/IVoiceInteractor$Stub;->asBinder()Landroid/os/IBinder;
 HSPLcom/android/internal/app/IVoiceInteractor$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractor;
-PLcom/android/internal/app/IntentForwarderActivity;-><clinit>()V
-HSPLcom/android/internal/app/ProcessMap;-><init>()V
-HSPLcom/android/internal/app/ProcessMap;->get(Ljava/lang/String;I)Ljava/lang/Object;
-HSPLcom/android/internal/app/ProcessMap;->getMap()Landroid/util/ArrayMap;
-HSPLcom/android/internal/app/ProcessMap;->put(Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/internal/app/ProcessMap;->remove(Ljava/lang/String;I)Ljava/lang/Object;
-PLcom/android/internal/app/ProcessMap;->size()I
-PLcom/android/internal/app/ResolverActivity$ActionTitle;->forAction(Ljava/lang/String;)Lcom/android/internal/app/ResolverActivity$ActionTitle;
-PLcom/android/internal/app/ResolverActivity$ActionTitle;->values()[Lcom/android/internal/app/ResolverActivity$ActionTitle;
-PLcom/android/internal/app/ResolverActivity;->getLabelRes(Ljava/lang/String;)I
-HPLcom/android/internal/app/WindowDecorActionBar;-><init>(Landroid/app/Activity;)V
-HPLcom/android/internal/app/WindowDecorActionBar;->access$000(Lcom/android/internal/app/WindowDecorActionBar;)Z
-HPLcom/android/internal/app/WindowDecorActionBar;->access$100(Lcom/android/internal/app/WindowDecorActionBar;)Landroid/view/View;
-HPLcom/android/internal/app/WindowDecorActionBar;->access$200(Lcom/android/internal/app/WindowDecorActionBar;)Lcom/android/internal/widget/ActionBarContainer;
-HPLcom/android/internal/app/WindowDecorActionBar;->access$300(Lcom/android/internal/app/WindowDecorActionBar;)Lcom/android/internal/widget/ActionBarContainer;
-HPLcom/android/internal/app/WindowDecorActionBar;->access$502(Lcom/android/internal/app/WindowDecorActionBar;Landroid/animation/Animator;)Landroid/animation/Animator;
-HPLcom/android/internal/app/WindowDecorActionBar;->access$600(Lcom/android/internal/app/WindowDecorActionBar;)Lcom/android/internal/widget/ActionBarOverlayLayout;
-HPLcom/android/internal/app/WindowDecorActionBar;->checkShowingFlags(ZZZ)Z
-HPLcom/android/internal/app/WindowDecorActionBar;->completeDeferredDestroyActionMode()V
-HPLcom/android/internal/app/WindowDecorActionBar;->doHide(Z)V
-HPLcom/android/internal/app/WindowDecorActionBar;->enableContentAnimations(Z)V
-HPLcom/android/internal/app/WindowDecorActionBar;->getDecorToolbar(Landroid/view/View;)Lcom/android/internal/widget/DecorToolbar;
-HPLcom/android/internal/app/WindowDecorActionBar;->getNavigationMode()I
-HPLcom/android/internal/app/WindowDecorActionBar;->getThemedContext()Landroid/content/Context;
-HPLcom/android/internal/app/WindowDecorActionBar;->hide()V
-HPLcom/android/internal/app/WindowDecorActionBar;->init(Landroid/view/View;)V
-HPLcom/android/internal/app/WindowDecorActionBar;->onWindowVisibilityChanged(I)V
-HPLcom/android/internal/app/WindowDecorActionBar;->setDisplayOptions(II)V
-HPLcom/android/internal/app/WindowDecorActionBar;->setElevation(F)V
-HPLcom/android/internal/app/WindowDecorActionBar;->setHasEmbeddedTabs(Z)V
-HPLcom/android/internal/app/WindowDecorActionBar;->setHomeButtonEnabled(Z)V
-HPLcom/android/internal/app/WindowDecorActionBar;->setShowHideAnimationEnabled(Z)V
-HPLcom/android/internal/app/WindowDecorActionBar;->setWindowTitle(Ljava/lang/CharSequence;)V
-HPLcom/android/internal/app/WindowDecorActionBar;->showForSystem()V
-HPLcom/android/internal/app/WindowDecorActionBar;->updateVisibility(Z)V
-HPLcom/android/internal/app/procstats/-$$Lambda$AssociationState$kgfxYpOOyQWCFPwGaRqRz0N4-zg;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLcom/android/internal/app/procstats/-$$Lambda$ProcessStats$6CxEiT4FvK_P75G9LzEfE1zL88Q;-><clinit>()V
-HSPLcom/android/internal/app/procstats/-$$Lambda$ProcessStats$6CxEiT4FvK_P75G9LzEfE1zL88Q;-><init>()V
-HPLcom/android/internal/app/procstats/-$$Lambda$ProcessStats$6CxEiT4FvK_P75G9LzEfE1zL88Q;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HPLcom/android/internal/app/procstats/AssociationState$SourceDumpContainer;-><init>(Lcom/android/internal/app/procstats/AssociationState;Lcom/android/internal/app/procstats/AssociationState$SourceState;)V
-HSPLcom/android/internal/app/procstats/AssociationState$SourceKey;-><init>(ILjava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/internal/app/procstats/AssociationState$SourceKey;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/internal/app/procstats/AssociationState$SourceKey;->hashCode()I
-HSPLcom/android/internal/app/procstats/AssociationState$SourceState;-><init>(Lcom/android/internal/app/procstats/AssociationState;Lcom/android/internal/app/procstats/AssociationState$SourceKey;)V
-PLcom/android/internal/app/procstats/AssociationState$SourceState;->getAssociationState()Lcom/android/internal/app/procstats/AssociationState;
-PLcom/android/internal/app/procstats/AssociationState$SourceState;->getProcessName()Ljava/lang/String;
-PLcom/android/internal/app/procstats/AssociationState$SourceState;->getUid()I
-PLcom/android/internal/app/procstats/AssociationState$SourceState;->makeDurations()V
-HPLcom/android/internal/app/procstats/AssociationState$SourceState;->startActive(J)V
-PLcom/android/internal/app/procstats/AssociationState$SourceState;->stop()V
-HPLcom/android/internal/app/procstats/AssociationState$SourceState;->stopActive(J)V
-HPLcom/android/internal/app/procstats/AssociationState$SourceState;->stopTracking(J)V
-HPLcom/android/internal/app/procstats/AssociationState$SourceState;->toString()Ljava/lang/String;
-HPLcom/android/internal/app/procstats/AssociationState$SourceState;->trackProcState(IIJ)V
-HSPLcom/android/internal/app/procstats/AssociationState;-><init>(Lcom/android/internal/app/procstats/ProcessStats;Lcom/android/internal/app/procstats/ProcessStats$PackageState;Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/app/procstats/ProcessState;)V
-PLcom/android/internal/app/procstats/AssociationState;->access$000(Lcom/android/internal/app/procstats/AssociationState;)Lcom/android/internal/app/procstats/ProcessStats;
-PLcom/android/internal/app/procstats/AssociationState;->access$100(Lcom/android/internal/app/procstats/AssociationState;)I
-PLcom/android/internal/app/procstats/AssociationState;->access$108(Lcom/android/internal/app/procstats/AssociationState;)I
-PLcom/android/internal/app/procstats/AssociationState;->access$110(Lcom/android/internal/app/procstats/AssociationState;)I
-PLcom/android/internal/app/procstats/AssociationState;->access$208(Lcom/android/internal/app/procstats/AssociationState;)I
-PLcom/android/internal/app/procstats/AssociationState;->access$300(Lcom/android/internal/app/procstats/AssociationState;)J
-PLcom/android/internal/app/procstats/AssociationState;->access$302(Lcom/android/internal/app/procstats/AssociationState;J)J
-PLcom/android/internal/app/procstats/AssociationState;->access$414(Lcom/android/internal/app/procstats/AssociationState;J)J
-PLcom/android/internal/app/procstats/AssociationState;->access$500(Lcom/android/internal/app/procstats/AssociationState;)I
-PLcom/android/internal/app/procstats/AssociationState;->access$510(Lcom/android/internal/app/procstats/AssociationState;)I
-PLcom/android/internal/app/procstats/AssociationState;->access$614(Lcom/android/internal/app/procstats/AssociationState;J)J
-PLcom/android/internal/app/procstats/AssociationState;->access$700(Lcom/android/internal/app/procstats/AssociationState;)J
-HPLcom/android/internal/app/procstats/AssociationState;->add(Lcom/android/internal/app/procstats/AssociationState;)V
-HPLcom/android/internal/app/procstats/AssociationState;->commitStateTime(J)V
-HPLcom/android/internal/app/procstats/AssociationState;->createSortedAssociations(JJ)Ljava/util/ArrayList;
-PLcom/android/internal/app/procstats/AssociationState;->dumpActiveDurationSummary(Ljava/io/PrintWriter;Lcom/android/internal/app/procstats/AssociationState$SourceState;JJZ)V
-HPLcom/android/internal/app/procstats/AssociationState;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JJ)V
-HPLcom/android/internal/app/procstats/AssociationState;->dumpStats(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;JJLjava/lang/String;ZZ)V
-HPLcom/android/internal/app/procstats/AssociationState;->dumpTime(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/internal/app/procstats/AssociationState$SourceState;JJZZ)J
-HPLcom/android/internal/app/procstats/AssociationState;->dumpTimesCheckin(Ljava/io/PrintWriter;Ljava/lang/String;IJLjava/lang/String;J)V
-HPLcom/android/internal/app/procstats/AssociationState;->getActiveDuration(J)J
-HPLcom/android/internal/app/procstats/AssociationState;->getName()Ljava/lang/String;
-PLcom/android/internal/app/procstats/AssociationState;->getPackage()Ljava/lang/String;
-PLcom/android/internal/app/procstats/AssociationState;->getProcess()Lcom/android/internal/app/procstats/ProcessState;
-HPLcom/android/internal/app/procstats/AssociationState;->getProcessName()Ljava/lang/String;
-HPLcom/android/internal/app/procstats/AssociationState;->getTotalDuration(J)J
-PLcom/android/internal/app/procstats/AssociationState;->getUid()I
-PLcom/android/internal/app/procstats/AssociationState;->isInUse()Z
-HPLcom/android/internal/app/procstats/AssociationState;->lambda$static$0(Landroid/util/Pair;Landroid/util/Pair;)I
-HPLcom/android/internal/app/procstats/AssociationState;->readFromParcel(Lcom/android/internal/app/procstats/ProcessStats;Landroid/os/Parcel;I)Ljava/lang/String;
-HPLcom/android/internal/app/procstats/AssociationState;->resetSafely(J)V
-HSPLcom/android/internal/app/procstats/AssociationState;->setProcess(Lcom/android/internal/app/procstats/ProcessState;)V
-HSPLcom/android/internal/app/procstats/AssociationState;->startSource(ILjava/lang/String;Ljava/lang/String;)Lcom/android/internal/app/procstats/AssociationState$SourceState;
-HPLcom/android/internal/app/procstats/AssociationState;->writeToParcel(Lcom/android/internal/app/procstats/ProcessStats;Landroid/os/Parcel;J)V
-HPLcom/android/internal/app/procstats/DumpUtils;->collapseString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/internal/app/procstats/DumpUtils;->dumpAdjTimesCheckin(Ljava/io/PrintWriter;Ljava/lang/String;[JIJJ)V
-HPLcom/android/internal/app/procstats/DumpUtils;->dumpProcessSummaryLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;[I[I[IJJ)V
-PLcom/android/internal/app/procstats/DumpUtils;->dumpSingleTime(Ljava/io/PrintWriter;Ljava/lang/String;[JIJJ)J
-PLcom/android/internal/app/procstats/DumpUtils;->printAdjTag(Ljava/io/PrintWriter;I)V
-HPLcom/android/internal/app/procstats/DumpUtils;->printAdjTagAndValue(Ljava/io/PrintWriter;IJ)V
-PLcom/android/internal/app/procstats/DumpUtils;->printArrayEntry(Ljava/io/PrintWriter;[Ljava/lang/String;II)I
-HPLcom/android/internal/app/procstats/DumpUtils;->printMemLabel(Ljava/io/PrintWriter;IC)V
-HPLcom/android/internal/app/procstats/DumpUtils;->printPercent(Ljava/io/PrintWriter;D)V
-HPLcom/android/internal/app/procstats/DumpUtils;->printProcStateAdjTagProto(Landroid/util/proto/ProtoOutputStream;JJI)V
-PLcom/android/internal/app/procstats/DumpUtils;->printProcStateTag(Ljava/io/PrintWriter;I)V
-PLcom/android/internal/app/procstats/DumpUtils;->printProcStateTagAndValue(Ljava/io/PrintWriter;IJ)V
-HPLcom/android/internal/app/procstats/DumpUtils;->printProcStateTagProto(Landroid/util/proto/ProtoOutputStream;JJJI)V
-HPLcom/android/internal/app/procstats/DumpUtils;->printProto(Landroid/util/proto/ProtoOutputStream;J[III)I
-HPLcom/android/internal/app/procstats/DumpUtils;->printScreenLabel(Ljava/io/PrintWriter;I)V
-HSPLcom/android/internal/app/procstats/DurationsTable;-><init>(Lcom/android/internal/app/procstats/SparseMappingTable;)V
-HSPLcom/android/internal/app/procstats/DurationsTable;->addDuration(IJ)V
-HSPLcom/android/internal/app/procstats/DurationsTable;->addDurations(Lcom/android/internal/app/procstats/DurationsTable;)V
-HSPLcom/android/internal/app/procstats/IProcessStats$Stub;-><init>()V
-HSPLcom/android/internal/app/procstats/IProcessStats$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/procstats/IProcessStats;
-PLcom/android/internal/app/procstats/IProcessStats$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLcom/android/internal/app/procstats/IProcessStats$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/app/procstats/ProcessState$1;->compare(Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessState;)I
-HPLcom/android/internal/app/procstats/ProcessState$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HPLcom/android/internal/app/procstats/ProcessState$PssAggr;-><init>()V
-HPLcom/android/internal/app/procstats/ProcessState$PssAggr;->add(JJ)V
-HSPLcom/android/internal/app/procstats/ProcessState;-><init>(Lcom/android/internal/app/procstats/ProcessState;Ljava/lang/String;IJLjava/lang/String;J)V
-HSPLcom/android/internal/app/procstats/ProcessState;-><init>(Lcom/android/internal/app/procstats/ProcessStats;Ljava/lang/String;IJLjava/lang/String;)V
-PLcom/android/internal/app/procstats/ProcessState;->access$000(Lcom/android/internal/app/procstats/ProcessState;)J
-HPLcom/android/internal/app/procstats/ProcessState;->add(Lcom/android/internal/app/procstats/ProcessState;)V
-HPLcom/android/internal/app/procstats/ProcessState;->addPss(JJJZIJLandroid/util/ArrayMap;)V
-HPLcom/android/internal/app/procstats/ProcessState;->aggregatePss(Lcom/android/internal/app/procstats/ProcessStats$TotalMemoryUseCollection;J)V
-HSPLcom/android/internal/app/procstats/ProcessState;->clone(J)Lcom/android/internal/app/procstats/ProcessState;
-HSPLcom/android/internal/app/procstats/ProcessState;->commitStateTime(J)V
-HPLcom/android/internal/app/procstats/ProcessState;->computeProcessData(Lcom/android/internal/app/procstats/ProcessStats$ProcessDataCollection;J)V
-HPLcom/android/internal/app/procstats/ProcessState;->computeProcessTimeLocked([I[I[IJ)J
-HPLcom/android/internal/app/procstats/ProcessState;->decActiveServices(Ljava/lang/String;)V
-HPLcom/android/internal/app/procstats/ProcessState;->decStartedServices(IJLjava/lang/String;)V
-HPLcom/android/internal/app/procstats/ProcessState;->dumpAllPssCheckin(Ljava/io/PrintWriter;)V
-HPLcom/android/internal/app/procstats/ProcessState;->dumpAllStateCheckin(Ljava/io/PrintWriter;J)V
-HPLcom/android/internal/app/procstats/ProcessState;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JLjava/lang/String;IJ)V
-HPLcom/android/internal/app/procstats/ProcessState;->dumpInternalLocked(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/internal/app/procstats/ProcessState;->dumpPackageProcCheckin(Ljava/io/PrintWriter;Ljava/lang/String;IJLjava/lang/String;J)V
-PLcom/android/internal/app/procstats/ProcessState;->dumpProcCheckin(Ljava/io/PrintWriter;Ljava/lang/String;IJ)V
-HPLcom/android/internal/app/procstats/ProcessState;->dumpProcessState(Ljava/io/PrintWriter;Ljava/lang/String;[I[I[IJ)V
-HPLcom/android/internal/app/procstats/ProcessState;->dumpProcessSummaryDetails(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;[I[I[IJJZ)V
-HPLcom/android/internal/app/procstats/ProcessState;->dumpPss(Ljava/io/PrintWriter;Ljava/lang/String;[I[I[IJ)V
-HPLcom/android/internal/app/procstats/ProcessState;->dumpPssSamples(Ljava/io/PrintWriter;[JI)V
-HPLcom/android/internal/app/procstats/ProcessState;->dumpPssSamplesCheckin(Ljava/io/PrintWriter;[JI)V
-HPLcom/android/internal/app/procstats/ProcessState;->dumpSummary(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;[I[I[IJJ)V
-HSPLcom/android/internal/app/procstats/ProcessState;->ensureNotDead()V
-PLcom/android/internal/app/procstats/ProcessState;->getCombinedState()I
-HPLcom/android/internal/app/procstats/ProcessState;->getCommonProcess()Lcom/android/internal/app/procstats/ProcessState;
-HPLcom/android/internal/app/procstats/ProcessState;->getDuration(IJ)J
-HPLcom/android/internal/app/procstats/ProcessState;->getDurationsBucketCount()I
-HSPLcom/android/internal/app/procstats/ProcessState;->getName()Ljava/lang/String;
-HSPLcom/android/internal/app/procstats/ProcessState;->getPackage()Ljava/lang/String;
-HPLcom/android/internal/app/procstats/ProcessState;->getPssAverage(I)J
-HPLcom/android/internal/app/procstats/ProcessState;->getPssMaximum(I)J
-HPLcom/android/internal/app/procstats/ProcessState;->getPssMinimum(I)J
-HPLcom/android/internal/app/procstats/ProcessState;->getPssRssAverage(I)J
-HPLcom/android/internal/app/procstats/ProcessState;->getPssRssMaximum(I)J
-HPLcom/android/internal/app/procstats/ProcessState;->getPssRssMinimum(I)J
-HPLcom/android/internal/app/procstats/ProcessState;->getPssSampleCount(I)J
-HPLcom/android/internal/app/procstats/ProcessState;->getPssUssAverage(I)J
-HPLcom/android/internal/app/procstats/ProcessState;->getPssUssMaximum(I)J
-HPLcom/android/internal/app/procstats/ProcessState;->getPssUssMinimum(I)J
-HSPLcom/android/internal/app/procstats/ProcessState;->getTotalRunningDuration(J)J
-HSPLcom/android/internal/app/procstats/ProcessState;->getVersion()J
-HPLcom/android/internal/app/procstats/ProcessState;->hasAnyData()Z
-HSPLcom/android/internal/app/procstats/ProcessState;->incActiveServices(Ljava/lang/String;)V
-PLcom/android/internal/app/procstats/ProcessState;->incStartedServices(IJLjava/lang/String;)V
-PLcom/android/internal/app/procstats/ProcessState;->isActive()Z
-PLcom/android/internal/app/procstats/ProcessState;->isInUse()Z
-HSPLcom/android/internal/app/procstats/ProcessState;->isMultiPackage()Z
-HSPLcom/android/internal/app/procstats/ProcessState;->makeActive()V
-PLcom/android/internal/app/procstats/ProcessState;->makeDead()V
-HSPLcom/android/internal/app/procstats/ProcessState;->makeInactive()V
-HPLcom/android/internal/app/procstats/ProcessState;->pullFixedProc(Landroid/util/ArrayMap;I)Lcom/android/internal/app/procstats/ProcessState;
-HPLcom/android/internal/app/procstats/ProcessState;->pullFixedProc(Ljava/lang/String;)Lcom/android/internal/app/procstats/ProcessState;
-HPLcom/android/internal/app/procstats/ProcessState;->readFromParcel(Landroid/os/Parcel;Z)Z
-PLcom/android/internal/app/procstats/ProcessState;->reportExcessiveCpu(Landroid/util/ArrayMap;)V
-PLcom/android/internal/app/procstats/ProcessState;->resetSafely(J)V
-HSPLcom/android/internal/app/procstats/ProcessState;->setCombinedState(IJ)V
-HSPLcom/android/internal/app/procstats/ProcessState;->setMultiPackage(Z)V
-HSPLcom/android/internal/app/procstats/ProcessState;->setState(IIJLandroid/util/ArrayMap;)V
-HPLcom/android/internal/app/procstats/ProcessState;->toString()Ljava/lang/String;
-HPLcom/android/internal/app/procstats/ProcessState;->writeToParcel(Landroid/os/Parcel;J)V
-HSPLcom/android/internal/app/procstats/ProcessStats$1;-><init>()V
-PLcom/android/internal/app/procstats/ProcessStats$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/app/procstats/ProcessStats;
-PLcom/android/internal/app/procstats/ProcessStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HPLcom/android/internal/app/procstats/ProcessStats$AssociationDumpContainer;-><init>(Lcom/android/internal/app/procstats/ProcessStats;Lcom/android/internal/app/procstats/AssociationState;)V
-HSPLcom/android/internal/app/procstats/ProcessStats$PackageState;-><init>(Lcom/android/internal/app/procstats/ProcessStats;Ljava/lang/String;IJ)V
-HPLcom/android/internal/app/procstats/ProcessStats$PackageState;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JJI)V
-HSPLcom/android/internal/app/procstats/ProcessStats$PackageState;->getAssociationStateLocked(Lcom/android/internal/app/procstats/ProcessState;Ljava/lang/String;)Lcom/android/internal/app/procstats/AssociationState;
-HPLcom/android/internal/app/procstats/ProcessStats$ProcessDataCollection;-><init>([I[I[I)V
-HPLcom/android/internal/app/procstats/ProcessStats$ProcessDataCollection;->print(Ljava/io/PrintWriter;JZ)V
-HSPLcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;-><init>(J)V
-PLcom/android/internal/app/procstats/ProcessStats$TotalMemoryUseCollection;-><init>([I[I)V
-HSPLcom/android/internal/app/procstats/ProcessStats;-><clinit>()V
-PLcom/android/internal/app/procstats/ProcessStats;-><init>(Landroid/os/Parcel;)V
-HSPLcom/android/internal/app/procstats/ProcessStats;-><init>(Z)V
-HPLcom/android/internal/app/procstats/ProcessStats;->add(Lcom/android/internal/app/procstats/ProcessStats;)V
-PLcom/android/internal/app/procstats/ProcessStats;->addSysMemUsage(JJJJJ)V
-HSPLcom/android/internal/app/procstats/ProcessStats;->buildTimePeriodStartClockStr()V
-HPLcom/android/internal/app/procstats/ProcessStats;->collectProcessesLocked([I[I[I[IJLjava/lang/String;Z)Ljava/util/ArrayList;
-HPLcom/android/internal/app/procstats/ProcessStats;->computeTotalMemoryUse(Lcom/android/internal/app/procstats/ProcessStats$TotalMemoryUseCollection;J)V
-HPLcom/android/internal/app/procstats/ProcessStats;->dumpCheckinLocked(Ljava/io/PrintWriter;Ljava/lang/String;I)V
-HPLcom/android/internal/app/procstats/ProcessStats;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
-PLcom/android/internal/app/procstats/ProcessStats;->dumpFilteredSummaryLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[I[I[I[IJJLjava/lang/String;Z)V
-HPLcom/android/internal/app/procstats/ProcessStats;->dumpFragmentationLocked(Ljava/io/PrintWriter;)V
-HPLcom/android/internal/app/procstats/ProcessStats;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;JZZZZI)V
-PLcom/android/internal/app/procstats/ProcessStats;->dumpSummaryLocked(Ljava/io/PrintWriter;Ljava/lang/String;JZ)V
-PLcom/android/internal/app/procstats/ProcessStats;->dumpTotalsLocked(Ljava/io/PrintWriter;J)V
-HSPLcom/android/internal/app/procstats/ProcessStats;->evaluateSystemProperties(Z)Z
-HPLcom/android/internal/app/procstats/ProcessStats;->getAssociationStateLocked(Ljava/lang/String;IJLjava/lang/String;Ljava/lang/String;)Lcom/android/internal/app/procstats/AssociationState;
-HSPLcom/android/internal/app/procstats/ProcessStats;->getPackageStateLocked(Ljava/lang/String;IJ)Lcom/android/internal/app/procstats/ProcessStats$PackageState;
-HSPLcom/android/internal/app/procstats/ProcessStats;->getProcessStateLocked(Lcom/android/internal/app/procstats/ProcessStats$PackageState;Ljava/lang/String;)Lcom/android/internal/app/procstats/ProcessState;
-HSPLcom/android/internal/app/procstats/ProcessStats;->getProcessStateLocked(Ljava/lang/String;IJLjava/lang/String;)Lcom/android/internal/app/procstats/ProcessState;
-HSPLcom/android/internal/app/procstats/ProcessStats;->getServiceStateLocked(Ljava/lang/String;IJLjava/lang/String;Ljava/lang/String;)Lcom/android/internal/app/procstats/ServiceState;
-HPLcom/android/internal/app/procstats/ProcessStats;->lambda$static$0(Lcom/android/internal/app/procstats/ProcessStats$AssociationDumpContainer;Lcom/android/internal/app/procstats/ProcessStats$AssociationDumpContainer;)I
-HPLcom/android/internal/app/procstats/ProcessStats;->printMemoryCategory(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;DJJI)J
-PLcom/android/internal/app/procstats/ProcessStats;->read(Ljava/io/InputStream;)V
-PLcom/android/internal/app/procstats/ProcessStats;->readCheckedInt(Landroid/os/Parcel;ILjava/lang/String;)Z
-HPLcom/android/internal/app/procstats/ProcessStats;->readCommonString(Landroid/os/Parcel;I)Ljava/lang/String;
-PLcom/android/internal/app/procstats/ProcessStats;->readCompactedLongArray(Landroid/os/Parcel;I[JI)V
-HPLcom/android/internal/app/procstats/ProcessStats;->readFromParcel(Landroid/os/Parcel;)V
-PLcom/android/internal/app/procstats/ProcessStats;->readFully(Ljava/io/InputStream;[I)[B
-HSPLcom/android/internal/app/procstats/ProcessStats;->reset()V
-HSPLcom/android/internal/app/procstats/ProcessStats;->resetCommon()V
-HPLcom/android/internal/app/procstats/ProcessStats;->resetSafely()V
-HSPLcom/android/internal/app/procstats/ProcessStats;->splitAndParseNumbers(Ljava/lang/String;)[I
-HSPLcom/android/internal/app/procstats/ProcessStats;->updateFragmentation()V
-HSPLcom/android/internal/app/procstats/ProcessStats;->updateTrackingAssociationsLocked(IJ)V
-HPLcom/android/internal/app/procstats/ProcessStats;->writeCommonString(Landroid/os/Parcel;Ljava/lang/String;)V
-PLcom/android/internal/app/procstats/ProcessStats;->writeCompactedLongArray(Landroid/os/Parcel;[JI)V
-HPLcom/android/internal/app/procstats/ProcessStats;->writeToParcel(Landroid/os/Parcel;JI)V
-HSPLcom/android/internal/app/procstats/PssTable;-><init>(Lcom/android/internal/app/procstats/SparseMappingTable;)V
-HPLcom/android/internal/app/procstats/PssTable;->mergeStats(IIJJJJJJJJJ)V
-HPLcom/android/internal/app/procstats/PssTable;->mergeStats(Lcom/android/internal/app/procstats/PssTable;)V
-HPLcom/android/internal/app/procstats/PssTable;->mergeStats([JIIJJJJJJJJJ)V
-HPLcom/android/internal/app/procstats/PssTable;->mergeStats([JI[JI)V
-HPLcom/android/internal/app/procstats/PssTable;->writeStatsToProto(Landroid/util/proto/ProtoOutputStream;[JI)V
-HPLcom/android/internal/app/procstats/PssTable;->writeStatsToProtoForKey(Landroid/util/proto/ProtoOutputStream;I)V
-HSPLcom/android/internal/app/procstats/ServiceState;-><init>(Lcom/android/internal/app/procstats/ProcessStats;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/app/procstats/ProcessState;)V
-HPLcom/android/internal/app/procstats/ServiceState;->add(Lcom/android/internal/app/procstats/ServiceState;)V
-HSPLcom/android/internal/app/procstats/ServiceState;->applyNewOwner(Ljava/lang/Object;)V
-HPLcom/android/internal/app/procstats/ServiceState;->clearCurrentOwner(Ljava/lang/Object;Z)V
-HPLcom/android/internal/app/procstats/ServiceState;->commitStateTime(J)V
-HPLcom/android/internal/app/procstats/ServiceState;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JJ)V
-HPLcom/android/internal/app/procstats/ServiceState;->dumpStats(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JJZZ)V
-HPLcom/android/internal/app/procstats/ServiceState;->dumpStats(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIJJJZ)V
-HPLcom/android/internal/app/procstats/ServiceState;->dumpTime(Ljava/io/PrintWriter;Ljava/lang/String;IIJJ)J
-HPLcom/android/internal/app/procstats/ServiceState;->dumpTimeCheckin(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;IJLjava/lang/String;IIIJJ)V
-HPLcom/android/internal/app/procstats/ServiceState;->dumpTimeInternal(Ljava/io/PrintWriter;Ljava/lang/String;IIJJZ)J
-HPLcom/android/internal/app/procstats/ServiceState;->dumpTimesCheckin(Ljava/io/PrintWriter;Ljava/lang/String;IJLjava/lang/String;J)V
-HPLcom/android/internal/app/procstats/ServiceState;->getDuration(IIJIJ)J
-PLcom/android/internal/app/procstats/ServiceState;->getName()Ljava/lang/String;
-HPLcom/android/internal/app/procstats/ServiceState;->getProcessName()Ljava/lang/String;
-PLcom/android/internal/app/procstats/ServiceState;->isInUse()Z
-PLcom/android/internal/app/procstats/ServiceState;->isRestarting()Z
-HPLcom/android/internal/app/procstats/ServiceState;->readFromParcel(Landroid/os/Parcel;)Z
-PLcom/android/internal/app/procstats/ServiceState;->resetSafely(J)V
-HSPLcom/android/internal/app/procstats/ServiceState;->setBound(ZIJ)V
-HSPLcom/android/internal/app/procstats/ServiceState;->setExecuting(ZIJ)V
-HPLcom/android/internal/app/procstats/ServiceState;->setForeground(ZIJ)V
-HPLcom/android/internal/app/procstats/ServiceState;->setMemFactor(IJ)V
-HPLcom/android/internal/app/procstats/ServiceState;->setStarted(ZIJ)V
-HPLcom/android/internal/app/procstats/ServiceState;->toString()Ljava/lang/String;
-HSPLcom/android/internal/app/procstats/ServiceState;->updateRunning(IJ)V
-HPLcom/android/internal/app/procstats/ServiceState;->updateStartedState(IJ)V
-HPLcom/android/internal/app/procstats/ServiceState;->writeToParcel(Landroid/os/Parcel;J)V
-HPLcom/android/internal/app/procstats/ServiceState;->writeTypeToProto(Landroid/util/proto/ProtoOutputStream;JIIIIJJ)V
-HSPLcom/android/internal/app/procstats/SparseMappingTable$Table;-><init>(Lcom/android/internal/app/procstats/SparseMappingTable;)V
-HSPLcom/android/internal/app/procstats/SparseMappingTable$Table;->assertConsistency()V
-HSPLcom/android/internal/app/procstats/SparseMappingTable$Table;->binarySearch(B)I
-HSPLcom/android/internal/app/procstats/SparseMappingTable$Table;->copyFrom(Lcom/android/internal/app/procstats/SparseMappingTable$Table;I)V
-PLcom/android/internal/app/procstats/SparseMappingTable$Table;->dumpInternalState()Ljava/lang/String;
-HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getArrayForKey(I)[J
-HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getKey(B)I
-HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getKeyAt(I)I
-HSPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getKeyCount()I
-HSPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getOrAddKey(BI)I
-HSPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getValue(I)J
-HSPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getValue(II)J
-HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getValueForId(B)J
-HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getValueForId(BI)J
-HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->readFromParcel(Landroid/os/Parcel;)Z
-HSPLcom/android/internal/app/procstats/SparseMappingTable$Table;->resetTable()V
-HSPLcom/android/internal/app/procstats/SparseMappingTable$Table;->setValue(IIJ)V
-HSPLcom/android/internal/app/procstats/SparseMappingTable$Table;->setValue(IJ)V
-HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->validateKeys(Z)Z
-HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->writeToParcel(Landroid/os/Parcel;)V
-HSPLcom/android/internal/app/procstats/SparseMappingTable;-><init>()V
-HSPLcom/android/internal/app/procstats/SparseMappingTable;->access$000(Lcom/android/internal/app/procstats/SparseMappingTable;)I
-HSPLcom/android/internal/app/procstats/SparseMappingTable;->access$100(Lcom/android/internal/app/procstats/SparseMappingTable;)Ljava/util/ArrayList;
-HSPLcom/android/internal/app/procstats/SparseMappingTable;->access$200(Lcom/android/internal/app/procstats/SparseMappingTable;)I
-HSPLcom/android/internal/app/procstats/SparseMappingTable;->access$212(Lcom/android/internal/app/procstats/SparseMappingTable;I)I
-HSPLcom/android/internal/app/procstats/SparseMappingTable;->getArrayFromKey(I)I
-PLcom/android/internal/app/procstats/SparseMappingTable;->getIdFromKey(I)B
-HSPLcom/android/internal/app/procstats/SparseMappingTable;->getIndexFromKey(I)I
-HPLcom/android/internal/app/procstats/SparseMappingTable;->readCompactedLongArray(Landroid/os/Parcel;[JI)V
-PLcom/android/internal/app/procstats/SparseMappingTable;->readFromParcel(Landroid/os/Parcel;)V
-HSPLcom/android/internal/app/procstats/SparseMappingTable;->reset()V
-HPLcom/android/internal/app/procstats/SparseMappingTable;->writeCompactedLongArray(Landroid/os/Parcel;[JI)V
-PLcom/android/internal/app/procstats/SparseMappingTable;->writeToParcel(Landroid/os/Parcel;)V
-HSPLcom/android/internal/app/procstats/SysMemUsageTable;-><init>(Lcom/android/internal/app/procstats/SparseMappingTable;)V
-PLcom/android/internal/app/procstats/SysMemUsageTable;->dump(Ljava/io/PrintWriter;Ljava/lang/String;[I[I)V
-PLcom/android/internal/app/procstats/SysMemUsageTable;->dumpCategory(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;II)V
-PLcom/android/internal/app/procstats/SysMemUsageTable;->getTotalMemUsage()[J
-PLcom/android/internal/app/procstats/SysMemUsageTable;->mergeStats(I[JI)V
-PLcom/android/internal/app/procstats/SysMemUsageTable;->mergeStats(Lcom/android/internal/app/procstats/SysMemUsageTable;)V
-PLcom/android/internal/app/procstats/SysMemUsageTable;->mergeSysMemUsage([JI[JI)V
-PLcom/android/internal/appwidget/IAppWidgetHost$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/appwidget/IAppWidgetHost$Stub$Proxy;->providersChanged()V
-HSPLcom/android/internal/appwidget/IAppWidgetHost$Stub;-><init>()V
-HSPLcom/android/internal/appwidget/IAppWidgetHost$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/appwidget/IAppWidgetHost$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/appwidget/IAppWidgetHost;
-HSPLcom/android/internal/appwidget/IAppWidgetService$Stub$Proxy;->getAppWidgetIds(Landroid/content/ComponentName;)[I
-HSPLcom/android/internal/appwidget/IAppWidgetService$Stub$Proxy;->getInstalledProvidersForProfile(IILjava/lang/String;)Landroid/content/pm/ParceledListSlice;
-HSPLcom/android/internal/appwidget/IAppWidgetService$Stub$Proxy;->startListening(Lcom/android/internal/appwidget/IAppWidgetHost;Ljava/lang/String;I[I)Landroid/content/pm/ParceledListSlice;
-HSPLcom/android/internal/appwidget/IAppWidgetService$Stub$Proxy;->stopListening(Ljava/lang/String;I)V
-HSPLcom/android/internal/appwidget/IAppWidgetService$Stub$Proxy;->updateAppWidgetProvider(Landroid/content/ComponentName;Landroid/widget/RemoteViews;)V
-HSPLcom/android/internal/appwidget/IAppWidgetService$Stub;-><init>()V
+HSPLcom/android/internal/appwidget/IAppWidgetService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/android/internal/appwidget/IAppWidgetService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/appwidget/IAppWidgetService;
-PLcom/android/internal/appwidget/IAppWidgetService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLcom/android/internal/appwidget/IAppWidgetService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->cancelFullBackup()V
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->checkFullBackupSize(J)I
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->configurationIntent()Landroid/content/Intent;
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->currentDestinationString()Ljava/lang/String;
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->dataManagementIntent()Landroid/content/Intent;
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->dataManagementIntentLabel()Ljava/lang/CharSequence;
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->finishBackup()I
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->finishRestore()V
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->getBackupQuota(Ljava/lang/String;Z)J
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->getCurrentRestoreSet()J
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->getRestoreData(Landroid/os/ParcelFileDescriptor;)I
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->getTransportFlags()I
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->initializeDevice()I
-HPLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->isAppEligibleForBackup(Landroid/content/pm/PackageInfo;Z)Z
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->name()Ljava/lang/String;
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->nextRestorePackage()Landroid/app/backup/RestoreDescription;
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->performBackup(Landroid/content/pm/PackageInfo;Landroid/os/ParcelFileDescriptor;I)I
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->performFullBackup(Landroid/content/pm/PackageInfo;Landroid/os/ParcelFileDescriptor;I)I
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->requestBackupTime()J
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->requestFullBackupTime()J
-HPLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->sendBackupData(I)I
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->startRestore(J[Landroid/content/pm/PackageInfo;)I
-PLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->transportDirName()Ljava/lang/String;
-PLcom/android/internal/backup/IBackupTransport$Stub;-><init>()V
-HSPLcom/android/internal/backup/IBackupTransport$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/backup/IBackupTransport$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/backup/IBackupTransport;
-HPLcom/android/internal/backup/IBackupTransport$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;-><init>()V
-HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->getMainColor()I
-HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->setColorPalette([I)V
-HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->setMainColor(I)V
-HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->setSecondaryColor(I)V
-HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->setSupportsDarkText(Z)V
-HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->supportsDarkText()Z
-HSPLcom/android/internal/colorextraction/types/Tonal$ConfigParser;-><init>(Landroid/content/Context;)V
-HSPLcom/android/internal/colorextraction/types/Tonal$ConfigParser;->getTonalPalettes()Ljava/util/ArrayList;
-HSPLcom/android/internal/colorextraction/types/Tonal$ConfigParser;->parsePalettes(Lorg/xmlpull/v1/XmlPullParser;)V
-HSPLcom/android/internal/colorextraction/types/Tonal$ConfigParser;->readFloatArray(Ljava/lang/String;)[F
-HSPLcom/android/internal/colorextraction/types/Tonal$ConfigParser;->readPalette(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/internal/colorextraction/types/Tonal$TonalPalette;
-HSPLcom/android/internal/colorextraction/types/Tonal$TonalPalette;-><init>([F[F[F)V
-HSPLcom/android/internal/colorextraction/types/Tonal;-><init>(Landroid/content/Context;)V
-HSPLcom/android/internal/colorextraction/types/Tonal;->applyFallback(Landroid/app/WallpaperColors;Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;)V
-HSPLcom/android/internal/colorextraction/types/Tonal;->applyFallback(Landroid/app/WallpaperColors;Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;)V
-HSPLcom/android/internal/colorextraction/types/Tonal;->bestFit(Lcom/android/internal/colorextraction/types/Tonal$TonalPalette;FFF)I
-HSPLcom/android/internal/colorextraction/types/Tonal;->extractInto(Landroid/app/WallpaperColors;Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;)V
-HSPLcom/android/internal/colorextraction/types/Tonal;->findTonalPalette(FF)Lcom/android/internal/colorextraction/types/Tonal$TonalPalette;
-HSPLcom/android/internal/colorextraction/types/Tonal;->fit([FFIFF)[F
-HSPLcom/android/internal/colorextraction/types/Tonal;->fract(F)F
-HSPLcom/android/internal/colorextraction/types/Tonal;->getColorInt(I[F[F[F)I
-HSPLcom/android/internal/colorextraction/types/Tonal;->getColorPalette(Lcom/android/internal/colorextraction/types/Tonal$TonalPalette;)[I
-HSPLcom/android/internal/colorextraction/types/Tonal;->getColorPalette([F[F[F)[I
-HSPLcom/android/internal/colorextraction/types/Tonal;->runTonalExtraction(Landroid/app/WallpaperColors;Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;)Z
 HSPLcom/android/internal/compat/ChangeReporter$ChangeReport;-><init>(JI)V
 HSPLcom/android/internal/compat/ChangeReporter$ChangeReport;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/internal/compat/ChangeReporter$ChangeReport;->hashCode()I
@@ -29979,102 +14616,9 @@
 HSPLcom/android/internal/compat/ChangeReporter;->isAlreadyReported(ILcom/android/internal/compat/ChangeReporter$ChangeReport;)Z
 HSPLcom/android/internal/compat/ChangeReporter;->markAsReported(ILcom/android/internal/compat/ChangeReporter$ChangeReport;)V
 HSPLcom/android/internal/compat/ChangeReporter;->reportChange(IJI)V
-HSPLcom/android/internal/compat/ChangeReporter;->resetReportedChanges(I)V
 HSPLcom/android/internal/compat/ChangeReporter;->shouldWriteToDebug(IJI)Z
 HSPLcom/android/internal/compat/ChangeReporter;->shouldWriteToStatsLog(IJI)Z
 HSPLcom/android/internal/compat/ChangeReporter;->stateToString(I)Ljava/lang/String;
-HSPLcom/android/internal/compat/CompatibilityChangeInfo$1;-><init>()V
-HSPLcom/android/internal/compat/CompatibilityChangeInfo;-><clinit>()V
-HSPLcom/android/internal/compat/CompatibilityChangeInfo;-><init>(Ljava/lang/Long;Ljava/lang/String;IZLjava/lang/String;)V
-HSPLcom/android/internal/compat/CompatibilityChangeInfo;->getDisabled()Z
-HSPLcom/android/internal/compat/CompatibilityChangeInfo;->getEnableAfterTargetSdk()I
-HSPLcom/android/internal/compat/CompatibilityChangeInfo;->getId()J
-PLcom/android/internal/compat/CompatibilityChangeInfo;->getName()Ljava/lang/String;
-HSPLcom/android/internal/compat/IPlatformCompat$Stub;-><init>()V
-HSPLcom/android/internal/compat/IPlatformCompat$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/compat/IPlatformCompat;
-PLcom/android/internal/compat/IPlatformCompat$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLcom/android/internal/compat/IPlatformCompat$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/compat/IPlatformCompatNative$Stub;-><init>()V
-PLcom/android/internal/compat/IPlatformCompatNative$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/content/NativeLibraryHelper$Handle;-><init>([JZZZ)V
-HSPLcom/android/internal/content/NativeLibraryHelper$Handle;->close()V
-PLcom/android/internal/content/NativeLibraryHelper$Handle;->create(Landroid/content/pm/PackageParser$PackageLite;)Lcom/android/internal/content/NativeLibraryHelper$Handle;
-HSPLcom/android/internal/content/NativeLibraryHelper$Handle;->create(Landroid/content/pm/parsing/AndroidPackage;)Lcom/android/internal/content/NativeLibraryHelper$Handle;
-PLcom/android/internal/content/NativeLibraryHelper$Handle;->create(Ljava/io/File;)Lcom/android/internal/content/NativeLibraryHelper$Handle;
-HSPLcom/android/internal/content/NativeLibraryHelper$Handle;->create(Ljava/util/List;ZZZ)Lcom/android/internal/content/NativeLibraryHelper$Handle;
-HSPLcom/android/internal/content/NativeLibraryHelper$Handle;->finalize()V
-HSPLcom/android/internal/content/NativeLibraryHelper;->access$000(Ljava/lang/String;)J
-HSPLcom/android/internal/content/NativeLibraryHelper;->access$100(J)V
-PLcom/android/internal/content/NativeLibraryHelper;->copyNativeBinaries(Lcom/android/internal/content/NativeLibraryHelper$Handle;Ljava/io/File;Ljava/lang/String;)I
-PLcom/android/internal/content/NativeLibraryHelper;->copyNativeBinariesForSupportedAbi(Lcom/android/internal/content/NativeLibraryHelper$Handle;Ljava/io/File;[Ljava/lang/String;Z)I
-PLcom/android/internal/content/NativeLibraryHelper;->copyNativeBinariesWithOverride(Lcom/android/internal/content/NativeLibraryHelper$Handle;Ljava/io/File;Ljava/lang/String;)I
-PLcom/android/internal/content/NativeLibraryHelper;->createNativeLibrarySubdir(Ljava/io/File;)V
-HSPLcom/android/internal/content/NativeLibraryHelper;->findSupportedAbi(Lcom/android/internal/content/NativeLibraryHelper$Handle;[Ljava/lang/String;)I
-HSPLcom/android/internal/content/NativeLibraryHelper;->hasRenderscriptBitcode(Lcom/android/internal/content/NativeLibraryHelper$Handle;)Z
-PLcom/android/internal/content/NativeLibraryHelper;->removeNativeBinariesFromDirLI(Ljava/io/File;Z)V
-PLcom/android/internal/content/NativeLibraryHelper;->sumNativeBinaries(Lcom/android/internal/content/NativeLibraryHelper$Handle;Ljava/lang/String;)J
-PLcom/android/internal/content/NativeLibraryHelper;->sumNativeBinariesForSupportedAbi(Lcom/android/internal/content/NativeLibraryHelper$Handle;[Ljava/lang/String;)J
-PLcom/android/internal/content/NativeLibraryHelper;->sumNativeBinariesWithOverride(Lcom/android/internal/content/NativeLibraryHelper$Handle;Ljava/lang/String;)J
-PLcom/android/internal/content/PackageHelper$1;-><init>()V
-PLcom/android/internal/content/PackageHelper$1;->getAllow3rdPartyOnInternalConfig(Landroid/content/Context;)Z
-PLcom/android/internal/content/PackageHelper$1;->getExistingAppInfo(Landroid/content/Context;Ljava/lang/String;)Landroid/content/pm/ApplicationInfo;
-PLcom/android/internal/content/PackageHelper$1;->getForceAllowOnExternalSetting(Landroid/content/Context;)Z
-PLcom/android/internal/content/PackageHelper$1;->getStorageManager(Landroid/content/Context;)Landroid/os/storage/StorageManager;
-PLcom/android/internal/content/PackageHelper$TestableInterface;-><init>()V
-PLcom/android/internal/content/PackageHelper;->calculateInstalledSize(Landroid/content/pm/PackageParser$PackageLite;Lcom/android/internal/content/NativeLibraryHelper$Handle;Ljava/lang/String;)J
-PLcom/android/internal/content/PackageHelper;->calculateInstalledSize(Landroid/content/pm/PackageParser$PackageLite;Ljava/lang/String;Ljava/io/FileDescriptor;)J
-PLcom/android/internal/content/PackageHelper;->checkFitOnVolume(Landroid/os/storage/StorageManager;Ljava/lang/String;Landroid/content/pm/PackageInstaller$SessionParams;)Z
-PLcom/android/internal/content/PackageHelper;->fitsOnInternal(Landroid/content/Context;Landroid/content/pm/PackageInstaller$SessionParams;)Z
-PLcom/android/internal/content/PackageHelper;->getDefaultTestableInterface()Lcom/android/internal/content/PackageHelper$TestableInterface;
-HSPLcom/android/internal/content/PackageHelper;->getStorageManager()Landroid/os/storage/IStorageManager;
-PLcom/android/internal/content/PackageHelper;->resolveInstallLocation(Landroid/content/Context;Landroid/content/pm/PackageInstaller$SessionParams;)I
-PLcom/android/internal/content/PackageHelper;->resolveInstallLocation(Landroid/content/Context;Ljava/lang/String;IJI)I
-PLcom/android/internal/content/PackageHelper;->resolveInstallVolume(Landroid/content/Context;Landroid/content/pm/PackageInstaller$SessionParams;)Ljava/lang/String;
-PLcom/android/internal/content/PackageHelper;->resolveInstallVolume(Landroid/content/Context;Landroid/content/pm/PackageInstaller$SessionParams;Lcom/android/internal/content/PackageHelper$TestableInterface;)Ljava/lang/String;
-PLcom/android/internal/content/PackageHelper;->resolveInstallVolume(Landroid/content/Context;Ljava/lang/String;IJLcom/android/internal/content/PackageHelper$TestableInterface;)Ljava/lang/String;
-PLcom/android/internal/content/PackageHelper;->translateAllocateFlags(I)I
-HSPLcom/android/internal/content/PackageMonitor;-><init>()V
-PLcom/android/internal/content/PackageMonitor;->didSomePackagesChange()Z
-PLcom/android/internal/content/PackageMonitor;->getChangingUserId()I
-HPLcom/android/internal/content/PackageMonitor;->getPackageName(Landroid/content/Intent;)Ljava/lang/String;
-PLcom/android/internal/content/PackageMonitor;->isComponentModified(Ljava/lang/String;)Z
-PLcom/android/internal/content/PackageMonitor;->isPackageAppearing(Ljava/lang/String;)I
-PLcom/android/internal/content/PackageMonitor;->isPackageDisappearing(Ljava/lang/String;)I
-PLcom/android/internal/content/PackageMonitor;->isPackageModified(Ljava/lang/String;)Z
-HPLcom/android/internal/content/PackageMonitor;->onBeginPackageChanges()V
-HPLcom/android/internal/content/PackageMonitor;->onFinishPackageChanges()V
-PLcom/android/internal/content/PackageMonitor;->onPackageAdded(Ljava/lang/String;I)V
-PLcom/android/internal/content/PackageMonitor;->onPackageAppeared(Ljava/lang/String;I)V
-HPLcom/android/internal/content/PackageMonitor;->onPackageChanged(Ljava/lang/String;I[Ljava/lang/String;)Z
-PLcom/android/internal/content/PackageMonitor;->onPackageDisappeared(Ljava/lang/String;I)V
-PLcom/android/internal/content/PackageMonitor;->onPackageModified(Ljava/lang/String;)V
-PLcom/android/internal/content/PackageMonitor;->onPackageUpdateFinished(Ljava/lang/String;I)V
-PLcom/android/internal/content/PackageMonitor;->onPackageUpdateStarted(Ljava/lang/String;I)V
-HPLcom/android/internal/content/PackageMonitor;->onPackagesUnsuspended([Ljava/lang/String;)V
-HPLcom/android/internal/content/PackageMonitor;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-PLcom/android/internal/content/PackageMonitor;->onSomePackagesChanged()V
-HSPLcom/android/internal/content/PackageMonitor;->register(Landroid/content/Context;Landroid/os/Looper;Landroid/os/UserHandle;Z)V
-HSPLcom/android/internal/content/PackageMonitor;->register(Landroid/content/Context;Landroid/os/Looper;Z)V
-HSPLcom/android/internal/content/PackageMonitor;->register(Landroid/content/Context;Landroid/os/UserHandle;ZLandroid/os/Handler;)V
-HPLcom/android/internal/content/ReferrerIntent$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/content/ReferrerIntent;
-HPLcom/android/internal/content/ReferrerIntent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLcom/android/internal/content/ReferrerIntent;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLcom/android/internal/graphics/ColorUtils;->HSLToColor([F)I
-HSPLcom/android/internal/graphics/ColorUtils;->RGBToHSL(III[F)V
-HPLcom/android/internal/graphics/ColorUtils;->RGBToXYZ(III[D)V
-HPLcom/android/internal/graphics/ColorUtils;->binaryAlphaSearch(IIFLcom/android/internal/graphics/ColorUtils$ContrastCalculator;)I
-HPLcom/android/internal/graphics/ColorUtils;->blendARGB(IIF)I
-HPLcom/android/internal/graphics/ColorUtils;->calculateContrast(II)D
-HPLcom/android/internal/graphics/ColorUtils;->calculateLuminance(I)D
-HPLcom/android/internal/graphics/ColorUtils;->calculateMinimumBackgroundAlpha(IIF)I
-HSPLcom/android/internal/graphics/ColorUtils;->colorToHSL(I[F)V
-HPLcom/android/internal/graphics/ColorUtils;->colorToXYZ(I[D)V
-HPLcom/android/internal/graphics/ColorUtils;->getTempDouble3Array()[D
-HPLcom/android/internal/graphics/ColorUtils;->lambda$calculateMinimumBackgroundAlpha$0(IIII)D
-HPLcom/android/internal/graphics/ColorUtils;->setAlphaComponent(II)I
-HSPLcom/android/internal/graphics/SfVsyncFrameCallbackProvider;-><init>(Landroid/view/Choreographer;)V
-HPLcom/android/internal/graphics/SfVsyncFrameCallbackProvider;->getFrameTime()J
-HPLcom/android/internal/graphics/SfVsyncFrameCallbackProvider;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
 HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;-><init>(Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable;Landroid/content/res/Resources;)V
 HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;->addDrawable(Landroid/graphics/drawable/Drawable;)I
 HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;->canApplyTheme()Z
@@ -30091,1498 +14635,50 @@
 HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable;->onStateChange([I)Z
 HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
-HPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable;->start()V
 HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable;->stop()V
-PLcom/android/internal/infra/-$$Lambda$AbstractRemoteService$6FcEKfZ-7TXLg6dcCU8EMuMNAy4;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/internal/infra/-$$Lambda$AbstractRemoteService$9IBVTCLLZgndvH7fu1P14PW1_1o;->accept(Ljava/lang/Object;)V
-PLcom/android/internal/infra/-$$Lambda$AbstractRemoteService$YSUzqqi1Pbrg2dlwMGMtKWbGXck;->accept(Ljava/lang/Object;)V
-PLcom/android/internal/infra/-$$Lambda$AbstractRemoteService$ocrHd68Md9x6FfAzVQ6w8MAjFqY;->accept(Ljava/lang/Object;)V
-PLcom/android/internal/infra/-$$Lambda$EbzSql2RHkXox5Myj8A-7kLC4_A;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/internal/infra/-$$Lambda$ServiceConnector$Impl$3vLWxkP1Z6JyExzdZboFFp1zM20;-><clinit>()V
-PLcom/android/internal/infra/-$$Lambda$ServiceConnector$Impl$3vLWxkP1Z6JyExzdZboFFp1zM20;-><init>()V
-PLcom/android/internal/infra/-$$Lambda$ServiceConnector$Impl$3vLWxkP1Z6JyExzdZboFFp1zM20;->run(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/internal/infra/-$$Lambda$T7zIZMFnvwrmtbuTMXLaZHHp-9s;-><clinit>()V
-PLcom/android/internal/infra/-$$Lambda$T7zIZMFnvwrmtbuTMXLaZHHp-9s;-><init>()V
-PLcom/android/internal/infra/-$$Lambda$T7zIZMFnvwrmtbuTMXLaZHHp-9s;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/internal/infra/-$$Lambda$XuWfs8-IsKaNygi8YjlVGjedkIw;-><clinit>()V
-PLcom/android/internal/infra/-$$Lambda$XuWfs8-IsKaNygi8YjlVGjedkIw;-><init>()V
-PLcom/android/internal/infra/-$$Lambda$XuWfs8-IsKaNygi8YjlVGjedkIw;->accept(Ljava/lang/Object;)V
-PLcom/android/internal/infra/-$$Lambda$aeiZbEpH6rq4kD9vJrlAnboJGDM;-><clinit>()V
-PLcom/android/internal/infra/-$$Lambda$aeiZbEpH6rq4kD9vJrlAnboJGDM;-><init>()V
-PLcom/android/internal/infra/-$$Lambda$aeiZbEpH6rq4kD9vJrlAnboJGDM;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/internal/infra/-$$Lambda$qN_gooelzsUiBhYWznXKzb-8_wA;-><clinit>()V
-PLcom/android/internal/infra/-$$Lambda$qN_gooelzsUiBhYWznXKzb-8_wA;-><init>()V
-PLcom/android/internal/infra/-$$Lambda$qN_gooelzsUiBhYWznXKzb-8_wA;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/internal/infra/-$$Lambda$rAXGjry3wPGKviARzTYfDiY7xrs;-><clinit>()V
-PLcom/android/internal/infra/-$$Lambda$rAXGjry3wPGKviARzTYfDiY7xrs;-><init>()V
-PLcom/android/internal/infra/AbstractMultiplePendingRequestsRemoteService;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/content/ComponentName;ILcom/android/internal/infra/AbstractRemoteService$VultureCallback;Landroid/os/Handler;IZI)V
-PLcom/android/internal/infra/AbstractMultiplePendingRequestsRemoteService;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/internal/infra/AbstractMultiplePendingRequestsRemoteService;->handleBindFailure()V
-PLcom/android/internal/infra/AbstractMultiplePendingRequestsRemoteService;->handleOnDestroy()V
-PLcom/android/internal/infra/AbstractMultiplePendingRequestsRemoteService;->handlePendingRequestWhileUnBound(Lcom/android/internal/infra/AbstractRemoteService$BasePendingRequest;)V
-PLcom/android/internal/infra/AbstractMultiplePendingRequestsRemoteService;->handlePendingRequests()V
-PLcom/android/internal/infra/AbstractRemoteService$BasePendingRequest;-><init>(Lcom/android/internal/infra/AbstractRemoteService;)V
-PLcom/android/internal/infra/AbstractRemoteService$BasePendingRequest;->finish()Z
-PLcom/android/internal/infra/AbstractRemoteService$BasePendingRequest;->getService()Lcom/android/internal/infra/AbstractRemoteService;
-PLcom/android/internal/infra/AbstractRemoteService$BasePendingRequest;->isFinal()Z
-PLcom/android/internal/infra/AbstractRemoteService$BasePendingRequest;->onFinished()V
-PLcom/android/internal/infra/AbstractRemoteService$MyAsyncPendingRequest;-><clinit>()V
-PLcom/android/internal/infra/AbstractRemoteService$MyAsyncPendingRequest;-><init>(Lcom/android/internal/infra/AbstractRemoteService;Lcom/android/internal/infra/AbstractRemoteService$AsyncRequest;)V
-PLcom/android/internal/infra/AbstractRemoteService$MyAsyncPendingRequest;->run()V
-PLcom/android/internal/infra/AbstractRemoteService$RemoteServiceConnection;-><init>(Lcom/android/internal/infra/AbstractRemoteService;)V
-PLcom/android/internal/infra/AbstractRemoteService$RemoteServiceConnection;-><init>(Lcom/android/internal/infra/AbstractRemoteService;Lcom/android/internal/infra/AbstractRemoteService$1;)V
-PLcom/android/internal/infra/AbstractRemoteService$RemoteServiceConnection;->onBindingDied(Landroid/content/ComponentName;)V
-PLcom/android/internal/infra/AbstractRemoteService$RemoteServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/internal/infra/AbstractRemoteService$RemoteServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
-PLcom/android/internal/infra/AbstractRemoteService;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/content/ComponentName;ILcom/android/internal/infra/AbstractRemoteService$VultureCallback;Landroid/os/Handler;IZ)V
-PLcom/android/internal/infra/AbstractRemoteService;->access$100(Lcom/android/internal/infra/AbstractRemoteService;)Z
-PLcom/android/internal/infra/AbstractRemoteService;->access$200(Lcom/android/internal/infra/AbstractRemoteService;)Z
-PLcom/android/internal/infra/AbstractRemoteService;->access$202(Lcom/android/internal/infra/AbstractRemoteService;Z)Z
-PLcom/android/internal/infra/AbstractRemoteService;->access$400(Lcom/android/internal/infra/AbstractRemoteService;Z)V
-PLcom/android/internal/infra/AbstractRemoteService;->access$502(Lcom/android/internal/infra/AbstractRemoteService;Z)Z
-PLcom/android/internal/infra/AbstractRemoteService;->access$600(Lcom/android/internal/infra/AbstractRemoteService;Z)V
-PLcom/android/internal/infra/AbstractRemoteService;->binderDied()V
-PLcom/android/internal/infra/AbstractRemoteService;->cancelScheduledUnbind()V
-PLcom/android/internal/infra/AbstractRemoteService;->checkIfDestroyed()Z
-PLcom/android/internal/infra/AbstractRemoteService;->destroy()V
-PLcom/android/internal/infra/AbstractRemoteService;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/internal/infra/AbstractRemoteService;->finishRequest(Lcom/android/internal/infra/AbstractRemoteService$BasePendingRequest;)V
-PLcom/android/internal/infra/AbstractRemoteService;->getComponentName()Landroid/content/ComponentName;
-PLcom/android/internal/infra/AbstractRemoteService;->getRemoteRequestMillis()J
-PLcom/android/internal/infra/AbstractRemoteService;->handleBinderDied()V
-PLcom/android/internal/infra/AbstractRemoteService;->handleDestroy()V
-PLcom/android/internal/infra/AbstractRemoteService;->handleEnsureBound()V
-PLcom/android/internal/infra/AbstractRemoteService;->handleEnsureUnbound()V
-PLcom/android/internal/infra/AbstractRemoteService;->handleFinishRequest(Lcom/android/internal/infra/AbstractRemoteService$BasePendingRequest;)V
-PLcom/android/internal/infra/AbstractRemoteService;->handleIsBound()Z
-PLcom/android/internal/infra/AbstractRemoteService;->handleOnConnectedStateChangedInternal(Z)V
-PLcom/android/internal/infra/AbstractRemoteService;->handlePendingRequest(Lcom/android/internal/infra/AbstractRemoteService$BasePendingRequest;)V
-PLcom/android/internal/infra/AbstractRemoteService;->lambda$6FcEKfZ-7TXLg6dcCU8EMuMNAy4(Lcom/android/internal/infra/AbstractRemoteService;Lcom/android/internal/infra/AbstractRemoteService$BasePendingRequest;)V
-PLcom/android/internal/infra/AbstractRemoteService;->lambda$9IBVTCLLZgndvH7fu1P14PW1_1o(Lcom/android/internal/infra/AbstractRemoteService;)V
-PLcom/android/internal/infra/AbstractRemoteService;->lambda$YSUzqqi1Pbrg2dlwMGMtKWbGXck(Lcom/android/internal/infra/AbstractRemoteService;)V
-PLcom/android/internal/infra/AbstractRemoteService;->lambda$ocrHd68Md9x6FfAzVQ6w8MAjFqY(Lcom/android/internal/infra/AbstractRemoteService;)V
-PLcom/android/internal/infra/AbstractRemoteService;->scheduleAsyncRequest(Lcom/android/internal/infra/AbstractRemoteService$AsyncRequest;)V
-PLcom/android/internal/infra/AbstractRemoteService;->scheduleBind()V
-PLcom/android/internal/infra/AbstractRemoteService;->scheduleUnbind()V
-HPLcom/android/internal/infra/AbstractRemoteService;->scheduleUnbind(Z)V
-PLcom/android/internal/infra/AbstractRemoteService;->toString()Ljava/lang/String;
-PLcom/android/internal/infra/AndroidFuture$1;-><init>(Lcom/android/internal/infra/AndroidFuture;)V
-PLcom/android/internal/infra/AndroidFuture$1;->complete(Lcom/android/internal/infra/AndroidFuture;)V
-PLcom/android/internal/infra/AndroidFuture$2;-><init>()V
-PLcom/android/internal/infra/AndroidFuture$2;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/infra/AndroidFuture;
-PLcom/android/internal/infra/AndroidFuture$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLcom/android/internal/infra/AndroidFuture;-><clinit>()V
-HPLcom/android/internal/infra/AndroidFuture;-><init>()V
-PLcom/android/internal/infra/AndroidFuture;-><init>(Landroid/os/Parcel;)V
-PLcom/android/internal/infra/AndroidFuture;->callListener(Ljava/util/function/BiConsumer;Ljava/lang/Object;Ljava/lang/Throwable;)V
-PLcom/android/internal/infra/AndroidFuture;->callListenerAsync(Ljava/util/function/BiConsumer;Ljava/lang/Object;Ljava/lang/Throwable;)V
-PLcom/android/internal/infra/AndroidFuture;->cancel(Z)Z
-HPLcom/android/internal/infra/AndroidFuture;->cancelTimeout()Lcom/android/internal/infra/AndroidFuture;
-PLcom/android/internal/infra/AndroidFuture;->complete(Ljava/lang/Object;)Z
-PLcom/android/internal/infra/AndroidFuture;->completeExceptionally(Ljava/lang/Throwable;)Z
-PLcom/android/internal/infra/AndroidFuture;->completedFuture(Ljava/lang/Object;)Lcom/android/internal/infra/AndroidFuture;
-PLcom/android/internal/infra/AndroidFuture;->onCompleted(Ljava/lang/Object;Ljava/lang/Throwable;)V
-PLcom/android/internal/infra/AndroidFuture;->orTimeout(JLjava/util/concurrent/TimeUnit;)Lcom/android/internal/infra/AndroidFuture;
-PLcom/android/internal/infra/AndroidFuture;->whenComplete(Ljava/util/function/BiConsumer;)Lcom/android/internal/infra/AndroidFuture;
-PLcom/android/internal/infra/AndroidFuture;->whenComplete(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;
-PLcom/android/internal/infra/AndroidFuture;->whenComplete(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;
-HPLcom/android/internal/infra/AndroidFuture;->whenCompleteAsync(Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Lcom/android/internal/infra/AndroidFuture;
-PLcom/android/internal/infra/AndroidFuture;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLcom/android/internal/infra/GlobalWhitelistState;-><init>()V
-PLcom/android/internal/infra/GlobalWhitelistState;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-HSPLcom/android/internal/infra/GlobalWhitelistState;->getWhitelistedComponents(ILjava/lang/String;)Landroid/util/ArraySet;
-PLcom/android/internal/infra/GlobalWhitelistState;->isWhitelisted(ILandroid/content/ComponentName;)Z
-HSPLcom/android/internal/infra/GlobalWhitelistState;->isWhitelisted(ILjava/lang/String;)Z
-PLcom/android/internal/infra/GlobalWhitelistState;->resetWhitelist(I)V
-PLcom/android/internal/infra/GlobalWhitelistState;->setWhitelist(ILjava/util/List;Ljava/util/List;)V
-PLcom/android/internal/infra/IAndroidFuture$Stub;-><init>()V
-PLcom/android/internal/infra/IAndroidFuture$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/infra/IAndroidFuture$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/infra/RemoteStream$1;-><init>(Lcom/android/internal/util/FunctionalUtils$ThrowingConsumer;Lcom/android/internal/util/FunctionalUtils$ThrowingFunction;Ljava/util/concurrent/Executor;Z)V
-PLcom/android/internal/infra/RemoteStream$1;->createStream(Landroid/os/ParcelFileDescriptor;)Ljava/io/Closeable;
-PLcom/android/internal/infra/RemoteStream$1;->createStream(Landroid/os/ParcelFileDescriptor;)Ljava/io/InputStream;
-PLcom/android/internal/infra/RemoteStream;-><init>(Lcom/android/internal/util/FunctionalUtils$ThrowingConsumer;Lcom/android/internal/util/FunctionalUtils$ThrowingFunction;Ljava/util/concurrent/Executor;Z)V
-PLcom/android/internal/infra/RemoteStream;-><init>(Lcom/android/internal/util/FunctionalUtils$ThrowingConsumer;Lcom/android/internal/util/FunctionalUtils$ThrowingFunction;Ljava/util/concurrent/Executor;ZLcom/android/internal/infra/RemoteStream$1;)V
-PLcom/android/internal/infra/RemoteStream;->onCompleted(Ljava/lang/Object;Ljava/lang/Throwable;)V
-PLcom/android/internal/infra/RemoteStream;->readAll(Ljava/io/InputStream;)[B
-PLcom/android/internal/infra/RemoteStream;->receiveBytes(Lcom/android/internal/util/FunctionalUtils$ThrowingConsumer;)Lcom/android/internal/infra/AndroidFuture;
-PLcom/android/internal/infra/RemoteStream;->receiveBytes(Lcom/android/internal/util/FunctionalUtils$ThrowingConsumer;Lcom/android/internal/util/FunctionalUtils$ThrowingFunction;)Lcom/android/internal/infra/AndroidFuture;
-PLcom/android/internal/infra/RemoteStream;->run()V
-PLcom/android/internal/infra/ServiceConnector$Impl$CompletionAwareJob;-><init>(Lcom/android/internal/infra/ServiceConnector$Impl;)V
-PLcom/android/internal/infra/ServiceConnector$Impl$CompletionAwareJob;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/internal/infra/ServiceConnector$Impl$CompletionAwareJob;->accept(Ljava/lang/Object;Ljava/lang/Throwable;)V
-PLcom/android/internal/infra/ServiceConnector$Impl$CompletionAwareJob;->cancel(Z)Z
-PLcom/android/internal/infra/ServiceConnector$Impl$CompletionAwareJob;->onCompleted(Ljava/lang/Object;Ljava/lang/Throwable;)V
-PLcom/android/internal/infra/ServiceConnector$Impl$CompletionAwareJob;->run(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/internal/infra/ServiceConnector$Impl;-><init>(Landroid/content/Context;Landroid/content/Intent;IILjava/util/function/Function;)V
-PLcom/android/internal/infra/ServiceConnector$Impl;->access$000(Lcom/android/internal/infra/ServiceConnector$Impl;)Ljava/util/Queue;
-PLcom/android/internal/infra/ServiceConnector$Impl;->access$100(Lcom/android/internal/infra/ServiceConnector$Impl;)Ljava/util/List;
-PLcom/android/internal/infra/ServiceConnector$Impl;->access$200(Lcom/android/internal/infra/ServiceConnector$Impl;)V
-PLcom/android/internal/infra/ServiceConnector$Impl;->bindService(Landroid/content/ServiceConnection;Landroid/os/Handler;)Z
-PLcom/android/internal/infra/ServiceConnector$Impl;->binderAsInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
-PLcom/android/internal/infra/ServiceConnector$Impl;->binderDied()V
-PLcom/android/internal/infra/ServiceConnector$Impl;->cancelPendingJobs()V
-HPLcom/android/internal/infra/ServiceConnector$Impl;->cancelTimeout()V
-PLcom/android/internal/infra/ServiceConnector$Impl;->castOrNull(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
-PLcom/android/internal/infra/ServiceConnector$Impl;->connect()Lcom/android/internal/infra/AndroidFuture;
-PLcom/android/internal/infra/ServiceConnector$Impl;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/internal/infra/ServiceConnector$Impl;->enqueue(Lcom/android/internal/infra/ServiceConnector$Impl$CompletionAwareJob;)V
-PLcom/android/internal/infra/ServiceConnector$Impl;->enqueue(Lcom/android/internal/infra/ServiceConnector$Job;)Z
-PLcom/android/internal/infra/ServiceConnector$Impl;->enqueueJobThread(Lcom/android/internal/infra/ServiceConnector$Job;)V
-PLcom/android/internal/infra/ServiceConnector$Impl;->getAutoDisconnectTimeoutMs()J
-PLcom/android/internal/infra/ServiceConnector$Impl;->getJobHandler()Landroid/os/Handler;
-PLcom/android/internal/infra/ServiceConnector$Impl;->getRequestTimeoutMs()J
-PLcom/android/internal/infra/ServiceConnector$Impl;->isBound()Z
-PLcom/android/internal/infra/ServiceConnector$Impl;->lambda$connect$0(Landroid/os/IInterface;)Landroid/os/IInterface;
-HPLcom/android/internal/infra/ServiceConnector$Impl;->maybeScheduleUnbindTimeout()V
-PLcom/android/internal/infra/ServiceConnector$Impl;->onBindingDied(Landroid/content/ComponentName;)V
-PLcom/android/internal/infra/ServiceConnector$Impl;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/internal/infra/ServiceConnector$Impl;->onServiceConnectionStatusChanged(Landroid/os/IInterface;Z)V
-PLcom/android/internal/infra/ServiceConnector$Impl;->onServiceDisconnected(Landroid/content/ComponentName;)V
-PLcom/android/internal/infra/ServiceConnector$Impl;->onServiceUnbound()V
-PLcom/android/internal/infra/ServiceConnector$Impl;->onTimeout()V
-PLcom/android/internal/infra/ServiceConnector$Impl;->postAsync(Lcom/android/internal/infra/ServiceConnector$Job;)Lcom/android/internal/infra/AndroidFuture;
-HPLcom/android/internal/infra/ServiceConnector$Impl;->processQueue()V
-PLcom/android/internal/infra/ServiceConnector$Impl;->run()V
-PLcom/android/internal/infra/ServiceConnector$Impl;->run(Lcom/android/internal/infra/ServiceConnector$VoidJob;)Z
-PLcom/android/internal/infra/ServiceConnector$Impl;->scheduleUnbindTimeout()V
-PLcom/android/internal/infra/ServiceConnector$Impl;->stateToString()Ljava/lang/String;
-PLcom/android/internal/infra/ServiceConnector$Impl;->unbind()V
-PLcom/android/internal/infra/ServiceConnector$Impl;->unbindJobThread()V
-PLcom/android/internal/infra/ServiceConnector$VoidJob;->run(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/internal/infra/ServiceConnector$VoidJob;->run(Ljava/lang/Object;)Ljava/lang/Void;
-PLcom/android/internal/infra/ThrottledRunnable;-><init>(Landroid/os/Handler;JLjava/lang/Runnable;)V
-HPLcom/android/internal/infra/ThrottledRunnable;->run()V
-PLcom/android/internal/infra/WhitelistHelper;-><init>()V
-HPLcom/android/internal/infra/WhitelistHelper;->dump(Ljava/lang/String;Ljava/lang/String;Ljava/io/PrintWriter;)V
-HPLcom/android/internal/infra/WhitelistHelper;->getWhitelistedComponents(Ljava/lang/String;)Landroid/util/ArraySet;
-PLcom/android/internal/infra/WhitelistHelper;->isWhitelisted(Landroid/content/ComponentName;)Z
-HPLcom/android/internal/infra/WhitelistHelper;->isWhitelisted(Ljava/lang/String;)Z
-HPLcom/android/internal/infra/WhitelistHelper;->setWhitelist(Landroid/util/ArraySet;Landroid/util/ArraySet;)V
-PLcom/android/internal/infra/WhitelistHelper;->setWhitelist(Ljava/util/List;Ljava/util/List;)V
-HPLcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub$Proxy;->hideMySoftInput(I)V
-HPLcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub$Proxy;->notifyUserAction()V
-HSPLcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub$Proxy;->reportFullscreenMode(Z)V
-HSPLcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub$Proxy;->reportStartInput(Landroid/os/IBinder;)V
-HPLcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub$Proxy;->setImeWindowStatus(II)V
-HPLcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub$Proxy;->updateStatusIcon(Ljava/lang/String;I)V
-PLcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub;-><init>()V
-PLcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/inputmethod/InputMethodDebug;->softInputModeToString(I)Ljava/lang/String;
-PLcom/android/internal/inputmethod/InputMethodDebug;->startInputReasonToString(I)Ljava/lang/String;
-HSPLcom/android/internal/inputmethod/InputMethodPrivilegedOperations$OpsHolder;->getAndWarnIfNull()Lcom/android/internal/inputmethod/IInputMethodPrivilegedOperations;
-HSPLcom/android/internal/inputmethod/InputMethodPrivilegedOperations$OpsHolder;->set(Lcom/android/internal/inputmethod/IInputMethodPrivilegedOperations;)V
-HPLcom/android/internal/inputmethod/InputMethodPrivilegedOperations;->hideMySoftInput(I)V
-HPLcom/android/internal/inputmethod/InputMethodPrivilegedOperations;->notifyUserAction()V
-HSPLcom/android/internal/inputmethod/InputMethodPrivilegedOperations;->reportFullscreenMode(Z)V
-HSPLcom/android/internal/inputmethod/InputMethodPrivilegedOperations;->reportStartInput(Landroid/os/IBinder;)V
-HPLcom/android/internal/inputmethod/InputMethodPrivilegedOperations;->set(Lcom/android/internal/inputmethod/IInputMethodPrivilegedOperations;)V
-HPLcom/android/internal/inputmethod/InputMethodPrivilegedOperations;->setImeWindowStatus(II)V
-HPLcom/android/internal/inputmethod/InputMethodPrivilegedOperations;->updateStatusIcon(Ljava/lang/String;I)V
-HSPLcom/android/internal/inputmethod/InputMethodPrivilegedOperationsRegistry;->isRegistered(Landroid/os/IBinder;)Z
-HSPLcom/android/internal/inputmethod/InputMethodPrivilegedOperationsRegistry;->put(Landroid/os/IBinder;Lcom/android/internal/inputmethod/InputMethodPrivilegedOperations;)V
-HPLcom/android/internal/inputmethod/InputMethodPrivilegedOperationsRegistry;->remove(Landroid/os/IBinder;)V
-PLcom/android/internal/inputmethod/SubtypeLocaleUtils;->constructLocaleFromString(Ljava/lang/String;)Ljava/util/Locale;
-HSPLcom/android/internal/location/GpsNetInitiatedHandler$1;-><init>(Lcom/android/internal/location/GpsNetInitiatedHandler;)V
-PLcom/android/internal/location/GpsNetInitiatedHandler$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HSPLcom/android/internal/location/GpsNetInitiatedHandler$2;-><init>(Lcom/android/internal/location/GpsNetInitiatedHandler;)V
-HSPLcom/android/internal/location/GpsNetInitiatedHandler;-><clinit>()V
-HSPLcom/android/internal/location/GpsNetInitiatedHandler;-><init>(Landroid/content/Context;Landroid/location/INetInitiatedListener;Z)V
-PLcom/android/internal/location/GpsNetInitiatedHandler;->access$100()Z
-HSPLcom/android/internal/location/GpsNetInitiatedHandler;->setEmergencyExtensionSeconds(I)V
-HSPLcom/android/internal/location/GpsNetInitiatedHandler;->setSuplEsEnabled(Z)V
-HSPLcom/android/internal/location/GpsNetInitiatedHandler;->updateLocationMode()V
-PLcom/android/internal/location/ILocationProvider$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/location/ILocationProvider$Stub$Proxy;->setLocationProviderManager(Lcom/android/internal/location/ILocationProviderManager;)V
-PLcom/android/internal/location/ILocationProvider$Stub$Proxy;->setRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
-HSPLcom/android/internal/location/ILocationProvider$Stub;-><init>()V
-PLcom/android/internal/location/ILocationProvider$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/location/ILocationProvider;
-HSPLcom/android/internal/location/ILocationProvider$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLcom/android/internal/location/ILocationProviderManager$Stub$Proxy;->onReportLocation(Landroid/location/Location;)V
-HSPLcom/android/internal/location/ILocationProviderManager$Stub$Proxy;->onSetEnabled(Z)V
-HSPLcom/android/internal/location/ILocationProviderManager$Stub$Proxy;->onSetProperties(Lcom/android/internal/location/ProviderProperties;)V
-HSPLcom/android/internal/location/ILocationProviderManager$Stub;-><init>()V
-PLcom/android/internal/location/ILocationProviderManager$Stub;->asBinder()Landroid/os/IBinder;
-HSPLcom/android/internal/location/ILocationProviderManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/location/ILocationProviderManager;
-PLcom/android/internal/location/ILocationProviderManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/location/ProviderProperties$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/location/ProviderProperties;
-HSPLcom/android/internal/location/ProviderProperties$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLcom/android/internal/location/ProviderProperties;-><init>(ZZZZZZZII)V
-HSPLcom/android/internal/location/ProviderProperties;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLcom/android/internal/location/ProviderRequest$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/location/ProviderRequest;
-HSPLcom/android/internal/location/ProviderRequest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLcom/android/internal/location/ProviderRequest;-><init>()V
-PLcom/android/internal/location/ProviderRequest;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLcom/android/internal/location/gnssmetrics/GnssMetrics$GnssPowerMetrics;-><init>(Lcom/android/internal/location/gnssmetrics/GnssMetrics;Lcom/android/internal/app/IBatteryStats;)V
-HSPLcom/android/internal/location/gnssmetrics/GnssMetrics$GnssPowerMetrics;-><init>(Lcom/android/internal/location/gnssmetrics/GnssMetrics;Lcom/android/internal/app/IBatteryStats;Lcom/android/internal/location/gnssmetrics/GnssMetrics$1;)V
-PLcom/android/internal/location/gnssmetrics/GnssMetrics$GnssPowerMetrics;->buildProto()Lcom/android/internal/location/nano/GnssLogsProto$PowerMetrics;
-PLcom/android/internal/location/gnssmetrics/GnssMetrics$GnssPowerMetrics;->getGpsBatteryStats()Landroid/os/connectivity/GpsBatteryStats;
-PLcom/android/internal/location/gnssmetrics/GnssMetrics$GnssPowerMetrics;->getSignalLevel(D)I
-HPLcom/android/internal/location/gnssmetrics/GnssMetrics$GnssPowerMetrics;->reportSignalQuality([FI)V
-HSPLcom/android/internal/location/gnssmetrics/GnssMetrics$Statistics;-><init>(Lcom/android/internal/location/gnssmetrics/GnssMetrics;)V
-HSPLcom/android/internal/location/gnssmetrics/GnssMetrics$Statistics;-><init>(Lcom/android/internal/location/gnssmetrics/GnssMetrics;Lcom/android/internal/location/gnssmetrics/GnssMetrics$1;)V
-PLcom/android/internal/location/gnssmetrics/GnssMetrics$Statistics;->addItem(D)V
-PLcom/android/internal/location/gnssmetrics/GnssMetrics$Statistics;->getCount()I
-PLcom/android/internal/location/gnssmetrics/GnssMetrics$Statistics;->getMean()D
-PLcom/android/internal/location/gnssmetrics/GnssMetrics$Statistics;->getStandardDeviation()D
-HSPLcom/android/internal/location/gnssmetrics/GnssMetrics$Statistics;->reset()V
-HSPLcom/android/internal/location/gnssmetrics/GnssMetrics;-><init>(Lcom/android/internal/app/IBatteryStats;)V
-PLcom/android/internal/location/gnssmetrics/GnssMetrics;->access$200(Lcom/android/internal/location/gnssmetrics/GnssMetrics;)Lcom/android/internal/location/gnssmetrics/GnssMetrics$GnssPowerMetrics;
-PLcom/android/internal/location/gnssmetrics/GnssMetrics;->dumpGnssMetricsAsProtoString()Ljava/lang/String;
-PLcom/android/internal/location/gnssmetrics/GnssMetrics;->dumpGnssMetricsAsText()Ljava/lang/String;
-PLcom/android/internal/location/gnssmetrics/GnssMetrics;->isL5Sv(F)Z
-HPLcom/android/internal/location/gnssmetrics/GnssMetrics;->logCn0([FI[F)V
-HPLcom/android/internal/location/gnssmetrics/GnssMetrics;->logCn0L5(I[F[F)V
-HPLcom/android/internal/location/gnssmetrics/GnssMetrics;->logConstellationType(I)V
-PLcom/android/internal/location/gnssmetrics/GnssMetrics;->logMissedReports(II)V
-PLcom/android/internal/location/gnssmetrics/GnssMetrics;->logPositionAccuracyMeters(F)V
-PLcom/android/internal/location/gnssmetrics/GnssMetrics;->logReceivedLocationStatus(Z)V
-HPLcom/android/internal/location/gnssmetrics/GnssMetrics;->logSvStatus(Landroid/location/GnssStatus;)V
-PLcom/android/internal/location/gnssmetrics/GnssMetrics;->logTimeToFirstFixMilliSecs(I)V
-HSPLcom/android/internal/location/gnssmetrics/GnssMetrics;->reset()V
-HSPLcom/android/internal/location/gnssmetrics/GnssMetrics;->resetConstellationTypes()V
-PLcom/android/internal/location/nano/GnssLogsProto$GnssLog;-><init>()V
-PLcom/android/internal/location/nano/GnssLogsProto$GnssLog;->clear()Lcom/android/internal/location/nano/GnssLogsProto$GnssLog;
-PLcom/android/internal/location/nano/GnssLogsProto$GnssLog;->computeSerializedSize()I
-PLcom/android/internal/location/nano/GnssLogsProto$GnssLog;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-PLcom/android/internal/location/nano/GnssLogsProto$PowerMetrics;-><init>()V
-PLcom/android/internal/location/nano/GnssLogsProto$PowerMetrics;->clear()Lcom/android/internal/location/nano/GnssLogsProto$PowerMetrics;
-PLcom/android/internal/location/nano/GnssLogsProto$PowerMetrics;->computeSerializedSize()I
-PLcom/android/internal/location/nano/GnssLogsProto$PowerMetrics;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
+HSPLcom/android/internal/inputmethod/SubtypeLocaleUtils;->constructLocaleFromString(Ljava/lang/String;)Ljava/util/Locale;
 HSPLcom/android/internal/logging/AndroidConfig;-><init>()V
 HSPLcom/android/internal/logging/AndroidHandler$1;->format(Ljava/util/logging/LogRecord;)Ljava/lang/String;
 HSPLcom/android/internal/logging/AndroidHandler;-><init>()V
-PLcom/android/internal/logging/AndroidHandler;->getAndroidLevel(Ljava/util/logging/Level;)I
+HSPLcom/android/internal/logging/AndroidHandler;->getAndroidLevel(Ljava/util/logging/Level;)I
 HSPLcom/android/internal/logging/AndroidHandler;->publish(Ljava/util/logging/LogRecord;)V
-HSPLcom/android/internal/logging/EventLogTags;->writeCommitSysConfigFile(Ljava/lang/String;J)V
 HSPLcom/android/internal/logging/EventLogTags;->writeSysuiMultiAction([Ljava/lang/Object;)V
 HSPLcom/android/internal/logging/MetricsLogger;-><init>()V
-HPLcom/android/internal/logging/MetricsLogger;->action(I)V
-PLcom/android/internal/logging/MetricsLogger;->action(II)V
-PLcom/android/internal/logging/MetricsLogger;->action(ILjava/lang/String;)V
-PLcom/android/internal/logging/MetricsLogger;->action(IZ)V
-PLcom/android/internal/logging/MetricsLogger;->action(Landroid/content/Context;II)V
-PLcom/android/internal/logging/MetricsLogger;->action(Landroid/content/Context;IZ)V
-HSPLcom/android/internal/logging/MetricsLogger;->action(Landroid/metrics/LogMaker;)V
-PLcom/android/internal/logging/MetricsLogger;->count(Landroid/content/Context;Ljava/lang/String;I)V
-PLcom/android/internal/logging/MetricsLogger;->count(Ljava/lang/String;I)V
+HSPLcom/android/internal/logging/MetricsLogger;->action(II)V
 HSPLcom/android/internal/logging/MetricsLogger;->getLogger()Lcom/android/internal/logging/MetricsLogger;
-PLcom/android/internal/logging/MetricsLogger;->hidden(I)V
-PLcom/android/internal/logging/MetricsLogger;->hidden(Landroid/content/Context;I)V
-HSPLcom/android/internal/logging/MetricsLogger;->histogram(Landroid/content/Context;Ljava/lang/String;I)V
-HSPLcom/android/internal/logging/MetricsLogger;->histogram(Ljava/lang/String;I)V
+HSPLcom/android/internal/logging/MetricsLogger;->hidden(I)V
 HSPLcom/android/internal/logging/MetricsLogger;->saveLog(Landroid/metrics/LogMaker;)V
-HPLcom/android/internal/logging/MetricsLogger;->visibility(IZ)V
-HPLcom/android/internal/logging/MetricsLogger;->visibility(Landroid/content/Context;IZ)V
-PLcom/android/internal/logging/MetricsLogger;->visible(I)V
-PLcom/android/internal/logging/MetricsLogger;->visible(Landroid/content/Context;I)V
 HSPLcom/android/internal/logging/MetricsLogger;->write(Landroid/metrics/LogMaker;)V
-HSPLcom/android/internal/net/INetworkWatchlistManager$Stub;-><init>()V
-PLcom/android/internal/net/INetworkWatchlistManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/net/INetworkWatchlistManager;
-PLcom/android/internal/net/INetworkWatchlistManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/notification/SystemNotificationChannels;->createAll(Landroid/content/Context;)V
-HSPLcom/android/internal/notification/SystemNotificationChannels;->newAccountChannel(Landroid/content/Context;)Landroid/app/NotificationChannel;
-HSPLcom/android/internal/notification/SystemNotificationChannels;->removeDeprecated(Landroid/content/Context;)V
-HSPLcom/android/internal/os/-$$Lambda$6-ytl6NLMGWt_iQr4_PfakNWUKQ;->get()Ljava/lang/Object;
-HSPLcom/android/internal/os/-$$Lambda$BatteryStatsImpl$7bfIWpn8X2h-hSzLD6dcuK4Ljuw;-><init>(Lcom/android/internal/os/BatteryStatsImpl;IZLandroid/util/SparseLongArray;)V
-HPLcom/android/internal/os/-$$Lambda$BatteryStatsImpl$7bfIWpn8X2h-hSzLD6dcuK4Ljuw;->onUidCpuTime(ILjava/lang/Object;)V
-HSPLcom/android/internal/os/-$$Lambda$BatteryStatsImpl$B-TmZhQb712ePnuJTxvMe7P-YwQ;-><init>(Lcom/android/internal/os/BatteryStatsImpl;ZZZII)V
-HPLcom/android/internal/os/-$$Lambda$BatteryStatsImpl$B-TmZhQb712ePnuJTxvMe7P-YwQ;->onUidCpuTime(ILjava/lang/Object;)V
-HSPLcom/android/internal/os/-$$Lambda$BatteryStatsImpl$Xvt9xdVPtevMWGIjcbxXf0_mr_c;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Z)V
-HPLcom/android/internal/os/-$$Lambda$BatteryStatsImpl$Xvt9xdVPtevMWGIjcbxXf0_mr_c;->onUidCpuTime(ILjava/lang/Object;)V
-HSPLcom/android/internal/os/-$$Lambda$BatteryStatsImpl$_l2oiaRDRhjCXI_PwXPsAhrgegI;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Z)V
-HPLcom/android/internal/os/-$$Lambda$BatteryStatsImpl$_l2oiaRDRhjCXI_PwXPsAhrgegI;->onUidCpuTime(ILjava/lang/Object;)V
-PLcom/android/internal/os/-$$Lambda$BinderCallsStats$-YP-7pwoNn8TN0iTmo5Q1r2lQz0;-><clinit>()V
-PLcom/android/internal/os/-$$Lambda$BinderCallsStats$-YP-7pwoNn8TN0iTmo5Q1r2lQz0;-><init>()V
-PLcom/android/internal/os/-$$Lambda$BinderCallsStats$-YP-7pwoNn8TN0iTmo5Q1r2lQz0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLcom/android/internal/os/-$$Lambda$BinderCallsStats$233x_Qux4c_AiqShYaWwvFplEXs;-><clinit>()V
-PLcom/android/internal/os/-$$Lambda$BinderCallsStats$233x_Qux4c_AiqShYaWwvFplEXs;-><init>()V
-PLcom/android/internal/os/-$$Lambda$BinderCallsStats$233x_Qux4c_AiqShYaWwvFplEXs;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLcom/android/internal/os/-$$Lambda$BinderCallsStats$Vota0PqfoPWckjXH35wE48myGdk;-><init>(Ljava/util/List;)V
-PLcom/android/internal/os/-$$Lambda$BinderCallsStats$Vota0PqfoPWckjXH35wE48myGdk;->accept(Ljava/lang/Object;)V
-PLcom/android/internal/os/-$$Lambda$BinderCallsStats$iPOmTqbqUiHzgsAugINuZgf9tls;-><clinit>()V
-PLcom/android/internal/os/-$$Lambda$BinderCallsStats$iPOmTqbqUiHzgsAugINuZgf9tls;-><init>()V
-PLcom/android/internal/os/-$$Lambda$BinderCallsStats$iPOmTqbqUiHzgsAugINuZgf9tls;->applyAsDouble(Ljava/lang/Object;)D
-HPLcom/android/internal/os/-$$Lambda$BinderCallsStats$sqXweH5BoxhmZvI188ctqYiACRk;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/internal/os/-$$Lambda$RuntimeInit$ep4ioD9YINkHI5Q1wZ0N_7VFAOg;->get()Ljava/lang/Object;
 HSPLcom/android/internal/os/-$$Lambda$ZygoteConnection$KxVsZ-s4KsanePOHCU5JcuypPik;-><init>(II)V
 HSPLcom/android/internal/os/-$$Lambda$ZygoteConnection$KxVsZ-s4KsanePOHCU5JcuypPik;->run()V
+HSPLcom/android/internal/os/-$$Lambda$ZygoteConnection$xjqM7qW7vAjTqh2tR5XRF5Vn5mk;-><init>([Ljava/lang/String;)V
+HSPLcom/android/internal/os/-$$Lambda$ZygoteConnection$xjqM7qW7vAjTqh2tR5XRF5Vn5mk;->run()V
 HSPLcom/android/internal/os/AndroidPrintStream;-><init>(ILjava/lang/String;)V
-HSPLcom/android/internal/os/AndroidPrintStream;->log(Ljava/lang/String;)V
-PLcom/android/internal/os/AppFuseMount$1;-><init>()V
-PLcom/android/internal/os/AppFuseMount;-><clinit>()V
-PLcom/android/internal/os/AppFuseMount;-><init>(ILandroid/os/ParcelFileDescriptor;)V
-PLcom/android/internal/os/AppFuseMount;->writeToParcel(Landroid/os/Parcel;I)V
-PLcom/android/internal/os/AppIdToPackageMap;-><init>(Ljava/util/Map;)V
-HPLcom/android/internal/os/AppIdToPackageMap;->getSnapshot()Lcom/android/internal/os/AppIdToPackageMap;
-HPLcom/android/internal/os/AppIdToPackageMap;->mapUid(I)Ljava/lang/String;
-HSPLcom/android/internal/os/AtomicDirectory;-><init>(Ljava/io/File;)V
-PLcom/android/internal/os/AtomicDirectory;->backup()V
-PLcom/android/internal/os/AtomicDirectory;->closeWrite(Ljava/io/FileOutputStream;)V
-PLcom/android/internal/os/AtomicDirectory;->delete()V
-PLcom/android/internal/os/AtomicDirectory;->deleteDirectory(Ljava/io/File;)Z
-HSPLcom/android/internal/os/AtomicDirectory;->ensureBaseDirectory()V
-PLcom/android/internal/os/AtomicDirectory;->openWrite(Ljava/io/File;)Ljava/io/FileOutputStream;
-HSPLcom/android/internal/os/AtomicDirectory;->restore()V
-HSPLcom/android/internal/os/AtomicDirectory;->startRead()Ljava/io/File;
-HPLcom/android/internal/os/AtomicDirectory;->syncDirectory(Ljava/io/File;)V
-PLcom/android/internal/os/AtomicDirectory;->syncParentDirectory()V
-PLcom/android/internal/os/AtomicDirectory;->throwIfSomeFilesOpen()V
 HSPLcom/android/internal/os/BackgroundThread;-><init>()V
 HSPLcom/android/internal/os/BackgroundThread;->ensureThreadLocked()V
-HSPLcom/android/internal/os/BackgroundThread;->get()Lcom/android/internal/os/BackgroundThread;
-HSPLcom/android/internal/os/BackgroundThread;->getExecutor()Ljava/util/concurrent/Executor;
 HSPLcom/android/internal/os/BackgroundThread;->getHandler()Landroid/os/Handler;
-HPLcom/android/internal/os/BatterySipper;-><init>(Lcom/android/internal/os/BatterySipper$DrainType;Landroid/os/BatteryStats$Uid;D)V
-PLcom/android/internal/os/BatterySipper;->add(Lcom/android/internal/os/BatterySipper;)V
-HPLcom/android/internal/os/BatterySipper;->compareTo(Lcom/android/internal/os/BatterySipper;)I
-HPLcom/android/internal/os/BatterySipper;->compareTo(Ljava/lang/Object;)I
-HPLcom/android/internal/os/BatterySipper;->computeMobilemspp()V
-HPLcom/android/internal/os/BatterySipper;->getUid()I
-HPLcom/android/internal/os/BatterySipper;->sumPower()D
-PLcom/android/internal/os/BatteryStatsHelper$1;-><init>(Lcom/android/internal/os/BatteryStatsHelper;)V
-PLcom/android/internal/os/BatteryStatsHelper;-><init>(Landroid/content/Context;ZZ)V
-PLcom/android/internal/os/BatteryStatsHelper;->addAmbientDisplayUsage()V
-PLcom/android/internal/os/BatteryStatsHelper;->addBluetoothUsage()V
-PLcom/android/internal/os/BatteryStatsHelper;->addEntry(Lcom/android/internal/os/BatterySipper$DrainType;JD)Lcom/android/internal/os/BatterySipper;
-PLcom/android/internal/os/BatteryStatsHelper;->addIdleUsage()V
-PLcom/android/internal/os/BatteryStatsHelper;->addMemoryUsage()V
-PLcom/android/internal/os/BatteryStatsHelper;->addPhoneUsage()V
-PLcom/android/internal/os/BatteryStatsHelper;->addRadioUsage()V
-PLcom/android/internal/os/BatteryStatsHelper;->addScreenUsage()V
-PLcom/android/internal/os/BatteryStatsHelper;->addUserUsage()V
-PLcom/android/internal/os/BatteryStatsHelper;->addWiFiUsage()V
-PLcom/android/internal/os/BatteryStatsHelper;->aggregateSippers(Lcom/android/internal/os/BatterySipper;Ljava/util/List;Ljava/lang/String;)V
-PLcom/android/internal/os/BatteryStatsHelper;->checkHasBluetoothPowerReporting(Landroid/os/BatteryStats;Lcom/android/internal/os/PowerProfile;)Z
-PLcom/android/internal/os/BatteryStatsHelper;->checkHasWifiPowerReporting(Landroid/os/BatteryStats;Lcom/android/internal/os/PowerProfile;)Z
-PLcom/android/internal/os/BatteryStatsHelper;->checkWifiOnly(Landroid/content/Context;)Z
-HPLcom/android/internal/os/BatteryStatsHelper;->convertMsToUs(J)J
-HPLcom/android/internal/os/BatteryStatsHelper;->convertUsToMs(J)J
-PLcom/android/internal/os/BatteryStatsHelper;->create(Landroid/os/BatteryStats;)V
-PLcom/android/internal/os/BatteryStatsHelper;->getComputedPower()D
-HPLcom/android/internal/os/BatteryStatsHelper;->getForegroundActivityTotalTimeUs(Landroid/os/BatteryStats$Uid;J)J
-PLcom/android/internal/os/BatteryStatsHelper;->getMaxDrainedPower()D
-PLcom/android/internal/os/BatteryStatsHelper;->getMinDrainedPower()D
-PLcom/android/internal/os/BatteryStatsHelper;->getMobilemsppList()Ljava/util/List;
-PLcom/android/internal/os/BatteryStatsHelper;->getPowerProfile()Lcom/android/internal/os/PowerProfile;
-HPLcom/android/internal/os/BatteryStatsHelper;->getProcessForegroundTimeMs(Landroid/os/BatteryStats$Uid;I)J
-PLcom/android/internal/os/BatteryStatsHelper;->getStats()Landroid/os/BatteryStats;
-PLcom/android/internal/os/BatteryStatsHelper;->getTotalPower()D
-PLcom/android/internal/os/BatteryStatsHelper;->getUsageList()Ljava/util/List;
-HPLcom/android/internal/os/BatteryStatsHelper;->isTypeService(Lcom/android/internal/os/BatterySipper;)Z
-HPLcom/android/internal/os/BatteryStatsHelper;->isTypeSystem(Lcom/android/internal/os/BatterySipper;)Z
-HPLcom/android/internal/os/BatteryStatsHelper;->makemAh(D)Ljava/lang/String;
-HPLcom/android/internal/os/BatteryStatsHelper;->processAppUsage(Landroid/util/SparseArray;)V
-PLcom/android/internal/os/BatteryStatsHelper;->processMiscUsage()V
-PLcom/android/internal/os/BatteryStatsHelper;->refreshStats(II)V
-PLcom/android/internal/os/BatteryStatsHelper;->refreshStats(ILandroid/util/SparseArray;)V
-HPLcom/android/internal/os/BatteryStatsHelper;->refreshStats(ILandroid/util/SparseArray;JJ)V
-HPLcom/android/internal/os/BatteryStatsHelper;->removeHiddenBatterySippers(Ljava/util/List;)D
-HPLcom/android/internal/os/BatteryStatsHelper;->shouldHideSipper(Lcom/android/internal/os/BatterySipper;)Z
-HPLcom/android/internal/os/BatteryStatsHelper;->smearScreenBatterySipper(Ljava/util/List;Lcom/android/internal/os/BatterySipper;)V
-HSPLcom/android/internal/os/BatteryStatsHistory$1;-><init>(Lcom/android/internal/os/BatteryStatsHistory;Ljava/util/Set;)V
-HSPLcom/android/internal/os/BatteryStatsHistory$1;->accept(Ljava/io/File;Ljava/lang/String;)Z
-PLcom/android/internal/os/BatteryStatsHistory;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsHistory;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Ljava/io/File;Landroid/os/Parcel;)V
-PLcom/android/internal/os/BatteryStatsHistory;->finishIteratingHistory()V
-HSPLcom/android/internal/os/BatteryStatsHistory;->getActiveFile()Landroid/util/AtomicFile;
-HSPLcom/android/internal/os/BatteryStatsHistory;->getFile(I)Landroid/util/AtomicFile;
-PLcom/android/internal/os/BatteryStatsHistory;->getHistoryUsedSize()I
-HPLcom/android/internal/os/BatteryStatsHistory;->getNextParcel(Landroid/os/BatteryStats$HistoryItem;)Landroid/os/Parcel;
-PLcom/android/internal/os/BatteryStatsHistory;->hasFreeDiskSpace()Z
-HPLcom/android/internal/os/BatteryStatsHistory;->readFileToParcel(Landroid/os/Parcel;Landroid/util/AtomicFile;)Z
-PLcom/android/internal/os/BatteryStatsHistory;->readFromParcel(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsHistory;->resetAllFiles()V
-HSPLcom/android/internal/os/BatteryStatsHistory;->setActiveFile(I)V
-HPLcom/android/internal/os/BatteryStatsHistory;->skipHead(Landroid/os/Parcel;)Z
-PLcom/android/internal/os/BatteryStatsHistory;->startIteratingHistory()Z
-PLcom/android/internal/os/BatteryStatsHistory;->startNextFile()V
-PLcom/android/internal/os/BatteryStatsHistory;->writeToParcel(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$1;-><init>(Lcom/android/internal/os/BatteryStatsImpl;)V
-PLcom/android/internal/os/BatteryStatsImpl$1;->run()V
-HSPLcom/android/internal/os/BatteryStatsImpl$2;-><init>(Lcom/android/internal/os/BatteryStatsImpl;)V
-PLcom/android/internal/os/BatteryStatsImpl$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$3;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Ljava/io/ByteArrayOutputStream;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$3;->run()V
-PLcom/android/internal/os/BatteryStatsImpl$4;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Landroid/os/Parcel;J)V
-PLcom/android/internal/os/BatteryStatsImpl$4;->run()V
-HSPLcom/android/internal/os/BatteryStatsImpl$5;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Landroid/os/Parcel;Landroid/util/AtomicFile;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$5;->run()V
-HSPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Lcom/android/internal/os/BatteryStatsImpl$Uid;ILcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
-PLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->abortLastDuration(Lcom/android/internal/os/BatteryStatsImpl;)V
-PLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->addDuration(Lcom/android/internal/os/BatteryStatsImpl;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->computeCurrentCountLocked()I
-HSPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->computeOverage(J)J
-HSPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->computeRunTimeLocked(J)J
-HSPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->onTimeStarted(JJJ)V
-PLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->onTimeStopped(JJJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->recomputeLastDuration(JZ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->reset(Z)Z
-PLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->writeToParcel(Landroid/os/Parcel;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$BluetoothActivityInfoCache;-><init>(Lcom/android/internal/os/BatteryStatsImpl;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$BluetoothActivityInfoCache;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl$1;)V
-PLcom/android/internal/os/BatteryStatsImpl$BluetoothActivityInfoCache;->set(Landroid/bluetooth/BluetoothActivityEnergyInfo;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Constants;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Landroid/os/Handler;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Constants;->startObserving(Landroid/content/ContentResolver;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Constants;->updateBatteryChargedDelayMsLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl$Constants;->updateConstants()V
-HSPLcom/android/internal/os/BatteryStatsImpl$Constants;->updateKernelUidReadersThrottleTime(JJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Constants;->updateProcStateCpuTimesReadDelayMs(JJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Constants;->updateTrackCpuTimesByProcStateLocked(ZZ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Constants;->updateUidRemoveDelay(J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;I)V
-PLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->detach()V
-HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getIdleTimeCounter()Landroid/os/BatteryStats$LongCounter;
-HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getIdleTimeCounter()Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
-HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getMonitoredRailChargeConsumedMaMs()Landroid/os/BatteryStats$LongCounter;
-HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getMonitoredRailChargeConsumedMaMs()Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
-HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getPowerCounter()Landroid/os/BatteryStats$LongCounter;
-HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getPowerCounter()Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
-HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getRxTimeCounter()Landroid/os/BatteryStats$LongCounter;
-HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getRxTimeCounter()Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
-PLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getScanTimeCounter()Landroid/os/BatteryStats$LongCounter;
-PLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getScanTimeCounter()Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
-PLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getSleepTimeCounter()Landroid/os/BatteryStats$LongCounter;
-PLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getSleepTimeCounter()Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
-HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getTxTimeCounters()[Landroid/os/BatteryStats$LongCounter;
-HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getTxTimeCounters()[Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
-HSPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->readSummaryFromParcel(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->reset(Z)V
-HSPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->writeSummaryToParcel(Landroid/os/Parcel;)V
-PLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Counter;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
-PLcom/android/internal/os/BatteryStatsImpl$Counter;->addAtomic(I)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Counter;->detach()V
-HPLcom/android/internal/os/BatteryStatsImpl$Counter;->getCountLocked(I)I
-HSPLcom/android/internal/os/BatteryStatsImpl$Counter;->onTimeStarted(JJJ)V
-HPLcom/android/internal/os/BatteryStatsImpl$Counter;->onTimeStopped(JJJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Counter;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Counter;->reset(Z)Z
-HPLcom/android/internal/os/BatteryStatsImpl$Counter;->stepAtomic()V
-HPLcom/android/internal/os/BatteryStatsImpl$Counter;->writeCounterToParcel(Landroid/os/Parcel;Lcom/android/internal/os/BatteryStatsImpl$Counter;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Counter;->writeSummaryFromParcelLocked(Landroid/os/Parcel;)V
-PLcom/android/internal/os/BatteryStatsImpl$Counter;->writeToParcel(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$DualTimer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Lcom/android/internal/os/BatteryStatsImpl$Uid;ILjava/util/ArrayList;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->detach()V
-HPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->getSubTimer()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->getSubTimer()Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->reset(Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->startRunningLocked(J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->stopRunningLocked(J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V
-PLcom/android/internal/os/BatteryStatsImpl$DualTimer;->writeToParcel(Landroid/os/Parcel;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->getCurrentDurationMsLocked(J)J
-HSPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->getMaxDurationMsLocked(J)J
-HSPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->getTotalDurationMsLocked(J)J
-HSPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->onTimeStarted(JJJ)V
-HPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->onTimeStopped(JJJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->reset(Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->startRunningLocked(J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->stopRunningLocked(J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V
-PLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->writeToParcel(Landroid/os/Parcel;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
-HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->addCountLocked(J)V
-HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->addCountLocked(JZ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->detach()V
-HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->getCountLocked(I)J
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->onTimeStarted(JJJ)V
-HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->onTimeStopped(JJJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->reset(Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->writeSummaryFromParcelLocked(Landroid/os/Parcel;)V
-HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->writeToParcel(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
-PLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->access$1400(Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->access$2300(Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->access$2600(Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;Landroid/os/Parcel;)V
-HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->addCountLocked([JZ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->detach()V
-HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->getCountsLocked(I)[J
-HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->getSize()I
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->onTimeStarted(JJJ)V
-HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->onTimeStopped(JJJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->readSummaryFromParcelLocked(Landroid/os/Parcel;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->reset(Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->writeSummaryToParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->writeSummaryToParcelLocked(Landroid/os/Parcel;Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;)V
-PLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->writeToParcel(Landroid/os/Parcel;)V
-PLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->writeToParcel(Landroid/os/Parcel;Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$MyHandler;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Landroid/os/Looper;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$MyHandler;->handleMessage(Landroid/os/Message;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;-><init>(Lcom/android/internal/os/BatteryStatsImpl;I)V
-HSPLcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->add(Ljava/lang/String;Ljava/lang/Object;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->cleanup()V
-HSPLcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->getMap()Landroid/util/ArrayMap;
-HSPLcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->startObject(Ljava/lang/String;)Ljava/lang/Object;
-HSPLcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->stopObject(Ljava/lang/String;)Ljava/lang/Object;
-HSPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
-HPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->add(JI)V
-HSPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->computeCurrentCountLocked()I
-HSPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->computeRunTimeLocked(J)J
-HSPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->endSample()V
-HSPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->getUpdateVersion()I
-HSPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->onTimeStarted(JJJ)V
-HPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->onTimeStopped(JJJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->setUpdateVersion(I)V
-HSPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->update(JI)V
-PLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->writeToParcel(Landroid/os/Parcel;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Lcom/android/internal/os/BatteryStatsImpl$Uid;ILjava/util/ArrayList;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->computeCurrentCountLocked()I
-HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->computeRunTimeLocked(J)J
-HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->detach()V
-PLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->isRunningLocked()Z
-HPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->onTimeStopped(JJJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->refreshTimersLocked(JLjava/util/ArrayList;Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;)J
-HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->reset(Z)Z
-PLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->setMark(J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->setTimeout(J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->startRunningLocked(J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->stopRunningLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->writeToParcel(Landroid/os/Parcel;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$SystemClocks;-><init>()V
-HSPLcom/android/internal/os/BatteryStatsImpl$SystemClocks;->elapsedRealtime()J
-HSPLcom/android/internal/os/BatteryStatsImpl$SystemClocks;->uptimeMillis()J
-HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;-><init>(Z)V
-HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->add(Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->computeRealtime(JI)J
-HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->computeUptime(JI)J
-HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->getRealtime(J)J
-HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->getUptime(J)J
-HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->init(JJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->isRunning()Z
-HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->readSummaryFromParcel(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->remove(Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->setRunning(ZJJ)Z
-HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->writeSummaryToParcel(Landroid/os/Parcel;JJ)V
-PLcom/android/internal/os/BatteryStatsImpl$TimeBase;->writeToParcel(Landroid/os/Parcel;JJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Timer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;ILcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Timer;->detach()V
-HPLcom/android/internal/os/BatteryStatsImpl$Timer;->getCountLocked(I)I
-HPLcom/android/internal/os/BatteryStatsImpl$Timer;->getTimeSinceMarkLocked(J)J
-HPLcom/android/internal/os/BatteryStatsImpl$Timer;->getTotalTimeLocked(JI)J
-HSPLcom/android/internal/os/BatteryStatsImpl$Timer;->onTimeStarted(JJJ)V
-PLcom/android/internal/os/BatteryStatsImpl$Timer;->onTimeStopped(JJJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Timer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Timer;->reset(Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl$Timer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V
-HPLcom/android/internal/os/BatteryStatsImpl$Timer;->writeTimerToParcel(Landroid/os/Parcel;Lcom/android/internal/os/BatteryStatsImpl$Timer;J)V
-PLcom/android/internal/os/BatteryStatsImpl$Timer;->writeToParcel(Landroid/os/Parcel;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$1;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Uid;Lcom/android/internal/os/BatteryStatsImpl;I)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$1;->instantiateObject()Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$1;->instantiateObject()Ljava/lang/Object;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$2;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Uid;Lcom/android/internal/os/BatteryStatsImpl;I)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$2;->instantiateObject()Lcom/android/internal/os/BatteryStatsImpl$DualTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$2;->instantiateObject()Ljava/lang/Object;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$3;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Uid;Lcom/android/internal/os/BatteryStatsImpl;I)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$3;->instantiateObject()Lcom/android/internal/os/BatteryStatsImpl$DualTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$3;->instantiateObject()Ljava/lang/Object;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->detach()V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->getBatteryStats()Lcom/android/internal/os/BatteryStatsImpl;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->getLaunches(I)I
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->getStartTime(JI)J
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->getStartTimeToNowLocked(J)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->getStarts(I)I
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->onTimeStarted(JJJ)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->onTimeStopped(JJJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->startLaunchedLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->startRunningLocked()V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->stopLaunchedLocked()V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->stopRunningLocked()V
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->writeToParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;->detach()V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;->getServiceStats()Landroid/util/ArrayMap;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;->getWakeupAlarmStats()Landroid/util/ArrayMap;
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;->noteWakeupAlarmLocked(Ljava/lang/String;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;->onTimeStarted(JJJ)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;->onTimeStopped(JJJ)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;->writeToParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Ljava/lang/String;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->addCpuTimeLocked(II)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->addCpuTimeLocked(IIZ)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->addExcessiveCpu(JJ)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->addForegroundTimeLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->countExcessivePowers()I
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->detach()V
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->getExcessivePower(I)Landroid/os/BatteryStats$Uid$Proc$ExcessivePower;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->getForegroundTime(I)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->getNumAnrs(I)I
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->getNumCrashes(I)I
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->getStarts(I)I
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->getSystemTime(I)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->getUserTime(I)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->incNumAnrsLocked()V
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->incNumCrashesLocked()V
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->incStartsLocked()V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->isActive()Z
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->onTimeStarted(JJJ)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->onTimeStopped(JJJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->readExcessivePowerFromParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->writeExcessivePowerToParcelLocked(Landroid/os/Parcel;)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->writeToParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl$Uid;I)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->getHandle()I
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->getSensorBackgroundTime()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->getSensorBackgroundTime()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->getSensorTime()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->getSensorTime()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->reset()Z
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->writeToParcelLocked(Landroid/os/Parcel;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl$Uid;)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;->getWakeTime(I)Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;->getWakeTime(I)Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;->reset()Z
-PLcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;->writeToParcelLocked(Landroid/os/Parcel;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;-><init>(Lcom/android/internal/os/BatteryStatsImpl;I)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->access$2400(Lcom/android/internal/os/BatteryStatsImpl$Uid;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->access$2402(Lcom/android/internal/os/BatteryStatsImpl$Uid;Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->access$2500(Lcom/android/internal/os/BatteryStatsImpl$Uid;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->access$2502(Lcom/android/internal/os/BatteryStatsImpl$Uid;Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->addIsolatedUid(I)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->createAggregatedPartialWakelockTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$DualTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->createAudioTurnedOnTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->createBluetoothScanResultBgCounterLocked()Lcom/android/internal/os/BatteryStatsImpl$Counter;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->createBluetoothScanResultCounterLocked()Lcom/android/internal/os/BatteryStatsImpl$Counter;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->createBluetoothScanTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$DualTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->createCameraTurnedOnTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->createFlashlightTurnedOnTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->createForegroundActivityTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->createForegroundServiceTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->createVibratorOnTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$BatchTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->createVideoTurnedOnTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->detachFromTimeBase()V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getAggregatedPartialWakelockTimer()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getAggregatedPartialWakelockTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getAudioTurnedOnTimer()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getAudioTurnedOnTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanBackgroundTimer()Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanBackgroundTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanResultBgCounter()Landroid/os/BatteryStats$Counter;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanResultBgCounter()Lcom/android/internal/os/BatteryStatsImpl$Counter;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanResultCounter()Landroid/os/BatteryStats$Counter;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanResultCounter()Lcom/android/internal/os/BatteryStatsImpl$Counter;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanTimer()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothUnoptimizedScanBackgroundTimer()Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothUnoptimizedScanBackgroundTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothUnoptimizedScanTimer()Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothUnoptimizedScanTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getCameraTurnedOnTimer()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getCameraTurnedOnTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getCpuActiveTime()J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getCpuClusterTimes()[J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getCpuFreqTimes(I)[J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getCpuFreqTimes(II)[J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getDeferredJobsCheckinLineLocked(Ljava/lang/StringBuilder;I)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getDeferredJobsLineLocked(Ljava/lang/StringBuilder;I)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getFlashlightTurnedOnTimer()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getFlashlightTurnedOnTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getForegroundActivityTimer()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getForegroundActivityTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getForegroundServiceTimer()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getForegroundServiceTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getFullWifiLockTime(JI)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getJobCompletionStats()Landroid/util/ArrayMap;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getJobStats()Landroid/util/ArrayMap;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getMobileRadioActiveCount(I)I
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getMobileRadioActiveTime(I)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getMobileRadioApWakeupCount(I)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getModemControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getMulticastWakelockStats()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getMulticastWakelockStats()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getNetworkActivityBytes(II)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getNetworkActivityPackets(II)J
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getOrCreateBluetoothControllerActivityLocked()Lcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getOrCreateWifiControllerActivityLocked()Lcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getPackageStats()Landroid/util/ArrayMap;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->getPackageStatsLocked(Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getPidStats()Landroid/util/SparseArray;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->getPidStatsLocked(I)Landroid/os/BatteryStats$Uid$Pid;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getProcessStateTime(IJI)J
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getProcessStateTimer(I)Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getProcessStateTimer(I)Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getProcessStats()Landroid/util/ArrayMap;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->getProcessStatsLocked(Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getScreenOffCpuFreqTimes(I)[J
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getScreenOffCpuFreqTimes(II)[J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getSensorStats()Landroid/util/SparseArray;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->getSensorTimerLocked(IZ)Lcom/android/internal/os/BatteryStatsImpl$DualTimer;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->getServiceStatsLocked(Ljava/lang/String;Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getSyncStats()Landroid/util/ArrayMap;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getSystemCpuTimeUs(I)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getTimeAtCpuSpeed(III)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getUid()I
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getUserActivityCount(II)I
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getUserCpuTimeUs(I)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getVibratorOnTimer()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getVibratorOnTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getVideoTurnedOnTimer()Landroid/os/BatteryStats$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getVideoTurnedOnTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWakelockStats()Landroid/util/ArrayMap;
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWakelockTimerLocked(Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;I)Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiMulticastTime(JI)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiRadioApWakeupCount(I)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiRunningTime(JI)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiScanActualTime(J)J
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiScanBackgroundCount(I)I
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiScanBackgroundTime(J)J
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiScanBackgroundTimer()Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiScanBackgroundTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiScanCount(I)I
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiScanTime(JI)J
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiScanTimer()Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiScanTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->hasUserActivity()Z
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->initNetworkActivityLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->initUserActivityLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->isInBackground()Z
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->makeProcessState(ILandroid/os/Parcel;)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteActivityPausedLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteActivityResumedLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteAudioTurnedOffLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteAudioTurnedOnLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteBluetoothScanResultsLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteBluetoothScanStartedLocked(JZ)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteBluetoothScanStoppedLocked(JZ)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteCameraTurnedOffLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteCameraTurnedOnLocked(J)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteForegroundServicePausedLocked(J)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteForegroundServiceResumedLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteFullWifiLockAcquiredLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteFullWifiLockReleasedLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteJobsDeferredLocked(IJ)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteNetworkActivityLocked(IJJ)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStartGps(J)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStartJobLocked(Ljava/lang/String;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStartSensor(IJ)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStartSyncLocked(Ljava/lang/String;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStartWakeLocked(ILjava/lang/String;IJ)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStopGps(J)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStopJobLocked(Ljava/lang/String;JI)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStopSensor(IJ)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStopSyncLocked(Ljava/lang/String;J)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStopWakeLocked(ILjava/lang/String;IJ)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteUserActivityLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteVibratorOffLocked()V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteVibratorOnLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteVideoTurnedOffLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteVideoTurnedOnLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteWifiMulticastDisabledLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteWifiMulticastEnabledLocked(J)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteWifiRadioApWakeupLocked()V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteWifiScanStartedLocked(J)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->noteWifiScanStoppedLocked(J)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->nullIfAllZeros(Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;I)[J
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->readJobCompletionsFromParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->readJobSummaryFromParcelLocked(Ljava/lang/String;Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->readSyncSummaryFromParcelLocked(Ljava/lang/String;Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->readWakeSummaryFromParcelLocked(Ljava/lang/String;Landroid/os/Parcel;)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->removeIsolatedUid(I)V
-PLcom/android/internal/os/BatteryStatsImpl$Uid;->reportExcessiveCpuLocked(Ljava/lang/String;JJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->reset(JJ)Z
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->updateOnBatteryBgTimeBase(JJ)Z
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->updateOnBatteryScreenOffBgTimeBase(JJ)Z
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->updateUidProcessStateLocked(I)V
-HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->writeJobCompletionsToParcelLocked(Landroid/os/Parcel;)V
-HPLcom/android/internal/os/BatteryStatsImpl$Uid;->writeToParcelLocked(Landroid/os/Parcel;JJ)V
-PLcom/android/internal/os/BatteryStatsImpl$UidToRemove;-><init>(Lcom/android/internal/os/BatteryStatsImpl;IIJ)V
-PLcom/android/internal/os/BatteryStatsImpl$UidToRemove;-><init>(Lcom/android/internal/os/BatteryStatsImpl;IJ)V
-PLcom/android/internal/os/BatteryStatsImpl$UidToRemove;->remove()V
-HSPLcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;-><init>()V
-HPLcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;->exists(I)Z
-HSPLcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;->refreshUserIds()V
-HSPLcom/android/internal/os/BatteryStatsImpl;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Ljava/io/File;Landroid/os/Handler;Lcom/android/internal/os/BatteryStatsImpl$PlatformIdleStateCallback;Lcom/android/internal/os/BatteryStatsImpl$RailEnergyDataCallback;Lcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;-><init>(Ljava/io/File;Landroid/os/Handler;Lcom/android/internal/os/BatteryStatsImpl$PlatformIdleStateCallback;Lcom/android/internal/os/BatteryStatsImpl$RailEnergyDataCallback;Lcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;)V
-PLcom/android/internal/os/BatteryStatsImpl;->access$008(Lcom/android/internal/os/BatteryStatsImpl;)I
-HSPLcom/android/internal/os/BatteryStatsImpl;->access$100(Lcom/android/internal/os/BatteryStatsImpl;)Lcom/android/internal/os/BatteryStatsImpl$BatteryCallback;
-HSPLcom/android/internal/os/BatteryStatsImpl;->access$1000(Lcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->access$1100([[Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->access$1200(Lcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->access$1300([[Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->access$2200(Lcom/android/internal/os/BatteryStatsImpl;Landroid/os/Parcel;Landroid/util/AtomicFile;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->access$400()I
-PLcom/android/internal/os/BatteryStatsImpl;->access$500(Lcom/android/internal/os/BatteryStatsImpl;Z)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->access$600(Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->access$700([Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->access$800(Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->access$900([Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->addHistoryBufferLocked(JBLandroid/os/BatteryStats$HistoryItem;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->addHistoryBufferLocked(JLandroid/os/BatteryStats$HistoryItem;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->addHistoryEventLocked(JJILjava/lang/String;I)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->addHistoryRecordInnerLocked(JLandroid/os/BatteryStats$HistoryItem;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->addHistoryRecordLocked(JJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->addIsolatedUidLocked(II)V
-PLcom/android/internal/os/BatteryStatsImpl;->addModemTxPowerToHistory(Landroid/telephony/ModemActivityInfo;)V
-PLcom/android/internal/os/BatteryStatsImpl;->addPackageChange(Landroid/os/BatteryStats$PackageChange;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->aggregateLastWakeupUptimeLocked(J)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->buildBatteryLevelInt(Landroid/os/BatteryStats$HistoryItem;)I
-HSPLcom/android/internal/os/BatteryStatsImpl;->buildStateInt(Landroid/os/BatteryStats$HistoryItem;)I
-HSPLcom/android/internal/os/BatteryStatsImpl;->clearHistoryLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->clearPendingRemovedUids()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->commitPendingDataToDisk(Landroid/os/Parcel;Landroid/util/AtomicFile;)V
-PLcom/android/internal/os/BatteryStatsImpl;->computeBatteryRealtime(JI)J
-PLcom/android/internal/os/BatteryStatsImpl;->computeBatteryScreenOffRealtime(JI)J
-PLcom/android/internal/os/BatteryStatsImpl;->computeBatteryScreenOffUptime(JI)J
-HPLcom/android/internal/os/BatteryStatsImpl;->computeBatteryTimeRemaining(J)J
-PLcom/android/internal/os/BatteryStatsImpl;->computeBatteryUptime(JI)J
-PLcom/android/internal/os/BatteryStatsImpl;->computeChargeTimeRemaining(J)J
-HSPLcom/android/internal/os/BatteryStatsImpl;->computeHistoryStepDetails(Landroid/os/BatteryStats$HistoryStepDetails;Landroid/os/BatteryStats$HistoryStepDetails;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->computeRealtime(JI)J
-HSPLcom/android/internal/os/BatteryStatsImpl;->computeUptime(JI)J
-HSPLcom/android/internal/os/BatteryStatsImpl;->copyFromAllUidsCpuTimes()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->copyFromAllUidsCpuTimes(ZZ)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->detachIfNotNull(Lcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->detachIfNotNull(Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->detachIfNotNull([Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->detachIfNotNull([[Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
-PLcom/android/internal/os/BatteryStatsImpl;->dumpLocked(Landroid/content/Context;Ljava/io/PrintWriter;IIJ)V
-PLcom/android/internal/os/BatteryStatsImpl;->excludeFromStringArray([Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
-HSPLcom/android/internal/os/BatteryStatsImpl;->finishAddingCpuLocked(IIIIIIII)V
-PLcom/android/internal/os/BatteryStatsImpl;->finishIteratingHistoryLocked()V
-PLcom/android/internal/os/BatteryStatsImpl;->getAttributionUid(ILandroid/os/WorkSource$WorkChain;)I
-PLcom/android/internal/os/BatteryStatsImpl;->getBatteryRealtime(J)J
-PLcom/android/internal/os/BatteryStatsImpl;->getBatteryUptime(J)J
-HSPLcom/android/internal/os/BatteryStatsImpl;->getBatteryUptimeLocked()J
-PLcom/android/internal/os/BatteryStatsImpl;->getBluetoothControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
-PLcom/android/internal/os/BatteryStatsImpl;->getBluetoothScanTime(JI)J
-HPLcom/android/internal/os/BatteryStatsImpl;->getCellularBatteryStats()Landroid/os/connectivity/CellularBatteryStats;
-PLcom/android/internal/os/BatteryStatsImpl;->getChargeLevelStepTracker()Landroid/os/BatteryStats$LevelStepTracker;
-PLcom/android/internal/os/BatteryStatsImpl;->getCpuFreqs()[J
-PLcom/android/internal/os/BatteryStatsImpl;->getCurrentDailyStartTime()J
-PLcom/android/internal/os/BatteryStatsImpl;->getDailyChargeLevelStepTracker()Landroid/os/BatteryStats$LevelStepTracker;
-PLcom/android/internal/os/BatteryStatsImpl;->getDailyDischargeLevelStepTracker()Landroid/os/BatteryStats$LevelStepTracker;
-PLcom/android/internal/os/BatteryStatsImpl;->getDailyItemLocked(I)Landroid/os/BatteryStats$DailyItem;
-PLcom/android/internal/os/BatteryStatsImpl;->getDailyPackageChanges()Ljava/util/ArrayList;
-PLcom/android/internal/os/BatteryStatsImpl;->getDeltaModemActivityInfo(Landroid/telephony/ModemActivityInfo;)Landroid/telephony/ModemActivityInfo;
-PLcom/android/internal/os/BatteryStatsImpl;->getDeviceIdleModeCount(II)I
-PLcom/android/internal/os/BatteryStatsImpl;->getDeviceIdleModeTime(IJI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getDeviceIdlingCount(II)I
-PLcom/android/internal/os/BatteryStatsImpl;->getDeviceIdlingTime(IJI)J
-HSPLcom/android/internal/os/BatteryStatsImpl;->getDischargeAmountScreenDozeSinceCharge()I
-HSPLcom/android/internal/os/BatteryStatsImpl;->getDischargeAmountScreenOffSinceCharge()I
-HSPLcom/android/internal/os/BatteryStatsImpl;->getDischargeAmountScreenOnSinceCharge()I
-PLcom/android/internal/os/BatteryStatsImpl;->getDischargeLevelStepTracker()Landroid/os/BatteryStats$LevelStepTracker;
-PLcom/android/internal/os/BatteryStatsImpl;->getEndPlatformVersion()Ljava/lang/String;
-PLcom/android/internal/os/BatteryStatsImpl;->getEstimatedBatteryCapacity()I
-PLcom/android/internal/os/BatteryStatsImpl;->getExternalStatsCollectionRateLimitMs()J
-PLcom/android/internal/os/BatteryStatsImpl;->getGlobalWifiRunningTime(JI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getGpsBatteryDrainMaMs()J
-PLcom/android/internal/os/BatteryStatsImpl;->getGpsBatteryStats()Landroid/os/connectivity/GpsBatteryStats;
-PLcom/android/internal/os/BatteryStatsImpl;->getGpsSignalQualityTime(IJI)J
-HSPLcom/android/internal/os/BatteryStatsImpl;->getHighDischargeAmountSinceCharge()I
-PLcom/android/internal/os/BatteryStatsImpl;->getHistoryBaseTime()J
-PLcom/android/internal/os/BatteryStatsImpl;->getHistoryStringPoolBytes()I
-HPLcom/android/internal/os/BatteryStatsImpl;->getHistoryStringPoolSize()I
-HPLcom/android/internal/os/BatteryStatsImpl;->getHistoryTagPoolString(I)Ljava/lang/String;
-HPLcom/android/internal/os/BatteryStatsImpl;->getHistoryTagPoolUid(I)I
-PLcom/android/internal/os/BatteryStatsImpl;->getHistoryTotalSize()I
-PLcom/android/internal/os/BatteryStatsImpl;->getHistoryUsedSize()I
-PLcom/android/internal/os/BatteryStatsImpl;->getInteractiveTime(JI)J
-HSPLcom/android/internal/os/BatteryStatsImpl;->getIsOnBattery()Z
-PLcom/android/internal/os/BatteryStatsImpl;->getKernelMemoryStats()Landroid/util/LongSparseArray;
-PLcom/android/internal/os/BatteryStatsImpl;->getKernelWakelockStats()Ljava/util/Map;
-HSPLcom/android/internal/os/BatteryStatsImpl;->getKernelWakelockTimerLocked(Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;
-PLcom/android/internal/os/BatteryStatsImpl;->getLongestDeviceIdleModeTime(I)J
-HSPLcom/android/internal/os/BatteryStatsImpl;->getLowDischargeAmountSinceCharge()I
-PLcom/android/internal/os/BatteryStatsImpl;->getMaxLearnedBatteryCapacity()I
-PLcom/android/internal/os/BatteryStatsImpl;->getMinLearnedBatteryCapacity()I
-PLcom/android/internal/os/BatteryStatsImpl;->getMobileIfaces()[Ljava/lang/String;
-PLcom/android/internal/os/BatteryStatsImpl;->getMobileRadioActiveAdjustedTime(I)J
-PLcom/android/internal/os/BatteryStatsImpl;->getMobileRadioActiveCount(I)I
-HPLcom/android/internal/os/BatteryStatsImpl;->getMobileRadioActiveTime(JI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getMobileRadioActiveUnknownCount(I)I
-PLcom/android/internal/os/BatteryStatsImpl;->getMobileRadioActiveUnknownTime(I)J
-PLcom/android/internal/os/BatteryStatsImpl;->getModemControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
-PLcom/android/internal/os/BatteryStatsImpl;->getNetworkActivityBytes(II)J
-HPLcom/android/internal/os/BatteryStatsImpl;->getNetworkActivityPackets(II)J
-HPLcom/android/internal/os/BatteryStatsImpl;->getNextHistoryLocked(Landroid/os/BatteryStats$HistoryItem;)Z
-PLcom/android/internal/os/BatteryStatsImpl;->getNextMaxDailyDeadline()J
-PLcom/android/internal/os/BatteryStatsImpl;->getNextMinDailyDeadline()J
-PLcom/android/internal/os/BatteryStatsImpl;->getNumConnectivityChange(I)I
-PLcom/android/internal/os/BatteryStatsImpl;->getPackageStatsLocked(ILjava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;
-PLcom/android/internal/os/BatteryStatsImpl;->getParcelVersion()I
-HPLcom/android/internal/os/BatteryStatsImpl;->getPhoneDataConnectionCount(II)I
-HPLcom/android/internal/os/BatteryStatsImpl;->getPhoneDataConnectionTime(IJI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getPhoneDataConnectionTimer(I)Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl;->getPhoneDataConnectionTimer(I)Lcom/android/internal/os/BatteryStatsImpl$Timer;
-PLcom/android/internal/os/BatteryStatsImpl;->getPhoneOnTime(JI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalScanningTime(JI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalScanningTimer()Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalScanningTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
-PLcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalStrengthCount(II)I
-HPLcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalStrengthTime(IJI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalStrengthTimer(I)Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalStrengthTimer(I)Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HSPLcom/android/internal/os/BatteryStatsImpl;->getPowerManagerWakeLockLevel(I)I
-PLcom/android/internal/os/BatteryStatsImpl;->getPowerSaveModeEnabledTime(JI)J
-HSPLcom/android/internal/os/BatteryStatsImpl;->getProcessStatsLocked(ILjava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;
-PLcom/android/internal/os/BatteryStatsImpl;->getRpmStats()Ljava/util/Map;
-HSPLcom/android/internal/os/BatteryStatsImpl;->getRpmTimerLocked(Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;
-HPLcom/android/internal/os/BatteryStatsImpl;->getScreenBrightnessTime(IJI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getScreenBrightnessTimer(I)Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl;->getScreenBrightnessTimer(I)Lcom/android/internal/os/BatteryStatsImpl$Timer;
-PLcom/android/internal/os/BatteryStatsImpl;->getScreenDozeTime(JI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getScreenOffRpmStats()Ljava/util/Map;
-PLcom/android/internal/os/BatteryStatsImpl;->getScreenOnCount(I)I
-PLcom/android/internal/os/BatteryStatsImpl;->getScreenOnTime(JI)J
-HSPLcom/android/internal/os/BatteryStatsImpl;->getServiceStatsLocked(ILjava/lang/String;Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
-HSPLcom/android/internal/os/BatteryStatsImpl;->getStartClockTime()J
-PLcom/android/internal/os/BatteryStatsImpl;->getStartCount()I
-PLcom/android/internal/os/BatteryStatsImpl;->getStartPlatformVersion()Ljava/lang/String;
-PLcom/android/internal/os/BatteryStatsImpl;->getUahDischarge(I)J
-PLcom/android/internal/os/BatteryStatsImpl;->getUahDischargeDeepDoze(I)J
-PLcom/android/internal/os/BatteryStatsImpl;->getUahDischargeLightDoze(I)J
-PLcom/android/internal/os/BatteryStatsImpl;->getUahDischargeScreenDoze(I)J
-PLcom/android/internal/os/BatteryStatsImpl;->getUahDischargeScreenOff(I)J
-PLcom/android/internal/os/BatteryStatsImpl;->getUidStats()Landroid/util/SparseArray;
-HSPLcom/android/internal/os/BatteryStatsImpl;->getUidStatsLocked(I)Lcom/android/internal/os/BatteryStatsImpl$Uid;
-PLcom/android/internal/os/BatteryStatsImpl;->getWakeupReasonStats()Ljava/util/Map;
-HSPLcom/android/internal/os/BatteryStatsImpl;->getWakeupReasonTimerLocked(Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiActiveTime(JI)J
-HPLcom/android/internal/os/BatteryStatsImpl;->getWifiBatteryStats()Landroid/os/connectivity/WifiBatteryStats;
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiIfaces()[Ljava/lang/String;
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiMulticastWakelockCount(I)I
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiMulticastWakelockTime(JI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiOnTime(JI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiSignalStrengthCount(II)I
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiSignalStrengthTime(IJI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiSignalStrengthTimer(I)Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiSignalStrengthTimer(I)Lcom/android/internal/os/BatteryStatsImpl$Timer;
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiStateCount(II)I
-HPLcom/android/internal/os/BatteryStatsImpl;->getWifiStateTime(IJI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiStateTimer(I)Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiStateTimer(I)Lcom/android/internal/os/BatteryStatsImpl$Timer;
-HPLcom/android/internal/os/BatteryStatsImpl;->getWifiSupplStateCount(II)I
-HPLcom/android/internal/os/BatteryStatsImpl;->getWifiSupplStateTime(IJI)J
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiSupplStateTimer(I)Landroid/os/BatteryStats$Timer;
-PLcom/android/internal/os/BatteryStatsImpl;->getWifiSupplStateTimer(I)Lcom/android/internal/os/BatteryStatsImpl$Timer;
-PLcom/android/internal/os/BatteryStatsImpl;->hasBluetoothActivityReporting()Z
-PLcom/android/internal/os/BatteryStatsImpl;->hasWifiActivityReporting()Z
-PLcom/android/internal/os/BatteryStatsImpl;->includeInStringArray([Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
-HSPLcom/android/internal/os/BatteryStatsImpl;->init(Lcom/android/internal/os/BatteryStatsImpl$Clocks;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->initActiveHistoryEventsLocked(JJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->initDischarge()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->initTimes(JJ)V
-PLcom/android/internal/os/BatteryStatsImpl;->isCharging()Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->isOnBattery()Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->isOnBattery(II)Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->isOnBatteryLocked()Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->isOnBatteryScreenOffLocked()Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->isScreenDoze(I)Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->isScreenOff(I)Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->isScreenOn(I)Z
-HPLcom/android/internal/os/BatteryStatsImpl;->lambda$readKernelUidCpuActiveTimesLocked$2$BatteryStatsImpl(ZILjava/lang/Long;)V
-HPLcom/android/internal/os/BatteryStatsImpl;->lambda$readKernelUidCpuClusterTimesLocked$3$BatteryStatsImpl(ZI[J)V
-HPLcom/android/internal/os/BatteryStatsImpl;->lambda$readKernelUidCpuFreqTimesLocked$1$BatteryStatsImpl(ZZZIII[J)V
-HPLcom/android/internal/os/BatteryStatsImpl;->lambda$readKernelUidCpuTimesLocked$0$BatteryStatsImpl(IZLandroid/util/SparseLongArray;I[J)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->mapUid(I)I
-HSPLcom/android/internal/os/BatteryStatsImpl;->markPartialTimersAsEligible()V
-PLcom/android/internal/os/BatteryStatsImpl;->noteActivityPausedLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteActivityResumedLocked(I)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteAlarmFinishLocked(Ljava/lang/String;Landroid/os/WorkSource;I)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteAlarmStartLocked(Ljava/lang/String;Landroid/os/WorkSource;I)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteAlarmStartOrFinishLocked(ILjava/lang/String;Landroid/os/WorkSource;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteAudioOffLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteAudioOnLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteBluetoothScanResultsFromSourceLocked(Landroid/os/WorkSource;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteBluetoothScanStartedFromSourceLocked(Landroid/os/WorkSource;Z)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteBluetoothScanStartedLocked(Landroid/os/WorkSource$WorkChain;IZ)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteBluetoothScanStoppedFromSourceLocked(Landroid/os/WorkSource;Z)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteBluetoothScanStoppedLocked(Landroid/os/WorkSource$WorkChain;IZ)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteCameraOffLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteCameraOnLocked(I)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteChangeWakelockFromSourceLocked(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;ILandroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZ)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteConnectivityChangedLocked(ILjava/lang/String;)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteCurrentTimeChangedLocked()V
-PLcom/android/internal/os/BatteryStatsImpl;->noteDeviceIdleModeLocked(ILjava/lang/String;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteEventLocked(ILjava/lang/String;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteFullWifiLockAcquiredFromSourceLocked(Landroid/os/WorkSource;)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteFullWifiLockAcquiredLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteFullWifiLockReleasedFromSourceLocked(Landroid/os/WorkSource;)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteFullWifiLockReleasedLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteGpsChangedLocked(Landroid/os/WorkSource;Landroid/os/WorkSource;)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteGpsSignalQualityLocked(I)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->noteInteractiveLocked(Z)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteJobFinishLocked(Ljava/lang/String;II)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteJobStartLocked(Ljava/lang/String;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteJobsDeferredLocked(IIJ)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteLongPartialWakeLockFinishInternal(Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteLongPartialWakeLockStartInternal(Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteLongPartialWakelockFinish(Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteLongPartialWakelockFinishFromSource(Ljava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteLongPartialWakelockStart(Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteLongPartialWakelockStartFromSource(Ljava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteNetworkInterfaceTypeLocked(Ljava/lang/String;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->notePackageInstalledLocked(Ljava/lang/String;J)V
-PLcom/android/internal/os/BatteryStatsImpl;->notePhoneSignalStrengthLocked(Landroid/telephony/SignalStrength;)V
-PLcom/android/internal/os/BatteryStatsImpl;->notePhoneStateLocked(II)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->notePowerSaveModeLocked(Z)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteProcessAnrLocked(Ljava/lang/String;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteProcessCrashLocked(Ljava/lang/String;I)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->noteProcessDiedLocked(II)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->noteProcessFinishLocked(Ljava/lang/String;I)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->noteProcessStartLocked(Ljava/lang/String;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteResetBluetoothScanLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->noteScreenBrightnessLocked(I)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->noteScreenStateLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteStartGpsLocked(ILandroid/os/WorkSource$WorkChain;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->noteStartSensorLocked(II)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteStartWakeFromSourceLocked(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZ)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->noteStartWakeLocked(IILandroid/os/WorkSource$WorkChain;Ljava/lang/String;Ljava/lang/String;IZJJ)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteStopGpsLocked(ILandroid/os/WorkSource$WorkChain;)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteStopSensorLocked(II)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteStopWakeFromSourceLocked(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;I)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->noteStopWakeLocked(IILandroid/os/WorkSource$WorkChain;Ljava/lang/String;Ljava/lang/String;IJJ)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteSyncFinishLocked(Ljava/lang/String;I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteSyncStartLocked(Ljava/lang/String;I)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->noteUidProcessStateLocked(II)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->noteUsbConnectionStateLocked(Z)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteUserActivityLocked(II)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteVibratorOffLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteVibratorOnLocked(IJ)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteVideoOffLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteVideoOnLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteWakeUpLocked(Ljava/lang/String;I)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteWakeupReasonLocked(Ljava/lang/String;)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteWakupAlarmLocked(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteWifiMulticastDisabledLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteWifiMulticastEnabledLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteWifiOffLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->noteWifiOnLocked()V
-PLcom/android/internal/os/BatteryStatsImpl;->noteWifiRadioApWakeupLocked(JJI)V
-HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiRadioPowerState(IJI)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteWifiRssiChangedLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteWifiScanStartedFromSourceLocked(Landroid/os/WorkSource;)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteWifiScanStartedLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteWifiScanStoppedFromSourceLocked(Landroid/os/WorkSource;)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteWifiScanStoppedLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteWifiStateLocked(ILjava/lang/String;)V
-PLcom/android/internal/os/BatteryStatsImpl;->noteWifiSupplicantStateChangedLocked(IZ)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->postBatteryNeedsCpuUpdateMsg()V
-PLcom/android/internal/os/BatteryStatsImpl;->prepareForDumpLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->pullPendingStateUpdatesLocked()V
-PLcom/android/internal/os/BatteryStatsImpl;->readBatteryLevelInt(ILandroid/os/BatteryStats$HistoryItem;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->readDailyItemTagDetailsLocked(Lorg/xmlpull/v1/XmlPullParser;Landroid/os/BatteryStats$DailyItem;ZLjava/lang/String;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->readDailyItemTagLocked(Lorg/xmlpull/v1/XmlPullParser;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->readDailyItemsLocked(Lorg/xmlpull/v1/XmlPullParser;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->readDailyStatsLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->readHistoryBuffer(Landroid/os/Parcel;Z)V
-HPLcom/android/internal/os/BatteryStatsImpl;->readHistoryDelta(Landroid/os/Parcel;Landroid/os/BatteryStats$HistoryItem;)V
-PLcom/android/internal/os/BatteryStatsImpl;->readHistoryTag(ILandroid/os/BatteryStats$HistoryTag;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->readKernelUidCpuActiveTimesLocked(Z)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->readKernelUidCpuClusterTimesLocked(Z)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->readKernelUidCpuFreqTimesLocked(Ljava/util/ArrayList;ZZ)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->readKernelUidCpuTimesLocked(Ljava/util/ArrayList;Landroid/util/SparseLongArray;Z)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->readLocked()V
-HPLcom/android/internal/os/BatteryStatsImpl;->readNetworkStatsLocked([Ljava/lang/String;)Landroid/net/NetworkStats;
-HSPLcom/android/internal/os/BatteryStatsImpl;->readOldHistory(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->readSummaryFromParcel(Landroid/os/Parcel;)V
-PLcom/android/internal/os/BatteryStatsImpl;->recordCurrentTimeChangeLocked(JJJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->recordDailyStatsIfNeededLocked(Z)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->recordDailyStatsLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->registerUsbStateReceiver(Landroid/content/Context;)V
-PLcom/android/internal/os/BatteryStatsImpl;->removeIsolatedUidLocked(I)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->reportChangesToStatsLog(Landroid/os/BatteryStats$HistoryItem;III)V
-PLcom/android/internal/os/BatteryStatsImpl;->reportExcessiveCpuLocked(ILjava/lang/String;JJ)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->requestImmediateCpuUpdate()V
-PLcom/android/internal/os/BatteryStatsImpl;->requestWakelockCpuUpdate()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->resetAllStatsLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->resetIfNotNull(Lcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->resetIfNotNull(Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->resetIfNotNull([Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->resetIfNotNull([[Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->scheduleRemoveIsolatedUidLocked(II)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->scheduleSyncExternalStatsLocked(Ljava/lang/String;I)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->setBatteryStateLocked(IIIIIIII)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->setCallback(Lcom/android/internal/os/BatteryStatsImpl$BatteryCallback;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->setChargingLocked(Z)Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->setExternalStatsSyncLocked(Lcom/android/internal/os/BatteryStatsImpl$ExternalStatsSync;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->setOnBatteryLocked(JJZIII)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->setPowerProfileLocked(Lcom/android/internal/os/PowerProfile;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->setRadioScanningTimeoutLocked(J)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->startAddingCpuLocked()Z
-HPLcom/android/internal/os/BatteryStatsImpl;->startIteratingHistoryLocked()Z
-PLcom/android/internal/os/BatteryStatsImpl;->startIteratingOldHistoryLocked()Z
-HSPLcom/android/internal/os/BatteryStatsImpl;->startRecordingHistory(JJZ)V
-PLcom/android/internal/os/BatteryStatsImpl;->stopAllGpsSignalQualityTimersLocked(I)V
-PLcom/android/internal/os/BatteryStatsImpl;->stopAllPhoneSignalStrengthTimersLocked(I)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->systemServicesReady(Landroid/content/Context;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->trackPerProcStateCpuTimes()Z
-PLcom/android/internal/os/BatteryStatsImpl;->updateAllPhoneStateLocked(III)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->updateBatteryPropertiesLocked()V
-HPLcom/android/internal/os/BatteryStatsImpl;->updateBluetoothStateLocked(Landroid/bluetooth/BluetoothActivityEnergyInfo;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->updateCpuTimeLocked(ZZ)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->updateDailyDeadlineLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->updateDischargeScreenLevelsLocked(II)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->updateKernelMemoryBandwidthLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->updateKernelWakelocksLocked()V
-HPLcom/android/internal/os/BatteryStatsImpl;->updateMobileRadioState(Landroid/telephony/ModemActivityInfo;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->updateNewDischargeScreenLevelLocked(I)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->updateOldDischargeScreenLevelLocked(I)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->updateRailStatsLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->updateRpmStatsLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->updateTimeBasesLocked(ZIJJ)V
-HPLcom/android/internal/os/BatteryStatsImpl;->updateWifiState(Landroid/os/connectivity/WifiActivityEnergyInfo;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->writeAsyncLocked()V
-HSPLcom/android/internal/os/BatteryStatsImpl;->writeDailyItemsLocked(Lorg/xmlpull/v1/XmlSerializer;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->writeDailyLevelSteps(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Landroid/os/BatteryStats$LevelStepTracker;Ljava/lang/StringBuilder;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->writeHistoryBuffer(Landroid/os/Parcel;ZZ)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->writeHistoryDelta(Landroid/os/Parcel;Landroid/os/BatteryStats$HistoryItem;Landroid/os/BatteryStats$HistoryItem;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->writeHistoryLocked(Z)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->writeHistoryTag(Landroid/os/BatteryStats$HistoryTag;)I
-HSPLcom/android/internal/os/BatteryStatsImpl;->writeOldHistory(Landroid/os/Parcel;)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->writeParcelToFileLocked(Landroid/os/Parcel;Landroid/util/AtomicFile;Z)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->writeStatsLocked(Z)V
-HSPLcom/android/internal/os/BatteryStatsImpl;->writeSummaryToParcel(Landroid/os/Parcel;Z)V
-PLcom/android/internal/os/BatteryStatsImpl;->writeToParcel(Landroid/os/Parcel;I)V
-HPLcom/android/internal/os/BatteryStatsImpl;->writeToParcelLocked(Landroid/os/Parcel;ZI)V
-PLcom/android/internal/os/BinderCallsStats$CallStat;-><init>(ILjava/lang/Class;IZ)V
-HSPLcom/android/internal/os/BinderCallsStats$CallStatKey;-><init>()V
-HSPLcom/android/internal/os/BinderCallsStats$CallStatKey;->access$002(Lcom/android/internal/os/BinderCallsStats$CallStatKey;Z)Z
-HPLcom/android/internal/os/BinderCallsStats$CallStatKey;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/internal/os/BinderCallsStats$CallStatKey;->hashCode()I
-PLcom/android/internal/os/BinderCallsStats$ExportedCallStat;-><init>()V
-HSPLcom/android/internal/os/BinderCallsStats$Injector;-><init>()V
-HSPLcom/android/internal/os/BinderCallsStats$Injector;->getRandomGenerator()Ljava/util/Random;
-HSPLcom/android/internal/os/BinderCallsStats$UidEntry;-><init>(I)V
-HSPLcom/android/internal/os/BinderCallsStats$UidEntry;->get(ILjava/lang/Class;IZ)Lcom/android/internal/os/BinderCallsStats$CallStat;
-HPLcom/android/internal/os/BinderCallsStats$UidEntry;->getCallStatsList()Ljava/util/Collection;
-HPLcom/android/internal/os/BinderCallsStats$UidEntry;->getOrCreate(ILjava/lang/Class;IZZ)Lcom/android/internal/os/BinderCallsStats$CallStat;
-HSPLcom/android/internal/os/BinderCallsStats;-><init>(Lcom/android/internal/os/BinderCallsStats$Injector;)V
-HSPLcom/android/internal/os/BinderCallsStats;->callEnded(Lcom/android/internal/os/BinderInternal$CallSession;III)V
-HSPLcom/android/internal/os/BinderCallsStats;->callStarted(Landroid/os/Binder;II)Lcom/android/internal/os/BinderInternal$CallSession;
-PLcom/android/internal/os/BinderCallsStats;->callThrewException(Lcom/android/internal/os/BinderInternal$CallSession;Ljava/lang/Exception;)V
-PLcom/android/internal/os/BinderCallsStats;->compareByBinderClassAndCode(Lcom/android/internal/os/BinderCallsStats$ExportedCallStat;Lcom/android/internal/os/BinderCallsStats$ExportedCallStat;)I
-PLcom/android/internal/os/BinderCallsStats;->compareByCpuDesc(Lcom/android/internal/os/BinderCallsStats$ExportedCallStat;Lcom/android/internal/os/BinderCallsStats$ExportedCallStat;)I
-PLcom/android/internal/os/BinderCallsStats;->createDebugEntry(Ljava/lang/String;J)Lcom/android/internal/os/BinderCallsStats$ExportedCallStat;
-PLcom/android/internal/os/BinderCallsStats;->dump(Ljava/io/PrintWriter;Lcom/android/internal/os/AppIdToPackageMap;Z)V
-HPLcom/android/internal/os/BinderCallsStats;->dumpLocked(Ljava/io/PrintWriter;Lcom/android/internal/os/AppIdToPackageMap;Z)V
-HSPLcom/android/internal/os/BinderCallsStats;->getCallingUid()I
-PLcom/android/internal/os/BinderCallsStats;->getDefaultTransactionNameMethod(Ljava/lang/Class;)Ljava/lang/reflect/Method;
-HPLcom/android/internal/os/BinderCallsStats;->getElapsedRealtimeMicro()J
-HPLcom/android/internal/os/BinderCallsStats;->getExportedCallStats()Ljava/util/ArrayList;
-HPLcom/android/internal/os/BinderCallsStats;->getThreadTimeMicro()J
-HSPLcom/android/internal/os/BinderCallsStats;->getUidEntry(I)Lcom/android/internal/os/BinderCallsStats$UidEntry;
-PLcom/android/internal/os/BinderCallsStats;->lambda$233x_Qux4c_AiqShYaWwvFplEXs(Lcom/android/internal/os/BinderCallsStats$ExportedCallStat;Lcom/android/internal/os/BinderCallsStats$ExportedCallStat;)I
-PLcom/android/internal/os/BinderCallsStats;->lambda$dumpLocked$0(Lcom/android/internal/os/BinderCallsStats$UidEntry;)D
-PLcom/android/internal/os/BinderCallsStats;->lambda$dumpLocked$2(Ljava/util/List;Ljava/util/Map$Entry;)V
-PLcom/android/internal/os/BinderCallsStats;->lambda$dumpLocked$3(Landroid/util/Pair;Landroid/util/Pair;)I
-PLcom/android/internal/os/BinderCallsStats;->lambda$sqXweH5BoxhmZvI188ctqYiACRk(Lcom/android/internal/os/BinderCallsStats$ExportedCallStat;Lcom/android/internal/os/BinderCallsStats$ExportedCallStat;)I
-HSPLcom/android/internal/os/BinderCallsStats;->processCallEnded(Lcom/android/internal/os/BinderInternal$CallSession;III)V
-HSPLcom/android/internal/os/BinderCallsStats;->reset()V
-PLcom/android/internal/os/BinderCallsStats;->resolveTransactionCode(Ljava/lang/reflect/Method;I)Ljava/lang/String;
-HSPLcom/android/internal/os/BinderCallsStats;->setAddDebugEntries(Z)V
-HSPLcom/android/internal/os/BinderCallsStats;->setDetailedTracking(Z)V
-HSPLcom/android/internal/os/BinderCallsStats;->setDeviceState(Lcom/android/internal/os/CachedDeviceState$Readonly;)V
-HSPLcom/android/internal/os/BinderCallsStats;->setMaxBinderCallStats(I)V
-HSPLcom/android/internal/os/BinderCallsStats;->setSamplingInterval(I)V
-HSPLcom/android/internal/os/BinderCallsStats;->setTrackDirectCallerUid(Z)V
-HSPLcom/android/internal/os/BinderCallsStats;->setTrackScreenInteractive(Z)V
-HSPLcom/android/internal/os/BinderCallsStats;->shouldRecordDetailedData()Z
-HSPLcom/android/internal/os/BinderDeathDispatcher$RecipientsInfo;-><init>(Lcom/android/internal/os/BinderDeathDispatcher;Landroid/os/IBinder;)V
-HSPLcom/android/internal/os/BinderDeathDispatcher$RecipientsInfo;-><init>(Lcom/android/internal/os/BinderDeathDispatcher;Landroid/os/IBinder;Lcom/android/internal/os/BinderDeathDispatcher$1;)V
-HPLcom/android/internal/os/BinderDeathDispatcher$RecipientsInfo;->binderDied()V
-HSPLcom/android/internal/os/BinderDeathDispatcher;-><init>()V
-PLcom/android/internal/os/BinderDeathDispatcher;->access$000(Lcom/android/internal/os/BinderDeathDispatcher;)Ljava/lang/Object;
-PLcom/android/internal/os/BinderDeathDispatcher;->access$100(Lcom/android/internal/os/BinderDeathDispatcher;)Landroid/util/ArrayMap;
-HPLcom/android/internal/os/BinderDeathDispatcher;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HSPLcom/android/internal/os/BinderDeathDispatcher;->linkToDeath(Landroid/os/IInterface;Landroid/os/IBinder$DeathRecipient;)I
-HPLcom/android/internal/os/BinderDeathDispatcher;->unlinkToDeath(Landroid/os/IInterface;Landroid/os/IBinder$DeathRecipient;)V
-PLcom/android/internal/os/BinderInternal$BinderProxyLimitListenerDelegate;->setListener(Lcom/android/internal/os/BinderInternal$BinderProxyLimitListener;Landroid/os/Handler;)V
 HSPLcom/android/internal/os/BinderInternal$GcWatcher;-><init>()V
 HSPLcom/android/internal/os/BinderInternal$GcWatcher;->finalize()V
 HSPLcom/android/internal/os/BinderInternal;->addGcWatcher(Ljava/lang/Runnable;)V
-PLcom/android/internal/os/BinderInternal;->forceBinderGc()V
-PLcom/android/internal/os/BinderInternal;->forceGc(Ljava/lang/String;)V
-PLcom/android/internal/os/BinderInternal;->getLastGcTime()J
-PLcom/android/internal/os/BinderInternal;->setBinderProxyCountCallback(Lcom/android/internal/os/BinderInternal$BinderProxyLimitListener;Landroid/os/Handler;)V
-PLcom/android/internal/os/BluetoothPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;)V
-HPLcom/android/internal/os/BluetoothPowerCalculator;->calculateApp(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats$Uid;JJI)V
-PLcom/android/internal/os/BluetoothPowerCalculator;->calculateRemaining(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats;JJI)V
-PLcom/android/internal/os/BluetoothPowerCalculator;->reset()V
-PLcom/android/internal/os/ByteTransferPipe;-><init>()V
-HPLcom/android/internal/os/ByteTransferPipe;->get()[B
-PLcom/android/internal/os/ByteTransferPipe;->getNewOutputStream()Ljava/io/OutputStream;
-HSPLcom/android/internal/os/CachedDeviceState$Readonly;-><init>(Lcom/android/internal/os/CachedDeviceState;)V
-HSPLcom/android/internal/os/CachedDeviceState$Readonly;->createTimeOnBatteryStopwatch()Lcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;
-HSPLcom/android/internal/os/CachedDeviceState$Readonly;->isCharging()Z
-HSPLcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;-><init>(Lcom/android/internal/os/CachedDeviceState;)V
-HSPLcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;->access$000(Lcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;)V
-PLcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;->access$100(Lcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;)V
-PLcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;->elapsedTime()J
-PLcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;->getMillis()J
-HSPLcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;->isRunning()Z
-HSPLcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;->reset()V
-HSPLcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;->start()V
-PLcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;->stop()V
-HSPLcom/android/internal/os/CachedDeviceState;-><init>()V
-HSPLcom/android/internal/os/CachedDeviceState;->access$200(Lcom/android/internal/os/CachedDeviceState;)Z
-HSPLcom/android/internal/os/CachedDeviceState;->access$400(Lcom/android/internal/os/CachedDeviceState;)Ljava/lang/Object;
-HSPLcom/android/internal/os/CachedDeviceState;->access$500(Lcom/android/internal/os/CachedDeviceState;)Ljava/util/ArrayList;
-HSPLcom/android/internal/os/CachedDeviceState;->getReadonlyClient()Lcom/android/internal/os/CachedDeviceState$Readonly;
-HSPLcom/android/internal/os/CachedDeviceState;->setCharging(Z)V
-HSPLcom/android/internal/os/CachedDeviceState;->setScreenInteractive(Z)V
-HSPLcom/android/internal/os/CachedDeviceState;->updateStopwatches(Z)V
-PLcom/android/internal/os/CameraPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;)V
-HPLcom/android/internal/os/CameraPowerCalculator;->calculateApp(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats$Uid;JJI)V
+HSPLcom/android/internal/os/BinderInternal;->forceBinderGc()V
+HSPLcom/android/internal/os/BinderInternal;->forceGc(Ljava/lang/String;)V
 HSPLcom/android/internal/os/ClassLoaderFactory;->createClassLoader(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/util/List;)Ljava/lang/ClassLoader;
-HSPLcom/android/internal/os/ClassLoaderFactory;->createClassLoader(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;IZLjava/lang/String;)Ljava/lang/ClassLoader;
 HSPLcom/android/internal/os/ClassLoaderFactory;->createClassLoader(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;IZLjava/lang/String;Ljava/util/List;)Ljava/lang/ClassLoader;
-PLcom/android/internal/os/ClassLoaderFactory;->getPathClassLoaderName()Ljava/lang/String;
-PLcom/android/internal/os/ClassLoaderFactory;->isDelegateLastClassLoaderName(Ljava/lang/String;)Z
 HSPLcom/android/internal/os/ClassLoaderFactory;->isPathClassLoaderName(Ljava/lang/String;)Z
-PLcom/android/internal/os/ClassLoaderFactory;->isValidClassLoaderName(Ljava/lang/String;)Z
-PLcom/android/internal/os/CpuPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;)V
-HPLcom/android/internal/os/CpuPowerCalculator;->calculateApp(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats$Uid;JJI)V
-PLcom/android/internal/os/FlashlightPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;)V
-HPLcom/android/internal/os/FlashlightPowerCalculator;->calculateApp(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats$Uid;JJI)V
-PLcom/android/internal/os/FuseUnavailableMountException;-><init>(I)V
 HSPLcom/android/internal/os/HandlerCaller$MyHandler;-><init>(Lcom/android/internal/os/HandlerCaller;Landroid/os/Looper;Z)V
-HSPLcom/android/internal/os/HandlerCaller$MyHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/internal/os/HandlerCaller;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/internal/os/HandlerCaller$Callback;Z)V
-HSPLcom/android/internal/os/HandlerCaller;->executeOrSendMessage(Landroid/os/Message;)V
-HPLcom/android/internal/os/HandlerCaller;->obtainMessage(I)Landroid/os/Message;
-HPLcom/android/internal/os/HandlerCaller;->obtainMessageI(II)Landroid/os/Message;
-HPLcom/android/internal/os/HandlerCaller;->obtainMessageIIIIII(IIIIIII)Landroid/os/Message;
-PLcom/android/internal/os/HandlerCaller;->obtainMessageIIO(IIILjava/lang/Object;)Landroid/os/Message;
-PLcom/android/internal/os/HandlerCaller;->obtainMessageIIOOOO(IIILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
 HSPLcom/android/internal/os/HandlerCaller;->obtainMessageIO(IILjava/lang/Object;)Landroid/os/Message;
-HSPLcom/android/internal/os/HandlerCaller;->obtainMessageIOO(IILjava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
 HSPLcom/android/internal/os/HandlerCaller;->obtainMessageO(ILjava/lang/Object;)Landroid/os/Message;
-HSPLcom/android/internal/os/HandlerCaller;->obtainMessageOO(ILjava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
-PLcom/android/internal/os/HandlerCaller;->obtainMessageOOO(ILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
-HSPLcom/android/internal/os/HandlerCaller;->obtainMessageOOOOO(ILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
-HPLcom/android/internal/os/HandlerCaller;->removeMessages(I)V
-HSPLcom/android/internal/os/HandlerCaller;->sendMessage(Landroid/os/Message;)V
-HSLcom/android/internal/os/IDropBoxManagerService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLcom/android/internal/os/IDropBoxManagerService$Stub$Proxy;->add(Landroid/os/DropBoxManager$Entry;)V
-HSPLcom/android/internal/os/IDropBoxManagerService$Stub$Proxy;->getNextEntry(Ljava/lang/String;JLjava/lang/String;)Landroid/os/DropBoxManager$Entry;
-HSPLcom/android/internal/os/IDropBoxManagerService$Stub;-><init>()V
 HSPLcom/android/internal/os/IDropBoxManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/os/IDropBoxManagerService;
-PLcom/android/internal/os/IDropBoxManagerService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HPLcom/android/internal/os/IDropBoxManagerService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/os/IResultReceiver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLcom/android/internal/os/IResultReceiver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/os/IResultReceiver$Stub$Proxy;->send(ILandroid/os/Bundle;)V
+HSPLcom/android/internal/os/IResultReceiver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/os/IResultReceiver$Stub$Proxy;->send(ILandroid/os/Bundle;)V
 HSPLcom/android/internal/os/IResultReceiver$Stub;-><init>()V
 HSPLcom/android/internal/os/IResultReceiver$Stub;->asBinder()Landroid/os/IBinder;
-HPLcom/android/internal/os/IResultReceiver$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/os/IResultReceiver;
-PLcom/android/internal/os/IResultReceiver$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
+HSPLcom/android/internal/os/IResultReceiver$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/os/IResultReceiver;
 HSPLcom/android/internal/os/IResultReceiver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLcom/android/internal/os/IShellCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLcom/android/internal/os/IShellCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLcom/android/internal/os/IShellCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/os/IShellCallback;
-HSPLcom/android/internal/os/KernelCpuProcStringReader$ProcFileIterator;-><init>(Lcom/android/internal/os/KernelCpuProcStringReader;I)V
-HSPLcom/android/internal/os/KernelCpuProcStringReader$ProcFileIterator;->close()V
-HSPLcom/android/internal/os/KernelCpuProcStringReader$ProcFileIterator;->hasNextLine()Z
-HSPLcom/android/internal/os/KernelCpuProcStringReader$ProcFileIterator;->nextLine()Ljava/nio/CharBuffer;
-HSPLcom/android/internal/os/KernelCpuProcStringReader;->access$100(Lcom/android/internal/os/KernelCpuProcStringReader;)Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;
-HSPLcom/android/internal/os/KernelCpuProcStringReader;->asLongs(Ljava/nio/CharBuffer;[J)I
-HSPLcom/android/internal/os/KernelCpuProcStringReader;->dataValid()Z
-HSPLcom/android/internal/os/KernelCpuProcStringReader;->getActiveTimeReaderInstance()Lcom/android/internal/os/KernelCpuProcStringReader;
-HSPLcom/android/internal/os/KernelCpuProcStringReader;->getClusterTimeReaderInstance()Lcom/android/internal/os/KernelCpuProcStringReader;
-HSPLcom/android/internal/os/KernelCpuProcStringReader;->getFreqTimeReaderInstance()Lcom/android/internal/os/KernelCpuProcStringReader;
-HSPLcom/android/internal/os/KernelCpuProcStringReader;->getUserSysTimeReaderInstance()Lcom/android/internal/os/KernelCpuProcStringReader;
-HSPLcom/android/internal/os/KernelCpuProcStringReader;->isNumber(C)Z
-HSPLcom/android/internal/os/KernelCpuProcStringReader;->open(Z)Lcom/android/internal/os/KernelCpuProcStringReader$ProcFileIterator;
-HSPLcom/android/internal/os/KernelCpuSpeedReader;-><init>(II)V
-HSPLcom/android/internal/os/KernelCpuSpeedReader;->readDelta()[J
-HSPLcom/android/internal/os/KernelCpuThreadReader$FrequencyBucketCreator;-><init>([JI)V
-HSPLcom/android/internal/os/KernelCpuThreadReader$FrequencyBucketCreator;->bucketFrequencies([J)[I
-HPLcom/android/internal/os/KernelCpuThreadReader$FrequencyBucketCreator;->bucketValues([J)[I
-HSPLcom/android/internal/os/KernelCpuThreadReader$FrequencyBucketCreator;->getBucketStartIndices([III)[I
-HSPLcom/android/internal/os/KernelCpuThreadReader$FrequencyBucketCreator;->getClusterStartIndices([J)[I
-HSPLcom/android/internal/os/KernelCpuThreadReader$FrequencyBucketCreator;->getLowerBound(I[I)I
-HSPLcom/android/internal/os/KernelCpuThreadReader$FrequencyBucketCreator;->getUpperBound(I[II)I
-HSPLcom/android/internal/os/KernelCpuThreadReader$Injector;-><init>()V
-HPLcom/android/internal/os/KernelCpuThreadReader$Injector;->getUidForPid(I)I
-PLcom/android/internal/os/KernelCpuThreadReader$ProcessCpuUsage;-><init>(ILjava/lang/String;ILjava/util/ArrayList;)V
-HPLcom/android/internal/os/KernelCpuThreadReader$ThreadCpuUsage;-><init>(ILjava/lang/String;[I)V
-HSPLcom/android/internal/os/KernelCpuThreadReader;-><clinit>()V
-HSPLcom/android/internal/os/KernelCpuThreadReader;-><init>(ILjava/util/function/Predicate;Ljava/nio/file/Path;Ljava/nio/file/Path;Lcom/android/internal/os/KernelCpuThreadReader$Injector;)V
-HSPLcom/android/internal/os/KernelCpuThreadReader;->create(ILjava/util/function/Predicate;)Lcom/android/internal/os/KernelCpuThreadReader;
-PLcom/android/internal/os/KernelCpuThreadReader;->getCpuFrequenciesKhz()[I
-HPLcom/android/internal/os/KernelCpuThreadReader;->getProcessCpuUsage()Ljava/util/ArrayList;
-HPLcom/android/internal/os/KernelCpuThreadReader;->getProcessCpuUsage(Ljava/nio/file/Path;II)Lcom/android/internal/os/KernelCpuThreadReader$ProcessCpuUsage;
-HPLcom/android/internal/os/KernelCpuThreadReader;->getProcessId(Ljava/nio/file/Path;)I
-PLcom/android/internal/os/KernelCpuThreadReader;->getProcessName(Ljava/nio/file/Path;)Ljava/lang/String;
-HPLcom/android/internal/os/KernelCpuThreadReader;->getThreadCpuUsage(Ljava/nio/file/Path;)Lcom/android/internal/os/KernelCpuThreadReader$ThreadCpuUsage;
-PLcom/android/internal/os/KernelCpuThreadReader;->getThreadName(Ljava/nio/file/Path;)Ljava/lang/String;
-HSPLcom/android/internal/os/KernelCpuThreadReader;->setNumBuckets(I)V
-HPLcom/android/internal/os/KernelCpuThreadReaderDiff$ThreadKey;-><init>(IILjava/lang/String;Ljava/lang/String;)V
-HPLcom/android/internal/os/KernelCpuThreadReaderDiff$ThreadKey;->equals(Ljava/lang/Object;)Z
-HPLcom/android/internal/os/KernelCpuThreadReaderDiff$ThreadKey;->hashCode()I
-HSPLcom/android/internal/os/KernelCpuThreadReaderDiff;-><init>(Lcom/android/internal/os/KernelCpuThreadReader;I)V
-HPLcom/android/internal/os/KernelCpuThreadReaderDiff;->addToCpuUsage([I[I)V
-HPLcom/android/internal/os/KernelCpuThreadReaderDiff;->applyThresholding(Lcom/android/internal/os/KernelCpuThreadReader$ProcessCpuUsage;)V
-HPLcom/android/internal/os/KernelCpuThreadReaderDiff;->changeToDiffs(Ljava/util/Map;Lcom/android/internal/os/KernelCpuThreadReader$ProcessCpuUsage;)V
-HPLcom/android/internal/os/KernelCpuThreadReaderDiff;->cpuTimeDiff([I[I)[I
-HPLcom/android/internal/os/KernelCpuThreadReaderDiff;->createCpuUsageMap(Ljava/util/List;)Ljava/util/Map;
-PLcom/android/internal/os/KernelCpuThreadReaderDiff;->getCpuFrequenciesKhz()[I
-HPLcom/android/internal/os/KernelCpuThreadReaderDiff;->getProcessCpuUsageDiffed()Ljava/util/ArrayList;
-HPLcom/android/internal/os/KernelCpuThreadReaderDiff;->totalCpuUsage([I)I
-HSPLcom/android/internal/os/KernelCpuThreadReaderSettingsObserver$UidPredicate;-><clinit>()V
-HSPLcom/android/internal/os/KernelCpuThreadReaderSettingsObserver$UidPredicate;-><init>(Ljava/util/List;)V
-HSPLcom/android/internal/os/KernelCpuThreadReaderSettingsObserver$UidPredicate;->fromString(Ljava/lang/String;)Lcom/android/internal/os/KernelCpuThreadReaderSettingsObserver$UidPredicate;
-HPLcom/android/internal/os/KernelCpuThreadReaderSettingsObserver$UidPredicate;->test(Ljava/lang/Integer;)Z
-HPLcom/android/internal/os/KernelCpuThreadReaderSettingsObserver$UidPredicate;->test(Ljava/lang/Object;)Z
-HSPLcom/android/internal/os/KernelCpuThreadReaderSettingsObserver;-><init>(Landroid/content/Context;)V
-HSPLcom/android/internal/os/KernelCpuThreadReaderSettingsObserver;->getSettingsModifiedReader(Landroid/content/Context;)Lcom/android/internal/os/KernelCpuThreadReaderDiff;
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidActiveTimeReader;-><init>(Z)V
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidActiveTimeReader;->checkPrecondition(Lcom/android/internal/os/KernelCpuProcStringReader$ProcFileIterator;)Z
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidActiveTimeReader;->readDeltaImpl(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidActiveTimeReader;->sumActiveTime([J)J
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidClusterTimeReader;-><init>(Z)V
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidClusterTimeReader;->checkPrecondition(Lcom/android/internal/os/KernelCpuProcStringReader$ProcFileIterator;)Z
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidClusterTimeReader;->readDeltaImpl(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidClusterTimeReader;->sumClusterTime()V
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;-><init>(Ljava/lang/String;Lcom/android/internal/os/KernelCpuProcStringReader;Z)V
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;-><init>(Z)V
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;->checkPrecondition(Lcom/android/internal/os/KernelCpuProcStringReader$ProcFileIterator;)Z
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;->extractClusterInfoFromProcFileFreqs()Landroid/util/IntArray;
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;->perClusterTimesAvailable()Z
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;->readDeltaImpl(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;->readFreqs(Lcom/android/internal/os/PowerProfile;)[J
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;->readFreqs(Ljava/lang/String;)[J
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidUserSysTimeReader;-><init>(Z)V
-HPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidUserSysTimeReader;->readAbsoluteImpl(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
-HSPLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidUserSysTimeReader;->readDeltaImpl(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
-PLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidUserSysTimeReader;->removeUid(I)V
-PLcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidUserSysTimeReader;->removeUidsFromKernelModule(II)V
-HSPLcom/android/internal/os/KernelCpuUidTimeReader;-><init>(Lcom/android/internal/os/KernelCpuProcStringReader;Z)V
-PLcom/android/internal/os/KernelCpuUidTimeReader;->readAbsolute(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
-HSPLcom/android/internal/os/KernelCpuUidTimeReader;->readDelta(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
-PLcom/android/internal/os/KernelCpuUidTimeReader;->removeUid(I)V
-HSPLcom/android/internal/os/KernelCpuUidTimeReader;->setThrottle(J)V
-HSPLcom/android/internal/os/KernelMemoryBandwidthStats;-><init>()V
-HSPLcom/android/internal/os/KernelMemoryBandwidthStats;->getBandwidthEntries()Landroid/util/LongSparseLongArray;
-HSPLcom/android/internal/os/KernelMemoryBandwidthStats;->updateStats()V
-HSPLcom/android/internal/os/KernelWakelockReader;-><init>()V
-HSPLcom/android/internal/os/KernelWakelockReader;->getWakelockStatsFromSystemSuspend(Lcom/android/internal/os/KernelWakelockStats;)Lcom/android/internal/os/KernelWakelockStats;
-HSPLcom/android/internal/os/KernelWakelockReader;->readKernelWakelockStats(Lcom/android/internal/os/KernelWakelockStats;)Lcom/android/internal/os/KernelWakelockStats;
-HSPLcom/android/internal/os/KernelWakelockReader;->removeOldStats(Lcom/android/internal/os/KernelWakelockStats;)Lcom/android/internal/os/KernelWakelockStats;
-HSPLcom/android/internal/os/KernelWakelockReader;->updateVersion(Lcom/android/internal/os/KernelWakelockStats;)Lcom/android/internal/os/KernelWakelockStats;
-HSPLcom/android/internal/os/KernelWakelockReader;->updateWakelockStats([Landroid/system/suspend/WakeLockInfo;Lcom/android/internal/os/KernelWakelockStats;)Lcom/android/internal/os/KernelWakelockStats;
-HSPLcom/android/internal/os/KernelWakelockStats$Entry;-><init>(IJI)V
-HSPLcom/android/internal/os/KernelWakelockStats;-><init>()V
 HSPLcom/android/internal/os/LoggingPrintStream$1;-><init>()V
 HSPLcom/android/internal/os/LoggingPrintStream;-><init>()V
-HSPLcom/android/internal/os/LoggingPrintStream;->flush()V
-HSPLcom/android/internal/os/LoggingPrintStream;->flush(Z)V
-HSPLcom/android/internal/os/LoggingPrintStream;->println(Ljava/lang/Object;)V
-HSPLcom/android/internal/os/LoggingPrintStream;->println(Ljava/lang/String;)V
-PLcom/android/internal/os/LooperStats$Entry;-><init>(Landroid/os/Message;Z)V
-HSPLcom/android/internal/os/LooperStats$Entry;-><init>(Ljava/lang/String;)V
-HSPLcom/android/internal/os/LooperStats$Entry;->idFor(Landroid/os/Message;Z)I
-HSPLcom/android/internal/os/LooperStats$Entry;->reset()V
-PLcom/android/internal/os/LooperStats$ExportedEntry;-><init>(Lcom/android/internal/os/LooperStats$Entry;)V
-HSPLcom/android/internal/os/LooperStats;-><init>(II)V
-PLcom/android/internal/os/LooperStats;->createDebugEntry(Ljava/lang/String;J)Lcom/android/internal/os/LooperStats$ExportedEntry;
-HSPLcom/android/internal/os/LooperStats;->deviceStateAllowsCollection()Z
-HSPLcom/android/internal/os/LooperStats;->findEntry(Landroid/os/Message;Z)Lcom/android/internal/os/LooperStats$Entry;
-PLcom/android/internal/os/LooperStats;->getBatteryTimeMillis()J
-HPLcom/android/internal/os/LooperStats;->getElapsedRealtimeMicro()J
-PLcom/android/internal/os/LooperStats;->getEntries()Ljava/util/List;
-PLcom/android/internal/os/LooperStats;->getStartTimeMillis()J
-PLcom/android/internal/os/LooperStats;->getSystemUptimeMillis()J
-HPLcom/android/internal/os/LooperStats;->getThreadTimeMicro()J
-PLcom/android/internal/os/LooperStats;->maybeAddSpecialEntry(Ljava/util/List;Lcom/android/internal/os/LooperStats$Entry;)V
-HSPLcom/android/internal/os/LooperStats;->messageDispatchStarting()Ljava/lang/Object;
-HSPLcom/android/internal/os/LooperStats;->messageDispatched(Ljava/lang/Object;Landroid/os/Message;)V
-HSPLcom/android/internal/os/LooperStats;->reset()V
-HSPLcom/android/internal/os/LooperStats;->setAddDebugEntries(Z)V
-HSPLcom/android/internal/os/LooperStats;->setDeviceState(Lcom/android/internal/os/CachedDeviceState$Readonly;)V
-HSPLcom/android/internal/os/LooperStats;->setSamplingInterval(I)V
-HSPLcom/android/internal/os/LooperStats;->shouldCollectDetailedData()Z
-PLcom/android/internal/os/MediaPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;)V
-HPLcom/android/internal/os/MediaPowerCalculator;->calculateApp(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats$Uid;JJI)V
-HPLcom/android/internal/os/MemoryPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;)V
-PLcom/android/internal/os/MemoryPowerCalculator;->calculateRemaining(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats;JJI)V
-PLcom/android/internal/os/MobileRadioPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;Landroid/os/BatteryStats;)V
-HPLcom/android/internal/os/MobileRadioPowerCalculator;->calculateApp(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats$Uid;JJI)V
-PLcom/android/internal/os/MobileRadioPowerCalculator;->calculateRemaining(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats;JJI)V
-HPLcom/android/internal/os/MobileRadioPowerCalculator;->getMobilePowerPerPacket(JI)D
-PLcom/android/internal/os/MobileRadioPowerCalculator;->reset()V
-PLcom/android/internal/os/MobileRadioPowerCalculator;->reset(Landroid/os/BatteryStats;)V
-PLcom/android/internal/os/PowerCalculator;-><init>()V
-PLcom/android/internal/os/PowerCalculator;->reset()V
-HSPLcom/android/internal/os/PowerProfile$CpuClusterKey;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLcom/android/internal/os/PowerProfile$CpuClusterKey;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILcom/android/internal/os/PowerProfile$1;)V
-HSPLcom/android/internal/os/PowerProfile$CpuClusterKey;->access$100(Lcom/android/internal/os/PowerProfile$CpuClusterKey;)I
-HSPLcom/android/internal/os/PowerProfile$CpuClusterKey;->access$200(Lcom/android/internal/os/PowerProfile$CpuClusterKey;)Ljava/lang/String;
-PLcom/android/internal/os/PowerProfile$CpuClusterKey;->access$300(Lcom/android/internal/os/PowerProfile$CpuClusterKey;)Ljava/lang/String;
-PLcom/android/internal/os/PowerProfile$CpuClusterKey;->access$400(Lcom/android/internal/os/PowerProfile$CpuClusterKey;)Ljava/lang/String;
-HSPLcom/android/internal/os/PowerProfile;-><init>(Landroid/content/Context;)V
-HSPLcom/android/internal/os/PowerProfile;-><init>(Landroid/content/Context;Z)V
-HSPLcom/android/internal/os/PowerProfile;->getAveragePower(Ljava/lang/String;)D
-HPLcom/android/internal/os/PowerProfile;->getAveragePower(Ljava/lang/String;I)D
-HPLcom/android/internal/os/PowerProfile;->getAveragePowerForCpuCluster(I)D
-HPLcom/android/internal/os/PowerProfile;->getAveragePowerForCpuCore(II)D
-HSPLcom/android/internal/os/PowerProfile;->getAveragePowerOrDefault(Ljava/lang/String;D)D
-HSPLcom/android/internal/os/PowerProfile;->getBatteryCapacity()D
-HSPLcom/android/internal/os/PowerProfile;->getNumCoresInCpuCluster(I)I
-HSPLcom/android/internal/os/PowerProfile;->getNumCpuClusters()I
-PLcom/android/internal/os/PowerProfile;->getNumElements(Ljava/lang/String;)I
-HSPLcom/android/internal/os/PowerProfile;->getNumSpeedStepsInCpuCluster(I)I
-HSPLcom/android/internal/os/PowerProfile;->initCpuClusters()V
-HSPLcom/android/internal/os/PowerProfile;->readPowerValuesFromXml(Landroid/content/Context;Z)V
-PLcom/android/internal/os/ProcStatsUtil;->readNullSeparatedFile(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/internal/os/ProcStatsUtil;->readSingleLineProcFile(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/internal/os/ProcStatsUtil;->readTerminatedProcFile(Ljava/lang/String;B)Ljava/lang/String;
-HSPLcom/android/internal/os/ProcTimeInStateReader;-><init>(Ljava/nio/file/Path;)V
-HSPLcom/android/internal/os/ProcTimeInStateReader;->getFrequenciesKhz()[J
-HPLcom/android/internal/os/ProcTimeInStateReader;->getUsageTimesMillis(Ljava/nio/file/Path;)[J
-HSPLcom/android/internal/os/ProcTimeInStateReader;->initializeTimeInStateFormat(Ljava/nio/file/Path;)V
-HPLcom/android/internal/os/ProcessCpuTracker$1;->compare(Lcom/android/internal/os/ProcessCpuTracker$Stats;Lcom/android/internal/os/ProcessCpuTracker$Stats;)I
-HPLcom/android/internal/os/ProcessCpuTracker$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLcom/android/internal/os/ProcessCpuTracker$Stats;-><init>(IIZ)V
-HSPLcom/android/internal/os/ProcessCpuTracker$Stats;->getUid(Ljava/lang/String;)I
-HSPLcom/android/internal/os/ProcessCpuTracker;-><init>(Z)V
-HPLcom/android/internal/os/ProcessCpuTracker;->buildWorkingProcs()V
-HSPLcom/android/internal/os/ProcessCpuTracker;->collectStats(Ljava/lang/String;IZ[ILjava/util/ArrayList;)[I
-HSPLcom/android/internal/os/ProcessCpuTracker;->countStats()I
-HSPLcom/android/internal/os/ProcessCpuTracker;->getCpuTimeForPid(I)J
-HSPLcom/android/internal/os/ProcessCpuTracker;->getLastIdleTime()I
-HSPLcom/android/internal/os/ProcessCpuTracker;->getLastIoWaitTime()I
-HSPLcom/android/internal/os/ProcessCpuTracker;->getLastIrqTime()I
-HSPLcom/android/internal/os/ProcessCpuTracker;->getLastSoftIrqTime()I
-HSPLcom/android/internal/os/ProcessCpuTracker;->getLastSystemTime()I
-HSPLcom/android/internal/os/ProcessCpuTracker;->getLastUserTime()I
-HSPLcom/android/internal/os/ProcessCpuTracker;->getName(Lcom/android/internal/os/ProcessCpuTracker$Stats;Ljava/lang/String;)V
-HSPLcom/android/internal/os/ProcessCpuTracker;->getStats(I)Lcom/android/internal/os/ProcessCpuTracker$Stats;
-HSPLcom/android/internal/os/ProcessCpuTracker;->getStats(Lcom/android/internal/os/ProcessCpuTracker$FilterStats;)Ljava/util/List;
-HSPLcom/android/internal/os/ProcessCpuTracker;->hasGoodLastStats()Z
-HSPLcom/android/internal/os/ProcessCpuTracker;->init()V
-HSPLcom/android/internal/os/ProcessCpuTracker;->onLoadChanged(FFF)V
-HSPLcom/android/internal/os/ProcessCpuTracker;->onMeasureProcessName(Ljava/lang/String;)I
-PLcom/android/internal/os/ProcessCpuTracker;->printCurrentLoad()Ljava/lang/String;
-HPLcom/android/internal/os/ProcessCpuTracker;->printCurrentState(J)Ljava/lang/String;
-HPLcom/android/internal/os/ProcessCpuTracker;->printProcessCPU(Ljava/io/PrintWriter;Ljava/lang/String;ILjava/lang/String;IIIIIIII)V
-HPLcom/android/internal/os/ProcessCpuTracker;->printRatio(Ljava/io/PrintWriter;JJ)V
-HSPLcom/android/internal/os/ProcessCpuTracker;->update()V
-HSPLcom/android/internal/os/RailStats;-><init>()V
-PLcom/android/internal/os/RailStats;->getCellularTotalEnergyUseduWs()J
-PLcom/android/internal/os/RailStats;->getWifiTotalEnergyUseduWs()J
-HSPLcom/android/internal/os/RailStats;->isRailStatsAvailable()Z
-HSPLcom/android/internal/os/RailStats;->reset()V
-PLcom/android/internal/os/RailStats;->resetCellularTotalEnergyUsed()V
-PLcom/android/internal/os/RailStats;->resetWifiTotalEnergyUsed()V
-HSPLcom/android/internal/os/RailStats;->setRailStatsAvailability(Z)V
-HSPLcom/android/internal/os/RpmStats$PowerStateElement;-><init>(JI)V
-HSPLcom/android/internal/os/RpmStats$PowerStateElement;-><init>(JILcom/android/internal/os/RpmStats$1;)V
-HSPLcom/android/internal/os/RpmStats$PowerStateSubsystem;-><init>()V
-HSPLcom/android/internal/os/RpmStats$PowerStateSubsystem;->putState(Ljava/lang/String;JI)V
-HSPLcom/android/internal/os/RpmStats;-><init>()V
-HSPLcom/android/internal/os/RpmStats;->getSubsystem(Ljava/lang/String;)Lcom/android/internal/os/RpmStats$PowerStateSubsystem;
 HSPLcom/android/internal/os/RuntimeInit$Arguments;-><init>([Ljava/lang/String;)V
 HSPLcom/android/internal/os/RuntimeInit$Arguments;->parseArgs([Ljava/lang/String;)V
 HSPLcom/android/internal/os/RuntimeInit$KillApplicationHandler;-><init>(Lcom/android/internal/os/RuntimeInit$LoggingHandler;)V
@@ -31590,18 +14686,16 @@
 HSPLcom/android/internal/os/RuntimeInit$LoggingHandler;-><init>(Lcom/android/internal/os/RuntimeInit$1;)V
 HSPLcom/android/internal/os/RuntimeInit$MethodAndArgsCaller;-><init>(Ljava/lang/reflect/Method;[Ljava/lang/String;)V
 HSPLcom/android/internal/os/RuntimeInit$MethodAndArgsCaller;->run()V
+HSPLcom/android/internal/os/RuntimeInit$RuntimeThreadPrioritySetter;->setPriority(II)V
 HSPLcom/android/internal/os/RuntimeInit;->applicationInit(I[J[Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Runnable;
 HSPLcom/android/internal/os/RuntimeInit;->commonInit()V
 HSPLcom/android/internal/os/RuntimeInit;->findStaticMain(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Runnable;
-HSPLcom/android/internal/os/RuntimeInit;->getApplicationObject()Landroid/os/IBinder;
 HSPLcom/android/internal/os/RuntimeInit;->getDefaultUserAgent()Ljava/lang/String;
 HSPLcom/android/internal/os/RuntimeInit;->lambda$commonInit$0()Ljava/lang/String;
+HSPLcom/android/internal/os/RuntimeInit;->maybeDisableHeapPointerTagging([J)V
 HSPLcom/android/internal/os/RuntimeInit;->redirectLogStreams()V
 HSPLcom/android/internal/os/RuntimeInit;->setApplicationObject(Landroid/os/IBinder;)V
 HSPLcom/android/internal/os/RuntimeInit;->wtf(Ljava/lang/String;Ljava/lang/Throwable;Z)V
-PLcom/android/internal/os/SensorPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;Landroid/hardware/SensorManager;Landroid/os/BatteryStats;JI)V
-HPLcom/android/internal/os/SensorPowerCalculator;->calculateApp(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats$Uid;JJI)V
-PLcom/android/internal/os/SensorPowerCalculator;->getAverageGpsPower(Lcom/android/internal/os/PowerProfile;Landroid/os/BatteryStats;JI)D
 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;
@@ -31610,43 +14704,16 @@
 HSPLcom/android/internal/os/StatsdHiddenApiUsageLogger;->hiddenApiUsed(ILjava/lang/String;Ljava/lang/String;IZ)V
 HSPLcom/android/internal/os/StatsdHiddenApiUsageLogger;->newLogUsage(Ljava/lang/String;IZ)V
 HSPLcom/android/internal/os/StatsdHiddenApiUsageLogger;->setHiddenApiAccessLogSampleRates(II)V
-HSPLcom/android/internal/os/StoragedUidIoStatsReader;-><init>()V
-PLcom/android/internal/os/TransferPipe;-><init>()V
-PLcom/android/internal/os/TransferPipe;-><init>(Ljava/lang/String;)V
-PLcom/android/internal/os/TransferPipe;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/internal/os/TransferPipe;->close()V
-PLcom/android/internal/os/TransferPipe;->closeFd(I)V
-PLcom/android/internal/os/TransferPipe;->dumpAsync(Landroid/os/IBinder;Ljava/io/FileDescriptor;[Ljava/lang/String;)V
-PLcom/android/internal/os/TransferPipe;->dumpAsync(Landroid/os/IBinder;[Ljava/lang/String;)[B
-PLcom/android/internal/os/TransferPipe;->getNewOutputStream()Ljava/io/OutputStream;
-PLcom/android/internal/os/TransferPipe;->getReadFd()Landroid/os/ParcelFileDescriptor;
-PLcom/android/internal/os/TransferPipe;->getWriteFd()Landroid/os/ParcelFileDescriptor;
-PLcom/android/internal/os/TransferPipe;->go(Ljava/io/FileDescriptor;)V
-PLcom/android/internal/os/TransferPipe;->go(Ljava/io/FileDescriptor;J)V
-PLcom/android/internal/os/TransferPipe;->goDump(Landroid/os/IBinder;Ljava/io/FileDescriptor;[Ljava/lang/String;)V
-PLcom/android/internal/os/TransferPipe;->goDump(Landroid/os/IBinder;Ljava/io/FileDescriptor;[Ljava/lang/String;J)V
-PLcom/android/internal/os/TransferPipe;->kill()V
-HPLcom/android/internal/os/TransferPipe;->run()V
-PLcom/android/internal/os/WakelockPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;)V
-HPLcom/android/internal/os/WakelockPowerCalculator;->calculateApp(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats$Uid;JJI)V
-PLcom/android/internal/os/WakelockPowerCalculator;->calculateRemaining(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats;JJI)V
-PLcom/android/internal/os/WakelockPowerCalculator;->reset()V
-PLcom/android/internal/os/WifiPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;)V
-HPLcom/android/internal/os/WifiPowerCalculator;->calculateApp(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats$Uid;JJI)V
-PLcom/android/internal/os/WifiPowerCalculator;->calculateRemaining(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats;JJI)V
-PLcom/android/internal/os/WifiPowerCalculator;->reset()V
 HSPLcom/android/internal/os/Zygote;->applyDebuggerSystemProperty(Lcom/android/internal/os/ZygoteArguments;)V
 HSPLcom/android/internal/os/Zygote;->applyInvokeWithSecurityPolicy(Lcom/android/internal/os/ZygoteArguments;Landroid/net/Credentials;)V
 HSPLcom/android/internal/os/Zygote;->applyInvokeWithSystemProperty(Lcom/android/internal/os/ZygoteArguments;)V
 HSPLcom/android/internal/os/Zygote;->applyUidSecurityPolicy(Lcom/android/internal/os/ZygoteArguments;Landroid/net/Credentials;)V
 HSPLcom/android/internal/os/Zygote;->callPostForkChildHooks(IZZLjava/lang/String;)V
-HSPLcom/android/internal/os/Zygote;->callPostForkSystemServerHooks(I)V
 HSPLcom/android/internal/os/Zygote;->createManagedSocketFromInitSocket(Ljava/lang/String;)Landroid/net/LocalServerSocket;
 HSPLcom/android/internal/os/Zygote;->disableExecuteOnly(I)V
-HSPLcom/android/internal/os/Zygote;->forkAndSpecialize(II[II[[IILjava/lang/String;Ljava/lang/String;[I[IZLjava/lang/String;Ljava/lang/String;IZ)I
+HSPLcom/android/internal/os/Zygote;->forkAndSpecialize(II[II[[IILjava/lang/String;Ljava/lang/String;[I[IZLjava/lang/String;Ljava/lang/String;IZ[Ljava/lang/String;)I
 HSPLcom/android/internal/os/Zygote;->forkSystemServer(II[II[[IJJ)I
 HSPLcom/android/internal/os/Zygote;->getConfigurationProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/internal/os/Zygote;->getConfigurationPropertyBoolean(Ljava/lang/String;Ljava/lang/Boolean;)Z
 HSPLcom/android/internal/os/Zygote;->getUsapPoolEventFD()Ljava/io/FileDescriptor;
 HSPLcom/android/internal/os/Zygote;->getWrapProperty(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/os/Zygote;->initNativeState(Z)V
@@ -31661,28 +14728,23 @@
 HSPLcom/android/internal/os/ZygoteConnection;->closeSocket()V
 HSPLcom/android/internal/os/ZygoteConnection;->getFileDescriptor()Ljava/io/FileDescriptor;
 HSPLcom/android/internal/os/ZygoteConnection;->handleAbiListQuery()V
+HSPLcom/android/internal/os/ZygoteConnection;->handleApiBlacklistExemptions(Lcom/android/internal/os/ZygoteServer;[Ljava/lang/String;)Ljava/lang/Runnable;
 HSPLcom/android/internal/os/ZygoteConnection;->handleBootCompleted()V
 HSPLcom/android/internal/os/ZygoteConnection;->handleChildProc(Lcom/android/internal/os/ZygoteArguments;Ljava/io/FileDescriptor;Z)Ljava/lang/Runnable;
 HSPLcom/android/internal/os/ZygoteConnection;->handleHiddenApiAccessLogSampleRate(Lcom/android/internal/os/ZygoteServer;II)Ljava/lang/Runnable;
 HSPLcom/android/internal/os/ZygoteConnection;->handleParentProc(ILjava/io/FileDescriptor;)V
 HSPLcom/android/internal/os/ZygoteConnection;->isClosedByPeer()Z
+HSPLcom/android/internal/os/ZygoteConnection;->lambda$handleApiBlacklistExemptions$0([Ljava/lang/String;)V
 HSPLcom/android/internal/os/ZygoteConnection;->lambda$handleHiddenApiAccessLogSampleRate$1(II)V
 HSPLcom/android/internal/os/ZygoteConnection;->processOneCommand(Lcom/android/internal/os/ZygoteServer;)Ljava/lang/Runnable;
 HSPLcom/android/internal/os/ZygoteConnection;->setChildPgid(I)V
 HSPLcom/android/internal/os/ZygoteConnection;->stateChangeWithUsapPoolReset(Lcom/android/internal/os/ZygoteServer;Ljava/lang/Runnable;)Ljava/lang/Runnable;
 HSPLcom/android/internal/os/ZygoteInit;->cacheNonBootClasspathClassLoaders()V
-HSPLcom/android/internal/os/ZygoteInit;->createPathClassLoader(Ljava/lang/String;I)Ljava/lang/ClassLoader;
-HSPLcom/android/internal/os/ZygoteInit;->createSystemServerClassLoader()V
-HSPLcom/android/internal/os/ZygoteInit;->encodeSystemServerClassPath(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/os/ZygoteInit;->endPreload()V
 HSPLcom/android/internal/os/ZygoteInit;->forkSystemServer(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/os/ZygoteServer;)Ljava/lang/Runnable;
 HSPLcom/android/internal/os/ZygoteInit;->gcAndFinalize()V
-HSPLcom/android/internal/os/ZygoteInit;->getSystemServerClassLoaderContext(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/internal/os/ZygoteInit;->handleSystemServerProcess(Lcom/android/internal/os/ZygoteArguments;)Ljava/lang/Runnable;
-HSPLcom/android/internal/os/ZygoteInit;->hasSecondZygote(Ljava/lang/String;)Z
 HSPLcom/android/internal/os/ZygoteInit;->main([Ljava/lang/String;)V
 HSPLcom/android/internal/os/ZygoteInit;->maybePreloadGraphicsDriver()V
-HSPLcom/android/internal/os/ZygoteInit;->performSystemServerDexOpt(Ljava/lang/String;)Z
 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
@@ -31691,11 +14753,10 @@
 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;->prepareSystemServerProfile(Ljava/lang/String;)V
+HSPLcom/android/internal/os/ZygoteInit;->setApiBlacklistExemptions([Ljava/lang/String;)V
 HSPLcom/android/internal/os/ZygoteInit;->setHiddenApiAccessLogSampleRate(I)V
 HSPLcom/android/internal/os/ZygoteInit;->setHiddenApiUsageLogger(Ldalvik/system/VMRuntime$HiddenApiUsageLogger;)V
 HSPLcom/android/internal/os/ZygoteInit;->shouldProfileSystemServer()Z
-HSPLcom/android/internal/os/ZygoteInit;->waitForSecondaryZygote(Ljava/lang/String;)V
 HSPLcom/android/internal/os/ZygoteInit;->warmUpJcaProviders()V
 HSPLcom/android/internal/os/ZygoteInit;->zygoteInit(I[J[Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Runnable;
 HSPLcom/android/internal/os/ZygoteServer;-><init>(Z)V
@@ -31708,27 +14769,23 @@
 HSPLcom/android/internal/os/ZygoteServer;->isUsapPoolEnabled()Z
 HSPLcom/android/internal/os/ZygoteServer;->runSelectLoop(Ljava/lang/String;)Ljava/lang/Runnable;
 HSPLcom/android/internal/os/ZygoteServer;->setForkChild()V
-PLcom/android/internal/os/logging/MetricsLoggerWrapper;->logAppOverlayEnter(ILjava/lang/String;ZIZ)V
-PLcom/android/internal/os/logging/MetricsLoggerWrapper;->logAppOverlayExit(ILjava/lang/String;ZIZ)V
-PLcom/android/internal/os/logging/MetricsLoggerWrapper;->logPictureInPictureEnter(Landroid/content/Context;ILjava/lang/String;Z)V
+HSPLcom/android/internal/policy/-$$Lambda$PhoneWindow$9SyKQeTuaYx7qUIMJIr4Lk2OpYw;-><init>(Lcom/android/internal/policy/PhoneWindow;)V
+HSPLcom/android/internal/policy/-$$Lambda$PhoneWindow$9SyKQeTuaYx7qUIMJIr4Lk2OpYw;->onContentApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/util/Pair;
+HSPLcom/android/internal/policy/DecorContext;-><init>(Landroid/content/Context;Landroid/content/Context;)V
 HSPLcom/android/internal/policy/DecorContext;->getAutofillOptions()Landroid/content/AutofillOptions;
 HSPLcom/android/internal/policy/DecorContext;->getContentCaptureOptions()Landroid/content/ContentCaptureOptions;
 HSPLcom/android/internal/policy/DecorContext;->getResources()Landroid/content/res/Resources;
 HSPLcom/android/internal/policy/DecorContext;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
 HSPLcom/android/internal/policy/DecorContext;->setPhoneWindow(Lcom/android/internal/policy/PhoneWindow;)V
-PLcom/android/internal/policy/DecorView$2;-><init>(Lcom/android/internal/policy/DecorView;Landroid/graphics/drawable/Drawable;IIII)V
-PLcom/android/internal/policy/DecorView$2;->getPadding(Landroid/graphics/Rect;)Z
-HPLcom/android/internal/policy/DecorView$3;->run()V
 HSPLcom/android/internal/policy/DecorView$ColorViewAttributes;->isPresent(IIZ)Z
-PLcom/android/internal/policy/DecorView$ColorViewAttributes;->isVisible(IIIZ)Z
 HSPLcom/android/internal/policy/DecorView$ColorViewAttributes;->isVisible(ZIIZ)Z
-PLcom/android/internal/policy/DecorView$ColorViewState;-><init>(Lcom/android/internal/policy/DecorView$ColorViewAttributes;)V
+HSPLcom/android/internal/policy/DecorView$ColorViewState;-><init>(Lcom/android/internal/policy/DecorView$ColorViewAttributes;)V
 HSPLcom/android/internal/policy/DecorView;-><init>(Landroid/content/Context;ILcom/android/internal/policy/PhoneWindow;Landroid/view/WindowManager$LayoutParams;)V
 HSPLcom/android/internal/policy/DecorView;->calculateBarColor(IIIIIIZ)I
 HSPLcom/android/internal/policy/DecorView;->calculateNavigationBarColor()I
-PLcom/android/internal/policy/DecorView;->calculateStatusBarColor()I
+HSPLcom/android/internal/policy/DecorView;->calculateStatusBarColor()I
 HSPLcom/android/internal/policy/DecorView;->createDecorCaptionView(Landroid/view/LayoutInflater;)Lcom/android/internal/widget/DecorCaptionView;
-HPLcom/android/internal/policy/DecorView;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLcom/android/internal/policy/DecorView;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
 HSPLcom/android/internal/policy/DecorView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLcom/android/internal/policy/DecorView;->draw(Landroid/graphics/Canvas;)V
 HSPLcom/android/internal/policy/DecorView;->drawLegacyNavigationBarBackground(Landroid/graphics/RecordingCanvas;)V
@@ -31737,27 +14794,23 @@
 HSPLcom/android/internal/policy/DecorView;->enableCaption(Z)V
 HSPLcom/android/internal/policy/DecorView;->enforceNonTranslucentBackground(Landroid/graphics/drawable/Drawable;Z)Landroid/graphics/drawable/Drawable;
 HSPLcom/android/internal/policy/DecorView;->finishChanging()V
-HPLcom/android/internal/policy/DecorView;->gatherTransparentRegion(Landroid/graphics/Region;)Z
-HPLcom/android/internal/policy/DecorView;->gatherTransparentRegion(Lcom/android/internal/policy/DecorView$ColorViewState;Landroid/graphics/Region;)Z
 HSPLcom/android/internal/policy/DecorView;->getAccessibilityViewId()I
 HSPLcom/android/internal/policy/DecorView;->getBackground()Landroid/graphics/drawable/Drawable;
-PLcom/android/internal/policy/DecorView;->getColorViewBottomInset(II)I
-PLcom/android/internal/policy/DecorView;->getColorViewLeftInset(II)I
-PLcom/android/internal/policy/DecorView;->getColorViewRightInset(II)I
-PLcom/android/internal/policy/DecorView;->getColorViewTopInset(II)I
-PLcom/android/internal/policy/DecorView;->getNavBarSize(III)I
-PLcom/android/internal/policy/DecorView;->getNavigationBarRect(IILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;F)V
+HSPLcom/android/internal/policy/DecorView;->getColorViewBottomInset(II)I
+HSPLcom/android/internal/policy/DecorView;->getColorViewRightInset(II)I
+HSPLcom/android/internal/policy/DecorView;->getColorViewTopInset(II)I
+HSPLcom/android/internal/policy/DecorView;->getNavBarSize(III)I
 HSPLcom/android/internal/policy/DecorView;->getResources()Landroid/content/res/Resources;
-PLcom/android/internal/policy/DecorView;->getTitleSuffix(Landroid/view/WindowManager$LayoutParams;)Ljava/lang/String;
+HSPLcom/android/internal/policy/DecorView;->getTitleSuffix(Landroid/view/WindowManager$LayoutParams;)Ljava/lang/String;
 HSPLcom/android/internal/policy/DecorView;->initResizingPaints()V
-PLcom/android/internal/policy/DecorView;->initializeElevation()V
-PLcom/android/internal/policy/DecorView;->isNavBarToLeftEdge(II)Z
-PLcom/android/internal/policy/DecorView;->isNavBarToRightEdge(II)Z
+HSPLcom/android/internal/policy/DecorView;->initializeElevation()V
+HSPLcom/android/internal/policy/DecorView;->isNavBarToLeftEdge(II)Z
+HSPLcom/android/internal/policy/DecorView;->isNavBarToRightEdge(II)Z
 HSPLcom/android/internal/policy/DecorView;->isResizing()Z
 HSPLcom/android/internal/policy/DecorView;->onApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
 HSPLcom/android/internal/policy/DecorView;->onAttachedToWindow()V
-HPLcom/android/internal/policy/DecorView;->onCloseSystemDialogs(Ljava/lang/String;)V
-PLcom/android/internal/policy/DecorView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLcom/android/internal/policy/DecorView;->onCloseSystemDialogs(Ljava/lang/String;)V
+HSPLcom/android/internal/policy/DecorView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/internal/policy/DecorView;->onContentDrawn(IIII)Z
 HSPLcom/android/internal/policy/DecorView;->onDetachedFromWindow()V
 HSPLcom/android/internal/policy/DecorView;->onDraw(Landroid/graphics/Canvas;)V
@@ -31770,19 +14823,17 @@
 HSPLcom/android/internal/policy/DecorView;->onTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLcom/android/internal/policy/DecorView;->onWindowFocusChanged(Z)V
 HSPLcom/android/internal/policy/DecorView;->onWindowSystemUiVisibilityChanged(I)V
-PLcom/android/internal/policy/DecorView;->releaseThreadedRenderer()V
+HSPLcom/android/internal/policy/DecorView;->releaseThreadedRenderer()V
 HSPLcom/android/internal/policy/DecorView;->sendAccessibilityEvent(I)V
-PLcom/android/internal/policy/DecorView;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
-HSPLcom/android/internal/policy/DecorView;->setBackgroundFallback(Landroid/graphics/drawable/Drawable;)V
 HSPLcom/android/internal/policy/DecorView;->setColor(Landroid/view/View;IIZZ)V
 HSPLcom/android/internal/policy/DecorView;->setFrame(IIII)Z
 HSPLcom/android/internal/policy/DecorView;->setWindow(Lcom/android/internal/policy/PhoneWindow;)V
 HSPLcom/android/internal/policy/DecorView;->setWindowBackground(Landroid/graphics/drawable/Drawable;)V
 HSPLcom/android/internal/policy/DecorView;->setWindowFrame(Landroid/graphics/drawable/Drawable;)V
 HSPLcom/android/internal/policy/DecorView;->startChanging()V
-HPLcom/android/internal/policy/DecorView;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLcom/android/internal/policy/DecorView;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
 HSPLcom/android/internal/policy/DecorView;->superDispatchTouchEvent(Landroid/view/MotionEvent;)Z
-PLcom/android/internal/policy/DecorView;->updateAvailableWidth()V
+HSPLcom/android/internal/policy/DecorView;->updateAvailableWidth()V
 HSPLcom/android/internal/policy/DecorView;->updateBackgroundDrawable()V
 HSPLcom/android/internal/policy/DecorView;->updateColorViewInt(Lcom/android/internal/policy/DecorView$ColorViewState;IIIIZZIZZLandroid/view/InsetsState;)V
 HSPLcom/android/internal/policy/DecorView;->updateColorViewTranslations()V
@@ -31793,647 +14844,162 @@
 HSPLcom/android/internal/policy/DecorView;->updateStatusGuard(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
 HSPLcom/android/internal/policy/DecorView;->willYouTakeTheInputQueue()Landroid/view/InputQueue$Callback;
 HSPLcom/android/internal/policy/DecorView;->willYouTakeTheSurface()Landroid/view/SurfaceHolder$Callback2;
-HSPLcom/android/internal/policy/DividerSnapAlgorithm$SnapTarget;-><init>(III)V
-HSPLcom/android/internal/policy/DividerSnapAlgorithm$SnapTarget;-><init>(IIIF)V
-HSPLcom/android/internal/policy/DividerSnapAlgorithm;-><init>(Landroid/content/res/Resources;IIIZLandroid/graphics/Rect;)V
-HPLcom/android/internal/policy/DividerSnapAlgorithm;-><init>(Landroid/content/res/Resources;IIIZLandroid/graphics/Rect;I)V
-HSPLcom/android/internal/policy/DividerSnapAlgorithm;-><init>(Landroid/content/res/Resources;IIIZLandroid/graphics/Rect;IZ)V
-HSPLcom/android/internal/policy/DividerSnapAlgorithm;->addMiddleTarget(Z)V
-HSPLcom/android/internal/policy/DividerSnapAlgorithm;->addNonDismissingTargets(ZIII)V
-HSPLcom/android/internal/policy/DividerSnapAlgorithm;->addRatio16_9Targets(ZI)V
-HSPLcom/android/internal/policy/DividerSnapAlgorithm;->calculateTargets(ZI)V
-HSPLcom/android/internal/policy/DividerSnapAlgorithm;->getEndInset()I
-HPLcom/android/internal/policy/DividerSnapAlgorithm;->getMiddleTarget()Lcom/android/internal/policy/DividerSnapAlgorithm$SnapTarget;
-HSPLcom/android/internal/policy/DividerSnapAlgorithm;->getStartInset()I
-HSPLcom/android/internal/policy/DividerSnapAlgorithm;->maybeAddTarget(II)V
-HSPLcom/android/internal/policy/DockedDividerUtils;->calculateMiddlePosition(ZLandroid/graphics/Rect;III)I
-HPLcom/android/internal/policy/IKeyguardDrawnCallback$Stub$Proxy;->onDrawn()V
-PLcom/android/internal/policy/IKeyguardDrawnCallback$Stub;-><init>()V
-PLcom/android/internal/policy/IKeyguardDrawnCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/policy/IKeyguardDrawnCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->addStateMonitorCallback(Lcom/android/internal/policy/IKeyguardStateCallback;)V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onBootCompleted()V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onDreamingStarted()V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onDreamingStopped()V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onFinishedGoingToSleep(IZ)V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onFinishedWakingUp()V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onScreenTurnedOff()V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onScreenTurnedOn()V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onScreenTurningOff()V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onScreenTurningOn(Lcom/android/internal/policy/IKeyguardDrawnCallback;)V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onStartedGoingToSleep(I)V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onStartedWakingUp()V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onSystemReady()V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->setKeyguardEnabled(Z)V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->setOccluded(ZZ)V
-PLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->startKeyguardExitAnimation(JJ)V
-PLcom/android/internal/policy/IKeyguardService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardService;
-HPLcom/android/internal/policy/IKeyguardService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLcom/android/internal/policy/IKeyguardStateCallback$Stub$Proxy;->onInputRestrictedStateChanged(Z)V
-HPLcom/android/internal/policy/IKeyguardStateCallback$Stub$Proxy;->onShowingStateChanged(Z)V
-HPLcom/android/internal/policy/IKeyguardStateCallback$Stub$Proxy;->onSimSecureStateChanged(Z)V
-HPLcom/android/internal/policy/IKeyguardStateCallback$Stub$Proxy;->onTrustedChanged(Z)V
-PLcom/android/internal/policy/IKeyguardStateCallback$Stub;-><init>()V
-PLcom/android/internal/policy/IKeyguardStateCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/policy/IKeyguardStateCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/policy/IShortcutService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/policy/IShortcutService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IShortcutService;
-PLcom/android/internal/policy/KeyInterceptionInfo;-><init>(IILjava/lang/String;)V
 HSPLcom/android/internal/policy/PhoneFallbackEventHandler;-><init>(Landroid/content/Context;)V
-HPLcom/android/internal/policy/PhoneFallbackEventHandler;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
-HPLcom/android/internal/policy/PhoneFallbackEventHandler;->getAudioManager()Landroid/media/AudioManager;
-HPLcom/android/internal/policy/PhoneFallbackEventHandler;->getMediaSessionManager()Landroid/media/session/MediaSessionManager;
-HPLcom/android/internal/policy/PhoneFallbackEventHandler;->handleVolumeKeyEvent(Landroid/view/KeyEvent;)V
-HPLcom/android/internal/policy/PhoneFallbackEventHandler;->onKeyDown(ILandroid/view/KeyEvent;)Z
-HPLcom/android/internal/policy/PhoneFallbackEventHandler;->onKeyUp(ILandroid/view/KeyEvent;)Z
-HPLcom/android/internal/policy/PhoneFallbackEventHandler;->preDispatchKeyEvent(Landroid/view/KeyEvent;)V
+HSPLcom/android/internal/policy/PhoneFallbackEventHandler;->getAudioManager()Landroid/media/AudioManager;
+HSPLcom/android/internal/policy/PhoneFallbackEventHandler;->preDispatchKeyEvent(Landroid/view/KeyEvent;)V
 HSPLcom/android/internal/policy/PhoneFallbackEventHandler;->setView(Landroid/view/View;)V
-PLcom/android/internal/policy/PhoneLayoutInflater;-><init>(Landroid/content/Context;)V
-PLcom/android/internal/policy/PhoneLayoutInflater;-><init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V
+HSPLcom/android/internal/policy/PhoneLayoutInflater;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/policy/PhoneLayoutInflater;-><init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V
 HSPLcom/android/internal/policy/PhoneLayoutInflater;->cloneInContext(Landroid/content/Context;)Landroid/view/LayoutInflater;
 HSPLcom/android/internal/policy/PhoneLayoutInflater;->onCreateView(Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
-PLcom/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$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;
-HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;-><init>()V
-HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;->access$600(Landroid/os/Parcel;)Lcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;
-HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;->readFromParcel(Landroid/os/Parcel;)Lcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;
-HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
-PLcom/android/internal/policy/PhoneWindow$PanelFeatureState;-><init>(I)V
-PLcom/android/internal/policy/PhoneWindow$PanelFeatureState;->applyFrozenState()V
-HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;->onRestoreInstanceState(Landroid/os/Parcelable;)V
-HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;->onSaveInstanceState()Landroid/os/Parcelable;
-HPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;->setMenu(Lcom/android/internal/view/menu/MenuBuilder;)V
-PLcom/android/internal/policy/PhoneWindow$PhoneWindowMenuCallback;-><init>(Lcom/android/internal/policy/PhoneWindow;)V
+HSPLcom/android/internal/policy/PhoneWindow$1;-><init>(Lcom/android/internal/policy/PhoneWindow;)V
+HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;-><init>(I)V
+HSPLcom/android/internal/policy/PhoneWindow$PhoneWindowMenuCallback;-><init>(Lcom/android/internal/policy/PhoneWindow;)V
 HSPLcom/android/internal/policy/PhoneWindow;-><init>(Landroid/content/Context;)V
 HSPLcom/android/internal/policy/PhoneWindow;-><init>(Landroid/content/Context;Landroid/view/Window;Landroid/view/ViewRootImpl$ActivityConfigCallback;)V
 HSPLcom/android/internal/policy/PhoneWindow;->closeAllPanels()V
 HSPLcom/android/internal/policy/PhoneWindow;->closeContextMenu()V
 HSPLcom/android/internal/policy/PhoneWindow;->closePanel(Lcom/android/internal/policy/PhoneWindow$PanelFeatureState;Z)V
+HSPLcom/android/internal/policy/PhoneWindow;->createDefaultContentWindowInsetsListener()Landroid/view/Window$OnContentApplyWindowInsetsListener;
 HSPLcom/android/internal/policy/PhoneWindow;->dispatchWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V
-HSPLcom/android/internal/policy/PhoneWindow;->doInvalidatePanelMenu(I)V
 HSPLcom/android/internal/policy/PhoneWindow;->generateDecor(I)Lcom/android/internal/policy/DecorView;
 HSPLcom/android/internal/policy/PhoneWindow;->generateLayout(Lcom/android/internal/policy/DecorView;)Landroid/view/ViewGroup;
-HSPLcom/android/internal/policy/PhoneWindow;->getCurrentFocus()Landroid/view/View;
 HSPLcom/android/internal/policy/PhoneWindow;->getDecorView()Landroid/view/View;
 HSPLcom/android/internal/policy/PhoneWindow;->getLayoutInflater()Landroid/view/LayoutInflater;
-HSPLcom/android/internal/policy/PhoneWindow;->getNavigationBarColor()I
-HPLcom/android/internal/policy/PhoneWindow;->getNavigationBarDividerColor()I
 HSPLcom/android/internal/policy/PhoneWindow;->getPanelState(IZ)Lcom/android/internal/policy/PhoneWindow$PanelFeatureState;
 HSPLcom/android/internal/policy/PhoneWindow;->getPanelState(IZLcom/android/internal/policy/PhoneWindow$PanelFeatureState;)Lcom/android/internal/policy/PhoneWindow$PanelFeatureState;
-HSPLcom/android/internal/policy/PhoneWindow;->getStatusBarColor()I
 HSPLcom/android/internal/policy/PhoneWindow;->getTransition(Landroid/transition/Transition;Landroid/transition/Transition;I)Landroid/transition/Transition;
-HPLcom/android/internal/policy/PhoneWindow;->getTransitionBackgroundFadeDuration()J
-HPLcom/android/internal/policy/PhoneWindow;->initializePanelMenu(Lcom/android/internal/policy/PhoneWindow$PanelFeatureState;)Z
 HSPLcom/android/internal/policy/PhoneWindow;->installDecor()V
-HSPLcom/android/internal/policy/PhoneWindow;->invalidatePanelMenu(I)V
 HSPLcom/android/internal/policy/PhoneWindow;->isFloating()Z
 HSPLcom/android/internal/policy/PhoneWindow;->isShowingWallpaper()Z
 HSPLcom/android/internal/policy/PhoneWindow;->isTranslucent()Z
+HSPLcom/android/internal/policy/PhoneWindow;->lambda$createDefaultContentWindowInsetsListener$0$PhoneWindow(Landroid/view/WindowInsets;)Landroid/util/Pair;
 HSPLcom/android/internal/policy/PhoneWindow;->onActive()V
-HPLcom/android/internal/policy/PhoneWindow;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HPLcom/android/internal/policy/PhoneWindow;->onKeyDown(IILandroid/view/KeyEvent;)Z
-HPLcom/android/internal/policy/PhoneWindow;->onKeyUp(IILandroid/view/KeyEvent;)Z
 HSPLcom/android/internal/policy/PhoneWindow;->onViewRootImplSet(Landroid/view/ViewRootImpl;)V
 HSPLcom/android/internal/policy/PhoneWindow;->openPanelsAfterRestore()V
 HSPLcom/android/internal/policy/PhoneWindow;->peekDecorView()Landroid/view/View;
-HPLcom/android/internal/policy/PhoneWindow;->preparePanel(Lcom/android/internal/policy/PhoneWindow$PanelFeatureState;Landroid/view/KeyEvent;)Z
 HSPLcom/android/internal/policy/PhoneWindow;->requestFeature(I)Z
-HSPLcom/android/internal/policy/PhoneWindow;->restoreHierarchyState(Landroid/os/Bundle;)V
-HSPLcom/android/internal/policy/PhoneWindow;->restorePanelState(Landroid/util/SparseArray;)V
 HSPLcom/android/internal/policy/PhoneWindow;->saveHierarchyState()Landroid/os/Bundle;
+HSPLcom/android/internal/policy/PhoneWindow;->savePanelState(Landroid/util/SparseArray;)V
 HSPLcom/android/internal/policy/PhoneWindow;->setAttributes(Landroid/view/WindowManager$LayoutParams;)V
 HSPLcom/android/internal/policy/PhoneWindow;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLcom/android/internal/policy/PhoneWindow;->setContentView(I)V
 HSPLcom/android/internal/policy/PhoneWindow;->setContentView(Landroid/view/View;)V
 HSPLcom/android/internal/policy/PhoneWindow;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
-PLcom/android/internal/policy/PhoneWindow;->setDefaultIcon(I)V
-PLcom/android/internal/policy/PhoneWindow;->setDefaultLogo(I)V
 HSPLcom/android/internal/policy/PhoneWindow;->setDefaultWindowFormat(I)V
-HPLcom/android/internal/policy/PhoneWindow;->setExitTransition(Landroid/transition/Transition;)V
-HSPLcom/android/internal/policy/PhoneWindow;->setNavigationBarColor(I)V
 HSPLcom/android/internal/policy/PhoneWindow;->setStatusBarColor(I)V
 HSPLcom/android/internal/policy/PhoneWindow;->setTheme(I)V
 HSPLcom/android/internal/policy/PhoneWindow;->setTitle(Ljava/lang/CharSequence;)V
 HSPLcom/android/internal/policy/PhoneWindow;->setTitle(Ljava/lang/CharSequence;Z)V
 HSPLcom/android/internal/policy/PhoneWindow;->setTitleColor(I)V
-HPLcom/android/internal/policy/PhoneWindow;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLcom/android/internal/policy/PhoneWindow;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
 HSPLcom/android/internal/policy/PhoneWindow;->superDispatchTouchEvent(Landroid/view/MotionEvent;)Z
-HSPLcom/android/internal/policy/PipSnapAlgorithm;-><init>(Landroid/content/Context;)V
-PLcom/android/internal/policy/PipSnapAlgorithm;->applySnapFraction(Landroid/graphics/Rect;Landroid/graphics/Rect;F)V
-HSPLcom/android/internal/policy/PipSnapAlgorithm;->calculateSnapTargets()V
-HSPLcom/android/internal/policy/PipSnapAlgorithm;->getMovementBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;I)V
-HSPLcom/android/internal/policy/PipSnapAlgorithm;->getSizeForAspectRatio(FFII)Landroid/util/Size;
-HPLcom/android/internal/policy/PipSnapAlgorithm;->getSizeForAspectRatio(Landroid/util/Size;FF)Landroid/util/Size;
-PLcom/android/internal/policy/PipSnapAlgorithm;->getSnapFraction(Landroid/graphics/Rect;Landroid/graphics/Rect;)F
-HSPLcom/android/internal/policy/PipSnapAlgorithm;->onConfigurationChanged()V
-PLcom/android/internal/policy/PipSnapAlgorithm;->snapRectToClosestEdge(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 HSPLcom/android/internal/policy/ScreenDecorationsUtils;->getWindowCornerRadius(Landroid/content/res/Resources;)F
 HSPLcom/android/internal/policy/ScreenDecorationsUtils;->supportsRoundedCornersOnWindows(Landroid/content/res/Resources;)Z
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->abortTransient(I[I)V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->appTransitionCancelled(I)V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->appTransitionFinished(I)V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->appTransitionPending(I)V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->appTransitionStarting(IJJ)V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->disable(III)V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->handleSystemKey(I)V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->onCameraLaunchGestureDetected(I)V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->onProposedRotationChanged(IZ)V
-HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->onRecentsAnimationStateChanged(Z)V
-HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->onSystemBarAppearanceChanged(II[Lcom/android/internal/view/AppearanceRegion;Z)V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->remQsTile(Landroid/content/ComponentName;)V
-HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->setImeWindowStatus(ILandroid/os/IBinder;IIZZ)V
-HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->setTopAppHidesStatusBar(Z)V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->setWindowState(III)V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->showGlobalActionsMenu()V
-PLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->showTransient(I[I)V
-HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->topAppWindowChanged(IZZ)V
-PLcom/android/internal/statusbar/IStatusBar$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBar;
-HPLcom/android/internal/statusbar/IStatusBar$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->clearInlineReplyUriPermissions(Ljava/lang/String;)V
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->clearNotificationEffects()V
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->disable2ForUser(ILandroid/os/IBinder;Ljava/lang/String;I)V
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->disableForUser(ILandroid/os/IBinder;Ljava/lang/String;I)V
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->onGlobalActionsHidden()V
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->onGlobalActionsShown()V
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->onNotificationClear(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;IILcom/android/internal/statusbar/NotificationVisibility;)V
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->onNotificationClick(Ljava/lang/String;Lcom/android/internal/statusbar/NotificationVisibility;)V
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->onNotificationExpansionChanged(Ljava/lang/String;ZZI)V
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->onNotificationSmartSuggestionsAdded(Ljava/lang/String;IIZZ)V
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->onNotificationVisibilityChanged([Lcom/android/internal/statusbar/NotificationVisibility;[Lcom/android/internal/statusbar/NotificationVisibility;)V
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->onPanelHidden()V
-HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->onPanelRevealed(ZI)V
-HSPLcom/android/internal/statusbar/IStatusBarService$Stub;-><init>()V
 HSPLcom/android/internal/statusbar/IStatusBarService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBarService;
-PLcom/android/internal/statusbar/IStatusBarService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLcom/android/internal/statusbar/IStatusBarService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/statusbar/NotificationVisibility$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/statusbar/NotificationVisibility;
-PLcom/android/internal/statusbar/NotificationVisibility$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLcom/android/internal/statusbar/NotificationVisibility$1;->newArray(I)[Lcom/android/internal/statusbar/NotificationVisibility;
-PLcom/android/internal/statusbar/NotificationVisibility$1;->newArray(I)[Ljava/lang/Object;
-PLcom/android/internal/statusbar/NotificationVisibility$NotificationLocation;->valueOf(Ljava/lang/String;)Lcom/android/internal/statusbar/NotificationVisibility$NotificationLocation;
-PLcom/android/internal/statusbar/NotificationVisibility$NotificationLocation;->values()[Lcom/android/internal/statusbar/NotificationVisibility$NotificationLocation;
-HPLcom/android/internal/statusbar/NotificationVisibility;-><init>()V
-PLcom/android/internal/statusbar/NotificationVisibility;->access$000(Landroid/os/Parcel;)Lcom/android/internal/statusbar/NotificationVisibility;
-HPLcom/android/internal/statusbar/NotificationVisibility;->clone()Lcom/android/internal/statusbar/NotificationVisibility;
-HPLcom/android/internal/statusbar/NotificationVisibility;->equals(Ljava/lang/Object;)Z
-HPLcom/android/internal/statusbar/NotificationVisibility;->hashCode()I
-PLcom/android/internal/statusbar/NotificationVisibility;->obtain()Lcom/android/internal/statusbar/NotificationVisibility;
-PLcom/android/internal/statusbar/NotificationVisibility;->obtain(Landroid/os/Parcel;)Lcom/android/internal/statusbar/NotificationVisibility;
-HPLcom/android/internal/statusbar/NotificationVisibility;->obtain(Ljava/lang/String;IIZLcom/android/internal/statusbar/NotificationVisibility$NotificationLocation;)Lcom/android/internal/statusbar/NotificationVisibility;
-PLcom/android/internal/statusbar/NotificationVisibility;->readFromParcel(Landroid/os/Parcel;)V
-PLcom/android/internal/statusbar/NotificationVisibility;->recycle()V
-HPLcom/android/internal/statusbar/NotificationVisibility;->writeToParcel(Landroid/os/Parcel;I)V
-PLcom/android/internal/statusbar/RegisterStatusBarResult$1;-><init>()V
-PLcom/android/internal/statusbar/RegisterStatusBarResult;-><clinit>()V
-PLcom/android/internal/statusbar/RegisterStatusBarResult;-><init>(Landroid/util/ArrayMap;II[Lcom/android/internal/view/AppearanceRegion;IIZILandroid/os/IBinder;ZZZ[I)V
-PLcom/android/internal/statusbar/RegisterStatusBarResult;->writeToParcel(Landroid/os/Parcel;I)V
-HPLcom/android/internal/statusbar/StatusBarIcon;-><init>(Landroid/os/UserHandle;Ljava/lang/String;Landroid/graphics/drawable/Icon;IILjava/lang/CharSequence;)V
-HPLcom/android/internal/statusbar/StatusBarIcon;->clone()Lcom/android/internal/statusbar/StatusBarIcon;
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCallCapablePhoneAccounts(ZLjava/lang/String;)Ljava/util/List;
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCallState()I
-HSLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCurrentTtyMode(Ljava/lang/String;)I
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getDefaultDialerPackage()Ljava/lang/String;
-HPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/telecom/PhoneAccount;
-HPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getPhoneAccountsSupportingScheme(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
-HPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getSimCallManager(I)Landroid/telecom/PhoneAccountHandle;
-HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getSystemDialerPackage()Ljava/lang/String;
-HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getUserSelectedOutgoingPhoneAccount(Ljava/lang/String;)Landroid/telecom/PhoneAccountHandle;
-HPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->isInCall(Ljava/lang/String;)Z
-HPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->isInEmergencyCall()Z
-HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->registerPhoneAccount(Landroid/telecom/PhoneAccount;)V
-PLcom/android/internal/telecom/ITelecomService$Stub;-><init>()V
 HSPLcom/android/internal/telecom/ITelecomService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/ITelecomService;
-PLcom/android/internal/telecom/ITelecomService$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLcom/android/internal/telecom/ITelecomService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/telephony/CarrierAppUtils;->disableCarrierAppsUntilPrivileged(Ljava/lang/String;Landroid/content/pm/IPackageManager;Landroid/permission/IPermissionManager;Landroid/content/ContentResolver;I)V
-HSPLcom/android/internal/telephony/CarrierAppUtils;->disableCarrierAppsUntilPrivileged(Ljava/lang/String;Landroid/content/pm/IPackageManager;Landroid/permission/IPermissionManager;Landroid/telephony/TelephonyManager;Landroid/content/ContentResolver;I)V
-HSPLcom/android/internal/telephony/CarrierAppUtils;->disableCarrierAppsUntilPrivileged(Ljava/lang/String;Landroid/content/pm/IPackageManager;Landroid/permission/IPermissionManager;Landroid/telephony/TelephonyManager;Landroid/content/ContentResolver;ILandroid/util/ArraySet;Landroid/util/ArrayMap;)V
-HSPLcom/android/internal/telephony/CarrierAppUtils;->getApplicationInfoIfSystemApp(Landroid/content/pm/IPackageManager;ILjava/lang/String;)Landroid/content/pm/ApplicationInfo;
-HSPLcom/android/internal/telephony/CarrierAppUtils;->getDefaultCarrierAppCandidatesHelper(Landroid/content/pm/IPackageManager;ILandroid/util/ArraySet;)Ljava/util/List;
-HSPLcom/android/internal/telephony/CarrierAppUtils;->getDefaultCarrierAssociatedAppsHelper(Landroid/content/pm/IPackageManager;ILandroid/util/ArrayMap;)Ljava/util/Map;
-HSPLcom/android/internal/telephony/ExponentialBackoff$1;-><init>(Lcom/android/internal/telephony/ExponentialBackoff;)V
-HSPLcom/android/internal/telephony/ExponentialBackoff$1;->removeCallbacks(Ljava/lang/Runnable;)V
-HSPLcom/android/internal/telephony/ExponentialBackoff;-><init>(JJILandroid/os/Handler;Ljava/lang/Runnable;)V
-HSPLcom/android/internal/telephony/ExponentialBackoff;-><init>(JJILandroid/os/Looper;Ljava/lang/Runnable;)V
-HSPLcom/android/internal/telephony/ExponentialBackoff;->access$000(Lcom/android/internal/telephony/ExponentialBackoff;)Landroid/os/Handler;
-HSPLcom/android/internal/telephony/ExponentialBackoff;->getCurrentDelay()J
-HSPLcom/android/internal/telephony/ExponentialBackoff;->stop()V
-HSPLcom/android/internal/telephony/HbpcdUtils;-><init>(Landroid/content/Context;)V
 HSPLcom/android/internal/telephony/ICarrierConfigLoader$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/android/internal/telephony/ICarrierConfigLoader$Stub$Proxy;->getConfigForSubIdWithFeature(ILjava/lang/String;Ljava/lang/String;)Landroid/os/PersistableBundle;
-PLcom/android/internal/telephony/ICarrierConfigLoader$Stub$Proxy;->getDefaultCarrierServicePackageName()Ljava/lang/String;
-HSPLcom/android/internal/telephony/ICarrierConfigLoader$Stub;-><init>()V
 HSPLcom/android/internal/telephony/ICarrierConfigLoader$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ICarrierConfigLoader;
-HSPLcom/android/internal/telephony/ICarrierConfigLoader$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/telephony/IMms$Stub;-><init>()V
-PLcom/android/internal/telephony/IMms$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;->onSubscriptionsChanged()V
 HSPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub;-><init>()V
 HSPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub;->asBinder()Landroid/os/IBinder;
-HSPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;
 HSPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/telephony/IOns$Stub;-><init>()V
-HPLcom/android/internal/telephony/IOns$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;->onActiveDataSubIdChanged(I)V
 HSPLcom/android/internal/telephony/IPhoneStateListener$Stub;-><init>()V
 HSPLcom/android/internal/telephony/IPhoneStateListener$Stub;->asBinder()Landroid/os/IBinder;
-HSPLcom/android/internal/telephony/IPhoneStateListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IPhoneStateListener;
 HSPLcom/android/internal/telephony/IPhoneStateListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getGroupIdLevel1ForSubscriber(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getIccSerialNumberForSubscriber(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getLine1NumberForSubscriber(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getGroupIdLevel1ForSubscriber(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getLine1NumberForSubscriber(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getSubscriberIdForSubscriber(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/internal/telephony/IPhoneSubInfo$Stub;-><init>()V
 HSPLcom/android/internal/telephony/IPhoneSubInfo$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IPhoneSubInfo;
-HSPLcom/android/internal/telephony/IPhoneSubInfo$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/telephony/ISms$Stub$Proxy;->getPreferredSmsSubscription()I
-HSPLcom/android/internal/telephony/ISms$Stub;-><init>()V
-HSPLcom/android/internal/telephony/ISms$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ISms;
-HPLcom/android/internal/telephony/ISms$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/telephony/ISmsImplBase;-><init>()V
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getActiveDataSubscriptionId()I
-HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getActiveSubIdList(Z)[I
-HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getActiveSubInfoCount(Ljava/lang/String;Ljava/lang/String;)I
-HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getActiveSubInfoCountMax()I
-HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getActiveSubscriptionInfoForSimSlotIndex(ILjava/lang/String;Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;
+HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getActiveSubscriptionInfo(ILjava/lang/String;Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getActiveSubscriptionInfoList(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
-HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getAllSubInfoList(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
-PLcom/android/internal/telephony/ISub$Stub$Proxy;->getAvailableSubscriptionInfoList(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getDefaultDataSubId()I
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getDefaultSmsSubId()I
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getDefaultSubId()I
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getDefaultVoiceSubId()I
-HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getOpportunisticSubscriptions(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
-PLcom/android/internal/telephony/ISub$Stub$Proxy;->getPhoneId(I)I
+HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getPhoneId(I)I
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getSimStateForSlotIndex(I)I
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getSlotIndex(I)I
-HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getSubId(I)[I
-HSPLcom/android/internal/telephony/ISub$Stub;-><init>()V
 HSPLcom/android/internal/telephony/ISub$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ISub;
-HSPLcom/android/internal/telephony/ISub$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->checkCarrierPrivilegesForPackageAnyPhone(Ljava/lang/String;)I
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getActivePhoneTypeForSlot(I)I
-HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getAllCellInfo(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getCarrierPrivilegeStatus(I)I
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getDataActivityForSubId(I)I
-PLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getDataNetworkTypeForSubscriber(ILjava/lang/String;Ljava/lang/String;)I
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getDataStateForSubId(I)I
-HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getDeviceIdWithFeature(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getEmergencyNumberList(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Map;
-HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getImeiForSlot(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getImsRegistration(II)Landroid/telephony/ims/aidl/IImsRegistration;
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getLine1NumberForDisplay(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getLteOnCdmaModeForSubscriber(ILjava/lang/String;Ljava/lang/String;)I
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getMeidForSlot(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getMmTelFeatureAndListen(ILcom/android/ims/internal/IImsServiceFeatureCallback;)Landroid/telephony/ims/aidl/IImsMmTelFeature;
-HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getMmsUAProfUrl(I)Ljava/lang/String;
-HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getMmsUserAgent(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getLine1NumberForDisplay(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getNetworkCountryIsoForPhone(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getNetworkTypeForSubscriber(ILjava/lang/String;Ljava/lang/String;)I
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getPackagesWithCarrierPrivilegesForAllPhones()Ljava/util/List;
-PLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getServiceStateForSubscriber(ILjava/lang/String;Ljava/lang/String;)Landroid/telephony/ServiceState;
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getSignalStrength(I)Landroid/telephony/SignalStrength;
-HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getUiccCardsInfo(Ljava/lang/String;)Ljava/util/List;
-HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getUiccSlotsInfo()[Landroid/telephony/UiccSlotInfo;
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getVoiceNetworkTypeForSubscriber(ILjava/lang/String;Ljava/lang/String;)I
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getVtDataUsage(IZ)Landroid/net/NetworkStats;
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->isConcurrentVoiceAndDataAllowed(I)Z
-HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->isEmergencyNumber(Ljava/lang/String;Z)Z
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->isTetheringApnRequiredForSubscriber(I)Z
+HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getServiceStateForSubscriber(ILjava/lang/String;Ljava/lang/String;)Landroid/telephony/ServiceState;
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->isUserDataEnabled(I)Z
-HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->requestCellInfoUpdateWithWorkSource(ILandroid/telephony/ICellInfoCallback;Ljava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;)V
-PLcom/android/internal/telephony/ITelephony$Stub$Proxy;->requestModemActivityInfo(Landroid/os/ResultReceiver;)V
-HSPLcom/android/internal/telephony/ITelephony$Stub;-><init>()V
 HSPLcom/android/internal/telephony/ITelephony$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ITelephony;
-HSPLcom/android/internal/telephony/ITelephony$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->addOnOpportunisticSubscriptionsChangedListener(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
 HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->addOnSubscriptionsChangedListener(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
 HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->listenForSubscriber(ILjava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;IZ)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyActiveDataSubIdChanged(I)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyCellInfoForSubscriber(ILjava/util/List;)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyCellLocationForSubscriber(ILandroid/os/Bundle;)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyDataActivityForSubscriber(II)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyDataConnectionForSubscriber(IIIZLjava/lang/String;Ljava/lang/String;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;IZ)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyEmergencyNumberList(II)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyOtaspChanged(II)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyPhoneCapabilityChanged(Landroid/telephony/PhoneCapability;)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyPreciseCallState(IIIII)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyRadioPowerStateChanged(III)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyServiceStateForPhoneId(IILandroid/telephony/ServiceState;)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifySignalStrengthForPhoneId(IILandroid/telephony/SignalStrength;)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifySimActivationStateChangedForPhoneId(IIII)V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifySubscriptionInfoChanged()V
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub;-><init>()V
 HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ITelephonyRegistry;
-PLcom/android/internal/telephony/ITelephonyRegistry$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/telephony/PhoneConstantConversions;->convertDataState(Lcom/android/internal/telephony/PhoneConstants$DataState;)I
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;-><init>(Ljava/lang/String;I)V
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->access$000(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;)Ljava/lang/String;
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->access$002(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->access$100(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;)Ljava/lang/String;
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->access$102(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->access$202(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->access$300(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;)Ljava/lang/String;
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->access$302(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->access$402(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->access$502(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->access$602(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->access$700(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;)I
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->isComplete()Z
-HSPLcom/android/internal/telephony/SmsApplication$SmsPackageMonitor;-><init>(Landroid/content/Context;)V
-HPLcom/android/internal/telephony/SmsApplication$SmsPackageMonitor;->onPackageAppeared()V
-HPLcom/android/internal/telephony/SmsApplication$SmsPackageMonitor;->onPackageChanged()V
-HPLcom/android/internal/telephony/SmsApplication$SmsPackageMonitor;->onPackageDisappeared()V
-HPLcom/android/internal/telephony/SmsApplication$SmsPackageMonitor;->onPackageModified(Ljava/lang/String;)V
-HPLcom/android/internal/telephony/SmsApplication;->access$800(Landroid/content/pm/PackageManager;Landroid/content/ComponentName;I)V
-HSPLcom/android/internal/telephony/SmsApplication;->assignExclusiveSmsPermissionsToSystemApp(Landroid/content/Context;Landroid/content/pm/PackageManager;Landroid/app/AppOpsManager;Ljava/lang/String;)V
-PLcom/android/internal/telephony/SmsApplication;->broadcastSmsAppChange(Landroid/content/Context;Landroid/os/UserHandle;Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;)V
-PLcom/android/internal/telephony/SmsApplication;->broadcastSmsAppChange(Landroid/content/Context;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;)V
-HPLcom/android/internal/telephony/SmsApplication;->configurePreferredActivity(Landroid/content/pm/PackageManager;Landroid/content/ComponentName;I)V
-HSPLcom/android/internal/telephony/SmsApplication;->defaultSmsAppChanged(Landroid/content/Context;)V
 HSPLcom/android/internal/telephony/SmsApplication;->getApplication(Landroid/content/Context;ZI)Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;
-PLcom/android/internal/telephony/SmsApplication;->getApplicationCollection(Landroid/content/Context;)Ljava/util/Collection;
-PLcom/android/internal/telephony/SmsApplication;->getApplicationCollectionAsUser(Landroid/content/Context;I)Ljava/util/Collection;
 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;
-PLcom/android/internal/telephony/SmsApplication;->getDefaultMmsApplication(Landroid/content/Context;Z)Landroid/content/ComponentName;
-HPLcom/android/internal/telephony/SmsApplication;->getDefaultSendToApplication(Landroid/content/Context;Z)Landroid/content/ComponentName;
 HSPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsApplication(Landroid/content/Context;Z)Landroid/content/ComponentName;
 HSPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsApplicationAsUser(Landroid/content/Context;ZI)Landroid/content/ComponentName;
 HSPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsPackage(Landroid/content/Context;I)Ljava/lang/String;
 HSPLcom/android/internal/telephony/SmsApplication;->getIncomingUserId(Landroid/content/Context;)I
-HSPLcom/android/internal/telephony/SmsApplication;->initSmsPackageMonitor(Landroid/content/Context;)V
-HPLcom/android/internal/telephony/SmsApplication;->isDefaultSmsApplication(Landroid/content/Context;Ljava/lang/String;)Z
-HPLcom/android/internal/telephony/SmsApplication;->replacePreferredActivity(Landroid/content/pm/PackageManager;Landroid/content/ComponentName;ILjava/lang/String;)V
-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
-HSPLcom/android/internal/telephony/TelephonyPermissions;->checkCallingOrSelfReadDeviceIdentifiers(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-HSPLcom/android/internal/telephony/TelephonyPermissions;->checkCallingOrSelfReadPhoneNumber(Landroid/content/Context;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-HSPLcom/android/internal/telephony/TelephonyPermissions;->checkCallingOrSelfReadPhoneState(Landroid/content/Context;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-HPLcom/android/internal/telephony/TelephonyPermissions;->checkCallingOrSelfReadPhoneStateNoThrow(Landroid/content/Context;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-HPLcom/android/internal/telephony/TelephonyPermissions;->checkCallingOrSelfReadSubscriberIdentifiers(Landroid/content/Context;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/internal/telephony/TelephonyPermissions;->checkCarrierPrivilegeForAnySubId(Landroid/content/Context;I)Z
-PLcom/android/internal/telephony/TelephonyPermissions;->checkCarrierPrivilegeForSubId(Landroid/content/Context;I)Z
-HSPLcom/android/internal/telephony/TelephonyPermissions;->checkPrivilegedReadPermissionOrCarrierPrivilegePermission(Landroid/content/Context;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Z
-HSPLcom/android/internal/telephony/TelephonyPermissions;->checkReadPhoneNumber(Landroid/content/Context;IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-HSPLcom/android/internal/telephony/TelephonyPermissions;->checkReadPhoneState(Landroid/content/Context;IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/internal/telephony/TelephonyPermissions;->reportAccessDeniedToReadIdentifiers(Landroid/content/Context;IIILjava/lang/String;Ljava/lang/String;)Z
-HSPLcom/android/internal/telephony/euicc/IEuiccCardController$Stub;-><init>()V
-HPLcom/android/internal/telephony/euicc/IEuiccCardController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/telephony/euicc/IEuiccController$Stub;-><init>()V
-HSPLcom/android/internal/telephony/euicc/IEuiccController$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/euicc/IEuiccController;
-HPLcom/android/internal/telephony/euicc/IEuiccController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/telephony/uicc/IccUtils;->byteToHex(B)Ljava/lang/String;
-HSPLcom/android/internal/telephony/uicc/IccUtils;->hexCharToInt(C)I
-HSPLcom/android/internal/telephony/uicc/IccUtils;->hexStringToBytes(Ljava/lang/String;)[B
-HSPLcom/android/internal/telephony/uicc/IccUtils;->stripTrailingFs(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/internal/telephony/util/ArrayUtils;->isEmpty(Ljava/util/Collection;)Z
-HSPLcom/android/internal/telephony/util/ArrayUtils;->isEmpty([Ljava/lang/Object;)Z
 HSPLcom/android/internal/telephony/util/HandlerExecutor;-><init>(Landroid/os/Handler;)V
 HSPLcom/android/internal/telephony/util/HandlerExecutor;->execute(Ljava/lang/Runnable;)V
-HSPLcom/android/internal/telephony/util/RemoteCallbackListExt;-><init>()V
-HSPLcom/android/internal/telephony/util/RemoteCallbackListExt;->broadcastAction(Ljava/util/function/Consumer;)V
-HPLcom/android/internal/telephony/util/TelephonyUtils;->checkDumpPermission(Landroid/content/Context;Ljava/lang/String;Ljava/io/PrintWriter;)Z
-HSPLcom/android/internal/telephony/util/TelephonyUtils;->emptyIfNull(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/internal/telephony/util/TelephonyUtils;->getComponentInfo(Landroid/content/pm/ResolveInfo;)Landroid/content/pm/ComponentInfo;
-PLcom/android/internal/textservice/ISpellCheckerService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/textservice/ISpellCheckerService$Stub$Proxy;->getISpellCheckerSession(Ljava/lang/String;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;Lcom/android/internal/textservice/ISpellCheckerServiceCallback;)V
-HPLcom/android/internal/textservice/ISpellCheckerService$Stub;-><init>()V
-PLcom/android/internal/textservice/ISpellCheckerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/textservice/ISpellCheckerService;
-HPLcom/android/internal/textservice/ISpellCheckerService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/textservice/ISpellCheckerServiceCallback$Stub;-><init>()V
-PLcom/android/internal/textservice/ISpellCheckerServiceCallback$Stub;->asBinder()Landroid/os/IBinder;
-HPLcom/android/internal/textservice/ISpellCheckerServiceCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/textservice/ISpellCheckerServiceCallback;
-PLcom/android/internal/textservice/ISpellCheckerServiceCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/textservice/ISpellCheckerSession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/textservice/ISpellCheckerSession$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLcom/android/internal/textservice/ISpellCheckerSession$Stub$Proxy;->onClose()V
-HPLcom/android/internal/textservice/ISpellCheckerSession$Stub;-><init>()V
-HPLcom/android/internal/textservice/ISpellCheckerSession$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/textservice/ISpellCheckerSession$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/textservice/ISpellCheckerSession;
-HPLcom/android/internal/textservice/ISpellCheckerSession$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/textservice/ISpellCheckerSessionListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/textservice/ISpellCheckerSessionListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLcom/android/internal/textservice/ISpellCheckerSessionListener$Stub;-><init>()V
-HPLcom/android/internal/textservice/ISpellCheckerSessionListener$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/textservice/ISpellCheckerSessionListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/textservice/ISpellCheckerSessionListener;
 HSPLcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HPLcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;->finishSpellCheckerService(ILcom/android/internal/textservice/ISpellCheckerSessionListener;)V
-HPLcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;->getCurrentSpellChecker(ILjava/lang/String;)Landroid/view/textservice/SpellCheckerInfo;
-HPLcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;->getCurrentSpellCheckerSubtype(IZ)Landroid/view/textservice/SpellCheckerSubtype;
-HPLcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;->getSpellCheckerService(ILjava/lang/String;Ljava/lang/String;Lcom/android/internal/textservice/ITextServicesSessionListener;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;)V
-HPLcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;->isSpellCheckerEnabled(I)Z
-HSPLcom/android/internal/textservice/ITextServicesManager$Stub;-><init>()V
 HSPLcom/android/internal/textservice/ITextServicesManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/textservice/ITextServicesManager;
-PLcom/android/internal/textservice/ITextServicesManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLcom/android/internal/textservice/ITextServicesManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/textservice/ITextServicesSessionListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/textservice/ITextServicesSessionListener$Stub$Proxy;->onServiceConnected(Lcom/android/internal/textservice/ISpellCheckerSession;)V
-HPLcom/android/internal/textservice/ITextServicesSessionListener$Stub;-><init>()V
-HPLcom/android/internal/textservice/ITextServicesSessionListener$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/textservice/ITextServicesSessionListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/textservice/ITextServicesSessionListener;
-HPLcom/android/internal/textservice/ITextServicesSessionListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/usb/DumpUtils;->writeContaminantPresenceStatus(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;JI)V
-PLcom/android/internal/usb/DumpUtils;->writeDataRole(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;JI)V
-PLcom/android/internal/usb/DumpUtils;->writePort(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;JLandroid/hardware/usb/UsbPort;)V
-PLcom/android/internal/usb/DumpUtils;->writePortStatus(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;JLandroid/hardware/usb/UsbPortStatus;)V
-PLcom/android/internal/usb/DumpUtils;->writePowerRole(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;JI)V
-PLcom/android/internal/util/-$$Lambda$DumpUtils$X8irOs5hfloCKy89_l1HRA1QeG0;-><init>(Landroid/content/ComponentName;)V
-HPLcom/android/internal/util/-$$Lambda$DumpUtils$X8irOs5hfloCKy89_l1HRA1QeG0;->test(Ljava/lang/Object;)Z
-PLcom/android/internal/util/-$$Lambda$DumpUtils$vCLO_0ezRxkpSERUWCFrJ0ph5jg;-><init>(ILjava/lang/String;)V
-PLcom/android/internal/util/-$$Lambda$DumpUtils$vCLO_0ezRxkpSERUWCFrJ0ph5jg;->test(Ljava/lang/Object;)Z
-PLcom/android/internal/util/-$$Lambda$FunctionalUtils$koCSI8D7Nu5vOJTVTEj0m3leo_U;-><init>(Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;Ljava/util/function/Consumer;)V
-PLcom/android/internal/util/-$$Lambda$FunctionalUtils$koCSI8D7Nu5vOJTVTEj0m3leo_U;->run()V
-PLcom/android/internal/util/-$$Lambda$JwOUSWW2-Jzu15y4Kn4JuPh8tWM;->test(Ljava/lang/Object;)Z
-HSPLcom/android/internal/util/-$$Lambda$ProviderAccessStats$9AhC6lKURctNKuYjVd-wu7jn6_c;-><clinit>()V
-HSPLcom/android/internal/util/-$$Lambda$ProviderAccessStats$9AhC6lKURctNKuYjVd-wu7jn6_c;-><init>()V
-HSPLcom/android/internal/util/-$$Lambda$ProviderAccessStats$9AhC6lKURctNKuYjVd-wu7jn6_c;->get()Ljava/lang/Object;
-PLcom/android/internal/util/-$$Lambda$TCbPpgWlKJUHZgFKCczglAvxLfw;->test(Ljava/lang/Object;)Z
-PLcom/android/internal/util/-$$Lambda$grRTg3idX3yJe9Zyx-tmLBiD1DM;->test(Ljava/lang/Object;)Z
-PLcom/android/internal/util/-$$Lambda$kVylv1rl9MOSbHFZoVyK5dl1kfY;->test(Ljava/lang/Object;)Z
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/IntRange;ILjava/lang/String;J)V
-HPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/IntRange;ILjava/lang/String;JLjava/lang/String;J)V
-HPLcom/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/IntRange;ILjava/lang/String;JLjava/lang/String;J)V
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/NonNull;Ljava/lang/Object;)V
-HSPLcom/android/internal/util/ArrayUtils;->add(Ljava/util/ArrayList;ILjava/lang/Object;)Ljava/util/ArrayList;
-HSPLcom/android/internal/util/ArrayUtils;->add(Ljava/util/ArrayList;Ljava/lang/Object;)Ljava/util/ArrayList;
+HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Ljava/lang/annotation/Annotation;I)V
 HSPLcom/android/internal/util/ArrayUtils;->appendElement(Ljava/lang/Class;[Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->appendElement(Ljava/lang/Class;[Ljava/lang/Object;Ljava/lang/Object;Z)[Ljava/lang/Object;
-HSPLcom/android/internal/util/ArrayUtils;->appendInt([II)[I
-HSPLcom/android/internal/util/ArrayUtils;->appendInt([IIZ)[I
-HSPLcom/android/internal/util/ArrayUtils;->appendLong([JJZ)[J
 HSPLcom/android/internal/util/ArrayUtils;->checkBounds(II)V
-HSPLcom/android/internal/util/ArrayUtils;->cloneOrNull([Ljava/lang/Object;)[Ljava/lang/Object;
-HSPLcom/android/internal/util/ArrayUtils;->contains(Ljava/util/Collection;Ljava/lang/Object;)Z
-HSPLcom/android/internal/util/ArrayUtils;->contains([II)Z
 HSPLcom/android/internal/util/ArrayUtils;->contains([Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLcom/android/internal/util/ArrayUtils;->containsAll([Ljava/lang/Object;[Ljava/lang/Object;)Z
-HSPLcom/android/internal/util/ArrayUtils;->convertToIntArray(Ljava/util/List;)[I
-HSPLcom/android/internal/util/ArrayUtils;->convertToLongArray([I)[J
 HSPLcom/android/internal/util/ArrayUtils;->deepToString(Ljava/lang/Object;)Ljava/lang/String;
-PLcom/android/internal/util/ArrayUtils;->defeatNullable([I)[I
-HSPLcom/android/internal/util/ArrayUtils;->defeatNullable([Ljava/io/File;)[Ljava/io/File;
 HSPLcom/android/internal/util/ArrayUtils;->defeatNullable([Ljava/lang/String;)[Ljava/lang/String;
 HSPLcom/android/internal/util/ArrayUtils;->emptyArray(Ljava/lang/Class;)[Ljava/lang/Object;
-HSPLcom/android/internal/util/ArrayUtils;->filterNotNull([Ljava/lang/Object;Ljava/util/function/IntFunction;)[Ljava/lang/Object;
-HSPLcom/android/internal/util/ArrayUtils;->firstOrNull([Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/internal/util/ArrayUtils;->isEmpty(Ljava/util/Collection;)Z
-PLcom/android/internal/util/ArrayUtils;->isEmpty(Ljava/util/Map;)Z
-HSPLcom/android/internal/util/ArrayUtils;->isEmpty([B)Z
 HSPLcom/android/internal/util/ArrayUtils;->isEmpty([I)Z
-PLcom/android/internal/util/ArrayUtils;->isEmpty([J)Z
 HSPLcom/android/internal/util/ArrayUtils;->isEmpty([Ljava/lang/Object;)Z
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedArray(Ljava/lang/Class;I)[Ljava/lang/Object;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedBooleanArray(I)[Z
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedByteArray(I)[B
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedCharArray(I)[C
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedFloatArray(I)[F
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedIntArray(I)[I
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedLongArray(I)[J
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedObjectArray(I)[Ljava/lang/Object;
-HSPLcom/android/internal/util/ArrayUtils;->referenceEquals(Ljava/util/ArrayList;Ljava/util/ArrayList;)Z
-HSPLcom/android/internal/util/ArrayUtils;->remove(Ljava/util/ArrayList;Ljava/lang/Object;)Ljava/util/ArrayList;
-HPLcom/android/internal/util/ArrayUtils;->removeElement(Ljava/lang/Class;[Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
-HPLcom/android/internal/util/ArrayUtils;->removeInt([II)[I
-HSPLcom/android/internal/util/ArrayUtils;->size(Ljava/util/Collection;)I
 HSPLcom/android/internal/util/ArrayUtils;->size([Ljava/lang/Object;)I
-HSPLcom/android/internal/util/ArrayUtils;->total([J)J
-PLcom/android/internal/util/ArrayUtils;->trimToSize([Ljava/lang/Object;I)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->unstableRemoveIf(Ljava/util/ArrayList;Ljava/util/function/Predicate;)I
-HSPLcom/android/internal/util/AsyncChannel$DeathMonitor;-><init>(Lcom/android/internal/util/AsyncChannel;)V
-HSPLcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;-><init>(Lcom/android/internal/util/AsyncChannel$SyncMessenger;Landroid/os/Looper;)V
-HSPLcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;-><init>(Lcom/android/internal/util/AsyncChannel$SyncMessenger;Landroid/os/Looper;Lcom/android/internal/util/AsyncChannel$1;)V
-HSPLcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;->access$300(Lcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;)Ljava/lang/Object;
-HSPLcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;->access$400(Lcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;)Landroid/os/Message;
-PLcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;->access$402(Lcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;Landroid/os/Message;)Landroid/os/Message;
-HPLcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;->handleMessage(Landroid/os/Message;)V
-HSPLcom/android/internal/util/AsyncChannel$SyncMessenger;-><init>()V
-HSPLcom/android/internal/util/AsyncChannel$SyncMessenger;->access$100(Landroid/os/Messenger;Landroid/os/Message;)Landroid/os/Message;
-HSPLcom/android/internal/util/AsyncChannel$SyncMessenger;->obtain()Lcom/android/internal/util/AsyncChannel$SyncMessenger;
-HPLcom/android/internal/util/AsyncChannel$SyncMessenger;->recycle()V
-HSPLcom/android/internal/util/AsyncChannel$SyncMessenger;->sendMessageSynchronously(Landroid/os/Messenger;Landroid/os/Message;)Landroid/os/Message;
-HSPLcom/android/internal/util/AsyncChannel;-><init>()V
-HSPLcom/android/internal/util/AsyncChannel;->connect(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Handler;)V
-HSPLcom/android/internal/util/AsyncChannel;->connect(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Messenger;)V
-HSPLcom/android/internal/util/AsyncChannel;->connectSync(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Messenger;)I
-HSPLcom/android/internal/util/AsyncChannel;->connected(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Messenger;)V
-PLcom/android/internal/util/AsyncChannel;->disconnect()V
-HSPLcom/android/internal/util/AsyncChannel;->linkToDeathMonitor()Z
-PLcom/android/internal/util/AsyncChannel;->replyDisconnected(I)V
-HSPLcom/android/internal/util/AsyncChannel;->replyHalfConnected(I)V
-HSPLcom/android/internal/util/AsyncChannel;->replyToMessage(Landroid/os/Message;II)V
-HSPLcom/android/internal/util/AsyncChannel;->replyToMessage(Landroid/os/Message;Landroid/os/Message;)V
-HSPLcom/android/internal/util/AsyncChannel;->sendMessage(I)V
-PLcom/android/internal/util/AsyncChannel;->sendMessage(II)V
-HSPLcom/android/internal/util/AsyncChannel;->sendMessage(III)V
-HSPLcom/android/internal/util/AsyncChannel;->sendMessage(IIILjava/lang/Object;)V
-HPLcom/android/internal/util/AsyncChannel;->sendMessage(ILjava/lang/Object;)V
-HSPLcom/android/internal/util/AsyncChannel;->sendMessage(Landroid/os/Message;)V
-HSPLcom/android/internal/util/AsyncChannel;->sendMessageSynchronously(I)Landroid/os/Message;
-PLcom/android/internal/util/AsyncChannel;->sendMessageSynchronously(IIILjava/lang/Object;)Landroid/os/Message;
-HSPLcom/android/internal/util/AsyncChannel;->sendMessageSynchronously(Landroid/os/Message;)Landroid/os/Message;
-PLcom/android/internal/util/BitUtils;->bitAt(I)J
-HPLcom/android/internal/util/BitUtils;->maskedEquals(Ljava/util/UUID;Ljava/util/UUID;Ljava/util/UUID;)Z
-HSPLcom/android/internal/util/BitUtils;->packBits([I)J
-PLcom/android/internal/util/BitUtils;->toBytes(J)[B
-HPLcom/android/internal/util/BitUtils;->uint16(S)I
-HPLcom/android/internal/util/BitUtils;->uint32(I)J
-PLcom/android/internal/util/BitUtils;->uint8(B)I
 HSPLcom/android/internal/util/BitUtils;->unpackBits(J)[I
-HPLcom/android/internal/util/CollectionUtils;->addIf(Ljava/util/List;Ljava/util/Collection;Ljava/util/function/Predicate;)V
-HSPLcom/android/internal/util/CollectionUtils;->firstOrNull(Ljava/util/Collection;)Ljava/lang/Object;
-HSPLcom/android/internal/util/CollectionUtils;->firstOrNull(Ljava/util/List;)Ljava/lang/Object;
 HSPLcom/android/internal/util/CollectionUtils;->isEmpty(Ljava/util/Collection;)Z
-PLcom/android/internal/util/CollectionUtils;->map(Ljava/util/Set;Ljava/util/function/Function;)Ljava/util/Set;
-PLcom/android/internal/util/CollectionUtils;->singletonOrEmpty(Ljava/lang/Object;)Ljava/util/List;
 HSPLcom/android/internal/util/CollectionUtils;->size(Ljava/util/Collection;)I
-PLcom/android/internal/util/CollectionUtils;->size(Ljava/util/Map;)I
-HSPLcom/android/internal/util/ConcurrentUtils$1$1;-><init>(Lcom/android/internal/util/ConcurrentUtils$1;Ljava/lang/String;Ljava/lang/Runnable;)V
-HSPLcom/android/internal/util/ConcurrentUtils$1$1;->run()V
-HSPLcom/android/internal/util/ConcurrentUtils$1;-><init>(Ljava/lang/String;I)V
-HSPLcom/android/internal/util/ConcurrentUtils$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
-HSPLcom/android/internal/util/ConcurrentUtils;->newFixedThreadPool(ILjava/lang/String;I)Ljava/util/concurrent/ExecutorService;
-HSPLcom/android/internal/util/ConcurrentUtils;->waitForCountDownNoInterrupt(Ljava/util/concurrent/CountDownLatch;JLjava/lang/String;)V
-HSPLcom/android/internal/util/ConcurrentUtils;->waitForFutureNoInterrupt(Ljava/util/concurrent/Future;Ljava/lang/String;)Ljava/lang/Object;
-HSPLcom/android/internal/util/ConcurrentUtils;->wtfIfLockHeld(Ljava/lang/String;Ljava/lang/Object;)V
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->HSLToColor([F)I
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->LABToColor(DDD)I
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->LABToXYZ(DDD[D)V
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->RGBToHSL(III[F)V
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->RGBToLAB(III[D)V
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->RGBToXYZ(III[D)V
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->XYZToColor(DDD)I
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->XYZToLAB(DDD[D)V
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->calculateContrast(II)D
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->calculateLuminance(I)D
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->colorToHSL(I[F)V
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->colorToLAB(I[D)V
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->colorToXYZ(I[D)V
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->compositeAlpha(II)I
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->compositeColors(II)I
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->compositeComponent(IIIII)I
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->constrain(FFF)F
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->constrain(III)I
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->getTempDouble3Array()[D
-HPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->pivotXyzComponent(D)D
-HPLcom/android/internal/util/ContrastColorUtil;->calculateContrast(II)D
-HPLcom/android/internal/util/ContrastColorUtil;->calculateLuminance(I)D
-HPLcom/android/internal/util/ContrastColorUtil;->changeColorLightness(II)I
-HPLcom/android/internal/util/ContrastColorUtil;->clearColorSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HPLcom/android/internal/util/ContrastColorUtil;->ensureContrast(IIZD)I
-HPLcom/android/internal/util/ContrastColorUtil;->ensureTextBackgroundColor(III)I
-HPLcom/android/internal/util/ContrastColorUtil;->ensureTextContrast(IIZ)I
-HPLcom/android/internal/util/ContrastColorUtil;->findContrastColor(IIZD)I
-HPLcom/android/internal/util/ContrastColorUtil;->findContrastColorAgainstDark(IIZD)I
-HPLcom/android/internal/util/ContrastColorUtil;->getShiftedColor(II)I
-HPLcom/android/internal/util/ContrastColorUtil;->isColorLight(I)Z
-HPLcom/android/internal/util/ContrastColorUtil;->resolveColor(Landroid/content/Context;IZ)I
-HPLcom/android/internal/util/ContrastColorUtil;->resolveContrastColor(Landroid/content/Context;II)I
-HPLcom/android/internal/util/ContrastColorUtil;->resolveContrastColor(Landroid/content/Context;IIZ)I
-HPLcom/android/internal/util/ContrastColorUtil;->satisfiesTextContrast(II)Z
-PLcom/android/internal/util/DumpUtils$1;-><init>(Ljava/io/StringWriter;Lcom/android/internal/util/DumpUtils$Dump;Ljava/lang/String;)V
-PLcom/android/internal/util/DumpUtils$1;->run()V
-PLcom/android/internal/util/DumpUtils;->checkDumpAndUsageStatsPermission(Landroid/content/Context;Ljava/lang/String;Ljava/io/PrintWriter;)Z
-PLcom/android/internal/util/DumpUtils;->checkDumpPermission(Landroid/content/Context;Ljava/lang/String;Ljava/io/PrintWriter;)Z
-PLcom/android/internal/util/DumpUtils;->checkUsageStatsPermission(Landroid/content/Context;Ljava/lang/String;Ljava/io/PrintWriter;)Z
-PLcom/android/internal/util/DumpUtils;->dumpAsync(Landroid/os/Handler;Lcom/android/internal/util/DumpUtils$Dump;Ljava/io/PrintWriter;Ljava/lang/String;J)V
-PLcom/android/internal/util/DumpUtils;->filterRecord(Ljava/lang/String;)Ljava/util/function/Predicate;
-PLcom/android/internal/util/DumpUtils;->isCriticalPackage(Landroid/content/ComponentName;)Z
-PLcom/android/internal/util/DumpUtils;->isNonPlatformPackage(Landroid/content/ComponentName$WithComponentName;)Z
-PLcom/android/internal/util/DumpUtils;->isPlatformCriticalPackage(Landroid/content/ComponentName$WithComponentName;)Z
-PLcom/android/internal/util/DumpUtils;->isPlatformNonCriticalPackage(Landroid/content/ComponentName$WithComponentName;)Z
-PLcom/android/internal/util/DumpUtils;->isPlatformPackage(Landroid/content/ComponentName$WithComponentName;)Z
-HPLcom/android/internal/util/DumpUtils;->isPlatformPackage(Landroid/content/ComponentName;)Z
-HPLcom/android/internal/util/DumpUtils;->isPlatformPackage(Ljava/lang/String;)Z
-HPLcom/android/internal/util/DumpUtils;->lambda$filterRecord$1(Landroid/content/ComponentName;Landroid/content/ComponentName$WithComponentName;)Z
-PLcom/android/internal/util/DumpUtils;->lambda$filterRecord$2(ILjava/lang/String;Landroid/content/ComponentName$WithComponentName;)Z
 HSPLcom/android/internal/util/ExponentiallyBucketedHistogram;-><init>(I)V
 HSPLcom/android/internal/util/ExponentiallyBucketedHistogram;->add(I)V
-HPLcom/android/internal/util/ExponentiallyBucketedHistogram;->log(Ljava/lang/String;Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/util/FastMath;->round(F)I
 HSPLcom/android/internal/util/FastPrintWriter$DummyWriter;-><init>()V
 HSPLcom/android/internal/util/FastPrintWriter$DummyWriter;-><init>(Lcom/android/internal/util/FastPrintWriter$1;)V
 HSPLcom/android/internal/util/FastPrintWriter;-><init>(Ljava/io/OutputStream;)V
 HSPLcom/android/internal/util/FastPrintWriter;-><init>(Ljava/io/OutputStream;ZI)V
-PLcom/android/internal/util/FastPrintWriter;-><init>(Ljava/io/Writer;)V
 HSPLcom/android/internal/util/FastPrintWriter;-><init>(Ljava/io/Writer;ZI)V
 HSPLcom/android/internal/util/FastPrintWriter;->appendLocked(C)V
 HSPLcom/android/internal/util/FastPrintWriter;->appendLocked(Ljava/lang/String;II)V
-HPLcom/android/internal/util/FastPrintWriter;->appendLocked([CII)V
-PLcom/android/internal/util/FastPrintWriter;->checkError()Z
 HSPLcom/android/internal/util/FastPrintWriter;->close()V
 HSPLcom/android/internal/util/FastPrintWriter;->flush()V
 HSPLcom/android/internal/util/FastPrintWriter;->flushBytesLocked()V
@@ -32443,21 +15009,15 @@
 HSPLcom/android/internal/util/FastPrintWriter;->print(I)V
 HSPLcom/android/internal/util/FastPrintWriter;->print(J)V
 HSPLcom/android/internal/util/FastPrintWriter;->print(Ljava/lang/String;)V
-PLcom/android/internal/util/FastPrintWriter;->print([C)V
 HSPLcom/android/internal/util/FastPrintWriter;->println()V
-HSPLcom/android/internal/util/FastPrintWriter;->println(C)V
-HSPLcom/android/internal/util/FastPrintWriter;->println(I)V
-PLcom/android/internal/util/FastPrintWriter;->println(J)V
-PLcom/android/internal/util/FastPrintWriter;->println([C)V
-PLcom/android/internal/util/FastPrintWriter;->setError()V
 HSPLcom/android/internal/util/FastPrintWriter;->write(I)V
 HSPLcom/android/internal/util/FastPrintWriter;->write(Ljava/lang/String;)V
-HPLcom/android/internal/util/FastPrintWriter;->write(Ljava/lang/String;II)V
-HPLcom/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
 HSPLcom/android/internal/util/FastXmlSerializer;->append(Ljava/lang/String;)V
 HSPLcom/android/internal/util/FastXmlSerializer;->append(Ljava/lang/String;II)V
+HSPLcom/android/internal/util/FastXmlSerializer;->appendIndent(I)V
 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;
@@ -32466,29 +15026,9 @@
 HSPLcom/android/internal/util/FastXmlSerializer;->flushBytes()V
 HSPLcom/android/internal/util/FastXmlSerializer;->setFeature(Ljava/lang/String;Z)V
 HSPLcom/android/internal/util/FastXmlSerializer;->setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V
-PLcom/android/internal/util/FastXmlSerializer;->setOutput(Ljava/io/Writer;)V
 HSPLcom/android/internal/util/FastXmlSerializer;->startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V
 HSPLcom/android/internal/util/FastXmlSerializer;->startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/internal/util/FastXmlSerializer;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
-HSPLcom/android/internal/util/FileRotator$FileInfo;-><init>(Ljava/lang/String;)V
-PLcom/android/internal/util/FileRotator$FileInfo;->build()Ljava/lang/String;
-PLcom/android/internal/util/FileRotator$FileInfo;->isActive()Z
-HSPLcom/android/internal/util/FileRotator$FileInfo;->parse(Ljava/lang/String;)Z
-HSPLcom/android/internal/util/FileRotator;-><init>(Ljava/io/File;Ljava/lang/String;JJ)V
-HPLcom/android/internal/util/FileRotator;->getActiveName(J)Ljava/lang/String;
-HPLcom/android/internal/util/FileRotator;->maybeRotate(J)V
-HSPLcom/android/internal/util/FileRotator;->readFile(Ljava/io/File;Lcom/android/internal/util/FileRotator$Reader;)V
-HSPLcom/android/internal/util/FileRotator;->readMatching(Lcom/android/internal/util/FileRotator$Reader;JJ)V
-PLcom/android/internal/util/FileRotator;->rewriteActive(Lcom/android/internal/util/FileRotator$Rewriter;J)V
-PLcom/android/internal/util/FileRotator;->rewriteSingle(Lcom/android/internal/util/FileRotator$Rewriter;Ljava/lang/String;)V
-PLcom/android/internal/util/FileRotator;->writeFile(Ljava/io/File;Lcom/android/internal/util/FileRotator$Writer;)V
-PLcom/android/internal/util/FunctionalUtils$RemoteExceptionIgnoringConsumer;->accept(Ljava/lang/Object;)V
-PLcom/android/internal/util/FunctionalUtils$ThrowingConsumer;->accept(Ljava/lang/Object;)V
-PLcom/android/internal/util/FunctionalUtils$ThrowingRunnable;->run()V
-PLcom/android/internal/util/FunctionalUtils;->handleExceptions(Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;Ljava/util/function/Consumer;)Ljava/lang/Runnable;
-PLcom/android/internal/util/FunctionalUtils;->ignoreRemoteException(Lcom/android/internal/util/FunctionalUtils$RemoteExceptionIgnoringConsumer;)Ljava/util/function/Consumer;
-PLcom/android/internal/util/FunctionalUtils;->lambda$handleExceptions$0(Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;Ljava/util/function/Consumer;)V
-PLcom/android/internal/util/FunctionalUtils;->uncheckExceptions(Lcom/android/internal/util/FunctionalUtils$ThrowingConsumer;)Ljava/util/function/Consumer;
 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;
@@ -32498,89 +15038,24 @@
 HSPLcom/android/internal/util/GrowingArrayUtils;->insert([JIIJ)[J
 HSPLcom/android/internal/util/GrowingArrayUtils;->insert([Ljava/lang/Object;IILjava/lang/Object;)[Ljava/lang/Object;
 HSPLcom/android/internal/util/GrowingArrayUtils;->insert([ZIIZ)[Z
-HSPLcom/android/internal/util/HexDump;->hexStringToByteArray(Ljava/lang/String;)[B
-HSPLcom/android/internal/util/HexDump;->toByte(C)I
-HSPLcom/android/internal/util/HexDump;->toHexString([B)Ljava/lang/String;
-HSPLcom/android/internal/util/HexDump;->toHexString([BIIZ)Ljava/lang/String;
-PLcom/android/internal/util/IndentingPrintWriter;-><init>(Ljava/io/Writer;Ljava/lang/String;)V
-PLcom/android/internal/util/IndentingPrintWriter;-><init>(Ljava/io/Writer;Ljava/lang/String;I)V
-PLcom/android/internal/util/IndentingPrintWriter;->decreaseIndent()Lcom/android/internal/util/IndentingPrintWriter;
-PLcom/android/internal/util/IndentingPrintWriter;->increaseIndent()Lcom/android/internal/util/IndentingPrintWriter;
-HPLcom/android/internal/util/IndentingPrintWriter;->maybeWriteIndent()V
-HPLcom/android/internal/util/IndentingPrintWriter;->printHexPair(Ljava/lang/String;I)Lcom/android/internal/util/IndentingPrintWriter;
-HPLcom/android/internal/util/IndentingPrintWriter;->printPair(Ljava/lang/String;Ljava/lang/Object;)Lcom/android/internal/util/IndentingPrintWriter;
-PLcom/android/internal/util/IndentingPrintWriter;->printPair(Ljava/lang/String;[Ljava/lang/Object;)Lcom/android/internal/util/IndentingPrintWriter;
-HPLcom/android/internal/util/IndentingPrintWriter;->println()V
-PLcom/android/internal/util/IndentingPrintWriter;->setIndent(Ljava/lang/String;)Lcom/android/internal/util/IndentingPrintWriter;
-HPLcom/android/internal/util/IndentingPrintWriter;->write(I)V
-HPLcom/android/internal/util/IndentingPrintWriter;->write(Ljava/lang/String;II)V
-HPLcom/android/internal/util/IndentingPrintWriter;->write([CII)V
 HSPLcom/android/internal/util/IntPair;->first(J)I
-HSPLcom/android/internal/util/IntPair;->of(II)J
 HSPLcom/android/internal/util/IntPair;->second(J)I
-HSPLcom/android/internal/util/JournaledFile;-><init>(Ljava/io/File;Ljava/io/File;)V
-HSPLcom/android/internal/util/JournaledFile;->chooseForRead()Ljava/io/File;
-HSPLcom/android/internal/util/JournaledFile;->chooseForWrite()Ljava/io/File;
-HSPLcom/android/internal/util/JournaledFile;->commit()V
-HSPLcom/android/internal/util/LatencyTracker$1;-><init>(Lcom/android/internal/util/LatencyTracker;)V
-HSPLcom/android/internal/util/LatencyTracker;-><init>(Landroid/content/Context;)V
-HSPLcom/android/internal/util/LatencyTracker;->getInstance(Landroid/content/Context;)Lcom/android/internal/util/LatencyTracker;
-HPLcom/android/internal/util/LatencyTracker;->isEnabled(Landroid/content/Context;)Z
-PLcom/android/internal/util/LatencyTracker;->onActionEnd(I)V
-PLcom/android/internal/util/LatencyTracker;->onActionStart(I)V
-HSPLcom/android/internal/util/LatencyTracker;->reloadProperty()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;->appendToBuffer(Ljava/lang/String;II)V
+HSPLcom/android/internal/util/LineBreakBufferedWriter;->ensureCapacity(I)V
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->flush()V
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->println()V
-HPLcom/android/internal/util/LineBreakBufferedWriter;->write(I)V
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->write(Ljava/lang/String;II)V
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->writeBuffer(I)V
-HSPLcom/android/internal/util/LocalLog;-><init>(Ljava/lang/String;)V
-PLcom/android/internal/util/LocalLog;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/internal/util/LocalLog;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLcom/android/internal/util/LocalLog;->w(Ljava/lang/String;)V
 HSPLcom/android/internal/util/MemInfoReader;-><init>()V
-HSPLcom/android/internal/util/MemInfoReader;->getCachedSizeKb()J
-HSPLcom/android/internal/util/MemInfoReader;->getFreeSizeKb()J
-HSPLcom/android/internal/util/MemInfoReader;->getKernelUsedSizeKb()J
-HSPLcom/android/internal/util/MemInfoReader;->getRawInfo()[J
-PLcom/android/internal/util/MemInfoReader;->getSwapFreeSizeKb()J
-PLcom/android/internal/util/MemInfoReader;->getSwapTotalSizeKb()J
 HSPLcom/android/internal/util/MemInfoReader;->getTotalSize()J
-HSPLcom/android/internal/util/MemInfoReader;->getTotalSizeKb()J
-HSPLcom/android/internal/util/MemInfoReader;->getZramTotalSizeKb()J
 HSPLcom/android/internal/util/MemInfoReader;->readMemInfo()V
-HSPLcom/android/internal/util/MessageUtils;->findMessageNames([Ljava/lang/Class;)Landroid/util/SparseArray;
-HSPLcom/android/internal/util/MessageUtils;->findMessageNames([Ljava/lang/Class;[Ljava/lang/String;)Landroid/util/SparseArray;
-HSPLcom/android/internal/util/NotificationMessagingUtil$1;-><init>(Lcom/android/internal/util/NotificationMessagingUtil;Landroid/os/Handler;)V
-HSPLcom/android/internal/util/NotificationMessagingUtil;-><init>(Landroid/content/Context;)V
-PLcom/android/internal/util/NotificationMessagingUtil;->cacheDefaultSmsApp(I)V
-PLcom/android/internal/util/NotificationMessagingUtil;->hasMessagingStyle(Landroid/service/notification/StatusBarNotification;)Z
-PLcom/android/internal/util/NotificationMessagingUtil;->isCategoryMessage(Landroid/service/notification/StatusBarNotification;)Z
-HPLcom/android/internal/util/NotificationMessagingUtil;->isDefaultMessagingApp(Landroid/service/notification/StatusBarNotification;)Z
-HPLcom/android/internal/util/NotificationMessagingUtil;->isImportantMessaging(Landroid/service/notification/StatusBarNotification;I)Z
-HPLcom/android/internal/util/NotificationMessagingUtil;->isMessaging(Landroid/service/notification/StatusBarNotification;)Z
-PLcom/android/internal/util/ObjectUtils;->compare(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
-HSPLcom/android/internal/util/Parcelling$Cache;-><clinit>()V
-HSPLcom/android/internal/util/Parcelling$Cache;->get(Ljava/lang/Class;)Lcom/android/internal/util/Parcelling;
-HSPLcom/android/internal/util/Parcelling$Cache;->getOrCreate(Ljava/lang/Class;)Lcom/android/internal/util/Parcelling;
-HSPLcom/android/internal/util/Parcelling$Cache;->put(Lcom/android/internal/util/Parcelling;)Lcom/android/internal/util/Parcelling;
-HSPLcom/android/internal/util/ParseUtils;->parseInt(Ljava/lang/String;I)I
-HSPLcom/android/internal/util/ParseUtils;->parseIntWithBase(Ljava/lang/String;II)I
 HSPLcom/android/internal/util/Preconditions;->checkArgument(Z)V
 HSPLcom/android/internal/util/Preconditions;->checkArgument(ZLjava/lang/Object;)V
-PLcom/android/internal/util/Preconditions;->checkArgument(ZLjava/lang/String;[Ljava/lang/Object;)V
 HSPLcom/android/internal/util/Preconditions;->checkArgumentInRange(IIILjava/lang/String;)I
-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
-HSLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(J)J
-PLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(JLjava/lang/String;)J
-HSPLcom/android/internal/util/Preconditions;->checkArgumentPositive(ILjava/lang/String;)I
-HSPLcom/android/internal/util/Preconditions;->checkArrayElementsInRange([FFFLjava/lang/String;)[F
-HSPLcom/android/internal/util/Preconditions;->checkArrayElementsInRange([IIILjava/lang/String;)[I
-PLcom/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;->checkFlagsArgument(II)I
 HSPLcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
@@ -32589,243 +15064,40 @@
 HSPLcom/android/internal/util/Preconditions;->checkState(ZLjava/lang/String;)V
 HSPLcom/android/internal/util/Preconditions;->checkStringNotEmpty(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLcom/android/internal/util/Preconditions;->checkStringNotEmpty(Ljava/lang/CharSequence;Ljava/lang/Object;)Ljava/lang/CharSequence;
-HSPLcom/android/internal/util/ProgressReporter;-><init>(I)V
-HSPLcom/android/internal/util/ProgressReporter;->addListener(Landroid/os/IProgressListener;)V
-PLcom/android/internal/util/ProgressReporter;->finish()V
-PLcom/android/internal/util/ProgressReporter;->notifyFinished(ILandroid/os/Bundle;)V
-PLcom/android/internal/util/ProgressReporter;->notifyProgress(IILandroid/os/Bundle;)V
-PLcom/android/internal/util/ProgressReporter;->notifyStarted(ILandroid/os/Bundle;)V
-PLcom/android/internal/util/ProgressReporter;->setProgress(I)V
-PLcom/android/internal/util/ProgressReporter;->setProgress(IILjava/lang/CharSequence;)V
-PLcom/android/internal/util/ProgressReporter;->setProgress(ILjava/lang/CharSequence;)V
-PLcom/android/internal/util/ProgressReporter;->start()V
-HSPLcom/android/internal/util/ProviderAccessStats$PerThreadData;-><init>()V
-HSPLcom/android/internal/util/ProviderAccessStats$PerThreadData;-><init>(Lcom/android/internal/util/ProviderAccessStats$1;)V
-HSPLcom/android/internal/util/ProviderAccessStats;-><init>()V
-HSPLcom/android/internal/util/ProviderAccessStats;->finishOperation(I)V
-HSPLcom/android/internal/util/ProviderAccessStats;->incrementBatchStats(I)V
-HSPLcom/android/internal/util/ProviderAccessStats;->incrementDeleteStats(IZ)V
-HSPLcom/android/internal/util/ProviderAccessStats;->incrementInsertStats(IZ)V
-HSPLcom/android/internal/util/ProviderAccessStats;->incrementQueryStats(I)V
-HSPLcom/android/internal/util/ProviderAccessStats;->incrementStats(ILandroid/util/SparseLongArray;)V
-HSPLcom/android/internal/util/ProviderAccessStats;->incrementStats(IZLandroid/util/SparseLongArray;Landroid/util/SparseLongArray;)V
-HSPLcom/android/internal/util/ProviderAccessStats;->incrementUpdateStats(IZ)V
-HSPLcom/android/internal/util/ProviderAccessStats;->lambda$new$0()Lcom/android/internal/util/ProviderAccessStats$PerThreadData;
-HSPLcom/android/internal/util/RingBuffer;-><init>(Ljava/lang/Class;I)V
-HSPLcom/android/internal/util/RingBuffer;->append(Ljava/lang/Object;)V
-HSPLcom/android/internal/util/RingBuffer;->clear()V
-HSPLcom/android/internal/util/RingBuffer;->createNewItem()Ljava/lang/Object;
-HSPLcom/android/internal/util/RingBuffer;->getNextSlot()Ljava/lang/Object;
-HSPLcom/android/internal/util/RingBuffer;->indexOf(J)I
-PLcom/android/internal/util/RingBuffer;->isEmpty()Z
-HSPLcom/android/internal/util/RingBuffer;->size()I
-PLcom/android/internal/util/RingBuffer;->toArray()[Ljava/lang/Object;
-HSPLcom/android/internal/util/RingBufferIndices;-><init>(I)V
-PLcom/android/internal/util/RingBufferIndices;->add()I
-PLcom/android/internal/util/RingBufferIndices;->indexOf(I)I
-PLcom/android/internal/util/RingBufferIndices;->size()I
-PLcom/android/internal/util/ScreenshotHelper$1;-><init>(Lcom/android/internal/util/ScreenshotHelper;Ljava/util/function/Consumer;)V
-PLcom/android/internal/util/ScreenshotHelper$2$1;-><init>(Lcom/android/internal/util/ScreenshotHelper$2;Landroid/os/Looper;Landroid/content/ServiceConnection;)V
-PLcom/android/internal/util/ScreenshotHelper$2$1;->handleMessage(Landroid/os/Message;)V
-PLcom/android/internal/util/ScreenshotHelper$2;-><init>(Lcom/android/internal/util/ScreenshotHelper;ILandroid/os/Handler;Ljava/lang/Runnable;Ljava/util/function/Consumer;ZZ)V
-PLcom/android/internal/util/ScreenshotHelper$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-HSPLcom/android/internal/util/ScreenshotHelper;-><init>(Landroid/content/Context;)V
-PLcom/android/internal/util/ScreenshotHelper;->access$000(Lcom/android/internal/util/ScreenshotHelper;)Ljava/lang/Object;
-PLcom/android/internal/util/ScreenshotHelper;->access$100(Lcom/android/internal/util/ScreenshotHelper;)Landroid/content/ServiceConnection;
-PLcom/android/internal/util/ScreenshotHelper;->access$102(Lcom/android/internal/util/ScreenshotHelper;Landroid/content/ServiceConnection;)Landroid/content/ServiceConnection;
-PLcom/android/internal/util/ScreenshotHelper;->access$200(Lcom/android/internal/util/ScreenshotHelper;)Landroid/content/Context;
-PLcom/android/internal/util/ScreenshotHelper;->takeScreenshot(IZZJLandroid/os/Handler;Ljava/util/function/Consumer;)V
-PLcom/android/internal/util/ScreenshotHelper;->takeScreenshot(IZZLandroid/os/Handler;Ljava/util/function/Consumer;)V
-HSPLcom/android/internal/util/StatLogger;-><init>([Ljava/lang/String;)V
-PLcom/android/internal/util/StatLogger;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/internal/util/StatLogger;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/internal/util/StatLogger;->dumpProto(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/internal/util/StatLogger;->getTime()J
 HSPLcom/android/internal/util/StatLogger;->logDurationStat(IJ)J
-HSPLcom/android/internal/util/State;-><init>()V
-HSPLcom/android/internal/util/State;->enter()V
-PLcom/android/internal/util/State;->exit()V
-PLcom/android/internal/util/State;->getName()Ljava/lang/String;
-PLcom/android/internal/util/StateMachine$LogRec;-><init>(Lcom/android/internal/util/StateMachine;Landroid/os/Message;Ljava/lang/String;Lcom/android/internal/util/IState;Lcom/android/internal/util/IState;Lcom/android/internal/util/IState;)V
-PLcom/android/internal/util/StateMachine$LogRec;->update(Lcom/android/internal/util/StateMachine;Landroid/os/Message;Ljava/lang/String;Lcom/android/internal/util/IState;Lcom/android/internal/util/IState;Lcom/android/internal/util/IState;)V
-HSPLcom/android/internal/util/StateMachine$LogRecords;-><init>()V
-HSPLcom/android/internal/util/StateMachine$LogRecords;-><init>(Lcom/android/internal/util/StateMachine$1;)V
-PLcom/android/internal/util/StateMachine$LogRecords;->add(Lcom/android/internal/util/StateMachine;Landroid/os/Message;Ljava/lang/String;Lcom/android/internal/util/IState;Lcom/android/internal/util/IState;Lcom/android/internal/util/IState;)V
-PLcom/android/internal/util/StateMachine$LogRecords;->count()I
-HSPLcom/android/internal/util/StateMachine$LogRecords;->logOnlyTransitions()Z
-HSPLcom/android/internal/util/StateMachine$LogRecords;->setSize(I)V
-PLcom/android/internal/util/StateMachine$LogRecords;->size()I
-HSPLcom/android/internal/util/StateMachine$SmHandler$HaltingState;-><init>(Lcom/android/internal/util/StateMachine$SmHandler;)V
-HSPLcom/android/internal/util/StateMachine$SmHandler$HaltingState;-><init>(Lcom/android/internal/util/StateMachine$SmHandler;Lcom/android/internal/util/StateMachine$1;)V
-HSPLcom/android/internal/util/StateMachine$SmHandler$QuittingState;-><init>(Lcom/android/internal/util/StateMachine$SmHandler;)V
-HSPLcom/android/internal/util/StateMachine$SmHandler$QuittingState;-><init>(Lcom/android/internal/util/StateMachine$SmHandler;Lcom/android/internal/util/StateMachine$1;)V
-HSPLcom/android/internal/util/StateMachine$SmHandler$StateInfo;-><init>(Lcom/android/internal/util/StateMachine$SmHandler;)V
-HSPLcom/android/internal/util/StateMachine$SmHandler$StateInfo;-><init>(Lcom/android/internal/util/StateMachine$SmHandler;Lcom/android/internal/util/StateMachine$1;)V
-HSPLcom/android/internal/util/StateMachine$SmHandler;-><init>(Landroid/os/Looper;Lcom/android/internal/util/StateMachine;)V
-HSPLcom/android/internal/util/StateMachine$SmHandler;-><init>(Landroid/os/Looper;Lcom/android/internal/util/StateMachine;Lcom/android/internal/util/StateMachine$1;)V
-HSPLcom/android/internal/util/StateMachine$SmHandler;->access$1100(Lcom/android/internal/util/StateMachine$SmHandler;Lcom/android/internal/util/State;)V
-PLcom/android/internal/util/StateMachine$SmHandler;->access$1300(Lcom/android/internal/util/StateMachine$SmHandler;)Lcom/android/internal/util/IState;
-PLcom/android/internal/util/StateMachine$SmHandler;->access$1400(Lcom/android/internal/util/StateMachine$SmHandler;Lcom/android/internal/util/IState;)V
-PLcom/android/internal/util/StateMachine$SmHandler;->access$1700(Lcom/android/internal/util/StateMachine$SmHandler;)Z
-HSPLcom/android/internal/util/StateMachine$SmHandler;->access$1800(Lcom/android/internal/util/StateMachine$SmHandler;)Lcom/android/internal/util/StateMachine$LogRecords;
-HSPLcom/android/internal/util/StateMachine$SmHandler;->access$3000(Lcom/android/internal/util/StateMachine$SmHandler;)V
-HSPLcom/android/internal/util/StateMachine$SmHandler;->access$900(Lcom/android/internal/util/StateMachine$SmHandler;Lcom/android/internal/util/State;Lcom/android/internal/util/State;)Lcom/android/internal/util/StateMachine$SmHandler$StateInfo;
-HSPLcom/android/internal/util/StateMachine$SmHandler;->addState(Lcom/android/internal/util/State;Lcom/android/internal/util/State;)Lcom/android/internal/util/StateMachine$SmHandler$StateInfo;
-HSPLcom/android/internal/util/StateMachine$SmHandler;->completeConstruction()V
-PLcom/android/internal/util/StateMachine$SmHandler;->getCurrentState()Lcom/android/internal/util/IState;
-HSPLcom/android/internal/util/StateMachine$SmHandler;->handleMessage(Landroid/os/Message;)V
-HSPLcom/android/internal/util/StateMachine$SmHandler;->invokeEnterMethods(I)V
-PLcom/android/internal/util/StateMachine$SmHandler;->invokeExitMethods(Lcom/android/internal/util/StateMachine$SmHandler$StateInfo;)V
-PLcom/android/internal/util/StateMachine$SmHandler;->isQuit(Landroid/os/Message;)Z
-PLcom/android/internal/util/StateMachine$SmHandler;->moveDeferredMessageAtFrontOfQueue()V
-HSPLcom/android/internal/util/StateMachine$SmHandler;->moveTempStateStackToStateStack()I
-HSPLcom/android/internal/util/StateMachine$SmHandler;->performTransitions(Lcom/android/internal/util/State;Landroid/os/Message;)V
-PLcom/android/internal/util/StateMachine$SmHandler;->processMsg(Landroid/os/Message;)Lcom/android/internal/util/State;
-HSPLcom/android/internal/util/StateMachine$SmHandler;->setInitialState(Lcom/android/internal/util/State;)V
-HSPLcom/android/internal/util/StateMachine$SmHandler;->setupInitialStateStack()V
-PLcom/android/internal/util/StateMachine$SmHandler;->setupTempStateStackWithStatesToEnter(Lcom/android/internal/util/State;)Lcom/android/internal/util/StateMachine$SmHandler$StateInfo;
-PLcom/android/internal/util/StateMachine$SmHandler;->transitionTo(Lcom/android/internal/util/IState;)V
-HSPLcom/android/internal/util/StateMachine;-><init>(Ljava/lang/String;)V
-HSPLcom/android/internal/util/StateMachine;-><init>(Ljava/lang/String;Landroid/os/Handler;)V
-PLcom/android/internal/util/StateMachine;-><init>(Ljava/lang/String;Landroid/os/Looper;)V
-HSPLcom/android/internal/util/StateMachine;->addState(Lcom/android/internal/util/State;)V
-HSPLcom/android/internal/util/StateMachine;->addState(Lcom/android/internal/util/State;Lcom/android/internal/util/State;)V
-PLcom/android/internal/util/StateMachine;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/internal/util/StateMachine;->getCurrentState()Lcom/android/internal/util/IState;
-HSPLcom/android/internal/util/StateMachine;->getHandler()Landroid/os/Handler;
-PLcom/android/internal/util/StateMachine;->getLogRecCount()I
-PLcom/android/internal/util/StateMachine;->getLogRecSize()I
-PLcom/android/internal/util/StateMachine;->getLogRecString(Landroid/os/Message;)Ljava/lang/String;
-PLcom/android/internal/util/StateMachine;->getName()Ljava/lang/String;
-HSPLcom/android/internal/util/StateMachine;->initStateMachine(Ljava/lang/String;Landroid/os/Looper;)V
-PLcom/android/internal/util/StateMachine;->obtainMessage(I)Landroid/os/Message;
-PLcom/android/internal/util/StateMachine;->obtainMessage(IIILjava/lang/Object;)Landroid/os/Message;
-PLcom/android/internal/util/StateMachine;->obtainMessage(ILjava/lang/Object;)Landroid/os/Message;
-PLcom/android/internal/util/StateMachine;->onPostHandleMessage(Landroid/os/Message;)V
-PLcom/android/internal/util/StateMachine;->onPreHandleMessage(Landroid/os/Message;)V
-HSPLcom/android/internal/util/StateMachine;->recordLogRec(Landroid/os/Message;)Z
-PLcom/android/internal/util/StateMachine;->sendMessage(I)V
-PLcom/android/internal/util/StateMachine;->sendMessage(IIILjava/lang/Object;)V
-PLcom/android/internal/util/StateMachine;->sendMessage(ILjava/lang/Object;)V
-PLcom/android/internal/util/StateMachine;->sendMessageAtFrontOfQueue(IIILjava/lang/Object;)V
-HSPLcom/android/internal/util/StateMachine;->setInitialState(Lcom/android/internal/util/State;)V
-HSPLcom/android/internal/util/StateMachine;->setLogRecSize(I)V
-HSPLcom/android/internal/util/StateMachine;->start()V
-PLcom/android/internal/util/StateMachine;->transitionTo(Lcom/android/internal/util/IState;)V
-PLcom/android/internal/util/StateMachine;->unhandledMessage(Landroid/os/Message;)V
 HSPLcom/android/internal/util/SyncResultReceiver;-><init>(I)V
-PLcom/android/internal/util/SyncResultReceiver;->bundleFor(Landroid/os/Parcelable;)Landroid/os/Bundle;
-PLcom/android/internal/util/SyncResultReceiver;->bundleFor(Ljava/util/ArrayList;)Landroid/os/Bundle;
 HSPLcom/android/internal/util/SyncResultReceiver;->getIntResult()I
-HPLcom/android/internal/util/SyncResultReceiver;->getOptionalExtraIntResult(I)I
-HSPLcom/android/internal/util/SyncResultReceiver;->getParcelableResult()Landroid/os/Parcelable;
 HSPLcom/android/internal/util/SyncResultReceiver;->send(ILandroid/os/Bundle;)V
 HSPLcom/android/internal/util/SyncResultReceiver;->waitResult()V
-HSPLcom/android/internal/util/TokenBucket;-><init>(II)V
-HSPLcom/android/internal/util/TokenBucket;-><init>(III)V
-PLcom/android/internal/util/TokenBucket;->fill()V
-PLcom/android/internal/util/TokenBucket;->get()Z
-PLcom/android/internal/util/TokenBucket;->get(I)I
-HSPLcom/android/internal/util/TokenBucket;->scaledTime()J
 HSPLcom/android/internal/util/VirtualRefBasePtr;-><init>(J)V
 HSPLcom/android/internal/util/VirtualRefBasePtr;->finalize()V
 HSPLcom/android/internal/util/VirtualRefBasePtr;->get()J
 HSPLcom/android/internal/util/VirtualRefBasePtr;->release()V
 HSPLcom/android/internal/util/XmlUtils;->beginDocument(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)V
-HSPLcom/android/internal/util/XmlUtils;->convertValueToBoolean(Ljava/lang/CharSequence;Z)Z
-HSPLcom/android/internal/util/XmlUtils;->convertValueToInt(Ljava/lang/CharSequence;I)I
-HSPLcom/android/internal/util/XmlUtils;->nextElement(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/internal/util/XmlUtils;->nextElementWithin(Lorg/xmlpull/v1/XmlPullParser;I)Z
-PLcom/android/internal/util/XmlUtils;->readBitmapAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/graphics/Bitmap;
-HSPLcom/android/internal/util/XmlUtils;->readBooleanAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Z
-HSPLcom/android/internal/util/XmlUtils;->readBooleanAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Z)Z
-PLcom/android/internal/util/XmlUtils;->readByteArrayAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)[B
-HSPLcom/android/internal/util/XmlUtils;->readIntAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)I
-HSPLcom/android/internal/util/XmlUtils;->readIntAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
-HSPLcom/android/internal/util/XmlUtils;->readLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)J
-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;->readThisArrayMapXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;)Landroid/util/ArrayMap;
 HSPLcom/android/internal/util/XmlUtils;->readThisMapXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;)Ljava/util/HashMap;
 HSPLcom/android/internal/util/XmlUtils;->readThisPrimitiveValueXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/Object;
 HSPLcom/android/internal/util/XmlUtils;->readThisSetXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;Z)Ljava/util/HashSet;
-PLcom/android/internal/util/XmlUtils;->readThisStringArrayXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
 HSPLcom/android/internal/util/XmlUtils;->readThisValueXml(Lorg/xmlpull/v1/XmlPullParser;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;Z)Ljava/lang/Object;
-PLcom/android/internal/util/XmlUtils;->readUriAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/net/Uri;
 HSPLcom/android/internal/util/XmlUtils;->readValueXml(Lorg/xmlpull/v1/XmlPullParser;[Ljava/lang/String;)Ljava/lang/Object;
 HSPLcom/android/internal/util/XmlUtils;->skipCurrentTag(Lorg/xmlpull/v1/XmlPullParser;)V
-HSPLcom/android/internal/util/XmlUtils;->writeBooleanAttribute(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Z)V
-HPLcom/android/internal/util/XmlUtils;->writeIntArrayXml([ILjava/lang/String;Lorg/xmlpull/v1/XmlSerializer;)V
-HSPLcom/android/internal/util/XmlUtils;->writeIntAttribute(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;I)V
-HPLcom/android/internal/util/XmlUtils;->writeLongAttribute(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;J)V
 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;Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/lang/String;Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V
 HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V
 HSPLcom/android/internal/util/XmlUtils;->writeSetXml(Ljava/util/Set;Ljava/lang/String;Lorg/xmlpull/v1/XmlSerializer;)V
-HPLcom/android/internal/util/XmlUtils;->writeStringArrayXml([Ljava/lang/String;Ljava/lang/String;Lorg/xmlpull/v1/XmlSerializer;)V
-HSPLcom/android/internal/util/XmlUtils;->writeStringAttribute(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/lang/CharSequence;)V
-HPLcom/android/internal/util/XmlUtils;->writeUriAttribute(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Landroid/net/Uri;)V
+HSPLcom/android/internal/util/XmlUtils;->writeValueXml(Ljava/lang/Object;Ljava/lang/String;Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/internal/util/XmlUtils;->writeValueXml(Ljava/lang/Object;Ljava/lang/String;Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V
-PLcom/android/internal/util/dump/DualDumpOutputStream$DumpField;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/internal/util/dump/DualDumpOutputStream$DumpField;-><init>(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/util/dump/DualDumpOutputStream$1;)V
-HPLcom/android/internal/util/dump/DualDumpOutputStream$DumpField;->print(Lcom/android/internal/util/IndentingPrintWriter;Z)V
-PLcom/android/internal/util/dump/DualDumpOutputStream$DumpObject;-><init>(Ljava/lang/String;)V
-PLcom/android/internal/util/dump/DualDumpOutputStream$DumpObject;-><init>(Ljava/lang/String;Lcom/android/internal/util/dump/DualDumpOutputStream$1;)V
-HPLcom/android/internal/util/dump/DualDumpOutputStream$DumpObject;->add(Ljava/lang/String;Lcom/android/internal/util/dump/DualDumpOutputStream$Dumpable;)V
-HPLcom/android/internal/util/dump/DualDumpOutputStream$DumpObject;->print(Lcom/android/internal/util/IndentingPrintWriter;Z)V
-PLcom/android/internal/util/dump/DualDumpOutputStream$Dumpable;-><init>(Ljava/lang/String;)V
-PLcom/android/internal/util/dump/DualDumpOutputStream$Dumpable;-><init>(Ljava/lang/String;Lcom/android/internal/util/dump/DualDumpOutputStream$1;)V
-PLcom/android/internal/util/dump/DualDumpOutputStream;-><clinit>()V
-PLcom/android/internal/util/dump/DualDumpOutputStream;-><init>(Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/internal/util/dump/DualDumpOutputStream;-><init>(Lcom/android/internal/util/IndentingPrintWriter;)V
-HPLcom/android/internal/util/dump/DualDumpOutputStream;->end(J)V
-PLcom/android/internal/util/dump/DualDumpOutputStream;->flush()V
-PLcom/android/internal/util/dump/DualDumpOutputStream;->isProto()Z
-HPLcom/android/internal/util/dump/DualDumpOutputStream;->start(Ljava/lang/String;J)J
-PLcom/android/internal/util/dump/DualDumpOutputStream;->write(Ljava/lang/String;JI)V
-PLcom/android/internal/util/dump/DualDumpOutputStream;->write(Ljava/lang/String;JJ)V
-HPLcom/android/internal/util/dump/DualDumpOutputStream;->write(Ljava/lang/String;JLjava/lang/String;)V
-PLcom/android/internal/util/dump/DualDumpOutputStream;->write(Ljava/lang/String;JZ)V
-PLcom/android/internal/util/dump/DualDumpOutputStream;->write(Ljava/lang/String;J[B)V
-PLcom/android/internal/util/dump/DualDumpOutputStream;->writeNested(Ljava/lang/String;[B)V
-PLcom/android/internal/util/dump/DumpUtils;->writeComponentName(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;JLandroid/content/ComponentName;)V
-PLcom/android/internal/util/dump/DumpUtils;->writeStringIfNotNull(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;JLjava/lang/String;)V
 HSPLcom/android/internal/util/function/pooled/OmniFunction;-><init>()V
-HPLcom/android/internal/util/function/pooled/OmniFunction;->accept(Ljava/lang/Object;)V
-HPLcom/android/internal/util/function/pooled/OmniFunction;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/internal/util/function/pooled/OmniFunction;->run()V
-HPLcom/android/internal/util/function/pooled/OmniFunction;->test(Ljava/lang/Object;)Z
-HSPLcom/android/internal/util/function/pooled/PooledLambda;->__()Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;
-HSPLcom/android/internal/util/function/pooled/PooledLambda;->__(Ljava/lang/Class;)Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;
-PLcom/android/internal/util/function/pooled/PooledLambda;->obtainConsumer(Lcom/android/internal/util/function/QuadConsumer;Ljava/lang/Object;Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;Ljava/lang/Object;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledConsumer;
-PLcom/android/internal/util/function/pooled/PooledLambda;->obtainConsumer(Lcom/android/internal/util/function/TriConsumer;Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;Ljava/lang/Object;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledConsumer;
-HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainConsumer(Lcom/android/internal/util/function/TriConsumer;Ljava/lang/Object;Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledConsumer;
-PLcom/android/internal/util/function/pooled/PooledLambda;->obtainConsumer(Ljava/util/function/BiConsumer;Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledConsumer;
-HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainConsumer(Ljava/util/function/BiConsumer;Ljava/lang/Object;Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;)Lcom/android/internal/util/function/pooled/PooledConsumer;
-HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainFunction(Lcom/android/internal/util/function/QuadFunction;Ljava/lang/Object;Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;Ljava/lang/Object;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledFunction;
-PLcom/android/internal/util/function/pooled/PooledLambda;->obtainFunction(Lcom/android/internal/util/function/TriFunction;Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;Ljava/lang/Object;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledFunction;
-HPLcom/android/internal/util/function/pooled/PooledLambda;->obtainFunction(Lcom/android/internal/util/function/TriFunction;Ljava/lang/Object;Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledFunction;
-PLcom/android/internal/util/function/pooled/PooledLambda;->obtainFunction(Ljava/util/function/BiFunction;Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledFunction;
-HPLcom/android/internal/util/function/pooled/PooledLambda;->obtainFunction(Ljava/util/function/BiFunction;Ljava/lang/Object;Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;)Lcom/android/internal/util/function/pooled/PooledFunction;
-HPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/HeptConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
-HPLcom/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;
-HPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/NonaConsumer;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;)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;
-HPLcom/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/Consumer;Ljava/lang/Object;)Landroid/os/Message;
-HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainPredicate(Ljava/util/function/BiPredicate;Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledPredicate;
-PLcom/android/internal/util/function/pooled/PooledLambda;->obtainPredicate(Ljava/util/function/BiPredicate;Ljava/lang/Object;Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;)Lcom/android/internal/util/function/pooled/PooledPredicate;
-PLcom/android/internal/util/function/pooled/PooledLambda;->obtainRunnable(Lcom/android/internal/util/function/QuadConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledRunnable;
-PLcom/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;
-PLcom/android/internal/util/function/pooled/PooledLambda;->obtainRunnable(Ljava/util/function/BiConsumer;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;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->decodeArgCount(I)I
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->decodeReturnType(I)I
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->encode(II)I
-PLcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->toString(I)Ljava/lang/String;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;-><init>()V
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->access$000(II)I
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->access$100(II)I
@@ -32836,424 +15108,52 @@
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->doRecycle()V
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->fillInArg(Ljava/lang/Object;)Z
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->getFlags(I)I
-HPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->getFriendlyName(Ljava/lang/Object;)Ljava/lang/String;
-PLcom/android/internal/util/function/pooled/PooledLambdaImpl;->getFuncTypeAsString()Ljava/lang/String;
-HPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->getTraceName()Ljava/lang/String;
-PLcom/android/internal/util/function/pooled/PooledLambdaImpl;->hashCodeHex(Ljava/lang/Object;)Ljava/lang/String;
 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;
-PLcom/android/internal/util/function/pooled/PooledLambdaImpl;->isConstSupplier()Z
 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;->recycle()V
 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;->setFlags(II)V
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->setIfInBounds([Ljava/lang/Object;ILjava/lang/Object;)V
-PLcom/android/internal/util/function/pooled/PooledLambdaImpl;->toString()Ljava/lang/String;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->unmask(II)I
-HPLcom/android/internal/view/ActionBarPolicy;-><init>(Landroid/content/Context;)V
-HPLcom/android/internal/view/ActionBarPolicy;->enableHomeButtonByDefault()Z
-HPLcom/android/internal/view/ActionBarPolicy;->get(Landroid/content/Context;)Lcom/android/internal/view/ActionBarPolicy;
-HPLcom/android/internal/view/ActionBarPolicy;->getMaxActionButtons()I
-HPLcom/android/internal/view/ActionBarPolicy;->hasEmbeddedTabs()Z
-PLcom/android/internal/view/AppearanceRegion$1;-><init>()V
-PLcom/android/internal/view/AppearanceRegion;-><clinit>()V
-HPLcom/android/internal/view/AppearanceRegion;-><init>(ILandroid/graphics/Rect;)V
-HPLcom/android/internal/view/AppearanceRegion;-><init>(Landroid/os/Parcel;)V
-HPLcom/android/internal/view/AppearanceRegion;->equals(Ljava/lang/Object;)Z
-HPLcom/android/internal/view/AppearanceRegion;->getAppearance()I
-HPLcom/android/internal/view/AppearanceRegion;->writeToParcel(Landroid/os/Parcel;I)V
-PLcom/android/internal/view/BaseIWindow;-><init>()V
-PLcom/android/internal/view/BaseIWindow;->closeSystemDialogs(Ljava/lang/String;)V
-PLcom/android/internal/view/BaseIWindow;->dispatchAppVisibility(Z)V
-HPLcom/android/internal/view/BaseIWindow;->dispatchWindowShown()V
-PLcom/android/internal/view/BaseIWindow;->insetsChanged(Landroid/view/InsetsState;)V
-PLcom/android/internal/view/BaseIWindow;->setSession(Landroid/view/IWindowSession;)V
-HPLcom/android/internal/view/BaseSurfaceHolder;->getCallbacks()[Landroid/view/SurfaceHolder$Callback;
-HPLcom/android/internal/view/BaseSurfaceHolder;->getRequestedFormat()I
-HPLcom/android/internal/view/BaseSurfaceHolder;->getRequestedHeight()I
-HPLcom/android/internal/view/BaseSurfaceHolder;->getRequestedType()I
-HPLcom/android/internal/view/BaseSurfaceHolder;->getRequestedWidth()I
-HPLcom/android/internal/view/BaseSurfaceHolder;->getSurface()Landroid/view/Surface;
-HPLcom/android/internal/view/BaseSurfaceHolder;->getSurfaceFrame()Landroid/graphics/Rect;
-HPLcom/android/internal/view/BaseSurfaceHolder;->setSurfaceFrameSize(II)V
-HPLcom/android/internal/view/BaseSurfaceHolder;->ungetCallbacks()V
-PLcom/android/internal/view/IInputConnectionWrapper$MyHandler;-><init>(Lcom/android/internal/view/IInputConnectionWrapper;Landroid/os/Looper;)V
-HPLcom/android/internal/view/IInputConnectionWrapper$MyHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/internal/view/IInputConnectionWrapper;-><init>(Landroid/os/Looper;Landroid/view/inputmethod/InputConnection;)V
-HPLcom/android/internal/view/IInputConnectionWrapper;->beginBatchEdit()V
-HPLcom/android/internal/view/IInputConnectionWrapper;->closeConnection()V
-HPLcom/android/internal/view/IInputConnectionWrapper;->commitText(Ljava/lang/CharSequence;I)V
+HSPLcom/android/internal/view/IInputConnectionWrapper$MyHandler;-><init>(Lcom/android/internal/view/IInputConnectionWrapper;Landroid/os/Looper;)V
+HSPLcom/android/internal/view/IInputConnectionWrapper;-><init>(Landroid/os/Looper;Landroid/view/inputmethod/InputConnection;)V
 HSPLcom/android/internal/view/IInputConnectionWrapper;->dispatchMessage(Landroid/os/Message;)V
-HPLcom/android/internal/view/IInputConnectionWrapper;->endBatchEdit()V
 HSPLcom/android/internal/view/IInputConnectionWrapper;->executeMessage(Landroid/os/Message;)V
 HSPLcom/android/internal/view/IInputConnectionWrapper;->finishComposingText()V
 HSPLcom/android/internal/view/IInputConnectionWrapper;->getInputConnection()Landroid/view/inputmethod/InputConnection;
-HPLcom/android/internal/view/IInputConnectionWrapper;->getSelectedText(IILcom/android/internal/view/IInputContextCallback;)V
-HPLcom/android/internal/view/IInputConnectionWrapper;->getTextAfterCursor(IIILcom/android/internal/view/IInputContextCallback;)V
-HPLcom/android/internal/view/IInputConnectionWrapper;->getTextBeforeCursor(IIILcom/android/internal/view/IInputContextCallback;)V
 HSPLcom/android/internal/view/IInputConnectionWrapper;->isFinished()Z
 HSPLcom/android/internal/view/IInputConnectionWrapper;->obtainMessage(I)Landroid/os/Message;
-HPLcom/android/internal/view/IInputConnectionWrapper;->obtainMessageIISC(IIIILcom/android/internal/view/IInputContextCallback;)Landroid/os/Message;
-HPLcom/android/internal/view/IInputConnectionWrapper;->obtainMessageIO(IILjava/lang/Object;)Landroid/os/Message;
-HPLcom/android/internal/view/IInputConnectionWrapper;->obtainMessageISC(IIILcom/android/internal/view/IInputContextCallback;)Landroid/os/Message;
-PLcom/android/internal/view/IInputContext$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/view/IInputContext$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLcom/android/internal/view/IInputContext$Stub$Proxy;->beginBatchEdit()V
-HPLcom/android/internal/view/IInputContext$Stub$Proxy;->commitText(Ljava/lang/CharSequence;I)V
-HPLcom/android/internal/view/IInputContext$Stub$Proxy;->endBatchEdit()V
-HPLcom/android/internal/view/IInputContext$Stub$Proxy;->finishComposingText()V
-HPLcom/android/internal/view/IInputContext$Stub$Proxy;->getSelectedText(IILcom/android/internal/view/IInputContextCallback;)V
-HPLcom/android/internal/view/IInputContext$Stub$Proxy;->getTextAfterCursor(IIILcom/android/internal/view/IInputContextCallback;)V
-HPLcom/android/internal/view/IInputContext$Stub$Proxy;->getTextBeforeCursor(IIILcom/android/internal/view/IInputContextCallback;)V
-HPLcom/android/internal/view/IInputContext$Stub$Proxy;->sendKeyEvent(Landroid/view/KeyEvent;)V
-HPLcom/android/internal/view/IInputContext$Stub$Proxy;->setComposingRegion(II)V
-HPLcom/android/internal/view/IInputContext$Stub$Proxy;->setComposingText(Ljava/lang/CharSequence;I)V
-PLcom/android/internal/view/IInputContext$Stub;-><init>()V
+HSPLcom/android/internal/view/IInputContext$Stub;-><init>()V
 HSPLcom/android/internal/view/IInputContext$Stub;->asBinder()Landroid/os/IBinder;
-HSPLcom/android/internal/view/IInputContext$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputContext;
-HPLcom/android/internal/view/IInputContext$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLcom/android/internal/view/IInputContextCallback$Stub$Proxy;->setSelectedText(Ljava/lang/CharSequence;I)V
-HPLcom/android/internal/view/IInputContextCallback$Stub$Proxy;->setTextAfterCursor(Ljava/lang/CharSequence;I)V
-HPLcom/android/internal/view/IInputContextCallback$Stub$Proxy;->setTextBeforeCursor(Ljava/lang/CharSequence;I)V
-HPLcom/android/internal/view/IInputContextCallback$Stub;->asBinder()Landroid/os/IBinder;
-HPLcom/android/internal/view/IInputContextCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/view/IInputMethod$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/view/IInputMethod$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/view/IInputMethod$Stub$Proxy;->bindInput(Landroid/view/inputmethod/InputBinding;)V
-PLcom/android/internal/view/IInputMethod$Stub$Proxy;->createSession(Landroid/view/InputChannel;Lcom/android/internal/view/IInputSessionCallback;)V
-PLcom/android/internal/view/IInputMethod$Stub$Proxy;->hideSoftInput(ILandroid/os/ResultReceiver;)V
-PLcom/android/internal/view/IInputMethod$Stub$Proxy;->initializeInternal(Landroid/os/IBinder;ILcom/android/internal/inputmethod/IInputMethodPrivilegedOperations;)V
-PLcom/android/internal/view/IInputMethod$Stub$Proxy;->setSessionEnabled(Lcom/android/internal/view/IInputMethodSession;Z)V
-PLcom/android/internal/view/IInputMethod$Stub$Proxy;->showSoftInput(ILandroid/os/ResultReceiver;)V
-PLcom/android/internal/view/IInputMethod$Stub$Proxy;->startInput(Landroid/os/IBinder;Lcom/android/internal/view/IInputContext;ILandroid/view/inputmethod/EditorInfo;ZZ)V
-PLcom/android/internal/view/IInputMethod$Stub$Proxy;->unbindInput()V
-PLcom/android/internal/view/IInputMethod$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethod;
-HSPLcom/android/internal/view/IInputMethod$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/view/IInputMethodClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/view/IInputMethodClient$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/view/IInputMethodClient$Stub$Proxy;->onBindMethod(Lcom/android/internal/view/InputBindResult;)V
-PLcom/android/internal/view/IInputMethodClient$Stub$Proxy;->onUnbindMethod(II)V
-PLcom/android/internal/view/IInputMethodClient$Stub$Proxy;->reportFullscreenMode(Z)V
-PLcom/android/internal/view/IInputMethodClient$Stub$Proxy;->setActive(ZZ)V
-PLcom/android/internal/view/IInputMethodClient$Stub;-><init>()V
+HSPLcom/android/internal/view/IInputMethodClient$Stub;-><init>()V
 HSPLcom/android/internal/view/IInputMethodClient$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/view/IInputMethodClient$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodClient;
 HSPLcom/android/internal/view/IInputMethodClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->addClient(Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;I)V
-HSPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->getEnabledInputMethodList(I)Ljava/util/List;
-HSPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->getInputMethodList(I)Ljava/util/List;
-HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->hideSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
-HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->showSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
+HSPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->hideSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
 HSPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->startInputOrWindowGainedFocus(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;II)Lcom/android/internal/view/InputBindResult;
-HSPLcom/android/internal/view/IInputMethodManager$Stub;-><init>()V
-PLcom/android/internal/view/IInputMethodManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodManager;
-PLcom/android/internal/view/IInputMethodManager$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-PLcom/android/internal/view/IInputMethodManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/internal/view/IInputMethodSession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/view/IInputMethodSession$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HPLcom/android/internal/view/IInputMethodSession$Stub$Proxy;->displayCompletions([Landroid/view/inputmethod/CompletionInfo;)V
-PLcom/android/internal/view/IInputMethodSession$Stub$Proxy;->finishSession()V
-HPLcom/android/internal/view/IInputMethodSession$Stub$Proxy;->updateSelection(IIIIII)V
-HSPLcom/android/internal/view/IInputMethodSession$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/view/IInputMethodSession$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodSession;
-HPLcom/android/internal/view/IInputMethodSession$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/view/IInputSessionCallback$Stub$Proxy;->sessionCreated(Lcom/android/internal/view/IInputMethodSession;)V
-PLcom/android/internal/view/IInputSessionCallback$Stub;-><init>()V
-PLcom/android/internal/view/IInputSessionCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/view/IInputSessionCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/internal/view/IInputMethodManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodManager;
+HSPLcom/android/internal/view/IInputMethodSession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/view/IInputMethodSession$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodSession;
 HSPLcom/android/internal/view/InputBindResult$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/view/InputBindResult;
 HSPLcom/android/internal/view/InputBindResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLcom/android/internal/view/InputBindResult;-><init>(ILcom/android/internal/view/IInputMethodSession;Landroid/view/InputChannel;Ljava/lang/String;ILandroid/graphics/Matrix;)V
 HSPLcom/android/internal/view/InputBindResult;-><init>(Landroid/os/Parcel;)V
 HSPLcom/android/internal/view/InputBindResult;->getActivityViewToScreenMatrix()Landroid/graphics/Matrix;
-PLcom/android/internal/view/InputBindResult;->writeToParcel(Landroid/os/Parcel;I)V
-HPLcom/android/internal/view/InputConnectionWrapper$InputContextCallback;-><clinit>()V
-HPLcom/android/internal/view/InputConnectionWrapper$InputContextCallback;-><init>()V
-HPLcom/android/internal/view/InputConnectionWrapper$InputContextCallback;->dispose()V
-HPLcom/android/internal/view/InputConnectionWrapper$InputContextCallback;->getInstance()Lcom/android/internal/view/InputConnectionWrapper$InputContextCallback;
-HPLcom/android/internal/view/InputConnectionWrapper$InputContextCallback;->setSelectedText(Ljava/lang/CharSequence;I)V
-HPLcom/android/internal/view/InputConnectionWrapper$InputContextCallback;->setTextAfterCursor(Ljava/lang/CharSequence;I)V
-HPLcom/android/internal/view/InputConnectionWrapper$InputContextCallback;->setTextBeforeCursor(Ljava/lang/CharSequence;I)V
-HPLcom/android/internal/view/InputConnectionWrapper$InputContextCallback;->waitForResultLocked()V
-HPLcom/android/internal/view/InputConnectionWrapper;->beginBatchEdit()Z
-HPLcom/android/internal/view/InputConnectionWrapper;->commitText(Ljava/lang/CharSequence;I)Z
-HPLcom/android/internal/view/InputConnectionWrapper;->endBatchEdit()Z
-HPLcom/android/internal/view/InputConnectionWrapper;->finishComposingText()Z
-HPLcom/android/internal/view/InputConnectionWrapper;->getSelectedText(I)Ljava/lang/CharSequence;
-HPLcom/android/internal/view/InputConnectionWrapper;->getTextAfterCursor(II)Ljava/lang/CharSequence;
-HPLcom/android/internal/view/InputConnectionWrapper;->getTextBeforeCursor(II)Ljava/lang/CharSequence;
-HPLcom/android/internal/view/InputConnectionWrapper;->isMethodMissing(I)Z
-HPLcom/android/internal/view/InputConnectionWrapper;->notifyUserActionIfNecessary()V
-HPLcom/android/internal/view/InputConnectionWrapper;->sendKeyEvent(Landroid/view/KeyEvent;)Z
-HPLcom/android/internal/view/InputConnectionWrapper;->setComposingRegion(II)Z
-HPLcom/android/internal/view/InputConnectionWrapper;->setComposingText(Ljava/lang/CharSequence;I)Z
-HPLcom/android/internal/view/RotationPolicy$1;->run()V
-HPLcom/android/internal/view/RotationPolicy$RotationPolicyListener;-><init>()V
-HSPLcom/android/internal/view/RotationPolicy;->isRotationLockToggleVisible(Landroid/content/Context;)Z
-HPLcom/android/internal/view/RotationPolicy;->isRotationLocked(Landroid/content/Context;)Z
-HSPLcom/android/internal/view/RotationPolicy;->isRotationSupported(Landroid/content/Context;)Z
-HPLcom/android/internal/view/RotationPolicy;->setRotationLockAtAngle(Landroid/content/Context;ZI)V
-HPLcom/android/internal/view/SurfaceCallbackHelper$1;-><init>(Lcom/android/internal/view/SurfaceCallbackHelper;)V
-HPLcom/android/internal/view/SurfaceCallbackHelper$1;->run()V
-HPLcom/android/internal/view/SurfaceCallbackHelper;-><init>(Ljava/lang/Runnable;)V
-HPLcom/android/internal/view/SurfaceCallbackHelper;->dispatchSurfaceRedrawNeededAsync(Landroid/view/SurfaceHolder;[Landroid/view/SurfaceHolder$Callback;)V
-HSPLcom/android/internal/view/WindowManagerPolicyThread;->set(Ljava/lang/Thread;Landroid/os/Looper;)V
-HPLcom/android/internal/view/animation/FallbackLUTInterpolator;->createLUT(Landroid/animation/TimeInterpolator;J)[F
-PLcom/android/internal/view/menu/ActionMenuItem;-><init>(Landroid/content/Context;IIIILjava/lang/CharSequence;)V
-HPLcom/android/internal/view/menu/BaseMenuPresenter;->setCallback(Lcom/android/internal/view/menu/MenuPresenter$Callback;)V
-HPLcom/android/internal/view/menu/BaseMenuPresenter;->setId(I)V
-HPLcom/android/internal/view/menu/BaseMenuPresenter;->updateMenuView(Z)V
-HPLcom/android/internal/view/menu/MenuBuilder;-><init>(Landroid/content/Context;)V
-HPLcom/android/internal/view/menu/MenuBuilder;->addMenuPresenter(Lcom/android/internal/view/menu/MenuPresenter;Landroid/content/Context;)V
-HPLcom/android/internal/view/menu/MenuBuilder;->flagActionItems()V
-HPLcom/android/internal/view/menu/MenuBuilder;->getActionItems()Ljava/util/ArrayList;
-HPLcom/android/internal/view/menu/MenuBuilder;->getNonActionItems()Ljava/util/ArrayList;
-HPLcom/android/internal/view/menu/MenuBuilder;->getVisibleItems()Ljava/util/ArrayList;
-HPLcom/android/internal/view/menu/MenuBuilder;->hasVisibleItems()Z
-HPLcom/android/internal/view/menu/MenuBuilder;->removeMenuPresenter(Lcom/android/internal/view/menu/MenuPresenter;)V
-HPLcom/android/internal/view/menu/MenuBuilder;->setCallback(Lcom/android/internal/view/menu/MenuBuilder$Callback;)V
-HPLcom/android/internal/view/menu/MenuBuilder;->size()I
-HPLcom/android/internal/view/menu/MenuBuilder;->stopDispatchingItemsChanged()V
-HPLcom/android/internal/view/menu/MenuItemImpl;->isVisible()Z
-PLcom/android/internal/widget/AbsActionBarView$VisibilityAnimListener;-><init>(Lcom/android/internal/widget/AbsActionBarView;)V
-PLcom/android/internal/widget/AbsActionBarView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-PLcom/android/internal/widget/AbsActionBarView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-PLcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;-><init>(Lcom/android/internal/widget/ActionBarContainer;)V
-PLcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;-><init>(Lcom/android/internal/widget/ActionBarContainer;Lcom/android/internal/widget/ActionBarContainer$1;)V
-PLcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;->draw(Landroid/graphics/Canvas;)V
-PLcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;->getOpacity()I
-PLcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;->getOutline(Landroid/graphics/Outline;)V
-PLcom/android/internal/widget/ActionBarContainer;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-PLcom/android/internal/widget/ActionBarContainer;->access$100(Lcom/android/internal/widget/ActionBarContainer;)Z
-PLcom/android/internal/widget/ActionBarContainer;->access$300(Lcom/android/internal/widget/ActionBarContainer;)Landroid/graphics/drawable/Drawable;
-PLcom/android/internal/widget/ActionBarContainer;->access$400(Lcom/android/internal/widget/ActionBarContainer;)Landroid/graphics/drawable/Drawable;
-PLcom/android/internal/widget/ActionBarContainer;->access$500(Lcom/android/internal/widget/ActionBarContainer;)Z
-PLcom/android/internal/widget/ActionBarContainer;->access$600(Lcom/android/internal/widget/ActionBarContainer;)Landroid/view/View;
-PLcom/android/internal/widget/ActionBarContainer;->access$700(Landroid/view/View;)Z
-PLcom/android/internal/widget/ActionBarContainer;->drawableStateChanged()V
-PLcom/android/internal/widget/ActionBarContainer;->isCollapsed(Landroid/view/View;)Z
-PLcom/android/internal/widget/ActionBarContainer;->jumpDrawablesToCurrentState()V
-PLcom/android/internal/widget/ActionBarContainer;->onFinishInflate()V
-PLcom/android/internal/widget/ActionBarContainer;->onLayout(ZIIII)V
-PLcom/android/internal/widget/ActionBarContainer;->onMeasure(II)V
-PLcom/android/internal/widget/ActionBarContainer;->onResolveDrawables(I)V
-HPLcom/android/internal/widget/ActionBarContainer;->setTabContainer(Lcom/android/internal/widget/ScrollingTabContainerView;)V
-HPLcom/android/internal/widget/ActionBarContainer;->setTransitioning(Z)V
-HPLcom/android/internal/widget/ActionBarContainer;->setVisibility(I)V
-PLcom/android/internal/widget/ActionBarContainer;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
-PLcom/android/internal/widget/ActionBarContextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-PLcom/android/internal/widget/ActionBarContextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-PLcom/android/internal/widget/ActionBarContextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-PLcom/android/internal/widget/ActionBarContextView;->onDetachedFromWindow()V
-PLcom/android/internal/widget/ActionBarContextView;->setContentHeight(I)V
-PLcom/android/internal/widget/ActionBarOverlayLayout$1;-><init>(Lcom/android/internal/widget/ActionBarOverlayLayout;)V
-PLcom/android/internal/widget/ActionBarOverlayLayout$2;-><init>(Lcom/android/internal/widget/ActionBarOverlayLayout;)V
-PLcom/android/internal/widget/ActionBarOverlayLayout$3;-><init>(Lcom/android/internal/widget/ActionBarOverlayLayout;)V
-PLcom/android/internal/widget/ActionBarOverlayLayout$4;-><init>(Lcom/android/internal/widget/ActionBarOverlayLayout;)V
-PLcom/android/internal/widget/ActionBarOverlayLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-PLcom/android/internal/widget/ActionBarOverlayLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->applyInsets(Landroid/view/View;Landroid/graphics/Rect;ZZZZ)Z
-PLcom/android/internal/widget/ActionBarOverlayLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
-PLcom/android/internal/widget/ActionBarOverlayLayout;->dismissPopups()V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
-PLcom/android/internal/widget/ActionBarOverlayLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Lcom/android/internal/widget/ActionBarOverlayLayout$LayoutParams;
-PLcom/android/internal/widget/ActionBarOverlayLayout;->getDecorToolbar(Landroid/view/View;)Lcom/android/internal/widget/DecorToolbar;
-PLcom/android/internal/widget/ActionBarOverlayLayout;->getTitle()Ljava/lang/CharSequence;
-PLcom/android/internal/widget/ActionBarOverlayLayout;->haltActionBarHideOffsetAnimations()V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->hasIcon()Z
-HPLcom/android/internal/widget/ActionBarOverlayLayout;->hasLogo()Z
-PLcom/android/internal/widget/ActionBarOverlayLayout;->init(Landroid/content/Context;)V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->initFeature(I)V
-HPLcom/android/internal/widget/ActionBarOverlayLayout;->isOverflowMenuShowing()Z
-PLcom/android/internal/widget/ActionBarOverlayLayout;->onApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
-PLcom/android/internal/widget/ActionBarOverlayLayout;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->onDetachedFromWindow()V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->onLayout(ZIIII)V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->onMeasure(II)V
-HPLcom/android/internal/widget/ActionBarOverlayLayout;->onWindowSystemUiVisibilityChanged(I)V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->onWindowVisibilityChanged(I)V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->pullChildren()V
-HPLcom/android/internal/widget/ActionBarOverlayLayout;->saveToolbarHierarchyState(Landroid/util/SparseArray;)V
-HPLcom/android/internal/widget/ActionBarOverlayLayout;->setActionBarVisibilityCallback(Lcom/android/internal/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback;)V
-HPLcom/android/internal/widget/ActionBarOverlayLayout;->setHasNonEmbeddedTabs(Z)V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->setIcon(I)V
-HPLcom/android/internal/widget/ActionBarOverlayLayout;->setIcon(Landroid/graphics/drawable/Drawable;)V
-HPLcom/android/internal/widget/ActionBarOverlayLayout;->setLogo(I)V
-HPLcom/android/internal/widget/ActionBarOverlayLayout;->setMenu(Landroid/view/Menu;Lcom/android/internal/view/menu/MenuPresenter$Callback;)V
-HPLcom/android/internal/widget/ActionBarOverlayLayout;->setMenuPrepared()V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->setUiOptions(I)V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->setWindowCallback(Landroid/view/Window$Callback;)V
-PLcom/android/internal/widget/ActionBarOverlayLayout;->setWindowTitle(Ljava/lang/CharSequence;)V
-PLcom/android/internal/widget/BackgroundFallback;-><init>()V
+HSPLcom/android/internal/widget/BackgroundFallback;-><init>()V
 HSPLcom/android/internal/widget/BackgroundFallback;->draw(Landroid/view/ViewGroup;Landroid/view/ViewGroup;Landroid/graphics/Canvas;Landroid/view/View;Landroid/view/View;Landroid/view/View;)V
 HSPLcom/android/internal/widget/BackgroundFallback;->hasFallback()Z
-PLcom/android/internal/widget/BackgroundFallback;->isOpaque(Landroid/graphics/drawable/Drawable;)Z
-HSPLcom/android/internal/widget/BackgroundFallback;->setDrawable(Landroid/graphics/drawable/Drawable;)V
-HPLcom/android/internal/widget/EditableInputConnection;->beginBatchEdit()Z
-HPLcom/android/internal/widget/EditableInputConnection;->closeConnection()V
-HPLcom/android/internal/widget/EditableInputConnection;->commitText(Ljava/lang/CharSequence;I)Z
-HPLcom/android/internal/widget/EditableInputConnection;->endBatchEdit()Z
-HPLcom/android/internal/widget/EditableInputConnection;->getEditable()Landroid/text/Editable;
-PLcom/android/internal/widget/ICheckCredentialProgressCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLcom/android/internal/widget/ICheckCredentialProgressCallback$Stub$Proxy;->onCredentialVerified()V
-HPLcom/android/internal/widget/ICheckCredentialProgressCallback$Stub;-><init>()V
-HPLcom/android/internal/widget/ICheckCredentialProgressCallback$Stub;->asBinder()Landroid/os/IBinder;
-PLcom/android/internal/widget/ICheckCredentialProgressCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/ICheckCredentialProgressCallback;
-HPLcom/android/internal/widget/ICheckCredentialProgressCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->checkCredential(Lcom/android/internal/widget/LockscreenCredential;ILcom/android/internal/widget/ICheckCredentialProgressCallback;)Lcom/android/internal/widget/VerifyCredentialResponse;
-HPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->checkVoldPassword(I)Z
-PLcom/android/internal/widget/ILockSettings$Stub$Proxy;->generateKey(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getBoolean(Ljava/lang/String;ZI)Z
-HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getCredentialType(I)I
-HPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getKey(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getKeyChainSnapshot()Landroid/security/keystore/recovery/KeyChainSnapshot;
-PLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getRecoverySecretTypes()[I
-HPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getRecoveryStatus()Ljava/util/Map;
-HPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getSeparateProfileChallengeEnabled(I)Z
-HPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getString(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
-HPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getStrongAuthForUser(I)I
-PLcom/android/internal/widget/ILockSettings$Stub$Proxy;->initRecoveryServiceWithSigFile(Ljava/lang/String;[B[B)V
-HPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->setBoolean(Ljava/lang/String;ZI)V
-PLcom/android/internal/widget/ILockSettings$Stub$Proxy;->setRecoverySecretTypes([I)V
-HPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->setRecoveryStatus(Ljava/lang/String;I)V
-PLcom/android/internal/widget/ILockSettings$Stub$Proxy;->setServerParams([B)V
-PLcom/android/internal/widget/ILockSettings$Stub$Proxy;->setSnapshotCreatedPendingIntent(Landroid/app/PendingIntent;)V
-HPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->userPresent(I)V
-HSPLcom/android/internal/widget/ILockSettings$Stub;-><init>()V
 HSPLcom/android/internal/widget/ILockSettings$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/ILockSettings;
-PLcom/android/internal/widget/ILockSettings$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
-HSPLcom/android/internal/widget/ILockSettings$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$1;-><init>(Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;)V
-PLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$1;->onStrongAuthRequiredChanged(II)V
-HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$H;-><init>(Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;Landroid/os/Looper;)V
-PLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$H;->handleMessage(Landroid/os/Message;)V
-HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;-><init>(Landroid/content/Context;)V
-HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
-PLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->access$100(Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;)Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$H;
-HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->getDefaultFlags(Landroid/content/Context;)I
-HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->getStrongAuthForUser(I)I
-PLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->handleStrongAuthRequiredChanged(II)V
-HPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->isBiometricAllowedForUser(I)Z
-HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->isTrustAllowedForUser(I)Z
-PLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->onStrongAuthRequiredChanged(I)V
 HSPLcom/android/internal/widget/LockPatternUtils;-><init>(Landroid/content/Context;)V
-HPLcom/android/internal/widget/LockPatternUtils;->access$000(Lcom/android/internal/widget/LockPatternUtils;)Landroid/os/Handler;
-HPLcom/android/internal/widget/LockPatternUtils;->checkCredential(Lcom/android/internal/widget/LockscreenCredential;ILcom/android/internal/widget/LockPatternUtils$CheckCredentialProgressCallback;)Z
-HPLcom/android/internal/widget/LockPatternUtils;->checkVoldPassword(I)Z
-HSPLcom/android/internal/widget/LockPatternUtils;->credentialTypeToPasswordQuality(I)I
-HSPLcom/android/internal/widget/LockPatternUtils;->frpCredentialEnabled(Landroid/content/Context;)Z
-HPLcom/android/internal/widget/LockPatternUtils;->getActivePasswordQuality(I)I
-PLcom/android/internal/widget/LockPatternUtils;->getBoolean(Ljava/lang/String;ZI)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->getCredentialTypeForUser(I)I
-HPLcom/android/internal/widget/LockPatternUtils;->getCurrentFailedPasswordAttempts(I)I
-HPLcom/android/internal/widget/LockPatternUtils;->getDeviceOwnerInfo()Ljava/lang/String;
-HSPLcom/android/internal/widget/LockPatternUtils;->getDevicePolicyManager()Landroid/app/admin/DevicePolicyManager;
-HSPLcom/android/internal/widget/LockPatternUtils;->getEnabledTrustAgents(I)Ljava/util/List;
-HSPLcom/android/internal/widget/LockPatternUtils;->getKeyguardStoredPasswordQuality(I)I
 HSPLcom/android/internal/widget/LockPatternUtils;->getLockSettings()Lcom/android/internal/widget/ILockSettings;
-HPLcom/android/internal/widget/LockPatternUtils;->getLockoutAttemptDeadline(I)J
-PLcom/android/internal/widget/LockPatternUtils;->getLong(Ljava/lang/String;JI)J
-PLcom/android/internal/widget/LockPatternUtils;->getOwnerInfo(I)Ljava/lang/String;
-PLcom/android/internal/widget/LockPatternUtils;->getPowerButtonInstantlyLocks(I)Z
-HSPLcom/android/internal/widget/LockPatternUtils;->getString(Ljava/lang/String;I)Ljava/lang/String;
-HPLcom/android/internal/widget/LockPatternUtils;->getStrongAuthForUser(I)I
-HPLcom/android/internal/widget/LockPatternUtils;->getTrustManager()Landroid/app/trust/TrustManager;
-HSPLcom/android/internal/widget/LockPatternUtils;->getUserManager()Landroid/os/UserManager;
-PLcom/android/internal/widget/LockPatternUtils;->hasSecureLockScreen()Z
-HSPLcom/android/internal/widget/LockPatternUtils;->hasSeparateChallenge(I)Z
-PLcom/android/internal/widget/LockPatternUtils;->isLockPatternEnabled(I)Z
-HPLcom/android/internal/widget/LockPatternUtils;->isLockScreenDisabled(I)Z
-HSPLcom/android/internal/widget/LockPatternUtils;->isManagedProfile(I)Z
-HPLcom/android/internal/widget/LockPatternUtils;->isManagedProfileWithUnifiedChallenge(I)Z
-PLcom/android/internal/widget/LockPatternUtils;->isOwnerInfoEnabled(I)Z
-PLcom/android/internal/widget/LockPatternUtils;->isPowerButtonInstantlyLocksEverChosen(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->isSecure(I)Z
-HSPLcom/android/internal/widget/LockPatternUtils;->isSeparateProfileChallengeAllowed(I)Z
-HSPLcom/android/internal/widget/LockPatternUtils;->isSeparateProfileChallengeEnabled(I)Z
-PLcom/android/internal/widget/LockPatternUtils;->isSyntheticPasswordEnabled()Z
-HPLcom/android/internal/widget/LockPatternUtils;->isTactileFeedbackEnabled()Z
-HSPLcom/android/internal/widget/LockPatternUtils;->isTrustUsuallyManaged(I)Z
-HPLcom/android/internal/widget/LockPatternUtils;->isUserInLockdown(I)Z
-PLcom/android/internal/widget/LockPatternUtils;->isVisiblePatternEnabled(I)Z
-PLcom/android/internal/widget/LockPatternUtils;->isVisiblePatternEverChosen(I)Z
-HPLcom/android/internal/widget/LockPatternUtils;->patternToByteArray(Ljava/util/List;)[B
-HSPLcom/android/internal/widget/LockPatternUtils;->registerStrongAuthTracker(Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;)V
-HPLcom/android/internal/widget/LockPatternUtils;->reportFailedPasswordAttempt(I)V
-HPLcom/android/internal/widget/LockPatternUtils;->reportSuccessfulPasswordAttempt(I)V
-HPLcom/android/internal/widget/LockPatternUtils;->throwIfCalledOnMainThread()V
-HPLcom/android/internal/widget/LockPatternUtils;->userPresent(I)V
-HPLcom/android/internal/widget/LockPatternUtils;->wrapCallback(Lcom/android/internal/widget/LockPatternUtils$CheckCredentialProgressCallback;)Lcom/android/internal/widget/ICheckCredentialProgressCallback;
-HSPLcom/android/internal/widget/LockSettingsInternal;-><init>()V
-HSPLcom/android/internal/widget/LockscreenCredential$1;-><init>()V
-PLcom/android/internal/widget/LockscreenCredential$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/widget/LockscreenCredential;
-PLcom/android/internal/widget/LockscreenCredential$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLcom/android/internal/widget/LockscreenCredential;-><clinit>()V
 HSPLcom/android/internal/widget/LockscreenCredential;-><init>(I[B)V
-PLcom/android/internal/widget/LockscreenCredential;-><init>(I[BLcom/android/internal/widget/LockscreenCredential$1;)V
-PLcom/android/internal/widget/LockscreenCredential;->checkAgainstStoredType(I)Z
-PLcom/android/internal/widget/LockscreenCredential;->createManagedPassword([B)Lcom/android/internal/widget/LockscreenCredential;
-HSPLcom/android/internal/widget/LockscreenCredential;->createNone()Lcom/android/internal/widget/LockscreenCredential;
-HPLcom/android/internal/widget/LockscreenCredential;->createPattern(Ljava/util/List;)Lcom/android/internal/widget/LockscreenCredential;
-HPLcom/android/internal/widget/LockscreenCredential;->duplicate()Lcom/android/internal/widget/LockscreenCredential;
-PLcom/android/internal/widget/LockscreenCredential;->ensureNotZeroized()V
-PLcom/android/internal/widget/LockscreenCredential;->getCredential()[B
-PLcom/android/internal/widget/LockscreenCredential;->getType()I
-PLcom/android/internal/widget/LockscreenCredential;->isNone()Z
-PLcom/android/internal/widget/LockscreenCredential;->isPassword()Z
-PLcom/android/internal/widget/LockscreenCredential;->isPattern()Z
-PLcom/android/internal/widget/LockscreenCredential;->isPin()Z
-HPLcom/android/internal/widget/LockscreenCredential;->writeToParcel(Landroid/os/Parcel;I)V
-HPLcom/android/internal/widget/LockscreenCredential;->zeroize()V
-PLcom/android/internal/widget/ToolbarWidgetWrapper$1;-><init>(Lcom/android/internal/widget/ToolbarWidgetWrapper;)V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;-><init>(Landroid/widget/Toolbar;Z)V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;-><init>(Landroid/widget/Toolbar;ZI)V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->access$000(Lcom/android/internal/widget/ToolbarWidgetWrapper;)Landroid/widget/Toolbar;
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->access$100(Lcom/android/internal/widget/ToolbarWidgetWrapper;)Ljava/lang/CharSequence;
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->dismissPopupMenus()V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->getContext()Landroid/content/Context;
-HPLcom/android/internal/widget/ToolbarWidgetWrapper;->getDisplayOptions()I
-HPLcom/android/internal/widget/ToolbarWidgetWrapper;->getNavigationMode()I
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->getTitle()Ljava/lang/CharSequence;
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->hasIcon()Z
-HPLcom/android/internal/widget/ToolbarWidgetWrapper;->hasLogo()Z
-HPLcom/android/internal/widget/ToolbarWidgetWrapper;->isOverflowMenuShowing()Z
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->isSplit()Z
-HPLcom/android/internal/widget/ToolbarWidgetWrapper;->saveHierarchyState(Landroid/util/SparseArray;)V
-HPLcom/android/internal/widget/ToolbarWidgetWrapper;->setCollapsible(Z)V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->setDefaultNavigationContentDescription(I)V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->setDisplayOptions(I)V
-HPLcom/android/internal/widget/ToolbarWidgetWrapper;->setEmbeddedTabView(Lcom/android/internal/widget/ScrollingTabContainerView;)V
-HPLcom/android/internal/widget/ToolbarWidgetWrapper;->setHomeButtonEnabled(Z)V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->setIcon(I)V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->setIcon(Landroid/graphics/drawable/Drawable;)V
-HPLcom/android/internal/widget/ToolbarWidgetWrapper;->setLogo(I)V
-HPLcom/android/internal/widget/ToolbarWidgetWrapper;->setLogo(Landroid/graphics/drawable/Drawable;)V
-HPLcom/android/internal/widget/ToolbarWidgetWrapper;->setMenu(Landroid/view/Menu;Lcom/android/internal/view/menu/MenuPresenter$Callback;)V
-HPLcom/android/internal/widget/ToolbarWidgetWrapper;->setMenuPrepared()V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->setTitleInt(Ljava/lang/CharSequence;)V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->setWindowCallback(Landroid/view/Window$Callback;)V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->setWindowTitle(Ljava/lang/CharSequence;)V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->updateNavigationIcon()V
-PLcom/android/internal/widget/ToolbarWidgetWrapper;->updateToolbarLogo()V
-PLcom/android/internal/widget/VerifyCredentialResponse$1;-><init>()V
-HPLcom/android/internal/widget/VerifyCredentialResponse$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/widget/VerifyCredentialResponse;
-HPLcom/android/internal/widget/VerifyCredentialResponse$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLcom/android/internal/widget/VerifyCredentialResponse;-><clinit>()V
-PLcom/android/internal/widget/VerifyCredentialResponse;-><init>()V
-PLcom/android/internal/widget/VerifyCredentialResponse;-><init>(II[B)V
-HPLcom/android/internal/widget/VerifyCredentialResponse;-><init>(II[BLcom/android/internal/widget/VerifyCredentialResponse$1;)V
-PLcom/android/internal/widget/VerifyCredentialResponse;-><init>([B)V
-HPLcom/android/internal/widget/VerifyCredentialResponse;->access$200(Lcom/android/internal/widget/VerifyCredentialResponse;[B)V
-PLcom/android/internal/widget/VerifyCredentialResponse;->getPayload()[B
-PLcom/android/internal/widget/VerifyCredentialResponse;->getResponseCode()I
-HPLcom/android/internal/widget/VerifyCredentialResponse;->setPayload([B)V
-PLcom/android/internal/widget/VerifyCredentialResponse;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLcom/android/internal/widget/ScrollBarUtils;->getThumbLength(IIII)I
+HSPLcom/android/internal/widget/ScrollBarUtils;->getThumbOffset(IIIII)I
 HSPLcom/android/okhttp/Address;-><init>(Ljava/lang/String;ILcom/android/okhttp/Dns;Ljavax/net/SocketFactory;Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/HostnameVerifier;Lcom/android/okhttp/CertificatePinner;Lcom/android/okhttp/Authenticator;Ljava/net/Proxy;Ljava/util/List;Ljava/util/List;Ljava/net/ProxySelector;)V
 HSPLcom/android/okhttp/Address;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/okhttp/Address;->getCertificatePinner()Lcom/android/okhttp/CertificatePinner;
@@ -33269,30 +15169,12 @@
 HSPLcom/android/okhttp/Address;->getUriPort()I
 HSPLcom/android/okhttp/Address;->hashCode()I
 HSPLcom/android/okhttp/Address;->url()Lcom/android/okhttp/HttpUrl;
-HSPLcom/android/okhttp/Cache$1;-><init>(Lcom/android/okhttp/Cache;)V
-HPLcom/android/okhttp/Cache$1;->get(Lcom/android/okhttp/Request;)Lcom/android/okhttp/Response;
-HPLcom/android/okhttp/Cache$1;->put(Lcom/android/okhttp/Response;)Lcom/android/okhttp/internal/http/CacheRequest;
-HPLcom/android/okhttp/Cache$1;->trackResponse(Lcom/android/okhttp/internal/http/CacheStrategy;)V
-HPLcom/android/okhttp/Cache$Entry;-><init>(Lcom/android/okhttp/Response;)V
-HPLcom/android/okhttp/Cache$Entry;->isHttps()Z
-HPLcom/android/okhttp/Cache$Entry;->writeCertList(Lcom/android/okhttp/okio/BufferedSink;Ljava/util/List;)V
-HPLcom/android/okhttp/Cache$Entry;->writeTo(Lcom/android/okhttp/internal/DiskLruCache$Editor;)V
-HSPLcom/android/okhttp/Cache;-><init>(Ljava/io/File;J)V
-HSPLcom/android/okhttp/Cache;-><init>(Ljava/io/File;JLcom/android/okhttp/internal/io/FileSystem;)V
-HPLcom/android/okhttp/Cache;->access$000(Lcom/android/okhttp/Cache;Lcom/android/okhttp/Response;)Lcom/android/okhttp/internal/http/CacheRequest;
-HPLcom/android/okhttp/Cache;->access$400(Lcom/android/okhttp/Cache;Lcom/android/okhttp/internal/http/CacheStrategy;)V
-HPLcom/android/okhttp/Cache;->access$808(Lcom/android/okhttp/Cache;)I
-HPLcom/android/okhttp/Cache;->get(Lcom/android/okhttp/Request;)Lcom/android/okhttp/Response;
-HPLcom/android/okhttp/Cache;->put(Lcom/android/okhttp/Response;)Lcom/android/okhttp/internal/http/CacheRequest;
-HPLcom/android/okhttp/Cache;->trackResponse(Lcom/android/okhttp/internal/http/CacheStrategy;)V
-HPLcom/android/okhttp/Cache;->urlToKey(Lcom/android/okhttp/Request;)Ljava/lang/String;
 HSPLcom/android/okhttp/CacheControl;-><init>(ZZIIZZZIIZZLjava/lang/String;)V
-HPLcom/android/okhttp/CacheControl;->noStore()Z
 HSPLcom/android/okhttp/CacheControl;->onlyIfCached()Z
 HSPLcom/android/okhttp/CacheControl;->parse(Lcom/android/okhttp/Headers;)Lcom/android/okhttp/CacheControl;
 HSPLcom/android/okhttp/ConfigAwareConnectionPool$1;-><init>(Lcom/android/okhttp/ConfigAwareConnectionPool;)V
-PLcom/android/okhttp/ConfigAwareConnectionPool$1;->onNetworkConfigurationChanged()V
-PLcom/android/okhttp/ConfigAwareConnectionPool;->access$002(Lcom/android/okhttp/ConfigAwareConnectionPool;Lcom/android/okhttp/ConnectionPool;)Lcom/android/okhttp/ConnectionPool;
+HSPLcom/android/okhttp/ConfigAwareConnectionPool$1;->onNetworkConfigurationChanged()V
+HSPLcom/android/okhttp/ConfigAwareConnectionPool;->access$002(Lcom/android/okhttp/ConfigAwareConnectionPool;Lcom/android/okhttp/ConnectionPool;)Lcom/android/okhttp/ConnectionPool;
 HSPLcom/android/okhttp/ConfigAwareConnectionPool;->get()Lcom/android/okhttp/ConnectionPool;
 HSPLcom/android/okhttp/ConfigAwareConnectionPool;->getInstance()Lcom/android/okhttp/ConfigAwareConnectionPool;
 HSPLcom/android/okhttp/ConnectionPool$1;-><init>(Lcom/android/okhttp/ConnectionPool;)V
@@ -33327,10 +15209,7 @@
 HSPLcom/android/okhttp/Dispatcher;-><init>()V
 HSPLcom/android/okhttp/Dns$1;->lookup(Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/okhttp/Handshake;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
-HPLcom/android/okhttp/Handshake;->cipherSuite()Ljava/lang/String;
 HSPLcom/android/okhttp/Handshake;->get(Ljavax/net/ssl/SSLSession;)Lcom/android/okhttp/Handshake;
-HPLcom/android/okhttp/Handshake;->localCertificates()Ljava/util/List;
-HPLcom/android/okhttp/Handshake;->peerCertificates()Ljava/util/List;
 HSPLcom/android/okhttp/Headers$Builder;-><init>()V
 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;
@@ -33349,10 +15228,8 @@
 HSPLcom/android/okhttp/Headers;->newBuilder()Lcom/android/okhttp/Headers$Builder;
 HSPLcom/android/okhttp/Headers;->size()I
 HSPLcom/android/okhttp/Headers;->value(I)Ljava/lang/String;
-HSPLcom/android/okhttp/HttpHandler$CleartextURLFilter;->checkURLPermitted(Ljava/net/URL;)V
 HSPLcom/android/okhttp/HttpHandler;-><init>()V
 HSPLcom/android/okhttp/HttpHandler;->createHttpOkUrlFactory(Ljava/net/Proxy;)Lcom/android/okhttp/OkUrlFactory;
-HSPLcom/android/okhttp/HttpHandler;->newOkUrlFactory(Ljava/net/Proxy;)Lcom/android/okhttp/OkUrlFactory;
 HSPLcom/android/okhttp/HttpHandler;->openConnection(Ljava/net/URL;)Ljava/net/URLConnection;
 HSPLcom/android/okhttp/HttpUrl$Builder;-><init>()V
 HSPLcom/android/okhttp/HttpUrl$Builder;->build()Lcom/android/okhttp/HttpUrl;
@@ -33365,7 +15242,6 @@
 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;->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
 HSPLcom/android/okhttp/HttpUrl$Builder;->push(Ljava/lang/String;IIZZ)V
@@ -33405,13 +15281,9 @@
 HSPLcom/android/okhttp/HttpUrl;->percentDecode(Ljava/util/List;Z)Ljava/util/List;
 HSPLcom/android/okhttp/HttpUrl;->port()I
 HSPLcom/android/okhttp/HttpUrl;->queryStringToNamesAndValues(Ljava/lang/String;)Ljava/util/List;
-HSPLcom/android/okhttp/HttpUrl;->scheme()Ljava/lang/String;
-HPLcom/android/okhttp/HttpUrl;->toString()Ljava/lang/String;
 HSPLcom/android/okhttp/HttpUrl;->uri()Ljava/net/URI;
-HSPLcom/android/okhttp/HttpUrl;->url()Ljava/net/URL;
 HSPLcom/android/okhttp/HttpsHandler;-><init>()V
 HSPLcom/android/okhttp/HttpsHandler;->createHttpsOkUrlFactory(Ljava/net/Proxy;)Lcom/android/okhttp/OkUrlFactory;
-HSPLcom/android/okhttp/HttpsHandler;->getDefaultPort()I
 HSPLcom/android/okhttp/HttpsHandler;->newOkUrlFactory(Ljava/net/Proxy;)Lcom/android/okhttp/OkUrlFactory;
 HSPLcom/android/okhttp/OkHttpClient$1;->addLenient(Lcom/android/okhttp/Headers$Builder;Ljava/lang/String;)V
 HSPLcom/android/okhttp/OkHttpClient$1;->apply(Lcom/android/okhttp/ConnectionSpec;Ljavax/net/ssl/SSLSocket;Z)V
@@ -33423,7 +15295,6 @@
 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
-HPLcom/android/okhttp/OkHttpClient;->clone()Lcom/android/okhttp/OkHttpClient;
 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;
@@ -33431,9 +15302,7 @@
 HSPLcom/android/okhttp/OkHttpClient;->getConnectionPool()Lcom/android/okhttp/ConnectionPool;
 HSPLcom/android/okhttp/OkHttpClient;->getConnectionSpecs()Ljava/util/List;
 HSPLcom/android/okhttp/OkHttpClient;->getCookieHandler()Ljava/net/CookieHandler;
-HSPLcom/android/okhttp/OkHttpClient;->getDefaultSSLSocketFactory()Ljavax/net/ssl/SSLSocketFactory;
 HSPLcom/android/okhttp/OkHttpClient;->getDns()Lcom/android/okhttp/Dns;
-HSPLcom/android/okhttp/OkHttpClient;->getFollowRedirects()Z
 HSPLcom/android/okhttp/OkHttpClient;->getHostnameVerifier()Ljavax/net/ssl/HostnameVerifier;
 HSPLcom/android/okhttp/OkHttpClient;->getProtocols()Ljava/util/List;
 HSPLcom/android/okhttp/OkHttpClient;->getProxy()Ljava/net/Proxy;
@@ -33444,22 +15313,18 @@
 HSPLcom/android/okhttp/OkHttpClient;->getSslSocketFactory()Ljavax/net/ssl/SSLSocketFactory;
 HSPLcom/android/okhttp/OkHttpClient;->getWriteTimeout()I
 HSPLcom/android/okhttp/OkHttpClient;->internalCache()Lcom/android/okhttp/internal/InternalCache;
-HPLcom/android/okhttp/OkHttpClient;->setCache(Lcom/android/okhttp/Cache;)Lcom/android/okhttp/OkHttpClient;
 HSPLcom/android/okhttp/OkHttpClient;->setCertificatePinner(Lcom/android/okhttp/CertificatePinner;)Lcom/android/okhttp/OkHttpClient;
 HSPLcom/android/okhttp/OkHttpClient;->setConnectTimeout(JLjava/util/concurrent/TimeUnit;)V
 HSPLcom/android/okhttp/OkHttpClient;->setConnectionPool(Lcom/android/okhttp/ConnectionPool;)Lcom/android/okhttp/OkHttpClient;
 HSPLcom/android/okhttp/OkHttpClient;->setConnectionSpecs(Ljava/util/List;)Lcom/android/okhttp/OkHttpClient;
-HSPLcom/android/okhttp/OkHttpClient;->setDns(Lcom/android/okhttp/Dns;)Lcom/android/okhttp/OkHttpClient;
 HSPLcom/android/okhttp/OkHttpClient;->setFollowRedirects(Z)V
 HSPLcom/android/okhttp/OkHttpClient;->setFollowSslRedirects(Z)Lcom/android/okhttp/OkHttpClient;
 HSPLcom/android/okhttp/OkHttpClient;->setHostnameVerifier(Ljavax/net/ssl/HostnameVerifier;)Lcom/android/okhttp/OkHttpClient;
 HSPLcom/android/okhttp/OkHttpClient;->setProtocols(Ljava/util/List;)Lcom/android/okhttp/OkHttpClient;
 HSPLcom/android/okhttp/OkHttpClient;->setProxy(Ljava/net/Proxy;)Lcom/android/okhttp/OkHttpClient;
 HSPLcom/android/okhttp/OkHttpClient;->setReadTimeout(JLjava/util/concurrent/TimeUnit;)V
-HSPLcom/android/okhttp/OkHttpClient;->setSocketFactory(Ljavax/net/SocketFactory;)Lcom/android/okhttp/OkHttpClient;
 HSPLcom/android/okhttp/OkHttpClient;->setSslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;)Lcom/android/okhttp/OkHttpClient;
 HSPLcom/android/okhttp/OkHttpClient;->setWriteTimeout(JLjava/util/concurrent/TimeUnit;)V
-HSPLcom/android/okhttp/OkUrlFactories;->open(Lcom/android/okhttp/OkUrlFactory;Ljava/net/URL;Ljava/net/Proxy;)Ljava/net/HttpURLConnection;
 HSPLcom/android/okhttp/OkUrlFactories;->setUrlFilter(Lcom/android/okhttp/OkUrlFactory;Lcom/android/okhttp/internal/URLFilter;)V
 HSPLcom/android/okhttp/OkUrlFactory;-><init>(Lcom/android/okhttp/OkHttpClient;)V
 HSPLcom/android/okhttp/OkUrlFactory;->client()Lcom/android/okhttp/OkHttpClient;
@@ -33495,9 +15360,6 @@
 HSPLcom/android/okhttp/Request;->isHttps()Z
 HSPLcom/android/okhttp/Request;->method()Ljava/lang/String;
 HSPLcom/android/okhttp/Request;->newBuilder()Lcom/android/okhttp/Request$Builder;
-HSPLcom/android/okhttp/Request;->uri()Ljava/net/URI;
-HSPLcom/android/okhttp/Request;->url()Ljava/net/URL;
-HPLcom/android/okhttp/Request;->urlString()Ljava/lang/String;
 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;Lcom/android/okhttp/Response$1;)V
@@ -33537,23 +15399,17 @@
 HSPLcom/android/okhttp/Response;->access$1900(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Response;
 HSPLcom/android/okhttp/Response;->access$2000(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Response;
 HSPLcom/android/okhttp/Response;->body()Lcom/android/okhttp/ResponseBody;
-HPLcom/android/okhttp/Response;->cacheControl()Lcom/android/okhttp/CacheControl;
-HSPLcom/android/okhttp/Response;->cacheResponse()Lcom/android/okhttp/Response;
-HPLcom/android/okhttp/Response;->challenges()Ljava/util/List;
 HSPLcom/android/okhttp/Response;->code()I
-HPLcom/android/okhttp/Response;->handshake()Lcom/android/okhttp/Handshake;
 HSPLcom/android/okhttp/Response;->header(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/okhttp/Response;->header(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/okhttp/Response;->headers()Lcom/android/okhttp/Headers;
 HSPLcom/android/okhttp/Response;->message()Ljava/lang/String;
-HSPLcom/android/okhttp/Response;->networkResponse()Lcom/android/okhttp/Response;
 HSPLcom/android/okhttp/Response;->newBuilder()Lcom/android/okhttp/Response$Builder;
 HSPLcom/android/okhttp/Response;->protocol()Lcom/android/okhttp/Protocol;
 HSPLcom/android/okhttp/Response;->request()Lcom/android/okhttp/Request;
 HSPLcom/android/okhttp/ResponseBody;-><init>()V
 HSPLcom/android/okhttp/ResponseBody;->byteStream()Ljava/io/InputStream;
 HSPLcom/android/okhttp/Route;-><init>(Lcom/android/okhttp/Address;Ljava/net/Proxy;Ljava/net/InetSocketAddress;)V
-HPLcom/android/okhttp/Route;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/okhttp/Route;->getAddress()Lcom/android/okhttp/Address;
 HSPLcom/android/okhttp/Route;->getProxy()Ljava/net/Proxy;
 HSPLcom/android/okhttp/Route;->getSocketAddress()Ljava/net/InetSocketAddress;
@@ -33561,52 +15417,8 @@
 HSPLcom/android/okhttp/Route;->requiresTunnel()Z
 HSPLcom/android/okhttp/internal/ConnectionSpecSelector;-><init>(Ljava/util/List;)V
 HSPLcom/android/okhttp/internal/ConnectionSpecSelector;->configureSecureSocket(Ljavax/net/ssl/SSLSocket;)Lcom/android/okhttp/ConnectionSpec;
-PLcom/android/okhttp/internal/ConnectionSpecSelector;->connectionFailed(Ljava/io/IOException;)Z
+HSPLcom/android/okhttp/internal/ConnectionSpecSelector;->connectionFailed(Ljava/io/IOException;)Z
 HSPLcom/android/okhttp/internal/ConnectionSpecSelector;->isFallbackPossible(Ljavax/net/ssl/SSLSocket;)Z
-HSPLcom/android/okhttp/internal/DiskLruCache$1;-><init>(Lcom/android/okhttp/internal/DiskLruCache;)V
-HPLcom/android/okhttp/internal/DiskLruCache$Editor;-><init>(Lcom/android/okhttp/internal/DiskLruCache;Lcom/android/okhttp/internal/DiskLruCache$Entry;)V
-HPLcom/android/okhttp/internal/DiskLruCache$Editor;-><init>(Lcom/android/okhttp/internal/DiskLruCache;Lcom/android/okhttp/internal/DiskLruCache$Entry;Lcom/android/okhttp/internal/DiskLruCache$1;)V
-HPLcom/android/okhttp/internal/DiskLruCache$Editor;->access$1700(Lcom/android/okhttp/internal/DiskLruCache$Editor;)Lcom/android/okhttp/internal/DiskLruCache$Entry;
-HPLcom/android/okhttp/internal/DiskLruCache$Editor;->access$1800(Lcom/android/okhttp/internal/DiskLruCache$Editor;)[Z
-HPLcom/android/okhttp/internal/DiskLruCache$Editor;->commit()V
-HPLcom/android/okhttp/internal/DiskLruCache$Editor;->newSink(I)Lcom/android/okhttp/okio/Sink;
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;-><init>(Lcom/android/okhttp/internal/DiskLruCache;Ljava/lang/String;)V
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;-><init>(Lcom/android/okhttp/internal/DiskLruCache;Ljava/lang/String;Lcom/android/okhttp/internal/DiskLruCache$1;)V
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;->access$1000(Lcom/android/okhttp/internal/DiskLruCache$Entry;[Ljava/lang/String;)V
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;->access$1200(Lcom/android/okhttp/internal/DiskLruCache$Entry;)[J
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;->access$1300(Lcom/android/okhttp/internal/DiskLruCache$Entry;)[Ljava/io/File;
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;->access$1400(Lcom/android/okhttp/internal/DiskLruCache$Entry;)[Ljava/io/File;
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;->access$1500(Lcom/android/okhttp/internal/DiskLruCache$Entry;)Ljava/lang/String;
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;->access$1602(Lcom/android/okhttp/internal/DiskLruCache$Entry;J)J
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;->access$800(Lcom/android/okhttp/internal/DiskLruCache$Entry;)Z
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;->access$802(Lcom/android/okhttp/internal/DiskLruCache$Entry;Z)Z
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;->access$900(Lcom/android/okhttp/internal/DiskLruCache$Entry;)Lcom/android/okhttp/internal/DiskLruCache$Editor;
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;->access$902(Lcom/android/okhttp/internal/DiskLruCache$Entry;Lcom/android/okhttp/internal/DiskLruCache$Editor;)Lcom/android/okhttp/internal/DiskLruCache$Editor;
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;->setLengths([Ljava/lang/String;)V
-HPLcom/android/okhttp/internal/DiskLruCache$Entry;->writeLengths(Lcom/android/okhttp/okio/BufferedSink;)V
-HSPLcom/android/okhttp/internal/DiskLruCache;-><init>(Lcom/android/okhttp/internal/io/FileSystem;Ljava/io/File;IIJLjava/util/concurrent/Executor;)V
-HPLcom/android/okhttp/internal/DiskLruCache;->access$2200(Lcom/android/okhttp/internal/DiskLruCache;)I
-HPLcom/android/okhttp/internal/DiskLruCache;->access$2300(Lcom/android/okhttp/internal/DiskLruCache;)Lcom/android/okhttp/internal/io/FileSystem;
-HPLcom/android/okhttp/internal/DiskLruCache;->access$2500(Lcom/android/okhttp/internal/DiskLruCache;Lcom/android/okhttp/internal/DiskLruCache$Editor;Z)V
-HPLcom/android/okhttp/internal/DiskLruCache;->access$2600(Lcom/android/okhttp/internal/DiskLruCache;)Ljava/io/File;
-HPLcom/android/okhttp/internal/DiskLruCache;->checkNotClosed()V
-HPLcom/android/okhttp/internal/DiskLruCache;->completeEdit(Lcom/android/okhttp/internal/DiskLruCache$Editor;Z)V
-HSPLcom/android/okhttp/internal/DiskLruCache;->create(Lcom/android/okhttp/internal/io/FileSystem;Ljava/io/File;IIJ)Lcom/android/okhttp/internal/DiskLruCache;
-HPLcom/android/okhttp/internal/DiskLruCache;->edit(Ljava/lang/String;)Lcom/android/okhttp/internal/DiskLruCache$Editor;
-HPLcom/android/okhttp/internal/DiskLruCache;->edit(Ljava/lang/String;J)Lcom/android/okhttp/internal/DiskLruCache$Editor;
-HPLcom/android/okhttp/internal/DiskLruCache;->get(Ljava/lang/String;)Lcom/android/okhttp/internal/DiskLruCache$Snapshot;
-HPLcom/android/okhttp/internal/DiskLruCache;->initialize()V
-HPLcom/android/okhttp/internal/DiskLruCache;->isClosed()Z
-HPLcom/android/okhttp/internal/DiskLruCache;->journalRebuildRequired()Z
-HPLcom/android/okhttp/internal/DiskLruCache;->newJournalWriter()Lcom/android/okhttp/okio/BufferedSink;
-HPLcom/android/okhttp/internal/DiskLruCache;->processJournal()V
-HPLcom/android/okhttp/internal/DiskLruCache;->readJournal()V
-HPLcom/android/okhttp/internal/DiskLruCache;->readJournalLine(Ljava/lang/String;)V
-HPLcom/android/okhttp/internal/DiskLruCache;->validateKey(Ljava/lang/String;)V
-HPLcom/android/okhttp/internal/FaultHidingSink;-><init>(Lcom/android/okhttp/okio/Sink;)V
-HPLcom/android/okhttp/internal/FaultHidingSink;->close()V
-HPLcom/android/okhttp/internal/FaultHidingSink;->flush()V
-HPLcom/android/okhttp/internal/FaultHidingSink;->write(Lcom/android/okhttp/okio/Buffer;J)V
 HSPLcom/android/okhttp/internal/OptionalMethod;->getMethod(Ljava/lang/Class;)Ljava/lang/reflect/Method;
 HSPLcom/android/okhttp/internal/OptionalMethod;->getPublicMethod(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
 HSPLcom/android/okhttp/internal/OptionalMethod;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
@@ -33615,51 +15427,30 @@
 HSPLcom/android/okhttp/internal/OptionalMethod;->invokeWithoutCheckedException(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/okhttp/internal/OptionalMethod;->isSupported(Ljava/lang/Object;)Z
 HSPLcom/android/okhttp/internal/Platform;->afterHandshake(Ljavax/net/ssl/SSLSocket;)V
-HSPLcom/android/okhttp/internal/Platform;->concatLengthPrefixed(Ljava/util/List;)[B
 HSPLcom/android/okhttp/internal/Platform;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V
 HSPLcom/android/okhttp/internal/Platform;->connectSocket(Ljava/net/Socket;Ljava/net/InetSocketAddress;I)V
-HSPLcom/android/okhttp/internal/Platform;->get()Lcom/android/okhttp/internal/Platform;
 HSPLcom/android/okhttp/internal/Platform;->getProtocolIds(Ljava/util/List;)[Ljava/lang/String;
 HSPLcom/android/okhttp/internal/Platform;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/Platform;->isPlatformSocket(Ljavax/net/ssl/SSLSocket;)Z
 HSPLcom/android/okhttp/internal/RouteDatabase;-><init>()V
 HSPLcom/android/okhttp/internal/RouteDatabase;->connected(Lcom/android/okhttp/Route;)V
-PLcom/android/okhttp/internal/RouteDatabase;->failed(Lcom/android/okhttp/Route;)V
+HSPLcom/android/okhttp/internal/RouteDatabase;->failed(Lcom/android/okhttp/Route;)V
 HSPLcom/android/okhttp/internal/RouteDatabase;->shouldPostpone(Lcom/android/okhttp/Route;)Z
 HSPLcom/android/okhttp/internal/Util$1;-><init>(Ljava/lang/String;Z)V
 HSPLcom/android/okhttp/internal/Util$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
 HSPLcom/android/okhttp/internal/Util;->checkOffsetAndCount(JJJ)V
-HPLcom/android/okhttp/internal/Util;->closeQuietly(Ljava/io/Closeable;)V
-HSPLcom/android/okhttp/internal/Util;->closeQuietly(Ljava/net/Socket;)V
-HSPLcom/android/okhttp/internal/Util;->discard(Lcom/android/okhttp/okio/Source;ILjava/util/concurrent/TimeUnit;)Z
 HSPLcom/android/okhttp/internal/Util;->equal(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLcom/android/okhttp/internal/Util;->hostHeader(Lcom/android/okhttp/HttpUrl;Z)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/Util;->immutableList(Ljava/util/List;)Ljava/util/List;
-HSPLcom/android/okhttp/internal/Util;->immutableList([Ljava/lang/Object;)Ljava/util/List;
-HPLcom/android/okhttp/internal/Util;->md5Hex(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/okhttp/internal/Util;->skipAll(Lcom/android/okhttp/okio/Source;ILjava/util/concurrent/TimeUnit;)Z
 HSPLcom/android/okhttp/internal/Util;->threadFactory(Ljava/lang/String;Z)Ljava/util/concurrent/ThreadFactory;
-HSPLcom/android/okhttp/internal/Util;->toHumanReadableAscii(Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/okhttp/internal/http/AuthenticatorAdapter;->authenticate(Ljava/net/Proxy;Lcom/android/okhttp/Response;)Lcom/android/okhttp/Request;
 HSPLcom/android/okhttp/internal/http/CacheStrategy$Factory;-><init>(JLcom/android/okhttp/Request;Lcom/android/okhttp/Response;)V
 HSPLcom/android/okhttp/internal/http/CacheStrategy$Factory;->get()Lcom/android/okhttp/internal/http/CacheStrategy;
 HSPLcom/android/okhttp/internal/http/CacheStrategy$Factory;->getCandidate()Lcom/android/okhttp/internal/http/CacheStrategy;
 HSPLcom/android/okhttp/internal/http/CacheStrategy;-><init>(Lcom/android/okhttp/Request;Lcom/android/okhttp/Response;)V
 HSPLcom/android/okhttp/internal/http/CacheStrategy;-><init>(Lcom/android/okhttp/Request;Lcom/android/okhttp/Response;Lcom/android/okhttp/internal/http/CacheStrategy$1;)V
-HPLcom/android/okhttp/internal/http/CacheStrategy;->isCacheable(Lcom/android/okhttp/Response;Lcom/android/okhttp/Request;)Z
-HSPLcom/android/okhttp/internal/http/HeaderParser;->parseSeconds(Ljava/lang/String;I)I
-HSPLcom/android/okhttp/internal/http/HeaderParser;->skipUntil(Ljava/lang/String;ILjava/lang/String;)I
-HSPLcom/android/okhttp/internal/http/HeaderParser;->skipWhitespace(Ljava/lang/String;I)I
 HSPLcom/android/okhttp/internal/http/Http1xStream$AbstractSource;-><init>(Lcom/android/okhttp/internal/http/Http1xStream;)V
 HSPLcom/android/okhttp/internal/http/Http1xStream$AbstractSource;-><init>(Lcom/android/okhttp/internal/http/Http1xStream;Lcom/android/okhttp/internal/http/Http1xStream$1;)V
 HSPLcom/android/okhttp/internal/http/Http1xStream$AbstractSource;->endOfInput()V
 HSPLcom/android/okhttp/internal/http/Http1xStream$AbstractSource;->timeout()Lcom/android/okhttp/okio/Timeout;
-HSPLcom/android/okhttp/internal/http/Http1xStream$AbstractSource;->unexpectedEndOfInput()V
-HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSink;-><init>(Lcom/android/okhttp/internal/http/Http1xStream;)V
-HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSink;-><init>(Lcom/android/okhttp/internal/http/Http1xStream;Lcom/android/okhttp/internal/http/Http1xStream$1;)V
-HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSink;->close()V
-HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSink;->flush()V
-HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSink;->write(Lcom/android/okhttp/okio/Buffer;J)V
 HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;-><init>(Lcom/android/okhttp/internal/http/Http1xStream;Lcom/android/okhttp/internal/http/HttpEngine;)V
 HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;->close()V
 HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;->read(Lcom/android/okhttp/okio/Buffer;J)J
@@ -33679,16 +15470,13 @@
 HSPLcom/android/okhttp/internal/http/Http1xStream;->access$502(Lcom/android/okhttp/internal/http/Http1xStream;I)I
 HSPLcom/android/okhttp/internal/http/Http1xStream;->access$600(Lcom/android/okhttp/internal/http/Http1xStream;)Lcom/android/okhttp/okio/BufferedSource;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->access$700(Lcom/android/okhttp/internal/http/Http1xStream;)Lcom/android/okhttp/internal/http/StreamAllocation;
-HSPLcom/android/okhttp/internal/http/Http1xStream;->cancel()V
 HSPLcom/android/okhttp/internal/http/Http1xStream;->createRequestBody(Lcom/android/okhttp/Request;J)Lcom/android/okhttp/okio/Sink;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->detachTimeout(Lcom/android/okhttp/okio/ForwardingTimeout;)V
 HSPLcom/android/okhttp/internal/http/Http1xStream;->finishRequest()V
 HSPLcom/android/okhttp/internal/http/Http1xStream;->getTransferStream(Lcom/android/okhttp/Response;)Lcom/android/okhttp/okio/Source;
-HSPLcom/android/okhttp/internal/http/Http1xStream;->newChunkedSink()Lcom/android/okhttp/okio/Sink;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->newChunkedSource(Lcom/android/okhttp/internal/http/HttpEngine;)Lcom/android/okhttp/okio/Source;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->newFixedLengthSink(J)Lcom/android/okhttp/okio/Sink;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->newFixedLengthSource(J)Lcom/android/okhttp/okio/Source;
-HSPLcom/android/okhttp/internal/http/Http1xStream;->newUnknownLengthSource()Lcom/android/okhttp/okio/Source;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->openResponseBody(Lcom/android/okhttp/Response;)Lcom/android/okhttp/ResponseBody;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->readHeaders()Lcom/android/okhttp/Headers;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->readResponse()Lcom/android/okhttp/Response$Builder;
@@ -33697,10 +15485,6 @@
 HSPLcom/android/okhttp/internal/http/Http1xStream;->writeRequest(Lcom/android/okhttp/Headers;Ljava/lang/String;)V
 HSPLcom/android/okhttp/internal/http/Http1xStream;->writeRequestBody(Lcom/android/okhttp/internal/http/RetryableSink;)V
 HSPLcom/android/okhttp/internal/http/Http1xStream;->writeRequestHeaders(Lcom/android/okhttp/Request;)V
-HSPLcom/android/okhttp/internal/http/HttpDate$1;->initialValue()Ljava/lang/Object;
-HSPLcom/android/okhttp/internal/http/HttpDate$1;->initialValue()Ljava/text/DateFormat;
-HSPLcom/android/okhttp/internal/http/HttpDate;->access$000()Ljava/util/TimeZone;
-HSPLcom/android/okhttp/internal/http/HttpDate;->format(Ljava/util/Date;)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/http/HttpEngine;-><init>(Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/Request;ZZZLcom/android/okhttp/internal/http/StreamAllocation;Lcom/android/okhttp/internal/http/RetryableSink;Lcom/android/okhttp/Response;)V
 HSPLcom/android/okhttp/internal/http/HttpEngine;->cacheWritingResponse(Lcom/android/okhttp/internal/http/CacheRequest;Lcom/android/okhttp/Response;)Lcom/android/okhttp/Response;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->cancel()V
@@ -33710,7 +15494,6 @@
 HSPLcom/android/okhttp/internal/http/HttpEngine;->followUpRequest()Lcom/android/okhttp/Request;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->getBufferedRequestBody()Lcom/android/okhttp/okio/BufferedSink;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->getConnection()Lcom/android/okhttp/Connection;
-HSPLcom/android/okhttp/internal/http/HttpEngine;->getRequest()Lcom/android/okhttp/Request;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->getRequestBody()Lcom/android/okhttp/okio/Sink;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->getResponse()Lcom/android/okhttp/Response;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->hasBody(Lcom/android/okhttp/Response;)Z
@@ -33722,32 +15505,18 @@
 HSPLcom/android/okhttp/internal/http/HttpEngine;->readResponse()V
 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;
-PLcom/android/okhttp/internal/http/HttpEngine;->recover(Ljava/io/IOException;)Lcom/android/okhttp/internal/http/HttpEngine;
-HPLcom/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;->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
-HPLcom/android/okhttp/internal/http/HttpMethod;->invalidatesCache(Ljava/lang/String;)Z
 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
 HSPLcom/android/okhttp/internal/http/OkHeaders$1;->compare(Ljava/lang/String;Ljava/lang/String;)I
-HSPLcom/android/okhttp/internal/http/OkHeaders;->addCookies(Lcom/android/okhttp/Request$Builder;Ljava/util/Map;)V
-HPLcom/android/okhttp/internal/http/OkHeaders;->buildCookieHeader(Ljava/util/List;)Ljava/lang/String;
 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
-HPLcom/android/okhttp/internal/http/OkHeaders;->hasVaryAll(Lcom/android/okhttp/Headers;)Z
-HPLcom/android/okhttp/internal/http/OkHeaders;->hasVaryAll(Lcom/android/okhttp/Response;)Z
-HPLcom/android/okhttp/internal/http/OkHeaders;->parseChallenges(Lcom/android/okhttp/Headers;Ljava/lang/String;)Ljava/util/List;
-HPLcom/android/okhttp/internal/http/OkHeaders;->processAuthHeader(Lcom/android/okhttp/Authenticator;Lcom/android/okhttp/Response;Ljava/net/Proxy;)Lcom/android/okhttp/Request;
-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;
-HPLcom/android/okhttp/internal/http/OkHeaders;->varyFields(Lcom/android/okhttp/Headers;)Ljava/util/Set;
-HPLcom/android/okhttp/internal/http/OkHeaders;->varyHeaders(Lcom/android/okhttp/Headers;Lcom/android/okhttp/Headers;)Lcom/android/okhttp/Headers;
-HPLcom/android/okhttp/internal/http/OkHeaders;->varyHeaders(Lcom/android/okhttp/Response;)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;
@@ -33763,14 +15532,13 @@
 HSPLcom/android/okhttp/internal/http/RouteException;-><init>(Ljava/io/IOException;)V
 HSPLcom/android/okhttp/internal/http/RouteException;->getLastConnectException()Ljava/io/IOException;
 HSPLcom/android/okhttp/internal/http/RouteSelector;-><init>(Lcom/android/okhttp/Address;Lcom/android/okhttp/internal/RouteDatabase;)V
-PLcom/android/okhttp/internal/http/RouteSelector;->connectFailed(Lcom/android/okhttp/Route;Ljava/io/IOException;)V
+HSPLcom/android/okhttp/internal/http/RouteSelector;->connectFailed(Lcom/android/okhttp/Route;Ljava/io/IOException;)V
 HSPLcom/android/okhttp/internal/http/RouteSelector;->hasNext()Z
 HSPLcom/android/okhttp/internal/http/RouteSelector;->hasNextInetSocketAddress()Z
 HSPLcom/android/okhttp/internal/http/RouteSelector;->hasNextPostponed()Z
 HSPLcom/android/okhttp/internal/http/RouteSelector;->hasNextProxy()Z
 HSPLcom/android/okhttp/internal/http/RouteSelector;->next()Lcom/android/okhttp/Route;
 HSPLcom/android/okhttp/internal/http/RouteSelector;->nextInetSocketAddress()Ljava/net/InetSocketAddress;
-PLcom/android/okhttp/internal/http/RouteSelector;->nextPostponed()Lcom/android/okhttp/Route;
 HSPLcom/android/okhttp/internal/http/RouteSelector;->nextProxy()Ljava/net/Proxy;
 HSPLcom/android/okhttp/internal/http/RouteSelector;->resetNextInetSocketAddress(Ljava/net/Proxy;)V
 HSPLcom/android/okhttp/internal/http/RouteSelector;->resetNextProxy(Lcom/android/okhttp/HttpUrl;Ljava/net/Proxy;)V
@@ -33783,51 +15551,36 @@
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->cancel()V
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->connection()Lcom/android/okhttp/internal/io/RealConnection;
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->connectionFailed()V
-HPLcom/android/okhttp/internal/http/StreamAllocation;->connectionFailed(Ljava/io/IOException;)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;->findConnection(IIIZ)Lcom/android/okhttp/internal/io/RealConnection;
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->findHealthyConnection(IIIZZ)Lcom/android/okhttp/internal/io/RealConnection;
-PLcom/android/okhttp/internal/http/StreamAllocation;->isRecoverable(Lcom/android/okhttp/internal/http/RouteException;)Z
-PLcom/android/okhttp/internal/http/StreamAllocation;->isRecoverable(Ljava/io/IOException;)Z
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->newStream(IIIZZ)Lcom/android/okhttp/internal/http/HttpStream;
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->noNewStreams()V
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->recover(Lcom/android/okhttp/internal/http/RouteException;)Z
-PLcom/android/okhttp/internal/http/StreamAllocation;->recover(Ljava/io/IOException;Lcom/android/okhttp/okio/Sink;)Z
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->release()V
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->release(Lcom/android/okhttp/internal/io/RealConnection;)V
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->routeDatabase()Lcom/android/okhttp/internal/RouteDatabase;
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->streamFinished(Lcom/android/okhttp/internal/http/HttpStream;)V
-PLcom/android/okhttp/internal/http/StreamAllocation;->toString()Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;-><init>(Ljava/net/HttpURLConnection;)V
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->addRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->connect()V
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->disconnect()V
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getContentEncoding()Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getContentLength()I
-HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getContentType()Ljava/lang/String;
-HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getErrorStream()Ljava/io/InputStream;
-HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getHeaderField(I)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getHeaderField(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getHeaderFieldInt(Ljava/lang/String;I)I
-HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getHeaderFieldKey(I)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getHeaderFields()Ljava/util/Map;
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getInputStream()Ljava/io/InputStream;
-HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getLastModified()J
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getOutputStream()Ljava/io/OutputStream;
-HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getRequestMethod()Ljava/lang/String;
-HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getRequestProperties()Ljava/util/Map;
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getRequestProperty(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getResponseCode()I
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getResponseMessage()Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getURL()Ljava/net/URL;
-HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setAllowUserInteraction(Z)V
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setChunkedStreamingMode(I)V
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setConnectTimeout(I)V
-HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setDefaultUseCaches(Z)V
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setDoInput(Z)V
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setDoOutput(Z)V
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setFixedLengthStreamingMode(I)V
-HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setIfModifiedSince(J)V
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setInstanceFollowRedirects(Z)V
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setReadTimeout(I)V
 HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setRequestMethod(Ljava/lang/String;)V
@@ -33840,26 +15593,20 @@
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->defaultUserAgent()Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->disconnect()V
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->execute(Z)Z
-HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getErrorStream()Ljava/io/InputStream;
-HPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getHeaderField(I)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getHeaderField(Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getHeaderFieldKey(I)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getHeaderFields()Ljava/util/Map;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getHeaders()Lcom/android/okhttp/Headers;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getInputStream()Ljava/io/InputStream;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getOutputStream()Ljava/io/OutputStream;
-HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getRequestProperties()Ljava/util/Map;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getRequestProperty(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getResponse()Lcom/android/okhttp/internal/http/HttpEngine;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->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;->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
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->setFixedLengthStreamingMode(J)V
-HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->setIfModifiedSince(J)V
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->setInstanceFollowRedirects(Z)V
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->setReadTimeout(I)V
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->setRequestMethod(Ljava/lang/String;)V
@@ -33871,47 +15618,27 @@
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->disconnect()V
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getContentEncoding()Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getContentLength()I
-HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getContentType()Ljava/lang/String;
-HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getErrorStream()Ljava/io/InputStream;
-HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getHeaderField(I)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getHeaderField(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getHeaderFieldInt(Ljava/lang/String;I)I
-HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getHeaderFieldKey(I)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getHeaderFields()Ljava/util/Map;
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getInputStream()Ljava/io/InputStream;
-HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getLastModified()J
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getOutputStream()Ljava/io/OutputStream;
-HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getRequestMethod()Ljava/lang/String;
-HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getRequestProperties()Ljava/util/Map;
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getRequestProperty(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getResponseCode()I
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getResponseMessage()Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getURL()Ljava/net/URL;
-HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setAllowUserInteraction(Z)V
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setChunkedStreamingMode(I)V
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setConnectTimeout(I)V
-HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setDefaultUseCaches(Z)V
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setDoInput(Z)V
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setDoOutput(Z)V
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setFixedLengthStreamingMode(I)V
-HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setHostnameVerifier(Ljavax/net/ssl/HostnameVerifier;)V
-HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setIfModifiedSince(J)V
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setInstanceFollowRedirects(Z)V
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setReadTimeout(I)V
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setRequestMethod(Ljava/lang/String;)V
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setSSLSocketFactory(Ljavax/net/ssl/SSLSocketFactory;)V
 HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setUseCaches(Z)V
-HPLcom/android/okhttp/internal/io/FileSystem$1;->appendingSink(Ljava/io/File;)Lcom/android/okhttp/okio/Sink;
-HPLcom/android/okhttp/internal/io/FileSystem$1;->delete(Ljava/io/File;)V
-HPLcom/android/okhttp/internal/io/FileSystem$1;->exists(Ljava/io/File;)Z
-HPLcom/android/okhttp/internal/io/FileSystem$1;->rename(Ljava/io/File;Ljava/io/File;)V
-HPLcom/android/okhttp/internal/io/FileSystem$1;->sink(Ljava/io/File;)Lcom/android/okhttp/okio/Sink;
-HPLcom/android/okhttp/internal/io/FileSystem$1;->size(Ljava/io/File;)J
-HPLcom/android/okhttp/internal/io/FileSystem$1;->source(Ljava/io/File;)Lcom/android/okhttp/okio/Source;
 HSPLcom/android/okhttp/internal/io/RealConnection;-><init>(Lcom/android/okhttp/Route;)V
 HSPLcom/android/okhttp/internal/io/RealConnection;->allocationLimit()I
-HSPLcom/android/okhttp/internal/io/RealConnection;->cancel()V
 HSPLcom/android/okhttp/internal/io/RealConnection;->connect(IIILjava/util/List;Z)V
 HSPLcom/android/okhttp/internal/io/RealConnection;->connectSocket(IIILcom/android/okhttp/internal/ConnectionSpecSelector;)V
 HSPLcom/android/okhttp/internal/io/RealConnection;->connectTls(IILcom/android/okhttp/internal/ConnectionSpecSelector;)V
@@ -33919,21 +15646,14 @@
 HSPLcom/android/okhttp/internal/io/RealConnection;->getRoute()Lcom/android/okhttp/Route;
 HSPLcom/android/okhttp/internal/io/RealConnection;->getSocket()Ljava/net/Socket;
 HSPLcom/android/okhttp/internal/io/RealConnection;->isHealthy(Z)Z
-HSPLcom/android/okhttp/internal/tls/OkHostnameVerifier;->getSubjectAltNames(Ljava/security/cert/X509Certificate;I)Ljava/util/List;
 HSPLcom/android/okhttp/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)Z
 HSPLcom/android/okhttp/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z
 HSPLcom/android/okhttp/internal/tls/OkHostnameVerifier;->verifyAsIpAddress(Ljava/lang/String;)Z
 HSPLcom/android/okhttp/internal/tls/OkHostnameVerifier;->verifyHostName(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/okhttp/internal/tls/OkHostnameVerifier;->verifyHostName(Ljava/lang/String;Ljava/security/cert/X509Certificate;)Z
-HPLcom/android/okhttp/internalandroidapi/HttpURLConnectionFactory$DnsAdapter;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/okhttp/internalandroidapi/HttpURLConnectionFactory$DnsAdapter;->hashCode()I
-HSPLcom/android/okhttp/internalandroidapi/HttpURLConnectionFactory$DnsAdapter;->lookup(Ljava/lang/String;)Ljava/util/List;
-HSPLcom/android/okhttp/internalandroidapi/HttpURLConnectionFactory;->internalOpenConnection(Ljava/net/URL;Ljavax/net/SocketFactory;Ljava/net/Proxy;)Ljava/net/URLConnection;
-HSPLcom/android/okhttp/okio/AsyncTimeout$1;-><init>(Lcom/android/okhttp/okio/AsyncTimeout;Lcom/android/okhttp/okio/Sink;)V
 HSPLcom/android/okhttp/okio/AsyncTimeout$1;->flush()V
 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;->timeout()Lcom/android/okhttp/okio/Timeout;
 HSPLcom/android/okhttp/okio/AsyncTimeout$Watchdog;-><init>()V
@@ -33948,8 +15668,6 @@
 HSPLcom/android/okhttp/okio/AsyncTimeout;->exit(Z)V
 HSPLcom/android/okhttp/okio/AsyncTimeout;->remainingNanos(J)J
 HSPLcom/android/okhttp/okio/AsyncTimeout;->scheduleTimeout(Lcom/android/okhttp/okio/AsyncTimeout;JZ)V
-HSPLcom/android/okhttp/okio/AsyncTimeout;->sink(Lcom/android/okhttp/okio/Sink;)Lcom/android/okhttp/okio/Sink;
-HSPLcom/android/okhttp/okio/AsyncTimeout;->source(Lcom/android/okhttp/okio/Source;)Lcom/android/okhttp/okio/Source;
 HSPLcom/android/okhttp/okio/Buffer;-><init>()V
 HSPLcom/android/okhttp/okio/Buffer;->clear()V
 HSPLcom/android/okhttp/okio/Buffer;->completeSegmentByteCount()J
@@ -33962,7 +15680,6 @@
 HSPLcom/android/okhttp/okio/Buffer;->readByte()B
 HSPLcom/android/okhttp/okio/Buffer;->readByteArray()[B
 HSPLcom/android/okhttp/okio/Buffer;->readByteArray(J)[B
-PLcom/android/okhttp/okio/Buffer;->readByteString()Lcom/android/okhttp/okio/ByteString;
 HSPLcom/android/okhttp/okio/Buffer;->readFully([B)V
 HSPLcom/android/okhttp/okio/Buffer;->readHexadecimalUnsignedLong()J
 HSPLcom/android/okhttp/okio/Buffer;->readInt()I
@@ -33978,19 +15695,9 @@
 HSPLcom/android/okhttp/okio/Buffer;->write(Lcom/android/okhttp/okio/Buffer;J)V
 HSPLcom/android/okhttp/okio/Buffer;->write([BII)Lcom/android/okhttp/okio/Buffer;
 HSPLcom/android/okhttp/okio/Buffer;->writeByte(I)Lcom/android/okhttp/okio/Buffer;
-HPLcom/android/okhttp/okio/Buffer;->writeDecimalLong(J)Lcom/android/okhttp/okio/Buffer;
-HSPLcom/android/okhttp/okio/Buffer;->writeHexadecimalUnsignedLong(J)Lcom/android/okhttp/okio/Buffer;
 HSPLcom/android/okhttp/okio/Buffer;->writeUtf8(Ljava/lang/String;)Lcom/android/okhttp/okio/Buffer;
 HSPLcom/android/okhttp/okio/Buffer;->writeUtf8(Ljava/lang/String;II)Lcom/android/okhttp/okio/Buffer;
 HSPLcom/android/okhttp/okio/Buffer;->writeUtf8CodePoint(I)Lcom/android/okhttp/okio/Buffer;
-PLcom/android/okhttp/okio/ByteString;-><init>([B)V
-HPLcom/android/okhttp/okio/ByteString;->base64()Ljava/lang/String;
-PLcom/android/okhttp/okio/ByteString;->hex()Ljava/lang/String;
-HPLcom/android/okhttp/okio/ByteString;->of([B)Lcom/android/okhttp/okio/ByteString;
-HPLcom/android/okhttp/okio/ForwardingSink;-><init>(Lcom/android/okhttp/okio/Sink;)V
-HPLcom/android/okhttp/okio/ForwardingSink;->close()V
-HPLcom/android/okhttp/okio/ForwardingSink;->flush()V
-HPLcom/android/okhttp/okio/ForwardingSink;->write(Lcom/android/okhttp/okio/Buffer;J)V
 HSPLcom/android/okhttp/okio/ForwardingTimeout;-><init>(Lcom/android/okhttp/okio/Timeout;)V
 HSPLcom/android/okhttp/okio/ForwardingTimeout;->clearDeadline()Lcom/android/okhttp/okio/Timeout;
 HSPLcom/android/okhttp/okio/ForwardingTimeout;->deadlineNanoTime(J)Lcom/android/okhttp/okio/Timeout;
@@ -34009,54 +15716,27 @@
 HSPLcom/android/okhttp/okio/InflaterSource;->read(Lcom/android/okhttp/okio/Buffer;J)J
 HSPLcom/android/okhttp/okio/InflaterSource;->refill()Z
 HSPLcom/android/okhttp/okio/InflaterSource;->releaseInflatedBytes()V
-HSPLcom/android/okhttp/okio/Okio$1;-><init>(Lcom/android/okhttp/okio/Timeout;Ljava/io/OutputStream;)V
-HPLcom/android/okhttp/okio/Okio$1;->close()V
 HSPLcom/android/okhttp/okio/Okio$1;->flush()V
 HSPLcom/android/okhttp/okio/Okio$1;->write(Lcom/android/okhttp/okio/Buffer;J)V
-HSPLcom/android/okhttp/okio/Okio$2;-><init>(Lcom/android/okhttp/okio/Timeout;Ljava/io/InputStream;)V
-HPLcom/android/okhttp/okio/Okio$2;->close()V
 HSPLcom/android/okhttp/okio/Okio$2;->read(Lcom/android/okhttp/okio/Buffer;J)J
-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
-HPLcom/android/okhttp/okio/Okio;->appendingSink(Ljava/io/File;)Lcom/android/okhttp/okio/Sink;
-HSPLcom/android/okhttp/okio/Okio;->buffer(Lcom/android/okhttp/okio/Sink;)Lcom/android/okhttp/okio/BufferedSink;
-HSPLcom/android/okhttp/okio/Okio;->buffer(Lcom/android/okhttp/okio/Source;)Lcom/android/okhttp/okio/BufferedSource;
-HPLcom/android/okhttp/okio/Okio;->sink(Ljava/io/File;)Lcom/android/okhttp/okio/Sink;
-HPLcom/android/okhttp/okio/Okio;->sink(Ljava/io/OutputStream;)Lcom/android/okhttp/okio/Sink;
-HSPLcom/android/okhttp/okio/Okio;->sink(Ljava/io/OutputStream;Lcom/android/okhttp/okio/Timeout;)Lcom/android/okhttp/okio/Sink;
-HSPLcom/android/okhttp/okio/Okio;->sink(Ljava/net/Socket;)Lcom/android/okhttp/okio/Sink;
-HPLcom/android/okhttp/okio/Okio;->source(Ljava/io/File;)Lcom/android/okhttp/okio/Source;
-HPLcom/android/okhttp/okio/Okio;->source(Ljava/io/InputStream;)Lcom/android/okhttp/okio/Source;
-HSPLcom/android/okhttp/okio/Okio;->source(Ljava/io/InputStream;Lcom/android/okhttp/okio/Timeout;)Lcom/android/okhttp/okio/Source;
-HSPLcom/android/okhttp/okio/Okio;->source(Ljava/net/Socket;)Lcom/android/okhttp/okio/Source;
-HSPLcom/android/okhttp/okio/Okio;->timeout(Ljava/net/Socket;)Lcom/android/okhttp/okio/AsyncTimeout;
 HSPLcom/android/okhttp/okio/RealBufferedSink$1;-><init>(Lcom/android/okhttp/okio/RealBufferedSink;)V
 HSPLcom/android/okhttp/okio/RealBufferedSink$1;->close()V
 HSPLcom/android/okhttp/okio/RealBufferedSink$1;->flush()V
 HSPLcom/android/okhttp/okio/RealBufferedSink$1;->write([BII)V
-HSPLcom/android/okhttp/okio/RealBufferedSink;-><init>(Lcom/android/okhttp/okio/Sink;)V
-HSPLcom/android/okhttp/okio/RealBufferedSink;-><init>(Lcom/android/okhttp/okio/Sink;Lcom/android/okhttp/okio/Buffer;)V
 HSPLcom/android/okhttp/okio/RealBufferedSink;->access$000(Lcom/android/okhttp/okio/RealBufferedSink;)Z
 HSPLcom/android/okhttp/okio/RealBufferedSink;->buffer()Lcom/android/okhttp/okio/Buffer;
 HSPLcom/android/okhttp/okio/RealBufferedSink;->close()V
-HSPLcom/android/okhttp/okio/RealBufferedSink;->emit()Lcom/android/okhttp/okio/BufferedSink;
 HSPLcom/android/okhttp/okio/RealBufferedSink;->emitCompleteSegments()Lcom/android/okhttp/okio/BufferedSink;
 HSPLcom/android/okhttp/okio/RealBufferedSink;->flush()V
 HSPLcom/android/okhttp/okio/RealBufferedSink;->outputStream()Ljava/io/OutputStream;
 HSPLcom/android/okhttp/okio/RealBufferedSink;->timeout()Lcom/android/okhttp/okio/Timeout;
 HSPLcom/android/okhttp/okio/RealBufferedSink;->write(Lcom/android/okhttp/okio/Buffer;J)V
-HPLcom/android/okhttp/okio/RealBufferedSink;->writeByte(I)Lcom/android/okhttp/okio/BufferedSink;
-HPLcom/android/okhttp/okio/RealBufferedSink;->writeDecimalLong(J)Lcom/android/okhttp/okio/BufferedSink;
-HSPLcom/android/okhttp/okio/RealBufferedSink;->writeHexadecimalUnsignedLong(J)Lcom/android/okhttp/okio/BufferedSink;
 HSPLcom/android/okhttp/okio/RealBufferedSink;->writeUtf8(Ljava/lang/String;)Lcom/android/okhttp/okio/BufferedSink;
 HSPLcom/android/okhttp/okio/RealBufferedSource$1;-><init>(Lcom/android/okhttp/okio/RealBufferedSource;)V
 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;-><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
@@ -34092,884 +15772,79 @@
 HSPLcom/android/okhttp/okio/Timeout;->throwIfReached()V
 HSPLcom/android/okhttp/okio/Timeout;->timeout(JLjava/util/concurrent/TimeUnit;)Lcom/android/okhttp/okio/Timeout;
 HSPLcom/android/okhttp/okio/Timeout;->timeoutNanos()J
-HSPLcom/android/okhttp/okio/Util;->checkOffsetAndCount(JJJ)V
 HSPLcom/android/okhttp/okio/Util;->reverseBytesInt(I)I
-HPLcom/android/okhttp/okio/Util;->sneakyRethrow(Ljava/lang/Throwable;)V
-HPLcom/android/okhttp/okio/Util;->sneakyThrow2(Ljava/lang/Throwable;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1BitString;-><init>([BI)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1BitString;->derForm([BI)[B
-HSPLcom/android/org/bouncycastle/asn1/ASN1BitString;->fromInputStream(ILjava/io/InputStream;)Lcom/android/org/bouncycastle/asn1/ASN1BitString;
-HPLcom/android/org/bouncycastle/asn1/ASN1BitString;->getBytes()[B
-HSPLcom/android/org/bouncycastle/asn1/ASN1BitString;->getOctets()[B
-HSPLcom/android/org/bouncycastle/asn1/ASN1BitString;->getPadBits()I
-HSPLcom/android/org/bouncycastle/asn1/ASN1BitString;->toDERObject()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/ASN1EncodableVector;-><init>()V
-HSPLcom/android/org/bouncycastle/asn1/ASN1EncodableVector;->add(Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1EncodableVector;->get(I)Lcom/android/org/bouncycastle/asn1/ASN1Encodable;
-HSPLcom/android/org/bouncycastle/asn1/ASN1EncodableVector;->size()I
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;-><init>(Ljava/io/InputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;-><init>(Ljava/io/InputStream;I)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;-><init>(Ljava/io/InputStream;IZ)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;-><init>([B)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;->buildDEREncodableVector(Lcom/android/org/bouncycastle/asn1/DefiniteLengthInputStream;)Lcom/android/org/bouncycastle/asn1/ASN1EncodableVector;
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;->buildEncodableVector()Lcom/android/org/bouncycastle/asn1/ASN1EncodableVector;
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;->buildObject(III)Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;->createPrimitiveDERObject(ILcom/android/org/bouncycastle/asn1/DefiniteLengthInputStream;[[B)Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HPLcom/android/org/bouncycastle/asn1/ASN1InputStream;->getBMPCharBuffer(Lcom/android/org/bouncycastle/asn1/DefiniteLengthInputStream;)[C
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;->getBuffer(Lcom/android/org/bouncycastle/asn1/DefiniteLengthInputStream;[[B)[B
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;->readLength()I
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;->readLength(Ljava/io/InputStream;I)I
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;->readObject()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/ASN1InputStream;->readTagNumber(Ljava/io/InputStream;I)I
-HSPLcom/android/org/bouncycastle/asn1/ASN1Integer;-><init>(J)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1Integer;-><init>(Ljava/math/BigInteger;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1Integer;-><init>([BZ)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1Integer;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1Integer;->encodedLength()I
-HSPLcom/android/org/bouncycastle/asn1/ASN1Integer;->getInstance(Lcom/android/org/bouncycastle/asn1/ASN1TaggedObject;Z)Lcom/android/org/bouncycastle/asn1/ASN1Integer;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Integer;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/ASN1Integer;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Integer;->getPositiveValue()Ljava/math/BigInteger;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Integer;->getValue()Ljava/math/BigInteger;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Integer;->isMalformed([B)Z
-HSPLcom/android/org/bouncycastle/asn1/ASN1Null;->asn1Equals(Lcom/android/org/bouncycastle/asn1/ASN1Primitive;)Z
-HSPLcom/android/org/bouncycastle/asn1/ASN1Object;-><init>()V
-HPLcom/android/org/bouncycastle/asn1/ASN1Object;->getEncoded()[B
-HSPLcom/android/org/bouncycastle/asn1/ASN1Object;->getEncoded(Ljava/lang/String;)[B
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle;-><init>([B)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle;->hashCode()I
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;-><init>(Ljava/lang/String;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;-><init>([B)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->asn1Equals(Lcom/android/org/bouncycastle/asn1/ASN1Primitive;)Z
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->doOutput(Ljava/io/ByteArrayOutputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->encodedLength()I
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->fromOctetString([B)Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->getBody()[B
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->getId()Ljava/lang/String;
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->hashCode()I
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->intern()Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->isValidBranchID(Ljava/lang/String;I)Z
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->isValidIdentifier(Ljava/lang/String;)Z
-HPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->on(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;)Z
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->toString()Ljava/lang/String;
-HSPLcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;->writeField(Ljava/io/ByteArrayOutputStream;J)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1OutputStream;-><init>(Ljava/io/OutputStream;)V
-HPLcom/android/org/bouncycastle/asn1/ASN1OutputStream;->getDERSubStream()Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;
-HSPLcom/android/org/bouncycastle/asn1/ASN1OutputStream;->write(I)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1OutputStream;->write([B)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1OutputStream;->writeEncoded(I[B)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1OutputStream;->writeLength(I)V
-HPLcom/android/org/bouncycastle/asn1/ASN1OutputStream;->writeObject(Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1OutputStream;->writeTag(II)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1Primitive;-><init>()V
-HSPLcom/android/org/bouncycastle/asn1/ASN1Primitive;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/org/bouncycastle/asn1/ASN1Primitive;->fromByteArray([B)Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Primitive;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Primitive;->toDERObject()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Sequence;-><init>()V
-HSPLcom/android/org/bouncycastle/asn1/ASN1Sequence;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1EncodableVector;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1Sequence;-><init>([Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1Sequence;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/ASN1Sequence;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Sequence;->getObjectAt(I)Lcom/android/org/bouncycastle/asn1/ASN1Encodable;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Sequence;->getObjects()Ljava/util/Enumeration;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Sequence;->size()I
-HSPLcom/android/org/bouncycastle/asn1/ASN1Sequence;->toDERObject()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Set;-><init>()V
-HSPLcom/android/org/bouncycastle/asn1/ASN1Set;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1EncodableVector;Z)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1Set;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/ASN1Set;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Set;->getObjectAt(I)Lcom/android/org/bouncycastle/asn1/ASN1Encodable;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Set;->getObjects()Ljava/util/Enumeration;
-HSPLcom/android/org/bouncycastle/asn1/ASN1Set;->size()I
-HSPLcom/android/org/bouncycastle/asn1/ASN1Set;->sort()V
-HSPLcom/android/org/bouncycastle/asn1/ASN1Set;->toDERObject()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/ASN1StreamParser;-><init>(Ljava/io/InputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1StreamParser;-><init>(Ljava/io/InputStream;I)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1StreamParser;->readObject()Lcom/android/org/bouncycastle/asn1/ASN1Encodable;
-HSPLcom/android/org/bouncycastle/asn1/ASN1StreamParser;->readTaggedObject(ZI)Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/ASN1StreamParser;->readVector()Lcom/android/org/bouncycastle/asn1/ASN1EncodableVector;
-HSPLcom/android/org/bouncycastle/asn1/ASN1StreamParser;->set00Check(Z)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1TaggedObject;-><init>(ZILcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1TaggedObject;->getObject()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/ASN1TaggedObject;->toDERObject()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/ASN1UTCTime;-><init>(Ljava/lang/String;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1UTCTime;-><init>([B)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1UTCTime;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/ASN1UTCTime;->encodedLength()I
-HSPLcom/android/org/bouncycastle/asn1/ASN1UTCTime;->getDate()Ljava/util/Date;
-HSPLcom/android/org/bouncycastle/asn1/ASN1UTCTime;->getTime()Ljava/lang/String;
-HSPLcom/android/org/bouncycastle/asn1/DERBitString;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
-HSPLcom/android/org/bouncycastle/asn1/DERBitString;-><init>([B)V
-HSPLcom/android/org/bouncycastle/asn1/DERBitString;-><init>([BI)V
-HSPLcom/android/org/bouncycastle/asn1/DERBitString;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/DERBitString;->encodedLength()I
-HSPLcom/android/org/bouncycastle/asn1/DERBitString;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/DERBitString;
-HSPLcom/android/org/bouncycastle/asn1/DERFactory;->createSequence(Lcom/android/org/bouncycastle/asn1/ASN1EncodableVector;)Lcom/android/org/bouncycastle/asn1/ASN1Sequence;
-HSPLcom/android/org/bouncycastle/asn1/DERFactory;->createSet(Lcom/android/org/bouncycastle/asn1/ASN1EncodableVector;)Lcom/android/org/bouncycastle/asn1/ASN1Set;
-HSPLcom/android/org/bouncycastle/asn1/DERNull;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/DERNull;->encodedLength()I
-HSPLcom/android/org/bouncycastle/asn1/DEROutputStream;-><init>(Ljava/io/OutputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/DEROutputStream;->getDERSubStream()Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;
-HSPLcom/android/org/bouncycastle/asn1/DEROutputStream;->writeObject(Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
-HSPLcom/android/org/bouncycastle/asn1/DERPrintableString;-><init>([B)V
-HSPLcom/android/org/bouncycastle/asn1/DERPrintableString;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/DERPrintableString;->encodedLength()I
-HSPLcom/android/org/bouncycastle/asn1/DERPrintableString;->getString()Ljava/lang/String;
-HSPLcom/android/org/bouncycastle/asn1/DERSequence;-><init>()V
-HSPLcom/android/org/bouncycastle/asn1/DERSequence;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1EncodableVector;)V
-HSPLcom/android/org/bouncycastle/asn1/DERSequence;-><init>([Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
-HSPLcom/android/org/bouncycastle/asn1/DERSequence;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/DERSequence;->encodedLength()I
-HSPLcom/android/org/bouncycastle/asn1/DERSequence;->getBodyLength()I
-HSPLcom/android/org/bouncycastle/asn1/DERSet;-><init>()V
-HSPLcom/android/org/bouncycastle/asn1/DERSet;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/DERSet;->encodedLength()I
-HSPLcom/android/org/bouncycastle/asn1/DERSet;->getBodyLength()I
-HSPLcom/android/org/bouncycastle/asn1/DERTaggedObject;-><clinit>()V
-HSPLcom/android/org/bouncycastle/asn1/DERTaggedObject;-><init>(ZILcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
-HSPLcom/android/org/bouncycastle/asn1/DERTaggedObject;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
-HSPLcom/android/org/bouncycastle/asn1/DERTaggedObject;->encodedLength()I
-HSPLcom/android/org/bouncycastle/asn1/DERUTCTime;-><init>(Ljava/lang/String;)V
-HSPLcom/android/org/bouncycastle/asn1/DLSequence;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1EncodableVector;)V
-HSPLcom/android/org/bouncycastle/asn1/DLSet;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1EncodableVector;)V
-HSPLcom/android/org/bouncycastle/asn1/DateUtil;-><clinit>()V
-HSPLcom/android/org/bouncycastle/asn1/DateUtil;->epochAdjust(Ljava/util/Date;)Ljava/util/Date;
-HSPLcom/android/org/bouncycastle/asn1/DateUtil;->forEN()Ljava/util/Locale;
-HSPLcom/android/org/bouncycastle/asn1/DateUtil;->longValueOf(J)Ljava/lang/Long;
-HSPLcom/android/org/bouncycastle/asn1/DefiniteLengthInputStream;-><init>(Ljava/io/InputStream;I)V
-HSPLcom/android/org/bouncycastle/asn1/DefiniteLengthInputStream;->getRemaining()I
-HSPLcom/android/org/bouncycastle/asn1/DefiniteLengthInputStream;->read()I
-HSPLcom/android/org/bouncycastle/asn1/DefiniteLengthInputStream;->read([BII)I
-HSPLcom/android/org/bouncycastle/asn1/DefiniteLengthInputStream;->toByteArray()[B
-HSPLcom/android/org/bouncycastle/asn1/LimitedInputStream;-><init>(Ljava/io/InputStream;I)V
-HSPLcom/android/org/bouncycastle/asn1/LimitedInputStream;->setParentEofDetect(Z)V
-HSPLcom/android/org/bouncycastle/asn1/OIDTokenizer;-><init>(Ljava/lang/String;)V
-HSPLcom/android/org/bouncycastle/asn1/OIDTokenizer;->hasMoreTokens()Z
-HSPLcom/android/org/bouncycastle/asn1/OIDTokenizer;->nextToken()Ljava/lang/String;
-HSPLcom/android/org/bouncycastle/asn1/StreamUtil;->calculateBodyLength(I)I
-HSPLcom/android/org/bouncycastle/asn1/StreamUtil;->calculateTagLength(I)I
-HSPLcom/android/org/bouncycastle/asn1/StreamUtil;->findLimit(Ljava/io/InputStream;)I
-HSPLcom/android/org/bouncycastle/asn1/pkcs/RSASSAPSSparams;-><clinit>()V
-HSPLcom/android/org/bouncycastle/asn1/pkcs/RSASSAPSSparams;-><init>(Lcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;Lcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;Lcom/android/org/bouncycastle/asn1/ASN1Integer;Lcom/android/org/bouncycastle/asn1/ASN1Integer;)V
-HSPLcom/android/org/bouncycastle/asn1/x500/RDN;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Set;)V
-HSPLcom/android/org/bouncycastle/asn1/x500/RDN;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/x500/RDN;
-HSPLcom/android/org/bouncycastle/asn1/x500/RDN;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/x500/X500Name;-><clinit>()V
-HSPLcom/android/org/bouncycastle/asn1/x500/X500Name;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Sequence;)V
-HSPLcom/android/org/bouncycastle/asn1/x500/X500Name;-><init>(Lcom/android/org/bouncycastle/asn1/x500/X500NameStyle;Lcom/android/org/bouncycastle/asn1/ASN1Sequence;)V
-HSPLcom/android/org/bouncycastle/asn1/x500/X500Name;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/x500/X500Name;
-HSPLcom/android/org/bouncycastle/asn1/x500/X500Name;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/x500/style/AbstractX500NameStyle;-><init>()V
-HSPLcom/android/org/bouncycastle/asn1/x500/style/AbstractX500NameStyle;->copyHashTable(Ljava/util/Hashtable;)Ljava/util/Hashtable;
-HSPLcom/android/org/bouncycastle/asn1/x500/style/BCStyle;-><clinit>()V
-HSPLcom/android/org/bouncycastle/asn1/x500/style/BCStyle;-><init>()V
-HSPLcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Sequence;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;->getAlgorithm()Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;
-HSPLcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;
-HSPLcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;->getParameters()Lcom/android/org/bouncycastle/asn1/ASN1Encodable;
-HSPLcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/x509/Certificate;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Sequence;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/Certificate;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/x509/Certificate;
-HSPLcom/android/org/bouncycastle/asn1/x509/Certificate;->getTBSCertificate()Lcom/android/org/bouncycastle/asn1/x509/TBSCertificate;
-HSPLcom/android/org/bouncycastle/asn1/x509/Certificate;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/x509/DSAParameter;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Sequence;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/DSAParameter;-><init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/DSAParameter;->getG()Ljava/math/BigInteger;
-HSPLcom/android/org/bouncycastle/asn1/x509/DSAParameter;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/x509/DSAParameter;
-HSPLcom/android/org/bouncycastle/asn1/x509/DSAParameter;->getP()Ljava/math/BigInteger;
-HSPLcom/android/org/bouncycastle/asn1/x509/DSAParameter;->getQ()Ljava/math/BigInteger;
-HSPLcom/android/org/bouncycastle/asn1/x509/DSAParameter;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Sequence;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;-><init>(Lcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;->getAlgorithm()Lcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;
-HSPLcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;
-HPLcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;->getPublicKeyData()Lcom/android/org/bouncycastle/asn1/DERBitString;
-HSPLcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;->parsePublicKey()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/x509/TBSCertificate;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Sequence;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/TBSCertificate;->getExtensions()Lcom/android/org/bouncycastle/asn1/x509/Extensions;
-HSPLcom/android/org/bouncycastle/asn1/x509/TBSCertificate;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/x509/TBSCertificate;
-HSPLcom/android/org/bouncycastle/asn1/x509/TBSCertificate;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/x509/Time;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Primitive;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/Time;-><init>(Ljava/util/Date;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/Time;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/x509/Time;
-HSPLcom/android/org/bouncycastle/asn1/x509/Time;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator;-><init>()V
-HSPLcom/android/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator;->generateTBSCertificate()Lcom/android/org/bouncycastle/asn1/x509/TBSCertificate;
-HSPLcom/android/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator;->setEndDate(Lcom/android/org/bouncycastle/asn1/x509/Time;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator;->setIssuer(Lcom/android/org/bouncycastle/asn1/x509/X509Name;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator;->setSerialNumber(Lcom/android/org/bouncycastle/asn1/ASN1Integer;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator;->setSignature(Lcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator;->setStartDate(Lcom/android/org/bouncycastle/asn1/x509/Time;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator;->setSubject(Lcom/android/org/bouncycastle/asn1/x509/X509Name;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator;->setSubjectPublicKeyInfo(Lcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/X509ExtensionsGenerator;-><init>()V
-HSPLcom/android/org/bouncycastle/asn1/x509/X509ExtensionsGenerator;->isEmpty()Z
-HSPLcom/android/org/bouncycastle/asn1/x509/X509Name;-><clinit>()V
-HSPLcom/android/org/bouncycastle/asn1/x509/X509Name;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Sequence;)V
-HSPLcom/android/org/bouncycastle/asn1/x509/X509Name;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-HSPLcom/android/org/bouncycastle/crypto/BufferedBlockCipher;-><init>()V
-HSPLcom/android/org/bouncycastle/crypto/BufferedBlockCipher;-><init>(Lcom/android/org/bouncycastle/crypto/BlockCipher;)V
-HSPLcom/android/org/bouncycastle/crypto/BufferedBlockCipher;->doFinal([BI)I
-HSPLcom/android/org/bouncycastle/crypto/BufferedBlockCipher;->getBlockSize()I
-HSPLcom/android/org/bouncycastle/crypto/BufferedBlockCipher;->getOutputSize(I)I
-HSPLcom/android/org/bouncycastle/crypto/BufferedBlockCipher;->getUnderlyingCipher()Lcom/android/org/bouncycastle/crypto/BlockCipher;
-HSPLcom/android/org/bouncycastle/crypto/BufferedBlockCipher;->getUpdateOutputSize(I)I
-HSPLcom/android/org/bouncycastle/crypto/BufferedBlockCipher;->init(ZLcom/android/org/bouncycastle/crypto/CipherParameters;)V
-HSPLcom/android/org/bouncycastle/crypto/BufferedBlockCipher;->processBytes([BII[BI)I
-HSPLcom/android/org/bouncycastle/crypto/BufferedBlockCipher;->reset()V
 HSPLcom/android/org/bouncycastle/crypto/CryptoServicesRegistrar;->getSecureRandom()Ljava/security/SecureRandom;
-HSPLcom/android/org/bouncycastle/crypto/PBEParametersGenerator;-><init>()V
-HSPLcom/android/org/bouncycastle/crypto/PBEParametersGenerator;->PKCS12PasswordToBytes([C)[B
-HSPLcom/android/org/bouncycastle/crypto/PBEParametersGenerator;->init([B[BI)V
-HSPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactory;->getSHA1()Lcom/android/org/bouncycastle/crypto/Digest;
-HSPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactory;->getSHA256()Lcom/android/org/bouncycastle/crypto/Digest;
-HSPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL;->getSHA1()Lcom/android/org/bouncycastle/crypto/Digest;
-HSPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL;->getSHA256()Lcom/android/org/bouncycastle/crypto/Digest;
-HSPLcom/android/org/bouncycastle/crypto/digests/GeneralDigest;-><init>()V
-HSPLcom/android/org/bouncycastle/crypto/digests/GeneralDigest;-><init>(Lcom/android/org/bouncycastle/crypto/digests/GeneralDigest;)V
-HSPLcom/android/org/bouncycastle/crypto/digests/GeneralDigest;->copyIn(Lcom/android/org/bouncycastle/crypto/digests/GeneralDigest;)V
-HSPLcom/android/org/bouncycastle/crypto/digests/GeneralDigest;->finish()V
-HSPLcom/android/org/bouncycastle/crypto/digests/GeneralDigest;->getByteLength()I
-HSPLcom/android/org/bouncycastle/crypto/digests/GeneralDigest;->reset()V
-HSPLcom/android/org/bouncycastle/crypto/digests/GeneralDigest;->update(B)V
-HSPLcom/android/org/bouncycastle/crypto/digests/GeneralDigest;->update([BII)V
-HSPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA1;-><init>()V
-HSPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA256;-><init>()V
-HSPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest;-><init>(Ljava/lang/String;I)V
-HSPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest;->doFinal([BI)I
-HSPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest;->getByteLength()I
-HSPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest;->getDigestSize()I
-HSPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest;->reset()V
-HSPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest;->update([BII)V
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;-><init>()V
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;-><init>(Lcom/android/org/bouncycastle/crypto/digests/SHA1Digest;)V
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;->copy()Lcom/android/org/bouncycastle/util/Memoable;
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;->copyIn(Lcom/android/org/bouncycastle/crypto/digests/SHA1Digest;)V
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;->doFinal([BI)I
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;->f(III)I
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;->g(III)I
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;->getDigestSize()I
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;->h(III)I
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;->processBlock()V
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;->processLength(J)V
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;->processWord([BI)V
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;->reset()V
-HSPLcom/android/org/bouncycastle/crypto/digests/SHA1Digest;->reset(Lcom/android/org/bouncycastle/util/Memoable;)V
-HSPLcom/android/org/bouncycastle/crypto/engines/AESEngine;-><init>()V
-HSPLcom/android/org/bouncycastle/crypto/engines/AESEngine;->encryptBlock([[I)V
-HSPLcom/android/org/bouncycastle/crypto/engines/AESEngine;->generateWorkingKey([BZ)[[I
-HSPLcom/android/org/bouncycastle/crypto/engines/AESEngine;->getAlgorithmName()Ljava/lang/String;
-HSPLcom/android/org/bouncycastle/crypto/engines/AESEngine;->getBlockSize()I
-HSPLcom/android/org/bouncycastle/crypto/engines/AESEngine;->init(ZLcom/android/org/bouncycastle/crypto/CipherParameters;)V
-HSPLcom/android/org/bouncycastle/crypto/engines/AESEngine;->packBlock([BI)V
-HSPLcom/android/org/bouncycastle/crypto/engines/AESEngine;->processBlock([BI[BI)I
-HSPLcom/android/org/bouncycastle/crypto/engines/AESEngine;->reset()V
-HSPLcom/android/org/bouncycastle/crypto/engines/AESEngine;->shift(II)I
-HSPLcom/android/org/bouncycastle/crypto/engines/AESEngine;->subWord(I)I
-HSPLcom/android/org/bouncycastle/crypto/engines/AESEngine;->unpackBlock([BI)V
-HSPLcom/android/org/bouncycastle/crypto/generators/PKCS12ParametersGenerator;-><init>(Lcom/android/org/bouncycastle/crypto/Digest;)V
-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/PKCS12ParametersGenerator;->generateDerivedMacParameters(I)Lcom/android/org/bouncycastle/crypto/CipherParameters;
-HSPLcom/android/org/bouncycastle/crypto/generators/PKCS12ParametersGenerator;->generateDerivedParameters(II)Lcom/android/org/bouncycastle/crypto/CipherParameters;
-HSPLcom/android/org/bouncycastle/crypto/io/MacInputStream;-><init>(Ljava/io/InputStream;Lcom/android/org/bouncycastle/crypto/Mac;)V
-HSPLcom/android/org/bouncycastle/crypto/io/MacInputStream;->read()I
-HSPLcom/android/org/bouncycastle/crypto/io/MacInputStream;->read([BII)I
-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;->getByteLength(Lcom/android/org/bouncycastle/crypto/Digest;)I
-HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->getMacSize()I
-HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->init(Lcom/android/org/bouncycastle/crypto/CipherParameters;)V
-HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->update(B)V
-HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->update([BII)V
-HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->xorPad([BIB)V
-HSPLcom/android/org/bouncycastle/crypto/paddings/PKCS7Padding;-><init>()V
-HSPLcom/android/org/bouncycastle/crypto/paddings/PKCS7Padding;->addPadding([BI)I
-HSPLcom/android/org/bouncycastle/crypto/paddings/PKCS7Padding;->init(Ljava/security/SecureRandom;)V
-HPLcom/android/org/bouncycastle/crypto/paddings/PKCS7Padding;->padCount([B)I
-HSPLcom/android/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher;-><init>(Lcom/android/org/bouncycastle/crypto/BlockCipher;)V
-HSPLcom/android/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher;-><init>(Lcom/android/org/bouncycastle/crypto/BlockCipher;Lcom/android/org/bouncycastle/crypto/paddings/BlockCipherPadding;)V
-HSPLcom/android/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher;->doFinal([BI)I
-HSPLcom/android/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher;->getOutputSize(I)I
-HSPLcom/android/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher;->getUpdateOutputSize(I)I
-HSPLcom/android/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher;->init(ZLcom/android/org/bouncycastle/crypto/CipherParameters;)V
-HSPLcom/android/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher;->processBytes([BII[BI)I
-HSPLcom/android/org/bouncycastle/crypto/params/AsymmetricKeyParameter;-><init>(Z)V
-HSPLcom/android/org/bouncycastle/crypto/params/DSAKeyParameters;-><init>(ZLcom/android/org/bouncycastle/crypto/params/DSAParameters;)V
-PLcom/android/org/bouncycastle/crypto/params/DSAKeyParameters;->getParameters()Lcom/android/org/bouncycastle/crypto/params/DSAParameters;
-HSPLcom/android/org/bouncycastle/crypto/params/DSAParameters;-><init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
-PLcom/android/org/bouncycastle/crypto/params/DSAParameters;->getG()Ljava/math/BigInteger;
-HSPLcom/android/org/bouncycastle/crypto/params/DSAParameters;->getP()Ljava/math/BigInteger;
-HSPLcom/android/org/bouncycastle/crypto/params/DSAParameters;->getQ()Ljava/math/BigInteger;
-HSPLcom/android/org/bouncycastle/crypto/params/DSAPublicKeyParameters;-><init>(Ljava/math/BigInteger;Lcom/android/org/bouncycastle/crypto/params/DSAParameters;)V
-PLcom/android/org/bouncycastle/crypto/params/DSAPublicKeyParameters;->getY()Ljava/math/BigInteger;
-HSPLcom/android/org/bouncycastle/crypto/params/DSAPublicKeyParameters;->validate(Ljava/math/BigInteger;Lcom/android/org/bouncycastle/crypto/params/DSAParameters;)Ljava/math/BigInteger;
-HSPLcom/android/org/bouncycastle/crypto/params/KeyParameter;-><init>([B)V
-HSPLcom/android/org/bouncycastle/crypto/params/KeyParameter;-><init>([BII)V
 HSPLcom/android/org/bouncycastle/crypto/params/KeyParameter;->getKey()[B
-HSPLcom/android/org/bouncycastle/crypto/params/ParametersWithIV;-><init>(Lcom/android/org/bouncycastle/crypto/CipherParameters;[BII)V
-HSPLcom/android/org/bouncycastle/crypto/params/ParametersWithIV;->getIV()[B
-HSPLcom/android/org/bouncycastle/crypto/params/ParametersWithIV;->getParameters()Lcom/android/org/bouncycastle/crypto/CipherParameters;
-PLcom/android/org/bouncycastle/crypto/signers/DSASigner;-><init>()V
-PLcom/android/org/bouncycastle/crypto/signers/DSASigner;->calculateE(Ljava/math/BigInteger;[B)Ljava/math/BigInteger;
-PLcom/android/org/bouncycastle/crypto/signers/DSASigner;->getOrder()Ljava/math/BigInteger;
-PLcom/android/org/bouncycastle/crypto/signers/DSASigner;->init(ZLcom/android/org/bouncycastle/crypto/CipherParameters;)V
-PLcom/android/org/bouncycastle/crypto/signers/DSASigner;->initSecureRandom(ZLjava/security/SecureRandom;)Ljava/security/SecureRandom;
-PLcom/android/org/bouncycastle/crypto/signers/DSASigner;->verifySignature([BLjava/math/BigInteger;Ljava/math/BigInteger;)Z
-PLcom/android/org/bouncycastle/crypto/signers/RandomDSAKCalculator;-><clinit>()V
-PLcom/android/org/bouncycastle/crypto/signers/RandomDSAKCalculator;-><init>()V
-PLcom/android/org/bouncycastle/crypto/signers/StandardDSAEncoding;-><clinit>()V
-PLcom/android/org/bouncycastle/crypto/signers/StandardDSAEncoding;-><init>()V
-PLcom/android/org/bouncycastle/crypto/signers/StandardDSAEncoding;->checkValue(Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljava/math/BigInteger;
-PLcom/android/org/bouncycastle/crypto/signers/StandardDSAEncoding;->decode(Ljava/math/BigInteger;[B)[Ljava/math/BigInteger;
-PLcom/android/org/bouncycastle/crypto/signers/StandardDSAEncoding;->decodeValue(Ljava/math/BigInteger;Lcom/android/org/bouncycastle/asn1/ASN1Sequence;I)Ljava/math/BigInteger;
-PLcom/android/org/bouncycastle/crypto/signers/StandardDSAEncoding;->encode(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)[B
-PLcom/android/org/bouncycastle/crypto/signers/StandardDSAEncoding;->encodeValue(Ljava/math/BigInteger;Lcom/android/org/bouncycastle/asn1/ASN1EncodableVector;Ljava/math/BigInteger;)V
-HPLcom/android/org/bouncycastle/jcajce/PKCS12Key;-><init>([CZ)V
-HPLcom/android/org/bouncycastle/jcajce/PKCS12Key;->getEncoded()[B
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;-><init>(Lcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;)V
-PLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;->engineGetKeyParameters()Lcom/android/org/bouncycastle/crypto/params/DSAPublicKeyParameters;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;->getEncoded()[B
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;->getParams()Ljava/security/interfaces/DSAParams;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;->getY()Ljava/math/BigInteger;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;->hashCode()I
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;->isNotNull(Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)Z
-PLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;->readObject(Ljava/io/ObjectInputStream;)V
-PLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;->writeObject(Ljava/io/ObjectOutputStream;)V
-PLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsa256;-><init>()V
-PLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner;-><init>(Lcom/android/org/bouncycastle/crypto/Digest;Lcom/android/org/bouncycastle/crypto/DSAExt;)V
-PLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner;->engineInitVerify(Ljava/security/PublicKey;)V
-PLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner;->engineUpdate([BII)V
-PLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner;->engineVerify([B)Z
-PLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil;->generatePublicKeyParameter(Ljava/security/PublicKey;)Lcom/android/org/bouncycastle/crypto/params/AsymmetricKeyParameter;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil;->isDsaOid(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;)Z
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil;->toDSAParameters(Ljava/security/interfaces/DSAParams;)Lcom/android/org/bouncycastle/crypto/params/DSAParameters;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi;-><init>()V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi;->engineGeneratePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi;->generatePublic(Lcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;)Ljava/security/PublicKey;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$EC;-><init>()V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi;-><init>(Ljava/lang/String;Lcom/android/org/bouncycastle/jcajce/provider/config/ProviderConfiguration;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi;->engineGeneratePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi;->generatePublic(Lcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;)Ljava/security/PublicKey;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$NoPadding;-><init>()V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi;-><init>(Lcom/android/org/bouncycastle/crypto/AsymmetricBlockCipher;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->engineSetMode(Ljava/lang/String;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->engineSetPadding(Ljava/lang/String;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->initFromSpec(Ljavax/crypto/spec/OAEPParameterSpec;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyFactorySpi;-><init>()V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyFactorySpi;->engineGeneratePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
-HPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyFactorySpi;->generatePrivate(Lcom/android/org/bouncycastle/asn1/pkcs/PrivateKeyInfo;)Ljava/security/PrivateKey;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyFactorySpi;->generatePublic(Lcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;)Ljava/security/PublicKey;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/RSAUtil;->isRsaOid(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;)Z
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;-><init>()V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi;-><init>()V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi;->engineGeneratePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/util/KeyUtil;->getEncodedSubjectPublicKeyInfo(Lcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)[B
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/util/KeyUtil;->getEncodedSubjectPublicKeyInfo(Lcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;)[B
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/util/PKCS12BagAttributeCarrierImpl;-><init>()V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/util/PKCS12BagAttributeCarrierImpl;-><init>(Ljava/util/Hashtable;Ljava/util/Vector;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/x509/CertificateFactory;-><clinit>()V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/x509/CertificateFactory;-><init>()V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/x509/CertificateFactory;->engineGenerateCertificate(Ljava/io/InputStream;)Ljava/security/cert/Certificate;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/x509/CertificateFactory;->getCertificate(Lcom/android/org/bouncycastle/asn1/ASN1Sequence;)Ljava/security/cert/Certificate;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/x509/CertificateFactory;->readDERCertificate(Lcom/android/org/bouncycastle/asn1/ASN1InputStream;)Ljava/security/cert/Certificate;
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/x509/PEMUtil;-><init>(Ljava/lang/String;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateObject;-><init>(Lcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;Lcom/android/org/bouncycastle/asn1/x509/Certificate;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateObject;->getEncoded()[B
-HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateObject;->getExtensionBytes(Ljava/lang/String;)[B
 HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$Std;-><init>()V
-PLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;-><init>(Lcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;Ljava/lang/String;Ljava/security/cert/Certificate;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;-><init>(Lcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;Ljava/lang/String;Ljava/util/Date;ILjava/lang/Object;)V
-HPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;-><init>(Lcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;Ljava/lang/String;Ljava/util/Date;ILjava/lang/Object;[Ljava/security/cert/Certificate;)V
-HPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getCertificateChain()[Ljava/security/cert/Certificate;
-HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getObject()Ljava/lang/Object;
 HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getType()I
 HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;-><init>(I)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->decodeCertificate(Ljava/io/DataInputStream;)Ljava/security/cert/Certificate;
 HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->engineAliases()Ljava/util/Enumeration;
-HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->engineGetCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;
 HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->engineLoad(Ljava/io/InputStream;[C)V
-PLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->engineSetCertificateEntry(Ljava/lang/String;Ljava/security/cert/Certificate;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->loadStore(Ljava/io/InputStream;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/AES$ECB$1;-><init>()V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/AES$ECB$1;->get()Lcom/android/org/bouncycastle/crypto/BlockCipher;
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/AES$ECB;-><init>()V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BCPBEKey;-><init>(Ljava/lang/String;Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;IIIILjavax/crypto/spec/PBEKeySpec;Lcom/android/org/bouncycastle/crypto/CipherParameters;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BCPBEKey;->getAlgorithm()Ljava/lang/String;
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BCPBEKey;->getEncoded()[B
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BCPBEKey;->getFormat()Ljava/lang/String;
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BCPBEKey;->getOID()Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BCPBEKey;->getParam()Lcom/android/org/bouncycastle/crypto/CipherParameters;
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lcom/android/org/bouncycastle/crypto/BlockCipher;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lcom/android/org/bouncycastle/crypto/BufferedBlockCipher;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;->doFinal([BI)I
-HPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;->getAlgorithmName()Ljava/lang/String;
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;->getOutputSize(I)I
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;->getUnderlyingCipher()Lcom/android/org/bouncycastle/crypto/BlockCipher;
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;->getUpdateOutputSize(I)I
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;->init(ZLcom/android/org/bouncycastle/crypto/CipherParameters;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;->processBytes([BII[BI)I
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;->wrapOnNoPadding()Z
-HPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher;-><init>(Lcom/android/org/bouncycastle/crypto/BlockCipher;IIII)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher;-><init>(Lcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BlockCipherProvider;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->adjustParameters(Ljava/security/spec/AlgorithmParameterSpec;Lcom/android/org/bouncycastle/crypto/CipherParameters;)Lcom/android/org/bouncycastle/crypto/CipherParameters;
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineDoFinal([BII)[B
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineDoFinal([BII[BI)I
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineGetOutputSize(I)I
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineSetMode(Ljava/lang/String;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineSetPadding(Ljava/lang/String;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineUpdate([BII[BI)I
-HPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->isBCPBEKeyWithoutIV(Ljava/security/Key;)Z
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseSecretKeyFactory;-><init>(Ljava/lang/String;Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;)V
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher;-><init>()V
-HPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher;->engineUnwrap([BLjava/lang/String;I)Ljava/security/Key;
-HPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/ClassUtil;->loadClass(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Class;
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/PBE$Util;->convertPassword(ILjavax/crypto/spec/PBEKeySpec;)[B
-HPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/PBE$Util;->getParameterSpecFromPBEParameterSpec(Ljavax/crypto/spec/PBEParameterSpec;)Ljava/security/spec/AlgorithmParameterSpec;
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/PBE$Util;->makePBEGenerator(II)Lcom/android/org/bouncycastle/crypto/PBEParametersGenerator;
-HPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/PBE$Util;->makePBEMacParameters(Ljavax/crypto/SecretKey;IIILjavax/crypto/spec/PBEParameterSpec;)Lcom/android/org/bouncycastle/crypto/CipherParameters;
-HSPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/PBE$Util;->makePBEParameters(Ljavax/crypto/spec/PBEKeySpec;IIII)Lcom/android/org/bouncycastle/crypto/CipherParameters;
-HPLcom/android/org/bouncycastle/jcajce/provider/symmetric/util/PBE$Util;->makePBEParameters([BIIIILjava/security/spec/AlgorithmParameterSpec;Ljava/lang/String;)Lcom/android/org/bouncycastle/crypto/CipherParameters;
-HSPLcom/android/org/bouncycastle/jcajce/provider/util/DigestFactory;->getDigest(Ljava/lang/String;)Lcom/android/org/bouncycastle/crypto/Digest;
-HSPLcom/android/org/bouncycastle/jcajce/util/BCJcaJceHelper;-><init>()V
-HSPLcom/android/org/bouncycastle/jcajce/util/BCJcaJceHelper;->getBouncyCastleProvider()Ljava/security/Provider;
 HSPLcom/android/org/bouncycastle/jcajce/util/DefaultJcaJceHelper;-><init>()V
-HSPLcom/android/org/bouncycastle/jcajce/util/DefaultJcaJceHelper;->createCertificateFactory(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
-HPLcom/android/org/bouncycastle/jcajce/util/DefaultJcaJceHelper;->createCipher(Ljava/lang/String;)Ljavax/crypto/Cipher;
-HPLcom/android/org/bouncycastle/jcajce/util/DefaultJcaJceHelper;->createMac(Ljava/lang/String;)Ljavax/crypto/Mac;
-HSPLcom/android/org/bouncycastle/jcajce/util/ProviderJcaJceHelper;-><init>(Ljava/security/Provider;)V
-HSPLcom/android/org/bouncycastle/jce/X509Principal;-><init>([B)V
-HSPLcom/android/org/bouncycastle/jce/X509Principal;->readSequence(Lcom/android/org/bouncycastle/asn1/ASN1InputStream;)Lcom/android/org/bouncycastle/asn1/ASN1Sequence;
-HPLcom/android/org/bouncycastle/jce/provider/BouncyCastleProvider;->getAsymmetricKeyInfoConverter(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;)Lcom/android/org/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;
-HPLcom/android/org/bouncycastle/jce/provider/BouncyCastleProvider;->getPrivateKey(Lcom/android/org/bouncycastle/asn1/pkcs/PrivateKeyInfo;)Ljava/security/PrivateKey;
 HSPLcom/android/org/bouncycastle/jce/provider/CertStoreCollectionSpi;-><init>(Ljava/security/cert/CertStoreParameters;)V
-PLcom/android/org/bouncycastle/jce/provider/CertStoreCollectionSpi;->engineGetCertificates(Ljava/security/cert/CertSelector;)Ljava/util/Collection;
-HSPLcom/android/org/bouncycastle/jce/provider/X509CertificateObject;-><init>(Lcom/android/org/bouncycastle/asn1/x509/Certificate;)V
-HSPLcom/android/org/bouncycastle/jce/provider/X509CertificateObject;->getEncoded()[B
-HSPLcom/android/org/bouncycastle/jce/provider/X509CertificateObject;->getExtensionBytes(Ljava/lang/String;)[B
-HSPLcom/android/org/bouncycastle/util/Arrays;->areEqual([B[B)Z
 HSPLcom/android/org/bouncycastle/util/Arrays;->clone([B)[B
-HSPLcom/android/org/bouncycastle/util/Arrays;->constantTimeAreEqual([B[B)Z
-HSPLcom/android/org/bouncycastle/util/Arrays;->fill([BB)V
-HSPLcom/android/org/bouncycastle/util/Arrays;->hashCode([B)I
-HSPLcom/android/org/bouncycastle/util/Integers;->valueOf(I)Ljava/lang/Integer;
-HPLcom/android/org/bouncycastle/util/Pack;->bigEndianToInt([BI)I
-HSPLcom/android/org/bouncycastle/util/Pack;->intToBigEndian(I[BI)V
-HSPLcom/android/org/bouncycastle/util/Pack;->littleEndianToInt([BI)I
-HSPLcom/android/org/bouncycastle/util/Properties$1;-><init>(Ljava/lang/String;)V
-HSPLcom/android/org/bouncycastle/util/Properties$1;->run()Ljava/lang/Object;
-HSPLcom/android/org/bouncycastle/util/Properties;->access$000()Ljava/lang/ThreadLocal;
-HPLcom/android/org/bouncycastle/util/Properties;->asBigInteger(Ljava/lang/String;)Ljava/math/BigInteger;
-HSPLcom/android/org/bouncycastle/util/Properties;->fetchProperty(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/org/bouncycastle/util/Properties;->isOverrideSet(Ljava/lang/String;)Z
-HSPLcom/android/org/bouncycastle/util/Strings;->asCharArray([B)[C
-HSPLcom/android/org/bouncycastle/util/Strings;->fromByteArray([B)Ljava/lang/String;
-HSPLcom/android/org/bouncycastle/util/Strings;->toByteArray(Ljava/lang/String;)[B
-HPLcom/android/org/bouncycastle/util/Strings;->toLowerCase(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/org/bouncycastle/util/Strings;->toUpperCase(Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/org/bouncycastle/util/encoders/Hex;->encode([B)[B
-HPLcom/android/org/bouncycastle/util/encoders/Hex;->encode([BII)[B
-HPLcom/android/org/bouncycastle/util/encoders/HexEncoder;->encode([BIILjava/io/OutputStream;)I
-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/bouncycastle/x509/X509Util;-><clinit>()V
-HSPLcom/android/org/bouncycastle/x509/X509Util;->calculateSignature(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;Ljava/security/PrivateKey;Ljava/security/SecureRandom;Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)[B
-HSPLcom/android/org/bouncycastle/x509/X509Util;->creatPSSParams(Lcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;I)Lcom/android/org/bouncycastle/asn1/pkcs/RSASSAPSSparams;
-HSPLcom/android/org/bouncycastle/x509/X509Util;->getAlgorithmOID(Ljava/lang/String;)Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;
-HSPLcom/android/org/bouncycastle/x509/X509Util;->getSigAlgID(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)Lcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;
-HSPLcom/android/org/bouncycastle/x509/X509Util;->getSignatureInstance(Ljava/lang/String;)Ljava/security/Signature;
-HSPLcom/android/org/bouncycastle/x509/X509V3CertificateGenerator;-><init>()V
-HSPLcom/android/org/bouncycastle/x509/X509V3CertificateGenerator;->generate(Ljava/security/PrivateKey;)Ljava/security/cert/X509Certificate;
-HSPLcom/android/org/bouncycastle/x509/X509V3CertificateGenerator;->generate(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)Ljava/security/cert/X509Certificate;
-HSPLcom/android/org/bouncycastle/x509/X509V3CertificateGenerator;->generateJcaObject(Lcom/android/org/bouncycastle/asn1/x509/TBSCertificate;[B)Ljava/security/cert/X509Certificate;
-HSPLcom/android/org/bouncycastle/x509/X509V3CertificateGenerator;->generateTbsCert()Lcom/android/org/bouncycastle/asn1/x509/TBSCertificate;
-HSPLcom/android/org/bouncycastle/x509/X509V3CertificateGenerator;->setIssuerDN(Ljavax/security/auth/x500/X500Principal;)V
-HSPLcom/android/org/bouncycastle/x509/X509V3CertificateGenerator;->setNotAfter(Ljava/util/Date;)V
-HSPLcom/android/org/bouncycastle/x509/X509V3CertificateGenerator;->setNotBefore(Ljava/util/Date;)V
-HSPLcom/android/org/bouncycastle/x509/X509V3CertificateGenerator;->setPublicKey(Ljava/security/PublicKey;)V
-HSPLcom/android/org/bouncycastle/x509/X509V3CertificateGenerator;->setSerialNumber(Ljava/math/BigInteger;)V
-HSPLcom/android/org/bouncycastle/x509/X509V3CertificateGenerator;->setSignatureAlgorithm(Ljava/lang/String;)V
-HSPLcom/android/org/bouncycastle/x509/X509V3CertificateGenerator;->setSubjectDN(Ljavax/security/auth/x500/X500Principal;)V
 HSPLcom/android/org/kxml2/io/KXmlParser;-><init>()V
 HSPLcom/android/org/kxml2/io/KXmlParser;->adjustNsp()Z
-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
-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;->getAttributeNamespace(I)Ljava/lang/String;
-HSPLcom/android/org/kxml2/io/KXmlParser;->getAttributePrefix(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;->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;->getNamespaceCount(I)I
-HSPLcom/android/org/kxml2/io/KXmlParser;->getPositionDescription()Ljava/lang/String;
-HSPLcom/android/org/kxml2/io/KXmlParser;->getPrefix()Ljava/lang/String;
 HSPLcom/android/org/kxml2/io/KXmlParser;->getText()Ljava/lang/String;
-HSPLcom/android/org/kxml2/io/KXmlParser;->getTextCharacters([I)[C
 HSPLcom/android/org/kxml2/io/KXmlParser;->next()I
 HSPLcom/android/org/kxml2/io/KXmlParser;->next(Z)I
-HSPLcom/android/org/kxml2/io/KXmlParser;->nextTag()I
-HSPLcom/android/org/kxml2/io/KXmlParser;->nextText()Ljava/lang/String;
-HSPLcom/android/org/kxml2/io/KXmlParser;->nextToken()I
 HSPLcom/android/org/kxml2/io/KXmlParser;->parseStartTag(ZZ)V
 HSPLcom/android/org/kxml2/io/KXmlParser;->peekCharacter()I
 HSPLcom/android/org/kxml2/io/KXmlParser;->peekType(Z)I
 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;->readEntity(Ljava/lang/StringBuilder;ZZLcom/android/org/kxml2/io/KXmlParser$ValueContext;)V
 HSPLcom/android/org/kxml2/io/KXmlParser;->readName()Ljava/lang/String;
-HSPLcom/android/org/kxml2/io/KXmlParser;->readUntil([CZ)Ljava/lang/String;
 HSPLcom/android/org/kxml2/io/KXmlParser;->readValue(CZZLcom/android/org/kxml2/io/KXmlParser$ValueContext;)Ljava/lang/String;
 HSPLcom/android/org/kxml2/io/KXmlParser;->readXmlDeclaration()V
-HSPLcom/android/org/kxml2/io/KXmlParser;->require(ILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/org/kxml2/io/KXmlParser;->setFeature(Ljava/lang/String;Z)V
 HSPLcom/android/org/kxml2/io/KXmlParser;->setInput(Ljava/io/InputStream;Ljava/lang/String;)V
 HSPLcom/android/org/kxml2/io/KXmlParser;->setInput(Ljava/io/Reader;)V
 HSPLcom/android/org/kxml2/io/KXmlParser;->skip()V
-HSPLcom/android/org/kxml2/io/KXmlSerializer;-><init>()V
 HSPLcom/android/org/kxml2/io/KXmlSerializer;->append(C)V
 HSPLcom/android/org/kxml2/io/KXmlSerializer;->append(Ljava/lang/String;)V
 HSPLcom/android/org/kxml2/io/KXmlSerializer;->append(Ljava/lang/String;II)V
-HSPLcom/android/org/kxml2/io/KXmlSerializer;->attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/org/kxml2/io/KXmlSerializer;->check(Z)V
-HSPLcom/android/org/kxml2/io/KXmlSerializer;->endDocument()V
 HSPLcom/android/org/kxml2/io/KXmlSerializer;->endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/org/kxml2/io/KXmlSerializer;->flush()V
 HSPLcom/android/org/kxml2/io/KXmlSerializer;->flushBuffer()V
-PLcom/android/org/kxml2/io/KXmlSerializer;->getDepth()I
-PLcom/android/org/kxml2/io/KXmlSerializer;->getNamespace()Ljava/lang/String;
-PLcom/android/org/kxml2/io/KXmlSerializer;->getPrefix(Ljava/lang/String;ZZ)Ljava/lang/String;
-HSPLcom/android/org/kxml2/io/KXmlSerializer;->setFeature(Ljava/lang/String;Z)V
-HSPLcom/android/org/kxml2/io/KXmlSerializer;->setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V
 HSPLcom/android/org/kxml2/io/KXmlSerializer;->setOutput(Ljava/io/Writer;)V
-PLcom/android/org/kxml2/io/KXmlSerializer;->setPrefix(Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/org/kxml2/io/KXmlSerializer;->startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V
 HSPLcom/android/org/kxml2/io/KXmlSerializer;->startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
-HPLcom/android/org/kxml2/io/KXmlSerializer;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/org/kxml2/io/KXmlSerializer;->writeEscaped(Ljava/lang/String;I)V
-PLcom/android/server/AppWidgetBackupBridge;->getWidgetState(Ljava/lang/String;I)[B
-HSPLcom/android/server/AppWidgetBackupBridge;->register(Lcom/android/server/WidgetBackupProvider;)V
-PLcom/android/server/AppWidgetBackupBridge;->restoreFinished(I)V
-PLcom/android/server/BootReceiver$1;-><init>(Lcom/android/server/BootReceiver;Landroid/content/Context;)V
-PLcom/android/server/BootReceiver$1;->run()V
-PLcom/android/server/BootReceiver$2;-><init>(Lcom/android/server/BootReceiver;Ljava/lang/String;ILandroid/os/DropBoxManager;Ljava/lang/String;)V
-PLcom/android/server/BootReceiver$2;->onEvent(ILjava/lang/String;)V
-PLcom/android/server/BootReceiver;-><clinit>()V
-PLcom/android/server/BootReceiver;-><init>()V
-PLcom/android/server/BootReceiver;->access$000(Lcom/android/server/BootReceiver;Landroid/content/Context;)V
-PLcom/android/server/BootReceiver;->access$100(Lcom/android/server/BootReceiver;Landroid/content/Context;)V
-PLcom/android/server/BootReceiver;->access$200()Ljava/util/HashMap;
-PLcom/android/server/BootReceiver;->access$300()Ljava/io/File;
-PLcom/android/server/BootReceiver;->access$400()I
-PLcom/android/server/BootReceiver;->access$500(Landroid/os/DropBoxManager;Ljava/util/HashMap;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/BootReceiver;->access$600(Lcom/android/server/BootReceiver;Ljava/util/HashMap;)V
-PLcom/android/server/BootReceiver;->addAuditErrorsToDropBox(Landroid/os/DropBoxManager;Ljava/util/HashMap;Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/BootReceiver;->addFileToDropBox(Landroid/os/DropBoxManager;Ljava/util/HashMap;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/BootReceiver;->addFileWithFootersToDropBox(Landroid/os/DropBoxManager;Ljava/util/HashMap;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/BootReceiver;->addFsckErrorsToDropBoxAndLogFsStat(Landroid/os/DropBoxManager;Ljava/util/HashMap;Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/BootReceiver;->addLastkToDropBox(Landroid/os/DropBoxManager;Ljava/util/HashMap;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/BootReceiver;->addTextToDropBox(Landroid/os/DropBoxManager;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/BootReceiver;->getBootHeadersToLogAndUpdate()Ljava/lang/String;
-PLcom/android/server/BootReceiver;->getCurrentBootHeaders()Ljava/lang/String;
-PLcom/android/server/BootReceiver;->getPreviousBootHeaders()Ljava/lang/String;
-PLcom/android/server/BootReceiver;->logBootEvents(Landroid/content/Context;)V
-PLcom/android/server/BootReceiver;->logFsMountTime()V
-PLcom/android/server/BootReceiver;->logFsShutdownTime()V
-PLcom/android/server/BootReceiver;->logStatsdShutdownAtom(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/BootReceiver;->logSystemServerShutdownTimeMetrics()V
-PLcom/android/server/BootReceiver;->logTronShutdownMetric(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/BootReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-PLcom/android/server/BootReceiver;->readTimestamps()Ljava/util/HashMap;
-PLcom/android/server/BootReceiver;->removeOldUpdatePackages(Landroid/content/Context;)V
-PLcom/android/server/BootReceiver;->writeTimestamps(Ljava/util/HashMap;)V
-HSPLcom/android/server/LocalServices;->addService(Ljava/lang/Class;Ljava/lang/Object;)V
-HSPLcom/android/server/LocalServices;->getService(Ljava/lang/Class;)Ljava/lang/Object;
 HSPLcom/android/server/NetworkManagementSocketTagger$1;->initialValue()Lcom/android/server/NetworkManagementSocketTagger$SocketTags;
 HSPLcom/android/server/NetworkManagementSocketTagger$1;->initialValue()Ljava/lang/Object;
 HSPLcom/android/server/NetworkManagementSocketTagger$SocketTags;-><init>()V
 HSPLcom/android/server/NetworkManagementSocketTagger;-><init>()V
 HSPLcom/android/server/NetworkManagementSocketTagger;->install()V
-HPLcom/android/server/NetworkManagementSocketTagger;->setKernelCounterSet(II)V
-PLcom/android/server/NetworkManagementSocketTagger;->setThreadSocketStatsTag(I)I
-PLcom/android/server/NetworkManagementSocketTagger;->setThreadSocketStatsUid(I)I
+HSPLcom/android/server/NetworkManagementSocketTagger;->setThreadSocketStatsTag(I)I
 HSPLcom/android/server/NetworkManagementSocketTagger;->tag(Ljava/io/FileDescriptor;)V
 HSPLcom/android/server/NetworkManagementSocketTagger;->tagSocketFd(Ljava/io/FileDescriptor;II)V
-HSPLcom/android/server/NetworkManagementSocketTagger;->unTagSocketFd(Ljava/io/FileDescriptor;)V
-HSPLcom/android/server/NetworkManagementSocketTagger;->untag(Ljava/io/FileDescriptor;)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;)V
-HSPLcom/android/server/SystemConfig;-><init>()V
-HSPLcom/android/server/SystemConfig;->addFeature(Ljava/lang/String;I)V
-PLcom/android/server/SystemConfig;->getAllowIgnoreLocationSettings()Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getAllowImplicitBroadcasts()Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getAllowInDataUsageSave()Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getAllowInPowerSave()Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getAllowInPowerSaveExceptIdle()Landroid/util/ArraySet;
-PLcom/android/server/SystemConfig;->getAllowUnthrottledLocation()Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getAllowedAssociations()Landroid/util/ArrayMap;
-HSPLcom/android/server/SystemConfig;->getAndClearPackageToUserTypeBlacklist()Landroid/util/ArrayMap;
-HSPLcom/android/server/SystemConfig;->getAndClearPackageToUserTypeWhitelist()Landroid/util/ArrayMap;
-HSPLcom/android/server/SystemConfig;->getAvailableFeatures()Landroid/util/ArrayMap;
-HSPLcom/android/server/SystemConfig;->getBackupTransportWhitelist()Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getBugreportWhitelistedPackages()Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getComponentsEnabledStates(Ljava/lang/String;)Landroid/util/ArrayMap;
-HSPLcom/android/server/SystemConfig;->getDisabledUntilUsedPreinstalledCarrierApps()Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getDisabledUntilUsedPreinstalledCarrierAssociatedApps()Landroid/util/ArrayMap;
-HSPLcom/android/server/SystemConfig;->getGlobalGids()[I
-HSPLcom/android/server/SystemConfig;->getHiddenApiWhitelistedApps()Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getInstance()Lcom/android/server/SystemConfig;
-PLcom/android/server/SystemConfig;->getLinkedApps()Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getPermissions()Landroid/util/ArrayMap;
-HSPLcom/android/server/SystemConfig;->getPrivAppPermissions(Ljava/lang/String;)Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getProductPrivAppDenyPermissions(Ljava/lang/String;)Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getProductPrivAppPermissions(Ljava/lang/String;)Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getSharedLibraries()Landroid/util/ArrayMap;
-HSPLcom/android/server/SystemConfig;->getSplitPermissions()Ljava/util/ArrayList;
-HSPLcom/android/server/SystemConfig;->getSystemExtPrivAppPermissions(Ljava/lang/String;)Landroid/util/ArraySet;
-HSPLcom/android/server/SystemConfig;->getSystemPermissions()Landroid/util/SparseArray;
-HSPLcom/android/server/SystemConfig;->readAllPermissions()V
-HSPLcom/android/server/SystemConfig;->readComponentOverrides(Lorg/xmlpull/v1/XmlPullParser;Ljava/io/File;)V
-HSPLcom/android/server/SystemConfig;->readInstallInUserType(Lorg/xmlpull/v1/XmlPullParser;Ljava/util/Map;Ljava/util/Map;)V
-HSPLcom/android/server/SystemConfig;->readPermission(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)V
-HSPLcom/android/server/SystemConfig;->readPermissions(Ljava/io/File;I)V
-HSPLcom/android/server/SystemConfig;->readPermissionsFromXml(Ljava/io/File;I)V
-HSPLcom/android/server/SystemConfig;->readPrivAppPermissions(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
-HSPLcom/android/server/SystemConfig;->readSplitPermission(Lorg/xmlpull/v1/XmlPullParser;Ljava/io/File;)V
-PLcom/android/server/backup/AccountManagerBackupHelper;-><init>()V
-PLcom/android/server/backup/AccountManagerBackupHelper;->getBackupPayload(Ljava/lang/String;)[B
-PLcom/android/server/backup/AccountSyncSettingsBackupHelper;-><init>(Landroid/content/Context;I)V
-PLcom/android/server/backup/AccountSyncSettingsBackupHelper;->accountAdded(Landroid/content/Context;I)V
-PLcom/android/server/backup/AccountSyncSettingsBackupHelper;->accountAddedInternal(I)V
-PLcom/android/server/backup/AccountSyncSettingsBackupHelper;->generateMd5Checksum([B)[B
-PLcom/android/server/backup/AccountSyncSettingsBackupHelper;->getAccounts(I)Ljava/util/Set;
-PLcom/android/server/backup/AccountSyncSettingsBackupHelper;->getStashFile(I)Ljava/io/File;
-PLcom/android/server/backup/AccountSyncSettingsBackupHelper;->performBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V
-PLcom/android/server/backup/AccountSyncSettingsBackupHelper;->readOldMd5Checksum(Landroid/os/ParcelFileDescriptor;)[B
-PLcom/android/server/backup/AccountSyncSettingsBackupHelper;->restoreFromJsonArray(Lorg/json/JSONArray;I)V
-PLcom/android/server/backup/AccountSyncSettingsBackupHelper;->serializeAccountSyncSettingsToJSON(I)Lorg/json/JSONObject;
-PLcom/android/server/backup/AccountSyncSettingsBackupHelper;->writeNewMd5Checksum(Landroid/os/ParcelFileDescriptor;[B)V
-PLcom/android/server/backup/NotificationBackupHelper;-><clinit>()V
-PLcom/android/server/backup/NotificationBackupHelper;-><init>(I)V
-PLcom/android/server/backup/NotificationBackupHelper;->getBackupPayload(Ljava/lang/String;)[B
-PLcom/android/server/backup/PermissionBackupHelper;-><init>(I)V
-PLcom/android/server/backup/PermissionBackupHelper;->getBackupPayload(Ljava/lang/String;)[B
-PLcom/android/server/backup/PreferredActivityBackupHelper;-><init>()V
-PLcom/android/server/backup/PreferredActivityBackupHelper;->getBackupPayload(Ljava/lang/String;)[B
-PLcom/android/server/backup/ShortcutBackupHelper;-><init>()V
-PLcom/android/server/backup/ShortcutBackupHelper;->getBackupPayload(Ljava/lang/String;)[B
-PLcom/android/server/backup/ShortcutBackupHelper;->getShortcutService()Landroid/content/pm/IShortcutService;
-PLcom/android/server/backup/SliceBackupHelper;-><clinit>()V
-PLcom/android/server/backup/SliceBackupHelper;-><init>(Landroid/content/Context;)V
-PLcom/android/server/backup/SliceBackupHelper;->getBackupPayload(Ljava/lang/String;)[B
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfProgramEvent;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfProgramEvent;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfProgramEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfProgramEvent;->computeSerializedSize()I
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfProgramEvent;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfStatistics;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfStatistics;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfStatistics;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfStatistics;->computeSerializedSize()I
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfStatistics;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ConnectStatistics;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ConnectStatistics;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ConnectStatistics;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ConnectStatistics;->computeSerializedSize()I
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ConnectStatistics;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-HPLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;->clearValue()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;->computeSerializedSize()I
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;->setErrorCode(I)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;->setStateTransition(Ljava/lang/String;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DNSLookupBatch;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DNSLookupBatch;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DNSLookupBatch;
-HPLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DNSLookupBatch;->computeSerializedSize()I
-HPLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DNSLookupBatch;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DefaultNetworkEvent;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DefaultNetworkEvent;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DefaultNetworkEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DefaultNetworkEvent;->computeSerializedSize()I
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DefaultNetworkEvent;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-HPLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->clearEvent()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-HPLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->computeSerializedSize()I
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->emptyArray()[Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->setApfProgramEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfProgramEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->setApfStatistics(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfStatistics;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->setConnectStatistics(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ConnectStatistics;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->setDefaultNetworkEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DefaultNetworkEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->setDhcpEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->setDnsLookupBatch(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DNSLookupBatch;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->setIpProvisioningEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpProvisioningEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->setIpReachabilityEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpReachabilityEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->setNetworkEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$NetworkEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->setRaEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$RaEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->setValidationProbeEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ValidationProbeEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->setWakeupStats(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$WakeupStats;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-HPLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityLog;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityLog;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityLog;
-HPLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityLog;->computeSerializedSize()I
-HPLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityLog;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpProvisioningEvent;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpProvisioningEvent;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpProvisioningEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpProvisioningEvent;->computeSerializedSize()I
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpProvisioningEvent;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpReachabilityEvent;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpReachabilityEvent;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpReachabilityEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpReachabilityEvent;->computeSerializedSize()I
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpReachabilityEvent;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-HPLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$NetworkEvent;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$NetworkEvent;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$NetworkEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$NetworkEvent;->computeSerializedSize()I
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$NetworkEvent;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$Pair;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$Pair;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$Pair;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$Pair;->computeSerializedSize()I
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$Pair;->emptyArray()[Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$Pair;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$Pair;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$RaEvent;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$RaEvent;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$RaEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$RaEvent;->computeSerializedSize()I
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$RaEvent;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-HPLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ValidationProbeEvent;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ValidationProbeEvent;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ValidationProbeEvent;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ValidationProbeEvent;->computeSerializedSize()I
-HPLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ValidationProbeEvent;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$WakeupStats;-><init>()V
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$WakeupStats;->clear()Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$WakeupStats;
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$WakeupStats;->computeSerializedSize()I
-PLcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$WakeupStats;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
-HSPLcom/android/server/job/JobSchedulerInternal$JobStorePersistStats;-><init>()V
-PLcom/android/server/job/JobSchedulerInternal$JobStorePersistStats;-><init>(Lcom/android/server/job/JobSchedulerInternal$JobStorePersistStats;)V
-PLcom/android/server/job/JobSchedulerInternal$JobStorePersistStats;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/job/JobSchedulerInternal$JobStorePersistStats;->toString()Ljava/lang/String;
-HSPLcom/android/server/net/BaseNetdEventCallback;-><init>()V
-HPLcom/android/server/net/BaseNetdEventCallback;->onConnectEvent(Ljava/lang/String;IJI)V
-PLcom/android/server/net/BaseNetdEventCallback;->onPrivateDnsValidationEvent(ILjava/lang/String;Ljava/lang/String;Z)V
-HSPLcom/android/server/net/BaseNetworkObserver;-><init>()V
-HSPLcom/android/server/net/BaseNetworkObserver;->addressRemoved(Ljava/lang/String;Landroid/net/LinkAddress;)V
-HPLcom/android/server/net/BaseNetworkObserver;->addressUpdated(Ljava/lang/String;Landroid/net/LinkAddress;)V
-HSPLcom/android/server/net/BaseNetworkObserver;->interfaceAdded(Ljava/lang/String;)V
-HPLcom/android/server/net/BaseNetworkObserver;->interfaceClassDataActivityChanged(Ljava/lang/String;ZJ)V
-PLcom/android/server/net/BaseNetworkObserver;->interfaceDnsServerInfo(Ljava/lang/String;J[Ljava/lang/String;)V
-HSPLcom/android/server/net/BaseNetworkObserver;->interfaceLinkStateChanged(Ljava/lang/String;Z)V
-PLcom/android/server/net/BaseNetworkObserver;->interfaceRemoved(Ljava/lang/String;)V
-PLcom/android/server/net/BaseNetworkObserver;->limitReached(Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/server/net/BaseNetworkObserver;->routeRemoved(Landroid/net/RouteInfo;)V
-PLcom/android/server/net/BaseNetworkObserver;->routeUpdated(Landroid/net/RouteInfo;)V
-HPLcom/android/server/sip/SipService;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/sip/SipService;->slog(Ljava/lang/String;)V
-HPLcom/android/server/sip/SipService;->start(Landroid/content/Context;)V
-HPLcom/android/server/sip/SipWakeupTimer;-><init>(Landroid/content/Context;Ljava/util/concurrent/Executor;)V
-HSPLcom/android/server/usage/AppStandbyInternal$AppIdleStateChangeListener;-><init>()V
-HPLcom/android/server/usage/AppStandbyInternal$AppIdleStateChangeListener;->onUserInteractionStarted(Ljava/lang/String;I)V
-HSPLcom/android/server/usage/AppStandbyInternal;->newAppStandbyController(Ljava/lang/ClassLoader;Landroid/content/Context;Landroid/os/Looper;)Lcom/android/server/usage/AppStandbyInternal;
-HSPLcom/android/server/wifi/BaseWifiService;-><init>()V
-PLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;-><init>()V
-PLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;->clear()Lcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;
-PLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;->computeSerializedSize()I
-PLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;->mergeFrom(Lcom/android/framework/protobuf/nano/CodedInputByteBufferNano;)Lcom/android/framework/protobuf/nano/MessageNano;
-PLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;->mergeFrom(Lcom/android/framework/protobuf/nano/CodedInputByteBufferNano;)Lcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;
-PLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;->parseFrom([B)Lcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;
-PLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
+HSPLcom/android/telephony/Rlog;->log(ILjava/lang/String;Ljava/lang/String;)I
+HSPLcom/android/telephony/Rlog;->w(Ljava/lang/String;Ljava/lang/String;)I
 HSPLcom/google/android/collect/Lists;->newArrayList()Ljava/util/ArrayList;
-HSPLcom/google/android/collect/Lists;->newArrayList([Ljava/lang/Object;)Ljava/util/ArrayList;
-PLcom/google/android/collect/Maps;->newArrayMap()Landroid/util/ArrayMap;
 HSPLcom/google/android/collect/Maps;->newHashMap()Ljava/util/HashMap;
-PLcom/google/android/collect/Sets;->newArraySet()Landroid/util/ArraySet;
-HSPLcom/google/android/collect/Sets;->newArraySet([Ljava/lang/Object;)Landroid/util/ArraySet;
 HSPLcom/google/android/collect/Sets;->newHashSet()Ljava/util/HashSet;
 HSPLcom/google/android/collect/Sets;->newHashSet([Ljava/lang/Object;)Ljava/util/HashSet;
 HSPLcom/google/android/gles_jni/EGLConfigImpl;-><init>(J)V
-HSPLcom/google/android/gles_jni/EGLContextImpl;->equals(Ljava/lang/Object;)Z
-HSPLcom/google/android/gles_jni/EGLDisplayImpl;->equals(Ljava/lang/Object;)Z
 HSPLcom/google/android/gles_jni/EGLImpl;->eglCreateContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljavax/microedition/khronos/egl/EGLContext;[I)Ljavax/microedition/khronos/egl/EGLContext;
-HSPLcom/google/android/gles_jni/EGLImpl;->eglCreatePbufferSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;[I)Ljavax/microedition/khronos/egl/EGLSurface;
-HSPLcom/google/android/gles_jni/EGLImpl;->eglGetCurrentContext()Ljavax/microedition/khronos/egl/EGLContext;
-HSPLcom/google/android/gles_jni/EGLImpl;->eglGetCurrentDisplay()Ljavax/microedition/khronos/egl/EGLDisplay;
-HSPLcom/google/android/gles_jni/EGLImpl;->eglGetCurrentSurface(I)Ljavax/microedition/khronos/egl/EGLSurface;
 HSPLcom/google/android/gles_jni/EGLImpl;->eglGetDisplay(Ljava/lang/Object;)Ljavax/microedition/khronos/egl/EGLDisplay;
 HSPLcom/google/android/gles_jni/EGLSurfaceImpl;-><init>(J)V
-HSPLcom/google/android/gles_jni/EGLSurfaceImpl;->equals(Ljava/lang/Object;)Z
-HPLcom/google/android/rappor/Encoder;-><init>(Ljava/util/Random;Ljava/security/MessageDigest;Ljava/security/MessageDigest;[BLjava/lang/String;IDDDII)V
-HPLcom/google/android/rappor/Encoder;->checkArgument(ZLjava/lang/Object;)V
-HPLcom/google/android/rappor/Encoder;->computeInstantaneousRandomizedResponse(Ljava/util/BitSet;)Ljava/util/BitSet;
-HPLcom/google/android/rappor/Encoder;->computePermanentRandomizedResponse(Ljava/util/BitSet;)Ljava/util/BitSet;
-HPLcom/google/android/rappor/Encoder;->encodeBits(Ljava/util/BitSet;)[B
-HPLcom/google/android/rappor/Encoder;->encodeBoolean(Z)[B
-PLcom/google/android/rappor/Encoder;->verify(Z)V
-HPLcom/google/android/rappor/HmacDrbg;-><init>([B[B)V
-PLcom/google/android/rappor/HmacDrbg;->bytesConcat([[B)[B
-PLcom/google/android/rappor/HmacDrbg;->emptyIfNull([B)[B
-HPLcom/google/android/rappor/HmacDrbg;->hash([B)[B
-HPLcom/google/android/rappor/HmacDrbg;->hmacDrbgGenerate([BII)V
-HPLcom/google/android/rappor/HmacDrbg;->hmacDrbgUpdate([B)V
-HPLcom/google/android/rappor/HmacDrbg;->nextBytes(I)[B
-HPLcom/google/android/rappor/HmacDrbg;->nextBytes([B)V
-HPLcom/google/android/rappor/HmacDrbg;->nextBytes([BII)V
-HPLcom/google/android/rappor/HmacDrbg;->setKey([B)V
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$ActionSuggestion;-><init>(Ljava/lang/String;Ljava/lang/String;F[Lcom/google/android/textclassifier/NamedVariant;[B[Lcom/google/android/textclassifier/RemoteActionTemplate;)V
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$ActionSuggestion;->getActionType()Ljava/lang/String;
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$ActionSuggestion;->getEntityData()[Lcom/google/android/textclassifier/NamedVariant;
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$ActionSuggestion;->getRemoteActionTemplates()[Lcom/google/android/textclassifier/RemoteActionTemplate;
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$ActionSuggestion;->getResponseText()Ljava/lang/String;
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$ActionSuggestion;->getScore()F
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$ActionSuggestion;->getSerializedEntityData()[B
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$Conversation;->getConversationMessages()[Lcom/google/android/textclassifier/ActionsSuggestionsModel$ConversationMessage;
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$ConversationMessage;->getDetectedTextLanguageTags()Ljava/lang/String;
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$ConversationMessage;->getReferenceTimeMsUtc()J
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$ConversationMessage;->getReferenceTimezone()Ljava/lang/String;
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$ConversationMessage;->getText()Ljava/lang/String;
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel$ConversationMessage;->getUserId()I
-PLcom/google/android/textclassifier/ActionsSuggestionsModel;-><clinit>()V
-HPLcom/google/android/textclassifier/ActionsSuggestionsModel;-><init>(I[B)V
-PLcom/google/android/textclassifier/ActionsSuggestionsModel;->getLocales(I)Ljava/lang/String;
-PLcom/google/android/textclassifier/ActionsSuggestionsModel;->getVersion(I)I
-PLcom/google/android/textclassifier/AnnotatorModel;-><clinit>()V
-HPLcom/google/android/textclassifier/AnnotatorModel;-><init>(I)V
-HPLcom/google/android/textclassifier/AnnotatorModel;->annotate(Ljava/lang/String;Lcom/google/android/textclassifier/AnnotatorModel$AnnotationOptions;)[Lcom/google/android/textclassifier/AnnotatorModel$AnnotatedSpan;
-PLcom/google/android/textclassifier/AnnotatorModel;->getLocales(I)Ljava/lang/String;
-PLcom/google/android/textclassifier/AnnotatorModel;->getVersion(I)I
-HPLcom/google/android/textclassifier/LangIdModel$LanguageResult;-><init>(Ljava/lang/String;F)V
-HPLcom/google/android/textclassifier/LangIdModel$LanguageResult;->getLanguage()Ljava/lang/String;
-HPLcom/google/android/textclassifier/LangIdModel$LanguageResult;->getScore()F
-PLcom/google/android/textclassifier/LangIdModel;-><clinit>()V
-HPLcom/google/android/textclassifier/LangIdModel;-><init>(I)V
-PLcom/google/android/textclassifier/LangIdModel;->getVersion(I)I
-HPLcom/google/android/textclassifier/NamedVariant;-><clinit>()V
-HPLcom/google/android/textclassifier/NamedVariant;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HPLcom/google/android/textclassifier/NamedVariant;->getName()Ljava/lang/String;
-HPLcom/google/android/textclassifier/NamedVariant;->getString()Ljava/lang/String;
-HPLcom/google/android/textclassifier/NamedVariant;->getType()I
-HPLcom/google/android/textclassifier/RemoteActionTemplate;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;[Ljava/lang/String;Ljava/lang/String;[Lcom/google/android/textclassifier/NamedVariant;Ljava/lang/Integer;)V
-HSPLdalvik/system/-$$Lambda$DexPathList$_CyMypnZmV6ArWiPOPB4EkAIeUc;->test(Ljava/lang/Object;)Z
 HSPLdalvik/system/BaseDexClassLoader;-><init>(Ljava/lang/String;Ljava/io/File;Ljava/lang/String;Ljava/lang/ClassLoader;)V
 HSPLdalvik/system/BaseDexClassLoader;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;[Ljava/lang/ClassLoader;)V
 HSPLdalvik/system/BaseDexClassLoader;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;[Ljava/lang/ClassLoader;Z)V
-HSPLdalvik/system/BaseDexClassLoader;-><init>([Ljava/nio/ByteBuffer;Ljava/lang/String;Ljava/lang/ClassLoader;)V
 HSPLdalvik/system/BaseDexClassLoader;->addNativePath(Ljava/util/Collection;)V
 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;
 HSPLdalvik/system/BaseDexClassLoader;->getLdLibraryPath()Ljava/lang/String;
 HSPLdalvik/system/BaseDexClassLoader;->getPackage(Ljava/lang/String;)Ljava/lang/Package;
 HSPLdalvik/system/BaseDexClassLoader;->reportClassLoaderChain()V
@@ -34985,6 +15860,7 @@
 HSPLdalvik/system/BlockGuard$3;->initialValue()Ljava/lang/Object;
 HSPLdalvik/system/BlockGuard;->getThreadPolicy()Ldalvik/system/BlockGuard$Policy;
 HSPLdalvik/system/BlockGuard;->getVmPolicy()Ldalvik/system/BlockGuard$VmPolicy;
+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
@@ -34998,23 +15874,12 @@
 HSPLdalvik/system/DelegateLastClassLoader;-><init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V
 HSPLdalvik/system/DelegateLastClassLoader;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)V
 HSPLdalvik/system/DelegateLastClassLoader;->loadClass(Ljava/lang/String;Z)Ljava/lang/Class;
-HSPLdalvik/system/DexClassLoader;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V
-PLdalvik/system/DexFile$OptimizationInfo;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-PLdalvik/system/DexFile$OptimizationInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ldalvik/system/DexFile$1;)V
-PLdalvik/system/DexFile$OptimizationInfo;->getReason()Ljava/lang/String;
-PLdalvik/system/DexFile$OptimizationInfo;->getStatus()Ljava/lang/String;
 HSPLdalvik/system/DexFile;-><init>(Ljava/io/File;Ljava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)V
 HSPLdalvik/system/DexFile;-><init>(Ljava/lang/String;Ljava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)V
-HSPLdalvik/system/DexFile;-><init>([Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)V
 HSPLdalvik/system/DexFile;->defineClass(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/Object;Ldalvik/system/DexFile;Ljava/util/List;)Ljava/lang/Class;
 HSPLdalvik/system/DexFile;->finalize()V
-PLdalvik/system/DexFile;->getDexFileOptimizationInfo(Ljava/lang/String;Ljava/lang/String;)Ldalvik/system/DexFile$OptimizationInfo;
-HSPLdalvik/system/DexFile;->isBackedByOatFile()Z
 HSPLdalvik/system/DexFile;->loadClassBinaryName(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/List;)Ljava/lang/Class;
 HSPLdalvik/system/DexFile;->openDexFile(Ljava/lang/String;Ljava/lang/String;ILjava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ljava/lang/Object;
-HSPLdalvik/system/DexFile;->openInMemoryDexFiles([Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ljava/lang/Object;
-HSPLdalvik/system/DexFile;->toString()Ljava/lang/String;
-HSPLdalvik/system/DexPathList$Element;-><init>(Ldalvik/system/DexFile;)V
 HSPLdalvik/system/DexPathList$Element;-><init>(Ldalvik/system/DexFile;Ljava/io/File;)V
 HSPLdalvik/system/DexPathList$Element;-><init>(Ljava/io/File;)V
 HSPLdalvik/system/DexPathList$Element;->access$000(Ldalvik/system/DexPathList$Element;)Ljava/lang/String;
@@ -35028,46 +15893,34 @@
 HSPLdalvik/system/DexPathList$NativeLibraryElement;->equals(Ljava/lang/Object;)Z
 HSPLdalvik/system/DexPathList$NativeLibraryElement;->findNativeLibrary(Ljava/lang/String;)Ljava/lang/String;
 HSPLdalvik/system/DexPathList$NativeLibraryElement;->maybeInit()V
-HSPLdalvik/system/DexPathList;-><init>(Ljava/lang/ClassLoader;Ljava/lang/String;)V
 HSPLdalvik/system/DexPathList;-><init>(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Z)V
 HSPLdalvik/system/DexPathList;->addNativePath(Ljava/util/Collection;)V
 HSPLdalvik/system/DexPathList;->findClass(Ljava/lang/String;Ljava/util/List;)Ljava/lang/Class;
 HSPLdalvik/system/DexPathList;->findLibrary(Ljava/lang/String;)Ljava/lang/String;
 HSPLdalvik/system/DexPathList;->findResource(Ljava/lang/String;)Ljava/net/URL;
-HSPLdalvik/system/DexPathList;->findResources(Ljava/lang/String;)Ljava/util/Enumeration;
 HSPLdalvik/system/DexPathList;->getAllNativeLibraryDirectories()Ljava/util/List;
 HSPLdalvik/system/DexPathList;->getDexPaths()Ljava/util/List;
 HSPLdalvik/system/DexPathList;->getNativeLibraryDirectories()Ljava/util/List;
-HSPLdalvik/system/DexPathList;->initByteBufferDexPath([Ljava/nio/ByteBuffer;)V
-HSPLdalvik/system/DexPathList;->lambda$initByteBufferDexPath$0(Ljava/nio/ByteBuffer;)Z
 HSPLdalvik/system/DexPathList;->loadDexFile(Ljava/io/File;Ljava/io/File;Ljava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ldalvik/system/DexFile;
 HSPLdalvik/system/DexPathList;->makeDexElements(Ljava/util/List;Ljava/io/File;Ljava/util/List;Ljava/lang/ClassLoader;Z)[Ldalvik/system/DexPathList$Element;
 HSPLdalvik/system/DexPathList;->makePathElements(Ljava/util/List;)[Ldalvik/system/DexPathList$NativeLibraryElement;
 HSPLdalvik/system/DexPathList;->splitDexPath(Ljava/lang/String;)Ljava/util/List;
 HSPLdalvik/system/DexPathList;->splitPaths(Ljava/lang/String;Z)Ljava/util/List;
 HSPLdalvik/system/DexPathList;->toString()Ljava/lang/String;
-HSPLdalvik/system/InMemoryDexClassLoader;-><init>(Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V
-HSPLdalvik/system/InMemoryDexClassLoader;-><init>([Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V
-HSPLdalvik/system/InMemoryDexClassLoader;-><init>([Ljava/nio/ByteBuffer;Ljava/lang/String;Ljava/lang/ClassLoader;)V
 HSPLdalvik/system/PathClassLoader;-><init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V
 HSPLdalvik/system/PathClassLoader;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V
 HSPLdalvik/system/PathClassLoader;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;[Ljava/lang/ClassLoader;)V
+HSPLdalvik/system/RuntimeHooks;->getThreadPrioritySetter()Ldalvik/system/ThreadPrioritySetter;
 HSPLdalvik/system/RuntimeHooks;->getTimeZoneIdSupplier()Ljava/util/function/Supplier;
 HSPLdalvik/system/RuntimeHooks;->setTimeZoneIdSupplier(Ljava/util/function/Supplier;)V
 HSPLdalvik/system/RuntimeHooks;->setUncaughtExceptionPreHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V
 HSPLdalvik/system/SocketTagger;-><init>()V
 HSPLdalvik/system/SocketTagger;->get()Ldalvik/system/SocketTagger;
 HSPLdalvik/system/SocketTagger;->set(Ldalvik/system/SocketTagger;)V
-HSPLdalvik/system/SocketTagger;->untag(Ljava/net/Socket;)V
-HPLdalvik/system/VMDebug;->checkBufferSize(I)I
-HPLdalvik/system/VMDebug;->getRuntimeStats()Ljava/util/Map;
-HPLdalvik/system/VMDebug;->startMethodTracing(Ljava/lang/String;IIZI)V
 HSPLdalvik/system/VMRuntime;->getInstructionSet(Ljava/lang/String;)Ljava/lang/String;
 HSPLdalvik/system/VMRuntime;->getRuntime()Ldalvik/system/VMRuntime;
 HSPLdalvik/system/VMRuntime;->getTargetSdkVersion()I
 HSPLdalvik/system/VMRuntime;->hiddenApiUsed(ILjava/lang/String;Ljava/lang/String;IZ)V
-PLdalvik/system/VMRuntime;->is64BitAbi(Ljava/lang/String;)Z
-HSPLdalvik/system/VMRuntime;->is64BitInstructionSet(Ljava/lang/String;)Z
 HSPLdalvik/system/VMRuntime;->notifyNativeAllocation()V
 HSPLdalvik/system/VMRuntime;->registerNativeAllocation(I)V
 HSPLdalvik/system/VMRuntime;->registerNativeFree(I)V
@@ -35081,17 +15934,14 @@
 HSPLdalvik/system/ZygoteHooks;->onEndPreload()V
 HSPLdalvik/system/ZygoteHooks;->postForkChild(IZZLjava/lang/String;)V
 HSPLdalvik/system/ZygoteHooks;->postForkCommon()V
-HSPLdalvik/system/ZygoteHooks;->postForkSystemServer(I)V
 HSPLdalvik/system/ZygoteHooks;->preFork()V
 HSPLdalvik/system/ZygoteHooks;->waitUntilAllThreadsStopped()V
 HSPLjava/io/Bits;->getBoolean([BI)Z
-HSPLjava/io/Bits;->getDouble([BI)D
 HSPLjava/io/Bits;->getFloat([BI)F
 HSPLjava/io/Bits;->getInt([BI)I
 HSPLjava/io/Bits;->getLong([BI)J
 HSPLjava/io/Bits;->getShort([BI)S
 HSPLjava/io/Bits;->putBoolean([BIZ)V
-HSPLjava/io/Bits;->putDouble([BID)V
 HSPLjava/io/Bits;->putFloat([BIF)V
 HSPLjava/io/Bits;->putInt([BII)V
 HSPLjava/io/Bits;->putLong([BIJ)V
@@ -35121,14 +15971,11 @@
 HSPLjava/io/BufferedReader;->close()V
 HSPLjava/io/BufferedReader;->ensureOpen()V
 HSPLjava/io/BufferedReader;->fill()V
-HPLjava/io/BufferedReader;->mark(I)V
 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(Z)Ljava/lang/String;
-HPLjava/io/BufferedReader;->reset()V
-HPLjava/io/BufferedReader;->skip(J)J
 HSPLjava/io/BufferedWriter;-><init>(Ljava/io/Writer;)V
 HSPLjava/io/BufferedWriter;-><init>(Ljava/io/Writer;I)V
 HSPLjava/io/BufferedWriter;->close()V
@@ -35139,7 +15986,6 @@
 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
 HSPLjava/io/ByteArrayInputStream;-><init>([B)V
 HSPLjava/io/ByteArrayInputStream;-><init>([BII)V
 HSPLjava/io/ByteArrayInputStream;->available()I
@@ -35168,45 +16014,32 @@
 HSPLjava/io/CharArrayWriter;->flush()V
 HSPLjava/io/CharArrayWriter;->reset()V
 HSPLjava/io/CharArrayWriter;->toCharArray()[C
-PLjava/io/CharArrayWriter;->toString()Ljava/lang/String;
 HSPLjava/io/CharArrayWriter;->write(I)V
-HPLjava/io/CharArrayWriter;->write(Ljava/lang/String;II)V
-HPLjava/io/CharArrayWriter;->write([CII)V
 HSPLjava/io/DataInputStream;-><init>(Ljava/io/InputStream;)V
 HSPLjava/io/DataInputStream;->read([B)I
 HSPLjava/io/DataInputStream;->read([BII)I
 HSPLjava/io/DataInputStream;->readBoolean()Z
 HSPLjava/io/DataInputStream;->readByte()B
-HSPLjava/io/DataInputStream;->readDouble()D
 HSPLjava/io/DataInputStream;->readFully([B)V
 HSPLjava/io/DataInputStream;->readFully([BII)V
 HSPLjava/io/DataInputStream;->readInt()I
 HSPLjava/io/DataInputStream;->readLong()J
-HSPLjava/io/DataInputStream;->readShort()S
 HSPLjava/io/DataInputStream;->readUTF()Ljava/lang/String;
 HSPLjava/io/DataInputStream;->readUTF(Ljava/io/DataInput;)Ljava/lang/String;
-HSPLjava/io/DataInputStream;->readUnsignedByte()I
 HSPLjava/io/DataInputStream;->readUnsignedShort()I
 HSPLjava/io/DataInputStream;->skipBytes(I)I
 HSPLjava/io/DataOutputStream;-><init>(Ljava/io/OutputStream;)V
 HSPLjava/io/DataOutputStream;->flush()V
 HSPLjava/io/DataOutputStream;->incCount(I)V
-HSPLjava/io/DataOutputStream;->size()I
-PLjava/io/DataOutputStream;->write(I)V
 HSPLjava/io/DataOutputStream;->write([BII)V
 HSPLjava/io/DataOutputStream;->writeBoolean(Z)V
-HPLjava/io/DataOutputStream;->writeByte(I)V
-HPLjava/io/DataOutputStream;->writeDouble(D)V
+HSPLjava/io/DataOutputStream;->writeByte(I)V
 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
-HSPLjava/io/DeleteOnExitHook$1;-><init>()V
-HSPLjava/io/DeleteOnExitHook;-><clinit>()V
-HSPLjava/io/DeleteOnExitHook;->add(Ljava/lang/String;)V
 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
@@ -35214,17 +16047,11 @@
 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/lang/String;)V
-HSPLjava/io/File;-><init>(Ljava/net/URI;)V
-HSPLjava/io/File;->canExecute()Z
 HSPLjava/io/File;->canRead()Z
 HSPLjava/io/File;->canWrite()Z
 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;
-HSPLjava/io/File;->createTempFile(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)Ljava/io/File;
 HSPLjava/io/File;->delete()Z
-HSPLjava/io/File;->deleteOnExit()V
 HSPLjava/io/File;->equals(Ljava/lang/Object;)Z
 HSPLjava/io/File;->exists()Z
 HSPLjava/io/File;->getAbsoluteFile()Ljava/io/File;
@@ -35247,19 +16074,13 @@
 HSPLjava/io/File;->lastModified()J
 HSPLjava/io/File;->length()J
 HSPLjava/io/File;->list()[Ljava/lang/String;
-HSPLjava/io/File;->list(Ljava/io/FilenameFilter;)[Ljava/lang/String;
 HSPLjava/io/File;->listFiles()[Ljava/io/File;
 HSPLjava/io/File;->listFiles(Ljava/io/FileFilter;)[Ljava/io/File;
 HSPLjava/io/File;->listFiles(Ljava/io/FilenameFilter;)[Ljava/io/File;
 HSPLjava/io/File;->mkdir()Z
 HSPLjava/io/File;->mkdirs()Z
 HSPLjava/io/File;->renameTo(Ljava/io/File;)Z
-HSPLjava/io/File;->setExecutable(ZZ)Z
 HSPLjava/io/File;->setLastModified(J)Z
-HPLjava/io/File;->setReadOnly()Z
-HSPLjava/io/File;->setReadable(ZZ)Z
-HPLjava/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;->toString()Ljava/lang/String;
 HSPLjava/io/File;->toURI()Ljava/net/URI;
@@ -35291,8 +16112,6 @@
 HSPLjava/io/FileOutputStream;-><init>(Ljava/io/File;Z)V
 HSPLjava/io/FileOutputStream;-><init>(Ljava/io/FileDescriptor;)V
 HSPLjava/io/FileOutputStream;-><init>(Ljava/io/FileDescriptor;Z)V
-HSPLjava/io/FileOutputStream;-><init>(Ljava/lang/String;)V
-HSPLjava/io/FileOutputStream;-><init>(Ljava/lang/String;Z)V
 HSPLjava/io/FileOutputStream;->close()V
 HSPLjava/io/FileOutputStream;->finalize()V
 HSPLjava/io/FileOutputStream;->getChannel()Ljava/nio/channels/FileChannel;
@@ -35304,17 +16123,13 @@
 HSPLjava/io/FileReader;-><init>(Ljava/lang/String;)V
 HSPLjava/io/FileWriter;-><init>(Ljava/io/File;)V
 HSPLjava/io/FileWriter;-><init>(Ljava/io/File;Z)V
-PLjava/io/FileWriter;-><init>(Ljava/lang/String;)V
 HSPLjava/io/FilterInputStream;-><init>(Ljava/io/InputStream;)V
 HSPLjava/io/FilterInputStream;->available()I
 HSPLjava/io/FilterInputStream;->close()V
 HSPLjava/io/FilterInputStream;->mark(I)V
-HSPLjava/io/FilterInputStream;->markSupported()Z
 HSPLjava/io/FilterInputStream;->read()I
 HSPLjava/io/FilterInputStream;->read([B)I
 HSPLjava/io/FilterInputStream;->read([BII)I
-HSPLjava/io/FilterInputStream;->reset()V
-HSPLjava/io/FilterInputStream;->skip(J)J
 HSPLjava/io/FilterOutputStream;-><init>(Ljava/io/OutputStream;)V
 HSPLjava/io/FilterOutputStream;->close()V
 HSPLjava/io/FilterOutputStream;->flush()V
@@ -35324,9 +16139,7 @@
 HSPLjava/io/IOException;-><init>()V
 HSPLjava/io/IOException;-><init>(Ljava/lang/String;)V
 HSPLjava/io/IOException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
-HSPLjava/io/IOException;-><init>(Ljava/lang/Throwable;)V
 HSPLjava/io/InputStream;-><init>()V
-HSPLjava/io/InputStream;->available()I
 HSPLjava/io/InputStream;->close()V
 HSPLjava/io/InputStream;->markSupported()Z
 HSPLjava/io/InputStream;->read([B)I
@@ -35334,12 +16147,9 @@
 HSPLjava/io/InputStreamReader;-><init>(Ljava/io/InputStream;)V
 HSPLjava/io/InputStreamReader;-><init>(Ljava/io/InputStream;Ljava/lang/String;)V
 HSPLjava/io/InputStreamReader;-><init>(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
-HSPLjava/io/InputStreamReader;-><init>(Ljava/io/InputStream;Ljava/nio/charset/CharsetDecoder;)V
 HSPLjava/io/InputStreamReader;->close()V
-HSPLjava/io/InputStreamReader;->read()I
 HSPLjava/io/InputStreamReader;->read([CII)I
 HSPLjava/io/InputStreamReader;->ready()Z
-HPLjava/io/InterruptedIOException;-><init>()V
 HSPLjava/io/InterruptedIOException;-><init>(Ljava/lang/String;)V
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;-><init>(Ljava/io/ObjectInputStream;Ljava/io/InputStream;)V
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->close()V
@@ -35353,7 +16163,6 @@
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readBlockHeader(Z)I
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readBoolean()Z
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readByte()B
-HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readFloats([FII)V
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readFully([BIIZ)V
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readInt()I
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readLong()J
@@ -35389,7 +16198,6 @@
 HSPLjava/io/ObjectInputStream$ValidationList;->doCallbacks()V
 HSPLjava/io/ObjectInputStream;-><init>(Ljava/io/InputStream;)V
 HSPLjava/io/ObjectInputStream;->access$500(Ljava/io/ObjectInputStream;)Z
-HSPLjava/io/ObjectInputStream;->access$700([BI[FII)V
 HSPLjava/io/ObjectInputStream;->checkResolve(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/io/ObjectInputStream;->clear()V
 HSPLjava/io/ObjectInputStream;->close()V
@@ -35402,8 +16210,6 @@
 HSPLjava/io/ObjectInputStream;->readByte()B
 HSPLjava/io/ObjectInputStream;->readClassDesc(Z)Ljava/io/ObjectStreamClass;
 HSPLjava/io/ObjectInputStream;->readClassDescriptor()Ljava/io/ObjectStreamClass;
-HSPLjava/io/ObjectInputStream;->readEnum(Z)Ljava/lang/Enum;
-HSPLjava/io/ObjectInputStream;->readFully([B)V
 HSPLjava/io/ObjectInputStream;->readHandle(Z)Ljava/lang/Object;
 HSPLjava/io/ObjectInputStream;->readInt()I
 HSPLjava/io/ObjectInputStream;->readLong()J
@@ -35432,14 +16238,11 @@
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeBlockHeader(I)V
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeByte(I)V
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeBytes(Ljava/lang/String;)V
-HPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeFloat(F)V
-HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeFloats([FII)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;->writeUTFBody(Ljava/lang/String;)V
 HSPLjava/io/ObjectOutputStream$HandleTable;-><init>(IF)V
 HSPLjava/io/ObjectOutputStream$HandleTable;->assign(Ljava/lang/Object;)I
 HSPLjava/io/ObjectOutputStream$HandleTable;->clear()V
@@ -35449,10 +16252,8 @@
 HSPLjava/io/ObjectOutputStream$HandleTable;->insert(Ljava/lang/Object;I)V
 HSPLjava/io/ObjectOutputStream$HandleTable;->lookup(Ljava/lang/Object;)I
 HSPLjava/io/ObjectOutputStream$ReplaceTable;-><init>(IF)V
-HSPLjava/io/ObjectOutputStream$ReplaceTable;->assign(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLjava/io/ObjectOutputStream$ReplaceTable;->lookup(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/io/ObjectOutputStream;-><init>(Ljava/io/OutputStream;)V
-HSPLjava/io/ObjectOutputStream;->access$200([FI[BII)V
 HSPLjava/io/ObjectOutputStream;->annotateClass(Ljava/lang/Class;)V
 HSPLjava/io/ObjectOutputStream;->close()V
 HSPLjava/io/ObjectOutputStream;->defaultWriteFields(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V
@@ -35460,13 +16261,11 @@
 HSPLjava/io/ObjectOutputStream;->flush()V
 HSPLjava/io/ObjectOutputStream;->isCustomSubclass()Z
 HSPLjava/io/ObjectOutputStream;->verifySubclass()V
-HSPLjava/io/ObjectOutputStream;->write([B)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;->writeClassDescriptor(Ljava/io/ObjectStreamClass;)V
 HSPLjava/io/ObjectOutputStream;->writeEnum(Ljava/lang/Enum;Ljava/io/ObjectStreamClass;Z)V
-HPLjava/io/ObjectOutputStream;->writeFloat(F)V
 HSPLjava/io/ObjectOutputStream;->writeHandle(I)V
 HSPLjava/io/ObjectOutputStream;->writeInt(I)V
 HSPLjava/io/ObjectOutputStream;->writeLong(J)V
@@ -35491,8 +16290,6 @@
 HSPLjava/io/ObjectStreamClass$3;->compare(Ljava/io/ObjectStreamClass$MemberSignature;Ljava/io/ObjectStreamClass$MemberSignature;)I
 HSPLjava/io/ObjectStreamClass$3;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLjava/io/ObjectStreamClass$4;-><init>()V
-HSPLjava/io/ObjectStreamClass$4;->compare(Ljava/io/ObjectStreamClass$MemberSignature;Ljava/io/ObjectStreamClass$MemberSignature;)I
-HSPLjava/io/ObjectStreamClass$4;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLjava/io/ObjectStreamClass$5;-><init>()V
 HSPLjava/io/ObjectStreamClass$5;->compare(Ljava/io/ObjectStreamClass$MemberSignature;Ljava/io/ObjectStreamClass$MemberSignature;)I
 HSPLjava/io/ObjectStreamClass$5;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
@@ -35501,8 +16298,6 @@
 HSPLjava/io/ObjectStreamClass$ClassDataSlot;-><init>(Ljava/io/ObjectStreamClass;Z)V
 HSPLjava/io/ObjectStreamClass$EntryFuture;-><init>()V
 HSPLjava/io/ObjectStreamClass$EntryFuture;-><init>(Ljava/io/ObjectStreamClass$1;)V
-HSPLjava/io/ObjectStreamClass$EntryFuture;->get()Ljava/lang/Object;
-HSPLjava/io/ObjectStreamClass$EntryFuture;->getOwner()Ljava/lang/Thread;
 HSPLjava/io/ObjectStreamClass$EntryFuture;->set(Ljava/lang/Object;)Z
 HSPLjava/io/ObjectStreamClass$ExceptionInfo;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/io/ObjectStreamClass$FieldReflector;-><init>([Ljava/io/ObjectStreamField;)V
@@ -35563,7 +16358,6 @@
 HSPLjava/io/ObjectStreamClass;->getName()Ljava/lang/String;
 HSPLjava/io/ObjectStreamClass;->getNumObjFields()I
 HSPLjava/io/ObjectStreamClass;->getObjFieldValues(Ljava/lang/Object;[Ljava/lang/Object;)V
-HSPLjava/io/ObjectStreamClass;->getPackageName(Ljava/lang/Class;)Ljava/lang/String;
 HSPLjava/io/ObjectStreamClass;->getPrimDataSize()I
 HSPLjava/io/ObjectStreamClass;->getPrimFieldValues(Ljava/lang/Object;[B)V
 HSPLjava/io/ObjectStreamClass;->getPrivateMethod(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Method;
@@ -35583,15 +16377,12 @@
 HSPLjava/io/ObjectStreamClass;->invokeReadObject(Ljava/lang/Object;Ljava/io/ObjectInputStream;)V
 HSPLjava/io/ObjectStreamClass;->invokeReadResolve(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/io/ObjectStreamClass;->invokeWriteObject(Ljava/lang/Object;Ljava/io/ObjectOutputStream;)V
-HSPLjava/io/ObjectStreamClass;->invokeWriteReplace(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/io/ObjectStreamClass;->isEnum()Z
 HSPLjava/io/ObjectStreamClass;->isExternalizable()Z
 HSPLjava/io/ObjectStreamClass;->isInstantiable()Z
 HSPLjava/io/ObjectStreamClass;->isProxy()Z
 HSPLjava/io/ObjectStreamClass;->lookup(Ljava/lang/Class;Z)Ljava/io/ObjectStreamClass;
 HSPLjava/io/ObjectStreamClass;->matchFields([Ljava/io/ObjectStreamField;Ljava/io/ObjectStreamClass;)[Ljava/io/ObjectStreamField;
 HSPLjava/io/ObjectStreamClass;->newInstance()Ljava/lang/Object;
-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
 HSPLjava/io/ObjectStreamClass;->requireInitialized()V
@@ -35622,85 +16413,38 @@
 HSPLjava/io/OutputStreamWriter;-><init>(Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V
 HSPLjava/io/OutputStreamWriter;->close()V
 HSPLjava/io/OutputStreamWriter;->flush()V
-HSPLjava/io/OutputStreamWriter;->flushBuffer()V
 HSPLjava/io/OutputStreamWriter;->write(I)V
 HSPLjava/io/OutputStreamWriter;->write(Ljava/lang/String;II)V
 HSPLjava/io/OutputStreamWriter;->write([CII)V
-HSPLjava/io/PipedInputStream;-><clinit>()V
-PLjava/io/PipedInputStream;-><init>(Ljava/io/PipedOutputStream;)V
-PLjava/io/PipedInputStream;-><init>(Ljava/io/PipedOutputStream;I)V
-HSPLjava/io/PipedInputStream;->awaitSpace()V
-HSPLjava/io/PipedInputStream;->checkStateForReceive()V
-PLjava/io/PipedInputStream;->close()V
-PLjava/io/PipedInputStream;->connect(Ljava/io/PipedOutputStream;)V
-HSPLjava/io/PipedInputStream;->initPipe(I)V
-HSPLjava/io/PipedInputStream;->read()I
-HSPLjava/io/PipedInputStream;->read([BII)I
-HSPLjava/io/PipedInputStream;->receive([BII)V
-PLjava/io/PipedInputStream;->receivedLast()V
-PLjava/io/PipedOutputStream;-><init>()V
-PLjava/io/PipedOutputStream;->close()V
-HSPLjava/io/PipedOutputStream;->connect(Ljava/io/PipedInputStream;)V
-HSPLjava/io/PipedOutputStream;->write([BII)V
 HSPLjava/io/PrintStream;-><init>(Ljava/io/OutputStream;)V
 HSPLjava/io/PrintStream;-><init>(Ljava/io/OutputStream;Z)V
-HSPLjava/io/PrintStream;-><init>(Ljava/io/OutputStream;ZLjava/lang/String;)V
 HSPLjava/io/PrintStream;-><init>(ZLjava/io/OutputStream;)V
-HSPLjava/io/PrintStream;-><init>(ZLjava/io/OutputStream;Ljava/nio/charset/Charset;)V
 HSPLjava/io/PrintStream;->close()V
-HSPLjava/io/PrintStream;->ensureOpen()V
-PLjava/io/PrintStream;->flush()V
-HSPLjava/io/PrintStream;->getTextOut()Ljava/io/BufferedWriter;
-HSPLjava/io/PrintStream;->newLine()V
-HSPLjava/io/PrintStream;->print(C)V
-HSPLjava/io/PrintStream;->print(Ljava/lang/String;)V
-HSPLjava/io/PrintStream;->println(Ljava/lang/String;)V
 HSPLjava/io/PrintStream;->requireNonNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
-HSPLjava/io/PrintStream;->toCharset(Ljava/lang/String;)Ljava/nio/charset/Charset;
-HSPLjava/io/PrintStream;->write(Ljava/lang/String;)V
-HSPLjava/io/PrintStream;->write([BII)V
-PLjava/io/PrintWriter;-><init>(Ljava/io/File;)V
 HSPLjava/io/PrintWriter;-><init>(Ljava/io/OutputStream;)V
 HSPLjava/io/PrintWriter;-><init>(Ljava/io/OutputStream;Z)V
 HSPLjava/io/PrintWriter;-><init>(Ljava/io/Writer;)V
 HSPLjava/io/PrintWriter;-><init>(Ljava/io/Writer;Z)V
-PLjava/io/PrintWriter;->append(C)Ljava/io/PrintWriter;
-HPLjava/io/PrintWriter;->append(C)Ljava/lang/Appendable;
+HSPLjava/io/PrintWriter;->append(C)Ljava/io/PrintWriter;
 HSPLjava/io/PrintWriter;->append(Ljava/lang/CharSequence;)Ljava/io/PrintWriter;
 HSPLjava/io/PrintWriter;->append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;
-HSPLjava/io/PrintWriter;->append(Ljava/lang/CharSequence;II)Ljava/io/PrintWriter;
-HPLjava/io/PrintWriter;->append(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;
 HSPLjava/io/PrintWriter;->close()V
 HSPLjava/io/PrintWriter;->ensureOpen()V
 HSPLjava/io/PrintWriter;->flush()V
 HSPLjava/io/PrintWriter;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;
-HPLjava/io/PrintWriter;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;
 HSPLjava/io/PrintWriter;->newLine()V
-HSPLjava/io/PrintWriter;->print(C)V
-HPLjava/io/PrintWriter;->print(D)V
-HSPLjava/io/PrintWriter;->print(F)V
 HSPLjava/io/PrintWriter;->print(I)V
 HSPLjava/io/PrintWriter;->print(J)V
-HSPLjava/io/PrintWriter;->print(Ljava/lang/Object;)V
 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
-PLjava/io/PrintWriter;->println(D)V
-HSPLjava/io/PrintWriter;->println(F)V
-HSPLjava/io/PrintWriter;->println(I)V
-HSPLjava/io/PrintWriter;->println(J)V
 HSPLjava/io/PrintWriter;->println(Ljava/lang/Object;)V
 HSPLjava/io/PrintWriter;->println(Ljava/lang/String;)V
-HSPLjava/io/PrintWriter;->println(Z)V
 HSPLjava/io/PrintWriter;->write(I)V
 HSPLjava/io/PrintWriter;->write(Ljava/lang/String;)V
 HSPLjava/io/PrintWriter;->write(Ljava/lang/String;II)V
 HSPLjava/io/PrintWriter;->write([CII)V
 HSPLjava/io/PushbackInputStream;-><init>(Ljava/io/InputStream;I)V
-HSPLjava/io/PushbackInputStream;->close()V
 HSPLjava/io/PushbackInputStream;->ensureOpen()V
-HSPLjava/io/PushbackInputStream;->markSupported()Z
 HSPLjava/io/PushbackInputStream;->read()I
 HSPLjava/io/PushbackInputStream;->read([BII)I
 HSPLjava/io/PushbackInputStream;->unread([BII)V
@@ -35720,33 +16464,22 @@
 HSPLjava/io/RandomAccessFile;->read()I
 HSPLjava/io/RandomAccessFile;->read([B)I
 HSPLjava/io/RandomAccessFile;->read([BII)I
-HSPLjava/io/RandomAccessFile;->readByte()B
 HSPLjava/io/RandomAccessFile;->readBytes([BII)I
 HSPLjava/io/RandomAccessFile;->readFully([B)V
 HSPLjava/io/RandomAccessFile;->readFully([BII)V
 HSPLjava/io/RandomAccessFile;->readInt()I
-HSPLjava/io/RandomAccessFile;->readLine()Ljava/lang/String;
-HSPLjava/io/RandomAccessFile;->readLong()J
 HSPLjava/io/RandomAccessFile;->seek(J)V
 HSPLjava/io/RandomAccessFile;->setLength(J)V
-HSPLjava/io/RandomAccessFile;->write(I)V
 HSPLjava/io/RandomAccessFile;->write([B)V
 HSPLjava/io/RandomAccessFile;->write([BII)V
-PLjava/io/RandomAccessFile;->writeBoolean(Z)V
 HSPLjava/io/RandomAccessFile;->writeBytes([BII)V
-HSPLjava/io/RandomAccessFile;->writeInt(I)V
-HSPLjava/io/RandomAccessFile;->writeLong(J)V
-PLjava/io/RandomAccessFile;->writeUTF(Ljava/lang/String;)V
 HSPLjava/io/Reader;-><init>()V
 HSPLjava/io/Reader;-><init>(Ljava/lang/Object;)V
 HSPLjava/io/Reader;->read(Ljava/nio/CharBuffer;)I
 HSPLjava/io/Reader;->read([C)I
 HSPLjava/io/SequenceInputStream;-><init>(Ljava/io/InputStream;Ljava/io/InputStream;)V
-PLjava/io/SequenceInputStream;->available()I
-PLjava/io/SequenceInputStream;->close()V
 HSPLjava/io/SequenceInputStream;->nextStream()V
 HSPLjava/io/SequenceInputStream;->read()I
-HPLjava/io/SequenceInputStream;->read([BII)I
 HSPLjava/io/SerialCallbackContext;-><init>(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V
 HSPLjava/io/SerialCallbackContext;->check()V
 HSPLjava/io/SerialCallbackContext;->checkAndSetUsed()V
@@ -35756,33 +16489,26 @@
 HSPLjava/io/StringReader;-><init>(Ljava/lang/String;)V
 HSPLjava/io/StringReader;->close()V
 HSPLjava/io/StringReader;->ensureOpen()V
-HSPLjava/io/StringReader;->markSupported()Z
 HSPLjava/io/StringReader;->read()I
 HSPLjava/io/StringReader;->read([CII)I
 HSPLjava/io/StringWriter;-><init>()V
-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;
 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
 HSPLjava/io/StringWriter;->write(Ljava/lang/String;)V
 HSPLjava/io/StringWriter;->write(Ljava/lang/String;II)V
 HSPLjava/io/StringWriter;->write([CII)V
-HSPLjava/io/SyncFailedException;-><init>(Ljava/lang/String;)V
 HSPLjava/io/UnixFileSystem;->canonicalize(Ljava/lang/String;)Ljava/lang/String;
 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;->fromURIPath(Ljava/lang/String;)Ljava/lang/String;
 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
@@ -35796,13 +16522,11 @@
 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
-HPLjava/io/UnixFileSystem;->setReadOnly(Ljava/io/File;)Z
 HSPLjava/io/Writer;-><init>()V
 HSPLjava/io/Writer;-><init>(Ljava/lang/Object;)V
 HSPLjava/io/Writer;->append(C)Ljava/io/Writer;
 HSPLjava/io/Writer;->append(Ljava/lang/CharSequence;)Ljava/io/Writer;
 HSPLjava/io/Writer;->write(Ljava/lang/String;)V
-HSPLjava/io/Writer;->write(Ljava/lang/String;II)V
 HSPLjava/lang/AbstractStringBuilder;-><init>(I)V
 HSPLjava/lang/AbstractStringBuilder;->append(C)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->append(D)Ljava/lang/AbstractStringBuilder;
@@ -35815,25 +16539,20 @@
 HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/StringBuffer;)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->append(Z)Ljava/lang/AbstractStringBuilder;
-HPLjava/lang/AbstractStringBuilder;->append([C)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->append([CII)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->appendCodePoint(I)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->appendNull()Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->charAt(I)C
 HSPLjava/lang/AbstractStringBuilder;->codePointAt(I)I
-HSPLjava/lang/AbstractStringBuilder;->codePointBefore(I)I
 HSPLjava/lang/AbstractStringBuilder;->delete(II)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->deleteCharAt(I)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->ensureCapacity(I)V
 HSPLjava/lang/AbstractStringBuilder;->ensureCapacityInternal(I)V
 HSPLjava/lang/AbstractStringBuilder;->getChars(II[CI)V
-HSPLjava/lang/AbstractStringBuilder;->getValue()[C
 HSPLjava/lang/AbstractStringBuilder;->indexOf(Ljava/lang/String;)I
 HSPLjava/lang/AbstractStringBuilder;->indexOf(Ljava/lang/String;I)I
 HSPLjava/lang/AbstractStringBuilder;->insert(IC)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->insert(II)Ljava/lang/AbstractStringBuilder;
-PLjava/lang/AbstractStringBuilder;->insert(ILjava/lang/CharSequence;)Ljava/lang/AbstractStringBuilder;
-HPLjava/lang/AbstractStringBuilder;->insert(ILjava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->insert(ILjava/lang/String;)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->lastIndexOf(Ljava/lang/String;I)I
 HSPLjava/lang/AbstractStringBuilder;->length()I
@@ -35841,7 +16560,6 @@
 HSPLjava/lang/AbstractStringBuilder;->replace(IILjava/lang/String;)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->setCharAt(IC)V
 HSPLjava/lang/AbstractStringBuilder;->setLength(I)V
-HSPLjava/lang/AbstractStringBuilder;->subSequence(II)Ljava/lang/CharSequence;
 HSPLjava/lang/AbstractStringBuilder;->substring(I)Ljava/lang/String;
 HSPLjava/lang/AbstractStringBuilder;->substring(II)Ljava/lang/String;
 HSPLjava/lang/Boolean;-><init>(Z)V
@@ -35862,92 +16580,54 @@
 HSPLjava/lang/BootClassLoader;->findResource(Ljava/lang/String;)Ljava/net/URL;
 HSPLjava/lang/BootClassLoader;->findResources(Ljava/lang/String;)Ljava/util/Enumeration;
 HSPLjava/lang/BootClassLoader;->getInstance()Ljava/lang/BootClassLoader;
-HSPLjava/lang/BootClassLoader;->getPackage(Ljava/lang/String;)Ljava/lang/Package;
 HSPLjava/lang/BootClassLoader;->getResource(Ljava/lang/String;)Ljava/net/URL;
 HSPLjava/lang/BootClassLoader;->getResources(Ljava/lang/String;)Ljava/util/Enumeration;
 HSPLjava/lang/BootClassLoader;->loadClass(Ljava/lang/String;Z)Ljava/lang/Class;
 HSPLjava/lang/Byte;-><init>(B)V
 HSPLjava/lang/Byte;->byteValue()B
 HSPLjava/lang/Byte;->compare(BB)I
-HPLjava/lang/Byte;->compareTo(Ljava/lang/Byte;)I
-HPLjava/lang/Byte;->compareTo(Ljava/lang/Object;)I
-HSPLjava/lang/Byte;->doubleValue()D
-HSPLjava/lang/Byte;->equals(Ljava/lang/Object;)Z
-HPLjava/lang/Byte;->hashCode()I
-HPLjava/lang/Byte;->hashCode(B)I
-HPLjava/lang/Byte;->intValue()I
-HPLjava/lang/Byte;->longValue()J
-PLjava/lang/Byte;->parseByte(Ljava/lang/String;)B
-HSPLjava/lang/Byte;->parseByte(Ljava/lang/String;I)B
-HPLjava/lang/Byte;->toString()Ljava/lang/String;
+HSPLjava/lang/Byte;->toString()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;
 HSPLjava/lang/CaseMapper;->toUpperCase(Ljava/util/Locale;Ljava/lang/String;I)Ljava/lang/String;
 HSPLjava/lang/CaseMapper;->upperIndex(I)I
-HSPLjava/lang/Character$Subset;->equals(Ljava/lang/Object;)Z
-HSPLjava/lang/Character$Subset;->hashCode()I
 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
 HSPLjava/lang/Character;->codePointAtImpl([CII)I
 HSPLjava/lang/Character;->codePointBefore(Ljava/lang/CharSequence;I)I
-HSPLjava/lang/Character;->codePointBeforeImpl([CII)I
 HSPLjava/lang/Character;->codePointCount(Ljava/lang/CharSequence;II)I
-HPLjava/lang/Character;->compare(CC)I
-HPLjava/lang/Character;->compareTo(Ljava/lang/Character;)I
-HPLjava/lang/Character;->compareTo(Ljava/lang/Object;)I
 HSPLjava/lang/Character;->digit(CI)I
 HSPLjava/lang/Character;->digit(II)I
 HSPLjava/lang/Character;->equals(Ljava/lang/Object;)Z
 HSPLjava/lang/Character;->forDigit(II)C
 HSPLjava/lang/Character;->getDirectionality(C)B
 HSPLjava/lang/Character;->getDirectionality(I)B
-HPLjava/lang/Character;->getNumericValue(C)I
-HSPLjava/lang/Character;->getNumericValue(I)I
-HSPLjava/lang/Character;->getType(C)I
 HSPLjava/lang/Character;->getType(I)I
 HSPLjava/lang/Character;->hashCode()I
 HSPLjava/lang/Character;->hashCode(C)I
-HSPLjava/lang/Character;->highSurrogate(I)C
 HSPLjava/lang/Character;->isBmpCodePoint(I)Z
 HSPLjava/lang/Character;->isDigit(C)Z
 HSPLjava/lang/Character;->isDigit(I)Z
 HSPLjava/lang/Character;->isHighSurrogate(C)Z
-HPLjava/lang/Character;->isISOControl(C)Z
-HSPLjava/lang/Character;->isISOControl(I)Z
-HSPLjava/lang/Character;->isJavaIdentifierPart(C)Z
-HSPLjava/lang/Character;->isJavaIdentifierPart(I)Z
-HSPLjava/lang/Character;->isJavaIdentifierStart(I)Z
 HSPLjava/lang/Character;->isLetter(C)Z
 HSPLjava/lang/Character;->isLetter(I)Z
 HSPLjava/lang/Character;->isLetterOrDigit(C)Z
 HSPLjava/lang/Character;->isLetterOrDigit(I)Z
 HSPLjava/lang/Character;->isLowSurrogate(C)Z
-HPLjava/lang/Character;->isLowerCase(C)Z
-HPLjava/lang/Character;->isLowerCase(I)Z
-HSPLjava/lang/Character;->isSpaceChar(C)Z
-HSPLjava/lang/Character;->isSpaceChar(I)Z
-HPLjava/lang/Character;->isSupplementaryCodePoint(I)Z
-HSPLjava/lang/Character;->isSurrogatePair(CC)Z
 HSPLjava/lang/Character;->isUpperCase(C)Z
 HSPLjava/lang/Character;->isUpperCase(I)Z
 HSPLjava/lang/Character;->isValidCodePoint(I)Z
 HSPLjava/lang/Character;->isWhitespace(C)Z
 HSPLjava/lang/Character;->isWhitespace(I)Z
-HSPLjava/lang/Character;->lowSurrogate(I)C
-HSPLjava/lang/Character;->offsetByCodePoints(Ljava/lang/CharSequence;II)I
-HPLjava/lang/Character;->toChars(I)[C
 HSPLjava/lang/Character;->toChars(I[CI)I
 HSPLjava/lang/Character;->toCodePoint(CC)I
 HSPLjava/lang/Character;->toLowerCase(C)C
 HSPLjava/lang/Character;->toLowerCase(I)I
 HSPLjava/lang/Character;->toString()Ljava/lang/String;
 HSPLjava/lang/Character;->toString(C)Ljava/lang/String;
-HSPLjava/lang/Character;->toSurrogates(I[CI)V
-HSPLjava/lang/Character;->toTitleCase(C)C
-HSPLjava/lang/Character;->toTitleCase(I)I
 HSPLjava/lang/Character;->toUpperCase(C)C
 HSPLjava/lang/Character;->toUpperCase(I)I
 HSPLjava/lang/Character;->valueOf(C)Ljava/lang/Character;
@@ -35955,13 +16635,11 @@
 HSPLjava/lang/Class;->asSubclass(Ljava/lang/Class;)Ljava/lang/Class;
 HSPLjava/lang/Class;->cast(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/lang/Class;->classNameImpliesTopLevel()Z
-HSPLjava/lang/Class;->desiredAssertionStatus()Z
 HSPLjava/lang/Class;->findInterfaceMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
 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;
-HSPLjava/lang/Class;->getAnnotations()[Ljava/lang/annotation/Annotation;
 HSPLjava/lang/Class;->getCanonicalName()Ljava/lang/String;
 HSPLjava/lang/Class;->getClassLoader()Ljava/lang/ClassLoader;
 HSPLjava/lang/Class;->getComponentType()Ljava/lang/Class;
@@ -35980,7 +16658,6 @@
 HSPLjava/lang/Class;->getFields()[Ljava/lang/reflect/Field;
 HSPLjava/lang/Class;->getGenericInterfaces()[Ljava/lang/reflect/Type;
 HSPLjava/lang/Class;->getGenericSuperclass()Ljava/lang/reflect/Type;
-HPLjava/lang/Class;->getInstanceMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
 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;
@@ -35989,7 +16666,6 @@
 HSPLjava/lang/Class;->getName()Ljava/lang/String;
 HSPLjava/lang/Class;->getPackage()Ljava/lang/Package;
 HSPLjava/lang/Class;->getPackageName$()Ljava/lang/String;
-HSPLjava/lang/Class;->getProtectionDomain()Ljava/security/ProtectionDomain;
 HSPLjava/lang/Class;->getPublicFieldsRecursive(Ljava/util/List;)V
 HSPLjava/lang/Class;->getPublicMethodRecursive(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
 HSPLjava/lang/Class;->getPublicMethodsInternal(Ljava/util/List;)V
@@ -35997,7 +16673,6 @@
 HSPLjava/lang/Class;->getSignatureAttribute()Ljava/lang/String;
 HSPLjava/lang/Class;->getSimpleName()Ljava/lang/String;
 HSPLjava/lang/Class;->getSuperclass()Ljava/lang/Class;
-HPLjava/lang/Class;->getTypeName()Ljava/lang/String;
 HSPLjava/lang/Class;->getTypeParameters()[Ljava/lang/reflect/TypeVariable;
 HSPLjava/lang/Class;->isAnnotation()Z
 HSPLjava/lang/Class;->isAnnotationPresent(Ljava/lang/Class;)Z
@@ -36024,14 +16699,12 @@
 HSPLjava/lang/ClassLoader;->getParent()Ljava/lang/ClassLoader;
 HSPLjava/lang/ClassLoader;->getResource(Ljava/lang/String;)Ljava/net/URL;
 HSPLjava/lang/ClassLoader;->getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;
-HSPLjava/lang/ClassLoader;->getResources(Ljava/lang/String;)Ljava/util/Enumeration;
 HSPLjava/lang/ClassLoader;->getSystemClassLoader()Ljava/lang/ClassLoader;
 HSPLjava/lang/ClassLoader;->loadClass(Ljava/lang/String;)Ljava/lang/Class;
 HSPLjava/lang/ClassLoader;->loadClass(Ljava/lang/String;Z)Ljava/lang/Class;
 HSPLjava/lang/ClassNotFoundException;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/ClassNotFoundException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
 HSPLjava/lang/ClassNotFoundException;->getCause()Ljava/lang/Throwable;
-PLjava/lang/CloneNotSupportedException;-><init>()V
 HSPLjava/lang/Daemons$Daemon;->interrupt(Ljava/lang/Thread;)V
 HSPLjava/lang/Daemons$Daemon;->isRunning()Z
 HSPLjava/lang/Daemons$Daemon;->run()V
@@ -36061,15 +16734,10 @@
 HSPLjava/lang/Daemons;->stop()V
 HSPLjava/lang/Double;-><init>(D)V
 HSPLjava/lang/Double;->compare(DD)I
-HSPLjava/lang/Double;->compareTo(Ljava/lang/Double;)I
-HSPLjava/lang/Double;->compareTo(Ljava/lang/Object;)I
 HSPLjava/lang/Double;->doubleToLongBits(D)J
 HSPLjava/lang/Double;->doubleValue()D
 HSPLjava/lang/Double;->equals(Ljava/lang/Object;)Z
 HSPLjava/lang/Double;->floatValue()F
-HPLjava/lang/Double;->hashCode()I
-HPLjava/lang/Double;->hashCode(D)I
-HSPLjava/lang/Double;->intValue()I
 HSPLjava/lang/Double;->isInfinite(D)Z
 HSPLjava/lang/Double;->isNaN(D)Z
 HSPLjava/lang/Double;->longValue()J
@@ -36097,9 +16765,10 @@
 HSPLjava/lang/Exception;-><init>()V
 HSPLjava/lang/Exception;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Exception;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
-HPLjava/lang/Exception;-><init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
+HSPLjava/lang/Exception;-><init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
 HSPLjava/lang/Exception;-><init>(Ljava/lang/Throwable;)V
 HSPLjava/lang/Float;-><init>(F)V
+HSPLjava/lang/Float;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Float;->compare(FF)I
 HSPLjava/lang/Float;->compareTo(Ljava/lang/Float;)I
 HSPLjava/lang/Float;->compareTo(Ljava/lang/Object;)I
@@ -36109,43 +16778,30 @@
 HSPLjava/lang/Float;->floatValue()F
 HSPLjava/lang/Float;->hashCode()I
 HSPLjava/lang/Float;->hashCode(F)I
-PLjava/lang/Float;->isFinite(F)Z
+HSPLjava/lang/Float;->isFinite(F)Z
 HSPLjava/lang/Float;->isInfinite(F)Z
 HSPLjava/lang/Float;->isNaN(F)Z
-PLjava/lang/Float;->longValue()J
 HSPLjava/lang/Float;->parseFloat(Ljava/lang/String;)F
 HSPLjava/lang/Float;->toString()Ljava/lang/String;
 HSPLjava/lang/Float;->toString(F)Ljava/lang/String;
 HSPLjava/lang/Float;->valueOf(F)Ljava/lang/Float;
-HPLjava/lang/Float;->valueOf(Ljava/lang/String;)Ljava/lang/Float;
 HSPLjava/lang/IllegalAccessException;-><init>(Ljava/lang/String;)V
-HSPLjava/lang/IllegalArgumentException;-><init>()V
 HSPLjava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-HSPLjava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
-HPLjava/lang/IllegalMonitorStateException;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/IllegalStateException;-><init>()V
 HSPLjava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
-HSPLjava/lang/IllegalStateException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
-HSPLjava/lang/IllegalStateException;-><init>(Ljava/lang/Throwable;)V
 HSPLjava/lang/IncompatibleClassChangeError;-><init>(Ljava/lang/String;)V
-PLjava/lang/IndexOutOfBoundsException;-><init>()V
-HSPLjava/lang/InheritableThreadLocal;->childValue(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/lang/InheritableThreadLocal;->createMap(Ljava/lang/Thread;Ljava/lang/Object;)V
 HSPLjava/lang/InheritableThreadLocal;->getMap(Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap;
-PLjava/lang/InstantiationException;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Integer;-><init>(I)V
 HSPLjava/lang/Integer;->bitCount(I)I
-HSPLjava/lang/Integer;->byteValue()B
 HSPLjava/lang/Integer;->compare(II)I
 HSPLjava/lang/Integer;->compareTo(Ljava/lang/Integer;)I
 HSPLjava/lang/Integer;->compareTo(Ljava/lang/Object;)I
 HSPLjava/lang/Integer;->decode(Ljava/lang/String;)Ljava/lang/Integer;
 HSPLjava/lang/Integer;->doubleValue()D
 HSPLjava/lang/Integer;->equals(Ljava/lang/Object;)Z
-HSPLjava/lang/Integer;->floatValue()F
 HSPLjava/lang/Integer;->formatUnsignedInt(II[CII)I
 HSPLjava/lang/Integer;->getChars(II[C)V
-HSPLjava/lang/Integer;->getInteger(Ljava/lang/String;)Ljava/lang/Integer;
 HSPLjava/lang/Integer;->getInteger(Ljava/lang/String;I)Ljava/lang/Integer;
 HSPLjava/lang/Integer;->getInteger(Ljava/lang/String;Ljava/lang/Integer;)Ljava/lang/Integer;
 HSPLjava/lang/Integer;->hashCode()I
@@ -36167,22 +16823,19 @@
 HSPLjava/lang/Integer;->shortValue()S
 HSPLjava/lang/Integer;->signum(I)I
 HSPLjava/lang/Integer;->stringSize(I)I
-HSPLjava/lang/Integer;->sum(II)I
 HSPLjava/lang/Integer;->toBinaryString(I)Ljava/lang/String;
 HSPLjava/lang/Integer;->toHexString(I)Ljava/lang/String;
 HSPLjava/lang/Integer;->toString()Ljava/lang/String;
 HSPLjava/lang/Integer;->toString(I)Ljava/lang/String;
-HPLjava/lang/Integer;->toString(II)Ljava/lang/String;
-HPLjava/lang/Integer;->toUnsignedLong(I)J
+HSPLjava/lang/Integer;->toString(II)Ljava/lang/String;
 HSPLjava/lang/Integer;->toUnsignedString0(II)Ljava/lang/String;
 HSPLjava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
 HSPLjava/lang/Integer;->valueOf(Ljava/lang/String;)Ljava/lang/Integer;
 HSPLjava/lang/Integer;->valueOf(Ljava/lang/String;I)Ljava/lang/Integer;
 HSPLjava/lang/InterruptedException;-><init>()V
-HPLjava/lang/Iterable;->forEach(Ljava/util/function/Consumer;)V
+HSPLjava/lang/Iterable;->forEach(Ljava/util/function/Consumer;)V
 HSPLjava/lang/LinkageError;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Long;-><init>(J)V
-HSPLjava/lang/Long;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Long;->bitCount(J)I
 HSPLjava/lang/Long;->compare(JJ)I
 HSPLjava/lang/Long;->compareTo(Ljava/lang/Long;)I
@@ -36201,12 +16854,10 @@
 HSPLjava/lang/Long;->intValue()I
 HSPLjava/lang/Long;->longValue()J
 HSPLjava/lang/Long;->lowestOneBit(J)J
-HSPLjava/lang/Long;->max(JJ)J
 HSPLjava/lang/Long;->numberOfLeadingZeros(J)I
 HSPLjava/lang/Long;->numberOfTrailingZeros(J)I
 HSPLjava/lang/Long;->parseLong(Ljava/lang/String;)J
 HSPLjava/lang/Long;->parseLong(Ljava/lang/String;I)J
-HSPLjava/lang/Long;->parseUnsignedLong(Ljava/lang/String;I)J
 HSPLjava/lang/Long;->reverse(J)J
 HSPLjava/lang/Long;->reverseBytes(J)J
 HSPLjava/lang/Long;->rotateLeft(JI)J
@@ -36227,11 +16878,11 @@
 HSPLjava/lang/Math;->abs(I)I
 HSPLjava/lang/Math;->abs(J)J
 HSPLjava/lang/Math;->addExact(JJ)J
-HPLjava/lang/Math;->copySign(DD)D
-HPLjava/lang/Math;->copySign(FF)F
+HSPLjava/lang/Math;->copySign(FF)F
+HSPLjava/lang/Math;->floorDiv(II)I
 HSPLjava/lang/Math;->floorDiv(JJ)J
+HSPLjava/lang/Math;->floorMod(II)I
 HSPLjava/lang/Math;->floorMod(JJ)J
-HSPLjava/lang/Math;->getExponent(F)I
 HSPLjava/lang/Math;->max(DD)D
 HSPLjava/lang/Math;->max(FF)F
 HSPLjava/lang/Math;->max(II)I
@@ -36242,29 +16893,24 @@
 HSPLjava/lang/Math;->min(JJ)J
 HSPLjava/lang/Math;->multiplyExact(JJ)J
 HSPLjava/lang/Math;->nextAfter(DD)D
-HPLjava/lang/Math;->powerOfTwoD(I)D
-HSPLjava/lang/Math;->powerOfTwoF(I)F
+HSPLjava/lang/Math;->powerOfTwoD(I)D
 HSPLjava/lang/Math;->random()D
 HSPLjava/lang/Math;->randomLongInternal()J
 HSPLjava/lang/Math;->round(D)J
 HSPLjava/lang/Math;->round(F)I
-HPLjava/lang/Math;->scalb(FI)F
+HSPLjava/lang/Math;->scalb(FI)F
 HSPLjava/lang/Math;->setRandomSeedInternal(J)V
-HPLjava/lang/Math;->signum(D)D
-PLjava/lang/Math;->signum(F)F
+HSPLjava/lang/Math;->signum(F)F
 HSPLjava/lang/Math;->subtractExact(JJ)J
-HPLjava/lang/Math;->toDegrees(D)D
+HSPLjava/lang/Math;->toDegrees(D)D
 HSPLjava/lang/Math;->toIntExact(J)I
 HSPLjava/lang/Math;->toRadians(D)D
-HSPLjava/lang/Math;->ulp(F)F
 HSPLjava/lang/NoClassDefFoundError;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/NoSuchFieldException;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/NoSuchMethodError;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/NoSuchMethodException;-><init>(Ljava/lang/String;)V
-HPLjava/lang/NullPointerException;-><init>()V
 HSPLjava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Number;-><init>()V
-HSPLjava/lang/NumberFormatException;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Object;-><init>()V
 HSPLjava/lang/Object;->clone()Ljava/lang/Object;
 HSPLjava/lang/Object;->equals(Ljava/lang/Object;)Z
@@ -36278,12 +16924,9 @@
 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
-PLjava/lang/ProcessBuilder$NullInputStream;->available()I
-PLjava/lang/ProcessBuilder$NullInputStream;->read()I
 HSPLjava/lang/ProcessBuilder;-><init>([Ljava/lang/String;)V
 HSPLjava/lang/ProcessBuilder;->directory(Ljava/io/File;)Ljava/lang/ProcessBuilder;
 HSPLjava/lang/ProcessBuilder;->environment([Ljava/lang/String;)Ljava/lang/ProcessBuilder;
-HSPLjava/lang/ProcessBuilder;->redirectErrorStream(Z)Ljava/lang/ProcessBuilder;
 HSPLjava/lang/ProcessBuilder;->start()Ljava/lang/Process;
 HSPLjava/lang/ProcessEnvironment;->toEnvironmentBlock(Ljava/util/Map;[I)[B
 HSPLjava/lang/ProcessImpl;->start([Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;[Ljava/lang/ProcessBuilder$Redirect;Z)Ljava/lang/Process;
@@ -36293,9 +16936,6 @@
 HSPLjava/lang/ReflectiveOperationException;-><init>(Ljava/lang/Throwable;)V
 HSPLjava/lang/Runtime;->addShutdownHook(Ljava/lang/Thread;)V
 HSPLjava/lang/Runtime;->availableProcessors()I
-HSPLjava/lang/Runtime;->exec(Ljava/lang/String;)Ljava/lang/Process;
-HSPLjava/lang/Runtime;->exec(Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
-HSPLjava/lang/Runtime;->exec([Ljava/lang/String;)Ljava/lang/Process;
 HSPLjava/lang/Runtime;->exec([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
 HSPLjava/lang/Runtime;->gc()V
 HSPLjava/lang/Runtime;->getLibPaths()[Ljava/lang/String;
@@ -36308,18 +16948,12 @@
 HSPLjava/lang/RuntimeException;-><init>()V
 HSPLjava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/RuntimeException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
-HPLjava/lang/RuntimeException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
 HSPLjava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
 HSPLjava/lang/SecurityException;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Short;-><init>(S)V
-HSPLjava/lang/Short;->doubleValue()D
-HPLjava/lang/Short;->equals(Ljava/lang/Object;)Z
-HSPLjava/lang/Short;->hashCode()I
-HSPLjava/lang/Short;->hashCode(S)I
 HSPLjava/lang/Short;->reverseBytes(S)S
-PLjava/lang/Short;->shortValue()S
+HSPLjava/lang/Short;->shortValue()S
 HSPLjava/lang/Short;->valueOf(S)Ljava/lang/Short;
-PLjava/lang/StackTraceElement;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
 HSPLjava/lang/StackTraceElement;->equals(Ljava/lang/Object;)Z
 HSPLjava/lang/StackTraceElement;->getClassName()Ljava/lang/String;
 HSPLjava/lang/StackTraceElement;->getFileName()Ljava/lang/String;
@@ -36327,7 +16961,6 @@
 HSPLjava/lang/StackTraceElement;->getMethodName()Ljava/lang/String;
 HSPLjava/lang/StackTraceElement;->isNativeMethod()Z
 HSPLjava/lang/StackTraceElement;->toString()Ljava/lang/String;
-PLjava/lang/StrictMath;->toIntExact(J)I
 HSPLjava/lang/String$CaseInsensitiveComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLjava/lang/String$CaseInsensitiveComparator;->compare(Ljava/lang/String;Ljava/lang/String;)I
 HSPLjava/lang/String;->codePointAt(I)I
@@ -36337,7 +16970,6 @@
 HSPLjava/lang/String;->compareToIgnoreCase(Ljava/lang/String;)I
 HSPLjava/lang/String;->contains(Ljava/lang/CharSequence;)Z
 HSPLjava/lang/String;->contentEquals(Ljava/lang/CharSequence;)Z
-HPLjava/lang/String;->copyValueOf([C)Ljava/lang/String;
 HSPLjava/lang/String;->endsWith(Ljava/lang/String;)Z
 HSPLjava/lang/String;->equals(Ljava/lang/Object;)Z
 HSPLjava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z
@@ -36368,8 +17000,6 @@
 HSPLjava/lang/String;->lastIndexOf([CII[CIII)I
 HSPLjava/lang/String;->length()I
 HSPLjava/lang/String;->matches(Ljava/lang/String;)Z
-HSPLjava/lang/String;->nonSyncContentEquals(Ljava/lang/AbstractStringBuilder;)Z
-HSPLjava/lang/String;->offsetByCodePoints(II)I
 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;
@@ -36397,7 +17027,6 @@
 HSPLjava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;
 HSPLjava/lang/String;->valueOf(Z)Ljava/lang/String;
 HSPLjava/lang/String;->valueOf([C)Ljava/lang/String;
-HSPLjava/lang/String;->valueOf([CII)Ljava/lang/String;
 HSPLjava/lang/StringBuffer;-><init>()V
 HSPLjava/lang/StringBuffer;-><init>(I)V
 HSPLjava/lang/StringBuffer;-><init>(Ljava/lang/String;)V
@@ -36407,13 +17036,10 @@
 HSPLjava/lang/StringBuffer;->append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;
 HSPLjava/lang/StringBuffer;->append(Ljava/lang/CharSequence;)Ljava/lang/StringBuffer;
 HSPLjava/lang/StringBuffer;->append(Ljava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder;
-HSPLjava/lang/StringBuffer;->append(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;
 HSPLjava/lang/StringBuffer;->append(Ljava/lang/CharSequence;II)Ljava/lang/StringBuffer;
 HSPLjava/lang/StringBuffer;->append(Ljava/lang/Object;)Ljava/lang/StringBuffer;
-HSPLjava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
 HSPLjava/lang/StringBuffer;->append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;
-PLjava/lang/StringBuffer;->append(Z)Ljava/lang/StringBuffer;
 HSPLjava/lang/StringBuffer;->append([CII)Ljava/lang/StringBuffer;
 HSPLjava/lang/StringBuffer;->charAt(I)C
 HSPLjava/lang/StringBuffer;->codePointAt(I)I
@@ -36444,7 +17070,6 @@
 HSPLjava/lang/StringBuilder;->append([CII)Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->appendCodePoint(I)Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->charAt(I)C
-HSPLjava/lang/StringBuilder;->codePointBefore(I)I
 HSPLjava/lang/StringBuilder;->delete(II)Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->deleteCharAt(I)Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->ensureCapacity(I)V
@@ -36453,9 +17078,6 @@
 HSPLjava/lang/StringBuilder;->indexOf(Ljava/lang/String;I)I
 HSPLjava/lang/StringBuilder;->insert(IC)Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->insert(II)Ljava/lang/StringBuilder;
-PLjava/lang/StringBuilder;->insert(ILjava/lang/CharSequence;)Ljava/lang/StringBuilder;
-PLjava/lang/StringBuilder;->insert(ILjava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder;
-HPLjava/lang/StringBuilder;->insert(ILjava/lang/CharSequence;II)Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->insert(ILjava/lang/String;)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/StringBuilder;->insert(ILjava/lang/String;)Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->lastIndexOf(Ljava/lang/String;I)I
@@ -36463,13 +17085,11 @@
 HSPLjava/lang/StringBuilder;->replace(IILjava/lang/String;)Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->setCharAt(IC)V
 HSPLjava/lang/StringBuilder;->setLength(I)V
-HSPLjava/lang/StringBuilder;->subSequence(II)Ljava/lang/CharSequence;
 HSPLjava/lang/StringBuilder;->substring(I)Ljava/lang/String;
 HSPLjava/lang/StringBuilder;->substring(II)Ljava/lang/String;
 HSPLjava/lang/StringBuilder;->toString()Ljava/lang/String;
 HSPLjava/lang/StringFactory;->newEmptyString()Ljava/lang/String;
 HSPLjava/lang/StringFactory;->newStringFromBytes([B)Ljava/lang/String;
-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;
@@ -36479,43 +17099,20 @@
 HSPLjava/lang/StringFactory;->newStringFromChars([CII)Ljava/lang/String;
 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
 HSPLjava/lang/System;->arraycopy([CI[CII)V
-HPLjava/lang/System;->arraycopy([DI[DII)V
-HSPLjava/lang/System;->arraycopy([FI[FII)V
-HSPLjava/lang/System;->arraycopy([II[III)V
-HSPLjava/lang/System;->arraycopy([JI[JII)V
-HSPLjava/lang/System;->arraycopy([ZI[ZII)V
 HSPLjava/lang/System;->checkKey(Ljava/lang/String;)V
-HSPLjava/lang/System;->clearProperty(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/lang/System;->gc()V
-HSPLjava/lang/System;->getProperties()Ljava/util/Properties;
-HSPLjava/lang/System;->getProperty(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/lang/System;->getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/lang/System;->getSecurityManager()Ljava/lang/SecurityManager;
-HSPLjava/lang/System;->getenv(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/lang/System;->identityHashCode(Ljava/lang/Object;)I
-HSPLjava/lang/System;->lineSeparator()Ljava/lang/String;
 HSPLjava/lang/System;->load(Ljava/lang/String;)V
-HSPLjava/lang/System;->loadLibrary(Ljava/lang/String;)V
-HSPLjava/lang/System;->logW(Ljava/lang/String;)V
-HSPLjava/lang/System;->runFinalization()V
-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;-><init>()V
 HSPLjava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
 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;)V
 HSPLjava/lang/Thread;-><init>(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V
 HSPLjava/lang/Thread;-><init>(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V
 HSPLjava/lang/Thread;-><init>(Ljava/lang/ThreadGroup;Ljava/lang/String;IZ)V
 HSPLjava/lang/Thread;->activeCount()I
 HSPLjava/lang/Thread;->blockedOn(Lsun/nio/ch/Interruptible;)V
 HSPLjava/lang/Thread;->checkAccess()V
-HPLjava/lang/Thread;->getAllStackTraces()Ljava/util/Map;
 HSPLjava/lang/Thread;->getContextClassLoader()Ljava/lang/ClassLoader;
 HSPLjava/lang/Thread;->getDefaultUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;
 HSPLjava/lang/Thread;->getId()J
@@ -36525,7 +17122,6 @@
 HSPLjava/lang/Thread;->getState()Ljava/lang/Thread$State;
 HSPLjava/lang/Thread;->getThreadGroup()Ljava/lang/ThreadGroup;
 HSPLjava/lang/Thread;->getUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;
-HSPLjava/lang/Thread;->getUncaughtExceptionPreHandler()Ljava/lang/Thread$UncaughtExceptionHandler;
 HSPLjava/lang/Thread;->init(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V
 HSPLjava/lang/Thread;->init(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;JLjava/security/AccessControlContext;)V
 HSPLjava/lang/Thread;->init2(Ljava/lang/Thread;)V
@@ -36549,17 +17145,9 @@
 HSPLjava/lang/Thread;->sleep(JI)V
 HSPLjava/lang/Thread;->start()V
 HSPLjava/lang/Thread;->toString()Ljava/lang/String;
-HSPLjava/lang/ThreadGroup;-><init>(Ljava/lang/String;)V
-HSPLjava/lang/ThreadGroup;-><init>(Ljava/lang/ThreadGroup;Ljava/lang/String;)V
-HSPLjava/lang/ThreadGroup;-><init>(Ljava/lang/Void;Ljava/lang/ThreadGroup;Ljava/lang/String;)V
 HSPLjava/lang/ThreadGroup;->activeCount()I
 HSPLjava/lang/ThreadGroup;->add(Ljava/lang/Thread;)V
-HSPLjava/lang/ThreadGroup;->add(Ljava/lang/ThreadGroup;)V
 HSPLjava/lang/ThreadGroup;->addUnstarted()V
-HSPLjava/lang/ThreadGroup;->checkAccess()V
-HSPLjava/lang/ThreadGroup;->checkParentAccess(Ljava/lang/ThreadGroup;)Ljava/lang/Void;
-HPLjava/lang/ThreadGroup;->enumerate([Ljava/lang/Thread;)I
-HPLjava/lang/ThreadGroup;->enumerate([Ljava/lang/Thread;IZ)I
 HSPLjava/lang/ThreadGroup;->getMaxPriority()I
 HSPLjava/lang/ThreadGroup;->getName()Ljava/lang/String;
 HSPLjava/lang/ThreadGroup;->remove(Ljava/lang/Thread;)V
@@ -36568,7 +17156,6 @@
 HSPLjava/lang/ThreadLocal$SuppliedThreadLocal;->initialValue()Ljava/lang/Object;
 HSPLjava/lang/ThreadLocal$ThreadLocalMap$Entry;-><init>(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$ThreadLocalMap;Ljava/lang/ThreadLocal$1;)V
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;-><init>(Ljava/lang/ThreadLocal;Ljava/lang/Object;)V
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->access$000(Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->access$100(Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;Ljava/lang/Object;)V
@@ -36579,16 +17166,13 @@
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->getEntry(Ljava/lang/ThreadLocal;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->getEntryAfterMiss(Ljava/lang/ThreadLocal;ILjava/lang/ThreadLocal$ThreadLocalMap$Entry;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->nextIndex(II)I
-PLjava/lang/ThreadLocal$ThreadLocalMap;->prevIndex(II)I
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->rehash()V
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->remove(Ljava/lang/ThreadLocal;)V
-PLjava/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;->setThreshold(I)V
 HSPLjava/lang/ThreadLocal;-><init>()V
 HSPLjava/lang/ThreadLocal;->access$400(Ljava/lang/ThreadLocal;)I
-HSPLjava/lang/ThreadLocal;->createInheritedMap(Ljava/lang/ThreadLocal$ThreadLocalMap;)Ljava/lang/ThreadLocal$ThreadLocalMap;
 HSPLjava/lang/ThreadLocal;->createMap(Ljava/lang/Thread;Ljava/lang/Object;)V
 HSPLjava/lang/ThreadLocal;->get()Ljava/lang/Object;
 HSPLjava/lang/ThreadLocal;->getMap(Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap;
@@ -36600,9 +17184,6 @@
 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$1;)V
-HSPLjava/lang/Throwable$WrappedPrintStream;-><init>(Ljava/io/PrintStream;)V
-HSPLjava/lang/Throwable$WrappedPrintStream;->lock()Ljava/lang/Object;
-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
@@ -36621,8 +17202,6 @@
 HSPLjava/lang/Throwable;->getSuppressed()[Ljava/lang/Throwable;
 HSPLjava/lang/Throwable;->initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
 HSPLjava/lang/Throwable;->printEnclosedStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;[Ljava/lang/StackTraceElement;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V
-HSPLjava/lang/Throwable;->printStackTrace()V
-HSPLjava/lang/Throwable;->printStackTrace(Ljava/io/PrintStream;)V
 HSPLjava/lang/Throwable;->printStackTrace(Ljava/io/PrintWriter;)V
 HSPLjava/lang/Throwable;->printStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;)V
 HSPLjava/lang/Throwable;->readObject(Ljava/io/ObjectInputStream;)V
@@ -36643,62 +17222,12 @@
 HSPLjava/lang/UNIXProcess;-><init>([B[BI[BI[B[IZ)V
 HSPLjava/lang/UNIXProcess;->access$100(Ljava/lang/UNIXProcess;)I
 HSPLjava/lang/UNIXProcess;->access$200(Ljava/lang/UNIXProcess;I)I
-HSPLjava/lang/UNIXProcess;->destroy()V
-HSPLjava/lang/UNIXProcess;->getErrorStream()Ljava/io/InputStream;
 HSPLjava/lang/UNIXProcess;->getInputStream()Ljava/io/InputStream;
-HSPLjava/lang/UNIXProcess;->getOutputStream()Ljava/io/OutputStream;
 HSPLjava/lang/UNIXProcess;->initStreams([I)V
 HSPLjava/lang/UNIXProcess;->newFileDescriptor(I)Ljava/io/FileDescriptor;
 HSPLjava/lang/UNIXProcess;->processExited(I)V
-HSPLjava/lang/UNIXProcess;->waitFor()I
 HSPLjava/lang/UnsatisfiedLinkError;-><init>(Ljava/lang/String;)V
-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;
-HPLjava/lang/invoke/MethodHandle;-><init>(JILjava/lang/invoke/MethodType;)V
-HPLjava/lang/invoke/MethodHandle;->type()Ljava/lang/invoke/MethodType;
-HPLjava/lang/invoke/MethodHandleImpl;-><init>(JILjava/lang/invoke/MethodType;)V
-HPLjava/lang/invoke/MethodHandles$Lookup;->checkAccess(Ljava/lang/Class;Ljava/lang/Class;ILjava/lang/String;)V
-HPLjava/lang/invoke/MethodHandles$Lookup;->checkReturnType(Ljava/lang/reflect/Method;Ljava/lang/invoke/MethodType;)V
-HPLjava/lang/invoke/MethodHandles$Lookup;->createMethodHandle(Ljava/lang/reflect/Method;ILjava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;
-HPLjava/lang/invoke/MethodHandles$Lookup;->findVirtual(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;
-HPLjava/lang/invoke/MethodHandles$Lookup;->unreflect(Ljava/lang/reflect/Method;)Ljava/lang/invoke/MethodHandle;
-HPLjava/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry;-><init>(Ljava/lang/Object;)V
-HPLjava/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
-HPLjava/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry;->equals(Ljava/lang/Object;)Z
-HPLjava/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry;->hashCode()I
-HPLjava/lang/invoke/MethodType$ConcurrentWeakInternSet;->add(Ljava/lang/Object;)Ljava/lang/Object;
-HPLjava/lang/invoke/MethodType$ConcurrentWeakInternSet;->expungeStaleElements()V
-HPLjava/lang/invoke/MethodType$ConcurrentWeakInternSet;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HPLjava/lang/invoke/MethodType;-><init>(Ljava/lang/Class;[Ljava/lang/Class;Z)V
-HPLjava/lang/invoke/MethodType;-><init>([Ljava/lang/Class;Ljava/lang/Class;)V
-HPLjava/lang/invoke/MethodType;->checkPtype(Ljava/lang/Class;)V
-HPLjava/lang/invoke/MethodType;->checkPtypes([Ljava/lang/Class;)I
-HPLjava/lang/invoke/MethodType;->checkRtype(Ljava/lang/Class;)V
-HPLjava/lang/invoke/MethodType;->checkSlotCount(I)V
-HPLjava/lang/invoke/MethodType;->dropParameterTypes(II)Ljava/lang/invoke/MethodType;
-HPLjava/lang/invoke/MethodType;->equals(Ljava/lang/Object;)Z
-HPLjava/lang/invoke/MethodType;->equals(Ljava/lang/invoke/MethodType;)Z
-HPLjava/lang/invoke/MethodType;->form()Ljava/lang/invoke/MethodTypeForm;
-HPLjava/lang/invoke/MethodType;->genericMethodType(I)Ljava/lang/invoke/MethodType;
-HPLjava/lang/invoke/MethodType;->genericMethodType(IZ)Ljava/lang/invoke/MethodType;
-HPLjava/lang/invoke/MethodType;->hashCode()I
-HPLjava/lang/invoke/MethodType;->insertParameterTypes(I[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;
-HPLjava/lang/invoke/MethodType;->makeImpl(Ljava/lang/Class;[Ljava/lang/Class;Z)Ljava/lang/invoke/MethodType;
-HPLjava/lang/invoke/MethodType;->methodType(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;
-HPLjava/lang/invoke/MethodType;->parameterSlotCount()I
-HPLjava/lang/invoke/MethodType;->ptypes()[Ljava/lang/Class;
-HPLjava/lang/invoke/MethodType;->returnType()Ljava/lang/Class;
-HPLjava/lang/invoke/MethodType;->rtype()Ljava/lang/Class;
-HPLjava/lang/invoke/MethodTypeForm;-><init>(Ljava/lang/invoke/MethodType;)V
-HPLjava/lang/invoke/MethodTypeForm;->canonicalize(Ljava/lang/Class;I)Ljava/lang/Class;
-HPLjava/lang/invoke/MethodTypeForm;->canonicalize(Ljava/lang/invoke/MethodType;II)Ljava/lang/invoke/MethodType;
-HPLjava/lang/invoke/MethodTypeForm;->canonicalizeAll([Ljava/lang/Class;I)[Ljava/lang/Class;
-HPLjava/lang/invoke/MethodTypeForm;->findForm(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodTypeForm;
-HPLjava/lang/invoke/MethodTypeForm;->pack(IIII)J
-HPLjava/lang/invoke/MethodTypeForm;->parameterSlotCount()I
-HPLjava/lang/invoke/MethodTypeForm;->unpack(JI)C
 HSPLjava/lang/invoke/VarHandle;->acquireFence()V
 HSPLjava/lang/invoke/VarHandle;->fullFence()V
 HSPLjava/lang/invoke/VarHandle;->loadLoadFence()V
@@ -36735,7 +17264,6 @@
 HSPLjava/lang/ref/WeakReference;-><init>(Ljava/lang/Object;)V
 HSPLjava/lang/ref/WeakReference;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
 HSPLjava/lang/reflect/AccessibleObject;-><init>()V
-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
@@ -36744,11 +17272,6 @@
 HSPLjava/lang/reflect/Array;->newArray(Ljava/lang/Class;I)Ljava/lang/Object;
 HSPLjava/lang/reflect/Array;->newInstance(Ljava/lang/Class;I)Ljava/lang/Object;
 HSPLjava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
-HSPLjava/lang/reflect/Array;->set(Ljava/lang/Object;ILjava/lang/Object;)V
-HSPLjava/lang/reflect/Array;->setBoolean(Ljava/lang/Object;IZ)V
-HSPLjava/lang/reflect/Array;->setByte(Ljava/lang/Object;IB)V
-HSPLjava/lang/reflect/Array;->setFloat(Ljava/lang/Object;IF)V
-HSPLjava/lang/reflect/Array;->setInt(Ljava/lang/Object;II)V
 HSPLjava/lang/reflect/Constructor;-><init>(Ljava/lang/Class;Ljava/lang/Class;)V
 HSPLjava/lang/reflect/Constructor;->getDeclaringClass()Ljava/lang/Class;
 HSPLjava/lang/reflect/Constructor;->getModifiers()I
@@ -36756,29 +17279,15 @@
 HSPLjava/lang/reflect/Constructor;->getParameterTypes()[Ljava/lang/Class;
 HSPLjava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/lang/reflect/Constructor;->serializationCopy(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
-HSPLjava/lang/reflect/Executable$GenericInfo;-><init>(Llibcore/reflect/ListOfTypes;Llibcore/reflect/ListOfTypes;Ljava/lang/reflect/Type;[Ljava/lang/reflect/TypeVariable;)V
 HSPLjava/lang/reflect/Executable;-><init>()V
 HSPLjava/lang/reflect/Executable;->equalNameAndParametersInternal(Ljava/lang/reflect/Method;)Z
 HSPLjava/lang/reflect/Executable;->equalParamTypes([Ljava/lang/Class;[Ljava/lang/Class;)Z
 HSPLjava/lang/reflect/Executable;->fixMethodFlags(I)I
 HSPLjava/lang/reflect/Executable;->getAccessFlags()I
 HSPLjava/lang/reflect/Executable;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
-HPLjava/lang/reflect/Executable;->getArtMethod()J
-HSPLjava/lang/reflect/Executable;->getDeclaredAnnotations()[Ljava/lang/annotation/Annotation;
 HSPLjava/lang/reflect/Executable;->getDeclaringClassInternal()Ljava/lang/Class;
-HSPLjava/lang/reflect/Executable;->getGenericParameterTypes()[Ljava/lang/reflect/Type;
-HSPLjava/lang/reflect/Executable;->getMethodOrConstructorGenericInfoInternal()Ljava/lang/reflect/Executable$GenericInfo;
 HSPLjava/lang/reflect/Executable;->getModifiersInternal()I
-HSPLjava/lang/reflect/Executable;->getParameterAnnotationsInternal()[[Ljava/lang/annotation/Annotation;
-HSPLjava/lang/reflect/Executable;->getSignatureAttribute()Ljava/lang/String;
 HSPLjava/lang/reflect/Executable;->isAnnotationPresent(Ljava/lang/Class;)Z
-HSPLjava/lang/reflect/Executable;->isBridgeMethodInternal()Z
-HSPLjava/lang/reflect/Executable;->isDefaultMethodInternal()Z
-HSPLjava/lang/reflect/Executable;->isSynthetic()Z
-HPLjava/lang/reflect/Executable;->isVarArgs()Z
-HPLjava/lang/reflect/Executable;->printModifiersIfNonzero(Ljava/lang/StringBuilder;IZ)V
-HPLjava/lang/reflect/Executable;->separateWithCommas([Ljava/lang/Class;Ljava/lang/StringBuilder;)V
-HPLjava/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;
@@ -36787,45 +17296,26 @@
 HSPLjava/lang/reflect/Field;->getOffset()I
 HSPLjava/lang/reflect/Field;->getSignatureAttribute()Ljava/lang/String;
 HSPLjava/lang/reflect/Field;->getType()Ljava/lang/Class;
-HSPLjava/lang/reflect/Field;->hashCode()I
-HSPLjava/lang/reflect/Field;->isAnnotationPresent(Ljava/lang/Class;)Z
-HSPLjava/lang/reflect/Field;->isEnumConstant()Z
 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
 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;
-HSPLjava/lang/reflect/Method;->getGenericParameterTypes()[Ljava/lang/reflect/Type;
-HSPLjava/lang/reflect/Method;->getGenericReturnType()Ljava/lang/reflect/Type;
 HSPLjava/lang/reflect/Method;->getModifiers()I
 HSPLjava/lang/reflect/Method;->getName()Ljava/lang/String;
-HSPLjava/lang/reflect/Method;->getParameterAnnotations()[[Ljava/lang/annotation/Annotation;
 HSPLjava/lang/reflect/Method;->getParameterTypes()[Ljava/lang/Class;
 HSPLjava/lang/reflect/Method;->getReturnType()Ljava/lang/Class;
 HSPLjava/lang/reflect/Method;->hashCode()I
-HSPLjava/lang/reflect/Method;->isBridge()Z
-HSPLjava/lang/reflect/Method;->isDefault()Z
-HSPLjava/lang/reflect/Method;->isSynthetic()Z
-HPLjava/lang/reflect/Method;->isVarArgs()Z
-HPLjava/lang/reflect/Method;->specificToStringHeader(Ljava/lang/StringBuilder;)V
-HPLjava/lang/reflect/Method;->toString()Ljava/lang/String;
-HSPLjava/lang/reflect/Modifier;->isAbstract(I)Z
 HSPLjava/lang/reflect/Modifier;->isFinal(I)Z
-HSPLjava/lang/reflect/Modifier;->isInterface(I)Z
 HSPLjava/lang/reflect/Modifier;->isPrivate(I)Z
 HSPLjava/lang/reflect/Modifier;->isProtected(I)Z
 HSPLjava/lang/reflect/Modifier;->isPublic(I)Z
 HSPLjava/lang/reflect/Modifier;->isStatic(I)Z
 HSPLjava/lang/reflect/Modifier;->isSynthetic(I)Z
-HSPLjava/lang/reflect/Modifier;->isTransient(I)Z
 HSPLjava/lang/reflect/Modifier;->isVolatile(I)Z
-PLjava/lang/reflect/Modifier;->methodModifiers()I
-HPLjava/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
@@ -36861,83 +17351,43 @@
 HSPLjava/lang/reflect/WeakCache;->access$100(Ljava/lang/reflect/WeakCache;)Ljava/util/concurrent/ConcurrentMap;
 HSPLjava/lang/reflect/WeakCache;->expungeStaleEntries()V
 HSPLjava/lang/reflect/WeakCache;->get(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLjava/math/BigDecimal;-><init>(D)V
 HSPLjava/math/BigDecimal;-><init>(I)V
 HSPLjava/math/BigDecimal;-><init>(II)V
-PLjava/math/BigDecimal;-><init>(J)V
 HSPLjava/math/BigDecimal;-><init>(JI)V
 HSPLjava/math/BigDecimal;-><init>(Ljava/lang/String;)V
-HSPLjava/math/BigDecimal;-><init>(Ljava/math/BigInteger;)V
 HSPLjava/math/BigDecimal;-><init>(Ljava/math/BigInteger;I)V
 HSPLjava/math/BigDecimal;-><init>([CII)V
 HSPLjava/math/BigDecimal;->add(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
-HSPLjava/math/BigDecimal;->addAndMult10(Ljava/math/BigDecimal;Ljava/math/BigDecimal;I)Ljava/math/BigDecimal;
-HSPLjava/math/BigDecimal;->approxPrecision()I
 HSPLjava/math/BigDecimal;->bitLength(I)I
-HSPLjava/math/BigDecimal;->bitLength(J)I
-HSPLjava/math/BigDecimal;->compareAbsoluteValues(JJ)I
-HSPLjava/math/BigDecimal;->compareForRounding(JJ)I
-PLjava/math/BigDecimal;->compareTo(Ljava/math/BigDecimal;)I
+HSPLjava/math/BigDecimal;->compareTo(Ljava/math/BigDecimal;)I
 HSPLjava/math/BigDecimal;->divide(Ljava/math/BigDecimal;ILjava/math/RoundingMode;)Ljava/math/BigDecimal;
-HSPLjava/math/BigDecimal;->divide(Ljava/math/BigDecimal;Ljava/math/RoundingMode;)Ljava/math/BigDecimal;
-HSPLjava/math/BigDecimal;->dividePrimitiveLongs(JJILjava/math/RoundingMode;)Ljava/math/BigDecimal;
-HPLjava/math/BigDecimal;->doubleValue()D
-HPLjava/math/BigDecimal;->floatValue()F
 HSPLjava/math/BigDecimal;->getUnscaledValue()Ljava/math/BigInteger;
 HSPLjava/math/BigDecimal;->isZero()Z
-HSPLjava/math/BigDecimal;->longValueExact()J
 HSPLjava/math/BigDecimal;->movePoint(J)Ljava/math/BigDecimal;
-HSPLjava/math/BigDecimal;->movePointLeft(I)Ljava/math/BigDecimal;
-HSPLjava/math/BigDecimal;->movePointRight(I)Ljava/math/BigDecimal;
 HSPLjava/math/BigDecimal;->multiply(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
-HSPLjava/math/BigDecimal;->roundingBehavior(IILjava/math/RoundingMode;)I
-HSPLjava/math/BigDecimal;->safeLongToInt(J)I
-PLjava/math/BigDecimal;->scale()I
 HSPLjava/math/BigDecimal;->setScale(ILjava/math/RoundingMode;)Ljava/math/BigDecimal;
 HSPLjava/math/BigDecimal;->setUnscaledValue(Ljava/math/BigInteger;)V
-HPLjava/math/BigDecimal;->signum()I
-HPLjava/math/BigDecimal;->stripTrailingZeros()Ljava/math/BigDecimal;
+HSPLjava/math/BigDecimal;->signum()I
 HSPLjava/math/BigDecimal;->subtract(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
 HSPLjava/math/BigDecimal;->toBigIntegerExact()Ljava/math/BigInteger;
-HPLjava/math/BigDecimal;->toPlainString()Ljava/lang/String;
-HSPLjava/math/BigDecimal;->valueExact(I)J
-HPLjava/math/BigDecimal;->valueOf(D)Ljava/math/BigDecimal;
-HSPLjava/math/BigDecimal;->valueOf(J)Ljava/math/BigDecimal;
 HSPLjava/math/BigDecimal;->valueOf(JI)Ljava/math/BigDecimal;
 HSPLjava/math/BigInt;-><init>()V
-HSPLjava/math/BigInt;->addition(Ljava/math/BigInt;Ljava/math/BigInt;)Ljava/math/BigInt;
-PLjava/math/BigInt;->bigEndianMagnitude()[B
-HSPLjava/math/BigInt;->bigExp(Ljava/math/BigInt;Ljava/math/BigInt;)Ljava/math/BigInt;
 HSPLjava/math/BigInt;->bitLength()I
 HSPLjava/math/BigInt;->checkString(Ljava/lang/String;I)Ljava/lang/String;
 HSPLjava/math/BigInt;->cmp(Ljava/math/BigInt;Ljava/math/BigInt;)I
 HSPLjava/math/BigInt;->decString()Ljava/lang/String;
 HSPLjava/math/BigInt;->division(Ljava/math/BigInt;Ljava/math/BigInt;Ljava/math/BigInt;Ljava/math/BigInt;)V
-HSPLjava/math/BigInt;->exp(Ljava/math/BigInt;I)Ljava/math/BigInt;
 HSPLjava/math/BigInt;->hasNativeBignum()Z
-HPLjava/math/BigInt;->isBitSet(I)Z
 HSPLjava/math/BigInt;->littleEndianIntsMagnitude()[I
 HSPLjava/math/BigInt;->longInt()J
 HSPLjava/math/BigInt;->makeValid()V
-HSPLjava/math/BigInt;->modExp(Ljava/math/BigInt;Ljava/math/BigInt;Ljava/math/BigInt;)Ljava/math/BigInt;
-PLjava/math/BigInt;->modInverse(Ljava/math/BigInt;Ljava/math/BigInt;)Ljava/math/BigInt;
-HSPLjava/math/BigInt;->modulus(Ljava/math/BigInt;Ljava/math/BigInt;)Ljava/math/BigInt;
-HSPLjava/math/BigInt;->newBigInt()Ljava/math/BigInt;
 HSPLjava/math/BigInt;->product(Ljava/math/BigInt;Ljava/math/BigInt;)Ljava/math/BigInt;
 HSPLjava/math/BigInt;->putBigEndian([BZ)V
 HSPLjava/math/BigInt;->putBigEndianTwosComplement([B)V
 HSPLjava/math/BigInt;->putDecString(Ljava/lang/String;)V
 HSPLjava/math/BigInt;->putHexString(Ljava/lang/String;)V
-HSPLjava/math/BigInt;->putLittleEndianInts([IZ)V
-HSPLjava/math/BigInt;->putLongInt(J)V
-HSPLjava/math/BigInt;->putULongInt(JZ)V
-HSPLjava/math/BigInt;->shift(Ljava/math/BigInt;I)Ljava/math/BigInt;
 HSPLjava/math/BigInt;->sign()I
-HSPLjava/math/BigInt;->subtraction(Ljava/math/BigInt;Ljava/math/BigInt;)Ljava/math/BigInt;
 HSPLjava/math/BigInt;->twosCompFitsIntoBytes(I)Z
-HPLjava/math/BigInteger;-><init>(II[I)V
-HSPLjava/math/BigInteger;-><init>(IJ)V
-HSPLjava/math/BigInteger;-><init>(ILjava/util/Random;)V
 HSPLjava/math/BigInteger;-><init>(I[B)V
 HSPLjava/math/BigInteger;-><init>(Ljava/lang/String;)V
 HSPLjava/math/BigInteger;-><init>(Ljava/lang/String;I)V
@@ -36947,64 +17397,36 @@
 HSPLjava/math/BigInteger;->add(Ljava/math/BigInteger;)Ljava/math/BigInteger;
 HSPLjava/math/BigInteger;->bitLength()I
 HSPLjava/math/BigInteger;->compareTo(Ljava/math/BigInteger;)I
-PLjava/math/BigInteger;->divide(Ljava/math/BigInteger;)Ljava/math/BigInteger;
 HSPLjava/math/BigInteger;->divideAndRemainder(Ljava/math/BigInteger;)[Ljava/math/BigInteger;
 HSPLjava/math/BigInteger;->equals(Ljava/lang/Object;)Z
 HSPLjava/math/BigInteger;->getBigInt()Ljava/math/BigInt;
 HSPLjava/math/BigInteger;->getFirstNonzeroDigit()I
-HSPLjava/math/BigInteger;->getLowestSetBit()I
 HSPLjava/math/BigInteger;->hashCode()I
 HSPLjava/math/BigInteger;->intValue()I
 HSPLjava/math/BigInteger;->longValue()J
-HSPLjava/math/BigInteger;->mod(Ljava/math/BigInteger;)Ljava/math/BigInteger;
-PLjava/math/BigInteger;->modInverse(Ljava/math/BigInteger;)Ljava/math/BigInteger;
-HSPLjava/math/BigInteger;->modPow(Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljava/math/BigInteger;
 HSPLjava/math/BigInteger;->multiply(Ljava/math/BigInteger;)Ljava/math/BigInteger;
-HSPLjava/math/BigInteger;->pow(I)Ljava/math/BigInteger;
 HSPLjava/math/BigInteger;->prepareJavaRepresentation()V
-HSPLjava/math/BigInteger;->readObject(Ljava/io/ObjectInputStream;)V
 HSPLjava/math/BigInteger;->setBigInt(Ljava/math/BigInt;)V
 HSPLjava/math/BigInteger;->setJavaRepresentation(II[I)V
-HSPLjava/math/BigInteger;->shiftLeft(I)Ljava/math/BigInteger;
-HPLjava/math/BigInteger;->shiftLeftOneBit()Ljava/math/BigInteger;
-HPLjava/math/BigInteger;->shiftRight(I)Ljava/math/BigInteger;
 HSPLjava/math/BigInteger;->signum()I
-HSPLjava/math/BigInteger;->subtract(Ljava/math/BigInteger;)Ljava/math/BigInteger;
-HPLjava/math/BigInteger;->testBit(I)Z
 HSPLjava/math/BigInteger;->toByteArray()[B
 HSPLjava/math/BigInteger;->toString()Ljava/lang/String;
 HSPLjava/math/BigInteger;->toString(I)Ljava/lang/String;
 HSPLjava/math/BigInteger;->twosComplement()[B
-HSPLjava/math/BigInteger;->valueOf(J)Ljava/math/BigInteger;
-HPLjava/math/BigInteger;->writeObject(Ljava/io/ObjectOutputStream;)V
 HSPLjava/math/Conversion;->bigInteger2String(Ljava/math/BigInteger;I)Ljava/lang/String;
-HSPLjava/math/MathContext;-><init>(ILjava/math/RoundingMode;)V
-HSPLjava/math/MathContext;->checkValid()V
 HSPLjava/math/MathContext;->equals(Ljava/lang/Object;)Z
 HSPLjava/math/MathContext;->getPrecision()I
 HSPLjava/math/MathContext;->getRoundingMode()Ljava/math/RoundingMode;
-HSPLjava/math/Multiplication;->powerOf10(J)Ljava/math/BigInteger;
 HSPLjava/math/RoundingMode;->values()[Ljava/math/RoundingMode;
-HSPLjava/net/AbstractPlainDatagramSocketImpl;-><init>()V
 HSPLjava/net/AbstractPlainDatagramSocketImpl;->bind(ILjava/net/InetAddress;)V
 HSPLjava/net/AbstractPlainDatagramSocketImpl;->close()V
-HSPLjava/net/AbstractPlainDatagramSocketImpl;->connect(Ljava/net/InetAddress;I)V
 HSPLjava/net/AbstractPlainDatagramSocketImpl;->create()V
-HSPLjava/net/AbstractPlainDatagramSocketImpl;->dataAvailable()I
 HSPLjava/net/AbstractPlainDatagramSocketImpl;->finalize()V
-PLjava/net/AbstractPlainDatagramSocketImpl;->getOption(I)Ljava/lang/Object;
 HSPLjava/net/AbstractPlainDatagramSocketImpl;->isClosed()Z
-HSPLjava/net/AbstractPlainDatagramSocketImpl;->join(Ljava/net/InetAddress;)V
-HPLjava/net/AbstractPlainDatagramSocketImpl;->joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V
-HPLjava/net/AbstractPlainDatagramSocketImpl;->leaveGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V
-HSPLjava/net/AbstractPlainDatagramSocketImpl;->nativeConnectDisabled()Z
 HSPLjava/net/AbstractPlainDatagramSocketImpl;->receive(Ljava/net/DatagramPacket;)V
 HSPLjava/net/AbstractPlainDatagramSocketImpl;->setOption(ILjava/lang/Object;)V
 HSPLjava/net/AbstractPlainSocketImpl;-><init>()V
-HSPLjava/net/AbstractPlainSocketImpl;->accept(Ljava/net/SocketImpl;)V
 HSPLjava/net/AbstractPlainSocketImpl;->acquireFD()Ljava/io/FileDescriptor;
-HPLjava/net/AbstractPlainSocketImpl;->available()I
-HSPLjava/net/AbstractPlainSocketImpl;->bind(Ljava/net/InetAddress;I)V
 HSPLjava/net/AbstractPlainSocketImpl;->close()V
 HSPLjava/net/AbstractPlainSocketImpl;->connect(Ljava/net/SocketAddress;I)V
 HSPLjava/net/AbstractPlainSocketImpl;->connectToAddress(Ljava/net/InetAddress;II)V
@@ -37017,14 +17439,8 @@
 HSPLjava/net/AbstractPlainSocketImpl;->getTimeout()I
 HSPLjava/net/AbstractPlainSocketImpl;->isClosedOrPending()Z
 HSPLjava/net/AbstractPlainSocketImpl;->isConnectionReset()Z
-HPLjava/net/AbstractPlainSocketImpl;->isConnectionResetPending()Z
-HSPLjava/net/AbstractPlainSocketImpl;->listen(I)V
 HSPLjava/net/AbstractPlainSocketImpl;->releaseFD()V
-HPLjava/net/AbstractPlainSocketImpl;->setConnectionReset()V
-HPLjava/net/AbstractPlainSocketImpl;->setConnectionResetPending()V
 HSPLjava/net/AbstractPlainSocketImpl;->setOption(ILjava/lang/Object;)V
-HSPLjava/net/AbstractPlainSocketImpl;->shutdownInput()V
-HSPLjava/net/AbstractPlainSocketImpl;->shutdownOutput()V
 HSPLjava/net/AbstractPlainSocketImpl;->socketClose()V
 HSPLjava/net/AbstractPlainSocketImpl;->socketPreClose()V
 HSPLjava/net/AddressCache$AddressCacheEntry;-><init>(Ljava/lang/Object;)V
@@ -37035,32 +17451,11 @@
 HSPLjava/net/AddressCache;->get(Ljava/lang/String;I)Ljava/lang/Object;
 HSPLjava/net/AddressCache;->put(Ljava/lang/String;I[Ljava/net/InetAddress;)V
 HSPLjava/net/AddressCache;->putUnknownHost(Ljava/lang/String;ILjava/lang/String;)V
-PLjava/net/ConnectException;-><init>(Ljava/lang/String;)V
-HSPLjava/net/ConnectException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
 HSPLjava/net/CookieHandler;-><init>()V
 HSPLjava/net/CookieHandler;->getDefault()Ljava/net/CookieHandler;
-HSPLjava/net/CookieHandler;->setDefault(Ljava/net/CookieHandler;)V
-HSPLjava/net/CookieManager$CookiePathComparator;-><init>()V
-HSPLjava/net/CookieManager$CookiePathComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLjava/net/CookieManager$CookiePathComparator;->compare(Ljava/net/HttpCookie;Ljava/net/HttpCookie;)I
-HSPLjava/net/CookieManager;-><init>()V
 HSPLjava/net/CookieManager;-><init>(Ljava/net/CookieStore;Ljava/net/CookiePolicy;)V
-HSPLjava/net/CookieManager;->get(Ljava/net/URI;Ljava/util/Map;)Ljava/util/Map;
-HSPLjava/net/CookieManager;->getCookieStore()Ljava/net/CookieStore;
-HSPLjava/net/CookieManager;->normalizePath(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/net/CookieManager;->pathMatches(Ljava/net/URI;Ljava/net/HttpCookie;)Z
-HSPLjava/net/CookieManager;->put(Ljava/net/URI;Ljava/util/Map;)V
-HSPLjava/net/CookieManager;->setCookiePolicy(Ljava/net/CookiePolicy;)V
-HSPLjava/net/CookieManager;->shouldAcceptInternal(Ljava/net/URI;Ljava/net/HttpCookie;)Z
-HSPLjava/net/CookieManager;->sortByPath(Ljava/util/List;)Ljava/util/List;
-HSPLjava/net/CookiePolicy$1;->shouldAccept(Ljava/net/URI;Ljava/net/HttpCookie;)Z
-HSPLjava/net/CookiePolicy$3;->shouldAccept(Ljava/net/URI;Ljava/net/HttpCookie;)Z
 HSPLjava/net/DatagramPacket;-><init>([BI)V
 HSPLjava/net/DatagramPacket;-><init>([BII)V
-HSPLjava/net/DatagramPacket;-><init>([BIILjava/net/InetAddress;I)V
-HPLjava/net/DatagramPacket;-><init>([BIILjava/net/SocketAddress;)V
-HSPLjava/net/DatagramPacket;-><init>([BILjava/net/InetAddress;I)V
-HPLjava/net/DatagramPacket;-><init>([BILjava/net/SocketAddress;)V
 HSPLjava/net/DatagramPacket;->getAddress()Ljava/net/InetAddress;
 HSPLjava/net/DatagramPacket;->getData()[B
 HSPLjava/net/DatagramPacket;->getLength()I
@@ -37070,98 +17465,28 @@
 HSPLjava/net/DatagramPacket;->setData([BII)V
 HSPLjava/net/DatagramPacket;->setPort(I)V
 HSPLjava/net/DatagramPacket;->setReceivedLength(I)V
-HPLjava/net/DatagramPacket;->setSocketAddress(Ljava/net/SocketAddress;)V
 HSPLjava/net/DatagramSocket$1;-><init>(Ljava/net/DatagramSocket;)V
 HSPLjava/net/DatagramSocket$1;->run()Ljava/lang/Object;
 HSPLjava/net/DatagramSocket$1;->run()Ljava/lang/Void;
-HSPLjava/net/DatagramSocket;-><init>()V
 HSPLjava/net/DatagramSocket;-><init>(Ljava/net/SocketAddress;)V
 HSPLjava/net/DatagramSocket;->bind(Ljava/net/SocketAddress;)V
 HSPLjava/net/DatagramSocket;->checkAddress(Ljava/net/InetAddress;Ljava/lang/String;)V
 HSPLjava/net/DatagramSocket;->checkOldImpl()V
 HSPLjava/net/DatagramSocket;->close()V
-HSPLjava/net/DatagramSocket;->connect(Ljava/net/SocketAddress;)V
-HSPLjava/net/DatagramSocket;->connectInternal(Ljava/net/InetAddress;I)V
 HSPLjava/net/DatagramSocket;->createImpl()V
-PLjava/net/DatagramSocket;->getFileDescriptor$()Ljava/io/FileDescriptor;
 HSPLjava/net/DatagramSocket;->getImpl()Ljava/net/DatagramSocketImpl;
-PLjava/net/DatagramSocket;->getReuseAddress()Z
 HSPLjava/net/DatagramSocket;->isBound()Z
 HSPLjava/net/DatagramSocket;->isClosed()Z
 HSPLjava/net/DatagramSocket;->receive(Ljava/net/DatagramPacket;)V
 HSPLjava/net/DatagramSocket;->send(Ljava/net/DatagramPacket;)V
-HSPLjava/net/DatagramSocket;->setBroadcast(Z)V
-HSPLjava/net/DatagramSocket;->setReceiveBufferSize(I)V
-HSPLjava/net/DatagramSocket;->setReuseAddress(Z)V
-HSPLjava/net/DatagramSocket;->setSoTimeout(I)V
-HSPLjava/net/DatagramSocketImpl;-><init>()V
 HSPLjava/net/DatagramSocketImpl;->setDatagramSocket(Ljava/net/DatagramSocket;)V
-HSPLjava/net/DefaultDatagramSocketImplFactory;->createDatagramSocketImpl(Z)Ljava/net/DatagramSocketImpl;
-HSPLjava/net/HttpCookie$11;->assign(Ljava/net/HttpCookie;Ljava/lang/String;Ljava/lang/String;)V
-HSPLjava/net/HttpCookie$4;->assign(Ljava/net/HttpCookie;Ljava/lang/String;Ljava/lang/String;)V
-HSPLjava/net/HttpCookie$6;->assign(Ljava/net/HttpCookie;Ljava/lang/String;Ljava/lang/String;)V
-HSPLjava/net/HttpCookie$8;->assign(Ljava/net/HttpCookie;Ljava/lang/String;Ljava/lang/String;)V
-HSPLjava/net/HttpCookie$9;->assign(Ljava/net/HttpCookie;Ljava/lang/String;Ljava/lang/String;)V
-HSPLjava/net/HttpCookie;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLjava/net/HttpCookie;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLjava/net/HttpCookie;->access$000(Ljava/net/HttpCookie;)J
-HSPLjava/net/HttpCookie;->assignAttribute(Ljava/net/HttpCookie;Ljava/lang/String;Ljava/lang/String;)V
-HSPLjava/net/HttpCookie;->domainMatches(Ljava/lang/String;Ljava/lang/String;)Z
-HSPLjava/net/HttpCookie;->equals(Ljava/lang/Object;)Z
-HSPLjava/net/HttpCookie;->equalsIgnoreCase(Ljava/lang/String;Ljava/lang/String;)Z
-HSPLjava/net/HttpCookie;->getComment()Ljava/lang/String;
-HSPLjava/net/HttpCookie;->getCommentURL()Ljava/lang/String;
-HSPLjava/net/HttpCookie;->getDomain()Ljava/lang/String;
-HSPLjava/net/HttpCookie;->getMaxAge()J
-HSPLjava/net/HttpCookie;->getName()Ljava/lang/String;
-HSPLjava/net/HttpCookie;->getPath()Ljava/lang/String;
-HSPLjava/net/HttpCookie;->getPortlist()Ljava/lang/String;
-HSPLjava/net/HttpCookie;->getSecure()Z
-HSPLjava/net/HttpCookie;->getValue()Ljava/lang/String;
-HSPLjava/net/HttpCookie;->getVersion()I
-HSPLjava/net/HttpCookie;->guessCookieVersion(Ljava/lang/String;)I
-HSPLjava/net/HttpCookie;->hasExpired()Z
-HSPLjava/net/HttpCookie;->isFullyQualifiedDomainName(Ljava/lang/String;I)Z
-HSPLjava/net/HttpCookie;->isToken(Ljava/lang/String;)Z
-HSPLjava/net/HttpCookie;->parse(Ljava/lang/String;)Ljava/util/List;
-HSPLjava/net/HttpCookie;->parse(Ljava/lang/String;Z)Ljava/util/List;
-HSPLjava/net/HttpCookie;->parseInternal(Ljava/lang/String;Z)Ljava/net/HttpCookie;
-HSPLjava/net/HttpCookie;->setComment(Ljava/lang/String;)V
-HSPLjava/net/HttpCookie;->setCommentURL(Ljava/lang/String;)V
-HSPLjava/net/HttpCookie;->setDomain(Ljava/lang/String;)V
-HSPLjava/net/HttpCookie;->setHttpOnly(Z)V
-HSPLjava/net/HttpCookie;->setMaxAge(J)V
-HSPLjava/net/HttpCookie;->setPath(Ljava/lang/String;)V
-HSPLjava/net/HttpCookie;->setPortlist(Ljava/lang/String;)V
-HSPLjava/net/HttpCookie;->setSecure(Z)V
-HSPLjava/net/HttpCookie;->setValue(Ljava/lang/String;)V
-HSPLjava/net/HttpCookie;->setVersion(I)V
-HSPLjava/net/HttpCookie;->startsWithIgnoreCase(Ljava/lang/String;Ljava/lang/String;)Z
-HSPLjava/net/HttpCookie;->stripOffSurroundingQuote(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/net/HttpCookie;->toNetscapeHeaderString()Ljava/lang/String;
-HSPLjava/net/HttpCookie;->toString()Ljava/lang/String;
-HPLjava/net/HttpRetryException;-><init>(Ljava/lang/String;I)V
 HSPLjava/net/HttpURLConnection;-><init>(Ljava/net/URL;)V
 HSPLjava/net/HttpURLConnection;->getFollowRedirects()Z
-HSPLjava/net/HttpURLConnection;->getHeaderFieldDate(Ljava/lang/String;J)J
-HSPLjava/net/HttpURLConnection;->getRequestMethod()Ljava/lang/String;
 HSPLjava/net/HttpURLConnection;->setChunkedStreamingMode(I)V
-HSPLjava/net/HttpURLConnection;->setFixedLengthStreamingMode(I)V
-HSPLjava/net/HttpURLConnection;->setInstanceFollowRedirects(Z)V
-HSPLjava/net/HttpURLConnection;->setRequestMethod(Ljava/lang/String;)V
 HSPLjava/net/IDN;->toASCII(Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/net/IDN;->toASCII(Ljava/lang/String;I)Ljava/lang/String;
 HSPLjava/net/InMemoryCookieStore;-><init>()V
 HSPLjava/net/InMemoryCookieStore;-><init>(I)V
-HSPLjava/net/InMemoryCookieStore;->add(Ljava/net/URI;Ljava/net/HttpCookie;)V
-HSPLjava/net/InMemoryCookieStore;->addIndex(Ljava/util/Map;Ljava/lang/Object;Ljava/net/HttpCookie;)V
-HSPLjava/net/InMemoryCookieStore;->get(Ljava/net/URI;)Ljava/util/List;
-PLjava/net/InMemoryCookieStore;->getCookies()Ljava/util/List;
-HSPLjava/net/InMemoryCookieStore;->getEffectiveURI(Ljava/net/URI;)Ljava/net/URI;
-HSPLjava/net/InMemoryCookieStore;->getInternal1(Ljava/util/List;Ljava/util/Map;Ljava/lang/String;)V
-HSPLjava/net/InMemoryCookieStore;->getInternal2(Ljava/util/List;Ljava/util/Map;Ljava/lang/Comparable;)V
-HSPLjava/net/InMemoryCookieStore;->netscapeDomainMatches(Ljava/lang/String;Ljava/lang/String;)Z
-HSPLjava/net/Inet4Address;-><init>()V
 HSPLjava/net/Inet4Address;-><init>(Ljava/lang/String;[B)V
 HSPLjava/net/Inet4Address;->equals(Ljava/lang/Object;)Z
 HSPLjava/net/Inet4Address;->getAddress()[B
@@ -37171,42 +17496,30 @@
 HSPLjava/net/Inet4Address;->isLinkLocalAddress()Z
 HSPLjava/net/Inet4Address;->isLoopbackAddress()Z
 HSPLjava/net/Inet4Address;->isMulticastAddress()Z
-HPLjava/net/Inet4Address;->isSiteLocalAddress()Z
-HSPLjava/net/Inet4Address;->numericToTextFormat([B)Ljava/lang/String;
 HSPLjava/net/Inet6Address$Inet6AddressHolder;-><init>(Ljava/net/Inet6Address;)V
 HSPLjava/net/Inet6Address$Inet6AddressHolder;-><init>(Ljava/net/Inet6Address;Ljava/net/Inet6Address$1;)V
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->equals(Ljava/lang/Object;)Z
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->hashCode()I
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->init([BI)V
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->isAnyLocalAddress()Z
-HPLjava/net/Inet6Address$Inet6AddressHolder;->isIPv4CompatibleAddress()Z
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->isLinkLocalAddress()Z
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->isLoopbackAddress()Z
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->isMulticastAddress()Z
-HPLjava/net/Inet6Address$Inet6AddressHolder;->isSiteLocalAddress()Z
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->setAddr([B)V
-HSPLjava/net/Inet6Address;-><init>()V
 HSPLjava/net/Inet6Address;-><init>(Ljava/lang/String;[BI)V
 HSPLjava/net/Inet6Address;->equals(Ljava/lang/Object;)Z
 HSPLjava/net/Inet6Address;->getAddress()[B
+HSPLjava/net/Inet6Address;->getByAddress(Ljava/lang/String;[BI)Ljava/net/Inet6Address;
 HSPLjava/net/Inet6Address;->getHostAddress()Ljava/lang/String;
 HSPLjava/net/Inet6Address;->getScopeId()I
 HSPLjava/net/Inet6Address;->hashCode()I
 HSPLjava/net/Inet6Address;->isAnyLocalAddress()Z
-HPLjava/net/Inet6Address;->isIPv4CompatibleAddress()Z
 HSPLjava/net/Inet6Address;->isLinkLocalAddress()Z
 HSPLjava/net/Inet6Address;->isLoopbackAddress()Z
 HSPLjava/net/Inet6Address;->isMulticastAddress()Z
-PLjava/net/Inet6Address;->isSiteLocalAddress()Z
 HSPLjava/net/Inet6AddressImpl;->clearAddressCache()V
-PLjava/net/Inet6AddressImpl;->getHostByAddr([B)Ljava/lang/String;
-PLjava/net/Inet6AddressImpl;->getHostByAddr0([B)Ljava/lang/String;
-HPLjava/net/Inet6AddressImpl;->icmpEcho(Ljava/net/InetAddress;ILjava/net/InetAddress;I)Z
-HPLjava/net/Inet6AddressImpl;->isReachable(Ljava/net/InetAddress;ILjava/net/NetworkInterface;I)Z
 HSPLjava/net/Inet6AddressImpl;->lookupAllHostAddr(Ljava/lang/String;I)[Ljava/net/InetAddress;
 HSPLjava/net/Inet6AddressImpl;->lookupHostByName(Ljava/lang/String;I)[Ljava/net/InetAddress;
-HPLjava/net/Inet6AddressImpl;->tcpEcho(Ljava/net/InetAddress;ILjava/net/InetAddress;I)Z
-PLjava/net/InetAddress$1;->getHostByAddr([B)Ljava/lang/String;
 HSPLjava/net/InetAddress$InetAddressHolder;-><init>()V
 HSPLjava/net/InetAddress$InetAddressHolder;->getAddress()I
 HSPLjava/net/InetAddress$InetAddressHolder;->getHostName()Ljava/lang/String;
@@ -37214,29 +17527,21 @@
 HSPLjava/net/InetAddress;-><init>()V
 HSPLjava/net/InetAddress;->clearDnsCache()V
 HSPLjava/net/InetAddress;->getAllByName(Ljava/lang/String;)[Ljava/net/InetAddress;
-HSPLjava/net/InetAddress;->getAllByNameOnNet(Ljava/lang/String;I)[Ljava/net/InetAddress;
 HSPLjava/net/InetAddress;->getByAddress(Ljava/lang/String;[B)Ljava/net/InetAddress;
 HSPLjava/net/InetAddress;->getByAddress(Ljava/lang/String;[BI)Ljava/net/InetAddress;
 HSPLjava/net/InetAddress;->getByAddress([B)Ljava/net/InetAddress;
 HSPLjava/net/InetAddress;->getByName(Ljava/lang/String;)Ljava/net/InetAddress;
-PLjava/net/InetAddress;->getByNameOnNet(Ljava/lang/String;I)Ljava/net/InetAddress;
-PLjava/net/InetAddress;->getHostFromNameService(Ljava/net/InetAddress;)Ljava/lang/String;
-HSPLjava/net/InetAddress;->getHostName()Ljava/lang/String;
 HSPLjava/net/InetAddress;->holder()Ljava/net/InetAddress$InetAddressHolder;
-HPLjava/net/InetAddress;->isReachable(I)Z
-HPLjava/net/InetAddress;->isReachable(Ljava/net/NetworkInterface;II)Z
 HSPLjava/net/InetAddress;->parseNumericAddress(Ljava/lang/String;)Ljava/net/InetAddress;
 HSPLjava/net/InetAddress;->toString()Ljava/lang/String;
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;-><init>(Ljava/lang/String;Ljava/net/InetAddress;I)V
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;-><init>(Ljava/lang/String;Ljava/net/InetAddress;ILjava/net/InetSocketAddress$1;)V
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->access$400(Ljava/net/InetSocketAddress$InetSocketAddressHolder;)I
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->access$500(Ljava/net/InetSocketAddress$InetSocketAddressHolder;)Ljava/net/InetAddress;
-HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->access$600(Ljava/net/InetSocketAddress$InetSocketAddressHolder;)Ljava/lang/String;
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->access$700(Ljava/net/InetSocketAddress$InetSocketAddressHolder;)Ljava/lang/String;
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->access$800(Ljava/net/InetSocketAddress$InetSocketAddressHolder;)Z
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->equals(Ljava/lang/Object;)Z
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->getAddress()Ljava/net/InetAddress;
-HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->getHostName()Ljava/lang/String;
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->getHostString()Ljava/lang/String;
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->getPort()I
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->hashCode()I
@@ -37252,7 +17557,6 @@
 HSPLjava/net/InetSocketAddress;->createUnresolved(Ljava/lang/String;I)Ljava/net/InetSocketAddress;
 HSPLjava/net/InetSocketAddress;->equals(Ljava/lang/Object;)Z
 HSPLjava/net/InetSocketAddress;->getAddress()Ljava/net/InetAddress;
-HSPLjava/net/InetSocketAddress;->getHostName()Ljava/lang/String;
 HSPLjava/net/InetSocketAddress;->getHostString()Ljava/lang/String;
 HSPLjava/net/InetSocketAddress;->getPort()I
 HSPLjava/net/InetSocketAddress;->hashCode()I
@@ -37260,100 +17564,37 @@
 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
-HPLjava/net/InterfaceAddress;->getAddress()Ljava/net/InetAddress;
 HSPLjava/net/JarURLConnection;-><init>(Ljava/net/URL;)V
 HSPLjava/net/JarURLConnection;->getEntryName()Ljava/lang/String;
 HSPLjava/net/JarURLConnection;->parseSpecs(Ljava/net/URL;)V
-PLjava/net/MalformedURLException;-><init>(Ljava/lang/String;)V
-HSPLjava/net/MulticastSocket;-><init>()V
-HSPLjava/net/MulticastSocket;-><init>(I)V
-HSPLjava/net/MulticastSocket;-><init>(Ljava/net/SocketAddress;)V
-HSPLjava/net/MulticastSocket;->joinGroup(Ljava/net/InetAddress;)V
-HPLjava/net/MulticastSocket;->joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V
-HPLjava/net/MulticastSocket;->leaveGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V
-HSPLjava/net/MulticastSocket;->setNetworkInterface(Ljava/net/NetworkInterface;)V
-HPLjava/net/MulticastSocket;->setTimeToLive(I)V
-HSPLjava/net/NetworkInterface$1checkedAddresses;-><init>(Ljava/net/NetworkInterface;)V
-HSPLjava/net/NetworkInterface$1checkedAddresses;->hasMoreElements()Z
-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;->access$000(Ljava/net/NetworkInterface;)[Ljava/net/InetAddress;
 HSPLjava/net/NetworkInterface;->getAll()[Ljava/net/NetworkInterface;
-HPLjava/net/NetworkInterface;->getByName(Ljava/lang/String;)Ljava/net/NetworkInterface;
-HSPLjava/net/NetworkInterface;->getDefault()Ljava/net/NetworkInterface;
-HSPLjava/net/NetworkInterface;->getFlags()I
-HPLjava/net/NetworkInterface;->getHardwareAddress()[B
-HSPLjava/net/NetworkInterface;->getIndex()I
-HSPLjava/net/NetworkInterface;->getInetAddresses()Ljava/util/Enumeration;
-HPLjava/net/NetworkInterface;->getInterfaceAddresses()Ljava/util/List;
-HPLjava/net/NetworkInterface;->getMTU()I
 HSPLjava/net/NetworkInterface;->getName()Ljava/lang/String;
-HSPLjava/net/NetworkInterface;->getNetworkInterfaces()Ljava/util/Enumeration;
-HSPLjava/net/NetworkInterface;->isLoopback()Z
-HSPLjava/net/NetworkInterface;->isPointToPoint()Z
-HPLjava/net/NetworkInterface;->isUp()Z
-PLjava/net/NetworkInterface;->isVirtual()Z
-HPLjava/net/NetworkInterface;->supportsMulticast()Z
 HSPLjava/net/Parts;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/net/Parts;->getPath()Ljava/lang/String;
 HSPLjava/net/Parts;->getQuery()Ljava/lang/String;
 HSPLjava/net/Parts;->getRef()Ljava/lang/String;
-HSPLjava/net/PlainDatagramSocketImpl;-><init>()V
 HSPLjava/net/PlainDatagramSocketImpl;->bind0(ILjava/net/InetAddress;)V
-HSPLjava/net/PlainDatagramSocketImpl;->connect0(Ljava/net/InetAddress;I)V
 HSPLjava/net/PlainDatagramSocketImpl;->datagramSocketClose()V
 HSPLjava/net/PlainDatagramSocketImpl;->datagramSocketCreate()V
 HSPLjava/net/PlainDatagramSocketImpl;->doRecv(Ljava/net/DatagramPacket;I)V
-HSPLjava/net/PlainDatagramSocketImpl;->join(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)V
-HPLjava/net/PlainDatagramSocketImpl;->leave(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)V
-HSPLjava/net/PlainDatagramSocketImpl;->makeGroupReq(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)Landroid/system/StructGroupReq;
 HSPLjava/net/PlainDatagramSocketImpl;->receive0(Ljava/net/DatagramPacket;)V
 HSPLjava/net/PlainDatagramSocketImpl;->send(Ljava/net/DatagramPacket;)V
-HPLjava/net/PlainDatagramSocketImpl;->setTimeToLive(I)V
-PLjava/net/PlainDatagramSocketImpl;->socketGetOption(I)Ljava/lang/Object;
-HSPLjava/net/PlainDatagramSocketImpl;->socketSetOption(ILjava/lang/Object;)V
-HSPLjava/net/PlainDatagramSocketImpl;->socketSetOption0(ILjava/lang/Object;)V
 HSPLjava/net/PlainSocketImpl;-><init>()V
 HSPLjava/net/PlainSocketImpl;->getMarkerFD()Ljava/io/FileDescriptor;
-HSPLjava/net/PlainSocketImpl;->socketAccept(Ljava/net/SocketImpl;)V
-HPLjava/net/PlainSocketImpl;->socketAvailable()I
-HSPLjava/net/PlainSocketImpl;->socketBind(Ljava/net/InetAddress;I)V
 HSPLjava/net/PlainSocketImpl;->socketClose0(Z)V
 HSPLjava/net/PlainSocketImpl;->socketConnect(Ljava/net/InetAddress;II)V
 HSPLjava/net/PlainSocketImpl;->socketCreate(Z)V
 HSPLjava/net/PlainSocketImpl;->socketGetOption(I)Ljava/lang/Object;
-HSPLjava/net/PlainSocketImpl;->socketListen(I)V
 HSPLjava/net/PlainSocketImpl;->socketSetOption(ILjava/lang/Object;)V
 HSPLjava/net/PlainSocketImpl;->socketSetOption0(ILjava/lang/Object;)V
-HSPLjava/net/PlainSocketImpl;->socketShutdown(I)V
-HPLjava/net/ProtocolException;-><init>(Ljava/lang/String;)V
-HSPLjava/net/Proxy$Type;->values()[Ljava/net/Proxy$Type;
 HSPLjava/net/Proxy;->address()Ljava/net/SocketAddress;
 HSPLjava/net/Proxy;->equals(Ljava/lang/Object;)Z
 HSPLjava/net/Proxy;->hashCode()I
 HSPLjava/net/Proxy;->type()Ljava/net/Proxy$Type;
 HSPLjava/net/ProxySelector;->getDefault()Ljava/net/ProxySelector;
 HSPLjava/net/ProxySelector;->setDefault(Ljava/net/ProxySelector;)V
-HSPLjava/net/ResponseCache;-><init>()V
 HSPLjava/net/ResponseCache;->getDefault()Ljava/net/ResponseCache;
-HSPLjava/net/ResponseCache;->setDefault(Ljava/net/ResponseCache;)V
-HSPLjava/net/ServerSocket;-><init>()V
-HSPLjava/net/ServerSocket;->accept()Ljava/net/Socket;
-HSPLjava/net/ServerSocket;->bind(Ljava/net/SocketAddress;)V
-HSPLjava/net/ServerSocket;->bind(Ljava/net/SocketAddress;I)V
-HSPLjava/net/ServerSocket;->createImpl()V
-HSPLjava/net/ServerSocket;->getImpl()Ljava/net/SocketImpl;
-HSPLjava/net/ServerSocket;->implAccept(Ljava/net/Socket;)V
-HSPLjava/net/ServerSocket;->isBound()Z
-HSPLjava/net/ServerSocket;->isClosed()Z
-HSPLjava/net/ServerSocket;->setBound()V
-HSPLjava/net/ServerSocket;->setCreated()V
-HSPLjava/net/ServerSocket;->setImpl()V
-HSPLjava/net/ServerSocket;->setReuseAddress(Z)V
-HSPLjava/net/Socket$1;-><init>(Ljava/net/Socket;)V
-HSPLjava/net/Socket$1;->run()Ljava/lang/Boolean;
-HSPLjava/net/Socket$1;->run()Ljava/lang/Object;
 HSPLjava/net/Socket$2;-><init>(Ljava/net/Socket;)V
 HSPLjava/net/Socket$2;->run()Ljava/io/InputStream;
 HSPLjava/net/Socket$2;->run()Ljava/lang/Object;
@@ -37362,10 +17603,8 @@
 HSPLjava/net/Socket$3;->run()Ljava/lang/Object;
 HSPLjava/net/Socket;-><init>()V
 HSPLjava/net/Socket;-><init>(Ljava/net/InetAddress;I)V
-HSPLjava/net/Socket;-><init>(Ljava/net/SocketImpl;)V
 HSPLjava/net/Socket;-><init>([Ljava/net/InetAddress;ILjava/net/SocketAddress;Z)V
 HSPLjava/net/Socket;->checkAddress(Ljava/net/InetAddress;Ljava/lang/String;)V
-HSPLjava/net/Socket;->checkOldImpl()V
 HSPLjava/net/Socket;->close()V
 HSPLjava/net/Socket;->connect(Ljava/net/SocketAddress;)V
 HSPLjava/net/Socket;->connect(Ljava/net/SocketAddress;I)V
@@ -37388,39 +17627,30 @@
 HSPLjava/net/Socket;->isInputShutdown()Z
 HSPLjava/net/Socket;->isOutputShutdown()Z
 HSPLjava/net/Socket;->nonNullAddress(Ljava/net/InetAddress;)[Ljava/net/InetAddress;
-HPLjava/net/Socket;->postAccept()V
 HSPLjava/net/Socket;->setBound()V
 HSPLjava/net/Socket;->setConnected()V
 HSPLjava/net/Socket;->setCreated()V
 HSPLjava/net/Socket;->setImpl()V
 HSPLjava/net/Socket;->setSoTimeout(I)V
 HSPLjava/net/Socket;->setTcpNoDelay(Z)V
-HSPLjava/net/Socket;->shutdownInput()V
-HSPLjava/net/Socket;->shutdownOutput()V
 HSPLjava/net/SocketAddress;-><init>()V
 HSPLjava/net/SocketException;-><init>(Ljava/lang/String;)V
-HSPLjava/net/SocketException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
 HSPLjava/net/SocketImpl;-><init>()V
 HSPLjava/net/SocketImpl;->getFileDescriptor()Ljava/io/FileDescriptor;
 HSPLjava/net/SocketImpl;->getInetAddress()Ljava/net/InetAddress;
 HSPLjava/net/SocketImpl;->getLocalPort()I
 HSPLjava/net/SocketImpl;->getPort()I
 HSPLjava/net/SocketImpl;->getSocket()Ljava/net/Socket;
-HSPLjava/net/SocketImpl;->setServerSocket(Ljava/net/ServerSocket;)V
 HSPLjava/net/SocketImpl;->setSocket(Ljava/net/Socket;)V
 HSPLjava/net/SocketInputStream;-><init>(Ljava/net/AbstractPlainSocketImpl;)V
-HPLjava/net/SocketInputStream;->available()I
-HPLjava/net/SocketInputStream;->close()V
 HSPLjava/net/SocketInputStream;->finalize()V
 HSPLjava/net/SocketInputStream;->read([BII)I
 HSPLjava/net/SocketInputStream;->read([BIII)I
 HSPLjava/net/SocketInputStream;->socketRead(Ljava/io/FileDescriptor;[BIII)I
 HSPLjava/net/SocketOutputStream;-><init>(Ljava/net/AbstractPlainSocketImpl;)V
-HPLjava/net/SocketOutputStream;->close()V
 HSPLjava/net/SocketOutputStream;->finalize()V
 HSPLjava/net/SocketOutputStream;->socketWrite([BII)V
 HSPLjava/net/SocketOutputStream;->write([BII)V
-HPLjava/net/SocketTimeoutException;-><init>()V
 HSPLjava/net/SocketTimeoutException;-><init>(Ljava/lang/String;)V
 HSPLjava/net/SocksSocketImpl;-><init>()V
 HSPLjava/net/SocksSocketImpl;->close()V
@@ -37434,7 +17664,6 @@
 HSPLjava/net/URI$Parser;->charAt(I)C
 HSPLjava/net/URI$Parser;->checkChar(IJJLjava/lang/String;)V
 HSPLjava/net/URI$Parser;->checkChars(IIJJLjava/lang/String;)V
-HPLjava/net/URI$Parser;->fail(Ljava/lang/String;I)V
 HSPLjava/net/URI$Parser;->parse(Z)V
 HSPLjava/net/URI$Parser;->parseAuthority(II)I
 HSPLjava/net/URI$Parser;->parseHierarchical(II)I
@@ -37444,12 +17673,10 @@
 HSPLjava/net/URI$Parser;->scan(IIC)I
 HSPLjava/net/URI$Parser;->scan(IIJJ)I
 HSPLjava/net/URI$Parser;->scan(IILjava/lang/String;Ljava/lang/String;)I
-HSPLjava/net/URI$Parser;->scanByte(II)I
 HSPLjava/net/URI$Parser;->scanEscape(IIC)I
 HSPLjava/net/URI$Parser;->scanIPv4Address(IIZ)I
 HSPLjava/net/URI$Parser;->substring(II)Ljava/lang/String;
 HSPLjava/net/URI;-><init>(Ljava/lang/String;)V
-HSPLjava/net/URI;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/net/URI;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/net/URI;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/net/URI;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
@@ -37466,11 +17693,8 @@
 HSPLjava/net/URI;->access$2000()J
 HSPLjava/net/URI;->access$2100()J
 HSPLjava/net/URI;->access$2202(Ljava/net/URI;Ljava/lang/String;)Ljava/lang/String;
-HPLjava/net/URI;->access$2302(Ljava/net/URI;Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/net/URI;->access$2402(Ljava/net/URI;Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/net/URI;->access$2502(Ljava/net/URI;I)I
-HPLjava/net/URI;->access$2600()J
-HPLjava/net/URI;->access$2700()J
 HSPLjava/net/URI;->access$2800()J
 HSPLjava/net/URI;->access$2900()J
 HSPLjava/net/URI;->access$300(CJJ)Z
@@ -37491,15 +17715,9 @@
 HSPLjava/net/URI;->appendFragment(Ljava/lang/StringBuffer;Ljava/lang/String;)V
 HSPLjava/net/URI;->appendSchemeSpecificPart(Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
 HSPLjava/net/URI;->checkPath(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLjava/net/URI;->compare(Ljava/lang/String;Ljava/lang/String;)I
-HSPLjava/net/URI;->compareIgnoringCase(Ljava/lang/String;Ljava/lang/String;)I
-HSPLjava/net/URI;->compareTo(Ljava/lang/Object;)I
-HSPLjava/net/URI;->compareTo(Ljava/net/URI;)I
 HSPLjava/net/URI;->create(Ljava/lang/String;)Ljava/net/URI;
 HSPLjava/net/URI;->decode(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/net/URI;->defineSchemeSpecificPart()V
 HSPLjava/net/URI;->defineString()V
-HSPLjava/net/URI;->encode(Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/net/URI;->equal(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLjava/net/URI;->equalIgnoringCase(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLjava/net/URI;->equals(Ljava/lang/Object;)Z
@@ -37509,12 +17727,8 @@
 HSPLjava/net/URI;->getPath()Ljava/lang/String;
 HSPLjava/net/URI;->getPort()I
 HSPLjava/net/URI;->getQuery()Ljava/lang/String;
-HSPLjava/net/URI;->getRawFragment()Ljava/lang/String;
-HSPLjava/net/URI;->getRawPath()Ljava/lang/String;
 HSPLjava/net/URI;->getRawQuery()Ljava/lang/String;
-HSPLjava/net/URI;->getRawSchemeSpecificPart()Ljava/lang/String;
 HSPLjava/net/URI;->getScheme()Ljava/lang/String;
-HSPLjava/net/URI;->getSchemeSpecificPart()Ljava/lang/String;
 HSPLjava/net/URI;->getUserInfo()Ljava/lang/String;
 HSPLjava/net/URI;->hash(ILjava/lang/String;)I
 HSPLjava/net/URI;->hashCode()I
@@ -37523,23 +17737,15 @@
 HSPLjava/net/URI;->isOpaque()Z
 HSPLjava/net/URI;->match(CJJ)Z
 HSPLjava/net/URI;->quote(Ljava/lang/String;JJ)Ljava/lang/String;
-HSPLjava/net/URI;->toASCIIString()Ljava/lang/String;
 HSPLjava/net/URI;->toLower(C)I
 HSPLjava/net/URI;->toString()Ljava/lang/String;
 HSPLjava/net/URI;->toString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLjava/net/URI;->toURL()Ljava/net/URL;
-HPLjava/net/URISyntaxException;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
-HPLjava/net/URISyntaxException;->getMessage()Ljava/lang/String;
-HPLjava/net/URISyntaxException;->getReason()Ljava/lang/String;
 HSPLjava/net/URL;-><init>(Ljava/lang/String;)V
-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/lang/String;Ljava/lang/String;Ljava/lang/String;)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;->createBuiltinHandler(Ljava/lang/String;)Ljava/net/URLStreamHandler;
 HSPLjava/net/URL;->getAuthority()Ljava/lang/String;
-HSPLjava/net/URL;->getDefaultPort()I
 HSPLjava/net/URL;->getFile()Ljava/lang/String;
 HSPLjava/net/URL;->getHost()Ljava/lang/String;
 HSPLjava/net/URL;->getPath()Ljava/lang/String;
@@ -37549,12 +17755,10 @@
 HSPLjava/net/URL;->getRef()Ljava/lang/String;
 HSPLjava/net/URL;->getURLStreamHandler(Ljava/lang/String;)Ljava/net/URLStreamHandler;
 HSPLjava/net/URL;->getUserInfo()Ljava/lang/String;
-HSPLjava/net/URL;->hashCode()I
 HSPLjava/net/URL;->isValidProtocol(Ljava/lang/String;)Z
 HSPLjava/net/URL;->openConnection()Ljava/net/URLConnection;
 HSPLjava/net/URL;->openStream()Ljava/io/InputStream;
 HSPLjava/net/URL;->set(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLjava/net/URL;->setURLStreamHandlerFactory(Ljava/net/URLStreamHandlerFactory;)V
 HSPLjava/net/URL;->toExternalForm()Ljava/lang/String;
 HSPLjava/net/URL;->toString()Ljava/lang/String;
 HSPLjava/net/URLConnection;-><init>(Ljava/net/URL;)V
@@ -37562,24 +17766,15 @@
 HSPLjava/net/URLConnection;->getContentLength()I
 HSPLjava/net/URLConnection;->getContentLengthLong()J
 HSPLjava/net/URLConnection;->getContentType()Ljava/lang/String;
-HSPLjava/net/URLConnection;->getHeaderFieldInt(Ljava/lang/String;I)I
 HSPLjava/net/URLConnection;->getHeaderFieldLong(Ljava/lang/String;J)J
-HSPLjava/net/URLConnection;->getLastModified()J
-HSPLjava/net/URLConnection;->getReadTimeout()I
 HSPLjava/net/URLConnection;->getURL()Ljava/net/URL;
 HSPLjava/net/URLConnection;->getUseCaches()Z
-HSPLjava/net/URLConnection;->setAllowUserInteraction(Z)V
-HSPLjava/net/URLConnection;->setDefaultUseCaches(Z)V
 HSPLjava/net/URLConnection;->setDoInput(Z)V
 HSPLjava/net/URLConnection;->setDoOutput(Z)V
-HSPLjava/net/URLConnection;->setIfModifiedSince(J)V
-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;->isValidHexChar(C)Z
 HSPLjava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/net/URLStreamHandler;-><init>()V
-HSPLjava/net/URLStreamHandler;->hashCode(Ljava/net/URL;)I
 HSPLjava/net/URLStreamHandler;->parseURL(Ljava/net/URL;Ljava/lang/String;II)V
 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;
@@ -37587,11 +17782,7 @@
 HSPLjava/nio/Bits;->byteOrder()Ljava/nio/ByteOrder;
 HSPLjava/nio/Bits;->char0(C)B
 HSPLjava/nio/Bits;->char1(C)B
-HSPLjava/nio/Bits;->getDouble(Ljava/nio/ByteBuffer;IZ)D
-HSPLjava/nio/Bits;->getDoubleB(Ljava/nio/ByteBuffer;I)D
-HSPLjava/nio/Bits;->getDoubleL(Ljava/nio/ByteBuffer;I)D
 HSPLjava/nio/Bits;->getFloat(Ljava/nio/ByteBuffer;IZ)F
-PLjava/nio/Bits;->getFloatB(Ljava/nio/ByteBuffer;I)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
@@ -37621,12 +17812,6 @@
 HSPLjava/nio/Bits;->pageSize()I
 HSPLjava/nio/Bits;->putChar(Ljava/nio/ByteBuffer;ICZ)V
 HSPLjava/nio/Bits;->putCharB(Ljava/nio/ByteBuffer;IC)V
-HSPLjava/nio/Bits;->putCharL(Ljava/nio/ByteBuffer;IC)V
-PLjava/nio/Bits;->putDouble(Ljava/nio/ByteBuffer;IDZ)V
-PLjava/nio/Bits;->putDoubleL(Ljava/nio/ByteBuffer;ID)V
-HPLjava/nio/Bits;->putFloat(Ljava/nio/ByteBuffer;IFZ)V
-PLjava/nio/Bits;->putFloatB(Ljava/nio/ByteBuffer;IF)V
-HPLjava/nio/Bits;->putFloatL(Ljava/nio/ByteBuffer;IF)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
@@ -37665,15 +17850,11 @@
 HSPLjava/nio/ByteBuffer;-><init>(IIII[BI)V
 HSPLjava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;
 HSPLjava/nio/ByteBuffer;->allocateDirect(I)Ljava/nio/ByteBuffer;
-HPLjava/nio/ByteBuffer;->array()Ljava/lang/Object;
 HSPLjava/nio/ByteBuffer;->array()[B
 HSPLjava/nio/ByteBuffer;->arrayOffset()I
 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;->equals(BB)Z
-HSPLjava/nio/ByteBuffer;->equals(Ljava/lang/Object;)Z
 HSPLjava/nio/ByteBuffer;->flip()Ljava/nio/Buffer;
 HSPLjava/nio/ByteBuffer;->get([B)Ljava/nio/ByteBuffer;
 HSPLjava/nio/ByteBuffer;->hasArray()Z
@@ -37687,7 +17868,6 @@
 HSPLjava/nio/ByteBuffer;->put([B)Ljava/nio/ByteBuffer;
 HSPLjava/nio/ByteBuffer;->reset()Ljava/nio/Buffer;
 HSPLjava/nio/ByteBuffer;->rewind()Ljava/nio/Buffer;
-HPLjava/nio/ByteBuffer;->toString()Ljava/lang/String;
 HSPLjava/nio/ByteBuffer;->wrap([B)Ljava/nio/ByteBuffer;
 HSPLjava/nio/ByteBuffer;->wrap([BII)Ljava/nio/ByteBuffer;
 HSPLjava/nio/ByteBufferAsCharBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V
@@ -37701,27 +17881,14 @@
 HSPLjava/nio/ByteBufferAsCharBuffer;->toString(II)Ljava/lang/String;
 HSPLjava/nio/ByteBufferAsFloatBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V
 HSPLjava/nio/ByteBufferAsFloatBuffer;->ix(I)I
-HSPLjava/nio/ByteBufferAsFloatBuffer;->put(F)Ljava/nio/FloatBuffer;
-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
-PLjava/nio/ByteBufferAsIntBuffer;->get()I
-HPLjava/nio/ByteBufferAsIntBuffer;->get(I)I
 HSPLjava/nio/ByteBufferAsIntBuffer;->get([III)Ljava/nio/IntBuffer;
 HSPLjava/nio/ByteBufferAsIntBuffer;->ix(I)I
-PLjava/nio/ByteBufferAsIntBuffer;->put(I)Ljava/nio/IntBuffer;
-HPLjava/nio/ByteBufferAsIntBuffer;->put(II)Ljava/nio/IntBuffer;
-PLjava/nio/ByteBufferAsIntBuffer;->put([III)Ljava/nio/IntBuffer;
 HSPLjava/nio/ByteBufferAsLongBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V
-HSPLjava/nio/ByteBufferAsLongBuffer;->get(I)J
-PLjava/nio/ByteBufferAsLongBuffer;->get([JII)Ljava/nio/LongBuffer;
 HSPLjava/nio/ByteBufferAsLongBuffer;->ix(I)I
-HSPLjava/nio/ByteBufferAsLongBuffer;->put(IJ)Ljava/nio/LongBuffer;
-PLjava/nio/ByteBufferAsLongBuffer;->put([JII)Ljava/nio/LongBuffer;
 HSPLjava/nio/ByteBufferAsShortBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V
 HSPLjava/nio/ByteBufferAsShortBuffer;->get([SII)Ljava/nio/ShortBuffer;
 HSPLjava/nio/ByteBufferAsShortBuffer;->ix(I)I
-PLjava/nio/ByteBufferAsShortBuffer;->put([SII)Ljava/nio/ShortBuffer;
 HSPLjava/nio/ByteOrder;->nativeOrder()Ljava/nio/ByteOrder;
 HSPLjava/nio/CharBuffer;-><init>(IIII)V
 HSPLjava/nio/CharBuffer;-><init>(IIII[CI)V
@@ -37744,7 +17911,6 @@
 HSPLjava/nio/CharBuffer;->wrap([CII)Ljava/nio/CharBuffer;
 HSPLjava/nio/DirectByteBuffer$MemoryRef;-><init>(I)V
 HSPLjava/nio/DirectByteBuffer$MemoryRef;-><init>(JLjava/lang/Object;)V
-PLjava/nio/DirectByteBuffer$MemoryRef;->free()V
 HSPLjava/nio/DirectByteBuffer;-><init>(IJLjava/io/FileDescriptor;Ljava/lang/Runnable;Z)V
 HSPLjava/nio/DirectByteBuffer;-><init>(ILjava/nio/DirectByteBuffer$MemoryRef;)V
 HSPLjava/nio/DirectByteBuffer;-><init>(JI)V
@@ -37764,18 +17930,11 @@
 HSPLjava/nio/DirectByteBuffer;->getChar()C
 HSPLjava/nio/DirectByteBuffer;->getChar(I)C
 HSPLjava/nio/DirectByteBuffer;->getCharUnchecked(I)C
-PLjava/nio/DirectByteBuffer;->getDouble(I)D
-PLjava/nio/DirectByteBuffer;->getDouble(J)D
-HSPLjava/nio/DirectByteBuffer;->getFloat()F
-HPLjava/nio/DirectByteBuffer;->getFloat(I)F
-HSPLjava/nio/DirectByteBuffer;->getFloat(J)F
 HSPLjava/nio/DirectByteBuffer;->getInt()I
 HSPLjava/nio/DirectByteBuffer;->getInt(I)I
 HSPLjava/nio/DirectByteBuffer;->getInt(J)I
-HSPLjava/nio/DirectByteBuffer;->getLong()J
 HSPLjava/nio/DirectByteBuffer;->getLong(I)J
 HSPLjava/nio/DirectByteBuffer;->getLong(J)J
-HSPLjava/nio/DirectByteBuffer;->getShort()S
 HSPLjava/nio/DirectByteBuffer;->getShort(I)S
 HSPLjava/nio/DirectByteBuffer;->getShort(J)S
 HSPLjava/nio/DirectByteBuffer;->getUnchecked(I[CII)V
@@ -37784,31 +17943,14 @@
 HSPLjava/nio/DirectByteBuffer;->isDirect()Z
 HSPLjava/nio/DirectByteBuffer;->isReadOnly()Z
 HSPLjava/nio/DirectByteBuffer;->ix(I)J
-HSPLjava/nio/DirectByteBuffer;->put(B)Ljava/nio/ByteBuffer;
-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;
-HSPLjava/nio/DirectByteBuffer;->putDouble(ID)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(JI)Ljava/nio/ByteBuffer;
-HSPLjava/nio/DirectByteBuffer;->putLong(IJ)Ljava/nio/ByteBuffer;
-HSPLjava/nio/DirectByteBuffer;->putLong(J)Ljava/nio/ByteBuffer;
-HSPLjava/nio/DirectByteBuffer;->putLong(JJ)Ljava/nio/ByteBuffer;
-HSPLjava/nio/DirectByteBuffer;->putUnchecked(I[FII)V
-HSPLjava/nio/DirectByteBuffer;->setAccessible(Z)V
 HSPLjava/nio/DirectByteBuffer;->slice()Ljava/nio/ByteBuffer;
 HSPLjava/nio/FloatBuffer;-><init>(IIII)V
 HSPLjava/nio/FloatBuffer;-><init>(IIII[FI)V
-HSPLjava/nio/FloatBuffer;->clear()Ljava/nio/Buffer;
-HPLjava/nio/FloatBuffer;->flip()Ljava/nio/Buffer;
 HSPLjava/nio/FloatBuffer;->limit(I)Ljava/nio/Buffer;
 HSPLjava/nio/FloatBuffer;->position(I)Ljava/nio/Buffer;
-HSPLjava/nio/FloatBuffer;->put([F)Ljava/nio/FloatBuffer;
 HSPLjava/nio/HeapByteBuffer;-><init>(II)V
 HSPLjava/nio/HeapByteBuffer;-><init>(IIZ)V
 HSPLjava/nio/HeapByteBuffer;-><init>([BII)V
@@ -37816,91 +17958,50 @@
 HSPLjava/nio/HeapByteBuffer;-><init>([BIIZ)V
 HSPLjava/nio/HeapByteBuffer;->_get(I)B
 HSPLjava/nio/HeapByteBuffer;->_put(IB)V
-HSPLjava/nio/HeapByteBuffer;->asCharBuffer()Ljava/nio/CharBuffer;
-HPLjava/nio/HeapByteBuffer;->asIntBuffer()Ljava/nio/IntBuffer;
-HSPLjava/nio/HeapByteBuffer;->asLongBuffer()Ljava/nio/LongBuffer;
-HSPLjava/nio/HeapByteBuffer;->asReadOnlyBuffer()Ljava/nio/ByteBuffer;
-PLjava/nio/HeapByteBuffer;->asShortBuffer()Ljava/nio/ShortBuffer;
 HSPLjava/nio/HeapByteBuffer;->compact()Ljava/nio/ByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->duplicate()Ljava/nio/ByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->get()B
 HSPLjava/nio/HeapByteBuffer;->get(I)B
 HSPLjava/nio/HeapByteBuffer;->get([BII)Ljava/nio/ByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->getDouble()D
-HSPLjava/nio/HeapByteBuffer;->getFloat()F
 HSPLjava/nio/HeapByteBuffer;->getFloat(I)F
 HSPLjava/nio/HeapByteBuffer;->getInt()I
 HSPLjava/nio/HeapByteBuffer;->getInt(I)I
-HPLjava/nio/HeapByteBuffer;->getIntUnchecked(I)I
 HSPLjava/nio/HeapByteBuffer;->getLong()J
 HSPLjava/nio/HeapByteBuffer;->getLong(I)J
-HSPLjava/nio/HeapByteBuffer;->getLongUnchecked(I)J
 HSPLjava/nio/HeapByteBuffer;->getShort()S
 HSPLjava/nio/HeapByteBuffer;->getShort(I)S
-HSPLjava/nio/HeapByteBuffer;->getUnchecked(I[CII)V
-PLjava/nio/HeapByteBuffer;->getUnchecked(I[III)V
-PLjava/nio/HeapByteBuffer;->getUnchecked(I[JII)V
-PLjava/nio/HeapByteBuffer;->getUnchecked(I[SII)V
 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([BII)Ljava/nio/ByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->putChar(C)Ljava/nio/ByteBuffer;
-PLjava/nio/HeapByteBuffer;->putDouble(ID)Ljava/nio/ByteBuffer;
-PLjava/nio/HeapByteBuffer;->putFloat(F)Ljava/nio/ByteBuffer;
-HPLjava/nio/HeapByteBuffer;->putFloat(IF)Ljava/nio/ByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->putInt(I)Ljava/nio/ByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->putInt(II)Ljava/nio/ByteBuffer;
-HPLjava/nio/HeapByteBuffer;->putIntUnchecked(II)V
 HSPLjava/nio/HeapByteBuffer;->putLong(IJ)Ljava/nio/ByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->putLong(J)Ljava/nio/ByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->putLongUnchecked(IJ)V
-HSPLjava/nio/HeapByteBuffer;->putShort(IS)Ljava/nio/ByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->putShort(S)Ljava/nio/ByteBuffer;
-PLjava/nio/HeapByteBuffer;->putUnchecked(I[III)V
-HPLjava/nio/HeapByteBuffer;->putUnchecked(I[JII)V
-HPLjava/nio/HeapByteBuffer;->putUnchecked(I[SII)V
 HSPLjava/nio/HeapByteBuffer;->slice()Ljava/nio/ByteBuffer;
 HSPLjava/nio/HeapCharBuffer;-><init>(II)V
 HSPLjava/nio/HeapCharBuffer;-><init>(IIZ)V
 HSPLjava/nio/HeapCharBuffer;-><init>([CII)V
 HSPLjava/nio/HeapCharBuffer;-><init>([CIIIIIZ)V
 HSPLjava/nio/HeapCharBuffer;-><init>([CIIZ)V
-HSPLjava/nio/HeapCharBuffer;->get()C
 HSPLjava/nio/HeapCharBuffer;->get(I)C
 HSPLjava/nio/HeapCharBuffer;->ix(I)I
 HSPLjava/nio/HeapCharBuffer;->put(Ljava/nio/CharBuffer;)Ljava/nio/CharBuffer;
 HSPLjava/nio/HeapCharBuffer;->put([CII)Ljava/nio/CharBuffer;
 HSPLjava/nio/HeapCharBuffer;->slice()Ljava/nio/CharBuffer;
 HSPLjava/nio/HeapCharBuffer;->toString(II)Ljava/lang/String;
-HSPLjava/nio/HeapIntBuffer;-><init>(II)V
-HSPLjava/nio/HeapIntBuffer;-><init>(IIZ)V
-HSPLjava/nio/HeapIntBuffer;->get()I
-HSPLjava/nio/HeapIntBuffer;->ix(I)I
 HSPLjava/nio/IntBuffer;-><init>(IIII)V
 HSPLjava/nio/IntBuffer;-><init>(IIII[II)V
-HSPLjava/nio/IntBuffer;->allocate(I)Ljava/nio/IntBuffer;
-HSPLjava/nio/IntBuffer;->array()Ljava/lang/Object;
-HSPLjava/nio/IntBuffer;->array()[I
-HSPLjava/nio/IntBuffer;->arrayOffset()I
-HSPLjava/nio/IntBuffer;->clear()Ljava/nio/Buffer;
 HSPLjava/nio/IntBuffer;->get([I)Ljava/nio/IntBuffer;
-HSPLjava/nio/IntBuffer;->hasArray()Z
 HSPLjava/nio/IntBuffer;->limit(I)Ljava/nio/Buffer;
 HSPLjava/nio/IntBuffer;->position(I)Ljava/nio/Buffer;
-PLjava/nio/IntBuffer;->put([I)Ljava/nio/IntBuffer;
 HSPLjava/nio/LongBuffer;-><init>(IIII)V
 HSPLjava/nio/LongBuffer;-><init>(IIII[JI)V
-HSPLjava/nio/LongBuffer;->allocate(I)Ljava/nio/LongBuffer;
-HSPLjava/nio/LongBuffer;->equals(JJ)Z
-HSPLjava/nio/LongBuffer;->equals(Ljava/lang/Object;)Z
-PLjava/nio/LongBuffer;->get([J)Ljava/nio/LongBuffer;
 HSPLjava/nio/LongBuffer;->limit(I)Ljava/nio/Buffer;
 HSPLjava/nio/LongBuffer;->position(I)Ljava/nio/Buffer;
-PLjava/nio/LongBuffer;->put([J)Ljava/nio/LongBuffer;
-HSPLjava/nio/LongBuffer;->rewind()Ljava/nio/Buffer;
 HSPLjava/nio/MappedByteBuffer;-><init>(IIII)V
 HSPLjava/nio/MappedByteBuffer;-><init>(IIIILjava/io/FileDescriptor;)V
 HSPLjava/nio/MappedByteBuffer;-><init>(IIII[BI)V
@@ -37909,33 +18010,15 @@
 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
-PLjava/nio/NioUtils;->freeDirectBuffer(Ljava/nio/ByteBuffer;)V
-HPLjava/nio/NioUtils;->unsafeArray(Ljava/nio/ByteBuffer;)[B
-HPLjava/nio/NioUtils;->unsafeArrayOffset(Ljava/nio/ByteBuffer;)I
 HSPLjava/nio/ShortBuffer;-><init>(IIII)V
 HSPLjava/nio/ShortBuffer;-><init>(IIII[SI)V
 HSPLjava/nio/ShortBuffer;->get([S)Ljava/nio/ShortBuffer;
 HSPLjava/nio/ShortBuffer;->limit(I)Ljava/nio/Buffer;
 HSPLjava/nio/ShortBuffer;->position(I)Ljava/nio/Buffer;
-PLjava/nio/ShortBuffer;->put([S)Ljava/nio/ShortBuffer;
 HSPLjava/nio/StringCharBuffer;-><init>(Ljava/lang/CharSequence;II)V
 HSPLjava/nio/StringCharBuffer;->get()C
-HSPLjava/nio/channels/Channels$1;-><init>(Ljava/nio/channels/WritableByteChannel;)V
-HPLjava/nio/channels/Channels$1;->close()V
-HPLjava/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
-HPLjava/nio/channels/Channels;->access$000(Ljava/nio/channels/WritableByteChannel;Ljava/nio/ByteBuffer;)V
 HSPLjava/nio/channels/Channels;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
-HPLjava/nio/channels/Channels;->newChannel(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;
-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;
-HPLjava/nio/channels/Channels;->writeFully(Ljava/nio/channels/WritableByteChannel;Ljava/nio/ByteBuffer;)V
-HPLjava/nio/channels/Channels;->writeFullyImpl(Ljava/nio/channels/WritableByteChannel;Ljava/nio/ByteBuffer;)V
-HPLjava/nio/channels/ClosedChannelException;-><init>()V
 HSPLjava/nio/channels/FileChannel;-><init>()V
 HSPLjava/nio/channels/FileChannel;->lock()Ljava/nio/channels/FileLock;
 HSPLjava/nio/channels/FileChannel;->open(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/FileChannel;
@@ -37945,73 +18028,18 @@
 HSPLjava/nio/channels/FileLock;->acquiredBy()Ljava/nio/channels/Channel;
 HSPLjava/nio/channels/FileLock;->position()J
 HSPLjava/nio/channels/FileLock;->size()J
-HSPLjava/nio/channels/SelectableChannel;-><init>()V
-HSPLjava/nio/channels/SelectableChannel;->register(Ljava/nio/channels/Selector;I)Ljava/nio/channels/SelectionKey;
-HSPLjava/nio/channels/SelectionKey;-><init>()V
-HSPLjava/nio/channels/SelectionKey;->attach(Ljava/lang/Object;)Ljava/lang/Object;
-HPLjava/nio/channels/SelectionKey;->attachment()Ljava/lang/Object;
-HPLjava/nio/channels/SelectionKey;->isAcceptable()Z
-HPLjava/nio/channels/SelectionKey;->isConnectable()Z
-HPLjava/nio/channels/SelectionKey;->isReadable()Z
-HPLjava/nio/channels/SelectionKey;->isWritable()Z
-HSPLjava/nio/channels/Selector;-><init>()V
-HSPLjava/nio/channels/Selector;->open()Ljava/nio/channels/Selector;
-HSPLjava/nio/channels/SocketChannel;-><init>(Ljava/nio/channels/spi/SelectorProvider;)V
-HSPLjava/nio/channels/SocketChannel;->open()Ljava/nio/channels/SocketChannel;
-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
 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
-HSPLjava/nio/channels/spi/AbstractSelectableChannel;->addKey(Ljava/nio/channels/SelectionKey;)V
-HSPLjava/nio/channels/spi/AbstractSelectableChannel;->blockingLock()Ljava/lang/Object;
-HSPLjava/nio/channels/spi/AbstractSelectableChannel;->configureBlocking(Z)Ljava/nio/channels/SelectableChannel;
-HSPLjava/nio/channels/spi/AbstractSelectableChannel;->findKey(Ljava/nio/channels/Selector;)Ljava/nio/channels/SelectionKey;
-HSPLjava/nio/channels/spi/AbstractSelectableChannel;->haveValidKeys()Z
-HSPLjava/nio/channels/spi/AbstractSelectableChannel;->implCloseChannel()V
-HSPLjava/nio/channels/spi/AbstractSelectableChannel;->isBlocking()Z
-HSPLjava/nio/channels/spi/AbstractSelectableChannel;->isRegistered()Z
-HPLjava/nio/channels/spi/AbstractSelectableChannel;->keyFor(Ljava/nio/channels/Selector;)Ljava/nio/channels/SelectionKey;
-HSPLjava/nio/channels/spi/AbstractSelectableChannel;->register(Ljava/nio/channels/Selector;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;
-HSPLjava/nio/channels/spi/AbstractSelectableChannel;->removeKey(Ljava/nio/channels/SelectionKey;)V
-HSPLjava/nio/channels/spi/AbstractSelectionKey;-><init>()V
-PLjava/nio/channels/spi/AbstractSelectionKey;->cancel()V
-HSPLjava/nio/channels/spi/AbstractSelectionKey;->invalidate()V
-HSPLjava/nio/channels/spi/AbstractSelectionKey;->isValid()Z
-HSPLjava/nio/channels/spi/AbstractSelector$1;-><init>(Ljava/nio/channels/spi/AbstractSelector;)V
-HSPLjava/nio/channels/spi/AbstractSelector;-><init>(Ljava/nio/channels/spi/SelectorProvider;)V
-HSPLjava/nio/channels/spi/AbstractSelector;->begin()V
-PLjava/nio/channels/spi/AbstractSelector;->cancel(Ljava/nio/channels/SelectionKey;)V
-HSPLjava/nio/channels/spi/AbstractSelector;->cancelledKeys()Ljava/util/Set;
-HSPLjava/nio/channels/spi/AbstractSelector;->close()V
-HSPLjava/nio/channels/spi/AbstractSelector;->deregister(Ljava/nio/channels/spi/AbstractSelectionKey;)V
-HSPLjava/nio/channels/spi/AbstractSelector;->end()V
-HSPLjava/nio/channels/spi/AbstractSelector;->isOpen()Z
-HSPLjava/nio/channels/spi/SelectorProvider$1;-><init>()V
-HSPLjava/nio/channels/spi/SelectorProvider$1;->run()Ljava/lang/Object;
-HSPLjava/nio/channels/spi/SelectorProvider$1;->run()Ljava/nio/channels/spi/SelectorProvider;
-HSPLjava/nio/channels/spi/SelectorProvider;-><init>()V
-HSPLjava/nio/channels/spi/SelectorProvider;->access$000()Z
-HSPLjava/nio/channels/spi/SelectorProvider;->access$100()Ljava/nio/channels/spi/SelectorProvider;
-HSPLjava/nio/channels/spi/SelectorProvider;->access$102(Ljava/nio/channels/spi/SelectorProvider;)Ljava/nio/channels/spi/SelectorProvider;
-HSPLjava/nio/channels/spi/SelectorProvider;->access$200()Z
-HSPLjava/nio/channels/spi/SelectorProvider;->loadProviderAsService()Z
-HSPLjava/nio/channels/spi/SelectorProvider;->loadProviderFromProperty()Z
-HSPLjava/nio/channels/spi/SelectorProvider;->provider()Ljava/nio/channels/spi/SelectorProvider;
 HSPLjava/nio/charset/Charset;-><init>(Ljava/lang/String;[Ljava/lang/String;)V
 HSPLjava/nio/charset/Charset;->aliases()Ljava/util/Set;
 HSPLjava/nio/charset/Charset;->atBugLevel(Ljava/lang/String;)Z
 HSPLjava/nio/charset/Charset;->cache(Ljava/lang/String;Ljava/nio/charset/Charset;)V
 HSPLjava/nio/charset/Charset;->checkName(Ljava/lang/String;)V
-PLjava/nio/charset/Charset;->decode(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;
 HSPLjava/nio/charset/Charset;->defaultCharset()Ljava/nio/charset/Charset;
-HSPLjava/nio/charset/Charset;->displayName()Ljava/lang/String;
-HSPLjava/nio/charset/Charset;->encode(Ljava/lang/String;)Ljava/nio/ByteBuffer;
-HSPLjava/nio/charset/Charset;->encode(Ljava/nio/CharBuffer;)Ljava/nio/ByteBuffer;
 HSPLjava/nio/charset/Charset;->equals(Ljava/lang/Object;)Z
 HSPLjava/nio/charset/Charset;->forName(Ljava/lang/String;)Ljava/nio/charset/Charset;
 HSPLjava/nio/charset/Charset;->forNameUEE(Ljava/lang/String;)Ljava/nio/charset/Charset;
@@ -38036,8 +18064,6 @@
 HSPLjava/nio/charset/CharsetDecoder;->unmappableCharacterAction()Ljava/nio/charset/CodingErrorAction;
 HSPLjava/nio/charset/CharsetEncoder;-><init>(Ljava/nio/charset/Charset;FF[BZ)V
 HSPLjava/nio/charset/CharsetEncoder;->averageBytesPerChar()F
-PLjava/nio/charset/CharsetEncoder;->canEncode(Ljava/lang/CharSequence;)Z
-PLjava/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;
@@ -38052,49 +18078,18 @@
 HSPLjava/nio/charset/CoderResult;->isError()Z
 HSPLjava/nio/charset/CoderResult;->isOverflow()Z
 HSPLjava/nio/charset/CoderResult;->isUnderflow()Z
-HSPLjava/nio/file/AccessMode;->values()[Ljava/nio/file/AccessMode;
-HSPLjava/nio/file/FileAlreadyExistsException;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/nio/file/FileSystemException;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLjava/nio/file/FileSystemException;->getMessage()Ljava/lang/String;
-HSPLjava/nio/file/FileSystemException;->getReason()Ljava/lang/String;
 HSPLjava/nio/file/FileSystems;->getDefault()Ljava/nio/file/FileSystem;
-PLjava/nio/file/Files$1;-><init>(Ljava/nio/file/PathMatcher;)V
-HPLjava/nio/file/Files$1;->accept(Ljava/lang/Object;)Z
-HPLjava/nio/file/Files$1;->accept(Ljava/nio/file/Path;)Z
-HSPLjava/nio/file/Files$AcceptAllFilter;->accept(Ljava/lang/Object;)Z
-HSPLjava/nio/file/Files$AcceptAllFilter;->accept(Ljava/nio/file/Path;)Z
-HPLjava/nio/file/Files;->createLink(Ljava/nio/file/Path;Ljava/nio/file/Path;)Ljava/nio/file/Path;
-HSPLjava/nio/file/Files;->exists(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
-HSPLjava/nio/file/Files;->followLinks([Ljava/nio/file/LinkOption;)Z
-HSPLjava/nio/file/Files;->isAccessible(Ljava/nio/file/Path;[Ljava/nio/file/AccessMode;)Z
 HSPLjava/nio/file/Files;->isRegularFile(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
-HSPLjava/nio/file/Files;->isWritable(Ljava/nio/file/Path;)Z
-HPLjava/nio/file/Files;->move(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)Ljava/nio/file/Path;
-HSPLjava/nio/file/Files;->newBufferedReader(Ljava/nio/file/Path;)Ljava/io/BufferedReader;
-HSPLjava/nio/file/Files;->newBufferedReader(Ljava/nio/file/Path;Ljava/nio/charset/Charset;)Ljava/io/BufferedReader;
 HSPLjava/nio/file/Files;->newByteChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;
 HSPLjava/nio/file/Files;->newByteChannel(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/SeekableByteChannel;
-HSPLjava/nio/file/Files;->newDirectoryStream(Ljava/nio/file/Path;)Ljava/nio/file/DirectoryStream;
-HPLjava/nio/file/Files;->newDirectoryStream(Ljava/nio/file/Path;Ljava/lang/String;)Ljava/nio/file/DirectoryStream;
-HSPLjava/nio/file/Files;->newInputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/InputStream;
-HPLjava/nio/file/Files;->newOutputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/OutputStream;
 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;->walkFileTree(Ljava/nio/file/Path;Ljava/nio/file/FileVisitor;)Ljava/nio/file/Path;
-HSPLjava/nio/file/Files;->walkFileTree(Ljava/nio/file/Path;Ljava/util/Set;ILjava/nio/file/FileVisitor;)Ljava/nio/file/Path;
 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;
 HSPLjava/nio/file/attribute/FileTime;-><init>(JLjava/util/concurrent/TimeUnit;Ljava/time/Instant;)V
-HPLjava/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;
-HPLjava/nio/file/attribute/FileTime;->to(Ljava/util/concurrent/TimeUnit;)J
-HSPLjava/nio/file/attribute/FileTime;->toMillis()J
-HPLjava/nio/file/attribute/FileTime;->toString()Ljava/lang/String;
-HSPLjava/nio/file/spi/FileSystemProvider;->newInputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/InputStream;
-HPLjava/nio/file/spi/FileSystemProvider;->newOutputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/OutputStream;
 HSPLjava/security/AccessControlContext;-><init>([Ljava/security/ProtectionDomain;)V
 HSPLjava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
 HSPLjava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;
@@ -38104,60 +18099,28 @@
 HSPLjava/security/CodeSigner;-><init>(Ljava/security/cert/CertPath;Ljava/security/Timestamp;)V
 HSPLjava/security/CodeSigner;->getSignerCertPath()Ljava/security/cert/CertPath;
 HSPLjava/security/GeneralSecurityException;-><init>(Ljava/lang/String;)V
-HPLjava/security/GeneralSecurityException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
-PLjava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
-HPLjava/security/InvalidKeyException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
-PLjava/security/KeyException;-><init>(Ljava/lang/String;)V
-HPLjava/security/KeyException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
 HSPLjava/security/KeyFactory;-><init>(Ljava/lang/String;)V
-HSPLjava/security/KeyFactory;-><init>(Ljava/security/KeyFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V
 HSPLjava/security/KeyFactory;->generatePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
 HSPLjava/security/KeyFactory;->generatePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
 HSPLjava/security/KeyFactory;->getInstance(Ljava/lang/String;)Ljava/security/KeyFactory;
-HSPLjava/security/KeyFactory;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/KeyFactory;
-HSPLjava/security/KeyFactory;->getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/KeyFactory;
-HSPLjava/security/KeyFactory;->getKeySpec(Ljava/security/Key;Ljava/lang/Class;)Ljava/security/spec/KeySpec;
 HSPLjava/security/KeyFactory;->nextSpi(Ljava/security/KeyFactorySpi;)Ljava/security/KeyFactorySpi;
 HSPLjava/security/KeyFactorySpi;-><init>()V
 HSPLjava/security/KeyPair;-><init>(Ljava/security/PublicKey;Ljava/security/PrivateKey;)V
 HSPLjava/security/KeyPair;->getPrivate()Ljava/security/PrivateKey;
 HSPLjava/security/KeyPair;->getPublic()Ljava/security/PublicKey;
-HSPLjava/security/KeyPairGenerator$Delegate;-><init>(Ljava/security/KeyPairGeneratorSpi;Ljava/lang/String;)V
-HSPLjava/security/KeyPairGenerator$Delegate;->generateKeyPair()Ljava/security/KeyPair;
-HSPLjava/security/KeyPairGenerator$Delegate;->initialize(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
-HSPLjava/security/KeyPairGenerator;-><init>(Ljava/lang/String;)V
-PLjava/security/KeyPairGenerator;->getInstance(Ljava/lang/String;)Ljava/security/KeyPairGenerator;
-HSPLjava/security/KeyPairGenerator;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/KeyPairGenerator;
-HSPLjava/security/KeyPairGenerator;->getInstance(Lsun/security/jca/GetInstance$Instance;Ljava/lang/String;)Ljava/security/KeyPairGenerator;
-HSPLjava/security/KeyPairGenerator;->initialize(Ljava/security/spec/AlgorithmParameterSpec;)V
-HSPLjava/security/KeyPairGeneratorSpi;-><init>()V
 HSPLjava/security/KeyStore$1;-><init>()V
 HSPLjava/security/KeyStore$1;->run()Ljava/lang/Object;
 HSPLjava/security/KeyStore$1;->run()Ljava/lang/String;
-PLjava/security/KeyStore$PrivateKeyEntry;-><init>(Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;)V
-PLjava/security/KeyStore$PrivateKeyEntry;-><init>(Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;Ljava/util/Set;)V
-PLjava/security/KeyStore$PrivateKeyEntry;->getCertificate()Ljava/security/cert/Certificate;
-PLjava/security/KeyStore$PrivateKeyEntry;->getPrivateKey()Ljava/security/PrivateKey;
-HSPLjava/security/KeyStore$SecretKeyEntry;-><init>(Ljavax/crypto/SecretKey;)V
-HSPLjava/security/KeyStore$SecretKeyEntry;->getSecretKey()Ljavax/crypto/SecretKey;
 HSPLjava/security/KeyStore;-><init>(Ljava/security/KeyStoreSpi;Ljava/security/Provider;Ljava/lang/String;)V
 HSPLjava/security/KeyStore;->aliases()Ljava/util/Enumeration;
-HSPLjava/security/KeyStore;->containsAlias(Ljava/lang/String;)Z
-PLjava/security/KeyStore;->deleteEntry(Ljava/lang/String;)V
 HSPLjava/security/KeyStore;->getCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;
-PLjava/security/KeyStore;->getCertificateChain(Ljava/lang/String;)[Ljava/security/cert/Certificate;
-HSPLjava/security/KeyStore;->getCreationDate(Ljava/lang/String;)Ljava/util/Date;
 HSPLjava/security/KeyStore;->getDefaultType()Ljava/lang/String;
-HSPLjava/security/KeyStore;->getEntry(Ljava/lang/String;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Entry;
 HSPLjava/security/KeyStore;->getInstance(Ljava/lang/String;)Ljava/security/KeyStore;
-HSPLjava/security/KeyStore;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/KeyStore;
 HSPLjava/security/KeyStore;->getKey(Ljava/lang/String;[C)Ljava/security/Key;
 HSPLjava/security/KeyStore;->getType()Ljava/lang/String;
 HSPLjava/security/KeyStore;->load(Ljava/io/InputStream;[C)V
 HSPLjava/security/KeyStore;->load(Ljava/security/KeyStore$LoadStoreParameter;)V
-PLjava/security/KeyStore;->setCertificateEntry(Ljava/lang/String;Ljava/security/cert/Certificate;)V
 HSPLjava/security/KeyStoreSpi;-><init>()V
-HSPLjava/security/KeyStoreSpi;->engineGetEntry(Ljava/lang/String;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Entry;
 HSPLjava/security/KeyStoreSpi;->engineLoad(Ljava/security/KeyStore$LoadStoreParameter;)V
 HSPLjava/security/MessageDigest$Delegate;-><init>(Ljava/security/MessageDigestSpi;Ljava/lang/String;)V
 HSPLjava/security/MessageDigest$Delegate;->clone()Ljava/lang/Object;
@@ -38166,7 +18129,6 @@
 HSPLjava/security/MessageDigest$Delegate;->engineGetDigestLength()I
 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
 HSPLjava/security/MessageDigest;-><init>(Ljava/lang/String;)V
 HSPLjava/security/MessageDigest;->access$000(Ljava/security/MessageDigest;)Ljava/lang/String;
@@ -38177,20 +18139,16 @@
 HSPLjava/security/MessageDigest;->digest()[B
 HSPLjava/security/MessageDigest;->digest([B)[B
 HSPLjava/security/MessageDigest;->digest([BII)I
-HSPLjava/security/MessageDigest;->getAlgorithm()Ljava/lang/String;
 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(Ljava/nio/ByteBuffer;)V
 HSPLjava/security/MessageDigest;->update([B)V
 HSPLjava/security/MessageDigest;->update([BII)V
 HSPLjava/security/MessageDigestSpi;-><init>()V
 HSPLjava/security/MessageDigestSpi;->engineDigest([BII)I
-HSPLjava/security/MessageDigestSpi;->engineUpdate(Ljava/nio/ByteBuffer;)V
 HSPLjava/security/NoSuchAlgorithmException;-><init>(Ljava/lang/String;)V
 HSPLjava/security/Provider$EngineDescription;->getConstructorParameterClass()Ljava/lang/Class;
 HSPLjava/security/Provider$Service;-><init>(Ljava/security/Provider;)V
@@ -38266,79 +18224,48 @@
 HSPLjava/security/Signature$Delegate;-><init>(Ljava/lang/String;)V
 HSPLjava/security/Signature$Delegate;->chooseFirstProvider()V
 HSPLjava/security/Signature$Delegate;->chooseProvider(ILjava/security/Key;Ljava/security/SecureRandom;)V
-HSPLjava/security/Signature$Delegate;->engineInitSign(Ljava/security/PrivateKey;)V
-HPLjava/security/Signature$Delegate;->engineInitSign(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V
 HSPLjava/security/Signature$Delegate;->engineInitVerify(Ljava/security/PublicKey;)V
-HSPLjava/security/Signature$Delegate;->engineSign()[B
 HSPLjava/security/Signature$Delegate;->engineUpdate(Ljava/nio/ByteBuffer;)V
 HSPLjava/security/Signature$Delegate;->engineUpdate([BII)V
 HSPLjava/security/Signature$Delegate;->engineVerify([B)Z
-HPLjava/security/Signature$Delegate;->engineVerify([BII)Z
 HSPLjava/security/Signature$Delegate;->init(Ljava/security/SignatureSpi;ILjava/security/Key;Ljava/security/SecureRandom;)V
 HSPLjava/security/Signature$Delegate;->newInstance(Ljava/security/Provider$Service;)Ljava/security/SignatureSpi;
 HSPLjava/security/Signature;-><init>(Ljava/lang/String;)V
 HSPLjava/security/Signature;->access$000(Ljava/security/Signature;)Ljava/lang/String;
 HSPLjava/security/Signature;->access$200(Ljava/security/Provider$Service;)Z
 HSPLjava/security/Signature;->getInstance(Ljava/lang/String;)Ljava/security/Signature;
-HSPLjava/security/Signature;->initSign(Ljava/security/PrivateKey;)V
-HPLjava/security/Signature;->initSign(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V
 HSPLjava/security/Signature;->initVerify(Ljava/security/PublicKey;)V
 HSPLjava/security/Signature;->isSpi(Ljava/security/Provider$Service;)Z
-HSPLjava/security/Signature;->sign()[B
 HSPLjava/security/Signature;->update(Ljava/nio/ByteBuffer;)V
 HSPLjava/security/Signature;->update([B)V
 HSPLjava/security/Signature;->update([BII)V
 HSPLjava/security/Signature;->verify([B)Z
-HPLjava/security/Signature;->verify([BII)Z
 HSPLjava/security/SignatureSpi;-><init>()V
-HPLjava/security/SignatureSpi;->engineInitSign(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V
 HSPLjava/security/SignatureSpi;->engineUpdate(Ljava/nio/ByteBuffer;)V
-HPLjava/security/SignatureSpi;->engineVerify([BII)Z
 HSPLjava/security/cert/CertPath;-><init>(Ljava/lang/String;)V
 HSPLjava/security/cert/CertPath;->getType()Ljava/lang/String;
-PLjava/security/cert/CertPathBuilder;-><init>(Ljava/security/cert/CertPathBuilderSpi;Ljava/security/Provider;Ljava/lang/String;)V
-PLjava/security/cert/CertPathBuilder;->build(Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathBuilderResult;
-PLjava/security/cert/CertPathBuilder;->getInstance(Ljava/lang/String;)Ljava/security/cert/CertPathBuilder;
-PLjava/security/cert/CertPathBuilderSpi;-><init>()V
-PLjava/security/cert/CertPathHelperImpl;->implSetPathToNames(Ljava/security/cert/X509CertSelector;Ljava/util/Set;)V
 HSPLjava/security/cert/CertPathValidator;-><init>(Ljava/security/cert/CertPathValidatorSpi;Ljava/security/Provider;Ljava/lang/String;)V
 HSPLjava/security/cert/CertPathValidator;->getInstance(Ljava/lang/String;)Ljava/security/cert/CertPathValidator;
-HSPLjava/security/cert/CertPathValidator;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertPathValidator;
-HSPLjava/security/cert/CertPathValidator;->getRevocationChecker()Ljava/security/cert/CertPathChecker;
 HSPLjava/security/cert/CertPathValidator;->validate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;
 HSPLjava/security/cert/CertPathValidatorSpi;-><init>()V
 HSPLjava/security/cert/CertStore;-><init>(Ljava/security/cert/CertStoreSpi;Ljava/security/Provider;Ljava/lang/String;Ljava/security/cert/CertStoreParameters;)V
-PLjava/security/cert/CertStore;->getCertificates(Ljava/security/cert/CertSelector;)Ljava/util/Collection;
 HSPLjava/security/cert/CertStore;->getInstance(Ljava/lang/String;Ljava/security/cert/CertStoreParameters;)Ljava/security/cert/CertStore;
 HSPLjava/security/cert/CertStoreSpi;-><init>(Ljava/security/cert/CertStoreParameters;)V
 HSPLjava/security/cert/Certificate;-><init>(Ljava/lang/String;)V
 HSPLjava/security/cert/Certificate;->equals(Ljava/lang/Object;)Z
-PLjava/security/cert/Certificate;->getType()Ljava/lang/String;
 HSPLjava/security/cert/Certificate;->hashCode()I
 HSPLjava/security/cert/CertificateFactory;-><init>(Ljava/security/cert/CertificateFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V
-PLjava/security/cert/CertificateFactory;->generateCertPath(Ljava/io/InputStream;)Ljava/security/cert/CertPath;
-PLjava/security/cert/CertificateFactory;->generateCertPath(Ljava/io/InputStream;Ljava/lang/String;)Ljava/security/cert/CertPath;
 HSPLjava/security/cert/CertificateFactory;->generateCertPath(Ljava/util/List;)Ljava/security/cert/CertPath;
 HSPLjava/security/cert/CertificateFactory;->generateCertificate(Ljava/io/InputStream;)Ljava/security/cert/Certificate;
-HSPLjava/security/cert/CertificateFactory;->generateCertificates(Ljava/io/InputStream;)Ljava/util/Collection;
 HSPLjava/security/cert/CertificateFactory;->getInstance(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
-HSPLjava/security/cert/CertificateFactory;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
 HSPLjava/security/cert/CertificateFactorySpi;-><init>()V
 HSPLjava/security/cert/CollectionCertStoreParameters;-><init>(Ljava/util/Collection;)V
 HSPLjava/security/cert/CollectionCertStoreParameters;->clone()Ljava/lang/Object;
-PLjava/security/cert/CollectionCertStoreParameters;->getCollection()Ljava/util/Collection;
-PLjava/security/cert/PKIXBuilderParameters;-><init>(Ljava/util/Set;Ljava/security/cert/CertSelector;)V
-PLjava/security/cert/PKIXBuilderParameters;->getMaxPathLength()I
-PLjava/security/cert/PKIXCertPathBuilderResult;-><init>(Ljava/security/cert/CertPath;Ljava/security/cert/TrustAnchor;Ljava/security/cert/PolicyNode;Ljava/security/PublicKey;)V
-PLjava/security/cert/PKIXCertPathBuilderResult;->getCertPath()Ljava/security/cert/CertPath;
 HSPLjava/security/cert/PKIXCertPathChecker;-><init>()V
 HSPLjava/security/cert/PKIXCertPathChecker;->clone()Ljava/lang/Object;
 HSPLjava/security/cert/PKIXCertPathValidatorResult;-><init>(Ljava/security/cert/TrustAnchor;Ljava/security/cert/PolicyNode;Ljava/security/PublicKey;)V
-HPLjava/security/cert/PKIXCertPathValidatorResult;->getPublicKey()Ljava/security/PublicKey;
-HPLjava/security/cert/PKIXCertPathValidatorResult;->getTrustAnchor()Ljava/security/cert/TrustAnchor;
 HSPLjava/security/cert/PKIXParameters;-><init>(Ljava/util/Set;)V
 HSPLjava/security/cert/PKIXParameters;->addCertPathChecker(Ljava/security/cert/PKIXCertPathChecker;)V
-PLjava/security/cert/PKIXParameters;->addCertStore(Ljava/security/cert/CertStore;)V
 HSPLjava/security/cert/PKIXParameters;->getCertPathCheckers()Ljava/util/List;
 HSPLjava/security/cert/PKIXParameters;->getCertStores()Ljava/util/List;
 HSPLjava/security/cert/PKIXParameters;->getDate()Ljava/util/Date;
@@ -38351,32 +18278,14 @@
 HSPLjava/security/cert/PKIXParameters;->isExplicitPolicyRequired()Z
 HSPLjava/security/cert/PKIXParameters;->isPolicyMappingInhibited()Z
 HSPLjava/security/cert/PKIXParameters;->isRevocationEnabled()Z
-HSPLjava/security/cert/PKIXParameters;->setCertPathCheckers(Ljava/util/List;)V
-HSPLjava/security/cert/PKIXParameters;->setDate(Ljava/util/Date;)V
 HSPLjava/security/cert/PKIXParameters;->setRevocationEnabled(Z)V
-PLjava/security/cert/PKIXParameters;->setTargetCertConstraints(Ljava/security/cert/CertSelector;)V
 HSPLjava/security/cert/PKIXParameters;->setTrustAnchors(Ljava/util/Set;)V
-HSPLjava/security/cert/PKIXRevocationChecker$Option;->values()[Ljava/security/cert/PKIXRevocationChecker$Option;
-HSPLjava/security/cert/PKIXRevocationChecker;-><init>()V
-HSPLjava/security/cert/PKIXRevocationChecker;->clone()Ljava/security/cert/PKIXRevocationChecker;
-HSPLjava/security/cert/PKIXRevocationChecker;->getOcspExtensions()Ljava/util/List;
-HSPLjava/security/cert/PKIXRevocationChecker;->getOcspResponder()Ljava/net/URI;
-HSPLjava/security/cert/PKIXRevocationChecker;->getOcspResponderCert()Ljava/security/cert/X509Certificate;
-HSPLjava/security/cert/PKIXRevocationChecker;->getOcspResponses()Ljava/util/Map;
-HSPLjava/security/cert/PKIXRevocationChecker;->getOptions()Ljava/util/Set;
-HSPLjava/security/cert/PKIXRevocationChecker;->setOcspResponses(Ljava/util/Map;)V
-HSPLjava/security/cert/PKIXRevocationChecker;->setOptions(Ljava/util/Set;)V
 HSPLjava/security/cert/PolicyQualifierInfo;-><init>([B)V
 HSPLjava/security/cert/TrustAnchor;-><init>(Ljava/security/cert/X509Certificate;[B)V
 HSPLjava/security/cert/TrustAnchor;->getNameConstraints()[B
 HSPLjava/security/cert/TrustAnchor;->getTrustedCert()Ljava/security/cert/X509Certificate;
 HSPLjava/security/cert/TrustAnchor;->setNameConstraints([B)V
 HSPLjava/security/cert/X509CertSelector;-><init>()V
-PLjava/security/cert/X509CertSelector;->clone()Ljava/lang/Object;
-PLjava/security/cert/X509CertSelector;->getBasicConstraints()I
-PLjava/security/cert/X509CertSelector;->getCertificate()Ljava/security/cert/X509Certificate;
-PLjava/security/cert/X509CertSelector;->getExtensionObject(Ljava/security/cert/X509Certificate;I)Ljava/security/cert/Extension;
-PLjava/security/cert/X509CertSelector;->getSubject()Ljavax/security/auth/x500/X500Principal;
 HSPLjava/security/cert/X509CertSelector;->match(Ljava/security/cert/Certificate;)Z
 HSPLjava/security/cert/X509CertSelector;->matchAuthorityKeyID(Ljava/security/cert/X509Certificate;)Z
 HSPLjava/security/cert/X509CertSelector;->matchBasicConstraints(Ljava/security/cert/X509Certificate;)Z
@@ -38389,93 +18298,46 @@
 HSPLjava/security/cert/X509CertSelector;->matchSubjectAlternativeNames(Ljava/security/cert/X509Certificate;)Z
 HSPLjava/security/cert/X509CertSelector;->matchSubjectKeyID(Ljava/security/cert/X509Certificate;)Z
 HSPLjava/security/cert/X509CertSelector;->matchSubjectPublicKeyAlgID(Ljava/security/cert/X509Certificate;)Z
-PLjava/security/cert/X509CertSelector;->setBasicConstraints(I)V
-PLjava/security/cert/X509CertSelector;->setCertificate(Ljava/security/cert/X509Certificate;)V
-PLjava/security/cert/X509CertSelector;->setCertificateValid(Ljava/util/Date;)V
-PLjava/security/cert/X509CertSelector;->setPathToNamesInternal(Ljava/util/Set;)V
 HSPLjava/security/cert/X509CertSelector;->setSubject(Ljavax/security/auth/x500/X500Principal;)V
 HSPLjava/security/cert/X509Certificate;-><init>()V
-HSPLjava/security/spec/DSAParameterSpec;-><init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
-HSPLjava/security/spec/DSAParameterSpec;->getG()Ljava/math/BigInteger;
-HSPLjava/security/spec/DSAParameterSpec;->getP()Ljava/math/BigInteger;
-HSPLjava/security/spec/DSAParameterSpec;->getQ()Ljava/math/BigInteger;
 HSPLjava/security/spec/ECFieldFp;-><init>(Ljava/math/BigInteger;)V
 HSPLjava/security/spec/ECFieldFp;->getFieldSize()I
 HSPLjava/security/spec/ECFieldFp;->getP()Ljava/math/BigInteger;
-PLjava/security/spec/ECGenParameterSpec;-><init>(Ljava/lang/String;)V
-PLjava/security/spec/ECGenParameterSpec;->getName()Ljava/lang/String;
 HSPLjava/security/spec/ECParameterSpec;-><init>(Ljava/security/spec/EllipticCurve;Ljava/security/spec/ECPoint;Ljava/math/BigInteger;I)V
 HSPLjava/security/spec/ECParameterSpec;->getCurve()Ljava/security/spec/EllipticCurve;
-HSPLjava/security/spec/ECParameterSpec;->getCurveName()Ljava/lang/String;
-HSPLjava/security/spec/ECParameterSpec;->getGenerator()Ljava/security/spec/ECPoint;
 HSPLjava/security/spec/ECParameterSpec;->getOrder()Ljava/math/BigInteger;
 HSPLjava/security/spec/ECParameterSpec;->setCurveName(Ljava/lang/String;)V
 HSPLjava/security/spec/ECPoint;-><init>(Ljava/math/BigInteger;Ljava/math/BigInteger;)V
-HSPLjava/security/spec/ECPoint;->getAffineX()Ljava/math/BigInteger;
-HSPLjava/security/spec/ECPoint;->getAffineY()Ljava/math/BigInteger;
-HSPLjava/security/spec/ECPublicKeySpec;-><init>(Ljava/security/spec/ECPoint;Ljava/security/spec/ECParameterSpec;)V
-HSPLjava/security/spec/ECPublicKeySpec;->getParams()Ljava/security/spec/ECParameterSpec;
-HSPLjava/security/spec/ECPublicKeySpec;->getW()Ljava/security/spec/ECPoint;
 HSPLjava/security/spec/EllipticCurve;-><init>(Ljava/security/spec/ECField;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
 HSPLjava/security/spec/EllipticCurve;-><init>(Ljava/security/spec/ECField;Ljava/math/BigInteger;Ljava/math/BigInteger;[B)V
 HSPLjava/security/spec/EllipticCurve;->checkValidity(Ljava/security/spec/ECField;Ljava/math/BigInteger;Ljava/lang/String;)V
-HSPLjava/security/spec/EllipticCurve;->getA()Ljava/math/BigInteger;
-HSPLjava/security/spec/EllipticCurve;->getB()Ljava/math/BigInteger;
 HSPLjava/security/spec/EllipticCurve;->getField()Ljava/security/spec/ECField;
 HSPLjava/security/spec/EncodedKeySpec;-><init>([B)V
 HSPLjava/security/spec/EncodedKeySpec;->getEncoded()[B
-HSPLjava/security/spec/InvalidKeySpecException;-><init>(Ljava/lang/String;)V
-HSPLjava/security/spec/MGF1ParameterSpec;->getDigestAlgorithm()Ljava/lang/String;
 HSPLjava/security/spec/PKCS8EncodedKeySpec;-><init>([B)V
 HSPLjava/security/spec/PKCS8EncodedKeySpec;->getEncoded()[B
-HSPLjava/security/spec/RSAKeyGenParameterSpec;-><clinit>()V
-HSPLjava/security/spec/RSAKeyGenParameterSpec;-><init>(ILjava/math/BigInteger;)V
-HSPLjava/security/spec/RSAKeyGenParameterSpec;->getKeysize()I
-HSPLjava/security/spec/RSAKeyGenParameterSpec;->getPublicExponent()Ljava/math/BigInteger;
-HPLjava/security/spec/RSAPublicKeySpec;-><init>(Ljava/math/BigInteger;Ljava/math/BigInteger;)V
-HPLjava/security/spec/RSAPublicKeySpec;->getModulus()Ljava/math/BigInteger;
-HPLjava/security/spec/RSAPublicKeySpec;->getPublicExponent()Ljava/math/BigInteger;
 HSPLjava/security/spec/X509EncodedKeySpec;-><init>([B)V
 HSPLjava/security/spec/X509EncodedKeySpec;->getEncoded()[B
-HSPLjava/sql/Timestamp;-><init>(J)V
-HSPLjava/sql/Timestamp;->toString()Ljava/lang/String;
 HSPLjava/text/AttributedCharacterIterator$Attribute;-><init>(Ljava/lang/String;)V
 HSPLjava/text/AttributedCharacterIterator$Attribute;->equals(Ljava/lang/Object;)Z
 HSPLjava/text/AttributedCharacterIterator$Attribute;->hashCode()I
 HSPLjava/text/BreakIterator;-><init>()V
-HSPLjava/text/BreakIterator;->getCharacterInstance()Ljava/text/BreakIterator;
-HSPLjava/text/BreakIterator;->getCharacterInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;
-HPLjava/text/BreakIterator;->getLineInstance()Ljava/text/BreakIterator;
-HPLjava/text/BreakIterator;->getLineInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;
-HPLjava/text/BreakIterator;->getWordInstance()Ljava/text/BreakIterator;
-HPLjava/text/BreakIterator;->getWordInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;
+HSPLjava/text/BreakIterator;->getWordInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;
 HSPLjava/text/CalendarBuilder;-><init>()V
 HSPLjava/text/CalendarBuilder;->establish(Ljava/util/Calendar;)Ljava/util/Calendar;
 HSPLjava/text/CalendarBuilder;->isSet(I)Z
 HSPLjava/text/CalendarBuilder;->set(II)Ljava/text/CalendarBuilder;
-HPLjava/text/CollationKey;-><init>(Ljava/lang/String;)V
-HSPLjava/text/Collator;-><init>()V
 HSPLjava/text/Collator;-><init>(Landroid/icu/text/Collator;)V
-HPLjava/text/Collator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLjava/text/Collator;->decompositionMode_Java_ICU(I)I
-HSPLjava/text/Collator;->getInstance()Ljava/text/Collator;
 HSPLjava/text/Collator;->getInstance(Ljava/util/Locale;)Ljava/text/Collator;
-HSPLjava/text/Collator;->setDecomposition(I)V
 HSPLjava/text/Collator;->setStrength(I)V
 HSPLjava/text/DateFormat;-><init>()V
 HSPLjava/text/DateFormat;->format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
 HSPLjava/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;
 HSPLjava/text/DateFormat;->get(IIILjava/util/Locale;)Ljava/text/DateFormat;
-HSPLjava/text/DateFormat;->getDateTimeInstance()Ljava/text/DateFormat;
-HSPLjava/text/DateFormat;->getDateTimeInstance(II)Ljava/text/DateFormat;
-HSPLjava/text/DateFormat;->getDateTimeInstance(IILjava/util/Locale;)Ljava/text/DateFormat;
-HSPLjava/text/DateFormat;->getTimeInstance(I)Ljava/text/DateFormat;
 HSPLjava/text/DateFormat;->getTimeInstance(ILjava/util/Locale;)Ljava/text/DateFormat;
 HSPLjava/text/DateFormat;->getTimeZone()Ljava/util/TimeZone;
-HPLjava/text/DateFormat;->isLenient()Z
 HSPLjava/text/DateFormat;->parse(Ljava/lang/String;)Ljava/util/Date;
 HSPLjava/text/DateFormat;->set24HourTimePref(Ljava/lang/Boolean;)V
-HSPLjava/text/DateFormat;->setLenient(Z)V
 HSPLjava/text/DateFormat;->setTimeZone(Ljava/util/TimeZone;)V
 HSPLjava/text/DateFormatSymbols;-><init>(Ljava/util/Locale;)V
 HSPLjava/text/DateFormatSymbols;->getAmPmStrings()[Ljava/lang/String;
@@ -38487,27 +18349,22 @@
 HSPLjava/text/DateFormatSymbols;->getWeekdays()[Ljava/lang/String;
 HSPLjava/text/DateFormatSymbols;->initializeData(Ljava/util/Locale;)V
 HSPLjava/text/DateFormatSymbols;->initializeSupplementaryData(Llibcore/icu/LocaleData;)V
-HPLjava/text/DecimalFormat;-><init>()V
 HSPLjava/text/DecimalFormat;-><init>(Ljava/lang/String;)V
 HSPLjava/text/DecimalFormat;-><init>(Ljava/lang/String;Ljava/text/DecimalFormatSymbols;)V
 HSPLjava/text/DecimalFormat;->clone()Ljava/lang/Object;
 HSPLjava/text/DecimalFormat;->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;
-HPLjava/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;->getGroupingSize()I
 HSPLjava/text/DecimalFormat;->getIcuFieldPosition(Ljava/text/FieldPosition;)Ljava/text/FieldPosition;
 HSPLjava/text/DecimalFormat;->getMaximumFractionDigits()I
 HSPLjava/text/DecimalFormat;->getMaximumIntegerDigits()I
-HSPLjava/text/DecimalFormat;->getMinimumFractionDigits()I
 HSPLjava/text/DecimalFormat;->getMinimumIntegerDigits()I
 HSPLjava/text/DecimalFormat;->getNegativePrefix()Ljava/lang/String;
 HSPLjava/text/DecimalFormat;->getNegativeSuffix()Ljava/lang/String;
 HSPLjava/text/DecimalFormat;->getPositivePrefix()Ljava/lang/String;
 HSPLjava/text/DecimalFormat;->getPositiveSuffix()Ljava/lang/String;
 HSPLjava/text/DecimalFormat;->initPattern(Ljava/lang/String;)V
-HSPLjava/text/DecimalFormat;->isGroupingUsed()Z
 HSPLjava/text/DecimalFormat;->isParseBigDecimal()Z
 HSPLjava/text/DecimalFormat;->isParseIntegerOnly()Z
 HSPLjava/text/DecimalFormat;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;
@@ -38515,7 +18372,6 @@
 HSPLjava/text/DecimalFormat;->setGroupingUsed(Z)V
 HSPLjava/text/DecimalFormat;->setMaximumFractionDigits(I)V
 HSPLjava/text/DecimalFormat;->setMaximumIntegerDigits(I)V
-HSPLjava/text/DecimalFormat;->setMinimumFractionDigits(I)V
 HSPLjava/text/DecimalFormat;->setMinimumIntegerDigits(I)V
 HSPLjava/text/DecimalFormat;->setParseIntegerOnly(Z)V
 HSPLjava/text/DecimalFormat;->toPattern()Ljava/lang/String;
@@ -38578,39 +18434,25 @@
 HSPLjava/text/NumberFormat;-><init>()V
 HSPLjava/text/NumberFormat;->clone()Ljava/lang/Object;
 HSPLjava/text/NumberFormat;->format(D)Ljava/lang/String;
-HPLjava/text/NumberFormat;->format(J)Ljava/lang/String;
-HSPLjava/text/NumberFormat;->getInstance()Ljava/text/NumberFormat;
-HSPLjava/text/NumberFormat;->getInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;
 HSPLjava/text/NumberFormat;->getInstance(Ljava/util/Locale;I)Ljava/text/NumberFormat;
-HSPLjava/text/NumberFormat;->getIntegerInstance()Ljava/text/NumberFormat;
 HSPLjava/text/NumberFormat;->getIntegerInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;
 HSPLjava/text/NumberFormat;->getNumberInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;
 HSPLjava/text/NumberFormat;->getPercentInstance()Ljava/text/NumberFormat;
 HSPLjava/text/NumberFormat;->getPercentInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;
-HSPLjava/text/NumberFormat;->parse(Ljava/lang/String;)Ljava/lang/Number;
 HSPLjava/text/NumberFormat;->setMaximumFractionDigits(I)V
 HSPLjava/text/NumberFormat;->setMaximumIntegerDigits(I)V
-HSPLjava/text/NumberFormat;->setMinimumFractionDigits(I)V
 HSPLjava/text/NumberFormat;->setMinimumIntegerDigits(I)V
 HSPLjava/text/NumberFormat;->setParseIntegerOnly(Z)V
 HSPLjava/text/ParseException;-><init>(Ljava/lang/String;I)V
 HSPLjava/text/ParsePosition;-><init>(I)V
 HSPLjava/text/ParsePosition;->getErrorIndex()I
 HSPLjava/text/ParsePosition;->getIndex()I
-HSPLjava/text/ParsePosition;->setErrorIndex(I)V
 HSPLjava/text/ParsePosition;->setIndex(I)V
 HSPLjava/text/RuleBasedCollator;-><init>(Landroid/icu/text/RuleBasedCollator;)V
-HSPLjava/text/RuleBasedCollator;-><init>(Ljava/lang/String;)V
-HSPLjava/text/RuleBasedCollator;->collAsICU()Landroid/icu/text/RuleBasedCollator;
 HSPLjava/text/RuleBasedCollator;->compare(Ljava/lang/String;Ljava/lang/String;)I
-HPLjava/text/RuleBasedCollator;->getCollationKey(Ljava/lang/String;)Ljava/text/CollationKey;
-HSPLjava/text/RuleBasedCollator;->getRules()Ljava/lang/String;
-HSPLjava/text/SimpleDateFormat;-><init>()V
 HSPLjava/text/SimpleDateFormat;-><init>(IILjava/util/Locale;)V
 HSPLjava/text/SimpleDateFormat;-><init>(Ljava/lang/String;)V
 HSPLjava/text/SimpleDateFormat;-><init>(Ljava/lang/String;Ljava/util/Locale;)V
-HSPLjava/text/SimpleDateFormat;->applyPattern(Ljava/lang/String;)V
-HSPLjava/text/SimpleDateFormat;->applyPatternImpl(Ljava/lang/String;)V
 HSPLjava/text/SimpleDateFormat;->checkNegativeNumberExpression()V
 HSPLjava/text/SimpleDateFormat;->compile(Ljava/lang/String;)[C
 HSPLjava/text/SimpleDateFormat;->encode(IILjava/lang/StringBuilder;)V
@@ -38619,164 +18461,62 @@
 HSPLjava/text/SimpleDateFormat;->formatMonth(IIILjava/lang/StringBuffer;ZZII)Ljava/lang/String;
 HSPLjava/text/SimpleDateFormat;->formatWeekday(IIZZ)Ljava/lang/String;
 HSPLjava/text/SimpleDateFormat;->getDateTimeFormat(IILjava/util/Locale;)Ljava/lang/String;
-HSPLjava/text/SimpleDateFormat;->getTimeZoneNames()Landroid/icu/text/TimeZoneNames;
 HSPLjava/text/SimpleDateFormat;->initialize(Ljava/util/Locale;)V
 HSPLjava/text/SimpleDateFormat;->initializeCalendar(Ljava/util/Locale;)V
 HSPLjava/text/SimpleDateFormat;->initializeDefaultCentury()V
-HSPLjava/text/SimpleDateFormat;->isDigit(C)Z
 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;
 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;->set2DigitYearStart(Ljava/util/Date;)V
 HSPLjava/text/SimpleDateFormat;->subFormat(IILjava/text/Format$FieldDelegate;Ljava/lang/StringBuffer;Z)V
 HSPLjava/text/SimpleDateFormat;->subParse(Ljava/lang/String;IIIZ[ZLjava/text/ParsePosition;ZLjava/text/CalendarBuilder;)I
-HSPLjava/text/SimpleDateFormat;->subParseNumericZone(Ljava/lang/String;IIIZLjava/text/CalendarBuilder;)I
-HPLjava/text/SimpleDateFormat;->toPattern()Ljava/lang/String;
+HSPLjava/text/SimpleDateFormat;->toPattern()Ljava/lang/String;
 HSPLjava/text/SimpleDateFormat;->useDateFormatSymbols()Z
 HSPLjava/text/SimpleDateFormat;->zeroPaddingNumber(IIILjava/lang/StringBuffer;)V
 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
 HSPLjava/text/StringCharacterIterator;->clone()Ljava/lang/Object;
-HSPLjava/time/-$$Lambda$Bq8PKq1YWr8nyVk9SSfRYKrOu4A;->queryFrom(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/Object;
-PLjava/time/-$$Lambda$JBWLm7jbzHiLhHxYdB_IuO_vFO8;-><clinit>()V
-PLjava/time/-$$Lambda$up1HpCqucM_DXyY-rpDOyCcdmIA;->queryFrom(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/Object;
+HSPLjava/text/StringCharacterIterator;->current()C
+HSPLjava/text/StringCharacterIterator;->next()C
 HSPLjava/time/Clock$SystemClock;-><init>(Ljava/time/ZoneId;)V
 HSPLjava/time/Clock$SystemClock;->getZone()Ljava/time/ZoneId;
 HSPLjava/time/Clock$SystemClock;->instant()Ljava/time/Instant;
 HSPLjava/time/Clock$SystemClock;->millis()J
 HSPLjava/time/Clock;-><init>()V
-HSPLjava/time/Clock;->system(Ljava/time/ZoneId;)Ljava/time/Clock;
-HSPLjava/time/Clock;->systemDefaultZone()Ljava/time/Clock;
 HSPLjava/time/Clock;->systemUTC()Ljava/time/Clock;
-HSPLjava/time/DateTimeException;-><init>(Ljava/lang/String;)V
-HPLjava/time/DayOfWeek;->getValue()I
-HPLjava/time/DayOfWeek;->of(I)Ljava/time/DayOfWeek;
-HSPLjava/time/Duration;-><init>(JI)V
-HSPLjava/time/Duration;->addTo(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;
-HSPLjava/time/Duration;->between(Ljava/time/temporal/Temporal;Ljava/time/temporal/Temporal;)Ljava/time/Duration;
-HSPLjava/time/Duration;->compareTo(Ljava/time/Duration;)I
-HSPLjava/time/Duration;->create(JI)Ljava/time/Duration;
-HSPLjava/time/Duration;->create(Ljava/math/BigDecimal;)Ljava/time/Duration;
-HSPLjava/time/Duration;->dividedBy(J)Ljava/time/Duration;
-HPLjava/time/Duration;->getNano()I
-HSPLjava/time/Duration;->getSeconds()J
-HPLjava/time/Duration;->isNegative()Z
-HPLjava/time/Duration;->minus(Ljava/time/Duration;)Ljava/time/Duration;
-HSPLjava/time/Duration;->multipliedBy(J)Ljava/time/Duration;
-HSPLjava/time/Duration;->ofDays(J)Ljava/time/Duration;
-HSPLjava/time/Duration;->ofHours(J)Ljava/time/Duration;
-HSPLjava/time/Duration;->ofMillis(J)Ljava/time/Duration;
-HSPLjava/time/Duration;->ofMinutes(J)Ljava/time/Duration;
-HSPLjava/time/Duration;->ofNanos(J)Ljava/time/Duration;
-HSPLjava/time/Duration;->ofSeconds(J)Ljava/time/Duration;
-HSPLjava/time/Duration;->ofSeconds(JJ)Ljava/time/Duration;
-HPLjava/time/Duration;->plus(JJ)Ljava/time/Duration;
-HSPLjava/time/Duration;->subtractFrom(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;
+HSPLjava/time/DayOfWeek;->getValue()I
+HSPLjava/time/DayOfWeek;->of(I)Ljava/time/DayOfWeek;
 HSPLjava/time/Duration;->toMillis()J
-HSPLjava/time/Duration;->toMinutes()J
-HSPLjava/time/Duration;->toNanos()J
-HSPLjava/time/Duration;->toSeconds()Ljava/math/BigDecimal;
-HPLjava/time/Duration;->toString()Ljava/lang/String;
 HSPLjava/time/Instant;-><init>(JI)V
-HSPLjava/time/Instant;->atZone(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;
-HSPLjava/time/Instant;->compareTo(Ljava/time/Instant;)I
 HSPLjava/time/Instant;->create(JI)Ljava/time/Instant;
-HPLjava/time/Instant;->equals(Ljava/lang/Object;)Z
 HSPLjava/time/Instant;->from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/Instant;
 HSPLjava/time/Instant;->getEpochSecond()J
-HSPLjava/time/Instant;->getLong(Ljava/time/temporal/TemporalField;)J
 HSPLjava/time/Instant;->getNano()I
-HSPLjava/time/Instant;->isAfter(Ljava/time/Instant;)Z
-HSPLjava/time/Instant;->isBefore(Ljava/time/Instant;)Z
-HSPLjava/time/Instant;->isSupported(Ljava/time/temporal/TemporalField;)Z
-HSPLjava/time/Instant;->minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;
-HSPLjava/time/Instant;->minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;
-HSPLjava/time/Instant;->minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Instant;
-HSPLjava/time/Instant;->minusMillis(J)Ljava/time/Instant;
-HSPLjava/time/Instant;->nanosUntil(Ljava/time/Instant;)J
 HSPLjava/time/Instant;->now()Ljava/time/Instant;
 HSPLjava/time/Instant;->ofEpochMilli(J)Ljava/time/Instant;
 HSPLjava/time/Instant;->ofEpochSecond(JJ)Ljava/time/Instant;
-HPLjava/time/Instant;->parse(Ljava/lang/CharSequence;)Ljava/time/Instant;
-HSPLjava/time/Instant;->plus(JJ)Ljava/time/Instant;
-HSPLjava/time/Instant;->plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;
-HSPLjava/time/Instant;->plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;
-HSPLjava/time/Instant;->plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Instant;
-HSPLjava/time/Instant;->plusMillis(J)Ljava/time/Instant;
-HSPLjava/time/Instant;->plusNanos(J)Ljava/time/Instant;
-HSPLjava/time/Instant;->plusSeconds(J)Ljava/time/Instant;
-HPLjava/time/Instant;->query(Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;
 HSPLjava/time/Instant;->toEpochMilli()J
-HSPLjava/time/Instant;->toString()Ljava/lang/String;
-HSPLjava/time/Instant;->truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/Instant;
 HSPLjava/time/Instant;->until(Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalUnit;)J
-HSPLjava/time/LocalDate;-><init>(III)V
-PLjava/time/LocalDate;->atTime(Ljava/time/LocalTime;)Ljava/time/LocalDateTime;
-PLjava/time/LocalDate;->atTime(Ljava/time/LocalTime;)Ljava/time/chrono/ChronoLocalDateTime;
-HSPLjava/time/LocalDate;->compareTo0(Ljava/time/LocalDate;)I
-HSPLjava/time/LocalDate;->create(III)Ljava/time/LocalDate;
-HSPLjava/time/LocalDate;->equals(Ljava/lang/Object;)Z
-HSPLjava/time/LocalDate;->from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDate;
-HPLjava/time/LocalDate;->get0(Ljava/time/temporal/TemporalField;)I
-HSPLjava/time/LocalDate;->getChronology()Ljava/time/chrono/Chronology;
-HSPLjava/time/LocalDate;->getChronology()Ljava/time/chrono/IsoChronology;
-PLjava/time/LocalDate;->getDayOfMonth()I
-HPLjava/time/LocalDate;->getDayOfWeek()Ljava/time/DayOfWeek;
-HPLjava/time/LocalDate;->getLong(Ljava/time/temporal/TemporalField;)J
-PLjava/time/LocalDate;->getMonth()Ljava/time/Month;
-PLjava/time/LocalDate;->getMonthValue()I
-PLjava/time/LocalDate;->getYear()I
-HSPLjava/time/LocalDate;->isAfter(Ljava/time/chrono/ChronoLocalDate;)Z
+HSPLjava/time/LocalDate;->get(Ljava/time/temporal/TemporalField;)I
+HSPLjava/time/LocalDate;->get0(Ljava/time/temporal/TemporalField;)I
+HSPLjava/time/LocalDate;->getDayOfMonth()I
+HSPLjava/time/LocalDate;->getDayOfWeek()Ljava/time/DayOfWeek;
+HSPLjava/time/LocalDate;->getYear()I
 HSPLjava/time/LocalDate;->isLeapYear()Z
-PLjava/time/LocalDate;->isSupported(Ljava/time/temporal/TemporalField;)Z
-HSPLjava/time/LocalDate;->minusDays(J)Ljava/time/LocalDate;
-HSPLjava/time/LocalDate;->now()Ljava/time/LocalDate;
-HSPLjava/time/LocalDate;->now(Ljava/time/Clock;)Ljava/time/LocalDate;
-HSPLjava/time/LocalDate;->of(III)Ljava/time/LocalDate;
-PLjava/time/LocalDate;->of(ILjava/time/Month;I)Ljava/time/LocalDate;
-HSPLjava/time/LocalDate;->ofEpochDay(J)Ljava/time/LocalDate;
-HSPLjava/time/LocalDate;->parse(Ljava/lang/CharSequence;)Ljava/time/LocalDate;
-HSPLjava/time/LocalDate;->parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/LocalDate;
+HSPLjava/time/LocalDate;->of(ILjava/time/Month;I)Ljava/time/LocalDate;
+HSPLjava/time/LocalDate;->plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDate;
 HSPLjava/time/LocalDate;->plusDays(J)Ljava/time/LocalDate;
-HSPLjava/time/LocalDate;->query(Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;
 HSPLjava/time/LocalDate;->toEpochDay()J
 HSPLjava/time/LocalDate;->toString()Ljava/lang/String;
+HSPLjava/time/LocalDate;->with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/LocalDate;
 HSPLjava/time/LocalDateTime;-><init>(Ljava/time/LocalDate;Ljava/time/LocalTime;)V
-PLjava/time/LocalDateTime;->atZone(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;
-PLjava/time/LocalDateTime;->atZone(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;
-HPLjava/time/LocalDateTime;->compareTo(Ljava/lang/Object;)I
-HPLjava/time/LocalDateTime;->compareTo(Ljava/time/chrono/ChronoLocalDateTime;)I
-HPLjava/time/LocalDateTime;->compareTo0(Ljava/time/LocalDateTime;)I
-PLjava/time/LocalDateTime;->from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDateTime;
-PLjava/time/LocalDateTime;->getDayOfMonth()I
-HPLjava/time/LocalDateTime;->getDayOfWeek()Ljava/time/DayOfWeek;
+HSPLjava/time/LocalDateTime;->getDayOfMonth()I
 HSPLjava/time/LocalDateTime;->getHour()I
-HPLjava/time/LocalDateTime;->getLong(Ljava/time/temporal/TemporalField;)J
-HSPLjava/time/LocalDateTime;->getMinute()I
-PLjava/time/LocalDateTime;->getMonth()Ljava/time/Month;
-PLjava/time/LocalDateTime;->getMonthValue()I
-HSPLjava/time/LocalDateTime;->getNano()I
 HSPLjava/time/LocalDateTime;->getSecond()I
-PLjava/time/LocalDateTime;->getYear()I
-PLjava/time/LocalDateTime;->isAfter(Ljava/time/chrono/ChronoLocalDateTime;)Z
-PLjava/time/LocalDateTime;->isBefore(Ljava/time/chrono/ChronoLocalDateTime;)Z
-HPLjava/time/LocalDateTime;->isSupported(Ljava/time/temporal/TemporalField;)Z
-PLjava/time/LocalDateTime;->minusDays(J)Ljava/time/LocalDateTime;
-HSPLjava/time/LocalDateTime;->now()Ljava/time/LocalDateTime;
-HSPLjava/time/LocalDateTime;->now(Ljava/time/Clock;)Ljava/time/LocalDateTime;
-HPLjava/time/LocalDateTime;->now(Ljava/time/ZoneId;)Ljava/time/LocalDateTime;
-HPLjava/time/LocalDateTime;->of(IIIIIII)Ljava/time/LocalDateTime;
-PLjava/time/LocalDateTime;->of(ILjava/time/Month;III)Ljava/time/LocalDateTime;
-HPLjava/time/LocalDateTime;->of(Ljava/time/LocalDate;Ljava/time/LocalTime;)Ljava/time/LocalDateTime;
-HSPLjava/time/LocalDateTime;->ofEpochSecond(JILjava/time/ZoneOffset;)Ljava/time/LocalDateTime;
-HPLjava/time/LocalDateTime;->ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/LocalDateTime;
-PLjava/time/LocalDateTime;->parse(Ljava/lang/CharSequence;)Ljava/time/LocalDateTime;
-PLjava/time/LocalDateTime;->parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/LocalDateTime;
-PLjava/time/LocalDateTime;->plusDays(J)Ljava/time/LocalDateTime;
+HSPLjava/time/LocalDateTime;->getYear()I
 HSPLjava/time/LocalDateTime;->plusSeconds(J)Ljava/time/LocalDateTime;
 HSPLjava/time/LocalDateTime;->plusWithOverflow(Ljava/time/LocalDate;JJJJI)Ljava/time/LocalDateTime;
 HSPLjava/time/LocalDateTime;->toLocalDate()Ljava/time/LocalDate;
@@ -38784,244 +18524,79 @@
 HSPLjava/time/LocalDateTime;->toLocalTime()Ljava/time/LocalTime;
 HSPLjava/time/LocalDateTime;->toString()Ljava/lang/String;
 HSPLjava/time/LocalDateTime;->with(Ljava/time/LocalDate;Ljava/time/LocalTime;)Ljava/time/LocalDateTime;
-HPLjava/time/LocalDateTime;->withSecond(I)Ljava/time/LocalDateTime;
-PLjava/time/LocalTime$1;-><clinit>()V
+HSPLjava/time/LocalTime$1;-><clinit>()V
 HSPLjava/time/LocalTime;-><init>(IIII)V
-PLjava/time/LocalTime;->compareTo(Ljava/time/LocalTime;)I
 HSPLjava/time/LocalTime;->create(IIII)Ljava/time/LocalTime;
-PLjava/time/LocalTime;->from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalTime;
-HPLjava/time/LocalTime;->get0(Ljava/time/temporal/TemporalField;)I
 HSPLjava/time/LocalTime;->getHour()I
-HPLjava/time/LocalTime;->getLong(Ljava/time/temporal/TemporalField;)J
 HSPLjava/time/LocalTime;->getMinute()I
 HSPLjava/time/LocalTime;->getNano()I
 HSPLjava/time/LocalTime;->getSecond()I
-PLjava/time/LocalTime;->isSupported(Ljava/time/temporal/TemporalField;)Z
-HPLjava/time/LocalTime;->now(Ljava/time/Clock;)Ljava/time/LocalTime;
-PLjava/time/LocalTime;->of(II)Ljava/time/LocalTime;
-HPLjava/time/LocalTime;->of(IIII)Ljava/time/LocalTime;
 HSPLjava/time/LocalTime;->ofNanoOfDay(J)Ljava/time/LocalTime;
-PLjava/time/LocalTime;->ofSecondOfDay(J)Ljava/time/LocalTime;
-HPLjava/time/LocalTime;->query(Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;
 HSPLjava/time/LocalTime;->toNanoOfDay()J
 HSPLjava/time/LocalTime;->toSecondOfDay()I
 HSPLjava/time/LocalTime;->toString()Ljava/lang/String;
-HPLjava/time/LocalTime;->until(Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalUnit;)J
-HPLjava/time/LocalTime;->withSecond(I)Ljava/time/LocalTime;
-PLjava/time/Month;->getValue()I
-PLjava/time/Month;->of(I)Ljava/time/Month;
-PLjava/time/Period;->isZero()Z
+HSPLjava/time/Month;->getValue()I
 HSPLjava/time/ZoneId;-><init>()V
-HSPLjava/time/ZoneId;->equals(Ljava/lang/Object;)Z
-PLjava/time/ZoneId;->from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneId;
 HSPLjava/time/ZoneId;->of(Ljava/lang/String;)Ljava/time/ZoneId;
 HSPLjava/time/ZoneId;->of(Ljava/lang/String;Ljava/util/Map;)Ljava/time/ZoneId;
 HSPLjava/time/ZoneId;->of(Ljava/lang/String;Z)Ljava/time/ZoneId;
 HSPLjava/time/ZoneId;->systemDefault()Ljava/time/ZoneId;
-HSPLjava/time/ZoneId;->toString()Ljava/lang/String;
 HSPLjava/time/ZoneOffset;-><init>(I)V
 HSPLjava/time/ZoneOffset;->buildId(I)Ljava/lang/String;
 HSPLjava/time/ZoneOffset;->getId()Ljava/lang/String;
-PLjava/time/ZoneOffset;->getRules()Ljava/time/zone/ZoneRules;
 HSPLjava/time/ZoneOffset;->getTotalSeconds()I
 HSPLjava/time/ZoneOffset;->ofTotalSeconds(I)Ljava/time/ZoneOffset;
-HSPLjava/time/ZoneOffset;->toString()Ljava/lang/String;
 HSPLjava/time/ZoneRegion;-><init>(Ljava/lang/String;Ljava/time/zone/ZoneRules;)V
 HSPLjava/time/ZoneRegion;->checkName(Ljava/lang/String;)V
 HSPLjava/time/ZoneRegion;->getId()Ljava/lang/String;
 HSPLjava/time/ZoneRegion;->getRules()Ljava/time/zone/ZoneRules;
 HSPLjava/time/ZoneRegion;->ofId(Ljava/lang/String;Z)Ljava/time/ZoneRegion;
-PLjava/time/ZonedDateTime$1;-><clinit>()V
 HSPLjava/time/ZonedDateTime;-><init>(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneId;)V
 HSPLjava/time/ZonedDateTime;->create(JILjava/time/ZoneId;)Ljava/time/ZonedDateTime;
-PLjava/time/ZonedDateTime;->format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;
-PLjava/time/ZonedDateTime;->from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZonedDateTime;
-HSPLjava/time/ZonedDateTime;->getHour()I
-HPLjava/time/ZonedDateTime;->getLong(Ljava/time/temporal/TemporalField;)J
-HSPLjava/time/ZonedDateTime;->getMinute()I
-HSPLjava/time/ZonedDateTime;->getNano()I
-PLjava/time/ZonedDateTime;->getOffset()Ljava/time/ZoneOffset;
-HSPLjava/time/ZonedDateTime;->getSecond()I
-PLjava/time/ZonedDateTime;->getZone()Ljava/time/ZoneId;
-HPLjava/time/ZonedDateTime;->now()Ljava/time/ZonedDateTime;
-HSPLjava/time/ZonedDateTime;->now(Ljava/time/Clock;)Ljava/time/ZonedDateTime;
-HSPLjava/time/ZonedDateTime;->now(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;
-PLjava/time/ZonedDateTime;->of(Ljava/time/LocalDateTime;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;
 HSPLjava/time/ZonedDateTime;->ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;
-HPLjava/time/ZonedDateTime;->ofLocal(Ljava/time/LocalDateTime;Ljava/time/ZoneId;Ljava/time/ZoneOffset;)Ljava/time/ZonedDateTime;
-PLjava/time/ZonedDateTime;->parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/ZonedDateTime;
-HPLjava/time/ZonedDateTime;->query(Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;
-PLjava/time/ZonedDateTime;->toLocalDate()Ljava/time/LocalDate;
-PLjava/time/ZonedDateTime;->toLocalDate()Ljava/time/chrono/ChronoLocalDate;
-PLjava/time/ZonedDateTime;->toLocalTime()Ljava/time/LocalTime;
-HSPLjava/time/ZonedDateTime;->toString()Ljava/lang/String;
-HSPLjava/time/chrono/AbstractChronology;->equals(Ljava/lang/Object;)Z
-HSPLjava/time/chrono/AbstractChronology;->resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/ChronoLocalDate;
-PLjava/time/chrono/ChronoLocalDate;->isSupported(Ljava/time/temporal/TemporalField;)Z
 HSPLjava/time/chrono/ChronoLocalDateTime;->toEpochSecond(Ljava/time/ZoneOffset;)J
-PLjava/time/chrono/ChronoZonedDateTime;->getChronology()Ljava/time/chrono/Chronology;
-PLjava/time/chrono/ChronoZonedDateTime;->query(Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;
-PLjava/time/chrono/ChronoZonedDateTime;->toEpochSecond()J
-PLjava/time/chrono/ChronoZonedDateTime;->toInstant()Ljava/time/Instant;
 HSPLjava/time/chrono/IsoChronology;->isLeapYear(J)Z
-HSPLjava/time/chrono/IsoChronology;->resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/LocalDate;
-HSPLjava/time/chrono/IsoChronology;->resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/ChronoLocalDate;
-HSPLjava/time/chrono/IsoChronology;->resolveProlepticMonth(Ljava/util/Map;Ljava/time/format/ResolverStyle;)V
-HSPLjava/time/chrono/IsoChronology;->resolveYMD(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/LocalDate;
-HSPLjava/time/chrono/IsoChronology;->resolveYMD(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/ChronoLocalDate;
-HSPLjava/time/chrono/IsoChronology;->resolveYearOfEra(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/LocalDate;
-HSPLjava/time/chrono/IsoChronology;->resolveYearOfEra(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/ChronoLocalDate;
-HPLjava/time/chrono/IsoChronology;->zonedDateTime(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;
-HPLjava/time/chrono/IsoChronology;->zonedDateTime(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;
-PLjava/time/format/-$$Lambda$DateTimeFormatterBuilder$M-GACNxm6552EiylPRPw4dyNXKo;->queryFrom(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/Object;
-PLjava/time/format/DateTimeFormatter;-><init>(Ljava/time/format/DateTimeFormatterBuilder$CompositePrinterParser;Ljava/util/Locale;Ljava/time/format/DecimalStyle;Ljava/time/format/ResolverStyle;Ljava/util/Set;Ljava/time/chrono/Chronology;Ljava/time/ZoneId;)V
+HSPLjava/time/format/DateTimeFormatter;-><init>(Ljava/time/format/DateTimeFormatterBuilder$CompositePrinterParser;Ljava/util/Locale;Ljava/time/format/DecimalStyle;Ljava/time/format/ResolverStyle;Ljava/util/Set;Ljava/time/chrono/Chronology;Ljava/time/ZoneId;)V
 HSPLjava/time/format/DateTimeFormatter;->format(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/String;
 HSPLjava/time/format/DateTimeFormatter;->formatTo(Ljava/time/temporal/TemporalAccessor;Ljava/lang/Appendable;)V
-HSPLjava/time/format/DateTimeFormatter;->getChronology()Ljava/time/chrono/Chronology;
 HSPLjava/time/format/DateTimeFormatter;->getDecimalStyle()Ljava/time/format/DecimalStyle;
-HSPLjava/time/format/DateTimeFormatter;->getZone()Ljava/time/ZoneId;
-PLjava/time/format/DateTimeFormatter;->ofPattern(Ljava/lang/String;)Ljava/time/format/DateTimeFormatter;
-PLjava/time/format/DateTimeFormatter;->ofPattern(Ljava/lang/String;Ljava/util/Locale;)Ljava/time/format/DateTimeFormatter;
-HSPLjava/time/format/DateTimeFormatter;->parse(Ljava/lang/CharSequence;Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;
-HSPLjava/time/format/DateTimeFormatter;->parseResolved0(Ljava/lang/CharSequence;Ljava/text/ParsePosition;)Ljava/time/temporal/TemporalAccessor;
-HSPLjava/time/format/DateTimeFormatter;->parseUnresolved0(Ljava/lang/CharSequence;Ljava/text/ParsePosition;)Ljava/time/format/DateTimeParseContext;
-HPLjava/time/format/DateTimeFormatter;->toPrinterParser(Z)Ljava/time/format/DateTimeFormatterBuilder$CompositePrinterParser;
-HPLjava/time/format/DateTimeFormatter;->withZone(Ljava/time/ZoneId;)Ljava/time/format/DateTimeFormatter;
-PLjava/time/format/DateTimeFormatterBuilder$3;-><clinit>()V
-PLjava/time/format/DateTimeFormatterBuilder$CharLiteralPrinterParser;-><init>(C)V
-HPLjava/time/format/DateTimeFormatterBuilder$CharLiteralPrinterParser;->format(Ljava/time/format/DateTimePrintContext;Ljava/lang/StringBuilder;)Z
-HSPLjava/time/format/DateTimeFormatterBuilder$CharLiteralPrinterParser;->parse(Ljava/time/format/DateTimeParseContext;Ljava/lang/CharSequence;I)I
-PLjava/time/format/DateTimeFormatterBuilder$CompositePrinterParser;-><init>(Ljava/util/List;Z)V
-PLjava/time/format/DateTimeFormatterBuilder$CompositePrinterParser;-><init>([Ljava/time/format/DateTimeFormatterBuilder$DateTimePrinterParser;Z)V
+HSPLjava/time/format/DateTimeFormatterBuilder$CharLiteralPrinterParser;-><init>(C)V
+HSPLjava/time/format/DateTimeFormatterBuilder$CompositePrinterParser;-><init>(Ljava/util/List;Z)V
+HSPLjava/time/format/DateTimeFormatterBuilder$CompositePrinterParser;-><init>([Ljava/time/format/DateTimeFormatterBuilder$DateTimePrinterParser;Z)V
 HSPLjava/time/format/DateTimeFormatterBuilder$CompositePrinterParser;->format(Ljava/time/format/DateTimePrintContext;Ljava/lang/StringBuilder;)Z
-HSPLjava/time/format/DateTimeFormatterBuilder$CompositePrinterParser;->parse(Ljava/time/format/DateTimeParseContext;Ljava/lang/CharSequence;I)I
-HPLjava/time/format/DateTimeFormatterBuilder$CompositePrinterParser;->withOptional(Z)Ljava/time/format/DateTimeFormatterBuilder$CompositePrinterParser;
-PLjava/time/format/DateTimeFormatterBuilder$FractionPrinterParser;-><init>(Ljava/time/temporal/TemporalField;IIZ)V
-HPLjava/time/format/DateTimeFormatterBuilder$FractionPrinterParser;->convertFromFraction(Ljava/math/BigDecimal;)J
-HPLjava/time/format/DateTimeFormatterBuilder$FractionPrinterParser;->convertToFraction(J)Ljava/math/BigDecimal;
-HPLjava/time/format/DateTimeFormatterBuilder$FractionPrinterParser;->format(Ljava/time/format/DateTimePrintContext;Ljava/lang/StringBuilder;)Z
-HPLjava/time/format/DateTimeFormatterBuilder$FractionPrinterParser;->parse(Ljava/time/format/DateTimeParseContext;Ljava/lang/CharSequence;I)I
-HSPLjava/time/format/DateTimeFormatterBuilder$InstantPrinterParser;->format(Ljava/time/format/DateTimePrintContext;Ljava/lang/StringBuilder;)Z
-HPLjava/time/format/DateTimeFormatterBuilder$InstantPrinterParser;->parse(Ljava/time/format/DateTimeParseContext;Ljava/lang/CharSequence;I)I
-PLjava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;-><init>(Ljava/time/temporal/TemporalField;IILjava/time/format/SignStyle;)V
-PLjava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;-><init>(Ljava/time/temporal/TemporalField;IILjava/time/format/SignStyle;I)V
-PLjava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;->access$000(Ljava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;)Ljava/time/format/SignStyle;
-HPLjava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;->format(Ljava/time/format/DateTimePrintContext;Ljava/lang/StringBuilder;)Z
-PLjava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;->getValue(Ljava/time/format/DateTimePrintContext;J)J
-HSPLjava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;->parse(Ljava/time/format/DateTimeParseContext;Ljava/lang/CharSequence;I)I
-HSPLjava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;->setValue(Ljava/time/format/DateTimeParseContext;JII)I
-PLjava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;->withFixedWidth()Ljava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;
-PLjava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;->withSubsequentWidth(I)Ljava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;
-HPLjava/time/format/DateTimeFormatterBuilder$OffsetIdPrinterParser;->format(Ljava/time/format/DateTimePrintContext;Ljava/lang/StringBuilder;)Z
-HPLjava/time/format/DateTimeFormatterBuilder$OffsetIdPrinterParser;->parse(Ljava/time/format/DateTimeParseContext;Ljava/lang/CharSequence;I)I
-HPLjava/time/format/DateTimeFormatterBuilder$OffsetIdPrinterParser;->parseNumber([IILjava/lang/CharSequence;Z)Z
-PLjava/time/format/DateTimeFormatterBuilder$PrefixTree;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/time/format/DateTimeFormatterBuilder$PrefixTree;)V
-PLjava/time/format/DateTimeFormatterBuilder$PrefixTree;->newTree(Ljava/time/format/DateTimeParseContext;)Ljava/time/format/DateTimeFormatterBuilder$PrefixTree;
-HPLjava/time/format/DateTimeFormatterBuilder$PrefixTree;->newTree(Ljava/util/Set;Ljava/time/format/DateTimeParseContext;)Ljava/time/format/DateTimeFormatterBuilder$PrefixTree;
-HSPLjava/time/format/DateTimeFormatterBuilder$SettingsParser;->format(Ljava/time/format/DateTimePrintContext;Ljava/lang/StringBuilder;)Z
-HPLjava/time/format/DateTimeFormatterBuilder$SettingsParser;->parse(Ljava/time/format/DateTimeParseContext;Ljava/lang/CharSequence;I)I
-HPLjava/time/format/DateTimeFormatterBuilder$ZoneIdPrinterParser;->format(Ljava/time/format/DateTimePrintContext;Ljava/lang/StringBuilder;)Z
-HPLjava/time/format/DateTimeFormatterBuilder$ZoneIdPrinterParser;->getTree(Ljava/time/format/DateTimeParseContext;)Ljava/time/format/DateTimeFormatterBuilder$PrefixTree;
-HPLjava/time/format/DateTimeFormatterBuilder$ZoneIdPrinterParser;->parse(Ljava/time/format/DateTimeParseContext;Ljava/lang/CharSequence;I)I
-PLjava/time/format/DateTimeFormatterBuilder;-><init>()V
-HPLjava/time/format/DateTimeFormatterBuilder;->append(Ljava/time/format/DateTimeFormatter;)Ljava/time/format/DateTimeFormatterBuilder;
-PLjava/time/format/DateTimeFormatterBuilder;->appendFraction(Ljava/time/temporal/TemporalField;IIZ)Ljava/time/format/DateTimeFormatterBuilder;
-PLjava/time/format/DateTimeFormatterBuilder;->appendInternal(Ljava/time/format/DateTimeFormatterBuilder$DateTimePrinterParser;)I
-PLjava/time/format/DateTimeFormatterBuilder;->appendLiteral(C)Ljava/time/format/DateTimeFormatterBuilder;
-PLjava/time/format/DateTimeFormatterBuilder;->appendPattern(Ljava/lang/String;)Ljava/time/format/DateTimeFormatterBuilder;
-PLjava/time/format/DateTimeFormatterBuilder;->appendValue(Ljava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;)Ljava/time/format/DateTimeFormatterBuilder;
-PLjava/time/format/DateTimeFormatterBuilder;->appendValue(Ljava/time/temporal/TemporalField;I)Ljava/time/format/DateTimeFormatterBuilder;
-PLjava/time/format/DateTimeFormatterBuilder;->appendValue(Ljava/time/temporal/TemporalField;IILjava/time/format/SignStyle;)Ljava/time/format/DateTimeFormatterBuilder;
-PLjava/time/format/DateTimeFormatterBuilder;->lambda$static$0(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneId;
-PLjava/time/format/DateTimeFormatterBuilder;->parseField(CILjava/time/temporal/TemporalField;)V
-PLjava/time/format/DateTimeFormatterBuilder;->parsePattern(Ljava/lang/String;)V
-PLjava/time/format/DateTimeFormatterBuilder;->toFormatter()Ljava/time/format/DateTimeFormatter;
-PLjava/time/format/DateTimeFormatterBuilder;->toFormatter(Ljava/util/Locale;)Ljava/time/format/DateTimeFormatter;
-PLjava/time/format/DateTimeFormatterBuilder;->toFormatter(Ljava/util/Locale;Ljava/time/format/ResolverStyle;Ljava/time/chrono/Chronology;)Ljava/time/format/DateTimeFormatter;
-HSPLjava/time/format/DateTimeParseContext;-><init>(Ljava/time/format/DateTimeFormatter;)V
-PLjava/time/format/DateTimeParseContext;->charEquals(CC)Z
-HPLjava/time/format/DateTimeParseContext;->copy()Ljava/time/format/DateTimeParseContext;
-HSPLjava/time/format/DateTimeParseContext;->currentParsed()Ljava/time/format/Parsed;
-HPLjava/time/format/DateTimeParseContext;->endOptional(Z)V
-HSPLjava/time/format/DateTimeParseContext;->getDecimalStyle()Ljava/time/format/DecimalStyle;
-HSPLjava/time/format/DateTimeParseContext;->getEffectiveChronology()Ljava/time/chrono/Chronology;
-HPLjava/time/format/DateTimeParseContext;->getParsed(Ljava/time/temporal/TemporalField;)Ljava/lang/Long;
-PLjava/time/format/DateTimeParseContext;->isCaseSensitive()Z
-HSPLjava/time/format/DateTimeParseContext;->isStrict()Z
-PLjava/time/format/DateTimeParseContext;->setCaseSensitive(Z)V
-PLjava/time/format/DateTimeParseContext;->setParsed(Ljava/time/ZoneId;)V
-HSPLjava/time/format/DateTimeParseContext;->setParsedField(Ljava/time/temporal/TemporalField;JII)I
-HPLjava/time/format/DateTimeParseContext;->startOptional()V
-HPLjava/time/format/DateTimeParseContext;->subSequenceEquals(Ljava/lang/CharSequence;ILjava/lang/CharSequence;II)Z
-HSPLjava/time/format/DateTimeParseContext;->toResolved(Ljava/time/format/ResolverStyle;Ljava/util/Set;)Ljava/time/temporal/TemporalAccessor;
+HSPLjava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;-><init>(Ljava/time/temporal/TemporalField;IILjava/time/format/SignStyle;)V
+HSPLjava/time/format/DateTimeFormatterBuilder;->appendInternal(Ljava/time/format/DateTimeFormatterBuilder$DateTimePrinterParser;)I
+HSPLjava/time/format/DateTimeFormatterBuilder;->appendLiteral(C)Ljava/time/format/DateTimeFormatterBuilder;
+HSPLjava/time/format/DateTimeFormatterBuilder;->appendValue(Ljava/time/format/DateTimeFormatterBuilder$NumberPrinterParser;)Ljava/time/format/DateTimeFormatterBuilder;
+HSPLjava/time/format/DateTimeFormatterBuilder;->appendValue(Ljava/time/temporal/TemporalField;I)Ljava/time/format/DateTimeFormatterBuilder;
+HSPLjava/time/format/DateTimeFormatterBuilder;->parseField(CILjava/time/temporal/TemporalField;)V
+HSPLjava/time/format/DateTimeFormatterBuilder;->parsePattern(Ljava/lang/String;)V
+HSPLjava/time/format/DateTimeFormatterBuilder;->toFormatter(Ljava/util/Locale;Ljava/time/format/ResolverStyle;Ljava/time/chrono/Chronology;)Ljava/time/format/DateTimeFormatter;
 HSPLjava/time/format/DateTimePrintContext;-><init>(Ljava/time/temporal/TemporalAccessor;Ljava/time/format/DateTimeFormatter;)V
-PLjava/time/format/DateTimePrintContext;->endOptional()V
-PLjava/time/format/DateTimePrintContext;->getDecimalStyle()Ljava/time/format/DecimalStyle;
-PLjava/time/format/DateTimePrintContext;->getValue(Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;
-PLjava/time/format/DateTimePrintContext;->startOptional()V
-PLjava/time/format/DecimalStyle;->convertNumberToI18N(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/time/format/DecimalStyle;->convertToDigit(C)I
-PLjava/time/format/DecimalStyle;->getDecimalSeparator()C
-HSPLjava/time/format/DecimalStyle;->getNegativeSign()C
-HSPLjava/time/format/DecimalStyle;->getPositiveSign()C
-PLjava/time/format/DecimalStyle;->getZeroDigit()C
-HSPLjava/time/format/Parsed;-><init>()V
-PLjava/time/format/Parsed;->copy()Ljava/time/format/Parsed;
-HSPLjava/time/format/Parsed;->crossCheck()V
-HSPLjava/time/format/Parsed;->crossCheck(Ljava/time/temporal/TemporalAccessor;)V
-HPLjava/time/format/Parsed;->getLong(Ljava/time/temporal/TemporalField;)J
-HPLjava/time/format/Parsed;->isSupported(Ljava/time/temporal/TemporalField;)Z
-HSPLjava/time/format/Parsed;->query(Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;
-HSPLjava/time/format/Parsed;->resolve(Ljava/time/format/ResolverStyle;Ljava/util/Set;)Ljava/time/temporal/TemporalAccessor;
-HSPLjava/time/format/Parsed;->resolveDateFields()V
-HSPLjava/time/format/Parsed;->resolveFields()V
-HSPLjava/time/format/Parsed;->resolveFractional()V
-HSPLjava/time/format/Parsed;->resolveInstant()V
-HSPLjava/time/format/Parsed;->resolveInstantFields()V
-HSPLjava/time/format/Parsed;->resolvePeriod()V
-HPLjava/time/format/Parsed;->resolveTime(JJJJ)V
-HSPLjava/time/format/Parsed;->resolveTimeFields()V
-HSPLjava/time/format/Parsed;->resolveTimeLenient()V
-PLjava/time/format/Parsed;->updateCheckConflict(Ljava/time/LocalTime;Ljava/time/Period;)V
-HSPLjava/time/format/Parsed;->updateCheckConflict(Ljava/time/chrono/ChronoLocalDate;)V
-PLjava/time/format/SignStyle;->values()[Ljava/time/format/SignStyle;
-PLjava/time/temporal/-$$Lambda$TemporalQueries$PBpYKRiwkxqQNlcU-BOJfaQoONg;->queryFrom(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/Object;
+HSPLjava/time/temporal/-$$Lambda$TemporalAdjusters$A9OZwfMlHD1vy7-nYt5NssACu7Q;-><init>(I)V
+HSPLjava/time/temporal/-$$Lambda$TemporalAdjusters$A9OZwfMlHD1vy7-nYt5NssACu7Q;->adjustInto(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;
 HSPLjava/time/temporal/ChronoField;->checkValidIntValue(J)I
 HSPLjava/time/temporal/ChronoField;->checkValidValue(J)J
-HPLjava/time/temporal/ChronoField;->isDateBased()Z
-HPLjava/time/temporal/ChronoField;->isTimeBased()Z
+HSPLjava/time/temporal/ChronoField;->isTimeBased()Z
 HSPLjava/time/temporal/ChronoField;->range()Ljava/time/temporal/ValueRange;
-PLjava/time/temporal/ChronoField;->values()[Ljava/time/temporal/ChronoField;
-HSPLjava/time/temporal/ChronoUnit;->getDuration()Ljava/time/Duration;
-PLjava/time/temporal/ChronoUnit;->values()[Ljava/time/temporal/ChronoUnit;
-PLjava/time/temporal/TemporalAccessor;->get(Ljava/time/temporal/TemporalField;)I
-PLjava/time/temporal/TemporalAccessor;->range(Ljava/time/temporal/TemporalField;)Ljava/time/temporal/ValueRange;
-PLjava/time/temporal/TemporalField;->resolve(Ljava/util/Map;Ljava/time/temporal/TemporalAccessor;Ljava/time/format/ResolverStyle;)Ljava/time/temporal/TemporalAccessor;
+HSPLjava/time/temporal/TemporalAdjusters;->lambda$nextOrSame$10(ILjava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;
+HSPLjava/time/temporal/TemporalAdjusters;->nextOrSame(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;
 HSPLjava/time/temporal/TemporalQueries;->chronology()Ljava/time/temporal/TemporalQuery;
-PLjava/time/temporal/TemporalQueries;->lambda$static$4(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneId;
-HSPLjava/time/temporal/TemporalQueries;->localDate()Ljava/time/temporal/TemporalQuery;
 HSPLjava/time/temporal/TemporalQueries;->localTime()Ljava/time/temporal/TemporalQuery;
 HSPLjava/time/temporal/TemporalQueries;->offset()Ljava/time/temporal/TemporalQuery;
-HSPLjava/time/temporal/TemporalQueries;->precision()Ljava/time/temporal/TemporalQuery;
 HSPLjava/time/temporal/TemporalQueries;->zone()Ljava/time/temporal/TemporalQuery;
 HSPLjava/time/temporal/TemporalQueries;->zoneId()Ljava/time/temporal/TemporalQuery;
-HPLjava/time/temporal/ValueRange;-><init>(JJJJ)V
 HSPLjava/time/temporal/ValueRange;->checkValidIntValue(JLjava/time/temporal/TemporalField;)I
 HSPLjava/time/temporal/ValueRange;->checkValidValue(JLjava/time/temporal/TemporalField;)J
 HSPLjava/time/temporal/ValueRange;->getMaximum()J
 HSPLjava/time/temporal/ValueRange;->getMinimum()J
-PLjava/time/temporal/ValueRange;->isFixed()Z
 HSPLjava/time/temporal/ValueRange;->isIntValue()Z
 HSPLjava/time/temporal/ValueRange;->isValidIntValue(J)Z
 HSPLjava/time/temporal/ValueRange;->isValidValue(J)Z
-HPLjava/time/temporal/ValueRange;->of(JJ)Ljava/time/temporal/ValueRange;
 HSPLjava/time/zone/IcuZoneRulesProvider$ZoneRulesCache;->create(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/time/zone/IcuZoneRulesProvider$ZoneRulesCache;->create(Ljava/lang/String;)Ljava/time/zone/ZoneRules;
-HSPLjava/time/zone/IcuZoneRulesProvider;->generateZoneRules(Ljava/lang/String;)Ljava/time/zone/ZoneRules;
-HSPLjava/time/zone/IcuZoneRulesProvider;->millisToOffset(I)Ljava/time/ZoneOffset;
 HSPLjava/time/zone/IcuZoneRulesProvider;->provideRules(Ljava/lang/String;Z)Ljava/time/zone/ZoneRules;
-HSPLjava/time/zone/IcuZoneRulesProvider;->verify(ZLjava/lang/String;Ljava/lang/String;)V
-HSPLjava/time/zone/ZoneOffsetTransition;-><init>(JLjava/time/ZoneOffset;Ljava/time/ZoneOffset;)V
+HSPLjava/time/zone/ZoneOffsetTransition;-><init>(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)V
 HSPLjava/time/zone/ZoneOffsetTransition;->getDateTimeAfter()Ljava/time/LocalDateTime;
 HSPLjava/time/zone/ZoneOffsetTransition;->getDateTimeBefore()Ljava/time/LocalDateTime;
 HSPLjava/time/zone/ZoneOffsetTransition;->getDurationSeconds()I
@@ -39029,28 +18604,18 @@
 HSPLjava/time/zone/ZoneOffsetTransition;->getOffsetBefore()Ljava/time/ZoneOffset;
 HSPLjava/time/zone/ZoneOffsetTransition;->isGap()Z
 HSPLjava/time/zone/ZoneOffsetTransition;->toEpochSecond()J
-PLjava/time/zone/ZoneRules;-><init>(Ljava/time/ZoneOffset;)V
+HSPLjava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;->createDateTime(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)Ljava/time/LocalDateTime;
+HSPLjava/time/zone/ZoneOffsetTransitionRule;-><init>(Ljava/time/Month;ILjava/time/DayOfWeek;Ljava/time/LocalTime;ZLjava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)V
+HSPLjava/time/zone/ZoneOffsetTransitionRule;->createTransition(I)Ljava/time/zone/ZoneOffsetTransition;
+HSPLjava/time/zone/ZoneOffsetTransitionRule;->of(Ljava/time/Month;ILjava/time/DayOfWeek;Ljava/time/LocalTime;ZLjava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)Ljava/time/zone/ZoneOffsetTransitionRule;
 HSPLjava/time/zone/ZoneRules;-><init>(Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V
+HSPLjava/time/zone/ZoneRules;->findTransitionArray(I)[Ljava/time/zone/ZoneOffsetTransition;
+HSPLjava/time/zone/ZoneRules;->findYear(JLjava/time/ZoneOffset;)I
 HSPLjava/time/zone/ZoneRules;->getOffset(Ljava/time/Instant;)Ljava/time/ZoneOffset;
-HPLjava/time/zone/ZoneRules;->getOffsetInfo(Ljava/time/LocalDateTime;)Ljava/lang/Object;
-PLjava/time/zone/ZoneRules;->getValidOffsets(Ljava/time/LocalDateTime;)Ljava/util/List;
-PLjava/time/zone/ZoneRules;->of(Ljava/time/ZoneOffset;)Ljava/time/zone/ZoneRules;
 HSPLjava/time/zone/ZoneRules;->of(Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/time/zone/ZoneRules;
-PLjava/time/zone/ZoneRulesProvider;->getAvailableZoneIds()Ljava/util/Set;
-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;
-HPLjava/util/-$$Lambda$Comparator$4V5k8aLimtS0VsEILEAqQ9UGZYo;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLjava/util/-$$Lambda$Comparator$BZSVCoA8i87ehjxxZ1weEounfDQ;-><init>(Ljava/util/Comparator;Ljava/util/Comparator;)V
-PLjava/util/-$$Lambda$Comparator$BZSVCoA8i87ehjxxZ1weEounfDQ;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLjava/util/-$$Lambda$Comparator$DNgpxUFZqmT4lOBzlVyPjWwvEvw;-><init>(Ljava/util/function/ToIntFunction;)V
-HSPLjava/util/-$$Lambda$Comparator$DNgpxUFZqmT4lOBzlVyPjWwvEvw;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLjava/util/-$$Lambda$Comparator$SPB8K9Yj7Pw1mljm7LpasV7zxWw;-><init>(Ljava/util/function/Function;)V
-HPLjava/util/-$$Lambda$Comparator$SPB8K9Yj7Pw1mljm7LpasV7zxWw;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLjava/util/-$$Lambda$Comparator$edSxqANnwdmzeJ1aMMcwJWE2wII;-><init>(Ljava/util/function/ToDoubleFunction;)V
-PLjava/util/-$$Lambda$Comparator$edSxqANnwdmzeJ1aMMcwJWE2wII;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLjava/util/AbstractCollection;-><init>()V
 HSPLjava/util/AbstractCollection;->addAll(Ljava/util/Collection;)Z
-PLjava/util/AbstractCollection;->clear()V
 HSPLjava/util/AbstractCollection;->contains(Ljava/lang/Object;)Z
 HSPLjava/util/AbstractCollection;->containsAll(Ljava/util/Collection;)Z
 HSPLjava/util/AbstractCollection;->isEmpty()Z
@@ -39066,58 +18631,39 @@
 HSPLjava/util/AbstractList$Itr;->hasNext()Z
 HSPLjava/util/AbstractList$Itr;->next()Ljava/lang/Object;
 HSPLjava/util/AbstractList$ListItr;-><init>(Ljava/util/AbstractList;I)V
-HSPLjava/util/AbstractList$ListItr;->hasPrevious()Z
 HSPLjava/util/AbstractList$ListItr;->nextIndex()I
-HSPLjava/util/AbstractList$ListItr;->previous()Ljava/lang/Object;
-PLjava/util/AbstractList$ListItr;->previousIndex()I
+HSPLjava/util/AbstractList$SubList;-><init>(Ljava/util/AbstractList;II)V
+HSPLjava/util/AbstractList$SubList;->checkForComodification()V
 HSPLjava/util/AbstractList;-><init>()V
 HSPLjava/util/AbstractList;->add(Ljava/lang/Object;)Z
 HSPLjava/util/AbstractList;->clear()V
 HSPLjava/util/AbstractList;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/AbstractList;->hashCode()I
-HPLjava/util/AbstractList;->indexOf(Ljava/lang/Object;)I
 HSPLjava/util/AbstractList;->iterator()Ljava/util/Iterator;
 HSPLjava/util/AbstractList;->listIterator()Ljava/util/ListIterator;
 HSPLjava/util/AbstractList;->listIterator(I)Ljava/util/ListIterator;
 HSPLjava/util/AbstractList;->rangeCheckForAdd(I)V
 HSPLjava/util/AbstractList;->subList(II)Ljava/util/List;
-HPLjava/util/AbstractMap$2$1;-><init>(Ljava/util/AbstractMap$2;)V
-PLjava/util/AbstractMap$2$1;->hasNext()Z
-PLjava/util/AbstractMap$2$1;->next()Ljava/lang/Object;
-HPLjava/util/AbstractMap$2;-><init>(Ljava/util/AbstractMap;)V
-HPLjava/util/AbstractMap$2;->isEmpty()Z
-PLjava/util/AbstractMap$2;->iterator()Ljava/util/Iterator;
-HSPLjava/util/AbstractMap$SimpleEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
-HPLjava/util/AbstractMap$SimpleEntry;->equals(Ljava/lang/Object;)Z
-HSPLjava/util/AbstractMap$SimpleEntry;->getKey()Ljava/lang/Object;
-HSPLjava/util/AbstractMap$SimpleEntry;->getValue()Ljava/lang/Object;
-HPLjava/util/AbstractMap$SimpleEntry;->hashCode()I
+HSPLjava/util/AbstractList;->subListRangeCheck(III)V
 HSPLjava/util/AbstractMap$SimpleImmutableEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLjava/util/AbstractMap$SimpleImmutableEntry;-><init>(Ljava/util/Map$Entry;)V
-HSPLjava/util/AbstractMap$SimpleImmutableEntry;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/AbstractMap$SimpleImmutableEntry;->getKey()Ljava/lang/Object;
 HSPLjava/util/AbstractMap$SimpleImmutableEntry;->getValue()Ljava/lang/Object;
 HSPLjava/util/AbstractMap$SimpleImmutableEntry;->hashCode()I
 HSPLjava/util/AbstractMap;-><init>()V
-HSPLjava/util/AbstractMap;->access$000(Ljava/lang/Object;Ljava/lang/Object;)Z
 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
 HSPLjava/util/AbstractMap;->hashCode()I
 HSPLjava/util/AbstractMap;->isEmpty()Z
 HSPLjava/util/AbstractMap;->putAll(Ljava/util/Map;)V
-HPLjava/util/AbstractMap;->size()I
 HSPLjava/util/AbstractMap;->toString()Ljava/lang/String;
-PLjava/util/AbstractMap;->values()Ljava/util/Collection;
 HSPLjava/util/AbstractQueue;-><init>()V
 HSPLjava/util/AbstractQueue;->add(Ljava/lang/Object;)Z
-HPLjava/util/AbstractQueue;->addAll(Ljava/util/Collection;)Z
 HSPLjava/util/AbstractQueue;->clear()V
 HSPLjava/util/AbstractQueue;->remove()Ljava/lang/Object;
 HSPLjava/util/AbstractSequentialList;-><init>()V
 HSPLjava/util/AbstractSequentialList;->iterator()Ljava/util/Iterator;
-HPLjava/util/AbstractSequentialList;->remove(I)Ljava/lang/Object;
 HSPLjava/util/AbstractSet;-><init>()V
 HSPLjava/util/AbstractSet;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/AbstractSet;->hashCode()I
@@ -39130,7 +18676,6 @@
 HSPLjava/util/ArrayDeque$DescendingIterator;-><init>(Ljava/util/ArrayDeque;)V
 HSPLjava/util/ArrayDeque$DescendingIterator;-><init>(Ljava/util/ArrayDeque;Ljava/util/ArrayDeque$1;)V
 HSPLjava/util/ArrayDeque$DescendingIterator;->hasNext()Z
-HSPLjava/util/ArrayDeque$DescendingIterator;->next()Ljava/lang/Object;
 HSPLjava/util/ArrayDeque;-><init>()V
 HSPLjava/util/ArrayDeque;-><init>(I)V
 HSPLjava/util/ArrayDeque;-><init>(Ljava/util/Collection;)V
@@ -39145,11 +18690,9 @@
 HSPLjava/util/ArrayDeque;->descendingIterator()Ljava/util/Iterator;
 HSPLjava/util/ArrayDeque;->doubleCapacity()V
 HSPLjava/util/ArrayDeque;->getFirst()Ljava/lang/Object;
-HSPLjava/util/ArrayDeque;->getLast()Ljava/lang/Object;
 HSPLjava/util/ArrayDeque;->isEmpty()Z
 HSPLjava/util/ArrayDeque;->iterator()Ljava/util/Iterator;
 HSPLjava/util/ArrayDeque;->offer(Ljava/lang/Object;)Z
-HSPLjava/util/ArrayDeque;->offerFirst(Ljava/lang/Object;)Z
 HSPLjava/util/ArrayDeque;->offerLast(Ljava/lang/Object;)Z
 HSPLjava/util/ArrayDeque;->peek()Ljava/lang/Object;
 HSPLjava/util/ArrayDeque;->peekFirst()Ljava/lang/Object;
@@ -39166,7 +18709,6 @@
 HSPLjava/util/ArrayDeque;->removeLast()Ljava/lang/Object;
 HSPLjava/util/ArrayDeque;->size()I
 HSPLjava/util/ArrayDeque;->toArray()[Ljava/lang/Object;
-HPLjava/util/ArrayDeque;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/ArrayList$ArrayListSpliterator;-><init>(Ljava/util/ArrayList;III)V
 HSPLjava/util/ArrayList$ArrayListSpliterator;->characteristics()I
 HSPLjava/util/ArrayList$ArrayListSpliterator;->estimateSize()J
@@ -39180,9 +18722,7 @@
 HSPLjava/util/ArrayList$Itr;->remove()V
 HSPLjava/util/ArrayList$ListItr;-><init>(Ljava/util/ArrayList;I)V
 HSPLjava/util/ArrayList$ListItr;->hasPrevious()Z
-HSPLjava/util/ArrayList$ListItr;->nextIndex()I
 HSPLjava/util/ArrayList$ListItr;->previous()Ljava/lang/Object;
-HSPLjava/util/ArrayList$ListItr;->set(Ljava/lang/Object;)V
 HSPLjava/util/ArrayList$SubList$1;-><init>(Ljava/util/ArrayList$SubList;II)V
 HSPLjava/util/ArrayList$SubList$1;->hasNext()Z
 HSPLjava/util/ArrayList$SubList$1;->next()Ljava/lang/Object;
@@ -39192,7 +18732,6 @@
 HSPLjava/util/ArrayList$SubList;->listIterator(I)Ljava/util/ListIterator;
 HSPLjava/util/ArrayList$SubList;->removeRange(II)V
 HSPLjava/util/ArrayList$SubList;->size()I
-HSPLjava/util/ArrayList$SubList;->subList(II)Ljava/util/List;
 HSPLjava/util/ArrayList;-><init>()V
 HSPLjava/util/ArrayList;-><init>(I)V
 HSPLjava/util/ArrayList;-><init>(Ljava/util/Collection;)V
@@ -39215,16 +18754,14 @@
 HSPLjava/util/ArrayList;->indexOf(Ljava/lang/Object;)I
 HSPLjava/util/ArrayList;->isEmpty()Z
 HSPLjava/util/ArrayList;->iterator()Ljava/util/Iterator;
-HSPLjava/util/ArrayList;->lastIndexOf(Ljava/lang/Object;)I
 HSPLjava/util/ArrayList;->listIterator()Ljava/util/ListIterator;
 HSPLjava/util/ArrayList;->listIterator(I)Ljava/util/ListIterator;
 HSPLjava/util/ArrayList;->readObject(Ljava/io/ObjectInputStream;)V
 HSPLjava/util/ArrayList;->remove(I)Ljava/lang/Object;
 HSPLjava/util/ArrayList;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/ArrayList;->removeAll(Ljava/util/Collection;)Z
-HPLjava/util/ArrayList;->removeIf(Ljava/util/function/Predicate;)Z
+HSPLjava/util/ArrayList;->removeIf(Ljava/util/function/Predicate;)Z
 HSPLjava/util/ArrayList;->removeRange(II)V
-HSPLjava/util/ArrayList;->retainAll(Ljava/util/Collection;)Z
 HSPLjava/util/ArrayList;->set(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/ArrayList;->size()I
 HSPLjava/util/ArrayList;->sort(Ljava/util/Comparator;)V
@@ -39239,19 +18776,14 @@
 HSPLjava/util/Arrays$ArrayList;->contains(Ljava/lang/Object;)Z
 HSPLjava/util/Arrays$ArrayList;->get(I)Ljava/lang/Object;
 HSPLjava/util/Arrays$ArrayList;->indexOf(Ljava/lang/Object;)I
-HSPLjava/util/Arrays$ArrayList;->set(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Arrays$ArrayList;->size()I
-HSPLjava/util/Arrays$ArrayList;->sort(Ljava/util/Comparator;)V
-PLjava/util/Arrays$ArrayList;->spliterator()Ljava/util/Spliterator;
 HSPLjava/util/Arrays$ArrayList;->toArray()[Ljava/lang/Object;
 HSPLjava/util/Arrays$ArrayList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/Arrays;->asList([Ljava/lang/Object;)Ljava/util/List;
 HSPLjava/util/Arrays;->binarySearch([CC)I
 HSPLjava/util/Arrays;->binarySearch([II)I
 HSPLjava/util/Arrays;->binarySearch([IIII)I
-HSPLjava/util/Arrays;->binarySearch([JIIJ)I
 HSPLjava/util/Arrays;->binarySearch([JJ)I
-PLjava/util/Arrays;->binarySearch([Ljava/lang/Object;IILjava/lang/Object;Ljava/util/Comparator;)I
 HSPLjava/util/Arrays;->binarySearch([Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLjava/util/Arrays;->binarySearch([Ljava/lang/Object;Ljava/lang/Object;Ljava/util/Comparator;)I
 HSPLjava/util/Arrays;->binarySearch0([CIIC)I
@@ -39267,133 +18799,85 @@
 HSPLjava/util/Arrays;->copyOf([JI)[J
 HSPLjava/util/Arrays;->copyOf([Ljava/lang/Object;I)[Ljava/lang/Object;
 HSPLjava/util/Arrays;->copyOf([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object;
-HPLjava/util/Arrays;->copyOf([ZI)[Z
 HSPLjava/util/Arrays;->copyOfRange([BII)[B
 HSPLjava/util/Arrays;->copyOfRange([CII)[C
-HSPLjava/util/Arrays;->copyOfRange([III)[I
-HPLjava/util/Arrays;->copyOfRange([JII)[J
 HSPLjava/util/Arrays;->copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;
 HSPLjava/util/Arrays;->copyOfRange([Ljava/lang/Object;IILjava/lang/Class;)[Ljava/lang/Object;
-HSPLjava/util/Arrays;->deepEquals([Ljava/lang/Object;[Ljava/lang/Object;)Z
-HSPLjava/util/Arrays;->deepEquals0(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLjava/util/Arrays;->deepHashCode([Ljava/lang/Object;)I
 HSPLjava/util/Arrays;->deepToString([Ljava/lang/Object;)Ljava/lang/String;
 HSPLjava/util/Arrays;->deepToString([Ljava/lang/Object;Ljava/lang/StringBuilder;Ljava/util/Set;)V
 HSPLjava/util/Arrays;->equals([B[B)Z
-HSPLjava/util/Arrays;->equals([F[F)Z
 HSPLjava/util/Arrays;->equals([I[I)Z
-HSPLjava/util/Arrays;->equals([J[J)Z
 HSPLjava/util/Arrays;->equals([Ljava/lang/Object;[Ljava/lang/Object;)Z
-PLjava/util/Arrays;->equals([Z[Z)Z
 HSPLjava/util/Arrays;->fill([BB)V
 HSPLjava/util/Arrays;->fill([BIIB)V
 HSPLjava/util/Arrays;->fill([CC)V
 HSPLjava/util/Arrays;->fill([CIIC)V
-HSPLjava/util/Arrays;->fill([DD)V
 HSPLjava/util/Arrays;->fill([FF)V
-HPLjava/util/Arrays;->fill([FIIF)V
 HSPLjava/util/Arrays;->fill([II)V
 HSPLjava/util/Arrays;->fill([IIII)V
-PLjava/util/Arrays;->fill([JIIJ)V
 HSPLjava/util/Arrays;->fill([JJ)V
 HSPLjava/util/Arrays;->fill([Ljava/lang/Object;IILjava/lang/Object;)V
 HSPLjava/util/Arrays;->fill([Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLjava/util/Arrays;->fill([SS)V
-HSPLjava/util/Arrays;->fill([ZIIZ)V
 HSPLjava/util/Arrays;->fill([ZZ)V
 HSPLjava/util/Arrays;->hashCode([B)I
+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;->rangeCheck(III)V
 HSPLjava/util/Arrays;->sort([C)V
-PLjava/util/Arrays;->sort([F)V
 HSPLjava/util/Arrays;->sort([I)V
-HSPLjava/util/Arrays;->sort([III)V
 HSPLjava/util/Arrays;->sort([J)V
 HSPLjava/util/Arrays;->sort([Ljava/lang/Object;)V
 HSPLjava/util/Arrays;->sort([Ljava/lang/Object;II)V
 HSPLjava/util/Arrays;->sort([Ljava/lang/Object;IILjava/util/Comparator;)V
 HSPLjava/util/Arrays;->sort([Ljava/lang/Object;Ljava/util/Comparator;)V
-HSPLjava/util/Arrays;->spliterator([III)Ljava/util/Spliterator$OfInt;
 HSPLjava/util/Arrays;->spliterator([Ljava/lang/Object;II)Ljava/util/Spliterator;
-HSPLjava/util/Arrays;->stream([I)Ljava/util/stream/IntStream;
-HSPLjava/util/Arrays;->stream([III)Ljava/util/stream/IntStream;
 HSPLjava/util/Arrays;->stream([Ljava/lang/Object;)Ljava/util/stream/Stream;
 HSPLjava/util/Arrays;->stream([Ljava/lang/Object;II)Ljava/util/stream/Stream;
 HSPLjava/util/Arrays;->toString([B)Ljava/lang/String;
-HPLjava/util/Arrays;->toString([D)Ljava/lang/String;
-HPLjava/util/Arrays;->toString([F)Ljava/lang/String;
 HSPLjava/util/Arrays;->toString([I)Ljava/lang/String;
-HSPLjava/util/Arrays;->toString([J)Ljava/lang/String;
 HSPLjava/util/Arrays;->toString([Ljava/lang/Object;)Ljava/lang/String;
-HSPLjava/util/Arrays;->toString([Z)Ljava/lang/String;
 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;->outLength([BII)I
-HSPLjava/util/Base64$Encoder;->encode([B)[B
-HSPLjava/util/Base64$Encoder;->encode0([BII[B)I
-HSPLjava/util/Base64$Encoder;->encodeToString([B)Ljava/lang/String;
-HSPLjava/util/Base64$Encoder;->outLength(I)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;
 HSPLjava/util/BitSet;-><init>()V
 HSPLjava/util/BitSet;-><init>(I)V
-HPLjava/util/BitSet;-><init>([J)V
-HSPLjava/util/BitSet;->andNot(Ljava/util/BitSet;)V
 HSPLjava/util/BitSet;->cardinality()I
 HSPLjava/util/BitSet;->checkInvariants()V
 HSPLjava/util/BitSet;->checkRange(II)V
 HSPLjava/util/BitSet;->clear()V
 HSPLjava/util/BitSet;->clear(I)V
-HPLjava/util/BitSet;->clear(II)V
 HSPLjava/util/BitSet;->clone()Ljava/lang/Object;
 HSPLjava/util/BitSet;->ensureCapacity(I)V
-HPLjava/util/BitSet;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/BitSet;->expandTo(I)V
-HPLjava/util/BitSet;->flip(II)V
 HSPLjava/util/BitSet;->get(I)Z
 HSPLjava/util/BitSet;->initWords(I)V
-HSPLjava/util/BitSet;->intersects(Ljava/util/BitSet;)Z
 HSPLjava/util/BitSet;->isEmpty()Z
-HPLjava/util/BitSet;->length()I
+HSPLjava/util/BitSet;->length()I
 HSPLjava/util/BitSet;->nextClearBit(I)I
 HSPLjava/util/BitSet;->nextSetBit(I)I
 HSPLjava/util/BitSet;->or(Ljava/util/BitSet;)V
 HSPLjava/util/BitSet;->recalculateWordsInUse()V
 HSPLjava/util/BitSet;->set(I)V
 HSPLjava/util/BitSet;->set(II)V
-HPLjava/util/BitSet;->set(IIZ)V
 HSPLjava/util/BitSet;->set(IZ)V
-PLjava/util/BitSet;->size()I
-HPLjava/util/BitSet;->toByteArray()[B
-HSPLjava/util/BitSet;->toString()Ljava/lang/String;
-HSPLjava/util/BitSet;->trimToSize()V
-HPLjava/util/BitSet;->valueOf(Ljava/nio/ByteBuffer;)Ljava/util/BitSet;
-PLjava/util/BitSet;->valueOf([B)Ljava/util/BitSet;
-PLjava/util/BitSet;->valueOf([J)Ljava/util/BitSet;
 HSPLjava/util/BitSet;->wordIndex(I)I
 HSPLjava/util/Calendar;-><init>()V
 HSPLjava/util/Calendar;-><init>(Ljava/util/TimeZone;Ljava/util/Locale;)V
-PLjava/util/Calendar;->after(Ljava/lang/Object;)Z
 HSPLjava/util/Calendar;->aggregateStamp(II)I
-PLjava/util/Calendar;->before(Ljava/lang/Object;)Z
 HSPLjava/util/Calendar;->clear()V
-HPLjava/util/Calendar;->clear(I)V
-HPLjava/util/Calendar;->clone()Ljava/lang/Object;
-PLjava/util/Calendar;->compareTo(J)I
-PLjava/util/Calendar;->compareTo(Ljava/util/Calendar;)I
+HSPLjava/util/Calendar;->clone()Ljava/lang/Object;
 HSPLjava/util/Calendar;->complete()V
 HSPLjava/util/Calendar;->createCalendar(Ljava/util/TimeZone;Ljava/util/Locale;)Ljava/util/Calendar;
 HSPLjava/util/Calendar;->get(I)I
 HSPLjava/util/Calendar;->getFirstDayOfWeek()I
 HSPLjava/util/Calendar;->getInstance()Ljava/util/Calendar;
-HPLjava/util/Calendar;->getInstance(Ljava/util/Locale;)Ljava/util/Calendar;
 HSPLjava/util/Calendar;->getInstance(Ljava/util/TimeZone;)Ljava/util/Calendar;
 HSPLjava/util/Calendar;->getInstance(Ljava/util/TimeZone;Ljava/util/Locale;)Ljava/util/Calendar;
-HPLjava/util/Calendar;->getMillisOf(Ljava/util/Calendar;)J
 HSPLjava/util/Calendar;->getMinimalDaysInFirstWeek()I
 HSPLjava/util/Calendar;->getSetStateFields()I
 HSPLjava/util/Calendar;->getTime()Ljava/util/Date;
@@ -39402,7 +18886,6 @@
 HSPLjava/util/Calendar;->getZone()Ljava/util/TimeZone;
 HSPLjava/util/Calendar;->internalGet(I)I
 HSPLjava/util/Calendar;->internalSet(II)V
-HSPLjava/util/Calendar;->isExternallySet(I)Z
 HSPLjava/util/Calendar;->isFieldSet(II)Z
 HSPLjava/util/Calendar;->isLenient()Z
 HSPLjava/util/Calendar;->isPartiallyNormalized()Z
@@ -39434,28 +18917,21 @@
 HSPLjava/util/Collections$CopiesList;->toArray()[Ljava/lang/Object;
 HSPLjava/util/Collections$EmptyEnumeration;->hasMoreElements()Z
 HSPLjava/util/Collections$EmptyIterator;->hasNext()Z
-HSPLjava/util/Collections$EmptyList;->contains(Ljava/lang/Object;)Z
-HSPLjava/util/Collections$EmptyList;->containsAll(Ljava/util/Collection;)Z
 HSPLjava/util/Collections$EmptyList;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/Collections$EmptyList;->isEmpty()Z
 HSPLjava/util/Collections$EmptyList;->iterator()Ljava/util/Iterator;
-PLjava/util/Collections$EmptyList;->listIterator()Ljava/util/ListIterator;
+HSPLjava/util/Collections$EmptyList;->listIterator()Ljava/util/ListIterator;
 HSPLjava/util/Collections$EmptyList;->readResolve()Ljava/lang/Object;
 HSPLjava/util/Collections$EmptyList;->size()I
 HSPLjava/util/Collections$EmptyList;->toArray()[Ljava/lang/Object;
-PLjava/util/Collections$EmptyList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
-HSPLjava/util/Collections$EmptyMap;->containsKey(Ljava/lang/Object;)Z
-HSPLjava/util/Collections$EmptyMap;->containsValue(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$EmptyList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/Collections$EmptyMap;->entrySet()Ljava/util/Set;
-HSPLjava/util/Collections$EmptyMap;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/Collections$EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/Collections$EmptyMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Collections$EmptyMap;->isEmpty()Z
 HSPLjava/util/Collections$EmptyMap;->keySet()Ljava/util/Set;
 HSPLjava/util/Collections$EmptyMap;->size()I
 HSPLjava/util/Collections$EmptyMap;->values()Ljava/util/Collection;
 HSPLjava/util/Collections$EmptySet;->contains(Ljava/lang/Object;)Z
-HSPLjava/util/Collections$EmptySet;->containsAll(Ljava/util/Collection;)Z
 HSPLjava/util/Collections$EmptySet;->isEmpty()Z
 HSPLjava/util/Collections$EmptySet;->iterator()Ljava/util/Iterator;
 HSPLjava/util/Collections$EmptySet;->size()I
@@ -39473,7 +18949,6 @@
 HSPLjava/util/Collections$SetFromMap;->iterator()Ljava/util/Iterator;
 HSPLjava/util/Collections$SetFromMap;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/Collections$SetFromMap;->size()I
-HPLjava/util/Collections$SetFromMap;->stream()Ljava/util/stream/Stream;
 HSPLjava/util/Collections$SetFromMap;->toArray()[Ljava/lang/Object;
 HSPLjava/util/Collections$SetFromMap;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/Collections$SingletonList;-><init>(Ljava/lang/Object;)V
@@ -39482,13 +18957,10 @@
 HSPLjava/util/Collections$SingletonList;->iterator()Ljava/util/Iterator;
 HSPLjava/util/Collections$SingletonList;->size()I
 HSPLjava/util/Collections$SingletonMap;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLjava/util/Collections$SingletonMap;->containsKey(Ljava/lang/Object;)Z
 HSPLjava/util/Collections$SingletonMap;->entrySet()Ljava/util/Set;
 HSPLjava/util/Collections$SingletonMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/Collections$SingletonMap;->isEmpty()Z
 HSPLjava/util/Collections$SingletonMap;->keySet()Ljava/util/Set;
 HSPLjava/util/Collections$SingletonMap;->size()I
-HSPLjava/util/Collections$SingletonMap;->values()Ljava/util/Collection;
 HSPLjava/util/Collections$SingletonSet;-><init>(Ljava/lang/Object;)V
 HSPLjava/util/Collections$SingletonSet;->contains(Ljava/lang/Object;)Z
 HSPLjava/util/Collections$SingletonSet;->iterator()Ljava/util/Iterator;
@@ -39496,41 +18968,28 @@
 HSPLjava/util/Collections$SynchronizedCollection;-><init>(Ljava/util/Collection;)V
 HSPLjava/util/Collections$SynchronizedCollection;-><init>(Ljava/util/Collection;Ljava/lang/Object;)V
 HSPLjava/util/Collections$SynchronizedCollection;->add(Ljava/lang/Object;)Z
-HSPLjava/util/Collections$SynchronizedCollection;->addAll(Ljava/util/Collection;)Z
 HSPLjava/util/Collections$SynchronizedCollection;->clear()V
 HSPLjava/util/Collections$SynchronizedCollection;->contains(Ljava/lang/Object;)Z
 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
-HPLjava/util/Collections$SynchronizedCollection;->stream()Ljava/util/stream/Stream;
 HSPLjava/util/Collections$SynchronizedCollection;->toArray()[Ljava/lang/Object;
 HSPLjava/util/Collections$SynchronizedCollection;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/Collections$SynchronizedList;-><init>(Ljava/util/List;)V
-HSPLjava/util/Collections$SynchronizedList;->add(ILjava/lang/Object;)V
-HSPLjava/util/Collections$SynchronizedList;->get(I)Ljava/lang/Object;
-HSPLjava/util/Collections$SynchronizedList;->remove(I)Ljava/lang/Object;
-HPLjava/util/Collections$SynchronizedList;->set(ILjava/lang/Object;)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
-HSPLjava/util/Collections$SynchronizedMap;->entrySet()Ljava/util/Set;
 HSPLjava/util/Collections$SynchronizedMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-PLjava/util/Collections$SynchronizedMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Collections$SynchronizedMap;->isEmpty()Z
-HSPLjava/util/Collections$SynchronizedMap;->keySet()Ljava/util/Set;
 HSPLjava/util/Collections$SynchronizedMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/Collections$SynchronizedMap;->putAll(Ljava/util/Map;)V
 HSPLjava/util/Collections$SynchronizedMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Collections$SynchronizedMap;->size()I
 HSPLjava/util/Collections$SynchronizedMap;->values()Ljava/util/Collection;
 HSPLjava/util/Collections$SynchronizedRandomAccessList;-><init>(Ljava/util/List;)V
 HSPLjava/util/Collections$SynchronizedSet;-><init>(Ljava/util/Set;)V
 HSPLjava/util/Collections$SynchronizedSet;-><init>(Ljava/util/Set;Ljava/lang/Object;)V
-HPLjava/util/Collections$SynchronizedSet;->equals(Ljava/lang/Object;)Z
-HSPLjava/util/Collections$SynchronizedSortedMap;-><init>(Ljava/util/SortedMap;)V
-HSPLjava/util/Collections$SynchronizedSortedMap;->comparator()Ljava/util/Comparator;
-HSPLjava/util/Collections$SynchronizedSortedSet;-><init>(Ljava/util/SortedSet;)V
+HSPLjava/util/Collections$SynchronizedSet;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/Collections$UnmodifiableCollection$1;-><init>(Ljava/util/Collections$UnmodifiableCollection;)V
 HSPLjava/util/Collections$UnmodifiableCollection$1;->hasNext()Z
 HSPLjava/util/Collections$UnmodifiableCollection$1;->next()Ljava/lang/Object;
@@ -39540,19 +18999,16 @@
 HSPLjava/util/Collections$UnmodifiableCollection;->isEmpty()Z
 HSPLjava/util/Collections$UnmodifiableCollection;->iterator()Ljava/util/Iterator;
 HSPLjava/util/Collections$UnmodifiableCollection;->size()I
-HSPLjava/util/Collections$UnmodifiableCollection;->stream()Ljava/util/stream/Stream;
 HSPLjava/util/Collections$UnmodifiableCollection;->toArray()[Ljava/lang/Object;
 HSPLjava/util/Collections$UnmodifiableCollection;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/Collections$UnmodifiableCollection;->toString()Ljava/lang/String;
 HSPLjava/util/Collections$UnmodifiableList$1;-><init>(Ljava/util/Collections$UnmodifiableList;I)V
 HSPLjava/util/Collections$UnmodifiableList$1;->hasNext()Z
 HSPLjava/util/Collections$UnmodifiableList$1;->next()Ljava/lang/Object;
-HSPLjava/util/Collections$UnmodifiableList$1;->nextIndex()I
 HSPLjava/util/Collections$UnmodifiableList;-><init>(Ljava/util/List;)V
 HSPLjava/util/Collections$UnmodifiableList;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/Collections$UnmodifiableList;->get(I)Ljava/lang/Object;
 HSPLjava/util/Collections$UnmodifiableList;->hashCode()I
-HSPLjava/util/Collections$UnmodifiableList;->indexOf(Ljava/lang/Object;)I
 HSPLjava/util/Collections$UnmodifiableList;->listIterator()Ljava/util/ListIterator;
 HSPLjava/util/Collections$UnmodifiableList;->listIterator(I)Ljava/util/ListIterator;
 HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;-><init>(Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;)V
@@ -39573,13 +19029,11 @@
 HSPLjava/util/Collections$UnmodifiableMap;->isEmpty()Z
 HSPLjava/util/Collections$UnmodifiableMap;->keySet()Ljava/util/Set;
 HSPLjava/util/Collections$UnmodifiableMap;->size()I
-HSPLjava/util/Collections$UnmodifiableMap;->toString()Ljava/lang/String;
 HSPLjava/util/Collections$UnmodifiableMap;->values()Ljava/util/Collection;
 HSPLjava/util/Collections$UnmodifiableRandomAccessList;-><init>(Ljava/util/List;)V
 HSPLjava/util/Collections$UnmodifiableRandomAccessList;->subList(II)Ljava/util/List;
 HSPLjava/util/Collections$UnmodifiableSet;-><init>(Ljava/util/Set;)V
 HSPLjava/util/Collections$UnmodifiableSet;->equals(Ljava/lang/Object;)Z
-HSPLjava/util/Collections$UnmodifiableSet;->hashCode()I
 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
@@ -39589,23 +19043,18 @@
 HSPLjava/util/Collections;->emptyEnumeration()Ljava/util/Enumeration;
 HSPLjava/util/Collections;->emptyIterator()Ljava/util/Iterator;
 HSPLjava/util/Collections;->emptyList()Ljava/util/List;
-PLjava/util/Collections;->emptyListIterator()Ljava/util/ListIterator;
+HSPLjava/util/Collections;->emptyListIterator()Ljava/util/ListIterator;
 HSPLjava/util/Collections;->emptyMap()Ljava/util/Map;
 HSPLjava/util/Collections;->emptySet()Ljava/util/Set;
 HSPLjava/util/Collections;->enumeration(Ljava/util/Collection;)Ljava/util/Enumeration;
 HSPLjava/util/Collections;->eq(Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLjava/util/Collections;->indexedBinarySearch(Ljava/util/List;Ljava/lang/Object;)I
 HSPLjava/util/Collections;->indexedBinarySearch(Ljava/util/List;Ljava/lang/Object;Ljava/util/Comparator;)I
-HSPLjava/util/Collections;->list(Ljava/util/Enumeration;)Ljava/util/ArrayList;
-HPLjava/util/Collections;->max(Ljava/util/Collection;)Ljava/lang/Object;
-HSPLjava/util/Collections;->max(Ljava/util/Collection;Ljava/util/Comparator;)Ljava/lang/Object;
-HSPLjava/util/Collections;->min(Ljava/util/Collection;Ljava/util/Comparator;)Ljava/lang/Object;
 HSPLjava/util/Collections;->nCopies(ILjava/lang/Object;)Ljava/util/List;
 HSPLjava/util/Collections;->newSetFromMap(Ljava/util/Map;)Ljava/util/Set;
 HSPLjava/util/Collections;->reverse(Ljava/util/List;)V
 HSPLjava/util/Collections;->reverseOrder()Ljava/util/Comparator;
 HSPLjava/util/Collections;->reverseOrder(Ljava/util/Comparator;)Ljava/util/Comparator;
-PLjava/util/Collections;->shuffle(Ljava/util/List;)V
 HSPLjava/util/Collections;->shuffle(Ljava/util/List;Ljava/util/Random;)V
 HSPLjava/util/Collections;->singleton(Ljava/lang/Object;)Ljava/util/Set;
 HSPLjava/util/Collections;->singletonIterator(Ljava/lang/Object;)Ljava/util/Iterator;
@@ -39620,8 +19069,6 @@
 HSPLjava/util/Collections;->synchronizedMap(Ljava/util/Map;)Ljava/util/Map;
 HSPLjava/util/Collections;->synchronizedSet(Ljava/util/Set;)Ljava/util/Set;
 HSPLjava/util/Collections;->synchronizedSet(Ljava/util/Set;Ljava/lang/Object;)Ljava/util/Set;
-HSPLjava/util/Collections;->synchronizedSortedMap(Ljava/util/SortedMap;)Ljava/util/SortedMap;
-HSPLjava/util/Collections;->synchronizedSortedSet(Ljava/util/SortedSet;)Ljava/util/SortedSet;
 HSPLjava/util/Collections;->unmodifiableCollection(Ljava/util/Collection;)Ljava/util/Collection;
 HSPLjava/util/Collections;->unmodifiableList(Ljava/util/List;)Ljava/util/List;
 HSPLjava/util/Collections;->unmodifiableMap(Ljava/util/Map;)Ljava/util/Map;
@@ -39643,19 +19090,7 @@
 HSPLjava/util/ComparableTimSort;->pushRun(II)V
 HSPLjava/util/ComparableTimSort;->reverseRange([Ljava/lang/Object;II)V
 HSPLjava/util/ComparableTimSort;->sort([Ljava/lang/Object;II[Ljava/lang/Object;II)V
-PLjava/util/Comparator;->comparing(Ljava/util/function/Function;)Ljava/util/Comparator;
-PLjava/util/Comparator;->comparingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/Comparator;
 HSPLjava/util/Comparator;->comparingInt(Ljava/util/function/ToIntFunction;)Ljava/util/Comparator;
-PLjava/util/Comparator;->lambda$comparing$77a9974f$1(Ljava/util/function/Function;Ljava/lang/Object;Ljava/lang/Object;)I
-PLjava/util/Comparator;->lambda$comparingDouble$8dcf42ea$1(Ljava/util/function/ToDoubleFunction;Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLjava/util/Comparator;->lambda$comparingInt$7b0bb60$1(Ljava/util/function/ToIntFunction;Ljava/lang/Object;Ljava/lang/Object;)I
-HPLjava/util/Comparator;->lambda$comparingLong$6043328a$1(Ljava/util/function/ToLongFunction;Ljava/lang/Object;Ljava/lang/Object;)I
-PLjava/util/Comparator;->lambda$thenComparing$36697e65$1(Ljava/util/Comparator;Ljava/util/Comparator;Ljava/lang/Object;Ljava/lang/Object;)I
-HPLjava/util/Comparator;->naturalOrder()Ljava/util/Comparator;
-PLjava/util/Comparator;->nullsLast(Ljava/util/Comparator;)Ljava/util/Comparator;
-PLjava/util/Comparator;->reversed()Ljava/util/Comparator;
-PLjava/util/Comparator;->thenComparing(Ljava/util/Comparator;)Ljava/util/Comparator;
-PLjava/util/Comparators$NullComparator;-><init>(ZLjava/util/Comparator;)V
 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;
@@ -39668,30 +19103,17 @@
 HSPLjava/util/Date;->clone()Ljava/lang/Object;
 HSPLjava/util/Date;->compareTo(Ljava/util/Date;)I
 HSPLjava/util/Date;->convertToAbbr(Ljava/lang/StringBuilder;Ljava/lang/String;)Ljava/lang/StringBuilder;
-HSPLjava/util/Date;->equals(Ljava/lang/Object;)Z
-HPLjava/util/Date;->from(Ljava/time/Instant;)Ljava/util/Date;
 HSPLjava/util/Date;->getCalendarSystem(J)Lsun/util/calendar/BaseCalendar;
-HSPLjava/util/Date;->getDate()I
-HSPLjava/util/Date;->getHours()I
 HSPLjava/util/Date;->getMillisOf(Ljava/util/Date;)J
-HSPLjava/util/Date;->getMinutes()I
-HSPLjava/util/Date;->getMonth()I
-HSPLjava/util/Date;->getSeconds()I
 HSPLjava/util/Date;->getTime()J
 HSPLjava/util/Date;->getTimeImpl()J
-HSPLjava/util/Date;->getYear()I
 HSPLjava/util/Date;->normalize()Lsun/util/calendar/BaseCalendar$Date;
-HSPLjava/util/Date;->readObject(Ljava/io/ObjectInputStream;)V
 HSPLjava/util/Date;->setTime(J)V
 HSPLjava/util/Date;->toString()Ljava/lang/String;
-HSPLjava/util/Date;->writeObject(Ljava/io/ObjectOutputStream;)V
 HSPLjava/util/Dictionary;-><init>()V
 HSPLjava/util/DualPivotQuicksort;->doSort([CII[CII)V
-HPLjava/util/DualPivotQuicksort;->doSort([FII[FII)V
 HSPLjava/util/DualPivotQuicksort;->sort([CIIZ)V
 HSPLjava/util/DualPivotQuicksort;->sort([CII[CII)V
-HPLjava/util/DualPivotQuicksort;->sort([FIIZ)V
-HPLjava/util/DualPivotQuicksort;->sort([FII[FII)V
 HSPLjava/util/DualPivotQuicksort;->sort([IIIZ)V
 HSPLjava/util/DualPivotQuicksort;->sort([III[III)V
 HSPLjava/util/DualPivotQuicksort;->sort([JIIZ)V
@@ -39709,33 +19131,19 @@
 HSPLjava/util/EnumMap$EntrySet;-><init>(Ljava/util/EnumMap;)V
 HSPLjava/util/EnumMap$EntrySet;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap$1;)V
 HSPLjava/util/EnumMap$EntrySet;->iterator()Ljava/util/Iterator;
-HSPLjava/util/EnumMap$EntrySet;->size()I
 HSPLjava/util/EnumMap$EnumMapIterator;-><init>(Ljava/util/EnumMap;)V
 HSPLjava/util/EnumMap$EnumMapIterator;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap$1;)V
 HSPLjava/util/EnumMap$EnumMapIterator;->hasNext()Z
 HSPLjava/util/EnumMap$KeyIterator;-><init>(Ljava/util/EnumMap;)V
 HSPLjava/util/EnumMap$KeyIterator;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap$1;)V
-HSPLjava/util/EnumMap$KeyIterator;->next()Ljava/lang/Enum;
-HSPLjava/util/EnumMap$KeyIterator;->next()Ljava/lang/Object;
 HSPLjava/util/EnumMap$KeySet;-><init>(Ljava/util/EnumMap;)V
 HSPLjava/util/EnumMap$KeySet;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap$1;)V
-HSPLjava/util/EnumMap$KeySet;->contains(Ljava/lang/Object;)Z
 HSPLjava/util/EnumMap$KeySet;->iterator()Ljava/util/Iterator;
-HSPLjava/util/EnumMap$KeySet;->size()I
-HPLjava/util/EnumMap$ValueIterator;-><init>(Ljava/util/EnumMap;)V
-HPLjava/util/EnumMap$ValueIterator;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap$1;)V
-HPLjava/util/EnumMap$ValueIterator;->next()Ljava/lang/Object;
-HPLjava/util/EnumMap$Values;-><init>(Ljava/util/EnumMap;)V
-HPLjava/util/EnumMap$Values;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap$1;)V
-HPLjava/util/EnumMap$Values;->iterator()Ljava/util/Iterator;
 HSPLjava/util/EnumMap;-><init>(Ljava/lang/Class;)V
-HPLjava/util/EnumMap;-><init>(Ljava/util/EnumMap;)V
-HSPLjava/util/EnumMap;-><init>(Ljava/util/Map;)V
 HSPLjava/util/EnumMap;->access$1100(Ljava/util/EnumMap;)[Ljava/lang/Enum;
 HSPLjava/util/EnumMap;->access$1200(Ljava/util/EnumMap;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/EnumMap;->access$200(Ljava/util/EnumMap;)I
 HSPLjava/util/EnumMap;->access$600(Ljava/util/EnumMap;)[Ljava/lang/Object;
-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;
@@ -39745,16 +19153,12 @@
 HSPLjava/util/EnumMap;->maskNull(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/EnumMap;->put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/EnumMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLjava/util/EnumMap;->putAll(Ljava/util/Map;)V
-HSPLjava/util/EnumMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/EnumMap;->size()I
 HSPLjava/util/EnumMap;->typeCheck(Ljava/lang/Enum;)V
 HSPLjava/util/EnumMap;->unmaskNull(Ljava/lang/Object;)Ljava/lang/Object;
-HPLjava/util/EnumMap;->values()Ljava/util/Collection;
 HSPLjava/util/EnumSet;-><init>(Ljava/lang/Class;[Ljava/lang/Enum;)V
 HSPLjava/util/EnumSet;->allOf(Ljava/lang/Class;)Ljava/util/EnumSet;
 HSPLjava/util/EnumSet;->clone()Ljava/util/EnumSet;
-HSPLjava/util/EnumSet;->complementOf(Ljava/util/EnumSet;)Ljava/util/EnumSet;
 HSPLjava/util/EnumSet;->copyOf(Ljava/util/Collection;)Ljava/util/EnumSet;
 HSPLjava/util/EnumSet;->copyOf(Ljava/util/EnumSet;)Ljava/util/EnumSet;
 HSPLjava/util/EnumSet;->getUniverse(Ljava/lang/Class;)[Ljava/lang/Enum;
@@ -39762,8 +19166,6 @@
 HSPLjava/util/EnumSet;->of(Ljava/lang/Enum;)Ljava/util/EnumSet;
 HSPLjava/util/EnumSet;->of(Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;
 HSPLjava/util/EnumSet;->of(Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;
-HSPLjava/util/EnumSet;->of(Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;
-HPLjava/util/EnumSet;->of(Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;
 HSPLjava/util/EnumSet;->of(Ljava/lang/Enum;[Ljava/lang/Enum;)Ljava/util/EnumSet;
 HSPLjava/util/EnumSet;->typeCheck(Ljava/lang/Enum;)V
 HSPLjava/util/Formatter$Conversion;->isCharacter(C)Z
@@ -39772,7 +19174,6 @@
 HSPLjava/util/Formatter$Conversion;->isInteger(C)Z
 HSPLjava/util/Formatter$Conversion;->isText(C)Z
 HSPLjava/util/Formatter$Conversion;->isValid(C)Z
-HPLjava/util/Formatter$DateTime;->isValid(C)Z
 HSPLjava/util/Formatter$FixedString;-><init>(Ljava/util/Formatter;Ljava/lang/String;)V
 HSPLjava/util/Formatter$FixedString;->index()I
 HSPLjava/util/Formatter$FixedString;->print(Ljava/lang/Object;Ljava/util/Locale;)V
@@ -39788,7 +19189,6 @@
 HSPLjava/util/Formatter$FormatSpecifier;->adjustWidth(ILjava/util/Formatter$Flags;Z)I
 HSPLjava/util/Formatter$FormatSpecifier;->checkBadFlags([Ljava/util/Formatter$Flags;)V
 HSPLjava/util/Formatter$FormatSpecifier;->checkCharacter()V
-HPLjava/util/Formatter$FormatSpecifier;->checkDateTime()V
 HSPLjava/util/Formatter$FormatSpecifier;->checkFloat()V
 HSPLjava/util/Formatter$FormatSpecifier;->checkGeneral()V
 HSPLjava/util/Formatter$FormatSpecifier;->checkInteger()V
@@ -39801,7 +19201,6 @@
 HSPLjava/util/Formatter$FormatSpecifier;->index(Ljava/lang/String;)I
 HSPLjava/util/Formatter$FormatSpecifier;->justify(Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/util/Formatter$FormatSpecifier;->leadingSign(Ljava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;
-HPLjava/util/Formatter$FormatSpecifier;->localizedMagnitude(Ljava/lang/StringBuilder;JLjava/util/Formatter$Flags;ILjava/util/Locale;)Ljava/lang/StringBuilder;
 HSPLjava/util/Formatter$FormatSpecifier;->localizedMagnitude(Ljava/lang/StringBuilder;[CLjava/util/Formatter$Flags;ILjava/util/Locale;)Ljava/lang/StringBuilder;
 HSPLjava/util/Formatter$FormatSpecifier;->precision(Ljava/lang/String;)I
 HSPLjava/util/Formatter$FormatSpecifier;->print(BLjava/util/Locale;)V
@@ -39812,12 +19211,8 @@
 HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/Object;Ljava/util/Locale;)V
 HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/String;)V
 HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/StringBuilder;DLjava/util/Locale;Ljava/util/Formatter$Flags;CIZ)V
-HPLjava/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
-HPLjava/util/Formatter$FormatSpecifier;->print(Ljava/util/Calendar;CLjava/util/Locale;)V
 HSPLjava/util/Formatter$FormatSpecifier;->printBoolean(Ljava/lang/Object;)V
 HSPLjava/util/Formatter$FormatSpecifier;->printCharacter(Ljava/lang/Object;)V
-HPLjava/util/Formatter$FormatSpecifier;->printDateTime(Ljava/lang/Object;Ljava/util/Locale;)V
 HSPLjava/util/Formatter$FormatSpecifier;->printFloat(Ljava/lang/Object;Ljava/util/Locale;)V
 HSPLjava/util/Formatter$FormatSpecifier;->printInteger(Ljava/lang/Object;Ljava/util/Locale;)V
 HSPLjava/util/Formatter$FormatSpecifier;->printString(Ljava/lang/Object;Ljava/util/Locale;)V
@@ -39839,7 +19234,6 @@
 HSPLjava/util/Formatter;-><init>(Ljava/util/Locale;Ljava/lang/Appendable;)V
 HSPLjava/util/Formatter;->access$000(Ljava/util/Formatter;)Ljava/lang/Appendable;
 HSPLjava/util/Formatter;->access$400(Ljava/util/Formatter;)C
-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/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;
@@ -39850,20 +19244,19 @@
 HSPLjava/util/Formatter;->parse(Ljava/lang/String;)[Ljava/util/Formatter$FormatString;
 HSPLjava/util/Formatter;->toString()Ljava/lang/String;
 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
 HSPLjava/util/GregorianCalendar;->add(II)V
 HSPLjava/util/GregorianCalendar;->adjustDstOffsetForInvalidWallClock(JLjava/util/TimeZone;I)I
 HSPLjava/util/GregorianCalendar;->adjustForZoneAndDaylightSavingsTime(IJLjava/util/TimeZone;)J
-HPLjava/util/GregorianCalendar;->clone()Ljava/lang/Object;
+HSPLjava/util/GregorianCalendar;->clone()Ljava/lang/Object;
 HSPLjava/util/GregorianCalendar;->computeFields()V
 HSPLjava/util/GregorianCalendar;->computeFields(II)I
 HSPLjava/util/GregorianCalendar;->computeTime()V
 HSPLjava/util/GregorianCalendar;->getCurrentFixedDate()J
 HSPLjava/util/GregorianCalendar;->getFixedDate(Lsun/util/calendar/BaseCalendar;II)J
-HSPLjava/util/GregorianCalendar;->getMaximum(I)I
-HSPLjava/util/GregorianCalendar;->getMinimum(I)I
 HSPLjava/util/GregorianCalendar;->getTimeZone()Ljava/util/TimeZone;
 HSPLjava/util/GregorianCalendar;->getWeekNumber(JJ)I
 HSPLjava/util/GregorianCalendar;->internalGetEra()I
@@ -39878,8 +19271,6 @@
 HSPLjava/util/HashMap$EntrySet;-><init>(Ljava/util/HashMap;)V
 HSPLjava/util/HashMap$EntrySet;->iterator()Ljava/util/Iterator;
 HSPLjava/util/HashMap$EntrySet;->size()I
-PLjava/util/HashMap$EntrySet;->spliterator()Ljava/util/Spliterator;
-PLjava/util/HashMap$EntrySpliterator;-><init>(Ljava/util/HashMap;IIII)V
 HSPLjava/util/HashMap$HashIterator;-><init>(Ljava/util/HashMap;)V
 HSPLjava/util/HashMap$HashIterator;->hasNext()Z
 HSPLjava/util/HashMap$HashIterator;->nextNode()Ljava/util/HashMap$Node;
@@ -39892,41 +19283,20 @@
 HSPLjava/util/HashMap$KeySet;-><init>(Ljava/util/HashMap;)V
 HSPLjava/util/HashMap$KeySet;->contains(Ljava/lang/Object;)Z
 HSPLjava/util/HashMap$KeySet;->iterator()Ljava/util/Iterator;
-HPLjava/util/HashMap$KeySet;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/HashMap$KeySet;->size()I
 HSPLjava/util/HashMap$KeySpliterator;-><init>(Ljava/util/HashMap;IIII)V
 HSPLjava/util/HashMap$KeySpliterator;->characteristics()I
 HSPLjava/util/HashMap$KeySpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
-HSPLjava/util/HashMap$KeySpliterator;->tryAdvance(Ljava/util/function/Consumer;)Z
 HSPLjava/util/HashMap$Node;-><init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)V
-HSPLjava/util/HashMap$Node;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/HashMap$Node;->getKey()Ljava/lang/Object;
 HSPLjava/util/HashMap$Node;->getValue()Ljava/lang/Object;
 HSPLjava/util/HashMap$Node;->hashCode()I
 HSPLjava/util/HashMap$Node;->setValue(Ljava/lang/Object;)Ljava/lang/Object;
-HPLjava/util/HashMap$TreeNode;-><init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)V
-HPLjava/util/HashMap$TreeNode;->balanceDeletion(Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;)Ljava/util/HashMap$TreeNode;
-HPLjava/util/HashMap$TreeNode;->balanceInsertion(Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;)Ljava/util/HashMap$TreeNode;
-HPLjava/util/HashMap$TreeNode;->find(ILjava/lang/Object;Ljava/lang/Class;)Ljava/util/HashMap$TreeNode;
-HPLjava/util/HashMap$TreeNode;->moveRootToFront([Ljava/util/HashMap$Node;Ljava/util/HashMap$TreeNode;)V
-HPLjava/util/HashMap$TreeNode;->putTreeVal(Ljava/util/HashMap;[Ljava/util/HashMap$Node;ILjava/lang/Object;Ljava/lang/Object;)Ljava/util/HashMap$TreeNode;
-HPLjava/util/HashMap$TreeNode;->removeTreeNode(Ljava/util/HashMap;[Ljava/util/HashMap$Node;Z)V
-HPLjava/util/HashMap$TreeNode;->root()Ljava/util/HashMap$TreeNode;
-HPLjava/util/HashMap$TreeNode;->rotateLeft(Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;)Ljava/util/HashMap$TreeNode;
-HPLjava/util/HashMap$TreeNode;->rotateRight(Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;)Ljava/util/HashMap$TreeNode;
-HPLjava/util/HashMap$TreeNode;->split(Ljava/util/HashMap;[Ljava/util/HashMap$Node;II)V
-HPLjava/util/HashMap$TreeNode;->tieBreakOrder(Ljava/lang/Object;Ljava/lang/Object;)I
-HPLjava/util/HashMap$TreeNode;->treeify([Ljava/util/HashMap$Node;)V
-PLjava/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$ValueSpliterator;-><init>(Ljava/util/HashMap;IIII)V
 HSPLjava/util/HashMap$ValueSpliterator;->characteristics()I
-HPLjava/util/HashMap$ValueSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
-HSPLjava/util/HashMap$ValueSpliterator;->tryAdvance(Ljava/util/function/Consumer;)Z
 HSPLjava/util/HashMap$Values;-><init>(Ljava/util/HashMap;)V
-HSPLjava/util/HashMap$Values;->contains(Ljava/lang/Object;)Z
-HPLjava/util/HashMap$Values;->forEach(Ljava/util/function/Consumer;)V
 HSPLjava/util/HashMap$Values;->iterator()Ljava/util/Iterator;
 HSPLjava/util/HashMap$Values;->size()I
 HSPLjava/util/HashMap$Values;->spliterator()Ljava/util/Spliterator;
@@ -39940,8 +19310,6 @@
 HSPLjava/util/HashMap;->capacity()I
 HSPLjava/util/HashMap;->clear()V
 HSPLjava/util/HashMap;->clone()Ljava/lang/Object;
-HPLjava/util/HashMap;->comparableClassFor(Ljava/lang/Object;)Ljava/lang/Class;
-HPLjava/util/HashMap;->computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
 HSPLjava/util/HashMap;->containsKey(Ljava/lang/Object;)Z
 HSPLjava/util/HashMap;->containsValue(Ljava/lang/Object;)Z
 HSPLjava/util/HashMap;->entrySet()Ljava/util/Set;
@@ -39953,10 +19321,7 @@
 HSPLjava/util/HashMap;->internalWriteEntries(Ljava/io/ObjectOutputStream;)V
 HSPLjava/util/HashMap;->isEmpty()Z
 HSPLjava/util/HashMap;->keySet()Ljava/util/Set;
-HPLjava/util/HashMap;->loadFactor()F
-HPLjava/util/HashMap;->merge(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;
 HSPLjava/util/HashMap;->newNode(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node;
-PLjava/util/HashMap;->newTreeNode(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode;
 HSPLjava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/HashMap;->putAll(Ljava/util/Map;)V
 HSPLjava/util/HashMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -39966,8 +19331,6 @@
 HSPLjava/util/HashMap;->reinitialize()V
 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;
-PLjava/util/HashMap;->replacementNode(Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node;
-HPLjava/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;->size()I
 HSPLjava/util/HashMap;->tableSizeFor(I)I
@@ -39988,7 +19351,6 @@
 HSPLjava/util/HashSet;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/HashSet;->size()I
 HSPLjava/util/HashSet;->spliterator()Ljava/util/Spliterator;
-HPLjava/util/HashSet;->writeObject(Ljava/io/ObjectOutputStream;)V
 HSPLjava/util/Hashtable$EntrySet;-><init>(Ljava/util/Hashtable;)V
 HSPLjava/util/Hashtable$EntrySet;-><init>(Ljava/util/Hashtable;Ljava/util/Hashtable$1;)V
 HSPLjava/util/Hashtable$EntrySet;->iterator()Ljava/util/Iterator;
@@ -39998,16 +19360,15 @@
 HSPLjava/util/Hashtable$Enumerator;->next()Ljava/lang/Object;
 HSPLjava/util/Hashtable$Enumerator;->nextElement()Ljava/lang/Object;
 HSPLjava/util/Hashtable$HashtableEntry;-><init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/Hashtable$HashtableEntry;)V
-HSPLjava/util/Hashtable$HashtableEntry;->clone()Ljava/lang/Object;
 HSPLjava/util/Hashtable$HashtableEntry;->getKey()Ljava/lang/Object;
 HSPLjava/util/Hashtable$HashtableEntry;->getValue()Ljava/lang/Object;
-HPLjava/util/Hashtable$KeySet;-><init>(Ljava/util/Hashtable;)V
-PLjava/util/Hashtable$KeySet;-><init>(Ljava/util/Hashtable;Ljava/util/Hashtable$1;)V
-PLjava/util/Hashtable$KeySet;->iterator()Ljava/util/Iterator;
-PLjava/util/Hashtable$KeySet;->size()I
+HSPLjava/util/Hashtable$KeySet;-><init>(Ljava/util/Hashtable;)V
+HSPLjava/util/Hashtable$KeySet;-><init>(Ljava/util/Hashtable;Ljava/util/Hashtable$1;)V
+HSPLjava/util/Hashtable$KeySet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/Hashtable$KeySet;->size()I
 HSPLjava/util/Hashtable$ValueCollection;-><init>(Ljava/util/Hashtable;)V
 HSPLjava/util/Hashtable$ValueCollection;-><init>(Ljava/util/Hashtable;Ljava/util/Hashtable$1;)V
-HPLjava/util/Hashtable$ValueCollection;->iterator()Ljava/util/Iterator;
+HSPLjava/util/Hashtable$ValueCollection;->iterator()Ljava/util/Iterator;
 HSPLjava/util/Hashtable$ValueCollection;->size()I
 HSPLjava/util/Hashtable;-><init>()V
 HSPLjava/util/Hashtable;-><init>(I)V
@@ -40018,14 +19379,13 @@
 HSPLjava/util/Hashtable;->access$500(Ljava/util/Hashtable;)I
 HSPLjava/util/Hashtable;->addEntry(ILjava/lang/Object;Ljava/lang/Object;I)V
 HSPLjava/util/Hashtable;->clear()V
-HSPLjava/util/Hashtable;->clone()Ljava/lang/Object;
 HSPLjava/util/Hashtable;->containsKey(Ljava/lang/Object;)Z
 HSPLjava/util/Hashtable;->entrySet()Ljava/util/Set;
 HSPLjava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Hashtable;->getEnumeration(I)Ljava/util/Enumeration;
 HSPLjava/util/Hashtable;->getIterator(I)Ljava/util/Iterator;
 HSPLjava/util/Hashtable;->isEmpty()Z
-HPLjava/util/Hashtable;->keySet()Ljava/util/Set;
+HSPLjava/util/Hashtable;->keySet()Ljava/util/Set;
 HSPLjava/util/Hashtable;->keys()Ljava/util/Enumeration;
 HSPLjava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Hashtable;->rehash()V
@@ -40051,22 +19411,15 @@
 HSPLjava/util/IdentityHashMap$IdentityHashMapIterator;->nextIndex()I
 HSPLjava/util/IdentityHashMap$KeyIterator;-><init>(Ljava/util/IdentityHashMap;)V
 HSPLjava/util/IdentityHashMap$KeyIterator;-><init>(Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap$1;)V
-HSPLjava/util/IdentityHashMap$KeyIterator;->next()Ljava/lang/Object;
 HSPLjava/util/IdentityHashMap$KeySet;-><init>(Ljava/util/IdentityHashMap;)V
 HSPLjava/util/IdentityHashMap$KeySet;-><init>(Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap$1;)V
 HSPLjava/util/IdentityHashMap$KeySet;->iterator()Ljava/util/Iterator;
-PLjava/util/IdentityHashMap$KeySet;->size()I
-HPLjava/util/IdentityHashMap$KeySet;->toArray()[Ljava/lang/Object;
-HPLjava/util/IdentityHashMap$KeySet;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/IdentityHashMap$ValueIterator;-><init>(Ljava/util/IdentityHashMap;)V
 HSPLjava/util/IdentityHashMap$ValueIterator;-><init>(Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap$1;)V
 HSPLjava/util/IdentityHashMap$ValueIterator;->next()Ljava/lang/Object;
 HSPLjava/util/IdentityHashMap$Values;-><init>(Ljava/util/IdentityHashMap;)V
 HSPLjava/util/IdentityHashMap$Values;-><init>(Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap$1;)V
 HSPLjava/util/IdentityHashMap$Values;->iterator()Ljava/util/Iterator;
-HPLjava/util/IdentityHashMap$Values;->size()I
-HPLjava/util/IdentityHashMap$Values;->toArray()[Ljava/lang/Object;
-HPLjava/util/IdentityHashMap$Values;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/IdentityHashMap;-><init>()V
 HSPLjava/util/IdentityHashMap;-><init>(I)V
 HSPLjava/util/IdentityHashMap;->capacity(I)I
@@ -40084,28 +19437,9 @@
 HSPLjava/util/IdentityHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/IdentityHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/IdentityHashMap;->resize(I)Z
-HSPLjava/util/IdentityHashMap;->size()I
 HSPLjava/util/IdentityHashMap;->unmaskNull(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/IdentityHashMap;->values()Ljava/util/Collection;
-HPLjava/util/Iterator;->forEachRemaining(Ljava/util/function/Consumer;)V
-HSPLjava/util/JumboEnumSet$EnumSetIterator;-><init>(Ljava/util/JumboEnumSet;)V
-HSPLjava/util/JumboEnumSet$EnumSetIterator;->hasNext()Z
-HSPLjava/util/JumboEnumSet$EnumSetIterator;->next()Ljava/lang/Enum;
-HSPLjava/util/JumboEnumSet$EnumSetIterator;->next()Ljava/lang/Object;
-HSPLjava/util/JumboEnumSet$EnumSetIterator;->remove()V
-HSPLjava/util/JumboEnumSet;-><init>(Ljava/lang/Class;[Ljava/lang/Enum;)V
-HSPLjava/util/JumboEnumSet;->access$000(Ljava/util/JumboEnumSet;)[J
-HSPLjava/util/JumboEnumSet;->access$110(Ljava/util/JumboEnumSet;)I
-HSPLjava/util/JumboEnumSet;->add(Ljava/lang/Enum;)Z
-HSPLjava/util/JumboEnumSet;->add(Ljava/lang/Object;)Z
-HSPLjava/util/JumboEnumSet;->addAll()V
-HSPLjava/util/JumboEnumSet;->addAll(Ljava/util/Collection;)Z
-HPLjava/util/JumboEnumSet;->clone()Ljava/util/EnumSet;
-HSPLjava/util/JumboEnumSet;->contains(Ljava/lang/Object;)Z
-HSPLjava/util/JumboEnumSet;->isEmpty()Z
-HSPLjava/util/JumboEnumSet;->iterator()Ljava/util/Iterator;
-HSPLjava/util/JumboEnumSet;->removeAll(Ljava/util/Collection;)Z
-HSPLjava/util/JumboEnumSet;->size()I
+HSPLjava/util/Iterator;->forEachRemaining(Ljava/util/function/Consumer;)V
 HSPLjava/util/LinkedHashMap$LinkedEntryIterator;-><init>(Ljava/util/LinkedHashMap;)V
 HSPLjava/util/LinkedHashMap$LinkedEntryIterator;->next()Ljava/lang/Object;
 HSPLjava/util/LinkedHashMap$LinkedEntryIterator;->next()Ljava/util/Map$Entry;
@@ -40120,16 +19454,13 @@
 HSPLjava/util/LinkedHashMap$LinkedKeyIterator;-><init>(Ljava/util/LinkedHashMap;)V
 HSPLjava/util/LinkedHashMap$LinkedKeyIterator;->next()Ljava/lang/Object;
 HSPLjava/util/LinkedHashMap$LinkedKeySet;-><init>(Ljava/util/LinkedHashMap;)V
-HSPLjava/util/LinkedHashMap$LinkedKeySet;->contains(Ljava/lang/Object;)Z
 HSPLjava/util/LinkedHashMap$LinkedKeySet;->iterator()Ljava/util/Iterator;
 HSPLjava/util/LinkedHashMap$LinkedKeySet;->size()I
 HSPLjava/util/LinkedHashMap$LinkedValueIterator;-><init>(Ljava/util/LinkedHashMap;)V
 HSPLjava/util/LinkedHashMap$LinkedValueIterator;->next()Ljava/lang/Object;
 HSPLjava/util/LinkedHashMap$LinkedValues;-><init>(Ljava/util/LinkedHashMap;)V
-PLjava/util/LinkedHashMap$LinkedValues;->forEach(Ljava/util/function/Consumer;)V
 HSPLjava/util/LinkedHashMap$LinkedValues;->iterator()Ljava/util/Iterator;
 HSPLjava/util/LinkedHashMap$LinkedValues;->size()I
-PLjava/util/LinkedHashMap$LinkedValues;->spliterator()Ljava/util/Spliterator;
 HSPLjava/util/LinkedHashMap;-><init>()V
 HSPLjava/util/LinkedHashMap;-><init>(I)V
 HSPLjava/util/LinkedHashMap;-><init>(IF)V
@@ -40141,41 +19472,25 @@
 HSPLjava/util/LinkedHashMap;->clear()V
 HSPLjava/util/LinkedHashMap;->eldest()Ljava/util/Map$Entry;
 HSPLjava/util/LinkedHashMap;->entrySet()Ljava/util/Set;
-PLjava/util/LinkedHashMap;->forEach(Ljava/util/function/BiConsumer;)V
 HSPLjava/util/LinkedHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/LinkedHashMap;->keySet()Ljava/util/Set;
 HSPLjava/util/LinkedHashMap;->linkNodeLast(Ljava/util/LinkedHashMap$LinkedHashMapEntry;)V
 HSPLjava/util/LinkedHashMap;->newNode(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node;
-HPLjava/util/LinkedHashMap;->newTreeNode(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode;
-HSPLjava/util/LinkedHashMap;->reinitialize()V
 HSPLjava/util/LinkedHashMap;->removeEldestEntry(Ljava/util/Map$Entry;)Z
-HPLjava/util/LinkedHashMap;->replacementNode(Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node;
-HPLjava/util/LinkedHashMap;->replacementTreeNode(Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode;
-HPLjava/util/LinkedHashMap;->transferLinks(Ljava/util/LinkedHashMap$LinkedHashMapEntry;Ljava/util/LinkedHashMap$LinkedHashMapEntry;)V
 HSPLjava/util/LinkedHashMap;->values()Ljava/util/Collection;
 HSPLjava/util/LinkedHashSet;-><init>()V
 HSPLjava/util/LinkedHashSet;-><init>(I)V
-HSPLjava/util/LinkedHashSet;-><init>(IF)V
 HSPLjava/util/LinkedHashSet;-><init>(Ljava/util/Collection;)V
-HPLjava/util/LinkedHashSet;->spliterator()Ljava/util/Spliterator;
-PLjava/util/LinkedList$LLSpliterator;-><init>(Ljava/util/LinkedList;II)V
-PLjava/util/LinkedList$LLSpliterator;->characteristics()I
-PLjava/util/LinkedList$LLSpliterator;->estimateSize()J
-PLjava/util/LinkedList$LLSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
-PLjava/util/LinkedList$LLSpliterator;->getEst()I
 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;
 HSPLjava/util/LinkedList$ListItr;->remove()V
-PLjava/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
 HSPLjava/util/LinkedList;->addAll(ILjava/util/Collection;)Z
 HSPLjava/util/LinkedList;->addAll(Ljava/util/Collection;)Z
@@ -40192,51 +19507,26 @@
 HSPLjava/util/LinkedList;->indexOf(Ljava/lang/Object;)I
 HSPLjava/util/LinkedList;->isElementIndex(I)Z
 HSPLjava/util/LinkedList;->isPositionIndex(I)Z
-HSPLjava/util/LinkedList;->linkBefore(Ljava/lang/Object;Ljava/util/LinkedList$Node;)V
 HSPLjava/util/LinkedList;->linkFirst(Ljava/lang/Object;)V
 HSPLjava/util/LinkedList;->linkLast(Ljava/lang/Object;)V
 HSPLjava/util/LinkedList;->listIterator(I)Ljava/util/ListIterator;
 HSPLjava/util/LinkedList;->node(I)Ljava/util/LinkedList$Node;
 HSPLjava/util/LinkedList;->offer(Ljava/lang/Object;)Z
-HPLjava/util/LinkedList;->offerFirst(Ljava/lang/Object;)Z
 HSPLjava/util/LinkedList;->peek()Ljava/lang/Object;
-HSPLjava/util/LinkedList;->peekLast()Ljava/lang/Object;
 HSPLjava/util/LinkedList;->poll()Ljava/lang/Object;
-HPLjava/util/LinkedList;->pollFirst()Ljava/lang/Object;
-HPLjava/util/LinkedList;->pollLast()Ljava/lang/Object;
-HSPLjava/util/LinkedList;->pop()Ljava/lang/Object;
-HSPLjava/util/LinkedList;->push(Ljava/lang/Object;)V
-HSPLjava/util/LinkedList;->readObject(Ljava/io/ObjectInputStream;)V
 HSPLjava/util/LinkedList;->remove()Ljava/lang/Object;
 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;
-HSPLjava/util/LinkedList;->removeLastOccurrence(Ljava/lang/Object;)Z
-PLjava/util/LinkedList;->set(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/LinkedList;->size()I
-PLjava/util/LinkedList;->spliterator()Ljava/util/Spliterator;
 HSPLjava/util/LinkedList;->superClone()Ljava/util/LinkedList;
 HSPLjava/util/LinkedList;->toArray()[Ljava/lang/Object;
 HSPLjava/util/LinkedList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/LinkedList;->unlink(Ljava/util/LinkedList$Node;)Ljava/lang/Object;
 HSPLjava/util/LinkedList;->unlinkFirst(Ljava/util/LinkedList$Node;)Ljava/lang/Object;
 HSPLjava/util/LinkedList;->unlinkLast(Ljava/util/LinkedList$Node;)Ljava/lang/Object;
-HPLjava/util/LinkedList;->writeObject(Ljava/io/ObjectOutputStream;)V
-PLjava/util/List;->sort(Ljava/util/Comparator;)V
-HSPLjava/util/List;->spliterator()Ljava/util/Spliterator;
-HSPLjava/util/Locale$Builder;-><init>()V
-HSPLjava/util/Locale$Builder;->build()Ljava/util/Locale;
-HSPLjava/util/Locale$Builder;->setLanguage(Ljava/lang/String;)Ljava/util/Locale$Builder;
-HSPLjava/util/Locale$Builder;->setLanguageTag(Ljava/lang/String;)Ljava/util/Locale$Builder;
-HSPLjava/util/Locale$Builder;->setRegion(Ljava/lang/String;)Ljava/util/Locale$Builder;
-HSPLjava/util/Locale$Builder;->setScript(Ljava/lang/String;)Ljava/util/Locale$Builder;
-HSPLjava/util/Locale$Builder;->setVariant(Ljava/lang/String;)Ljava/util/Locale$Builder;
 HSPLjava/util/Locale$Cache;->createObject(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Locale$Cache;->createObject(Ljava/util/Locale$LocaleKey;)Ljava/util/Locale;
-HPLjava/util/Locale$LanguageRange;-><init>(Ljava/lang/String;D)V
-HPLjava/util/Locale$LanguageRange;->getRange()Ljava/lang/String;
-HPLjava/util/Locale$LanguageRange;->isSubtagIllFormed(Ljava/lang/String;Z)Z
 HSPLjava/util/Locale$LocaleKey;-><init>(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)V
 HSPLjava/util/Locale$LocaleKey;-><init>(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;Ljava/util/Locale$1;)V
 HSPLjava/util/Locale$LocaleKey;->access$200(Ljava/util/Locale$LocaleKey;)Lsun/util/locale/BaseLocale;
@@ -40248,26 +19538,16 @@
 HSPLjava/util/Locale;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/util/Locale;-><init>(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)V
 HSPLjava/util/Locale;-><init>(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;Ljava/util/Locale$1;)V
-HSPLjava/util/Locale;->access$700(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lsun/util/locale/LocaleExtensions;
 HSPLjava/util/Locale;->adjustLanguageCode(Ljava/lang/String;)Ljava/lang/String;
 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
 HSPLjava/util/Locale;->forLanguageTag(Ljava/lang/String;)Ljava/util/Locale;
-HSPLjava/util/Locale;->getAvailableLocales()[Ljava/util/Locale;
-HSPLjava/util/Locale;->getBaseLocale()Lsun/util/locale/BaseLocale;
 HSPLjava/util/Locale;->getCompatibilityExtensions(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lsun/util/locale/LocaleExtensions;
 HSPLjava/util/Locale;->getCountry()Ljava/lang/String;
 HSPLjava/util/Locale;->getDefault()Ljava/util/Locale;
 HSPLjava/util/Locale;->getDefault(Ljava/util/Locale$Category;)Ljava/util/Locale;
-HPLjava/util/Locale;->getDisplayCountry(Ljava/util/Locale;)Ljava/lang/String;
-HSPLjava/util/Locale;->getDisplayLanguage()Ljava/lang/String;
-HSPLjava/util/Locale;->getDisplayLanguage(Ljava/util/Locale;)Ljava/lang/String;
-HPLjava/util/Locale;->getDisplayName()Ljava/lang/String;
-HPLjava/util/Locale;->getDisplayName(Ljava/util/Locale;)Ljava/lang/String;
 HSPLjava/util/Locale;->getExtensionKeys()Ljava/util/Set;
-HPLjava/util/Locale;->getISO3Language()Ljava/lang/String;
-HSPLjava/util/Locale;->getISOCountries()[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;->getLanguage()Ljava/lang/String;
@@ -40276,63 +19556,42 @@
 HSPLjava/util/Locale;->hasExtensions()Z
 HSPLjava/util/Locale;->hashCode()I
 HSPLjava/util/Locale;->isValidBcp47Alpha(Ljava/lang/String;II)Z
-HSPLjava/util/Locale;->normalizeAndValidateLanguage(Ljava/lang/String;Z)Ljava/lang/String;
-HPLjava/util/Locale;->normalizeAndValidateRegion(Ljava/lang/String;Z)Ljava/lang/String;
 HSPLjava/util/Locale;->setDefault(Ljava/util/Locale$Category;Ljava/util/Locale;)V
 HSPLjava/util/Locale;->setDefault(Ljava/util/Locale;)V
 HSPLjava/util/Locale;->toLanguageTag()Ljava/lang/String;
 HSPLjava/util/Locale;->toString()Ljava/lang/String;
 HSPLjava/util/Map;->computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
-PLjava/util/Map;->forEach(Ljava/util/function/BiConsumer;)V
 HSPLjava/util/Map;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/MissingResourceException;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/util/NoSuchElementException;-><init>()V
-PLjava/util/NoSuchElementException;-><init>(Ljava/lang/String;)V
 HSPLjava/util/Objects;->equals(Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLjava/util/Objects;->hash([Ljava/lang/Object;)I
 HSPLjava/util/Objects;->hashCode(Ljava/lang/Object;)I
-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;
 HSPLjava/util/Objects;->toString(Ljava/lang/Object;)Ljava/lang/String;
-HPLjava/util/Objects;->toString(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/Objects;->toString(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/util/Observable;-><init>()V
 HSPLjava/util/Observable;->addObserver(Ljava/util/Observer;)V
-HSPLjava/util/Observable;->clearChanged()V
-HSPLjava/util/Observable;->deleteObserver(Ljava/util/Observer;)V
-HSPLjava/util/Observable;->hasChanged()Z
-HSPLjava/util/Observable;->notifyObservers()V
-HSPLjava/util/Observable;->notifyObservers(Ljava/lang/Object;)V
-HSPLjava/util/Observable;->setChanged()V
 HSPLjava/util/Optional;-><init>(Ljava/lang/Object;)V
 HSPLjava/util/Optional;->empty()Ljava/util/Optional;
-HSPLjava/util/Optional;->flatMap(Ljava/util/function/Function;)Ljava/util/Optional;
 HSPLjava/util/Optional;->get()Ljava/lang/Object;
-HPLjava/util/Optional;->ifPresent(Ljava/util/function/Consumer;)V
+HSPLjava/util/Optional;->ifPresent(Ljava/util/function/Consumer;)V
 HSPLjava/util/Optional;->isPresent()Z
 HSPLjava/util/Optional;->map(Ljava/util/function/Function;)Ljava/util/Optional;
 HSPLjava/util/Optional;->of(Ljava/lang/Object;)Ljava/util/Optional;
 HSPLjava/util/Optional;->ofNullable(Ljava/lang/Object;)Ljava/util/Optional;
 HSPLjava/util/Optional;->orElse(Ljava/lang/Object;)Ljava/lang/Object;
-HPLjava/util/Optional;->orElseGet(Ljava/util/function/Supplier;)Ljava/lang/Object;
 HSPLjava/util/PriorityQueue$Itr;-><init>(Ljava/util/PriorityQueue;)V
 HSPLjava/util/PriorityQueue$Itr;-><init>(Ljava/util/PriorityQueue;Ljava/util/PriorityQueue$1;)V
 HSPLjava/util/PriorityQueue$Itr;->hasNext()Z
 HSPLjava/util/PriorityQueue$Itr;->next()Ljava/lang/Object;
-HPLjava/util/PriorityQueue$Itr;->remove()V
+HSPLjava/util/PriorityQueue$Itr;->remove()V
 HSPLjava/util/PriorityQueue;-><init>()V
-HSPLjava/util/PriorityQueue;-><init>(I)V
 HSPLjava/util/PriorityQueue;-><init>(ILjava/util/Comparator;)V
-HSPLjava/util/PriorityQueue;-><init>(Ljava/util/Collection;)V
 HSPLjava/util/PriorityQueue;->add(Ljava/lang/Object;)Z
-PLjava/util/PriorityQueue;->clear()V
-HSPLjava/util/PriorityQueue;->comparator()Ljava/util/Comparator;
-HPLjava/util/PriorityQueue;->contains(Ljava/lang/Object;)Z
 HSPLjava/util/PriorityQueue;->grow(I)V
-HSPLjava/util/PriorityQueue;->heapify()V
 HSPLjava/util/PriorityQueue;->indexOf(Ljava/lang/Object;)I
-HSPLjava/util/PriorityQueue;->initElementsFromCollection(Ljava/util/Collection;)V
-HSPLjava/util/PriorityQueue;->initFromCollection(Ljava/util/Collection;)V
 HSPLjava/util/PriorityQueue;->iterator()Ljava/util/Iterator;
 HSPLjava/util/PriorityQueue;->offer(Ljava/lang/Object;)Z
 HSPLjava/util/PriorityQueue;->peek()Ljava/lang/Object;
@@ -40347,29 +19606,19 @@
 HSPLjava/util/PriorityQueue;->siftUpUsingComparator(ILjava/lang/Object;)V
 HSPLjava/util/PriorityQueue;->size()I
 HSPLjava/util/Properties$LineReader;-><init>(Ljava/util/Properties;Ljava/io/InputStream;)V
-HSPLjava/util/Properties$LineReader;-><init>(Ljava/util/Properties;Ljava/io/Reader;)V
 HSPLjava/util/Properties$LineReader;->readLine()I
 HSPLjava/util/Properties;-><init>()V
 HSPLjava/util/Properties;-><init>(Ljava/util/Properties;)V
-HSPLjava/util/Properties;->enumerate(Ljava/util/Hashtable;)V
 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
 HSPLjava/util/Properties;->load0(Ljava/util/Properties$LineReader;)V
 HSPLjava/util/Properties;->loadConvert([CII[C)Ljava/lang/String;
-HSPLjava/util/Properties;->propertyNames()Ljava/util/Enumeration;
 HSPLjava/util/Properties;->setProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
-HPLjava/util/Properties;->store(Ljava/io/OutputStream;Ljava/lang/String;)V
-HPLjava/util/Properties;->store0(Ljava/io/BufferedWriter;Ljava/lang/String;Z)V
-HSPLjava/util/PropertyResourceBundle;-><init>(Ljava/io/Reader;)V
-HSPLjava/util/PropertyResourceBundle;->getKeys()Ljava/util/Enumeration;
-HSPLjava/util/PropertyResourceBundle;->handleGetObject(Ljava/lang/String;)Ljava/lang/Object;
 HSPLjava/util/Random;-><init>()V
 HSPLjava/util/Random;-><init>(J)V
 HSPLjava/util/Random;->initialScramble(J)J
 HSPLjava/util/Random;->next(I)I
-PLjava/util/Random;->nextBoolean()Z
 HSPLjava/util/Random;->nextBytes([B)V
 HSPLjava/util/Random;->nextDouble()D
 HSPLjava/util/Random;->nextFloat()F
@@ -40379,7 +19628,6 @@
 HSPLjava/util/Random;->nextLong()J
 HSPLjava/util/Random;->seedUniquifier()J
 HSPLjava/util/Random;->setSeed(J)V
-HSPLjava/util/RandomAccessSubList;-><init>(Ljava/util/AbstractList;II)V
 HSPLjava/util/RegularEnumSet$EnumSetIterator;-><init>(Ljava/util/RegularEnumSet;)V
 HSPLjava/util/RegularEnumSet$EnumSetIterator;->hasNext()Z
 HSPLjava/util/RegularEnumSet$EnumSetIterator;->next()Ljava/lang/Enum;
@@ -40389,120 +19637,31 @@
 HSPLjava/util/RegularEnumSet;->add(Ljava/lang/Enum;)Z
 HSPLjava/util/RegularEnumSet;->add(Ljava/lang/Object;)Z
 HSPLjava/util/RegularEnumSet;->addAll()V
-HSPLjava/util/RegularEnumSet;->addAll(Ljava/util/Collection;)Z
-HPLjava/util/RegularEnumSet;->clear()V
-HSPLjava/util/RegularEnumSet;->complement()V
 HSPLjava/util/RegularEnumSet;->contains(Ljava/lang/Object;)Z
-HSPLjava/util/RegularEnumSet;->containsAll(Ljava/util/Collection;)Z
-HPLjava/util/RegularEnumSet;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/RegularEnumSet;->isEmpty()Z
 HSPLjava/util/RegularEnumSet;->iterator()Ljava/util/Iterator;
-HPLjava/util/RegularEnumSet;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/RegularEnumSet;->size()I
-HSPLjava/util/ResourceBundle$BundleReference;-><init>(Ljava/util/ResourceBundle;Ljava/lang/ref/ReferenceQueue;Ljava/util/ResourceBundle$CacheKey;)V
-HSPLjava/util/ResourceBundle$BundleReference;->getCacheKey()Ljava/util/ResourceBundle$CacheKey;
-HSPLjava/util/ResourceBundle$CacheKey;-><init>(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/ClassLoader;)V
-HSPLjava/util/ResourceBundle$CacheKey;->access$400(Ljava/util/ResourceBundle$CacheKey;)Ljava/lang/Throwable;
-HSPLjava/util/ResourceBundle$CacheKey;->access$600(Ljava/util/ResourceBundle$CacheKey;)J
-HSPLjava/util/ResourceBundle$CacheKey;->access$602(Ljava/util/ResourceBundle$CacheKey;J)J
-HSPLjava/util/ResourceBundle$CacheKey;->calculateHashCode()V
-HSPLjava/util/ResourceBundle$CacheKey;->clone()Ljava/lang/Object;
-HSPLjava/util/ResourceBundle$CacheKey;->equals(Ljava/lang/Object;)Z
-HSPLjava/util/ResourceBundle$CacheKey;->getCause()Ljava/lang/Throwable;
-HSPLjava/util/ResourceBundle$CacheKey;->getLoader()Ljava/lang/ClassLoader;
-HSPLjava/util/ResourceBundle$CacheKey;->getLocale()Ljava/util/Locale;
-HSPLjava/util/ResourceBundle$CacheKey;->getName()Ljava/lang/String;
-HSPLjava/util/ResourceBundle$CacheKey;->hashCode()I
-HSPLjava/util/ResourceBundle$CacheKey;->setFormat(Ljava/lang/String;)V
-HSPLjava/util/ResourceBundle$CacheKey;->setLocale(Ljava/util/Locale;)Ljava/util/ResourceBundle$CacheKey;
-HSPLjava/util/ResourceBundle$Control$1;-><init>(Ljava/util/ResourceBundle$Control;ZLjava/lang/ClassLoader;Ljava/lang/String;)V
-HSPLjava/util/ResourceBundle$Control$1;->run()Ljava/io/InputStream;
-HSPLjava/util/ResourceBundle$Control$1;->run()Ljava/lang/Object;
-HSPLjava/util/ResourceBundle$Control$CandidateListCache;-><init>()V
-HSPLjava/util/ResourceBundle$Control$CandidateListCache;-><init>(Ljava/util/ResourceBundle$1;)V
-HSPLjava/util/ResourceBundle$Control$CandidateListCache;->createObject(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/ResourceBundle$Control$CandidateListCache;->createObject(Lsun/util/locale/BaseLocale;)Ljava/util/List;
-HSPLjava/util/ResourceBundle$Control$CandidateListCache;->getDefaultList(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
-HSPLjava/util/ResourceBundle$Control;-><clinit>()V
-HSPLjava/util/ResourceBundle$Control;-><init>()V
-HSPLjava/util/ResourceBundle$Control;->access$300()Ljava/util/ResourceBundle$Control;
-HSPLjava/util/ResourceBundle$Control;->getCandidateLocales(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/List;
-HSPLjava/util/ResourceBundle$Control;->getFallbackLocale(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/Locale;
-HSPLjava/util/ResourceBundle$Control;->getFormats(Ljava/lang/String;)Ljava/util/List;
-HSPLjava/util/ResourceBundle$Control;->getTimeToLive(Ljava/lang/String;Ljava/util/Locale;)J
-HSPLjava/util/ResourceBundle$Control;->newBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Ljava/util/ResourceBundle;
-HSPLjava/util/ResourceBundle$Control;->toBundleName(Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String;
-HSPLjava/util/ResourceBundle$Control;->toResourceName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/util/ResourceBundle$Control;->toResourceName0(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/util/ResourceBundle$LoaderReference;-><init>(Ljava/lang/ClassLoader;Ljava/lang/ref/ReferenceQueue;Ljava/util/ResourceBundle$CacheKey;)V
 HSPLjava/util/ResourceBundle;-><init>()V
-HSPLjava/util/ResourceBundle;->access$200()Ljava/lang/ref/ReferenceQueue;
-HSPLjava/util/ResourceBundle;->findBundle(Ljava/util/ResourceBundle$CacheKey;Ljava/util/List;Ljava/util/List;ILjava/util/ResourceBundle$Control;Ljava/util/ResourceBundle;)Ljava/util/ResourceBundle;
-HSPLjava/util/ResourceBundle;->findBundleInCache(Ljava/util/ResourceBundle$CacheKey;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;
-HSPLjava/util/ResourceBundle;->getBundle(Ljava/lang/String;)Ljava/util/ResourceBundle;
-HSPLjava/util/ResourceBundle;->getBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/ClassLoader;)Ljava/util/ResourceBundle;
-HSPLjava/util/ResourceBundle;->getBundleImpl(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/ClassLoader;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;
-HSPLjava/util/ResourceBundle;->getDefaultControl(Ljava/lang/String;)Ljava/util/ResourceBundle$Control;
-HSPLjava/util/ResourceBundle;->getLoader(Ljava/lang/Class;)Ljava/lang/ClassLoader;
 HSPLjava/util/ResourceBundle;->getObject(Ljava/lang/String;)Ljava/lang/Object;
 HSPLjava/util/ResourceBundle;->getString(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/util/ResourceBundle;->isValidBundle(Ljava/util/ResourceBundle;)Z
-HSPLjava/util/ResourceBundle;->loadBundle(Ljava/util/ResourceBundle$CacheKey;Ljava/util/List;Ljava/util/ResourceBundle$Control;Z)Ljava/util/ResourceBundle;
-HSPLjava/util/ResourceBundle;->putBundleInCache(Ljava/util/ResourceBundle$CacheKey;Ljava/util/ResourceBundle;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;
-HSPLjava/util/ResourceBundle;->setExpirationTime(Ljava/util/ResourceBundle$CacheKey;Ljava/util/ResourceBundle$Control;)V
-HSPLjava/util/ResourceBundle;->setParent(Ljava/util/ResourceBundle;)V
 HSPLjava/util/Scanner$1;-><init>(Ljava/util/Scanner;I)V
 HSPLjava/util/Scanner$1;->create(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Scanner$1;->create(Ljava/lang/String;)Ljava/util/regex/Pattern;
-HSPLjava/util/Scanner;-><init>(Ljava/io/InputStream;)V
-HSPLjava/util/Scanner;-><init>(Ljava/io/InputStream;Ljava/lang/String;)V
 HSPLjava/util/Scanner;-><init>(Ljava/lang/Readable;Ljava/util/regex/Pattern;)V
-HSPLjava/util/Scanner;-><init>(Ljava/lang/String;)V
-HSPLjava/util/Scanner;->cacheResult(Ljava/lang/String;)V
 HSPLjava/util/Scanner;->clearCaches()V
-HSPLjava/util/Scanner;->close()V
 HSPLjava/util/Scanner;->ensureOpen()V
-HSPLjava/util/Scanner;->findPatternInBuffer(Ljava/util/regex/Pattern;I)Ljava/lang/String;
-HSPLjava/util/Scanner;->findWithinHorizon(Ljava/util/regex/Pattern;I)Ljava/lang/String;
-HSPLjava/util/Scanner;->getCachedResult()Ljava/lang/String;
 HSPLjava/util/Scanner;->getCompleteTokenInBuffer(Ljava/util/regex/Pattern;)Ljava/lang/String;
 HSPLjava/util/Scanner;->hasNext()Z
-HSPLjava/util/Scanner;->hasNextLine()Z
 HSPLjava/util/Scanner;->hasTokenInBuffer()Z
-HSPLjava/util/Scanner;->linePattern()Ljava/util/regex/Pattern;
-HSPLjava/util/Scanner;->makeReadable(Ljava/io/InputStream;Ljava/nio/charset/Charset;)Ljava/lang/Readable;
 HSPLjava/util/Scanner;->makeSpace()Z
-HSPLjava/util/Scanner;->match()Ljava/util/regex/MatchResult;
 HSPLjava/util/Scanner;->next()Ljava/lang/String;
-HSPLjava/util/Scanner;->nextLine()Ljava/lang/String;
 HSPLjava/util/Scanner;->readInput()V
-HSPLjava/util/Scanner;->revertState()V
 HSPLjava/util/Scanner;->revertState(Z)Z
 HSPLjava/util/Scanner;->saveState()V
-HSPLjava/util/Scanner;->toCharset(Ljava/lang/String;)Ljava/nio/charset/Charset;
 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;-><init>(Ljava/util/ServiceLoader;Ljava/lang/Class;Ljava/lang/ClassLoader;Ljava/util/ServiceLoader$1;)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;-><init>(Ljava/lang/Class;Ljava/lang/ClassLoader;)V
-HSPLjava/util/ServiceLoader;->access$200(Ljava/util/ServiceLoader;Ljava/lang/Class;Ljava/net/URL;)Ljava/util/Iterator;
-HSPLjava/util/ServiceLoader;->access$300(Ljava/util/ServiceLoader;)Ljava/util/LinkedHashMap;
-HSPLjava/util/ServiceLoader;->access$400(Ljava/util/ServiceLoader;)Ljava/util/ServiceLoader$LazyIterator;
-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
-HPLjava/util/Set;->spliterator()Ljava/util/Spliterator;
-HSPLjava/util/SimpleTimeZone;-><init>(ILjava/lang/String;)V
+HSPLjava/util/Set;->spliterator()Ljava/util/Spliterator;
 HSPLjava/util/SimpleTimeZone;->clone()Ljava/lang/Object;
 HSPLjava/util/SimpleTimeZone;->getOffset(J)I
 HSPLjava/util/SimpleTimeZone;->getOffsets(J[I)I
@@ -40510,26 +19669,18 @@
 HSPLjava/util/SimpleTimeZone;->hasSameRules(Ljava/util/TimeZone;)Z
 HSPLjava/util/Spliterator$OfInt;->forEachRemaining(Ljava/util/function/Consumer;)V
 HSPLjava/util/Spliterator;->getExactSizeIfKnown()J
-PLjava/util/Spliterators$ArraySpliterator;-><init>([Ljava/lang/Object;I)V
 HSPLjava/util/Spliterators$ArraySpliterator;-><init>([Ljava/lang/Object;III)V
 HSPLjava/util/Spliterators$ArraySpliterator;->characteristics()I
 HSPLjava/util/Spliterators$ArraySpliterator;->estimateSize()J
 HSPLjava/util/Spliterators$ArraySpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
 HSPLjava/util/Spliterators$ArraySpliterator;->tryAdvance(Ljava/util/function/Consumer;)Z
-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$IteratorSpliterator;-><init>(Ljava/util/Collection;I)V
 HSPLjava/util/Spliterators$IteratorSpliterator;->characteristics()I
 HSPLjava/util/Spliterators$IteratorSpliterator;->estimateSize()J
-HPLjava/util/Spliterators$IteratorSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
+HSPLjava/util/Spliterators$IteratorSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
 HSPLjava/util/Spliterators$IteratorSpliterator;->tryAdvance(Ljava/util/function/Consumer;)Z
 HSPLjava/util/Spliterators;->checkFromToBounds(III)V
-HPLjava/util/Spliterators;->iterator(Ljava/util/Spliterator;)Ljava/util/Iterator;
 HSPLjava/util/Spliterators;->spliterator(Ljava/util/Collection;I)Ljava/util/Spliterator;
-HSPLjava/util/Spliterators;->spliterator([IIII)Ljava/util/Spliterator$OfInt;
-PLjava/util/Spliterators;->spliterator([Ljava/lang/Object;I)Ljava/util/Spliterator;
 HSPLjava/util/Spliterators;->spliterator([Ljava/lang/Object;III)Ljava/util/Spliterator;
 HSPLjava/util/Stack;-><init>()V
 HSPLjava/util/Stack;->empty()Z
@@ -40540,33 +19691,15 @@
 HSPLjava/util/StringJoiner;-><init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V
 HSPLjava/util/StringJoiner;->add(Ljava/lang/CharSequence;)Ljava/util/StringJoiner;
 HSPLjava/util/StringJoiner;->prepareBuilder()Ljava/lang/StringBuilder;
-HPLjava/util/StringJoiner;->setEmptyValue(Ljava/lang/CharSequence;)Ljava/util/StringJoiner;
 HSPLjava/util/StringJoiner;->toString()Ljava/lang/String;
-HSPLjava/util/StringTokenizer;-><init>(Ljava/lang/String;)V
 HSPLjava/util/StringTokenizer;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/util/StringTokenizer;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V
 HSPLjava/util/StringTokenizer;->countTokens()I
-HSPLjava/util/StringTokenizer;->hasMoreElements()Z
 HSPLjava/util/StringTokenizer;->hasMoreTokens()Z
 HSPLjava/util/StringTokenizer;->nextToken()Ljava/lang/String;
 HSPLjava/util/StringTokenizer;->scanToken(I)I
 HSPLjava/util/StringTokenizer;->setMaxDelimCodePoint()V
 HSPLjava/util/StringTokenizer;->skipDelimiters(I)I
-HSPLjava/util/SubList$1;-><init>(Ljava/util/SubList;I)V
-HSPLjava/util/SubList$1;->hasNext()Z
-HSPLjava/util/SubList$1;->next()Ljava/lang/Object;
-HSPLjava/util/SubList$1;->nextIndex()I
-HSPLjava/util/SubList;-><init>(Ljava/util/AbstractList;II)V
-HSPLjava/util/SubList;->access$000(Ljava/util/SubList;)I
-HSPLjava/util/SubList;->access$100(Ljava/util/SubList;)Ljava/util/AbstractList;
-HSPLjava/util/SubList;->access$200(Ljava/util/SubList;)I
-HSPLjava/util/SubList;->checkForComodification()V
-HSPLjava/util/SubList;->get(I)Ljava/lang/Object;
-HSPLjava/util/SubList;->iterator()Ljava/util/Iterator;
-HSPLjava/util/SubList;->listIterator(I)Ljava/util/ListIterator;
-HSPLjava/util/SubList;->rangeCheck(I)V
-HSPLjava/util/SubList;->rangeCheckForAdd(I)V
-HSPLjava/util/SubList;->size()I
 HSPLjava/util/TaskQueue;-><init>()V
 HSPLjava/util/TaskQueue;->add(Ljava/util/TimerTask;)V
 HSPLjava/util/TaskQueue;->clear()V
@@ -40574,8 +19707,7 @@
 HSPLjava/util/TaskQueue;->fixUp(I)V
 HSPLjava/util/TaskQueue;->getMin()Ljava/util/TimerTask;
 HSPLjava/util/TaskQueue;->isEmpty()Z
-HPLjava/util/TaskQueue;->removeMin()V
-HSPLjava/util/TaskQueue;->rescheduleMin(J)V
+HSPLjava/util/TaskQueue;->removeMin()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;->countRunAndMakeAscending([Ljava/lang/Object;IILjava/util/Comparator;)I
@@ -40598,8 +19730,6 @@
 HSPLjava/util/TimeZone;->getAvailableIDs()[Ljava/lang/String;
 HSPLjava/util/TimeZone;->getDefault()Ljava/util/TimeZone;
 HSPLjava/util/TimeZone;->getDefaultRef()Ljava/util/TimeZone;
-HPLjava/util/TimeZone;->getDisplayName()Ljava/lang/String;
-HSPLjava/util/TimeZone;->getDisplayName(ZI)Ljava/lang/String;
 HSPLjava/util/TimeZone;->getDisplayName(ZILjava/util/Locale;)Ljava/lang/String;
 HSPLjava/util/TimeZone;->getID()Ljava/lang/String;
 HSPLjava/util/TimeZone;->getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone;
@@ -40610,103 +19740,59 @@
 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
-HSPLjava/util/Timer;-><init>(Z)V
 HSPLjava/util/Timer;->access$000(Ljava/util/Timer;)Ljava/util/TaskQueue;
 HSPLjava/util/Timer;->access$100(Ljava/util/Timer;)Ljava/util/TimerThread;
 HSPLjava/util/Timer;->cancel()V
 HSPLjava/util/Timer;->sched(Ljava/util/TimerTask;JJ)V
 HSPLjava/util/Timer;->schedule(Ljava/util/TimerTask;J)V
-HSPLjava/util/Timer;->schedule(Ljava/util/TimerTask;JJ)V
-HSPLjava/util/Timer;->scheduleAtFixedRate(Ljava/util/TimerTask;JJ)V
 HSPLjava/util/Timer;->serialNumber()I
 HSPLjava/util/TimerTask;-><init>()V
-HSPLjava/util/TimerTask;->cancel()Z
 HSPLjava/util/TimerThread;-><init>(Ljava/util/TaskQueue;)V
 HSPLjava/util/TimerThread;->mainLoop()V
 HSPLjava/util/TimerThread;->run()V
 HSPLjava/util/TreeMap$AscendingSubMap$AscendingEntrySetView;-><init>(Ljava/util/TreeMap$AscendingSubMap;)V
-HPLjava/util/TreeMap$AscendingSubMap$AscendingEntrySetView;->iterator()Ljava/util/Iterator;
+HSPLjava/util/TreeMap$AscendingSubMap$AscendingEntrySetView;->iterator()Ljava/util/Iterator;
 HSPLjava/util/TreeMap$AscendingSubMap;-><init>(Ljava/util/TreeMap;ZLjava/lang/Object;ZZLjava/lang/Object;Z)V
-HPLjava/util/TreeMap$AscendingSubMap;->comparator()Ljava/util/Comparator;
 HSPLjava/util/TreeMap$AscendingSubMap;->entrySet()Ljava/util/Set;
 HSPLjava/util/TreeMap$AscendingSubMap;->keyIterator()Ljava/util/Iterator;
-HPLjava/util/TreeMap$AscendingSubMap;->subHighest()Ljava/util/TreeMap$TreeMapEntry;
-HPLjava/util/TreeMap$AscendingSubMap;->subLowest()Ljava/util/TreeMap$TreeMapEntry;
-HPLjava/util/TreeMap$DescendingSubMap;-><init>(Ljava/util/TreeMap;ZLjava/lang/Object;ZZLjava/lang/Object;Z)V
-HPLjava/util/TreeMap$DescendingSubMap;->keyIterator()Ljava/util/Iterator;
 HSPLjava/util/TreeMap$EntryIterator;-><init>(Ljava/util/TreeMap;Ljava/util/TreeMap$TreeMapEntry;)V
 HSPLjava/util/TreeMap$EntryIterator;->next()Ljava/lang/Object;
 HSPLjava/util/TreeMap$EntryIterator;->next()Ljava/util/Map$Entry;
 HSPLjava/util/TreeMap$EntrySet;-><init>(Ljava/util/TreeMap;)V
 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$KeySet;-><init>(Ljava/util/NavigableMap;)V
-HPLjava/util/TreeMap$KeySet;->comparator()Ljava/util/Comparator;
-HPLjava/util/TreeMap$KeySet;->contains(Ljava/lang/Object;)Z
-HSPLjava/util/TreeMap$KeySet;->isEmpty()Z
 HSPLjava/util/TreeMap$KeySet;->iterator()Ljava/util/Iterator;
-HSPLjava/util/TreeMap$KeySet;->size()I
 HSPLjava/util/TreeMap$NavigableSubMap$EntrySetView;-><init>(Ljava/util/TreeMap$NavigableSubMap;)V
-HSPLjava/util/TreeMap$NavigableSubMap$EntrySetView;->isEmpty()Z
-HPLjava/util/TreeMap$NavigableSubMap$EntrySetView;->size()I
-HPLjava/util/TreeMap$NavigableSubMap$SubMapEntryIterator;-><init>(Ljava/util/TreeMap$NavigableSubMap;Ljava/util/TreeMap$TreeMapEntry;Ljava/util/TreeMap$TreeMapEntry;)V
-HPLjava/util/TreeMap$NavigableSubMap$SubMapEntryIterator;->next()Ljava/lang/Object;
-PLjava/util/TreeMap$NavigableSubMap$SubMapEntryIterator;->next()Ljava/util/Map$Entry;
-PLjava/util/TreeMap$NavigableSubMap$SubMapEntryIterator;->remove()V
+HSPLjava/util/TreeMap$NavigableSubMap$SubMapEntryIterator;-><init>(Ljava/util/TreeMap$NavigableSubMap;Ljava/util/TreeMap$TreeMapEntry;Ljava/util/TreeMap$TreeMapEntry;)V
+HSPLjava/util/TreeMap$NavigableSubMap$SubMapEntryIterator;->next()Ljava/lang/Object;
+HSPLjava/util/TreeMap$NavigableSubMap$SubMapEntryIterator;->next()Ljava/util/Map$Entry;
 HSPLjava/util/TreeMap$NavigableSubMap$SubMapIterator;-><init>(Ljava/util/TreeMap$NavigableSubMap;Ljava/util/TreeMap$TreeMapEntry;Ljava/util/TreeMap$TreeMapEntry;)V
 HSPLjava/util/TreeMap$NavigableSubMap$SubMapIterator;->hasNext()Z
 HSPLjava/util/TreeMap$NavigableSubMap$SubMapIterator;->nextEntry()Ljava/util/TreeMap$TreeMapEntry;
-HPLjava/util/TreeMap$NavigableSubMap$SubMapIterator;->prevEntry()Ljava/util/TreeMap$TreeMapEntry;
-PLjava/util/TreeMap$NavigableSubMap$SubMapIterator;->removeAscending()V
 HSPLjava/util/TreeMap$NavigableSubMap$SubMapKeyIterator;-><init>(Ljava/util/TreeMap$NavigableSubMap;Ljava/util/TreeMap$TreeMapEntry;Ljava/util/TreeMap$TreeMapEntry;)V
-HSPLjava/util/TreeMap$NavigableSubMap$SubMapKeyIterator;->next()Ljava/lang/Object;
 HSPLjava/util/TreeMap$NavigableSubMap;-><init>(Ljava/util/TreeMap;ZLjava/lang/Object;ZZLjava/lang/Object;Z)V
 HSPLjava/util/TreeMap$NavigableSubMap;->absHighFence()Ljava/util/TreeMap$TreeMapEntry;
-HPLjava/util/TreeMap$NavigableSubMap;->absHighest()Ljava/util/TreeMap$TreeMapEntry;
-HPLjava/util/TreeMap$NavigableSubMap;->absLowFence()Ljava/util/TreeMap$TreeMapEntry;
 HSPLjava/util/TreeMap$NavigableSubMap;->absLowest()Ljava/util/TreeMap$TreeMapEntry;
-HPLjava/util/TreeMap$NavigableSubMap;->firstKey()Ljava/lang/Object;
-HPLjava/util/TreeMap$NavigableSubMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HPLjava/util/TreeMap$NavigableSubMap;->inRange(Ljava/lang/Object;)Z
-HSPLjava/util/TreeMap$NavigableSubMap;->isEmpty()Z
-HPLjava/util/TreeMap$NavigableSubMap;->lastKey()Ljava/lang/Object;
 HSPLjava/util/TreeMap$NavigableSubMap;->navigableKeySet()Ljava/util/NavigableSet;
-HPLjava/util/TreeMap$NavigableSubMap;->size()I
 HSPLjava/util/TreeMap$NavigableSubMap;->tooHigh(Ljava/lang/Object;)Z
-HPLjava/util/TreeMap$NavigableSubMap;->tooLow(Ljava/lang/Object;)Z
 HSPLjava/util/TreeMap$PrivateEntryIterator;-><init>(Ljava/util/TreeMap;Ljava/util/TreeMap$TreeMapEntry;)V
 HSPLjava/util/TreeMap$PrivateEntryIterator;->hasNext()Z
 HSPLjava/util/TreeMap$PrivateEntryIterator;->nextEntry()Ljava/util/TreeMap$TreeMapEntry;
-HSPLjava/util/TreeMap$PrivateEntryIterator;->remove()V
 HSPLjava/util/TreeMap$TreeMapEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/TreeMap$TreeMapEntry;)V
 HSPLjava/util/TreeMap$TreeMapEntry;->getKey()Ljava/lang/Object;
 HSPLjava/util/TreeMap$TreeMapEntry;->getValue()Ljava/lang/Object;
-PLjava/util/TreeMap$TreeMapEntry;->setValue(Ljava/lang/Object;)Ljava/lang/Object;
-PLjava/util/TreeMap$TreeMapSpliterator;-><init>(Ljava/util/TreeMap;Ljava/util/TreeMap$TreeMapEntry;Ljava/util/TreeMap$TreeMapEntry;III)V
-PLjava/util/TreeMap$TreeMapSpliterator;->estimateSize()J
-PLjava/util/TreeMap$TreeMapSpliterator;->getEstimate()I
 HSPLjava/util/TreeMap$ValueIterator;-><init>(Ljava/util/TreeMap;Ljava/util/TreeMap$TreeMapEntry;)V
 HSPLjava/util/TreeMap$ValueIterator;->next()Ljava/lang/Object;
-PLjava/util/TreeMap$ValueSpliterator;-><init>(Ljava/util/TreeMap;Ljava/util/TreeMap$TreeMapEntry;Ljava/util/TreeMap$TreeMapEntry;III)V
-PLjava/util/TreeMap$ValueSpliterator;->characteristics()I
-PLjava/util/TreeMap$ValueSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
 HSPLjava/util/TreeMap$Values;-><init>(Ljava/util/TreeMap;)V
 HSPLjava/util/TreeMap$Values;->iterator()Ljava/util/Iterator;
 HSPLjava/util/TreeMap$Values;->size()I
-PLjava/util/TreeMap$Values;->spliterator()Ljava/util/Spliterator;
 HSPLjava/util/TreeMap;-><init>()V
 HSPLjava/util/TreeMap;-><init>(Ljava/util/Comparator;)V
-HSPLjava/util/TreeMap;-><init>(Ljava/util/Map;)V
-HPLjava/util/TreeMap;-><init>(Ljava/util/SortedMap;)V
 HSPLjava/util/TreeMap;->access$000(Ljava/util/TreeMap;Ljava/util/TreeMap$TreeMapEntry;)V
 HSPLjava/util/TreeMap;->access$100(Ljava/util/TreeMap;)I
 HSPLjava/util/TreeMap;->access$200()Ljava/lang/Object;
-HPLjava/util/TreeMap;->access$300(Ljava/util/TreeMap;)Ljava/util/Comparator;
-PLjava/util/TreeMap;->access$400(Ljava/util/TreeMap;)I
-HSPLjava/util/TreeMap;->addAllForTreeSet(Ljava/util/SortedSet;Ljava/lang/Object;)V
 HSPLjava/util/TreeMap;->buildFromSorted(IIIILjava/util/Iterator;Ljava/io/ObjectInputStream;Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
 HSPLjava/util/TreeMap;->buildFromSorted(ILjava/util/Iterator;Ljava/io/ObjectInputStream;Ljava/lang/Object;)V
 HSPLjava/util/TreeMap;->ceilingEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;
@@ -40719,40 +19805,25 @@
 HSPLjava/util/TreeMap;->computeRedLevel(I)I
 HSPLjava/util/TreeMap;->containsKey(Ljava/lang/Object;)Z
 HSPLjava/util/TreeMap;->deleteEntry(Ljava/util/TreeMap$TreeMapEntry;)V
-HPLjava/util/TreeMap;->descendingKeySet()Ljava/util/NavigableSet;
-HPLjava/util/TreeMap;->descendingMap()Ljava/util/NavigableMap;
 HSPLjava/util/TreeMap;->entrySet()Ljava/util/Set;
 HSPLjava/util/TreeMap;->exportEntry(Ljava/util/TreeMap$TreeMapEntry;)Ljava/util/Map$Entry;
-HPLjava/util/TreeMap;->firstEntry()Ljava/util/Map$Entry;
 HSPLjava/util/TreeMap;->firstKey()Ljava/lang/Object;
 HSPLjava/util/TreeMap;->fixAfterDeletion(Ljava/util/TreeMap$TreeMapEntry;)V
 HSPLjava/util/TreeMap;->fixAfterInsertion(Ljava/util/TreeMap$TreeMapEntry;)V
-HSPLjava/util/TreeMap;->floorKey(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/TreeMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/TreeMap;->getCeilingEntry(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
 HSPLjava/util/TreeMap;->getEntry(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
 HSPLjava/util/TreeMap;->getEntryUsingComparator(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
 HSPLjava/util/TreeMap;->getFirstEntry()Ljava/util/TreeMap$TreeMapEntry;
-HSPLjava/util/TreeMap;->getFloorEntry(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
-HSPLjava/util/TreeMap;->getHigherEntry(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
 HSPLjava/util/TreeMap;->getLastEntry()Ljava/util/TreeMap$TreeMapEntry;
-HPLjava/util/TreeMap;->getLowerEntry(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
-HPLjava/util/TreeMap;->headMap(Ljava/lang/Object;)Ljava/util/SortedMap;
-PLjava/util/TreeMap;->headMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;
-PLjava/util/TreeMap;->higherEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;
-HSPLjava/util/TreeMap;->higherKey(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/TreeMap;->key(Ljava/util/TreeMap$TreeMapEntry;)Ljava/lang/Object;
 HSPLjava/util/TreeMap;->keyIterator()Ljava/util/Iterator;
 HSPLjava/util/TreeMap;->keyOrNull(Ljava/util/TreeMap$TreeMapEntry;)Ljava/lang/Object;
 HSPLjava/util/TreeMap;->keySet()Ljava/util/Set;
-PLjava/util/TreeMap;->lastEntry()Ljava/util/Map$Entry;
 HSPLjava/util/TreeMap;->lastKey()Ljava/lang/Object;
 HSPLjava/util/TreeMap;->leftOf(Ljava/util/TreeMap$TreeMapEntry;)Ljava/util/TreeMap$TreeMapEntry;
-PLjava/util/TreeMap;->lowerEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;
 HSPLjava/util/TreeMap;->navigableKeySet()Ljava/util/NavigableSet;
 HSPLjava/util/TreeMap;->parentOf(Ljava/util/TreeMap$TreeMapEntry;)Ljava/util/TreeMap$TreeMapEntry;
-HSPLjava/util/TreeMap;->pollFirstEntry()Ljava/util/Map$Entry;
-HPLjava/util/TreeMap;->predecessor(Ljava/util/TreeMap$TreeMapEntry;)Ljava/util/TreeMap$TreeMapEntry;
 HSPLjava/util/TreeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/TreeMap;->putAll(Ljava/util/Map;)V
 HSPLjava/util/TreeMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
@@ -40761,47 +19832,30 @@
 HSPLjava/util/TreeMap;->rotateRight(Ljava/util/TreeMap$TreeMapEntry;)V
 HSPLjava/util/TreeMap;->setColor(Ljava/util/TreeMap$TreeMapEntry;Z)V
 HSPLjava/util/TreeMap;->size()I
-HPLjava/util/TreeMap;->subMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/SortedMap;
 HSPLjava/util/TreeMap;->subMap(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/NavigableMap;
 HSPLjava/util/TreeMap;->successor(Ljava/util/TreeMap$TreeMapEntry;)Ljava/util/TreeMap$TreeMapEntry;
-HPLjava/util/TreeMap;->tailMap(Ljava/lang/Object;)Ljava/util/SortedMap;
-HSPLjava/util/TreeMap;->tailMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;
 HSPLjava/util/TreeMap;->values()Ljava/util/Collection;
 HSPLjava/util/TreeSet;-><init>()V
 HSPLjava/util/TreeSet;-><init>(Ljava/util/Collection;)V
 HSPLjava/util/TreeSet;-><init>(Ljava/util/Comparator;)V
 HSPLjava/util/TreeSet;-><init>(Ljava/util/NavigableMap;)V
-PLjava/util/TreeSet;-><init>(Ljava/util/SortedSet;)V
 HSPLjava/util/TreeSet;->add(Ljava/lang/Object;)Z
 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
-HPLjava/util/TreeSet;->descendingIterator()Ljava/util/Iterator;
 HSPLjava/util/TreeSet;->first()Ljava/lang/Object;
-HSPLjava/util/TreeSet;->floor(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/TreeSet;->higher(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/TreeSet;->isEmpty()Z
 HSPLjava/util/TreeSet;->iterator()Ljava/util/Iterator;
-HSPLjava/util/TreeSet;->last()Ljava/lang/Object;
-HSPLjava/util/TreeSet;->pollFirst()Ljava/lang/Object;
 HSPLjava/util/TreeSet;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/TreeSet;->size()I
-HSPLjava/util/TreeSet;->subSet(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/SortedSet;
-HSPLjava/util/TreeSet;->subSet(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/NavigableSet;
-HSPLjava/util/TreeSet;->tailSet(Ljava/lang/Object;)Ljava/util/SortedSet;
-HSPLjava/util/TreeSet;->tailSet(Ljava/lang/Object;Z)Ljava/util/NavigableSet;
 HSPLjava/util/UUID;-><init>(JJ)V
 HSPLjava/util/UUID;-><init>([B)V
-HPLjava/util/UUID;->compareTo(Ljava/util/UUID;)I
 HSPLjava/util/UUID;->digits(JI)Ljava/lang/String;
 HSPLjava/util/UUID;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/UUID;->fromString(Ljava/lang/String;)Ljava/util/UUID;
 HSPLjava/util/UUID;->getLeastSignificantBits()J
 HSPLjava/util/UUID;->getMostSignificantBits()J
 HSPLjava/util/UUID;->hashCode()I
-HPLjava/util/UUID;->nameUUIDFromBytes([B)Ljava/util/UUID;
 HSPLjava/util/UUID;->randomUUID()Ljava/util/UUID;
 HSPLjava/util/UUID;->toString()Ljava/lang/String;
 HSPLjava/util/Vector$1;-><init>(Ljava/util/Vector;)V
@@ -40812,12 +19866,10 @@
 HSPLjava/util/Vector$Itr;->checkForComodification()V
 HSPLjava/util/Vector$Itr;->hasNext()Z
 HSPLjava/util/Vector$Itr;->next()Ljava/lang/Object;
-PLjava/util/Vector$Itr;->remove()V
 HSPLjava/util/Vector;-><init>()V
 HSPLjava/util/Vector;-><init>(I)V
 HSPLjava/util/Vector;-><init>(II)V
 HSPLjava/util/Vector;->add(Ljava/lang/Object;)Z
-HSPLjava/util/Vector;->addAll(Ljava/util/Collection;)Z
 HSPLjava/util/Vector;->addElement(Ljava/lang/Object;)V
 HSPLjava/util/Vector;->clear()V
 HSPLjava/util/Vector;->contains(Ljava/lang/Object;)Z
@@ -40828,32 +19880,22 @@
 HSPLjava/util/Vector;->ensureCapacityHelper(I)V
 HSPLjava/util/Vector;->get(I)Ljava/lang/Object;
 HSPLjava/util/Vector;->grow(I)V
-HSPLjava/util/Vector;->indexOf(Ljava/lang/Object;)I
 HSPLjava/util/Vector;->indexOf(Ljava/lang/Object;I)I
-HPLjava/util/Vector;->insertElementAt(Ljava/lang/Object;I)V
 HSPLjava/util/Vector;->isEmpty()Z
 HSPLjava/util/Vector;->iterator()Ljava/util/Iterator;
-PLjava/util/Vector;->remove(I)Ljava/lang/Object;
 HSPLjava/util/Vector;->removeAllElements()V
-HSPLjava/util/Vector;->removeElement(Ljava/lang/Object;)Z
 HSPLjava/util/Vector;->removeElementAt(I)V
-HPLjava/util/Vector;->set(ILjava/lang/Object;)Ljava/lang/Object;
-HPLjava/util/Vector;->setElementAt(Ljava/lang/Object;I)V
 HSPLjava/util/Vector;->size()I
 HSPLjava/util/Vector;->sort(Ljava/util/Comparator;)V
 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;->getValue()Ljava/lang/Object;
 HSPLjava/util/WeakHashMap$EntryIterator;-><init>(Ljava/util/WeakHashMap;)V
 HSPLjava/util/WeakHashMap$EntryIterator;-><init>(Ljava/util/WeakHashMap;Ljava/util/WeakHashMap$1;)V
-HSPLjava/util/WeakHashMap$EntryIterator;->next()Ljava/lang/Object;
-HSPLjava/util/WeakHashMap$EntryIterator;->next()Ljava/util/Map$Entry;
 HSPLjava/util/WeakHashMap$EntrySet;-><init>(Ljava/util/WeakHashMap;)V
 HSPLjava/util/WeakHashMap$EntrySet;-><init>(Ljava/util/WeakHashMap;Ljava/util/WeakHashMap$1;)V
 HSPLjava/util/WeakHashMap$EntrySet;->iterator()Ljava/util/Iterator;
-HPLjava/util/WeakHashMap$EntrySet;->size()I
 HSPLjava/util/WeakHashMap$HashIterator;-><init>(Ljava/util/WeakHashMap;)V
 HSPLjava/util/WeakHashMap$HashIterator;->hasNext()Z
 HSPLjava/util/WeakHashMap$HashIterator;->nextEntry()Ljava/util/WeakHashMap$Entry;
@@ -40866,7 +19908,6 @@
 HSPLjava/util/WeakHashMap$KeySet;->size()I
 HSPLjava/util/WeakHashMap$ValueIterator;-><init>(Ljava/util/WeakHashMap;)V
 HSPLjava/util/WeakHashMap$ValueIterator;-><init>(Ljava/util/WeakHashMap;Ljava/util/WeakHashMap$1;)V
-HSPLjava/util/WeakHashMap$ValueIterator;->next()Ljava/lang/Object;
 HSPLjava/util/WeakHashMap$Values;-><init>(Ljava/util/WeakHashMap;)V
 HSPLjava/util/WeakHashMap$Values;-><init>(Ljava/util/WeakHashMap;Ljava/util/WeakHashMap$1;)V
 HSPLjava/util/WeakHashMap$Values;->iterator()Ljava/util/Iterator;
@@ -40875,7 +19916,6 @@
 HSPLjava/util/WeakHashMap;-><init>(IF)V
 HSPLjava/util/WeakHashMap;->clear()V
 HSPLjava/util/WeakHashMap;->containsKey(Ljava/lang/Object;)Z
-HSPLjava/util/WeakHashMap;->containsValue(Ljava/lang/Object;)Z
 HSPLjava/util/WeakHashMap;->entrySet()Ljava/util/Set;
 HSPLjava/util/WeakHashMap;->eq(Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLjava/util/WeakHashMap;->expungeStaleEntries()V
@@ -40896,116 +19936,54 @@
 HSPLjava/util/WeakHashMap;->unmaskNull(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/WeakHashMap;->values()Ljava/util/Collection;
 HSPLjava/util/concurrent/AbstractExecutorService;-><init>()V
-HPLjava/util/concurrent/AbstractExecutorService;->invokeAll(Ljava/util/Collection;)Ljava/util/List;
-HSPLjava/util/concurrent/AbstractExecutorService;->invokeAll(Ljava/util/Collection;JLjava/util/concurrent/TimeUnit;)Ljava/util/List;
 HSPLjava/util/concurrent/AbstractExecutorService;->newTaskFor(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/RunnableFuture;
 HSPLjava/util/concurrent/AbstractExecutorService;->newTaskFor(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/RunnableFuture;
 HSPLjava/util/concurrent/AbstractExecutorService;->submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;
-HSPLjava/util/concurrent/AbstractExecutorService;->submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;
 HSPLjava/util/concurrent/AbstractExecutorService;->submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;
 HSPLjava/util/concurrent/ArrayBlockingQueue;-><init>(I)V
 HSPLjava/util/concurrent/ArrayBlockingQueue;-><init>(IZ)V
-HSPLjava/util/concurrent/ArrayBlockingQueue;->add(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ArrayBlockingQueue;->clear()V
 HSPLjava/util/concurrent/ArrayBlockingQueue;->dequeue()Ljava/lang/Object;
-HSPLjava/util/concurrent/ArrayBlockingQueue;->drainTo(Ljava/util/Collection;)I
-HSPLjava/util/concurrent/ArrayBlockingQueue;->drainTo(Ljava/util/Collection;I)I
 HSPLjava/util/concurrent/ArrayBlockingQueue;->enqueue(Ljava/lang/Object;)V
-HSPLjava/util/concurrent/ArrayBlockingQueue;->itemAt(I)Ljava/lang/Object;
-HSPLjava/util/concurrent/ArrayBlockingQueue;->iterator()Ljava/util/Iterator;
 HSPLjava/util/concurrent/ArrayBlockingQueue;->offer(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ArrayBlockingQueue;->offer(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z
-HSPLjava/util/concurrent/ArrayBlockingQueue;->peek()Ljava/lang/Object;
-HSPLjava/util/concurrent/ArrayBlockingQueue;->poll()Ljava/lang/Object;
 HSPLjava/util/concurrent/ArrayBlockingQueue;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLjava/util/concurrent/ArrayBlockingQueue;->put(Ljava/lang/Object;)V
-HSPLjava/util/concurrent/ArrayBlockingQueue;->remainingCapacity()I
 HSPLjava/util/concurrent/ArrayBlockingQueue;->size()I
 HSPLjava/util/concurrent/ArrayBlockingQueue;->take()Ljava/lang/Object;
 HSPLjava/util/concurrent/CancellationException;-><init>()V
 HSPLjava/util/concurrent/CancellationException;-><init>(Ljava/lang/String;)V
-PLjava/util/concurrent/CompletableFuture$AltResult;-><init>(Ljava/lang/Throwable;)V
-HSPLjava/util/concurrent/CompletableFuture$AsyncRun;-><init>(Ljava/util/concurrent/CompletableFuture;Ljava/lang/Runnable;)V
-HSPLjava/util/concurrent/CompletableFuture$AsyncRun;->exec()Z
-HSPLjava/util/concurrent/CompletableFuture$AsyncRun;->run()V
 HSPLjava/util/concurrent/CompletableFuture$Completion;-><init>()V
 HSPLjava/util/concurrent/CompletableFuture$Signaller;-><init>(ZJJ)V
-PLjava/util/concurrent/CompletableFuture$Signaller;->isLive()Z
-PLjava/util/concurrent/CompletableFuture$UniCompletion;-><init>(Ljava/util/concurrent/Executor;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;)V
-PLjava/util/concurrent/CompletableFuture$UniCompletion;->claim()Z
-PLjava/util/concurrent/CompletableFuture$UniWhenComplete;-><init>(Ljava/util/concurrent/Executor;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/util/function/BiConsumer;)V
-PLjava/util/concurrent/CompletableFuture$UniWhenComplete;->tryFire(I)Ljava/util/concurrent/CompletableFuture;
 HSPLjava/util/concurrent/CompletableFuture;-><init>()V
-PLjava/util/concurrent/CompletableFuture;-><init>(Ljava/lang/Object;)V
-HSPLjava/util/concurrent/CompletableFuture;->asyncRunStage(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;
-HSPLjava/util/concurrent/CompletableFuture;->cancel(Z)Z
 HSPLjava/util/concurrent/CompletableFuture;->casStack(Ljava/util/concurrent/CompletableFuture$Completion;Ljava/util/concurrent/CompletableFuture$Completion;)Z
-PLjava/util/concurrent/CompletableFuture;->cleanStack()V
 HSPLjava/util/concurrent/CompletableFuture;->complete(Ljava/lang/Object;)Z
-PLjava/util/concurrent/CompletableFuture;->completeExceptionally(Ljava/lang/Throwable;)Z
-HSPLjava/util/concurrent/CompletableFuture;->completeNull()Z
 HSPLjava/util/concurrent/CompletableFuture;->completeValue(Ljava/lang/Object;)Z
-PLjava/util/concurrent/CompletableFuture;->completedFuture(Ljava/lang/Object;)Ljava/util/concurrent/CompletableFuture;
 HSPLjava/util/concurrent/CompletableFuture;->get()Ljava/lang/Object;
-HSPLjava/util/concurrent/CompletableFuture;->get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
-PLjava/util/concurrent/CompletableFuture;->handle(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;
-PLjava/util/concurrent/CompletableFuture;->internalComplete(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/CompletableFuture;->isCancelled()Z
-HPLjava/util/concurrent/CompletableFuture;->isDone()Z
 HSPLjava/util/concurrent/CompletableFuture;->lazySetNext(Ljava/util/concurrent/CompletableFuture$Completion;Ljava/util/concurrent/CompletableFuture$Completion;)V
-PLjava/util/concurrent/CompletableFuture;->newIncompleteFuture()Ljava/util/concurrent/CompletableFuture;
 HSPLjava/util/concurrent/CompletableFuture;->postComplete()V
-PLjava/util/concurrent/CompletableFuture;->postFire(Ljava/util/concurrent/CompletableFuture;I)Ljava/util/concurrent/CompletableFuture;
-PLjava/util/concurrent/CompletableFuture;->push(Ljava/util/concurrent/CompletableFuture$UniCompletion;)V
-HSPLjava/util/concurrent/CompletableFuture;->reportGet(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/concurrent/CompletableFuture;->runAsync(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;
-HPLjava/util/concurrent/CompletableFuture;->timedGet(J)Ljava/lang/Object;
 HSPLjava/util/concurrent/CompletableFuture;->tryPushStack(Ljava/util/concurrent/CompletableFuture$Completion;)Z
-PLjava/util/concurrent/CompletableFuture;->uniHandle(Ljava/util/concurrent/CompletableFuture;Ljava/util/function/BiFunction;Ljava/util/concurrent/CompletableFuture$UniHandle;)Z
-PLjava/util/concurrent/CompletableFuture;->uniHandleStage(Ljava/util/concurrent/Executor;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;
-PLjava/util/concurrent/CompletableFuture;->uniWhenComplete(Ljava/util/concurrent/CompletableFuture;Ljava/util/function/BiConsumer;Ljava/util/concurrent/CompletableFuture$UniWhenComplete;)Z
-PLjava/util/concurrent/CompletableFuture;->uniWhenCompleteStage(Ljava/util/concurrent/Executor;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;
 HSPLjava/util/concurrent/CompletableFuture;->waitingGet(Z)Ljava/lang/Object;
-PLjava/util/concurrent/CompletableFuture;->whenComplete(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;
-PLjava/util/concurrent/CompletableFuture;->whenComplete(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;
 HSPLjava/util/concurrent/ConcurrentHashMap$BaseIterator;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;IIILjava/util/concurrent/ConcurrentHashMap;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$BaseIterator;->hasNext()Z
-HSPLjava/util/concurrent/ConcurrentHashMap$BaseIterator;->remove()V
 HSPLjava/util/concurrent/ConcurrentHashMap$CollectionView;-><init>(Ljava/util/concurrent/ConcurrentHashMap;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$CollectionView;->size()I
 HSPLjava/util/concurrent/ConcurrentHashMap$CollectionView;->toArray()[Ljava/lang/Object;
-PLjava/util/concurrent/ConcurrentHashMap$CounterCell;-><init>(J)V
 HSPLjava/util/concurrent/ConcurrentHashMap$EntryIterator;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;IIILjava/util/concurrent/ConcurrentHashMap;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$EntryIterator;->next()Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentHashMap$EntryIterator;->next()Ljava/util/Map$Entry;
 HSPLjava/util/concurrent/ConcurrentHashMap$EntrySetView;-><init>(Ljava/util/concurrent/ConcurrentHashMap;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$EntrySetView;->iterator()Ljava/util/Iterator;
-HPLjava/util/concurrent/ConcurrentHashMap$EntrySetView;->removeIf(Ljava/util/function/Predicate;)Z
 HSPLjava/util/concurrent/ConcurrentHashMap$ForwardingNode;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;)V
-HSPLjava/util/concurrent/ConcurrentHashMap$ForwardingNode;->find(ILjava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$Node;
 HSPLjava/util/concurrent/ConcurrentHashMap$KeyIterator;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;IIILjava/util/concurrent/ConcurrentHashMap;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$KeyIterator;->next()Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentHashMap$KeySetView;-><init>(Ljava/util/concurrent/ConcurrentHashMap;Ljava/lang/Object;)V
-HSPLjava/util/concurrent/ConcurrentHashMap$KeySetView;->add(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/ConcurrentHashMap$KeySetView;->iterator()Ljava/util/Iterator;
-HPLjava/util/concurrent/ConcurrentHashMap$KeySetView;->spliterator()Ljava/util/Spliterator;
-HPLjava/util/concurrent/ConcurrentHashMap$KeySpliterator;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;IIIJ)V
 HSPLjava/util/concurrent/ConcurrentHashMap$MapEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$MapEntry;->getKey()Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentHashMap$MapEntry;->getValue()Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentHashMap$Node;-><init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;)V
-HSPLjava/util/concurrent/ConcurrentHashMap$ReservationNode;-><init>()V
 HSPLjava/util/concurrent/ConcurrentHashMap$Traverser;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;III)V
 HSPLjava/util/concurrent/ConcurrentHashMap$Traverser;->advance()Ljava/util/concurrent/ConcurrentHashMap$Node;
-HSPLjava/util/concurrent/ConcurrentHashMap$TreeBin;-><init>(Ljava/util/concurrent/ConcurrentHashMap$TreeNode;)V
-HSPLjava/util/concurrent/ConcurrentHashMap$TreeBin;->balanceInsertion(Ljava/util/concurrent/ConcurrentHashMap$TreeNode;Ljava/util/concurrent/ConcurrentHashMap$TreeNode;)Ljava/util/concurrent/ConcurrentHashMap$TreeNode;
 HSPLjava/util/concurrent/ConcurrentHashMap$TreeBin;->find(ILjava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$Node;
-HSPLjava/util/concurrent/ConcurrentHashMap$TreeBin;->lockRoot()V
-HSPLjava/util/concurrent/ConcurrentHashMap$TreeBin;->putTreeVal(ILjava/lang/Object;Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$TreeNode;
-HSPLjava/util/concurrent/ConcurrentHashMap$TreeBin;->rotateLeft(Ljava/util/concurrent/ConcurrentHashMap$TreeNode;Ljava/util/concurrent/ConcurrentHashMap$TreeNode;)Ljava/util/concurrent/ConcurrentHashMap$TreeNode;
-HSPLjava/util/concurrent/ConcurrentHashMap$TreeBin;->rotateRight(Ljava/util/concurrent/ConcurrentHashMap$TreeNode;Ljava/util/concurrent/ConcurrentHashMap$TreeNode;)Ljava/util/concurrent/ConcurrentHashMap$TreeNode;
-HSPLjava/util/concurrent/ConcurrentHashMap$TreeBin;->unlockRoot()V
-HSPLjava/util/concurrent/ConcurrentHashMap$TreeNode;-><init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$TreeNode;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$TreeNode;->findTreeNode(ILjava/lang/Object;Ljava/lang/Class;)Ljava/util/concurrent/ConcurrentHashMap$TreeNode;
 HSPLjava/util/concurrent/ConcurrentHashMap$ValueIterator;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;IIILjava/util/concurrent/ConcurrentHashMap;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$ValueIterator;->next()Ljava/lang/Object;
@@ -41014,28 +19992,20 @@
 HSPLjava/util/concurrent/ConcurrentHashMap;-><init>()V
 HSPLjava/util/concurrent/ConcurrentHashMap;-><init>(I)V
 HSPLjava/util/concurrent/ConcurrentHashMap;-><init>(IFI)V
-HSPLjava/util/concurrent/ConcurrentHashMap;-><init>(Ljava/util/Map;)V
 HSPLjava/util/concurrent/ConcurrentHashMap;->addCount(JI)V
 HSPLjava/util/concurrent/ConcurrentHashMap;->casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
 HSPLjava/util/concurrent/ConcurrentHashMap;->clear()V
-HSPLjava/util/concurrent/ConcurrentHashMap;->computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentHashMap;->containsKey(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/ConcurrentHashMap;->entrySet()Ljava/util/Set;
-PLjava/util/concurrent/ConcurrentHashMap;->fullAddCount(JZ)V
 HSPLjava/util/concurrent/ConcurrentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentHashMap;->helpTransfer([Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)[Ljava/util/concurrent/ConcurrentHashMap$Node;
 HSPLjava/util/concurrent/ConcurrentHashMap;->initTable()[Ljava/util/concurrent/ConcurrentHashMap$Node;
 HSPLjava/util/concurrent/ConcurrentHashMap;->isEmpty()Z
 HSPLjava/util/concurrent/ConcurrentHashMap;->keySet()Ljava/util/Set;
 HSPLjava/util/concurrent/ConcurrentHashMap;->mappingCount()J
-HSPLjava/util/concurrent/ConcurrentHashMap;->newKeySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
 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;
 HSPLjava/util/concurrent/ConcurrentHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentHashMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z
-HPLjava/util/concurrent/ConcurrentHashMap;->removeEntryIf(Ljava/util/function/Predicate;)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;
 HSPLjava/util/concurrent/ConcurrentHashMap;->resizeStamp(I)I
@@ -41045,122 +20015,52 @@
 HSPLjava/util/concurrent/ConcurrentHashMap;->sumCount()J
 HSPLjava/util/concurrent/ConcurrentHashMap;->tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
 HSPLjava/util/concurrent/ConcurrentHashMap;->tableSizeFor(I)I
-HPLjava/util/concurrent/ConcurrentHashMap;->toString()Ljava/lang/String;
 HSPLjava/util/concurrent/ConcurrentHashMap;->transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
-HSPLjava/util/concurrent/ConcurrentHashMap;->treeifyBin([Ljava/util/concurrent/ConcurrentHashMap$Node;I)V
-HSPLjava/util/concurrent/ConcurrentHashMap;->tryPresize(I)V
 HSPLjava/util/concurrent/ConcurrentHashMap;->values()Ljava/util/Collection;
-HPLjava/util/concurrent/ConcurrentLinkedDeque$AbstractItr;-><init>(Ljava/util/concurrent/ConcurrentLinkedDeque;)V
-PLjava/util/concurrent/ConcurrentLinkedDeque$AbstractItr;->advance()V
-PLjava/util/concurrent/ConcurrentLinkedDeque$AbstractItr;->hasNext()Z
-PLjava/util/concurrent/ConcurrentLinkedDeque$AbstractItr;->next()Ljava/lang/Object;
-PLjava/util/concurrent/ConcurrentLinkedDeque$DescendingItr;-><init>(Ljava/util/concurrent/ConcurrentLinkedDeque;)V
-PLjava/util/concurrent/ConcurrentLinkedDeque$DescendingItr;-><init>(Ljava/util/concurrent/ConcurrentLinkedDeque;Ljava/util/concurrent/ConcurrentLinkedDeque$1;)V
-PLjava/util/concurrent/ConcurrentLinkedDeque$DescendingItr;->nextNode(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
-PLjava/util/concurrent/ConcurrentLinkedDeque$DescendingItr;->startNode()Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
-PLjava/util/concurrent/ConcurrentLinkedDeque$Itr;-><init>(Ljava/util/concurrent/ConcurrentLinkedDeque;)V
-PLjava/util/concurrent/ConcurrentLinkedDeque$Itr;-><init>(Ljava/util/concurrent/ConcurrentLinkedDeque;Ljava/util/concurrent/ConcurrentLinkedDeque$1;)V
-PLjava/util/concurrent/ConcurrentLinkedDeque$Itr;->nextNode(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
-PLjava/util/concurrent/ConcurrentLinkedDeque$Itr;->startNode()Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
 HSPLjava/util/concurrent/ConcurrentLinkedDeque$Node;-><init>(Ljava/lang/Object;)V
-HSPLjava/util/concurrent/ConcurrentLinkedDeque$Node;->casItem(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ConcurrentLinkedDeque$Node;->casNext(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)Z
-HSPLjava/util/concurrent/ConcurrentLinkedDeque$Node;->casPrev(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)Z
-HSPLjava/util/concurrent/ConcurrentLinkedDeque$Node;->lazySetNext(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)V
-HSPLjava/util/concurrent/ConcurrentLinkedDeque$Node;->lazySetPrev(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)V
 HSPLjava/util/concurrent/ConcurrentLinkedDeque;-><init>()V
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->add(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->casTail(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)Z
-PLjava/util/concurrent/ConcurrentLinkedDeque;->clear()V
-PLjava/util/concurrent/ConcurrentLinkedDeque;->descendingIterator()Ljava/util/Iterator;
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->first()Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
-PLjava/util/concurrent/ConcurrentLinkedDeque;->iterator()Ljava/util/Iterator;
-PLjava/util/concurrent/ConcurrentLinkedDeque;->last()Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->linkLast(Ljava/lang/Object;)V
-PLjava/util/concurrent/ConcurrentLinkedDeque;->nextTerminator()Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->offerLast(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->poll()Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->pollFirst()Ljava/lang/Object;
-PLjava/util/concurrent/ConcurrentLinkedDeque;->pred(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->prevTerminator()Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->size()I
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->skipDeletedPredecessors(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)V
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->skipDeletedSuccessors(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)V
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->succ(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->unlink(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)V
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->unlinkLast(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)V
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->updateHead()V
-HSPLjava/util/concurrent/ConcurrentLinkedDeque;->updateTail()V
 HSPLjava/util/concurrent/ConcurrentLinkedQueue$Itr;-><init>(Ljava/util/concurrent/ConcurrentLinkedQueue;)V
 HSPLjava/util/concurrent/ConcurrentLinkedQueue$Itr;->hasNext()Z
 HSPLjava/util/concurrent/ConcurrentLinkedQueue$Itr;->next()Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentLinkedQueue$Node;-><init>()V
 HSPLjava/util/concurrent/ConcurrentLinkedQueue$Node;-><init>(Ljava/util/concurrent/ConcurrentLinkedQueue$1;)V
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;-><init>()V
-HSPLjava/util/concurrent/ConcurrentLinkedQueue;-><init>(Ljava/util/Collection;)V
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->add(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->casHead(Ljava/util/concurrent/ConcurrentLinkedQueue$Node;Ljava/util/concurrent/ConcurrentLinkedQueue$Node;)Z
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->casItem(Ljava/util/concurrent/ConcurrentLinkedQueue$Node;Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->casNext(Ljava/util/concurrent/ConcurrentLinkedQueue$Node;Ljava/util/concurrent/ConcurrentLinkedQueue$Node;Ljava/util/concurrent/ConcurrentLinkedQueue$Node;)Z
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->casTail(Ljava/util/concurrent/ConcurrentLinkedQueue$Node;Ljava/util/concurrent/ConcurrentLinkedQueue$Node;)Z
-HSPLjava/util/concurrent/ConcurrentLinkedQueue;->contains(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->first()Ljava/util/concurrent/ConcurrentLinkedQueue$Node;
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->isEmpty()Z
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->iterator()Ljava/util/Iterator;
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->lazySetNext(Ljava/util/concurrent/ConcurrentLinkedQueue$Node;Ljava/util/concurrent/ConcurrentLinkedQueue$Node;)V
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->newNode(Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentLinkedQueue$Node;
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->offer(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ConcurrentLinkedQueue;->peek()Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->poll()Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->size()I
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->succ(Ljava/util/concurrent/ConcurrentLinkedQueue$Node;)Ljava/util/concurrent/ConcurrentLinkedQueue$Node;
-HSPLjava/util/concurrent/ConcurrentLinkedQueue;->toArray()[Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentLinkedQueue;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentLinkedQueue;->toArrayInternal([Ljava/lang/Object;)[Ljava/lang/Object;
-HPLjava/util/concurrent/ConcurrentLinkedQueue;->toString()Ljava/lang/String;
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->updateHead(Ljava/util/concurrent/ConcurrentLinkedQueue$Node;Ljava/util/concurrent/ConcurrentLinkedQueue$Node;)V
 HSPLjava/util/concurrent/ConcurrentSkipListMap$HeadIndex;-><init>(Ljava/util/concurrent/ConcurrentSkipListMap$Node;Ljava/util/concurrent/ConcurrentSkipListMap$Index;Ljava/util/concurrent/ConcurrentSkipListMap$Index;I)V
 HSPLjava/util/concurrent/ConcurrentSkipListMap$Index;-><init>(Ljava/util/concurrent/ConcurrentSkipListMap$Node;Ljava/util/concurrent/ConcurrentSkipListMap$Index;Ljava/util/concurrent/ConcurrentSkipListMap$Index;)V
 HSPLjava/util/concurrent/ConcurrentSkipListMap$Index;->casRight(Ljava/util/concurrent/ConcurrentSkipListMap$Index;Ljava/util/concurrent/ConcurrentSkipListMap$Index;)Z
 HSPLjava/util/concurrent/ConcurrentSkipListMap$Index;->link(Ljava/util/concurrent/ConcurrentSkipListMap$Index;Ljava/util/concurrent/ConcurrentSkipListMap$Index;)Z
 HSPLjava/util/concurrent/ConcurrentSkipListMap$Index;->unlink(Ljava/util/concurrent/ConcurrentSkipListMap$Index;)Z
-HSPLjava/util/concurrent/ConcurrentSkipListMap$Iter;-><init>(Ljava/util/concurrent/ConcurrentSkipListMap;)V
-HSPLjava/util/concurrent/ConcurrentSkipListMap$Iter;->advance()V
-HSPLjava/util/concurrent/ConcurrentSkipListMap$Iter;->hasNext()Z
 HSPLjava/util/concurrent/ConcurrentSkipListMap$Node;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentSkipListMap$Node;)V
 HSPLjava/util/concurrent/ConcurrentSkipListMap$Node;-><init>(Ljava/util/concurrent/ConcurrentSkipListMap$Node;)V
 HSPLjava/util/concurrent/ConcurrentSkipListMap$Node;->appendMarker(Ljava/util/concurrent/ConcurrentSkipListMap$Node;)Z
 HSPLjava/util/concurrent/ConcurrentSkipListMap$Node;->casNext(Ljava/util/concurrent/ConcurrentSkipListMap$Node;Ljava/util/concurrent/ConcurrentSkipListMap$Node;)Z
 HSPLjava/util/concurrent/ConcurrentSkipListMap$Node;->casValue(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ConcurrentSkipListMap$ValueIterator;-><init>(Ljava/util/concurrent/ConcurrentSkipListMap;)V
-HSPLjava/util/concurrent/ConcurrentSkipListMap$ValueIterator;->next()Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentSkipListMap$Values;-><init>(Ljava/util/concurrent/ConcurrentNavigableMap;)V
-HSPLjava/util/concurrent/ConcurrentSkipListMap$Values;->iterator()Ljava/util/Iterator;
 HSPLjava/util/concurrent/ConcurrentSkipListMap;-><init>()V
-HSPLjava/util/concurrent/ConcurrentSkipListMap;-><init>(Ljava/util/Comparator;)V
 HSPLjava/util/concurrent/ConcurrentSkipListMap;->casHead(Ljava/util/concurrent/ConcurrentSkipListMap$HeadIndex;Ljava/util/concurrent/ConcurrentSkipListMap$HeadIndex;)Z
-HPLjava/util/concurrent/ConcurrentSkipListMap;->clear()V
-HSPLjava/util/concurrent/ConcurrentSkipListMap;->containsKey(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/ConcurrentSkipListMap;->cpr(Ljava/util/Comparator;Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLjava/util/concurrent/ConcurrentSkipListMap;->doGet(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentSkipListMap;->doPut(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentSkipListMap;->doRemove(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentSkipListMap;->findFirst()Ljava/util/concurrent/ConcurrentSkipListMap$Node;
 HSPLjava/util/concurrent/ConcurrentSkipListMap;->findPredecessor(Ljava/lang/Object;Ljava/util/Comparator;)Ljava/util/concurrent/ConcurrentSkipListMap$Node;
-HSPLjava/util/concurrent/ConcurrentSkipListMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentSkipListMap;->initialize()V
 HSPLjava/util/concurrent/ConcurrentSkipListMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentSkipListMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentSkipListMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentSkipListMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/ConcurrentSkipListMap;->tryReduceLevel()V
-HSPLjava/util/concurrent/ConcurrentSkipListMap;->values()Ljava/util/Collection;
-HSPLjava/util/concurrent/ConcurrentSkipListSet;-><init>()V
-HSPLjava/util/concurrent/ConcurrentSkipListSet;->add(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ConcurrentSkipListSet;->contains(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ConcurrentSkipListSet;->remove(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ConcurrentSkipListSet;->removeAll(Ljava/util/Collection;)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;
@@ -41169,41 +20069,27 @@
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->add(ILjava/lang/Object;)V
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->add(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->addAll(Ljava/util/Collection;)Z
-HSPLjava/util/concurrent/CopyOnWriteArrayList;->addAllAbsent(Ljava/util/Collection;)I
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->addIfAbsent(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->addIfAbsent(Ljava/lang/Object;[Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->clear()V
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->contains(Ljava/lang/Object;)Z
-HPLjava/util/concurrent/CopyOnWriteArrayList;->forEach(Ljava/util/function/Consumer;)V
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->get(I)Ljava/lang/Object;
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->get([Ljava/lang/Object;I)Ljava/lang/Object;
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->getArray()[Ljava/lang/Object;
-HPLjava/util/concurrent/CopyOnWriteArrayList;->indexOf(Ljava/lang/Object;)I
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->indexOf(Ljava/lang/Object;[Ljava/lang/Object;II)I
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->isEmpty()Z
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->iterator()Ljava/util/Iterator;
 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
-PLjava/util/concurrent/CopyOnWriteArrayList;->sort(Ljava/util/Comparator;)V
-HPLjava/util/concurrent/CopyOnWriteArrayList;->toArray()[Ljava/lang/Object;
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/concurrent/CopyOnWriteArraySet;-><init>()V
-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
-HSPLjava/util/concurrent/CopyOnWriteArraySet;->compareSets([Ljava/lang/Object;Ljava/util/Set;)I
-HSPLjava/util/concurrent/CopyOnWriteArraySet;->contains(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/CopyOnWriteArraySet;->containsAll(Ljava/util/Collection;)Z
-HPLjava/util/concurrent/CopyOnWriteArraySet;->forEach(Ljava/util/function/Consumer;)V
 HSPLjava/util/concurrent/CopyOnWriteArraySet;->isEmpty()Z
 HSPLjava/util/concurrent/CopyOnWriteArraySet;->iterator()Ljava/util/Iterator;
 HSPLjava/util/concurrent/CopyOnWriteArraySet;->remove(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/CopyOnWriteArraySet;->removeAll(Ljava/util/Collection;)Z
 HSPLjava/util/concurrent/CopyOnWriteArraySet;->size()I
 HSPLjava/util/concurrent/CountDownLatch$Sync;-><init>(I)V
 HSPLjava/util/concurrent/CountDownLatch$Sync;->getCount()I
@@ -41214,35 +20100,23 @@
 HSPLjava/util/concurrent/CountDownLatch;->await(JLjava/util/concurrent/TimeUnit;)Z
 HSPLjava/util/concurrent/CountDownLatch;->countDown()V
 HSPLjava/util/concurrent/CountDownLatch;->getCount()J
-HSPLjava/util/concurrent/DelayQueue;-><init>()V
-HSPLjava/util/concurrent/DelayQueue;->add(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/DelayQueue;->add(Ljava/util/concurrent/Delayed;)Z
-HSPLjava/util/concurrent/DelayQueue;->offer(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/DelayQueue;->offer(Ljava/util/concurrent/Delayed;)Z
-HSPLjava/util/concurrent/DelayQueue;->take()Ljava/lang/Object;
-HSPLjava/util/concurrent/DelayQueue;->take()Ljava/util/concurrent/Delayed;
 HSPLjava/util/concurrent/ExecutionException;-><init>(Ljava/lang/Throwable;)V
 HSPLjava/util/concurrent/Executors$DefaultThreadFactory;-><init>()V
 HSPLjava/util/concurrent/Executors$DefaultThreadFactory;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;-><init>(Ljava/util/concurrent/ExecutorService;)V
-HPLjava/util/concurrent/Executors$DelegatedExecutorService;->awaitTermination(JLjava/util/concurrent/TimeUnit;)Z
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->execute(Ljava/lang/Runnable;)V
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->isShutdown()Z
-HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->isTerminated()Z
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->shutdown()V
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->shutdownNow()Ljava/util/List;
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;
 HSPLjava/util/concurrent/Executors$DelegatedScheduledExecutorService;-><init>(Ljava/util/concurrent/ScheduledExecutorService;)V
 HSPLjava/util/concurrent/Executors$DelegatedScheduledExecutorService;->schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
-HSPLjava/util/concurrent/Executors$DelegatedScheduledExecutorService;->schedule(Ljava/util/concurrent/Callable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
 HSPLjava/util/concurrent/Executors$DelegatedScheduledExecutorService;->scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
-HSPLjava/util/concurrent/Executors$DelegatedScheduledExecutorService;->scheduleWithFixedDelay(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
 HSPLjava/util/concurrent/Executors$FinalizableDelegatedExecutorService;-><init>(Ljava/util/concurrent/ExecutorService;)V
 HSPLjava/util/concurrent/Executors$FinalizableDelegatedExecutorService;->finalize()V
 HSPLjava/util/concurrent/Executors$RunnableAdapter;-><init>(Ljava/lang/Runnable;Ljava/lang/Object;)V
 HSPLjava/util/concurrent/Executors$RunnableAdapter;->call()Ljava/lang/Object;
-HSPLjava/util/concurrent/Executors;->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;
 HSPLjava/util/concurrent/Executors;->newCachedThreadPool()Ljava/util/concurrent/ExecutorService;
@@ -41257,45 +20131,7 @@
 HSPLjava/util/concurrent/Executors;->newSingleThreadScheduledExecutor(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
 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$AuxState;-><init>()V
-HSPLjava/util/concurrent/ForkJoinPool$DefaultForkJoinWorkerThreadFactory;->newThread(Ljava/util/concurrent/ForkJoinPool;)Ljava/util/concurrent/ForkJoinWorkerThread;
-HSPLjava/util/concurrent/ForkJoinPool$WorkQueue;-><clinit>()V
-HSPLjava/util/concurrent/ForkJoinPool$WorkQueue;-><init>(Ljava/util/concurrent/ForkJoinPool;Ljava/util/concurrent/ForkJoinWorkerThread;)V
-PLjava/util/concurrent/ForkJoinPool$WorkQueue;->cancelAll()V
-HSPLjava/util/concurrent/ForkJoinPool$WorkQueue;->growArray()[Ljava/util/concurrent/ForkJoinTask;
-HSPLjava/util/concurrent/ForkJoinPool$WorkQueue;->localPopAndExec()V
-PLjava/util/concurrent/ForkJoinPool$WorkQueue;->poll()Ljava/util/concurrent/ForkJoinTask;
-HSPLjava/util/concurrent/ForkJoinPool$WorkQueue;->runTask(Ljava/util/concurrent/ForkJoinTask;)V
-HSPLjava/util/concurrent/ForkJoinPool$WorkQueue;->sharedPush(Ljava/util/concurrent/ForkJoinTask;)I
-HSPLjava/util/concurrent/ForkJoinPool;->awaitWork(Ljava/util/concurrent/ForkJoinPool$WorkQueue;)I
-HSPLjava/util/concurrent/ForkJoinPool;->createWorker(Z)Z
-PLjava/util/concurrent/ForkJoinPool;->deregisterWorker(Ljava/util/concurrent/ForkJoinWorkerThread;Ljava/lang/Throwable;)V
-HSPLjava/util/concurrent/ForkJoinPool;->execute(Ljava/lang/Runnable;)V
-HSPLjava/util/concurrent/ForkJoinPool;->externalPush(Ljava/util/concurrent/ForkJoinTask;)V
-HSPLjava/util/concurrent/ForkJoinPool;->externalSubmit(Ljava/util/concurrent/ForkJoinTask;)Ljava/util/concurrent/ForkJoinTask;
-HSPLjava/util/concurrent/ForkJoinPool;->inactivate(Ljava/util/concurrent/ForkJoinPool$WorkQueue;I)V
-HSPLjava/util/concurrent/ForkJoinPool;->managedBlock(Ljava/util/concurrent/ForkJoinPool$ManagedBlocker;)V
-HSPLjava/util/concurrent/ForkJoinPool;->registerWorker(Ljava/util/concurrent/ForkJoinWorkerThread;)Ljava/util/concurrent/ForkJoinPool$WorkQueue;
-HSPLjava/util/concurrent/ForkJoinPool;->runWorker(Ljava/util/concurrent/ForkJoinPool$WorkQueue;)V
-HSPLjava/util/concurrent/ForkJoinPool;->scan(Ljava/util/concurrent/ForkJoinPool$WorkQueue;III)I
-HSPLjava/util/concurrent/ForkJoinPool;->signalWork()V
-HSPLjava/util/concurrent/ForkJoinPool;->timedAwaitWork(Ljava/util/concurrent/ForkJoinPool$WorkQueue;J)I
-HSPLjava/util/concurrent/ForkJoinPool;->tryAddWorker(J)V
-HSPLjava/util/concurrent/ForkJoinPool;->tryCreateExternalQueue(I)V
-HSPLjava/util/concurrent/ForkJoinPool;->tryInitialize(Z)V
-PLjava/util/concurrent/ForkJoinPool;->tryTerminate(ZZ)I
 HSPLjava/util/concurrent/ForkJoinTask;-><init>()V
-PLjava/util/concurrent/ForkJoinTask;->compareAndSetForkJoinTaskTag(SS)Z
-HSPLjava/util/concurrent/ForkJoinTask;->doExec()I
-PLjava/util/concurrent/ForkJoinTask;->expungeStaleExceptions()V
-PLjava/util/concurrent/ForkJoinTask;->helpExpungeStaleExceptions()V
-HSPLjava/util/concurrent/ForkJoinTask;->setCompletion(I)I
-HSPLjava/util/concurrent/ForkJoinWorkerThread;-><clinit>()V
-HSPLjava/util/concurrent/ForkJoinWorkerThread;-><init>(Ljava/util/concurrent/ForkJoinPool;)V
-HSPLjava/util/concurrent/ForkJoinWorkerThread;->afterTopLevelExec()V
-HSPLjava/util/concurrent/ForkJoinWorkerThread;->onStart()V
-PLjava/util/concurrent/ForkJoinWorkerThread;->onTermination(Ljava/lang/Throwable;)V
-HSPLjava/util/concurrent/ForkJoinWorkerThread;->run()V
 HSPLjava/util/concurrent/FutureTask$WaitNode;-><init>()V
 HSPLjava/util/concurrent/FutureTask;-><init>(Ljava/lang/Runnable;Ljava/lang/Object;)V
 HSPLjava/util/concurrent/FutureTask;-><init>(Ljava/util/concurrent/Callable;)V
@@ -41313,106 +20149,44 @@
 HSPLjava/util/concurrent/FutureTask;->run()V
 HSPLjava/util/concurrent/FutureTask;->runAndReset()Z
 HSPLjava/util/concurrent/FutureTask;->set(Ljava/lang/Object;)V
-PLjava/util/concurrent/FutureTask;->setException(Ljava/lang/Throwable;)V
-HSPLjava/util/concurrent/LinkedBlockingDeque$AbstractItr;-><init>(Ljava/util/concurrent/LinkedBlockingDeque;)V
-HPLjava/util/concurrent/LinkedBlockingDeque$AbstractItr;->advance()V
-HSPLjava/util/concurrent/LinkedBlockingDeque$AbstractItr;->hasNext()Z
-PLjava/util/concurrent/LinkedBlockingDeque$AbstractItr;->next()Ljava/lang/Object;
-PLjava/util/concurrent/LinkedBlockingDeque$AbstractItr;->succ(Ljava/util/concurrent/LinkedBlockingDeque$Node;)Ljava/util/concurrent/LinkedBlockingDeque$Node;
-HSPLjava/util/concurrent/LinkedBlockingDeque$Itr;-><init>(Ljava/util/concurrent/LinkedBlockingDeque;)V
-HSPLjava/util/concurrent/LinkedBlockingDeque$Itr;-><init>(Ljava/util/concurrent/LinkedBlockingDeque;Ljava/util/concurrent/LinkedBlockingDeque$1;)V
-HSPLjava/util/concurrent/LinkedBlockingDeque$Itr;->firstNode()Ljava/util/concurrent/LinkedBlockingDeque$Node;
-PLjava/util/concurrent/LinkedBlockingDeque$Itr;->nextNode(Ljava/util/concurrent/LinkedBlockingDeque$Node;)Ljava/util/concurrent/LinkedBlockingDeque$Node;
+HSPLjava/util/concurrent/FutureTask;->setException(Ljava/lang/Throwable;)V
 HSPLjava/util/concurrent/LinkedBlockingDeque$Node;-><init>(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/LinkedBlockingDeque;-><init>()V
 HSPLjava/util/concurrent/LinkedBlockingDeque;-><init>(I)V
-HSPLjava/util/concurrent/LinkedBlockingDeque;->add(Ljava/lang/Object;)Z
-PLjava/util/concurrent/LinkedBlockingDeque;->addFirst(Ljava/lang/Object;)V
-HSPLjava/util/concurrent/LinkedBlockingDeque;->addLast(Ljava/lang/Object;)V
-HSPLjava/util/concurrent/LinkedBlockingDeque;->clear()V
-HSPLjava/util/concurrent/LinkedBlockingDeque;->drainTo(Ljava/util/Collection;)I
-HSPLjava/util/concurrent/LinkedBlockingDeque;->drainTo(Ljava/util/Collection;I)I
-HPLjava/util/concurrent/LinkedBlockingDeque;->getFirst()Ljava/lang/Object;
-HPLjava/util/concurrent/LinkedBlockingDeque;->getLast()Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingDeque;->iterator()Ljava/util/Iterator;
-PLjava/util/concurrent/LinkedBlockingDeque;->linkFirst(Ljava/util/concurrent/LinkedBlockingDeque$Node;)Z
 HSPLjava/util/concurrent/LinkedBlockingDeque;->linkLast(Ljava/util/concurrent/LinkedBlockingDeque$Node;)Z
 HSPLjava/util/concurrent/LinkedBlockingDeque;->offer(Ljava/lang/Object;)Z
-PLjava/util/concurrent/LinkedBlockingDeque;->offerFirst(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/LinkedBlockingDeque;->offerLast(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/LinkedBlockingDeque;->peek()Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingDeque;->peekFirst()Ljava/lang/Object;
-HPLjava/util/concurrent/LinkedBlockingDeque;->peekLast()Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingDeque;->poll()Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingDeque;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingDeque;->pollFirst()Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingDeque;->pollFirst(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
-PLjava/util/concurrent/LinkedBlockingDeque;->pop()Ljava/lang/Object;
-HPLjava/util/concurrent/LinkedBlockingDeque;->put(Ljava/lang/Object;)V
-HPLjava/util/concurrent/LinkedBlockingDeque;->putLast(Ljava/lang/Object;)V
-PLjava/util/concurrent/LinkedBlockingDeque;->remainingCapacity()I
-HPLjava/util/concurrent/LinkedBlockingDeque;->remove()Ljava/lang/Object;
-HPLjava/util/concurrent/LinkedBlockingDeque;->remove(Ljava/lang/Object;)Z
-PLjava/util/concurrent/LinkedBlockingDeque;->removeFirst()Ljava/lang/Object;
-HPLjava/util/concurrent/LinkedBlockingDeque;->removeFirstOccurrence(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/LinkedBlockingDeque;->size()I
-HSPLjava/util/concurrent/LinkedBlockingDeque;->take()Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingDeque;->takeFirst()Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingDeque;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
-HPLjava/util/concurrent/LinkedBlockingDeque;->unlink(Ljava/util/concurrent/LinkedBlockingDeque$Node;)V
 HSPLjava/util/concurrent/LinkedBlockingDeque;->unlinkFirst()Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingQueue$Itr;-><init>(Ljava/util/concurrent/LinkedBlockingQueue;)V
-HSPLjava/util/concurrent/LinkedBlockingQueue$Itr;->hasNext()Z
-HSPLjava/util/concurrent/LinkedBlockingQueue$Itr;->next()Ljava/lang/Object;
 HSPLjava/util/concurrent/LinkedBlockingQueue$Node;-><init>(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/LinkedBlockingQueue;-><init>()V
 HSPLjava/util/concurrent/LinkedBlockingQueue;-><init>(I)V
-HSPLjava/util/concurrent/LinkedBlockingQueue;->clear()V
 HSPLjava/util/concurrent/LinkedBlockingQueue;->dequeue()Ljava/lang/Object;
 HSPLjava/util/concurrent/LinkedBlockingQueue;->drainTo(Ljava/util/Collection;)I
 HSPLjava/util/concurrent/LinkedBlockingQueue;->drainTo(Ljava/util/Collection;I)I
 HSPLjava/util/concurrent/LinkedBlockingQueue;->enqueue(Ljava/util/concurrent/LinkedBlockingQueue$Node;)V
 HSPLjava/util/concurrent/LinkedBlockingQueue;->fullyLock()V
 HSPLjava/util/concurrent/LinkedBlockingQueue;->fullyUnlock()V
-HSPLjava/util/concurrent/LinkedBlockingQueue;->iterator()Ljava/util/Iterator;
 HSPLjava/util/concurrent/LinkedBlockingQueue;->offer(Ljava/lang/Object;)Z
-HPLjava/util/concurrent/LinkedBlockingQueue;->offer(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z
-HSPLjava/util/concurrent/LinkedBlockingQueue;->peek()Ljava/lang/Object;
 HSPLjava/util/concurrent/LinkedBlockingQueue;->poll()Ljava/lang/Object;
 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;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/LinkedBlockingQueue;->signalNotEmpty()V
-HSPLjava/util/concurrent/LinkedBlockingQueue;->signalNotFull()V
 HSPLjava/util/concurrent/LinkedBlockingQueue;->size()I
 HSPLjava/util/concurrent/LinkedBlockingQueue;->take()Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingQueue;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingQueue;->unlink(Ljava/util/concurrent/LinkedBlockingQueue$Node;Ljava/util/concurrent/LinkedBlockingQueue$Node;)V
 HSPLjava/util/concurrent/PriorityBlockingQueue;-><init>()V
-HSPLjava/util/concurrent/PriorityBlockingQueue;-><init>(I)V
 HSPLjava/util/concurrent/PriorityBlockingQueue;-><init>(ILjava/util/Comparator;)V
 HSPLjava/util/concurrent/PriorityBlockingQueue;->add(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/PriorityBlockingQueue;->dequeue()Ljava/lang/Object;
-HSPLjava/util/concurrent/PriorityBlockingQueue;->indexOf(Ljava/lang/Object;)I
 HSPLjava/util/concurrent/PriorityBlockingQueue;->offer(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/PriorityBlockingQueue;->peek()Ljava/lang/Object;
 HSPLjava/util/concurrent/PriorityBlockingQueue;->poll()Ljava/lang/Object;
-HPLjava/util/concurrent/PriorityBlockingQueue;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLjava/util/concurrent/PriorityBlockingQueue;->put(Ljava/lang/Object;)V
-HSPLjava/util/concurrent/PriorityBlockingQueue;->remove(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/PriorityBlockingQueue;->removeAt(I)V
 HSPLjava/util/concurrent/PriorityBlockingQueue;->siftDownComparable(ILjava/lang/Object;[Ljava/lang/Object;I)V
-HSPLjava/util/concurrent/PriorityBlockingQueue;->siftDownUsingComparator(ILjava/lang/Object;[Ljava/lang/Object;ILjava/util/Comparator;)V
 HSPLjava/util/concurrent/PriorityBlockingQueue;->siftUpComparable(ILjava/lang/Object;[Ljava/lang/Object;)V
-HSPLjava/util/concurrent/PriorityBlockingQueue;->siftUpUsingComparator(ILjava/lang/Object;[Ljava/lang/Object;Ljava/util/Comparator;)V
-HSPLjava/util/concurrent/PriorityBlockingQueue;->size()I
 HSPLjava/util/concurrent/PriorityBlockingQueue;->take()Ljava/lang/Object;
-HSPLjava/util/concurrent/PriorityBlockingQueue;->tryGrow([Ljava/lang/Object;I)V
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue$Itr;-><init>(Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;[Ljava/util/concurrent/RunnableScheduledFuture;)V
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue$Itr;->hasNext()Z
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue$Itr;->next()Ljava/lang/Object;
-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
@@ -41434,7 +20208,6 @@
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->take()Ljava/lang/Object;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->take()Ljava/util/concurrent/RunnableScheduledFuture;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->toArray()[Ljava/lang/Object;
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->toArray([Ljava/lang/Object;)[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
@@ -41465,28 +20238,18 @@
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->shutdown()V
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->shutdownNow()Ljava/util/List;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->triggerTime(J)J
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->triggerTime(JLjava/util/concurrent/TimeUnit;)J
-HSPLjava/util/concurrent/Semaphore$FairSync;-><init>(I)V
-HSPLjava/util/concurrent/Semaphore$FairSync;->tryAcquireShared(I)I
 HSPLjava/util/concurrent/Semaphore$NonfairSync;-><init>(I)V
 HSPLjava/util/concurrent/Semaphore$NonfairSync;->tryAcquireShared(I)I
 HSPLjava/util/concurrent/Semaphore$Sync;-><init>(I)V
-HSPLjava/util/concurrent/Semaphore$Sync;->getPermits()I
 HSPLjava/util/concurrent/Semaphore$Sync;->nonfairTryAcquireShared(I)I
 HSPLjava/util/concurrent/Semaphore$Sync;->tryReleaseShared(I)Z
 HSPLjava/util/concurrent/Semaphore;-><init>(I)V
 HSPLjava/util/concurrent/Semaphore;-><init>(IZ)V
 HSPLjava/util/concurrent/Semaphore;->acquire()V
 HSPLjava/util/concurrent/Semaphore;->acquireUninterruptibly()V
-HSPLjava/util/concurrent/Semaphore;->availablePermits()I
 HSPLjava/util/concurrent/Semaphore;->release()V
-HSPLjava/util/concurrent/Semaphore;->release(I)V
-HSPLjava/util/concurrent/Semaphore;->tryAcquire()Z
-HSPLjava/util/concurrent/Semaphore;->tryAcquire(I)Z
-HPLjava/util/concurrent/Semaphore;->tryAcquire(IJLjava/util/concurrent/TimeUnit;)Z
-HSPLjava/util/concurrent/Semaphore;->tryAcquire(JLjava/util/concurrent/TimeUnit;)Z
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack$SNode;-><init>(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack$SNode;->casNext(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;)Z
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack$SNode;->isCancelled()Z
@@ -41503,30 +20266,16 @@
 HSPLjava/util/concurrent/SynchronousQueue$Transferer;-><init>()V
 HSPLjava/util/concurrent/SynchronousQueue;-><init>()V
 HSPLjava/util/concurrent/SynchronousQueue;-><init>(Z)V
-HSPLjava/util/concurrent/SynchronousQueue;->drainTo(Ljava/util/Collection;)I
 HSPLjava/util/concurrent/SynchronousQueue;->isEmpty()Z
 HSPLjava/util/concurrent/SynchronousQueue;->offer(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/SynchronousQueue;->poll()Ljava/lang/Object;
 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;
-HPLjava/util/concurrent/ThreadLocalRandom;->advanceProbe(I)I
-HSPLjava/util/concurrent/ThreadLocalRandom;->current()Ljava/util/concurrent/ThreadLocalRandom;
-HSPLjava/util/concurrent/ThreadLocalRandom;->getProbe()I
-HSPLjava/util/concurrent/ThreadLocalRandom;->localInit()V
 HSPLjava/util/concurrent/ThreadLocalRandom;->mix32(J)I
-HSPLjava/util/concurrent/ThreadLocalRandom;->mix64(J)J
-HSPLjava/util/concurrent/ThreadLocalRandom;->nextDouble()D
 HSPLjava/util/concurrent/ThreadLocalRandom;->nextInt()I
-HSPLjava/util/concurrent/ThreadLocalRandom;->nextSecondarySeed()I
 HSPLjava/util/concurrent/ThreadLocalRandom;->nextSeed()J
-HPLjava/util/concurrent/ThreadPoolExecutor$AbortPolicy;-><init>()V
 HSPLjava/util/concurrent/ThreadPoolExecutor$DiscardPolicy;-><init>()V
-PLjava/util/concurrent/ThreadPoolExecutor$DiscardPolicy;->rejectedExecution(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;-><init>(Ljava/util/concurrent/ThreadPoolExecutor;Ljava/lang/Runnable;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->interruptIfStarted()V
-HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->isHeldExclusively()Z
-HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->isLocked()Z
 HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->lock()V
 HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->run()V
 HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->tryAcquire(I)Z
@@ -41534,14 +20283,12 @@
 HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->tryRelease(I)Z
 HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->unlock()V
 HSPLjava/util/concurrent/ThreadPoolExecutor;-><init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;)V
-HSPLjava/util/concurrent/ThreadPoolExecutor;-><init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/RejectedExecutionHandler;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;-><init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;-><init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->addWorker(Ljava/lang/Runnable;Z)Z
 HSPLjava/util/concurrent/ThreadPoolExecutor;->advanceRunState(I)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->afterExecute(Ljava/lang/Runnable;Ljava/lang/Throwable;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->allowCoreThreadTimeOut(Z)V
-PLjava/util/concurrent/ThreadPoolExecutor;->awaitTermination(JLjava/util/concurrent/TimeUnit;)Z
 HSPLjava/util/concurrent/ThreadPoolExecutor;->beforeExecute(Ljava/lang/Thread;Ljava/lang/Runnable;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->checkShutdownAccess()V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->compareAndDecrementWorkerCount(I)Z
@@ -41552,16 +20299,8 @@
 HSPLjava/util/concurrent/ThreadPoolExecutor;->ensurePrestart()V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->finalize()V
-HSPLjava/util/concurrent/ThreadPoolExecutor;->getActiveCount()I
-HSPLjava/util/concurrent/ThreadPoolExecutor;->getCompletedTaskCount()J
-HSPLjava/util/concurrent/ThreadPoolExecutor;->getCorePoolSize()I
-HSPLjava/util/concurrent/ThreadPoolExecutor;->getLargestPoolSize()I
-HSPLjava/util/concurrent/ThreadPoolExecutor;->getMaximumPoolSize()I
-HSPLjava/util/concurrent/ThreadPoolExecutor;->getPoolSize()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;->getTaskCount()J
 HSPLjava/util/concurrent/ThreadPoolExecutor;->getThreadFactory()Ljava/util/concurrent/ThreadFactory;
 HSPLjava/util/concurrent/ThreadPoolExecutor;->interruptIdleWorkers()V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->interruptIdleWorkers(Z)V
@@ -41569,20 +20308,15 @@
 HSPLjava/util/concurrent/ThreadPoolExecutor;->isRunning(I)Z
 HSPLjava/util/concurrent/ThreadPoolExecutor;->isRunningOrShutdown(Z)Z
 HSPLjava/util/concurrent/ThreadPoolExecutor;->isShutdown()Z
-HSPLjava/util/concurrent/ThreadPoolExecutor;->isTerminated()Z
-HSPLjava/util/concurrent/ThreadPoolExecutor;->isTerminating()Z
 HSPLjava/util/concurrent/ThreadPoolExecutor;->onShutdown()V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->prestartAllCoreThreads()I
-HSPLjava/util/concurrent/ThreadPoolExecutor;->prestartCoreThread()Z
 HSPLjava/util/concurrent/ThreadPoolExecutor;->processWorkerExit(Ljava/util/concurrent/ThreadPoolExecutor$Worker;Z)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->purge()V
-PLjava/util/concurrent/ThreadPoolExecutor;->reject(Ljava/lang/Runnable;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->remove(Ljava/lang/Runnable;)Z
 HSPLjava/util/concurrent/ThreadPoolExecutor;->runStateAtLeast(II)Z
 HSPLjava/util/concurrent/ThreadPoolExecutor;->runStateLessThan(II)Z
 HSPLjava/util/concurrent/ThreadPoolExecutor;->runStateOf(I)I
 HSPLjava/util/concurrent/ThreadPoolExecutor;->runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V
-HSPLjava/util/concurrent/ThreadPoolExecutor;->setCorePoolSize(I)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->setKeepAliveTime(JLjava/util/concurrent/TimeUnit;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->setMaximumPoolSize(I)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->setRejectedExecutionHandler(Ljava/util/concurrent/RejectedExecutionHandler;)V
@@ -41590,60 +20324,38 @@
 HSPLjava/util/concurrent/ThreadPoolExecutor;->shutdown()V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->shutdownNow()Ljava/util/List;
 HSPLjava/util/concurrent/ThreadPoolExecutor;->terminated()V
-PLjava/util/concurrent/ThreadPoolExecutor;->toString()Ljava/lang/String;
 HSPLjava/util/concurrent/ThreadPoolExecutor;->tryTerminate()V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->workerCountOf(I)I
 HSPLjava/util/concurrent/TimeUnit$1;->convert(JLjava/util/concurrent/TimeUnit;)J
-PLjava/util/concurrent/TimeUnit$1;->excessNanos(JJ)I
-HPLjava/util/concurrent/TimeUnit$1;->toDays(J)J
-HPLjava/util/concurrent/TimeUnit$1;->toHours(J)J
 HSPLjava/util/concurrent/TimeUnit$1;->toMicros(J)J
 HSPLjava/util/concurrent/TimeUnit$1;->toMillis(J)J
-HPLjava/util/concurrent/TimeUnit$1;->toMinutes(J)J
 HSPLjava/util/concurrent/TimeUnit$1;->toNanos(J)J
 HSPLjava/util/concurrent/TimeUnit$1;->toSeconds(J)J
 HSPLjava/util/concurrent/TimeUnit$2;->convert(JLjava/util/concurrent/TimeUnit;)J
-HPLjava/util/concurrent/TimeUnit$2;->toHours(J)J
-HSPLjava/util/concurrent/TimeUnit$2;->toMicros(J)J
 HSPLjava/util/concurrent/TimeUnit$2;->toMillis(J)J
-HSPLjava/util/concurrent/TimeUnit$2;->toMinutes(J)J
-HSPLjava/util/concurrent/TimeUnit$2;->toNanos(J)J
-HPLjava/util/concurrent/TimeUnit$2;->toSeconds(J)J
 HSPLjava/util/concurrent/TimeUnit$3;->convert(JLjava/util/concurrent/TimeUnit;)J
-HSPLjava/util/concurrent/TimeUnit$3;->excessNanos(JJ)I
 HSPLjava/util/concurrent/TimeUnit$3;->toDays(J)J
-HSPLjava/util/concurrent/TimeUnit$3;->toHours(J)J
 HSPLjava/util/concurrent/TimeUnit$3;->toMicros(J)J
 HSPLjava/util/concurrent/TimeUnit$3;->toMillis(J)J
 HSPLjava/util/concurrent/TimeUnit$3;->toMinutes(J)J
 HSPLjava/util/concurrent/TimeUnit$3;->toNanos(J)J
 HSPLjava/util/concurrent/TimeUnit$3;->toSeconds(J)J
 HSPLjava/util/concurrent/TimeUnit$4;->convert(JLjava/util/concurrent/TimeUnit;)J
-HPLjava/util/concurrent/TimeUnit$4;->toDays(J)J
 HSPLjava/util/concurrent/TimeUnit$4;->toMicros(J)J
 HSPLjava/util/concurrent/TimeUnit$4;->toMillis(J)J
-HSPLjava/util/concurrent/TimeUnit$4;->toMinutes(J)J
 HSPLjava/util/concurrent/TimeUnit$4;->toNanos(J)J
 HSPLjava/util/concurrent/TimeUnit$4;->toSeconds(J)J
 HSPLjava/util/concurrent/TimeUnit$5;->convert(JLjava/util/concurrent/TimeUnit;)J
-HSPLjava/util/concurrent/TimeUnit$5;->toMicros(J)J
 HSPLjava/util/concurrent/TimeUnit$5;->toMillis(J)J
 HSPLjava/util/concurrent/TimeUnit$5;->toNanos(J)J
 HSPLjava/util/concurrent/TimeUnit$5;->toSeconds(J)J
-HSPLjava/util/concurrent/TimeUnit$6;->convert(JLjava/util/concurrent/TimeUnit;)J
-HPLjava/util/concurrent/TimeUnit$6;->toMicros(J)J
 HSPLjava/util/concurrent/TimeUnit$6;->toMillis(J)J
-HSPLjava/util/concurrent/TimeUnit$6;->toMinutes(J)J
 HSPLjava/util/concurrent/TimeUnit$6;->toNanos(J)J
 HSPLjava/util/concurrent/TimeUnit$6;->toSeconds(J)J
-HSPLjava/util/concurrent/TimeUnit$7;->convert(JLjava/util/concurrent/TimeUnit;)J
-HSPLjava/util/concurrent/TimeUnit$7;->toHours(J)J
 HSPLjava/util/concurrent/TimeUnit$7;->toMillis(J)J
 HSPLjava/util/concurrent/TimeUnit$7;->toMinutes(J)J
 HSPLjava/util/concurrent/TimeUnit$7;->toNanos(J)J
 HSPLjava/util/concurrent/TimeUnit$7;->toSeconds(J)J
-HSPLjava/util/concurrent/TimeUnit;->sleep(J)V
-HSPLjava/util/concurrent/TimeUnit;->values()[Ljava/util/concurrent/TimeUnit;
 HSPLjava/util/concurrent/TimeUnit;->x(JJJ)J
 HSPLjava/util/concurrent/TimeoutException;-><init>()V
 HSPLjava/util/concurrent/TimeoutException;-><init>(Ljava/lang/String;)V
@@ -41654,7 +20366,6 @@
 HSPLjava/util/concurrent/atomic/AtomicBoolean;->getAndSet(Z)Z
 HSPLjava/util/concurrent/atomic/AtomicBoolean;->lazySet(Z)V
 HSPLjava/util/concurrent/atomic/AtomicBoolean;->set(Z)V
-HSPLjava/util/concurrent/atomic/AtomicBoolean;->toString()Ljava/lang/String;
 HSPLjava/util/concurrent/atomic/AtomicInteger;-><init>()V
 HSPLjava/util/concurrent/atomic/AtomicInteger;-><init>(I)V
 HSPLjava/util/concurrent/atomic/AtomicInteger;->addAndGet(I)I
@@ -41665,29 +20376,15 @@
 HSPLjava/util/concurrent/atomic/AtomicInteger;->getAndDecrement()I
 HSPLjava/util/concurrent/atomic/AtomicInteger;->getAndIncrement()I
 HSPLjava/util/concurrent/atomic/AtomicInteger;->getAndSet(I)I
-HSPLjava/util/concurrent/atomic/AtomicInteger;->getAndUpdate(Ljava/util/function/IntUnaryOperator;)I
 HSPLjava/util/concurrent/atomic/AtomicInteger;->incrementAndGet()I
-HSPLjava/util/concurrent/atomic/AtomicInteger;->intValue()I
 HSPLjava/util/concurrent/atomic/AtomicInteger;->lazySet(I)V
 HSPLjava/util/concurrent/atomic/AtomicInteger;->set(I)V
-HSPLjava/util/concurrent/atomic/AtomicInteger;->toString()Ljava/lang/String;
-HSPLjava/util/concurrent/atomic/AtomicIntegerArray;-><init>(I)V
-HSPLjava/util/concurrent/atomic/AtomicIntegerArray;->addAndGet(II)I
-HSPLjava/util/concurrent/atomic/AtomicIntegerArray;->byteOffset(I)J
-HSPLjava/util/concurrent/atomic/AtomicIntegerArray;->checkedByteOffset(I)J
-HPLjava/util/concurrent/atomic/AtomicIntegerArray;->get(I)I
-HSPLjava/util/concurrent/atomic/AtomicIntegerArray;->getAndAdd(II)I
-HPLjava/util/concurrent/atomic/AtomicIntegerArray;->getRaw(J)I
-HSPLjava/util/concurrent/atomic/AtomicIntegerArray;->incrementAndGet(I)I
-HPLjava/util/concurrent/atomic/AtomicIntegerArray;->length()I
-HSPLjava/util/concurrent/atomic/AtomicIntegerArray;->set(II)V
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;-><init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)V
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->accessCheck(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->compareAndSet(Ljava/lang/Object;II)Z
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->decrementAndGet(Ljava/lang/Object;)I
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->getAndAdd(Ljava/lang/Object;I)I
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->getAndSet(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
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
@@ -41696,20 +20393,15 @@
 HSPLjava/util/concurrent/atomic/AtomicLong;->addAndGet(J)J
 HSPLjava/util/concurrent/atomic/AtomicLong;->compareAndSet(JJ)Z
 HSPLjava/util/concurrent/atomic/AtomicLong;->decrementAndGet()J
-HPLjava/util/concurrent/atomic/AtomicLong;->doubleValue()D
 HSPLjava/util/concurrent/atomic/AtomicLong;->get()J
 HSPLjava/util/concurrent/atomic/AtomicLong;->getAndAdd(J)J
-HPLjava/util/concurrent/atomic/AtomicLong;->getAndDecrement()J
 HSPLjava/util/concurrent/atomic/AtomicLong;->getAndIncrement()J
 HSPLjava/util/concurrent/atomic/AtomicLong;->getAndSet(J)J
 HSPLjava/util/concurrent/atomic/AtomicLong;->incrementAndGet()J
 HSPLjava/util/concurrent/atomic/AtomicLong;->lazySet(J)V
 HSPLjava/util/concurrent/atomic/AtomicLong;->set(J)V
-PLjava/util/concurrent/atomic/AtomicLong;->toString()Ljava/lang/String;
 HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;-><init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)V
 HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->accessCheck(Ljava/lang/Object;)V
-HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->addAndGet(Ljava/lang/Object;J)J
-HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
 HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->getAndAdd(Ljava/lang/Object;J)J
 HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->getAndIncrement(Ljava/lang/Object;)J
 HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->incrementAndGet(Ljava/lang/Object;)J
@@ -41720,17 +20412,12 @@
 HSPLjava/util/concurrent/atomic/AtomicReference;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
 HSPLjava/util/concurrent/atomic/AtomicReference;->getAndSet(Ljava/lang/Object;)Ljava/lang/Object;
-PLjava/util/concurrent/atomic/AtomicReference;->getAndUpdate(Ljava/util/function/UnaryOperator;)Ljava/lang/Object;
 HSPLjava/util/concurrent/atomic/AtomicReference;->lazySet(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/atomic/AtomicReference;->set(Ljava/lang/Object;)V
-HSPLjava/util/concurrent/atomic/AtomicReference;->toString()Ljava/lang/String;
 HSPLjava/util/concurrent/atomic/AtomicReferenceArray;-><init>(I)V
 HSPLjava/util/concurrent/atomic/AtomicReferenceArray;->byteOffset(I)J
 HSPLjava/util/concurrent/atomic/AtomicReferenceArray;->checkedByteOffset(I)J
-HSPLjava/util/concurrent/atomic/AtomicReferenceArray;->compareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/atomic/AtomicReferenceArray;->compareAndSetRaw(JLjava/lang/Object;Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/atomic/AtomicReferenceArray;->get(I)Ljava/lang/Object;
-HSPLjava/util/concurrent/atomic/AtomicReferenceArray;->getAndSet(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/concurrent/atomic/AtomicReferenceArray;->getRaw(J)Ljava/lang/Object;
 HSPLjava/util/concurrent/atomic/AtomicReferenceArray;->lazySet(ILjava/lang/Object;)V
 HSPLjava/util/concurrent/atomic/AtomicReferenceArray;->length()I
@@ -41738,21 +20425,13 @@
 HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl;-><init>(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)V
 HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl;->accessCheck(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl;->getAndSet(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl;->lazySet(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl;->valueCheck(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater;-><init>()V
 HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
 HSPLjava/util/concurrent/atomic/LongAdder;-><init>()V
 HSPLjava/util/concurrent/atomic/LongAdder;->add(J)V
-PLjava/util/concurrent/atomic/Striped64$Cell;-><clinit>()V
-PLjava/util/concurrent/atomic/Striped64$Cell;-><init>(J)V
-PLjava/util/concurrent/atomic/Striped64$Cell;->cas(JJ)Z
 HSPLjava/util/concurrent/atomic/Striped64;-><init>()V
 HSPLjava/util/concurrent/atomic/Striped64;->casBase(JJ)Z
-PLjava/util/concurrent/atomic/Striped64;->casCellsBusy()Z
-PLjava/util/concurrent/atomic/Striped64;->getProbe()I
-PLjava/util/concurrent/atomic/Striped64;->longAccumulate(JLjava/util/function/LongBinaryOperator;Z)V
 HSPLjava/util/concurrent/locks/AbstractOwnableSynchronizer;-><init>()V
 HSPLjava/util/concurrent/locks/AbstractOwnableSynchronizer;->getExclusiveOwnerThread()Ljava/lang/Thread;
 HSPLjava/util/concurrent/locks/AbstractOwnableSynchronizer;->setExclusiveOwnerThread(Ljava/lang/Thread;)V
@@ -41763,8 +20442,6 @@
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->checkInterruptWhileWaiting(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)I
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->doSignal(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->doSignalAll(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
-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;->reportInterruptAfterWait(I)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->signal()V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->signalAll()V
@@ -41788,7 +20465,6 @@
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->compareAndSetState(II)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->compareAndSetTail(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doAcquireInterruptibly(I)V
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doAcquireNanos(IJ)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doAcquireShared(I)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doAcquireSharedInterruptibly(I)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doAcquireSharedNanos(IJ)Z
@@ -41798,10 +20474,8 @@
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->fullyRelease(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)I
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->getState()I
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->hasQueuedPredecessors()Z
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->hasWaiters(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->initializeSyncQueue()V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->isOnSyncQueue(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->owns(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->parkAndCheckInterrupt()Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->release(I)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->releaseShared(I)Z
@@ -41812,37 +20486,27 @@
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->shouldParkAfterFailedAcquire(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->transferAfterCancelledWait(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->transferForSignal(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->tryAcquireNanos(IJ)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->tryAcquireSharedNanos(IJ)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->unparkSuccessor(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
 HSPLjava/util/concurrent/locks/LockSupport;->park(Ljava/lang/Object;)V
-HSPLjava/util/concurrent/locks/LockSupport;->parkNanos(J)V
 HSPLjava/util/concurrent/locks/LockSupport;->parkNanos(Ljava/lang/Object;J)V
-HSPLjava/util/concurrent/locks/LockSupport;->parkUntil(Ljava/lang/Object;J)V
 HSPLjava/util/concurrent/locks/LockSupport;->setBlocker(Ljava/lang/Thread;Ljava/lang/Object;)V
 HSPLjava/util/concurrent/locks/LockSupport;->unpark(Ljava/lang/Thread;)V
-HSPLjava/util/concurrent/locks/ReentrantLock$FairSync;-><init>()V
-HSPLjava/util/concurrent/locks/ReentrantLock$FairSync;->lock()V
-HSPLjava/util/concurrent/locks/ReentrantLock$FairSync;->tryAcquire(I)Z
 HSPLjava/util/concurrent/locks/ReentrantLock$NonfairSync;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantLock$NonfairSync;->lock()V
 HSPLjava/util/concurrent/locks/ReentrantLock$NonfairSync;->tryAcquire(I)Z
 HSPLjava/util/concurrent/locks/ReentrantLock$Sync;-><init>()V
-HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->getHoldCount()I
 HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->isHeldExclusively()Z
 HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->newCondition()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
 HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->nonfairTryAcquire(I)Z
 HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->tryRelease(I)Z
 HSPLjava/util/concurrent/locks/ReentrantLock;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantLock;-><init>(Z)V
-HSPLjava/util/concurrent/locks/ReentrantLock;->getHoldCount()I
-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
 HSPLjava/util/concurrent/locks/ReentrantLock;->lockInterruptibly()V
 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
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;->readerShouldBlock()Z
@@ -41852,8 +20516,6 @@
 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;->lockInterruptibly()V
-HPLjava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;->tryLock()Z
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;->unlock()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync$HoldCounter;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;-><init>()V
@@ -41866,14 +20528,10 @@
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->sharedCount(I)I
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryAcquire(I)Z
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryAcquireShared(I)I
-HPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryReadLock()Z
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryRelease(I)Z
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryReleaseShared(I)Z
-HPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryWriteLock()Z
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;-><init>(Ljava/util/concurrent/locks/ReentrantReadWriteLock;)V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;->lock()V
-HPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;->lockInterruptibly()V
-HPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;->tryLock()Z
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;->unlock()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;-><init>(Z)V
@@ -41882,27 +20540,6 @@
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;->readLock()Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;->writeLock()Ljava/util/concurrent/locks/Lock;
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;->writeLock()Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
-PLjava/util/function/-$$Lambda$BinaryOperator$V_WUclL0kAOZvMw9EtWtwAvmNJc;-><init>(Ljava/util/Comparator;)V
-PLjava/util/function/-$$Lambda$BinaryOperator$WKN0kahVeFfmJEk_tKszY8tRayo;-><init>(Ljava/util/Comparator;)V
-HPLjava/util/function/-$$Lambda$BinaryOperator$WKN0kahVeFfmJEk_tKszY8tRayo;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/function/-$$Lambda$DoubleUnaryOperator$EzzlhUGRoL66wVBCG-_euZgC-CA;-><init>(Ljava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;)V
-HPLjava/util/function/-$$Lambda$Function$1mm3dZ9IMG2T6zAULCCEh3eoHSY;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/function/-$$Lambda$Predicate$17UUIF1CH_K9duk0ChtjSwOycuM;-><init>(Ljava/util/function/Predicate;Ljava/util/function/Predicate;)V
-HSPLjava/util/function/-$$Lambda$Predicate$17UUIF1CH_K9duk0ChtjSwOycuM;->test(Ljava/lang/Object;)Z
-PLjava/util/function/-$$Lambda$Predicate$GyIVQ08CWbeMZxHDkkrN-5apRkc;-><init>(Ljava/util/function/Predicate;Ljava/util/function/Predicate;)V
-PLjava/util/function/-$$Lambda$Predicate$GyIVQ08CWbeMZxHDkkrN-5apRkc;->test(Ljava/lang/Object;)Z
-HPLjava/util/function/BinaryOperator;->lambda$minBy$0(Ljava/util/Comparator;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLjava/util/function/BinaryOperator;->maxBy(Ljava/util/Comparator;)Ljava/util/function/BinaryOperator;
-HPLjava/util/function/BinaryOperator;->minBy(Ljava/util/Comparator;)Ljava/util/function/BinaryOperator;
-HSPLjava/util/function/DoubleUnaryOperator;->andThen(Ljava/util/function/DoubleUnaryOperator;)Ljava/util/function/DoubleUnaryOperator;
-HPLjava/util/function/Function;->andThen(Ljava/util/function/Function;)Ljava/util/function/Function;
-HPLjava/util/function/Function;->identity()Ljava/util/function/Function;
-HPLjava/util/function/Function;->lambda$andThen$1(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/lang/Object;)Ljava/lang/Object;
-HPLjava/util/function/Function;->lambda$identity$2(Ljava/lang/Object;)Ljava/lang/Object;
-PLjava/util/function/Predicate;->and(Ljava/util/function/Predicate;)Ljava/util/function/Predicate;
-PLjava/util/function/Predicate;->lambda$and$0(Ljava/util/function/Predicate;Ljava/util/function/Predicate;Ljava/lang/Object;)Z
-HSPLjava/util/function/Predicate;->lambda$or$2(Ljava/util/function/Predicate;Ljava/util/function/Predicate;Ljava/lang/Object;)Z
-HSPLjava/util/function/Predicate;->or(Ljava/util/function/Predicate;)Ljava/util/function/Predicate;
 HSPLjava/util/jar/Attributes$Name;-><init>(Ljava/lang/String;)V
 HSPLjava/util/jar/Attributes$Name;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/jar/Attributes$Name;->hashCode()I
@@ -41915,7 +20552,6 @@
 HSPLjava/util/jar/Attributes;-><init>(I)V
 HSPLjava/util/jar/Attributes;->entrySet()Ljava/util/Set;
 HSPLjava/util/jar/Attributes;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/jar/Attributes;->getValue(Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/util/jar/Attributes;->getValue(Ljava/util/jar/Attributes$Name;)Ljava/lang/String;
 HSPLjava/util/jar/Attributes;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/jar/Attributes;->putValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
@@ -41925,7 +20561,6 @@
 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/lang/String;)V
-HSPLjava/util/jar/JarFile;-><init>(Ljava/lang/String;Z)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;
@@ -41937,7 +20572,6 @@
 HSPLjava/util/jar/JarFile;->maybeInstantiateVerifier()V
 HSPLjava/util/jar/JarVerifier$3;-><init>(Ljava/util/jar/JarVerifier;)V
 HSPLjava/util/jar/JarVerifier$VerifierStream;-><init>(Ljava/util/jar/Manifest;Ljava/util/jar/JarEntry;Ljava/io/InputStream;Ljava/util/jar/JarVerifier;)V
-HSPLjava/util/jar/JarVerifier$VerifierStream;->available()I
 HSPLjava/util/jar/JarVerifier$VerifierStream;->close()V
 HSPLjava/util/jar/JarVerifier$VerifierStream;->read()I
 HSPLjava/util/jar/JarVerifier$VerifierStream;->read([BII)I
@@ -41964,54 +20598,16 @@
 HSPLjava/util/jar/Manifest;->read(Ljava/io/InputStream;)V
 HSPLjava/util/jar/Manifest;->toLower(I)I
 HSPLjava/util/logging/ErrorManager;-><init>()V
-PLjava/util/logging/FileHandler$1;-><init>(Ljava/util/logging/FileHandler;)V
-PLjava/util/logging/FileHandler$1;->run()Ljava/lang/Object;
-HSPLjava/util/logging/FileHandler$InitializationErrorManager;-><init>()V
-HSPLjava/util/logging/FileHandler$InitializationErrorManager;-><init>(Ljava/util/logging/FileHandler$1;)V
-HSPLjava/util/logging/FileHandler$MeteredStream;-><init>(Ljava/util/logging/FileHandler;Ljava/io/OutputStream;I)V
-PLjava/util/logging/FileHandler$MeteredStream;->close()V
-HSPLjava/util/logging/FileHandler$MeteredStream;->flush()V
-HSPLjava/util/logging/FileHandler$MeteredStream;->write([BII)V
-HSPLjava/util/logging/FileHandler;-><clinit>()V
-HSPLjava/util/logging/FileHandler;-><init>(Ljava/lang/String;IIZ)V
-PLjava/util/logging/FileHandler;->access$100(Ljava/util/logging/FileHandler;)V
-HSPLjava/util/logging/FileHandler;->configure()V
-HSPLjava/util/logging/FileHandler;->generate(Ljava/lang/String;II)Ljava/io/File;
-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
-PLjava/util/logging/FileHandler;->rotate()V
 HSPLjava/util/logging/Formatter;-><init>()V
-HSPLjava/util/logging/Formatter;->formatMessage(Ljava/util/logging/LogRecord;)Ljava/lang/String;
-HSPLjava/util/logging/Formatter;->getHead(Ljava/util/logging/Handler;)Ljava/lang/String;
-PLjava/util/logging/Formatter;->getTail(Ljava/util/logging/Handler;)Ljava/lang/String;
 HSPLjava/util/logging/Handler;-><init>()V
 HSPLjava/util/logging/Handler;->checkPermission()V
-HSPLjava/util/logging/Handler;->getEncoding()Ljava/lang/String;
-HSPLjava/util/logging/Handler;->getFilter()Ljava/util/logging/Filter;
 HSPLjava/util/logging/Handler;->getFormatter()Ljava/util/logging/Formatter;
 HSPLjava/util/logging/Handler;->getLevel()Ljava/util/logging/Level;
 HSPLjava/util/logging/Handler;->isLoggable(Ljava/util/logging/LogRecord;)Z
-HSPLjava/util/logging/Handler;->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
 HSPLjava/util/logging/Handler;->setFormatter(Ljava/util/logging/Formatter;)V
 HSPLjava/util/logging/Handler;->setLevel(Ljava/util/logging/Level;)V
-HSPLjava/util/logging/Level$KnownLevel;-><init>(Ljava/util/logging/Level;)V
-HSPLjava/util/logging/Level$KnownLevel;->add(Ljava/util/logging/Level;)V
-HSPLjava/util/logging/Level$KnownLevel;->findByName(Ljava/lang/String;)Ljava/util/logging/Level$KnownLevel;
-HSPLjava/util/logging/Level$KnownLevel;->findByValue(I)Ljava/util/logging/Level$KnownLevel;
-HSPLjava/util/logging/Level;-><init>(Ljava/lang/String;I)V
-HSPLjava/util/logging/Level;-><init>(Ljava/lang/String;ILjava/lang/String;)V
-HSPLjava/util/logging/Level;-><init>(Ljava/lang/String;ILjava/lang/String;Z)V
-HSPLjava/util/logging/Level;->access$000(Ljava/util/logging/Level;)Ljava/lang/String;
-HSPLjava/util/logging/Level;->access$100(Ljava/util/logging/Level;)I
 HSPLjava/util/logging/Level;->equals(Ljava/lang/Object;)Z
-HSPLjava/util/logging/Level;->findLevel(Ljava/lang/String;)Ljava/util/logging/Level;
-HSPLjava/util/logging/Level;->hashCode()I
 HSPLjava/util/logging/Level;->intValue()I
-HSPLjava/util/logging/Level;->parse(Ljava/lang/String;)Ljava/util/logging/Level;
 HSPLjava/util/logging/LogManager$5;-><init>(Ljava/util/logging/LogManager;Ljava/lang/String;Ljava/util/logging/Logger;)V
 HSPLjava/util/logging/LogManager$5;->run()Ljava/lang/Object;
 HSPLjava/util/logging/LogManager$LogNode;-><init>(Ljava/util/logging/LogManager$LogNode;Ljava/util/logging/LogManager$LoggerContext;)V
@@ -42039,7 +20635,6 @@
 HSPLjava/util/logging/LogManager$LoggerWeakRef;->setParentRef(Ljava/lang/ref/WeakReference;)V
 HSPLjava/util/logging/LogManager$RootLogger;->accessCheckedHandlers()[Ljava/util/logging/Handler;
 HSPLjava/util/logging/LogManager$RootLogger;->addHandler(Ljava/util/logging/Handler;)V
-HSPLjava/util/logging/LogManager$SystemLoggerContext;->demandLogger(Ljava/lang/String;Ljava/lang/String;)Ljava/util/logging/Logger;
 HSPLjava/util/logging/LogManager;->access$1300(Ljava/util/logging/Logger;Ljava/util/logging/Logger;)V
 HSPLjava/util/logging/LogManager;->access$1400(Ljava/util/logging/LogManager;Ljava/lang/String;)[Ljava/lang/String;
 HSPLjava/util/logging/LogManager;->access$1500(Ljava/util/logging/LogManager;)Ljava/lang/ref/ReferenceQueue;
@@ -42050,19 +20645,14 @@
 HSPLjava/util/logging/LogManager;->checkPermission()V
 HSPLjava/util/logging/LogManager;->contexts()Ljava/util/List;
 HSPLjava/util/logging/LogManager;->demandLogger(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;)Ljava/util/logging/Logger;
-HSPLjava/util/logging/LogManager;->demandSystemLogger(Ljava/lang/String;Ljava/lang/String;)Ljava/util/logging/Logger;
 HSPLjava/util/logging/LogManager;->doSetParent(Ljava/util/logging/Logger;Ljava/util/logging/Logger;)V
 HSPLjava/util/logging/LogManager;->drainLoggerRefQueueBounded()V
 HSPLjava/util/logging/LogManager;->ensureLogManagerInitialized()V
 HSPLjava/util/logging/LogManager;->getBooleanProperty(Ljava/lang/String;Z)Z
-HSPLjava/util/logging/LogManager;->getFilterProperty(Ljava/lang/String;Ljava/util/logging/Filter;)Ljava/util/logging/Filter;
-HSPLjava/util/logging/LogManager;->getFormatterProperty(Ljava/lang/String;Ljava/util/logging/Formatter;)Ljava/util/logging/Formatter;
-HSPLjava/util/logging/LogManager;->getIntProperty(Ljava/lang/String;I)I
 HSPLjava/util/logging/LogManager;->getLevelProperty(Ljava/lang/String;Ljava/util/logging/Level;)Ljava/util/logging/Level;
 HSPLjava/util/logging/LogManager;->getLogManager()Ljava/util/logging/LogManager;
 HSPLjava/util/logging/LogManager;->getLogger(Ljava/lang/String;)Ljava/util/logging/Logger;
 HSPLjava/util/logging/LogManager;->getProperty(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/util/logging/LogManager;->getStringProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/util/logging/LogManager;->getSystemContext()Ljava/util/logging/LogManager$LoggerContext;
 HSPLjava/util/logging/LogManager;->getUserContext()Ljava/util/logging/LogManager$LoggerContext;
 HSPLjava/util/logging/LogManager;->initializeGlobalHandlers()V
@@ -42075,25 +20665,13 @@
 HSPLjava/util/logging/LogRecord;->getLevel()Ljava/util/logging/Level;
 HSPLjava/util/logging/LogRecord;->getLoggerName()Ljava/lang/String;
 HSPLjava/util/logging/LogRecord;->getMessage()Ljava/lang/String;
-HSPLjava/util/logging/LogRecord;->getMillis()J
-HSPLjava/util/logging/LogRecord;->getParameters()[Ljava/lang/Object;
-HSPLjava/util/logging/LogRecord;->getResourceBundle()Ljava/util/ResourceBundle;
 HSPLjava/util/logging/LogRecord;->getThrown()Ljava/lang/Throwable;
-HSPLjava/util/logging/LogRecord;->setLevel(Ljava/util/logging/Level;)V
 HSPLjava/util/logging/LogRecord;->setLoggerName(Ljava/lang/String;)V
-HSPLjava/util/logging/LogRecord;->setMessage(Ljava/lang/String;)V
-HSPLjava/util/logging/LogRecord;->setMillis(J)V
-PLjava/util/logging/LogRecord;->setParameters([Ljava/lang/Object;)V
 HSPLjava/util/logging/LogRecord;->setSourceClassName(Ljava/lang/String;)V
 HSPLjava/util/logging/LogRecord;->setSourceMethodName(Ljava/lang/String;)V
 HSPLjava/util/logging/LogRecord;->setThrown(Ljava/lang/Throwable;)V
-HSPLjava/util/logging/Logger$1;-><init>(Ljava/util/Locale;)V
-HSPLjava/util/logging/Logger$1;->run()Ljava/lang/Object;
-HSPLjava/util/logging/Logger$1;->run()Ljava/util/ResourceBundle;
-HSPLjava/util/logging/Logger$LoggerBundle;->get(Ljava/lang/String;Ljava/util/ResourceBundle;)Ljava/util/logging/Logger$LoggerBundle;
 HSPLjava/util/logging/Logger$LoggerBundle;->isSystemBundle()Z
 HSPLjava/util/logging/Logger;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;Ljava/util/logging/LogManager;Z)V
-HSPLjava/util/logging/Logger;->access$100()Ljava/util/logging/Logger$LoggerBundle;
 HSPLjava/util/logging/Logger;->accessCheckedHandlers()[Ljava/util/logging/Handler;
 HSPLjava/util/logging/Logger;->addHandler(Ljava/util/logging/Handler;)V
 HSPLjava/util/logging/Logger;->checkPermission()V
@@ -42101,51 +20679,27 @@
 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;->fine(Ljava/lang/String;)V
-HSPLjava/util/logging/Logger;->getCallersClassLoader()Ljava/lang/ClassLoader;
 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;
 HSPLjava/util/logging/Logger;->getParent()Ljava/util/logging/Logger;
-HSPLjava/util/logging/Logger;->getPlatformLogger(Ljava/lang/String;)Ljava/util/logging/Logger;
 HSPLjava/util/logging/Logger;->getResourceBundle()Ljava/util/ResourceBundle;
 HSPLjava/util/logging/Logger;->getResourceBundleName()Ljava/lang/String;
 HSPLjava/util/logging/Logger;->getUseParentHandlers()Z
 HSPLjava/util/logging/Logger;->isLoggable(Ljava/util/logging/Level;)Z
 HSPLjava/util/logging/Logger;->log(Ljava/util/logging/Level;Ljava/lang/String;)V
-HSPLjava/util/logging/Logger;->log(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
-HSPLjava/util/logging/Logger;->log(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
 HSPLjava/util/logging/Logger;->log(Ljava/util/logging/LogRecord;)V
 HSPLjava/util/logging/Logger;->logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/util/logging/Logger;->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;->logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
 HSPLjava/util/logging/Logger;->removeChildLogger(Ljava/util/logging/LogManager$LoggerWeakRef;)V
-HSPLjava/util/logging/Logger;->setCallersClassLoaderRef(Ljava/lang/Class;)V
 HSPLjava/util/logging/Logger;->setLevel(Ljava/util/logging/Level;)V
 HSPLjava/util/logging/Logger;->setLogManager(Ljava/util/logging/LogManager;)V
 HSPLjava/util/logging/Logger;->setParent(Ljava/util/logging/Logger;)V
-HSPLjava/util/logging/Logger;->setUseParentHandlers(Z)V
 HSPLjava/util/logging/Logger;->setupResourceInfo(Ljava/lang/String;Ljava/lang/Class;)V
 HSPLjava/util/logging/Logger;->updateEffectiveLevel()V
-HSPLjava/util/logging/Logger;->warning(Ljava/lang/String;)V
-HSPLjava/util/logging/LoggingProxyImpl;->getLogger(Ljava/lang/String;)Ljava/lang/Object;
-HSPLjava/util/logging/LoggingProxyImpl;->getProperty(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/util/logging/LoggingProxyImpl;->parseLevel(Ljava/lang/String;)Ljava/lang/Object;
-HSPLjava/util/logging/SimpleFormatter;-><clinit>()V
-HSPLjava/util/logging/SimpleFormatter;-><init>()V
-HSPLjava/util/logging/StreamHandler;-><init>()V
-PLjava/util/logging/StreamHandler;->close()V
-HSPLjava/util/logging/StreamHandler;->configure()V
-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
-HSPLjava/util/logging/StreamHandler;->setEncoding(Ljava/lang/String;)V
-HSPLjava/util/logging/StreamHandler;->setOutputStream(Ljava/io/OutputStream;)V
-HSPLjava/util/logging/XMLFormatter;-><init>()V
 HSPLjava/util/regex/Matcher;-><init>(Ljava/util/regex/Pattern;Ljava/lang/CharSequence;)V
 HSPLjava/util/regex/Matcher;->appendEvaluated(Ljava/lang/StringBuffer;Ljava/lang/String;)V
 HSPLjava/util/regex/Matcher;->appendReplacement(Ljava/lang/StringBuffer;Ljava/lang/String;)Ljava/util/regex/Matcher;
@@ -42163,21 +20717,15 @@
 HSPLjava/util/regex/Matcher;->hitEnd()Z
 HSPLjava/util/regex/Matcher;->lookingAt()Z
 HSPLjava/util/regex/Matcher;->matches()Z
-HSPLjava/util/regex/Matcher;->pattern()Ljava/util/regex/Pattern;
-HSPLjava/util/regex/Matcher;->quoteReplacement(Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/util/regex/Matcher;->region(II)Ljava/util/regex/Matcher;
-PLjava/util/regex/Matcher;->regionEnd()I
-PLjava/util/regex/Matcher;->regionStart()I
 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;->requireEnd()Z
 HSPLjava/util/regex/Matcher;->reset()Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Matcher;->reset(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Matcher;->reset(Ljava/lang/CharSequence;II)Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Matcher;->resetForInput()V
 HSPLjava/util/regex/Matcher;->start()I
 HSPLjava/util/regex/Matcher;->start(I)I
-HSPLjava/util/regex/Matcher;->toMatchResult()Ljava/util/regex/MatchResult;
 HSPLjava/util/regex/Matcher;->useAnchoringBounds(Z)Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Matcher;->usePattern(Ljava/util/regex/Pattern;)Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Matcher;->useTransparentBounds(Z)Ljava/util/regex/Matcher;
@@ -42186,43 +20734,27 @@
 HSPLjava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
 HSPLjava/util/regex/Pattern;->compile(Ljava/lang/String;I)Ljava/util/regex/Pattern;
 HSPLjava/util/regex/Pattern;->fastSplit(Ljava/lang/String;Ljava/lang/String;I)[Ljava/lang/String;
-HPLjava/util/regex/Pattern;->flags()I
 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;->split(Ljava/lang/CharSequence;)[Ljava/lang/String;
 HSPLjava/util/regex/Pattern;->split(Ljava/lang/CharSequence;I)[Ljava/lang/String;
-HSPLjava/util/regex/Pattern;->toString()Ljava/lang/String;
-HSPLjava/util/stream/-$$Lambda$Collectors$F7-we3W7I2plNaGHqh_d2lzmvho;-><init>(Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;)V
-HSPLjava/util/stream/-$$Lambda$Collectors$F7-we3W7I2plNaGHqh_d2lzmvho;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLjava/util/stream/-$$Lambda$Collectors$TzSZZBK0laNSWMge_uuxANwkkMo;-><init>(Ljava/util/function/BinaryOperator;)V
-HPLjava/util/stream/-$$Lambda$Collectors$f0IPpRuyw9HZC8FIP30mNjUUUhw;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/stream/-$$Lambda$Collectors$f68RHYk8qNU7alEHPPrPoFuCJO4;-><init>(Ljava/util/function/Supplier;)V
-HSPLjava/util/stream/-$$Lambda$Collectors$f68RHYk8qNU7alEHPPrPoFuCJO4;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HPLjava/util/stream/-$$Lambda$Collectors$nKlT6uFghrTzWO44dlFAJFeRr34;-><init>(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;)V
-HPLjava/util/stream/-$$Lambda$Collectors$nKlT6uFghrTzWO44dlFAJFeRr34;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLjava/util/stream/-$$Lambda$Collectors$pzPeDl3rCgtNVSeZPHZk5f2se60;-><init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V
 HSPLjava/util/stream/-$$Lambda$Collectors$pzPeDl3rCgtNVSeZPHZk5f2se60;->get()Ljava/lang/Object;
 HSPLjava/util/stream/-$$Lambda$Drw47GGUtPrz9CklhlT0v26u-5c;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLjava/util/stream/-$$Lambda$IntPipeline$R-E7oGjPWog3HR9X-8MdhU1ZGRE;->applyAsInt(Ljava/lang/Object;)I
 HSPLjava/util/stream/-$$Lambda$MatchOps$_LtFSpSMfVwoPv-8p_1cMGGcaHA;-><init>(Ljava/util/stream/MatchOps$MatchKind;Ljava/util/function/Predicate;)V
 HSPLjava/util/stream/-$$Lambda$MatchOps$_LtFSpSMfVwoPv-8p_1cMGGcaHA;->get()Ljava/lang/Object;
 HSPLjava/util/stream/-$$Lambda$ReferencePipeline$mk6xSsLZAKvG89IyN8pzBoM6otw;->applyAsLong(Ljava/lang/Object;)J
 HSPLjava/util/stream/-$$Lambda$dplkPhACWDPIy18ogwdupEQaN40;->applyAsLong(JJ)J
 HSPLjava/util/stream/-$$Lambda$ihOtgw0eLCrsEBOphyN7SwoAlDg;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLjava/util/stream/-$$Lambda$okJigbB9kSn__oCZ5Do9uFNyF6A;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/stream/-$$Lambda$ono9Bp0lMrKbIRfAAYdycY0_qag;->applyAsInt(II)I
 HSPLjava/util/stream/-$$Lambda$opQ7JxjVCJzqzgTxGU3LVtqC7is;->get()Ljava/lang/Object;
 HSPLjava/util/stream/-$$Lambda$r-8H_R_mZJjp9wd0XTLoEAHMNQ0;->get()Ljava/lang/Object;
-HPLjava/util/stream/-$$Lambda$ry7iWszBr7beYy31SdRxibDyciQ;->get()Ljava/lang/Object;
-HPLjava/util/stream/-$$Lambda$sKPaOkcQePGTRevrwmKVVhCTmTo;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLjava/util/stream/-$$Lambda$uJ6CkL42Bk73jN5EzP0Fx7o1eVA;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLjava/util/stream/-$$Lambda$wFoiz-RiPqYBPe0X4aSzbj2iL3g;->apply(I)Ljava/lang/Object;
 HSPLjava/util/stream/-$$Lambda$yTqQxkqu88ZhKI6fWaTTLwOLF60;->get()Ljava/lang/Object;
 HSPLjava/util/stream/AbstractPipeline;-><init>(Ljava/util/Spliterator;IZ)V
 HSPLjava/util/stream/AbstractPipeline;-><init>(Ljava/util/stream/AbstractPipeline;I)V
-HSPLjava/util/stream/AbstractPipeline;->close()V
 HSPLjava/util/stream/AbstractPipeline;->copyInto(Ljava/util/stream/Sink;Ljava/util/Spliterator;)V
 HSPLjava/util/stream/AbstractPipeline;->copyIntoWithCancel(Ljava/util/stream/Sink;Ljava/util/Spliterator;)V
 HSPLjava/util/stream/AbstractPipeline;->evaluate(Ljava/util/Spliterator;ZLjava/util/function/IntFunction;)Ljava/util/stream/Node;
@@ -42231,17 +20763,13 @@
 HSPLjava/util/stream/AbstractPipeline;->exactOutputSizeIfKnown(Ljava/util/Spliterator;)J
 HSPLjava/util/stream/AbstractPipeline;->getStreamAndOpFlags()I
 HSPLjava/util/stream/AbstractPipeline;->isParallel()Z
-HSPLjava/util/stream/AbstractPipeline;->lambda$spliterator$0$AbstractPipeline()Ljava/util/Spliterator;
 HSPLjava/util/stream/AbstractPipeline;->onClose(Ljava/lang/Runnable;)Ljava/util/stream/BaseStream;
-HSPLjava/util/stream/AbstractPipeline;->sequential()Ljava/util/stream/BaseStream;
 HSPLjava/util/stream/AbstractPipeline;->sourceSpliterator(I)Ljava/util/Spliterator;
 HSPLjava/util/stream/AbstractPipeline;->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/AbstractSpinedBuffer;-><init>()V
-PLjava/util/stream/AbstractSpinedBuffer;->chunkSize(I)I
-HSPLjava/util/stream/AbstractSpinedBuffer;->count()J
 HSPLjava/util/stream/Collectors$CollectorImpl;-><init>(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BinaryOperator;Ljava/util/Set;)V
 HSPLjava/util/stream/Collectors$CollectorImpl;-><init>(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BinaryOperator;Ljava/util/function/Function;Ljava/util/Set;)V
 HSPLjava/util/stream/Collectors$CollectorImpl;->accumulator()Ljava/util/function/BiConsumer;
@@ -42251,21 +20779,12 @@
 HSPLjava/util/stream/Collectors$CollectorImpl;->supplier()Ljava/util/function/Supplier;
 HSPLjava/util/stream/Collectors;->access$000()Ljava/util/function/Function;
 HSPLjava/util/stream/Collectors;->castingIdentity()Ljava/util/function/Function;
-HPLjava/util/stream/Collectors;->collectingAndThen(Ljava/util/stream/Collector;Ljava/util/function/Function;)Ljava/util/stream/Collector;
-HSPLjava/util/stream/Collectors;->groupingBy(Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;
 HSPLjava/util/stream/Collectors;->joining(Ljava/lang/CharSequence;)Ljava/util/stream/Collector;
 HSPLjava/util/stream/Collectors;->joining(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/util/stream/Collector;
-HPLjava/util/stream/Collectors;->lambda$castingIdentity$1(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/stream/Collectors;->lambda$groupingBy$44(Ljava/util/function/Supplier;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/stream/Collectors;->lambda$groupingBy$45(Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/Map;Ljava/lang/Object;)V
 HSPLjava/util/stream/Collectors;->lambda$joining$6(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/util/StringJoiner;
-HPLjava/util/stream/Collectors;->lambda$toMap$58(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;Ljava/util/Map;Ljava/lang/Object;)V
 HSPLjava/util/stream/Collectors;->mapMerger(Ljava/util/function/BinaryOperator;)Ljava/util/function/BinaryOperator;
-HPLjava/util/stream/Collectors;->throwingMerger()Ljava/util/function/BinaryOperator;
 HSPLjava/util/stream/Collectors;->toCollection(Ljava/util/function/Supplier;)Ljava/util/stream/Collector;
 HSPLjava/util/stream/Collectors;->toList()Ljava/util/stream/Collector;
-HPLjava/util/stream/Collectors;->toMap(Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/stream/Collector;
-HPLjava/util/stream/Collectors;->toMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;Ljava/util/function/Supplier;)Ljava/util/stream/Collector;
 HSPLjava/util/stream/Collectors;->toSet()Ljava/util/stream/Collector;
 HSPLjava/util/stream/DistinctOps$1$2;-><init>(Ljava/util/stream/DistinctOps$1;Ljava/util/stream/Sink;)V
 HSPLjava/util/stream/DistinctOps$1$2;->accept(Ljava/lang/Object;)V
@@ -42283,40 +20802,21 @@
 HSPLjava/util/stream/FindOps$FindSink;-><init>()V
 HSPLjava/util/stream/FindOps$FindSink;->accept(Ljava/lang/Object;)V
 HSPLjava/util/stream/FindOps$FindSink;->cancellationRequested()Z
-HPLjava/util/stream/FindOps;->makeInt(Z)Ljava/util/stream/TerminalOp;
 HSPLjava/util/stream/FindOps;->makeRef(Z)Ljava/util/stream/TerminalOp;
 HSPLjava/util/stream/ForEachOps$ForEachOp$OfRef;-><init>(Ljava/util/function/Consumer;Z)V
-HSPLjava/util/stream/ForEachOps$ForEachOp$OfRef;->accept(Ljava/lang/Object;)V
 HSPLjava/util/stream/ForEachOps$ForEachOp;-><init>(Z)V
 HSPLjava/util/stream/ForEachOps$ForEachOp;->evaluateSequential(Ljava/util/stream/PipelineHelper;Ljava/util/Spliterator;)Ljava/lang/Object;
 HSPLjava/util/stream/ForEachOps$ForEachOp;->evaluateSequential(Ljava/util/stream/PipelineHelper;Ljava/util/Spliterator;)Ljava/lang/Void;
 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$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;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
 HSPLjava/util/stream/IntPipeline$Head;-><init>(Ljava/util/Spliterator;IZ)V
 HSPLjava/util/stream/IntPipeline$StatelessOp;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;I)V
 HSPLjava/util/stream/IntPipeline$StatelessOp;->opIsStateful()Z
 HSPLjava/util/stream/IntPipeline;-><init>(Ljava/util/Spliterator;IZ)V
 HSPLjava/util/stream/IntPipeline;-><init>(Ljava/util/stream/AbstractPipeline;I)V
-HPLjava/util/stream/IntPipeline;->adapt(Ljava/util/Spliterator;)Ljava/util/Spliterator$OfInt;
-HPLjava/util/stream/IntPipeline;->adapt(Ljava/util/stream/Sink;)Ljava/util/function/IntConsumer;
-HSPLjava/util/stream/IntPipeline;->boxed()Ljava/util/stream/Stream;
-HSPLjava/util/stream/IntPipeline;->distinct()Ljava/util/stream/IntStream;
-HPLjava/util/stream/IntPipeline;->filter(Ljava/util/function/IntPredicate;)Ljava/util/stream/IntStream;
-HPLjava/util/stream/IntPipeline;->findFirst()Ljava/util/OptionalInt;
-HPLjava/util/stream/IntPipeline;->forEachWithCancel(Ljava/util/Spliterator;Ljava/util/stream/Sink;)V
-HSPLjava/util/stream/IntPipeline;->lambda$distinct$0(Ljava/lang/Integer;)I
 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
-PLjava/util/stream/IntStream;->of([I)Ljava/util/stream/IntStream;
-HPLjava/util/stream/IntStream;->range(II)Ljava/util/stream/IntStream;
 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
@@ -42336,13 +20836,6 @@
 HSPLjava/util/stream/MatchOps;->lambda$makeRef$0(Ljava/util/stream/MatchOps$MatchKind;Ljava/util/function/Predicate;)Ljava/util/stream/MatchOps$BooleanTerminalSink;
 HSPLjava/util/stream/MatchOps;->makeRef(Ljava/util/function/Predicate;Ljava/util/stream/MatchOps$MatchKind;)Ljava/util/stream/TerminalOp;
 HSPLjava/util/stream/Node;->getChildCount()I
-HSPLjava/util/stream/Nodes$ArrayNode;-><init>(JLjava/util/function/IntFunction;)V
-HSPLjava/util/stream/Nodes$ArrayNode;->asArray(Ljava/util/function/IntFunction;)[Ljava/lang/Object;
-HSPLjava/util/stream/Nodes$FixedNodeBuilder;-><init>(JLjava/util/function/IntFunction;)V
-HPLjava/util/stream/Nodes$FixedNodeBuilder;->accept(Ljava/lang/Object;)V
-HSPLjava/util/stream/Nodes$FixedNodeBuilder;->begin(J)V
-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()[I
@@ -42352,26 +20845,12 @@
 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;->end()V
-HSPLjava/util/stream/Nodes$IntSpinedNodeBuilder;-><init>()V
-HSPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->accept(I)V
-HSPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->asPrimitiveArray()Ljava/lang/Object;
-HSPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->asPrimitiveArray()[I
-HSPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->begin(J)V
-HSPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->build()Ljava/util/stream/Node$OfInt;
-HSPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->build()Ljava/util/stream/Node;
-HSPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->copyInto(Ljava/lang/Object;I)V
-HSPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->copyInto([II)V
-HSPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->end()V
-PLjava/util/stream/Nodes$SpinedNodeBuilder;-><clinit>()V
-PLjava/util/stream/Nodes$SpinedNodeBuilder;-><init>()V
-PLjava/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;->intBuilder()Ljava/util/stream/Node$Builder$OfInt;
 HSPLjava/util/stream/Nodes;->intBuilder(J)Ljava/util/stream/Node$Builder$OfInt;
 HSPLjava/util/stream/PipelineHelper;-><init>()V
-PLjava/util/stream/ReduceOps$2;-><init>(Ljava/util/stream/StreamShape;Ljava/util/function/BinaryOperator;)V
+HSPLjava/util/stream/ReduceOps$2;-><init>(Ljava/util/stream/StreamShape;Ljava/util/function/BinaryOperator;)V
 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;->makeSink()Ljava/util/stream/ReduceOps$3ReducingSink;
@@ -42379,14 +20858,6 @@
 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$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;
@@ -42399,9 +20870,8 @@
 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;->makeInt(ILjava/util/function/IntBinaryOperator;)Ljava/util/stream/TerminalOp;
 HSPLjava/util/stream/ReduceOps;->makeLong(JLjava/util/function/LongBinaryOperator;)Ljava/util/stream/TerminalOp;
-PLjava/util/stream/ReduceOps;->makeRef(Ljava/util/function/BinaryOperator;)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;
 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
@@ -42429,135 +20899,50 @@
 HSPLjava/util/stream/ReferencePipeline$StatelessOp;->opIsStateful()Z
 HSPLjava/util/stream/ReferencePipeline;-><init>(Ljava/util/Spliterator;IZ)V
 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;->count()J
 HSPLjava/util/stream/ReferencePipeline;->distinct()Ljava/util/stream/Stream;
 HSPLjava/util/stream/ReferencePipeline;->filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
-HSPLjava/util/stream/ReferencePipeline;->findAny()Ljava/util/Optional;
 HSPLjava/util/stream/ReferencePipeline;->findFirst()Ljava/util/Optional;
 HSPLjava/util/stream/ReferencePipeline;->flatMap(Ljava/util/function/Function;)Ljava/util/stream/Stream;
 HSPLjava/util/stream/ReferencePipeline;->forEach(Ljava/util/function/Consumer;)V
-HPLjava/util/stream/ReferencePipeline;->forEachOrdered(Ljava/util/function/Consumer;)V
 HSPLjava/util/stream/ReferencePipeline;->forEachWithCancel(Ljava/util/Spliterator;Ljava/util/stream/Sink;)V
-HPLjava/util/stream/ReferencePipeline;->iterator()Ljava/util/Iterator;
 HSPLjava/util/stream/ReferencePipeline;->lambda$count$2(Ljava/lang/Object;)J
-HSPLjava/util/stream/ReferencePipeline;->limit(J)Ljava/util/stream/Stream;
 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;->mapToInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/IntStream;
 HSPLjava/util/stream/ReferencePipeline;->mapToLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/LongStream;
-PLjava/util/stream/ReferencePipeline;->max(Ljava/util/Comparator;)Ljava/util/Optional;
-HPLjava/util/stream/ReferencePipeline;->min(Ljava/util/Comparator;)Ljava/util/Optional;
-PLjava/util/stream/ReferencePipeline;->reduce(Ljava/util/function/BinaryOperator;)Ljava/util/Optional;
-PLjava/util/stream/ReferencePipeline;->sorted(Ljava/util/Comparator;)Ljava/util/stream/Stream;
+HSPLjava/util/stream/ReferencePipeline;->reduce(Ljava/util/function/BinaryOperator;)Ljava/util/Optional;
+HSPLjava/util/stream/ReferencePipeline;->sorted(Ljava/util/Comparator;)Ljava/util/stream/Stream;
 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
-HPLjava/util/stream/Sink$ChainedInt;->cancellationRequested()Z
 HSPLjava/util/stream/Sink$ChainedInt;->end()V
 HSPLjava/util/stream/Sink$ChainedReference;-><init>(Ljava/util/stream/Sink;)V
 HSPLjava/util/stream/Sink$ChainedReference;->begin(J)V
 HSPLjava/util/stream/Sink$ChainedReference;->cancellationRequested()Z
 HSPLjava/util/stream/Sink$ChainedReference;->end()V
 HSPLjava/util/stream/Sink;->begin(J)V
-HSPLjava/util/stream/Sink;->cancellationRequested()Z
 HSPLjava/util/stream/Sink;->end()V
-HSPLjava/util/stream/SliceOps$1$1;-><init>(Ljava/util/stream/SliceOps$1;Ljava/util/stream/Sink;)V
-HSPLjava/util/stream/SliceOps$1$1;->accept(Ljava/lang/Object;)V
-HSPLjava/util/stream/SliceOps$1$1;->begin(J)V
-HSPLjava/util/stream/SliceOps$1$1;->cancellationRequested()Z
-HSPLjava/util/stream/SliceOps$1;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;IJJ)V
-HSPLjava/util/stream/SliceOps$1;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
-HSPLjava/util/stream/SliceOps;->access$300(JJJ)J
-HSPLjava/util/stream/SliceOps;->calcSize(JJJ)J
-HSPLjava/util/stream/SliceOps;->flags(J)I
-HSPLjava/util/stream/SliceOps;->makeRef(Ljava/util/stream/AbstractPipeline;JJ)Ljava/util/stream/Stream;
-PLjava/util/stream/SortedOps$OfRef;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/Comparator;)V
-PLjava/util/stream/SortedOps;->makeRef(Ljava/util/stream/AbstractPipeline;Ljava/util/Comparator;)Ljava/util/stream/Stream;
-PLjava/util/stream/SpinedBuffer$1Splitr;-><clinit>()V
-PLjava/util/stream/SpinedBuffer$1Splitr;-><init>(Ljava/util/stream/SpinedBuffer;IIII)V
-PLjava/util/stream/SpinedBuffer$1Splitr;->characteristics()I
-PLjava/util/stream/SpinedBuffer$1Splitr;->estimateSize()J
-PLjava/util/stream/SpinedBuffer$1Splitr;->forEachRemaining(Ljava/util/function/Consumer;)V
-HSPLjava/util/stream/SpinedBuffer$OfInt;-><init>()V
-HSPLjava/util/stream/SpinedBuffer$OfInt;->accept(I)V
-HSPLjava/util/stream/SpinedBuffer$OfInt;->arrayLength(Ljava/lang/Object;)I
-HSPLjava/util/stream/SpinedBuffer$OfInt;->arrayLength([I)I
-HSPLjava/util/stream/SpinedBuffer$OfInt;->asPrimitiveArray()Ljava/lang/Object;
-HSPLjava/util/stream/SpinedBuffer$OfInt;->clear()V
-HSPLjava/util/stream/SpinedBuffer$OfInt;->copyInto(Ljava/lang/Object;I)V
-HSPLjava/util/stream/SpinedBuffer$OfInt;->count()J
-HSPLjava/util/stream/SpinedBuffer$OfInt;->newArray(I)Ljava/lang/Object;
-HSPLjava/util/stream/SpinedBuffer$OfInt;->newArray(I)[I
-HSPLjava/util/stream/SpinedBuffer$OfPrimitive;-><init>()V
-HSPLjava/util/stream/SpinedBuffer$OfPrimitive;->asPrimitiveArray()Ljava/lang/Object;
-HSPLjava/util/stream/SpinedBuffer$OfPrimitive;->capacity()J
-HSPLjava/util/stream/SpinedBuffer$OfPrimitive;->clear()V
-HSPLjava/util/stream/SpinedBuffer$OfPrimitive;->copyInto(Ljava/lang/Object;I)V
-HSPLjava/util/stream/SpinedBuffer$OfPrimitive;->ensureCapacity(J)V
-HSPLjava/util/stream/SpinedBuffer$OfPrimitive;->preAccept()V
-PLjava/util/stream/SpinedBuffer;-><init>()V
-PLjava/util/stream/SpinedBuffer;->increaseCapacity()V
-PLjava/util/stream/SpinedBuffer;->spliterator()Ljava/util/Spliterator;
-PLjava/util/stream/Stream;->builder()Ljava/util/stream/Stream$Builder;
-HSPLjava/util/stream/Stream;->concat(Ljava/util/stream/Stream;Ljava/util/stream/Stream;)Ljava/util/stream/Stream;
-HSPLjava/util/stream/Stream;->generate(Ljava/util/function/Supplier;)Ljava/util/stream/Stream;
-PLjava/util/stream/Stream;->of([Ljava/lang/Object;)Ljava/util/stream/Stream;
+HSPLjava/util/stream/SortedOps$OfRef;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/Comparator;)V
+HSPLjava/util/stream/SortedOps;->makeRef(Ljava/util/stream/AbstractPipeline;Ljava/util/Comparator;)Ljava/util/stream/Stream;
+HSPLjava/util/stream/SpinedBuffer;-><init>()V
 HSPLjava/util/stream/StreamOpFlag;->combineOpFlags(II)I
 HSPLjava/util/stream/StreamOpFlag;->fromCharacteristics(Ljava/util/Spliterator;)I
 HSPLjava/util/stream/StreamOpFlag;->getMask(I)I
 HSPLjava/util/stream/StreamOpFlag;->isKnown(I)Z
-HSPLjava/util/stream/StreamOpFlag;->toCharacteristics(I)I
-HSPLjava/util/stream/StreamOpFlag;->toStreamFlags(I)I
-HSPLjava/util/stream/StreamSpliterators$InfiniteSupplyingSpliterator$OfRef;-><init>(JLjava/util/function/Supplier;)V
-HSPLjava/util/stream/StreamSpliterators$InfiniteSupplyingSpliterator$OfRef;->tryAdvance(Ljava/util/function/Consumer;)Z
-HSPLjava/util/stream/StreamSpliterators$InfiniteSupplyingSpliterator;-><init>(J)V
-HSPLjava/util/stream/StreamSpliterators$InfiniteSupplyingSpliterator;->characteristics()I
 HSPLjava/util/stream/StreamSupport;->intStream(Ljava/util/Spliterator$OfInt;Z)Ljava/util/stream/IntStream;
 HSPLjava/util/stream/StreamSupport;->stream(Ljava/util/Spliterator;Z)Ljava/util/stream/Stream;
-HSPLjava/util/stream/Streams$2;-><init>(Ljava/util/stream/BaseStream;Ljava/util/stream/BaseStream;)V
-PLjava/util/stream/Streams$AbstractStreamBuilderImpl;-><init>()V
-PLjava/util/stream/Streams$AbstractStreamBuilderImpl;-><init>(Ljava/util/stream/Streams$1;)V
-HPLjava/util/stream/Streams$AbstractStreamBuilderImpl;->characteristics()I
-PLjava/util/stream/Streams$AbstractStreamBuilderImpl;->estimateSize()J
-HSPLjava/util/stream/Streams$ConcatSpliterator$OfRef;-><init>(Ljava/util/Spliterator;Ljava/util/Spliterator;)V
-HSPLjava/util/stream/Streams$ConcatSpliterator;-><init>(Ljava/util/Spliterator;Ljava/util/Spliterator;)V
-HSPLjava/util/stream/Streams$ConcatSpliterator;->characteristics()I
-HPLjava/util/stream/Streams$ConcatSpliterator;->estimateSize()J
-HSPLjava/util/stream/Streams$ConcatSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
-PLjava/util/stream/Streams$RangeIntSpliterator;-><init>(III)V
-PLjava/util/stream/Streams$RangeIntSpliterator;-><init>(IIZ)V
-PLjava/util/stream/Streams$RangeIntSpliterator;->characteristics()I
-PLjava/util/stream/Streams$RangeIntSpliterator;->estimateSize()J
-PLjava/util/stream/Streams$RangeIntSpliterator;->getComparator()Ljava/util/Comparator;
-PLjava/util/stream/Streams$StreamBuilderImpl;-><init>()V
-PLjava/util/stream/Streams$StreamBuilderImpl;->accept(Ljava/lang/Object;)V
-HPLjava/util/stream/Streams$StreamBuilderImpl;->build()Ljava/util/stream/Stream;
-HPLjava/util/stream/Streams$StreamBuilderImpl;->forEachRemaining(Ljava/util/function/Consumer;)V
-HSPLjava/util/stream/Streams;->composedClose(Ljava/util/stream/BaseStream;Ljava/util/stream/BaseStream;)Ljava/lang/Runnable;
 HSPLjava/util/stream/TerminalOp;->getOpFlags()I
-HSPLjava/util/zip/Adler32;-><init>()V
-HSPLjava/util/zip/Adler32;->getValue()J
-HSPLjava/util/zip/Adler32;->reset()V
-HSPLjava/util/zip/Adler32;->update(I)V
-HSPLjava/util/zip/Adler32;->update([B)V
-HSPLjava/util/zip/Adler32;->update([BII)V
 HSPLjava/util/zip/CRC32;-><init>()V
 HSPLjava/util/zip/CRC32;->getValue()J
 HSPLjava/util/zip/CRC32;->reset()V
 HSPLjava/util/zip/CRC32;->update(I)V
-HSPLjava/util/zip/CRC32;->update([B)V
 HSPLjava/util/zip/CRC32;->update([BII)V
 HSPLjava/util/zip/CheckedInputStream;-><init>(Ljava/io/InputStream;Ljava/util/zip/Checksum;)V
 HSPLjava/util/zip/CheckedInputStream;->read()I
 HSPLjava/util/zip/CheckedInputStream;->read([BII)I
-HSPLjava/util/zip/Deflater;-><init>()V
-PLjava/util/zip/Deflater;-><init>(I)V
 HSPLjava/util/zip/Deflater;-><init>(IZ)V
-PLjava/util/zip/Deflater;->deflate([B)I
 HSPLjava/util/zip/Deflater;->deflate([BII)I
 HSPLjava/util/zip/Deflater;->deflate([BIII)I
 HSPLjava/util/zip/Deflater;->end()V
@@ -42566,19 +20951,10 @@
 HSPLjava/util/zip/Deflater;->finish()V
 HSPLjava/util/zip/Deflater;->finished()Z
 HSPLjava/util/zip/Deflater;->getBytesRead()J
-PLjava/util/zip/Deflater;->getBytesWritten()J
 HSPLjava/util/zip/Deflater;->getTotalIn()I
 HSPLjava/util/zip/Deflater;->needsInput()Z
-PLjava/util/zip/Deflater;->reset()V
-PLjava/util/zip/Deflater;->setInput([B)V
 HSPLjava/util/zip/Deflater;->setInput([BII)V
-PLjava/util/zip/Deflater;->setLevel(I)V
-HPLjava/util/zip/Deflater;->setStrategy(I)V
-PLjava/util/zip/DeflaterOutputStream;-><init>(Ljava/io/OutputStream;)V
-HSPLjava/util/zip/DeflaterOutputStream;-><init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;)V
-HPLjava/util/zip/DeflaterOutputStream;-><init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;I)V
 HSPLjava/util/zip/DeflaterOutputStream;-><init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;IZ)V
-PLjava/util/zip/DeflaterOutputStream;-><init>(Ljava/io/OutputStream;Z)V
 HSPLjava/util/zip/DeflaterOutputStream;->close()V
 HSPLjava/util/zip/DeflaterOutputStream;->deflate()V
 HSPLjava/util/zip/DeflaterOutputStream;->finish()V
@@ -42604,24 +20980,19 @@
 HSPLjava/util/zip/GZIPOutputStream;->writeInt(I[BI)V
 HSPLjava/util/zip/GZIPOutputStream;->writeShort(I[BI)V
 HSPLjava/util/zip/GZIPOutputStream;->writeTrailer([BI)V
-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;->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;->needsDictionary()Z
 HSPLjava/util/zip/Inflater;->needsInput()Z
-HSPLjava/util/zip/Inflater;->reset()V
 HSPLjava/util/zip/Inflater;->setInput([BII)V
-HPLjava/util/zip/InflaterInputStream;-><init>(Ljava/io/InputStream;)V
-HSPLjava/util/zip/InflaterInputStream;-><init>(Ljava/io/InputStream;Ljava/util/zip/Inflater;)V
 HSPLjava/util/zip/InflaterInputStream;-><init>(Ljava/io/InputStream;Ljava/util/zip/Inflater;I)V
 HSPLjava/util/zip/InflaterInputStream;->available()I
 HSPLjava/util/zip/InflaterInputStream;->close()V
@@ -42629,7 +21000,6 @@
 HSPLjava/util/zip/InflaterInputStream;->fill()V
 HSPLjava/util/zip/InflaterInputStream;->read()I
 HSPLjava/util/zip/InflaterInputStream;->read([BII)I
-HPLjava/util/zip/InflaterInputStream;->skip(J)J
 HSPLjava/util/zip/ZStreamRef;-><init>(J)V
 HSPLjava/util/zip/ZStreamRef;->address()J
 HSPLjava/util/zip/ZStreamRef;->clear()V
@@ -42641,17 +21011,12 @@
 HSPLjava/util/zip/ZipCoder;->isUTF8()Z
 HSPLjava/util/zip/ZipCoder;->toString([BI)Ljava/lang/String;
 HSPLjava/util/zip/ZipEntry;-><init>()V
-HSPLjava/util/zip/ZipEntry;-><init>(Ljava/lang/String;)V
-HSPLjava/util/zip/ZipEntry;-><init>(Ljava/lang/String;Ljava/lang/String;JJJII[BJ)V
 HSPLjava/util/zip/ZipEntry;-><init>(Ljava/util/zip/ZipEntry;)V
-HSPLjava/util/zip/ZipEntry;->getCompressedSize()J
-HSPLjava/util/zip/ZipEntry;->getDataOffset()J
 HSPLjava/util/zip/ZipEntry;->getMethod()I
 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
-PLjava/util/zip/ZipEntry;->setTime(J)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
@@ -42664,13 +21029,11 @@
 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;->size()J
-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/lang/String;)V
@@ -42696,41 +21059,7 @@
 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;->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
-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;->readEnd(Ljava/util/zip/ZipEntry;)V
-HSPLjava/util/zip/ZipInputStream;->readFully([BII)V
-HSPLjava/util/zip/ZipInputStream;->readLOC()Ljava/util/zip/ZipEntry;
-PLjava/util/zip/ZipOutputStream$XEntry;-><init>(Ljava/util/zip/ZipEntry;J)V
-PLjava/util/zip/ZipOutputStream;-><init>(Ljava/io/OutputStream;)V
-PLjava/util/zip/ZipOutputStream;-><init>(Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V
-PLjava/util/zip/ZipOutputStream;->close()V
-PLjava/util/zip/ZipOutputStream;->closeEntry()V
-PLjava/util/zip/ZipOutputStream;->ensureOpen()V
-PLjava/util/zip/ZipOutputStream;->finish()V
-PLjava/util/zip/ZipOutputStream;->getExtraLen([B)I
-PLjava/util/zip/ZipOutputStream;->putNextEntry(Ljava/util/zip/ZipEntry;)V
-PLjava/util/zip/ZipOutputStream;->version(Ljava/util/zip/ZipEntry;)I
-PLjava/util/zip/ZipOutputStream;->write([BII)V
-PLjava/util/zip/ZipOutputStream;->writeBytes([BII)V
-PLjava/util/zip/ZipOutputStream;->writeCEN(Ljava/util/zip/ZipOutputStream$XEntry;)V
-PLjava/util/zip/ZipOutputStream;->writeEND(JJ)V
-PLjava/util/zip/ZipOutputStream;->writeEXT(Ljava/util/zip/ZipEntry;)V
-PLjava/util/zip/ZipOutputStream;->writeExtra([B)V
-PLjava/util/zip/ZipOutputStream;->writeInt(J)V
-PLjava/util/zip/ZipOutputStream;->writeLOC(Ljava/util/zip/ZipOutputStream$XEntry;)V
-PLjava/util/zip/ZipOutputStream;->writeShort(I)V
 HSPLjava/util/zip/ZipUtils;->get16([BI)I
-HSPLjava/util/zip/ZipUtils;->get32([BI)J
-PLjava/util/zip/ZipUtils;->javaToDosTime(J)J
-PLjava/util/zip/ZipUtils;->javaToExtendedDosTime(J)J
-HSPLjava/util/zip/ZipUtils;->unixTimeToFileTime(J)Ljava/nio/file/attribute/FileTime;
-HSPLjavax/crypto/BadPaddingException;-><init>(Ljava/lang/String;)V
 HSPLjavax/crypto/Cipher$CipherSpiAndProvider;-><init>(Ljavax/crypto/CipherSpi;Ljava/security/Provider;)V
 HSPLjavax/crypto/Cipher$InitParams;-><init>(Ljavax/crypto/Cipher$InitType;ILjava/security/Key;Ljava/security/SecureRandom;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/AlgorithmParameters;)V
 HSPLjavax/crypto/Cipher$SpiAndProviderUpdater;-><init>(Ljavax/crypto/Cipher;Ljava/security/Provider;Ljavax/crypto/CipherSpi;)V
@@ -42747,17 +21076,9 @@
 HSPLjavax/crypto/Cipher;->checkOpmode(I)V
 HSPLjavax/crypto/Cipher;->chooseProvider(Ljavax/crypto/Cipher$InitType;ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/AlgorithmParameters;Ljava/security/SecureRandom;)V
 HSPLjavax/crypto/Cipher;->createCipher(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Cipher;
-HSPLjavax/crypto/Cipher;->doFinal(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
 HSPLjavax/crypto/Cipher;->doFinal([B)[B
-HSPLjavax/crypto/Cipher;->doFinal([BI)I
 HSPLjavax/crypto/Cipher;->doFinal([BII)[B
-HSPLjavax/crypto/Cipher;->doFinal([BII[BI)I
-HSPLjavax/crypto/Cipher;->getBlockSize()I
-PLjavax/crypto/Cipher;->getIV()[B
 HSPLjavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
-HSPLjavax/crypto/Cipher;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/Cipher;
-HSPLjavax/crypto/Cipher;->getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Cipher;
-HSPLjavax/crypto/Cipher;->getOutputSize(I)I
 HSPLjavax/crypto/Cipher;->init(ILjava/security/Key;)V
 HSPLjavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/SecureRandom;)V
 HSPLjavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
@@ -42766,100 +21087,33 @@
 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;
-PLjavax/crypto/Cipher;->unwrap([BLjava/lang/String;I)Ljava/security/Key;
-HPLjavax/crypto/Cipher;->update(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
-HSPLjavax/crypto/Cipher;->update([BII[BI)I
-HSPLjavax/crypto/Cipher;->updateAAD([B)V
-HSPLjavax/crypto/Cipher;->updateAAD([BII)V
 HSPLjavax/crypto/Cipher;->updateProviderIfNeeded()V
-HPLjavax/crypto/Cipher;->wrap(Ljava/security/Key;)[B
 HSPLjavax/crypto/CipherSpi;-><init>()V
-HSPLjavax/crypto/CipherSpi;->bufferCrypt(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Z)I
-HSPLjavax/crypto/CipherSpi;->engineDoFinal(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
-HPLjavax/crypto/CipherSpi;->engineUpdate(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
-HSPLjavax/crypto/JarVerifier;-><init>(Ljava/net/URL;Z)V
-HSPLjavax/crypto/JarVerifier;->verify()V
-HSPLjavax/crypto/JceSecurity$1;-><init>(Ljava/lang/Class;)V
-HSPLjavax/crypto/JceSecurity$1;->run()Ljava/lang/Object;
-HSPLjavax/crypto/JceSecurity$1;->run()Ljava/net/URL;
-HSPLjavax/crypto/JceSecurity;->access$000()Ljava/net/URL;
 HSPLjavax/crypto/JceSecurity;->canUseProvider(Ljava/security/Provider;)Z
-HSPLjavax/crypto/JceSecurity;->getCodeBase(Ljava/lang/Class;)Ljava/net/URL;
-PLjavax/crypto/JceSecurity;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)Lsun/security/jca/GetInstance$Instance;
-HSPLjavax/crypto/JceSecurity;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/security/Provider;)Lsun/security/jca/GetInstance$Instance;
-HSPLjavax/crypto/JceSecurity;->getVerificationResult(Ljava/security/Provider;)Ljava/lang/Exception;
-HSPLjavax/crypto/JceSecurity;->verifyProviderJar(Ljava/net/URL;)V
-PLjavax/crypto/KeyAgreement;-><clinit>()V
-PLjavax/crypto/KeyAgreement;-><init>(Ljava/lang/String;)V
-PLjavax/crypto/KeyAgreement;->chooseFirstProvider()V
-PLjavax/crypto/KeyAgreement;->chooseProvider(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
-PLjavax/crypto/KeyAgreement;->doPhase(Ljava/security/Key;Z)Ljava/security/Key;
-PLjavax/crypto/KeyAgreement;->generateSecret()[B
-PLjavax/crypto/KeyAgreement;->getInstance(Ljava/lang/String;)Ljavax/crypto/KeyAgreement;
-PLjavax/crypto/KeyAgreement;->implInit(Ljavax/crypto/KeyAgreementSpi;ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
-PLjavax/crypto/KeyAgreement;->init(Ljava/security/Key;)V
-PLjavax/crypto/KeyAgreement;->init(Ljava/security/Key;Ljava/security/SecureRandom;)V
-PLjavax/crypto/KeyAgreementSpi;-><init>()V
 HSPLjavax/crypto/KeyGenerator;-><init>(Ljava/lang/String;)V
 HSPLjavax/crypto/KeyGenerator;->generateKey()Ljavax/crypto/SecretKey;
 HSPLjavax/crypto/KeyGenerator;->getInstance(Ljava/lang/String;)Ljavax/crypto/KeyGenerator;
-PLjavax/crypto/KeyGenerator;->init(I)V
-PLjavax/crypto/KeyGenerator;->init(ILjava/security/SecureRandom;)V
 HSPLjavax/crypto/KeyGenerator;->nextSpi(Ljavax/crypto/KeyGeneratorSpi;Z)Ljavax/crypto/KeyGeneratorSpi;
 HSPLjavax/crypto/KeyGeneratorSpi;-><init>()V
 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
-PLjavax/crypto/Mac;->clone()Ljava/lang/Object;
 HSPLjavax/crypto/Mac;->doFinal()[B
 HSPLjavax/crypto/Mac;->doFinal([B)[B
-PLjavax/crypto/Mac;->doFinal([BI)V
-PLjavax/crypto/Mac;->getAlgorithm()Ljava/lang/String;
 HSPLjavax/crypto/Mac;->getInstance(Ljava/lang/String;)Ljavax/crypto/Mac;
-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
-HPLjavax/crypto/Mac;->init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
-HSPLjavax/crypto/Mac;->reset()V
-HSPLjavax/crypto/Mac;->update(B)V
 HSPLjavax/crypto/Mac;->update([B)V
-HPLjavax/crypto/Mac;->update([BII)V
 HSPLjavax/crypto/MacSpi;-><init>()V
-PLjavax/crypto/MacSpi;->clone()Ljava/lang/Object;
-HSPLjavax/crypto/SecretKeyFactory;-><init>(Ljava/lang/String;)V
-PLjavax/crypto/SecretKeyFactory;-><init>(Ljavax/crypto/SecretKeyFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V
-HSPLjavax/crypto/SecretKeyFactory;->generateSecret(Ljava/security/spec/KeySpec;)Ljavax/crypto/SecretKey;
-HSPLjavax/crypto/SecretKeyFactory;->getInstance(Ljava/lang/String;)Ljavax/crypto/SecretKeyFactory;
-PLjavax/crypto/SecretKeyFactory;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/SecretKeyFactory;
-PLjavax/crypto/SecretKeyFactory;->getKeySpec(Ljavax/crypto/SecretKey;Ljava/lang/Class;)Ljava/security/spec/KeySpec;
-HSPLjavax/crypto/SecretKeyFactory;->nextSpi(Ljavax/crypto/SecretKeyFactorySpi;)Ljavax/crypto/SecretKeyFactorySpi;
-HSPLjavax/crypto/SecretKeyFactorySpi;-><init>()V
 HSPLjavax/crypto/spec/GCMParameterSpec;-><init>(I[B)V
-HSPLjavax/crypto/spec/GCMParameterSpec;-><init>(I[BII)V
 HSPLjavax/crypto/spec/GCMParameterSpec;->getIV()[B
 HSPLjavax/crypto/spec/GCMParameterSpec;->getTLen()I
 HSPLjavax/crypto/spec/GCMParameterSpec;->init(I[BII)V
 HSPLjavax/crypto/spec/IvParameterSpec;-><init>([B)V
 HSPLjavax/crypto/spec/IvParameterSpec;-><init>([BII)V
 HSPLjavax/crypto/spec/IvParameterSpec;->getIV()[B
-HSPLjavax/crypto/spec/OAEPParameterSpec;->getMGFParameters()Ljava/security/spec/AlgorithmParameterSpec;
-HSPLjavax/crypto/spec/OAEPParameterSpec;->getPSource()Ljavax/crypto/spec/PSource;
-HSPLjavax/crypto/spec/PBEKeySpec;-><init>([C[BII)V
-HSPLjavax/crypto/spec/PBEKeySpec;->getIterationCount()I
-HSPLjavax/crypto/spec/PBEKeySpec;->getPassword()[C
-HSPLjavax/crypto/spec/PBEKeySpec;->getSalt()[B
-HPLjavax/crypto/spec/PBEParameterSpec;-><init>([BI)V
-HPLjavax/crypto/spec/PBEParameterSpec;->getIterationCount()I
-HPLjavax/crypto/spec/PBEParameterSpec;->getParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;
-HPLjavax/crypto/spec/PBEParameterSpec;->getSalt()[B
-HSPLjavax/crypto/spec/PSource$PSpecified;->getValue()[B
-HPLjavax/crypto/spec/SecretKeySpec;-><init>([BIILjava/lang/String;)V
 HSPLjavax/crypto/spec/SecretKeySpec;-><init>([BLjava/lang/String;)V
-HSPLjavax/crypto/spec/SecretKeySpec;->getAlgorithm()Ljava/lang/String;
 HSPLjavax/crypto/spec/SecretKeySpec;->getEncoded()[B
 HSPLjavax/crypto/spec/SecretKeySpec;->getFormat()Ljava/lang/String;
-HSPLjavax/microedition/khronos/egl/EGLContext;->getEGL()Ljavax/microedition/khronos/egl/EGL;
 HSPLjavax/net/DefaultSocketFactory;-><init>()V
 HSPLjavax/net/DefaultSocketFactory;->createSocket()Ljava/net/Socket;
 HSPLjavax/net/DefaultSocketFactory;->createSocket(Ljava/net/InetAddress;I)Ljava/net/Socket;
@@ -42887,28 +21141,29 @@
 HSPLjavax/net/ssl/SNIServerName;-><init>(I[B)V
 HSPLjavax/net/ssl/SNIServerName;->getType()I
 HSPLjavax/net/ssl/SSLContext;-><init>(Ljavax/net/ssl/SSLContextSpi;Ljava/security/Provider;Ljava/lang/String;)V
-HPLjavax/net/ssl/SSLContext;->createSSLEngine(Ljava/lang/String;I)Ljavax/net/ssl/SSLEngine;
-HSPLjavax/net/ssl/SSLContext;->getClientSessionContext()Ljavax/net/ssl/SSLSessionContext;
 HSPLjavax/net/ssl/SSLContext;->getDefault()Ljavax/net/ssl/SSLContext;
 HSPLjavax/net/ssl/SSLContext;->getInstance(Ljava/lang/String;)Ljavax/net/ssl/SSLContext;
-HSPLjavax/net/ssl/SSLContext;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/net/ssl/SSLContext;
 HSPLjavax/net/ssl/SSLContext;->getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/net/ssl/SSLContext;
 HSPLjavax/net/ssl/SSLContext;->getSocketFactory()Ljavax/net/ssl/SSLSocketFactory;
-HSPLjavax/net/ssl/SSLContext;->getSupportedSSLParameters()Ljavax/net/ssl/SSLParameters;
 HSPLjavax/net/ssl/SSLContext;->init([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V
 HSPLjavax/net/ssl/SSLContext;->setDefault(Ljavax/net/ssl/SSLContext;)V
 HSPLjavax/net/ssl/SSLContextSpi;-><init>()V
-HSPLjavax/net/ssl/SSLContextSpi;->engineGetSupportedSSLParameters()Ljavax/net/ssl/SSLParameters;
-HSPLjavax/net/ssl/SSLContextSpi;->getDefaultSocket()Ljavax/net/ssl/SSLSocket;
-HPLjavax/net/ssl/SSLEngine;-><init>()V
-HPLjavax/net/ssl/SSLEngine;->wrap([Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;
-HPLjavax/net/ssl/SSLEngineResult;-><init>(Ljavax/net/ssl/SSLEngineResult$Status;Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;II)V
-HPLjavax/net/ssl/SSLEngineResult;->bytesConsumed()I
-HPLjavax/net/ssl/SSLEngineResult;->bytesProduced()I
-HPLjavax/net/ssl/SSLEngineResult;->getHandshakeStatus()Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;
-HPLjavax/net/ssl/SSLEngineResult;->getStatus()Ljavax/net/ssl/SSLEngineResult$Status;
+HSPLjavax/net/ssl/SSLEngine;-><init>()V
+HSPLjavax/net/ssl/SSLEngine;->getSSLParameters()Ljavax/net/ssl/SSLParameters;
+HSPLjavax/net/ssl/SSLEngine;->setSSLParameters(Ljavax/net/ssl/SSLParameters;)V
+HSPLjavax/net/ssl/SSLEngine;->wrap([Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;
+HSPLjavax/net/ssl/SSLEngineResult$HandshakeStatus;-><clinit>()V
+HSPLjavax/net/ssl/SSLEngineResult$HandshakeStatus;-><init>(Ljava/lang/String;I)V
+HSPLjavax/net/ssl/SSLEngineResult$HandshakeStatus;->values()[Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;
+HSPLjavax/net/ssl/SSLEngineResult$Status;-><clinit>()V
+HSPLjavax/net/ssl/SSLEngineResult$Status;-><init>(Ljava/lang/String;I)V
+HSPLjavax/net/ssl/SSLEngineResult$Status;->values()[Ljavax/net/ssl/SSLEngineResult$Status;
+HSPLjavax/net/ssl/SSLEngineResult;-><init>(Ljavax/net/ssl/SSLEngineResult$Status;Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;II)V
+HSPLjavax/net/ssl/SSLEngineResult;->bytesConsumed()I
+HSPLjavax/net/ssl/SSLEngineResult;->bytesProduced()I
+HSPLjavax/net/ssl/SSLEngineResult;->getHandshakeStatus()Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;
+HSPLjavax/net/ssl/SSLEngineResult;->getStatus()Ljavax/net/ssl/SSLEngineResult$Status;
 HSPLjavax/net/ssl/SSLException;-><init>(Ljava/lang/String;)V
-HPLjavax/net/ssl/SSLHandshakeException;-><init>(Ljava/lang/String;)V
 HSPLjavax/net/ssl/SSLParameters;-><init>()V
 HSPLjavax/net/ssl/SSLParameters;->clone([Ljava/lang/String;)[Ljava/lang/String;
 HSPLjavax/net/ssl/SSLParameters;->getApplicationProtocols()[Ljava/lang/String;
@@ -42925,7 +21180,6 @@
 HSPLjavax/net/ssl/SSLParameters;->setProtocols([Ljava/lang/String;)V
 HSPLjavax/net/ssl/SSLParameters;->setServerNames(Ljava/util/List;)V
 HSPLjavax/net/ssl/SSLParameters;->setUseCipherSuitesOrder(Z)V
-HPLjavax/net/ssl/SSLProtocolException;-><init>(Ljava/lang/String;)V
 HSPLjavax/net/ssl/SSLSocket;-><init>()V
 HSPLjavax/net/ssl/SSLSocket;->getSSLParameters()Ljavax/net/ssl/SSLParameters;
 HSPLjavax/net/ssl/SSLSocket;->setSSLParameters(Ljavax/net/ssl/SSLParameters;)V
@@ -42944,7 +21198,7 @@
 HSPLjavax/net/ssl/TrustManagerFactory;->getInstance(Ljava/lang/String;)Ljavax/net/ssl/TrustManagerFactory;
 HSPLjavax/net/ssl/TrustManagerFactory;->getTrustManagers()[Ljavax/net/ssl/TrustManager;
 HSPLjavax/net/ssl/TrustManagerFactory;->init(Ljava/security/KeyStore;)V
-HSLjavax/net/ssl/TrustManagerFactorySpi;-><init>()V
+HSPLjavax/net/ssl/TrustManagerFactorySpi;-><init>()V
 HSPLjavax/net/ssl/X509ExtendedKeyManager;-><init>()V
 HSPLjavax/net/ssl/X509ExtendedTrustManager;-><init>()V
 HSPLjavax/security/auth/x500/X500Principal;-><init>(Ljava/lang/String;)V
@@ -42953,103 +21207,49 @@
 HSPLjavax/security/auth/x500/X500Principal;-><init>([B)V
 HSPLjavax/security/auth/x500/X500Principal;->equals(Ljava/lang/Object;)Z
 HSPLjavax/security/auth/x500/X500Principal;->getEncoded()[B
-HSPLjavax/security/auth/x500/X500Principal;->getName()Ljava/lang/String;
 HSPLjavax/security/auth/x500/X500Principal;->getName(Ljava/lang/String;)Ljava/lang/String;
 HSPLjavax/security/auth/x500/X500Principal;->hashCode()I
-HSPLjavax/xml/parsers/DocumentBuilder;-><init>()V
-HSPLjavax/xml/parsers/DocumentBuilder;->parse(Ljava/io/InputStream;)Lorg/w3c/dom/Document;
-HSPLjavax/xml/parsers/DocumentBuilderFactory;-><init>()V
-HSPLjavax/xml/parsers/DocumentBuilderFactory;->isCoalescing()Z
-HSPLjavax/xml/parsers/DocumentBuilderFactory;->isIgnoringComments()Z
-HSPLjavax/xml/parsers/DocumentBuilderFactory;->isIgnoringElementContentWhitespace()Z
-HSPLjavax/xml/parsers/DocumentBuilderFactory;->isNamespaceAware()Z
-HSPLjavax/xml/parsers/DocumentBuilderFactory;->isValidating()Z
-HSPLjavax/xml/parsers/DocumentBuilderFactory;->newInstance()Ljavax/xml/parsers/DocumentBuilderFactory;
-HSPLjavax/xml/parsers/DocumentBuilderFactory;->setNamespaceAware(Z)V
-HPLjavax/xml/parsers/SAXParser;-><init>()V
-HSPLjavax/xml/parsers/SAXParserFactory;-><init>()V
-HSPLjavax/xml/parsers/SAXParserFactory;->newInstance()Ljavax/xml/parsers/SAXParserFactory;
-HSPLlibcore/content/type/MimeMap$MemoizingSupplier;->get()Ljava/lang/Object;
-HSPLlibcore/content/type/MimeMap;-><init>(Ljava/util/Map;Ljava/util/Map;)V
-HSPLlibcore/content/type/MimeMap;-><init>(Ljava/util/Map;Ljava/util/Map;Llibcore/content/type/MimeMap$1;)V
-HSPLlibcore/content/type/MimeMap;->access$000(Ljava/lang/String;)Ljava/lang/String;
-HSPLlibcore/content/type/MimeMap;->builder()Llibcore/content/type/MimeMap$Builder;
-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;
-PLlibcore/icu/CollationKeyICU;-><init>(Ljava/lang/String;Landroid/icu/text/CollationKey;)V
-PLlibcore/icu/CollationKeyICU;->toByteArray()[B
 HSPLlibcore/icu/DateIntervalFormat;->formatDateRange(JJILjava/lang/String;)Ljava/lang/String;
 HSPLlibcore/icu/DateIntervalFormat;->formatDateRange(Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;JJI)Ljava/lang/String;
 HSPLlibcore/icu/DateIntervalFormat;->getFormatter(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;)Landroid/icu/text/DateIntervalFormat;
 HSPLlibcore/icu/DateIntervalFormat;->isExactlyMidnight(Landroid/icu/util/Calendar;)Z
 HSPLlibcore/icu/DateUtilsBridge;->createIcuCalendar(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;J)Landroid/icu/util/Calendar;
 HSPLlibcore/icu/DateUtilsBridge;->fallInSameMonth(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z
-HSPLlibcore/icu/DateUtilsBridge;->fallInSameYear(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z
 HSPLlibcore/icu/DateUtilsBridge;->fallOnDifferentDates(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z
 HSPLlibcore/icu/DateUtilsBridge;->icuTimeZone(Ljava/util/TimeZone;)Landroid/icu/util/TimeZone;
-HSPLlibcore/icu/DateUtilsBridge;->isThisYear(Landroid/icu/util/Calendar;)Z
 HSPLlibcore/icu/DateUtilsBridge;->toSkeleton(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;I)Ljava/lang/String;
-HSPLlibcore/icu/ICU;->getAvailableLocales()[Ljava/util/Locale;
 HSPLlibcore/icu/ICU;->getBestDateTimePattern(Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String;
-HSPLlibcore/icu/ICU;->getISOCountries()[Ljava/lang/String;
-HSPLlibcore/icu/ICU;->localeFromIcuLocaleId(Ljava/lang/String;)Ljava/util/Locale;
-HSPLlibcore/icu/ICU;->localesFromStrings([Ljava/lang/String;)[Ljava/util/Locale;
-HSPLlibcore/icu/ICU;->parseLangScriptRegionAndVariants(Ljava/lang/String;[Ljava/lang/String;)V
-HSPLlibcore/icu/LocaleData;-><init>()V
-HSPLlibcore/icu/LocaleData;->get(Ljava/util/Locale;)Llibcore/icu/LocaleData;
 HSPLlibcore/icu/LocaleData;->getDateFormat(I)Ljava/lang/String;
 HSPLlibcore/icu/LocaleData;->getTimeFormat(I)Ljava/lang/String;
-HSPLlibcore/icu/LocaleData;->initLocaleData(Ljava/util/Locale;)Llibcore/icu/LocaleData;
-HSPLlibcore/icu/LocaleData;->initializePatternSeparator(Llibcore/icu/LocaleData;Ljava/util/Locale;)V
-HSPLlibcore/icu/LocaleData;->mapInvalidAndNullLocales(Ljava/util/Locale;)Ljava/util/Locale;
 HSPLlibcore/internal/StringPool;-><init>()V
-HSPLlibcore/internal/StringPool;->contentEquals(Ljava/lang/String;[CII)Z
 HSPLlibcore/internal/StringPool;->get([CII)Ljava/lang/String;
 HSPLlibcore/io/BlockGuardOs;->accept(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)Ljava/io/FileDescriptor;
 HSPLlibcore/io/BlockGuardOs;->access(Ljava/lang/String;I)Z
 HSPLlibcore/io/BlockGuardOs;->android_getaddrinfo(Ljava/lang/String;Landroid/system/StructAddrinfo;I)[Ljava/net/InetAddress;
 HSPLlibcore/io/BlockGuardOs;->chmod(Ljava/lang/String;I)V
-HSPLlibcore/io/BlockGuardOs;->chown(Ljava/lang/String;II)V
 HSPLlibcore/io/BlockGuardOs;->close(Ljava/io/FileDescriptor;)V
 HSPLlibcore/io/BlockGuardOs;->connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
-HPLlibcore/io/BlockGuardOs;->connect(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V
-HSPLlibcore/io/BlockGuardOs;->fchmod(Ljava/io/FileDescriptor;I)V
-HSPLlibcore/io/BlockGuardOs;->fchown(Ljava/io/FileDescriptor;II)V
 HSPLlibcore/io/BlockGuardOs;->fdatasync(Ljava/io/FileDescriptor;)V
 HSPLlibcore/io/BlockGuardOs;->fstat(Ljava/io/FileDescriptor;)Landroid/system/StructStat;
-HPLlibcore/io/BlockGuardOs;->fsync(Ljava/io/FileDescriptor;)V
 HSPLlibcore/io/BlockGuardOs;->ftruncate(Ljava/io/FileDescriptor;J)V
-HSPLlibcore/io/BlockGuardOs;->getxattr(Ljava/lang/String;Ljava/lang/String;)[B
 HSPLlibcore/io/BlockGuardOs;->isInetDomain(I)Z
 HSPLlibcore/io/BlockGuardOs;->isInetSocket(Ljava/io/FileDescriptor;)Z
 HSPLlibcore/io/BlockGuardOs;->isLingerSocket(Ljava/io/FileDescriptor;)Z
 HSPLlibcore/io/BlockGuardOs;->isUdpSocket(Ljava/io/FileDescriptor;)Z
 HSPLlibcore/io/BlockGuardOs;->lseek(Ljava/io/FileDescriptor;JI)J
-HSPLlibcore/io/BlockGuardOs;->lstat(Ljava/lang/String;)Landroid/system/StructStat;
 HSPLlibcore/io/BlockGuardOs;->mkdir(Ljava/lang/String;I)V
 HSPLlibcore/io/BlockGuardOs;->open(Ljava/lang/String;II)Ljava/io/FileDescriptor;
 HSPLlibcore/io/BlockGuardOs;->poll([Landroid/system/StructPollfd;I)I
-HSPLlibcore/io/BlockGuardOs;->posix_fallocate(Ljava/io/FileDescriptor;JJ)V
-HPLlibcore/io/BlockGuardOs;->read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
 HSPLlibcore/io/BlockGuardOs;->read(Ljava/io/FileDescriptor;[BII)I
-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
 HSPLlibcore/io/BlockGuardOs;->rename(Ljava/lang/String;Ljava/lang/String;)V
-HPLlibcore/io/BlockGuardOs;->sendto(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;ILjava/net/InetAddress;I)I
 HSPLlibcore/io/BlockGuardOs;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/InetAddress;I)I
-HPLlibcore/io/BlockGuardOs;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/SocketAddress;)I
 HSPLlibcore/io/BlockGuardOs;->socket(III)Ljava/io/FileDescriptor;
 HSPLlibcore/io/BlockGuardOs;->socketpair(IIILjava/io/FileDescriptor;Ljava/io/FileDescriptor;)V
 HSPLlibcore/io/BlockGuardOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;
 HSPLlibcore/io/BlockGuardOs;->statvfs(Ljava/lang/String;)Landroid/system/StructStatVfs;
-HSPLlibcore/io/BlockGuardOs;->symlink(Ljava/lang/String;Ljava/lang/String;)V
 HSPLlibcore/io/BlockGuardOs;->tagSocket(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;
-HPLlibcore/io/BlockGuardOs;->write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
 HSPLlibcore/io/BlockGuardOs;->write(Ljava/io/FileDescriptor;[BII)I
 HSPLlibcore/io/BufferIterator;-><init>()V
 HSPLlibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection$1;-><init>(Llibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;Ljava/io/InputStream;)V
@@ -43069,21 +21269,15 @@
 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
-HSPLlibcore/io/ForwardingOs;->bind(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V
 HSPLlibcore/io/ForwardingOs;->capget(Landroid/system/StructCapUserHeader;)[Landroid/system/StructCapUserData;
 HSPLlibcore/io/ForwardingOs;->chmod(Ljava/lang/String;I)V
-HSPLlibcore/io/ForwardingOs;->chown(Ljava/lang/String;II)V
 HSPLlibcore/io/ForwardingOs;->close(Ljava/io/FileDescriptor;)V
 HSPLlibcore/io/ForwardingOs;->connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
-HPLlibcore/io/ForwardingOs;->connect(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V
 HSPLlibcore/io/ForwardingOs;->dup2(Ljava/io/FileDescriptor;I)Ljava/io/FileDescriptor;
-HSPLlibcore/io/ForwardingOs;->fchmod(Ljava/io/FileDescriptor;I)V
-HSPLlibcore/io/ForwardingOs;->fchown(Ljava/io/FileDescriptor;II)V
 HSPLlibcore/io/ForwardingOs;->fcntlInt(Ljava/io/FileDescriptor;II)I
 HSPLlibcore/io/ForwardingOs;->fcntlVoid(Ljava/io/FileDescriptor;I)I
 HSPLlibcore/io/ForwardingOs;->fdatasync(Ljava/io/FileDescriptor;)V
 HSPLlibcore/io/ForwardingOs;->fstat(Ljava/io/FileDescriptor;)Landroid/system/StructStat;
-HPLlibcore/io/ForwardingOs;->fsync(Ljava/io/FileDescriptor;)V
 HSPLlibcore/io/ForwardingOs;->ftruncate(Ljava/io/FileDescriptor;J)V
 HSPLlibcore/io/ForwardingOs;->gai_strerror(I)Ljava/lang/String;
 HSPLlibcore/io/ForwardingOs;->getenv(Ljava/lang/String;)Ljava/lang/String;
@@ -43092,45 +21286,28 @@
 HSPLlibcore/io/ForwardingOs;->getpeername(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;
 HSPLlibcore/io/ForwardingOs;->getpgid(I)I
 HSPLlibcore/io/ForwardingOs;->getpid()I
-HSPLlibcore/io/ForwardingOs;->getrlimit(I)Landroid/system/StructRlimit;
 HSPLlibcore/io/ForwardingOs;->getsockname(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;
 HSPLlibcore/io/ForwardingOs;->getsockoptInt(Ljava/io/FileDescriptor;II)I
 HSPLlibcore/io/ForwardingOs;->getsockoptLinger(Ljava/io/FileDescriptor;II)Landroid/system/StructLinger;
 HSPLlibcore/io/ForwardingOs;->gettid()I
 HSPLlibcore/io/ForwardingOs;->getuid()I
-HSPLlibcore/io/ForwardingOs;->getxattr(Ljava/lang/String;Ljava/lang/String;)[B
 HSPLlibcore/io/ForwardingOs;->if_nametoindex(Ljava/lang/String;)I
 HSPLlibcore/io/ForwardingOs;->ioctlInt(Ljava/io/FileDescriptor;ILandroid/system/Int32Ref;)I
-HPLlibcore/io/ForwardingOs;->kill(II)V
 HSPLlibcore/io/ForwardingOs;->listen(Ljava/io/FileDescriptor;I)V
 HSPLlibcore/io/ForwardingOs;->lseek(Ljava/io/FileDescriptor;JI)J
-HSPLlibcore/io/ForwardingOs;->lstat(Ljava/lang/String;)Landroid/system/StructStat;
 HSPLlibcore/io/ForwardingOs;->mkdir(Ljava/lang/String;I)V
-HSPLlibcore/io/ForwardingOs;->mlock(JJ)V
-HSPLlibcore/io/ForwardingOs;->mmap(JJIILjava/io/FileDescriptor;J)J
-HSPLlibcore/io/ForwardingOs;->munmap(JJ)V
 HSPLlibcore/io/ForwardingOs;->open(Ljava/lang/String;II)Ljava/io/FileDescriptor;
 HSPLlibcore/io/ForwardingOs;->pipe2(I)[Ljava/io/FileDescriptor;
 HSPLlibcore/io/ForwardingOs;->poll([Landroid/system/StructPollfd;I)I
-HSPLlibcore/io/ForwardingOs;->posix_fallocate(Ljava/io/FileDescriptor;JJ)V
-HSPLlibcore/io/ForwardingOs;->prctl(IJJJJ)I
-HPLlibcore/io/ForwardingOs;->read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
 HSPLlibcore/io/ForwardingOs;->read(Ljava/io/FileDescriptor;[BII)I
-HSPLlibcore/io/ForwardingOs;->readlink(Ljava/lang/String;)Ljava/lang/String;
 HSPLlibcore/io/ForwardingOs;->recvfrom(Ljava/io/FileDescriptor;[BIIILjava/net/InetSocketAddress;)I
 HSPLlibcore/io/ForwardingOs;->remove(Ljava/lang/String;)V
 HSPLlibcore/io/ForwardingOs;->rename(Ljava/lang/String;Ljava/lang/String;)V
-HPLlibcore/io/ForwardingOs;->sendto(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;ILjava/net/InetAddress;I)I
 HSPLlibcore/io/ForwardingOs;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/InetAddress;I)I
-HPLlibcore/io/ForwardingOs;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/SocketAddress;)I
 HSPLlibcore/io/ForwardingOs;->setpgid(II)V
 HSPLlibcore/io/ForwardingOs;->setregid(II)V
 HSPLlibcore/io/ForwardingOs;->setreuid(II)V
-HPLlibcore/io/ForwardingOs;->setsockoptByte(Ljava/io/FileDescriptor;III)V
-HSPLlibcore/io/ForwardingOs;->setsockoptGroupReq(Ljava/io/FileDescriptor;IILandroid/system/StructGroupReq;)V
-HPLlibcore/io/ForwardingOs;->setsockoptIfreq(Ljava/io/FileDescriptor;IILjava/lang/String;)V
 HSPLlibcore/io/ForwardingOs;->setsockoptInt(Ljava/io/FileDescriptor;III)V
-HSPLlibcore/io/ForwardingOs;->setsockoptIpMreqn(Ljava/io/FileDescriptor;III)V
 HSPLlibcore/io/ForwardingOs;->setsockoptTimeval(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V
 HSPLlibcore/io/ForwardingOs;->shutdown(Ljava/io/FileDescriptor;I)V
 HSPLlibcore/io/ForwardingOs;->socket(III)Ljava/io/FileDescriptor;
@@ -43138,19 +21315,12 @@
 HSPLlibcore/io/ForwardingOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;
 HSPLlibcore/io/ForwardingOs;->statvfs(Ljava/lang/String;)Landroid/system/StructStatVfs;
 HSPLlibcore/io/ForwardingOs;->strerror(I)Ljava/lang/String;
-PLlibcore/io/ForwardingOs;->strsignal(I)Ljava/lang/String;
-HSPLlibcore/io/ForwardingOs;->symlink(Ljava/lang/String;Ljava/lang/String;)V
 HSPLlibcore/io/ForwardingOs;->sysconf(I)J
-HSPLlibcore/io/ForwardingOs;->umask(I)I
-HSPLlibcore/io/ForwardingOs;->uname()Landroid/system/StructUtsname;
-HPLlibcore/io/ForwardingOs;->write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
 HSPLlibcore/io/ForwardingOs;->write(Ljava/io/FileDescriptor;[BII)I
-HSPLlibcore/io/IoBridge;->available(Ljava/io/FileDescriptor;)I
 HSPLlibcore/io/IoBridge;->bind(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
 HSPLlibcore/io/IoBridge;->booleanFromInt(I)Z
 HSPLlibcore/io/IoBridge;->booleanToInt(Z)I
 HSPLlibcore/io/IoBridge;->closeAndSignalBlockedThreads(Ljava/io/FileDescriptor;)V
-HSPLlibcore/io/IoBridge;->connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
 HSPLlibcore/io/IoBridge;->connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;II)V
 HSPLlibcore/io/IoBridge;->connectErrno(Ljava/io/FileDescriptor;Ljava/net/InetAddress;II)V
 HSPLlibcore/io/IoBridge;->createMessageForException(Ljava/io/FileDescriptor;Ljava/net/InetAddress;IILjava/lang/Exception;)Ljava/lang/String;
@@ -43158,8 +21328,6 @@
 HSPLlibcore/io/IoBridge;->getSocketOption(Ljava/io/FileDescriptor;I)Ljava/lang/Object;
 HSPLlibcore/io/IoBridge;->getSocketOptionErrno(Ljava/io/FileDescriptor;I)Ljava/lang/Object;
 HSPLlibcore/io/IoBridge;->isConnected(Ljava/io/FileDescriptor;Ljava/net/InetAddress;III)Z
-HPLlibcore/io/IoBridge;->maybeThrowAfterRecvfrom(ZZLandroid/system/ErrnoException;)I
-HSPLlibcore/io/IoBridge;->maybeThrowAfterSendto(ZLandroid/system/ErrnoException;)I
 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
@@ -43174,10 +21342,6 @@
 HSPLlibcore/io/IoTracker;->reset()V
 HSPLlibcore/io/IoTracker;->trackIo(I)V
 HSPLlibcore/io/IoTracker;->trackIo(ILlibcore/io/IoTracker$Mode;)V
-HSPLlibcore/io/IoUtils$FileReader;-><init>(Ljava/lang/String;)V
-HSPLlibcore/io/IoUtils$FileReader;->readFully()Llibcore/io/IoUtils$FileReader;
-HSPLlibcore/io/IoUtils$FileReader;->toByteArray()[B
-PLlibcore/io/IoUtils$FileReader;->toString(Ljava/nio/charset/Charset;)Ljava/lang/String;
 HSPLlibcore/io/IoUtils;->acquireRawFd(Ljava/io/FileDescriptor;)I
 HSPLlibcore/io/IoUtils;->canOpenReadOnly(Ljava/lang/String;)Z
 HSPLlibcore/io/IoUtils;->close(Ljava/io/FileDescriptor;)V
@@ -43185,20 +21349,13 @@
 HSPLlibcore/io/IoUtils;->closeQuietly(Ljava/lang/AutoCloseable;)V
 HSPLlibcore/io/IoUtils;->generateFdOwnerId(Ljava/lang/Object;)J
 HSPLlibcore/io/IoUtils;->isParcelFileDescriptor(Ljava/lang/Object;)Z
-HSPLlibcore/io/IoUtils;->readFileAsByteArray(Ljava/lang/String;)[B
 HSPLlibcore/io/IoUtils;->setBlocking(Ljava/io/FileDescriptor;Z)V
 HSPLlibcore/io/IoUtils;->setFdOwner(Ljava/io/FileDescriptor;Ljava/lang/Object;)V
 HSPLlibcore/io/Libcore;->compareAndSetOs(Llibcore/io/Os;Llibcore/io/Os;)Z
 HSPLlibcore/io/Libcore;->getOs()Llibcore/io/Os;
-HPLlibcore/io/Linux;->maybeUpdateBufferPosition(Ljava/nio/ByteBuffer;II)V
-HPLlibcore/io/Linux;->read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
 HSPLlibcore/io/Linux;->read(Ljava/io/FileDescriptor;[BII)I
 HSPLlibcore/io/Linux;->recvfrom(Ljava/io/FileDescriptor;[BIIILjava/net/InetSocketAddress;)I
-HPLlibcore/io/Linux;->sendto(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;ILjava/net/InetAddress;I)I
 HSPLlibcore/io/Linux;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/InetAddress;I)I
-HPLlibcore/io/Linux;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/SocketAddress;)I
-HSPLlibcore/io/Linux;->umask(I)I
-HPLlibcore/io/Linux;->write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
 HSPLlibcore/io/Linux;->write(Ljava/io/FileDescriptor;[BII)I
 HSPLlibcore/io/Memory;->peekInt(JZ)I
 HSPLlibcore/io/Memory;->peekInt([BILjava/nio/ByteOrder;)I
@@ -43206,8 +21363,6 @@
 HSPLlibcore/io/Memory;->peekShort(JZ)S
 HSPLlibcore/io/Memory;->peekShort([BILjava/nio/ByteOrder;)S
 HSPLlibcore/io/Memory;->pokeInt(JIZ)V
-HSPLlibcore/io/Memory;->pokeInt([BIILjava/nio/ByteOrder;)V
-HSPLlibcore/io/Memory;->pokeLong(JJZ)V
 HSPLlibcore/io/MemoryMappedFile;->bigEndianIterator()Llibcore/io/BufferIterator;
 HSPLlibcore/io/MemoryMappedFile;->checkNotClosed()V
 HSPLlibcore/io/NioBufferIterator;-><init>(Llibcore/io/MemoryMappedFile;JIZ)V
@@ -43220,10 +21375,6 @@
 HSPLlibcore/io/NioBufferIterator;->skip(I)V
 HSPLlibcore/io/Os;->compareAndSetDefault(Llibcore/io/Os;Llibcore/io/Os;)Z
 HSPLlibcore/io/Os;->getDefault()Llibcore/io/Os;
-HSPLlibcore/io/Streams;->copy(Ljava/io/InputStream;Ljava/io/OutputStream;)I
-HSPLlibcore/io/Streams;->readFully(Ljava/io/InputStream;)[B
-HPLlibcore/io/Streams;->readFully(Ljava/io/Reader;)Ljava/lang/String;
-HSPLlibcore/io/Streams;->readFullyNoClose(Ljava/io/InputStream;)[B
 HSPLlibcore/net/InetAddressUtils;->parseNumericAddress(Ljava/lang/String;)Ljava/net/InetAddress;
 HSPLlibcore/net/InetAddressUtils;->parseNumericAddressNoThrow(Ljava/lang/String;)Ljava/net/InetAddress;
 HSPLlibcore/net/InetAddressUtils;->parseNumericAddressNoThrowStripOptionalBrackets(Ljava/lang/String;)Ljava/net/InetAddress;
@@ -43234,20 +21385,15 @@
 HSPLlibcore/net/event/NetworkEventDispatcher;->getInstance()Llibcore/net/event/NetworkEventDispatcher;
 HSPLlibcore/net/event/NetworkEventDispatcher;->onNetworkConfigurationChanged()V
 HSPLlibcore/net/event/NetworkEventListener;-><init>()V
-HSPLlibcore/net/http/HttpDate$1;->initialValue()Ljava/lang/Object;
-HSPLlibcore/net/http/HttpDate$1;->initialValue()Ljava/text/DateFormat;
-HSPLlibcore/net/http/HttpDate;->parse(Ljava/lang/String;)Ljava/util/Date;
 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;
 HSPLlibcore/reflect/AnnotationFactory;->getElementsDescription(Ljava/lang/Class;)[Llibcore/reflect/AnnotationMember;
-HSPLlibcore/reflect/AnnotationFactory;->hashCode()I
 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;
-HSPLlibcore/reflect/GenericArrayTypeImpl;-><init>(Ljava/lang/reflect/Type;)V
 HSPLlibcore/reflect/GenericSignatureParser;-><init>(Ljava/lang/ClassLoader;)V
 HSPLlibcore/reflect/GenericSignatureParser;->expect(C)V
 HSPLlibcore/reflect/GenericSignatureParser;->isStopSymbol(C)Z
@@ -43256,20 +21402,15 @@
 HSPLlibcore/reflect/GenericSignatureParser;->parseFieldTypeSignature()Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/GenericSignatureParser;->parseForClass(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;)V
 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;
-HSPLlibcore/reflect/GenericSignatureParser;->parseReturnType()Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/GenericSignatureParser;->parseTypeArgument()Ljava/lang/reflect/Type;
-HSPLlibcore/reflect/GenericSignatureParser;->parseTypeSignature()Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/GenericSignatureParser;->parseTypeVariableSignature()Llibcore/reflect/TypeVariableImpl;
 HSPLlibcore/reflect/GenericSignatureParser;->scanIdentifier()V
 HSPLlibcore/reflect/GenericSignatureParser;->scanSymbol()V
 HSPLlibcore/reflect/GenericSignatureParser;->setInput(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;)V
 HSPLlibcore/reflect/ListOfTypes;-><init>(I)V
-HSPLlibcore/reflect/ListOfTypes;-><init>([Ljava/lang/reflect/Type;)V
 HSPLlibcore/reflect/ListOfTypes;->add(Ljava/lang/reflect/Type;)V
 HSPLlibcore/reflect/ListOfTypes;->getResolvedTypes()[Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/ListOfTypes;->length()I
@@ -43285,69 +21426,39 @@
 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
-HSPLlibcore/reflect/TypeVariableImpl;->equals(Ljava/lang/Object;)Z
 HSPLlibcore/reflect/TypeVariableImpl;->findFormalVar(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;)Ljava/lang/reflect/TypeVariable;
-HSPLlibcore/reflect/TypeVariableImpl;->getBounds()[Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/TypeVariableImpl;->getGenericDeclaration()Ljava/lang/reflect/GenericDeclaration;
 HSPLlibcore/reflect/TypeVariableImpl;->getName()Ljava/lang/String;
-HSPLlibcore/reflect/TypeVariableImpl;->hashCode()I
-HSPLlibcore/reflect/TypeVariableImpl;->nextLayer(Ljava/lang/reflect/GenericDeclaration;)Ljava/lang/reflect/GenericDeclaration;
 HSPLlibcore/reflect/TypeVariableImpl;->resolve()V
 HSPLlibcore/reflect/Types;->getType(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/Types;->getTypeArray(Llibcore/reflect/ListOfTypes;Z)[Ljava/lang/reflect/Type;
-HSPLlibcore/reflect/WildcardTypeImpl;-><init>(Llibcore/reflect/ListOfTypes;Llibcore/reflect/ListOfTypes;)V
-HSPLlibcore/reflect/WildcardTypeImpl;->getLowerBounds()[Ljava/lang/reflect/Type;
-HSPLlibcore/reflect/WildcardTypeImpl;->getUpperBounds()[Ljava/lang/reflect/Type;
-HSPLlibcore/timezone/CountryTimeZones$TimeZoneMapping;-><init>(Ljava/lang/String;ZLjava/lang/Long;)V
-HSPLlibcore/timezone/CountryTimeZones$TimeZoneMapping;->getTimeZone()Landroid/icu/util/TimeZone;
-HSPLlibcore/timezone/CountryTimeZones$TimeZoneMapping;->isEffectiveAt(J)Z
-HSPLlibcore/timezone/CountryTimeZones;-><init>(Ljava/lang/String;Ljava/lang/String;ZZLjava/util/List;)V
-HSPLlibcore/timezone/CountryTimeZones;->createValidated(Ljava/lang/String;Ljava/lang/String;ZZLjava/util/List;Ljava/lang/String;)Llibcore/timezone/CountryTimeZones;
-HSPLlibcore/timezone/CountryTimeZones;->getDefaultTimeZone()Landroid/icu/util/TimeZone;
-HSPLlibcore/timezone/CountryTimeZones;->getDefaultTimeZoneBoost()Z
-HSPLlibcore/timezone/CountryTimeZones;->getEffectiveTimeZoneMappingsAt(J)Ljava/util/List;
-HPLlibcore/timezone/CountryTimeZones;->isForCountryCode(Ljava/lang/String;)Z
-HSPLlibcore/timezone/CountryTimeZones;->normalizeCountryIso(Ljava/lang/String;)Ljava/lang/String;
-HSPLlibcore/timezone/TimeZoneDataFiles;->getDataTimeZoneFile(Ljava/lang/String;)Ljava/lang/String;
-HSPLlibcore/timezone/TimeZoneDataFiles;->getDataTimeZoneRootDir()Ljava/lang/String;
-PLlibcore/timezone/TimeZoneDataFiles;->getEnvironmentPath(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLlibcore/timezone/TimeZoneDataFiles;->getSystemTzFile(Ljava/lang/String;)Ljava/lang/String;
-HSPLlibcore/timezone/TimeZoneDataFiles;->getTimeZoneFilePaths(Ljava/lang/String;)[Ljava/lang/String;
-HSPLlibcore/timezone/TimeZoneDataFiles;->getTimeZoneModuleFile(Ljava/lang/String;)Ljava/lang/String;
-HSPLlibcore/timezone/TimeZoneDataFiles;->getTimeZoneModuleTzFile(Ljava/lang/String;)Ljava/lang/String;
-HSPLlibcore/timezone/TimeZoneFinder$SelectiveCountryTimeZonesExtractor;-><init>(Ljava/lang/String;)V
-HSPLlibcore/timezone/TimeZoneFinder$SelectiveCountryTimeZonesExtractor;-><init>(Ljava/lang/String;Llibcore/timezone/TimeZoneFinder$1;)V
-HSPLlibcore/timezone/TimeZoneFinder$SelectiveCountryTimeZonesExtractor;->getValidatedCountryTimeZones()Llibcore/timezone/CountryTimeZones;
-HSPLlibcore/timezone/TimeZoneFinder$SelectiveCountryTimeZonesExtractor;->processCountryZones(Ljava/lang/String;Ljava/lang/String;ZZLjava/util/List;Ljava/lang/String;)Z
-HSPLlibcore/timezone/TimeZoneFinder$TimeZonesProcessor;->processHeader(Ljava/lang/String;)Z
-HSPLlibcore/timezone/TimeZoneFinder;-><init>(Llibcore/timezone/XmlUtils$ReaderSupplier;)V
-HSPLlibcore/timezone/TimeZoneFinder;->createInstance(Ljava/lang/String;)Llibcore/timezone/TimeZoneFinder;
-HSPLlibcore/timezone/TimeZoneFinder;->createInstanceWithFallback([Ljava/lang/String;)Llibcore/timezone/TimeZoneFinder;
-HSPLlibcore/timezone/TimeZoneFinder;->getInstance()Llibcore/timezone/TimeZoneFinder;
-HSPLlibcore/timezone/TimeZoneFinder;->lookupCountryTimeZones(Ljava/lang/String;)Llibcore/timezone/CountryTimeZones;
-HSPLlibcore/timezone/TimeZoneFinder;->parseTimeZoneMappings(Lorg/xmlpull/v1/XmlPullParser;)Ljava/util/List;
-HSPLlibcore/timezone/TimeZoneFinder;->processCountryZones(Lorg/xmlpull/v1/XmlPullParser;Llibcore/timezone/TimeZoneFinder$TimeZonesProcessor;)Z
-HSPLlibcore/timezone/TimeZoneFinder;->processXml(Llibcore/timezone/TimeZoneFinder$TimeZonesProcessor;)V
-PLlibcore/timezone/TzDataSetVersion;-><clinit>()V
-PLlibcore/timezone/TzDataSetVersion;-><init>(IILjava/lang/String;I)V
-PLlibcore/timezone/TzDataSetVersion;->from3DigitVersionString(Ljava/lang/String;)I
-PLlibcore/timezone/TzDataSetVersion;->fromBytes([B)Llibcore/timezone/TzDataSetVersion;
-PLlibcore/timezone/TzDataSetVersion;->readBytes(Ljava/io/File;I)[B
-PLlibcore/timezone/TzDataSetVersion;->readFromFile(Ljava/io/File;)Llibcore/timezone/TzDataSetVersion;
-PLlibcore/timezone/TzDataSetVersion;->to3DigitVersionString(I)Ljava/lang/String;
-PLlibcore/timezone/TzDataSetVersion;->toFormatVersionString(II)Ljava/lang/String;
-PLlibcore/timezone/TzDataSetVersion;->validate3DigitVersion(I)I
+HSPLlibcore/timezone/ZoneInfoDB$1;->create(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLlibcore/timezone/ZoneInfoDB$1;->create(Ljava/lang/String;)Llibcore/util/ZoneInfo;
 HSPLlibcore/timezone/ZoneInfoDB$TzData$1;->create(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLlibcore/timezone/ZoneInfoDB$TzData$1;->create(Ljava/lang/String;)Llibcore/util/ZoneInfo;
 HSPLlibcore/timezone/ZoneInfoDB$TzData;->checkNotClosed()V
 HSPLlibcore/timezone/ZoneInfoDB$TzData;->close()V
 HSPLlibcore/timezone/ZoneInfoDB$TzData;->finalize()V
-HSPLlibcore/timezone/ZoneInfoDB$TzData;->getAvailableIDs()[Ljava/lang/String;
 HSPLlibcore/timezone/ZoneInfoDB$TzData;->getBufferIterator(Ljava/lang/String;)Llibcore/io/BufferIterator;
-HSPLlibcore/timezone/ZoneInfoDB$TzData;->getVersion()Ljava/lang/String;
 HSPLlibcore/timezone/ZoneInfoDB$TzData;->makeTimeZone(Ljava/lang/String;)Llibcore/util/ZoneInfo;
 HSPLlibcore/timezone/ZoneInfoDB$TzData;->makeTimeZoneUncached(Ljava/lang/String;)Llibcore/util/ZoneInfo;
-HSPLlibcore/timezone/ZoneInfoDB;->getInstance()Llibcore/timezone/ZoneInfoDB$TzData;
+HSPLlibcore/timezone/ZoneInfoDB;->checkNotClosed()V
+HSPLlibcore/timezone/ZoneInfoDB;->close()V
+HSPLlibcore/timezone/ZoneInfoDB;->finalize()V
+HSPLlibcore/timezone/ZoneInfoDB;->getAvailableIDs()[Ljava/lang/String;
+HSPLlibcore/timezone/ZoneInfoDB;->getBufferIterator(Ljava/lang/String;)Llibcore/io/BufferIterator;
+HSPLlibcore/timezone/ZoneInfoDB;->getInstance()Llibcore/timezone/ZoneInfoDB;
+HSPLlibcore/timezone/ZoneInfoDB;->makeTimeZone(Ljava/lang/String;)Llibcore/util/ZoneInfo;
+HSPLlibcore/timezone/ZoneInfoDB;->makeTimeZoneUncached(Ljava/lang/String;)Llibcore/util/ZoneInfo;
+HSPLlibcore/timezone/ZoneInfoDb$1;->create(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLlibcore/timezone/ZoneInfoDb$1;->create(Ljava/lang/String;)Llibcore/util/ZoneInfo;
+HSPLlibcore/timezone/ZoneInfoDb;->checkNotClosed()V
+HSPLlibcore/timezone/ZoneInfoDb;->close()V
+HSPLlibcore/timezone/ZoneInfoDb;->finalize()V
+HSPLlibcore/timezone/ZoneInfoDb;->getBufferIterator(Ljava/lang/String;)Llibcore/io/BufferIterator;
+HSPLlibcore/timezone/ZoneInfoDb;->getInstance()Llibcore/timezone/ZoneInfoDb;
+HSPLlibcore/timezone/ZoneInfoDb;->makeTimeZone(Ljava/lang/String;)Llibcore/util/ZoneInfo;
+HSPLlibcore/timezone/ZoneInfoDb;->makeTimeZoneUncached(Ljava/lang/String;)Llibcore/util/ZoneInfo;
 HSPLlibcore/util/ArrayUtils;->throwsIfOutOfBounds(III)V
 HSPLlibcore/util/BasicLruCache;->create(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLlibcore/util/BasicLruCache;->entryEvicted(Ljava/lang/Object;Ljava/lang/Object;)V
@@ -43356,84 +21467,37 @@
 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
-PLlibcore/util/CoreLibraryDebug;->addTzDataSetVersionDebugInfo(Ljava/lang/String;Ljava/lang/String;Llibcore/util/DebugInfo;)V
-PLlibcore/util/CoreLibraryDebug;->getDebugInfo()Llibcore/util/DebugInfo;
-PLlibcore/util/CoreLibraryDebug;->populateTimeZoneFilesInfo(Llibcore/util/DebugInfo;)V
-PLlibcore/util/CoreLibraryDebug;->populateTimeZoneLibraryReportedVersion(Llibcore/util/DebugInfo;)V
-PLlibcore/util/DebugInfo$DebugEntry;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-PLlibcore/util/DebugInfo$DebugEntry;->getKey()Ljava/lang/String;
-PLlibcore/util/DebugInfo$DebugEntry;->getStringValue()Ljava/lang/String;
-PLlibcore/util/DebugInfo;-><init>()V
-PLlibcore/util/DebugInfo;->addStringEntry(Ljava/lang/String;I)Llibcore/util/DebugInfo;
-PLlibcore/util/DebugInfo;->addStringEntry(Ljava/lang/String;Ljava/lang/String;)Llibcore/util/DebugInfo;
-PLlibcore/util/DebugInfo;->getDebugEntries()Ljava/util/List;
-HPLlibcore/util/HexEncoding;->decode(Ljava/lang/String;)[B
-HSPLlibcore/util/HexEncoding;->decode(Ljava/lang/String;Z)[B
-PLlibcore/util/HexEncoding;->decode([C)[B
-HSPLlibcore/util/HexEncoding;->decode([CZ)[B
-HSPLlibcore/util/HexEncoding;->encode([BIIZ)[C
-HSPLlibcore/util/HexEncoding;->encode([BZ)[C
-PLlibcore/util/HexEncoding;->encodeToString(BZ)Ljava/lang/String;
-HSPLlibcore/util/HexEncoding;->encodeToString([B)Ljava/lang/String;
-HSPLlibcore/util/HexEncoding;->encodeToString([BZ)Ljava/lang/String;
-HSPLlibcore/util/HexEncoding;->toDigit([CI)I
-HSPLlibcore/util/NativeAllocationRegistry$CleanerRunner;-><init>(Lsun/misc/Cleaner;)V
+HSPLlibcore/util/FP16;->ceil(S)S
+HSPLlibcore/util/FP16;->floor(S)S
+HSPLlibcore/util/FP16;->greater(SS)Z
+HSPLlibcore/util/FP16;->greaterEquals(SS)Z
+HSPLlibcore/util/FP16;->less(SS)Z
+HSPLlibcore/util/FP16;->lessEquals(SS)Z
+HSPLlibcore/util/FP16;->rint(S)S
+HSPLlibcore/util/FP16;->toFloat(S)F
+HSPLlibcore/util/FP16;->toHalf(F)S
 HSPLlibcore/util/NativeAllocationRegistry$CleanerRunner;->run()V
-HSPLlibcore/util/NativeAllocationRegistry$CleanerThunk;-><init>(Llibcore/util/NativeAllocationRegistry;)V
 HSPLlibcore/util/NativeAllocationRegistry$CleanerThunk;->run()V
-HSPLlibcore/util/NativeAllocationRegistry$CleanerThunk;->setNativePtr(J)V
-PLlibcore/util/NativeAllocationRegistry;-><init>(Ljava/lang/ClassLoader;JJ)V
+HSPLlibcore/util/NativeAllocationRegistry;-><init>(Ljava/lang/ClassLoader;JJ)V
 HSPLlibcore/util/NativeAllocationRegistry;-><init>(Ljava/lang/ClassLoader;JJZ)V
 HSPLlibcore/util/NativeAllocationRegistry;->access$000(Llibcore/util/NativeAllocationRegistry;)J
 HSPLlibcore/util/NativeAllocationRegistry;->access$100(Llibcore/util/NativeAllocationRegistry;)J
 HSPLlibcore/util/NativeAllocationRegistry;->access$200(J)V
 HSPLlibcore/util/NativeAllocationRegistry;->createMalloced(Ljava/lang/ClassLoader;JJ)Llibcore/util/NativeAllocationRegistry;
-PLlibcore/util/NativeAllocationRegistry;->createNonmalloced(Ljava/lang/ClassLoader;JJ)Llibcore/util/NativeAllocationRegistry;
+HSPLlibcore/util/NativeAllocationRegistry;->createNonmalloced(Ljava/lang/ClassLoader;JJ)Llibcore/util/NativeAllocationRegistry;
 HSPLlibcore/util/NativeAllocationRegistry;->registerNativeAllocation(J)V
 HSPLlibcore/util/NativeAllocationRegistry;->registerNativeAllocation(Ljava/lang/Object;J)Ljava/lang/Runnable;
 HSPLlibcore/util/NativeAllocationRegistry;->registerNativeFree(J)V
-PLlibcore/util/SneakyThrow;->sneakyThrow(Ljava/lang/Throwable;)V
+HSPLlibcore/util/SneakyThrow;->sneakyThrow(Ljava/lang/Throwable;)V
 HSPLlibcore/util/SneakyThrow;->sneakyThrow_(Ljava/lang/Throwable;)V
-HSPLlibcore/util/XmlObjectFactory;->newXMLReader()Lorg/xml/sax/XMLReader;
 HSPLlibcore/util/XmlObjectFactory;->newXmlPullParser()Lorg/xmlpull/v1/XmlPullParser;
-HSPLlibcore/util/XmlObjectFactory;->newXmlSerializer()Lorg/xmlpull/v1/XmlSerializer;
+HSPLlibcore/util/ZoneInfo$WallTime;-><init>()V
 HSPLlibcore/util/ZoneInfo$WallTime;->copyFieldsFromCalendar()V
-HSPLlibcore/util/ZoneInfo$WallTime;->copyFieldsToCalendar()V
-HSPLlibcore/util/ZoneInfo$WallTime;->doWallTimeSearch(Llibcore/util/ZoneInfo;IIZ)Ljava/lang/Integer;
-HSPLlibcore/util/ZoneInfo$WallTime;->getGmtOffset()I
-HSPLlibcore/util/ZoneInfo$WallTime;->getHour()I
-HSPLlibcore/util/ZoneInfo$WallTime;->getIsDst()I
-HSPLlibcore/util/ZoneInfo$WallTime;->getMinute()I
-HSPLlibcore/util/ZoneInfo$WallTime;->getMonth()I
-HSPLlibcore/util/ZoneInfo$WallTime;->getMonthDay()I
-HSPLlibcore/util/ZoneInfo$WallTime;->getSecond()I
-HSPLlibcore/util/ZoneInfo$WallTime;->getWeekDay()I
-HSPLlibcore/util/ZoneInfo$WallTime;->getYear()I
-HSPLlibcore/util/ZoneInfo$WallTime;->getYearDay()I
-HSPLlibcore/util/ZoneInfo$WallTime;->localtime(ILlibcore/util/ZoneInfo;)V
-HSPLlibcore/util/ZoneInfo$WallTime;->mktime(Llibcore/util/ZoneInfo;)I
-HSPLlibcore/util/ZoneInfo$WallTime;->setGmtOffset(I)V
-HSPLlibcore/util/ZoneInfo$WallTime;->setHour(I)V
-HSPLlibcore/util/ZoneInfo$WallTime;->setIsDst(I)V
-HSPLlibcore/util/ZoneInfo$WallTime;->setMinute(I)V
-HSPLlibcore/util/ZoneInfo$WallTime;->setMonth(I)V
-HSPLlibcore/util/ZoneInfo$WallTime;->setMonthDay(I)V
-HSPLlibcore/util/ZoneInfo$WallTime;->setSecond(I)V
-HSPLlibcore/util/ZoneInfo$WallTime;->setWeekDay(I)V
-HSPLlibcore/util/ZoneInfo$WallTime;->setYear(I)V
-HSPLlibcore/util/ZoneInfo$WallTime;->setYearDay(I)V
 HSPLlibcore/util/ZoneInfo;-><init>(Ljava/lang/String;[J[B[I[BJ)V
 HSPLlibcore/util/ZoneInfo;->access$000(Llibcore/util/ZoneInfo;)I
 HSPLlibcore/util/ZoneInfo;->access$100(Llibcore/util/ZoneInfo;)[J
-HSPLlibcore/util/ZoneInfo;->access$300(Llibcore/util/ZoneInfo;)[I
-HSPLlibcore/util/ZoneInfo;->access$400(Llibcore/util/ZoneInfo;)[B
-HSPLlibcore/util/ZoneInfo;->access$500(JI)I
-HSPLlibcore/util/ZoneInfo;->access$600(JI)I
 HSPLlibcore/util/ZoneInfo;->checkTzifVersionAcceptable(Ljava/lang/String;B)V
-HSPLlibcore/util/ZoneInfo;->checked32BitAdd(JI)I
-HSPLlibcore/util/ZoneInfo;->checked32BitSubtract(JI)I
 HSPLlibcore/util/ZoneInfo;->clone()Ljava/lang/Object;
-HPLlibcore/util/ZoneInfo;->equals(Ljava/lang/Object;)Z
 HSPLlibcore/util/ZoneInfo;->findOffsetIndexForTimeInMilliseconds(J)I
 HSPLlibcore/util/ZoneInfo;->findOffsetIndexForTimeInSeconds(J)I
 HSPLlibcore/util/ZoneInfo;->findTransitionIndex(J)I
@@ -43449,195 +21513,42 @@
 HSPLlibcore/util/ZoneInfo;->roundUpMillisToSeconds(J)J
 HSPLlibcore/util/ZoneInfo;->skipOver32BitData(Ljava/lang/String;Llibcore/io/BufferIterator;)V
 HSPLorg/apache/harmony/dalvik/ddmc/Chunk;-><init>(ILjava/nio/ByteBuffer;)V
+HSPLorg/apache/harmony/dalvik/ddmc/Chunk;-><init>(I[BII)V
 HSPLorg/apache/harmony/dalvik/ddmc/ChunkHandler;->putString(Ljava/nio/ByteBuffer;Ljava/lang/String;)V
+HSPLorg/apache/harmony/dalvik/ddmc/ChunkHandler;->wrapChunk(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Ljava/nio/ByteBuffer;
+HSPLorg/apache/harmony/dalvik/ddmc/DdmServer;->broadcast(I)V
+HSPLorg/apache/harmony/dalvik/ddmc/DdmServer;->dispatch(I[BII)Lorg/apache/harmony/dalvik/ddmc/Chunk;
 HSPLorg/apache/harmony/dalvik/ddmc/DdmServer;->sendChunk(Lorg/apache/harmony/dalvik/ddmc/Chunk;)V
-HSPLorg/apache/harmony/xml/ExpatAttributes;-><init>()V
-HPLorg/apache/harmony/xml/ExpatAttributes;->getLocalName(I)Ljava/lang/String;
-HPLorg/apache/harmony/xml/ExpatAttributes;->getValue(I)Ljava/lang/String;
-HSPLorg/apache/harmony/xml/ExpatAttributes;->getValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLorg/apache/harmony/xml/ExpatParser$CurrentAttributes;-><init>(Lorg/apache/harmony/xml/ExpatParser;)V
-HSPLorg/apache/harmony/xml/ExpatParser$CurrentAttributes;-><init>(Lorg/apache/harmony/xml/ExpatParser;Lorg/apache/harmony/xml/ExpatParser$1;)V
-HPLorg/apache/harmony/xml/ExpatParser$CurrentAttributes;->getLength()I
-HPLorg/apache/harmony/xml/ExpatParser$CurrentAttributes;->getParserPointer()J
-HSPLorg/apache/harmony/xml/ExpatParser$CurrentAttributes;->getPointer()J
-HSPLorg/apache/harmony/xml/ExpatParser$ExpatLocator;-><init>(Lorg/apache/harmony/xml/ExpatParser;)V
-HSPLorg/apache/harmony/xml/ExpatParser$ExpatLocator;-><init>(Lorg/apache/harmony/xml/ExpatParser;Lorg/apache/harmony/xml/ExpatParser$1;)V
-HSPLorg/apache/harmony/xml/ExpatParser;-><init>(Ljava/lang/String;Lorg/apache/harmony/xml/ExpatReader;ZLjava/lang/String;Ljava/lang/String;)V
-HPLorg/apache/harmony/xml/ExpatParser;->access$1000(Lorg/apache/harmony/xml/ExpatParser;)J
-HSPLorg/apache/harmony/xml/ExpatParser;->access$1100(Lorg/apache/harmony/xml/ExpatParser;)Z
-HSPLorg/apache/harmony/xml/ExpatParser;->access$1200(Lorg/apache/harmony/xml/ExpatParser;)J
-HPLorg/apache/harmony/xml/ExpatParser;->access$1300(Lorg/apache/harmony/xml/ExpatParser;)I
-HSPLorg/apache/harmony/xml/ExpatParser;->endDocument()V
-HSPLorg/apache/harmony/xml/ExpatParser;->endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLorg/apache/harmony/xml/ExpatParser;->endNamespace(Ljava/lang/String;)V
-HSPLorg/apache/harmony/xml/ExpatParser;->finalize()V
-HSPLorg/apache/harmony/xml/ExpatParser;->finish()V
-HSPLorg/apache/harmony/xml/ExpatParser;->parseDocument(Ljava/io/InputStream;)V
-HSPLorg/apache/harmony/xml/ExpatParser;->parseFragment(Ljava/io/InputStream;)V
-HSPLorg/apache/harmony/xml/ExpatParser;->startDocument()V
-HSPLorg/apache/harmony/xml/ExpatParser;->startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JI)V
-HSPLorg/apache/harmony/xml/ExpatParser;->startNamespace(Ljava/lang/String;Ljava/lang/String;)V
-HSPLorg/apache/harmony/xml/ExpatParser;->text([CI)V
-HSPLorg/apache/harmony/xml/ExpatReader;-><init>()V
-HSPLorg/apache/harmony/xml/ExpatReader;->parse(Ljava/io/InputStream;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLorg/apache/harmony/xml/ExpatReader;->parse(Lorg/xml/sax/InputSource;)V
-HSPLorg/apache/harmony/xml/ExpatReader;->setContentHandler(Lorg/xml/sax/ContentHandler;)V
-HSPLorg/apache/harmony/xml/dom/AttrImpl;->getNodeType()S
-HSPLorg/apache/harmony/xml/dom/AttrImpl;->getOwnerElement()Lorg/w3c/dom/Element;
-HSPLorg/apache/harmony/xml/dom/CharacterDataImpl;->getData()Ljava/lang/String;
-HPLorg/apache/harmony/xml/dom/CharacterDataImpl;->getLength()I
-HSPLorg/apache/harmony/xml/dom/CharacterDataImpl;->getNodeValue()Ljava/lang/String;
-HSPLorg/apache/harmony/xml/dom/DocumentImpl;-><init>(Lorg/apache/harmony/xml/dom/DOMImplementationImpl;Ljava/lang/String;Ljava/lang/String;Lorg/w3c/dom/DocumentType;Ljava/lang/String;)V
-HSPLorg/apache/harmony/xml/dom/DocumentImpl;->getDocumentElement()Lorg/w3c/dom/Element;
-HSPLorg/apache/harmony/xml/dom/DocumentImpl;->getElementsByTagName(Ljava/lang/String;)Lorg/w3c/dom/NodeList;
-HSPLorg/apache/harmony/xml/dom/DocumentImpl;->insertChildAt(Lorg/w3c/dom/Node;I)Lorg/w3c/dom/Node;
-HSPLorg/apache/harmony/xml/dom/DocumentImpl;->isXMLIdentifier(Ljava/lang/String;)Z
-HSPLorg/apache/harmony/xml/dom/DocumentImpl;->isXMLIdentifierPart(C)Z
-HSPLorg/apache/harmony/xml/dom/DocumentImpl;->isXMLIdentifierStart(C)Z
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->access$000(Lorg/apache/harmony/xml/dom/ElementImpl;)Ljava/util/List;
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->getAttribute(Ljava/lang/String;)Ljava/lang/String;
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->getAttributeNode(Ljava/lang/String;)Lorg/apache/harmony/xml/dom/AttrImpl;
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->getAttributes()Lorg/w3c/dom/NamedNodeMap;
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->getElementsByTagName(Ljava/lang/String;)Lorg/w3c/dom/NodeList;
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->getLocalName()Ljava/lang/String;
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->getNamespaceURI()Ljava/lang/String;
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->getNodeName()Ljava/lang/String;
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->getNodeType()S
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->getTagName()Ljava/lang/String;
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->hasAttributes()Z
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->indexOfAttribute(Ljava/lang/String;)I
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->indexOfAttributeNS(Ljava/lang/String;Ljava/lang/String;)I
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->setAttributeNode(Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;
-HSPLorg/apache/harmony/xml/dom/ElementImpl;->setAttributeNodeNS(Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;-><init>(Lorg/apache/harmony/xml/dom/DocumentImpl;)V
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->appendChild(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->getChildNodes()Lorg/w3c/dom/NodeList;
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->getElementsByTagName(Lorg/apache/harmony/xml/dom/NodeListImpl;Ljava/lang/String;)V
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->getFirstChild()Lorg/w3c/dom/Node;
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->getLastChild()Lorg/w3c/dom/Node;
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->getNextSibling()Lorg/w3c/dom/Node;
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->getTextContent()Ljava/lang/String;
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->getTextContent(Ljava/lang/StringBuilder;)V
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->hasChildNodes()Z
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->hasTextContent(Lorg/w3c/dom/Node;)Z
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->insertChildAt(Lorg/w3c/dom/Node;I)Lorg/w3c/dom/Node;
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->isParentOf(Lorg/w3c/dom/Node;)Z
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->matchesNameOrWildcard(Ljava/lang/String;Ljava/lang/String;)Z
-HPLorg/apache/harmony/xml/dom/InnerNodeImpl;->normalize()V
-HSPLorg/apache/harmony/xml/dom/InnerNodeImpl;->refreshIndices(I)V
-HSPLorg/apache/harmony/xml/dom/LeafNodeImpl;-><init>(Lorg/apache/harmony/xml/dom/DocumentImpl;)V
-HSPLorg/apache/harmony/xml/dom/LeafNodeImpl;->getNextSibling()Lorg/w3c/dom/Node;
-HSPLorg/apache/harmony/xml/dom/LeafNodeImpl;->getParentNode()Lorg/w3c/dom/Node;
-HPLorg/apache/harmony/xml/dom/LeafNodeImpl;->getPreviousSibling()Lorg/w3c/dom/Node;
-HSPLorg/apache/harmony/xml/dom/LeafNodeImpl;->isParentOf(Lorg/w3c/dom/Node;)Z
-HSPLorg/apache/harmony/xml/dom/NodeImpl;-><init>(Lorg/apache/harmony/xml/dom/DocumentImpl;)V
-HSPLorg/apache/harmony/xml/dom/NodeImpl;->getFirstChild()Lorg/w3c/dom/Node;
-HSPLorg/apache/harmony/xml/dom/NodeImpl;->getTextContent()Ljava/lang/String;
-HSPLorg/apache/harmony/xml/dom/NodeImpl;->getTextContent(Ljava/lang/StringBuilder;)V
-PLorg/apache/harmony/xml/dom/NodeImpl;->normalize()V
-HSPLorg/apache/harmony/xml/dom/NodeImpl;->setName(Lorg/apache/harmony/xml/dom/NodeImpl;Ljava/lang/String;)V
-HSPLorg/apache/harmony/xml/dom/NodeImpl;->setNameNS(Lorg/apache/harmony/xml/dom/NodeImpl;Ljava/lang/String;Ljava/lang/String;)V
-HSPLorg/apache/harmony/xml/dom/NodeImpl;->validatePrefix(Ljava/lang/String;ZLjava/lang/String;)Ljava/lang/String;
-HSPLorg/apache/harmony/xml/dom/NodeListImpl;-><init>()V
-HSPLorg/apache/harmony/xml/dom/NodeListImpl;->add(Lorg/apache/harmony/xml/dom/NodeImpl;)V
-HSPLorg/apache/harmony/xml/dom/NodeListImpl;->getLength()I
-HSPLorg/apache/harmony/xml/dom/NodeListImpl;->item(I)Lorg/w3c/dom/Node;
-HPLorg/apache/harmony/xml/dom/TextImpl;->getNodeName()Ljava/lang/String;
-HSPLorg/apache/harmony/xml/dom/TextImpl;->getNodeType()S
-PLorg/apache/harmony/xml/dom/TextImpl;->minimize()Lorg/apache/harmony/xml/dom/TextImpl;
-HSPLorg/apache/harmony/xml/parsers/DocumentBuilderFactoryImpl;-><init>()V
-HSPLorg/apache/harmony/xml/parsers/DocumentBuilderFactoryImpl;->newDocumentBuilder()Ljavax/xml/parsers/DocumentBuilder;
-HSPLorg/apache/harmony/xml/parsers/DocumentBuilderImpl;-><clinit>()V
-HSPLorg/apache/harmony/xml/parsers/DocumentBuilderImpl;-><init>()V
-HSPLorg/apache/harmony/xml/parsers/DocumentBuilderImpl;->setCoalescing(Z)V
-HSPLorg/apache/harmony/xml/parsers/DocumentBuilderImpl;->setIgnoreComments(Z)V
-HSPLorg/apache/harmony/xml/parsers/DocumentBuilderImpl;->setIgnoreElementContentWhitespace(Z)V
-HSPLorg/apache/harmony/xml/parsers/DocumentBuilderImpl;->setNamespaceAware(Z)V
-HSPLorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;-><init>()V
-HPLorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;->getFeature(Ljava/lang/String;)Z
-HPLorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;->isValidating()Z
-HPLorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;->newSAXParser()Ljavax/xml/parsers/SAXParser;
-HSPLorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;->setFeature(Ljava/lang/String;Z)V
-HPLorg/apache/harmony/xml/parsers/SAXParserImpl;-><init>(Ljava/util/Map;)V
-HPLorg/apache/harmony/xml/parsers/SAXParserImpl;->getXMLReader()Lorg/xml/sax/XMLReader;
-HPLorg/apache/harmony/xml/parsers/SAXParserImpl;->resetInternal()V
-HPLorg/apache/http/conn/ConnectTimeoutException;-><init>(Ljava/lang/String;)V
-HSPLorg/apache/http/conn/ssl/AbstractVerifier;->acceptableCountryWildcard(Ljava/lang/String;)Z
-HPLorg/apache/http/conn/ssl/AbstractVerifier;->countDots(Ljava/lang/String;)I
-HSPLorg/apache/http/conn/ssl/AbstractVerifier;->getCNs(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;
-HSPLorg/apache/http/conn/ssl/AbstractVerifier;->getDNSSubjectAlts(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;
-HSPLorg/apache/http/conn/ssl/AbstractVerifier;->isIPv4Address(Ljava/lang/String;)Z
-HSPLorg/apache/http/conn/ssl/AbstractVerifier;->verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)V
-HSPLorg/apache/http/conn/ssl/AbstractVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSocket;)V
-HSPLorg/apache/http/conn/ssl/AbstractVerifier;->verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Z)V
-HSPLorg/apache/http/conn/ssl/AndroidDistinguishedNameParser;-><init>(Ljavax/security/auth/x500/X500Principal;)V
-HSPLorg/apache/http/conn/ssl/AndroidDistinguishedNameParser;->escapedAV()Ljava/lang/String;
-HSPLorg/apache/http/conn/ssl/AndroidDistinguishedNameParser;->getAllMostSpecificFirst(Ljava/lang/String;)Ljava/util/List;
-HSPLorg/apache/http/conn/ssl/AndroidDistinguishedNameParser;->nextAT()Ljava/lang/String;
-HPLorg/apache/http/conn/ssl/BrowserCompatHostnameVerifier;-><init>()V
-HSPLorg/apache/http/conn/ssl/BrowserCompatHostnameVerifier;->verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V
-HPLorg/apache/http/conn/ssl/SSLSocketFactory;-><init>()V
-HSPLorg/apache/http/conn/ssl/SSLSocketFactory;-><init>(Ljavax/net/ssl/SSLSocketFactory;)V
-HPLorg/apache/http/conn/ssl/SSLSocketFactory;-><init>(Lorg/apache/http/conn/ssl/SSLSocketFactory$1;)V
-HSPLorg/apache/http/conn/ssl/SSLSocketFactory;->createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;
-HPLorg/apache/http/conn/ssl/SSLSocketFactory;->getSocketFactory()Lorg/apache/http/conn/ssl/SSLSocketFactory;
-HSPLorg/apache/http/conn/ssl/SSLSocketFactory;->isSecure(Ljava/net/Socket;)Z
-HPLorg/apache/http/conn/ssl/SSLSocketFactory;->setHostnameVerifier(Lorg/apache/http/conn/ssl/X509HostnameVerifier;)V
-HPLorg/apache/http/conn/ssl/StrictHostnameVerifier;->verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V
-HSPLorg/apache/http/params/HttpConnectionParams;->getConnectionTimeout(Lorg/apache/http/params/HttpParams;)I
-HSPLorg/apache/http/params/HttpConnectionParams;->getLinger(Lorg/apache/http/params/HttpParams;)I
-HSPLorg/apache/http/params/HttpConnectionParams;->getSoTimeout(Lorg/apache/http/params/HttpParams;)I
-HSPLorg/apache/http/params/HttpConnectionParams;->getSocketBufferSize(Lorg/apache/http/params/HttpParams;)I
-HSPLorg/apache/http/params/HttpConnectionParams;->getTcpNoDelay(Lorg/apache/http/params/HttpParams;)Z
-HSPLorg/apache/http/params/HttpConnectionParams;->isStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;)Z
 HSPLorg/apache/http/params/HttpConnectionParams;->setConnectionTimeout(Lorg/apache/http/params/HttpParams;I)V
 HSPLorg/apache/http/params/HttpConnectionParams;->setSoTimeout(Lorg/apache/http/params/HttpParams;I)V
-HSPLorg/apache/http/params/HttpConnectionParams;->setSocketBufferSize(Lorg/apache/http/params/HttpParams;I)V
-HSPLorg/apache/http/params/HttpConnectionParams;->setStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;Z)V
 HSPLorg/ccil/cowan/tagsoup/AttributesImpl;-><init>(Lorg/xml/sax/Attributes;)V
-HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->addAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->clear()V
-HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->ensureCapacity(I)V
-HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->getIndex(Ljava/lang/String;)I
 HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->getLength()I
 HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->getLocalName(I)Ljava/lang/String;
 HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->getQName(I)Ljava/lang/String;
 HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->getType(I)Ljava/lang/String;
 HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->getURI(I)Ljava/lang/String;
 HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->getValue(I)Ljava/lang/String;
-HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->getValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->removeAttribute(I)V
-HPLorg/ccil/cowan/tagsoup/AttributesImpl;->setAttribute(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLorg/ccil/cowan/tagsoup/AttributesImpl;->setAttributes(Lorg/xml/sax/Attributes;)V
 HSPLorg/ccil/cowan/tagsoup/Element;-><init>(Lorg/ccil/cowan/tagsoup/ElementType;Z)V
-HPLorg/ccil/cowan/tagsoup/Element;->anonymize()V
 HSPLorg/ccil/cowan/tagsoup/Element;->atts()Lorg/ccil/cowan/tagsoup/AttributesImpl;
 HSPLorg/ccil/cowan/tagsoup/Element;->canContain(Lorg/ccil/cowan/tagsoup/Element;)Z
 HSPLorg/ccil/cowan/tagsoup/Element;->clean()V
 HSPLorg/ccil/cowan/tagsoup/Element;->flags()I
-HSPLorg/ccil/cowan/tagsoup/Element;->isPreclosed()Z
 HSPLorg/ccil/cowan/tagsoup/Element;->localName()Ljava/lang/String;
-HSPLorg/ccil/cowan/tagsoup/Element;->model()I
 HSPLorg/ccil/cowan/tagsoup/Element;->name()Ljava/lang/String;
 HSPLorg/ccil/cowan/tagsoup/Element;->namespace()Ljava/lang/String;
 HSPLorg/ccil/cowan/tagsoup/Element;->next()Lorg/ccil/cowan/tagsoup/Element;
 HSPLorg/ccil/cowan/tagsoup/Element;->parent()Lorg/ccil/cowan/tagsoup/ElementType;
-HPLorg/ccil/cowan/tagsoup/Element;->preclose()V
-HSPLorg/ccil/cowan/tagsoup/Element;->setAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLorg/ccil/cowan/tagsoup/Element;->setNext(Lorg/ccil/cowan/tagsoup/Element;)V
-HSPLorg/ccil/cowan/tagsoup/ElementType;-><init>(Ljava/lang/String;IIILorg/ccil/cowan/tagsoup/Schema;)V
 HSPLorg/ccil/cowan/tagsoup/ElementType;->atts()Lorg/ccil/cowan/tagsoup/AttributesImpl;
 HSPLorg/ccil/cowan/tagsoup/ElementType;->canContain(Lorg/ccil/cowan/tagsoup/ElementType;)Z
 HSPLorg/ccil/cowan/tagsoup/ElementType;->flags()I
 HSPLorg/ccil/cowan/tagsoup/ElementType;->localName()Ljava/lang/String;
-HSPLorg/ccil/cowan/tagsoup/ElementType;->localName(Ljava/lang/String;)Ljava/lang/String;
-HSPLorg/ccil/cowan/tagsoup/ElementType;->model()I
 HSPLorg/ccil/cowan/tagsoup/ElementType;->name()Ljava/lang/String;
 HSPLorg/ccil/cowan/tagsoup/ElementType;->namespace()Ljava/lang/String;
-HSPLorg/ccil/cowan/tagsoup/ElementType;->namespace(Ljava/lang/String;Z)Ljava/lang/String;
-HPLorg/ccil/cowan/tagsoup/ElementType;->normalize(Ljava/lang/String;)Ljava/lang/String;
 HSPLorg/ccil/cowan/tagsoup/ElementType;->parent()Lorg/ccil/cowan/tagsoup/ElementType;
-HSPLorg/ccil/cowan/tagsoup/ElementType;->setAttribute(Lorg/ccil/cowan/tagsoup/AttributesImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLorg/ccil/cowan/tagsoup/HTMLScanner;-><init>()V
 HSPLorg/ccil/cowan/tagsoup/HTMLScanner;->mark()V
 HSPLorg/ccil/cowan/tagsoup/HTMLScanner;->resetDocumentLocator(Ljava/lang/String;Ljava/lang/String;)V
@@ -43646,22 +21557,9 @@
 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
-HPLorg/ccil/cowan/tagsoup/Parser;->adup([CII)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
 HSPLorg/ccil/cowan/tagsoup/Parser;->eof([CII)V
-HSPLorg/ccil/cowan/tagsoup/Parser;->etag([CII)V
-HSPLorg/ccil/cowan/tagsoup/Parser;->etag_basic([CII)V
-HSPLorg/ccil/cowan/tagsoup/Parser;->etag_cdata([CII)Z
-HSPLorg/ccil/cowan/tagsoup/Parser;->expandEntities(Ljava/lang/String;)Ljava/lang/String;
 HSPLorg/ccil/cowan/tagsoup/Parser;->foreign(Ljava/lang/String;Ljava/lang/String;)Z
-HSPLorg/ccil/cowan/tagsoup/Parser;->getContentHandler()Lorg/xml/sax/ContentHandler;
-HSPLorg/ccil/cowan/tagsoup/Parser;->getEntity()I
 HSPLorg/ccil/cowan/tagsoup/Parser;->getReader(Lorg/xml/sax/InputSource;)Ljava/io/Reader;
-HSPLorg/ccil/cowan/tagsoup/Parser;->gi([CII)V
-HSPLorg/ccil/cowan/tagsoup/Parser;->lookupEntity([CII)I
-HSPLorg/ccil/cowan/tagsoup/Parser;->makeName([CII)Ljava/lang/String;
 HSPLorg/ccil/cowan/tagsoup/Parser;->parse(Lorg/xml/sax/InputSource;)V
 HSPLorg/ccil/cowan/tagsoup/Parser;->pcdata([CII)V
 HSPLorg/ccil/cowan/tagsoup/Parser;->pop()V
@@ -43672,56 +21570,35 @@
 HSPLorg/ccil/cowan/tagsoup/Parser;->setContentHandler(Lorg/xml/sax/ContentHandler;)V
 HSPLorg/ccil/cowan/tagsoup/Parser;->setProperty(Ljava/lang/String;Ljava/lang/Object;)V
 HSPLorg/ccil/cowan/tagsoup/Parser;->setup()V
-HSPLorg/ccil/cowan/tagsoup/Parser;->stagc([CII)V
-HSPLorg/ccil/cowan/tagsoup/Parser;->stage([CII)V
 HSPLorg/ccil/cowan/tagsoup/Parser;->truthValue(Z)Ljava/lang/Boolean;
-HSPLorg/ccil/cowan/tagsoup/Schema;->elementType(Ljava/lang/String;III)V
 HSPLorg/ccil/cowan/tagsoup/Schema;->getElementType(Ljava/lang/String;)Lorg/ccil/cowan/tagsoup/ElementType;
-HSPLorg/ccil/cowan/tagsoup/Schema;->getEntity(Ljava/lang/String;)I
 HSPLorg/ccil/cowan/tagsoup/Schema;->getPrefix()Ljava/lang/String;
 HSPLorg/ccil/cowan/tagsoup/Schema;->getURI()Ljava/lang/String;
 HSPLorg/json/JSON;->checkDouble(D)D
 HSPLorg/json/JSON;->toBoolean(Ljava/lang/Object;)Ljava/lang/Boolean;
-HSPLorg/json/JSON;->toDouble(Ljava/lang/Object;)Ljava/lang/Double;
 HSPLorg/json/JSON;->toInteger(Ljava/lang/Object;)Ljava/lang/Integer;
 HSPLorg/json/JSON;->toLong(Ljava/lang/Object;)Ljava/lang/Long;
 HSPLorg/json/JSON;->toString(Ljava/lang/Object;)Ljava/lang/String;
-HSPLorg/json/JSON;->typeMismatch(Ljava/lang/Object;Ljava/lang/String;)Lorg/json/JSONException;
 HSPLorg/json/JSONArray;-><init>()V
-HSPLorg/json/JSONArray;-><init>(Ljava/lang/Object;)V
 HSPLorg/json/JSONArray;-><init>(Ljava/lang/String;)V
-HSPLorg/json/JSONArray;-><init>(Ljava/util/Collection;)V
 HSPLorg/json/JSONArray;-><init>(Lorg/json/JSONTokener;)V
-HPLorg/json/JSONArray;->equals(Ljava/lang/Object;)Z
 HSPLorg/json/JSONArray;->get(I)Ljava/lang/Object;
 HSPLorg/json/JSONArray;->getJSONObject(I)Lorg/json/JSONObject;
-HSPLorg/json/JSONArray;->getLong(I)J
 HSPLorg/json/JSONArray;->getString(I)Ljava/lang/String;
-HSPLorg/json/JSONArray;->isNull(I)Z
 HSPLorg/json/JSONArray;->length()I
 HSPLorg/json/JSONArray;->opt(I)Ljava/lang/Object;
 HSPLorg/json/JSONArray;->optJSONObject(I)Lorg/json/JSONObject;
-HSPLorg/json/JSONArray;->optString(I)Ljava/lang/String;
-HSPLorg/json/JSONArray;->optString(ILjava/lang/String;)Ljava/lang/String;
-HSPLorg/json/JSONArray;->put(I)Lorg/json/JSONArray;
-HSPLorg/json/JSONArray;->put(ILjava/lang/Object;)Lorg/json/JSONArray;
-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;
-HPLorg/json/JSONArray;->toString(I)Ljava/lang/String;
 HSPLorg/json/JSONArray;->writeTo(Lorg/json/JSONStringer;)V
 HSPLorg/json/JSONException;-><init>(Ljava/lang/String;)V
-HSPLorg/json/JSONObject$1;->equals(Ljava/lang/Object;)Z
-HSPLorg/json/JSONObject$1;->toString()Ljava/lang/String;
 HSPLorg/json/JSONObject;-><init>()V
 HSPLorg/json/JSONObject;-><init>(Ljava/lang/String;)V
 HSPLorg/json/JSONObject;-><init>(Ljava/util/Map;)V
-HSPLorg/json/JSONObject;-><init>(Lorg/json/JSONObject;[Ljava/lang/String;)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;->getBoolean(Ljava/lang/String;)Z
-HPLorg/json/JSONObject;->getDouble(Ljava/lang/String;)D
 HSPLorg/json/JSONObject;->getInt(Ljava/lang/String;)I
 HSPLorg/json/JSONObject;->getJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;
 HSPLorg/json/JSONObject;->getJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;
@@ -43731,13 +21608,9 @@
 HSPLorg/json/JSONObject;->isNull(Ljava/lang/String;)Z
 HSPLorg/json/JSONObject;->keys()Ljava/util/Iterator;
 HSPLorg/json/JSONObject;->length()I
-HSPLorg/json/JSONObject;->names()Lorg/json/JSONArray;
 HSPLorg/json/JSONObject;->numberToString(Ljava/lang/Number;)Ljava/lang/String;
 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
-HSPLorg/json/JSONObject;->optDouble(Ljava/lang/String;)D
-HSPLorg/json/JSONObject;->optDouble(Ljava/lang/String;D)D
 HSPLorg/json/JSONObject;->optInt(Ljava/lang/String;)I
 HSPLorg/json/JSONObject;->optInt(Ljava/lang/String;I)I
 HSPLorg/json/JSONObject;->optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;
@@ -43746,20 +21619,14 @@
 HSPLorg/json/JSONObject;->optLong(Ljava/lang/String;J)J
 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;J)Lorg/json/JSONObject;
 HSPLorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;
 HSPLorg/json/JSONObject;->put(Ljava/lang/String;Z)Lorg/json/JSONObject;
-HSPLorg/json/JSONObject;->putOpt(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;
-PLorg/json/JSONObject;->quote(Ljava/lang/String;)Ljava/lang/String;
-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/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
@@ -43784,39 +21651,18 @@
 HSPLorg/json/JSONTokener;->readEscapeCharacter()C
 HSPLorg/json/JSONTokener;->readLiteral()Ljava/lang/Object;
 HSPLorg/json/JSONTokener;->readObject()Lorg/json/JSONObject;
-HSPLorg/json/JSONTokener;->skipToEndOfLine()V
-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
 HSPLorg/xml/sax/InputSource;-><init>(Ljava/io/Reader;)V
 HSPLorg/xml/sax/InputSource;->getByteStream()Ljava/io/InputStream;
 HSPLorg/xml/sax/InputSource;->getCharacterStream()Ljava/io/Reader;
 HSPLorg/xml/sax/InputSource;->getEncoding()Ljava/lang/String;
 HSPLorg/xml/sax/InputSource;->getPublicId()Ljava/lang/String;
 HSPLorg/xml/sax/InputSource;->getSystemId()Ljava/lang/String;
-HSPLorg/xml/sax/InputSource;->setByteStream(Ljava/io/InputStream;)V
 HSPLorg/xml/sax/InputSource;->setCharacterStream(Ljava/io/Reader;)V
-HSPLorg/xml/sax/InputSource;->setEncoding(Ljava/lang/String;)V
 HSPLorg/xml/sax/helpers/DefaultHandler;-><init>()V
-HSPLorg/xml/sax/helpers/DefaultHandler;->endDocument()V
-HSPLorg/xml/sax/helpers/DefaultHandler;->endPrefixMapping(Ljava/lang/String;)V
-HSPLorg/xml/sax/helpers/DefaultHandler;->setDocumentLocator(Lorg/xml/sax/Locator;)V
-HSPLorg/xml/sax/helpers/DefaultHandler;->startPrefixMapping(Ljava/lang/String;Ljava/lang/String;)V
 HSPLorg/xmlpull/v1/XmlPullParserFactory;-><init>()V
 HSPLorg/xmlpull/v1/XmlPullParserFactory;->getParserInstance()Lorg/xmlpull/v1/XmlPullParser;
-PLorg/xmlpull/v1/XmlPullParserFactory;->getSerializerInstance()Lorg/xmlpull/v1/XmlSerializer;
 HSPLorg/xmlpull/v1/XmlPullParserFactory;->newInstance()Lorg/xmlpull/v1/XmlPullParserFactory;
 HSPLorg/xmlpull/v1/XmlPullParserFactory;->newPullParser()Lorg/xmlpull/v1/XmlPullParser;
-HSPLorg/xmlpull/v1/XmlPullParserFactory;->setNamespaceAware(Z)V
-HPLsun/invoke/util/Wrapper;->findPrimitiveType(Ljava/lang/Class;)Lsun/invoke/util/Wrapper;
-HPLsun/invoke/util/Wrapper;->forBasicType(Ljava/lang/Class;)Lsun/invoke/util/Wrapper;
-HPLsun/invoke/util/Wrapper;->forPrimitiveType(Ljava/lang/Class;)Lsun/invoke/util/Wrapper;
-HPLsun/invoke/util/Wrapper;->hashPrim(Ljava/lang/Class;)I
-HPLsun/invoke/util/Wrapper;->isDoubleWord()Z
-HPLsun/invoke/util/Wrapper;->isIntegral()Z
-HPLsun/invoke/util/Wrapper;->isNumeric()Z
-HPLsun/invoke/util/Wrapper;->isSingleWord()Z
-HPLsun/invoke/util/Wrapper;->isSubwordOrInt()Z
 HSPLsun/misc/ASCIICaseInsensitiveComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLsun/misc/ASCIICaseInsensitiveComparator;->compare(Ljava/lang/String;Ljava/lang/String;)I
 HSPLsun/misc/ASCIICaseInsensitiveComparator;->isUpper(I)Z
@@ -43827,16 +21673,10 @@
 HSPLsun/misc/Cleaner;->clean()V
 HSPLsun/misc/Cleaner;->create(Ljava/lang/Object;Ljava/lang/Runnable;)Lsun/misc/Cleaner;
 HSPLsun/misc/Cleaner;->remove(Lsun/misc/Cleaner;)Z
-HSPLsun/misc/CompoundEnumeration;-><init>([Ljava/util/Enumeration;)V
-HSPLsun/misc/CompoundEnumeration;->hasMoreElements()Z
-HSPLsun/misc/CompoundEnumeration;->next()Z
-HSPLsun/misc/CompoundEnumeration;->nextElement()Ljava/lang/Object;
 HSPLsun/misc/FDBigInteger;-><init>(J[CII)V
 HSPLsun/misc/FDBigInteger;-><init>([II)V
-HSPLsun/misc/FDBigInteger;->add(Lsun/misc/FDBigInteger;)Lsun/misc/FDBigInteger;
 HSPLsun/misc/FDBigInteger;->addAndCmp(Lsun/misc/FDBigInteger;Lsun/misc/FDBigInteger;)I
 HSPLsun/misc/FDBigInteger;->big5pow(I)Lsun/misc/FDBigInteger;
-HSPLsun/misc/FDBigInteger;->checkZeroTail([II)I
 HSPLsun/misc/FDBigInteger;->cmp(Lsun/misc/FDBigInteger;)I
 HSPLsun/misc/FDBigInteger;->cmpPow52(II)I
 HSPLsun/misc/FDBigInteger;->getNormalizationBias()I
@@ -43844,7 +21684,6 @@
 HSPLsun/misc/FDBigInteger;->leftShift(I)Lsun/misc/FDBigInteger;
 HSPLsun/misc/FDBigInteger;->leftShift([II[IIII)V
 HSPLsun/misc/FDBigInteger;->makeImmutable()V
-PLsun/misc/FDBigInteger;->mult([IIII[I)V
 HSPLsun/misc/FDBigInteger;->mult([III[I)V
 HSPLsun/misc/FDBigInteger;->multAddMe(II)V
 HSPLsun/misc/FDBigInteger;->multAndCarryBy10([II[I)I
@@ -43873,14 +21712,11 @@
 HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->getChars([C)I
 HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->getDecimalExponent()I
 HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->getDigits([C)I
-PLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->insignificantDigitsForPow2(I)I
 HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->isExceptional()Z
 HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->isNegative()Z
 HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->roundup()V
 HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->setSign(Z)V
 HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->toJavaFormatString()Ljava/lang/String;
-HPLsun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer;->appendTo(Ljava/lang/Appendable;)V
-HPLsun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer;->toJavaFormatString()Ljava/lang/String;
 HSPLsun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer;->doubleValue()D
 HSPLsun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer;->floatValue()F
 HSPLsun/misc/FloatingDecimal;->appendTo(DLjava/lang/Appendable;)V
@@ -43900,8 +21736,6 @@
 HSPLsun/misc/FormattedFloatingDecimal;->create(ZI)[C
 HSPLsun/misc/FormattedFloatingDecimal;->fillDecimal(I[CIIZ)V
 HSPLsun/misc/FormattedFloatingDecimal;->getBuffer()[C
-PLsun/misc/FormattedFloatingDecimal;->getExponent()[C
-PLsun/misc/FormattedFloatingDecimal;->getExponentRounded()I
 HSPLsun/misc/FormattedFloatingDecimal;->getMantissa()[C
 HSPLsun/misc/FormattedFloatingDecimal;->valueOf(DILsun/misc/FormattedFloatingDecimal$Form;)Lsun/misc/FormattedFloatingDecimal;
 HSPLsun/misc/IOUtils;->readFully(Ljava/io/InputStream;IZ)[B
@@ -43918,13 +21752,8 @@
 HSPLsun/misc/Unsafe;->getAndSetObject(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;
 HSPLsun/misc/Unsafe;->getUnsafe()Lsun/misc/Unsafe;
 HSPLsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J
-HSPLsun/misc/VM;->isBooted()Z
-HPLsun/net/ConnectionResetException;-><init>(Ljava/lang/String;)V
-HSPLsun/net/NetHooks;->beforeTcpBind(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
 HSPLsun/net/NetHooks;->beforeTcpConnect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
-HSPLsun/net/NetProperties;->get(Ljava/lang/String;)Ljava/lang/String;
 HSPLsun/net/ResourceManager;->afterUdpClose()V
-HSPLsun/net/ResourceManager;->beforeUdpCreate()V
 HSPLsun/net/spi/DefaultProxySelector$1;-><init>(Lsun/net/spi/DefaultProxySelector;Ljava/lang/String;Lsun/net/spi/DefaultProxySelector$NonProxyInfo;Ljava/lang/String;)V
 HSPLsun/net/spi/DefaultProxySelector$1;->run()Ljava/lang/Object;
 HSPLsun/net/spi/DefaultProxySelector$1;->run()Ljava/net/Proxy;
@@ -43935,29 +21764,11 @@
 HSPLsun/net/www/ParseUtil;->encodePath(Ljava/lang/String;Z)Ljava/lang/String;
 HSPLsun/net/www/protocol/file/Handler;->parseURL(Ljava/net/URL;Ljava/lang/String;II)V
 HSPLsun/net/www/protocol/jar/Handler;-><init>()V
-HSPLsun/nio/ch/AbstractPollArrayWrapper;-><init>()V
-HPLsun/nio/ch/AbstractPollArrayWrapper;->getDescriptor(I)I
-HPLsun/nio/ch/AbstractPollArrayWrapper;->getEventOps(I)I
-HSPLsun/nio/ch/AbstractPollArrayWrapper;->getReventOps(I)I
-HSPLsun/nio/ch/AbstractPollArrayWrapper;->putDescriptor(II)V
-HSPLsun/nio/ch/AbstractPollArrayWrapper;->putEventOps(II)V
-HSPLsun/nio/ch/AbstractPollArrayWrapper;->putReventOps(II)V
-HSPLsun/nio/ch/AbstractPollSelectorImpl;-><init>(Ljava/nio/channels/spi/SelectorProvider;II)V
-HSPLsun/nio/ch/AbstractPollSelectorImpl;->implClose()V
-HPLsun/nio/ch/AbstractPollSelectorImpl;->implDereg(Lsun/nio/ch/SelectionKeyImpl;)V
-HSPLsun/nio/ch/AbstractPollSelectorImpl;->implRegister(Lsun/nio/ch/SelectionKeyImpl;)V
-HSPLsun/nio/ch/AbstractPollSelectorImpl;->putEventOps(Lsun/nio/ch/SelectionKeyImpl;I)V
-HSPLsun/nio/ch/AbstractPollSelectorImpl;->updateSelectedKeys()I
-HSPLsun/nio/ch/AllocatedNativeObject;-><init>(IZ)V
-HSPLsun/nio/ch/AllocatedNativeObject;->free()V
 HSPLsun/nio/ch/ChannelInputStream;-><init>(Ljava/nio/channels/ReadableByteChannel;)V
-HSPLsun/nio/ch/ChannelInputStream;->available()I
 HSPLsun/nio/ch/ChannelInputStream;->close()V
-HSPLsun/nio/ch/ChannelInputStream;->read()I
 HSPLsun/nio/ch/ChannelInputStream;->read(Ljava/nio/ByteBuffer;)I
 HSPLsun/nio/ch/ChannelInputStream;->read(Ljava/nio/channels/ReadableByteChannel;Ljava/nio/ByteBuffer;Z)I
 HSPLsun/nio/ch/ChannelInputStream;->read([BII)I
-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$1;)V
 HSPLsun/nio/ch/FileChannelImpl$Unmapper;->run()V
@@ -43966,9 +21777,7 @@
 HSPLsun/nio/ch/FileChannelImpl;->ensureOpen()V
 HSPLsun/nio/ch/FileChannelImpl;->fileLockTable()Lsun/nio/ch/FileLockTable;
 HSPLsun/nio/ch/FileChannelImpl;->finalize()V
-HSPLsun/nio/ch/FileChannelImpl;->force(Z)V
 HSPLsun/nio/ch/FileChannelImpl;->implCloseChannel()V
-HSPLsun/nio/ch/FileChannelImpl;->isSharedFileLockTable()Z
 HSPLsun/nio/ch/FileChannelImpl;->lock(JJZ)Ljava/nio/channels/FileLock;
 HSPLsun/nio/ch/FileChannelImpl;->map(Ljava/nio/channels/FileChannel$MapMode;JJ)Ljava/nio/MappedByteBuffer;
 HSPLsun/nio/ch/FileChannelImpl;->open(Ljava/io/FileDescriptor;Ljava/lang/String;ZZLjava/lang/Object;)Ljava/nio/channels/FileChannel;
@@ -43976,35 +21785,21 @@
 HSPLsun/nio/ch/FileChannelImpl;->position()J
 HSPLsun/nio/ch/FileChannelImpl;->position(J)Ljava/nio/channels/FileChannel;
 HSPLsun/nio/ch/FileChannelImpl;->read(Ljava/nio/ByteBuffer;)I
-HSPLsun/nio/ch/FileChannelImpl;->read(Ljava/nio/ByteBuffer;J)I
-HSPLsun/nio/ch/FileChannelImpl;->readInternal(Ljava/nio/ByteBuffer;J)I
 HSPLsun/nio/ch/FileChannelImpl;->release(Lsun/nio/ch/FileLockImpl;)V
 HSPLsun/nio/ch/FileChannelImpl;->size()J
-HPLsun/nio/ch/FileChannelImpl;->transferFrom(Ljava/nio/channels/ReadableByteChannel;JJ)J
-HPLsun/nio/ch/FileChannelImpl;->transferFromFileChannel(Lsun/nio/ch/FileChannelImpl;JJ)J
-PLsun/nio/ch/FileChannelImpl;->truncate(J)Ljava/nio/channels/FileChannel;
 HSPLsun/nio/ch/FileChannelImpl;->tryLock(JJZ)Ljava/nio/channels/FileLock;
-HPLsun/nio/ch/FileChannelImpl;->unmap(Ljava/nio/MappedByteBuffer;)V
 HSPLsun/nio/ch/FileChannelImpl;->write(Ljava/nio/ByteBuffer;)I
-HPLsun/nio/ch/FileChannelImpl;->write(Ljava/nio/ByteBuffer;J)I
-HPLsun/nio/ch/FileChannelImpl;->writeInternal(Ljava/nio/ByteBuffer;J)I
-HSPLsun/nio/ch/FileDescriptorHolderSocketImpl;-><init>(Ljava/io/FileDescriptor;)V
 HSPLsun/nio/ch/FileDispatcher;-><init>()V
 HSPLsun/nio/ch/FileDispatcherImpl;-><init>(Z)V
 HSPLsun/nio/ch/FileDispatcherImpl;->close(Ljava/io/FileDescriptor;)V
 HSPLsun/nio/ch/FileDispatcherImpl;->duplicateForMapping(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;
-HSPLsun/nio/ch/FileDispatcherImpl;->force(Ljava/io/FileDescriptor;Z)I
 HSPLsun/nio/ch/FileDispatcherImpl;->lock(Ljava/io/FileDescriptor;ZJJZ)I
-HSPLsun/nio/ch/FileDispatcherImpl;->pread(Ljava/io/FileDescriptor;JIJ)I
-HPLsun/nio/ch/FileDispatcherImpl;->pwrite(Ljava/io/FileDescriptor;JIJ)I
 HSPLsun/nio/ch/FileDispatcherImpl;->read(Ljava/io/FileDescriptor;JI)I
 HSPLsun/nio/ch/FileDispatcherImpl;->release(Ljava/io/FileDescriptor;JJ)V
 HSPLsun/nio/ch/FileDispatcherImpl;->size(Ljava/io/FileDescriptor;)J
-PLsun/nio/ch/FileDispatcherImpl;->truncate(Ljava/io/FileDescriptor;J)I
 HSPLsun/nio/ch/FileDispatcherImpl;->write(Ljava/io/FileDescriptor;JI)I
 HSPLsun/nio/ch/FileKey;-><init>()V
 HSPLsun/nio/ch/FileKey;->create(Ljava/io/FileDescriptor;)Lsun/nio/ch/FileKey;
-PLsun/nio/ch/FileKey;->equals(Ljava/lang/Object;)Z
 HSPLsun/nio/ch/FileKey;->hashCode()I
 HSPLsun/nio/ch/FileLockImpl;-><init>(Ljava/nio/channels/FileChannel;JJZ)V
 HSPLsun/nio/ch/FileLockImpl;->invalidate()V
@@ -44015,142 +21810,20 @@
 HSPLsun/nio/ch/IOStatus;->checkAll(J)Z
 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;->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
-HSPLsun/nio/ch/NativeDispatcher;->needsPositionLock()Z
-HSPLsun/nio/ch/NativeObject;-><init>(IZ)V
-HSPLsun/nio/ch/NativeObject;->address()J
-HPLsun/nio/ch/NativeObject;->getInt(I)I
-HSPLsun/nio/ch/NativeObject;->getShort(I)S
-HSPLsun/nio/ch/NativeObject;->putInt(II)V
-HSPLsun/nio/ch/NativeObject;->putShort(IS)V
 HSPLsun/nio/ch/NativeThreadSet;-><init>(I)V
 HSPLsun/nio/ch/NativeThreadSet;->add()I
 HSPLsun/nio/ch/NativeThreadSet;->remove(I)V
 HSPLsun/nio/ch/NativeThreadSet;->signalAndWait()V
-HSPLsun/nio/ch/Net;->checkAddress(Ljava/net/SocketAddress;)Ljava/net/InetSocketAddress;
-HSPLsun/nio/ch/Net;->connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)I
-HSPLsun/nio/ch/Net;->connect(Ljava/net/ProtocolFamily;Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)I
-HSPLsun/nio/ch/Net;->isIPv6Available()Z
-HSPLsun/nio/ch/Net;->localAddress(Ljava/io/FileDescriptor;)Ljava/net/InetSocketAddress;
-HPLsun/nio/ch/Net;->setSocketOption(Ljava/io/FileDescriptor;Ljava/net/ProtocolFamily;Ljava/net/SocketOption;Ljava/lang/Object;)V
-HSPLsun/nio/ch/Net;->socket(Ljava/net/ProtocolFamily;Z)Ljava/io/FileDescriptor;
-HSPLsun/nio/ch/Net;->socket(Z)Ljava/io/FileDescriptor;
-HPLsun/nio/ch/Net;->translateException(Ljava/lang/Exception;)V
-HPLsun/nio/ch/Net;->translateException(Ljava/lang/Exception;Z)V
-HPLsun/nio/ch/Net;->translateToSocketException(Ljava/lang/Exception;)V
-HSPLsun/nio/ch/PollArrayWrapper;-><init>(I)V
-HSPLsun/nio/ch/PollArrayWrapper;->addEntry(Lsun/nio/ch/SelChImpl;)V
-HSPLsun/nio/ch/PollArrayWrapper;->free()V
-HSPLsun/nio/ch/PollArrayWrapper;->initInterrupt(II)V
-HSPLsun/nio/ch/PollArrayWrapper;->interrupt()V
-HSPLsun/nio/ch/PollArrayWrapper;->poll(IIJ)I
-HSPLsun/nio/ch/PollArrayWrapper;->release(I)V
-HPLsun/nio/ch/PollArrayWrapper;->replaceEntry(Lsun/nio/ch/PollArrayWrapper;ILsun/nio/ch/PollArrayWrapper;I)V
-HSPLsun/nio/ch/PollSelectorImpl;-><init>(Ljava/nio/channels/spi/SelectorProvider;)V
-HSPLsun/nio/ch/PollSelectorImpl;->doSelect(J)I
-HSPLsun/nio/ch/PollSelectorImpl;->implCloseInterrupt()V
-HSPLsun/nio/ch/PollSelectorImpl;->wakeup()Ljava/nio/channels/Selector;
-HSPLsun/nio/ch/PollSelectorProvider;-><init>()V
-HSPLsun/nio/ch/PollSelectorProvider;->openSelector()Ljava/nio/channels/spi/AbstractSelector;
-HSPLsun/nio/ch/SelectionKeyImpl;-><init>(Lsun/nio/ch/SelChImpl;Lsun/nio/ch/SelectorImpl;)V
-HSPLsun/nio/ch/SelectionKeyImpl;->channel()Ljava/nio/channels/SelectableChannel;
-HSPLsun/nio/ch/SelectionKeyImpl;->ensureValid()V
-HSPLsun/nio/ch/SelectionKeyImpl;->getIndex()I
-HSPLsun/nio/ch/SelectionKeyImpl;->interestOps(I)Ljava/nio/channels/SelectionKey;
-HSPLsun/nio/ch/SelectionKeyImpl;->nioInterestOps()I
-HSPLsun/nio/ch/SelectionKeyImpl;->nioInterestOps(I)Ljava/nio/channels/SelectionKey;
-HSPLsun/nio/ch/SelectionKeyImpl;->nioReadyOps()I
-HSPLsun/nio/ch/SelectionKeyImpl;->nioReadyOps(I)V
-HPLsun/nio/ch/SelectionKeyImpl;->readyOps()I
-PLsun/nio/ch/SelectionKeyImpl;->selector()Ljava/nio/channels/Selector;
-HSPLsun/nio/ch/SelectionKeyImpl;->setIndex(I)V
-HSPLsun/nio/ch/SelectorImpl;-><init>(Ljava/nio/channels/spi/SelectorProvider;)V
-HSPLsun/nio/ch/SelectorImpl;->implCloseSelector()V
-HSPLsun/nio/ch/SelectorImpl;->lockAndDoSelect(J)I
-HSPLsun/nio/ch/SelectorImpl;->processDeregisterQueue()V
-HSPLsun/nio/ch/SelectorImpl;->register(Ljava/nio/channels/spi/AbstractSelectableChannel;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;
-HSPLsun/nio/ch/SelectorImpl;->select(J)I
-HPLsun/nio/ch/SelectorImpl;->selectedKeys()Ljava/util/Set;
-HSPLsun/nio/ch/SelectorProviderImpl;-><init>()V
-HSPLsun/nio/ch/SelectorProviderImpl;->openSocketChannel()Ljava/nio/channels/SocketChannel;
 HSPLsun/nio/ch/SharedFileLockTable$FileLockReference;-><init>(Ljava/nio/channels/FileLock;Ljava/lang/ref/ReferenceQueue;Lsun/nio/ch/FileKey;)V
-HSPLsun/nio/ch/SharedFileLockTable$FileLockReference;->fileKey()Lsun/nio/ch/FileKey;
 HSPLsun/nio/ch/SharedFileLockTable;-><init>(Ljava/nio/channels/Channel;Ljava/io/FileDescriptor;)V
 HSPLsun/nio/ch/SharedFileLockTable;->add(Ljava/nio/channels/FileLock;)V
-HPLsun/nio/ch/SharedFileLockTable;->checkList(Ljava/util/List;JJ)V
 HSPLsun/nio/ch/SharedFileLockTable;->remove(Ljava/nio/channels/FileLock;)V
 HSPLsun/nio/ch/SharedFileLockTable;->removeAll()Ljava/util/List;
 HSPLsun/nio/ch/SharedFileLockTable;->removeKeyIfEmpty(Lsun/nio/ch/FileKey;Ljava/util/List;)V
 HSPLsun/nio/ch/SharedFileLockTable;->removeStaleEntries()V
-HSPLsun/nio/ch/SocketAdaptor$1;-><init>(Lsun/nio/ch/SocketAdaptor;)V
-HSPLsun/nio/ch/SocketAdaptor$1;->run()Ljava/io/InputStream;
-HSPLsun/nio/ch/SocketAdaptor$1;->run()Ljava/lang/Object;
-HSPLsun/nio/ch/SocketAdaptor$2;-><init>(Lsun/nio/ch/SocketAdaptor;)V
-HSPLsun/nio/ch/SocketAdaptor$2;->run()Ljava/io/OutputStream;
-HSPLsun/nio/ch/SocketAdaptor$2;->run()Ljava/lang/Object;
-HSPLsun/nio/ch/SocketAdaptor$SocketInputStream;-><init>(Lsun/nio/ch/SocketAdaptor;)V
-HSPLsun/nio/ch/SocketAdaptor$SocketInputStream;-><init>(Lsun/nio/ch/SocketAdaptor;Lsun/nio/ch/SocketAdaptor$1;)V
-HSPLsun/nio/ch/SocketAdaptor;-><init>(Lsun/nio/ch/SocketChannelImpl;)V
-HSPLsun/nio/ch/SocketAdaptor;->access$000(Lsun/nio/ch/SocketAdaptor;)Lsun/nio/ch/SocketChannelImpl;
-HPLsun/nio/ch/SocketAdaptor;->close()V
-HSPLsun/nio/ch/SocketAdaptor;->create(Lsun/nio/ch/SocketChannelImpl;)Ljava/net/Socket;
-HPLsun/nio/ch/SocketAdaptor;->getFileDescriptor$()Ljava/io/FileDescriptor;
-HSPLsun/nio/ch/SocketAdaptor;->getInetAddress()Ljava/net/InetAddress;
-HSPLsun/nio/ch/SocketAdaptor;->getInputStream()Ljava/io/InputStream;
-HSPLsun/nio/ch/SocketAdaptor;->getOutputStream()Ljava/io/OutputStream;
-HSPLsun/nio/ch/SocketAdaptor;->getPort()I
-HSPLsun/nio/ch/SocketAdaptor;->getSoTimeout()I
-HSPLsun/nio/ch/SocketAdaptor;->isClosed()Z
-HSPLsun/nio/ch/SocketAdaptor;->isConnected()Z
-HPLsun/nio/ch/SocketAdaptor;->isInputShutdown()Z
-HPLsun/nio/ch/SocketAdaptor;->isOutputShutdown()Z
-HPLsun/nio/ch/SocketAdaptor;->setBooleanOption(Ljava/net/SocketOption;Z)V
-HPLsun/nio/ch/SocketAdaptor;->setIntOption(Ljava/net/SocketOption;I)V
-HPLsun/nio/ch/SocketAdaptor;->setSoLinger(ZI)V
-HSPLsun/nio/ch/SocketAdaptor;->setSoTimeout(I)V
-HPLsun/nio/ch/SocketAdaptor;->setTcpNoDelay(Z)V
-HPLsun/nio/ch/SocketAdaptor;->shutdownOutput()V
-HSPLsun/nio/ch/SocketChannelImpl;-><init>(Ljava/nio/channels/spi/SelectorProvider;)V
-HSPLsun/nio/ch/SocketChannelImpl;->connect(Ljava/net/SocketAddress;)Z
-HSPLsun/nio/ch/SocketChannelImpl;->ensureOpenAndUnconnected()V
-HPLsun/nio/ch/SocketChannelImpl;->ensureReadOpen()Z
-HPLsun/nio/ch/SocketChannelImpl;->ensureWriteOpen()V
-HSPLsun/nio/ch/SocketChannelImpl;->finalize()V
-HSPLsun/nio/ch/SocketChannelImpl;->finishConnect()Z
-HSPLsun/nio/ch/SocketChannelImpl;->getFD()Ljava/io/FileDescriptor;
-HSPLsun/nio/ch/SocketChannelImpl;->implCloseSelectableChannel()V
-HSPLsun/nio/ch/SocketChannelImpl;->implConfigureBlocking(Z)V
-HSPLsun/nio/ch/SocketChannelImpl;->isConnected()Z
-HSPLsun/nio/ch/SocketChannelImpl;->isInputOpen()Z
-HSPLsun/nio/ch/SocketChannelImpl;->isOutputOpen()Z
-HSPLsun/nio/ch/SocketChannelImpl;->kill()V
-HPLsun/nio/ch/SocketChannelImpl;->read(Ljava/nio/ByteBuffer;)I
-HSPLsun/nio/ch/SocketChannelImpl;->readerCleanup()V
-HSPLsun/nio/ch/SocketChannelImpl;->remoteAddress()Ljava/net/SocketAddress;
-HPLsun/nio/ch/SocketChannelImpl;->setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/SocketChannel;
-HPLsun/nio/ch/SocketChannelImpl;->shutdownOutput()Ljava/nio/channels/SocketChannel;
-HSPLsun/nio/ch/SocketChannelImpl;->socket()Ljava/net/Socket;
-HPLsun/nio/ch/SocketChannelImpl;->supportedOptions()Ljava/util/Set;
-HSPLsun/nio/ch/SocketChannelImpl;->translateAndSetInterestOps(ILsun/nio/ch/SelectionKeyImpl;)V
-HSPLsun/nio/ch/SocketChannelImpl;->translateAndSetReadyOps(ILsun/nio/ch/SelectionKeyImpl;)Z
-HSPLsun/nio/ch/SocketChannelImpl;->translateReadyOps(IILsun/nio/ch/SelectionKeyImpl;)Z
-HPLsun/nio/ch/SocketChannelImpl;->write(Ljava/nio/ByteBuffer;)I
-HPLsun/nio/ch/SocketChannelImpl;->writerCleanup()V
-HSPLsun/nio/ch/SocketDispatcher;->close(Ljava/io/FileDescriptor;)V
-HSPLsun/nio/ch/SocketDispatcher;->preClose(Ljava/io/FileDescriptor;)V
-HPLsun/nio/ch/SocketDispatcher;->read(Ljava/io/FileDescriptor;JI)I
-HPLsun/nio/ch/SocketDispatcher;->write(Ljava/io/FileDescriptor;JI)I
 HSPLsun/nio/ch/Util$1;->initialValue()Ljava/lang/Object;
 HSPLsun/nio/ch/Util$1;->initialValue()Lsun/nio/ch/Util$BufferCache;
-HSPLsun/nio/ch/Util$3;-><init>(Ljava/util/Set;)V
-HPLsun/nio/ch/Util$3;->clear()V
-HPLsun/nio/ch/Util$3;->iterator()Ljava/util/Iterator;
-HPLsun/nio/ch/Util$3;->size()I
 HSPLsun/nio/ch/Util$BufferCache;-><init>()V
 HSPLsun/nio/ch/Util$BufferCache;->get(I)Ljava/nio/ByteBuffer;
 HSPLsun/nio/ch/Util$BufferCache;->isEmpty()Z
@@ -44158,27 +21831,17 @@
 HSPLsun/nio/ch/Util$BufferCache;->offerFirst(Ljava/nio/ByteBuffer;)Z
 HSPLsun/nio/ch/Util$BufferCache;->removeFirst()Ljava/nio/ByteBuffer;
 HSPLsun/nio/ch/Util;->access$000()I
-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;->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;->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
 HSPLsun/nio/cs/StreamDecoder;->close()V
 HSPLsun/nio/cs/StreamDecoder;->ensureOpen()V
 HSPLsun/nio/cs/StreamDecoder;->forInputStreamReader(Ljava/io/InputStream;Ljava/lang/Object;Ljava/lang/String;)Lsun/nio/cs/StreamDecoder;
 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;->implReady()Z
 HSPLsun/nio/cs/StreamDecoder;->inReady()Z
-HSPLsun/nio/cs/StreamDecoder;->read()I
 HSPLsun/nio/cs/StreamDecoder;->read([CII)I
-HSPLsun/nio/cs/StreamDecoder;->read0()I
 HSPLsun/nio/cs/StreamDecoder;->readBytes()I
 HSPLsun/nio/cs/StreamDecoder;->ready()Z
 HSPLsun/nio/cs/StreamEncoder;-><init>(Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)V
@@ -44186,7 +21849,6 @@
 HSPLsun/nio/cs/StreamEncoder;->close()V
 HSPLsun/nio/cs/StreamEncoder;->ensureOpen()V
 HSPLsun/nio/cs/StreamEncoder;->flush()V
-HSPLsun/nio/cs/StreamEncoder;->flushBuffer()V
 HSPLsun/nio/cs/StreamEncoder;->flushLeftoverChar(Ljava/nio/CharBuffer;Z)V
 HSPLsun/nio/cs/StreamEncoder;->forOutputStreamWriter(Ljava/io/OutputStream;Ljava/lang/Object;Ljava/lang/String;)Lsun/nio/cs/StreamEncoder;
 HSPLsun/nio/cs/StreamEncoder;->forOutputStreamWriter(Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)Lsun/nio/cs/StreamEncoder;
@@ -44194,43 +21856,22 @@
 HSPLsun/nio/cs/StreamEncoder;->implFlush()V
 HSPLsun/nio/cs/StreamEncoder;->implFlushBuffer()V
 HSPLsun/nio/cs/StreamEncoder;->implWrite([CII)V
-HSPLsun/nio/cs/StreamEncoder;->isOpen()Z
 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
-PLsun/nio/cs/ThreadLocalCoders$1;->create(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLsun/nio/cs/ThreadLocalCoders$2;->create(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLsun/nio/cs/ThreadLocalCoders$2;->hasName(Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLsun/nio/cs/ThreadLocalCoders$Cache;->forName(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLsun/nio/cs/ThreadLocalCoders$Cache;->moveToFront([Ljava/lang/Object;I)V
-PLsun/nio/cs/ThreadLocalCoders;->decoderFor(Ljava/lang/Object;)Ljava/nio/charset/CharsetDecoder;
-HSPLsun/nio/cs/ThreadLocalCoders;->encoderFor(Ljava/lang/Object;)Ljava/nio/charset/CharsetEncoder;
 HSPLsun/nio/fs/AbstractBasicFileAttributeView;-><init>()V
 HSPLsun/nio/fs/AbstractPath;-><init>()V
-HSPLsun/nio/fs/AbstractPath;->resolve(Ljava/lang/String;)Ljava/nio/file/Path;
-HSPLsun/nio/fs/AbstractPath;->startsWith(Ljava/lang/String;)Z
-HSPLsun/nio/fs/AbstractPath;->toFile()Ljava/io/File;
-PLsun/nio/fs/Globs;-><clinit>()V
-PLsun/nio/fs/Globs;->next(Ljava/lang/String;I)C
-HPLsun/nio/fs/Globs;->toRegexPattern(Ljava/lang/String;Z)Ljava/lang/String;
-PLsun/nio/fs/Globs;->toUnixRegexPattern(Ljava/lang/String;)Ljava/lang/String;
-HPLsun/nio/fs/LinuxFileSystem;->copyNonPosixAttributes(II)V
 HSPLsun/nio/fs/LinuxFileSystemProvider;->getFileAttributeView(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileAttributeView;
 HSPLsun/nio/fs/LinuxFileSystemProvider;->readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;
-HSPLsun/nio/fs/NativeBuffer$Deallocator;-><init>(J)V
-HSPLsun/nio/fs/NativeBuffer$Deallocator;->run()V
-HSPLsun/nio/fs/NativeBuffer;-><init>(I)V
-HSPLsun/nio/fs/NativeBuffer;->access$000()Lsun/misc/Unsafe;
 HSPLsun/nio/fs/NativeBuffer;->address()J
 HSPLsun/nio/fs/NativeBuffer;->owner()Ljava/lang/Object;
 HSPLsun/nio/fs/NativeBuffer;->release()V
 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;
-HPLsun/nio/fs/NativeBuffers;->asNativeBuffer([B)Lsun/nio/fs/NativeBuffer;
 HSPLsun/nio/fs/NativeBuffers;->copyCStringToNativeBuffer([BLsun/nio/fs/NativeBuffer;)V
-HPLsun/nio/fs/NativeBuffers;->getNativeBuffer(I)Lsun/nio/fs/NativeBuffer;
 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
@@ -44240,8 +21881,6 @@
 HSPLsun/nio/fs/UnixChannelFactory;->newFileChannel(ILsun/nio/fs/UnixPath;Ljava/lang/String;Ljava/util/Set;I)Ljava/nio/channels/FileChannel;
 HSPLsun/nio/fs/UnixChannelFactory;->newFileChannel(Lsun/nio/fs/UnixPath;Ljava/util/Set;I)Ljava/nio/channels/FileChannel;
 HSPLsun/nio/fs/UnixChannelFactory;->open(ILsun/nio/fs/UnixPath;Ljava/lang/String;Lsun/nio/fs/UnixChannelFactory$Flags;I)Ljava/io/FileDescriptor;
-HSPLsun/nio/fs/UnixDirectoryStream$UnixDirectoryIterator;-><clinit>()V
-HSPLsun/nio/fs/UnixDirectoryStream;-><init>(Lsun/nio/fs/UnixPath;JLjava/nio/file/DirectoryStream$Filter;)V
 HSPLsun/nio/fs/UnixException;-><init>(I)V
 HSPLsun/nio/fs/UnixException;->errno()I
 HSPLsun/nio/fs/UnixException;->rethrowAsIOException(Lsun/nio/fs/UnixPath;)V
@@ -44251,89 +21890,43 @@
 HSPLsun/nio/fs/UnixFileAttributeViews$Basic;->readAttributes()Ljava/nio/file/attribute/BasicFileAttributes;
 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
-PLsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;->creationTime()Ljava/nio/file/attribute/FileTime;
-HSPLsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;->fileKey()Ljava/lang/Object;
-HSPLsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;->isDirectory()Z
 HSPLsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;->isRegularFile()Z
-PLsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;->lastAccessTime()Ljava/nio/file/attribute/FileTime;
-HSPLsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;->lastModifiedTime()Ljava/nio/file/attribute/FileTime;
-HSPLsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;->size()J
 HSPLsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;->wrap(Lsun/nio/fs/UnixFileAttributes;)Lsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;
 HSPLsun/nio/fs/UnixFileAttributes;-><init>()V
 HSPLsun/nio/fs/UnixFileAttributes;->asBasicFileAttributes()Ljava/nio/file/attribute/BasicFileAttributes;
-PLsun/nio/fs/UnixFileAttributes;->creationTime()Ljava/nio/file/attribute/FileTime;
-HSPLsun/nio/fs/UnixFileAttributes;->fileKey()Lsun/nio/fs/UnixFileKey;
 HSPLsun/nio/fs/UnixFileAttributes;->get(Lsun/nio/fs/UnixPath;Z)Lsun/nio/fs/UnixFileAttributes;
-HPLsun/nio/fs/UnixFileAttributes;->gid()I
-HPLsun/nio/fs/UnixFileAttributes;->isDevice()Z
-HSPLsun/nio/fs/UnixFileAttributes;->isDirectory()Z
 HSPLsun/nio/fs/UnixFileAttributes;->isRegularFile()Z
-HPLsun/nio/fs/UnixFileAttributes;->isSymbolicLink()Z
-PLsun/nio/fs/UnixFileAttributes;->lastAccessTime()Ljava/nio/file/attribute/FileTime;
-HSPLsun/nio/fs/UnixFileAttributes;->lastModifiedTime()Ljava/nio/file/attribute/FileTime;
-HPLsun/nio/fs/UnixFileAttributes;->mode()I
-HSPLsun/nio/fs/UnixFileAttributes;->size()J
-HSPLsun/nio/fs/UnixFileAttributes;->toFileTime(JJ)Ljava/nio/file/attribute/FileTime;
-HPLsun/nio/fs/UnixFileAttributes;->uid()I
-HSPLsun/nio/fs/UnixFileModeAttribute;->toUnixMode(I[Ljava/nio/file/attribute/FileAttribute;)I
-PLsun/nio/fs/UnixFileSystem$3;-><init>(Lsun/nio/fs/UnixFileSystem;Ljava/util/regex/Pattern;)V
-HPLsun/nio/fs/UnixFileSystem$3;->matches(Ljava/nio/file/Path;)Z
-PLsun/nio/fs/UnixFileSystem;->compilePathMatchPattern(Ljava/lang/String;)Ljava/util/regex/Pattern;
 HSPLsun/nio/fs/UnixFileSystem;->getPath(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
-PLsun/nio/fs/UnixFileSystem;->getPathMatcher(Ljava/lang/String;)Ljava/nio/file/PathMatcher;
 HSPLsun/nio/fs/UnixFileSystem;->needToResolveAgainstDefaultDirectory()Z
 HSPLsun/nio/fs/UnixFileSystem;->normalizeJavaPath(Ljava/lang/String;)Ljava/lang/String;
 HSPLsun/nio/fs/UnixFileSystem;->normalizeNativePath([C)[C
 HSPLsun/nio/fs/UnixFileSystem;->provider()Ljava/nio/file/spi/FileSystemProvider;
-HSPLsun/nio/fs/UnixFileSystemProvider$3;-><clinit>()V
 HSPLsun/nio/fs/UnixFileSystemProvider;->checkAccess(Ljava/nio/file/Path;[Ljava/nio/file/AccessMode;)V
 HSPLsun/nio/fs/UnixFileSystemProvider;->checkPath(Ljava/nio/file/Path;)Lsun/nio/fs/UnixPath;
-HPLsun/nio/fs/UnixFileSystemProvider;->createLink(Ljava/nio/file/Path;Ljava/nio/file/Path;)V
 HSPLsun/nio/fs/UnixFileSystemProvider;->getFileAttributeView(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileAttributeView;
-HPLsun/nio/fs/UnixFileSystemProvider;->move(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)V
 HSPLsun/nio/fs/UnixFileSystemProvider;->newByteChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;
-HSPLsun/nio/fs/UnixFileSystemProvider;->newDirectoryStream(Ljava/nio/file/Path;Ljava/nio/file/DirectoryStream$Filter;)Ljava/nio/file/DirectoryStream;
 HSPLsun/nio/fs/UnixFileSystemProvider;->newFileChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/FileChannel;
 HSPLsun/nio/fs/UnixFileSystemProvider;->readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;
-HSPLsun/nio/fs/UnixNativeDispatcher;->access(Lsun/nio/fs/UnixPath;I)V
-PLsun/nio/fs/UnixNativeDispatcher;->birthtimeSupported()Z
 HSPLsun/nio/fs/UnixNativeDispatcher;->copyToNativeBuffer(Lsun/nio/fs/UnixPath;)Lsun/nio/fs/NativeBuffer;
-HPLsun/nio/fs/UnixNativeDispatcher;->futimesSupported()Z
-HPLsun/nio/fs/UnixNativeDispatcher;->link(Lsun/nio/fs/UnixPath;Lsun/nio/fs/UnixPath;)V
 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
-HPLsun/nio/fs/UnixNativeDispatcher;->rename(Lsun/nio/fs/UnixPath;Lsun/nio/fs/UnixPath;)V
-HSPLsun/nio/fs/UnixNativeDispatcher;->stat(Lsun/nio/fs/UnixPath;Lsun/nio/fs/UnixFileAttributes;)V
-HPLsun/nio/fs/UnixNativeDispatcher;->unlink(Lsun/nio/fs/UnixPath;)V
 HSPLsun/nio/fs/UnixPath;-><init>(Lsun/nio/fs/UnixFileSystem;Ljava/lang/String;)V
 HSPLsun/nio/fs/UnixPath;-><init>(Lsun/nio/fs/UnixFileSystem;[B)V
-HSPLsun/nio/fs/UnixPath;->asByteArray()[B
 HSPLsun/nio/fs/UnixPath;->checkNotNul(Ljava/lang/String;C)V
 HSPLsun/nio/fs/UnixPath;->checkRead()V
-HSPLsun/nio/fs/UnixPath;->checkWrite()V
 HSPLsun/nio/fs/UnixPath;->encode(Lsun/nio/fs/UnixFileSystem;Ljava/lang/String;)[B
 HSPLsun/nio/fs/UnixPath;->getByteArrayForSysCalls()[B
-HPLsun/nio/fs/UnixPath;->getFileName()Ljava/nio/file/Path;
-HPLsun/nio/fs/UnixPath;->getFileName()Lsun/nio/fs/UnixPath;
 HSPLsun/nio/fs/UnixPath;->getFileSystem()Ljava/nio/file/FileSystem;
 HSPLsun/nio/fs/UnixPath;->getFileSystem()Lsun/nio/fs/UnixFileSystem;
-HSPLsun/nio/fs/UnixPath;->getNameCount()I
 HSPLsun/nio/fs/UnixPath;->getParent()Ljava/nio/file/Path;
 HSPLsun/nio/fs/UnixPath;->getParent()Lsun/nio/fs/UnixPath;
 HSPLsun/nio/fs/UnixPath;->getPathForExceptionMessage()Ljava/lang/String;
 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;->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;
 HSPLsun/nio/fs/UnixPath;->resolve([B[B)[B
-HSPLsun/nio/fs/UnixPath;->startsWith(Ljava/nio/file/Path;)Z
 HSPLsun/nio/fs/UnixPath;->toString()Ljava/lang/String;
 HSPLsun/nio/fs/UnixPath;->toUnixPath(Ljava/nio/file/Path;)Lsun/nio/fs/UnixPath;
-HSPLsun/nio/fs/UnixSecureDirectoryStream;-><init>(Lsun/nio/fs/UnixPath;JILjava/nio/file/DirectoryStream$Filter;)V
 HSPLsun/nio/fs/Util;->followLinks([Ljava/nio/file/LinkOption;)Z
 HSPLsun/nio/fs/Util;->jnuEncoding()Ljava/nio/charset/Charset;
 HSPLsun/nio/fs/Util;->toString([B)Ljava/lang/String;
@@ -44342,13 +21935,7 @@
 HSPLsun/reflect/Reflection;->isSameClassPackage(Ljava/lang/Class;Ljava/lang/Class;)Z
 HSPLsun/reflect/Reflection;->isSameClassPackage(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)Z
 HSPLsun/reflect/Reflection;->verifyMemberAccess(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;I)Z
-HSPLsun/reflect/misc/ReflectUtil;->checkPackageAccess(Ljava/lang/Class;)V
-HSPLsun/reflect/misc/ReflectUtil;->checkPackageAccess(Ljava/lang/String;)V
 HSPLsun/reflect/misc/ReflectUtil;->ensureMemberAccess(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;I)V
-HSPLsun/reflect/misc/ReflectUtil;->isNonPublicProxyClass(Ljava/lang/Class;)Z
-PLsun/security/action/GetBooleanAction;-><init>(Ljava/lang/String;)V
-PLsun/security/action/GetBooleanAction;->run()Ljava/lang/Boolean;
-PLsun/security/action/GetBooleanAction;->run()Ljava/lang/Object;
 HSPLsun/security/action/GetPropertyAction;-><init>(Ljava/lang/String;)V
 HSPLsun/security/action/GetPropertyAction;->run()Ljava/lang/Object;
 HSPLsun/security/action/GetPropertyAction;->run()Ljava/lang/String;
@@ -44365,7 +21952,6 @@
 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;
 HSPLsun/security/jca/GetInstance;->getServices(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
-HSPLsun/security/jca/JCAUtil;->getSecureRandom()Ljava/security/SecureRandom;
 HSPLsun/security/jca/ProviderConfig;-><init>(Ljava/lang/String;)V
 HSPLsun/security/jca/ProviderConfig;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLsun/security/jca/ProviderConfig;-><init>(Ljava/security/Provider;)V
@@ -44399,24 +21985,16 @@
 HSPLsun/security/jca/ProviderList;->providers()Ljava/util/List;
 HSPLsun/security/jca/ProviderList;->removeInvalid()Lsun/security/jca/ProviderList;
 HSPLsun/security/jca/ProviderList;->toArray()[Ljava/security/Provider;
-HSPLsun/security/jca/Providers;->beginThreadProviderList(Lsun/security/jca/ProviderList;)Lsun/security/jca/ProviderList;
-HSPLsun/security/jca/Providers;->checkBouncyCastleDeprecation(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLsun/security/jca/Providers;->checkBouncyCastleDeprecation(Ljava/security/Provider;Ljava/lang/String;Ljava/lang/String;)V
-HSPLsun/security/jca/Providers;->endThreadProviderList(Lsun/security/jca/ProviderList;)V
-HSPLsun/security/jca/Providers;->getFullProviderList()Lsun/security/jca/ProviderList;
 HSPLsun/security/jca/Providers;->getProviderList()Lsun/security/jca/ProviderList;
 HSPLsun/security/jca/Providers;->getSystemProviderList()Lsun/security/jca/ProviderList;
 HSPLsun/security/jca/Providers;->getThreadProviderList()Lsun/security/jca/ProviderList;
 HSPLsun/security/jca/Providers;->setProviderList(Lsun/security/jca/ProviderList;)V
 HSPLsun/security/jca/Providers;->setSystemProviderList(Lsun/security/jca/ProviderList;)V
-HSPLsun/security/jca/Providers;->startJarVerification()Ljava/lang/Object;
-HSPLsun/security/jca/Providers;->stopJarVerification(Ljava/lang/Object;)V
 HSPLsun/security/pkcs/ContentInfo;-><init>(Lsun/security/util/DerInputStream;)V
 HSPLsun/security/pkcs/ContentInfo;-><init>(Lsun/security/util/DerInputStream;Z)V
 HSPLsun/security/pkcs/ContentInfo;->getContent()Lsun/security/util/DerValue;
 HSPLsun/security/pkcs/ContentInfo;->getData()[B
 HSPLsun/security/pkcs/PKCS7$VerbatimX509Certificate;-><init>(Ljava/security/cert/X509Certificate;[B)V
-HSPLsun/security/pkcs/PKCS7$VerbatimX509Certificate;->getEncoded()[B
 HSPLsun/security/pkcs/PKCS7$WrappedX509Certificate;-><init>(Ljava/security/cert/X509Certificate;)V
 HSPLsun/security/pkcs/PKCS7$WrappedX509Certificate;->getIssuerDN()Ljava/security/Principal;
 HSPLsun/security/pkcs/PKCS7$WrappedX509Certificate;->getKeyUsage()[Z
@@ -44452,17 +22030,10 @@
 HSPLsun/security/provider/certpath/AdaptableX509CertSelector;->match(Ljava/security/cert/Certificate;)Z
 HSPLsun/security/provider/certpath/AdaptableX509CertSelector;->matchSubjectKeyID(Ljava/security/cert/X509Certificate;)Z
 HSPLsun/security/provider/certpath/AdaptableX509CertSelector;->setSkiAndSerialNumber(Lsun/security/x509/AuthorityKeyIdentifierExtension;)V
-PLsun/security/provider/certpath/AdaptableX509CertSelector;->setValidityPeriod(Ljava/util/Date;Ljava/util/Date;)V
-PLsun/security/provider/certpath/AdjacencyList;-><init>(Ljava/util/List;)V
-HPLsun/security/provider/certpath/AdjacencyList;->buildList(Ljava/util/List;ILsun/security/provider/certpath/BuildStep;)Z
 HSPLsun/security/provider/certpath/AlgorithmChecker;-><init>(Ljava/security/cert/TrustAnchor;)V
 HSPLsun/security/provider/certpath/AlgorithmChecker;-><init>(Ljava/security/cert/TrustAnchor;Ljava/security/AlgorithmConstraints;)V
-HSPLsun/security/provider/certpath/AlgorithmChecker;->check(Ljava/security/PublicKey;Lsun/security/x509/AlgorithmId;)V
 HSPLsun/security/provider/certpath/AlgorithmChecker;->check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V
-HSPLsun/security/provider/certpath/AlgorithmChecker;->checkFingerprint(Ljava/security/cert/X509Certificate;)Z
 HSPLsun/security/provider/certpath/AlgorithmChecker;->init(Z)V
-PLsun/security/provider/certpath/AlgorithmChecker;->isForwardCheckingSupported()Z
-PLsun/security/provider/certpath/AlgorithmChecker;->trySetTrustAnchor(Ljava/security/cert/TrustAnchor;)V
 HSPLsun/security/provider/certpath/BasicChecker;-><init>(Ljava/security/cert/TrustAnchor;Ljava/util/Date;Ljava/lang/String;Z)V
 HSPLsun/security/provider/certpath/BasicChecker;->check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V
 HSPLsun/security/provider/certpath/BasicChecker;->getPublicKey()Ljava/security/PublicKey;
@@ -44471,77 +22042,21 @@
 HSPLsun/security/provider/certpath/BasicChecker;->verifyNameChaining(Ljava/security/cert/X509Certificate;)V
 HSPLsun/security/provider/certpath/BasicChecker;->verifySignature(Ljava/security/cert/X509Certificate;)V
 HSPLsun/security/provider/certpath/BasicChecker;->verifyTimestamp(Ljava/security/cert/X509Certificate;)V
-PLsun/security/provider/certpath/BuildStep;-><init>(Lsun/security/provider/certpath/Vertex;I)V
-PLsun/security/provider/certpath/Builder;-><clinit>()V
-PLsun/security/provider/certpath/Builder;-><init>(Lsun/security/provider/certpath/PKIX$BuilderParams;)V
-PLsun/security/provider/certpath/Builder;->addMatchingCerts(Ljava/security/cert/X509CertSelector;Ljava/util/Collection;Ljava/util/Collection;Z)Z
-HSPLsun/security/provider/certpath/CertId;-><init>(Ljava/security/cert/X509Certificate;Lsun/security/x509/SerialNumber;)V
-HSPLsun/security/provider/certpath/CertId;-><init>(Ljavax/security/auth/x500/X500Principal;Ljava/security/PublicKey;Lsun/security/x509/SerialNumber;)V
-HSPLsun/security/provider/certpath/CertId;-><init>(Lsun/security/util/DerInputStream;)V
-HSPLsun/security/provider/certpath/CertId;->equals(Ljava/lang/Object;)Z
-HSPLsun/security/provider/certpath/CertId;->getHashAlgorithm()Lsun/security/x509/AlgorithmId;
-HSPLsun/security/provider/certpath/CertId;->getIssuerKeyHash()[B
-HSPLsun/security/provider/certpath/CertId;->getIssuerNameHash()[B
-HSPLsun/security/provider/certpath/CertId;->getSerialNumber()Ljava/math/BigInteger;
-HSPLsun/security/provider/certpath/CertId;->hashCode()I
-PLsun/security/provider/certpath/CertPathHelper;->setPathToNames(Ljava/security/cert/X509CertSelector;Ljava/util/Set;)V
 HSPLsun/security/provider/certpath/ConstraintsChecker;-><init>(I)V
 HSPLsun/security/provider/certpath/ConstraintsChecker;->check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V
 HSPLsun/security/provider/certpath/ConstraintsChecker;->checkBasicConstraints(Ljava/security/cert/X509Certificate;)V
 HSPLsun/security/provider/certpath/ConstraintsChecker;->init(Z)V
 HSPLsun/security/provider/certpath/ConstraintsChecker;->mergeNameConstraints(Ljava/security/cert/X509Certificate;Lsun/security/x509/NameConstraintsExtension;)Lsun/security/x509/NameConstraintsExtension;
 HSPLsun/security/provider/certpath/ConstraintsChecker;->verifyNameConstraints(Ljava/security/cert/X509Certificate;)V
-PLsun/security/provider/certpath/ForwardBuilder$PKIXCertComparator;-><init>(Ljava/util/Set;Lsun/security/x509/X509CertImpl;)V
-PLsun/security/provider/certpath/ForwardBuilder$PKIXCertComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLsun/security/provider/certpath/ForwardBuilder$PKIXCertComparator;->compare(Ljava/security/cert/X509Certificate;Ljava/security/cert/X509Certificate;)I
-PLsun/security/provider/certpath/ForwardBuilder$PKIXCertComparator;->getSelector(Lsun/security/x509/X509CertImpl;)Ljava/security/cert/X509CertSelector;
-PLsun/security/provider/certpath/ForwardBuilder;-><clinit>()V
-PLsun/security/provider/certpath/ForwardBuilder;-><init>(Lsun/security/provider/certpath/PKIX$BuilderParams;Z)V
-PLsun/security/provider/certpath/ForwardBuilder;->access$000()Lsun/security/util/Debug;
-PLsun/security/provider/certpath/ForwardBuilder;->addCertToPath(Ljava/security/cert/X509Certificate;Ljava/util/LinkedList;)V
-PLsun/security/provider/certpath/ForwardBuilder;->getMatchingCACerts(Lsun/security/provider/certpath/ForwardState;Ljava/util/List;Ljava/util/Collection;)V
-PLsun/security/provider/certpath/ForwardBuilder;->getMatchingCerts(Lsun/security/provider/certpath/State;Ljava/util/List;)Ljava/util/Collection;
-PLsun/security/provider/certpath/ForwardBuilder;->getMatchingEECerts(Lsun/security/provider/certpath/ForwardState;Ljava/util/List;Ljava/util/Collection;)V
-PLsun/security/provider/certpath/ForwardBuilder;->isPathCompleted(Ljava/security/cert/X509Certificate;)Z
-HPLsun/security/provider/certpath/ForwardBuilder;->verifyCert(Ljava/security/cert/X509Certificate;Lsun/security/provider/certpath/State;Ljava/util/List;)V
-PLsun/security/provider/certpath/ForwardState;-><clinit>()V
-PLsun/security/provider/certpath/ForwardState;-><init>()V
-PLsun/security/provider/certpath/ForwardState;->clone()Ljava/lang/Object;
-PLsun/security/provider/certpath/ForwardState;->initState(Ljava/util/List;)V
-PLsun/security/provider/certpath/ForwardState;->isInitial()Z
-PLsun/security/provider/certpath/ForwardState;->keyParamsNeeded()Z
-PLsun/security/provider/certpath/ForwardState;->updateState(Ljava/security/cert/X509Certificate;)V
 HSPLsun/security/provider/certpath/KeyChecker;-><init>(ILjava/security/cert/CertSelector;)V
 HSPLsun/security/provider/certpath/KeyChecker;->check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V
 HSPLsun/security/provider/certpath/KeyChecker;->init(Z)V
 HSPLsun/security/provider/certpath/KeyChecker;->verifyCAKeyUsage(Ljava/security/cert/X509Certificate;)V
-HSPLsun/security/provider/certpath/OCSPResponse$1;-><clinit>()V
-HSPLsun/security/provider/certpath/OCSPResponse$ResponseStatus;->values()[Lsun/security/provider/certpath/OCSPResponse$ResponseStatus;
-HSPLsun/security/provider/certpath/OCSPResponse$SingleResponse;-><init>(Lsun/security/util/DerValue;)V
-HSPLsun/security/provider/certpath/OCSPResponse$SingleResponse;-><init>(Lsun/security/util/DerValue;Lsun/security/provider/certpath/OCSPResponse$1;)V
-HSPLsun/security/provider/certpath/OCSPResponse$SingleResponse;->access$100(Lsun/security/provider/certpath/OCSPResponse$SingleResponse;)Lsun/security/provider/certpath/CertId;
-HSPLsun/security/provider/certpath/OCSPResponse$SingleResponse;->access$200(Lsun/security/provider/certpath/OCSPResponse$SingleResponse;)Ljava/util/Date;
-HSPLsun/security/provider/certpath/OCSPResponse$SingleResponse;->access$300(Lsun/security/provider/certpath/OCSPResponse$SingleResponse;)Ljava/util/Date;
-HSPLsun/security/provider/certpath/OCSPResponse$SingleResponse;->getCertId()Lsun/security/provider/certpath/CertId;
-HSPLsun/security/provider/certpath/OCSPResponse$SingleResponse;->getCertStatus()Lsun/security/provider/certpath/OCSP$RevocationStatus$CertStatus;
-HSPLsun/security/provider/certpath/OCSPResponse;-><init>([B)V
-HSPLsun/security/provider/certpath/OCSPResponse;->getSingleResponse(Lsun/security/provider/certpath/CertId;)Lsun/security/provider/certpath/OCSPResponse$SingleResponse;
-HSPLsun/security/provider/certpath/OCSPResponse;->verify(Ljava/util/List;Ljava/security/cert/X509Certificate;Ljava/security/cert/X509Certificate;Ljava/util/Date;[B)V
-HSPLsun/security/provider/certpath/OCSPResponse;->verifySignature(Ljava/security/cert/X509Certificate;)Z
-PLsun/security/provider/certpath/PKIX$BuilderParams;-><init>(Ljava/security/cert/PKIXBuilderParameters;)V
-PLsun/security/provider/certpath/PKIX$BuilderParams;->certStores()Ljava/util/List;
-PLsun/security/provider/certpath/PKIX$BuilderParams;->checkParams(Ljava/security/cert/PKIXBuilderParameters;)V
-PLsun/security/provider/certpath/PKIX$BuilderParams;->getTargetSubject(Ljava/util/List;Ljava/security/cert/X509CertSelector;)Ljavax/security/auth/x500/X500Principal;
-PLsun/security/provider/certpath/PKIX$BuilderParams;->maxPathLength()I
-PLsun/security/provider/certpath/PKIX$BuilderParams;->targetSubject()Ljavax/security/auth/x500/X500Principal;
-PLsun/security/provider/certpath/PKIX$CertStoreComparator;-><init>()V
-PLsun/security/provider/certpath/PKIX$CertStoreComparator;-><init>(Lsun/security/provider/certpath/PKIX$1;)V
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;-><init>(Ljava/security/cert/CertPath;Ljava/security/cert/PKIXParameters;)V
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;-><init>(Ljava/security/cert/PKIXParameters;)V
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->anyPolicyInhibited()Z
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->certPath()Ljava/security/cert/CertPath;
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->certPathCheckers()Ljava/util/List;
-HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->certStores()Ljava/util/List;
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->certificates()Ljava/util/List;
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->date()Ljava/util/Date;
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->explicitPolicyRequired()Z
@@ -44549,15 +22064,12 @@
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->policyMappingInhibited()Z
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->policyQualifiersRejected()Z
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->revocationEnabled()Z
-PLsun/security/provider/certpath/PKIX$ValidatorParams;->setCertPath(Ljava/security/cert/CertPath;)V
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->sigProvider()Ljava/lang/String;
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->targetCertConstraints()Ljava/security/cert/CertSelector;
 HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->trustAnchors()Ljava/util/Set;
-PLsun/security/provider/certpath/PKIX;->checkBuilderParams(Ljava/security/cert/CertPathParameters;)Lsun/security/provider/certpath/PKIX$BuilderParams;
 HSPLsun/security/provider/certpath/PKIX;->checkParams(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Lsun/security/provider/certpath/PKIX$ValidatorParams;
 HSPLsun/security/provider/certpath/PKIX;->isDSAPublicKeyWithoutParams(Ljava/security/PublicKey;)Z
 HSPLsun/security/provider/certpath/PKIXCertPathValidator;-><init>()V
-HSPLsun/security/provider/certpath/PKIXCertPathValidator;->engineGetRevocationChecker()Ljava/security/cert/CertPathChecker;
 HSPLsun/security/provider/certpath/PKIXCertPathValidator;->engineValidate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;
 HSPLsun/security/provider/certpath/PKIXCertPathValidator;->validate(Ljava/security/cert/TrustAnchor;Lsun/security/provider/certpath/PKIX$ValidatorParams;)Ljava/security/cert/PKIXCertPathValidatorResult;
 HSPLsun/security/provider/certpath/PKIXCertPathValidator;->validate(Lsun/security/provider/certpath/PKIX$ValidatorParams;)Ljava/security/cert/PKIXCertPathValidatorResult;
@@ -44567,7 +22079,6 @@
 HSPLsun/security/provider/certpath/PolicyChecker;->checkPolicy(Ljava/security/cert/X509Certificate;)V
 HSPLsun/security/provider/certpath/PolicyChecker;->getPolicyTree()Ljava/security/cert/PolicyNode;
 HSPLsun/security/provider/certpath/PolicyChecker;->init(Z)V
-PLsun/security/provider/certpath/PolicyChecker;->isForwardCheckingSupported()Z
 HSPLsun/security/provider/certpath/PolicyChecker;->mergeExplicitPolicy(ILsun/security/x509/X509CertImpl;Z)I
 HSPLsun/security/provider/certpath/PolicyChecker;->mergeInhibitAnyPolicy(ILsun/security/x509/X509CertImpl;)I
 HSPLsun/security/provider/certpath/PolicyChecker;->mergePolicyMapping(ILsun/security/x509/X509CertImpl;)I
@@ -44589,47 +22100,8 @@
 HSPLsun/security/provider/certpath/PolicyNodeImpl;->getValidPolicy()Ljava/lang/String;
 HSPLsun/security/provider/certpath/PolicyNodeImpl;->prune(I)V
 HSPLsun/security/provider/certpath/PolicyNodeImpl;->setImmutable()V
-HSPLsun/security/provider/certpath/RevocationChecker$1;-><init>()V
-HSPLsun/security/provider/certpath/RevocationChecker$1;->run()Ljava/lang/Object;
-HSPLsun/security/provider/certpath/RevocationChecker$1;->run()Lsun/security/provider/certpath/RevocationChecker$RevocationProperties;
-HSPLsun/security/provider/certpath/RevocationChecker$2;-><clinit>()V
-HSPLsun/security/provider/certpath/RevocationChecker$Mode;->values()[Lsun/security/provider/certpath/RevocationChecker$Mode;
-HSPLsun/security/provider/certpath/RevocationChecker$RevocationProperties;-><init>()V
-HSPLsun/security/provider/certpath/RevocationChecker$RevocationProperties;-><init>(Lsun/security/provider/certpath/RevocationChecker$1;)V
-HSPLsun/security/provider/certpath/RevocationChecker;-><init>()V
-HSPLsun/security/provider/certpath/RevocationChecker;->certCanSignCrl(Ljava/security/cert/X509Certificate;)Z
-HSPLsun/security/provider/certpath/RevocationChecker;->check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V
-HSPLsun/security/provider/certpath/RevocationChecker;->check(Ljava/security/cert/X509Certificate;Ljava/util/Collection;Ljava/security/PublicKey;Z)V
-HSPLsun/security/provider/certpath/RevocationChecker;->checkOCSP(Ljava/security/cert/X509Certificate;Ljava/util/Collection;)V
-HSPLsun/security/provider/certpath/RevocationChecker;->clone()Ljava/lang/Object;
-HSPLsun/security/provider/certpath/RevocationChecker;->clone()Lsun/security/provider/certpath/RevocationChecker;
-HSPLsun/security/provider/certpath/RevocationChecker;->getResponderCert(Lsun/security/provider/certpath/RevocationChecker$RevocationProperties;Ljava/util/Set;Ljava/util/List;)Ljava/security/cert/X509Certificate;
-HSPLsun/security/provider/certpath/RevocationChecker;->getRevocationProperties()Lsun/security/provider/certpath/RevocationChecker$RevocationProperties;
-HSPLsun/security/provider/certpath/RevocationChecker;->init(Ljava/security/cert/TrustAnchor;Lsun/security/provider/certpath/PKIX$ValidatorParams;)V
-HSPLsun/security/provider/certpath/RevocationChecker;->init(Z)V
-HSPLsun/security/provider/certpath/RevocationChecker;->toURI(Ljava/lang/String;)Ljava/net/URI;
-HSPLsun/security/provider/certpath/RevocationChecker;->updateState(Ljava/security/cert/X509Certificate;)V
-PLsun/security/provider/certpath/SunCertPathBuilder;-><clinit>()V
-PLsun/security/provider/certpath/SunCertPathBuilder;-><init>()V
-HPLsun/security/provider/certpath/SunCertPathBuilder;->addVertices(Ljava/util/Collection;Ljava/util/List;)Ljava/util/List;
-PLsun/security/provider/certpath/SunCertPathBuilder;->build()Ljava/security/cert/PKIXCertPathBuilderResult;
-PLsun/security/provider/certpath/SunCertPathBuilder;->buildCertPath(ZLjava/util/List;)Ljava/security/cert/PKIXCertPathBuilderResult;
-PLsun/security/provider/certpath/SunCertPathBuilder;->buildForward(Ljava/util/List;Ljava/util/LinkedList;Z)V
-HPLsun/security/provider/certpath/SunCertPathBuilder;->depthFirstSearchForward(Ljavax/security/auth/x500/X500Principal;Lsun/security/provider/certpath/ForwardState;Lsun/security/provider/certpath/ForwardBuilder;Ljava/util/List;Ljava/util/LinkedList;)V
-PLsun/security/provider/certpath/SunCertPathBuilder;->engineBuild(Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathBuilderResult;
-PLsun/security/provider/certpath/SunCertPathBuilderResult;-><clinit>()V
-PLsun/security/provider/certpath/SunCertPathBuilderResult;-><init>(Ljava/security/cert/CertPath;Ljava/security/cert/TrustAnchor;Ljava/security/cert/PolicyNode;Ljava/security/PublicKey;Lsun/security/provider/certpath/AdjacencyList;)V
-PLsun/security/provider/certpath/Vertex;-><clinit>()V
-PLsun/security/provider/certpath/Vertex;-><init>(Ljava/security/cert/X509Certificate;)V
-PLsun/security/provider/certpath/Vertex;->getCertificate()Ljava/security/cert/X509Certificate;
-PLsun/security/provider/certpath/Vertex;->getIndex()I
-PLsun/security/provider/certpath/Vertex;->getThrowable()Ljava/lang/Throwable;
-PLsun/security/provider/certpath/Vertex;->setIndex(I)V
 HSPLsun/security/util/AbstractAlgorithmConstraints;->checkAlgorithm([Ljava/lang/String;Ljava/lang/String;Lsun/security/util/AlgorithmDecomposer;)Z
 HSPLsun/security/util/AlgorithmDecomposer;->decompose(Ljava/lang/String;)Ljava/util/Set;
-HSPLsun/security/util/AlgorithmDecomposer;->decomposeImpl(Ljava/lang/String;)Ljava/util/Set;
-HSPLsun/security/util/AlgorithmDecomposer;->decomposeOneHash(Ljava/lang/String;)Ljava/util/Set;
-HSPLsun/security/util/AlgorithmDecomposer;->hasLoop(Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;)V
 HSPLsun/security/util/BitArray;-><init>(I[B)V
 HSPLsun/security/util/BitArray;->get(I)Z
 HSPLsun/security/util/BitArray;->length()I
@@ -44642,9 +22114,6 @@
 HSPLsun/security/util/Cache$EqualByteArray;->hashCode()I
 HSPLsun/security/util/CertConstraintParameters;-><init>(Ljava/security/cert/X509Certificate;Z)V
 HSPLsun/security/util/CertConstraintParameters;->getCertificate()Ljava/security/cert/X509Certificate;
-PLsun/security/util/Debug;->getInstance(Ljava/lang/String;)Lsun/security/util/Debug;
-PLsun/security/util/Debug;->getInstance(Ljava/lang/String;Ljava/lang/String;)Lsun/security/util/Debug;
-PLsun/security/util/Debug;->isOn(Ljava/lang/String;)Z
 HSPLsun/security/util/DerIndefLenConverter;->isIndefinite(I)Z
 HSPLsun/security/util/DerIndefLenConverter;->isLongForm(I)Z
 HSPLsun/security/util/DerInputBuffer;-><init>([B)V
@@ -44670,7 +22139,6 @@
 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
@@ -44775,9 +22243,6 @@
 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;
-HSPLsun/security/util/SignatureFileVerifier;->isBlockOrSF(Ljava/lang/String;)Z
-HSPLsun/security/util/SignatureFileVerifier;->matches([Ljava/security/CodeSigner;[Ljava/security/CodeSigner;[Ljava/security/CodeSigner;)Z
-HSPLsun/security/util/SignatureFileVerifier;->needSignatureFile(Ljava/lang/String;)Z
 HSPLsun/security/util/SignatureFileVerifier;->needSignatureFileBytes()Z
 HSPLsun/security/util/SignatureFileVerifier;->process(Ljava/util/Hashtable;Ljava/util/List;)V
 HSPLsun/security/util/SignatureFileVerifier;->processImpl(Ljava/util/Hashtable;Ljava/util/List;)V
@@ -44807,9 +22272,7 @@
 HSPLsun/security/x509/AlgorithmId;->getEncAlgFromSigAlg(Ljava/lang/String;)Ljava/lang/String;
 HSPLsun/security/x509/AlgorithmId;->getName()Ljava/lang/String;
 HSPLsun/security/x509/AlgorithmId;->getParameters()Ljava/security/AlgorithmParameters;
-HSPLsun/security/x509/AlgorithmId;->hashCode()I
 HSPLsun/security/x509/AlgorithmId;->makeSigAlg(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLsun/security/x509/AlgorithmId;->paramsToString()Ljava/lang/String;
 HSPLsun/security/x509/AlgorithmId;->parse(Lsun/security/util/DerValue;)Lsun/security/x509/AlgorithmId;
 HSPLsun/security/x509/AuthorityInfoAccessExtension;-><init>(Ljava/lang/Boolean;Ljava/lang/Object;)V
 HSPLsun/security/x509/AuthorityInfoAccessExtension;->getName()Ljava/lang/String;
@@ -44825,7 +22288,6 @@
 HSPLsun/security/x509/CertificateAlgorithmId;-><init>(Lsun/security/util/DerInputStream;)V
 HSPLsun/security/x509/CertificateAlgorithmId;->get(Ljava/lang/String;)Lsun/security/x509/AlgorithmId;
 HSPLsun/security/x509/CertificateExtensions;-><init>(Lsun/security/util/DerInputStream;)V
-HPLsun/security/x509/CertificateExtensions;->get(Ljava/lang/String;)Lsun/security/x509/Extension;
 HSPLsun/security/x509/CertificateExtensions;->getAllExtensions()Ljava/util/Collection;
 HSPLsun/security/x509/CertificateExtensions;->getExtension(Ljava/lang/String;)Lsun/security/x509/Extension;
 HSPLsun/security/x509/CertificateExtensions;->init(Lsun/security/util/DerInputStream;)V
@@ -44836,13 +22298,8 @@
 HSPLsun/security/x509/CertificatePolicyId;-><init>(Lsun/security/util/DerValue;)V
 HSPLsun/security/x509/CertificatePolicyId;->getIdentifier()Lsun/security/util/ObjectIdentifier;
 HSPLsun/security/x509/CertificateSerialNumber;-><init>(Lsun/security/util/DerValue;)V
-HSPLsun/security/x509/CertificateSerialNumber;->get(Ljava/lang/String;)Lsun/security/x509/SerialNumber;
 HSPLsun/security/x509/CertificateValidity;-><init>(Lsun/security/util/DerInputStream;)V
 HSPLsun/security/x509/CertificateValidity;->construct(Lsun/security/util/DerValue;)V
-PLsun/security/x509/CertificateValidity;->get(Ljava/lang/String;)Ljava/util/Date;
-PLsun/security/x509/CertificateValidity;->getNotAfter()Ljava/util/Date;
-PLsun/security/x509/CertificateValidity;->getNotBefore()Ljava/util/Date;
-HPLsun/security/x509/CertificateValidity;->valid(Ljava/util/Date;)V
 HSPLsun/security/x509/CertificateVersion;-><init>()V
 HSPLsun/security/x509/CertificateVersion;-><init>(Lsun/security/util/DerValue;)V
 HSPLsun/security/x509/CertificateVersion;->compare(I)I
@@ -44853,7 +22310,6 @@
 HSPLsun/security/x509/DNSName;-><init>(Lsun/security/util/DerValue;)V
 HSPLsun/security/x509/DistributionPoint;-><init>(Lsun/security/util/DerValue;)V
 HSPLsun/security/x509/ExtendedKeyUsageExtension;-><init>(Ljava/lang/Boolean;Ljava/lang/Object;)V
-HPLsun/security/x509/ExtendedKeyUsageExtension;->getExtendedKeyUsage()Ljava/util/List;
 HSPLsun/security/x509/ExtendedKeyUsageExtension;->getName()Ljava/lang/String;
 HSPLsun/security/x509/Extension;-><init>()V
 HSPLsun/security/x509/Extension;-><init>(Lsun/security/util/DerValue;)V
@@ -44866,17 +22322,11 @@
 HSPLsun/security/x509/GeneralNames;-><init>(Lsun/security/util/DerValue;)V
 HSPLsun/security/x509/GeneralNames;->add(Lsun/security/x509/GeneralName;)Lsun/security/x509/GeneralNames;
 HSPLsun/security/x509/KeyIdentifier;-><init>(Lsun/security/util/DerValue;)V
-HSPLsun/security/x509/KeyIdentifier;-><init>([B)V
 HSPLsun/security/x509/KeyIdentifier;->encode(Lsun/security/util/DerOutputStream;)V
-HSPLsun/security/x509/KeyIdentifier;->equals(Ljava/lang/Object;)Z
 HSPLsun/security/x509/KeyUsageExtension;-><init>(Ljava/lang/Boolean;Ljava/lang/Object;)V
-HPLsun/security/x509/KeyUsageExtension;->getBits()[Z
 HSPLsun/security/x509/KeyUsageExtension;->getName()Ljava/lang/String;
-HPLsun/security/x509/OCSPNoCheckExtension;-><init>(Ljava/lang/Boolean;Ljava/lang/Object;)V
-HPLsun/security/x509/OCSPNoCheckExtension;->getName()Ljava/lang/String;
 HSPLsun/security/x509/OIDMap$OIDInfo;->getClazz()Ljava/lang/Class;
 HSPLsun/security/x509/OIDMap;->getClass(Lsun/security/util/ObjectIdentifier;)Ljava/lang/Class;
-HPLsun/security/x509/OIDMap;->getName(Lsun/security/util/ObjectIdentifier;)Ljava/lang/String;
 HSPLsun/security/x509/PolicyInformation;-><init>(Lsun/security/util/DerValue;)V
 HSPLsun/security/x509/PolicyInformation;->getPolicyIdentifier()Lsun/security/x509/CertificatePolicyId;
 HSPLsun/security/x509/PolicyInformation;->getPolicyQualifiers()Ljava/util/Set;
@@ -44886,14 +22336,11 @@
 HSPLsun/security/x509/RDN;->toRFC2253String(Ljava/util/Map;)Ljava/lang/String;
 HSPLsun/security/x509/RDN;->toRFC2253String(Z)Ljava/lang/String;
 HSPLsun/security/x509/RDN;->toRFC2253StringInternal(ZLjava/util/Map;)Ljava/lang/String;
-HSPLsun/security/x509/SerialNumber;-><init>(Lsun/security/util/DerInputStream;)V
 HSPLsun/security/x509/SerialNumber;-><init>(Lsun/security/util/DerValue;)V
 HSPLsun/security/x509/SerialNumber;->construct(Lsun/security/util/DerValue;)V
-HSPLsun/security/x509/SerialNumber;->getNumber()Ljava/math/BigInteger;
 HSPLsun/security/x509/SubjectAlternativeNameExtension;-><init>(Ljava/lang/Boolean;Ljava/lang/Object;)V
 HSPLsun/security/x509/SubjectAlternativeNameExtension;->getName()Ljava/lang/String;
 HSPLsun/security/x509/SubjectKeyIdentifierExtension;-><init>(Ljava/lang/Boolean;Ljava/lang/Object;)V
-HSPLsun/security/x509/SubjectKeyIdentifierExtension;->get(Ljava/lang/String;)Lsun/security/x509/KeyIdentifier;
 HSPLsun/security/x509/SubjectKeyIdentifierExtension;->getName()Ljava/lang/String;
 HSPLsun/security/x509/URIName;-><init>(Ljava/lang/String;)V
 HSPLsun/security/x509/URIName;-><init>(Lsun/security/util/DerValue;)V
@@ -44922,41 +22369,27 @@
 HSPLsun/security/x509/X509AttributeName;->getPrefix()Ljava/lang/String;
 HSPLsun/security/x509/X509AttributeName;->getSuffix()Ljava/lang/String;
 HSPLsun/security/x509/X509CertImpl;-><init>([B)V
-HPLsun/security/x509/X509CertImpl;->checkValidity(Ljava/util/Date;)V
 HSPLsun/security/x509/X509CertImpl;->get(Ljava/lang/String;)Ljava/lang/Object;
 HSPLsun/security/x509/X509CertImpl;->getAuthorityKeyIdentifierExtension()Lsun/security/x509/AuthorityKeyIdentifierExtension;
 HSPLsun/security/x509/X509CertImpl;->getCertificatePoliciesExtension()Lsun/security/x509/CertificatePoliciesExtension;
 HSPLsun/security/x509/X509CertImpl;->getEncodedInternal()[B
 HSPLsun/security/x509/X509CertImpl;->getEncodedInternal(Ljava/security/cert/Certificate;)[B
-HPLsun/security/x509/X509CertImpl;->getExtendedKeyUsage()Ljava/util/List;
-HPLsun/security/x509/X509CertImpl;->getExtendedKeyUsageExtension()Lsun/security/x509/ExtendedKeyUsageExtension;
 HSPLsun/security/x509/X509CertImpl;->getExtension(Lsun/security/util/ObjectIdentifier;)Lsun/security/x509/Extension;
 HSPLsun/security/x509/X509CertImpl;->getIssuerX500Principal()Ljavax/security/auth/x500/X500Principal;
-HPLsun/security/x509/X509CertImpl;->getKeyUsage()[Z
 HSPLsun/security/x509/X509CertImpl;->getNameConstraintsExtension()Lsun/security/x509/NameConstraintsExtension;
-PLsun/security/x509/X509CertImpl;->getNotAfter()Ljava/util/Date;
-PLsun/security/x509/X509CertImpl;->getNotBefore()Ljava/util/Date;
 HSPLsun/security/x509/X509CertImpl;->getPolicyConstraintsExtension()Lsun/security/x509/PolicyConstraintsExtension;
 HSPLsun/security/x509/X509CertImpl;->getPolicyMappingsExtension()Lsun/security/x509/PolicyMappingsExtension;
 HSPLsun/security/x509/X509CertImpl;->getPublicKey()Ljava/security/PublicKey;
-HSPLsun/security/x509/X509CertImpl;->getSerialNumberObject()Lsun/security/x509/SerialNumber;
 HSPLsun/security/x509/X509CertImpl;->getSigAlgName()Ljava/lang/String;
-PLsun/security/x509/X509CertImpl;->getSubjectAlternativeNameExtension()Lsun/security/x509/SubjectAlternativeNameExtension;
-HSPLsun/security/x509/X509CertImpl;->getSubjectKeyId()Lsun/security/x509/KeyIdentifier;
-HSPLsun/security/x509/X509CertImpl;->getSubjectKeyIdentifierExtension()Lsun/security/x509/SubjectKeyIdentifierExtension;
 HSPLsun/security/x509/X509CertImpl;->getSubjectX500Principal()Ljavax/security/auth/x500/X500Principal;
 HSPLsun/security/x509/X509CertImpl;->isSelfIssued(Ljava/security/cert/X509Certificate;)Z
-PLsun/security/x509/X509CertImpl;->isSelfSigned(Ljava/security/cert/X509Certificate;Ljava/lang/String;)Z
 HSPLsun/security/x509/X509CertImpl;->parse(Lsun/security/util/DerValue;)V
 HSPLsun/security/x509/X509CertImpl;->parse(Lsun/security/util/DerValue;[B)V
 HSPLsun/security/x509/X509CertImpl;->toImpl(Ljava/security/cert/X509Certificate;)Lsun/security/x509/X509CertImpl;
-PLsun/security/x509/X509CertImpl;->verify(Ljava/security/PublicKey;)V
-PLsun/security/x509/X509CertImpl;->verify(Ljava/security/PublicKey;Ljava/lang/String;)V
 HSPLsun/security/x509/X509CertInfo;-><init>(Lsun/security/util/DerValue;)V
 HSPLsun/security/x509/X509CertInfo;-><init>([B)V
 HSPLsun/security/x509/X509CertInfo;->attributeMap(Ljava/lang/String;)I
 HSPLsun/security/x509/X509CertInfo;->get(Ljava/lang/String;)Ljava/lang/Object;
-PLsun/security/x509/X509CertInfo;->getEncodedInfo()[B
 HSPLsun/security/x509/X509CertInfo;->getX500Name(Ljava/lang/String;Z)Ljava/lang/Object;
 HSPLsun/security/x509/X509CertInfo;->parse(Lsun/security/util/DerValue;)V
 HSPLsun/security/x509/X509CertInfo;->verifyCert(Lsun/security/x509/X500Name;Lsun/security/x509/CertificateExtensions;)V
@@ -44985,7 +22418,7 @@
 HSPLsun/util/calendar/BaseCalendar;->isLeapYear(Lsun/util/calendar/CalendarDate;)Z
 HSPLsun/util/calendar/BaseCalendar;->normalizeMonth(Lsun/util/calendar/CalendarDate;)V
 HSPLsun/util/calendar/CalendarDate;-><init>(Ljava/util/TimeZone;)V
-HPLsun/util/calendar/CalendarDate;->clone()Ljava/lang/Object;
+HSPLsun/util/calendar/CalendarDate;->clone()Ljava/lang/Object;
 HSPLsun/util/calendar/CalendarDate;->getDayOfMonth()I
 HSPLsun/util/calendar/CalendarDate;->getDayOfWeek()I
 HSPLsun/util/calendar/CalendarDate;->getHours()I
@@ -45054,20 +22487,16 @@
 HSPLsun/util/locale/Extension;-><init>(CLjava/lang/String;)V
 HSPLsun/util/locale/Extension;->setValue(Ljava/lang/String;)V
 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;->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;->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;->setRegion(Ljava/lang/String;)Lsun/util/locale/InternalLocaleBuilder;
-HSPLsun/util/locale/InternalLocaleBuilder;->setScript(Ljava/lang/String;)Lsun/util/locale/InternalLocaleBuilder;
-HSPLsun/util/locale/InternalLocaleBuilder;->setVariant(Ljava/lang/String;)Lsun/util/locale/InternalLocaleBuilder;
 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;->getLanguage()Ljava/lang/String;
@@ -45077,10 +22506,8 @@
 HSPLsun/util/locale/LanguageTag;->getVariants()Ljava/util/List;
 HSPLsun/util/locale/LanguageTag;->isExtlang(Ljava/lang/String;)Z
 HSPLsun/util/locale/LanguageTag;->isLanguage(Ljava/lang/String;)Z
-HPLsun/util/locale/LanguageTag;->isPrivateusePrefix(Ljava/lang/String;)Z
 HSPLsun/util/locale/LanguageTag;->isRegion(Ljava/lang/String;)Z
 HSPLsun/util/locale/LanguageTag;->isScript(Ljava/lang/String;)Z
-HSPLsun/util/locale/LanguageTag;->isVariant(Ljava/lang/String;)Z
 HSPLsun/util/locale/LanguageTag;->parse(Ljava/lang/String;Lsun/util/locale/ParseStatus;)Lsun/util/locale/LanguageTag;
 HSPLsun/util/locale/LanguageTag;->parseExtensions(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
 HSPLsun/util/locale/LanguageTag;->parseExtlangs(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
@@ -45092,33 +22519,19 @@
 HSPLsun/util/locale/LanguageTag;->parseVariants(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
 HSPLsun/util/locale/LocaleExtensions;-><clinit>()V
 HSPLsun/util/locale/LocaleExtensions;-><init>(Ljava/lang/String;Ljava/lang/Character;Lsun/util/locale/Extension;)V
-HPLsun/util/locale/LocaleMatcher;->getEquivalentForRegionAndVariant(Ljava/lang/String;)Ljava/lang/String;
-HPLsun/util/locale/LocaleMatcher;->getEquivalentsForLanguage(Ljava/lang/String;)[Ljava/lang/String;
-HPLsun/util/locale/LocaleMatcher;->getExtentionKeyIndex(Ljava/lang/String;)I
-HPLsun/util/locale/LocaleMatcher;->lookup(Ljava/util/List;Ljava/util/Collection;)Ljava/util/Locale;
-HPLsun/util/locale/LocaleMatcher;->lookupTag(Ljava/util/List;Ljava/util/Collection;)Ljava/lang/String;
-HPLsun/util/locale/LocaleMatcher;->parse(Ljava/lang/String;)Ljava/util/List;
 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;-><init>()V
-HSPLsun/util/locale/LocaleObjectCache;-><init>(IFI)V
 HSPLsun/util/locale/LocaleObjectCache;->cleanStaleEntries()V
 HSPLsun/util/locale/LocaleObjectCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLsun/util/locale/LocaleObjectCache;->normalizeKey(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLsun/util/locale/LocaleUtils;->caseIgnoreMatch(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLsun/util/locale/LocaleUtils;->isAlpha(C)Z
-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;->isEmpty(Ljava/lang/String;)Z
 HSPLsun/util/locale/LocaleUtils;->isEmpty(Ljava/util/List;)Z
 HSPLsun/util/locale/LocaleUtils;->isEmpty(Ljava/util/Map;)Z
 HSPLsun/util/locale/LocaleUtils;->isEmpty(Ljava/util/Set;)Z
-PLsun/util/locale/LocaleUtils;->isLower(C)Z
 HSPLsun/util/locale/LocaleUtils;->isNumeric(C)Z
 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;->toTitleString(Ljava/lang/String;)Ljava/lang/String;
 HSPLsun/util/locale/LocaleUtils;->toUpperString(Ljava/lang/String;)Ljava/lang/String;
@@ -45128,7 +22541,6 @@
 HSPLsun/util/locale/StringTokenIterator;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLsun/util/locale/StringTokenIterator;->current()Ljava/lang/String;
 HSPLsun/util/locale/StringTokenIterator;->currentEnd()I
-HPLsun/util/locale/StringTokenIterator;->currentStart()I
 HSPLsun/util/locale/StringTokenIterator;->hasNext()Z
 HSPLsun/util/locale/StringTokenIterator;->isDone()Z
 HSPLsun/util/locale/StringTokenIterator;->next()Ljava/lang/String;
@@ -45136,21 +22548,6 @@
 HSPLsun/util/locale/StringTokenIterator;->setStart(I)Lsun/util/locale/StringTokenIterator;
 HSPLsun/util/locale/UnicodeLocaleExtension;-><clinit>()V
 HSPLsun/util/locale/UnicodeLocaleExtension;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLsun/util/logging/LoggingSupport$2;-><init>()V
-HSPLsun/util/logging/LoggingSupport$2;->run()Ljava/lang/Object;
-HSPLsun/util/logging/LoggingSupport$2;->run()Ljava/lang/String;
-HSPLsun/util/logging/LoggingSupport;->ensureAvailable()V
-HSPLsun/util/logging/LoggingSupport;->getLogger(Ljava/lang/String;)Ljava/lang/Object;
-HSPLsun/util/logging/LoggingSupport;->getSimpleFormat()Ljava/lang/String;
-HSPLsun/util/logging/LoggingSupport;->getSimpleFormat(Z)Ljava/lang/String;
-HSPLsun/util/logging/LoggingSupport;->parseLevel(Ljava/lang/String;)Ljava/lang/Object;
-HSPLsun/util/logging/PlatformLogger$JavaLoggerProxy;-><clinit>()V
-HSPLsun/util/logging/PlatformLogger$JavaLoggerProxy;-><init>(Ljava/lang/String;)V
-HSPLsun/util/logging/PlatformLogger$JavaLoggerProxy;-><init>(Ljava/lang/String;Lsun/util/logging/PlatformLogger$Level;)V
-HSPLsun/util/logging/PlatformLogger$Level;->values()[Lsun/util/logging/PlatformLogger$Level;
-HSPLsun/util/logging/PlatformLogger$LoggerProxy;-><init>(Ljava/lang/String;)V
-HSPLsun/util/logging/PlatformLogger;-><init>(Ljava/lang/String;)V
-HSPLsun/util/logging/PlatformLogger;->getLogger(Ljava/lang/String;)Lsun/util/logging/PlatformLogger;
 Landroid/R$styleable;
 Landroid/accessibilityservice/AccessibilityServiceInfo$1;
 Landroid/accessibilityservice/AccessibilityServiceInfo;
@@ -45188,8 +22585,6 @@
 Landroid/accounts/IAccountAuthenticator$Stub$Proxy;
 Landroid/accounts/IAccountAuthenticator$Stub;
 Landroid/accounts/IAccountAuthenticator;
-Landroid/accounts/IAccountAuthenticatorResponse$Stub;
-Landroid/accounts/IAccountAuthenticatorResponse;
 Landroid/accounts/IAccountManager$Stub$Proxy;
 Landroid/accounts/IAccountManager$Stub;
 Landroid/accounts/IAccountManager;
@@ -45268,9 +22663,6 @@
 Landroid/animation/TypeEvaluator;
 Landroid/animation/ValueAnimator$AnimatorUpdateListener;
 Landroid/animation/ValueAnimator;
-Landroid/annotation/IntRange;
-Landroid/annotation/NonNull;
-Landroid/annotation/SystemApi;
 Landroid/apex/ApexInfo$1;
 Landroid/apex/ApexInfo;
 Landroid/apex/IApexService$Stub$Proxy;
@@ -45287,9 +22679,6 @@
 Landroid/app/-$$Lambda$AppOpsManager$HistoricalOp$DkVcBvqB32SMHlxw0sWQPh3GL1A;
 Landroid/app/-$$Lambda$AppOpsManager$HistoricalOp$HUOLFYs8TiaQIOXcrq6JzjxA6gs;
 Landroid/app/-$$Lambda$AppOpsManager$HistoricalOp$Vs6pDL0wjOBTquwNnreWVbPQrn4;
-Landroid/app/-$$Lambda$AppOpsManager$OpEntry$YTJl86rOgjsrtxPtz5iTGXvrzc4;
-Landroid/app/-$$Lambda$AppOpsManager$OpEntry$kdehJT0Vyrquji7c4qSeRkpnvBU;
-Landroid/app/-$$Lambda$AppOpsManager$OpEntry$uXaZ6E4Gv-J5C3nhIOFXmg3dYxc;
 Landroid/app/-$$Lambda$Dialog$zXRzrq3I7H1_zmZ8d_W7t2CQN0I;
 Landroid/app/-$$Lambda$FragmentTransition$jurn0WXuKw3bRQ_2d5zCWdeZWuI;
 Landroid/app/-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA;
@@ -45307,14 +22696,12 @@
 Landroid/app/Activity$ManagedCursor;
 Landroid/app/Activity$ManagedDialog;
 Landroid/app/Activity$NonConfigurationInstances;
-Landroid/app/Activity$RequestFinishCallback;
 Landroid/app/Activity;
 Landroid/app/ActivityManager$1;
 Landroid/app/ActivityManager$AppTask;
 Landroid/app/ActivityManager$MemoryInfo$1;
 Landroid/app/ActivityManager$MemoryInfo;
 Landroid/app/ActivityManager$OnUidImportanceListener;
-Landroid/app/ActivityManager$ProcessErrorStateInfo$1;
 Landroid/app/ActivityManager$RecentTaskInfo$1;
 Landroid/app/ActivityManager$RecentTaskInfo;
 Landroid/app/ActivityManager$RunningAppProcessInfo$1;
@@ -45386,15 +22773,12 @@
 Landroid/app/AppOpsManager$HistoricalPackageOps;
 Landroid/app/AppOpsManager$HistoricalUidOps$1;
 Landroid/app/AppOpsManager$HistoricalUidOps;
-Landroid/app/AppOpsManager$OnOpActiveChangedListener;
 Landroid/app/AppOpsManager$OnOpChangedInternalListener;
 Landroid/app/AppOpsManager$OnOpChangedListener;
 Landroid/app/AppOpsManager$OpEntry$1;
 Landroid/app/AppOpsManager$OpEntry;
-Landroid/app/AppOpsManager$OpFeatureEntry;
 Landroid/app/AppOpsManager$PackageOps$1;
 Landroid/app/AppOpsManager$PackageOps;
-Landroid/app/AppOpsManager$PausedNotedAppOpsCollection;
 Landroid/app/AppOpsManager;
 Landroid/app/AppOpsManagerInternal;
 Landroid/app/Application$ActivityLifecycleCallbacks;
@@ -45430,9 +22814,9 @@
 Landroid/app/DirectAction;
 Landroid/app/DownloadManager$CursorTranslator;
 Landroid/app/DownloadManager$Query;
+Landroid/app/DownloadManager$Request;
 Landroid/app/DownloadManager;
 Landroid/app/EnterTransitionCoordinator;
-Landroid/app/EventLogTags;
 Landroid/app/ExitTransitionCoordinator;
 Landroid/app/Fragment$1;
 Landroid/app/Fragment$AnimationInfo;
@@ -45544,7 +22928,6 @@
 Landroid/app/IWallpaperManagerCallback;
 Landroid/app/Instrumentation$ActivityGoing;
 Landroid/app/Instrumentation$ActivityMonitor;
-Landroid/app/Instrumentation$ActivityResult;
 Landroid/app/Instrumentation$ActivityWaiter;
 Landroid/app/Instrumentation;
 Landroid/app/IntentReceiverLeaked;
@@ -45581,27 +22964,22 @@
 Landroid/app/Notification$BuilderRemoteViews;
 Landroid/app/Notification$DecoratedCustomViewStyle;
 Landroid/app/Notification$DecoratedMediaCustomViewStyle;
-Landroid/app/Notification$Extender;
 Landroid/app/Notification$InboxStyle;
 Landroid/app/Notification$MediaStyle;
 Landroid/app/Notification$MessagingStyle$Message;
 Landroid/app/Notification$MessagingStyle;
 Landroid/app/Notification$StandardTemplateParams;
 Landroid/app/Notification$Style;
-Landroid/app/Notification$TemplateBindResult;
-Landroid/app/Notification$TvExtender;
 Landroid/app/Notification;
 Landroid/app/NotificationChannel$1;
 Landroid/app/NotificationChannel;
 Landroid/app/NotificationChannelGroup$1;
 Landroid/app/NotificationChannelGroup;
-Landroid/app/NotificationHistory;
 Landroid/app/NotificationManager$Policy$1;
 Landroid/app/NotificationManager$Policy;
 Landroid/app/NotificationManager;
 Landroid/app/OnActivityPausedListener;
 Landroid/app/PackageInstallObserver$1;
-Landroid/app/PackageInstallObserver;
 Landroid/app/PendingIntent$1;
 Landroid/app/PendingIntent$2;
 Landroid/app/PendingIntent$CanceledException;
@@ -45613,9 +22991,7 @@
 Landroid/app/Person$Builder;
 Landroid/app/Person;
 Landroid/app/PictureInPictureParams$1;
-Landroid/app/PictureInPictureParams$Builder;
 Landroid/app/PictureInPictureParams;
-Landroid/app/ProcessMemoryState$1;
 Landroid/app/ProfilerInfo$1;
 Landroid/app/ProfilerInfo;
 Landroid/app/QueuedWork$QueuedWorkHandler;
@@ -45629,7 +23005,6 @@
 Landroid/app/ResourcesManager$1;
 Landroid/app/ResourcesManager$ActivityResources;
 Landroid/app/ResourcesManager$ApkKey;
-Landroid/app/ResourcesManager$ResourcesWithLoaders;
 Landroid/app/ResourcesManager;
 Landroid/app/ResultInfo$1;
 Landroid/app/ResultInfo;
@@ -45650,9 +23025,6 @@
 Landroid/app/SharedPreferencesImpl$EditorImpl;
 Landroid/app/SharedPreferencesImpl$MemoryCommitResult;
 Landroid/app/SharedPreferencesImpl;
-Landroid/app/StatsManager$StatsUnavailableException;
-Landroid/app/StatsManager$StatsdDeathRecipient;
-Landroid/app/StatsManager;
 Landroid/app/StatusBarManager;
 Landroid/app/SynchronousUserSwitchObserver;
 Landroid/app/SystemServiceRegistry$100;
@@ -45669,6 +23041,9 @@
 Landroid/app/SystemServiceRegistry$110;
 Landroid/app/SystemServiceRegistry$111;
 Landroid/app/SystemServiceRegistry$112;
+Landroid/app/SystemServiceRegistry$113;
+Landroid/app/SystemServiceRegistry$114;
+Landroid/app/SystemServiceRegistry$115;
 Landroid/app/SystemServiceRegistry$11;
 Landroid/app/SystemServiceRegistry$12;
 Landroid/app/SystemServiceRegistry$13;
@@ -45774,6 +23149,7 @@
 Landroid/app/SystemServiceRegistry$StaticApplicationContextServiceFetcher;
 Landroid/app/SystemServiceRegistry$StaticServiceFetcher;
 Landroid/app/SystemServiceRegistry$StaticServiceProducerWithBinder;
+Landroid/app/SystemServiceRegistry$StaticServiceProducerWithoutBinder;
 Landroid/app/SystemServiceRegistry;
 Landroid/app/TaskInfo;
 Landroid/app/TaskStackListener;
@@ -45786,7 +23162,6 @@
 Landroid/app/Vr2dDisplayProperties$1;
 Landroid/app/Vr2dDisplayProperties;
 Landroid/app/VrManager;
-Landroid/app/WaitResult;
 Landroid/app/WallpaperColors$1;
 Landroid/app/WallpaperColors;
 Landroid/app/WallpaperInfo$1;
@@ -45813,7 +23188,6 @@
 Landroid/app/admin/DevicePolicyManagerInternal$OnCrossProfileWidgetProvidersChangeListener;
 Landroid/app/admin/DevicePolicyManagerInternal;
 Landroid/app/admin/IDeviceAdminService$Stub$Proxy;
-Landroid/app/admin/IDeviceAdminService$Stub;
 Landroid/app/admin/IDeviceAdminService;
 Landroid/app/admin/IDevicePolicyManager$Stub$Proxy;
 Landroid/app/admin/IDevicePolicyManager$Stub;
@@ -45830,13 +23204,9 @@
 Landroid/app/admin/SystemUpdateInfo;
 Landroid/app/admin/SystemUpdatePolicy$1;
 Landroid/app/admin/SystemUpdatePolicy;
-Landroid/app/appsearch/-$$Lambda$AppSearchManagerFrameworkInitializer$2C99JDf4IVN8JVCb0sQQPhgXbjI;
-Landroid/app/appsearch/AppSearchManager;
-Landroid/app/appsearch/AppSearchManagerFrameworkInitializer;
 Landroid/app/assist/AssistContent$1;
 Landroid/app/assist/AssistContent;
 Landroid/app/assist/AssistStructure$1;
-Landroid/app/assist/AssistStructure$AutofillOverlay;
 Landroid/app/assist/AssistStructure$ParcelTransferReader;
 Landroid/app/assist/AssistStructure$ParcelTransferWriter;
 Landroid/app/assist/AssistStructure$SendChannel;
@@ -45878,11 +23248,9 @@
 Landroid/app/backup/IFullBackupRestoreObserver$Stub$Proxy;
 Landroid/app/backup/IFullBackupRestoreObserver$Stub;
 Landroid/app/backup/IFullBackupRestoreObserver;
-Landroid/app/backup/IRestoreSession;
 Landroid/app/backup/ISelectBackupTransportCallback$Stub$Proxy;
 Landroid/app/backup/ISelectBackupTransportCallback$Stub;
 Landroid/app/backup/ISelectBackupTransportCallback;
-Landroid/app/backup/RestoreDescription;
 Landroid/app/backup/SharedPreferencesBackupHelper;
 Landroid/app/blob/-$$Lambda$BlobStoreManagerFrameworkInitializer$WjSRSHMmxWPF4Fq-7TpX23MBh2U;
 Landroid/app/blob/BlobStoreManager;
@@ -45937,12 +23305,10 @@
 Landroid/app/prediction/IPredictionManager$Stub;
 Landroid/app/prediction/IPredictionManager;
 Landroid/app/role/-$$Lambda$RoleControllerManager$Jsb4ev7pHUqel8_lglNSRLiUzpg;
-Landroid/app/role/-$$Lambda$RoleControllerManager$hbh627Rh8mtJykW3vb1FWR34mIQ;
 Landroid/app/role/-$$Lambda$o94o2jK_ei-IVw-3oY_QJ49zpAA;
 Landroid/app/role/IOnRoleHoldersChangedListener$Stub$Proxy;
 Landroid/app/role/IOnRoleHoldersChangedListener$Stub;
 Landroid/app/role/IOnRoleHoldersChangedListener;
-Landroid/app/role/IRoleController$Stub$Proxy;
 Landroid/app/role/IRoleController$Stub;
 Landroid/app/role/IRoleController;
 Landroid/app/role/IRoleManager$Stub$Proxy;
@@ -45985,8 +23351,6 @@
 Landroid/app/servertransaction/TopResumedActivityChangeItem;
 Landroid/app/servertransaction/TransactionExecutor;
 Landroid/app/servertransaction/TransactionExecutorHelper;
-Landroid/app/servertransaction/WindowVisibilityItem$1;
-Landroid/app/servertransaction/WindowVisibilityItem;
 Landroid/app/slice/-$$Lambda$SliceProvider$bIgM5f4PsMvz_YYWEeFTjvTqevw;
 Landroid/app/slice/ISliceManager$Stub$Proxy;
 Landroid/app/slice/ISliceManager$Stub;
@@ -46003,12 +23367,8 @@
 Landroid/app/timedetector/ITimeDetectorService$Stub$Proxy;
 Landroid/app/timedetector/ITimeDetectorService$Stub;
 Landroid/app/timedetector/ITimeDetectorService;
-Landroid/app/timedetector/ManualTimeSuggestion;
-Landroid/app/timedetector/PhoneTimeSuggestion;
 Landroid/app/timedetector/TimeDetector;
 Landroid/app/timezone/RulesManager;
-Landroid/app/timezonedetector/ITimeZoneDetectorService$Stub;
-Landroid/app/timezonedetector/ITimeZoneDetectorService;
 Landroid/app/timezonedetector/TimeZoneDetector;
 Landroid/app/trust/IStrongAuthTracker$Stub$Proxy;
 Landroid/app/trust/IStrongAuthTracker$Stub;
@@ -46034,8 +23394,6 @@
 Landroid/app/usage/ConfigurationStats$1;
 Landroid/app/usage/ConfigurationStats;
 Landroid/app/usage/EventList;
-Landroid/app/usage/ExternalStorageStats$1;
-Landroid/app/usage/ExternalStorageStats;
 Landroid/app/usage/ICacheQuotaService$Stub$Proxy;
 Landroid/app/usage/ICacheQuotaService$Stub;
 Landroid/app/usage/ICacheQuotaService;
@@ -46111,7 +23469,6 @@
 Landroid/bluetooth/BluetoothPan;
 Landroid/bluetooth/BluetoothPbap$1;
 Landroid/bluetooth/BluetoothPbap$2;
-Landroid/bluetooth/BluetoothPbap$ServiceListener;
 Landroid/bluetooth/BluetoothPbap;
 Landroid/bluetooth/BluetoothPbapClient;
 Landroid/bluetooth/BluetoothProfile$ServiceListener;
@@ -46151,7 +23508,6 @@
 Landroid/bluetooth/IBluetoothHeadsetPhone$Stub$Proxy;
 Landroid/bluetooth/IBluetoothHeadsetPhone$Stub;
 Landroid/bluetooth/IBluetoothHeadsetPhone;
-Landroid/bluetooth/IBluetoothHearingAid$Stub$Proxy;
 Landroid/bluetooth/IBluetoothHearingAid$Stub;
 Landroid/bluetooth/IBluetoothHearingAid;
 Landroid/bluetooth/IBluetoothHidDevice$Stub$Proxy;
@@ -46272,16 +23628,13 @@
 Landroid/content/ContentProviderClient;
 Landroid/content/ContentProviderNative;
 Landroid/content/ContentProviderOperation$1;
-Landroid/content/ContentProviderOperation$BackReference;
 Landroid/content/ContentProviderOperation$Builder;
 Landroid/content/ContentProviderOperation;
 Landroid/content/ContentProviderProxy;
 Landroid/content/ContentProviderResult$1;
 Landroid/content/ContentProviderResult;
 Landroid/content/ContentResolver$1;
-Landroid/content/ContentResolver$2;
 Landroid/content/ContentResolver$CursorWrapperInner;
-Landroid/content/ContentResolver$OpenResourceIdResult;
 Landroid/content/ContentResolver$ParcelFileDescriptorInner;
 Landroid/content/ContentResolver;
 Landroid/content/ContentUris;
@@ -46344,10 +23697,8 @@
 Landroid/content/Loader;
 Landroid/content/LocusId$1;
 Landroid/content/LocusId;
-Landroid/content/LoggingContentInterface;
 Landroid/content/OperationApplicationException;
 Landroid/content/PeriodicSync$1;
-Landroid/content/PeriodicSync;
 Landroid/content/ReceiverCallNotAllowedException;
 Landroid/content/RestrictionsManager;
 Landroid/content/SearchRecentSuggestionsProvider$DatabaseHelper;
@@ -46361,7 +23712,6 @@
 Landroid/content/SyncAdaptersCache$MySerializer;
 Landroid/content/SyncAdaptersCache;
 Landroid/content/SyncContext;
-Landroid/content/SyncInfo$1;
 Landroid/content/SyncRequest$1;
 Landroid/content/SyncRequest$Builder;
 Landroid/content/SyncRequest;
@@ -46378,6 +23728,7 @@
 Landroid/content/UndoOperation;
 Landroid/content/UndoOwner;
 Landroid/content/UriMatcher;
+Landroid/content/integrity/AppIntegrityManager;
 Landroid/content/om/IOverlayManager$Stub$Proxy;
 Landroid/content/om/IOverlayManager$Stub;
 Landroid/content/om/IOverlayManager;
@@ -46390,7 +23741,6 @@
 Landroid/content/pm/-$$Lambda$PackageParser$M-9fHqS_eEp1oYkuKJhRHOGUxf8;
 Landroid/content/pm/-$$Lambda$T1UQAuePWRRmVQ1KzTyMAktZUPM;
 Landroid/content/pm/-$$Lambda$ciir_QAmv6RwJro4I58t77dPnxU;
-Landroid/content/pm/-$$Lambda$hUJwdX9IqTlLwBds2BUGqVf-FM8;
 Landroid/content/pm/-$$Lambda$n3uXeb1v-YRmq_BWTfosEqUUr9g;
 Landroid/content/pm/-$$Lambda$zO9HBUVgPeroyDQPLJE-MNMvSqc;
 Landroid/content/pm/ActivityInfo$1;
@@ -46398,11 +23748,8 @@
 Landroid/content/pm/ActivityInfo;
 Landroid/content/pm/ApplicationInfo$1;
 Landroid/content/pm/ApplicationInfo;
-Landroid/content/pm/AuxiliaryResolveInfo$AuxiliaryFilter;
 Landroid/content/pm/BaseParceledListSlice$1;
 Landroid/content/pm/BaseParceledListSlice;
-Landroid/content/pm/ChangedPackages$1;
-Landroid/content/pm/ChangedPackages;
 Landroid/content/pm/ComponentInfo;
 Landroid/content/pm/ConfigurationInfo$1;
 Landroid/content/pm/ConfigurationInfo;
@@ -46444,7 +23791,6 @@
 Landroid/content/pm/IPackageInstallerCallback$Stub;
 Landroid/content/pm/IPackageInstallerCallback;
 Landroid/content/pm/IPackageInstallerSession$Stub$Proxy;
-Landroid/content/pm/IPackageInstallerSession$Stub;
 Landroid/content/pm/IPackageInstallerSession;
 Landroid/content/pm/IPackageManager$Stub$Proxy;
 Landroid/content/pm/IPackageManager$Stub;
@@ -46460,12 +23806,9 @@
 Landroid/content/pm/IShortcutService$Stub$Proxy;
 Landroid/content/pm/IShortcutService$Stub;
 Landroid/content/pm/IShortcutService;
-Landroid/content/pm/InstallSourceInfo;
 Landroid/content/pm/InstantAppIntentFilter$1;
 Landroid/content/pm/InstantAppIntentFilter;
-Landroid/content/pm/InstantAppRequest;
 Landroid/content/pm/InstantAppResolveInfo$1;
-Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest$1;
 Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest;
 Landroid/content/pm/InstantAppResolveInfo;
 Landroid/content/pm/InstrumentationInfo$1;
@@ -46476,16 +23819,12 @@
 Landroid/content/pm/KeySet;
 Landroid/content/pm/LauncherActivityInfo;
 Landroid/content/pm/LauncherApps$1;
-Landroid/content/pm/LauncherApps$AppUsageLimit;
 Landroid/content/pm/LauncherApps$CallbackMessageHandler;
-Landroid/content/pm/LauncherApps$ShortcutQuery;
 Landroid/content/pm/LauncherApps;
 Landroid/content/pm/ModuleInfo$1;
 Landroid/content/pm/ModuleInfo;
 Landroid/content/pm/PackageInfo$1;
 Landroid/content/pm/PackageInfo;
-Landroid/content/pm/PackageInfoLite$1;
-Landroid/content/pm/PackageInfoLite;
 Landroid/content/pm/PackageInstaller$Session;
 Landroid/content/pm/PackageInstaller$SessionCallback;
 Landroid/content/pm/PackageInstaller$SessionCallbackDelegate;
@@ -46574,11 +23913,9 @@
 Landroid/content/pm/StringParceledListSlice$1;
 Landroid/content/pm/StringParceledListSlice;
 Landroid/content/pm/SuspendDialogInfo$1;
-Landroid/content/pm/SuspendDialogInfo$Builder;
 Landroid/content/pm/SuspendDialogInfo;
 Landroid/content/pm/UserInfo$1;
 Landroid/content/pm/UserInfo;
-Landroid/content/pm/VerifierDeviceIdentity;
 Landroid/content/pm/VerifierInfo$1;
 Landroid/content/pm/VerifierInfo;
 Landroid/content/pm/VersionedPackage$1;
@@ -46592,16 +23929,6 @@
 Landroid/content/pm/dex/ISnapshotRuntimeProfileCallback$Stub$Proxy;
 Landroid/content/pm/dex/ISnapshotRuntimeProfileCallback$Stub;
 Landroid/content/pm/dex/ISnapshotRuntimeProfileCallback;
-Landroid/content/pm/dex/PackageOptimizationInfo;
-Landroid/content/pm/parsing/library/-$$Lambda$WrPVuoVJehE45tfhLfe_8Tcc-Nw;
-Landroid/content/pm/parsing/library/AndroidHidlUpdater;
-Landroid/content/pm/parsing/library/OrgApacheHttpLegacyUpdater;
-Landroid/content/pm/parsing/library/PackageBackwardCompatibility$AndroidTestRunnerSplitUpdater;
-Landroid/content/pm/parsing/library/PackageBackwardCompatibility$RemoveUnnecessaryAndroidTestBaseLibrary;
-Landroid/content/pm/parsing/library/PackageBackwardCompatibility;
-Landroid/content/pm/parsing/library/PackageSharedLibraryUpdater;
-Landroid/content/pm/permission/SplitPermissionInfoParcelable$1;
-Landroid/content/pm/permission/SplitPermissionInfoParcelable;
 Landroid/content/pm/split/DefaultSplitAssetLoader;
 Landroid/content/pm/split/SplitAssetDependencyLoader;
 Landroid/content/pm/split/SplitAssetLoader;
@@ -46658,8 +23985,6 @@
 Landroid/content/res/XmlBlock$Parser;
 Landroid/content/res/XmlBlock;
 Landroid/content/res/XmlResourceParser;
-Landroid/content/res/loader/ResourceLoader;
-Landroid/content/res/loader/ResourceLoaderManager;
 Landroid/content/rollback/IRollbackManager$Stub$Proxy;
 Landroid/content/rollback/IRollbackManager$Stub;
 Landroid/content/rollback/IRollbackManager;
@@ -46704,9 +24029,7 @@
 Landroid/database/StaleDataException;
 Landroid/database/sqlite/-$$Lambda$RBWjWVyGrOTsQrLCYzJ_G8Uk25Q;
 Landroid/database/sqlite/DatabaseObjectNotClosedException;
-Landroid/database/sqlite/SQLiteAccessPermException;
 Landroid/database/sqlite/SQLiteBindOrColumnIndexOutOfRangeException;
-Landroid/database/sqlite/SQLiteBlobTooBigException;
 Landroid/database/sqlite/SQLiteCantOpenDatabaseException;
 Landroid/database/sqlite/SQLiteClosable;
 Landroid/database/sqlite/SQLiteCompatibilityWalFlags;
@@ -46737,13 +24060,11 @@
 Landroid/database/sqlite/SQLiteDebug$PagerStats;
 Landroid/database/sqlite/SQLiteDebug;
 Landroid/database/sqlite/SQLiteDirectCursorDriver;
-Landroid/database/sqlite/SQLiteDiskIOException;
 Landroid/database/sqlite/SQLiteDoneException;
 Landroid/database/sqlite/SQLiteException;
 Landroid/database/sqlite/SQLiteFullException;
 Landroid/database/sqlite/SQLiteGlobal;
 Landroid/database/sqlite/SQLiteOpenHelper;
-Landroid/database/sqlite/SQLiteOutOfMemoryException;
 Landroid/database/sqlite/SQLiteProgram;
 Landroid/database/sqlite/SQLiteQuery;
 Landroid/database/sqlite/SQLiteQueryBuilder;
@@ -46751,7 +24072,6 @@
 Landroid/database/sqlite/SQLiteSession;
 Landroid/database/sqlite/SQLiteStatement;
 Landroid/database/sqlite/SQLiteStatementInfo;
-Landroid/database/sqlite/SQLiteTableLockedException;
 Landroid/database/sqlite/SQLiteTransactionListener;
 Landroid/database/sqlite/SqliteWrapper;
 Landroid/ddm/DdmHandleAppName$Names;
@@ -46807,7 +24127,6 @@
 Landroid/graphics/ColorMatrix;
 Landroid/graphics/ColorMatrixColorFilter;
 Landroid/graphics/ColorSpace$Adaptation;
-Landroid/graphics/ColorSpace$Connector;
 Landroid/graphics/ColorSpace$Lab;
 Landroid/graphics/ColorSpace$Model;
 Landroid/graphics/ColorSpace$Named;
@@ -46836,6 +24155,8 @@
 Landroid/graphics/HardwareRenderer$ProcessInitializer$1;
 Landroid/graphics/HardwareRenderer$ProcessInitializer;
 Landroid/graphics/HardwareRenderer;
+Landroid/graphics/HardwareRendererObserver$OnFrameMetricsAvailableListener;
+Landroid/graphics/HardwareRendererObserver;
 Landroid/graphics/ImageDecoder$AssetInputStreamSource;
 Landroid/graphics/ImageDecoder$DecodeException;
 Landroid/graphics/ImageDecoder$ImageInfo;
@@ -46870,7 +24191,6 @@
 Landroid/graphics/PaintFlagsDrawFilter;
 Landroid/graphics/Path$Direction;
 Landroid/graphics/Path$FillType;
-Landroid/graphics/Path$Op;
 Landroid/graphics/Path;
 Landroid/graphics/PathDashPathEffect;
 Landroid/graphics/PathEffect;
@@ -46997,7 +24317,6 @@
 Landroid/graphics/drawable/RotateDrawable;
 Landroid/graphics/drawable/ScaleDrawable$ScaleState;
 Landroid/graphics/drawable/ScaleDrawable;
-Landroid/graphics/drawable/ShapeDrawable$ShaderFactory;
 Landroid/graphics/drawable/ShapeDrawable$ShapeState;
 Landroid/graphics/drawable/ShapeDrawable;
 Landroid/graphics/drawable/StateListDrawable$StateListState;
@@ -47033,7 +24352,6 @@
 Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;
 Landroid/graphics/drawable/VectorDrawable;
 Landroid/graphics/drawable/shapes/OvalShape;
-Landroid/graphics/drawable/shapes/PathShape;
 Landroid/graphics/drawable/shapes/RectShape;
 Landroid/graphics/drawable/shapes/RoundRectShape;
 Landroid/graphics/drawable/shapes/Shape;
@@ -47056,7 +24374,6 @@
 Landroid/graphics/text/LineBreaker;
 Landroid/graphics/text/MeasuredText$Builder;
 Landroid/graphics/text/MeasuredText;
-Landroid/gsi/GsiProgress;
 Landroid/gsi/IGsiService$Stub$Proxy;
 Landroid/gsi/IGsiService$Stub;
 Landroid/gsi/IGsiService;
@@ -47109,9 +24426,6 @@
 Landroid/hardware/biometrics/BiometricManager;
 Landroid/hardware/biometrics/BiometricSourceType$1;
 Landroid/hardware/biometrics/BiometricSourceType;
-Landroid/hardware/biometrics/IAuthService;
-Landroid/hardware/biometrics/IBiometricAuthenticator$Stub;
-Landroid/hardware/biometrics/IBiometricAuthenticator;
 Landroid/hardware/biometrics/IBiometricEnabledOnKeyguardCallback$Stub$Proxy;
 Landroid/hardware/biometrics/IBiometricEnabledOnKeyguardCallback$Stub;
 Landroid/hardware/biometrics/IBiometricEnabledOnKeyguardCallback;
@@ -47133,6 +24447,7 @@
 Landroid/hardware/camera2/CameraCharacteristics$3;
 Landroid/hardware/camera2/CameraCharacteristics$4;
 Landroid/hardware/camera2/CameraCharacteristics$5;
+Landroid/hardware/camera2/CameraCharacteristics$6;
 Landroid/hardware/camera2/CameraCharacteristics$Key;
 Landroid/hardware/camera2/CameraCharacteristics;
 Landroid/hardware/camera2/CameraDevice;
@@ -47193,7 +24508,6 @@
 Landroid/hardware/camera2/marshal/impl/MarshalQueryableBlackLevelPattern;
 Landroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean$MarshalerBoolean;
 Landroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean;
-Landroid/hardware/camera2/marshal/impl/MarshalQueryableCapabilityAndMaxSize;
 Landroid/hardware/camera2/marshal/impl/MarshalQueryableColorSpaceTransform;
 Landroid/hardware/camera2/marshal/impl/MarshalQueryableEnum;
 Landroid/hardware/camera2/marshal/impl/MarshalQueryableHighSpeedVideoConfiguration;
@@ -47214,7 +24528,7 @@
 Landroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfigurationDuration;
 Landroid/hardware/camera2/marshal/impl/MarshalQueryableString;
 Landroid/hardware/camera2/params/BlackLevelPattern;
-Landroid/hardware/camera2/params/CapabilityAndMaxSize;
+Landroid/hardware/camera2/params/Capability;
 Landroid/hardware/camera2/params/ColorSpaceTransform;
 Landroid/hardware/camera2/params/Face;
 Landroid/hardware/camera2/params/HighSpeedVideoConfiguration;
@@ -47244,14 +24558,12 @@
 Landroid/hardware/contexthub/V1_0/IContexthubCallback$Stub;
 Landroid/hardware/contexthub/V1_0/IContexthubCallback;
 Landroid/hardware/contexthub/V1_0/MemRange;
-Landroid/hardware/contexthub/V1_0/NanoAppBinary;
 Landroid/hardware/contexthub/V1_0/PhysicalSensor;
 Landroid/hardware/display/-$$Lambda$NightDisplayListener$sOK1HmSbMnFLzc4SdDD1WpVWJiI;
 Landroid/hardware/display/AmbientBrightnessDayStats$1;
 Landroid/hardware/display/AmbientBrightnessDayStats;
 Landroid/hardware/display/AmbientDisplayConfiguration;
 Landroid/hardware/display/BrightnessChangeEvent$1;
-Landroid/hardware/display/BrightnessChangeEvent$Builder;
 Landroid/hardware/display/BrightnessChangeEvent;
 Landroid/hardware/display/BrightnessConfiguration$1;
 Landroid/hardware/display/BrightnessConfiguration$Builder;
@@ -47299,8 +24611,6 @@
 Landroid/hardware/display/WifiDisplayStatus$1;
 Landroid/hardware/display/WifiDisplayStatus;
 Landroid/hardware/face/FaceManager;
-Landroid/hardware/face/IFaceService$Stub;
-Landroid/hardware/face/IFaceService;
 Landroid/hardware/fingerprint/Fingerprint$1;
 Landroid/hardware/fingerprint/Fingerprint;
 Landroid/hardware/fingerprint/FingerprintManager$1;
@@ -47346,7 +24656,6 @@
 Landroid/hardware/location/ContextHubManager$2;
 Landroid/hardware/location/ContextHubManager$3;
 Landroid/hardware/location/ContextHubManager$4;
-Landroid/hardware/location/ContextHubManager$Callback;
 Landroid/hardware/location/ContextHubManager;
 Landroid/hardware/location/ContextHubMessage$1;
 Landroid/hardware/location/ContextHubMessage;
@@ -47549,6 +24858,28 @@
 Landroid/hardware/radio/V1_4/PhysicalChannelConfig;
 Landroid/hardware/radio/V1_4/SetupDataCallResult;
 Landroid/hardware/radio/V1_4/SignalStrength;
+Landroid/hardware/radio/config/V1_0/IRadioConfig;
+Landroid/hardware/radio/config/V1_0/IRadioConfigIndication;
+Landroid/hardware/radio/config/V1_0/IRadioConfigResponse;
+Landroid/hardware/radio/config/V1_0/SimSlotStatus;
+Landroid/hardware/radio/config/V1_1/IRadioConfig$Proxy;
+Landroid/hardware/radio/config/V1_1/IRadioConfig;
+Landroid/hardware/radio/config/V1_1/IRadioConfigIndication;
+Landroid/hardware/radio/config/V1_1/IRadioConfigResponse;
+Landroid/hardware/radio/config/V1_1/ModemInfo;
+Landroid/hardware/radio/config/V1_1/ModemsConfig;
+Landroid/hardware/radio/config/V1_1/PhoneCapability;
+Landroid/hardware/radio/config/V1_2/IRadioConfigIndication$Stub;
+Landroid/hardware/radio/config/V1_2/IRadioConfigIndication;
+Landroid/hardware/radio/config/V1_2/IRadioConfigResponse$Stub;
+Landroid/hardware/radio/config/V1_2/IRadioConfigResponse;
+Landroid/hardware/radio/config/V1_2/SimSlotStatus;
+Landroid/hardware/radio/deprecated/V1_0/IOemHook$Proxy;
+Landroid/hardware/radio/deprecated/V1_0/IOemHook;
+Landroid/hardware/radio/deprecated/V1_0/IOemHookIndication$Stub;
+Landroid/hardware/radio/deprecated/V1_0/IOemHookIndication;
+Landroid/hardware/radio/deprecated/V1_0/IOemHookResponse$Stub;
+Landroid/hardware/radio/deprecated/V1_0/IOemHookResponse;
 Landroid/hardware/sidekick/SidekickInternal;
 Landroid/hardware/soundtrigger/IRecognitionStatusCallback$Stub$Proxy;
 Landroid/hardware/soundtrigger/IRecognitionStatusCallback$Stub;
@@ -47567,8 +24898,6 @@
 Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;
 Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel$1;
 Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;
-Landroid/hardware/soundtrigger/SoundTrigger$ModelParamRange$1;
-Landroid/hardware/soundtrigger/SoundTrigger$ModelParamRange;
 Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties$1;
 Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
 Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig$1;
@@ -47580,8 +24909,6 @@
 Landroid/hardware/soundtrigger/SoundTrigger$SoundModelEvent;
 Landroid/hardware/soundtrigger/SoundTrigger$StatusListener;
 Landroid/hardware/soundtrigger/SoundTrigger;
-Landroid/hardware/soundtrigger/SoundTriggerModule$NativeEventHandlerDelegate$1;
-Landroid/hardware/soundtrigger/SoundTriggerModule$NativeEventHandlerDelegate;
 Landroid/hardware/soundtrigger/SoundTriggerModule;
 Landroid/hardware/thermal/V1_0/IThermal;
 Landroid/hardware/thermal/V1_0/ThermalStatus;
@@ -47610,18 +24937,264 @@
 Landroid/hardware/usb/gadget/V1_0/IUsbGadget;
 Landroid/hardware/usb/gadget/V1_0/IUsbGadgetCallback$Stub;
 Landroid/hardware/usb/gadget/V1_0/IUsbGadgetCallback;
+Landroid/icu/impl/BMPSet;
+Landroid/icu/impl/CacheBase;
+Landroid/icu/impl/CacheValue$NullValue;
+Landroid/icu/impl/CacheValue$Strength;
+Landroid/icu/impl/CacheValue;
+Landroid/icu/impl/ClassLoaderUtil;
+Landroid/icu/impl/CurrencyData$CurrencyDisplayInfo;
+Landroid/icu/impl/CurrencyData$CurrencyDisplayInfoProvider;
+Landroid/icu/impl/CurrencyData$CurrencySpacingInfo$SpacingPattern;
+Landroid/icu/impl/CurrencyData$CurrencySpacingInfo$SpacingType;
+Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;
+Landroid/icu/impl/CurrencyData;
+Landroid/icu/impl/ICUBinary$Authenticate;
+Landroid/icu/impl/ICUBinary$DatPackageReader$IsAcceptable;
+Landroid/icu/impl/ICUBinary$DatPackageReader;
+Landroid/icu/impl/ICUBinary$DataFile;
+Landroid/icu/impl/ICUBinary$PackageDataFile;
+Landroid/icu/impl/ICUBinary;
+Landroid/icu/impl/ICUCache;
+Landroid/icu/impl/ICUConfig;
+Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$1;
+Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$CurrencySink$EntrypointTable;
+Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$CurrencySink;
+Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$FormattingData;
+Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;
+Landroid/icu/impl/ICUCurrencyDisplayInfoProvider;
+Landroid/icu/impl/ICUCurrencyMetaInfo$Collector;
+Landroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector;
+Landroid/icu/impl/ICUCurrencyMetaInfo$UniqueList;
+Landroid/icu/impl/ICUCurrencyMetaInfo;
+Landroid/icu/impl/ICUData;
+Landroid/icu/impl/ICUDebug;
+Landroid/icu/impl/ICULocaleService$ICUResourceBundleFactory;
+Landroid/icu/impl/ICULocaleService$LocaleKeyFactory;
+Landroid/icu/impl/ICULocaleService;
+Landroid/icu/impl/ICUNotifier;
+Landroid/icu/impl/ICURWLock;
+Landroid/icu/impl/ICUResourceBundle$1;
+Landroid/icu/impl/ICUResourceBundle$3;
+Landroid/icu/impl/ICUResourceBundle$4;
+Landroid/icu/impl/ICUResourceBundle$Loader;
+Landroid/icu/impl/ICUResourceBundle$OpenType;
+Landroid/icu/impl/ICUResourceBundle$WholeBundle;
+Landroid/icu/impl/ICUResourceBundle;
+Landroid/icu/impl/ICUResourceBundleImpl$ResourceArray;
+Landroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;
+Landroid/icu/impl/ICUResourceBundleImpl$ResourceInt;
+Landroid/icu/impl/ICUResourceBundleImpl$ResourceString;
+Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
+Landroid/icu/impl/ICUResourceBundleImpl;
+Landroid/icu/impl/ICUResourceBundleReader$Array16;
+Landroid/icu/impl/ICUResourceBundleReader$Array32;
+Landroid/icu/impl/ICUResourceBundleReader$Array;
+Landroid/icu/impl/ICUResourceBundleReader$Container;
+Landroid/icu/impl/ICUResourceBundleReader$IsAcceptable;
+Landroid/icu/impl/ICUResourceBundleReader$ReaderCache;
+Landroid/icu/impl/ICUResourceBundleReader$ReaderCacheKey;
+Landroid/icu/impl/ICUResourceBundleReader$ReaderValue;
+Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;
+Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;
+Landroid/icu/impl/ICUResourceBundleReader$Table1632;
+Landroid/icu/impl/ICUResourceBundleReader$Table16;
+Landroid/icu/impl/ICUResourceBundleReader$Table;
+Landroid/icu/impl/ICUResourceBundleReader;
+Landroid/icu/impl/ICUService$Factory;
+Landroid/icu/impl/ICUService;
+Landroid/icu/impl/LocaleIDParser;
+Landroid/icu/impl/Pair;
+Landroid/icu/impl/RBBIDataWrapper$IsAcceptable;
+Landroid/icu/impl/RBBIDataWrapper$RBBIDataHeader;
+Landroid/icu/impl/RBBIDataWrapper$RBBIStateTable;
+Landroid/icu/impl/RBBIDataWrapper;
+Landroid/icu/impl/SimpleCache;
+Landroid/icu/impl/SoftCache;
+Landroid/icu/impl/Trie2$1;
+Landroid/icu/impl/Trie2$2;
+Landroid/icu/impl/Trie2$UTrie2Header;
+Landroid/icu/impl/Trie2$ValueMapper;
+Landroid/icu/impl/Trie2$ValueWidth;
+Landroid/icu/impl/Trie2;
+Landroid/icu/impl/Trie2_16;
+Landroid/icu/impl/UBiDiProps$IsAcceptable;
+Landroid/icu/impl/UBiDiProps;
+Landroid/icu/impl/UCharacterProperty$10;
+Landroid/icu/impl/UCharacterProperty$11;
+Landroid/icu/impl/UCharacterProperty$12;
+Landroid/icu/impl/UCharacterProperty$13;
+Landroid/icu/impl/UCharacterProperty$14;
+Landroid/icu/impl/UCharacterProperty$15;
+Landroid/icu/impl/UCharacterProperty$16;
+Landroid/icu/impl/UCharacterProperty$17;
+Landroid/icu/impl/UCharacterProperty$18;
+Landroid/icu/impl/UCharacterProperty$19;
+Landroid/icu/impl/UCharacterProperty$1;
+Landroid/icu/impl/UCharacterProperty$20;
+Landroid/icu/impl/UCharacterProperty$21;
+Landroid/icu/impl/UCharacterProperty$22;
+Landroid/icu/impl/UCharacterProperty$23;
+Landroid/icu/impl/UCharacterProperty$24;
+Landroid/icu/impl/UCharacterProperty$25;
+Landroid/icu/impl/UCharacterProperty$26;
+Landroid/icu/impl/UCharacterProperty$27;
+Landroid/icu/impl/UCharacterProperty$2;
+Landroid/icu/impl/UCharacterProperty$3;
+Landroid/icu/impl/UCharacterProperty$4;
+Landroid/icu/impl/UCharacterProperty$5;
+Landroid/icu/impl/UCharacterProperty$6;
+Landroid/icu/impl/UCharacterProperty$7;
+Landroid/icu/impl/UCharacterProperty$8;
+Landroid/icu/impl/UCharacterProperty$9;
+Landroid/icu/impl/UCharacterProperty$BiDiIntProperty;
+Landroid/icu/impl/UCharacterProperty$BinaryProperty;
+Landroid/icu/impl/UCharacterProperty$CaseBinaryProperty;
+Landroid/icu/impl/UCharacterProperty$CombiningClassIntProperty;
+Landroid/icu/impl/UCharacterProperty$IntProperty;
+Landroid/icu/impl/UCharacterProperty$IsAcceptable;
+Landroid/icu/impl/UCharacterProperty$NormInertBinaryProperty;
+Landroid/icu/impl/UCharacterProperty$NormQuickCheckIntProperty;
+Landroid/icu/impl/UCharacterProperty;
+Landroid/icu/impl/UResource$Array;
+Landroid/icu/impl/UResource$Key;
+Landroid/icu/impl/UResource$Sink;
+Landroid/icu/impl/UResource$Table;
+Landroid/icu/impl/UResource$Value;
+Landroid/icu/impl/UResource;
+Landroid/icu/impl/Utility;
+Landroid/icu/impl/ZoneMeta$1;
+Landroid/icu/impl/ZoneMeta$CustomTimeZoneCache;
+Landroid/icu/impl/ZoneMeta$SystemTimeZoneCache;
+Landroid/icu/impl/ZoneMeta;
+Landroid/icu/impl/locale/AsciiUtil;
+Landroid/icu/impl/locale/BaseLocale$Cache;
+Landroid/icu/impl/locale/BaseLocale$Key;
+Landroid/icu/impl/locale/BaseLocale;
+Landroid/icu/impl/locale/LocaleObjectCache$CacheEntry;
+Landroid/icu/impl/locale/LocaleObjectCache;
+Landroid/icu/impl/locale/LocaleSyntaxException;
+Landroid/icu/impl/number/AffixPatternProvider;
+Landroid/icu/impl/number/AffixUtils;
+Landroid/icu/impl/number/CustomSymbolCurrency;
+Landroid/icu/impl/number/DecimalFormatProperties$ParseMode;
+Landroid/icu/impl/number/DecimalFormatProperties;
+Landroid/icu/impl/number/Grouper;
+Landroid/icu/impl/number/MacroProps;
+Landroid/icu/impl/number/Padder$PadPosition;
+Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;
+Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;
+Landroid/icu/impl/number/PatternStringParser$ParserState;
+Landroid/icu/impl/number/PatternStringParser;
+Landroid/icu/impl/number/PropertiesAffixPatternProvider;
+Landroid/icu/impl/number/RoundingUtils;
+Landroid/icu/lang/UCharacter;
+Landroid/icu/lang/UCharacterEnums$ECharacterCategory;
+Landroid/icu/lang/UCharacterEnums$ECharacterDirection;
+Landroid/icu/number/CurrencyPrecision;
+Landroid/icu/number/FractionPrecision;
+Landroid/icu/number/IntegerWidth;
+Landroid/icu/number/LocalizedNumberFormatter;
+Landroid/icu/number/NumberFormatter$DecimalSeparatorDisplay;
+Landroid/icu/number/NumberFormatter$SignDisplay;
+Landroid/icu/number/NumberFormatter;
+Landroid/icu/number/NumberFormatterSettings;
+Landroid/icu/number/NumberPropertyMapper;
+Landroid/icu/number/Precision$CurrencyRounderImpl;
+Landroid/icu/number/Precision$FracSigRounderImpl;
+Landroid/icu/number/Precision$FractionRounderImpl;
+Landroid/icu/number/Precision$IncrementFiveRounderImpl;
+Landroid/icu/number/Precision$IncrementRounderImpl;
+Landroid/icu/number/Precision$InfiniteRounderImpl;
+Landroid/icu/number/Precision$PassThroughRounderImpl;
+Landroid/icu/number/Precision$SignificantRounderImpl;
+Landroid/icu/number/Precision;
+Landroid/icu/number/UnlocalizedNumberFormatter;
+Landroid/icu/text/BidiClassifier;
+Landroid/icu/text/BreakIterator$BreakIteratorCache;
+Landroid/icu/text/BreakIterator$BreakIteratorServiceShim;
+Landroid/icu/text/BreakIterator;
+Landroid/icu/text/BreakIteratorFactory$BFService$1RBBreakIteratorFactory;
+Landroid/icu/text/BreakIteratorFactory$BFService;
+Landroid/icu/text/BreakIteratorFactory;
+Landroid/icu/text/CurrencyDisplayNames;
+Landroid/icu/text/CurrencyMetaInfo$CurrencyDigits;
+Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;
+Landroid/icu/text/CurrencyMetaInfo;
+Landroid/icu/text/DecimalFormat;
+Landroid/icu/text/DecimalFormatSymbols$1;
+Landroid/icu/text/DecimalFormatSymbols$CacheData;
+Landroid/icu/text/DecimalFormatSymbols$DecFmtDataSink;
+Landroid/icu/text/DecimalFormatSymbols;
+Landroid/icu/text/DictionaryBreakEngine$DequeI;
+Landroid/icu/text/DictionaryBreakEngine;
+Landroid/icu/text/DisplayContext$Type;
+Landroid/icu/text/DisplayContext;
+Landroid/icu/text/LanguageBreakEngine;
+Landroid/icu/text/Normalizer$FCDMode;
+Landroid/icu/text/Normalizer$Mode;
+Landroid/icu/text/Normalizer$NFCMode;
+Landroid/icu/text/Normalizer$NFDMode;
+Landroid/icu/text/Normalizer$NFKCMode;
+Landroid/icu/text/Normalizer$NFKDMode;
+Landroid/icu/text/Normalizer$NONEMode;
+Landroid/icu/text/Normalizer$QuickCheckResult;
+Landroid/icu/text/Normalizer;
+Landroid/icu/text/NumberFormat;
+Landroid/icu/text/NumberingSystem$1;
+Landroid/icu/text/NumberingSystem$2;
+Landroid/icu/text/NumberingSystem$LocaleLookupData;
+Landroid/icu/text/NumberingSystem;
+Landroid/icu/text/RuleBasedBreakIterator$BreakCache;
+Landroid/icu/text/RuleBasedBreakIterator$DictionaryCache;
+Landroid/icu/text/RuleBasedBreakIterator$LookAheadResults;
+Landroid/icu/text/RuleBasedBreakIterator;
+Landroid/icu/text/StringPrepParseException;
+Landroid/icu/text/StringTransform;
+Landroid/icu/text/TimeZoneNames$NameType;
+Landroid/icu/text/Transform;
+Landroid/icu/text/Transliterator;
+Landroid/icu/text/UFormat;
+Landroid/icu/text/UTF16;
+Landroid/icu/text/UnhandledBreakEngine;
+Landroid/icu/text/UnicodeFilter;
+Landroid/icu/text/UnicodeMatcher;
+Landroid/icu/text/UnicodeSet;
+Landroid/icu/util/Currency$1;
+Landroid/icu/util/Currency$CurrencyUsage;
+Landroid/icu/util/Currency;
+Landroid/icu/util/Freezable;
+Landroid/icu/util/MeasureUnit$1;
+Landroid/icu/util/MeasureUnit$2;
+Landroid/icu/util/MeasureUnit$3;
+Landroid/icu/util/MeasureUnit$4;
+Landroid/icu/util/MeasureUnit$Factory;
+Landroid/icu/util/MeasureUnit;
+Landroid/icu/util/TimeUnit;
+Landroid/icu/util/TimeZone$ConstantZone;
+Landroid/icu/util/TimeZone$SystemTimeZoneType;
+Landroid/icu/util/TimeZone;
+Landroid/icu/util/ULocale$1;
+Landroid/icu/util/ULocale$2;
+Landroid/icu/util/ULocale$3;
+Landroid/icu/util/ULocale$Category;
+Landroid/icu/util/ULocale$JDKLocaleHelper;
+Landroid/icu/util/ULocale$Type;
+Landroid/icu/util/ULocale;
+Landroid/icu/util/UResourceBundle$1;
+Landroid/icu/util/UResourceBundle$RootType;
+Landroid/icu/util/UResourceBundle;
+Landroid/icu/util/UResourceTypeMismatchException;
+Landroid/icu/util/VersionInfo;
 Landroid/inputmethodservice/-$$Lambda$InputMethodService$8T9TmAUIN7vW9eU6kTg8309_d4E;
-Landroid/inputmethodservice/-$$Lambda$InputMethodService$DHO7VgzZzl-Gpo6FN3F8arQtA4A;
 Landroid/inputmethodservice/-$$Lambda$InputMethodService$wp8DeVGx_WDOPw4F6an7QbwVxf0;
 Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl;
 Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;
 Landroid/inputmethodservice/AbstractInputMethodService;
-Landroid/inputmethodservice/ExtractEditText;
 Landroid/inputmethodservice/IInputMethodSessionWrapper$ImeInputEventReceiver;
 Landroid/inputmethodservice/IInputMethodSessionWrapper;
 Landroid/inputmethodservice/IInputMethodWrapper$InputMethodSessionCallbackWrapper;
 Landroid/inputmethodservice/IInputMethodWrapper;
-Landroid/inputmethodservice/InputMethodService$InputMethodImpl;
 Landroid/inputmethodservice/InputMethodService$InputMethodSessionImpl;
 Landroid/inputmethodservice/InputMethodService$Insets;
 Landroid/inputmethodservice/InputMethodService$SettingsObserver;
@@ -47629,8 +25202,6 @@
 Landroid/inputmethodservice/SoftInputWindow;
 Landroid/internal/hidl/base/V1_0/DebugInfo;
 Landroid/internal/hidl/base/V1_0/IBase;
-Landroid/location/-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo;
-Landroid/location/AbstractListenerManager;
 Landroid/location/Address$1;
 Landroid/location/Address;
 Landroid/location/Country$1;
@@ -47651,10 +25222,6 @@
 Landroid/location/GnssMeasurement;
 Landroid/location/GnssMeasurementCorrections$1;
 Landroid/location/GnssMeasurementCorrections;
-Landroid/location/GnssMeasurementsEvent$1;
-Landroid/location/GnssMeasurementsEvent;
-Landroid/location/GnssReflectingPlane$1;
-Landroid/location/GnssSingleSatCorrection$1;
 Landroid/location/GpsStatus$Listener;
 Landroid/location/IBatchedLocationCallback$Stub$Proxy;
 Landroid/location/IBatchedLocationCallback$Stub;
@@ -47699,16 +25266,10 @@
 Landroid/location/Location$BearingDistanceCache;
 Landroid/location/Location;
 Landroid/location/LocationListener;
-Landroid/location/LocationManager$BatchedLocationCallbackManager;
-Landroid/location/LocationManager$GnssMeasurementsListenerManager;
-Landroid/location/LocationManager$GnssNavigationMessageListenerManager;
-Landroid/location/LocationManager$GnssStatusListenerManager;
-Landroid/location/LocationManager$LocationListenerTransport;
 Landroid/location/LocationManager;
 Landroid/location/LocationProvider;
 Landroid/location/LocationRequest$1;
 Landroid/location/LocationRequest;
-Landroid/location/LocationTime;
 Landroid/media/-$$Lambda$MediaCodecInfo$VideoCapabilities$DpgwEn-gVFZT9EtP3qcxpiA2G0M;
 Landroid/media/AudioAttributes$1;
 Landroid/media/AudioAttributes$Builder;
@@ -47762,8 +25323,6 @@
 Landroid/media/AudioPresentation;
 Landroid/media/AudioRecord;
 Landroid/media/AudioRecordRoutingProxy;
-Landroid/media/AudioRecordingConfiguration$1;
-Landroid/media/AudioRecordingConfiguration;
 Landroid/media/AudioRecordingMonitor;
 Landroid/media/AudioRecordingMonitorClient;
 Landroid/media/AudioRecordingMonitorImpl$1;
@@ -47787,6 +25346,7 @@
 Landroid/media/ExifInterface$ExifTag;
 Landroid/media/ExifInterface$Rational;
 Landroid/media/ExifInterface;
+Landroid/media/ExternalRingtonesCursorWrapper;
 Landroid/media/IAudioFocusDispatcher$Stub$Proxy;
 Landroid/media/IAudioFocusDispatcher$Stub;
 Landroid/media/IAudioFocusDispatcher;
@@ -47866,7 +25426,6 @@
 Landroid/media/MediaCodecInfo;
 Landroid/media/MediaCodecList;
 Landroid/media/MediaCrypto;
-Landroid/media/MediaCryptoException;
 Landroid/media/MediaDescrambler;
 Landroid/media/MediaDescription$1;
 Landroid/media/MediaDescription;
@@ -47874,7 +25433,6 @@
 Landroid/media/MediaDrm$KeyRequest;
 Landroid/media/MediaDrm$KeyStatus;
 Landroid/media/MediaDrm$MediaDrmStateException;
-Landroid/media/MediaDrm$OnEventListener;
 Landroid/media/MediaDrm$ProvisionRequest;
 Landroid/media/MediaDrm$SessionException;
 Landroid/media/MediaDrm;
@@ -47888,6 +25446,7 @@
 Landroid/media/MediaMetadata;
 Landroid/media/MediaMetadataRetriever$BitmapParams;
 Landroid/media/MediaMetadataRetriever;
+Landroid/media/MediaMetrics;
 Landroid/media/MediaMuxer;
 Landroid/media/MediaPlayer$1;
 Landroid/media/MediaPlayer$2$1;
@@ -47899,19 +25458,11 @@
 Landroid/media/MediaPlayer$EventHandler$1;
 Landroid/media/MediaPlayer$EventHandler$2;
 Landroid/media/MediaPlayer$EventHandler;
-Landroid/media/MediaPlayer$OnBufferingUpdateListener;
 Landroid/media/MediaPlayer$OnCompletionListener;
-Landroid/media/MediaPlayer$OnDrmInfoHandlerDelegate;
 Landroid/media/MediaPlayer$OnErrorListener;
-Landroid/media/MediaPlayer$OnInfoListener;
-Landroid/media/MediaPlayer$OnMediaTimeDiscontinuityListener;
 Landroid/media/MediaPlayer$OnPreparedListener;
 Landroid/media/MediaPlayer$OnSeekCompleteListener;
 Landroid/media/MediaPlayer$OnSubtitleDataListener;
-Landroid/media/MediaPlayer$OnTimedMetaDataAvailableListener;
-Landroid/media/MediaPlayer$OnTimedTextListener;
-Landroid/media/MediaPlayer$OnVideoSizeChangedListener;
-Landroid/media/MediaPlayer$ProvisioningThread;
 Landroid/media/MediaPlayer$TimeProvider$EventHandler;
 Landroid/media/MediaPlayer$TimeProvider;
 Landroid/media/MediaPlayer$TrackInfo$1;
@@ -47980,7 +25531,6 @@
 Landroid/media/SubtitleData;
 Landroid/media/SubtitleTrack;
 Landroid/media/SyncParams;
-Landroid/media/ThumbnailUtils;
 Landroid/media/TimedMetaData;
 Landroid/media/TimedText;
 Landroid/media/ToneGenerator;
@@ -48002,7 +25552,6 @@
 Landroid/media/audiopolicy/AudioMix;
 Landroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;
 Landroid/media/audiopolicy/AudioMixingRule;
-Landroid/media/audiopolicy/AudioPolicy;
 Landroid/media/audiopolicy/AudioPolicyConfig$1;
 Landroid/media/audiopolicy/AudioPolicyConfig;
 Landroid/media/audiopolicy/AudioProductStrategy$1;
@@ -48045,17 +25594,16 @@
 Landroid/media/projection/IMediaProjectionWatcherCallback$Stub$Proxy;
 Landroid/media/projection/IMediaProjectionWatcherCallback$Stub;
 Landroid/media/projection/IMediaProjectionWatcherCallback;
-Landroid/media/projection/MediaProjectionInfo;
 Landroid/media/projection/MediaProjectionManager$CallbackDelegate;
 Landroid/media/projection/MediaProjectionManager;
-Landroid/media/session/-$$Lambda$MediaSessionManager$YiJ5NX2VHOfUBIGqvAyigWL-pTY;
-Landroid/media/session/-$$Lambda$MediaSessionManager$xJmJKLsOLtZRF5E4CYrmYZJiMw4;
+Landroid/media/session/-$$Lambda$MediaSessionManager$IEuWPZ528guBgmyKPMUWhBwnMCE;
 Landroid/media/session/IActiveSessionsListener$Stub$Proxy;
 Landroid/media/session/IActiveSessionsListener$Stub;
 Landroid/media/session/IActiveSessionsListener;
-Landroid/media/session/ICallback$Stub$Proxy;
-Landroid/media/session/ICallback$Stub;
-Landroid/media/session/ICallback;
+Landroid/media/session/IOnMediaKeyEventDispatchedListener$Stub;
+Landroid/media/session/IOnMediaKeyEventDispatchedListener;
+Landroid/media/session/IOnMediaKeyEventSessionChangedListener$Stub;
+Landroid/media/session/IOnMediaKeyEventSessionChangedListener;
 Landroid/media/session/IOnMediaKeyListener$Stub$Proxy;
 Landroid/media/session/IOnMediaKeyListener$Stub;
 Landroid/media/session/IOnMediaKeyListener;
@@ -48096,9 +25644,11 @@
 Landroid/media/session/MediaSession$Token;
 Landroid/media/session/MediaSession;
 Landroid/media/session/MediaSessionManager$1;
-Landroid/media/session/MediaSessionManager$Callback;
-Landroid/media/session/MediaSessionManager$CallbackStub;
 Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;
+Landroid/media/session/MediaSessionManager$OnMediaKeyEventDispatchedListener;
+Landroid/media/session/MediaSessionManager$OnMediaKeyEventDispatchedListenerStub;
+Landroid/media/session/MediaSessionManager$OnMediaKeyEventSessionChangedListener;
+Landroid/media/session/MediaSessionManager$OnMediaKeyEventSessionChangedListenerStub;
 Landroid/media/session/MediaSessionManager$OnMediaKeyListener;
 Landroid/media/session/MediaSessionManager$OnMediaKeyListenerImpl;
 Landroid/media/session/MediaSessionManager$OnSession2TokensChangedListener;
@@ -48115,8 +25665,6 @@
 Landroid/media/session/PlaybackState$CustomAction$1;
 Landroid/media/session/PlaybackState$CustomAction;
 Landroid/media/session/PlaybackState;
-Landroid/media/soundtrigger/ISoundTriggerDetectionServiceClient$Stub;
-Landroid/media/soundtrigger/ISoundTriggerDetectionServiceClient;
 Landroid/media/soundtrigger/SoundTriggerManager;
 Landroid/media/tv/TvInputHardwareInfo$Builder;
 Landroid/media/tv/TvInputManager;
@@ -48124,6 +25672,8 @@
 Landroid/media/tv/TvStreamConfig$Builder;
 Landroid/media/tv/TvStreamConfig;
 Landroid/metrics/LogMaker;
+Landroid/mtp/MtpDatabase$1;
+Landroid/mtp/MtpDatabase$2;
 Landroid/mtp/MtpDatabase;
 Landroid/mtp/MtpDevice;
 Landroid/mtp/MtpDeviceInfo;
@@ -48134,16 +25684,28 @@
 Landroid/mtp/MtpServer;
 Landroid/mtp/MtpStorage;
 Landroid/mtp/MtpStorageInfo;
+Landroid/mtp/MtpStorageManager$MtpNotifier;
+Landroid/mtp/MtpStorageManager$MtpObject;
+Landroid/mtp/MtpStorageManager;
 Landroid/net/-$$Lambda$FpGXkd3pLxeXY58eJ_84mi1PLWQ;
 Landroid/net/-$$Lambda$Network$KD6DxaMRJIcajhj36TU1K7lJnHQ;
-Landroid/net/-$$Lambda$NetworkFactory$HfslgqyaKc_n0wXX5_qRYVZoGfI;
 Landroid/net/-$$Lambda$NetworkStats$xvFSsVoR0k5s7Fhw1yPDPVIpx8A;
 Landroid/net/-$$Lambda$p1_56lwnt1xBuY1muPblbN1Dtkw;
 Landroid/net/ConnectionInfo$1;
 Landroid/net/ConnectionInfo;
+Landroid/net/ConnectivityManager$1;
+Landroid/net/ConnectivityManager$2;
+Landroid/net/ConnectivityManager$3;
 Landroid/net/ConnectivityManager$CallbackHandler;
+Landroid/net/ConnectivityManager$LegacyRequest;
 Landroid/net/ConnectivityManager$NetworkCallback;
 Landroid/net/ConnectivityManager$OnNetworkActiveListener;
+Landroid/net/ConnectivityManager$OnStartTetheringCallback;
+Landroid/net/ConnectivityManager$OnTetheringEntitlementResultListener;
+Landroid/net/ConnectivityManager$OnTetheringEventCallback;
+Landroid/net/ConnectivityManager$PacketKeepalive;
+Landroid/net/ConnectivityManager$PacketKeepaliveCallback;
+Landroid/net/ConnectivityManager$TooManyRequestsException;
 Landroid/net/ConnectivityManager;
 Landroid/net/ConnectivityMetricsEvent$1;
 Landroid/net/ConnectivityMetricsEvent;
@@ -48192,20 +25754,14 @@
 Landroid/net/INetworkStatsService$Stub$Proxy;
 Landroid/net/INetworkStatsService$Stub;
 Landroid/net/INetworkStatsService;
-Landroid/net/INetworkStatsSession$Stub;
-Landroid/net/INetworkStatsSession;
 Landroid/net/ISocketKeepaliveCallback$Stub$Proxy;
 Landroid/net/ISocketKeepaliveCallback$Stub;
 Landroid/net/ISocketKeepaliveCallback;
 Landroid/net/ITestNetworkManager$Stub;
 Landroid/net/ITestNetworkManager;
-Landroid/net/ITetheringEventCallback$Stub$Proxy;
-Landroid/net/ITetheringEventCallback$Stub;
-Landroid/net/ITetheringEventCallback;
 Landroid/net/ITetheringStatsProvider$Stub$Proxy;
 Landroid/net/ITetheringStatsProvider$Stub;
 Landroid/net/ITetheringStatsProvider;
-Landroid/net/InetAddresses;
 Landroid/net/InterfaceConfiguration$1;
 Landroid/net/InterfaceConfiguration;
 Landroid/net/IpConfiguration$1;
@@ -48216,13 +25772,12 @@
 Landroid/net/IpPrefix$2;
 Landroid/net/IpPrefix;
 Landroid/net/IpSecManager$SpiUnavailableException;
+Landroid/net/IpSecManager$UdpEncapsulationSocket;
 Landroid/net/IpSecManager;
-Landroid/net/KeepalivePacketData$1;
 Landroid/net/KeepalivePacketData;
 Landroid/net/LinkAddress$1;
 Landroid/net/LinkAddress;
 Landroid/net/LinkProperties$1;
-Landroid/net/LinkProperties$CompareResult;
 Landroid/net/LinkProperties;
 Landroid/net/LocalServerSocket;
 Landroid/net/LocalSocket;
@@ -48235,6 +25790,7 @@
 Landroid/net/MacAddress;
 Landroid/net/MatchAllNetworkSpecifier$1;
 Landroid/net/MatchAllNetworkSpecifier;
+Landroid/net/NattSocketKeepalive;
 Landroid/net/Network$1;
 Landroid/net/Network$NetworkBoundSocketFactory;
 Landroid/net/Network;
@@ -48243,9 +25799,6 @@
 Landroid/net/NetworkCapabilities$NameOf;
 Landroid/net/NetworkCapabilities;
 Landroid/net/NetworkConfig;
-Landroid/net/NetworkFactory$NetworkRequestInfo;
-Landroid/net/NetworkFactory$SerialNumber;
-Landroid/net/NetworkFactory;
 Landroid/net/NetworkIdentity;
 Landroid/net/NetworkInfo$1;
 Landroid/net/NetworkInfo$DetailedState;
@@ -48253,22 +25806,18 @@
 Landroid/net/NetworkInfo;
 Landroid/net/NetworkKey$1;
 Landroid/net/NetworkKey;
-Landroid/net/NetworkMisc$1;
-Landroid/net/NetworkMisc;
 Landroid/net/NetworkPolicy$1;
 Landroid/net/NetworkPolicy;
 Landroid/net/NetworkPolicyManager$1;
 Landroid/net/NetworkPolicyManager$Listener;
 Landroid/net/NetworkPolicyManager;
+Landroid/net/NetworkProvider;
 Landroid/net/NetworkQuotaInfo;
 Landroid/net/NetworkRequest$1;
 Landroid/net/NetworkRequest$Builder;
 Landroid/net/NetworkRequest$Type;
 Landroid/net/NetworkRequest;
-Landroid/net/NetworkScore;
 Landroid/net/NetworkScoreManager;
-Landroid/net/NetworkScorerAppData$1;
-Landroid/net/NetworkScorerAppData;
 Landroid/net/NetworkSpecifier;
 Landroid/net/NetworkState$1;
 Landroid/net/NetworkState;
@@ -48302,13 +25851,15 @@
 Landroid/net/ScoredNetwork;
 Landroid/net/SntpClient$InvalidServerReplyException;
 Landroid/net/SntpClient;
+Landroid/net/SocketKeepalive$Callback;
 Landroid/net/SocketKeepalive$ErrorCodeException;
-Landroid/net/SocketKeepalive$InvalidPacketException;
+Landroid/net/SocketKeepalive;
 Landroid/net/StaticIpConfiguration$1;
 Landroid/net/StaticIpConfiguration$Builder;
 Landroid/net/StaticIpConfiguration;
 Landroid/net/StringNetworkSpecifier$1;
 Landroid/net/StringNetworkSpecifier;
+Landroid/net/TcpSocketKeepalive;
 Landroid/net/TestNetworkManager;
 Landroid/net/TrafficStats;
 Landroid/net/TransportInfo;
@@ -48355,7 +25906,6 @@
 Landroid/net/metrics/NetworkEvent;
 Landroid/net/metrics/NetworkMetrics$Metrics;
 Landroid/net/metrics/NetworkMetrics$Summary;
-Landroid/net/metrics/NetworkMetrics;
 Landroid/net/metrics/RaEvent$1;
 Landroid/net/metrics/RaEvent;
 Landroid/net/metrics/ValidationProbeEvent$1;
@@ -48372,169 +25922,21 @@
 Landroid/net/sip/ISipService$Stub$Proxy;
 Landroid/net/sip/ISipService$Stub;
 Landroid/net/sip/ISipService;
+Landroid/net/sip/ISipSession$Stub;
+Landroid/net/sip/ISipSession;
+Landroid/net/sip/ISipSessionListener$Stub;
+Landroid/net/sip/ISipSessionListener;
+Landroid/net/sip/SipException;
 Landroid/net/sip/SipManager;
-Landroid/net/util/-$$Lambda$MultinetworkPolicyTracker$8YMQ0fPTKk7Fw-_gJjln0JT-g8E;
+Landroid/net/sip/SipProfile;
+Landroid/net/sip/SipSessionAdapter;
 Landroid/net/util/MultinetworkPolicyTracker$1;
-Landroid/net/util/MultinetworkPolicyTracker$2;
 Landroid/net/util/MultinetworkPolicyTracker$SettingObserver;
 Landroid/net/util/MultinetworkPolicyTracker;
-Landroid/net/wifi/-$$Lambda$O5kkps4d9X9Xr5DI8L3NlcZliu8;
-Landroid/net/wifi/-$$Lambda$WifiFrameworkInitializer$K4DpGPGObWI293pmRTuiEj5r-DE;
-Landroid/net/wifi/-$$Lambda$WifiFrameworkInitializer$Q8AMcrAZzPqZKp4l5Zz4DRDq6rY;
-Landroid/net/wifi/-$$Lambda$WifiFrameworkInitializer$QSCNoL1_pVVaV8B35R8b_0UECkU;
-Landroid/net/wifi/-$$Lambda$WifiFrameworkInitializer$evN9sVM7TGOwMVxoJTGBCfu_880;
-Landroid/net/wifi/-$$Lambda$WifiFrameworkInitializer$qxuZsnr_-ppKI2ad2pa3htyx2u0;
-Landroid/net/wifi/-$$Lambda$WifiFrameworkInitializer$y82Bone6wQbJ8BixuAZ6L5k501Y;
-Landroid/net/wifi/-$$Lambda$WifiScanner$ServiceHandler$MC84hrJ90Rns-G99w6ih3qQMdyw;
-Landroid/net/wifi/-$$Lambda$WifiScanner$ServiceHandler$cKqGOMxI2R2uyUjgsLnrUOSFRS8;
-Landroid/net/wifi/-$$Lambda$WifiScanner$ServiceHandler$tfzaoDCMuySQuJsgvPXn9A60XqE;
-Landroid/net/wifi/-$$Lambda$WifiScanner$ServiceHandler$y6fV_BVhUdL0OIhrI7CZr_ohobM;
-Landroid/net/wifi/AnqpInformationElement;
-Landroid/net/wifi/IActionListener$Stub;
-Landroid/net/wifi/IActionListener;
-Landroid/net/wifi/IDppCallback$Stub$Proxy;
-Landroid/net/wifi/IDppCallback$Stub;
-Landroid/net/wifi/IDppCallback;
-Landroid/net/wifi/ILocalOnlyHotspotCallback$Stub;
-Landroid/net/wifi/ILocalOnlyHotspotCallback;
-Landroid/net/wifi/INetworkRequestMatchCallback$Stub$Proxy;
-Landroid/net/wifi/INetworkRequestMatchCallback$Stub;
-Landroid/net/wifi/INetworkRequestMatchCallback;
-Landroid/net/wifi/IOnWifiActivityEnergyInfoListener$Stub;
-Landroid/net/wifi/IOnWifiActivityEnergyInfoListener;
-Landroid/net/wifi/IOnWifiUsabilityStatsListener$Stub$Proxy;
-Landroid/net/wifi/IOnWifiUsabilityStatsListener$Stub;
-Landroid/net/wifi/IOnWifiUsabilityStatsListener;
-Landroid/net/wifi/IScanResultsCallback$Stub;
-Landroid/net/wifi/IScanResultsCallback;
-Landroid/net/wifi/ISoftApCallback$Stub$Proxy;
-Landroid/net/wifi/ISoftApCallback$Stub;
-Landroid/net/wifi/ISoftApCallback;
-Landroid/net/wifi/ISuggestionConnectionStatusListener$Stub;
-Landroid/net/wifi/ISuggestionConnectionStatusListener;
-Landroid/net/wifi/ITrafficStateCallback$Stub$Proxy;
-Landroid/net/wifi/ITrafficStateCallback$Stub;
-Landroid/net/wifi/ITrafficStateCallback;
-Landroid/net/wifi/ITxPacketCountListener$Stub;
-Landroid/net/wifi/ITxPacketCountListener;
-Landroid/net/wifi/IWifiManager$Stub$Proxy;
-Landroid/net/wifi/IWifiManager$Stub;
-Landroid/net/wifi/IWifiManager;
-Landroid/net/wifi/IWifiScanner$Stub$Proxy;
-Landroid/net/wifi/IWifiScanner$Stub;
-Landroid/net/wifi/IWifiScanner;
-Landroid/net/wifi/ParcelUtil;
-Landroid/net/wifi/RttManager;
-Landroid/net/wifi/ScanResult$1;
-Landroid/net/wifi/ScanResult$InformationElement;
-Landroid/net/wifi/ScanResult$RadioChainInfo;
-Landroid/net/wifi/ScanResult;
-Landroid/net/wifi/SoftApConfiguration;
-Landroid/net/wifi/SoftApInfo;
-Landroid/net/wifi/SupplicantState$1;
-Landroid/net/wifi/SupplicantState$2;
-Landroid/net/wifi/SupplicantState;
-Landroid/net/wifi/SynchronousExecutor;
-Landroid/net/wifi/WifiClient;
-Landroid/net/wifi/WifiCondManager;
-Landroid/net/wifi/WifiConfiguration$1;
-Landroid/net/wifi/WifiConfiguration$KeyMgmt;
-Landroid/net/wifi/WifiConfiguration$NetworkSelectionStatus$DisableReasonInfo;
-Landroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;
-Landroid/net/wifi/WifiConfiguration$RecentFailure;
-Landroid/net/wifi/WifiConfiguration;
-Landroid/net/wifi/WifiEnterpriseConfig$1;
-Landroid/net/wifi/WifiEnterpriseConfig;
-Landroid/net/wifi/WifiFrameworkInitializer$NoPreloadHolder;
-Landroid/net/wifi/WifiFrameworkInitializer;
-Landroid/net/wifi/WifiInfo$1;
-Landroid/net/wifi/WifiInfo;
-Landroid/net/wifi/WifiManager$MulticastLock;
-Landroid/net/wifi/WifiManager$SoftApCallback;
-Landroid/net/wifi/WifiManager$SoftApCallbackProxy;
-Landroid/net/wifi/WifiManager$TrafficStateCallbackProxy;
-Landroid/net/wifi/WifiManager$WifiLock;
-Landroid/net/wifi/WifiManager;
-Landroid/net/wifi/WifiNetworkAgentSpecifier$1;
-Landroid/net/wifi/WifiNetworkAgentSpecifier;
 Landroid/net/wifi/WifiNetworkScoreCache$CacheListener$1;
 Landroid/net/wifi/WifiNetworkScoreCache$CacheListener;
 Landroid/net/wifi/WifiNetworkScoreCache;
-Landroid/net/wifi/WifiNetworkSpecifier$1;
-Landroid/net/wifi/WifiNetworkSpecifier;
-Landroid/net/wifi/WifiNetworkSuggestion$1;
-Landroid/net/wifi/WifiNetworkSuggestion;
-Landroid/net/wifi/WifiScanner$ActionListener;
-Landroid/net/wifi/WifiScanner$ChannelSpec;
-Landroid/net/wifi/WifiScanner$ListenerWithExecutor;
-Landroid/net/wifi/WifiScanner$OperationResult$1;
-Landroid/net/wifi/WifiScanner$OperationResult;
-Landroid/net/wifi/WifiScanner$ParcelableScanData$1;
-Landroid/net/wifi/WifiScanner$ParcelableScanData;
-Landroid/net/wifi/WifiScanner$ParcelableScanResults$1;
-Landroid/net/wifi/WifiScanner$ParcelableScanResults;
-Landroid/net/wifi/WifiScanner$PnoScanListener;
-Landroid/net/wifi/WifiScanner$PnoSettings$1;
-Landroid/net/wifi/WifiScanner$PnoSettings$PnoNetwork;
-Landroid/net/wifi/WifiScanner$PnoSettings;
-Landroid/net/wifi/WifiScanner$ScanData$1;
-Landroid/net/wifi/WifiScanner$ScanData;
-Landroid/net/wifi/WifiScanner$ScanListener;
-Landroid/net/wifi/WifiScanner$ScanSettings$1;
-Landroid/net/wifi/WifiScanner$ScanSettings$HiddenNetwork;
-Landroid/net/wifi/WifiScanner$ScanSettings;
-Landroid/net/wifi/WifiScanner$ServiceHandler;
-Landroid/net/wifi/WifiScanner;
-Landroid/net/wifi/WifiSsid$1;
-Landroid/net/wifi/WifiSsid;
-Landroid/net/wifi/WifiUsabilityStatsEntry$1;
-Landroid/net/wifi/WifiUsabilityStatsEntry;
-Landroid/net/wifi/WpsInfo$1;
-Landroid/net/wifi/WpsInfo;
-Landroid/net/wifi/aware/Characteristics$1;
-Landroid/net/wifi/aware/Characteristics;
-Landroid/net/wifi/aware/ConfigRequest$1;
-Landroid/net/wifi/aware/ConfigRequest;
-Landroid/net/wifi/aware/IWifiAwareManager$Stub;
-Landroid/net/wifi/aware/IWifiAwareManager;
-Landroid/net/wifi/aware/WifiAwareManager;
-Landroid/net/wifi/hotspot2/IProvisioningCallback$Stub$Proxy;
-Landroid/net/wifi/hotspot2/IProvisioningCallback$Stub;
-Landroid/net/wifi/hotspot2/IProvisioningCallback;
-Landroid/net/wifi/hotspot2/OsuProvider$1;
-Landroid/net/wifi/hotspot2/OsuProvider;
-Landroid/net/wifi/hotspot2/PasspointConfiguration$1;
-Landroid/net/wifi/hotspot2/PasspointConfiguration;
-Landroid/net/wifi/hotspot2/pps/HomeSp$1;
-Landroid/net/wifi/hotspot2/pps/HomeSp;
-Landroid/net/wifi/p2p/IWifiP2pManager$Stub$Proxy;
-Landroid/net/wifi/p2p/IWifiP2pManager$Stub;
-Landroid/net/wifi/p2p/IWifiP2pManager;
-Landroid/net/wifi/p2p/WifiP2pConfig$1;
-Landroid/net/wifi/p2p/WifiP2pConfig;
-Landroid/net/wifi/p2p/WifiP2pDevice$1;
-Landroid/net/wifi/p2p/WifiP2pDevice;
-Landroid/net/wifi/p2p/WifiP2pDeviceList$1;
-Landroid/net/wifi/p2p/WifiP2pDeviceList;
-Landroid/net/wifi/p2p/WifiP2pGroup;
-Landroid/net/wifi/p2p/WifiP2pGroupList$1;
-Landroid/net/wifi/p2p/WifiP2pGroupList$2;
-Landroid/net/wifi/p2p/WifiP2pGroupList$GroupDeleteListener;
-Landroid/net/wifi/p2p/WifiP2pGroupList;
-Landroid/net/wifi/p2p/WifiP2pInfo$1;
-Landroid/net/wifi/p2p/WifiP2pInfo;
-Landroid/net/wifi/p2p/WifiP2pManager;
-Landroid/net/wifi/p2p/WifiP2pProvDiscEvent;
-Landroid/net/wifi/p2p/nsd/WifiP2pServiceInfo$1;
-Landroid/net/wifi/p2p/nsd/WifiP2pServiceInfo;
-Landroid/net/wifi/rtt/IRttCallback$Stub$Proxy;
-Landroid/net/wifi/rtt/IRttCallback$Stub;
-Landroid/net/wifi/rtt/IRttCallback;
-Landroid/net/wifi/rtt/IWifiRttManager$Stub;
-Landroid/net/wifi/rtt/IWifiRttManager;
-Landroid/net/wifi/rtt/RangingRequest$1;
-Landroid/net/wifi/rtt/RangingRequest;
-Landroid/net/wifi/rtt/WifiRttManager;
+Landroid/net/wifi/wificond/WifiCondManager;
 Landroid/nfc/BeamShareData$1;
 Landroid/nfc/BeamShareData;
 Landroid/nfc/IAppCallback$Stub$Proxy;
@@ -48543,11 +25945,9 @@
 Landroid/nfc/INfcAdapter$Stub$Proxy;
 Landroid/nfc/INfcAdapter$Stub;
 Landroid/nfc/INfcAdapter;
-Landroid/nfc/INfcAdapterExtras;
 Landroid/nfc/INfcCardEmulation$Stub$Proxy;
 Landroid/nfc/INfcCardEmulation$Stub;
 Landroid/nfc/INfcCardEmulation;
-Landroid/nfc/INfcDta;
 Landroid/nfc/INfcFCardEmulation$Stub$Proxy;
 Landroid/nfc/INfcFCardEmulation$Stub;
 Landroid/nfc/INfcFCardEmulation;
@@ -48692,7 +26092,6 @@
 Landroid/os/EventLogTags;
 Landroid/os/FactoryTest;
 Landroid/os/FileBridge$FileBridgeOutputStream;
-Landroid/os/FileBridge;
 Landroid/os/FileObserver$ObserverThread;
 Landroid/os/FileObserver;
 Landroid/os/FileUtils$1;
@@ -48765,8 +26164,6 @@
 Landroid/os/IProgressListener$Stub$Proxy;
 Landroid/os/IProgressListener$Stub;
 Landroid/os/IProgressListener;
-Landroid/os/IPullAtomCallback$Stub;
-Landroid/os/IPullAtomCallback;
 Landroid/os/IRecoverySystem$Stub;
 Landroid/os/IRecoverySystem;
 Landroid/os/IRemoteCallback$Stub$Proxy;
@@ -48801,8 +26198,6 @@
 Landroid/os/IUserManager$Stub$Proxy;
 Landroid/os/IUserManager$Stub;
 Landroid/os/IUserManager;
-Landroid/os/IUserRestrictionsListener$Stub;
-Landroid/os/IUserRestrictionsListener;
 Landroid/os/IVibratorService$Stub$Proxy;
 Landroid/os/IVibratorService$Stub;
 Landroid/os/IVibratorService;
@@ -48869,6 +26264,7 @@
 Landroid/os/PowerWhitelistManager;
 Landroid/os/Process$ProcessStartResult;
 Landroid/os/Process;
+Landroid/os/ProxyFileDescriptorCallback;
 Landroid/os/RecoverySystem;
 Landroid/os/Registrant;
 Landroid/os/RegistrantList;
@@ -48900,10 +26296,6 @@
 Landroid/os/ShellCommand;
 Landroid/os/SimpleClock;
 Landroid/os/StatFs;
-Landroid/os/StatsDimensionsValue$1;
-Landroid/os/StatsDimensionsValue;
-Landroid/os/StatsLogEventWrapper$1;
-Landroid/os/StatsLogEventWrapper;
 Landroid/os/StrictMode$1;
 Landroid/os/StrictMode$2;
 Landroid/os/StrictMode$3;
@@ -48934,12 +26326,10 @@
 Landroid/os/SystemClock$3;
 Landroid/os/SystemClock;
 Landroid/os/SystemProperties;
-Landroid/os/SystemService$1;
 Landroid/os/SystemService$State;
 Landroid/os/SystemService;
 Landroid/os/SystemUpdateManager;
 Landroid/os/SystemVibrator;
-Landroid/os/TelephonyServiceManager$ServiceRegisterer;
 Landroid/os/TelephonyServiceManager;
 Landroid/os/Temperature$1;
 Landroid/os/Temperature;
@@ -48985,7 +26375,6 @@
 Landroid/os/connectivity/WifiBatteryStats$1;
 Landroid/os/connectivity/WifiBatteryStats;
 Landroid/os/health/HealthKeys$Constant;
-Landroid/os/health/HealthKeys$Constants;
 Landroid/os/health/HealthKeys$SortedIntArray;
 Landroid/os/health/HealthStats;
 Landroid/os/health/HealthStatsParceler$1;
@@ -48998,8 +26387,7 @@
 Landroid/os/image/DynamicSystemManager;
 Landroid/os/image/IDynamicSystemService$Stub;
 Landroid/os/image/IDynamicSystemService;
-Landroid/os/incremental/IncrementalDataLoaderParams;
-Landroid/os/incremental/IncrementalDataLoaderParamsParcel;
+Landroid/os/incremental/IncrementalManager;
 Landroid/os/storage/DiskInfo$1;
 Landroid/os/storage/DiskInfo;
 Landroid/os/storage/IObbActionListener$Stub$Proxy;
@@ -49014,9 +26402,12 @@
 Landroid/os/storage/IStorageShutdownObserver$Stub$Proxy;
 Landroid/os/storage/IStorageShutdownObserver$Stub;
 Landroid/os/storage/IStorageShutdownObserver;
+Landroid/os/storage/OnObbStateChangeListener;
 Landroid/os/storage/StorageEventListener;
+Landroid/os/storage/StorageManager$1;
 Landroid/os/storage/StorageManager$ObbActionListener;
 Landroid/os/storage/StorageManager$StorageEventListenerDelegate;
+Landroid/os/storage/StorageManager$StorageVolumeCallback;
 Landroid/os/storage/StorageManager;
 Landroid/os/storage/StorageManagerInternal$ExternalStorageMountPolicy;
 Landroid/os/storage/StorageManagerInternal;
@@ -49074,28 +26465,19 @@
 Landroid/print/IPrintSpooler$Stub$Proxy;
 Landroid/print/IPrintSpooler$Stub;
 Landroid/print/IPrintSpooler;
-Landroid/print/IPrintSpoolerCallbacks$Stub;
-Landroid/print/IPrintSpoolerCallbacks;
-Landroid/print/IPrintSpoolerClient$Stub;
-Landroid/print/IPrintSpoolerClient;
 Landroid/print/PrintDocumentAdapter;
 Landroid/print/PrintJobInfo$1;
 Landroid/print/PrintJobInfo;
 Landroid/print/PrintManager;
-Landroid/printservice/IPrintServiceClient$Stub;
-Landroid/printservice/IPrintServiceClient;
 Landroid/printservice/PrintServiceInfo$1;
 Landroid/printservice/PrintServiceInfo;
 Landroid/privacy/DifferentialPrivacyConfig;
 Landroid/privacy/DifferentialPrivacyEncoder;
-Landroid/privacy/internal/longitudinalreporting/LongitudinalReportingConfig;
 Landroid/privacy/internal/longitudinalreporting/LongitudinalReportingEncoder;
 Landroid/privacy/internal/rappor/RapporConfig;
 Landroid/privacy/internal/rappor/RapporEncoder;
-Landroid/provider/-$$Lambda$DeviceConfig$6U9gBH6h5Oab2DB_e83az4n_WEo;
 Landroid/provider/-$$Lambda$FontsContract$3FDNQd-WsglsyDhif-aHVbzkfrA;
 Landroid/provider/-$$Lambda$FontsContract$rqfIZKvP1frnI9vP1hVA8jQN_RE;
-Landroid/provider/-$$Lambda$Settings$NameValueCache$cLX_nUBDGp9SYpFxrABk-2ceeMI;
 Landroid/provider/-$$Lambda$Settings$NameValueCache$qSyMM6rUAHCa-5rsP-atfAqR3sA;
 Landroid/provider/BaseColumns;
 Landroid/provider/BlockedNumberContract$SystemContract;
@@ -49107,10 +26489,7 @@
 Landroid/provider/CalendarContract$EventsColumns;
 Landroid/provider/CalendarContract$Instances;
 Landroid/provider/CalendarContract$SyncColumns;
-Landroid/provider/CalendarContract;
 Landroid/provider/CallLog$Calls;
-Landroid/provider/CallLog;
-Landroid/provider/ContactsContract$BaseSyncColumns;
 Landroid/provider/ContactsContract$CommonDataKinds$BaseTypes;
 Landroid/provider/ContactsContract$CommonDataKinds$Callable;
 Landroid/provider/ContactsContract$CommonDataKinds$CommonColumns;
@@ -49126,23 +26505,14 @@
 Landroid/provider/ContactsContract$DataColumns;
 Landroid/provider/ContactsContract$DataColumnsWithJoins;
 Landroid/provider/ContactsContract$DataUsageStatColumns;
-Landroid/provider/ContactsContract$DisplayPhoto;
 Landroid/provider/ContactsContract$PhoneLookup;
 Landroid/provider/ContactsContract$PhoneLookupColumns;
-Landroid/provider/ContactsContract$Profile;
-Landroid/provider/ContactsContract$RawContacts;
 Landroid/provider/ContactsContract$RawContactsColumns;
-Landroid/provider/ContactsContract$RawContactsEntity;
 Landroid/provider/ContactsContract$StatusColumns;
-Landroid/provider/ContactsContract$SyncColumns;
 Landroid/provider/ContactsContract;
 Landroid/provider/DeviceConfig$1;
 Landroid/provider/DeviceConfig$OnPropertiesChangedListener;
-Landroid/provider/DeviceConfig$Properties$Builder;
-Landroid/provider/DeviceConfig$Properties;
 Landroid/provider/DeviceConfig;
-Landroid/provider/DocumentsContract;
-Landroid/provider/DocumentsProvider;
 Landroid/provider/Downloads$Impl;
 Landroid/provider/Downloads;
 Landroid/provider/FontRequest;
@@ -49150,23 +26520,8 @@
 Landroid/provider/FontsContract$FontFamilyResult;
 Landroid/provider/FontsContract$FontInfo;
 Landroid/provider/FontsContract;
-Landroid/provider/MediaStore$Audio$AudioColumns;
-Landroid/provider/MediaStore$Audio$Media;
-Landroid/provider/MediaStore$Audio$Playlists;
-Landroid/provider/MediaStore$Audio$PlaylistsColumns;
-Landroid/provider/MediaStore$Files;
-Landroid/provider/MediaStore$Images$ImageColumns;
-Landroid/provider/MediaStore$Images$Media;
-Landroid/provider/MediaStore$Images$Thumbnails;
-Landroid/provider/MediaStore$MediaColumns;
-Landroid/provider/MediaStore$Video$Media;
-Landroid/provider/MediaStore$Video$Thumbnails;
-Landroid/provider/MediaStore$Video$VideoColumns;
-Landroid/provider/MediaStore;
-Landroid/provider/OpenableColumns;
 Landroid/provider/SearchIndexableData;
 Landroid/provider/SearchIndexableResource;
-Landroid/provider/SearchIndexablesContract;
 Landroid/provider/SearchIndexablesProvider;
 Landroid/provider/SearchRecentSuggestions;
 Landroid/provider/Settings$Config;
@@ -49184,21 +26539,16 @@
 Landroid/provider/Telephony$CarrierId$All;
 Landroid/provider/Telephony$CarrierId;
 Landroid/provider/Telephony$Carriers;
-Landroid/provider/Telephony$Mms$Inbox;
-Landroid/provider/Telephony$Mms$Sent;
 Landroid/provider/Telephony$Mms;
-Landroid/provider/Telephony$MmsSms;
 Landroid/provider/Telephony$ServiceStateTable;
 Landroid/provider/Telephony$SimInfo;
 Landroid/provider/Telephony$Sms;
 Landroid/provider/Telephony$TextBasedSmsColumns;
-Landroid/provider/Telephony$Threads;
-Landroid/provider/Telephony$ThreadsColumns;
 Landroid/provider/UserDictionary$Words;
-Landroid/provider/VoicemailContract$Voicemails;
 Landroid/renderscript/RenderScriptCacheDir;
 Landroid/security/AttestedKeyPair;
 Landroid/security/Credentials;
+Landroid/security/FileIntegrityManager;
 Landroid/security/IKeyChainAliasCallback$Stub;
 Landroid/security/IKeyChainAliasCallback;
 Landroid/security/IKeyChainService$Stub$Proxy;
@@ -49221,10 +26571,6 @@
 Landroid/security/Scrypt;
 Landroid/security/keymaster/IKeyAttestationApplicationIdProvider$Stub;
 Landroid/security/keymaster/IKeyAttestationApplicationIdProvider;
-Landroid/security/keymaster/KeyAttestationApplicationId$1;
-Landroid/security/keymaster/KeyAttestationApplicationId;
-Landroid/security/keymaster/KeyAttestationPackageInfo$1;
-Landroid/security/keymaster/KeyAttestationPackageInfo;
 Landroid/security/keymaster/KeyCharacteristics$1;
 Landroid/security/keymaster/KeyCharacteristics;
 Landroid/security/keymaster/KeymasterArgument$1;
@@ -49280,7 +26626,6 @@
 Landroid/security/keystore/KeyStoreCryptoOperationChunkedStreamer;
 Landroid/security/keystore/KeyStoreCryptoOperationStreamer;
 Landroid/security/keystore/KeyStoreCryptoOperationUtils;
-Landroid/security/keystore/KeymasterUtils;
 Landroid/security/keystore/KeystoreResponse$1;
 Landroid/security/keystore/KeystoreResponse;
 Landroid/security/keystore/ParcelableKeyGenParameterSpec$1;
@@ -49290,19 +26635,15 @@
 Landroid/security/keystore/UserNotAuthenticatedException;
 Landroid/security/keystore/Utils;
 Landroid/security/keystore/recovery/KeyChainProtectionParams$1;
-Landroid/security/keystore/recovery/KeyChainProtectionParams$Builder;
 Landroid/security/keystore/recovery/KeyChainProtectionParams;
 Landroid/security/keystore/recovery/KeyChainSnapshot$1;
-Landroid/security/keystore/recovery/KeyChainSnapshot$Builder;
 Landroid/security/keystore/recovery/KeyChainSnapshot;
 Landroid/security/keystore/recovery/KeyDerivationParams$1;
 Landroid/security/keystore/recovery/KeyDerivationParams;
 Landroid/security/keystore/recovery/RecoveryCertPath$1;
 Landroid/security/keystore/recovery/RecoveryCertPath;
 Landroid/security/keystore/recovery/RecoveryController;
-Landroid/security/keystore/recovery/TrustedRootCertificates;
 Landroid/security/keystore/recovery/WrappedApplicationKey$1;
-Landroid/security/keystore/recovery/WrappedApplicationKey$Builder;
 Landroid/security/keystore/recovery/WrappedApplicationKey;
 Landroid/security/keystore/recovery/X509CertificateParsingUtils;
 Landroid/security/net/config/ApplicationConfig;
@@ -49344,40 +26685,30 @@
 Landroid/service/appprediction/IPredictionService;
 Landroid/service/autofill/AutofillServiceInfo;
 Landroid/service/autofill/FieldClassificationUserData;
-Landroid/service/autofill/FillContext$1;
-Landroid/service/autofill/FillContext;
-Landroid/service/autofill/FillRequest$1;
-Landroid/service/autofill/FillRequest;
 Landroid/service/autofill/FillResponse$1;
 Landroid/service/autofill/FillResponse;
 Landroid/service/autofill/IAutoFillService$Stub$Proxy;
 Landroid/service/autofill/IAutoFillService$Stub;
 Landroid/service/autofill/IAutoFillService;
-Landroid/service/autofill/IFillCallback$Stub;
-Landroid/service/autofill/IFillCallback;
 Landroid/service/autofill/UserData$1;
 Landroid/service/autofill/UserData;
 Landroid/service/autofill/augmented/IAugmentedAutofillService$Stub$Proxy;
 Landroid/service/autofill/augmented/IAugmentedAutofillService$Stub;
 Landroid/service/autofill/augmented/IAugmentedAutofillService;
-Landroid/service/autofill/augmented/IFillCallback$Stub;
-Landroid/service/autofill/augmented/IFillCallback;
 Landroid/service/carrier/CarrierIdentifier$1;
 Landroid/service/carrier/CarrierIdentifier;
+Landroid/service/carrier/CarrierMessagingServiceWrapper$CarrierMessagingCallbackWrapper;
+Landroid/service/carrier/CarrierMessagingServiceWrapper;
 Landroid/service/carrier/ICarrierService$Stub$Proxy;
 Landroid/service/carrier/ICarrierService$Stub;
 Landroid/service/carrier/ICarrierService;
-Landroid/service/contentcapture/ActivityEvent$1;
-Landroid/service/contentcapture/ActivityEvent;
 Landroid/service/contentcapture/ContentCaptureServiceInfo;
 Landroid/service/contentcapture/FlushMetrics$1;
 Landroid/service/contentcapture/FlushMetrics;
 Landroid/service/contentcapture/IContentCaptureService$Stub$Proxy;
 Landroid/service/contentcapture/IContentCaptureService$Stub;
 Landroid/service/contentcapture/IContentCaptureService;
-Landroid/service/contentcapture/IContentCaptureServiceCallback$Stub;
-Landroid/service/contentcapture/IContentCaptureServiceCallback;
-Landroid/service/contentcapture/SnapshotData$1;
+Landroid/service/dataloader/DataLoaderService;
 Landroid/service/dreams/DreamManagerInternal;
 Landroid/service/dreams/IDreamManager$Stub$Proxy;
 Landroid/service/dreams/IDreamManager$Stub;
@@ -49389,17 +26720,38 @@
 Landroid/service/euicc/EuiccProfileInfo;
 Landroid/service/euicc/GetEuiccProfileInfoListResult$1;
 Landroid/service/euicc/GetEuiccProfileInfoListResult;
+Landroid/service/euicc/IDeleteSubscriptionCallback$Stub;
+Landroid/service/euicc/IDeleteSubscriptionCallback;
+Landroid/service/euicc/IDownloadSubscriptionCallback$Stub;
+Landroid/service/euicc/IDownloadSubscriptionCallback;
+Landroid/service/euicc/IEraseSubscriptionsCallback$Stub;
+Landroid/service/euicc/IEraseSubscriptionsCallback;
 Landroid/service/euicc/IEuiccService$Stub$Proxy;
 Landroid/service/euicc/IEuiccService$Stub;
 Landroid/service/euicc/IEuiccService;
+Landroid/service/euicc/IGetDefaultDownloadableSubscriptionListCallback$Stub;
+Landroid/service/euicc/IGetDefaultDownloadableSubscriptionListCallback;
+Landroid/service/euicc/IGetDownloadableSubscriptionMetadataCallback$Stub;
+Landroid/service/euicc/IGetDownloadableSubscriptionMetadataCallback;
+Landroid/service/euicc/IGetEidCallback$Stub;
+Landroid/service/euicc/IGetEidCallback;
+Landroid/service/euicc/IGetEuiccInfoCallback$Stub;
+Landroid/service/euicc/IGetEuiccInfoCallback;
 Landroid/service/euicc/IGetEuiccProfileInfoListCallback$Stub;
 Landroid/service/euicc/IGetEuiccProfileInfoListCallback;
+Landroid/service/euicc/IGetOtaStatusCallback$Stub;
+Landroid/service/euicc/IGetOtaStatusCallback;
+Landroid/service/euicc/IRetainSubscriptionsForFactoryResetCallback$Stub;
+Landroid/service/euicc/IRetainSubscriptionsForFactoryResetCallback;
+Landroid/service/euicc/ISwitchToSubscriptionCallback$Stub;
+Landroid/service/euicc/ISwitchToSubscriptionCallback;
+Landroid/service/euicc/IUpdateSubscriptionNicknameCallback$Stub;
+Landroid/service/euicc/IUpdateSubscriptionNicknameCallback;
 Landroid/service/gatekeeper/GateKeeperResponse$1;
 Landroid/service/gatekeeper/GateKeeperResponse;
 Landroid/service/gatekeeper/IGateKeeperService$Stub$Proxy;
 Landroid/service/gatekeeper/IGateKeeperService$Stub;
 Landroid/service/gatekeeper/IGateKeeperService;
-Landroid/service/incremental/IncrementalDataLoaderService;
 Landroid/service/media/IMediaBrowserService$Stub$Proxy;
 Landroid/service/media/IMediaBrowserService$Stub;
 Landroid/service/media/IMediaBrowserService;
@@ -49446,7 +26798,6 @@
 Landroid/service/notification/NotificationRankingUpdate;
 Landroid/service/notification/NotificationStats$1;
 Landroid/service/notification/NotificationStats;
-Landroid/service/notification/NotifyingApp$1;
 Landroid/service/notification/ScheduleCalendar;
 Landroid/service/notification/SnoozeCriterion$1;
 Landroid/service/notification/SnoozeCriterion;
@@ -49479,8 +26830,6 @@
 Landroid/service/trust/ITrustAgentService$Stub$Proxy;
 Landroid/service/trust/ITrustAgentService$Stub;
 Landroid/service/trust/ITrustAgentService;
-Landroid/service/trust/ITrustAgentServiceCallback$Stub;
-Landroid/service/trust/ITrustAgentServiceCallback;
 Landroid/service/voice/IVoiceInteractionService$Stub$Proxy;
 Landroid/service/voice/IVoiceInteractionService$Stub;
 Landroid/service/voice/IVoiceInteractionService;
@@ -49520,27 +26869,13 @@
 Landroid/speech/tts/TextToSpeech;
 Landroid/speech/tts/TtsEngines;
 Landroid/stats/devicepolicy/nano/StringList;
-Landroid/sysprop/-$$Lambda$TelephonyProperties$0Zy6hglFVc-K9jiJWmuHmilIMkY;
-Landroid/sysprop/-$$Lambda$TelephonyProperties$2V_2ZQoGHfOIfKo_A8Ss547oL-c;
-Landroid/sysprop/-$$Lambda$TelephonyProperties$BfPaTA0e9gauJmR4vGNCDkGZ3uc;
-Landroid/sysprop/-$$Lambda$TelephonyProperties$EV4LSOwY7Dsh1rJalZDLmnGJw5I;
 Landroid/sysprop/-$$Lambda$TelephonyProperties$H4jN0VIBNpZQBeWYt6qS3DCe_M8;
-Landroid/sysprop/-$$Lambda$TelephonyProperties$JNTRmlscGaFlYo_3krOr_WWd2QI;
-Landroid/sysprop/-$$Lambda$TelephonyProperties$UKEfAuJVPm5cKR_UnPj1L66mN34;
-Landroid/sysprop/-$$Lambda$TelephonyProperties$VtSZ_Uto4bMa49ncgAfdWewMFOU;
-Landroid/sysprop/-$$Lambda$TelephonyProperties$dc-CgjsF3BtDxLSSKL5bQ9ullG0;
-Landroid/sysprop/-$$Lambda$TelephonyProperties$fdR0mRnJd3OymvjDc_MI1AHnMwc;
-Landroid/sysprop/-$$Lambda$TelephonyProperties$iJa3afMQmWbO1DX4jS9zkcOKZlY;
-Landroid/sysprop/-$$Lambda$TelephonyProperties$kCQNtMqtfi6MMlFLqtIufNXwOS8;
 Landroid/sysprop/-$$Lambda$TelephonyProperties$kemQbl44ndTqXdQVvnYppJuQboQ;
-Landroid/sysprop/-$$Lambda$TelephonyProperties$rKoNB08X7R8OCPq-VDCWDOm3lDM;
 Landroid/sysprop/AdbProperties;
-Landroid/sysprop/ContactsProperties;
 Landroid/sysprop/CryptoProperties$state_values;
 Landroid/sysprop/CryptoProperties$type_values;
 Landroid/sysprop/CryptoProperties;
 Landroid/sysprop/DisplayProperties;
-Landroid/sysprop/ProductProperties;
 Landroid/sysprop/TelephonyProperties;
 Landroid/sysprop/VoldProperties;
 Landroid/system/ErrnoException;
@@ -49580,10 +26915,8 @@
 Landroid/telecom/Conferenceable;
 Landroid/telecom/Connection$FailureSignalingConnection;
 Landroid/telecom/Connection$Listener;
-Landroid/telecom/Connection$VideoProvider;
 Landroid/telecom/Connection;
 Landroid/telecom/ConnectionRequest$1;
-Landroid/telecom/ConnectionRequest$Builder;
 Landroid/telecom/ConnectionRequest;
 Landroid/telecom/ConnectionService$1;
 Landroid/telecom/ConnectionService$2;
@@ -49602,8 +26935,6 @@
 Landroid/telecom/Logging/EventManager$Event;
 Landroid/telecom/Logging/EventManager$EventListener;
 Landroid/telecom/Logging/EventManager$EventRecord;
-Landroid/telecom/Logging/EventManager$Loggable;
-Landroid/telecom/Logging/EventManager$TimedEventPair;
 Landroid/telecom/Logging/EventManager;
 Landroid/telecom/Logging/Runnable$1;
 Landroid/telecom/Logging/Runnable;
@@ -49615,8 +26946,6 @@
 Landroid/telecom/Logging/SessionManager$ISessionIdQueryHandler;
 Landroid/telecom/Logging/SessionManager$ISessionListener;
 Landroid/telecom/Logging/SessionManager;
-Landroid/telecom/ParcelableCall$1;
-Landroid/telecom/ParcelableCall;
 Landroid/telecom/ParcelableConference$1;
 Landroid/telecom/ParcelableConference;
 Landroid/telecom/ParcelableConnection$1;
@@ -49629,32 +26958,22 @@
 Landroid/telecom/RemoteConnectionManager;
 Landroid/telecom/StatusHints$1;
 Landroid/telecom/StatusHints;
-Landroid/telecom/TelecomAnalytics$SessionTiming$1;
-Landroid/telecom/TelecomAnalytics;
 Landroid/telecom/TelecomManager;
 Landroid/telecom/VideoProfile$1;
 Landroid/telecom/VideoProfile;
 Landroid/telephony/-$$Lambda$DataFailCause$djkZSxdG-s-w2L5rQKiGu6OudyY;
 Landroid/telephony/-$$Lambda$MLKtmRGKP3e0WU7x_KyS5-Vg8q4;
 Landroid/telephony/-$$Lambda$NetworkRegistrationInfo$1JuZmO5PoYGZY8bHhZYwvmqwOB0;
-Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$0s34qsuHFsa43jUHrTkD62ni6Ds;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$1M3m0i6211i2YjWyTDT7l0bJm3I;
-Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$2VMO21pFQN-JN3kpn6vQN1zPFEU;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$2cMrwdqnKBpixpApeIX38rmRLak;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$4NHt5Shg_DHV-T1IxfcQLHP5-j0;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$6czWSGzxct0CXPVO54T0aq05qls;
-Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$E9hw_LXFliykadzCB_mw8nukNGI;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$Hbn6-eZxY2p3rjOfStodI04A8E8;
-Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$JalixlMNdjktPsNntP_JT9pymhs;
-Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$MtX5gtAKHxLcUp_ibya6VO1zuoE;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$Q2A8FgYlU8_D6PD78tThGut_rTc;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$TqrkuLPlaG_ucU7VbLS4tnf8hG8;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$WYWtWHdkZDxBd9anjoxyZozPWHc;
-Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$XyayAGWQZC2dNjwr697SfSGBBOc;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$YY3srkIkMm8vTSFJZHoiKzUUrGs;
-Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$aysbwPqxcLV_5w6LP0TzZu2D-ew;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$bELzxgwsPigyVKYkAXBO2BjcSm8;
-Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$dUc3j82sK9P9Zpaq-91n9bk_Rpc;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$jlNX9JiqGSNg9W49vDcKucKdeCI;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$nrGqSRBJrc3_EwotCDNwfKeizIo;
 Landroid/telephony/-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$oDAZqs8paeefe_3k_uRKV5plQW4;
@@ -49666,8 +26985,8 @@
 Landroid/telephony/-$$Lambda$TelephonyFrameworkInitializer$MLDtRnX1dj1RKFdjgIsOvcQxhA0;
 Landroid/telephony/-$$Lambda$TelephonyFrameworkInitializer$b_92_3ZijRrdEa9yLyFA5xu19OM;
 Landroid/telephony/-$$Lambda$TelephonyFrameworkInitializer$mpe0Kh92VEQmEtmo60oqykdvnBE;
+Landroid/telephony/-$$Lambda$TelephonyFrameworkInitializer$o3geRfUaRT9tnqKKZbu1EbUxw4Q;
 Landroid/telephony/-$$Lambda$TelephonyFrameworkInitializer$sQClc4rjc9ydh0nXpY79gr33av4;
-Landroid/telephony/-$$Lambda$TelephonyRegistryManager$1$cLzLZB4oGnI-HG_-4MhxcXoHys8;
 Landroid/telephony/AccessNetworkConstants$AccessNetworkType;
 Landroid/telephony/AccessNetworkConstants$TransportType;
 Landroid/telephony/AccessNetworkConstants;
@@ -49733,7 +27052,6 @@
 Landroid/telephony/DataFailCause;
 Landroid/telephony/DataSpecificRegistrationInfo$1;
 Landroid/telephony/DataSpecificRegistrationInfo;
-Landroid/telephony/DisconnectCause;
 Landroid/telephony/ICellInfoCallback$Stub$Proxy;
 Landroid/telephony/ICellInfoCallback$Stub;
 Landroid/telephony/ICellInfoCallback;
@@ -49756,8 +27074,6 @@
 Landroid/telephony/ModemActivityInfo$1;
 Landroid/telephony/ModemActivityInfo$TransmitPower;
 Landroid/telephony/ModemActivityInfo;
-Landroid/telephony/ModemInfo$1;
-Landroid/telephony/ModemInfo;
 Landroid/telephony/NeighboringCellInfo$1;
 Landroid/telephony/NeighboringCellInfo;
 Landroid/telephony/NetworkRegistrationInfo$1;
@@ -49809,10 +27125,7 @@
 Landroid/telephony/TelephonyManager$7;
 Landroid/telephony/TelephonyManager$MultiSimVariants;
 Landroid/telephony/TelephonyManager;
-Landroid/telephony/TelephonyRegistryManager$1;
-Landroid/telephony/TelephonyRegistryManager$2;
 Landroid/telephony/TelephonyRegistryManager;
-Landroid/telephony/TelephonyScanManager$NetworkScanCallback;
 Landroid/telephony/UiccAccessRule$1;
 Landroid/telephony/UiccAccessRule;
 Landroid/telephony/UiccCardInfo$1;
@@ -49848,10 +27161,6 @@
 Landroid/telephony/data/IDataService;
 Landroid/telephony/data/IDataServiceCallback$Stub;
 Landroid/telephony/data/IDataServiceCallback;
-Landroid/telephony/data/IQualifiedNetworksService$Stub;
-Landroid/telephony/data/IQualifiedNetworksService;
-Landroid/telephony/data/IQualifiedNetworksServiceCallback$Stub;
-Landroid/telephony/data/IQualifiedNetworksServiceCallback;
 Landroid/telephony/emergency/EmergencyNumber$1;
 Landroid/telephony/emergency/EmergencyNumber;
 Landroid/telephony/euicc/EuiccCardManager;
@@ -49882,7 +27191,6 @@
 Landroid/telephony/ims/ProvisioningManager$Callback$CallbackBinder;
 Landroid/telephony/ims/ProvisioningManager$Callback;
 Landroid/telephony/ims/RegistrationManager$1;
-Landroid/telephony/ims/RegistrationManager$RegistrationCallback$RegistrationBinder;
 Landroid/telephony/ims/RegistrationManager$RegistrationCallback;
 Landroid/telephony/ims/RegistrationManager;
 Landroid/telephony/ims/aidl/IImsCapabilityCallback$Stub$Proxy;
@@ -49914,8 +27222,6 @@
 Landroid/telephony/ims/aidl/IImsSmsListener$Stub$Proxy;
 Landroid/telephony/ims/aidl/IImsSmsListener$Stub;
 Landroid/telephony/ims/aidl/IImsSmsListener;
-Landroid/telephony/ims/feature/-$$Lambda$ImsFeature$9bLETU1BeS-dFzQnbBBs3kwaz-8;
-Landroid/telephony/ims/feature/-$$Lambda$ImsFeature$rPSMsRhoup9jfT6nt1MV2qhomrM;
 Landroid/telephony/ims/feature/CapabilityChangeRequest$1;
 Landroid/telephony/ims/feature/CapabilityChangeRequest$CapabilityPair;
 Landroid/telephony/ims/feature/CapabilityChangeRequest;
@@ -50087,7 +27393,6 @@
 Landroid/text/style/AbsoluteSizeSpan;
 Landroid/text/style/AccessibilityClickableSpan$1;
 Landroid/text/style/AccessibilityClickableSpan;
-Landroid/text/style/AccessibilityReplacementSpan;
 Landroid/text/style/AccessibilityURLSpan;
 Landroid/text/style/AlignmentSpan$Standard;
 Landroid/text/style/AlignmentSpan;
@@ -50286,7 +27591,6 @@
 Landroid/util/Property;
 Landroid/util/Range;
 Landroid/util/Rational;
-Landroid/util/RecurrenceRule$1;
 Landroid/util/RecurrenceRule$NonrecurringIterator;
 Landroid/util/RecurrenceRule$RecurringIterator;
 Landroid/util/RecurrenceRule;
@@ -50305,25 +27609,19 @@
 Landroid/util/StateSet;
 Landroid/util/StatsLog;
 Landroid/util/StatsLogInternal;
-Landroid/util/StringBuilderPrinter;
 Landroid/util/SuperNotCalledException;
-Landroid/util/TimeFormatException;
 Landroid/util/TimeUtils;
 Landroid/util/TimedRemoteCaller;
-Landroid/util/TimestampedValue$1;
-Landroid/util/TimestampedValue;
 Landroid/util/TimingLogger;
 Landroid/util/TimingsTraceLog;
 Landroid/util/TrustedTime;
 Landroid/util/TypedValue;
 Landroid/util/UtilConfig;
-Landroid/util/Xml$Encoding;
 Landroid/util/Xml;
 Landroid/util/XmlPullAttributes;
 Landroid/util/apk/ApkSignatureSchemeV2Verifier$VerifiedSigner;
 Landroid/util/apk/ApkSignatureSchemeV2Verifier;
 Landroid/util/apk/ApkSignatureSchemeV3Verifier$PlatformNotSupportedException;
-Landroid/util/apk/ApkSignatureSchemeV3Verifier$VerifiedProofOfRotation;
 Landroid/util/apk/ApkSignatureSchemeV3Verifier$VerifiedSigner;
 Landroid/util/apk/ApkSignatureSchemeV3Verifier;
 Landroid/util/apk/ApkSignatureVerifier;
@@ -50366,18 +27664,14 @@
 Landroid/view/-$$Lambda$FocusFinder$P8rLvOJhymJH5ALAgUjGaM5gxKA;
 Landroid/view/-$$Lambda$FocusFinder$Pgx6IETuqCkrhJYdiBes48tolG4;
 Landroid/view/-$$Lambda$InsetsController$Cj7UJrCkdHvJAZ_cYKrXuTMsjz8;
-Landroid/view/-$$Lambda$InsetsController$HI9QZ2HvGm6iykc-WONz2KPG61Q;
 Landroid/view/-$$Lambda$PYGleuqIeCxjTD1pJqqx1opFv1g;
 Landroid/view/-$$Lambda$QI1s392qW8l6mC24bcy9050SkuY;
 Landroid/view/-$$Lambda$SurfaceView$SyyzxOgxKwZMRgiiTGcRYbOU5JY;
 Landroid/view/-$$Lambda$SurfaceView$w68OV7dB_zKVNsA-r0IrAUtyWas;
-Landroid/view/-$$Lambda$TextureView$WAq1rgfoZeDSt6cBQga7iQDymYk;
 Landroid/view/-$$Lambda$ThreadedRenderer$ydBD-R1iP5u-97XYakm-jKvC1b4;
 Landroid/view/-$$Lambda$View$llq76MkPXP4bNcb9oJt_msw0fnQ;
 Landroid/view/-$$Lambda$ViewRootImpl$IReiNMSbDakZSGbIZuL_ifaFWn8;
-Landroid/view/-$$Lambda$ViewRootImpl$YBiqAhbCbXVPSKdbE3K4rH2gpxI;
 Landroid/view/-$$Lambda$ViewRootImpl$dznxCZGM2R1fsBljsJKomLjBRoM;
-Landroid/view/-$$Lambda$ViewRootImpl$zlBUjCwDtoAWMNaHI62DIq-eKFY;
 Landroid/view/-$$Lambda$WindowManagerGlobal$2bR3FsEm4EdRwuXfttH0wA2xOW4;
 Landroid/view/-$$Lambda$WlJa6OPA72p3gYtA3nVKC7Z1tGY;
 Landroid/view/-$$Lambda$cZhmLzK8aetUdx4VlP9w5jR7En0;
@@ -50443,22 +27737,15 @@
 Landroid/view/GestureDetector;
 Landroid/view/GestureExclusionTracker$GestureExclusionViewInfo;
 Landroid/view/GestureExclusionTracker;
-Landroid/view/GhostView;
 Landroid/view/Gravity;
 Landroid/view/HandlerActionQueue$HandlerAction;
 Landroid/view/HandlerActionQueue;
 Landroid/view/IAppTransitionAnimationSpecsFuture$Stub$Proxy;
 Landroid/view/IAppTransitionAnimationSpecsFuture$Stub;
 Landroid/view/IAppTransitionAnimationSpecsFuture;
-Landroid/view/IApplicationToken$Stub;
-Landroid/view/IApplicationToken;
 Landroid/view/IDisplayFoldListener$Stub$Proxy;
 Landroid/view/IDisplayFoldListener$Stub;
 Landroid/view/IDisplayFoldListener;
-Landroid/view/IDisplayWindowListener$Stub;
-Landroid/view/IDisplayWindowListener;
-Landroid/view/IDisplayWindowRotationController$Stub;
-Landroid/view/IDisplayWindowRotationController;
 Landroid/view/IDockedStackListener$Stub$Proxy;
 Landroid/view/IDockedStackListener$Stub;
 Landroid/view/IDockedStackListener;
@@ -50477,13 +27764,9 @@
 Landroid/view/IPinnedStackListener$Stub$Proxy;
 Landroid/view/IPinnedStackListener$Stub;
 Landroid/view/IPinnedStackListener;
-Landroid/view/IRecentsAnimationController$Stub;
-Landroid/view/IRecentsAnimationController;
 Landroid/view/IRecentsAnimationRunner$Stub$Proxy;
 Landroid/view/IRecentsAnimationRunner$Stub;
 Landroid/view/IRecentsAnimationRunner;
-Landroid/view/IRemoteAnimationFinishedCallback$Stub;
-Landroid/view/IRemoteAnimationFinishedCallback;
 Landroid/view/IRemoteAnimationRunner$Stub$Proxy;
 Landroid/view/IRemoteAnimationRunner$Stub;
 Landroid/view/IRemoteAnimationRunner;
@@ -50499,9 +27782,6 @@
 Landroid/view/IWindow$Stub$Proxy;
 Landroid/view/IWindow$Stub;
 Landroid/view/IWindow;
-Landroid/view/IWindowContainer$Stub;
-Landroid/view/IWindowContainer;
-Landroid/view/IWindowId$Stub;
 Landroid/view/IWindowId;
 Landroid/view/IWindowManager$Stub$Proxy;
 Landroid/view/IWindowManager$Stub;
@@ -50526,13 +27806,12 @@
 Landroid/view/InputEventConsistencyVerifier;
 Landroid/view/InputEventReceiver;
 Landroid/view/InputEventSender;
-Landroid/view/InputMonitor;
 Landroid/view/InputQueue$Callback;
 Landroid/view/InputQueue$FinishedInputEventCallback;
 Landroid/view/InputQueue;
 Landroid/view/InputWindowHandle;
+Landroid/view/InsetsAnimationControlCallbacks;
 Landroid/view/InsetsController;
-Landroid/view/InsetsFlags;
 Landroid/view/InsetsSource$1;
 Landroid/view/InsetsSource;
 Landroid/view/InsetsSourceConsumer;
@@ -50579,8 +27858,6 @@
 Landroid/view/RemoteAnimationDefinition$RemoteAnimationAdapterEntry$1;
 Landroid/view/RemoteAnimationDefinition$RemoteAnimationAdapterEntry;
 Landroid/view/RemoteAnimationDefinition;
-Landroid/view/RemoteAnimationTarget$1;
-Landroid/view/RemoteAnimationTarget;
 Landroid/view/RenderNodeAnimator$1;
 Landroid/view/RenderNodeAnimator$DelayedAnimationHelper;
 Landroid/view/RenderNodeAnimator;
@@ -50595,7 +27872,6 @@
 Landroid/view/SubMenu;
 Landroid/view/Surface$1;
 Landroid/view/Surface$CompatibleCanvas;
-Landroid/view/Surface$HwuiContext;
 Landroid/view/Surface$OutOfResourcesException;
 Landroid/view/Surface;
 Landroid/view/SurfaceControl$1;
@@ -50603,7 +27879,6 @@
 Landroid/view/SurfaceControl$CieXyz;
 Landroid/view/SurfaceControl$DesiredDisplayConfigSpecs;
 Landroid/view/SurfaceControl$DisplayPrimaries;
-Landroid/view/SurfaceControl$PhysicalDisplayInfo;
 Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;
 Landroid/view/SurfaceControl$Transaction$1;
 Landroid/view/SurfaceControl$Transaction;
@@ -50661,7 +27936,6 @@
 Landroid/view/View$OnKeyListener;
 Landroid/view/View$OnLayoutChangeListener;
 Landroid/view/View$OnLongClickListener;
-Landroid/view/View$OnScrollChangeListener;
 Landroid/view/View$OnSystemUiVisibilityChangeListener;
 Landroid/view/View$OnTouchListener;
 Landroid/view/View$PerformClick;
@@ -50682,7 +27956,6 @@
 Landroid/view/ViewGroup$4;
 Landroid/view/ViewGroup$ChildListForAccessibility;
 Landroid/view/ViewGroup$ChildListForAutoFillOrContentCapture;
-Landroid/view/ViewGroup$HoverTarget;
 Landroid/view/ViewGroup$LayoutParams;
 Landroid/view/ViewGroup$MarginLayoutParams;
 Landroid/view/ViewGroup$OnHierarchyChangeListener;
@@ -50717,7 +27990,6 @@
 Landroid/view/ViewRootImpl$ConsumeBatchedInputImmediatelyRunnable;
 Landroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;
 Landroid/view/ViewRootImpl$EarlyPostImeInputStage;
-Landroid/view/ViewRootImpl$GfxInfo;
 Landroid/view/ViewRootImpl$HighContrastTextManager;
 Landroid/view/ViewRootImpl$ImeInputStage;
 Landroid/view/ViewRootImpl$InputStage;
@@ -50774,12 +28046,10 @@
 Landroid/view/WindowAnimationFrameStats$1;
 Landroid/view/WindowAnimationFrameStats;
 Landroid/view/WindowCallbacks;
-Landroid/view/WindowContainerTransaction;
 Landroid/view/WindowContentFrameStats$1;
 Landroid/view/WindowContentFrameStats;
 Landroid/view/WindowId$1;
 Landroid/view/WindowInsets$Builder;
-Landroid/view/WindowInsets$Side;
 Landroid/view/WindowInsets$Type;
 Landroid/view/WindowInsets;
 Landroid/view/WindowInsetsController;
@@ -50801,7 +28071,6 @@
 Landroid/view/accessibility/AccessibilityEvent;
 Landroid/view/accessibility/AccessibilityEventSource;
 Landroid/view/accessibility/AccessibilityManager$1;
-Landroid/view/accessibility/AccessibilityManager$AccessibilityPolicy;
 Landroid/view/accessibility/AccessibilityManager$AccessibilityServicesStateChangeListener;
 Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;
 Landroid/view/accessibility/AccessibilityManager$HighTextContrastChangeListener;
@@ -50872,10 +28141,8 @@
 Landroid/view/autofill/AutofillManager$AutofillCallback;
 Landroid/view/autofill/AutofillManager$AutofillClient;
 Landroid/view/autofill/AutofillManager$AutofillManagerClient;
-Landroid/view/autofill/AutofillManager$TrackedViews;
 Landroid/view/autofill/AutofillManager;
 Landroid/view/autofill/AutofillManagerInternal;
-Landroid/view/autofill/AutofillPopupWindow;
 Landroid/view/autofill/AutofillValue$1;
 Landroid/view/autofill/AutofillValue;
 Landroid/view/autofill/Helper;
@@ -50886,7 +28153,6 @@
 Landroid/view/autofill/IAutoFillManagerClient$Stub;
 Landroid/view/autofill/IAutoFillManagerClient;
 Landroid/view/autofill/IAutofillWindowPresenter;
-Landroid/view/autofill/ParcelableMap;
 Landroid/view/contentcapture/ContentCaptureCondition$1;
 Landroid/view/contentcapture/ContentCaptureCondition;
 Landroid/view/contentcapture/ContentCaptureContext$1;
@@ -50894,12 +28160,10 @@
 Landroid/view/contentcapture/ContentCaptureHelper;
 Landroid/view/contentcapture/ContentCaptureManager$ContentCaptureClient;
 Landroid/view/contentcapture/ContentCaptureManager;
-Landroid/view/contentcapture/ContentCaptureSession;
 Landroid/view/contentcapture/DataRemovalRequest$1;
 Landroid/view/contentcapture/DataRemovalRequest;
 Landroid/view/contentcapture/IContentCaptureManager$Stub;
 Landroid/view/contentcapture/IContentCaptureManager;
-Landroid/view/contentcapture/MainContentCaptureSession;
 Landroid/view/inputmethod/-$$Lambda$InputMethodManager$dfnCauFoZCf-HfXs1QavrkwWDf0;
 Landroid/view/inputmethod/-$$Lambda$InputMethodManager$iDWn3IGSUFqIcs8Py42UhfrshxI;
 Landroid/view/inputmethod/BaseInputConnection;
@@ -50950,7 +28214,6 @@
 Landroid/view/textclassifier/-$$Lambda$L_UQMPjXwBN0ch4zL2dD82nf9RI;
 Landroid/view/textclassifier/-$$Lambda$NxwbyZSxofZ4Z5SQhfXmtLQ1nxk;
 Landroid/view/textclassifier/-$$Lambda$OGSS2qx6njxlnp0dnKb4lA3jnw8;
-Landroid/view/textclassifier/-$$Lambda$TextClassificationManager$JIaezIJbMig_-kVzN6oArzkTsJE;
 Landroid/view/textclassifier/-$$Lambda$TextClassifierImpl$RRbXefHgcUymI9-P95ArUyMvfbw;
 Landroid/view/textclassifier/-$$Lambda$TextClassifierImpl$ftq-sQqJYwUdrdbbr9jz3p4AWos;
 Landroid/view/textclassifier/-$$Lambda$TextClassifierImpl$iSt_Guet-O6Vtdk0MA4z-Z4lzaM;
@@ -50965,10 +28228,8 @@
 Landroid/view/textclassifier/ConversationAction;
 Landroid/view/textclassifier/ConversationActions$1;
 Landroid/view/textclassifier/ConversationActions$Message$1;
-Landroid/view/textclassifier/ConversationActions$Message$Builder;
 Landroid/view/textclassifier/ConversationActions$Message;
 Landroid/view/textclassifier/ConversationActions$Request$1;
-Landroid/view/textclassifier/ConversationActions$Request$Builder;
 Landroid/view/textclassifier/ConversationActions$Request;
 Landroid/view/textclassifier/ConversationActions;
 Landroid/view/textclassifier/EntityConfidence$1;
@@ -51007,7 +28268,6 @@
 Landroid/view/textclassifier/TextClassifier$Utils;
 Landroid/view/textclassifier/TextClassifier;
 Landroid/view/textclassifier/TextClassifierEvent$1;
-Landroid/view/textclassifier/TextClassifierEvent$Builder;
 Landroid/view/textclassifier/TextClassifierEvent$ConversationActionsEvent$1;
 Landroid/view/textclassifier/TextClassifierEvent$ConversationActionsEvent;
 Landroid/view/textclassifier/TextClassifierEvent$LanguageDetectionEvent$1;
@@ -51061,7 +28321,6 @@
 Landroid/webkit/IWebViewUpdateService$Stub;
 Landroid/webkit/IWebViewUpdateService;
 Landroid/webkit/JavascriptInterface;
-Landroid/webkit/MimeTypeMap;
 Landroid/webkit/ServiceWorkerClient;
 Landroid/webkit/ServiceWorkerController;
 Landroid/webkit/ServiceWorkerWebSettings;
@@ -51077,7 +28336,6 @@
 Landroid/webkit/WebMessage;
 Landroid/webkit/WebMessagePort;
 Landroid/webkit/WebResourceRequest;
-Landroid/webkit/WebSettings$PluginState;
 Landroid/webkit/WebSettings;
 Landroid/webkit/WebStorage;
 Landroid/webkit/WebSyncManager;
@@ -51121,7 +28379,6 @@
 Landroid/widget/AbsListView$2;
 Landroid/widget/AbsListView$3;
 Landroid/widget/AbsListView$4;
-Landroid/widget/AbsListView$AbsPositionScroller;
 Landroid/widget/AbsListView$AdapterDataSetObserver;
 Landroid/widget/AbsListView$CheckForTap;
 Landroid/widget/AbsListView$FlingRunnable$1;
@@ -51144,11 +28401,9 @@
 Landroid/widget/AbsoluteLayout;
 Landroid/widget/ActionMenuPresenter$1;
 Landroid/widget/ActionMenuPresenter$2;
-Landroid/widget/ActionMenuPresenter$ActionButtonSubmenu;
 Landroid/widget/ActionMenuPresenter$ActionMenuPopupCallback;
 Landroid/widget/ActionMenuPresenter$OverflowMenuButton$1;
 Landroid/widget/ActionMenuPresenter$OverflowMenuButton;
-Landroid/widget/ActionMenuPresenter$OverflowPopup;
 Landroid/widget/ActionMenuPresenter$PopupPresenterCallback;
 Landroid/widget/ActionMenuPresenter;
 Landroid/widget/ActionMenuView$ActionMenuChildView;
@@ -51161,7 +28416,6 @@
 Landroid/widget/AdapterView$AdapterDataSetObserver;
 Landroid/widget/AdapterView$OnItemClickListener;
 Landroid/widget/AdapterView$OnItemSelectedListener;
-Landroid/widget/AdapterView$SelectionNotifier;
 Landroid/widget/AdapterView;
 Landroid/widget/ArrayAdapter;
 Landroid/widget/AutoCompleteTextView$DropDownItemClickListener;
@@ -51184,43 +28438,35 @@
 Landroid/widget/Editor$3;
 Landroid/widget/Editor$5;
 Landroid/widget/Editor$Blink;
-Landroid/widget/Editor$CorrectionHighlighter;
 Landroid/widget/Editor$CursorAnchorInfoNotifier;
 Landroid/widget/Editor$CursorController;
 Landroid/widget/Editor$EasyEditDeleteListener;
 Landroid/widget/Editor$EasyEditPopupWindow;
 Landroid/widget/Editor$EditOperation$1;
 Landroid/widget/Editor$EditOperation;
-Landroid/widget/Editor$ErrorPopup;
-Landroid/widget/Editor$HandleView;
 Landroid/widget/Editor$InputContentType;
 Landroid/widget/Editor$InputMethodState;
-Landroid/widget/Editor$InsertionHandleView;
 Landroid/widget/Editor$InsertionPointCursorController;
 Landroid/widget/Editor$MagnifierMotionAnimator;
 Landroid/widget/Editor$PinnedPopupWindow;
 Landroid/widget/Editor$PositionListener;
 Landroid/widget/Editor$ProcessTextIntentActionsHandler;
-Landroid/widget/Editor$SelectionHandleView;
 Landroid/widget/Editor$SelectionModifierCursorController;
 Landroid/widget/Editor$SpanController$1;
 Landroid/widget/Editor$SpanController$2;
 Landroid/widget/Editor$SpanController;
 Landroid/widget/Editor$SuggestionHelper$SuggestionSpanComparator;
 Landroid/widget/Editor$SuggestionHelper;
-Landroid/widget/Editor$SuggestionsPopupWindow;
 Landroid/widget/Editor$TextRenderNode;
 Landroid/widget/Editor$TextViewPositionListener;
 Landroid/widget/Editor$UndoInputFilter;
 Landroid/widget/Editor;
-Landroid/widget/EditorTouchState;
 Landroid/widget/FastScroller$1;
 Landroid/widget/FastScroller$2;
 Landroid/widget/FastScroller$3;
 Landroid/widget/FastScroller$4;
 Landroid/widget/FastScroller$5;
 Landroid/widget/FastScroller$6;
-Landroid/widget/FastScroller;
 Landroid/widget/Filter$FilterListener;
 Landroid/widget/Filter;
 Landroid/widget/Filterable;
@@ -51334,11 +28580,8 @@
 Landroid/widget/RemoteViews$ViewGroupActionAdd;
 Landroid/widget/RemoteViews$ViewGroupActionRemove;
 Landroid/widget/RemoteViews$ViewPaddingAction;
-Landroid/widget/RemoteViews$ViewTree;
 Landroid/widget/RemoteViews;
 Landroid/widget/RemoteViewsAdapter$RemoteAdapterConnectionCallback;
-Landroid/widget/RemoteViewsAdapter;
-Landroid/widget/RemoteViewsService;
 Landroid/widget/RtlSpacingHelper;
 Landroid/widget/ScrollBarDrawable;
 Landroid/widget/ScrollView$SavedState$1;
@@ -51444,12 +28687,48 @@
 Lcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache$1;
 Lcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache;
 Lcom/android/i18n/phonenumbers/internal/RegexCache;
+Lcom/android/icu/charset/CharsetDecoderICU;
+Lcom/android/icu/charset/CharsetEncoderICU;
+Lcom/android/icu/charset/CharsetICU;
+Lcom/android/icu/charset/NativeConverter;
+Lcom/android/icu/util/CaseMapperNative;
+Lcom/android/icu/util/Icu4cMetadata;
+Lcom/android/icu/util/LocaleNative;
+Lcom/android/icu/util/regex/MatcherNative;
+Lcom/android/icu/util/regex/PatternNative;
+Lcom/android/ims/-$$Lambda$ImsManager$D1JuJ3ba2jMHWDKlSpm03meBR1c;
+Lcom/android/ims/-$$Lambda$ImsManager$LiW49wt0wLMYHjgtAwL8NLIATfs;
+Lcom/android/ims/-$$Lambda$ImsManager$YhRaDrc3t9_7beNiU5gQcqZilOw;
+Lcom/android/ims/-$$Lambda$szO0o3matefQqo-6NB-dzsr9eCw;
+Lcom/android/ims/FeatureConnection$IFeatureUpdate;
+Lcom/android/ims/FeatureConnection;
+Lcom/android/ims/FeatureConnector$Listener;
+Lcom/android/ims/IFeatureConnector;
+Lcom/android/ims/ImsCall$Listener;
+Lcom/android/ims/ImsCall;
+Lcom/android/ims/ImsCallbackAdapterManager;
 Lcom/android/ims/ImsConfig;
 Lcom/android/ims/ImsConfigListener$Stub;
 Lcom/android/ims/ImsConfigListener;
+Lcom/android/ims/ImsEcbm$ImsEcbmListenerProxy;
+Lcom/android/ims/ImsEcbm;
+Lcom/android/ims/ImsEcbmStateListener;
 Lcom/android/ims/ImsException;
+Lcom/android/ims/ImsExternalCallStateListener;
+Lcom/android/ims/ImsManager$2;
+Lcom/android/ims/ImsManager$3;
+Lcom/android/ims/ImsManager$ExecutorFactory;
+Lcom/android/ims/ImsManager;
+Lcom/android/ims/ImsMultiEndpoint$ImsExternalCallStateListenerProxy;
+Lcom/android/ims/ImsMultiEndpoint;
+Lcom/android/ims/ImsUt$IImsUtListenerProxy;
+Lcom/android/ims/ImsUt;
 Lcom/android/ims/ImsUtInterface;
-Lcom/android/ims/internal/IImsCallSession;
+Lcom/android/ims/MmTelFeatureConnection$CapabilityCallbackManager;
+Lcom/android/ims/MmTelFeatureConnection$ImsRegistrationCallbackAdapter;
+Lcom/android/ims/MmTelFeatureConnection$ProvisioningCallbackManager;
+Lcom/android/ims/MmTelFeatureConnection;
+Lcom/android/ims/internal/ICall;
 Lcom/android/ims/internal/IImsEcbm$Stub;
 Lcom/android/ims/internal/IImsEcbm;
 Lcom/android/ims/internal/IImsEcbmListener$Stub;
@@ -51467,27 +28746,17 @@
 Lcom/android/ims/internal/IImsUt;
 Lcom/android/ims/internal/IImsUtListener$Stub;
 Lcom/android/ims/internal/IImsUtListener;
+Lcom/android/ims/internal/ImsVideoCallProviderWrapper$ImsVideoProviderWrapperCallback;
 Lcom/android/ims/internal/uce/UceServiceBase$UceServiceBinder;
 Lcom/android/ims/internal/uce/UceServiceBase;
-Lcom/android/ims/internal/uce/common/CapInfo$1;
-Lcom/android/ims/internal/uce/common/CapInfo;
-Lcom/android/ims/internal/uce/common/StatusCode$1;
 Lcom/android/ims/internal/uce/common/UceLong$1;
 Lcom/android/ims/internal/uce/common/UceLong;
 Lcom/android/ims/internal/uce/options/IOptionsListener$Stub$Proxy;
 Lcom/android/ims/internal/uce/options/IOptionsListener$Stub;
 Lcom/android/ims/internal/uce/options/IOptionsListener;
-Lcom/android/ims/internal/uce/options/IOptionsService;
 Lcom/android/ims/internal/uce/presence/IPresenceListener$Stub$Proxy;
 Lcom/android/ims/internal/uce/presence/IPresenceListener$Stub;
 Lcom/android/ims/internal/uce/presence/IPresenceListener;
-Lcom/android/ims/internal/uce/presence/IPresenceService$Stub;
-Lcom/android/ims/internal/uce/presence/IPresenceService;
-Lcom/android/ims/internal/uce/presence/PresCapInfo$1;
-Lcom/android/ims/internal/uce/presence/PresCmdId$1;
-Lcom/android/ims/internal/uce/presence/PresCmdStatus$1;
-Lcom/android/ims/internal/uce/presence/PresPublishTriggerType$1;
-Lcom/android/ims/internal/uce/presence/PresSipResponse$1;
 Lcom/android/ims/internal/uce/uceservice/IUceListener$Stub$Proxy;
 Lcom/android/ims/internal/uce/uceservice/IUceListener$Stub;
 Lcom/android/ims/internal/uce/uceservice/IUceListener;
@@ -51509,8 +28778,6 @@
 Lcom/android/internal/app/IAppOpsActiveCallback$Stub$Proxy;
 Lcom/android/internal/app/IAppOpsActiveCallback$Stub;
 Lcom/android/internal/app/IAppOpsActiveCallback;
-Lcom/android/internal/app/IAppOpsAsyncNotedCallback$Stub;
-Lcom/android/internal/app/IAppOpsAsyncNotedCallback;
 Lcom/android/internal/app/IAppOpsCallback$Stub$Proxy;
 Lcom/android/internal/app/IAppOpsCallback$Stub;
 Lcom/android/internal/app/IAppOpsCallback;
@@ -51578,7 +28845,6 @@
 Lcom/android/internal/backup/IBackupTransport$Stub$Proxy;
 Lcom/android/internal/backup/IBackupTransport$Stub;
 Lcom/android/internal/backup/IBackupTransport;
-Lcom/android/internal/compat/ChangeReporter$ChangeReport;
 Lcom/android/internal/compat/ChangeReporter;
 Lcom/android/internal/content/NativeLibraryHelper$Handle;
 Lcom/android/internal/content/NativeLibraryHelper;
@@ -51588,6 +28854,7 @@
 Lcom/android/internal/content/PackageMonitor;
 Lcom/android/internal/content/ReferrerIntent$1;
 Lcom/android/internal/content/ReferrerIntent;
+Lcom/android/internal/database/SortCursor;
 Lcom/android/internal/graphics/ColorUtils;
 Lcom/android/internal/graphics/SfVsyncFrameCallbackProvider;
 Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;
@@ -51601,7 +28868,6 @@
 Lcom/android/internal/infra/-$$Lambda$AbstractRemoteService$ocrHd68Md9x6FfAzVQ6w8MAjFqY;
 Lcom/android/internal/infra/-$$Lambda$EbzSql2RHkXox5Myj8A-7kLC4_A;
 Lcom/android/internal/infra/AbstractMultiplePendingRequestsRemoteService;
-Lcom/android/internal/infra/AbstractRemoteService$AsyncRequest;
 Lcom/android/internal/infra/AbstractRemoteService$BasePendingRequest;
 Lcom/android/internal/infra/AbstractRemoteService$MyAsyncPendingRequest;
 Lcom/android/internal/infra/AbstractRemoteService$PendingRequest;
@@ -51609,11 +28875,8 @@
 Lcom/android/internal/infra/AbstractRemoteService$VultureCallback;
 Lcom/android/internal/infra/AbstractRemoteService;
 Lcom/android/internal/infra/AbstractSinglePendingRequestRemoteService;
-Lcom/android/internal/infra/AndroidFuture;
 Lcom/android/internal/infra/ServiceConnector$Job;
-Lcom/android/internal/infra/ServiceConnector;
 Lcom/android/internal/infra/WhitelistHelper;
-Lcom/android/internal/inputmethod/IInputContentUriToken;
 Lcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub$Proxy;
 Lcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub;
 Lcom/android/internal/inputmethod/IInputMethodPrivilegedOperations;
@@ -51648,7 +28911,6 @@
 Lcom/android/internal/net/INetworkWatchlistManager$Stub$Proxy;
 Lcom/android/internal/net/INetworkWatchlistManager$Stub;
 Lcom/android/internal/net/INetworkWatchlistManager;
-Lcom/android/internal/net/LegacyVpnInfo;
 Lcom/android/internal/net/VpnConfig$1;
 Lcom/android/internal/net/VpnConfig;
 Lcom/android/internal/net/VpnInfo$1;
@@ -51724,7 +28986,6 @@
 Lcom/android/internal/os/BinderCallsStats$UidEntry;
 Lcom/android/internal/os/BinderCallsStats;
 Lcom/android/internal/os/BinderDeathDispatcher$RecipientsInfo;
-Lcom/android/internal/os/BinderDeathDispatcher;
 Lcom/android/internal/os/BinderInternal$BinderProxyLimitListener;
 Lcom/android/internal/os/BinderInternal$BinderProxyLimitListenerDelegate;
 Lcom/android/internal/os/BinderInternal$CallSession;
@@ -51791,7 +29052,6 @@
 Lcom/android/internal/os/ProcStatsUtil;
 Lcom/android/internal/os/ProcTimeInStateReader;
 Lcom/android/internal/os/ProcessCpuTracker$1;
-Lcom/android/internal/os/ProcessCpuTracker$FilterStats;
 Lcom/android/internal/os/ProcessCpuTracker$Stats;
 Lcom/android/internal/os/ProcessCpuTracker;
 Lcom/android/internal/os/RailStats;
@@ -51822,7 +29082,6 @@
 Lcom/android/internal/os/ZygoteSecurityException;
 Lcom/android/internal/os/ZygoteServer$UsapPoolRefillAction;
 Lcom/android/internal/os/ZygoteServer;
-Lcom/android/internal/policy/BackdropFrameRenderer;
 Lcom/android/internal/policy/DecorContext;
 Lcom/android/internal/policy/DecorView$1;
 Lcom/android/internal/policy/DecorView$2;
@@ -51861,7 +29120,6 @@
 Lcom/android/internal/policy/PhoneWindow$RotationWatcher$1;
 Lcom/android/internal/policy/PhoneWindow$RotationWatcher;
 Lcom/android/internal/policy/PhoneWindow;
-Lcom/android/internal/policy/PipSnapAlgorithm;
 Lcom/android/internal/policy/ScreenDecorationsUtils;
 Lcom/android/internal/statusbar/IStatusBar$Stub$Proxy;
 Lcom/android/internal/statusbar/IStatusBar$Stub;
@@ -51872,16 +29130,11 @@
 Lcom/android/internal/statusbar/NotificationVisibility$1;
 Lcom/android/internal/statusbar/NotificationVisibility$NotificationLocation;
 Lcom/android/internal/statusbar/NotificationVisibility;
-Lcom/android/internal/statusbar/RegisterStatusBarResult;
 Lcom/android/internal/statusbar/StatusBarIcon$1;
 Lcom/android/internal/statusbar/StatusBarIcon;
 Lcom/android/internal/telecom/IConnectionService$Stub$Proxy;
 Lcom/android/internal/telecom/IConnectionService$Stub;
 Lcom/android/internal/telecom/IConnectionService;
-Lcom/android/internal/telecom/IConnectionServiceAdapter$Stub;
-Lcom/android/internal/telecom/IConnectionServiceAdapter;
-Lcom/android/internal/telecom/IInCallAdapter$Stub;
-Lcom/android/internal/telecom/IInCallAdapter;
 Lcom/android/internal/telecom/IInCallService$Stub$Proxy;
 Lcom/android/internal/telecom/IInCallService$Stub;
 Lcom/android/internal/telecom/IInCallService;
@@ -51895,22 +29148,139 @@
 Lcom/android/internal/telecom/RemoteServiceCallback$Stub$Proxy;
 Lcom/android/internal/telecom/RemoteServiceCallback$Stub;
 Lcom/android/internal/telecom/RemoteServiceCallback;
+Lcom/android/internal/telephony/-$$Lambda$MultiSimSettingController$55347QtGjuukX-px3jYZkJd_z3U;
+Lcom/android/internal/telephony/-$$Lambda$MultiSimSettingController$DcLtrTEtdlCd4WOev4Zk79vrSko;
+Lcom/android/internal/telephony/-$$Lambda$MultiSimSettingController$WtGtOenjqxSBoW5BUjT-VlNoSTM;
+Lcom/android/internal/telephony/-$$Lambda$PhoneSubInfoController$1zkPy06BwndFkKrGCUI1ORIPJcI;
+Lcom/android/internal/telephony/-$$Lambda$PhoneSubInfoController$2WGP2Bp11k7_Xwi1N4YefElOUuM;
+Lcom/android/internal/telephony/-$$Lambda$PhoneSubInfoController$2xgrYNleR8FFzFT8hEQx3mDtZ8g;
+Lcom/android/internal/telephony/-$$Lambda$PhoneSubInfoController$AjZFvwh3Ujx5W3fleFNksc6bLf0;
+Lcom/android/internal/telephony/-$$Lambda$PhoneSubInfoController$Ja9yTBcEYPqTRBIP-hL0otixVeE;
+Lcom/android/internal/telephony/-$$Lambda$PhoneSubInfoController$P0j9hvO3e-UE9_1i1QM_ujl8Bpo;
+Lcom/android/internal/telephony/-$$Lambda$PhoneSubInfoController$ZOtVAnuhxrXl2L906I6eTOentP0;
+Lcom/android/internal/telephony/-$$Lambda$PhoneSubInfoController$bWluhZvk2X-dQ0UidKfdpd0kwuw;
+Lcom/android/internal/telephony/-$$Lambda$PhoneSubInfoController$hh4N6_N4-PPm_vWjCdCRvS8--Cw;
+Lcom/android/internal/telephony/-$$Lambda$PhoneSubInfoController$rpyQeO7zACcc5v4krwU9_qRMHL8;
+Lcom/android/internal/telephony/-$$Lambda$PhoneSwitcher$WfAxZbJDpCUxBytiUchQ87aGijQ;
+Lcom/android/internal/telephony/-$$Lambda$RIL$803u4JiCud_JSoDndvAhT13ZZqU;
+Lcom/android/internal/telephony/-$$Lambda$RIL$Ir4pOMTf7R0Jtw4O3F7JgMVtXO4;
+Lcom/android/internal/telephony/-$$Lambda$RIL$ZGWeCQ9boMO1_J1_yQ82l_jK-Nc;
+Lcom/android/internal/telephony/-$$Lambda$RIL$zYsQZAc3z9bM5fCaq_J0dn5kjjo;
 Lcom/android/internal/telephony/-$$Lambda$RILConstants$ODSbRKyUeaOFMcez-ZudOmaKCBw;
 Lcom/android/internal/telephony/-$$Lambda$RILConstants$zIAjDPNpW8a5C22QbMmMwM64vD8;
+Lcom/android/internal/telephony/-$$Lambda$RILRequest$VaC9ddQXT8qxCl7rcNKtUadFQoI;
+Lcom/android/internal/telephony/-$$Lambda$RadioIndication$GND6XxOOm1d_Ro76zEUFjA9OrEA;
+Lcom/android/internal/telephony/-$$Lambda$SubscriptionController$Nt_ojdeqo4C2mbuwymYLvwgOLGo;
+Lcom/android/internal/telephony/-$$Lambda$SubscriptionController$VCQsMNqRHpN3RyoXYzh2YUwA2yc;
+Lcom/android/internal/telephony/-$$Lambda$SubscriptionController$u5xE-urXR6ElZ50305_6guo20Fc;
+Lcom/android/internal/telephony/-$$Lambda$SubscriptionInfoUpdater$DY4i_CG7hrAeejGLeh3hMUZySnw;
+Lcom/android/internal/telephony/-$$Lambda$SubscriptionInfoUpdater$UFyB0ValfLD0rdGDibCjTnGFkeo;
+Lcom/android/internal/telephony/-$$Lambda$SubscriptionInfoUpdater$Y5woGfEDKrozRViLH7WF93qPEno;
+Lcom/android/internal/telephony/-$$Lambda$SubscriptionInfoUpdater$ZTY4uxKw17CHcHQzbBUF7m-dN-E;
+Lcom/android/internal/telephony/-$$Lambda$SubscriptionInfoUpdater$ecTEeMEIjOEa2z5W3wjqiicibbY;
+Lcom/android/internal/telephony/-$$Lambda$SubscriptionInfoUpdater$qyDxq2AWyReUxdc6HttVGQeDD3Y;
+Lcom/android/internal/telephony/-$$Lambda$SubscriptionInfoUpdater$tLUuQ7lYu8EjRd038qzQlDm-CtA;
+Lcom/android/internal/telephony/-$$Lambda$TelephonyComponentFactory$InjectedComponents$09rMKC8001jAR0zFrzzlPx26Xjs;
+Lcom/android/internal/telephony/-$$Lambda$TelephonyComponentFactory$InjectedComponents$DKjB_mCxFOHomOyKLPFU9-9Dywc;
+Lcom/android/internal/telephony/-$$Lambda$TelephonyComponentFactory$InjectedComponents$UYUq9z2WZwxqOLXquU0tTNN9wAs;
+Lcom/android/internal/telephony/-$$Lambda$TelephonyComponentFactory$InjectedComponents$eUdIxJOKoyVP5UmFJtWXBUO93Qk;
+Lcom/android/internal/telephony/-$$Lambda$TelephonyComponentFactory$InjectedComponents$nLdppNQT1Bv7QyIU3LwAwVD2K60;
+Lcom/android/internal/telephony/-$$Lambda$UV1wDVoVlbcxpr8zevj_aMFtUGw;
+Lcom/android/internal/telephony/-$$Lambda$WWHOcG5P4-jgjzPPgLwm-wN15OM;
+Lcom/android/internal/telephony/ATParseEx;
+Lcom/android/internal/telephony/AppSmsManager;
+Lcom/android/internal/telephony/BaseCommands;
+Lcom/android/internal/telephony/BlockChecker;
+Lcom/android/internal/telephony/Call$SrvccState;
+Lcom/android/internal/telephony/Call$State;
+Lcom/android/internal/telephony/Call;
+Lcom/android/internal/telephony/CallForwardInfo;
+Lcom/android/internal/telephony/CallManager$CallManagerHandler;
+Lcom/android/internal/telephony/CallManager;
+Lcom/android/internal/telephony/CallStateException;
+Lcom/android/internal/telephony/CallTracker;
+Lcom/android/internal/telephony/CarrierActionAgent$1;
+Lcom/android/internal/telephony/CarrierActionAgent;
 Lcom/android/internal/telephony/CarrierAppUtils;
+Lcom/android/internal/telephony/CarrierInfoManager;
+Lcom/android/internal/telephony/CarrierKeyDownloadManager$1;
+Lcom/android/internal/telephony/CarrierKeyDownloadManager;
+Lcom/android/internal/telephony/CarrierResolver$1;
+Lcom/android/internal/telephony/CarrierResolver$2;
+Lcom/android/internal/telephony/CarrierResolver$CarrierMatchingRule;
+Lcom/android/internal/telephony/CarrierResolver;
+Lcom/android/internal/telephony/CarrierServiceBindHelper$1;
+Lcom/android/internal/telephony/CarrierServiceBindHelper$2;
+Lcom/android/internal/telephony/CarrierServiceBindHelper$AppBinding;
+Lcom/android/internal/telephony/CarrierServiceBindHelper$CarrierServiceConnection;
+Lcom/android/internal/telephony/CarrierServiceBindHelper$CarrierServicePackageMonitor;
+Lcom/android/internal/telephony/CarrierServiceBindHelper;
+Lcom/android/internal/telephony/CarrierServiceStateTracker$1;
+Lcom/android/internal/telephony/CarrierServiceStateTracker$2;
+Lcom/android/internal/telephony/CarrierServiceStateTracker$3;
+Lcom/android/internal/telephony/CarrierServiceStateTracker$EmergencyNetworkNotification;
+Lcom/android/internal/telephony/CarrierServiceStateTracker$NotificationType;
+Lcom/android/internal/telephony/CarrierServiceStateTracker$PrefNetworkNotification;
+Lcom/android/internal/telephony/CarrierServiceStateTracker;
+Lcom/android/internal/telephony/CarrierServicesSmsFilter$CallbackTimeoutHandler;
+Lcom/android/internal/telephony/CarrierServicesSmsFilter$CarrierServicesSmsFilterCallbackInterface;
+Lcom/android/internal/telephony/CarrierServicesSmsFilter;
+Lcom/android/internal/telephony/CarrierSignalAgent$1;
+Lcom/android/internal/telephony/CarrierSignalAgent;
+Lcom/android/internal/telephony/CarrierSmsUtils;
 Lcom/android/internal/telephony/CellNetworkScanResult$1;
 Lcom/android/internal/telephony/CellNetworkScanResult;
+Lcom/android/internal/telephony/CellularNetworkService$CellularNetworkServiceProvider$1;
+Lcom/android/internal/telephony/CellularNetworkService$CellularNetworkServiceProvider;
+Lcom/android/internal/telephony/CellularNetworkService;
+Lcom/android/internal/telephony/CellularNetworkValidator$ValidationCallback;
+Lcom/android/internal/telephony/CellularNetworkValidator;
+Lcom/android/internal/telephony/ClientWakelockAccountant;
+Lcom/android/internal/telephony/ClientWakelockTracker;
+Lcom/android/internal/telephony/CommandException$Error;
+Lcom/android/internal/telephony/CommandException;
+Lcom/android/internal/telephony/CommandsInterface;
+Lcom/android/internal/telephony/Connection$Listener;
+Lcom/android/internal/telephony/Connection$PostDialState;
+Lcom/android/internal/telephony/Connection;
 Lcom/android/internal/telephony/DctConstants$Activity;
 Lcom/android/internal/telephony/DctConstants$State;
+Lcom/android/internal/telephony/DebugService;
+Lcom/android/internal/telephony/DefaultPhoneNotifier$1;
+Lcom/android/internal/telephony/DefaultPhoneNotifier;
+Lcom/android/internal/telephony/DeviceStateMonitor$1;
+Lcom/android/internal/telephony/DeviceStateMonitor$2;
+Lcom/android/internal/telephony/DeviceStateMonitor$3;
+Lcom/android/internal/telephony/DeviceStateMonitor$AccessNetworkThresholds;
+Lcom/android/internal/telephony/DeviceStateMonitor;
+Lcom/android/internal/telephony/DriverCall$State;
+Lcom/android/internal/telephony/DriverCall;
 Lcom/android/internal/telephony/EncodeException;
 Lcom/android/internal/telephony/ExponentialBackoff$1;
 Lcom/android/internal/telephony/ExponentialBackoff$HandlerAdapter;
 Lcom/android/internal/telephony/ExponentialBackoff;
+Lcom/android/internal/telephony/GlobalSettingsHelper;
 Lcom/android/internal/telephony/GsmAlphabet;
+Lcom/android/internal/telephony/GsmCdmaCall;
+Lcom/android/internal/telephony/GsmCdmaCallTracker$1;
+Lcom/android/internal/telephony/GsmCdmaCallTracker$2;
+Lcom/android/internal/telephony/GsmCdmaCallTracker$3;
+Lcom/android/internal/telephony/GsmCdmaCallTracker;
+Lcom/android/internal/telephony/GsmCdmaConnection;
+Lcom/android/internal/telephony/GsmCdmaPhone$1;
+Lcom/android/internal/telephony/GsmCdmaPhone$2;
+Lcom/android/internal/telephony/GsmCdmaPhone$3;
+Lcom/android/internal/telephony/GsmCdmaPhone$Cfu;
+Lcom/android/internal/telephony/GsmCdmaPhone;
+Lcom/android/internal/telephony/HalVersion;
+Lcom/android/internal/telephony/HardwareConfig;
 Lcom/android/internal/telephony/HbpcdUtils;
 Lcom/android/internal/telephony/ICarrierConfigLoader$Stub$Proxy;
 Lcom/android/internal/telephony/ICarrierConfigLoader$Stub;
 Lcom/android/internal/telephony/ICarrierConfigLoader;
+Lcom/android/internal/telephony/IIccPhoneBook$Stub$Proxy;
+Lcom/android/internal/telephony/IIccPhoneBook$Stub;
+Lcom/android/internal/telephony/IIccPhoneBook;
 Lcom/android/internal/telephony/IIntegerConsumer$Stub$Proxy;
 Lcom/android/internal/telephony/IIntegerConsumer$Stub;
 Lcom/android/internal/telephony/IIntegerConsumer;
@@ -51923,8 +29293,6 @@
 Lcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;
 Lcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub;
 Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;
-Lcom/android/internal/telephony/IOns$Stub;
-Lcom/android/internal/telephony/IOns;
 Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;
 Lcom/android/internal/telephony/IPhoneStateListener$Stub;
 Lcom/android/internal/telephony/IPhoneStateListener;
@@ -51938,6 +29306,7 @@
 Lcom/android/internal/telephony/ISms$Stub;
 Lcom/android/internal/telephony/ISms;
 Lcom/android/internal/telephony/ISmsImplBase;
+Lcom/android/internal/telephony/IState;
 Lcom/android/internal/telephony/ISub$Stub$Proxy;
 Lcom/android/internal/telephony/ISub$Stub;
 Lcom/android/internal/telephony/ISub;
@@ -51948,41 +29317,537 @@
 Lcom/android/internal/telephony/ITelephonyRegistry$Stub;
 Lcom/android/internal/telephony/ITelephonyRegistry;
 Lcom/android/internal/telephony/IWapPushManager;
+Lcom/android/internal/telephony/IccCard;
 Lcom/android/internal/telephony/IccCardConstants$State;
+Lcom/android/internal/telephony/IccPhoneBookInterfaceManager$1;
+Lcom/android/internal/telephony/IccPhoneBookInterfaceManager$Request;
+Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;
+Lcom/android/internal/telephony/IccProvider;
+Lcom/android/internal/telephony/IccSmsInterfaceManager$1;
+Lcom/android/internal/telephony/IccSmsInterfaceManager$CdmaBroadcastRangeManager;
+Lcom/android/internal/telephony/IccSmsInterfaceManager$CellBroadcastRangeManager;
+Lcom/android/internal/telephony/IccSmsInterfaceManager;
+Lcom/android/internal/telephony/ImsSmsDispatcher$1;
+Lcom/android/internal/telephony/ImsSmsDispatcher$2;
+Lcom/android/internal/telephony/ImsSmsDispatcher$3;
+Lcom/android/internal/telephony/ImsSmsDispatcher$4;
+Lcom/android/internal/telephony/ImsSmsDispatcher;
+Lcom/android/internal/telephony/InboundSmsHandler$1;
+Lcom/android/internal/telephony/InboundSmsHandler$2;
+Lcom/android/internal/telephony/InboundSmsHandler$CarrierServicesSmsFilterCallback;
+Lcom/android/internal/telephony/InboundSmsHandler$DefaultState;
+Lcom/android/internal/telephony/InboundSmsHandler$DeliveringState;
+Lcom/android/internal/telephony/InboundSmsHandler$IdleState;
+Lcom/android/internal/telephony/InboundSmsHandler$NewMessageNotificationActionReceiver;
+Lcom/android/internal/telephony/InboundSmsHandler$SmsBroadcastReceiver;
+Lcom/android/internal/telephony/InboundSmsHandler$StartupState;
+Lcom/android/internal/telephony/InboundSmsHandler$WaitingState;
+Lcom/android/internal/telephony/InboundSmsHandler;
+Lcom/android/internal/telephony/InboundSmsTracker;
+Lcom/android/internal/telephony/IntRangeManager$ClientRange;
+Lcom/android/internal/telephony/IntRangeManager$IntRange;
+Lcom/android/internal/telephony/IntRangeManager;
+Lcom/android/internal/telephony/IntentBroadcaster$1;
+Lcom/android/internal/telephony/IntentBroadcaster;
+Lcom/android/internal/telephony/LastCallFailCause;
+Lcom/android/internal/telephony/LinkCapacityEstimate;
+Lcom/android/internal/telephony/LocalLog;
+Lcom/android/internal/telephony/LocaleTracker$1;
+Lcom/android/internal/telephony/LocaleTracker;
+Lcom/android/internal/telephony/MccTable$MccEntry;
+Lcom/android/internal/telephony/MccTable;
+Lcom/android/internal/telephony/MmiCode;
+Lcom/android/internal/telephony/MultiSimSettingController$1;
+Lcom/android/internal/telephony/MultiSimSettingController$UpdateDefaultAction;
+Lcom/android/internal/telephony/MultiSimSettingController;
+Lcom/android/internal/telephony/NetworkRegistrationManager$1;
+Lcom/android/internal/telephony/NetworkRegistrationManager$NetworkRegStateCallback;
+Lcom/android/internal/telephony/NetworkRegistrationManager$NetworkServiceConnection;
+Lcom/android/internal/telephony/NetworkRegistrationManager$RegManagerDeathRecipient;
+Lcom/android/internal/telephony/NetworkRegistrationManager;
+Lcom/android/internal/telephony/NetworkScanRequestTracker$1;
+Lcom/android/internal/telephony/NetworkScanRequestTracker$NetworkScanRequestScheduler;
+Lcom/android/internal/telephony/NetworkScanRequestTracker;
+Lcom/android/internal/telephony/NitzData;
+Lcom/android/internal/telephony/NitzStateMachine$DeviceState;
+Lcom/android/internal/telephony/NitzStateMachine;
+Lcom/android/internal/telephony/NitzStateMachineImpl;
+Lcom/android/internal/telephony/OemHookIndication;
+Lcom/android/internal/telephony/OemHookResponse;
 Lcom/android/internal/telephony/OperatorInfo$1;
 Lcom/android/internal/telephony/OperatorInfo$State;
 Lcom/android/internal/telephony/OperatorInfo;
+Lcom/android/internal/telephony/Phone;
+Lcom/android/internal/telephony/PhoneConfigurationManager;
 Lcom/android/internal/telephony/PhoneConstantConversions$1;
 Lcom/android/internal/telephony/PhoneConstantConversions;
 Lcom/android/internal/telephony/PhoneConstants$DataState;
 Lcom/android/internal/telephony/PhoneConstants$State;
+Lcom/android/internal/telephony/PhoneFactory;
+Lcom/android/internal/telephony/PhoneInternalInterface$DataActivityState;
+Lcom/android/internal/telephony/PhoneInternalInterface$DialArgs$Builder;
+Lcom/android/internal/telephony/PhoneInternalInterface$DialArgs;
+Lcom/android/internal/telephony/PhoneInternalInterface$SuppService;
+Lcom/android/internal/telephony/PhoneInternalInterface;
+Lcom/android/internal/telephony/PhoneNotifier;
+Lcom/android/internal/telephony/PhoneSubInfoController$CallPhoneMethodHelper;
+Lcom/android/internal/telephony/PhoneSubInfoController$PermissionCheckHelper;
+Lcom/android/internal/telephony/PhoneSubInfoController;
+Lcom/android/internal/telephony/PhoneSwitcher$1;
+Lcom/android/internal/telephony/PhoneSwitcher$2;
+Lcom/android/internal/telephony/PhoneSwitcher$DefaultNetworkCallback;
+Lcom/android/internal/telephony/PhoneSwitcher$EmergencyOverrideRequest;
+Lcom/android/internal/telephony/PhoneSwitcher$PhoneState;
+Lcom/android/internal/telephony/PhoneSwitcher$PhoneSwitcherNetworkRequestListener;
+Lcom/android/internal/telephony/PhoneSwitcher;
+Lcom/android/internal/telephony/ProxyController$1;
+Lcom/android/internal/telephony/ProxyController;
+Lcom/android/internal/telephony/RIL$RadioProxyDeathRecipient;
+Lcom/android/internal/telephony/RIL$RilHandler;
+Lcom/android/internal/telephony/RIL;
 Lcom/android/internal/telephony/RILConstants;
-Lcom/android/internal/telephony/SmsAddress;
+Lcom/android/internal/telephony/RILRequest;
+Lcom/android/internal/telephony/RadioBugDetector;
+Lcom/android/internal/telephony/RadioCapability;
+Lcom/android/internal/telephony/RadioConfig$ServiceDeathRecipient;
+Lcom/android/internal/telephony/RadioConfig;
+Lcom/android/internal/telephony/RadioConfigIndication;
+Lcom/android/internal/telephony/RadioConfigResponse;
+Lcom/android/internal/telephony/RadioIndication;
+Lcom/android/internal/telephony/RadioResponse;
+Lcom/android/internal/telephony/RatRatcheter$1;
+Lcom/android/internal/telephony/RatRatcheter;
+Lcom/android/internal/telephony/RegistrantList;
+Lcom/android/internal/telephony/RestrictedState;
+Lcom/android/internal/telephony/RetryManager$RetryRec;
+Lcom/android/internal/telephony/RetryManager;
+Lcom/android/internal/telephony/RilWakelockInfo;
+Lcom/android/internal/telephony/SMSDispatcher$DataSmsSender;
+Lcom/android/internal/telephony/SMSDispatcher$SettingsObserver;
+Lcom/android/internal/telephony/SMSDispatcher$SmsSender;
+Lcom/android/internal/telephony/SMSDispatcher$SmsSenderCallback;
+Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;
+Lcom/android/internal/telephony/SMSDispatcher$TextSmsSender;
+Lcom/android/internal/telephony/SMSDispatcher;
+Lcom/android/internal/telephony/ServiceStateTracker$1;
+Lcom/android/internal/telephony/ServiceStateTracker$SstSubscriptionsChangedListener;
+Lcom/android/internal/telephony/ServiceStateTracker;
+Lcom/android/internal/telephony/SettingsObserver;
+Lcom/android/internal/telephony/SimActivationTracker$1;
+Lcom/android/internal/telephony/SimActivationTracker;
 Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;
 Lcom/android/internal/telephony/SmsApplication$SmsPackageMonitor;
 Lcom/android/internal/telephony/SmsApplication;
+Lcom/android/internal/telephony/SmsBroadcastUndelivered$1;
+Lcom/android/internal/telephony/SmsBroadcastUndelivered$ScanRawTableThread;
+Lcom/android/internal/telephony/SmsBroadcastUndelivered$SmsReferenceKey;
+Lcom/android/internal/telephony/SmsBroadcastUndelivered;
 Lcom/android/internal/telephony/SmsConstants$MessageClass;
+Lcom/android/internal/telephony/SmsController;
+Lcom/android/internal/telephony/SmsDispatchersController$1;
+Lcom/android/internal/telephony/SmsDispatchersController;
 Lcom/android/internal/telephony/SmsMessageBase;
 Lcom/android/internal/telephony/SmsNumberUtils;
+Lcom/android/internal/telephony/SmsPermissions;
+Lcom/android/internal/telephony/SmsResponse;
+Lcom/android/internal/telephony/SmsStorageMonitor$1;
+Lcom/android/internal/telephony/SmsStorageMonitor;
+Lcom/android/internal/telephony/SmsUsageMonitor$SettingsObserver;
+Lcom/android/internal/telephony/SmsUsageMonitor$SettingsObserverHandler;
+Lcom/android/internal/telephony/SmsUsageMonitor;
+Lcom/android/internal/telephony/State;
+Lcom/android/internal/telephony/StateMachine;
+Lcom/android/internal/telephony/SubscriptionController;
+Lcom/android/internal/telephony/SubscriptionInfoUpdater$1;
+Lcom/android/internal/telephony/SubscriptionInfoUpdater$UpdateEmbeddedSubsCallback;
+Lcom/android/internal/telephony/SubscriptionInfoUpdater;
+Lcom/android/internal/telephony/TelephonyCapabilities;
+Lcom/android/internal/telephony/TelephonyComponentFactory$InjectedComponents;
+Lcom/android/internal/telephony/TelephonyComponentFactory;
+Lcom/android/internal/telephony/TelephonyDevController;
 Lcom/android/internal/telephony/TelephonyPermissions;
+Lcom/android/internal/telephony/TelephonyTester$1;
+Lcom/android/internal/telephony/TelephonyTester;
+Lcom/android/internal/telephony/TimeServiceHelper;
+Lcom/android/internal/telephony/TimeZoneLookupHelper$CountryResult;
+Lcom/android/internal/telephony/TimeZoneLookupHelper;
+Lcom/android/internal/telephony/UUSInfo;
+Lcom/android/internal/telephony/UiccPhoneBookController;
+Lcom/android/internal/telephony/VisualVoicemailSmsFilter$1;
+Lcom/android/internal/telephony/VisualVoicemailSmsFilter$PhoneAccountHandleConverter;
+Lcom/android/internal/telephony/VisualVoicemailSmsFilter;
+Lcom/android/internal/telephony/WakeLockStateMachine$1;
+Lcom/android/internal/telephony/WakeLockStateMachine$DefaultState;
+Lcom/android/internal/telephony/WakeLockStateMachine$IdleState;
+Lcom/android/internal/telephony/WakeLockStateMachine$WaitingState;
+Lcom/android/internal/telephony/WakeLockStateMachine;
+Lcom/android/internal/telephony/WapPushOverSms$1;
+Lcom/android/internal/telephony/WapPushOverSms;
+Lcom/android/internal/telephony/cat/AppInterface$CommandType;
+Lcom/android/internal/telephony/cat/AppInterface;
+Lcom/android/internal/telephony/cat/BIPClientParams;
+Lcom/android/internal/telephony/cat/BerTlv;
+Lcom/android/internal/telephony/cat/CallSetupParams;
+Lcom/android/internal/telephony/cat/CatCmdMessage$1;
+Lcom/android/internal/telephony/cat/CatCmdMessage;
+Lcom/android/internal/telephony/cat/CatException;
+Lcom/android/internal/telephony/cat/CatLog;
+Lcom/android/internal/telephony/cat/CatResponseMessage;
+Lcom/android/internal/telephony/cat/CatService$1;
+Lcom/android/internal/telephony/cat/CatService;
+Lcom/android/internal/telephony/cat/CommandParams;
+Lcom/android/internal/telephony/cat/CommandParamsFactory$1;
+Lcom/android/internal/telephony/cat/CommandParamsFactory;
+Lcom/android/internal/telephony/cat/ComprehensionTlv;
+Lcom/android/internal/telephony/cat/ComprehensionTlvTag;
+Lcom/android/internal/telephony/cat/DTTZResponseData;
+Lcom/android/internal/telephony/cat/DisplayTextParams;
+Lcom/android/internal/telephony/cat/IconLoader;
+Lcom/android/internal/telephony/cat/LanguageParams;
+Lcom/android/internal/telephony/cat/LanguageResponseData;
+Lcom/android/internal/telephony/cat/LaunchBrowserParams;
+Lcom/android/internal/telephony/cat/ResponseData;
+Lcom/android/internal/telephony/cat/ResultCode;
+Lcom/android/internal/telephony/cat/ResultException;
+Lcom/android/internal/telephony/cat/RilMessage;
+Lcom/android/internal/telephony/cat/RilMessageDecoder$StateCmdParamsReady;
+Lcom/android/internal/telephony/cat/RilMessageDecoder$StateStart;
+Lcom/android/internal/telephony/cat/RilMessageDecoder;
+Lcom/android/internal/telephony/cat/ValueParser;
+Lcom/android/internal/telephony/cdma/CdmaCallWaitingNotification;
+Lcom/android/internal/telephony/cdma/CdmaInboundSmsHandler;
+Lcom/android/internal/telephony/cdma/CdmaSMSDispatcher;
+Lcom/android/internal/telephony/cdma/CdmaSmsBroadcastConfigInfo;
+Lcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;
+Lcom/android/internal/telephony/cdma/EriInfo;
+Lcom/android/internal/telephony/cdma/EriManager$EriFile;
+Lcom/android/internal/telephony/cdma/EriManager;
 Lcom/android/internal/telephony/cdma/SmsMessage;
+Lcom/android/internal/telephony/cdnr/CarrierDisplayNameData$1;
+Lcom/android/internal/telephony/cdnr/CarrierDisplayNameData$Builder;
+Lcom/android/internal/telephony/cdnr/CarrierDisplayNameData;
+Lcom/android/internal/telephony/cdnr/CarrierDisplayNameResolver$CarrierDisplayNameConditionRule;
+Lcom/android/internal/telephony/cdnr/CarrierDisplayNameResolver;
+Lcom/android/internal/telephony/dataconnection/-$$Lambda$DataConnection$-tFSpFGzTv_UdpzJlTMOvg8VO98;
+Lcom/android/internal/telephony/dataconnection/-$$Lambda$XZAGhHrbkIDyusER4MAM6luKcT0;
+Lcom/android/internal/telephony/dataconnection/AccessNetworksManager$1;
+Lcom/android/internal/telephony/dataconnection/AccessNetworksManager;
+Lcom/android/internal/telephony/dataconnection/ApnContext;
+Lcom/android/internal/telephony/dataconnection/ApnSettingUtils;
+Lcom/android/internal/telephony/dataconnection/CellularDataService$CellularDataServiceProvider$1;
+Lcom/android/internal/telephony/dataconnection/CellularDataService$CellularDataServiceProvider;
+Lcom/android/internal/telephony/dataconnection/CellularDataService;
+Lcom/android/internal/telephony/dataconnection/DataConnection$2;
+Lcom/android/internal/telephony/dataconnection/DataConnection$ConnectionParams;
+Lcom/android/internal/telephony/dataconnection/DataConnection$DcActivatingState;
+Lcom/android/internal/telephony/dataconnection/DataConnection$DcActiveState;
+Lcom/android/internal/telephony/dataconnection/DataConnection$DcDefaultState;
+Lcom/android/internal/telephony/dataconnection/DataConnection$DcDisconnectingState;
+Lcom/android/internal/telephony/dataconnection/DataConnection$DcDisconnectionErrorCreatingConnection;
+Lcom/android/internal/telephony/dataconnection/DataConnection$DcInactiveState;
+Lcom/android/internal/telephony/dataconnection/DataConnection$DisconnectParams;
+Lcom/android/internal/telephony/dataconnection/DataConnection$SetupResult;
+Lcom/android/internal/telephony/dataconnection/DataConnection$UpdateLinkPropertyResult;
+Lcom/android/internal/telephony/dataconnection/DataConnection;
+Lcom/android/internal/telephony/dataconnection/DataConnectionReasons$DataAllowedReasonType;
+Lcom/android/internal/telephony/dataconnection/DataConnectionReasons$DataDisallowedReasonType;
+Lcom/android/internal/telephony/dataconnection/DataConnectionReasons;
+Lcom/android/internal/telephony/dataconnection/DataEnabledOverride$OverrideConditions;
+Lcom/android/internal/telephony/dataconnection/DataEnabledOverride$OverrideRule;
+Lcom/android/internal/telephony/dataconnection/DataEnabledOverride;
+Lcom/android/internal/telephony/dataconnection/DataEnabledSettings$1;
+Lcom/android/internal/telephony/dataconnection/DataEnabledSettings$2;
+Lcom/android/internal/telephony/dataconnection/DataEnabledSettings;
+Lcom/android/internal/telephony/dataconnection/DataServiceManager$1;
+Lcom/android/internal/telephony/dataconnection/DataServiceManager$CellularDataServiceCallback;
+Lcom/android/internal/telephony/dataconnection/DataServiceManager$CellularDataServiceConnection;
+Lcom/android/internal/telephony/dataconnection/DataServiceManager$DataServiceManagerDeathRecipient;
+Lcom/android/internal/telephony/dataconnection/DataServiceManager;
+Lcom/android/internal/telephony/dataconnection/DcController$1;
+Lcom/android/internal/telephony/dataconnection/DcController$DccDefaultState;
+Lcom/android/internal/telephony/dataconnection/DcController;
+Lcom/android/internal/telephony/dataconnection/DcFailBringUp;
+Lcom/android/internal/telephony/dataconnection/DcNetworkAgent;
+Lcom/android/internal/telephony/dataconnection/DcRequest;
+Lcom/android/internal/telephony/dataconnection/DcTesterDeactivateAll$1;
+Lcom/android/internal/telephony/dataconnection/DcTesterDeactivateAll;
+Lcom/android/internal/telephony/dataconnection/DcTesterFailBringUpAll$1;
+Lcom/android/internal/telephony/dataconnection/DcTesterFailBringUpAll;
+Lcom/android/internal/telephony/dataconnection/DcTracker$1;
+Lcom/android/internal/telephony/dataconnection/DcTracker$2;
+Lcom/android/internal/telephony/dataconnection/DcTracker$3;
+Lcom/android/internal/telephony/dataconnection/DcTracker$4;
+Lcom/android/internal/telephony/dataconnection/DcTracker$5;
+Lcom/android/internal/telephony/dataconnection/DcTracker$ApnChangeObserver;
+Lcom/android/internal/telephony/dataconnection/DcTracker$DataStallRecoveryHandler;
+Lcom/android/internal/telephony/dataconnection/DcTracker$DctOnSubscriptionsChangedListener;
+Lcom/android/internal/telephony/dataconnection/DcTracker$ProvisionNotificationBroadcastReceiver;
+Lcom/android/internal/telephony/dataconnection/DcTracker$RetryFailures;
+Lcom/android/internal/telephony/dataconnection/DcTracker$TxRxSum;
+Lcom/android/internal/telephony/dataconnection/DcTracker;
+Lcom/android/internal/telephony/dataconnection/KeepaliveStatus$1;
+Lcom/android/internal/telephony/dataconnection/KeepaliveStatus;
+Lcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory$InternalHandler;
+Lcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;
+Lcom/android/internal/telephony/dataconnection/TransportManager$HandoverParams;
+Lcom/android/internal/telephony/dataconnection/TransportManager;
+Lcom/android/internal/telephony/emergency/EmergencyNumberTracker$1;
+Lcom/android/internal/telephony/emergency/EmergencyNumberTracker;
+Lcom/android/internal/telephony/euicc/-$$Lambda$EuiccConnector$ConnectedState$4$S52i3hpE3-FGho807KZ1LR5rXQM;
+Lcom/android/internal/telephony/euicc/EuiccCardController$SimSlotStatusChangedBroadcastReceiver;
+Lcom/android/internal/telephony/euicc/EuiccCardController;
+Lcom/android/internal/telephony/euicc/EuiccConnector$1;
+Lcom/android/internal/telephony/euicc/EuiccConnector$AvailableState;
+Lcom/android/internal/telephony/euicc/EuiccConnector$BaseEuiccCommandCallback;
+Lcom/android/internal/telephony/euicc/EuiccConnector$BindingState;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$10;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$11;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$12;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$13;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$1;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$2;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$3;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$4;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$5;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$6;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$7;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$8;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$9;
+Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState;
+Lcom/android/internal/telephony/euicc/EuiccConnector$DeleteRequest;
+Lcom/android/internal/telephony/euicc/EuiccConnector$DisconnectedState;
+Lcom/android/internal/telephony/euicc/EuiccConnector$DownloadRequest;
+Lcom/android/internal/telephony/euicc/EuiccConnector$EuiccPackageMonitor;
+Lcom/android/internal/telephony/euicc/EuiccConnector$GetDefaultListRequest;
+Lcom/android/internal/telephony/euicc/EuiccConnector$GetEuiccProfileInfoListCommandCallback;
+Lcom/android/internal/telephony/euicc/EuiccConnector$GetMetadataRequest;
+Lcom/android/internal/telephony/euicc/EuiccConnector$SwitchRequest;
+Lcom/android/internal/telephony/euicc/EuiccConnector$UnavailableState;
+Lcom/android/internal/telephony/euicc/EuiccConnector$UpdateNicknameRequest;
+Lcom/android/internal/telephony/euicc/EuiccConnector;
+Lcom/android/internal/telephony/euicc/EuiccController$3;
+Lcom/android/internal/telephony/euicc/EuiccController;
 Lcom/android/internal/telephony/euicc/IEuiccCardController$Stub;
 Lcom/android/internal/telephony/euicc/IEuiccCardController;
 Lcom/android/internal/telephony/euicc/IEuiccController$Stub$Proxy;
 Lcom/android/internal/telephony/euicc/IEuiccController$Stub;
 Lcom/android/internal/telephony/euicc/IEuiccController;
+Lcom/android/internal/telephony/gsm/GsmInboundSmsHandler;
+Lcom/android/internal/telephony/gsm/GsmMmiCode;
+Lcom/android/internal/telephony/gsm/GsmSMSDispatcher;
+Lcom/android/internal/telephony/gsm/SimTlv;
 Lcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;
 Lcom/android/internal/telephony/gsm/SmsMessage;
+Lcom/android/internal/telephony/gsm/SuppServiceNotification;
+Lcom/android/internal/telephony/gsm/UsimDataDownloadHandler;
+Lcom/android/internal/telephony/gsm/UsimPhoneBookManager$File;
+Lcom/android/internal/telephony/gsm/UsimPhoneBookManager$PbrRecord;
+Lcom/android/internal/telephony/gsm/UsimPhoneBookManager;
+Lcom/android/internal/telephony/ims/-$$Lambda$ImsResolver$pNx4XUM9FmR6cV_MCAGiEt8F4pg;
+Lcom/android/internal/telephony/ims/-$$Lambda$WamP7BPq0j01TgYE3GvUqU3b-rs;
+Lcom/android/internal/telephony/ims/ImsResolver$1;
+Lcom/android/internal/telephony/ims/ImsResolver$2;
+Lcom/android/internal/telephony/ims/ImsResolver$3;
+Lcom/android/internal/telephony/ims/ImsResolver$4;
+Lcom/android/internal/telephony/ims/ImsResolver$5;
+Lcom/android/internal/telephony/ims/ImsResolver$6;
+Lcom/android/internal/telephony/ims/ImsResolver$7;
+Lcom/android/internal/telephony/ims/ImsResolver$8;
+Lcom/android/internal/telephony/ims/ImsResolver$ImsDynamicQueryManagerFactory;
+Lcom/android/internal/telephony/ims/ImsResolver$ImsServiceControllerFactory;
+Lcom/android/internal/telephony/ims/ImsResolver$ImsServiceInfo;
+Lcom/android/internal/telephony/ims/ImsResolver$SubscriptionManagerProxy;
+Lcom/android/internal/telephony/ims/ImsResolver$TelephonyManagerProxy;
+Lcom/android/internal/telephony/ims/ImsResolver;
+Lcom/android/internal/telephony/ims/ImsServiceController$1;
+Lcom/android/internal/telephony/ims/ImsServiceController$2;
+Lcom/android/internal/telephony/ims/ImsServiceController$3;
+Lcom/android/internal/telephony/ims/ImsServiceController$ImsFeatureContainer;
+Lcom/android/internal/telephony/ims/ImsServiceController$ImsFeatureStatusCallback$1;
+Lcom/android/internal/telephony/ims/ImsServiceController$ImsFeatureStatusCallback;
+Lcom/android/internal/telephony/ims/ImsServiceController$ImsServiceConnection;
+Lcom/android/internal/telephony/ims/ImsServiceController$ImsServiceControllerCallbacks;
+Lcom/android/internal/telephony/ims/ImsServiceController$RebindRetry;
+Lcom/android/internal/telephony/ims/ImsServiceController;
+Lcom/android/internal/telephony/ims/ImsServiceFeatureQueryManager$ImsServiceFeatureQuery;
+Lcom/android/internal/telephony/ims/ImsServiceFeatureQueryManager$Listener;
+Lcom/android/internal/telephony/ims/ImsServiceFeatureQueryManager;
+Lcom/android/internal/telephony/imsphone/-$$Lambda$ImsPhoneCallTracker$QlPVd_3u4_verjHUDnkn6zaSe54;
+Lcom/android/internal/telephony/imsphone/-$$Lambda$ImsPhoneCallTracker$Zw03itjXT6-LrhiYuD-9nKFg2Wg;
+Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker$1;
+Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker$2;
+Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker$ExternalCallStateListener;
+Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker$ExternalConnectionListener;
+Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker$ImsCallNotify;
+Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker;
+Lcom/android/internal/telephony/imsphone/ImsExternalConnection$Listener;
+Lcom/android/internal/telephony/imsphone/ImsExternalConnection;
+Lcom/android/internal/telephony/imsphone/ImsPhone$1;
+Lcom/android/internal/telephony/imsphone/ImsPhone$2;
+Lcom/android/internal/telephony/imsphone/ImsPhone$3;
+Lcom/android/internal/telephony/imsphone/ImsPhone$Cf;
+Lcom/android/internal/telephony/imsphone/ImsPhone;
+Lcom/android/internal/telephony/imsphone/ImsPhoneBase;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCall;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$1;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$2;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$3;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$4;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$5;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$6;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$7;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$8;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$9;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$HoldSwapState;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$MmTelFeatureListener;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$PhoneNumberUtilsProxy;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$PhoneStateListener;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$SharedPreferenceProxy;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCommandInterface;
+Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;
+Lcom/android/internal/telephony/imsphone/ImsPhoneFactory;
+Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;
+Lcom/android/internal/telephony/imsphone/ImsPullCall;
+Lcom/android/internal/telephony/metrics/-$$Lambda$TelephonyMetrics$fLmZDbNadlr6LF7zSJ6jCR1AAsk;
+Lcom/android/internal/telephony/metrics/-$$Lambda$TelephonyMetrics$tQOsX1lKb2eTuPp-1rpkeIAEOoY;
+Lcom/android/internal/telephony/metrics/-$$Lambda$TelephonyMetrics$x2dJi76S2YQdpSTfY8RZ8qC_K6g;
+Lcom/android/internal/telephony/metrics/CallSessionEventBuilder;
+Lcom/android/internal/telephony/metrics/InProgressCallSession;
+Lcom/android/internal/telephony/metrics/InProgressSmsSession;
+Lcom/android/internal/telephony/metrics/ModemPowerMetrics;
+Lcom/android/internal/telephony/metrics/SmsSessionEventBuilder;
+Lcom/android/internal/telephony/metrics/TelephonyEventBuilder;
+Lcom/android/internal/telephony/metrics/TelephonyMetrics$1;
+Lcom/android/internal/telephony/metrics/TelephonyMetrics;
+Lcom/android/internal/telephony/nano/CarrierIdProto$CarrierAttribute;
+Lcom/android/internal/telephony/nano/CarrierIdProto$CarrierId;
+Lcom/android/internal/telephony/nano/CarrierIdProto$CarrierList;
+Lcom/android/internal/telephony/nano/TelephonyProto$ActiveSubscriptionInfo;
+Lcom/android/internal/telephony/nano/TelephonyProto$EmergencyNumberInfo;
+Lcom/android/internal/telephony/nano/TelephonyProto$ImsCapabilities;
+Lcom/android/internal/telephony/nano/TelephonyProto$ImsConnectionState;
+Lcom/android/internal/telephony/nano/TelephonyProto$ImsReasonInfo;
+Lcom/android/internal/telephony/nano/TelephonyProto$ModemPowerStats;
+Lcom/android/internal/telephony/nano/TelephonyProto$RilDataCall;
+Lcom/android/internal/telephony/nano/TelephonyProto$SmsSession$Event;
+Lcom/android/internal/telephony/nano/TelephonyProto$SmsSession;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyCallSession$Event$RilCall;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyCallSession$Event;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyCallSession;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent$CarrierIdMatching;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent$CarrierIdMatchingResult;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent$DataSwitch;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent$OnDemandDataSwitch;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent$RilDeactivateDataCall;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent$RilSetupDataCall;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent$RilSetupDataCallResponse;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyHistogram;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyLog;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState$TelephonyOperator;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState;
+Lcom/android/internal/telephony/nano/TelephonyProto$TelephonySettings;
+Lcom/android/internal/telephony/nano/TelephonyProto$Time;
+Lcom/android/internal/telephony/protobuf/nano/CodedInputByteBufferNano;
+Lcom/android/internal/telephony/protobuf/nano/CodedOutputByteBufferNano$OutOfSpaceException;
+Lcom/android/internal/telephony/protobuf/nano/CodedOutputByteBufferNano;
+Lcom/android/internal/telephony/protobuf/nano/ExtendableMessageNano;
+Lcom/android/internal/telephony/protobuf/nano/InternalNano;
+Lcom/android/internal/telephony/protobuf/nano/InvalidProtocolBufferNanoException;
+Lcom/android/internal/telephony/protobuf/nano/MessageNano;
+Lcom/android/internal/telephony/protobuf/nano/MessageNanoPrinter;
+Lcom/android/internal/telephony/protobuf/nano/WireFormatNano;
+Lcom/android/internal/telephony/sip/SipPhone;
+Lcom/android/internal/telephony/sip/SipPhoneBase;
+Lcom/android/internal/telephony/test/SimulatedRadioControl;
+Lcom/android/internal/telephony/uicc/AdnRecord$1;
+Lcom/android/internal/telephony/uicc/AdnRecord;
+Lcom/android/internal/telephony/uicc/AdnRecordCache;
+Lcom/android/internal/telephony/uicc/AdnRecordLoader;
+Lcom/android/internal/telephony/uicc/AnswerToReset$HistoricalBytes;
+Lcom/android/internal/telephony/uicc/AnswerToReset$InterfaceByte;
+Lcom/android/internal/telephony/uicc/AnswerToReset;
+Lcom/android/internal/telephony/uicc/CarrierTestOverride;
+Lcom/android/internal/telephony/uicc/CsimFileHandler;
+Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;
+Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;
+Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;
+Lcom/android/internal/telephony/uicc/IccCardApplicationStatus;
+Lcom/android/internal/telephony/uicc/IccCardStatus$CardState;
+Lcom/android/internal/telephony/uicc/IccCardStatus$PinState;
+Lcom/android/internal/telephony/uicc/IccCardStatus;
+Lcom/android/internal/telephony/uicc/IccConstants;
+Lcom/android/internal/telephony/uicc/IccException;
+Lcom/android/internal/telephony/uicc/IccFileHandler$LoadLinearFixedContext;
+Lcom/android/internal/telephony/uicc/IccFileHandler;
+Lcom/android/internal/telephony/uicc/IccFileNotFound;
+Lcom/android/internal/telephony/uicc/IccFileTypeMismatch;
+Lcom/android/internal/telephony/uicc/IccIoResult;
+Lcom/android/internal/telephony/uicc/IccRecords$IccRecordLoaded;
+Lcom/android/internal/telephony/uicc/IccRecords;
+Lcom/android/internal/telephony/uicc/IccRefreshResponse;
+Lcom/android/internal/telephony/uicc/IccServiceTable;
+Lcom/android/internal/telephony/uicc/IccSlotStatus$SlotState;
+Lcom/android/internal/telephony/uicc/IccSlotStatus;
 Lcom/android/internal/telephony/uicc/IccUtils;
-Lcom/android/internal/telephony/util/ArrayUtils;
-Lcom/android/internal/telephony/util/HandlerExecutor;
-Lcom/android/internal/telephony/util/RemoteCallbackListExt;
+Lcom/android/internal/telephony/uicc/IccVmNotSupportedException;
+Lcom/android/internal/telephony/uicc/InstallCarrierAppTrampolineActivity;
+Lcom/android/internal/telephony/uicc/InstallCarrierAppUtils;
+Lcom/android/internal/telephony/uicc/IsimFileHandler;
+Lcom/android/internal/telephony/uicc/IsimRecords;
+Lcom/android/internal/telephony/uicc/IsimUiccRecords$EfIsimDomainLoaded;
+Lcom/android/internal/telephony/uicc/IsimUiccRecords$EfIsimImpiLoaded;
+Lcom/android/internal/telephony/uicc/IsimUiccRecords$EfIsimImpuLoaded;
+Lcom/android/internal/telephony/uicc/IsimUiccRecords$EfIsimIstLoaded;
+Lcom/android/internal/telephony/uicc/IsimUiccRecords$EfIsimPcscfLoaded;
+Lcom/android/internal/telephony/uicc/IsimUiccRecords;
+Lcom/android/internal/telephony/uicc/PlmnActRecord$1;
+Lcom/android/internal/telephony/uicc/PlmnActRecord;
+Lcom/android/internal/telephony/uicc/RuimFileHandler;
+Lcom/android/internal/telephony/uicc/RuimRecords;
+Lcom/android/internal/telephony/uicc/SIMFileHandler;
+Lcom/android/internal/telephony/uicc/SIMRecords$1;
+Lcom/android/internal/telephony/uicc/SIMRecords$EfPlLoaded;
+Lcom/android/internal/telephony/uicc/SIMRecords$EfUsimLiLoaded;
+Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState;
+Lcom/android/internal/telephony/uicc/SIMRecords;
+Lcom/android/internal/telephony/uicc/UiccCard;
+Lcom/android/internal/telephony/uicc/UiccCardApplication$1;
+Lcom/android/internal/telephony/uicc/UiccCardApplication$2;
+Lcom/android/internal/telephony/uicc/UiccCardApplication;
+Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules$1;
+Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules$TLV;
+Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules;
+Lcom/android/internal/telephony/uicc/UiccController$1;
+Lcom/android/internal/telephony/uicc/UiccController;
+Lcom/android/internal/telephony/uicc/UiccPkcs15$FileHandler;
+Lcom/android/internal/telephony/uicc/UiccPkcs15$Pkcs15Selector;
+Lcom/android/internal/telephony/uicc/UiccPkcs15;
+Lcom/android/internal/telephony/uicc/UiccProfile$1;
+Lcom/android/internal/telephony/uicc/UiccProfile$2;
+Lcom/android/internal/telephony/uicc/UiccProfile$3;
+Lcom/android/internal/telephony/uicc/UiccProfile$4;
+Lcom/android/internal/telephony/uicc/UiccProfile$5;
+Lcom/android/internal/telephony/uicc/UiccProfile;
+Lcom/android/internal/telephony/uicc/UiccSlot;
+Lcom/android/internal/telephony/uicc/UiccStateChangedLauncher;
+Lcom/android/internal/telephony/uicc/UsimFileHandler;
+Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;
+Lcom/android/internal/telephony/uicc/UsimServiceTable;
+Lcom/android/internal/telephony/uicc/VoiceMailConstants;
+Lcom/android/internal/telephony/uicc/asn1/InvalidAsn1DataException;
+Lcom/android/internal/telephony/uicc/asn1/TagNotFoundException;
+Lcom/android/internal/telephony/uicc/euicc/EuiccCard;
+Lcom/android/internal/telephony/uicc/euicc/EuiccSpecVersion;
+Lcom/android/internal/telephony/util/NotificationChannelController$1;
+Lcom/android/internal/telephony/util/NotificationChannelController;
+Lcom/android/internal/telephony/util/SMSDispatcherUtil;
 Lcom/android/internal/telephony/util/TelephonyUtils;
+Lcom/android/internal/telephony/util/VoicemailNotificationSettingsUtil;
 Lcom/android/internal/textservice/ISpellCheckerService$Stub$Proxy;
 Lcom/android/internal/textservice/ISpellCheckerService$Stub;
 Lcom/android/internal/textservice/ISpellCheckerService;
-Lcom/android/internal/textservice/ISpellCheckerServiceCallback$Stub;
-Lcom/android/internal/textservice/ISpellCheckerServiceCallback;
 Lcom/android/internal/textservice/ISpellCheckerSession$Stub$Proxy;
 Lcom/android/internal/textservice/ISpellCheckerSession$Stub;
 Lcom/android/internal/textservice/ISpellCheckerSession;
@@ -52001,12 +29866,10 @@
 Lcom/android/internal/util/-$$Lambda$DumpUtils$vCLO_0ezRxkpSERUWCFrJ0ph5jg;
 Lcom/android/internal/util/-$$Lambda$FunctionalUtils$koCSI8D7Nu5vOJTVTEj0m3leo_U;
 Lcom/android/internal/util/-$$Lambda$JwOUSWW2-Jzu15y4Kn4JuPh8tWM;
-Lcom/android/internal/util/-$$Lambda$ProviderAccessStats$9AhC6lKURctNKuYjVd-wu7jn6_c;
 Lcom/android/internal/util/-$$Lambda$TCbPpgWlKJUHZgFKCczglAvxLfw;
 Lcom/android/internal/util/-$$Lambda$eRa1rlfDk6Og2yFeXGHqUGPzRF0;
 Lcom/android/internal/util/-$$Lambda$grRTg3idX3yJe9Zyx-tmLBiD1DM;
 Lcom/android/internal/util/-$$Lambda$kVylv1rl9MOSbHFZoVyK5dl1kfY;
-Lcom/android/internal/util/AnnotationValidations;
 Lcom/android/internal/util/ArrayUtils;
 Lcom/android/internal/util/AsyncChannel$AsyncChannelConnection;
 Lcom/android/internal/util/AsyncChannel$DeathMonitor;
@@ -52014,7 +29877,6 @@
 Lcom/android/internal/util/AsyncChannel$SyncMessenger;
 Lcom/android/internal/util/AsyncChannel;
 Lcom/android/internal/util/BitUtils;
-Lcom/android/internal/util/BitwiseInputStream$AccessException;
 Lcom/android/internal/util/CollectionUtils;
 Lcom/android/internal/util/ConcurrentUtils$1$1;
 Lcom/android/internal/util/ConcurrentUtils$1;
@@ -52034,7 +29896,6 @@
 Lcom/android/internal/util/FileRotator$Rewriter;
 Lcom/android/internal/util/FileRotator$Writer;
 Lcom/android/internal/util/FileRotator;
-Lcom/android/internal/util/FunctionalUtils$RemoteExceptionIgnoringConsumer;
 Lcom/android/internal/util/FunctionalUtils$ThrowingConsumer;
 Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;
 Lcom/android/internal/util/FunctionalUtils$ThrowingSupplier;
@@ -52059,8 +29920,6 @@
 Lcom/android/internal/util/Preconditions;
 Lcom/android/internal/util/ProcFileReader;
 Lcom/android/internal/util/ProgressReporter;
-Lcom/android/internal/util/ProviderAccessStats$PerThreadData;
-Lcom/android/internal/util/ProviderAccessStats;
 Lcom/android/internal/util/RingBuffer;
 Lcom/android/internal/util/RingBufferIndices;
 Lcom/android/internal/util/ScreenshotHelper;
@@ -52085,7 +29944,6 @@
 Lcom/android/internal/util/XmlUtils;
 Lcom/android/internal/util/function/DecConsumer;
 Lcom/android/internal/util/function/DecFunction;
-Lcom/android/internal/util/function/DecPredicate;
 Lcom/android/internal/util/function/HeptConsumer;
 Lcom/android/internal/util/function/HeptFunction;
 Lcom/android/internal/util/function/HeptPredicate;
@@ -52109,7 +29967,6 @@
 Lcom/android/internal/util/function/TriPredicate;
 Lcom/android/internal/util/function/UndecConsumer;
 Lcom/android/internal/util/function/UndecFunction;
-Lcom/android/internal/util/function/UndecPredicate;
 Lcom/android/internal/util/function/pooled/ArgumentPlaceholder;
 Lcom/android/internal/util/function/pooled/OmniFunction;
 Lcom/android/internal/util/function/pooled/PooledConsumer;
@@ -52125,8 +29982,6 @@
 Lcom/android/internal/util/function/pooled/PooledSupplier$OfLong;
 Lcom/android/internal/util/function/pooled/PooledSupplier;
 Lcom/android/internal/view/ActionBarPolicy;
-Lcom/android/internal/view/AppearanceRegion;
-Lcom/android/internal/view/BaseIWindow;
 Lcom/android/internal/view/BaseSurfaceHolder;
 Lcom/android/internal/view/IInputConnectionWrapper$MyHandler;
 Lcom/android/internal/view/IInputConnectionWrapper;
@@ -52158,11 +30013,9 @@
 Lcom/android/internal/view/OneShotPreDrawListener;
 Lcom/android/internal/view/RootViewSurfaceTaker;
 Lcom/android/internal/view/RotationPolicy$1;
-Lcom/android/internal/view/RotationPolicy$RotationPolicyListener;
 Lcom/android/internal/view/RotationPolicy;
 Lcom/android/internal/view/SurfaceCallbackHelper$1;
 Lcom/android/internal/view/SurfaceCallbackHelper;
-Lcom/android/internal/view/TooltipPopup;
 Lcom/android/internal/view/WindowManagerPolicyThread;
 Lcom/android/internal/view/animation/FallbackLUTInterpolator;
 Lcom/android/internal/view/animation/HasNativeInterpolator;
@@ -52173,7 +30026,6 @@
 Lcom/android/internal/view/menu/ActionMenuItemView$PopupCallback;
 Lcom/android/internal/view/menu/ActionMenuItemView;
 Lcom/android/internal/view/menu/BaseMenuPresenter;
-Lcom/android/internal/view/menu/ContextMenuBuilder;
 Lcom/android/internal/view/menu/MenuBuilder$Callback;
 Lcom/android/internal/view/menu/MenuBuilder$ItemInvoker;
 Lcom/android/internal/view/menu/MenuBuilder;
@@ -52205,7 +30057,6 @@
 Lcom/android/internal/widget/DecorToolbar;
 Lcom/android/internal/widget/DialogTitle;
 Lcom/android/internal/widget/EditableInputConnection;
-Lcom/android/internal/widget/FloatingToolbar;
 Lcom/android/internal/widget/ICheckCredentialProgressCallback$Stub$Proxy;
 Lcom/android/internal/widget/ICheckCredentialProgressCallback$Stub;
 Lcom/android/internal/widget/ICheckCredentialProgressCallback;
@@ -52217,12 +30068,9 @@
 Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;
 Lcom/android/internal/widget/LockPatternUtils;
 Lcom/android/internal/widget/LockSettingsInternal;
-Lcom/android/internal/widget/LockscreenCredential;
 Lcom/android/internal/widget/ScrollBarUtils;
 Lcom/android/internal/widget/ToolbarWidgetWrapper$1;
 Lcom/android/internal/widget/ToolbarWidgetWrapper;
-Lcom/android/internal/widget/VerifyCredentialResponse$1;
-Lcom/android/internal/widget/VerifyCredentialResponse;
 Lcom/android/okhttp/Address;
 Lcom/android/okhttp/AndroidShimResponseCache;
 Lcom/android/okhttp/Authenticator;
@@ -52536,10 +30384,18 @@
 Lcom/android/org/bouncycastle/util/encoders/Hex;
 Lcom/android/org/bouncycastle/util/encoders/HexEncoder;
 Lcom/android/org/bouncycastle/util/io/Streams;
-Lcom/android/org/kxml2/io/KXmlParser$ContentSource;
 Lcom/android/org/kxml2/io/KXmlParser$ValueContext;
 Lcom/android/org/kxml2/io/KXmlParser;
 Lcom/android/org/kxml2/io/KXmlSerializer;
+Lcom/android/phone/ecc/nano/CodedInputByteBufferNano;
+Lcom/android/phone/ecc/nano/ExtendableMessageNano;
+Lcom/android/phone/ecc/nano/InternalNano;
+Lcom/android/phone/ecc/nano/InvalidProtocolBufferNanoException;
+Lcom/android/phone/ecc/nano/MessageNano;
+Lcom/android/phone/ecc/nano/ProtobufEccData$AllInfo;
+Lcom/android/phone/ecc/nano/ProtobufEccData$CountryInfo;
+Lcom/android/phone/ecc/nano/ProtobufEccData$EccInfo;
+Lcom/android/phone/ecc/nano/WireFormatNano;
 Lcom/android/server/AppWidgetBackupBridge;
 Lcom/android/server/BootReceiver$1;
 Lcom/android/server/BootReceiver$2;
@@ -52559,31 +30415,23 @@
 Lcom/android/server/backup/PreferredActivityBackupHelper;
 Lcom/android/server/backup/ShortcutBackupHelper;
 Lcom/android/server/backup/SliceBackupHelper;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfProgramEvent;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ApfStatistics;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ConnectStatistics;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DHCPEvent;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DNSLookupBatch;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$DefaultNetworkEvent;
 Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityLog;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpProvisioningEvent;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpReachabilityEvent;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$NetworkEvent;
 Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$Pair;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$RaEvent;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$ValidationProbeEvent;
-Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$WakeupStats;
 Lcom/android/server/net/BaseNetdEventCallback;
 Lcom/android/server/net/BaseNetworkObserver;
+Lcom/android/server/sip/SipService$1;
 Lcom/android/server/sip/SipService$ConnectivityReceiver;
 Lcom/android/server/sip/SipService$MyExecutor;
+Lcom/android/server/sip/SipService$SipKeepAliveProcessCallback;
+Lcom/android/server/sip/SipService$SipSessionGroupExt;
 Lcom/android/server/sip/SipService;
+Lcom/android/server/sip/SipSessionGroup$KeepAliveProcessCallback;
+Lcom/android/server/sip/SipSessionGroup$SipSessionImpl;
 Lcom/android/server/sip/SipWakeLock;
 Lcom/android/server/sip/SipWakeupTimer$MyEventComparator;
 Lcom/android/server/sip/SipWakeupTimer;
-Lcom/android/server/wifi/BaseWifiService;
 Lcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;
+Lcom/android/telephony/Rlog;
 Lcom/google/android/collect/Lists;
 Lcom/google/android/collect/Maps;
 Lcom/google/android/collect/Sets;
@@ -52596,15 +30444,11 @@
 Lcom/google/android/mms/MmsException;
 Lcom/google/android/rappor/Encoder;
 Lcom/google/android/rappor/HmacDrbg;
-Lcom/google/android/textclassifier/ActionsSuggestionsModel$ActionSuggestion;
 Lcom/google/android/textclassifier/ActionsSuggestionsModel$Conversation;
 Lcom/google/android/textclassifier/ActionsSuggestionsModel$ConversationMessage;
 Lcom/google/android/textclassifier/ActionsSuggestionsModel;
 Lcom/google/android/textclassifier/AnnotatorModel;
-Lcom/google/android/textclassifier/LangIdModel$LanguageResult;
 Lcom/google/android/textclassifier/LangIdModel;
-Lcom/google/android/textclassifier/NamedVariant;
-Lcom/google/android/textclassifier/RemoteActionTemplate;
 Lcom/sun/security/cert/internal/x509/X509V1CertImpl;
 Ldalvik/annotation/optimization/CriticalNative;
 Ldalvik/annotation/optimization/FastNative;
@@ -52723,7 +30567,6 @@
 Ljava/io/ObjectStreamConstants;
 Ljava/io/ObjectStreamException;
 Ljava/io/ObjectStreamField;
-Ljava/io/OptionalDataException;
 Ljava/io/OutputStream;
 Ljava/io/OutputStreamWriter;
 Ljava/io/PrintStream;
@@ -52739,7 +30582,6 @@
 Ljava/io/StreamCorruptedException;
 Ljava/io/StringReader;
 Ljava/io/StringWriter;
-Ljava/io/UTFDataFormatException;
 Ljava/io/UncheckedIOException;
 Ljava/io/UnixFileSystem;
 Ljava/io/UnsupportedEncodingException;
@@ -52771,7 +30613,6 @@
 Ljava/lang/Class$Caches;
 Ljava/lang/Class;
 Ljava/lang/ClassCastException;
-Ljava/lang/ClassFormatError;
 Ljava/lang/ClassLoader$SystemClassLoader;
 Ljava/lang/ClassLoader;
 Ljava/lang/ClassNotFoundException;
@@ -52803,7 +30644,6 @@
 Ljava/lang/IncompatibleClassChangeError;
 Ljava/lang/IndexOutOfBoundsException;
 Ljava/lang/InheritableThreadLocal;
-Ljava/lang/InstantiationError;
 Ljava/lang/InstantiationException;
 Ljava/lang/Integer$IntegerCache;
 Ljava/lang/Integer;
@@ -52962,7 +30802,6 @@
 Ljava/lang/reflect/Field;
 Ljava/lang/reflect/GenericArrayType;
 Ljava/lang/reflect/GenericDeclaration;
-Ljava/lang/reflect/GenericSignatureFormatError;
 Ljava/lang/reflect/InvocationHandler;
 Ljava/lang/reflect/InvocationTargetException;
 Ljava/lang/reflect/MalformedParametersException;
@@ -53031,7 +30870,6 @@
 Ljava/net/HttpCookie$9;
 Ljava/net/HttpCookie$CookieAttributeAssignor;
 Ljava/net/HttpCookie;
-Ljava/net/HttpRetryException;
 Ljava/net/HttpURLConnection;
 Ljava/net/IDN;
 Ljava/net/InMemoryCookieStore;
@@ -53071,7 +30909,6 @@
 Ljava/net/SocketAddress;
 Ljava/net/SocketException;
 Ljava/net/SocketImpl;
-Ljava/net/SocketImplFactory;
 Ljava/net/SocketInputStream;
 Ljava/net/SocketOptions;
 Ljava/net/SocketOutputStream;
@@ -53156,7 +30993,6 @@
 Ljava/nio/charset/Charset;
 Ljava/nio/charset/CharsetDecoder;
 Ljava/nio/charset/CharsetEncoder;
-Ljava/nio/charset/CoderMalfunctionError;
 Ljava/nio/charset/CoderResult$1;
 Ljava/nio/charset/CoderResult$2;
 Ljava/nio/charset/CoderResult$Cache;
@@ -53166,7 +31002,6 @@
 Ljava/nio/charset/StandardCharsets;
 Ljava/nio/charset/UnsupportedCharsetException;
 Ljava/nio/file/AccessMode;
-Ljava/nio/file/CopyMoveHelper;
 Ljava/nio/file/CopyOption;
 Ljava/nio/file/DirectoryStream$Filter;
 Ljava/nio/file/DirectoryStream;
@@ -53178,7 +31013,6 @@
 Ljava/nio/file/FileSystems;
 Ljava/nio/file/Files$AcceptAllFilter;
 Ljava/nio/file/Files;
-Ljava/nio/file/InvalidPathException;
 Ljava/nio/file/LinkOption;
 Ljava/nio/file/NoSuchFileException;
 Ljava/nio/file/OpenOption;
@@ -53325,7 +31159,6 @@
 Ljava/security/spec/MGF1ParameterSpec;
 Ljava/security/spec/PKCS8EncodedKeySpec;
 Ljava/security/spec/PSSParameterSpec;
-Ljava/security/spec/RSAKeyGenParameterSpec;
 Ljava/security/spec/RSAPrivateCrtKeySpec;
 Ljava/security/spec/RSAPrivateKeySpec;
 Ljava/security/spec/RSAPublicKeySpec;
@@ -53573,7 +31406,6 @@
 Ljava/util/Deque;
 Ljava/util/Dictionary;
 Ljava/util/DualPivotQuicksort;
-Ljava/util/DuplicateFormatFlagsException;
 Ljava/util/EnumMap$1;
 Ljava/util/EnumMap$EntryIterator$Entry;
 Ljava/util/EnumMap$EntryIterator;
@@ -53589,7 +31421,6 @@
 Ljava/util/Enumeration;
 Ljava/util/EventListener;
 Ljava/util/EventObject;
-Ljava/util/FormatFlagsConversionMismatchException;
 Ljava/util/Formattable;
 Ljava/util/Formatter$Conversion;
 Ljava/util/Formatter$DateTime;
@@ -53631,7 +31462,6 @@
 Ljava/util/IdentityHashMap$Values;
 Ljava/util/IdentityHashMap;
 Ljava/util/IllegalFormatException;
-Ljava/util/IllegalFormatPrecisionException;
 Ljava/util/IllformedLocaleException;
 Ljava/util/Iterator;
 Ljava/util/JumboEnumSet$EnumSetIterator;
@@ -53663,7 +31493,6 @@
 Ljava/util/Map$Entry;
 Ljava/util/Map;
 Ljava/util/MissingFormatArgumentException;
-Ljava/util/MissingFormatWidthException;
 Ljava/util/MissingResourceException;
 Ljava/util/NavigableMap;
 Ljava/util/NavigableSet;
@@ -53683,7 +31512,6 @@
 Ljava/util/Queue;
 Ljava/util/Random;
 Ljava/util/RandomAccess;
-Ljava/util/RandomAccessSubList;
 Ljava/util/RegularEnumSet$EnumSetIterator;
 Ljava/util/RegularEnumSet;
 Ljava/util/ResourceBundle$1;
@@ -53692,7 +31520,6 @@
 Ljava/util/ResourceBundle$CacheKeyReference;
 Ljava/util/ResourceBundle$Control$1;
 Ljava/util/ResourceBundle$Control$CandidateListCache;
-Ljava/util/ResourceBundle$Control;
 Ljava/util/ResourceBundle$LoaderReference;
 Ljava/util/ResourceBundle;
 Ljava/util/Scanner$1;
@@ -53722,8 +31549,6 @@
 Ljava/util/Stack;
 Ljava/util/StringJoiner;
 Ljava/util/StringTokenizer;
-Ljava/util/SubList$1;
-Ljava/util/SubList;
 Ljava/util/TaskQueue;
 Ljava/util/TimSort;
 Ljava/util/TimeZone;
@@ -53751,7 +31576,6 @@
 Ljava/util/TreeSet;
 Ljava/util/UUID$Holder;
 Ljava/util/UUID;
-Ljava/util/UnknownFormatConversionException;
 Ljava/util/Vector$1;
 Ljava/util/Vector$Itr;
 Ljava/util/Vector;
@@ -53775,7 +31599,6 @@
 Ljava/util/concurrent/CompletableFuture$AltResult;
 Ljava/util/concurrent/CompletableFuture$AsynchronousCompletionTask;
 Ljava/util/concurrent/CompletableFuture$Completion;
-Ljava/util/concurrent/CompletableFuture$Signaller;
 Ljava/util/concurrent/CompletableFuture;
 Ljava/util/concurrent/CompletionStage;
 Ljava/util/concurrent/ConcurrentHashMap$BaseIterator;
@@ -53822,7 +31645,6 @@
 Ljava/util/concurrent/ConcurrentHashMap$SearchMappingsTask;
 Ljava/util/concurrent/ConcurrentHashMap$SearchValuesTask;
 Ljava/util/concurrent/ConcurrentHashMap$Segment;
-Ljava/util/concurrent/ConcurrentHashMap$TableStack;
 Ljava/util/concurrent/ConcurrentHashMap$Traverser;
 Ljava/util/concurrent/ConcurrentHashMap$TreeBin;
 Ljava/util/concurrent/ConcurrentHashMap$TreeNode;
@@ -53869,7 +31691,6 @@
 Ljava/util/concurrent/ForkJoinPool;
 Ljava/util/concurrent/ForkJoinTask$ExceptionNode;
 Ljava/util/concurrent/ForkJoinTask;
-Ljava/util/concurrent/ForkJoinWorkerThread;
 Ljava/util/concurrent/Future;
 Ljava/util/concurrent/FutureTask$WaitNode;
 Ljava/util/concurrent/FutureTask;
@@ -54176,13 +31997,11 @@
 Ljava/util/zip/ZipCoder;
 Ljava/util/zip/ZipConstants;
 Ljava/util/zip/ZipEntry;
-Ljava/util/zip/ZipError;
 Ljava/util/zip/ZipException;
 Ljava/util/zip/ZipFile$ZipEntryIterator;
 Ljava/util/zip/ZipFile$ZipFileInflaterInputStream;
 Ljava/util/zip/ZipFile$ZipFileInputStream;
 Ljava/util/zip/ZipFile;
-Ljava/util/zip/ZipOutputStream;
 Ljava/util/zip/ZipUtils;
 Ljavax/crypto/AEADBadTagException;
 Ljavax/crypto/BadPaddingException;
@@ -54342,15 +32161,11 @@
 Llibcore/timezone/TimeZoneFinder$SelectiveCountryTimeZonesExtractor;
 Llibcore/timezone/TimeZoneFinder$TimeZonesProcessor;
 Llibcore/timezone/TimeZoneFinder;
-Llibcore/timezone/ZoneInfoDB$TzData$1;
-Llibcore/timezone/ZoneInfoDB$TzData;
-Llibcore/timezone/ZoneInfoDB;
 Llibcore/util/ArrayUtils;
 Llibcore/util/BasicLruCache;
 Llibcore/util/CharsetUtils;
 Llibcore/util/CollectionUtils;
 Llibcore/util/EmptyArray;
-Llibcore/util/FP16;
 Llibcore/util/HexEncoding;
 Llibcore/util/NativeAllocationRegistry$CleanerRunner;
 Llibcore/util/NativeAllocationRegistry$CleanerThunk;
@@ -54385,7 +32200,6 @@
 Lorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;
 Lorg/apache/harmony/xml/parsers/SAXParserImpl;
 Lorg/apache/http/conn/ConnectTimeoutException;
-Lorg/apache/http/conn/scheme/HostNameResolver;
 Lorg/apache/http/conn/scheme/LayeredSocketFactory;
 Lorg/apache/http/conn/scheme/SocketFactory;
 Lorg/apache/http/conn/ssl/AbstractVerifier;
@@ -54451,7 +32265,6 @@
 Lsun/invoke/util/Wrapper$Format;
 Lsun/invoke/util/Wrapper;
 Lsun/misc/ASCIICaseInsensitiveComparator;
-Lsun/misc/Cleaner$1;
 Lsun/misc/Cleaner;
 Lsun/misc/CompoundEnumeration;
 Lsun/misc/FDBigInteger;
@@ -54531,7 +32344,6 @@
 Lsun/nio/ch/SocketDispatcher;
 Lsun/nio/ch/Util$1;
 Lsun/nio/ch/Util$2;
-Lsun/nio/ch/Util$3;
 Lsun/nio/ch/Util$BufferCache;
 Lsun/nio/ch/Util;
 Lsun/nio/cs/ArrayDecoder;
@@ -54604,7 +32416,6 @@
 Lsun/security/provider/certpath/KeyChecker;
 Lsun/security/provider/certpath/OCSP$RevocationStatus$CertStatus;
 Lsun/security/provider/certpath/OCSP$RevocationStatus;
-Lsun/security/provider/certpath/OCSPResponse$1;
 Lsun/security/provider/certpath/OCSPResponse$ResponseStatus;
 Lsun/security/provider/certpath/OCSPResponse$SingleResponse;
 Lsun/security/provider/certpath/OCSPResponse;
@@ -54615,7 +32426,6 @@
 Lsun/security/provider/certpath/PolicyChecker;
 Lsun/security/provider/certpath/PolicyNodeImpl;
 Lsun/security/provider/certpath/RevocationChecker$1;
-Lsun/security/provider/certpath/RevocationChecker$2;
 Lsun/security/provider/certpath/RevocationChecker$Mode;
 Lsun/security/provider/certpath/RevocationChecker$RevocationProperties;
 Lsun/security/provider/certpath/RevocationChecker;
@@ -54726,11 +32536,9 @@
 Lsun/util/locale/BaseLocale$Cache;
 Lsun/util/locale/BaseLocale$Key;
 Lsun/util/locale/BaseLocale;
-Lsun/util/locale/Extension;
 Lsun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar;
 Lsun/util/locale/InternalLocaleBuilder;
 Lsun/util/locale/LanguageTag;
-Lsun/util/locale/LocaleExtensions;
 Lsun/util/locale/LocaleMatcher;
 Lsun/util/locale/LocaleObjectCache$CacheEntry;
 Lsun/util/locale/LocaleObjectCache;
@@ -54738,12 +32546,10 @@
 Lsun/util/locale/LocaleUtils;
 Lsun/util/locale/ParseStatus;
 Lsun/util/locale/StringTokenIterator;
-Lsun/util/locale/UnicodeLocaleExtension;
 Lsun/util/logging/LoggingProxy;
 Lsun/util/logging/LoggingSupport$1;
 Lsun/util/logging/LoggingSupport;
 Lsun/util/logging/PlatformLogger$1;
-Lsun/util/logging/PlatformLogger$JavaLoggerProxy;
 Lsun/util/logging/PlatformLogger$Level;
 Lsun/util/logging/PlatformLogger$LoggerProxy;
 Lsun/util/logging/PlatformLogger;
diff --git a/config/preloaded-classes b/config/preloaded-classes
index e2fe035..64fd65f 100644
--- a/config/preloaded-classes
+++ b/config/preloaded-classes
@@ -58,8 +58,6 @@
 android.accounts.IAccountAuthenticator$Stub$Proxy
 android.accounts.IAccountAuthenticator$Stub
 android.accounts.IAccountAuthenticator
-android.accounts.IAccountAuthenticatorResponse$Stub
-android.accounts.IAccountAuthenticatorResponse
 android.accounts.IAccountManager$Stub$Proxy
 android.accounts.IAccountManager$Stub
 android.accounts.IAccountManager
@@ -154,9 +152,6 @@
 android.app.-$$Lambda$AppOpsManager$HistoricalOp$DkVcBvqB32SMHlxw0sWQPh3GL1A
 android.app.-$$Lambda$AppOpsManager$HistoricalOp$HUOLFYs8TiaQIOXcrq6JzjxA6gs
 android.app.-$$Lambda$AppOpsManager$HistoricalOp$Vs6pDL0wjOBTquwNnreWVbPQrn4
-android.app.-$$Lambda$AppOpsManager$OpEntry$YTJl86rOgjsrtxPtz5iTGXvrzc4
-android.app.-$$Lambda$AppOpsManager$OpEntry$kdehJT0Vyrquji7c4qSeRkpnvBU
-android.app.-$$Lambda$AppOpsManager$OpEntry$uXaZ6E4Gv-J5C3nhIOFXmg3dYxc
 android.app.-$$Lambda$Dialog$zXRzrq3I7H1_zmZ8d_W7t2CQN0I
 android.app.-$$Lambda$FragmentTransition$jurn0WXuKw3bRQ_2d5zCWdeZWuI
 android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA
@@ -174,14 +169,12 @@
 android.app.Activity$ManagedCursor
 android.app.Activity$ManagedDialog
 android.app.Activity$NonConfigurationInstances
-android.app.Activity$RequestFinishCallback
 android.app.Activity
 android.app.ActivityManager$1
 android.app.ActivityManager$AppTask
 android.app.ActivityManager$MemoryInfo$1
 android.app.ActivityManager$MemoryInfo
 android.app.ActivityManager$OnUidImportanceListener
-android.app.ActivityManager$ProcessErrorStateInfo$1
 android.app.ActivityManager$RecentTaskInfo$1
 android.app.ActivityManager$RecentTaskInfo
 android.app.ActivityManager$RunningAppProcessInfo$1
@@ -257,10 +250,8 @@
 android.app.AppOpsManager$OnOpChangedListener
 android.app.AppOpsManager$OpEntry$1
 android.app.AppOpsManager$OpEntry
-android.app.AppOpsManager$OpFeatureEntry
 android.app.AppOpsManager$PackageOps$1
 android.app.AppOpsManager$PackageOps
-android.app.AppOpsManager$PausedNotedAppOpsCollection
 android.app.AppOpsManager
 android.app.AppOpsManagerInternal
 android.app.Application$ActivityLifecycleCallbacks
@@ -296,9 +287,9 @@
 android.app.DirectAction
 android.app.DownloadManager$CursorTranslator
 android.app.DownloadManager$Query
+android.app.DownloadManager$Request
 android.app.DownloadManager
 android.app.EnterTransitionCoordinator
-android.app.EventLogTags
 android.app.ExitTransitionCoordinator
 android.app.Fragment$1
 android.app.Fragment$AnimationInfo
@@ -410,7 +401,6 @@
 android.app.IWallpaperManagerCallback
 android.app.Instrumentation$ActivityGoing
 android.app.Instrumentation$ActivityMonitor
-android.app.Instrumentation$ActivityResult
 android.app.Instrumentation$ActivityWaiter
 android.app.Instrumentation
 android.app.IntentReceiverLeaked
@@ -447,27 +437,22 @@
 android.app.Notification$BuilderRemoteViews
 android.app.Notification$DecoratedCustomViewStyle
 android.app.Notification$DecoratedMediaCustomViewStyle
-android.app.Notification$Extender
 android.app.Notification$InboxStyle
 android.app.Notification$MediaStyle
 android.app.Notification$MessagingStyle$Message
 android.app.Notification$MessagingStyle
 android.app.Notification$StandardTemplateParams
 android.app.Notification$Style
-android.app.Notification$TemplateBindResult
-android.app.Notification$TvExtender
 android.app.Notification
 android.app.NotificationChannel$1
 android.app.NotificationChannel
 android.app.NotificationChannelGroup$1
 android.app.NotificationChannelGroup
-android.app.NotificationHistory
 android.app.NotificationManager$Policy$1
 android.app.NotificationManager$Policy
 android.app.NotificationManager
 android.app.OnActivityPausedListener
 android.app.PackageInstallObserver$1
-android.app.PackageInstallObserver
 android.app.PendingIntent$1
 android.app.PendingIntent$2
 android.app.PendingIntent$CanceledException
@@ -479,9 +464,7 @@
 android.app.Person$Builder
 android.app.Person
 android.app.PictureInPictureParams$1
-android.app.PictureInPictureParams$Builder
 android.app.PictureInPictureParams
-android.app.ProcessMemoryState$1
 android.app.ProfilerInfo$1
 android.app.ProfilerInfo
 android.app.QueuedWork$QueuedWorkHandler
@@ -495,7 +478,6 @@
 android.app.ResourcesManager$1
 android.app.ResourcesManager$ActivityResources
 android.app.ResourcesManager$ApkKey
-android.app.ResourcesManager$ResourcesWithLoaders
 android.app.ResourcesManager
 android.app.ResultInfo$1
 android.app.ResultInfo
@@ -516,9 +498,6 @@
 android.app.SharedPreferencesImpl$EditorImpl
 android.app.SharedPreferencesImpl$MemoryCommitResult
 android.app.SharedPreferencesImpl
-android.app.StatsManager$StatsUnavailableException
-android.app.StatsManager$StatsdDeathRecipient
-android.app.StatsManager
 android.app.StatusBarManager
 android.app.SynchronousUserSwitchObserver
 android.app.SystemServiceRegistry$100
@@ -535,6 +514,9 @@
 android.app.SystemServiceRegistry$110
 android.app.SystemServiceRegistry$111
 android.app.SystemServiceRegistry$112
+android.app.SystemServiceRegistry$113
+android.app.SystemServiceRegistry$114
+android.app.SystemServiceRegistry$115
 android.app.SystemServiceRegistry$11
 android.app.SystemServiceRegistry$12
 android.app.SystemServiceRegistry$13
@@ -640,6 +622,7 @@
 android.app.SystemServiceRegistry$StaticApplicationContextServiceFetcher
 android.app.SystemServiceRegistry$StaticServiceFetcher
 android.app.SystemServiceRegistry$StaticServiceProducerWithBinder
+android.app.SystemServiceRegistry$StaticServiceProducerWithoutBinder
 android.app.SystemServiceRegistry
 android.app.TaskInfo
 android.app.TaskStackListener
@@ -652,7 +635,6 @@
 android.app.Vr2dDisplayProperties$1
 android.app.Vr2dDisplayProperties
 android.app.VrManager
-android.app.WaitResult
 android.app.WallpaperColors$1
 android.app.WallpaperColors
 android.app.WallpaperInfo$1
@@ -679,7 +661,6 @@
 android.app.admin.DevicePolicyManagerInternal$OnCrossProfileWidgetProvidersChangeListener
 android.app.admin.DevicePolicyManagerInternal
 android.app.admin.IDeviceAdminService$Stub$Proxy
-android.app.admin.IDeviceAdminService$Stub
 android.app.admin.IDeviceAdminService
 android.app.admin.IDevicePolicyManager$Stub$Proxy
 android.app.admin.IDevicePolicyManager$Stub
@@ -696,13 +677,9 @@
 android.app.admin.SystemUpdateInfo
 android.app.admin.SystemUpdatePolicy$1
 android.app.admin.SystemUpdatePolicy
-android.app.appsearch.-$$Lambda$AppSearchManagerFrameworkInitializer$2C99JDf4IVN8JVCb0sQQPhgXbjI
-android.app.appsearch.AppSearchManager
-android.app.appsearch.AppSearchManagerFrameworkInitializer
 android.app.assist.AssistContent$1
 android.app.assist.AssistContent
 android.app.assist.AssistStructure$1
-android.app.assist.AssistStructure$AutofillOverlay
 android.app.assist.AssistStructure$ParcelTransferReader
 android.app.assist.AssistStructure$ParcelTransferWriter
 android.app.assist.AssistStructure$SendChannel
@@ -744,11 +721,9 @@
 android.app.backup.IFullBackupRestoreObserver$Stub$Proxy
 android.app.backup.IFullBackupRestoreObserver$Stub
 android.app.backup.IFullBackupRestoreObserver
-android.app.backup.IRestoreSession
 android.app.backup.ISelectBackupTransportCallback$Stub$Proxy
 android.app.backup.ISelectBackupTransportCallback$Stub
 android.app.backup.ISelectBackupTransportCallback
-android.app.backup.RestoreDescription
 android.app.backup.SharedPreferencesBackupHelper
 android.app.blob.-$$Lambda$BlobStoreManagerFrameworkInitializer$WjSRSHMmxWPF4Fq-7TpX23MBh2U
 android.app.blob.BlobStoreManager
@@ -803,12 +778,10 @@
 android.app.prediction.IPredictionManager$Stub
 android.app.prediction.IPredictionManager
 android.app.role.-$$Lambda$RoleControllerManager$Jsb4ev7pHUqel8_lglNSRLiUzpg
-android.app.role.-$$Lambda$RoleControllerManager$hbh627Rh8mtJykW3vb1FWR34mIQ
 android.app.role.-$$Lambda$o94o2jK_ei-IVw-3oY_QJ49zpAA
 android.app.role.IOnRoleHoldersChangedListener$Stub$Proxy
 android.app.role.IOnRoleHoldersChangedListener$Stub
 android.app.role.IOnRoleHoldersChangedListener
-android.app.role.IRoleController$Stub$Proxy
 android.app.role.IRoleController$Stub
 android.app.role.IRoleController
 android.app.role.IRoleManager$Stub$Proxy
@@ -851,8 +824,6 @@
 android.app.servertransaction.TopResumedActivityChangeItem
 android.app.servertransaction.TransactionExecutor
 android.app.servertransaction.TransactionExecutorHelper
-android.app.servertransaction.WindowVisibilityItem$1
-android.app.servertransaction.WindowVisibilityItem
 android.app.slice.-$$Lambda$SliceProvider$bIgM5f4PsMvz_YYWEeFTjvTqevw
 android.app.slice.ISliceManager$Stub$Proxy
 android.app.slice.ISliceManager$Stub
@@ -869,8 +840,6 @@
 android.app.timedetector.ITimeDetectorService$Stub$Proxy
 android.app.timedetector.ITimeDetectorService$Stub
 android.app.timedetector.ITimeDetectorService
-android.app.timedetector.ManualTimeSuggestion
-android.app.timedetector.PhoneTimeSuggestion
 android.app.timedetector.TimeDetector
 android.app.timezone.RulesManager
 android.app.timezonedetector.TimeZoneDetector
@@ -898,8 +867,6 @@
 android.app.usage.ConfigurationStats$1
 android.app.usage.ConfigurationStats
 android.app.usage.EventList
-android.app.usage.ExternalStorageStats$1
-android.app.usage.ExternalStorageStats
 android.app.usage.ICacheQuotaService$Stub$Proxy
 android.app.usage.ICacheQuotaService$Stub
 android.app.usage.ICacheQuotaService
@@ -975,7 +942,6 @@
 android.bluetooth.BluetoothPan
 android.bluetooth.BluetoothPbap$1
 android.bluetooth.BluetoothPbap$2
-android.bluetooth.BluetoothPbap$ServiceListener
 android.bluetooth.BluetoothPbap
 android.bluetooth.BluetoothPbapClient
 android.bluetooth.BluetoothProfile$ServiceListener
@@ -1015,7 +981,6 @@
 android.bluetooth.IBluetoothHeadsetPhone$Stub$Proxy
 android.bluetooth.IBluetoothHeadsetPhone$Stub
 android.bluetooth.IBluetoothHeadsetPhone
-android.bluetooth.IBluetoothHearingAid$Stub$Proxy
 android.bluetooth.IBluetoothHearingAid$Stub
 android.bluetooth.IBluetoothHearingAid
 android.bluetooth.IBluetoothHidDevice$Stub$Proxy
@@ -1135,7 +1100,6 @@
 android.content.ContentProviderClient
 android.content.ContentProviderNative
 android.content.ContentProviderOperation$1
-android.content.ContentProviderOperation$BackReference
 android.content.ContentProviderOperation$Builder
 android.content.ContentProviderOperation
 android.content.ContentProviderProxy
@@ -1143,7 +1107,6 @@
 android.content.ContentProviderResult
 android.content.ContentResolver$1
 android.content.ContentResolver$CursorWrapperInner
-android.content.ContentResolver$OpenResourceIdResult
 android.content.ContentResolver$ParcelFileDescriptorInner
 android.content.ContentResolver
 android.content.ContentUris
@@ -1206,10 +1169,8 @@
 android.content.Loader
 android.content.LocusId$1
 android.content.LocusId
-android.content.LoggingContentInterface
 android.content.OperationApplicationException
 android.content.PeriodicSync$1
-android.content.PeriodicSync
 android.content.ReceiverCallNotAllowedException
 android.content.RestrictionsManager
 android.content.SearchRecentSuggestionsProvider$DatabaseHelper
@@ -1223,7 +1184,6 @@
 android.content.SyncAdaptersCache$MySerializer
 android.content.SyncAdaptersCache
 android.content.SyncContext
-android.content.SyncInfo$1
 android.content.SyncRequest$1
 android.content.SyncRequest$Builder
 android.content.SyncRequest
@@ -1240,6 +1200,7 @@
 android.content.UndoOperation
 android.content.UndoOwner
 android.content.UriMatcher
+android.content.integrity.AppIntegrityManager
 android.content.om.IOverlayManager$Stub$Proxy
 android.content.om.IOverlayManager$Stub
 android.content.om.IOverlayManager
@@ -1252,7 +1213,6 @@
 android.content.pm.-$$Lambda$PackageParser$M-9fHqS_eEp1oYkuKJhRHOGUxf8
 android.content.pm.-$$Lambda$T1UQAuePWRRmVQ1KzTyMAktZUPM
 android.content.pm.-$$Lambda$ciir_QAmv6RwJro4I58t77dPnxU
-android.content.pm.-$$Lambda$hUJwdX9IqTlLwBds2BUGqVf-FM8
 android.content.pm.-$$Lambda$n3uXeb1v-YRmq_BWTfosEqUUr9g
 android.content.pm.-$$Lambda$zO9HBUVgPeroyDQPLJE-MNMvSqc
 android.content.pm.ActivityInfo$1
@@ -1260,11 +1220,8 @@
 android.content.pm.ActivityInfo
 android.content.pm.ApplicationInfo$1
 android.content.pm.ApplicationInfo
-android.content.pm.AuxiliaryResolveInfo$AuxiliaryFilter
 android.content.pm.BaseParceledListSlice$1
 android.content.pm.BaseParceledListSlice
-android.content.pm.ChangedPackages$1
-android.content.pm.ChangedPackages
 android.content.pm.ComponentInfo
 android.content.pm.ConfigurationInfo$1
 android.content.pm.ConfigurationInfo
@@ -1306,7 +1263,6 @@
 android.content.pm.IPackageInstallerCallback$Stub
 android.content.pm.IPackageInstallerCallback
 android.content.pm.IPackageInstallerSession$Stub$Proxy
-android.content.pm.IPackageInstallerSession$Stub
 android.content.pm.IPackageInstallerSession
 android.content.pm.IPackageManager$Stub$Proxy
 android.content.pm.IPackageManager$Stub
@@ -1322,12 +1278,9 @@
 android.content.pm.IShortcutService$Stub$Proxy
 android.content.pm.IShortcutService$Stub
 android.content.pm.IShortcutService
-android.content.pm.InstallSourceInfo
 android.content.pm.InstantAppIntentFilter$1
 android.content.pm.InstantAppIntentFilter
-android.content.pm.InstantAppRequest
 android.content.pm.InstantAppResolveInfo$1
-android.content.pm.InstantAppResolveInfo$InstantAppDigest$1
 android.content.pm.InstantAppResolveInfo$InstantAppDigest
 android.content.pm.InstantAppResolveInfo
 android.content.pm.InstrumentationInfo$1
@@ -1338,16 +1291,12 @@
 android.content.pm.KeySet
 android.content.pm.LauncherActivityInfo
 android.content.pm.LauncherApps$1
-android.content.pm.LauncherApps$AppUsageLimit
 android.content.pm.LauncherApps$CallbackMessageHandler
-android.content.pm.LauncherApps$ShortcutQuery
 android.content.pm.LauncherApps
 android.content.pm.ModuleInfo$1
 android.content.pm.ModuleInfo
 android.content.pm.PackageInfo$1
 android.content.pm.PackageInfo
-android.content.pm.PackageInfoLite$1
-android.content.pm.PackageInfoLite
 android.content.pm.PackageInstaller$Session
 android.content.pm.PackageInstaller$SessionCallback
 android.content.pm.PackageInstaller$SessionCallbackDelegate
@@ -1439,7 +1388,6 @@
 android.content.pm.SuspendDialogInfo
 android.content.pm.UserInfo$1
 android.content.pm.UserInfo
-android.content.pm.VerifierDeviceIdentity
 android.content.pm.VerifierInfo$1
 android.content.pm.VerifierInfo
 android.content.pm.VersionedPackage$1
@@ -1453,15 +1401,6 @@
 android.content.pm.dex.ISnapshotRuntimeProfileCallback$Stub$Proxy
 android.content.pm.dex.ISnapshotRuntimeProfileCallback$Stub
 android.content.pm.dex.ISnapshotRuntimeProfileCallback
-android.content.pm.dex.PackageOptimizationInfo
-android.content.pm.parsing.library.-$$Lambda$WrPVuoVJehE45tfhLfe_8Tcc-Nw
-android.content.pm.parsing.library.AndroidHidlUpdater
-android.content.pm.parsing.library.OrgApacheHttpLegacyUpdater
-android.content.pm.parsing.library.PackageBackwardCompatibility$AndroidTestRunnerSplitUpdater
-android.content.pm.parsing.library.PackageBackwardCompatibility$RemoveUnnecessaryAndroidTestBaseLibrary
-android.content.pm.parsing.library.PackageBackwardCompatibility
-android.content.pm.parsing.library.PackageSharedLibraryUpdater
-android.content.pm.permission.SplitPermissionInfoParcelable
 android.content.pm.split.DefaultSplitAssetLoader
 android.content.pm.split.SplitAssetDependencyLoader
 android.content.pm.split.SplitAssetLoader
@@ -1518,8 +1457,6 @@
 android.content.res.XmlBlock$Parser
 android.content.res.XmlBlock
 android.content.res.XmlResourceParser
-android.content.res.loader.ResourceLoader
-android.content.res.loader.ResourceLoaderManager
 android.content.rollback.IRollbackManager$Stub$Proxy
 android.content.rollback.IRollbackManager$Stub
 android.content.rollback.IRollbackManager
@@ -1661,7 +1598,6 @@
 android.graphics.ColorMatrix
 android.graphics.ColorMatrixColorFilter
 android.graphics.ColorSpace$Adaptation
-android.graphics.ColorSpace$Connector
 android.graphics.ColorSpace$Lab
 android.graphics.ColorSpace$Model
 android.graphics.ColorSpace$Named
@@ -1690,6 +1626,8 @@
 android.graphics.HardwareRenderer$ProcessInitializer$1
 android.graphics.HardwareRenderer$ProcessInitializer
 android.graphics.HardwareRenderer
+android.graphics.HardwareRendererObserver$OnFrameMetricsAvailableListener
+android.graphics.HardwareRendererObserver
 android.graphics.ImageDecoder$AssetInputStreamSource
 android.graphics.ImageDecoder$DecodeException
 android.graphics.ImageDecoder$ImageInfo
@@ -1724,7 +1662,6 @@
 android.graphics.PaintFlagsDrawFilter
 android.graphics.Path$Direction
 android.graphics.Path$FillType
-android.graphics.Path$Op
 android.graphics.Path
 android.graphics.PathDashPathEffect
 android.graphics.PathEffect
@@ -1851,7 +1788,6 @@
 android.graphics.drawable.RotateDrawable
 android.graphics.drawable.ScaleDrawable$ScaleState
 android.graphics.drawable.ScaleDrawable
-android.graphics.drawable.ShapeDrawable$ShaderFactory
 android.graphics.drawable.ShapeDrawable$ShapeState
 android.graphics.drawable.ShapeDrawable
 android.graphics.drawable.StateListDrawable$StateListState
@@ -1887,7 +1823,6 @@
 android.graphics.drawable.VectorDrawable$VectorDrawableState
 android.graphics.drawable.VectorDrawable
 android.graphics.drawable.shapes.OvalShape
-android.graphics.drawable.shapes.PathShape
 android.graphics.drawable.shapes.RectShape
 android.graphics.drawable.shapes.RoundRectShape
 android.graphics.drawable.shapes.Shape
@@ -1910,7 +1845,6 @@
 android.graphics.text.LineBreaker
 android.graphics.text.MeasuredText$Builder
 android.graphics.text.MeasuredText
-android.gsi.GsiProgress
 android.gsi.IGsiService$Stub$Proxy
 android.gsi.IGsiService$Stub
 android.gsi.IGsiService
@@ -1963,9 +1897,6 @@
 android.hardware.biometrics.BiometricManager
 android.hardware.biometrics.BiometricSourceType$1
 android.hardware.biometrics.BiometricSourceType
-android.hardware.biometrics.IAuthService
-android.hardware.biometrics.IBiometricAuthenticator$Stub
-android.hardware.biometrics.IBiometricAuthenticator
 android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback$Stub$Proxy
 android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback$Stub
 android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback
@@ -1987,6 +1918,7 @@
 android.hardware.camera2.CameraCharacteristics$3
 android.hardware.camera2.CameraCharacteristics$4
 android.hardware.camera2.CameraCharacteristics$5
+android.hardware.camera2.CameraCharacteristics$6
 android.hardware.camera2.CameraCharacteristics$Key
 android.hardware.camera2.CameraCharacteristics
 android.hardware.camera2.CameraDevice
@@ -2047,7 +1979,6 @@
 android.hardware.camera2.marshal.impl.MarshalQueryableBlackLevelPattern
 android.hardware.camera2.marshal.impl.MarshalQueryableBoolean$MarshalerBoolean
 android.hardware.camera2.marshal.impl.MarshalQueryableBoolean
-android.hardware.camera2.marshal.impl.MarshalQueryableCapabilityAndMaxSize
 android.hardware.camera2.marshal.impl.MarshalQueryableColorSpaceTransform
 android.hardware.camera2.marshal.impl.MarshalQueryableEnum
 android.hardware.camera2.marshal.impl.MarshalQueryableHighSpeedVideoConfiguration
@@ -2068,7 +1999,7 @@
 android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfigurationDuration
 android.hardware.camera2.marshal.impl.MarshalQueryableString
 android.hardware.camera2.params.BlackLevelPattern
-android.hardware.camera2.params.CapabilityAndMaxSize
+android.hardware.camera2.params.Capability
 android.hardware.camera2.params.ColorSpaceTransform
 android.hardware.camera2.params.Face
 android.hardware.camera2.params.HighSpeedVideoConfiguration
@@ -2098,14 +2029,12 @@
 android.hardware.contexthub.V1_0.IContexthubCallback$Stub
 android.hardware.contexthub.V1_0.IContexthubCallback
 android.hardware.contexthub.V1_0.MemRange
-android.hardware.contexthub.V1_0.NanoAppBinary
 android.hardware.contexthub.V1_0.PhysicalSensor
 android.hardware.display.-$$Lambda$NightDisplayListener$sOK1HmSbMnFLzc4SdDD1WpVWJiI
 android.hardware.display.AmbientBrightnessDayStats$1
 android.hardware.display.AmbientBrightnessDayStats
 android.hardware.display.AmbientDisplayConfiguration
 android.hardware.display.BrightnessChangeEvent$1
-android.hardware.display.BrightnessChangeEvent$Builder
 android.hardware.display.BrightnessChangeEvent
 android.hardware.display.BrightnessConfiguration$1
 android.hardware.display.BrightnessConfiguration$Builder
@@ -2198,7 +2127,6 @@
 android.hardware.location.ContextHubManager$2
 android.hardware.location.ContextHubManager$3
 android.hardware.location.ContextHubManager$4
-android.hardware.location.ContextHubManager$Callback
 android.hardware.location.ContextHubManager
 android.hardware.location.ContextHubMessage$1
 android.hardware.location.ContextHubMessage
@@ -2401,6 +2329,28 @@
 android.hardware.radio.V1_4.PhysicalChannelConfig
 android.hardware.radio.V1_4.SetupDataCallResult
 android.hardware.radio.V1_4.SignalStrength
+android.hardware.radio.config.V1_0.IRadioConfig
+android.hardware.radio.config.V1_0.IRadioConfigIndication
+android.hardware.radio.config.V1_0.IRadioConfigResponse
+android.hardware.radio.config.V1_0.SimSlotStatus
+android.hardware.radio.config.V1_1.IRadioConfig$Proxy
+android.hardware.radio.config.V1_1.IRadioConfig
+android.hardware.radio.config.V1_1.IRadioConfigIndication
+android.hardware.radio.config.V1_1.IRadioConfigResponse
+android.hardware.radio.config.V1_1.ModemInfo
+android.hardware.radio.config.V1_1.ModemsConfig
+android.hardware.radio.config.V1_1.PhoneCapability
+android.hardware.radio.config.V1_2.IRadioConfigIndication$Stub
+android.hardware.radio.config.V1_2.IRadioConfigIndication
+android.hardware.radio.config.V1_2.IRadioConfigResponse$Stub
+android.hardware.radio.config.V1_2.IRadioConfigResponse
+android.hardware.radio.config.V1_2.SimSlotStatus
+android.hardware.radio.deprecated.V1_0.IOemHook$Proxy
+android.hardware.radio.deprecated.V1_0.IOemHook
+android.hardware.radio.deprecated.V1_0.IOemHookIndication$Stub
+android.hardware.radio.deprecated.V1_0.IOemHookIndication
+android.hardware.radio.deprecated.V1_0.IOemHookResponse$Stub
+android.hardware.radio.deprecated.V1_0.IOemHookResponse
 android.hardware.sidekick.SidekickInternal
 android.hardware.soundtrigger.IRecognitionStatusCallback$Stub$Proxy
 android.hardware.soundtrigger.IRecognitionStatusCallback$Stub
@@ -2419,8 +2369,6 @@
 android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionExtra
 android.hardware.soundtrigger.SoundTrigger$KeyphraseSoundModel$1
 android.hardware.soundtrigger.SoundTrigger$KeyphraseSoundModel
-android.hardware.soundtrigger.SoundTrigger$ModelParamRange$1
-android.hardware.soundtrigger.SoundTrigger$ModelParamRange
 android.hardware.soundtrigger.SoundTrigger$ModuleProperties$1
 android.hardware.soundtrigger.SoundTrigger$ModuleProperties
 android.hardware.soundtrigger.SoundTrigger$RecognitionConfig$1
@@ -2432,8 +2380,6 @@
 android.hardware.soundtrigger.SoundTrigger$SoundModelEvent
 android.hardware.soundtrigger.SoundTrigger$StatusListener
 android.hardware.soundtrigger.SoundTrigger
-android.hardware.soundtrigger.SoundTriggerModule$NativeEventHandlerDelegate$1
-android.hardware.soundtrigger.SoundTriggerModule$NativeEventHandlerDelegate
 android.hardware.soundtrigger.SoundTriggerModule
 android.hardware.thermal.V1_0.IThermal
 android.hardware.thermal.V1_0.ThermalStatus
@@ -2462,18 +2408,264 @@
 android.hardware.usb.gadget.V1_0.IUsbGadget
 android.hardware.usb.gadget.V1_0.IUsbGadgetCallback$Stub
 android.hardware.usb.gadget.V1_0.IUsbGadgetCallback
+android.icu.impl.BMPSet
+android.icu.impl.CacheBase
+android.icu.impl.CacheValue$NullValue
+android.icu.impl.CacheValue$Strength
+android.icu.impl.CacheValue
+android.icu.impl.ClassLoaderUtil
+android.icu.impl.CurrencyData$CurrencyDisplayInfo
+android.icu.impl.CurrencyData$CurrencyDisplayInfoProvider
+android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingPattern
+android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingType
+android.icu.impl.CurrencyData$CurrencySpacingInfo
+android.icu.impl.CurrencyData
+android.icu.impl.ICUBinary$Authenticate
+android.icu.impl.ICUBinary$DatPackageReader$IsAcceptable
+android.icu.impl.ICUBinary$DatPackageReader
+android.icu.impl.ICUBinary$DataFile
+android.icu.impl.ICUBinary$PackageDataFile
+android.icu.impl.ICUBinary
+android.icu.impl.ICUCache
+android.icu.impl.ICUConfig
+android.icu.impl.ICUCurrencyDisplayInfoProvider$1
+android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$CurrencySink$EntrypointTable
+android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$CurrencySink
+android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$FormattingData
+android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo
+android.icu.impl.ICUCurrencyDisplayInfoProvider
+android.icu.impl.ICUCurrencyMetaInfo$Collector
+android.icu.impl.ICUCurrencyMetaInfo$CurrencyCollector
+android.icu.impl.ICUCurrencyMetaInfo$UniqueList
+android.icu.impl.ICUCurrencyMetaInfo
+android.icu.impl.ICUData
+android.icu.impl.ICUDebug
+android.icu.impl.ICULocaleService$ICUResourceBundleFactory
+android.icu.impl.ICULocaleService$LocaleKeyFactory
+android.icu.impl.ICULocaleService
+android.icu.impl.ICUNotifier
+android.icu.impl.ICURWLock
+android.icu.impl.ICUResourceBundle$1
+android.icu.impl.ICUResourceBundle$3
+android.icu.impl.ICUResourceBundle$4
+android.icu.impl.ICUResourceBundle$Loader
+android.icu.impl.ICUResourceBundle$OpenType
+android.icu.impl.ICUResourceBundle$WholeBundle
+android.icu.impl.ICUResourceBundle
+android.icu.impl.ICUResourceBundleImpl$ResourceArray
+android.icu.impl.ICUResourceBundleImpl$ResourceContainer
+android.icu.impl.ICUResourceBundleImpl$ResourceInt
+android.icu.impl.ICUResourceBundleImpl$ResourceString
+android.icu.impl.ICUResourceBundleImpl$ResourceTable
+android.icu.impl.ICUResourceBundleImpl
+android.icu.impl.ICUResourceBundleReader$Array16
+android.icu.impl.ICUResourceBundleReader$Array32
+android.icu.impl.ICUResourceBundleReader$Array
+android.icu.impl.ICUResourceBundleReader$Container
+android.icu.impl.ICUResourceBundleReader$IsAcceptable
+android.icu.impl.ICUResourceBundleReader$ReaderCache
+android.icu.impl.ICUResourceBundleReader$ReaderCacheKey
+android.icu.impl.ICUResourceBundleReader$ReaderValue
+android.icu.impl.ICUResourceBundleReader$ResourceCache$Level
+android.icu.impl.ICUResourceBundleReader$ResourceCache
+android.icu.impl.ICUResourceBundleReader$Table1632
+android.icu.impl.ICUResourceBundleReader$Table16
+android.icu.impl.ICUResourceBundleReader$Table
+android.icu.impl.ICUResourceBundleReader
+android.icu.impl.ICUService$Factory
+android.icu.impl.ICUService
+android.icu.impl.LocaleIDParser
+android.icu.impl.Pair
+android.icu.impl.RBBIDataWrapper$IsAcceptable
+android.icu.impl.RBBIDataWrapper$RBBIDataHeader
+android.icu.impl.RBBIDataWrapper$RBBIStateTable
+android.icu.impl.RBBIDataWrapper
+android.icu.impl.SimpleCache
+android.icu.impl.SoftCache
+android.icu.impl.Trie2$1
+android.icu.impl.Trie2$2
+android.icu.impl.Trie2$UTrie2Header
+android.icu.impl.Trie2$ValueMapper
+android.icu.impl.Trie2$ValueWidth
+android.icu.impl.Trie2
+android.icu.impl.Trie2_16
+android.icu.impl.UBiDiProps$IsAcceptable
+android.icu.impl.UBiDiProps
+android.icu.impl.UCharacterProperty$10
+android.icu.impl.UCharacterProperty$11
+android.icu.impl.UCharacterProperty$12
+android.icu.impl.UCharacterProperty$13
+android.icu.impl.UCharacterProperty$14
+android.icu.impl.UCharacterProperty$15
+android.icu.impl.UCharacterProperty$16
+android.icu.impl.UCharacterProperty$17
+android.icu.impl.UCharacterProperty$18
+android.icu.impl.UCharacterProperty$19
+android.icu.impl.UCharacterProperty$1
+android.icu.impl.UCharacterProperty$20
+android.icu.impl.UCharacterProperty$21
+android.icu.impl.UCharacterProperty$22
+android.icu.impl.UCharacterProperty$23
+android.icu.impl.UCharacterProperty$24
+android.icu.impl.UCharacterProperty$25
+android.icu.impl.UCharacterProperty$26
+android.icu.impl.UCharacterProperty$27
+android.icu.impl.UCharacterProperty$2
+android.icu.impl.UCharacterProperty$3
+android.icu.impl.UCharacterProperty$4
+android.icu.impl.UCharacterProperty$5
+android.icu.impl.UCharacterProperty$6
+android.icu.impl.UCharacterProperty$7
+android.icu.impl.UCharacterProperty$8
+android.icu.impl.UCharacterProperty$9
+android.icu.impl.UCharacterProperty$BiDiIntProperty
+android.icu.impl.UCharacterProperty$BinaryProperty
+android.icu.impl.UCharacterProperty$CaseBinaryProperty
+android.icu.impl.UCharacterProperty$CombiningClassIntProperty
+android.icu.impl.UCharacterProperty$IntProperty
+android.icu.impl.UCharacterProperty$IsAcceptable
+android.icu.impl.UCharacterProperty$NormInertBinaryProperty
+android.icu.impl.UCharacterProperty$NormQuickCheckIntProperty
+android.icu.impl.UCharacterProperty
+android.icu.impl.UResource$Array
+android.icu.impl.UResource$Key
+android.icu.impl.UResource$Sink
+android.icu.impl.UResource$Table
+android.icu.impl.UResource$Value
+android.icu.impl.UResource
+android.icu.impl.Utility
+android.icu.impl.ZoneMeta$1
+android.icu.impl.ZoneMeta$CustomTimeZoneCache
+android.icu.impl.ZoneMeta$SystemTimeZoneCache
+android.icu.impl.ZoneMeta
+android.icu.impl.locale.AsciiUtil
+android.icu.impl.locale.BaseLocale$Cache
+android.icu.impl.locale.BaseLocale$Key
+android.icu.impl.locale.BaseLocale
+android.icu.impl.locale.LocaleObjectCache$CacheEntry
+android.icu.impl.locale.LocaleObjectCache
+android.icu.impl.locale.LocaleSyntaxException
+android.icu.impl.number.AffixPatternProvider
+android.icu.impl.number.AffixUtils
+android.icu.impl.number.CustomSymbolCurrency
+android.icu.impl.number.DecimalFormatProperties$ParseMode
+android.icu.impl.number.DecimalFormatProperties
+android.icu.impl.number.Grouper
+android.icu.impl.number.MacroProps
+android.icu.impl.number.Padder$PadPosition
+android.icu.impl.number.PatternStringParser$ParsedPatternInfo
+android.icu.impl.number.PatternStringParser$ParsedSubpatternInfo
+android.icu.impl.number.PatternStringParser$ParserState
+android.icu.impl.number.PatternStringParser
+android.icu.impl.number.PropertiesAffixPatternProvider
+android.icu.impl.number.RoundingUtils
+android.icu.lang.UCharacter
+android.icu.lang.UCharacterEnums$ECharacterCategory
+android.icu.lang.UCharacterEnums$ECharacterDirection
+android.icu.number.CurrencyPrecision
+android.icu.number.FractionPrecision
+android.icu.number.IntegerWidth
+android.icu.number.LocalizedNumberFormatter
+android.icu.number.NumberFormatter$DecimalSeparatorDisplay
+android.icu.number.NumberFormatter$SignDisplay
+android.icu.number.NumberFormatter
+android.icu.number.NumberFormatterSettings
+android.icu.number.NumberPropertyMapper
+android.icu.number.Precision$CurrencyRounderImpl
+android.icu.number.Precision$FracSigRounderImpl
+android.icu.number.Precision$FractionRounderImpl
+android.icu.number.Precision$IncrementFiveRounderImpl
+android.icu.number.Precision$IncrementRounderImpl
+android.icu.number.Precision$InfiniteRounderImpl
+android.icu.number.Precision$PassThroughRounderImpl
+android.icu.number.Precision$SignificantRounderImpl
+android.icu.number.Precision
+android.icu.number.UnlocalizedNumberFormatter
+android.icu.text.BidiClassifier
+android.icu.text.BreakIterator$BreakIteratorCache
+android.icu.text.BreakIterator$BreakIteratorServiceShim
+android.icu.text.BreakIterator
+android.icu.text.BreakIteratorFactory$BFService$1RBBreakIteratorFactory
+android.icu.text.BreakIteratorFactory$BFService
+android.icu.text.BreakIteratorFactory
+android.icu.text.CurrencyDisplayNames
+android.icu.text.CurrencyMetaInfo$CurrencyDigits
+android.icu.text.CurrencyMetaInfo$CurrencyFilter
+android.icu.text.CurrencyMetaInfo
+android.icu.text.DecimalFormat
+android.icu.text.DecimalFormatSymbols$1
+android.icu.text.DecimalFormatSymbols$CacheData
+android.icu.text.DecimalFormatSymbols$DecFmtDataSink
+android.icu.text.DecimalFormatSymbols
+android.icu.text.DictionaryBreakEngine$DequeI
+android.icu.text.DictionaryBreakEngine
+android.icu.text.DisplayContext$Type
+android.icu.text.DisplayContext
+android.icu.text.LanguageBreakEngine
+android.icu.text.Normalizer$FCDMode
+android.icu.text.Normalizer$Mode
+android.icu.text.Normalizer$NFCMode
+android.icu.text.Normalizer$NFDMode
+android.icu.text.Normalizer$NFKCMode
+android.icu.text.Normalizer$NFKDMode
+android.icu.text.Normalizer$NONEMode
+android.icu.text.Normalizer$QuickCheckResult
+android.icu.text.Normalizer
+android.icu.text.NumberFormat
+android.icu.text.NumberingSystem$1
+android.icu.text.NumberingSystem$2
+android.icu.text.NumberingSystem$LocaleLookupData
+android.icu.text.NumberingSystem
+android.icu.text.RuleBasedBreakIterator$BreakCache
+android.icu.text.RuleBasedBreakIterator$DictionaryCache
+android.icu.text.RuleBasedBreakIterator$LookAheadResults
+android.icu.text.RuleBasedBreakIterator
+android.icu.text.StringPrepParseException
+android.icu.text.StringTransform
+android.icu.text.TimeZoneNames$NameType
+android.icu.text.Transform
+android.icu.text.Transliterator
+android.icu.text.UFormat
+android.icu.text.UTF16
+android.icu.text.UnhandledBreakEngine
+android.icu.text.UnicodeFilter
+android.icu.text.UnicodeMatcher
+android.icu.text.UnicodeSet
+android.icu.util.Currency$1
+android.icu.util.Currency$CurrencyUsage
+android.icu.util.Currency
+android.icu.util.Freezable
+android.icu.util.MeasureUnit$1
+android.icu.util.MeasureUnit$2
+android.icu.util.MeasureUnit$3
+android.icu.util.MeasureUnit$4
+android.icu.util.MeasureUnit$Factory
+android.icu.util.MeasureUnit
+android.icu.util.TimeUnit
+android.icu.util.TimeZone$ConstantZone
+android.icu.util.TimeZone$SystemTimeZoneType
+android.icu.util.TimeZone
+android.icu.util.ULocale$1
+android.icu.util.ULocale$2
+android.icu.util.ULocale$3
+android.icu.util.ULocale$Category
+android.icu.util.ULocale$JDKLocaleHelper
+android.icu.util.ULocale$Type
+android.icu.util.ULocale
+android.icu.util.UResourceBundle$1
+android.icu.util.UResourceBundle$RootType
+android.icu.util.UResourceBundle
+android.icu.util.UResourceTypeMismatchException
+android.icu.util.VersionInfo
 android.inputmethodservice.-$$Lambda$InputMethodService$8T9TmAUIN7vW9eU6kTg8309_d4E
-android.inputmethodservice.-$$Lambda$InputMethodService$DHO7VgzZzl-Gpo6FN3F8arQtA4A
 android.inputmethodservice.-$$Lambda$InputMethodService$wp8DeVGx_WDOPw4F6an7QbwVxf0
 android.inputmethodservice.AbstractInputMethodService$AbstractInputMethodImpl
 android.inputmethodservice.AbstractInputMethodService$AbstractInputMethodSessionImpl
 android.inputmethodservice.AbstractInputMethodService
-android.inputmethodservice.ExtractEditText
 android.inputmethodservice.IInputMethodSessionWrapper$ImeInputEventReceiver
 android.inputmethodservice.IInputMethodSessionWrapper
 android.inputmethodservice.IInputMethodWrapper$InputMethodSessionCallbackWrapper
 android.inputmethodservice.IInputMethodWrapper
-android.inputmethodservice.InputMethodService$InputMethodImpl
 android.inputmethodservice.InputMethodService$InputMethodSessionImpl
 android.inputmethodservice.InputMethodService$Insets
 android.inputmethodservice.InputMethodService$SettingsObserver
@@ -2481,8 +2673,6 @@
 android.inputmethodservice.SoftInputWindow
 android.internal.hidl.base.V1_0.DebugInfo
 android.internal.hidl.base.V1_0.IBase
-android.location.-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo
-android.location.AbstractListenerManager
 android.location.Address$1
 android.location.Address
 android.location.Country$1
@@ -2503,10 +2693,6 @@
 android.location.GnssMeasurement
 android.location.GnssMeasurementCorrections$1
 android.location.GnssMeasurementCorrections
-android.location.GnssMeasurementsEvent$1
-android.location.GnssMeasurementsEvent
-android.location.GnssReflectingPlane$1
-android.location.GnssSingleSatCorrection$1
 android.location.GpsStatus$Listener
 android.location.IBatchedLocationCallback$Stub$Proxy
 android.location.IBatchedLocationCallback$Stub
@@ -2551,16 +2737,10 @@
 android.location.Location$BearingDistanceCache
 android.location.Location
 android.location.LocationListener
-android.location.LocationManager$BatchedLocationCallbackManager
-android.location.LocationManager$GnssMeasurementsListenerManager
-android.location.LocationManager$GnssNavigationMessageListenerManager
-android.location.LocationManager$GnssStatusListenerManager
-android.location.LocationManager$LocationListenerTransport
 android.location.LocationManager
 android.location.LocationProvider
 android.location.LocationRequest$1
 android.location.LocationRequest
-android.location.LocationTime
 android.media.-$$Lambda$MediaCodecInfo$VideoCapabilities$DpgwEn-gVFZT9EtP3qcxpiA2G0M
 android.media.AudioAttributes$1
 android.media.AudioAttributes$Builder
@@ -2614,8 +2794,6 @@
 android.media.AudioPresentation
 android.media.AudioRecord
 android.media.AudioRecordRoutingProxy
-android.media.AudioRecordingConfiguration$1
-android.media.AudioRecordingConfiguration
 android.media.AudioRecordingMonitor
 android.media.AudioRecordingMonitorClient
 android.media.AudioRecordingMonitorImpl$1
@@ -2639,6 +2817,7 @@
 android.media.ExifInterface$ExifTag
 android.media.ExifInterface$Rational
 android.media.ExifInterface
+android.media.ExternalRingtonesCursorWrapper
 android.media.IAudioFocusDispatcher$Stub$Proxy
 android.media.IAudioFocusDispatcher$Stub
 android.media.IAudioFocusDispatcher
@@ -2738,6 +2917,7 @@
 android.media.MediaMetadata
 android.media.MediaMetadataRetriever$BitmapParams
 android.media.MediaMetadataRetriever
+android.media.MediaMetrics
 android.media.MediaMuxer
 android.media.MediaPlayer$1
 android.media.MediaPlayer$2$1
@@ -2749,19 +2929,11 @@
 android.media.MediaPlayer$EventHandler$1
 android.media.MediaPlayer$EventHandler$2
 android.media.MediaPlayer$EventHandler
-android.media.MediaPlayer$OnBufferingUpdateListener
 android.media.MediaPlayer$OnCompletionListener
-android.media.MediaPlayer$OnDrmInfoHandlerDelegate
 android.media.MediaPlayer$OnErrorListener
-android.media.MediaPlayer$OnInfoListener
-android.media.MediaPlayer$OnMediaTimeDiscontinuityListener
 android.media.MediaPlayer$OnPreparedListener
 android.media.MediaPlayer$OnSeekCompleteListener
 android.media.MediaPlayer$OnSubtitleDataListener
-android.media.MediaPlayer$OnTimedMetaDataAvailableListener
-android.media.MediaPlayer$OnTimedTextListener
-android.media.MediaPlayer$OnVideoSizeChangedListener
-android.media.MediaPlayer$ProvisioningThread
 android.media.MediaPlayer$TimeProvider$EventHandler
 android.media.MediaPlayer$TimeProvider
 android.media.MediaPlayer$TrackInfo$1
@@ -2851,7 +3023,6 @@
 android.media.audiopolicy.AudioMix
 android.media.audiopolicy.AudioMixingRule$AudioMixMatchCriterion
 android.media.audiopolicy.AudioMixingRule
-android.media.audiopolicy.AudioPolicy
 android.media.audiopolicy.AudioPolicyConfig$1
 android.media.audiopolicy.AudioPolicyConfig
 android.media.audiopolicy.AudioProductStrategy$1
@@ -2894,17 +3065,16 @@
 android.media.projection.IMediaProjectionWatcherCallback$Stub$Proxy
 android.media.projection.IMediaProjectionWatcherCallback$Stub
 android.media.projection.IMediaProjectionWatcherCallback
-android.media.projection.MediaProjectionInfo
 android.media.projection.MediaProjectionManager$CallbackDelegate
 android.media.projection.MediaProjectionManager
-android.media.session.-$$Lambda$MediaSessionManager$YiJ5NX2VHOfUBIGqvAyigWL-pTY
-android.media.session.-$$Lambda$MediaSessionManager$xJmJKLsOLtZRF5E4CYrmYZJiMw4
+android.media.session.-$$Lambda$MediaSessionManager$IEuWPZ528guBgmyKPMUWhBwnMCE
 android.media.session.IActiveSessionsListener$Stub$Proxy
 android.media.session.IActiveSessionsListener$Stub
 android.media.session.IActiveSessionsListener
-android.media.session.ICallback$Stub$Proxy
-android.media.session.ICallback$Stub
-android.media.session.ICallback
+android.media.session.IOnMediaKeyEventDispatchedListener$Stub
+android.media.session.IOnMediaKeyEventDispatchedListener
+android.media.session.IOnMediaKeyEventSessionChangedListener$Stub
+android.media.session.IOnMediaKeyEventSessionChangedListener
 android.media.session.IOnMediaKeyListener$Stub$Proxy
 android.media.session.IOnMediaKeyListener$Stub
 android.media.session.IOnMediaKeyListener
@@ -2945,9 +3115,11 @@
 android.media.session.MediaSession$Token
 android.media.session.MediaSession
 android.media.session.MediaSessionManager$1
-android.media.session.MediaSessionManager$Callback
-android.media.session.MediaSessionManager$CallbackStub
 android.media.session.MediaSessionManager$OnActiveSessionsChangedListener
+android.media.session.MediaSessionManager$OnMediaKeyEventDispatchedListener
+android.media.session.MediaSessionManager$OnMediaKeyEventDispatchedListenerStub
+android.media.session.MediaSessionManager$OnMediaKeyEventSessionChangedListener
+android.media.session.MediaSessionManager$OnMediaKeyEventSessionChangedListenerStub
 android.media.session.MediaSessionManager$OnMediaKeyListener
 android.media.session.MediaSessionManager$OnMediaKeyListenerImpl
 android.media.session.MediaSessionManager$OnSession2TokensChangedListener
@@ -2964,8 +3136,6 @@
 android.media.session.PlaybackState$CustomAction$1
 android.media.session.PlaybackState$CustomAction
 android.media.session.PlaybackState
-android.media.soundtrigger.ISoundTriggerDetectionServiceClient$Stub
-android.media.soundtrigger.ISoundTriggerDetectionServiceClient
 android.media.soundtrigger.SoundTriggerManager
 android.media.tv.TvInputHardwareInfo$Builder
 android.media.tv.TvInputManager
@@ -2973,6 +3143,8 @@
 android.media.tv.TvStreamConfig$Builder
 android.media.tv.TvStreamConfig
 android.metrics.LogMaker
+android.mtp.MtpDatabase$1
+android.mtp.MtpDatabase$2
 android.mtp.MtpDatabase
 android.mtp.MtpDevice
 android.mtp.MtpDeviceInfo
@@ -2983,16 +3155,28 @@
 android.mtp.MtpServer
 android.mtp.MtpStorage
 android.mtp.MtpStorageInfo
+android.mtp.MtpStorageManager$MtpNotifier
+android.mtp.MtpStorageManager$MtpObject
+android.mtp.MtpStorageManager
 android.net.-$$Lambda$FpGXkd3pLxeXY58eJ_84mi1PLWQ
 android.net.-$$Lambda$Network$KD6DxaMRJIcajhj36TU1K7lJnHQ
-android.net.-$$Lambda$NetworkFactory$HfslgqyaKc_n0wXX5_qRYVZoGfI
 android.net.-$$Lambda$NetworkStats$xvFSsVoR0k5s7Fhw1yPDPVIpx8A
 android.net.-$$Lambda$p1_56lwnt1xBuY1muPblbN1Dtkw
 android.net.ConnectionInfo$1
 android.net.ConnectionInfo
+android.net.ConnectivityManager$1
+android.net.ConnectivityManager$2
+android.net.ConnectivityManager$3
 android.net.ConnectivityManager$CallbackHandler
+android.net.ConnectivityManager$LegacyRequest
 android.net.ConnectivityManager$NetworkCallback
 android.net.ConnectivityManager$OnNetworkActiveListener
+android.net.ConnectivityManager$OnStartTetheringCallback
+android.net.ConnectivityManager$OnTetheringEntitlementResultListener
+android.net.ConnectivityManager$OnTetheringEventCallback
+android.net.ConnectivityManager$PacketKeepalive
+android.net.ConnectivityManager$PacketKeepaliveCallback
+android.net.ConnectivityManager$TooManyRequestsException
 android.net.ConnectivityManager
 android.net.ConnectivityMetricsEvent$1
 android.net.ConnectivityMetricsEvent
@@ -3040,20 +3224,14 @@
 android.net.INetworkStatsService$Stub$Proxy
 android.net.INetworkStatsService$Stub
 android.net.INetworkStatsService
-android.net.INetworkStatsSession$Stub
-android.net.INetworkStatsSession
 android.net.ISocketKeepaliveCallback$Stub$Proxy
 android.net.ISocketKeepaliveCallback$Stub
 android.net.ISocketKeepaliveCallback
 android.net.ITestNetworkManager$Stub
 android.net.ITestNetworkManager
-android.net.ITetheringEventCallback$Stub$Proxy
-android.net.ITetheringEventCallback$Stub
-android.net.ITetheringEventCallback
 android.net.ITetheringStatsProvider$Stub$Proxy
 android.net.ITetheringStatsProvider$Stub
 android.net.ITetheringStatsProvider
-android.net.InetAddresses
 android.net.InterfaceConfiguration$1
 android.net.InterfaceConfiguration
 android.net.IpConfiguration$1
@@ -3064,13 +3242,12 @@
 android.net.IpPrefix$2
 android.net.IpPrefix
 android.net.IpSecManager$SpiUnavailableException
+android.net.IpSecManager$UdpEncapsulationSocket
 android.net.IpSecManager
-android.net.KeepalivePacketData$1
 android.net.KeepalivePacketData
 android.net.LinkAddress$1
 android.net.LinkAddress
 android.net.LinkProperties$1
-android.net.LinkProperties$CompareResult
 android.net.LinkProperties
 android.net.LocalServerSocket
 android.net.LocalSocket
@@ -3083,6 +3260,7 @@
 android.net.MacAddress
 android.net.MatchAllNetworkSpecifier$1
 android.net.MatchAllNetworkSpecifier
+android.net.NattSocketKeepalive
 android.net.Network$1
 android.net.Network$NetworkBoundSocketFactory
 android.net.Network
@@ -3091,9 +3269,6 @@
 android.net.NetworkCapabilities$NameOf
 android.net.NetworkCapabilities
 android.net.NetworkConfig
-android.net.NetworkFactory$NetworkRequestInfo
-android.net.NetworkFactory$SerialNumber
-android.net.NetworkFactory
 android.net.NetworkIdentity
 android.net.NetworkInfo$1
 android.net.NetworkInfo$DetailedState
@@ -3101,22 +3276,18 @@
 android.net.NetworkInfo
 android.net.NetworkKey$1
 android.net.NetworkKey
-android.net.NetworkMisc$1
-android.net.NetworkMisc
 android.net.NetworkPolicy$1
 android.net.NetworkPolicy
 android.net.NetworkPolicyManager$1
 android.net.NetworkPolicyManager$Listener
 android.net.NetworkPolicyManager
+android.net.NetworkProvider
 android.net.NetworkQuotaInfo
 android.net.NetworkRequest$1
 android.net.NetworkRequest$Builder
 android.net.NetworkRequest$Type
 android.net.NetworkRequest
-android.net.NetworkScore
 android.net.NetworkScoreManager
-android.net.NetworkScorerAppData$1
-android.net.NetworkScorerAppData
 android.net.NetworkSpecifier
 android.net.NetworkState$1
 android.net.NetworkState
@@ -3150,13 +3321,15 @@
 android.net.ScoredNetwork
 android.net.SntpClient$InvalidServerReplyException
 android.net.SntpClient
+android.net.SocketKeepalive$Callback
 android.net.SocketKeepalive$ErrorCodeException
-android.net.SocketKeepalive$InvalidPacketException
+android.net.SocketKeepalive
 android.net.StaticIpConfiguration$1
 android.net.StaticIpConfiguration$Builder
 android.net.StaticIpConfiguration
 android.net.StringNetworkSpecifier$1
 android.net.StringNetworkSpecifier
+android.net.TcpSocketKeepalive
 android.net.TestNetworkManager
 android.net.TrafficStats
 android.net.TransportInfo
@@ -3203,7 +3376,6 @@
 android.net.metrics.NetworkEvent
 android.net.metrics.NetworkMetrics$Metrics
 android.net.metrics.NetworkMetrics$Summary
-android.net.metrics.NetworkMetrics
 android.net.metrics.RaEvent$1
 android.net.metrics.RaEvent
 android.net.metrics.ValidationProbeEvent$1
@@ -3220,168 +3392,21 @@
 android.net.sip.ISipService$Stub$Proxy
 android.net.sip.ISipService$Stub
 android.net.sip.ISipService
+android.net.sip.ISipSession$Stub
+android.net.sip.ISipSession
+android.net.sip.ISipSessionListener$Stub
+android.net.sip.ISipSessionListener
+android.net.sip.SipException
 android.net.sip.SipManager
-android.net.util.-$$Lambda$MultinetworkPolicyTracker$8YMQ0fPTKk7Fw-_gJjln0JT-g8E
+android.net.sip.SipProfile
+android.net.sip.SipSessionAdapter
 android.net.util.MultinetworkPolicyTracker$1
-android.net.util.MultinetworkPolicyTracker$2
 android.net.util.MultinetworkPolicyTracker$SettingObserver
 android.net.util.MultinetworkPolicyTracker
-android.net.wifi.-$$Lambda$O5kkps4d9X9Xr5DI8L3NlcZliu8
-android.net.wifi.-$$Lambda$WifiFrameworkInitializer$K4DpGPGObWI293pmRTuiEj5r-DE
-android.net.wifi.-$$Lambda$WifiFrameworkInitializer$Q8AMcrAZzPqZKp4l5Zz4DRDq6rY
-android.net.wifi.-$$Lambda$WifiFrameworkInitializer$QSCNoL1_pVVaV8B35R8b_0UECkU
-android.net.wifi.-$$Lambda$WifiFrameworkInitializer$evN9sVM7TGOwMVxoJTGBCfu_880
-android.net.wifi.-$$Lambda$WifiFrameworkInitializer$qxuZsnr_-ppKI2ad2pa3htyx2u0
-android.net.wifi.-$$Lambda$WifiFrameworkInitializer$y82Bone6wQbJ8BixuAZ6L5k501Y
-android.net.wifi.-$$Lambda$WifiScanner$ServiceHandler$MC84hrJ90Rns-G99w6ih3qQMdyw
-android.net.wifi.-$$Lambda$WifiScanner$ServiceHandler$cKqGOMxI2R2uyUjgsLnrUOSFRS8
-android.net.wifi.-$$Lambda$WifiScanner$ServiceHandler$tfzaoDCMuySQuJsgvPXn9A60XqE
-android.net.wifi.-$$Lambda$WifiScanner$ServiceHandler$y6fV_BVhUdL0OIhrI7CZr_ohobM
-android.net.wifi.AnqpInformationElement
-android.net.wifi.IActionListener$Stub
-android.net.wifi.IActionListener
-android.net.wifi.IDppCallback$Stub$Proxy
-android.net.wifi.IDppCallback$Stub
-android.net.wifi.IDppCallback
-android.net.wifi.ILocalOnlyHotspotCallback$Stub
-android.net.wifi.ILocalOnlyHotspotCallback
-android.net.wifi.INetworkRequestMatchCallback$Stub$Proxy
-android.net.wifi.INetworkRequestMatchCallback$Stub
-android.net.wifi.INetworkRequestMatchCallback
-android.net.wifi.IOnWifiActivityEnergyInfoListener$Stub
-android.net.wifi.IOnWifiActivityEnergyInfoListener
-android.net.wifi.IOnWifiUsabilityStatsListener$Stub$Proxy
-android.net.wifi.IOnWifiUsabilityStatsListener$Stub
-android.net.wifi.IOnWifiUsabilityStatsListener
-android.net.wifi.IScanResultsCallback$Stub
-android.net.wifi.IScanResultsCallback
-android.net.wifi.ISoftApCallback$Stub$Proxy
-android.net.wifi.ISoftApCallback$Stub
-android.net.wifi.ISoftApCallback
-android.net.wifi.ISuggestionConnectionStatusListener$Stub
-android.net.wifi.ISuggestionConnectionStatusListener
-android.net.wifi.ITrafficStateCallback$Stub$Proxy
-android.net.wifi.ITrafficStateCallback$Stub
-android.net.wifi.ITrafficStateCallback
-android.net.wifi.ITxPacketCountListener$Stub
-android.net.wifi.ITxPacketCountListener
-android.net.wifi.IWifiManager$Stub$Proxy
-android.net.wifi.IWifiManager$Stub
-android.net.wifi.IWifiManager
-android.net.wifi.IWifiScanner$Stub$Proxy
-android.net.wifi.IWifiScanner$Stub
-android.net.wifi.IWifiScanner
-android.net.wifi.ParcelUtil
-android.net.wifi.RttManager
-android.net.wifi.ScanResult$1
-android.net.wifi.ScanResult$InformationElement
-android.net.wifi.ScanResult$RadioChainInfo
-android.net.wifi.ScanResult
-android.net.wifi.SoftApConfiguration
-android.net.wifi.SoftApInfo
-android.net.wifi.SupplicantState$1
-android.net.wifi.SupplicantState$2
-android.net.wifi.SupplicantState
-android.net.wifi.SynchronousExecutor
-android.net.wifi.WifiClient
-android.net.wifi.WifiCondManager
-android.net.wifi.WifiConfiguration$1
-android.net.wifi.WifiConfiguration$KeyMgmt
-android.net.wifi.WifiConfiguration$NetworkSelectionStatus$DisableReasonInfo
-android.net.wifi.WifiConfiguration$NetworkSelectionStatus
-android.net.wifi.WifiConfiguration$RecentFailure
-android.net.wifi.WifiConfiguration
-android.net.wifi.WifiEnterpriseConfig$1
-android.net.wifi.WifiEnterpriseConfig
-android.net.wifi.WifiFrameworkInitializer
-android.net.wifi.WifiInfo$1
-android.net.wifi.WifiInfo
-android.net.wifi.WifiManager$MulticastLock
-android.net.wifi.WifiManager$SoftApCallback
-android.net.wifi.WifiManager$SoftApCallbackProxy
-android.net.wifi.WifiManager$TrafficStateCallbackProxy
-android.net.wifi.WifiManager$WifiLock
-android.net.wifi.WifiManager
-android.net.wifi.WifiNetworkAgentSpecifier$1
-android.net.wifi.WifiNetworkAgentSpecifier
 android.net.wifi.WifiNetworkScoreCache$CacheListener$1
 android.net.wifi.WifiNetworkScoreCache$CacheListener
 android.net.wifi.WifiNetworkScoreCache
-android.net.wifi.WifiNetworkSpecifier$1
-android.net.wifi.WifiNetworkSpecifier
-android.net.wifi.WifiNetworkSuggestion$1
-android.net.wifi.WifiNetworkSuggestion
-android.net.wifi.WifiScanner$ActionListener
-android.net.wifi.WifiScanner$ChannelSpec
-android.net.wifi.WifiScanner$ListenerWithExecutor
-android.net.wifi.WifiScanner$OperationResult$1
-android.net.wifi.WifiScanner$OperationResult
-android.net.wifi.WifiScanner$ParcelableScanData$1
-android.net.wifi.WifiScanner$ParcelableScanData
-android.net.wifi.WifiScanner$ParcelableScanResults$1
-android.net.wifi.WifiScanner$ParcelableScanResults
-android.net.wifi.WifiScanner$PnoScanListener
-android.net.wifi.WifiScanner$PnoSettings$1
-android.net.wifi.WifiScanner$PnoSettings$PnoNetwork
-android.net.wifi.WifiScanner$PnoSettings
-android.net.wifi.WifiScanner$ScanData$1
-android.net.wifi.WifiScanner$ScanData
-android.net.wifi.WifiScanner$ScanListener
-android.net.wifi.WifiScanner$ScanSettings$1
-android.net.wifi.WifiScanner$ScanSettings$HiddenNetwork
-android.net.wifi.WifiScanner$ScanSettings
-android.net.wifi.WifiScanner$ServiceHandler
-android.net.wifi.WifiScanner
-android.net.wifi.WifiSsid$1
-android.net.wifi.WifiSsid
-android.net.wifi.WifiUsabilityStatsEntry$1
-android.net.wifi.WifiUsabilityStatsEntry
-android.net.wifi.WpsInfo$1
-android.net.wifi.WpsInfo
-android.net.wifi.aware.Characteristics$1
-android.net.wifi.aware.Characteristics
-android.net.wifi.aware.ConfigRequest$1
-android.net.wifi.aware.ConfigRequest
-android.net.wifi.aware.IWifiAwareManager$Stub
-android.net.wifi.aware.IWifiAwareManager
-android.net.wifi.aware.WifiAwareManager
-android.net.wifi.hotspot2.IProvisioningCallback$Stub$Proxy
-android.net.wifi.hotspot2.IProvisioningCallback$Stub
-android.net.wifi.hotspot2.IProvisioningCallback
-android.net.wifi.hotspot2.OsuProvider$1
-android.net.wifi.hotspot2.OsuProvider
-android.net.wifi.hotspot2.PasspointConfiguration$1
-android.net.wifi.hotspot2.PasspointConfiguration
-android.net.wifi.hotspot2.pps.HomeSp$1
-android.net.wifi.hotspot2.pps.HomeSp
-android.net.wifi.p2p.IWifiP2pManager$Stub$Proxy
-android.net.wifi.p2p.IWifiP2pManager$Stub
-android.net.wifi.p2p.IWifiP2pManager
-android.net.wifi.p2p.WifiP2pConfig$1
-android.net.wifi.p2p.WifiP2pConfig
-android.net.wifi.p2p.WifiP2pDevice$1
-android.net.wifi.p2p.WifiP2pDevice
-android.net.wifi.p2p.WifiP2pDeviceList$1
-android.net.wifi.p2p.WifiP2pDeviceList
-android.net.wifi.p2p.WifiP2pGroup
-android.net.wifi.p2p.WifiP2pGroupList$1
-android.net.wifi.p2p.WifiP2pGroupList$2
-android.net.wifi.p2p.WifiP2pGroupList$GroupDeleteListener
-android.net.wifi.p2p.WifiP2pGroupList
-android.net.wifi.p2p.WifiP2pInfo$1
-android.net.wifi.p2p.WifiP2pInfo
-android.net.wifi.p2p.WifiP2pManager
-android.net.wifi.p2p.WifiP2pProvDiscEvent
-android.net.wifi.p2p.nsd.WifiP2pServiceInfo$1
-android.net.wifi.p2p.nsd.WifiP2pServiceInfo
-android.net.wifi.rtt.IRttCallback$Stub$Proxy
-android.net.wifi.rtt.IRttCallback$Stub
-android.net.wifi.rtt.IRttCallback
-android.net.wifi.rtt.IWifiRttManager$Stub
-android.net.wifi.rtt.IWifiRttManager
-android.net.wifi.rtt.RangingRequest$1
-android.net.wifi.rtt.RangingRequest
-android.net.wifi.rtt.WifiRttManager
+android.net.wifi.wificond.WifiCondManager
 android.nfc.BeamShareData$1
 android.nfc.BeamShareData
 android.nfc.IAppCallback$Stub$Proxy
@@ -3390,11 +3415,9 @@
 android.nfc.INfcAdapter$Stub$Proxy
 android.nfc.INfcAdapter$Stub
 android.nfc.INfcAdapter
-android.nfc.INfcAdapterExtras
 android.nfc.INfcCardEmulation$Stub$Proxy
 android.nfc.INfcCardEmulation$Stub
 android.nfc.INfcCardEmulation
-android.nfc.INfcDta
 android.nfc.INfcFCardEmulation$Stub$Proxy
 android.nfc.INfcFCardEmulation$Stub
 android.nfc.INfcFCardEmulation
@@ -3539,7 +3562,6 @@
 android.os.EventLogTags
 android.os.FactoryTest
 android.os.FileBridge$FileBridgeOutputStream
-android.os.FileBridge
 android.os.FileObserver$ObserverThread
 android.os.FileUtils$1
 android.os.FileUtils
@@ -3611,8 +3633,6 @@
 android.os.IProgressListener$Stub$Proxy
 android.os.IProgressListener$Stub
 android.os.IProgressListener
-android.os.IPullAtomCallback$Stub
-android.os.IPullAtomCallback
 android.os.IRecoverySystem$Stub
 android.os.IRecoverySystem
 android.os.IRemoteCallback$Stub$Proxy
@@ -3647,8 +3667,6 @@
 android.os.IUserManager$Stub$Proxy
 android.os.IUserManager$Stub
 android.os.IUserManager
-android.os.IUserRestrictionsListener$Stub
-android.os.IUserRestrictionsListener
 android.os.IVibratorService$Stub$Proxy
 android.os.IVibratorService$Stub
 android.os.IVibratorService
@@ -3715,6 +3733,7 @@
 android.os.PowerWhitelistManager
 android.os.Process$ProcessStartResult
 android.os.Process
+android.os.ProxyFileDescriptorCallback
 android.os.RecoverySystem
 android.os.Registrant
 android.os.RegistrantList
@@ -3746,10 +3765,6 @@
 android.os.ShellCommand
 android.os.SimpleClock
 android.os.StatFs
-android.os.StatsDimensionsValue$1
-android.os.StatsDimensionsValue
-android.os.StatsLogEventWrapper$1
-android.os.StatsLogEventWrapper
 android.os.StrictMode$1
 android.os.StrictMode$2
 android.os.StrictMode$3
@@ -3780,12 +3795,10 @@
 android.os.SystemClock$3
 android.os.SystemClock
 android.os.SystemProperties
-android.os.SystemService$1
 android.os.SystemService$State
 android.os.SystemService
 android.os.SystemUpdateManager
 android.os.SystemVibrator
-android.os.TelephonyServiceManager$ServiceRegisterer
 android.os.TelephonyServiceManager
 android.os.Temperature$1
 android.os.Temperature
@@ -3831,7 +3844,6 @@
 android.os.connectivity.WifiBatteryStats$1
 android.os.connectivity.WifiBatteryStats
 android.os.health.HealthKeys$Constant
-android.os.health.HealthKeys$Constants
 android.os.health.HealthKeys$SortedIntArray
 android.os.health.HealthStats
 android.os.health.HealthStatsParceler$1
@@ -3844,8 +3856,7 @@
 android.os.image.DynamicSystemManager
 android.os.image.IDynamicSystemService$Stub
 android.os.image.IDynamicSystemService
-android.os.incremental.IncrementalDataLoaderParams
-android.os.incremental.IncrementalDataLoaderParamsParcel
+android.os.incremental.IncrementalManager
 android.os.storage.DiskInfo$1
 android.os.storage.DiskInfo
 android.os.storage.IObbActionListener$Stub$Proxy
@@ -3860,9 +3871,12 @@
 android.os.storage.IStorageShutdownObserver$Stub$Proxy
 android.os.storage.IStorageShutdownObserver$Stub
 android.os.storage.IStorageShutdownObserver
+android.os.storage.OnObbStateChangeListener
 android.os.storage.StorageEventListener
+android.os.storage.StorageManager$1
 android.os.storage.StorageManager$ObbActionListener
 android.os.storage.StorageManager$StorageEventListenerDelegate
+android.os.storage.StorageManager$StorageVolumeCallback
 android.os.storage.StorageManager
 android.os.storage.StorageManagerInternal$ExternalStorageMountPolicy
 android.os.storage.StorageManagerInternal
@@ -3919,25 +3933,17 @@
 android.print.IPrintSpooler$Stub$Proxy
 android.print.IPrintSpooler$Stub
 android.print.IPrintSpooler
-android.print.IPrintSpoolerCallbacks$Stub
-android.print.IPrintSpoolerCallbacks
-android.print.IPrintSpoolerClient$Stub
-android.print.IPrintSpoolerClient
 android.print.PrintDocumentAdapter
 android.print.PrintJobInfo$1
 android.print.PrintJobInfo
 android.print.PrintManager
-android.printservice.IPrintServiceClient$Stub
-android.printservice.IPrintServiceClient
 android.printservice.PrintServiceInfo$1
 android.printservice.PrintServiceInfo
 android.privacy.DifferentialPrivacyConfig
 android.privacy.DifferentialPrivacyEncoder
-android.privacy.internal.longitudinalreporting.LongitudinalReportingConfig
 android.privacy.internal.longitudinalreporting.LongitudinalReportingEncoder
 android.privacy.internal.rappor.RapporConfig
 android.privacy.internal.rappor.RapporEncoder
-android.provider.-$$Lambda$DeviceConfig$6U9gBH6h5Oab2DB_e83az4n_WEo
 android.provider.-$$Lambda$FontsContract$3FDNQd-WsglsyDhif-aHVbzkfrA
 android.provider.-$$Lambda$FontsContract$rqfIZKvP1frnI9vP1hVA8jQN_RE
 android.provider.-$$Lambda$Settings$NameValueCache$qSyMM6rUAHCa-5rsP-atfAqR3sA
@@ -3974,8 +3980,6 @@
 android.provider.ContactsContract
 android.provider.DeviceConfig$1
 android.provider.DeviceConfig$OnPropertiesChangedListener
-android.provider.DeviceConfig$Properties$Builder
-android.provider.DeviceConfig$Properties
 android.provider.DeviceConfig
 android.provider.Downloads$Impl
 android.provider.Downloads
@@ -3984,15 +3988,6 @@
 android.provider.FontsContract$FontFamilyResult
 android.provider.FontsContract$FontInfo
 android.provider.FontsContract
-android.provider.MediaStore$Audio$AudioColumns
-android.provider.MediaStore$Audio$Media
-android.provider.MediaStore$Files
-android.provider.MediaStore$Images$ImageColumns
-android.provider.MediaStore$Images$Media
-android.provider.MediaStore$MediaColumns
-android.provider.MediaStore$Video$Media
-android.provider.MediaStore$Video$VideoColumns
-android.provider.MediaStore
 android.provider.SearchIndexableData
 android.provider.SearchIndexableResource
 android.provider.SearchIndexablesProvider
@@ -4017,12 +4012,11 @@
 android.provider.Telephony$SimInfo
 android.provider.Telephony$Sms
 android.provider.Telephony$TextBasedSmsColumns
-android.provider.Telephony$Threads
-android.provider.Telephony$ThreadsColumns
 android.provider.UserDictionary$Words
 android.renderscript.RenderScriptCacheDir
 android.security.AttestedKeyPair
 android.security.Credentials
+android.security.FileIntegrityManager
 android.security.IKeyChainAliasCallback$Stub
 android.security.IKeyChainAliasCallback
 android.security.IKeyChainService$Stub$Proxy
@@ -4045,10 +4039,6 @@
 android.security.Scrypt
 android.security.keymaster.IKeyAttestationApplicationIdProvider$Stub
 android.security.keymaster.IKeyAttestationApplicationIdProvider
-android.security.keymaster.KeyAttestationApplicationId$1
-android.security.keymaster.KeyAttestationApplicationId
-android.security.keymaster.KeyAttestationPackageInfo$1
-android.security.keymaster.KeyAttestationPackageInfo
 android.security.keymaster.KeyCharacteristics$1
 android.security.keymaster.KeyCharacteristics
 android.security.keymaster.KeymasterArgument$1
@@ -4113,19 +4103,15 @@
 android.security.keystore.UserNotAuthenticatedException
 android.security.keystore.Utils
 android.security.keystore.recovery.KeyChainProtectionParams$1
-android.security.keystore.recovery.KeyChainProtectionParams$Builder
 android.security.keystore.recovery.KeyChainProtectionParams
 android.security.keystore.recovery.KeyChainSnapshot$1
-android.security.keystore.recovery.KeyChainSnapshot$Builder
 android.security.keystore.recovery.KeyChainSnapshot
 android.security.keystore.recovery.KeyDerivationParams$1
 android.security.keystore.recovery.KeyDerivationParams
 android.security.keystore.recovery.RecoveryCertPath$1
 android.security.keystore.recovery.RecoveryCertPath
 android.security.keystore.recovery.RecoveryController
-android.security.keystore.recovery.TrustedRootCertificates
 android.security.keystore.recovery.WrappedApplicationKey$1
-android.security.keystore.recovery.WrappedApplicationKey$Builder
 android.security.keystore.recovery.WrappedApplicationKey
 android.security.keystore.recovery.X509CertificateParsingUtils
 android.security.net.config.ApplicationConfig
@@ -4164,40 +4150,30 @@
 android.service.appprediction.IPredictionService
 android.service.autofill.AutofillServiceInfo
 android.service.autofill.FieldClassificationUserData
-android.service.autofill.FillContext$1
-android.service.autofill.FillContext
-android.service.autofill.FillRequest$1
-android.service.autofill.FillRequest
 android.service.autofill.FillResponse$1
 android.service.autofill.FillResponse
 android.service.autofill.IAutoFillService$Stub$Proxy
 android.service.autofill.IAutoFillService$Stub
 android.service.autofill.IAutoFillService
-android.service.autofill.IFillCallback$Stub
-android.service.autofill.IFillCallback
 android.service.autofill.UserData$1
 android.service.autofill.UserData
 android.service.autofill.augmented.IAugmentedAutofillService$Stub$Proxy
 android.service.autofill.augmented.IAugmentedAutofillService$Stub
 android.service.autofill.augmented.IAugmentedAutofillService
-android.service.autofill.augmented.IFillCallback$Stub
-android.service.autofill.augmented.IFillCallback
 android.service.carrier.CarrierIdentifier$1
 android.service.carrier.CarrierIdentifier
+android.service.carrier.CarrierMessagingServiceWrapper$CarrierMessagingCallbackWrapper
+android.service.carrier.CarrierMessagingServiceWrapper
 android.service.carrier.ICarrierService$Stub$Proxy
 android.service.carrier.ICarrierService$Stub
 android.service.carrier.ICarrierService
-android.service.contentcapture.ActivityEvent$1
-android.service.contentcapture.ActivityEvent
 android.service.contentcapture.ContentCaptureServiceInfo
 android.service.contentcapture.FlushMetrics$1
 android.service.contentcapture.FlushMetrics
 android.service.contentcapture.IContentCaptureService$Stub$Proxy
 android.service.contentcapture.IContentCaptureService$Stub
 android.service.contentcapture.IContentCaptureService
-android.service.contentcapture.IContentCaptureServiceCallback$Stub
-android.service.contentcapture.IContentCaptureServiceCallback
-android.service.contentcapture.SnapshotData$1
+android.service.dataloader.DataLoaderService
 android.service.dreams.DreamManagerInternal
 android.service.dreams.IDreamManager$Stub$Proxy
 android.service.dreams.IDreamManager$Stub
@@ -4209,17 +4185,38 @@
 android.service.euicc.EuiccProfileInfo
 android.service.euicc.GetEuiccProfileInfoListResult$1
 android.service.euicc.GetEuiccProfileInfoListResult
+android.service.euicc.IDeleteSubscriptionCallback$Stub
+android.service.euicc.IDeleteSubscriptionCallback
+android.service.euicc.IDownloadSubscriptionCallback$Stub
+android.service.euicc.IDownloadSubscriptionCallback
+android.service.euicc.IEraseSubscriptionsCallback$Stub
+android.service.euicc.IEraseSubscriptionsCallback
 android.service.euicc.IEuiccService$Stub$Proxy
 android.service.euicc.IEuiccService$Stub
 android.service.euicc.IEuiccService
+android.service.euicc.IGetDefaultDownloadableSubscriptionListCallback$Stub
+android.service.euicc.IGetDefaultDownloadableSubscriptionListCallback
+android.service.euicc.IGetDownloadableSubscriptionMetadataCallback$Stub
+android.service.euicc.IGetDownloadableSubscriptionMetadataCallback
+android.service.euicc.IGetEidCallback$Stub
+android.service.euicc.IGetEidCallback
+android.service.euicc.IGetEuiccInfoCallback$Stub
+android.service.euicc.IGetEuiccInfoCallback
 android.service.euicc.IGetEuiccProfileInfoListCallback$Stub
 android.service.euicc.IGetEuiccProfileInfoListCallback
+android.service.euicc.IGetOtaStatusCallback$Stub
+android.service.euicc.IGetOtaStatusCallback
+android.service.euicc.IRetainSubscriptionsForFactoryResetCallback$Stub
+android.service.euicc.IRetainSubscriptionsForFactoryResetCallback
+android.service.euicc.ISwitchToSubscriptionCallback$Stub
+android.service.euicc.ISwitchToSubscriptionCallback
+android.service.euicc.IUpdateSubscriptionNicknameCallback$Stub
+android.service.euicc.IUpdateSubscriptionNicknameCallback
 android.service.gatekeeper.GateKeeperResponse$1
 android.service.gatekeeper.GateKeeperResponse
 android.service.gatekeeper.IGateKeeperService$Stub$Proxy
 android.service.gatekeeper.IGateKeeperService$Stub
 android.service.gatekeeper.IGateKeeperService
-android.service.incremental.IncrementalDataLoaderService
 android.service.media.IMediaBrowserService$Stub$Proxy
 android.service.media.IMediaBrowserService$Stub
 android.service.media.IMediaBrowserService
@@ -4266,7 +4263,6 @@
 android.service.notification.NotificationRankingUpdate
 android.service.notification.NotificationStats$1
 android.service.notification.NotificationStats
-android.service.notification.NotifyingApp$1
 android.service.notification.ScheduleCalendar
 android.service.notification.SnoozeCriterion$1
 android.service.notification.SnoozeCriterion
@@ -4299,8 +4295,6 @@
 android.service.trust.ITrustAgentService$Stub$Proxy
 android.service.trust.ITrustAgentService$Stub
 android.service.trust.ITrustAgentService
-android.service.trust.ITrustAgentServiceCallback$Stub
-android.service.trust.ITrustAgentServiceCallback
 android.service.voice.IVoiceInteractionService$Stub$Proxy
 android.service.voice.IVoiceInteractionService$Stub
 android.service.voice.IVoiceInteractionService
@@ -4339,26 +4333,13 @@
 android.speech.tts.TextToSpeech
 android.speech.tts.TtsEngines
 android.stats.devicepolicy.nano.StringList
-android.sysprop.-$$Lambda$TelephonyProperties$0Zy6hglFVc-K9jiJWmuHmilIMkY
-android.sysprop.-$$Lambda$TelephonyProperties$2V_2ZQoGHfOIfKo_A8Ss547oL-c
-android.sysprop.-$$Lambda$TelephonyProperties$BfPaTA0e9gauJmR4vGNCDkGZ3uc
-android.sysprop.-$$Lambda$TelephonyProperties$EV4LSOwY7Dsh1rJalZDLmnGJw5I
 android.sysprop.-$$Lambda$TelephonyProperties$H4jN0VIBNpZQBeWYt6qS3DCe_M8
-android.sysprop.-$$Lambda$TelephonyProperties$JNTRmlscGaFlYo_3krOr_WWd2QI
-android.sysprop.-$$Lambda$TelephonyProperties$UKEfAuJVPm5cKR_UnPj1L66mN34
-android.sysprop.-$$Lambda$TelephonyProperties$VtSZ_Uto4bMa49ncgAfdWewMFOU
-android.sysprop.-$$Lambda$TelephonyProperties$dc-CgjsF3BtDxLSSKL5bQ9ullG0
-android.sysprop.-$$Lambda$TelephonyProperties$fdR0mRnJd3OymvjDc_MI1AHnMwc
-android.sysprop.-$$Lambda$TelephonyProperties$iJa3afMQmWbO1DX4jS9zkcOKZlY
-android.sysprop.-$$Lambda$TelephonyProperties$kCQNtMqtfi6MMlFLqtIufNXwOS8
 android.sysprop.-$$Lambda$TelephonyProperties$kemQbl44ndTqXdQVvnYppJuQboQ
-android.sysprop.-$$Lambda$TelephonyProperties$rKoNB08X7R8OCPq-VDCWDOm3lDM
 android.sysprop.AdbProperties
 android.sysprop.CryptoProperties$state_values
 android.sysprop.CryptoProperties$type_values
 android.sysprop.CryptoProperties
 android.sysprop.DisplayProperties
-android.sysprop.ProductProperties
 android.sysprop.TelephonyProperties
 android.sysprop.VoldProperties
 android.system.ErrnoException
@@ -4398,10 +4379,8 @@
 android.telecom.Conferenceable
 android.telecom.Connection$FailureSignalingConnection
 android.telecom.Connection$Listener
-android.telecom.Connection$VideoProvider
 android.telecom.Connection
 android.telecom.ConnectionRequest$1
-android.telecom.ConnectionRequest$Builder
 android.telecom.ConnectionRequest
 android.telecom.ConnectionService$1
 android.telecom.ConnectionService$2
@@ -4420,8 +4399,6 @@
 android.telecom.Logging.EventManager$Event
 android.telecom.Logging.EventManager$EventListener
 android.telecom.Logging.EventManager$EventRecord
-android.telecom.Logging.EventManager$Loggable
-android.telecom.Logging.EventManager$TimedEventPair
 android.telecom.Logging.EventManager
 android.telecom.Logging.Runnable$1
 android.telecom.Logging.Runnable
@@ -4433,8 +4410,6 @@
 android.telecom.Logging.SessionManager$ISessionIdQueryHandler
 android.telecom.Logging.SessionManager$ISessionListener
 android.telecom.Logging.SessionManager
-android.telecom.ParcelableCall$1
-android.telecom.ParcelableCall
 android.telecom.ParcelableConference$1
 android.telecom.ParcelableConference
 android.telecom.ParcelableConnection$1
@@ -4447,32 +4422,22 @@
 android.telecom.RemoteConnectionManager
 android.telecom.StatusHints$1
 android.telecom.StatusHints
-android.telecom.TelecomAnalytics$SessionTiming$1
-android.telecom.TelecomAnalytics
 android.telecom.TelecomManager
 android.telecom.VideoProfile$1
 android.telecom.VideoProfile
 android.telephony.-$$Lambda$DataFailCause$djkZSxdG-s-w2L5rQKiGu6OudyY
 android.telephony.-$$Lambda$MLKtmRGKP3e0WU7x_KyS5-Vg8q4
 android.telephony.-$$Lambda$NetworkRegistrationInfo$1JuZmO5PoYGZY8bHhZYwvmqwOB0
-android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$0s34qsuHFsa43jUHrTkD62ni6Ds
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$1M3m0i6211i2YjWyTDT7l0bJm3I
-android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$2VMO21pFQN-JN3kpn6vQN1zPFEU
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$2cMrwdqnKBpixpApeIX38rmRLak
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$4NHt5Shg_DHV-T1IxfcQLHP5-j0
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$6czWSGzxct0CXPVO54T0aq05qls
-android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$E9hw_LXFliykadzCB_mw8nukNGI
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$Hbn6-eZxY2p3rjOfStodI04A8E8
-android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$JalixlMNdjktPsNntP_JT9pymhs
-android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$MtX5gtAKHxLcUp_ibya6VO1zuoE
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$Q2A8FgYlU8_D6PD78tThGut_rTc
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$TqrkuLPlaG_ucU7VbLS4tnf8hG8
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$WYWtWHdkZDxBd9anjoxyZozPWHc
-android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$XyayAGWQZC2dNjwr697SfSGBBOc
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$YY3srkIkMm8vTSFJZHoiKzUUrGs
-android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$aysbwPqxcLV_5w6LP0TzZu2D-ew
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$bELzxgwsPigyVKYkAXBO2BjcSm8
-android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$dUc3j82sK9P9Zpaq-91n9bk_Rpc
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$jlNX9JiqGSNg9W49vDcKucKdeCI
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$nrGqSRBJrc3_EwotCDNwfKeizIo
 android.telephony.-$$Lambda$PhoneStateListener$IPhoneStateListenerStub$oDAZqs8paeefe_3k_uRKV5plQW4
@@ -4484,6 +4449,7 @@
 android.telephony.-$$Lambda$TelephonyFrameworkInitializer$MLDtRnX1dj1RKFdjgIsOvcQxhA0
 android.telephony.-$$Lambda$TelephonyFrameworkInitializer$b_92_3ZijRrdEa9yLyFA5xu19OM
 android.telephony.-$$Lambda$TelephonyFrameworkInitializer$mpe0Kh92VEQmEtmo60oqykdvnBE
+android.telephony.-$$Lambda$TelephonyFrameworkInitializer$o3geRfUaRT9tnqKKZbu1EbUxw4Q
 android.telephony.-$$Lambda$TelephonyFrameworkInitializer$sQClc4rjc9ydh0nXpY79gr33av4
 android.telephony.AccessNetworkConstants$AccessNetworkType
 android.telephony.AccessNetworkConstants$TransportType
@@ -4550,7 +4516,6 @@
 android.telephony.DataFailCause
 android.telephony.DataSpecificRegistrationInfo$1
 android.telephony.DataSpecificRegistrationInfo
-android.telephony.DisconnectCause
 android.telephony.ICellInfoCallback$Stub$Proxy
 android.telephony.ICellInfoCallback$Stub
 android.telephony.ICellInfoCallback
@@ -4573,8 +4538,6 @@
 android.telephony.ModemActivityInfo$1
 android.telephony.ModemActivityInfo$TransmitPower
 android.telephony.ModemActivityInfo
-android.telephony.ModemInfo$1
-android.telephony.ModemInfo
 android.telephony.NeighboringCellInfo$1
 android.telephony.NeighboringCellInfo
 android.telephony.NetworkRegistrationInfo$1
@@ -4627,7 +4590,6 @@
 android.telephony.TelephonyManager$MultiSimVariants
 android.telephony.TelephonyManager
 android.telephony.TelephonyRegistryManager
-android.telephony.TelephonyScanManager$NetworkScanCallback
 android.telephony.UiccAccessRule$1
 android.telephony.UiccAccessRule
 android.telephony.UiccCardInfo$1
@@ -4693,7 +4655,6 @@
 android.telephony.ims.ProvisioningManager$Callback$CallbackBinder
 android.telephony.ims.ProvisioningManager$Callback
 android.telephony.ims.RegistrationManager$1
-android.telephony.ims.RegistrationManager$RegistrationCallback$RegistrationBinder
 android.telephony.ims.RegistrationManager$RegistrationCallback
 android.telephony.ims.RegistrationManager
 android.telephony.ims.aidl.IImsCapabilityCallback$Stub$Proxy
@@ -4725,8 +4686,6 @@
 android.telephony.ims.aidl.IImsSmsListener$Stub$Proxy
 android.telephony.ims.aidl.IImsSmsListener$Stub
 android.telephony.ims.aidl.IImsSmsListener
-android.telephony.ims.feature.-$$Lambda$ImsFeature$9bLETU1BeS-dFzQnbBBs3kwaz-8
-android.telephony.ims.feature.-$$Lambda$ImsFeature$rPSMsRhoup9jfT6nt1MV2qhomrM
 android.telephony.ims.feature.CapabilityChangeRequest$1
 android.telephony.ims.feature.CapabilityChangeRequest$CapabilityPair
 android.telephony.ims.feature.CapabilityChangeRequest
@@ -4898,7 +4857,6 @@
 android.text.style.AbsoluteSizeSpan
 android.text.style.AccessibilityClickableSpan$1
 android.text.style.AccessibilityClickableSpan
-android.text.style.AccessibilityReplacementSpan
 android.text.style.AccessibilityURLSpan
 android.text.style.AlignmentSpan$Standard
 android.text.style.AlignmentSpan
@@ -5097,7 +5055,6 @@
 android.util.Property
 android.util.Range
 android.util.Rational
-android.util.RecurrenceRule$1
 android.util.RecurrenceRule$NonrecurringIterator
 android.util.RecurrenceRule$RecurringIterator
 android.util.RecurrenceRule
@@ -5116,24 +5073,19 @@
 android.util.StateSet
 android.util.StatsLog
 android.util.StatsLogInternal
-android.util.StringBuilderPrinter
 android.util.SuperNotCalledException
 android.util.TimeUtils
 android.util.TimedRemoteCaller
-android.util.TimestampedValue$1
-android.util.TimestampedValue
 android.util.TimingLogger
 android.util.TimingsTraceLog
 android.util.TrustedTime
 android.util.TypedValue
 android.util.UtilConfig
-android.util.Xml$Encoding
 android.util.Xml
 android.util.XmlPullAttributes
 android.util.apk.ApkSignatureSchemeV2Verifier$VerifiedSigner
 android.util.apk.ApkSignatureSchemeV2Verifier
 android.util.apk.ApkSignatureSchemeV3Verifier$PlatformNotSupportedException
-android.util.apk.ApkSignatureSchemeV3Verifier$VerifiedProofOfRotation
 android.util.apk.ApkSignatureSchemeV3Verifier$VerifiedSigner
 android.util.apk.ApkSignatureSchemeV3Verifier
 android.util.apk.ApkSignatureVerifier
@@ -5176,18 +5128,14 @@
 android.view.-$$Lambda$FocusFinder$P8rLvOJhymJH5ALAgUjGaM5gxKA
 android.view.-$$Lambda$FocusFinder$Pgx6IETuqCkrhJYdiBes48tolG4
 android.view.-$$Lambda$InsetsController$Cj7UJrCkdHvJAZ_cYKrXuTMsjz8
-android.view.-$$Lambda$InsetsController$HI9QZ2HvGm6iykc-WONz2KPG61Q
 android.view.-$$Lambda$PYGleuqIeCxjTD1pJqqx1opFv1g
 android.view.-$$Lambda$QI1s392qW8l6mC24bcy9050SkuY
 android.view.-$$Lambda$SurfaceView$SyyzxOgxKwZMRgiiTGcRYbOU5JY
 android.view.-$$Lambda$SurfaceView$w68OV7dB_zKVNsA-r0IrAUtyWas
-android.view.-$$Lambda$TextureView$WAq1rgfoZeDSt6cBQga7iQDymYk
 android.view.-$$Lambda$ThreadedRenderer$ydBD-R1iP5u-97XYakm-jKvC1b4
 android.view.-$$Lambda$View$llq76MkPXP4bNcb9oJt_msw0fnQ
 android.view.-$$Lambda$ViewRootImpl$IReiNMSbDakZSGbIZuL_ifaFWn8
-android.view.-$$Lambda$ViewRootImpl$YBiqAhbCbXVPSKdbE3K4rH2gpxI
 android.view.-$$Lambda$ViewRootImpl$dznxCZGM2R1fsBljsJKomLjBRoM
-android.view.-$$Lambda$ViewRootImpl$zlBUjCwDtoAWMNaHI62DIq-eKFY
 android.view.-$$Lambda$WindowManagerGlobal$2bR3FsEm4EdRwuXfttH0wA2xOW4
 android.view.-$$Lambda$WlJa6OPA72p3gYtA3nVKC7Z1tGY
 android.view.-$$Lambda$cZhmLzK8aetUdx4VlP9w5jR7En0
@@ -5253,22 +5201,15 @@
 android.view.GestureDetector
 android.view.GestureExclusionTracker$GestureExclusionViewInfo
 android.view.GestureExclusionTracker
-android.view.GhostView
 android.view.Gravity
 android.view.HandlerActionQueue$HandlerAction
 android.view.HandlerActionQueue
 android.view.IAppTransitionAnimationSpecsFuture$Stub$Proxy
 android.view.IAppTransitionAnimationSpecsFuture$Stub
 android.view.IAppTransitionAnimationSpecsFuture
-android.view.IApplicationToken$Stub
-android.view.IApplicationToken
 android.view.IDisplayFoldListener$Stub$Proxy
 android.view.IDisplayFoldListener$Stub
 android.view.IDisplayFoldListener
-android.view.IDisplayWindowListener$Stub
-android.view.IDisplayWindowListener
-android.view.IDisplayWindowRotationController$Stub
-android.view.IDisplayWindowRotationController
 android.view.IDockedStackListener$Stub$Proxy
 android.view.IDockedStackListener$Stub
 android.view.IDockedStackListener
@@ -5287,13 +5228,9 @@
 android.view.IPinnedStackListener$Stub$Proxy
 android.view.IPinnedStackListener$Stub
 android.view.IPinnedStackListener
-android.view.IRecentsAnimationController$Stub
-android.view.IRecentsAnimationController
 android.view.IRecentsAnimationRunner$Stub$Proxy
 android.view.IRecentsAnimationRunner$Stub
 android.view.IRecentsAnimationRunner
-android.view.IRemoteAnimationFinishedCallback$Stub
-android.view.IRemoteAnimationFinishedCallback
 android.view.IRemoteAnimationRunner$Stub$Proxy
 android.view.IRemoteAnimationRunner$Stub
 android.view.IRemoteAnimationRunner
@@ -5309,9 +5246,6 @@
 android.view.IWindow$Stub$Proxy
 android.view.IWindow$Stub
 android.view.IWindow
-android.view.IWindowContainer$Stub
-android.view.IWindowContainer
-android.view.IWindowId$Stub
 android.view.IWindowId
 android.view.IWindowManager$Stub$Proxy
 android.view.IWindowManager$Stub
@@ -5336,13 +5270,12 @@
 android.view.InputEventConsistencyVerifier
 android.view.InputEventReceiver
 android.view.InputEventSender
-android.view.InputMonitor
 android.view.InputQueue$Callback
 android.view.InputQueue$FinishedInputEventCallback
 android.view.InputQueue
 android.view.InputWindowHandle
+android.view.InsetsAnimationControlCallbacks
 android.view.InsetsController
-android.view.InsetsFlags
 android.view.InsetsSource$1
 android.view.InsetsSource
 android.view.InsetsSourceConsumer
@@ -5389,8 +5322,6 @@
 android.view.RemoteAnimationDefinition$RemoteAnimationAdapterEntry$1
 android.view.RemoteAnimationDefinition$RemoteAnimationAdapterEntry
 android.view.RemoteAnimationDefinition
-android.view.RemoteAnimationTarget$1
-android.view.RemoteAnimationTarget
 android.view.RenderNodeAnimator$1
 android.view.RenderNodeAnimator$DelayedAnimationHelper
 android.view.RenderNodeAnimator
@@ -5405,7 +5336,6 @@
 android.view.SubMenu
 android.view.Surface$1
 android.view.Surface$CompatibleCanvas
-android.view.Surface$HwuiContext
 android.view.Surface$OutOfResourcesException
 android.view.Surface
 android.view.SurfaceControl$1
@@ -5413,7 +5343,6 @@
 android.view.SurfaceControl$CieXyz
 android.view.SurfaceControl$DesiredDisplayConfigSpecs
 android.view.SurfaceControl$DisplayPrimaries
-android.view.SurfaceControl$PhysicalDisplayInfo
 android.view.SurfaceControl$ScreenshotGraphicBuffer
 android.view.SurfaceControl$Transaction$1
 android.view.SurfaceControl$Transaction
@@ -5471,7 +5400,6 @@
 android.view.View$OnKeyListener
 android.view.View$OnLayoutChangeListener
 android.view.View$OnLongClickListener
-android.view.View$OnScrollChangeListener
 android.view.View$OnSystemUiVisibilityChangeListener
 android.view.View$OnTouchListener
 android.view.View$PerformClick
@@ -5492,7 +5420,6 @@
 android.view.ViewGroup$4
 android.view.ViewGroup$ChildListForAccessibility
 android.view.ViewGroup$ChildListForAutoFillOrContentCapture
-android.view.ViewGroup$HoverTarget
 android.view.ViewGroup$LayoutParams
 android.view.ViewGroup$MarginLayoutParams
 android.view.ViewGroup$OnHierarchyChangeListener
@@ -5527,7 +5454,6 @@
 android.view.ViewRootImpl$ConsumeBatchedInputImmediatelyRunnable
 android.view.ViewRootImpl$ConsumeBatchedInputRunnable
 android.view.ViewRootImpl$EarlyPostImeInputStage
-android.view.ViewRootImpl$GfxInfo
 android.view.ViewRootImpl$HighContrastTextManager
 android.view.ViewRootImpl$ImeInputStage
 android.view.ViewRootImpl$InputStage
@@ -5584,12 +5510,10 @@
 android.view.WindowAnimationFrameStats$1
 android.view.WindowAnimationFrameStats
 android.view.WindowCallbacks
-android.view.WindowContainerTransaction
 android.view.WindowContentFrameStats$1
 android.view.WindowContentFrameStats
 android.view.WindowId$1
 android.view.WindowInsets$Builder
-android.view.WindowInsets$Side
 android.view.WindowInsets$Type
 android.view.WindowInsets
 android.view.WindowInsetsController
@@ -5611,7 +5535,6 @@
 android.view.accessibility.AccessibilityEvent
 android.view.accessibility.AccessibilityEventSource
 android.view.accessibility.AccessibilityManager$1
-android.view.accessibility.AccessibilityManager$AccessibilityPolicy
 android.view.accessibility.AccessibilityManager$AccessibilityServicesStateChangeListener
 android.view.accessibility.AccessibilityManager$AccessibilityStateChangeListener
 android.view.accessibility.AccessibilityManager$HighTextContrastChangeListener
@@ -5682,10 +5605,8 @@
 android.view.autofill.AutofillManager$AutofillCallback
 android.view.autofill.AutofillManager$AutofillClient
 android.view.autofill.AutofillManager$AutofillManagerClient
-android.view.autofill.AutofillManager$TrackedViews
 android.view.autofill.AutofillManager
 android.view.autofill.AutofillManagerInternal
-android.view.autofill.AutofillPopupWindow
 android.view.autofill.AutofillValue$1
 android.view.autofill.AutofillValue
 android.view.autofill.Helper
@@ -5696,7 +5617,6 @@
 android.view.autofill.IAutoFillManagerClient$Stub
 android.view.autofill.IAutoFillManagerClient
 android.view.autofill.IAutofillWindowPresenter
-android.view.autofill.ParcelableMap
 android.view.contentcapture.ContentCaptureCondition$1
 android.view.contentcapture.ContentCaptureCondition
 android.view.contentcapture.ContentCaptureContext$1
@@ -5704,12 +5624,10 @@
 android.view.contentcapture.ContentCaptureHelper
 android.view.contentcapture.ContentCaptureManager$ContentCaptureClient
 android.view.contentcapture.ContentCaptureManager
-android.view.contentcapture.ContentCaptureSession
 android.view.contentcapture.DataRemovalRequest$1
 android.view.contentcapture.DataRemovalRequest
 android.view.contentcapture.IContentCaptureManager$Stub
 android.view.contentcapture.IContentCaptureManager
-android.view.contentcapture.MainContentCaptureSession
 android.view.inputmethod.-$$Lambda$InputMethodManager$dfnCauFoZCf-HfXs1QavrkwWDf0
 android.view.inputmethod.-$$Lambda$InputMethodManager$iDWn3IGSUFqIcs8Py42UhfrshxI
 android.view.inputmethod.BaseInputConnection
@@ -5760,7 +5678,6 @@
 android.view.textclassifier.-$$Lambda$L_UQMPjXwBN0ch4zL2dD82nf9RI
 android.view.textclassifier.-$$Lambda$NxwbyZSxofZ4Z5SQhfXmtLQ1nxk
 android.view.textclassifier.-$$Lambda$OGSS2qx6njxlnp0dnKb4lA3jnw8
-android.view.textclassifier.-$$Lambda$TextClassificationManager$JIaezIJbMig_-kVzN6oArzkTsJE
 android.view.textclassifier.-$$Lambda$TextClassifierImpl$RRbXefHgcUymI9-P95ArUyMvfbw
 android.view.textclassifier.-$$Lambda$TextClassifierImpl$ftq-sQqJYwUdrdbbr9jz3p4AWos
 android.view.textclassifier.-$$Lambda$TextClassifierImpl$iSt_Guet-O6Vtdk0MA4z-Z4lzaM
@@ -5775,10 +5692,8 @@
 android.view.textclassifier.ConversationAction
 android.view.textclassifier.ConversationActions$1
 android.view.textclassifier.ConversationActions$Message$1
-android.view.textclassifier.ConversationActions$Message$Builder
 android.view.textclassifier.ConversationActions$Message
 android.view.textclassifier.ConversationActions$Request$1
-android.view.textclassifier.ConversationActions$Request$Builder
 android.view.textclassifier.ConversationActions$Request
 android.view.textclassifier.ConversationActions
 android.view.textclassifier.EntityConfidence$1
@@ -5817,7 +5732,6 @@
 android.view.textclassifier.TextClassifier$Utils
 android.view.textclassifier.TextClassifier
 android.view.textclassifier.TextClassifierEvent$1
-android.view.textclassifier.TextClassifierEvent$Builder
 android.view.textclassifier.TextClassifierEvent$ConversationActionsEvent$1
 android.view.textclassifier.TextClassifierEvent$ConversationActionsEvent
 android.view.textclassifier.TextClassifierEvent$LanguageDetectionEvent$1
@@ -5929,7 +5843,6 @@
 android.widget.AbsListView$2
 android.widget.AbsListView$3
 android.widget.AbsListView$4
-android.widget.AbsListView$AbsPositionScroller
 android.widget.AbsListView$AdapterDataSetObserver
 android.widget.AbsListView$CheckForTap
 android.widget.AbsListView$FlingRunnable$1
@@ -5952,11 +5865,9 @@
 android.widget.AbsoluteLayout
 android.widget.ActionMenuPresenter$1
 android.widget.ActionMenuPresenter$2
-android.widget.ActionMenuPresenter$ActionButtonSubmenu
 android.widget.ActionMenuPresenter$ActionMenuPopupCallback
 android.widget.ActionMenuPresenter$OverflowMenuButton$1
 android.widget.ActionMenuPresenter$OverflowMenuButton
-android.widget.ActionMenuPresenter$OverflowPopup
 android.widget.ActionMenuPresenter$PopupPresenterCallback
 android.widget.ActionMenuPresenter
 android.widget.ActionMenuView$ActionMenuChildView
@@ -5969,7 +5880,6 @@
 android.widget.AdapterView$AdapterDataSetObserver
 android.widget.AdapterView$OnItemClickListener
 android.widget.AdapterView$OnItemSelectedListener
-android.widget.AdapterView$SelectionNotifier
 android.widget.AdapterView
 android.widget.ArrayAdapter
 android.widget.AutoCompleteTextView$DropDownItemClickListener
@@ -5992,43 +5902,35 @@
 android.widget.Editor$3
 android.widget.Editor$5
 android.widget.Editor$Blink
-android.widget.Editor$CorrectionHighlighter
 android.widget.Editor$CursorAnchorInfoNotifier
 android.widget.Editor$CursorController
 android.widget.Editor$EasyEditDeleteListener
 android.widget.Editor$EasyEditPopupWindow
 android.widget.Editor$EditOperation$1
 android.widget.Editor$EditOperation
-android.widget.Editor$ErrorPopup
-android.widget.Editor$HandleView
 android.widget.Editor$InputContentType
 android.widget.Editor$InputMethodState
-android.widget.Editor$InsertionHandleView
 android.widget.Editor$InsertionPointCursorController
 android.widget.Editor$MagnifierMotionAnimator
 android.widget.Editor$PinnedPopupWindow
 android.widget.Editor$PositionListener
 android.widget.Editor$ProcessTextIntentActionsHandler
-android.widget.Editor$SelectionHandleView
 android.widget.Editor$SelectionModifierCursorController
 android.widget.Editor$SpanController$1
 android.widget.Editor$SpanController$2
 android.widget.Editor$SpanController
 android.widget.Editor$SuggestionHelper$SuggestionSpanComparator
 android.widget.Editor$SuggestionHelper
-android.widget.Editor$SuggestionsPopupWindow
 android.widget.Editor$TextRenderNode
 android.widget.Editor$TextViewPositionListener
 android.widget.Editor$UndoInputFilter
 android.widget.Editor
-android.widget.EditorTouchState
 android.widget.FastScroller$1
 android.widget.FastScroller$2
 android.widget.FastScroller$3
 android.widget.FastScroller$4
 android.widget.FastScroller$5
 android.widget.FastScroller$6
-android.widget.FastScroller
 android.widget.Filter$FilterListener
 android.widget.Filter
 android.widget.Filterable
@@ -6141,10 +6043,8 @@
 android.widget.RemoteViews$ViewGroupActionAdd
 android.widget.RemoteViews$ViewGroupActionRemove
 android.widget.RemoteViews$ViewPaddingAction
-android.widget.RemoteViews$ViewTree
 android.widget.RemoteViews
 android.widget.RemoteViewsAdapter$RemoteAdapterConnectionCallback
-android.widget.RemoteViewsAdapter
 android.widget.RtlSpacingHelper
 android.widget.ScrollBarDrawable
 android.widget.ScrollView$SavedState$1
@@ -6250,12 +6150,48 @@
 com.android.i18n.phonenumbers.internal.RegexCache$LRUCache$1
 com.android.i18n.phonenumbers.internal.RegexCache$LRUCache
 com.android.i18n.phonenumbers.internal.RegexCache
+com.android.icu.charset.CharsetDecoderICU
+com.android.icu.charset.CharsetEncoderICU
+com.android.icu.charset.CharsetICU
+com.android.icu.charset.NativeConverter
+com.android.icu.util.CaseMapperNative
+com.android.icu.util.Icu4cMetadata
+com.android.icu.util.LocaleNative
+com.android.icu.util.regex.MatcherNative
+com.android.icu.util.regex.PatternNative
+com.android.ims.-$$Lambda$ImsManager$D1JuJ3ba2jMHWDKlSpm03meBR1c
+com.android.ims.-$$Lambda$ImsManager$LiW49wt0wLMYHjgtAwL8NLIATfs
+com.android.ims.-$$Lambda$ImsManager$YhRaDrc3t9_7beNiU5gQcqZilOw
+com.android.ims.-$$Lambda$szO0o3matefQqo-6NB-dzsr9eCw
+com.android.ims.FeatureConnection$IFeatureUpdate
+com.android.ims.FeatureConnection
+com.android.ims.FeatureConnector$Listener
+com.android.ims.IFeatureConnector
+com.android.ims.ImsCall$Listener
+com.android.ims.ImsCall
+com.android.ims.ImsCallbackAdapterManager
 com.android.ims.ImsConfig
 com.android.ims.ImsConfigListener$Stub
 com.android.ims.ImsConfigListener
+com.android.ims.ImsEcbm$ImsEcbmListenerProxy
+com.android.ims.ImsEcbm
+com.android.ims.ImsEcbmStateListener
 com.android.ims.ImsException
+com.android.ims.ImsExternalCallStateListener
+com.android.ims.ImsManager$2
+com.android.ims.ImsManager$3
+com.android.ims.ImsManager$ExecutorFactory
+com.android.ims.ImsManager
+com.android.ims.ImsMultiEndpoint$ImsExternalCallStateListenerProxy
+com.android.ims.ImsMultiEndpoint
+com.android.ims.ImsUt$IImsUtListenerProxy
+com.android.ims.ImsUt
 com.android.ims.ImsUtInterface
-com.android.ims.internal.IImsCallSession
+com.android.ims.MmTelFeatureConnection$CapabilityCallbackManager
+com.android.ims.MmTelFeatureConnection$ImsRegistrationCallbackAdapter
+com.android.ims.MmTelFeatureConnection$ProvisioningCallbackManager
+com.android.ims.MmTelFeatureConnection
+com.android.ims.internal.ICall
 com.android.ims.internal.IImsEcbm$Stub
 com.android.ims.internal.IImsEcbm
 com.android.ims.internal.IImsEcbmListener$Stub
@@ -6273,27 +6209,17 @@
 com.android.ims.internal.IImsUt
 com.android.ims.internal.IImsUtListener$Stub
 com.android.ims.internal.IImsUtListener
+com.android.ims.internal.ImsVideoCallProviderWrapper$ImsVideoProviderWrapperCallback
 com.android.ims.internal.uce.UceServiceBase$UceServiceBinder
 com.android.ims.internal.uce.UceServiceBase
-com.android.ims.internal.uce.common.CapInfo$1
-com.android.ims.internal.uce.common.CapInfo
-com.android.ims.internal.uce.common.StatusCode$1
 com.android.ims.internal.uce.common.UceLong$1
 com.android.ims.internal.uce.common.UceLong
 com.android.ims.internal.uce.options.IOptionsListener$Stub$Proxy
 com.android.ims.internal.uce.options.IOptionsListener$Stub
 com.android.ims.internal.uce.options.IOptionsListener
-com.android.ims.internal.uce.options.IOptionsService
 com.android.ims.internal.uce.presence.IPresenceListener$Stub$Proxy
 com.android.ims.internal.uce.presence.IPresenceListener$Stub
 com.android.ims.internal.uce.presence.IPresenceListener
-com.android.ims.internal.uce.presence.IPresenceService$Stub
-com.android.ims.internal.uce.presence.IPresenceService
-com.android.ims.internal.uce.presence.PresCapInfo$1
-com.android.ims.internal.uce.presence.PresCmdId$1
-com.android.ims.internal.uce.presence.PresCmdStatus$1
-com.android.ims.internal.uce.presence.PresPublishTriggerType$1
-com.android.ims.internal.uce.presence.PresSipResponse$1
 com.android.ims.internal.uce.uceservice.IUceListener$Stub$Proxy
 com.android.ims.internal.uce.uceservice.IUceListener$Stub
 com.android.ims.internal.uce.uceservice.IUceListener
@@ -6315,8 +6241,6 @@
 com.android.internal.app.IAppOpsActiveCallback$Stub$Proxy
 com.android.internal.app.IAppOpsActiveCallback$Stub
 com.android.internal.app.IAppOpsActiveCallback
-com.android.internal.app.IAppOpsAsyncNotedCallback$Stub
-com.android.internal.app.IAppOpsAsyncNotedCallback
 com.android.internal.app.IAppOpsCallback$Stub$Proxy
 com.android.internal.app.IAppOpsCallback$Stub
 com.android.internal.app.IAppOpsCallback
@@ -6393,6 +6317,7 @@
 com.android.internal.content.PackageMonitor
 com.android.internal.content.ReferrerIntent$1
 com.android.internal.content.ReferrerIntent
+com.android.internal.database.SortCursor
 com.android.internal.graphics.ColorUtils
 com.android.internal.graphics.SfVsyncFrameCallbackProvider
 com.android.internal.graphics.drawable.AnimationScaleListDrawable$AnimationScaleListState
@@ -6406,7 +6331,6 @@
 com.android.internal.infra.-$$Lambda$AbstractRemoteService$ocrHd68Md9x6FfAzVQ6w8MAjFqY
 com.android.internal.infra.-$$Lambda$EbzSql2RHkXox5Myj8A-7kLC4_A
 com.android.internal.infra.AbstractMultiplePendingRequestsRemoteService
-com.android.internal.infra.AbstractRemoteService$AsyncRequest
 com.android.internal.infra.AbstractRemoteService$BasePendingRequest
 com.android.internal.infra.AbstractRemoteService$MyAsyncPendingRequest
 com.android.internal.infra.AbstractRemoteService$PendingRequest
@@ -6414,11 +6338,8 @@
 com.android.internal.infra.AbstractRemoteService$VultureCallback
 com.android.internal.infra.AbstractRemoteService
 com.android.internal.infra.AbstractSinglePendingRequestRemoteService
-com.android.internal.infra.AndroidFuture
 com.android.internal.infra.ServiceConnector$Job
-com.android.internal.infra.ServiceConnector
 com.android.internal.infra.WhitelistHelper
-com.android.internal.inputmethod.IInputContentUriToken
 com.android.internal.inputmethod.IInputMethodPrivilegedOperations$Stub$Proxy
 com.android.internal.inputmethod.IInputMethodPrivilegedOperations$Stub
 com.android.internal.inputmethod.IInputMethodPrivilegedOperations
@@ -6453,7 +6374,6 @@
 com.android.internal.net.INetworkWatchlistManager$Stub$Proxy
 com.android.internal.net.INetworkWatchlistManager$Stub
 com.android.internal.net.INetworkWatchlistManager
-com.android.internal.net.LegacyVpnInfo
 com.android.internal.net.VpnConfig$1
 com.android.internal.net.VpnConfig
 com.android.internal.net.VpnInfo$1
@@ -6529,7 +6449,6 @@
 com.android.internal.os.BinderCallsStats$UidEntry
 com.android.internal.os.BinderCallsStats
 com.android.internal.os.BinderDeathDispatcher$RecipientsInfo
-com.android.internal.os.BinderDeathDispatcher
 com.android.internal.os.BinderInternal$BinderProxyLimitListener
 com.android.internal.os.BinderInternal$BinderProxyLimitListenerDelegate
 com.android.internal.os.BinderInternal$CallSession
@@ -6596,7 +6515,6 @@
 com.android.internal.os.ProcStatsUtil
 com.android.internal.os.ProcTimeInStateReader
 com.android.internal.os.ProcessCpuTracker$1
-com.android.internal.os.ProcessCpuTracker$FilterStats
 com.android.internal.os.ProcessCpuTracker$Stats
 com.android.internal.os.ProcessCpuTracker
 com.android.internal.os.RailStats
@@ -6627,7 +6545,6 @@
 com.android.internal.os.ZygoteSecurityException
 com.android.internal.os.ZygoteServer$UsapPoolRefillAction
 com.android.internal.os.ZygoteServer
-com.android.internal.policy.BackdropFrameRenderer
 com.android.internal.policy.DecorContext
 com.android.internal.policy.DecorView$1
 com.android.internal.policy.DecorView$2
@@ -6666,7 +6583,6 @@
 com.android.internal.policy.PhoneWindow$RotationWatcher$1
 com.android.internal.policy.PhoneWindow$RotationWatcher
 com.android.internal.policy.PhoneWindow
-com.android.internal.policy.PipSnapAlgorithm
 com.android.internal.policy.ScreenDecorationsUtils
 com.android.internal.statusbar.IStatusBar$Stub$Proxy
 com.android.internal.statusbar.IStatusBar$Stub
@@ -6677,16 +6593,11 @@
 com.android.internal.statusbar.NotificationVisibility$1
 com.android.internal.statusbar.NotificationVisibility$NotificationLocation
 com.android.internal.statusbar.NotificationVisibility
-com.android.internal.statusbar.RegisterStatusBarResult
 com.android.internal.statusbar.StatusBarIcon$1
 com.android.internal.statusbar.StatusBarIcon
 com.android.internal.telecom.IConnectionService$Stub$Proxy
 com.android.internal.telecom.IConnectionService$Stub
 com.android.internal.telecom.IConnectionService
-com.android.internal.telecom.IConnectionServiceAdapter$Stub
-com.android.internal.telecom.IConnectionServiceAdapter
-com.android.internal.telecom.IInCallAdapter$Stub
-com.android.internal.telecom.IInCallAdapter
 com.android.internal.telecom.IInCallService$Stub$Proxy
 com.android.internal.telecom.IInCallService$Stub
 com.android.internal.telecom.IInCallService
@@ -6700,22 +6611,139 @@
 com.android.internal.telecom.RemoteServiceCallback$Stub$Proxy
 com.android.internal.telecom.RemoteServiceCallback$Stub
 com.android.internal.telecom.RemoteServiceCallback
+com.android.internal.telephony.-$$Lambda$MultiSimSettingController$55347QtGjuukX-px3jYZkJd_z3U
+com.android.internal.telephony.-$$Lambda$MultiSimSettingController$DcLtrTEtdlCd4WOev4Zk79vrSko
+com.android.internal.telephony.-$$Lambda$MultiSimSettingController$WtGtOenjqxSBoW5BUjT-VlNoSTM
+com.android.internal.telephony.-$$Lambda$PhoneSubInfoController$1zkPy06BwndFkKrGCUI1ORIPJcI
+com.android.internal.telephony.-$$Lambda$PhoneSubInfoController$2WGP2Bp11k7_Xwi1N4YefElOUuM
+com.android.internal.telephony.-$$Lambda$PhoneSubInfoController$2xgrYNleR8FFzFT8hEQx3mDtZ8g
+com.android.internal.telephony.-$$Lambda$PhoneSubInfoController$AjZFvwh3Ujx5W3fleFNksc6bLf0
+com.android.internal.telephony.-$$Lambda$PhoneSubInfoController$Ja9yTBcEYPqTRBIP-hL0otixVeE
+com.android.internal.telephony.-$$Lambda$PhoneSubInfoController$P0j9hvO3e-UE9_1i1QM_ujl8Bpo
+com.android.internal.telephony.-$$Lambda$PhoneSubInfoController$ZOtVAnuhxrXl2L906I6eTOentP0
+com.android.internal.telephony.-$$Lambda$PhoneSubInfoController$bWluhZvk2X-dQ0UidKfdpd0kwuw
+com.android.internal.telephony.-$$Lambda$PhoneSubInfoController$hh4N6_N4-PPm_vWjCdCRvS8--Cw
+com.android.internal.telephony.-$$Lambda$PhoneSubInfoController$rpyQeO7zACcc5v4krwU9_qRMHL8
+com.android.internal.telephony.-$$Lambda$PhoneSwitcher$WfAxZbJDpCUxBytiUchQ87aGijQ
+com.android.internal.telephony.-$$Lambda$RIL$803u4JiCud_JSoDndvAhT13ZZqU
+com.android.internal.telephony.-$$Lambda$RIL$Ir4pOMTf7R0Jtw4O3F7JgMVtXO4
+com.android.internal.telephony.-$$Lambda$RIL$ZGWeCQ9boMO1_J1_yQ82l_jK-Nc
+com.android.internal.telephony.-$$Lambda$RIL$zYsQZAc3z9bM5fCaq_J0dn5kjjo
 com.android.internal.telephony.-$$Lambda$RILConstants$ODSbRKyUeaOFMcez-ZudOmaKCBw
 com.android.internal.telephony.-$$Lambda$RILConstants$zIAjDPNpW8a5C22QbMmMwM64vD8
+com.android.internal.telephony.-$$Lambda$RILRequest$VaC9ddQXT8qxCl7rcNKtUadFQoI
+com.android.internal.telephony.-$$Lambda$RadioIndication$GND6XxOOm1d_Ro76zEUFjA9OrEA
+com.android.internal.telephony.-$$Lambda$SubscriptionController$Nt_ojdeqo4C2mbuwymYLvwgOLGo
+com.android.internal.telephony.-$$Lambda$SubscriptionController$VCQsMNqRHpN3RyoXYzh2YUwA2yc
+com.android.internal.telephony.-$$Lambda$SubscriptionController$u5xE-urXR6ElZ50305_6guo20Fc
+com.android.internal.telephony.-$$Lambda$SubscriptionInfoUpdater$DY4i_CG7hrAeejGLeh3hMUZySnw
+com.android.internal.telephony.-$$Lambda$SubscriptionInfoUpdater$UFyB0ValfLD0rdGDibCjTnGFkeo
+com.android.internal.telephony.-$$Lambda$SubscriptionInfoUpdater$Y5woGfEDKrozRViLH7WF93qPEno
+com.android.internal.telephony.-$$Lambda$SubscriptionInfoUpdater$ZTY4uxKw17CHcHQzbBUF7m-dN-E
+com.android.internal.telephony.-$$Lambda$SubscriptionInfoUpdater$ecTEeMEIjOEa2z5W3wjqiicibbY
+com.android.internal.telephony.-$$Lambda$SubscriptionInfoUpdater$qyDxq2AWyReUxdc6HttVGQeDD3Y
+com.android.internal.telephony.-$$Lambda$SubscriptionInfoUpdater$tLUuQ7lYu8EjRd038qzQlDm-CtA
+com.android.internal.telephony.-$$Lambda$TelephonyComponentFactory$InjectedComponents$09rMKC8001jAR0zFrzzlPx26Xjs
+com.android.internal.telephony.-$$Lambda$TelephonyComponentFactory$InjectedComponents$DKjB_mCxFOHomOyKLPFU9-9Dywc
+com.android.internal.telephony.-$$Lambda$TelephonyComponentFactory$InjectedComponents$UYUq9z2WZwxqOLXquU0tTNN9wAs
+com.android.internal.telephony.-$$Lambda$TelephonyComponentFactory$InjectedComponents$eUdIxJOKoyVP5UmFJtWXBUO93Qk
+com.android.internal.telephony.-$$Lambda$TelephonyComponentFactory$InjectedComponents$nLdppNQT1Bv7QyIU3LwAwVD2K60
+com.android.internal.telephony.-$$Lambda$UV1wDVoVlbcxpr8zevj_aMFtUGw
+com.android.internal.telephony.-$$Lambda$WWHOcG5P4-jgjzPPgLwm-wN15OM
+com.android.internal.telephony.ATParseEx
+com.android.internal.telephony.AppSmsManager
+com.android.internal.telephony.BaseCommands
+com.android.internal.telephony.BlockChecker
+com.android.internal.telephony.Call$SrvccState
+com.android.internal.telephony.Call$State
+com.android.internal.telephony.Call
+com.android.internal.telephony.CallForwardInfo
+com.android.internal.telephony.CallManager$CallManagerHandler
+com.android.internal.telephony.CallManager
+com.android.internal.telephony.CallStateException
+com.android.internal.telephony.CallTracker
+com.android.internal.telephony.CarrierActionAgent$1
+com.android.internal.telephony.CarrierActionAgent
 com.android.internal.telephony.CarrierAppUtils
+com.android.internal.telephony.CarrierInfoManager
+com.android.internal.telephony.CarrierKeyDownloadManager$1
+com.android.internal.telephony.CarrierKeyDownloadManager
+com.android.internal.telephony.CarrierResolver$1
+com.android.internal.telephony.CarrierResolver$2
+com.android.internal.telephony.CarrierResolver$CarrierMatchingRule
+com.android.internal.telephony.CarrierResolver
+com.android.internal.telephony.CarrierServiceBindHelper$1
+com.android.internal.telephony.CarrierServiceBindHelper$2
+com.android.internal.telephony.CarrierServiceBindHelper$AppBinding
+com.android.internal.telephony.CarrierServiceBindHelper$CarrierServiceConnection
+com.android.internal.telephony.CarrierServiceBindHelper$CarrierServicePackageMonitor
+com.android.internal.telephony.CarrierServiceBindHelper
+com.android.internal.telephony.CarrierServiceStateTracker$1
+com.android.internal.telephony.CarrierServiceStateTracker$2
+com.android.internal.telephony.CarrierServiceStateTracker$3
+com.android.internal.telephony.CarrierServiceStateTracker$EmergencyNetworkNotification
+com.android.internal.telephony.CarrierServiceStateTracker$NotificationType
+com.android.internal.telephony.CarrierServiceStateTracker$PrefNetworkNotification
+com.android.internal.telephony.CarrierServiceStateTracker
+com.android.internal.telephony.CarrierServicesSmsFilter$CallbackTimeoutHandler
+com.android.internal.telephony.CarrierServicesSmsFilter$CarrierServicesSmsFilterCallbackInterface
+com.android.internal.telephony.CarrierServicesSmsFilter
+com.android.internal.telephony.CarrierSignalAgent$1
+com.android.internal.telephony.CarrierSignalAgent
+com.android.internal.telephony.CarrierSmsUtils
 com.android.internal.telephony.CellNetworkScanResult$1
 com.android.internal.telephony.CellNetworkScanResult
+com.android.internal.telephony.CellularNetworkService$CellularNetworkServiceProvider$1
+com.android.internal.telephony.CellularNetworkService$CellularNetworkServiceProvider
+com.android.internal.telephony.CellularNetworkService
+com.android.internal.telephony.CellularNetworkValidator$ValidationCallback
+com.android.internal.telephony.CellularNetworkValidator
+com.android.internal.telephony.ClientWakelockAccountant
+com.android.internal.telephony.ClientWakelockTracker
+com.android.internal.telephony.CommandException$Error
+com.android.internal.telephony.CommandException
+com.android.internal.telephony.CommandsInterface
+com.android.internal.telephony.Connection$Listener
+com.android.internal.telephony.Connection$PostDialState
+com.android.internal.telephony.Connection
 com.android.internal.telephony.DctConstants$Activity
 com.android.internal.telephony.DctConstants$State
+com.android.internal.telephony.DebugService
+com.android.internal.telephony.DefaultPhoneNotifier$1
+com.android.internal.telephony.DefaultPhoneNotifier
+com.android.internal.telephony.DeviceStateMonitor$1
+com.android.internal.telephony.DeviceStateMonitor$2
+com.android.internal.telephony.DeviceStateMonitor$3
+com.android.internal.telephony.DeviceStateMonitor$AccessNetworkThresholds
+com.android.internal.telephony.DeviceStateMonitor
+com.android.internal.telephony.DriverCall$State
+com.android.internal.telephony.DriverCall
 com.android.internal.telephony.EncodeException
 com.android.internal.telephony.ExponentialBackoff$1
 com.android.internal.telephony.ExponentialBackoff$HandlerAdapter
 com.android.internal.telephony.ExponentialBackoff
+com.android.internal.telephony.GlobalSettingsHelper
 com.android.internal.telephony.GsmAlphabet
+com.android.internal.telephony.GsmCdmaCall
+com.android.internal.telephony.GsmCdmaCallTracker$1
+com.android.internal.telephony.GsmCdmaCallTracker$2
+com.android.internal.telephony.GsmCdmaCallTracker$3
+com.android.internal.telephony.GsmCdmaCallTracker
+com.android.internal.telephony.GsmCdmaConnection
+com.android.internal.telephony.GsmCdmaPhone$1
+com.android.internal.telephony.GsmCdmaPhone$2
+com.android.internal.telephony.GsmCdmaPhone$3
+com.android.internal.telephony.GsmCdmaPhone$Cfu
+com.android.internal.telephony.GsmCdmaPhone
+com.android.internal.telephony.HalVersion
+com.android.internal.telephony.HardwareConfig
 com.android.internal.telephony.HbpcdUtils
 com.android.internal.telephony.ICarrierConfigLoader$Stub$Proxy
 com.android.internal.telephony.ICarrierConfigLoader$Stub
 com.android.internal.telephony.ICarrierConfigLoader
+com.android.internal.telephony.IIccPhoneBook$Stub$Proxy
+com.android.internal.telephony.IIccPhoneBook$Stub
+com.android.internal.telephony.IIccPhoneBook
 com.android.internal.telephony.IIntegerConsumer$Stub$Proxy
 com.android.internal.telephony.IIntegerConsumer$Stub
 com.android.internal.telephony.IIntegerConsumer
@@ -6728,8 +6756,6 @@
 com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub$Proxy
 com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub
 com.android.internal.telephony.IOnSubscriptionsChangedListener
-com.android.internal.telephony.IOns$Stub
-com.android.internal.telephony.IOns
 com.android.internal.telephony.IPhoneStateListener$Stub$Proxy
 com.android.internal.telephony.IPhoneStateListener$Stub
 com.android.internal.telephony.IPhoneStateListener
@@ -6743,6 +6769,7 @@
 com.android.internal.telephony.ISms$Stub
 com.android.internal.telephony.ISms
 com.android.internal.telephony.ISmsImplBase
+com.android.internal.telephony.IState
 com.android.internal.telephony.ISub$Stub$Proxy
 com.android.internal.telephony.ISub$Stub
 com.android.internal.telephony.ISub
@@ -6753,41 +6780,537 @@
 com.android.internal.telephony.ITelephonyRegistry$Stub
 com.android.internal.telephony.ITelephonyRegistry
 com.android.internal.telephony.IWapPushManager
+com.android.internal.telephony.IccCard
 com.android.internal.telephony.IccCardConstants$State
+com.android.internal.telephony.IccPhoneBookInterfaceManager$1
+com.android.internal.telephony.IccPhoneBookInterfaceManager$Request
+com.android.internal.telephony.IccPhoneBookInterfaceManager
+com.android.internal.telephony.IccProvider
+com.android.internal.telephony.IccSmsInterfaceManager$1
+com.android.internal.telephony.IccSmsInterfaceManager$CdmaBroadcastRangeManager
+com.android.internal.telephony.IccSmsInterfaceManager$CellBroadcastRangeManager
+com.android.internal.telephony.IccSmsInterfaceManager
+com.android.internal.telephony.ImsSmsDispatcher$1
+com.android.internal.telephony.ImsSmsDispatcher$2
+com.android.internal.telephony.ImsSmsDispatcher$3
+com.android.internal.telephony.ImsSmsDispatcher$4
+com.android.internal.telephony.ImsSmsDispatcher
+com.android.internal.telephony.InboundSmsHandler$1
+com.android.internal.telephony.InboundSmsHandler$2
+com.android.internal.telephony.InboundSmsHandler$CarrierServicesSmsFilterCallback
+com.android.internal.telephony.InboundSmsHandler$DefaultState
+com.android.internal.telephony.InboundSmsHandler$DeliveringState
+com.android.internal.telephony.InboundSmsHandler$IdleState
+com.android.internal.telephony.InboundSmsHandler$NewMessageNotificationActionReceiver
+com.android.internal.telephony.InboundSmsHandler$SmsBroadcastReceiver
+com.android.internal.telephony.InboundSmsHandler$StartupState
+com.android.internal.telephony.InboundSmsHandler$WaitingState
+com.android.internal.telephony.InboundSmsHandler
+com.android.internal.telephony.InboundSmsTracker
+com.android.internal.telephony.IntRangeManager$ClientRange
+com.android.internal.telephony.IntRangeManager$IntRange
+com.android.internal.telephony.IntRangeManager
+com.android.internal.telephony.IntentBroadcaster$1
+com.android.internal.telephony.IntentBroadcaster
+com.android.internal.telephony.LastCallFailCause
+com.android.internal.telephony.LinkCapacityEstimate
+com.android.internal.telephony.LocalLog
+com.android.internal.telephony.LocaleTracker$1
+com.android.internal.telephony.LocaleTracker
+com.android.internal.telephony.MccTable$MccEntry
+com.android.internal.telephony.MccTable
+com.android.internal.telephony.MmiCode
+com.android.internal.telephony.MultiSimSettingController$1
+com.android.internal.telephony.MultiSimSettingController$UpdateDefaultAction
+com.android.internal.telephony.MultiSimSettingController
+com.android.internal.telephony.NetworkRegistrationManager$1
+com.android.internal.telephony.NetworkRegistrationManager$NetworkRegStateCallback
+com.android.internal.telephony.NetworkRegistrationManager$NetworkServiceConnection
+com.android.internal.telephony.NetworkRegistrationManager$RegManagerDeathRecipient
+com.android.internal.telephony.NetworkRegistrationManager
+com.android.internal.telephony.NetworkScanRequestTracker$1
+com.android.internal.telephony.NetworkScanRequestTracker$NetworkScanRequestScheduler
+com.android.internal.telephony.NetworkScanRequestTracker
+com.android.internal.telephony.NitzData
+com.android.internal.telephony.NitzStateMachine$DeviceState
+com.android.internal.telephony.NitzStateMachine
+com.android.internal.telephony.NitzStateMachineImpl
+com.android.internal.telephony.OemHookIndication
+com.android.internal.telephony.OemHookResponse
 com.android.internal.telephony.OperatorInfo$1
 com.android.internal.telephony.OperatorInfo$State
 com.android.internal.telephony.OperatorInfo
+com.android.internal.telephony.Phone
+com.android.internal.telephony.PhoneConfigurationManager
 com.android.internal.telephony.PhoneConstantConversions$1
 com.android.internal.telephony.PhoneConstantConversions
 com.android.internal.telephony.PhoneConstants$DataState
 com.android.internal.telephony.PhoneConstants$State
+com.android.internal.telephony.PhoneFactory
+com.android.internal.telephony.PhoneInternalInterface$DataActivityState
+com.android.internal.telephony.PhoneInternalInterface$DialArgs$Builder
+com.android.internal.telephony.PhoneInternalInterface$DialArgs
+com.android.internal.telephony.PhoneInternalInterface$SuppService
+com.android.internal.telephony.PhoneInternalInterface
+com.android.internal.telephony.PhoneNotifier
+com.android.internal.telephony.PhoneSubInfoController$CallPhoneMethodHelper
+com.android.internal.telephony.PhoneSubInfoController$PermissionCheckHelper
+com.android.internal.telephony.PhoneSubInfoController
+com.android.internal.telephony.PhoneSwitcher$1
+com.android.internal.telephony.PhoneSwitcher$2
+com.android.internal.telephony.PhoneSwitcher$DefaultNetworkCallback
+com.android.internal.telephony.PhoneSwitcher$EmergencyOverrideRequest
+com.android.internal.telephony.PhoneSwitcher$PhoneState
+com.android.internal.telephony.PhoneSwitcher$PhoneSwitcherNetworkRequestListener
+com.android.internal.telephony.PhoneSwitcher
+com.android.internal.telephony.ProxyController$1
+com.android.internal.telephony.ProxyController
+com.android.internal.telephony.RIL$RadioProxyDeathRecipient
+com.android.internal.telephony.RIL$RilHandler
+com.android.internal.telephony.RIL
 com.android.internal.telephony.RILConstants
-com.android.internal.telephony.SmsAddress
+com.android.internal.telephony.RILRequest
+com.android.internal.telephony.RadioBugDetector
+com.android.internal.telephony.RadioCapability
+com.android.internal.telephony.RadioConfig$ServiceDeathRecipient
+com.android.internal.telephony.RadioConfig
+com.android.internal.telephony.RadioConfigIndication
+com.android.internal.telephony.RadioConfigResponse
+com.android.internal.telephony.RadioIndication
+com.android.internal.telephony.RadioResponse
+com.android.internal.telephony.RatRatcheter$1
+com.android.internal.telephony.RatRatcheter
+com.android.internal.telephony.RegistrantList
+com.android.internal.telephony.RestrictedState
+com.android.internal.telephony.RetryManager$RetryRec
+com.android.internal.telephony.RetryManager
+com.android.internal.telephony.RilWakelockInfo
+com.android.internal.telephony.SMSDispatcher$DataSmsSender
+com.android.internal.telephony.SMSDispatcher$SettingsObserver
+com.android.internal.telephony.SMSDispatcher$SmsSender
+com.android.internal.telephony.SMSDispatcher$SmsSenderCallback
+com.android.internal.telephony.SMSDispatcher$SmsTracker
+com.android.internal.telephony.SMSDispatcher$TextSmsSender
+com.android.internal.telephony.SMSDispatcher
+com.android.internal.telephony.ServiceStateTracker$1
+com.android.internal.telephony.ServiceStateTracker$SstSubscriptionsChangedListener
+com.android.internal.telephony.ServiceStateTracker
+com.android.internal.telephony.SettingsObserver
+com.android.internal.telephony.SimActivationTracker$1
+com.android.internal.telephony.SimActivationTracker
 com.android.internal.telephony.SmsApplication$SmsApplicationData
 com.android.internal.telephony.SmsApplication$SmsPackageMonitor
 com.android.internal.telephony.SmsApplication
+com.android.internal.telephony.SmsBroadcastUndelivered$1
+com.android.internal.telephony.SmsBroadcastUndelivered$ScanRawTableThread
+com.android.internal.telephony.SmsBroadcastUndelivered$SmsReferenceKey
+com.android.internal.telephony.SmsBroadcastUndelivered
 com.android.internal.telephony.SmsConstants$MessageClass
+com.android.internal.telephony.SmsController
+com.android.internal.telephony.SmsDispatchersController$1
+com.android.internal.telephony.SmsDispatchersController
 com.android.internal.telephony.SmsMessageBase
 com.android.internal.telephony.SmsNumberUtils
+com.android.internal.telephony.SmsPermissions
+com.android.internal.telephony.SmsResponse
+com.android.internal.telephony.SmsStorageMonitor$1
+com.android.internal.telephony.SmsStorageMonitor
+com.android.internal.telephony.SmsUsageMonitor$SettingsObserver
+com.android.internal.telephony.SmsUsageMonitor$SettingsObserverHandler
+com.android.internal.telephony.SmsUsageMonitor
+com.android.internal.telephony.State
+com.android.internal.telephony.StateMachine
+com.android.internal.telephony.SubscriptionController
+com.android.internal.telephony.SubscriptionInfoUpdater$1
+com.android.internal.telephony.SubscriptionInfoUpdater$UpdateEmbeddedSubsCallback
+com.android.internal.telephony.SubscriptionInfoUpdater
+com.android.internal.telephony.TelephonyCapabilities
+com.android.internal.telephony.TelephonyComponentFactory$InjectedComponents
+com.android.internal.telephony.TelephonyComponentFactory
+com.android.internal.telephony.TelephonyDevController
 com.android.internal.telephony.TelephonyPermissions
+com.android.internal.telephony.TelephonyTester$1
+com.android.internal.telephony.TelephonyTester
+com.android.internal.telephony.TimeServiceHelper
+com.android.internal.telephony.TimeZoneLookupHelper$CountryResult
+com.android.internal.telephony.TimeZoneLookupHelper
+com.android.internal.telephony.UUSInfo
+com.android.internal.telephony.UiccPhoneBookController
+com.android.internal.telephony.VisualVoicemailSmsFilter$1
+com.android.internal.telephony.VisualVoicemailSmsFilter$PhoneAccountHandleConverter
+com.android.internal.telephony.VisualVoicemailSmsFilter
+com.android.internal.telephony.WakeLockStateMachine$1
+com.android.internal.telephony.WakeLockStateMachine$DefaultState
+com.android.internal.telephony.WakeLockStateMachine$IdleState
+com.android.internal.telephony.WakeLockStateMachine$WaitingState
+com.android.internal.telephony.WakeLockStateMachine
+com.android.internal.telephony.WapPushOverSms$1
+com.android.internal.telephony.WapPushOverSms
+com.android.internal.telephony.cat.AppInterface$CommandType
+com.android.internal.telephony.cat.AppInterface
+com.android.internal.telephony.cat.BIPClientParams
+com.android.internal.telephony.cat.BerTlv
+com.android.internal.telephony.cat.CallSetupParams
+com.android.internal.telephony.cat.CatCmdMessage$1
+com.android.internal.telephony.cat.CatCmdMessage
+com.android.internal.telephony.cat.CatException
+com.android.internal.telephony.cat.CatLog
+com.android.internal.telephony.cat.CatResponseMessage
+com.android.internal.telephony.cat.CatService$1
+com.android.internal.telephony.cat.CatService
+com.android.internal.telephony.cat.CommandParams
+com.android.internal.telephony.cat.CommandParamsFactory$1
+com.android.internal.telephony.cat.CommandParamsFactory
+com.android.internal.telephony.cat.ComprehensionTlv
+com.android.internal.telephony.cat.ComprehensionTlvTag
+com.android.internal.telephony.cat.DTTZResponseData
+com.android.internal.telephony.cat.DisplayTextParams
+com.android.internal.telephony.cat.IconLoader
+com.android.internal.telephony.cat.LanguageParams
+com.android.internal.telephony.cat.LanguageResponseData
+com.android.internal.telephony.cat.LaunchBrowserParams
+com.android.internal.telephony.cat.ResponseData
+com.android.internal.telephony.cat.ResultCode
+com.android.internal.telephony.cat.ResultException
+com.android.internal.telephony.cat.RilMessage
+com.android.internal.telephony.cat.RilMessageDecoder$StateCmdParamsReady
+com.android.internal.telephony.cat.RilMessageDecoder$StateStart
+com.android.internal.telephony.cat.RilMessageDecoder
+com.android.internal.telephony.cat.ValueParser
+com.android.internal.telephony.cdma.CdmaCallWaitingNotification
+com.android.internal.telephony.cdma.CdmaInboundSmsHandler
+com.android.internal.telephony.cdma.CdmaSMSDispatcher
+com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo
+com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager
+com.android.internal.telephony.cdma.EriInfo
+com.android.internal.telephony.cdma.EriManager$EriFile
+com.android.internal.telephony.cdma.EriManager
 com.android.internal.telephony.cdma.SmsMessage
+com.android.internal.telephony.cdnr.CarrierDisplayNameData$1
+com.android.internal.telephony.cdnr.CarrierDisplayNameData$Builder
+com.android.internal.telephony.cdnr.CarrierDisplayNameData
+com.android.internal.telephony.cdnr.CarrierDisplayNameResolver$CarrierDisplayNameConditionRule
+com.android.internal.telephony.cdnr.CarrierDisplayNameResolver
+com.android.internal.telephony.dataconnection.-$$Lambda$DataConnection$-tFSpFGzTv_UdpzJlTMOvg8VO98
+com.android.internal.telephony.dataconnection.-$$Lambda$XZAGhHrbkIDyusER4MAM6luKcT0
+com.android.internal.telephony.dataconnection.AccessNetworksManager$1
+com.android.internal.telephony.dataconnection.AccessNetworksManager
+com.android.internal.telephony.dataconnection.ApnContext
+com.android.internal.telephony.dataconnection.ApnSettingUtils
+com.android.internal.telephony.dataconnection.CellularDataService$CellularDataServiceProvider$1
+com.android.internal.telephony.dataconnection.CellularDataService$CellularDataServiceProvider
+com.android.internal.telephony.dataconnection.CellularDataService
+com.android.internal.telephony.dataconnection.DataConnection$2
+com.android.internal.telephony.dataconnection.DataConnection$ConnectionParams
+com.android.internal.telephony.dataconnection.DataConnection$DcActivatingState
+com.android.internal.telephony.dataconnection.DataConnection$DcActiveState
+com.android.internal.telephony.dataconnection.DataConnection$DcDefaultState
+com.android.internal.telephony.dataconnection.DataConnection$DcDisconnectingState
+com.android.internal.telephony.dataconnection.DataConnection$DcDisconnectionErrorCreatingConnection
+com.android.internal.telephony.dataconnection.DataConnection$DcInactiveState
+com.android.internal.telephony.dataconnection.DataConnection$DisconnectParams
+com.android.internal.telephony.dataconnection.DataConnection$SetupResult
+com.android.internal.telephony.dataconnection.DataConnection$UpdateLinkPropertyResult
+com.android.internal.telephony.dataconnection.DataConnection
+com.android.internal.telephony.dataconnection.DataConnectionReasons$DataAllowedReasonType
+com.android.internal.telephony.dataconnection.DataConnectionReasons$DataDisallowedReasonType
+com.android.internal.telephony.dataconnection.DataConnectionReasons
+com.android.internal.telephony.dataconnection.DataEnabledOverride$OverrideConditions
+com.android.internal.telephony.dataconnection.DataEnabledOverride$OverrideRule
+com.android.internal.telephony.dataconnection.DataEnabledOverride
+com.android.internal.telephony.dataconnection.DataEnabledSettings$1
+com.android.internal.telephony.dataconnection.DataEnabledSettings$2
+com.android.internal.telephony.dataconnection.DataEnabledSettings
+com.android.internal.telephony.dataconnection.DataServiceManager$1
+com.android.internal.telephony.dataconnection.DataServiceManager$CellularDataServiceCallback
+com.android.internal.telephony.dataconnection.DataServiceManager$CellularDataServiceConnection
+com.android.internal.telephony.dataconnection.DataServiceManager$DataServiceManagerDeathRecipient
+com.android.internal.telephony.dataconnection.DataServiceManager
+com.android.internal.telephony.dataconnection.DcController$1
+com.android.internal.telephony.dataconnection.DcController$DccDefaultState
+com.android.internal.telephony.dataconnection.DcController
+com.android.internal.telephony.dataconnection.DcFailBringUp
+com.android.internal.telephony.dataconnection.DcNetworkAgent
+com.android.internal.telephony.dataconnection.DcRequest
+com.android.internal.telephony.dataconnection.DcTesterDeactivateAll$1
+com.android.internal.telephony.dataconnection.DcTesterDeactivateAll
+com.android.internal.telephony.dataconnection.DcTesterFailBringUpAll$1
+com.android.internal.telephony.dataconnection.DcTesterFailBringUpAll
+com.android.internal.telephony.dataconnection.DcTracker$1
+com.android.internal.telephony.dataconnection.DcTracker$2
+com.android.internal.telephony.dataconnection.DcTracker$3
+com.android.internal.telephony.dataconnection.DcTracker$4
+com.android.internal.telephony.dataconnection.DcTracker$5
+com.android.internal.telephony.dataconnection.DcTracker$ApnChangeObserver
+com.android.internal.telephony.dataconnection.DcTracker$DataStallRecoveryHandler
+com.android.internal.telephony.dataconnection.DcTracker$DctOnSubscriptionsChangedListener
+com.android.internal.telephony.dataconnection.DcTracker$ProvisionNotificationBroadcastReceiver
+com.android.internal.telephony.dataconnection.DcTracker$RetryFailures
+com.android.internal.telephony.dataconnection.DcTracker$TxRxSum
+com.android.internal.telephony.dataconnection.DcTracker
+com.android.internal.telephony.dataconnection.KeepaliveStatus$1
+com.android.internal.telephony.dataconnection.KeepaliveStatus
+com.android.internal.telephony.dataconnection.TelephonyNetworkFactory$InternalHandler
+com.android.internal.telephony.dataconnection.TelephonyNetworkFactory
+com.android.internal.telephony.dataconnection.TransportManager$HandoverParams
+com.android.internal.telephony.dataconnection.TransportManager
+com.android.internal.telephony.emergency.EmergencyNumberTracker$1
+com.android.internal.telephony.emergency.EmergencyNumberTracker
+com.android.internal.telephony.euicc.-$$Lambda$EuiccConnector$ConnectedState$4$S52i3hpE3-FGho807KZ1LR5rXQM
+com.android.internal.telephony.euicc.EuiccCardController$SimSlotStatusChangedBroadcastReceiver
+com.android.internal.telephony.euicc.EuiccCardController
+com.android.internal.telephony.euicc.EuiccConnector$1
+com.android.internal.telephony.euicc.EuiccConnector$AvailableState
+com.android.internal.telephony.euicc.EuiccConnector$BaseEuiccCommandCallback
+com.android.internal.telephony.euicc.EuiccConnector$BindingState
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$10
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$11
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$12
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$13
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$1
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$2
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$3
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$4
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$5
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$6
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$7
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$8
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState$9
+com.android.internal.telephony.euicc.EuiccConnector$ConnectedState
+com.android.internal.telephony.euicc.EuiccConnector$DeleteRequest
+com.android.internal.telephony.euicc.EuiccConnector$DisconnectedState
+com.android.internal.telephony.euicc.EuiccConnector$DownloadRequest
+com.android.internal.telephony.euicc.EuiccConnector$EuiccPackageMonitor
+com.android.internal.telephony.euicc.EuiccConnector$GetDefaultListRequest
+com.android.internal.telephony.euicc.EuiccConnector$GetEuiccProfileInfoListCommandCallback
+com.android.internal.telephony.euicc.EuiccConnector$GetMetadataRequest
+com.android.internal.telephony.euicc.EuiccConnector$SwitchRequest
+com.android.internal.telephony.euicc.EuiccConnector$UnavailableState
+com.android.internal.telephony.euicc.EuiccConnector$UpdateNicknameRequest
+com.android.internal.telephony.euicc.EuiccConnector
+com.android.internal.telephony.euicc.EuiccController$3
+com.android.internal.telephony.euicc.EuiccController
 com.android.internal.telephony.euicc.IEuiccCardController$Stub
 com.android.internal.telephony.euicc.IEuiccCardController
 com.android.internal.telephony.euicc.IEuiccController$Stub$Proxy
 com.android.internal.telephony.euicc.IEuiccController$Stub
 com.android.internal.telephony.euicc.IEuiccController
+com.android.internal.telephony.gsm.GsmInboundSmsHandler
+com.android.internal.telephony.gsm.GsmMmiCode
+com.android.internal.telephony.gsm.GsmSMSDispatcher
+com.android.internal.telephony.gsm.SimTlv
 com.android.internal.telephony.gsm.SmsBroadcastConfigInfo
 com.android.internal.telephony.gsm.SmsMessage
+com.android.internal.telephony.gsm.SuppServiceNotification
+com.android.internal.telephony.gsm.UsimDataDownloadHandler
+com.android.internal.telephony.gsm.UsimPhoneBookManager$File
+com.android.internal.telephony.gsm.UsimPhoneBookManager$PbrRecord
+com.android.internal.telephony.gsm.UsimPhoneBookManager
+com.android.internal.telephony.ims.-$$Lambda$ImsResolver$pNx4XUM9FmR6cV_MCAGiEt8F4pg
+com.android.internal.telephony.ims.-$$Lambda$WamP7BPq0j01TgYE3GvUqU3b-rs
+com.android.internal.telephony.ims.ImsResolver$1
+com.android.internal.telephony.ims.ImsResolver$2
+com.android.internal.telephony.ims.ImsResolver$3
+com.android.internal.telephony.ims.ImsResolver$4
+com.android.internal.telephony.ims.ImsResolver$5
+com.android.internal.telephony.ims.ImsResolver$6
+com.android.internal.telephony.ims.ImsResolver$7
+com.android.internal.telephony.ims.ImsResolver$8
+com.android.internal.telephony.ims.ImsResolver$ImsDynamicQueryManagerFactory
+com.android.internal.telephony.ims.ImsResolver$ImsServiceControllerFactory
+com.android.internal.telephony.ims.ImsResolver$ImsServiceInfo
+com.android.internal.telephony.ims.ImsResolver$SubscriptionManagerProxy
+com.android.internal.telephony.ims.ImsResolver$TelephonyManagerProxy
+com.android.internal.telephony.ims.ImsResolver
+com.android.internal.telephony.ims.ImsServiceController$1
+com.android.internal.telephony.ims.ImsServiceController$2
+com.android.internal.telephony.ims.ImsServiceController$3
+com.android.internal.telephony.ims.ImsServiceController$ImsFeatureContainer
+com.android.internal.telephony.ims.ImsServiceController$ImsFeatureStatusCallback$1
+com.android.internal.telephony.ims.ImsServiceController$ImsFeatureStatusCallback
+com.android.internal.telephony.ims.ImsServiceController$ImsServiceConnection
+com.android.internal.telephony.ims.ImsServiceController$ImsServiceControllerCallbacks
+com.android.internal.telephony.ims.ImsServiceController$RebindRetry
+com.android.internal.telephony.ims.ImsServiceController
+com.android.internal.telephony.ims.ImsServiceFeatureQueryManager$ImsServiceFeatureQuery
+com.android.internal.telephony.ims.ImsServiceFeatureQueryManager$Listener
+com.android.internal.telephony.ims.ImsServiceFeatureQueryManager
+com.android.internal.telephony.imsphone.-$$Lambda$ImsPhoneCallTracker$QlPVd_3u4_verjHUDnkn6zaSe54
+com.android.internal.telephony.imsphone.-$$Lambda$ImsPhoneCallTracker$Zw03itjXT6-LrhiYuD-9nKFg2Wg
+com.android.internal.telephony.imsphone.ImsExternalCallTracker$1
+com.android.internal.telephony.imsphone.ImsExternalCallTracker$2
+com.android.internal.telephony.imsphone.ImsExternalCallTracker$ExternalCallStateListener
+com.android.internal.telephony.imsphone.ImsExternalCallTracker$ExternalConnectionListener
+com.android.internal.telephony.imsphone.ImsExternalCallTracker$ImsCallNotify
+com.android.internal.telephony.imsphone.ImsExternalCallTracker
+com.android.internal.telephony.imsphone.ImsExternalConnection$Listener
+com.android.internal.telephony.imsphone.ImsExternalConnection
+com.android.internal.telephony.imsphone.ImsPhone$1
+com.android.internal.telephony.imsphone.ImsPhone$2
+com.android.internal.telephony.imsphone.ImsPhone$3
+com.android.internal.telephony.imsphone.ImsPhone$Cf
+com.android.internal.telephony.imsphone.ImsPhone
+com.android.internal.telephony.imsphone.ImsPhoneBase
+com.android.internal.telephony.imsphone.ImsPhoneCall
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$1
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$2
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$3
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$4
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$5
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$6
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$7
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$8
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$9
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$HoldSwapState
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$MmTelFeatureListener
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$PhoneNumberUtilsProxy
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$PhoneStateListener
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$SharedPreferenceProxy
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker
+com.android.internal.telephony.imsphone.ImsPhoneCommandInterface
+com.android.internal.telephony.imsphone.ImsPhoneConnection
+com.android.internal.telephony.imsphone.ImsPhoneFactory
+com.android.internal.telephony.imsphone.ImsPhoneMmiCode
+com.android.internal.telephony.imsphone.ImsPullCall
+com.android.internal.telephony.metrics.-$$Lambda$TelephonyMetrics$fLmZDbNadlr6LF7zSJ6jCR1AAsk
+com.android.internal.telephony.metrics.-$$Lambda$TelephonyMetrics$tQOsX1lKb2eTuPp-1rpkeIAEOoY
+com.android.internal.telephony.metrics.-$$Lambda$TelephonyMetrics$x2dJi76S2YQdpSTfY8RZ8qC_K6g
+com.android.internal.telephony.metrics.CallSessionEventBuilder
+com.android.internal.telephony.metrics.InProgressCallSession
+com.android.internal.telephony.metrics.InProgressSmsSession
+com.android.internal.telephony.metrics.ModemPowerMetrics
+com.android.internal.telephony.metrics.SmsSessionEventBuilder
+com.android.internal.telephony.metrics.TelephonyEventBuilder
+com.android.internal.telephony.metrics.TelephonyMetrics$1
+com.android.internal.telephony.metrics.TelephonyMetrics
+com.android.internal.telephony.nano.CarrierIdProto$CarrierAttribute
+com.android.internal.telephony.nano.CarrierIdProto$CarrierId
+com.android.internal.telephony.nano.CarrierIdProto$CarrierList
+com.android.internal.telephony.nano.TelephonyProto$ActiveSubscriptionInfo
+com.android.internal.telephony.nano.TelephonyProto$EmergencyNumberInfo
+com.android.internal.telephony.nano.TelephonyProto$ImsCapabilities
+com.android.internal.telephony.nano.TelephonyProto$ImsConnectionState
+com.android.internal.telephony.nano.TelephonyProto$ImsReasonInfo
+com.android.internal.telephony.nano.TelephonyProto$ModemPowerStats
+com.android.internal.telephony.nano.TelephonyProto$RilDataCall
+com.android.internal.telephony.nano.TelephonyProto$SmsSession$Event
+com.android.internal.telephony.nano.TelephonyProto$SmsSession
+com.android.internal.telephony.nano.TelephonyProto$TelephonyCallSession$Event$RilCall
+com.android.internal.telephony.nano.TelephonyProto$TelephonyCallSession$Event
+com.android.internal.telephony.nano.TelephonyProto$TelephonyCallSession
+com.android.internal.telephony.nano.TelephonyProto$TelephonyEvent$CarrierIdMatching
+com.android.internal.telephony.nano.TelephonyProto$TelephonyEvent$CarrierIdMatchingResult
+com.android.internal.telephony.nano.TelephonyProto$TelephonyEvent$DataSwitch
+com.android.internal.telephony.nano.TelephonyProto$TelephonyEvent$OnDemandDataSwitch
+com.android.internal.telephony.nano.TelephonyProto$TelephonyEvent$RilDeactivateDataCall
+com.android.internal.telephony.nano.TelephonyProto$TelephonyEvent$RilSetupDataCall
+com.android.internal.telephony.nano.TelephonyProto$TelephonyEvent$RilSetupDataCallResponse
+com.android.internal.telephony.nano.TelephonyProto$TelephonyEvent
+com.android.internal.telephony.nano.TelephonyProto$TelephonyHistogram
+com.android.internal.telephony.nano.TelephonyProto$TelephonyLog
+com.android.internal.telephony.nano.TelephonyProto$TelephonyServiceState$TelephonyOperator
+com.android.internal.telephony.nano.TelephonyProto$TelephonyServiceState
+com.android.internal.telephony.nano.TelephonyProto$TelephonySettings
+com.android.internal.telephony.nano.TelephonyProto$Time
+com.android.internal.telephony.protobuf.nano.CodedInputByteBufferNano
+com.android.internal.telephony.protobuf.nano.CodedOutputByteBufferNano$OutOfSpaceException
+com.android.internal.telephony.protobuf.nano.CodedOutputByteBufferNano
+com.android.internal.telephony.protobuf.nano.ExtendableMessageNano
+com.android.internal.telephony.protobuf.nano.InternalNano
+com.android.internal.telephony.protobuf.nano.InvalidProtocolBufferNanoException
+com.android.internal.telephony.protobuf.nano.MessageNano
+com.android.internal.telephony.protobuf.nano.MessageNanoPrinter
+com.android.internal.telephony.protobuf.nano.WireFormatNano
+com.android.internal.telephony.sip.SipPhone
+com.android.internal.telephony.sip.SipPhoneBase
+com.android.internal.telephony.test.SimulatedRadioControl
+com.android.internal.telephony.uicc.AdnRecord$1
+com.android.internal.telephony.uicc.AdnRecord
+com.android.internal.telephony.uicc.AdnRecordCache
+com.android.internal.telephony.uicc.AdnRecordLoader
+com.android.internal.telephony.uicc.AnswerToReset$HistoricalBytes
+com.android.internal.telephony.uicc.AnswerToReset$InterfaceByte
+com.android.internal.telephony.uicc.AnswerToReset
+com.android.internal.telephony.uicc.CarrierTestOverride
+com.android.internal.telephony.uicc.CsimFileHandler
+com.android.internal.telephony.uicc.IccCardApplicationStatus$AppState
+com.android.internal.telephony.uicc.IccCardApplicationStatus$AppType
+com.android.internal.telephony.uicc.IccCardApplicationStatus$PersoSubState
+com.android.internal.telephony.uicc.IccCardApplicationStatus
+com.android.internal.telephony.uicc.IccCardStatus$CardState
+com.android.internal.telephony.uicc.IccCardStatus$PinState
+com.android.internal.telephony.uicc.IccCardStatus
+com.android.internal.telephony.uicc.IccConstants
+com.android.internal.telephony.uicc.IccException
+com.android.internal.telephony.uicc.IccFileHandler$LoadLinearFixedContext
+com.android.internal.telephony.uicc.IccFileHandler
+com.android.internal.telephony.uicc.IccFileNotFound
+com.android.internal.telephony.uicc.IccFileTypeMismatch
+com.android.internal.telephony.uicc.IccIoResult
+com.android.internal.telephony.uicc.IccRecords$IccRecordLoaded
+com.android.internal.telephony.uicc.IccRecords
+com.android.internal.telephony.uicc.IccRefreshResponse
+com.android.internal.telephony.uicc.IccServiceTable
+com.android.internal.telephony.uicc.IccSlotStatus$SlotState
+com.android.internal.telephony.uicc.IccSlotStatus
 com.android.internal.telephony.uicc.IccUtils
-com.android.internal.telephony.util.ArrayUtils
-com.android.internal.telephony.util.HandlerExecutor
-com.android.internal.telephony.util.RemoteCallbackListExt
+com.android.internal.telephony.uicc.IccVmNotSupportedException
+com.android.internal.telephony.uicc.InstallCarrierAppTrampolineActivity
+com.android.internal.telephony.uicc.InstallCarrierAppUtils
+com.android.internal.telephony.uicc.IsimFileHandler
+com.android.internal.telephony.uicc.IsimRecords
+com.android.internal.telephony.uicc.IsimUiccRecords$EfIsimDomainLoaded
+com.android.internal.telephony.uicc.IsimUiccRecords$EfIsimImpiLoaded
+com.android.internal.telephony.uicc.IsimUiccRecords$EfIsimImpuLoaded
+com.android.internal.telephony.uicc.IsimUiccRecords$EfIsimIstLoaded
+com.android.internal.telephony.uicc.IsimUiccRecords$EfIsimPcscfLoaded
+com.android.internal.telephony.uicc.IsimUiccRecords
+com.android.internal.telephony.uicc.PlmnActRecord$1
+com.android.internal.telephony.uicc.PlmnActRecord
+com.android.internal.telephony.uicc.RuimFileHandler
+com.android.internal.telephony.uicc.RuimRecords
+com.android.internal.telephony.uicc.SIMFileHandler
+com.android.internal.telephony.uicc.SIMRecords$1
+com.android.internal.telephony.uicc.SIMRecords$EfPlLoaded
+com.android.internal.telephony.uicc.SIMRecords$EfUsimLiLoaded
+com.android.internal.telephony.uicc.SIMRecords$GetSpnFsmState
+com.android.internal.telephony.uicc.SIMRecords
+com.android.internal.telephony.uicc.UiccCard
+com.android.internal.telephony.uicc.UiccCardApplication$1
+com.android.internal.telephony.uicc.UiccCardApplication$2
+com.android.internal.telephony.uicc.UiccCardApplication
+com.android.internal.telephony.uicc.UiccCarrierPrivilegeRules$1
+com.android.internal.telephony.uicc.UiccCarrierPrivilegeRules$TLV
+com.android.internal.telephony.uicc.UiccCarrierPrivilegeRules
+com.android.internal.telephony.uicc.UiccController$1
+com.android.internal.telephony.uicc.UiccController
+com.android.internal.telephony.uicc.UiccPkcs15$FileHandler
+com.android.internal.telephony.uicc.UiccPkcs15$Pkcs15Selector
+com.android.internal.telephony.uicc.UiccPkcs15
+com.android.internal.telephony.uicc.UiccProfile$1
+com.android.internal.telephony.uicc.UiccProfile$2
+com.android.internal.telephony.uicc.UiccProfile$3
+com.android.internal.telephony.uicc.UiccProfile$4
+com.android.internal.telephony.uicc.UiccProfile$5
+com.android.internal.telephony.uicc.UiccProfile
+com.android.internal.telephony.uicc.UiccSlot
+com.android.internal.telephony.uicc.UiccStateChangedLauncher
+com.android.internal.telephony.uicc.UsimFileHandler
+com.android.internal.telephony.uicc.UsimServiceTable$UsimService
+com.android.internal.telephony.uicc.UsimServiceTable
+com.android.internal.telephony.uicc.VoiceMailConstants
+com.android.internal.telephony.uicc.asn1.InvalidAsn1DataException
+com.android.internal.telephony.uicc.asn1.TagNotFoundException
+com.android.internal.telephony.uicc.euicc.EuiccCard
+com.android.internal.telephony.uicc.euicc.EuiccSpecVersion
+com.android.internal.telephony.util.NotificationChannelController$1
+com.android.internal.telephony.util.NotificationChannelController
+com.android.internal.telephony.util.SMSDispatcherUtil
 com.android.internal.telephony.util.TelephonyUtils
+com.android.internal.telephony.util.VoicemailNotificationSettingsUtil
 com.android.internal.textservice.ISpellCheckerService$Stub$Proxy
 com.android.internal.textservice.ISpellCheckerService$Stub
 com.android.internal.textservice.ISpellCheckerService
-com.android.internal.textservice.ISpellCheckerServiceCallback$Stub
-com.android.internal.textservice.ISpellCheckerServiceCallback
 com.android.internal.textservice.ISpellCheckerSession$Stub$Proxy
 com.android.internal.textservice.ISpellCheckerSession$Stub
 com.android.internal.textservice.ISpellCheckerSession
@@ -6817,7 +7340,6 @@
 com.android.internal.util.AsyncChannel$SyncMessenger
 com.android.internal.util.AsyncChannel
 com.android.internal.util.BitUtils
-com.android.internal.util.BitwiseInputStream$AccessException
 com.android.internal.util.CollectionUtils
 com.android.internal.util.ConcurrentUtils$1$1
 com.android.internal.util.ConcurrentUtils$1
@@ -6837,7 +7359,6 @@
 com.android.internal.util.FileRotator$Rewriter
 com.android.internal.util.FileRotator$Writer
 com.android.internal.util.FileRotator
-com.android.internal.util.FunctionalUtils$RemoteExceptionIgnoringConsumer
 com.android.internal.util.FunctionalUtils$ThrowingConsumer
 com.android.internal.util.FunctionalUtils$ThrowingRunnable
 com.android.internal.util.FunctionalUtils$ThrowingSupplier
@@ -6886,7 +7407,6 @@
 com.android.internal.util.XmlUtils
 com.android.internal.util.function.DecConsumer
 com.android.internal.util.function.DecFunction
-com.android.internal.util.function.DecPredicate
 com.android.internal.util.function.HeptConsumer
 com.android.internal.util.function.HeptFunction
 com.android.internal.util.function.HeptPredicate
@@ -6910,7 +7430,6 @@
 com.android.internal.util.function.TriPredicate
 com.android.internal.util.function.UndecConsumer
 com.android.internal.util.function.UndecFunction
-com.android.internal.util.function.UndecPredicate
 com.android.internal.util.function.pooled.ArgumentPlaceholder
 com.android.internal.util.function.pooled.OmniFunction
 com.android.internal.util.function.pooled.PooledConsumer
@@ -6926,8 +7445,6 @@
 com.android.internal.util.function.pooled.PooledSupplier$OfLong
 com.android.internal.util.function.pooled.PooledSupplier
 com.android.internal.view.ActionBarPolicy
-com.android.internal.view.AppearanceRegion
-com.android.internal.view.BaseIWindow
 com.android.internal.view.BaseSurfaceHolder
 com.android.internal.view.IInputConnectionWrapper$MyHandler
 com.android.internal.view.IInputConnectionWrapper
@@ -6959,11 +7476,9 @@
 com.android.internal.view.OneShotPreDrawListener
 com.android.internal.view.RootViewSurfaceTaker
 com.android.internal.view.RotationPolicy$1
-com.android.internal.view.RotationPolicy$RotationPolicyListener
 com.android.internal.view.RotationPolicy
 com.android.internal.view.SurfaceCallbackHelper$1
 com.android.internal.view.SurfaceCallbackHelper
-com.android.internal.view.TooltipPopup
 com.android.internal.view.WindowManagerPolicyThread
 com.android.internal.view.animation.FallbackLUTInterpolator
 com.android.internal.view.animation.HasNativeInterpolator
@@ -6974,7 +7489,6 @@
 com.android.internal.view.menu.ActionMenuItemView$PopupCallback
 com.android.internal.view.menu.ActionMenuItemView
 com.android.internal.view.menu.BaseMenuPresenter
-com.android.internal.view.menu.ContextMenuBuilder
 com.android.internal.view.menu.MenuBuilder$Callback
 com.android.internal.view.menu.MenuBuilder$ItemInvoker
 com.android.internal.view.menu.MenuBuilder
@@ -7006,7 +7520,6 @@
 com.android.internal.widget.DecorToolbar
 com.android.internal.widget.DialogTitle
 com.android.internal.widget.EditableInputConnection
-com.android.internal.widget.FloatingToolbar
 com.android.internal.widget.ICheckCredentialProgressCallback$Stub$Proxy
 com.android.internal.widget.ICheckCredentialProgressCallback$Stub
 com.android.internal.widget.ICheckCredentialProgressCallback
@@ -7018,12 +7531,9 @@
 com.android.internal.widget.LockPatternUtils$StrongAuthTracker
 com.android.internal.widget.LockPatternUtils
 com.android.internal.widget.LockSettingsInternal
-com.android.internal.widget.LockscreenCredential
 com.android.internal.widget.ScrollBarUtils
 com.android.internal.widget.ToolbarWidgetWrapper$1
 com.android.internal.widget.ToolbarWidgetWrapper
-com.android.internal.widget.VerifyCredentialResponse$1
-com.android.internal.widget.VerifyCredentialResponse
 com.android.okhttp.Address
 com.android.okhttp.AndroidShimResponseCache
 com.android.okhttp.Authenticator
@@ -7337,10 +7847,18 @@
 com.android.org.bouncycastle.util.encoders.Hex
 com.android.org.bouncycastle.util.encoders.HexEncoder
 com.android.org.bouncycastle.util.io.Streams
-com.android.org.kxml2.io.KXmlParser$ContentSource
 com.android.org.kxml2.io.KXmlParser$ValueContext
 com.android.org.kxml2.io.KXmlParser
 com.android.org.kxml2.io.KXmlSerializer
+com.android.phone.ecc.nano.CodedInputByteBufferNano
+com.android.phone.ecc.nano.ExtendableMessageNano
+com.android.phone.ecc.nano.InternalNano
+com.android.phone.ecc.nano.InvalidProtocolBufferNanoException
+com.android.phone.ecc.nano.MessageNano
+com.android.phone.ecc.nano.ProtobufEccData$AllInfo
+com.android.phone.ecc.nano.ProtobufEccData$CountryInfo
+com.android.phone.ecc.nano.ProtobufEccData$EccInfo
+com.android.phone.ecc.nano.WireFormatNano
 com.android.server.AppWidgetBackupBridge
 com.android.server.BootReceiver$1
 com.android.server.BootReceiver
@@ -7359,31 +7877,23 @@
 com.android.server.backup.PreferredActivityBackupHelper
 com.android.server.backup.ShortcutBackupHelper
 com.android.server.backup.SliceBackupHelper
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$ApfProgramEvent
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$ApfStatistics
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$ConnectStatistics
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$DHCPEvent
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$DNSLookupBatch
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$DefaultNetworkEvent
 com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$IpConnectivityEvent
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$IpConnectivityLog
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$IpProvisioningEvent
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$IpReachabilityEvent
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$NetworkEvent
 com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$Pair
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$RaEvent
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$ValidationProbeEvent
-com.android.server.connectivity.metrics.nano.IpConnectivityLogClass$WakeupStats
 com.android.server.net.BaseNetdEventCallback
 com.android.server.net.BaseNetworkObserver
+com.android.server.sip.SipService$1
 com.android.server.sip.SipService$ConnectivityReceiver
 com.android.server.sip.SipService$MyExecutor
+com.android.server.sip.SipService$SipKeepAliveProcessCallback
+com.android.server.sip.SipService$SipSessionGroupExt
 com.android.server.sip.SipService
+com.android.server.sip.SipSessionGroup$KeepAliveProcessCallback
+com.android.server.sip.SipSessionGroup$SipSessionImpl
 com.android.server.sip.SipWakeLock
 com.android.server.sip.SipWakeupTimer$MyEventComparator
 com.android.server.sip.SipWakeupTimer
-com.android.server.wifi.BaseWifiService
 com.android.server.wm.nano.WindowManagerProtos$TaskSnapshotProto
+com.android.telephony.Rlog
 com.google.android.collect.Lists
 com.google.android.collect.Maps
 com.google.android.collect.Sets
@@ -7396,15 +7906,11 @@
 com.google.android.mms.MmsException
 com.google.android.rappor.Encoder
 com.google.android.rappor.HmacDrbg
-com.google.android.textclassifier.ActionsSuggestionsModel$ActionSuggestion
 com.google.android.textclassifier.ActionsSuggestionsModel$Conversation
 com.google.android.textclassifier.ActionsSuggestionsModel$ConversationMessage
 com.google.android.textclassifier.ActionsSuggestionsModel
 com.google.android.textclassifier.AnnotatorModel
-com.google.android.textclassifier.LangIdModel$LanguageResult
 com.google.android.textclassifier.LangIdModel
-com.google.android.textclassifier.NamedVariant
-com.google.android.textclassifier.RemoteActionTemplate
 com.sun.security.cert.internal.x509.X509V1CertImpl
 dalvik.annotation.optimization.CriticalNative
 dalvik.annotation.optimization.FastNative
@@ -7865,7 +8371,6 @@
 java.net.SocketAddress
 java.net.SocketException
 java.net.SocketImpl
-java.net.SocketImplFactory
 java.net.SocketInputStream
 java.net.SocketOptions
 java.net.SocketOutputStream
@@ -7950,7 +8455,6 @@
 java.nio.charset.Charset
 java.nio.charset.CharsetDecoder
 java.nio.charset.CharsetEncoder
-java.nio.charset.CoderMalfunctionError
 java.nio.charset.CoderResult$1
 java.nio.charset.CoderResult$2
 java.nio.charset.CoderResult$Cache
@@ -7960,7 +8464,6 @@
 java.nio.charset.StandardCharsets
 java.nio.charset.UnsupportedCharsetException
 java.nio.file.AccessMode
-java.nio.file.CopyMoveHelper
 java.nio.file.CopyOption
 java.nio.file.DirectoryStream$Filter
 java.nio.file.DirectoryStream
@@ -8471,7 +8974,6 @@
 java.util.Queue
 java.util.Random
 java.util.RandomAccess
-java.util.RandomAccessSubList
 java.util.RegularEnumSet$EnumSetIterator
 java.util.RegularEnumSet
 java.util.ResourceBundle$1
@@ -8509,8 +9011,6 @@
 java.util.Stack
 java.util.StringJoiner
 java.util.StringTokenizer
-java.util.SubList$1
-java.util.SubList
 java.util.TaskQueue
 java.util.TimSort
 java.util.TimeZone
@@ -8538,7 +9038,6 @@
 java.util.TreeSet
 java.util.UUID$Holder
 java.util.UUID
-java.util.UnknownFormatConversionException
 java.util.Vector$1
 java.util.Vector$Itr
 java.util.Vector
@@ -9123,15 +9622,11 @@
 libcore.timezone.TimeZoneFinder$SelectiveCountryTimeZonesExtractor
 libcore.timezone.TimeZoneFinder$TimeZonesProcessor
 libcore.timezone.TimeZoneFinder
-libcore.timezone.ZoneInfoDB$TzData$1
-libcore.timezone.ZoneInfoDB$TzData
-libcore.timezone.ZoneInfoDB
 libcore.util.ArrayUtils
 libcore.util.BasicLruCache
 libcore.util.CharsetUtils
 libcore.util.CollectionUtils
 libcore.util.EmptyArray
-libcore.util.FP16
 libcore.util.HexEncoding
 libcore.util.NativeAllocationRegistry$CleanerRunner
 libcore.util.NativeAllocationRegistry$CleanerThunk
@@ -9504,7 +9999,6 @@
 sun.util.locale.InternalLocaleBuilder$CaseInsensitiveChar
 sun.util.locale.InternalLocaleBuilder
 sun.util.locale.LanguageTag
-sun.util.locale.LocaleExtensions
 sun.util.locale.LocaleMatcher
 sun.util.locale.LocaleObjectCache$CacheEntry
 sun.util.locale.LocaleObjectCache
diff --git a/core/java/android/accessibilityservice/AccessibilityGestureEvent.java b/core/java/android/accessibilityservice/AccessibilityGestureEvent.java
index 9cf1de9..25729ab 100644
--- a/core/java/android/accessibilityservice/AccessibilityGestureEvent.java
+++ b/core/java/android/accessibilityservice/AccessibilityGestureEvent.java
@@ -18,6 +18,7 @@
 
 
 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_DOUBLE_TAP;
+import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD;
 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SINGLE_TAP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SWIPE_DOWN;
 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SWIPE_LEFT;
@@ -25,12 +26,21 @@
 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SWIPE_UP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_TRIPLE_TAP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_DOUBLE_TAP;
+import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SINGLE_TAP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SWIPE_DOWN;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SWIPE_LEFT;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SWIPE_RIGHT;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SWIPE_UP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_TRIPLE_TAP;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_DOUBLE_TAP;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SINGLE_TAP;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SWIPE_DOWN;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SWIPE_LEFT;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SWIPE_RIGHT;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SWIPE_UP;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_TRIPLE_TAP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_DOUBLE_TAP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_DOUBLE_TAP_AND_HOLD;
 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN;
@@ -76,9 +86,11 @@
     @IntDef(prefix = { "GESTURE_" }, value = {
             GESTURE_2_FINGER_SINGLE_TAP,
             GESTURE_2_FINGER_DOUBLE_TAP,
+            GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD,
             GESTURE_2_FINGER_TRIPLE_TAP,
             GESTURE_3_FINGER_SINGLE_TAP,
             GESTURE_3_FINGER_DOUBLE_TAP,
+            GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD,
             GESTURE_3_FINGER_TRIPLE_TAP,
             GESTURE_DOUBLE_TAP,
             GESTURE_DOUBLE_TAP_AND_HOLD,
@@ -105,7 +117,15 @@
             GESTURE_3_FINGER_SWIPE_DOWN,
             GESTURE_3_FINGER_SWIPE_LEFT,
             GESTURE_3_FINGER_SWIPE_RIGHT,
-            GESTURE_3_FINGER_SWIPE_UP
+            GESTURE_3_FINGER_SWIPE_UP,
+            GESTURE_4_FINGER_DOUBLE_TAP,
+            GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD,
+            GESTURE_4_FINGER_SINGLE_TAP,
+            GESTURE_4_FINGER_SWIPE_DOWN,
+            GESTURE_4_FINGER_SWIPE_LEFT,
+            GESTURE_4_FINGER_SWIPE_RIGHT,
+            GESTURE_4_FINGER_SWIPE_UP,
+            GESTURE_4_FINGER_TRIPLE_TAP
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface GestureId {}
@@ -161,10 +181,19 @@
         switch (eventType) {
             case GESTURE_2_FINGER_SINGLE_TAP: return "GESTURE_2_FINGER_SINGLE_TAP";
             case GESTURE_2_FINGER_DOUBLE_TAP: return "GESTURE_2_FINGER_DOUBLE_TAP";
+            case GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD:
+                return "GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD";
             case GESTURE_2_FINGER_TRIPLE_TAP: return "GESTURE_2_FINGER_TRIPLE_TAP";
             case GESTURE_3_FINGER_SINGLE_TAP: return "GESTURE_3_FINGER_SINGLE_TAP";
             case GESTURE_3_FINGER_DOUBLE_TAP: return "GESTURE_3_FINGER_DOUBLE_TAP";
+            case GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD:
+                return "GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD";
             case GESTURE_3_FINGER_TRIPLE_TAP: return "GESTURE_3_FINGER_TRIPLE_TAP";
+            case GESTURE_4_FINGER_SINGLE_TAP: return "GESTURE_4_FINGER_SINGLE_TAP";
+            case GESTURE_4_FINGER_DOUBLE_TAP: return "GESTURE_4_FINGER_DOUBLE_TAP";
+            case GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD:
+                return "GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD";
+            case GESTURE_4_FINGER_TRIPLE_TAP: return "GESTURE_4_FINGER_TRIPLE_TAP";
             case GESTURE_DOUBLE_TAP: return "GESTURE_DOUBLE_TAP";
             case GESTURE_DOUBLE_TAP_AND_HOLD: return "GESTURE_DOUBLE_TAP_AND_HOLD";
             case GESTURE_SWIPE_DOWN: return "GESTURE_SWIPE_DOWN";
@@ -191,6 +220,10 @@
             case GESTURE_3_FINGER_SWIPE_LEFT: return "GESTURE_3_FINGER_SWIPE_LEFT";
             case GESTURE_3_FINGER_SWIPE_RIGHT: return "GESTURE_3_FINGER_SWIPE_RIGHT";
             case GESTURE_3_FINGER_SWIPE_UP: return "GESTURE_3_FINGER_SWIPE_UP";
+            case GESTURE_4_FINGER_SWIPE_DOWN: return "GESTURE_4_FINGER_SWIPE_DOWN";
+            case GESTURE_4_FINGER_SWIPE_LEFT: return "GESTURE_4_FINGER_SWIPE_LEFT";
+            case GESTURE_4_FINGER_SWIPE_RIGHT: return "GESTURE_4_FINGER_SWIPE_RIGHT";
+            case GESTURE_4_FINGER_SWIPE_UP: return "GESTURE_4_FINGER_SWIPE_UP";
             default: return Integer.toHexString(eventType);
         }
     }
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index 2165fb3..0a138cf 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -28,7 +28,10 @@
 import android.content.Intent;
 import android.content.pm.ParceledListSlice;
 import android.graphics.Bitmap;
+import android.graphics.ColorSpace;
+import android.graphics.ParcelableColorSpace;
 import android.graphics.Region;
+import android.hardware.HardwareBuffer;
 import android.os.Binder;
 import android.os.Build;
 import android.os.Handler;
@@ -37,6 +40,7 @@
 import android.os.Message;
 import android.os.RemoteCallback;
 import android.os.RemoteException;
+import android.os.SystemClock;
 import android.util.ArrayMap;
 import android.util.Log;
 import android.util.Slog;
@@ -388,6 +392,36 @@
      */
     public static final int GESTURE_3_FINGER_SWIPE_RIGHT = 32;
 
+    /** The user has performed a four-finger swipe up gesture on the touch screen. */
+    public static final int GESTURE_4_FINGER_SWIPE_UP = 33;
+
+    /** The user has performed a four-finger swipe down gesture on the touch screen. */
+    public static final int GESTURE_4_FINGER_SWIPE_DOWN = 34;
+
+    /** The user has performed a four-finger swipe left gesture on the touch screen. */
+    public static final int GESTURE_4_FINGER_SWIPE_LEFT = 35;
+
+    /** The user has performed a four-finger swipe right gesture on the touch screen. */
+    public static final int GESTURE_4_FINGER_SWIPE_RIGHT = 36;
+
+    /** The user has performed a four-finger single tap gesture on the touch screen. */
+    public static final int GESTURE_4_FINGER_SINGLE_TAP = 37;
+
+    /** The user has performed a four-finger double tap gesture on the touch screen. */
+    public static final int GESTURE_4_FINGER_DOUBLE_TAP = 38;
+
+    /** The user has performed a four-finger triple tap gesture on the touch screen. */
+    public static final int GESTURE_4_FINGER_TRIPLE_TAP = 39;
+
+    /** The user has performed a two-finger double tap and hold gesture on the touch screen. */
+    public static final int GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD = 40;
+
+    /** The user has performed a three-finger double tap and hold gesture on the touch screen. */
+    public static final int GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD = 41;
+
+    /** The user has performed a two-finger double tap and hold gesture on the touch screen. */
+    public static final int GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD = 42;
+
     /**
      * The {@link Intent} that must be declared as handled by the service.
      */
@@ -564,7 +598,16 @@
     private FingerprintGestureController mFingerprintGestureController;
 
     /** @hide */
-    public static final String KEY_ACCESSIBILITY_SCREENSHOT = "screenshot";
+    public static final String KEY_ACCESSIBILITY_SCREENSHOT_HARDWAREBUFFER =
+            "screenshot_hardwareBuffer";
+
+    /** @hide */
+    public static final String KEY_ACCESSIBILITY_SCREENSHOT_COLORSPACE =
+            "screenshot_colorSpace";
+
+    /** @hide */
+    public static final String KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP =
+            "screenshot_timestamp";
 
     /**
      * Callback for {@link android.view.accessibility.AccessibilityEvent}s.
@@ -917,7 +960,7 @@
             return false;
         }
         List<GestureDescription.GestureStep> steps =
-                MotionEventGenerator.getGestureStepsFromGestureDescription(gesture, 100);
+                MotionEventGenerator.getGestureStepsFromGestureDescription(gesture, 16);
         try {
             synchronized (mLock) {
                 mGestureStatusCallbackSequence++;
@@ -1867,8 +1910,9 @@
     }
 
     /**
-     * Takes a screenshot of the specified display and returns it by {@link Bitmap.Config#HARDWARE}
-     * format.
+     * Takes a screenshot of the specified display and returns it via an
+     * {@link AccessibilityService.ScreenshotResult}. You can use {@link Bitmap#wrapHardwareBuffer}
+     * to construct the bitmap from the ScreenshotResult's payload.
      * <p>
      * <strong>Note:</strong> In order to take screenshot your service has
      * to declare the capability to take screenshot by setting the
@@ -1882,11 +1926,13 @@
      *                  default display.
      * @param executor Executor on which to run the callback.
      * @param callback The callback invoked when the taking screenshot is done.
+     *                 The {@link AccessibilityService.ScreenshotResult} will be null for an
+     *                 invalid display.
      *
      * @return {@code true} if the taking screenshot accepted, {@code false} if not.
      */
     public boolean takeScreenshot(int displayId, @NonNull @CallbackExecutor Executor executor,
-            @NonNull Consumer<Bitmap> callback) {
+            @NonNull Consumer<ScreenshotResult> callback) {
         Preconditions.checkNotNull(executor, "executor cannot be null");
         Preconditions.checkNotNull(callback, "callback cannot be null");
         final IAccessibilityServiceConnection connection =
@@ -1896,14 +1942,19 @@
             return false;
         }
         try {
-            connection.takeScreenshotWithCallback(displayId, new RemoteCallback((result) -> {
-                final Bitmap screenshot = result.getParcelable(KEY_ACCESSIBILITY_SCREENSHOT);
-                final long identity = Binder.clearCallingIdentity();
-                try {
-                    executor.execute(() -> callback.accept(screenshot));
-                } finally {
-                    Binder.restoreCallingIdentity(identity);
+            connection.takeScreenshot(displayId, new RemoteCallback((result) -> {
+                if (result == null) {
+                    sendScreenshotResult(executor, callback, null);
+                    return;
                 }
+                final HardwareBuffer hardwareBuffer =
+                        result.getParcelable(KEY_ACCESSIBILITY_SCREENSHOT_HARDWAREBUFFER);
+                final ParcelableColorSpace colorSpace =
+                        result.getParcelable(KEY_ACCESSIBILITY_SCREENSHOT_COLORSPACE);
+                ScreenshotResult screenshot = new ScreenshotResult(hardwareBuffer,
+                        colorSpace.getColorSpace(),
+                        result.getLong(KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP));
+                sendScreenshotResult(executor, callback, screenshot);
             }));
         } catch (RemoteException re) {
             throw new RuntimeException(re);
@@ -2302,4 +2353,116 @@
             this.handler = handler;
         }
     }
+
+    private void sendScreenshotResult(Executor executor, Consumer<ScreenshotResult> callback,
+            ScreenshotResult screenshot) {
+        final ScreenshotResult result = screenshot;
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            executor.execute(() -> callback.accept(result));
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    /**
+     * Can be used to construct a bitmap of the screenshot or any other operations for
+     * {@link AccessibilityService#takeScreenshot} API.
+     */
+    public static final class ScreenshotResult {
+        private final @NonNull HardwareBuffer mHardwareBuffer;
+        private final @NonNull ColorSpace mColorSpace;
+        private final long mTimestamp;
+
+        private ScreenshotResult(@NonNull HardwareBuffer hardwareBuffer,
+                @NonNull ColorSpace colorSpace, long timestamp) {
+            Preconditions.checkNotNull(hardwareBuffer, "hardwareBuffer cannot be null");
+            Preconditions.checkNotNull(colorSpace, "colorSpace cannot be null");
+            mHardwareBuffer = hardwareBuffer;
+            mColorSpace = colorSpace;
+            mTimestamp = timestamp;
+        }
+
+        /**
+         * Gets the {@link ColorSpace} identifying a specific organization of colors of the
+         * screenshot.
+         *
+         * @return the color space
+         */
+        @NonNull
+        public ColorSpace getColorSpace() {
+            return mColorSpace;
+        }
+
+        /**
+         * Gets the {@link HardwareBuffer} representing a memory buffer of the screenshot.
+         *
+         * @return the hardware buffer
+         */
+        @NonNull
+        public HardwareBuffer getHardwareBuffer() {
+            return mHardwareBuffer;
+        }
+
+        /**
+         * Gets the timestamp of taking the screenshot.
+         *
+         * @return milliseconds of non-sleep uptime before screenshot since boot and it's from
+         * {@link SystemClock#uptimeMillis()}
+         */
+        public long getTimestamp() {
+            return mTimestamp;
+        };
+    }
+
+    /**
+     * When {@link AccessibilityServiceInfo#FLAG_REQUEST_TOUCH_EXPLORATION_MODE} is enabled, this
+     * function requests that touch interactions starting in the specified region of the screen
+     * bypass the gesture detector. There can only be one gesture detection passthrough region per
+     * display. Requesting a new gesture detection passthrough region clears the existing one. To
+     * disable this passthrough and return to the original behavior, pass in an empty region. When
+     * {@link AccessibilityServiceInfo#FLAG_REQUEST_TOUCH_EXPLORATION_MODE} is disabled this
+     * function has no effect.
+     *
+     * @param displayId The display on which to set this region.
+     * @param region the region of the screen.
+     */
+    public void setGestureDetectionPassthroughRegion(int displayId, @NonNull Region region) {
+        Preconditions.checkNotNull(region, "region cannot be null");
+        final IAccessibilityServiceConnection connection =
+                AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
+        if (connection != null) {
+            try {
+                connection.setGestureDetectionPassthroughRegion(displayId, region);
+            } catch (RemoteException re) {
+                throw new RuntimeException(re);
+            }
+        }
+    }
+
+    /**
+     * When {@link AccessibilityServiceInfo#FLAG_REQUEST_TOUCH_EXPLORATION_MODE} is enabled, this
+     * function requests that touch interactions starting in the specified region of the screen
+     * bypass the touch explorer and go straight to the view hierarchy. There can only be one touch
+     * exploration passthrough region per display. Requesting a new touch explorationpassthrough
+     * region clears the existing one. To disable this passthrough and return to the original
+     * behavior, pass in an empty region. When {@link
+     * AccessibilityServiceInfo#FLAG_REQUEST_TOUCH_EXPLORATION_MODE} is disabled this function has
+     * no effect.
+     *
+     * @param displayId The display on which to set this region.
+     * @param region the region of the screen .
+     */
+    public void setTouchExplorationPassthroughRegion(int displayId, @NonNull Region region) {
+        Preconditions.checkNotNull(region, "region cannot be null");
+        final IAccessibilityServiceConnection connection =
+                AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
+        if (connection != null) {
+            try {
+                connection.setTouchExplorationPassthroughRegion(displayId, region);
+            } catch (RemoteException re) {
+                throw new RuntimeException(re);
+            }
+        }
+    }
 }
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index 82c7635..c373284 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -27,6 +27,7 @@
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.ComponentName;
 import android.content.Context;
+import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
@@ -34,6 +35,7 @@
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
+import android.graphics.drawable.Drawable;
 import android.hardware.fingerprint.FingerprintManager;
 import android.os.Build;
 import android.os.Parcel;
@@ -551,11 +553,6 @@
     private int mHtmlDescriptionRes;
 
     /**
-     * Non localized html description of the accessibility service.
-     */
-    private String mNonLocalizedHtmlDescription;
-
-    /**
      * Creates a new instance.
      */
     public AccessibilityServiceInfo() {
@@ -683,10 +680,6 @@
                     com.android.internal.R.styleable.AccessibilityService_htmlDescription);
             if (peekedValue != null) {
                 mHtmlDescriptionRes = peekedValue.resourceId;
-                final CharSequence nonLocalizedHtmlDescription = peekedValue.coerceToString();
-                if (nonLocalizedHtmlDescription != null) {
-                    mNonLocalizedHtmlDescription = nonLocalizedHtmlDescription.toString().trim();
-                }
             }
             asAttributes.recycle();
         } catch (NameNotFoundException e) {
@@ -795,12 +788,33 @@
      *    {@link AccessibilityService#SERVICE_META_DATA meta-data}.</strong>
      * </p>
      * @return The animated image resource id.
+     * @hide
      */
     public int getAnimatedImageRes() {
         return mAnimatedImageRes;
     }
 
     /**
+     * The animated image drawable.
+     * <p>
+     *    <strong>Statically set from
+     *    {@link AccessibilityService#SERVICE_META_DATA meta-data}.</strong>
+     * </p>
+     * @return The animated image drawable.
+     */
+    @Nullable
+    public Drawable loadAnimatedImage(@NonNull PackageManager packageManager)  {
+        if (mAnimatedImageRes == /* invalid */ 0) {
+            return null;
+        }
+
+        final String packageName = mComponentName.getPackageName();
+        final ApplicationInfo applicationInfo = mResolveInfo.serviceInfo.applicationInfo;
+
+        return packageManager.getDrawable(packageName, mAnimatedImageRes, applicationInfo);
+    }
+
+    /**
      * Whether this service can retrieve the current window's content.
      * <p>
      *    <strong>Statically set from
@@ -919,7 +933,7 @@
     @Nullable
     public String loadHtmlDescription(@NonNull PackageManager packageManager) {
         if (mHtmlDescriptionRes == 0) {
-            return mNonLocalizedHtmlDescription;
+            return null;
         }
 
         final ServiceInfo serviceInfo = mResolveInfo.serviceInfo;
@@ -1017,7 +1031,6 @@
         parcel.writeInt(mAnimatedImageRes);
         parcel.writeInt(mHtmlDescriptionRes);
         parcel.writeString(mNonLocalizedDescription);
-        parcel.writeString(mNonLocalizedHtmlDescription);
     }
 
     private void initFromParcel(Parcel parcel) {
@@ -1039,7 +1052,6 @@
         mAnimatedImageRes = parcel.readInt();
         mHtmlDescriptionRes = parcel.readInt();
         mNonLocalizedDescription = parcel.readString();
-        mNonLocalizedHtmlDescription = parcel.readString();
     }
 
     @Override
diff --git a/core/java/android/accessibilityservice/AccessibilityShortcutInfo.java b/core/java/android/accessibilityservice/AccessibilityShortcutInfo.java
index d79740b..d537ce1 100644
--- a/core/java/android/accessibilityservice/AccessibilityShortcutInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityShortcutInfo.java
@@ -22,10 +22,12 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
+import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.util.Xml;
 
@@ -76,6 +78,16 @@
     private final int mDescriptionResId;
 
     /**
+     * Resource id of the animated image of the accessibility shortcut target.
+     */
+    private final int mAnimatedImageRes;
+
+    /**
+     * Resource id of the html description of the accessibility shortcut target.
+     */
+    private final int mHtmlDescriptionRes;
+
+    /**
      * Creates a new instance.
      *
      * @param context Context for accessing resources.
@@ -119,6 +131,14 @@
             // Gets summary
             mSummaryResId = asAttributes.getResourceId(
                     com.android.internal.R.styleable.AccessibilityShortcutTarget_summary, 0);
+            // Gets animated image
+            mAnimatedImageRes = asAttributes.getResourceId(
+                    com.android.internal.R.styleable
+                            .AccessibilityShortcutTarget_animatedImageDrawable, 0);
+            // Gets html description
+            mHtmlDescriptionRes = asAttributes.getResourceId(
+                    com.android.internal.R.styleable.AccessibilityShortcutTarget_htmlDescription,
+                    0);
             asAttributes.recycle();
 
             if (mDescriptionResId == 0 || mSummaryResId == 0) {
@@ -172,6 +192,44 @@
     }
 
     /**
+     * The animated image resource id of the accessibility shortcut target.
+     *
+     * @return The animated image resource id.
+     *
+     * @hide
+     */
+    public int getAnimatedImageRes() {
+        return mAnimatedImageRes;
+    }
+
+    /**
+     * The animated image drawable of the accessibility shortcut target.
+     *
+     * @return The animated image drawable.
+     */
+    @Nullable
+    public Drawable loadAnimatedImage(@NonNull PackageManager packageManager) {
+        if (mAnimatedImageRes == /* invalid */ 0) {
+            return null;
+        }
+
+        final String packageName = mComponentName.getPackageName();
+        final ApplicationInfo applicationInfo = mActivityInfo.applicationInfo;
+
+        return packageManager.getDrawable(packageName, mAnimatedImageRes, applicationInfo);
+    }
+
+    /**
+     * The localized html description of the accessibility shortcut target.
+     *
+     * @return The localized html description.
+     */
+    @Nullable
+    public String loadHtmlDescription(@NonNull PackageManager packageManager) {
+        return loadResourceString(packageManager, mActivityInfo, mHtmlDescriptionRes);
+    }
+
+    /**
      * Gets string resource by the given activity and resource id.
      */
     @Nullable
diff --git a/core/java/android/accessibilityservice/GestureDescription.java b/core/java/android/accessibilityservice/GestureDescription.java
index 3b79d21..a821dad 100644
--- a/core/java/android/accessibilityservice/GestureDescription.java
+++ b/core/java/android/accessibilityservice/GestureDescription.java
@@ -40,7 +40,7 @@
  */
 public final class GestureDescription {
     /** Gestures may contain no more than this many strokes */
-    private static final int MAX_STROKE_COUNT = 10;
+    private static final int MAX_STROKE_COUNT = 20;
 
     /**
      * Upper bound on total gesture duration. Nearly all gestures will be much shorter.
@@ -194,7 +194,10 @@
         public Builder addStroke(@NonNull StrokeDescription strokeDescription) {
             if (mStrokes.size() >= MAX_STROKE_COUNT) {
                 throw new IllegalStateException(
-                        "Attempting to add too many strokes to a gesture");
+                        "Attempting to add too many strokes to a gesture. Maximum is "
+                                + MAX_STROKE_COUNT
+                                + ", got "
+                                + mStrokes.size());
             }
 
             mStrokes.add(strokeDescription);
diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
index 5db4dd7..0b3b9b2 100644
--- a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
+++ b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
@@ -110,7 +110,9 @@
 
     int getWindowIdForLeashToken(IBinder token);
 
-    Bitmap takeScreenshot(int displayId);
+    void takeScreenshot(int displayId, in RemoteCallback callback);
 
-    void takeScreenshotWithCallback(int displayId, in RemoteCallback callback);
+    void setGestureDetectionPassthroughRegion(int displayId, in Region region);
+
+    void setTouchExplorationPassthroughRegion(int displayId, in Region region);
 }
diff --git a/core/java/android/annotation/NonNull.java b/core/java/android/annotation/NonNull.java
index 927f997..a95bf3b 100644
--- a/core/java/android/annotation/NonNull.java
+++ b/core/java/android/annotation/NonNull.java
@@ -15,14 +15,16 @@
  */
 package android.annotation;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
 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.SOURCE;
 
+import android.annotation.SystemApi.Client;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
 /**
  * Denotes that a parameter, field or method return value can never be null.
  * <p>
@@ -34,5 +36,6 @@
  */
 @Retention(SOURCE)
 @Target({METHOD, PARAMETER, FIELD})
+@SystemApi(client = Client.MODULE_LIBRARIES)
 public @interface NonNull {
 }
diff --git a/core/java/android/annotation/Nullable.java b/core/java/android/annotation/Nullable.java
index b60170b..2fcddfa 100644
--- a/core/java/android/annotation/Nullable.java
+++ b/core/java/android/annotation/Nullable.java
@@ -15,14 +15,16 @@
  */
 package android.annotation;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
 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.SOURCE;
 
+import android.annotation.SystemApi.Client;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
 /**
  * Denotes that a parameter, field or method return value can be null.
  * <p>
@@ -41,5 +43,6 @@
  */
 @Retention(SOURCE)
 @Target({METHOD, PARAMETER, FIELD})
+@SystemApi(client = Client.MODULE_LIBRARIES)
 public @interface Nullable {
 }
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 642f51b..5df67bc 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -126,6 +126,7 @@
 import android.view.autofill.AutofillManager.AutofillClient;
 import android.view.autofill.AutofillPopupWindow;
 import android.view.autofill.IAutofillWindowPresenter;
+import android.view.contentcapture.ContentCaptureContext;
 import android.view.contentcapture.ContentCaptureManager;
 import android.view.contentcapture.ContentCaptureManager.ContentCaptureClient;
 import android.widget.AdapterView;
@@ -1056,7 +1057,10 @@
         } catch (RemoteException re) {
             re.rethrowFromSystemServer();
         }
-        // TODO(b/147750355): Pass locusId and bundle to the Content Capture.
+        // If locusId is not null pass it to the Content Capture.
+        if (locusId != null) {
+            setLocusContextToContentCapture(locusId, bundle);
+        }
     }
 
     /** Return the application that owns this activity. */
@@ -1209,6 +1213,19 @@
         }
     }
 
+    private void setLocusContextToContentCapture(LocusId locusId, @Nullable Bundle bundle) {
+        final ContentCaptureManager cm = getContentCaptureManager();
+        if (cm == null) return;
+
+        ContentCaptureContext.Builder contentCaptureContextBuilder =
+                new ContentCaptureContext.Builder(locusId);
+        if (bundle != null) {
+            contentCaptureContextBuilder.setExtras(bundle);
+        }
+        cm.getMainContentCaptureSession().setContentCaptureContext(
+                contentCaptureContextBuilder.build());
+    }
+
     @Override
     protected void attachBaseContext(Context newBase) {
         super.attachBaseContext(newBase);
@@ -1890,6 +1907,7 @@
             if (!mAutoFillIgnoreFirstResumePause) {
                 View focus = getCurrentFocus();
                 if (focus != null && focus.canNotifyAutofillEnterExitEvent()) {
+                    // TODO(b/148815880): Bring up keyboard if resumed from inline authentication.
                     // TODO: in Activity killed/recreated case, i.e. SessionLifecycleTest#
                     // testDatasetVisibleWhileAutofilledAppIsLifecycled: the View's initial
                     // window visibility after recreation is INVISIBLE in onResume() and next frame
@@ -5810,9 +5828,9 @@
                 intent.prepareToLeaveProcess(this);
                 result = ActivityTaskManager.getService()
                     .startActivity(mMainThread.getApplicationThread(), getBasePackageName(),
-                            intent, intent.resolveTypeIfNeeded(getContentResolver()), mToken,
-                            mEmbeddedID, requestCode, ActivityManager.START_FLAG_ONLY_IF_NEEDED,
-                            null, options);
+                            getFeatureId(), intent,
+                            intent.resolveTypeIfNeeded(getContentResolver()), mToken, mEmbeddedID,
+                            requestCode, ActivityManager.START_FLAG_ONLY_IF_NEEDED, null, options);
             } catch (RemoteException e) {
                 // Empty
             }
@@ -6606,8 +6624,8 @@
         try {
             data.prepareToLeaveProcess(this);
             IIntentSender target =
-                ActivityManager.getService().getIntentSender(
-                        ActivityManager.INTENT_SENDER_ACTIVITY_RESULT, packageName,
+                ActivityManager.getService().getIntentSenderWithFeature(
+                        ActivityManager.INTENT_SENDER_ACTIVITY_RESULT, packageName, getFeatureId(),
                         mParent == null ? mToken : mParent.mToken,
                         mEmbeddedID, requestCode, new Intent[] { data }, null, flags, null,
                         getUserId());
@@ -8450,7 +8468,7 @@
     /** @hide */
     @Override
     public final void autofillClientAuthenticate(int authenticationId, IntentSender intent,
-            Intent fillInIntent) {
+            Intent fillInIntent, boolean authenticateInline) {
         try {
             startIntentSenderForResultInner(intent, AUTO_FILL_AUTH_WHO_PREFIX,
                     authenticationId, fillInIntent, 0, 0, null);
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index db9aa18..0293346 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -94,6 +94,7 @@
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
 
@@ -693,7 +694,7 @@
 
     /** @hide Should this process state be considered a background state? */
     public static final boolean isProcStateBackground(int procState) {
-        return procState >= PROCESS_STATE_TRANSIENT_BACKGROUND;
+        return procState > PROCESS_STATE_BOUND_FOREGROUND_SERVICE;
     }
 
     /** @hide Is this a foreground service type? */
@@ -3555,13 +3556,13 @@
      * @return a list of {@link ApplicationExitInfo} records matching the criteria, sorted in
      *         the order from most recent to least recent.
      */
-    @Nullable
+    @NonNull
     public List<ApplicationExitInfo> getHistoricalProcessExitReasons(@Nullable String packageName,
             @IntRange(from = 0) int pid, @IntRange(from = 0) int maxNum) {
         try {
             ParceledListSlice<ApplicationExitInfo> r = getService().getHistoricalProcessExitReasons(
                     packageName, pid, maxNum, mContext.getUserId());
-            return r == null ? null : r.getList();
+            return r == null ? Collections.emptyList() : r.getList();
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -4315,8 +4316,8 @@
      */
     public static void broadcastStickyIntent(Intent intent, int appOp, int userId) {
         try {
-            getService().broadcastIntent(
-                    null, intent, null, null, Activity.RESULT_OK, null, null,
+            getService().broadcastIntentWithFeature(
+                    null, null, intent, null, null, Activity.RESULT_OK, null, null,
                     null /*permission*/, appOp, null, false, true, userId);
         } catch (RemoteException ex) {
         }
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java
index c60f7bd..ec11043 100644
--- a/core/java/android/app/ActivityManagerInternal.java
+++ b/core/java/android/app/ActivityManagerInternal.java
@@ -269,13 +269,16 @@
 
     public abstract void tempWhitelistForPendingIntent(int callerPid, int callerUid, int targetUid,
             long duration, String tag);
-    public abstract int broadcastIntentInPackage(String packageName, int uid, int realCallingUid,
-            int realCallingPid, Intent intent, String resolvedType, IIntentReceiver resultTo,
-            int resultCode, String resultData, Bundle resultExtras, String requiredPermission,
-            Bundle bOptions, boolean serialized, boolean sticky, @UserIdInt int userId,
-            boolean allowBackgroundActivityStarts);
+
+    public abstract int broadcastIntentInPackage(String packageName, @Nullable String featureId,
+            int uid, int realCallingUid, int realCallingPid, Intent intent, String resolvedType,
+            IIntentReceiver resultTo, int resultCode, String resultData, Bundle resultExtras,
+            String requiredPermission, Bundle bOptions, boolean serialized, boolean sticky,
+            @UserIdInt int userId, boolean allowBackgroundActivityStarts);
+
     public abstract ComponentName startServiceInPackage(int uid, Intent service,
-            String resolvedType, boolean fgRequired, String callingPackage, @UserIdInt int userId,
+            String resolvedType, boolean fgRequired, String callingPackage,
+            @Nullable String callingFeatureId, @UserIdInt int userId,
             boolean allowBackgroundActivityStarts) throws TransactionTooLargeException;
 
     public abstract void disconnectActivityFromServices(Object connectionHolder);
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 861d41d..8f02f15 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -16,6 +16,10 @@
 
 package android.app;
 
+import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__DEFAULT;
+import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED;
+import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM;
+
 import android.Manifest;
 import android.annotation.CallbackExecutor;
 import android.annotation.IntDef;
@@ -27,6 +31,8 @@
 import android.annotation.SystemService;
 import android.annotation.TestApi;
 import android.app.usage.UsageStatsManager;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledAfter;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -46,6 +52,8 @@
 import android.os.Process;
 import android.os.RemoteCallback;
 import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SystemClock;
 import android.os.UserManager;
 import android.util.ArrayMap;
 import android.util.ArraySet;
@@ -61,6 +69,7 @@
 import com.android.internal.app.IAppOpsCallback;
 import com.android.internal.app.IAppOpsNotedCallback;
 import com.android.internal.app.IAppOpsService;
+import com.android.internal.app.MessageSamplingConfig;
 import com.android.internal.os.RuntimeInit;
 import com.android.internal.os.ZygoteInit;
 import com.android.internal.util.ArrayUtils;
@@ -88,45 +97,104 @@
 import java.util.function.Supplier;
 
 /**
- * AppOps are mappings of [package/uid, op-name] -> [mode]. The list of existing appops is defined
- * by the system and cannot be amended by apps. Only system apps can change appop-modes.
+ * App-ops are used for two purposes: Access control and tracking.
  *
- * <p>Beside a mode the system tracks when an op was {@link #noteOp noted}. The tracked data can
- * only be read by system components.
+ * <p>App-ops cover a wide variety of functionality from helping with runtime permissions access
+ * control and tracking to battery consumption tracking.
  *
- * <p>Installed apps can usually only listen to changes and events on their own ops. E.g.
- * {@link AppOpsCollector} allows to get a callback each time an app called {@link #noteOp} or
- * {@link #startOp} for an op belonging to the app.
+ * <h2>Access control</h2>
+ *
+ * <p>App-ops can either be controlled for each uid or for each package. Which one is used depends
+ * on the API provider maintaining this app-op. For any security or privacy related app-op the
+ * provider needs to control the app-op for per uid as all security and privacy is based on uid in
+ * Android.
+ *
+ * <p>To control access the app-op can be set to a mode to:
+ * <dl>
+ *     <dt>{@link #MODE_DEFAULT}
+ *     <dd>Default behavior, might differ from app-op or app-op
+ *     <dt>{@link #MODE_ALLOWED}
+ *     <dd>Allow the access
+ *     <dt>{@link #MODE_IGNORED}
+ *     <dd>Don't allow the access, i.e. don't perform the requested action or return no or dummy
+ *     data
+ *     <dt>{@link #MODE_ERRORED}
+ *     <dd>Throw a {@link SecurityException} on access. This can be suppressed by using a
+ *     {@code ...noThrow} method to check the mode
+ * </dl>
+ *
+ * <p>API providers need to check the mode returned by {@link #noteOp} if they are are allowing
+ * access to operations gated by the app-op. {@link #unsafeCheckOp} should be used to check the
+ * mode if no access is granted. E.g. this can be used for displaying app-op state in the UI or
+ * when checking the state before later calling {@link #noteOp} anyway.
+ *
+ * <p>If an operation refers to a time span (e.g. a audio-recording session) the API provider
+ * should use {@link #startOp} and {@link #finishOp} instead of {@link #noteOp}.
+ *
+ * <h3>Runtime permissions and app-ops</h3>
+ *
+ * <p>Each platform defined runtime permission (beside background modifiers) has an associated app
+ * op which is used for tracking but also to allow for silent failures. I.e. if the runtime
+ * permission is denied the caller gets a {@link SecurityException}, but if the permission is
+ * granted and the app-op is {@link #MODE_IGNORED} then the callers gets dummy behavior, e.g.
+ * location callbacks would not happen.
+ *
+ * <h3>App-op permissions</h3>
+ *
+ * <p>App-ops permissions are platform defined permissions that can be overridden. The security
+ * check for app-op permissions should by {@link #MODE_DEFAULT default} check the permission grant
+ * state. If the app-op state is set to {@link #MODE_ALLOWED} or {@link #MODE_IGNORED} the app-op
+ * state should be checked instead of the permission grant state.
+ *
+ * <p>This functionality allows to grant access by default to apps fulfilling the requirements for
+ * a certain permission level. Still the behavior can be overridden when needed.
+ *
+ * <h2>Tracking</h2>
+ *
+ * <p>App-ops track many important events, including all accesses to runtime permission protected
+ * APIs. This is done by tracking when an app-op was {@link #noteOp noted} or
+ * {@link #startOp started}. The tracked data can only be read by system components.
+ *
+ * <p><b>Only {@link #noteOp}/{@link #startOp} are tracked; {@link #unsafeCheckOp} is not tracked.
+ * Hence it is important to eventually call {@link #noteOp} or {@link #startOp} when providing
+ * access to protected operations or data.</b>
+ *
+ * <p>Some apps are forwarding access to other apps. E.g. an app might get the location from the
+ * system's location provider and then send the location further to a 3rd app. In this case the
+ * app passing on the data needs to call {@link #noteProxyOp} to signal the access proxying. This
+ * might also make sense inside of a single app if the access is forwarded between two features of
+ * the app.
+ *
+ * <p>An app can register an {@link AppOpsCollector} to get informed about what accesses the
+ * system is tracking for it. As each runtime permission has an associated app-op this API is
+ * particularly useful for an app that want to find unexpected private data accesses.
  */
 @SystemService(Context.APP_OPS_SERVICE)
 public class AppOpsManager {
     /**
-     * <p>App ops allows callers to:</p>
+     * This is a subtle behavior change to {@link #startWatchingMode}.
      *
-     * <ul>
-     * <li> Note when operations are happening, and find out if they are allowed for the current
-     * caller.</li>
-     * <li> Disallow specific apps from doing specific operations.</li>
-     * <li> Collect all of the current information about operations that have been executed or
-     * are not being allowed.</li>
-     * <li> Monitor for changes in whether an operation is allowed.</li>
-     * </ul>
+     * Before this change the system called back for the switched op. After the change the system
+     * will call back for the actually requested op or all switched ops if no op is specified.
      *
-     * <p>Each operation is identified by a single integer; these integers are a fixed set of
-     * operations, enumerated by the OP_* constants.
-     *
-     * <p></p>When checking operations, the result is a "mode" integer indicating the current
-     * setting for the operation under that caller: MODE_ALLOWED, MODE_IGNORED (don't execute
-     * the operation but fake its behavior enough so that the caller doesn't crash),
-     * MODE_ERRORED (throw a SecurityException back to the caller; the normal operation calls
-     * will do this for you).
+     * @hide
      */
+    @ChangeId
+    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
+    public static final long CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE = 148180766L;
 
     final Context mContext;
 
     @UnsupportedAppUsage
     final IAppOpsService mService;
 
+    /**
+     * Service for the application context, to be used by static methods via
+     * {@link #getService()}
+     */
+    @GuardedBy("sLock")
+    static IAppOpsService sService;
+
     @GuardedBy("mModeWatchers")
     private final ArrayMap<OnOpChangedListener, IAppOpsCallback> mModeWatchers =
             new ArrayMap<>();
@@ -145,8 +213,84 @@
     @GuardedBy("sLock")
     private static @Nullable AppOpsCollector sNotedAppOpsCollector;
 
+    /**
+     * Additional collector that collect accesses and forwards a few of them them via
+     * {@link IAppOpsService#reportRuntimeAppOpAccessMessageAndGetConfig}.
+     */
+    private static AppOpsCollector sMessageCollector =
+            new AppOpsCollector() {
+                @Override
+                public void onNoted(@NonNull SyncNotedAppOp op) {
+                    reportStackTraceIfNeeded(op);
+                }
+
+                @Override
+                public void onAsyncNoted(@NonNull AsyncNotedAppOp asyncOp) {
+                    // collected directly in AppOpsService
+                }
+
+                @Override
+                public void onSelfNoted(@NonNull SyncNotedAppOp op) {
+                    reportStackTraceIfNeeded(op);
+                }
+
+                private void reportStackTraceIfNeeded(@NonNull SyncNotedAppOp op) {
+                    if (sConfig.getSampledOpCode() == OP_NONE
+                            && sConfig.getExpirationTimeSinceBootMillis()
+                            >= SystemClock.elapsedRealtime()) {
+                        return;
+                    }
+
+                    MessageSamplingConfig config = sConfig;
+                    if (leftCircularDistance(strOpToOp(op.getOp()), config.getSampledOpCode(),
+                            _NUM_OP) <= config.getAcceptableLeftDistance()
+                            || config.getExpirationTimeSinceBootMillis()
+                            < SystemClock.elapsedRealtime()) {
+                        String stackTrace = getFormattedStackTrace();
+                        try {
+                            sConfig = getService().reportRuntimeAppOpAccessMessageAndGetConfig(
+                                    ActivityThread.currentOpPackageName(), op, stackTrace);
+                        } catch (RemoteException e) {
+                            e.rethrowFromSystemServer();
+                        }
+                    }
+                }
+            };
+
     static IBinder sClientId;
 
+    /**
+     * How many seconds we want for a drop in uid state from top to settle before applying it.
+     *
+     * <>Set a parameter to {@link android.provider.Settings.Global#APP_OPS_CONSTANTS}
+     *
+     * @hide
+     */
+    @TestApi
+    public static final String KEY_TOP_STATE_SETTLE_TIME = "top_state_settle_time";
+
+    /**
+     * How many second we want for a drop in uid state from foreground to settle before applying it.
+     *
+     * <>Set a parameter to {@link android.provider.Settings.Global#APP_OPS_CONSTANTS}
+     *
+     * @hide
+     */
+    @TestApi
+    public static final String KEY_FG_SERVICE_STATE_SETTLE_TIME =
+            "fg_service_state_settle_time";
+
+    /**
+     * How many seconds we want for a drop in uid state from background to settle before applying
+     * it.
+     *
+     * <>Set a parameter to {@link android.provider.Settings.Global#APP_OPS_CONSTANTS}
+     *
+     * @hide
+     */
+    @TestApi
+    public static final String KEY_BG_STATE_SETTLE_TIME = "bg_state_settle_time";
+
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
     @IntDef(flag = true, prefix = { "HISTORICAL_MODE_" }, value = {
@@ -504,7 +648,6 @@
     })
     public @interface OpFlags {}
 
-
     /** @hide */
     public static final String getFlagName(@OpFlags int flag) {
         switch (flag) {
@@ -523,6 +666,18 @@
         }
     }
 
+    /**
+     * Strategies used for message sampling
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = {"RUNTIME_APP_OPS_ACCESS__SAMPLING_STRATEGY__"}, value = {
+            RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__DEFAULT,
+            RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM,
+            RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED
+    })
+    public @interface SamplingStrategy {}
+
     private static final int UID_STATE_OFFSET = 31;
     private static final int FLAGS_MASK = 0xFFFFFFFF;
 
@@ -878,10 +1033,14 @@
      * @hide
      */
     public static final int OP_ACTIVATE_PLATFORM_VPN = 94;
+    /** @hide */
+    public static final int OP_LOADER_USAGE_STATS = 95;
+    /** @hide Access telephony call audio */
+    public static final int OP_ACCESS_CALL_AUDIO = 96;
 
     /** @hide */
     @UnsupportedAppUsage
-    public static final int _NUM_OP = 95;
+    public static final int _NUM_OP = 97;
 
     /** Access to coarse location information. */
     public static final String OPSTR_COARSE_LOCATION = "android:coarse_location";
@@ -976,7 +1135,7 @@
     /** Required to draw on top of other apps. */
     public static final String OPSTR_SYSTEM_ALERT_WINDOW
             = "android:system_alert_window";
-    /** Required to write/modify/update system settingss. */
+    /** Required to write/modify/update system settings. */
     public static final String OPSTR_WRITE_SETTINGS
             = "android:write_settings";
     /** @hide Get device accounts. */
@@ -1172,12 +1331,18 @@
     @SystemApi
     public static final String OPSTR_MANAGE_EXTERNAL_STORAGE =
             "android:manage_external_storage";
+    /** @hide Access telephony call audio */
+    @SystemApi
+    public static final String OPSTR_ACCESS_CALL_AUDIO = "android:access_call_audio";
 
     /** @hide Communicate cross-profile within the same profile group. */
     @SystemApi
     public static final String OPSTR_INTERACT_ACROSS_PROFILES = "android:interact_across_profiles";
     /** @hide Start Platform VPN without user intervention */
     public static final String OPSTR_ACTIVATE_PLATFORM_VPN = "android:activate_platform_vpn";
+    /** @hide */
+    @SystemApi
+    public static final String OPSTR_LOADER_USAGE_STATS = "android:loader_usage_stats";
 
 
     /** {@link #sAppOpsToNote} not initialized yet for this op */
@@ -1256,7 +1421,9 @@
             OP_MANAGE_IPSEC_TUNNELS,
             OP_INSTANT_APP_START_FOREGROUND,
             OP_MANAGE_EXTERNAL_STORAGE,
-            OP_INTERACT_ACROSS_PROFILES
+            OP_INTERACT_ACROSS_PROFILES,
+            OP_LOADER_USAGE_STATS,
+            OP_ACCESS_CALL_AUDIO,
     };
 
     /**
@@ -1363,6 +1530,8 @@
             OP_MANAGE_EXTERNAL_STORAGE,         // MANAGE_EXTERNAL_STORAGE
             OP_INTERACT_ACROSS_PROFILES,        //INTERACT_ACROSS_PROFILES
             OP_ACTIVATE_PLATFORM_VPN,           // ACTIVATE_PLATFORM_VPN
+            OP_LOADER_USAGE_STATS,              // LOADER_USAGE_STATS
+            OP_ACCESS_CALL_AUDIO,               // ACCESS_CALL_AUDIO
     };
 
     /**
@@ -1464,6 +1633,8 @@
             OPSTR_MANAGE_EXTERNAL_STORAGE,
             OPSTR_INTERACT_ACROSS_PROFILES,
             OPSTR_ACTIVATE_PLATFORM_VPN,
+            OPSTR_LOADER_USAGE_STATS,
+            OPSTR_ACCESS_CALL_AUDIO,
     };
 
     /**
@@ -1566,6 +1737,8 @@
             "MANAGE_EXTERNAL_STORAGE",
             "INTERACT_ACROSS_PROFILES",
             "ACTIVATE_PLATFORM_VPN",
+            "LOADER_USAGE_STATS",
+            "ACCESS_CALL_AUDIO",
     };
 
     /**
@@ -1669,6 +1842,8 @@
             Manifest.permission.MANAGE_EXTERNAL_STORAGE,
             android.Manifest.permission.INTERACT_ACROSS_PROFILES,
             null, // no permission for OP_ACTIVATE_PLATFORM_VPN
+            android.Manifest.permission.LOADER_USAGE_STATS,
+            Manifest.permission.ACCESS_CALL_AUDIO,
     };
 
     /**
@@ -1772,6 +1947,8 @@
             null, // MANAGE_EXTERNAL_STORAGE
             null, // INTERACT_ACROSS_PROFILES
             null, // ACTIVATE_PLATFORM_VPN
+            null, // LOADER_USAGE_STATS
+            null, // ACCESS_CALL_AUDIO
     };
 
     /**
@@ -1874,6 +2051,8 @@
             false, // MANAGE_EXTERNAL_STORAGE
             false, // INTERACT_ACROSS_PROFILES
             false, // ACTIVATE_PLATFORM_VPN
+            false, // LOADER_USAGE_STATS
+            false, // ACCESS_CALL_AUDIO
     };
 
     /**
@@ -1975,6 +2154,8 @@
             AppOpsManager.MODE_DEFAULT, // MANAGE_EXTERNAL_STORAGE
             AppOpsManager.MODE_DEFAULT, // INTERACT_ACROSS_PROFILES
             AppOpsManager.MODE_IGNORED, // ACTIVATE_PLATFORM_VPN
+            AppOpsManager.MODE_DEFAULT, // LOADER_USAGE_STATS
+            AppOpsManager.MODE_DEFAULT, // ACCESS_CALL_AUDIO
     };
 
     /**
@@ -2080,6 +2261,8 @@
             false, // MANAGE_EXTERNAL_STORAGE
             false, // INTERACT_ACROSS_PROFILES
             false, // ACTIVATE_PLATFORM_VPN
+            false, // LOADER_USAGE_STATS
+            false, // ACCESS_CALL_AUDIO
     };
 
     /**
@@ -2165,6 +2348,10 @@
         }
     }
 
+    /** Config used to control app ops access messages sampling */
+    private static MessageSamplingConfig sConfig =
+            new MessageSamplingConfig(OP_NONE, 0, 0);
+
     /** @hide */
     public static final String KEY_HISTORICAL_OPS = "historical_ops";
 
@@ -2808,7 +2995,7 @@
          * @param flags The op flags
          *
          * @return the last access time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no access
          *
          * @see #getLastAccessForegroundTime(int)
          * @see #getLastAccessBackgroundTime(int)
@@ -2825,7 +3012,7 @@
          * @param flags The op flags
          *
          * @return the last access time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no foreground access
          *
          * @see #getLastAccessTime(int)
          * @see #getLastAccessBackgroundTime(int)
@@ -2843,7 +3030,7 @@
          * @param flags The op flags
          *
          * @return the last access time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no background access
          *
          * @see #getLastAccessTime(int)
          * @see #getLastAccessForegroundTime(int)
@@ -2860,7 +3047,7 @@
          *
          * @param flags The op flags
          *
-         * @return the last access event of {@code null}
+         * @return the last access event of {@code null} if there was no access
          */
         private @Nullable NoteOpEvent getLastAccessEvent(@UidState int fromUidState,
                 @UidState int toUidState, @OpFlags int flags) {
@@ -2875,7 +3062,7 @@
          * @param flags The op flags
          *
          * @return the last access time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no access
          *
          * @see #getLastAccessTime(int)
          * @see #getLastAccessForegroundTime(int)
@@ -2898,7 +3085,7 @@
          * @param flags The op flags
          *
          * @return the last rejection time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no rejection
          *
          * @see #getLastRejectForegroundTime(int)
          * @see #getLastRejectBackgroundTime(int)
@@ -2915,7 +3102,7 @@
          * @param flags The op flags
          *
          * @return the last rejection time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no foreground rejection
          *
          * @see #getLastRejectTime(int)
          * @see #getLastRejectBackgroundTime(int)
@@ -2933,7 +3120,7 @@
          * @param flags The op flags
          *
          * @return the last rejection time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no background rejection
          *
          * @see #getLastRejectTime(int)
          * @see #getLastRejectForegroundTime(int)
@@ -2950,8 +3137,7 @@
          *
          * @param flags The op flags
          *
-         * @return the last rejection time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * @return the last rejection event of {@code null} if there was no rejection
          *
          * @see #getLastRejectTime(int)
          * @see #getLastRejectForegroundTime(int)
@@ -2970,7 +3156,8 @@
          * @param toUidState The highest UID state for which to query (inclusive)
          * @param flags The op flags
          *
-         * @return the last access time (in milliseconds since epoch) or {@code -1}
+         * @return the last access time (in milliseconds since epoch) or {@code -1} if there was no
+         * rejection
          *
          * @see #getLastRejectTime(int)
          * @see #getLastRejectForegroundTime(int)
@@ -2993,7 +3180,7 @@
          *
          * @param flags The op flags
          *
-         * @return the duration in milliseconds or {@code -1}
+         * @return the duration in milliseconds or {@code -1} if there was no rejection
          *
          * @see #getLastForegroundDuration(int)
          * @see #getLastBackgroundDuration(int)
@@ -3009,7 +3196,7 @@
          *
          * @param flags The op flags
          *
-         * @return the duration in milliseconds or {@code -1}
+         * @return the duration in milliseconds or {@code -1} if there was no foreground rejection
          *
          * @see #getLastDuration(int)
          * @see #getLastBackgroundDuration(int)
@@ -3026,7 +3213,7 @@
          *
          * @param flags The op flags
          *
-         * @return the duration in milliseconds or {@code -1}
+         * @return the duration in milliseconds or {@code -1} if there was no background rejection
          *
          * @see #getLastDuration(int)
          * @see #getLastForegroundDuration(int)
@@ -3045,7 +3232,7 @@
          * @param toUidState The highest UID state for which to query (inclusive)
          * @param flags The op flags
          *
-         * @return the duration in milliseconds or {@code -1}
+         * @return the duration in milliseconds or {@code -1} if there was no rejection
          *
          * @see #getLastDuration(int)
          * @see #getLastForegroundDuration(int)
@@ -3069,7 +3256,7 @@
          *
          * @param flags The op flags
          *
-         * @return The proxy name or {@code null}
+         * @return The proxy info or {@code null} if there was no proxy access
          *
          * @see #getLastForegroundProxyInfo(int)
          * @see #getLastBackgroundProxyInfo(int)
@@ -3086,7 +3273,7 @@
          *
          * @param flags The op flags
          *
-         * @return The proxy name or {@code null}
+         * @return The proxy info or {@code null} if there was no proxy access
          *
          * @see #getLastProxyInfo(int)
          * @see #getLastBackgroundProxyInfo(int)
@@ -3104,7 +3291,7 @@
          *
          * @param flags The op flags
          *
-         * @return The proxy name or {@code null}
+         * @return The proxy info or {@code null} if there was no proxy background access
          *
          * @see #getLastProxyInfo(int)
          * @see #getLastForegroundProxyInfo(int)
@@ -3124,7 +3311,7 @@
          * @param toUidState The highest UID state for which to query (inclusive)
          * @param flags The op flags
          *
-         * @return The proxy name or {@code null}
+         * @return The proxy info or {@code null} if there was no proxy foreground access
          *
          * @see #getLastProxyInfo(int)
          * @see #getLastForegroundProxyInfo(int)
@@ -3380,7 +3567,7 @@
          * @param flags The op flags
          *
          * @return the last access time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no access
          *
          * @see #getLastAccessForegroundTime(int)
          * @see #getLastAccessBackgroundTime(int)
@@ -3397,7 +3584,7 @@
          * @param flags The op flags
          *
          * @return the last access time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no foreground access
          *
          * @see #getLastAccessTime(int)
          * @see #getLastAccessBackgroundTime(int)
@@ -3415,7 +3602,7 @@
          * @param flags The op flags
          *
          * @return the last access time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no background access
          *
          * @see #getLastAccessTime(int)
          * @see #getLastAccessForegroundTime(int)
@@ -3432,7 +3619,7 @@
          *
          * @param flags The op flags
          *
-         * @return the last access event of {@code null}
+         * @return the last access event of {@code null} if there was no access
          */
         private @Nullable NoteOpEvent getLastAccessEvent(@UidState int fromUidState,
                 @UidState int toUidState, @OpFlags int flags) {
@@ -3458,7 +3645,7 @@
          * @param flags The op flags
          *
          * @return the last access time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no access
          *
          * @see #getLastAccessTime(int)
          * @see #getLastAccessForegroundTime(int)
@@ -3494,7 +3681,7 @@
          * @param flags The op flags
          *
          * @return the last rejection time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no rejection
          *
          * @see #getLastRejectForegroundTime(int)
          * @see #getLastRejectBackgroundTime(int)
@@ -3511,7 +3698,7 @@
          * @param flags The op flags
          *
          * @return the last rejection time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no foreground rejection
          *
          * @see #getLastRejectTime(int)
          * @see #getLastRejectBackgroundTime(int)
@@ -3529,7 +3716,7 @@
          * @param flags The op flags
          *
          * @return the last rejection time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no background rejection
          *
          * @see #getLastRejectTime(int)
          * @see #getLastRejectForegroundTime(int)
@@ -3546,7 +3733,7 @@
          *
          * @param flags The op flags
          *
-         * @return the last reject event of {@code null}
+         * @return the last reject event of {@code null} if there was no rejection
          */
         private @Nullable NoteOpEvent getLastRejectEvent(@UidState int fromUidState,
                 @UidState int toUidState, @OpFlags int flags) {
@@ -3572,7 +3759,7 @@
          * @param flags The op flags
          *
          * @return the last rejection time (in milliseconds since epoch start (January 1, 1970
-         * 00:00:00.000 GMT - Gregorian)) or {@code -1}
+         * 00:00:00.000 GMT - Gregorian)) or {@code -1} if there was no rejection
          *
          * @see #getLastRejectTime(int)
          * @see #getLastRejectForegroundTime(int)
@@ -3616,7 +3803,7 @@
          *
          * @param flags The op flags
          *
-         * @return the duration in milliseconds or {@code -1}
+         * @return the duration in milliseconds or {@code -1} if there was no access
          *
          * @see #getLastForegroundDuration(int)
          * @see #getLastBackgroundDuration(int)
@@ -3632,7 +3819,7 @@
          *
          * @param flags The op flags
          *
-         * @return the duration in milliseconds or {@code -1}
+         * @return the duration in milliseconds or {@code -1} if there was no foreground access
          *
          * @see #getLastDuration(int)
          * @see #getLastBackgroundDuration(int)
@@ -3649,7 +3836,7 @@
          *
          * @param flags The op flags
          *
-         * @return the duration in milliseconds or {@code -1}
+         * @return the duration in milliseconds or {@code -1} if there was no background access
          *
          * @see #getLastDuration(int)
          * @see #getLastForegroundDuration(int)
@@ -3668,7 +3855,7 @@
          * @param toUidState The highest UID state for which to query (inclusive)
          * @param flags The op flags
          *
-         * @return the duration in milliseconds or {@code -1}
+         * @return the duration in milliseconds or {@code -1} if there was no access
          *
          * @see #getLastDuration(int)
          * @see #getLastForegroundDuration(int)
@@ -3743,7 +3930,7 @@
          *
          * @param flags The op flags
          *
-         * @return The proxy name or {@code null}
+         * @return The proxy info or {@code null} if there was no proxy access
          *
          * @see #getLastForegroundProxyInfo(int)
          * @see #getLastBackgroundProxyInfo(int)
@@ -3760,7 +3947,7 @@
          *
          * @param flags The op flags
          *
-         * @return The proxy name or {@code null}
+         * @return The proxy info or {@code null} if there was no foreground proxy access
          *
          * @see #getLastProxyInfo(int)
          * @see #getLastBackgroundProxyInfo(int)
@@ -3778,7 +3965,7 @@
          *
          * @param flags The op flags
          *
-         * @return The proxy name or {@code null}
+         * @return The proxy info or {@code null} if there was no background proxy access
          *
          * @see #getLastProxyInfo(int)
          * @see #getLastForegroundProxyInfo(int)
@@ -3798,7 +3985,7 @@
          * @param toUidState The highest UID state for which to query (inclusive)
          * @param flags The op flags
          *
-         * @return The proxy name or {@code null}
+         * @return The proxy info or {@code null} if there was no proxy access
          *
          * @see #getLastProxyInfo(int)
          * @see #getLastForegroundProxyInfo(int)
@@ -3870,7 +4057,10 @@
         }
 
         /**
-         * The features that have been used when checking the op
+         * The features that have been used when checking the op keyed by id of the feature.
+         *
+         * @see Context#createFeatureContext(String)
+         * @see #noteOp(String, int, String, String, String)
          */
         @DataClass.Generated.Member
         public @NonNull Map<String,OpFeatureEntry> getFeatures() {
@@ -5979,7 +6169,7 @@
      */
     public interface OnOpActiveChangedListener {
         /**
-         * Called when the active state of an app op changes.
+         * Called when the active state of an app-op changes.
          *
          * @param op The operation that changed.
          * @param packageName The package performing the operation.
@@ -6270,7 +6460,7 @@
     @SystemApi
     @TestApi
     @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES)
-    public void setUidMode(String appOp, int uid, @Mode int mode) {
+    public void setUidMode(@NonNull String appOp, int uid, @Mode int mode) {
         try {
             mService.setUidMode(AppOpsManager.strOpToOp(appOp), uid, mode);
         } catch (RemoteException e) {
@@ -6325,7 +6515,8 @@
     @TestApi
     @SystemApi
     @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES)
-    public void setMode(String op, int uid, String packageName, @Mode int mode) {
+    public void setMode(@NonNull String op, int uid, @Nullable String packageName,
+            @Mode int mode) {
         try {
             mService.setMode(strOpToOp(op), uid, packageName, mode);
         } catch (RemoteException e) {
@@ -6368,16 +6559,17 @@
     }
 
     /**
-     * Gets the app op name associated with a given permission.
-     * The app op name is one of the public constants defined
+     * Gets the app-op name associated with a given permission.
+     *
+     * <p>The app-op name is one of the public constants defined
      * in this class such as {@link #OPSTR_COARSE_LOCATION}.
      * This API is intended to be used for mapping runtime
-     * permissions to the corresponding app op.
+     * permissions to the corresponding app-op.
      *
      * @param permission The permission.
-     * @return The app op associated with the permission or null.
+     * @return The app-op associated with the permission or {@code null}.
      */
-    public static String permissionToOp(String permission) {
+    public static @Nullable String permissionToOp(@NonNull String permission) {
         final Integer opCode = sPermToOp.get(permission);
         if (opCode == null) {
             return null;
@@ -6495,7 +6687,7 @@
     }
 
     /**
-     * Start watching for changes to the active state of app ops. An app op may be
+     * Start watching for changes to the active state of app-ops. An app-op may be
      * long running and it has a clear start and stop delimiters. If an op is being
      * started or stopped by any package you will get a callback. To change the
      * watched ops for a registered callback you need to unregister and register it
@@ -6554,7 +6746,7 @@
     }
 
     /**
-     * Stop watching for changes to the active state of an app op. An app op may be
+     * Stop watching for changes to the active state of an app-op. An app-op may be
      * long running and it has a clear start and stop delimiters. Unregistering a
      * non-registered callback has no effect.
      *
@@ -6785,7 +6977,8 @@
      * @param op The operation to note.  One of the OPSTR_* constants.
      * @param uid The user id of the application attempting to perform the operation.
      * @param packageName The name of the application attempting to perform the operation.
-     * @param featureId The feature in the app or {@code null} for default feature
+     * @param featureId The {@link Context#createFeatureContext feature} in the package or {@code
+     * null} for default feature
      * @param message A message describing the reason the op was noted
      *
      * @return Returns {@link #MODE_ALLOWED} if the operation is allowed, or
@@ -6860,6 +7053,8 @@
      * @param op The operation to note.  One of the OPSTR_* constants.
      * @param uid The user id of the application attempting to perform the operation.
      * @param packageName The name of the application attempting to perform the operation.
+     * @param featureId The {@link Context#createFeatureContext feature} in the package or {@code
+     * null} for default feature
      * @param message A message describing the reason the op was noted
      *
      * @return Returns {@link #MODE_ALLOWED} if the operation is allowed, or
@@ -6867,8 +7062,8 @@
      * causing the app to crash).
      */
     public int noteOpNoThrow(@NonNull String op, int uid, @NonNull String packageName,
-            @Nullable String feature, @Nullable String message) {
-        return noteOpNoThrow(strOpToOp(op), uid, packageName, feature, message);
+            @Nullable String featureId, @Nullable String message) {
+        return noteOpNoThrow(strOpToOp(op), uid, packageName, featureId, message);
     }
 
     /**
@@ -7137,11 +7332,9 @@
     }
 
     /**
-     * Do a quick check to validate if a package name belongs to a UID.
-     *
-     * @throws SecurityException if the package name doesn't belong to the given
-     *             UID, or if ownership cannot be verified.
+     * @deprecated Use {@link PackageManager#getPackageUid} instead
      */
+    @Deprecated
     public void checkPackage(int uid, @NonNull String packageName) {
         try {
             if (mService.checkPackage(uid, packageName) != MODE_ALLOWED) {
@@ -7205,6 +7398,17 @@
         }
     }
 
+    /** @hide */
+    private static IAppOpsService getService() {
+        synchronized (sLock) {
+            if (sService == null) {
+                sService = IAppOpsService.Stub.asInterface(
+                        ServiceManager.getService(Context.APP_OPS_SERVICE));
+            }
+            return sService;
+        }
+    }
+
     /**
      * @deprecated use {@link #startOp(String, int, String, String, String)} instead
      */
@@ -7249,7 +7453,8 @@
      * @param op The operation to start.  One of the OPSTR_* constants.
      * @param uid The user id of the application attempting to perform the operation.
      * @param packageName The name of the application attempting to perform the operation.
-     * @param featureId The feature in the app or {@code null} for default feature
+     * @param featureId The {@link Context#createFeatureContext feature} in the package or {@code
+     * null} for default feature
      * @param message Description why op was started
      *
      * @return Returns {@link #MODE_ALLOWED} if the operation is allowed, or
@@ -7440,7 +7645,8 @@
     }
 
     /**
-     * Checks whether the given op for a package is active.
+     * Checks whether the given op for a package is active, i.e. did someone call {@link #startOp}
+     * without {@link #finishOp} yet.
      * <p>
      * If you don't hold the {@code android.Manifest.permission#WATCH_APPOPS}
      * permission you can query only for your UID.
@@ -7551,6 +7757,7 @@
                 sNotedAppOpsCollector.onSelfNoted(new SyncNotedAppOp(op, featureId));
             }
         }
+        sMessageCollector.onSelfNoted(new SyncNotedAppOp(op, featureId));
     }
 
     /**
@@ -7701,6 +7908,10 @@
                         }
                     }
                 }
+                for (int code = notedAppOps.nextSetBit(0); code != -1;
+                        code = notedAppOps.nextSetBit(code + 1)) {
+                    sMessageCollector.onNoted(new SyncNotedAppOp(code, featureId));
+                }
             }
         }
     }
@@ -7761,24 +7972,23 @@
      * @hide
      */
     public static boolean isCollectingNotedAppOps() {
-        synchronized (sLock) {
-            return sNotedAppOpsCollector != null;
-        }
+        return sNotedAppOpsCollector != null;
     }
 
     /**
-     * Callback an app can choose to {@link #setNotedAppOpsCollector register} to monitor it's noted
-     * appops. I.e. each time any app calls {@link #noteOp} or {@link #startOp} one of the callback
-     * methods of this object is called.
+     * Callback an app can {@link #setNotedAppOpsCollector register} to monitor the app-ops the
+     * system has tracked for it. I.e. each time any app calls {@link #noteOp} or {@link #startOp}
+     * one of the callback methods of this object is called.
      *
-     * <p><b>Only appops related to dangerous permissions are collected.</b>
+     * <p><b>There will be a callback for all app-ops related to runtime permissions, but not
+     * necessarily for all other app-ops.
      *
      * <pre>
      * setNotedAppOpsCollector(new AppOpsCollector() {
      *     ArraySet<Pair<String, String>> opsNotedForThisProcess = new ArraySet<>();
      *
      *     private synchronized void addAccess(String op, String accessLocation) {
-     *         // Ops are often noted when permission protected APIs were called.
+     *         // Ops are often noted when runtime permission protected APIs were called.
      *         // In this case permissionToOp() allows to resolve the permission<->op
      *         opsNotedForThisProcess.add(new Pair(accessType, accessLocation));
      *     }
@@ -7820,20 +8030,21 @@
         }
 
         /**
-         * Called when an app-op was noted for this package inside of a two-way binder-call.
+         * Called when an app-op was {@link #noteOp noted} for this package inside of a synchronous
+         * API call, i.e. a API call that returned data or waited until the action was performed.
          *
-         * <p>Called on the calling thread just after executing the binder-call. This allows
-         * the app to e.g. collect stack traces to figure out where the access came from.
+         * <p>Called on the calling thread before the API returns. This allows the app to e.g.
+         * collect stack traces to figure out where the access came from.
          *
          * @param op The op noted
          */
         public abstract void onNoted(@NonNull SyncNotedAppOp op);
 
         /**
-         * Called when this app noted an app-op for its own package.
+         * Called when this app noted an app-op for its own package,
          *
-         * <p>Called on the thread the noted the op. This allows the app to e.g. collect stack
-         * traces to figure out where the access came from.
+         * <p>This is very similar to {@link #onNoted} only that the tracking was not caused by the
+         * API provider in a separate process, but by one in the app's own process.
          *
          * @param op The op noted
          */
@@ -7897,10 +8108,13 @@
 
         StringBuilder sb = new StringBuilder();
         for (int i = firstInteresting; i <= lastInteresting; i++) {
-            sb.append(trace[i]);
-            if (i != lastInteresting) {
+            if (i != firstInteresting) {
                 sb.append('\n');
             }
+            if (sb.length() + trace[i].toString().length() > 600) {
+                break;
+            }
+            sb.append(trace[i]);
         }
 
         return sb.toString();
@@ -8028,6 +8242,22 @@
     }
 
     /**
+     * Pulls current AppOps access report and picks package and op to watch for next access report
+     *
+     * @hide
+     */
+    @SystemApi
+    @TestApi
+    @RequiresPermission(Manifest.permission.GET_APP_OPS_STATS)
+    public @Nullable RuntimeAppOpAccessMessage collectRuntimeAppOpAccessMessage() {
+        try {
+            return mService.collectRuntimeAppOpAccessMessage();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Returns all supported operation names.
      * @hide
      */
@@ -8236,4 +8466,12 @@
 
         return AppOpsManager.MODE_DEFAULT;
     }
+
+    /**
+     * Calculate left circular distance for two numbers modulo size.
+     * @hide
+     */
+    public static int leftCircularDistance(int from, int to, int size) {
+        return (to + size - from) % size;
+    }
 }
diff --git a/core/java/android/app/AppOpsManagerInternal.java b/core/java/android/app/AppOpsManagerInternal.java
index c13c5a5..309e91f 100644
--- a/core/java/android/app/AppOpsManagerInternal.java
+++ b/core/java/android/app/AppOpsManagerInternal.java
@@ -94,14 +94,16 @@
             boolean visible);
 
     /**
-     * Like {@link AppOpsManager#setUidMode}, but allows ignoring a certain callback.
+     * Like {@link AppOpsManager#setUidMode}, but allows ignoring our own callback and not updating
+     * the REVOKED_COMPAT flag.
      */
-    public abstract void setUidModeIgnoringCallback(int code, int uid, int mode,
-            @Nullable IAppOpsCallback callbackToIgnore);
+    public abstract void setUidModeFromPermissionPolicy(int code, int uid, int mode,
+            @Nullable IAppOpsCallback callback);
 
     /**
-     * Like {@link AppOpsManager#setMode}, but allows ignoring a certain callback.
+     * Like {@link AppOpsManager#setMode}, but allows ignoring our own callback and not updating the
+     * REVOKED_COMPAT flag.
      */
-    public abstract void setModeIgnoringCallback(int code, int uid, @NonNull String packageName,
-            int mode, @Nullable IAppOpsCallback callbackToIgnore);
+    public abstract void setModeFromPermissionPolicy(int code, int uid, @NonNull String packageName,
+            int mode, @Nullable IAppOpsCallback callback);
 }
diff --git a/core/java/android/app/ApplicationExitInfo.java b/core/java/android/app/ApplicationExitInfo.java
index 4bf5f07..c55453e 100644
--- a/core/java/android/app/ApplicationExitInfo.java
+++ b/core/java/android/app/ApplicationExitInfo.java
@@ -19,7 +19,6 @@
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.annotation.SystemApi;
 import android.app.ActivityManager.RunningAppProcessInfo.Importance;
 import android.icu.text.SimpleDateFormat;
 import android.os.Parcel;
@@ -245,12 +244,12 @@
     /**
      * @see {@link #getPss}
      */
-    private int mPss;
+    private long mPss;
 
     /**
      * @see {@link #getRss}
      */
-    private int mRss;
+    private long mRss;
 
     /**
      * @see {@link #getTimestamp}
@@ -385,7 +384,7 @@
      * it's NOT the exact memory information prior to its death; and it'll be zero
      * if the process died before system had a chance to take the sample. </p>
      */
-    public int getPss() {
+    public long getPss() {
         return mPss;
     }
 
@@ -396,12 +395,13 @@
      * it's NOT the exact memory information prior to its death; and it'll be zero
      * if the process died before system had a chance to take the sample. </p>
      */
-    public int getRss() {
+    public long getRss() {
         return mRss;
     }
 
     /**
-     * The timestamp of the process's death, in milliseconds since the epoch.
+     * The timestamp of the process's death, in milliseconds since the epoch,
+     * as returned by {@link System#currentTimeMillis System.currentTimeMillis()}.
      */
     public long getTimestamp() {
         return mTimestamp;
@@ -409,6 +409,9 @@
 
     /**
      * The human readable description of the process's death, given by the system; could be null.
+     *
+     * <p class="note">Note: only intended to be human-readable and the system provides no
+     * guarantees that the format is stable across devices or Android releases.</p>
      */
     public @Nullable String getDescription() {
         return mDescription;
@@ -416,10 +419,7 @@
 
     /**
      * Return the user id of the record on a multi-user system.
-     *
-     * @hide
      */
-    @SystemApi
     public @NonNull UserHandle getUserHandle() {
         return UserHandle.of(UserHandle.getUserId(mRealUid));
     }
@@ -546,7 +546,7 @@
      *
      * @hide
      */
-    public void setPss(final int pss) {
+    public void setPss(final long pss) {
         mPss = pss;
     }
 
@@ -555,7 +555,7 @@
      *
      * @hide
      */
-    public void setRss(final int rss) {
+    public void setRss(final long rss) {
         mRss = rss;
     }
 
@@ -630,8 +630,8 @@
         dest.writeInt(mSubReason);
         dest.writeInt(mStatus);
         dest.writeInt(mImportance);
-        dest.writeInt(mPss);
-        dest.writeInt(mRss);
+        dest.writeLong(mPss);
+        dest.writeLong(mRss);
         dest.writeLong(mTimestamp);
         dest.writeString(mDescription);
     }
@@ -669,8 +669,8 @@
         mSubReason = in.readInt();
         mStatus = in.readInt();
         mImportance = in.readInt();
-        mPss = in.readInt();
-        mRss = in.readInt();
+        mPss = in.readLong();
+        mRss = in.readLong();
         mTimestamp = in.readLong();
         mDescription = in.readString();
     }
@@ -848,10 +848,10 @@
                     mImportance = proto.readInt(ApplicationExitInfoProto.IMPORTANCE);
                     break;
                 case (int) ApplicationExitInfoProto.PSS:
-                    mPss = proto.readInt(ApplicationExitInfoProto.PSS);
+                    mPss = proto.readLong(ApplicationExitInfoProto.PSS);
                     break;
                 case (int) ApplicationExitInfoProto.RSS:
-                    mRss = proto.readInt(ApplicationExitInfoProto.RSS);
+                    mRss = proto.readLong(ApplicationExitInfoProto.RSS);
                     break;
                 case (int) ApplicationExitInfoProto.TIMESTAMP:
                     mTimestamp = proto.readLong(ApplicationExitInfoProto.TIMESTAMP);
@@ -891,8 +891,8 @@
         result = 31 * result + mSubReason;
         result = 31 * result + mImportance;
         result = 31 * result + mStatus;
-        result = 31 * result + mPss;
-        result = 31 * result + mRss;
+        result = 31 * result + (int) mPss;
+        result = 31 * result + (int) mRss;
         result = 31 * result + Long.hashCode(mTimestamp);
         result = 31 * result + Objects.hashCode(mProcessName);
         result = 31 * result + Objects.hashCode(mDescription);
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index cd05e2c..e781ac6 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -3334,4 +3334,35 @@
             throw e.rethrowAsRuntimeException();
         }
     }
+
+    public void setMimeGroup(String mimeGroup, Set<String> mimeTypes) {
+        try {
+            mPM.setMimeGroup(mContext.getPackageName(), mimeGroup,
+                    new ArrayList<String>(mimeTypes));
+        } catch (RemoteException e) {
+            throw e.rethrowAsRuntimeException();
+        }
+    }
+
+    @Override
+    public void clearMimeGroup(String mimeGroup) {
+        try {
+            mPM.clearMimeGroup(mContext.getPackageName(), mimeGroup);
+        } catch (RemoteException e) {
+            throw e.rethrowAsRuntimeException();
+        }
+    }
+
+    @Override
+    public Set<String> getMimeGroup(String group) {
+        try {
+            List<String> mimeGroup = mPM.getMimeGroup(mContext.getPackageName(), group);
+            if (mimeGroup == null) {
+                return null;
+            }
+            return new ArraySet<>(mimeGroup);
+        } catch (RemoteException e) {
+            throw e.rethrowAsRuntimeException();
+        }
+    }
 }
diff --git a/core/java/android/app/AsyncNotedAppOp.java b/core/java/android/app/AsyncNotedAppOp.java
index 3febf71..6b1afda 100644
--- a/core/java/android/app/AsyncNotedAppOp.java
+++ b/core/java/android/app/AsyncNotedAppOp.java
@@ -256,10 +256,10 @@
     };
 
     @DataClass.Generated(
-            time = 1578516519372L,
+            time = 1581728574427L,
             codegenVersion = "1.0.14",
             sourceFile = "frameworks/base/core/java/android/app/AsyncNotedAppOp.java",
-            inputSignatures = "private final @android.annotation.IntRange(from=0L, to=94L) int mOpCode\nprivate final @android.annotation.IntRange(from=0L) int mNotingUid\nprivate final @android.annotation.Nullable java.lang.String mFeatureId\nprivate final @android.annotation.NonNull java.lang.String mMessage\nprivate final @android.annotation.IntRange(from=0L) long mTime\npublic @android.annotation.NonNull java.lang.String getOp()\nclass AsyncNotedAppOp extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genAidl=true, genHiddenConstructor=true)")
+            inputSignatures = "private final @android.annotation.IntRange(from=0L, to=96L) int mOpCode\nprivate final @android.annotation.IntRange(from=0L) int mNotingUid\nprivate final @android.annotation.Nullable java.lang.String mFeatureId\nprivate final @android.annotation.NonNull java.lang.String mMessage\nprivate final @android.annotation.IntRange(from=0L) long mTime\npublic @android.annotation.NonNull java.lang.String getOp()\nclass AsyncNotedAppOp extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genAidl=true, genHiddenConstructor=true)")
     @Deprecated
     private void __metadata() {}
 
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 57cd894..6b5bfda 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -1020,7 +1020,7 @@
     public void startActivityAsUser(Intent intent, Bundle options, UserHandle user) {
         try {
             ActivityTaskManager.getService().startActivityAsUser(
-                mMainThread.getApplicationThread(), getBasePackageName(), intent,
+                mMainThread.getApplicationThread(), getBasePackageName(), getFeatureId(), intent,
                 intent.resolveTypeIfNeeded(getContentResolver()),
                 null, null, 0, Intent.FLAG_ACTIVITY_NEW_TASK, null, options,
                 user.getIdentifier());
@@ -1102,8 +1102,8 @@
         String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                    mMainThread.getApplicationThread(), intent, resolvedType, null,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                    mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
                     Activity.RESULT_OK, null, null, null, AppOpsManager.OP_NONE, null, false, false,
                     getUserId());
         } catch (RemoteException e) {
@@ -1119,8 +1119,8 @@
                 : new String[] {receiverPermission};
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                    mMainThread.getApplicationThread(), intent, resolvedType, null,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                    mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
                     Activity.RESULT_OK, null, null, receiverPermissions, AppOpsManager.OP_NONE,
                     null, false, false, getUserId());
         } catch (RemoteException e) {
@@ -1134,8 +1134,8 @@
         String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                    mMainThread.getApplicationThread(), intent, resolvedType, null,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                    mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
                     Activity.RESULT_OK, null, null, receiverPermissions, AppOpsManager.OP_NONE,
                     null, false, false, getUserId());
         } catch (RemoteException e) {
@@ -1149,8 +1149,8 @@
         String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                    mMainThread.getApplicationThread(), intent, resolvedType, null,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                    mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
                     Activity.RESULT_OK, null, null, receiverPermissions, AppOpsManager.OP_NONE,
                     null, false, false, user.getIdentifier());
         } catch (RemoteException e) {
@@ -1166,8 +1166,8 @@
                 : new String[] {receiverPermission};
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                    mMainThread.getApplicationThread(), intent, resolvedType, null,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                    mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
                     Activity.RESULT_OK, null, null, receiverPermissions, AppOpsManager.OP_NONE,
                     options, false, false, getUserId());
         } catch (RemoteException e) {
@@ -1183,8 +1183,8 @@
                 : new String[] {receiverPermission};
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                    mMainThread.getApplicationThread(), intent, resolvedType, null,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                    mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
                     Activity.RESULT_OK, null, null, receiverPermissions, appOp, null, false, false,
                     getUserId());
         } catch (RemoteException e) {
@@ -1200,8 +1200,8 @@
                 : new String[] {receiverPermission};
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                    mMainThread.getApplicationThread(), intent, resolvedType, null,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                    mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
                     Activity.RESULT_OK, null, null, receiverPermissions, AppOpsManager.OP_NONE,
                     null, true, false, getUserId());
         } catch (RemoteException e) {
@@ -1263,8 +1263,8 @@
                 : new String[] {receiverPermission};
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                mMainThread.getApplicationThread(), intent, resolvedType, rd,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, rd,
                 initialCode, initialData, initialExtras, receiverPermissions, appOp,
                     options, true, false, getUserId());
         } catch (RemoteException e) {
@@ -1277,9 +1277,10 @@
         String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(mMainThread.getApplicationThread(),
-                    intent, resolvedType, null, Activity.RESULT_OK, null, null, null,
-                    AppOpsManager.OP_NONE, null, false, false, user.getIdentifier());
+            ActivityManager.getService().broadcastIntentWithFeature(
+                    mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
+                    Activity.RESULT_OK, null, null, null, AppOpsManager.OP_NONE, null, false, false,
+                    user.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -1299,8 +1300,8 @@
                 : new String[] {receiverPermission};
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                    mMainThread.getApplicationThread(), intent, resolvedType, null,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                    mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
                     Activity.RESULT_OK, null, null, receiverPermissions, AppOpsManager.OP_NONE,
                     options, false, false, user.getIdentifier());
         } catch (RemoteException e) {
@@ -1316,8 +1317,8 @@
                 : new String[] {receiverPermission};
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                    mMainThread.getApplicationThread(), intent, resolvedType, null,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                    mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
                     Activity.RESULT_OK, null, null, receiverPermissions, appOp, null, false, false,
                     user.getIdentifier());
         } catch (RemoteException e) {
@@ -1367,8 +1368,8 @@
                 : new String[] {receiverPermission};
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                mMainThread.getApplicationThread(), intent, resolvedType, rd,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, rd,
                 initialCode, initialData, initialExtras, receiverPermissions,
                     appOp, options, true, false, user.getIdentifier());
         } catch (RemoteException e) {
@@ -1408,8 +1409,8 @@
         String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                mMainThread.getApplicationThread(), intent, resolvedType, null,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
                 Activity.RESULT_OK, null, null, null, AppOpsManager.OP_NONE, null, false, true,
                 getUserId());
         } catch (RemoteException e) {
@@ -1444,8 +1445,8 @@
         String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                mMainThread.getApplicationThread(), intent, resolvedType, rd,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, rd,
                 initialCode, initialData, initialExtras, null,
                     AppOpsManager.OP_NONE, null, true, true, getUserId());
         } catch (RemoteException e) {
@@ -1476,8 +1477,8 @@
         String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                mMainThread.getApplicationThread(), intent, resolvedType, null,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
                 Activity.RESULT_OK, null, null, null, AppOpsManager.OP_NONE, null, false, true,
                     user.getIdentifier());
         } catch (RemoteException e) {
@@ -1491,8 +1492,8 @@
         String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                mMainThread.getApplicationThread(), intent, resolvedType, null,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, null,
                 Activity.RESULT_OK, null, null, null, AppOpsManager.OP_NONE, options, false, true,
                 user.getIdentifier());
         } catch (RemoteException e) {
@@ -1526,8 +1527,8 @@
         String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
         try {
             intent.prepareToLeaveProcess(this);
-            ActivityManager.getService().broadcastIntent(
-                mMainThread.getApplicationThread(), intent, resolvedType, rd,
+            ActivityManager.getService().broadcastIntentWithFeature(
+                mMainThread.getApplicationThread(), getFeatureId(), intent, resolvedType, rd,
                 initialCode, initialData, initialExtras, null,
                     AppOpsManager.OP_NONE, null, true, true, user.getIdentifier());
         } catch (RemoteException e) {
@@ -1612,9 +1613,9 @@
             }
         }
         try {
-            final Intent intent = ActivityManager.getService().registerReceiver(
-                    mMainThread.getApplicationThread(), mBasePackageName, rd, filter,
-                    broadcastPermission, userId, flags);
+            final Intent intent = ActivityManager.getService().registerReceiverWithFeature(
+                    mMainThread.getApplicationThread(), mBasePackageName, getFeatureId(), rd,
+                    filter, broadcastPermission, userId, flags);
             if (intent != null) {
                 intent.setExtrasClassLoader(getClassLoader());
                 intent.prepareToEnterProcess();
@@ -1687,9 +1688,9 @@
             validateServiceIntent(service);
             service.prepareToLeaveProcess(this);
             ComponentName cn = ActivityManager.getService().startService(
-                mMainThread.getApplicationThread(), service, service.resolveTypeIfNeeded(
-                            getContentResolver()), requireForeground,
-                            getOpPackageName(), user.getIdentifier());
+                    mMainThread.getApplicationThread(), service,
+                    service.resolveTypeIfNeeded(getContentResolver()), requireForeground,
+                    getOpPackageName(), getFeatureId(), user.getIdentifier());
             if (cn != null) {
                 if (cn.getPackageName().equals("!")) {
                     throw new SecurityException(
diff --git a/core/java/android/app/DexLoadReporter.java b/core/java/android/app/DexLoadReporter.java
index 229bee5..5bc9992 100644
--- a/core/java/android/app/DexLoadReporter.java
+++ b/core/java/android/app/DexLoadReporter.java
@@ -28,9 +28,8 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -87,50 +86,32 @@
     }
 
     @Override
-    public void report(List<ClassLoader> classLoadersChain, List<String> classPaths) {
-        if (classLoadersChain.size() != classPaths.size()) {
-            Slog.wtf(TAG, "Bad call to DexLoadReporter: argument size mismatch");
-            return;
-        }
-        if (classPaths.isEmpty()) {
-            Slog.wtf(TAG, "Bad call to DexLoadReporter: empty dex paths");
-            return;
-        }
-
-        // The first element of classPaths is the list of dex files that should be registered.
-        // The classpath is represented as a list of dex files separated by File.pathSeparator.
-        String[] dexPathsForRegistration = classPaths.get(0).split(File.pathSeparator);
-        if (dexPathsForRegistration.length == 0) {
-            // No dex files to register.
+    public void report(Map<String, String> classLoaderContextMap) {
+        if (classLoaderContextMap.isEmpty()) {
+            Slog.wtf(TAG, "Bad call to DexLoadReporter: empty classLoaderContextMap");
             return;
         }
 
         // Notify the package manager about the dex loads unconditionally.
         // The load might be for either a primary or secondary dex file.
-        notifyPackageManager(classLoadersChain, classPaths);
+        notifyPackageManager(classLoaderContextMap);
         // Check for secondary dex files and register them for profiling if possible.
         // Note that we only register the dex paths belonging to the first class loader.
-        registerSecondaryDexForProfiling(dexPathsForRegistration);
+        registerSecondaryDexForProfiling(classLoaderContextMap.keySet());
     }
 
-    private void notifyPackageManager(List<ClassLoader> classLoadersChain,
-            List<String> classPaths) {
+    private void notifyPackageManager(Map<String, String> classLoaderContextMap) {
         // Get the class loader names for the binder call.
-        List<String> classLoadersNames = new ArrayList<>(classPaths.size());
-        for (ClassLoader classLoader : classLoadersChain) {
-            classLoadersNames.add(classLoader.getClass().getName());
-        }
         String packageName = ActivityThread.currentPackageName();
         try {
-            ActivityThread.getPackageManager().notifyDexLoad(
-                    packageName, classLoadersNames, classPaths,
-                    VMRuntime.getRuntime().vmInstructionSet());
+            ActivityThread.getPackageManager().notifyDexLoad(packageName,
+                    classLoaderContextMap, VMRuntime.getRuntime().vmInstructionSet());
         } catch (RemoteException re) {
             Slog.e(TAG, "Failed to notify PM about dex load for package " + packageName, re);
         }
     }
 
-    private void registerSecondaryDexForProfiling(String[] dexPaths) {
+    private void registerSecondaryDexForProfiling(Set<String> dexPaths) {
         if (!SystemProperties.getBoolean("dalvik.vm.dexopt.secondary", false)) {
             return;
         }
diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index cb6a476..83fa9d7 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -104,25 +104,38 @@
     // Special low-level communication with activity manager.
     void handleApplicationCrash(in IBinder app,
             in ApplicationErrorReport.ParcelableCrashInfo crashInfo);
-    @UnsupportedAppUsage
+    /** @deprecated Use {@link #startActivityWithFeature} instead */
+    @UnsupportedAppUsage(maxTargetSdk=29, publicAlternatives="Use {@link android.content.Context#startActivity(android.content.Intent)} instead")
     int startActivity(in IApplicationThread caller, in String callingPackage, in Intent intent,
             in String resolvedType, in IBinder resultTo, in String resultWho, int requestCode,
             int flags, in ProfilerInfo profilerInfo, in Bundle options);
+    int startActivityWithFeature(in IApplicationThread caller, in String callingPackage,
+            in String callingFeatureId, in Intent intent, in String resolvedType,
+            in IBinder resultTo, in String resultWho, int requestCode, int flags,
+            in ProfilerInfo profilerInfo, in Bundle options);
     @UnsupportedAppUsage
     void unhandledBack();
     @UnsupportedAppUsage
     boolean finishActivity(in IBinder token, int code, in Intent data, int finishTask);
-    @UnsupportedAppUsage
+    @UnsupportedAppUsage(maxTargetSdk=29, publicAlternatives="Use {@link android.content.Context#registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter)} instead")
     Intent registerReceiver(in IApplicationThread caller, in String callerPackage,
             in IIntentReceiver receiver, in IntentFilter filter,
             in String requiredPermission, int userId, int flags);
+    Intent registerReceiverWithFeature(in IApplicationThread caller, in String callerPackage,
+            in String callingFeatureId, in IIntentReceiver receiver, in IntentFilter filter,
+            in String requiredPermission, int userId, int flags);
     @UnsupportedAppUsage
     void unregisterReceiver(in IIntentReceiver receiver);
-    @UnsupportedAppUsage
+    /** @deprecated Use {@link #broadcastIntentWithFeature} instead */
+    @UnsupportedAppUsage(maxTargetSdk=29, publicAlternatives="Use {@link android.content.Context#sendBroadcast(android.content.Intent)} instead")
     int broadcastIntent(in IApplicationThread caller, in Intent intent,
             in String resolvedType, in IIntentReceiver resultTo, int resultCode,
             in String resultData, in Bundle map, in String[] requiredPermissions,
             int appOp, in Bundle options, boolean serialized, boolean sticky, int userId);
+    int broadcastIntentWithFeature(in IApplicationThread caller, in String callingFeatureId,
+            in Intent intent, in String resolvedType, in IIntentReceiver resultTo, int resultCode,
+            in String resultData, in Bundle map, in String[] requiredPermissions,
+            int appOp, in Bundle options, boolean serialized, boolean sticky, int userId);
     void unbroadcastIntent(in IApplicationThread caller, in Intent intent, int userId);
     @UnsupportedAppUsage
     oneway void finishReceiver(in IBinder who, int resultCode, in String resultData, in Bundle map,
@@ -145,7 +158,8 @@
     boolean refContentProvider(in IBinder connection, int stableDelta, int unstableDelta);
     PendingIntent getRunningServiceControlPanel(in ComponentName service);
     ComponentName startService(in IApplicationThread caller, in Intent service,
-            in String resolvedType, boolean requireForeground, in String callingPackage, int userId);
+            in String resolvedType, boolean requireForeground, in String callingPackage,
+            in String callingFeatureId, int userId);
     @UnsupportedAppUsage
     int stopService(in IApplicationThread caller, in Intent service,
             in String resolvedType, int userId);
@@ -226,10 +240,14 @@
     ParceledListSlice getRecentTasks(int maxNum, int flags, int userId);
     @UnsupportedAppUsage
     oneway void serviceDoneExecuting(in IBinder token, int type, int startId, int res);
-    @UnsupportedAppUsage
+    /** @deprecated  Use {@link #getIntentSenderWithFeature} instead */
+    @UnsupportedAppUsage(maxTargetSdk=29, publicAlternatives="Use {@link PendingIntent#getIntentSender()} instead")
     IIntentSender getIntentSender(int type, in String packageName, in IBinder token,
             in String resultWho, int requestCode, in Intent[] intents, in String[] resolvedTypes,
             int flags, in Bundle options, int userId);
+    IIntentSender getIntentSenderWithFeature(int type, in String packageName, in String featureId,
+            in IBinder token, in String resultWho, int requestCode, in Intent[] intents,
+            in String[] resolvedTypes, int flags, in Bundle options, int userId);
     void cancelIntentSender(in IIntentSender sender);
     String getPackageForIntentSender(in IIntentSender sender);
     void registerIntentSenderCancelListener(in IIntentSender sender, in IResultReceiver receiver);
@@ -355,11 +373,16 @@
     boolean isIntentSenderAnActivity(in IIntentSender sender);
     boolean isIntentSenderAForegroundService(in IIntentSender sender);
     boolean isIntentSenderABroadcast(in IIntentSender sender);
-    @UnsupportedAppUsage
+    /** @deprecated Use {@link startActivityAsUserWithFeature} instead */
+    @UnsupportedAppUsage(maxTargetSdk=29, publicAlternatives="Use {@code android.content.Context#createContextAsUser(android.os.UserHandle, int)} and {@link android.content.Context#startActivity(android.content.Intent)} instead")
     int startActivityAsUser(in IApplicationThread caller, in String callingPackage,
             in Intent intent, in String resolvedType, in IBinder resultTo, in String resultWho,
             int requestCode, int flags, in ProfilerInfo profilerInfo,
             in Bundle options, int userId);
+    int startActivityAsUserWithFeature(in IApplicationThread caller, in String callingPackage,
+            in String callingFeatureId, in Intent intent, in String resolvedType,
+            in IBinder resultTo, in String resultWho, int requestCode, int flags,
+            in ProfilerInfo profilerInfo, in Bundle options, int userId);
     @UnsupportedAppUsage
     int stopUser(int userid, boolean force, in IStopUserCallback callback);
     /**
diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl
index be2f144..3c475c1 100644
--- a/core/java/android/app/IActivityTaskManager.aidl
+++ b/core/java/android/app/IActivityTaskManager.aidl
@@ -85,16 +85,17 @@
  * {@hide}
  */
 interface IActivityTaskManager {
-    int startActivity(in IApplicationThread caller, in String callingPackage, in Intent intent,
-            in String resolvedType, in IBinder resultTo, in String resultWho, int requestCode,
+    int startActivity(in IApplicationThread caller, in String callingPackage,
+            in String callingFeatureId, in Intent intent, in String resolvedType,
+            in IBinder resultTo, in String resultWho, int requestCode,
             int flags, in ProfilerInfo profilerInfo, in Bundle options);
     int startActivities(in IApplicationThread caller, in String callingPackage,
-            in Intent[] intents, in String[] resolvedTypes, in IBinder resultTo,
-            in Bundle options, int userId);
+            in String callingFeatureId, in Intent[] intents, in String[] resolvedTypes,
+            in IBinder resultTo, in Bundle options, int userId);
     int startActivityAsUser(in IApplicationThread caller, in String callingPackage,
-            in Intent intent, in String resolvedType, in IBinder resultTo, in String resultWho,
-            int requestCode, int flags, in ProfilerInfo profilerInfo,
-            in Bundle options, int userId);
+            in String callingFeatureId, in Intent intent, in String resolvedType,
+            in IBinder resultTo, in String resultWho, int requestCode, int flags,
+            in ProfilerInfo profilerInfo, in Bundle options, int userId);
     boolean startNextMatchingActivity(in IBinder callingActivity,
             in Intent intent, in Bundle options);
     int startActivityIntentSender(in IApplicationThread caller,
@@ -102,19 +103,19 @@
             in String resolvedType, in IBinder resultTo, in String resultWho, int requestCode,
             int flagsMask, int flagsValues, in Bundle options);
     WaitResult startActivityAndWait(in IApplicationThread caller, in String callingPackage,
-            in Intent intent, in String resolvedType, in IBinder resultTo, in String resultWho,
-            int requestCode, int flags, in ProfilerInfo profilerInfo, in Bundle options,
-            int userId);
+            in String callingFeatureId, in Intent intent, in String resolvedType,
+            in IBinder resultTo, in String resultWho, int requestCode, int flags,
+            in ProfilerInfo profilerInfo, in Bundle options, int userId);
     int startActivityWithConfig(in IApplicationThread caller, in String callingPackage,
-            in Intent intent, in String resolvedType, in IBinder resultTo, in String resultWho,
-            int requestCode, int startFlags, in Configuration newConfig,
-            in Bundle options, int userId);
-    int startVoiceActivity(in String callingPackage, int callingPid, int callingUid,
-            in Intent intent, in String resolvedType, in IVoiceInteractionSession session,
-            in IVoiceInteractor interactor, int flags, in ProfilerInfo profilerInfo,
-            in Bundle options, int userId);
-    int startAssistantActivity(in String callingPackage, int callingPid, int callingUid,
-            in Intent intent, in String resolvedType, in Bundle options, int userId);
+            in String callingFeatureId, in Intent intent, in String resolvedType,
+            in IBinder resultTo, in String resultWho, int requestCode, int startFlags,
+            in Configuration newConfig, in Bundle options, int userId);
+    int startVoiceActivity(in String callingPackage, in String callingFeatureId, int callingPid,
+            int callingUid, in Intent intent, in String resolvedType,
+            in IVoiceInteractionSession session, in IVoiceInteractor interactor, int flags,
+            in ProfilerInfo profilerInfo, in Bundle options, int userId);
+    int startAssistantActivity(in String callingPackage, in String callingFeatureId, int callingPid,
+            int callingUid, in Intent intent, in String resolvedType, in Bundle options, int userId);
     void startRecentsActivity(in Intent intent, in IAssistDataReceiver assistDataReceiver,
             in IRecentsAnimationRunner recentsAnimationRunner);
     int startActivityFromRecents(int taskId, in Bundle options);
@@ -314,11 +315,6 @@
     void positionTaskInStack(int taskId, int stackId, int position);
     void reportSizeConfigurations(in IBinder token, in int[] horizontalSizeConfiguration,
             in int[] verticalSizeConfigurations, in int[] smallestWidthConfigurations);
-    /**
-     * Dismisses split-screen multi-window mode.
-     * {@param toTop} If true the current primary split-screen stack will be placed or left on top.
-     */
-    void dismissSplitScreenMode(boolean toTop);
 
     /**
      * Dismisses PiP
diff --git a/core/java/android/app/IAppTask.aidl b/core/java/android/app/IAppTask.aidl
index 3ce7190..f41d705 100644
--- a/core/java/android/app/IAppTask.aidl
+++ b/core/java/android/app/IAppTask.aidl
@@ -27,7 +27,7 @@
     @UnsupportedAppUsage
     ActivityManager.RecentTaskInfo getTaskInfo();
     void moveToFront(in IApplicationThread appThread, in String callingPackage);
-    int startActivity(IBinder whoThread, String callingPackage,
+    int startActivity(IBinder whoThread, String callingPackage, String callingFeatureId,
             in Intent intent, String resolvedType, in Bundle options);
     void setExcludeFromRecents(boolean exclude);
 }
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 16c0910..948546b 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -88,6 +88,8 @@
     void createNotificationChannelGroups(String pkg, in ParceledListSlice channelGroupList);
     void createNotificationChannels(String pkg, in ParceledListSlice channelsList);
     void createNotificationChannelsForPackage(String pkg, int uid, in ParceledListSlice channelsList);
+    ParceledListSlice getConversations(boolean onlyImportant);
+    ParceledListSlice getConversationsForPackage(String pkg, int uid);
     ParceledListSlice getNotificationChannelGroupsForPackage(String pkg, int uid, boolean includeDeleted);
     NotificationChannelGroup getNotificationChannelGroupForPackage(String groupId, String pkg, int uid);
     NotificationChannelGroup getPopulatedNotificationChannelGroupForPackage(String pkg, int uid, String groupId, boolean includeDeleted);
@@ -96,7 +98,7 @@
     NotificationChannel getNotificationChannel(String callingPkg, int userId, String pkg, String channelId);
     NotificationChannel getConversationNotificationChannel(String callingPkg, int userId, String pkg, String channelId, boolean returnParentIfNoConversationChannel, String conversationId);
     void createConversationNotificationChannelForPackage(String pkg, int uid, String triggeringKey, in NotificationChannel parentChannel, String conversationId);
-    NotificationChannel getNotificationChannelForPackage(String pkg, int uid, String channelId, boolean includeDeleted);
+    NotificationChannel getNotificationChannelForPackage(String pkg, int uid, String channelId, String conversationId, boolean includeDeleted);
     void deleteNotificationChannel(String pkg, String channelId);
     void deleteConversationNotificationChannels(String pkg, int uid, String conversationId);
     ParceledListSlice getNotificationChannels(String callingPkg, String targetPkg, int userId);
@@ -113,6 +115,7 @@
     int getAppsBypassingDndCount(int uid);
     ParceledListSlice getNotificationChannelsBypassingDnd(String pkg, int userId);
     boolean isPackagePaused(String pkg);
+    void deleteNotificationHistoryItem(String pkg, int uid, long postedTime);
 
     void silenceNotificationSound();
 
@@ -121,7 +124,7 @@
     @UnsupportedAppUsage
     StatusBarNotification[] getActiveNotifications(String callingPkg);
     @UnsupportedAppUsage
-    StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count);
+    StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count, boolean includeSnoozed);
 
     NotificationHistory getNotificationHistory(String callingPkg);
 
@@ -160,6 +163,7 @@
     void applyAdjustmentFromAssistant(in INotificationListener token, in Adjustment adjustment);
     void applyAdjustmentsFromAssistant(in INotificationListener token, in List<Adjustment> adjustments);
     void unsnoozeNotificationFromAssistant(in INotificationListener token, String key);
+    void unsnoozeNotificationFromSystemListener(in INotificationListener token, String key);
 
     ComponentName getEffectsSuppressor();
     boolean matchesCallFilter(in Bundle extras);
diff --git a/core/java/android/app/ITaskOrganizerController.aidl b/core/java/android/app/ITaskOrganizerController.aidl
index 168f782..9d6c3d6 100644
--- a/core/java/android/app/ITaskOrganizerController.aidl
+++ b/core/java/android/app/ITaskOrganizerController.aidl
@@ -31,8 +31,19 @@
      */
     void registerTaskOrganizer(ITaskOrganizer organizer, int windowingMode);
 
-    /** Apply multiple WindowContainer operations at once. */
-    void applyContainerTransaction(in WindowContainerTransaction t);
+    /**
+     * Apply multiple WindowContainer operations at once.
+     * @param organizer If non-null this transaction will use the synchronization
+     *        scheme described in BLASTSyncEngine.java. The SurfaceControl transaction
+     *        containing the effects of this WindowContainer transaction will be passed
+     *        to the organizers Transaction ready callback. If null the transaction
+     *        will apply with non particular synchronization constraints (other than
+     *        it will all apply at once).
+     * @return If organizer was non-null returns an ID for the sync operation which will
+     *         later be passed to transactionReady. This lets TaskOrganizer implementations
+     *         differentiate overlapping sync operations.
+     */
+    int applyContainerTransaction(in WindowContainerTransaction t, ITaskOrganizer organizer);
 
     /** Creates a persistent root task in WM for a particular windowing-mode. */
     ActivityManager.RunningTaskInfo createRootTask(int displayId, int windowingMode);
@@ -40,6 +51,13 @@
     /** Deletes a persistent root task in WM */
     boolean deleteRootTask(IWindowContainer task);
 
+    /** Gets direct child tasks (ordered from top-to-bottom) */
+    List<ActivityManager.RunningTaskInfo> getChildTasks(in IWindowContainer parent,
+            in int[] activityTypes);
+
+    /** Gets all root tasks on a display (ordered from top-to-bottom) */
+    List<ActivityManager.RunningTaskInfo> getRootTasks(int displayId, in int[] activityTypes);
+
     /** Get the root task which contains the current ime target */
     IWindowContainer getImeTarget(int display);
 
diff --git a/core/java/android/app/ITaskStackListener.aidl b/core/java/android/app/ITaskStackListener.aidl
index 06288c0..37bdda0 100644
--- a/core/java/android/app/ITaskStackListener.aidl
+++ b/core/java/android/app/ITaskStackListener.aidl
@@ -204,4 +204,12 @@
      * @param frozen if true, Recents Tasks list is currently frozen, false otherwise
      */
     void onRecentTaskListFrozenChanged(boolean frozen);
+
+    /**
+     * Called when a task gets or loses focus.
+     *
+     * @param taskId id of the task.
+     * @param {@code true} if the task got focus, {@code false} if it lost it.
+     */
+    void onTaskFocusChanged(int taskId, boolean focused);
 }
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index 62c905d..18932c6 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -1721,7 +1721,7 @@
             intent.migrateExtraStreamToClipData();
             intent.prepareToLeaveProcess(who);
             int result = ActivityTaskManager.getService()
-                .startActivity(whoThread, who.getBasePackageName(), intent,
+                .startActivity(whoThread, who.getBasePackageName(), who.getFeatureId(), intent,
                         intent.resolveTypeIfNeeded(who.getContentResolver()),
                         token, target != null ? target.mEmbeddedID : null,
                         requestCode, 0, null, options);
@@ -1794,8 +1794,8 @@
                 resolvedTypes[i] = intents[i].resolveTypeIfNeeded(who.getContentResolver());
             }
             int result = ActivityTaskManager.getService()
-                .startActivities(whoThread, who.getBasePackageName(), intents, resolvedTypes,
-                        token, options, userId);
+                .startActivities(whoThread, who.getBasePackageName(), who.getFeatureId(), intents,
+                        resolvedTypes, token, options, userId);
             checkStartActivityResult(result, intents[0]);
             return result;
         } catch (RemoteException e) {
@@ -1861,7 +1861,7 @@
             intent.migrateExtraStreamToClipData();
             intent.prepareToLeaveProcess(who);
             int result = ActivityTaskManager.getService()
-                .startActivity(whoThread, who.getBasePackageName(), intent,
+                .startActivity(whoThread, who.getBasePackageName(), who.getFeatureId(), intent,
                         intent.resolveTypeIfNeeded(who.getContentResolver()),
                         token, target, requestCode, 0, null, options);
             checkStartActivityResult(result, intent);
@@ -1928,8 +1928,8 @@
             intent.migrateExtraStreamToClipData();
             intent.prepareToLeaveProcess(who);
             int result = ActivityTaskManager.getService()
-                .startActivityAsUser(whoThread, who.getBasePackageName(), intent,
-                        intent.resolveTypeIfNeeded(who.getContentResolver()),
+                .startActivityAsUser(whoThread, who.getBasePackageName(), who.getFeatureId(),
+                        intent, intent.resolveTypeIfNeeded(who.getContentResolver()),
                         token, resultWho,
                         requestCode, 0, null, options, user.getIdentifier());
             checkStartActivityResult(result, intent);
@@ -2022,7 +2022,8 @@
             intent.migrateExtraStreamToClipData();
             intent.prepareToLeaveProcess(who);
             int result = appTask.startActivity(whoThread.asBinder(), who.getBasePackageName(),
-                    intent, intent.resolveTypeIfNeeded(who.getContentResolver()), options);
+                    who.getFeatureId(), intent,
+                    intent.resolveTypeIfNeeded(who.getContentResolver()), options);
             checkStartActivityResult(result, intent);
         } catch (RemoteException e) {
             throw new RuntimeException("Failure from system", e);
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 576b56f..32e7d84 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -6046,21 +6046,18 @@
 
         /**
          * Removes RemoteViews that were created for compatibility from {@param n}, if they did not
-         * change. Also removes extenders on low ram devices, as
-         * {@link android.service.notification.NotificationListenerService} services are disabled.
+         * change.
          *
          * @return {@param n}, if no stripping is needed, otherwise a stripped clone of {@param n}.
          *
          * @hide
          */
-        public static Notification maybeCloneStrippedForDelivery(Notification n, boolean isLowRam,
-                Context context) {
+        public static Notification maybeCloneStrippedForDelivery(Notification n) {
             String templateClass = n.extras.getString(EXTRA_TEMPLATE);
 
             // Only strip views for known Styles because we won't know how to
             // re-create them otherwise.
-            if (!isLowRam
-                    && !TextUtils.isEmpty(templateClass)
+            if (!TextUtils.isEmpty(templateClass)
                     && getNotificationStyleClass(templateClass) == null) {
                 return n;
             }
@@ -6077,8 +6074,7 @@
                             n.headsUpContentView.getSequenceNumber();
 
             // Nothing to do here, no need to clone.
-            if (!isLowRam
-                    && !stripContentView && !stripBigContentView && !stripHeadsUpContentView) {
+            if (!stripContentView && !stripBigContentView && !stripHeadsUpContentView) {
                 return n;
             }
 
@@ -6095,15 +6091,6 @@
                 clone.headsUpContentView = null;
                 clone.extras.remove(EXTRA_REBUILD_HEADS_UP_CONTENT_VIEW_ACTION_COUNT);
             }
-            if (isLowRam) {
-                String[] allowedServices = context.getResources().getStringArray(
-                        R.array.config_allowedManagedServicesOnLowRamDevices);
-                if (allowedServices.length == 0) {
-                    clone.extras.remove(Notification.TvExtender.EXTRA_TV_EXTENDER);
-                    clone.extras.remove(WearableExtender.EXTRA_WEARABLE_EXTENSIONS);
-                    clone.extras.remove(CarExtender.EXTRA_CAR_EXTENDER);
-                }
-            }
             return clone;
         }
 
diff --git a/core/java/android/app/NotificationHistory.java b/core/java/android/app/NotificationHistory.java
index 909a476..8c2cc94 100644
--- a/core/java/android/app/NotificationHistory.java
+++ b/core/java/android/app/NotificationHistory.java
@@ -21,6 +21,7 @@
 import android.graphics.drawable.Icon;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.text.TextUtils;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -51,6 +52,7 @@
         private String mTitle;
         private String mText;
         private Icon mIcon;
+        private String mConversationId;
 
         private HistoricalNotification() {}
 
@@ -94,6 +96,10 @@
             return mPackage + "|" + mUid + "|" + mPostedTimeMs;
         }
 
+        public String getConversationId() {
+            return mConversationId;
+        }
+
         @Override
         public String toString() {
             return "HistoricalNotification{" +
@@ -104,6 +110,7 @@
                     ", mTitle='" + mTitle + '\'' +
                     ", mText='" + mText + '\'' +
                     ", mIcon=" + mIcon +
+                    ", mConversationId=" + mConversationId +
                     '}';
         }
 
@@ -123,6 +130,7 @@
                     Objects.equals(getChannelId(), that.getChannelId()) &&
                     Objects.equals(getTitle(), that.getTitle()) &&
                     Objects.equals(getText(), that.getText()) &&
+                    Objects.equals(getConversationId(), that.getConversationId()) &&
                     iconsAreSame;
         }
 
@@ -130,7 +138,7 @@
         public int hashCode() {
             return Objects.hash(getPackage(), getChannelName(), getChannelId(), getUid(),
                     getUserId(),
-                    getPostedTimeMs(), getTitle(), getText(), getIcon());
+                    getPostedTimeMs(), getTitle(), getText(), getIcon(), getConversationId());
         }
 
         public static final class Builder {
@@ -143,6 +151,7 @@
             private String mTitle;
             private String mText;
             private Icon mIcon;
+            private String mConversationId;
 
             public Builder() {}
 
@@ -191,6 +200,11 @@
                 return this;
             }
 
+            public Builder setConversationId(String conversationId) {
+                mConversationId = conversationId;
+                return this;
+            }
+
             public HistoricalNotification build() {
                 HistoricalNotification n = new HistoricalNotification();
                 n.mPackage = mPackage;
@@ -202,6 +216,7 @@
                 n.mTitle = mTitle;
                 n.mText = mText;
                 n.mIcon = mIcon;
+                n.mConversationId = mConversationId;
                 return n;
             }
         }
@@ -299,6 +314,9 @@
             mStringsToWrite.add(notification.getPackage());
             mStringsToWrite.add(notification.getChannelName());
             mStringsToWrite.add(notification.getChannelId());
+            if (!TextUtils.isEmpty(notification.getConversationId())) {
+                mStringsToWrite.add(notification.getConversationId());
+            }
         }
     }
 
@@ -346,6 +364,46 @@
     }
 
     /**
+     * Removes an individual historical notification and regenerates the string pool
+     */
+    public boolean removeNotificationFromWrite(String packageName, long postedTime) {
+        boolean removed = false;
+        for (int i = mNotificationsToWrite.size() - 1; i >= 0; i--) {
+            HistoricalNotification hn = mNotificationsToWrite.get(i);
+            if (packageName.equals(hn.getPackage())
+                    && postedTime == hn.getPostedTimeMs()) {
+                removed = true;
+                mNotificationsToWrite.remove(i);
+            }
+        }
+        if (removed) {
+            poolStringsFromNotifications();
+        }
+
+        return removed;
+    }
+
+    /**
+     * Removes all notifications from a conversation and regenerates the string pool
+     */
+    public boolean removeConversationFromWrite(String packageName, String conversationId) {
+        boolean removed = false;
+        for (int i = mNotificationsToWrite.size() - 1; i >= 0; i--) {
+            HistoricalNotification hn = mNotificationsToWrite.get(i);
+            if (packageName.equals(hn.getPackage())
+                    && conversationId.equals(hn.getConversationId())) {
+                removed = true;
+                mNotificationsToWrite.remove(i);
+            }
+        }
+        if (removed) {
+            poolStringsFromNotifications();
+        }
+
+        return removed;
+    }
+
+    /**
      * Gets pooled strings in order to write them to disk
      */
     public @NonNull String[] getPooledStringsToWrite() {
@@ -403,9 +461,17 @@
             channelIdIndex = -1;
         }
 
+        final int conversationIdIndex;
+        if (!TextUtils.isEmpty(notification.getConversationId())) {
+            conversationIdIndex = findStringIndex(notification.getConversationId());
+        } else {
+            conversationIdIndex = -1;
+        }
+
         p.writeInt(packageIndex);
         p.writeInt(channelNameIndex);
         p.writeInt(channelIdIndex);
+        p.writeInt(conversationIdIndex);
         p.writeInt(notification.getUid());
         p.writeInt(notification.getUserId());
         p.writeLong(notification.getPostedTimeMs());
@@ -441,6 +507,13 @@
             notificationOut.setChannelId(null);
         }
 
+        final int conversationIdIndex = p.readInt();
+        if (conversationIdIndex >= 0) {
+            notificationOut.setConversationId(mStringPool[conversationIdIndex]);
+        } else {
+            notificationOut.setConversationId(null);
+        }
+
         notificationOut.setUid(p.readInt());
         notificationOut.setUserId(p.readInt());
         notificationOut.setPostedTimeMs(p.readLong());
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 528b508..88edb05 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -592,10 +592,7 @@
         }
 
         notification.reduceImageSizes(mContext);
-
-        ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
-        boolean isLowRam = am.isLowRamDevice();
-        return Builder.maybeCloneStrippedForDelivery(notification, isLowRam, mContext);
+        return Builder.maybeCloneStrippedForDelivery(notification);
     }
 
     private void fixLegacySmallIcon(Notification n, String pkg) {
diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java
index b8348c7..f68c929 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -354,8 +354,8 @@
             intent.migrateExtraStreamToClipData();
             intent.prepareToLeaveProcess(context);
             IIntentSender target =
-                ActivityManager.getService().getIntentSender(
-                    ActivityManager.INTENT_SENDER_ACTIVITY, packageName,
+                ActivityManager.getService().getIntentSenderWithFeature(
+                    ActivityManager.INTENT_SENDER_ACTIVITY, packageName, context.getFeatureId(),
                     null, null, requestCode, new Intent[] { intent },
                     resolvedType != null ? new String[] { resolvedType } : null,
                     flags, options, context.getUserId());
@@ -380,8 +380,8 @@
             intent.migrateExtraStreamToClipData();
             intent.prepareToLeaveProcess(context);
             IIntentSender target =
-                ActivityManager.getService().getIntentSender(
-                    ActivityManager.INTENT_SENDER_ACTIVITY, packageName,
+                ActivityManager.getService().getIntentSenderWithFeature(
+                    ActivityManager.INTENT_SENDER_ACTIVITY, packageName, context.getFeatureId(),
                     null, null, requestCode, new Intent[] { intent },
                     resolvedType != null ? new String[] { resolvedType } : null,
                     flags, options, user.getIdentifier());
@@ -497,8 +497,8 @@
         }
         try {
             IIntentSender target =
-                ActivityManager.getService().getIntentSender(
-                    ActivityManager.INTENT_SENDER_ACTIVITY, packageName,
+                ActivityManager.getService().getIntentSenderWithFeature(
+                    ActivityManager.INTENT_SENDER_ACTIVITY, packageName, context.getFeatureId(),
                     null, null, requestCode, intents, resolvedTypes, flags, options,
                     context.getUserId());
             return target != null ? new PendingIntent(target) : null;
@@ -523,8 +523,8 @@
         }
         try {
             IIntentSender target =
-                ActivityManager.getService().getIntentSender(
-                    ActivityManager.INTENT_SENDER_ACTIVITY, packageName,
+                ActivityManager.getService().getIntentSenderWithFeature(
+                    ActivityManager.INTENT_SENDER_ACTIVITY, packageName, context.getFeatureId(),
                     null, null, requestCode, intents, resolvedTypes,
                     flags, options, user.getIdentifier());
             return target != null ? new PendingIntent(target) : null;
@@ -575,8 +575,8 @@
         try {
             intent.prepareToLeaveProcess(context);
             IIntentSender target =
-                ActivityManager.getService().getIntentSender(
-                    ActivityManager.INTENT_SENDER_BROADCAST, packageName,
+                ActivityManager.getService().getIntentSenderWithFeature(
+                    ActivityManager.INTENT_SENDER_BROADCAST, packageName, context.getFeatureId(),
                     null, null, requestCode, new Intent[] { intent },
                     resolvedType != null ? new String[] { resolvedType } : null,
                     flags, null, userHandle.getIdentifier());
@@ -654,8 +654,8 @@
         try {
             intent.prepareToLeaveProcess(context);
             IIntentSender target =
-                ActivityManager.getService().getIntentSender(
-                    serviceKind, packageName,
+                ActivityManager.getService().getIntentSenderWithFeature(
+                    serviceKind, packageName, context.getFeatureId(),
                     null, null, requestCode, new Intent[] { intent },
                     resolvedType != null ? new String[] { resolvedType } : null,
                     flags, null, context.getUserId());
diff --git a/core/java/android/app/PictureInPictureParams.java b/core/java/android/app/PictureInPictureParams.java
index bfd966c5..67d94de 100644
--- a/core/java/android/app/PictureInPictureParams.java
+++ b/core/java/android/app/PictureInPictureParams.java
@@ -247,6 +247,14 @@
         return mSourceRectHint != null && !mSourceRectHint.isEmpty();
     }
 
+    /**
+     * @return True if no parameters are set
+     * @hide
+     */
+    public boolean empty() {
+        return !hasSourceBoundsHint() && !hasSetActions() && !hasSetAspectRatio();
+    }
+
     @Override
     public int describeContents() {
         return 0;
diff --git a/core/java/android/app/Presentation.java b/core/java/android/app/Presentation.java
index f864fb5..eaee060 100644
--- a/core/java/android/app/Presentation.java
+++ b/core/java/android/app/Presentation.java
@@ -116,7 +116,9 @@
  * The display manager keeps track of all displays in the system.  However, not all
  * displays are appropriate for showing presentations.  For example, if an activity
  * attempted to show a presentation on the main display it might obscure its own content
- * (it's like opening a dialog on top of your activity).
+ * (it's like opening a dialog on top of your activity).  Creating a presentation on the main
+ * display will result in {@link android.view.WindowManager.InvalidDisplayException} being thrown
+ * when invoking {@link #show()}.
  * </p><p>
  * Here's how to identify suitable displays for showing presentations using
  * {@link DisplayManager#getDisplays(String)} and the
@@ -243,7 +245,7 @@
     /**
      * Inherited from {@link Dialog#show}. Will throw
      * {@link android.view.WindowManager.InvalidDisplayException} if the specified secondary
-     * {@link Display} can't be found.
+     * {@link Display} can't be found or if it does not have {@link Display#FLAG_PRESENTATION} set.
      */
     @Override
     public void show() {
diff --git a/core/java/android/app/RuntimeAppOpAccessMessage.aidl b/core/java/android/app/RuntimeAppOpAccessMessage.aidl
new file mode 100644
index 0000000..68e8819
--- /dev/null
+++ b/core/java/android/app/RuntimeAppOpAccessMessage.aidl
@@ -0,0 +1,19 @@
+/*
+ * 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.app;
+
+parcelable RuntimeAppOpAccessMessage;
diff --git a/core/java/android/app/RuntimeAppOpAccessMessage.java b/core/java/android/app/RuntimeAppOpAccessMessage.java
new file mode 100644
index 0000000..a81b8e7
--- /dev/null
+++ b/core/java/android/app/RuntimeAppOpAccessMessage.java
@@ -0,0 +1,245 @@
+/*
+ * 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.app;
+
+import android.annotation.IntRange;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SystemApi;
+import android.annotation.TestApi;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.annotations.Immutable;
+import com.android.internal.util.DataClass;
+
+/**
+ * Message for noted runtime permission access.
+ * @hide
+ */
+@Immutable
+@TestApi
+@SystemApi
+/*@DataClass(genConstructor = false)
+@DataClass.Suppress("getOpCode")*/
+public final class RuntimeAppOpAccessMessage implements Parcelable {
+    /** Uid of package for which runtime app op access message was collected */
+    private final @IntRange(from = 0L) int mUid;
+    /** Op code of operation access which was collected */
+    private final @IntRange(from = 0L, to = AppOpsManager._NUM_OP - 1) int mOpCode;
+    /** Name of package for which runtime app op access message was collected */
+    private final @NonNull String mPackageName;
+    /** Feature of package for which runtime app op access message was collected */
+    private final @Nullable String mFeatureId;
+    /** Message collected (including stacktrace for synchronous ops) */
+    private final @NonNull String mMessage;
+    /** Sampling strategy used to collect this message. */
+    private final @AppOpsManager.SamplingStrategy int mSamplingStrategy;
+
+    public @NonNull String getOp() {
+        return AppOpsManager.opToPublicName(mOpCode);
+    }
+
+    /**
+     * Creates a new RuntimeAppOpAccessMessage.
+     *
+     * @param uid
+     *   Uid of package for which runtime app op access message was collected
+     * @param opCode
+     *   Op code of operation access which was collected
+     * @param packageName
+     *   Name of package for which runtime app op access message was collected
+     * @param featureId
+     *   Feature of package for which runtime app op access message was collected
+     * @param message
+     *   Message collected (including stacktrace for synchronous ops)
+     * @param samplingStrategy
+     *   Sampling strategy used to collect this message.
+     */
+    @DataClass.Generated.Member
+    public RuntimeAppOpAccessMessage(
+            @IntRange(from = 0L) int uid,
+            @IntRange(from = 0L) int opCode,
+            @NonNull String packageName,
+            @Nullable String featureId,
+            @NonNull String message,
+            @AppOpsManager.SamplingStrategy int samplingStrategy) {
+        this.mUid = uid;
+        com.android.internal.util.AnnotationValidations.validate(
+                IntRange.class, null, mUid,
+                "from", 0L);
+        this.mOpCode = opCode;
+        com.android.internal.util.AnnotationValidations.validate(
+                IntRange.class, null, mOpCode,
+                "from", 0L,
+                "to", AppOpsManager._NUM_OP - 1);
+        this.mPackageName = packageName;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mPackageName);
+        this.mFeatureId = featureId;
+        this.mMessage = message;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mMessage);
+        this.mSamplingStrategy = samplingStrategy;
+        com.android.internal.util.AnnotationValidations.validate(
+                AppOpsManager.SamplingStrategy.class, null, mSamplingStrategy);
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+
+
+
+    // Code below generated by codegen v1.0.14.
+    //
+    // DO NOT MODIFY!
+    // CHECKSTYLE:OFF Generated code
+    //
+    // To regenerate run:
+    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/app/RuntimeAppOpAccessMessage.java
+    //
+    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+    //   Settings > Editor > Code Style > Formatter Control
+    //@formatter:off
+
+
+    /**
+     * Uid of package for which runtime app op access message was collected
+     */
+    @DataClass.Generated.Member
+    public @IntRange(from = 0L) int getUid() {
+        return mUid;
+    }
+
+    /**
+     * Name of package for which runtime app op access message was collected
+     */
+    @DataClass.Generated.Member
+    public @NonNull String getPackageName() {
+        return mPackageName;
+    }
+
+    /**
+     * Feature of package for which runtime app op access message was collected
+     */
+    @DataClass.Generated.Member
+    public @Nullable String getFeatureId() {
+        return mFeatureId;
+    }
+
+    /**
+     * Message collected (including stacktrace for synchronous ops)
+     */
+    @DataClass.Generated.Member
+    public @NonNull String getMessage() {
+        return mMessage;
+    }
+
+    /**
+     * Sampling strategy used to collect this message.
+     */
+    @DataClass.Generated.Member
+    public @AppOpsManager.SamplingStrategy int getSamplingStrategy() {
+        return mSamplingStrategy;
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        // You can override field parcelling by defining methods like:
+        // void parcelFieldName(Parcel dest, int flags) { ... }
+
+        byte flg = 0;
+        if (mFeatureId != null) flg |= 0x8;
+        dest.writeByte(flg);
+        dest.writeInt(mUid);
+        dest.writeInt(mOpCode);
+        dest.writeString(mPackageName);
+        if (mFeatureId != null) dest.writeString(mFeatureId);
+        dest.writeString(mMessage);
+        dest.writeInt(mSamplingStrategy);
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public int describeContents() { return 0; }
+
+    /** @hide */
+    @SuppressWarnings({"unchecked", "RedundantCast"})
+    @DataClass.Generated.Member
+    /* package-private */ RuntimeAppOpAccessMessage(@NonNull Parcel in) {
+        // You can override field unparcelling by defining methods like:
+        // static FieldType unparcelFieldName(Parcel in) { ... }
+
+        byte flg = in.readByte();
+        int uid = in.readInt();
+        int opCode = in.readInt();
+        String packageName = in.readString();
+        String featureId = (flg & 0x8) == 0 ? null : in.readString();
+        String message = in.readString();
+        int samplingStrategy = in.readInt();
+
+        this.mUid = uid;
+        com.android.internal.util.AnnotationValidations.validate(
+                IntRange.class, null, mUid,
+                "from", 0L);
+        this.mOpCode = opCode;
+        com.android.internal.util.AnnotationValidations.validate(
+                IntRange.class, null, mOpCode,
+                "from", 0L,
+                "to", AppOpsManager._NUM_OP - 1);
+        this.mPackageName = packageName;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mPackageName);
+        this.mFeatureId = featureId;
+        this.mMessage = message;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mMessage);
+        this.mSamplingStrategy = samplingStrategy;
+        com.android.internal.util.AnnotationValidations.validate(
+                AppOpsManager.SamplingStrategy.class, null, mSamplingStrategy);
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    @DataClass.Generated.Member
+    public static final @NonNull Parcelable.Creator<RuntimeAppOpAccessMessage> CREATOR
+            = new Parcelable.Creator<RuntimeAppOpAccessMessage>() {
+        @Override
+        public RuntimeAppOpAccessMessage[] newArray(int size) {
+            return new RuntimeAppOpAccessMessage[size];
+        }
+
+        @Override
+        public RuntimeAppOpAccessMessage createFromParcel(@NonNull Parcel in) {
+            return new RuntimeAppOpAccessMessage(in);
+        }
+    };
+
+    /*@DataClass.Generated(
+            time = 1581517099127L,
+            codegenVersion = "1.0.14",
+            sourceFile = "frameworks/base/core/java/android/app/RuntimeAppOpAccessMessage.java",
+            inputSignatures = "private final @android.annotation.IntRange(from=0L) int mUid\nprivate final @android.annotation.IntRange(from=0L, to=AppOpsManager._NUM_OP - 1) int mOpCode\nprivate final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.annotation.Nullable java.lang.String mFeatureId\nprivate final @android.annotation.NonNull java.lang.String mMessage\nprivate final @android.app.AppOpsManager.SamplingStrategy int mSamplingStrategy\npublic @android.annotation.NonNull java.lang.String getOp()\nclass RuntimeAppOpAccessMessage extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genConstructor=false)")*/
+    @Deprecated
+    private void __metadata() {}
+
+
+    //@formatter:on
+    // End of generated code
+
+}
diff --git a/core/java/android/app/SharedElementCallback.java b/core/java/android/app/SharedElementCallback.java
index 0287564..8eb7e72 100644
--- a/core/java/android/app/SharedElementCallback.java
+++ b/core/java/android/app/SharedElementCallback.java
@@ -19,7 +19,6 @@
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.ColorSpace;
-import android.graphics.GraphicBuffer;
 import android.graphics.Matrix;
 import android.graphics.RectF;
 import android.graphics.drawable.BitmapDrawable;
@@ -48,8 +47,8 @@
 public abstract class SharedElementCallback {
     private Matrix mTempMatrix;
     private static final String BUNDLE_SNAPSHOT_BITMAP = "sharedElement:snapshot:bitmap";
-    private static final String BUNDLE_SNAPSHOT_GRAPHIC_BUFFER =
-            "sharedElement:snapshot:graphicBuffer";
+    private static final String BUNDLE_SNAPSHOT_HARDWARE_BUFFER =
+            "sharedElement:snapshot:hardwareBuffer";
     private static final String BUNDLE_SNAPSHOT_COLOR_SPACE = "sharedElement:snapshot:colorSpace";
     private static final String BUNDLE_SNAPSHOT_IMAGE_SCALETYPE = "sharedElement:snapshot:imageScaleType";
     private static final String BUNDLE_SNAPSHOT_IMAGE_MATRIX = "sharedElement:snapshot:imageMatrix";
@@ -186,8 +185,8 @@
                     if (bitmap.getConfig() != Bitmap.Config.HARDWARE) {
                         bundle.putParcelable(BUNDLE_SNAPSHOT_BITMAP, bitmap);
                     } else {
-                        GraphicBuffer graphicBuffer = bitmap.createGraphicBufferHandle();
-                        bundle.putParcelable(BUNDLE_SNAPSHOT_GRAPHIC_BUFFER, graphicBuffer);
+                        HardwareBuffer hardwareBuffer = bitmap.getHardwareBuffer();
+                        bundle.putParcelable(BUNDLE_SNAPSHOT_HARDWARE_BUFFER, hardwareBuffer);
                         ColorSpace cs = bitmap.getColorSpace();
                         if (cs != null) {
                             bundle.putInt(BUNDLE_SNAPSHOT_COLOR_SPACE, cs.getId());
@@ -235,7 +234,7 @@
         View view = null;
         if (snapshot instanceof Bundle) {
             Bundle bundle = (Bundle) snapshot;
-            GraphicBuffer buffer = bundle.getParcelable(BUNDLE_SNAPSHOT_GRAPHIC_BUFFER);
+            HardwareBuffer buffer = bundle.getParcelable(BUNDLE_SNAPSHOT_HARDWARE_BUFFER);
             Bitmap bitmap = bundle.getParcelable(BUNDLE_SNAPSHOT_BITMAP);
             if (buffer == null && bitmap == null) {
                 return null;
@@ -246,8 +245,7 @@
                 if (colorSpaceId >= 0 && colorSpaceId < ColorSpace.Named.values().length) {
                     colorSpace = ColorSpace.get(ColorSpace.Named.values()[colorSpaceId]);
                 }
-                bitmap = Bitmap.wrapHardwareBuffer(HardwareBuffer.createFromGraphicBuffer(buffer),
-                                                   colorSpace);
+                bitmap = Bitmap.wrapHardwareBuffer(buffer, colorSpace);
             }
             ImageView imageView = new ImageView(context);
             view = imageView;
diff --git a/core/java/android/app/SyncNotedAppOp.aidl b/core/java/android/app/SyncNotedAppOp.aidl
new file mode 100644
index 0000000..ab062d2
--- /dev/null
+++ b/core/java/android/app/SyncNotedAppOp.aidl
@@ -0,0 +1,19 @@
+/*
+ * 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.app;
+
+parcelable SyncNotedAppOp;
diff --git a/core/java/android/app/SyncNotedAppOp.java b/core/java/android/app/SyncNotedAppOp.java
index 065d5de..aa11b95 100644
--- a/core/java/android/app/SyncNotedAppOp.java
+++ b/core/java/android/app/SyncNotedAppOp.java
@@ -19,8 +19,10 @@
 import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.os.Parcelable;
 
 import com.android.internal.annotations.Immutable;
+import com.android.internal.util.DataClass;
 
 /**
  * Description of an app-op that was noted for the current process.
@@ -32,48 +34,154 @@
  * itself}.
  */
 @Immutable
-public final class SyncNotedAppOp {
-    private final int mOpCode;
+/*@DataClass(
+        genEqualsHashCode = true,
+        genConstructor = false
+)
+@DataClass.Suppress("getOpCode")*/
+public final class SyncNotedAppOp implements Parcelable {
+
+    /** op code of synchronous appop noted */
+    private final @IntRange(from = 0L, to = AppOpsManager._NUM_OP - 1) int mOpCode;
+    /** featureId of synchronous appop noted */
     private final @Nullable String mFeatureId;
 
     /**
+     * Creates a new SyncNotedAppOp.
+     *
+     * @param opCode
+     *   op code of synchronous appop noted
+     * @param featureId
+     *   featureId of synchronous appop noted
+     */
+    public SyncNotedAppOp(@IntRange(from = 0L) int opCode, @Nullable String featureId) {
+        this.mOpCode = opCode;
+        com.android.internal.util.AnnotationValidations.validate(
+                IntRange.class, null, mOpCode,
+                "from", 0,
+                "to", AppOpsManager._NUM_OP - 1);
+        this.mFeatureId = featureId;
+    }
+
+    /**
      * @return The op that was noted.
      */
     public @NonNull String getOp() {
         return AppOpsManager.opToPublicName(mOpCode);
     }
 
+    // Code below generated by codegen v1.0.14.
+    //
+    // DO NOT MODIFY!
+    // CHECKSTYLE:OFF Generated code
+    //
+    // To regenerate run:
+    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/app/SyncNotedAppOp.java
+    //
+    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+    //   Settings > Editor > Code Style > Formatter Control
+    //@formatter:off
+
+
     /**
-     * @return The {@link android.content.Context#createFeatureContext Feature} in the app
+     * featureId of synchronous appop noted
      */
+    @DataClass.Generated.Member
     public @Nullable String getFeatureId() {
         return mFeatureId;
     }
 
-    /**
-     * Create a new sync op description
-     *
-     * @param opCode The op that was noted
-     *
-     * @hide
-     */
-    public SyncNotedAppOp(@IntRange(from = 0, to = AppOpsManager._NUM_OP - 1) int opCode,
-            @Nullable String featureId) {
-        mOpCode = opCode;
-        mFeatureId = featureId;
+    @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(SyncNotedAppOp other) { ... }
+        // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        @SuppressWarnings("unchecked")
+        SyncNotedAppOp that = (SyncNotedAppOp) o;
+        //noinspection PointlessBooleanExpression
+        return true
+                && mOpCode == that.mOpCode
+                && java.util.Objects.equals(mFeatureId, that.mFeatureId);
     }
 
     @Override
-    public boolean equals(Object other) {
-        if (!(other instanceof SyncNotedAppOp)) {
-            return false;
+    @DataClass.Generated.Member
+    public int hashCode() {
+        // You can override field hashCode logic by defining methods like:
+        // int fieldNameHashCode() { ... }
+
+        int _hash = 1;
+        _hash = 31 * _hash + mOpCode;
+        _hash = 31 * _hash + java.util.Objects.hashCode(mFeatureId);
+        return _hash;
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public void writeToParcel(@NonNull android.os.Parcel dest, int flags) {
+        // You can override field parcelling by defining methods like:
+        // void parcelFieldName(Parcel dest, int flags) { ... }
+
+        byte flg = 0;
+        if (mFeatureId != null) flg |= 0x2;
+        dest.writeByte(flg);
+        dest.writeInt(mOpCode);
+        if (mFeatureId != null) dest.writeString(mFeatureId);
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public int describeContents() { return 0; }
+
+    /** @hide */
+    @SuppressWarnings({"unchecked", "RedundantCast"})
+    @DataClass.Generated.Member
+    /* package-private */ SyncNotedAppOp(@NonNull android.os.Parcel in) {
+        // You can override field unparcelling by defining methods like:
+        // static FieldType unparcelFieldName(Parcel in) { ... }
+
+        byte flg = in.readByte();
+        int opCode = in.readInt();
+        String featureId = (flg & 0x2) == 0 ? null : in.readString();
+
+        this.mOpCode = opCode;
+        com.android.internal.util.AnnotationValidations.validate(
+                IntRange.class, null, mOpCode,
+                "from", 0,
+                "to", AppOpsManager._NUM_OP - 1);
+        this.mFeatureId = featureId;
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    @DataClass.Generated.Member
+    public static final @NonNull Parcelable.Creator<SyncNotedAppOp> CREATOR
+            = new Parcelable.Creator<SyncNotedAppOp>() {
+        @Override
+        public SyncNotedAppOp[] newArray(int size) {
+            return new SyncNotedAppOp[size];
         }
 
-        return mOpCode == ((SyncNotedAppOp) other).mOpCode;
-    }
+        @Override
+        public SyncNotedAppOp createFromParcel(@NonNull android.os.Parcel in) {
+            return new SyncNotedAppOp(in);
+        }
+    };
 
-    @Override
-    public int hashCode() {
-        return mOpCode;
-    }
+    /*@DataClass.Generated(
+            time = 1579188889960L,
+            codegenVersion = "1.0.14",
+            sourceFile = "frameworks/base/core/java/android/app/SyncNotedAppOp.java",
+            inputSignatures = "private final @android.annotation.IntRange(from=0L, to=AppOpsManager._NUM_OP - 1) int mOpCode\nprivate final @android.annotation.Nullable java.lang.String mFeatureId\npublic @android.annotation.NonNull java.lang.String getOp()\npublic @android.annotation.SystemApi int getOpCode()\nclass SyncNotedAppOp extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genConstructor=false)")*/
+    @Deprecated
+    private void __metadata() {}
+
+
+    //@formatter:on
+    // End of generated code
+
 }
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 50b9d6b..be87f5c 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -109,6 +109,8 @@
 import android.media.soundtrigger.SoundTriggerManager;
 import android.media.tv.ITvInputManager;
 import android.media.tv.TvInputManager;
+import android.media.tv.tunerresourcemanager.ITunerResourceManager;
+import android.media.tv.tunerresourcemanager.TunerResourceManager;
 import android.net.ConnectivityDiagnosticsManager;
 import android.net.ConnectivityManager;
 import android.net.ConnectivityThread;
@@ -130,7 +132,7 @@
 import android.net.nsd.INsdManager;
 import android.net.nsd.NsdManager;
 import android.net.wifi.WifiFrameworkInitializer;
-import android.net.wifi.wificond.WifiCondManager;
+import android.net.wifi.nl80211.WifiNl80211Manager;
 import android.nfc.NfcManager;
 import android.os.BatteryManager;
 import android.os.BatteryStats;
@@ -146,6 +148,7 @@
 import android.os.IPowerManager;
 import android.os.IRecoverySystem;
 import android.os.ISystemUpdateManager;
+import android.os.IThermalService;
 import android.os.IUserManager;
 import android.os.IncidentManager;
 import android.os.PowerManager;
@@ -183,6 +186,7 @@
 import android.telephony.TelephonyRegistryManager;
 import android.util.ArrayMap;
 import android.util.Log;
+import android.util.Slog;
 import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
 import android.view.WindowManager;
@@ -219,6 +223,8 @@
 public final class SystemServiceRegistry {
     private static final String TAG = "SystemServiceRegistry";
 
+    private static final boolean ENABLE_SERVICE_NOT_FOUND_WTF = true;
+
     // Service registry information.
     // This information is never changed once static initialization has completed.
     private static final Map<Class<?>, String> SYSTEM_SERVICE_NAMES =
@@ -574,10 +580,12 @@
                 new CachedServiceFetcher<PowerManager>() {
             @Override
             public PowerManager createService(ContextImpl ctx) throws ServiceNotFoundException {
-                IBinder b = ServiceManager.getServiceOrThrow(Context.POWER_SERVICE);
-                IPowerManager service = IPowerManager.Stub.asInterface(b);
-                return new PowerManager(ctx.getOuterContext(),
-                        service, ctx.mMainThread.getHandler());
+                IBinder powerBinder = ServiceManager.getServiceOrThrow(Context.POWER_SERVICE);
+                IPowerManager powerService = IPowerManager.Stub.asInterface(powerBinder);
+                IBinder thermalBinder = ServiceManager.getServiceOrThrow(Context.THERMAL_SERVICE);
+                IThermalService thermalService = IThermalService.Stub.asInterface(thermalBinder);
+                return new PowerManager(ctx.getOuterContext(), powerService, thermalService,
+                        ctx.mMainThread.getHandler());
             }});
 
         registerService(Context.RECOVERY_SERVICE, RecoverySystem.class,
@@ -759,11 +767,11 @@
                 return new EthernetManager(ctx.getOuterContext(), service);
             }});
 
-        registerService(Context.WIFI_COND_SERVICE, WifiCondManager.class,
-                new CachedServiceFetcher<WifiCondManager>() {
+        registerService(Context.WIFI_NL80211_SERVICE, WifiNl80211Manager.class,
+                new CachedServiceFetcher<WifiNl80211Manager>() {
                     @Override
-                    public WifiCondManager createService(ContextImpl ctx) {
-                        return new WifiCondManager(ctx.getOuterContext());
+                    public WifiNl80211Manager createService(ContextImpl ctx) {
+                        return new WifiNl80211Manager(ctx.getOuterContext());
                     }
                 });
 
@@ -937,6 +945,17 @@
                 return new TvInputManager(service, ctx.getUserId());
             }});
 
+        registerService(Context.TV_TUNER_RESOURCE_MGR_SERVICE, TunerResourceManager.class,
+                new CachedServiceFetcher<TunerResourceManager>() {
+            @Override
+            public TunerResourceManager createService(ContextImpl ctx)
+                    throws ServiceNotFoundException {
+                IBinder iBinder =
+                        ServiceManager.getServiceOrThrow(Context.TV_TUNER_RESOURCE_MGR_SERVICE);
+                ITunerResourceManager service = ITunerResourceManager.Stub.asInterface(iBinder);
+                return new TunerResourceManager(service, ctx.getUserId());
+            }});
+
         registerService(Context.NETWORK_SCORE_SERVICE, NetworkScoreManager.class,
                 new CachedServiceFetcher<NetworkScoreManager>() {
             @Override
@@ -1357,8 +1376,29 @@
      * @hide
      */
     public static Object getSystemService(ContextImpl ctx, String name) {
-        ServiceFetcher<?> fetcher = SYSTEM_SERVICE_FETCHERS.get(name);
-        return fetcher != null ? fetcher.getService(ctx) : null;
+        if (name == null) {
+            return null;
+        }
+        final ServiceFetcher<?> fetcher = SYSTEM_SERVICE_FETCHERS.get(name);
+        if (ENABLE_SERVICE_NOT_FOUND_WTF && fetcher == null) {
+            // This should be a caller bug.
+            Slog.wtf(TAG, "Unknown manager requested: " + name);
+            return null;
+        }
+
+        final Object ret = fetcher.getService(ctx);
+        if (ENABLE_SERVICE_NOT_FOUND_WTF && ret == null) {
+            // Some services do return null in certain situations, so don't do WTF for them.
+            switch (name) {
+                case Context.CONTENT_CAPTURE_MANAGER_SERVICE:
+                case Context.APP_PREDICTION_SERVICE:
+                case Context.INCREMENTAL_SERVICE:
+                    return null;
+            }
+            Slog.wtf(TAG, "Manager wrapper not available: " + name);
+            return null;
+        }
+        return ret;
     }
 
     /**
@@ -1366,7 +1406,15 @@
      * @hide
      */
     public static String getSystemServiceName(Class<?> serviceClass) {
-        return SYSTEM_SERVICE_NAMES.get(serviceClass);
+        if (serviceClass == null) {
+            return null;
+        }
+        final String serviceName = SYSTEM_SERVICE_NAMES.get(serviceClass);
+        if (ENABLE_SERVICE_NOT_FOUND_WTF && serviceName == null) {
+            // This should be a caller bug.
+            Slog.wtf(TAG, "Unknown manager requested: " + serviceClass.getCanonicalName());
+        }
+        return serviceName;
     }
 
     /**
@@ -1663,7 +1711,9 @@
                         try {
                             cache.wait();
                         } catch (InterruptedException e) {
-                            Log.w(TAG, "getService() interrupted");
+                            // This shouldn't normally happen, but if someone interrupts the
+                            // thread, it will.
+                            Slog.wtf(TAG, "getService() interrupted");
                             Thread.currentThread().interrupt();
                             return null;
                         }
diff --git a/core/java/android/app/TaskInfo.java b/core/java/android/app/TaskInfo.java
index 662ca6e..f7d712d 100644
--- a/core/java/android/app/TaskInfo.java
+++ b/core/java/android/app/TaskInfo.java
@@ -149,6 +149,13 @@
     public IWindowContainer token;
 
     /**
+     * The PictureInPictureParams for the Task, if set.
+     * @hide
+     */
+    @Nullable
+    public PictureInPictureParams pictureInPictureParams;
+
+    /**
      * The activity type of the top activity in this task.
      * @hide
      */
@@ -209,6 +216,9 @@
         configuration.readFromParcel(source);
         token = IWindowContainer.Stub.asInterface(source.readStrongBinder());
         topActivityType = source.readInt();
+        pictureInPictureParams = source.readInt() != 0
+            ? PictureInPictureParams.CREATOR.createFromParcel(source)
+            : null;
     }
 
     /**
@@ -246,6 +256,12 @@
         configuration.writeToParcel(dest, flags);
         dest.writeStrongInterface(token);
         dest.writeInt(topActivityType);
+        if (pictureInPictureParams == null) {
+            dest.writeInt(0);
+        } else {
+            dest.writeInt(1);
+            pictureInPictureParams.writeToParcel(dest, flags);
+        }
     }
 
     @Override
@@ -261,6 +277,7 @@
                 + " supportsSplitScreenMultiWindow=" + supportsSplitScreenMultiWindow
                 + " resizeMode=" + resizeMode
                 + " token=" + token
-                + " topActivityType=" + topActivityType;
+                + " topActivityType=" + topActivityType
+                + " pictureInPictureParams=" + pictureInPictureParams;
     }
 }
diff --git a/core/java/android/app/TaskStackListener.java b/core/java/android/app/TaskStackListener.java
index 343b386..da0aadb 100644
--- a/core/java/android/app/TaskStackListener.java
+++ b/core/java/android/app/TaskStackListener.java
@@ -199,4 +199,8 @@
     @Override
     public void onRecentTaskListFrozenChanged(boolean frozen) {
     }
+
+    @Override
+    public void onTaskFocusChanged(int taskId, boolean focused) {
+    }
 }
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 6f1effd..5f74d2e 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -598,7 +598,8 @@
      *     is not able to access the wallpaper.
      */
     public Drawable getDrawable() {
-        Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, true, FLAG_SYSTEM, mCmProxy);
+        final ColorManagementProxy cmProxy = getColorManagementProxy();
+        Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, true, FLAG_SYSTEM, cmProxy);
         if (bm != null) {
             Drawable dr = new BitmapDrawable(mContext.getResources(), bm);
             dr.setDither(false);
@@ -829,7 +830,8 @@
      * null pointer if these is none.
      */
     public Drawable peekDrawable() {
-        Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, false, FLAG_SYSTEM, mCmProxy);
+        final ColorManagementProxy cmProxy = getColorManagementProxy();
+        Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, false, FLAG_SYSTEM, cmProxy);
         if (bm != null) {
             Drawable dr = new BitmapDrawable(mContext.getResources(), bm);
             dr.setDither(false);
@@ -853,7 +855,8 @@
      */
     @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
     public Drawable getFastDrawable() {
-        Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, true, FLAG_SYSTEM, mCmProxy);
+        final ColorManagementProxy cmProxy = getColorManagementProxy();
+        Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, true, FLAG_SYSTEM, cmProxy);
         if (bm != null) {
             return new FastBitmapDrawable(bm);
         }
@@ -869,7 +872,8 @@
      */
     @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
     public Drawable peekFastDrawable() {
-        Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, false, FLAG_SYSTEM, mCmProxy);
+        final ColorManagementProxy cmProxy = getColorManagementProxy();
+        Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, false, FLAG_SYSTEM, cmProxy);
         if (bm != null) {
             return new FastBitmapDrawable(bm);
         }
@@ -892,10 +896,11 @@
         if (!shouldEnableWideColorGamut()) {
             return false;
         }
-        Bitmap bitmap = sGlobals.peekWallpaperBitmap(mContext, false, which, mCmProxy);
+        final ColorManagementProxy cmProxy = getColorManagementProxy();
+        Bitmap bitmap = sGlobals.peekWallpaperBitmap(mContext, false, which, cmProxy);
         return bitmap != null && bitmap.getColorSpace() != null
                 && bitmap.getColorSpace() != ColorSpace.get(ColorSpace.Named.SRGB)
-                && mCmProxy.isSupportedColorSpace(bitmap.getColorSpace());
+                && cmProxy.isSupportedColorSpace(bitmap.getColorSpace());
     }
 
     /**
@@ -928,8 +933,8 @@
      * @hide
      */
     public Bitmap getBitmapAsUser(int userId, boolean hardware) {
-        return sGlobals.peekWallpaperBitmap(
-                mContext, true, FLAG_SYSTEM, userId, hardware, mCmProxy);
+        final ColorManagementProxy cmProxy = getColorManagementProxy();
+        return sGlobals.peekWallpaperBitmap(mContext, true, FLAG_SYSTEM, userId, hardware, cmProxy);
     }
 
     /**
@@ -2074,12 +2079,23 @@
     }
 
     /**
-     * A private class to help Globals#getCurrentWallpaperLocked handle color management.
+     * Get the instance of {@link ColorManagementProxy}.
+     *
+     * @return instance of {@link ColorManagementProxy}.
+     * @hide
      */
-    private static class ColorManagementProxy {
+    public ColorManagementProxy getColorManagementProxy() {
+        return mCmProxy;
+    }
+
+    /**
+     * A hidden class to help {@link Globals#getCurrentWallpaperLocked} handle color management.
+     * @hide
+     */
+    public static class ColorManagementProxy {
         private final Set<ColorSpace> mSupportedColorSpaces = new HashSet<>();
 
-        ColorManagementProxy(Context context) {
+        public ColorManagementProxy(@NonNull Context context) {
             // Get a list of supported wide gamut color spaces.
             Display display = context.getDisplay();
             if (display != null) {
@@ -2087,9 +2103,14 @@
             }
         }
 
+        @NonNull
+        public Set<ColorSpace> getSupportedColorSpaces() {
+            return mSupportedColorSpaces;
+        }
+
         boolean isSupportedColorSpace(ColorSpace colorSpace) {
             return colorSpace != null && (colorSpace == ColorSpace.get(ColorSpace.Named.SRGB)
-                    || mSupportedColorSpaces.contains(colorSpace));
+                    || getSupportedColorSpaces().contains(colorSpace));
         }
 
         void doColorManagement(ImageDecoder decoder, ImageDecoder.ImageInfo info) {
diff --git a/core/java/android/app/WindowContext.java b/core/java/android/app/WindowContext.java
index 36ae450..d279983 100644
--- a/core/java/android/app/WindowContext.java
+++ b/core/java/android/app/WindowContext.java
@@ -60,12 +60,12 @@
         if (token != null && !isWindowToken(token)) {
             throw new IllegalArgumentException("Token must be registered to server.");
         }
+        mToken = token != null ? token : new Binder();
 
-        final ContextImpl contextImpl = createBaseWindowContext(base, token);
+        final ContextImpl contextImpl = createBaseWindowContext(base, mToken);
         attachBaseContext(contextImpl);
         contextImpl.setOuterContext(this);
 
-        mToken = token != null ? token : new Binder();
         mDisplayId = getDisplayId();
         mWindowManager = new WindowManagerImpl(this);
         mWindowManager.setDefaultToken(mToken);
diff --git a/core/java/android/app/admin/DevicePolicyKeyguardService.java b/core/java/android/app/admin/DevicePolicyKeyguardService.java
index c2a76c5..2ac5ebf 100644
--- a/core/java/android/app/admin/DevicePolicyKeyguardService.java
+++ b/core/java/android/app/admin/DevicePolicyKeyguardService.java
@@ -22,7 +22,7 @@
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.util.Log;
-import android.view.SurfaceControl;
+import android.view.SurfaceControlViewHost;
 
 /**
  * Client interface for providing the SystemUI with secondary lockscreen information.
@@ -43,14 +43,14 @@
         @Override
         public void onSurfaceReady(@Nullable IBinder hostInputToken, IKeyguardCallback callback) {
             mCallback = callback;
-            SurfaceControl surfaceControl =
+            SurfaceControlViewHost.SurfacePackage surfacePackage =
                     DevicePolicyKeyguardService.this.onSurfaceReady(hostInputToken);
 
             if (mCallback != null) {
                 try {
-                    mCallback.onSurfaceControlCreated(surfaceControl);
+                    mCallback.onRemoteContentReady(surfacePackage);
                 } catch (RemoteException e) {
-                    Log.e(TAG, "Failed to return created SurfaceControl", e);
+                    Log.e(TAG, "Failed to return created SurfacePackage", e);
                 }
             }
         }
@@ -65,11 +65,11 @@
     /**
      * Called by keyguard once the host surface for the secondary lockscreen is ready to display
      * remote content.
-     * @return the {@link SurfaceControl} for the Surface the secondary lockscreen content is
-     *      attached to.
+     * @return the {@link SurfaceControlViewHost.SurfacePackage} for the Surface the
+     *      secondary lockscreen content is attached to.
      */
     @Nullable
-    public SurfaceControl onSurfaceReady(@Nullable IBinder hostInputToken) {
+    public SurfaceControlViewHost.SurfacePackage onSurfaceReady(@Nullable IBinder hostInputToken) {
         return null;
     }
 
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 7599791..139b179 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -1416,6 +1416,7 @@
      * @see #setFactoryResetProtectionPolicy
      * @hide
      */
+    @RequiresPermission(android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION)
     @SystemApi
     public static final String ACTION_RESET_PROTECTION_POLICY_CHANGED =
             "android.app.action.RESET_PROTECTION_POLICY_CHANGED";
@@ -4718,15 +4719,41 @@
     public static final int KEYGUARD_DISABLE_FEATURES_ALL = 0x7fffffff;
 
     /**
-     * Keyguard features that when set on a managed profile that doesn't have its own challenge will
-     * affect the profile's parent user. These can also be set on the managed profile's parent
+     * Keyguard features that when set on a non-organization-owned managed profile that doesn't
+     * have its own challenge will affect the profile's parent user. These can also be set on the
+     * managed profile's parent {@link DevicePolicyManager} instance to explicitly control the
+     * parent user.
+     *
+     * <p>
+     * Organization-owned managed profile supports disabling additional keyguard features on the
+     * parent user as defined in {@link #ORG_OWNED_PROFILE_KEYGUARD_FEATURES_PARENT_ONLY}.
+     *
+     * @hide
+     */
+    public static final int NON_ORG_OWNED_PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER =
+            DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS
+            | DevicePolicyManager.KEYGUARD_DISABLE_BIOMETRICS;
+
+    /**
+     * Keyguard features that when set by the profile owner of an organization-owned managed
+     * profile will affect the profile's parent user if set on the managed profile's parent
      * {@link DevicePolicyManager} instance.
      *
      * @hide
      */
+    public static final int ORG_OWNED_PROFILE_KEYGUARD_FEATURES_PARENT_ONLY =
+            DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA
+                    | DevicePolicyManager.KEYGUARD_DISABLE_SECURE_NOTIFICATIONS;
+
+    /**
+     * Keyguard features that when set on a normal or organization-owned managed profile, have
+     * the potential to affect the profile's parent user.
+     *
+     * @hide
+     */
     public static final int PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER =
-            DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS
-            | DevicePolicyManager.KEYGUARD_DISABLE_BIOMETRICS;
+            DevicePolicyManager.NON_ORG_OWNED_PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER
+                    | DevicePolicyManager.ORG_OWNED_PROFILE_KEYGUARD_FEATURES_PARENT_ONLY;
 
     /**
      * @deprecated This method does not actually modify the storage encryption of the device.
@@ -5860,21 +5887,27 @@
      * a secure video output. See {@link android.view.Display#FLAG_SECURE} for more details about
      * secure surfaces and secure displays.
      * <p>
-     * The calling device admin must be a device or profile owner. If it is not, a security
+     * This method can be called on the {@link DevicePolicyManager} instance, returned by
+     * {@link #getParentProfileInstance(ComponentName)}, where the calling device admin must be
+     * the profile owner of an organization-owned managed profile. If it is not, a security
      * exception will be thrown.
      * <p>
+     * If the caller is device owner or called on the parent instance by a profile owner of an
+     * organization-owned managed profile, then the restriction will be applied to all users.
+     * <p>
      * From version {@link android.os.Build.VERSION_CODES#M} disabling screen capture also blocks
      * assist requests for all activities of the relevant user.
      *
      * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
      * @param disabled Whether screen capture is disabled or not.
-     * @throws SecurityException if {@code admin} is not a device or profile owner.
+     * @throws SecurityException if {@code admin} is not a device or profile owner or if
+     *                           called on the parent profile and the {@code admin} is not a
+     *                           profile owner of an organization-owned managed profile.
      */
     public void setScreenCaptureDisabled(@NonNull ComponentName admin, boolean disabled) {
-        throwIfParentInstance("setScreenCaptureDisabled");
         if (mService != null) {
             try {
-                mService.setScreenCaptureDisabled(admin, disabled);
+                mService.setScreenCaptureDisabled(admin, disabled, mParentInstance);
             } catch (RemoteException e) {
                 throw e.rethrowFromSystemServer();
             }
@@ -5884,11 +5917,16 @@
     /**
      * Determine whether or not screen capture has been disabled by the calling
      * admin, if specified, or all admins.
-     * @param admin The name of the admin component to check, or {@code null} to check whether any admins
-     * have disabled screen capture.
+     * <p>
+     * This method can be called on the {@link DevicePolicyManager} instance,
+     * returned by {@link #getParentProfileInstance(ComponentName)}, where the caller must be
+     * the profile owner of an organization-owned managed profile (the calling admin must be
+     * specified).
+     *
+     * @param admin The name of the admin component to check, or {@code null} to check whether any
+     *              admins have disabled screen capture.
      */
     public boolean getScreenCaptureDisabled(@Nullable ComponentName admin) {
-        throwIfParentInstance("getScreenCaptureDisabled");
         return getScreenCaptureDisabled(admin, myUserId());
     }
 
@@ -5896,7 +5934,7 @@
     public boolean getScreenCaptureDisabled(@Nullable ComponentName admin, int userHandle) {
         if (mService != null) {
             try {
-                return mService.getScreenCaptureDisabled(admin, userHandle);
+                return mService.getScreenCaptureDisabled(admin, userHandle, mParentInstance);
             } catch (RemoteException e) {
                 throw e.rethrowFromSystemServer();
             }
@@ -6104,11 +6142,23 @@
      * <li>{@link #KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS} which affects notifications generated
      * by applications in the managed profile.
      * </ul>
+     * <p>
+     * From version {@link android.os.Build.VERSION_CODES#R} the profile owner of an
+     * organization-owned managed profile can set:
+     * <ul>
+     * <li>{@link #KEYGUARD_DISABLE_SECURE_CAMERA} which affects the parent user when called on the
+     * parent profile.
+     * <li>{@link #KEYGUARD_DISABLE_SECURE_NOTIFICATIONS} which affects the parent user when called
+     * on the parent profile.
+     * </ul>
      * {@link #KEYGUARD_DISABLE_TRUST_AGENTS}, {@link #KEYGUARD_DISABLE_FINGERPRINT},
-     * {@link #KEYGUARD_DISABLE_FACE} and {@link #KEYGUARD_DISABLE_IRIS} can also be
-     * set on the {@link DevicePolicyManager} instance returned by
+     * {@link #KEYGUARD_DISABLE_FACE}, {@link #KEYGUARD_DISABLE_IRIS},
+     * {@link #KEYGUARD_DISABLE_SECURE_CAMERA} and {@link #KEYGUARD_DISABLE_SECURE_NOTIFICATIONS}
+     * can also be set on the {@link DevicePolicyManager} instance returned by
      * {@link #getParentProfileInstance(ComponentName)} in order to set restrictions on the parent
-     * profile.
+     * profile. {@link #KEYGUARD_DISABLE_SECURE_CAMERA} can only be set on the parent profile
+     * instance if the calling device admin is the profile owner of an organization-owned
+     * managed profile.
      * <p>
      * Requests to disable other features on a managed profile will be ignored.
      * <p>
@@ -8452,6 +8502,11 @@
      * From {@link android.os.Build.VERSION_CODES#N} the profile or device owner can still use
      * {@link android.accounts.AccountManager} APIs to add or remove accounts when account
      * management for a specific type is disabled.
+     * <p>
+     * This method may be called on the {@code DevicePolicyManager} instance returned from
+     * {@link #getParentProfileInstance(ComponentName)} by the profile owner on an
+     * organization-owned device, to restrict accounts that may not be managed on the primary
+     * profile.
      *
      * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
      * @param accountType For which account management is disabled or enabled.
@@ -8461,10 +8516,10 @@
      */
     public void setAccountManagementDisabled(@NonNull ComponentName admin, String accountType,
             boolean disabled) {
-        throwIfParentInstance("setAccountManagementDisabled");
         if (mService != null) {
             try {
-                mService.setAccountManagementDisabled(admin, accountType, disabled);
+                mService.setAccountManagementDisabled(admin, accountType, disabled,
+                        mParentInstance);
             } catch (RemoteException e) {
                 throw e.rethrowFromSystemServer();
             }
@@ -8472,28 +8527,43 @@
     }
 
     /**
-     * Gets the array of accounts for which account management is disabled by the profile owner.
+     * Gets the array of accounts for which account management is disabled by the profile owner
+     * or device owner.
      *
      * <p> Account management can be disabled/enabled by calling
      * {@link #setAccountManagementDisabled}.
+     * <p>
+     * This method may be called on the {@code DevicePolicyManager} instance returned from
+     * {@link #getParentProfileInstance(ComponentName)}. Note that only a profile owner on
+     * an organization-deviced can affect account types on the parent profile instance.
      *
      * @return a list of account types for which account management has been disabled.
      *
      * @see #setAccountManagementDisabled
      */
     public @Nullable String[] getAccountTypesWithManagementDisabled() {
-        throwIfParentInstance("getAccountTypesWithManagementDisabled");
-        return getAccountTypesWithManagementDisabledAsUser(myUserId());
+        return getAccountTypesWithManagementDisabledAsUser(myUserId(), mParentInstance);
+    }
+
+    /**
+     * @see #getAccountTypesWithManagementDisabled()
+     * Note that calling this method on the parent profile instance will return the same
+     * value as calling it on the main {@code DevicePolicyManager} instance.
+     * @hide
+     */
+    public @Nullable String[] getAccountTypesWithManagementDisabledAsUser(int userId) {
+        return getAccountTypesWithManagementDisabledAsUser(userId, false);
     }
 
     /**
      * @see #getAccountTypesWithManagementDisabled()
      * @hide
      */
-    public @Nullable String[] getAccountTypesWithManagementDisabledAsUser(int userId) {
+    public @Nullable String[] getAccountTypesWithManagementDisabledAsUser(
+            int userId, boolean parentInstance) {
         if (mService != null) {
             try {
-                return mService.getAccountTypesWithManagementDisabledAsUser(userId);
+                return mService.getAccountTypesWithManagementDisabledAsUser(userId, parentInstance);
             } catch (RemoteException e) {
                 throw e.rethrowFromSystemServer();
             }
@@ -8723,6 +8793,7 @@
     @StringDef({
             Settings.System.SCREEN_BRIGHTNESS_MODE,
             Settings.System.SCREEN_BRIGHTNESS,
+            Settings.System.SCREEN_BRIGHTNESS_FLOAT,
             Settings.System.SCREEN_OFF_TIMEOUT
     })
     @Retention(RetentionPolicy.SOURCE)
@@ -8777,11 +8848,11 @@
      * @throws SecurityException if caller is not a device owner or a profile owner of an
      *                           organization-owned managed profile.
      */
-    public void setLockdownAdminConfiguredNetworks(@NonNull ComponentName admin, boolean lockdown) {
-        throwIfParentInstance("setLockdownAdminConfiguredNetworks");
+    public void setConfiguredNetworksLockdownState(@NonNull ComponentName admin, boolean lockdown) {
+        throwIfParentInstance("setConfiguredNetworksLockdownState");
         if (mService != null) {
             try {
-                mService.setLockdownAdminConfiguredNetworks(admin, lockdown);
+                mService.setConfiguredNetworksLockdownState(admin, lockdown);
             } catch (RemoteException e) {
                 throw e.rethrowFromSystemServer();
             }
@@ -8797,11 +8868,11 @@
      * @throws SecurityException if caller is not a device owner or a profile owner of an
      *                           organization-owned managed profile.
      */
-    public boolean isLockdownAdminConfiguredNetworks(@NonNull ComponentName admin) {
-        throwIfParentInstance("setLockdownAdminConfiguredNetworks");
+    public boolean hasLockdownAdminConfiguredNetworks(@NonNull ComponentName admin) {
+        throwIfParentInstance("hasLockdownAdminConfiguredNetworks");
         if (mService != null) {
             try {
-                return mService.isLockdownAdminConfiguredNetworks(admin);
+                return mService.hasLockdownAdminConfiguredNetworks(admin);
             } catch (RemoteException e) {
                 throw e.rethrowFromSystemServer();
             }
@@ -8951,7 +9022,8 @@
      *
      * <strong>Note: Starting from Android R, apps should no longer call this method with the
      * setting {@link android.provider.Settings.Secure#LOCATION_MODE}, which is deprecated. Instead,
-     * device owners should call {@link #setLocationEnabled(ComponentName, boolean)}.
+     * device owners should call {@link #setLocationEnabled(ComponentName, boolean)}. This will be
+     * enforced for all apps targeting Android R or above.
      * </strong>
      *
      * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
@@ -8961,6 +9033,7 @@
      */
     public void setSecureSetting(@NonNull ComponentName admin, String setting, String value) {
         throwIfParentInstance("setSecureSetting");
+
         if (mService != null) {
             try {
                 mService.setSecureSetting(admin, setting, value);
@@ -9462,16 +9535,6 @@
      * {@link android.os.Build.VERSION_CODES#M} the app-op matching the permission is set to
      * {@link android.app.AppOpsManager#MODE_IGNORED}, but the permission stays granted.
      *
-     * NOTE: Starting from Android R, location-related permissions cannot be granted by the
-     * admin: Calling this method with {@link #PERMISSION_GRANT_STATE_GRANTED} for any of the
-     * following permissions will return false:
-     *
-     * <ul>
-     * <li>{@code ACCESS_FINE_LOCATION}</li>
-     * <li>{@code ACCESS_BACKGROUND_LOCATION}</li>
-     * <li>{@code ACCESS_COARSE_LOCATION}</li>
-     * </ul>
-     *
      * @param admin Which profile or device owner this request is associated with.
      * @param packageName The application to grant or revoke a permission to.
      * @param permission The permission to grant or revoke.
@@ -9838,6 +9901,7 @@
      * <li>{@link #setTrustAgentConfiguration}</li>
      * <li>{@link #getRequiredStrongAuthTimeout}</li>
      * <li>{@link #setRequiredStrongAuthTimeout}</li>
+     * <li>{@link #getAccountTypesWithManagementDisabled}</li>
      * </ul>
      * <p>
      * The following methods are supported for the parent instance but can only be called by the
@@ -9846,6 +9910,7 @@
      * <li>{@link #getPasswordComplexity}</li>
      * <li>{@link #setCameraDisabled}</li>
      * <li>{@link #getCameraDisabled}</li>
+     * <li>{@link #setAccountManagementDisabled(ComponentName, String, boolean)}</li>
      * </ul>
      *
      * <p>The following methods can be called by the profile owner of a managed profile
@@ -11542,13 +11607,16 @@
     }
 
     /**
-     * Sets the set of package names that are allowed to request user consent for cross-profile
-     * communication.
+     * Sets the set of admin-whitelisted package names that are allowed to request user consent for
+     * cross-profile communication.
      *
      * <p>Assumes that the caller is a profile owner and is the given {@code admin}.
      *
      * <p>Previous calls are overridden by each subsequent call to this method.
      *
+     * <p>Note that other apps may be able to request user consent for cross-profile communication
+     * if they have been explicitly whitelisted by the OEM.
+     *
      * <p>When previously-set cross-profile packages are missing from {@code packageNames}, the
      * app-op for {@code INTERACT_ACROSS_PROFILES} will be reset for those packages. This will not
      * occur for packages that are whitelisted by the OEM.
@@ -11570,15 +11638,18 @@
 
     /**
      * Returns the set of package names that the admin has previously set as allowed to request user
-     * consent for cross-profile communication, via {@link
-     * #setCrossProfilePackages(ComponentName, Set)}.
+     * consent for cross-profile communication, via {@link #setCrossProfilePackages(ComponentName,
+     * Set)}.
      *
      * <p>Assumes that the caller is a profile owner and is the given {@code admin}.
      *
+     * <p>Note that other apps not included in the returned set may be able to request user consent
+     * for cross-profile communication if they have been explicitly whitelisted by the OEM.
+     *
      * @param admin the {@link DeviceAdminReceiver} this request is associated with
      * @return the set of package names the admin has previously set as allowed to request user
-     * consent for cross-profile communication, via {@link
-     * #setCrossProfilePackages(ComponentName, Set)}
+     * consent for cross-profile communication, via {@link #setCrossProfilePackages(ComponentName,
+     * Set)}
      */
     public @NonNull Set<String> getCrossProfilePackages(@NonNull ComponentName admin) {
         throwIfParentInstance("getCrossProfilePackages");
@@ -11596,18 +11667,17 @@
      * Returns the combined set of the following:
      * <ul>
      * <li>The package names that the admin has previously set as allowed to request user consent
-     * for cross-profile communication, via {@link
-     * #setCrossProfilePackages(ComponentName, Set)}.</li>
+     * for cross-profile communication, via {@link #setCrossProfilePackages(ComponentName,
+     * Set)}.</li>
      * <li>The default package names set by the OEM that are allowed to request user consent for
-     * cross-profile communication without being explicitly enabled by the admin, via
-     * {@link com.android.internal.R.array#cross_profile_apps} and
-     * {@link com.android.internal.R.array#vendor_cross_profile_apps}.</li>
+     * cross-profile communication without being explicitly enabled by the admin, via {@link
+     * com.android.internal.R.array#cross_profile_apps} and {@link com.android.internal.R.array
+     * #vendor_cross_profile_apps}.</li>
      * </ul>
      *
      * @return the combined set of whitelisted package names set via
-     * {@link #setCrossProfilePackages(ComponentName, Set)},
-     * {@link com.android.internal.R.array#cross_profile_apps},
-     * and {@link com.android.internal.R.array#vendor_cross_profile_apps}.
+     * {@link #setCrossProfilePackages(ComponentName, Set)}, {@link com.android.internal.R.array
+     * #cross_profile_apps}, and {@link com.android.internal.R.array#vendor_cross_profile_apps}.
      *
      * @hide
      */
@@ -11630,9 +11700,9 @@
 
     /**
      * Returns the default package names set by the OEM that are allowed to request user consent for
-     * cross-profile communication without being explicitly enabled by the admin, via
-     * {@link com.android.internal.R.array#cross_profile_apps} and
-     * {@link com.android.internal.R.array#vendor_cross_profile_apps}.
+     * cross-profile communication without being explicitly enabled by the admin, via {@link
+     * com.android.internal.R.array#cross_profile_apps} and {@link com.android.internal.R.array
+     * #vendor_cross_profile_apps}.
      *
      * @hide
      */
@@ -11920,4 +11990,21 @@
         }
         return 0;
     }
+
+    /**
+     * Returns {@code true} when {@code userId} has a profile owner that is capable of resetting
+     * password in RUNNING_LOCKED state. For that it should have at least one direct boot aware
+     * component and have an active password reset token. Can only be called by the system.
+     * @hide
+     */
+    public boolean canProfileOwnerResetPasswordWhenLocked(int userId) {
+        if (mService != null) {
+            try {
+                return mService.canProfileOwnerResetPasswordWhenLocked(userId);
+            } catch (RemoteException re) {
+                throw re.rethrowFromSystemServer();
+            }
+        }
+        return false;
+    }
 }
diff --git a/core/java/android/app/admin/DevicePolicyManagerInternal.java b/core/java/android/app/admin/DevicePolicyManagerInternal.java
index e6c89d9..80fa871 100644
--- a/core/java/android/app/admin/DevicePolicyManagerInternal.java
+++ b/core/java/android/app/admin/DevicePolicyManagerInternal.java
@@ -187,4 +187,22 @@
      * @hide
      */
     public abstract List<String> getAllCrossProfilePackages();
+
+    /**
+     * Sends the {@code intent} to the packages with cross profile capabilities.
+     *
+     * <p>This means the application must have the {@code crossProfile} property and the
+     * corresponding permissions, defined by
+     * {@link
+     * android.content.pm.CrossProfileAppsInternal#verifyPackageHasInteractAcrossProfilePermission}.
+     *
+     * <p>Note: This method doesn't modify {@code intent} but copies it before use.
+     *
+     * @param intent Template for the intent sent to the package.
+     * @param parentHandle Handle of the user that will receive the intents.
+     * @param requiresPermission If false, all packages with the {@code crossProfile} property
+     *                           will receive the intent.
+     */
+    public abstract void broadcastIntentToCrossProfileManifestReceiversAsUser(Intent intent,
+            UserHandle parentHandle, boolean requiresPermission);
 }
diff --git a/core/java/android/app/admin/FactoryResetProtectionPolicy.java b/core/java/android/app/admin/FactoryResetProtectionPolicy.java
index ed74779..954db04 100644
--- a/core/java/android/app/admin/FactoryResetProtectionPolicy.java
+++ b/core/java/android/app/admin/FactoryResetProtectionPolicy.java
@@ -53,17 +53,17 @@
 
     private static final String KEY_FACTORY_RESET_PROTECTION_ACCOUNT =
             "factory_reset_protection_account";
-    private static final String KEY_FACTORY_RESET_PROTECTION_DISABLED =
-            "factory_reset_protection_disabled";
+    private static final String KEY_FACTORY_RESET_PROTECTION_ENABLED =
+            "factory_reset_protection_enabled";
     private static final String ATTR_VALUE = "value";
 
     private final List<String> mFactoryResetProtectionAccounts;
-    private final boolean mFactoryResetProtectionDisabled;
+    private final boolean mFactoryResetProtectionEnabled;
 
     private FactoryResetProtectionPolicy(List<String> factoryResetProtectionAccounts,
-            boolean factoryResetProtectionDisabled) {
+            boolean factoryResetProtectionEnabled) {
         mFactoryResetProtectionAccounts = factoryResetProtectionAccounts;
-        mFactoryResetProtectionDisabled = factoryResetProtectionDisabled;
+        mFactoryResetProtectionEnabled = factoryResetProtectionEnabled;
     }
 
     /**
@@ -74,10 +74,10 @@
     }
 
     /**
-     * Return whether factory reset protection for the device is disabled or not.
+     * Return whether factory reset protection for the device is enabled or not.
      */
-    public boolean isFactoryResetProtectionDisabled() {
-        return mFactoryResetProtectionDisabled;
+    public boolean isFactoryResetProtectionEnabled() {
+        return mFactoryResetProtectionEnabled;
     }
 
     /**
@@ -85,12 +85,13 @@
      */
     public static class Builder {
         private List<String> mFactoryResetProtectionAccounts;
-        private boolean mFactoryResetProtectionDisabled;
+        private boolean mFactoryResetProtectionEnabled;
 
         /**
          * Initialize a new Builder to construct a {@link FactoryResetProtectionPolicy}.
          */
         public Builder() {
+            mFactoryResetProtectionEnabled = true;
         };
 
         /**
@@ -113,18 +114,19 @@
         }
 
         /**
-         * Sets whether factory reset protection is disabled or not.
+         * Sets whether factory reset protection is enabled or not.
          * <p>
          * Once disabled, factory reset protection will not kick in all together when the device
          * goes through untrusted factory reset. This applies to both the consumer unlock flow and
-         * the admin account overrides via {@link #setFactoryResetProtectionAccounts}
+         * the admin account overrides via {@link #setFactoryResetProtectionAccounts}. By default,
+         * factory reset protection is enabled.
          *
-         * @param factoryResetProtectionDisabled Whether the policy is disabled or not.
+         * @param factoryResetProtectionEnabled Whether the policy is enabled or not.
          * @return the same Builder instance.
          */
         @NonNull
-        public Builder setFactoryResetProtectionDisabled(boolean factoryResetProtectionDisabled) {
-            mFactoryResetProtectionDisabled = factoryResetProtectionDisabled;
+        public Builder setFactoryResetProtectionEnabled(boolean factoryResetProtectionEnabled) {
+            mFactoryResetProtectionEnabled = factoryResetProtectionEnabled;
             return this;
         }
 
@@ -136,7 +138,7 @@
         @NonNull
         public FactoryResetProtectionPolicy build() {
             return new FactoryResetProtectionPolicy(mFactoryResetProtectionAccounts,
-                    mFactoryResetProtectionDisabled);
+                    mFactoryResetProtectionEnabled);
         }
     }
 
@@ -144,7 +146,7 @@
     public String toString() {
         return "FactoryResetProtectionPolicy{"
                 + "mFactoryResetProtectionAccounts=" + mFactoryResetProtectionAccounts
-                + ", mFactoryResetProtectionDisabled=" + mFactoryResetProtectionDisabled
+                + ", mFactoryResetProtectionEnabled=" + mFactoryResetProtectionEnabled
                 + '}';
     }
 
@@ -155,7 +157,7 @@
         for (String account: mFactoryResetProtectionAccounts) {
             dest.writeString(account);
         }
-        dest.writeBoolean(mFactoryResetProtectionDisabled);
+        dest.writeBoolean(mFactoryResetProtectionEnabled);
     }
 
     @Override
@@ -173,10 +175,10 @@
                     for (int i = 0; i < accountsCount; i++) {
                         factoryResetProtectionAccounts.add(in.readString());
                     }
-                    boolean factoryResetProtectionDisabled = in.readBoolean();
+                    boolean factoryResetProtectionEnabled = in.readBoolean();
 
                     return new FactoryResetProtectionPolicy(factoryResetProtectionAccounts,
-                            factoryResetProtectionDisabled);
+                            factoryResetProtectionEnabled);
                 }
 
                 @Override
@@ -195,8 +197,8 @@
     @Nullable
     public static FactoryResetProtectionPolicy readFromXml(@NonNull XmlPullParser parser) {
         try {
-            boolean factoryResetProtectionDisabled = Boolean.parseBoolean(
-                    parser.getAttributeValue(null, KEY_FACTORY_RESET_PROTECTION_DISABLED));
+            boolean factoryResetProtectionEnabled = Boolean.parseBoolean(
+                    parser.getAttributeValue(null, KEY_FACTORY_RESET_PROTECTION_ENABLED));
 
             List<String> factoryResetProtectionAccounts = new ArrayList<>();
             int outerDepth = parser.getDepth();
@@ -214,7 +216,7 @@
             }
 
             return new FactoryResetProtectionPolicy(factoryResetProtectionAccounts,
-                    factoryResetProtectionDisabled);
+                    factoryResetProtectionEnabled);
         } catch (XmlPullParserException | IOException e) {
             Log.w(LOG_TAG, "Reading from xml failed", e);
         }
@@ -225,8 +227,8 @@
      * @hide
      */
     public void writeToXml(@NonNull XmlSerializer out) throws IOException {
-        out.attribute(null, KEY_FACTORY_RESET_PROTECTION_DISABLED,
-                Boolean.toString(mFactoryResetProtectionDisabled));
+        out.attribute(null, KEY_FACTORY_RESET_PROTECTION_ENABLED,
+                Boolean.toString(mFactoryResetProtectionEnabled));
         for (String account : mFactoryResetProtectionAccounts) {
             out.startTag(null, KEY_FACTORY_RESET_PROTECTION_ACCOUNT);
             out.attribute(null, ATTR_VALUE, account);
diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl
index d2672eb..25c1e12 100644
--- a/core/java/android/app/admin/IDevicePolicyManager.aidl
+++ b/core/java/android/app/admin/IDevicePolicyManager.aidl
@@ -121,8 +121,8 @@
     void setCameraDisabled(in ComponentName who, boolean disabled, boolean parent);
     boolean getCameraDisabled(in ComponentName who, int userHandle, boolean parent);
 
-    void setScreenCaptureDisabled(in ComponentName who, boolean disabled);
-    boolean getScreenCaptureDisabled(in ComponentName who, int userHandle);
+    void setScreenCaptureDisabled(in ComponentName who, boolean disabled, boolean parent);
+    boolean getScreenCaptureDisabled(in ComponentName who, int userHandle, boolean parent);
 
     void setKeyguardDisabledFeatures(in ComponentName who, int which, boolean parent);
     int getKeyguardDisabledFeatures(in ComponentName who, int userHandle, boolean parent);
@@ -248,9 +248,9 @@
     int enableSystemAppWithIntent(in ComponentName admin, in String callerPackage, in Intent intent);
     boolean installExistingPackage(in ComponentName admin, in String callerPackage, in String packageName);
 
-    void setAccountManagementDisabled(in ComponentName who, in String accountType, in boolean disabled);
+    void setAccountManagementDisabled(in ComponentName who, in String accountType, in boolean disabled, in boolean parent);
     String[] getAccountTypesWithManagementDisabled();
-    String[] getAccountTypesWithManagementDisabledAsUser(int userId);
+    String[] getAccountTypesWithManagementDisabledAsUser(int userId, in boolean parent);
 
     void setSecondaryLockscreenEnabled(in ComponentName who, boolean enabled);
     boolean isSecondaryLockscreenEnabled(int userId);
@@ -266,8 +266,8 @@
     void setSystemSetting(in ComponentName who, in String setting, in String value);
     void setSecureSetting(in ComponentName who, in String setting, in String value);
 
-    void setLockdownAdminConfiguredNetworks(in ComponentName who, boolean lockdown);
-    boolean isLockdownAdminConfiguredNetworks(in ComponentName who);
+    void setConfiguredNetworksLockdownState(in ComponentName who, boolean lockdown);
+    boolean hasLockdownAdminConfiguredNetworks(in ComponentName who);
 
     void setLocationEnabled(in ComponentName who, boolean locationEnabled);
     void requestSetLocationProviderAllowed(in ComponentName who, in String provider, boolean providerAllowed);
@@ -478,4 +478,5 @@
 
     long getManagedProfileMaximumTimeOff(in ComponentName admin);
     void setManagedProfileMaximumTimeOff(in ComponentName admin, long timeoutMs);
+    boolean canProfileOwnerResetPasswordWhenLocked(in int userId);
 }
diff --git a/core/java/android/app/admin/IKeyguardCallback.aidl b/core/java/android/app/admin/IKeyguardCallback.aidl
index 81e7d4d..856033d 100644
--- a/core/java/android/app/admin/IKeyguardCallback.aidl
+++ b/core/java/android/app/admin/IKeyguardCallback.aidl
@@ -15,13 +15,13 @@
  */
 package android.app.admin;
 
-import android.view.SurfaceControl;
+import android.view.SurfaceControlViewHost;
 
 /**
  * Internal IPC interface for informing the keyguard of events on the secondary lockscreen.
  * @hide
  */
 interface IKeyguardCallback {
-    oneway void onSurfaceControlCreated(in SurfaceControl remoteSurfaceControl);
+    oneway void onRemoteContentReady(in SurfaceControlViewHost.SurfacePackage surfacePackage);
     oneway void onDismiss();
 }
diff --git a/core/java/android/app/compat/ChangeIdStateCache.java b/core/java/android/app/compat/ChangeIdStateCache.java
new file mode 100644
index 0000000..9ef63f6
--- /dev/null
+++ b/core/java/android/app/compat/ChangeIdStateCache.java
@@ -0,0 +1,86 @@
+/*
+ * 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.app.compat;
+
+import android.app.PropertyInvalidatedCache;
+import android.content.Context;
+import android.os.Binder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+
+import com.android.internal.compat.IPlatformCompat;
+
+/**
+ * Handles caching of calls to {@link com.android.internal.compat.IPlatformCompat}
+ * @hide
+ */
+public final class ChangeIdStateCache
+        extends PropertyInvalidatedCache<ChangeIdStateQuery, Boolean> {
+    private static final String CACHE_KEY = "cache_key.is_compat_change_enabled";
+    private static final int MAX_ENTRIES = 20;
+    private static boolean sDisabled = false;
+
+    /** @hide */
+    public ChangeIdStateCache() {
+        super(MAX_ENTRIES, CACHE_KEY);
+    }
+
+    /**
+     * Disable cache.
+     *
+     * <p>Should only be used in unit tests.
+     * @hide
+     */
+    public static void disable() {
+        sDisabled = true;
+    }
+
+    /**
+     * Invalidate the cache.
+     *
+     * <p>Can only be called by the system server process.
+     * @hide
+     */
+    public static void invalidate() {
+        if (!sDisabled) {
+            PropertyInvalidatedCache.invalidateCache(CACHE_KEY);
+        }
+    }
+
+    @Override
+    protected Boolean recompute(ChangeIdStateQuery query) {
+        IPlatformCompat platformCompat = IPlatformCompat.Stub.asInterface(
+                ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
+        final long token = Binder.clearCallingIdentity();
+        try {
+            if (query.type == ChangeIdStateQuery.QUERY_BY_PACKAGE_NAME) {
+                return platformCompat.isChangeEnabledByPackageName(query.changeId,
+                                                                   query.packageName,
+                                                                   query.userId);
+            } else if (query.type == ChangeIdStateQuery.QUERY_BY_UID) {
+                return platformCompat.isChangeEnabledByUid(query.changeId, query.uid);
+            } else {
+                throw new IllegalArgumentException("Invalid query type: " + query.type);
+            }
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+        throw new IllegalStateException("Could not recompute value!");
+    }
+}
diff --git a/core/java/android/app/compat/ChangeIdStateQuery.java b/core/java/android/app/compat/ChangeIdStateQuery.java
new file mode 100644
index 0000000..2c4c120
--- /dev/null
+++ b/core/java/android/app/compat/ChangeIdStateQuery.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app.compat;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Objects;
+
+
+/**
+ * A key type for caching calls to {@link com.android.internal.compat.IPlatformCompat}
+ *
+ * <p>For {@link com.android.internal.compat.IPlatformCompat#isChangeEnabledByPackageName}
+ * and {@link com.android.internal.compat.IPlatformCompat#isChangeEnabledByUid}
+ *
+ * @hide
+ */
+final class ChangeIdStateQuery {
+
+    static final int QUERY_BY_PACKAGE_NAME = 0;
+    static final int QUERY_BY_UID = 1;
+    @IntDef({QUERY_BY_PACKAGE_NAME, QUERY_BY_UID})
+    @Retention(RetentionPolicy.SOURCE)
+    @interface QueryType {}
+
+    public @QueryType int type;
+    public long changeId;
+    public String packageName;
+    public int uid;
+    public int userId;
+
+    private ChangeIdStateQuery(@QueryType int type, long changeId, String packageName,
+                               int uid, int userId) {
+        this.type = type;
+        this.changeId = changeId;
+        this.packageName = packageName;
+        this.uid = uid;
+        this.userId = userId;
+    }
+
+    static ChangeIdStateQuery byPackageName(long changeId, @NonNull String packageName,
+                                            int userId) {
+        return new ChangeIdStateQuery(QUERY_BY_PACKAGE_NAME, changeId, packageName, 0, userId);
+    }
+
+    static ChangeIdStateQuery byUid(long changeId, int uid) {
+        return new ChangeIdStateQuery(QUERY_BY_UID, changeId, null, uid, 0);
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (this == other) {
+            return true;
+        }
+        if ((other == null) || !(other instanceof ChangeIdStateQuery)) {
+            return false;
+        }
+        final ChangeIdStateQuery that = (ChangeIdStateQuery) other;
+        return this.type == that.type
+            && this.changeId == that.changeId
+            && Objects.equals(this.packageName, that.packageName)
+            && this.uid == that.uid
+            && this.userId == that.userId;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(type, changeId, packageName, uid, userId);
+    }
+}
diff --git a/core/java/android/app/compat/CompatChanges.java b/core/java/android/app/compat/CompatChanges.java
index 5b36789..0d5e45f 100644
--- a/core/java/android/app/compat/CompatChanges.java
+++ b/core/java/android/app/compat/CompatChanges.java
@@ -19,13 +19,8 @@
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.compat.Compatibility;
-import android.content.Context;
-import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.os.UserHandle;
 
-import com.android.internal.compat.IPlatformCompat;
-
 /**
  * CompatChanges APIs - to be used by platform code only (including mainline
  * modules).
@@ -34,6 +29,7 @@
  */
 @SystemApi
 public final class CompatChanges {
+    private static final ChangeIdStateCache QUERY_CACHE = new ChangeIdStateCache();
     private CompatChanges() {}
 
     /**
@@ -68,14 +64,8 @@
      */
     public static boolean isChangeEnabled(long changeId, @NonNull String packageName,
             @NonNull UserHandle user) {
-        IPlatformCompat platformCompat = IPlatformCompat.Stub.asInterface(
-                ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
-        try {
-            return platformCompat.isChangeEnabledByPackageName(changeId, packageName,
-                    user.getIdentifier());
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
+        return QUERY_CACHE.query(ChangeIdStateQuery.byPackageName(changeId, packageName,
+                                                           user.getIdentifier()));
     }
 
     /**
@@ -97,12 +87,7 @@
      * @return {@code true} if the change is enabled for the current app.
      */
     public static boolean isChangeEnabled(long changeId, int uid) {
-        IPlatformCompat platformCompat = IPlatformCompat.Stub.asInterface(
-                ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
-        try {
-            return platformCompat.isChangeEnabledByUid(changeId, uid);
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
+        return QUERY_CACHE.query(ChangeIdStateQuery.byUid(changeId, uid));
     }
+
 }
diff --git a/core/java/android/app/compat/TEST_MAPPING b/core/java/android/app/compat/TEST_MAPPING
new file mode 100644
index 0000000..c047df5
--- /dev/null
+++ b/core/java/android/app/compat/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+    "imports": [
+        {
+            "path": "frameworks/base/services/core/java/com/android/services/compat"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/core/java/android/app/prediction/AppPredictionContext.java b/core/java/android/app/prediction/AppPredictionContext.java
index 8fc7e8d..d14238b 100644
--- a/core/java/android/app/prediction/AppPredictionContext.java
+++ b/core/java/android/app/prediction/AppPredictionContext.java
@@ -100,16 +100,6 @@
                 && mPackageName.equals(other.mPackageName);
     }
 
-    @NonNull
-    @Override
-    public String toString() {
-        return new StringBuilder(this.getClass().getSimpleName())
-                .append("[mUiSurface=").append(mUiSurface)
-                .append(",mPackageName=").append(mPackageName)
-                .append(",mPredictedTargetCount=").append(mPredictedTargetCount)
-                .append(",mExtras=").append(mExtras.toString()).append("]").toString();
-    }
-
     @Override
     public int describeContents() {
         return 0;
diff --git a/core/java/android/app/prediction/AppPredictionSessionId.java b/core/java/android/app/prediction/AppPredictionSessionId.java
index e5e06f8..876bafd 100644
--- a/core/java/android/app/prediction/AppPredictionSessionId.java
+++ b/core/java/android/app/prediction/AppPredictionSessionId.java
@@ -22,6 +22,8 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
+import java.util.Objects;
+
 /**
  * The id for an app prediction session. See {@link AppPredictor}.
  *
@@ -32,18 +34,28 @@
 public final class AppPredictionSessionId implements Parcelable {
 
     private final String mId;
+    private final int mUserId;
 
     /**
      * Creates a new id for a prediction session.
      *
      * @hide
      */
-    public AppPredictionSessionId(@NonNull String id) {
+    public AppPredictionSessionId(@NonNull final String id, final int userId) {
         mId = id;
+        mUserId = userId;
     }
 
     private AppPredictionSessionId(Parcel p) {
         mId = p.readString();
+        mUserId = p.readInt();
+    }
+
+    /**
+     * @hide
+     */
+    public int getUserId() {
+        return mUserId;
     }
 
     @Override
@@ -51,17 +63,17 @@
         if (!getClass().equals(o != null ? o.getClass() : null)) return false;
 
         AppPredictionSessionId other = (AppPredictionSessionId) o;
-        return mId.equals(other.mId);
+        return mId.equals(other.mId) && mUserId == other.mUserId;
     }
 
     @Override
     public @NonNull String toString() {
-        return mId;
+        return mId + "," + mUserId;
     }
 
     @Override
     public int hashCode() {
-        return mId.hashCode();
+        return Objects.hash(mId, mUserId);
     }
 
     @Override
@@ -72,6 +84,7 @@
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeString(mId);
+        dest.writeInt(mUserId);
     }
 
     public static final @android.annotation.NonNull Parcelable.Creator<AppPredictionSessionId> CREATOR =
diff --git a/core/java/android/app/prediction/AppPredictor.java b/core/java/android/app/prediction/AppPredictor.java
index cd635d6..f0eedf3 100644
--- a/core/java/android/app/prediction/AppPredictor.java
+++ b/core/java/android/app/prediction/AppPredictor.java
@@ -96,7 +96,7 @@
         IBinder b = ServiceManager.getService(Context.APP_PREDICTION_SERVICE);
         mPredictionManager = IPredictionManager.Stub.asInterface(b);
         mSessionId = new AppPredictionSessionId(
-                context.getPackageName() + ":" + UUID.randomUUID().toString());
+                context.getPackageName() + ":" + UUID.randomUUID().toString(), context.getUserId());
         try {
             mPredictionManager.createPredictionSession(predictionContext, mSessionId);
         } catch (RemoteException e) {
diff --git a/core/java/android/app/role/RoleManager.java b/core/java/android/app/role/RoleManager.java
index ea66fd47..db4f1de 100644
--- a/core/java/android/app/role/RoleManager.java
+++ b/core/java/android/app/role/RoleManager.java
@@ -90,6 +90,7 @@
      * The name of the dialer role.
      *
      * @see Intent#ACTION_DIAL
+     * @see android.telecom.InCallService
      */
     public static final String ROLE_DIALER = "android.app.role.DIALER";
 
diff --git a/core/java/android/app/usage/NetworkStatsManager.java b/core/java/android/app/usage/NetworkStatsManager.java
index 9c4a8f4..5b98188 100644
--- a/core/java/android/app/usage/NetworkStatsManager.java
+++ b/core/java/android/app/usage/NetworkStatsManager.java
@@ -526,15 +526,17 @@
     }
 
     /**
-     * Registers a custom provider of {@link android.net.NetworkStats} to combine the network
-     * statistics that cannot be seen by the kernel to system. To unregister, invoke
-     * {@link NetworkStatsProviderCallback#unregister()}.
+     * Registers a custom provider of {@link android.net.NetworkStats} to provide network statistics
+     * to the system. To unregister, invoke {@link NetworkStatsProviderCallback#unregister()}.
+     * Note that no de-duplication of statistics between providers is performed, so each provider
+     * must only report network traffic that is not being reported by any other provider.
      *
-     * @param tag a human readable identifier of the custom network stats provider.
-     * @param provider a custom implementation of {@link AbstractNetworkStatsProvider} that needs to
-     *                 be registered to the system.
+     * @param tag a human readable identifier of the custom network stats provider. This is only
+     *            used for debugging.
+     * @param provider the subclass of {@link AbstractNetworkStatsProvider} that needs to be
+     *                 registered to the system.
      * @return a {@link NetworkStatsProviderCallback}, which can be used to report events to the
-     *         system.
+     *         system or unregister the provider.
      * @hide
      */
     @SystemApi
diff --git a/core/java/android/app/usage/UsageEvents.java b/core/java/android/app/usage/UsageEvents.java
index ab71e73..0f999ad 100644
--- a/core/java/android/app/usage/UsageEvents.java
+++ b/core/java/android/app/usage/UsageEvents.java
@@ -41,6 +41,43 @@
     /** @hide */
     public static final String INSTANT_APP_CLASS_NAME = "android.instant_class";
 
+    /** @hide */
+    public static final String OBFUSCATED_NOTIFICATION_CHANNEL_ID = "unknown_channel_id";
+
+    /**
+     * Flag: indicates to not obfuscate or hide any usage event data when being queried.
+     * @hide
+     */
+    public static final int SHOW_ALL_EVENT_DATA = 0x00000000;
+
+    /**
+     * Flag: indicates to obfuscate package and class names for instant apps when querying usage
+     * events.
+     * @hide
+     */
+    public static final int OBFUSCATE_INSTANT_APPS = 0x00000001;
+
+    /**
+     * Flag: indicates to hide all {@link Event#SHORTCUT_INVOCATION} events when querying usage
+     * events.
+     * @hide
+     */
+    public static final int HIDE_SHORTCUT_EVENTS = 0x00000002;
+
+    /**
+     * Flag: indicates to obfuscate the notification channel id for all notification events,
+     * such as {@link Event#NOTIFICATION_SEEN} and {@link Event#NOTIFICATION_INTERRUPTION} events,
+     * when querying usage events.
+     * @hide
+     */
+    public static final int OBFUSCATE_NOTIFICATION_EVENTS = 0x00000004;
+
+    /**
+     * Flag: indicates to hide all {@link Event#LOCUS_ID_SET} events when querying usage events.
+     * @hide
+     */
+    public static final int HIDE_LOCUS_EVENTS = 0x00000008;
+
     /**
      * An event representing a state change for a component.
      */
@@ -627,6 +664,13 @@
             return ret;
         }
 
+        /** @hide */
+        public Event getObfuscatedNotificationEvent() {
+            final Event ret = new Event(this);
+            ret.mNotificationChannelId = OBFUSCATED_NOTIFICATION_CHANNEL_ID;
+            return ret;
+        }
+
         /**
          * Returns the locusId for this event if the event is of type {@link #LOCUS_ID_SET},
          * otherwise it returns null.
diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java
index 5668944..2c701b4 100644
--- a/core/java/android/app/usage/UsageStatsManager.java
+++ b/core/java/android/app/usage/UsageStatsManager.java
@@ -599,7 +599,8 @@
     /**
      * Returns whether the specified app is currently considered inactive. This will be true if the
      * app hasn't been used directly or indirectly for a period of time defined by the system. This
-     * could be of the order of several hours or days.
+     * could be of the order of several hours or days. Apps are not considered inactive when the
+     * device is charging.
      * @param packageName The package name of the app to query
      * @return whether the app is currently considered inactive
      */
diff --git a/core/java/android/bluetooth/BluetoothA2dpSink.java b/core/java/android/bluetooth/BluetoothA2dpSink.java
index ee2cc6d..ab49230 100755
--- a/core/java/android/bluetooth/BluetoothA2dpSink.java
+++ b/core/java/android/bluetooth/BluetoothA2dpSink.java
@@ -66,7 +66,7 @@
      */
     @SystemApi
     @SuppressLint("ActionValue")
-    @RequiresPermission(Manifest.permission.BLUETOOTH)
+    @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
     public static final String ACTION_CONNECTION_STATE_CHANGED =
             "android.bluetooth.a2dp-sink.profile.action.CONNECTION_STATE_CHANGED";
 
@@ -296,7 +296,7 @@
      * @hide
      */
     @SystemApi
-    @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+    @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
     public boolean setConnectionPolicy(@Nullable BluetoothDevice device,
             @ConnectionPolicy int connectionPolicy) {
         if (DBG) log("setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
@@ -345,7 +345,7 @@
      * @hide
      */
     @SystemApi
-    @RequiresPermission(Manifest.permission.BLUETOOTH)
+    @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
     public @ConnectionPolicy int getConnectionPolicy(@Nullable BluetoothDevice device) {
         if (VDBG) log("getConnectionPolicy(" + device + ")");
         final IBluetoothA2dpSink service = getService();
@@ -370,7 +370,7 @@
      * @hide
      */
     @SystemApi
-    @RequiresPermission(Manifest.permission.BLUETOOTH)
+    @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
     public boolean isAudioPlaying(@Nullable BluetoothDevice device) {
         final IBluetoothA2dpSink service = getService();
         if (service != null && isEnabled() && isValidDevice(device)) {
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 01ccb86..66bfcbd 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -26,6 +26,7 @@
 import android.annotation.SdkConstant.SdkConstantType;
 import android.annotation.SystemApi;
 import android.app.ActivityThread;
+import android.app.PropertyInvalidatedCache;
 import android.bluetooth.BluetoothProfile.ConnectionPolicy;
 import android.bluetooth.le.BluetoothLeAdvertiser;
 import android.bluetooth.le.BluetoothLeScanner;
@@ -994,6 +995,37 @@
         return false;
     }
 
+    private static final String BLUETOOTH_GET_STATE_CACHE_PROPERTY = "cache_key.bluetooth.get_state";
+
+    private final PropertyInvalidatedCache<Void, Integer> mBluetoothGetStateCache =
+            new PropertyInvalidatedCache<Void, Integer>(
+                8, BLUETOOTH_GET_STATE_CACHE_PROPERTY) {
+                @Override
+                protected Integer recompute(Void query) {
+                    try {
+                        mServiceLock.readLock().lock();
+                        if (mService != null) {
+                            return mService.getState();
+                        }
+                    } catch (RemoteException e) {
+                        Log.e(TAG, "", e);
+                    } finally {
+                        mServiceLock.readLock().unlock();
+                    }
+                    return BluetoothAdapter.STATE_OFF;
+                }
+            };
+
+    /** @hide */
+    public void disableBluetoothGetStateCache() {
+        mBluetoothGetStateCache.disableLocal();
+    }
+
+    /** @hide */
+    public static void invalidateBluetoothGetStateCache() {
+        PropertyInvalidatedCache.invalidateCache(BLUETOOTH_GET_STATE_CACHE_PROPERTY);
+    }
+
     /**
      * Get the current state of the local Bluetooth adapter.
      * <p>Possible return values are
@@ -1007,18 +1039,7 @@
     @RequiresPermission(Manifest.permission.BLUETOOTH)
     @AdapterState
     public int getState() {
-        int state = BluetoothAdapter.STATE_OFF;
-
-        try {
-            mServiceLock.readLock().lock();
-            if (mService != null) {
-                state = mService.getState();
-            }
-        } catch (RemoteException e) {
-            Log.e(TAG, "", e);
-        } finally {
-            mServiceLock.readLock().unlock();
-        }
+        int state = mBluetoothGetStateCache.query(null);
 
         // Consider all internal states as OFF
         if (state == BluetoothAdapter.STATE_BLE_ON || state == BluetoothAdapter.STATE_BLE_TURNING_ON
@@ -1056,18 +1077,7 @@
     @UnsupportedAppUsage(publicAlternatives = "Use {@link #getState()} instead to determine "
             + "whether you can use BLE & BT classic.")
     public int getLeState() {
-        int state = BluetoothAdapter.STATE_OFF;
-
-        try {
-            mServiceLock.readLock().lock();
-            if (mService != null) {
-                state = mService.getState();
-            }
-        } catch (RemoteException e) {
-            Log.e(TAG, "", e);
-        } finally {
-            mServiceLock.readLock().unlock();
-        }
+        int state = mBluetoothGetStateCache.query(null);
 
         if (VDBG) {
             Log.d(TAG, "getLeState() returning " + BluetoothAdapter.nameForState(state));
@@ -1960,6 +1970,38 @@
         }
     }
 
+    private static final String BLUETOOTH_FILTERING_CACHE_PROPERTY =
+            "cache_key.bluetooth.is_offloaded_filtering_supported";
+    private final PropertyInvalidatedCache<Void, Boolean> mBluetoothFilteringCache =
+            new PropertyInvalidatedCache<Void, Boolean>(
+                8, BLUETOOTH_FILTERING_CACHE_PROPERTY) {
+                @Override
+                protected Boolean recompute(Void query) {
+                    try {
+                        mServiceLock.readLock().lock();
+                        if (mService != null) {
+                            return mService.isOffloadedFilteringSupported();
+                        }
+                    } catch (RemoteException e) {
+                        Log.e(TAG, "failed to get isOffloadedFilteringSupported, error: ", e);
+                    } finally {
+                        mServiceLock.readLock().unlock();
+                    }
+                    return false;
+
+                }
+            };
+
+    /** @hide */
+    public void disableIsOffloadedFilteringSupportedCache() {
+        mBluetoothFilteringCache.disableLocal();
+    }
+
+    /** @hide */
+    public static void invalidateIsOffloadedFilteringSupportedCache() {
+        PropertyInvalidatedCache.invalidateCache(BLUETOOTH_FILTERING_CACHE_PROPERTY);
+    }
+
     /**
      * Return true if offloaded filters are supported
      *
@@ -1969,17 +2011,7 @@
         if (!getLeAccess()) {
             return false;
         }
-        try {
-            mServiceLock.readLock().lock();
-            if (mService != null) {
-                return mService.isOffloadedFilteringSupported();
-            }
-        } catch (RemoteException e) {
-            Log.e(TAG, "failed to get isOffloadedFilteringSupported, error: ", e);
-        } finally {
-            mServiceLock.readLock().unlock();
-        }
-        return false;
+        return mBluetoothFilteringCache.query(null);
     }
 
     /**
@@ -2351,6 +2383,43 @@
         return BluetoothAdapter.STATE_DISCONNECTED;
     }
 
+    private static final String BLUETOOTH_PROFILE_CACHE_PROPERTY =
+            "cache_key.bluetooth.get_profile_connection_state";
+    private final PropertyInvalidatedCache<Integer, Integer>
+            mGetProfileConnectionStateCache =
+            new PropertyInvalidatedCache<Integer, Integer>(
+                8, BLUETOOTH_PROFILE_CACHE_PROPERTY) {
+                @Override
+                protected Integer recompute(Integer query) {
+                    try {
+                        mServiceLock.readLock().lock();
+                        if (mService != null) {
+                            return mService.getProfileConnectionState(query);
+                        }
+                    } catch (RemoteException e) {
+                        Log.e(TAG, "getProfileConnectionState:", e);
+                    } finally {
+                        mServiceLock.readLock().unlock();
+                    }
+                    return BluetoothProfile.STATE_DISCONNECTED;
+                }
+                @Override
+                public String queryToString(Integer query) {
+                    return String.format("getProfileConnectionState(profile=\"%d\")",
+                                         query);
+                }
+            };
+
+    /** @hide */
+    public void disableGetProfileConnectionStateCache() {
+        mGetProfileConnectionStateCache.disableLocal();
+    }
+
+    /** @hide */
+    public static void invalidateGetProfileConnectionStateCache() {
+        PropertyInvalidatedCache.invalidateCache(BLUETOOTH_PROFILE_CACHE_PROPERTY);
+    }
+
     /**
      * Get the current connection state of a profile.
      * This function can be used to check whether the local Bluetooth adapter
@@ -2368,17 +2437,7 @@
         if (getState() != STATE_ON) {
             return BluetoothProfile.STATE_DISCONNECTED;
         }
-        try {
-            mServiceLock.readLock().lock();
-            if (mService != null) {
-                return mService.getProfileConnectionState(profile);
-            }
-        } catch (RemoteException e) {
-            Log.e(TAG, "getProfileConnectionState:", e);
-        } finally {
-            mServiceLock.readLock().unlock();
-        }
-        return BluetoothProfile.STATE_DISCONNECTED;
+        return mGetProfileConnectionStateCache.query(new Integer(profile));
     }
 
     /**
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index 5b60b85..3e1a480 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -25,6 +25,7 @@
 import android.annotation.SdkConstant.SdkConstantType;
 import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
+import android.app.PropertyInvalidatedCache;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.os.Handler;
@@ -1299,6 +1300,31 @@
         return false;
     }
 
+    private static final String BLUETOOTH_BONDING_CACHE_PROPERTY =
+            "cache_key.bluetooth.get_bond_state";
+    private final PropertyInvalidatedCache<BluetoothDevice, Integer> mBluetoothBondCache =
+            new PropertyInvalidatedCache<BluetoothDevice, Integer>(
+                8, BLUETOOTH_BONDING_CACHE_PROPERTY) {
+                @Override
+                protected Integer recompute(BluetoothDevice query) {
+                    try {
+                        return sService.getBondState(query);
+                    } catch (RemoteException e) {
+                        throw e.rethrowAsRuntimeException();
+                    }
+                }
+            };
+
+    /** @hide */
+    public void disableBluetoothGetBondStateCache() {
+        mBluetoothBondCache.disableLocal();
+    }
+
+    /** @hide */
+    public static void invalidateBluetoothGetBondStateCache() {
+        PropertyInvalidatedCache.invalidateCache(BLUETOOTH_BONDING_CACHE_PROPERTY);
+    }
+
     /**
      * Get the bond state of the remote device.
      * <p>Possible values for the bond state are:
@@ -1316,9 +1342,13 @@
             return BOND_NONE;
         }
         try {
-            return service.getBondState(this);
-        } catch (RemoteException e) {
-            Log.e(TAG, "", e);
+            return mBluetoothBondCache.query(this);
+        } catch (RuntimeException e) {
+            if (e.getCause() instanceof RemoteException) {
+                Log.e(TAG, "", e);
+            } else {
+                throw e;
+            }
         }
         return BOND_NONE;
     }
diff --git a/core/java/android/bluetooth/BluetoothPbap.java b/core/java/android/bluetooth/BluetoothPbap.java
index e07ca52..1f89ddf 100644
--- a/core/java/android/bluetooth/BluetoothPbap.java
+++ b/core/java/android/bluetooth/BluetoothPbap.java
@@ -38,9 +38,6 @@
 import java.util.List;
 
 /**
- * The Android Bluetooth API is not finalized, and *will* change. Use at your
- * own risk.
- *
  * Public API for controlling the Bluetooth Pbap Service. This includes
  * Bluetooth Phone book Access profile.
  * BluetoothPbap is a proxy object for controlling the Bluetooth Pbap
@@ -56,6 +53,11 @@
  * notification when it is bound, this is especially important if you wish to
  * immediately call methods on BluetoothPbap after construction.
  *
+ * To get an instance of the BluetoothPbap class, you can call
+ * {@link BluetoothAdapter#getProfileProxy(Context, ServiceListener, int)} with the final param
+ * being {@link BluetoothProfile#PBAP}. The ServiceListener should be able to get the instance of
+ * BluetoothPbap in {@link android.bluetooth.BluetoothProfile.ServiceListener#onServiceConnected}.
+ *
  * Android only supports one connected Bluetooth Pce at a time.
  *
  * @hide
@@ -87,6 +89,7 @@
      */
     @SuppressLint("ActionValue")
     @SystemApi
+    @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
     @SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION)
     public static final String ACTION_CONNECTION_STATE_CHANGED =
             "android.bluetooth.pbap.profile.action.CONNECTION_STATE_CHANGED";
@@ -235,7 +238,8 @@
      */
     @SystemApi
     @Override
-    public int getConnectionState(@Nullable BluetoothDevice device) {
+    @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+    public @BtProfileState int getConnectionState(@Nullable BluetoothDevice device) {
         log("getConnectionState: device=" + device);
         try {
             final IBluetoothPbap service = mService;
@@ -287,7 +291,7 @@
      * @hide
      */
     @SystemApi
-    @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+    @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
     public boolean setConnectionPolicy(@NonNull BluetoothDevice device,
             @ConnectionPolicy int connectionPolicy) {
         if (DBG) log("setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
diff --git a/core/java/android/companion/IFindDeviceCallback.aidl b/core/java/android/companion/IFindDeviceCallback.aidl
index 4e9fa19..405277b 100644
--- a/core/java/android/companion/IFindDeviceCallback.aidl
+++ b/core/java/android/companion/IFindDeviceCallback.aidl
@@ -21,6 +21,6 @@
 /** @hide */
 interface IFindDeviceCallback {
     @UnsupportedAppUsage
-    void onSuccess(in PendingIntent launcher);
-    void onFailure(in CharSequence reason);
+    oneway void onSuccess(in PendingIntent launcher);
+    oneway void onFailure(in CharSequence reason);
 }
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index f32a4ab..0e0161f 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -700,6 +700,27 @@
     /** @hide */
     public static final String REMOTE_CALLBACK_RESULT = "result";
 
+    /**
+     * How long we wait for an attached process to publish its content providers
+     * before we decide it must be hung.
+     * @hide
+     */
+    public static final int CONTENT_PROVIDER_PUBLISH_TIMEOUT_MILLIS = 10 * 1000;
+
+    /**
+     * How long we wait for an provider to be published. Should be longer than
+     * {@link #CONTENT_PROVIDER_PUBLISH_TIMEOUT_MILLIS}.
+     * @hide
+     */
+    public static final int CONTENT_PROVIDER_WAIT_TIMEOUT_MILLIS =
+            CONTENT_PROVIDER_PUBLISH_TIMEOUT_MILLIS + 10 * 1000;
+
+    // Should be >= {@link #CONTENT_PROVIDER_WAIT_TIMEOUT_MILLIS}, because that's how
+    // long ActivityManagerService is giving a content provider to get published if a new process
+    // needs to be started for that.
+    private static final int GET_TYPE_TIMEOUT_MILLIS =
+            CONTENT_PROVIDER_WAIT_TIMEOUT_MILLIS + 5 * 1000;
+
     public ContentResolver(@Nullable Context context) {
         this(context, null);
     }
@@ -849,8 +870,6 @@
         }
     }
 
-    private static final int GET_TYPE_TIMEOUT_MILLIS = 3000;
-
     private static class GetTypeResultListener implements RemoteCallback.OnResultListener {
         @GuardedBy("this")
         public boolean done;
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 249e582..ae12de0 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -3457,6 +3457,7 @@
             CONSUMER_IR_SERVICE,
             //@hide: TRUST_SERVICE,
             TV_INPUT_SERVICE,
+            //@hide: TV_TUNER_RESOURCE_MGR_SERVICE,
             //@hide: NETWORK_SCORE_SERVICE,
             USAGE_STATS_SERVICE,
             MEDIA_SESSION_SERVICE,
@@ -4063,16 +4064,16 @@
 
     /**
      * Use with {@link #getSystemService(String)} to retrieve a
-     * {@link android.net.wifi.WifiCondManager} for handling management of the Wi-Fi control
-     * daemon.
+     * {@link android.net.wifi.wificond.WifiNl80211Manager} for handling management of the
+     * Wi-Fi nl802.11 daemon (wificond).
      *
      * @see #getSystemService(String)
-     * @see android.net.wifi.WifiCondManager
+     * @see android.net.wifi.wificond.WifiNl80211Manager
      * @hide
      */
     @SystemApi
     @SuppressLint("ServiceName")
-    public static final String WIFI_COND_SERVICE = "wificond";
+    public static final String WIFI_NL80211_SERVICE = "wifinl80211";
 
     /**
      * Use with {@link #getSystemService(String)} to retrieve a {@link
@@ -4757,6 +4758,17 @@
     public static final String TV_INPUT_SERVICE = "tv_input";
 
     /**
+     * Use with {@link #getSystemService(String)} to retrieve a
+     * {@link android.media.tv.TunerResourceManager} for interacting with TV
+     * tuner resources on the device.
+     *
+     * @see #getSystemService(String)
+     * @see android.media.tv.TunerResourceManager
+     * @hide
+     */
+    public static final String TV_TUNER_RESOURCE_MGR_SERVICE = "tv_tuner_resource_mgr";
+
+    /**
      * {@link android.net.NetworkScoreManager} for managing network scoring.
      * @see #getSystemService(String)
      * @see android.net.NetworkScoreManager
@@ -5086,10 +5098,11 @@
 
     /**
      * Use with {@link #getSystemService(String)} to retrieve an
-     * AppSearchManager for indexing and querying app data managed
-     * by the system.
+     * {@link android.app.appsearch.AppSearchManager} for
+     * indexing and querying app data managed by the system.
      *
      * @see #getSystemService(String)
+     * @hide
      */
     public static final String APP_SEARCH_SERVICE = "app_search";
 
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 6f8a99f..acc4cb0 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -4289,7 +4289,9 @@
      * intent filter in their manifests, so that they can be looked up and bound to by
      * {@code DataLoaderManagerService}.
      *
-     * Data loader service providers must be privileged apps. 
+     * <p class="note">This is a protected intent that can only be sent by the system.
+     *
+     * Data loader service providers must be privileged apps.
      * See {@link com.android.server.pm.PackageManagerShellCommandDataLoader} as an example of such
      * data loader service provider.
      *
@@ -4970,11 +4972,14 @@
      * <pre>
      * &lt;accessibility-shortcut-target
      *     android:description="@string/shortcut_target_description"
-     *     android:summary="@string/shortcut_target_summary" /&gt;
+     *     android:summary="@string/shortcut_target_summary"
+     *     android:animatedImageDrawable="@drawable/shortcut_target_animated_image"
+     *     android:htmlDescription="@string/shortcut_target_html_description" /&gt;
      * </pre>
      * <p>
      * Both description and summary are necessary. The system will ignore the accessibility
-     * shortcut target if they are missing.
+     * shortcut target if they are missing. The animated image and html description are supported
+     * to help users understand how to use the shortcut target.
      * </p>
      */
     @SdkConstant(SdkConstantType.INTENT_CATEGORY)
@@ -6473,6 +6478,21 @@
     public static final int FLAG_ACTIVITY_MATCH_EXTERNAL = 0x00000800;
 
     /**
+     * If set in an intent passed to {@link Context#startActivity Context.startActivity()}, this
+     * flag will only launch the intent if it resolves to a result that is not a browser. If no such
+     * result exists, an {@link ActivityNotFoundException} will be thrown.
+     */
+    public static final int FLAG_ACTIVITY_REQUIRE_NON_BROWSER = 0x00000400;
+
+    /**
+     * If set in an intent passed to {@link Context#startActivity Context.startActivity()}, this
+     * flag will only launch the intent if it resolves to a single result. If no such result exists
+     * or if the system chooser would otherwise be displayed, an {@link ActivityNotFoundException}
+     * will be thrown.
+     */
+    public static final int FLAG_ACTIVITY_REQUIRE_DEFAULT = 0x00000200;
+
+    /**
      * If set, when sending a broadcast only registered receivers will be
      * called -- no BroadcastReceiver components will be launched.
      */
@@ -6762,7 +6782,7 @@
                     this.mClipData = new ClipData(o.mClipData);
                 }
             } else {
-                if (o.mExtras != null && !o.mExtras.maybeIsEmpty()) {
+                if (o.mExtras != null && !o.mExtras.isDefinitelyEmpty()) {
                     this.mExtras = Bundle.STRIPPED;
                 }
 
diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java
index 73c1e2f..61128f2 100644
--- a/core/java/android/content/IntentFilter.java
+++ b/core/java/android/content/IntentFilter.java
@@ -41,7 +41,9 @@
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
+import java.util.function.BiConsumer;
 
 /**
  * Structured description of Intent values to be matched.  An IntentFilter can
@@ -153,7 +155,9 @@
     private static final String AUTH_STR = "auth";
     private static final String SSP_STR = "ssp";
     private static final String SCHEME_STR = "scheme";
+    private static final String STATIC_TYPE_STR = "staticType";
     private static final String TYPE_STR = "type";
+    private static final String GROUP_STR = "group";
     private static final String CAT_STR = "cat";
     private static final String NAME_STR = "name";
     private static final String ACTION_STR = "action";
@@ -280,8 +284,11 @@
     private ArrayList<PatternMatcher> mDataSchemeSpecificParts = null;
     private ArrayList<AuthorityEntry> mDataAuthorities = null;
     private ArrayList<PatternMatcher> mDataPaths = null;
+    private ArrayList<String> mStaticDataTypes = null;
     private ArrayList<String> mDataTypes = null;
-    private boolean mHasPartialTypes = false;
+    private ArrayList<String> mMimeGroups = null;
+    private boolean mHasStaticPartialTypes = false;
+    private boolean mHasDynamicPartialTypes = false;
 
     private static final int STATE_VERIFY_AUTO         = 0x00000001;
     private static final int STATE_NEED_VERIFY         = 0x00000010;
@@ -454,6 +461,9 @@
         if (o.mCategories != null) {
             mCategories = new ArrayList<String>(o.mCategories);
         }
+        if (o.mStaticDataTypes != null) {
+            mStaticDataTypes = new ArrayList<String>(o.mStaticDataTypes);
+        }
         if (o.mDataTypes != null) {
             mDataTypes = new ArrayList<String>(o.mDataTypes);
         }
@@ -469,7 +479,11 @@
         if (o.mDataPaths != null) {
             mDataPaths = new ArrayList<PatternMatcher>(o.mDataPaths);
         }
-        mHasPartialTypes = o.mHasPartialTypes;
+        if (o.mMimeGroups != null) {
+            mMimeGroups = new ArrayList<String>(o.mMimeGroups);
+        }
+        mHasStaticPartialTypes = o.mHasStaticPartialTypes;
+        mHasDynamicPartialTypes = o.mHasDynamicPartialTypes;
         mVerifyState = o.mVerifyState;
         mInstantAppVisibility = o.mInstantAppVisibility;
     }
@@ -776,25 +790,108 @@
      */
     public final void addDataType(String type)
         throws MalformedMimeTypeException {
+        processMimeType(type, (internalType, isPartial) -> {
+            if (mDataTypes == null) {
+                mDataTypes = new ArrayList<>();
+            }
+            if (mStaticDataTypes == null) {
+                mStaticDataTypes = new ArrayList<>();
+            }
+
+            if (mDataTypes.contains(internalType)) {
+                return;
+            }
+
+            mDataTypes.add(internalType.intern());
+            mStaticDataTypes.add(internalType.intern());
+            mHasStaticPartialTypes = mHasStaticPartialTypes || isPartial;
+        });
+    }
+
+    /**
+     * Add a new Intent data type <em>from MIME group</em> to match against.  If any types are
+     * included in the filter, then an Intent's data must be <em>either</em>
+     * one of these types <em>or</em> a matching scheme.  If no data types
+     * are included, then an Intent will only match if it specifies no data.
+     *
+     * <p><em>Note: MIME type matching in the Android framework is
+     * case-sensitive, unlike formal RFC MIME types.  As a result,
+     * you should always write your MIME types with lower case letters,
+     * and any MIME types you receive from outside of Android should be
+     * converted to lower case before supplying them here.</em></p>
+     *
+     * <p>Throws {@link MalformedMimeTypeException} if the given MIME type is
+     * not syntactically correct.
+     *
+     * @param type Name of the data type to match, such as "vnd.android.cursor.dir/person".
+     *
+     * @see #clearDynamicDataTypes()
+     * @hide
+     */
+    public final void addDynamicDataType(String type)
+            throws MalformedMimeTypeException {
+        processMimeType(type, (internalType, isPartial) -> {
+            if (mDataTypes == null) {
+                mDataTypes = new ArrayList<>();
+            }
+
+            if (!mDataTypes.contains(internalType)) {
+                mDataTypes.add(internalType.intern());
+
+                mHasDynamicPartialTypes = mHasDynamicPartialTypes || isPartial;
+            }
+        });
+    }
+
+    /**
+     * Process mime type - convert to representation used internally and check if type is partial,
+     * and then call provided action
+     */
+    private void processMimeType(String type, BiConsumer<String, Boolean> action)
+            throws MalformedMimeTypeException {
         final int slashpos = type.indexOf('/');
         final int typelen = type.length();
-        if (slashpos > 0 && typelen >= slashpos+2) {
-            if (mDataTypes == null) mDataTypes = new ArrayList<String>();
-            if (typelen == slashpos+2 && type.charAt(slashpos+1) == '*') {
-                String str = type.substring(0, slashpos);
-                if (!mDataTypes.contains(str)) {
-                    mDataTypes.add(str.intern());
-                }
-                mHasPartialTypes = true;
-            } else {
-                if (!mDataTypes.contains(type)) {
-                    mDataTypes.add(type.intern());
-                }
-            }
+        if (slashpos <= 0 || typelen < slashpos + 2) {
+            throw new MalformedMimeTypeException(type);
+        }
+
+        String internalType = type;
+        boolean isPartialType = false;
+        if (typelen == slashpos + 2 && type.charAt(slashpos + 1) == '*') {
+            internalType = type.substring(0, slashpos);
+            isPartialType = true;
+        }
+
+        action.accept(internalType, isPartialType);
+    }
+
+    /**
+     * Remove all previously added Intent data types from IntentFilter.
+     *
+     * @see #addDynamicDataType(String)
+     * @hide
+     */
+    public final void clearDynamicDataTypes() {
+        if (mDataTypes == null) {
             return;
         }
 
-        throw new MalformedMimeTypeException(type);
+        if (mStaticDataTypes != null) {
+            mDataTypes.clear();
+            mDataTypes.addAll(mStaticDataTypes);
+        } else {
+            mDataTypes = null;
+        }
+
+        mHasDynamicPartialTypes = false;
+    }
+
+    /**
+     * Return the number of static data types in the filter.
+     * @hide
+     */
+    public int countStaticDataTypes() {
+        return mStaticDataTypes != null ? mStaticDataTypes.size() : 0;
     }
 
     /**
@@ -815,6 +912,16 @@
         return mDataTypes != null && mDataTypes.contains(type);
     }
 
+    /** @hide */
+    public final boolean hasExactDynamicDataType(String type) {
+        return hasExactDataType(type) && !hasExactStaticDataType(type);
+    }
+
+    /** @hide */
+    public final boolean hasExactStaticDataType(String type) {
+        return mStaticDataTypes != null && mStaticDataTypes.contains(type);
+    }
+
     /**
      * Return the number of data types in the filter.
      */
@@ -837,6 +944,44 @@
     }
 
     /**
+     * Return copy of filter's data types.
+     * @hide
+     */
+    public final List<String> dataTypes() {
+        return mDataTypes != null ? new ArrayList<>(mDataTypes) : null;
+    }
+
+    /** @hide */
+    public final void addMimeGroup(String name) {
+        if (mMimeGroups == null) {
+            mMimeGroups = new ArrayList<>();
+        }
+        if (!mMimeGroups.contains(name)) {
+            mMimeGroups.add(name);
+        }
+    }
+
+    /** @hide */
+    public final boolean hasMimeGroup(String name) {
+        return mMimeGroups != null && mMimeGroups.contains(name);
+    }
+
+    /** @hide */
+    public final String getMimeGroup(int index) {
+        return mMimeGroups.get(index);
+    }
+
+    /** @hide */
+    public final int countMimeGroups() {
+        return mMimeGroups != null ? mMimeGroups.size() : 0;
+    }
+
+    /** @hide */
+    public final Iterator<String> mimeGroupsIterator() {
+        return mMimeGroups != null ? mMimeGroups.iterator() : null;
+    }
+
+    /**
      * Add a new Intent data scheme to match against.  If any schemes are
      * included in the filter, then an Intent's data must be <em>either</em>
      * one of these schemes <em>or</em> a matching data type.  If no schemes
@@ -1617,13 +1762,12 @@
             serializer.attribute(null, NAME_STR, mCategories.get(i));
             serializer.endTag(null, CAT_STR);
         }
-        N = countDataTypes();
+        writeDataTypesToXml(serializer);
+        N = countMimeGroups();
         for (int i=0; i<N; i++) {
-            serializer.startTag(null, TYPE_STR);
-            String type = mDataTypes.get(i);
-            if (type.indexOf('/') < 0) type = type + "/*";
-            serializer.attribute(null, NAME_STR, type);
-            serializer.endTag(null, TYPE_STR);
+            serializer.startTag(null, GROUP_STR);
+            serializer.attribute(null, NAME_STR, mMimeGroups.get(i));
+            serializer.endTag(null, GROUP_STR);
         }
         N = countDataSchemes();
         for (int i=0; i<N; i++) {
@@ -1683,6 +1827,46 @@
         }
     }
 
+    /**
+     * Write data types (both static and dynamic) to XML.
+     * In implementation we rely on two facts:
+     * - {@link #mStaticDataTypes} is subsequence of {@link #mDataTypes}
+     * - both {@link #mStaticDataTypes} and {@link #mDataTypes} does not contain duplicates
+     */
+    private void writeDataTypesToXml(XmlSerializer serializer) throws IOException {
+        if (mStaticDataTypes == null) {
+            return;
+        }
+
+        int i = 0;
+        for (String staticType: mStaticDataTypes) {
+            while (!mDataTypes.get(i).equals(staticType)) {
+                writeDataTypeToXml(serializer, mDataTypes.get(i), TYPE_STR);
+                i++;
+            }
+
+            writeDataTypeToXml(serializer, staticType, STATIC_TYPE_STR);
+            i++;
+        }
+
+        while (i < mDataTypes.size()) {
+            writeDataTypeToXml(serializer, mDataTypes.get(i), TYPE_STR);
+            i++;
+        }
+    }
+
+    private void writeDataTypeToXml(XmlSerializer serializer, String type, String tag)
+            throws IOException {
+        serializer.startTag(null, tag);
+
+        if (type.indexOf('/') < 0) {
+            type = type + "/*";
+        }
+
+        serializer.attribute(null, NAME_STR, type);
+        serializer.endTag(null, tag);
+    }
+
     public void readFromXml(XmlPullParser parser) throws XmlPullParserException,
             IOException {
         String autoVerify = parser.getAttributeValue(null, AUTO_VERIFY_STR);
@@ -1709,7 +1893,7 @@
                 if (name != null) {
                     addCategory(name);
                 }
-            } else if (tagName.equals(TYPE_STR)) {
+            } else if (tagName.equals(STATIC_TYPE_STR)) {
                 String name = parser.getAttributeValue(null, NAME_STR);
                 if (name != null) {
                     try {
@@ -1717,6 +1901,19 @@
                     } catch (MalformedMimeTypeException e) {
                     }
                 }
+            } else if (tagName.equals(TYPE_STR)) {
+                String name = parser.getAttributeValue(null, NAME_STR);
+                if (name != null) {
+                    try {
+                        addDynamicDataType(name);
+                    } catch (MalformedMimeTypeException e) {
+                    }
+                }
+            } else if (tagName.equals(GROUP_STR)) {
+                String name = parser.getAttributeValue(null, NAME_STR);
+                if (name != null) {
+                    addMimeGroup(name);
+                }
             } else if (tagName.equals(SCHEME_STR)) {
                 String name = parser.getAttributeValue(null, NAME_STR);
                 if (name != null) {
@@ -1802,9 +1999,15 @@
                 proto.write(IntentFilterProto.DATA_TYPES, it.next());
             }
         }
-        if (mPriority != 0 || mHasPartialTypes) {
+        if (mMimeGroups != null) {
+            Iterator<String> it = mMimeGroups.iterator();
+            while (it.hasNext()) {
+                proto.write(IntentFilterProto.MIME_GROUPS, it.next());
+            }
+        }
+        if (mPriority != 0 || hasPartialTypes()) {
             proto.write(IntentFilterProto.PRIORITY, mPriority);
-            proto.write(IntentFilterProto.HAS_PARTIAL_TYPES, mHasPartialTypes);
+            proto.write(IntentFilterProto.HAS_PARTIAL_TYPES, hasPartialTypes());
         }
         proto.write(IntentFilterProto.GET_AUTO_VERIFY, getAutoVerify());
         proto.end(token);
@@ -1871,20 +2074,45 @@
                 du.println(sb.toString());
             }
         }
-        if (mDataTypes != null) {
-            Iterator<String> it = mDataTypes.iterator();
+        if (mStaticDataTypes != null) {
+            Iterator<String> it = mStaticDataTypes.iterator();
             while (it.hasNext()) {
                 sb.setLength(0);
-                sb.append(prefix); sb.append("Type: \"");
-                        sb.append(it.next()); sb.append("\"");
+                sb.append(prefix); sb.append("StaticType: \"");
+                sb.append(it.next()); sb.append("\"");
                 du.println(sb.toString());
             }
         }
-        if (mPriority != 0 || mOrder != 0 || mHasPartialTypes) {
+        if (mDataTypes != null) {
+            Iterator<String> it = mDataTypes.iterator();
+            while (it.hasNext()) {
+                String dataType = it.next();
+                if (hasExactStaticDataType(dataType)) {
+                    continue;
+                }
+
+                sb.setLength(0);
+                sb.append(prefix); sb.append("Type: \"");
+                sb.append(dataType); sb.append("\"");
+                du.println(sb.toString());
+            }
+        }
+        if (mMimeGroups != null) {
+            Iterator<String> it = mMimeGroups.iterator();
+            while (it.hasNext()) {
+                sb.setLength(0);
+                sb.append(prefix); sb.append("MimeGroup: \"");
+                sb.append(it.next()); sb.append("\"");
+                du.println(sb.toString());
+            }
+        }
+        if (mPriority != 0 || mOrder != 0 || hasPartialTypes()) {
             sb.setLength(0);
-            sb.append(prefix); sb.append("mPriority="); sb.append(mPriority);
-                    sb.append(", mOrder="); sb.append(mOrder);
-                    sb.append(", mHasPartialTypes="); sb.append(mHasPartialTypes);
+            sb.append(prefix);
+            sb.append("mPriority="); sb.append(mPriority);
+            sb.append(", mOrder="); sb.append(mOrder);
+            sb.append(", mHasStaticPartialTypes="); sb.append(mHasStaticPartialTypes);
+            sb.append(", mHasDynamicPartialTypes="); sb.append(mHasDynamicPartialTypes);
             du.println(sb.toString());
         }
         if (getAutoVerify()) {
@@ -1923,12 +2151,24 @@
         } else {
             dest.writeInt(0);
         }
+        if (mStaticDataTypes != null) {
+            dest.writeInt(1);
+            dest.writeStringList(mStaticDataTypes);
+        } else {
+            dest.writeInt(0);
+        }
         if (mDataTypes != null) {
             dest.writeInt(1);
             dest.writeStringList(mDataTypes);
         } else {
             dest.writeInt(0);
         }
+        if (mMimeGroups != null) {
+            dest.writeInt(1);
+            dest.writeStringList(mMimeGroups);
+        } else {
+            dest.writeInt(0);
+        }
         if (mDataSchemeSpecificParts != null) {
             final int N = mDataSchemeSpecificParts.size();
             dest.writeInt(N);
@@ -1957,7 +2197,8 @@
             dest.writeInt(0);
         }
         dest.writeInt(mPriority);
-        dest.writeInt(mHasPartialTypes ? 1 : 0);
+        dest.writeInt(mHasStaticPartialTypes ? 1 : 0);
+        dest.writeInt(mHasDynamicPartialTypes ? 1 : 0);
         dest.writeInt(getAutoVerify() ? 1 : 0);
         dest.writeInt(mInstantAppVisibility);
         dest.writeInt(mOrder);
@@ -2002,9 +2243,17 @@
             source.readStringList(mDataSchemes);
         }
         if (source.readInt() != 0) {
+            mStaticDataTypes = new ArrayList<String>();
+            source.readStringList(mStaticDataTypes);
+        }
+        if (source.readInt() != 0) {
             mDataTypes = new ArrayList<String>();
             source.readStringList(mDataTypes);
         }
+        if (source.readInt() != 0) {
+            mMimeGroups = new ArrayList<String>();
+            source.readStringList(mMimeGroups);
+        }
         int N = source.readInt();
         if (N > 0) {
             mDataSchemeSpecificParts = new ArrayList<PatternMatcher>(N);
@@ -2027,12 +2276,17 @@
             }
         }
         mPriority = source.readInt();
-        mHasPartialTypes = source.readInt() > 0;
+        mHasStaticPartialTypes = source.readInt() > 0;
+        mHasDynamicPartialTypes = source.readInt() > 0;
         setAutoVerify(source.readInt() > 0);
         setVisibilityToInstantApp(source.readInt());
         mOrder = source.readInt();
     }
 
+    private boolean hasPartialTypes() {
+        return mHasStaticPartialTypes || mHasDynamicPartialTypes;
+    }
+
     private final boolean findMimeType(String type) {
         final ArrayList<String> t = mDataTypes;
 
@@ -2051,13 +2305,13 @@
         }
 
         // Deal with this IntentFilter wanting to match every Intent type.
-        if (mHasPartialTypes && t.contains("*")) {
+        if (hasPartialTypes() && t.contains("*")) {
             return true;
         }
 
         final int slashpos = type.indexOf('/');
         if (slashpos > 0) {
-            if (mHasPartialTypes && t.contains(type.substring(0, slashpos))) {
+            if (hasPartialTypes() && t.contains(type.substring(0, slashpos))) {
                 return true;
             }
             if (typeLength == slashpos+2 && type.charAt(slashpos+1) == '*') {
diff --git a/core/java/android/content/integrity/AppInstallMetadata.java b/core/java/android/content/integrity/AppInstallMetadata.java
index 351edc9..4ec9476 100644
--- a/core/java/android/content/integrity/AppInstallMetadata.java
+++ b/core/java/android/content/integrity/AppInstallMetadata.java
@@ -18,6 +18,9 @@
 
 import android.annotation.NonNull;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 
 /**
@@ -33,20 +36,27 @@
 public final class AppInstallMetadata {
     private final String mPackageName;
     // Raw string encoding for the SHA-256 hash of the certificate of the app.
-    private final String mAppCertificate;
+    private final List<String> mAppCertificates;
     private final String mInstallerName;
     // Raw string encoding for the SHA-256 hash of the certificate of the installer.
-    private final String mInstallerCertificate;
+    private final List<String> mInstallerCertificates;
     private final long mVersionCode;
     private final boolean mIsPreInstalled;
+    private final boolean mIsStampTrusted;
+    // Raw string encoding for the SHA-256 hash of the certificate of the stamp.
+    private final String mStampCertificateHash;
+    private final Map<String, String> mAllowedInstallersAndCertificates;
 
     private AppInstallMetadata(Builder builder) {
         this.mPackageName = builder.mPackageName;
-        this.mAppCertificate = builder.mAppCertificate;
+        this.mAppCertificates = builder.mAppCertificates;
         this.mInstallerName = builder.mInstallerName;
-        this.mInstallerCertificate = builder.mInstallerCertificate;
+        this.mInstallerCertificates = builder.mInstallerCertificates;
         this.mVersionCode = builder.mVersionCode;
         this.mIsPreInstalled = builder.mIsPreInstalled;
+        this.mIsStampTrusted = builder.mIsStampTrusted;
+        this.mStampCertificateHash = builder.mStampCertificateHash;
+        this.mAllowedInstallersAndCertificates = builder.mAllowedInstallersAndCertificates;
     }
 
     @NonNull
@@ -55,8 +65,8 @@
     }
 
     @NonNull
-    public String getAppCertificate() {
-        return mAppCertificate;
+    public List<String> getAppCertificates() {
+        return mAppCertificates;
     }
 
     @NonNull
@@ -65,8 +75,8 @@
     }
 
     @NonNull
-    public String getInstallerCertificate() {
-        return mInstallerCertificate;
+    public List<String> getInstallerCertificates() {
+        return mInstallerCertificates;
     }
 
     /** @see AppInstallMetadata.Builder#setVersionCode(long) */
@@ -79,27 +89,64 @@
         return mIsPreInstalled;
     }
 
+    /** @see AppInstallMetadata.Builder#setIsStampTrusted(boolean) */
+    public boolean isStampTrusted() {
+        return mIsStampTrusted;
+    }
+
+    /** @see AppInstallMetadata.Builder#setStampCertificateHash(String) */
+    public String getStampCertificateHash() {
+        return mStampCertificateHash;
+    }
+
+    /** Get the allowed installers and their corresponding cert. */
+    public Map<String, String> getAllowedInstallersAndCertificates() {
+        return mAllowedInstallersAndCertificates;
+    }
+
     @Override
     public String toString() {
         return String.format(
-                "AppInstallMetadata { PackageName = %s, AppCert = %s, InstallerName = %s,"
-                    + " InstallerCert = %s, VersionCode = %d, PreInstalled = %b }",
+                "AppInstallMetadata { PackageName = %s, AppCerts = %s, InstallerName = %s,"
+                        + " InstallerCerts = %s, VersionCode = %d, PreInstalled = %b, "
+                        + "StampTrusted = %b, StampCert = %s }",
                 mPackageName,
-                mAppCertificate,
+                mAppCertificates,
                 mInstallerName == null ? "null" : mInstallerName,
-                mInstallerCertificate == null ? "null" : mInstallerCertificate,
+                mInstallerCertificates == null ? "null" : mInstallerCertificates,
                 mVersionCode,
-                mIsPreInstalled);
+                mIsPreInstalled,
+                mIsStampTrusted,
+                mStampCertificateHash == null ? "null" : mStampCertificateHash);
     }
 
     /** Builder class for constructing {@link AppInstallMetadata} objects. */
     public static final class Builder {
         private String mPackageName;
-        private String mAppCertificate;
+        private List<String> mAppCertificates;
         private String mInstallerName;
-        private String mInstallerCertificate;
+        private List<String> mInstallerCertificates;
         private long mVersionCode;
         private boolean mIsPreInstalled;
+        private boolean mIsStampTrusted;
+        private String mStampCertificateHash;
+        private Map<String, String> mAllowedInstallersAndCertificates;
+
+        public Builder() {
+            mAllowedInstallersAndCertificates = new HashMap<>();
+        }
+
+        /**
+         * Add allowed installers and cert.
+         *
+         * @see AppInstallMetadata#getAllowedInstallersAndCertificates()
+         */
+        @NonNull
+        public Builder setAllowedInstallersAndCert(
+                @NonNull Map<String, String> allowedInstallersAndCertificates) {
+            this.mAllowedInstallersAndCertificates = allowedInstallersAndCertificates;
+            return this;
+        }
 
         /**
          * Set package name of the app to be installed.
@@ -118,11 +165,11 @@
          * <p>It is represented as the raw string encoding for the SHA-256 hash of the certificate
          * of the app.
          *
-         * @see AppInstallMetadata#getAppCertificate()
+         * @see AppInstallMetadata#getAppCertificates()
          */
         @NonNull
-        public Builder setAppCertificate(@NonNull String appCertificate) {
-            this.mAppCertificate = Objects.requireNonNull(appCertificate);
+        public Builder setAppCertificates(@NonNull List<String> appCertificates) {
+            this.mAppCertificates = Objects.requireNonNull(appCertificates);
             return this;
         }
 
@@ -143,11 +190,11 @@
          * <p>It is represented as the raw string encoding for the SHA-256 hash of the certificate
          * of the installer.
          *
-         * @see AppInstallMetadata#getInstallerCertificate()
+         * @see AppInstallMetadata#getInstallerCertificates()
          */
         @NonNull
-        public Builder setInstallerCertificate(@NonNull String installerCertificate) {
-            this.mInstallerCertificate = Objects.requireNonNull(installerCertificate);
+        public Builder setInstallerCertificates(@NonNull List<String> installerCertificates) {
+            this.mInstallerCertificates = Objects.requireNonNull(installerCertificates);
             return this;
         }
 
@@ -174,6 +221,31 @@
         }
 
         /**
+         * Set certificate hash of the stamp embedded in the APK.
+         *
+         * <p>It is represented as the raw string encoding for the SHA-256 hash of the certificate
+         * of the stamp.
+         *
+         * @see AppInstallMetadata#getStampCertificateHash()
+         */
+        @NonNull
+        public Builder setStampCertificateHash(@NonNull String stampCertificateHash) {
+            this.mStampCertificateHash = Objects.requireNonNull(stampCertificateHash);
+            return this;
+        }
+
+        /**
+         * Set whether the stamp embedded in the APK is trusted or not.
+         *
+         * @see AppInstallMetadata#isStampTrusted()
+         */
+        @NonNull
+        public Builder setIsStampTrusted(boolean isStampTrusted) {
+            this.mIsStampTrusted = isStampTrusted;
+            return this;
+        }
+
+        /**
          * Build {@link AppInstallMetadata}.
          *
          * @throws IllegalArgumentException if package name or app certificate is null
@@ -181,7 +253,7 @@
         @NonNull
         public AppInstallMetadata build() {
             Objects.requireNonNull(mPackageName);
-            Objects.requireNonNull(mAppCertificate);
+            Objects.requireNonNull(mAppCertificates);
             return new AppInstallMetadata(this);
         }
     }
diff --git a/core/java/android/content/integrity/AtomicFormula.java b/core/java/android/content/integrity/AtomicFormula.java
index 439d536..977a631 100644
--- a/core/java/android/content/integrity/AtomicFormula.java
+++ b/core/java/android/content/integrity/AtomicFormula.java
@@ -30,6 +30,8 @@
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.util.Collections;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -45,22 +47,22 @@
     /** @hide */
     @IntDef(
             value = {
-                    PACKAGE_NAME,
-                    APP_CERTIFICATE,
-                    INSTALLER_NAME,
-                    INSTALLER_CERTIFICATE,
-                    VERSION_CODE,
-                    PRE_INSTALLED,
+                PACKAGE_NAME,
+                APP_CERTIFICATE,
+                INSTALLER_NAME,
+                INSTALLER_CERTIFICATE,
+                VERSION_CODE,
+                PRE_INSTALLED,
+                STAMP_TRUSTED,
+                STAMP_CERTIFICATE_HASH,
             })
     @Retention(RetentionPolicy.SOURCE)
-    public @interface Key {
-    }
+    public @interface Key {}
 
     /** @hide */
     @IntDef(value = {EQ, GT, GTE})
     @Retention(RetentionPolicy.SOURCE)
-    public @interface Operator {
-    }
+    public @interface Operator {}
 
     /**
      * Package name of the app.
@@ -105,6 +107,20 @@
      */
     public static final int PRE_INSTALLED = 5;
 
+    /**
+     * If the APK has an embedded trusted stamp.
+     *
+     * <p>Can only be used in {@link BooleanAtomicFormula}.
+     */
+    public static final int STAMP_TRUSTED = 6;
+
+    /**
+     * SHA-256 of the certificate used to sign the stamp embedded in the APK.
+     *
+     * <p>Can only be used in {@link StringAtomicFormula}.
+     */
+    public static final int STAMP_CERTIFICATE_HASH = 7;
+
     public static final int EQ = 0;
     public static final int GT = 1;
     public static final int GTE = 2;
@@ -266,9 +282,7 @@
         }
 
         private static boolean isValidOperator(int operator) {
-            return operator == EQ
-                    || operator == GT
-                    || operator == GTE;
+            return operator == EQ || operator == GT || operator == GTE;
         }
 
         private static long getLongMetadataValue(AppInstallMetadata appInstallMetadata, int key) {
@@ -300,7 +314,8 @@
                     key == PACKAGE_NAME
                             || key == APP_CERTIFICATE
                             || key == INSTALLER_CERTIFICATE
-                            || key == INSTALLER_NAME,
+                            || key == INSTALLER_NAME
+                            || key == STAMP_CERTIFICATE_HASH,
                     String.format(
                             "Key %s cannot be used with StringAtomicFormula", keyToString(key)));
             mValue = null;
@@ -321,7 +336,8 @@
                     key == PACKAGE_NAME
                             || key == APP_CERTIFICATE
                             || key == INSTALLER_CERTIFICATE
-                            || key == INSTALLER_NAME,
+                            || key == INSTALLER_NAME
+                            || key == STAMP_CERTIFICATE_HASH,
                     String.format(
                             "Key %s cannot be used with StringAtomicFormula", keyToString(key)));
             mValue = value;
@@ -329,12 +345,14 @@
         }
 
         /**
-         * Constructs a new {@link StringAtomicFormula} together with handling the necessary
-         * hashing for the given key.
+         * Constructs a new {@link StringAtomicFormula} together with handling the necessary hashing
+         * for the given key.
          *
-         * <p> The value will be hashed with SHA256 and the hex digest will be computed; for
-         * all cases except when the key is PACKAGE_NAME or INSTALLER_NAME and the value
-         * is less than 33 characters.
+         * <p>The value will be automatically hashed with SHA256 and the hex digest will be computed
+         * when the key is PACKAGE_NAME or INSTALLER_NAME and the value is more than 32 characters.
+         *
+         * <p>The APP_CERTIFICATES, INSTALLER_CERTIFICATES, and STAMP_CERTIFICATE_HASH are always
+         * delivered in hashed form. So the isHashedValue is set to true by default.
          *
          * @throws IllegalArgumentException if {@code key} cannot be used with string value.
          */
@@ -344,11 +362,17 @@
                     key == PACKAGE_NAME
                             || key == APP_CERTIFICATE
                             || key == INSTALLER_CERTIFICATE
-                            || key == INSTALLER_NAME,
+                            || key == INSTALLER_NAME
+                            || key == STAMP_CERTIFICATE_HASH,
                     String.format(
                             "Key %s cannot be used with StringAtomicFormula", keyToString(key)));
             mValue = hashValue(key, value);
-            mIsHashedValue = !mValue.equals(value);
+            mIsHashedValue =
+                    key == APP_CERTIFICATE
+                                    || key == INSTALLER_CERTIFICATE
+                                    || key == STAMP_CERTIFICATE_HASH
+                            ? true
+                            : !mValue.equals(value);
         }
 
         StringAtomicFormula(Parcel in) {
@@ -381,7 +405,7 @@
             if (mValue == null || mIsHashedValue == null) {
                 return false;
             }
-            return getStringMetadataValue(appInstallMetadata, getKey()).equals(mValue);
+            return getMetadataValue(appInstallMetadata, getKey()).contains(mValue);
         }
 
         @Override
@@ -442,17 +466,19 @@
             return mIsHashedValue;
         }
 
-        private static String getStringMetadataValue(
+        private static List<String> getMetadataValue(
                 AppInstallMetadata appInstallMetadata, int key) {
             switch (key) {
                 case AtomicFormula.PACKAGE_NAME:
-                    return appInstallMetadata.getPackageName();
+                    return Collections.singletonList(appInstallMetadata.getPackageName());
                 case AtomicFormula.APP_CERTIFICATE:
-                    return appInstallMetadata.getAppCertificate();
+                    return appInstallMetadata.getAppCertificates();
                 case AtomicFormula.INSTALLER_CERTIFICATE:
-                    return appInstallMetadata.getInstallerCertificate();
+                    return appInstallMetadata.getInstallerCertificates();
                 case AtomicFormula.INSTALLER_NAME:
-                    return appInstallMetadata.getInstallerName();
+                    return Collections.singletonList(appInstallMetadata.getInstallerName());
+                case AtomicFormula.STAMP_CERTIFICATE_HASH:
+                    return Collections.singletonList(appInstallMetadata.getStampCertificateHash());
                 default:
                     throw new IllegalStateException(
                             "Unexpected key in StringAtomicFormula: " + key);
@@ -495,7 +521,7 @@
         public BooleanAtomicFormula(@Key int key) {
             super(key);
             checkArgument(
-                    key == PRE_INSTALLED,
+                    key == PRE_INSTALLED || key == STAMP_TRUSTED,
                     String.format(
                             "Key %s cannot be used with BooleanAtomicFormula", keyToString(key)));
             mValue = null;
@@ -512,7 +538,7 @@
         public BooleanAtomicFormula(@Key int key, boolean value) {
             super(key);
             checkArgument(
-                    key == PRE_INSTALLED,
+                    key == PRE_INSTALLED || key == STAMP_TRUSTED,
                     String.format(
                             "Key %s cannot be used with BooleanAtomicFormula", keyToString(key)));
             mValue = value;
@@ -608,6 +634,8 @@
             switch (key) {
                 case AtomicFormula.PRE_INSTALLED:
                     return appInstallMetadata.isPreInstalled();
+                case AtomicFormula.STAMP_TRUSTED:
+                    return appInstallMetadata.isStampTrusted();
                 default:
                     throw new IllegalStateException(
                             "Unexpected key in BooleanAtomicFormula: " + key);
@@ -633,6 +661,10 @@
                 return "INSTALLER_CERTIFICATE";
             case PRE_INSTALLED:
                 return "PRE_INSTALLED";
+            case STAMP_TRUSTED:
+                return "STAMP_TRUSTED";
+            case STAMP_CERTIFICATE_HASH:
+                return "STAMP_CERTIFICATE_HASH";
             default:
                 throw new IllegalArgumentException("Unknown key " + key);
         }
@@ -657,6 +689,8 @@
                 || key == VERSION_CODE
                 || key == INSTALLER_NAME
                 || key == INSTALLER_CERTIFICATE
-                || key == PRE_INSTALLED;
+                || key == PRE_INSTALLED
+                || key == STAMP_TRUSTED
+                || key == STAMP_CERTIFICATE_HASH;
     }
 }
diff --git a/core/java/android/content/integrity/InstallerAllowedByManifestFormula.java b/core/java/android/content/integrity/InstallerAllowedByManifestFormula.java
new file mode 100644
index 0000000..9d37299
--- /dev/null
+++ b/core/java/android/content/integrity/InstallerAllowedByManifestFormula.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content.integrity;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Map;
+
+/**
+ * An atomic formula that evaluates to true if the installer of the current install is specified in
+ * the "allowed installer" field in the android manifest. Note that an empty "allowed installer" by
+ * default means containing all possible installers.
+ *
+ * @hide
+ */
+public class InstallerAllowedByManifestFormula extends IntegrityFormula implements Parcelable {
+
+    public static final String INSTALLER_CERTIFICATE_NOT_EVALUATED = "";
+
+    public InstallerAllowedByManifestFormula() {
+    }
+
+    private InstallerAllowedByManifestFormula(Parcel in) {
+    }
+
+    @NonNull
+    public static final Creator<InstallerAllowedByManifestFormula> CREATOR =
+            new Creator<InstallerAllowedByManifestFormula>() {
+                @Override
+                public InstallerAllowedByManifestFormula createFromParcel(Parcel in) {
+                    return new InstallerAllowedByManifestFormula(in);
+                }
+
+                @Override
+                public InstallerAllowedByManifestFormula[] newArray(int size) {
+                    return new InstallerAllowedByManifestFormula[size];
+                }
+            };
+
+    @Override
+    public int getTag() {
+        return IntegrityFormula.INSTALLER_ALLOWED_BY_MANIFEST_FORMULA_TAG;
+    }
+
+    @Override
+    public boolean matches(AppInstallMetadata appInstallMetadata) {
+        Map<String, String> allowedInstallersAndCertificates =
+                appInstallMetadata.getAllowedInstallersAndCertificates();
+        return allowedInstallersAndCertificates.isEmpty()
+                || installerInAllowedInstallersFromManifest(
+                appInstallMetadata, allowedInstallersAndCertificates);
+    }
+
+    @Override
+    public boolean isAppCertificateFormula() {
+        return false;
+    }
+
+    @Override
+    public boolean isInstallerFormula() {
+        return true;
+    }
+
+    private static boolean installerInAllowedInstallersFromManifest(
+            AppInstallMetadata appInstallMetadata,
+            Map<String, String> allowedInstallersAndCertificates) {
+        String installerPackage = appInstallMetadata.getInstallerName();
+
+        if (!allowedInstallersAndCertificates.containsKey(installerPackage)) {
+            return false;
+        }
+
+        // If certificate is not specified in the manifest, we do not check it.
+        if (!allowedInstallersAndCertificates.get(installerPackage)
+                .equals(INSTALLER_CERTIFICATE_NOT_EVALUATED)) {
+            return appInstallMetadata.getInstallerCertificates()
+                    .contains(
+                            allowedInstallersAndCertificates
+                                    .get(appInstallMetadata.getInstallerName()));
+        }
+
+        return true;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+    }
+}
diff --git a/core/java/android/content/integrity/IntegrityFormula.java b/core/java/android/content/integrity/IntegrityFormula.java
index a2d937e..fc177721 100644
--- a/core/java/android/content/integrity/IntegrityFormula.java
+++ b/core/java/android/content/integrity/IntegrityFormula.java
@@ -42,74 +42,116 @@
 @VisibleForTesting
 public abstract class IntegrityFormula {
 
-    /**
-     * A static formula base for package name formulas.
-     *
-     * This formulation is incomplete and should always be used with {@code equals} formulation.
-     * Evaluates to false when used directly and cannot be written as a parcel.
-     */
-    @NonNull
-    public static final IntegrityFormula PACKAGE_NAME =
-            new StringAtomicFormula(AtomicFormula.PACKAGE_NAME);
+    /** Factory class for creating integrity formulas based on the app being installed. */
+    public static final class Application {
+        /** Returns an integrity formula that checks the equality to a package name. */
+        @NonNull
+        public static IntegrityFormula packageNameEquals(@NonNull String packageName) {
+            return new StringAtomicFormula(AtomicFormula.PACKAGE_NAME, packageName);
+        }
 
-    /**
-     * A static formula base for app certificate formulas.
-     *
-     * This formulation is incomplete and should always be used with {@code equals} formulation.
-     * Evaluates to false when used directly and cannot be written as a parcel.
-     */
-    @NonNull
-    public static final IntegrityFormula APP_CERTIFICATE =
-            new StringAtomicFormula(AtomicFormula.APP_CERTIFICATE);
+        /**
+         * Returns an integrity formula that checks if the app certificates contain {@code
+         * appCertificate}.
+         */
+        @NonNull
+        public static IntegrityFormula certificatesContain(@NonNull String appCertificate) {
+            return new StringAtomicFormula(AtomicFormula.APP_CERTIFICATE, appCertificate);
+        }
 
-    /**
-     * A static formula base for installer name formulas.
-     *
-     * This formulation is incomplete and should always be used with {@code equals} formulation.
-     * Evaluates to false when used directly and cannot be written as a parcel.
-     */
-    @NonNull
-    public static final IntegrityFormula INSTALLER_NAME =
-            new StringAtomicFormula(AtomicFormula.INSTALLER_NAME);
+        /** Returns an integrity formula that checks the equality to a version code. */
+        @NonNull
+        public static IntegrityFormula versionCodeEquals(@NonNull long versionCode) {
+            return new LongAtomicFormula(AtomicFormula.VERSION_CODE, AtomicFormula.EQ, versionCode);
+        }
 
-    /**
-     * A static formula base for installer certificate formulas.
-     *
-     * This formulation is incomplete and should always be used with {@code equals} formulation.
-     * Evaluates to false when used directly and cannot be written as a parcel.
-     */
-    @NonNull
-    public static final IntegrityFormula INSTALLER_CERTIFICATE =
-            new StringAtomicFormula(AtomicFormula.INSTALLER_CERTIFICATE);
+        /**
+         * Returns an integrity formula that checks the app's version code is greater than the
+         * provided value.
+         */
+        @NonNull
+        public static IntegrityFormula versionCodeGreaterThan(@NonNull long versionCode) {
+            return new LongAtomicFormula(AtomicFormula.VERSION_CODE, AtomicFormula.GT, versionCode);
+        }
 
-    /**
-     * A static formula base for version code name formulas.
-     *
-     * This formulation is incomplete and should always be used with {@code equals},
-     * {@code greaterThan} and {@code greaterThanEquals} formulation. Evaluates to false when used
-     * directly and cannot be written as a parcel.
-     */
-    @NonNull
-    public static final IntegrityFormula VERSION_CODE =
-            new LongAtomicFormula(AtomicFormula.VERSION_CODE);
+        /**
+         * Returns an integrity formula that checks the app's version code is greater than or equal
+         * to the provided value.
+         */
+        @NonNull
+        public static IntegrityFormula versionCodeGreaterThanOrEqualTo(@NonNull long versionCode) {
+            return new LongAtomicFormula(
+                    AtomicFormula.VERSION_CODE, AtomicFormula.GTE, versionCode);
+        }
 
-    /**
-     * A static formula base for pre-installed status formulas.
-     *
-     * This formulation is incomplete and should always be used with {@code equals} formulation.
-     * Evaluates to false when used directly and cannot be written as a parcel.
-     */
-    @NonNull
-    public static final IntegrityFormula PRE_INSTALLED =
-            new BooleanAtomicFormula(AtomicFormula.PRE_INSTALLED);
+        /** Returns an integrity formula that is valid when app is pre-installed. */
+        @NonNull
+        public static IntegrityFormula isPreInstalled() {
+            return new BooleanAtomicFormula(AtomicFormula.PRE_INSTALLED, true);
+        }
+
+        private Application() {}
+    }
+
+    /** Factory class for creating integrity formulas based on installer. */
+    public static final class Installer {
+        /** Returns an integrity formula that checks the equality to an installer name. */
+        @NonNull
+        public static IntegrityFormula packageNameEquals(@NonNull String installerName) {
+            return new StringAtomicFormula(AtomicFormula.INSTALLER_NAME, installerName);
+        }
+
+        /**
+         * An static formula that evaluates to true if the installer is NOT allowed according to the
+         * "allowed installer" field in the android manifest.
+         */
+        @NonNull
+        public static IntegrityFormula notAllowedByManifest() {
+            return not(new InstallerAllowedByManifestFormula());
+        }
+
+        /**
+         * Returns an integrity formula that checks if the installer certificates contain {@code
+         * installerCertificate}.
+         */
+        @NonNull
+        public static IntegrityFormula certificatesContain(@NonNull String installerCertificate) {
+            return new StringAtomicFormula(
+                    AtomicFormula.INSTALLER_CERTIFICATE, installerCertificate);
+        }
+
+        private Installer() {}
+    }
+
+    /** Factory class for creating integrity formulas based on source stamp. */
+    public static final class SourceStamp {
+        /** Returns an integrity formula that checks the equality to a stamp certificate hash. */
+        @NonNull
+        public static IntegrityFormula stampCertificateHashEquals(
+                @NonNull String stampCertificateHash) {
+            return new StringAtomicFormula(
+                    AtomicFormula.STAMP_CERTIFICATE_HASH, stampCertificateHash);
+        }
+
+        /**
+         * Returns an integrity formula that is valid when stamp embedded in the APK is NOT trusted.
+         */
+        @NonNull
+        public static IntegrityFormula notTrusted() {
+            return new BooleanAtomicFormula(AtomicFormula.STAMP_TRUSTED, /* value= */ false);
+        }
+
+        private SourceStamp() {}
+    }
 
     /** @hide */
     @IntDef(
             value = {
-                    COMPOUND_FORMULA_TAG,
-                    STRING_ATOMIC_FORMULA_TAG,
-                    LONG_ATOMIC_FORMULA_TAG,
-                    BOOLEAN_ATOMIC_FORMULA_TAG
+                COMPOUND_FORMULA_TAG,
+                STRING_ATOMIC_FORMULA_TAG,
+                LONG_ATOMIC_FORMULA_TAG,
+                BOOLEAN_ATOMIC_FORMULA_TAG,
+                INSTALLER_ALLOWED_BY_MANIFEST_FORMULA_TAG
             })
     @Retention(RetentionPolicy.SOURCE)
     @interface Tag {}
@@ -122,6 +164,8 @@
     public static final int LONG_ATOMIC_FORMULA_TAG = 2;
     /** @hide */
     public static final int BOOLEAN_ATOMIC_FORMULA_TAG = 3;
+    /** @hide */
+    public static final int INSTALLER_ALLOWED_BY_MANIFEST_FORMULA_TAG = 4;
 
     /**
      * Returns the tag that identifies the current class.
@@ -135,22 +179,22 @@
      *
      * @hide
      */
-    public abstract @Tag boolean matches(AppInstallMetadata appInstallMetadata);
+    public abstract boolean matches(AppInstallMetadata appInstallMetadata);
 
     /**
      * Returns true when the formula (or one of its atomic formulas) has app certificate as key.
      *
      * @hide
      */
-    public abstract @Tag boolean isAppCertificateFormula();
+    public abstract boolean isAppCertificateFormula();
 
     /**
-     * Returns true when the formula (or one of its atomic formulas) has installer package name
-     * or installer certificate as key.
+     * Returns true when the formula (or one of its atomic formulas) has installer package name or
+     * installer certificate as key.
      *
      * @hide
      */
-    public abstract @Tag boolean isInstallerFormula();
+    public abstract boolean isInstallerFormula();
 
     /**
      * Write an {@link IntegrityFormula} to {@link android.os.Parcel}.
@@ -159,7 +203,6 @@
      * {@link Parcelable}.
      *
      * @throws IllegalArgumentException if {@link IntegrityFormula} is not a recognized subclass
-     *
      * @hide
      */
     public static void writeToParcel(
@@ -189,76 +232,14 @@
                 return LongAtomicFormula.CREATOR.createFromParcel(in);
             case BOOLEAN_ATOMIC_FORMULA_TAG:
                 return BooleanAtomicFormula.CREATOR.createFromParcel(in);
+            case INSTALLER_ALLOWED_BY_MANIFEST_FORMULA_TAG:
+                return InstallerAllowedByManifestFormula.CREATOR.createFromParcel(in);
             default:
                 throw new IllegalArgumentException("Unknown formula tag " + tag);
         }
     }
 
     /**
-     * Returns an integrity formula that evaluates to true when value of the key matches to the
-     * provided string value.
-     *
-     * <p>The value will be hashed with SHA256 and the hex digest will be computed; for
-     * all cases except when the key is PACKAGE_NAME or INSTALLER_NAME and the value is less than
-     * 32 characters.
-     *
-     * <p>Throws an {@link IllegalArgumentException} if the key is not string typed.
-     */
-    @NonNull
-    public IntegrityFormula equalTo(@NonNull String value) {
-        AtomicFormula baseFormula = (AtomicFormula) this;
-        return new AtomicFormula.StringAtomicFormula(baseFormula.getKey(), value);
-    }
-
-    /**
-     * Returns an integrity formula that evaluates to true when the boolean value of the key matches
-     * the provided boolean value. It can only be used with the boolean comparison keys.
-     *
-     * <p>Throws an {@link IllegalArgumentException} if the key is not boolean typed.
-     */
-    @NonNull
-    public IntegrityFormula equalTo(boolean value) {
-        AtomicFormula baseFormula = (AtomicFormula) this;
-        return new AtomicFormula.BooleanAtomicFormula(baseFormula.getKey(), value);
-    }
-
-    /**
-     * Returns a formula that evaluates to true when the value of the key in the package being
-     * installed is equal to {@code value}.
-     *
-     * <p>Throws an {@link IllegalArgumentException} if the key is not long typed.
-     */
-    @NonNull
-    public IntegrityFormula equalTo(long value) {
-        AtomicFormula baseFormula = (AtomicFormula) this;
-        return new AtomicFormula.LongAtomicFormula(baseFormula.getKey(), AtomicFormula.EQ, value);
-    }
-
-    /**
-     * Returns a formula that evaluates to true when the value of the key in the package being
-     * installed is greater than {@code value}.
-     *
-     * <p>Throws an {@link IllegalArgumentException} if the key is not long typed.
-     */
-    @NonNull
-    public IntegrityFormula greaterThan(long value) {
-        AtomicFormula baseFormula = (AtomicFormula) this;
-        return new AtomicFormula.LongAtomicFormula(baseFormula.getKey(), AtomicFormula.GT, value);
-    }
-
-    /**
-     * Returns a formula that evaluates to true when the value of the key in the package being
-     * installed is greater than or equals to the {@code value}.
-     *
-     * <p>Throws an {@link IllegalArgumentException} if the key is not long typed.
-     */
-    @NonNull
-    public IntegrityFormula greaterThanOrEquals(long value) {
-        AtomicFormula baseFormula = (AtomicFormula) this;
-        return new AtomicFormula.LongAtomicFormula(baseFormula.getKey(), AtomicFormula.GTE, value);
-    }
-
-    /**
      * Returns a formula that evaluates to true when any formula in {@code formulae} evaluates to
      * true.
      *
@@ -280,15 +261,12 @@
         return new CompoundFormula(CompoundFormula.AND, Arrays.asList(formulae));
     }
 
-    /**
-     * Returns a formula that evaluates to true when {@code formula} evaluates to false.
-     */
+    /** Returns a formula that evaluates to true when {@code formula} evaluates to false. */
     @NonNull
     public static IntegrityFormula not(@NonNull IntegrityFormula formula) {
         return new CompoundFormula(CompoundFormula.NOT, Arrays.asList(formula));
     }
 
     // Constructor is package private so it cannot be inherited outside of this package.
-    IntegrityFormula() {
-    }
+    IntegrityFormula() {}
 }
diff --git a/core/java/android/content/om/OverlayInfo.java b/core/java/android/content/om/OverlayInfo.java
index a3487be..55a6cab 100644
--- a/core/java/android/content/om/OverlayInfo.java
+++ b/core/java/android/content/om/OverlayInfo.java
@@ -45,7 +45,7 @@
             STATE_NO_IDMAP,
             STATE_DISABLED,
             STATE_ENABLED,
-            STATE_ENABLED_STATIC,
+            STATE_ENABLED_IMMUTABLE,
             // @Deprecated STATE_TARGET_IS_BEING_REPLACED,
             STATE_OVERLAY_IS_BEING_REPLACED,
     })
@@ -117,11 +117,12 @@
 
     /**
      * The overlay package is currently enabled because it is marked as
-     * 'static'. It cannot be disabled but will change state if for instance
+     * 'immutable'. It cannot be disabled but will change state if for instance
      * its target is uninstalled.
      * @hide
      */
-    public static final int STATE_ENABLED_STATIC = 6;
+    @Deprecated
+    public static final int STATE_ENABLED_IMMUTABLE = 6;
 
     /**
      * Overlay category: theme.
@@ -180,21 +181,21 @@
     public final int userId;
 
     /**
-     * Priority as read from the manifest. Used if isStatic is true. Not
-     * intended to be exposed to 3rd party.
+     * Priority as configured by {@link com.android.internal.content.om.OverlayConfig}.
+     * Not intended to be exposed to 3rd party.
      *
      * @hide
      */
     public final int priority;
 
     /**
-     * isStatic as read from the manifest. If true, the overlay is
-     * unconditionally loaded and cannot be unloaded. Not intended to be
+     * isMutable as configured by {@link com.android.internal.content.om.OverlayConfig}.
+     * If false, the overlay is unconditionally loaded and cannot be unloaded. Not intended to be
      * exposed to 3rd party.
      *
      * @hide
      */
-    public final boolean isStatic;
+    public final boolean isMutable;
 
     /**
      * Create a new OverlayInfo based on source with an updated state.
@@ -207,14 +208,14 @@
     public OverlayInfo(@NonNull OverlayInfo source, @State int state) {
         this(source.packageName, source.targetPackageName, source.targetOverlayableName,
                 source.category, source.baseCodePath, state, source.userId, source.priority,
-                source.isStatic);
+                source.isMutable);
     }
 
     /** @hide */
     public OverlayInfo(@NonNull String packageName, @NonNull String targetPackageName,
             @Nullable String targetOverlayableName, @Nullable String category,
             @NonNull String baseCodePath, int state, int userId,
-            int priority, boolean isStatic) {
+            int priority, boolean isMutable) {
         this.packageName = packageName;
         this.targetPackageName = targetPackageName;
         this.targetOverlayableName = targetOverlayableName;
@@ -223,7 +224,7 @@
         this.state = state;
         this.userId = userId;
         this.priority = priority;
-        this.isStatic = isStatic;
+        this.isMutable = isMutable;
         ensureValidState();
     }
 
@@ -237,7 +238,7 @@
         state = source.readInt();
         userId = source.readInt();
         priority = source.readInt();
-        isStatic = source.readBoolean();
+        isMutable = source.readBoolean();
         ensureValidState();
     }
 
@@ -307,7 +308,7 @@
             case STATE_NO_IDMAP:
             case STATE_DISABLED:
             case STATE_ENABLED:
-            case STATE_ENABLED_STATIC:
+            case STATE_ENABLED_IMMUTABLE:
             case STATE_TARGET_IS_BEING_REPLACED:
             case STATE_OVERLAY_IS_BEING_REPLACED:
                 break;
@@ -331,7 +332,7 @@
         dest.writeInt(state);
         dest.writeInt(userId);
         dest.writeInt(priority);
-        dest.writeBoolean(isStatic);
+        dest.writeBoolean(isMutable);
     }
 
     public static final @android.annotation.NonNull Parcelable.Creator<OverlayInfo> CREATOR =
@@ -360,7 +361,7 @@
     public boolean isEnabled() {
         switch (state) {
             case STATE_ENABLED:
-            case STATE_ENABLED_STATIC:
+            case STATE_ENABLED_IMMUTABLE:
                 return true;
             default:
                 return false;
@@ -386,8 +387,8 @@
                 return "STATE_DISABLED";
             case STATE_ENABLED:
                 return "STATE_ENABLED";
-            case STATE_ENABLED_STATIC:
-                return "STATE_ENABLED_STATIC";
+            case STATE_ENABLED_IMMUTABLE:
+                return "STATE_ENABLED_IMMUTABLE";
             case STATE_TARGET_IS_BEING_REPLACED:
                 return "STATE_TARGET_IS_BEING_REPLACED";
             case STATE_OVERLAY_IS_BEING_REPLACED:
diff --git a/core/java/android/content/pm/AndroidTestBaseUpdater.java b/core/java/android/content/pm/AndroidTestBaseUpdater.java
new file mode 100644
index 0000000..1cbbdca
--- /dev/null
+++ b/core/java/android/content/pm/AndroidTestBaseUpdater.java
@@ -0,0 +1,26 @@
+/*
+ * 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.content.pm;
+
+/**
+ * Dummy class to maintain legacy behavior of including a class in core source to toggle
+ * whether or not a shared library is stripped at build time.
+ *
+ * @hide
+ */
+public class AndroidTestBaseUpdater {
+}
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index b998539..9d1c677 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -702,6 +702,13 @@
      */
     public static final int PRIVATE_FLAG_ODM = 1 << 30;
 
+    /**
+     * Value for {@link #privateFlags}: If {@code true} this app allows heap tagging.
+     * {@link com.android.server.am.ProcessList#NATIVE_HEAP_POINTER_TAGGING}
+     * @hide
+     */
+    public static final int PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING = 1 << 31;
+
     /** @hide */
     @IntDef(flag = true, prefix = { "PRIVATE_FLAG_" }, value = {
             PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE,
@@ -733,6 +740,7 @@
             PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE,
             PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE,
             PRIVATE_FLAG_ODM,
+            PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING,
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface ApplicationInfoPrivateFlags {}
@@ -1389,7 +1397,7 @@
                 pw.println(prefix + "fullBackupContent="
                         + (fullBackupContent < 0 ? "false" : "true"));
             }
-            pw.println("crossProfile=" + (crossProfile ? "true" : "false"));
+            pw.println(prefix + "crossProfile=" + (crossProfile ? "true" : "false"));
             if (networkSecurityConfigRes != 0) {
                 pw.println(prefix + "networkSecurityConfigRes=0x"
                         + Integer.toHexString(networkSecurityConfigRes));
@@ -1878,6 +1886,15 @@
         return (privateFlags & PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE) != 0;
     }
 
+    /**
+     * If {@code true} this app allows heap pointer tagging.
+     *
+     * @hide
+     */
+    public boolean allowsNativeHeapPointerTagging() {
+        return (privateFlags & PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING) != 0;
+    }
+
     private boolean isAllowedToUseHiddenApis() {
         if (isSignedWithPlatformKey()) {
             return true;
diff --git a/core/java/android/content/pm/CrossProfileApps.java b/core/java/android/content/pm/CrossProfileApps.java
index de153d0..3261cb1 100644
--- a/core/java/android/content/pm/CrossProfileApps.java
+++ b/core/java/android/content/pm/CrossProfileApps.java
@@ -19,6 +19,7 @@
 import android.annotation.Nullable;
 import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
+import android.app.Activity;
 import android.app.AppOpsManager.Mode;
 import android.content.ComponentName;
 import android.content.Context;
@@ -47,8 +48,15 @@
 public class CrossProfileApps {
 
     /**
-     * Broadcast signalling that the receiving app's ability to interact across profiles has
-     * changed, as defined by the return value of {@link #canInteractAcrossProfiles()}.
+     * Broadcast signalling that the receiving app's permission to interact across profiles has
+     * changed. This includes the user, admin, or OEM changing their consent such that the
+     * permission for the app to interact across profiles has changed.
+     *
+     * <p>This broadcast is not sent when other circumstances result in a change to being able to
+     * interact across profiles in practice, such as the profile being turned off or removed, apps
+     * being uninstalled, etc. The methods {@link #canInteractAcrossProfiles()} and {@link
+     * #canRequestInteractAcrossProfiles()} can be used by apps prior to attempting to interact
+     * across profiles or attempting to request user consent to interact across profiles.
      *
      * <p>Apps that have set the {@code android:crossProfile} manifest attribute to {@code true}
      * can receive this broadcast in manifest broadcast receivers. Otherwise, it can only be
@@ -87,6 +95,7 @@
             mService.startActivityAsUser(
                     mContext.getIApplicationThread(),
                     mContext.getPackageName(),
+                    mContext.getFeatureId(),
                     component,
                     targetUser.getIdentifier(),
                     true);
@@ -98,24 +107,35 @@
     /**
      * Starts the specified activity of the caller package in the specified profile.
      *
-     * <p>The caller must have the {@link android.Manifest.permission#INTERACT_ACROSS_PROFILES}
-     * permission and both the caller and target user profiles must be in the same profile group.
+     * <p>The caller must have the {@link android.Manifest.permission#INTERACT_ACROSS_PROFILES},
+     * {@code android.Manifest.permission#INTERACT_ACROSS_USERS}, or {@code
+     * android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission. Both the caller and
+     * target user profiles must be in the same profile group. The target user must be a valid user
+     * returned from {@link #getTargetUserProfiles()}.
      *
      * @param intent The intent to launch. A component in the caller package must be specified.
      * @param targetUser The {@link UserHandle} of the profile; must be one of the users returned by
      *        {@link #getTargetUserProfiles()} if different to the calling user, otherwise a
      *        {@link SecurityException} will be thrown.
+     * @param callingActivity The activity to start the new activity from for the purposes of
+     *        deciding which task the new activity should belong to. If {@code null}, the activity
+     *        will always be started in a new task.
      */
     @RequiresPermission(anyOf = {
             android.Manifest.permission.INTERACT_ACROSS_PROFILES,
             android.Manifest.permission.INTERACT_ACROSS_USERS})
-    public void startActivity(@NonNull Intent intent, @NonNull UserHandle targetUser) {
+    public void startActivity(
+            @NonNull Intent intent,
+            @NonNull UserHandle targetUser,
+            @Nullable Activity callingActivity) {
         try {
             mService.startActivityAsUserByIntent(
                     mContext.getIApplicationThread(),
                     mContext.getPackageName(),
+                    mContext.getFeatureId(),
                     intent,
-                    targetUser.getIdentifier());
+                    targetUser.getIdentifier(),
+                    callingActivity != null ? callingActivity.getActivityToken() : null);
         } catch (RemoteException ex) {
             throw ex.rethrowFromSystemServer();
         }
@@ -139,7 +159,8 @@
     public void startActivity(@NonNull ComponentName component, @NonNull UserHandle targetUser) {
         try {
             mService.startActivityAsUser(mContext.getIApplicationThread(),
-                    mContext.getPackageName(), component, targetUser.getIdentifier(), false);
+                    mContext.getPackageName(), mContext.getFeatureId(), component,
+                    targetUser.getIdentifier(), false);
         } catch (RemoteException ex) {
             throw ex.rethrowFromSystemServer();
         }
@@ -216,10 +237,11 @@
     }
 
     /**
-     * Returns whether the calling package can request to interact across profiles.
+     * Returns whether the calling package can request user consent to interact across profiles.
      *
-     * <p>The package's current ability to interact across profiles can be checked with
-     * {@link #canInteractAcrossProfiles()}.
+     * <p>If {@code true}, user consent can be obtained via {@link
+     * #createRequestInteractAcrossProfilesIntent()}. The package can then listen to {@link
+     * #ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED} broadcasts.
      *
      * <p>Specifically, returns whether the following are all true:
      * <ul>
@@ -232,6 +254,10 @@
      * </li>
      * </ul>
      *
+     * <p>Note that user consent could already be granted if given a return value of {@code true}.
+     * The package's current ability to interact across profiles can be checked with {@link
+     * #canInteractAcrossProfiles()}.
+     *
      * @return true if the calling package can request to interact across profiles.
      */
     public boolean canRequestInteractAcrossProfiles() {
@@ -244,10 +270,7 @@
 
     /**
      * Returns whether the calling package can interact across profiles.
-     *
-     * <p>The package's current ability to request to interact across profiles can be checked with
-     * {@link #canRequestInteractAcrossProfiles()}.
-     *
+
      * <p>Specifically, returns whether the following are all true:
      * <ul>
      * <li>{@link #getTargetUserProfiles()} returns a non-empty list for the calling user.</li>
@@ -259,6 +282,11 @@
      * </li>
      * </ul>
      *
+     * <p>If {@code false}, the package's current ability to request user consent to interact across
+     * profiles can be checked with {@link #canRequestInteractAcrossProfiles()}. If {@code true},
+     * user consent can be obtained via {@link #createRequestInteractAcrossProfilesIntent()}. The
+     * package can then listen to {@link #ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED} broadcasts.
+     *
      * @return true if the calling package can interact across profiles.
      * @throws SecurityException if {@code mContext.getPackageName()} does not belong to the
      * calling UID.
@@ -273,11 +301,15 @@
 
     /**
      * Returns an {@link Intent} to open the settings page that allows the user to decide whether
-     * the calling app can interact across profiles. The current state is given by
-     * {@link #canInteractAcrossProfiles()}.
+     * the calling app can interact across profiles.
      *
      * <p>Returns {@code null} if {@link #canRequestInteractAcrossProfiles()} is {@code false}.
      *
+     * <p>Note that the user may already have given consent and the app may already be able to
+     * interact across profiles, even if {@link #canRequestInteractAcrossProfiles()} is {@code
+     * true}. The current ability to interact across profiles is given by {@link
+     * #canInteractAcrossProfiles()}.
+     *
      * @return an {@link Intent} to open the settings page that allows the user to decide whether
      * the app can interact across profiles
      *
@@ -316,13 +348,21 @@
      *
      * <p>If other changes could have affected the app's ability to interact across profiles, as
      * defined by the return value of {@link #canInteractAcrossProfiles()}, such as changes to the
-     * admin or OEM consent whitelists, then {@link
-     * #resetInteractAcrossProfilesAppOpsIfInvalid(List)} should be used.
+     * admin or OEM consent whitelists, then {@link #resetInteractAcrossProfilesAppOps(Collection,
+     * Set)} should be used.
+     *
+     * <p>If the caller does not have the {@link android.Manifest.permission
+     * #CONFIGURE_INTERACT_ACROSS_PROFILES} permission, then they must have the permissions that
+     * would have been required to call {@link android.app.AppOpsManager#setMode(int, int, String,
+     * int)}, which includes {@link android.Manifest.permission#MANAGE_APP_OPS_MODES}.
+     *
+     * <p>Also requires either {@link android.Manifest.permission#INTERACT_ACROSS_USERS} or {@link
+     * android.Manifest.permission#INTERACT_ACROSS_USERS_FULL}.
      *
      * @hide
      */
     @RequiresPermission(
-            allOf={android.Manifest.permission.MANAGE_APP_OPS_MODES,
+            allOf={android.Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES,
                     android.Manifest.permission.INTERACT_ACROSS_USERS})
     public void setInteractAcrossProfilesAppOp(@NonNull String packageName, @Mode int newMode) {
         try {
@@ -359,10 +399,18 @@
      * have changed as a result of non-user actions, such as changes to admin or OEM consent
      * whitelists.
      *
+     * <p>If the caller does not have the {@link android.Manifest.permission
+     * #CONFIGURE_INTERACT_ACROSS_PROFILES} permission, then they must have the permissions that
+     * would have been required to call {@link android.app.AppOpsManager#setMode(int, int, String,
+     * int)}, which includes {@link android.Manifest.permission#MANAGE_APP_OPS_MODES}.
+     *
+     * <p>Also requires either {@link android.Manifest.permission#INTERACT_ACROSS_USERS} or {@link
+     * android.Manifest.permission#INTERACT_ACROSS_USERS_FULL}.
+     *
      * @hide
      */
     @RequiresPermission(
-            allOf={android.Manifest.permission.MANAGE_APP_OPS_MODES,
+            allOf={android.Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES,
                     android.Manifest.permission.INTERACT_ACROSS_USERS})
     public void resetInteractAcrossProfilesAppOps(
             @NonNull Collection<String> previousCrossProfilePackages,
diff --git a/core/java/android/content/pm/CrossProfileAppsInternal.java b/core/java/android/content/pm/CrossProfileAppsInternal.java
new file mode 100644
index 0000000..16a749f
--- /dev/null
+++ b/core/java/android/content/pm/CrossProfileAppsInternal.java
@@ -0,0 +1,65 @@
+/*
+ * 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.content.pm;
+
+import android.annotation.UserIdInt;
+import android.os.UserHandle;
+
+import java.util.List;
+
+/**
+ * Exposes internal methods from {@link com.android.server.pm.CrossProfileAppsServiceImpl} to other
+ * system server classes.
+ *
+ * @hide Only for use within the system server.
+ */
+public abstract class CrossProfileAppsInternal {
+    /**
+     * Returns whether the package has the necessary permissions to communicate cross-profile.
+     *
+     * <p>This means having at least one of these conditions:
+     * <ul>
+     *     <li>{@code Manifest.permission.INTERACT_ACROSS_USERS_FULL} granted.
+     *     <li>{@code Manifest.permission.INTERACT_ACROSS_USERS} granted.
+     *     <li>{@code Manifest.permission.INTERACT_ACROSS_PROFILES} granted, or the corresponding
+     *     AppOps {@code android:interact_across_profiles} is set to "allow".
+     * </ul>
+     */
+    public abstract boolean verifyPackageHasInteractAcrossProfilePermission(String packageName,
+            @UserIdInt int userId) throws PackageManager.NameNotFoundException;
+
+    /**
+     * Returns whether the package has the necessary permissions to communicate cross-profile.
+     *
+     * <p>This means having at least one of these conditions:
+     * <ul>
+     *     <li>{@code Manifest.permission.INTERACT_ACROSS_USERS_FULL} granted.
+     *     <li>{@code Manifest.permission.INTERACT_ACROSS_USERS} granted.
+     *     <li>{@code Manifest.permission.INTERACT_ACROSS_PROFILES} granted, or the corresponding
+     *     AppOps {@code android:interact_across_profiles} is set to "allow".
+     * </ul>
+     */
+    public abstract boolean verifyUidHasInteractAcrossProfilePermission(String packageName,
+            int uid);
+
+    /**
+     * Returns the list of target user profiles for the given package on the given user. See {@link
+     * CrossProfileApps#getTargetUserProfiles()}.
+     */
+    public abstract List<UserHandle> getTargetUserProfiles(
+            String packageName, @UserIdInt int userId);
+}
diff --git a/core/java/android/content/pm/ICrossProfileApps.aidl b/core/java/android/content/pm/ICrossProfileApps.aidl
index a69b988..5a6e008 100644
--- a/core/java/android/content/pm/ICrossProfileApps.aidl
+++ b/core/java/android/content/pm/ICrossProfileApps.aidl
@@ -28,13 +28,14 @@
  */
 interface ICrossProfileApps {
     void startActivityAsUser(in IApplicationThread caller, in String callingPackage,
-            in ComponentName component, int userId, boolean launchMainActivity);
+            in String callingFeatureId, in ComponentName component, int userId,
+            boolean launchMainActivity);
     void startActivityAsUserByIntent(in IApplicationThread caller, in String callingPackage,
-                        in Intent intent, int userId);
+            in String callingFeatureId, in Intent intent, int userId, in IBinder callingActivity);
     List<UserHandle> getTargetUserProfiles(in String callingPackage);
     boolean canInteractAcrossProfiles(in String callingPackage);
     boolean canRequestInteractAcrossProfiles(in String callingPackage);
     void setInteractAcrossProfilesAppOp(in String packageName, int newMode);
     boolean canConfigureInteractAcrossProfiles(in String packageName);
     void resetInteractAcrossProfilesAppOps(in List<String> packageNames);
-}
\ No newline at end of file
+}
diff --git a/core/java/android/content/pm/ILauncherApps.aidl b/core/java/android/content/pm/ILauncherApps.aidl
index 0492359..b5f4f80 100644
--- a/core/java/android/content/pm/ILauncherApps.aidl
+++ b/core/java/android/content/pm/ILauncherApps.aidl
@@ -49,13 +49,13 @@
     ActivityInfo resolveActivity(
             String callingPackage, in ComponentName component, in UserHandle user);
     void startSessionDetailsActivityAsUser(in IApplicationThread caller, String callingPackage,
-                in PackageInstaller.SessionInfo sessionInfo, in Rect sourceBounds, in Bundle opts,
-                in UserHandle user);
+                String callingFeatureId, in PackageInstaller.SessionInfo sessionInfo,
+                in Rect sourceBounds, in Bundle opts, in UserHandle user);
     void startActivityAsUser(in IApplicationThread caller, String callingPackage,
-            in ComponentName component, in Rect sourceBounds,
+            String callingFeatureId, in ComponentName component, in Rect sourceBounds,
             in Bundle opts, in UserHandle user);
-    void showAppDetailsAsUser(in IApplicationThread caller,
-            String callingPackage, in ComponentName component, in Rect sourceBounds,
+    void showAppDetailsAsUser(in IApplicationThread caller, String callingPackage,
+            String callingFeatureId, in ComponentName component, in Rect sourceBounds,
             in Bundle opts, in UserHandle user);
     boolean isPackageEnabled(String callingPackage, String packageName, in UserHandle user);
     Bundle getSuspendedPackageLauncherExtras(String packageName, in UserHandle user);
@@ -72,7 +72,7 @@
             int flags, in UserHandle user);
     void pinShortcuts(String callingPackage, String packageName, in List<String> shortcutIds,
             in UserHandle user);
-    boolean startShortcut(String callingPackage, String packageName, String id,
+    boolean startShortcut(String callingPackage, String packageName, String featureId, String id,
             in Rect sourceBounds, in Bundle startActivityOptions, int userId);
 
     int getShortcutIconResId(String callingPackage, String packageName, String id,
@@ -98,4 +98,9 @@
             in ComponentName componentName, int flags, in IShortcutChangeCallback callback,
             int callbackId);
     void unregisterShortcutChangeCallback(String callingPackage, int callbackId);
+
+    void cacheShortcuts(String callingPackage, String packageName, in List<String> shortcutIds,
+            in UserHandle user);
+    void uncacheShortcuts(String callingPackage, String packageName, in List<String> shortcutIds,
+            in UserHandle user);
 }
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 6552d1b..e9cdbf28 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -482,19 +482,12 @@
      * Notify the package manager that a list of dex files have been loaded.
      *
      * @param loadingPackageName the name of the package who performs the load
-     * @param classLoadersNames the names of the class loaders present in the loading chain. The
-     *    list encodes the class loader chain in the natural order. The first class loader has
-     *    the second one as its parent and so on. The dex files present in the class path of the
-     *    first class loader will be recorded in the usage file.
-     * @param classPaths the class paths corresponding to the class loaders names from
-     *     {@param classLoadersNames}. The the first element corresponds to the first class loader
-     *     and so on. A classpath is represented as a list of dex files separated by
-     *     {@code File.pathSeparator}, or null if the class loader's classpath is not known.
-     *     The dex files found in the first class path will be recorded in the usage file.
+     * @param classLoaderContextMap a map from file paths to dex files that have been loaded to
+     *     the class loader context that was used to load them.
      * @param loaderIsa the ISA of the loader process
      */
-    oneway void notifyDexLoad(String loadingPackageName, in List<String> classLoadersNames,
-            in List<String> classPaths, String loaderIsa);
+    oneway void notifyDexLoad(String loadingPackageName,
+            in Map<String, String> classLoaderContextMap, String loaderIsa);
 
     /**
      * Register an application dex module with the package manager.
@@ -749,4 +742,11 @@
     // a large change that modifies many repos.
     //------------------------------------------------------------------------
     int checkUidPermission(String permName, int uid);
+
+    void setMimeGroup(String packageName, String group, in List<String> mimeTypes);
+
+    void clearMimeGroup(String packageName, String group);
+
+    List<String> getMimeGroup(String packageName, String group);
+
 }
diff --git a/core/java/android/content/pm/InstallationFile.java b/core/java/android/content/pm/InstallationFile.java
index 111ad32..b449945 100644
--- a/core/java/android/content/pm/InstallationFile.java
+++ b/core/java/android/content/pm/InstallationFile.java
@@ -16,82 +16,59 @@
 
 package android.content.pm;
 
-import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.os.Parcel;
 import android.os.Parcelable;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
 /**
  * Defines the properties of a file in an installation session.
- * TODO(b/136132412): update with new APIs.
- *
  * @hide
  */
 @SystemApi
 public final class InstallationFile implements Parcelable {
-    public static final int FILE_TYPE_UNKNOWN = -1;
-    public static final int FILE_TYPE_APK = 0;
-    public static final int FILE_TYPE_LIB = 1;
-    public static final int FILE_TYPE_OBB = 2;
+    private final @PackageInstaller.FileLocation int mLocation;
+    private final @NonNull String mName;
+    private final long mLengthBytes;
+    private final @Nullable byte[] mMetadata;
+    private final @Nullable byte[] mSignature;
 
-    /** @hide */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef(prefix = {"FILE_TYPE_"}, value = {
-            FILE_TYPE_APK,
-            FILE_TYPE_LIB,
-            FILE_TYPE_OBB,
-    })
-    public @interface FileType {
-    }
-
-    private String mFileName;
-    private @FileType int mFileType;
-    private long mFileSize;
-    private byte[] mMetadata;
-
-    public InstallationFile(@NonNull String fileName, long fileSize,
-            @Nullable byte[] metadata) {
-        mFileName = fileName;
-        mFileSize = fileSize;
+    public InstallationFile(@PackageInstaller.FileLocation int location, @NonNull String name,
+            long lengthBytes, @Nullable byte[] metadata, @Nullable byte[] signature) {
+        mLocation = location;
+        mName = name;
+        mLengthBytes = lengthBytes;
         mMetadata = metadata;
-        if (fileName.toLowerCase().endsWith(".apk")) {
-            mFileType = FILE_TYPE_APK;
-        } else if (fileName.toLowerCase().endsWith(".obb")) {
-            mFileType = FILE_TYPE_OBB;
-        } else if (fileName.toLowerCase().endsWith(".so") && fileName.toLowerCase().startsWith(
-                "lib/")) {
-            mFileType = FILE_TYPE_LIB;
-        } else {
-            mFileType = FILE_TYPE_UNKNOWN;
-        }
+        mSignature = signature;
     }
 
-    public @FileType int getFileType() {
-        return mFileType;
+    public @PackageInstaller.FileLocation int getLocation() {
+        return mLocation;
     }
 
     public @NonNull String getName() {
-        return mFileName;
+        return mName;
     }
 
-    public long getSize() {
-        return mFileSize;
+    public long getLengthBytes() {
+        return mLengthBytes;
     }
 
     public @Nullable byte[] getMetadata() {
         return mMetadata;
     }
 
+    public @Nullable byte[] getSignature() {
+        return mSignature;
+    }
+
     private InstallationFile(Parcel source) {
-        mFileName = source.readString();
-        mFileType = source.readInt();
-        mFileSize = source.readLong();
+        mLocation = source.readInt();
+        mName = source.readString();
+        mLengthBytes = source.readLong();
         mMetadata = source.createByteArray();
+        mSignature = source.createByteArray();
     }
 
     @Override
@@ -101,10 +78,11 @@
 
     @Override
     public void writeToParcel(@NonNull Parcel dest, int flags) {
-        dest.writeString(mFileName);
-        dest.writeInt(mFileType);
-        dest.writeLong(mFileSize);
+        dest.writeInt(mLocation);
+        dest.writeString(mName);
+        dest.writeLong(mLengthBytes);
         dest.writeByteArray(mMetadata);
+        dest.writeByteArray(mSignature);
     }
 
     public static final @NonNull Creator<InstallationFile> CREATOR =
diff --git a/core/java/android/content/pm/InstantAppRequest.java b/core/java/android/content/pm/InstantAppRequest.java
index f692db1..84f5021 100644
--- a/core/java/android/content/pm/InstantAppRequest.java
+++ b/core/java/android/content/pm/InstantAppRequest.java
@@ -35,6 +35,8 @@
     public final String resolvedType;
     /** The name of the package requesting the instant application */
     public final String callingPackage;
+    /** The feature in the package requesting the instant application */
+    public final String callingFeatureId;
     /** Whether or not the requesting package was an instant app */
     public final boolean isRequesterInstantApp;
     /** ID of the user requesting the instant application */
@@ -57,13 +59,15 @@
     public final String token;
 
     public InstantAppRequest(AuxiliaryResolveInfo responseObj, Intent origIntent,
-            String resolvedType, String callingPackage, boolean isRequesterInstantApp,
-            int userId, Bundle verificationBundle, boolean resolveForStart,
-            @Nullable int[] hostDigestPrefixSecure, @NonNull String token) {
+            String resolvedType, String callingPackage, @Nullable String callingFeatureId,
+            boolean isRequesterInstantApp, int userId, Bundle verificationBundle,
+            boolean resolveForStart, @Nullable int[] hostDigestPrefixSecure,
+            @NonNull String token) {
         this.responseObj = responseObj;
         this.origIntent = origIntent;
         this.resolvedType = resolvedType;
         this.callingPackage = callingPackage;
+        this.callingFeatureId = callingFeatureId;
         this.isRequesterInstantApp = isRequesterInstantApp;
         this.userId = userId;
         this.verificationBundle = verificationBundle;
diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java
index 73c9e4d..5aa0208 100644
--- a/core/java/android/content/pm/LauncherApps.java
+++ b/core/java/android/content/pm/LauncherApps.java
@@ -16,10 +16,12 @@
 
 package android.content.pm;
 
+import static android.Manifest.permission;
 import android.annotation.CallbackExecutor;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.annotation.SystemApi;
@@ -600,11 +602,15 @@
     }
 
     /**
-     * Show an error log on logcat, when the calling user is a managed profile, and the target
-     * user is different from the calling user, in order to help developers to detect it.
+     * Show an error log on logcat, when the calling user is a managed profile, the target
+     * user is different from the calling user, and it is not called from a package that has the
+     * {@link permission.INTERACT_ACROSS_USERS_FULL} permission, in order to help
+     * developers to detect it.
      */
     private void logErrorForInvalidProfileAccess(@NonNull UserHandle target) {
-        if (UserHandle.myUserId() != target.getIdentifier() && mUserManager.isManagedProfile()) {
+        if (UserHandle.myUserId() != target.getIdentifier() && mUserManager.isManagedProfile()
+                    && mContext.checkSelfPermission(permission.INTERACT_ACROSS_USERS_FULL)
+                            != PackageManager.PERMISSION_GRANTED) {
             Log.w(TAG, "Accessing other profiles/users from managed profile is no longer allowed.");
         }
     }
@@ -714,7 +720,7 @@
         }
         try {
             mService.startActivityAsUser(mContext.getIApplicationThread(),
-                    mContext.getPackageName(),
+                    mContext.getPackageName(), mContext.getFeatureId(),
                     component, sourceBounds, opts, user);
         } catch (RemoteException re) {
             throw re.rethrowFromSystemServer();
@@ -732,8 +738,8 @@
             @Nullable Rect sourceBounds, @Nullable Bundle opts) {
         try {
             mService.startSessionDetailsActivityAsUser(mContext.getIApplicationThread(),
-                    mContext.getPackageName(), sessionInfo, sourceBounds, opts,
-                    sessionInfo.getUser());
+                    mContext.getPackageName(), mContext.getFeatureId(), sessionInfo, sourceBounds,
+                    opts, sessionInfo.getUser());
         } catch (RemoteException re) {
             throw re.rethrowFromSystemServer();
         }
@@ -753,7 +759,7 @@
         logErrorForInvalidProfileAccess(user);
         try {
             mService.showAppDetailsAsUser(mContext.getIApplicationThread(),
-                    mContext.getPackageName(),
+                    mContext.getPackageName(), mContext.getFeatureId(),
                     component, sourceBounds, opts, user);
         } catch (RemoteException re) {
             throw re.rethrowFromSystemServer();
@@ -1089,6 +1095,61 @@
     }
 
     /**
+     * Mark shortcuts as cached for a package.
+     *
+     * <p>Only dynamic long lived shortcuts can be cached. None dynamic or non long lived shortcuts
+     * in the list will be ignored.
+     *
+     * <p>Unlike pinned shortcuts, where different callers can have different sets of pinned
+     * shortcuts, cached state is per shortcut only, and even if multiple callers cache the same
+     * shortcut, it can be uncached by any valid caller.
+     *
+     * @param packageName The target package name.
+     * @param shortcutIds The IDs of the shortcut to be cached.
+     * @param user The UserHandle of the profile.
+     * @throws IllegalStateException when the user is locked, or when the {@code user} user
+     * is locked or not running.
+     *
+     * @see ShortcutManager
+     *
+     * @hide
+     */
+    @RequiresPermission(android.Manifest.permission.ACCESS_SHORTCUTS)
+    public void cacheShortcuts(@NonNull String packageName, @NonNull List<String> shortcutIds,
+            @NonNull UserHandle user) {
+        logErrorForInvalidProfileAccess(user);
+        try {
+            mService.cacheShortcuts(mContext.getPackageName(), packageName, shortcutIds, user);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Remove cached flag from shortcuts for a package.
+     *
+     * @param packageName The target package name.
+     * @param shortcutIds The IDs of the shortcut to be uncached.
+     * @param user The UserHandle of the profile.
+     * @throws IllegalStateException when the user is locked, or when the {@code user} user
+     * is locked or not running.
+     *
+     * @see ShortcutManager
+     *
+     * @hide
+     */
+    @RequiresPermission(android.Manifest.permission.ACCESS_SHORTCUTS)
+    public void uncacheShortcuts(@NonNull String packageName, @NonNull List<String> shortcutIds,
+            @NonNull UserHandle user) {
+        logErrorForInvalidProfileAccess(user);
+        try {
+            mService.uncacheShortcuts(mContext.getPackageName(), packageName, shortcutIds, user);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * @hide kept for testing.
      */
     @Deprecated
@@ -1290,9 +1351,9 @@
             @Nullable Rect sourceBounds, @Nullable Bundle startActivityOptions,
             int userId) {
         try {
-            final boolean success =
-                    mService.startShortcut(mContext.getPackageName(), packageName, shortcutId,
-                    sourceBounds, startActivityOptions, userId);
+            final boolean success = mService.startShortcut(mContext.getPackageName(), packageName,
+                    null /* default featureId */, shortcutId, sourceBounds, startActivityOptions,
+                    userId);
             if (!success) {
                 throw new ActivityNotFoundException("Shortcut could not be started");
             }
diff --git a/core/java/android/content/pm/PackageInfoLite.java b/core/java/android/content/pm/PackageInfoLite.java
index 6743a3f..9735f81 100644
--- a/core/java/android/content/pm/PackageInfoLite.java
+++ b/core/java/android/content/pm/PackageInfoLite.java
@@ -74,6 +74,11 @@
     public boolean multiArch;
 
     /**
+     * The android:debuggable flag from the package manifest.
+     */
+    public boolean debuggable;
+
+    /**
      * Specifies the recommended install location. Can be one of
      * {@link PackageHelper#RECOMMEND_INSTALL_INTERNAL} to install on internal storage,
      * {@link PackageHelper#RECOMMEND_INSTALL_EXTERNAL} to install on external media,
@@ -108,6 +113,7 @@
         dest.writeInt(recommendedInstallLocation);
         dest.writeInt(installLocation);
         dest.writeInt(multiArch ? 1 : 0);
+        dest.writeInt(debuggable ? 1 : 0);
 
         if (verifiers == null || verifiers.length == 0) {
             dest.writeInt(0);
@@ -139,6 +145,7 @@
         recommendedInstallLocation = source.readInt();
         installLocation = source.readInt();
         multiArch = (source.readInt() != 0);
+        debuggable = (source.readInt() != 0);
 
         final int verifiersLength = source.readInt();
         if (verifiersLength == 0) {
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 5a0bcf0..ab3982a 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -38,7 +38,7 @@
 import android.app.admin.DevicePolicyManager;
 import android.app.usage.StorageStatsManager;
 import android.compat.annotation.ChangeId;
-import android.compat.annotation.Disabled;
+import android.compat.annotation.EnabledAfter;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.ComponentName;
 import android.content.Context;
@@ -60,6 +60,7 @@
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.os.incremental.IncrementalManager;
 import android.os.storage.StorageManager;
 import android.os.storage.VolumeInfo;
 import android.util.AndroidException;
@@ -596,6 +597,7 @@
      * @hide
      */
     @SystemApi
+    @TestApi
     public static final int MODULE_APEX_NAME = 0x00000001;
 
     /** @hide */
@@ -1986,10 +1988,11 @@
 
     /**
      * Feature for {@link #getSystemAvailableFeatures} and
-     * {@link #hasSystemFeature}: The device supports a Context Hub.
+     * {@link #hasSystemFeature}: The device supports a Context Hub, used to expose the
+     * functionalities in {@link android.hardware.location.ContextHubManager}.
      */
     @SdkConstant(SdkConstantType.FEATURE)
-    public static final String FEATURE_CONTEXTHUB = "android.hardware.context_hub";
+    public static final String FEATURE_CONTEXT_HUB = "android.hardware.context_hub";
 
     /** {@hide} */
     @SdkConstant(SdkConstantType.FEATURE)
@@ -2997,6 +3000,41 @@
     public static final String FEATURE_REBOOT_ESCROW = "android.hardware.reboot_escrow";
 
     /**
+     * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device has
+     * the requisite kernel support to support incremental delivery aka Incremental FileSystem.
+     *
+     * @see IncrementalManager#isEnabled
+     * @hide
+     */
+    @SystemApi
+    @SdkConstant(SdkConstantType.FEATURE)
+    public static final String FEATURE_INCREMENTAL_DELIVERY =
+            "android.software.incremental_delivery";
+
+    /**
+     * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
+     * The device has tuner hardware to support tuner operations.
+     *
+     * <p>This feature implies that the device has the tuner HAL implementation.
+     *
+     * @hide
+     */
+    @SdkConstant(SdkConstantType.FEATURE)
+    public static final String FEATURE_TUNER = "android.hardware.tv.tuner";
+
+    /**
+     * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device has
+     * the necessary changes to support app enumeration.
+     *
+     * @hide
+     */
+    @SdkConstant(SdkConstantType.FEATURE)
+    public static final String FEATURE_APP_ENUMERATION = "android.software.app_enumeration";
+
+    /** @hide */
+    public static final boolean APP_ENUMERATION_ENABLED_BY_DEFAULT = true;
+
+    /**
      * Extra field name for the URI to a verification file. Passed to a package
      * verifier.
      *
@@ -3359,15 +3397,24 @@
      * @hide
      */
     @SystemApi
-    public static final int FLAG_PERMISSION_DONT_AUTO_REVOKE = 1 << 17;
+    public static final int FLAG_PERMISSION_AUTO_REVOKE_IF_UNUSED = 1 << 17;
 
     /**
-     * Permission flag: Whether {@link #FLAG_PERMISSION_DONT_AUTO_REVOKE} state was set by user.
+     * Permission flag: Whether {@link #FLAG_PERMISSION_AUTO_REVOKE_IF_UNUSED} state was set by
+     * user.
      *
      * @hide
      */
     @SystemApi
-    public static final int FLAG_PERMISSION_DONT_AUTO_REVOKE_USER_SET = 1 << 18;
+    public static final int FLAG_PERMISSION_AUTO_REVOKE_USER_SET = 1 << 18;
+
+    /**
+     * Permission flag: Whether permission was revoked by auto-revoke.
+     *
+     * @hide
+     */
+    @SystemApi
+    public static final int FLAG_PERMISSION_AUTO_REVOKED = 1 << 20;
 
     /**
      * Permission flags: Reserved for use by the permission controller.
@@ -3421,8 +3468,9 @@
             | FLAG_PERMISSION_GRANTED_BY_ROLE
             | FLAG_PERMISSION_REVOKED_COMPAT
             | FLAG_PERMISSION_ONE_TIME
-            | FLAG_PERMISSION_DONT_AUTO_REVOKE
-            | FLAG_PERMISSION_DONT_AUTO_REVOKE_USER_SET;
+            | FLAG_PERMISSION_AUTO_REVOKE_IF_UNUSED
+            | FLAG_PERMISSION_AUTO_REVOKE_USER_SET
+            | FLAG_PERMISSION_AUTO_REVOKED;
 
     /**
      * Injected activity in app that forwards user to setting activity of that app.
@@ -3566,7 +3614,7 @@
      * @hide
      */
     @ChangeId
-    @Disabled
+    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
     public static final long FILTER_APPLICATION_QUERY = 135549675L;
 
     /** {@hide} */
@@ -4246,7 +4294,9 @@
             FLAG_PERMISSION_GRANTED_BY_ROLE,
             FLAG_PERMISSION_REVOKED_COMPAT,
             FLAG_PERMISSION_ONE_TIME,
-            FLAG_PERMISSION_DONT_AUTO_REVOKE
+            FLAG_PERMISSION_AUTO_REVOKE_IF_UNUSED,
+            FLAG_PERMISSION_AUTO_REVOKE_USER_SET,
+            FLAG_PERMISSION_AUTO_REVOKED
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface PermissionFlags {}
@@ -7383,8 +7433,9 @@
             case FLAG_PERMISSION_GRANTED_BY_ROLE: return "GRANTED_BY_ROLE";
             case FLAG_PERMISSION_REVOKED_COMPAT: return "REVOKED_COMPAT";
             case FLAG_PERMISSION_ONE_TIME: return "ONE_TIME";
-            case FLAG_PERMISSION_DONT_AUTO_REVOKE: return "DONT_AUTO_REVOKE";
-            case FLAG_PERMISSION_DONT_AUTO_REVOKE_USER_SET: return "DONT_AUTO_REVOKE_USER_SET";
+            case FLAG_PERMISSION_AUTO_REVOKE_IF_UNUSED: return "AUTO_REVOKE_IF_UNUSED";
+            case FLAG_PERMISSION_AUTO_REVOKE_USER_SET: return "AUTO_REVOKE_USER_SET";
+            case FLAG_PERMISSION_AUTO_REVOKED: return "AUTO_REVOKED";
             default: return Integer.toString(flag);
         }
     }
@@ -7779,4 +7830,37 @@
         return resId == com.android.internal.R.drawable.sym_def_app_icon
                 || resId == com.android.internal.R.drawable.sym_app_on_sd_unavailable_icon;
     }
+
+    /**
+     * Sets MIME group's MIME types
+     *
+     * @param mimeGroup MIME group to modify
+     * @param mimeTypes new MIME types contained by MIME group
+     */
+    public void setMimeGroup(@NonNull String mimeGroup, @NonNull Set<String> mimeTypes) {
+        throw new UnsupportedOperationException(
+                "setMimeGroup not implemented in subclass");
+    }
+
+    /**
+     * Clears MIME group by removing all MIME types from it
+     *
+     * @param mimeGroup MIME group to clear
+     */
+    public void clearMimeGroup(@NonNull String mimeGroup) {
+        throw new UnsupportedOperationException(
+                "clearMimeGroup not implemented in subclass");
+    }
+
+    /**
+     * Gets all MIME types that MIME group contains
+     *
+     * @return MIME types contained by the MIME group,
+     *         or null if the MIME group was not declared in the manifest.
+     */
+    @Nullable
+    public Set<String> getMimeGroup(@NonNull String mimeGroup) {
+        throw new UnsupportedOperationException(
+                "getMimeGroup not implemented in subclass");
+    }
 }
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index b6b27b6..1de82450 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -41,7 +41,6 @@
 import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
 import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED;
 
-import android.annotation.AnyThread;
 import android.annotation.IntDef;
 import android.annotation.IntRange;
 import android.annotation.NonNull;
@@ -56,13 +55,7 @@
 import android.content.ComponentName;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.pm.PackageParserCacheHelper.ReadHelper;
-import android.content.pm.PackageParserCacheHelper.WriteHelper;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ApkParseUtils;
-import android.content.pm.parsing.PackageImpl;
-import android.content.pm.parsing.PackageInfoUtils;
-import android.content.pm.parsing.ParsedPackage;
+import android.content.pm.parsing.ParsingPackageUtils;
 import android.content.pm.permission.SplitPermissionInfoParcelable;
 import android.content.pm.split.DefaultSplitAssetLoader;
 import android.content.pm.split.SplitAssetDependencyLoader;
@@ -80,14 +73,10 @@
 import android.os.Parcelable;
 import android.os.PatternMatcher;
 import android.os.RemoteException;
-import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.Trace;
 import android.os.UserHandle;
 import android.os.storage.StorageManager;
-import android.system.ErrnoException;
-import android.system.OsConstants;
-import android.system.StructStat;
 import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
@@ -119,7 +108,6 @@
 
 import java.io.File;
 import java.io.FileDescriptor;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.lang.annotation.Retention;
@@ -317,9 +305,6 @@
 
     public int mParseError = PackageManager.INSTALL_SUCCEEDED;
 
-    public ThreadLocal<ApkParseUtils.ParseResult> mSharedResult
-            = ThreadLocal.withInitial(ApkParseUtils.ParseResult::new);
-
     public static boolean sCompatibilityModeEnabled = true;
     public static boolean sUseRoundIcon = false;
 
@@ -484,6 +469,9 @@
         public final boolean isolatedSplits;
         public final boolean isSplitRequired;
         public final boolean useEmbeddedDex;
+        public final String targetPackageName;
+        public final boolean overlayIsStatic;
+        public final int overlayPriority;
 
         public ApkLite(String codePath, String packageName, String splitName,
                 boolean isFeatureSplit,
@@ -493,6 +481,7 @@
                 SigningDetails signingDetails, boolean coreApp,
                 boolean debuggable, boolean multiArch, boolean use32bitAbi,
                 boolean useEmbeddedDex, boolean extractNativeLibs, boolean isolatedSplits,
+                String targetPackageName, boolean overlayIsStatic, int overlayPriority,
                 int minSdkVersion, int targetSdkVersion) {
             this.codePath = codePath;
             this.packageName = packageName;
@@ -514,6 +503,9 @@
             this.extractNativeLibs = extractNativeLibs;
             this.isolatedSplits = isolatedSplits;
             this.isSplitRequired = isSplitRequired;
+            this.targetPackageName = targetPackageName;
+            this.overlayIsStatic = overlayIsStatic;
+            this.overlayPriority = overlayPriority;
             this.minSdkVersion = minSdkVersion;
             this.targetSdkVersion = targetSdkVersion;
         }
@@ -1048,7 +1040,7 @@
      * and unique split names.
      * <p>
      * Note that this <em>does not</em> perform signature verification; that
-     * must be done separately in {@link ApkParseUtils#collectCertificates(AndroidPackage, boolean)}.
+     * must be done separately in {@link #collectCertificates(Package, boolean)}.
      *
      * If {@code useCaches} is true, the package parser might return a cached
      * result from a previous parse of the same {@code packageFile} with the same
@@ -1056,10 +1048,8 @@
      * has changed since the last parse, it's up to callers to do so.
      *
      * @see #parsePackageLite(File, int)
-     * @deprecated use {@link #parseParsedPackage(File, int, boolean)}
      */
     @UnsupportedAppUsage
-    @Deprecated
     public Package parsePackage(File packageFile, int flags, boolean useCaches)
             throws PackageParserException {
         if (packageFile.isDirectory()) {
@@ -1071,210 +1061,13 @@
 
     /**
      * Equivalent to {@link #parsePackage(File, int, boolean)} with {@code useCaches == false}.
-     * @deprecated use {@link #parseParsedPackage(File, int, boolean)}
      */
     @UnsupportedAppUsage
-    @Deprecated
     public Package parsePackage(File packageFile, int flags) throws PackageParserException {
         return parsePackage(packageFile, flags, false /* useCaches */);
     }
 
     /**
-     * Updated method which returns {@link ParsedPackage}, the current representation of a
-     * package parsed from disk.
-     *
-     * @see #parsePackage(File, int, boolean)
-     */
-    @AnyThread
-    public ParsedPackage parseParsedPackage(File packageFile, int flags, boolean useCaches)
-            throws PackageParserException {
-        ParsedPackage parsed = useCaches ? getCachedResult(packageFile, flags) : null;
-        if (parsed != null) {
-            return parsed;
-        }
-
-        long parseTime = LOG_PARSE_TIMINGS ? SystemClock.uptimeMillis() : 0;
-        ApkParseUtils.ParseInput parseInput = mSharedResult.get().reset();
-        parsed = ApkParseUtils.parsePackage(
-                parseInput,
-                mSeparateProcesses,
-                mCallback,
-                mMetrics,
-                mOnlyCoreApps,
-                packageFile,
-                flags
-        )
-                .hideAsParsed();
-
-        long cacheTime = LOG_PARSE_TIMINGS ? SystemClock.uptimeMillis() : 0;
-        cacheResult(packageFile, flags, parsed);
-        if (LOG_PARSE_TIMINGS) {
-            parseTime = cacheTime - parseTime;
-            cacheTime = SystemClock.uptimeMillis() - cacheTime;
-            if (parseTime + cacheTime > LOG_PARSE_TIMINGS_THRESHOLD_MS) {
-                Slog.i(TAG, "Parse times for '" + packageFile + "': parse=" + parseTime
-                        + "ms, update_cache=" + cacheTime + " ms");
-            }
-        }
-
-        return parsed;
-    }
-
-    /**
-     * Returns the cache key for a specified {@code packageFile} and {@code flags}.
-     */
-    private String getCacheKey(File packageFile, int flags) {
-        StringBuilder sb = new StringBuilder(packageFile.getName());
-        sb.append('-');
-        sb.append(flags);
-
-        return sb.toString();
-    }
-
-    @VisibleForTesting
-    protected ParsedPackage fromCacheEntry(byte[] bytes) {
-        return fromCacheEntryStatic(bytes);
-    }
-
-    /** static version of {@link #fromCacheEntry} for unit tests. */
-    @VisibleForTesting
-    public static ParsedPackage fromCacheEntryStatic(byte[] bytes) {
-        final Parcel p = Parcel.obtain();
-        p.unmarshall(bytes, 0, bytes.length);
-        p.setDataPosition(0);
-
-        final ReadHelper helper = new ReadHelper(p);
-        helper.startAndInstall();
-
-        // TODO(b/135203078): Hide PackageImpl constructor?
-        ParsedPackage pkg = new PackageImpl(p);
-
-        p.recycle();
-
-        sCachedPackageReadCount.incrementAndGet();
-
-        return pkg;
-    }
-
-    @VisibleForTesting
-    protected byte[] toCacheEntry(ParsedPackage pkg) {
-        return toCacheEntryStatic(pkg);
-
-    }
-
-    /** static version of {@link #toCacheEntry} for unit tests. */
-    @VisibleForTesting
-    public static byte[] toCacheEntryStatic(ParsedPackage pkg) {
-        final Parcel p = Parcel.obtain();
-        final WriteHelper helper = new WriteHelper(p);
-
-        pkg.writeToParcel(p, 0 /* flags */);
-
-        helper.finishAndUninstall();
-
-        byte[] serialized = p.marshall();
-        p.recycle();
-
-        return serialized;
-    }
-
-    /**
-     * Given a {@code packageFile} and a {@code cacheFile} returns whether the
-     * cache file is up to date based on the mod-time of both files.
-     */
-    private static boolean isCacheUpToDate(File packageFile, File cacheFile) {
-        try {
-            // NOTE: We don't use the File.lastModified API because it has the very
-            // non-ideal failure mode of returning 0 with no excepions thrown.
-            // The nio2 Files API is a little better but is considerably more expensive.
-            final StructStat pkg = android.system.Os.stat(packageFile.getAbsolutePath());
-            final StructStat cache = android.system.Os.stat(cacheFile.getAbsolutePath());
-            return pkg.st_mtime < cache.st_mtime;
-        } catch (ErrnoException ee) {
-            // The most common reason why stat fails is that a given cache file doesn't
-            // exist. We ignore that here. It's easy to reason that it's safe to say the
-            // cache isn't up to date if we see any sort of exception here.
-            //
-            // (1) Exception while stating the package file : This should never happen,
-            // and if it does, we do a full package parse (which is likely to throw the
-            // same exception).
-            // (2) Exception while stating the cache file : If the file doesn't exist, the
-            // cache is obviously out of date. If the file *does* exist, we can't read it.
-            // We will attempt to delete and recreate it after parsing the package.
-            if (ee.errno != OsConstants.ENOENT) {
-                Slog.w("Error while stating package cache : ", ee);
-            }
-
-            return false;
-        }
-    }
-
-    /**
-     * Returns the cached parse result for {@code packageFile} for parse flags {@code flags},
-     * or {@code null} if no cached result exists.
-     */
-    public ParsedPackage getCachedResult(File packageFile, int flags) {
-        if (mCacheDir == null) {
-            return null;
-        }
-
-        final String cacheKey = getCacheKey(packageFile, flags);
-        final File cacheFile = new File(mCacheDir, cacheKey);
-
-        try {
-            // If the cache is not up to date, return null.
-            if (!isCacheUpToDate(packageFile, cacheFile)) {
-                return null;
-            }
-
-            final byte[] bytes = IoUtils.readFileAsByteArray(cacheFile.getAbsolutePath());
-            return fromCacheEntry(bytes);
-        } catch (Throwable e) {
-            Slog.w(TAG, "Error reading package cache: ", e);
-
-            // If something went wrong while reading the cache entry, delete the cache file
-            // so that we regenerate it the next time.
-            cacheFile.delete();
-            return null;
-        }
-    }
-
-    /**
-     * Caches the parse result for {@code packageFile} with flags {@code flags}.
-     */
-    public void cacheResult(File packageFile, int flags, ParsedPackage parsed) {
-        if (mCacheDir == null) {
-            return;
-        }
-
-        try {
-            final String cacheKey = getCacheKey(packageFile, flags);
-            final File cacheFile = new File(mCacheDir, cacheKey);
-
-            if (cacheFile.exists()) {
-                if (!cacheFile.delete()) {
-                    Slog.e(TAG, "Unable to delete cache file: " + cacheFile);
-                }
-            }
-
-            final byte[] cacheEntry = toCacheEntry(parsed);
-
-            if (cacheEntry == null) {
-                return;
-            }
-
-            try (FileOutputStream fos = new FileOutputStream(cacheFile)) {
-                fos.write(cacheEntry);
-            } catch (IOException ioe) {
-                Slog.w(TAG, "Error writing cache entry.", ioe);
-                cacheFile.delete();
-            }
-        } catch (Throwable e) {
-            Slog.w(TAG, "Error saving package cache.", e);
-        }
-    }
-
-    /**
      * Parse all APKs contained in the given directory, treating them as a
      * single package. This also performs sanity checking, such as requiring
      * identical package name and version codes, a single base APK, and unique
@@ -1282,7 +1075,7 @@
      * <p>
      * Note that this <em>does not</em> perform signature verification; that
      * must be done separately in
-     * {@link ApkParseUtils#collectCertificates(AndroidPackage, boolean)}.
+     * {@link #collectCertificates(Package, boolean)} .
      */
     private Package parseClusterPackage(File packageDir, int flags) throws PackageParserException {
         final PackageLite lite = parseClusterPackageLite(packageDir, 0);
@@ -1344,13 +1137,8 @@
      * <p>
      * Note that this <em>does not</em> perform signature verification; that
      * must be done separately in
-     * {@link ApkParseUtils#collectCertificates(AndroidPackage, boolean)}.
-     *
-     * @deprecated external callers should move to
-     *             {@link #parseParsedPackage(File, int, boolean)}. Eventually this method will
-     *             be marked private.
+     * {@link #collectCertificates(Package, boolean)}.
      */
-    @Deprecated
     @UnsupportedAppUsage
     public Package parseMonolithicPackage(File apkFile, int flags) throws PackageParserException {
         final PackageLite lite = parseMonolithicPackageLite(apkFile, flags);
@@ -1547,11 +1335,8 @@
      * Collect certificates from all the APKs described in the given package,
      * populating {@link Package#mSigningDetails}. Also asserts that all APK
      * contents are signed correctly and consistently.
-     *
-     * @deprecated use {@link ApkParseUtils#collectCertificates(AndroidPackage, boolean)}
      */
     @UnsupportedAppUsage
-    @Deprecated
     public static void collectCertificates(Package pkg, boolean skipVerify)
             throws PackageParserException {
         collectCertificatesInternal(pkg, skipVerify);
@@ -1701,7 +1486,7 @@
         }
     }
 
-    private static String validateName(String name, boolean requireSeparator,
+    public static String validateName(String name, boolean requireSeparator,
             boolean requireFilename) {
         final int N = name.length();
         boolean hasSep = false;
@@ -1797,6 +1582,12 @@
         boolean useEmbeddedDex = false;
         String configForSplit = null;
         String usesSplitName = null;
+        String targetPackage = null;
+        boolean overlayIsStatic = false;
+        int overlayPriority = 0;
+
+        String requiredSystemPropertyName = null;
+        String requiredSystemPropertyValue = null;
 
         for (int i = 0; i < attrs.getAttributeCount(); i++) {
             final String attr = attrs.getAttributeName(i);
@@ -1861,6 +1652,21 @@
                         useEmbeddedDex = attrs.getAttributeBooleanValue(i, false);
                     }
                 }
+            } else if (PackageParser.TAG_OVERLAY.equals(parser.getName())) {
+                for (int i = 0; i < attrs.getAttributeCount(); ++i) {
+                    final String attr = attrs.getAttributeName(i);
+                    if ("requiredSystemPropertyName".equals(attr)) {
+                        requiredSystemPropertyName = attrs.getAttributeValue(i);
+                    } else if ("requiredSystemPropertyValue".equals(attr)) {
+                        requiredSystemPropertyValue = attrs.getAttributeValue(i);
+                    } else if ("targetPackage".equals(attr)) {
+                        targetPackage = attrs.getAttributeValue(i);;
+                    } else if ("isStatic".equals(attr)) {
+                        overlayIsStatic = attrs.getAttributeBooleanValue(i, false);
+                    } else if ("priority".equals(attr)) {
+                        overlayPriority = attrs.getAttributeIntValue(i, 0);
+                    }
+                }
             } else if (TAG_USES_SPLIT.equals(parser.getName())) {
                 if (usesSplitName != null) {
                     Slog.w(TAG, "Only one <uses-split> permitted. Ignoring others.");
@@ -1887,11 +1693,22 @@
             }
         }
 
+        // Check to see if overlay should be excluded based on system property condition
+        if (!checkRequiredSystemProperty(requiredSystemPropertyName,
+                requiredSystemPropertyValue)) {
+            Slog.i(TAG, "Skipping target and overlay pair " + targetPackage + " and "
+                    + codePath + ": overlay ignored due to required system property: "
+                    + requiredSystemPropertyName + " with value: " + requiredSystemPropertyValue);
+            targetPackage = null;
+            overlayIsStatic = false;
+            overlayPriority = 0;
+        }
+
         return new ApkLite(codePath, packageSplit.first, packageSplit.second, isFeatureSplit,
                 configForSplit, usesSplitName, isSplitRequired, versionCode, versionCodeMajor,
                 revisionCode, installLocation, verifiers, signingDetails, coreApp, debuggable,
                 multiArch, use32bitAbi, useEmbeddedDex, extractNativeLibs, isolatedSplits,
-                minSdkVersion, targetSdkVersion);
+                targetPackage, overlayIsStatic, overlayPriority, minSdkVersion, targetSdkVersion);
     }
 
     /**
@@ -2175,7 +1992,7 @@
                 }
 
                 // check to see if overlay should be excluded based on system property condition
-                if (!checkOverlayRequiredSystemProperty(propName, propValue)) {
+                if (!checkRequiredSystemProperty(propName, propValue)) {
                     Slog.i(TAG, "Skipping target and overlay pair " + pkg.mOverlayTarget + " and "
                         + pkg.baseCodePath+ ": overlay ignored due to required system property: "
                         + propName + " with value: " + propValue);
@@ -2603,8 +2420,11 @@
         return pkg;
     }
 
-    private boolean checkOverlayRequiredSystemProperty(String propName, String propValue) {
-
+    /**
+     * Returns {@code true} if both the property name and value are empty or if the given system
+     * property is set to the specified value. In all other cases, returns {@code false}
+     */
+    public static boolean checkRequiredSystemProperty(String propName, String propValue) {
         if (TextUtils.isEmpty(propName) || TextUtils.isEmpty(propValue)) {
             if (!TextUtils.isEmpty(propName) || !TextUtils.isEmpty(propValue)) {
                 // malformed condition - incomplete
@@ -3723,6 +3543,11 @@
             ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE;
         }
 
+        if (sa.getBoolean(
+                R.styleable.AndroidManifestApplication_allowNativeHeapPointerTagging, true)) {
+            ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING;
+        }
+
         ai.maxAspectRatio = sa.getFloat(R.styleable.AndroidManifestApplication_maxAspectRatio, 0);
         ai.minAspectRatio = sa.getFloat(R.styleable.AndroidManifestApplication_minAspectRatio, 0);
 
@@ -5979,12 +5804,14 @@
         @IntDef({SigningDetails.SignatureSchemeVersion.UNKNOWN,
                 SigningDetails.SignatureSchemeVersion.JAR,
                 SigningDetails.SignatureSchemeVersion.SIGNING_BLOCK_V2,
-                SigningDetails.SignatureSchemeVersion.SIGNING_BLOCK_V3})
+                SigningDetails.SignatureSchemeVersion.SIGNING_BLOCK_V3,
+                SigningDetails.SignatureSchemeVersion.SIGNING_BLOCK_V4})
         public @interface SignatureSchemeVersion {
             int UNKNOWN = 0;
             int JAR = 1;
             int SIGNING_BLOCK_V2 = 2;
             int SIGNING_BLOCK_V3 = 3;
+            int SIGNING_BLOCK_V4 = 4;
         }
 
         @Nullable
@@ -6472,9 +6299,8 @@
      * Representation of a full package parsed from APK files on disk. A package
      * consists of a single base APK, and zero or more split APKs.
      *
-     * @deprecated use an {@link AndroidPackage}
+     * Deprecated internally. Use AndroidPackage instead.
      */
-    @Deprecated
     public final static class Package implements Parcelable {
 
         @UnsupportedAppUsage
@@ -7388,10 +7214,6 @@
         };
     }
 
-    /**
-     * @deprecated use a {@link ComponentParseUtils.ParsedComponent}
-     */
-    @Deprecated
     public static abstract class Component<II extends IntentInfo> {
         @UnsupportedAppUsage
         public final ArrayList<II> intents;
@@ -7572,10 +7394,6 @@
         }
     }
 
-    /**
-     * @deprecated use {@link ComponentParseUtils.ParsedPermission}
-     */
-    @Deprecated
     public final static class Permission extends Component<IntentInfo> implements Parcelable {
         @UnsupportedAppUsage
         public final PermissionInfo info;
@@ -7650,10 +7468,6 @@
         };
     }
 
-    /**
-     * @deprecated use {@link ComponentParseUtils.ParsedPermissionGroup}
-     */
-    @Deprecated
     public final static class PermissionGroup extends Component<IntentInfo> implements Parcelable {
         @UnsupportedAppUsage
         public final PermissionGroupInfo info;
@@ -7753,12 +7567,7 @@
         return false;
     }
 
-    /**
-     * @deprecated use {@link PackageInfoUtils#generateApplicationInfo(
-     *      AndroidPackage, int, PackageUserState, int)}
-     */
     @UnsupportedAppUsage
-    @Deprecated
     public static ApplicationInfo generateApplicationInfo(Package p, int flags,
             PackageUserState state) {
         return generateApplicationInfo(p, flags, state, UserHandle.getCallingUserId());
@@ -7815,12 +7624,7 @@
         ai.icon = (sUseRoundIcon && ai.roundIconRes != 0) ? ai.roundIconRes : ai.iconRes;
     }
 
-    /**
-     * @deprecated use {@link PackageInfoUtils#generateApplicationInfo(
-     *      AndroidPackage, int, PackageUserState, int)}
-     */
     @UnsupportedAppUsage
-    @Deprecated
     public static ApplicationInfo generateApplicationInfo(Package p, int flags,
             PackageUserState state, int userId) {
         if (p == null) return null;
@@ -7860,11 +7664,6 @@
         return ai;
     }
 
-    /**
-     * @deprecated use {@link PackageInfoUtils#generateApplicationInfo(
-     *      AndroidPackage, int, PackageUserState, int)}
-     */
-    @Deprecated
     public static ApplicationInfo generateApplicationInfo(ApplicationInfo ai, int flags,
             PackageUserState state, int userId) {
         if (ai == null) return null;
@@ -7884,12 +7683,7 @@
         return ai;
     }
 
-    /**
-     * @deprecated use {@link PackageInfoUtils#generatePermissionInfo(
-     *      ComponentParseUtils.ParsedPermission, int)}
-     */
     @UnsupportedAppUsage
-    @Deprecated
     public static final PermissionInfo generatePermissionInfo(
             Permission p, int flags) {
         if (p == null) return null;
@@ -7901,12 +7695,7 @@
         return pi;
     }
 
-    /**
-     * @deprecated use {@link PackageInfoUtils#generatePermissionGroupInfo(
-     *      ComponentParseUtils.ParsedPermissionGroup, int)}
-     */
     @UnsupportedAppUsage
-    @Deprecated
     public static final PermissionGroupInfo generatePermissionGroupInfo(
             PermissionGroup pg, int flags) {
         if (pg == null) return null;
@@ -7918,10 +7707,6 @@
         return pgi;
     }
 
-    /**
-     * @deprecated use {@link ComponentParseUtils.ParsedActivity}
-     */
-    @Deprecated
     public final static class Activity extends Component<ActivityIntentInfo> implements Parcelable {
         @UnsupportedAppUsage
         public final ActivityInfo info;
@@ -8037,12 +7822,7 @@
         };
     }
 
-    /**
-     * @deprecated use {@link PackageInfoUtils#generateActivityInfo(
-     *      AndroidPackage, ComponentParseUtils.ParsedActivity, int, PackageUserState, int)}
-     */
     @UnsupportedAppUsage
-    @Deprecated
     public static final ActivityInfo generateActivityInfo(Activity a, int flags,
             PackageUserState state, int userId) {
         if (a == null) return null;
@@ -8060,11 +7840,6 @@
         return ai;
     }
 
-    /**
-     * @deprecated use {@link PackageInfoUtils#generateActivityInfo(
-     *      AndroidPackage, ComponentParseUtils.ParsedActivity, int, PackageUserState, int)}
-     */
-    @Deprecated
     public static final ActivityInfo generateActivityInfo(ActivityInfo ai, int flags,
             PackageUserState state, int userId) {
         if (ai == null) return null;
@@ -8078,10 +7853,6 @@
         return ai;
     }
 
-    /**
-     * @deprecated use {@link ComponentParseUtils.ParsedService}
-     */
-    @Deprecated
     public final static class Service extends Component<ServiceIntentInfo> implements Parcelable {
         @UnsupportedAppUsage
         public final ServiceInfo info;
@@ -8143,12 +7914,7 @@
         };
     }
 
-    /**
-     * @deprecated use {@link PackageInfoUtils#generateServiceInfo(
-     * AndroidPackage, ComponentParseUtils.ParsedService, int, PackageUserState, int)}
-     */
     @UnsupportedAppUsage
-    @Deprecated
     public static final ServiceInfo generateServiceInfo(Service s, int flags,
             PackageUserState state, int userId) {
         if (s == null) return null;
@@ -8166,10 +7932,6 @@
         return si;
     }
 
-    /**
-     * @deprecated use {@link ComponentParseUtils.ParsedProvider}
-     */
-    @Deprecated
     public final static class Provider extends Component<ProviderIntentInfo> implements Parcelable {
         @UnsupportedAppUsage
         public final ProviderInfo info;
@@ -8250,12 +8012,7 @@
         };
     }
 
-    /**
-     * @deprecated use {@link PackageInfoUtils#generateProviderInfo(
-     *      AndroidPackage, ComponentParseUtils.ParsedProvider, int, PackageUserState, int)}
-     */
     @UnsupportedAppUsage
-    @Deprecated
     public static final ProviderInfo generateProviderInfo(Provider p, int flags,
             PackageUserState state, int userId) {
         if (p == null) return null;
@@ -8278,10 +8035,6 @@
         return pi;
     }
 
-    /**
-     * @deprecated use {@link ComponentParseUtils.ParsedInstrumentation}
-     */
-    @Deprecated
     public final static class Instrumentation extends Component<IntentInfo> implements
             Parcelable {
         @UnsupportedAppUsage
@@ -8342,12 +8095,7 @@
         };
     }
 
-    /**
-     * @deprecated use {@link PackageInfoUtils#generateInstrumentationInfo(
-     *      ComponentParseUtils.ParsedInstrumentation, int)}
-     */
     @UnsupportedAppUsage
-    @Deprecated
     public static final InstrumentationInfo generateInstrumentationInfo(
             Instrumentation i, int flags) {
         if (i == null) return null;
@@ -8359,10 +8107,6 @@
         return ii;
     }
 
-    /**
-     * @deprecated use {@link ComponentParseUtils.ParsedIntentInfo}
-     */
-    @Deprecated
     public static abstract class IntentInfo extends IntentFilter {
         @UnsupportedAppUsage
         public boolean hasDefault;
@@ -8406,10 +8150,6 @@
         }
     }
 
-    /**
-     * @deprecated use {@link ComponentParseUtils.ParsedActivityIntentInfo}
-     */
-    @Deprecated
     public final static class ActivityIntentInfo extends IntentInfo {
         @UnsupportedAppUsage
         public Activity activity;
@@ -8433,10 +8173,6 @@
         }
     }
 
-    /**
-     * @deprecated use {@link ComponentParseUtils.ParsedServiceIntentInfo}
-     */
-    @Deprecated
     public final static class ServiceIntentInfo extends IntentInfo {
         @UnsupportedAppUsage
         public Service service;
@@ -8460,10 +8196,6 @@
         }
     }
 
-    /**
-     * @deprecated use {@link ComponentParseUtils.ParsedProviderIntentInfo}
-     */
-    @Deprecated
     public static final class ProviderIntentInfo extends IntentInfo {
         @UnsupportedAppUsage
         public Provider provider;
diff --git a/core/java/android/content/pm/PackagePartitions.java b/core/java/android/content/pm/PackagePartitions.java
new file mode 100644
index 0000000..9b8396e
--- /dev/null
+++ b/core/java/android/content/pm/PackagePartitions.java
@@ -0,0 +1,213 @@
+/*
+ * 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.content.pm;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Environment;
+import android.os.FileUtils;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.function.Function;
+
+/**
+ * Exposes {@link #SYSTEM_PARTITIONS} which represents the partitions in which application packages
+ * can be installed. The partitions are ordered from most generic (lowest priority) to most specific
+ * (greatest priority).
+ *
+ * @hide
+ **/
+public class PackagePartitions {
+    public static final int PARTITION_SYSTEM = 0;
+    public static final int PARTITION_VENDOR = 1;
+    public static final int PARTITION_ODM = 2;
+    public static final int PARTITION_OEM = 3;
+    public static final int PARTITION_PRODUCT = 4;
+    public static final int PARTITION_SYSTEM_EXT = 5;
+
+    @IntDef(flag = true, prefix = { "PARTITION_" }, value = {
+        PARTITION_SYSTEM,
+        PARTITION_VENDOR,
+        PARTITION_ODM,
+        PARTITION_OEM,
+        PARTITION_PRODUCT,
+        PARTITION_SYSTEM_EXT
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface PartitionType {}
+
+    /**
+     * The list of all system partitions that may contain packages in ascending order of
+     * specificity (the more generic, the earlier in the list a partition appears).
+     */
+    private static final ArrayList<SystemPartition> SYSTEM_PARTITIONS =
+            new ArrayList<>(Arrays.asList(
+                    new SystemPartition(Environment.getRootDirectory(), PARTITION_SYSTEM,
+                            true /* containsPrivApp */, false /* containsOverlay */),
+                    new SystemPartition(Environment.getVendorDirectory(), PARTITION_VENDOR,
+                            true /* containsPrivApp */, true /* containsOverlay */),
+                    new SystemPartition(Environment.getOdmDirectory(), PARTITION_ODM,
+                            true /* containsPrivApp */, true /* containsOverlay */),
+                    new SystemPartition(Environment.getOemDirectory(), PARTITION_OEM,
+                            false /* containsPrivApp */, true /* containsOverlay */),
+                    new SystemPartition(Environment.getProductDirectory(), PARTITION_PRODUCT,
+                            true /* containsPrivApp */, true /* containsOverlay */),
+                    new SystemPartition(Environment.getSystemExtDirectory(), PARTITION_SYSTEM_EXT,
+                            true /* containsPrivApp */, true /* containsOverlay */)));
+
+    /**
+     * Returns a list in which the elements are products of the specified function applied to the
+     * list of {@link #SYSTEM_PARTITIONS} in increasing specificity order.
+     */
+    public static <T> ArrayList<T> getOrderedPartitions(
+            @NonNull Function<SystemPartition, T> producer) {
+        final ArrayList<T> out = new ArrayList<>();
+        for (int i = 0, n = SYSTEM_PARTITIONS.size(); i < n; i++) {
+            final T v = producer.apply(SYSTEM_PARTITIONS.get(i));
+            if (v != null)  {
+                out.add(v);
+            }
+        }
+        return out;
+    }
+
+    /** Represents a partition that contains application packages. */
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
+    public static class SystemPartition {
+        @NonNull
+        public final File folder;
+
+        @PartitionType
+        public final int type;
+
+        @Nullable
+        private final DeferredCanonicalFile mAppFolder;
+
+        @Nullable
+        private final DeferredCanonicalFile mPrivAppFolder;
+
+        @Nullable
+        private final DeferredCanonicalFile mOverlayFolder;
+
+        private SystemPartition(@NonNull File folder, @PartitionType int type,
+                boolean containsPrivApp, boolean containsOverlay) {
+            this.folder = folder;
+            this.type = type;
+            this.mAppFolder = new DeferredCanonicalFile(folder, "app");
+            this.mPrivAppFolder = containsPrivApp ?
+                    new DeferredCanonicalFile(folder, "priv-app") : null;
+            this.mOverlayFolder = containsOverlay ?
+                    new DeferredCanonicalFile(folder, "overlay") : null;
+        }
+
+        public SystemPartition(@NonNull SystemPartition original) {
+            this.folder = original.folder;
+            this.type = original.type;
+            this.mAppFolder = original.mAppFolder;
+            this.mPrivAppFolder = original.mPrivAppFolder;
+            this.mOverlayFolder = original.mOverlayFolder;
+        }
+
+        /**
+         * Creates a partition containing the same folders as the original partition but with a
+         * different root folder.
+         */
+        public SystemPartition(@NonNull File rootFolder, @NonNull SystemPartition partition) {
+            this(rootFolder, partition.type, partition.mPrivAppFolder != null,
+                    partition.mOverlayFolder != null);
+        }
+
+        /** Returns the canonical app folder of the partition. */
+        @Nullable
+        public File getAppFolder() {
+            return mAppFolder == null ? null : mAppFolder.getFile();
+        }
+
+        /** Returns the canonical priv-app folder of the partition, if one exists. */
+        @Nullable
+        public File getPrivAppFolder() {
+            return mPrivAppFolder == null ? null : mPrivAppFolder.getFile();
+        }
+
+        /** Returns the canonical overlay folder of the partition, if one exists. */
+        @Nullable
+        public File getOverlayFolder() {
+            return mOverlayFolder == null ? null : mOverlayFolder.getFile();
+        }
+
+        /** Returns whether the partition contains the specified file in its priv-app folder. */
+        public boolean containsPrivApp(@NonNull File scanFile) {
+            return FileUtils.contains(mPrivAppFolder.getFile(), scanFile);
+        }
+
+        /** Returns whether the partition contains the specified file in its app folder. */
+        public boolean containsApp(@NonNull File scanFile) {
+            return FileUtils.contains(mAppFolder.getFile(), scanFile);
+        }
+
+        /** Returns whether the partition contains the specified file in its overlay folder. */
+        public boolean containsOverlay(@NonNull File scanFile) {
+            return FileUtils.contains(mOverlayFolder.getFile(), scanFile);
+        }
+
+        /** Returns whether the partition contains the specified file. */
+        public boolean containsPath(@NonNull String path) {
+            return path.startsWith(folder.getPath() + "/");
+        }
+
+        /** Returns whether the partition contains the specified file in its priv-app folder. */
+        public boolean containsPrivPath(@NonNull String path) {
+            return mPrivAppFolder != null
+                    && path.startsWith(mPrivAppFolder.getFile().getPath() + "/");
+        }
+    }
+
+    /**
+     * A class that defers the canonicalization of its underlying file. This must be done so
+     * processes do not attempt to canonicalize files in directories for which the process does not
+     * have the correct selinux policies.
+     */
+    private static class DeferredCanonicalFile {
+        private boolean mIsCanonical;
+        private File mFile;
+        private DeferredCanonicalFile(File dir, String fileName) {
+            mFile = new File(dir, fileName);
+            mIsCanonical = false;
+        }
+
+        private File getFile() {
+            if (mIsCanonical) {
+                return mFile;
+            }
+            mIsCanonical = true;
+            try {
+                mFile = mFile.getCanonicalFile();
+            } catch (IOException ignore) {
+                // failed to look up canonical path, continue with original one
+            }
+            return mFile;
+        }
+    }
+}
diff --git a/core/java/android/content/pm/PackageUserState.java b/core/java/android/content/pm/PackageUserState.java
index da7623a..30cf4e7 100644
--- a/core/java/android/content/pm/PackageUserState.java
+++ b/core/java/android/content/pm/PackageUserState.java
@@ -28,7 +28,7 @@
 import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY;
 
 import android.compat.annotation.UnsupportedAppUsage;
-import android.content.pm.parsing.ComponentParseUtils;
+import android.content.pm.parsing.component.ParsedMainComponent;
 import android.os.BaseBundle;
 import android.os.Debug;
 import android.os.PersistableBundle;
@@ -163,7 +163,7 @@
     }
 
     public boolean isMatch(boolean isSystem, boolean isPackageEnabled,
-            ComponentParseUtils.ParsedComponent component, int flags) {
+            ParsedMainComponent component, int flags) {
         return isMatch(isSystem, isPackageEnabled, component.isEnabled(),
                 component.isDirectBootAware(), component.getName(), flags);
     }
@@ -217,7 +217,7 @@
     }
 
     public boolean isEnabled(boolean isPackageEnabled,
-            ComponentParseUtils.ParsedComponent parsedComponent, int flags) {
+            ParsedMainComponent parsedComponent, int flags) {
         return isEnabled(isPackageEnabled, parsedComponent.isEnabled(), parsedComponent.getName(),
                 flags);
     }
diff --git a/core/java/android/content/pm/SharedLibraryInfo.java b/core/java/android/content/pm/SharedLibraryInfo.java
index 2863b26..fe4b36f 100644
--- a/core/java/android/content/pm/SharedLibraryInfo.java
+++ b/core/java/android/content/pm/SharedLibraryInfo.java
@@ -20,7 +20,6 @@
 import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.content.pm.parsing.AndroidPackage;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -39,28 +38,6 @@
 public final class SharedLibraryInfo implements Parcelable {
 
     /** @hide */
-    public static SharedLibraryInfo createForStatic(AndroidPackage pkg) {
-        return new SharedLibraryInfo(null, pkg.getPackageName(),
-                pkg.makeListAllCodePaths(),
-                pkg.getStaticSharedLibName(),
-                pkg.getStaticSharedLibVersion(),
-                TYPE_STATIC,
-                new VersionedPackage(pkg.getManifestPackageName(),
-                        pkg.getLongVersionCode()),
-                null, null);
-    }
-
-    /** @hide */
-    public static SharedLibraryInfo createForDynamic(AndroidPackage pkg, String name) {
-        return new SharedLibraryInfo(null, pkg.getPackageName(),
-                pkg.makeListAllCodePaths(), name,
-                (long) VERSION_UNDEFINED,
-                TYPE_DYNAMIC, new VersionedPackage(pkg.getPackageName(),
-                pkg.getLongVersionCode()),
-                null, null);
-    }
-
-    /** @hide */
     @IntDef(flag = true, prefix = { "TYPE_" }, value = {
             TYPE_BUILTIN,
             TYPE_DYNAMIC,
diff --git a/core/java/android/content/pm/ShortcutServiceInternal.java b/core/java/android/content/pm/ShortcutServiceInternal.java
index a11a1dd..3a93421 100644
--- a/core/java/android/content/pm/ShortcutServiceInternal.java
+++ b/core/java/android/content/pm/ShortcutServiceInternal.java
@@ -22,6 +22,7 @@
 import android.appwidget.AppWidgetProviderInfo;
 import android.content.ComponentName;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.IntentSender;
 import android.content.LocusId;
 import android.content.pm.LauncherApps.ShortcutQuery;
@@ -85,4 +86,18 @@
 
     public abstract boolean isForegroundDefaultLauncher(@NonNull String callingPackage,
             int callingUid);
+
+    public abstract void cacheShortcuts(int launcherUserId,
+            @NonNull String callingPackage, @NonNull String packageName,
+            @NonNull List<String> shortcutIds, int userId);
+    public abstract void uncacheShortcuts(int launcherUserId,
+            @NonNull String callingPackage, @NonNull String packageName,
+            @NonNull List<String> shortcutIds, int userId);
+
+    /**
+     * Retrieves all of the direct share targets that match the given IntentFilter for the specified
+     * user.
+     */
+    public abstract List<ShortcutManager.ShareShortcutInfo> getShareTargets(
+            @NonNull String callingPackage, @NonNull IntentFilter intentFilter, int userId);
 }
diff --git a/core/java/android/content/pm/dex/DexMetadataHelper.java b/core/java/android/content/pm/dex/DexMetadataHelper.java
index 4cd201f..cdb1d22 100644
--- a/core/java/android/content/pm/dex/DexMetadataHelper.java
+++ b/core/java/android/content/pm/dex/DexMetadataHelper.java
@@ -22,7 +22,6 @@
 import android.content.pm.PackageParser;
 import android.content.pm.PackageParser.PackageLite;
 import android.content.pm.PackageParser.PackageParserException;
-import android.content.pm.parsing.AndroidPackage;
 import android.util.ArrayMap;
 import android.util.jar.StrictJarFile;
 
@@ -87,16 +86,6 @@
      *
      * NOTE: involves I/O checks.
      */
-    public static Map<String, String> getPackageDexMetadata(AndroidPackage pkg) {
-        return buildPackageApkToDexMetadataMap(pkg.makeListAllCodePaths());
-    }
-
-    /**
-     * Return the dex metadata files for the given package as a map
-     * [code path -> dex metadata path].
-     *
-     * NOTE: involves I/O checks.
-     */
     private static Map<String, String> getPackageDexMetadata(PackageLite pkg) {
         return buildPackageApkToDexMetadataMap(pkg.getAllCodePaths());
     }
@@ -114,7 +103,7 @@
      * This should only be used for code paths extracted from a package structure after the naming
      * was enforced in the installer.
      */
-    private static Map<String, String> buildPackageApkToDexMetadataMap(
+    public static Map<String, String> buildPackageApkToDexMetadataMap(
             List<String> codePaths) {
         ArrayMap<String, String> result = new ArrayMap<>();
         for (int i = codePaths.size() - 1; i >= 0; i--) {
@@ -157,25 +146,12 @@
     }
 
     /**
-     * Validate the dex metadata files installed for the given package.
-     *
-     * @throws PackageParserException in case of errors.
-     */
-    public static void validatePackageDexMetadata(AndroidPackage pkg)
-            throws PackageParserException {
-        Collection<String> apkToDexMetadataList = getPackageDexMetadata(pkg).values();
-        for (String dexMetadata : apkToDexMetadataList) {
-            validateDexMetadataFile(dexMetadata);
-        }
-    }
-
-    /**
      * Validate that the given file is a dex metadata archive.
      * This is just a sanity validation that the file is a zip archive.
      *
      * @throws PackageParserException if the file is not a .dm file.
      */
-    private static void validateDexMetadataFile(String dmaPath) throws PackageParserException {
+    public static void validateDexMetadataFile(String dmaPath) throws PackageParserException {
         StrictJarFile jarFile = null;
         try {
             jarFile = new StrictJarFile(dmaPath, false, false);
diff --git a/core/java/android/content/pm/parsing/AndroidPackage.java b/core/java/android/content/pm/parsing/AndroidPackage.java
deleted file mode 100644
index fbe5a48..0000000
--- a/core/java/android/content/pm/parsing/AndroidPackage.java
+++ /dev/null
@@ -1,490 +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.content.pm.parsing;
-
-import android.annotation.Nullable;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.ConfigurationInfo;
-import android.content.pm.FeatureGroupInfo;
-import android.content.pm.FeatureInfo;
-import android.content.pm.PackageParser;
-import android.content.pm.PackageUserState;
-import android.content.pm.SharedLibraryInfo;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivity;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivityIntentInfo;
-import android.content.pm.parsing.ComponentParseUtils.ParsedFeature;
-import android.content.pm.parsing.ComponentParseUtils.ParsedInstrumentation;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermission;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermissionGroup;
-import android.content.pm.parsing.ComponentParseUtils.ParsedProvider;
-import android.content.pm.parsing.ComponentParseUtils.ParsedService;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-import android.util.SparseArray;
-
-import java.security.PublicKey;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-
-/**
- * The last state of a package during parsing/install before it is available in
- * {@link com.android.server.pm.PackageManagerService#mPackages}.
- *
- * It is the responsibility of the caller to understand what data is available at what step of the
- * parsing or install process.
- *
- * TODO(b/135203078): Nullability annotations
- * TODO(b/135203078): Remove get/setAppInfo differences
- *
- * @hide
- */
-public interface AndroidPackage extends Parcelable {
-
-    /**
-     * This will eventually be removed. Avoid calling this at all costs.
-     */
-    @Deprecated
-    AndroidPackageWrite mutate();
-
-    boolean canHaveOatDir();
-
-    boolean cantSaveState();
-
-    List<String> getAdoptPermissions();
-
-    List<String> getAllCodePaths();
-
-    List<String> getAllCodePathsExcludingResourceOnly();
-
-    String getAppComponentFactory();
-
-    /**
-     * TODO(b/135203078): Use non-AppInfo method
-     * @deprecated use {@link #getClassLoaderName()}
-     */
-    @Deprecated
-    String getAppInfoClassLoaderName();
-
-    /**
-     * TODO(b/135203078): Use non-AppInfo method
-     * @deprecated use {@link #getCodePath()}
-     */
-    @Deprecated
-    String getAppInfoCodePath();
-
-    /**
-     * TODO(b/135203078): Use non-AppInfo method
-     * @deprecated use {@link #getName()}
-     */
-    @Deprecated
-    String getAppInfoName();
-
-    /**
-     * TODO(b/135203078): Use non-AppInfo method
-     * @deprecated use {@link #getPackageName()}
-     */
-    @Deprecated
-    String getAppInfoPackageName();
-
-    /**
-     * TODO(b/135203078): Use non-AppInfo method
-     * @deprecated use {@link #getProcessName()}
-     */
-    @Deprecated
-    String getAppInfoProcessName();
-
-    /**
-     * TODO(b/135203078): Use non-AppInfo method
-     * @deprecated use {@link #getCodePath()}
-     */
-    @Deprecated
-    String getAppInfoResourcePath();
-
-    Bundle getAppMetaData();
-
-    /**
-     * TODO(b/135203078): Use non-AppInfo method
-     * @deprecated use {@link #getVolumeUuid()}
-     */
-    @Deprecated
-    String getApplicationInfoVolumeUuid();
-
-    String getBackupAgentName();
-
-    int getBanner();
-
-    String getBaseCodePath();
-
-    int getBaseRevisionCode();
-
-    int getCategory();
-
-    String getClassLoaderName();
-
-    String getClassName();
-
-    String getCodePath();
-
-    int getCompatibleWidthLimitDp();
-
-    int getCompileSdkVersion();
-
-    String getCompileSdkVersionCodeName();
-
-    @Nullable
-    List<ConfigurationInfo> getConfigPreferences();
-
-    String getCpuAbiOverride();
-
-    String getCredentialProtectedDataDir();
-
-    String getDataDir();
-
-    int getDescriptionRes();
-
-    String getDeviceProtectedDataDir();
-
-    List<FeatureGroupInfo> getFeatureGroups();
-
-    int getFlags();
-
-    int getFullBackupContent();
-
-    int getHiddenApiEnforcementPolicy();
-
-    int getIcon();
-
-    int getIconRes();
-
-    List<String> getImplicitPermissions();
-
-    int getInstallLocation();
-
-    Map<String, ArraySet<PublicKey>> getKeySetMapping();
-
-    int getLabelRes();
-
-    int getLargestWidthLimitDp();
-
-    long[] getLastPackageUsageTimeInMills();
-
-    long getLatestForegroundPackageUseTimeInMills();
-
-    long getLatestPackageUseTimeInMills();
-
-    List<String> getLibraryNames();
-
-    int getLogo();
-
-    long getLongVersionCode();
-
-    String getManageSpaceActivityName();
-
-    String getManifestPackageName();
-
-    float getMaxAspectRatio();
-
-    Bundle getMetaData(); // TODO(b/135203078): Make all the Bundles immutable
-
-    float getMinAspectRatio();
-
-    int getMinSdkVersion();
-
-    String getName();
-
-    String getNativeLibraryDir();
-
-    String getNativeLibraryRootDir();
-
-    int getNetworkSecurityConfigRes();
-
-    CharSequence getNonLocalizedLabel();
-
-    @Nullable
-    List<String> getOriginalPackages();
-
-    String getOverlayCategory();
-
-    int getOverlayPriority();
-
-    String getOverlayTarget();
-
-    String getOverlayTargetName();
-
-    /**
-     * Map of overlayable name to actor name.
-     */
-    Map<String, String> getOverlayables();
-
-    // TODO(b/135203078): Does this and getAppInfoPackageName have to be separate methods?
-    //  The refactor makes them the same value with no known consequences, so should be redundant.
-    String getPackageName();
-
-    @Nullable
-    List<ParsedActivity> getActivities();
-
-    @Nullable
-    List<ParsedInstrumentation> getInstrumentations();
-
-    @Nullable
-    List<ParsedFeature> getFeatures();
-
-    @Nullable
-    List<ParsedPermissionGroup> getPermissionGroups();
-
-    @Nullable
-    List<ParsedPermission> getPermissions();
-
-    @Nullable
-    List<ParsedProvider> getProviders();
-
-    @Nullable
-    List<ParsedActivity> getReceivers();
-
-    @Nullable
-    List<ParsedService> getServices();
-
-    String getPermission();
-
-    @Nullable
-    List<ParsedActivityIntentInfo> getPreferredActivityFilters();
-
-    int getPreferredOrder();
-
-    String getPrimaryCpuAbi();
-
-    int getPrivateFlags();
-
-    String getProcessName();
-
-    @Nullable
-    List<String> getProtectedBroadcasts();
-
-    String getPublicSourceDir();
-
-    List<Intent> getQueriesIntents();
-
-    List<String> getQueriesPackages();
-
-    String getRealPackage();
-
-    // TODO(b/135203078): Rename to getRequiredFeatures? Somewhat ambiguous whether "Req" is
-    //  required or requested.
-    @Nullable
-    List<FeatureInfo> getReqFeatures();
-
-    List<String> getRequestedPermissions();
-
-    String getRequiredAccountType();
-
-    int getRequiresSmallestWidthDp();
-
-    byte[] getRestrictUpdateHash();
-
-    String getRestrictedAccountType();
-
-    int getRoundIconRes();
-
-    String getScanPublicSourceDir();
-
-    String getScanSourceDir();
-
-    String getSeInfo();
-
-    String getSeInfoUser();
-
-    String getSecondaryCpuAbi();
-
-    String getSecondaryNativeLibraryDir();
-
-    String getSharedUserId();
-
-    int getSharedUserLabel();
-
-    PackageParser.SigningDetails getSigningDetails();
-
-    String[] getSplitClassLoaderNames();
-
-    @Nullable
-    String[] getSplitCodePaths();
-
-    @Nullable
-    SparseArray<int[]> getSplitDependencies();
-
-    int[] getSplitFlags();
-
-    String[] getSplitNames();
-
-    String[] getSplitPublicSourceDirs();
-
-    int[] getSplitRevisionCodes();
-
-    String getStaticSharedLibName();
-
-    long getStaticSharedLibVersion();
-
-    // TODO(b/135203078): Return String directly
-    UUID getStorageUuid();
-
-    int getTargetSandboxVersion();
-
-    int getTargetSdkVersion();
-
-    String getTaskAffinity();
-
-    int getTheme();
-
-    int getUiOptions();
-
-    int getUid();
-
-    Set<String> getUpgradeKeySets();
-
-    @Nullable
-    List<String> getUsesLibraries();
-
-    @Nullable
-    String[] getUsesLibraryFiles();
-
-    List<SharedLibraryInfo> getUsesLibraryInfos();
-
-    @Nullable
-    List<String> getUsesOptionalLibraries();
-
-    @Nullable
-    List<String> getUsesStaticLibraries();
-
-    @Nullable
-    String[][] getUsesStaticLibrariesCertDigests();
-
-    @Nullable
-    long[] getUsesStaticLibrariesVersions();
-
-    @Nullable
-    ArrayMap<String, ComponentParseUtils.ParsedProcess> getProcesses();
-
-    int getVersionCode();
-
-    int getVersionCodeMajor();
-
-    String getVersionName();
-
-    String getVolumeUuid();
-
-    String getZygotePreloadName();
-
-    boolean hasComponentClassName(String className);
-
-    // App Info
-
-    boolean hasRequestedLegacyExternalStorage();
-
-    boolean isBaseHardwareAccelerated();
-
-    boolean isCoreApp();
-
-    boolean isDefaultToDeviceProtectedStorage();
-
-    boolean isDirectBootAware();
-
-    boolean isEmbeddedDexUsed();
-
-    boolean isEnabled();
-
-    boolean isCrossProfile();
-
-    boolean isEncryptionAware();
-
-    boolean isExternal();
-
-    boolean isForceQueryable();
-
-    boolean isForwardLocked();
-
-    boolean isHiddenUntilInstalled();
-
-    boolean isInstantApp();
-
-    boolean isInternal();
-
-    boolean isLibrary();
-
-    // TODO(b/135203078): Should probably be in a utility class
-    boolean isMatch(int flags);
-
-    boolean isNativeLibraryRootRequiresIsa();
-
-    boolean isOem();
-
-    boolean isOverlayIsStatic();
-
-    boolean isPrivileged();
-
-    boolean isProduct();
-
-    boolean isProfileableByShell();
-
-    boolean isRequiredForAllUsers();
-
-    boolean isStaticSharedLibrary();
-
-    boolean isStub();
-
-    boolean isSystem(); // TODO(b/135203078): Collapse with isSystemApp, should be exactly the same.
-
-    boolean isSystemApp();
-
-    boolean isSystemExt();
-
-    boolean isUpdatedSystemApp();
-
-    boolean isUse32BitAbi();
-
-    boolean isVendor();
-
-    boolean isVisibleToInstantApps();
-
-    List<String> makeListAllCodePaths(); // TODO(b/135203078): Collapse with getAllCodePaths
-
-    boolean requestsIsolatedSplitLoading();
-
-    /**
-     * Generates an {@link ApplicationInfo} object with only the data available in this object.
-     *
-     * This does not contain any system or user state data, and should be avoided. Prefer
-     * {@link PackageInfoUtils#generateApplicationInfo(AndroidPackage, int, PackageUserState, int)}.
-     */
-    ApplicationInfo toAppInfoWithoutState();
-
-    Creator<PackageImpl> CREATOR = new Creator<PackageImpl>() {
-        @Override
-        public PackageImpl createFromParcel(Parcel source) {
-            return new PackageImpl(source);
-        }
-
-        @Override
-        public PackageImpl[] newArray(int size) {
-            return new PackageImpl[size];
-        }
-    };
-}
diff --git a/core/java/android/content/pm/parsing/AndroidPackageWrite.java b/core/java/android/content/pm/parsing/AndroidPackageWrite.java
deleted file mode 100644
index b7595d2..0000000
--- a/core/java/android/content/pm/parsing/AndroidPackageWrite.java
+++ /dev/null
@@ -1,59 +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.content.pm.parsing;
-
-import android.annotation.Nullable;
-import android.content.pm.PackageParser;
-import android.content.pm.SharedLibraryInfo;
-
-import java.util.List;
-
-/**
- * Contains remaining mutable fields after package parsing has completed.
- *
- * Most are state that can probably be tracked outside of the AndroidPackage object. New methods
- * should never be added to this interface.
- *
- * TODO(b/135203078): Remove entirely
- *
- * @deprecated the eventual goal is that the object returned from parsing represents exactly what
- * was parsed from the APK, and so further mutation should be disallowed,
- * with any state being stored in another class
- *
- * @hide
- */
-@Deprecated
-public interface AndroidPackageWrite extends AndroidPackage {
-
-    AndroidPackageWrite setUsesLibraryFiles(@Nullable String[] usesLibraryFiles);
-
-    // TODO(b/135203078): Remove or use a non-system wide representation of the shared libraries;
-    //  this doesn't represent what was parsed from the APK
-    AndroidPackageWrite setUsesLibraryInfos(@Nullable List<SharedLibraryInfo> usesLibraryInfos);
-
-    AndroidPackageWrite setHiddenUntilInstalled(boolean hidden);
-
-    AndroidPackageWrite setUpdatedSystemApp(boolean updatedSystemApp);
-
-    AndroidPackageWrite setLastPackageUsageTimeInMills(int reason, long time);
-
-    AndroidPackageWrite setPrimaryCpuAbi(String primaryCpuAbi);
-
-    AndroidPackageWrite setSeInfo(String seInfo);
-
-    AndroidPackageWrite setSigningDetails(PackageParser.SigningDetails signingDetails);
-}
diff --git a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java
index 5be9c91..4c6da03 100644
--- a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java
+++ b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java
@@ -50,7 +50,7 @@
 /** @hide */
 public class ApkLiteParseUtils {
 
-    private static final String TAG = ApkParseUtils.TAG;
+    private static final String TAG = ParsingPackageUtils.TAG;
 
     // TODO(b/135203078): Consolidate constants
     private static final int DEFAULT_MIN_SDK_VERSION = 1;
@@ -235,7 +235,7 @@
                 final boolean skipVerify = (flags & PackageParser.PARSE_IS_SYSTEM_DIR) != 0;
                 Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "collectCertificates");
                 try {
-                    signingDetails = ApkParseUtils.collectCertificates(apkFile.getAbsolutePath(),
+                    signingDetails = ParsingPackageUtils.collectCertificates(apkFile.getAbsolutePath(),
                             skipVerify, false, PackageParser.SigningDetails.UNKNOWN,
                             DEFAULT_TARGET_SDK_VERSION);
                 } finally {
@@ -289,6 +289,12 @@
         boolean useEmbeddedDex = false;
         String configForSplit = null;
         String usesSplitName = null;
+        String targetPackage = null;
+        boolean overlayIsStatic = false;
+        int overlayPriority = 0;
+
+        String requiredSystemPropertyName = null;
+        String requiredSystemPropertyValue = null;
 
         for (int i = 0; i < attrs.getAttributeCount(); i++) {
             final String attr = attrs.getAttributeName(i);
@@ -365,6 +371,21 @@
                             break;
                     }
                 }
+            } else if (PackageParser.TAG_OVERLAY.equals(parser.getName())) {
+                for (int i = 0; i < attrs.getAttributeCount(); ++i) {
+                    final String attr = attrs.getAttributeName(i);
+                    if ("requiredSystemPropertyName".equals(attr)) {
+                        requiredSystemPropertyName = attrs.getAttributeValue(i);
+                    } else if ("requiredSystemPropertyValue".equals(attr)) {
+                        requiredSystemPropertyValue = attrs.getAttributeValue(i);
+                    } else if ("targetPackage".equals(attr)) {
+                        targetPackage = attrs.getAttributeValue(i);;
+                    } else if ("isStatic".equals(attr)) {
+                        overlayIsStatic = attrs.getAttributeBooleanValue(i, false);
+                    } else if ("priority".equals(attr)) {
+                        overlayPriority = attrs.getAttributeIntValue(i, 0);
+                    }
+                }
             } else if (PackageParser.TAG_USES_SPLIT.equals(parser.getName())) {
                 if (usesSplitName != null) {
                     Slog.w(TAG, "Only one <uses-split> permitted. Ignoring others.");
@@ -391,11 +412,23 @@
             }
         }
 
+        // Check to see if overlay should be excluded based on system property condition
+        if (!PackageParser.checkRequiredSystemProperty(requiredSystemPropertyName,
+                requiredSystemPropertyValue)) {
+            Slog.i(TAG, "Skipping target and overlay pair " + targetPackage + " and "
+                    + codePath + ": overlay ignored due to required system property: "
+                    + requiredSystemPropertyName + " with value: " + requiredSystemPropertyValue);
+            targetPackage = null;
+            overlayIsStatic = false;
+            overlayPriority = 0;
+        }
+
         return new PackageParser.ApkLite(codePath, packageSplit.first, packageSplit.second,
                 isFeatureSplit, configForSplit, usesSplitName, isSplitRequired, versionCode,
                 versionCodeMajor, revisionCode, installLocation, verifiers, signingDetails,
                 coreApp, debuggable, multiArch, use32bitAbi, useEmbeddedDex, extractNativeLibs,
-                isolatedSplits, minSdkVersion, targetSdkVersion);
+                isolatedSplits, targetPackage, overlayIsStatic, overlayPriority, minSdkVersion,
+                targetSdkVersion);
     }
 
     public static VerifierInfo parseVerifier(AttributeSet attrs) {
diff --git a/core/java/android/content/pm/parsing/ApkParseUtils.java b/core/java/android/content/pm/parsing/ApkParseUtils.java
deleted file mode 100644
index 5c8c9a4..0000000
--- a/core/java/android/content/pm/parsing/ApkParseUtils.java
+++ /dev/null
@@ -1,3322 +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.content.pm.parsing;
-
-import static android.content.pm.ActivityInfo.FLAG_SUPPORTS_PICTURE_IN_PICTURE;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
-import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
-import static android.content.pm.PackageManager.FEATURE_WATCH;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_NOT_APK;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION;
-import static android.os.Build.VERSION_CODES.O;
-import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
-import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.app.ActivityTaskManager;
-import android.app.ActivityThread;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.ConfigurationInfo;
-import android.content.pm.FeatureGroupInfo;
-import android.content.pm.FeatureInfo;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageItemInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageParser;
-import android.content.pm.PackageParser.PackageParserException;
-import android.content.pm.PackageParser.SigningDetails;
-import android.content.pm.Signature;
-import android.content.pm.permission.SplitPermissionInfoParcelable;
-import android.content.pm.split.DefaultSplitAssetLoader;
-import android.content.pm.split.SplitAssetDependencyLoader;
-import android.content.pm.split.SplitAssetLoader;
-import android.content.res.ApkAssets;
-import android.content.res.AssetManager;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.content.res.XmlResourceParser;
-import android.net.Uri;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.FileUtils;
-import android.os.RemoteException;
-import android.os.SystemProperties;
-import android.os.Trace;
-import android.os.ext.SdkExtensions;
-import android.text.TextUtils;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-import android.util.AttributeSet;
-import android.util.DisplayMetrics;
-import android.util.Pair;
-import android.util.Slog;
-import android.util.SparseArray;
-import android.util.TypedValue;
-import android.util.apk.ApkSignatureVerifier;
-
-import com.android.internal.R;
-import com.android.internal.os.ClassLoaderFactory;
-import com.android.internal.util.ArrayUtils;
-import com.android.internal.util.XmlUtils;
-
-import libcore.io.IoUtils;
-import libcore.util.EmptyArray;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.File;
-import java.io.IOException;
-import java.security.PublicKey;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/** @hide */
-public class ApkParseUtils {
-
-    // TODO(b/135203078): Consolidate log tags
-    static final String TAG = "PackageParsing";
-
-    /**
-     * Parse the package at the given location. Automatically detects if the
-     * package is a monolithic style (single APK file) or cluster style
-     * (directory of APKs).
-     * <p>
-     * This performs sanity checking on cluster style packages, such as
-     * requiring identical package name and version codes, a single base APK,
-     * and unique split names.
-     * <p>
-     * Note that this <em>does not</em> perform signature verification; that
-     * must be done separately in {@link #collectCertificates(ParsedPackage, boolean)}.
-     *
-     * If {@code useCaches} is true, the package parser might return a cached
-     * result from a previous parse of the same {@code packageFile} with the same
-     * {@code flags}. Note that this method does not check whether {@code packageFile}
-     * has changed since the last parse, it's up to callers to do so.
-     *
-     * @see PackageParser#parsePackageLite(File, int)
-     */
-    public static ParsingPackage parsePackage(
-            ParseInput parseInput,
-            String[] separateProcesses,
-            PackageParser.Callback callback,
-            DisplayMetrics displayMetrics,
-            boolean onlyCoreApps,
-            File packageFile,
-            int flags
-    ) throws PackageParserException {
-        if (packageFile.isDirectory()) {
-            return parseClusterPackage(parseInput, separateProcesses, callback, displayMetrics,
-                    onlyCoreApps, packageFile, flags);
-        } else {
-            return parseMonolithicPackage(parseInput, separateProcesses, callback, displayMetrics,
-                    onlyCoreApps, packageFile, flags);
-        }
-    }
-
-    /**
-     * Parse all APKs contained in the given directory, treating them as a
-     * single package. This also performs sanity checking, such as requiring
-     * identical package name and version codes, a single base APK, and unique
-     * split names.
-     * <p>
-     * Note that this <em>does not</em> perform signature verification; that
-     * must be done separately in {@link #collectCertificates(ParsedPackage, boolean)}.
-     */
-    private static ParsingPackage parseClusterPackage(
-            ParseInput parseInput,
-            String[] separateProcesses,
-            PackageParser.Callback callback,
-            DisplayMetrics displayMetrics,
-            boolean onlyCoreApps,
-            File packageDir,
-            int flags
-    ) throws PackageParserException {
-        final PackageParser.PackageLite lite = ApkLiteParseUtils.parseClusterPackageLite(packageDir,
-                0);
-        if (onlyCoreApps && !lite.coreApp) {
-            throw new PackageParserException(INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    "Not a coreApp: " + packageDir);
-        }
-
-        // Build the split dependency tree.
-        SparseArray<int[]> splitDependencies = null;
-        final SplitAssetLoader assetLoader;
-        if (lite.isolatedSplits && !ArrayUtils.isEmpty(lite.splitNames)) {
-            try {
-                splitDependencies = SplitAssetDependencyLoader.createDependenciesFromPackage(lite);
-                assetLoader = new SplitAssetDependencyLoader(lite, splitDependencies, flags);
-            } catch (SplitAssetDependencyLoader.IllegalDependencyException e) {
-                throw new PackageParserException(INSTALL_PARSE_FAILED_BAD_MANIFEST, e.getMessage());
-            }
-        } else {
-            assetLoader = new DefaultSplitAssetLoader(lite, flags);
-        }
-
-        try {
-            final AssetManager assets = assetLoader.getBaseAssetManager();
-            final File baseApk = new File(lite.baseCodePath);
-            ParsingPackage parsingPackage = parseBaseApk(parseInput, separateProcesses, callback,
-                    displayMetrics, baseApk, assets, flags);
-            if (parsingPackage == null) {
-                throw new PackageParserException(INSTALL_PARSE_FAILED_NOT_APK,
-                        "Failed to parse base APK: " + baseApk);
-            }
-
-            if (!ArrayUtils.isEmpty(lite.splitNames)) {
-                parsingPackage.asSplit(
-                        lite.splitNames,
-                        lite.splitCodePaths,
-                        lite.splitRevisionCodes,
-                        splitDependencies
-                );
-                final int num = lite.splitNames.length;
-
-                for (int i = 0; i < num; i++) {
-                    final AssetManager splitAssets = assetLoader.getSplitAssetManager(i);
-                    parseSplitApk(parseInput, displayMetrics, separateProcesses, parsingPackage, i,
-                            splitAssets, flags);
-                }
-            }
-
-            return parsingPackage.setCodePath(lite.codePath)
-                    .setUse32BitAbi(lite.use32bitAbi);
-        } finally {
-            IoUtils.closeQuietly(assetLoader);
-        }
-    }
-
-    /**
-     * Parse the given APK file, treating it as as a single monolithic package.
-     * <p>
-     * Note that this <em>does not</em> perform signature verification; that
-     * must be done separately in {@link #collectCertificates(AndroidPackage, boolean)}.
-     */
-    public static ParsingPackage parseMonolithicPackage(
-            ParseInput parseInput,
-            String[] separateProcesses,
-            PackageParser.Callback callback,
-            DisplayMetrics displayMetrics,
-            boolean onlyCoreApps,
-            File apkFile,
-            int flags
-    ) throws PackageParserException {
-        final PackageParser.PackageLite lite = ApkLiteParseUtils.parseMonolithicPackageLite(apkFile,
-                flags);
-        if (onlyCoreApps) {
-            if (!lite.coreApp) {
-                throw new PackageParserException(INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                        "Not a coreApp: " + apkFile);
-            }
-        }
-
-        final SplitAssetLoader assetLoader = new DefaultSplitAssetLoader(lite, flags);
-        try {
-            return parseBaseApk(parseInput, separateProcesses, callback,
-                    displayMetrics, apkFile, assetLoader.getBaseAssetManager(), flags)
-                    .setCodePath(apkFile.getCanonicalPath())
-                    .setUse32BitAbi(lite.use32bitAbi);
-        } catch (IOException e) {
-            throw new PackageParserException(INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION,
-                    "Failed to get path: " + apkFile, e);
-        } finally {
-            IoUtils.closeQuietly(assetLoader);
-        }
-    }
-
-    private static ParsingPackage parseBaseApk(
-            ParseInput parseInput,
-            String[] separateProcesses,
-            PackageParser.Callback callback,
-            DisplayMetrics displayMetrics,
-            File apkFile,
-            AssetManager assets,
-            int flags
-    ) throws PackageParserException {
-        final String apkPath = apkFile.getAbsolutePath();
-
-        String volumeUuid = null;
-        if (apkPath.startsWith(PackageParser.MNT_EXPAND)) {
-            final int end = apkPath.indexOf('/', PackageParser.MNT_EXPAND.length());
-            volumeUuid = apkPath.substring(PackageParser.MNT_EXPAND.length(), end);
-        }
-
-        if (PackageParser.DEBUG_JAR) Slog.d(TAG, "Scanning base APK: " + apkPath);
-
-        XmlResourceParser parser = null;
-        try {
-            final int cookie = assets.findCookieForPath(apkPath);
-            if (cookie == 0) {
-                throw new PackageParserException(INSTALL_PARSE_FAILED_BAD_MANIFEST,
-                        "Failed adding asset path: " + apkPath);
-            }
-            parser = assets.openXmlResourceParser(cookie, PackageParser.ANDROID_MANIFEST_FILENAME);
-            final Resources res = new Resources(assets, displayMetrics, null);
-
-            ParseResult result = parseBaseApk(parseInput, separateProcesses, callback, apkPath, res,
-                    parser, flags);
-            if (!result.isSuccess()) {
-                throw new PackageParserException(result.getParseError(),
-                        apkPath + " (at " + parser.getPositionDescription() + "): "
-                                + result.getErrorMessage());
-            }
-
-            ParsingPackage pkg = result.getResultAndNull();
-            ApkAssets apkAssets = assets.getApkAssets()[0];
-            if (apkAssets.definesOverlayable()) {
-                SparseArray<String> packageNames = assets.getAssignedPackageIdentifiers();
-                int size = packageNames.size();
-                for (int index = 0; index < size; index++) {
-                    String packageName = packageNames.get(index);
-                    Map<String, String> overlayableToActor = assets.getOverlayableMap(packageName);
-                    if (overlayableToActor != null && !overlayableToActor.isEmpty()) {
-                        for (String overlayable : overlayableToActor.keySet()) {
-                            pkg.addOverlayable(overlayable, overlayableToActor.get(overlayable));
-                        }
-                    }
-                }
-            }
-
-            return pkg.setVolumeUuid(volumeUuid)
-                    .setApplicationVolumeUuid(volumeUuid)
-                    .setSigningDetails(SigningDetails.UNKNOWN);
-        } catch (PackageParserException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new PackageParserException(INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION,
-                    "Failed to read manifest from " + apkPath, e);
-        } finally {
-            IoUtils.closeQuietly(parser);
-        }
-    }
-
-    private static void parseSplitApk(
-            ParseInput parseInput,
-            DisplayMetrics displayMetrics,
-            String[] separateProcesses,
-            ParsingPackage parsingPackage,
-            int splitIndex,
-            AssetManager assets,
-            int flags
-    ) throws PackageParserException {
-        final String apkPath = parsingPackage.getSplitCodePaths()[splitIndex];
-
-        if (PackageParser.DEBUG_JAR) Slog.d(TAG, "Scanning split APK: " + apkPath);
-
-        final Resources res;
-        XmlResourceParser parser = null;
-        try {
-            // This must always succeed, as the path has been added to the AssetManager before.
-            final int cookie = assets.findCookieForPath(apkPath);
-            if (cookie == 0) {
-                throw new PackageParserException(INSTALL_PARSE_FAILED_BAD_MANIFEST,
-                        "Failed adding asset path: " + apkPath);
-            }
-
-            parser = assets.openXmlResourceParser(cookie, PackageParser.ANDROID_MANIFEST_FILENAME);
-            res = new Resources(assets, displayMetrics, null);
-
-            final String[] outError = new String[1];
-            ParseResult parseResult = parseSplitApk(parseInput, separateProcesses, parsingPackage,
-                    res, parser, flags, splitIndex, outError);
-            if (!parseResult.isSuccess()) {
-                throw new PackageParserException(parseResult.getParseError(),
-                        apkPath + " (at " + parser.getPositionDescription() + "): "
-                                + parseResult.getErrorMessage());
-            }
-        } catch (PackageParserException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new PackageParserException(INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION,
-                    "Failed to read manifest from " + apkPath, e);
-        } finally {
-            IoUtils.closeQuietly(parser);
-        }
-    }
-
-    /**
-     * Parse the manifest of a <em>base APK</em>. When adding new features you
-     * need to consider whether they should be supported by split APKs and child
-     * packages.
-     *
-     * @param apkPath  The package apk file path
-     * @param res      The resources from which to resolve values
-     * @param parser   The manifest parser
-     * @param flags    Flags how to parse
-     * @return Parsed package or null on error.
-     */
-    private static ParseResult parseBaseApk(
-            ParseInput parseInput,
-            String[] separateProcesses,
-            PackageParser.Callback callback,
-            String apkPath,
-            Resources res,
-            XmlResourceParser parser,
-            int flags
-    ) throws XmlPullParserException, IOException {
-        final String splitName;
-        final String pkgName;
-
-        try {
-            Pair<String, String> packageSplit = PackageParser.parsePackageSplitNames(parser,
-                    parser);
-            pkgName = packageSplit.first;
-            splitName = packageSplit.second;
-
-            if (!TextUtils.isEmpty(splitName)) {
-                return parseInput.error(
-                        PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME,
-                        "Expected base APK, but found split " + splitName
-                );
-            }
-        } catch (PackageParserException e) {
-            return parseInput.error(PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME);
-        }
-
-        TypedArray manifestArray = null;
-
-        try {
-            manifestArray = res.obtainAttributes(parser, R.styleable.AndroidManifest);
-
-            boolean isCoreApp = parser.getAttributeBooleanValue(null, "coreApp", false);
-
-            ParsingPackage parsingPackage = PackageImpl.forParsing(
-                    pkgName,
-                    apkPath,
-                    manifestArray,
-                    isCoreApp
-            );
-
-            ParseResult result = parseBaseApkTags(parseInput, separateProcesses, callback,
-                    parsingPackage, manifestArray, res, parser, flags);
-            if (!result.isSuccess()) {
-                return result;
-            }
-
-            return parseInput.success(parsingPackage);
-        } finally {
-            if (manifestArray != null) {
-                manifestArray.recycle();
-            }
-        }
-    }
-
-    /**
-     * Parse the manifest of a <em>split APK</em>.
-     * <p>
-     * Note that split APKs have many more restrictions on what they're capable
-     * of doing, so many valid features of a base APK have been carefully
-     * omitted here.
-     *
-     * @param parsingPackage builder to fill
-     * @return false on failure
-     */
-    private static ParseResult parseSplitApk(
-            ParseInput parseInput,
-            String[] separateProcesses,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser,
-            int flags,
-            int splitIndex,
-            String[] outError
-    ) throws XmlPullParserException, IOException, PackageParserException {
-        AttributeSet attrs = parser;
-
-        // We parsed manifest tag earlier; just skip past it
-        PackageParser.parsePackageSplitNames(parser, attrs);
-
-        int type;
-
-        boolean foundApp = false;
-
-        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(PackageParser.TAG_APPLICATION)) {
-                if (foundApp) {
-                    if (PackageParser.RIGID_PARSER) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                "<manifest> has more than one <application>"
-                        );
-                    } else {
-                        Slog.w(TAG, "<manifest> has more than one <application>");
-                        XmlUtils.skipCurrentTag(parser);
-                        continue;
-                    }
-                }
-
-                foundApp = true;
-                ParseResult parseResult = parseSplitApplication(parseInput, separateProcesses,
-                        parsingPackage, res,
-                        parser, flags,
-                        splitIndex, outError);
-                if (!parseResult.isSuccess()) {
-                    return parseResult;
-                }
-
-            } else if (PackageParser.RIGID_PARSER) {
-                return parseInput.error(
-                        PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                        "Bad element under <manifest>: " + parser.getName()
-                );
-
-            } else {
-                Slog.w(TAG, "Unknown element under <manifest>: " + parser.getName()
-                        + " at " + parsingPackage.getBaseCodePath() + " "
-                        + parser.getPositionDescription());
-                XmlUtils.skipCurrentTag(parser);
-                continue;
-            }
-        }
-
-        if (!foundApp) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_EMPTY,
-                    "<manifest> does not contain an <application>"
-            );
-        }
-
-        return parseInput.success(parsingPackage);
-    }
-
-    /**
-     * Parse the {@code application} XML tree at the current parse location in a
-     * <em>split APK</em> manifest.
-     * <p>
-     * Note that split APKs have many more restrictions on what they're capable
-     * of doing, so many valid features of a base APK have been carefully
-     * omitted here.
-     */
-    private static ParseResult parseSplitApplication(
-            ParseInput parseInput,
-            String[] separateProcesses,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser,
-            int flags,
-            int splitIndex,
-            String[] outError
-    ) throws XmlPullParserException, IOException {
-        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestApplication);
-
-        parsingPackage.setSplitHasCode(splitIndex, sa.getBoolean(
-                R.styleable.AndroidManifestApplication_hasCode, true));
-
-        final String classLoaderName = sa.getString(
-                R.styleable.AndroidManifestApplication_classLoader);
-        if (classLoaderName == null || ClassLoaderFactory.isValidClassLoaderName(classLoaderName)) {
-            parsingPackage.setSplitClassLoaderName(splitIndex, classLoaderName);
-        } else {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    "Invalid class loader name: " + classLoaderName
-            );
-        }
-
-        final int innerDepth = parser.getDepth();
-        int type;
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
-            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                continue;
-            }
-
-            ComponentParseUtils.ParsedComponent parsedComponent = null;
-
-            String tagName = parser.getName();
-            switch (tagName) {
-                case "activity":
-                    ComponentParseUtils.ParsedActivity activity =
-                            ComponentParseUtils.parseActivity(separateProcesses,
-                                    parsingPackage,
-                                    res, parser, flags,
-                                    outError,
-                                    false,
-                                    parsingPackage.isBaseHardwareAccelerated());
-                    if (activity == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    parsingPackage.addActivity(activity);
-                    parsedComponent = activity;
-                    break;
-                case "receiver":
-                    activity = ComponentParseUtils.parseActivity(
-                            separateProcesses, parsingPackage,
-                            res, parser, flags, outError,
-                            true, false);
-                    if (activity == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    parsingPackage.addReceiver(activity);
-                    parsedComponent = activity;
-                    break;
-                case "service":
-                    ComponentParseUtils.ParsedService s = ComponentParseUtils.parseService(
-                            separateProcesses,
-                            parsingPackage,
-                            res, parser, flags, outError
-                    );
-                    if (s == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    parsingPackage.addService(s);
-                    parsedComponent = s;
-                    break;
-                case "provider":
-                    ComponentParseUtils.ParsedProvider p = ComponentParseUtils.parseProvider(
-                            separateProcesses,
-                            parsingPackage,
-                            res, parser, flags, outError);
-                    if (p == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    parsingPackage.addProvider(p);
-                    parsedComponent = p;
-                    break;
-                case "activity-alias":
-                    activity = ComponentParseUtils.parseActivityAlias(
-                            parsingPackage,
-                            res,
-                            parser,
-                            outError
-                    );
-                    if (activity == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    parsingPackage.addActivity(activity);
-                    parsedComponent = activity;
-                    break;
-                case "meta-data":
-                    // note: application meta-data is stored off to the side, so it can
-                    // remain null in the primary copy (we like to avoid extra copies because
-                    // it can be large)
-                    Bundle appMetaData = parseMetaData(parsingPackage, res, parser,
-                            parsingPackage.getAppMetaData(),
-                            outError);
-                    if (appMetaData == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    parsingPackage.setAppMetaData(appMetaData);
-                    break;
-                case "uses-static-library":
-                    ParseResult parseResult = parseUsesStaticLibrary(parseInput, parsingPackage,
-                            res, parser);
-                    if (!parseResult.isSuccess()) {
-                        return parseResult;
-                    }
-
-                    break;
-                case "uses-library":
-                    sa = res.obtainAttributes(parser, R.styleable.AndroidManifestUsesLibrary);
-
-                    // Note: don't allow this value to be a reference to a resource
-                    // that may change.
-                    String lname = sa.getNonResourceString(
-                            R.styleable.AndroidManifestUsesLibrary_name);
-                    boolean req = sa.getBoolean(
-                            R.styleable.AndroidManifestUsesLibrary_required, true);
-
-                    sa.recycle();
-
-                    if (lname != null) {
-                        lname = lname.intern();
-                        if (req) {
-                            // Upgrade to treat as stronger constraint
-                            parsingPackage.addUsesLibrary(lname)
-                                    .removeUsesOptionalLibrary(lname);
-                        } else {
-                            // Ignore if someone already defined as required
-                            if (!ArrayUtils.contains(parsingPackage.getUsesLibraries(), lname)) {
-                                parsingPackage.addUsesOptionalLibrary(lname);
-                            }
-                        }
-                    }
-
-                    XmlUtils.skipCurrentTag(parser);
-                    break;
-                case "uses-package":
-                    // Dependencies for app installers; we don't currently try to
-                    // enforce this.
-                    XmlUtils.skipCurrentTag(parser);
-                    break;
-                default:
-                    if (!PackageParser.RIGID_PARSER) {
-                        Slog.w(TAG, "Unknown element under <application>: " + tagName
-                                + " at " + parsingPackage.getBaseCodePath() + " "
-                                + parser.getPositionDescription());
-                        XmlUtils.skipCurrentTag(parser);
-                        continue;
-                    } else {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                "Bad element under <application>: " + tagName
-                        );
-                    }
-            }
-
-            if (parsedComponent != null && parsedComponent.getSplitName() == null) {
-                // If the loaded component did not specify a split, inherit the split name
-                // based on the split it is defined in.
-                // This is used to later load the correct split when starting this
-                // component.
-                parsedComponent.setSplitName(parsingPackage.getSplitNames()[splitIndex]);
-            }
-        }
-
-        return parseInput.success(parsingPackage);
-    }
-
-    private static ParseResult parseBaseApkTags(
-            ParseInput parseInput,
-            String[] separateProcesses,
-            PackageParser.Callback callback,
-            ParsingPackage parsingPackage,
-            TypedArray manifestArray,
-            Resources res,
-            XmlResourceParser parser,
-            int flags
-    ) throws XmlPullParserException, IOException {
-        int type;
-        boolean foundApp = false;
-
-        TypedArray sa = manifestArray;
-
-        ParseResult sharedUserResult = parseSharedUser(parseInput, parsingPackage, sa);
-        if (!sharedUserResult.isSuccess()) {
-            return sharedUserResult;
-        }
-
-        parseManifestAttributes(sa, parsingPackage, flags);
-
-        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();
-
-            // All methods return a boolean, even if they can't fail. This can be enforced
-            // by making this final and not assigned, forcing the switch to assign success
-            // once in every branch.
-            final boolean success;
-            ParseResult parseResult = null;
-
-            // TODO(b/135203078): Either use all booleans or all ParseResults
-            // TODO(b/135203078): Convert to instance methods to share variables
-            switch (tagName) {
-                case PackageParser.TAG_APPLICATION:
-                    if (foundApp) {
-                        if (PackageParser.RIGID_PARSER) {
-                            return parseInput.error(
-                                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                    "<manifest> has more than one <application>"
-                            );
-                        } else {
-                            Slog.w(TAG, "<manifest> has more than one <application>");
-                            XmlUtils.skipCurrentTag(parser);
-                            success = true;
-                        }
-                    } else {
-                        foundApp = true;
-                        parseResult = parseBaseApplication(parseInput, separateProcesses,
-                                callback,
-                                parsingPackage, res, parser, flags);
-                        success = parseResult.isSuccess();
-                    }
-                    break;
-                case PackageParser.TAG_OVERLAY:
-                    parseResult = parseOverlay(parseInput, parsingPackage, res, parser);
-                    success = parseResult.isSuccess();
-                    break;
-                case PackageParser.TAG_KEY_SETS:
-                    parseResult = parseKeySets(parseInput, parsingPackage, res, parser);
-                    success = parseResult.isSuccess();
-                    break;
-                case PackageParser.TAG_FEATURE:
-                    parseResult = parseFeature(parseInput, parsingPackage, res, parser);
-                    success = parseResult.isSuccess();
-                    break;
-                case PackageParser.TAG_PERMISSION_GROUP:
-                    parseResult = parsePermissionGroup(parseInput, parsingPackage, res,
-                            parser);
-                    success = parseResult.isSuccess();
-                    break;
-                case PackageParser.TAG_PERMISSION:
-                    parseResult = parsePermission(parseInput, parsingPackage, res, parser);
-                    success = parseResult.isSuccess();
-                    break;
-                case PackageParser.TAG_PERMISSION_TREE:
-                    parseResult = parsePermissionTree(parseInput, parsingPackage, res, parser);
-                    success = parseResult.isSuccess();
-                    break;
-                case PackageParser.TAG_USES_PERMISSION:
-                case PackageParser.TAG_USES_PERMISSION_SDK_M:
-                case PackageParser.TAG_USES_PERMISSION_SDK_23:
-                    parseResult = parseUsesPermission(parseInput, parsingPackage, res, parser,
-                            callback);
-                    success = parseResult.isSuccess();
-                    break;
-                case PackageParser.TAG_USES_CONFIGURATION:
-                    success = parseUsesConfiguration(parsingPackage, res, parser);
-                    break;
-                case PackageParser.TAG_USES_FEATURE:
-                    success = parseUsesFeature(parsingPackage, res, parser);
-                    break;
-                case PackageParser.TAG_FEATURE_GROUP:
-                    success = parseFeatureGroup(parsingPackage, res, parser);
-                    break;
-                case PackageParser.TAG_USES_SDK:
-                    parseResult = parseUsesSdk(parseInput, parsingPackage, res, parser);
-                    success = parseResult.isSuccess();
-                    break;
-                case PackageParser.TAG_SUPPORT_SCREENS:
-                    success = parseSupportScreens(parsingPackage, res, parser);
-                    break;
-                case PackageParser.TAG_PROTECTED_BROADCAST:
-                    success = parseProtectedBroadcast(parsingPackage, res, parser);
-                    break;
-                case PackageParser.TAG_INSTRUMENTATION:
-                    parseResult = parseInstrumentation(parseInput, parsingPackage, res,
-                            parser);
-                    success = parseResult.isSuccess();
-                    break;
-                case PackageParser.TAG_ORIGINAL_PACKAGE:
-                    success = parseOriginalPackage(parsingPackage, res, parser);
-                    break;
-                case PackageParser.TAG_ADOPT_PERMISSIONS:
-                    success = parseAdoptPermissions(parsingPackage, res, parser);
-                    break;
-                case PackageParser.TAG_USES_GL_TEXTURE:
-                case PackageParser.TAG_COMPATIBLE_SCREENS:
-                case PackageParser.TAG_SUPPORTS_INPUT:
-                case PackageParser.TAG_EAT_COMMENT:
-                    // Just skip this tag
-                    XmlUtils.skipCurrentTag(parser);
-                    success = true;
-                    break;
-                case PackageParser.TAG_RESTRICT_UPDATE:
-                    success = parseRestrictUpdateHash(flags, parsingPackage, res, parser);
-                    break;
-                case PackageParser.TAG_QUERIES:
-                    parseResult = parseQueries(parseInput, parsingPackage, res, parser);
-                    success = parseResult.isSuccess();
-                    break;
-                default:
-                    parseResult = parseUnknownTag(parseInput, parsingPackage, parser);
-                    success = parseResult.isSuccess();
-                    break;
-            }
-
-            if (parseResult != null && !parseResult.isSuccess()) {
-                return parseResult;
-            }
-
-            if (!success) {
-                return parseResult;
-            }
-        }
-
-        if (!foundApp && ArrayUtils.size(parsingPackage.getInstrumentations()) == 0) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_EMPTY,
-                    "<manifest> does not contain an <application> or <instrumentation>"
-            );
-        }
-
-        if (!ComponentParseUtils.ParsedFeature.isCombinationValid(parsingPackage.getFeatures())) {
-            return parseInput.error(
-                    INSTALL_PARSE_FAILED_BAD_MANIFEST,
-                    "Combination <feature> tags are not valid"
-            );
-        }
-
-        convertNewPermissions(parsingPackage);
-
-        convertSplitPermissions(parsingPackage);
-
-        // At this point we can check if an application is not supporting densities and hence
-        // cannot be windowed / resized. Note that an SDK version of 0 is common for
-        // pre-Doughnut applications.
-        if (parsingPackage.usesCompatibilityMode()) {
-            adjustPackageToBeUnresizeableAndUnpipable(parsingPackage);
-        }
-
-        return parseInput.success(parsingPackage);
-    }
-
-    private static ParseResult parseUnknownTag(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-        if (PackageParser.RIGID_PARSER) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    "Bad element under <manifest>: " + parser.getName()
-            );
-        } else {
-            Slog.w(TAG, "Unknown element under <manifest>: " + parser.getName()
-                    + " at " + parsingPackage.getBaseCodePath() + " "
-                    + parser.getPositionDescription());
-            XmlUtils.skipCurrentTag(parser);
-            return parseInput.success(parsingPackage);
-        }
-    }
-
-    private static ParseResult parseSharedUser(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            TypedArray manifestArray
-    ) {
-        String str = manifestArray.getNonConfigurationString(
-                R.styleable.AndroidManifest_sharedUserId, 0);
-        if (TextUtils.isEmpty(str)) {
-            return parseInput.success(parsingPackage);
-        }
-
-        String nameError = validateName(str, true, true);
-        if (nameError != null && !"android".equals(parsingPackage.getPackageName())) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID,
-                    "<manifest> specifies bad sharedUserId name \"" + str + "\": "
-                            + nameError
-            );
-        }
-
-        int sharedUserLabel = manifestArray.getResourceId(
-                R.styleable.AndroidManifest_sharedUserLabel, 0);
-        parsingPackage.setSharedUserId(str.intern())
-                .setSharedUserLabel(sharedUserLabel);
-
-        return parseInput.success(parsingPackage);
-    }
-
-    private static void parseManifestAttributes(
-            TypedArray manifestArray,
-            ParsingPackage parsingPackage,
-            int flags
-    ) {
-        int installLocation = manifestArray.getInteger(R.styleable.AndroidManifest_installLocation,
-                PackageParser.PARSE_DEFAULT_INSTALL_LOCATION);
-
-        final int targetSandboxVersion = manifestArray.getInteger(
-                R.styleable.AndroidManifest_targetSandboxVersion,
-                PackageParser.PARSE_DEFAULT_TARGET_SANDBOX);
-
-        parsingPackage.setInstallLocation(installLocation)
-                .setTargetSandboxVersion(targetSandboxVersion);
-
-        /* Set the global "on SD card" flag */
-        parsingPackage.setExternalStorage((flags & PackageParser.PARSE_EXTERNAL_STORAGE) != 0);
-
-        parsingPackage.setIsolatedSplitLoading(manifestArray.getBoolean(
-                R.styleable.AndroidManifest_isolatedSplits, false));
-    }
-
-    private static ParseResult parseKeySets(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws XmlPullParserException, IOException {
-        // we've encountered the 'key-sets' tag
-        // all the keys and keysets that we want must be defined here
-        // so we're going to iterate over the parser and pull out the things we want
-        int outerDepth = parser.getDepth();
-        int currentKeySetDepth = -1;
-        int type;
-        String currentKeySet = null;
-        ArrayMap<String, PublicKey> publicKeys = new ArrayMap<>();
-        ArraySet<String> upgradeKeySets = new ArraySet<>();
-        ArrayMap<String, ArraySet<String>> definedKeySets =
-                new ArrayMap<>();
-        ArraySet<String> improperKeySets = new ArraySet<>();
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
-            if (type == XmlPullParser.END_TAG) {
-                if (parser.getDepth() == currentKeySetDepth) {
-                    currentKeySet = null;
-                    currentKeySetDepth = -1;
-                }
-                continue;
-            }
-            String tagName = parser.getName();
-            if (tagName.equals("key-set")) {
-                if (currentKeySet != null) {
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            "Improperly nested 'key-set' tag at " + parser.getPositionDescription()
-                    );
-                }
-                final TypedArray sa = res.obtainAttributes(parser,
-                        R.styleable.AndroidManifestKeySet);
-                final String keysetName = sa.getNonResourceString(
-                        R.styleable.AndroidManifestKeySet_name);
-                definedKeySets.put(keysetName, new ArraySet<>());
-                currentKeySet = keysetName;
-                currentKeySetDepth = parser.getDepth();
-                sa.recycle();
-            } else if (tagName.equals("public-key")) {
-                if (currentKeySet == null) {
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            "Improperly nested 'key-set' tag at " + parser.getPositionDescription()
-                    );
-                }
-                final TypedArray sa = res.obtainAttributes(parser,
-                        R.styleable.AndroidManifestPublicKey);
-                final String publicKeyName = sa.getNonResourceString(
-                        R.styleable.AndroidManifestPublicKey_name);
-                final String encodedKey = sa.getNonResourceString(
-                        R.styleable.AndroidManifestPublicKey_value);
-                if (encodedKey == null && publicKeys.get(publicKeyName) == null) {
-                    sa.recycle();
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            "'public-key' " + publicKeyName + " must define a public-key value"
-                                    + " on first use at " + parser.getPositionDescription()
-                    );
-                } else if (encodedKey != null) {
-                    PublicKey currentKey = PackageParser.parsePublicKey(encodedKey);
-                    if (currentKey == null) {
-                        Slog.w(TAG, "No recognized valid key in 'public-key' tag at "
-                                + parser.getPositionDescription() + " key-set " + currentKeySet
-                                + " will not be added to the package's defined key-sets.");
-                        sa.recycle();
-                        improperKeySets.add(currentKeySet);
-                        XmlUtils.skipCurrentTag(parser);
-                        continue;
-                    }
-                    if (publicKeys.get(publicKeyName) == null
-                            || publicKeys.get(publicKeyName).equals(currentKey)) {
-
-                        /* public-key first definition, or matches old definition */
-                        publicKeys.put(publicKeyName, currentKey);
-                    } else {
-                        sa.recycle();
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                "Value of 'public-key' " + publicKeyName
-                                        + " conflicts with previously defined value at "
-                                        + parser.getPositionDescription()
-                        );
-                    }
-                }
-                definedKeySets.get(currentKeySet).add(publicKeyName);
-                sa.recycle();
-                XmlUtils.skipCurrentTag(parser);
-            } else if (tagName.equals("upgrade-key-set")) {
-                final TypedArray sa = res.obtainAttributes(parser,
-                        R.styleable.AndroidManifestUpgradeKeySet);
-                String name = sa.getNonResourceString(
-                        R.styleable.AndroidManifestUpgradeKeySet_name);
-                upgradeKeySets.add(name);
-                sa.recycle();
-                XmlUtils.skipCurrentTag(parser);
-            } else if (PackageParser.RIGID_PARSER) {
-                return parseInput.error(
-                        PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                        "Bad element under <key-sets>: " + parser.getName()
-                                + " at " + parsingPackage.getBaseCodePath() + " "
-                                + parser.getPositionDescription()
-                );
-            } else {
-                Slog.w(TAG, "Unknown element under <key-sets>: " + parser.getName()
-                        + " at " + parsingPackage.getBaseCodePath() + " "
-                        + parser.getPositionDescription());
-                XmlUtils.skipCurrentTag(parser);
-                continue;
-            }
-        }
-        String packageName = parsingPackage.getPackageName();
-        Set<String> publicKeyNames = publicKeys.keySet();
-        if (publicKeyNames.removeAll(definedKeySets.keySet())) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    "Package" + packageName + " AndroidManifest.xml "
-                            + "'key-set' and 'public-key' names must be distinct."
-            );
-        }
-
-        for (ArrayMap.Entry<String, ArraySet<String>> e : definedKeySets.entrySet()) {
-            final String keySetName = e.getKey();
-            if (e.getValue().size() == 0) {
-                Slog.w(TAG, "Package" + packageName + " AndroidManifest.xml "
-                        + "'key-set' " + keySetName + " has no valid associated 'public-key'."
-                        + " Not including in package's defined key-sets.");
-                continue;
-            } else if (improperKeySets.contains(keySetName)) {
-                Slog.w(TAG, "Package" + packageName + " AndroidManifest.xml "
-                        + "'key-set' " + keySetName + " contained improper 'public-key'"
-                        + " tags. Not including in package's defined key-sets.");
-                continue;
-            }
-
-            for (String s : e.getValue()) {
-                parsingPackage.addKeySet(keySetName, publicKeys.get(s));
-            }
-        }
-        if (parsingPackage.getKeySetMapping().keySet().containsAll(upgradeKeySets)) {
-            parsingPackage.setUpgradeKeySets(upgradeKeySets);
-        } else {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    "Package" + packageName + " AndroidManifest.xml "
-                            + "does not define all 'upgrade-key-set's ."
-            );
-        }
-
-        return parseInput.success(parsingPackage);
-    }
-
-    public static boolean parsePackageItemInfo(String packageName, PackageItemInfo outInfo,
-            String[] outError, String tag, TypedArray sa, boolean nameRequired,
-            int nameRes, int labelRes, int iconRes, int roundIconRes, int logoRes, int bannerRes) {
-        // This case can only happen in unit tests where we sometimes need to create fakes
-        // of various package parser data structures.
-        if (sa == null) {
-            outError[0] = tag + " does not contain any attributes";
-            return false;
-        }
-
-        String name = sa.getNonConfigurationString(nameRes, 0);
-        if (name == null) {
-            if (nameRequired) {
-                outError[0] = tag + " does not specify android:name";
-                return false;
-            }
-        } else {
-            String outInfoName = buildClassName(packageName, name);
-            if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(outInfoName)) {
-                outError[0] = tag + " invalid android:name";
-                return false;
-            }
-            outInfo.name = outInfoName;
-            if (outInfoName == null) {
-                return false;
-            }
-        }
-
-        int roundIconVal = PackageParser.sUseRoundIcon ? sa.getResourceId(roundIconRes, 0) : 0;
-        if (roundIconVal != 0) {
-            outInfo.icon = roundIconVal;
-            outInfo.nonLocalizedLabel = null;
-        } else {
-            int iconVal = sa.getResourceId(iconRes, 0);
-            if (iconVal != 0) {
-                outInfo.icon = iconVal;
-                outInfo.nonLocalizedLabel = null;
-            }
-        }
-
-        int logoVal = sa.getResourceId(logoRes, 0);
-        if (logoVal != 0) {
-            outInfo.logo = logoVal;
-        }
-
-        int bannerVal = sa.getResourceId(bannerRes, 0);
-        if (bannerVal != 0) {
-            outInfo.banner = bannerVal;
-        }
-
-        TypedValue v = sa.peekValue(labelRes);
-        if (v != null && (outInfo.labelRes = v.resourceId) == 0) {
-            outInfo.nonLocalizedLabel = v.coerceToString();
-        }
-
-        outInfo.packageName = packageName;
-
-        return true;
-    }
-
-    private static ParseResult parsePackageItemInfo(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            String tag,
-            TypedArray sa,
-            boolean nameRequired,
-            int nameRes,
-            int labelRes,
-            int iconRes,
-            int roundIconRes,
-            int logoRes,
-            int bannerRes
-    ) {
-        // This case can only happen in unit tests where we sometimes need to create fakes
-        // of various package parser data structures.
-        if (sa == null) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    tag + " does not contain any attributes"
-            );
-        }
-
-        String name = sa.getNonConfigurationString(nameRes, 0);
-        if (name == null) {
-            if (nameRequired) {
-                return parseInput.error(
-                        PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                        tag + " does not specify android:name"
-                );
-            }
-        } else {
-            String packageName = parsingPackage.getPackageName();
-            String outInfoName = buildClassName(packageName, name);
-            if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(outInfoName)) {
-                return parseInput.error(
-                        PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                        tag + " invalid android:name"
-                );
-            } else if (outInfoName == null) {
-                return parseInput.error(
-                        PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                        "Empty class name in package " + packageName
-                );
-            }
-
-            parsingPackage.setName(outInfoName);
-        }
-
-        int roundIconVal = PackageParser.sUseRoundIcon ? sa.getResourceId(roundIconRes, 0) : 0;
-        if (roundIconVal != 0) {
-            parsingPackage.setIcon(roundIconVal)
-                    .setNonLocalizedLabel(null);
-        } else {
-            int iconVal = sa.getResourceId(iconRes, 0);
-            if (iconVal != 0) {
-                parsingPackage.setIcon(iconVal)
-                        .setNonLocalizedLabel(null);
-            }
-        }
-
-        int logoVal = sa.getResourceId(logoRes, 0);
-        if (logoVal != 0) {
-            parsingPackage.setLogo(logoVal);
-        }
-
-        int bannerVal = sa.getResourceId(bannerRes, 0);
-        if (bannerVal != 0) {
-            parsingPackage.setBanner(bannerVal);
-        }
-
-        TypedValue v = sa.peekValue(labelRes);
-        if (v != null) {
-            parsingPackage.setLabelRes(v.resourceId);
-            if (v.resourceId == 0) {
-                parsingPackage.setNonLocalizedLabel(v.coerceToString());
-            }
-        }
-
-        return parseInput.success(parsingPackage);
-    }
-
-    private static ParseResult parseFeature(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-        // TODO(b/135203078): Remove, replace with ParseResult
-        String[] outError = new String[1];
-
-        ComponentParseUtils.ParsedFeature parsedFeature =
-                ComponentParseUtils.parseFeature(res, parser, outError);
-
-        if (parsedFeature == null || outError[0] != null) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    outError[0]
-            );
-        }
-
-        parsingPackage.addFeature(parsedFeature);
-
-        return parseInput.success(parsingPackage);
-    }
-
-
-    private static ParseResult parsePermissionGroup(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws XmlPullParserException, IOException {
-        // TODO(b/135203078): Remove, replace with ParseResult
-        String[] outError = new String[1];
-
-        ComponentParseUtils.ParsedPermissionGroup parsedPermissionGroup =
-                ComponentParseUtils.parsePermissionGroup(parsingPackage,
-                        res, parser, outError);
-
-        if (parsedPermissionGroup == null || outError[0] != null) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    outError[0]
-            );
-        }
-
-        parsingPackage.addPermissionGroup(parsedPermissionGroup);
-
-        return parseInput.success(parsingPackage);
-    }
-
-    private static ParseResult parsePermission(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws XmlPullParserException, IOException {
-        // TODO(b/135203078): Remove, replace with ParseResult
-        String[] outError = new String[1];
-
-        ComponentParseUtils.ParsedPermission parsedPermission =
-                ComponentParseUtils.parsePermission(parsingPackage,
-                        res, parser, outError);
-
-        if (parsedPermission == null || outError[0] != null) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    outError[0]
-            );
-        }
-
-        parsingPackage.addPermission(parsedPermission);
-
-        return parseInput.success(parsingPackage);
-    }
-
-    private static ParseResult parsePermissionTree(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws XmlPullParserException, IOException {
-        // TODO(b/135203078): Remove, replace with ParseResult
-        String[] outError = new String[1];
-
-        ComponentParseUtils.ParsedPermission parsedPermission =
-                ComponentParseUtils.parsePermissionTree(parsingPackage,
-                        res, parser, outError);
-
-        if (parsedPermission == null || outError[0] != null) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    outError[0]
-            );
-        }
-
-        parsingPackage.addPermission(parsedPermission);
-
-        return parseInput.success(parsingPackage);
-    }
-
-    private static ParseResult parseUsesPermission(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser,
-            PackageParser.Callback callback
-    )
-            throws XmlPullParserException, IOException {
-        TypedArray sa = res.obtainAttributes(parser,
-                R.styleable.AndroidManifestUsesPermission);
-
-        // Note: don't allow this value to be a reference to a resource
-        // that may change.
-        String name = sa.getNonResourceString(
-                R.styleable.AndroidManifestUsesPermission_name);
-
-        int maxSdkVersion = 0;
-        TypedValue val = sa.peekValue(
-                R.styleable.AndroidManifestUsesPermission_maxSdkVersion);
-        if (val != null) {
-            if (val.type >= TypedValue.TYPE_FIRST_INT && val.type <= TypedValue.TYPE_LAST_INT) {
-                maxSdkVersion = val.data;
-            }
-        }
-
-        final String requiredFeature = sa.getNonConfigurationString(
-                R.styleable.AndroidManifestUsesPermission_requiredFeature, 0);
-
-        final String requiredNotfeature = sa.getNonConfigurationString(
-                R.styleable.AndroidManifestUsesPermission_requiredNotFeature,
-                0);
-
-        sa.recycle();
-
-        XmlUtils.skipCurrentTag(parser);
-
-        // Can only succeed from here on out
-        ParseResult success = parseInput.success(parsingPackage);
-
-        if (name == null) {
-            return success;
-        }
-
-        if ((maxSdkVersion != 0) && (maxSdkVersion < Build.VERSION.RESOURCES_SDK_INT)) {
-            return success;
-        }
-
-        // Only allow requesting this permission if the platform supports the given feature.
-        if (requiredFeature != null && callback != null && !callback.hasFeature(requiredFeature)) {
-            return success;
-        }
-
-        // Only allow requesting this permission if the platform doesn't support the given feature.
-        if (requiredNotfeature != null && callback != null
-                && callback.hasFeature(requiredNotfeature)) {
-            return success;
-        }
-
-        if (!parsingPackage.getRequestedPermissions().contains(name)) {
-            parsingPackage.addRequestedPermission(name.intern());
-        } else {
-            Slog.w(TAG, "Ignoring duplicate uses-permissions/uses-permissions-sdk-m: "
-                    + name + " in package: " + parsingPackage.getPackageName() + " at: "
-                    + parser.getPositionDescription());
-        }
-
-        return success;
-    }
-
-    private static boolean parseUsesConfiguration(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-        ConfigurationInfo cPref = new ConfigurationInfo();
-        TypedArray sa = res.obtainAttributes(parser,
-                R.styleable.AndroidManifestUsesConfiguration);
-        cPref.reqTouchScreen = sa.getInt(
-                R.styleable.AndroidManifestUsesConfiguration_reqTouchScreen,
-                Configuration.TOUCHSCREEN_UNDEFINED);
-        cPref.reqKeyboardType = sa.getInt(
-                R.styleable.AndroidManifestUsesConfiguration_reqKeyboardType,
-                Configuration.KEYBOARD_UNDEFINED);
-        if (sa.getBoolean(
-                R.styleable.AndroidManifestUsesConfiguration_reqHardKeyboard,
-                false)) {
-            cPref.reqInputFeatures |= ConfigurationInfo.INPUT_FEATURE_HARD_KEYBOARD;
-        }
-        cPref.reqNavigation = sa.getInt(
-                R.styleable.AndroidManifestUsesConfiguration_reqNavigation,
-                Configuration.NAVIGATION_UNDEFINED);
-        if (sa.getBoolean(
-                R.styleable.AndroidManifestUsesConfiguration_reqFiveWayNav,
-                false)) {
-            cPref.reqInputFeatures |= ConfigurationInfo.INPUT_FEATURE_FIVE_WAY_NAV;
-        }
-        sa.recycle();
-        parsingPackage.addConfigPreference(cPref);
-
-        XmlUtils.skipCurrentTag(parser);
-        return true;
-    }
-
-    private static boolean parseUsesFeature(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-        FeatureInfo fi = parseFeatureInfo(res, parser);
-        parsingPackage.addReqFeature(fi);
-
-        if (fi.name == null) {
-            ConfigurationInfo cPref = new ConfigurationInfo();
-            cPref.reqGlEsVersion = fi.reqGlEsVersion;
-            parsingPackage.addConfigPreference(cPref);
-        }
-
-        XmlUtils.skipCurrentTag(parser);
-        return true;
-    }
-
-    private static FeatureInfo parseFeatureInfo(Resources res, AttributeSet attrs) {
-        FeatureInfo fi = new FeatureInfo();
-        TypedArray sa = res.obtainAttributes(attrs,
-                R.styleable.AndroidManifestUsesFeature);
-        // Note: don't allow this value to be a reference to a resource
-        // that may change.
-        fi.name = sa.getNonResourceString(R.styleable.AndroidManifestUsesFeature_name);
-        fi.version = sa.getInt(R.styleable.AndroidManifestUsesFeature_version, 0);
-        if (fi.name == null) {
-            fi.reqGlEsVersion = sa.getInt(R.styleable.AndroidManifestUsesFeature_glEsVersion,
-                    FeatureInfo.GL_ES_VERSION_UNDEFINED);
-        }
-        if (sa.getBoolean(R.styleable.AndroidManifestUsesFeature_required, true)) {
-            fi.flags |= FeatureInfo.FLAG_REQUIRED;
-        }
-        sa.recycle();
-        return fi;
-    }
-
-    private static boolean parseFeatureGroup(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-        FeatureGroupInfo group = new FeatureGroupInfo();
-        ArrayList<FeatureInfo> features = null;
-        final int innerDepth = parser.getDepth();
-        int type;
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG
-                || parser.getDepth() > innerDepth)) {
-            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                continue;
-            }
-
-            final String innerTagName = parser.getName();
-            if (innerTagName.equals("uses-feature")) {
-                FeatureInfo featureInfo = parseFeatureInfo(res, parser);
-                // FeatureGroups are stricter and mandate that
-                // any <uses-feature> declared are mandatory.
-                featureInfo.flags |= FeatureInfo.FLAG_REQUIRED;
-                features = ArrayUtils.add(features, featureInfo);
-            } else {
-                Slog.w(TAG,
-                        "Unknown element under <feature-group>: " + innerTagName +
-                                " at " + parsingPackage.getBaseCodePath() + " " +
-                                parser.getPositionDescription());
-            }
-            XmlUtils.skipCurrentTag(parser);
-        }
-
-        if (features != null) {
-            group.features = new FeatureInfo[features.size()];
-            group.features = features.toArray(group.features);
-        }
-
-        parsingPackage.addFeatureGroup(group);
-        return true;
-    }
-
-    private static ParseResult parseUsesSdk(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-        if (PackageParser.SDK_VERSION > 0) {
-            TypedArray sa = res.obtainAttributes(parser,
-                    R.styleable.AndroidManifestUsesSdk);
-
-            int minVers = 1;
-            String minCode = null;
-            int targetVers = 0;
-            String targetCode = null;
-
-            TypedValue val = sa.peekValue(R.styleable.AndroidManifestUsesSdk_minSdkVersion);
-            if (val != null) {
-                if (val.type == TypedValue.TYPE_STRING && val.string != null) {
-                    minCode = val.string.toString();
-                } else {
-                    // If it's not a string, it's an integer.
-                    minVers = val.data;
-                }
-            }
-
-            val = sa.peekValue(R.styleable.AndroidManifestUsesSdk_targetSdkVersion);
-            if (val != null) {
-                if (val.type == TypedValue.TYPE_STRING && val.string != null) {
-                    targetCode = val.string.toString();
-                    if (minCode == null) {
-                        minCode = targetCode;
-                    }
-                } else {
-                    // If it's not a string, it's an integer.
-                    targetVers = val.data;
-                }
-            } else {
-                targetVers = minVers;
-                targetCode = minCode;
-            }
-
-            sa.recycle();
-
-            // TODO(b/135203078): Remove, replace with ParseResult
-            String[] outError = new String[1];
-            final int minSdkVersion = PackageParser.computeMinSdkVersion(minVers,
-                    minCode,
-                    PackageParser.SDK_VERSION, PackageParser.SDK_CODENAMES, outError);
-            if (minSdkVersion < 0) {
-                return parseInput.error(
-                        PackageManager.INSTALL_FAILED_OLDER_SDK
-                );
-            }
-
-            final int targetSdkVersion = PackageParser.computeTargetSdkVersion(
-                    targetVers,
-                    targetCode, PackageParser.SDK_CODENAMES, outError);
-            if (targetSdkVersion < 0) {
-                return parseInput.error(
-                        PackageManager.INSTALL_FAILED_OLDER_SDK
-                );
-            }
-
-            int type;
-            final int innerDepth = parser.getDepth();
-            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                    && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
-                if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                    continue;
-                }
-                if (parser.getName().equals("extension-sdk")) {
-                    final ParseResult result =
-                            parseExtensionSdk(parseInput, parsingPackage, res, parser);
-                    if (!result.isSuccess()) {
-                        return result;
-                    }
-                } else {
-                    Slog.w(TAG, "Unknown element under <uses-sdk>: " + parser.getName()
-                            + " at " + parsingPackage.getBaseCodePath() + " "
-                            + parser.getPositionDescription());
-                }
-                XmlUtils.skipCurrentTag(parser);
-            }
-
-            parsingPackage.setMinSdkVersion(minSdkVersion)
-                    .setTargetSdkVersion(targetSdkVersion);
-        }
-        return parseInput.success(parsingPackage);
-    }
-
-    private static ParseResult parseExtensionSdk(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-        TypedArray sa = res.obtainAttributes(parser,
-                com.android.internal.R.styleable.AndroidManifestExtensionSdk);
-        int sdkVersion = sa.getInt(
-                com.android.internal.R.styleable.AndroidManifestExtensionSdk_sdkVersion, -1);
-        int minVersion = sa.getInt(
-                com.android.internal.R.styleable.AndroidManifestExtensionSdk_minExtensionVersion,
-                -1);
-        sa.recycle();
-
-        if (sdkVersion < 0) {
-            return parseInput.error(
-                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                "<extension-sdk> must specify an sdkVersion >= 0");
-        }
-        if (minVersion < 0) {
-            return parseInput.error(
-                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                "<extension-sdk> must specify minExtensionVersion >= 0");
-        }
-
-        try {
-            int version = SdkExtensions.getExtensionVersion(sdkVersion);
-            if (version < minVersion) {
-                return parseInput.error(
-                        PackageManager.INSTALL_FAILED_OLDER_SDK,
-                        "Package requires " + sdkVersion + " extension version " + minVersion
-                                + " which exceeds device version " + version);
-            }
-        } catch (RuntimeException e) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    "Specified sdkVersion " + sdkVersion + " is not valid");
-        }
-        return parseInput.success(parsingPackage);
-    }
-
-    private static boolean parseRestrictUpdateHash(
-            int flags,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-        if ((flags & PackageParser.PARSE_IS_SYSTEM_DIR) != 0) {
-            TypedArray sa = res.obtainAttributes(parser,
-                    R.styleable.AndroidManifestRestrictUpdate);
-            final String hash = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestRestrictUpdate_hash,
-                    0);
-            sa.recycle();
-
-            if (hash != null) {
-                final int hashLength = hash.length();
-                final byte[] hashBytes = new byte[hashLength / 2];
-                for (int i = 0; i < hashLength; i += 2) {
-                    hashBytes[i / 2] = (byte) ((Character.digit(hash.charAt(i), 16)
-                            << 4)
-                            + Character.digit(hash.charAt(i + 1), 16));
-                }
-                parsingPackage.setRestrictUpdateHash(hashBytes);
-            } else {
-                parsingPackage.setRestrictUpdateHash(null);
-            }
-        }
-
-        XmlUtils.skipCurrentTag(parser);
-        return true;
-    }
-
-    private static ParseResult parseQueries(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-
-        final 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;
-            }
-            if (parser.getName().equals("intent")) {
-                String[] outError = new String[1];
-                ComponentParseUtils.ParsedQueriesIntentInfo intentInfo =
-                        ComponentParseUtils.parsedParsedQueriesIntentInfo(
-                                parsingPackage, res, parser, outError
-                        );
-                if (intentInfo == null) {
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            outError[0]
-                    );
-                }
-
-                Uri data = null;
-                String dataType = null;
-                String host = "";
-                final int numActions = intentInfo.countActions();
-                final int numSchemes = intentInfo.countDataSchemes();
-                final int numTypes = intentInfo.countDataTypes();
-                final int numHosts = intentInfo.getHosts().length;
-                if ((numSchemes == 0 && numTypes == 0 && numActions == 0)) {
-                    outError[0] = "intent tags must contain either an action or data.";
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            outError[0]
-                    );
-                }
-                if (numActions > 1) {
-                    outError[0] = "intent tag may have at most one action.";
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            outError[0]
-                    );
-                }
-                if (numTypes > 1) {
-                    outError[0] = "intent tag may have at most one data type.";
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            outError[0]
-                    );
-                }
-                if (numSchemes > 1) {
-                    outError[0] = "intent tag may have at most one data scheme.";
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            outError[0]
-                    );
-                }
-                if (numHosts > 1) {
-                    outError[0] = "intent tag may have at most one data host.";
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            outError[0]
-                    );
-                }
-                Intent intent = new Intent();
-                for (int i = 0, max = intentInfo.countCategories(); i < max; i++) {
-                    intent.addCategory(intentInfo.getCategory(i));
-                }
-                if (numHosts == 1) {
-                    host = intentInfo.getHosts()[0];
-                }
-                if (numSchemes == 1) {
-                    data = new Uri.Builder()
-                            .scheme(intentInfo.getDataScheme(0))
-                            .authority(host)
-                            .build();
-                }
-                if (numTypes == 1) {
-                    dataType = intentInfo.getDataType(0);
-                }
-                intent.setDataAndType(data, dataType);
-                if (numActions == 1) {
-                    intent.setAction(intentInfo.getAction(0));
-                }
-                parsingPackage.addQueriesIntent(intent);
-            } else if (parser.getName().equals("package")) {
-                final TypedArray sa = res.obtainAttributes(parser,
-                        R.styleable.AndroidManifestQueriesPackage);
-                final String packageName =
-                        sa.getString(R.styleable.AndroidManifestQueriesPackage_name);
-                if (TextUtils.isEmpty(packageName)) {
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            "Package name is missing from package tag."
-                    );
-                }
-                parsingPackage.addQueriesPackage(packageName.intern());
-            }
-        }
-        return parseInput.success(parsingPackage);
-    }
-
-    /**
-     * Parse the {@code application} XML tree at the current parse location in a
-     * <em>base APK</em> manifest.
-     * <p>
-     * When adding new features, carefully consider if they should also be
-     * supported by split APKs.
-     *
-     * @hide
-     */
-    public static ParseResult parseBaseApplication(
-            ParseInput parseInput,
-            String[] separateProcesses,
-            PackageParser.Callback callback,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser,
-            int flags
-    ) throws XmlPullParserException, IOException {
-        final String pkgName = parsingPackage.getPackageName();
-
-        // TODO(b/135203078): Remove, replace with ParseResult
-        String[] outError = new String[1];
-        TypedArray sa = null;
-
-        try {
-            sa = res.obtainAttributes(parser,
-                    R.styleable.AndroidManifestApplication);
-
-
-            parsingPackage
-                    .setIconRes(
-                            sa.getResourceId(R.styleable.AndroidManifestApplication_icon, 0))
-                    .setRoundIconRes(
-                            sa.getResourceId(R.styleable.AndroidManifestApplication_roundIcon, 0));
-
-            ParseResult result = parsePackageItemInfo(
-                    parseInput,
-                    parsingPackage,
-                    "<application>",
-                    sa, false /*nameRequired*/,
-                    R.styleable.AndroidManifestApplication_name,
-                    R.styleable.AndroidManifestApplication_label,
-                    R.styleable.AndroidManifestApplication_icon,
-                    R.styleable.AndroidManifestApplication_roundIcon,
-                    R.styleable.AndroidManifestApplication_logo,
-                    R.styleable.AndroidManifestApplication_banner
-            );
-            if (!result.isSuccess()) {
-                return result;
-            }
-
-            String name = parsingPackage.getName();
-            if (name != null) {
-                parsingPackage.setClassName(name);
-            }
-
-            String manageSpaceActivity = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestApplication_manageSpaceActivity,
-                    Configuration.NATIVE_CONFIG_VERSION);
-            if (manageSpaceActivity != null) {
-                String manageSpaceActivityName = buildClassName(pkgName, manageSpaceActivity);
-
-                if (manageSpaceActivityName == null) {
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            "Empty class name in package " + pkgName
-                    );
-                }
-
-                parsingPackage.setManageSpaceActivityName(manageSpaceActivityName);
-            }
-
-            boolean allowBackup = sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_allowBackup, true);
-            parsingPackage.setAllowBackup(allowBackup);
-
-            if (allowBackup) {
-                // backupAgent, killAfterRestore, fullBackupContent, backupInForeground,
-                // and restoreAnyVersion are only relevant if backup is possible for the
-                // given application.
-                String backupAgent = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestApplication_backupAgent,
-                        Configuration.NATIVE_CONFIG_VERSION);
-                if (backupAgent != null) {
-                    String backupAgentName = buildClassName(pkgName, backupAgent);
-                    if (backupAgentName == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                "Empty class name in package " + pkgName
-                        );
-                    }
-
-                    if (PackageParser.DEBUG_BACKUP) {
-                        Slog.v(TAG, "android:backupAgent = " + backupAgentName
-                                + " from " + pkgName + "+" + backupAgent);
-                    }
-
-                    parsingPackage.setBackupAgentName(backupAgentName);
-
-                    parsingPackage.setKillAfterRestore(sa.getBoolean(
-                            R.styleable.AndroidManifestApplication_killAfterRestore, true));
-
-                    parsingPackage.setRestoreAnyVersion(sa.getBoolean(
-                            R.styleable.AndroidManifestApplication_restoreAnyVersion, false));
-
-                    parsingPackage.setFullBackupOnly(sa.getBoolean(
-                            R.styleable.AndroidManifestApplication_fullBackupOnly, false));
-
-                    parsingPackage.setBackupInForeground(sa.getBoolean(
-                            R.styleable.AndroidManifestApplication_backupInForeground,
-                            false));
-                }
-
-                TypedValue v = sa.peekValue(
-                        R.styleable.AndroidManifestApplication_fullBackupContent);
-                int fullBackupContent = 0;
-
-                if (v != null) {
-                    fullBackupContent = v.resourceId;
-
-                    if (v.resourceId == 0) {
-                        if (PackageParser.DEBUG_BACKUP) {
-                            Slog.v(TAG, "fullBackupContent specified as boolean=" +
-                                    (v.data == 0 ? "false" : "true"));
-                        }
-                        // "false" => -1, "true" => 0
-                        fullBackupContent = v.data == 0 ? -1 : 0;
-                    }
-
-                    parsingPackage.setFullBackupContent(fullBackupContent);
-                }
-                if (PackageParser.DEBUG_BACKUP) {
-                    Slog.v(TAG, "fullBackupContent=" + fullBackupContent + " for " + pkgName);
-                }
-            }
-
-            parsingPackage
-                    .setTheme(
-                            sa.getResourceId(R.styleable.AndroidManifestApplication_theme, 0))
-                    .setDescriptionRes(
-                            sa.getResourceId(R.styleable.AndroidManifestApplication_description,
-                                    0));
-
-            if (sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_persistent,
-                    false)) {
-                // Check if persistence is based on a feature being present
-                final String requiredFeature = sa.getNonResourceString(R.styleable
-                        .AndroidManifestApplication_persistentWhenFeatureAvailable);
-                parsingPackage.setPersistent(requiredFeature == null
-                        || callback.hasFeature(requiredFeature));
-            }
-
-            boolean requiredForAllUsers = sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_requiredForAllUsers,
-                    false);
-            parsingPackage.setRequiredForAllUsers(requiredForAllUsers);
-
-            String restrictedAccountType = sa.getString(R.styleable
-                    .AndroidManifestApplication_restrictedAccountType);
-            if (restrictedAccountType != null && restrictedAccountType.length() > 0) {
-                parsingPackage.setRestrictedAccountType(restrictedAccountType);
-            }
-
-            String requiredAccountType = sa.getString(R.styleable
-                    .AndroidManifestApplication_requiredAccountType);
-            if (requiredAccountType != null && requiredAccountType.length() > 0) {
-                parsingPackage.setRequiredAccountType(requiredAccountType);
-            }
-
-            parsingPackage.setForceQueryable(
-                    sa.getBoolean(R.styleable.AndroidManifestApplication_forceQueryable, false)
-            );
-
-            boolean debuggable = sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_debuggable,
-                    false
-            );
-
-            parsingPackage.setDebuggable(debuggable);
-
-            if (debuggable) {
-                // Debuggable implies profileable
-                parsingPackage.setProfileableByShell(true);
-            }
-
-            parsingPackage.setVmSafeMode(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_vmSafeMode, false));
-
-            boolean baseHardwareAccelerated = sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_hardwareAccelerated,
-                    parsingPackage.getTargetSdkVersion()
-                            >= Build.VERSION_CODES.ICE_CREAM_SANDWICH);
-            parsingPackage.setBaseHardwareAccelerated(baseHardwareAccelerated);
-
-            parsingPackage.setHasCode(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_hasCode, true));
-
-            parsingPackage.setAllowTaskReparenting(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_allowTaskReparenting, false));
-
-            parsingPackage.setAllowClearUserData(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_allowClearUserData, true));
-
-            parsingPackage.setTestOnly(sa.getBoolean(
-                    com.android.internal.R.styleable.AndroidManifestApplication_testOnly,
-                    false));
-
-            parsingPackage.setLargeHeap(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_largeHeap, false));
-
-            parsingPackage.setUsesCleartextTraffic(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_usesCleartextTraffic,
-                    parsingPackage.getTargetSdkVersion() < Build.VERSION_CODES.P));
-
-            parsingPackage.setSupportsRtl(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_supportsRtl,
-                    false /* default is no RTL support*/));
-
-            parsingPackage.setMultiArch(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_multiArch, false));
-
-            parsingPackage.setExtractNativeLibs(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_extractNativeLibs, true));
-
-            parsingPackage.setUseEmbeddedDex(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_useEmbeddedDex, false));
-
-            parsingPackage.setDefaultToDeviceProtectedStorage(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_defaultToDeviceProtectedStorage,
-                    false));
-
-            parsingPackage.setDirectBootAware(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_directBootAware, false));
-
-            if (sa.hasValueOrEmpty(R.styleable.AndroidManifestApplication_resizeableActivity)) {
-                parsingPackage.setActivitiesResizeModeResizeable(sa.getBoolean(
-                        R.styleable.AndroidManifestApplication_resizeableActivity, true));
-            } else {
-                parsingPackage.setActivitiesResizeModeResizeableViaSdkVersion(
-                        parsingPackage.getTargetSdkVersion() >= Build.VERSION_CODES.N);
-            }
-
-            parsingPackage.setAllowClearUserDataOnFailedRestore(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_allowClearUserDataOnFailedRestore,
-                    true));
-
-
-            parsingPackage.setAllowAudioPlaybackCapture(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_allowAudioPlaybackCapture,
-                    parsingPackage.getTargetSdkVersion() >= Build.VERSION_CODES.Q));
-
-            parsingPackage.setRequestLegacyExternalStorage(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_requestLegacyExternalStorage,
-                    parsingPackage.getTargetSdkVersion() < Build.VERSION_CODES.Q));
-
-            parsingPackage
-                    .setMaxAspectRatio(
-                            sa.getFloat(R.styleable.AndroidManifestApplication_maxAspectRatio, 0))
-                    .setMinAspectRatio(
-                            sa.getFloat(R.styleable.AndroidManifestApplication_minAspectRatio, 0))
-                    .setNetworkSecurityConfigRes(sa.getResourceId(
-                            R.styleable.AndroidManifestApplication_networkSecurityConfig, 0))
-                    .setCategory(sa.getInt(R.styleable.AndroidManifestApplication_appCategory,
-                            ApplicationInfo.CATEGORY_UNDEFINED));
-
-            String str;
-            str = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestApplication_permission, 0);
-            parsingPackage.setPermission((str != null && str.length() > 0) ? str.intern() : null);
-
-            if (parsingPackage.getTargetSdkVersion() >= Build.VERSION_CODES.FROYO) {
-                str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestApplication_taskAffinity,
-                        Configuration.NATIVE_CONFIG_VERSION);
-            } else {
-                // Some older apps have been seen to use a resource reference
-                // here that on older builds was ignored (with a warning).  We
-                // need to continue to do this for them so they don't break.
-                str = sa.getNonResourceString(
-                        R.styleable.AndroidManifestApplication_taskAffinity);
-            }
-            String packageName = parsingPackage.getPackageName();
-            String taskAffinity = PackageParser.buildTaskAffinityName(packageName,
-                    packageName,
-                    str, outError);
-
-            if (outError[0] != null) {
-                return parseInput.error(
-                        PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                        outError[0]
-                );
-            }
-
-            parsingPackage.setTaskAffinity(taskAffinity);
-            String factory = sa.getNonResourceString(
-                    R.styleable.AndroidManifestApplication_appComponentFactory);
-            if (factory != null) {
-                String appComponentFactory = buildClassName(packageName, factory);
-                if (appComponentFactory == null) {
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            "Empty class name in package " + pkgName
-                    );
-                }
-
-                parsingPackage.setAppComponentFactory(appComponentFactory);
-            }
-
-            parsingPackage.setUsesNonSdkApi(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_usesNonSdkApi, false));
-
-            parsingPackage.setHasFragileUserData(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_hasFragileUserData, false));
-
-            CharSequence pname;
-            if (parsingPackage.getTargetSdkVersion() >= Build.VERSION_CODES.FROYO) {
-                pname = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestApplication_process,
-                        Configuration.NATIVE_CONFIG_VERSION);
-            } else {
-                // Some older apps have been seen to use a resource reference
-                // here that on older builds was ignored (with a warning).  We
-                // need to continue to do this for them so they don't break.
-                pname = sa.getNonResourceString(
-                        R.styleable.AndroidManifestApplication_process);
-            }
-            String processName = PackageParser.buildProcessName(packageName, null, pname, flags,
-                    separateProcesses, outError);
-
-            if (outError[0] != null) {
-                return parseInput.error(
-                        PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                        outError[0]
-                );
-            }
-
-            parsingPackage
-                    .setProcessName(processName)
-                    .setEnabled(
-                            sa.getBoolean(R.styleable.AndroidManifestApplication_enabled,
-                                    true));
-
-            parsingPackage.setCrossProfile(
-                    sa.getBoolean(R.styleable.AndroidManifestApplication_crossProfile, false));
-
-            parsingPackage.setIsGame(sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_isGame, false));
-
-            boolean cantSaveState = sa.getBoolean(
-                    R.styleable.AndroidManifestApplication_cantSaveState, false);
-            parsingPackage.setCantSaveState(cantSaveState);
-            if (cantSaveState) {
-                // A heavy-weight application can not be in a custom process.
-                // We can do direct compare because we intern all strings.
-                if (processName != null && !processName.equals(packageName)) {
-                    return parseInput.error(
-                            PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                            "cantSaveState applications can not use custom processes"
-                    );
-                }
-            }
-
-            String classLoaderName = sa.getString(
-                    R.styleable.AndroidManifestApplication_classLoader);
-            parsingPackage
-                    .setUiOptions(sa.getInt(R.styleable.AndroidManifestApplication_uiOptions, 0))
-                    .setClassLoaderName(classLoaderName)
-                    .setZygotePreloadName(
-                            sa.getString(R.styleable.AndroidManifestApplication_zygotePreloadName));
-
-            if (classLoaderName != null
-                    && !ClassLoaderFactory.isValidClassLoaderName(classLoaderName)) {
-                return parseInput.error(
-                        PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                        "Invalid class loader name: " + classLoaderName
-                );
-            }
-        } finally {
-            if (sa != null) {
-                sa.recycle();
-            }
-        }
-
-        final int innerDepth = parser.getDepth();
-        int type;
-        boolean hasActivityOrder = false;
-        boolean hasReceiverOrder = false;
-        boolean hasServiceOrder = false;
-
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
-            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                continue;
-            }
-
-            String tagName = parser.getName();
-            switch (tagName) {
-                case "activity":
-                    ComponentParseUtils.ParsedActivity activity =
-                            ComponentParseUtils.parseActivity(separateProcesses,
-                                    parsingPackage,
-                                    res, parser, flags,
-                                    outError, false,
-                                    parsingPackage.isBaseHardwareAccelerated());
-                    if (activity == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    hasActivityOrder |= (activity.order != 0);
-                    parsingPackage.addActivity(activity);
-                    break;
-                case "receiver":
-                    activity = ComponentParseUtils.parseActivity(separateProcesses,
-                            parsingPackage,
-                            res, parser,
-                            flags, outError,
-                            true, false);
-                    if (activity == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    hasReceiverOrder |= (activity.order != 0);
-                    parsingPackage.addReceiver(activity);
-                    break;
-                case "service":
-                    ComponentParseUtils.ParsedService s = ComponentParseUtils.parseService(
-                            separateProcesses,
-                            parsingPackage,
-                            res, parser, flags,
-                            outError);
-                    if (s == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    hasServiceOrder |= (s.order != 0);
-                    parsingPackage.addService(s);
-                    break;
-                case "provider":
-                    ComponentParseUtils.ParsedProvider p = ComponentParseUtils.parseProvider(
-                            separateProcesses,
-                            parsingPackage,
-                            res, parser, flags,
-                            outError
-                    );
-                    if (p == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    parsingPackage.addProvider(p);
-                    break;
-                case "activity-alias":
-                    activity = ComponentParseUtils.parseActivityAlias(
-                            parsingPackage,
-                            res,
-                            parser,
-                            outError
-                    );
-                    if (activity == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    hasActivityOrder |= (activity.order != 0);
-                    parsingPackage.addActivity(activity);
-                    break;
-                case "meta-data":
-                    // note: application meta-data is stored off to the side, so it can
-                    // remain null in the primary copy (we like to avoid extra copies because
-                    // it can be large)
-                    Bundle appMetaData = parseMetaData(parsingPackage, res, parser,
-                            parsingPackage.getAppMetaData(),
-                            outError);
-                    if (appMetaData == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    parsingPackage.setAppMetaData(appMetaData);
-                    break;
-                case "static-library":
-                    sa = res.obtainAttributes(parser,
-                            R.styleable.AndroidManifestStaticLibrary);
-
-                    // Note: don't allow this value to be a reference to a resource
-                    // that may change.
-                    String lname = sa.getNonResourceString(
-                            R.styleable.AndroidManifestStaticLibrary_name);
-                    final int version = sa.getInt(
-                            R.styleable.AndroidManifestStaticLibrary_version, -1);
-                    final int versionMajor = sa.getInt(
-                            R.styleable.AndroidManifestStaticLibrary_versionMajor,
-                            0);
-
-                    sa.recycle();
-
-                    // Since the app canot run without a static lib - fail if malformed
-                    if (lname == null || version < 0) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                "Bad static-library declaration name: " + lname
-                                        + " version: " + version
-                        );
-                    }
-
-                    if (parsingPackage.getSharedUserId() != null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID,
-                                "sharedUserId not allowed in static shared library"
-                        );
-                    }
-
-                    if (parsingPackage.getStaticSharedLibName() != null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                "Multiple static-shared libs for package " + pkgName
-                        );
-                    }
-
-                    parsingPackage.setStaticSharedLibName(lname.intern());
-                    if (version >= 0) {
-                        parsingPackage.setStaticSharedLibVersion(
-                                PackageInfo.composeLongVersionCode(versionMajor, version));
-                    } else {
-                        parsingPackage.setStaticSharedLibVersion(version);
-                    }
-                    parsingPackage.setStaticSharedLibrary(true);
-
-                    XmlUtils.skipCurrentTag(parser);
-
-                    break;
-                case "library":
-                    sa = res.obtainAttributes(parser,
-                            R.styleable.AndroidManifestLibrary);
-
-                    // Note: don't allow this value to be a reference to a resource
-                    // that may change.
-                    lname = sa.getNonResourceString(
-                            R.styleable.AndroidManifestLibrary_name);
-
-                    sa.recycle();
-
-                    if (lname != null) {
-                        lname = lname.intern();
-                        if (!ArrayUtils.contains(parsingPackage.getLibraryNames(), lname)) {
-                            parsingPackage.addLibraryName(lname);
-                        }
-                    }
-
-                    XmlUtils.skipCurrentTag(parser);
-
-                    break;
-                case "uses-static-library":
-                    ParseResult parseResult = parseUsesStaticLibrary(parseInput, parsingPackage,
-                            res, parser);
-                    if (!parseResult.isSuccess()) {
-                        return parseResult;
-                    }
-                    break;
-                case "uses-library":
-                    sa = res.obtainAttributes(parser,
-                            R.styleable.AndroidManifestUsesLibrary);
-
-                    // Note: don't allow this value to be a reference to a resource
-                    // that may change.
-                    lname = sa.getNonResourceString(
-                            R.styleable.AndroidManifestUsesLibrary_name);
-                    boolean req = sa.getBoolean(
-                            R.styleable.AndroidManifestUsesLibrary_required,
-                            true);
-
-                    sa.recycle();
-
-                    if (lname != null) {
-                        lname = lname.intern();
-                        if (req) {
-                            parsingPackage.addUsesLibrary(lname);
-                        } else {
-                            parsingPackage.addUsesOptionalLibrary(lname);
-                        }
-                    }
-
-                    XmlUtils.skipCurrentTag(parser);
-
-                    break;
-                case "processes":
-                    ArrayMap<String, ComponentParseUtils.ParsedProcess> processes =
-                            ComponentParseUtils.parseProcesses(separateProcesses,
-                                    parsingPackage,
-                                    res, parser, flags,
-                                    outError);
-                    if (processes == null) {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                outError[0]
-                        );
-                    }
-
-                    parsingPackage.setProcesses(processes);
-                    break;
-                case "uses-package":
-                    // Dependencies for app installers; we don't currently try to
-                    // enforce this.
-                    XmlUtils.skipCurrentTag(parser);
-                    break;
-                case "profileable":
-                    sa = res.obtainAttributes(parser,
-                            R.styleable.AndroidManifestProfileable);
-                    if (sa.getBoolean(
-                            R.styleable.AndroidManifestProfileable_shell, false)) {
-                        parsingPackage.setProfileableByShell(true);
-                    }
-                    XmlUtils.skipCurrentTag(parser);
-                    break;
-                default:
-                    if (!PackageParser.RIGID_PARSER) {
-                        Slog.w(TAG, "Unknown element under <application>: " + tagName
-                                + " at " + parsingPackage.getBaseCodePath() + " "
-                                + parser.getPositionDescription());
-                        XmlUtils.skipCurrentTag(parser);
-                        continue;
-                    } else {
-                        return parseInput.error(
-                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                                "Bad element under <application>: " + tagName
-                        );
-                    }
-            }
-        }
-
-        if (TextUtils.isEmpty(parsingPackage.getStaticSharedLibName())) {
-            // Add a hidden app detail activity to normal apps which forwards user to App Details
-            // page.
-            ComponentParseUtils.ParsedActivity a = generateAppDetailsHiddenActivity(
-                    parsingPackage,
-                    outError
-            );
-            // Ignore errors here
-            parsingPackage.addActivity(a);
-        }
-
-        if (hasActivityOrder) {
-            parsingPackage.sortActivities();
-        }
-        if (hasReceiverOrder) {
-            parsingPackage.sortReceivers();
-        }
-        if (hasServiceOrder) {
-            parsingPackage.sortServices();
-        }
-        // Must be ran after the entire {@link ApplicationInfo} has been fully processed and after
-        // every activity info has had a chance to set it from its attributes.
-        setMaxAspectRatio(parsingPackage);
-        setMinAspectRatio(parsingPackage, callback);
-
-        parsingPackage.setHasDomainUrls(hasDomainURLs(parsingPackage));
-
-        return parseInput.success(parsingPackage);
-    }
-
-    private static ParseResult parseUsesStaticLibrary(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws XmlPullParserException, IOException {
-        TypedArray sa = res.obtainAttributes(parser,
-                R.styleable.AndroidManifestUsesStaticLibrary);
-
-        // Note: don't allow this value to be a reference to a resource that may change.
-        String lname = sa.getNonResourceString(
-                R.styleable.AndroidManifestUsesLibrary_name);
-        final int version = sa.getInt(
-                R.styleable.AndroidManifestUsesStaticLibrary_version, -1);
-        String certSha256Digest = sa.getNonResourceString(com.android.internal.R.styleable
-                .AndroidManifestUsesStaticLibrary_certDigest);
-        sa.recycle();
-
-        // Since an APK providing a static shared lib can only provide the lib - fail if malformed
-        if (lname == null || version < 0 || certSha256Digest == null) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    "Bad uses-static-library declaration name: " + lname + " version: "
-                            + version + " certDigest" + certSha256Digest
-            );
-        }
-
-        // Can depend only on one version of the same library
-        List<String> usesStaticLibraries = parsingPackage.getUsesStaticLibraries();
-        if (usesStaticLibraries != null && usesStaticLibraries.contains(lname)) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    "Depending on multiple versions of static library " + lname
-            );
-        }
-
-        lname = lname.intern();
-        // We allow ":" delimiters in the SHA declaration as this is the format
-        // emitted by the certtool making it easy for developers to copy/paste.
-        certSha256Digest = certSha256Digest.replace(":", "").toLowerCase();
-
-        // Fot apps targeting O-MR1 we require explicit enumeration of all certs.
-        String[] additionalCertSha256Digests = EmptyArray.STRING;
-        if (parsingPackage.getTargetSdkVersion() >= Build.VERSION_CODES.O_MR1) {
-            // TODO(b/135203078): Remove, replace with ParseResult
-            String[] outError = new String[1];
-            additionalCertSha256Digests = parseAdditionalCertificates(res, parser, outError);
-            if (additionalCertSha256Digests == null || outError[0] != null) {
-                return parseInput.error(
-                        PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                        outError[0]
-                );
-            }
-        } else {
-            XmlUtils.skipCurrentTag(parser);
-        }
-
-        final String[] certSha256Digests = new String[additionalCertSha256Digests.length + 1];
-        certSha256Digests[0] = certSha256Digest;
-        System.arraycopy(additionalCertSha256Digests, 0, certSha256Digests,
-                1, additionalCertSha256Digests.length);
-
-        parsingPackage.addUsesStaticLibrary(lname)
-                .addUsesStaticLibraryVersion(version)
-                .addUsesStaticLibraryCertDigests(certSha256Digests);
-
-        return parseInput.success(parsingPackage);
-    }
-
-    private static String[] parseAdditionalCertificates(
-            Resources resources,
-            XmlResourceParser parser,
-            String[] outError
-    ) throws XmlPullParserException, IOException {
-        String[] certSha256Digests = EmptyArray.STRING;
-
-        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;
-            }
-
-            final String nodeName = parser.getName();
-            if (nodeName.equals("additional-certificate")) {
-                final TypedArray sa = resources.obtainAttributes(parser, com.android.internal.
-                        R.styleable.AndroidManifestAdditionalCertificate);
-                String certSha256Digest = sa.getNonResourceString(com.android.internal.
-                        R.styleable.AndroidManifestAdditionalCertificate_certDigest);
-                sa.recycle();
-
-                if (TextUtils.isEmpty(certSha256Digest)) {
-                    outError[0] = "Bad additional-certificate declaration with empty"
-                            + " certDigest:" + certSha256Digest;
-                    XmlUtils.skipCurrentTag(parser);
-                    sa.recycle();
-                    return null;
-                }
-
-                // We allow ":" delimiters in the SHA declaration as this is the format
-                // emitted by the certtool making it easy for developers to copy/paste.
-                certSha256Digest = certSha256Digest.replace(":", "").toLowerCase();
-                certSha256Digests = ArrayUtils.appendElement(String.class,
-                        certSha256Digests, certSha256Digest);
-            } else {
-                XmlUtils.skipCurrentTag(parser);
-            }
-        }
-
-        return certSha256Digests;
-    }
-
-    /**
-     * Generate activity object that forwards user to App Details page automatically.
-     * This activity should be invisible to user and user should not know or see it.
-     *
-     * @hide
-     */
-    @NonNull
-    private static ComponentParseUtils.ParsedActivity generateAppDetailsHiddenActivity(
-            ParsingPackage parsingPackage,
-            String[] outError
-    ) {
-        String packageName = parsingPackage.getPackageName();
-        String processName = parsingPackage.getProcessName();
-        boolean hardwareAccelerated = parsingPackage.isBaseHardwareAccelerated();
-        int uiOptions = parsingPackage.getUiOptions();
-
-        // Build custom App Details activity info instead of parsing it from xml
-        ComponentParseUtils.ParsedActivity activity = new ComponentParseUtils.ParsedActivity();
-        activity.setPackageName(packageName);
-
-        activity.theme = android.R.style.Theme_NoDisplay;
-        activity.exported = true;
-        activity.className = PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME;
-        activity.setProcessName(processName, processName);
-        activity.uiOptions = uiOptions;
-        activity.taskAffinity = PackageParser.buildTaskAffinityName(packageName,
-                packageName,
-                ":app_details", outError);
-        activity.enabled = true;
-        activity.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
-        activity.documentLaunchMode = ActivityInfo.DOCUMENT_LAUNCH_NONE;
-        activity.maxRecents = ActivityTaskManager.getDefaultAppRecentsLimitStatic();
-        activity.configChanges = PackageParser.getActivityConfigChanges(0, 0);
-        activity.softInputMode = 0;
-        activity.persistableMode = ActivityInfo.PERSIST_NEVER;
-        activity.screenOrientation = SCREEN_ORIENTATION_UNSPECIFIED;
-        activity.resizeMode = RESIZE_MODE_FORCE_RESIZEABLE;
-        activity.lockTaskLaunchMode = 0;
-        activity.directBootAware = false;
-        activity.rotationAnimation = ROTATION_ANIMATION_UNSPECIFIED;
-        activity.colorMode = ActivityInfo.COLOR_MODE_DEFAULT;
-        activity.preferMinimalPostProcessing = ActivityInfo.MINIMAL_POST_PROCESSING_DEFAULT;
-        if (hardwareAccelerated) {
-            activity.flags |= ActivityInfo.FLAG_HARDWARE_ACCELERATED;
-        }
-
-        return activity;
-    }
-
-    /**
-     * Check if one of the IntentFilter as both actions DEFAULT / VIEW and a HTTP/HTTPS data URI
-     */
-    private static boolean hasDomainURLs(
-            ParsingPackage parsingPackage) {
-        final List<ComponentParseUtils.ParsedActivity> activities = parsingPackage.getActivities();
-        final int countActivities = activities.size();
-        for (int n = 0; n < countActivities; n++) {
-            ComponentParseUtils.ParsedActivity activity = activities.get(n);
-            List<ComponentParseUtils.ParsedActivityIntentInfo> filters = activity.intents;
-            if (filters == null) continue;
-            final int countFilters = filters.size();
-            for (int m = 0; m < countFilters; m++) {
-                ComponentParseUtils.ParsedActivityIntentInfo aii = filters.get(m);
-                if (!aii.hasAction(Intent.ACTION_VIEW)) continue;
-                if (!aii.hasAction(Intent.ACTION_DEFAULT)) continue;
-                if (aii.hasDataScheme(IntentFilter.SCHEME_HTTP) ||
-                        aii.hasDataScheme(IntentFilter.SCHEME_HTTPS)) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Sets the max aspect ratio of every child activity that doesn't already have an aspect
-     * ratio set.
-     */
-    private static void setMaxAspectRatio(
-            ParsingPackage parsingPackage) {
-        // Default to (1.86) 16.7:9 aspect ratio for pre-O apps and unset for O and greater.
-        // NOTE: 16.7:9 was the max aspect ratio Android devices can support pre-O per the CDD.
-        float maxAspectRatio = parsingPackage.getTargetSdkVersion() < O
-                ? PackageParser.DEFAULT_PRE_O_MAX_ASPECT_RATIO : 0;
-
-        float packageMaxAspectRatio = parsingPackage.getMaxAspectRatio();
-        if (packageMaxAspectRatio != 0) {
-            // Use the application max aspect ration as default if set.
-            maxAspectRatio = packageMaxAspectRatio;
-        } else {
-            Bundle appMetaData = parsingPackage.getAppMetaData();
-            if (appMetaData != null && appMetaData.containsKey(
-                    PackageParser.METADATA_MAX_ASPECT_RATIO)) {
-                maxAspectRatio = appMetaData.getFloat(PackageParser.METADATA_MAX_ASPECT_RATIO,
-                        maxAspectRatio);
-            }
-        }
-
-        if (parsingPackage.getActivities() != null) {
-            for (ComponentParseUtils.ParsedActivity activity : parsingPackage.getActivities()) {
-                // If the max aspect ratio for the activity has already been set, skip.
-                if (activity.hasMaxAspectRatio()) {
-                    continue;
-                }
-
-                // By default we prefer to use a values defined on the activity directly than values
-                // defined on the application. We do not check the styled attributes on the activity
-                // as it would have already been set when we processed the activity. We wait to
-                // process the meta data here since this method is called at the end of processing
-                // the application and all meta data is guaranteed.
-                final float activityAspectRatio = activity.metaData != null
-                        ? activity.metaData.getFloat(PackageParser.METADATA_MAX_ASPECT_RATIO,
-                        maxAspectRatio)
-                        : maxAspectRatio;
-
-                activity.setMaxAspectRatio(activity.resizeMode, activityAspectRatio);
-            }
-        }
-    }
-
-    /**
-     * Sets the min aspect ratio of every child activity that doesn't already have an aspect
-     * ratio set.
-     */
-    private static void setMinAspectRatio(
-            ParsingPackage parsingPackage,
-            PackageParser.Callback callback
-    ) {
-        final float minAspectRatio;
-        float packageMinAspectRatio = parsingPackage.getMinAspectRatio();
-        if (packageMinAspectRatio != 0) {
-            // Use the application max aspect ration as default if set.
-            minAspectRatio = packageMinAspectRatio;
-        } else {
-            // Default to (1.33) 4:3 aspect ratio for pre-Q apps and unset for Q and greater.
-            // NOTE: 4:3 was the min aspect ratio Android devices can support pre-Q per the CDD,
-            // except for watches which always supported 1:1.
-            minAspectRatio = parsingPackage.getTargetSdkVersion() >= Build.VERSION_CODES.Q
-                    ? 0
-                    : (callback != null && callback.hasFeature(FEATURE_WATCH))
-                            ? PackageParser.DEFAULT_PRE_Q_MIN_ASPECT_RATIO_WATCH
-                            : PackageParser.DEFAULT_PRE_Q_MIN_ASPECT_RATIO;
-        }
-
-        if (parsingPackage.getActivities() != null) {
-            for (ComponentParseUtils.ParsedActivity activity : parsingPackage.getActivities()) {
-                if (activity.hasMinAspectRatio()) {
-                    continue;
-                }
-                activity.setMinAspectRatio(activity.resizeMode, minAspectRatio);
-            }
-        }
-    }
-
-    private static ParseResult parseOverlay(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-
-        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestResourceOverlay);
-        String target = sa.getString(
-                R.styleable.AndroidManifestResourceOverlay_targetPackage);
-        String targetName = sa.getString(
-                R.styleable.AndroidManifestResourceOverlay_targetName);
-        String category = sa.getString(
-                R.styleable.AndroidManifestResourceOverlay_category);
-        int priority = sa.getInt(R.styleable.AndroidManifestResourceOverlay_priority,
-                0);
-        boolean isStatic = sa.getBoolean(
-                R.styleable.AndroidManifestResourceOverlay_isStatic, false);
-
-        if (target == null) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    "<overlay> does not specify a target package"
-            );
-        }
-
-        if (priority < 0 || priority > 9999) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    "<overlay> priority must be between 0 and 9999"
-            );
-        }
-
-        // check to see if overlay should be excluded based on system property condition
-        String propName = sa.getString(
-                R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyName);
-        String propValue = sa.getString(
-                R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyValue);
-        if (!checkOverlayRequiredSystemProperty(propName, propValue)) {
-            Slog.i(TAG, "Skipping target and overlay pair " + target + " and "
-                    + parsingPackage.getBaseCodePath()
-                    + ": overlay ignored due to required system property: "
-                    + propName + " with value: " + propValue);
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    "Skipping target and overlay pair " + target + " and "
-                            + parsingPackage.getBaseCodePath()
-                            + ": overlay ignored due to required system property: "
-                            + propName + " with value: " + propValue
-            );
-        }
-
-        parsingPackage
-                .setIsOverlay(true)
-                .setOverlayTarget(target)
-                .setOverlayTargetName(targetName)
-                .setOverlayCategory(category)
-                .setOverlayPriority(priority)
-                .setOverlayIsStatic(isStatic);
-
-        sa.recycle();
-
-        XmlUtils.skipCurrentTag(parser);
-        return parseInput.success(parsingPackage);
-    }
-
-    private static boolean parseProtectedBroadcast(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-        TypedArray sa = res.obtainAttributes(parser,
-                R.styleable.AndroidManifestProtectedBroadcast);
-
-        // Note: don't allow this value to be a reference to a resource
-        // that may change.
-        String name = sa.getNonResourceString(R.styleable.AndroidManifestProtectedBroadcast_name);
-
-        sa.recycle();
-
-        if (name != null) {
-            parsingPackage.addProtectedBroadcast(name);
-        }
-
-        XmlUtils.skipCurrentTag(parser);
-        return true;
-    }
-
-    private static boolean parseSupportScreens(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-        TypedArray sa = res.obtainAttributes(parser,
-                R.styleable.AndroidManifestSupportsScreens);
-
-        int requiresSmallestWidthDp = sa.getInteger(
-                R.styleable.AndroidManifestSupportsScreens_requiresSmallestWidthDp,
-                0);
-        int compatibleWidthLimitDp = sa.getInteger(
-                R.styleable.AndroidManifestSupportsScreens_compatibleWidthLimitDp,
-                0);
-        int largestWidthLimitDp = sa.getInteger(
-                R.styleable.AndroidManifestSupportsScreens_largestWidthLimitDp,
-                0);
-
-        // This is a trick to get a boolean and still able to detect
-        // if a value was actually set.
-        parsingPackage
-                .setSupportsSmallScreens(
-                        sa.getInteger(R.styleable.AndroidManifestSupportsScreens_smallScreens, 1))
-                .setSupportsNormalScreens(
-                        sa.getInteger(R.styleable.AndroidManifestSupportsScreens_normalScreens, 1))
-                .setSupportsLargeScreens(
-                        sa.getInteger(R.styleable.AndroidManifestSupportsScreens_largeScreens, 1))
-                .setSupportsXLargeScreens(
-                        sa.getInteger(R.styleable.AndroidManifestSupportsScreens_xlargeScreens, 1))
-                .setResizeable(
-                        sa.getInteger(R.styleable.AndroidManifestSupportsScreens_resizeable, 1))
-                .setAnyDensity(
-                        sa.getInteger(R.styleable.AndroidManifestSupportsScreens_anyDensity, 1))
-                .setRequiresSmallestWidthDp(requiresSmallestWidthDp)
-                .setCompatibleWidthLimitDp(compatibleWidthLimitDp)
-                .setLargestWidthLimitDp(largestWidthLimitDp);
-
-        sa.recycle();
-
-        XmlUtils.skipCurrentTag(parser);
-        return true;
-    }
-
-    private static ParseResult parseInstrumentation(
-            ParseInput parseInput,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws XmlPullParserException, IOException {
-        // TODO(b/135203078): Remove, replace with ParseResult
-        String[] outError = new String[1];
-
-        ComponentParseUtils.ParsedInstrumentation parsedInstrumentation =
-                ComponentParseUtils.parseInstrumentation(parsingPackage,
-                        res, parser, outError);
-
-        if (parsedInstrumentation == null || outError[0] != null) {
-            return parseInput.error(
-                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
-                    outError[0]
-            );
-        }
-
-        parsingPackage.addInstrumentation(parsedInstrumentation);
-
-        return parseInput.success(parsingPackage);
-    }
-
-    private static boolean parseOriginalPackage(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-        TypedArray sa = res.obtainAttributes(parser,
-                R.styleable.AndroidManifestOriginalPackage);
-
-        String orig = sa.getNonConfigurationString(
-                R.styleable.AndroidManifestOriginalPackage_name,
-                0);
-        if (!parsingPackage.getPackageName().equals(orig)) {
-            if (parsingPackage.getOriginalPackages() == null) {
-                parsingPackage.setRealPackage(parsingPackage.getPackageName());
-            }
-            parsingPackage.addOriginalPackage(orig);
-        }
-
-        sa.recycle();
-
-        XmlUtils.skipCurrentTag(parser);
-        return true;
-    }
-
-    private static boolean parseAdoptPermissions(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser
-    ) throws IOException, XmlPullParserException {
-        TypedArray sa = res.obtainAttributes(parser,
-                R.styleable.AndroidManifestOriginalPackage);
-
-        String name = sa.getNonConfigurationString(
-                R.styleable.AndroidManifestOriginalPackage_name,
-                0);
-
-        sa.recycle();
-
-        if (name != null) {
-            parsingPackage.addAdoptPermission(name);
-        }
-
-        XmlUtils.skipCurrentTag(parser);
-        return true;
-    }
-
-    private static void convertNewPermissions(
-            ParsingPackage packageToParse) {
-        final int NP = PackageParser.NEW_PERMISSIONS.length;
-        StringBuilder newPermsMsg = null;
-        for (int ip = 0; ip < NP; ip++) {
-            final PackageParser.NewPermissionInfo npi
-                    = PackageParser.NEW_PERMISSIONS[ip];
-            if (packageToParse.getTargetSdkVersion() >= npi.sdkVersion) {
-                break;
-            }
-            if (!packageToParse.getRequestedPermissions().contains(npi.name)) {
-                if (newPermsMsg == null) {
-                    newPermsMsg = new StringBuilder(128);
-                    newPermsMsg.append(packageToParse.getPackageName());
-                    newPermsMsg.append(": compat added ");
-                } else {
-                    newPermsMsg.append(' ');
-                }
-                newPermsMsg.append(npi.name);
-                packageToParse.addRequestedPermission(npi.name);
-                packageToParse.addImplicitPermission(npi.name);
-            }
-        }
-        if (newPermsMsg != null) {
-            Slog.i(TAG, newPermsMsg.toString());
-        }
-    }
-
-    private static void convertSplitPermissions(ParsingPackage packageToParse) {
-        List<SplitPermissionInfoParcelable> splitPermissions;
-
-        try {
-            splitPermissions = ActivityThread.getPermissionManager().getSplitPermissions();
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-
-        final int listSize = splitPermissions.size();
-        for (int is = 0; is < listSize; is++) {
-            final SplitPermissionInfoParcelable spi = splitPermissions.get(is);
-            List<String> requestedPermissions = packageToParse.getRequestedPermissions();
-            if (packageToParse.getTargetSdkVersion() >= spi.getTargetSdk()
-                    || !requestedPermissions.contains(spi.getSplitPermission())) {
-                continue;
-            }
-            final List<String> newPerms = spi.getNewPermissions();
-            for (int in = 0; in < newPerms.size(); in++) {
-                final String perm = newPerms.get(in);
-                if (!requestedPermissions.contains(perm)) {
-                    packageToParse.addRequestedPermission(perm);
-                    packageToParse.addImplicitPermission(perm);
-                }
-            }
-        }
-    }
-
-    private static boolean checkOverlayRequiredSystemProperty(String propName, String propValue) {
-        if (TextUtils.isEmpty(propName) || TextUtils.isEmpty(propValue)) {
-            if (!TextUtils.isEmpty(propName) || !TextUtils.isEmpty(propValue)) {
-                // malformed condition - incomplete
-                Slog.w(TAG, "Disabling overlay - incomplete property :'" + propName
-                        + "=" + propValue + "' - require both requiredSystemPropertyName"
-                        + " AND requiredSystemPropertyValue to be specified.");
-                return false;
-            }
-            // no valid condition set - so no exclusion criteria, overlay will be included.
-            return true;
-        }
-
-        // check property value - make sure it is both set and equal to expected value
-        final String currValue = SystemProperties.get(propName);
-        return (currValue != null && currValue.equals(propValue));
-    }
-
-    /**
-     * This is a pre-density application which will get scaled - instead of being pixel perfect.
-     * This type of application is not resizable.
-     *
-     * @param parsingPackage The package which needs to be marked as unresizable.
-     */
-    private static void adjustPackageToBeUnresizeableAndUnpipable(
-            ParsingPackage parsingPackage) {
-        if (parsingPackage.getActivities() != null) {
-            for (ComponentParseUtils.ParsedActivity a : parsingPackage.getActivities()) {
-                a.resizeMode = RESIZE_MODE_UNRESIZEABLE;
-                a.flags &= ~FLAG_SUPPORTS_PICTURE_IN_PICTURE;
-            }
-        }
-    }
-
-    private static String validateName(String name, boolean requireSeparator,
-            boolean requireFilename) {
-        final int N = name.length();
-        boolean hasSep = false;
-        boolean front = true;
-        for (int i = 0; i < N; i++) {
-            final char c = name.charAt(i);
-            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
-                front = false;
-                continue;
-            }
-            if (!front) {
-                if ((c >= '0' && c <= '9') || c == '_') {
-                    continue;
-                }
-            }
-            if (c == '.') {
-                hasSep = true;
-                front = true;
-                continue;
-            }
-            return "bad character '" + c + "'";
-        }
-        if (requireFilename && !FileUtils.isValidExtFilename(name)) {
-            return "Invalid filename";
-        }
-        return hasSep || !requireSeparator
-                ? null : "must have at least one '.' separator";
-    }
-
-    public static Bundle parseMetaData(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser, Bundle data, String[] outError)
-            throws XmlPullParserException, IOException {
-
-        TypedArray sa = res.obtainAttributes(parser,
-                R.styleable.AndroidManifestMetaData);
-
-        if (data == null) {
-            data = new Bundle();
-        }
-
-        String name = sa.getNonConfigurationString(
-                R.styleable.AndroidManifestMetaData_name, 0);
-        if (name == null) {
-            outError[0] = "<meta-data> requires an android:name attribute";
-            sa.recycle();
-            return null;
-        }
-
-        name = name.intern();
-
-        TypedValue v = sa.peekValue(
-                R.styleable.AndroidManifestMetaData_resource);
-        if (v != null && v.resourceId != 0) {
-            //Slog.i(TAG, "Meta data ref " + name + ": " + v);
-            data.putInt(name, v.resourceId);
-        } else {
-            v = sa.peekValue(
-                    R.styleable.AndroidManifestMetaData_value);
-            //Slog.i(TAG, "Meta data " + name + ": " + v);
-            if (v != null) {
-                if (v.type == TypedValue.TYPE_STRING) {
-                    CharSequence cs = v.coerceToString();
-                    data.putString(name, cs != null ? cs.toString() : null);
-                } else if (v.type == TypedValue.TYPE_INT_BOOLEAN) {
-                    data.putBoolean(name, v.data != 0);
-                } else if (v.type >= TypedValue.TYPE_FIRST_INT
-                        && v.type <= TypedValue.TYPE_LAST_INT) {
-                    data.putInt(name, v.data);
-                } else if (v.type == TypedValue.TYPE_FLOAT) {
-                    data.putFloat(name, v.getFloat());
-                } else {
-                    if (!PackageParser.RIGID_PARSER) {
-                        Slog.w(TAG,
-                                "<meta-data> only supports string, integer, float, color, "
-                                        + "boolean, and resource reference types: "
-                                        + parser.getName() + " at "
-                                        + parsingPackage.getBaseCodePath() + " "
-                                        + parser.getPositionDescription());
-                    } else {
-                        outError[0] =
-                                "<meta-data> only supports string, integer, float, color, "
-                                        + "boolean, and resource reference types";
-                        data = null;
-                    }
-                }
-            } else {
-                outError[0] = "<meta-data> requires an android:value or android:resource attribute";
-                data = null;
-            }
-        }
-
-        sa.recycle();
-
-        XmlUtils.skipCurrentTag(parser);
-
-        return data;
-    }
-
-    /**
-     * Collect certificates from all the APKs described in the given package,
-     * populating {@link AndroidPackageWrite#setSigningDetails(SigningDetails)}. Also asserts that
-     * all APK contents are signed correctly and consistently.
-     */
-    public static void collectCertificates(AndroidPackage pkg, boolean skipVerify)
-            throws PackageParserException {
-        pkg.mutate().setSigningDetails(SigningDetails.UNKNOWN);
-
-        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "collectCertificates");
-        try {
-            pkg.mutate().setSigningDetails(collectCertificates(
-                    pkg.getBaseCodePath(),
-                    skipVerify,
-                    pkg.isStaticSharedLibrary(),
-                    pkg.getSigningDetails(),
-                    pkg.getTargetSdkVersion()
-            ));
-
-            String[] splitCodePaths = pkg.getSplitCodePaths();
-            if (!ArrayUtils.isEmpty(splitCodePaths)) {
-                for (int i = 0; i < splitCodePaths.length; i++) {
-                    pkg.mutate().setSigningDetails(collectCertificates(
-                            splitCodePaths[i],
-                            skipVerify,
-                            pkg.isStaticSharedLibrary(),
-                            pkg.getSigningDetails(),
-                            pkg.getTargetSdkVersion()
-                    ));
-                }
-            }
-        } finally {
-            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
-        }
-    }
-
-    public static SigningDetails collectCertificates(
-            String baseCodePath,
-            boolean skipVerify,
-            boolean isStaticSharedLibrary,
-            @NonNull SigningDetails existingSigningDetails,
-            int targetSdk
-    ) throws PackageParserException {
-        int minSignatureScheme = ApkSignatureVerifier.getMinimumSignatureSchemeVersionForTargetSdk(
-                targetSdk);
-        if (isStaticSharedLibrary) {
-            // must use v2 signing scheme
-            minSignatureScheme = SigningDetails.SignatureSchemeVersion.SIGNING_BLOCK_V2;
-        }
-        SigningDetails verified;
-        if (skipVerify) {
-            // systemDir APKs are already trusted, save time by not verifying
-            verified = ApkSignatureVerifier.unsafeGetCertsWithoutVerification(
-                    baseCodePath, minSignatureScheme);
-        } else {
-            verified = ApkSignatureVerifier.verify(baseCodePath, minSignatureScheme);
-        }
-
-        // Verify that entries are signed consistently with the first pkg
-        // we encountered. Note that for splits, certificates may have
-        // already been populated during an earlier parse of a base APK.
-        if (existingSigningDetails == SigningDetails.UNKNOWN) {
-            return verified;
-        } else {
-            if (!Signature.areExactMatch(existingSigningDetails.signatures, verified.signatures)) {
-                throw new PackageParserException(
-                        INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES,
-                        baseCodePath + " has mismatched certificates");
-            }
-
-            return existingSigningDetails;
-        }
-    }
-
-    @Nullable
-    public static String buildClassName(String pkg, CharSequence clsSeq) {
-        if (clsSeq == null || clsSeq.length() <= 0) {
-            return null;
-        }
-        String cls = clsSeq.toString();
-        char c = cls.charAt(0);
-        if (c == '.') {
-            return pkg + cls;
-        }
-        if (cls.indexOf('.') < 0) {
-            StringBuilder b = new StringBuilder(pkg);
-            b.append('.');
-            b.append(cls);
-            return b.toString();
-        }
-        return cls;
-    }
-
-    public interface ParseInput {
-        ParseResult success(ParsingPackage result);
-
-        ParseResult error(int parseError);
-
-        ParseResult error(int parseError, String errorMessage);
-    }
-
-    public static class ParseResult implements ParseInput {
-
-        private static final boolean DEBUG_FILL_STACK_TRACE = false;
-
-        private ParsingPackage result;
-
-        private int parseError;
-        private String errorMessage;
-
-        public ParseInput reset() {
-            this.result = null;
-            this.parseError = PackageManager.INSTALL_SUCCEEDED;
-            this.errorMessage = null;
-            return this;
-        }
-
-        @Override
-        public ParseResult success(ParsingPackage result) {
-            if (parseError != PackageManager.INSTALL_SUCCEEDED || errorMessage != null) {
-                throw new IllegalStateException("Cannot set to success after set to error");
-            }
-            this.result = result;
-            return this;
-        }
-
-        @Override
-        public ParseResult error(int parseError) {
-            return error(parseError, null);
-        }
-
-        @Override
-        public ParseResult error(int parseError, String errorMessage) {
-            this.parseError = parseError;
-            this.errorMessage = errorMessage;
-
-            if (DEBUG_FILL_STACK_TRACE) {
-                this.errorMessage += Arrays.toString(new Exception().getStackTrace());
-            }
-
-            return this;
-        }
-
-        public ParsingPackage getResultAndNull() {
-            ParsingPackage result = this.result;
-            this.result = null;
-            return result;
-        }
-
-        public boolean isSuccess() {
-            return parseError == PackageManager.INSTALL_SUCCEEDED;
-        }
-
-        public int getParseError() {
-            return parseError;
-        }
-
-        public String getErrorMessage() {
-            return errorMessage;
-        }
-    }
-}
diff --git a/core/java/android/content/pm/parsing/ComponentParseUtils.java b/core/java/android/content/pm/parsing/ComponentParseUtils.java
deleted file mode 100644
index a0f5812..0000000
--- a/core/java/android/content/pm/parsing/ComponentParseUtils.java
+++ /dev/null
@@ -1,3787 +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.content.pm.parsing;
-
-import static android.content.pm.ActivityInfo.FLAG_ALWAYS_FOCUSABLE;
-import static android.content.pm.ActivityInfo.FLAG_SUPPORTS_PICTURE_IN_PICTURE;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
-import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
-import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED;
-
-import android.annotation.CallSuper;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.StringRes;
-import android.app.ActivityTaskManager;
-import android.compat.annotation.UnsupportedAppUsage;
-import android.content.ComponentName;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageParser;
-import android.content.pm.PathPermission;
-import android.content.pm.PermissionInfo;
-import android.content.pm.ProviderInfo;
-import android.content.pm.ServiceInfo;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.content.res.XmlResourceParser;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.os.PatternMatcher;
-import android.text.TextUtils;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.Slog;
-import android.util.TypedValue;
-import android.view.Gravity;
-
-import com.android.internal.R;
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.DataClass;
-import com.android.internal.util.XmlUtils;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * TODO(b/135203078): Move the inner classes out to separate files.
- * TODO(b/135203078): Expose inner classes as immutable through interface methods.
- *
- * @hide
- */
-public class ComponentParseUtils {
-
-    private static final String TAG = ApkParseUtils.TAG;
-
-    // TODO(b/135203078): None of this class's subclasses do anything. Remove in favor of base?
-    public static class ParsedIntentInfo extends IntentFilter {
-
-        /**
-         * <p>
-         * Implementation note: The serialized form for the intent list also contains the name
-         * of the concrete class that's stored in the list, and assumes that every element of the
-         * list is of the same type. This is very similar to the original parcelable mechanism.
-         * We cannot use that directly because IntentInfo extends IntentFilter, which is parcelable
-         * and is public API. It also declares Parcelable related methods as final which means
-         * we can't extend them. The approach of using composition instead of inheritance leads to
-         * a large set of cascading changes in the PackageManagerService, which seem undesirable.
-         *
-         * <p>
-         * <b>WARNING: </b> The list of objects returned by this function might need to be fixed up
-         * to make sure their owner fields are consistent. See {@code fixupOwner}.
-         */
-        public static void writeIntentsList(List<? extends ParsedIntentInfo> list, Parcel out,
-                int flags) {
-            if (list == null) {
-                out.writeInt(-1);
-                return;
-            }
-
-            final int size = list.size();
-            out.writeInt(size);
-
-            // Don't bother writing the component name if the list is empty.
-            if (size > 0) {
-                ParsedIntentInfo info = list.get(0);
-                out.writeString(info.getClass().getName());
-
-                for (int i = 0; i < size; i++) {
-                    list.get(i).writeIntentInfoToParcel(out, flags);
-                }
-            }
-        }
-
-        public static <T extends ParsedIntentInfo> ArrayList<T> createIntentsList(Parcel in) {
-            int size = in.readInt();
-            if (size == -1) {
-                return null;
-            }
-
-            if (size == 0) {
-                return new ArrayList<>(0);
-            }
-
-            String className = in.readString();
-            final ArrayList<T> intentsList;
-            try {
-                final Class<T> cls = (Class<T>) Class.forName(className);
-                final Constructor<T> cons = cls.getConstructor(Parcel.class);
-
-                intentsList = new ArrayList<>(size);
-                for (int i = 0; i < size; ++i) {
-                    intentsList.add(cons.newInstance(in));
-                }
-            } catch (ReflectiveOperationException ree) {
-                throw new AssertionError("Unable to construct intent list for: "
-                        + className, ree);
-            }
-
-            return intentsList;
-        }
-
-        protected String packageName;
-        protected final String className;
-
-        public boolean hasDefault;
-        public int labelRes;
-        public CharSequence nonLocalizedLabel;
-        public int icon;
-
-        protected List<String> rawDataTypes;
-
-        public void addRawDataType(String dataType) throws MalformedMimeTypeException {
-            if (rawDataTypes == null) {
-                rawDataTypes = new ArrayList<>();
-            }
-
-            rawDataTypes.add(dataType);
-            addDataType(dataType);
-        }
-
-        public ParsedIntentInfo(String packageName, String className) {
-            this.packageName = packageName;
-            this.className = className;
-        }
-
-        public ParsedIntentInfo(Parcel in) {
-            super(in);
-            packageName = in.readString();
-            className = in.readString();
-            hasDefault = (in.readInt() == 1);
-            labelRes = in.readInt();
-            nonLocalizedLabel = in.readCharSequence();
-            icon = in.readInt();
-        }
-
-        public void writeIntentInfoToParcel(Parcel dest, int flags) {
-            super.writeToParcel(dest, flags);
-            dest.writeString(packageName);
-            dest.writeString(className);
-            dest.writeInt(hasDefault ? 1 : 0);
-            dest.writeInt(labelRes);
-            dest.writeCharSequence(nonLocalizedLabel);
-            dest.writeInt(icon);
-        }
-
-        public String getPackageName() {
-            return packageName;
-        }
-
-        public String getClassName() {
-            return className;
-        }
-    }
-
-    public static class ParsedActivityIntentInfo extends ParsedIntentInfo {
-
-        public ParsedActivityIntentInfo(String packageName, String className) {
-            super(packageName, className);
-        }
-
-        public ParsedActivityIntentInfo(Parcel in) {
-            super(in);
-        }
-
-        public static final Creator<ParsedActivityIntentInfo> CREATOR =
-                new Creator<ParsedActivityIntentInfo>() {
-                    @Override
-                    public ParsedActivityIntentInfo createFromParcel(Parcel source) {
-                        return new ParsedActivityIntentInfo(source);
-                    }
-
-                    @Override
-                    public ParsedActivityIntentInfo[] newArray(int size) {
-                        return new ParsedActivityIntentInfo[size];
-                    }
-                };
-    }
-
-    public static class ParsedServiceIntentInfo extends ParsedIntentInfo {
-
-        public ParsedServiceIntentInfo(String packageName, String className) {
-            super(packageName, className);
-        }
-
-        public ParsedServiceIntentInfo(Parcel in) {
-            super(in);
-        }
-
-        public static final Creator<ParsedServiceIntentInfo> CREATOR =
-                new Creator<ParsedServiceIntentInfo>() {
-                    @Override
-                    public ParsedServiceIntentInfo createFromParcel(Parcel source) {
-                        return new ParsedServiceIntentInfo(source);
-                    }
-
-                    @Override
-                    public ParsedServiceIntentInfo[] newArray(int size) {
-                        return new ParsedServiceIntentInfo[size];
-                    }
-                };
-    }
-
-    public static class ParsedProviderIntentInfo extends ParsedIntentInfo {
-
-        public ParsedProviderIntentInfo(String packageName, String className) {
-            super(packageName, className);
-        }
-
-        public ParsedProviderIntentInfo(Parcel in) {
-            super(in);
-        }
-
-        public static final Creator<ParsedProviderIntentInfo> CREATOR =
-                new Creator<ParsedProviderIntentInfo>() {
-                    @Override
-                    public ParsedProviderIntentInfo createFromParcel(Parcel source) {
-                        return new ParsedProviderIntentInfo(source);
-                    }
-
-                    @Override
-                    public ParsedProviderIntentInfo[] newArray(int size) {
-                        return new ParsedProviderIntentInfo[size];
-                    }
-                };
-    }
-
-    public static class ParsedQueriesIntentInfo extends ParsedIntentInfo {
-
-        public ParsedQueriesIntentInfo(String packageName, String className) {
-            super(packageName, className);
-        }
-
-        public ParsedQueriesIntentInfo(Parcel in) {
-            super(in);
-        }
-
-        public static final Creator<ParsedQueriesIntentInfo> CREATOR =
-                new Creator<ParsedQueriesIntentInfo>() {
-                    @Override
-                    public ParsedQueriesIntentInfo createFromParcel(Parcel source) {
-                        return new ParsedQueriesIntentInfo(source);
-                    }
-
-                    @Override
-                    public ParsedQueriesIntentInfo[] newArray(int size) {
-                        return new ParsedQueriesIntentInfo[size];
-                    }
-                };
-    }
-
-    public static class ParsedComponent<IntentInfoType extends ParsedIntentInfo> implements
-            Parcelable {
-
-        // TODO(b/135203078): Replace with "name", as not all usages are an actual class
-        public String className;
-        public int icon;
-        public int labelRes;
-        public CharSequence nonLocalizedLabel;
-        public int logo;
-        public int banner;
-
-        public int descriptionRes;
-
-        // TODO(b/135203078): Make subclass that contains these fields only for the necessary
-        //  subtypes
-        protected boolean enabled = true;
-        protected boolean directBootAware;
-        public int flags;
-
-        private String packageName;
-        private String splitName;
-
-        // TODO(b/135203078): Make nullable
-        public List<IntentInfoType> intents = new ArrayList<>();
-
-        private transient ComponentName componentName;
-
-        protected Bundle metaData;
-
-        public void setSplitName(String splitName) {
-            this.splitName = splitName;
-        }
-
-        public String getSplitName() {
-            return splitName;
-        }
-
-        @CallSuper
-        public void setPackageName(String packageName) {
-            this.packageName = packageName;
-            this.componentName = null;
-        }
-
-        void setPackageNameInternal(String packageName) {
-            this.packageName = packageName;
-            this.componentName = null;
-        }
-
-        public void setEnabled(boolean enabled) {
-            this.enabled = enabled;
-        }
-
-        public String getPackageName() {
-            return packageName;
-        }
-
-        public final boolean isDirectBootAware() {
-            return directBootAware;
-        }
-
-        public final boolean isEnabled() {
-            return enabled;
-        }
-
-        public final String getName() {
-            return className;
-        }
-
-        public final Bundle getMetaData() {
-            return metaData;
-        }
-
-        @UnsupportedAppUsage
-        public ComponentName getComponentName() {
-            if (componentName != null) {
-                return componentName;
-            }
-            if (className != null) {
-                componentName = new ComponentName(getPackageName(),
-                        className);
-            }
-            return componentName;
-        }
-
-        public void setFrom(ParsedComponent other) {
-            this.metaData = other.metaData;
-            this.className = other.className;
-            this.icon = other.icon;
-            this.labelRes = other.labelRes;
-            this.nonLocalizedLabel = other.nonLocalizedLabel;
-            this.logo = other.logo;
-            this.banner = other.banner;
-
-            this.descriptionRes = other.descriptionRes;
-
-            this.enabled = other.enabled;
-            this.directBootAware = other.directBootAware;
-            this.flags = other.flags;
-
-            this.setPackageName(other.packageName);
-            this.setSplitName(other.getSplitName());
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            dest.writeString(this.className);
-            dest.writeInt(this.icon);
-            dest.writeInt(this.labelRes);
-            dest.writeCharSequence(this.nonLocalizedLabel);
-            dest.writeInt(this.logo);
-            dest.writeInt(this.banner);
-            dest.writeInt(this.descriptionRes);
-            dest.writeBoolean(this.enabled);
-            dest.writeBoolean(this.directBootAware);
-            dest.writeInt(this.flags);
-            dest.writeString(this.packageName);
-            dest.writeString(this.splitName);
-            ParsedIntentInfo.writeIntentsList(this.intents, dest, flags);
-            dest.writeBundle(this.metaData);
-        }
-
-        public ParsedComponent() {
-        }
-
-        protected ParsedComponent(Parcel in) {
-            // We use the boot classloader for all classes that we load.
-            final ClassLoader boot = Object.class.getClassLoader();
-            this.className = in.readString();
-            this.icon = in.readInt();
-            this.labelRes = in.readInt();
-            this.nonLocalizedLabel = in.readCharSequence();
-            this.logo = in.readInt();
-            this.banner = in.readInt();
-            this.descriptionRes = in.readInt();
-            this.enabled = in.readByte() != 0;
-            this.directBootAware = in.readByte() != 0;
-            this.flags = in.readInt();
-            this.packageName = in.readString();
-            this.splitName = in.readString();
-            this.intents = ParsedIntentInfo.createIntentsList(in);
-            this.metaData = in.readBundle(boot);
-        }
-    }
-
-    // TODO(b/135203078): Document this. Maybe split out ParsedComponent to be actual components
-    //  that can have their own processes, rather than something like permission which cannot.
-    public static class ParsedMainComponent<IntentInfoType extends ParsedIntentInfo> extends
-            ParsedComponent<IntentInfoType> {
-
-        private String processName;
-        private String permission;
-
-        public void setProcessName(String appProcessName, String processName) {
-            // TODO(b/135203078): Is this even necessary anymore?
-            this.processName = TextUtils.safeIntern(
-                    processName == null ? appProcessName : processName);
-        }
-
-        public String getProcessName() {
-            return processName;
-        }
-
-        public void setPermission(String permission) {
-            // Empty string must be converted to null
-            this.permission = TextUtils.isEmpty(permission) ? null : permission.intern();
-        }
-
-        public String getPermission() {
-            return permission;
-        }
-
-        @Override
-        public void setFrom(ParsedComponent other) {
-            super.setFrom(other);
-            if (other instanceof ParsedMainComponent) {
-                ParsedMainComponent otherMainComponent = (ParsedMainComponent) other;
-                this.setProcessName(otherMainComponent.getProcessName(),
-                        otherMainComponent.getProcessName());
-                this.setPermission(otherMainComponent.getPermission());
-            }
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            super.writeToParcel(dest, flags);
-            dest.writeString(this.processName);
-            dest.writeString(this.permission);
-        }
-
-        public ParsedMainComponent() {
-        }
-
-        protected ParsedMainComponent(Parcel in) {
-            super(in);
-            this.processName = TextUtils.safeIntern(in.readString());
-            this.permission = TextUtils.safeIntern(in.readString());
-        }
-
-        public static final Creator<ParsedMainComponent> CREATOR =
-                new Creator<ParsedMainComponent>() {
-                    @Override
-                    public ParsedMainComponent createFromParcel(Parcel source) {
-                        return new ParsedMainComponent(source);
-                    }
-
-                    @Override
-                    public ParsedMainComponent[] newArray(int size) {
-                        return new ParsedMainComponent[size];
-                    }
-                };
-    }
-
-    public static class ParsedActivity extends ParsedMainComponent<ParsedActivityIntentInfo>
-            implements Parcelable {
-
-        public boolean exported;
-        public int theme;
-        public int uiOptions;
-
-        public String targetActivity;
-
-        public String parentActivityName;
-        public String taskAffinity;
-        public int privateFlags;
-
-        public int launchMode;
-        public int documentLaunchMode;
-        public int maxRecents;
-        public int configChanges;
-        public int softInputMode;
-        public int persistableMode;
-        public int lockTaskLaunchMode;
-
-        public int screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
-        public int resizeMode = ActivityInfo.RESIZE_MODE_RESIZEABLE;
-
-        public float maxAspectRatio;
-        public boolean hasMaxAspectRatio;
-
-        public float minAspectRatio;
-        public boolean hasMinAspectRatio;
-
-        public String requestedVrComponent;
-        public int rotationAnimation = -1;
-        public int colorMode;
-        public boolean preferMinimalPostProcessing;
-        public int order;
-
-        public ActivityInfo.WindowLayout windowLayout;
-
-        @Override
-        public void setPackageName(String packageName) {
-            super.setPackageName(packageName);
-            for (ParsedIntentInfo intent : this.intents) {
-                intent.packageName = packageName;
-            }
-        }
-
-        public boolean hasMaxAspectRatio() {
-            return hasMaxAspectRatio;
-        }
-
-        public boolean hasMinAspectRatio() {
-            return hasMinAspectRatio;
-        }
-
-        public void setMaxAspectRatio(int resizeMode, float maxAspectRatio) {
-            if (resizeMode == ActivityInfo.RESIZE_MODE_RESIZEABLE
-                    || resizeMode == ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION) {
-                // Resizeable activities can be put in any aspect ratio.
-                return;
-            }
-
-            if (maxAspectRatio < 1.0f && maxAspectRatio != 0) {
-                // Ignore any value lesser than 1.0.
-                return;
-            }
-
-            this.maxAspectRatio = maxAspectRatio;
-            hasMaxAspectRatio = true;
-        }
-
-        public void setMinAspectRatio(int resizeMode, float minAspectRatio) {
-            if (resizeMode == RESIZE_MODE_RESIZEABLE
-                    || resizeMode == RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION) {
-                // Resizeable activities can be put in any aspect ratio.
-                return;
-            }
-
-            if (minAspectRatio < 1.0f && minAspectRatio != 0) {
-                // Ignore any value lesser than 1.0.
-                return;
-            }
-
-            this.minAspectRatio = minAspectRatio;
-            hasMinAspectRatio = true;
-        }
-
-        public void addIntent(ParsedActivityIntentInfo intent) {
-            this.intents.add(intent);
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            super.writeToParcel(dest, flags);
-            dest.writeBoolean(this.exported);
-            dest.writeInt(this.theme);
-            dest.writeInt(this.uiOptions);
-            dest.writeString(this.targetActivity);
-            dest.writeString(this.parentActivityName);
-            dest.writeString(this.taskAffinity);
-            dest.writeInt(this.privateFlags);
-            dest.writeInt(this.launchMode);
-            dest.writeInt(this.documentLaunchMode);
-            dest.writeInt(this.maxRecents);
-            dest.writeInt(this.configChanges);
-            dest.writeInt(this.softInputMode);
-            dest.writeInt(this.persistableMode);
-            dest.writeInt(this.lockTaskLaunchMode);
-            dest.writeInt(this.screenOrientation);
-            dest.writeInt(this.resizeMode);
-            dest.writeFloat(this.maxAspectRatio);
-            dest.writeBoolean(this.hasMaxAspectRatio);
-            dest.writeFloat(this.minAspectRatio);
-            dest.writeBoolean(this.hasMinAspectRatio);
-            dest.writeString(this.requestedVrComponent);
-            dest.writeInt(this.rotationAnimation);
-            dest.writeInt(this.colorMode);
-            dest.writeBoolean(this.preferMinimalPostProcessing);
-            dest.writeInt(this.order);
-            dest.writeBundle(this.metaData);
-
-            if (windowLayout != null) {
-                dest.writeInt(1);
-                dest.writeInt(windowLayout.width);
-                dest.writeFloat(windowLayout.widthFraction);
-                dest.writeInt(windowLayout.height);
-                dest.writeFloat(windowLayout.heightFraction);
-                dest.writeInt(windowLayout.gravity);
-                dest.writeInt(windowLayout.minWidth);
-                dest.writeInt(windowLayout.minHeight);
-            } else {
-                dest.writeInt(0);
-            }
-        }
-
-        public ParsedActivity() {
-        }
-
-        protected ParsedActivity(Parcel in) {
-            super(in);
-            this.exported = in.readByte() != 0;
-            this.theme = in.readInt();
-            this.uiOptions = in.readInt();
-            this.targetActivity = in.readString();
-            this.parentActivityName = in.readString();
-            this.taskAffinity = in.readString();
-            this.privateFlags = in.readInt();
-            this.launchMode = in.readInt();
-            this.documentLaunchMode = in.readInt();
-            this.maxRecents = in.readInt();
-            this.configChanges = in.readInt();
-            this.softInputMode = in.readInt();
-            this.persistableMode = in.readInt();
-            this.lockTaskLaunchMode = in.readInt();
-            this.screenOrientation = in.readInt();
-            this.resizeMode = in.readInt();
-            this.maxAspectRatio = in.readFloat();
-            this.hasMaxAspectRatio = in.readByte() != 0;
-            this.minAspectRatio = in.readFloat();
-            this.hasMinAspectRatio = in.readByte() != 0;
-            this.requestedVrComponent = in.readString();
-            this.rotationAnimation = in.readInt();
-            this.colorMode = in.readInt();
-            this.preferMinimalPostProcessing = in.readByte() != 0;
-            this.order = in.readInt();
-            this.metaData = in.readBundle();
-            if (in.readInt() == 1) {
-                windowLayout = new ActivityInfo.WindowLayout(in);
-            }
-        }
-
-        public static final Creator<ParsedActivity> CREATOR = new Creator<ParsedActivity>() {
-            @Override
-            public ParsedActivity createFromParcel(Parcel source) {
-                return new ParsedActivity(source);
-            }
-
-            @Override
-            public ParsedActivity[] newArray(int size) {
-                return new ParsedActivity[size];
-            }
-        };
-    }
-
-    public static class ParsedService extends ParsedMainComponent<ParsedServiceIntentInfo> {
-
-        public boolean exported;
-        public int flags;
-        public int foregroundServiceType;
-        public int order;
-
-        @Override
-        public void setPackageName(String packageName) {
-            super.setPackageName(packageName);
-            for (ParsedIntentInfo intent : this.intents) {
-                intent.packageName = packageName;
-            }
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            super.writeToParcel(dest, flags);
-            dest.writeBoolean(this.exported);
-            dest.writeBundle(this.metaData);
-            dest.writeInt(this.flags);
-            dest.writeInt(this.foregroundServiceType);
-            dest.writeInt(this.order);
-        }
-
-        public ParsedService() {
-        }
-
-        protected ParsedService(Parcel in) {
-            super(in);
-            this.exported = in.readByte() != 0;
-            this.metaData = in.readBundle();
-            this.flags = in.readInt();
-            this.foregroundServiceType = in.readInt();
-            this.order = in.readInt();
-        }
-
-        public static final Creator<ParsedService> CREATOR = new Creator<ParsedService>() {
-            @Override
-            public ParsedService createFromParcel(Parcel source) {
-                return new ParsedService(source);
-            }
-
-            @Override
-            public ParsedService[] newArray(int size) {
-                return new ParsedService[size];
-            }
-        };
-    }
-
-    public static class ParsedProvider extends ParsedMainComponent<ParsedProviderIntentInfo> {
-
-        protected boolean exported;
-        protected int flags;
-        protected int order;
-        private String authority;
-        protected boolean isSyncable;
-        private String readPermission;
-        private String writePermission;
-        protected boolean grantUriPermissions;
-        protected boolean forceUriPermissions;
-        protected boolean multiProcess;
-        protected int initOrder;
-        protected PatternMatcher[] uriPermissionPatterns;
-        protected PathPermission[] pathPermissions;
-
-        public ParsedProvider(ParsedProvider other) {
-            this.setFrom(other);
-        }
-
-        protected void setFrom(ParsedProvider other) {
-            super.setFrom(other);
-            this.exported = other.exported;
-
-            this.intents.clear();
-            if (other.intents != null) {
-                this.intents.addAll(other.intents);
-            }
-
-            this.flags = other.flags;
-            this.order = other.order;
-            this.setAuthority(other.getAuthority());
-            this.isSyncable = other.isSyncable;
-            this.setReadPermission(other.getReadPermission());
-            this.setWritePermission(other.getWritePermission());
-            this.grantUriPermissions = other.grantUriPermissions;
-            this.forceUriPermissions = other.forceUriPermissions;
-            this.multiProcess = other.multiProcess;
-            this.initOrder = other.initOrder;
-            this.uriPermissionPatterns = other.uriPermissionPatterns;
-            this.pathPermissions = other.pathPermissions;
-        }
-
-        @Override
-        public void setPackageName(String packageName) {
-            super.setPackageName(packageName);
-            for (ParsedIntentInfo intent : this.intents) {
-                intent.packageName = packageName;
-            }
-        }
-
-        public boolean isExported() {
-            return exported;
-        }
-
-        @VisibleForTesting
-        public void setExported(boolean exported) {
-            this.exported = exported;
-        }
-
-        public List<ParsedProviderIntentInfo> getIntents() {
-            return intents;
-        }
-
-        public int getFlags() {
-            return flags;
-        }
-
-        public int getOrder() {
-            return order;
-        }
-
-        public void setAuthority(String authority) {
-            this.authority = TextUtils.safeIntern(authority);
-        }
-
-        public String getAuthority() {
-            return authority;
-        }
-
-        public void setSyncable(boolean isSyncable) {
-            this.isSyncable = isSyncable;
-        }
-
-        public boolean isSyncable() {
-            return isSyncable;
-        }
-
-        public void setReadPermission(String readPermission) {
-            // Empty string must be converted to null
-            this.readPermission = TextUtils.isEmpty(readPermission)
-                    ? null : readPermission.intern();
-        }
-
-        public String getReadPermission() {
-            return readPermission;
-        }
-
-        public void setWritePermission(String writePermission) {
-            // Empty string must be converted to null
-            this.writePermission = TextUtils.isEmpty(writePermission)
-                    ? null : writePermission.intern();
-        }
-
-        public String getWritePermission() {
-            return writePermission;
-        }
-
-        public boolean isGrantUriPermissions() {
-            return grantUriPermissions;
-        }
-
-        public boolean isForceUriPermissions() {
-            return forceUriPermissions;
-        }
-
-        public boolean isMultiProcess() {
-            return multiProcess;
-        }
-
-        public int getInitOrder() {
-            return initOrder;
-        }
-
-        public PatternMatcher[] getUriPermissionPatterns() {
-            return uriPermissionPatterns;
-        }
-
-        public PathPermission[] getPathPermissions() {
-            return pathPermissions;
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            super.writeToParcel(dest, flags);
-            dest.writeBoolean(this.exported);
-            dest.writeInt(this.flags);
-            dest.writeInt(this.order);
-            dest.writeString(this.authority);
-            dest.writeBoolean(this.isSyncable);
-            dest.writeString(this.readPermission);
-            dest.writeString(this.writePermission);
-            dest.writeBoolean(this.grantUriPermissions);
-            dest.writeBoolean(this.forceUriPermissions);
-            dest.writeBoolean(this.multiProcess);
-            dest.writeInt(this.initOrder);
-            dest.writeTypedArray(this.uriPermissionPatterns, flags);
-            dest.writeTypedArray(this.pathPermissions, flags);
-        }
-
-        public ParsedProvider() {
-        }
-
-        protected ParsedProvider(Parcel in) {
-            super(in);
-            this.exported = in.readByte() != 0;
-            this.flags = in.readInt();
-            this.order = in.readInt();
-            this.authority = TextUtils.safeIntern(in.readString());
-            this.isSyncable = in.readByte() != 0;
-            this.readPermission = TextUtils.safeIntern(in.readString());
-            this.writePermission = TextUtils.safeIntern(in.readString());
-            this.grantUriPermissions = in.readByte() != 0;
-            this.forceUriPermissions = in.readByte() != 0;
-            this.multiProcess = in.readByte() != 0;
-            this.initOrder = in.readInt();
-            this.uriPermissionPatterns = in.createTypedArray(PatternMatcher.CREATOR);
-            this.pathPermissions = in.createTypedArray(PathPermission.CREATOR);
-        }
-
-        public static final Creator<ParsedProvider> CREATOR = new Creator<ParsedProvider>() {
-            @Override
-            public ParsedProvider createFromParcel(Parcel source) {
-                return new ParsedProvider(source);
-            }
-
-            @Override
-            public ParsedProvider[] newArray(int size) {
-                return new ParsedProvider[size];
-            }
-        };
-    }
-
-    /**
-     * A {@link android.R.styleable#AndroidManifestFeature &lt;feature&gt;} tag parsed from the
-     * manifest.
-     */
-    // @DataClass verifier is broken, hence comment out for now
-    public static class ParsedFeature implements Parcelable {
-        /** Maximum length of featureId */
-        public static final int MAX_FEATURE_ID_LEN = 50;
-
-        /** Maximum amount of features per package */
-        private static final int MAX_NUM_FEATURES = 1000;
-
-        /** Id of the feature */
-        public final @NonNull String id;
-
-        /** User visible label fo the feature */
-        public final @StringRes int label;
-
-        /** Ids of previously declared features this feature inherits from */
-        public final @NonNull List<String> inheritFrom;
-
-        /**
-         * @return Is this set of features a valid combination for a single package?
-         */
-        public static boolean isCombinationValid(@Nullable List<ParsedFeature> features) {
-            if (features == null) {
-                return true;
-            }
-
-            ArraySet<String> featureIds = new ArraySet<>(features.size());
-            ArraySet<String> inheritFromFeatureIds = new ArraySet<>();
-
-            int numFeatures = features.size();
-            if (numFeatures > MAX_NUM_FEATURES) {
-                return false;
-            }
-
-            for (int featureNum = 0; featureNum < numFeatures; featureNum++) {
-                boolean wasAdded = featureIds.add(features.get(featureNum).id);
-                if (!wasAdded) {
-                    // feature id is not unique
-                    return false;
-                }
-            }
-
-            for (int featureNum = 0; featureNum < numFeatures; featureNum++) {
-                ParsedFeature feature = features.get(featureNum);
-
-                int numInheritFrom = feature.inheritFrom.size();
-                for (int inheritFromNum = 0; inheritFromNum < numInheritFrom; inheritFromNum++) {
-                    String inheritFrom = feature.inheritFrom.get(inheritFromNum);
-
-                    if (featureIds.contains(inheritFrom)) {
-                        // Cannot inherit from a feature that is still defined
-                        return false;
-                    }
-
-                    boolean wasAdded = inheritFromFeatureIds.add(inheritFrom);
-                    if (!wasAdded) {
-                        // inheritFrom is not unique
-                        return false;
-                    }
-                }
-            }
-
-            return true;
-        }
-
-
-
-        // Code below generated by codegen v1.0.14.
-        //
-        // DO NOT MODIFY!
-        // CHECKSTYLE:OFF Generated code
-        //
-        // To regenerate run:
-        // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/content/pm/parsing/ComponentParseUtils.java
-        //
-        // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
-        //   Settings > Editor > Code Style > Formatter Control
-        //@formatter:off
-
-
-        /**
-         * Creates a new ParsedFeature.
-         *
-         * @param id
-         *   Id of the feature
-         * @param label
-         *   User visible label fo the feature (if defined as resource)
-         * @param inheritFrom
-         *   Ids of previously declared features this feature inherits from
-         */
-        @DataClass.Generated.Member
-        public ParsedFeature(
-                @NonNull String id,
-                @StringRes int label,
-                @NonNull List<String> inheritFrom) {
-            this.id = id;
-            com.android.internal.util.AnnotationValidations.validate(
-                    NonNull.class, null, id);
-            this.label = label;
-            com.android.internal.util.AnnotationValidations.validate(
-                    StringRes.class, null, label);
-            this.inheritFrom = inheritFrom;
-            com.android.internal.util.AnnotationValidations.validate(
-                    NonNull.class, null, inheritFrom);
-
-            // onConstructed(); // You can define this method to get a callback
-        }
-
-        @Override
-        @DataClass.Generated.Member
-        public void writeToParcel(@NonNull Parcel dest, int flags) {
-            // You can override field parcelling by defining methods like:
-            // void parcelFieldName(Parcel dest, int flags) { ... }
-
-            dest.writeString(id);
-            dest.writeInt(label);
-            dest.writeStringList(inheritFrom);
-        }
-
-        @Override
-        @DataClass.Generated.Member
-        public int describeContents() { return 0; }
-
-        /** @hide */
-        @SuppressWarnings({"unchecked", "RedundantCast"})
-        @DataClass.Generated.Member
-        protected ParsedFeature(@NonNull Parcel in) {
-            // You can override field unparcelling by defining methods like:
-            // static FieldType unparcelFieldName(Parcel in) { ... }
-
-            String _id = in.readString();
-            int _label = in.readInt();
-            List<String> _inheritFrom = new ArrayList<>();
-            in.readStringList(_inheritFrom);
-
-            this.id = _id;
-            com.android.internal.util.AnnotationValidations.validate(
-                    NonNull.class, null, id);
-            this.label = _label;
-            com.android.internal.util.AnnotationValidations.validate(
-                    StringRes.class, null, label);
-            this.inheritFrom = _inheritFrom;
-            com.android.internal.util.AnnotationValidations.validate(
-                    NonNull.class, null, inheritFrom);
-
-            // onConstructed(); // You can define this method to get a callback
-        }
-
-        @DataClass.Generated.Member
-        public static final @NonNull Parcelable.Creator<ParsedFeature> CREATOR
-                = new Parcelable.Creator<ParsedFeature>() {
-            @Override
-            public ParsedFeature[] newArray(int size) {
-                return new ParsedFeature[size];
-            }
-
-            @Override
-            public ParsedFeature createFromParcel(@NonNull Parcel in) {
-                return new ParsedFeature(in);
-            }
-        };
-
-        /*@DataClass.Generated(
-                time = 1576783172965L,
-                codegenVersion = "1.0.14",
-                sourceFile = "frameworks/base/core/java/android/content/pm/parsing/ComponentParseUtils.java",
-                inputSignatures = "public final @android.annotation.NonNull java.lang.String id\npublic final @android.annotation.StringRes int label\npublic final @android.annotation.NonNull java.util.List<java.lang.String> inheritFrom\npublic static  boolean isCombinationValid(java.util.List<android.content.pm.parsing.ParsedFeature>)\nclass ParsedFeature extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass")
-         */
-        @Deprecated
-        private void __metadata() {}
-
-
-        //@formatter:on
-        // End of generated code
-
-    }
-
-    public static class ParsedPermission extends ParsedComponent<ParsedIntentInfo> {
-
-        public String backgroundPermission;
-        private String group;
-        public int requestRes;
-        public int protectionLevel;
-        public boolean tree;
-
-        public ParsedPermissionGroup parsedPermissionGroup;
-
-        public void setName(String className) {
-            this.className = className;
-        }
-
-        public void setGroup(String group) {
-            this.group = TextUtils.safeIntern(group);
-        }
-
-        public String getGroup() {
-            return group;
-        }
-
-        public boolean isRuntime() {
-            return getProtection() == PermissionInfo.PROTECTION_DANGEROUS;
-        }
-
-        public boolean isAppOp() {
-            return (protectionLevel & PermissionInfo.PROTECTION_FLAG_APPOP) != 0;
-        }
-
-        @PermissionInfo.Protection
-        public int getProtection() {
-            return protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
-        }
-
-        public int getProtectionFlags() {
-            return protectionLevel & ~PermissionInfo.PROTECTION_MASK_BASE;
-        }
-
-        public int calculateFootprint() {
-            int size = getName().length();
-            if (nonLocalizedLabel != null) {
-                size += nonLocalizedLabel.length();
-            }
-            return size;
-        }
-
-        public ParsedPermission() {
-        }
-
-        public ParsedPermission(ParsedPermission other) {
-            // TODO(b/135203078): Better way to copy this? Maybe refactor to the point where copy
-            //  isn't needed.
-            this.className = other.className;
-            this.icon = other.icon;
-            this.labelRes = other.labelRes;
-            this.nonLocalizedLabel = other.nonLocalizedLabel;
-            this.logo = other.logo;
-            this.banner = other.banner;
-            this.descriptionRes = other.descriptionRes;
-            this.enabled = other.enabled;
-            this.directBootAware = other.directBootAware;
-            this.flags = other.flags;
-            this.setSplitName(other.getSplitName());
-            this.setPackageName(other.getPackageName());
-
-            this.intents.addAll(other.intents);
-
-            if (other.metaData != null) {
-                this.metaData = new Bundle();
-                this.metaData.putAll(other.metaData);
-            }
-
-            this.backgroundPermission = other.backgroundPermission;
-            this.setGroup(other.group);
-            this.requestRes = other.requestRes;
-            this.protectionLevel = other.protectionLevel;
-            this.tree = other.tree;
-
-            this.parsedPermissionGroup = other.parsedPermissionGroup;
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            super.writeToParcel(dest, flags);
-            dest.writeString(this.backgroundPermission);
-            dest.writeString(this.group);
-            dest.writeInt(this.requestRes);
-            dest.writeInt(this.protectionLevel);
-            dest.writeBoolean(this.tree);
-            dest.writeParcelable(this.parsedPermissionGroup, flags);
-        }
-
-        protected ParsedPermission(Parcel in) {
-            super(in);
-            // We use the boot classloader for all classes that we load.
-            final ClassLoader boot = Object.class.getClassLoader();
-            this.backgroundPermission = in.readString();
-            this.group = TextUtils.safeIntern(in.readString());
-            this.requestRes = in.readInt();
-            this.protectionLevel = in.readInt();
-            this.tree = in.readBoolean();
-            this.parsedPermissionGroup = in.readParcelable(boot);
-        }
-
-        public static final Creator<ParsedPermission> CREATOR = new Creator<ParsedPermission>() {
-            @Override
-            public ParsedPermission createFromParcel(Parcel source) {
-                return new ParsedPermission(source);
-            }
-
-            @Override
-            public ParsedPermission[] newArray(int size) {
-                return new ParsedPermission[size];
-            }
-        };
-    }
-
-    public static class ParsedPermissionGroup extends ParsedComponent<ParsedIntentInfo> {
-
-        public int requestDetailResourceId;
-        public int backgroundRequestResourceId;
-        public int backgroundRequestDetailResourceId;
-
-        public int requestRes;
-        public int priority;
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            super.writeToParcel(dest, flags);
-            dest.writeInt(this.requestDetailResourceId);
-            dest.writeInt(this.backgroundRequestResourceId);
-            dest.writeInt(this.backgroundRequestDetailResourceId);
-            dest.writeInt(this.requestRes);
-            dest.writeInt(this.priority);
-        }
-
-        public ParsedPermissionGroup() {
-        }
-
-        protected ParsedPermissionGroup(Parcel in) {
-            super(in);
-            this.requestDetailResourceId = in.readInt();
-            this.backgroundRequestResourceId = in.readInt();
-            this.backgroundRequestDetailResourceId = in.readInt();
-            this.requestRes = in.readInt();
-            this.priority = in.readInt();
-        }
-
-        public static final Creator<ParsedPermissionGroup> CREATOR =
-                new Creator<ParsedPermissionGroup>() {
-                    @Override
-                    public ParsedPermissionGroup createFromParcel(Parcel source) {
-                        return new ParsedPermissionGroup(source);
-                    }
-
-                    @Override
-                    public ParsedPermissionGroup[] newArray(int size) {
-                        return new ParsedPermissionGroup[size];
-                    }
-                };
-    }
-
-    public static class ParsedInstrumentation extends ParsedComponent<ParsedIntentInfo> {
-
-        private String targetPackage;
-        private String targetProcesses;
-        public boolean handleProfiling;
-        public boolean functionalTest;
-
-        public ParsedInstrumentation() {
-        }
-
-        public void setTargetPackage(String targetPackage) {
-            this.targetPackage = TextUtils.safeIntern(targetPackage);
-        }
-
-        public String getTargetPackage() {
-            return targetPackage;
-        }
-
-        public void setTargetProcesses(String targetProcesses) {
-            this.targetProcesses = TextUtils.safeIntern(targetProcesses);
-        }
-
-        public String getTargetProcesses() {
-            return targetProcesses;
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            super.writeToParcel(dest, flags);
-            dest.writeString(this.targetPackage);
-            dest.writeString(this.targetProcesses);
-            dest.writeBoolean(this.handleProfiling);
-            dest.writeBoolean(this.functionalTest);
-        }
-
-        protected ParsedInstrumentation(Parcel in) {
-            super(in);
-            this.targetPackage = TextUtils.safeIntern(in.readString());
-            this.targetProcesses = TextUtils.safeIntern(in.readString());
-            this.handleProfiling = in.readByte() != 0;
-            this.functionalTest = in.readByte() != 0;
-        }
-
-        public static final Creator<ParsedInstrumentation> CREATOR =
-                new Creator<ParsedInstrumentation>() {
-                    @Override
-                    public ParsedInstrumentation createFromParcel(Parcel source) {
-                        return new ParsedInstrumentation(source);
-                    }
-
-                    @Override
-                    public ParsedInstrumentation[] newArray(int size) {
-                        return new ParsedInstrumentation[size];
-                    }
-                };
-    }
-
-    public static class ParsedProcess implements Parcelable {
-
-        public String name;
-        @Nullable
-        public ArraySet<String> deniedPermissions;
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            dest.writeString(this.name);
-            final int numDenied = this.deniedPermissions != null
-                    ? this.deniedPermissions.size() : 0;
-            dest.writeInt(numDenied);
-            for (int i = 0; i < numDenied; i++) {
-                dest.writeString(this.deniedPermissions.valueAt(i));
-            }
-        }
-
-        public ParsedProcess() {
-        }
-
-        public ParsedProcess(@NonNull ParsedProcess other) {
-            name = other.name;
-            if (other.deniedPermissions != null) {
-                deniedPermissions = new ArraySet<>(other.deniedPermissions);
-            }
-        }
-
-        public void addStateFrom(@NonNull ParsedProcess other) {
-            if (other.deniedPermissions != null) {
-                for (int i = other.deniedPermissions.size() - 1; i >= 0; i--) {
-                    if (deniedPermissions == null) {
-                        deniedPermissions = new ArraySet<>(other.deniedPermissions.size());
-                    }
-                    deniedPermissions.add(other.deniedPermissions.valueAt(i));
-                }
-            }
-        }
-
-        protected ParsedProcess(Parcel in) {
-            this.name = TextUtils.safeIntern(in.readString());
-            final int numDenied = in.readInt();
-            if (numDenied > 0) {
-                this.deniedPermissions = new ArraySet<>(numDenied);
-                this.deniedPermissions.add(TextUtils.safeIntern(in.readString()));
-            }
-        }
-
-        public static final Creator<ParsedProcess> CREATOR =
-                new Creator<ParsedProcess>() {
-                    @Override
-                    public ParsedProcess createFromParcel(Parcel source) {
-                        return new ParsedProcess(source);
-                    }
-
-                    @Override
-                    public ParsedProcess[] newArray(int size) {
-                        return new ParsedProcess[size];
-                    }
-                };
-    }
-
-    public static ParsedActivity parseActivity(
-            String[] separateProcesses,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser, int flags, String[] outError,
-            boolean receiver, boolean hardwareAccelerated)
-            throws XmlPullParserException, IOException {
-
-        TypedArray sa = null;
-        boolean visibleToEphemeral;
-        boolean setExported;
-
-        int targetSdkVersion = parsingPackage.getTargetSdkVersion();
-        String packageName = parsingPackage.getPackageName();
-        String packageProcessName = parsingPackage.getProcessName();
-        ParsedActivity result = new ParsedActivity();
-
-        try {
-            sa = res.obtainAttributes(parser, R.styleable.AndroidManifestActivity);
-
-            String tag = receiver ? "<receiver>" : "<activity>";
-
-            String name = sa.getNonConfigurationString(R.styleable.AndroidManifestActivity_name, 0);
-            if (name == null) {
-                outError[0] = tag + " does not specify android:name";
-                return null;
-            } else {
-                String className = ApkParseUtils.buildClassName(packageName, name);
-                if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(className)) {
-                    outError[0] = tag + " invalid android:name";
-                    return null;
-                } else if (className == null) {
-                    outError[0] = "Empty class name in package " + packageName;
-                    return null;
-                }
-
-                result.className = className;
-            }
-
-            int roundIconVal = PackageParser.sUseRoundIcon ? sa.getResourceId(
-                    R.styleable.AndroidManifestActivity_roundIcon, 0) : 0;
-            if (roundIconVal != 0) {
-                result.icon = roundIconVal;
-                result.nonLocalizedLabel = null;
-            } else {
-                int iconVal = sa.getResourceId(R.styleable.AndroidManifestActivity_icon, 0);
-                if (iconVal != 0) {
-                    result.icon = iconVal;
-                    result.nonLocalizedLabel = null;
-                }
-            }
-
-            int logoVal = sa.getResourceId(R.styleable.AndroidManifestActivity_logo, 0);
-            if (logoVal != 0) {
-                result.logo = logoVal;
-            }
-
-            int bannerVal = sa.getResourceId(R.styleable.AndroidManifestActivity_banner, 0);
-            if (bannerVal != 0) {
-                result.banner = bannerVal;
-            }
-
-            TypedValue v = sa.peekValue(R.styleable.AndroidManifestActivity_label);
-            if (v != null && (result.labelRes = v.resourceId) == 0) {
-                result.nonLocalizedLabel = v.coerceToString();
-            }
-
-            result.setPackageNameInternal(packageName);
-
-            CharSequence pname;
-            if (parsingPackage.getTargetSdkVersion() >= Build.VERSION_CODES.FROYO) {
-                pname = sa.getNonConfigurationString(R.styleable.AndroidManifestActivity_process,
-                        Configuration.NATIVE_CONFIG_VERSION);
-            } else {
-                // Some older apps have been seen to use a resource reference
-                // here that on older builds was ignored (with a warning).  We
-                // need to continue to do this for them so they don't break.
-                pname = sa.getNonResourceString(R.styleable.AndroidManifestActivity_process);
-            }
-
-            result.setProcessName(packageProcessName, PackageParser.buildProcessName(packageName,
-                    packageProcessName, pname,
-                    flags, separateProcesses, outError));
-
-            result.descriptionRes = sa.getResourceId(
-                    R.styleable.AndroidManifestActivity_description, 0);
-
-            result.enabled = sa.getBoolean(R.styleable.AndroidManifestActivity_enabled, true);
-
-            setExported = sa.hasValue(R.styleable.AndroidManifestActivity_exported);
-            if (setExported) {
-                result.exported = sa.getBoolean(R.styleable.AndroidManifestActivity_exported,
-                        false);
-            }
-
-            result.theme = sa.getResourceId(R.styleable.AndroidManifestActivity_theme, 0);
-
-            result.uiOptions = sa.getInt(R.styleable.AndroidManifestActivity_uiOptions,
-                    parsingPackage.getUiOptions());
-
-            String parentName = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestActivity_parentActivityName,
-                    Configuration.NATIVE_CONFIG_VERSION);
-            if (parentName != null) {
-                String parentClassName = ApkParseUtils.buildClassName(packageName, parentName);
-                if (parentClassName == null) {
-                    Log.e(TAG,
-                            "Activity " + result.className
-                                    + " specified invalid parentActivityName " +
-                                    parentName);
-                } else {
-                    result.parentActivityName = parentClassName;
-                }
-            }
-
-            String str;
-            str = sa.getNonConfigurationString(R.styleable.AndroidManifestActivity_permission, 0);
-            if (str == null) {
-                result.setPermission(parsingPackage.getPermission());
-            } else {
-                result.setPermission(str);
-            }
-
-            str = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestActivity_taskAffinity,
-                    Configuration.NATIVE_CONFIG_VERSION);
-            result.taskAffinity = PackageParser.buildTaskAffinityName(
-                    packageName,
-                    parsingPackage.getTaskAffinity(), str, outError);
-
-            result.setSplitName(
-                    sa.getNonConfigurationString(R.styleable.AndroidManifestActivity_splitName, 0));
-
-            result.flags = 0;
-            if (sa.getBoolean(
-                    R.styleable.AndroidManifestActivity_multiprocess, false)) {
-                result.flags |= ActivityInfo.FLAG_MULTIPROCESS;
-            }
-
-            if (sa.getBoolean(R.styleable.AndroidManifestActivity_finishOnTaskLaunch, false)) {
-                result.flags |= ActivityInfo.FLAG_FINISH_ON_TASK_LAUNCH;
-            }
-
-            if (sa.getBoolean(R.styleable.AndroidManifestActivity_clearTaskOnLaunch, false)) {
-                result.flags |= ActivityInfo.FLAG_CLEAR_TASK_ON_LAUNCH;
-            }
-
-            if (sa.getBoolean(R.styleable.AndroidManifestActivity_noHistory, false)) {
-                result.flags |= ActivityInfo.FLAG_NO_HISTORY;
-            }
-
-            if (sa.getBoolean(R.styleable.AndroidManifestActivity_alwaysRetainTaskState, false)) {
-                result.flags |= ActivityInfo.FLAG_ALWAYS_RETAIN_TASK_STATE;
-            }
-
-            if (sa.getBoolean(R.styleable.AndroidManifestActivity_stateNotNeeded, false)) {
-                result.flags |= ActivityInfo.FLAG_STATE_NOT_NEEDED;
-            }
-
-            if (sa.getBoolean(R.styleable.AndroidManifestActivity_excludeFromRecents, false)) {
-                result.flags |= ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS;
-            }
-
-            if (sa.getBoolean(R.styleable.AndroidManifestActivity_allowTaskReparenting,
-                    (parsingPackage.getFlags() & ApplicationInfo.FLAG_ALLOW_TASK_REPARENTING)
-                            != 0)) {
-                result.flags |= ActivityInfo.FLAG_ALLOW_TASK_REPARENTING;
-            }
-
-            if (sa.getBoolean(R.styleable.AndroidManifestActivity_finishOnCloseSystemDialogs,
-                    false)) {
-                result.flags |= ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS;
-            }
-
-            if (sa.getBoolean(R.styleable.AndroidManifestActivity_showOnLockScreen, false)
-                    || sa.getBoolean(R.styleable.AndroidManifestActivity_showForAllUsers, false)) {
-                result.flags |= ActivityInfo.FLAG_SHOW_FOR_ALL_USERS;
-            }
-
-            if (sa.getBoolean(R.styleable.AndroidManifestActivity_immersive, false)) {
-                result.flags |= ActivityInfo.FLAG_IMMERSIVE;
-            }
-
-            if (sa.getBoolean(R.styleable.AndroidManifestActivity_systemUserOnly, false)) {
-                result.flags |= ActivityInfo.FLAG_SYSTEM_USER_ONLY;
-            }
-
-            boolean directBootAware;
-
-            if (!receiver) {
-                if (sa.getBoolean(R.styleable.AndroidManifestActivity_hardwareAccelerated,
-                        hardwareAccelerated)) {
-                    result.flags |= ActivityInfo.FLAG_HARDWARE_ACCELERATED;
-                }
-
-                result.launchMode = sa.getInt(
-                        R.styleable.AndroidManifestActivity_launchMode,
-                        ActivityInfo.LAUNCH_MULTIPLE);
-                result.documentLaunchMode = sa.getInt(
-                        R.styleable.AndroidManifestActivity_documentLaunchMode,
-                        ActivityInfo.DOCUMENT_LAUNCH_NONE);
-                result.maxRecents = sa.getInt(
-                        R.styleable.AndroidManifestActivity_maxRecents,
-                        ActivityTaskManager.getDefaultAppRecentsLimitStatic());
-                result.configChanges = PackageParser.getActivityConfigChanges(
-                        sa.getInt(R.styleable.AndroidManifestActivity_configChanges, 0),
-                        sa.getInt(R.styleable.AndroidManifestActivity_recreateOnConfigChanges, 0));
-                result.softInputMode = sa.getInt(
-                        R.styleable.AndroidManifestActivity_windowSoftInputMode, 0);
-
-                result.persistableMode = sa.getInteger(
-                        R.styleable.AndroidManifestActivity_persistableMode,
-                        ActivityInfo.PERSIST_ROOT_ONLY);
-
-                if (sa.getBoolean(R.styleable.AndroidManifestActivity_allowEmbedded, false)) {
-                    result.flags |= ActivityInfo.FLAG_ALLOW_EMBEDDED;
-                }
-
-                if (sa.getBoolean(R.styleable.AndroidManifestActivity_autoRemoveFromRecents,
-                        false)) {
-                    result.flags |= ActivityInfo.FLAG_AUTO_REMOVE_FROM_RECENTS;
-                }
-
-                if (sa.getBoolean(R.styleable.AndroidManifestActivity_relinquishTaskIdentity,
-                        false)) {
-                    result.flags |= ActivityInfo.FLAG_RELINQUISH_TASK_IDENTITY;
-                }
-
-                if (sa.getBoolean(R.styleable.AndroidManifestActivity_resumeWhilePausing, false)) {
-                    result.flags |= ActivityInfo.FLAG_RESUME_WHILE_PAUSING;
-                }
-
-                int screenOrientation = sa.getInt(
-                        R.styleable.AndroidManifestActivity_screenOrientation,
-                        SCREEN_ORIENTATION_UNSPECIFIED);
-                result.screenOrientation = screenOrientation;
-
-                int resizeMode = getActivityResizeMode(parsingPackage, sa, screenOrientation);
-                result.resizeMode = resizeMode;
-
-                if (sa.getBoolean(R.styleable.AndroidManifestActivity_supportsPictureInPicture,
-                        false)) {
-                    result.flags |= FLAG_SUPPORTS_PICTURE_IN_PICTURE;
-                }
-
-                if (sa.getBoolean(R.styleable.AndroidManifestActivity_alwaysFocusable, false)) {
-                    result.flags |= FLAG_ALWAYS_FOCUSABLE;
-                }
-
-                if (sa.hasValue(R.styleable.AndroidManifestActivity_maxAspectRatio)
-                        && sa.getType(R.styleable.AndroidManifestActivity_maxAspectRatio)
-                        == TypedValue.TYPE_FLOAT) {
-                    result.setMaxAspectRatio(resizeMode,
-                            sa.getFloat(R.styleable.AndroidManifestActivity_maxAspectRatio,
-                                    0 /*default*/));
-                }
-
-                if (sa.hasValue(R.styleable.AndroidManifestActivity_minAspectRatio)
-                        && sa.getType(R.styleable.AndroidManifestActivity_minAspectRatio)
-                        == TypedValue.TYPE_FLOAT) {
-                    result.setMinAspectRatio(resizeMode,
-                            sa.getFloat(R.styleable.AndroidManifestActivity_minAspectRatio,
-                                    0 /*default*/));
-                }
-
-                result.lockTaskLaunchMode =
-                        sa.getInt(R.styleable.AndroidManifestActivity_lockTaskMode, 0);
-
-                directBootAware = sa.getBoolean(
-                        R.styleable.AndroidManifestActivity_directBootAware,
-                        false);
-
-                result.requestedVrComponent =
-                        sa.getString(R.styleable.AndroidManifestActivity_enableVrMode);
-
-                result.rotationAnimation =
-                        sa.getInt(R.styleable.AndroidManifestActivity_rotationAnimation,
-                                ROTATION_ANIMATION_UNSPECIFIED);
-
-                result.colorMode = sa.getInt(R.styleable.AndroidManifestActivity_colorMode,
-                        ActivityInfo.COLOR_MODE_DEFAULT);
-
-                result.preferMinimalPostProcessing = sa.getBoolean(
-                        R.styleable.AndroidManifestActivity_preferMinimalPostProcessing,
-                        ActivityInfo.MINIMAL_POST_PROCESSING_DEFAULT);
-
-                if (sa.getBoolean(R.styleable.AndroidManifestActivity_showWhenLocked, false)) {
-                    result.flags |= ActivityInfo.FLAG_SHOW_WHEN_LOCKED;
-                }
-
-                if (sa.getBoolean(R.styleable.AndroidManifestActivity_turnScreenOn, false)) {
-                    result.flags |= ActivityInfo.FLAG_TURN_SCREEN_ON;
-                }
-
-                if (sa.getBoolean(R.styleable.AndroidManifestActivity_inheritShowWhenLocked,
-                        false)) {
-                    result.privateFlags |= ActivityInfo.FLAG_INHERIT_SHOW_WHEN_LOCKED;
-                }
-            } else {
-                result.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
-                result.configChanges = 0;
-
-                if (sa.getBoolean(R.styleable.AndroidManifestActivity_singleUser, false)) {
-                    result.flags |= ActivityInfo.FLAG_SINGLE_USER;
-                }
-                directBootAware = sa.getBoolean(
-                        R.styleable.AndroidManifestActivity_directBootAware,
-                        false);
-            }
-
-            result.directBootAware = directBootAware;
-
-            if (directBootAware) {
-                parsingPackage.setPartiallyDirectBootAware(true);
-            }
-
-            // can't make this final; we may set it later via meta-data
-            visibleToEphemeral = sa.getBoolean(
-                    R.styleable.AndroidManifestActivity_visibleToInstantApps, false);
-            if (visibleToEphemeral) {
-                result.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP;
-                parsingPackage.setVisibleToInstantApps(true);
-            }
-        } finally {
-            if (sa != null) {
-                sa.recycle();
-            }
-        }
-
-
-        if (receiver && (parsingPackage.getPrivateFlags()
-                & ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0) {
-            // A heavy-weight application can not have receives in its main process
-            if (result.getProcessName().equals(packageName)) {
-                outError[0] = "Heavy-weight applications can not have receivers in main process";
-                return null;
-            }
-        }
-
-        if (outError[0] != null) {
-            return null;
-        }
-
-        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;
-            }
-
-            if (parser.getName().equals("intent-filter")) {
-                ParsedActivityIntentInfo intentInfo = new ParsedActivityIntentInfo(packageName,
-                        result.className);
-                if (!parseIntentInfo(intentInfo, parsingPackage, res, parser,
-                        true /*allowGlobs*/,
-                        true /*allowAutoVerify*/, outError)) {
-                    return null;
-                }
-                if (intentInfo.countActions() == 0) {
-                    Slog.w(TAG, "No actions in intent filter at "
-                            + parsingPackage.getBaseCodePath() + " "
-                            + parser.getPositionDescription());
-                } else {
-                    result.order = Math.max(intentInfo.getOrder(), result.order);
-                    result.addIntent(intentInfo);
-                }
-                // adjust activity flags when we implicitly expose it via a browsable filter
-                final int visibility = visibleToEphemeral
-                        ? IntentFilter.VISIBILITY_EXPLICIT
-                        : !receiver && isImplicitlyExposedIntent(intentInfo)
-                                ? IntentFilter.VISIBILITY_IMPLICIT
-                                : IntentFilter.VISIBILITY_NONE;
-                intentInfo.setVisibilityToInstantApp(visibility);
-                if (intentInfo.isVisibleToInstantApp()) {
-                    result.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP;
-                }
-                if (intentInfo.isImplicitlyVisibleToInstantApp()) {
-                    result.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP;
-                }
-                if (PackageParser.LOG_UNSAFE_BROADCASTS && receiver
-                        && (targetSdkVersion >= Build.VERSION_CODES.O)) {
-                    for (int i = 0; i < intentInfo.countActions(); i++) {
-                        final String action = intentInfo.getAction(i);
-                        if (action == null || !action.startsWith("android.")) continue;
-                        if (!PackageParser.SAFE_BROADCASTS.contains(action)) {
-                            Slog.w(TAG, "Broadcast " + action + " may never be delivered to "
-                                    + packageName + " as requested at: "
-                                    + parser.getPositionDescription());
-                        }
-                    }
-                }
-            } else if (!receiver && parser.getName().equals("preferred")) {
-                ParsedActivityIntentInfo intentInfo = new ParsedActivityIntentInfo(packageName,
-                        result.className);
-                if (!parseIntentInfo(intentInfo, parsingPackage, res, parser,
-                        false /*allowGlobs*/,
-                        false /*allowAutoVerify*/, outError)) {
-                    return null;
-                }
-                // adjust activity flags when we implicitly expose it via a browsable filter
-                final int visibility = visibleToEphemeral
-                        ? IntentFilter.VISIBILITY_EXPLICIT
-                        : !receiver && isImplicitlyExposedIntent(intentInfo)
-                                ? IntentFilter.VISIBILITY_IMPLICIT
-                                : IntentFilter.VISIBILITY_NONE;
-                intentInfo.setVisibilityToInstantApp(visibility);
-                if (intentInfo.isVisibleToInstantApp()) {
-                    result.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP;
-                }
-                if (intentInfo.isImplicitlyVisibleToInstantApp()) {
-                    result.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP;
-                }
-
-                if (intentInfo.countActions() == 0) {
-                    Slog.w(TAG, "No actions in preferred at "
-                            + parsingPackage.getBaseCodePath() + " "
-                            + parser.getPositionDescription());
-                } else {
-                    parsingPackage.addPreferredActivityFilter(intentInfo);
-                }
-            } else if (parser.getName().equals("meta-data")) {
-                if ((result.metaData = ApkParseUtils.parseMetaData(parsingPackage, res, parser,
-                        result.metaData,
-                        outError)) == null) {
-                    return null;
-                }
-            } else if (!receiver && parser.getName().equals("layout")) {
-                result.windowLayout = parseLayout(res, parser);
-            } else {
-                if (!PackageParser.RIGID_PARSER) {
-                    Slog.w(TAG, "Problem in package " + parsingPackage.getBaseCodePath() + ":");
-                    if (receiver) {
-                        Slog.w(TAG, "Unknown element under <receiver>: " + parser.getName()
-                                + " at " + parsingPackage.getBaseCodePath() + " "
-                                + parser.getPositionDescription());
-                    } else {
-                        Slog.w(TAG, "Unknown element under <activity>: " + parser.getName()
-                                + " at " + parsingPackage.getBaseCodePath() + " "
-                                + parser.getPositionDescription());
-                    }
-                    XmlUtils.skipCurrentTag(parser);
-                    continue;
-                } else {
-                    if (receiver) {
-                        outError[0] = "Bad element under <receiver>: " + parser.getName();
-                    } else {
-                        outError[0] = "Bad element under <activity>: " + parser.getName();
-                    }
-                    return null;
-                }
-            }
-        }
-
-        if (!setExported) {
-            result.exported = result.intents.size() > 0;
-        }
-
-        return result;
-    }
-
-    public static boolean isImplicitlyExposedIntent(ParsedIntentInfo intentInfo) {
-        return intentInfo.hasCategory(Intent.CATEGORY_BROWSABLE)
-                || intentInfo.hasAction(Intent.ACTION_SEND)
-                || intentInfo.hasAction(Intent.ACTION_SENDTO)
-                || intentInfo.hasAction(Intent.ACTION_SEND_MULTIPLE);
-    }
-
-    public static int getActivityResizeMode(
-            ParsingPackage parsingPackage,
-            TypedArray sa,
-            int screenOrientation
-    ) {
-        int privateFlags = parsingPackage.getPrivateFlags();
-        final boolean appExplicitDefault = (privateFlags
-                & (ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE
-                | ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE)) != 0;
-
-        if (sa.hasValue(R.styleable.AndroidManifestActivity_resizeableActivity)
-                || appExplicitDefault) {
-            // Activity or app explicitly set if it is resizeable or not;
-            final boolean appResizeable = (privateFlags
-                    & ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE) != 0;
-            if (sa.getBoolean(R.styleable.AndroidManifestActivity_resizeableActivity,
-                    appResizeable)) {
-                return ActivityInfo.RESIZE_MODE_RESIZEABLE;
-            } else {
-                return ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
-            }
-        }
-
-        if ((privateFlags
-                & ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION)
-                != 0) {
-            // The activity or app didn't explicitly set the resizing option, however we want to
-            // make it resize due to the sdk version it is targeting.
-            return ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
-        }
-
-        // resize preference isn't set and target sdk version doesn't support resizing apps by
-        // default. For the app to be resizeable if it isn't fixed orientation or immersive.
-        if (ActivityInfo.isFixedOrientationPortrait(screenOrientation)) {
-            return ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PORTRAIT_ONLY;
-        } else if (ActivityInfo.isFixedOrientationLandscape(screenOrientation)) {
-            return ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_LANDSCAPE_ONLY;
-        } else if (screenOrientation == ActivityInfo.SCREEN_ORIENTATION_LOCKED) {
-            return ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PRESERVE_ORIENTATION;
-        } else {
-            return ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE;
-        }
-    }
-
-    public static ParsedService parseService(
-            String[] separateProcesses,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser, int flags, String[] outError
-    ) throws XmlPullParserException, IOException {
-        TypedArray sa = null;
-        boolean visibleToEphemeral;
-        boolean setExported;
-
-        String packageName = parsingPackage.getPackageName();
-        String packageProcessName = parsingPackage.getProcessName();
-        ParsedService result = new ParsedService();
-
-        try {
-            sa = res.obtainAttributes(parser,
-                    R.styleable.AndroidManifestService);
-
-            String name = sa.getNonConfigurationString(R.styleable.AndroidManifestService_name, 0);
-            if (name == null) {
-                outError[0] = "<service> does not specify android:name";
-                return null;
-            } else {
-                String className = ApkParseUtils.buildClassName(packageName, name);
-                if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(className)) {
-                    outError[0] = "<service> invalid android:name";
-                    return null;
-                } else if (className == null) {
-                    outError[0] = "Empty class name in package " + packageName;
-                    return null;
-                }
-
-                result.className = className;
-            }
-
-            int roundIconVal = PackageParser.sUseRoundIcon ? sa.getResourceId(
-                    R.styleable.AndroidManifestService_roundIcon, 0) : 0;
-            if (roundIconVal != 0) {
-                result.icon = roundIconVal;
-                result.nonLocalizedLabel = null;
-            } else {
-                int iconVal = sa.getResourceId(R.styleable.AndroidManifestService_icon, 0);
-                if (iconVal != 0) {
-                    result.icon = iconVal;
-                    result.nonLocalizedLabel = null;
-                }
-            }
-
-            int logoVal = sa.getResourceId(R.styleable.AndroidManifestService_logo, 0);
-            if (logoVal != 0) {
-                result.logo = logoVal;
-            }
-
-            int bannerVal = sa.getResourceId(R.styleable.AndroidManifestService_banner, 0);
-            if (bannerVal != 0) {
-                result.banner = bannerVal;
-            }
-
-            TypedValue v = sa.peekValue(R.styleable.AndroidManifestService_label);
-            if (v != null && (result.labelRes = v.resourceId) == 0) {
-                result.nonLocalizedLabel = v.coerceToString();
-            }
-
-            result.setPackageNameInternal(packageName);
-
-            CharSequence pname;
-            if (parsingPackage.getTargetSdkVersion() >= Build.VERSION_CODES.FROYO) {
-                pname = sa.getNonConfigurationString(R.styleable.AndroidManifestService_process,
-                        Configuration.NATIVE_CONFIG_VERSION);
-            } else {
-                // Some older apps have been seen to use a resource reference
-                // here that on older builds was ignored (with a warning).  We
-                // need to continue to do this for them so they don't break.
-                pname = sa.getNonResourceString(R.styleable.AndroidManifestService_process);
-            }
-
-            result.setProcessName(packageProcessName, PackageParser.buildProcessName(packageName,
-                    packageProcessName, pname,
-                    flags, separateProcesses, outError));
-
-            result.descriptionRes = sa.getResourceId(
-                    R.styleable.AndroidManifestService_description, 0);
-
-            result.enabled = sa.getBoolean(R.styleable.AndroidManifestService_enabled, true);
-
-            setExported = sa.hasValue(
-                    R.styleable.AndroidManifestService_exported);
-            if (setExported) {
-                result.exported = sa.getBoolean(
-                        R.styleable.AndroidManifestService_exported, false);
-            }
-
-            String str = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestService_permission, 0);
-            if (str == null) {
-                result.setPermission(parsingPackage.getPermission());
-            } else {
-                result.setPermission(str);
-            }
-
-            result.setSplitName(
-                    sa.getNonConfigurationString(R.styleable.AndroidManifestService_splitName, 0));
-
-            result.foregroundServiceType = sa.getInt(
-                    R.styleable.AndroidManifestService_foregroundServiceType,
-                    ServiceInfo.FOREGROUND_SERVICE_TYPE_NONE);
-
-            result.flags = 0;
-            if (sa.getBoolean(
-                    R.styleable.AndroidManifestService_stopWithTask,
-                    false)) {
-                result.flags |= ServiceInfo.FLAG_STOP_WITH_TASK;
-            }
-            if (sa.getBoolean(
-                    R.styleable.AndroidManifestService_isolatedProcess,
-                    false)) {
-                result.flags |= ServiceInfo.FLAG_ISOLATED_PROCESS;
-            }
-            if (sa.getBoolean(
-                    R.styleable.AndroidManifestService_externalService,
-                    false)) {
-                result.flags |= ServiceInfo.FLAG_EXTERNAL_SERVICE;
-            }
-            if (sa.getBoolean(
-                    R.styleable.AndroidManifestService_useAppZygote,
-                    false)) {
-                result.flags |= ServiceInfo.FLAG_USE_APP_ZYGOTE;
-            }
-            if (sa.getBoolean(
-                    R.styleable.AndroidManifestService_singleUser,
-                    false)) {
-                result.flags |= ServiceInfo.FLAG_SINGLE_USER;
-            }
-
-            result.directBootAware = sa.getBoolean(
-                    R.styleable.AndroidManifestService_directBootAware,
-                    false);
-            if (result.directBootAware) {
-                parsingPackage.setPartiallyDirectBootAware(true);
-            }
-
-            visibleToEphemeral = sa.getBoolean(
-                    R.styleable.AndroidManifestService_visibleToInstantApps, false);
-            if (visibleToEphemeral) {
-                result.flags |= ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP;
-                parsingPackage.setVisibleToInstantApps(true);
-            }
-        } finally {
-            if (sa != null) {
-                sa.recycle();
-            }
-        }
-
-        if (parsingPackage.cantSaveState()) {
-            // A heavy-weight application can not have services in its main process
-            // We can do direct compare because we intern all strings.
-            if (Objects.equals(result.getProcessName(), parsingPackage.getPackageName())) {
-                outError[0] = "Heavy-weight applications can not have services in main process";
-                return null;
-            }
-        }
-
-        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;
-            }
-
-            if (parser.getName().equals("intent-filter")) {
-                ParsedServiceIntentInfo intent = new ParsedServiceIntentInfo(packageName,
-                        result.className);
-                if (!parseIntentInfo(intent, parsingPackage, res, parser, true /*allowGlobs*/,
-                        false /*allowAutoVerify*/,
-                        outError)) {
-                    return null;
-                }
-                if (visibleToEphemeral) {
-                    intent.setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT);
-                    result.flags |= ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP;
-                }
-                result.order = Math.max(intent.getOrder(), result.order);
-                result.intents.add(intent);
-            } else if (parser.getName().equals("meta-data")) {
-                if ((result.metaData = ApkParseUtils.parseMetaData(parsingPackage, res, parser,
-                        result.metaData,
-                        outError)) == null) {
-                    return null;
-                }
-            } else {
-                if (!PackageParser.RIGID_PARSER) {
-                    Slog.w(TAG, "Unknown element under <service>: "
-                            + parser.getName() + " at " + parsingPackage.getBaseCodePath() + " "
-                            + parser.getPositionDescription());
-                    XmlUtils.skipCurrentTag(parser);
-                    continue;
-                } else {
-                    outError[0] = "Bad element under <service>: " + parser.getName();
-                    return null;
-                }
-            }
-        }
-
-        if (!setExported) {
-            result.exported = result.intents.size() > 0;
-        }
-
-        return result;
-    }
-
-    public static ParsedProvider parseProvider(
-            String[] separateProcesses,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser, int flags, String[] outError)
-            throws XmlPullParserException, IOException {
-        TypedArray sa = null;
-        String cpname;
-        boolean visibleToEphemeral;
-
-        int targetSdkVersion = parsingPackage.getTargetSdkVersion();
-        String packageName = parsingPackage.getPackageName();
-        String packageProcessName = parsingPackage.getProcessName();
-        ParsedProvider result = new ParsedProvider();
-
-        try {
-            sa = res.obtainAttributes(parser,
-                    R.styleable.AndroidManifestProvider);
-
-            String name = sa.getNonConfigurationString(R.styleable.AndroidManifestProvider_name, 0);
-            if (name == null) {
-                outError[0] = "<provider> does not specify android:name";
-                return null;
-            } else {
-                String className = ApkParseUtils.buildClassName(packageName, name);
-                if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(className)) {
-                    outError[0] = "<provider> invalid android:name";
-                    return null;
-                } else if (className == null) {
-                    outError[0] = "Empty class name in package " + packageName;
-                    return null;
-                }
-
-                result.className = className;
-            }
-
-            int roundIconVal = PackageParser.sUseRoundIcon ? sa.getResourceId(
-                    R.styleable.AndroidManifestProvider_roundIcon, 0) : 0;
-            if (roundIconVal != 0) {
-                result.icon = roundIconVal;
-                result.nonLocalizedLabel = null;
-            } else {
-                int iconVal = sa.getResourceId(R.styleable.AndroidManifestProvider_icon, 0);
-                if (iconVal != 0) {
-                    result.icon = iconVal;
-                    result.nonLocalizedLabel = null;
-                }
-            }
-
-            int logoVal = sa.getResourceId(R.styleable.AndroidManifestProvider_logo, 0);
-            if (logoVal != 0) {
-                result.logo = logoVal;
-            }
-
-            int bannerVal = sa.getResourceId(R.styleable.AndroidManifestProvider_banner, 0);
-            if (bannerVal != 0) {
-                result.banner = bannerVal;
-            }
-
-            TypedValue v = sa.peekValue(R.styleable.AndroidManifestProvider_label);
-            if (v != null && (result.labelRes = v.resourceId) == 0) {
-                result.nonLocalizedLabel = v.coerceToString();
-            }
-
-            result.setPackageNameInternal(packageName);
-
-            CharSequence pname;
-            if (parsingPackage.getTargetSdkVersion() >= Build.VERSION_CODES.FROYO) {
-                pname = sa.getNonConfigurationString(R.styleable.AndroidManifestProvider_process,
-                        Configuration.NATIVE_CONFIG_VERSION);
-            } else {
-                // Some older apps have been seen to use a resource reference
-                // here that on older builds was ignored (with a warning).  We
-                // need to continue to do this for them so they don't break.
-                pname = sa.getNonResourceString(R.styleable.AndroidManifestProvider_process);
-            }
-
-            result.setProcessName(packageProcessName, PackageParser.buildProcessName(packageName,
-                    packageProcessName, pname,
-                    flags, separateProcesses, outError));
-
-            result.descriptionRes = sa.getResourceId(
-                    R.styleable.AndroidManifestProvider_description, 0);
-
-            result.enabled = sa.getBoolean(R.styleable.AndroidManifestProvider_enabled, true);
-
-            boolean providerExportedDefault = false;
-
-            if (targetSdkVersion < Build.VERSION_CODES.JELLY_BEAN_MR1) {
-                // For compatibility, applications targeting API level 16 or lower
-                // should have their content providers exported by default, unless they
-                // specify otherwise.
-                providerExportedDefault = true;
-            }
-
-            result.exported = sa.getBoolean(
-                    R.styleable.AndroidManifestProvider_exported,
-                    providerExportedDefault);
-
-            cpname = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestProvider_authorities, 0);
-
-            result.isSyncable = sa.getBoolean(
-                    R.styleable.AndroidManifestProvider_syncable,
-                    false);
-
-            String permission = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestProvider_permission, 0);
-            String str = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestProvider_readPermission, 0);
-            if (str == null) {
-                str = permission;
-            }
-            if (str == null) {
-                result.setReadPermission(parsingPackage.getPermission());
-            } else {
-                result.setReadPermission(str);
-            }
-            str = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestProvider_writePermission, 0);
-            if (str == null) {
-                str = permission;
-            }
-            if (str == null) {
-                result.setWritePermission(parsingPackage.getPermission());
-            } else {
-                result.setWritePermission(str);
-            }
-
-            result.grantUriPermissions = sa.getBoolean(
-                    R.styleable.AndroidManifestProvider_grantUriPermissions,
-                    false);
-
-            result.forceUriPermissions = sa.getBoolean(
-                    R.styleable.AndroidManifestProvider_forceUriPermissions,
-                    false);
-
-            result.multiProcess = sa.getBoolean(
-                    R.styleable.AndroidManifestProvider_multiprocess,
-                    false);
-
-            result.initOrder = sa.getInt(
-                    R.styleable.AndroidManifestProvider_initOrder,
-                    0);
-
-            result.setSplitName(
-                    sa.getNonConfigurationString(R.styleable.AndroidManifestProvider_splitName, 0));
-
-            result.flags = 0;
-
-            if (sa.getBoolean(
-                    R.styleable.AndroidManifestProvider_singleUser,
-                    false)) {
-                result.flags |= ProviderInfo.FLAG_SINGLE_USER;
-            }
-
-            result.directBootAware = sa.getBoolean(
-                    R.styleable.AndroidManifestProvider_directBootAware,
-                    false);
-            if (result.directBootAware) {
-                parsingPackage.setPartiallyDirectBootAware(true);
-            }
-
-            visibleToEphemeral =
-                    sa.getBoolean(R.styleable.AndroidManifestProvider_visibleToInstantApps, false);
-            if (visibleToEphemeral) {
-                result.flags |= ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP;
-                parsingPackage.setVisibleToInstantApps(true);
-            }
-        } finally {
-            if (sa != null) {
-                sa.recycle();
-            }
-        }
-
-        if ((parsingPackage.getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE)
-                != 0) {
-            // A heavy-weight application can not have providers in its main process
-            if (result.getProcessName().equals(packageName)) {
-                outError[0] = "Heavy-weight applications can not have providers in main process";
-                return null;
-            }
-        }
-
-        if (cpname == null) {
-            outError[0] = "<provider> does not include authorities attribute";
-            return null;
-        }
-        if (cpname.length() <= 0) {
-            outError[0] = "<provider> has empty authorities attribute";
-            return null;
-        }
-        result.setAuthority(cpname);
-
-        if (!parseProviderTags(parsingPackage, res, parser, visibleToEphemeral, result, outError)) {
-            return null;
-        }
-
-        return result;
-    }
-
-    public static ParsedQueriesIntentInfo parsedParsedQueriesIntentInfo(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser,
-            String[] outError
-    ) throws IOException, XmlPullParserException {
-        ParsedQueriesIntentInfo intentInfo = new ParsedQueriesIntentInfo(
-                parsingPackage.getPackageName(),
-                null
-        );
-        if (!parseIntentInfo(
-                intentInfo,
-                parsingPackage,
-                res,
-                parser,
-                true /*allowGlobs*/,
-                true /*allowAutoVerify*/,
-                outError
-        )) {
-            return null;
-        }
-        return intentInfo;
-    }
-
-    private static boolean parseProviderTags(
-            ParsingPackage parsingPackage,
-            Resources res, XmlResourceParser parser,
-            boolean visibleToEphemeral, ParsedProvider outInfo, String[] outError)
-            throws XmlPullParserException, IOException {
-        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;
-            }
-
-            if (parser.getName().equals("intent-filter")) {
-                ParsedProviderIntentInfo intent = new ParsedProviderIntentInfo(
-                        parsingPackage.getPackageName(), outInfo.className);
-                if (!parseIntentInfo(intent, parsingPackage, res, parser, true /*allowGlobs*/,
-                        false /*allowAutoVerify*/,
-                        outError)) {
-                    return false;
-                }
-                if (visibleToEphemeral) {
-                    intent.setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT);
-                    outInfo.flags |= ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP;
-                }
-                outInfo.order = Math.max(intent.getOrder(), outInfo.order);
-                outInfo.intents.add(intent);
-
-            } else if (parser.getName().equals("meta-data")) {
-                Bundle metaData = ApkParseUtils.parseMetaData(parsingPackage, res, parser,
-                        outInfo.metaData, outError);
-                if (metaData == null) {
-                    return false;
-                } else {
-                    outInfo.metaData = metaData;
-                }
-
-            } else if (parser.getName().equals("grant-uri-permission")) {
-                TypedArray sa = res.obtainAttributes(parser,
-                        R.styleable.AndroidManifestGrantUriPermission);
-
-                PatternMatcher pa = null;
-
-                String str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestGrantUriPermission_path, 0);
-                if (str != null) {
-                    pa = new PatternMatcher(str, PatternMatcher.PATTERN_LITERAL);
-                }
-
-                str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestGrantUriPermission_pathPrefix, 0);
-                if (str != null) {
-                    pa = new PatternMatcher(str, PatternMatcher.PATTERN_PREFIX);
-                }
-
-                str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestGrantUriPermission_pathPattern, 0);
-                if (str != null) {
-                    pa = new PatternMatcher(str, PatternMatcher.PATTERN_SIMPLE_GLOB);
-                }
-
-                sa.recycle();
-
-                if (pa != null) {
-                    if (outInfo.uriPermissionPatterns == null) {
-                        outInfo.uriPermissionPatterns = new PatternMatcher[1];
-                        outInfo.uriPermissionPatterns[0] = pa;
-                    } else {
-                        final int N = outInfo.uriPermissionPatterns.length;
-                        PatternMatcher[] newp = new PatternMatcher[N + 1];
-                        System.arraycopy(outInfo.uriPermissionPatterns, 0, newp, 0, N);
-                        newp[N] = pa;
-                        outInfo.uriPermissionPatterns = newp;
-                    }
-                    outInfo.grantUriPermissions = true;
-                } else {
-                    if (!PackageParser.RIGID_PARSER) {
-                        Slog.w(TAG, "Unknown element under <path-permission>: "
-                                + parser.getName() + " at " + parsingPackage.getBaseCodePath()
-                                + " "
-                                + parser.getPositionDescription());
-                        XmlUtils.skipCurrentTag(parser);
-                        continue;
-                    } else {
-                        outError[0] = "No path, pathPrefix, or pathPattern for <path-permission>";
-                        return false;
-                    }
-                }
-                XmlUtils.skipCurrentTag(parser);
-
-            } else if (parser.getName().equals("path-permission")) {
-                TypedArray sa = res.obtainAttributes(parser,
-                        R.styleable.AndroidManifestPathPermission);
-
-                PathPermission pa = null;
-
-                String permission = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestPathPermission_permission, 0);
-                String readPermission = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestPathPermission_readPermission, 0);
-                if (readPermission == null) {
-                    readPermission = permission;
-                }
-                String writePermission = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestPathPermission_writePermission, 0);
-                if (writePermission == null) {
-                    writePermission = permission;
-                }
-
-                boolean havePerm = false;
-                if (readPermission != null) {
-                    readPermission = readPermission.intern();
-                    havePerm = true;
-                }
-                if (writePermission != null) {
-                    writePermission = writePermission.intern();
-                    havePerm = true;
-                }
-
-                if (!havePerm) {
-                    if (!PackageParser.RIGID_PARSER) {
-                        Slog.w(TAG, "No readPermission or writePermssion for <path-permission>: "
-                                + parser.getName() + " at " + parsingPackage.getBaseCodePath()
-                                + " "
-                                + parser.getPositionDescription());
-                        XmlUtils.skipCurrentTag(parser);
-                        continue;
-                    } else {
-                        outError[0] = "No readPermission or writePermssion for <path-permission>";
-                        return false;
-                    }
-                }
-
-                String path = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestPathPermission_path, 0);
-                if (path != null) {
-                    pa = new PathPermission(path,
-                            PatternMatcher.PATTERN_LITERAL, readPermission, writePermission);
-                }
-
-                path = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestPathPermission_pathPrefix, 0);
-                if (path != null) {
-                    pa = new PathPermission(path,
-                            PatternMatcher.PATTERN_PREFIX, readPermission, writePermission);
-                }
-
-                path = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestPathPermission_pathPattern, 0);
-                if (path != null) {
-                    pa = new PathPermission(path,
-                            PatternMatcher.PATTERN_SIMPLE_GLOB, readPermission, writePermission);
-                }
-
-                path = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestPathPermission_pathAdvancedPattern, 0);
-                if (path != null) {
-                    pa = new PathPermission(path,
-                            PatternMatcher.PATTERN_ADVANCED_GLOB, readPermission, writePermission);
-                }
-
-                sa.recycle();
-
-                if (pa != null) {
-                    if (outInfo.pathPermissions == null) {
-                        outInfo.pathPermissions = new PathPermission[1];
-                        outInfo.pathPermissions[0] = pa;
-                    } else {
-                        final int N = outInfo.pathPermissions.length;
-                        PathPermission[] newp = new PathPermission[N + 1];
-                        System.arraycopy(outInfo.pathPermissions, 0, newp, 0, N);
-                        newp[N] = pa;
-                        outInfo.pathPermissions = newp;
-                    }
-                } else {
-                    if (!PackageParser.RIGID_PARSER) {
-                        Slog.w(TAG, "No path, pathPrefix, or pathPattern for <path-permission>: "
-                                + parser.getName() + " at " + parsingPackage.getBaseCodePath()
-                                + " "
-                                + parser.getPositionDescription());
-                        XmlUtils.skipCurrentTag(parser);
-                        continue;
-                    }
-                    outError[0] = "No path, pathPrefix, or pathPattern for <path-permission>";
-                    return false;
-                }
-                XmlUtils.skipCurrentTag(parser);
-
-            } else {
-                if (!PackageParser.RIGID_PARSER) {
-                    Slog.w(TAG, "Unknown element under <provider>: "
-                            + parser.getName() + " at " + parsingPackage.getBaseCodePath() + " "
-                            + parser.getPositionDescription());
-                    XmlUtils.skipCurrentTag(parser);
-                    continue;
-                } else {
-                    outError[0] = "Bad element under <provider>: " + parser.getName();
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-    public static ParsedActivity parseActivityAlias(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser,
-            String[] outError)
-            throws XmlPullParserException, IOException {
-        TypedArray sa = res.obtainAttributes(parser,
-                R.styleable.AndroidManifestActivityAlias);
-
-        String targetActivity = sa.getNonConfigurationString(
-                R.styleable.AndroidManifestActivityAlias_targetActivity,
-                Configuration.NATIVE_CONFIG_VERSION);
-        if (targetActivity == null) {
-            outError[0] = "<activity-alias> does not specify android:targetActivity";
-            sa.recycle();
-            return null;
-        }
-
-        String packageName = parsingPackage.getPackageName();
-        targetActivity = ApkParseUtils.buildClassName(packageName, targetActivity);
-        if (targetActivity == null) {
-            outError[0] = "Empty class name in package " + packageName;
-            sa.recycle();
-            return null;
-        }
-
-        ParsedActivity target = null;
-
-        List<ParsedActivity> activities = parsingPackage.getActivities();
-        final int NA = activities.size();
-        for (int i = 0; i < NA; i++) {
-            ParsedActivity t = activities.get(i);
-            if (targetActivity.equals(t.className)) {
-                target = t;
-                break;
-            }
-        }
-
-        if (target == null) {
-            outError[0] = "<activity-alias> target activity " + targetActivity
-                    + " not found in manifest with activities = " + parsingPackage.getActivities()
-                    + ", parsedActivities = " + activities;
-            sa.recycle();
-            return null;
-        }
-
-        ParsedActivity result = new ParsedActivity();
-        result.setPackageNameInternal(target.getPackageName());
-        result.targetActivity = targetActivity;
-        result.configChanges = target.configChanges;
-        result.flags = target.flags;
-        result.privateFlags = target.privateFlags;
-        result.icon = target.icon;
-        result.logo = target.logo;
-        result.banner = target.banner;
-        result.labelRes = target.labelRes;
-        result.nonLocalizedLabel = target.nonLocalizedLabel;
-        result.launchMode = target.launchMode;
-        result.lockTaskLaunchMode = target.lockTaskLaunchMode;
-        result.descriptionRes = target.descriptionRes;
-        result.screenOrientation = target.screenOrientation;
-        result.taskAffinity = target.taskAffinity;
-        result.theme = target.theme;
-        result.softInputMode = target.softInputMode;
-        result.uiOptions = target.uiOptions;
-        result.parentActivityName = target.parentActivityName;
-        result.maxRecents = target.maxRecents;
-        result.windowLayout = target.windowLayout;
-        result.resizeMode = target.resizeMode;
-        result.maxAspectRatio = target.maxAspectRatio;
-        result.hasMaxAspectRatio = target.hasMaxAspectRatio;
-        result.minAspectRatio = target.minAspectRatio;
-        result.hasMinAspectRatio = target.hasMinAspectRatio;
-        result.requestedVrComponent = target.requestedVrComponent;
-        result.directBootAware = target.directBootAware;
-
-        result.setProcessName(parsingPackage.getAppInfoProcessName(), target.getProcessName());
-
-        // Not all attributes from the target ParsedActivity are copied to the alias.
-        // Careful when adding an attribute and determine whether or not it should be copied.
-//        result.enabled = target.enabled;
-//        result.exported = target.exported;
-//        result.permission = target.permission;
-//        result.splitName = target.splitName;
-//        result.documentLaunchMode = target.documentLaunchMode;
-//        result.persistableMode = target.persistableMode;
-//        result.rotationAnimation = target.rotationAnimation;
-//        result.colorMode = target.colorMode;
-//        result.intents.addAll(target.intents);
-//        result.order = target.order;
-//        result.metaData = target.metaData;
-
-        String name = sa.getNonConfigurationString(R.styleable.AndroidManifestActivityAlias_name,
-                0);
-        if (name == null) {
-            outError[0] = "<activity-alias> does not specify android:name";
-            return null;
-        } else {
-            String className = ApkParseUtils.buildClassName(packageName, name);
-            if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(className)) {
-                outError[0] = "<activity-alias> invalid android:name";
-                return null;
-            } else if (className == null) {
-                outError[0] = "Empty class name in package " + packageName;
-                return null;
-            }
-
-            result.className = className;
-        }
-
-        int roundIconVal = PackageParser.sUseRoundIcon ? sa.getResourceId(
-                R.styleable.AndroidManifestActivityAlias_roundIcon, 0) : 0;
-        if (roundIconVal != 0) {
-            result.icon = roundIconVal;
-            result.nonLocalizedLabel = null;
-        } else {
-            int iconVal = sa.getResourceId(R.styleable.AndroidManifestActivityAlias_icon, 0);
-            if (iconVal != 0) {
-                result.icon = iconVal;
-                result.nonLocalizedLabel = null;
-            }
-        }
-
-        int logoVal = sa.getResourceId(R.styleable.AndroidManifestActivityAlias_logo, 0);
-        if (logoVal != 0) {
-            result.logo = logoVal;
-        }
-
-        int bannerVal = sa.getResourceId(R.styleable.AndroidManifestActivityAlias_banner, 0);
-        if (bannerVal != 0) {
-            result.banner = bannerVal;
-        }
-
-        TypedValue v = sa.peekValue(R.styleable.AndroidManifestActivityAlias_label);
-        if (v != null && (result.labelRes = v.resourceId) == 0) {
-            result.nonLocalizedLabel = v.coerceToString();
-        }
-
-        result.setPackageNameInternal(packageName);
-
-        result.descriptionRes = sa.getResourceId(
-                R.styleable.AndroidManifestActivityAlias_description, 0);
-
-        result.enabled = sa.getBoolean(R.styleable.AndroidManifestActivityAlias_enabled, true);
-
-        final boolean setExported = sa.hasValue(
-                R.styleable.AndroidManifestActivityAlias_exported);
-        if (setExported) {
-            result.exported = sa.getBoolean(
-                    R.styleable.AndroidManifestActivityAlias_exported, false);
-        }
-
-        String str;
-        str = sa.getNonConfigurationString(
-                R.styleable.AndroidManifestActivityAlias_permission, 0);
-        if (str != null) {
-            result.setPermission(str);
-        }
-
-        String parentName = sa.getNonConfigurationString(
-                R.styleable.AndroidManifestActivityAlias_parentActivityName,
-                Configuration.NATIVE_CONFIG_VERSION);
-        if (parentName != null) {
-            String parentClassName = ApkParseUtils.buildClassName(result.getPackageName(),
-                    parentName);
-            if (parentClassName == null) {
-                Log.e(TAG, "Activity alias " + result.className +
-                        " specified invalid parentActivityName " + parentName);
-                outError[0] = null;
-            } else {
-                result.parentActivityName = parentClassName;
-            }
-        }
-
-        // TODO add visibleToInstantApps attribute to activity alias
-        final boolean visibleToEphemeral =
-                ((result.flags & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0);
-
-        sa.recycle();
-
-        if (outError[0] != null) {
-            return null;
-        }
-
-        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("intent-filter")) {
-                ParsedActivityIntentInfo intent = new ParsedActivityIntentInfo(packageName,
-                        result.className);
-                if (!parseIntentInfo(intent, parsingPackage, res, parser, true /*allowGlobs*/,
-                        true /*allowAutoVerify*/, outError)) {
-                    return null;
-                }
-                if (intent.countActions() == 0) {
-                    Slog.w(TAG, "No actions in intent filter at "
-                            + parsingPackage.getBaseCodePath() + " "
-                            + parser.getPositionDescription());
-                } else {
-                    result.order = Math.max(intent.getOrder(), result.order);
-                    result.addIntent(intent);
-                }
-                // adjust activity flags when we implicitly expose it via a browsable filter
-                final int visibility = visibleToEphemeral
-                        ? IntentFilter.VISIBILITY_EXPLICIT
-                        : isImplicitlyExposedIntent(intent)
-                                ? IntentFilter.VISIBILITY_IMPLICIT
-                                : IntentFilter.VISIBILITY_NONE;
-                intent.setVisibilityToInstantApp(visibility);
-                if (intent.isVisibleToInstantApp()) {
-                    result.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP;
-                }
-                if (intent.isImplicitlyVisibleToInstantApp()) {
-                    result.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP;
-                }
-            } else if (tagName.equals("meta-data")) {
-                if ((result.metaData = ApkParseUtils.parseMetaData(parsingPackage, res, parser,
-                        result.metaData,
-                        outError)) == null) {
-                    return null;
-                }
-            } else {
-                if (!PackageParser.RIGID_PARSER) {
-                    Slog.w(TAG, "Unknown element under <activity-alias>: " + tagName
-                            + " at " + parsingPackage.getBaseCodePath() + " "
-                            + parser.getPositionDescription());
-                    XmlUtils.skipCurrentTag(parser);
-                    continue;
-                } else {
-                    outError[0] = "Bad element under <activity-alias>: " + tagName;
-                    return null;
-                }
-            }
-        }
-
-        if (!setExported) {
-            result.exported = result.intents.size() > 0;
-        }
-
-        return result;
-    }
-
-    public static ParsedFeature parseFeature(
-            Resources res,
-            XmlResourceParser parser,
-            String[] outError
-    ) throws IOException, XmlPullParserException {
-        String featureId;
-        int label;
-        List<String> inheritFrom = null;
-
-        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestFeature);
-        if (sa == null) {
-            outError[0] = "<feature> could not be parsed";
-            return null;
-        }
-
-        try {
-            featureId = sa.getNonConfigurationString(R.styleable.AndroidManifestFeature_featureId,
-                    0);
-            if (featureId == null) {
-                outError[0] = "<featureId> does not specify android:featureId";
-                return null;
-            }
-            if (featureId.length() > ParsedFeature.MAX_FEATURE_ID_LEN) {
-                outError[0] = "<featureId> is too long. Max length is "
-                        + ParsedFeature.MAX_FEATURE_ID_LEN;
-                return null;
-            }
-
-            label = sa.getResourceId(R.styleable.AndroidManifestFeature_label, 0);
-            if (label == Resources.ID_NULL) {
-                outError[0] = "<featureId> does not specify android:label";
-                return null;
-            }
-        } finally {
-            sa.recycle();
-        }
-
-        int type;
-        final int innerDepth = parser.getDepth();
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
-            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                continue;
-            }
-
-            String tagName = parser.getName();
-            if (tagName.equals("inherit-from")) {
-                sa = res.obtainAttributes(parser, R.styleable.AndroidManifestFeatureInheritFrom);
-                if (sa == null) {
-                    outError[0] = "<inherit-from> could not be parsed";
-                    return null;
-                }
-
-                try {
-                    String inheritFromId = sa.getNonConfigurationString(
-                            R.styleable.AndroidManifestFeatureInheritFrom_featureId,0);
-
-                    if (inheritFrom == null) {
-                        inheritFrom = new ArrayList<>();
-                    }
-                    inheritFrom.add(inheritFromId);
-                } finally {
-                    sa.recycle();
-                }
-            } else {
-                outError[0] = "Bad element under <feature>: " + tagName;
-                return null;
-            }
-        }
-
-        if (inheritFrom == null) {
-            inheritFrom = Collections.emptyList();
-        } else {
-            ((ArrayList) inheritFrom).trimToSize();
-        }
-
-        return new ParsedFeature(featureId, label, inheritFrom);
-    }
-
-    public static ParsedPermission parsePermission(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser,
-            String[] outError
-    ) throws IOException, XmlPullParserException {
-        TypedArray sa = null;
-        String packageName = parsingPackage.getPackageName();
-        ParsedPermission result = new ParsedPermission();
-
-        try {
-            sa = res.obtainAttributes(parser, R.styleable.AndroidManifestPermission);
-
-            String name = sa.getNonConfigurationString(R.styleable.AndroidManifestPermission_name,
-                    0);
-            if (name == null) {
-                outError[0] = "<permission> does not specify android:name";
-                return null;
-            } else {
-                String className = ApkParseUtils.buildClassName(packageName, name);
-                if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(className)) {
-                    outError[0] = "<permission> invalid android:name";
-                    return null;
-                } else if (className == null) {
-                    outError[0] = "Empty class name in package " + packageName;
-                    return null;
-                }
-
-                result.className = className;
-            }
-
-            int roundIconVal = PackageParser.sUseRoundIcon ? sa.getResourceId(
-                    R.styleable.AndroidManifestPermission_roundIcon, 0) : 0;
-            if (roundIconVal != 0) {
-                result.icon = roundIconVal;
-                result.nonLocalizedLabel = null;
-            } else {
-                int iconVal = sa.getResourceId(R.styleable.AndroidManifestPermission_icon, 0);
-                if (iconVal != 0) {
-                    result.icon = iconVal;
-                    result.nonLocalizedLabel = null;
-                }
-            }
-
-            int logoVal = sa.getResourceId(R.styleable.AndroidManifestPermission_logo, 0);
-            if (logoVal != 0) {
-                result.logo = logoVal;
-            }
-
-            int bannerVal = sa.getResourceId(R.styleable.AndroidManifestPermission_banner, 0);
-            if (bannerVal != 0) {
-                result.banner = bannerVal;
-            }
-
-            TypedValue v = sa.peekValue(R.styleable.AndroidManifestPermission_label);
-            if (v != null && (result.labelRes = v.resourceId) == 0) {
-                result.nonLocalizedLabel = v.coerceToString();
-            }
-
-            result.setPackageNameInternal(packageName);
-
-            result.descriptionRes = sa.getResourceId(
-                    R.styleable.AndroidManifestPermission_description, 0);
-
-            if (sa.hasValue(
-                    R.styleable.AndroidManifestPermission_backgroundPermission)) {
-                if ("android".equals(packageName)) {
-                    result.backgroundPermission = sa.getNonResourceString(
-                            R.styleable
-                                    .AndroidManifestPermission_backgroundPermission);
-                } else {
-                    Slog.w(TAG, packageName + " defines a background permission. Only the "
-                            + "'android' package can do that.");
-                }
-            }
-
-            // Note: don't allow this value to be a reference to a resource
-            // that may change.
-            result.setGroup(sa.getNonResourceString(
-                    R.styleable.AndroidManifestPermission_permissionGroup));
-
-            result.requestRes = sa.getResourceId(
-                    R.styleable.AndroidManifestPermission_request, 0);
-
-            result.protectionLevel = sa.getInt(
-                    R.styleable.AndroidManifestPermission_protectionLevel,
-                    PermissionInfo.PROTECTION_NORMAL);
-
-            result.flags = sa.getInt(
-                    R.styleable.AndroidManifestPermission_permissionFlags, 0);
-
-            // For now only platform runtime permissions can be restricted
-            if (!result.isRuntime() || !"android".equals(result.getPackageName())) {
-                result.flags &= ~PermissionInfo.FLAG_HARD_RESTRICTED;
-                result.flags &= ~PermissionInfo.FLAG_SOFT_RESTRICTED;
-            } else {
-                // The platform does not get to specify conflicting permissions
-                if ((result.flags & PermissionInfo.FLAG_HARD_RESTRICTED) != 0
-                        && (result.flags & PermissionInfo.FLAG_SOFT_RESTRICTED) != 0) {
-                    throw new IllegalStateException("Permission cannot be both soft and hard"
-                            + " restricted: " + result.getName());
-                }
-            }
-
-        } finally {
-            if (sa != null) {
-                sa.recycle();
-            }
-        }
-
-        if (result.protectionLevel == -1) {
-            outError[0] = "<permission> does not specify protectionLevel";
-            return null;
-        }
-
-        result.protectionLevel = PermissionInfo.fixProtectionLevel(result.protectionLevel);
-
-        if (result.getProtectionFlags() != 0) {
-            if ((result.protectionLevel & PermissionInfo.PROTECTION_FLAG_INSTANT) == 0
-                    && (result.protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY)
-                    == 0
-                    && (result.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) !=
-                    PermissionInfo.PROTECTION_SIGNATURE) {
-                outError[0] = "<permission>  protectionLevel specifies a non-instant flag but is "
-                        + "not based on signature type";
-                return null;
-            }
-        }
-
-        boolean success = parseAllMetaData(parsingPackage, res, parser,
-                "<permission>", result, outError);
-        if (!success || outError[0] != null) {
-            return null;
-        }
-
-        return result;
-    }
-
-    public static ParsedPermission parsePermissionTree(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser,
-            String[] outError
-    ) throws IOException, XmlPullParserException {
-        TypedArray sa = null;
-        String packageName = parsingPackage.getPackageName();
-        ParsedPermission result = new ParsedPermission();
-
-        try {
-            sa = res.obtainAttributes(parser, R.styleable.AndroidManifestPermissionTree);
-
-            String name = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestPermissionTree_name, 0);
-            if (name == null) {
-                outError[0] = "<permission-tree> does not specify android:name";
-                return null;
-            } else {
-                String className = ApkParseUtils.buildClassName(packageName, name);
-                if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(className)) {
-                    outError[0] = "<permission-tree> invalid android:name";
-                    return null;
-                } else if (className == null) {
-                    outError[0] = "Empty class name in package " + packageName;
-                    return null;
-                }
-
-                result.className = className;
-            }
-
-            int roundIconVal = PackageParser.sUseRoundIcon ? sa.getResourceId(
-                    R.styleable.AndroidManifestPermissionTree_roundIcon, 0) : 0;
-            if (roundIconVal != 0) {
-                result.icon = roundIconVal;
-                result.nonLocalizedLabel = null;
-            } else {
-                int iconVal = sa.getResourceId(R.styleable.AndroidManifestPermissionTree_icon, 0);
-                if (iconVal != 0) {
-                    result.icon = iconVal;
-                    result.nonLocalizedLabel = null;
-                }
-            }
-
-            int logoVal = sa.getResourceId(R.styleable.AndroidManifestPermissionTree_logo, 0);
-            if (logoVal != 0) {
-                result.logo = logoVal;
-            }
-
-            int bannerVal = sa.getResourceId(R.styleable.AndroidManifestPermissionTree_banner, 0);
-            if (bannerVal != 0) {
-                result.banner = bannerVal;
-            }
-
-            TypedValue v = sa.peekValue(R.styleable.AndroidManifestPermissionTree_label);
-            if (v != null && (result.labelRes = v.resourceId) == 0) {
-                result.nonLocalizedLabel = v.coerceToString();
-            }
-
-            result.setPackageNameInternal(packageName);
-        } finally {
-            if (sa != null) {
-                sa.recycle();
-            }
-        }
-
-        int index = result.getName().indexOf('.');
-        if (index > 0) {
-            index = result.getName().indexOf('.', index + 1);
-        }
-        if (index < 0) {
-            outError[0] =
-                    "<permission-tree> name has less than three segments: " + result.getName();
-            return null;
-        }
-
-        result.descriptionRes = 0;
-        result.requestRes = 0;
-        result.protectionLevel = PermissionInfo.PROTECTION_NORMAL;
-        result.tree = true;
-
-        boolean success = parseAllMetaData(parsingPackage, res, parser,
-                "<permission-tree>", result, outError);
-        if (!success || outError[0] != null) {
-            return null;
-        }
-
-        return result;
-    }
-
-    public static ParsedPermissionGroup parsePermissionGroup(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser,
-            String[] outError
-    ) throws IOException, XmlPullParserException {
-        TypedArray sa = null;
-        String packageName = parsingPackage.getPackageName();
-        ParsedPermissionGroup result = new ParsedPermissionGroup();
-
-        try {
-            sa = res.obtainAttributes(parser, R.styleable.AndroidManifestPermissionGroup);
-
-            String name = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestPermissionGroup_name, 0);
-            if (name == null) {
-                outError[0] = "<permission> does not specify android:name";
-                return null;
-            } else {
-                String className = ApkParseUtils.buildClassName(packageName, name);
-                if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(className)) {
-                    outError[0] = "<permission> invalid android:name";
-                    return null;
-                } else if (className == null) {
-                    outError[0] = "Empty class name in package " + packageName;
-                    return null;
-                }
-
-                result.className = className;
-            }
-
-            int roundIconVal = PackageParser.sUseRoundIcon ? sa.getResourceId(
-                    R.styleable.AndroidManifestPermissionGroup_roundIcon, 0) : 0;
-            if (roundIconVal != 0) {
-                result.icon = roundIconVal;
-                result.nonLocalizedLabel = null;
-            } else {
-                int iconVal = sa.getResourceId(R.styleable.AndroidManifestPermissionGroup_icon, 0);
-                if (iconVal != 0) {
-                    result.icon = iconVal;
-                    result.nonLocalizedLabel = null;
-                }
-            }
-
-            int logoVal = sa.getResourceId(R.styleable.AndroidManifestPermissionGroup_logo, 0);
-            if (logoVal != 0) {
-                result.logo = logoVal;
-            }
-
-            int bannerVal = sa.getResourceId(R.styleable.AndroidManifestPermissionGroup_banner, 0);
-            if (bannerVal != 0) {
-                result.banner = bannerVal;
-            }
-
-            TypedValue v = sa.peekValue(R.styleable.AndroidManifestPermissionGroup_label);
-            if (v != null && (result.labelRes = v.resourceId) == 0) {
-                result.nonLocalizedLabel = v.coerceToString();
-            }
-
-            result.setPackageNameInternal(packageName);
-
-            result.descriptionRes = sa.getResourceId(
-                    R.styleable.AndroidManifestPermissionGroup_description, 0);
-
-            result.requestDetailResourceId = sa.getResourceId(
-                    R.styleable.AndroidManifestPermissionGroup_requestDetail, 0);
-            result.backgroundRequestResourceId = sa.getResourceId(
-                    R.styleable.AndroidManifestPermissionGroup_backgroundRequest,
-                    0);
-            result.backgroundRequestDetailResourceId = sa.getResourceId(
-                    R.styleable
-                            .AndroidManifestPermissionGroup_backgroundRequestDetail, 0);
-
-            result.requestRes = sa.getResourceId(
-                    R.styleable.AndroidManifestPermissionGroup_request, 0);
-            result.flags = sa.getInt(
-                    R.styleable.AndroidManifestPermissionGroup_permissionGroupFlags,
-                    0);
-            result.priority = sa.getInt(
-                    R.styleable.AndroidManifestPermissionGroup_priority, 0);
-
-        } finally {
-            if (sa != null) {
-                sa.recycle();
-            }
-        }
-
-        boolean success = parseAllMetaData(parsingPackage, res, parser,
-                "<permission-group>", result, outError);
-        if (!success || outError[0] != null) {
-            return null;
-        }
-
-        return result;
-    }
-
-    public static ParsedInstrumentation parseInstrumentation(
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser,
-            String[] outError
-    ) throws IOException, XmlPullParserException {
-        TypedArray sa = null;
-        String packageName = parsingPackage.getPackageName();
-        ParsedInstrumentation result = new ParsedInstrumentation();
-
-        try {
-            sa = res.obtainAttributes(parser, R.styleable.AndroidManifestInstrumentation);
-
-            // TODO(b/135203078): Re-share all of the configuration for this. ParseComponentArgs was
-            //  un-used for this, but can be adjusted and re-added to share all the initial result
-            //  parsing for icon/logo/name/etc in all of these parse methods.
-            String name = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestInstrumentation_name, 0);
-            if (name == null) {
-                outError[0] = "<instrumentation> does not specify android:name";
-                return null;
-            } else {
-                String className = ApkParseUtils.buildClassName(packageName, name);
-                if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(className)) {
-                    outError[0] = "<instrumentation> invalid android:name";
-                    return null;
-                } else if (className == null) {
-                    outError[0] = "Empty class name in package " + packageName;
-                    return null;
-                }
-
-                result.className = className;
-            }
-
-            int roundIconVal = PackageParser.sUseRoundIcon ? sa.getResourceId(
-                    R.styleable.AndroidManifestInstrumentation_roundIcon, 0) : 0;
-            if (roundIconVal != 0) {
-                result.icon = roundIconVal;
-                result.nonLocalizedLabel = null;
-            } else {
-                int iconVal = sa.getResourceId(R.styleable.AndroidManifestInstrumentation_icon, 0);
-                if (iconVal != 0) {
-                    result.icon = iconVal;
-                    result.nonLocalizedLabel = null;
-                }
-            }
-
-            int logoVal = sa.getResourceId(R.styleable.AndroidManifestInstrumentation_logo, 0);
-            if (logoVal != 0) {
-                result.logo = logoVal;
-            }
-
-            int bannerVal = sa.getResourceId(R.styleable.AndroidManifestInstrumentation_banner, 0);
-            if (bannerVal != 0) {
-                result.banner = bannerVal;
-            }
-
-            TypedValue v = sa.peekValue(R.styleable.AndroidManifestInstrumentation_label);
-            if (v != null && (result.labelRes = v.resourceId) == 0) {
-                result.nonLocalizedLabel = v.coerceToString();
-            }
-
-            result.setPackageNameInternal(packageName);
-
-            String str;
-            // Note: don't allow this value to be a reference to a resource
-            // that may change.
-            str = sa.getNonResourceString(R.styleable.AndroidManifestInstrumentation_targetPackage);
-            result.setTargetPackage(str);
-
-            str = sa.getNonResourceString(
-                    R.styleable.AndroidManifestInstrumentation_targetProcesses);
-            result.setTargetProcesses(str);
-            result.handleProfiling = sa.getBoolean(
-                    R.styleable.AndroidManifestInstrumentation_handleProfiling, false);
-            result.functionalTest = sa.getBoolean(
-                    R.styleable.AndroidManifestInstrumentation_functionalTest, false);
-
-        } finally {
-            if (sa != null) {
-                sa.recycle();
-            }
-        }
-
-        boolean success = parseAllMetaData(parsingPackage, res, parser,
-                "<instrumentation>", result, outError);
-        if (!success || outError[0] != null) {
-            return null;
-        }
-
-        return result;
-    }
-
-    private static @Nullable ArraySet<String> parseDenyPermission(
-            ArraySet<String> perms,
-            Resources res,
-            XmlResourceParser parser,
-            String[] outError
-    ) throws IOException, XmlPullParserException {
-        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestDenyPermission);
-        if (sa == null) {
-            outError[0] = "<deny-permission> could not be parsed";
-            return null;
-        }
-
-        try {
-            String perm = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestDenyPermission_name,0);
-            if (perm != null && perm.equals(android.Manifest.permission.INTERNET)) {
-                if (perms == null) {
-                    perms = new ArraySet<>();
-                }
-                perms.add(perm);
-            }
-        } finally {
-            sa.recycle();
-        }
-        XmlUtils.skipCurrentTag(parser);
-        return perms;
-    }
-
-    private static ArraySet<String> parseAllowPermission(
-            ArraySet<String> perms,
-            Resources res,
-            XmlResourceParser parser,
-            String[] outError
-    ) throws IOException, XmlPullParserException {
-        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestAllowPermission);
-        if (sa == null) {
-            outError[0] = "<allow-permission> could not be parsed";
-            return null;
-        }
-
-        try {
-            String perm = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestAllowPermission_name,0);
-            if (perm != null && perm.equals(android.Manifest.permission.INTERNET)
-                    && perms != null) {
-                perms.remove(perm);
-                if (perms.size() <= 0) {
-                    perms = null;
-                }
-            }
-        } finally {
-            sa.recycle();
-        }
-        XmlUtils.skipCurrentTag(parser);
-        return perms;
-    }
-
-    public static ParsedProcess parseProcess(
-            ArraySet<String> perms,
-            String[] separateProcesses,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser,
-            int flags,
-            String[] outError
-    ) throws IOException, XmlPullParserException {
-        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestProcess);
-        if (sa == null) {
-            outError[0] = "<process> could not be parsed";
-            return null;
-        }
-
-        ParsedProcess proc = new ParsedProcess();
-        if (perms != null) {
-            proc.deniedPermissions = new ArraySet(perms);
-        }
-
-        try {
-            proc.name = sa.getNonConfigurationString(
-                    R.styleable.AndroidManifestProcess_process,0);
-            proc.name = PackageParser.buildProcessName(parsingPackage.getPackageName(),
-                    parsingPackage.getPackageName(), proc.name, flags, separateProcesses, outError);
-            if (outError[0] != null) {
-                return null;
-            }
-            if (proc.name == null || proc.name.length() <= 0) {
-                outError[0] = "<process> does not specify android:process";
-                return null;
-            }
-        } finally {
-            sa.recycle();
-        }
-
-        int type;
-        final int innerDepth = parser.getDepth();
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
-            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                continue;
-            }
-
-            String tagName = parser.getName();
-            if (tagName.equals("deny-permission")) {
-                proc.deniedPermissions = parseDenyPermission(proc.deniedPermissions, res, parser,
-                        outError);
-                if (outError[0] != null) {
-                    return null;
-                }
-            } else if (tagName.equals("allow-permission")) {
-                proc.deniedPermissions = parseAllowPermission(proc.deniedPermissions, res, parser,
-                        outError);
-                if (outError[0] != null) {
-                    return null;
-                }
-            } else {
-                Slog.w(TAG, "Unknown element under <process>: " + tagName
-                        + " at " + parsingPackage.getBaseCodePath() + " "
-                        + parser.getPositionDescription());
-                XmlUtils.skipCurrentTag(parser);
-                continue;
-            }
-        }
-
-        return proc;
-    }
-
-    public static ArrayMap<String, ParsedProcess> parseProcesses(
-            String[] separateProcesses,
-            ParsingPackage parsingPackage,
-            Resources res,
-            XmlResourceParser parser,
-            int flags,
-            String[] outError
-    ) throws IOException, XmlPullParserException {
-        ArraySet<String> deniedPerms = null;
-        ArrayMap<String, ParsedProcess> processes = new ArrayMap<>();
-
-        int type;
-        final int innerDepth = parser.getDepth();
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
-            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                continue;
-            }
-
-            String tagName = parser.getName();
-            if (tagName.equals("deny-permission")) {
-                deniedPerms = parseDenyPermission(deniedPerms, res, parser, outError);
-                if (outError[0] != null) {
-                    return null;
-                }
-            } else if (tagName.equals("allow-permission")) {
-                deniedPerms = parseAllowPermission(deniedPerms, res, parser, outError);
-                if (outError[0] != null) {
-                    return null;
-                }
-            } else if (tagName.equals("process")) {
-                ParsedProcess proc = parseProcess(deniedPerms, separateProcesses, parsingPackage,
-                        res, parser, flags, outError);
-                if (outError[0] != null) {
-                    return null;
-                }
-                if (processes.get(proc.name) != null) {
-                    outError[0] = "<process> specified existing name '" + proc.name + "'";
-                    return null;
-                }
-                processes.put(proc.name, proc);
-            } else {
-                Slog.w(TAG, "Unknown element under <processes>: " + tagName
-                        + " at " + parsingPackage.getBaseCodePath() + " "
-                        + parser.getPositionDescription());
-                XmlUtils.skipCurrentTag(parser);
-                continue;
-            }
-        }
-
-        return processes;
-    }
-
-    public static ActivityInfo.WindowLayout parseLayout(Resources res, AttributeSet attrs) {
-        TypedArray sw = res.obtainAttributes(attrs,
-                R.styleable.AndroidManifestLayout);
-        int width = -1;
-        float widthFraction = -1f;
-        int height = -1;
-        float heightFraction = -1f;
-        final int widthType = sw.getType(
-                R.styleable.AndroidManifestLayout_defaultWidth);
-        if (widthType == TypedValue.TYPE_FRACTION) {
-            widthFraction = sw.getFraction(
-                    R.styleable.AndroidManifestLayout_defaultWidth,
-                    1, 1, -1);
-        } else if (widthType == TypedValue.TYPE_DIMENSION) {
-            width = sw.getDimensionPixelSize(
-                    R.styleable.AndroidManifestLayout_defaultWidth,
-                    -1);
-        }
-        final int heightType = sw.getType(
-                R.styleable.AndroidManifestLayout_defaultHeight);
-        if (heightType == TypedValue.TYPE_FRACTION) {
-            heightFraction = sw.getFraction(
-                    R.styleable.AndroidManifestLayout_defaultHeight,
-                    1, 1, -1);
-        } else if (heightType == TypedValue.TYPE_DIMENSION) {
-            height = sw.getDimensionPixelSize(
-                    R.styleable.AndroidManifestLayout_defaultHeight,
-                    -1);
-        }
-        int gravity = sw.getInt(
-                R.styleable.AndroidManifestLayout_gravity,
-                Gravity.CENTER);
-        int minWidth = sw.getDimensionPixelSize(
-                R.styleable.AndroidManifestLayout_minWidth,
-                -1);
-        int minHeight = sw.getDimensionPixelSize(
-                R.styleable.AndroidManifestLayout_minHeight,
-                -1);
-        sw.recycle();
-        return new ActivityInfo.WindowLayout(width, widthFraction,
-                height, heightFraction, gravity, minWidth, minHeight);
-    }
-
-    public static boolean parseIntentInfo(
-            ParsedIntentInfo intentInfo,
-            ParsingPackage parsingPackage,
-            Resources res, XmlResourceParser parser, boolean allowGlobs,
-            boolean allowAutoVerify, String[] outError
-    ) throws XmlPullParserException, IOException {
-        TypedArray sa = res.obtainAttributes(parser,
-                R.styleable.AndroidManifestIntentFilter);
-
-        int priority = sa.getInt(
-                R.styleable.AndroidManifestIntentFilter_priority, 0);
-        intentInfo.setPriority(priority);
-
-        int order = sa.getInt(
-                R.styleable.AndroidManifestIntentFilter_order, 0);
-        intentInfo.setOrder(order);
-
-        TypedValue v = sa.peekValue(
-                R.styleable.AndroidManifestIntentFilter_label);
-        if (v != null && (intentInfo.labelRes = v.resourceId) == 0) {
-            intentInfo.nonLocalizedLabel = v.coerceToString();
-        }
-
-        int roundIconVal = PackageParser.sUseRoundIcon ? sa.getResourceId(
-                R.styleable.AndroidManifestIntentFilter_roundIcon, 0) : 0;
-        if (roundIconVal != 0) {
-            intentInfo.icon = roundIconVal;
-        } else {
-            intentInfo.icon = sa.getResourceId(
-                    R.styleable.AndroidManifestIntentFilter_icon, 0);
-        }
-
-        if (allowAutoVerify) {
-            intentInfo.setAutoVerify(sa.getBoolean(
-                    R.styleable.AndroidManifestIntentFilter_autoVerify,
-                    false));
-        }
-
-        sa.recycle();
-
-        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 nodeName = parser.getName();
-            if (nodeName.equals("action")) {
-                String value = parser.getAttributeValue(
-                        PackageParser.ANDROID_RESOURCES, "name");
-                if (TextUtils.isEmpty(value)) {
-                    outError[0] = "No value supplied for <android:name>";
-                    return false;
-                }
-                XmlUtils.skipCurrentTag(parser);
-
-                intentInfo.addAction(value);
-            } else if (nodeName.equals("category")) {
-                String value = parser.getAttributeValue(
-                        PackageParser.ANDROID_RESOURCES, "name");
-                if (TextUtils.isEmpty(value)) {
-                    outError[0] = "No value supplied for <android:name>";
-                    return false;
-                }
-                XmlUtils.skipCurrentTag(parser);
-
-                intentInfo.addCategory(value);
-
-            } else if (nodeName.equals("data")) {
-                sa = res.obtainAttributes(parser,
-                        R.styleable.AndroidManifestData);
-
-                String str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestData_mimeType, 0);
-                if (str != null) {
-                    try {
-                        intentInfo.addRawDataType(str);
-                    } catch (IntentFilter.MalformedMimeTypeException e) {
-                        outError[0] = e.toString();
-                        sa.recycle();
-                        return false;
-                    }
-                }
-
-                str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestData_scheme, 0);
-                if (str != null) {
-                    intentInfo.addDataScheme(str);
-                }
-
-                str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestData_ssp, 0);
-                if (str != null) {
-                    intentInfo.addDataSchemeSpecificPart(str, PatternMatcher.PATTERN_LITERAL);
-                }
-
-                str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestData_sspPrefix, 0);
-                if (str != null) {
-                    intentInfo.addDataSchemeSpecificPart(str, PatternMatcher.PATTERN_PREFIX);
-                }
-
-                str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestData_sspPattern, 0);
-                if (str != null) {
-                    if (!allowGlobs) {
-                        outError[0] = "sspPattern not allowed here; ssp must be literal";
-                        return false;
-                    }
-                    intentInfo.addDataSchemeSpecificPart(str, PatternMatcher.PATTERN_SIMPLE_GLOB);
-                }
-
-                String host = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestData_host, 0);
-                String port = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestData_port, 0);
-                if (host != null) {
-                    intentInfo.addDataAuthority(host, port);
-                }
-
-                str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestData_path, 0);
-                if (str != null) {
-                    intentInfo.addDataPath(str, PatternMatcher.PATTERN_LITERAL);
-                }
-
-                str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestData_pathPrefix, 0);
-                if (str != null) {
-                    intentInfo.addDataPath(str, PatternMatcher.PATTERN_PREFIX);
-                }
-
-                str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestData_pathPattern, 0);
-                if (str != null) {
-                    if (!allowGlobs) {
-                        outError[0] = "pathPattern not allowed here; path must be literal";
-                        return false;
-                    }
-                    intentInfo.addDataPath(str, PatternMatcher.PATTERN_SIMPLE_GLOB);
-                }
-
-                str = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestData_pathAdvancedPattern, 0);
-                if (str != null) {
-                    if (!allowGlobs) {
-                        outError[0] = "pathAdvancedPattern not allowed here; path must be literal";
-                        return false;
-                    }
-                    intentInfo.addDataPath(str, PatternMatcher.PATTERN_ADVANCED_GLOB);
-                }
-
-                sa.recycle();
-                XmlUtils.skipCurrentTag(parser);
-            } else if (!PackageParser.RIGID_PARSER) {
-                Slog.w(TAG, "Unknown element under <intent-filter>: "
-                        + parser.getName() + " at " + parsingPackage.getBaseCodePath() + " "
-                        + parser.getPositionDescription());
-                XmlUtils.skipCurrentTag(parser);
-            } else {
-                outError[0] = "Bad element under <intent-filter>: " + parser.getName();
-                return false;
-            }
-        }
-
-        intentInfo.hasDefault = intentInfo.hasCategory(Intent.CATEGORY_DEFAULT);
-
-        if (PackageParser.DEBUG_PARSER) {
-            final StringBuilder cats = new StringBuilder("Intent d=");
-            cats.append(intentInfo.hasDefault);
-            cats.append(", cat=");
-
-            final Iterator<String> it = intentInfo.categoriesIterator();
-            if (it != null) {
-                while (it.hasNext()) {
-                    cats.append(' ');
-                    cats.append(it.next());
-                }
-            }
-            Slog.d(TAG, cats.toString());
-        }
-
-        return true;
-    }
-
-    private static boolean parseAllMetaData(
-            ParsingPackage parsingPackage,
-            Resources res, XmlResourceParser parser, String tag,
-            ParsedComponent outInfo,
-            String[] outError
-    ) throws XmlPullParserException, IOException {
-        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;
-            }
-
-            if (parser.getName().equals("meta-data")) {
-                if ((outInfo.metaData = ApkParseUtils.parseMetaData(parsingPackage, res, parser,
-                        outInfo.metaData, outError)) == null) {
-                    return false;
-                }
-            } else {
-                if (!PackageParser.RIGID_PARSER) {
-                    Slog.w(TAG, "Unknown element under " + tag + ": "
-                            + parser.getName() + " at " + parsingPackage.getBaseCodePath() + " "
-                            + parser.getPositionDescription());
-                    XmlUtils.skipCurrentTag(parser);
-                    continue;
-                } else {
-                    outError[0] = "Bad element under " + tag + ": " + parser.getName();
-                }
-            }
-        }
-
-        return true;
-    }
-
-    public static boolean isImplicitlyExposedIntent(IntentFilter intent) {
-        return intent.hasCategory(Intent.CATEGORY_BROWSABLE)
-                || intent.hasAction(Intent.ACTION_SEND)
-                || intent.hasAction(Intent.ACTION_SENDTO)
-                || intent.hasAction(Intent.ACTION_SEND_MULTIPLE);
-    }
-}
diff --git a/core/java/android/content/pm/parsing/PackageImpl.java b/core/java/android/content/pm/parsing/PackageImpl.java
deleted file mode 100644
index fe8307c..0000000
--- a/core/java/android/content/pm/parsing/PackageImpl.java
+++ /dev/null
@@ -1,3317 +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.content.pm.parsing;
-
-import static android.os.Build.VERSION_CODES.DONUT;
-
-import static java.util.Collections.emptyMap;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.ConfigurationInfo;
-import android.content.pm.FeatureGroupInfo;
-import android.content.pm.FeatureInfo;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageParser;
-import android.content.pm.ProviderInfo;
-import android.content.pm.ServiceInfo;
-import android.content.pm.SharedLibraryInfo;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivity;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivityIntentInfo;
-import android.content.pm.parsing.ComponentParseUtils.ParsedFeature;
-import android.content.pm.parsing.ComponentParseUtils.ParsedInstrumentation;
-import android.content.pm.parsing.ComponentParseUtils.ParsedIntentInfo;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermission;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermissionGroup;
-import android.content.pm.parsing.ComponentParseUtils.ParsedProvider;
-import android.content.pm.parsing.ComponentParseUtils.ParsedService;
-import android.content.res.TypedArray;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Environment;
-import android.os.Parcel;
-import android.os.UserHandle;
-import android.os.storage.StorageManager;
-import android.text.TextUtils;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-import android.util.SparseArray;
-
-import com.android.internal.R;
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.ArrayUtils;
-import com.android.internal.util.CollectionUtils;
-import com.android.server.SystemConfig;
-
-import java.security.PublicKey;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.UUID;
-
-/**
- * The backing data for a package that was parsed from disk.
- *
- * TODO(b/135203078): Convert Lists used as sets into Sets, to better express intended use case
- * TODO(b/135203078): Field nullability annotations
- * TODO(b/135203078): Convert = 1 fields into Booleans
- * TODO(b/135203078): Make all lists nullable and Collections.unmodifiable immutable when returned.
- *   Prefer add/set methods if adding is necessary.
- * TODO(b/135203078): Consider comments to disable auto-format and single-line, single-space all the
- *   get/set methods to make this class far more compact. Maybe even separate some logic into parent
- *   classes, assuming there is no overhead.
- * TODO(b/135203078): Copy documentation from PackageParser#Package for the relevant fields included
- *   here. Should clarify and clean up any differences. Also consider renames if it helps make
- *   things clearer.
- * TODO(b/135203078): Intern all possibl e String values? Initial refactor just mirrored old
- *   behavior.
- *
- * @hide
- */
-public final class PackageImpl implements ParsingPackage, ParsedPackage, AndroidPackage,
-        AndroidPackageWrite {
-
-    private static final String TAG = "PackageImpl";
-
-    // Resource boolean are -1, so 1 means we don't know the value.
-    private int supportsSmallScreens = 1;
-    private int supportsNormalScreens = 1;
-    private int supportsLargeScreens = 1;
-    private int supportsXLargeScreens = 1;
-    private int resizeable = 1;
-    private int anyDensity = 1;
-
-    private long[] lastPackageUsageTimeInMills =
-            new long[PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT];
-
-    private int versionCode;
-    private int versionCodeMajor;
-    private int baseRevisionCode;
-    private String versionName;
-
-    private boolean coreApp;
-    private int compileSdkVersion;
-    private String compileSdkVersionCodename;
-
-    private String packageName;
-    private String realPackage;
-    private String manifestPackageName;
-    private String baseCodePath;
-
-    private boolean requiredForAllUsers;
-    private String restrictedAccountType;
-    private String requiredAccountType;
-
-    private boolean baseHardwareAccelerated;
-
-    private String overlayTarget;
-    private String overlayTargetName;
-    private String overlayCategory;
-    private int overlayPriority;
-    private boolean overlayIsStatic;
-    private Map<String, String> overlayables = emptyMap();
-
-    private String staticSharedLibName;
-    private long staticSharedLibVersion;
-    private ArrayList<String> libraryNames;
-    private ArrayList<String> usesLibraries;
-    private ArrayList<String> usesOptionalLibraries;
-
-    private ArrayList<String> usesStaticLibraries;
-    private long[] usesStaticLibrariesVersions;
-    private String[][] usesStaticLibrariesCertDigests;
-
-    private String sharedUserId;
-
-    private int sharedUserLabel;
-    private ArrayList<ConfigurationInfo> configPreferences;
-    private ArrayList<FeatureInfo> reqFeatures;
-    private ArrayList<FeatureGroupInfo> featureGroups;
-
-    private byte[] restrictUpdateHash;
-
-    private ArrayList<String> originalPackages;
-    private ArrayList<String> adoptPermissions;
-
-    private ArrayList<String> requestedPermissions;
-    private ArrayList<String> implicitPermissions;
-
-    private ArraySet<String> upgradeKeySets;
-    private Map<String, ArraySet<PublicKey>> keySetMapping;
-
-    private ArrayList<String> protectedBroadcasts;
-
-    @Nullable
-    private ArrayList<ComponentParseUtils.ParsedActivity> activities;
-
-    @Nullable
-    private ArrayList<ComponentParseUtils.ParsedActivity> receivers;
-
-    @Nullable
-    private ArrayList<ComponentParseUtils.ParsedService> services;
-
-    @Nullable
-    private ArrayList<ComponentParseUtils.ParsedProvider> providers;
-
-    @Nullable
-    private ArrayList<ComponentParseUtils.ParsedFeature> features;
-
-    @Nullable
-    private ArrayList<ComponentParseUtils.ParsedPermission> permissions;
-
-    @Nullable
-    private ArrayList<ComponentParseUtils.ParsedPermissionGroup> permissionGroups;
-
-    @Nullable
-    private ArrayList<ComponentParseUtils.ParsedInstrumentation> instrumentations;
-
-    private ArrayList<ParsedActivityIntentInfo> preferredActivityFilters;
-
-    private Bundle appMetaData;
-
-    private String volumeUuid;
-    private String applicationVolumeUuid;
-    private PackageParser.SigningDetails signingDetails;
-
-    private String codePath;
-
-    private boolean use32BitAbi;
-    private boolean visibleToInstantApps;
-
-    private String cpuAbiOverride;
-
-    private boolean isStub;
-
-    // TODO(b/135203078): Remove, should be unused
-    private int preferredOrder;
-
-    private boolean forceQueryable;
-
-    @Nullable
-    private ArrayList<Intent> queriesIntents;
-
-    @Nullable
-    private ArrayList<String> queriesPackages;
-
-    @Nullable
-    private ArrayMap<String, ComponentParseUtils.ParsedProcess> processes;
-
-    private String[] splitClassLoaderNames;
-    private String[] splitCodePaths;
-    private SparseArray<int[]> splitDependencies;
-    private int[] splitFlags;
-    private String[] splitNames;
-    private int[] splitRevisionCodes;
-
-    // TODO(b/135203078): Audit applicationInfo.something usages, which may be different from
-    //  package.something usages. There were differing cases of package.field = versus
-    //  package.appInfo.field =. This class assumes some obvious ones, like packageName,
-    //  were collapsible, but kept the following separate.
-
-    private String applicationInfoBaseResourcePath;
-    private String applicationInfoCodePath;
-    private String applicationInfoResourcePath;
-    private String[] applicationInfoSplitResourcePaths;
-
-    private String appComponentFactory;
-    private String backupAgentName;
-    private int banner;
-    private int category;
-    private String classLoaderName;
-    private String className;
-    private int compatibleWidthLimitDp;
-    private String credentialProtectedDataDir;
-    private String dataDir;
-    private int descriptionRes;
-    private String deviceProtectedDataDir;
-    private boolean enabled;
-    private boolean crossProfile;
-    private int flags;
-    private int fullBackupContent;
-    private boolean hiddenUntilInstalled;
-    private int icon;
-    private int iconRes;
-    private int installLocation = PackageParser.PARSE_DEFAULT_INSTALL_LOCATION;
-    private int labelRes;
-    private int largestWidthLimitDp;
-    private int logo;
-    private String manageSpaceActivityName;
-    private float maxAspectRatio;
-    private float minAspectRatio;
-    private int minSdkVersion;
-    private String name;
-    private String nativeLibraryDir;
-    private String nativeLibraryRootDir;
-    private boolean nativeLibraryRootRequiresIsa;
-    private int networkSecurityConfigRes;
-    private CharSequence nonLocalizedLabel;
-    private String permission;
-    private String primaryCpuAbi;
-    private int privateFlags;
-    private String processName;
-    private int requiresSmallestWidthDp;
-    private int roundIconRes;
-    private String secondaryCpuAbi;
-    private String secondaryNativeLibraryDir;
-    private String seInfo;
-    private String seInfoUser;
-    private int targetSandboxVersion;
-    private int targetSdkVersion;
-    private String taskAffinity;
-    private int theme;
-    private int uid = -1;
-    private int uiOptions;
-    private String[] usesLibraryFiles;
-    private List<SharedLibraryInfo> usesLibraryInfos;
-    private String zygotePreloadName;
-
-    @VisibleForTesting
-    public PackageImpl(
-            String packageName,
-            String baseCodePath,
-            TypedArray manifestArray,
-            boolean isCoreApp
-    ) {
-        this.packageName = TextUtils.safeIntern(packageName);
-        this.manifestPackageName = this.packageName;
-        this.baseCodePath = baseCodePath;
-
-        this.versionCode = manifestArray.getInteger(R.styleable.AndroidManifest_versionCode, 0);
-        this.versionCodeMajor = manifestArray.getInteger(
-                R.styleable.AndroidManifest_versionCodeMajor, 0);
-        this.baseRevisionCode = manifestArray.getInteger(R.styleable.AndroidManifest_revisionCode,
-                0);
-        setVersionName(manifestArray.getNonConfigurationString(
-                R.styleable.AndroidManifest_versionName, 0));
-        this.coreApp = isCoreApp;
-
-        this.compileSdkVersion = manifestArray.getInteger(
-                R.styleable.AndroidManifest_compileSdkVersion, 0);
-        setCompileSdkVersionCodename(manifestArray.getNonConfigurationString(
-                R.styleable.AndroidManifest_compileSdkVersionCodename, 0));
-    }
-
-    private PackageImpl(String packageName) {
-        this.packageName = TextUtils.safeIntern(packageName);
-        this.manifestPackageName = this.packageName;
-    }
-
-    @VisibleForTesting
-    public static ParsingPackage forParsing(String packageName) {
-        return new PackageImpl(packageName);
-    }
-
-    @VisibleForTesting
-    public static ParsingPackage forParsing(
-            String packageName,
-            String baseCodePath,
-            TypedArray manifestArray,
-            boolean isCoreApp) {
-        return new PackageImpl(packageName, baseCodePath, manifestArray, isCoreApp);
-    }
-
-    /**
-     * Mock an unavailable {@link AndroidPackage} to use when removing a package from the system.
-     * This can occur if the package was installed on a storage device that has since been removed.
-     * Since the infrastructure uses {@link AndroidPackage}, but for this case only cares about
-     * volumeUuid, just fake it rather than having separate method paths.
-     */
-    public static AndroidPackage buildFakeForDeletion(String packageName, String volumeUuid) {
-        return new PackageImpl(packageName)
-                .setVolumeUuid(volumeUuid)
-                .hideAsParsed()
-                .hideAsFinal();
-    }
-
-    @Override
-    public ParsedPackage hideAsParsed() {
-        return this;
-    }
-
-    @Override
-    public AndroidPackage hideAsFinal() {
-        updateFlags();
-        return this;
-    }
-
-    @Override
-    @Deprecated
-    public AndroidPackageWrite mutate() {
-        return this;
-    }
-
-    private void updateFlags() {
-        if (supportsSmallScreens < 0 || (supportsSmallScreens > 0
-                && targetSdkVersion
-                >= Build.VERSION_CODES.DONUT)) {
-            this.flags |= ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS;
-        }
-        if (supportsNormalScreens != 0) {
-            this.flags |= ApplicationInfo.FLAG_SUPPORTS_NORMAL_SCREENS;
-        }
-        if (supportsLargeScreens < 0 || (supportsLargeScreens > 0
-                && targetSdkVersion
-                >= Build.VERSION_CODES.DONUT)) {
-            this.flags |= ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS;
-        }
-        if (supportsXLargeScreens < 0 || (supportsXLargeScreens > 0
-                && targetSdkVersion
-                >= Build.VERSION_CODES.GINGERBREAD)) {
-            this.flags |= ApplicationInfo.FLAG_SUPPORTS_XLARGE_SCREENS;
-        }
-        if (resizeable < 0 || (resizeable > 0
-                && targetSdkVersion
-                >= Build.VERSION_CODES.DONUT)) {
-            this.flags |= ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS;
-        }
-        if (anyDensity < 0 || (anyDensity > 0
-                && targetSdkVersion
-                >= Build.VERSION_CODES.DONUT)) {
-            this.flags |= ApplicationInfo.FLAG_SUPPORTS_SCREEN_DENSITIES;
-        }
-    }
-
-    @Override
-    public boolean usesCompatibilityMode() {
-        int flags = 0;
-
-        if (supportsSmallScreens < 0 || (supportsSmallScreens > 0
-                && targetSdkVersion
-                >= Build.VERSION_CODES.DONUT)) {
-            flags |= ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS;
-        }
-        if (supportsNormalScreens != 0) {
-            flags |= ApplicationInfo.FLAG_SUPPORTS_NORMAL_SCREENS;
-        }
-        if (supportsLargeScreens < 0 || (supportsLargeScreens > 0
-                && targetSdkVersion
-                >= Build.VERSION_CODES.DONUT)) {
-            flags |= ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS;
-        }
-        if (supportsXLargeScreens < 0 || (supportsXLargeScreens > 0
-                && targetSdkVersion
-                >= Build.VERSION_CODES.GINGERBREAD)) {
-            flags |= ApplicationInfo.FLAG_SUPPORTS_XLARGE_SCREENS;
-        }
-        if (resizeable < 0 || (resizeable > 0
-                && targetSdkVersion
-                >= Build.VERSION_CODES.DONUT)) {
-            flags |= ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS;
-        }
-        if (anyDensity < 0 || (anyDensity > 0
-                && targetSdkVersion
-                >= Build.VERSION_CODES.DONUT)) {
-            flags |= ApplicationInfo.FLAG_SUPPORTS_SCREEN_DENSITIES;
-        }
-
-        return targetSdkVersion < DONUT
-                || (flags & (ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS
-                        | ApplicationInfo.FLAG_SUPPORTS_NORMAL_SCREENS
-                        | ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS
-                        | ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS
-                        | ApplicationInfo.FLAG_SUPPORTS_SCREEN_DENSITIES
-                        | ApplicationInfo.FLAG_SUPPORTS_XLARGE_SCREENS)) == 0;
-    }
-
-    @Override
-    public String getBaseCodePath() {
-        return baseCodePath;
-    }
-
-    @Override
-    public int getTargetSdkVersion() {
-        return targetSdkVersion;
-    }
-
-    @Override
-    public String getPackageName() {
-        return packageName;
-    }
-
-    @Override
-    public String getProcessName() {
-        return processName;
-    }
-
-    @Override
-    public String getPermission() {
-        return permission;
-    }
-
-    @Override
-    public String getStaticSharedLibName() {
-        return staticSharedLibName;
-    }
-
-    @Override
-    public long getStaticSharedLibVersion() {
-        return staticSharedLibVersion;
-    }
-
-    @Override
-    public String getSharedUserId() {
-        return sharedUserId;
-    }
-
-    @Override
-    public List<String> getRequestedPermissions() {
-        return requestedPermissions == null ? Collections.emptyList() : requestedPermissions;
-    }
-
-    @Nullable
-    @Override
-    public List<ParsedInstrumentation> getInstrumentations() {
-        return instrumentations;
-    }
-
-    @Override
-    public Map<String, ArraySet<PublicKey>> getKeySetMapping() {
-        return keySetMapping == null ? emptyMap() : keySetMapping;
-    }
-
-    @Override
-    public float getMaxAspectRatio() {
-        return maxAspectRatio;
-    }
-
-    @Override
-    public float getMinAspectRatio() {
-        return minAspectRatio;
-    }
-
-    @NonNull
-    @Override
-    public List<String> getLibraryNames() {
-        return libraryNames == null ? Collections.emptyList() : libraryNames;
-    }
-
-    @Override
-    public List<ParsedActivity> getActivities() {
-        return activities == null ? Collections.emptyList()
-                : activities;
-    }
-
-    @Override
-    public Bundle getAppMetaData() {
-        return appMetaData;
-    }
-
-    @Nullable
-    @Override
-    public List<String> getUsesLibraries() {
-        return usesLibraries;
-    }
-
-    @Nullable
-    @Override
-    public List<String> getUsesStaticLibraries() {
-        return usesStaticLibraries;
-    }
-
-    @Nullable
-    @Override
-    public ArrayMap<String, ComponentParseUtils.ParsedProcess> getProcesses() {
-        return processes;
-    }
-
-    @Override
-    public boolean isBaseHardwareAccelerated() {
-        return baseHardwareAccelerated;
-    }
-
-    @Override
-    public int getUiOptions() {
-        return uiOptions;
-    }
-
-    // TODO(b/135203078): Checking flags directly can be error prone,
-    //  consider separate interface methods?
-    @Override
-    public int getFlags() {
-        return flags;
-    }
-
-    // TODO(b/135203078): Checking flags directly can be error prone,
-    //  consider separate interface methods?
-    @Override
-    public int getPrivateFlags() {
-        return privateFlags;
-    }
-
-    @Override
-    public String getTaskAffinity() {
-        return taskAffinity;
-    }
-
-    @Nullable
-    @Override
-    public List<String> getOriginalPackages() {
-        return originalPackages;
-    }
-
-    @Override
-    public PackageParser.SigningDetails getSigningDetails() {
-        return signingDetails;
-    }
-
-    @Override
-    public String getVolumeUuid() {
-        return volumeUuid;
-    }
-
-    @Nullable
-    @Override
-    public List<ParsedPermissionGroup> getPermissionGroups() {
-        return permissionGroups;
-    }
-
-    @Nullable
-    @Override
-    public List<ParsedPermission> getPermissions() {
-        return permissions;
-    }
-
-    @Nullable
-    @Override
-    public List<ParsedFeature> getFeatures() {
-        return features;
-    }
-
-    @Override
-    public String getCpuAbiOverride() {
-        return cpuAbiOverride;
-    }
-
-    @Override
-    public String getPrimaryCpuAbi() {
-        return primaryCpuAbi;
-    }
-
-    @Override
-    public String getSecondaryCpuAbi() {
-        return secondaryCpuAbi;
-    }
-
-    @Override
-    public boolean isUse32BitAbi() {
-        return use32BitAbi;
-    }
-
-    @Override
-    public boolean isForceQueryable() {
-        return forceQueryable;
-    }
-
-    @Override
-    public String getCodePath() {
-        return codePath;
-    }
-
-    @Override
-    public String getNativeLibraryDir() {
-        return nativeLibraryDir;
-    }
-
-    @Override
-    public String getNativeLibraryRootDir() {
-        return nativeLibraryRootDir;
-    }
-
-    @Override
-    public boolean isNativeLibraryRootRequiresIsa() {
-        return nativeLibraryRootRequiresIsa;
-    }
-
-    // TODO(b/135203078): Does nothing, remove?
-    @Override
-    public int getPreferredOrder() {
-        return preferredOrder;
-    }
-
-    @Override
-    public long getLongVersionCode() {
-        return PackageInfo.composeLongVersionCode(versionCodeMajor, versionCode);
-    }
-
-    @Override
-    public PackageImpl setIsOverlay(boolean isOverlay) {
-        this.privateFlags = isOverlay
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_IS_RESOURCE_OVERLAY
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_IS_RESOURCE_OVERLAY;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setExternalStorage(boolean externalStorage) {
-        this.flags = externalStorage
-                ? this.flags | ApplicationInfo.FLAG_EXTERNAL_STORAGE
-                : this.flags & ~ApplicationInfo.FLAG_EXTERNAL_STORAGE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setIsolatedSplitLoading(boolean isolatedSplitLoading) {
-        this.privateFlags = isolatedSplitLoading
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_ISOLATED_SPLIT_LOADING
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_ISOLATED_SPLIT_LOADING;
-        return this;
-    }
-
-    @Override
-    public PackageImpl sortActivities() {
-        Collections.sort(this.activities, (a1, a2) -> Integer.compare(a2.order, a1.order));
-        return this;
-    }
-
-    @Override
-    public PackageImpl sortReceivers() {
-        Collections.sort(this.receivers, (a1, a2) -> Integer.compare(a2.order, a1.order));
-        return this;
-    }
-
-    @Override
-    public PackageImpl sortServices() {
-        Collections.sort(this.services, (a1, a2) -> Integer.compare(a2.order, a1.order));
-        return this;
-    }
-
-    @Override
-    public PackageImpl setBaseRevisionCode(int baseRevisionCode) {
-        this.baseRevisionCode = baseRevisionCode;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setPreferredOrder(int preferredOrder) {
-        this.preferredOrder = preferredOrder;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setVersionName(String versionName) {
-        this.versionName = TextUtils.safeIntern(versionName);
-        return this;
-    }
-
-    @Override
-    public ParsingPackage setCompileSdkVersion(int compileSdkVersion) {
-        this.compileSdkVersion = compileSdkVersion;
-        return this;
-    }
-
-    @Override
-    public ParsingPackage setCompileSdkVersionCodename(String compileSdkVersionCodename) {
-        this.compileSdkVersionCodename = TextUtils.safeIntern(compileSdkVersionCodename);
-        return this;
-    }
-
-    @Override
-    public PackageImpl setMaxAspectRatio(float maxAspectRatio) {
-        this.maxAspectRatio = maxAspectRatio;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setMinAspectRatio(float minAspectRatio) {
-        this.minAspectRatio = minAspectRatio;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setMinSdkVersion(int minSdkVersion) {
-        this.minSdkVersion = minSdkVersion;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setTargetSdkVersion(int targetSdkVersion) {
-        this.targetSdkVersion = targetSdkVersion;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setRealPackage(String realPackage) {
-        this.realPackage = realPackage;
-        return this;
-    }
-
-    @Override
-    public PackageImpl addConfigPreference(ConfigurationInfo configPreference) {
-        this.configPreferences = ArrayUtils.add(this.configPreferences, configPreference);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addReqFeature(FeatureInfo reqFeature) {
-        this.reqFeatures = ArrayUtils.add(this.reqFeatures, reqFeature);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addFeatureGroup(FeatureGroupInfo featureGroup) {
-        this.featureGroups = ArrayUtils.add(this.featureGroups, featureGroup);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addProtectedBroadcast(String protectedBroadcast) {
-        if (this.protectedBroadcasts == null
-                || !this.protectedBroadcasts.contains(protectedBroadcast)) {
-            this.protectedBroadcasts = ArrayUtils.add(this.protectedBroadcasts,
-                    TextUtils.safeIntern(protectedBroadcast));
-        }
-        return this;
-    }
-
-    @Override
-    public PackageImpl addInstrumentation(ParsedInstrumentation instrumentation) {
-        this.instrumentations = ArrayUtils.add(this.instrumentations, instrumentation);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addOriginalPackage(String originalPackage) {
-        this.originalPackages = ArrayUtils.add(this.originalPackages, originalPackage);
-        return this;
-    }
-
-    @Override
-    public ParsingPackage addOverlayable(String overlayableName, String actorName) {
-        this.overlayables = CollectionUtils.add(this.overlayables,
-                TextUtils.safeIntern(overlayableName), TextUtils.safeIntern(actorName));
-        return this;
-    }
-
-    @Override
-    public PackageImpl addAdoptPermission(String adoptPermission) {
-        this.adoptPermissions = ArrayUtils.add(this.adoptPermissions, adoptPermission);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addFeature(ParsedFeature feature) {
-        this.features = ArrayUtils.add(this.features, feature);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addPermission(ParsedPermission permission) {
-        this.permissions = ArrayUtils.add(this.permissions, permission);
-        return this;
-    }
-
-    @Override
-    public PackageImpl removePermission(int index) {
-        this.permissions.remove(index);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addPermissionGroup(ParsedPermissionGroup permissionGroup) {
-        this.permissionGroups = ArrayUtils.add(this.permissionGroups, permissionGroup);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addRequestedPermission(String permission) {
-        this.requestedPermissions = ArrayUtils.add(this.requestedPermissions,
-                TextUtils.safeIntern(permission));
-        return this;
-    }
-
-    @Override
-    public PackageImpl addImplicitPermission(String permission) {
-        this.implicitPermissions = ArrayUtils.add(this.implicitPermissions,
-                TextUtils.safeIntern(permission));
-        return this;
-    }
-
-    @Override
-    public PackageImpl addKeySet(String keySetName, PublicKey publicKey) {
-        if (keySetMapping == null) {
-            keySetMapping = new ArrayMap<>();
-        }
-
-        ArraySet<PublicKey> publicKeys = keySetMapping.get(keySetName);
-        if (publicKeys == null) {
-            publicKeys = new ArraySet<>();
-            keySetMapping.put(keySetName, publicKeys);
-        }
-
-        publicKeys.add(publicKey);
-
-        return this;
-    }
-
-    @Override
-    public ParsingPackage addActivity(ParsedActivity parsedActivity) {
-        this.activities = ArrayUtils.add(this.activities, parsedActivity);
-        return this;
-    }
-
-    @Override
-    public ParsingPackage addReceiver(ParsedActivity parsedReceiver) {
-        this.receivers = ArrayUtils.add(this.receivers, parsedReceiver);
-        return this;
-    }
-
-    @Override
-    public ParsingPackage addService(ParsedService parsedService) {
-        this.services = ArrayUtils.add(this.services, parsedService);
-        return this;
-    }
-
-    @Override
-    public ParsingPackage addProvider(ParsedProvider parsedProvider) {
-        this.providers = ArrayUtils.add(this.providers, parsedProvider);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addLibraryName(String libraryName) {
-        this.libraryNames = ArrayUtils.add(this.libraryNames, TextUtils.safeIntern(libraryName));
-        return this;
-    }
-
-    @Override
-    public PackageImpl addUsesLibrary(String libraryName) {
-        this.usesLibraries = ArrayUtils.add(this.usesLibraries, TextUtils.safeIntern(libraryName));
-        return this;
-    }
-
-    @Override
-    public PackageImpl addUsesOptionalLibrary(String libraryName) {
-        this.usesOptionalLibraries = ArrayUtils.add(this.usesOptionalLibraries,
-                TextUtils.safeIntern(libraryName));
-        return this;
-    }
-
-    @Override
-    public PackageImpl removeUsesOptionalLibrary(String libraryName) {
-        this.usesOptionalLibraries = ArrayUtils.remove(this.usesOptionalLibraries, libraryName);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addUsesStaticLibrary(String libraryName) {
-        this.usesStaticLibraries = ArrayUtils.add(this.usesStaticLibraries,
-                TextUtils.safeIntern(libraryName));
-        return this;
-    }
-
-    @Override
-    public PackageImpl addUsesStaticLibraryVersion(long version) {
-        this.usesStaticLibrariesVersions = ArrayUtils.appendLong(this.usesStaticLibrariesVersions,
-                version, true);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addUsesStaticLibraryCertDigests(String[] certSha256Digests) {
-        this.usesStaticLibrariesCertDigests = ArrayUtils.appendElement(String[].class,
-                this.usesStaticLibrariesCertDigests, certSha256Digests, true);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addPreferredActivityFilter(
-            ParsedActivityIntentInfo parsedActivityIntentInfo) {
-        this.preferredActivityFilters = ArrayUtils.add(this.preferredActivityFilters,
-                parsedActivityIntentInfo);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addQueriesIntent(Intent intent) {
-        this.queriesIntents = ArrayUtils.add(this.queriesIntents, intent);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addQueriesPackage(String packageName) {
-        this.queriesPackages = ArrayUtils.add(this.queriesPackages,
-                TextUtils.safeIntern(packageName));
-        return this;
-    }
-
-    @Override
-    public PackageImpl setProcesses(ArrayMap<String, ComponentParseUtils.ParsedProcess> processes) {
-        this.processes = processes;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSupportsSmallScreens(int supportsSmallScreens) {
-        if (supportsSmallScreens == 1) {
-            return this;
-        }
-
-        this.supportsSmallScreens = supportsSmallScreens;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSupportsNormalScreens(int supportsNormalScreens) {
-        if (supportsNormalScreens == 1) {
-            return this;
-        }
-
-        this.supportsNormalScreens = supportsNormalScreens;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSupportsLargeScreens(int supportsLargeScreens) {
-        if (supportsLargeScreens == 1) {
-            return this;
-        }
-
-        this.supportsLargeScreens = supportsLargeScreens;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSupportsXLargeScreens(int supportsXLargeScreens) {
-        if (supportsXLargeScreens == 1) {
-            return this;
-        }
-
-        this.supportsXLargeScreens = supportsXLargeScreens;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setResizeable(int resizeable) {
-        if (resizeable == 1) {
-            return this;
-        }
-
-        this.resizeable = resizeable;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setAnyDensity(int anyDensity) {
-        if (anyDensity == 1) {
-            return this;
-        }
-
-        this.anyDensity = anyDensity;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setRequiresSmallestWidthDp(int requiresSmallestWidthDp) {
-        this.requiresSmallestWidthDp = requiresSmallestWidthDp;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setCompatibleWidthLimitDp(int compatibleWidthLimitDp) {
-        this.compatibleWidthLimitDp = compatibleWidthLimitDp;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setLargestWidthLimitDp(int largestWidthLimitDp) {
-        this.largestWidthLimitDp = largestWidthLimitDp;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setInstallLocation(int installLocation) {
-        this.installLocation = installLocation;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setTargetSandboxVersion(int targetSandboxVersion) {
-        this.targetSandboxVersion = targetSandboxVersion;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setRequiredForAllUsers(boolean requiredForAllUsers) {
-        this.requiredForAllUsers = requiredForAllUsers;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setRestrictedAccountType(String restrictedAccountType) {
-        this.restrictedAccountType = restrictedAccountType;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setRequiredAccountType(String requiredAccountType) {
-        this.requiredAccountType = requiredAccountType;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setBaseHardwareAccelerated(boolean baseHardwareAccelerated) {
-        this.baseHardwareAccelerated = baseHardwareAccelerated;
-
-        this.flags = baseHardwareAccelerated
-                ? this.flags | ApplicationInfo.FLAG_HARDWARE_ACCELERATED
-                : this.flags & ~ApplicationInfo.FLAG_HARDWARE_ACCELERATED;
-
-        return this;
-    }
-
-    @Override
-    public PackageImpl setHasDomainUrls(boolean hasDomainUrls) {
-        this.privateFlags = hasDomainUrls
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setAppMetaData(Bundle appMetaData) {
-        this.appMetaData = appMetaData;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setOverlayTarget(String overlayTarget) {
-        this.overlayTarget = overlayTarget;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setOverlayTargetName(String overlayTargetName) {
-        this.overlayTargetName = overlayTargetName;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setOverlayCategory(String overlayCategory) {
-        this.overlayCategory = overlayCategory;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setOverlayPriority(int overlayPriority) {
-        this.overlayPriority = overlayPriority;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setOverlayIsStatic(boolean overlayIsStatic) {
-        this.overlayIsStatic = overlayIsStatic;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setStaticSharedLibName(String staticSharedLibName) {
-        this.staticSharedLibName = TextUtils.safeIntern(staticSharedLibName);
-        return this;
-    }
-
-    @Override
-    public PackageImpl setStaticSharedLibVersion(long staticSharedLibVersion) {
-        this.staticSharedLibVersion = staticSharedLibVersion;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSharedUserId(String sharedUserId) {
-        this.sharedUserId = TextUtils.safeIntern(sharedUserId);
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSharedUserLabel(int sharedUserLabel) {
-        this.sharedUserLabel = sharedUserLabel;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setRestrictUpdateHash(byte[] restrictUpdateHash) {
-        this.restrictUpdateHash = restrictUpdateHash;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setUpgradeKeySets(ArraySet<String> upgradeKeySets) {
-        this.upgradeKeySets = upgradeKeySets;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setVolumeUuid(String volumeUuid) {
-        this.volumeUuid = volumeUuid;
-        return this;
-    }
-
-    @Deprecated
-    @Override
-    public PackageImpl setApplicationVolumeUuid(String applicationVolumeUuid) {
-        this.applicationVolumeUuid = applicationVolumeUuid;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSigningDetails(PackageParser.SigningDetails signingDetails) {
-        this.signingDetails = signingDetails;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setCodePath(String codePath) {
-        this.codePath = codePath;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setUse32BitAbi(boolean use32BitAbi) {
-        this.use32BitAbi = use32BitAbi;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setCpuAbiOverride(String cpuAbiOverride) {
-        this.cpuAbiOverride = cpuAbiOverride;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setForceQueryable(boolean forceQueryable) {
-        this.forceQueryable = forceQueryable;
-        return this;
-    }
-
-    // TODO(b/135203078): Remove and move PackageManagerService#renameStaticSharedLibraryPackage
-    //  into initial package parsing
-    @Override
-    public PackageImpl setPackageName(String packageName) {
-        this.packageName = packageName.intern();
-
-        if (permissions != null) {
-            for (ParsedPermission permission : permissions) {
-                permission.setPackageName(this.packageName);
-            }
-        }
-
-        if (permissionGroups != null) {
-            for (ParsedPermissionGroup permissionGroup : permissionGroups) {
-                permissionGroup.setPackageName(this.packageName);
-            }
-        }
-
-        if (activities != null) {
-            for (ParsedActivity parsedActivity : activities) {
-                parsedActivity.setPackageName(this.packageName);
-            }
-        }
-
-        if (receivers != null) {
-            for (ParsedActivity receiver : receivers) {
-                receiver.setPackageName(this.packageName);
-            }
-        }
-
-        if (providers != null) {
-            for (ParsedProvider provider : providers) {
-                provider.setPackageName(this.packageName);
-            }
-        }
-
-        if (services != null) {
-            for (ParsedService service : services) {
-                service.setPackageName(this.packageName);
-            }
-        }
-
-        if (instrumentations != null) {
-            for (ParsedInstrumentation instrumentation : instrumentations) {
-                instrumentation.setPackageName(this.packageName);
-            }
-        }
-
-        return this;
-    }
-
-    // Under this is parseBaseApplication
-
-    @Override
-    public PackageImpl setAllowBackup(boolean allowBackup) {
-        this.flags = allowBackup
-                ? this.flags | ApplicationInfo.FLAG_ALLOW_BACKUP
-                : this.flags & ~ApplicationInfo.FLAG_ALLOW_BACKUP;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setKillAfterRestore(boolean killAfterRestore) {
-        this.flags = killAfterRestore
-                ? this.flags | ApplicationInfo.FLAG_KILL_AFTER_RESTORE
-                : this.flags & ~ApplicationInfo.FLAG_KILL_AFTER_RESTORE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setRestoreAnyVersion(boolean restoreAnyVersion) {
-        this.flags = restoreAnyVersion
-                ? this.flags | ApplicationInfo.FLAG_RESTORE_ANY_VERSION
-                : this.flags & ~ApplicationInfo.FLAG_RESTORE_ANY_VERSION;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setFullBackupOnly(boolean fullBackupOnly) {
-        this.flags = fullBackupOnly
-                ? this.flags | ApplicationInfo.FLAG_FULL_BACKUP_ONLY
-                : this.flags & ~ApplicationInfo.FLAG_FULL_BACKUP_ONLY;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setPersistent(boolean persistent) {
-        this.flags = persistent
-                ? this.flags | ApplicationInfo.FLAG_PERSISTENT
-                : this.flags & ~ApplicationInfo.FLAG_PERSISTENT;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setDebuggable(boolean debuggable) {
-        this.flags = debuggable
-                ? this.flags | ApplicationInfo.FLAG_DEBUGGABLE
-                : this.flags & ~ApplicationInfo.FLAG_DEBUGGABLE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setProfileableByShell(boolean profileableByShell) {
-        this.privateFlags = profileableByShell
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_PROFILEABLE_BY_SHELL
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_PROFILEABLE_BY_SHELL;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setVmSafeMode(boolean vmSafeMode) {
-        this.flags = vmSafeMode
-                ? this.flags | ApplicationInfo.FLAG_VM_SAFE_MODE
-                : this.flags & ~ApplicationInfo.FLAG_VM_SAFE_MODE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setHasCode(boolean hasCode) {
-        this.flags = hasCode
-                ? this.flags | ApplicationInfo.FLAG_HAS_CODE
-                : this.flags & ~ApplicationInfo.FLAG_HAS_CODE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setAllowTaskReparenting(boolean allowTaskReparenting) {
-        this.flags = allowTaskReparenting
-                ? this.flags | ApplicationInfo.FLAG_ALLOW_TASK_REPARENTING
-                : this.flags & ~ApplicationInfo.FLAG_ALLOW_TASK_REPARENTING;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setAllowClearUserData(boolean allowClearUserData) {
-        this.flags = allowClearUserData
-                ? this.flags | ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA
-                : this.flags & ~ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setLargeHeap(boolean largeHeap) {
-        this.flags = largeHeap
-                ? this.flags | ApplicationInfo.FLAG_LARGE_HEAP
-                : this.flags & ~ApplicationInfo.FLAG_LARGE_HEAP;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setUsesCleartextTraffic(boolean usesCleartextTraffic) {
-        this.flags = usesCleartextTraffic
-                ? this.flags | ApplicationInfo.FLAG_USES_CLEARTEXT_TRAFFIC
-                : this.flags & ~ApplicationInfo.FLAG_USES_CLEARTEXT_TRAFFIC;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSupportsRtl(boolean supportsRtl) {
-        this.flags = supportsRtl
-                ? this.flags | ApplicationInfo.FLAG_SUPPORTS_RTL
-                : this.flags & ~ApplicationInfo.FLAG_SUPPORTS_RTL;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setTestOnly(boolean testOnly) {
-        this.flags = testOnly
-                ? this.flags | ApplicationInfo.FLAG_TEST_ONLY
-                : this.flags & ~ApplicationInfo.FLAG_TEST_ONLY;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setMultiArch(boolean multiArch) {
-        this.flags = multiArch
-                ? this.flags | ApplicationInfo.FLAG_MULTIARCH
-                : this.flags & ~ApplicationInfo.FLAG_MULTIARCH;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setExtractNativeLibs(boolean extractNativeLibs) {
-        this.flags = extractNativeLibs
-                ? this.flags | ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS
-                : this.flags & ~ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setIsGame(boolean isGame) {
-        this.flags = isGame
-                ? this.flags | ApplicationInfo.FLAG_IS_GAME
-                : this.flags & ~ApplicationInfo.FLAG_IS_GAME;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setBackupInForeground(boolean backupInForeground) {
-        this.privateFlags = backupInForeground
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_BACKUP_IN_FOREGROUND
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_BACKUP_IN_FOREGROUND;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setUseEmbeddedDex(boolean useEmbeddedDex) {
-        this.privateFlags = useEmbeddedDex
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_USE_EMBEDDED_DEX
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_USE_EMBEDDED_DEX;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setDefaultToDeviceProtectedStorage(boolean defaultToDeviceProtectedStorage) {
-        this.privateFlags = defaultToDeviceProtectedStorage
-                ? this.privateFlags | ApplicationInfo
-                        .PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE
-                : this.privateFlags & ~ApplicationInfo
-                        .PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setDirectBootAware(boolean directBootAware) {
-        this.privateFlags = directBootAware
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_DIRECT_BOOT_AWARE
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_DIRECT_BOOT_AWARE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setPartiallyDirectBootAware(boolean partiallyDirectBootAware) {
-        this.privateFlags = partiallyDirectBootAware
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setActivitiesResizeModeResizeableViaSdkVersion(
-            boolean resizeableViaSdkVersion
-    ) {
-        this.privateFlags = resizeableViaSdkVersion
-                ? this.privateFlags | ApplicationInfo
-                        .PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION
-                : this.privateFlags & ~ApplicationInfo
-                        .PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setActivitiesResizeModeResizeable(boolean resizeable) {
-        this.privateFlags = resizeable
-                ? this.privateFlags | ApplicationInfo
-                        .PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE
-                : this.privateFlags & ~ApplicationInfo
-                        .PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE;
-
-        this.privateFlags = !resizeable
-                ? this.privateFlags | ApplicationInfo
-                        .PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE
-                : this.privateFlags & ~ApplicationInfo
-                        .PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setAllowClearUserDataOnFailedRestore(
-            boolean allowClearUserDataOnFailedRestore
-    ) {
-        this.privateFlags = allowClearUserDataOnFailedRestore
-                ? this.privateFlags | ApplicationInfo
-                        .PRIVATE_FLAG_ALLOW_CLEAR_USER_DATA_ON_FAILED_RESTORE
-                : this.privateFlags & ~ApplicationInfo
-                        .PRIVATE_FLAG_ALLOW_CLEAR_USER_DATA_ON_FAILED_RESTORE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setAllowAudioPlaybackCapture(boolean allowAudioPlaybackCapture) {
-        this.privateFlags = allowAudioPlaybackCapture
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setRequestLegacyExternalStorage(boolean requestLegacyExternalStorage) {
-        this.privateFlags = requestLegacyExternalStorage
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setUsesNonSdkApi(boolean usesNonSdkApi) {
-        this.privateFlags = usesNonSdkApi
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_USES_NON_SDK_API
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_USES_NON_SDK_API;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setHasFragileUserData(boolean hasFragileUserData) {
-        this.privateFlags = hasFragileUserData
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_HAS_FRAGILE_USER_DATA
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_HAS_FRAGILE_USER_DATA;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setCantSaveState(boolean cantSaveState) {
-        this.privateFlags = cantSaveState
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE;
-        return this;
-    }
-
-    @Override
-    public boolean cantSaveState() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0;
-    }
-
-    @Override
-    public boolean isLibrary() {
-        return staticSharedLibName != null || !ArrayUtils.isEmpty(libraryNames);
-    }
-
-    // TODO(b/135203078): This does nothing until the final stage without applyPolicy being
-    //  part of PackageParser
-    @Override
-    public boolean isSystemApp() {
-        return (flags & ApplicationInfo.FLAG_SYSTEM) != 0;
-    }
-
-    // TODO(b/135203078): This does nothing until the final stage without applyPolicy being
-    //  part of PackageParser
-    @Override
-    public boolean isSystemExt() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT) != 0;
-    }
-
-    // TODO(b/135203078): This does nothing until the final stage without applyPolicy being
-    //  part of PackageParser
-    @Override
-    public boolean isUpdatedSystemApp() {
-        return (flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
-    }
-
-    @Override
-    public PackageImpl setStaticSharedLibrary(boolean staticSharedLibrary) {
-        this.privateFlags = staticSharedLibrary
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_STATIC_SHARED_LIBRARY
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_STATIC_SHARED_LIBRARY;
-        return this;
-    }
-
-    @Override
-    public boolean isStaticSharedLibrary() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_STATIC_SHARED_LIBRARY) != 0;
-    }
-
-    @Override
-    public PackageImpl setVisibleToInstantApps(boolean visibleToInstantApps) {
-        this.visibleToInstantApps = visibleToInstantApps;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setIconRes(int iconRes) {
-        this.iconRes = iconRes;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setRoundIconRes(int roundIconRes) {
-        this.roundIconRes = roundIconRes;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setClassName(String className) {
-        this.className = className;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setManageSpaceActivityName(String manageSpaceActivityName) {
-        this.manageSpaceActivityName = manageSpaceActivityName;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setBackupAgentName(String backupAgentName) {
-        this.backupAgentName = backupAgentName;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setFullBackupContent(int fullBackupContent) {
-        this.fullBackupContent = fullBackupContent;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setTheme(int theme) {
-        this.theme = theme;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setDescriptionRes(int descriptionRes) {
-        this.descriptionRes = descriptionRes;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setNetworkSecurityConfigRes(int networkSecurityConfigRes) {
-        this.networkSecurityConfigRes = networkSecurityConfigRes;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setCategory(int category) {
-        this.category = category;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setPermission(String permission) {
-        this.permission = permission;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setTaskAffinity(String taskAffinity) {
-        this.taskAffinity = taskAffinity;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setAppComponentFactory(String appComponentFactory) {
-        this.appComponentFactory = appComponentFactory;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setProcessName(String processName) {
-        if (processName == null) {
-            this.processName = packageName;
-        } else {
-            this.processName = processName;
-        }
-        return this;
-    }
-
-    @Override
-    public PackageImpl setEnabled(boolean enabled) {
-        this.enabled = enabled;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setCrossProfile(boolean crossProfile) {
-        this.crossProfile = crossProfile;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setUiOptions(int uiOptions) {
-        this.uiOptions = uiOptions;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setClassLoaderName(String classLoaderName) {
-        this.classLoaderName = classLoaderName;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setZygotePreloadName(String zygotePreloadName) {
-        this.zygotePreloadName = zygotePreloadName;
-        return this;
-    }
-
-    // parsePackageItemInfo
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public PackageImpl setName(String name) {
-        this.name = name;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setIcon(int icon) {
-        this.icon = icon;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setNonLocalizedLabel(CharSequence nonLocalizedLabel) {
-        this.nonLocalizedLabel = nonLocalizedLabel;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setLogo(int logo) {
-        this.logo = logo;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setBanner(int banner) {
-        this.banner = banner;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setLabelRes(int labelRes) {
-        this.labelRes = labelRes;
-        return this;
-    }
-
-    @Override
-    public PackageImpl asSplit(
-            String[] splitNames,
-            String[] splitCodePaths,
-            int[] splitRevisionCodes,
-            SparseArray<int[]> splitDependencies
-    ) {
-        this.splitNames = splitNames;
-
-        if (this.splitNames != null) {
-            for (int index = 0; index < this.splitNames.length; index++) {
-                splitNames[index] = TextUtils.safeIntern(splitNames[index]);
-            }
-        }
-
-        this.splitCodePaths = splitCodePaths;
-        this.splitRevisionCodes = splitRevisionCodes;
-        this.splitDependencies = splitDependencies;
-
-        int count = splitNames.length;
-        this.splitFlags = new int[count];
-        this.splitClassLoaderNames = new String[count];
-        return this;
-    }
-
-    @Override
-    public String[] getSplitNames() {
-        return splitNames;
-    }
-
-    @Override
-    public String[] getSplitCodePaths() {
-        return splitCodePaths;
-    }
-
-    @Override
-    public PackageImpl setSplitHasCode(int splitIndex, boolean splitHasCode) {
-        this.splitFlags[splitIndex] = splitHasCode
-                ? this.splitFlags[splitIndex] | ApplicationInfo.FLAG_HAS_CODE
-                : this.splitFlags[splitIndex] & ~ApplicationInfo.FLAG_HAS_CODE;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSplitClassLoaderName(int splitIndex, String classLoaderName) {
-        this.splitClassLoaderNames[splitIndex] = classLoaderName;
-        return this;
-    }
-
-    @Override
-    public List<String> makeListAllCodePaths() {
-        ArrayList<String> paths = new ArrayList<>();
-        paths.add(baseCodePath);
-
-        if (!ArrayUtils.isEmpty(splitCodePaths)) {
-            Collections.addAll(paths, splitCodePaths);
-        }
-        return paths;
-    }
-
-    @Override
-    public PackageImpl setBaseCodePath(String baseCodePath) {
-        this.baseCodePath = baseCodePath;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSplitCodePaths(String[] splitCodePaths) {
-        this.splitCodePaths = splitCodePaths;
-        return this;
-    }
-
-    @Override
-    public String toString() {
-        return "Package{"
-                + Integer.toHexString(System.identityHashCode(this))
-                + " " + packageName + "}";
-    }
-
-    @Override
-    public PackageImpl setPrimaryCpuAbi(String primaryCpuAbi) {
-        this.primaryCpuAbi = primaryCpuAbi;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSecondaryCpuAbi(String secondaryCpuAbi) {
-        this.secondaryCpuAbi = secondaryCpuAbi;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setNativeLibraryRootDir(String nativeLibraryRootDir) {
-        this.nativeLibraryRootDir = nativeLibraryRootDir;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setNativeLibraryRootRequiresIsa(boolean nativeLibraryRootRequiresIsa) {
-        this.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setNativeLibraryDir(String nativeLibraryDir) {
-        this.nativeLibraryDir = nativeLibraryDir;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSecondaryNativeLibraryDir(String secondaryNativeLibraryDir) {
-        this.secondaryNativeLibraryDir = secondaryNativeLibraryDir;
-        return this;
-    }
-
-    @Deprecated
-    @Override
-    public PackageImpl setApplicationInfoCodePath(String applicationInfoCodePath) {
-        this.applicationInfoCodePath = applicationInfoCodePath;
-        return this;
-    }
-
-    @Deprecated
-    @Override
-    public PackageImpl setApplicationInfoResourcePath(String applicationInfoResourcePath) {
-        this.applicationInfoResourcePath = applicationInfoResourcePath;
-        return this;
-    }
-
-    @Deprecated
-    @Override
-    public PackageImpl setApplicationInfoBaseResourcePath(
-            String applicationInfoBaseResourcePath) {
-        this.applicationInfoBaseResourcePath = applicationInfoBaseResourcePath;
-        return this;
-    }
-
-    @Deprecated
-    @Override
-    public PackageImpl setApplicationInfoSplitResourcePaths(
-            String[] applicationInfoSplitResourcePaths) {
-        this.applicationInfoSplitResourcePaths = applicationInfoSplitResourcePaths;
-        return this;
-    }
-
-    @Override
-    public boolean isDirectBootAware() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_DIRECT_BOOT_AWARE) != 0;
-    }
-
-    @Override
-    public PackageImpl setAllComponentsDirectBootAware(boolean allComponentsDirectBootAware) {
-        if (activities != null) {
-            for (ParsedActivity parsedActivity : activities) {
-                parsedActivity.directBootAware = allComponentsDirectBootAware;
-            }
-        }
-
-        if (receivers != null) {
-            for (ParsedActivity parsedReceiver : receivers) {
-                parsedReceiver.directBootAware = allComponentsDirectBootAware;
-            }
-        }
-
-        if (providers != null) {
-            for (ParsedProvider parsedProvider : providers) {
-                parsedProvider.directBootAware = allComponentsDirectBootAware;
-            }
-        }
-
-        if (services != null) {
-            for (ParsedService parsedService : services) {
-                parsedService.directBootAware = allComponentsDirectBootAware;
-            }
-        }
-
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSystem(boolean system) {
-        this.flags = system
-                ? this.flags | ApplicationInfo.FLAG_SYSTEM
-                : this.flags & ~ApplicationInfo.FLAG_SYSTEM;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSystemExt(boolean systemExt) {
-        this.privateFlags = systemExt
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setIsStub(boolean isStub) {
-        this.isStub = isStub;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setCoreApp(boolean coreApp) {
-        this.coreApp = coreApp;
-        return this;
-    }
-
-    @Override
-    public ParsedPackage capPermissionPriorities() {
-        if (permissionGroups != null && !permissionGroups.isEmpty()) {
-            for (int i = permissionGroups.size() - 1; i >= 0; --i) {
-                // TODO(b/135203078): Builder/immutability
-                permissionGroups.get(i).priority = 0;
-            }
-        }
-        return this;
-    }
-
-    @Override
-    public ParsedPackage clearProtectedBroadcasts() {
-        if (protectedBroadcasts != null) {
-            protectedBroadcasts.clear();
-        }
-        return this;
-    }
-
-    @Override
-    public ParsedPackage markNotActivitiesAsNotExportedIfSingleUser() {
-        // ignore export request for single user receivers
-        if (receivers != null) {
-            for (ParsedActivity receiver : receivers) {
-                if ((receiver.flags & ActivityInfo.FLAG_SINGLE_USER) != 0) {
-                    receiver.exported = false;
-                }
-            }
-        }
-        // ignore export request for single user services
-        if (services != null) {
-            for (ParsedService service : services) {
-                if ((service.flags & ServiceInfo.FLAG_SINGLE_USER) != 0) {
-                    service.exported = false;
-                }
-            }
-        }
-        // ignore export request for single user providers
-        if (providers != null) {
-            for (ParsedProvider provider : providers) {
-                if ((provider.flags & ProviderInfo.FLAG_SINGLE_USER) != 0) {
-                    provider.exported = false;
-                }
-            }
-        }
-
-        return this;
-    }
-
-    @Override
-    public ParsedPackage setPrivileged(boolean privileged) {
-        this.privateFlags = privileged
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_PRIVILEGED
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_PRIVILEGED;
-        return this;
-    }
-
-    @Override
-    public ParsedPackage setOem(boolean oem) {
-        this.privateFlags = oem
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_OEM
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_OEM;
-        return this;
-    }
-
-    @Override
-    public ParsedPackage setVendor(boolean vendor) {
-        this.privateFlags = vendor
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_VENDOR
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_VENDOR;
-        return this;
-    }
-
-    @Override
-    public ParsedPackage setProduct(boolean product) {
-        this.privateFlags = product
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_PRODUCT
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_PRODUCT;
-        return this;
-    }
-
-    @Override
-    public ParsedPackage setOdm(boolean odm) {
-        this.privateFlags = odm
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_ODM
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_ODM;
-        return this;
-    }
-
-    @Override
-    public ParsedPackage setSignedWithPlatformKey(boolean signedWithPlatformKey) {
-        this.privateFlags = signedWithPlatformKey
-                ? this.privateFlags | ApplicationInfo.PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY
-                : this.privateFlags & ~ApplicationInfo.PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY;
-        return this;
-    }
-
-    @Override
-    public ParsedPackage clearOriginalPackages() {
-        if (originalPackages != null) {
-            originalPackages.clear();
-        }
-        return this;
-    }
-
-    @Override
-    public ParsedPackage clearAdoptPermissions() {
-        if (adoptPermissions != null) {
-            adoptPermissions.clear();
-        }
-        return this;
-    }
-
-    @Override
-    public PackageImpl addUsesLibrary(int index, String libraryName) {
-        this.usesLibraries = ArrayUtils.add(usesLibraries, index, libraryName);
-        return this;
-    }
-
-    @Override
-    public ParsedPackage removeUsesLibrary(String libraryName) {
-        this.usesLibraries = ArrayUtils.remove(this.usesLibraries, libraryName);
-        return this;
-    }
-
-    @Override
-    public PackageImpl addUsesOptionalLibrary(int index, String libraryName) {
-        this.usesOptionalLibraries = ArrayUtils.add(usesOptionalLibraries, index, libraryName);
-        return this;
-    }
-
-    @Nullable
-    @Override
-    public List<String> getUsesOptionalLibraries() {
-        return usesOptionalLibraries;
-    }
-
-    @Override
-    public int getVersionCode() {
-        return versionCode;
-    }
-
-    @Nullable
-    @Override
-    public long[] getUsesStaticLibrariesVersions() {
-        return usesStaticLibrariesVersions;
-    }
-
-    @Override
-    public PackageImpl setPackageSettingCallback(PackageSettingCallback packageSettingCallback) {
-        packageSettingCallback.setAndroidPackage(this);
-        return this;
-    }
-
-    @Override
-    public PackageImpl setUpdatedSystemApp(boolean updatedSystemApp) {
-        this.flags = updatedSystemApp
-                ? this.flags | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP
-                : this.flags & ~ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
-        return this;
-    }
-
-    @Override
-    public boolean isPrivileged() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0;
-    }
-
-    @Override
-    public PackageImpl setSeInfo(String seInfo) {
-        this.seInfo = seInfo;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setSeInfoUser(String seInfoUser) {
-        this.seInfoUser = seInfoUser;
-        return this;
-    }
-
-    @Override
-    public PackageImpl initForUser(int userId) {
-        // TODO(b/135203078): Move this user state to some other data structure
-        this.uid = UserHandle.getUid(userId, UserHandle.getAppId(this.uid));
-
-        if ("android".equals(packageName)) {
-            dataDir = Environment.getDataSystemDirectory().getAbsolutePath();
-            return this;
-        }
-
-        deviceProtectedDataDir = Environment
-                .getDataUserDePackageDirectory(applicationVolumeUuid, userId, packageName)
-                .getAbsolutePath();
-        credentialProtectedDataDir = Environment
-                .getDataUserCePackageDirectory(applicationVolumeUuid, userId, packageName)
-                .getAbsolutePath();
-
-        if ((privateFlags & ApplicationInfo.PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE) != 0
-                && PackageManager.APPLY_DEFAULT_TO_DEVICE_PROTECTED_STORAGE) {
-            dataDir = deviceProtectedDataDir;
-        } else {
-            dataDir = credentialProtectedDataDir;
-        }
-        return this;
-    }
-
-    @Override
-    public ParsedPackage setFactoryTest(boolean factoryTest) {
-        this.flags = factoryTest
-                ? this.flags | ApplicationInfo.FLAG_FACTORY_TEST
-                : this.flags & ~ApplicationInfo.FLAG_FACTORY_TEST;
-        return this;
-    }
-
-    @Override
-    public String getManifestPackageName() {
-        return manifestPackageName;
-    }
-
-    @Override
-    public String getRealPackage() {
-        return realPackage;
-    }
-
-    @Override
-    public String getOverlayTarget() {
-        return overlayTarget;
-    }
-
-    @Override
-    public String getOverlayTargetName() {
-        return overlayTargetName;
-    }
-
-    @Override
-    public Map<String, String> getOverlayables() {
-        return overlayables;
-    }
-
-    @Override
-    public boolean isOverlayIsStatic() {
-        return overlayIsStatic;
-    }
-
-    @Override
-    public int[] getSplitFlags() {
-        return splitFlags;
-    }
-
-    @Deprecated
-    @Override
-    public String getApplicationInfoVolumeUuid() {
-        return applicationVolumeUuid;
-    }
-
-    @Nullable
-    @Override
-    public List<String> getProtectedBroadcasts() {
-        return protectedBroadcasts;
-    }
-
-    @Nullable
-    @Override
-    public Set<String> getUpgradeKeySets() {
-        return upgradeKeySets;
-    }
-
-    @Nullable
-    @Override
-    public String[][] getUsesStaticLibrariesCertDigests() {
-        return usesStaticLibrariesCertDigests;
-    }
-
-    @Override
-    public int getOverlayPriority() {
-        return overlayPriority;
-    }
-
-    @Deprecated
-    @Override
-    public String getAppInfoPackageName() {
-        return packageName;
-    }
-
-    @Override
-    public UUID getStorageUuid() {
-        return StorageManager.convert(applicationVolumeUuid);
-    }
-
-    @Override
-    public int getUid() {
-        return uid;
-    }
-
-    @Override
-    public boolean isStub() {
-        return isStub;
-    }
-
-    @Deprecated
-    @Override
-    public String getAppInfoCodePath() {
-        return applicationInfoCodePath;
-    }
-
-    @Override
-    public boolean isSystem() {
-        return (flags & ApplicationInfo.FLAG_SYSTEM) != 0;
-    }
-
-    @Override
-    public boolean isMatch(int flags) {
-        if ((flags & PackageManager.MATCH_SYSTEM_ONLY) != 0) {
-            return isSystem();
-        }
-        return true;
-    }
-
-    @Override
-    public boolean isVisibleToInstantApps() {
-        return visibleToInstantApps;
-    }
-
-    @Override
-    public PackageImpl setLastPackageUsageTimeInMills(int reason, long time) {
-        lastPackageUsageTimeInMills[reason] = time;
-        return this;
-    }
-
-    @Override
-    public List<SharedLibraryInfo> getUsesLibraryInfos() {
-        return usesLibraryInfos;
-    }
-
-    @NonNull
-    @Override
-    public List<String> getAllCodePaths() {
-        return makeListAllCodePaths();
-    }
-
-    @Nullable
-    @Override
-    public String[] getUsesLibraryFiles() {
-        return usesLibraryFiles;
-    }
-
-    @Override
-    public PackageImpl setUsesLibraryInfos(
-            @Nullable List<SharedLibraryInfo> usesLibraryInfos) {
-        this.usesLibraryInfos = usesLibraryInfos;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setUsesLibraryFiles(@Nullable String[] usesLibraryFiles) {
-        this.usesLibraryFiles = usesLibraryFiles;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setUid(int uid) {
-        this.uid = uid;
-        return this;
-    }
-
-    @Override
-    public List<String> getAdoptPermissions() {
-        return adoptPermissions;
-    }
-
-    @Override
-    public ApplicationInfo toAppInfoWithoutState() {
-        updateFlags();
-
-        ApplicationInfo appInfo = new ApplicationInfo();
-        appInfo.packageName = packageName;
-        appInfo.flags = flags;
-        appInfo.privateFlags = privateFlags;
-
-        appInfo.appComponentFactory = appComponentFactory;
-        appInfo.backupAgentName = backupAgentName;
-        appInfo.banner = banner;
-        appInfo.category = category;
-        appInfo.classLoaderName = classLoaderName;
-        appInfo.className = className;
-        appInfo.compatibleWidthLimitDp = compatibleWidthLimitDp;
-        appInfo.compileSdkVersion = compileSdkVersion;
-        appInfo.compileSdkVersionCodename = compileSdkVersionCodename;
-        appInfo.credentialProtectedDataDir = credentialProtectedDataDir;
-        appInfo.dataDir = dataDir;
-        appInfo.descriptionRes = descriptionRes;
-        appInfo.deviceProtectedDataDir = deviceProtectedDataDir;
-        appInfo.enabled = enabled;
-        appInfo.fullBackupContent = fullBackupContent;
-        appInfo.hiddenUntilInstalled = hiddenUntilInstalled;
-        appInfo.icon = icon;
-        appInfo.iconRes = iconRes;
-        appInfo.installLocation = installLocation;
-        appInfo.labelRes = labelRes;
-        appInfo.largestWidthLimitDp = largestWidthLimitDp;
-        appInfo.logo = logo;
-        appInfo.manageSpaceActivityName = manageSpaceActivityName;
-        appInfo.maxAspectRatio = maxAspectRatio;
-        appInfo.metaData = appMetaData;
-        appInfo.minAspectRatio = minAspectRatio;
-        appInfo.minSdkVersion = minSdkVersion;
-        appInfo.name = className;
-        if (appInfo.name != null) {
-            appInfo.name = appInfo.name.trim();
-        }
-        appInfo.nativeLibraryDir = nativeLibraryDir;
-        appInfo.nativeLibraryRootDir = nativeLibraryRootDir;
-        appInfo.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa;
-        appInfo.networkSecurityConfigRes = networkSecurityConfigRes;
-        appInfo.nonLocalizedLabel = nonLocalizedLabel;
-        if (appInfo.nonLocalizedLabel != null) {
-            appInfo.nonLocalizedLabel = appInfo.nonLocalizedLabel.toString().trim();
-        }
-        appInfo.packageName = packageName;
-        appInfo.permission = permission;
-        appInfo.primaryCpuAbi = primaryCpuAbi;
-        appInfo.processName = getProcessName();
-        appInfo.requiresSmallestWidthDp = requiresSmallestWidthDp;
-        appInfo.roundIconRes = roundIconRes;
-        appInfo.secondaryCpuAbi = secondaryCpuAbi;
-        appInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir;
-        appInfo.seInfo = seInfo;
-        appInfo.seInfoUser = seInfoUser;
-        appInfo.sharedLibraryFiles = usesLibraryFiles;
-        appInfo.sharedLibraryInfos = ArrayUtils.isEmpty(usesLibraryInfos) ? null : usesLibraryInfos;
-        appInfo.splitClassLoaderNames = splitClassLoaderNames;
-        appInfo.splitDependencies = splitDependencies;
-        appInfo.splitNames = splitNames;
-        appInfo.storageUuid = StorageManager.convert(volumeUuid);
-        appInfo.targetSandboxVersion = targetSandboxVersion;
-        appInfo.targetSdkVersion = targetSdkVersion;
-        appInfo.taskAffinity = taskAffinity;
-        appInfo.theme = theme;
-        appInfo.uid = uid;
-        appInfo.uiOptions = uiOptions;
-        appInfo.volumeUuid = volumeUuid;
-        appInfo.zygotePreloadName = zygotePreloadName;
-        appInfo.crossProfile = isCrossProfile();
-
-        appInfo.setBaseCodePath(baseCodePath);
-        appInfo.setBaseResourcePath(baseCodePath);
-        appInfo.setCodePath(codePath);
-        appInfo.setResourcePath(codePath);
-        appInfo.setSplitCodePaths(splitCodePaths);
-        appInfo.setSplitResourcePaths(splitCodePaths);
-        appInfo.setVersionCode(getLongVersionCode());
-
-        // TODO(b/135203078): Can this be removed? Looks only used in ActivityInfo.
-//        appInfo.showUserIcon = pkg.getShowUserIcon();
-        // TODO(b/135203078): Unused?
-//        appInfo.resourceDirs = pkg.getResourceDirs();
-        // TODO(b/135203078): Unused?
-//        appInfo.enabledSetting = pkg.getEnabledSetting();
-        // TODO(b/135203078): See PackageImpl#getHiddenApiEnforcementPolicy
-//        appInfo.mHiddenApiPolicy = pkg.getHiddenApiPolicy();
-
-        return appInfo;
-    }
-
-    @Override
-    public PackageImpl setVersionCode(int versionCode) {
-        this.versionCode = versionCode;
-        return this;
-    }
-
-    @Override
-    public PackageImpl setHiddenUntilInstalled(boolean hidden) {
-        this.hiddenUntilInstalled = hidden;
-        return this;
-    }
-
-    @Override
-    public String getSeInfo() {
-        return seInfo;
-    }
-
-    @Deprecated
-    @Override
-    public String getAppInfoResourcePath() {
-        return applicationInfoResourcePath;
-    }
-
-    @Override
-    public boolean isForwardLocked() {
-        // TODO(b/135203078): Unused? Move to debug flag?
-        return false;
-    }
-
-    @Override
-    public byte[] getRestrictUpdateHash() {
-        return restrictUpdateHash;
-    }
-
-    @Override
-    public boolean hasComponentClassName(String className) {
-        if (activities != null) {
-            for (ParsedActivity parsedActivity : activities) {
-                if (Objects.equals(className, parsedActivity.className)) {
-                    return true;
-                }
-            }
-        }
-
-        if (receivers != null) {
-            for (ParsedActivity receiver : receivers) {
-                if (Objects.equals(className, receiver.className)) {
-                    return true;
-                }
-            }
-        }
-
-        if (providers != null) {
-            for (ParsedProvider provider : providers) {
-                if (Objects.equals(className, provider.className)) {
-                    return true;
-                }
-            }
-        }
-
-        if (services != null) {
-            for (ParsedService service : services) {
-                if (Objects.equals(className, service.className)) {
-                    return true;
-                }
-            }
-        }
-
-        if (instrumentations != null) {
-            for (ParsedInstrumentation instrumentation : instrumentations) {
-                if (Objects.equals(className, instrumentation.className)) {
-                    return true;
-                }
-            }
-        }
-
-        return false;
-    }
-
-    @Override
-    public boolean isDefaultToDeviceProtectedStorage() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE)
-                != 0;
-    }
-
-    @Override
-    public boolean isInternal() {
-        return (flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == 0;
-    }
-
-    @Override
-    public int getBaseRevisionCode() {
-        return baseRevisionCode;
-    }
-
-    @Override
-    public int[] getSplitRevisionCodes() {
-        return splitRevisionCodes;
-    }
-
-    @Override
-    public boolean canHaveOatDir() {
-        // The following app types CANNOT have oat directory
-        // - non-updated system apps
-        return !isSystem() || isUpdatedSystemApp();
-    }
-
-    @Override
-    public long getLatestPackageUseTimeInMills() {
-        long latestUse = 0L;
-        for (long use : lastPackageUsageTimeInMills) {
-            latestUse = Math.max(latestUse, use);
-        }
-        return latestUse;
-    }
-
-    @Override
-    public long getLatestForegroundPackageUseTimeInMills() {
-        int[] foregroundReasons = {
-                PackageManager.NOTIFY_PACKAGE_USE_ACTIVITY,
-                PackageManager.NOTIFY_PACKAGE_USE_FOREGROUND_SERVICE
-        };
-
-        long latestUse = 0L;
-        for (int reason : foregroundReasons) {
-            latestUse = Math.max(latestUse, lastPackageUsageTimeInMills[reason]);
-        }
-        return latestUse;
-    }
-
-    @Override
-    public boolean isCoreApp() {
-        return coreApp;
-    }
-
-    @Override
-    public String getVersionName() {
-        return versionName;
-    }
-
-    @Override
-    public PackageImpl setVersionCodeMajor(int versionCodeMajor) {
-        this.versionCodeMajor = versionCodeMajor;
-        return this;
-    }
-
-    @Override
-    public long[] getLastPackageUsageTimeInMills() {
-        return lastPackageUsageTimeInMills;
-    }
-
-    @Override
-    public String getDataDir() {
-        return dataDir;
-    }
-
-    @Override
-    public boolean isExternal() {
-        return (flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
-    }
-
-    @Override
-    public List<String> getImplicitPermissions() {
-        return implicitPermissions == null ? Collections.emptyList() : implicitPermissions;
-    }
-
-    /**
-     * TODO(b/135203078): Remove, ensure b/140256621 is fixed or irrelevant
-     * TODO(b/140256621): Remove after fixing instant app check
-     * @deprecated This method always returns false because there's no paired set method
-     */
-    @Deprecated
-    @Override
-    public boolean isInstantApp() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_INSTANT) != 0;
-    }
-
-    @Override
-    public boolean hasRequestedLegacyExternalStorage() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE) != 0;
-    }
-
-    @Override
-    public boolean isVendor() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_VENDOR) != 0;
-    }
-
-    @Override
-    public boolean isProduct() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_PRODUCT) != 0;
-    }
-
-    @Override
-    public boolean isOem() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_OEM) != 0;
-    }
-
-    @Override
-    public boolean isEncryptionAware() {
-        boolean isPartiallyDirectBootAware =
-                (privateFlags & ApplicationInfo.PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE) != 0;
-        return isDirectBootAware() || isPartiallyDirectBootAware;
-    }
-
-    @Override
-    public boolean isEmbeddedDexUsed() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_USE_EMBEDDED_DEX) != 0;
-    }
-
-    @Deprecated
-    @Override
-    public String getAppInfoProcessName() {
-        return processName;
-    }
-
-    @Override
-    public List<String> getAllCodePathsExcludingResourceOnly() {
-        ArrayList<String> paths = new ArrayList<>();
-        if ((flags & ApplicationInfo.FLAG_HAS_CODE) != 0) {
-            paths.add(baseCodePath);
-        }
-        if (!ArrayUtils.isEmpty(splitCodePaths)) {
-            for (int i = 0; i < splitCodePaths.length; i++) {
-                if ((splitFlags[i] & ApplicationInfo.FLAG_HAS_CODE) != 0) {
-                    paths.add(splitCodePaths[i]);
-                }
-            }
-        }
-        return paths;
-    }
-
-    @Deprecated
-    @Override
-    public String getAppInfoName() {
-        return name;
-    }
-
-    private boolean isSignedWithPlatformKey() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY) != 0;
-    }
-
-    private boolean usesNonSdkApi() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_USES_NON_SDK_API) != 0;
-    }
-
-    private boolean isPackageWhitelistedForHiddenApis() {
-        return SystemConfig.getInstance().getHiddenApiWhitelistedApps().contains(packageName);
-    }
-
-    private boolean isAllowedToUseHiddenApis() {
-        if (isSignedWithPlatformKey()) {
-            return true;
-        } else if (isSystemApp() || isUpdatedSystemApp()) {
-            return usesNonSdkApi() || isPackageWhitelistedForHiddenApis();
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    public int getHiddenApiEnforcementPolicy() {
-        if (isAllowedToUseHiddenApis()) {
-            return ApplicationInfo.HIDDEN_API_ENFORCEMENT_DISABLED;
-        }
-
-        // TODO(b/135203078): Handle maybeUpdateHiddenApiEnforcementPolicy. Right now it's done
-        //  entirely through ApplicationInfo and shouldn't touch this specific class, but that
-        //  may not always hold true.
-//        if (mHiddenApiPolicy != ApplicationInfo.HIDDEN_API_ENFORCEMENT_DEFAULT) {
-//            return mHiddenApiPolicy;
-//        }
-        return ApplicationInfo.HIDDEN_API_ENFORCEMENT_ENABLED;
-    }
-
-    @Nullable
-    @Override
-    public SparseArray<int[]> getSplitDependencies() {
-        return splitDependencies;
-    }
-
-    @Override
-    public boolean requestsIsolatedSplitLoading() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_ISOLATED_SPLIT_LOADING) != 0;
-    }
-
-    @Deprecated
-    @Override
-    public String getAppInfoClassLoaderName() {
-        return classLoaderName;
-    }
-
-    @Override
-    public String getClassLoaderName() {
-        return classLoaderName;
-    }
-
-    @Override
-    public String[] getSplitClassLoaderNames() {
-        return splitClassLoaderNames;
-    }
-
-    @Override
-    public String getOverlayCategory() {
-        return overlayCategory;
-    }
-
-    @Override
-    public boolean isProfileableByShell() {
-        return (privateFlags & ApplicationInfo.PRIVATE_FLAG_PROFILEABLE_BY_SHELL) != 0;
-    }
-
-    @Nullable
-    @Override
-    public List<ParsedActivityIntentInfo> getPreferredActivityFilters() {
-        return preferredActivityFilters;
-    }
-
-    @Override
-    public boolean isHiddenUntilInstalled() {
-        return hiddenUntilInstalled;
-    }
-
-    @Override
-    public int getMinSdkVersion() {
-        return minSdkVersion;
-    }
-
-    @Override
-    public String getRestrictedAccountType() {
-        return restrictedAccountType;
-    }
-
-    @Override
-    public String getRequiredAccountType() {
-        return requiredAccountType;
-    }
-
-    @Override
-    public int getInstallLocation() {
-        return installLocation;
-    }
-
-    @Override
-    public List<ParsedActivity> getReceivers() {
-        return receivers;
-    }
-
-    @Override
-    public List<ParsedService> getServices() {
-        return services;
-    }
-
-    @Override
-    public List<ParsedProvider> getProviders() {
-        return providers;
-    }
-
-    @Override
-    public int getSharedUserLabel() {
-        return sharedUserLabel;
-    }
-
-    @Override
-    public int getVersionCodeMajor() {
-        return versionCodeMajor;
-    }
-
-    @Override
-    public boolean isRequiredForAllUsers() {
-        return requiredForAllUsers;
-    }
-
-    @Override
-    public int getCompileSdkVersion() {
-        return compileSdkVersion;
-    }
-
-    @Override
-    public String getCompileSdkVersionCodeName() {
-        return compileSdkVersionCodename;
-    }
-
-    @Nullable
-    @Override
-    public List<ConfigurationInfo> getConfigPreferences() {
-        return configPreferences;
-    }
-
-    @Nullable
-    @Override
-    public List<FeatureInfo> getReqFeatures() {
-        return reqFeatures;
-    }
-
-    @Override
-    public List<FeatureGroupInfo> getFeatureGroups() {
-        return featureGroups;
-    }
-
-    @Override
-    public String getDeviceProtectedDataDir() {
-        return deviceProtectedDataDir;
-    }
-
-    @Override
-    public String getCredentialProtectedDataDir() {
-        return credentialProtectedDataDir;
-    }
-
-    @Override
-    public String getSeInfoUser() {
-        return seInfoUser;
-    }
-
-    @Override
-    public String getClassName() {
-        return className;
-    }
-
-    @Override
-    public int getTheme() {
-        return theme;
-    }
-
-    @Override
-    public int getRequiresSmallestWidthDp() {
-        return requiresSmallestWidthDp;
-    }
-
-    @Override
-    public int getCompatibleWidthLimitDp() {
-        return compatibleWidthLimitDp;
-    }
-
-    @Override
-    public int getLargestWidthLimitDp() {
-        return largestWidthLimitDp;
-    }
-
-    @Override
-    public String getScanSourceDir() {
-        return applicationInfoCodePath;
-    }
-
-    @Override
-    public String getScanPublicSourceDir() {
-        return applicationInfoResourcePath;
-    }
-
-    @Override
-    public String getPublicSourceDir() {
-        return applicationInfoBaseResourcePath;
-    }
-
-    @Override
-    public String[] getSplitPublicSourceDirs() {
-        return applicationInfoSplitResourcePaths;
-    }
-
-    @Override
-    public String getSecondaryNativeLibraryDir() {
-        return secondaryNativeLibraryDir;
-    }
-
-    @Override
-    public boolean isEnabled() {
-        return enabled;
-    }
-
-    @Override
-    public boolean isCrossProfile() {
-        return crossProfile;
-    }
-
-    @Override
-    public String getManageSpaceActivityName() {
-        return manageSpaceActivityName;
-    }
-
-    @Override
-    public int getDescriptionRes() {
-        return descriptionRes;
-    }
-
-    @Override
-    public String getBackupAgentName() {
-        return backupAgentName;
-    }
-
-    @Override
-    public int getFullBackupContent() {
-        return fullBackupContent;
-    }
-
-    @Override
-    public int getNetworkSecurityConfigRes() {
-        return networkSecurityConfigRes;
-    }
-
-    @Override
-    public int getCategory() {
-        return category;
-    }
-
-    @Override
-    public int getTargetSandboxVersion() {
-        return targetSandboxVersion;
-    }
-
-    @Override
-    public String getAppComponentFactory() {
-        return appComponentFactory;
-    }
-
-    @Override
-    public int getIconRes() {
-        return iconRes;
-    }
-
-    @Override
-    public int getRoundIconRes() {
-        return roundIconRes;
-    }
-
-    @Override
-    public String getZygotePreloadName() {
-        return zygotePreloadName;
-    }
-
-    @Override
-    public int getLabelRes() {
-        return labelRes;
-    }
-
-    @Override
-    public CharSequence getNonLocalizedLabel() {
-        return nonLocalizedLabel;
-    }
-
-    @Override
-    public int getIcon() {
-        return icon;
-    }
-
-    @Override
-    public int getBanner() {
-        return banner;
-    }
-
-    @Override
-    public int getLogo() {
-        return logo;
-    }
-
-    @Override
-    public Bundle getMetaData() {
-        return appMetaData;
-    }
-
-    @Override
-    @Nullable
-    public List<Intent> getQueriesIntents() {
-        return queriesIntents;
-    }
-
-    @Override
-    @Nullable
-    public List<String> getQueriesPackages() {
-        return queriesPackages;
-    }
-
-    private static void internStringArrayList(List<String> list) {
-        if (list != null) {
-            final int N = list.size();
-            for (int i = 0; i < N; ++i) {
-                list.set(i, list.get(i).intern());
-            }
-        }
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeInt(this.supportsSmallScreens);
-        dest.writeInt(this.supportsNormalScreens);
-        dest.writeInt(this.supportsLargeScreens);
-        dest.writeInt(this.supportsXLargeScreens);
-        dest.writeInt(this.resizeable);
-        dest.writeInt(this.anyDensity);
-        dest.writeLongArray(this.lastPackageUsageTimeInMills);
-        dest.writeInt(this.versionCode);
-        dest.writeInt(this.versionCodeMajor);
-        dest.writeInt(this.baseRevisionCode);
-        dest.writeString(this.versionName);
-        dest.writeBoolean(this.coreApp);
-        dest.writeInt(this.compileSdkVersion);
-        dest.writeString(this.compileSdkVersionCodename);
-        dest.writeString(this.packageName);
-        dest.writeString(this.realPackage);
-        dest.writeString(this.manifestPackageName);
-        dest.writeString(this.baseCodePath);
-        dest.writeBoolean(this.requiredForAllUsers);
-        dest.writeString(this.restrictedAccountType);
-        dest.writeString(this.requiredAccountType);
-        dest.writeBoolean(this.baseHardwareAccelerated);
-        dest.writeString(this.overlayTarget);
-        dest.writeString(this.overlayTargetName);
-        dest.writeString(this.overlayCategory);
-        dest.writeInt(this.overlayPriority);
-        dest.writeBoolean(this.overlayIsStatic);
-        dest.writeMap(this.overlayables);
-        dest.writeString(this.staticSharedLibName);
-        dest.writeLong(this.staticSharedLibVersion);
-        dest.writeStringList(this.libraryNames);
-        dest.writeStringList(this.usesLibraries);
-        dest.writeStringList(this.usesOptionalLibraries);
-        dest.writeStringList(this.usesStaticLibraries);
-        dest.writeLongArray(this.usesStaticLibrariesVersions);
-        final int numProcesses = this.processes != null ? this.processes.size() : 0;
-        dest.writeInt(numProcesses);
-        for (int i = 0; i < numProcesses; i++) {
-            this.processes.valueAt(i).writeToParcel(dest, 0);
-        }
-
-        if (this.usesStaticLibrariesCertDigests == null) {
-            dest.writeInt(-1);
-        } else {
-            dest.writeInt(this.usesStaticLibrariesCertDigests.length);
-            for (int index = 0; index < this.usesStaticLibrariesCertDigests.length; index++) {
-                dest.writeStringArray(this.usesStaticLibrariesCertDigests[index]);
-            }
-        }
-
-        dest.writeString(this.sharedUserId);
-        dest.writeInt(this.sharedUserLabel);
-        dest.writeTypedList(this.configPreferences);
-        dest.writeTypedList(this.reqFeatures);
-        dest.writeTypedList(this.featureGroups);
-        dest.writeByteArray(this.restrictUpdateHash);
-        dest.writeStringList(this.originalPackages);
-        dest.writeStringList(this.adoptPermissions);
-        dest.writeStringList(this.requestedPermissions);
-        dest.writeStringList(this.implicitPermissions);
-        dest.writeArraySet(this.upgradeKeySets);
-        dest.writeMap(this.keySetMapping);
-        dest.writeStringList(this.protectedBroadcasts);
-        dest.writeTypedList(this.activities);
-        dest.writeTypedList(this.receivers);
-        dest.writeTypedList(this.services);
-        dest.writeTypedList(this.providers);
-        dest.writeTypedList(this.features);
-        dest.writeTypedList(this.permissions);
-        dest.writeTypedList(this.permissionGroups);
-        dest.writeTypedList(this.instrumentations);
-        ParsedIntentInfo.writeIntentsList(this.preferredActivityFilters, dest, flags);
-        dest.writeBundle(this.appMetaData);
-        dest.writeString(this.volumeUuid);
-        dest.writeString(this.applicationVolumeUuid);
-        dest.writeParcelable(this.signingDetails, flags);
-        dest.writeString(this.codePath);
-        dest.writeBoolean(this.use32BitAbi);
-        dest.writeBoolean(this.visibleToInstantApps);
-        dest.writeString(this.cpuAbiOverride);
-        dest.writeBoolean(this.isStub);
-        dest.writeInt(this.preferredOrder);
-        dest.writeBoolean(this.forceQueryable);
-        dest.writeParcelableList(this.queriesIntents, flags);
-        dest.writeStringList(this.queriesPackages);
-        dest.writeString(this.applicationInfoBaseResourcePath);
-        dest.writeString(this.applicationInfoCodePath);
-        dest.writeString(this.applicationInfoResourcePath);
-        dest.writeStringArray(this.applicationInfoSplitResourcePaths);
-        dest.writeString(this.appComponentFactory);
-        dest.writeString(this.backupAgentName);
-        dest.writeInt(this.banner);
-        dest.writeInt(this.category);
-        dest.writeString(this.classLoaderName);
-        dest.writeString(this.className);
-        dest.writeInt(this.compatibleWidthLimitDp);
-        dest.writeString(this.credentialProtectedDataDir);
-        dest.writeString(this.dataDir);
-        dest.writeInt(this.descriptionRes);
-        dest.writeString(this.deviceProtectedDataDir);
-        dest.writeBoolean(this.enabled);
-        dest.writeBoolean(this.crossProfile);
-        dest.writeInt(this.flags);
-        dest.writeInt(this.fullBackupContent);
-        dest.writeBoolean(this.hiddenUntilInstalled);
-        dest.writeInt(this.icon);
-        dest.writeInt(this.iconRes);
-        dest.writeInt(this.installLocation);
-        dest.writeInt(this.labelRes);
-        dest.writeInt(this.largestWidthLimitDp);
-        dest.writeInt(this.logo);
-        dest.writeString(this.manageSpaceActivityName);
-        dest.writeFloat(this.maxAspectRatio);
-        dest.writeFloat(this.minAspectRatio);
-        dest.writeInt(this.minSdkVersion);
-        dest.writeString(this.name);
-        dest.writeString(this.nativeLibraryDir);
-        dest.writeString(this.nativeLibraryRootDir);
-        dest.writeBoolean(this.nativeLibraryRootRequiresIsa);
-        dest.writeInt(this.networkSecurityConfigRes);
-        dest.writeCharSequence(this.nonLocalizedLabel);
-        dest.writeString(this.permission);
-        dest.writeString(this.primaryCpuAbi);
-        dest.writeInt(this.privateFlags);
-        dest.writeString(this.processName);
-        dest.writeInt(this.requiresSmallestWidthDp);
-        dest.writeInt(this.roundIconRes);
-        dest.writeString(this.secondaryCpuAbi);
-        dest.writeString(this.secondaryNativeLibraryDir);
-        dest.writeString(this.seInfo);
-        dest.writeString(this.seInfoUser);
-        dest.writeInt(this.targetSandboxVersion);
-        dest.writeInt(this.targetSdkVersion);
-        dest.writeString(this.taskAffinity);
-        dest.writeInt(this.theme);
-        dest.writeInt(this.uid);
-        dest.writeInt(this.uiOptions);
-        dest.writeStringArray(this.usesLibraryFiles);
-        dest.writeTypedList(this.usesLibraryInfos);
-        dest.writeString(this.zygotePreloadName);
-        dest.writeStringArray(this.splitClassLoaderNames);
-        dest.writeStringArray(this.splitCodePaths);
-        dest.writeSparseArray(this.splitDependencies);
-        dest.writeIntArray(this.splitFlags);
-        dest.writeStringArray(this.splitNames);
-        dest.writeIntArray(this.splitRevisionCodes);
-    }
-
-    public PackageImpl(Parcel in) {
-        // We use the boot classloader for all classes that we load.
-        final ClassLoader boot = Object.class.getClassLoader();
-        this.supportsSmallScreens = in.readInt();
-        this.supportsNormalScreens = in.readInt();
-        this.supportsLargeScreens = in.readInt();
-        this.supportsXLargeScreens = in.readInt();
-        this.resizeable = in.readInt();
-        this.anyDensity = in.readInt();
-        this.lastPackageUsageTimeInMills = in.createLongArray();
-        this.versionCode = in.readInt();
-        this.versionCodeMajor = in.readInt();
-        this.baseRevisionCode = in.readInt();
-        this.versionName = TextUtils.safeIntern(in.readString());
-        this.coreApp = in.readBoolean();
-        this.compileSdkVersion = in.readInt();
-        this.compileSdkVersionCodename = TextUtils.safeIntern(in.readString());
-        this.packageName = TextUtils.safeIntern(in.readString());
-        this.realPackage = in.readString();
-        this.manifestPackageName = in.readString();
-        this.baseCodePath = in.readString();
-        this.requiredForAllUsers = in.readBoolean();
-        this.restrictedAccountType = in.readString();
-        this.requiredAccountType = in.readString();
-        this.baseHardwareAccelerated = in.readBoolean();
-        this.overlayTarget = in.readString();
-        this.overlayTargetName = in.readString();
-        this.overlayCategory = in.readString();
-        this.overlayPriority = in.readInt();
-        this.overlayIsStatic = in.readBoolean();
-        this.overlayables = new HashMap<>();
-        in.readMap(overlayables, boot);
-        this.staticSharedLibName = TextUtils.safeIntern(in.readString());
-        this.staticSharedLibVersion = in.readLong();
-        this.libraryNames = in.createStringArrayList();
-        internStringArrayList(this.libraryNames);
-        this.usesLibraries = in.createStringArrayList();
-        internStringArrayList(this.usesLibraries);
-        this.usesOptionalLibraries = in.createStringArrayList();
-        internStringArrayList(this.usesOptionalLibraries);
-        this.usesStaticLibraries = in.createStringArrayList();
-        internStringArrayList(usesStaticLibraries);
-        this.usesStaticLibrariesVersions = in.createLongArray();
-        final int numProcesses = in.readInt();
-        if (numProcesses > 0) {
-            this.processes = new ArrayMap<>(numProcesses);
-            for (int i = 0; i < numProcesses; i++) {
-                ComponentParseUtils.ParsedProcess proc = new ComponentParseUtils.ParsedProcess(in);
-                this.processes.put(proc.name, proc);
-            }
-        } else {
-            this.processes = null;
-        }
-
-        int digestsSize = in.readInt();
-        if (digestsSize >= 0) {
-            this.usesStaticLibrariesCertDigests = new String[digestsSize][];
-            for (int index = 0; index < digestsSize; index++) {
-                this.usesStaticLibrariesCertDigests[index] = in.readStringArray();
-            }
-        }
-
-        this.sharedUserId = TextUtils.safeIntern(in.readString());
-        this.sharedUserLabel = in.readInt();
-        this.configPreferences = in.createTypedArrayList(ConfigurationInfo.CREATOR);
-        this.reqFeatures = in.createTypedArrayList(FeatureInfo.CREATOR);
-        this.featureGroups = in.createTypedArrayList(FeatureGroupInfo.CREATOR);
-        this.restrictUpdateHash = in.createByteArray();
-        this.originalPackages = in.createStringArrayList();
-        this.adoptPermissions = in.createStringArrayList();
-        this.requestedPermissions = in.createStringArrayList();
-        internStringArrayList(this.requestedPermissions);
-        this.implicitPermissions = in.createStringArrayList();
-        internStringArrayList(this.implicitPermissions);
-        this.upgradeKeySets = (ArraySet<String>) in.readArraySet(boot);
-        this.keySetMapping = in.readHashMap(boot);
-        this.protectedBroadcasts = in.createStringArrayList();
-        internStringArrayList(this.protectedBroadcasts);
-        this.activities = in.createTypedArrayList(ParsedActivity.CREATOR);
-        this.receivers = in.createTypedArrayList(ParsedActivity.CREATOR);
-        this.services = in.createTypedArrayList(ParsedService.CREATOR);
-        this.providers = in.createTypedArrayList(ParsedProvider.CREATOR);
-        this.features = in.createTypedArrayList(ParsedFeature.CREATOR);
-        this.permissions = in.createTypedArrayList(ParsedPermission.CREATOR);
-        this.permissionGroups = in.createTypedArrayList(ParsedPermissionGroup.CREATOR);
-        this.instrumentations = in.createTypedArrayList(ParsedInstrumentation.CREATOR);
-        this.preferredActivityFilters = ParsedIntentInfo.createIntentsList(in);
-        this.appMetaData = in.readBundle(boot);
-        this.volumeUuid = in.readString();
-        this.applicationVolumeUuid = in.readString();
-        this.signingDetails = in.readParcelable(boot);
-        this.codePath = in.readString();
-        this.use32BitAbi = in.readBoolean();
-        this.visibleToInstantApps = in.readBoolean();
-        this.cpuAbiOverride = in.readString();
-        this.isStub = in.readBoolean();
-        this.preferredOrder = in.readInt();
-        this.forceQueryable = in.readBoolean();
-        this.queriesIntents = in.createTypedArrayList(Intent.CREATOR);
-        this.queriesPackages = in.createStringArrayList();
-        internStringArrayList(this.queriesPackages);
-        this.applicationInfoBaseResourcePath = in.readString();
-        this.applicationInfoCodePath = in.readString();
-        this.applicationInfoResourcePath = in.readString();
-        this.applicationInfoSplitResourcePaths = in.createStringArray();
-        this.appComponentFactory = in.readString();
-        this.backupAgentName = in.readString();
-        this.banner = in.readInt();
-        this.category = in.readInt();
-        this.classLoaderName = in.readString();
-        this.className = in.readString();
-        this.compatibleWidthLimitDp = in.readInt();
-        this.credentialProtectedDataDir = in.readString();
-        this.dataDir = in.readString();
-        this.descriptionRes = in.readInt();
-        this.deviceProtectedDataDir = in.readString();
-        this.enabled = in.readBoolean();
-        this.crossProfile = in.readBoolean();
-        this.flags = in.readInt();
-        this.fullBackupContent = in.readInt();
-        this.hiddenUntilInstalled = in.readBoolean();
-        this.icon = in.readInt();
-        this.iconRes = in.readInt();
-        this.installLocation = in.readInt();
-        this.labelRes = in.readInt();
-        this.largestWidthLimitDp = in.readInt();
-        this.logo = in.readInt();
-        this.manageSpaceActivityName = in.readString();
-        this.maxAspectRatio = in.readFloat();
-        this.minAspectRatio = in.readFloat();
-        this.minSdkVersion = in.readInt();
-        this.name = in.readString();
-        this.nativeLibraryDir = in.readString();
-        this.nativeLibraryRootDir = in.readString();
-        this.nativeLibraryRootRequiresIsa = in.readBoolean();
-        this.networkSecurityConfigRes = in.readInt();
-        this.nonLocalizedLabel = in.readCharSequence();
-        this.permission = TextUtils.safeIntern(in.readString());
-        this.primaryCpuAbi = in.readString();
-        this.privateFlags = in.readInt();
-        this.processName = in.readString();
-        this.requiresSmallestWidthDp = in.readInt();
-        this.roundIconRes = in.readInt();
-        this.secondaryCpuAbi = in.readString();
-        this.secondaryNativeLibraryDir = in.readString();
-        this.seInfo = in.readString();
-        this.seInfoUser = in.readString();
-        this.targetSandboxVersion = in.readInt();
-        this.targetSdkVersion = in.readInt();
-        this.taskAffinity = in.readString();
-        this.theme = in.readInt();
-        this.uid = in.readInt();
-        this.uiOptions = in.readInt();
-        this.usesLibraryFiles = in.createStringArray();
-        this.usesLibraryInfos = in.createTypedArrayList(SharedLibraryInfo.CREATOR);
-        this.zygotePreloadName = in.readString();
-        this.splitClassLoaderNames = in.createStringArray();
-        this.splitCodePaths = in.createStringArray();
-        this.splitDependencies = in.readSparseArray(boot);
-        this.splitFlags = in.createIntArray();
-        this.splitNames = in.createStringArray();
-        this.splitRevisionCodes = in.createIntArray();
-    }
-
-    public static final Creator<PackageImpl> CREATOR = new Creator<PackageImpl>() {
-        @Override
-        public PackageImpl createFromParcel(Parcel source) {
-            return new PackageImpl(source);
-        }
-
-        @Override
-        public PackageImpl[] newArray(int size) {
-            return new PackageImpl[size];
-        }
-    };
-}
diff --git a/core/java/android/content/pm/parsing/PackageInfoUtils.java b/core/java/android/content/pm/parsing/PackageInfoUtils.java
deleted file mode 100644
index 72df189..0000000
--- a/core/java/android/content/pm/parsing/PackageInfoUtils.java
+++ /dev/null
@@ -1,595 +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.content.pm.parsing;
-
-import android.annotation.Nullable;
-import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.ComponentInfo;
-import android.content.pm.ConfigurationInfo;
-import android.content.pm.FallbackCategoryProvider;
-import android.content.pm.FeatureGroupInfo;
-import android.content.pm.FeatureInfo;
-import android.content.pm.InstrumentationInfo;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageItemInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageParser;
-import android.content.pm.PackageUserState;
-import android.content.pm.PermissionGroupInfo;
-import android.content.pm.PermissionInfo;
-import android.content.pm.ProcessInfo;
-import android.content.pm.ProviderInfo;
-import android.content.pm.SELinuxUtil;
-import android.content.pm.ServiceInfo;
-import android.content.pm.Signature;
-import android.content.pm.SigningInfo;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivity;
-import android.content.pm.parsing.ComponentParseUtils.ParsedInstrumentation;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermission;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermissionGroup;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-
-import com.android.internal.util.ArrayUtils;
-
-import java.util.Set;
-
-/** @hide */
-public class PackageInfoUtils {
-
-    private static final String TAG = ApkParseUtils.TAG;
-
-    /**
-     * Returns true if the package is installed and not hidden, or if the caller
-     * explicitly wanted all uninstalled and hidden packages as well.
-     */
-    private static boolean checkUseInstalledOrHidden(AndroidPackage pkg, PackageUserState state,
-            @PackageManager.PackageInfoFlags int flags) {
-        // Returns false if the package is hidden system app until installed.
-        if ((flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) == 0
-                && !state.installed
-                && pkg.isHiddenUntilInstalled()) {
-            return false;
-        }
-
-        // If available for the target user, or trying to match uninstalled packages and it's
-        // a system app.
-        return state.isAvailable(flags)
-                || (pkg.isSystemApp()
-                && ((flags & PackageManager.MATCH_KNOWN_PACKAGES) != 0
-                || (flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) != 0));
-    }
-
-    public static PackageInfo generate(AndroidPackage pkg, int[] gids,
-            @PackageManager.PackageInfoFlags int flags, long firstInstallTime, long lastUpdateTime,
-            Set<String> grantedPermissions, PackageUserState state, int userId) {
-        if (!checkUseInstalledOrHidden(pkg, state, flags) || !pkg.isMatch(flags)) {
-            return null;
-        }
-        ApplicationInfo applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
-
-        PackageInfo pi = new PackageInfo();
-        pi.packageName = pkg.getPackageName();
-        pi.splitNames = pkg.getSplitNames();
-        pi.versionCode = pkg.getVersionCode();
-        pi.versionCodeMajor = pkg.getVersionCodeMajor();
-        pi.baseRevisionCode = pkg.getBaseRevisionCode();
-        pi.splitRevisionCodes = pkg.getSplitRevisionCodes();
-        pi.versionName = pkg.getVersionName();
-        pi.sharedUserId = pkg.getSharedUserId();
-        pi.sharedUserLabel = pkg.getSharedUserLabel();
-        pi.applicationInfo = applicationInfo;
-        pi.installLocation = pkg.getInstallLocation();
-        pi.isStub = pkg.isStub();
-        pi.coreApp = pkg.isCoreApp();
-        if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0
-                || (pi.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
-            pi.requiredForAllUsers = pkg.isRequiredForAllUsers();
-        }
-        pi.restrictedAccountType = pkg.getRestrictedAccountType();
-        pi.requiredAccountType = pkg.getRequiredAccountType();
-        pi.overlayTarget = pkg.getOverlayTarget();
-        pi.targetOverlayableName = pkg.getOverlayTargetName();
-        pi.overlayCategory = pkg.getOverlayCategory();
-        pi.overlayPriority = pkg.getOverlayPriority();
-        pi.mOverlayIsStatic = pkg.isOverlayIsStatic();
-        pi.compileSdkVersion = pkg.getCompileSdkVersion();
-        pi.compileSdkVersionCodename = pkg.getCompileSdkVersionCodeName();
-        pi.firstInstallTime = firstInstallTime;
-        pi.lastUpdateTime = lastUpdateTime;
-        if ((flags & PackageManager.GET_GIDS) != 0) {
-            pi.gids = gids;
-        }
-        if ((flags & PackageManager.GET_CONFIGURATIONS) != 0) {
-            int size = pkg.getConfigPreferences() != null ? pkg.getConfigPreferences().size() : 0;
-            if (size > 0) {
-                pi.configPreferences = new ConfigurationInfo[size];
-                pkg.getConfigPreferences().toArray(pi.configPreferences);
-            }
-            size = pkg.getReqFeatures() != null ? pkg.getReqFeatures().size() : 0;
-            if (size > 0) {
-                pi.reqFeatures = new FeatureInfo[size];
-                pkg.getReqFeatures().toArray(pi.reqFeatures);
-            }
-            size = pkg.getFeatureGroups() != null ? pkg.getFeatureGroups().size() : 0;
-            if (size > 0) {
-                pi.featureGroups = new FeatureGroupInfo[size];
-                pkg.getFeatureGroups().toArray(pi.featureGroups);
-            }
-        }
-        if ((flags & PackageManager.GET_ACTIVITIES) != 0) {
-            if (pkg.getActivities() != null) {
-                final int N = pkg.getActivities().size();
-                if (N > 0) {
-                    int num = 0;
-                    final ActivityInfo[] res = new ActivityInfo[N];
-                    for (int i = 0; i < N; i++) {
-                        final ParsedActivity a = pkg.getActivities().get(i);
-                        if (state.isMatch(pkg.isSystem(), pkg.isEnabled(), a, flags)) {
-                            if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(
-                                    a.className)) {
-                                continue;
-                            }
-                            res[num++] = generateActivityInfo(pkg, a, flags, state, applicationInfo,
-                                    userId);
-                        }
-                    }
-                    pi.activities = ArrayUtils.trimToSize(res, num);
-                }
-            }
-        }
-        if ((flags & PackageManager.GET_RECEIVERS) != 0) {
-            if (pkg.getReceivers() != null) {
-                final int size = pkg.getReceivers().size();
-                if (size > 0) {
-                    int num = 0;
-                    final ActivityInfo[] res = new ActivityInfo[size];
-                    for (int i = 0; i < size; i++) {
-                        final ParsedActivity a = pkg.getReceivers().get(i);
-                        if (state.isMatch(pkg.isSystem(), pkg.isEnabled(), a, flags)) {
-                            res[num++] = generateActivityInfo(pkg, a, flags, state, applicationInfo,
-                                    userId);
-                        }
-                    }
-                    pi.receivers = ArrayUtils.trimToSize(res, num);
-                }
-            }
-        }
-        if ((flags & PackageManager.GET_SERVICES) != 0) {
-            if (pkg.getServices() != null) {
-                final int size = pkg.getServices().size();
-                if (size > 0) {
-                    int num = 0;
-                    final ServiceInfo[] res = new ServiceInfo[size];
-                    for (int i = 0; i < size; i++) {
-                        final ComponentParseUtils.ParsedService s = pkg.getServices().get(i);
-                        if (state.isMatch(pkg.isSystem(), pkg.isEnabled(), s, flags)) {
-                            res[num++] = generateServiceInfo(pkg, s, flags, state, applicationInfo,
-                                    userId);
-                        }
-                    }
-                    pi.services = ArrayUtils.trimToSize(res, num);
-                }
-            }
-        }
-        if ((flags & PackageManager.GET_PROVIDERS) != 0) {
-            if (pkg.getProviders() != null) {
-                final int size = pkg.getProviders().size();
-                if (size > 0) {
-                    int num = 0;
-                    final ProviderInfo[] res = new ProviderInfo[size];
-                    for (int i = 0; i < size; i++) {
-                        final ComponentParseUtils.ParsedProvider pr = pkg.getProviders()
-                                .get(i);
-                        if (state.isMatch(pkg.isSystem(), pkg.isEnabled(), pr, flags)) {
-                            res[num++] = generateProviderInfo(pkg, pr, flags, state,
-                                    applicationInfo, userId);
-                        }
-                    }
-                    pi.providers = ArrayUtils.trimToSize(res, num);
-                }
-            }
-        }
-        if ((flags & PackageManager.GET_INSTRUMENTATION) != 0) {
-            if (pkg.getInstrumentations() != null) {
-                int N = pkg.getInstrumentations().size();
-                if (N > 0) {
-                    pi.instrumentation = new InstrumentationInfo[N];
-                    for (int i = 0; i < N; i++) {
-                        pi.instrumentation[i] = generateInstrumentationInfo(
-                                pkg.getInstrumentations().get(i), pkg, flags);
-                    }
-                }
-            }
-        }
-        if ((flags & PackageManager.GET_PERMISSIONS) != 0) {
-            if (pkg.getPermissions() != null) {
-                int N = ArrayUtils.size(pkg.getPermissions());
-                if (N > 0) {
-                    pi.permissions = new PermissionInfo[N];
-                    for (int i = 0; i < N; i++) {
-                        pi.permissions[i] = generatePermissionInfo(
-                                pkg.getPermissions().get(i),
-                                flags
-                        );
-                    }
-                }
-            }
-            if (pkg.getRequestedPermissions() != null) {
-                int N = pkg.getRequestedPermissions().size();
-                if (N > 0) {
-                    pi.requestedPermissions = new String[N];
-                    pi.requestedPermissionsFlags = new int[N];
-                    for (int i = 0; i < N; i++) {
-                        final String perm = pkg.getRequestedPermissions().get(i);
-                        pi.requestedPermissions[i] = perm;
-                        // The notion of required permissions is deprecated but for compatibility.
-                        pi.requestedPermissionsFlags[i] |=
-                                PackageInfo.REQUESTED_PERMISSION_REQUIRED;
-                        if (grantedPermissions != null && grantedPermissions.contains(perm)) {
-                            pi.requestedPermissionsFlags[i] |=
-                                    PackageInfo.REQUESTED_PERMISSION_GRANTED;
-                        }
-                    }
-                }
-            }
-        }
-
-        PackageParser.SigningDetails signingDetails = pkg.getSigningDetails();
-        // deprecated method of getting signing certificates
-        if ((flags & PackageManager.GET_SIGNATURES) != 0) {
-            if (signingDetails.hasPastSigningCertificates()) {
-                // Package has included signing certificate rotation information.  Return the oldest
-                // cert so that programmatic checks keep working even if unaware of key rotation.
-                pi.signatures = new Signature[1];
-                pi.signatures[0] = signingDetails.pastSigningCertificates[0];
-            } else if (signingDetails.hasSignatures()) {
-                // otherwise keep old behavior
-                int numberOfSigs = signingDetails.signatures.length;
-                pi.signatures = new Signature[numberOfSigs];
-                System.arraycopy(signingDetails.signatures, 0, pi.signatures, 0,
-                        numberOfSigs);
-            }
-        }
-
-        // replacement for GET_SIGNATURES
-        if ((flags & PackageManager.GET_SIGNING_CERTIFICATES) != 0) {
-            if (signingDetails != PackageParser.SigningDetails.UNKNOWN) {
-                // only return a valid SigningInfo if there is signing information to report
-                pi.signingInfo = new SigningInfo(signingDetails);
-            } else {
-                pi.signingInfo = null;
-            }
-        }
-
-        return pi;
-    }
-
-    @Nullable
-    public static ApplicationInfo generateApplicationInfo(AndroidPackage pkg,
-            @PackageManager.ApplicationInfoFlags int flags, PackageUserState state, int userId) {
-
-        if (pkg == null) return null;
-        if (!checkUseInstalledOrHidden(pkg, state, flags) || !pkg.isMatch(flags)) {
-            return null;
-        }
-
-        // Make shallow copy so we can store the metadata/libraries safely
-        ApplicationInfo ai = pkg.toAppInfoWithoutState();
-        ai.initForUser(userId);
-        if ((flags & PackageManager.GET_META_DATA) == 0) {
-            ai.metaData = null;
-        }
-        if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) == 0) {
-            ai.sharedLibraryFiles = null;
-            ai.sharedLibraryInfos = null;
-        }
-        if (state.stopped) {
-            ai.flags |= ApplicationInfo.FLAG_STOPPED;
-        } else {
-            ai.flags &= ~ApplicationInfo.FLAG_STOPPED;
-        }
-        updateApplicationInfo(ai, flags, state);
-
-        return ai;
-    }
-
-    private static ActivityInfo generateActivityInfo(AndroidPackage pkg, ParsedActivity a,
-            @PackageManager.ComponentInfoFlags int flags, PackageUserState state,
-            @Nullable ApplicationInfo applicationInfo, int userId) {
-        if (a == null) return null;
-        if (!checkUseInstalledOrHidden(pkg, state, flags)) {
-            return null;
-        }
-        if (applicationInfo == null) {
-            applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
-        }
-        // Make shallow copies so we can store the metadata safely
-        ActivityInfo ai = new ActivityInfo();
-        assignSharedFieldsForComponentInfo(ai, a);
-        ai.targetActivity = a.targetActivity;
-        ai.processName = a.getProcessName();
-        ai.exported = a.exported;
-        ai.theme = a.theme;
-        ai.uiOptions = a.uiOptions;
-        ai.parentActivityName = a.parentActivityName;
-        ai.permission = a.getPermission();
-        ai.taskAffinity = a.taskAffinity;
-        ai.flags = a.flags;
-        ai.privateFlags = a.privateFlags;
-        ai.launchMode = a.launchMode;
-        ai.documentLaunchMode = a.documentLaunchMode;
-        ai.maxRecents = a.maxRecents;
-        ai.configChanges = a.configChanges;
-        ai.softInputMode = a.softInputMode;
-        ai.persistableMode = a.persistableMode;
-        ai.lockTaskLaunchMode = a.lockTaskLaunchMode;
-        ai.screenOrientation = a.screenOrientation;
-        ai.resizeMode = a.resizeMode;
-        ai.maxAspectRatio = a.maxAspectRatio;
-        ai.minAspectRatio = a.minAspectRatio;
-        ai.requestedVrComponent = a.requestedVrComponent;
-        ai.rotationAnimation = a.rotationAnimation;
-        ai.colorMode = a.colorMode;
-        ai.preferMinimalPostProcessing = a.preferMinimalPostProcessing;
-        ai.windowLayout = a.windowLayout;
-        ai.metaData = a.metaData;
-        ai.applicationInfo = applicationInfo;
-        return ai;
-    }
-
-    public static ActivityInfo generateActivityInfo(AndroidPackage pkg, ParsedActivity a,
-            @PackageManager.ComponentInfoFlags int flags, PackageUserState state, int userId) {
-        return generateActivityInfo(pkg, a, flags, state, null, userId);
-    }
-
-    private static ServiceInfo generateServiceInfo(AndroidPackage pkg,
-            ComponentParseUtils.ParsedService s, @PackageManager.ComponentInfoFlags int flags,
-            PackageUserState state, @Nullable ApplicationInfo applicationInfo, int userId) {
-        if (s == null) return null;
-        if (!checkUseInstalledOrHidden(pkg, state, flags)) {
-            return null;
-        }
-        if (applicationInfo == null) {
-            applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
-        }
-        // Make shallow copies so we can store the metadata safely
-        ServiceInfo si = new ServiceInfo();
-        assignSharedFieldsForComponentInfo(si, s);
-        si.exported = s.exported;
-        si.flags = s.flags;
-        si.metaData = s.metaData;
-        si.permission = s.getPermission();
-        si.processName = s.getProcessName();
-        si.mForegroundServiceType = s.foregroundServiceType;
-        si.metaData = s.metaData;
-        si.applicationInfo = applicationInfo;
-        return si;
-    }
-
-    public static ServiceInfo generateServiceInfo(AndroidPackage pkg,
-            ComponentParseUtils.ParsedService s, @PackageManager.ComponentInfoFlags int flags,
-            PackageUserState state, int userId) {
-        return generateServiceInfo(pkg, s, flags, state, null, userId);
-    }
-
-    private static ProviderInfo generateProviderInfo(AndroidPackage pkg,
-            ComponentParseUtils.ParsedProvider p, @PackageManager.ComponentInfoFlags int flags,
-            PackageUserState state, @Nullable ApplicationInfo applicationInfo, int userId) {
-        if (p == null) return null;
-        if (!checkUseInstalledOrHidden(pkg, state, flags)) {
-            return null;
-        }
-        if (applicationInfo == null) {
-            applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
-        }
-        // Make shallow copies so we can store the metadata safely
-        ProviderInfo pi = new ProviderInfo();
-        assignSharedFieldsForComponentInfo(pi, p);
-        pi.exported = p.exported;
-        pi.flags = p.flags;
-        pi.processName = p.getProcessName();
-        pi.authority = p.getAuthority();
-        pi.isSyncable = p.isSyncable;
-        pi.readPermission = p.getReadPermission();
-        pi.writePermission = p.getWritePermission();
-        pi.grantUriPermissions = p.grantUriPermissions;
-        pi.forceUriPermissions = p.forceUriPermissions;
-        pi.multiprocess = p.multiProcess;
-        pi.initOrder = p.initOrder;
-        pi.uriPermissionPatterns = p.uriPermissionPatterns;
-        pi.pathPermissions = p.pathPermissions;
-        pi.metaData = p.metaData;
-        if ((flags & PackageManager.GET_URI_PERMISSION_PATTERNS) == 0) {
-            pi.uriPermissionPatterns = null;
-        }
-        pi.applicationInfo = applicationInfo;
-        return pi;
-    }
-
-    public static ProviderInfo generateProviderInfo(AndroidPackage pkg,
-            ComponentParseUtils.ParsedProvider p, @PackageManager.ComponentInfoFlags int flags,
-            PackageUserState state, int userId) {
-        return generateProviderInfo(pkg, p, flags, state, null, userId);
-    }
-
-    public static InstrumentationInfo generateInstrumentationInfo(ParsedInstrumentation i,
-            AndroidPackage pkg, @PackageManager.ComponentInfoFlags int flags) {
-        if (i == null) return null;
-
-        InstrumentationInfo ii = new InstrumentationInfo();
-        assignSharedFieldsForPackageItemInfo(ii, i);
-        ii.targetPackage = i.getTargetPackage();
-        ii.targetProcesses = i.getTargetProcesses();
-        ii.handleProfiling = i.handleProfiling;
-        ii.functionalTest = i.functionalTest;
-
-        ii.sourceDir = pkg.getBaseCodePath();
-        ii.publicSourceDir = pkg.getBaseCodePath();
-        ii.splitNames = pkg.getSplitNames();
-        ii.splitSourceDirs = pkg.getSplitCodePaths();
-        ii.splitPublicSourceDirs = pkg.getSplitCodePaths();
-        ii.splitDependencies = pkg.getSplitDependencies();
-        ii.dataDir = pkg.getDataDir();
-        ii.deviceProtectedDataDir = pkg.getDeviceProtectedDataDir();
-        ii.credentialProtectedDataDir = pkg.getCredentialProtectedDataDir();
-        ii.primaryCpuAbi = pkg.getPrimaryCpuAbi();
-        ii.secondaryCpuAbi = pkg.getSecondaryCpuAbi();
-        ii.nativeLibraryDir = pkg.getNativeLibraryDir();
-        ii.secondaryNativeLibraryDir = pkg.getSecondaryNativeLibraryDir();
-
-        if ((flags & PackageManager.GET_META_DATA) == 0) {
-            return ii;
-        }
-        ii.metaData = i.metaData;
-        return ii;
-    }
-
-    public static ArrayMap<String, ProcessInfo> generateProcessInfo(
-            ArrayMap<String, ComponentParseUtils.ParsedProcess> procs,
-            @PackageManager.ComponentInfoFlags int flags) {
-        if (procs == null) {
-            return null;
-        }
-
-        final int numProcs = procs.size();
-        ArrayMap<String, ProcessInfo> retProcs = new ArrayMap(numProcs);
-        for (int i = 0; i < numProcs; i++) {
-            ComponentParseUtils.ParsedProcess proc = procs.valueAt(i);
-            retProcs.put(proc.name, new ProcessInfo(proc.name,
-                    proc.deniedPermissions != null
-                            ? new ArraySet<>(proc.deniedPermissions) : null));
-        }
-        return retProcs;
-    }
-
-    public static PermissionInfo generatePermissionInfo(ParsedPermission p,
-            @PackageManager.ComponentInfoFlags int flags) {
-        if (p == null) return null;
-
-        PermissionInfo pi = new PermissionInfo(p.backgroundPermission);
-        assignSharedFieldsForPackageItemInfo(pi, p);
-        pi.group = p.getGroup();
-        pi.requestRes = p.requestRes;
-        pi.protectionLevel = p.protectionLevel;
-        pi.descriptionRes = p.descriptionRes;
-        pi.flags = p.flags;
-
-        if ((flags & PackageManager.GET_META_DATA) == 0) {
-            return pi;
-        }
-        pi.metaData = p.metaData;
-        return pi;
-    }
-
-    public static PermissionGroupInfo generatePermissionGroupInfo(ParsedPermissionGroup pg,
-            @PackageManager.ComponentInfoFlags int flags) {
-        if (pg == null) return null;
-
-        PermissionGroupInfo pgi = new PermissionGroupInfo(
-                pg.requestDetailResourceId,
-                pg.backgroundRequestResourceId,
-                pg.backgroundRequestDetailResourceId
-        );
-        assignSharedFieldsForPackageItemInfo(pgi, pg);
-        pgi.descriptionRes = pg.descriptionRes;
-        pgi.priority = pg.priority;
-        pgi.requestRes = pg.requestRes;
-        pgi.flags = pg.flags;
-
-        if ((flags & PackageManager.GET_META_DATA) == 0) {
-            return pgi;
-        }
-        pgi.metaData = pg.metaData;
-        return pgi;
-    }
-
-    private static void updateApplicationInfo(ApplicationInfo ai,
-            @PackageManager.ApplicationInfoFlags int flags,
-            PackageUserState state) {
-        // CompatibilityMode is global state.
-        if (!PackageParser.sCompatibilityModeEnabled) {
-            ai.disableCompatibilityMode();
-        }
-        if (state.installed) {
-            ai.flags |= ApplicationInfo.FLAG_INSTALLED;
-        } else {
-            ai.flags &= ~ApplicationInfo.FLAG_INSTALLED;
-        }
-        if (state.suspended) {
-            ai.flags |= ApplicationInfo.FLAG_SUSPENDED;
-        } else {
-            ai.flags &= ~ApplicationInfo.FLAG_SUSPENDED;
-        }
-        if (state.instantApp) {
-            ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_INSTANT;
-        } else {
-            ai.privateFlags &= ~ApplicationInfo.PRIVATE_FLAG_INSTANT;
-        }
-        if (state.virtualPreload) {
-            ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_VIRTUAL_PRELOAD;
-        } else {
-            ai.privateFlags &= ~ApplicationInfo.PRIVATE_FLAG_VIRTUAL_PRELOAD;
-        }
-        if (state.hidden) {
-            ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_HIDDEN;
-        } else {
-            ai.privateFlags &= ~ApplicationInfo.PRIVATE_FLAG_HIDDEN;
-        }
-        if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
-            ai.enabled = true;
-        } else if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
-            ai.enabled = (flags & PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS) != 0;
-        } else if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED
-                || state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) {
-            ai.enabled = false;
-        }
-        ai.enabledSetting = state.enabled;
-        if (ai.category == ApplicationInfo.CATEGORY_UNDEFINED) {
-            ai.category = state.categoryHint;
-        }
-        if (ai.category == ApplicationInfo.CATEGORY_UNDEFINED) {
-            ai.category = FallbackCategoryProvider.getFallbackCategory(ai.packageName);
-        }
-        ai.seInfoUser = SELinuxUtil.assignSeinfoUser(state);
-        ai.resourceDirs = state.getAllOverlayPaths();
-        ai.icon = (PackageParser.sUseRoundIcon && ai.roundIconRes != 0)
-                ? ai.roundIconRes : ai.iconRes;
-    }
-
-    private static void assignSharedFieldsForPackageItemInfo(PackageItemInfo packageItemInfo,
-            ComponentParseUtils.ParsedComponent parsedComponent) {
-        packageItemInfo.banner = parsedComponent.banner;
-        packageItemInfo.icon = parsedComponent.icon;
-        packageItemInfo.labelRes = parsedComponent.labelRes;
-        packageItemInfo.logo = parsedComponent.logo;
-        packageItemInfo.name = parsedComponent.className;
-        packageItemInfo.nonLocalizedLabel = parsedComponent.nonLocalizedLabel;
-        packageItemInfo.packageName = parsedComponent.getPackageName();
-    }
-
-    private static void assignSharedFieldsForComponentInfo(ComponentInfo componentInfo,
-            ComponentParseUtils.ParsedComponent parsedComponent) {
-        assignSharedFieldsForPackageItemInfo(componentInfo, parsedComponent);
-        componentInfo.descriptionRes = parsedComponent.descriptionRes;
-        componentInfo.directBootAware = parsedComponent.directBootAware;
-        componentInfo.enabled = parsedComponent.enabled;
-        componentInfo.splitName = parsedComponent.getSplitName();
-    }
-
-}
diff --git a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java b/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java
new file mode 100644
index 0000000..e7d91c2
--- /dev/null
+++ b/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java
@@ -0,0 +1,697 @@
+/*
+ * 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.content.pm.parsing;
+
+import android.annotation.CheckResult;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.apex.ApexInfo;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ComponentInfo;
+import android.content.pm.ConfigurationInfo;
+import android.content.pm.FallbackCategoryProvider;
+import android.content.pm.FeatureGroupInfo;
+import android.content.pm.FeatureInfo;
+import android.content.pm.InstrumentationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageItemInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageParser;
+import android.content.pm.PackageUserState;
+import android.content.pm.PermissionGroupInfo;
+import android.content.pm.PermissionInfo;
+import android.content.pm.ProviderInfo;
+import android.content.pm.SELinuxUtil;
+import android.content.pm.ServiceInfo;
+import android.content.pm.Signature;
+import android.content.pm.SigningInfo;
+import android.content.pm.parsing.ParsingPackage;
+import android.os.Environment;
+import android.os.UserHandle;
+
+import com.android.internal.util.ArrayUtils;
+import android.content.pm.parsing.component.ComponentParseUtils;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedComponent;
+import android.content.pm.parsing.component.ParsedInstrumentation;
+import android.content.pm.parsing.component.ParsedMainComponent;
+import android.content.pm.parsing.component.ParsedPermission;
+import android.content.pm.parsing.component.ParsedPermissionGroup;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedService;
+
+import libcore.util.EmptyArray;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.Set;
+
+/** @hide **/
+public class PackageInfoWithoutStateUtils {
+
+    @Nullable
+    public static PackageInfo generate(ParsingPackageRead pkg, int[] gids,
+            @PackageManager.PackageInfoFlags int flags, long firstInstallTime, long lastUpdateTime,
+            Set<String> grantedPermissions, PackageUserState state, int userId) {
+        return generateWithComponents(pkg, gids, flags, firstInstallTime, lastUpdateTime, grantedPermissions,
+                state, userId, null);
+    }
+
+    @Nullable
+    public static PackageInfo generate(ParsingPackageRead pkg, ApexInfo apexInfo, int flags) {
+        return generateWithComponents(pkg, EmptyArray.INT, flags, 0, 0, Collections.emptySet(),
+                new PackageUserState(), UserHandle.getCallingUserId(), apexInfo);
+    }
+
+    @Nullable
+    private static PackageInfo generateWithComponents(ParsingPackageRead pkg, int[] gids,
+            @PackageManager.PackageInfoFlags int flags, long firstInstallTime, long lastUpdateTime,
+            Set<String> grantedPermissions, PackageUserState state, int userId,
+            @Nullable ApexInfo apexInfo) {
+        ApplicationInfo applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
+        if (applicationInfo == null) {
+            return null;
+        }
+        PackageInfo info = generateWithoutComponents(pkg, gids, flags, firstInstallTime,
+                lastUpdateTime, grantedPermissions, state, userId, apexInfo, applicationInfo);
+
+        if (info == null) {
+            return null;
+        }
+
+        if ((flags & PackageManager.GET_ACTIVITIES) != 0) {
+            final int N = pkg.getActivities().size();
+            if (N > 0) {
+                int num = 0;
+                final ActivityInfo[] res = new ActivityInfo[N];
+                for (int i = 0; i < N; i++) {
+                    final ParsedActivity a = pkg.getActivities().get(i);
+                    if (ComponentParseUtils.isMatch(state, false, pkg.isEnabled(), a,
+                            flags)) {
+                        if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(
+                                a.getName())) {
+                            continue;
+                        }
+                        res[num++] = generateActivityInfo(pkg, a, flags, state,
+                                applicationInfo, userId);
+                    }
+                }
+                info.activities = ArrayUtils.trimToSize(res, num);
+            }
+        }
+        if ((flags & PackageManager.GET_RECEIVERS) != 0) {
+            final int size = pkg.getReceivers().size();
+            if (size > 0) {
+                int num = 0;
+                final ActivityInfo[] res = new ActivityInfo[size];
+                for (int i = 0; i < size; i++) {
+                    final ParsedActivity a = pkg.getReceivers().get(i);
+                    if (ComponentParseUtils.isMatch(state, false, pkg.isEnabled(), a,
+                            flags)) {
+                        res[num++] = generateActivityInfo(pkg, a, flags, state,
+                                applicationInfo, userId);
+                    }
+                }
+                info.receivers = ArrayUtils.trimToSize(res, num);
+            }
+        }
+        if ((flags & PackageManager.GET_SERVICES) != 0) {
+            final int size = pkg.getServices().size();
+            if (size > 0) {
+                int num = 0;
+                final ServiceInfo[] res = new ServiceInfo[size];
+                for (int i = 0; i < size; i++) {
+                    final ParsedService s = pkg.getServices().get(i);
+                    if (ComponentParseUtils.isMatch(state, false, pkg.isEnabled(), s,
+                            flags)) {
+                        res[num++] = generateServiceInfo(pkg, s, flags, state,
+                                applicationInfo, userId);
+                    }
+                }
+                info.services = ArrayUtils.trimToSize(res, num);
+            }
+        }
+        if ((flags & PackageManager.GET_PROVIDERS) != 0) {
+            final int size = pkg.getProviders().size();
+            if (size > 0) {
+                int num = 0;
+                final ProviderInfo[] res = new ProviderInfo[size];
+                for (int i = 0; i < size; i++) {
+                    final ParsedProvider pr = pkg.getProviders()
+                            .get(i);
+                    if (ComponentParseUtils.isMatch(state, false, pkg.isEnabled(), pr,
+                            flags)) {
+                        res[num++] = generateProviderInfo(pkg, pr, flags, state,
+                                applicationInfo, userId);
+                    }
+                }
+                info.providers = ArrayUtils.trimToSize(res, num);
+            }
+        }
+        if ((flags & PackageManager.GET_INSTRUMENTATION) != 0) {
+            int N = pkg.getInstrumentations().size();
+            if (N > 0) {
+                info.instrumentation = new InstrumentationInfo[N];
+                for (int i = 0; i < N; i++) {
+                    info.instrumentation[i] = generateInstrumentationInfo(
+                            pkg.getInstrumentations().get(i), pkg, flags, userId);
+                }
+            }
+        }
+
+        return info;
+    }
+
+    @Nullable
+    public static PackageInfo generateWithoutComponents(ParsingPackageRead pkg, int[] gids,
+            @PackageManager.PackageInfoFlags int flags, long firstInstallTime, long lastUpdateTime,
+            Set<String> grantedPermissions, PackageUserState state, int userId,
+            @Nullable ApexInfo apexInfo, @NonNull ApplicationInfo applicationInfo) {
+        if (!checkUseInstalled(pkg, state, flags)) {
+            return null;
+        }
+
+        PackageInfo pi = new PackageInfo();
+        pi.packageName = pkg.getPackageName();
+        pi.splitNames = pkg.getSplitNames();
+        pi.versionCode = pkg.getVersionCode();
+        pi.versionCodeMajor = pkg.getVersionCodeMajor();
+        pi.baseRevisionCode = pkg.getBaseRevisionCode();
+        pi.splitRevisionCodes = pkg.getSplitRevisionCodes();
+        pi.versionName = pkg.getVersionName();
+        pi.sharedUserId = pkg.getSharedUserId();
+        pi.sharedUserLabel = pkg.getSharedUserLabel();
+        pi.applicationInfo = applicationInfo;
+        pi.installLocation = pkg.getInstallLocation();
+        if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0
+                || (pi.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
+            pi.requiredForAllUsers = pkg.isRequiredForAllUsers();
+        }
+        pi.restrictedAccountType = pkg.getRestrictedAccountType();
+        pi.requiredAccountType = pkg.getRequiredAccountType();
+        pi.overlayTarget = pkg.getOverlayTarget();
+        pi.targetOverlayableName = pkg.getOverlayTargetName();
+        pi.overlayCategory = pkg.getOverlayCategory();
+        pi.overlayPriority = pkg.getOverlayPriority();
+        pi.mOverlayIsStatic = pkg.isOverlayIsStatic();
+        pi.compileSdkVersion = pkg.getCompileSdkVersion();
+        pi.compileSdkVersionCodename = pkg.getCompileSdkVersionCodeName();
+        pi.firstInstallTime = firstInstallTime;
+        pi.lastUpdateTime = lastUpdateTime;
+        if ((flags & PackageManager.GET_GIDS) != 0) {
+            pi.gids = gids;
+        }
+        if ((flags & PackageManager.GET_CONFIGURATIONS) != 0) {
+            int size = pkg.getConfigPreferences().size();
+            if (size > 0) {
+                pi.configPreferences = new ConfigurationInfo[size];
+                pkg.getConfigPreferences().toArray(pi.configPreferences);
+            }
+            size = pkg.getReqFeatures().size();
+            if (size > 0) {
+                pi.reqFeatures = new FeatureInfo[size];
+                pkg.getReqFeatures().toArray(pi.reqFeatures);
+            }
+            size = pkg.getFeatureGroups().size();
+            if (size > 0) {
+                pi.featureGroups = new FeatureGroupInfo[size];
+                pkg.getFeatureGroups().toArray(pi.featureGroups);
+            }
+        }
+        if ((flags & PackageManager.GET_PERMISSIONS) != 0) {
+            int size = ArrayUtils.size(pkg.getPermissions());
+            if (size > 0) {
+                pi.permissions = new PermissionInfo[size];
+                for (int i = 0; i < size; i++) {
+                    pi.permissions[i] = generatePermissionInfo(pkg.getPermissions().get(i),
+                            flags);
+                }
+            }
+            size = pkg.getRequestedPermissions().size();
+            if (size > 0) {
+                pi.requestedPermissions = new String[size];
+                pi.requestedPermissionsFlags = new int[size];
+                for (int i = 0; i < size; i++) {
+                    final String perm = pkg.getRequestedPermissions().get(i);
+                    pi.requestedPermissions[i] = perm;
+                    // The notion of required permissions is deprecated but for compatibility.
+                    pi.requestedPermissionsFlags[i] |= PackageInfo.REQUESTED_PERMISSION_REQUIRED;
+                    if (grantedPermissions != null && grantedPermissions.contains(perm)) {
+                        pi.requestedPermissionsFlags[i] |= PackageInfo.REQUESTED_PERMISSION_GRANTED;
+                    }
+                }
+            }
+        }
+
+        if (apexInfo != null) {
+            File apexFile = new File(apexInfo.modulePath);
+
+            pi.applicationInfo.sourceDir = apexFile.getPath();
+            pi.applicationInfo.publicSourceDir = apexFile.getPath();
+            if (apexInfo.isFactory) {
+                pi.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+            } else {
+                pi.applicationInfo.flags &= ~ApplicationInfo.FLAG_SYSTEM;
+            }
+            if (apexInfo.isActive) {
+                pi.applicationInfo.flags |= ApplicationInfo.FLAG_INSTALLED;
+            } else {
+                pi.applicationInfo.flags &= ~ApplicationInfo.FLAG_INSTALLED;
+            }
+            pi.isApex = true;
+        }
+
+        PackageParser.SigningDetails signingDetails = pkg.getSigningDetails();
+        // deprecated method of getting signing certificates
+        if ((flags & PackageManager.GET_SIGNATURES) != 0) {
+            if (signingDetails.hasPastSigningCertificates()) {
+                // Package has included signing certificate rotation information.  Return the oldest
+                // cert so that programmatic checks keep working even if unaware of key rotation.
+                pi.signatures = new Signature[1];
+                pi.signatures[0] = signingDetails.pastSigningCertificates[0];
+            } else if (signingDetails.hasSignatures()) {
+                // otherwise keep old behavior
+                int numberOfSigs = signingDetails.signatures.length;
+                pi.signatures = new Signature[numberOfSigs];
+                System.arraycopy(signingDetails.signatures, 0, pi.signatures, 0,
+                        numberOfSigs);
+            }
+        }
+
+        // replacement for GET_SIGNATURES
+        if ((flags & PackageManager.GET_SIGNING_CERTIFICATES) != 0) {
+            if (signingDetails != PackageParser.SigningDetails.UNKNOWN) {
+                // only return a valid SigningInfo if there is signing information to report
+                pi.signingInfo = new SigningInfo(signingDetails);
+            } else {
+                pi.signingInfo = null;
+            }
+        }
+
+        return pi;
+    }
+
+    @Nullable
+    public static ApplicationInfo generateApplicationInfo(ParsingPackageRead pkg,
+            @PackageManager.ApplicationInfoFlags int flags, PackageUserState state, int userId) {
+        if (pkg == null) {
+            return null;
+        }
+
+        if (!checkUseInstalled(pkg, state, flags)) {
+            return null;
+        }
+
+        // Make shallow copy so we can store the metadata/libraries safely
+        ApplicationInfo ai = pkg.toAppInfoWithoutState();
+        // Init handles data directories
+        // TODO(b/135203078): Consolidate the data directory logic, remove initForUser
+        ai.initForUser(userId);
+
+        ai.flags = appInfoFlags(pkg);
+        ai.privateFlags = appInfoPrivateFlags(pkg);
+
+        if ((flags & PackageManager.GET_META_DATA) == 0) {
+            ai.metaData = null;
+        }
+        if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) == 0) {
+            ai.sharedLibraryFiles = null;
+            ai.sharedLibraryInfos = null;
+        }
+
+        // CompatibilityMode is global state.
+        if (!PackageParser.sCompatibilityModeEnabled) {
+            ai.disableCompatibilityMode();
+        }
+
+        ai.flags |= flag(state.stopped, ApplicationInfo.FLAG_STOPPED)
+                | flag(state.installed, ApplicationInfo.FLAG_INSTALLED)
+                | flag(state.suspended, ApplicationInfo.FLAG_SUSPENDED);
+        ai.privateFlags |= flag(state.instantApp, ApplicationInfo.PRIVATE_FLAG_INSTANT)
+                | flag(state.virtualPreload, ApplicationInfo.PRIVATE_FLAG_VIRTUAL_PRELOAD)
+                | flag(state.hidden, ApplicationInfo.PRIVATE_FLAG_HIDDEN);
+
+        if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
+            ai.enabled = true;
+        } else if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
+            ai.enabled = (flags & PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS) != 0;
+        } else if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED
+                || state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) {
+            ai.enabled = false;
+        }
+        ai.enabledSetting = state.enabled;
+        if (ai.category == ApplicationInfo.CATEGORY_UNDEFINED) {
+            ai.category = state.categoryHint;
+        }
+        if (ai.category == ApplicationInfo.CATEGORY_UNDEFINED) {
+            ai.category = FallbackCategoryProvider.getFallbackCategory(ai.packageName);
+        }
+        ai.seInfoUser = SELinuxUtil.assignSeinfoUser(state);
+        ai.resourceDirs = state.getOverlayPaths();
+
+        return ai;
+    }
+
+    @Nullable
+    public static ActivityInfo generateActivityInfo(ParsingPackageRead pkg, ParsedActivity a,
+            @PackageManager.ComponentInfoFlags int flags, PackageUserState state,
+            @Nullable ApplicationInfo applicationInfo, int userId) {
+        if (a == null) return null;
+        if (!checkUseInstalled(pkg, state, flags)) {
+            return null;
+        }
+        if (applicationInfo == null) {
+            applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
+        }
+        // Make shallow copies so we can store the metadata safely
+        ActivityInfo ai = new ActivityInfo();
+        assignSharedFieldsForComponentInfo(ai, a);
+        ai.targetActivity = a.getTargetActivity();
+        ai.processName = a.getProcessName();
+        ai.exported = a.isExported();
+        ai.theme = a.getTheme();
+        ai.uiOptions = a.getUiOptions();
+        ai.parentActivityName = a.getParentActivityName();
+        ai.permission = a.getPermission();
+        ai.taskAffinity = a.getTaskAffinity();
+        ai.flags = a.getFlags();
+        ai.privateFlags = a.getPrivateFlags();
+        ai.launchMode = a.getLaunchMode();
+        ai.documentLaunchMode = a.getDocumentLaunchMode();
+        ai.maxRecents = a.getMaxRecents();
+        ai.configChanges = a.getConfigChanges();
+        ai.softInputMode = a.getSoftInputMode();
+        ai.persistableMode = a.getPersistableMode();
+        ai.lockTaskLaunchMode = a.getLockTaskLaunchMode();
+        ai.screenOrientation = a.getScreenOrientation();
+        ai.resizeMode = a.getResizeMode();
+        Float maxAspectRatio = a.getMaxAspectRatio();
+        ai.maxAspectRatio = maxAspectRatio != null ? maxAspectRatio : 0f;
+        Float minAspectRatio = a.getMinAspectRatio();
+        ai.minAspectRatio = minAspectRatio != null ? minAspectRatio : 0f;
+        ai.requestedVrComponent = a.getRequestedVrComponent();
+        ai.rotationAnimation = a.getRotationAnimation();
+        ai.colorMode = a.getColorMode();
+        ai.preferMinimalPostProcessing = a.isPreferMinimalPostProcessing();
+        ai.windowLayout = a.getWindowLayout();
+        ai.metaData = a.getMetaData();
+        ai.applicationInfo = applicationInfo;
+        return ai;
+    }
+
+    @Nullable
+    public static ActivityInfo generateActivityInfo(ParsingPackageRead pkg, ParsedActivity a,
+            @PackageManager.ComponentInfoFlags int flags, PackageUserState state, int userId) {
+        return generateActivityInfo(pkg, a, flags, state, null, userId);
+    }
+
+    @Nullable
+    public static ServiceInfo generateServiceInfo(ParsingPackageRead pkg, ParsedService s,
+            @PackageManager.ComponentInfoFlags int flags, PackageUserState state,
+            @Nullable ApplicationInfo applicationInfo, int userId) {
+        if (s == null) return null;
+        if (!checkUseInstalled(pkg, state, flags)) {
+            return null;
+        }
+        if (applicationInfo == null) {
+            applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
+        }
+        // Make shallow copies so we can store the metadata safely
+        ServiceInfo si = new ServiceInfo();
+        assignSharedFieldsForComponentInfo(si, s);
+        si.exported = s.isExported();
+        si.flags = s.getFlags();
+        si.metaData = s.getMetaData();
+        si.permission = s.getPermission();
+        si.processName = s.getProcessName();
+        si.mForegroundServiceType = s.getForegroundServiceType();
+        si.applicationInfo = applicationInfo;
+        return si;
+    }
+
+    @Nullable
+    public static ServiceInfo generateServiceInfo(ParsingPackageRead pkg, ParsedService s,
+            @PackageManager.ComponentInfoFlags int flags, PackageUserState state, int userId) {
+        return generateServiceInfo(pkg, s, flags, state, null, userId);
+    }
+
+    @Nullable
+    public static ProviderInfo generateProviderInfo(ParsingPackageRead pkg, ParsedProvider p,
+            @PackageManager.ComponentInfoFlags int flags, PackageUserState state,
+            @Nullable ApplicationInfo applicationInfo, int userId) {
+        if (p == null) return null;
+        if (!checkUseInstalled(pkg, state, flags)) {
+            return null;
+        }
+        if (applicationInfo == null) {
+            applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
+        }
+        // Make shallow copies so we can store the metadata safely
+        ProviderInfo pi = new ProviderInfo();
+        assignSharedFieldsForComponentInfo(pi, p);
+        pi.exported = p.isExported();
+        pi.flags = p.getFlags();
+        pi.processName = p.getProcessName();
+        pi.authority = p.getAuthority();
+        pi.isSyncable = p.isSyncable();
+        pi.readPermission = p.getReadPermission();
+        pi.writePermission = p.getWritePermission();
+        pi.grantUriPermissions = p.isGrantUriPermissions();
+        pi.forceUriPermissions = p.isForceUriPermissions();
+        pi.multiprocess = p.isMultiProcess();
+        pi.initOrder = p.getInitOrder();
+        pi.uriPermissionPatterns = p.getUriPermissionPatterns();
+        pi.pathPermissions = p.getPathPermissions();
+        pi.metaData = p.getMetaData();
+        if ((flags & PackageManager.GET_URI_PERMISSION_PATTERNS) == 0) {
+            pi.uriPermissionPatterns = null;
+        }
+        pi.applicationInfo = applicationInfo;
+        return pi;
+    }
+
+    @Nullable
+    public static ProviderInfo generateProviderInfo(ParsingPackageRead pkg, ParsedProvider p,
+            @PackageManager.ComponentInfoFlags int flags, PackageUserState state, int userId) {
+        return generateProviderInfo(pkg, p, flags, state, null, userId);
+    }
+
+    @Nullable
+    public static InstrumentationInfo generateInstrumentationInfo(ParsedInstrumentation i,
+            ParsingPackageRead pkg, @PackageManager.ComponentInfoFlags int flags, int userId) {
+        if (i == null) return null;
+
+        InstrumentationInfo ii = new InstrumentationInfo();
+        assignSharedFieldsForPackageItemInfo(ii, i);
+        ii.targetPackage = i.getTargetPackage();
+        ii.targetProcesses = i.getTargetProcesses();
+        ii.handleProfiling = i.isHandleProfiling();
+        ii.functionalTest = i.isFunctionalTest();
+
+        ii.sourceDir = pkg.getBaseCodePath();
+        ii.publicSourceDir = pkg.getBaseCodePath();
+        ii.splitNames = pkg.getSplitNames();
+        ii.splitSourceDirs = pkg.getSplitCodePaths();
+        ii.splitPublicSourceDirs = pkg.getSplitCodePaths();
+        ii.splitDependencies = pkg.getSplitDependencies();
+        ii.dataDir = getDataDir(pkg, userId).getAbsolutePath();
+        ii.deviceProtectedDataDir = getDeviceProtectedDataDir(pkg, userId).getAbsolutePath();
+        ii.credentialProtectedDataDir = getCredentialProtectedDataDir(pkg,
+                userId).getAbsolutePath();
+
+        if ((flags & PackageManager.GET_META_DATA) == 0) {
+            return ii;
+        }
+        ii.metaData = i.getMetaData();
+        return ii;
+    }
+
+    @Nullable
+    public static PermissionInfo generatePermissionInfo(ParsedPermission p,
+            @PackageManager.ComponentInfoFlags int flags) {
+        if (p == null) return null;
+
+        PermissionInfo pi = new PermissionInfo(p.getBackgroundPermission());
+
+        assignSharedFieldsForPackageItemInfo(pi, p);
+
+        pi.group = p.getGroup();
+        pi.requestRes = p.getRequestRes();
+        pi.protectionLevel = p.getProtectionLevel();
+        pi.descriptionRes = p.getDescriptionRes();
+        pi.flags = p.getFlags();
+
+        if ((flags & PackageManager.GET_META_DATA) == 0) {
+            return pi;
+        }
+        pi.metaData = p.getMetaData();
+        return pi;
+    }
+
+    @Nullable
+    public static PermissionGroupInfo generatePermissionGroupInfo(ParsedPermissionGroup pg,
+            @PackageManager.ComponentInfoFlags int flags) {
+        if (pg == null) return null;
+
+        PermissionGroupInfo pgi = new PermissionGroupInfo(
+                pg.getRequestDetailResourceId(),
+                pg.getBackgroundRequestResourceId(),
+                pg.getBackgroundRequestDetailResourceId()
+        );
+
+        assignSharedFieldsForPackageItemInfo(pgi, pg);
+        pgi.descriptionRes = pg.getDescriptionRes();
+        pgi.priority = pg.getPriority();
+        pgi.requestRes = pg.getRequestRes();
+        pgi.flags = pg.getFlags();
+
+        if ((flags & PackageManager.GET_META_DATA) == 0) {
+            return pgi;
+        }
+        pgi.metaData = pg.getMetaData();
+        return pgi;
+    }
+
+    private static void assignSharedFieldsForComponentInfo(@NonNull ComponentInfo componentInfo,
+            @NonNull ParsedMainComponent mainComponent) {
+        assignSharedFieldsForPackageItemInfo(componentInfo, mainComponent);
+        componentInfo.descriptionRes = mainComponent.getDescriptionRes();
+        componentInfo.directBootAware = mainComponent.isDirectBootAware();
+        componentInfo.enabled = mainComponent.isEnabled();
+        componentInfo.splitName = mainComponent.getSplitName();
+    }
+
+    private static void assignSharedFieldsForPackageItemInfo(
+            @NonNull PackageItemInfo packageItemInfo, @NonNull ParsedComponent component) {
+        packageItemInfo.nonLocalizedLabel = ComponentParseUtils.getNonLocalizedLabel(component);
+        packageItemInfo.icon = ComponentParseUtils.getIcon(component);
+
+        packageItemInfo.banner = component.getBanner();
+        packageItemInfo.labelRes = component.getLabelRes();
+        packageItemInfo.logo = component.getLogo();
+        packageItemInfo.name = component.getName();
+        packageItemInfo.packageName = component.getPackageName();
+    }
+
+    @CheckResult
+    private static int flag(boolean hasFlag, int flag) {
+        if (hasFlag) {
+            return flag;
+        } else {
+            return 0;
+        }
+    }
+
+    /** @see ApplicationInfo#flags */
+    public static int appInfoFlags(ParsingPackageRead pkg) {
+        // @formatter:off
+        return flag(pkg.isExternalStorage(), ApplicationInfo.FLAG_EXTERNAL_STORAGE)
+                | flag(pkg.isBaseHardwareAccelerated(), ApplicationInfo.FLAG_HARDWARE_ACCELERATED)
+                | flag(pkg.isAllowBackup(), ApplicationInfo.FLAG_ALLOW_BACKUP)
+                | flag(pkg.isKillAfterRestore(), ApplicationInfo.FLAG_KILL_AFTER_RESTORE)
+                | flag(pkg.isRestoreAnyVersion(), ApplicationInfo.FLAG_RESTORE_ANY_VERSION)
+                | flag(pkg.isFullBackupOnly(), ApplicationInfo.FLAG_FULL_BACKUP_ONLY)
+                | flag(pkg.isPersistent(), ApplicationInfo.FLAG_PERSISTENT)
+                | flag(pkg.isDebuggable(), ApplicationInfo.FLAG_DEBUGGABLE)
+                | flag(pkg.isVmSafeMode(), ApplicationInfo.FLAG_VM_SAFE_MODE)
+                | flag(pkg.isHasCode(), ApplicationInfo.FLAG_HAS_CODE)
+                | flag(pkg.isAllowTaskReparenting(), ApplicationInfo.FLAG_ALLOW_TASK_REPARENTING)
+                | flag(pkg.isAllowClearUserData(), ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA)
+                | flag(pkg.isLargeHeap(), ApplicationInfo.FLAG_LARGE_HEAP)
+                | flag(pkg.isUsesCleartextTraffic(), ApplicationInfo.FLAG_USES_CLEARTEXT_TRAFFIC)
+                | flag(pkg.isSupportsRtl(), ApplicationInfo.FLAG_SUPPORTS_RTL)
+                | flag(pkg.isTestOnly(), ApplicationInfo.FLAG_TEST_ONLY)
+                | flag(pkg.isMultiArch(), ApplicationInfo.FLAG_MULTIARCH)
+                | flag(pkg.isExtractNativeLibs(), ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS)
+                | flag(pkg.isGame(), ApplicationInfo.FLAG_IS_GAME)
+                | flag(pkg.isSupportsSmallScreens(), ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS)
+                | flag(pkg.isSupportsNormalScreens(), ApplicationInfo.FLAG_SUPPORTS_NORMAL_SCREENS)
+                | flag(pkg.isSupportsLargeScreens(), ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS)
+                | flag(pkg.isSupportsExtraLargeScreens(), ApplicationInfo.FLAG_SUPPORTS_XLARGE_SCREENS)
+                | flag(pkg.isResizeable(), ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS)
+                | flag(pkg.isAnyDensity(), ApplicationInfo.FLAG_SUPPORTS_SCREEN_DENSITIES);
+        // @formatter:on
+    }
+
+    /** @see ApplicationInfo#privateFlags */
+    public static int appInfoPrivateFlags(ParsingPackageRead pkg) {
+        // @formatter:off
+        int privateFlags = flag(pkg.isStaticSharedLibrary(), ApplicationInfo.PRIVATE_FLAG_STATIC_SHARED_LIBRARY)
+                | flag(pkg.isOverlay(), ApplicationInfo.PRIVATE_FLAG_IS_RESOURCE_OVERLAY)
+                | flag(pkg.isIsolatedSplitLoading(), ApplicationInfo.PRIVATE_FLAG_ISOLATED_SPLIT_LOADING)
+                | flag(pkg.isHasDomainUrls(), ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS)
+                | flag(pkg.isProfileableByShell(), ApplicationInfo.PRIVATE_FLAG_PROFILEABLE_BY_SHELL)
+                | flag(pkg.isBackupInForeground(), ApplicationInfo.PRIVATE_FLAG_BACKUP_IN_FOREGROUND)
+                | flag(pkg.isUseEmbeddedDex(), ApplicationInfo.PRIVATE_FLAG_USE_EMBEDDED_DEX)
+                | flag(pkg.isDefaultToDeviceProtectedStorage(), ApplicationInfo.PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE)
+                | flag(pkg.isDirectBootAware(), ApplicationInfo.PRIVATE_FLAG_DIRECT_BOOT_AWARE)
+                | flag(pkg.isPartiallyDirectBootAware(), ApplicationInfo.PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE)
+                | flag(pkg.isAllowClearUserDataOnFailedRestore(), ApplicationInfo.PRIVATE_FLAG_ALLOW_CLEAR_USER_DATA_ON_FAILED_RESTORE)
+                | flag(pkg.isAllowAudioPlaybackCapture(), ApplicationInfo.PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE)
+                | flag(pkg.isRequestLegacyExternalStorage(), ApplicationInfo.PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE)
+                | flag(pkg.isUsesNonSdkApi(), ApplicationInfo.PRIVATE_FLAG_USES_NON_SDK_API)
+                | flag(pkg.isHasFragileUserData(), ApplicationInfo.PRIVATE_FLAG_HAS_FRAGILE_USER_DATA)
+                | flag(pkg.isCantSaveState(), ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE)
+                | flag(pkg.isResizeableActivityViaSdkVersion(), ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION)
+                | flag(pkg.isAllowNativeHeapPointerTagging(), ApplicationInfo.PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING);
+        // @formatter:on
+
+        Boolean resizeableActivity = pkg.getResizeableActivity();
+        if (resizeableActivity != null) {
+            if (resizeableActivity) {
+                privateFlags |= ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE;
+            } else {
+                privateFlags |= ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE;
+            }
+        }
+
+        return privateFlags;
+    }
+
+    private static boolean checkUseInstalled(ParsingPackageRead pkg, PackageUserState state,
+            @PackageManager.PackageInfoFlags int flags) {
+        // If available for the target user
+        return state.isAvailable(flags);
+    }
+
+    @NonNull
+    public static File getDataDir(ParsingPackageRead pkg, int userId) {
+        if ("android".equals(pkg.getPackageName())) {
+            return Environment.getDataSystemDirectory();
+        }
+
+        if (pkg.isDefaultToDeviceProtectedStorage()
+                && PackageManager.APPLY_DEFAULT_TO_DEVICE_PROTECTED_STORAGE) {
+            return getDeviceProtectedDataDir(pkg, userId);
+        } else {
+            return getCredentialProtectedDataDir(pkg, userId);
+        }
+    }
+
+    @NonNull
+    public static File getDeviceProtectedDataDir(ParsingPackageRead pkg, int userId) {
+        return Environment.getDataUserDePackageDirectory(pkg.getVolumeUuid(), userId,
+                pkg.getPackageName());
+    }
+
+    @NonNull
+    public static File getCredentialProtectedDataDir(ParsingPackageRead pkg, int userId) {
+        return Environment.getDataUserCePackageDirectory(pkg.getVolumeUuid(), userId,
+                pkg.getPackageName());
+    }
+}
diff --git a/core/java/android/content/pm/parsing/ParsedPackage.java b/core/java/android/content/pm/parsing/ParsedPackage.java
deleted file mode 100644
index 05cf586..0000000
--- a/core/java/android/content/pm/parsing/ParsedPackage.java
+++ /dev/null
@@ -1,155 +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.content.pm.parsing;
-
-import android.content.pm.PackageParser;
-
-/**
- * Methods used for mutation after direct package parsing, mostly done inside
- * {@link com.android.server.pm.PackageManagerService}.
- *
- * Java disallows defining this as an inner interface, so this must be a separate file.
- *
- * @hide
- */
-public interface ParsedPackage extends AndroidPackage {
-
-    AndroidPackage hideAsFinal();
-
-    ParsedPackage addUsesLibrary(int index, String libraryName);
-
-    ParsedPackage addUsesOptionalLibrary(int index, String libraryName);
-
-    ParsedPackage capPermissionPriorities();
-
-    ParsedPackage clearAdoptPermissions();
-
-    ParsedPackage clearOriginalPackages();
-
-    ParsedPackage clearProtectedBroadcasts();
-
-    /**
-     * TODO(b/135203078): Use non-AppInfo method
-     * @deprecated use {@link #setCodePath(String)}
-     */
-    @Deprecated
-    ParsedPackage setApplicationInfoCodePath(String applicationInfoCodePath);
-
-    /**
-     * TODO(b/135203078): Use non-AppInfo method
-     * @deprecated use {@link #setCodePath(String)}
-     */
-    @Deprecated
-    ParsedPackage setApplicationInfoResourcePath(String applicationInfoResourcePath);
-
-    ParsedPackage setBaseCodePath(String baseCodePath);
-
-    ParsedPackage setCodePath(String codePath);
-
-    ParsedPackage setCpuAbiOverride(String cpuAbiOverride);
-
-    ParsedPackage setNativeLibraryDir(String nativeLibraryDir);
-
-    ParsedPackage setNativeLibraryRootDir(String nativeLibraryRootDir);
-
-    ParsedPackage setPackageName(String packageName);
-
-    ParsedPackage setPrimaryCpuAbi(String primaryCpuAbi);
-
-    ParsedPackage setProcessName(String processName);
-
-    ParsedPackage setRealPackage(String realPackage);
-
-    ParsedPackage setSecondaryCpuAbi(String secondaryCpuAbi);
-
-    ParsedPackage setSigningDetails(PackageParser.SigningDetails signingDetails);
-
-    ParsedPackage setSplitCodePaths(String[] splitCodePaths);
-
-    ParsedPackage initForUser(int userId);
-
-    ParsedPackage setNativeLibraryRootRequiresIsa(boolean nativeLibraryRootRequiresIsa);
-
-    ParsedPackage setAllComponentsDirectBootAware(boolean allComponentsDirectBootAware);
-
-    ParsedPackage setFactoryTest(boolean factoryTest);
-
-    ParsedPackage markNotActivitiesAsNotExportedIfSingleUser();
-
-    ParsedPackage setOdm(boolean odm);
-
-    ParsedPackage setOem(boolean oem);
-
-    ParsedPackage setPrivileged(boolean privileged);
-
-    ParsedPackage setProduct(boolean product);
-
-    ParsedPackage setSignedWithPlatformKey(boolean signedWithPlatformKey);
-
-    ParsedPackage setSystem(boolean system);
-
-    ParsedPackage setSystemExt(boolean systemExt);
-
-    ParsedPackage setUpdatedSystemApp(boolean updatedSystemApp);
-
-    ParsedPackage setVendor(boolean vendor);
-
-    ParsedPackage removePermission(int index);
-
-    ParsedPackage removeUsesLibrary(String libraryName);
-
-    ParsedPackage removeUsesOptionalLibrary(String libraryName);
-
-    ParsedPackage setApplicationInfoBaseResourcePath(String applicationInfoBaseResourcePath);
-
-    ParsedPackage setApplicationInfoSplitResourcePaths(
-            String[] applicationInfoSplitResourcePaths);
-
-    ParsedPackage setApplicationVolumeUuid(String applicationVolumeUuid);
-
-    ParsedPackage setCoreApp(boolean coreApp);
-
-    ParsedPackage setIsStub(boolean isStub);
-
-    // TODO(b/135203078): Remove entirely
-    ParsedPackage setPackageSettingCallback(PackageSettingCallback packageSettingCallback);
-
-    ParsedPackage setRestrictUpdateHash(byte[] restrictUpdateHash);
-
-    ParsedPackage setSeInfo(String seInfo);
-
-    ParsedPackage setSeInfoUser(String seInfoUser);
-
-    ParsedPackage setSecondaryNativeLibraryDir(String secondaryNativeLibraryDir);
-
-    ParsedPackage setUid(int uid);
-
-    ParsedPackage setVersionCode(int versionCode);
-
-    ParsedPackage setVersionCodeMajor(int versionCodeMajor);
-
-    // TODO(b/135203078): Move logic earlier in parse chain so nothing needs to be reverted
-    ParsedPackage setDefaultToDeviceProtectedStorage(boolean defaultToDeviceProtectedStorage);
-
-    ParsedPackage setDirectBootAware(boolean directBootAware);
-
-    ParsedPackage setPersistent(boolean persistent);
-
-    interface PackageSettingCallback {
-        default void setAndroidPackage(AndroidPackage pkg){}
-    }
-}
diff --git a/core/java/android/content/pm/parsing/ParsingPackage.java b/core/java/android/content/pm/parsing/ParsingPackage.java
index 9ddcc09..aa93d80 100644
--- a/core/java/android/content/pm/parsing/ParsingPackage.java
+++ b/core/java/android/content/pm/parsing/ParsingPackage.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 The Android Open Source Project
+ * Copyright (C) 2020 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,35 +16,36 @@
 
 package android.content.pm.parsing;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Intent;
 import android.content.pm.ConfigurationInfo;
 import android.content.pm.FeatureGroupInfo;
 import android.content.pm.FeatureInfo;
 import android.content.pm.PackageParser;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivity;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivityIntentInfo;
-import android.content.pm.parsing.ComponentParseUtils.ParsedFeature;
-import android.content.pm.parsing.ComponentParseUtils.ParsedInstrumentation;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermission;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermissionGroup;
-import android.content.pm.parsing.ComponentParseUtils.ParsedProvider;
-import android.content.pm.parsing.ComponentParseUtils.ParsedService;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedFeature;
+import android.content.pm.parsing.component.ParsedInstrumentation;
+import android.content.pm.parsing.component.ParsedIntentInfo;
+import android.content.pm.parsing.component.ParsedPermission;
+import android.content.pm.parsing.component.ParsedPermissionGroup;
+import android.content.pm.parsing.component.ParsedProcess;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedService;
 import android.os.Bundle;
-import android.util.ArrayMap;
-import android.util.ArraySet;
 import android.util.SparseArray;
 
 import java.security.PublicKey;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * Methods used for mutation during direct package parsing.
  *
- * Java disallows defining this as an inner interface, so this must be a separate file.
- *
  * @hide
  */
-public interface ParsingPackage extends AndroidPackage {
+@SuppressWarnings("UnusedReturnValue")
+public interface ParsingPackage extends ParsingPackageRead {
 
     ParsingPackage addActivity(ParsedActivity parsedActivity);
 
@@ -66,18 +67,18 @@
 
     ParsingPackage addOverlayable(String overlayableName, String actorName);
 
-    ParsingPackage addFeature(ParsedFeature permission);
-
     ParsingPackage addPermission(ParsedPermission permission);
 
     ParsingPackage addPermissionGroup(ParsedPermissionGroup permissionGroup);
 
-    ParsingPackage addPreferredActivityFilter(ParsedActivityIntentInfo activityIntentInfo);
+    ParsingPackage addPreferredActivityFilter(String className, ParsedIntentInfo intentInfo);
 
     ParsingPackage addProtectedBroadcast(String protectedBroadcast);
 
     ParsingPackage addProvider(ParsedProvider parsedProvider);
 
+    ParsingPackage addFeature(ParsedFeature permission);
+
     ParsingPackage addReceiver(ParsedActivity parsedReceiver);
 
     ParsingPackage addReqFeature(FeatureInfo reqFeature);
@@ -100,7 +101,9 @@
 
     ParsingPackage addQueriesPackage(String packageName);
 
-    ParsingPackage setProcesses(ArrayMap<String, ComponentParseUtils.ParsedProcess> processes);
+    ParsingPackage addQueriesProvider(String authority);
+
+    ParsingPackage setProcesses(@NonNull Map<String, ParsedProcess> processes);
 
     ParsingPackage asSplit(
             String[] splitNames,
@@ -109,7 +112,7 @@
             @Nullable SparseArray<int[]> splitDependencies
     );
 
-    ParsingPackage setAppMetaData(Bundle appMetaData);
+    ParsingPackage setMetaData(Bundle metaData);
 
     ParsingPackage setForceQueryable(boolean forceQueryable);
 
@@ -117,8 +120,6 @@
 
     ParsingPackage setMinAspectRatio(float minAspectRatio);
 
-    ParsingPackage setName(String name);
-
     ParsingPackage setPermission(String permission);
 
     ParsingPackage setProcessName(String processName);
@@ -135,9 +136,9 @@
 
     ParsingPackage setBaseHardwareAccelerated(boolean baseHardwareAccelerated);
 
-    ParsingPackage setActivitiesResizeModeResizeable(boolean resizeable);
+    ParsingPackage setResizeableActivity(Boolean resizeable);
 
-    ParsingPackage setActivitiesResizeModeResizeableViaSdkVersion(boolean resizeableViaSdkVersion);
+    ParsingPackage setResizeableActivityViaSdkVersion(boolean resizeableViaSdkVersion);
 
     ParsingPackage setAllowAudioPlaybackCapture(boolean allowAudioPlaybackCapture);
 
@@ -149,7 +150,7 @@
 
     ParsingPackage setAllowTaskReparenting(boolean allowTaskReparenting);
 
-    ParsingPackage setIsOverlay(boolean isOverlay);
+    ParsingPackage setOverlay(boolean isOverlay);
 
     ParsingPackage setBackupInForeground(boolean backupInForeground);
 
@@ -171,7 +172,7 @@
 
     ParsingPackage setHasFragileUserData(boolean hasFragileUserData);
 
-    ParsingPackage setIsGame(boolean isGame);
+    ParsingPackage setGame(boolean isGame);
 
     ParsingPackage setIsolatedSplitLoading(boolean isolatedSplitLoading);
 
@@ -189,6 +190,10 @@
 
     ParsingPackage setRequestLegacyExternalStorage(boolean requestLegacyExternalStorage);
 
+    ParsingPackage setAllowNativeHeapPointerTagging(boolean allowNativeHeapPointerTagging);
+  
+    ParsingPackage setPreserveLegacyExternalStorage(boolean preserveLegacyExternalStorage);
+
     ParsingPackage setRestoreAnyVersion(boolean restoreAnyVersion);
 
     ParsingPackage setSplitHasCode(int splitIndex, boolean splitHasCode);
@@ -215,8 +220,6 @@
 
     ParsingPackage setAppComponentFactory(String appComponentFactory);
 
-    ParsingPackage setApplicationVolumeUuid(String applicationVolumeUuid);
-
     ParsingPackage setBackupAgentName(String backupAgentName);
 
     ParsingPackage setBanner(int banner);
@@ -227,8 +230,6 @@
 
     ParsingPackage setClassName(String className);
 
-    ParsingPackage setCodePath(String codePath);
-
     ParsingPackage setCompatibleWidthLimitDp(int compatibleWidthLimitDp);
 
     ParsingPackage setDescriptionRes(int descriptionRes);
@@ -241,8 +242,6 @@
 
     ParsingPackage setHasDomainUrls(boolean hasDomainUrls);
 
-    ParsingPackage setIcon(int icon);
-
     ParsingPackage setIconRes(int iconRes);
 
     ParsingPackage setInstallLocation(int installLocation);
@@ -301,17 +300,17 @@
 
     ParsingPackage setSupportsSmallScreens(int supportsSmallScreens);
 
-    ParsingPackage setSupportsXLargeScreens(int supportsXLargeScreens);
+    ParsingPackage setSupportsExtraLargeScreens(int supportsExtraLargeScreens);
 
     ParsingPackage setTargetSandboxVersion(int targetSandboxVersion);
 
     ParsingPackage setTheme(int theme);
 
-    ParsingPackage setUpgradeKeySets(ArraySet<String> upgradeKeySets);
+    ParsingPackage setUpgradeKeySets(@NonNull Set<String> upgradeKeySets);
 
     ParsingPackage setUse32BitAbi(boolean use32BitAbi);
 
-    ParsingPackage setVolumeUuid(String volumeUuid);
+    ParsingPackage setVolumeUuid(@Nullable String volumeUuid);
 
     ParsingPackage setZygotePreloadName(String zygotePreloadName);
 
@@ -321,17 +320,16 @@
 
     ParsingPackage sortServices();
 
-    ParsedPackage hideAsParsed();
-
     ParsingPackage setBaseRevisionCode(int baseRevisionCode);
 
-    ParsingPackage setPreferredOrder(int preferredOrder);
-
     ParsingPackage setVersionName(String versionName);
 
     ParsingPackage setCompileSdkVersion(int compileSdkVersion);
 
     ParsingPackage setCompileSdkVersionCodename(String compileSdkVersionCodename);
 
-    boolean usesCompatibilityMode();
+    // TODO(b/135203078): This class no longer has access to ParsedPackage, find a replacement
+    //  for moving to the next step
+    @Deprecated
+    Object hideAsParsed();
 }
diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/core/java/android/content/pm/parsing/ParsingPackageImpl.java
new file mode 100644
index 0000000..c3eea2b
--- /dev/null
+++ b/core/java/android/content/pm/parsing/ParsingPackageImpl.java
@@ -0,0 +1,2584 @@
+/*
+ * 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.content.pm.parsing;
+
+import static java.util.Collections.emptyList;
+import static java.util.Collections.emptyMap;
+import static java.util.Collections.emptySet;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ConfigurationInfo;
+import android.content.pm.FeatureGroupInfo;
+import android.content.pm.FeatureInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageParser;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedComponent;
+import android.content.pm.parsing.component.ParsedFeature;
+import android.content.pm.parsing.component.ParsedInstrumentation;
+import android.content.pm.parsing.component.ParsedIntentInfo;
+import android.content.pm.parsing.component.ParsedMainComponent;
+import android.content.pm.parsing.component.ParsedPermission;
+import android.content.pm.parsing.component.ParsedPermissionGroup;
+import android.content.pm.parsing.component.ParsedProcess;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedService;
+import android.content.res.TypedArray;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.storage.StorageManager;
+import android.text.TextUtils;
+import android.util.ArraySet;
+import android.util.Pair;
+import android.util.SparseArray;
+
+import com.android.internal.R;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.CollectionUtils;
+import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
+import com.android.internal.util.Parcelling.BuiltIn.ForBoolean;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedStringArray;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedStringList;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedStringSet;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedStringValueMap;
+
+import java.security.PublicKey;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * The backing data for a package that was parsed from disk.
+ *
+ * The field nullability annotations here are for internal reference. For effective nullability,
+ * see the parent interfaces.
+ *
+ * TODO(b/135203078): Convert Lists used as sets into Sets, to better express intended use case
+ *
+ * @hide
+ */
+public class ParsingPackageImpl implements ParsingPackage, Parcelable {
+
+    private static final String TAG = "PackageImpl";
+
+    public static ForBoolean sForBoolean = Parcelling.Cache.getOrCreate(ForBoolean.class);
+    public static ForInternedString sForString = Parcelling.Cache.getOrCreate(
+            ForInternedString.class);
+    public static ForInternedStringArray sForStringArray = Parcelling.Cache.getOrCreate(
+            ForInternedStringArray.class);
+    public static ForInternedStringList sForStringList = Parcelling.Cache.getOrCreate(
+            ForInternedStringList.class);
+    public static ForInternedStringValueMap sForStringValueMap = Parcelling.Cache.getOrCreate(
+            ForInternedStringValueMap.class);
+    public static ForInternedStringSet sForStringSet = Parcelling.Cache.getOrCreate(
+            ForInternedStringSet.class);
+    protected static ParsedIntentInfo.StringPairListParceler sForIntentInfoPairs =
+            Parcelling.Cache.getOrCreate(ParsedIntentInfo.StringPairListParceler.class);
+
+    private static final Comparator<ParsedMainComponent> ORDER_COMPARATOR =
+            (first, second) -> Integer.compare(second.getOrder(), first.getOrder());
+
+    // These are objects because null represents not explicitly set
+    @Nullable
+    @DataClass.ParcelWith(ForBoolean.class)
+    private Boolean supportsSmallScreens;
+    @Nullable
+    @DataClass.ParcelWith(ForBoolean.class)
+    private Boolean supportsNormalScreens;
+    @Nullable
+    @DataClass.ParcelWith(ForBoolean.class)
+    private Boolean supportsLargeScreens;
+    @Nullable
+    @DataClass.ParcelWith(ForBoolean.class)
+    private Boolean supportsExtraLargeScreens;
+    @Nullable
+    @DataClass.ParcelWith(ForBoolean.class)
+    private Boolean resizeable;
+    @Nullable
+    @DataClass.ParcelWith(ForBoolean.class)
+    private Boolean anyDensity;
+
+    protected int versionCode;
+    protected int versionCodeMajor;
+    private int baseRevisionCode;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String versionName;
+
+    private int compileSdkVersion;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String compileSdkVersionCodeName;
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedString.class)
+    protected String packageName;
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String realPackage;
+
+    @NonNull
+    protected String baseCodePath;
+
+    private boolean requiredForAllUsers;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String restrictedAccountType;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String requiredAccountType;
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String overlayTarget;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String overlayTargetName;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String overlayCategory;
+    private int overlayPriority;
+    private boolean overlayIsStatic;
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringValueMap.class)
+    private Map<String, String> overlayables = emptyMap();
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String staticSharedLibName;
+    private long staticSharedLibVersion;
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringList.class)
+    private List<String> libraryNames = emptyList();
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringList.class)
+    protected List<String> usesLibraries = emptyList();
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringList.class)
+    protected List<String> usesOptionalLibraries = emptyList();
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringList.class)
+    private List<String> usesStaticLibraries = emptyList();
+    @Nullable
+    private long[] usesStaticLibrariesVersions;
+
+    @Nullable
+    private String[][] usesStaticLibrariesCertDigests;
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String sharedUserId;
+
+    private int sharedUserLabel;
+    @NonNull
+    private List<ConfigurationInfo> configPreferences = emptyList();
+    @NonNull
+    private List<FeatureInfo> reqFeatures = emptyList();
+    @NonNull
+    private List<FeatureGroupInfo> featureGroups = emptyList();
+
+    @Nullable
+    private byte[] restrictUpdateHash;
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringList.class)
+    protected List<String> originalPackages = emptyList();
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringList.class)
+    protected List<String> adoptPermissions = emptyList();
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringList.class)
+    private List<String> requestedPermissions = emptyList();
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringList.class)
+    private List<String> implicitPermissions = emptyList();
+
+    @NonNull
+    private Set<String> upgradeKeySets = emptySet();
+    @NonNull
+    private Map<String, ArraySet<PublicKey>> keySetMapping = emptyMap();
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringList.class)
+    protected List<String> protectedBroadcasts = emptyList();
+
+    @NonNull
+    protected List<ParsedActivity> activities = emptyList();
+
+    @NonNull
+    protected List<ParsedActivity> receivers = emptyList();
+
+    @NonNull
+    protected List<ParsedService> services = emptyList();
+
+    @NonNull
+    protected List<ParsedProvider> providers = emptyList();
+
+    @NonNull
+    private List<ParsedFeature> features = emptyList();
+
+    @NonNull
+    protected List<ParsedPermission> permissions = emptyList();
+
+    @NonNull
+    protected List<ParsedPermissionGroup> permissionGroups = emptyList();
+
+    @NonNull
+    protected List<ParsedInstrumentation> instrumentations = emptyList();
+
+    @NonNull
+    @DataClass.ParcelWith(ParsedIntentInfo.ListParceler.class)
+    private List<Pair<String, ParsedIntentInfo>> preferredActivityFilters = emptyList();
+
+    @NonNull
+    private Map<String, ParsedProcess> processes = emptyMap();
+
+    @Nullable
+    private Bundle metaData;
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    protected String volumeUuid;
+    @Nullable
+    private PackageParser.SigningDetails signingDetails;
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedString.class)
+    protected String codePath;
+
+    private boolean use32BitAbi;
+    private boolean visibleToInstantApps;
+
+    private boolean forceQueryable;
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringList.class)
+    private List<Intent> queriesIntents = emptyList();
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringList.class)
+    private List<String> queriesPackages = emptyList();
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedStringSet.class)
+    private Set<String> queriesProviders = emptySet();
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedStringArray.class)
+    private String[] splitClassLoaderNames;
+    @Nullable
+    protected String[] splitCodePaths;
+    @Nullable
+    private SparseArray<int[]> splitDependencies;
+    @Nullable
+    private int[] splitFlags;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedStringArray.class)
+    private String[] splitNames;
+    @Nullable
+    private int[] splitRevisionCodes;
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String appComponentFactory;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String backupAgentName;
+    private int banner;
+    private int category;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String classLoaderName;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String className;
+    private int compatibleWidthLimitDp;
+    private int descriptionRes;
+    private boolean enabled;
+    private boolean crossProfile;
+    private int fullBackupContent;
+    private int iconRes;
+    private int installLocation = PackageParser.PARSE_DEFAULT_INSTALL_LOCATION;
+    private int labelRes;
+    private int largestWidthLimitDp;
+    private int logo;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String manageSpaceActivityName;
+    private float maxAspectRatio;
+    private float minAspectRatio;
+    private int minSdkVersion;
+    private int networkSecurityConfigRes;
+    @Nullable
+    private CharSequence nonLocalizedLabel;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String permission;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String processName;
+    private int requiresSmallestWidthDp;
+    private int roundIconRes;
+    private int targetSandboxVersion;
+    private int targetSdkVersion;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String taskAffinity;
+    private int theme;
+
+    private int uiOptions;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String zygotePreloadName;
+
+    private boolean externalStorage;
+    private boolean baseHardwareAccelerated;
+    private boolean allowBackup;
+    private boolean killAfterRestore;
+    private boolean restoreAnyVersion;
+    private boolean fullBackupOnly;
+    private boolean persistent;
+    private boolean debuggable;
+    private boolean vmSafeMode;
+    private boolean hasCode;
+    private boolean allowTaskReparenting;
+    private boolean allowClearUserData;
+    private boolean largeHeap;
+    private boolean usesCleartextTraffic;
+    private boolean supportsRtl;
+    private boolean testOnly;
+    private boolean multiArch;
+    private boolean extractNativeLibs;
+    private boolean game;
+
+    /**
+     * @see ParsingPackageRead#getResizeableActivity()
+     */
+    @Nullable
+    @DataClass.ParcelWith(ForBoolean.class)
+    private Boolean resizeableActivity;
+
+    private boolean staticSharedLibrary;
+    private boolean overlay;
+    private boolean isolatedSplitLoading;
+    private boolean hasDomainUrls;
+    private boolean profileableByShell;
+    private boolean backupInForeground;
+    private boolean useEmbeddedDex;
+    private boolean defaultToDeviceProtectedStorage;
+    private boolean directBootAware;
+    private boolean partiallyDirectBootAware;
+    private boolean resizeableActivityViaSdkVersion;
+    private boolean allowClearUserDataOnFailedRestore;
+    private boolean allowAudioPlaybackCapture;
+    private boolean requestLegacyExternalStorage;
+    private boolean usesNonSdkApi;
+    private boolean hasFragileUserData;
+    private boolean cantSaveState;
+    private boolean allowNativeHeapPointerTagging;
+    private boolean preserveLegacyExternalStorage;
+
+    // TODO(chiuwinson): Non-null
+    @Nullable
+    private ArraySet<String> mimeGroups;
+
+    @VisibleForTesting
+    public ParsingPackageImpl(@NonNull String packageName, @NonNull String baseCodePath,
+            @NonNull String codePath, @Nullable TypedArray manifestArray) {
+        this.packageName = TextUtils.safeIntern(packageName);
+        this.baseCodePath = TextUtils.safeIntern(baseCodePath);
+        this.codePath = TextUtils.safeIntern(codePath);
+
+        if (manifestArray != null) {
+            versionCode = manifestArray.getInteger(R.styleable.AndroidManifest_versionCode, 0);
+            versionCodeMajor = manifestArray.getInteger(
+                    R.styleable.AndroidManifest_versionCodeMajor, 0);
+            setBaseRevisionCode(
+                    manifestArray.getInteger(R.styleable.AndroidManifest_revisionCode, 0));
+            setVersionName(manifestArray.getNonConfigurationString(
+                    R.styleable.AndroidManifest_versionName, 0));
+
+            setCompileSdkVersion(manifestArray.getInteger(
+                    R.styleable.AndroidManifest_compileSdkVersion, 0));
+            setCompileSdkVersionCodename(manifestArray.getNonConfigurationString(
+                    R.styleable.AndroidManifest_compileSdkVersionCodename, 0));
+        }
+    }
+
+    public boolean isSupportsSmallScreens() {
+        if (supportsSmallScreens == null) {
+            return targetSdkVersion >= Build.VERSION_CODES.DONUT;
+        }
+
+        return supportsSmallScreens;
+    }
+
+    public boolean isSupportsNormalScreens() {
+        return supportsNormalScreens == null || supportsNormalScreens;
+    }
+
+    public boolean isSupportsLargeScreens() {
+        if (supportsLargeScreens == null) {
+            return targetSdkVersion >= Build.VERSION_CODES.DONUT;
+        }
+
+        return supportsLargeScreens;
+    }
+
+    public boolean isSupportsExtraLargeScreens() {
+        if (supportsExtraLargeScreens == null) {
+            return targetSdkVersion >= Build.VERSION_CODES.GINGERBREAD;
+        }
+
+        return supportsExtraLargeScreens;
+    }
+
+    public boolean isResizeable() {
+        if (resizeable == null) {
+            return targetSdkVersion >= Build.VERSION_CODES.DONUT;
+        }
+
+        return resizeable;
+    }
+
+    public boolean isAnyDensity() {
+        if (anyDensity == null) {
+            return targetSdkVersion >= Build.VERSION_CODES.DONUT;
+        }
+
+        return anyDensity;
+    }
+
+    @Override
+    public ParsingPackageImpl sortActivities() {
+        Collections.sort(this.activities, ORDER_COMPARATOR);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl sortReceivers() {
+        Collections.sort(this.receivers, ORDER_COMPARATOR);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl sortServices() {
+        Collections.sort(this.services, ORDER_COMPARATOR);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setVersionName(String versionName) {
+        this.versionName = TextUtils.safeIntern(versionName);
+        return this;
+    }
+
+    @Override
+    public ParsingPackage setCompileSdkVersionCodename(String compileSdkVersionCodename) {
+        this.compileSdkVersionCodeName = TextUtils.safeIntern(compileSdkVersionCodename);
+        return this;
+    }
+
+    @Override
+    public Object hideAsParsed() {
+        // There is no equivalent for core-only parsing
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ParsingPackageImpl addConfigPreference(ConfigurationInfo configPreference) {
+        this.configPreferences = CollectionUtils.add(this.configPreferences, configPreference);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addReqFeature(FeatureInfo reqFeature) {
+        this.reqFeatures = CollectionUtils.add(this.reqFeatures, reqFeature);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addFeatureGroup(FeatureGroupInfo featureGroup) {
+        this.featureGroups = CollectionUtils.add(this.featureGroups, featureGroup);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addProtectedBroadcast(String protectedBroadcast) {
+        if (!this.protectedBroadcasts.contains(protectedBroadcast)) {
+            this.protectedBroadcasts = CollectionUtils.add(this.protectedBroadcasts,
+                    TextUtils.safeIntern(protectedBroadcast));
+        }
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addInstrumentation(ParsedInstrumentation instrumentation) {
+        this.instrumentations = CollectionUtils.add(this.instrumentations, instrumentation);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addOriginalPackage(String originalPackage) {
+        this.originalPackages = CollectionUtils.add(this.originalPackages,
+                TextUtils.safeIntern(originalPackage));
+        return this;
+    }
+
+    @Override
+    public ParsingPackage addOverlayable(String overlayableName, String actorName) {
+        this.overlayables = CollectionUtils.add(this.overlayables,
+                TextUtils.safeIntern(overlayableName), TextUtils.safeIntern(actorName));
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addAdoptPermission(String adoptPermission) {
+        this.adoptPermissions = CollectionUtils.add(this.adoptPermissions,
+                TextUtils.safeIntern(adoptPermission));
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addPermission(ParsedPermission permission) {
+        this.permissions = CollectionUtils.add(this.permissions, permission);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addPermissionGroup(ParsedPermissionGroup permissionGroup) {
+        this.permissionGroups = CollectionUtils.add(this.permissionGroups, permissionGroup);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addRequestedPermission(String permission) {
+        this.requestedPermissions = CollectionUtils.add(this.requestedPermissions,
+                TextUtils.safeIntern(permission));
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addImplicitPermission(String permission) {
+        this.implicitPermissions = CollectionUtils.add(this.implicitPermissions,
+                TextUtils.safeIntern(permission));
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addKeySet(String keySetName, PublicKey publicKey) {
+        ArraySet<PublicKey> publicKeys = keySetMapping.get(keySetName);
+        if (publicKeys == null) {
+            publicKeys = new ArraySet<>();
+        }
+        publicKeys.add(publicKey);
+        keySetMapping = CollectionUtils.add(this.keySetMapping, keySetName, publicKeys);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addActivity(ParsedActivity parsedActivity) {
+        this.activities = CollectionUtils.add(this.activities, parsedActivity);
+        addMimeGroupsFromComponent(parsedActivity);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addReceiver(ParsedActivity parsedReceiver) {
+        this.receivers = CollectionUtils.add(this.receivers, parsedReceiver);
+        addMimeGroupsFromComponent(parsedReceiver);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addService(ParsedService parsedService) {
+        this.services = CollectionUtils.add(this.services, parsedService);
+        addMimeGroupsFromComponent(parsedService);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addProvider(ParsedProvider parsedProvider) {
+        this.providers = CollectionUtils.add(this.providers, parsedProvider);
+        addMimeGroupsFromComponent(parsedProvider);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addFeature(ParsedFeature feature) {
+        this.features = CollectionUtils.add(this.features, feature);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addLibraryName(String libraryName) {
+        this.libraryNames = CollectionUtils.add(this.libraryNames,
+                TextUtils.safeIntern(libraryName));
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addUsesOptionalLibrary(String libraryName) {
+        this.usesOptionalLibraries = CollectionUtils.add(this.usesOptionalLibraries,
+                TextUtils.safeIntern(libraryName));
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addUsesLibrary(String libraryName) {
+        this.usesLibraries = CollectionUtils.add(this.usesLibraries,
+                TextUtils.safeIntern(libraryName));
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl removeUsesOptionalLibrary(String libraryName) {
+        this.usesOptionalLibraries = CollectionUtils.remove(this.usesOptionalLibraries,
+                libraryName);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addUsesStaticLibrary(String libraryName) {
+        this.usesStaticLibraries = CollectionUtils.add(this.usesStaticLibraries,
+                TextUtils.safeIntern(libraryName));
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addUsesStaticLibraryVersion(long version) {
+        this.usesStaticLibrariesVersions = ArrayUtils.appendLong(this.usesStaticLibrariesVersions,
+                version, true);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addUsesStaticLibraryCertDigests(String[] certSha256Digests) {
+        this.usesStaticLibrariesCertDigests = ArrayUtils.appendElement(String[].class,
+                this.usesStaticLibrariesCertDigests, certSha256Digests, true);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addPreferredActivityFilter(String className,
+            ParsedIntentInfo intentInfo) {
+        this.preferredActivityFilters = CollectionUtils.add(this.preferredActivityFilters,
+                Pair.create(className, intentInfo));
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addQueriesIntent(Intent intent) {
+        this.queriesIntents = CollectionUtils.add(this.queriesIntents, intent);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addQueriesPackage(String packageName) {
+        this.queriesPackages = CollectionUtils.add(this.queriesPackages,
+                TextUtils.safeIntern(packageName));
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl addQueriesProvider(String authority) {
+        this.queriesProviders = CollectionUtils.add(this.queriesProviders,
+                TextUtils.safeIntern(authority));
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setSupportsSmallScreens(int supportsSmallScreens) {
+        if (supportsSmallScreens == 1) {
+            return this;
+        }
+
+        this.supportsSmallScreens = supportsSmallScreens < 0;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setSupportsNormalScreens(int supportsNormalScreens) {
+        if (supportsNormalScreens == 1) {
+            return this;
+        }
+
+        this.supportsNormalScreens = supportsNormalScreens < 0;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setSupportsLargeScreens(int supportsLargeScreens) {
+        if (supportsLargeScreens == 1) {
+            return this;
+        }
+
+        this.supportsLargeScreens = supportsLargeScreens < 0;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setSupportsExtraLargeScreens(int supportsExtraLargeScreens) {
+        if (supportsExtraLargeScreens == 1) {
+            return this;
+        }
+
+        this.supportsExtraLargeScreens = supportsExtraLargeScreens < 0;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setResizeable(int resizeable) {
+        if (resizeable == 1) {
+            return this;
+        }
+
+        this.resizeable = resizeable < 0;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setAnyDensity(int anyDensity) {
+        if (anyDensity == 1) {
+            return this;
+        }
+
+        this.anyDensity = anyDensity < 0;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl asSplit(
+            String[] splitNames,
+            String[] splitCodePaths,
+            int[] splitRevisionCodes,
+            SparseArray<int[]> splitDependencies
+    ) {
+        this.splitNames = splitNames;
+
+        if (this.splitNames != null) {
+            for (int index = 0; index < this.splitNames.length; index++) {
+                splitNames[index] = TextUtils.safeIntern(splitNames[index]);
+            }
+        }
+
+        this.splitCodePaths = splitCodePaths;
+        this.splitRevisionCodes = splitRevisionCodes;
+        this.splitDependencies = splitDependencies;
+
+        int count = splitNames.length;
+        this.splitFlags = new int[count];
+        this.splitClassLoaderNames = new String[count];
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setSplitHasCode(int splitIndex, boolean splitHasCode) {
+        this.splitFlags[splitIndex] = splitHasCode
+                ? this.splitFlags[splitIndex] | ApplicationInfo.FLAG_HAS_CODE
+                : this.splitFlags[splitIndex] & ~ApplicationInfo.FLAG_HAS_CODE;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setSplitClassLoaderName(int splitIndex, String classLoaderName) {
+        this.splitClassLoaderNames[splitIndex] = classLoaderName;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setProcessName(String processName) {
+        this.processName = TextUtils.safeIntern(processName);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setRealPackage(@Nullable String realPackage) {
+        this.realPackage = TextUtils.safeIntern(realPackage);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setRestrictedAccountType(@Nullable String restrictedAccountType) {
+        this.restrictedAccountType = TextUtils.safeIntern(restrictedAccountType);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setRequiredAccountType(@Nullable String requiredAccountType) {
+        this.requiredAccountType = TextUtils.nullIfEmpty(TextUtils.safeIntern(requiredAccountType));
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setOverlayTarget(@Nullable String overlayTarget) {
+        this.overlayTarget = TextUtils.safeIntern(overlayTarget);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setOverlayTargetName(@Nullable String overlayTargetName) {
+        this.overlayTargetName = TextUtils.safeIntern(overlayTargetName);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setOverlayCategory(@Nullable String overlayCategory) {
+        this.overlayCategory = TextUtils.safeIntern(overlayCategory);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setVolumeUuid(@Nullable String volumeUuid) {
+        this.volumeUuid = TextUtils.safeIntern(volumeUuid);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setAppComponentFactory(@Nullable String appComponentFactory) {
+        this.appComponentFactory = TextUtils.safeIntern(appComponentFactory);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setBackupAgentName(@Nullable String backupAgentName) {
+        this.backupAgentName = TextUtils.safeIntern(backupAgentName);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setClassLoaderName(@Nullable String classLoaderName) {
+        this.classLoaderName = TextUtils.safeIntern(classLoaderName);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setClassName(@Nullable String className) {
+        this.className = TextUtils.safeIntern(className);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setManageSpaceActivityName(@Nullable String manageSpaceActivityName) {
+        this.manageSpaceActivityName = TextUtils.safeIntern(manageSpaceActivityName);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setPermission(@Nullable String permission) {
+        this.permission = TextUtils.safeIntern(permission);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setTaskAffinity(@Nullable String taskAffinity) {
+        this.taskAffinity = TextUtils.safeIntern(taskAffinity);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setZygotePreloadName(@Nullable String zygotePreloadName) {
+        this.zygotePreloadName = TextUtils.safeIntern(zygotePreloadName);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setStaticSharedLibName(String staticSharedLibName) {
+        this.staticSharedLibName = TextUtils.safeIntern(staticSharedLibName);
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setSharedUserId(String sharedUserId) {
+        this.sharedUserId = TextUtils.safeIntern(sharedUserId);
+        return this;
+    }
+
+    @NonNull
+    @Override
+    public String getProcessName() {
+        return processName != null ? processName : packageName;
+    }
+
+    @Override
+    public String toString() {
+        return "Package{"
+                + Integer.toHexString(System.identityHashCode(this))
+                + " " + packageName + "}";
+    }
+
+    @Deprecated
+    @Override
+    public ApplicationInfo toAppInfoWithoutState() {
+        ApplicationInfo appInfo = new ApplicationInfo();
+        appInfo.flags = PackageInfoWithoutStateUtils.appInfoFlags(this);
+        appInfo.privateFlags = PackageInfoWithoutStateUtils.appInfoPrivateFlags(this);
+
+        appInfo.appComponentFactory = appComponentFactory;
+        appInfo.backupAgentName = backupAgentName;
+        appInfo.banner = banner;
+        appInfo.category = category;
+        appInfo.classLoaderName = classLoaderName;
+        appInfo.className = className;
+        appInfo.compatibleWidthLimitDp = compatibleWidthLimitDp;
+        appInfo.compileSdkVersion = compileSdkVersion;
+        appInfo.compileSdkVersionCodename = compileSdkVersionCodeName;
+//        appInfo.credentialProtectedDataDir = credentialProtectedDataDir;
+//        appInfo.dataDir = dataDir;
+        appInfo.descriptionRes = descriptionRes;
+//        appInfo.deviceProtectedDataDir = deviceProtectedDataDir;
+        appInfo.enabled = enabled;
+        appInfo.fullBackupContent = fullBackupContent;
+//        appInfo.hiddenUntilInstalled = hiddenUntilInstalled;
+        appInfo.icon = (PackageParser.sUseRoundIcon && roundIconRes != 0) ? roundIconRes : iconRes;
+        appInfo.iconRes = iconRes;
+        appInfo.roundIconRes = roundIconRes;
+        appInfo.installLocation = installLocation;
+        appInfo.labelRes = labelRes;
+        appInfo.largestWidthLimitDp = largestWidthLimitDp;
+        appInfo.logo = logo;
+        appInfo.manageSpaceActivityName = manageSpaceActivityName;
+        appInfo.maxAspectRatio = maxAspectRatio;
+        appInfo.metaData = metaData;
+        appInfo.minAspectRatio = minAspectRatio;
+        appInfo.minSdkVersion = minSdkVersion;
+        appInfo.name = className;
+        if (appInfo.name != null) {
+            appInfo.name = appInfo.name.trim();
+        }
+//        appInfo.nativeLibraryDir = nativeLibraryDir;
+//        appInfo.nativeLibraryRootDir = nativeLibraryRootDir;
+//        appInfo.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa;
+        appInfo.networkSecurityConfigRes = networkSecurityConfigRes;
+        appInfo.nonLocalizedLabel = nonLocalizedLabel;
+        if (appInfo.nonLocalizedLabel != null) {
+            appInfo.nonLocalizedLabel = appInfo.nonLocalizedLabel.toString().trim();
+        }
+        appInfo.packageName = packageName;
+        appInfo.permission = permission;
+//        appInfo.primaryCpuAbi = primaryCpuAbi;
+        appInfo.processName = getProcessName();
+        appInfo.requiresSmallestWidthDp = requiresSmallestWidthDp;
+//        appInfo.secondaryCpuAbi = secondaryCpuAbi;
+//        appInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir;
+//        appInfo.seInfo = seInfo;
+//        appInfo.seInfoUser = seInfoUser;
+//        appInfo.sharedLibraryFiles = usesLibraryFiles.isEmpty()
+//                ? null : usesLibraryFiles.toArray(new String[0]);
+//        appInfo.sharedLibraryInfos = usesLibraryInfos.isEmpty() ? null : usesLibraryInfos;
+        appInfo.splitClassLoaderNames = splitClassLoaderNames;
+        appInfo.splitDependencies = splitDependencies;
+        appInfo.splitNames = splitNames;
+        appInfo.storageUuid = StorageManager.convert(volumeUuid);
+        appInfo.targetSandboxVersion = targetSandboxVersion;
+        appInfo.targetSdkVersion = targetSdkVersion;
+        appInfo.taskAffinity = taskAffinity;
+        appInfo.theme = theme;
+//        appInfo.uid = uid;
+        appInfo.uiOptions = uiOptions;
+        appInfo.volumeUuid = volumeUuid;
+        appInfo.zygotePreloadName = zygotePreloadName;
+        appInfo.crossProfile = isCrossProfile();
+
+        appInfo.setBaseCodePath(baseCodePath);
+        appInfo.setBaseResourcePath(baseCodePath);
+        appInfo.setCodePath(codePath);
+        appInfo.setResourcePath(codePath);
+        appInfo.setSplitCodePaths(splitCodePaths);
+        appInfo.setSplitResourcePaths(splitCodePaths);
+        appInfo.setVersionCode(PackageInfo.composeLongVersionCode(versionCodeMajor, versionCode));
+
+        // TODO(b/135203078): Can this be removed? Looks only used in ActivityInfo.
+//        appInfo.showUserIcon = pkg.getShowUserIcon();
+        // TODO(b/135203078): Unused?
+//        appInfo.resourceDirs = pkg.getResourceDirs();
+        // TODO(b/135203078): Unused?
+//        appInfo.enabledSetting = pkg.getEnabledSetting();
+        // TODO(b/135203078): See ParsingPackageImpl#getHiddenApiEnforcementPolicy
+//        appInfo.mHiddenApiPolicy = pkg.getHiddenApiPolicy();
+
+        return appInfo;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        sForBoolean.parcel(this.supportsSmallScreens, dest, flags);
+        sForBoolean.parcel(this.supportsNormalScreens, dest, flags);
+        sForBoolean.parcel(this.supportsLargeScreens, dest, flags);
+        sForBoolean.parcel(this.supportsExtraLargeScreens, dest, flags);
+        sForBoolean.parcel(this.resizeable, dest, flags);
+        sForBoolean.parcel(this.anyDensity, dest, flags);
+        dest.writeInt(this.versionCode);
+        dest.writeInt(this.versionCodeMajor);
+        dest.writeInt(this.baseRevisionCode);
+        sForString.parcel(this.versionName, dest, flags);
+        dest.writeInt(this.compileSdkVersion);
+        sForString.parcel(this.compileSdkVersionCodeName, dest, flags);
+        sForString.parcel(this.packageName, dest, flags);
+        sForString.parcel(this.realPackage, dest, flags);
+        sForString.parcel(this.baseCodePath, dest, flags);
+        dest.writeBoolean(this.requiredForAllUsers);
+        sForString.parcel(this.restrictedAccountType, dest, flags);
+        sForString.parcel(this.requiredAccountType, dest, flags);
+        sForString.parcel(this.overlayTarget, dest, flags);
+        sForString.parcel(this.overlayTargetName, dest, flags);
+        sForString.parcel(this.overlayCategory, dest, flags);
+        dest.writeInt(this.overlayPriority);
+        dest.writeBoolean(this.overlayIsStatic);
+        sForStringValueMap.parcel(this.overlayables, dest, flags);
+        sForString.parcel(this.staticSharedLibName, dest, flags);
+        dest.writeLong(this.staticSharedLibVersion);
+        sForStringList.parcel(this.libraryNames, dest, flags);
+        sForStringList.parcel(this.usesLibraries, dest, flags);
+        sForStringList.parcel(this.usesOptionalLibraries, dest, flags);
+        sForStringList.parcel(this.usesStaticLibraries, dest, flags);
+        dest.writeLongArray(this.usesStaticLibrariesVersions);
+
+        if (this.usesStaticLibrariesCertDigests == null) {
+            dest.writeInt(-1);
+        } else {
+            dest.writeInt(this.usesStaticLibrariesCertDigests.length);
+            for (int index = 0; index < this.usesStaticLibrariesCertDigests.length; index++) {
+                sForStringArray.parcel(this.usesStaticLibrariesCertDigests[index], dest, flags);
+            }
+        }
+
+        sForString.parcel(this.sharedUserId, dest, flags);
+        dest.writeInt(this.sharedUserLabel);
+        dest.writeTypedList(this.configPreferences);
+        dest.writeTypedList(this.reqFeatures);
+        dest.writeTypedList(this.featureGroups);
+        dest.writeByteArray(this.restrictUpdateHash);
+        sForStringList.parcel(this.originalPackages, dest, flags);
+        sForStringList.parcel(this.adoptPermissions, dest, flags);
+        sForStringList.parcel(this.requestedPermissions, dest, flags);
+        sForStringList.parcel(this.implicitPermissions, dest, flags);
+        sForStringSet.parcel(this.upgradeKeySets, dest, flags);
+        dest.writeMap(this.keySetMapping);
+        sForStringList.parcel(this.protectedBroadcasts, dest, flags);
+        dest.writeTypedList(this.activities);
+        dest.writeTypedList(this.receivers);
+        dest.writeTypedList(this.services);
+        dest.writeTypedList(this.providers);
+        dest.writeTypedList(this.features);
+        dest.writeTypedList(this.permissions);
+        dest.writeTypedList(this.permissionGroups);
+        dest.writeTypedList(this.instrumentations);
+        sForIntentInfoPairs.parcel(this.preferredActivityFilters, dest, flags);
+        dest.writeMap(this.processes);
+        dest.writeBundle(this.metaData);
+        sForString.parcel(this.volumeUuid, dest, flags);
+        dest.writeParcelable(this.signingDetails, flags);
+        sForString.parcel(this.codePath, dest, flags);
+        dest.writeBoolean(this.use32BitAbi);
+        dest.writeBoolean(this.visibleToInstantApps);
+        dest.writeBoolean(this.forceQueryable);
+        dest.writeParcelableList(this.queriesIntents, flags);
+        sForStringList.parcel(this.queriesPackages, dest, flags);
+        sForString.parcel(this.appComponentFactory, dest, flags);
+        sForString.parcel(this.backupAgentName, dest, flags);
+        dest.writeInt(this.banner);
+        dest.writeInt(this.category);
+        sForString.parcel(this.classLoaderName, dest, flags);
+        sForString.parcel(this.className, dest, flags);
+        dest.writeInt(this.compatibleWidthLimitDp);
+        dest.writeInt(this.descriptionRes);
+        dest.writeBoolean(this.enabled);
+        dest.writeBoolean(this.crossProfile);
+        dest.writeInt(this.fullBackupContent);
+        dest.writeInt(this.iconRes);
+        dest.writeInt(this.installLocation);
+        dest.writeInt(this.labelRes);
+        dest.writeInt(this.largestWidthLimitDp);
+        dest.writeInt(this.logo);
+        sForString.parcel(this.manageSpaceActivityName, dest, flags);
+        dest.writeFloat(this.maxAspectRatio);
+        dest.writeFloat(this.minAspectRatio);
+        dest.writeInt(this.minSdkVersion);
+        dest.writeInt(this.networkSecurityConfigRes);
+        dest.writeCharSequence(this.nonLocalizedLabel);
+        sForString.parcel(this.permission, dest, flags);
+        sForString.parcel(this.processName, dest, flags);
+        dest.writeInt(this.requiresSmallestWidthDp);
+        dest.writeInt(this.roundIconRes);
+        dest.writeInt(this.targetSandboxVersion);
+        dest.writeInt(this.targetSdkVersion);
+        sForString.parcel(this.taskAffinity, dest, flags);
+        dest.writeInt(this.theme);
+        dest.writeInt(this.uiOptions);
+        sForString.parcel(this.zygotePreloadName, dest, flags);
+        sForStringArray.parcel(this.splitClassLoaderNames, dest, flags);
+        sForStringArray.parcel(this.splitCodePaths, dest, flags);
+        dest.writeSparseArray(this.splitDependencies);
+        dest.writeIntArray(this.splitFlags);
+        sForStringArray.parcel(this.splitNames, dest, flags);
+        dest.writeIntArray(this.splitRevisionCodes);
+
+        dest.writeBoolean(this.externalStorage);
+        dest.writeBoolean(this.baseHardwareAccelerated);
+        dest.writeBoolean(this.allowBackup);
+        dest.writeBoolean(this.killAfterRestore);
+        dest.writeBoolean(this.restoreAnyVersion);
+        dest.writeBoolean(this.fullBackupOnly);
+        dest.writeBoolean(this.persistent);
+        dest.writeBoolean(this.debuggable);
+        dest.writeBoolean(this.vmSafeMode);
+        dest.writeBoolean(this.hasCode);
+        dest.writeBoolean(this.allowTaskReparenting);
+        dest.writeBoolean(this.allowClearUserData);
+        dest.writeBoolean(this.largeHeap);
+        dest.writeBoolean(this.usesCleartextTraffic);
+        dest.writeBoolean(this.supportsRtl);
+        dest.writeBoolean(this.testOnly);
+        dest.writeBoolean(this.multiArch);
+        dest.writeBoolean(this.extractNativeLibs);
+        dest.writeBoolean(this.game);
+
+        sForBoolean.parcel(this.resizeableActivity, dest, flags);
+
+        dest.writeBoolean(this.staticSharedLibrary);
+        dest.writeBoolean(this.overlay);
+        dest.writeBoolean(this.isolatedSplitLoading);
+        dest.writeBoolean(this.hasDomainUrls);
+        dest.writeBoolean(this.profileableByShell);
+        dest.writeBoolean(this.backupInForeground);
+        dest.writeBoolean(this.useEmbeddedDex);
+        dest.writeBoolean(this.defaultToDeviceProtectedStorage);
+        dest.writeBoolean(this.directBootAware);
+        dest.writeBoolean(this.partiallyDirectBootAware);
+        dest.writeBoolean(this.resizeableActivityViaSdkVersion);
+        dest.writeBoolean(this.allowClearUserDataOnFailedRestore);
+        dest.writeBoolean(this.allowAudioPlaybackCapture);
+        dest.writeBoolean(this.requestLegacyExternalStorage);
+        dest.writeBoolean(this.usesNonSdkApi);
+        dest.writeBoolean(this.hasFragileUserData);
+        dest.writeBoolean(this.cantSaveState);
+        dest.writeBoolean(this.allowNativeHeapPointerTagging);
+        dest.writeBoolean(this.preserveLegacyExternalStorage);
+        dest.writeArraySet(this.mimeGroups);
+    }
+
+    public ParsingPackageImpl(Parcel in) {
+        // We use the boot classloader for all classes that we load.
+        final ClassLoader boot = Object.class.getClassLoader();
+        this.supportsSmallScreens = sForBoolean.unparcel(in);
+        this.supportsNormalScreens = sForBoolean.unparcel(in);
+        this.supportsLargeScreens = sForBoolean.unparcel(in);
+        this.supportsExtraLargeScreens = sForBoolean.unparcel(in);
+        this.resizeable = sForBoolean.unparcel(in);
+        this.anyDensity = sForBoolean.unparcel(in);
+        this.versionCode = in.readInt();
+        this.versionCodeMajor = in.readInt();
+        this.baseRevisionCode = in.readInt();
+        this.versionName = sForString.unparcel(in);
+        this.compileSdkVersion = in.readInt();
+        this.compileSdkVersionCodeName = sForString.unparcel(in);
+        this.packageName = sForString.unparcel(in);
+        this.realPackage = sForString.unparcel(in);
+        this.baseCodePath = sForString.unparcel(in);
+        this.requiredForAllUsers = in.readBoolean();
+        this.restrictedAccountType = sForString.unparcel(in);
+        this.requiredAccountType = sForString.unparcel(in);
+        this.overlayTarget = sForString.unparcel(in);
+        this.overlayTargetName = sForString.unparcel(in);
+        this.overlayCategory = sForString.unparcel(in);
+        this.overlayPriority = in.readInt();
+        this.overlayIsStatic = in.readBoolean();
+        this.overlayables = sForStringValueMap.unparcel(in);
+        this.staticSharedLibName = sForString.unparcel(in);
+        this.staticSharedLibVersion = in.readLong();
+        this.libraryNames = sForStringList.unparcel(in);
+        this.usesLibraries = sForStringList.unparcel(in);
+        this.usesOptionalLibraries = sForStringList.unparcel(in);
+        this.usesStaticLibraries = sForStringList.unparcel(in);
+        this.usesStaticLibrariesVersions = in.createLongArray();
+
+        int digestsSize = in.readInt();
+        if (digestsSize >= 0) {
+            this.usesStaticLibrariesCertDigests = new String[digestsSize][];
+            for (int index = 0; index < digestsSize; index++) {
+                this.usesStaticLibrariesCertDigests[index] = sForStringArray.unparcel(in);
+            }
+        }
+
+        this.sharedUserId = sForString.unparcel(in);
+        this.sharedUserLabel = in.readInt();
+        this.configPreferences = in.createTypedArrayList(ConfigurationInfo.CREATOR);
+        this.reqFeatures = in.createTypedArrayList(FeatureInfo.CREATOR);
+        this.featureGroups = in.createTypedArrayList(FeatureGroupInfo.CREATOR);
+        this.restrictUpdateHash = in.createByteArray();
+        this.originalPackages = sForStringList.unparcel(in);
+        this.adoptPermissions = sForStringList.unparcel(in);
+        this.requestedPermissions = sForStringList.unparcel(in);
+        this.implicitPermissions = sForStringList.unparcel(in);
+        this.upgradeKeySets = sForStringSet.unparcel(in);
+        this.keySetMapping = in.readHashMap(boot);
+        this.protectedBroadcasts = sForStringList.unparcel(in);
+        this.activities = in.createTypedArrayList(ParsedActivity.CREATOR);
+        this.receivers = in.createTypedArrayList(ParsedActivity.CREATOR);
+        this.services = in.createTypedArrayList(ParsedService.CREATOR);
+        this.providers = in.createTypedArrayList(ParsedProvider.CREATOR);
+        this.features = in.createTypedArrayList(ParsedFeature.CREATOR);
+        this.permissions = in.createTypedArrayList(ParsedPermission.CREATOR);
+        this.permissionGroups = in.createTypedArrayList(ParsedPermissionGroup.CREATOR);
+        this.instrumentations = in.createTypedArrayList(ParsedInstrumentation.CREATOR);
+        this.preferredActivityFilters = sForIntentInfoPairs.unparcel(in);
+        this.processes = in.readHashMap(boot);
+        this.metaData = in.readBundle(boot);
+        this.volumeUuid = sForString.unparcel(in);
+        this.signingDetails = in.readParcelable(boot);
+        this.codePath = sForString.unparcel(in);
+        this.use32BitAbi = in.readBoolean();
+        this.visibleToInstantApps = in.readBoolean();
+        this.forceQueryable = in.readBoolean();
+        this.queriesIntents = in.createTypedArrayList(Intent.CREATOR);
+        this.queriesPackages = sForStringList.unparcel(in);
+        this.appComponentFactory = sForString.unparcel(in);
+        this.backupAgentName = sForString.unparcel(in);
+        this.banner = in.readInt();
+        this.category = in.readInt();
+        this.classLoaderName = sForString.unparcel(in);
+        this.className = sForString.unparcel(in);
+        this.compatibleWidthLimitDp = in.readInt();
+        this.descriptionRes = in.readInt();
+        this.enabled = in.readBoolean();
+        this.crossProfile = in.readBoolean();
+        this.fullBackupContent = in.readInt();
+        this.iconRes = in.readInt();
+        this.installLocation = in.readInt();
+        this.labelRes = in.readInt();
+        this.largestWidthLimitDp = in.readInt();
+        this.logo = in.readInt();
+        this.manageSpaceActivityName = sForString.unparcel(in);
+        this.maxAspectRatio = in.readFloat();
+        this.minAspectRatio = in.readFloat();
+        this.minSdkVersion = in.readInt();
+        this.networkSecurityConfigRes = in.readInt();
+        this.nonLocalizedLabel = in.readCharSequence();
+        this.permission = sForString.unparcel(in);
+        this.processName = sForString.unparcel(in);
+        this.requiresSmallestWidthDp = in.readInt();
+        this.roundIconRes = in.readInt();
+        this.targetSandboxVersion = in.readInt();
+        this.targetSdkVersion = in.readInt();
+        this.taskAffinity = sForString.unparcel(in);
+        this.theme = in.readInt();
+        this.uiOptions = in.readInt();
+        this.zygotePreloadName = sForString.unparcel(in);
+        this.splitClassLoaderNames = sForStringArray.unparcel(in);
+        this.splitCodePaths = sForStringArray.unparcel(in);
+        this.splitDependencies = in.readSparseArray(boot);
+        this.splitFlags = in.createIntArray();
+        this.splitNames = sForStringArray.unparcel(in);
+        this.splitRevisionCodes = in.createIntArray();
+        this.externalStorage = in.readBoolean();
+        this.baseHardwareAccelerated = in.readBoolean();
+        this.allowBackup = in.readBoolean();
+        this.killAfterRestore = in.readBoolean();
+        this.restoreAnyVersion = in.readBoolean();
+        this.fullBackupOnly = in.readBoolean();
+        this.persistent = in.readBoolean();
+        this.debuggable = in.readBoolean();
+        this.vmSafeMode = in.readBoolean();
+        this.hasCode = in.readBoolean();
+        this.allowTaskReparenting = in.readBoolean();
+        this.allowClearUserData = in.readBoolean();
+        this.largeHeap = in.readBoolean();
+        this.usesCleartextTraffic = in.readBoolean();
+        this.supportsRtl = in.readBoolean();
+        this.testOnly = in.readBoolean();
+        this.multiArch = in.readBoolean();
+        this.extractNativeLibs = in.readBoolean();
+        this.game = in.readBoolean();
+
+        this.resizeableActivity = sForBoolean.unparcel(in);
+
+        this.staticSharedLibrary = in.readBoolean();
+        this.overlay = in.readBoolean();
+        this.isolatedSplitLoading = in.readBoolean();
+        this.hasDomainUrls = in.readBoolean();
+        this.profileableByShell = in.readBoolean();
+        this.backupInForeground = in.readBoolean();
+        this.useEmbeddedDex = in.readBoolean();
+        this.defaultToDeviceProtectedStorage = in.readBoolean();
+        this.directBootAware = in.readBoolean();
+        this.partiallyDirectBootAware = in.readBoolean();
+        this.resizeableActivityViaSdkVersion = in.readBoolean();
+        this.allowClearUserDataOnFailedRestore = in.readBoolean();
+        this.allowAudioPlaybackCapture = in.readBoolean();
+        this.requestLegacyExternalStorage = in.readBoolean();
+        this.usesNonSdkApi = in.readBoolean();
+        this.hasFragileUserData = in.readBoolean();
+        this.cantSaveState = in.readBoolean();
+        this.allowNativeHeapPointerTagging = in.readBoolean();
+        this.preserveLegacyExternalStorage = in.readBoolean();
+        this.mimeGroups = (ArraySet<String>) in.readArraySet(boot);
+    }
+
+    public static final Parcelable.Creator<ParsingPackageImpl> CREATOR =
+            new Parcelable.Creator<ParsingPackageImpl>() {
+                @Override
+                public ParsingPackageImpl createFromParcel(Parcel source) {
+                    return new ParsingPackageImpl(source);
+                }
+
+                @Override
+                public ParsingPackageImpl[] newArray(int size) {
+                    return new ParsingPackageImpl[size];
+                }
+            };
+
+    @Override
+    public int getVersionCode() {
+        return versionCode;
+    }
+
+    @Override
+    public int getVersionCodeMajor() {
+        return versionCodeMajor;
+    }
+
+    @Override
+    public int getBaseRevisionCode() {
+        return baseRevisionCode;
+    }
+
+    @Nullable
+    @Override
+    public String getVersionName() {
+        return versionName;
+    }
+
+    @Override
+    public int getCompileSdkVersion() {
+        return compileSdkVersion;
+    }
+
+    @Nullable
+    @Override
+    public String getCompileSdkVersionCodeName() {
+        return compileSdkVersionCodeName;
+    }
+
+    @NonNull
+    @Override
+    public String getPackageName() {
+        return packageName;
+    }
+
+    @Nullable
+    @Override
+    public String getRealPackage() {
+        return realPackage;
+    }
+
+    @NonNull
+    @Override
+    public String getBaseCodePath() {
+        return baseCodePath;
+    }
+
+    @Override
+    public boolean isRequiredForAllUsers() {
+        return requiredForAllUsers;
+    }
+
+    @Nullable
+    @Override
+    public String getRestrictedAccountType() {
+        return restrictedAccountType;
+    }
+
+    @Nullable
+    @Override
+    public String getRequiredAccountType() {
+        return requiredAccountType;
+    }
+
+    @Nullable
+    @Override
+    public String getOverlayTarget() {
+        return overlayTarget;
+    }
+
+    @Nullable
+    @Override
+    public String getOverlayTargetName() {
+        return overlayTargetName;
+    }
+
+    @Nullable
+    @Override
+    public String getOverlayCategory() {
+        return overlayCategory;
+    }
+
+    @Override
+    public int getOverlayPriority() {
+        return overlayPriority;
+    }
+
+    @Override
+    public boolean isOverlayIsStatic() {
+        return overlayIsStatic;
+    }
+
+    @NonNull
+    @Override
+    public Map<String,String> getOverlayables() {
+        return overlayables;
+    }
+
+    @Nullable
+    @Override
+    public String getStaticSharedLibName() {
+        return staticSharedLibName;
+    }
+
+    @Override
+    public long getStaticSharedLibVersion() {
+        return staticSharedLibVersion;
+    }
+
+    @NonNull
+    @Override
+    public List<String> getLibraryNames() {
+        return libraryNames;
+    }
+
+    @NonNull
+    @Override
+    public List<String> getUsesLibraries() {
+        return usesLibraries;
+    }
+
+    @NonNull
+    @Override
+    public List<String> getUsesOptionalLibraries() {
+        return usesOptionalLibraries;
+    }
+
+    @NonNull
+    @Override
+    public List<String> getUsesStaticLibraries() {
+        return usesStaticLibraries;
+    }
+
+    @Nullable
+    @Override
+    public long[] getUsesStaticLibrariesVersions() {
+        return usesStaticLibrariesVersions;
+    }
+
+    @Nullable
+    @Override
+    public String[][] getUsesStaticLibrariesCertDigests() {
+        return usesStaticLibrariesCertDigests;
+    }
+
+    @Nullable
+    @Override
+    public String getSharedUserId() {
+        return sharedUserId;
+    }
+
+    @Override
+    public int getSharedUserLabel() {
+        return sharedUserLabel;
+    }
+
+    @NonNull
+    @Override
+    public List<ConfigurationInfo> getConfigPreferences() {
+        return configPreferences;
+    }
+
+    @NonNull
+    @Override
+    public List<FeatureInfo> getReqFeatures() {
+        return reqFeatures;
+    }
+
+    @NonNull
+    @Override
+    public List<FeatureGroupInfo> getFeatureGroups() {
+        return featureGroups;
+    }
+
+    @Nullable
+    @Override
+    public byte[] getRestrictUpdateHash() {
+        return restrictUpdateHash;
+    }
+
+    @NonNull
+    @Override
+    public List<String> getOriginalPackages() {
+        return originalPackages;
+    }
+
+    @NonNull
+    @Override
+    public List<String> getAdoptPermissions() {
+        return adoptPermissions;
+    }
+
+    @NonNull
+    @Override
+    public List<String> getRequestedPermissions() {
+        return requestedPermissions;
+    }
+
+    @NonNull
+    @Override
+    public List<String> getImplicitPermissions() {
+        return implicitPermissions;
+    }
+
+    @NonNull
+    @Override
+    public Set<String> getUpgradeKeySets() {
+        return upgradeKeySets;
+    }
+
+    @NonNull
+    @Override
+    public Map<String,ArraySet<PublicKey>> getKeySetMapping() {
+        return keySetMapping;
+    }
+
+    @NonNull
+    @Override
+    public List<String> getProtectedBroadcasts() {
+        return protectedBroadcasts;
+    }
+
+    @NonNull
+    @Override
+    public List<ParsedActivity> getActivities() {
+        return activities;
+    }
+
+    @NonNull
+    @Override
+    public List<ParsedActivity> getReceivers() {
+        return receivers;
+    }
+
+    @NonNull
+    @Override
+    public List<ParsedService> getServices() {
+        return services;
+    }
+
+    @NonNull
+    @Override
+    public List<ParsedProvider> getProviders() {
+        return providers;
+    }
+
+    @NonNull
+    @Override
+    public List<ParsedFeature> getFeatures() {
+        return features;
+    }
+
+    @NonNull
+    @Override
+    public List<ParsedPermission> getPermissions() {
+        return permissions;
+    }
+
+    @NonNull
+    @Override
+    public List<ParsedPermissionGroup> getPermissionGroups() {
+        return permissionGroups;
+    }
+
+    @NonNull
+    @Override
+    public List<ParsedInstrumentation> getInstrumentations() {
+        return instrumentations;
+    }
+
+    @NonNull
+    @Override
+    public List<Pair<String,ParsedIntentInfo>> getPreferredActivityFilters() {
+        return preferredActivityFilters;
+    }
+
+    @NonNull
+    @Override
+    public Map<String,ParsedProcess> getProcesses() {
+        return processes;
+    }
+
+    @Nullable
+    @Override
+    public Bundle getMetaData() {
+        return metaData;
+    }
+
+    private void addMimeGroupsFromComponent(ParsedComponent component) {
+        for (int i = component.getIntents().size() - 1; i >= 0; i--) {
+            IntentFilter filter = component.getIntents().get(i);
+            for (int groupIndex = filter.countMimeGroups() - 1; groupIndex >= 0; groupIndex--) {
+                mimeGroups = ArrayUtils.add(mimeGroups, filter.getMimeGroup(groupIndex));
+            }
+        }
+    }
+
+    @Override
+    @Nullable
+    public Set<String> getMimeGroups() {
+        return mimeGroups;
+    }
+
+    @Nullable
+    @Override
+    public String getVolumeUuid() {
+        return volumeUuid;
+    }
+
+    @Nullable
+    @Override
+    public PackageParser.SigningDetails getSigningDetails() {
+        return signingDetails;
+    }
+
+    @NonNull
+    @Override
+    public String getCodePath() {
+        return codePath;
+    }
+
+    @Override
+    public boolean isUse32BitAbi() {
+        return use32BitAbi;
+    }
+
+    @Override
+    public boolean isVisibleToInstantApps() {
+        return visibleToInstantApps;
+    }
+
+    @Override
+    public boolean isForceQueryable() {
+        return forceQueryable;
+    }
+
+    @NonNull
+    @Override
+    public List<Intent> getQueriesIntents() {
+        return queriesIntents;
+    }
+
+    @NonNull
+    @Override
+    public List<String> getQueriesPackages() {
+        return queriesPackages;
+    }
+
+    @NonNull
+    @Override
+    public Set<String> getQueriesProviders() {
+        return queriesProviders;
+    }
+
+    @Nullable
+    @Override
+    public String[] getSplitClassLoaderNames() {
+        return splitClassLoaderNames;
+    }
+
+    @Nullable
+    @Override
+    public String[] getSplitCodePaths() {
+        return splitCodePaths;
+    }
+
+    @Nullable
+    @Override
+    public SparseArray<int[]> getSplitDependencies() {
+        return splitDependencies;
+    }
+
+    @Nullable
+    @Override
+    public int[] getSplitFlags() {
+        return splitFlags;
+    }
+
+    @Nullable
+    @Override
+    public String[] getSplitNames() {
+        return splitNames;
+    }
+
+    @Nullable
+    @Override
+    public int[] getSplitRevisionCodes() {
+        return splitRevisionCodes;
+    }
+
+    @Nullable
+    @Override
+    public String getAppComponentFactory() {
+        return appComponentFactory;
+    }
+
+    @Nullable
+    @Override
+    public String getBackupAgentName() {
+        return backupAgentName;
+    }
+
+    @Override
+    public int getBanner() {
+        return banner;
+    }
+
+    @Override
+    public int getCategory() {
+        return category;
+    }
+
+    @Nullable
+    @Override
+    public String getClassLoaderName() {
+        return classLoaderName;
+    }
+
+    @Nullable
+    @Override
+    public String getClassName() {
+        return className;
+    }
+
+    @Override
+    public int getCompatibleWidthLimitDp() {
+        return compatibleWidthLimitDp;
+    }
+
+    @Override
+    public int getDescriptionRes() {
+        return descriptionRes;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    @Override
+    public boolean isCrossProfile() {
+        return crossProfile;
+    }
+
+    @Override
+    public int getFullBackupContent() {
+        return fullBackupContent;
+    }
+
+    @Override
+    public int getIconRes() {
+        return iconRes;
+    }
+
+    @Override
+    public int getInstallLocation() {
+        return installLocation;
+    }
+
+    @Override
+    public int getLabelRes() {
+        return labelRes;
+    }
+
+    @Override
+    public int getLargestWidthLimitDp() {
+        return largestWidthLimitDp;
+    }
+
+    @Override
+    public int getLogo() {
+        return logo;
+    }
+
+    @Nullable
+    @Override
+    public String getManageSpaceActivityName() {
+        return manageSpaceActivityName;
+    }
+
+    @Override
+    public float getMaxAspectRatio() {
+        return maxAspectRatio;
+    }
+
+    @Override
+    public float getMinAspectRatio() {
+        return minAspectRatio;
+    }
+
+    @Override
+    public int getMinSdkVersion() {
+        return minSdkVersion;
+    }
+
+    @Override
+    public int getNetworkSecurityConfigRes() {
+        return networkSecurityConfigRes;
+    }
+
+    @Nullable
+    @Override
+    public CharSequence getNonLocalizedLabel() {
+        return nonLocalizedLabel;
+    }
+
+    @Nullable
+    @Override
+    public String getPermission() {
+        return permission;
+    }
+
+    @Override
+    public int getRequiresSmallestWidthDp() {
+        return requiresSmallestWidthDp;
+    }
+
+    @Override
+    public int getRoundIconRes() {
+        return roundIconRes;
+    }
+
+    @Override
+    public int getTargetSandboxVersion() {
+        return targetSandboxVersion;
+    }
+
+    @Override
+    public int getTargetSdkVersion() {
+        return targetSdkVersion;
+    }
+
+    @Nullable
+    @Override
+    public String getTaskAffinity() {
+        return taskAffinity;
+    }
+
+    @Override
+    public int getTheme() {
+        return theme;
+    }
+
+    @Override
+    public int getUiOptions() {
+        return uiOptions;
+    }
+
+    @Nullable
+    @Override
+    public String getZygotePreloadName() {
+        return zygotePreloadName;
+    }
+
+    @Override
+    public boolean isExternalStorage() {
+        return externalStorage;
+    }
+
+    @Override
+    public boolean isBaseHardwareAccelerated() {
+        return baseHardwareAccelerated;
+    }
+
+    @Override
+    public boolean isAllowBackup() {
+        return allowBackup;
+    }
+
+    @Override
+    public boolean isKillAfterRestore() {
+        return killAfterRestore;
+    }
+
+    @Override
+    public boolean isRestoreAnyVersion() {
+        return restoreAnyVersion;
+    }
+
+    @Override
+    public boolean isFullBackupOnly() {
+        return fullBackupOnly;
+    }
+
+    @Override
+    public boolean isPersistent() {
+        return persistent;
+    }
+
+    @Override
+    public boolean isDebuggable() {
+        return debuggable;
+    }
+
+    @Override
+    public boolean isVmSafeMode() {
+        return vmSafeMode;
+    }
+
+    @Override
+    public boolean isHasCode() {
+        return hasCode;
+    }
+
+    @Override
+    public boolean isAllowTaskReparenting() {
+        return allowTaskReparenting;
+    }
+
+    @Override
+    public boolean isAllowClearUserData() {
+        return allowClearUserData;
+    }
+
+    @Override
+    public boolean isLargeHeap() {
+        return largeHeap;
+    }
+
+    @Override
+    public boolean isUsesCleartextTraffic() {
+        return usesCleartextTraffic;
+    }
+
+    @Override
+    public boolean isSupportsRtl() {
+        return supportsRtl;
+    }
+
+    @Override
+    public boolean isTestOnly() {
+        return testOnly;
+    }
+
+    @Override
+    public boolean isMultiArch() {
+        return multiArch;
+    }
+
+    @Override
+    public boolean isExtractNativeLibs() {
+        return extractNativeLibs;
+    }
+
+    @Override
+    public boolean isGame() {
+        return game;
+    }
+
+    /**
+     * @see ParsingPackageRead#getResizeableActivity()
+     */
+    @Nullable
+    @Override
+    public Boolean getResizeableActivity() {
+        return resizeableActivity;
+    }
+
+    @Override
+    public boolean isStaticSharedLibrary() {
+        return staticSharedLibrary;
+    }
+
+    @Override
+    public boolean isOverlay() {
+        return overlay;
+    }
+
+    @Override
+    public boolean isIsolatedSplitLoading() {
+        return isolatedSplitLoading;
+    }
+
+    @Override
+    public boolean isHasDomainUrls() {
+        return hasDomainUrls;
+    }
+
+    @Override
+    public boolean isProfileableByShell() {
+        return profileableByShell;
+    }
+
+    @Override
+    public boolean isBackupInForeground() {
+        return backupInForeground;
+    }
+
+    @Override
+    public boolean isUseEmbeddedDex() {
+        return useEmbeddedDex;
+    }
+
+    @Override
+    public boolean isDefaultToDeviceProtectedStorage() {
+        return defaultToDeviceProtectedStorage;
+    }
+
+    @Override
+    public boolean isDirectBootAware() {
+        return directBootAware;
+    }
+
+    @Override
+    public boolean isPartiallyDirectBootAware() {
+        return partiallyDirectBootAware;
+    }
+
+    @Override
+    public boolean isResizeableActivityViaSdkVersion() {
+        return resizeableActivityViaSdkVersion;
+    }
+
+    @Override
+    public boolean isAllowClearUserDataOnFailedRestore() {
+        return allowClearUserDataOnFailedRestore;
+    }
+
+    @Override
+    public boolean isAllowAudioPlaybackCapture() {
+        return allowAudioPlaybackCapture;
+    }
+
+    @Override
+    public boolean isRequestLegacyExternalStorage() {
+        return requestLegacyExternalStorage;
+    }
+
+    @Override
+    public boolean isUsesNonSdkApi() {
+        return usesNonSdkApi;
+    }
+
+    @Override
+    public boolean isHasFragileUserData() {
+        return hasFragileUserData;
+    }
+
+    @Override
+    public boolean isCantSaveState() {
+        return cantSaveState;
+    }
+
+    @Override
+    public boolean isAllowNativeHeapPointerTagging() {
+        return allowNativeHeapPointerTagging;
+    }
+
+    @Override
+    public boolean hasPreserveLegacyExternalStorage() {
+        return preserveLegacyExternalStorage;
+    }
+
+    @Override
+    public ParsingPackageImpl setBaseRevisionCode(int value) {
+        baseRevisionCode = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setCompileSdkVersion(int value) {
+        compileSdkVersion = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setRequiredForAllUsers(boolean value) {
+        requiredForAllUsers = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setOverlayPriority(int value) {
+        overlayPriority = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setOverlayIsStatic(boolean value) {
+        overlayIsStatic = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setStaticSharedLibVersion(long value) {
+        staticSharedLibVersion = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setSharedUserLabel(int value) {
+        sharedUserLabel = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setRestrictUpdateHash(@Nullable byte... value) {
+        restrictUpdateHash = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setUpgradeKeySets(@NonNull Set<String> value) {
+        upgradeKeySets = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setProcesses(@NonNull Map<String,ParsedProcess> value) {
+        processes = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setMetaData(@Nullable Bundle value) {
+        metaData = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setSigningDetails(@Nullable PackageParser.SigningDetails value) {
+        signingDetails = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setUse32BitAbi(boolean value) {
+        use32BitAbi = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setVisibleToInstantApps(boolean value) {
+        visibleToInstantApps = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setForceQueryable(boolean value) {
+        forceQueryable = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setBanner(int value) {
+        banner = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setCategory(int value) {
+        category = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setCompatibleWidthLimitDp(int value) {
+        compatibleWidthLimitDp = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setDescriptionRes(int value) {
+        descriptionRes = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setEnabled(boolean value) {
+        enabled = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setCrossProfile(boolean value) {
+        crossProfile = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setFullBackupContent(int value) {
+        fullBackupContent = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setIconRes(int value) {
+        iconRes = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setInstallLocation(int value) {
+        installLocation = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setLabelRes(int value) {
+        labelRes = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setLargestWidthLimitDp(int value) {
+        largestWidthLimitDp = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setLogo(int value) {
+        logo = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setMaxAspectRatio(float value) {
+        maxAspectRatio = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setMinAspectRatio(float value) {
+        minAspectRatio = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setMinSdkVersion(int value) {
+        minSdkVersion = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setNetworkSecurityConfigRes(int value) {
+        networkSecurityConfigRes = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setNonLocalizedLabel(@Nullable CharSequence value) {
+        nonLocalizedLabel = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setRequiresSmallestWidthDp(int value) {
+        requiresSmallestWidthDp = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setRoundIconRes(int value) {
+        roundIconRes = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setTargetSandboxVersion(int value) {
+        targetSandboxVersion = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setTargetSdkVersion(int value) {
+        targetSdkVersion = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setTheme(int value) {
+        theme = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setUiOptions(int value) {
+        uiOptions = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setExternalStorage(boolean value) {
+        externalStorage = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setBaseHardwareAccelerated(boolean value) {
+        baseHardwareAccelerated = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setAllowBackup(boolean value) {
+        allowBackup = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setKillAfterRestore(boolean value) {
+        killAfterRestore = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setRestoreAnyVersion(boolean value) {
+        restoreAnyVersion = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setFullBackupOnly(boolean value) {
+        fullBackupOnly = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setPersistent(boolean value) {
+        persistent = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setDebuggable(boolean value) {
+        debuggable = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setVmSafeMode(boolean value) {
+        vmSafeMode = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setHasCode(boolean value) {
+        hasCode = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setAllowTaskReparenting(boolean value) {
+        allowTaskReparenting = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setAllowClearUserData(boolean value) {
+        allowClearUserData = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setLargeHeap(boolean value) {
+        largeHeap = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setUsesCleartextTraffic(boolean value) {
+        usesCleartextTraffic = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setSupportsRtl(boolean value) {
+        supportsRtl = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setTestOnly(boolean value) {
+        testOnly = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setMultiArch(boolean value) {
+        multiArch = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setExtractNativeLibs(boolean value) {
+        extractNativeLibs = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setGame(boolean value) {
+        game = value;
+        return this;
+    }
+
+    /**
+     * @see ParsingPackageRead#getResizeableActivity()
+     */
+    @Override
+    public ParsingPackageImpl setResizeableActivity(@Nullable Boolean value) {
+        resizeableActivity = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setStaticSharedLibrary(boolean value) {
+        staticSharedLibrary = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setOverlay(boolean value) {
+        overlay = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setIsolatedSplitLoading(boolean value) {
+        isolatedSplitLoading = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setHasDomainUrls(boolean value) {
+        hasDomainUrls = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setProfileableByShell(boolean value) {
+        profileableByShell = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setBackupInForeground(boolean value) {
+        backupInForeground = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setUseEmbeddedDex(boolean value) {
+        useEmbeddedDex = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setDefaultToDeviceProtectedStorage(boolean value) {
+        defaultToDeviceProtectedStorage = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setDirectBootAware(boolean value) {
+        directBootAware = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setPartiallyDirectBootAware(boolean value) {
+        partiallyDirectBootAware = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setResizeableActivityViaSdkVersion(boolean value) {
+        resizeableActivityViaSdkVersion = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setAllowClearUserDataOnFailedRestore(boolean value) {
+        allowClearUserDataOnFailedRestore = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setAllowAudioPlaybackCapture(boolean value) {
+        allowAudioPlaybackCapture = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setRequestLegacyExternalStorage(boolean value) {
+        requestLegacyExternalStorage = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setUsesNonSdkApi(boolean value) {
+        usesNonSdkApi = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setHasFragileUserData(boolean value) {
+        hasFragileUserData = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setCantSaveState(boolean value) {
+        cantSaveState = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setAllowNativeHeapPointerTagging(boolean value) {
+        allowNativeHeapPointerTagging = value;
+        return this;
+    }
+
+    @Override
+    public ParsingPackageImpl setPreserveLegacyExternalStorage(boolean value) {
+        preserveLegacyExternalStorage = value;
+        return this;
+    }
+}
diff --git a/core/java/android/content/pm/parsing/ParsingPackageRead.java b/core/java/android/content/pm/parsing/ParsingPackageRead.java
new file mode 100644
index 0000000..048b924
--- /dev/null
+++ b/core/java/android/content/pm/parsing/ParsingPackageRead.java
@@ -0,0 +1,845 @@
+/*
+ * 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.content.pm.parsing;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ConfigurationInfo;
+import android.content.pm.FeatureGroupInfo;
+import android.content.pm.FeatureInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageParser;
+import android.content.pm.ServiceInfo;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedFeature;
+import android.content.pm.parsing.component.ParsedInstrumentation;
+import android.content.pm.parsing.component.ParsedIntentInfo;
+import android.content.pm.parsing.component.ParsedPermission;
+import android.content.pm.parsing.component.ParsedPermissionGroup;
+import android.content.pm.parsing.component.ParsedProcess;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedService;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.util.ArraySet;
+import android.util.Pair;
+import android.util.SparseArray;
+
+import com.android.internal.R;
+
+import java.security.PublicKey;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Everything written by {@link ParsingPackage} and readable back.
+ *
+ * @hide
+ */
+@SuppressWarnings("UnusedReturnValue")
+public interface ParsingPackageRead extends Parcelable {
+
+    /**
+     * @see ActivityInfo
+     * @see PackageInfo#activities
+     */
+    @NonNull
+    List<ParsedActivity> getActivities();
+
+    /**
+     * The names of packages to adopt ownership of permissions from, parsed under
+     * {@link PackageParser#TAG_ADOPT_PERMISSIONS}.
+     * @see R.styleable#AndroidManifestOriginalPackage_name
+     */
+    @NonNull
+    List<String> getAdoptPermissions();
+
+    /**
+     * @see PackageInfo#configPreferences
+     * @see R.styleable#AndroidManifestUsesConfiguration
+     */
+    @NonNull
+    List<ConfigurationInfo> getConfigPreferences();
+
+    @NonNull
+    List<ParsedFeature> getFeatures();
+
+    /**
+     * @see PackageInfo#featureGroups
+     * @see R.styleable#AndroidManifestUsesFeature
+     */
+    @NonNull
+    List<FeatureGroupInfo> getFeatureGroups();
+
+    /**
+     * Permissions requested but not in the manifest. These may have been split or migrated from
+     * previous versions/definitions.
+     */
+    @NonNull
+    List<String> getImplicitPermissions();
+
+    /**
+     * @see android.content.pm.InstrumentationInfo
+     * @see PackageInfo#instrumentation
+     */
+    @NonNull
+    List<ParsedInstrumentation> getInstrumentations();
+
+    /**
+     * For use with {@link com.android.server.pm.KeySetManagerService}. Parsed in
+     * {@link PackageParser#TAG_KEY_SETS}.
+     * @see R.styleable#AndroidManifestKeySet
+     * @see R.styleable#AndroidManifestPublicKey
+     */
+    @NonNull
+    Map<String, ArraySet<PublicKey>> getKeySetMapping();
+
+    /**
+     * Library names this package is declared as, for use by other packages with "uses-library".
+     * @see R.styleable#AndroidManifestLibrary
+     */
+    @NonNull
+    List<String> getLibraryNames();
+
+    /**
+     * For system use to migrate from an old package name to a new one, moving over data
+     * if available.
+     * @see R.styleable#AndroidManifestOriginalPackage}
+     */
+    @NonNull
+    List<String> getOriginalPackages();
+
+    /**
+     * Map of overlayable name to actor name.
+     */
+    @NonNull
+    Map<String, String> getOverlayables();
+
+    /**
+     * @see android.content.pm.PermissionInfo
+     * @see PackageInfo#permissions
+     */
+    @NonNull
+    List<ParsedPermission> getPermissions();
+
+    /**
+     * @see android.content.pm.PermissionGroupInfo
+     */
+    @NonNull
+    List<ParsedPermissionGroup> getPermissionGroups();
+
+    /**
+     * Used to determine the default preferred handler of an {@link Intent}.
+     *
+     * Map of component className to intent info inside that component.
+     * TODO(b/135203078): Is this actually used/working?
+     */
+    @NonNull
+    List<Pair<String, ParsedIntentInfo>> getPreferredActivityFilters();
+
+    /**
+     * System protected broadcasts.
+     * @see R.styleable#AndroidManifestProtectedBroadcast
+     */
+    @NonNull
+    List<String> getProtectedBroadcasts();
+
+    /**
+     * @see android.content.pm.ProviderInfo
+     * @see PackageInfo#providers
+     */
+    @NonNull
+    List<ParsedProvider> getProviders();
+
+    /**
+     * @see android.content.pm.ProcessInfo
+     */
+    @NonNull
+    Map<String, ParsedProcess> getProcesses();
+
+    /**
+     * Since they share several attributes, receivers are parsed as {@link ParsedActivity}, even
+     * though they represent different functionality.
+     * TODO(b/135203078): Reconsider this and maybe make ParsedReceiver so it's not so confusing
+     * @see ActivityInfo
+     * @see PackageInfo#receivers
+     */
+    @NonNull
+    List<ParsedActivity> getReceivers();
+
+    /**
+     * @see PackageInfo#reqFeatures
+     * @see R.styleable#AndroidManifestUsesFeature
+     */
+    @NonNull
+    List<FeatureInfo> getReqFeatures();
+
+    /**
+     * All the permissions declared. This is an effective set, and may include permissions
+     * transformed from split/migrated permissions from previous versions, so may not be exactly
+     * what the package declares in its manifest.
+     * @see PackageInfo#requestedPermissions
+     * @see R.styleable#AndroidManifestUsesPermission
+     */
+    @NonNull
+    List<String> getRequestedPermissions();
+
+    /**
+     * Whether or not the app requested explicitly resizeable Activities.
+     * A null value means nothing was explicitly requested.
+     */
+    @Nullable
+    Boolean getResizeableActivity();
+
+    /**
+     * @see ServiceInfo
+     * @see PackageInfo#services
+     */
+    @NonNull
+    List<ParsedService> getServices();
+
+    /** @see R.styleable#AndroidManifestUsesLibrary */
+    @NonNull
+    List<String> getUsesLibraries();
+
+    /**
+     * Like {@link #getUsesLibraries()}, but marked optional by setting
+     * {@link R.styleable#AndroidManifestUsesLibrary_required} to false . Application is expected
+     * to handle absence manually.
+     * @see R.styleable#AndroidManifestUsesLibrary
+     */
+    @NonNull
+    List<String> getUsesOptionalLibraries();
+
+    /**
+     * TODO(b/135203078): Move static library stuff to an inner data class
+     * @see R.styleable#AndroidManifestUsesStaticLibrary
+     */
+    @NonNull
+    List<String> getUsesStaticLibraries();
+
+    /** @see R.styleable#AndroidManifestUsesStaticLibrary_certDigest */
+    @Nullable
+    String[][] getUsesStaticLibrariesCertDigests();
+
+    /** @see R.styleable#AndroidManifestUsesStaticLibrary_version */
+    @Nullable
+    long[] getUsesStaticLibrariesVersions();
+
+    /**
+     * Intents that this package may query or require and thus requires visibility into.
+     * @see R.styleable#AndroidManifestQueriesIntent
+     */
+    @NonNull
+    List<Intent> getQueriesIntents();
+
+    /**
+     * Other packages that this package may query or require and thus requires visibility into.
+     * @see R.styleable#AndroidManifestQueriesPackage
+     */
+    @NonNull
+    List<String> getQueriesPackages();
+
+    /**
+     * Authorities that this package may query or require and thus requires visibility into.
+     * @see R.styleable#AndroidManifestQueriesProvider
+     */
+    @NonNull
+    Set<String> getQueriesProviders();
+
+    /**
+     * We store the application meta-data independently to avoid multiple unwanted references
+     * TODO(b/135203078): What does this comment mean?
+     * TODO(b/135203078): Make all the Bundles immutable (and non-null by shared empty reference?)
+     */
+    @Nullable
+    Bundle getMetaData();
+
+    /** @see R.styleable#AndroidManifestApplication_forceQueryable */
+    boolean isForceQueryable();
+
+    /**
+     * @see ApplicationInfo#maxAspectRatio
+     * @see R.styleable#AndroidManifestApplication_maxAspectRatio
+     */
+    float getMaxAspectRatio();
+
+    /**
+     * @see ApplicationInfo#minAspectRatio
+     * @see R.styleable#AndroidManifestApplication_minAspectRatio
+     */
+    float getMinAspectRatio();
+
+    /**
+     * @see ApplicationInfo#permission
+     * @see R.styleable#AndroidManifestApplication_permission
+     */
+    @Nullable
+    String getPermission();
+
+    /**
+     * @see ApplicationInfo#processName
+     * @see R.styleable#AndroidManifestApplication_process
+     */
+    @NonNull
+    String getProcessName();
+
+    /**
+     * @see PackageInfo#sharedUserId
+     * @see R.styleable#AndroidManifest_sharedUserId
+     */
+    @Deprecated
+    @Nullable
+    String getSharedUserId();
+
+    /** @see R.styleable#AndroidManifestStaticLibrary_name */
+    @Nullable
+    String getStaticSharedLibName();
+
+    /**
+     * @see ApplicationInfo#taskAffinity
+     * @see R.styleable#AndroidManifestApplication_taskAffinity
+     */
+    @Nullable
+    String getTaskAffinity();
+
+    /**
+     * @see ApplicationInfo#targetSdkVersion
+     * @see R.styleable#AndroidManifestUsesSdk_targetSdkVersion
+     */
+    int getTargetSdkVersion();
+
+    /**
+     * @see ApplicationInfo#uiOptions
+     * @see R.styleable#AndroidManifestApplication_uiOptions
+     */
+    int getUiOptions();
+
+    boolean isCrossProfile();
+
+    boolean isResizeableActivityViaSdkVersion();
+
+    /** @see ApplicationInfo#FLAG_HARDWARE_ACCELERATED */
+    boolean isBaseHardwareAccelerated();
+
+    /**
+     * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >=
+     * {@link android.os.Build.VERSION_CODES#DONUT}.
+     * @see R.styleable#AndroidManifestSupportsScreens_resizeable
+     * @see ApplicationInfo#FLAG_RESIZEABLE_FOR_SCREENS
+     */
+    boolean isResizeable();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE */
+    boolean isAllowAudioPlaybackCapture();
+
+    /** @see ApplicationInfo#FLAG_ALLOW_BACKUP */
+    boolean isAllowBackup();
+
+    /** @see ApplicationInfo#FLAG_ALLOW_CLEAR_USER_DATA */
+    boolean isAllowClearUserData();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_ALLOW_CLEAR_USER_DATA_ON_FAILED_RESTORE */
+    boolean isAllowClearUserDataOnFailedRestore();
+
+    /** @see ApplicationInfo#FLAG_ALLOW_TASK_REPARENTING */
+    boolean isAllowTaskReparenting();
+
+    /**
+     * @see ApplicationInfo#PRIVATE_FLAG_IS_RESOURCE_OVERLAY
+     * @see ApplicationInfo#isResourceOverlay()
+     */
+    boolean isOverlay();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_BACKUP_IN_FOREGROUND */
+    boolean isBackupInForeground();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_CANT_SAVE_STATE */
+    boolean isCantSaveState();
+
+    /** @see ApplicationInfo#FLAG_DEBUGGABLE */
+    boolean isDebuggable();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE */
+    boolean isDefaultToDeviceProtectedStorage();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_DIRECT_BOOT_AWARE */
+    boolean isDirectBootAware();
+
+    /** @see ApplicationInfo#FLAG_EXTERNAL_STORAGE */
+    boolean isExternalStorage();
+
+    /** @see ApplicationInfo#FLAG_EXTRACT_NATIVE_LIBS */
+    boolean isExtractNativeLibs();
+
+    /** @see ApplicationInfo#FLAG_FULL_BACKUP_ONLY */
+    boolean isFullBackupOnly();
+
+    /** @see ApplicationInfo#FLAG_HAS_CODE */
+    boolean isHasCode();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_HAS_FRAGILE_USER_DATA */
+    boolean isHasFragileUserData();
+
+    /** @see ApplicationInfo#FLAG_IS_GAME */
+    @Deprecated
+    boolean isGame();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_ISOLATED_SPLIT_LOADING */
+    boolean isIsolatedSplitLoading();
+
+    /** @see ApplicationInfo#FLAG_KILL_AFTER_RESTORE */
+    boolean isKillAfterRestore();
+
+    /** @see ApplicationInfo#FLAG_LARGE_HEAP */
+    boolean isLargeHeap();
+
+    /** @see ApplicationInfo#FLAG_MULTIARCH */
+    boolean isMultiArch();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE */
+    boolean isPartiallyDirectBootAware();
+
+    /** @see ApplicationInfo#FLAG_PERSISTENT */
+    boolean isPersistent();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_PROFILEABLE_BY_SHELL */
+    boolean isProfileableByShell();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE */
+    boolean isRequestLegacyExternalStorage();
+
+    /** @see ApplicationInfo#FLAG_RESTORE_ANY_VERSION */
+    boolean isRestoreAnyVersion();
+
+    // ParsingPackageRead setSplitHasCode(int splitIndex, boolean splitHasCode);
+
+    /** Flags of any split APKs; ordered by parsed splitName */
+    @Nullable
+    int[] getSplitFlags();
+
+    /** @see ApplicationInfo#splitSourceDirs */
+    @Nullable
+    String[] getSplitCodePaths();
+
+    /** @see ApplicationInfo#splitDependencies */
+    @Nullable
+    SparseArray<int[]> getSplitDependencies();
+
+    /**
+     * @see ApplicationInfo#splitNames
+     * @see PackageInfo#splitNames
+     */
+    @Nullable
+    String[] getSplitNames();
+
+    /** @see PackageInfo#splitRevisionCodes */
+    int[] getSplitRevisionCodes();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_STATIC_SHARED_LIBRARY */
+    boolean isStaticSharedLibrary();
+
+    /** @see ApplicationInfo#FLAG_SUPPORTS_RTL */
+    boolean isSupportsRtl();
+
+    /** @see ApplicationInfo#FLAG_TEST_ONLY */
+    boolean isTestOnly();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_USE_EMBEDDED_DEX */
+    boolean isUseEmbeddedDex();
+
+    /** @see ApplicationInfo#FLAG_USES_CLEARTEXT_TRAFFIC */
+    boolean isUsesCleartextTraffic();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_USES_NON_SDK_API */
+    boolean isUsesNonSdkApi();
+
+    /**
+     * Set if the any of components are visible to instant applications.
+     * @see R.styleable#AndroidManifestActivity_visibleToInstantApps
+     * @see R.styleable#AndroidManifestProvider_visibleToInstantApps
+     * @see R.styleable#AndroidManifestService_visibleToInstantApps
+     */
+    boolean isVisibleToInstantApps();
+
+    /** @see ApplicationInfo#FLAG_VM_SAFE_MODE */
+    boolean isVmSafeMode();
+
+    /**
+     * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >=
+     * {@link android.os.Build.VERSION_CODES#DONUT}.
+     * @see R.styleable#AndroidManifestSupportsScreens_anyDensity
+     * @see ApplicationInfo#FLAG_SUPPORTS_SCREEN_DENSITIES
+     */
+    boolean isAnyDensity();
+
+    /**
+     * @see ApplicationInfo#appComponentFactory
+     * @see R.styleable#AndroidManifestApplication_appComponentFactory
+     */
+    @Nullable
+    String getAppComponentFactory();
+
+    /**
+     * @see ApplicationInfo#backupAgentName
+     * @see R.styleable#AndroidManifestApplication_backupAgent
+     */
+    @Nullable
+    String getBackupAgentName();
+
+    /**
+     * @see ApplicationInfo#banner
+     * @see R.styleable#AndroidManifestApplication_banner
+     */
+    int getBanner();
+
+    /**
+     * @see ApplicationInfo#category
+     * @see R.styleable#AndroidManifestApplication_appCategory
+     */
+    int getCategory();
+
+    /**
+     * @see ApplicationInfo#classLoaderName
+     * @see R.styleable#AndroidManifestApplication_classLoader
+     */
+    @Nullable
+    String getClassLoaderName();
+
+    /**
+     * @see ApplicationInfo#className
+     * @see R.styleable#AndroidManifestApplication_name
+     */
+    @Nullable
+    String getClassName();
+
+    String getPackageName();
+
+    /** Path of base APK */
+    String getBaseCodePath();
+
+    /**
+     * Path where this package was found on disk. For monolithic packages
+     * this is path to single base APK file; for cluster packages this is
+     * path to the cluster directory.
+     */
+    @NonNull
+    String getCodePath();
+
+    /**
+     * @see ApplicationInfo#compatibleWidthLimitDp
+     * @see R.styleable#AndroidManifestSupportsScreens_compatibleWidthLimitDp
+     */
+    int getCompatibleWidthLimitDp();
+
+    /**
+     * @see ApplicationInfo#descriptionRes
+     * @see R.styleable#AndroidManifestApplication_description
+     */
+    int getDescriptionRes();
+
+    /**
+     * @see ApplicationInfo#enabled
+     * @see R.styleable#AndroidManifestApplication_enabled
+     */
+    boolean isEnabled();
+
+    /**
+     * @see ApplicationInfo#fullBackupContent
+     * @see R.styleable#AndroidManifestApplication_fullBackupContent
+     */
+    int getFullBackupContent();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_HAS_DOMAIN_URLS */
+    boolean isHasDomainUrls();
+
+    /**
+     * @see ApplicationInfo#iconRes
+     * @see R.styleable#AndroidManifestApplication_icon
+     */
+    int getIconRes();
+
+    /**
+     * @see ApplicationInfo#installLocation
+     * @see R.styleable#AndroidManifest_installLocation
+     */
+    int getInstallLocation();
+
+    /**
+     * @see ApplicationInfo#labelRes
+     * @see R.styleable#AndroidManifestApplication_label
+     */
+    int getLabelRes();
+
+    /**
+     * @see ApplicationInfo#largestWidthLimitDp
+     * @see R.styleable#AndroidManifestSupportsScreens_largestWidthLimitDp
+     */
+    int getLargestWidthLimitDp();
+
+    /**
+     * @see ApplicationInfo#logo
+     * @see R.styleable#AndroidManifestApplication_logo
+     */
+    int getLogo();
+
+    /**
+     * @see ApplicationInfo#manageSpaceActivityName
+     * @see R.styleable#AndroidManifestApplication_manageSpaceActivity
+     */
+    @Nullable
+    String getManageSpaceActivityName();
+
+    /**
+     * @see ApplicationInfo#minSdkVersion
+     * @see R.styleable#AndroidManifestUsesSdk_minSdkVersion
+     */
+    int getMinSdkVersion();
+
+    /**
+     * @see ApplicationInfo#networkSecurityConfigRes
+     * @see R.styleable#AndroidManifestApplication_networkSecurityConfig
+     */
+    int getNetworkSecurityConfigRes();
+
+    /**
+     * If {@link R.styleable#AndroidManifestApplication_label} is a string literal, this is it.
+     * Otherwise, it's stored as {@link #getLabelRes()}.
+     * @see ApplicationInfo#nonLocalizedLabel
+     * @see R.styleable#AndroidManifestApplication_label
+     */
+    @Nullable
+    CharSequence getNonLocalizedLabel();
+
+    /**
+     * @see PackageInfo#overlayCategory
+     * @see R.styleable#AndroidManifestResourceOverlay_category
+     */
+    @Nullable
+    String getOverlayCategory();
+
+    /** @see PackageInfo#mOverlayIsStatic */
+    boolean isOverlayIsStatic();
+
+    /**
+     * @see PackageInfo#overlayPriority
+     * @see R.styleable#AndroidManifestResourceOverlay_priority
+     */
+    int getOverlayPriority();
+
+    /**
+     * @see PackageInfo#overlayTarget
+     * @see R.styleable#AndroidManifestResourceOverlay_targetPackage
+     */
+    @Nullable
+    String getOverlayTarget();
+
+    /**
+     * @see PackageInfo#targetOverlayableName
+     * @see R.styleable#AndroidManifestResourceOverlay_targetName
+     */
+    @Nullable
+    String getOverlayTargetName();
+
+    /**
+     * If a system app declares {@link #getOriginalPackages()}, and the app was previously installed
+     * under one of those original package names, the {@link #getPackageName()} system identifier
+     * will be changed to that previously installed name. This will then be non-null, set to the
+     * manifest package name, for tracking the package under its true name.
+     *
+     * TODO(b/135203078): Remove this in favor of checking originalPackages.isEmpty and
+     *  getManifestPackageName
+     */
+    @Nullable
+    String getRealPackage();
+
+    /**
+     * The required account type without which this application will not function.
+     *
+     * @see PackageInfo#requiredAccountType
+     * @see R.styleable#AndroidManifestApplication_requiredAccountType
+     */
+    @Nullable
+    String getRequiredAccountType();
+
+    /**
+     * @see PackageInfo#requiredForAllUsers
+     * @see R.styleable#AndroidManifestApplication_requiredForAllUsers
+     */
+    boolean isRequiredForAllUsers();
+
+    /**
+     * @see ApplicationInfo#requiresSmallestWidthDp
+     * @see R.styleable#AndroidManifestSupportsScreens_requiresSmallestWidthDp
+     */
+    int getRequiresSmallestWidthDp();
+
+    /**
+     * SHA-512 hash of the only APK that can be used to update a system package.
+     * @see R.styleable#AndroidManifestRestrictUpdate
+     */
+    @Nullable
+    byte[] getRestrictUpdateHash();
+
+    /**
+     * The restricted account authenticator type that is used by this application
+     *
+     * @see PackageInfo#restrictedAccountType
+     * @see R.styleable#AndroidManifestApplication_restrictedAccountType
+     */
+    @Nullable
+    String getRestrictedAccountType();
+
+    /**
+     * @see ApplicationInfo#roundIconRes
+     * @see R.styleable#AndroidManifestApplication_roundIcon
+     */
+    int getRoundIconRes();
+
+    /**
+     * @see PackageInfo#sharedUserLabel
+     * @see R.styleable#AndroidManifest_sharedUserLabel
+     */
+    @Deprecated
+    int getSharedUserLabel();
+
+    /**
+     * The signature data of all APKs in this package, which must be exactly the same across the
+     * base and splits.
+     */
+    PackageParser.SigningDetails getSigningDetails();
+
+    /**
+     * @see ApplicationInfo#splitClassLoaderNames
+     * @see R.styleable#AndroidManifestApplication_classLoader
+     */
+    @Nullable
+    String[] getSplitClassLoaderNames();
+
+    /** @see R.styleable#AndroidManifestStaticLibrary_version */
+    long getStaticSharedLibVersion();
+
+    /**
+     * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >=
+     * {@link android.os.Build.VERSION_CODES#DONUT}.
+     * @see R.styleable#AndroidManifestSupportsScreens_largeScreens
+     * @see ApplicationInfo#FLAG_SUPPORTS_LARGE_SCREENS
+     */
+    boolean isSupportsLargeScreens();
+
+    /**
+     * If omitted from manifest, returns true.
+     * @see R.styleable#AndroidManifestSupportsScreens_normalScreens
+     * @see ApplicationInfo#FLAG_SUPPORTS_NORMAL_SCREENS
+     */
+    boolean isSupportsNormalScreens();
+
+    /**
+     * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >=
+     * {@link android.os.Build.VERSION_CODES#DONUT}.
+     * @see R.styleable#AndroidManifestSupportsScreens_smallScreens
+     * @see ApplicationInfo#FLAG_SUPPORTS_SMALL_SCREENS
+     */
+    boolean isSupportsSmallScreens();
+
+    /**
+     * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >=
+     * {@link android.os.Build.VERSION_CODES#GINGERBREAD}.
+     * @see R.styleable#AndroidManifestSupportsScreens_xlargeScreens
+     * @see ApplicationInfo#FLAG_SUPPORTS_XLARGE_SCREENS
+     */
+    boolean isSupportsExtraLargeScreens();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING */
+    boolean isAllowNativeHeapPointerTagging();
+
+    boolean hasPreserveLegacyExternalStorage();
+
+    /**
+     * @see ApplicationInfo#targetSandboxVersion
+     * @see R.styleable#AndroidManifest_targetSandboxVersion
+     */
+    @Deprecated
+    int getTargetSandboxVersion();
+
+    /**
+     * @see ApplicationInfo#theme
+     * @see R.styleable#AndroidManifestApplication_theme
+     */
+    int getTheme();
+
+    /**
+     * For use with {@link com.android.server.pm.KeySetManagerService}. Parsed in
+     * {@link PackageParser#TAG_KEY_SETS}.
+     * @see R.styleable#AndroidManifestUpgradeKeySet
+     */
+    @NonNull
+    Set<String> getUpgradeKeySets();
+
+    /**
+     * The install time abi override to choose 32bit abi's when multiple abi's
+     * are present. This is only meaningfull for multiarch applications.
+     * The use32bitAbi attribute is ignored if cpuAbiOverride is also set.
+     */
+    boolean isUse32BitAbi();
+
+    /** @see ApplicationInfo#volumeUuid */
+    @Nullable
+    String getVolumeUuid();
+
+    /** @see ApplicationInfo#zygotePreloadName */
+    @Nullable
+    String getZygotePreloadName();
+
+    /** Revision code of base APK */
+    int getBaseRevisionCode();
+
+    /** @see PackageInfo#versionName */
+    @Nullable
+    String getVersionName();
+
+    /** @see PackageInfo#versionCodeMajor */
+    @Nullable
+    int getVersionCode();
+
+    /** @see PackageInfo#versionCodeMajor */
+    @Nullable
+    int getVersionCodeMajor();
+
+    /**
+     * @see ApplicationInfo#compileSdkVersion
+     * @see R.styleable#AndroidManifest_compileSdkVersion
+     */
+    int getCompileSdkVersion();
+
+    /**
+     * @see ApplicationInfo#compileSdkVersionCodename
+     * @see R.styleable#AndroidManifest_compileSdkVersionCodename
+     */
+    @Nullable
+    String getCompileSdkVersionCodeName();
+
+    @Nullable
+    Set<String> getMimeGroups();
+
+    // TODO(b/135203078): Hide and enforce going through PackageInfoUtils
+    ApplicationInfo toAppInfoWithoutState();
+}
diff --git a/core/java/android/content/pm/parsing/ParsingPackageUtils.java b/core/java/android/content/pm/parsing/ParsingPackageUtils.java
new file mode 100644
index 0000000..40754df
--- /dev/null
+++ b/core/java/android/content/pm/parsing/ParsingPackageUtils.java
@@ -0,0 +1,2673 @@
+/*
+ * 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.content.pm.parsing;
+
+import static android.content.pm.ActivityInfo.FLAG_SUPPORTS_PICTURE_IN_PICTURE;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
+import static android.content.pm.PackageManager.FEATURE_WATCH;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_NOT_APK;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION;
+import static android.os.Build.VERSION_CODES.DONUT;
+import static android.os.Build.VERSION_CODES.O;
+import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
+
+import android.annotation.AnyRes;
+import android.annotation.IntRange;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.StyleableRes;
+import android.app.ActivityThread;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ConfigurationInfo;
+import android.content.pm.FeatureGroupInfo;
+import android.content.pm.FeatureInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageParser;
+import android.content.pm.PackageParser.PackageParserException;
+import android.content.pm.PackageParser.SigningDetails;
+import android.content.pm.Signature;
+import android.content.pm.parsing.component.ComponentParseUtils;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedActivityUtils;
+import android.content.pm.parsing.component.ParsedFeature;
+import android.content.pm.parsing.component.ParsedFeatureUtils;
+import android.content.pm.parsing.component.ParsedInstrumentation;
+import android.content.pm.parsing.component.ParsedInstrumentationUtils;
+import android.content.pm.parsing.component.ParsedIntentInfo;
+import android.content.pm.parsing.component.ParsedIntentInfoUtils;
+import android.content.pm.parsing.component.ParsedMainComponent;
+import android.content.pm.parsing.component.ParsedPermission;
+import android.content.pm.parsing.component.ParsedPermissionGroup;
+import android.content.pm.parsing.component.ParsedPermissionUtils;
+import android.content.pm.parsing.component.ParsedProcess;
+import android.content.pm.parsing.component.ParsedProcessUtils;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedProviderUtils;
+import android.content.pm.parsing.component.ParsedService;
+import android.content.pm.parsing.component.ParsedServiceUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+import android.content.pm.permission.SplitPermissionInfoParcelable;
+import android.content.pm.split.DefaultSplitAssetLoader;
+import android.content.pm.split.SplitAssetDependencyLoader;
+import android.content.pm.split.SplitAssetLoader;
+import android.content.res.ApkAssets;
+import android.content.res.AssetManager;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.FileUtils;
+import android.os.RemoteException;
+import android.os.SystemProperties;
+import android.os.Trace;
+import android.os.ext.SdkExtensions;
+import android.text.TextUtils;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.util.Pair;
+import android.util.Slog;
+import android.util.SparseArray;
+import android.util.TypedValue;
+import android.util.apk.ApkSignatureVerifier;
+
+import com.android.internal.R;
+import com.android.internal.os.ClassLoaderFactory;
+import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.XmlUtils;
+
+import libcore.io.IoUtils;
+import libcore.util.EmptyArray;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.File;
+import java.io.IOException;
+import java.security.PublicKey;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/**
+ * TODO(b/135203078): Differentiate between parse_ methods and some add_ method for whether it
+ * mutates the passed-in component or not. Or consolidate so all parse_ methods mutate.
+ *
+ * @hide
+ */
+public class ParsingPackageUtils {
+
+    public static final String TAG = ParsingUtils.TAG;
+
+    private boolean mOnlyCoreApps;
+    private String[] mSeparateProcesses;
+    private DisplayMetrics mDisplayMetrics;
+    private Callback mCallback;
+
+    public ParsingPackageUtils(boolean onlyCoreApps, String[] separateProcesses,
+            DisplayMetrics displayMetrics, @NonNull Callback callback) {
+        mOnlyCoreApps = onlyCoreApps;
+        mSeparateProcesses = separateProcesses;
+        mDisplayMetrics = displayMetrics;
+        mCallback = callback;
+    }
+
+    /**
+     * Parse the package at the given location. Automatically detects if the
+     * package is a monolithic style (single APK file) or cluster style
+     * (directory of APKs).
+     * <p>
+     * This performs sanity checking on cluster style packages, such as
+     * requiring identical package name and version codes, a single base APK,
+     * and unique split names.
+     * <p>
+     * Note that this <em>does not</em> perform signature verification; that
+     * must be done separately in {@link #collectCertificates(ParsingPackageRead, boolean)}.
+     *
+     * If {@code useCaches} is true, the package parser might return a cached
+     * result from a previous parse of the same {@code packageFile} with the same
+     * {@code flags}. Note that this method does not check whether {@code packageFile}
+     * has changed since the last parse, it's up to callers to do so.
+     *
+     * @see PackageParser#parsePackageLite(File, int)
+     */
+    public ParseResult<ParsingPackage> parsePackage(ParseInput input, File packageFile,
+            int flags)
+            throws PackageParserException {
+        if (packageFile.isDirectory()) {
+            return parseClusterPackage(input, packageFile, flags);
+        } else {
+            return parseMonolithicPackage(input, packageFile, flags);
+        }
+    }
+
+    /**
+     * Parse all APKs contained in the given directory, treating them as a
+     * single package. This also performs sanity checking, such as requiring
+     * identical package name and version codes, a single base APK, and unique
+     * split names.
+     * <p>
+     * Note that this <em>does not</em> perform signature verification; that
+     * must be done separately in {@link #collectCertificates(ParsingPackageRead, boolean)}.
+     */
+    private ParseResult<ParsingPackage> parseClusterPackage(ParseInput input, File packageDir,
+            int flags) throws PackageParserException {
+        final PackageParser.PackageLite lite = ApkLiteParseUtils.parseClusterPackageLite(packageDir,
+                0);
+        if (mOnlyCoreApps && !lite.coreApp) {
+            return input.error("Not a coreApp: " + packageDir);
+        }
+
+        // Build the split dependency tree.
+        SparseArray<int[]> splitDependencies = null;
+        final SplitAssetLoader assetLoader;
+        if (lite.isolatedSplits && !ArrayUtils.isEmpty(lite.splitNames)) {
+            try {
+                splitDependencies = SplitAssetDependencyLoader.createDependenciesFromPackage(lite);
+                assetLoader = new SplitAssetDependencyLoader(lite, splitDependencies, flags);
+            } catch (SplitAssetDependencyLoader.IllegalDependencyException e) {
+                return input.error(INSTALL_PARSE_FAILED_BAD_MANIFEST, e.getMessage());
+            }
+        } else {
+            assetLoader = new DefaultSplitAssetLoader(lite, flags);
+        }
+
+        try {
+            final AssetManager assets = assetLoader.getBaseAssetManager();
+            final File baseApk = new File(lite.baseCodePath);
+            ParseResult<ParsingPackage> result = parseBaseApk(input, baseApk,
+                    lite.codePath, assets, flags);
+            // TODO(b/135203078): Pass original error up?
+            if (result.isError()) {
+                return input.error(INSTALL_PARSE_FAILED_NOT_APK,
+                        "Failed to parse base APK: " + baseApk);
+            }
+
+            ParsingPackage pkg = result.getResult();
+            if (!ArrayUtils.isEmpty(lite.splitNames)) {
+                pkg.asSplit(
+                        lite.splitNames,
+                        lite.splitCodePaths,
+                        lite.splitRevisionCodes,
+                        splitDependencies
+                );
+                final int num = lite.splitNames.length;
+
+                for (int i = 0; i < num; i++) {
+                    final AssetManager splitAssets = assetLoader.getSplitAssetManager(i);
+                    parseSplitApk(input, pkg, i, splitAssets, flags);
+                }
+            }
+
+            pkg.setUse32BitAbi(lite.use32bitAbi);
+            return input.success(pkg);
+        } finally {
+            IoUtils.closeQuietly(assetLoader);
+        }
+    }
+
+    /**
+     * Parse the given APK file, treating it as as a single monolithic package.
+     * <p>
+     * Note that this <em>does not</em> perform signature verification; that
+     * must be done separately in {@link #collectCertificates(ParsingPackageRead, boolean)}.
+     */
+    private ParseResult<ParsingPackage> parseMonolithicPackage(ParseInput input, File apkFile,
+            int flags) throws PackageParserException {
+        final PackageParser.PackageLite lite = ApkLiteParseUtils.parseMonolithicPackageLite(apkFile,
+                flags);
+        if (mOnlyCoreApps && !lite.coreApp) {
+            return input.error("Not a coreApp: " + apkFile);
+        }
+
+        final SplitAssetLoader assetLoader = new DefaultSplitAssetLoader(lite, flags);
+        try {
+            ParseResult<ParsingPackage> result = parseBaseApk(input,
+                    apkFile,
+                    apkFile.getCanonicalPath(),
+                    assetLoader.getBaseAssetManager(), flags);
+            if (result.isError()) {
+                return input.error(result);
+            }
+
+            return input.success(result.getResult()
+                    .setUse32BitAbi(lite.use32bitAbi));
+        } catch (IOException e) {
+            return input.error(INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION,
+                    "Failed to get path: " + apkFile, e);
+        } finally {
+            IoUtils.closeQuietly(assetLoader);
+        }
+    }
+
+    private ParseResult<ParsingPackage> parseBaseApk(ParseInput input, File apkFile,
+            String codePath, AssetManager assets, int flags) {
+        final String apkPath = apkFile.getAbsolutePath();
+
+        String volumeUuid = null;
+        if (apkPath.startsWith(PackageParser.MNT_EXPAND)) {
+            final int end = apkPath.indexOf('/', PackageParser.MNT_EXPAND.length());
+            volumeUuid = apkPath.substring(PackageParser.MNT_EXPAND.length(), end);
+        }
+
+        if (PackageParser.DEBUG_JAR) Slog.d(TAG, "Scanning base APK: " + apkPath);
+
+        final int cookie = assets.findCookieForPath(apkPath);
+        if (cookie == 0) {
+            return input.error(INSTALL_PARSE_FAILED_BAD_MANIFEST,
+                    "Failed adding asset path: " + apkPath);
+        }
+
+        try (XmlResourceParser parser = assets.openXmlResourceParser(cookie,
+                PackageParser.ANDROID_MANIFEST_FILENAME)) {
+            final Resources res = new Resources(assets, mDisplayMetrics, null);
+
+            ParseResult<ParsingPackage> result = parseBaseApk(input, apkPath, codePath, res,
+                    parser, flags);
+            if (result.isError()) {
+                return input.error(result.getErrorCode(),
+                        apkPath + " (at " + parser.getPositionDescription() + "): "
+                                + result.getErrorMessage());
+            }
+
+            ParsingPackage pkg = result.getResult();
+            ApkAssets apkAssets = assets.getApkAssets()[0];
+            if (apkAssets.definesOverlayable()) {
+                SparseArray<String> packageNames = assets.getAssignedPackageIdentifiers();
+                int size = packageNames.size();
+                for (int index = 0; index < size; index++) {
+                    String packageName = packageNames.get(index);
+                    Map<String, String> overlayableToActor = assets.getOverlayableMap(packageName);
+                    if (overlayableToActor != null && !overlayableToActor.isEmpty()) {
+                        for (String overlayable : overlayableToActor.keySet()) {
+                            pkg.addOverlayable(overlayable, overlayableToActor.get(overlayable));
+                        }
+                    }
+                }
+            }
+
+            pkg.setVolumeUuid(volumeUuid)
+                    .setSigningDetails(SigningDetails.UNKNOWN);
+
+            return input.success(pkg);
+        } catch (Exception e) {
+            return input.error(INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION,
+                    "Failed to read manifest from " + apkPath, e);
+        }
+    }
+
+    private ParseResult<ParsingPackage> parseSplitApk(ParseInput input,
+            ParsingPackage pkg, int splitIndex, AssetManager assets, int flags) {
+        final String apkPath = pkg.getSplitCodePaths()[splitIndex];
+
+        if (PackageParser.DEBUG_JAR) Slog.d(TAG, "Scanning split APK: " + apkPath);
+
+        // This must always succeed, as the path has been added to the AssetManager before.
+        final int cookie = assets.findCookieForPath(apkPath);
+        if (cookie == 0) {
+            return input.error(INSTALL_PARSE_FAILED_BAD_MANIFEST,
+                    "Failed adding asset path: " + apkPath);
+        }
+        try (XmlResourceParser parser = assets.openXmlResourceParser(cookie,
+                PackageParser.ANDROID_MANIFEST_FILENAME)) {
+            Resources res = new Resources(assets, mDisplayMetrics, null);
+            ParseResult<ParsingPackage> parseResult = parseSplitApk(input, pkg, res,
+                    parser, flags, splitIndex);
+            if (parseResult.isError()) {
+                return input.error(parseResult.getErrorCode(),
+                        apkPath + " (at " + parser.getPositionDescription() + "): "
+                                + parseResult.getErrorMessage());
+            }
+
+            return parseResult;
+        } catch (Exception e) {
+            return input.error(INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION,
+                    "Failed to read manifest from " + apkPath, e);
+        }
+    }
+
+    /**
+     * Parse the manifest of a <em>base APK</em>. When adding new features you
+     * need to consider whether they should be supported by split APKs and child
+     * packages.
+     *
+     * @param apkPath The package apk file path
+     * @param res     The resources from which to resolve values
+     * @param parser  The manifest parser
+     * @param flags   Flags how to parse
+     * @return Parsed package or null on error.
+     */
+    private ParseResult<ParsingPackage> parseBaseApk(ParseInput input, String apkPath,
+            String codePath, Resources res, XmlResourceParser parser, int flags)
+            throws XmlPullParserException, IOException {
+        final String splitName;
+        final String pkgName;
+
+        try {
+            Pair<String, String> packageSplit = PackageParser.parsePackageSplitNames(parser,
+                    parser);
+            pkgName = packageSplit.first;
+            splitName = packageSplit.second;
+
+            if (!TextUtils.isEmpty(splitName)) {
+                return input.error(
+                        PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME,
+                        "Expected base APK, but found split " + splitName
+                );
+            }
+        } catch (PackageParserException e) {
+            return input.error(PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME);
+        }
+
+        TypedArray manifestArray = res.obtainAttributes(parser, R.styleable.AndroidManifest);
+        try {
+            boolean isCoreApp = parser.getAttributeBooleanValue(null, "coreApp", false);
+
+            ParsingPackage pkg = mCallback.startParsingPackage(pkgName, apkPath, codePath,
+                    manifestArray, isCoreApp);
+
+            ParseResult<ParsingPackage> result = parseBaseApkTags(input, pkg, manifestArray,
+                    res, parser, flags);
+            if (result.isError()) {
+                return result;
+            }
+
+            return input.success(pkg);
+        } finally {
+            manifestArray.recycle();
+        }
+    }
+
+    /**
+     * Parse the manifest of a <em>split APK</em>.
+     * <p>
+     * Note that split APKs have many more restrictions on what they're capable
+     * of doing, so many valid features of a base APK have been carefully
+     * omitted here.
+     *
+     * @param pkg builder to fill
+     * @return false on failure
+     */
+    private ParseResult<ParsingPackage> parseSplitApk(ParseInput input, ParsingPackage pkg,
+            Resources res, XmlResourceParser parser, int flags, int splitIndex)
+            throws XmlPullParserException, IOException, PackageParserException {
+        AttributeSet attrs = parser;
+
+        // We parsed manifest tag earlier; just skip past it
+        PackageParser.parsePackageSplitNames(parser, attrs);
+
+        int type;
+
+        boolean foundApp = false;
+
+        int outerDepth = parser.getDepth();
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
+            if (outerDepth + 1 < parser.getDepth() || type != XmlPullParser.START_TAG) {
+                continue;
+            }
+
+            final ParseResult result;
+            String tagName = parser.getName();
+            if (PackageParser.TAG_APPLICATION.equals(tagName)) {
+                if (foundApp) {
+                    if (PackageParser.RIGID_PARSER) {
+                        result = input.error("<manifest> has more than one <application>");
+                    } else {
+                        Slog.w(TAG, "<manifest> has more than one <application>");
+                        result = input.success(null);
+                    }
+                } else {
+                    foundApp = true;
+                    result = parseSplitApplication(input, pkg, res, parser, flags, splitIndex);
+                }
+            } else {
+                result = ParsingUtils.unknownTag("<manifest>", pkg, parser, input);
+            }
+
+            if (result.isError()) {
+                return input.error(result);
+            }
+        }
+
+        if (!foundApp) {
+            return input.error(
+                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_EMPTY,
+                    "<manifest> does not contain an <application>"
+            );
+        }
+
+        return input.success(pkg);
+    }
+
+    /**
+     * Parse the {@code application} XML tree at the current parse location in a
+     * <em>split APK</em> manifest.
+     * <p>
+     * Note that split APKs have many more restrictions on what they're capable
+     * of doing, so many valid features of a base APK have been carefully
+     * omitted here.
+     */
+    private ParseResult<ParsingPackage> parseSplitApplication(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser, int flags, int splitIndex)
+            throws XmlPullParserException, IOException {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestApplication);
+        try {
+            pkg.setSplitHasCode(splitIndex, sa.getBoolean(
+                    R.styleable.AndroidManifestApplication_hasCode, true));
+
+            final String classLoaderName = sa.getString(
+                    R.styleable.AndroidManifestApplication_classLoader);
+            if (classLoaderName == null || ClassLoaderFactory.isValidClassLoaderName(
+                    classLoaderName)) {
+                pkg.setSplitClassLoaderName(splitIndex, classLoaderName);
+            } else {
+                return input.error("Invalid class loader name: " + classLoaderName);
+            }
+        } finally {
+            sa.recycle();
+        }
+        final int depth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG
+                || parser.getDepth() > depth)) {
+            if (type != XmlPullParser.START_TAG) {
+                continue;
+            }
+
+            ParsedMainComponent mainComponent = null;
+
+            final ParseResult result;
+            String tagName = parser.getName();
+            boolean isActivity = false;
+            switch (tagName) {
+                case "activity":
+                    isActivity = true;
+                    // fall-through
+                case "receiver":
+                    ParseResult<ParsedActivity> activityResult =
+                            ParsedActivityUtils.parseActivityOrReceiver(mSeparateProcesses, pkg,
+                                    res,
+                                    parser, flags, PackageParser.sUseRoundIcon, input);
+                    if (activityResult.isSuccess()) {
+                        ParsedActivity activity = activityResult.getResult();
+                        if (isActivity) {
+                            pkg.addActivity(activity);
+                        } else {
+                            pkg.addReceiver(activity);
+                        }
+                        mainComponent = activity;
+                    }
+                    result = activityResult;
+                    break;
+                case "service":
+                    ParseResult<ParsedService> serviceResult = ParsedServiceUtils.parseService(
+                            mSeparateProcesses, pkg, res, parser, flags,
+                            PackageParser.sUseRoundIcon, input);
+                    if (serviceResult.isSuccess()) {
+                        ParsedService service = serviceResult.getResult();
+                        pkg.addService(service);
+                        mainComponent = service;
+                    }
+                    result = serviceResult;
+                    break;
+                case "provider":
+                    ParseResult<ParsedProvider> providerResult =
+                            ParsedProviderUtils.parseProvider(mSeparateProcesses, pkg, res, parser,
+                                    flags, PackageParser.sUseRoundIcon, input);
+                    if (providerResult.isSuccess()) {
+                        ParsedProvider provider = providerResult.getResult();
+                        pkg.addProvider(provider);
+                        mainComponent = provider;
+                    }
+                    result = providerResult;
+                    break;
+                case "activity-alias":
+                    activityResult = ParsedActivityUtils.parseActivityAlias(pkg, res, parser,
+                            PackageParser.sUseRoundIcon, input);
+                    if (activityResult.isSuccess()) {
+                        ParsedActivity activity = activityResult.getResult();
+                        pkg.addActivity(activity);
+                        mainComponent = activity;
+                    }
+
+                    result = activityResult;
+                    break;
+                default:
+                    result = parseSplitBaseAppChildTags(input, tagName, pkg, res, parser);
+                    break;
+            }
+
+            if (result.isError()) {
+                return input.error(result);
+            }
+
+            if (mainComponent != null && mainComponent.getSplitName() == null) {
+                // If the loaded component did not specify a split, inherit the split name
+                // based on the split it is defined in.
+                // This is used to later load the correct split when starting this
+                // component.
+                mainComponent.setSplitName(pkg.getSplitNames()[splitIndex]);
+            }
+        }
+
+        return input.success(pkg);
+    }
+
+    /**
+     * For parsing non-MainComponents. Main ones have an order and some special handling which is
+     * done directly in {@link #parseSplitApplication(ParseInput, ParsingPackage, Resources,
+     * XmlResourceParser, int, int)}.
+     */
+    private ParseResult parseSplitBaseAppChildTags(ParseInput input, String tag, ParsingPackage pkg,
+            Resources res, XmlResourceParser parser) throws IOException, XmlPullParserException {
+        switch (tag) {
+            case "meta-data":
+                // note: application meta-data is stored off to the side, so it can
+                // remain null in the primary copy (we like to avoid extra copies because
+                // it can be large)
+                ParseResult<Bundle> metaDataResult = parseMetaData(pkg, res, parser,
+                        pkg.getMetaData(), input);
+                if (metaDataResult.isSuccess()) {
+                    pkg.setMetaData(metaDataResult.getResult());
+                }
+                return metaDataResult;
+            case "uses-static-library":
+                return parseUsesStaticLibrary(input, pkg, res, parser);
+            case "uses-library":
+                return parseUsesLibrary(input, pkg, res, parser);
+            case "uses-package":
+                // Dependencies for app installers; we don't currently try to
+                // enforce this.
+                return input.success(null);
+            default:
+                return ParsingUtils.unknownTag("<application>", pkg, parser, input);
+        }
+    }
+
+    private ParseResult<ParsingPackage> parseBaseApkTags(ParseInput input, ParsingPackage pkg,
+            TypedArray sa, Resources res, XmlResourceParser parser, int flags)
+            throws XmlPullParserException, IOException {
+        ParseResult<ParsingPackage> sharedUserResult = parseSharedUser(input, pkg, sa);
+        if (sharedUserResult.isError()) {
+            return sharedUserResult;
+        }
+
+        pkg.setInstallLocation(anInt(PackageParser.PARSE_DEFAULT_INSTALL_LOCATION,
+                R.styleable.AndroidManifest_installLocation, sa))
+                .setTargetSandboxVersion(anInt(PackageParser.PARSE_DEFAULT_TARGET_SANDBOX,
+                        R.styleable.AndroidManifest_targetSandboxVersion, sa))
+                /* Set the global "on SD card" flag */
+                .setExternalStorage((flags & PackageParser.PARSE_EXTERNAL_STORAGE) != 0)
+                .setIsolatedSplitLoading(
+                        bool(false, R.styleable.AndroidManifest_isolatedSplits, sa));
+
+        boolean foundApp = false;
+        final int depth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG
+                || parser.getDepth() > depth)) {
+            if (type != XmlPullParser.START_TAG) {
+                continue;
+            }
+
+            String tagName = parser.getName();
+            final ParseResult result;
+
+            // TODO(b/135203078): Convert to instance methods to share variables
+            // <application> has special logic, so it's handled outside the general method
+            if (PackageParser.TAG_APPLICATION.equals(tagName)) {
+                if (foundApp) {
+                    if (PackageParser.RIGID_PARSER) {
+                        result = input.error("<manifest> has more than one <application>");
+                    } else {
+                        Slog.w(TAG, "<manifest> has more than one <application>");
+                        result = input.success(null);
+                    }
+                } else {
+                    foundApp = true;
+                    result = parseBaseApplication(input, pkg, res, parser, flags);
+                }
+            } else {
+                result = parseBaseApkTag(tagName, input, pkg, res, parser, flags);
+            }
+
+            if (result.isError()) {
+                return input.error(result);
+            }
+        }
+
+        if (!foundApp && ArrayUtils.size(pkg.getInstrumentations()) == 0) {
+            return input.error(
+                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_EMPTY,
+                    "<manifest> does not contain an <application> or <instrumentation>"
+            );
+        }
+
+        if (!ParsedFeature.isCombinationValid(pkg.getFeatures())) {
+            return input.error(
+                    INSTALL_PARSE_FAILED_BAD_MANIFEST,
+                    "Combination <feature> tags are not valid"
+            );
+        }
+
+        convertNewPermissions(pkg);
+
+        convertSplitPermissions(pkg);
+
+        // At this point we can check if an application is not supporting densities and hence
+        // cannot be windowed / resized. Note that an SDK version of 0 is common for
+        // pre-Doughnut applications.
+        if (pkg.getTargetSdkVersion() < DONUT
+                || (!pkg.isSupportsSmallScreens()
+                && !pkg.isSupportsNormalScreens()
+                && !pkg.isSupportsLargeScreens()
+                && !pkg.isSupportsExtraLargeScreens()
+                && !pkg.isResizeable()
+                && !pkg.isAnyDensity())) {
+            adjustPackageToBeUnresizeableAndUnpipable(pkg);
+        }
+
+        return input.success(pkg);
+    }
+
+    private ParseResult parseBaseApkTag(String tag, ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser, int flags)
+            throws IOException, XmlPullParserException {
+        switch (tag) {
+            case PackageParser.TAG_OVERLAY:
+                return parseOverlay(input, pkg, res, parser);
+            case PackageParser.TAG_KEY_SETS:
+                return parseKeySets(input, pkg, res, parser);
+            case PackageParser.TAG_FEATURE:
+                return parseFeature(input, pkg, res, parser);
+            case PackageParser.TAG_PERMISSION_GROUP:
+                return parsePermissionGroup(input, pkg, res, parser);
+            case PackageParser.TAG_PERMISSION:
+                return parsePermission(input, pkg, res, parser);
+            case PackageParser.TAG_PERMISSION_TREE:
+                return parsePermissionTree(input, pkg, res, parser);
+            case PackageParser.TAG_USES_PERMISSION:
+            case PackageParser.TAG_USES_PERMISSION_SDK_M:
+            case PackageParser.TAG_USES_PERMISSION_SDK_23:
+                return parseUsesPermission(input, pkg, res, parser);
+            case PackageParser.TAG_USES_CONFIGURATION:
+                return parseUsesConfiguration(input, pkg, res, parser);
+            case PackageParser.TAG_USES_FEATURE:
+                return parseUsesFeature(input, pkg, res, parser);
+            case PackageParser.TAG_FEATURE_GROUP:
+                return parseFeatureGroup(input, pkg, res, parser);
+            case PackageParser.TAG_USES_SDK:
+                return parseUsesSdk(input, pkg, res, parser);
+            case PackageParser.TAG_SUPPORT_SCREENS:
+                return parseSupportScreens(input, pkg, res, parser);
+            case PackageParser.TAG_PROTECTED_BROADCAST:
+                return parseProtectedBroadcast(input, pkg, res, parser);
+            case PackageParser.TAG_INSTRUMENTATION:
+                return parseInstrumentation(input, pkg, res, parser);
+            case PackageParser.TAG_ORIGINAL_PACKAGE:
+                return parseOriginalPackage(input, pkg, res, parser);
+            case PackageParser.TAG_ADOPT_PERMISSIONS:
+                return parseAdoptPermissions(input, pkg, res, parser);
+            case PackageParser.TAG_USES_GL_TEXTURE:
+            case PackageParser.TAG_COMPATIBLE_SCREENS:
+            case PackageParser.TAG_SUPPORTS_INPUT:
+            case PackageParser.TAG_EAT_COMMENT:
+                // Just skip this tag
+                XmlUtils.skipCurrentTag(parser);
+                return input.success(pkg);
+            case PackageParser.TAG_RESTRICT_UPDATE:
+                return parseRestrictUpdateHash(flags, input, pkg, res, parser);
+            case PackageParser.TAG_QUERIES:
+                return parseQueries(input, pkg, res, parser);
+            default:
+                return ParsingUtils.unknownTag("<manifest>", pkg, parser, input);
+        }
+    }
+
+    private static ParseResult<ParsingPackage> parseSharedUser(ParseInput input,
+            ParsingPackage pkg, TypedArray sa) {
+        String str = nonConfigString(0, R.styleable.AndroidManifest_sharedUserId, sa);
+        if (TextUtils.isEmpty(str)) {
+            return input.success(pkg);
+        }
+
+        ParseResult nameResult = validateName(input, str, true, true);
+        if (nameResult.isError()) {
+            if ("android".equals(pkg.getPackageName())) {
+                nameResult.ignoreError();
+            } else {
+                return input.error(PackageManager.INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID,
+                        "<manifest> specifies bad sharedUserId name \"" + str + "\": "
+                                + nameResult.getErrorMessage());
+            }
+        }
+
+        return input.success(pkg
+                .setSharedUserId(str.intern())
+                .setSharedUserLabel(resId(R.styleable.AndroidManifest_sharedUserLabel, sa)));
+    }
+
+    private static ParseResult<ParsingPackage> parseKeySets(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser)
+            throws XmlPullParserException, IOException {
+        // we've encountered the 'key-sets' tag
+        // all the keys and keysets that we want must be defined here
+        // so we're going to iterate over the parser and pull out the things we want
+        int outerDepth = parser.getDepth();
+        int currentKeySetDepth = -1;
+        int type;
+        String currentKeySet = null;
+        ArrayMap<String, PublicKey> publicKeys = new ArrayMap<>();
+        ArraySet<String> upgradeKeySets = new ArraySet<>();
+        ArrayMap<String, ArraySet<String>> definedKeySets = new ArrayMap<>();
+        ArraySet<String> improperKeySets = new ArraySet<>();
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            if (type == XmlPullParser.END_TAG) {
+                if (parser.getDepth() == currentKeySetDepth) {
+                    currentKeySet = null;
+                    currentKeySetDepth = -1;
+                }
+                continue;
+            }
+            String tagName = parser.getName();
+            switch (tagName) {
+                case "key-set": {
+                    if (currentKeySet != null) {
+                        return input.error("Improperly nested 'key-set' tag at "
+                                + parser.getPositionDescription());
+                    }
+                    TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestKeySet);
+                    try {
+                        final String keysetName = sa.getNonResourceString(
+                                R.styleable.AndroidManifestKeySet_name);
+                        definedKeySets.put(keysetName, new ArraySet<>());
+                        currentKeySet = keysetName;
+                        currentKeySetDepth = parser.getDepth();
+                    } finally {
+                        sa.recycle();
+                    }
+                } break;
+                case "public-key": {
+                    if (currentKeySet == null) {
+                        return input.error("Improperly nested 'key-set' tag at "
+                                + parser.getPositionDescription());
+                    }
+                    TypedArray sa = res.obtainAttributes(parser,
+                            R.styleable.AndroidManifestPublicKey);
+                    try {
+                        final String publicKeyName = nonResString(
+                                R.styleable.AndroidManifestPublicKey_name, sa);
+                        final String encodedKey = nonResString(
+                                R.styleable.AndroidManifestPublicKey_value, sa);
+                        if (encodedKey == null && publicKeys.get(publicKeyName) == null) {
+                            return input.error("'public-key' " + publicKeyName
+                                    + " must define a public-key value on first use at "
+                                    + parser.getPositionDescription());
+                        } else if (encodedKey != null) {
+                            PublicKey currentKey = PackageParser.parsePublicKey(encodedKey);
+                            if (currentKey == null) {
+                                Slog.w(TAG, "No recognized valid key in 'public-key' tag at "
+                                        + parser.getPositionDescription() + " key-set "
+                                        + currentKeySet
+                                        + " will not be added to the package's defined key-sets.");
+                                improperKeySets.add(currentKeySet);
+                                XmlUtils.skipCurrentTag(parser);
+                                continue;
+                            }
+                            if (publicKeys.get(publicKeyName) == null
+                                    || publicKeys.get(publicKeyName).equals(currentKey)) {
+
+                                /* public-key first definition, or matches old definition */
+                                publicKeys.put(publicKeyName, currentKey);
+                            } else {
+                                return input.error("Value of 'public-key' " + publicKeyName
+                                        + " conflicts with previously defined value at "
+                                        + parser.getPositionDescription());
+                            }
+                        }
+                        definedKeySets.get(currentKeySet).add(publicKeyName);
+                        XmlUtils.skipCurrentTag(parser);
+                    } finally {
+                        sa.recycle();
+                    }
+                } break;
+                case "upgrade-key-set": {
+                    TypedArray sa = res.obtainAttributes(parser,
+                            R.styleable.AndroidManifestUpgradeKeySet);
+                    try {
+                        String name = sa.getNonResourceString(
+                                R.styleable.AndroidManifestUpgradeKeySet_name);
+                        upgradeKeySets.add(name);
+                        XmlUtils.skipCurrentTag(parser);
+                    } finally {
+                        sa.recycle();
+                    }
+                } break;
+                default:
+                    ParseResult result = ParsingUtils.unknownTag("<key-sets>", pkg, parser,
+                            input);
+                    if (result.isError()) {
+                        return input.error(result);
+                    }
+                    break;
+            }
+        }
+        String packageName = pkg.getPackageName();
+        Set<String> publicKeyNames = publicKeys.keySet();
+        if (publicKeyNames.removeAll(definedKeySets.keySet())) {
+            return input.error("Package" + packageName
+                    + " AndroidManifest.xml 'key-set' and 'public-key' names must be distinct.");
+        }
+
+        for (ArrayMap.Entry<String, ArraySet<String>> e : definedKeySets.entrySet()) {
+            final String keySetName = e.getKey();
+            if (e.getValue().size() == 0) {
+                Slog.w(TAG, "Package" + packageName + " AndroidManifest.xml "
+                        + "'key-set' " + keySetName + " has no valid associated 'public-key'."
+                        + " Not including in package's defined key-sets.");
+                continue;
+            } else if (improperKeySets.contains(keySetName)) {
+                Slog.w(TAG, "Package" + packageName + " AndroidManifest.xml "
+                        + "'key-set' " + keySetName + " contained improper 'public-key'"
+                        + " tags. Not including in package's defined key-sets.");
+                continue;
+            }
+
+            for (String s : e.getValue()) {
+                pkg.addKeySet(keySetName, publicKeys.get(s));
+            }
+        }
+        if (pkg.getKeySetMapping().keySet().containsAll(upgradeKeySets)) {
+            pkg.setUpgradeKeySets(upgradeKeySets);
+        } else {
+            return input.error("Package" + packageName
+                    + " AndroidManifest.xml does not define all 'upgrade-key-set's .");
+        }
+
+        return input.success(pkg);
+    }
+
+    private static ParseResult<ParsingPackage> parseFeature(ParseInput input, ParsingPackage pkg,
+            Resources res, XmlResourceParser parser) throws IOException, XmlPullParserException {
+        ParseResult<ParsedFeature> result = ParsedFeatureUtils.parseFeature(res, parser, input);
+        if (result.isError()) {
+            return input.error(result);
+        }
+        return input.success(pkg.addFeature(result.getResult()));
+    }
+
+    private static ParseResult<ParsingPackage> parsePermissionGroup(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser)
+            throws XmlPullParserException, IOException {
+        ParseResult<ParsedPermissionGroup> result = ParsedPermissionUtils.parsePermissionGroup(
+                pkg, res, parser, PackageParser.sUseRoundIcon, input);
+        if (result.isError()) {
+            return input.error(result);
+        }
+        return input.success(pkg.addPermissionGroup(result.getResult()));
+    }
+
+    private static ParseResult<ParsingPackage> parsePermission(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser)
+            throws XmlPullParserException, IOException {
+        ParseResult<ParsedPermission> result = ParsedPermissionUtils.parsePermission(
+                pkg, res, parser, PackageParser.sUseRoundIcon, input);
+        if (result.isError()) {
+            return input.error(result);
+        }
+        return input.success(pkg.addPermission(result.getResult()));
+    }
+
+    private static ParseResult<ParsingPackage> parsePermissionTree(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser)
+            throws XmlPullParserException, IOException {
+        ParseResult<ParsedPermission> result = ParsedPermissionUtils.parsePermissionTree(
+                pkg, res, parser, PackageParser.sUseRoundIcon, input);
+        if (result.isError()) {
+            return input.error(result);
+        }
+        return input.success(pkg.addPermission(result.getResult()));
+    }
+
+    private ParseResult<ParsingPackage> parseUsesPermission(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser)
+            throws IOException, XmlPullParserException {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestUsesPermission);
+        try {
+            // Note: don't allow this value to be a reference to a resource
+            // that may change.
+            String name = sa.getNonResourceString(
+                    R.styleable.AndroidManifestUsesPermission_name);
+
+            int maxSdkVersion = 0;
+            TypedValue val = sa.peekValue(
+                    R.styleable.AndroidManifestUsesPermission_maxSdkVersion);
+            if (val != null) {
+                if (val.type >= TypedValue.TYPE_FIRST_INT && val.type <= TypedValue.TYPE_LAST_INT) {
+                    maxSdkVersion = val.data;
+                }
+            }
+
+            final String requiredFeature = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestUsesPermission_requiredFeature, 0);
+
+            final String requiredNotfeature = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestUsesPermission_requiredNotFeature,
+                    0);
+
+            XmlUtils.skipCurrentTag(parser);
+
+            // Can only succeed from here on out
+            ParseResult<ParsingPackage> success = input.success(pkg);
+
+            if (name == null) {
+                return success;
+            }
+
+            if ((maxSdkVersion != 0) && (maxSdkVersion < Build.VERSION.RESOURCES_SDK_INT)) {
+                return success;
+            }
+
+            // Only allow requesting this permission if the platform supports the given feature.
+            if (requiredFeature != null && mCallback != null && !mCallback.hasFeature(
+                    requiredFeature)) {
+                return success;
+            }
+
+            // Only allow requesting this permission if the platform doesn't support the given
+            // feature.
+            if (requiredNotfeature != null && mCallback != null
+                    && mCallback.hasFeature(requiredNotfeature)) {
+                return success;
+            }
+
+            if (!pkg.getRequestedPermissions().contains(name)) {
+                pkg.addRequestedPermission(name.intern());
+            } else {
+                Slog.w(TAG, "Ignoring duplicate uses-permissions/uses-permissions-sdk-m: "
+                        + name + " in package: " + pkg.getPackageName() + " at: "
+                        + parser.getPositionDescription());
+            }
+
+            return success;
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    private static ParseResult<ParsingPackage> parseUsesConfiguration(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser) {
+        ConfigurationInfo cPref = new ConfigurationInfo();
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestUsesConfiguration);
+        try {
+            cPref.reqTouchScreen = sa.getInt(
+                    R.styleable.AndroidManifestUsesConfiguration_reqTouchScreen,
+                    Configuration.TOUCHSCREEN_UNDEFINED);
+            cPref.reqKeyboardType = sa.getInt(
+                    R.styleable.AndroidManifestUsesConfiguration_reqKeyboardType,
+                    Configuration.KEYBOARD_UNDEFINED);
+            if (sa.getBoolean(
+                    R.styleable.AndroidManifestUsesConfiguration_reqHardKeyboard,
+                    false)) {
+                cPref.reqInputFeatures |= ConfigurationInfo.INPUT_FEATURE_HARD_KEYBOARD;
+            }
+            cPref.reqNavigation = sa.getInt(
+                    R.styleable.AndroidManifestUsesConfiguration_reqNavigation,
+                    Configuration.NAVIGATION_UNDEFINED);
+            if (sa.getBoolean(
+                    R.styleable.AndroidManifestUsesConfiguration_reqFiveWayNav,
+                    false)) {
+                cPref.reqInputFeatures |= ConfigurationInfo.INPUT_FEATURE_FIVE_WAY_NAV;
+            }
+            pkg.addConfigPreference(cPref);
+            return input.success(pkg);
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    private static ParseResult<ParsingPackage> parseUsesFeature(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser) {
+        FeatureInfo fi = parseFeatureInfo(res, parser);
+        pkg.addReqFeature(fi);
+
+        if (fi.name == null) {
+            ConfigurationInfo cPref = new ConfigurationInfo();
+            cPref.reqGlEsVersion = fi.reqGlEsVersion;
+            pkg.addConfigPreference(cPref);
+        }
+
+        return input.success(pkg);
+    }
+
+    private static FeatureInfo parseFeatureInfo(Resources res, AttributeSet attrs) {
+        FeatureInfo fi = new FeatureInfo();
+        TypedArray sa = res.obtainAttributes(attrs, R.styleable.AndroidManifestUsesFeature);
+        try {
+            // Note: don't allow this value to be a reference to a resource
+            // that may change.
+            fi.name = sa.getNonResourceString(R.styleable.AndroidManifestUsesFeature_name);
+            fi.version = sa.getInt(R.styleable.AndroidManifestUsesFeature_version, 0);
+            if (fi.name == null) {
+                fi.reqGlEsVersion = sa.getInt(R.styleable.AndroidManifestUsesFeature_glEsVersion,
+                        FeatureInfo.GL_ES_VERSION_UNDEFINED);
+            }
+            if (sa.getBoolean(R.styleable.AndroidManifestUsesFeature_required, true)) {
+                fi.flags |= FeatureInfo.FLAG_REQUIRED;
+            }
+            return fi;
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    private static ParseResult<ParsingPackage> parseFeatureGroup(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser)
+            throws IOException, XmlPullParserException {
+        FeatureGroupInfo group = new FeatureGroupInfo();
+        ArrayList<FeatureInfo> features = null;
+        final int depth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG
+                || parser.getDepth() > depth)) {
+            if (type != XmlPullParser.START_TAG) {
+                continue;
+            }
+
+            final String innerTagName = parser.getName();
+            if (innerTagName.equals("uses-feature")) {
+                FeatureInfo featureInfo = parseFeatureInfo(res, parser);
+                // FeatureGroups are stricter and mandate that
+                // any <uses-feature> declared are mandatory.
+                featureInfo.flags |= FeatureInfo.FLAG_REQUIRED;
+                features = ArrayUtils.add(features, featureInfo);
+            } else {
+                Slog.w(TAG,
+                        "Unknown element under <feature-group>: " + innerTagName +
+                                " at " + pkg.getBaseCodePath() + " " +
+                                parser.getPositionDescription());
+            }
+        }
+
+        if (features != null) {
+            group.features = new FeatureInfo[features.size()];
+            group.features = features.toArray(group.features);
+        }
+
+        pkg.addFeatureGroup(group);
+        return input.success(pkg);
+    }
+
+    private static ParseResult<ParsingPackage> parseUsesSdk(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser)
+            throws IOException, XmlPullParserException {
+        if (PackageParser.SDK_VERSION > 0) {
+            TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestUsesSdk);
+            try {
+                int minVers = 1;
+                String minCode = null;
+                int targetVers = 0;
+                String targetCode = null;
+
+                TypedValue val = sa.peekValue(R.styleable.AndroidManifestUsesSdk_minSdkVersion);
+                if (val != null) {
+                    if (val.type == TypedValue.TYPE_STRING && val.string != null) {
+                        minCode = val.string.toString();
+                    } else {
+                        // If it's not a string, it's an integer.
+                        minVers = val.data;
+                    }
+                }
+
+                val = sa.peekValue(R.styleable.AndroidManifestUsesSdk_targetSdkVersion);
+                if (val != null) {
+                    if (val.type == TypedValue.TYPE_STRING && val.string != null) {
+                        targetCode = val.string.toString();
+                        if (minCode == null) {
+                            minCode = targetCode;
+                        }
+                    } else {
+                        // If it's not a string, it's an integer.
+                        targetVers = val.data;
+                    }
+                } else {
+                    targetVers = minVers;
+                    targetCode = minCode;
+                }
+
+                ParseResult<Integer> minSdkVersionResult = computeMinSdkVersion(minVers, minCode,
+                        PackageParser.SDK_VERSION, PackageParser.SDK_CODENAMES, input);
+                if (minSdkVersionResult.isError()) {
+                    return input.error(minSdkVersionResult);
+                }
+
+                int minSdkVersion = minSdkVersionResult.getResult();
+
+                ParseResult<Integer> targetSdkVersionResult = computeTargetSdkVersion(
+                        targetVers, targetCode, PackageParser.SDK_CODENAMES, input);
+                if (targetSdkVersionResult.isError()) {
+                    return input.error(targetSdkVersionResult);
+                }
+
+                int targetSdkVersion = minSdkVersionResult.getResult();
+
+                pkg.setMinSdkVersion(minSdkVersion)
+                        .setTargetSdkVersion(targetSdkVersion);
+
+                int type;
+                final int innerDepth = parser.getDepth();
+                while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                        && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
+                    if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                        continue;
+                    }
+
+                    final ParseResult result;
+                    if (parser.getName().equals("extension-sdk")) {
+                        result = parseExtensionSdk(input, pkg, res, parser);
+                        XmlUtils.skipCurrentTag(parser);
+                    } else {
+                        result = ParsingUtils.unknownTag("<uses-sdk>", pkg, parser, input);
+                    }
+
+                    if (result.isError()) {
+                        return input.error(result);
+                    }
+                }
+            } finally {
+                sa.recycle();
+            }
+        }
+        return input.success(pkg);
+    }
+
+    private static ParseResult parseExtensionSdk(ParseInput input, ParsingPackage pkg,
+            Resources res, XmlResourceParser parser) {
+        int sdkVersion;
+        int minVersion;
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestExtensionSdk);
+        try {
+            sdkVersion = sa.getInt(R.styleable.AndroidManifestExtensionSdk_sdkVersion, -1);
+            minVersion = sa.getInt(R.styleable.AndroidManifestExtensionSdk_minExtensionVersion, -1);
+        } finally {
+            sa.recycle();
+        }
+
+        if (sdkVersion < 0) {
+            return input.error(
+                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
+                    "<extension-sdk> must specify an sdkVersion >= 0");
+        }
+        if (minVersion < 0) {
+            return input.error(
+                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
+                    "<extension-sdk> must specify minExtensionVersion >= 0");
+        }
+
+        try {
+            int version = SdkExtensions.getExtensionVersion(sdkVersion);
+            if (version < minVersion) {
+                return input.error(
+                        PackageManager.INSTALL_FAILED_OLDER_SDK,
+                        "Package requires " + sdkVersion + " extension version " + minVersion
+                                + " which exceeds device version " + version);
+            }
+        } catch (RuntimeException e) {
+            return input.error(
+                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
+                    "Specified sdkVersion " + sdkVersion + " is not valid");
+        }
+        return input.success(pkg);
+    }
+
+    /**
+     * {@link ParseResult} version of
+     * {@link PackageParser#computeMinSdkVersion(int, String, int, String[], String[])}
+     */
+    public static ParseResult<Integer> computeMinSdkVersion(@IntRange(from = 1) int minVers,
+            @Nullable String minCode, @IntRange(from = 1) int platformSdkVersion,
+            @NonNull String[] platformSdkCodenames, @NonNull ParseInput input) {
+        // If it's a release SDK, make sure we meet the minimum SDK requirement.
+        if (minCode == null) {
+            if (minVers <= platformSdkVersion) {
+                return input.success(minVers);
+            }
+
+            // We don't meet the minimum SDK requirement.
+            return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK,
+                    "Requires newer sdk version #" + minVers
+                            + " (current version is #" + platformSdkVersion + ")");
+        }
+
+        // If it's a pre-release SDK and the codename matches this platform, we
+        // definitely meet the minimum SDK requirement.
+        if (matchTargetCode(platformSdkCodenames, minCode)) {
+            return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
+        }
+
+        // Otherwise, we're looking at an incompatible pre-release SDK.
+        if (platformSdkCodenames.length > 0) {
+            return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK,
+                    "Requires development platform " + minCode
+                            + " (current platform is any of "
+                            + Arrays.toString(platformSdkCodenames) + ")");
+        } else {
+            return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK,
+                    "Requires development platform " + minCode
+                            + " but this is a release platform.");
+        }
+    }
+
+    /**
+     * {@link ParseResult} version of
+     * {@link PackageParser#computeTargetSdkVersion(int, String, String[], String[])}
+     */
+    public static ParseResult<Integer> computeTargetSdkVersion(@IntRange(from = 0) int targetVers,
+            @Nullable String targetCode, @NonNull String[] platformSdkCodenames,
+            @NonNull ParseInput input) {
+        // If it's a release SDK, return the version number unmodified.
+        if (targetCode == null) {
+            return input.success(targetVers);
+        }
+
+        // If it's a pre-release SDK and the codename matches this platform, it
+        // definitely targets this SDK.
+        if (matchTargetCode(platformSdkCodenames, targetCode)) {
+            return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
+        }
+
+        // Otherwise, we're looking at an incompatible pre-release SDK.
+        if (platformSdkCodenames.length > 0) {
+            return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK,
+                    "Requires development platform " + targetCode
+                            + " (current platform is any of "
+                            + Arrays.toString(platformSdkCodenames) + ")");
+        } else {
+            return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK,
+                    "Requires development platform " + targetCode
+                            + " but this is a release platform.");
+        }
+    }
+
+    /**
+     * Matches a given {@code targetCode} against a set of release codeNames. Target codes can
+     * either be of the form {@code [codename]}" (e.g {@code "Q"}) or of the form
+     * {@code [codename].[fingerprint]} (e.g {@code "Q.cafebc561"}).
+     */
+    private static boolean matchTargetCode(@NonNull String[] codeNames,
+            @NonNull String targetCode) {
+        final String targetCodeName;
+        final int targetCodeIdx = targetCode.indexOf('.');
+        if (targetCodeIdx == -1) {
+            targetCodeName = targetCode;
+        } else {
+            targetCodeName = targetCode.substring(0, targetCodeIdx);
+        }
+        return ArrayUtils.contains(codeNames, targetCodeName);
+    }
+
+    private static ParseResult<ParsingPackage> parseRestrictUpdateHash(int flags, ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser) {
+        if ((flags & PackageParser.PARSE_IS_SYSTEM_DIR) != 0) {
+            TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestRestrictUpdate);
+            try {
+                final String hash = sa.getNonConfigurationString(
+                        R.styleable.AndroidManifestRestrictUpdate_hash,
+                        0);
+
+                if (hash != null) {
+                    final int hashLength = hash.length();
+                    final byte[] hashBytes = new byte[hashLength / 2];
+                    for (int i = 0; i < hashLength; i += 2) {
+                        hashBytes[i / 2] = (byte) ((Character.digit(hash.charAt(i), 16)
+                                << 4)
+                                + Character.digit(hash.charAt(i + 1), 16));
+                    }
+                    pkg.setRestrictUpdateHash(hashBytes);
+                } else {
+                    pkg.setRestrictUpdateHash(null);
+                }
+            } finally {
+                sa.recycle();
+            }
+        }
+        return input.success(pkg);
+    }
+
+    private static ParseResult<ParsingPackage> parseQueries(ParseInput input, ParsingPackage pkg,
+            Resources res, XmlResourceParser parser) throws IOException, XmlPullParserException {
+        final int depth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG
+                || parser.getDepth() > depth)) {
+            if (type != XmlPullParser.START_TAG) {
+                continue;
+            }
+            if (parser.getName().equals("intent")) {
+                ParseResult<ParsedIntentInfo> result = ParsedIntentInfoUtils.parseIntentInfo(null,
+                        pkg, res, parser, true /*allowGlobs*/, true /*allowAutoVerify*/, input);
+                if (result.isError()) {
+                    return input.error(result);
+                }
+
+                ParsedIntentInfo intentInfo = result.getResult();
+
+                Uri data = null;
+                String dataType = null;
+                String host = "";
+                final int numActions = intentInfo.countActions();
+                final int numSchemes = intentInfo.countDataSchemes();
+                final int numTypes = intentInfo.countDataTypes();
+                final int numHosts = intentInfo.getHosts().length;
+                if ((numSchemes == 0 && numTypes == 0 && numActions == 0)) {
+                    return input.error("intent tags must contain either an action or data.");
+                }
+                if (numActions > 1) {
+                    return input.error("intent tag may have at most one action.");
+                }
+                if (numTypes > 1) {
+                    return input.error("intent tag may have at most one data type.");
+                }
+                if (numSchemes > 1) {
+                    return input.error("intent tag may have at most one data scheme.");
+                }
+                if (numHosts > 1) {
+                    return input.error("intent tag may have at most one data host.");
+                }
+                Intent intent = new Intent();
+                for (int i = 0, max = intentInfo.countCategories(); i < max; i++) {
+                    intent.addCategory(intentInfo.getCategory(i));
+                }
+                if (numHosts == 1) {
+                    host = intentInfo.getHosts()[0];
+                }
+                if (numSchemes == 1) {
+                    data = new Uri.Builder()
+                            .scheme(intentInfo.getDataScheme(0))
+                            .authority(host)
+                            .build();
+                }
+                if (numTypes == 1) {
+                    dataType = intentInfo.getDataType(0);
+                }
+                intent.setDataAndType(data, dataType);
+                if (numActions == 1) {
+                    intent.setAction(intentInfo.getAction(0));
+                }
+                pkg.addQueriesIntent(intent);
+            } else if (parser.getName().equals("package")) {
+                final TypedArray sa = res.obtainAttributes(parser,
+                        R.styleable.AndroidManifestQueriesPackage);
+                final String packageName = sa.getString(
+                        R.styleable.AndroidManifestQueriesPackage_name);
+                if (TextUtils.isEmpty(packageName)) {
+                    return input.error("Package name is missing from package tag.");
+                }
+                pkg.addQueriesPackage(packageName.intern());
+            } else if (parser.getName().equals("provider")) {
+                final TypedArray sa = res.obtainAttributes(parser,
+                        R.styleable.AndroidManifestQueriesProvider);
+                try {
+                    final String authorities =
+                            sa.getString(R.styleable.AndroidManifestQueriesProvider_authorities);
+                    if (TextUtils.isEmpty(authorities)) {
+                        return input.error(
+                                PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
+                                "Authority missing from provider tag."
+                        );
+                    }
+                    StringTokenizer authoritiesTokenizer = new StringTokenizer(authorities, ";");
+                    while (authoritiesTokenizer.hasMoreElements()) {
+                        pkg.addQueriesProvider(authoritiesTokenizer.nextToken());
+                    }
+                } finally {
+                    sa.recycle();
+                }
+            }
+        }
+        return input.success(pkg);
+    }
+
+    /**
+     * Parse the {@code application} XML tree at the current parse location in a
+     * <em>base APK</em> manifest.
+     * <p>
+     * When adding new features, carefully consider if they should also be
+     * supported by split APKs.
+     *
+     * This method should avoid using a getter for fields set by this method. Prefer assigning
+     * a local variable and using it. Otherwise there's an ordering problem which can be broken
+     * if any code moves around.
+     */
+    private ParseResult<ParsingPackage> parseBaseApplication(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser, int flags)
+            throws XmlPullParserException, IOException {
+        final String pkgName = pkg.getPackageName();
+        int targetSdk = pkg.getTargetSdkVersion();
+
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestApplication);
+        try {
+            // TODO(b/135203078): Remove this and force unit tests to mock an empty manifest
+            // This case can only happen in unit tests where we sometimes need to create fakes
+            // of various package parser data structures.
+            if (sa == null) {
+                return input.error("<application> does not contain any attributes");
+            }
+
+            String name = sa.getNonConfigurationString(R.styleable.AndroidManifestApplication_name,
+                    0);
+            if (name != null) {
+                String packageName = pkg.getPackageName();
+                String outInfoName = ParsingUtils.buildClassName(packageName, name);
+                if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(outInfoName)) {
+                    return input.error("<application> invalid android:name");
+                } else if (outInfoName == null) {
+                    return input.error("Empty class name in package " + packageName);
+                }
+
+                pkg.setClassName(outInfoName);
+            }
+
+            TypedValue labelValue = sa.peekValue(R.styleable.AndroidManifestApplication_label);
+            if (labelValue != null) {
+                pkg.setLabelRes(labelValue.resourceId);
+                if (labelValue.resourceId == 0) {
+                    pkg.setNonLocalizedLabel(labelValue.coerceToString());
+                }
+            }
+
+            parseBaseAppBasicFlags(pkg, sa);
+
+            String manageSpaceActivity = nonConfigString(Configuration.NATIVE_CONFIG_VERSION,
+                    R.styleable.AndroidManifestApplication_manageSpaceActivity, sa);
+            if (manageSpaceActivity != null) {
+                String manageSpaceActivityName = ParsingUtils.buildClassName(pkgName,
+                        manageSpaceActivity);
+
+                if (manageSpaceActivityName == null) {
+                    return input.error("Empty class name in package " + pkgName);
+                }
+
+                pkg.setManageSpaceActivityName(manageSpaceActivityName);
+            }
+
+            if (pkg.isAllowBackup()) {
+                // backupAgent, killAfterRestore, fullBackupContent, backupInForeground,
+                // and restoreAnyVersion are only relevant if backup is possible for the
+                // given application.
+                String backupAgent = nonConfigString(Configuration.NATIVE_CONFIG_VERSION,
+                        R.styleable.AndroidManifestApplication_backupAgent, sa);
+                if (backupAgent != null) {
+                    String backupAgentName = ParsingUtils.buildClassName(pkgName, backupAgent);
+                    if (backupAgentName == null) {
+                        return input.error("Empty class name in package " + pkgName);
+                    }
+
+                    if (PackageParser.DEBUG_BACKUP) {
+                        Slog.v(TAG, "android:backupAgent = " + backupAgentName
+                                + " from " + pkgName + "+" + backupAgent);
+                    }
+
+                    pkg.setBackupAgentName(backupAgentName)
+                            .setKillAfterRestore(bool(true,
+                                    R.styleable.AndroidManifestApplication_killAfterRestore, sa))
+                            .setRestoreAnyVersion(bool(false,
+                                    R.styleable.AndroidManifestApplication_restoreAnyVersion, sa))
+                            .setFullBackupOnly(bool(false,
+                                    R.styleable.AndroidManifestApplication_fullBackupOnly, sa))
+                            .setBackupInForeground(bool(false,
+                                    R.styleable.AndroidManifestApplication_backupInForeground, sa));
+                }
+
+                TypedValue v = sa.peekValue(
+                        R.styleable.AndroidManifestApplication_fullBackupContent);
+                int fullBackupContent = 0;
+
+                if (v != null) {
+                    fullBackupContent = v.resourceId;
+
+                    if (v.resourceId == 0) {
+                        if (PackageParser.DEBUG_BACKUP) {
+                            Slog.v(TAG, "fullBackupContent specified as boolean=" +
+                                    (v.data == 0 ? "false" : "true"));
+                        }
+                        // "false" => -1, "true" => 0
+                        fullBackupContent = v.data == 0 ? -1 : 0;
+                    }
+
+                    pkg.setFullBackupContent(fullBackupContent);
+                }
+                if (PackageParser.DEBUG_BACKUP) {
+                    Slog.v(TAG, "fullBackupContent=" + fullBackupContent + " for " + pkgName);
+                }
+            }
+
+            if (sa.getBoolean(R.styleable.AndroidManifestApplication_persistent, false)) {
+                // Check if persistence is based on a feature being present
+                final String requiredFeature = sa.getNonResourceString(R.styleable
+                        .AndroidManifestApplication_persistentWhenFeatureAvailable);
+                pkg.setPersistent(requiredFeature == null || mCallback.hasFeature(requiredFeature));
+            }
+
+            // TODO(b/135203078): Should parsing code be responsible for this? Maybe move to a
+            //  util or just have PackageImpl return true if either flag is set
+            // Debuggable implies profileable
+            pkg.setProfileableByShell(pkg.isProfileableByShell() || pkg.isDebuggable());
+
+            if (sa.hasValueOrEmpty(R.styleable.AndroidManifestApplication_resizeableActivity)) {
+                pkg.setResizeableActivity(sa.getBoolean(
+                        R.styleable.AndroidManifestApplication_resizeableActivity, true));
+            } else {
+                pkg.setResizeableActivityViaSdkVersion(
+                        targetSdk >= Build.VERSION_CODES.N);
+            }
+
+            String taskAffinity;
+            if (targetSdk >= Build.VERSION_CODES.FROYO) {
+                taskAffinity = sa.getNonConfigurationString(
+                        R.styleable.AndroidManifestApplication_taskAffinity,
+                        Configuration.NATIVE_CONFIG_VERSION);
+            } else {
+                // Some older apps have been seen to use a resource reference
+                // here that on older builds was ignored (with a warning).  We
+                // need to continue to do this for them so they don't break.
+                taskAffinity = sa.getNonResourceString(
+                        R.styleable.AndroidManifestApplication_taskAffinity);
+            }
+
+            ParseResult<String> taskAffinityResult = ComponentParseUtils.buildTaskAffinityName(
+                    pkgName, pkgName, taskAffinity, input);
+            if (taskAffinityResult.isError()) {
+                return input.error(taskAffinityResult);
+            }
+
+            pkg.setTaskAffinity(taskAffinityResult.getResult());
+            String factory = sa.getNonResourceString(
+                    R.styleable.AndroidManifestApplication_appComponentFactory);
+            if (factory != null) {
+                String appComponentFactory = ParsingUtils.buildClassName(pkgName, factory);
+                if (appComponentFactory == null) {
+                    return input.error("Empty class name in package " + pkgName);
+                }
+
+                pkg.setAppComponentFactory(appComponentFactory);
+            }
+
+            CharSequence pname;
+            if (targetSdk >= Build.VERSION_CODES.FROYO) {
+                pname = sa.getNonConfigurationString(
+                        R.styleable.AndroidManifestApplication_process,
+                        Configuration.NATIVE_CONFIG_VERSION);
+            } else {
+                // Some older apps have been seen to use a resource reference
+                // here that on older builds was ignored (with a warning).  We
+                // need to continue to do this for them so they don't break.
+                pname = sa.getNonResourceString(
+                        R.styleable.AndroidManifestApplication_process);
+            }
+            ParseResult<String> processNameResult = ComponentParseUtils.buildProcessName(
+                    pkgName, null, pname, flags, mSeparateProcesses, input);
+            if (processNameResult.isError()) {
+                return input.error(processNameResult);
+            }
+
+            String processName = processNameResult.getResult();
+            pkg.setProcessName(processName);
+
+            if (pkg.isCantSaveState()) {
+                // A heavy-weight application can not be in a custom process.
+                // We can do direct compare because we intern all strings.
+                if (processName != null && !processName.equals(pkgName)) {
+                    return input.error(
+                            "cantSaveState applications can not use custom processes");
+                }
+            }
+
+            String classLoaderName = pkg.getClassLoaderName();
+            if (classLoaderName != null
+                    && !ClassLoaderFactory.isValidClassLoaderName(classLoaderName)) {
+                return input.error("Invalid class loader name: " + classLoaderName);
+            }
+        } finally {
+            sa.recycle();
+        }
+
+        boolean hasActivityOrder = false;
+        boolean hasReceiverOrder = false;
+        boolean hasServiceOrder = false;
+        final int depth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG
+                || parser.getDepth() > depth)) {
+            if (type != XmlPullParser.START_TAG) {
+                continue;
+            }
+
+            final ParseResult result;
+            String tagName = parser.getName();
+            boolean isActivity = false;
+            switch (tagName) {
+                case "activity":
+                    isActivity = true;
+                    // fall-through
+                case "receiver":
+                    ParseResult<ParsedActivity> activityResult =
+                            ParsedActivityUtils.parseActivityOrReceiver(mSeparateProcesses, pkg,
+                                    res, parser, flags, PackageParser.sUseRoundIcon, input);
+
+                    if (activityResult.isSuccess()) {
+                        ParsedActivity activity = activityResult.getResult();
+                        if (isActivity) {
+                            hasActivityOrder |= (activity.getOrder() != 0);
+                            pkg.addActivity(activity);
+                        } else {
+                            hasReceiverOrder |= (activity.getOrder() != 0);
+                            pkg.addReceiver(activity);
+                        }
+                    }
+
+                    result = activityResult;
+                    break;
+                case "service":
+                    ParseResult<ParsedService> serviceResult =
+                            ParsedServiceUtils.parseService(mSeparateProcesses, pkg, res, parser,
+                                    flags, PackageParser.sUseRoundIcon, input);
+                    if (serviceResult.isSuccess()) {
+                        ParsedService service = serviceResult.getResult();
+                        hasServiceOrder |= (service.getOrder() != 0);
+                        pkg.addService(service);
+                    }
+
+                    result = serviceResult;
+                    break;
+                case "provider":
+                    ParseResult<ParsedProvider> providerResult =
+                            ParsedProviderUtils.parseProvider(mSeparateProcesses, pkg, res, parser,
+                                    flags, PackageParser.sUseRoundIcon, input);
+                    if (providerResult.isSuccess()) {
+                        pkg.addProvider(providerResult.getResult());
+                    }
+
+                    result = providerResult;
+                    break;
+                case "activity-alias":
+                    activityResult = ParsedActivityUtils.parseActivityAlias(pkg, res,
+                            parser, PackageParser.sUseRoundIcon, input);
+                    if (activityResult.isSuccess()) {
+                        ParsedActivity activity = activityResult.getResult();
+                        hasActivityOrder |= (activity.getOrder() != 0);
+                        pkg.addActivity(activity);
+                    }
+
+                    result = activityResult;
+                    break;
+                default:
+                    result = parseBaseAppChildTag(input, tagName, pkg, res, parser, flags);
+                    break;
+            }
+
+            if (result.isError()) {
+                return input.error(result);
+            }
+        }
+
+        if (TextUtils.isEmpty(pkg.getStaticSharedLibName())) {
+            // Add a hidden app detail activity to normal apps which forwards user to App Details
+            // page.
+            ParseResult<ParsedActivity> a = generateAppDetailsHiddenActivity(input, pkg);
+            // Backwards-compat, assume success
+            pkg.addActivity(a.getResult());
+            a.ignoreError();
+        }
+
+        if (hasActivityOrder) {
+            pkg.sortActivities();
+        }
+        if (hasReceiverOrder) {
+            pkg.sortReceivers();
+        }
+        if (hasServiceOrder) {
+            pkg.sortServices();
+        }
+
+        // Must be run after the entire {@link ApplicationInfo} has been fully processed and after
+        // every activity info has had a chance to set it from its attributes.
+        setMaxAspectRatio(pkg);
+        setMinAspectRatio(pkg);
+
+        pkg.setHasDomainUrls(hasDomainURLs(pkg));
+
+        return input.success(pkg);
+    }
+
+    /**
+     * Collection of single-line, no (or little) logic assignments. Separated for readability.
+     *
+     * Flags are separated by type and by default value. They are sorted alphabetically within each
+     * section.
+     */
+    private void parseBaseAppBasicFlags(ParsingPackage pkg, TypedArray sa) {
+        int targetSdk = pkg.getTargetSdkVersion();
+        //@formatter:off
+        // CHECKSTYLE:off
+        pkg
+                // Default true
+                .setAllowBackup(bool(true, R.styleable.AndroidManifestApplication_allowBackup, sa))
+                .setAllowClearUserData(bool(true, R.styleable.AndroidManifestApplication_allowClearUserData, sa))
+                .setAllowClearUserDataOnFailedRestore(bool(true, R.styleable.AndroidManifestApplication_allowClearUserDataOnFailedRestore, sa))
+                .setAllowNativeHeapPointerTagging(bool(true, R.styleable.AndroidManifestApplication_allowNativeHeapPointerTagging, sa))
+                .setEnabled(bool(true, R.styleable.AndroidManifestApplication_enabled, sa))
+                .setExtractNativeLibs(bool(true, R.styleable.AndroidManifestApplication_extractNativeLibs, sa))
+                .setHasCode(bool(true, R.styleable.AndroidManifestApplication_hasCode, sa))
+                // Default false
+                .setAllowTaskReparenting(bool(false, R.styleable.AndroidManifestApplication_allowTaskReparenting, sa))
+                .setCantSaveState(bool(false, R.styleable.AndroidManifestApplication_cantSaveState, sa))
+                .setDebuggable(bool(false, R.styleable.AndroidManifestApplication_debuggable, sa))
+                .setDefaultToDeviceProtectedStorage(bool(false, R.styleable.AndroidManifestApplication_defaultToDeviceProtectedStorage, sa))
+                .setDirectBootAware(bool(false, R.styleable.AndroidManifestApplication_directBootAware, sa))
+                .setForceQueryable(bool(false, R.styleable.AndroidManifestApplication_forceQueryable, sa))
+                .setGame(bool(false, R.styleable.AndroidManifestApplication_isGame, sa))
+                .setHasFragileUserData(bool(false, R.styleable.AndroidManifestApplication_hasFragileUserData, sa))
+                .setLargeHeap(bool(false, R.styleable.AndroidManifestApplication_largeHeap, sa))
+                .setMultiArch(bool(false, R.styleable.AndroidManifestApplication_multiArch, sa))
+                .setPreserveLegacyExternalStorage(bool(false, R.styleable.AndroidManifestApplication_preserveLegacyExternalStorage, sa))
+                .setRequiredForAllUsers(bool(false, R.styleable.AndroidManifestApplication_requiredForAllUsers, sa))
+                .setSupportsRtl(bool(false, R.styleable.AndroidManifestApplication_supportsRtl, sa))
+                .setTestOnly(bool(false, R.styleable.AndroidManifestApplication_testOnly, sa))
+                .setUseEmbeddedDex(bool(false, R.styleable.AndroidManifestApplication_useEmbeddedDex, sa))
+                .setUsesNonSdkApi(bool(false, R.styleable.AndroidManifestApplication_usesNonSdkApi, sa))
+                .setVmSafeMode(bool(false, R.styleable.AndroidManifestApplication_vmSafeMode, sa))
+                // targetSdkVersion gated
+                .setAllowAudioPlaybackCapture(bool(targetSdk >= Build.VERSION_CODES.Q, R.styleable.AndroidManifestApplication_allowAudioPlaybackCapture, sa))
+                .setBaseHardwareAccelerated(bool(targetSdk >= Build.VERSION_CODES.ICE_CREAM_SANDWICH, R.styleable.AndroidManifestApplication_hardwareAccelerated, sa))
+                .setRequestLegacyExternalStorage(bool(targetSdk < Build.VERSION_CODES.Q, R.styleable.AndroidManifestApplication_requestLegacyExternalStorage, sa))
+                .setUsesCleartextTraffic(bool(targetSdk < Build.VERSION_CODES.P, R.styleable.AndroidManifestApplication_usesCleartextTraffic, sa))
+                // Ints Default 0
+                .setUiOptions(anInt(R.styleable.AndroidManifestApplication_uiOptions, sa))
+                // Ints
+                .setCategory(anInt(ApplicationInfo.CATEGORY_UNDEFINED, R.styleable.AndroidManifestApplication_appCategory, sa))
+                // Floats Default 0f
+                .setMaxAspectRatio(aFloat(R.styleable.AndroidManifestApplication_maxAspectRatio, sa))
+                .setMinAspectRatio(aFloat(R.styleable.AndroidManifestApplication_minAspectRatio, sa))
+                // Resource ID
+                .setBanner(resId(R.styleable.AndroidManifestApplication_banner, sa))
+                .setDescriptionRes(resId(R.styleable.AndroidManifestApplication_description, sa))
+                .setIconRes(resId(R.styleable.AndroidManifestApplication_icon, sa))
+                .setLogo(resId(R.styleable.AndroidManifestApplication_logo, sa))
+                .setNetworkSecurityConfigRes(resId(R.styleable.AndroidManifestApplication_networkSecurityConfig, sa))
+                .setRoundIconRes(resId(R.styleable.AndroidManifestApplication_roundIcon, sa))
+                .setTheme(resId(R.styleable.AndroidManifestApplication_theme, sa))
+                // Strings
+                .setClassLoaderName(string(R.styleable.AndroidManifestApplication_classLoader, sa))
+                .setRequiredAccountType(string(R.styleable.AndroidManifestApplication_requiredAccountType, sa))
+                .setRestrictedAccountType(string(R.styleable.AndroidManifestApplication_restrictedAccountType, sa))
+                .setZygotePreloadName(string(R.styleable.AndroidManifestApplication_zygotePreloadName, sa))
+                // Non-Config String
+                .setPermission(nonConfigString(0, R.styleable.AndroidManifestApplication_permission, sa));
+        // CHECKSTYLE:on
+        //@formatter:on
+    }
+
+    /**
+     * For parsing non-MainComponents. Main ones have an order and some special handling which is
+     * done directly in {@link #parseBaseApplication(ParseInput, ParsingPackage, Resources,
+     * XmlResourceParser, int)}.
+     */
+    private ParseResult parseBaseAppChildTag(ParseInput input, String tag, ParsingPackage pkg,
+            Resources res, XmlResourceParser parser, int flags)
+            throws IOException, XmlPullParserException {
+        switch (tag) {
+            case "meta-data":
+                // TODO(b/135203078): I have no idea what this comment means
+                // note: application meta-data is stored off to the side, so it can
+                // remain null in the primary copy (we like to avoid extra copies because
+                // it can be large)
+                ParseResult<Bundle> metaDataResult = parseMetaData(pkg, res, parser,
+                        pkg.getMetaData(), input);
+                if (metaDataResult.isSuccess()) {
+                    pkg.setMetaData(metaDataResult.getResult());
+                }
+
+                return metaDataResult;
+            case "static-library":
+                return parseStaticLibrary(pkg, res, parser, input);
+            case "library":
+                return parseLibrary(pkg, res, parser, input);
+            case "uses-static-library":
+                return parseUsesStaticLibrary(input, pkg, res, parser);
+            case "uses-library":
+                return parseUsesLibrary(input, pkg, res, parser);
+            case "processes":
+                return parseProcesses(input, pkg, res, parser, mSeparateProcesses, flags);
+            case "uses-package":
+                // Dependencies for app installers; we don't currently try to
+                // enforce this.
+                return input.success(null);
+            case "profileable":
+                return parseProfileable(input, pkg, res, parser);
+            default:
+                return ParsingUtils.unknownTag("<application>", pkg, parser, input);
+        }
+    }
+
+    @NonNull
+    private static ParseResult<ParsingPackage> parseStaticLibrary(
+            ParsingPackage pkg, Resources res,
+            XmlResourceParser parser, ParseInput input) {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestStaticLibrary);
+        try {
+            // Note: don't allow this value to be a reference to a resource
+            // that may change.
+            String lname = sa.getNonResourceString(
+                    R.styleable.AndroidManifestStaticLibrary_name);
+            final int version = sa.getInt(
+                    R.styleable.AndroidManifestStaticLibrary_version, -1);
+            final int versionMajor = sa.getInt(
+                    R.styleable.AndroidManifestStaticLibrary_versionMajor,
+                    0);
+
+            // Since the app canot run without a static lib - fail if malformed
+            if (lname == null || version < 0) {
+                return input.error("Bad static-library declaration name: " + lname
+                        + " version: " + version);
+            } else if (pkg.getSharedUserId() != null) {
+                return input.error(
+                        PackageManager.INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID,
+                        "sharedUserId not allowed in static shared library"
+                );
+            } else if (pkg.getStaticSharedLibName() != null) {
+                return input.error("Multiple static-shared libs for package "
+                        + pkg.getPackageName());
+            }
+
+            return input.success(pkg.setStaticSharedLibName(lname.intern())
+                    .setStaticSharedLibVersion(
+                            PackageInfo.composeLongVersionCode(versionMajor, version))
+                    .setStaticSharedLibrary(true));
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    @NonNull
+    private static ParseResult<ParsingPackage> parseLibrary(
+            ParsingPackage pkg, Resources res,
+            XmlResourceParser parser, ParseInput input) {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestLibrary);
+        try {
+            // Note: don't allow this value to be a reference to a resource
+            // that may change.
+            String lname = sa.getNonResourceString(R.styleable.AndroidManifestLibrary_name);
+
+            if (lname != null) {
+                lname = lname.intern();
+                if (!ArrayUtils.contains(pkg.getLibraryNames(), lname)) {
+                    pkg.addLibraryName(lname);
+                }
+            }
+            return input.success(pkg);
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    @NonNull
+    private static ParseResult<ParsingPackage> parseUsesStaticLibrary(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser)
+            throws XmlPullParserException, IOException {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestUsesStaticLibrary);
+        try {
+            // Note: don't allow this value to be a reference to a resource that may change.
+            String lname = sa.getNonResourceString(
+                    R.styleable.AndroidManifestUsesLibrary_name);
+            final int version = sa.getInt(
+                    R.styleable.AndroidManifestUsesStaticLibrary_version, -1);
+            String certSha256Digest = sa.getNonResourceString(R.styleable
+                    .AndroidManifestUsesStaticLibrary_certDigest);
+
+            // Since an APK providing a static shared lib can only provide the lib - fail if
+            // malformed
+            if (lname == null || version < 0 || certSha256Digest == null) {
+                return input.error("Bad uses-static-library declaration name: " + lname
+                        + " version: " + version + " certDigest" + certSha256Digest);
+            }
+
+            // Can depend only on one version of the same library
+            List<String> usesStaticLibraries = pkg.getUsesStaticLibraries();
+            if (usesStaticLibraries.contains(lname)) {
+                return input.error(
+                        "Depending on multiple versions of static library " + lname);
+            }
+
+            lname = lname.intern();
+            // We allow ":" delimiters in the SHA declaration as this is the format
+            // emitted by the certtool making it easy for developers to copy/paste.
+            certSha256Digest = certSha256Digest.replace(":", "").toLowerCase();
+
+            // Fot apps targeting O-MR1 we require explicit enumeration of all certs.
+            String[] additionalCertSha256Digests = EmptyArray.STRING;
+            if (pkg.getTargetSdkVersion() >= Build.VERSION_CODES.O_MR1) {
+                ParseResult<String[]> certResult = parseAdditionalCertificates(input, res, parser);
+                if (certResult.isError()) {
+                    return input.error(certResult);
+                }
+                additionalCertSha256Digests = certResult.getResult();
+            }
+
+            final String[] certSha256Digests = new String[additionalCertSha256Digests.length + 1];
+            certSha256Digests[0] = certSha256Digest;
+            System.arraycopy(additionalCertSha256Digests, 0, certSha256Digests,
+                    1, additionalCertSha256Digests.length);
+
+            return input.success(pkg.addUsesStaticLibrary(lname)
+                    .addUsesStaticLibraryVersion(version)
+                    .addUsesStaticLibraryCertDigests(certSha256Digests));
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    @NonNull
+    private static ParseResult<ParsingPackage> parseUsesLibrary(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser) {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestUsesLibrary);
+        try {
+            // Note: don't allow this value to be a reference to a resource
+            // that may change.
+            String lname = sa.getNonResourceString(R.styleable.AndroidManifestUsesLibrary_name);
+            boolean req = sa.getBoolean(R.styleable.AndroidManifestUsesLibrary_required, true);
+
+            if (lname != null) {
+                lname = lname.intern();
+                if (req) {
+                    // Upgrade to treat as stronger constraint
+                    pkg.addUsesLibrary(lname)
+                            .removeUsesOptionalLibrary(lname);
+                } else {
+                    // Ignore if someone already defined as required
+                    if (!ArrayUtils.contains(pkg.getUsesLibraries(), lname)) {
+                        pkg.addUsesOptionalLibrary(lname);
+                    }
+                }
+            }
+
+            return input.success(pkg);
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    @NonNull
+    private static ParseResult<ParsingPackage> parseProcesses(ParseInput input, ParsingPackage pkg,
+            Resources res, XmlResourceParser parser, String[] separateProcesses, int flags)
+            throws IOException, XmlPullParserException {
+        ParseResult<ArrayMap<String, ParsedProcess>> result =
+                ParsedProcessUtils.parseProcesses(separateProcesses, pkg, res, parser, flags,
+                        input);
+        if (result.isError()) {
+            return input.error(result);
+        }
+
+        return input.success(pkg.setProcesses(result.getResult()));
+    }
+
+    @NonNull
+    private static ParseResult<ParsingPackage> parseProfileable(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser) {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestProfileable);
+        try {
+            return input.success(pkg.setProfileableByShell(pkg.isProfileableByShell()
+                    || bool(false, R.styleable.AndroidManifestProfileable_shell, sa)));
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    private static ParseResult<String[]> parseAdditionalCertificates(ParseInput input,
+            Resources resources, XmlResourceParser parser)
+            throws XmlPullParserException, IOException {
+        String[] certSha256Digests = EmptyArray.STRING;
+        final int depth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG
+                || parser.getDepth() > depth)) {
+            if (type != XmlPullParser.START_TAG) {
+                continue;
+            }
+
+            final String nodeName = parser.getName();
+            if (nodeName.equals("additional-certificate")) {
+                TypedArray sa = resources.obtainAttributes(parser,
+                        R.styleable.AndroidManifestAdditionalCertificate);
+                try {
+                    String certSha256Digest = sa.getNonResourceString(
+                            R.styleable.AndroidManifestAdditionalCertificate_certDigest);
+
+                    if (TextUtils.isEmpty(certSha256Digest)) {
+                        return input.error("Bad additional-certificate declaration with empty"
+                                + " certDigest:" + certSha256Digest);
+                    }
+
+
+                    // We allow ":" delimiters in the SHA declaration as this is the format
+                    // emitted by the certtool making it easy for developers to copy/paste.
+                    certSha256Digest = certSha256Digest.replace(":", "").toLowerCase();
+                    certSha256Digests = ArrayUtils.appendElement(String.class,
+                            certSha256Digests, certSha256Digest);
+                } finally {
+                    sa.recycle();
+                }
+            }
+        }
+
+        return input.success(certSha256Digests);
+    }
+
+    /**
+     * Generate activity object that forwards user to App Details page automatically.
+     * This activity should be invisible to user and user should not know or see it.
+     */
+    @NonNull
+    private static ParseResult<ParsedActivity> generateAppDetailsHiddenActivity(ParseInput input,
+            ParsingPackage pkg) {
+        String packageName = pkg.getPackageName();
+        ParseResult<String> taskAffinityResult = ComponentParseUtils.buildTaskAffinityName(
+                packageName, packageName, ":app_details", input);
+
+        String taskAffinity;
+        if (taskAffinityResult.isSuccess()) {
+            taskAffinity = taskAffinityResult.getResult();
+        } else {
+            // Backwards-compat, do not fail
+            taskAffinity = null;
+            taskAffinityResult.ignoreError();
+        }
+
+        // Build custom App Details activity info instead of parsing it from xml
+        return input.success(ParsedActivity.makeAppDetailsActivity(packageName,
+                pkg.getProcessName(), pkg.getUiOptions(), taskAffinity,
+                pkg.isBaseHardwareAccelerated()));
+    }
+
+    /**
+     * Check if one of the IntentFilter as both actions DEFAULT / VIEW and a HTTP/HTTPS data URI
+     */
+    private static boolean hasDomainURLs(ParsingPackage pkg) {
+        final List<ParsedActivity> activities = pkg.getActivities();
+        final int activitiesSize = activities.size();
+        for (int index = 0; index < activitiesSize; index++) {
+            ParsedActivity activity = activities.get(index);
+            List<ParsedIntentInfo> filters = activity.getIntents();
+            final int filtersSize = filters.size();
+            for (int filtersIndex = 0; filtersIndex < filtersSize; filtersIndex++) {
+                ParsedIntentInfo aii = filters.get(filtersIndex);
+                if (!aii.hasAction(Intent.ACTION_VIEW)) continue;
+                if (!aii.hasAction(Intent.ACTION_DEFAULT)) continue;
+                if (aii.hasDataScheme(IntentFilter.SCHEME_HTTP) ||
+                        aii.hasDataScheme(IntentFilter.SCHEME_HTTPS)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Sets the max aspect ratio of every child activity that doesn't already have an aspect
+     * ratio set.
+     */
+    private static void setMaxAspectRatio(ParsingPackage pkg) {
+        // Default to (1.86) 16.7:9 aspect ratio for pre-O apps and unset for O and greater.
+        // NOTE: 16.7:9 was the max aspect ratio Android devices can support pre-O per the CDD.
+        float maxAspectRatio = pkg.getTargetSdkVersion() < O
+                ? PackageParser.DEFAULT_PRE_O_MAX_ASPECT_RATIO : 0;
+
+        float packageMaxAspectRatio = pkg.getMaxAspectRatio();
+        if (packageMaxAspectRatio != 0) {
+            // Use the application max aspect ration as default if set.
+            maxAspectRatio = packageMaxAspectRatio;
+        } else {
+            Bundle appMetaData = pkg.getMetaData();
+            if (appMetaData != null && appMetaData.containsKey(
+                    PackageParser.METADATA_MAX_ASPECT_RATIO)) {
+                maxAspectRatio = appMetaData.getFloat(PackageParser.METADATA_MAX_ASPECT_RATIO,
+                        maxAspectRatio);
+            }
+        }
+
+        List<ParsedActivity> activities = pkg.getActivities();
+        int activitiesSize = activities.size();
+        for (int index = 0; index < activitiesSize; index++) {
+            ParsedActivity activity = activities.get(index);
+            // If the max aspect ratio for the activity has already been set, skip.
+            if (activity.getMaxAspectRatio() != null) {
+                continue;
+            }
+
+            // By default we prefer to use a values defined on the activity directly than values
+            // defined on the application. We do not check the styled attributes on the activity
+            // as it would have already been set when we processed the activity. We wait to
+            // process the meta data here since this method is called at the end of processing
+            // the application and all meta data is guaranteed.
+            final float activityAspectRatio = activity.getMetaData() != null
+                    ? activity.getMetaData().getFloat(PackageParser.METADATA_MAX_ASPECT_RATIO,
+                    maxAspectRatio)
+                    : maxAspectRatio;
+
+            activity.setMaxAspectRatio(activity.getResizeMode(), activityAspectRatio);
+        }
+    }
+
+    /**
+     * Sets the min aspect ratio of every child activity that doesn't already have an aspect
+     * ratio set.
+     */
+    private void setMinAspectRatio(ParsingPackage pkg) {
+        final float minAspectRatio;
+        float packageMinAspectRatio = pkg.getMinAspectRatio();
+        if (packageMinAspectRatio != 0) {
+            // Use the application max aspect ration as default if set.
+            minAspectRatio = packageMinAspectRatio;
+        } else {
+            // Default to (1.33) 4:3 aspect ratio for pre-Q apps and unset for Q and greater.
+            // NOTE: 4:3 was the min aspect ratio Android devices can support pre-Q per the CDD,
+            // except for watches which always supported 1:1.
+            minAspectRatio = pkg.getTargetSdkVersion() >= Build.VERSION_CODES.Q
+                    ? 0
+                    : (mCallback != null && mCallback.hasFeature(FEATURE_WATCH))
+                            ? PackageParser.DEFAULT_PRE_Q_MIN_ASPECT_RATIO_WATCH
+                            : PackageParser.DEFAULT_PRE_Q_MIN_ASPECT_RATIO;
+        }
+
+        List<ParsedActivity> activities = pkg.getActivities();
+        int activitiesSize = activities.size();
+        for (int index = 0; index < activitiesSize; index++) {
+            ParsedActivity activity = activities.get(index);
+            if (activity.getMinAspectRatio() == null) {
+                activity.setMinAspectRatio(activity.getResizeMode(), minAspectRatio);
+            }
+        }
+    }
+
+    private static ParseResult<ParsingPackage> parseOverlay(ParseInput input, ParsingPackage pkg,
+            Resources res, XmlResourceParser parser) {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestResourceOverlay);
+        try {
+            String target = sa.getString(R.styleable.AndroidManifestResourceOverlay_targetPackage);
+            int priority = anInt(0, R.styleable.AndroidManifestResourceOverlay_priority, sa);
+
+            if (target == null) {
+                return input.error("<overlay> does not specify a target package");
+            } else if (priority < 0 || priority > 9999) {
+                return input.error("<overlay> priority must be between 0 and 9999");
+            }
+
+            // check to see if overlay should be excluded based on system property condition
+            String propName = sa.getString(
+                    R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyName);
+            String propValue = sa.getString(
+                    R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyValue);
+            if (!checkOverlayRequiredSystemProperty(propName, propValue)) {
+                Slog.i(TAG, "Skipping target and overlay pair " + target + " and "
+                        + pkg.getBaseCodePath()
+                        + ": overlay ignored due to required system property: "
+                        + propName + " with value: " + propValue);
+                return input.error("Skipping target and overlay pair " + target + " and "
+                        + pkg.getBaseCodePath()
+                        + ": overlay ignored due to required system property: "
+                        + propName + " with value: " + propValue);
+            }
+
+            return input.success(pkg.setOverlay(true)
+                    .setOverlayTarget(target)
+                    .setOverlayPriority(priority)
+                    .setOverlayTargetName(
+                            sa.getString(R.styleable.AndroidManifestResourceOverlay_targetName))
+                    .setOverlayCategory(
+                            sa.getString(R.styleable.AndroidManifestResourceOverlay_category))
+                    .setOverlayIsStatic(
+                            bool(false, R.styleable.AndroidManifestResourceOverlay_isStatic, sa)));
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    private static ParseResult<ParsingPackage> parseProtectedBroadcast(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser) {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestProtectedBroadcast);
+        try {
+            // Note: don't allow this value to be a reference to a resource
+            // that may change.
+            String name = nonResString(R.styleable.AndroidManifestProtectedBroadcast_name, sa);
+            if (name != null) {
+                pkg.addProtectedBroadcast(name);
+            }
+            return input.success(pkg);
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    private static ParseResult<ParsingPackage> parseSupportScreens(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser) {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestSupportsScreens);
+        try {
+            int requiresSmallestWidthDp = anInt(0,
+                    R.styleable.AndroidManifestSupportsScreens_requiresSmallestWidthDp, sa);
+            int compatibleWidthLimitDp = anInt(0,
+                    R.styleable.AndroidManifestSupportsScreens_compatibleWidthLimitDp, sa);
+            int largestWidthLimitDp = anInt(0,
+                    R.styleable.AndroidManifestSupportsScreens_largestWidthLimitDp, sa);
+
+            // This is a trick to get a boolean and still able to detect
+            // if a value was actually set.
+            return input.success(pkg
+                    .setSupportsSmallScreens(
+                            anInt(1, R.styleable.AndroidManifestSupportsScreens_smallScreens, sa))
+                    .setSupportsNormalScreens(
+                            anInt(1, R.styleable.AndroidManifestSupportsScreens_normalScreens, sa))
+                    .setSupportsLargeScreens(
+                            anInt(1, R.styleable.AndroidManifestSupportsScreens_largeScreens, sa))
+                    .setSupportsExtraLargeScreens(
+                            anInt(1, R.styleable.AndroidManifestSupportsScreens_xlargeScreens, sa))
+                    .setResizeable(
+                            anInt(1, R.styleable.AndroidManifestSupportsScreens_resizeable, sa))
+                    .setAnyDensity(
+                            anInt(1, R.styleable.AndroidManifestSupportsScreens_anyDensity, sa))
+                    .setRequiresSmallestWidthDp(requiresSmallestWidthDp)
+                    .setCompatibleWidthLimitDp(compatibleWidthLimitDp)
+                    .setLargestWidthLimitDp(largestWidthLimitDp));
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    private static ParseResult<ParsingPackage> parseInstrumentation(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser)
+            throws XmlPullParserException, IOException {
+        ParseResult<ParsedInstrumentation> result = ParsedInstrumentationUtils.parseInstrumentation(
+                pkg, res, parser, PackageParser.sUseRoundIcon, input);
+        if (result.isError()) {
+            return input.error(result);
+        }
+        return input.success(pkg.addInstrumentation(result.getResult()));
+    }
+
+    private static ParseResult<ParsingPackage> parseOriginalPackage(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser) {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestOriginalPackage);
+        try {
+            String orig = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestOriginalPackage_name,
+                    0);
+            if (!pkg.getPackageName().equals(orig)) {
+                if (pkg.getOriginalPackages().isEmpty()) {
+                    pkg.setRealPackage(pkg.getPackageName());
+                }
+                pkg.addOriginalPackage(orig);
+            }
+            return input.success(pkg);
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    private static ParseResult<ParsingPackage> parseAdoptPermissions(ParseInput input,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser) {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestOriginalPackage);
+        try {
+            String name = nonConfigString(0, R.styleable.AndroidManifestOriginalPackage_name, sa);
+            if (name != null) {
+                pkg.addAdoptPermission(name);
+            }
+            return input.success(pkg);
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    private static void convertNewPermissions(ParsingPackage pkg) {
+        final int NP = PackageParser.NEW_PERMISSIONS.length;
+        StringBuilder newPermsMsg = null;
+        for (int ip = 0; ip < NP; ip++) {
+            final PackageParser.NewPermissionInfo npi
+                    = PackageParser.NEW_PERMISSIONS[ip];
+            if (pkg.getTargetSdkVersion() >= npi.sdkVersion) {
+                break;
+            }
+            if (!pkg.getRequestedPermissions().contains(npi.name)) {
+                if (newPermsMsg == null) {
+                    newPermsMsg = new StringBuilder(128);
+                    newPermsMsg.append(pkg.getPackageName());
+                    newPermsMsg.append(": compat added ");
+                } else {
+                    newPermsMsg.append(' ');
+                }
+                newPermsMsg.append(npi.name);
+                pkg.addRequestedPermission(npi.name)
+                        .addImplicitPermission(npi.name);
+            }
+        }
+        if (newPermsMsg != null) {
+            Slog.i(TAG, newPermsMsg.toString());
+        }
+    }
+
+    private static void convertSplitPermissions(ParsingPackage pkg) {
+        List<SplitPermissionInfoParcelable> splitPermissions;
+
+        try {
+            splitPermissions = ActivityThread.getPermissionManager().getSplitPermissions();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+
+        final int listSize = splitPermissions.size();
+        for (int is = 0; is < listSize; is++) {
+            final SplitPermissionInfoParcelable spi = splitPermissions.get(is);
+            List<String> requestedPermissions = pkg.getRequestedPermissions();
+            if (pkg.getTargetSdkVersion() >= spi.getTargetSdk()
+                    || !requestedPermissions.contains(spi.getSplitPermission())) {
+                continue;
+            }
+            final List<String> newPerms = spi.getNewPermissions();
+            for (int in = 0; in < newPerms.size(); in++) {
+                final String perm = newPerms.get(in);
+                if (!requestedPermissions.contains(perm)) {
+                    pkg.addRequestedPermission(perm)
+                            .addImplicitPermission(perm);
+                }
+            }
+        }
+    }
+
+    private static boolean checkOverlayRequiredSystemProperty(String propName, String propValue) {
+        if (TextUtils.isEmpty(propName) || TextUtils.isEmpty(propValue)) {
+            if (!TextUtils.isEmpty(propName) || !TextUtils.isEmpty(propValue)) {
+                // malformed condition - incomplete
+                Slog.w(TAG, "Disabling overlay - incomplete property :'" + propName
+                        + "=" + propValue + "' - require both requiredSystemPropertyName"
+                        + " AND requiredSystemPropertyValue to be specified.");
+                return false;
+            }
+            // no valid condition set - so no exclusion criteria, overlay will be included.
+            return true;
+        }
+
+        // check property value - make sure it is both set and equal to expected value
+        final String currValue = SystemProperties.get(propName);
+        return (currValue != null && currValue.equals(propValue));
+    }
+
+    /**
+     * This is a pre-density application which will get scaled - instead of being pixel perfect.
+     * This type of application is not resizable.
+     *
+     * @param pkg The package which needs to be marked as unresizable.
+     */
+    private static void adjustPackageToBeUnresizeableAndUnpipable(ParsingPackage pkg) {
+        List<ParsedActivity> activities = pkg.getActivities();
+        int activitiesSize = activities.size();
+        for (int index = 0; index < activitiesSize; index++) {
+            ParsedActivity activity = activities.get(index);
+            activity.setResizeMode(RESIZE_MODE_UNRESIZEABLE)
+                    .setFlags(activity.getFlags() & ~FLAG_SUPPORTS_PICTURE_IN_PICTURE);
+        }
+    }
+
+    private static ParseResult validateName(ParseInput input, String name, boolean requireSeparator,
+            boolean requireFilename) {
+        final int N = name.length();
+        boolean hasSep = false;
+        boolean front = true;
+        for (int i = 0; i < N; i++) {
+            final char c = name.charAt(i);
+            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
+                front = false;
+                continue;
+            }
+            if (!front) {
+                if ((c >= '0' && c <= '9') || c == '_') {
+                    continue;
+                }
+            }
+            if (c == '.') {
+                hasSep = true;
+                front = true;
+                continue;
+            }
+            return input.error("bad character '" + c + "'");
+        }
+        if (requireFilename && !FileUtils.isValidExtFilename(name)) {
+            return input.error("Invalid filename");
+        }
+        return hasSep || !requireSeparator
+                ? input.success(null)
+                : input.error("must have at least one '.' separator");
+    }
+
+    public static ParseResult<Bundle> parseMetaData(ParsingPackage pkg, Resources res,
+            XmlResourceParser parser, Bundle data, ParseInput input) {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestMetaData);
+        try {
+            if (data == null) {
+                data = new Bundle();
+            }
+
+            String name = TextUtils.safeIntern(
+                    nonConfigString(0, R.styleable.AndroidManifestMetaData_name, sa));
+            if (name == null) {
+                return input.error("<meta-data> requires an android:name attribute");
+            }
+
+            TypedValue v = sa.peekValue(R.styleable.AndroidManifestMetaData_resource);
+            if (v != null && v.resourceId != 0) {
+                //Slog.i(TAG, "Meta data ref " + name + ": " + v);
+                data.putInt(name, v.resourceId);
+            } else {
+                v = sa.peekValue(R.styleable.AndroidManifestMetaData_value);
+                //Slog.i(TAG, "Meta data " + name + ": " + v);
+                if (v != null) {
+                    if (v.type == TypedValue.TYPE_STRING) {
+                        CharSequence cs = v.coerceToString();
+                        data.putString(name, cs != null ? cs.toString() : null);
+                    } else if (v.type == TypedValue.TYPE_INT_BOOLEAN) {
+                        data.putBoolean(name, v.data != 0);
+                    } else if (v.type >= TypedValue.TYPE_FIRST_INT
+                            && v.type <= TypedValue.TYPE_LAST_INT) {
+                        data.putInt(name, v.data);
+                    } else if (v.type == TypedValue.TYPE_FLOAT) {
+                        data.putFloat(name, v.getFloat());
+                    } else {
+                        if (!PackageParser.RIGID_PARSER) {
+                            Slog.w(TAG,
+                                    "<meta-data> only supports string, integer, float, color, "
+                                            + "boolean, and resource reference types: "
+                                            + parser.getName() + " at "
+                                            + pkg.getBaseCodePath() + " "
+                                            + parser.getPositionDescription());
+                        } else {
+                            return input.error("<meta-data> only supports string, integer, float, "
+                                    + "color, boolean, and resource reference types");
+                        }
+                    }
+                } else {
+                    return input.error("<meta-data> requires an android:value "
+                            + "or android:resource attribute");
+                }
+            }
+            return input.success(data);
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    /**
+     * Collect certificates from all the APKs described in the given package. Also asserts that
+     * all APK contents are signed correctly and consistently.
+     */
+    public static SigningDetails collectCertificates(ParsingPackageRead pkg, boolean skipVerify)
+            throws PackageParserException {
+        SigningDetails signingDetails = SigningDetails.UNKNOWN;
+
+        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "collectCertificates");
+        try {
+            signingDetails = collectCertificates(
+                    pkg.getBaseCodePath(),
+                    skipVerify,
+                    pkg.isStaticSharedLibrary(),
+                    signingDetails,
+                    pkg.getTargetSdkVersion()
+            );
+
+            String[] splitCodePaths = pkg.getSplitCodePaths();
+            if (!ArrayUtils.isEmpty(splitCodePaths)) {
+                for (int i = 0; i < splitCodePaths.length; i++) {
+                    signingDetails = collectCertificates(
+                            splitCodePaths[i],
+                            skipVerify,
+                            pkg.isStaticSharedLibrary(),
+                            signingDetails,
+                            pkg.getTargetSdkVersion()
+                    );
+                }
+            }
+            return signingDetails;
+        } finally {
+            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
+        }
+    }
+
+    public static SigningDetails collectCertificates(String baseCodePath, boolean skipVerify,
+            boolean isStaticSharedLibrary, @NonNull SigningDetails existingSigningDetails,
+            int targetSdk) throws PackageParserException {
+        int minSignatureScheme = ApkSignatureVerifier.getMinimumSignatureSchemeVersionForTargetSdk(
+                targetSdk);
+        if (isStaticSharedLibrary) {
+            // must use v2 signing scheme
+            minSignatureScheme = SigningDetails.SignatureSchemeVersion.SIGNING_BLOCK_V2;
+        }
+        SigningDetails verified;
+        if (skipVerify) {
+            // systemDir APKs are already trusted, save time by not verifying
+            verified = ApkSignatureVerifier.unsafeGetCertsWithoutVerification(
+                    baseCodePath, minSignatureScheme);
+        } else {
+            verified = ApkSignatureVerifier.verify(baseCodePath, minSignatureScheme);
+        }
+
+        // Verify that entries are signed consistently with the first pkg
+        // we encountered. Note that for splits, certificates may have
+        // already been populated during an earlier parse of a base APK.
+        if (existingSigningDetails == SigningDetails.UNKNOWN) {
+            return verified;
+        } else {
+            if (!Signature.areExactMatch(existingSigningDetails.signatures, verified.signatures)) {
+                throw new PackageParserException(
+                        INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES,
+                        baseCodePath + " has mismatched certificates");
+            }
+
+            return existingSigningDetails;
+        }
+    }
+
+    /*
+     The following set of methods makes code easier to read by re-ordering the TypedArray methods.
+
+     The first parameter is the default, which is the most important to understand for someone
+     reading through the parsing code.
+
+     That's followed by the attribute name, which is usually irrelevant during reading because
+     it'll look like setSomeValue(true, R.styleable.ReallyLongParentName_SomeValueAttr... and
+     the "setSomeValue" part is enough to communicate what the line does.
+
+     Last comes the TypedArray, which is by far the least important since each try-with-resources
+     should only have 1.
+    */
+
+    // Note there is no variant of bool without a defaultValue parameter, since explicit true/false
+    // is important to specify when adding an attribute.
+    private static boolean bool(boolean defaultValue, @StyleableRes int attribute, TypedArray sa) {
+        return sa.getBoolean(attribute, defaultValue);
+    }
+
+    private static float aFloat(float defaultValue, @StyleableRes int attribute, TypedArray sa) {
+        return sa.getFloat(attribute, defaultValue);
+    }
+
+    private static float aFloat(@StyleableRes int attribute, TypedArray sa) {
+        return sa.getFloat(attribute, 0f);
+    }
+
+    private static int anInt(int defaultValue, @StyleableRes int attribute, TypedArray sa) {
+        return sa.getInt(attribute, defaultValue);
+    }
+
+    private static int anInt(@StyleableRes int attribute, TypedArray sa) {
+        return sa.getInt(attribute, 0);
+    }
+
+    @AnyRes
+    private static int resId(@StyleableRes int attribute, TypedArray sa) {
+        return sa.getResourceId(attribute, 0);
+    }
+
+    private static String string(@StyleableRes int attribute, TypedArray sa) {
+        return sa.getString(attribute);
+    }
+
+    private static String nonConfigString(int allowedChangingConfigs, @StyleableRes int attribute,
+            TypedArray sa) {
+        return sa.getNonConfigurationString(attribute, allowedChangingConfigs);
+    }
+
+    private static String nonResString(@StyleableRes int index, TypedArray sa) {
+        return sa.getNonResourceString(index);
+    }
+
+    /**
+     * Callback interface for retrieving information that may be needed while parsing
+     * a package.
+     */
+    public interface Callback {
+        boolean hasFeature(String feature);
+
+        ParsingPackage startParsingPackage(String packageName, String baseCodePath, String codePath,
+                TypedArray manifestArray, boolean isCoreApp);
+    }
+}
diff --git a/core/java/android/content/pm/parsing/ParsingUtils.java b/core/java/android/content/pm/parsing/ParsingUtils.java
new file mode 100644
index 0000000..ba61de1
--- /dev/null
+++ b/core/java/android/content/pm/parsing/ParsingUtils.java
@@ -0,0 +1,70 @@
+/*
+ * 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.content.pm.parsing;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.PackageParser;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+import android.content.res.XmlResourceParser;
+import android.util.Slog;
+
+import com.android.internal.util.XmlUtils;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/** @hide **/
+public class ParsingUtils {
+
+    // TODO(b/135203078): Consolidate log tags
+    public static final String TAG = "PackageParsing";
+
+    @Nullable
+    public static String buildClassName(String pkg, CharSequence clsSeq) {
+        if (clsSeq == null || clsSeq.length() <= 0) {
+            return null;
+        }
+        String cls = clsSeq.toString();
+        char c = cls.charAt(0);
+        if (c == '.') {
+            return pkg + cls;
+        }
+        if (cls.indexOf('.') < 0) {
+            StringBuilder b = new StringBuilder(pkg);
+            b.append('.');
+            b.append(cls);
+            return b.toString();
+        }
+        return cls;
+    }
+
+    @NonNull
+    public static ParseResult unknownTag(String parentTag, ParsingPackage pkg,
+            XmlResourceParser parser, ParseInput input) throws IOException, XmlPullParserException {
+        if (PackageParser.RIGID_PARSER) {
+            return input.error("Bad element under " + parentTag + ": " + parser.getName());
+        }
+        Slog.w(TAG, "Unknown element under " + parentTag + ": "
+                + parser.getName() + " at " + pkg.getBaseCodePath() + " "
+                + parser.getPositionDescription());
+        XmlUtils.skipCurrentTag(parser);
+        return input.success(null); // Type doesn't matter
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ComponentParseUtils.java b/core/java/android/content/pm/parsing/component/ComponentParseUtils.java
new file mode 100644
index 0000000..c4caedc
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ComponentParseUtils.java
@@ -0,0 +1,178 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import android.annotation.AttrRes;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Intent;
+import android.content.pm.PackageParser;
+import android.content.pm.PackageUserState;
+import android.content.pm.parsing.ParsingPackage;
+import android.content.pm.parsing.ParsingUtils;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.text.TextUtils;
+
+import android.content.pm.parsing.ParsingPackageUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/** @hide */
+public class ComponentParseUtils {
+
+    private static final String TAG = ParsingPackageUtils.TAG;
+
+    public static boolean isImplicitlyExposedIntent(ParsedIntentInfo intentInfo) {
+        return intentInfo.hasCategory(Intent.CATEGORY_BROWSABLE)
+                || intentInfo.hasAction(Intent.ACTION_SEND)
+                || intentInfo.hasAction(Intent.ACTION_SENDTO)
+                || intentInfo.hasAction(Intent.ACTION_SEND_MULTIPLE);
+    }
+
+    static <Component extends ParsedComponent> ParseResult<Component> parseAllMetaData(
+            ParsingPackage pkg, Resources res, XmlResourceParser parser, String tag,
+            Component component, ParseInput input) throws XmlPullParserException, IOException {
+        final int depth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > depth)) {
+            if (type != XmlPullParser.START_TAG) {
+                continue;
+            }
+
+            final ParseResult result;
+            if ("meta-data".equals(parser.getName())) {
+                result = ParsedComponentUtils.addMetaData(component, pkg, res, parser, input);
+            } else {
+                result = ParsingUtils.unknownTag(tag, pkg, parser, input);
+            }
+
+            if (result.isError()) {
+                return input.error(result);
+            }
+        }
+
+        return input.success(component);
+    }
+
+    @NonNull
+    public static ParseResult<String> buildProcessName(@NonNull String pkg, String defProc,
+            CharSequence procSeq, int flags, String[] separateProcesses, ParseInput input) {
+        if ((flags & PackageParser.PARSE_IGNORE_PROCESSES) != 0 && !"system".contentEquals(
+                procSeq)) {
+            return input.success(defProc != null ? defProc : pkg);
+        }
+        if (separateProcesses != null) {
+            for (int i = separateProcesses.length - 1; i >= 0; i--) {
+                String sp = separateProcesses[i];
+                if (sp.equals(pkg) || sp.equals(defProc) || sp.contentEquals(procSeq)) {
+                    return input.success(pkg);
+                }
+            }
+        }
+        if (procSeq == null || procSeq.length() <= 0) {
+            return input.success(defProc);
+        }
+
+        ParseResult<String> nameResult = ComponentParseUtils.buildCompoundName(pkg, procSeq,
+                "process", input);
+        return input.success(TextUtils.safeIntern(nameResult.getResult()));
+    }
+
+    @NonNull
+    public static ParseResult<String> buildTaskAffinityName(String pkg, String defProc,
+            CharSequence procSeq, ParseInput input) {
+        if (procSeq == null) {
+            return input.success(defProc);
+        }
+        if (procSeq.length() <= 0) {
+            return input.success(null);
+        }
+        return buildCompoundName(pkg, procSeq, "taskAffinity", input);
+    }
+
+    public static ParseResult<String> buildCompoundName(String pkg, CharSequence procSeq,
+            String type, ParseInput input) {
+        String proc = procSeq.toString();
+        char c = proc.charAt(0);
+        if (pkg != null && c == ':') {
+            if (proc.length() < 2) {
+                return input.error("Bad " + type + " name " + proc + " in package " + pkg
+                        + ": must be at least two characters");
+            }
+            String subName = proc.substring(1);
+            String nameError = PackageParser.validateName(subName, false, false);
+            if (nameError != null) {
+                return input.error("Invalid " + type + " name " + proc + " in package " + pkg
+                        + ": " + nameError);
+            }
+            return input.success(pkg + proc);
+        }
+        String nameError = PackageParser.validateName(proc, true, false);
+        if (nameError != null && !"system".equals(proc)) {
+            return input.error("Invalid " + type + " name " + proc + " in package " + pkg
+                    + ": " + nameError);
+        }
+        return input.success(proc);
+    }
+
+    public static int flag(int flag, @AttrRes int attribute, TypedArray typedArray) {
+        return typedArray.getBoolean(attribute, false) ? flag : 0;
+    }
+
+    public static int flag(int flag, @AttrRes int attribute, boolean defaultValue,
+            TypedArray typedArray) {
+        return typedArray.getBoolean(attribute, defaultValue) ? flag : 0;
+    }
+
+    /**
+     * This is not state aware. Avoid and access through PackageInfoUtils in the system server.
+     */
+    @Nullable
+    public static CharSequence getNonLocalizedLabel(
+            ParsedComponent component) {
+        return component.nonLocalizedLabel;
+    }
+
+    /**
+     * This is not state aware. Avoid and access through PackageInfoUtils in the system server.
+     *
+     * This is a method of the utility class to discourage use.
+     */
+    public static int getIcon(ParsedComponent component) {
+        return component.icon;
+    }
+
+    public static boolean isMatch(PackageUserState state, boolean isSystem,
+            boolean isPackageEnabled, ParsedMainComponent component, int flags) {
+        return state.isMatch(isSystem, isPackageEnabled, component.isEnabled(),
+                component.isDirectBootAware(), component.getName(), flags);
+    }
+
+    public static boolean isEnabled(PackageUserState state, boolean isPackageEnabled,
+            ParsedMainComponent parsedComponent, int flags) {
+        return state.isEnabled(isPackageEnabled, parsedComponent.isEnabled(),
+                parsedComponent.getName(), flags);
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedActivity.java b/core/java/android/content/pm/parsing/component/ParsedActivity.java
new file mode 100644
index 0000000..5495c22
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedActivity.java
@@ -0,0 +1,451 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
+import static android.content.pm.parsing.ParsingPackageImpl.sForString;
+import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED;
+
+import android.annotation.Nullable;
+import android.app.ActivityTaskManager;
+import android.content.ComponentName;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageParser;
+import android.content.pm.parsing.ParsingPackageImpl;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+
+import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;
+
+/** @hide **/
+public class ParsedActivity extends ParsedMainComponent {
+
+    int theme;
+    int uiOptions;
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String targetActivity;
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String parentActivityName;
+    @Nullable
+    String taskAffinity;
+    int privateFlags;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String permission;
+
+    int launchMode;
+    int documentLaunchMode;
+    int maxRecents;
+    int configChanges;
+    int softInputMode;
+    int persistableMode;
+    int lockTaskLaunchMode;
+
+    int screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
+    int resizeMode = ActivityInfo.RESIZE_MODE_RESIZEABLE;
+
+    @Nullable
+    private Float maxAspectRatio;
+
+    @Nullable
+    private Float minAspectRatio;
+
+    @Nullable
+    String requestedVrComponent;
+    int rotationAnimation = -1;
+    int colorMode;
+
+    boolean preferMinimalPostProcessing;
+
+    @Nullable
+    ActivityInfo.WindowLayout windowLayout;
+
+    public ParsedActivity(ParsedActivity other) {
+        super(other);
+        this.theme = other.theme;
+        this.uiOptions = other.uiOptions;
+        this.targetActivity = other.targetActivity;
+        this.parentActivityName = other.parentActivityName;
+        this.taskAffinity = other.taskAffinity;
+        this.privateFlags = other.privateFlags;
+        this.permission = other.permission;
+        this.launchMode = other.launchMode;
+        this.documentLaunchMode = other.documentLaunchMode;
+        this.maxRecents = other.maxRecents;
+        this.configChanges = other.configChanges;
+        this.softInputMode = other.softInputMode;
+        this.persistableMode = other.persistableMode;
+        this.lockTaskLaunchMode = other.lockTaskLaunchMode;
+        this.screenOrientation = other.screenOrientation;
+        this.resizeMode = other.resizeMode;
+        this.maxAspectRatio = other.maxAspectRatio;
+        this.minAspectRatio = other.minAspectRatio;
+        this.requestedVrComponent = other.requestedVrComponent;
+        this.rotationAnimation = other.rotationAnimation;
+        this.colorMode = other.colorMode;
+        this.windowLayout = other.windowLayout;
+    }
+
+    /**
+     * Generate activity object that forwards user to App Details page automatically.
+     * This activity should be invisible to user and user should not know or see it.
+     */
+    public static ParsedActivity makeAppDetailsActivity(String packageName, String processName,
+            int uiOptions, String taskAffinity, boolean hardwareAccelerated) {
+        ParsedActivity activity = new ParsedActivity();
+        activity.setPackageName(packageName);
+        activity.theme = android.R.style.Theme_NoDisplay;
+        activity.exported = true;
+        activity.setName(PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME);
+        activity.setProcessName(processName);
+        activity.uiOptions = uiOptions;
+        activity.taskAffinity = taskAffinity;
+        activity.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
+        activity.documentLaunchMode = ActivityInfo.DOCUMENT_LAUNCH_NONE;
+        activity.maxRecents = ActivityTaskManager.getDefaultAppRecentsLimitStatic();
+        activity.configChanges = PackageParser.getActivityConfigChanges(0, 0);
+        activity.softInputMode = 0;
+        activity.persistableMode = ActivityInfo.PERSIST_NEVER;
+        activity.screenOrientation = SCREEN_ORIENTATION_UNSPECIFIED;
+        activity.resizeMode = RESIZE_MODE_FORCE_RESIZEABLE;
+        activity.lockTaskLaunchMode = 0;
+        activity.setDirectBootAware(false);
+        activity.rotationAnimation = ROTATION_ANIMATION_UNSPECIFIED;
+        activity.colorMode = ActivityInfo.COLOR_MODE_DEFAULT;
+        activity.preferMinimalPostProcessing = ActivityInfo.MINIMAL_POST_PROCESSING_DEFAULT;
+        if (hardwareAccelerated) {
+            activity.setFlags(activity.getFlags() | ActivityInfo.FLAG_HARDWARE_ACCELERATED);
+        }
+        return activity;
+    }
+
+    static ParsedActivity makeAlias(String targetActivityName, ParsedActivity target) {
+        ParsedActivity alias = new ParsedActivity();
+        alias.setPackageName(target.getPackageName());
+        alias.setTargetActivity(targetActivityName);
+        alias.configChanges = target.configChanges;
+        alias.flags = target.flags;
+        alias.privateFlags = target.privateFlags;
+        alias.icon = target.icon;
+        alias.logo = target.logo;
+        alias.banner = target.banner;
+        alias.labelRes = target.labelRes;
+        alias.nonLocalizedLabel = target.nonLocalizedLabel;
+        alias.launchMode = target.launchMode;
+        alias.lockTaskLaunchMode = target.lockTaskLaunchMode;
+        alias.descriptionRes = target.descriptionRes;
+        alias.screenOrientation = target.screenOrientation;
+        alias.taskAffinity = target.taskAffinity;
+        alias.theme = target.theme;
+        alias.softInputMode = target.softInputMode;
+        alias.uiOptions = target.uiOptions;
+        alias.parentActivityName = target.parentActivityName;
+        alias.maxRecents = target.maxRecents;
+        alias.windowLayout = target.windowLayout;
+        alias.resizeMode = target.resizeMode;
+        alias.maxAspectRatio = target.maxAspectRatio;
+        alias.minAspectRatio = target.minAspectRatio;
+        alias.requestedVrComponent = target.requestedVrComponent;
+        alias.directBootAware = target.directBootAware;
+        alias.setProcessName(target.getProcessName());
+        return alias;
+
+        // Not all attributes from the target ParsedActivity are copied to the alias.
+        // Careful when adding an attribute and determine whether or not it should be copied.
+//        alias.enabled = target.enabled;
+//        alias.exported = target.exported;
+//        alias.permission = target.permission;
+//        alias.splitName = target.splitName;
+//        alias.documentLaunchMode = target.documentLaunchMode;
+//        alias.persistableMode = target.persistableMode;
+//        alias.rotationAnimation = target.rotationAnimation;
+//        alias.colorMode = target.colorMode;
+//        alias.intents.addAll(target.intents);
+//        alias.order = target.order;
+//        alias.metaData = target.metaData;
+    }
+
+    public ParsedActivity setMaxAspectRatio(int resizeMode, float maxAspectRatio) {
+        if (resizeMode == ActivityInfo.RESIZE_MODE_RESIZEABLE
+                || resizeMode == ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION) {
+            // Resizeable activities can be put in any aspect ratio.
+            return this;
+        }
+
+        if (maxAspectRatio < 1.0f && maxAspectRatio != 0) {
+            // Ignore any value lesser than 1.0.
+            return this;
+        }
+
+        this.maxAspectRatio = maxAspectRatio;
+        return this;
+    }
+
+    public ParsedActivity setMinAspectRatio(int resizeMode, float minAspectRatio) {
+        if (resizeMode == RESIZE_MODE_RESIZEABLE
+                || resizeMode == RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION) {
+            // Resizeable activities can be put in any aspect ratio.
+            return this;
+        }
+
+        if (minAspectRatio < 1.0f && minAspectRatio != 0) {
+            // Ignore any value lesser than 1.0.
+            return this;
+        }
+
+        this.minAspectRatio = minAspectRatio;
+        return this;
+    }
+
+    public ParsedActivity setFlags(int flags) {
+        this.flags = flags;
+        return this;
+    }
+
+    public ParsedActivity setResizeMode(int resizeMode) {
+        this.resizeMode = resizeMode;
+        return this;
+    }
+
+    public ParsedActivity setTargetActivity(String targetActivity) {
+        this.targetActivity = TextUtils.safeIntern(targetActivity);
+        return this;
+    }
+
+    public ParsedActivity setParentActivity(String parentActivity) {
+        this.parentActivityName = TextUtils.safeIntern(parentActivity);
+        return this;
+    }
+
+    public ParsedActivity setPermission(String permission) {
+        // Empty string must be converted to null
+        this.permission = TextUtils.isEmpty(permission) ? null : permission.intern();
+        return this;
+    }
+
+    public String toString() {
+        StringBuilder sb = new StringBuilder(128);
+        sb.append("Activity{");
+        sb.append(Integer.toHexString(System.identityHashCode(this)));
+        sb.append(' ');
+        ComponentName.appendShortString(sb, getPackageName(), getName());
+        sb.append('}');
+        return sb.toString();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        super.writeToParcel(dest, flags);
+        dest.writeInt(this.theme);
+        dest.writeInt(this.uiOptions);
+        sForString.parcel(this.targetActivity, dest, flags);
+        sForString.parcel(this.parentActivityName, dest, flags);
+        dest.writeString(this.taskAffinity);
+        dest.writeInt(this.privateFlags);
+        sForString.parcel(this.permission, dest, flags);
+        dest.writeInt(this.launchMode);
+        dest.writeInt(this.documentLaunchMode);
+        dest.writeInt(this.maxRecents);
+        dest.writeInt(this.configChanges);
+        dest.writeInt(this.softInputMode);
+        dest.writeInt(this.persistableMode);
+        dest.writeInt(this.lockTaskLaunchMode);
+        dest.writeInt(this.screenOrientation);
+        dest.writeInt(this.resizeMode);
+        dest.writeValue(this.maxAspectRatio);
+        dest.writeValue(this.minAspectRatio);
+        dest.writeString(this.requestedVrComponent);
+        dest.writeInt(this.rotationAnimation);
+        dest.writeInt(this.colorMode);
+        dest.writeBoolean(this.preferMinimalPostProcessing);
+        dest.writeBundle(this.metaData);
+
+        if (windowLayout != null) {
+            dest.writeBoolean(true);
+            dest.writeInt(windowLayout.width);
+            dest.writeFloat(windowLayout.widthFraction);
+            dest.writeInt(windowLayout.height);
+            dest.writeFloat(windowLayout.heightFraction);
+            dest.writeInt(windowLayout.gravity);
+            dest.writeInt(windowLayout.minWidth);
+            dest.writeInt(windowLayout.minHeight);
+        } else {
+            dest.writeBoolean(false);
+        }
+    }
+
+    public ParsedActivity() {
+    }
+
+    protected ParsedActivity(Parcel in) {
+        super(in);
+        this.theme = in.readInt();
+        this.uiOptions = in.readInt();
+        this.targetActivity = sForString.unparcel(in);
+        this.parentActivityName = sForString.unparcel(in);
+        this.taskAffinity = in.readString();
+        this.privateFlags = in.readInt();
+        this.permission = sForString.unparcel(in);
+        this.launchMode = in.readInt();
+        this.documentLaunchMode = in.readInt();
+        this.maxRecents = in.readInt();
+        this.configChanges = in.readInt();
+        this.softInputMode = in.readInt();
+        this.persistableMode = in.readInt();
+        this.lockTaskLaunchMode = in.readInt();
+        this.screenOrientation = in.readInt();
+        this.resizeMode = in.readInt();
+        this.maxAspectRatio = (Float) in.readValue(Float.class.getClassLoader());
+        this.minAspectRatio = (Float) in.readValue(Float.class.getClassLoader());
+        this.requestedVrComponent = in.readString();
+        this.rotationAnimation = in.readInt();
+        this.colorMode = in.readInt();
+        this.preferMinimalPostProcessing = in.readBoolean();
+        this.metaData = in.readBundle();
+        if (in.readBoolean()) {
+            windowLayout = new ActivityInfo.WindowLayout(in);
+        }
+    }
+
+    public static final Parcelable.Creator<ParsedActivity> CREATOR = new Creator<ParsedActivity>() {
+        @Override
+        public ParsedActivity createFromParcel(Parcel source) {
+            return new ParsedActivity(source);
+        }
+
+        @Override
+        public ParsedActivity[] newArray(int size) {
+            return new ParsedActivity[size];
+        }
+    };
+
+    public int getTheme() {
+        return theme;
+    }
+
+    public int getUiOptions() {
+        return uiOptions;
+    }
+
+    @Nullable
+    public String getTargetActivity() {
+        return targetActivity;
+    }
+
+    @Nullable
+    public String getParentActivityName() {
+        return parentActivityName;
+    }
+
+    @Nullable
+    public String getTaskAffinity() {
+        return taskAffinity;
+    }
+
+    public int getPrivateFlags() {
+        return privateFlags;
+    }
+
+    @Nullable
+    public String getPermission() {
+        return permission;
+    }
+
+    public int getLaunchMode() {
+        return launchMode;
+    }
+
+    public int getDocumentLaunchMode() {
+        return documentLaunchMode;
+    }
+
+    public int getMaxRecents() {
+        return maxRecents;
+    }
+
+    public int getConfigChanges() {
+        return configChanges;
+    }
+
+    public int getSoftInputMode() {
+        return softInputMode;
+    }
+
+    public int getPersistableMode() {
+        return persistableMode;
+    }
+
+    public int getLockTaskLaunchMode() {
+        return lockTaskLaunchMode;
+    }
+
+    public int getScreenOrientation() {
+        return screenOrientation;
+    }
+
+    public int getResizeMode() {
+        return resizeMode;
+    }
+
+    @Nullable
+    public Float getMaxAspectRatio() {
+        return maxAspectRatio;
+    }
+
+    @Nullable
+    public Float getMinAspectRatio() {
+        return minAspectRatio;
+    }
+
+    @Nullable
+    public String getRequestedVrComponent() {
+        return requestedVrComponent;
+    }
+
+    public int getRotationAnimation() {
+        return rotationAnimation;
+    }
+
+    public int getColorMode() {
+        return colorMode;
+    }
+
+    public boolean isPreferMinimalPostProcessing() {
+        return preferMinimalPostProcessing;
+    }
+
+    @Nullable
+    public ActivityInfo.WindowLayout getWindowLayout() {
+        return windowLayout;
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedActivityUtils.java b/core/java/android/content/pm/parsing/component/ParsedActivityUtils.java
new file mode 100644
index 0000000..555cdd0
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedActivityUtils.java
@@ -0,0 +1,484 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
+
+import static android.content.pm.parsing.component.ComponentParseUtils.flag;
+
+import android.annotation.NonNull;
+import android.app.ActivityTaskManager;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageParser;
+
+import android.content.pm.parsing.ParsingPackage;
+import android.content.pm.parsing.ParsingUtils;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.Slog;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.WindowManager;
+
+import com.android.internal.R;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.ArrayUtils;
+import android.content.pm.parsing.ParsingPackageUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Objects;
+
+/** @hide */
+public class ParsedActivityUtils {
+
+    private static final String TAG = ParsingPackageUtils.TAG;
+
+    @NonNull
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    public static ParseResult<ParsedActivity> parseActivityOrReceiver(String[] separateProcesses,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser, int flags,
+            boolean useRoundIcon, ParseInput input)
+            throws XmlPullParserException, IOException {
+        final String packageName = pkg.getPackageName();
+        final ParsedActivity
+                activity = new ParsedActivity();
+
+        boolean receiver = "receiver".equals(parser.getName());
+        String tag = "<" + parser.getName() + ">";
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestActivity);
+        try {
+            ParseResult<ParsedActivity> result =
+                    ParsedMainComponentUtils.parseMainComponent(
+                    activity, tag, separateProcesses,
+                    pkg, sa, flags, useRoundIcon, input,
+                    R.styleable.AndroidManifestActivity_banner,
+                    R.styleable.AndroidManifestActivity_description,
+                    R.styleable.AndroidManifestActivity_directBootAware,
+                    R.styleable.AndroidManifestActivity_enabled,
+                    R.styleable.AndroidManifestActivity_icon,
+                    R.styleable.AndroidManifestActivity_label,
+                    R.styleable.AndroidManifestActivity_logo,
+                    R.styleable.AndroidManifestActivity_name,
+                    R.styleable.AndroidManifestActivity_process,
+                    R.styleable.AndroidManifestActivity_roundIcon,
+                    R.styleable.AndroidManifestActivity_splitName);
+            if (result.isError()) {
+                return result;
+            }
+
+            if (receiver && pkg.isCantSaveState()) {
+                // A heavy-weight application can not have receivers in its main process
+                if (Objects.equals(activity.getProcessName(), packageName)) {
+                    return input.error("Heavy-weight applications can not have receivers "
+                            + "in main process");
+                }
+            }
+
+            // The following section has formatting off to make it easier to read the flags.
+            // Multi-lining them to fit within the column restriction makes it hard to tell what
+            // field is assigned where.
+            // @formatter:off
+            activity.theme = sa.getResourceId(R.styleable.AndroidManifestActivity_theme, 0);
+            activity.uiOptions = sa.getInt(R.styleable.AndroidManifestActivity_uiOptions, pkg.getUiOptions());
+
+            activity.flags |= flag(ActivityInfo.FLAG_ALLOW_TASK_REPARENTING, R.styleable.AndroidManifestActivity_allowTaskReparenting, pkg.isAllowTaskReparenting(), sa)
+                    | flag(ActivityInfo.FLAG_ALWAYS_RETAIN_TASK_STATE, R.styleable.AndroidManifestActivity_alwaysRetainTaskState, sa)
+                    | flag(ActivityInfo.FLAG_CLEAR_TASK_ON_LAUNCH, R.styleable.AndroidManifestActivity_clearTaskOnLaunch, sa)
+                    | flag(ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS, R.styleable.AndroidManifestActivity_excludeFromRecents, sa)
+                    | flag(ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS, R.styleable.AndroidManifestActivity_finishOnCloseSystemDialogs, sa)
+                    | flag(ActivityInfo.FLAG_FINISH_ON_TASK_LAUNCH, R.styleable.AndroidManifestActivity_finishOnTaskLaunch, sa)
+                    | flag(ActivityInfo.FLAG_IMMERSIVE, R.styleable.AndroidManifestActivity_immersive, sa)
+                    | flag(ActivityInfo.FLAG_MULTIPROCESS, R.styleable.AndroidManifestActivity_multiprocess, sa)
+                    | flag(ActivityInfo.FLAG_NO_HISTORY, R.styleable.AndroidManifestActivity_noHistory, sa)
+                    | flag(ActivityInfo.FLAG_SHOW_FOR_ALL_USERS, R.styleable.AndroidManifestActivity_showForAllUsers, sa)
+                    | flag(ActivityInfo.FLAG_SHOW_FOR_ALL_USERS, R.styleable.AndroidManifestActivity_showOnLockScreen, sa)
+                    | flag(ActivityInfo.FLAG_STATE_NOT_NEEDED, R.styleable.AndroidManifestActivity_stateNotNeeded, sa)
+                    | flag(ActivityInfo.FLAG_SYSTEM_USER_ONLY, R.styleable.AndroidManifestActivity_systemUserOnly, sa);
+
+            if (!receiver) {
+                activity.flags |= flag(ActivityInfo.FLAG_HARDWARE_ACCELERATED, R.styleable.AndroidManifestActivity_hardwareAccelerated, pkg.isBaseHardwareAccelerated(), sa)
+                        | flag(ActivityInfo.FLAG_ALLOW_EMBEDDED, R.styleable.AndroidManifestActivity_allowEmbedded, sa)
+                        | flag(ActivityInfo.FLAG_ALWAYS_FOCUSABLE, R.styleable.AndroidManifestActivity_alwaysFocusable, sa)
+                        | flag(ActivityInfo.FLAG_AUTO_REMOVE_FROM_RECENTS, R.styleable.AndroidManifestActivity_autoRemoveFromRecents, sa)
+                        | flag(ActivityInfo.FLAG_RELINQUISH_TASK_IDENTITY, R.styleable.AndroidManifestActivity_relinquishTaskIdentity, sa)
+                        | flag(ActivityInfo.FLAG_RESUME_WHILE_PAUSING, R.styleable.AndroidManifestActivity_resumeWhilePausing, sa)
+                        | flag(ActivityInfo.FLAG_SHOW_WHEN_LOCKED, R.styleable.AndroidManifestActivity_showWhenLocked, sa)
+                        | flag(ActivityInfo.FLAG_SUPPORTS_PICTURE_IN_PICTURE, R.styleable.AndroidManifestActivity_supportsPictureInPicture, sa)
+                        | flag(ActivityInfo.FLAG_TURN_SCREEN_ON, R.styleable.AndroidManifestActivity_turnScreenOn, sa);
+
+                activity.privateFlags |= flag(ActivityInfo.FLAG_INHERIT_SHOW_WHEN_LOCKED, R.styleable.AndroidManifestActivity_inheritShowWhenLocked, sa);
+
+                activity.colorMode = sa.getInt(R.styleable.AndroidManifestActivity_colorMode, ActivityInfo.COLOR_MODE_DEFAULT);
+                activity.preferMinimalPostProcessing = sa.getBoolean(R.styleable.AndroidManifestActivity_preferMinimalPostProcessing, ActivityInfo.MINIMAL_POST_PROCESSING_DEFAULT);
+                activity.documentLaunchMode = sa.getInt(R.styleable.AndroidManifestActivity_documentLaunchMode, ActivityInfo.DOCUMENT_LAUNCH_NONE);
+                activity.launchMode = sa.getInt(R.styleable.AndroidManifestActivity_launchMode, ActivityInfo.LAUNCH_MULTIPLE);
+                activity.lockTaskLaunchMode = sa.getInt(R.styleable.AndroidManifestActivity_lockTaskMode, 0);
+                activity.maxRecents = sa.getInt(R.styleable.AndroidManifestActivity_maxRecents, ActivityTaskManager.getDefaultAppRecentsLimitStatic());
+                activity.persistableMode = sa.getInteger(R.styleable.AndroidManifestActivity_persistableMode, ActivityInfo.PERSIST_ROOT_ONLY);
+                activity.requestedVrComponent = sa.getString(R.styleable.AndroidManifestActivity_enableVrMode);
+                activity.rotationAnimation = sa.getInt(R.styleable.AndroidManifestActivity_rotationAnimation, WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED);
+                activity.softInputMode = sa.getInt(R.styleable.AndroidManifestActivity_windowSoftInputMode, 0);
+
+                activity.configChanges = PackageParser.getActivityConfigChanges(
+                        sa.getInt(R.styleable.AndroidManifestActivity_configChanges, 0),
+                        sa.getInt(R.styleable.AndroidManifestActivity_recreateOnConfigChanges, 0));
+
+                int screenOrientation = sa.getInt(R.styleable.AndroidManifestActivity_screenOrientation, SCREEN_ORIENTATION_UNSPECIFIED);
+                int resizeMode = getActivityResizeMode(pkg, sa, screenOrientation);
+                activity.screenOrientation = screenOrientation;
+                activity.resizeMode = resizeMode;
+
+                if (sa.hasValue(R.styleable.AndroidManifestActivity_maxAspectRatio)
+                        && sa.getType(R.styleable.AndroidManifestActivity_maxAspectRatio)
+                        == TypedValue.TYPE_FLOAT) {
+                    activity.setMaxAspectRatio(resizeMode,
+                            sa.getFloat(R.styleable.AndroidManifestActivity_maxAspectRatio,
+                                    0 /*default*/));
+                }
+
+                if (sa.hasValue(R.styleable.AndroidManifestActivity_minAspectRatio)
+                        && sa.getType(R.styleable.AndroidManifestActivity_minAspectRatio)
+                        == TypedValue.TYPE_FLOAT) {
+                    activity.setMinAspectRatio(resizeMode,
+                            sa.getFloat(R.styleable.AndroidManifestActivity_minAspectRatio,
+                                    0 /*default*/));
+                }
+            } else {
+                activity.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
+                activity.configChanges = 0;
+                activity.flags |= flag(ActivityInfo.FLAG_SINGLE_USER, R.styleable.AndroidManifestActivity_singleUser, sa);
+            }
+            // @formatter:on
+
+            String taskAffinity = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestActivity_taskAffinity,
+                    Configuration.NATIVE_CONFIG_VERSION);
+
+            ParseResult<String> affinityNameResult = ComponentParseUtils.buildTaskAffinityName(
+                    packageName, pkg.getTaskAffinity(), taskAffinity, input);
+            if (affinityNameResult.isSuccess()) {
+                activity.taskAffinity = affinityNameResult.getResult();
+            } else {
+                // Backwards-compat, ignore error
+                affinityNameResult.ignoreError();
+            }
+
+            boolean visibleToEphemeral = sa.getBoolean(R.styleable.AndroidManifestActivity_visibleToInstantApps, false);
+            if (visibleToEphemeral) {
+                activity.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP;
+                pkg.setVisibleToInstantApps(true);
+            }
+
+            return parseActivityOrAlias(activity, pkg, tag, parser, res, sa, receiver,
+                    false /*isAlias*/, visibleToEphemeral, input,
+                    R.styleable.AndroidManifestActivity_parentActivityName,
+                    R.styleable.AndroidManifestActivity_permission,
+                    R.styleable.AndroidManifestActivity_exported
+            );
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    @NonNull
+    public static ParseResult<ParsedActivity> parseActivityAlias(ParsingPackage pkg, Resources res,
+            XmlResourceParser parser, boolean useRoundIcon, ParseInput input)
+            throws XmlPullParserException, IOException {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestActivityAlias);
+        try {
+            String targetActivity = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestActivityAlias_targetActivity,
+                    Configuration.NATIVE_CONFIG_VERSION);
+            if (targetActivity == null) {
+                return input.error("<activity-alias> does not specify android:targetActivity");
+            }
+
+            String packageName = pkg.getPackageName();
+            targetActivity = ParsingUtils.buildClassName(packageName, targetActivity);
+            if (targetActivity == null) {
+                return input.error("Empty class name in package " + packageName);
+            }
+
+            ParsedActivity target = null;
+
+            List<ParsedActivity> activities = pkg.getActivities();
+            final int activitiesSize = ArrayUtils.size(activities);
+            for (int i = 0; i < activitiesSize; i++) {
+                ParsedActivity t = activities.get(i);
+                if (targetActivity.equals(t.getName())) {
+                    target = t;
+                    break;
+                }
+            }
+
+            if (target == null) {
+                return input.error("<activity-alias> target activity " + targetActivity
+                        + " not found in manifest with activities = "
+                        + pkg.getActivities()
+                        + ", parsedActivities = " + activities);
+            }
+
+            ParsedActivity activity = ParsedActivity.makeAlias(targetActivity, target);
+            String tag = "<" + parser.getName() + ">";
+
+            ParseResult<ParsedActivity> result = ParsedMainComponentUtils.parseMainComponent(
+                    activity, tag, null, pkg, sa, 0, useRoundIcon, input,
+                    R.styleable.AndroidManifestActivityAlias_banner,
+                    R.styleable.AndroidManifestActivityAlias_description,
+                    null /*directBootAwareAttr*/,
+                    R.styleable.AndroidManifestActivityAlias_enabled,
+                    R.styleable.AndroidManifestActivityAlias_icon,
+                    R.styleable.AndroidManifestActivityAlias_label,
+                    R.styleable.AndroidManifestActivityAlias_logo,
+                    R.styleable.AndroidManifestActivityAlias_name,
+                    null /*processAttr*/,
+                    R.styleable.AndroidManifestActivityAlias_roundIcon,
+                    null /*splitNameAttr*/);
+            if (result.isError()) {
+                return result;
+            }
+
+            // TODO add visibleToInstantApps attribute to activity alias
+            final boolean visibleToEphemeral =
+                    ((activity.getFlags() & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0);
+
+            return parseActivityOrAlias(activity, pkg, tag, parser, res, sa, false /*isReceiver*/, true /*isAlias*/,
+                    visibleToEphemeral, input,
+                    R.styleable.AndroidManifestActivityAlias_parentActivityName,
+                    R.styleable.AndroidManifestActivityAlias_permission,
+                    R.styleable.AndroidManifestActivityAlias_exported);
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    /**
+     * This method shares parsing logic between Activity/Receiver/alias instances, but requires
+     * passing in booleans for isReceiver/isAlias, since there's no indicator in the other
+     * parameters.
+     *
+     * They're used to filter the parsed tags and their behavior. This makes the method rather
+     * messy, but it's more maintainable than writing 3 separate methods for essentially the same
+     * type of logic.
+     */
+    @NonNull
+    private static ParseResult<ParsedActivity> parseActivityOrAlias(ParsedActivity activity,
+            ParsingPackage pkg, String tag, XmlResourceParser parser, Resources resources,
+            TypedArray array, boolean isReceiver, boolean isAlias, boolean visibleToEphemeral,
+            ParseInput input, int parentActivityNameAttr, int permissionAttr,
+            int exportedAttr) throws IOException, XmlPullParserException {
+        String parentActivityName = array.getNonConfigurationString(parentActivityNameAttr, Configuration.NATIVE_CONFIG_VERSION);
+        if (parentActivityName != null) {
+            String packageName = pkg.getPackageName();
+            String parentClassName = ParsingUtils.buildClassName(packageName, parentActivityName);
+            if (parentClassName == null) {
+                Log.e(TAG, "Activity " + activity.getName()
+                        + " specified invalid parentActivityName " + parentActivityName);
+            } else {
+                activity.setParentActivity(parentClassName);
+            }
+        }
+
+        String permission = array.getNonConfigurationString(permissionAttr, 0);
+        activity.setPermission(permission != null ? permission : pkg.getPermission());
+
+        final boolean setExported = array.hasValue(exportedAttr);
+        if (setExported) {
+            activity.exported = array.getBoolean(exportedAttr, false);
+        }
+
+        final int depth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG
+                || parser.getDepth() > depth)) {
+            if (type != XmlPullParser.START_TAG) {
+                continue;
+            }
+
+            final ParseResult result;
+            if (parser.getName().equals("intent-filter")) {
+                ParseResult<ParsedIntentInfo> intentResult = parseIntentFilter(pkg, activity,
+                        !isReceiver, visibleToEphemeral, resources, parser, input);
+                if (intentResult.isSuccess()) {
+                    ParsedIntentInfo intent = intentResult.getResult();
+                    if (intent != null) {
+                        activity.order = Math.max(intent.getOrder(), activity.order);
+                        activity.addIntent(intent);
+                        if (PackageParser.LOG_UNSAFE_BROADCASTS && isReceiver
+                                && pkg.getTargetSdkVersion() >= Build.VERSION_CODES.O) {
+                            int actionCount = intent.countActions();
+                            for (int i = 0; i < actionCount; i++) {
+                                final String action = intent.getAction(i);
+                                if (action == null || !action.startsWith("android.")) {
+                                    continue;
+                                }
+
+                                if (!PackageParser.SAFE_BROADCASTS.contains(action)) {
+                                    Slog.w(TAG,
+                                            "Broadcast " + action + " may never be delivered to "
+                                                    + pkg.getPackageName() + " as requested at: "
+                                                    + parser.getPositionDescription());
+                                }
+                            }
+                        }
+                    }
+                }
+                result = intentResult;
+            } else if (parser.getName().equals("meta-data")) {
+                result = ParsedComponentUtils.addMetaData(activity, pkg, resources, parser, input);
+            } else if (!isReceiver && !isAlias && parser.getName().equals("preferred")) {
+                ParseResult<ParsedIntentInfo> intentResult = parseIntentFilter(pkg, activity,
+                        true /*allowImplicitEphemeralVisibility*/, visibleToEphemeral,
+                        resources, parser, input);
+                if (intentResult.isSuccess()) {
+                    ParsedIntentInfo intent = intentResult.getResult();
+                    if (intent != null) {
+                        pkg.addPreferredActivityFilter(activity.getClassName(), intent);
+                    }
+                }
+                result = intentResult;
+            } else if (!isReceiver && !isAlias && parser.getName().equals("layout")) {
+                ParseResult<ActivityInfo.WindowLayout> layoutResult = parseLayout(resources, parser,
+                        input);
+                if (layoutResult.isSuccess()) {
+                    activity.windowLayout = layoutResult.getResult();
+                }
+                result = layoutResult;
+            } else {
+                result = ParsingUtils.unknownTag(tag, pkg, parser, input);
+            }
+
+            if (result.isError()) {
+                return input.error(result);
+            }
+        }
+
+        if (!setExported) {
+            activity.exported = activity.getIntents().size() > 0;
+        }
+
+        return input.success(activity);
+    }
+
+    @NonNull
+    private static ParseResult<ParsedIntentInfo> parseIntentFilter(ParsingPackage pkg,
+            ParsedActivity activity, boolean allowImplicitEphemeralVisibility,
+            boolean visibleToEphemeral, Resources resources, XmlResourceParser parser,
+            ParseInput input) throws IOException, XmlPullParserException {
+        ParseResult<ParsedIntentInfo> result = ParsedMainComponentUtils.parseIntentFilter(activity,
+                pkg, resources, parser, visibleToEphemeral, true /*allowGlobs*/,
+                true /*allowAutoVerify*/, allowImplicitEphemeralVisibility,
+                true /*failOnNoActions*/, input);
+        if (result.isError()) {
+            return input.error(result);
+        }
+
+        ParsedIntentInfo intent = result.getResult();
+        if (intent != null) {
+            if (intent.isVisibleToInstantApp()) {
+                activity.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP;
+            }
+            if (intent.isImplicitlyVisibleToInstantApp()) {
+                activity.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP;
+            }
+        }
+
+        return input.success(intent);
+    }
+
+    private static int getActivityResizeMode(ParsingPackage pkg, TypedArray sa,
+            int screenOrientation) {
+        Boolean resizeableActivity = pkg.getResizeableActivity();
+
+        if (sa.hasValue(R.styleable.AndroidManifestActivity_resizeableActivity)
+                || resizeableActivity != null) {
+            // Activity or app explicitly set if it is resizeable or not;
+            if (sa.getBoolean(R.styleable.AndroidManifestActivity_resizeableActivity,
+                    resizeableActivity != null && resizeableActivity)) {
+                return ActivityInfo.RESIZE_MODE_RESIZEABLE;
+            } else {
+                return ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
+            }
+        }
+
+        if (pkg.isResizeableActivityViaSdkVersion()) {
+            // The activity or app didn't explicitly set the resizing option, however we want to
+            // make it resize due to the sdk version it is targeting.
+            return ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
+        }
+
+        // resize preference isn't set and target sdk version doesn't support resizing apps by
+        // default. For the app to be resizeable if it isn't fixed orientation or immersive.
+        if (ActivityInfo.isFixedOrientationPortrait(screenOrientation)) {
+            return ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PORTRAIT_ONLY;
+        } else if (ActivityInfo.isFixedOrientationLandscape(screenOrientation)) {
+            return ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_LANDSCAPE_ONLY;
+        } else if (screenOrientation == ActivityInfo.SCREEN_ORIENTATION_LOCKED) {
+            return ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PRESERVE_ORIENTATION;
+        } else {
+            return ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE;
+        }
+    }
+
+    @NonNull
+    private static ParseResult<ActivityInfo.WindowLayout> parseLayout(Resources res,
+            AttributeSet attrs, ParseInput input) {
+        TypedArray sw = res.obtainAttributes(attrs, R.styleable.AndroidManifestLayout);
+        try {
+            int width = -1;
+            float widthFraction = -1f;
+            int height = -1;
+            float heightFraction = -1f;
+            final int widthType = sw.getType(R.styleable.AndroidManifestLayout_defaultWidth);
+            if (widthType == TypedValue.TYPE_FRACTION) {
+                widthFraction = sw.getFraction(R.styleable.AndroidManifestLayout_defaultWidth, 1, 1,
+                        -1);
+            } else if (widthType == TypedValue.TYPE_DIMENSION) {
+                width = sw.getDimensionPixelSize(R.styleable.AndroidManifestLayout_defaultWidth,
+                        -1);
+            }
+            final int heightType = sw.getType(R.styleable.AndroidManifestLayout_defaultHeight);
+            if (heightType == TypedValue.TYPE_FRACTION) {
+                heightFraction = sw.getFraction(R.styleable.AndroidManifestLayout_defaultHeight, 1,
+                        1, -1);
+            } else if (heightType == TypedValue.TYPE_DIMENSION) {
+                height = sw.getDimensionPixelSize(R.styleable.AndroidManifestLayout_defaultHeight,
+                        -1);
+            }
+            int gravity = sw.getInt(R.styleable.AndroidManifestLayout_gravity, Gravity.CENTER);
+            int minWidth = sw.getDimensionPixelSize(R.styleable.AndroidManifestLayout_minWidth, -1);
+            int minHeight = sw.getDimensionPixelSize(R.styleable.AndroidManifestLayout_minHeight,
+                    -1);
+            return input.success(new ActivityInfo.WindowLayout(width, widthFraction, height,
+                    heightFraction, gravity, minWidth, minHeight));
+        } finally {
+            sw.recycle();
+        }
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedComponent.java b/core/java/android/content/pm/parsing/component/ParsedComponent.java
new file mode 100644
index 0000000..098d620
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedComponent.java
@@ -0,0 +1,208 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import static android.content.pm.parsing.ParsingPackageImpl.sForString;
+
+import android.annotation.CallSuper;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.ComponentName;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+
+import com.android.internal.util.CollectionUtils;
+import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/** @hide */
+public abstract class ParsedComponent implements Parcelable {
+
+    private static ParsedIntentInfo.ListParceler sForIntentInfos = Parcelling.Cache.getOrCreate(
+            ParsedIntentInfo.ListParceler.class);
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String name;
+    int icon;
+    int labelRes;
+    @Nullable
+    CharSequence nonLocalizedLabel;
+    int logo;
+    int banner;
+    int descriptionRes;
+
+    // TODO(b/135203078): Replace flags with individual booleans, scoped by subclass
+    int flags;
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String packageName;
+
+    @Nullable
+    @DataClass.PluralOf("intent")
+    @DataClass.ParcelWith(ParsedIntentInfo.ListParceler.class)
+    private List<ParsedIntentInfo> intents;
+
+    private ComponentName componentName;
+
+    @Nullable
+    protected Bundle metaData;
+
+    ParsedComponent() {
+
+    }
+
+    @SuppressWarnings("IncompleteCopyConstructor")
+    public ParsedComponent(ParsedComponent other) {
+        this.metaData = other.metaData;
+        this.name = other.name;
+        this.icon = other.getIcon();
+        this.labelRes = other.getLabelRes();
+        this.nonLocalizedLabel = other.getNonLocalizedLabel();
+        this.logo = other.getLogo();
+        this.banner = other.getBanner();
+
+        this.descriptionRes = other.getDescriptionRes();
+
+        this.flags = other.getFlags();
+
+        this.setPackageName(other.packageName);
+        this.intents = new ArrayList<>(other.getIntents());
+    }
+
+    public void addIntent(ParsedIntentInfo intent) {
+        this.intents = CollectionUtils.add(this.intents, intent);
+    }
+
+    @NonNull
+    public List<ParsedIntentInfo> getIntents() {
+        return intents != null ? intents : Collections.emptyList();
+    }
+
+    public ParsedComponent setName(String name) {
+        this.name = TextUtils.safeIntern(name);
+        return this;
+    }
+
+    @CallSuper
+    public void setPackageName(@NonNull String packageName) {
+        this.packageName = TextUtils.safeIntern(packageName);
+        //noinspection ConstantConditions
+        this.componentName = null;
+
+        // Note: this method does not edit name (which can point to a class), because this package
+        // name change is not changing the package in code, but the identifier used by the system.
+    }
+
+    @NonNull
+    public ComponentName getComponentName() {
+        if (componentName == null) {
+            componentName = new ComponentName(getPackageName(), getName());
+        }
+        return componentName;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        sForString.parcel(this.name, dest, flags);
+        dest.writeInt(this.getIcon());
+        dest.writeInt(this.getLabelRes());
+        dest.writeCharSequence(this.getNonLocalizedLabel());
+        dest.writeInt(this.getLogo());
+        dest.writeInt(this.getBanner());
+        dest.writeInt(this.getDescriptionRes());
+        dest.writeInt(this.getFlags());
+        sForString.parcel(this.packageName, dest, flags);
+        sForIntentInfos.parcel(this.getIntents(), dest, flags);
+        dest.writeBundle(this.metaData);
+    }
+
+    protected ParsedComponent(Parcel in) {
+        // We use the boot classloader for all classes that we load.
+        final ClassLoader boot = Object.class.getClassLoader();
+        //noinspection ConstantConditions
+        this.name = sForString.unparcel(in);
+        this.icon = in.readInt();
+        this.labelRes = in.readInt();
+        this.nonLocalizedLabel = in.readCharSequence();
+        this.logo = in.readInt();
+        this.banner = in.readInt();
+        this.descriptionRes = in.readInt();
+        this.flags = in.readInt();
+        //noinspection ConstantConditions
+        this.packageName = sForString.unparcel(in);
+        this.intents = sForIntentInfos.unparcel(in);
+        this.metaData = in.readBundle(boot);
+    }
+
+    @NonNull
+    public String getName() {
+        return name;
+    }
+
+    public int getIcon() {
+        return icon;
+    }
+
+    public int getLabelRes() {
+        return labelRes;
+    }
+
+    @Nullable
+    public CharSequence getNonLocalizedLabel() {
+        return nonLocalizedLabel;
+    }
+
+    public int getLogo() {
+        return logo;
+    }
+
+    public int getBanner() {
+        return banner;
+    }
+
+    public int getDescriptionRes() {
+        return descriptionRes;
+    }
+
+    public int getFlags() {
+        return flags;
+    }
+
+    @NonNull
+    public String getPackageName() {
+        return packageName;
+    }
+
+    @Nullable
+    public Bundle getMetaData() {
+        return metaData;
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedComponentUtils.java b/core/java/android/content/pm/parsing/component/ParsedComponentUtils.java
new file mode 100644
index 0000000..b37b617
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedComponentUtils.java
@@ -0,0 +1,100 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.PackageManager;
+import android.content.pm.parsing.ParsingPackage;
+import android.content.pm.parsing.ParsingUtils;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.TypedValue;
+
+import com.android.internal.annotations.VisibleForTesting;
+import android.content.pm.parsing.ParsingPackageUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+
+/** @hide */
+class ParsedComponentUtils {
+
+    private static final String TAG = ParsingPackageUtils.TAG;
+
+    @NonNull
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    static <Component extends ParsedComponent> ParseResult<Component> parseComponent(
+            Component component, String tag, ParsingPackage pkg, TypedArray array,
+            boolean useRoundIcon, ParseInput input, int bannerAttr,
+            @Nullable Integer descriptionAttr, int iconAttr, int labelAttr, int logoAttr,
+            int nameAttr, int roundIconAttr) {
+        String name = array.getNonConfigurationString(nameAttr, 0);
+        if (TextUtils.isEmpty(name)) {
+            return input.error(tag + " does not specify android:name");
+        }
+
+        String packageName = pkg.getPackageName();
+        String className = ParsingUtils.buildClassName(packageName, name);
+        if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(className)) {
+            return input.error(tag + " invalid android:name");
+        }
+
+        //noinspection ConstantConditions; null check done above with isEmpty
+        component.setName(className);
+        component.setPackageName(packageName);
+
+        if (useRoundIcon) {
+            component.icon = array.getResourceId(roundIconAttr, 0);
+        }
+
+        if (component.icon == 0) {
+            component.icon = array.getResourceId(iconAttr, 0);
+        }
+
+        component.logo = array.getResourceId(logoAttr, 0);
+        component.banner = array.getResourceId(bannerAttr, 0);
+
+        if (descriptionAttr != null) {
+            component.descriptionRes = array.getResourceId(descriptionAttr, 0);
+        }
+
+        TypedValue v = array.peekValue(labelAttr);
+        if (v != null) {
+            component.labelRes = v.resourceId;
+            if (v.resourceId == 0) {
+                component.nonLocalizedLabel = v.coerceToString();
+            }
+        }
+
+        return input.success(component);
+    }
+
+    static ParseResult<Bundle> addMetaData(ParsedComponent component, ParsingPackage pkg,
+            Resources resources, XmlResourceParser parser, ParseInput input) {
+        ParseResult<Bundle> result = ParsingPackageUtils.parseMetaData(pkg, resources,
+                parser, component.metaData, input);
+        if (result.isError()) {
+            return input.error(result);
+        }
+        Bundle bundle = result.getResult();
+        component.metaData = bundle;
+        return input.success(bundle);
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedFeature.java b/core/java/android/content/pm/parsing/component/ParsedFeature.java
new file mode 100644
index 0000000..b8a9098
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedFeature.java
@@ -0,0 +1,229 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.StringRes;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.ArraySet;
+
+import com.android.internal.util.DataClass;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A {@link android.R.styleable#AndroidManifestFeature &lt;feature&gt;} tag parsed from the
+ * manifest.
+ *
+ * @hide
+ */
+@DataClass(genAidl = false)
+public class ParsedFeature implements Parcelable {
+    /** Maximum length of featureId */
+    public static final int MAX_FEATURE_ID_LEN = 50;
+
+    /** Maximum amount of features per package */
+    private static final int MAX_NUM_FEATURES = 1000;
+
+    /** Id of the feature */
+    public final @NonNull String id;
+
+    /** User visible label fo the feature */
+    public final @StringRes int label;
+
+    /** Ids of previously declared features this feature inherits from */
+    public final @NonNull List<String> inheritFrom;
+
+    /**
+     * @return Is this set of features a valid combination for a single package?
+     */
+    public static boolean isCombinationValid(@Nullable List<ParsedFeature> features) {
+        if (features == null) {
+            return true;
+        }
+
+        ArraySet<String> featureIds = new ArraySet<>(features.size());
+        ArraySet<String> inheritFromFeatureIds = new ArraySet<>();
+
+        int numFeatures = features.size();
+        if (numFeatures > MAX_NUM_FEATURES) {
+            return false;
+        }
+
+        for (int featureNum = 0; featureNum < numFeatures; featureNum++) {
+            boolean wasAdded = featureIds.add(features.get(featureNum).id);
+            if (!wasAdded) {
+                // feature id is not unique
+                return false;
+            }
+        }
+
+        for (int featureNum = 0; featureNum < numFeatures; featureNum++) {
+            ParsedFeature feature = features.get(featureNum);
+
+            int numInheritFrom = feature.inheritFrom.size();
+            for (int inheritFromNum = 0; inheritFromNum < numInheritFrom; inheritFromNum++) {
+                String inheritFrom = feature.inheritFrom.get(inheritFromNum);
+
+                if (featureIds.contains(inheritFrom)) {
+                    // Cannot inherit from a feature that is still defined
+                    return false;
+                }
+
+                boolean wasAdded = inheritFromFeatureIds.add(inheritFrom);
+                if (!wasAdded) {
+                    // inheritFrom is not unique
+                    return false;
+                }
+            }
+        }
+
+        return true;
+    }
+
+
+
+    // Code below generated by codegen v1.0.14.
+    //
+    // DO NOT MODIFY!
+    // CHECKSTYLE:OFF Generated code
+    //
+    // To regenerate run:
+    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/content/pm/parsing/component/ParsedFeature.java
+    //
+    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+    //   Settings > Editor > Code Style > Formatter Control
+    //@formatter:off
+
+
+    @android.annotation.IntDef(prefix = "MAX_", value = {
+        MAX_FEATURE_ID_LEN,
+        MAX_NUM_FEATURES
+    })
+    @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE)
+    @DataClass.Generated.Member
+    public @interface Max {}
+
+    @DataClass.Generated.Member
+    public static String maxToString(@Max int value) {
+        switch (value) {
+            case MAX_FEATURE_ID_LEN:
+                    return "MAX_FEATURE_ID_LEN";
+            case MAX_NUM_FEATURES:
+                    return "MAX_NUM_FEATURES";
+            default: return Integer.toHexString(value);
+        }
+    }
+
+    /**
+     * Creates a new ParsedFeature.
+     *
+     * @param id
+     *   Id of the feature
+     * @param label
+     *   User visible label fo the feature
+     * @param inheritFrom
+     *   Ids of previously declared features this feature inherits from
+     */
+    @DataClass.Generated.Member
+    public ParsedFeature(
+            @NonNull String id,
+            @StringRes int label,
+            @NonNull List<String> inheritFrom) {
+        this.id = id;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, id);
+        this.label = label;
+        com.android.internal.util.AnnotationValidations.validate(
+                StringRes.class, null, label);
+        this.inheritFrom = inheritFrom;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, inheritFrom);
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        // You can override field parcelling by defining methods like:
+        // void parcelFieldName(Parcel dest, int flags) { ... }
+
+        dest.writeString(id);
+        dest.writeInt(label);
+        dest.writeStringList(inheritFrom);
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public int describeContents() { return 0; }
+
+    /** @hide */
+    @SuppressWarnings({"unchecked", "RedundantCast"})
+    @DataClass.Generated.Member
+    protected ParsedFeature(@NonNull Parcel in) {
+        // You can override field unparcelling by defining methods like:
+        // static FieldType unparcelFieldName(Parcel in) { ... }
+
+        String _id = in.readString();
+        int _label = in.readInt();
+        List<String> _inheritFrom = new ArrayList<>();
+        in.readStringList(_inheritFrom);
+
+        this.id = _id;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, id);
+        this.label = _label;
+        com.android.internal.util.AnnotationValidations.validate(
+                StringRes.class, null, label);
+        this.inheritFrom = _inheritFrom;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, inheritFrom);
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    @DataClass.Generated.Member
+    public static final @NonNull Parcelable.Creator<ParsedFeature> CREATOR
+            = new Parcelable.Creator<ParsedFeature>() {
+        @Override
+        public ParsedFeature[] newArray(int size) {
+            return new ParsedFeature[size];
+        }
+
+        @Override
+        public ParsedFeature createFromParcel(@NonNull Parcel in) {
+            return new ParsedFeature(in);
+        }
+    };
+
+    @DataClass.Generated(
+            time = 1581379861853L,
+            codegenVersion = "1.0.14",
+            sourceFile = "frameworks/base/core/java/android/content/pm/parsing/component/ParsedFeature.java",
+            inputSignatures = "public static final  int MAX_FEATURE_ID_LEN\nprivate static final  int MAX_NUM_FEATURES\npublic final @android.annotation.NonNull java.lang.String id\npublic final @android.annotation.StringRes int label\npublic final @android.annotation.NonNull java.util.List<java.lang.String> inheritFrom\npublic static  boolean isCombinationValid(java.util.List<android.content.pm.parsing.component.ParsedFeature>)\nclass ParsedFeature extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genAidl=false)")
+    @Deprecated
+    private void __metadata() {}
+
+
+    //@formatter:on
+    // End of generated code
+
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedFeatureUtils.java b/core/java/android/content/pm/parsing/component/ParsedFeatureUtils.java
new file mode 100644
index 0000000..fb52801
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedFeatureUtils.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content.pm.parsing.component;
+
+import android.annotation.NonNull;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+
+import com.android.internal.R;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/** @hide */
+public class ParsedFeatureUtils {
+
+    @NonNull
+    public static ParseResult<ParsedFeature> parseFeature(Resources res, XmlResourceParser parser,
+            ParseInput input) throws IOException, XmlPullParserException {
+        String featureId;
+        int label;
+        List<String> inheritFrom = null;
+
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestFeature);
+        if (sa == null) {
+            return input.error("<feature> could not be parsed");
+        }
+
+        try {
+            featureId = sa.getNonConfigurationString(R.styleable.AndroidManifestFeature_featureId,
+                    0);
+            if (featureId == null) {
+                return input.error("<featureId> does not specify android:featureId");
+            }
+            if (featureId.length() > ParsedFeature.MAX_FEATURE_ID_LEN) {
+                return input.error("<featureId> is too long. Max length is "
+                        + ParsedFeature.MAX_FEATURE_ID_LEN);
+            }
+
+            label = sa.getResourceId(R.styleable.AndroidManifestFeature_label, 0);
+            if (label == Resources.ID_NULL) {
+                return input.error("<featureId> does not specify android:label");
+            }
+        } finally {
+            sa.recycle();
+        }
+
+        int type;
+        final int innerDepth = parser.getDepth();
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+
+            String tagName = parser.getName();
+            if (tagName.equals("inherit-from")) {
+                sa = res.obtainAttributes(parser, R.styleable.AndroidManifestFeatureInheritFrom);
+                if (sa == null) {
+                    return input.error("<inherit-from> could not be parsed");
+                }
+
+                try {
+                    String inheritFromId = sa.getNonConfigurationString(
+                            R.styleable.AndroidManifestFeatureInheritFrom_featureId,0);
+
+                    if (inheritFrom == null) {
+                        inheritFrom = new ArrayList<>();
+                    }
+                    inheritFrom.add(inheritFromId);
+                } finally {
+                    sa.recycle();
+                }
+            } else {
+                return input.error("Bad element under <feature>: " + tagName);
+            }
+        }
+
+        if (inheritFrom == null) {
+            inheritFrom = Collections.emptyList();
+        } else {
+            ((ArrayList) inheritFrom).trimToSize();
+        }
+
+        return input.success(new ParsedFeature(featureId, label, inheritFrom));
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedInstrumentation.java b/core/java/android/content/pm/parsing/component/ParsedInstrumentation.java
new file mode 100644
index 0000000..396a145
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedInstrumentation.java
@@ -0,0 +1,116 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import static android.content.pm.parsing.ParsingPackageImpl.sForString;
+
+import android.annotation.Nullable;
+import android.content.ComponentName;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+
+import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;
+
+/** @hide */
+public class ParsedInstrumentation extends ParsedComponent {
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String targetPackage;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String targetProcesses;
+    boolean handleProfiling;
+    boolean functionalTest;
+
+    public ParsedInstrumentation() {
+    }
+
+    public void setTargetPackage(@Nullable String targetPackage) {
+        this.targetPackage = TextUtils.safeIntern(targetPackage);
+    }
+
+    public void setTargetProcesses(@Nullable String targetProcesses) {
+        this.targetProcesses = TextUtils.safeIntern(targetProcesses);
+    }
+
+    public String toString() {
+        StringBuilder sb = new StringBuilder(128);
+        sb.append("Instrumentation{");
+        sb.append(Integer.toHexString(System.identityHashCode(this)));
+        sb.append(' ');
+        ComponentName.appendShortString(sb, getPackageName(), getName());
+        sb.append('}');
+        return sb.toString();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        super.writeToParcel(dest, flags);
+        sForString.parcel(this.targetPackage, dest, flags);
+        sForString.parcel(this.targetProcesses, dest, flags);
+        dest.writeBoolean(this.handleProfiling);
+        dest.writeBoolean(this.functionalTest);
+    }
+
+    protected ParsedInstrumentation(Parcel in) {
+        super(in);
+        this.targetPackage = sForString.unparcel(in);
+        this.targetProcesses = sForString.unparcel(in);
+        this.handleProfiling = in.readByte() != 0;
+        this.functionalTest = in.readByte() != 0;
+    }
+
+    public static final Parcelable.Creator<ParsedInstrumentation> CREATOR =
+            new Parcelable.Creator<ParsedInstrumentation>() {
+                @Override
+                public ParsedInstrumentation createFromParcel(Parcel source) {
+                    return new ParsedInstrumentation(source);
+                }
+
+                @Override
+                public ParsedInstrumentation[] newArray(int size) {
+                    return new ParsedInstrumentation[size];
+                }
+            };
+
+    @Nullable
+    public String getTargetPackage() {
+        return targetPackage;
+    }
+
+    @Nullable
+    public String getTargetProcesses() {
+        return targetProcesses;
+    }
+
+    public boolean isHandleProfiling() {
+        return handleProfiling;
+    }
+
+    public boolean isFunctionalTest() {
+        return functionalTest;
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedInstrumentationUtils.java b/core/java/android/content/pm/parsing/component/ParsedInstrumentationUtils.java
new file mode 100644
index 0000000..89645fc
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedInstrumentationUtils.java
@@ -0,0 +1,74 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import android.annotation.NonNull;
+import android.content.pm.parsing.ParsingPackage;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+
+import com.android.internal.R;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/** @hide */
+public class ParsedInstrumentationUtils {
+
+    @NonNull
+    public static ParseResult<ParsedInstrumentation> parseInstrumentation(ParsingPackage pkg,
+            Resources res, XmlResourceParser parser, boolean useRoundIcon,
+            ParseInput input) throws IOException, XmlPullParserException {
+        ParsedInstrumentation
+                instrumentation = new ParsedInstrumentation();
+        String tag = "<" + parser.getName() + ">";
+
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestInstrumentation);
+        try {
+            ParseResult<ParsedInstrumentation> result = ParsedComponentUtils.parseComponent(
+                    instrumentation, tag, pkg, sa, useRoundIcon, input,
+                    R.styleable.AndroidManifestInstrumentation_banner,
+                    null /*descriptionAttr*/,
+                    R.styleable.AndroidManifestInstrumentation_icon,
+                    R.styleable.AndroidManifestInstrumentation_label,
+                    R.styleable.AndroidManifestInstrumentation_logo,
+                    R.styleable.AndroidManifestInstrumentation_name,
+                    R.styleable.AndroidManifestInstrumentation_roundIcon);
+            if (result.isError()) {
+                return result;
+            }
+
+            // @formatter:off
+            // Note: don't allow this value to be a reference to a resource
+            // that may change.
+            instrumentation.setTargetPackage(sa.getNonResourceString(R.styleable.AndroidManifestInstrumentation_targetPackage));
+            instrumentation.setTargetProcesses(sa.getNonResourceString(R.styleable.AndroidManifestInstrumentation_targetProcesses));
+            instrumentation.handleProfiling = sa.getBoolean(R.styleable.AndroidManifestInstrumentation_handleProfiling, false);
+            instrumentation.functionalTest = sa.getBoolean(R.styleable.AndroidManifestInstrumentation_functionalTest, false);
+            // @formatter:on
+        } finally {
+            sa.recycle();
+        }
+
+        return ComponentParseUtils.parseAllMetaData(pkg, res, parser, tag, instrumentation,
+                input);
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java b/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java
new file mode 100644
index 0000000..0ba92cc
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java
@@ -0,0 +1,200 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import android.annotation.Nullable;
+import android.content.IntentFilter;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Pair;
+
+import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/** @hide **/
+public final class ParsedIntentInfo extends IntentFilter {
+
+    public static final Parceler PARCELER = new Parceler();
+
+    public static class Parceler implements Parcelling<ParsedIntentInfo> {
+
+        @Override
+        public void parcel(ParsedIntentInfo item, Parcel dest, int parcelFlags) {
+            item.writeIntentInfoToParcel(dest, parcelFlags);
+        }
+
+        @Override
+        public ParsedIntentInfo unparcel(Parcel source) {
+            return new ParsedIntentInfo(source);
+        }
+    }
+
+    public static class ListParceler implements Parcelling<List<ParsedIntentInfo>> {
+
+        /**
+         * <p>
+         * Implementation note: The serialized form for the intent list also contains the name
+         * of the concrete class that's stored in the list, and assumes that every element of the
+         * list is of the same type. This is very similar to the original parcelable mechanism.
+         * We cannot use that directly because IntentInfo extends IntentFilter, which is parcelable
+         * and is public API. It also declares Parcelable related methods as final which means
+         * we can't extend them. The approach of using composition instead of inheritance leads to
+         * a large set of cascading changes in the PackageManagerService, which seem undesirable.
+         *
+         * <p>
+         * <b>WARNING: </b> The list of objects returned by this function might need to be fixed up
+         * to make sure their owner fields are consistent. See {@code fixupOwner}.
+         */
+        @Override
+        public void parcel(List<ParsedIntentInfo> item, Parcel dest, int parcelFlags) {
+            if (item == null) {
+                dest.writeInt(-1);
+                return;
+            }
+
+            final int size = item.size();
+            dest.writeInt(size);
+
+            for (int index = 0; index < size; index++) {
+                PARCELER.parcel(item.get(index), dest, parcelFlags);
+            }
+        }
+
+        @Override
+        public List<ParsedIntentInfo> unparcel(Parcel source) {
+            int size = source.readInt();
+            if (size == -1) {
+                return null;
+            }
+
+            if (size == 0) {
+                return new ArrayList<>(0);
+            }
+
+            final ArrayList<ParsedIntentInfo> intentsList = new ArrayList<>(size);
+            for (int i = 0; i < size; ++i) {
+                intentsList.add(PARCELER.unparcel(source));
+            }
+
+            return intentsList;
+        }
+    }
+
+    public static class StringPairListParceler implements Parcelling<List<Pair<String, ParsedIntentInfo>>> {
+
+        @Override
+        public void parcel(List<Pair<String, ParsedIntentInfo>> item, Parcel dest,
+                int parcelFlags) {
+            if (item == null) {
+                dest.writeInt(-1);
+                return;
+            }
+
+            final int size = item.size();
+            dest.writeInt(size);
+
+            for (int index = 0; index < size; index++) {
+                Pair<String, ParsedIntentInfo> pair = item.get(index);
+                dest.writeString(pair.first);
+                PARCELER.parcel(pair.second, dest, parcelFlags);
+            }
+        }
+
+        @Override
+        public List<Pair<String, ParsedIntentInfo>> unparcel(Parcel source) {
+            int size = source.readInt();
+            if (size == -1) {
+                return null;
+            }
+
+            if (size == 0) {
+                return new ArrayList<>(0);
+            }
+
+            final List<Pair<String, ParsedIntentInfo>> list = new ArrayList<>(size);
+            for (int i = 0; i < size; ++i) {
+                list.add(Pair.create(source.readString(), PARCELER.unparcel(source)));
+            }
+
+            return list;
+        }
+    }
+
+    boolean hasDefault;
+    int labelRes;
+    @Nullable
+    CharSequence nonLocalizedLabel;
+    int icon;
+
+    public ParsedIntentInfo() {
+    }
+
+    public ParsedIntentInfo(Parcel in) {
+        super(in);
+        hasDefault = in.readBoolean();
+        labelRes = in.readInt();
+        nonLocalizedLabel = in.readCharSequence();
+        icon = in.readInt();
+    }
+
+    public void writeIntentInfoToParcel(Parcel dest, int flags) {
+        super.writeToParcel(dest, flags);
+        dest.writeBoolean(hasDefault);
+        dest.writeInt(labelRes);
+        dest.writeCharSequence(nonLocalizedLabel);
+        dest.writeInt(icon);
+    }
+
+    public String toString() {
+        return "ProviderIntentInfo{"
+                + Integer.toHexString(System.identityHashCode(this))
+                + '}';
+    }
+
+    public static final Parcelable.Creator<ParsedIntentInfo> CREATOR =
+            new Parcelable.Creator<ParsedIntentInfo>() {
+                @Override
+                public ParsedIntentInfo createFromParcel(Parcel source) {
+                    return new ParsedIntentInfo(source);
+                }
+
+                @Override
+                public ParsedIntentInfo[] newArray(int size) {
+                    return new ParsedIntentInfo[size];
+                }
+            };
+
+    public boolean isHasDefault() {
+        return hasDefault;
+    }
+
+    public int getLabelRes() {
+        return labelRes;
+    }
+
+    @Nullable
+    public CharSequence getNonLocalizedLabel() {
+        return nonLocalizedLabel;
+    }
+
+    public int getIcon() {
+        return icon;
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedIntentInfoUtils.java b/core/java/android/content/pm/parsing/component/ParsedIntentInfoUtils.java
new file mode 100644
index 0000000..a7b950b
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedIntentInfoUtils.java
@@ -0,0 +1,249 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import android.annotation.NonNull;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageParser;
+import android.content.pm.parsing.ParsingPackage;
+import android.content.pm.parsing.ParsingPackageUtils;
+import android.content.pm.parsing.ParsingUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.os.PatternMatcher;
+import android.text.TextUtils;
+import android.util.Slog;
+import android.util.TypedValue;
+
+import com.android.internal.R;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+/** @hide */
+public class ParsedIntentInfoUtils {
+
+    private static final String TAG = ParsingPackageUtils.TAG;
+
+    @NonNull
+    public static ParseResult<ParsedIntentInfo> parseIntentInfo(String className,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser, boolean allowGlobs,
+            boolean allowAutoVerify, ParseInput input)
+            throws XmlPullParserException, IOException {
+        ParsedIntentInfo intentInfo = new ParsedIntentInfo();
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestIntentFilter);
+        try {
+            intentInfo.setPriority(sa.getInt(R.styleable.AndroidManifestIntentFilter_priority, 0));
+            intentInfo.setOrder(sa.getInt(R.styleable.AndroidManifestIntentFilter_order, 0));
+
+            TypedValue v = sa.peekValue(R.styleable.AndroidManifestIntentFilter_label);
+            if (v != null) {
+                intentInfo.labelRes = v.resourceId;
+                if (v.resourceId == 0) {
+                    intentInfo.nonLocalizedLabel = v.coerceToString();
+                }
+            }
+
+            if (PackageParser.sUseRoundIcon) {
+                intentInfo.icon = sa.getResourceId(
+                        R.styleable.AndroidManifestIntentFilter_roundIcon, 0);
+            }
+
+            if (intentInfo.icon == 0) {
+                intentInfo.icon = sa.getResourceId(R.styleable.AndroidManifestIntentFilter_icon, 0);
+            }
+
+            if (allowAutoVerify) {
+                intentInfo.setAutoVerify(sa.getBoolean(
+                        R.styleable.AndroidManifestIntentFilter_autoVerify,
+                        false));
+            }
+        } finally {
+            sa.recycle();
+        }
+        final int depth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG
+                || parser.getDepth() > depth)) {
+            if (type != XmlPullParser.START_TAG) {
+                continue;
+            }
+
+            final ParseResult result;
+            String nodeName = parser.getName();
+            switch (nodeName) {
+                case "action": {
+                    String value = parser.getAttributeValue(PackageParser.ANDROID_RESOURCES,
+                            "name");
+                    if (TextUtils.isEmpty(value)) {
+                        result = input.error("No value supplied for <android:name>");
+                    } else {
+                        intentInfo.addAction(value);
+                        result = input.success(null);
+                    }
+                    break;
+                }
+                case "category": {
+                    String value = parser.getAttributeValue(PackageParser.ANDROID_RESOURCES,
+                            "name");
+                    if (TextUtils.isEmpty(value)) {
+                        result = input.error("No value supplied for <android:name>");
+                    } else {
+                        intentInfo.addCategory(value);
+                        result = input.success(null);
+                    }
+                    break;
+                }
+                case "data":
+                    result = parseData(intentInfo, res, parser, allowGlobs, input);
+                    break;
+                default:
+                    result = ParsingUtils.unknownTag("<intent-filter>", pkg, parser, input);
+                    break;
+            }
+
+            if (result.isError()) {
+                return input.error(result);
+            }
+        }
+
+        intentInfo.hasDefault = intentInfo.hasCategory(Intent.CATEGORY_DEFAULT);
+
+        if (PackageParser.DEBUG_PARSER) {
+            final StringBuilder cats = new StringBuilder("Intent d=");
+            cats.append(intentInfo.isHasDefault());
+            cats.append(", cat=");
+
+            final Iterator<String> it = intentInfo.categoriesIterator();
+            if (it != null) {
+                while (it.hasNext()) {
+                    cats.append(' ');
+                    cats.append(it.next());
+                }
+            }
+            Slog.d(TAG, cats.toString());
+        }
+
+        return input.success(intentInfo);
+    }
+
+    @NonNull
+    private static ParseResult<ParsedIntentInfo> parseData(ParsedIntentInfo intentInfo,
+            Resources resources, XmlResourceParser parser, boolean allowGlobs, ParseInput input) {
+        TypedArray sa = resources.obtainAttributes(parser, R.styleable.AndroidManifestData);
+        try {
+            String str = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestData_mimeType, 0);
+            if (str != null) {
+                try {
+                    intentInfo.addDataType(str);
+                } catch (IntentFilter.MalformedMimeTypeException e) {
+                    return input.error(e.toString());
+                }
+            }
+
+            str = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestData_mimeGroup, 0);
+            if (str != null) {
+                intentInfo.addMimeGroup(str);
+            }
+
+            str = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestData_scheme, 0);
+            if (str != null) {
+                intentInfo.addDataScheme(str);
+            }
+
+            str = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestData_ssp, 0);
+            if (str != null) {
+                intentInfo.addDataSchemeSpecificPart(str,
+                        PatternMatcher.PATTERN_LITERAL);
+            }
+
+            str = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestData_sspPrefix, 0);
+            if (str != null) {
+                intentInfo.addDataSchemeSpecificPart(str,
+                        PatternMatcher.PATTERN_PREFIX);
+            }
+
+            str = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestData_sspPattern, 0);
+            if (str != null) {
+                if (!allowGlobs) {
+                    return input.error(
+                            "sspPattern not allowed here; ssp must be literal");
+                }
+                intentInfo.addDataSchemeSpecificPart(str,
+                        PatternMatcher.PATTERN_SIMPLE_GLOB);
+            }
+
+            String host = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestData_host, 0);
+            String port = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestData_port, 0);
+            if (host != null) {
+                intentInfo.addDataAuthority(host, port);
+            }
+
+            str = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestData_path, 0);
+            if (str != null) {
+                intentInfo.addDataPath(str, PatternMatcher.PATTERN_LITERAL);
+            }
+
+            str = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestData_pathPrefix, 0);
+            if (str != null) {
+                intentInfo.addDataPath(str, PatternMatcher.PATTERN_PREFIX);
+            }
+
+            str = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestData_pathPattern, 0);
+            if (str != null) {
+                if (!allowGlobs) {
+                    return input.error(
+                            "pathPattern not allowed here; path must be literal");
+                }
+                intentInfo.addDataPath(str, PatternMatcher.PATTERN_SIMPLE_GLOB);
+            }
+
+            str = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestData_pathAdvancedPattern, 0);
+            if (str != null) {
+                if (!allowGlobs) {
+                    return input.error(
+                            "pathAdvancedPattern not allowed here; path must be literal");
+                }
+                intentInfo.addDataPath(str, PatternMatcher.PATTERN_ADVANCED_GLOB);
+            }
+
+            return input.success(null);
+        } finally {
+            sa.recycle();
+        }
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedMainComponent.java b/core/java/android/content/pm/parsing/component/ParsedMainComponent.java
new file mode 100644
index 0000000..59e9a84
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedMainComponent.java
@@ -0,0 +1,153 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import static android.content.pm.parsing.ParsingPackageImpl.sForString;
+
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+
+import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;
+
+/** @hide */
+public class ParsedMainComponent extends ParsedComponent {
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String processName;
+    boolean directBootAware;
+    boolean enabled = true;
+    boolean exported;
+    int order;
+
+    @Nullable
+    String splitName;
+
+    public ParsedMainComponent() {
+    }
+
+    public ParsedMainComponent(ParsedMainComponent other) {
+        super(other);
+        this.processName = other.processName;
+        this.directBootAware = other.directBootAware;
+        this.enabled = other.enabled;
+        this.exported = other.exported;
+        this.order = other.order;
+        this.splitName = other.splitName;
+    }
+
+    public ParsedMainComponent setProcessName(String processName) {
+        this.processName = TextUtils.safeIntern(processName);
+        return this;
+    }
+
+    public ParsedMainComponent setEnabled(boolean enabled) {
+        this.enabled = enabled;
+        return this;
+    }
+
+    /**
+     * A main component's name is a class name. This makes code slightly more readable.
+     */
+    public String getClassName() {
+        return getName();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        super.writeToParcel(dest, flags);
+        sForString.parcel(this.processName, dest, flags);
+        dest.writeBoolean(this.directBootAware);
+        dest.writeBoolean(this.enabled);
+        dest.writeBoolean(this.exported);
+        dest.writeInt(this.order);
+        dest.writeString(this.splitName);
+    }
+
+    protected ParsedMainComponent(Parcel in) {
+        super(in);
+        this.processName = sForString.unparcel(in);
+        this.directBootAware = in.readBoolean();
+        this.enabled = in.readBoolean();
+        this.exported = in.readBoolean();
+        this.order = in.readInt();
+        this.splitName = in.readString();
+    }
+
+    public static final Parcelable.Creator<ParsedMainComponent> CREATOR =
+            new Parcelable.Creator<ParsedMainComponent>() {
+                @Override
+                public ParsedMainComponent createFromParcel(Parcel source) {
+                    return new ParsedMainComponent(source);
+                }
+
+                @Override
+                public ParsedMainComponent[] newArray(int size) {
+                    return new ParsedMainComponent[size];
+                }
+            };
+
+    @Nullable
+    public String getProcessName() {
+        return processName;
+    }
+
+    public boolean isDirectBootAware() {
+        return directBootAware;
+    }
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public boolean isExported() {
+        return exported;
+    }
+
+    public int getOrder() {
+        return order;
+    }
+
+    @Nullable
+    public String getSplitName() {
+        return splitName;
+    }
+
+    public ParsedMainComponent setDirectBootAware(boolean value) {
+        directBootAware = value;
+        return this;
+    }
+
+    public ParsedMainComponent setExported(boolean value) {
+        exported = value;
+        return this;
+    }
+
+    public ParsedMainComponent setSplitName(@Nullable String value) {
+        splitName = value;
+        return this;
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedMainComponentUtils.java b/core/java/android/content/pm/parsing/component/ParsedMainComponentUtils.java
new file mode 100644
index 0000000..6188f89
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedMainComponentUtils.java
@@ -0,0 +1,137 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.IntentFilter;
+import android.content.pm.parsing.ParsingPackage;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.os.Build;
+import android.util.Slog;
+
+import com.android.internal.annotations.VisibleForTesting;
+import android.content.pm.parsing.ParsingPackageUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/** @hide */
+class ParsedMainComponentUtils {
+
+    private static final String TAG = ParsingPackageUtils.TAG;
+
+    @NonNull
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    static <Component extends ParsedMainComponent> ParseResult<Component> parseMainComponent(
+            Component component, String tag, String[] separateProcesses, ParsingPackage pkg,
+            TypedArray array, int flags, boolean useRoundIcon, ParseInput input,
+            int bannerAttr, int descriptionAttr, @Nullable Integer directBootAwareAttr,
+            @Nullable Integer enabledAttr, int iconAttr, int labelAttr, int logoAttr, int nameAttr,
+            @Nullable Integer processAttr, int roundIconAttr, @Nullable Integer splitNameAttr) {
+        ParseResult<Component> result = ParsedComponentUtils.parseComponent(component, tag, pkg,
+                array, useRoundIcon, input, bannerAttr, descriptionAttr, iconAttr, labelAttr,
+                logoAttr, nameAttr, roundIconAttr);
+        if (result.isError()) {
+            return result;
+        }
+
+        if (directBootAwareAttr != null) {
+            component.directBootAware = array.getBoolean(directBootAwareAttr, false);
+            if (component.isDirectBootAware()) {
+                pkg.setPartiallyDirectBootAware(true);
+            }
+        }
+
+        if (enabledAttr != null) {
+            component.enabled = array.getBoolean(enabledAttr, true);
+        }
+
+        if (processAttr != null) {
+            CharSequence processName;
+            if (pkg.getTargetSdkVersion() >= Build.VERSION_CODES.FROYO) {
+                processName = array.getNonConfigurationString(processAttr,
+                        Configuration.NATIVE_CONFIG_VERSION);
+            } else {
+                // Some older apps have been seen to use a resource reference
+                // here that on older builds was ignored (with a warning).  We
+                // need to continue to do this for them so they don't break.
+                processName = array.getNonResourceString(processAttr);
+            }
+
+            // Backwards-compat, ignore error
+            ParseResult<String> processNameResult = ComponentParseUtils.buildProcessName(
+                    pkg.getPackageName(), pkg.getProcessName(), processName, flags,
+                    separateProcesses, input);
+            if (processNameResult.isSuccess()) {
+                component.setProcessName(processNameResult.getResult());
+            } else {
+                // Backwards-compat, ignore error
+                processNameResult.ignoreError();
+            }
+        }
+
+        if (splitNameAttr != null) {
+            component.splitName = array.getNonConfigurationString(splitNameAttr, 0);
+        }
+
+        return input.success(component);
+    }
+
+    static ParseResult<ParsedIntentInfo> parseIntentFilter(
+            ParsedMainComponent mainComponent,
+            ParsingPackage pkg, Resources resources, XmlResourceParser parser,
+            boolean visibleToEphemeral, boolean allowGlobs, boolean allowAutoVerify,
+            boolean allowImplicitEphemeralVisibility, boolean failOnNoActions,
+            ParseInput input) throws IOException, XmlPullParserException {
+        ParseResult<ParsedIntentInfo> intentResult = ParsedIntentInfoUtils.parseIntentInfo(
+                mainComponent.getName(), pkg, resources, parser, allowGlobs,
+                allowAutoVerify, input);
+        if (intentResult.isError()) {
+            return input.error(intentResult);
+        }
+
+        ParsedIntentInfo intent = intentResult.getResult();
+        int actionCount = intent.countActions();
+        if (actionCount == 0 && failOnNoActions) {
+            Slog.w(TAG, "No actions in " + parser.getName() + " at " + pkg.getBaseCodePath() + " "
+                    + parser.getPositionDescription());
+            // Backward-compat, do not actually fail
+            return input.success(null);
+        }
+
+        int intentVisibility;
+        if (visibleToEphemeral) {
+            intentVisibility = IntentFilter.VISIBILITY_EXPLICIT;
+        } else if (allowImplicitEphemeralVisibility
+                && ComponentParseUtils.isImplicitlyExposedIntent(intent)){
+            intentVisibility = IntentFilter.VISIBILITY_IMPLICIT;
+        } else {
+            intentVisibility = IntentFilter.VISIBILITY_NONE;
+        }
+        intent.setVisibilityToInstantApp(intentVisibility);
+
+        return input.success(intentResult.getResult());
+    }
+
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedPermission.java b/core/java/android/content/pm/parsing/component/ParsedPermission.java
new file mode 100644
index 0000000..6c36ecb
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedPermission.java
@@ -0,0 +1,194 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import static android.content.pm.parsing.ParsingPackageImpl.sForString;
+
+import android.annotation.Nullable;
+import android.content.pm.PermissionInfo;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;
+
+/** @hide */
+public class ParsedPermission extends ParsedComponent {
+
+    @Nullable
+    String backgroundPermission;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String group;
+    int requestRes;
+    int protectionLevel;
+    boolean tree;
+    @Nullable
+    private ParsedPermissionGroup parsedPermissionGroup;
+
+    @VisibleForTesting
+    public ParsedPermission() {
+    }
+
+    public ParsedPermission(ParsedPermission other) {
+        super(other);
+        this.backgroundPermission = other.backgroundPermission;
+        this.group = other.group;
+        this.requestRes = other.requestRes;
+        this.protectionLevel = other.protectionLevel;
+        this.tree = other.tree;
+        this.parsedPermissionGroup = other.parsedPermissionGroup;
+    }
+
+    public ParsedPermission(ParsedPermission other, PermissionInfo pendingPermissionInfo,
+            String packageName, String name) {
+        this(other);
+
+        this.flags = pendingPermissionInfo.flags;
+        this.descriptionRes = pendingPermissionInfo.descriptionRes;
+
+        this.backgroundPermission = pendingPermissionInfo.backgroundPermission;
+        this.group = pendingPermissionInfo.group;
+        this.requestRes = pendingPermissionInfo.requestRes;
+        this.protectionLevel = pendingPermissionInfo.protectionLevel;
+
+        setName(name);
+        setPackageName(packageName);
+    }
+
+    public ParsedPermission setGroup(String group) {
+        this.group = TextUtils.safeIntern(group);
+        return this;
+    }
+
+    public ParsedPermission setFlags(int flags) {
+        this.flags = flags;
+        return this;
+    }
+
+    public boolean isRuntime() {
+        return getProtection() == PermissionInfo.PROTECTION_DANGEROUS;
+    }
+
+    public boolean isAppOp() {
+        return (protectionLevel & PermissionInfo.PROTECTION_FLAG_APPOP) != 0;
+    }
+
+    @PermissionInfo.Protection
+    public int getProtection() {
+        return protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
+    }
+
+    public int getProtectionFlags() {
+        return protectionLevel & ~PermissionInfo.PROTECTION_MASK_BASE;
+    }
+
+    public int calculateFootprint() {
+        int size = getName().length();
+        if (getNonLocalizedLabel() != null) {
+            size += getNonLocalizedLabel().length();
+        }
+        return size;
+    }
+
+    public String toString() {
+        return "Permission{"
+                + Integer.toHexString(System.identityHashCode(this))
+                + " " + getName() + "}";
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        super.writeToParcel(dest, flags);
+        dest.writeString(this.backgroundPermission);
+        sForString.parcel(this.group, dest, flags);
+        dest.writeInt(this.requestRes);
+        dest.writeInt(this.protectionLevel);
+        dest.writeBoolean(this.tree);
+        dest.writeParcelable(this.parsedPermissionGroup, flags);
+    }
+
+    protected ParsedPermission(Parcel in) {
+        super(in);
+        // We use the boot classloader for all classes that we load.
+        final ClassLoader boot = Object.class.getClassLoader();
+        this.backgroundPermission = in.readString();
+        this.group = sForString.unparcel(in);
+        this.requestRes = in.readInt();
+        this.protectionLevel = in.readInt();
+        this.tree = in.readBoolean();
+        this.parsedPermissionGroup = in.readParcelable(boot);
+    }
+
+    public static final Parcelable.Creator<ParsedPermission> CREATOR =
+            new Parcelable.Creator<ParsedPermission>() {
+                @Override
+                public ParsedPermission createFromParcel(Parcel source) {
+                    return new ParsedPermission(source);
+                }
+
+                @Override
+                public ParsedPermission[] newArray(int size) {
+                    return new ParsedPermission[size];
+                }
+            };
+
+    @Nullable
+    public String getBackgroundPermission() {
+        return backgroundPermission;
+    }
+
+    @Nullable
+    public String getGroup() {
+        return group;
+    }
+
+    public int getRequestRes() {
+        return requestRes;
+    }
+
+    public int getProtectionLevel() {
+        return protectionLevel;
+    }
+
+    public boolean isTree() {
+        return tree;
+    }
+
+    @Nullable
+    public ParsedPermissionGroup getParsedPermissionGroup() {
+        return parsedPermissionGroup;
+    }
+
+    public ParsedPermission setProtectionLevel(int value) {
+        protectionLevel = value;
+        return this;
+    }
+
+    public ParsedPermission setParsedPermissionGroup(@Nullable ParsedPermissionGroup value) {
+        parsedPermissionGroup = value;
+        return this;
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedPermissionGroup.java b/core/java/android/content/pm/parsing/component/ParsedPermissionGroup.java
new file mode 100644
index 0000000..741c00c
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedPermissionGroup.java
@@ -0,0 +1,102 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.DataClass;
+
+/** @hide */
+public class ParsedPermissionGroup extends ParsedComponent {
+
+    int requestDetailResourceId;
+    int backgroundRequestResourceId;
+    int backgroundRequestDetailResourceId;
+    int requestRes;
+    int priority;
+
+    public void setPriority(int priority) {
+        this.priority = priority;
+    }
+
+    public String toString() {
+        return "PermissionGroup{"
+                + Integer.toHexString(System.identityHashCode(this))
+                + " " + getName() + "}";
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        super.writeToParcel(dest, flags);
+        dest.writeInt(this.requestDetailResourceId);
+        dest.writeInt(this.backgroundRequestResourceId);
+        dest.writeInt(this.backgroundRequestDetailResourceId);
+        dest.writeInt(this.requestRes);
+        dest.writeInt(this.priority);
+    }
+
+    public ParsedPermissionGroup() {
+    }
+
+    protected ParsedPermissionGroup(Parcel in) {
+        super(in);
+        this.requestDetailResourceId = in.readInt();
+        this.backgroundRequestResourceId = in.readInt();
+        this.backgroundRequestDetailResourceId = in.readInt();
+        this.requestRes = in.readInt();
+        this.priority = in.readInt();
+    }
+
+    public static final Parcelable.Creator<ParsedPermissionGroup> CREATOR =
+            new Parcelable.Creator<ParsedPermissionGroup>() {
+                @Override
+                public ParsedPermissionGroup createFromParcel(Parcel source) {
+                    return new ParsedPermissionGroup(source);
+                }
+
+                @Override
+                public ParsedPermissionGroup[] newArray(int size) {
+                    return new ParsedPermissionGroup[size];
+                }
+            };
+
+    public int getRequestDetailResourceId() {
+        return requestDetailResourceId;
+    }
+
+    public int getBackgroundRequestResourceId() {
+        return backgroundRequestResourceId;
+    }
+
+    public int getBackgroundRequestDetailResourceId() {
+        return backgroundRequestDetailResourceId;
+    }
+
+    public int getRequestRes() {
+        return requestRes;
+    }
+
+    public int getPriority() {
+        return priority;
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedPermissionUtils.java b/core/java/android/content/pm/parsing/component/ParsedPermissionUtils.java
new file mode 100644
index 0000000..1884a1e
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedPermissionUtils.java
@@ -0,0 +1,210 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import android.annotation.NonNull;
+import android.content.pm.PermissionInfo;
+import android.content.pm.parsing.ParsingPackage;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.util.Slog;
+
+import com.android.internal.R;
+import android.content.pm.parsing.ParsingPackageUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/** @hide */
+public class ParsedPermissionUtils {
+
+    private static final String TAG = ParsingPackageUtils.TAG;
+
+    @NonNull
+    public static ParseResult<ParsedPermission> parsePermission(ParsingPackage pkg, Resources res,
+            XmlResourceParser parser, boolean useRoundIcon, ParseInput input)
+            throws IOException, XmlPullParserException {
+        String packageName = pkg.getPackageName();
+        ParsedPermission
+                permission = new ParsedPermission();
+        String tag = "<" + parser.getName() + ">";
+        final ParseResult<ParsedPermission> result;
+
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestPermission);
+        try {
+            result = ParsedComponentUtils.parseComponent(
+                    permission, tag, pkg, sa, useRoundIcon, input,
+                    R.styleable.AndroidManifestPermission_banner,
+                    R.styleable.AndroidManifestPermission_description,
+                    R.styleable.AndroidManifestPermission_icon,
+                    R.styleable.AndroidManifestPermission_label,
+                    R.styleable.AndroidManifestPermission_logo,
+                    R.styleable.AndroidManifestPermission_name,
+                    R.styleable.AndroidManifestPermission_roundIcon);
+            if (result.isError()) {
+                return result;
+            }
+
+            if (sa.hasValue(
+                    R.styleable.AndroidManifestPermission_backgroundPermission)) {
+                if ("android".equals(packageName)) {
+                    permission.backgroundPermission = sa.getNonResourceString(
+                            R.styleable
+                                    .AndroidManifestPermission_backgroundPermission);
+                } else {
+                    Slog.w(TAG, packageName + " defines a background permission. Only the "
+                            + "'android' package can do that.");
+                }
+            }
+
+            // Note: don't allow this value to be a reference to a resource
+            // that may change.
+            permission.setGroup(sa.getNonResourceString(
+                    R.styleable.AndroidManifestPermission_permissionGroup));
+
+            permission.requestRes = sa.getResourceId(
+                    R.styleable.AndroidManifestPermission_request, 0);
+
+            permission.protectionLevel = sa.getInt(
+                    R.styleable.AndroidManifestPermission_protectionLevel,
+                    PermissionInfo.PROTECTION_NORMAL);
+
+            permission.flags = sa.getInt(
+                    R.styleable.AndroidManifestPermission_permissionFlags, 0);
+
+            // For now only platform runtime permissions can be restricted
+            if (!permission.isRuntime() || !"android".equals(permission.getPackageName())) {
+                permission.flags &= ~PermissionInfo.FLAG_HARD_RESTRICTED;
+                permission.flags &= ~PermissionInfo.FLAG_SOFT_RESTRICTED;
+            } else {
+                // The platform does not get to specify conflicting permissions
+                if ((permission.flags & PermissionInfo.FLAG_HARD_RESTRICTED) != 0
+                        && (permission.flags & PermissionInfo.FLAG_SOFT_RESTRICTED) != 0) {
+                    throw new IllegalStateException("Permission cannot be both soft and hard"
+                            + " restricted: " + permission.getName());
+                }
+            }
+        } finally {
+            sa.recycle();
+        }
+
+        // TODO(b/135203078): This is impossible because of default value in above getInt
+        if (permission.protectionLevel == -1) {
+            return input.error("<permission> does not specify protectionLevel");
+        }
+
+        permission.protectionLevel = PermissionInfo.fixProtectionLevel(permission.protectionLevel);
+
+        if (permission.getProtectionFlags() != 0) {
+            if ((permission.protectionLevel & PermissionInfo.PROTECTION_FLAG_INSTANT) == 0
+                    && (permission.protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY)
+                    == 0
+                    && (permission.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) !=
+                    PermissionInfo.PROTECTION_SIGNATURE) {
+                return input.error("<permission>  protectionLevel specifies a non-instant flag "
+                        + "but is not based on signature type");
+            }
+        }
+
+        return ComponentParseUtils.parseAllMetaData(pkg, res, parser, tag, permission, input);
+    }
+
+    @NonNull
+    public static ParseResult<ParsedPermission> parsePermissionTree(ParsingPackage pkg, Resources res,
+            XmlResourceParser parser, boolean useRoundIcon, ParseInput input)
+            throws IOException, XmlPullParserException {
+        ParsedPermission permission = new ParsedPermission();
+        String tag = "<" + parser.getName() + ">";
+        final ParseResult<ParsedPermission> result;
+
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestPermissionTree);
+        try {
+            result = ParsedComponentUtils.parseComponent(
+                    permission, tag, pkg, sa, useRoundIcon, input,
+                    R.styleable.AndroidManifestPermissionTree_banner,
+                    null /*descriptionAttr*/,
+                    R.styleable.AndroidManifestPermissionTree_icon,
+                    R.styleable.AndroidManifestPermissionTree_label,
+                    R.styleable.AndroidManifestPermissionTree_logo,
+                    R.styleable.AndroidManifestPermissionTree_name,
+                    R.styleable.AndroidManifestPermissionTree_roundIcon);
+            if (result.isError()) {
+                return result;
+            }
+        } finally {
+            sa.recycle();
+        }
+
+        int index = permission.getName().indexOf('.');
+        if (index > 0) {
+            index = permission.getName().indexOf('.', index + 1);
+        }
+        if (index < 0) {
+            return input.error("<permission-tree> name has less than three segments: "
+                    + permission.getName());
+        }
+
+        permission.protectionLevel = PermissionInfo.PROTECTION_NORMAL;
+        permission.tree = true;
+
+        return ComponentParseUtils.parseAllMetaData(pkg, res, parser, tag, permission,
+                input);
+    }
+
+    @NonNull
+    public static ParseResult<ParsedPermissionGroup> parsePermissionGroup(ParsingPackage pkg,
+            Resources res, XmlResourceParser parser, boolean useRoundIcon, ParseInput input)
+            throws IOException, XmlPullParserException {
+        ParsedPermissionGroup
+                permissionGroup = new ParsedPermissionGroup();
+        String tag = "<" + parser.getName() + ">";
+
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestPermissionGroup);
+        try {
+            ParseResult<ParsedPermissionGroup> result = ParsedComponentUtils.parseComponent(
+                    permissionGroup, tag, pkg, sa, useRoundIcon, input,
+                    R.styleable.AndroidManifestPermissionGroup_banner,
+                    R.styleable.AndroidManifestPermissionGroup_description,
+                    R.styleable.AndroidManifestPermissionGroup_icon,
+                    R.styleable.AndroidManifestPermissionGroup_label,
+                    R.styleable.AndroidManifestPermissionGroup_logo,
+                    R.styleable.AndroidManifestPermissionGroup_name,
+                    R.styleable.AndroidManifestPermissionGroup_roundIcon);
+            if (result.isError()) {
+                return result;
+            }
+
+            // @formatter:off
+            permissionGroup.requestDetailResourceId = sa.getResourceId(R.styleable.AndroidManifestPermissionGroup_requestDetail, 0);
+            permissionGroup.backgroundRequestResourceId = sa.getResourceId(R.styleable.AndroidManifestPermissionGroup_backgroundRequest, 0);
+            permissionGroup.backgroundRequestDetailResourceId = sa.getResourceId(R.styleable.AndroidManifestPermissionGroup_backgroundRequestDetail, 0);
+            permissionGroup.requestRes = sa.getResourceId(R.styleable.AndroidManifestPermissionGroup_request, 0);
+            permissionGroup.flags = sa.getInt(R.styleable.AndroidManifestPermissionGroup_permissionGroupFlags,0);
+            permissionGroup.priority = sa.getInt(R.styleable.AndroidManifestPermissionGroup_priority, 0);
+            // @formatter:on
+        } finally {
+            sa.recycle();
+        }
+
+        return ComponentParseUtils.parseAllMetaData(pkg, res, parser, tag, permissionGroup,
+                input);
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedProcess.java b/core/java/android/content/pm/parsing/component/ParsedProcess.java
new file mode 100644
index 0000000..da7bf98
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedProcess.java
@@ -0,0 +1,166 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import static java.util.Collections.emptySet;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.ArraySet;
+
+import com.android.internal.util.CollectionUtils;
+import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
+
+import java.util.Set;
+
+/** @hide */
+@DataClass(genGetters = true, genSetters = false, genParcelable = true, genAidl = false,
+        genBuilder = false)
+public class ParsedProcess implements Parcelable {
+
+    @NonNull
+    protected String name;
+    @NonNull
+    @DataClass.ParcelWith(Parcelling.BuiltIn.ForInternedStringSet.class)
+    protected Set<String> deniedPermissions = emptySet();
+
+    public ParsedProcess() {
+    }
+
+    public ParsedProcess(@NonNull ParsedProcess other) {
+        name = other.name;
+        deniedPermissions = new ArraySet<>(other.deniedPermissions);
+    }
+
+    public void addStateFrom(@NonNull ParsedProcess other) {
+        deniedPermissions = CollectionUtils.addAll(deniedPermissions, other.deniedPermissions);
+    }
+
+
+
+    // Code below generated by codegen v1.0.14.
+    //
+    // DO NOT MODIFY!
+    // CHECKSTYLE:OFF Generated code
+    //
+    // To regenerate run:
+    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/content/pm/parsing/component/ParsedProcess.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 ParsedProcess(
+            @NonNull String name,
+            @NonNull Set<String> deniedPermissions) {
+        this.name = name;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, name);
+        this.deniedPermissions = deniedPermissions;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, deniedPermissions);
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    @DataClass.Generated.Member
+    public @NonNull String getName() {
+        return name;
+    }
+
+    @DataClass.Generated.Member
+    public @NonNull Set<String> getDeniedPermissions() {
+        return deniedPermissions;
+    }
+
+    @DataClass.Generated.Member
+    static Parcelling<Set<String>> sParcellingForDeniedPermissions =
+            Parcelling.Cache.get(
+                    Parcelling.BuiltIn.ForInternedStringSet.class);
+    static {
+        if (sParcellingForDeniedPermissions == null) {
+            sParcellingForDeniedPermissions = Parcelling.Cache.put(
+                    new Parcelling.BuiltIn.ForInternedStringSet());
+        }
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        // You can override field parcelling by defining methods like:
+        // void parcelFieldName(Parcel dest, int flags) { ... }
+
+        dest.writeString(name);
+        sParcellingForDeniedPermissions.parcel(deniedPermissions, dest, flags);
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public int describeContents() { return 0; }
+
+    /** @hide */
+    @SuppressWarnings({"unchecked", "RedundantCast"})
+    @DataClass.Generated.Member
+    protected ParsedProcess(@NonNull Parcel in) {
+        // You can override field unparcelling by defining methods like:
+        // static FieldType unparcelFieldName(Parcel in) { ... }
+
+        String _name = in.readString();
+        Set<String> _deniedPermissions = sParcellingForDeniedPermissions.unparcel(in);
+
+        this.name = _name;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, name);
+        this.deniedPermissions = _deniedPermissions;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, deniedPermissions);
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    @DataClass.Generated.Member
+    public static final @NonNull Parcelable.Creator<ParsedProcess> CREATOR
+            = new Parcelable.Creator<ParsedProcess>() {
+        @Override
+        public ParsedProcess[] newArray(int size) {
+            return new ParsedProcess[size];
+        }
+
+        @Override
+        public ParsedProcess createFromParcel(@NonNull Parcel in) {
+            return new ParsedProcess(in);
+        }
+    };
+
+    @DataClass.Generated(
+            time = 1581452315946L,
+            codegenVersion = "1.0.14",
+            sourceFile = "frameworks/base/core/java/android/content/pm/parsing/component/ParsedProcess.java",
+            inputSignatures = "protected @android.annotation.NonNull java.lang.String name\nprotected @android.annotation.NonNull @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedStringSet.class) java.util.Set<java.lang.String> deniedPermissions\npublic  void addStateFrom(android.content.pm.parsing.component.ParsedProcess)\nclass ParsedProcess extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genGetters=true, genSetters=false, genParcelable=true, genAidl=false, genBuilder=false)")
+    @Deprecated
+    private void __metadata() {}
+
+
+    //@formatter:on
+    // End of generated code
+
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java b/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java
new file mode 100644
index 0000000..4825066
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java
@@ -0,0 +1,212 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import android.annotation.NonNull;
+import android.content.pm.parsing.ParsingPackage;
+import android.content.pm.parsing.ParsingUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+
+import com.android.internal.R;
+import com.android.internal.util.CollectionUtils;
+import com.android.internal.util.XmlUtils;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.Set;
+
+/** @hide */
+public class ParsedProcessUtils {
+
+    private static final String TAG = ParsingUtils.TAG;
+
+    @NonNull
+    private static ParseResult<Set<String>> parseDenyPermission(Set<String> perms,
+            Resources res, XmlResourceParser parser, ParseInput input)
+            throws IOException, XmlPullParserException {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestDenyPermission);
+        try {
+            String perm = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestDenyPermission_name, 0);
+            if (perm != null && perm.equals(android.Manifest.permission.INTERNET)) {
+                perms = CollectionUtils.add(perms, perm);
+            }
+        } finally {
+            sa.recycle();
+        }
+        XmlUtils.skipCurrentTag(parser);
+        return input.success(perms);
+    }
+
+    @NonNull
+    private static ParseResult<Set<String>> parseAllowPermission(Set<String> perms, Resources res,
+            XmlResourceParser parser, ParseInput input)
+            throws IOException, XmlPullParserException {
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestAllowPermission);
+        try {
+            String perm = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestAllowPermission_name, 0);
+            if (perm != null && perm.equals(android.Manifest.permission.INTERNET)) {
+                perms = CollectionUtils.remove(perms, perm);
+            }
+        } finally {
+            sa.recycle();
+        }
+        XmlUtils.skipCurrentTag(parser);
+        return input.success(perms);
+    }
+
+    @NonNull
+    private static ParseResult<ParsedProcess> parseProcess(Set<String> perms, String[] separateProcesses,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser, int flags,
+            ParseInput input) throws IOException, XmlPullParserException {
+        ParsedProcess proc = new ParsedProcess();
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestProcess);
+        try {
+            if (perms != null) {
+                proc.deniedPermissions = new ArraySet<>(perms);
+            }
+
+            proc.name = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestProcess_process, 0);
+            ParseResult<String> processNameResult = ComponentParseUtils.buildProcessName(
+                    pkg.getPackageName(), pkg.getPackageName(), proc.name, flags, separateProcesses,
+                    input);
+            if (processNameResult.isError()) {
+                return input.error(processNameResult);
+            }
+
+            proc.name = processNameResult.getResult();
+
+            if (proc.name == null || proc.name.length() <= 0) {
+                return input.error("<process> does not specify android:process");
+            }
+        } finally {
+            sa.recycle();
+        }
+
+        int type;
+        final int innerDepth = parser.getDepth();
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+
+            ParseResult<?> result;
+
+            String tagName = parser.getName();
+            switch (tagName) {
+                case "deny-permission":
+                    ParseResult<Set<String>> denyResult = parseDenyPermission(
+                            proc.deniedPermissions, res, parser, input);
+                    result = denyResult;
+                    if (denyResult.isSuccess()) {
+                        proc.deniedPermissions = denyResult.getResult();
+                    }
+                    break;
+                case "allow-permission":
+                    ParseResult<Set<String>> allowResult = parseAllowPermission(
+                            proc.deniedPermissions, res, parser, input);
+                    result = allowResult;
+                    if (allowResult.isSuccess()) {
+                        proc.deniedPermissions = allowResult.getResult();
+                    }
+                    break;
+                default:
+                    result = ParsingUtils.unknownTag("<process>", pkg, parser, input);
+                    break;
+            }
+
+            if (result.isError()) {
+                return input.error(result);
+            }
+        }
+
+        return input.success(proc);
+    }
+
+    @NonNull
+    public static ParseResult<ArrayMap<String, ParsedProcess>> parseProcesses(
+            String[] separateProcesses, ParsingPackage pkg, Resources res,
+            XmlResourceParser parser, int flags, ParseInput input)
+            throws IOException, XmlPullParserException {
+        Set<String> deniedPerms = null;
+        ArrayMap<String, ParsedProcess> processes = new ArrayMap<>();
+
+        int type;
+        final int innerDepth = parser.getDepth();
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+
+            ParseResult<?> result;
+
+            String tagName = parser.getName();
+            switch (tagName) {
+                case "deny-permission":
+                    ParseResult<Set<String>> denyResult = parseDenyPermission(deniedPerms, res,
+                            parser, input);
+                    result = denyResult;
+                    if (denyResult.isSuccess()) {
+                        deniedPerms = denyResult.getResult();
+                    }
+                    break;
+                case "allow-permission":
+                    ParseResult<Set<String>> allowResult = parseAllowPermission(deniedPerms, res,
+                            parser, input);
+                    result = allowResult;
+                    if (allowResult.isSuccess()) {
+                        deniedPerms = allowResult.getResult();
+                    }
+                    break;
+                case "process":
+                    ParseResult<ParsedProcess> processResult = parseProcess(deniedPerms,
+                            separateProcesses, pkg, res, parser, flags, input);
+                    result = processResult;
+                    if (processResult.isSuccess()) {
+                        ParsedProcess process = processResult.getResult();
+                        if (processes.put(process.name, process) != null) {
+                            result = input.error(
+                                    "<process> specified existing name '" + process.name + "'");
+                        }
+                    }
+                    break;
+                default:
+                    result = ParsingUtils.unknownTag("<processes>", pkg, parser, input);
+                    break;
+            }
+
+            if (result.isError()) {
+                return input.error(result);
+            }
+
+        }
+
+        return input.success(processes);
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedProvider.java b/core/java/android/content/pm/parsing/component/ParsedProvider.java
new file mode 100644
index 0000000..d2c531d
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedProvider.java
@@ -0,0 +1,195 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import static android.content.pm.parsing.ParsingPackageImpl.sForString;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.ComponentName;
+import android.content.pm.PathPermission;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.PatternMatcher;
+import android.text.TextUtils;
+
+import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;
+
+/** @hide **/
+public class ParsedProvider extends ParsedMainComponent {
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String authority;
+    boolean syncable;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String readPermission;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String writePermission;
+    boolean grantUriPermissions;
+    boolean forceUriPermissions;
+    boolean multiProcess;
+    int initOrder;
+    @Nullable
+    PatternMatcher[] uriPermissionPatterns;
+    @Nullable
+    PathPermission[] pathPermissions;
+
+    public ParsedProvider(ParsedProvider other) {
+        super(other);
+
+        this.authority = other.authority;
+        this.syncable = other.syncable;
+        this.readPermission = other.readPermission;
+        this.writePermission = other.writePermission;
+        this.grantUriPermissions = other.grantUriPermissions;
+        this.forceUriPermissions = other.forceUriPermissions;
+        this.multiProcess = other.multiProcess;
+        this.initOrder = other.initOrder;
+        this.uriPermissionPatterns = other.uriPermissionPatterns;
+        this.pathPermissions = other.pathPermissions;
+    }
+
+    public void setAuthority(String authority) {
+        this.authority = TextUtils.safeIntern(authority);
+    }
+
+    public void setSyncable(boolean syncable) {
+        this.syncable = syncable;
+    }
+
+    public void setReadPermission(String readPermission) {
+        // Empty string must be converted to null
+        this.readPermission = TextUtils.isEmpty(readPermission)
+                ? null : readPermission.intern();
+    }
+
+    public void setWritePermission(String writePermission) {
+        // Empty string must be converted to null
+        this.writePermission = TextUtils.isEmpty(writePermission)
+                ? null : writePermission.intern();
+    }
+
+    public String toString() {
+        StringBuilder sb = new StringBuilder(128);
+        sb.append("Provider{");
+        sb.append(Integer.toHexString(System.identityHashCode(this)));
+        sb.append(' ');
+        ComponentName.appendShortString(sb, getPackageName(), getName());
+        sb.append('}');
+        return sb.toString();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        super.writeToParcel(dest, flags);
+        sForString.parcel(this.authority, dest, flags);
+        dest.writeBoolean(this.syncable);
+        sForString.parcel(this.readPermission, dest, flags);
+        sForString.parcel(this.writePermission, dest, flags);
+        dest.writeBoolean(this.grantUriPermissions);
+        dest.writeBoolean(this.forceUriPermissions);
+        dest.writeBoolean(this.multiProcess);
+        dest.writeInt(this.initOrder);
+        dest.writeTypedArray(this.uriPermissionPatterns, flags);
+        dest.writeTypedArray(this.pathPermissions, flags);
+    }
+
+    public ParsedProvider() {
+    }
+
+    protected ParsedProvider(Parcel in) {
+        super(in);
+        //noinspection ConstantConditions
+        this.authority = sForString.unparcel(in);
+        this.syncable = in.readBoolean();
+        this.readPermission = sForString.unparcel(in);
+        this.writePermission = sForString.unparcel(in);
+        this.grantUriPermissions = in.readBoolean();
+        this.forceUriPermissions = in.readBoolean();
+        this.multiProcess = in.readBoolean();
+        this.initOrder = in.readInt();
+        this.uriPermissionPatterns = in.createTypedArray(PatternMatcher.CREATOR);
+        this.pathPermissions = in.createTypedArray(PathPermission.CREATOR);
+    }
+
+    public static final Parcelable.Creator<ParsedProvider> CREATOR = new Creator<ParsedProvider>() {
+        @Override
+        public ParsedProvider createFromParcel(Parcel source) {
+            return new ParsedProvider(source);
+        }
+
+        @Override
+        public ParsedProvider[] newArray(int size) {
+            return new ParsedProvider[size];
+        }
+    };
+
+    @NonNull
+    public String getAuthority() {
+        return authority;
+    }
+
+    public boolean isSyncable() {
+        return syncable;
+    }
+
+    @Nullable
+    public String getReadPermission() {
+        return readPermission;
+    }
+
+    @Nullable
+    public String getWritePermission() {
+        return writePermission;
+    }
+
+    public boolean isGrantUriPermissions() {
+        return grantUriPermissions;
+    }
+
+    public boolean isForceUriPermissions() {
+        return forceUriPermissions;
+    }
+
+    public boolean isMultiProcess() {
+        return multiProcess;
+    }
+
+    public int getInitOrder() {
+        return initOrder;
+    }
+
+    @Nullable
+    public PatternMatcher[] getUriPermissionPatterns() {
+        return uriPermissionPatterns;
+    }
+
+    @Nullable
+    public PathPermission[] getPathPermissions() {
+        return pathPermissions;
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedProviderUtils.java b/core/java/android/content/pm/parsing/component/ParsedProviderUtils.java
new file mode 100644
index 0000000..aa5ea8d
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedProviderUtils.java
@@ -0,0 +1,355 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import static android.content.pm.parsing.component.ComponentParseUtils.flag;
+
+import android.annotation.NonNull;
+import android.content.pm.PackageParser;
+import android.content.pm.PathPermission;
+import android.content.pm.ProviderInfo;
+import android.content.pm.parsing.ParsingPackage;
+import android.content.pm.parsing.ParsingPackageUtils;
+import android.content.pm.parsing.ParsingUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.os.Build;
+import android.os.PatternMatcher;
+import android.util.Slog;
+
+import com.android.internal.R;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.Objects;
+
+/** @hide */
+public class ParsedProviderUtils {
+
+    private static final String TAG = ParsingPackageUtils.TAG;
+
+    @NonNull
+    public static ParseResult<ParsedProvider> parseProvider(String[] separateProcesses,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser, int flags,
+            boolean useRoundIcon, ParseInput input)
+            throws IOException, XmlPullParserException {
+        String authority;
+        boolean visibleToEphemeral;
+
+        final int targetSdkVersion = pkg.getTargetSdkVersion();
+        final String packageName = pkg.getPackageName();
+        final ParsedProvider provider = new ParsedProvider();
+        final String tag = parser.getName();
+
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestProvider);
+        try {
+            ParseResult<ParsedProvider> result =
+                    ParsedMainComponentUtils.parseMainComponent(provider, tag, separateProcesses,
+                    pkg, sa, flags, useRoundIcon, input,
+                    R.styleable.AndroidManifestProvider_banner,
+                    R.styleable.AndroidManifestProvider_description,
+                    R.styleable.AndroidManifestProvider_directBootAware,
+                    R.styleable.AndroidManifestProvider_enabled,
+                    R.styleable.AndroidManifestProvider_icon,
+                    R.styleable.AndroidManifestProvider_label,
+                    R.styleable.AndroidManifestProvider_logo,
+                    R.styleable.AndroidManifestProvider_name,
+                    R.styleable.AndroidManifestProvider_process,
+                    R.styleable.AndroidManifestProvider_roundIcon,
+                    R.styleable.AndroidManifestProvider_splitName);
+            if (result.isError()) {
+                return result;
+            }
+
+            authority = sa.getNonConfigurationString(R.styleable.AndroidManifestProvider_authorities, 0);
+
+            // For compatibility, applications targeting API level 16 or lower
+            // should have their content providers exported by default, unless they
+            // specify otherwise.
+            provider.exported = sa.getBoolean(R.styleable.AndroidManifestProvider_exported,
+                    targetSdkVersion < Build.VERSION_CODES.JELLY_BEAN_MR1);
+
+            provider.syncable = sa.getBoolean(R.styleable.AndroidManifestProvider_syncable, false);
+
+            String permission = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestProvider_permission, 0);
+            String readPermission = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestProvider_readPermission, 0);
+            if (readPermission == null) {
+                readPermission = permission;
+            }
+            if (readPermission == null) {
+                provider.setReadPermission(pkg.getPermission());
+            } else {
+                provider.setReadPermission(readPermission);
+            }
+            String writePermission = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestProvider_writePermission, 0);
+            if (writePermission == null) {
+                writePermission = permission;
+            }
+            if (writePermission == null) {
+                provider.setWritePermission(pkg.getPermission());
+            } else {
+                provider.setWritePermission(writePermission);
+            }
+
+            provider.grantUriPermissions = sa.getBoolean(R.styleable.AndroidManifestProvider_grantUriPermissions, false);
+            provider.forceUriPermissions = sa.getBoolean(R.styleable.AndroidManifestProvider_forceUriPermissions, false);
+            provider.multiProcess = sa.getBoolean(R.styleable.AndroidManifestProvider_multiprocess, false);
+            provider.initOrder = sa.getInt(R.styleable.AndroidManifestProvider_initOrder, 0);
+
+            provider.flags |= flag(ProviderInfo.FLAG_SINGLE_USER, R.styleable.AndroidManifestProvider_singleUser, sa);
+
+            visibleToEphemeral = sa.getBoolean(R.styleable.AndroidManifestProvider_visibleToInstantApps, false);
+            if (visibleToEphemeral) {
+                provider.flags |= ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP;
+                pkg.setVisibleToInstantApps(true);
+            }
+        } finally {
+            sa.recycle();
+        }
+
+        if (pkg.isCantSaveState()) {
+            // A heavy-weight application can not have providers in its main process
+            if (Objects.equals(provider.getProcessName(), packageName)) {
+                return input.error("Heavy-weight applications can not have providers"
+                        + " in main process");
+            }
+        }
+
+        if (authority == null) {
+            return input.error("<provider> does not include authorities attribute");
+        }
+        if (authority.length() <= 0) {
+            return input.error("<provider> has empty authorities attribute");
+        }
+        provider.setAuthority(authority);
+
+        return parseProviderTags(pkg, tag, res, parser, visibleToEphemeral, provider, input);
+    }
+
+    @NonNull
+    private static ParseResult<ParsedProvider> parseProviderTags(ParsingPackage pkg, String tag,
+            Resources res, XmlResourceParser parser, boolean visibleToEphemeral,
+            ParsedProvider provider, ParseInput input)
+            throws XmlPullParserException, IOException {
+        final int depth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG
+                || parser.getDepth() > depth)) {
+            if (type != XmlPullParser.START_TAG) {
+                continue;
+            }
+
+            String name = parser.getName();
+            final ParseResult result;
+            switch (name) {
+                case "intent-filter":
+                    ParseResult<ParsedIntentInfo> intentResult = ParsedMainComponentUtils
+                            .parseIntentFilter(provider, pkg, res, parser, visibleToEphemeral,
+                                    true /*allowGlobs*/, false /*allowAutoVerify*/,
+                                    false /*allowImplicitEphemeralVisibility*/,
+                                    false /*failOnNoActions*/, input);
+                    result = intentResult;
+                    if (intentResult.isSuccess()) {
+                        ParsedIntentInfo intent = intentResult.getResult();
+                        provider.order = Math.max(intent.getOrder(), provider.order);
+                        provider.addIntent(intent);
+                    }
+                    break;
+                case "meta-data":
+                    result = ParsedComponentUtils.addMetaData(provider, pkg, res, parser, input);
+                    break;
+                case "grant-uri-permission": {
+                    result = parseGrantUriPermission(provider, pkg, res, parser, input);
+                    break;
+                }
+                case "path-permission": {
+                    result = parsePathPermission(provider, pkg, res, parser, input);
+                    break;
+                }
+                default:
+                    result = ParsingUtils.unknownTag(tag, pkg, parser, input);
+                    break;
+            }
+
+            if (result.isError()) {
+                return input.error(result);
+            }
+        }
+
+        return input.success(provider);
+    }
+
+    @NonNull
+    private static ParseResult<ParsedProvider> parseGrantUriPermission(ParsedProvider provider,
+            ParsingPackage pkg, Resources resources, XmlResourceParser parser, ParseInput input) {
+        TypedArray sa = resources.obtainAttributes(parser,
+                R.styleable.AndroidManifestGrantUriPermission);
+        try {
+            String name = parser.getName();
+            // Pattern has priority over prefix over literal path
+            PatternMatcher pa = null;
+            String str = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestGrantUriPermission_pathPattern, 0);
+            if (str != null) {
+                pa = new PatternMatcher(str, PatternMatcher.PATTERN_SIMPLE_GLOB);
+            } else {
+                str = sa.getNonConfigurationString(
+                        R.styleable.AndroidManifestGrantUriPermission_pathPrefix, 0);
+                if (str != null) {
+                    pa = new PatternMatcher(str, PatternMatcher.PATTERN_PREFIX);
+                } else {
+                    str = sa.getNonConfigurationString(
+                            R.styleable.AndroidManifestGrantUriPermission_path, 0);
+                    if (str != null) {
+                        pa = new PatternMatcher(str, PatternMatcher.PATTERN_LITERAL);
+                    }
+                }
+            }
+
+            if (pa != null) {
+                if (provider.uriPermissionPatterns == null) {
+                    provider.uriPermissionPatterns = new PatternMatcher[1];
+                    provider.uriPermissionPatterns[0] = pa;
+                } else {
+                    final int N = provider.uriPermissionPatterns.length;
+                    PatternMatcher[] newp = new PatternMatcher[N + 1];
+                    System.arraycopy(provider.uriPermissionPatterns, 0, newp, 0, N);
+                    newp[N] = pa;
+                    provider.uriPermissionPatterns = newp;
+                }
+                provider.grantUriPermissions = true;
+            } else {
+                if (PackageParser.RIGID_PARSER) {
+                    return input.error("No path, pathPrefix, or pathPattern for <path-permission>");
+                }
+
+                Slog.w(TAG, "Unknown element under <path-permission>: " + name + " at "
+                        + pkg.getBaseCodePath() + " " + parser.getPositionDescription());
+            }
+
+            return input.success(provider);
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    @NonNull
+    private static ParseResult<ParsedProvider> parsePathPermission(ParsedProvider provider,
+            ParsingPackage pkg, Resources resources, XmlResourceParser parser, ParseInput input) {
+        TypedArray sa = resources.obtainAttributes(parser,
+                R.styleable.AndroidManifestPathPermission);
+        try {
+            String name = parser.getName();
+
+            String permission = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestPathPermission_permission, 0);
+            String readPermission = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestPathPermission_readPermission, 0);
+            if (readPermission == null) {
+                readPermission = permission;
+            }
+            String writePermission = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestPathPermission_writePermission, 0);
+            if (writePermission == null) {
+                writePermission = permission;
+            }
+
+            boolean havePerm = false;
+            if (readPermission != null) {
+                readPermission = readPermission.intern();
+                havePerm = true;
+            }
+            if (writePermission != null) {
+                writePermission = writePermission.intern();
+                havePerm = true;
+            }
+
+            if (!havePerm) {
+                if (PackageParser.RIGID_PARSER) {
+                    return input.error(
+                            "No readPermission or writePermission for <path-permission>");
+                }
+                Slog.w(TAG, "No readPermission or writePermission for <path-permission>: "
+                        + name + " at " + pkg.getBaseCodePath() + " " + parser.getPositionDescription());
+                return input.success(provider);
+            }
+
+            // Advanced has priority over simply over prefix over literal
+            PathPermission pa = null;
+            String path = sa.getNonConfigurationString(R.styleable.AndroidManifestPathPermission_pathAdvancedPattern, 0);
+            if (path != null) {
+                pa = new PathPermission(path, PatternMatcher.PATTERN_ADVANCED_GLOB, readPermission,
+                        writePermission);
+            } else {
+                path = sa.getNonConfigurationString(R.styleable.AndroidManifestPathPermission_pathPattern, 0);
+                if (path != null) {
+                    pa = new PathPermission(path, PatternMatcher.PATTERN_SIMPLE_GLOB,
+                            readPermission, writePermission);
+                } else {
+                    path = sa.getNonConfigurationString(
+                            R.styleable.AndroidManifestPathPermission_pathPrefix, 0);
+                    if (path != null) {
+                        pa = new PathPermission(path, PatternMatcher.PATTERN_PREFIX, readPermission,
+                                writePermission);
+                    } else {
+                        path = sa.getNonConfigurationString(R.styleable.AndroidManifestPathPermission_path, 0);
+                        if (path != null) {
+                            pa = new PathPermission(path, PatternMatcher.PATTERN_LITERAL,
+                                    readPermission, writePermission);
+                        }
+                    }
+                }
+            }
+
+            if (pa != null) {
+                if (provider.pathPermissions == null) {
+                    provider.pathPermissions = new PathPermission[1];
+                    provider.pathPermissions[0] = pa;
+                } else {
+                    final int N = provider.pathPermissions.length;
+                    PathPermission[] newp = new PathPermission[N + 1];
+                    System.arraycopy(provider.pathPermissions, 0, newp, 0, N);
+                    newp[N] = pa;
+                    provider.pathPermissions = newp;
+                }
+            } else {
+                if (PackageParser.RIGID_PARSER) {
+                    return input.error(
+                            "No path, pathPrefix, or pathPattern for <path-permission>");
+                }
+
+                Slog.w(TAG, "No path, pathPrefix, or pathPattern for <path-permission>: "
+                        + name + " at " + pkg.getBaseCodePath()
+                        + " "
+                        + parser.getPositionDescription());
+            }
+
+            return input.success(provider);
+        } finally {
+            sa.recycle();
+        }
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedService.java b/core/java/android/content/pm/parsing/component/ParsedService.java
new file mode 100644
index 0000000..591eef7
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedService.java
@@ -0,0 +1,102 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import static android.content.pm.parsing.ParsingPackageImpl.sForString;
+
+import android.annotation.Nullable;
+import android.content.ComponentName;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+
+import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;
+
+/** @hide **/
+public class ParsedService extends ParsedMainComponent {
+
+    int foregroundServiceType;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    private String permission;
+
+    public ParsedService(ParsedService other) {
+        super(other);
+        this.foregroundServiceType = other.foregroundServiceType;
+        this.permission = other.permission;
+    }
+
+    public ParsedMainComponent setPermission(String permission) {
+        // Empty string must be converted to null
+        this.permission = TextUtils.isEmpty(permission) ? null : permission.intern();
+        return this;
+    }
+
+    public String toString() {
+        StringBuilder sb = new StringBuilder(128);
+        sb.append("Service{");
+        sb.append(Integer.toHexString(System.identityHashCode(this)));
+        sb.append(' ');
+        ComponentName.appendShortString(sb, getPackageName(), getName());
+        sb.append('}');
+        return sb.toString();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        super.writeToParcel(dest, flags);
+        dest.writeInt(this.foregroundServiceType);
+        sForString.parcel(this.permission, dest, flags);
+    }
+
+    public ParsedService() {
+    }
+
+    protected ParsedService(Parcel in) {
+        super(in);
+        this.foregroundServiceType = in.readInt();
+        this.permission = sForString.unparcel(in);
+    }
+
+    public static final Parcelable.Creator<ParsedService> CREATOR = new Creator<ParsedService>() {
+        @Override
+        public ParsedService createFromParcel(Parcel source) {
+            return new ParsedService(source);
+        }
+
+        @Override
+        public ParsedService[] newArray(int size) {
+            return new ParsedService[size];
+        }
+    };
+
+    public int getForegroundServiceType() {
+        return foregroundServiceType;
+    }
+
+    @Nullable
+    public String getPermission() {
+        return permission;
+    }
+}
diff --git a/core/java/android/content/pm/parsing/component/ParsedServiceUtils.java b/core/java/android/content/pm/parsing/component/ParsedServiceUtils.java
new file mode 100644
index 0000000..8a8a066
--- /dev/null
+++ b/core/java/android/content/pm/parsing/component/ParsedServiceUtils.java
@@ -0,0 +1,165 @@
+/*
+ * 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.content.pm.parsing.component;
+
+import static android.content.pm.parsing.component.ComponentParseUtils.flag;
+
+import android.annotation.NonNull;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ServiceInfo;
+import android.content.pm.parsing.ParsingPackage;
+import android.content.pm.parsing.ParsingPackageUtils;
+import android.content.pm.parsing.ParsingUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+
+import com.android.internal.R;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.Objects;
+
+/** @hide */
+public class ParsedServiceUtils {
+
+    private static final String TAG = ParsingPackageUtils.TAG;
+
+    @NonNull
+    public static ParseResult<ParsedService> parseService(String[] separateProcesses,
+            ParsingPackage pkg, Resources res, XmlResourceParser parser, int flags,
+            boolean useRoundIcon, ParseInput input)
+            throws XmlPullParserException, IOException {
+        boolean visibleToEphemeral;
+        boolean setExported;
+
+        final String packageName = pkg.getPackageName();
+        final ParsedService service = new ParsedService();
+        String tag = parser.getName();
+
+        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestService);
+        try {
+            ParseResult<ParsedService> result = ParsedMainComponentUtils.parseMainComponent(
+                    service, tag, separateProcesses, pkg, sa, flags, useRoundIcon, input,
+                    R.styleable.AndroidManifestService_banner,
+                    R.styleable.AndroidManifestService_description,
+                    R.styleable.AndroidManifestService_directBootAware,
+                    R.styleable.AndroidManifestService_enabled,
+                    R.styleable.AndroidManifestService_icon,
+                    R.styleable.AndroidManifestService_label,
+                    R.styleable.AndroidManifestService_logo,
+                    R.styleable.AndroidManifestService_name,
+                    R.styleable.AndroidManifestService_process,
+                    R.styleable.AndroidManifestService_roundIcon,
+                    R.styleable.AndroidManifestService_splitName
+            );
+
+            if (result.isError()) {
+                return result;
+            }
+
+            setExported = sa.hasValue(R.styleable.AndroidManifestService_exported);
+            if (setExported) {
+                service.exported = sa.getBoolean(R.styleable.AndroidManifestService_exported,
+                        false);
+            }
+
+            String permission = sa.getNonConfigurationString(
+                    R.styleable.AndroidManifestService_permission, 0);
+            service.setPermission(permission != null ? permission : pkg.getPermission());
+
+            service.foregroundServiceType = sa.getInt(
+                    R.styleable.AndroidManifestService_foregroundServiceType,
+                    ServiceInfo.FOREGROUND_SERVICE_TYPE_NONE);
+
+            service.flags |= flag(ServiceInfo.FLAG_STOP_WITH_TASK,
+                    R.styleable.AndroidManifestService_stopWithTask, sa)
+                    | flag(ServiceInfo.FLAG_ISOLATED_PROCESS,
+                    R.styleable.AndroidManifestService_isolatedProcess, sa)
+                    | flag(ServiceInfo.FLAG_EXTERNAL_SERVICE,
+                    R.styleable.AndroidManifestService_externalService, sa)
+                    | flag(ServiceInfo.FLAG_USE_APP_ZYGOTE,
+                    R.styleable.AndroidManifestService_useAppZygote, sa)
+                    | flag(ServiceInfo.FLAG_SINGLE_USER,
+                    R.styleable.AndroidManifestService_singleUser, sa);
+
+            visibleToEphemeral = sa.getBoolean(
+                    R.styleable.AndroidManifestService_visibleToInstantApps, false);
+            if (visibleToEphemeral) {
+                service.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP;
+                pkg.setVisibleToInstantApps(true);
+            }
+        } finally {
+            sa.recycle();
+        }
+
+        if (pkg.isCantSaveState()) {
+            // A heavy-weight application can not have services in its main process
+            // We can do direct compare because we intern all strings.
+            if (Objects.equals(service.getProcessName(), packageName)) {
+                return input.error("Heavy-weight applications can not have services "
+                        + "in main process");
+            }
+        }
+        final int depth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG
+                || parser.getDepth() > depth)) {
+            if (type != XmlPullParser.START_TAG) {
+                continue;
+            }
+
+            final ParseResult parseResult;
+            switch (parser.getName()) {
+                case "intent-filter":
+                    ParseResult<ParsedIntentInfo> intentResult = ParsedMainComponentUtils
+                            .parseIntentFilter(service, pkg, res, parser, visibleToEphemeral,
+                                    true /*allowGlobs*/, false /*allowAutoVerify*/,
+                                    false /*allowImplicitEphemeralVisibility*/,
+                                    false /*failOnNoActions*/, input);
+                    parseResult = intentResult;
+                    if (intentResult.isSuccess()) {
+                        ParsedIntentInfo intent = intentResult.getResult();
+                        service.order = Math.max(intent.getOrder(), service.order);
+                        service.addIntent(intent);
+                    }
+                    break;
+                case "meta-data":
+                    parseResult = ParsedComponentUtils.addMetaData(service, pkg, res, parser, input);
+                    break;
+                default:
+                    parseResult = ParsingUtils.unknownTag(tag, pkg, parser, input);
+                    break;
+            }
+
+            if (parseResult.isError()) {
+                return input.error(parseResult);
+            }
+        }
+
+        if (!setExported) {
+            service.exported = service.getIntents().size() > 0;
+        }
+
+        return input.success(service);
+    }
+}
diff --git a/core/java/android/content/pm/parsing/library/AndroidHidlUpdater.java b/core/java/android/content/pm/parsing/library/AndroidHidlUpdater.java
deleted file mode 100644
index 81b4bc5..0000000
--- a/core/java/android/content/pm/parsing/library/AndroidHidlUpdater.java
+++ /dev/null
@@ -1,50 +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.content.pm.parsing.library;
-
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_HIDL_BASE;
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_HIDL_MANAGER;
-
-import android.content.pm.parsing.ParsedPackage;
-import android.os.Build;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-/**
- * Updates a package to ensure that if it targets <= P that the android.hidl.base-V1.0-java
- * and android.hidl.manager-V1.0-java libraries are included by default.
- *
- * @hide
- */
-@VisibleForTesting
-public class AndroidHidlUpdater extends PackageSharedLibraryUpdater {
-
-    @Override
-    public void updatePackage(ParsedPackage parsedPackage) {
-        // This was the default <= P and is maintained for backwards compatibility.
-        boolean isLegacy = parsedPackage.getTargetSdkVersion() <= Build.VERSION_CODES.P;
-        // Only system apps use these libraries
-        boolean isSystem = parsedPackage.isSystemApp() || parsedPackage.isUpdatedSystemApp();
-
-        if (isLegacy && isSystem) {
-            prefixRequiredLibrary(parsedPackage, ANDROID_HIDL_BASE);
-            prefixRequiredLibrary(parsedPackage, ANDROID_HIDL_MANAGER);
-        } else {
-            removeLibrary(parsedPackage, ANDROID_HIDL_BASE);
-            removeLibrary(parsedPackage, ANDROID_HIDL_MANAGER);
-        }
-    }
-}
diff --git a/core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java b/core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java
deleted file mode 100644
index 5fbe5b9..0000000
--- a/core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.content.pm.parsing.library;
-
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_BASE;
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_RUNNER;
-
-import android.compat.annotation.ChangeId;
-import android.compat.annotation.EnabledAfter;
-import android.content.Context;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ParsedPackage;
-import android.os.Build;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.util.Log;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.compat.IPlatformCompat;
-
-/**
- * Updates a package to ensure that if it targets <= Q that the android.test.base library is
- * included by default.
- *
- * <p>This is separated out so that it can be conditionally included at build time depending on
- * whether android.test.base is on the bootclasspath or not. In order to include this at
- * build time, and remove android.test.base from the bootclasspath pass
- * REMOVE_ATB_FROM_BCP=true on the build command line, otherwise this class will not be included
- * and the
- *
- * @hide
- */
-@VisibleForTesting
-public class AndroidTestBaseUpdater extends PackageSharedLibraryUpdater {
-    private static final String TAG = "AndroidTestBaseUpdater";
-
-    /**
-     * Remove android.test.base library for apps that target SDK R or more and do not depend on
-     * android.test.runner (as it depends on classes from the android.test.base library).
-     */
-    @ChangeId
-    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
-    private static final long REMOVE_ANDROID_TEST_BASE = 133396946L;
-
-    private static boolean isChangeEnabled(AndroidPackage pkg) {
-        // Do not ask platform compat for system apps to prevent a boot time regression in tests.
-        // b/142558883.
-        if (!pkg.isSystem()) {
-            IPlatformCompat platformCompat = IPlatformCompat.Stub.asInterface(
-                    ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
-            try {
-                return platformCompat.isChangeEnabled(REMOVE_ANDROID_TEST_BASE,
-                        pkg.toAppInfoWithoutState());
-            } catch (RemoteException | NullPointerException e) {
-                Log.e(TAG, "Failed to get a response from PLATFORM_COMPAT_SERVICE", e);
-            }
-        }
-        // Fall back to previous behaviour.
-        return pkg.getTargetSdkVersion() > Build.VERSION_CODES.Q;
-    }
-
-    @Override
-    public void updatePackage(ParsedPackage pkg) {
-        // Packages targeted at <= Q expect the classes in the android.test.base library
-        // to be accessible so this maintains backward compatibility by adding the
-        // android.test.base library to those packages.
-        if (!isChangeEnabled(pkg)) {
-            prefixRequiredLibrary(pkg, ANDROID_TEST_BASE);
-        } else {
-            // If a package already depends on android.test.runner then add a dependency on
-            // android.test.base because android.test.runner depends on classes from the
-            // android.test.base library.
-            prefixImplicitDependency(pkg, ANDROID_TEST_RUNNER, ANDROID_TEST_BASE);
-        }
-    }
-}
diff --git a/core/java/android/content/pm/parsing/library/OrgApacheHttpLegacyUpdater.java b/core/java/android/content/pm/parsing/library/OrgApacheHttpLegacyUpdater.java
deleted file mode 100644
index 613a06b..0000000
--- a/core/java/android/content/pm/parsing/library/OrgApacheHttpLegacyUpdater.java
+++ /dev/null
@@ -1,48 +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.content.pm.parsing.library;
-
-import static android.content.pm.parsing.library.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY;
-
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ParsedPackage;
-import android.os.Build;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-/**
- * Updates a package to ensure that if it targets < P that the org.apache.http.legacy library is
- * included by default.
- *
- * @hide
- */
-@VisibleForTesting
-public class OrgApacheHttpLegacyUpdater extends PackageSharedLibraryUpdater {
-
-    private static boolean apkTargetsApiLevelLessThanOrEqualToOMR1(AndroidPackage pkg) {
-        return pkg.getTargetSdkVersion() < Build.VERSION_CODES.P;
-    }
-
-    @Override
-    public void updatePackage(ParsedPackage parsedPackage) {
-        // Packages targeted at <= O_MR1 expect the classes in the org.apache.http.legacy library
-        // to be accessible so this maintains backward compatibility by adding the
-        // org.apache.http.legacy library to those packages.
-        if (apkTargetsApiLevelLessThanOrEqualToOMR1(parsedPackage)) {
-            prefixRequiredLibrary(parsedPackage, ORG_APACHE_HTTP_LEGACY);
-        }
-    }
-}
diff --git a/core/java/android/content/pm/parsing/library/PackageBackwardCompatibility.java b/core/java/android/content/pm/parsing/library/PackageBackwardCompatibility.java
deleted file mode 100644
index 1220fc4..0000000
--- a/core/java/android/content/pm/parsing/library/PackageBackwardCompatibility.java
+++ /dev/null
@@ -1,199 +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.content.pm.parsing.library;
-
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_BASE;
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_MOCK;
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_RUNNER;
-import static android.content.pm.parsing.library.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY;
-
-import android.content.pm.parsing.ParsedPackage;
-import android.util.Log;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Supplier;
-
-/**
- * Modifies {@link ParsedPackage} in order to maintain backwards compatibility.
- *
- * @hide
- */
-@VisibleForTesting
-public class PackageBackwardCompatibility extends PackageSharedLibraryUpdater {
-
-    private static final String TAG = PackageBackwardCompatibility.class.getSimpleName();
-
-    private static final PackageBackwardCompatibility INSTANCE;
-
-    static {
-        final List<PackageSharedLibraryUpdater> packageUpdaters = new ArrayList<>();
-
-        // Automatically add the org.apache.http.legacy library to the app classpath if the app
-        // targets < P.
-        packageUpdaters.add(new OrgApacheHttpLegacyUpdater());
-
-        packageUpdaters.add(new AndroidHidlUpdater());
-
-        // Add this before adding AndroidTestBaseUpdater so that android.test.base comes before
-        // android.test.mock.
-        packageUpdaters.add(new AndroidTestRunnerSplitUpdater());
-
-        // Attempt to load and add the optional updater that will only be available when
-        // REMOVE_ATB_FROM_BCP=true. If that could not be found then add the default updater that
-        // will remove any references to org.apache.http.library from the package so that it does
-        // not try and load the library when it is on the bootclasspath.
-        boolean bootClassPathContainsATB = !addOptionalUpdater(packageUpdaters,
-                "android.content.pm.parsing.library.AndroidTestBaseUpdater",
-                RemoveUnnecessaryAndroidTestBaseLibrary::new);
-
-        PackageSharedLibraryUpdater[] updaterArray = packageUpdaters
-                .toArray(new PackageSharedLibraryUpdater[0]);
-        INSTANCE = new PackageBackwardCompatibility(
-                bootClassPathContainsATB, updaterArray);
-    }
-
-    /**
-     * Add an optional {@link PackageSharedLibraryUpdater} instance to the list, if it could not be
-     * found then add a default instance instead.
-     *
-     * @param packageUpdaters the list to update.
-     * @param className the name of the optional class.
-     * @param defaultUpdater the supplier of the default instance.
-     * @return true if the optional updater was added false otherwise.
-     */
-    private static boolean addOptionalUpdater(List<PackageSharedLibraryUpdater> packageUpdaters,
-            String className, Supplier<PackageSharedLibraryUpdater> defaultUpdater) {
-        Class<? extends PackageSharedLibraryUpdater> clazz;
-        try {
-            clazz = (PackageBackwardCompatibility.class.getClassLoader()
-                    .loadClass(className)
-                    .asSubclass(PackageSharedLibraryUpdater.class));
-            Log.i(TAG, "Loaded " + className);
-        } catch (ClassNotFoundException e) {
-            Log.i(TAG, "Could not find " + className + ", ignoring");
-            clazz = null;
-        }
-
-        boolean usedOptional = false;
-        PackageSharedLibraryUpdater updater;
-        if (clazz == null) {
-            updater = defaultUpdater.get();
-        } else {
-            try {
-                updater = clazz.getConstructor().newInstance();
-                usedOptional = true;
-            } catch (ReflectiveOperationException e) {
-                throw new IllegalStateException("Could not create instance of " + className, e);
-            }
-        }
-        packageUpdaters.add(updater);
-        return usedOptional;
-    }
-
-    @VisibleForTesting
-    public static PackageSharedLibraryUpdater getInstance() {
-        return INSTANCE;
-    }
-
-    private final boolean mBootClassPathContainsATB;
-
-    private final PackageSharedLibraryUpdater[] mPackageUpdaters;
-
-    private PackageBackwardCompatibility(
-            boolean bootClassPathContainsATB, PackageSharedLibraryUpdater[] packageUpdaters) {
-        this.mBootClassPathContainsATB = bootClassPathContainsATB;
-        this.mPackageUpdaters = packageUpdaters;
-    }
-
-    /**
-     * Modify the shared libraries in the supplied {@link ParsedPackage} to maintain backwards
-     * compatibility.
-     *
-     * @param parsedPackage the {@link ParsedPackage} to modify.
-     */
-    @VisibleForTesting
-    public static void modifySharedLibraries(ParsedPackage parsedPackage) {
-        INSTANCE.updatePackage(parsedPackage);
-    }
-
-    @Override
-    public void updatePackage(ParsedPackage parsedPackage) {
-        for (PackageSharedLibraryUpdater packageUpdater : mPackageUpdaters) {
-            packageUpdater.updatePackage(parsedPackage);
-        }
-    }
-
-    /**
-     * True if the android.test.base is on the bootclasspath, false otherwise.
-     */
-    @VisibleForTesting
-    public static boolean bootClassPathContainsATB() {
-        return INSTANCE.mBootClassPathContainsATB;
-    }
-
-    /**
-     * Add android.test.mock dependency for any APK that depends on android.test.runner.
-     *
-     * <p>This is needed to maintain backwards compatibility as in previous versions of Android the
-     * android.test.runner library included the classes from android.test.mock which have since
-     * been split out into a separate library.
-     *
-     * @hide
-     */
-    @VisibleForTesting
-    public static class AndroidTestRunnerSplitUpdater extends PackageSharedLibraryUpdater {
-
-        @Override
-        public void updatePackage(ParsedPackage parsedPackage) {
-            // android.test.runner has a dependency on android.test.mock so if android.test.runner
-            // is present but android.test.mock is not then add android.test.mock.
-            prefixImplicitDependency(parsedPackage, ANDROID_TEST_RUNNER, ANDROID_TEST_MOCK);
-        }
-    }
-
-    /**
-     * Remove any usages of org.apache.http.legacy from the shared library as the library is on the
-     * bootclasspath.
-     */
-    @VisibleForTesting
-    public static class RemoveUnnecessaryOrgApacheHttpLegacyLibrary
-            extends PackageSharedLibraryUpdater {
-
-        @Override
-        public void updatePackage(ParsedPackage parsedPackage) {
-            removeLibrary(parsedPackage, ORG_APACHE_HTTP_LEGACY);
-        }
-
-    }
-
-    /**
-     * Remove any usages of android.test.base from the shared library as the library is on the
-     * bootclasspath.
-     */
-    @VisibleForTesting
-    public static class RemoveUnnecessaryAndroidTestBaseLibrary
-            extends PackageSharedLibraryUpdater {
-
-        @Override
-        public void updatePackage(ParsedPackage parsedPackage) {
-            removeLibrary(parsedPackage, ANDROID_TEST_BASE);
-        }
-    }
-}
diff --git a/core/java/android/content/pm/parsing/library/PackageSharedLibraryUpdater.java b/core/java/android/content/pm/parsing/library/PackageSharedLibraryUpdater.java
deleted file mode 100644
index 8b27d14..0000000
--- a/core/java/android/content/pm/parsing/library/PackageSharedLibraryUpdater.java
+++ /dev/null
@@ -1,97 +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.content.pm.parsing.library;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.content.pm.parsing.ParsedPackage;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.ArrayUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Base for classes that update a {@link ParsedPackage}'s shared libraries.
- *
- * @hide
- */
-@VisibleForTesting
-public abstract class PackageSharedLibraryUpdater {
-
-    /**
-     * Update the package's shared libraries.
-     *
-     * @param parsedPackage the package to update.
-     */
-    public abstract void updatePackage(ParsedPackage parsedPackage);
-
-    static void removeLibrary(ParsedPackage parsedPackage, String libraryName) {
-        parsedPackage.removeUsesLibrary(libraryName)
-                .removeUsesOptionalLibrary(libraryName);
-    }
-
-    static @NonNull
-            <T> ArrayList<T> prefix(@Nullable ArrayList<T> cur, T val) {
-        if (cur == null) {
-            cur = new ArrayList<>();
-        }
-        cur.add(0, val);
-        return cur;
-    }
-
-    private static boolean isLibraryPresent(List<String> usesLibraries,
-            List<String> usesOptionalLibraries, String apacheHttpLegacy) {
-        return ArrayUtils.contains(usesLibraries, apacheHttpLegacy)
-                || ArrayUtils.contains(usesOptionalLibraries, apacheHttpLegacy);
-    }
-
-    /**
-     * Add an implicit dependency.
-     *
-     * <p>If the package has an existing dependency on {@code existingLibrary} then prefix it with
-     * the {@code implicitDependency} if it is not already in the list of libraries.
-     *
-     * @param parsedPackage the {@link ParsedPackage} to update.
-     * @param existingLibrary the existing library.
-     * @param implicitDependency the implicit dependency to add
-     */
-    void prefixImplicitDependency(ParsedPackage parsedPackage, String existingLibrary,
-            String implicitDependency) {
-        List<String> usesLibraries = parsedPackage.getUsesLibraries();
-        List<String> usesOptionalLibraries = parsedPackage.getUsesOptionalLibraries();
-
-        if (!isLibraryPresent(usesLibraries, usesOptionalLibraries, implicitDependency)) {
-            if (ArrayUtils.contains(usesLibraries, existingLibrary)) {
-                parsedPackage.addUsesLibrary(0, implicitDependency);
-            } else if (ArrayUtils.contains(usesOptionalLibraries, existingLibrary)) {
-                parsedPackage.addUsesOptionalLibrary(0, implicitDependency);
-            }
-        }
-    }
-
-    void prefixRequiredLibrary(ParsedPackage parsedPackage, String libraryName) {
-        List<String> usesLibraries = parsedPackage.getUsesLibraries();
-        List<String> usesOptionalLibraries = parsedPackage.getUsesOptionalLibraries();
-
-        boolean alreadyPresent = isLibraryPresent(
-                usesLibraries, usesOptionalLibraries, libraryName);
-        if (!alreadyPresent) {
-            parsedPackage.addUsesLibrary(0, libraryName);
-        }
-    }
-}
diff --git a/core/java/android/content/pm/parsing/library/SharedLibraryNames.java b/core/java/android/content/pm/parsing/library/SharedLibraryNames.java
deleted file mode 100644
index 7b691c0..0000000
--- a/core/java/android/content/pm/parsing/library/SharedLibraryNames.java
+++ /dev/null
@@ -1,36 +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.content.pm.parsing.library;
-
-/**
- * A set of shared library names
- *
- * @hide
- */
-public class SharedLibraryNames {
-
-    static final String ANDROID_HIDL_BASE = "android.hidl.base-V1.0-java";
-
-    static final String ANDROID_HIDL_MANAGER = "android.hidl.manager-V1.0-java";
-
-    static final String ANDROID_TEST_BASE = "android.test.base";
-
-    static final String ANDROID_TEST_MOCK = "android.test.mock";
-
-    static final String ANDROID_TEST_RUNNER = "android.test.runner";
-
-    public static final String ORG_APACHE_HTTP_LEGACY = "org.apache.http.legacy";
-}
diff --git a/core/java/android/content/pm/parsing/result/ParseInput.java b/core/java/android/content/pm/parsing/result/ParseInput.java
new file mode 100644
index 0000000..c468506
--- /dev/null
+++ b/core/java/android/content/pm/parsing/result/ParseInput.java
@@ -0,0 +1,70 @@
+/*
+ * 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.content.pm.parsing.result;
+
+import android.annotation.Hide;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.PackageManager;
+
+/**
+ * Used as a method parameter which is then transformed into a {@link ParseResult}. This is
+ * generalized as it doesn't matter what type this input is for. It's simply to hide the
+ * methods of {@link ParseResult}.
+ *
+ * @hide
+ */
+public interface ParseInput {
+
+    <ResultType> ParseResult<ResultType> success(ResultType result);
+
+    /** @see #error(int, String, Exception) */
+    <ResultType> ParseResult<ResultType> error(int parseError);
+
+    /**
+     * This will assign errorCode to {@link PackageManager#INSTALL_PARSE_FAILED_MANIFEST_MALFORMED}.
+     * @see #error(int, String, Exception)
+     */
+    <ResultType> ParseResult<ResultType> error(@NonNull String parseError);
+
+    /** @see #error(int, String, Exception) */
+    <ResultType> ParseResult<ResultType> error(int parseError, @Nullable String errorMessage);
+
+    /**
+     * Marks this as an error result. When this method is called, the return value <b>must</b>
+     * be returned to the exit of the parent method that took in this {@link ParseInput} as a
+     * parameter.
+     *
+     * The calling site of that method is then expected to check the result for error, and
+     * continue to bubble up if it is an error.
+     *
+     * Or, if the code explicitly handles an error,
+     * {@link ParseResult#ignoreError()} should be called.
+     *
+     * If the result {@link ParseResult#isSuccess()}, then it can be used as-is, as
+     * overlapping/consecutive successes are allowed.
+     */
+    <ResultType> ParseResult<ResultType> error(int parseError, @Nullable String errorMessage,
+            @Nullable Exception exception);
+
+    /**
+     * Moves the error in {@param result} to this input's type. In practice this does nothing
+     * but cast the type of the {@link ParseResult} for type safety, since the parameter
+     * and the receiver should be the same object.
+     */
+    <ResultType> ParseResult<ResultType> error(ParseResult result);
+}
diff --git a/core/java/android/content/pm/parsing/result/ParseResult.java b/core/java/android/content/pm/parsing/result/ParseResult.java
new file mode 100644
index 0000000..338048c
--- /dev/null
+++ b/core/java/android/content/pm/parsing/result/ParseResult.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content.pm.parsing.result;
+
+import android.annotation.Nullable;
+import android.content.pm.PackageParser;
+
+/**
+ * The output side of {@link ParseInput}, which must result from a method call on
+ * {@link ParseInput}.
+ *
+ * When using this class, keep in mind that all {@link ParseInput}s and {@link ParseResult}s
+ * are the exact same object, scoped to a per {@link PackageParser} instance, per thread basis,
+ * thrown around and casted everywhere for type safety.
+ *
+ * @hide
+ */
+public interface ParseResult<ResultType> {
+
+    /**
+     * Un-marks this result as an error, also allowing it to be re-used as {@link ParseInput}.
+     *
+     * This should only be used in cases where it's absolutely certain that error handling is
+     * irrelevant. Such as for backwards compatibility where it previously didn't fail and that
+     * behavior has to be maintained.
+     *
+     * Mostly an alias for readability.
+     */
+    void ignoreError();
+
+    /**
+     * Returns true if the result is not an error and thus contains a valid object.
+     *
+     * For backwards-compat reasons, it's possible to have a successful result with a null
+     * result object, depending on the behavior of the parsing method.
+     *
+     * It is expected that every method calls this to check for an error state to bubble up
+     * the error to its parent method after every parse method call.
+     *
+     * It is not always necessary to check this, as it is valid to return any ParseResult from
+     * a method so long as the type matches <b>without casting it</b>.
+     *
+     * The infrastructure is set up such that as long as a result is the proper type and
+     * the right side of success vs. error, it can be bubble up through all its parent methods.
+     */
+    boolean isSuccess();
+
+    /**
+     * Opposite of {@link #isSuccess()} for readability.
+     */
+    boolean isError();
+
+    ResultType getResult();
+
+    int getErrorCode();
+
+    @Nullable
+    String getErrorMessage();
+
+    @Nullable
+    Exception getException();
+}
diff --git a/core/java/android/content/pm/parsing/result/ParseTypeImpl.java b/core/java/android/content/pm/parsing/result/ParseTypeImpl.java
new file mode 100644
index 0000000..9b22f09
--- /dev/null
+++ b/core/java/android/content/pm/parsing/result/ParseTypeImpl.java
@@ -0,0 +1,145 @@
+/*
+ * 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.content.pm.parsing.result;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.PackageManager;
+import android.content.pm.parsing.ParsingUtils;
+import android.util.Log;
+
+import java.util.Arrays;
+
+/** @hide */
+public class ParseTypeImpl implements ParseInput, ParseResult<Object> {
+
+    private static final String TAG = ParsingUtils.TAG;
+
+    private static final boolean DEBUG_FILL_STACK_TRACE = false;
+
+    private static final boolean DEBUG_LOG_ON_ERROR = false;
+
+    private Object result;
+
+    private int errorCode = PackageManager.INSTALL_SUCCEEDED;
+
+    @Nullable
+    private String errorMessage;
+
+    @Nullable
+    private Exception exception;
+
+    public ParseInput reset() {
+        this.result = null;
+        this.errorCode = PackageManager.INSTALL_SUCCEEDED;
+        this.errorMessage = null;
+        this.exception = null;
+        return this;
+    }
+
+    @Override
+    public void ignoreError() {
+        reset();
+    }
+
+    @Override
+    public <ResultType> ParseResult<ResultType> success(ResultType result) {
+        if (errorCode != PackageManager.INSTALL_SUCCEEDED || errorMessage != null) {
+            throw new IllegalStateException("Cannot set to success after set to error, was "
+                    + errorMessage, exception);
+        }
+        this.result = result;
+        //noinspection unchecked
+        return (ParseResult<ResultType>) this;
+    }
+
+    @Override
+    public <ResultType> ParseResult<ResultType> error(int parseError) {
+        return error(parseError, null);
+    }
+
+    @Override
+    public <ResultType> ParseResult<ResultType> error(@NonNull String parseError) {
+        return error(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, parseError);
+    }
+
+    @Override
+    public <ResultType> ParseResult<ResultType> error(int errorCode,
+            @Nullable String errorMessage) {
+        return error(errorCode, errorMessage, null);
+    }
+
+    @Override
+    public <ResultType> ParseResult<ResultType> error(ParseResult intentResult) {
+        return error(intentResult.getErrorCode(), intentResult.getErrorMessage());
+    }
+
+    @Override
+    public <ResultType> ParseResult<ResultType> error(int errorCode, @Nullable String errorMessage,
+            Exception exception) {
+        this.errorCode = errorCode;
+        this.errorMessage = errorMessage;
+        this.exception = exception;
+
+        if (DEBUG_FILL_STACK_TRACE) {
+            if (exception == null) {
+                this.exception = new Exception();
+            }
+        }
+
+        if (DEBUG_LOG_ON_ERROR) {
+            Exception exceptionToLog = this.exception != null ? this.exception : new Exception();
+            Log.w(TAG, "ParseInput set to error " + errorCode + ", " + errorMessage,
+                    exceptionToLog);
+        }
+
+        //noinspection unchecked
+        return (ParseResult<ResultType>) this;
+    }
+
+    @Override
+    public Object getResult() {
+        return this.result;
+    }
+
+    @Override
+    public boolean isSuccess() {
+        return errorCode == PackageManager.INSTALL_SUCCEEDED;
+    }
+
+    @Override
+    public boolean isError() {
+        return !isSuccess();
+    }
+
+    @Override
+    public int getErrorCode() {
+        return errorCode;
+    }
+
+    @Nullable
+    @Override
+    public String getErrorMessage() {
+        return errorMessage;
+    }
+
+    @Nullable
+    @Override
+    public Exception getException() {
+        return exception;
+    }
+}
diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java
index 1b01758..f295f8c 100644
--- a/core/java/android/content/res/AssetManager.java
+++ b/core/java/android/content/res/AssetManager.java
@@ -38,6 +38,7 @@
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.content.om.OverlayConfig;
 
 import java.io.FileDescriptor;
 import java.io.FileNotFoundException;
@@ -242,14 +243,11 @@
         try {
             final ArrayList<ApkAssets> apkAssets = new ArrayList<>();
             apkAssets.add(ApkAssets.loadFromPath(frameworkPath, true /*system*/));
-            final String[] systemIdmapPaths = nativeCreateIdmapsForStaticOverlaysTargetingAndroid();
-            if (systemIdmapPaths != null) {
-                for (String idmapPath : systemIdmapPaths) {
-                    apkAssets.add(ApkAssets.loadOverlayFromPath(idmapPath, true /*system*/));
-                }
-            } else {
-                Log.w(TAG, "'idmap2 --scan' failed: no static=\"true\" overlays targeting "
-                        + "\"android\" will be loaded");
+
+            final String[] systemIdmapPaths =
+                    OverlayConfig.getZygoteInstance().createImmutableFrameworkIdmapsInZygote();
+            for (String idmapPath : systemIdmapPaths) {
+                apkAssets.add(ApkAssets.loadOverlayFromPath(idmapPath, true /*system*/));
             }
 
             sSystemApkAssetsSet = new ArraySet<>(apkAssets);
diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java
index 8c358cc..6a9e0aa 100644
--- a/core/java/android/content/res/Configuration.java
+++ b/core/java/android/content/res/Configuration.java
@@ -45,6 +45,7 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.TestApi;
+import android.app.UiModeManager;
 import android.app.WindowConfiguration;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.LocaleProto;
@@ -1975,6 +1976,15 @@
         readFromParcel(source);
     }
 
+
+    /**
+     * Retuns whether the configuration is in night mode
+     * @return true if night mode is active and false otherwise
+     */
+    public boolean isNightModeActive() {
+        return (uiMode & UI_MODE_NIGHT_MASK) == UI_MODE_NIGHT_YES;
+    }
+
     public int compareTo(Configuration that) {
         int n;
         float a = this.fontScale;
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 471e83c..cb809da 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -62,6 +62,7 @@
 import android.view.ViewDebug;
 import android.view.ViewHierarchyEncoder;
 
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.GrowingArrayUtils;
@@ -112,7 +113,7 @@
     static final String TAG = "Resources";
 
     private static final Object sSync = new Object();
-    private final Object mLock = new Object();
+    private final Object mUpdateLock = new Object();
 
     // Used by BridgeResources in layoutlib
     @UnsupportedAppUsage
@@ -139,6 +140,7 @@
     @UnsupportedAppUsage
     final ClassLoader mClassLoader;
 
+    @GuardedBy("mUpdateLock")
     private UpdateCallbacks mCallbacks = null;
 
     /**
@@ -2375,6 +2377,7 @@
      *
      * <p>Loaders are listed in increasing precedence order. A loader will override the resources
      * and assets of loaders listed before itself.
+     * @hide
      */
     @NonNull
     public List<ResourcesLoader> getLoaders() {
@@ -2382,87 +2385,81 @@
     }
 
     /**
-     * Appends a loader to the end of the loader list. If the loader is already present in the
-     * loader list, the list will not be modified.
-     *
-     * @param loader the loader to add
-     */
-    public void addLoader(@NonNull ResourcesLoader loader) {
-        synchronized (mLock) {
-            checkCallbacksRegistered();
-
-            final List<ResourcesLoader> loaders = new ArrayList<>(
-                    mResourcesImpl.getAssets().getLoaders());
-            if (loaders.contains(loader)) {
-                return;
-            }
-
-            loaders.add(loader);
-            mCallbacks.onLoadersChanged(this, loaders);
-            loader.registerOnProvidersChangedCallback(this, mCallbacks);
-        }
-    }
-
-    /**
-     * Removes a loader from the loaders. If the loader is not present in the loader list, the list
+     * Adds a loader to the list of loaders. If the loader is already present in the list, the list
      * will not be modified.
      *
-     * @param loader the loader to remove
+     * @param loaders the loaders to add
      */
-    public void removeLoader(@NonNull ResourcesLoader loader) {
-        synchronized (mLock) {
+    public void addLoaders(@NonNull ResourcesLoader... loaders) {
+        synchronized (mUpdateLock) {
             checkCallbacksRegistered();
+            final List<ResourcesLoader> newLoaders =
+                    new ArrayList<>(mResourcesImpl.getAssets().getLoaders());
+            final ArraySet<ResourcesLoader> loaderSet = new ArraySet<>(newLoaders);
 
-            final List<ResourcesLoader> loaders = new ArrayList<>(
-                    mResourcesImpl.getAssets().getLoaders());
-            if (!loaders.remove(loader)) {
+            for (int i = 0; i < loaders.length; i++) {
+                final ResourcesLoader loader = loaders[i];
+                if (!loaderSet.contains(loader)) {
+                    newLoaders.add(loader);
+                }
+            }
+
+            if (loaderSet.size() == newLoaders.size()) {
                 return;
             }
 
-            mCallbacks.onLoadersChanged(this, loaders);
-            loader.unregisterOnProvidersChangedCallback(this);
+            mCallbacks.onLoadersChanged(this, newLoaders);
+            for (int i = loaderSet.size(), n = newLoaders.size(); i < n; i++) {
+                newLoaders.get(i).registerOnProvidersChangedCallback(this, mCallbacks);
+            }
         }
     }
 
     /**
-     * Sets the list of loaders.
+     * Removes loaders from the list of loaders. If the loader is not present in the list, the list
+     * will not be modified.
      *
-     * @param loaders the new loaders
+     * @param loaders the loaders to remove
      */
-    public void setLoaders(@NonNull List<ResourcesLoader> loaders) {
-        synchronized (mLock) {
+    public void removeLoaders(@NonNull ResourcesLoader... loaders) {
+        synchronized (mUpdateLock) {
             checkCallbacksRegistered();
-
+            final ArraySet<ResourcesLoader> removedLoaders = new ArraySet<>(loaders);
+            final List<ResourcesLoader> newLoaders = new ArrayList<>();
             final List<ResourcesLoader> oldLoaders = mResourcesImpl.getAssets().getLoaders();
-            int index = 0;
-            boolean modified = loaders.size() != oldLoaders.size();
-            final ArraySet<ResourcesLoader> seenLoaders = new ArraySet<>();
-            for (final ResourcesLoader loader : loaders) {
-                if (!seenLoaders.add(loader)) {
-                    throw new IllegalArgumentException("Loader " + loader + " present twice");
-                }
 
-                if (!modified && oldLoaders.get(index++) != loader) {
-                    modified = true;
+            for (int i = 0, n = oldLoaders.size(); i < n; i++) {
+                final ResourcesLoader loader = oldLoaders.get(i);
+                if (!removedLoaders.contains(loader)) {
+                    newLoaders.add(loader);
                 }
             }
 
-            if (!modified) {
+            if (oldLoaders.size() == newLoaders.size()) {
                 return;
             }
 
-            mCallbacks.onLoadersChanged(this, loaders);
-            for (int i = 0, n = oldLoaders.size(); i < n; i++) {
-                oldLoaders.get(i).unregisterOnProvidersChangedCallback(this);
-            }
-            for (ResourcesLoader newLoader : loaders) {
-                newLoader.registerOnProvidersChangedCallback(this, mCallbacks);
+            mCallbacks.onLoadersChanged(this, newLoaders);
+            for (int i = 0; i < loaders.length; i++) {
+                loaders[i].unregisterOnProvidersChangedCallback(this);
             }
         }
     }
 
-    /** Removes all {@link ResourcesLoader ResourcesLoader(s)}. */
+    /**
+     * Removes all {@link ResourcesLoader ResourcesLoader(s)}.
+     * @hide
+     */
+    @VisibleForTesting
     public void clearLoaders() {
-        setLoaders(Collections.emptyList());
+        synchronized (mUpdateLock) {
+            checkCallbacksRegistered();
+            final List<ResourcesLoader> newLoaders = Collections.emptyList();
+            final List<ResourcesLoader> oldLoaders = mResourcesImpl.getAssets().getLoaders();
+            mCallbacks.onLoadersChanged(this, newLoaders);
+            for (ResourcesLoader loader : oldLoaders) {
+                loader.unregisterOnProvidersChangedCallback(this);
+            }
+        }
     }
 }
diff --git a/core/java/android/content/res/loader/ResourcesLoader.java b/core/java/android/content/res/loader/ResourcesLoader.java
index 69dacee..58fec60 100644
--- a/core/java/android/content/res/loader/ResourcesLoader.java
+++ b/core/java/android/content/res/loader/ResourcesLoader.java
@@ -40,8 +40,8 @@
  * of {@link ResourcesProvider ResourcesProvider(s)} a loader contains propagates to all Resources
  * objects that use the loader.
  *
- * <p>Loaders retrieved with {@link Resources#getLoaders()} are listed in increasing precedence
- * order. A loader will override the resources and assets of loaders listed before itself.
+ * <p>Loaders must be added to Resources objects in increasing precedence order. A loader will
+ * override the resources and assets of loaders added before itself.
  *
  * <p>Providers retrieved with {@link #getProviders()} are listed in increasing precedence order. A
  * provider will override the resources and assets of providers listed before itself.
diff --git a/core/java/android/content/rollback/RollbackManager.java b/core/java/android/content/rollback/RollbackManager.java
index 73b8a48..7ebeb21 100644
--- a/core/java/android/content/rollback/RollbackManager.java
+++ b/core/java/android/content/rollback/RollbackManager.java
@@ -216,6 +216,10 @@
      * across device reboot, by simulating what happens on reboot without
      * actually rebooting the device.
      *
+     * Note rollbacks in the process of enabling will be lost after calling
+     * this method since they are not persisted yet. Don't call this method
+     * in the middle of the install process.
+     *
      * @throws SecurityException if the caller does not have appropriate permissions.
      *
      * @hide
diff --git a/core/java/android/debug/AdbManager.java b/core/java/android/debug/AdbManager.java
index 0a76bed..7714dd8 100644
--- a/core/java/android/debug/AdbManager.java
+++ b/core/java/android/debug/AdbManager.java
@@ -31,6 +31,114 @@
 public class AdbManager {
     private static final String TAG = "AdbManager";
 
+    /**
+     * Action indicating the state change of wireless debugging. Can be either
+     *   STATUS_CONNECTED
+     *   STATUS_DISCONNECTED
+     *
+     * @hide
+     */
+    public static final String WIRELESS_DEBUG_STATE_CHANGED_ACTION =
+            "com.android.server.adb.WIRELESS_DEBUG_STATUS";
+
+    /**
+     * Contains the list of paired devices.
+     *
+     * @hide
+     */
+    public static final String WIRELESS_DEBUG_PAIRED_DEVICES_ACTION =
+            "com.android.server.adb.WIRELESS_DEBUG_PAIRED_DEVICES";
+
+    /**
+     * Action indicating the status of a pairing. Can be either
+     *   WIRELESS_STATUS_FAIL
+     *   WIRELESS_STATUS_SUCCESS
+     *   WIRELESS_STATUS_CANCELLED
+     *   WIRELESS_STATUS_PAIRING_CODE
+     *   WIRELESS_STATUS_CONNECTED
+     *
+     * @hide
+     */
+    public static final String WIRELESS_DEBUG_PAIRING_RESULT_ACTION =
+            "com.android.server.adb.WIRELESS_DEBUG_PAIRING_RESULT";
+
+    /**
+     * Extra containing the PairDevice map of paired/pairing devices.
+     *
+     * @hide
+     */
+    public static final String WIRELESS_DEVICES_EXTRA = "devices_map";
+
+    /**
+     * The status of the pairing/unpairing.
+     *
+     * @hide
+     */
+    public static final String WIRELESS_STATUS_EXTRA = "status";
+
+    /**
+     * The PairDevice.
+     *
+     * @hide
+     */
+    public static final String WIRELESS_PAIR_DEVICE_EXTRA = "pair_device";
+
+    /**
+     * The six-digit pairing code.
+     *
+     * @hide
+     */
+    public static final String WIRELESS_PAIRING_CODE_EXTRA = "pairing_code";
+
+    /**
+     * The adb connection/pairing port that was opened.
+     *
+     * @hide
+     */
+    public static final String WIRELESS_DEBUG_PORT_EXTRA = "adb_port";
+
+    /**
+     * Status indicating the pairing/unpairing failed.
+     *
+     * @hide
+     */
+    public static final int WIRELESS_STATUS_FAIL = 0;
+
+    /**
+     * Status indicating the pairing/unpairing succeeded.
+     *
+     * @hide
+     */
+    public static final int WIRELESS_STATUS_SUCCESS = 1;
+
+    /**
+     * Status indicating the pairing/unpairing was cancelled.
+     *
+     * @hide
+     */
+    public static final int WIRELESS_STATUS_CANCELLED = 2;
+
+    /**
+     * Status indicating the pairing code for pairing.
+     *
+     * @hide
+     */
+    public static final int WIRELESS_STATUS_PAIRING_CODE = 3;
+
+    /**
+     * Status indicating wireless debugging is connected.
+     *
+     * @hide
+     */
+    public static final int WIRELESS_STATUS_CONNECTED = 4;
+
+    /**
+     * Status indicating wireless debugging is disconnected.
+     *
+     * @hide
+     */
+    public static final int WIRELESS_STATUS_DISCONNECTED = 5;
+
     private final Context mContext;
     private final IAdbManager mService;
 
diff --git a/core/java/android/debug/AdbManagerInternal.java b/core/java/android/debug/AdbManagerInternal.java
index 51eb7fc..0bd9f19 100644
--- a/core/java/android/debug/AdbManagerInternal.java
+++ b/core/java/android/debug/AdbManagerInternal.java
@@ -42,7 +42,7 @@
     /**
      * Returns {@code true} if ADB debugging is enabled.
      */
-    public abstract boolean isAdbEnabled();
+    public abstract boolean isAdbEnabled(byte transportType);
 
     /**
      * Returns the file that contains all of the ADB keys used by the device.
diff --git a/core/java/android/debug/AdbTransportType.aidl b/core/java/android/debug/AdbTransportType.aidl
new file mode 100644
index 0000000..6904615
--- /dev/null
+++ b/core/java/android/debug/AdbTransportType.aidl
@@ -0,0 +1,25 @@
+/*
+ * 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.debug;
+
+/** @hide */
+@Backing(type="byte")
+enum AdbTransportType {
+    USB,
+    WIFI,
+}
+
diff --git a/core/java/android/debug/IAdbManager.aidl b/core/java/android/debug/IAdbManager.aidl
index c48fc07..aea7633 100644
--- a/core/java/android/debug/IAdbManager.aidl
+++ b/core/java/android/debug/IAdbManager.aidl
@@ -43,6 +43,62 @@
     void clearDebuggingKeys();
 
     /**
+     * Allow ADB wireless debugging on the connected network. If {@code alwaysAllow}
+     * is {@code true}, add {@code bssid} to list of networks that the user has
+     * approved.
+     *
+     * @param alwaysAllow if true, add permanently to list of allowed networks
+     * @param bssid BSSID of the network
+     */
+    void allowWirelessDebugging(boolean alwaysAllow, String bssid);
+
+    /**
+     * Deny ADB wireless debugging on the connected network.
+     */
+    void denyWirelessDebugging();
+
+    /**
+     * Returns a Map<String, PairDevice> with the key fingerprint mapped to the device information.
+     */
+    Map getPairedDevices();
+
+    /**
+     * Unpair the device identified by the key fingerprint it uses.
+     *
+     * @param fingerprint fingerprint of the key the device is using.
+     */
+    void unpairDevice(String fingerprint);
+
+    /**
+     * Enables pairing by pairing code. The result of the enable will be sent via intent action
+     * {@link android.debug.AdbManager#WIRELESS_DEBUG_ENABLE_DISCOVER_ACTION}. Furthermore, the
+     * pairing code will also be sent in the intent as an extra
+     * @{link android.debug.AdbManager#WIRELESS_PAIRING_CODE_EXTRA}. Note that only one
+     * pairing method can be enabled at a time, either by pairing code, or by QR code.
+     */
+    void enablePairingByPairingCode();
+
+    /**
+     * Enables pairing by QR code. The result of the enable will be sent via intent action
+     * {@link android.debug.AdbManager#WIRELESS_DEBUG_ENABLE_DISCOVER_ACTION}. Note that only one
+     * pairing method can be enabled at a time, either by pairing code, or by QR code.
+     *
+     * @param serviceName The MDNS service name parsed from the QR code.
+     * @param password The password parsed from the QR code.
+     */
+    void enablePairingByQrCode(String serviceName, String password);
+
+    /**
+     * Returns the network port that adb wireless server is running on.
+     */
+    int getAdbWirelessPort();
+
+    /**
+     * Disables pairing.
+     */
+    void disablePairing();
+
+    /**
      * Returns true if device supports secure Adb over Wi-Fi.
      */
     boolean isAdbWifiSupported();
diff --git a/core/java/android/debug/IAdbTransport.aidl b/core/java/android/debug/IAdbTransport.aidl
index 77211fc93..f018813 100644
--- a/core/java/android/debug/IAdbTransport.aidl
+++ b/core/java/android/debug/IAdbTransport.aidl
@@ -16,7 +16,9 @@
 
 package android.debug;
 
+import android.debug.AdbTransportType;
+
 /** @hide */
 interface IAdbTransport {
-    void onAdbEnabled(boolean enabled);
+    void onAdbEnabled(boolean enabled, in AdbTransportType type);
 }
diff --git a/core/java/android/debug/PairDevice.java b/core/java/android/debug/PairDevice.java
new file mode 100644
index 0000000..2d5b446
--- /dev/null
+++ b/core/java/android/debug/PairDevice.java
@@ -0,0 +1,112 @@
+/*
+ * 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.debug;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.annotations.Immutable;
+import com.android.internal.util.Preconditions;
+
+/**
+ * Contains information about the client in an ADB connection.
+ * @hide
+ */
+@Immutable
+public class PairDevice implements Parcelable {
+    /**
+     * The human-readable name of the device.
+     */
+    @NonNull private final String mName;
+
+    /**
+     * The device's guid.
+     */
+    @NonNull private final String mGuid;
+
+    /**
+     * Indicates whether the device is currently connected to adbd.
+     */
+    private final boolean mConnected;
+
+    public PairDevice(@NonNull String name, @NonNull String guid, boolean connected) {
+        Preconditions.checkStringNotEmpty(name);
+        Preconditions.checkStringNotEmpty(guid);
+        mName = name;
+        mGuid = guid;
+        mConnected = connected;
+    }
+
+    /**
+     * @return the device name.
+     */
+    @NonNull
+    public String getDeviceName() {
+        return mName;
+    }
+
+    /**
+     * @return the device GUID.
+     */
+    @NonNull
+    public String getGuid() {
+        return mGuid;
+    }
+
+    /**
+     * @return the adb connection state of the device.
+     */
+    public boolean isConnected() {
+        return mConnected;
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeString(mName);
+        dest.writeString(mGuid);
+        dest.writeBoolean(mConnected);
+    }
+
+    /**
+     * @return Human-readable info about the object.
+     */
+    @Override
+    public String toString() {
+        return "\n" + mName + "\n" + mGuid + "\n" + mConnected;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @NonNull
+    public static final Parcelable.Creator<PairDevice> CREATOR =
+            new Creator<PairDevice>() {
+                @Override
+                public PairDevice createFromParcel(Parcel source) {
+                    return new PairDevice(source.readString(), source.readString(),
+                            source.readBoolean());
+                }
+
+                @Override
+                public PairDevice[] newArray(int size) {
+                    return new PairDevice[size];
+                }
+            };
+}
diff --git a/core/java/android/hardware/biometrics/BiometricConstants.java b/core/java/android/hardware/biometrics/BiometricConstants.java
index 5a13651..add67aa 100644
--- a/core/java/android/hardware/biometrics/BiometricConstants.java
+++ b/core/java/android/hardware/biometrics/BiometricConstants.java
@@ -132,6 +132,14 @@
     int BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL = 14;
 
     /**
+     * A security vulnerability has been discovered and the sensor is unavailable until a
+     * security update has addressed this issue. This error can be received if for example,
+     * authentication was requested with {@link Authenticators#BIOMETRIC_STRONG}, but the
+     * sensor's strength can currently only meet {@link Authenticators#BIOMETRIC_WEAK}.
+     */
+    int BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED = 15;
+
+    /**
      * This constant is only used by SystemUI. It notifies SystemUI that authentication was paused
      * because the authentication attempt was unsuccessful.
      * @hide
diff --git a/core/java/android/hardware/biometrics/BiometricFaceConstants.java b/core/java/android/hardware/biometrics/BiometricFaceConstants.java
index bae0fd3..eafcf52 100644
--- a/core/java/android/hardware/biometrics/BiometricFaceConstants.java
+++ b/core/java/android/hardware/biometrics/BiometricFaceConstants.java
@@ -17,6 +17,7 @@
 package android.hardware.biometrics;
 
 import android.app.KeyguardManager;
+import android.hardware.biometrics.BiometricManager.Authenticators;
 import android.hardware.face.FaceManager;
 
 /**
@@ -36,12 +37,12 @@
      * authentication. Note this is to accommodate people who have limited
      * vision.
      */
-    public static final int FEATURE_REQUIRE_ATTENTION = 1;
+    int FEATURE_REQUIRE_ATTENTION = 1;
     /**
      * Require a diverse set of poses during enrollment. Note this is to
      * accommodate people with limited mobility.
      */
-    public static final int FEATURE_REQUIRE_REQUIRE_DIVERSITY = 2;
+    int FEATURE_REQUIRE_REQUIRE_DIVERSITY = 2;
 
     //
     // Error messages from face authentication hardware during initialization, enrollment,
@@ -50,32 +51,32 @@
     /**
      * The hardware is unavailable. Try again later.
      */
-    public static final int FACE_ERROR_HW_UNAVAILABLE = 1;
+    int FACE_ERROR_HW_UNAVAILABLE = 1;
 
     /**
      * Error state returned when the sensor was unable to process the current image.
      */
-    public static final int FACE_ERROR_UNABLE_TO_PROCESS = 2;
+    int FACE_ERROR_UNABLE_TO_PROCESS = 2;
 
     /**
      * Error state returned when the current request has been running too long. This is intended to
      * prevent programs from waiting for the face authentication sensor indefinitely. The timeout is
      * platform and sensor-specific, but is generally on the order of 30 seconds.
      */
-    public static final int FACE_ERROR_TIMEOUT = 3;
+    int FACE_ERROR_TIMEOUT = 3;
 
     /**
      * Error state returned for operations like enrollment; the operation cannot be completed
      * because there's not enough storage remaining to complete the operation.
      */
-    public static final int FACE_ERROR_NO_SPACE = 4;
+    int FACE_ERROR_NO_SPACE = 4;
 
     /**
      * The operation was canceled because the face authentication sensor is unavailable. For
      * example, this may happen when the user is switched, the device is locked or another pending
      * operation prevents or disables it.
      */
-    public static final int FACE_ERROR_CANCELED = 5;
+    int FACE_ERROR_CANCELED = 5;
 
     /**
      * The {@link FaceManager#remove} call failed. Typically this will happen when the
@@ -83,13 +84,13 @@
      *
      * @hide
      */
-    public static final int FACE_ERROR_UNABLE_TO_REMOVE = 6;
+    int FACE_ERROR_UNABLE_TO_REMOVE = 6;
 
     /**
      * The operation was canceled because the API is locked out due to too many attempts.
      * This occurs after 5 failed attempts, and lasts for 30 seconds.
      */
-    public static final int FACE_ERROR_LOCKOUT = 7;
+    int FACE_ERROR_LOCKOUT = 7;
 
     /**
      * Hardware vendors may extend this list if there are conditions that do not fall under one of
@@ -99,52 +100,62 @@
      * expected to show the error message string if they happen, but are advised not to rely on the
      * message id since they will be device and vendor-specific
      */
-    public static final int FACE_ERROR_VENDOR = 8;
+    int FACE_ERROR_VENDOR = 8;
 
     /**
      * The operation was canceled because FACE_ERROR_LOCKOUT occurred too many times.
      * Face authentication is disabled until the user unlocks with strong authentication
      * (PIN/Pattern/Password)
      */
-    public static final int FACE_ERROR_LOCKOUT_PERMANENT = 9;
+    int FACE_ERROR_LOCKOUT_PERMANENT = 9;
 
     /**
      * The user canceled the operation. Upon receiving this, applications should use alternate
      * authentication (e.g. a password). The application should also provide the means to return
      * to face authentication, such as a "use face authentication" button.
      */
-    public static final int FACE_ERROR_USER_CANCELED = 10;
+    int FACE_ERROR_USER_CANCELED = 10;
 
     /**
      * The user does not have a face enrolled.
      */
-    public static final int FACE_ERROR_NOT_ENROLLED = 11;
+    int FACE_ERROR_NOT_ENROLLED = 11;
 
     /**
      * The device does not have a face sensor. This message will propagate if the calling app
      * ignores the result from PackageManager.hasFeature(FEATURE_FACE) and calls
      * this API anyway. Apps should always check for the feature before calling this API.
      */
-    public static final int FACE_ERROR_HW_NOT_PRESENT = 12;
+    int FACE_ERROR_HW_NOT_PRESENT = 12;
 
     /**
      * The user pressed the negative button. This is a placeholder that is currently only used
      * by the support library.
+     *
      * @hide
      */
-    public static final int FACE_ERROR_NEGATIVE_BUTTON = 13;
+    int FACE_ERROR_NEGATIVE_BUTTON = 13;
 
     /**
      * The device does not have pin, pattern, or password set up. See
      * {@link BiometricPrompt.Builder#setDeviceCredentialAllowed(boolean)} and
      * {@link KeyguardManager#isDeviceSecure()}
      */
-    public static final int BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL = 14;
+    int BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL = 14;
+
+    /**
+     * A security vulnerability has been discovered and the sensor is unavailable until a
+     * security update has addressed this issue. This error can be received if for example,
+     * authentication was requested with {@link Authenticators#BIOMETRIC_STRONG}, but the
+     * sensor's strength can currently only meet {@link Authenticators#BIOMETRIC_WEAK}.
+     * @hide
+     */
+    int BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED = 15;
 
     /**
      * @hide
      */
-    public static final int FACE_ERROR_VENDOR_BASE = 1000;
+    int FACE_ERROR_VENDOR_BASE = 1000;
 
     //
     // Image acquisition messages. These will not be sent to the user, since they conflict with
@@ -154,13 +165,13 @@
     /**
      * The image acquired was good.
      */
-    public static final int FACE_ACQUIRED_GOOD = 0;
+    int FACE_ACQUIRED_GOOD = 0;
 
     /**
      * The face image was not good enough to process due to a detected condition.
      * (See {@link #FACE_ACQUIRED_TOO_BRIGHT or @link #FACE_ACQUIRED_TOO_DARK}).
      */
-    public static final int FACE_ACQUIRED_INSUFFICIENT = 1;
+    int FACE_ACQUIRED_INSUFFICIENT = 1;
 
     /**
      * The face image was too bright due to too much ambient light.
@@ -169,7 +180,7 @@
      * The user is expected to take action to retry in better lighting conditions
      * when this is returned.
      */
-    public static final int FACE_ACQUIRED_TOO_BRIGHT = 2;
+    int FACE_ACQUIRED_TOO_BRIGHT = 2;
 
     /**
      * The face image was too dark due to illumination light obscured.
@@ -178,65 +189,65 @@
      * The user is expected to take action to retry in better lighting conditions
      * when this is returned.
      */
-    public static final int FACE_ACQUIRED_TOO_DARK = 3;
+    int FACE_ACQUIRED_TOO_DARK = 3;
 
     /**
      * The detected face is too close to the sensor, and the image can't be processed.
      * The user should be informed to move farther from the sensor when this is returned.
      */
-    public static final int FACE_ACQUIRED_TOO_CLOSE = 4;
+    int FACE_ACQUIRED_TOO_CLOSE = 4;
 
     /**
      * The detected face is too small, as the user might be too far from the sensor.
      * The user should be informed to move closer to the sensor when this is returned.
      */
-    public static final int FACE_ACQUIRED_TOO_FAR = 5;
+    int FACE_ACQUIRED_TOO_FAR = 5;
 
     /**
      * Only the upper part of the face was detected. The sensor field of view is too high.
      * The user should be informed to move up with respect to the sensor when this is returned.
      */
-    public static final int FACE_ACQUIRED_TOO_HIGH = 6;
+    int FACE_ACQUIRED_TOO_HIGH = 6;
 
     /**
      * Only the lower part of the face was detected. The sensor field of view is too low.
      * The user should be informed to move down with respect to the sensor when this is returned.
      */
-    public static final int FACE_ACQUIRED_TOO_LOW = 7;
+    int FACE_ACQUIRED_TOO_LOW = 7;
 
     /**
      * Only the right part of the face was detected. The sensor field of view is too far right.
      * The user should be informed to move to the right with respect to the sensor
      * when this is returned.
      */
-    public static final int FACE_ACQUIRED_TOO_RIGHT = 8;
+    int FACE_ACQUIRED_TOO_RIGHT = 8;
 
     /**
      * Only the left part of the face was detected. The sensor field of view is too far left.
      * The user should be informed to move to the left with respect to the sensor
      * when this is returned.
      */
-    public static final int FACE_ACQUIRED_TOO_LEFT = 9;
+    int FACE_ACQUIRED_TOO_LEFT = 9;
 
     /**
      * The user's eyes have strayed away from the sensor. If this message is sent, the user should
      * be informed to look at the device. If the user can't be found in the frame, one of the other
      * acquisition messages should be sent, e.g. FACE_ACQUIRED_NOT_DETECTED.
      */
-    public static final int FACE_ACQUIRED_POOR_GAZE = 10;
+    int FACE_ACQUIRED_POOR_GAZE = 10;
 
     /**
      * No face was detected in front of the sensor.
      * The user should be informed to point the sensor to a face when this is returned.
      */
-    public static final int FACE_ACQUIRED_NOT_DETECTED = 11;
+    int FACE_ACQUIRED_NOT_DETECTED = 11;
 
     /**
      * Too much motion was detected.
      * The user should be informed to keep their face steady relative to the
      * sensor.
      */
-    public static final int FACE_ACQUIRED_TOO_MUCH_MOTION = 12;
+    int FACE_ACQUIRED_TOO_MUCH_MOTION = 12;
 
     /**
      * The sensor needs to be re-calibrated. This is an unexpected condition, and should only be
@@ -244,20 +255,20 @@
      * requires user intervention, e.g. re-enrolling. The expected response to this message is to
      * direct the user to re-enroll.
      */
-    public static final int FACE_ACQUIRED_RECALIBRATE = 13;
+    int FACE_ACQUIRED_RECALIBRATE = 13;
 
     /**
      * The face is too different from a previous acquisition. This condition
      * only applies to enrollment. This can happen if the user passes the
      * device to someone else in the middle of enrollment.
      */
-    public static final int FACE_ACQUIRED_TOO_DIFFERENT = 14;
+    int FACE_ACQUIRED_TOO_DIFFERENT = 14;
 
     /**
      * The face is too similar to a previous acquisition. This condition only
      * applies to enrollment. The user should change their pose.
      */
-    public static final int FACE_ACQUIRED_TOO_SIMILAR = 15;
+    int FACE_ACQUIRED_TOO_SIMILAR = 15;
 
     /**
      * The magnitude of the pan angle of the user’s face with respect to the sensor’s
@@ -269,7 +280,7 @@
      *
      * The user should be informed to look more directly at the camera.
      */
-    public static final int FACE_ACQUIRED_PAN_TOO_EXTREME = 16;
+    int FACE_ACQUIRED_PAN_TOO_EXTREME = 16;
 
     /**
      * The magnitude of the tilt angle of the user’s face with respect to the sensor’s
@@ -280,7 +291,7 @@
      *
      * The user should be informed to look more directly at the camera.
      */
-    public static final int FACE_ACQUIRED_TILT_TOO_EXTREME = 17;
+    int FACE_ACQUIRED_TILT_TOO_EXTREME = 17;
 
     /**
      * The magnitude of the roll angle of the user’s face with respect to the sensor’s
@@ -292,7 +303,7 @@
      *
      * The user should be informed to look more directly at the camera.
      */
-    public static final int FACE_ACQUIRED_ROLL_TOO_EXTREME = 18;
+    int FACE_ACQUIRED_ROLL_TOO_EXTREME = 18;
 
     /**
      * The user’s face has been obscured by some object.
@@ -300,7 +311,7 @@
      * The user should be informed to remove any objects from the line of sight from
      * the sensor to the user’s face.
      */
-    public static final int FACE_ACQUIRED_FACE_OBSCURED = 19;
+    int FACE_ACQUIRED_FACE_OBSCURED = 19;
 
     /**
      * This message represents the earliest message sent at the beginning of the authentication
@@ -310,12 +321,12 @@
      * The framework will measure latency based on the time between the last START message and the
      * onAuthenticated callback.
      */
-    public static final int FACE_ACQUIRED_START = 20;
+    int FACE_ACQUIRED_START = 20;
 
     /**
      * The sensor is dirty. The user should be informed to clean the sensor.
      */
-    public static final int FACE_ACQUIRED_SENSOR_DIRTY = 21;
+    int FACE_ACQUIRED_SENSOR_DIRTY = 21;
 
     /**
      * Hardware vendors may extend this list if there are conditions that do not fall under one of
@@ -323,10 +334,10 @@
      *
      * @hide
      */
-    public static final int FACE_ACQUIRED_VENDOR = 22;
+    int FACE_ACQUIRED_VENDOR = 22;
 
     /**
      * @hide
      */
-    public static final int FACE_ACQUIRED_VENDOR_BASE = 1000;
+    int FACE_ACQUIRED_VENDOR_BASE = 1000;
 }
diff --git a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
index 5c74456..46e8cc0 100644
--- a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
+++ b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
@@ -18,6 +18,7 @@
 
 import android.app.KeyguardManager;
 import android.compat.annotation.UnsupportedAppUsage;
+import android.hardware.biometrics.BiometricManager.Authenticators;
 import android.hardware.fingerprint.FingerprintManager;
 
 /**
@@ -37,32 +38,32 @@
     /**
      * The hardware is unavailable. Try again later.
      */
-    public static final int FINGERPRINT_ERROR_HW_UNAVAILABLE = 1;
+    int FINGERPRINT_ERROR_HW_UNAVAILABLE = 1;
 
     /**
      * Error state returned when the sensor was unable to process the current image.
      */
-    public static final int FINGERPRINT_ERROR_UNABLE_TO_PROCESS = 2;
+    int FINGERPRINT_ERROR_UNABLE_TO_PROCESS = 2;
 
     /**
      * Error state returned when the current request has been running too long. This is intended to
      * prevent programs from waiting for the fingerprint sensor indefinitely. The timeout is
      * platform and sensor-specific, but is generally on the order of 30 seconds.
      */
-    public static final int FINGERPRINT_ERROR_TIMEOUT = 3;
+    int FINGERPRINT_ERROR_TIMEOUT = 3;
 
     /**
      * Error state returned for operations like enrollment; the operation cannot be completed
      * because there's not enough storage remaining to complete the operation.
      */
-    public static final int FINGERPRINT_ERROR_NO_SPACE = 4;
+    int FINGERPRINT_ERROR_NO_SPACE = 4;
 
     /**
      * The operation was canceled because the fingerprint sensor is unavailable. For example,
      * this may happen when the user is switched, the device is locked or another pending operation
      * prevents or disables it.
      */
-    public static final int FINGERPRINT_ERROR_CANCELED = 5;
+    int FINGERPRINT_ERROR_CANCELED = 5;
 
     /**
      * The {@link FingerprintManager#remove} call failed. Typically this will happen when the
@@ -70,13 +71,13 @@
      *
      * @hide
      */
-    public static final int FINGERPRINT_ERROR_UNABLE_TO_REMOVE = 6;
+    int FINGERPRINT_ERROR_UNABLE_TO_REMOVE = 6;
 
     /**
      * The operation was canceled because the API is locked out due to too many attempts.
      * This occurs after 5 failed attempts, and lasts for 30 seconds.
      */
-    public static final int FINGERPRINT_ERROR_LOCKOUT = 7;
+    int FINGERPRINT_ERROR_LOCKOUT = 7;
 
     /**
      * Hardware vendors may extend this list if there are conditions that do not fall under one of
@@ -86,52 +87,63 @@
      * expected to show the error message string if they happen, but are advised not to rely on the
      * message id since they will be device and vendor-specific
      */
-    public static final int FINGERPRINT_ERROR_VENDOR = 8;
+    int FINGERPRINT_ERROR_VENDOR = 8;
 
     /**
      * The operation was canceled because FINGERPRINT_ERROR_LOCKOUT occurred too many times.
      * Fingerprint authentication is disabled until the user unlocks with strong authentication
      * (PIN/Pattern/Password)
      */
-    public static final int FINGERPRINT_ERROR_LOCKOUT_PERMANENT = 9;
+    int FINGERPRINT_ERROR_LOCKOUT_PERMANENT = 9;
 
     /**
      * The user canceled the operation. Upon receiving this, applications should use alternate
      * authentication (e.g. a password). The application should also provide the means to return
      * to fingerprint authentication, such as a "use fingerprint" button.
      */
-    public static final int FINGERPRINT_ERROR_USER_CANCELED = 10;
+    int FINGERPRINT_ERROR_USER_CANCELED = 10;
 
     /**
      * The user does not have any fingerprints enrolled.
      */
-    public static final int FINGERPRINT_ERROR_NO_FINGERPRINTS = 11;
+    int FINGERPRINT_ERROR_NO_FINGERPRINTS = 11;
 
     /**
      * The device does not have a fingerprint sensor.
      */
-    public static final int FINGERPRINT_ERROR_HW_NOT_PRESENT = 12;
+    int FINGERPRINT_ERROR_HW_NOT_PRESENT = 12;
 
     /**
      * The user pressed the negative button. This is a placeholder that is currently only used
      * by the support library.
+     *
      * @hide
      */
-    public static final int FINGERPRINT_ERROR_NEGATIVE_BUTTON = 13;
+    int FINGERPRINT_ERROR_NEGATIVE_BUTTON = 13;
 
     /**
      * The device does not have pin, pattern, or password set up. See
      * {@link BiometricPrompt.Builder#setDeviceCredentialAllowed(boolean)} and
      * {@link KeyguardManager#isDeviceSecure()}
+     *
      * @hide
      */
-    public static final int BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL = 14;
+    int BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL = 14;
+
+    /**
+     * A security vulnerability has been discovered and the sensor is unavailable until a
+     * security update has addressed this issue. This error can be received if for example,
+     * authentication was requested with {@link Authenticators#BIOMETRIC_STRONG}, but the
+     * sensor's strength can currently only meet {@link Authenticators#BIOMETRIC_WEAK}.
+     * @hide
+     */
+    public static final int BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED = 15;
 
     /**
      * @hide
      */
     @UnsupportedAppUsage
-    public static final int FINGERPRINT_ERROR_VENDOR_BASE = 1000;
+    int FINGERPRINT_ERROR_VENDOR_BASE = 1000;
 
     //
     // Image acquisition messages. Must agree with those in fingerprint.h
@@ -140,19 +152,19 @@
     /**
      * The image acquired was good.
      */
-    public static final int FINGERPRINT_ACQUIRED_GOOD = 0;
+    int FINGERPRINT_ACQUIRED_GOOD = 0;
 
     /**
      * Only a partial fingerprint image was detected. During enrollment, the user should be
      * informed on what needs to happen to resolve this problem, e.g. "press firmly on sensor."
      */
-    public static final int FINGERPRINT_ACQUIRED_PARTIAL = 1;
+    int FINGERPRINT_ACQUIRED_PARTIAL = 1;
 
     /**
      * The fingerprint image was too noisy to process due to a detected condition (i.e. dry skin) or
      * a possibly dirty sensor (See {@link #FINGERPRINT_ACQUIRED_IMAGER_DIRTY}).
      */
-    public static final int FINGERPRINT_ACQUIRED_INSUFFICIENT = 2;
+    int FINGERPRINT_ACQUIRED_INSUFFICIENT = 2;
 
     /**
      * The fingerprint image was too noisy due to suspected or detected dirt on the sensor.
@@ -161,13 +173,13 @@
      * (stuck pixels, swaths, etc.). The user is expected to take action to clean the sensor
      * when this is returned.
      */
-    public static final int FINGERPRINT_ACQUIRED_IMAGER_DIRTY = 3;
+    int FINGERPRINT_ACQUIRED_IMAGER_DIRTY = 3;
 
     /**
      * The fingerprint image was unreadable due to lack of motion. This is most appropriate for
      * linear array sensors that require a swipe motion.
      */
-    public static final int FINGERPRINT_ACQUIRED_TOO_SLOW = 4;
+    int FINGERPRINT_ACQUIRED_TOO_SLOW = 4;
 
     /**
      * The fingerprint image was incomplete due to quick motion. While mostly appropriate for
@@ -175,16 +187,29 @@
      * The user should be asked to move the finger slower (linear) or leave the finger on the sensor
      * longer.
      */
-    public static final int FINGERPRINT_ACQUIRED_TOO_FAST = 5;
+    int FINGERPRINT_ACQUIRED_TOO_FAST = 5;
 
     /**
      * Hardware vendors may extend this list if there are conditions that do not fall under one of
      * the above categories. Vendors are responsible for providing error strings for these errors.
+     *
      * @hide
      */
-    public static final int FINGERPRINT_ACQUIRED_VENDOR = 6;
+    int FINGERPRINT_ACQUIRED_VENDOR = 6;
+
+    /**
+     * This message represents the earliest message sent at the beginning of the authentication
+     * pipeline. It is expected to be used to measure latency. Note this should be sent whenever
+     * authentication is restarted.
+     * The framework will measure latency based on the time between the last START message and the
+     * onAuthenticated callback.
+     *
+     * @hide
+     */
+    int FINGERPRINT_ACQUIRED_START = 7;
+
     /**
      * @hide
      */
-    public static final int FINGERPRINT_ACQUIRED_VENDOR_BASE = 1000;
+    int FINGERPRINT_ACQUIRED_VENDOR_BASE = 1000;
 }
diff --git a/core/java/android/hardware/biometrics/BiometricManager.java b/core/java/android/hardware/biometrics/BiometricManager.java
index 125b676..7d66cae 100644
--- a/core/java/android/hardware/biometrics/BiometricManager.java
+++ b/core/java/android/hardware/biometrics/BiometricManager.java
@@ -61,10 +61,20 @@
     public static final int BIOMETRIC_ERROR_NO_HARDWARE =
             BiometricConstants.BIOMETRIC_ERROR_HW_NOT_PRESENT;
 
+    /**
+     * A security vulnerability has been discovered and the sensor is unavailable until a
+     * security update has addressed this issue. This error can be received if for example,
+     * authentication was requested with {@link Authenticators#BIOMETRIC_STRONG}, but the
+     * sensor's strength can currently only meet {@link Authenticators#BIOMETRIC_WEAK}.
+     */
+    public static final int BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED =
+            BiometricConstants.BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED;
+
     @IntDef({BIOMETRIC_SUCCESS,
             BIOMETRIC_ERROR_HW_UNAVAILABLE,
             BIOMETRIC_ERROR_NONE_ENROLLED,
-            BIOMETRIC_ERROR_NO_HARDWARE})
+            BIOMETRIC_ERROR_NO_HARDWARE,
+            BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED})
     @interface BiometricError {}
 
     /**
diff --git a/core/java/android/hardware/biometrics/BiometricNativeHandleUtils.java b/core/java/android/hardware/biometrics/BiometricNativeHandleUtils.java
new file mode 100644
index 0000000..5544eae
--- /dev/null
+++ b/core/java/android/hardware/biometrics/BiometricNativeHandleUtils.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.hardware.biometrics;
+
+import android.os.NativeHandle;
+import android.os.ParcelFileDescriptor;
+
+import java.io.IOException;
+
+/**
+ * A class that contains utilities for IBiometricNativeHandle.
+ *
+ * @hide
+ */
+public final class BiometricNativeHandleUtils {
+
+    private BiometricNativeHandleUtils() {
+    }
+
+    /**
+     * Converts a {@link NativeHandle} into an {@link IBiometricNativeHandle} by duplicating the
+     * underlying file descriptors.
+     *
+     * Both the original and new handle must be closed after use.
+     *
+     * @param h {@link NativeHandle}. Usually used to identify a WindowManager window. Can be null.
+     * @return A {@link IBiometricNativeHandle} representation of {@code h}. Will be null if
+     * {@code h} or its raw file descriptors are null.
+     */
+    public static IBiometricNativeHandle dup(NativeHandle h) {
+        IBiometricNativeHandle handle = null;
+        if (h != null && h.getFileDescriptors() != null && h.getInts() != null) {
+            handle = new IBiometricNativeHandle();
+            handle.ints = h.getInts().clone();
+            handle.fds = new ParcelFileDescriptor[h.getFileDescriptors().length];
+            for (int i = 0; i < h.getFileDescriptors().length; ++i) {
+                try {
+                    handle.fds[i] = ParcelFileDescriptor.dup(h.getFileDescriptors()[i]);
+                } catch (IOException e) {
+                    return null;
+                }
+            }
+        }
+        return handle;
+    }
+
+    /**
+     * Closes the handle's file descriptors.
+     *
+     * @param h {@link IBiometricNativeHandle} handle.
+     */
+    public static void close(IBiometricNativeHandle h) {
+        if (h != null) {
+            for (ParcelFileDescriptor fd : h.fds) {
+                if (fd != null) {
+                    try {
+                        fd.close();
+                    } catch (IOException e) {
+                        // do nothing.
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/core/java/android/hardware/biometrics/BiometricPrompt.java b/core/java/android/hardware/biometrics/BiometricPrompt.java
index c686624..ac36188 100644
--- a/core/java/android/hardware/biometrics/BiometricPrompt.java
+++ b/core/java/android/hardware/biometrics/BiometricPrompt.java
@@ -25,7 +25,6 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.RequiresPermission;
-import android.app.KeyguardManager;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.hardware.face.FaceManager;
@@ -76,6 +75,18 @@
     /**
      * @hide
      */
+    public static final String KEY_DEVICE_CREDENTIAL_TITLE = "device_credential_title";
+    /**
+     * @hide
+     */
+    public static final String KEY_DEVICE_CREDENTIAL_SUBTITLE = "device_credential_subtitle";
+    /**
+     * @hide
+     */
+    public static final String KEY_DEVICE_CREDENTIAL_DESCRIPTION = "device_credential_description";
+    /**
+     * @hide
+     */
     public static final String KEY_NEGATIVE_TEXT = "negative_text";
     /**
      * @hide
@@ -222,6 +233,30 @@
         }
 
         /**
+         * Sets an optional title, subtitle, and/or description that will override other text when
+         * the user is authenticating with PIN/pattern/password. Currently for internal use only.
+         * @return This builder.
+         * @hide
+         */
+        @RequiresPermission(USE_BIOMETRIC_INTERNAL)
+        @NonNull
+        public Builder setTextForDeviceCredential(
+                @Nullable CharSequence title,
+                @Nullable CharSequence subtitle,
+                @Nullable CharSequence description) {
+            if (title != null) {
+                mBundle.putCharSequence(KEY_DEVICE_CREDENTIAL_TITLE, title);
+            }
+            if (subtitle != null) {
+                mBundle.putCharSequence(KEY_DEVICE_CREDENTIAL_SUBTITLE, subtitle);
+            }
+            if (description != null) {
+                mBundle.putCharSequence(KEY_DEVICE_CREDENTIAL_DESCRIPTION, description);
+            }
+            return this;
+        }
+
+        /**
          * Required: Sets the text, executor, and click listener for the negative button on the
          * prompt. This is typically a cancel button, but may be also used to show an alternative
          * method for authentication, such as a screen that asks for a backup password.
@@ -280,12 +315,12 @@
         }
 
         /**
-         * Optional: If enabled, the user will first be prompted to authenticate with biometrics,
-         * but also given the option to authenticate with their device PIN, pattern, or password.
-         * Developers should first check {@link KeyguardManager#isDeviceSecure()} before enabling.
-         * If the device is not secure, {@link BiometricPrompt#BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL}
-         * will be given to {@link AuthenticationCallback#onAuthenticationError(int, CharSequence)}.
-         * Defaults to false.
+         * Optional: If enabled, the user will be given the option to authenticate with their device
+         * PIN, pattern, or password. Developers should first check {@link
+         * BiometricManager#canAuthenticate(int)} for {@link Authenticators#DEVICE_CREDENTIAL}
+         * before enabling. If the device is not secured with a credential,
+         * {@link AuthenticationCallback#onAuthenticationError(int, CharSequence)} will be invoked
+         * with {@link BiometricPrompt#BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL}. Defaults to false.
          *
          * <p>Note that enabling this option replaces the negative button on the prompt with one
          * that allows the user to authenticate with their device credential, making it an error to
@@ -388,7 +423,7 @@
 
     private final IBinder mToken = new Binder();
     private final Context mContext;
-    private final IBiometricService mService;
+    private final IAuthService mService;
     private final Bundle mBundle;
     private final ButtonInfo mPositiveButtonInfo;
     private final ButtonInfo mNegativeButtonInfo;
@@ -466,8 +501,8 @@
         mBundle = bundle;
         mPositiveButtonInfo = positiveButtonInfo;
         mNegativeButtonInfo = negativeButtonInfo;
-        mService = IBiometricService.Stub.asInterface(
-                ServiceManager.getService(Context.BIOMETRIC_SERVICE));
+        mService = IAuthService.Stub.asInterface(
+                ServiceManager.getService(Context.AUTH_SERVICE));
     }
 
     /**
@@ -751,13 +786,13 @@
      * <p>Per the Android CDD, only biometric authenticators that meet or exceed the requirements
      * for <strong>Strong</strong> are permitted to integrate with Keystore to perform related
      * cryptographic operations. Therefore, it is an error to call this method after explicitly
-     * calling {@link Builder#setAllowedAuthenticators(int)} with any value other than
+     * calling {@link Builder#setAllowedAuthenticators(int)} with any biometric strength other than
      * {@link Authenticators#BIOMETRIC_STRONG}.
      *
-     * @throws IllegalArgumentException If any of the arguments are null, if
-     * {@link Builder#setDeviceCredentialAllowed(boolean)} was explicitly set to true, or if
-     * {@link Builder#setAllowedAuthenticators(int)} was explicitly called with any value other than
-     * {@link Authenticators#BIOMETRIC_STRONG}.
+     * @throws IllegalArgumentException If any argument is null, or if the allowed biometric
+     * authenticator strength is explicitly set to {@link Authenticators#BIOMETRIC_WEAK}. Prior to
+     * {@link android.os.Build.VERSION_CODES#R}, this exception is also thrown if
+     * {@link Builder#setDeviceCredentialAllowed(boolean)} was explicitly set to true.
      *
      * @param crypto A cryptographic operation to be unlocked after successful authentication.
      * @param cancel An object that can be used to cancel authentication.
@@ -782,16 +817,11 @@
             throw new IllegalArgumentException("Must supply a callback");
         }
 
-        @Authenticators.Types int authenticators = mBundle.getInt(
+        // Disallow explicitly setting any non-Strong biometric authenticator types.
+        final @Authenticators.Types int authenticators = mBundle.getInt(
                 KEY_AUTHENTICATORS_ALLOWED, Authenticators.BIOMETRIC_STRONG);
-
-        if (mBundle.getBoolean(KEY_ALLOW_DEVICE_CREDENTIAL)
-                || (authenticators & Authenticators.DEVICE_CREDENTIAL) != 0) {
-            throw new IllegalArgumentException("Device credential not supported with crypto");
-        }
-
-        // Disallow any non-Strong biometric authenticator types.
-        if ((authenticators & ~Authenticators.BIOMETRIC_STRONG) != 0) {
+        final int biometricStrength = authenticators & Authenticators.BIOMETRIC_WEAK;
+        if ((biometricStrength & ~Authenticators.BIOMETRIC_STRONG) != 0) {
             throw new IllegalArgumentException("Only Strong biometrics supported with crypto");
         }
 
diff --git a/core/java/android/hardware/biometrics/IAuthService.aidl b/core/java/android/hardware/biometrics/IAuthService.aidl
index d482198..2bf681f 100644
--- a/core/java/android/hardware/biometrics/IAuthService.aidl
+++ b/core/java/android/hardware/biometrics/IAuthService.aidl
@@ -33,6 +33,9 @@
     void authenticate(IBinder token, long sessionId, int userId,
             IBiometricServiceReceiver receiver, String opPackageName, in Bundle bundle);
 
+    // Cancel authentication for the given sessionId
+    void cancelAuthentication(IBinder token, String opPackageName);
+
     // TODO(b/141025588): Make userId the first arg to be consistent with hasEnrolledBiometrics.
     // Checks if biometrics can be used.
     int canAuthenticate(String opPackageName, int userId, int authenticators);
diff --git a/core/java/android/hardware/biometrics/IBiometricNativeHandle.aidl b/core/java/android/hardware/biometrics/IBiometricNativeHandle.aidl
new file mode 100644
index 0000000..6dcdc1b
--- /dev/null
+++ b/core/java/android/hardware/biometrics/IBiometricNativeHandle.aidl
@@ -0,0 +1,26 @@
+/*
+ * 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.biometrics;
+
+/**
+ * Representation of a native handle.
+ * Copied from /common/aidl/android/hardware/common/NativeHandle.aidl
+ * @hide
+ */
+parcelable IBiometricNativeHandle {
+    ParcelFileDescriptor[] fds;
+    int[] ints;
+}
diff --git a/core/java/android/hardware/biometrics/IBiometricService.aidl b/core/java/android/hardware/biometrics/IBiometricService.aidl
index 8a6be18..02e0a95 100644
--- a/core/java/android/hardware/biometrics/IBiometricService.aidl
+++ b/core/java/android/hardware/biometrics/IBiometricService.aidl
@@ -29,13 +29,15 @@
     // Requests authentication. The service choose the appropriate biometric to use, and show
     // the corresponding BiometricDialog.
     void authenticate(IBinder token, long sessionId, int userId,
-            IBiometricServiceReceiver receiver, String opPackageName, in Bundle bundle);
+            IBiometricServiceReceiver receiver, String opPackageName, in Bundle bundle,
+            int callingUid, int callingPid, int callingUserId);
 
-    // Cancel authentication for the given sessionId
-    void cancelAuthentication(IBinder token, String opPackageName);
+    // Cancel authentication for the given session.
+    void cancelAuthentication(IBinder token, String opPackageName, int callingUid, int callingPid,
+            int callingUserId);
 
     // Checks if biometrics can be used.
-    int canAuthenticate(String opPackageName, int userId, int authenticators);
+    int canAuthenticate(String opPackageName, int userId, int callingUserId, int authenticators);
 
     // Checks if any biometrics are enrolled.
     boolean hasEnrolledBiometrics(int userId, String opPackageName);
@@ -47,7 +49,8 @@
             IBiometricAuthenticator authenticator);
 
     // Register callback for when keyguard biometric eligibility changes.
-    void registerEnabledOnKeyguardCallback(IBiometricEnabledOnKeyguardCallback callback);
+    void registerEnabledOnKeyguardCallback(IBiometricEnabledOnKeyguardCallback callback,
+            int callingUserId);
 
     // Explicitly set the active user.
     void setActiveUser(int userId);
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java
index c5b9a43..17c83f3 100644
--- a/core/java/android/hardware/camera2/CameraManager.java
+++ b/core/java/android/hardware/camera2/CameraManager.java
@@ -400,7 +400,8 @@
                     try {
                         info.setCameraId(Integer.parseInt(cameraId));
                     } catch (NumberFormatException e) {
-                        Log.e(TAG, "Failed to parse camera Id " + cameraId + " to integer");
+                        // For external camera, reaching here is expected.
+                        Log.v(TAG, "Failed to parse camera Id " + cameraId + " to integer");
                     }
                     boolean hasConcurrentStreams =
                             CameraManagerGlobal.get().cameraIdHasConcurrentStreamsLocked(cameraId);
diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java
index 9bef2e1..8f3cb93 100644
--- a/core/java/android/hardware/camera2/CameraMetadata.java
+++ b/core/java/android/hardware/camera2/CameraMetadata.java
@@ -95,7 +95,7 @@
     }
 
     /**
-     * Retrieves the native CameraMetadata* as a Java long.
+     * Retrieves the native std::shared_ptr<CameraMetadata*>* as a Java long.
      * Returns 0 if mNativeInstance is null.
      *
      * @hide
diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
index aefe66f..df77f52 100644
--- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
+++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
@@ -1680,7 +1680,7 @@
     }
 
     @UnsupportedAppUsage
-    private long mMetadataPtr; // native CameraMetadata*
+    private long mMetadataPtr; // native std::shared_ptr<CameraMetadata>*
 
     private native long nativeAllocate();
     private native long nativeAllocateCopy(CameraMetadataNative other)
diff --git a/core/java/android/hardware/display/DeviceProductInfo.java b/core/java/android/hardware/display/DeviceProductInfo.java
new file mode 100644
index 0000000..6ad7fae
--- /dev/null
+++ b/core/java/android/hardware/display/DeviceProductInfo.java
@@ -0,0 +1,224 @@
+/*
+ * 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.display;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+
+/**
+ * Product-specific information about the display or the directly connected device on the
+ * display chain. For example, if the display is transitively connected, this field may contain
+ * product information about the intermediate device.
+ * @hide
+ */
+public final class DeviceProductInfo implements Parcelable {
+    final private String mName;
+    final private String mManufacturerPnpId;
+    final private String mProductId;
+    final private Integer mModelYear;
+    final private ManufactureDate mManufactureDate;
+
+    public DeviceProductInfo(
+            String name,
+            String manufacturerPnpId,
+            String productCode,
+            Integer modelYear,
+            ManufactureDate manufactureDate) {
+        this.mName = name;
+        this.mManufacturerPnpId = manufacturerPnpId;
+        this.mProductId = productCode;
+        this.mModelYear = modelYear;
+        this.mManufactureDate = manufactureDate;
+    }
+
+    private DeviceProductInfo(Parcel in) {
+        mName = in.readString();
+        mManufacturerPnpId = in.readString();
+        mProductId = (String) in.readValue(null);
+        mModelYear = (Integer) in.readValue(null);
+        mManufactureDate = (ManufactureDate) in.readValue(null);
+    }
+
+    /**
+     * @return Display name.
+     */
+    public String getName() {
+        return mName;
+    }
+
+    /**
+     * @return Manufacturer Plug and Play ID.
+     */
+    public String getManufacturerPnpId() {
+        return mManufacturerPnpId;
+    }
+
+    /**
+     * @return Manufacturer product ID.
+     */
+    public String getProductId() {
+        return mProductId;
+    }
+
+    /**
+     * @return Model year of the device. Typically exactly one of model year or
+     *      manufacture date will be present.
+     */
+    public Integer getModelYear() {
+        return mModelYear;
+    }
+
+    /**
+     * @return Manufacture date. Typically exactly one of model year or manufacture
+     * date will be present.
+     */
+    public ManufactureDate getManufactureDate() {
+        return mManufactureDate;
+    }
+
+    @Override
+    public String toString() {
+        return "DeviceProductInfo{"
+                + "name="
+                + mName
+                + ", manufacturerPnpId="
+                + mManufacturerPnpId
+                + ", productId="
+                + mProductId
+                + ", modelYear="
+                + mModelYear
+                + ", manufactureDate="
+                + mManufactureDate
+                + '}';
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        DeviceProductInfo that = (DeviceProductInfo) o;
+        return Objects.equals(mName, that.mName)
+                && Objects.equals(mManufacturerPnpId, that.mManufacturerPnpId)
+                && Objects.equals(mProductId, that.mProductId)
+                && Objects.equals(mModelYear, that.mModelYear)
+                && Objects.equals(mManufactureDate, that.mManufactureDate);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mName, mManufacturerPnpId, mProductId, mModelYear, mManufactureDate);
+    }
+
+    public static final Creator<DeviceProductInfo> CREATOR =
+            new Creator<DeviceProductInfo>() {
+                @Override
+                public DeviceProductInfo createFromParcel(Parcel in) {
+                    return new DeviceProductInfo(in);
+                }
+
+                @Override
+                public DeviceProductInfo[] newArray(int size) {
+                    return new DeviceProductInfo[size];
+                }
+            };
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mName);
+        dest.writeString(mManufacturerPnpId);
+        dest.writeValue(mProductId);
+        dest.writeValue(mModelYear);
+        dest.writeValue(mManufactureDate);
+    }
+
+    /**
+     * Stores information about the date of manufacture.
+     *
+     * @hide
+     */
+    public static class ManufactureDate implements Parcelable {
+        final private Integer mWeek;
+        final private Integer mYear;
+
+        public ManufactureDate(Integer week, Integer year) {
+            mWeek = week;
+            mYear = year;
+        }
+
+        protected ManufactureDate(Parcel in) {
+            mWeek = (Integer) in.readValue(null);
+            mYear = (Integer) in.readValue(null);
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeValue(mWeek);
+            dest.writeValue(mYear);
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        public static final Creator<ManufactureDate> CREATOR =
+                new Creator<ManufactureDate>() {
+                    @Override
+                    public ManufactureDate createFromParcel(Parcel in) {
+                        return new ManufactureDate(in);
+                    }
+
+                    @Override
+                    public ManufactureDate[] newArray(int size) {
+                        return new ManufactureDate[size];
+                    }
+                };
+
+        public int getYear() {
+            return mYear;
+        }
+
+        public int getWeek() {
+            return mWeek;
+        }
+
+        @Override
+        public String toString() {
+            return "ManufactureDate{week=" + mWeek + ", year=" + mYear + '}';
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+            ManufactureDate that = (ManufactureDate) o;
+            return Objects.equals(mWeek, that.mWeek) && Objects.equals(mYear, that.mYear);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(mWeek, mYear);
+        }
+    }
+}
diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java
index d67de09..65f45d8 100644
--- a/core/java/android/hardware/display/DisplayManager.java
+++ b/core/java/android/hardware/display/DisplayManager.java
@@ -80,7 +80,7 @@
      * Display category: Presentation displays.
      * <p>
      * This category can be used to identify secondary displays that are suitable for
-     * use as presentation displays such as HDMI or Wireless displays.  Applications
+     * use as presentation displays such as external or wireless displays.  Applications
      * may automatically project their content to presentation displays to provide
      * richer second screen experiences.
      * </p>
@@ -100,7 +100,7 @@
      * When this flag is set, the virtual display is public.
      * </p><p>
      * A public virtual display behaves just like most any other display that is connected
-     * to the system such as an HDMI or Wireless display.  Applications can open
+     * to the system such as an external or wireless display.  Applications can open
      * windows on the display and the system may mirror the contents of other displays
      * onto it.
      * </p><p>
@@ -364,7 +364,7 @@
                     addAllDisplaysLocked(mTempDisplays, displayIds);
                 } else if (category.equals(DISPLAY_CATEGORY_PRESENTATION)) {
                     addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_WIFI);
-                    addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_HDMI);
+                    addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_EXTERNAL);
                     addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_OVERLAY);
                     addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_VIRTUAL);
                 }
@@ -766,11 +766,11 @@
      * Requires the {@link android.Manifest.permission#CONTROL_DISPLAY_BRIGHTNESS} permission.
      * </p>
      *
-     * @param brightness The brightness value from 0 to 255.
+     * @param brightness The brightness value from 0.0f to 1.0f.
      *
      * @hide Requires signature permission.
      */
-    public void setTemporaryBrightness(int brightness) {
+    public void setTemporaryBrightness(float brightness) {
         mGlobal.setTemporaryBrightness(brightness);
     }
 
diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java
index fd539e8..9d92c89 100644
--- a/core/java/android/hardware/display/DisplayManagerGlobal.java
+++ b/core/java/android/hardware/display/DisplayManagerGlobal.java
@@ -616,7 +616,7 @@
      *
      * @hide Requires signature permission.
      */
-    public void setTemporaryBrightness(int brightness) {
+    public void setTemporaryBrightness(float brightness) {
         try {
             mDm.setTemporaryBrightness(brightness);
         } catch (RemoteException ex) {
diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java
index 79a339f..ea2b9e7 100644
--- a/core/java/android/hardware/display/DisplayManagerInternal.java
+++ b/core/java/android/hardware/display/DisplayManagerInternal.java
@@ -268,8 +268,9 @@
         // nearby, turning it off temporarily until the object is moved away.
         public boolean useProximitySensor;
 
-        // An override of the screen brightness. Set to -1 is used if there's no override.
-        public int screenBrightnessOverride;
+        // An override of the screen brightness.
+        // Set to PowerManager.BRIGHTNESS_INVALID if there's no override.
+        public float screenBrightnessOverride;
 
         // An override of the screen auto-brightness adjustment factor in the range -1 (dimmer) to
         // 1 (brighter). Set to Float.NaN if there's no override.
@@ -300,18 +301,18 @@
         public boolean blockScreenOn;
 
         // Overrides the policy for adjusting screen brightness and state while dozing.
-        public int dozeScreenBrightness;
         public int dozeScreenState;
+        public float dozeScreenBrightness;
 
         public DisplayPowerRequest() {
             policy = POLICY_BRIGHT;
             useProximitySensor = false;
-            screenBrightnessOverride = -1;
+            screenBrightnessOverride = PowerManager.BRIGHTNESS_INVALID_FLOAT;
             useAutoBrightness = false;
             screenAutoBrightnessAdjustmentOverride = Float.NaN;
             screenLowPowerBrightnessFactor = 0.5f;
             blockScreenOn = false;
-            dozeScreenBrightness = PowerManager.BRIGHTNESS_DEFAULT;
+            dozeScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
             dozeScreenState = Display.STATE_UNKNOWN;
         }
 
@@ -351,7 +352,8 @@
             return other != null
                     && policy == other.policy
                     && useProximitySensor == other.useProximitySensor
-                    && screenBrightnessOverride == other.screenBrightnessOverride
+                    && floatEquals(screenBrightnessOverride,
+                            other.screenBrightnessOverride)
                     && useAutoBrightness == other.useAutoBrightness
                     && floatEquals(screenAutoBrightnessAdjustmentOverride,
                             other.screenAutoBrightnessAdjustmentOverride)
@@ -360,7 +362,7 @@
                     && blockScreenOn == other.blockScreenOn
                     && lowPowerMode == other.lowPowerMode
                     && boostScreenBrightness == other.boostScreenBrightness
-                    && dozeScreenBrightness == other.dozeScreenBrightness
+                    && floatEquals(dozeScreenBrightness, other.dozeScreenBrightness)
                     && dozeScreenState == other.dozeScreenState;
         }
 
diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl
index ccf221b..d22188e 100644
--- a/core/java/android/hardware/display/IDisplayManager.aidl
+++ b/core/java/android/hardware/display/IDisplayManager.aidl
@@ -115,7 +115,7 @@
     boolean isMinimalPostProcessingRequested(int displayId);
 
     // Temporarily sets the display brightness.
-    void setTemporaryBrightness(int brightness);
+    void setTemporaryBrightness(float brightness);
 
     // Temporarily sets the auto brightness adjustment factor.
     void setTemporaryAutoBrightnessAdjustment(float adjustment);
diff --git a/core/java/android/hardware/face/FaceManager.java b/core/java/android/hardware/face/FaceManager.java
index 55ebe28..3a0660d 100644
--- a/core/java/android/hardware/face/FaceManager.java
+++ b/core/java/android/hardware/face/FaceManager.java
@@ -29,7 +29,9 @@
 import android.hardware.biometrics.BiometricAuthenticator;
 import android.hardware.biometrics.BiometricConstants;
 import android.hardware.biometrics.BiometricFaceConstants;
+import android.hardware.biometrics.BiometricNativeHandleUtils;
 import android.hardware.biometrics.CryptoObject;
+import android.hardware.biometrics.IBiometricNativeHandle;
 import android.hardware.biometrics.IBiometricServiceLockoutResetCallback;
 import android.os.Binder;
 import android.os.CancellationSignal;
@@ -38,6 +40,7 @@
 import android.os.IBinder;
 import android.os.IRemoteCallback;
 import android.os.Looper;
+import android.os.NativeHandle;
 import android.os.PowerManager;
 import android.os.RemoteException;
 import android.os.Trace;
@@ -245,6 +248,19 @@
     }
 
     /**
+     * Defaults to {@link FaceManager#enroll(int, byte[], CancellationSignal, EnrollmentCallback,
+     * int[], NativeHandle)} with {@code windowId} set to null.
+     *
+     * @see FaceManager#enroll(int, byte[], CancellationSignal, EnrollmentCallback, int[],
+     * NativeHandle)
+     */
+    @RequiresPermission(MANAGE_BIOMETRIC)
+    public void enroll(int userId, byte[] token, CancellationSignal cancel,
+            EnrollmentCallback callback, int[] disabledFeatures) {
+        enroll(userId, token, cancel, callback, disabledFeatures, null /* windowId */);
+    }
+
+    /**
      * Request face authentication enrollment. This call operates the face authentication hardware
      * and starts capturing images. Progress will be indicated by callbacks to the
      * {@link EnrollmentCallback} object. It terminates when
@@ -259,11 +275,13 @@
      * @param flags    optional flags
      * @param userId   the user to whom this face will belong to
      * @param callback an object to receive enrollment events
+     * @param windowId optional ID of a camera preview window for a single-camera device. Must be
+     *                 null if not used.
      * @hide
      */
     @RequiresPermission(MANAGE_BIOMETRIC)
     public void enroll(int userId, byte[] token, CancellationSignal cancel,
-            EnrollmentCallback callback, int[] disabledFeatures) {
+            EnrollmentCallback callback, int[] disabledFeatures, @Nullable NativeHandle windowId) {
         if (callback == null) {
             throw new IllegalArgumentException("Must supply an enrollment callback");
         }
@@ -278,20 +296,72 @@
         }
 
         if (mService != null) {
+            IBiometricNativeHandle handle = BiometricNativeHandleUtils.dup(windowId);
             try {
                 mEnrollmentCallback = callback;
                 Trace.beginSection("FaceManager#enroll");
                 mService.enroll(userId, mToken, token, mServiceReceiver,
-                        mContext.getOpPackageName(), disabledFeatures);
+                        mContext.getOpPackageName(), disabledFeatures, handle);
             } catch (RemoteException e) {
                 Log.w(TAG, "Remote exception in enroll: ", e);
-                if (callback != null) {
-                    // Though this may not be a hardware issue, it will cause apps to give up or
-                    // try again later.
-                    callback.onEnrollmentError(FACE_ERROR_HW_UNAVAILABLE,
-                            getErrorString(mContext, FACE_ERROR_HW_UNAVAILABLE,
+                // Though this may not be a hardware issue, it will cause apps to give up or
+                // try again later.
+                callback.onEnrollmentError(FACE_ERROR_HW_UNAVAILABLE,
+                        getErrorString(mContext, FACE_ERROR_HW_UNAVAILABLE,
                                 0 /* vendorCode */));
-                }
+            } finally {
+                Trace.endSection();
+                BiometricNativeHandleUtils.close(handle);
+            }
+        }
+    }
+
+    /**
+     * Request face authentication enrollment for a remote client, for example Android Auto.
+     * This call operates the face authentication hardware and starts capturing images.
+     * Progress will be indicated by callbacks to the
+     * {@link EnrollmentCallback} object. It terminates when
+     * {@link EnrollmentCallback#onEnrollmentError(int, CharSequence)} or
+     * {@link EnrollmentCallback#onEnrollmentProgress(int) is called with remaining == 0, at
+     * which point the object is no longer valid. The operation can be canceled by using the
+     * provided cancel object.
+     *
+     * @param token    a unique token provided by a recent creation or verification of device
+     *                 credentials (e.g. pin, pattern or password).
+     * @param cancel   an object that can be used to cancel enrollment
+     * @param userId   the user to whom this face will belong to
+     * @param callback an object to receive enrollment events
+     * @hide
+     */
+    @RequiresPermission(MANAGE_BIOMETRIC)
+    public void enrollRemotely(int userId, byte[] token, CancellationSignal cancel,
+            EnrollmentCallback callback, int[] disabledFeatures) {
+        if (callback == null) {
+            throw new IllegalArgumentException("Must supply an enrollment callback");
+        }
+
+        if (cancel != null) {
+            if (cancel.isCanceled()) {
+                Log.w(TAG, "enrollRemotely is already canceled.");
+                return;
+            } else {
+                cancel.setOnCancelListener(new OnEnrollCancelListener());
+            }
+        }
+
+        if (mService != null) {
+            try {
+                mEnrollmentCallback = callback;
+                Trace.beginSection("FaceManager#enrollRemotely");
+                mService.enrollRemotely(userId, mToken, token, mServiceReceiver,
+                        mContext.getOpPackageName(), disabledFeatures);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Remote exception in enrollRemotely: ", e);
+                // Though this may not be a hardware issue, it will cause apps to give up or
+                // try again later.
+                callback.onEnrollmentError(FACE_ERROR_HW_UNAVAILABLE,
+                        getErrorString(mContext, FACE_ERROR_HW_UNAVAILABLE,
+                                0 /* vendorCode */));
             } finally {
                 Trace.endSection();
             }
@@ -629,6 +699,9 @@
                 return context.getString(com.android.internal.R.string.face_error_not_enrolled);
             case FACE_ERROR_HW_NOT_PRESENT:
                 return context.getString(com.android.internal.R.string.face_error_hw_not_present);
+            case BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED:
+                return context.getString(
+                        com.android.internal.R.string.face_error_security_update_required);
             case FACE_ERROR_VENDOR: {
                 String[] msgArray = context.getResources().getStringArray(
                         com.android.internal.R.array.face_error_vendor);
diff --git a/core/java/android/hardware/face/IFaceService.aidl b/core/java/android/hardware/face/IFaceService.aidl
index 68a4aef..8ba2473 100644
--- a/core/java/android/hardware/face/IFaceService.aidl
+++ b/core/java/android/hardware/face/IFaceService.aidl
@@ -15,6 +15,7 @@
  */
 package android.hardware.face;
 
+import android.hardware.biometrics.IBiometricNativeHandle;
 import android.hardware.biometrics.IBiometricServiceReceiverInternal;
 import android.hardware.biometrics.IBiometricServiceLockoutResetCallback;
 import android.hardware.face.IFaceServiceReceiver;
@@ -51,6 +52,10 @@
 
     // Start face enrollment
     void enroll(int userId, IBinder token, in byte [] cryptoToken, IFaceServiceReceiver receiver,
+            String opPackageName, in int [] disabledFeatures, in IBiometricNativeHandle windowId);
+
+    // Start remote face enrollment
+    void enrollRemotely(int userId, IBinder token, in byte [] cryptoToken, IFaceServiceReceiver receiver,
             String opPackageName, in int [] disabledFeatures);
 
     // Cancel enrollment in progress
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index ff9d145..f301a5c 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -32,7 +32,9 @@
 import android.content.pm.PackageManager;
 import android.hardware.biometrics.BiometricAuthenticator;
 import android.hardware.biometrics.BiometricFingerprintConstants;
+import android.hardware.biometrics.BiometricNativeHandleUtils;
 import android.hardware.biometrics.BiometricPrompt;
+import android.hardware.biometrics.IBiometricNativeHandle;
 import android.hardware.biometrics.IBiometricServiceLockoutResetCallback;
 import android.os.Binder;
 import android.os.CancellationSignal;
@@ -41,6 +43,7 @@
 import android.os.IBinder;
 import android.os.IRemoteCallback;
 import android.os.Looper;
+import android.os.NativeHandle;
 import android.os.PowerManager;
 import android.os.RemoteException;
 import android.os.UserHandle;
@@ -403,15 +406,33 @@
     }
 
     /**
-     * Per-user version, see {@link FingerprintManager#authenticate(CryptoObject,
-     * CancellationSignal, int, AuthenticationCallback, Handler)}. This version does not
-     * display the BiometricPrompt.
-     * @param userId the user ID that the fingerprint hardware will authenticate for.
+     * Defaults to {@link FingerprintManager#authenticate(CryptoObject, CancellationSignal, int,
+     * AuthenticationCallback, Handler, int, NativeHandle)} with {@code windowId} set to null.
+     *
+     * @see FingerprintManager#authenticate(CryptoObject, CancellationSignal, int,
+     * AuthenticationCallback, Handler, int, NativeHandle)
+     *
      * @hide
      */
     @RequiresPermission(anyOf = {USE_BIOMETRIC, USE_FINGERPRINT})
     public void authenticate(@Nullable CryptoObject crypto, @Nullable CancellationSignal cancel,
             int flags, @NonNull AuthenticationCallback callback, Handler handler, int userId) {
+        authenticate(crypto, cancel, flags, callback, handler, userId, null /* windowId */);
+    }
+
+    /**
+     * Per-user version, see {@link FingerprintManager#authenticate(CryptoObject,
+     * CancellationSignal, int, AuthenticationCallback, Handler)}. This version does not
+     * display the BiometricPrompt.
+     * @param userId the user ID that the fingerprint hardware will authenticate for.
+     * @param windowId for optical fingerprint sensors that require active illumination by the OLED
+     *        display. Should be null for devices that don't require illumination.
+     * @hide
+     */
+    @RequiresPermission(anyOf = {USE_BIOMETRIC, USE_FINGERPRINT})
+    public void authenticate(@Nullable CryptoObject crypto, @Nullable CancellationSignal cancel,
+            int flags, @NonNull AuthenticationCallback callback, Handler handler, int userId,
+            @Nullable NativeHandle windowId) {
         if (callback == null) {
             throw new IllegalArgumentException("Must supply an authentication callback");
         }
@@ -425,26 +446,44 @@
             }
         }
 
-        if (mService != null) try {
-            useHandler(handler);
-            mAuthenticationCallback = callback;
-            mCryptoObject = crypto;
-            long sessionId = crypto != null ? crypto.getOpId() : 0;
-            mService.authenticate(mToken, sessionId, userId, mServiceReceiver, flags,
-                    mContext.getOpPackageName());
-        } catch (RemoteException e) {
-            Slog.w(TAG, "Remote exception while authenticating: ", e);
-            if (callback != null) {
+        if (mService != null) {
+            IBiometricNativeHandle handle = BiometricNativeHandleUtils.dup(windowId);
+            try {
+                useHandler(handler);
+                mAuthenticationCallback = callback;
+                mCryptoObject = crypto;
+                long sessionId = crypto != null ? crypto.getOpId() : 0;
+                mService.authenticate(mToken, sessionId, userId, mServiceReceiver, flags,
+                        mContext.getOpPackageName(), handle);
+            } catch (RemoteException e) {
+                Slog.w(TAG, "Remote exception while authenticating: ", e);
                 // Though this may not be a hardware issue, it will cause apps to give up or try
                 // again later.
                 callback.onAuthenticationError(FINGERPRINT_ERROR_HW_UNAVAILABLE,
                         getErrorString(mContext, FINGERPRINT_ERROR_HW_UNAVAILABLE,
-                            0 /* vendorCode */));
+                                0 /* vendorCode */));
+            } finally {
+                BiometricNativeHandleUtils.close(handle);
             }
         }
     }
 
     /**
+     * Defaults to {@link FingerprintManager#enroll(byte[], CancellationSignal, int, int,
+     * EnrollmentCallback, NativeHandle)} with {@code windowId} set to null.
+     *
+     * @see FingerprintManager#enroll(byte[], CancellationSignal, int, int, EnrollmentCallback,
+     * NativeHandle)
+     *
+     * @hide
+     */
+    @RequiresPermission(MANAGE_FINGERPRINT)
+    public void enroll(byte [] token, CancellationSignal cancel, int flags,
+            int userId, EnrollmentCallback callback) {
+        enroll(token, cancel, flags, userId, callback, null /* windowId */);
+    }
+
+    /**
      * Request fingerprint enrollment. This call warms up the fingerprint hardware
      * and starts scanning for fingerprints. Progress will be indicated by callbacks to the
      * {@link EnrollmentCallback} object. It terminates when
@@ -462,7 +501,7 @@
      */
     @RequiresPermission(MANAGE_FINGERPRINT)
     public void enroll(byte [] token, CancellationSignal cancel, int flags,
-            int userId, EnrollmentCallback callback) {
+            int userId, EnrollmentCallback callback, @Nullable NativeHandle windowId) {
         if (userId == UserHandle.USER_CURRENT) {
             userId = getCurrentUserId();
         }
@@ -479,18 +518,21 @@
             }
         }
 
-        if (mService != null) try {
-            mEnrollmentCallback = callback;
-            mService.enroll(mToken, token, userId, mServiceReceiver, flags,
-                    mContext.getOpPackageName());
-        } catch (RemoteException e) {
-            Slog.w(TAG, "Remote exception in enroll: ", e);
-            if (callback != null) {
+        if (mService != null) {
+            IBiometricNativeHandle handle = BiometricNativeHandleUtils.dup(windowId);
+            try {
+                mEnrollmentCallback = callback;
+                mService.enroll(mToken, token, userId, mServiceReceiver, flags,
+                        mContext.getOpPackageName(), handle);
+            } catch (RemoteException e) {
+                Slog.w(TAG, "Remote exception in enroll: ", e);
                 // Though this may not be a hardware issue, it will cause apps to give up or try
                 // again later.
                 callback.onEnrollmentError(FINGERPRINT_ERROR_HW_UNAVAILABLE,
                         getErrorString(mContext, FINGERPRINT_ERROR_HW_UNAVAILABLE,
-                            0 /* vendorCode */));
+                                0 /* vendorCode */));
+            } finally {
+                BiometricNativeHandleUtils.close(handle);
             }
         }
     }
@@ -876,7 +918,9 @@
         if (mEnrollmentCallback != null) {
             mEnrollmentCallback.onEnrollmentHelp(clientInfo, msg);
         } else if (mAuthenticationCallback != null) {
-            mAuthenticationCallback.onAuthenticationHelp(clientInfo, msg);
+            if (acquireInfo != BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START) {
+                mAuthenticationCallback.onAuthenticationHelp(clientInfo, msg);
+            }
         }
     }
 
@@ -967,6 +1011,9 @@
             case FINGERPRINT_ERROR_HW_NOT_PRESENT:
                 return context.getString(
                         com.android.internal.R.string.fingerprint_error_hw_not_present);
+            case BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED:
+                return context.getString(
+                        com.android.internal.R.string.fingerprint_error_security_update_required);
             case FINGERPRINT_ERROR_VENDOR: {
                     String[] msgArray = context.getResources().getStringArray(
                             com.android.internal.R.array.fingerprint_error_vendor);
@@ -1008,6 +1055,9 @@
                         return msgArray[vendorCode];
                     }
                 }
+                break;
+            case FINGERPRINT_ACQUIRED_START:
+                return null;
         }
         Slog.w(TAG, "Invalid acquired message: " + acquireInfo + ", " + vendorCode);
         return null;
diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
index 1a7e128..f2ffd08d 100644
--- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl
+++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
@@ -15,6 +15,7 @@
  */
 package android.hardware.fingerprint;
 
+import android.hardware.biometrics.IBiometricNativeHandle;
 import android.hardware.biometrics.IBiometricServiceReceiverInternal;
 import android.hardware.biometrics.IBiometricServiceLockoutResetCallback;
 import android.hardware.fingerprint.IFingerprintClientActiveCallback;
@@ -31,7 +32,8 @@
     // USE_FINGERPRINT/USE_BIOMETRIC permission. This is effectively deprecated, since it only comes
     // through FingerprintManager now.
     void authenticate(IBinder token, long sessionId, int userId,
-            IFingerprintServiceReceiver receiver, int flags, String opPackageName);
+            IFingerprintServiceReceiver receiver, int flags, String opPackageName,
+            in IBiometricNativeHandle windowId);
 
     // This method prepares the service to start authenticating, but doesn't start authentication.
     // This is protected by the MANAGE_BIOMETRIC signatuer permission. This method should only be
@@ -40,7 +42,7 @@
     // startPreparedClient().
     void prepareForAuthentication(IBinder token, long sessionId, int userId,
             IBiometricServiceReceiverInternal wrapperReceiver, String opPackageName, int cookie,
-            int callingUid, int callingPid, int callingUserId);
+            int callingUid, int callingPid, int callingUserId, in IBiometricNativeHandle windowId);
 
     // Starts authentication with the previously prepared client.
     void startPreparedClient(int cookie);
@@ -55,7 +57,7 @@
 
     // Start fingerprint enrollment
     void enroll(IBinder token, in byte [] cryptoToken, int groupId, IFingerprintServiceReceiver receiver,
-            int flags, String opPackageName);
+            int flags, String opPackageName, in IBiometricNativeHandle windowId);
 
     // Cancel enrollment in progress
     void cancelEnrollment(IBinder token);
diff --git a/core/java/android/hardware/input/IInputManager.aidl b/core/java/android/hardware/input/IInputManager.aidl
index 6e1987c..fb44b0b 100644
--- a/core/java/android/hardware/input/IInputManager.aidl
+++ b/core/java/android/hardware/input/IInputManager.aidl
@@ -27,6 +27,7 @@
 import android.view.InputEvent;
 import android.view.InputMonitor;
 import android.view.PointerIcon;
+import android.view.VerifiedInputEvent;
 
 /** @hide */
 interface IInputManager {
@@ -50,6 +51,8 @@
     @UnsupportedAppUsage
     boolean injectInputEvent(in InputEvent ev, int mode);
 
+    VerifiedInputEvent verifyInputEvent(in InputEvent ev);
+
     // Calibrate input device position
     TouchCalibration getTouchCalibrationForInputDevice(String inputDeviceDescriptor, int rotation);
     void setTouchCalibrationForInputDevice(String inputDeviceDescriptor, int rotation,
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index 83f01a5..72217a1 100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
@@ -16,8 +16,10 @@
 
 package android.hardware.input;
 
+import android.annotation.CallbackExecutor;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.annotation.SystemService;
@@ -45,12 +47,14 @@
 import android.view.InputMonitor;
 import android.view.MotionEvent;
 import android.view.PointerIcon;
+import android.view.VerifiedInputEvent;
 
 import com.android.internal.os.SomeArgs;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
+import java.util.concurrent.Executor;
 import java.util.List;
 
 /**
@@ -907,6 +911,27 @@
     }
 
     /**
+     * Verify the details of an {@link android.view.InputEvent} that came from the system.
+     * If the event did not come from the system, or its details could not be verified, then this
+     * will return {@code null}. Receiving {@code null} does not mean that the event did not
+     * originate from the system, just that we were unable to verify it. This can
+     * happen for a number of reasons during normal operation.
+     *
+     * @param event The {@link android.view.InputEvent} to check
+     *
+     * @return {@link android.view.VerifiedInputEvent}, which is a subset of the provided
+     * {@link android.view.InputEvent}
+     *         {@code null} if the event could not be verified.
+     */
+    public @Nullable VerifiedInputEvent verifyInputEvent(@NonNull InputEvent event) {
+        try {
+            return mIm.verifyInputEvent(event);
+        } catch (RemoteException ex) {
+            throw ex.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Changes the mouse pointer's icon shape into the specified id.
      *
      * @param iconId The id of the pointer graphic, as a value between
@@ -1236,6 +1261,32 @@
         }
 
         @Override
+        public boolean isVibrating() {
+            throw new UnsupportedOperationException(
+                "isVibrating not supported in InputDeviceVibrator");
+        }
+
+        @Override
+        public void addVibratorStateListener(@NonNull OnVibratorStateChangedListener listener) {
+            throw new UnsupportedOperationException(
+                "addVibratorStateListener not supported in InputDeviceVibrator");
+        }
+
+        @Override
+        public void addVibratorStateListener(
+                @NonNull @CallbackExecutor Executor executor,
+                @NonNull OnVibratorStateChangedListener listener) {
+            throw new UnsupportedOperationException(
+                "addVibratorStateListener not supported in InputDeviceVibrator");
+        }
+
+        @Override
+        public void removeVibratorStateListener(@NonNull OnVibratorStateChangedListener listener) {
+            throw new UnsupportedOperationException(
+                "removeVibratorStateListener not supported in InputDeviceVibrator");
+        }
+
+        @Override
         public boolean hasAmplitudeControl() {
             return false;
         }
diff --git a/core/java/android/hardware/location/ContextHubManager.java b/core/java/android/hardware/location/ContextHubManager.java
index db16d24..1ed791d 100644
--- a/core/java/android/hardware/location/ContextHubManager.java
+++ b/core/java/android/hardware/location/ContextHubManager.java
@@ -54,7 +54,7 @@
  */
 @SystemApi
 @SystemService(Context.CONTEXTHUB_SERVICE)
-@RequiresFeature(PackageManager.FEATURE_CONTEXTHUB)
+@RequiresFeature(PackageManager.FEATURE_CONTEXT_HUB)
 public final class ContextHubManager {
     private static final String TAG = "ContextHubManager";
 
diff --git a/core/java/android/hardware/soundtrigger/ConversionUtil.java b/core/java/android/hardware/soundtrigger/ConversionUtil.java
index a30fd6b..dbf33ca 100644
--- a/core/java/android/hardware/soundtrigger/ConversionUtil.java
+++ b/core/java/android/hardware/soundtrigger/ConversionUtil.java
@@ -17,7 +17,6 @@
 package android.hardware.soundtrigger;
 
 import android.annotation.Nullable;
-import android.hardware.soundtrigger.ModelParams;
 import android.media.AudioFormat;
 import android.media.audio.common.AudioConfig;
 import android.media.soundtrigger_middleware.AudioCapabilities;
@@ -333,20 +332,22 @@
     public static int aidl2apiAudioCapabilities(int aidlCapabilities) {
         int result = 0;
         if ((aidlCapabilities & AudioCapabilities.ECHO_CANCELLATION) != 0) {
-            result |= SoundTrigger.ModuleProperties.CAPABILITY_ECHO_CANCELLATION;
+            result |= SoundTrigger.ModuleProperties.AUDIO_CAPABILITY_ECHO_CANCELLATION;
         }
         if ((aidlCapabilities & AudioCapabilities.NOISE_SUPPRESSION) != 0) {
-            result |= SoundTrigger.ModuleProperties.CAPABILITY_NOISE_SUPPRESSION;
+            result |= SoundTrigger.ModuleProperties.AUDIO_CAPABILITY_NOISE_SUPPRESSION;
         }
         return result;
     }
 
     public static int api2aidlAudioCapabilities(int apiCapabilities) {
         int result = 0;
-        if ((apiCapabilities & SoundTrigger.ModuleProperties.CAPABILITY_ECHO_CANCELLATION) != 0) {
+        if ((apiCapabilities & SoundTrigger.ModuleProperties.AUDIO_CAPABILITY_ECHO_CANCELLATION)
+                != 0) {
             result |= AudioCapabilities.ECHO_CANCELLATION;
         }
-        if ((apiCapabilities & SoundTrigger.ModuleProperties.CAPABILITY_NOISE_SUPPRESSION) != 0) {
+        if ((apiCapabilities & SoundTrigger.ModuleProperties.AUDIO_CAPABILITY_NOISE_SUPPRESSION)
+                != 0) {
             result |= AudioCapabilities.NOISE_SUPPRESSION;
         }
         return result;
diff --git a/core/java/android/hardware/soundtrigger/SoundTrigger.java b/core/java/android/hardware/soundtrigger/SoundTrigger.java
index d505ae5..a74871d2 100644
--- a/core/java/android/hardware/soundtrigger/SoundTrigger.java
+++ b/core/java/android/hardware/soundtrigger/SoundTrigger.java
@@ -97,8 +97,8 @@
          */
         @Retention(RetentionPolicy.SOURCE)
         @IntDef(flag = true, prefix = { "AUDIO_CAPABILITY_" }, value = {
-                CAPABILITY_ECHO_CANCELLATION,
-                CAPABILITY_NOISE_SUPPRESSION
+                AUDIO_CAPABILITY_ECHO_CANCELLATION,
+                AUDIO_CAPABILITY_NOISE_SUPPRESSION
         })
         public @interface AudioCapabilities {}
 
@@ -106,12 +106,12 @@
          * If set the underlying module supports AEC.
          * Describes bit field {@link ModuleProperties#audioCapabilities}
          */
-        public static final int CAPABILITY_ECHO_CANCELLATION = 0x1;
+        public static final int AUDIO_CAPABILITY_ECHO_CANCELLATION = 0x1;
         /**
          * If set, the underlying module supports noise suppression.
          * Describes bit field {@link ModuleProperties#audioCapabilities}
          */
-        public static final int CAPABILITY_NOISE_SUPPRESSION = 0x2;
+        public static final int AUDIO_CAPABILITY_NOISE_SUPPRESSION = 0x2;
 
         /** Unique module ID provided by the native service */
         public final int id;
@@ -735,22 +735,40 @@
         /**
          * The inclusive start of supported range.
          */
-        public final int start;
+        private final int mStart;
 
         /**
          * The inclusive end of supported range.
          */
-        public final int end;
+        private final int mEnd;
 
         ModelParamRange(int start, int end) {
-            this.start = start;
-            this.end = end;
+            this.mStart = start;
+            this.mEnd = end;
         }
 
         /** @hide */
         private ModelParamRange(@NonNull Parcel in) {
-            this.start = in.readInt();
-            this.end = in.readInt();
+            this.mStart = in.readInt();
+            this.mEnd = in.readInt();
+        }
+
+        /**
+         * Get the beginning of the param range
+         *
+         * @return The inclusive start of the supported range.
+         */
+        public int getStart() {
+            return mStart;
+        }
+
+        /**
+         * Get the end of the param range
+         *
+         * @return The inclusive end of the supported range.
+         */
+        public int getEnd() {
+            return mEnd;
         }
 
         @NonNull
@@ -780,8 +798,8 @@
         public int hashCode() {
             final int prime = 31;
             int result = 1;
-            result = prime * result + (start);
-            result = prime * result + (end);
+            result = prime * result + (mStart);
+            result = prime * result + (mEnd);
             return result;
         }
 
@@ -797,10 +815,10 @@
                 return false;
             }
             ModelParamRange other = (ModelParamRange) obj;
-            if (start != other.start) {
+            if (mStart != other.mStart) {
                 return false;
             }
-            if (end != other.end) {
+            if (mEnd != other.mEnd) {
                 return false;
             }
             return true;
@@ -808,14 +826,14 @@
 
         @Override
         public void writeToParcel(@NonNull Parcel dest, int flags) {
-            dest.writeInt(start);
-            dest.writeInt(end);
+            dest.writeInt(mStart);
+            dest.writeInt(mEnd);
         }
 
         @Override
         @NonNull
         public String toString() {
-            return "ModelParamRange [start=" + start + ", end=" + end + "]";
+            return "ModelParamRange [start=" + mStart + ", end=" + mEnd + "]";
         }
     }
 
diff --git a/core/java/android/hardware/soundtrigger/SoundTriggerModule.java b/core/java/android/hardware/soundtrigger/SoundTriggerModule.java
index 9bd3992..c1df5b6 100644
--- a/core/java/android/hardware/soundtrigger/SoundTriggerModule.java
+++ b/core/java/android/hardware/soundtrigger/SoundTriggerModule.java
@@ -221,10 +221,8 @@
     /**
      * Set a model specific {@link ModelParams} with the given value. This
      * parameter will keep its value for the duration the model is loaded regardless of starting
-     * and
-     * stopping recognition. Once the model is unloaded, the value will be lost.
-     * {@link SoundTriggerModule#queryParameter(int, int)} should be checked first before calling
-     * this method.
+     * and stopping recognition. Once the model is unloaded, the value will be lost.
+     * {@link #queryParameter} should be checked first before calling this method.
      *
      * @param soundModelHandle handle of model to apply parameter
      * @param modelParam       {@link ModelParams}
@@ -251,22 +249,14 @@
      * for the duration the model is loaded regardless of starting and stopping recognition.
      * Once the model is unloaded, the value will be lost. If the value is not set, a default
      * value is returned. See {@link ModelParams} for parameter default values.
-     * {@link SoundTriggerModule#queryParameter(int, int)} should be checked first before
+     * {@link #queryParameter} should be checked first before
      * calling this method. Otherwise, an exception can be thrown.
      *
      * @param soundModelHandle handle of model to get parameter
      * @param modelParam       {@link ModelParams}
      * @return value of parameter
-     * @throws UnsupportedOperationException if hal or model do not support this API.
-     *                                       {@link SoundTriggerModule#queryParameter(int, int)}
-     *                                       should
-     *                                       be checked first.
-     * @throws IllegalArgumentException      if invalid model handle or parameter is passed.
-     *                                       {@link SoundTriggerModule#queryParameter(int, int)}
-     *                                       should be checked first.
      */
-    public synchronized int getParameter(int soundModelHandle, @ModelParams int modelParam)
-            throws UnsupportedOperationException, IllegalArgumentException {
+    public synchronized int getParameter(int soundModelHandle, @ModelParams int modelParam) {
         try {
             return mService.getModelParameter(soundModelHandle,
                     ConversionUtil.api2aidlModelParameter(modelParam));
@@ -276,9 +266,8 @@
     }
 
     /**
-     * Determine if parameter control is supported for the given model handle.
-     * This method should be checked prior to calling {@link SoundTriggerModule#setParameter} or
-     * {@link SoundTriggerModule#getParameter}.
+     * Query the parameter support and range for a given {@link ModelParams}.
+     * This method should be check prior to calling {@link #setParameter} or {@link #getParameter}.
      *
      * @param soundModelHandle handle of model to get parameter
      * @param modelParam       {@link ModelParams}
diff --git a/core/java/android/hardware/usb/UsbManager.java b/core/java/android/hardware/usb/UsbManager.java
index 086db10..d16f070 100644
--- a/core/java/android/hardware/usb/UsbManager.java
+++ b/core/java/android/hardware/usb/UsbManager.java
@@ -18,6 +18,7 @@
 package android.hardware.usb;
 
 import android.Manifest;
+import android.annotation.LongDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.RequiresFeature;
@@ -337,12 +338,14 @@
      * Code for the mtp usb function. Passed as a mask into {@link #setCurrentFunctions(long)}
      * {@hide}
      */
+    @SystemApi
     public static final long FUNCTION_MTP = GadgetFunction.MTP;
 
     /**
      * Code for the ptp usb function. Passed as a mask into {@link #setCurrentFunctions(long)}
      * {@hide}
      */
+    @SystemApi
     public static final long FUNCTION_PTP = GadgetFunction.PTP;
 
     /**
@@ -356,24 +359,28 @@
      * Code for the midi usb function. Passed as a mask into {@link #setCurrentFunctions(long)}
      * {@hide}
      */
+    @SystemApi
     public static final long FUNCTION_MIDI = GadgetFunction.MIDI;
 
     /**
      * Code for the accessory usb function.
      * {@hide}
      */
+    @SystemApi
     public static final long FUNCTION_ACCESSORY = GadgetFunction.ACCESSORY;
 
     /**
      * Code for the audio source usb function.
      * {@hide}
      */
+    @SystemApi
     public static final long FUNCTION_AUDIO_SOURCE = GadgetFunction.AUDIO_SOURCE;
 
     /**
      * Code for the adb usb function.
      * {@hide}
      */
+    @SystemApi
     public static final long FUNCTION_ADB = GadgetFunction.ADB;
 
     /**
@@ -399,6 +406,20 @@
         FUNCTION_NAME_TO_CODE.put(UsbManager.USB_FUNCTION_NCM, FUNCTION_NCM);
     }
 
+    /** @hide */
+    @LongDef(flag = true, prefix = { "FUNCTION_" }, value = {
+            FUNCTION_NONE,
+            FUNCTION_MTP,
+            FUNCTION_PTP,
+            FUNCTION_RNDIS,
+            FUNCTION_MIDI,
+            FUNCTION_ACCESSORY,
+            FUNCTION_AUDIO_SOURCE,
+            FUNCTION_ADB,
+            FUNCTION_NCM,
+    })
+    public @interface UsbFunctionMode {}
+
     private final Context mContext;
     private final IUsbManager mService;
 
@@ -721,7 +742,7 @@
      */
     @SystemApi
     @RequiresPermission(Manifest.permission.MANAGE_USB)
-    public void setCurrentFunctions(long functions) {
+    public void setCurrentFunctions(@UsbFunctionMode long functions) {
         try {
             mService.setCurrentFunctions(functions);
         } catch (RemoteException e) {
diff --git a/core/java/android/inputmethodservice/IInputMethodWrapper.java b/core/java/android/inputmethodservice/IInputMethodWrapper.java
index 2a441de..f0b1eaa 100644
--- a/core/java/android/inputmethodservice/IInputMethodWrapper.java
+++ b/core/java/android/inputmethodservice/IInputMethodWrapper.java
@@ -19,7 +19,6 @@
 import android.annotation.BinderThread;
 import android.annotation.MainThread;
 import android.compat.annotation.UnsupportedAppUsage;
-import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.os.Binder;
@@ -29,7 +28,6 @@
 import android.os.ResultReceiver;
 import android.util.Log;
 import android.view.InputChannel;
-import android.view.autofill.AutofillId;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputBinding;
 import android.view.inputmethod.InputConnection;
@@ -46,6 +44,7 @@
 import com.android.internal.view.IInputMethod;
 import com.android.internal.view.IInputMethodSession;
 import com.android.internal.view.IInputSessionCallback;
+import com.android.internal.view.InlineSuggestionsRequestInfo;
 import com.android.internal.view.InputConnectionWrapper;
 
 import java.io.FileDescriptor;
@@ -233,8 +232,9 @@
                 return;
             case DO_CREATE_INLINE_SUGGESTIONS_REQUEST:
                 args = (SomeArgs) msg.obj;
-                inputMethod.onCreateInlineSuggestionsRequest((ComponentName) args.arg1,
-                        (AutofillId) args.arg2, (IInlineSuggestionsRequestCallback) args.arg3);
+                inputMethod.onCreateInlineSuggestionsRequest(
+                        (InlineSuggestionsRequestInfo) args.arg1,
+                        (IInlineSuggestionsRequestCallback) args.arg2);
                 return;
 
         }
@@ -279,11 +279,10 @@
 
     @BinderThread
     @Override
-    public void onCreateInlineSuggestionsRequest(ComponentName componentName, AutofillId autofillId,
+    public void onCreateInlineSuggestionsRequest(InlineSuggestionsRequestInfo requestInfo,
             IInlineSuggestionsRequestCallback cb) {
         mCaller.executeOrSendMessage(
-                mCaller.obtainMessageOOO(DO_CREATE_INLINE_SUGGESTIONS_REQUEST, componentName,
-                        autofillId, cb));
+                mCaller.obtainMessageOO(DO_CREATE_INLINE_SUGGESTIONS_REQUEST, requestInfo, cb));
     }
 
     @BinderThread
diff --git a/core/java/android/inputmethodservice/InlineSuggestionSession.java b/core/java/android/inputmethodservice/InlineSuggestionSession.java
new file mode 100644
index 0000000..edae06a
--- /dev/null
+++ b/core/java/android/inputmethodservice/InlineSuggestionSession.java
@@ -0,0 +1,158 @@
+/*
+ * 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.inputmethodservice;
+
+import static android.inputmethodservice.InputMethodService.DEBUG;
+
+import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
+
+import android.annotation.NonNull;
+import android.content.ComponentName;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.util.Log;
+import android.view.inputmethod.InlineSuggestionsRequest;
+import android.view.inputmethod.InlineSuggestionsResponse;
+
+import com.android.internal.view.IInlineSuggestionsRequestCallback;
+import com.android.internal.view.IInlineSuggestionsResponseCallback;
+
+import java.lang.ref.WeakReference;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+/**
+ * Maintains an active inline suggestion session.
+ *
+ * <p>
+ * Each session corresponds to one inline suggestion request, but there may be multiple callbacks
+ * with the inline suggestions response.
+ */
+class InlineSuggestionSession {
+
+    private static final String TAG = InlineSuggestionSession.class.getSimpleName();
+
+    private final Handler mHandler = new Handler(Looper.getMainLooper(), null, true);
+
+    @NonNull
+    private final ComponentName mComponentName;
+    @NonNull
+    private final IInlineSuggestionsRequestCallback mCallback;
+    @NonNull
+    private final InlineSuggestionsResponseCallbackImpl mResponseCallback;
+    @NonNull
+    private final Supplier<String> mClientPackageNameSupplier;
+    @NonNull
+    private final Supplier<InlineSuggestionsRequest> mRequestSupplier;
+    @NonNull
+    private final Supplier<IBinder> mHostInputTokenSupplier;
+    @NonNull
+    private final Consumer<InlineSuggestionsResponse> mResponseConsumer;
+
+    private volatile boolean mInvalidated = false;
+
+    InlineSuggestionSession(@NonNull ComponentName componentName,
+            @NonNull IInlineSuggestionsRequestCallback callback,
+            @NonNull Supplier<String> clientPackageNameSupplier,
+            @NonNull Supplier<InlineSuggestionsRequest> requestSupplier,
+            @NonNull Supplier<IBinder> hostInputTokenSupplier,
+            @NonNull Consumer<InlineSuggestionsResponse> responseConsumer) {
+        mComponentName = componentName;
+        mCallback = callback;
+        mResponseCallback = new InlineSuggestionsResponseCallbackImpl(this);
+        mClientPackageNameSupplier = clientPackageNameSupplier;
+        mRequestSupplier = requestSupplier;
+        mHostInputTokenSupplier = hostInputTokenSupplier;
+        mResponseConsumer = responseConsumer;
+
+        makeInlineSuggestionsRequest();
+    }
+
+    /**
+     * This needs to be called before creating a new session, such that the later response callbacks
+     * will be discarded.
+     */
+    void invalidateSession() {
+        mInvalidated = true;
+    }
+
+    /**
+     * Sends an {@link InlineSuggestionsRequest} obtained from {@cocde supplier} to the current
+     * Autofill Session through
+     * {@link IInlineSuggestionsRequestCallback#onInlineSuggestionsRequest}.
+     */
+    private void makeInlineSuggestionsRequest() {
+        try {
+            final InlineSuggestionsRequest request = mRequestSupplier.get();
+            if (request == null) {
+                if (DEBUG) {
+                    Log.d(TAG, "onCreateInlineSuggestionsRequest() returned null request");
+                }
+                mCallback.onInlineSuggestionsUnsupported();
+            } else {
+                request.setHostInputToken(mHostInputTokenSupplier.get());
+                mCallback.onInlineSuggestionsRequest(request, mResponseCallback);
+            }
+        } catch (RemoteException e) {
+            Log.w(TAG, "makeInlinedSuggestionsRequest() remote exception:" + e);
+        }
+    }
+
+    private void handleOnInlineSuggestionsResponse(@NonNull InlineSuggestionsResponse response) {
+        if (mInvalidated) {
+            if (DEBUG) {
+                Log.d(TAG, "handleOnInlineSuggestionsResponse() called on invalid session");
+            }
+            return;
+        }
+        // TODO(b/149522488): checking the current focused input field to make sure we don't send
+        //  inline responses for previous input field
+        if (!mComponentName.getPackageName().equals(mClientPackageNameSupplier.get())) {
+            if (DEBUG) {
+                Log.d(TAG, "handleOnInlineSuggestionsResponse() called on the wrong package name");
+            }
+            return;
+        }
+        mResponseConsumer.accept(response);
+    }
+
+    /**
+     * Internal implementation of {@link IInlineSuggestionsResponseCallback}.
+     */
+    static final class InlineSuggestionsResponseCallbackImpl
+            extends IInlineSuggestionsResponseCallback.Stub {
+        private final WeakReference<InlineSuggestionSession> mInlineSuggestionSession;
+
+        private InlineSuggestionsResponseCallbackImpl(
+                InlineSuggestionSession inlineSuggestionSession) {
+            mInlineSuggestionSession = new WeakReference<>(inlineSuggestionSession);
+        }
+
+        @Override
+        public void onInlineSuggestionsResponse(InlineSuggestionsResponse response)
+                throws RemoteException {
+            final InlineSuggestionSession session = mInlineSuggestionSession.get();
+            if (session != null) {
+                session.mHandler.sendMessage(obtainMessage(
+                        InlineSuggestionSession::handleOnInlineSuggestionsResponse, session,
+                        response));
+            }
+        }
+    }
+}
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 49e1d5e..20a4ab3 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -22,8 +22,6 @@
 import static android.view.WindowInsets.Type.navigationBars;
 import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
 
-import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
-
 import static java.lang.annotation.RetentionPolicy.SOURCE;
 
 import android.annotation.AnyThread;
@@ -36,7 +34,6 @@
 import android.app.ActivityManager;
 import android.app.Dialog;
 import android.compat.annotation.UnsupportedAppUsage;
-import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
@@ -51,7 +48,6 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
-import android.os.Looper;
 import android.os.RemoteException;
 import android.os.ResultReceiver;
 import android.os.SystemClock;
@@ -77,7 +73,6 @@
 import android.view.WindowInsets;
 import android.view.WindowManager;
 import android.view.animation.AnimationUtils;
-import android.view.autofill.AutofillId;
 import android.view.inputmethod.CompletionInfo;
 import android.view.inputmethod.CursorAnchorInfo;
 import android.view.inputmethod.EditorInfo;
@@ -102,13 +97,12 @@
 import com.android.internal.inputmethod.InputMethodPrivilegedOperations;
 import com.android.internal.inputmethod.InputMethodPrivilegedOperationsRegistry;
 import com.android.internal.view.IInlineSuggestionsRequestCallback;
-import com.android.internal.view.IInlineSuggestionsResponseCallback;
+import com.android.internal.view.InlineSuggestionsRequestInfo;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
-import java.lang.ref.WeakReference;
 import java.util.Collections;
 
 /**
@@ -450,7 +444,7 @@
     final int[] mTmpLocation = new int[2];
 
     @Nullable
-    private InlineSuggestionsRequestInfo mInlineSuggestionsRequestInfo = null;
+    private InlineSuggestionSession mInlineSuggestionSession;
 
     private boolean mAutomotiveHideNavBarForKeyboard;
     private boolean mIsAutomotive;
@@ -465,8 +459,6 @@
      */
     private IBinder mCurShowInputToken;
 
-    private final Handler mHandler = new Handler(Looper.getMainLooper(), null, true);
-
     final ViewTreeObserver.OnComputeInternalInsetsListener mInsetsComputer = info -> {
         onComputeInsets(mTmpInsets);
         if (isExtractViewShown()) {
@@ -533,12 +525,13 @@
          */
         @MainThread
         @Override
-        public void onCreateInlineSuggestionsRequest(ComponentName componentName,
-                AutofillId autofillId, IInlineSuggestionsRequestCallback cb) {
+        public void onCreateInlineSuggestionsRequest(
+                @NonNull InlineSuggestionsRequestInfo requestInfo,
+                @NonNull IInlineSuggestionsRequestCallback cb) {
             if (DEBUG) {
                 Log.d(TAG, "InputMethodService received onCreateInlineSuggestionsRequest()");
             }
-            handleOnCreateInlineSuggestionsRequest(componentName, autofillId, cb);
+            handleOnCreateInlineSuggestionsRequest(requestInfo, cb);
         }
 
         /**
@@ -749,11 +742,14 @@
 
     // TODO(b/137800469): Add detailed docs explaining the inline suggestions process.
     /**
-     * Returns an {@link InlineSuggestionsRequest} to be sent to Autofill.
+     * This method should be implemented by subclass which supports displaying autofill inline
+     * suggestion.
      *
-     * <p>Should be implemented by subclasses.</p>
+     * @param uiExtras the extras that contain the UI renderer related information
+     * @return an {@link InlineSuggestionsRequest} to be sent to Autofill.
      */
-    public @Nullable InlineSuggestionsRequest onCreateInlineSuggestionsRequest() {
+    @Nullable
+    public InlineSuggestionsRequest onCreateInlineSuggestionsRequest(@NonNull Bundle uiExtras) {
         return null;
     }
 
@@ -770,39 +766,10 @@
         return false;
     }
 
-    /**
-     * Sends an {@link InlineSuggestionsRequest} obtained from
-     * {@link #onCreateInlineSuggestionsRequest()} to the current Autofill Session through
-     * {@link IInlineSuggestionsRequestCallback#onInlineSuggestionsRequest}.
-     */
-    private void makeInlineSuggestionsRequest() {
-        if (mInlineSuggestionsRequestInfo == null) {
-            Log.w(TAG, "makeInlineSuggestionsRequest() called with null requestInfo cache");
-            return;
-        }
-
-        final IInlineSuggestionsRequestCallback requestCallback =
-                mInlineSuggestionsRequestInfo.mCallback;
-        try {
-            final InlineSuggestionsRequest request = onCreateInlineSuggestionsRequest();
-            if (request == null) {
-                Log.w(TAG, "onCreateInlineSuggestionsRequest() returned null request");
-                requestCallback.onInlineSuggestionsUnsupported();
-            } else {
-                final IInlineSuggestionsResponseCallback inlineSuggestionsResponseCallback =
-                        new InlineSuggestionsResponseCallbackImpl(this,
-                                mInlineSuggestionsRequestInfo.mComponentName,
-                                mInlineSuggestionsRequestInfo.mFocusedId);
-                requestCallback.onInlineSuggestionsRequest(request,
-                        inlineSuggestionsResponseCallback);
-            }
-        } catch (RemoteException e) {
-            Log.w(TAG, "makeInlinedSuggestionsRequest() remote exception:" + e);
-        }
-    }
-
-    private void handleOnCreateInlineSuggestionsRequest(@NonNull ComponentName componentName,
-            @NonNull AutofillId autofillId, @NonNull IInlineSuggestionsRequestCallback callback) {
+    @MainThread
+    private void handleOnCreateInlineSuggestionsRequest(
+            @NonNull InlineSuggestionsRequestInfo requestInfo,
+            @NonNull IInlineSuggestionsRequestCallback callback) {
         if (!mInputStarted) {
             try {
                 Log.w(TAG, "onStartInput() not called yet");
@@ -813,24 +780,33 @@
             return;
         }
 
-        mInlineSuggestionsRequestInfo = new InlineSuggestionsRequestInfo(componentName, autofillId,
-                callback);
-
-        makeInlineSuggestionsRequest();
+        if (mInlineSuggestionSession != null) {
+            mInlineSuggestionSession.invalidateSession();
+        }
+        mInlineSuggestionSession = new InlineSuggestionSession(requestInfo.getComponentName(),
+                callback, this::getEditorInfoPackageName,
+                () -> onCreateInlineSuggestionsRequest(requestInfo.getUiExtras()),
+                this::getHostInputToken, this::onInlineSuggestionsResponse);
     }
 
-    private void handleOnInlineSuggestionsResponse(@NonNull ComponentName componentName,
-            @NonNull AutofillId autofillId, @NonNull InlineSuggestionsResponse response) {
-        if (!mInlineSuggestionsRequestInfo.validate(componentName)) {
-            if (DEBUG) {
-                Log.d(TAG,
-                        "Response component=" + componentName + " differs from request component="
-                                + mInlineSuggestionsRequestInfo.mComponentName
-                                + ", ignoring response");
-            }
-            return;
+    @Nullable
+    private String getEditorInfoPackageName() {
+        if (mInputEditorInfo != null) {
+            return mInputEditorInfo.packageName;
         }
-        onInlineSuggestionsResponse(response);
+        return null;
+    }
+
+    /**
+     * Returns the {@link IBinder} input token from the host view root.
+     */
+    @Nullable
+    private IBinder getHostInputToken() {
+        ViewRootImpl viewRoot = null;
+        if (mRootView != null) {
+            viewRoot = mRootView.getViewRootImpl();
+        }
+        return viewRoot == null ? null : viewRoot.getInputToken();
     }
 
     private void notifyImeHidden() {
@@ -851,63 +827,6 @@
     }
 
     /**
-     * Internal implementation of {@link IInlineSuggestionsResponseCallback}.
-     */
-    private static final class InlineSuggestionsResponseCallbackImpl
-            extends IInlineSuggestionsResponseCallback.Stub {
-        private final WeakReference<InputMethodService> mInputMethodService;
-
-        private final ComponentName mRequestComponentName;
-        private final AutofillId mRequestAutofillId;
-
-        private InlineSuggestionsResponseCallbackImpl(InputMethodService inputMethodService,
-                ComponentName componentName, AutofillId autofillId) {
-            mInputMethodService = new WeakReference<>(inputMethodService);
-            mRequestComponentName = componentName;
-            mRequestAutofillId = autofillId;
-        }
-
-        @Override
-        public void onInlineSuggestionsResponse(InlineSuggestionsResponse response)
-                throws RemoteException {
-            final InputMethodService service = mInputMethodService.get();
-            if (service != null) {
-                service.mHandler.sendMessage(obtainMessage(
-                        InputMethodService::handleOnInlineSuggestionsResponse, service,
-                        mRequestComponentName, mRequestAutofillId, response));
-            }
-        }
-    }
-
-    /**
-     * Information about incoming requests from Autofill Frameworks for inline suggestions.
-     */
-    private static final class InlineSuggestionsRequestInfo {
-        final ComponentName mComponentName;
-        final AutofillId mFocusedId;
-        final IInlineSuggestionsRequestCallback mCallback;
-
-        InlineSuggestionsRequestInfo(ComponentName componentName, AutofillId focusedId,
-                IInlineSuggestionsRequestCallback callback) {
-            this.mComponentName = componentName;
-            this.mFocusedId = focusedId;
-            this.mCallback = callback;
-        }
-
-        /**
-         * Returns whether the cached {@link ComponentName} matches the passed in activity.
-         */
-        public boolean validate(ComponentName componentName) {
-            final boolean result = componentName.equals(mComponentName);
-            if (DEBUG && !result) {
-                Log.d(TAG, "Cached request info ComponentName=" + mComponentName
-                        + " differs from received ComponentName=" + componentName);
-            }
-            return result;
-        }
-    }
-
-    /**
      * Concrete implementation of
      * {@link AbstractInputMethodService.AbstractInputMethodSessionImpl} that provides
      * all of the standard behavior for an input method session.
diff --git a/core/java/android/inputmethodservice/OWNERS b/core/java/android/inputmethodservice/OWNERS
new file mode 100644
index 0000000..4447197
--- /dev/null
+++ b/core/java/android/inputmethodservice/OWNERS
@@ -0,0 +1,3 @@
+set noparent
+
+include ../../../../services/core/java/com/android/server/inputmethod/OWNERS
diff --git a/core/java/android/net/CaptivePortal.java b/core/java/android/net/CaptivePortal.java
index fb35b4b..8afeb30 100644
--- a/core/java/android/net/CaptivePortal.java
+++ b/core/java/android/net/CaptivePortal.java
@@ -15,7 +15,9 @@
  */
 package android.net;
 
+import android.annotation.IntDef;
 import android.annotation.NonNull;
+import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
 import android.annotation.TestApi;
 import android.os.IBinder;
@@ -23,6 +25,8 @@
 import android.os.Parcelable;
 import android.os.RemoteException;
 
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
 /**
  * A class allowing apps handling the {@link ConnectivityManager#ACTION_CAPTIVE_PORTAL_SIGN_IN}
  * activity to indicate to the system different outcomes of captive portal sign in.  This class is
@@ -76,6 +80,17 @@
     private final IBinder mBinder;
 
     /** @hide */
+    @IntDef(value = {
+        MetricsEvent.ACTION_CAPTIVE_PORTAL_LOGIN_ACTIVITY,
+        MetricsEvent.ACTION_CAPTIVE_PORTAL_LOGIN_RESULT_DISMISSED,
+        MetricsEvent.ACTION_CAPTIVE_PORTAL_LOGIN_RESULT_UNWANTED,
+        MetricsEvent.ACTION_CAPTIVE_PORTAL_LOGIN_RESULT_WANTED_AS_IS,
+        MetricsEvent.CAPTIVE_PORTAL_LOGIN_ACTIVITY_SSL_ERROR,
+    })
+    public @interface EventId {
+    }
+
+    /** @hide */
     public CaptivePortal(@NonNull IBinder binder) {
         mBinder = binder;
     }
@@ -153,6 +168,7 @@
      */
     @SystemApi
     @TestApi
+    @RequiresPermission(android.Manifest.permission.NETWORK_STACK)
     public void reevaluateNetwork() {
         try {
             ICaptivePortal.Stub.asInterface(mBinder).appRequest(APP_REQUEST_REEVALUATION_REQUIRED);
@@ -168,7 +184,7 @@
      */
     @SystemApi
     @TestApi
-    public void logEvent(int eventId, @NonNull String packageName) {
+    public void logEvent(@EventId int eventId, @NonNull String packageName) {
         try {
             ICaptivePortal.Stub.asInterface(mBinder).logEvent(eventId, packageName);
         } catch (RemoteException e) {
diff --git a/core/java/android/net/ConnectivityDiagnosticsManager.java b/core/java/android/net/ConnectivityDiagnosticsManager.java
index b128ea7..d009144 100644
--- a/core/java/android/net/ConnectivityDiagnosticsManager.java
+++ b/core/java/android/net/ConnectivityDiagnosticsManager.java
@@ -202,7 +202,7 @@
          */
         @NetworkProbe
         public static final String KEY_NETWORK_PROBES_ATTEMPTED_BITMASK =
-                "networkProbesAttemped";
+                "networkProbesAttempted";
 
         /** @hide */
         @StringDef(prefix = {"KEY_"}, value = {
@@ -252,8 +252,8 @@
                 @NonNull PersistableBundle additionalInfo) {
             mNetwork = network;
             mReportTimestamp = reportTimestamp;
-            mLinkProperties = linkProperties;
-            mNetworkCapabilities = networkCapabilities;
+            mLinkProperties = new LinkProperties(linkProperties);
+            mNetworkCapabilities = new NetworkCapabilities(networkCapabilities);
             mAdditionalInfo = additionalInfo;
         }
 
@@ -433,6 +433,12 @@
         /** The detection method used to identify the suspected data stall */
         @DetectionMethod private final int mDetectionMethod;
 
+        /** LinkProperties available on the Network at the reported timestamp */
+        @NonNull private final LinkProperties mLinkProperties;
+
+        /** NetworkCapabilities available on the Network at the reported timestamp */
+        @NonNull private final NetworkCapabilities mNetworkCapabilities;
+
         /** PersistableBundle that may contain additional information on the suspected data stall */
         @NonNull private final PersistableBundle mStallDetails;
 
@@ -446,16 +452,23 @@
          * @param network The Network for which this DataStallReport applies
          * @param reportTimestamp The timestamp for the report
          * @param detectionMethod The detection method used to identify this data stall
+         * @param linkProperties The LinkProperties available on network at reportTimestamp
+         * @param networkCapabilities The NetworkCapabilities available on network at
+         *     reportTimestamp
          * @param stallDetails A PersistableBundle that may contain additional info about the report
          */
         public DataStallReport(
                 @NonNull Network network,
                 long reportTimestamp,
                 @DetectionMethod int detectionMethod,
+                @NonNull LinkProperties linkProperties,
+                @NonNull NetworkCapabilities networkCapabilities,
                 @NonNull PersistableBundle stallDetails) {
             mNetwork = network;
             mReportTimestamp = reportTimestamp;
             mDetectionMethod = detectionMethod;
+            mLinkProperties = new LinkProperties(linkProperties);
+            mNetworkCapabilities = new NetworkCapabilities(networkCapabilities);
             mStallDetails = stallDetails;
         }
 
@@ -488,6 +501,26 @@
         }
 
         /**
+         * Returns the LinkProperties available when this report was taken.
+         *
+         * @return LinkProperties available on the Network at the reported timestamp
+         */
+        @NonNull
+        public LinkProperties getLinkProperties() {
+            return new LinkProperties(mLinkProperties);
+        }
+
+        /**
+         * Returns the NetworkCapabilities when this report was taken.
+         *
+         * @return NetworkCapabilities available on the Network at the reported timestamp
+         */
+        @NonNull
+        public NetworkCapabilities getNetworkCapabilities() {
+            return new NetworkCapabilities(mNetworkCapabilities);
+        }
+
+        /**
          * Returns a PersistableBundle with additional info for this report.
          *
          * <p>Gets a bundle with details about the suspected data stall including information
@@ -513,12 +546,20 @@
             return mReportTimestamp == that.mReportTimestamp
                     && mDetectionMethod == that.mDetectionMethod
                     && mNetwork.equals(that.mNetwork)
+                    && mLinkProperties.equals(that.mLinkProperties)
+                    && mNetworkCapabilities.equals(that.mNetworkCapabilities)
                     && persistableBundleEquals(mStallDetails, that.mStallDetails);
         }
 
         @Override
         public int hashCode() {
-            return Objects.hash(mNetwork, mReportTimestamp, mDetectionMethod, mStallDetails);
+            return Objects.hash(
+                    mNetwork,
+                    mReportTimestamp,
+                    mDetectionMethod,
+                    mLinkProperties,
+                    mNetworkCapabilities,
+                    mStallDetails);
         }
 
         /** {@inheritDoc} */
@@ -533,6 +574,8 @@
             dest.writeParcelable(mNetwork, flags);
             dest.writeLong(mReportTimestamp);
             dest.writeInt(mDetectionMethod);
+            dest.writeParcelable(mLinkProperties, flags);
+            dest.writeParcelable(mNetworkCapabilities, flags);
             dest.writeParcelable(mStallDetails, flags);
         }
 
@@ -544,6 +587,8 @@
                                 in.readParcelable(null),
                                 in.readLong(),
                                 in.readInt(),
+                                in.readParcelable(null),
+                                in.readParcelable(null),
                                 in.readParcelable(null));
                     }
 
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index fa12c08..ea26ede 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -2423,14 +2423,14 @@
     /**
      * Get the set of tethered dhcp ranges.
      *
-     * @return an array of 0 or more {@code String} of tethered dhcp ranges.
-     * @deprecated This API just return the default value which is not used in DhcpServer.
+     * @deprecated This method is not supported.
+     * TODO: remove this function when all of clients are removed.
      * {@hide}
      */
     @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
     @Deprecated
     public String[] getTetheredDhcpRanges() {
-        return getTetheringManager().getTetheredDhcpRanges();
+        throw new UnsupportedOperationException("getTetheredDhcpRanges is not supported");
     }
 
     /**
@@ -3750,6 +3750,7 @@
         checkCallbackNotNull(callback);
         Preconditions.checkArgument(action == REQUEST || need != null, "null NetworkCapabilities");
         final NetworkRequest request;
+        final String callingPackageName = mContext.getOpPackageName();
         try {
             synchronized(sCallbacks) {
                 if (callback.networkRequest != null
@@ -3761,10 +3762,11 @@
                 Messenger messenger = new Messenger(handler);
                 Binder binder = new Binder();
                 if (action == LISTEN) {
-                    request = mService.listenForNetwork(need, messenger, binder);
+                    request = mService.listenForNetwork(
+                            need, messenger, binder, callingPackageName);
                 } else {
                     request = mService.requestNetwork(
-                            need, messenger, timeoutMs, binder, legacyType);
+                            need, messenger, timeoutMs, binder, legacyType, callingPackageName);
                 }
                 if (request != null) {
                     sCallbacks.put(request, callback);
@@ -4037,8 +4039,10 @@
             @NonNull PendingIntent operation) {
         printStackTrace();
         checkPendingIntentNotNull(operation);
+        final String callingPackageName = mContext.getOpPackageName();
         try {
-            mService.pendingRequestForNetwork(request.networkCapabilities, operation);
+            mService.pendingRequestForNetwork(
+                    request.networkCapabilities, operation, callingPackageName);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         } catch (ServiceSpecificException e) {
@@ -4150,8 +4154,10 @@
             @NonNull PendingIntent operation) {
         printStackTrace();
         checkPendingIntentNotNull(operation);
+        final String callingPackageName = mContext.getOpPackageName();
         try {
-            mService.pendingListenForNetwork(request.networkCapabilities, operation);
+            mService.pendingListenForNetwork(
+                    request.networkCapabilities, operation, callingPackageName);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         } catch (ServiceSpecificException e) {
@@ -4714,19 +4720,19 @@
     /**
      * Returns the {@code uid} of the owner of a network connection.
      *
-     * @param protocol The protocol of the connection. Only {@code IPPROTO_TCP} and
-     * {@code IPPROTO_UDP} currently supported.
+     * @param protocol The protocol of the connection. Only {@code IPPROTO_TCP} and {@code
+     *     IPPROTO_UDP} currently supported.
      * @param local The local {@link InetSocketAddress} of a connection.
      * @param remote The remote {@link InetSocketAddress} of a connection.
-     *
      * @return {@code uid} if the connection is found and the app has permission to observe it
-     * (e.g., if it is associated with the calling VPN app's tunnel) or
-     * {@link android.os.Process#INVALID_UID} if the connection is not found.
-     * Throws {@link SecurityException} if the caller is not the active VPN for the current user.
-     * Throws {@link IllegalArgumentException} if an unsupported protocol is requested.
+     *     (e.g., if it is associated with the calling VPN app's VpnService tunnel) or {@link
+     *     android.os.Process#INVALID_UID} if the connection is not found.
+     * @throws {@link SecurityException} if the caller is not the active VpnService for the current
+     *     user.
+     * @throws {@link IllegalArgumentException} if an unsupported protocol is requested.
      */
-    public int getConnectionOwnerUid(int protocol, @NonNull InetSocketAddress local,
-            @NonNull InetSocketAddress remote) {
+    public int getConnectionOwnerUid(
+            int protocol, @NonNull InetSocketAddress local, @NonNull InetSocketAddress remote) {
         ConnectionInfo connectionInfo = new ConnectionInfo(protocol, local, remote);
         try {
             return mService.getConnectionOwnerUid(connectionInfo);
diff --git a/core/java/android/net/DhcpResults.java b/core/java/android/net/DhcpResults.java
index 059cd94..5ab0354 100644
--- a/core/java/android/net/DhcpResults.java
+++ b/core/java/android/net/DhcpResults.java
@@ -16,6 +16,7 @@
 
 package android.net;
 
+import android.annotation.Nullable;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.net.shared.InetAddressUtils;
 import android.os.Parcel;
@@ -66,6 +67,9 @@
 
     public String serverHostName;
 
+    @Nullable
+    public String captivePortalApiUrl;
+
     public DhcpResults() {
         super();
     }
@@ -100,6 +104,7 @@
             leaseDuration = source.leaseDuration;
             mtu = source.mtu;
             serverHostName = source.serverHostName;
+            captivePortalApiUrl = source.captivePortalApiUrl;
         }
     }
 
@@ -133,6 +138,7 @@
         leaseDuration = 0;
         mtu = 0;
         serverHostName = null;
+        captivePortalApiUrl = null;
     }
 
     @Override
@@ -144,6 +150,9 @@
         str.append(" lease ").append(leaseDuration).append(" seconds");
         if (mtu != 0) str.append(" MTU ").append(mtu);
         str.append(" Servername ").append(serverHostName);
+        if (captivePortalApiUrl != null) {
+            str.append(" CaptivePortalApiUrl ").append(captivePortalApiUrl);
+        }
 
         return str.toString();
     }
@@ -161,7 +170,8 @@
                 && Objects.equals(vendorInfo, target.vendorInfo)
                 && Objects.equals(serverHostName, target.serverHostName)
                 && leaseDuration == target.leaseDuration
-                && mtu == target.mtu;
+                && mtu == target.mtu
+                && Objects.equals(captivePortalApiUrl, target.captivePortalApiUrl);
     }
 
     /**
@@ -186,6 +196,7 @@
         InetAddressUtils.parcelInetAddress(dest, serverAddress, flags);
         dest.writeString(vendorInfo);
         dest.writeString(serverHostName);
+        dest.writeString(captivePortalApiUrl);
     }
 
     @Override
@@ -201,6 +212,7 @@
         dhcpResults.serverAddress = (Inet4Address) InetAddressUtils.unparcelInetAddress(in);
         dhcpResults.vendorInfo = in.readString();
         dhcpResults.serverHostName = in.readString();
+        dhcpResults.captivePortalApiUrl = in.readString();
         return dhcpResults;
     }
 
@@ -305,4 +317,12 @@
     public void setMtu(int mtu) {
         this.mtu = mtu;
     }
+
+    public String getCaptivePortalApiUrl() {
+        return captivePortalApiUrl;
+    }
+
+    public void setCaptivePortalApiUrl(String url) {
+        captivePortalApiUrl = url;
+    }
 }
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index 0fae607..1c7628f 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -167,18 +167,19 @@
             in int factorySerialNumber);
 
     NetworkRequest requestNetwork(in NetworkCapabilities networkCapabilities,
-            in Messenger messenger, int timeoutSec, in IBinder binder, int legacy);
+            in Messenger messenger, int timeoutSec, in IBinder binder, int legacy,
+            String callingPackageName);
 
     NetworkRequest pendingRequestForNetwork(in NetworkCapabilities networkCapabilities,
-            in PendingIntent operation);
+            in PendingIntent operation, String callingPackageName);
 
     void releasePendingNetworkRequest(in PendingIntent operation);
 
     NetworkRequest listenForNetwork(in NetworkCapabilities networkCapabilities,
-            in Messenger messenger, in IBinder binder);
+            in Messenger messenger, in IBinder binder, String callingPackageName);
 
     void pendingListenForNetwork(in NetworkCapabilities networkCapabilities,
-            in PendingIntent operation);
+            in PendingIntent operation, String callingPackageName);
 
     void releaseNetworkRequest(in NetworkRequest networkRequest);
 
diff --git a/core/java/android/net/Ikev2VpnProfile.java b/core/java/android/net/Ikev2VpnProfile.java
index 42b4da1..f19a341 100644
--- a/core/java/android/net/Ikev2VpnProfile.java
+++ b/core/java/android/net/Ikev2VpnProfile.java
@@ -25,7 +25,10 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.os.Process;
 import android.security.Credentials;
+import android.security.KeyStore;
+import android.security.keystore.AndroidKeyStoreProvider;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.net.VpnProfile;
@@ -59,6 +62,11 @@
  *     Exchange, Version 2 (IKEv2)</a>
  */
 public final class Ikev2VpnProfile extends PlatformVpnProfile {
+    /** Prefix for when a Private Key is an alias to look for in KeyStore @hide */
+    public static final String PREFIX_KEYSTORE_ALIAS = "KEYSTORE_ALIAS:";
+    /** Prefix for when a Private Key is stored directly in the profile @hide */
+    public static final String PREFIX_INLINE = "INLINE:";
+
     private static final String MISSING_PARAM_MSG_TMPL = "Required parameter was not provided: %s";
     private static final String EMPTY_CERT = "";
 
@@ -339,7 +347,8 @@
                 break;
             case TYPE_IKEV2_IPSEC_RSA:
                 profile.ipsecUserCert = certificateToPemString(mUserCert);
-                profile.ipsecSecret = encodeForIpsecSecret(mRsaPrivateKey.getEncoded());
+                profile.ipsecSecret =
+                        PREFIX_INLINE + encodeForIpsecSecret(mRsaPrivateKey.getEncoded());
                 profile.ipsecCaCert =
                         mServerRootCaCert == null ? "" : certificateToPemString(mServerRootCaCert);
                 break;
@@ -360,6 +369,22 @@
     @NonNull
     public static Ikev2VpnProfile fromVpnProfile(@NonNull VpnProfile profile)
             throws IOException, GeneralSecurityException {
+        return fromVpnProfile(profile, null);
+    }
+
+    /**
+     * Builds the Ikev2VpnProfile from the given profile.
+     *
+     * @param profile the source VpnProfile to build from
+     * @param keyStore the Android Keystore instance to use to retrieve the private key, or null if
+     *     the private key is PEM-encoded into the profile.
+     * @return The IKEv2/IPsec VPN profile
+     * @hide
+     */
+    @NonNull
+    public static Ikev2VpnProfile fromVpnProfile(
+            @NonNull VpnProfile profile, @Nullable KeyStore keyStore)
+            throws IOException, GeneralSecurityException {
         final Builder builder = new Builder(profile.server, profile.ipsecIdentifier);
         builder.setProxy(profile.proxy);
         builder.setAllowedAlgorithms(profile.getAllowedAlgorithms());
@@ -378,8 +403,21 @@
                 builder.setAuthPsk(decodeFromIpsecSecret(profile.ipsecSecret));
                 break;
             case TYPE_IKEV2_IPSEC_RSA:
+                final PrivateKey key;
+                if (profile.ipsecSecret.startsWith(PREFIX_KEYSTORE_ALIAS)) {
+                    Objects.requireNonNull(keyStore, "Missing Keystore for aliased PrivateKey");
+
+                    final String alias =
+                            profile.ipsecSecret.substring(PREFIX_KEYSTORE_ALIAS.length());
+                    key = AndroidKeyStoreProvider.loadAndroidKeyStorePrivateKeyFromKeystore(
+                            keyStore, alias, Process.myUid());
+                } else if (profile.ipsecSecret.startsWith(PREFIX_INLINE)) {
+                    key = getPrivateKey(profile.ipsecSecret.substring(PREFIX_INLINE.length()));
+                } else {
+                    throw new IllegalArgumentException("Invalid RSA private key prefix");
+                }
+
                 final X509Certificate userCert = certificateFromPemString(profile.ipsecUserCert);
-                final PrivateKey key = getPrivateKey(profile.ipsecSecret);
                 final X509Certificate serverRootCa = certificateFromPemString(profile.ipsecCaCert);
                 builder.setAuthDigitalSignature(userCert, key, serverRootCa);
                 break;
@@ -391,6 +429,39 @@
     }
 
     /**
+     * Validates that the VpnProfile is acceptable for the purposes of an Ikev2VpnProfile.
+     *
+     * @hide
+     */
+    public static boolean isValidVpnProfile(@NonNull VpnProfile profile) {
+        if (profile.server.isEmpty() || profile.ipsecIdentifier.isEmpty()) {
+            return false;
+        }
+
+        switch (profile.type) {
+            case TYPE_IKEV2_IPSEC_USER_PASS:
+                if (profile.username.isEmpty() || profile.password.isEmpty()) {
+                    return false;
+                }
+                break;
+            case TYPE_IKEV2_IPSEC_PSK:
+                if (profile.ipsecSecret.isEmpty()) {
+                    return false;
+                }
+                break;
+            case TYPE_IKEV2_IPSEC_RSA:
+                if (profile.ipsecSecret.isEmpty() || profile.ipsecUserCert.isEmpty()) {
+                    return false;
+                }
+                break;
+            default:
+                return false;
+        }
+
+        return true;
+    }
+
+    /**
      * Converts a X509 Certificate to a PEM-formatted string.
      *
      * <p>Must be public due to runtime-package restrictions.
@@ -432,7 +503,6 @@
 
     /** @hide */
     @NonNull
-    @VisibleForTesting(visibility = Visibility.PRIVATE)
     public static String encodeForIpsecSecret(@NonNull byte[] secret) {
         checkNotNull(secret, MISSING_PARAM_MSG_TMPL, "secret");
 
diff --git a/core/java/android/net/IpSecManager.java b/core/java/android/net/IpSecManager.java
index 09ec6c3..d83715c 100644
--- a/core/java/android/net/IpSecManager.java
+++ b/core/java/android/net/IpSecManager.java
@@ -51,7 +51,7 @@
  *
  * <p>Note that not all aspects of IPsec are permitted by this API. Applications may create
  * transport mode security associations and apply them to individual sockets. Applications looking
- * to create a VPN should use {@link VpnService}.
+ * to create an IPsec VPN should use {@link VpnManager} and {@link Ikev2VpnProfile}.
  *
  * @see <a href="https://tools.ietf.org/html/rfc4301">RFC 4301, Security Architecture for the
  *     Internet Protocol</a>
diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java
index cf5f225..f8b51dd 100644
--- a/core/java/android/net/NetworkCapabilities.java
+++ b/core/java/android/net/NetworkCapabilities.java
@@ -27,6 +27,7 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.Process;
+import android.text.TextUtils;
 import android.util.ArraySet;
 import android.util.proto.ProtoOutputStream;
 
@@ -63,6 +64,16 @@
     // Set to true when private DNS is broken.
     private boolean mPrivateDnsBroken;
 
+    /**
+     * Uid of the app making the request.
+     */
+    private int mRequestorUid;
+
+    /**
+     * Package name of the app making the request.
+     */
+    private String mRequestorPackageName;
+
     public NetworkCapabilities() {
         clearAll();
         mNetworkCapabilities = DEFAULT_CAPABILITIES;
@@ -89,6 +100,8 @@
         mOwnerUid = Process.INVALID_UID;
         mSSID = null;
         mPrivateDnsBroken = false;
+        mRequestorUid = Process.INVALID_UID;
+        mRequestorPackageName = null;
     }
 
     /**
@@ -109,6 +122,8 @@
         mUnwantedNetworkCapabilities = nc.mUnwantedNetworkCapabilities;
         mSSID = nc.mSSID;
         mPrivateDnsBroken = nc.mPrivateDnsBroken;
+        mRequestorUid = nc.mRequestorUid;
+        mRequestorPackageName = nc.mRequestorPackageName;
     }
 
     /**
@@ -810,7 +825,7 @@
     }
 
     /**
-     * UID of the app that owns this network, or INVALID_UID if none/unknown.
+     * UID of the app that owns this network, or Process#INVALID_UID if none/unknown.
      *
      * <p>This field keeps track of the UID of the app that created this network and is in charge of
      * its lifecycle. This could be the UID of apps such as the Wifi network suggestor, the running
@@ -821,8 +836,9 @@
     /**
      * Set the UID of the owner app.
      */
-    public void setOwnerUid(final int uid) {
+    public @NonNull NetworkCapabilities setOwnerUid(final int uid) {
         mOwnerUid = uid;
+        return this;
     }
 
     /**
@@ -865,9 +881,11 @@
      * @hide
      */
     @SystemApi
-    public void setAdministratorUids(@NonNull final List<Integer> administratorUids) {
+    public @NonNull NetworkCapabilities setAdministratorUids(
+            @NonNull final List<Integer> administratorUids) {
         mAdministratorUids.clear();
         mAdministratorUids.addAll(administratorUids);
+        return this;
     }
 
     /**
@@ -1385,6 +1403,7 @@
         combineSignalStrength(nc);
         combineUids(nc);
         combineSSIDs(nc);
+        combineRequestor(nc);
     }
 
     /**
@@ -1404,7 +1423,8 @@
                 && satisfiedBySpecifier(nc)
                 && (onlyImmutable || satisfiedBySignalStrength(nc))
                 && (onlyImmutable || satisfiedByUids(nc))
-                && (onlyImmutable || satisfiedBySSID(nc)));
+                && (onlyImmutable || satisfiedBySSID(nc)))
+                && (onlyImmutable || satisfiedByRequestor(nc));
     }
 
     /**
@@ -1488,7 +1508,7 @@
     public boolean equals(@Nullable Object obj) {
         if (obj == null || (obj instanceof NetworkCapabilities == false)) return false;
         NetworkCapabilities that = (NetworkCapabilities) obj;
-        return (equalsNetCapabilities(that)
+        return equalsNetCapabilities(that)
                 && equalsTransportTypes(that)
                 && equalsLinkBandwidths(that)
                 && equalsSignalStrength(that)
@@ -1496,7 +1516,8 @@
                 && equalsTransportInfo(that)
                 && equalsUids(that)
                 && equalsSSID(that)
-                && equalsPrivateDnsBroken(that));
+                && equalsPrivateDnsBroken(that)
+                && equalsRequestor(that);
     }
 
     @Override
@@ -1514,7 +1535,9 @@
                 + Objects.hashCode(mUids) * 31
                 + Objects.hashCode(mSSID) * 37
                 + Objects.hashCode(mTransportInfo) * 41
-                + Objects.hashCode(mPrivateDnsBroken) * 43;
+                + Objects.hashCode(mPrivateDnsBroken) * 43
+                + Objects.hashCode(mRequestorUid) * 47
+                + Objects.hashCode(mRequestorPackageName) * 53;
     }
 
     @Override
@@ -1537,6 +1560,8 @@
         dest.writeBoolean(mPrivateDnsBroken);
         dest.writeList(mAdministratorUids);
         dest.writeInt(mOwnerUid);
+        dest.writeInt(mRequestorUid);
+        dest.writeString(mRequestorPackageName);
     }
 
     public static final @android.annotation.NonNull Creator<NetworkCapabilities> CREATOR =
@@ -1559,6 +1584,8 @@
                 netCap.mPrivateDnsBroken = in.readBoolean();
                 netCap.setAdministratorUids(in.readArrayList(null));
                 netCap.mOwnerUid = in.readInt();
+                netCap.mRequestorUid = in.readInt();
+                netCap.mRequestorPackageName = in.readString();
                 return netCap;
             }
             @Override
@@ -1624,6 +1651,9 @@
             sb.append(" Private DNS is broken");
         }
 
+        sb.append(" RequestorUid: ").append(mRequestorUid);
+        sb.append(" RequestorPackageName: ").append(mRequestorPackageName);
+
         sb.append("]");
         return sb.toString();
     }
@@ -1632,6 +1662,7 @@
     private interface NameOf {
         String nameOf(int value);
     }
+
     /**
      * @hide
      */
@@ -1799,4 +1830,120 @@
     private boolean equalsPrivateDnsBroken(NetworkCapabilities nc) {
         return mPrivateDnsBroken == nc.mPrivateDnsBroken;
     }
+
+    /**
+     * Set the uid of the app making the request.
+     *
+     * Note: This works only for {@link NetworkAgent} instances. Any capabilities passed in
+     * via the public {@link ConnectivityManager} API's will have this field overwritten.
+     *
+     * @param uid UID of the app.
+     * @hide
+     */
+    @SystemApi
+    public @NonNull NetworkCapabilities setRequestorUid(int uid) {
+        mRequestorUid = uid;
+        return this;
+    }
+
+    /**
+     * @return the uid of the app making the request.
+     *
+     * Note: This could return {@link Process#INVALID_UID} if the {@link NetworkRequest}
+     * object was not obtained from {@link ConnectivityManager}.
+     * @hide
+     */
+    public int getRequestorUid() {
+        return mRequestorUid;
+    }
+
+    /**
+     * Set the package name of the app making the request.
+     *
+     * Note: This works only for {@link NetworkAgent} instances. Any capabilities passed in
+     * via the public {@link ConnectivityManager} API's will have this field overwritten.
+     *
+     * @param packageName package name of the app.
+     * @hide
+     */
+    @SystemApi
+    public @NonNull NetworkCapabilities setRequestorPackageName(@NonNull String packageName) {
+        mRequestorPackageName = packageName;
+        return this;
+    }
+
+    /**
+     * @return the package name of the app making the request.
+     *
+     * Note: This could return {@code null} if the {@link NetworkRequest} object was not obtained
+     * from {@link ConnectivityManager}.
+     * @hide
+     */
+    @Nullable
+    public String getRequestorPackageName() {
+        return mRequestorPackageName;
+    }
+
+    /**
+     * Set the uid and package name of the app making the request.
+     *
+     * Note: This is intended to be only invoked from within connectivitiy service.
+     *
+     * @param uid UID of the app.
+     * @param packageName package name of the app.
+     * @hide
+     */
+    public @NonNull NetworkCapabilities setRequestorUidAndPackageName(
+            int uid, @NonNull String packageName) {
+        return setRequestorUid(uid).setRequestorPackageName(packageName);
+    }
+
+    /**
+     * Test whether the passed NetworkCapabilities satisfies the requestor restrictions of this
+     * capabilities.
+     *
+     * This method is called on the NetworkCapabilities embedded in a request with the
+     * capabilities of an available network. If the available network, sets a specific
+     * requestor (by uid and optionally package name), then this will only match a request from the
+     * same app. If either of the capabilities have an unset uid or package name, then it matches
+     * everything.
+     * <p>
+     * nc is assumed nonnull. Else, NPE.
+     */
+    private boolean satisfiedByRequestor(NetworkCapabilities nc) {
+        // No uid set, matches everything.
+        if (mRequestorUid == Process.INVALID_UID || nc.mRequestorUid == Process.INVALID_UID) {
+            return true;
+        }
+        // uids don't match.
+        if (mRequestorUid != nc.mRequestorUid) return false;
+        // No package names set, matches everything
+        if (null == nc.mRequestorPackageName || null == mRequestorPackageName) return true;
+        // check for package name match.
+        return TextUtils.equals(mRequestorPackageName, nc.mRequestorPackageName);
+    }
+
+    /**
+     * Combine requestor info of the capabilities.
+     * <p>
+     * This is only legal if either the requestor info of this object is reset, or both info are
+     * equal.
+     * nc is assumed nonnull.
+     */
+    private void combineRequestor(@NonNull NetworkCapabilities nc) {
+        if (mRequestorUid != Process.INVALID_UID && mRequestorUid != nc.mOwnerUid) {
+            throw new IllegalStateException("Can't combine two uids");
+        }
+        if (mRequestorPackageName != null
+                && !mRequestorPackageName.equals(nc.mRequestorPackageName)) {
+            throw new IllegalStateException("Can't combine two package names");
+        }
+        setRequestorUid(nc.mRequestorUid);
+        setRequestorPackageName(nc.mRequestorPackageName);
+    }
+
+    private boolean equalsRequestor(NetworkCapabilities nc) {
+        return mRequestorUid == nc.mRequestorUid
+                && TextUtils.equals(mRequestorPackageName, nc.mRequestorPackageName);
+    }
 }
diff --git a/core/java/android/net/NetworkRequest.java b/core/java/android/net/NetworkRequest.java
index 301d203..964f13f 100644
--- a/core/java/android/net/NetworkRequest.java
+++ b/core/java/android/net/NetworkRequest.java
@@ -380,6 +380,7 @@
         dest.writeInt(requestId);
         dest.writeString(type.name());
     }
+
     public static final @android.annotation.NonNull Creator<NetworkRequest> CREATOR =
         new Creator<NetworkRequest>() {
             public NetworkRequest createFromParcel(Parcel in) {
@@ -494,6 +495,31 @@
         return networkCapabilities.getNetworkSpecifier();
     }
 
+    /**
+     * @return the uid of the app making the request.
+     *
+     * Note: This could return {@link Process#INVALID_UID} if the {@link NetworkRequest} object was
+     * not obtained from {@link ConnectivityManager}.
+     * @hide
+     */
+    @SystemApi
+    public int getRequestorUid() {
+        return networkCapabilities.getRequestorUid();
+    }
+
+    /**
+     * @return the package name of the app making the request.
+     *
+     * Note: This could return {@code null} if the {@link NetworkRequest} object was not obtained
+     * from {@link ConnectivityManager}.
+     * @hide
+     */
+    @SystemApi
+    @Nullable
+    public String getRequestorPackageName() {
+        return networkCapabilities.getRequestorPackageName();
+    }
+
     public String toString() {
         return "NetworkRequest [ " + type + " id=" + requestId +
                 (legacyType != ConnectivityManager.TYPE_NONE ? ", legacyType=" + legacyType : "") +
diff --git a/core/java/android/net/NetworkScore.java b/core/java/android/net/NetworkScore.java
index ae17378..d207e79 100644
--- a/core/java/android/net/NetworkScore.java
+++ b/core/java/android/net/NetworkScore.java
@@ -21,7 +21,6 @@
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.annotation.TestApi;
-import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -84,10 +83,69 @@
             uplinkBandwidthKBps = uplinkBandwidth;
         }
 
+        /**
+         * Evaluate whether a metrics codes for faster network is faster than another.
+         *
+         * This is a simple comparison of expected speeds. If either of the tested attributes
+         * are unknown, this returns zero. This implementation just assumes downlink bandwidth
+         * is more important than uplink bandwidth, which is more important than latency. This
+         * is not a very good way of evaluating network speed, but it's a start.
+         * TODO : do something more representative of how fast the network feels
+         *
+         * @param other the Metrics to evaluate against
+         * @return a negative integer, zero, or a positive integer as this metrics is worse than,
+         *   equally good as (or unknown), or better than the passed Metrics.
+         * @see #compareToPreferringKnown(Metrics)
+         * @hide
+         */
+        // Can't implement Comparable<Metrics> because this is @hide.
+        public int compareTo(@NonNull final Metrics other) {
+            if (downlinkBandwidthKBps != BANDWIDTH_UNKNOWN
+                    && other.downlinkBandwidthKBps != BANDWIDTH_UNKNOWN) {
+                if (downlinkBandwidthKBps > other.downlinkBandwidthKBps) return 1;
+                if (downlinkBandwidthKBps < other.downlinkBandwidthKBps) return -1;
+            }
+            if (uplinkBandwidthKBps != BANDWIDTH_UNKNOWN
+                    && other.uplinkBandwidthKBps != BANDWIDTH_UNKNOWN) {
+                if (uplinkBandwidthKBps > other.uplinkBandwidthKBps) return 1;
+                if (uplinkBandwidthKBps < other.uplinkBandwidthKBps) return -1;
+            }
+            if (latencyMs != LATENCY_UNKNOWN && other.latencyMs != LATENCY_UNKNOWN) {
+                // Latency : lower is better
+                if (latencyMs > other.latencyMs) return -1;
+                if (latencyMs < other.latencyMs) return 1;
+            }
+            return 0;
+        }
+
+        /**
+         * Evaluate whether a metrics codes for faster network is faster than another.
+         *
+         * This is a simple comparison of expected speeds. If either of the tested attributes
+         * are unknown, this prefers the known attributes. This implementation just assumes
+         * downlink bandwidth is more important than uplink bandwidth, which is more important than
+         * latency. This is not a very good way of evaluating network speed, but it's a start.
+         * TODO : do something more representative of how fast the network feels
+         *
+         * @param other the Metrics to evaluate against
+         * @return a negative integer, zero, or a positive integer as this metrics is worse than,
+         *   equally good as (or unknown), or better than the passed Metrics.
+         * @see #compareTo(Metrics)
+         * @hide
+         */
+        public int compareToPreferringKnown(@NonNull final Metrics other) {
+            if (downlinkBandwidthKBps > other.downlinkBandwidthKBps) return 1;
+            if (downlinkBandwidthKBps < other.downlinkBandwidthKBps) return -1;
+            if (uplinkBandwidthKBps > other.uplinkBandwidthKBps) return 1;
+            if (uplinkBandwidthKBps < other.uplinkBandwidthKBps) return -1;
+            // Latency : lower is better
+            return -Integer.compare(latencyMs, other.latencyMs);
+        }
+
         /** toString */
         public String toString() {
             return "latency = " + latencyMs + " downlinkBandwidth = " + downlinkBandwidthKBps
-                    + "uplinkBandwidth = " + uplinkBandwidthKBps;
+                    + " uplinkBandwidth = " + uplinkBandwidthKBps;
         }
 
         @NonNull
@@ -347,6 +405,33 @@
         return mLegacyScore;
     }
 
+    /**
+     * Use the metrics to evaluate whether a network is faster than another.
+     *
+     * This is purely based on the metrics, and explicitly ignores policy or exiting. It's
+     * provided to get a decision on two networks when policy can not decide, or to evaluate
+     * how a network is expected to compare to another if it should validate.
+     *
+     * @param other the score to evaluate against
+     * @return whether this network is probably faster than the other
+     * @hide
+     */
+    public boolean probablyFasterThan(@NonNull final NetworkScore other) {
+        if (mLegacyScore > other.mLegacyScore) return true;
+        final int atEndToEnd = mEndToEndMetrics.compareTo(other.mEndToEndMetrics);
+        if (atEndToEnd > 0) return true;
+        if (atEndToEnd < 0) return false;
+        final int atLinkLayer = mLinkLayerMetrics.compareTo(other.mLinkLayerMetrics);
+        if (atLinkLayer > 0) return true;
+        if (atLinkLayer < 0) return false;
+        final int atEndToEndPreferringKnown =
+                mEndToEndMetrics.compareToPreferringKnown(other.mEndToEndMetrics);
+        if (atEndToEndPreferringKnown > 0) return true;
+        if (atEndToEndPreferringKnown < 0) return false;
+        // If this returns 0, neither is "probably faster" so just return false.
+        return mLinkLayerMetrics.compareToPreferringKnown(other.mLinkLayerMetrics) > 0;
+    }
+
     /** Builder for NetworkScore. */
     public static class Builder {
         private int mPolicy = 0;
@@ -354,17 +439,27 @@
         private Metrics mLinkLayerMetrics = new Metrics(Metrics.LATENCY_UNKNOWN,
                 Metrics.BANDWIDTH_UNKNOWN, Metrics.BANDWIDTH_UNKNOWN);
         @NonNull
-        private Metrics mEndToMetrics = new Metrics(Metrics.LATENCY_UNKNOWN,
+        private Metrics mEndToEndMetrics = new Metrics(Metrics.LATENCY_UNKNOWN,
                 Metrics.BANDWIDTH_UNKNOWN, Metrics.BANDWIDTH_UNKNOWN);
         private int mSignalStrength = UNKNOWN_SIGNAL_STRENGTH;
         private int mRange = RANGE_UNKNOWN;
         private boolean mExiting = false;
         private int mLegacyScore = 0;
-        @NonNull private Bundle mExtensions = new Bundle();
 
         /** Create a new builder. */
         public Builder() { }
 
+        /** @hide */
+        public Builder(@NonNull final NetworkScore source) {
+            mPolicy = source.mPolicy;
+            mLinkLayerMetrics = source.mLinkLayerMetrics;
+            mEndToEndMetrics = source.mEndToEndMetrics;
+            mSignalStrength = source.mSignalStrength;
+            mRange = source.mRange;
+            mExiting = source.mExiting;
+            mLegacyScore = source.mLegacyScore;
+        }
+
         /** Add a policy flag. */
         @NonNull public Builder addPolicy(@Policy final int policy) {
             mPolicy |= policy;
@@ -385,7 +480,7 @@
 
         /** Set the end-to-end metrics. */
         @NonNull public Builder setEndToEndMetrics(@NonNull final Metrics endToEndMetrics) {
-            mEndToMetrics = endToEndMetrics;
+            mEndToEndMetrics = endToEndMetrics;
             return this;
         }
 
@@ -417,7 +512,7 @@
 
         /** Build the NetworkScore object represented by this builder. */
         @NonNull public NetworkScore build() {
-            return new NetworkScore(mPolicy, mLinkLayerMetrics, mEndToMetrics,
+            return new NetworkScore(mPolicy, mLinkLayerMetrics, mEndToEndMetrics,
                     mSignalStrength, mRange, mExiting, mLegacyScore);
         }
     }
diff --git a/core/java/android/net/NetworkSpecifier.java b/core/java/android/net/NetworkSpecifier.java
index cf31d21..2dd0c4e 100644
--- a/core/java/android/net/NetworkSpecifier.java
+++ b/core/java/android/net/NetworkSpecifier.java
@@ -39,23 +39,6 @@
 
     /**
      * Optional method which can be overridden by concrete implementations of NetworkSpecifier to
-     * check a self-reported UID. A concrete implementation may contain a UID which would be self-
-     * reported by the caller (since NetworkSpecifier implementations should be non-mutable). This
-     * function is called by ConnectivityService and is passed the actual UID of the caller -
-     * allowing the verification of the self-reported UID. In cases of mismatch the implementation
-     * should throw a SecurityException.
-     *
-     * @param requestorUid The UID of the requestor as obtained from its binder.
-     *
-     * @hide
-     */
-    @SystemApi
-    public void assertValidFromUid(int requestorUid) {
-        // empty
-    }
-
-    /**
-     * Optional method which can be overridden by concrete implementations of NetworkSpecifier to
      * perform any redaction of information from the NetworkSpecifier, e.g. if it contains
      * sensitive information. The default implementation simply returns the object itself - i.e.
      * no information is redacted. A concrete implementation may return a modified (copy) of the
diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java
index 96d7a80..2f536ff 100644
--- a/core/java/android/net/NetworkStats.java
+++ b/core/java/android/net/NetworkStats.java
@@ -18,6 +18,7 @@
 
 import static android.os.Process.CLAT_UID;
 
+import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SuppressLint;
@@ -35,6 +36,8 @@
 
 import java.io.CharArrayWriter;
 import java.io.PrintWriter;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Map;
@@ -100,6 +103,19 @@
      */
     public static final int SET_DBG_VPN_OUT = 1002;
 
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = { "SET_" }, value = {
+            SET_ALL,
+            SET_DEFAULT,
+            SET_FOREGROUND,
+            SET_DEBUG_START,
+            SET_DBG_VPN_IN,
+            SET_DBG_VPN_OUT
+    })
+    public @interface State {
+    }
+
     /**
      * Include all interfaces when filtering
      * @hide
@@ -120,6 +136,17 @@
     /** {@link #metered} value where metered data is accounted. */
     public static final int METERED_YES = 1;
 
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = { "METERED_" }, value = {
+            METERED_ALL,
+            METERED_NO,
+            METERED_YES
+    })
+    public @interface Meteredness {
+    }
+
+
     /**
      * {@link #roaming} value to account for all roaming states.
      * @hide
@@ -130,6 +157,16 @@
     /** {@link #roaming} value where roaming data is accounted. */
     public static final int ROAMING_YES = 1;
 
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = { "ROAMING_" }, value = {
+            ROAMING_ALL,
+            ROAMING_NO,
+            ROAMING_YES
+    })
+    public @interface Roaming {
+    }
+
     /**
      * {@link #onDefaultNetwork} value to account for all default network states.
      * @hide
@@ -140,6 +177,16 @@
     /** {@link #onDefaultNetwork} value to account for usage while the default network. */
     public static final int DEFAULT_NETWORK_YES = 1;
 
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = { "DEFAULT_NETWORK_" }, value = {
+            DEFAULT_NETWORK_ALL,
+            DEFAULT_NETWORK_NO,
+            DEFAULT_NETWORK_YES
+    })
+    public @interface DefaultNetwork {
+    }
+
     /**
      * Denotes a request for stats at the interface level.
      * @hide
@@ -151,6 +198,15 @@
      */
     public static final int STATS_PER_UID = 1;
 
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = { "STATS_PER_" }, value = {
+            STATS_PER_IFACE,
+            STATS_PER_UID
+    })
+    public @interface StatsType {
+    }
+
     private static final String CLATD_INTERFACE_PREFIX = "v4-";
     // Delta between IPv4 header (20b) and IPv6 header (40b).
     // Used for correct stats accounting on clatd interfaces.
@@ -263,9 +319,9 @@
                     rxBytes, rxPackets, txBytes, txPackets, operations);
         }
 
-        public Entry(@Nullable String iface, int uid, int set, int tag, int metered, int roaming,
-                 int defaultNetwork, long rxBytes, long rxPackets, long txBytes, long txPackets,
-                 long operations) {
+        public Entry(@Nullable String iface, int uid, @State int set, int tag,
+                @Meteredness int metered, @Roaming int roaming, @DefaultNetwork int defaultNetwork,
+                long rxBytes, long rxPackets, long txBytes, long txPackets, long operations) {
             this.iface = iface;
             this.uid = uid;
             this.set = set;
diff --git a/core/java/android/net/NetworkStatsHistory.java b/core/java/android/net/NetworkStatsHistory.java
index 6d46c20..3c1b86b 100644
--- a/core/java/android/net/NetworkStatsHistory.java
+++ b/core/java/android/net/NetworkStatsHistory.java
@@ -548,32 +548,32 @@
         final int startIndex = getIndexAfter(end);
         for (int i = startIndex; i >= 0; i--) {
             final long curStart = bucketStart[i];
-            final long curEnd = curStart + bucketDuration;
+            long curEnd = curStart + bucketDuration;
 
             // bucket is older than request; we're finished
             if (curEnd <= start) break;
             // bucket is newer than request; keep looking
             if (curStart >= end) continue;
 
-            // include full value for active buckets, otherwise only fractional
-            final boolean activeBucket = curStart < now && curEnd > now;
-            final long overlap;
-            if (activeBucket) {
-                overlap = bucketDuration;
-            } else {
-                final long overlapEnd = curEnd < end ? curEnd : end;
-                final long overlapStart = curStart > start ? curStart : start;
-                overlap = overlapEnd - overlapStart;
-            }
+            // the active bucket is shorter then a normal completed bucket
+            if (curEnd > now) curEnd = now;
+            // usually this is simply bucketDuration
+            final long bucketSpan = curEnd - curStart;
+            // prevent division by zero
+            if (bucketSpan <= 0) continue;
+
+            final long overlapEnd = curEnd < end ? curEnd : end;
+            final long overlapStart = curStart > start ? curStart : start;
+            final long overlap = overlapEnd - overlapStart;
             if (overlap <= 0) continue;
 
             // integer math each time is faster than floating point
-            if (activeTime != null) entry.activeTime += activeTime[i] * overlap / bucketDuration;
-            if (rxBytes != null) entry.rxBytes += rxBytes[i] * overlap / bucketDuration;
-            if (rxPackets != null) entry.rxPackets += rxPackets[i] * overlap / bucketDuration;
-            if (txBytes != null) entry.txBytes += txBytes[i] * overlap / bucketDuration;
-            if (txPackets != null) entry.txPackets += txPackets[i] * overlap / bucketDuration;
-            if (operations != null) entry.operations += operations[i] * overlap / bucketDuration;
+            if (activeTime != null) entry.activeTime += activeTime[i] * overlap / bucketSpan;
+            if (rxBytes != null) entry.rxBytes += rxBytes[i] * overlap / bucketSpan;
+            if (rxPackets != null) entry.rxPackets += rxPackets[i] * overlap / bucketSpan;
+            if (txBytes != null) entry.txBytes += txBytes[i] * overlap / bucketSpan;
+            if (txPackets != null) entry.txPackets += txPackets[i] * overlap / bucketSpan;
+            if (operations != null) entry.operations += operations[i] * overlap / bucketSpan;
         }
         return entry;
     }
diff --git a/core/java/android/net/VpnManager.java b/core/java/android/net/VpnManager.java
index f19ba0f..2041cfb 100644
--- a/core/java/android/net/VpnManager.java
+++ b/core/java/android/net/VpnManager.java
@@ -126,7 +126,11 @@
         return getIntentForConfirmation();
     }
 
-    /** Delete the VPN profile configuration that was provisioned by the calling app */
+    /**
+     * Delete the VPN profile configuration that was provisioned by the calling app
+     *
+     * @throws SecurityException if this would violate user settings
+     */
     public void deleteProvisionedVpnProfile() {
         try {
             mService.deleteVpnProfile(mContext.getOpPackageName());
diff --git a/core/java/android/nfc/NdefMessage.java b/core/java/android/nfc/NdefMessage.java
index 57d79c8..35dae55 100644
--- a/core/java/android/nfc/NdefMessage.java
+++ b/core/java/android/nfc/NdefMessage.java
@@ -18,6 +18,7 @@
 
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.util.proto.ProtoOutputStream;
 
 import java.nio.ByteBuffer;
 import java.util.Arrays;
@@ -250,4 +251,22 @@
     public String toString() {
         return "NdefMessage " + Arrays.toString(mRecords);
     }
+
+    /**
+     * Dump debugging information as a NdefMessageProto
+     * @hide
+     *
+     * Note:
+     * See proto definition in frameworks/base/core/proto/android/nfc/ndef.proto
+     * When writing a nested message, must call {@link ProtoOutputStream#start(long)} before and
+     * {@link ProtoOutputStream#end(long)} after.
+     * Never reuse a proto field number. When removing a field, mark it as reserved.
+     */
+    public void dumpDebug(ProtoOutputStream proto) {
+        for (NdefRecord record : mRecords) {
+            long token = proto.start(NdefMessageProto.NDEF_RECORDS);
+            record.dumpDebug(proto);
+            proto.end(token);
+        }
+    }
 }
\ No newline at end of file
diff --git a/core/java/android/nfc/NdefRecord.java b/core/java/android/nfc/NdefRecord.java
index fe316c4..74f8cb4 100644
--- a/core/java/android/nfc/NdefRecord.java
+++ b/core/java/android/nfc/NdefRecord.java
@@ -21,6 +21,7 @@
 import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.util.proto.ProtoOutputStream;
 
 import java.nio.BufferUnderflowException;
 import java.nio.ByteBuffer;
@@ -1051,6 +1052,22 @@
         return b.toString();
     }
 
+    /**
+     * Dump debugging information as a NdefRecordProto
+     * @hide
+     *
+     * Note:
+     * See proto definition in frameworks/base/core/proto/android/nfc/ndef.proto
+     * When writing a nested message, must call {@link ProtoOutputStream#start(long)} before and
+     * {@link ProtoOutputStream#end(long)} after.
+     * Never reuse a proto field number. When removing a field, mark it as reserved.
+     */
+    public void dumpDebug(ProtoOutputStream proto) {
+        proto.write(NdefRecordProto.TYPE, mType);
+        proto.write(NdefRecordProto.ID, mId);
+        proto.write(NdefRecordProto.PAYLOAD_BYTES, mPayload.length);
+    }
+
     private static StringBuilder bytesToString(byte[] bs) {
         StringBuilder s = new StringBuilder();
         for (byte b : bs) {
diff --git a/core/java/android/nfc/cardemulation/AidGroup.java b/core/java/android/nfc/cardemulation/AidGroup.java
index c4f5e0b..2436e57 100644
--- a/core/java/android/nfc/cardemulation/AidGroup.java
+++ b/core/java/android/nfc/cardemulation/AidGroup.java
@@ -20,6 +20,7 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.Log;
+import android.util.proto.ProtoOutputStream;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
@@ -117,6 +118,21 @@
         return out.toString();
     }
 
+    /**
+     * Dump debugging info as AidGroupProto
+     *
+     * If the output belongs to a sub message, the caller is responsible for wrapping this function
+     * between {@link ProtoOutputStream#start(long)} and {@link ProtoOutputStream#end(long)}.
+     *
+     * @param proto the ProtoOutputStream to write to
+     */
+    public void dump(ProtoOutputStream proto) {
+        proto.write(AidGroupProto.CATEGORY, category);
+        for (String aid : aids) {
+            proto.write(AidGroupProto.AIDS, aid);
+        }
+    }
+
     @Override
     public int describeContents() {
         return 0;
diff --git a/core/java/android/nfc/cardemulation/ApduServiceInfo.java b/core/java/android/nfc/cardemulation/ApduServiceInfo.java
index 8da9db1..d7c2e05 100644
--- a/core/java/android/nfc/cardemulation/ApduServiceInfo.java
+++ b/core/java/android/nfc/cardemulation/ApduServiceInfo.java
@@ -32,6 +32,7 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.Xml;
+import android.util.proto.ProtoOutputStream;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
@@ -607,4 +608,34 @@
         }
         pw.println("    Settings Activity: " + mSettingsActivityName);
     }
+
+    /**
+     * Dump debugging info as ApduServiceInfoProto
+     *
+     * If the output belongs to a sub message, the caller is responsible for wrapping this function
+     * between {@link ProtoOutputStream#start(long)} and {@link ProtoOutputStream#end(long)}.
+     * See proto definition in frameworks/base/core/proto/android/nfc/apdu_service_info.proto
+     *
+     * @param proto the ProtoOutputStream to write to
+     */
+    public void dumpDebug(ProtoOutputStream proto) {
+        getComponent().dumpDebug(proto, ApduServiceInfoProto.COMPONENT_NAME);
+        proto.write(ApduServiceInfoProto.DESCRIPTION, getDescription());
+        proto.write(ApduServiceInfoProto.ON_HOST, mOnHost);
+        if (!mOnHost) {
+            proto.write(ApduServiceInfoProto.OFF_HOST_NAME, mOffHostName);
+            proto.write(ApduServiceInfoProto.STATIC_OFF_HOST_NAME, mStaticOffHostName);
+        }
+        for (AidGroup group : mStaticAidGroups.values()) {
+            long token = proto.start(ApduServiceInfoProto.STATIC_AID_GROUPS);
+            group.dump(proto);
+            proto.end(token);
+        }
+        for (AidGroup group : mDynamicAidGroups.values()) {
+            long token = proto.start(ApduServiceInfoProto.STATIC_AID_GROUPS);
+            group.dump(proto);
+            proto.end(token);
+        }
+        proto.write(ApduServiceInfoProto.SETTINGS_ACTIVITY_NAME, mSettingsActivityName);
+    }
 }
diff --git a/core/java/android/nfc/cardemulation/NfcFServiceInfo.java b/core/java/android/nfc/cardemulation/NfcFServiceInfo.java
index bda14299..885a0b5 100644
--- a/core/java/android/nfc/cardemulation/NfcFServiceInfo.java
+++ b/core/java/android/nfc/cardemulation/NfcFServiceInfo.java
@@ -30,6 +30,7 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.Xml;
+import android.util.proto.ProtoOutputStream;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
@@ -325,5 +326,21 @@
         pw.println("    NFCID2: " + getNfcid2());
         pw.println("    T3tPmm: " + getT3tPmm());
     }
+
+    /**
+     * Dump debugging info as NfcFServiceInfoProto
+     *
+     * If the output belongs to a sub message, the caller is responsible for wrapping this function
+     * between {@link ProtoOutputStream#start(long)} and {@link ProtoOutputStream#end(long)}.
+     *
+     * @param proto the ProtoOutputStream to write to
+     */
+    public void dumpDebug(ProtoOutputStream proto) {
+        getComponent().dumpDebug(proto, NfcFServiceInfoProto.COMPONENT_NAME);
+        proto.write(NfcFServiceInfoProto.DESCRIPTION, getDescription());
+        proto.write(NfcFServiceInfoProto.SYSTEM_CODE, getSystemCode());
+        proto.write(NfcFServiceInfoProto.NFCID2, getNfcid2());
+        proto.write(NfcFServiceInfoProto.T3T_PMM, getT3tPmm());
+    }
 }
 
diff --git a/core/java/android/os/BaseBundle.java b/core/java/android/os/BaseBundle.java
index 6453af8..81deba4 100644
--- a/core/java/android/os/BaseBundle.java
+++ b/core/java/android/os/BaseBundle.java
@@ -365,12 +365,16 @@
     }
 
     /**
+     * This method returns true when the parcel is 'definitely' empty.
+     * That is, it may return false for an empty parcel. But will never return true for a non-empty
+     * one.
+     *
      * @hide this should probably be the implementation of isEmpty().  To do that we
      * need to ensure we always use the special empty parcel form when the bundle is
      * empty.  (This may already be the case, but to be safe we'll do this later when
      * we aren't trying to stabilize.)
      */
-    public boolean maybeIsEmpty() {
+    public boolean isDefinitelyEmpty() {
         if (isParcelled()) {
             return isEmptyParcel();
         } else {
@@ -402,6 +406,9 @@
         if (other == null) {
             return false;
         }
+        if (isDefinitelyEmpty() && other.isDefinitelyEmpty()) {
+            return true;
+        }
         if (isParcelled() != other.isParcelled()) {
             // Big kind-of here!
             return false;
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
index 3ae5700..1cefbd9 100644
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
@@ -49,6 +49,7 @@
     void goToSleep(long time, int reason, int flags);
     @UnsupportedAppUsage(maxTargetSdk = 28)
     void nap(long time);
+    float getBrightnessConstraint(int constraint);
     @UnsupportedAppUsage
     boolean isInteractive();
     boolean isPowerSaveMode();
diff --git a/core/java/android/os/IThermalService.aidl b/core/java/android/os/IThermalService.aidl
index 8c98960..ad00233 100644
--- a/core/java/android/os/IThermalService.aidl
+++ b/core/java/android/os/IThermalService.aidl
@@ -103,4 +103,11 @@
       * {@hide}
       */
     List<CoolingDevice> getCurrentCoolingDevicesWithType(in int type);
+
+    /**
+     * @param forecastSeconds how many seconds ahead to forecast the provided headroom
+     * @return forecasted thermal headroom, normalized such that 1.0 indicates that throttling will
+     *     occur; returns NaN if the headroom or forecast is unavailable
+     */
+    float getThermalHeadroom(int forecastSeconds);
 }
diff --git a/core/java/android/os/IVibratorService.aidl b/core/java/android/os/IVibratorService.aidl
index e201e43..84013e7 100644
--- a/core/java/android/os/IVibratorService.aidl
+++ b/core/java/android/os/IVibratorService.aidl
@@ -18,11 +18,15 @@
 
 import android.os.VibrationEffect;
 import android.os.VibrationAttributes;
+import android.os.IVibratorStateListener;
 
 /** {@hide} */
 interface IVibratorService
 {
     boolean hasVibrator();
+    boolean isVibrating();
+    boolean registerVibratorStateListener(in IVibratorStateListener listener);
+    boolean unregisterVibratorStateListener(in IVibratorStateListener listener);
     boolean hasAmplitudeControl();
     boolean[] areEffectsSupported(in int[] effectIds);
     boolean[] arePrimitivesSupported(in int[] primitiveIds);
diff --git a/core/java/android/os/IVibratorStateListener.aidl b/core/java/android/os/IVibratorStateListener.aidl
new file mode 100644
index 0000000..5ff18a3
--- /dev/null
+++ b/core/java/android/os/IVibratorStateListener.aidl
@@ -0,0 +1,29 @@
+/*
+** 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.os;
+
+/**
+ * Listener for vibrator state.
+ * {@hide}
+ */
+oneway interface IVibratorStateListener {
+    /**
+     * Called when a vibrator start/stop vibrating.
+     * @param state the vibrator state.
+     */
+    void onVibrating(in boolean vibrating);
+}
\ No newline at end of file
diff --git a/core/java/android/os/NullVibrator.java b/core/java/android/os/NullVibrator.java
index 1d0f9d3..6d8ab6d 100644
--- a/core/java/android/os/NullVibrator.java
+++ b/core/java/android/os/NullVibrator.java
@@ -39,6 +39,11 @@
     }
 
     @Override
+    public boolean isVibrating() {
+        return false;
+    }
+
+    @Override
     public boolean hasAmplitudeControl() {
         return false;
     }
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index f3d3837..199b5d5 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -18,7 +18,9 @@
 
 import android.Manifest.permission;
 import android.annotation.CallbackExecutor;
+import android.annotation.CurrentTimeMillisLong;
 import android.annotation.IntDef;
+import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.RequiresPermission;
@@ -26,6 +28,7 @@
 import android.annotation.SystemApi;
 import android.annotation.SystemService;
 import android.annotation.TestApi;
+import android.app.PropertyInvalidatedCache;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.service.dreams.Sandman;
@@ -38,6 +41,7 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicLong;
 
 /**
  * This class gives you control of the power state of the device.
@@ -248,8 +252,27 @@
     public static final int BRIGHTNESS_DEFAULT = -1;
 
     /**
+     * Brightness value for an invalid value having been stored.
+     * @hide
+     */
+    public static final int BRIGHTNESS_INVALID = -1;
+
+    //Brightness values for new float implementation:
+    /**
+     * Brightness value for fully on as float.
+     * @hide
+     */
+    public static final float BRIGHTNESS_MAX = 1.0f;
+
+    /**
+     * Brightness value for minimum valid brightness as float.
+     * @hide
+     */
+    public static final float BRIGHTNESS_MIN = 0.0f;
+
+    /**
      * Brightness value for fully off in float.
-     * TODO: rename this to BRIGHTNES_OFF and remove the integer-based constant.
+     * TODO(brightnessfloat): rename this to BRIGHTNES_OFF and remove the integer-based constant.
      * @hide
      */
     public static final float BRIGHTNESS_OFF_FLOAT = -1.0f;
@@ -424,6 +447,69 @@
     /**
      * @hide
      */
+    @IntDef(prefix = { "BRIGHTNESS_CONSTRAINT_TYPE" }, value = {
+            BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM,
+            BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM,
+            BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT,
+            BRIGHTNESS_CONSTRAINT_TYPE_DIM,
+            BRIGHTNESS_CONSTRAINT_TYPE_DOZE,
+            BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM_VR,
+            BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM_VR,
+            BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_VR
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface BrightnessConstraint{}
+
+    /**
+     * Brightness constraint type: minimum allowed value.
+     * @hide
+     */
+    public static final int BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM = 0;
+    /**
+     * Brightness constraint type: minimum allowed value.
+     * @hide
+     */
+    public static final int BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM = 1;
+
+    /**
+     * Brightness constraint type: minimum allowed value.
+     * @hide
+     */
+    public static final int BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT = 2;
+
+    /**
+     * Brightness constraint type: minimum allowed value.
+     * @hide
+     */
+    public static final int BRIGHTNESS_CONSTRAINT_TYPE_DIM = 3;
+
+    /**
+     * Brightness constraint type: minimum allowed value.
+     * @hide
+     */
+    public static final int BRIGHTNESS_CONSTRAINT_TYPE_DOZE = 4;
+
+    /**
+     * Brightness constraint type: minimum allowed value.
+     * @hide
+     */
+    public static final int BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM_VR = 5;
+
+    /**
+     * Brightness constraint type: minimum allowed value.
+     * @hide
+     */
+    public static final int BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM_VR = 6;
+
+    /**
+     * Brightness constraint type: minimum allowed value.
+     * @hide
+     */
+    public static final int BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_VR = 7;
+
+    /**
+     * @hide
+     */
     @IntDef(prefix = { "WAKE_REASON_" }, value = {
             WAKE_REASON_UNKNOWN,
             WAKE_REASON_POWER_BUTTON,
@@ -795,25 +881,60 @@
         }
     }
 
+    private static final String CACHE_KEY_IS_POWER_SAVE_MODE_PROPERTY =
+            "cache_key.is_power_save_mode";
+
+    private static final String CACHE_KEY_IS_INTERACTIVE_PROPERTY = "cache_key.is_interactive";
+
+    private static final int MAX_CACHE_ENTRIES = 1;
+
+    private PropertyInvalidatedCache<Void, Boolean> mPowerSaveModeCache =
+            new PropertyInvalidatedCache<Void, Boolean>(MAX_CACHE_ENTRIES,
+                CACHE_KEY_IS_POWER_SAVE_MODE_PROPERTY) {
+                @Override
+                protected Boolean recompute(Void query) {
+                    try {
+                        return mService.isPowerSaveMode();
+                    } catch (RemoteException e) {
+                        throw e.rethrowFromSystemServer();
+                    }
+                }
+            };
+
+    private PropertyInvalidatedCache<Void, Boolean> mInteractiveCache =
+            new PropertyInvalidatedCache<Void, Boolean>(MAX_CACHE_ENTRIES,
+                CACHE_KEY_IS_INTERACTIVE_PROPERTY) {
+                @Override
+                protected Boolean recompute(Void query) {
+                    try {
+                        return mService.isInteractive();
+                    } catch (RemoteException e) {
+                        throw e.rethrowFromSystemServer();
+                    }
+                }
+            };
+
     final Context mContext;
     @UnsupportedAppUsage
     final IPowerManager mService;
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
     final Handler mHandler;
+    final IThermalService mThermalService;
 
     /** We lazily initialize it.*/
     private DeviceIdleManager mDeviceIdleManager;
 
-    IThermalService mThermalService;
     private final ArrayMap<OnThermalStatusChangedListener, IThermalStatusListener>
             mListenerMap = new ArrayMap<>();
 
     /**
      * {@hide}
      */
-    public PowerManager(Context context, IPowerManager service, Handler handler) {
+    public PowerManager(Context context, IPowerManager service, IThermalService thermalService,
+            Handler handler) {
         mContext = context;
         mService = service;
+        mThermalService = thermalService;
         mHandler = handler;
     }
 
@@ -889,6 +1010,19 @@
     }
 
     /**
+     * Gets a float screen brightness setting.
+     * @hide
+     */
+    @UnsupportedAppUsage
+    public float getBrightnessConstraint(int constraint) {
+        try {
+            return mService.getBrightnessConstraint(constraint);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Creates a new wake lock with the specified level and flags.
      * <p>
      * The {@code levelAndFlags} parameter specifies a wake lock level and optional flags
@@ -1345,11 +1479,7 @@
      * @see android.content.Intent#ACTION_SCREEN_OFF
      */
     public boolean isInteractive() {
-        try {
-            return mService.isInteractive();
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
+        return mInteractiveCache.query(null);
     }
 
     /**
@@ -1409,11 +1539,7 @@
      * @return Returns true if currently in low power mode, else false.
      */
     public boolean isPowerSaveMode() {
-        try {
-            return mService.isPowerSaveMode();
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
+        return mPowerSaveModeCache.query(null);
     }
 
     /**
@@ -1756,18 +1882,11 @@
      * thermal throttling.
      */
     public @ThermalStatus int getCurrentThermalStatus() {
-        synchronized (this) {
-            if (mThermalService == null) {
-                mThermalService = IThermalService.Stub.asInterface(
-                        ServiceManager.getService(Context.THERMAL_SERVICE));
-            }
-            try {
-                return mThermalService.getCurrentThermalStatus();
-            } catch (RemoteException e) {
-                throw e.rethrowFromSystemServer();
-            }
+        try {
+            return mThermalService.getCurrentThermalStatus();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
         }
-
     }
 
     /**
@@ -1794,13 +1913,7 @@
      */
     public void addThermalStatusListener(@NonNull OnThermalStatusChangedListener listener) {
         Preconditions.checkNotNull(listener, "listener cannot be null");
-        synchronized (this) {
-            if (mThermalService == null) {
-                mThermalService = IThermalService.Stub.asInterface(
-                        ServiceManager.getService(Context.THERMAL_SERVICE));
-            }
-            this.addThermalStatusListener(mContext.getMainExecutor(), listener);
-        }
+        this.addThermalStatusListener(mContext.getMainExecutor(), listener);
     }
 
     /**
@@ -1813,35 +1926,29 @@
             @NonNull OnThermalStatusChangedListener listener) {
         Preconditions.checkNotNull(listener, "listener cannot be null");
         Preconditions.checkNotNull(executor, "executor cannot be null");
-        synchronized (this) {
-            if (mThermalService == null) {
-                mThermalService = IThermalService.Stub.asInterface(
-                        ServiceManager.getService(Context.THERMAL_SERVICE));
-            }
-            Preconditions.checkArgument(!mListenerMap.containsKey(listener),
-                    "Listener already registered: " + listener);
-            IThermalStatusListener internalListener = new IThermalStatusListener.Stub() {
-                @Override
-                public void onStatusChange(int status) {
-                    final long token = Binder.clearCallingIdentity();
-                    try {
-                        executor.execute(() -> {
-                            listener.onThermalStatusChanged(status);
-                        });
-                    } finally {
-                        Binder.restoreCallingIdentity(token);
-                    }
+        Preconditions.checkArgument(!mListenerMap.containsKey(listener),
+                "Listener already registered: " + listener);
+        IThermalStatusListener internalListener = new IThermalStatusListener.Stub() {
+            @Override
+            public void onStatusChange(int status) {
+                final long token = Binder.clearCallingIdentity();
+                try {
+                    executor.execute(() -> {
+                        listener.onThermalStatusChanged(status);
+                    });
+                } finally {
+                    Binder.restoreCallingIdentity(token);
                 }
-            };
-            try {
-                if (mThermalService.registerThermalStatusListener(internalListener)) {
-                    mListenerMap.put(listener, internalListener);
-                } else {
-                    throw new RuntimeException("Listener failed to set");
-                }
-            } catch (RemoteException e) {
-                throw e.rethrowFromSystemServer();
             }
+        };
+        try {
+            if (mThermalService.registerThermalStatusListener(internalListener)) {
+                mListenerMap.put(listener, internalListener);
+            } else {
+                throw new RuntimeException("Listener failed to set");
+            }
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -1852,22 +1959,72 @@
      */
     public void removeThermalStatusListener(@NonNull OnThermalStatusChangedListener listener) {
         Preconditions.checkNotNull(listener, "listener cannot be null");
-        synchronized (this) {
-            if (mThermalService == null) {
-                mThermalService = IThermalService.Stub.asInterface(
-                        ServiceManager.getService(Context.THERMAL_SERVICE));
+        IThermalStatusListener internalListener = mListenerMap.get(listener);
+        Preconditions.checkArgument(internalListener != null, "Listener was not added");
+        try {
+            if (mThermalService.unregisterThermalStatusListener(internalListener)) {
+                mListenerMap.remove(listener);
+            } else {
+                throw new RuntimeException("Listener failed to remove");
             }
-            IThermalStatusListener internalListener = mListenerMap.get(listener);
-            Preconditions.checkArgument(internalListener != null, "Listener was not added");
-            try {
-                if (mThermalService.unregisterThermalStatusListener(internalListener)) {
-                    mListenerMap.remove(listener);
-                } else {
-                    throw new RuntimeException("Listener failed to remove");
-                }
-            } catch (RemoteException e) {
-                throw e.rethrowFromSystemServer();
-            }
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    @CurrentTimeMillisLong
+    private final AtomicLong mLastHeadroomUpdate = new AtomicLong(0L);
+    private static final int MINIMUM_HEADROOM_TIME_MILLIS = 500;
+
+    /**
+     * Provides an estimate of how much thermal headroom the device currently has before hitting
+     * severe throttling.
+     *
+     * Note that this only attempts to track the headroom of slow-moving sensors, such as the skin
+     * temperature sensor. This means that there is no benefit to calling this function more
+     * frequently than about once per second, and attempts to call significantly more frequently may
+     * result in the function returning {@code NaN}.
+     *
+     * In addition, in order to be able to provide an accurate forecast, the system does not attempt
+     * to forecast until it has multiple temperature samples from which to extrapolate. This should
+     * only take a few seconds from the time of the first call, but during this time, no forecasting
+     * will occur, and the current headroom will be returned regardless of the value of
+     * {@code forecastSeconds}.
+     *
+     * The value returned is a non-negative float that represents how much of the thermal envelope
+     * is in use (or is forecasted to be in use). A value of 1.0 indicates that the device is (or
+     * will be) throttled at {@link #THERMAL_STATUS_SEVERE}. Such throttling can affect the CPU,
+     * GPU, and other subsystems. Values may exceed 1.0, but there is no implied mapping to specific
+     * thermal status levels beyond that point. This means that values greater than 1.0 may
+     * correspond to {@link #THERMAL_STATUS_SEVERE}, but may also represent heavier throttling.
+     *
+     * A value of 0.0 corresponds to a fixed distance from 1.0, but does not correspond to any
+     * particular thermal status or temperature. Values on (0.0, 1.0] may be expected to scale
+     * linearly with temperature, though temperature changes over time are typically not linear.
+     * Negative values will be clamped to 0.0 before returning.
+     *
+     * @param forecastSeconds how many seconds in the future to forecast. Given that device
+     *                        conditions may change at any time, forecasts from further in the
+     *                        future will likely be less accurate than forecasts in the near future.
+     * @return a value greater than or equal to 0.0 where 1.0 indicates the SEVERE throttling
+     *         threshold, as described above. Returns NaN if the device does not support this
+     *         functionality or if this function is called significantly faster than once per
+     *         second.
+     */
+    public float getThermalHeadroom(@IntRange(from = 0, to = 60) int forecastSeconds) {
+        // Rate-limit calls into the thermal service
+        long now = SystemClock.elapsedRealtime();
+        long timeSinceLastUpdate = now - mLastHeadroomUpdate.get();
+        if (timeSinceLastUpdate < MINIMUM_HEADROOM_TIME_MILLIS) {
+            return Float.NaN;
+        }
+
+        try {
+            float forecast = mThermalService.getThermalHeadroom(forecastSeconds);
+            mLastHeadroomUpdate.set(SystemClock.elapsedRealtime());
+            return forecast;
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -2413,4 +2570,18 @@
             };
         }
     }
+
+    /**
+     * @hide
+     */
+    public static void invalidatePowerSaveModeCaches() {
+        PropertyInvalidatedCache.invalidateCache(CACHE_KEY_IS_POWER_SAVE_MODE_PROPERTY);
+    }
+
+    /**
+     * @hide
+     */
+    public static void invalidateIsInteractiveCaches() {
+        PropertyInvalidatedCache.invalidateCache(CACHE_KEY_IS_INTERACTIVE_PROPERTY);
+    }
 }
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 8d09461..dbe3b7b 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -214,6 +214,20 @@
      */
     public static final int FSVERITY_CERT_UID = 1075;
 
+    /**
+     * GID that gives write access to app-private data directories on external
+     * storage (used on devices without sdcardfs only).
+     * @hide
+     */
+    public static final int EXT_DATA_RW_GID = 1078;
+
+    /**
+     * GID that gives write access to app-private OBB directories on external
+     * storage (used on devices without sdcardfs only).
+     * @hide
+     */
+    public static final int EXT_OBB_RW_GID = 1079;
+
     /** {@hide} */
     public static final int NOBODY_UID = 9999;
 
diff --git a/core/java/android/os/SharedMemory.java b/core/java/android/os/SharedMemory.java
index 26d9c7d..7512352 100644
--- a/core/java/android/os/SharedMemory.java
+++ b/core/java/android/os/SharedMemory.java
@@ -27,6 +27,7 @@
 
 import java.io.Closeable;
 import java.io.FileDescriptor;
+import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.DirectByteBuffer;
 import java.nio.NioUtils;
@@ -272,6 +273,20 @@
         dest.writeFileDescriptor(mFileDescriptor);
     }
 
+    /**
+     * Returns a dup'd ParcelFileDescriptor from the SharedMemory FileDescriptor.
+     * This obeys standard POSIX semantics, where the
+     * new file descriptor shared state such as file position with the
+     * original file descriptor.
+     * TODO: propose this method as a public or system API for next release to achieve parity with
+     *  NDK ASharedMemory_dupFromJava.
+     *
+     * @hide
+     */
+    public ParcelFileDescriptor getFdDup() throws IOException {
+        return ParcelFileDescriptor.dup(mFileDescriptor);
+    }
+
     public static final @android.annotation.NonNull Parcelable.Creator<SharedMemory> CREATOR =
             new Parcelable.Creator<SharedMemory>() {
         @Override
diff --git a/core/java/android/os/StatsDimensionsValue.aidl b/core/java/android/os/StatsDimensionsValue.aidl
deleted file mode 100644
index 81a14a4..0000000
--- a/core/java/android/os/StatsDimensionsValue.aidl
+++ /dev/null
@@ -1,20 +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;
-
-/** @hide */
-parcelable StatsDimensionsValue cpp_header "android/os/StatsDimensionsValue.h";
\ No newline at end of file
diff --git a/core/java/android/os/StatsServiceManager.java b/core/java/android/os/StatsServiceManager.java
index d032e98..de07e92 100644
--- a/core/java/android/os/StatsServiceManager.java
+++ b/core/java/android/os/StatsServiceManager.java
@@ -18,17 +18,16 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
+import android.annotation.SystemApi.Client;
 
 /**
  * Provides a way to register and obtain the system service binder objects managed by the stats
  * service.
  *
  * <p> Only the statsd mainline module will be able to access an instance of this class.
- *
- * TODO(b/148225705) Change to @SystemApi(client=MODULE_LIBRARIES) when the build system is ready.
  * @hide
  */
-@SystemApi
+@SystemApi(client = Client.MODULE_LIBRARIES)
 public class StatsServiceManager {
     /**
      * @hide
diff --git a/core/java/android/os/SystemVibrator.java b/core/java/android/os/SystemVibrator.java
index faf4a36..da20c7f 100644
--- a/core/java/android/os/SystemVibrator.java
+++ b/core/java/android/os/SystemVibrator.java
@@ -16,11 +16,17 @@
 
 package android.os;
 
+import android.annotation.CallbackExecutor;
 import android.annotation.NonNull;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.media.AudioAttributes;
+import android.os.IVibratorStateListener;
+import android.util.ArrayMap;
 import android.util.Log;
+import com.android.internal.annotations.GuardedBy;
+import java.util.concurrent.Executor;
+import java.util.Objects;
 
 /**
  * Vibrator implementation that controls the main system vibrator.
@@ -32,15 +38,22 @@
 
     private final IVibratorService mService;
     private final Binder mToken = new Binder();
+    private final Context mContext;
+
+    @GuardedBy("mDelegates")
+    private final ArrayMap<OnVibratorStateChangedListener,
+            OnVibratorStateChangedListenerDelegate> mDelegates = new ArrayMap<>();
 
     @UnsupportedAppUsage
     public SystemVibrator() {
+        mContext = null;
         mService = IVibratorService.Stub.asInterface(ServiceManager.getService("vibrator"));
     }
 
     @UnsupportedAppUsage
     public SystemVibrator(Context context) {
         super(context);
+        mContext = context;
         mService = IVibratorService.Stub.asInterface(ServiceManager.getService("vibrator"));
     }
 
@@ -57,6 +70,126 @@
         return false;
     }
 
+    /**
+     * Check whether the vibrator is vibrating.
+     *
+     * @return True if the hardware is vibrating, otherwise false.
+     */
+    @Override
+    public boolean isVibrating() {
+        if (mService == null) {
+            Log.w(TAG, "Failed to vibrate; no vibrator service.");
+            return false;
+        }
+        try {
+            return mService.isVibrating();
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+        }
+        return false;
+    }
+
+    private class OnVibratorStateChangedListenerDelegate extends
+            IVibratorStateListener.Stub {
+        private final Executor mExecutor;
+        private final OnVibratorStateChangedListener mListener;
+
+        OnVibratorStateChangedListenerDelegate(@NonNull OnVibratorStateChangedListener listener,
+                @NonNull Executor executor) {
+            mExecutor = executor;
+            mListener = listener;
+        }
+
+        @Override
+        public void onVibrating(boolean isVibrating) {
+            mExecutor.execute(() -> mListener.onVibratorStateChanged(isVibrating));
+        }
+    }
+
+    /**
+     * Adds a listener for vibrator state change. If the listener was previously added and not
+     * removed, this call will be ignored.
+     *
+     * @param listener Listener to be added.
+     * @param executor The {@link Executor} on which the listener's callbacks will be executed on.
+     */
+    @Override
+    public void addVibratorStateListener(
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull OnVibratorStateChangedListener listener) {
+        Objects.requireNonNull(listener);
+        Objects.requireNonNull(executor);
+        if (mService == null) {
+            Log.w(TAG, "Failed to add vibrate state listener; no vibrator service.");
+            return;
+        }
+
+        synchronized (mDelegates) {
+            // If listener is already registered, reject and return.
+            if (mDelegates.containsKey(listener)) {
+                Log.w(TAG, "Listener already registered.");
+                return;
+            }
+            try {
+                final OnVibratorStateChangedListenerDelegate delegate =
+                        new OnVibratorStateChangedListenerDelegate(listener, executor);
+                if (!mService.registerVibratorStateListener(delegate)) {
+                    Log.w(TAG, "Failed to register vibrate state listener");
+                    return;
+                }
+                mDelegates.put(listener, delegate);
+            } catch (RemoteException e) {
+                throw e.rethrowFromSystemServer();
+            }
+        }
+    }
+
+    /**
+     * Adds a listener for vibrator state changes. Callbacks will be executed on the main thread.
+     * If the listener was previously added and not removed, this call will be ignored.
+     *
+     * @param listener listener to be added
+     */
+    @Override
+    public void addVibratorStateListener(@NonNull OnVibratorStateChangedListener listener) {
+        Objects.requireNonNull(listener);
+        if (mContext == null) {
+            Log.w(TAG, "Failed to add vibrate state listener; no vibrator context.");
+            return;
+        }
+        addVibratorStateListener(mContext.getMainExecutor(), listener);
+    }
+
+    /**
+     * Removes the listener for vibrator state changes. If the listener was not previously
+     * registered, this call will do nothing.
+     *
+     * @param listener Listener to be removed.
+     */
+    @Override
+    public void removeVibratorStateListener(@NonNull OnVibratorStateChangedListener listener) {
+        Objects.requireNonNull(listener);
+        if (mService == null) {
+            Log.w(TAG, "Failed to remove vibrate state listener; no vibrator service.");
+            return;
+        }
+        synchronized (mDelegates) {
+            // Check if the listener is registered, otherwise will return.
+            if (mDelegates.containsKey(listener)) {
+                final OnVibratorStateChangedListenerDelegate delegate = mDelegates.get(listener);
+                try {
+                    if (!mService.unregisterVibratorStateListener(delegate)) {
+                        Log.w(TAG, "Failed to unregister vibrate state listener");
+                        return;
+                    }
+                    mDelegates.remove(listener);
+                } catch (RemoteException e) {
+                    throw e.rethrowFromSystemServer();
+                }
+            }
+        }
+    }
+
     @Override
     public boolean hasAmplitudeControl() {
         if (mService == null) {
diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java
index 25584f1..50cc764 100644
--- a/core/java/android/os/Trace.java
+++ b/core/java/android/os/Trace.java
@@ -101,6 +101,8 @@
     public static final long TRACE_TAG_NNAPI = 1L << 25;
     /** @hide */
     public static final long TRACE_TAG_RRO = 1L << 26;
+    /** @hide */
+    public static final long TRACE_TAG_APEX_MANAGER = 1L << 18;
 
     private static final long TRACE_TAG_NOT_READY = 1L << 63;
     private static final int MAX_SECTION_NAME_LEN = 127;
@@ -175,11 +177,7 @@
     }
 
     /**
-     * Set whether tracing is enabled in this process.  Tracing is disabled shortly after Zygote
-     * initializes and re-enabled after processes fork from Zygote.  This is done because Zygote
-     * has no way to be notified about changes to the tracing tags, and if Zygote ever reads and
-     * caches the tracing tags, forked processes will inherit those stale tags.
-     *
+     * Set whether tracing is enabled in this process.
      * @hide
      */
     public static void setTracingEnabled(boolean enabled, int debugFlags) {
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 6ed1d2c..84fd580 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -33,6 +33,7 @@
 import android.annotation.WorkerThread;
 import android.app.Activity;
 import android.app.ActivityManager;
+import android.app.PropertyInvalidatedCache;
 import android.app.admin.DevicePolicyManager;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.ComponentName;
@@ -150,12 +151,23 @@
     public static final int QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED = 0x1;
 
     /**
+     * Flag passed to {@link #requestQuietModeEnabled} to request disabling quiet mode without
+     * asking for credentials. This is used when managed profile password is forgotten. It starts
+     * the user in locked state so that a direct boot aware DPC could reset the password.
+     * Should not be used together with
+     * {@link #QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED} or an exception will be thrown.
+     * @hide
+     */
+    public static final int QUIET_MODE_DISABLE_DONT_ASK_CREDENTIAL = 0x2;
+
+    /**
      * List of flags available for the {@link #requestQuietModeEnabled} method.
      * @hide
      */
     @Retention(RetentionPolicy.SOURCE)
     @IntDef(flag = true, prefix = { "QUIET_MODE_" }, value = {
-            QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED })
+            QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED,
+            QUIET_MODE_DISABLE_DONT_ASK_CREDENTIAL})
     public @interface QuietModeFlag {}
 
     /**
@@ -2150,16 +2162,38 @@
         return isUserUnlocked(user.getIdentifier());
     }
 
+    private static final String CACHE_KEY_IS_USER_UNLOCKED_PROPERTY =
+            "cache_key.is_user_unlocked";
+
+    private final PropertyInvalidatedCache<Integer, Boolean> mIsUserUnlockedCache =
+            new PropertyInvalidatedCache<Integer, Boolean>(
+                32, CACHE_KEY_IS_USER_UNLOCKED_PROPERTY) {
+                @Override
+                protected Boolean recompute(Integer query) {
+                    try {
+                        return mService.isUserUnlocked(query);
+                    } catch (RemoteException re) {
+                        throw re.rethrowFromSystemServer();
+                    }
+                }
+            };
+
     /** {@hide} */
     @UnsupportedAppUsage
     @RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS,
             Manifest.permission.INTERACT_ACROSS_USERS}, conditional = true)
     public boolean isUserUnlocked(@UserIdInt int userId) {
-        try {
-            return mService.isUserUnlocked(userId);
-        } catch (RemoteException re) {
-            throw re.rethrowFromSystemServer();
-        }
+        return mIsUserUnlockedCache.query(userId);
+    }
+
+    /** {@hide} */
+    public void disableIsUserUnlockedCache() {
+        mIsUserUnlockedCache.disableLocal();
+    }
+
+    /** {@hide} */
+    public static final void invalidateIsUserUnlockedCache() {
+        PropertyInvalidatedCache.invalidateCache(CACHE_KEY_IS_USER_UNLOCKED_PROPERTY);
     }
 
     /**
@@ -2325,10 +2359,12 @@
      * @param restrictionKey the string key representing the restriction
      * @param userHandle the UserHandle of the user for whom to retrieve the restrictions.
      */
+    @TestApi
     @UnsupportedAppUsage
-    @RequiresPermission(Manifest.permission.MANAGE_USERS)
-    public boolean hasBaseUserRestriction(@UserRestrictionKey String restrictionKey,
-            UserHandle userHandle) {
+    @RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS,
+            Manifest.permission.CREATE_USERS})
+    public boolean hasBaseUserRestriction(@UserRestrictionKey @NonNull String restrictionKey,
+            @NonNull UserHandle userHandle) {
         try {
             return mService.hasBaseUserRestriction(restrictionKey, userHandle.getIdentifier());
         } catch (RemoteException re) {
@@ -3496,12 +3532,13 @@
             boolean enableQuietMode, @NonNull UserHandle userHandle, IntentSender target) {
         return requestQuietModeEnabled(enableQuietMode, userHandle, target, 0);
     }
+
     /**
      * Similar to {@link #requestQuietModeEnabled(boolean, UserHandle)}, except you can specify
      * a target to start when user is unlocked. If {@code target} is specified, caller must have
      * the {@link android.Manifest.permission#MANAGE_USERS} permission.
      *
-     * @see {@link #requestQuietModeEnabled(boolean, UserHandle)}
+     * @see #requestQuietModeEnabled(boolean, UserHandle)
      * @hide
      */
     public boolean requestQuietModeEnabled(
diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java
index f055c60..d4da7a8 100644
--- a/core/java/android/os/Vibrator.java
+++ b/core/java/android/os/Vibrator.java
@@ -16,11 +16,14 @@
 
 package android.os;
 
+import android.annotation.CallbackExecutor;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.RequiresPermission;
+import android.annotation.SystemApi;
 import android.annotation.SystemService;
+import android.annotation.TestApi;
 import android.app.ActivityThread;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
@@ -29,6 +32,7 @@
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.concurrent.Executor;
 
 /**
  * Class that operates the vibrator on the device.
@@ -395,4 +399,78 @@
      */
     @RequiresPermission(android.Manifest.permission.VIBRATE)
     public abstract void cancel();
+
+    /**
+     * Check whether the vibrator is vibrating.
+     *
+     * @return True if the hardware is vibrating, otherwise false.
+     * @hide
+     */
+    @SystemApi
+    @TestApi
+    @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)
+    public boolean isVibrating() {
+        return false;
+    }
+
+    /**
+    * Listener for when the vibrator state has changed.
+    *
+    * @see #addVibratorStateListener
+    * @see #removeVibratorStateListener
+    * @hide
+    */
+    @SystemApi
+    @TestApi
+    public interface OnVibratorStateChangedListener  {
+        /**
+         * Called when the vibrator state has changed.
+         *
+         * @param isVibrating If true, the vibrator has started vibrating. If false,
+         *                    it's stopped vibrating.
+         */
+        void onVibratorStateChanged(boolean isVibrating);
+    }
+
+    /**
+     * Adds a listener for vibrator state changes. Callbacks will be executed on the main thread.
+     * If the listener was previously added and not removed, this call will be ignored.
+     *
+     * @param listener listener to be added
+     * @hide
+     */
+    @SystemApi
+    @TestApi
+    @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)
+    public void addVibratorStateListener(@NonNull OnVibratorStateChangedListener listener) {
+    }
+
+    /**
+     * Adds a listener for vibrator state change. If the listener was previously added and not
+     * removed, this call will be ignored.
+     *
+     * @param listener listener to be added
+     * @param executor executor of listener
+     * @hide
+     */
+    @SystemApi
+    @TestApi
+    @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)
+    public void addVibratorStateListener(
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull OnVibratorStateChangedListener listener) {
+    }
+
+    /**
+     * Removes the listener for vibrator state changes. If the listener was not previously
+     * registered, this call will do nothing.
+     *
+     * @param listener listener to be removed
+     * @hide
+     */
+    @SystemApi
+    @TestApi
+    @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)
+    public void removeVibratorStateListener(@NonNull OnVibratorStateChangedListener listener) {
+    }
 }
diff --git a/core/java/android/os/image/DynamicSystemManager.java b/core/java/android/os/image/DynamicSystemManager.java
index cbf531c..17851ad 100644
--- a/core/java/android/os/image/DynamicSystemManager.java
+++ b/core/java/android/os/image/DynamicSystemManager.java
@@ -19,6 +19,7 @@
 import android.annotation.RequiresPermission;
 import android.annotation.SystemService;
 import android.content.Context;
+import android.gsi.AvbPublicKey;
 import android.gsi.GsiProgress;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
@@ -85,6 +86,23 @@
                 throw new RuntimeException(e.toString());
             }
         }
+
+        /**
+         * Retrieve AVB public key from installing partition.
+         *
+         * @param dst           Output the AVB public key.
+         * @return              true on success, false if partition doesn't have a
+         *                      valid VBMeta block to retrieve the AVB key from.
+         */
+        @RequiresPermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM)
+        public boolean getAvbPublicKey(AvbPublicKey dst) {
+            try {
+                return mService.getAvbPublicKey(dst);
+            } catch (RemoteException e) {
+                throw new RuntimeException(e.toString());
+            }
+        }
+
         /**
          * Finish write and make device to boot into the it after reboot.
          *
diff --git a/core/java/android/os/image/IDynamicSystemService.aidl b/core/java/android/os/image/IDynamicSystemService.aidl
index cc32f99..a1f9272 100644
--- a/core/java/android/os/image/IDynamicSystemService.aidl
+++ b/core/java/android/os/image/IDynamicSystemService.aidl
@@ -15,6 +15,7 @@
  */
 package android.os.image;
 
+import android.gsi.AvbPublicKey;
 import android.gsi.GsiProgress;
 
 /** {@hide} */
@@ -108,4 +109,13 @@
      * @return              true on success, false otherwise.
      */
     boolean submitFromAshmem(long bytes);
+
+    /**
+     * Retrieve AVB public key from installing partition.
+     *
+     * @param dst           Output the AVB public key.
+     * @return              true on success, false if partition doesn't have a
+     *                      valid VBMeta block to retrieve the AVB key from.
+     */
+    boolean getAvbPublicKey(out AvbPublicKey dst);
 }
diff --git a/core/java/android/os/incremental/IIncrementalManager.aidl b/core/java/android/os/incremental/IIncrementalManager.aidl
index b415bc0..be83aae 100644
--- a/core/java/android/os/incremental/IIncrementalManager.aidl
+++ b/core/java/android/os/incremental/IIncrementalManager.aidl
@@ -33,7 +33,4 @@
     boolean startDataLoader(int mountId);
     void showHealthBlockedUI(int mountId);
     void destroyDataLoader(int mountId);
-
-    // fileId is a 16 byte long identifier.
-    void newFileForDataLoader(int mountId, in byte[] fileId, in byte[] metadata);
 }
diff --git a/core/java/android/os/incremental/IIncrementalService.aidl b/core/java/android/os/incremental/IIncrementalService.aidl
index 21434a2..2dbaea8 100644
--- a/core/java/android/os/incremental/IIncrementalService.aidl
+++ b/core/java/android/os/incremental/IIncrementalService.aidl
@@ -17,6 +17,7 @@
 package android.os.incremental;
 
 import android.content.pm.DataLoaderParamsParcel;
+import android.content.pm.IDataLoaderStatusListener;
 import android.os.incremental.IncrementalNewFileParams;
 
 /** @hide */
@@ -33,7 +34,7 @@
      * Opens or creates a storage given a target path and data loader params. Returns the storage ID.
      */
     int openStorage(in @utf8InCpp String path);
-    int createStorage(in @utf8InCpp String path, in DataLoaderParamsParcel params, int createMode);
+    int createStorage(in @utf8InCpp String path, in DataLoaderParamsParcel params, in IDataLoaderStatusListener listener, int createMode);
     int createLinkedStorage(in @utf8InCpp String path, int otherStorageId, int createMode);
 
     /**
@@ -103,4 +104,9 @@
      * Deletes a storage given its ID. Deletes its bind mounts and unmount it. Stop its data loader.
      */
     void deleteStorage(int storageId);
+
+    /**
+     * Setting up native library directories and extract native libs onto a storage.
+     */
+    boolean configureNativeBinaries(int storageId, in @utf8InCpp String apkFullPath, in @utf8InCpp String libDirRelativePath, in @utf8InCpp String abi);
 }
diff --git a/core/java/android/os/incremental/IncrementalFileStorages.java b/core/java/android/os/incremental/IncrementalFileStorages.java
index 987a53e..3f8c0fe 100644
--- a/core/java/android/os/incremental/IncrementalFileStorages.java
+++ b/core/java/android/os/incremental/IncrementalFileStorages.java
@@ -29,10 +29,13 @@
  * @throws IllegalStateException the session is not an Incremental installation session.
  */
 
+import static android.content.pm.PackageInstaller.LOCATION_DATA_APP;
+
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.pm.DataLoaderParams;
+import android.content.pm.IDataLoaderStatusListener;
 import android.content.pm.InstallationFile;
 import android.text.TextUtils;
 import android.util.Slog;
@@ -72,6 +75,7 @@
     public static IncrementalFileStorages initialize(Context context,
             @NonNull File stageDir,
             @NonNull DataLoaderParams dataLoaderParams,
+            @Nullable IDataLoaderStatusListener dataLoaderStatusListener,
             List<InstallationFile> addedFiles) throws IOException {
         // TODO(b/136132412): sanity check if session should not be incremental
         IncrementalManager incrementalManager = (IncrementalManager) context.getSystemService(
@@ -83,22 +87,29 @@
 
         IncrementalFileStorages result = null;
         try {
-            result = new IncrementalFileStorages(stageDir, incrementalManager, dataLoaderParams);
+            result = new IncrementalFileStorages(stageDir, incrementalManager, dataLoaderParams,
+                    dataLoaderStatusListener);
+
+            if (!addedFiles.isEmpty()) {
+                result.mDefaultStorage.bind(stageDir.getAbsolutePath());
+            }
+
             for (InstallationFile file : addedFiles) {
-                if (file.getFileType() == InstallationFile.FILE_TYPE_APK) {
+                if (file.getLocation() == LOCATION_DATA_APP) {
                     try {
                         result.addApkFile(file);
                     } catch (IOException e) {
                         // TODO(b/146080380): add incremental-specific error code
                         throw new IOException(
-                                "Failed to add and configure Incremental File: " + file.getName(),
-                                e);
+                                "Failed to add file to IncFS: " + file.getName() + ", reason: "
+                                        + e.getMessage(), e.getCause());
                     }
                 } else {
-                    throw new IOException("Unknown file type: " + file.getFileType());
+                    throw new IOException("Unknown file location: " + file.getLocation());
                 }
             }
 
+            // TODO(b/146080380): remove 5 secs wait in startLoading
             if (!result.mDefaultStorage.startLoading()) {
                 // TODO(b/146080380): add incremental-specific error code
                 throw new IOException("Failed to start loading data for Incremental installation.");
@@ -115,7 +126,8 @@
 
     private IncrementalFileStorages(@NonNull File stageDir,
             @NonNull IncrementalManager incrementalManager,
-            @NonNull DataLoaderParams dataLoaderParams) throws IOException {
+            @NonNull DataLoaderParams dataLoaderParams,
+            @Nullable IDataLoaderStatusListener dataLoaderStatusListener) throws IOException {
         mStageDir = stageDir;
         mIncrementalManager = incrementalManager;
         if (dataLoaderParams.getComponentName().getPackageName().equals("local")) {
@@ -132,6 +144,7 @@
             }
             mDefaultStorage = mIncrementalManager.createStorage(mDefaultDir,
                     dataLoaderParams,
+                    dataLoaderStatusListener,
                     IncrementalManager.CREATE_MODE_CREATE
                             | IncrementalManager.CREATE_MODE_TEMPORARY_BIND, false);
         }
@@ -142,13 +155,11 @@
     }
 
     private void addApkFile(@NonNull InstallationFile apk) throws IOException {
-        final String stageDirPath = mStageDir.getAbsolutePath();
-        mDefaultStorage.bind(stageDirPath);
-        String apkName = apk.getName();
-        File targetFile = Paths.get(stageDirPath, apkName).toFile();
+        final String apkName = apk.getName();
+        final File targetFile = new File(mStageDir, apkName);
         if (!targetFile.exists()) {
-            mDefaultStorage.makeFile(apkName, apk.getSize(), null,
-                    apk.getMetadata(), 0, null, null, null);
+            mDefaultStorage.makeFile(apkName, apk.getLengthBytes(), null, apk.getMetadata(),
+                    apk.getSignature());
         }
     }
 
diff --git a/core/java/android/os/incremental/IncrementalManager.java b/core/java/android/os/incremental/IncrementalManager.java
index 35fa37a..35518db 100644
--- a/core/java/android/os/incremental/IncrementalManager.java
+++ b/core/java/android/os/incremental/IncrementalManager.java
@@ -22,6 +22,7 @@
 import android.annotation.SystemService;
 import android.content.Context;
 import android.content.pm.DataLoaderParams;
+import android.content.pm.IDataLoaderStatusListener;
 import android.os.RemoteException;
 import android.util.SparseArray;
 
@@ -49,6 +50,8 @@
 public final class IncrementalManager {
     private static final String TAG = "IncrementalManager";
 
+    private static final String ALLOWED_PROPERTY = "incremental.allowed";
+
     public static final int CREATE_MODE_TEMPORARY_BIND =
             IIncrementalService.CREATE_MODE_TEMPORARY_BIND;
     public static final int CREATE_MODE_PERMANENT_BIND =
@@ -103,10 +106,11 @@
      */
     @Nullable
     public IncrementalStorage createStorage(@NonNull String path,
-            @NonNull DataLoaderParams params, @CreateMode int createMode,
+            @NonNull DataLoaderParams params, @Nullable IDataLoaderStatusListener listener,
+            @CreateMode int createMode,
             boolean autoStartDataLoader) {
         try {
-            final int id = mService.createStorage(path, params.getData(), createMode);
+            final int id = mService.createStorage(path, params.getData(), listener, createMode);
             if (id < 0) {
                 return null;
             }
@@ -229,16 +233,41 @@
         if (linkedApkStorage == null) {
             throw new IOException("Failed to create linked storage at dir: " + afterCodePathParent);
         }
-        linkedApkStorage.makeDirectory(afterCodePathName);
-        File[] files = beforeCodeFile.listFiles();
-        for (int i = 0; i < files.length; i++) {
-            if (files[i].isFile()) {
-                String fileName = files[i].getName();
-                apkStorage.makeLink(
-                        fileName, linkedApkStorage, afterCodePathName + "/" + fileName);
+        linkFiles(apkStorage, beforeCodeFile, "", linkedApkStorage, afterCodePathName);
+        apkStorage.unBind(beforeCodePath);
+    }
+
+    /**
+     * Recursively set up directories and link all the files from source storage to target storage.
+     *
+     * @param sourceStorage The storage that has all the files and directories underneath.
+     * @param sourceAbsolutePath The absolute path of the directory that holds all files and dirs.
+     * @param sourceRelativePath The relative path on the source directory, e.g., "" or "lib".
+     * @param targetStorage The target storage that will have the same files and directories.
+     * @param targetRelativePath The relative path to the directory on the target storage that
+     *                           should have all the files and dirs underneath,
+     *                           e.g., "packageName-random".
+     * @throws IOException When makeDirectory or makeLink fails on the Incremental File System.
+     */
+    private void linkFiles(IncrementalStorage sourceStorage, File sourceAbsolutePath,
+            String sourceRelativePath, IncrementalStorage targetStorage,
+            String targetRelativePath) throws IOException {
+        targetStorage.makeDirectory(targetRelativePath);
+        final File[] entryList = sourceAbsolutePath.listFiles();
+        for (int i = 0; i < entryList.length; i++) {
+            final File entry = entryList[i];
+            final String entryName = entryList[i].getName();
+            final String sourceEntryRelativePath =
+                    sourceRelativePath.isEmpty() ? entryName : sourceRelativePath + "/" + entryName;
+            final String targetEntryRelativePath = targetRelativePath + "/" + entryName;
+            if (entry.isFile()) {
+                sourceStorage.makeLink(
+                        sourceEntryRelativePath, targetStorage, targetEntryRelativePath);
+            } else if (entry.isDirectory()) {
+                linkFiles(sourceStorage, entry, sourceEntryRelativePath, targetStorage,
+                        targetEntryRelativePath);
             }
         }
-        apkStorage.unBind(beforeCodePath);
     }
 
     /**
@@ -261,12 +290,37 @@
     }
 
     /**
+     * Checks if Incremental feature is enabled on this device.
+     */
+    public static boolean isFeatureEnabled() {
+        return nativeIsEnabled();
+    }
+
+    /**
+     * Checks if Incremental installations are allowed.
+     * A developer can disable Incremental installations by setting the property.
+     */
+    public static boolean isAllowed() {
+        return isFeatureEnabled() && android.os.SystemProperties.getBoolean(ALLOWED_PROPERTY, true);
+    }
+
+    /**
      * Checks if path is mounted on Incremental File System.
      */
     public static boolean isIncrementalPath(@NonNull String path) {
         return nativeIsIncrementalPath(path);
     }
 
+    /**
+     * Returns raw signature for file if it's on Incremental File System.
+     * Unsafe, use only if you are sure what you are doing.
+     */
+    public static @Nullable byte[] unsafeGetFileSignature(@NonNull String path) {
+        return nativeUnsafeGetFileSignature(path);
+    }
+
     /* Native methods */
+    private static native boolean nativeIsEnabled();
     private static native boolean nativeIsIncrementalPath(@NonNull String path);
+    private static native byte[] nativeUnsafeGetFileSignature(@NonNull String path);
 }
diff --git a/core/java/android/os/incremental/IncrementalStorage.java b/core/java/android/os/incremental/IncrementalStorage.java
index c4b843b..f4e1f96 100644
--- a/core/java/android/os/incremental/IncrementalStorage.java
+++ b/core/java/android/os/incremental/IncrementalStorage.java
@@ -20,6 +20,8 @@
 import android.annotation.Nullable;
 import android.os.RemoteException;
 
+import java.io.ByteArrayInputStream;
+import java.io.DataInputStream;
 import java.io.File;
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -169,10 +171,11 @@
      * @param path             Relative path of the new file.
      * @param size             Size of the new file in bytes.
      * @param metadata         Metadata bytes.
+     * @param v4signatureBytes Serialized V4SignatureProto.
      */
     public void makeFile(@NonNull String path, long size, @Nullable UUID id,
-            @Nullable byte[] metadata, int hashAlgorithm, @Nullable byte[] rootHash,
-            @Nullable byte[] additionalData, @Nullable byte[] signature) throws IOException {
+            @Nullable byte[] metadata, @Nullable byte[] v4signatureBytes)
+            throws IOException {
         try {
             if (id == null && metadata == null) {
                 throw new IOException("File ID and metadata cannot both be null");
@@ -181,13 +184,7 @@
             params.size = size;
             params.metadata = (metadata == null ? new byte[0] : metadata);
             params.fileId = idToBytes(id);
-            if (hashAlgorithm != 0 || signature != null) {
-                params.signature = new IncrementalSignature();
-                params.signature.hashAlgorithm = hashAlgorithm;
-                params.signature.rootHash = rootHash;
-                params.signature.additionalData = additionalData;
-                params.signature.signature = signature;
-            }
+            params.signature = parseV4Signature(v4signatureBytes);
             int res = mService.makeFile(mId, path, params);
             if (res != 0) {
                 throw new IOException("makeFile() failed with errno " + -res);
@@ -197,6 +194,7 @@
         }
     }
 
+
     /**
      * Creates a file in Incremental storage. The content of the file is mapped from a range inside
      * a source file in the same storage.
@@ -349,6 +347,37 @@
         }
     }
 
+    /**
+     * Returns the metadata object of an IncFs File.
+     *
+     * @param id The file id.
+     * @return Byte array that contains metadata bytes.
+     */
+    @Nullable
+    public byte[] getFileMetadata(@NonNull UUID id) {
+        try {
+            final byte[] rawId = idToBytes(id);
+            return mService.getMetadataById(mId, rawId);
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+            return null;
+        }
+    }
+
+    /**
+     * Informs the data loader service associated with the current storage to start data loader
+     *
+     * @return True if data loader is successfully started.
+     */
+    public boolean startLoading() {
+        try {
+            return mService.startLoading(mId);
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+            return false;
+        }
+    }
+
     private static final int UUID_BYTE_SIZE = 16;
 
     /**
@@ -386,31 +415,60 @@
         return new UUID(msb, lsb);
     }
 
+    private static final int INCFS_HASH_SHA256 = 1;
+    private static final int INCFS_MAX_HASH_SIZE = 32; // SHA256
+    private static final int INCFS_MAX_ADD_DATA_SIZE = 128;
+
     /**
-     * Returns the metadata object of an IncFs File.
-     *
-     * @param id The file id.
-     * @return Byte array that contains metadata bytes.
+     * Deserialize and validate v4 signature bytes.
      */
-    @Nullable
-    public byte[] getFileMetadata(@NonNull UUID id) {
-        try {
-            final byte[] rawId = idToBytes(id);
-            return mService.getMetadataById(mId, rawId);
-        } catch (RemoteException e) {
-            e.rethrowFromSystemServer();
+    private static IncrementalSignature parseV4Signature(@Nullable byte[] v4signatureBytes)
+            throws IOException {
+        if (v4signatureBytes == null) {
             return null;
         }
+
+        final V4Signature signature;
+        try (DataInputStream input = new DataInputStream(
+                new ByteArrayInputStream(v4signatureBytes))) {
+            signature = V4Signature.readFrom(input);
+        }
+
+        final byte[] rootHash = signature.verityRootHash;
+        final byte[] additionalData = signature.v3Digest;
+        final byte[] pkcs7Signature = signature.pkcs7SignatureBlock;
+
+        if (rootHash.length != INCFS_MAX_HASH_SIZE) {
+            throw new IOException("rootHash has to be " + INCFS_MAX_HASH_SIZE + " bytes");
+        }
+        if (additionalData.length > INCFS_MAX_ADD_DATA_SIZE) {
+            throw new IOException(
+                    "additionalData has to be at most " + INCFS_MAX_ADD_DATA_SIZE + " bytes");
+        }
+
+        IncrementalSignature result = new IncrementalSignature();
+        result.hashAlgorithm = INCFS_HASH_SHA256;
+        result.rootHash = rootHash;
+        result.additionalData = additionalData;
+        result.signature = pkcs7Signature;
+
+        return result;
     }
 
     /**
-     * Informs the data loader service associated with the current storage to start data loader
+     * Configure all the lib files inside Incremental Service, e.g., create lib dirs, create new lib
+     * files, extract original lib file data from zip and then write data to the lib files on the
+     * Incremental File System.
      *
-     * @return True if data loader is successfully started.
+     * @param apkFullPath Source APK to extract native libs from.
+     * @param libDirRelativePath Target dir to put lib files, e.g., "lib" or "lib/arm".
+     * @param abi Target ABI of the native lib files. Only extract native libs of this ABI.
+     * @return Success of not.
      */
-    public boolean startLoading() {
+    public boolean configureNativeBinaries(String apkFullPath, String libDirRelativePath,
+            String abi) {
         try {
-            return mService.startLoading(mId);
+            return mService.configureNativeBinaries(mId, apkFullPath, libDirRelativePath, abi);
         } catch (RemoteException e) {
             e.rethrowFromSystemServer();
             return false;
diff --git a/core/java/android/os/incremental/V4Signature.java b/core/java/android/os/incremental/V4Signature.java
new file mode 100644
index 0000000..6516917
--- /dev/null
+++ b/core/java/android/os/incremental/V4Signature.java
@@ -0,0 +1,103 @@
+/*
+ * 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.incremental;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+/**
+ * V4 signature fields.
+ * Keep in sync with APKSig master copy.
+ * @hide
+ */
+public class V4Signature {
+    public static final String EXT = ".idsig";
+
+    public final byte[] verityRootHash;
+    public final byte[] v3Digest;
+    public final byte[] pkcs7SignatureBlock;
+
+    /**
+     * Construct a V4Signature from .idsig file.
+     */
+    public static V4Signature readFrom(File file) {
+        try (DataInputStream stream = new DataInputStream(new FileInputStream(file))) {
+            return readFrom(stream);
+        } catch (IOException e) {
+            return null;
+        }
+    }
+
+    /**
+     * Construct a V4Signature from .idsig file.
+     */
+    public static V4Signature readFrom(byte[] bytes) throws IOException {
+        try (DataInputStream stream = new DataInputStream(new ByteArrayInputStream(bytes))) {
+            return readFrom(stream);
+        }
+    }
+
+    /**
+     * Store the V4Signature to a byte-array.
+     */
+    public byte[] toByteArray() {
+        try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
+            try (DataOutputStream steam = new DataOutputStream(byteArrayOutputStream)) {
+                this.writeTo(steam);
+                steam.flush();
+            }
+            return byteArrayOutputStream.toByteArray();
+        } catch (IOException e) {
+            return null;
+        }
+    }
+
+    static V4Signature readFrom(DataInputStream stream) throws IOException {
+        byte[] verityRootHash = readBytes(stream);
+        byte[] v3Digest = readBytes(stream);
+        byte[] pkcs7SignatureBlock = readBytes(stream);
+        return new V4Signature(verityRootHash, v3Digest, pkcs7SignatureBlock);
+    }
+
+    V4Signature(byte[] verityRootHash, byte[] v3Digest, byte[] pkcs7SignatureBlock) {
+        this.verityRootHash = verityRootHash;
+        this.v3Digest = v3Digest;
+        this.pkcs7SignatureBlock = pkcs7SignatureBlock;
+    }
+
+    void writeTo(DataOutputStream stream) throws IOException {
+        writeBytes(stream, this.verityRootHash);
+        writeBytes(stream, this.v3Digest);
+        writeBytes(stream, this.pkcs7SignatureBlock);
+    }
+
+    private static byte[] readBytes(DataInputStream stream) throws IOException {
+        byte[] result = new byte[stream.readInt()];
+        stream.read(result);
+        return result;
+    }
+
+    private static void writeBytes(DataOutputStream stream, byte[] bytes) throws IOException {
+        stream.writeInt(bytes.length);
+        stream.write(bytes);
+    }
+}
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index bb1dafc..8d04df0 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -215,6 +215,20 @@
     public static final String ACTION_MANAGE_STORAGE = "android.os.storage.action.MANAGE_STORAGE";
 
     /**
+     * Activity Action: Allows the user to free up space by clearing app external cache directories.
+     * The intent doesn't automatically clear cache, but shows a dialog and lets the user decide.
+     * <p>
+     * This intent should be launched using
+     * {@link Activity#startActivityForResult(Intent, int)} so that the user
+     * knows which app is requesting to clear cache. The returned result will
+     * be {@link Activity#RESULT_OK} if the activity was launched and the user accepted to clear
+     * cache, or {@link Activity#RESULT_CANCELED} otherwise.
+     */
+    @RequiresPermission(android.Manifest.permission.MANAGE_EXTERNAL_STORAGE)
+    @SdkConstant(SdkConstant.SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_CLEAR_APP_CACHE = "android.os.storage.action.CLEAR_APP_CACHE";
+
+    /**
      * Extra {@link UUID} used to indicate the storage volume where an
      * application is interested in allocating or managing disk space.
      *
diff --git a/core/java/android/os/storage/StorageManagerInternal.java b/core/java/android/os/storage/StorageManagerInternal.java
index 5cac5f5..a2def7f 100644
--- a/core/java/android/os/storage/StorageManagerInternal.java
+++ b/core/java/android/os/storage/StorageManagerInternal.java
@@ -16,9 +16,12 @@
 
 package android.os.storage;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.os.IVold;
 
+import java.util.Set;
+
 /**
  * Mount service local interface.
  *
@@ -97,6 +100,12 @@
     }
 
     /**
+     * Check if fuse is running in target user, if it's running then setup its obb directories.
+     * TODO: System server should store a list of active pids that obb is not mounted and use it.
+     */
+    public abstract void prepareObbDirs(int userId, Set<String> packageList, String processName);
+
+    /**
      * Add a listener to listen to reset event in StorageManagerService.
      *
      * @param listener The listener that will be notified on reset events.
@@ -118,4 +127,20 @@
      * @param userId the userId for which to reset storage
      */
     public abstract void resetUser(int userId);
+
+    /**
+     * Returns {@code true} if the immediate last installed version of an app with {@code uid} had
+     * legacy storage, {@code false} otherwise.
+     */
+    public abstract boolean hasLegacyExternalStorage(int uid);
+
+    /**
+     * Makes sure app-private data directories on external storage are setup correctly
+     * after an application is installed or upgraded. The main use for this is OBB dirs,
+     * which can be created/modified by the installer.
+     *
+     * @param packageName the package name of the package
+     * @param uid the uid of the package
+     */
+    public abstract void prepareAppDataAfterInstall(@NonNull String packageName, int uid);
 }
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 30e4eee08..a082f09 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -997,8 +997,9 @@
      * <p>
      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
      * <p>
-     * Input: Optionally, in versions of Android prior to 11, the Intent's data URI can specify the
-     * application package name to directly invoke the management GUI specific to the package name.
+     * Input: Optionally, in versions of Android prior to {@link android.os.Build.VERSION_CODES#R},
+     * the Intent's data URI can specify the application package name to directly invoke the
+     * management GUI specific to the package name.
      * For example "package:com.my.app".
      * <p>
      * Output: Nothing.
@@ -1011,9 +1012,10 @@
      * Activity Action: Show screen for controlling if the app specified in the data URI of the
      * intent can draw on top of other apps.
      * <p>
-     * Unlike {@link #ACTION_MANAGE_OVERLAY_PERMISSION}, which in Android 11 can't be used to show
-     * a GUI for a specific package, permission {@code android.permission.INTERNAL_SYSTEM_WINDOW} is
-     * needed to start an activity with this intent.
+     * Unlike {@link #ACTION_MANAGE_OVERLAY_PERMISSION}, which in Android {@link
+     * android.os.Build.VERSION_CODES#R} can't be used to show a GUI for a specific package,
+     * permission {@code android.permission.INTERNAL_SYSTEM_WINDOW} is needed to start an activity
+     * with this intent.
      * <p>
      * In some cases, a matching Activity may not exist, so ensure you
      * safeguard against this.
@@ -1771,6 +1773,15 @@
             = "android.settings.NOTIFICATION_SETTINGS";
 
     /**
+     * Activity Action: Show notification history screen.
+     *
+     * @hide
+     */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_NOTIFICATION_HISTORY
+            = "android.settings.NOTIFICATION_HISTORY";
+
+    /**
      * Activity Action: Show app listing settings, filtered by those that send notifications.
      *
      * @hide
@@ -1830,6 +1841,17 @@
     public static final String EXTRA_CHANNEL_ID = "android.provider.extra.CHANNEL_ID";
 
     /**
+     * Activity Extra: The {@link NotificationChannel#getConversationId()} of the notification
+     * conversation settings to display.
+     * <p>
+     * This is an optional extra field to the {@link #ACTION_CHANNEL_NOTIFICATION_SETTINGS}. If
+     * included the system will first look up notification settings by channel and conversation id,
+     * and will fall back to channel id if a specialized channel for this conversation doesn't
+     * exist, similar to {@link NotificationManager#getNotificationChannel(String, String)}.
+     */
+    public static final String EXTRA_CONVERSATION_ID = "android.provider.extra.CONVERSATION_ID";
+
+    /**
      * Activity Action: Show notification redaction settings.
      *
      * @hide
@@ -2033,6 +2055,19 @@
     public static final String ACTION_MANAGE_DOMAIN_URLS = "android.settings.MANAGE_DOMAIN_URLS";
 
     /**
+     * Activity Action: Show screen that let user select enable (or disable) tethering.
+     * <p>
+     * Input: Nothing.
+     * <p>
+     * Output: Nothing
+     *
+     * @hide
+     */
+    @SystemApi
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_TETHER_SETTINGS = "android.settings.TETHER_SETTINGS";
+
+    /**
      * Broadcast to trigger notification of asking user to enable MMS.
      * Need to specify {@link #EXTRA_ENABLE_MMS_DATA_REQUEST_REASON} and {@link #EXTRA_SUB_ID}.
      *
@@ -2986,6 +3021,7 @@
         private static final HashSet<String> MOVED_TO_SECURE;
         static {
             MOVED_TO_SECURE = new HashSet<>(30);
+            MOVED_TO_SECURE.add(Secure.ADAPTIVE_SLEEP);
             MOVED_TO_SECURE.add(Secure.ANDROID_ID);
             MOVED_TO_SECURE.add(Secure.HTTP_PROXY);
             MOVED_TO_SECURE.add(Secure.LOCATION_PROVIDERS_ALLOWED);
@@ -3904,6 +3940,19 @@
         public static final String SCREEN_BRIGHTNESS_FOR_VR = "screen_brightness_for_vr";
 
         /**
+         * The screen backlight brightness between 0.0f and 1.0f.
+         * @hide
+         */
+        public static final String SCREEN_BRIGHTNESS_FOR_VR_FLOAT =
+                "screen_brightness_for_vr_float";
+
+        /**
+         * The screen backlight brightness between 0.0f and 1.0f.
+         * @hide
+         */
+        public static final String SCREEN_BRIGHTNESS_FLOAT = "screen_brightness_float";
+
+        /**
          * Control whether to enable automatic brightness mode.
          */
         public static final String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode";
@@ -3928,6 +3977,7 @@
 
         /**
          * Control whether to enable adaptive sleep mode.
+         * @deprecated Use {@link android.provider.Settings.Secure#ADAPTIVE_SLEEP} instead.
          * @hide
          */
         public static final String ADAPTIVE_SLEEP = "adaptive_sleep";
@@ -4716,9 +4766,10 @@
             PUBLIC_SETTINGS.add(DIM_SCREEN);
             PUBLIC_SETTINGS.add(SCREEN_OFF_TIMEOUT);
             PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS);
+            PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS_FLOAT);
             PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS_FOR_VR);
+            PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS_FOR_VR_FLOAT);
             PUBLIC_SETTINGS.add(SCREEN_BRIGHTNESS_MODE);
-            PUBLIC_SETTINGS.add(ADAPTIVE_SLEEP);
             PUBLIC_SETTINGS.add(MODE_RINGER_STREAMS_AFFECTED);
             PUBLIC_SETTINGS.add(MUTE_STREAMS_AFFECTED);
             PUBLIC_SETTINGS.add(VIBRATE_ON);
@@ -5772,6 +5823,12 @@
         }
 
         /**
+         * Control whether to enable adaptive sleep mode.
+         * @hide
+         */
+        public static final String ADAPTIVE_SLEEP = "adaptive_sleep";
+
+        /**
          * @deprecated Use {@link android.provider.Settings.Global#DEVELOPMENT_SETTINGS_ENABLED}
          * instead
          */
@@ -6231,16 +6288,19 @@
          * @hide
          */
         public static final String LOCATION_CHANGER = "location_changer";
+
         /**
          * The location changer is unknown or unable to detect.
          * @hide
          */
         public static final int LOCATION_CHANGER_UNKNOWN = 0;
+
         /**
          * Location settings in system settings.
          * @hide
          */
         public static final int LOCATION_CHANGER_SYSTEM_SETTINGS = 1;
+
         /**
          * The location icon in drop down notification drawer.
          * @hide
@@ -6288,6 +6348,14 @@
         public static final int LOCATION_MODE_ON = LOCATION_MODE_HIGH_ACCURACY;
 
         /**
+         * The accuracy in meters used for coarsening location for clients with only the coarse
+         * location permission.
+         *
+         * @hide
+         */
+        public static final String LOCATION_COARSE_ACCURACY_M = "locationCoarseAccuracy";
+
+        /**
          * A flag containing settings used for biometric weak
          * @hide
          */
@@ -6394,6 +6462,7 @@
          * @hide
          */
         @SystemApi
+        @TestApi
         public static final String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS =
                 "lock_screen_allow_private_notifications";
 
@@ -7812,6 +7881,7 @@
          * @hide
          */
         @UnsupportedAppUsage
+        @TestApi
         public static final String NFC_PAYMENT_DEFAULT_COMPONENT = "nfc_payment_default_component";
 
         /**
@@ -8014,6 +8084,7 @@
          * @hide
          */
         @SystemApi
+        @TestApi
         public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS =
                 "lock_screen_show_notifications";
 
@@ -8524,6 +8595,15 @@
         public static final String NOTIFICATION_HISTORY_ENABLED = "notification_history_enabled";
 
         /**
+         * When enabled conversations marked as favorites will be set to bubble.
+         *
+         * The value 1 - enable, 0 - disable
+         * @hide
+         */
+        public static final String BUBBLE_IMPORTANT_CONVERSATIONS
+                = "bubble_important_conversations";
+
+        /**
          * Whether notifications are dismissed by a right-to-left swipe (instead of a left-to-right
          * swipe).
          *
@@ -8680,6 +8760,13 @@
                 "location_permissions_upgrade_to_q_mode";
 
         /**
+         * Whether or not the system Auto Revoke feature is disabled.
+         * @hide
+         */
+        @SystemApi
+        public static final String AUTO_REVOKE_DISABLED = "auto_revoke_disabled";
+
+        /**
          * Map of android.theme.customization.* categories to the enabled overlay package for that
          * category, formatted as a serialized {@link org.json.JSONObject}. If there is no
          * corresponding package included for a category, then all overlay packages in that
@@ -9013,26 +9100,34 @@
          * Set to one of {@link #WIFI_SLEEP_POLICY_DEFAULT},
          * {@link #WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED}, or
          * {@link #WIFI_SLEEP_POLICY_NEVER}.
+         * @deprecated This is no longer used or set by the platform.
          */
+        @Deprecated
         public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy";
 
         /**
          * Value for {@link #WIFI_SLEEP_POLICY} to use the default Wi-Fi sleep
          * policy, which is to sleep shortly after the turning off
          * according to the {@link #STAY_ON_WHILE_PLUGGED_IN} setting.
+         * @deprecated This is no longer used by the platform.
          */
+        @Deprecated
         public static final int WIFI_SLEEP_POLICY_DEFAULT = 0;
 
         /**
          * Value for {@link #WIFI_SLEEP_POLICY} to use the default policy when
          * the device is on battery, and never go to sleep when the device is
          * plugged in.
+         * @deprecated This is no longer used by the platform.
          */
+        @Deprecated
         public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1;
 
         /**
          * Value for {@link #WIFI_SLEEP_POLICY} to never go to sleep.
+         * @deprecated This is no longer used by the platform.
          */
+        @Deprecated
         public static final int WIFI_SLEEP_POLICY_NEVER = 2;
 
         /**
@@ -10126,7 +10221,9 @@
        /**
         * Delay (in seconds) before repeating the Wi-Fi networks available notification.
         * Connecting to a network will reset the timer.
+        * @deprecated This is no longer used or set by the platform.
         */
+       @Deprecated
        public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY =
                "wifi_networks_available_repeat_delay";
 
@@ -10156,7 +10253,9 @@
        /**
         * When the number of open networks exceeds this number, the
         * least-recently-used excess networks will be removed.
+        * @deprecated This is no longer used or set by the platform.
         */
+       @Deprecated
        public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
 
        /**
@@ -10167,8 +10266,8 @@
        /**
         * Setting to allow scans to be enabled even wifi is turned off for connectivity.
         * @hide
+        * @deprecated To be removed.
         */
-       @SystemApi
        public static final String WIFI_SCAN_ALWAYS_AVAILABLE =
                 "wifi_scan_always_enabled";
 
@@ -10177,8 +10276,8 @@
          *
          * Type: int (0 for false, 1 for true)
          * @hide
+         * @deprecated To be removed.
          */
-        @SystemApi
         public static final String WIFI_P2P_PENDING_FACTORY_RESET =
                 "wifi_p2p_pending_factory_reset";
 
@@ -10187,8 +10286,8 @@
          *
          * Type: int (0 for false, 1 for true)
          * @hide
+         * @deprecated To be removed.
          */
-        @SystemApi
         public static final String SOFT_AP_TIMEOUT_ENABLED = "soft_ap_timeout_enabled";
 
         /**
@@ -10196,7 +10295,9 @@
          *
          * Type: int (0 for false, 1 for true)
          * @hide
+         * @deprecated Use {@link WifiManager#isAutoWakeupEnabled()} instead.
          */
+        @Deprecated
         @SystemApi
         public static final String WIFI_WAKEUP_ENABLED = "wifi_wakeup_enabled";
 
@@ -10231,8 +10332,8 @@
          * Most readers of this setting should simply check if value == 1 to determined the
          * enabled state.
          * @hide
+         * @deprecated To be removed.
          */
-        @SystemApi
         public static final String NETWORK_RECOMMENDATIONS_ENABLED =
                 "network_recommendations_enabled";
 
@@ -10271,13 +10372,11 @@
 
         /**
          * Whether wifi scan throttle is enabled or not.
-         * This is intended to be used via adb commands or a menu in developer option to turn off
-         * the default wifi scan throttling mechanism for apps.
          *
          * Type: int (0 for false, 1 for true)
          * @hide
+         * @deprecated To be removed.
          */
-        @SystemApi
         public static final String WIFI_SCAN_THROTTLE_ENABLED = "wifi_scan_throttle_enabled";
 
         /**
@@ -10379,8 +10478,8 @@
         * Setting to enable verbose logging in Wi-Fi; disabled by default, and setting to 1
         * will enable it. In the future, additional values may be supported.
         * @hide
+        * @deprecated To be removed.
         */
-       @SystemApi
        public static final String WIFI_VERBOSE_LOGGING_ENABLED =
                "wifi_verbose_logging_enabled";
 
@@ -10405,8 +10504,8 @@
          * Default values are provided by code or device configurations.
          * Errors in the parameters will cause the entire setting to be ignored.
          * @hide
+         * @deprecated This is no longer used or set by the platform.
          */
-        @SystemApi
         public static final String WIFI_SCORE_PARAMS =
                 "wifi_score_params";
 
@@ -10448,8 +10547,8 @@
        /**
         * The Wi-Fi peer-to-peer device name
         * @hide
+        * @deprecated To be removed.
         */
-       @SystemApi
        public static final String WIFI_P2P_DEVICE_NAME = "wifi_p2p_device_name";
 
        /**
@@ -14057,6 +14156,13 @@
          */
         @SystemApi
         public static final String COMMON_CRITERIA_MODE = "common_criteria_mode";
+
+        /**
+         * The usage amount of advanced battery. The value is 0~100.
+         *
+         * @hide
+         */
+        public static final String ADVANCED_BATTERY_USAGE_AMOUNT = "advanced_battery_usage_amount";
     }
 
     /**
@@ -14219,7 +14325,6 @@
          *
          * @hide
          */
-        @SystemApi
         @RequiresPermission(Manifest.permission.MONITOR_DEVICE_CONFIG_ACCESS)
         public static void registerMonitorCallback(@NonNull ContentResolver resolver,
                 @NonNull RemoteCallback callback) {
diff --git a/core/java/android/service/autofill/FillResponse.java b/core/java/android/service/autofill/FillResponse.java
index 36f3a78..e8e1223 100644
--- a/core/java/android/service/autofill/FillResponse.java
+++ b/core/java/android/service/autofill/FillResponse.java
@@ -75,6 +75,7 @@
     private final @Nullable SaveInfo mSaveInfo;
     private final @Nullable Bundle mClientState;
     private final @Nullable RemoteViews mPresentation;
+    private final @Nullable InlinePresentation mInlinePresentation;
     private final @Nullable RemoteViews mHeader;
     private final @Nullable RemoteViews mFooter;
     private final @Nullable IntentSender mAuthentication;
@@ -87,13 +88,15 @@
     private final @Nullable UserData mUserData;
     private final @Nullable int[] mCancelIds;
     private final boolean mSupportsInlineSuggestions;
-    private final @Nullable ParceledListSlice<InlinePresentation> mInlineActions;
+    // TODO(b/149240554): revert back to use ParceledListSlice after the bug is resolved.
+    private final @Nullable ArrayList<InlinePresentation> mInlineActions;
 
     private FillResponse(@NonNull Builder builder) {
         mDatasets = (builder.mDatasets != null) ? new ParceledListSlice<>(builder.mDatasets) : null;
         mSaveInfo = builder.mSaveInfo;
         mClientState = builder.mClientState;
         mPresentation = builder.mPresentation;
+        mInlinePresentation = builder.mInlinePresentation;
         mHeader = builder.mHeader;
         mFooter = builder.mFooter;
         mAuthentication = builder.mAuthentication;
@@ -106,8 +109,7 @@
         mUserData = builder.mUserData;
         mCancelIds = builder.mCancelIds;
         mSupportsInlineSuggestions = builder.mSupportsInlineSuggestions;
-        mInlineActions = (builder.mInlineActions != null) ? new ParceledListSlice<>(
-                builder.mInlineActions) : null;
+        mInlineActions = builder.mInlineActions;
     }
 
     /** @hide */
@@ -131,6 +133,11 @@
     }
 
     /** @hide */
+    public @Nullable InlinePresentation getInlinePresentation() {
+        return mInlinePresentation;
+    }
+
+    /** @hide */
     public @Nullable RemoteViews getHeader() {
         return mHeader;
     }
@@ -207,7 +214,7 @@
 
     /** @hide */
     public @Nullable List<InlinePresentation> getInlineActions() {
-        return (mInlineActions != null) ? mInlineActions.getList() : null;
+        return mInlineActions;
     }
 
     /**
@@ -219,6 +226,7 @@
         private SaveInfo mSaveInfo;
         private Bundle mClientState;
         private RemoteViews mPresentation;
+        private InlinePresentation mInlinePresentation;
         private RemoteViews mHeader;
         private RemoteViews mFooter;
         private IntentSender mAuthentication;
@@ -318,6 +326,67 @@
         }
 
         /**
+         * Triggers a custom UI before before autofilling the screen with any data set in this
+         * response.
+         *
+         * <p><b>Note:</b> Although the name of this method suggests that it should be used just for
+         * authentication flow, it can be used for other advanced flows; see {@link AutofillService}
+         * for examples.
+         *
+         * <p>This method is similar to
+         * {@link #setAuthentication(AutofillId[], IntentSender, RemoteViews)}, but also accepts
+         * an {@link InlinePresentation} presentation which is required for authenticating through
+         * the inline autofill flow.
+         *
+         * <p><b>Note:</b> {@link #setHeader(RemoteViews)} or {@link #setFooter(RemoteViews)} does
+         * not work with {@link InlinePresentation}.</p>
+         *
+         * @param authentication Intent to an activity with your authentication flow.
+         * @param presentation The presentation to visualize the response.
+         * @param inlinePresentation The inlinePresentation to visualize the response inline.
+         * @param ids id of Views that when focused will display the authentication UI.
+         *
+         * @return This builder.
+         *
+         * @throws IllegalArgumentException if any of the following occurs:
+         * <ul>
+         *   <li>{@code ids} is {@code null}</li>
+         *   <li>{@code ids} is empty</li>
+         *   <li>{@code ids} contains a {@code null} element</li>
+         *   <li>both {@code authentication} and {@code presentation} are {@code null}</li>
+         *   <li>both {@code authentication} and {@code presentation} are non-{@code null}</li>
+         *   <li>both {@code authentication} and {@code inlinePresentation} are {@code null}</li>
+         *   <li>both {@code authentication} and {@code inlinePresentation} are
+         *   non-{@code null}</li>
+         * </ul>
+         *
+         * @throws IllegalStateException if a {@link #setHeader(RemoteViews) header} or a
+         * {@link #setFooter(RemoteViews) footer} are already set for this builder.
+         *
+         * @see android.app.PendingIntent#getIntentSender()
+         */
+        @NonNull
+        public Builder setAuthentication(@NonNull AutofillId[] ids,
+                @Nullable IntentSender authentication, @Nullable RemoteViews presentation,
+                @Nullable InlinePresentation inlinePresentation) {
+            throwIfDestroyed();
+            throwIfDisableAutofillCalled();
+            if (mHeader != null || mFooter != null) {
+                throw new IllegalStateException("Already called #setHeader() or #setFooter()");
+            }
+
+            if (authentication == null ^ (presentation == null && inlinePresentation == null)) {
+                throw new IllegalArgumentException("authentication and presentation "
+                        + "(dropdown or inline), must be both non-null or null");
+            }
+            mAuthentication = authentication;
+            mPresentation = presentation;
+            mInlinePresentation = inlinePresentation;
+            mAuthenticationIds = assertValid(ids);
+            return this;
+        }
+
+        /**
          * Specifies views that should not trigger new
          * {@link AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal,
          * FillCallback)} requests.
@@ -644,6 +713,8 @@
                         break;
                     }
                 }
+            } else if (mInlinePresentation != null) {
+                mSupportsInlineSuggestions = true;
             }
 
             mDestroyed = true;
@@ -691,6 +762,9 @@
         if (mPresentation != null) {
             builder.append(", hasPresentation");
         }
+        if (mInlinePresentation != null) {
+            builder.append(", hasInlinePresentation");
+        }
         if (mHeader != null) {
             builder.append(", hasHeader");
         }
@@ -718,7 +792,7 @@
         }
         builder.append(", mSupportInlinePresentations=").append(mSupportsInlineSuggestions);
         if (mInlineActions != null) {
-            builder.append(", mInlineActions=" + mInlineActions.getList());
+            builder.append(", mInlineActions=" + mInlineActions);
         }
         return builder.append("]").toString();
     }
@@ -740,6 +814,7 @@
         parcel.writeParcelableArray(mAuthenticationIds, flags);
         parcel.writeParcelable(mAuthentication, flags);
         parcel.writeParcelable(mPresentation, flags);
+        parcel.writeParcelable(mInlinePresentation, flags);
         parcel.writeParcelable(mHeader, flags);
         parcel.writeParcelable(mFooter, flags);
         parcel.writeParcelable(mUserData, flags);
@@ -748,7 +823,7 @@
         parcel.writeParcelableArray(mFieldClassificationIds, flags);
         parcel.writeInt(mFlags);
         parcel.writeIntArray(mCancelIds);
-        parcel.writeParcelable(mInlineActions, flags);
+        parcel.writeTypedList(mInlineActions, flags);
         parcel.writeInt(mRequestId);
     }
 
@@ -774,8 +849,10 @@
                     AutofillId.class);
             final IntentSender authentication = parcel.readParcelable(null);
             final RemoteViews presentation = parcel.readParcelable(null);
+            final InlinePresentation inlinePresentation = parcel.readParcelable(null);
             if (authenticationIds != null) {
-                builder.setAuthentication(authenticationIds, authentication, presentation);
+                builder.setAuthentication(authenticationIds, authentication, presentation,
+                        inlinePresentation);
             }
             final RemoteViews header = parcel.readParcelable(null);
             if (header != null) {
@@ -804,13 +881,12 @@
             final int[] cancelIds = parcel.createIntArray();
             builder.setPresentationCancelIds(cancelIds);
 
-            final ParceledListSlice<InlinePresentation> inlineActionsSlice = parcel.readParcelable(
-                    null);
-            final List<InlinePresentation> inlineActions =
-                    (inlineActionsSlice != null) ? inlineActionsSlice.getList() : null;
-            final int inlineActionsCount = (inlineActions != null) ? inlineActions.size() : 0;
-            for (int i = 0; i < inlineActionsCount; i++) {
-                builder.addInlineAction(inlineActions.get(i));
+            final List<InlinePresentation> inlineActions = parcel.createTypedArrayList(
+                    InlinePresentation.CREATOR);
+            if (inlineActions != null) {
+                for (InlinePresentation inlineAction : inlineActions) {
+                    builder.addInlineAction(inlineAction);
+                }
             }
 
             final FillResponse response = builder.build();
diff --git a/core/java/android/service/autofill/IInlineSuggestionRenderService.aidl b/core/java/android/service/autofill/IInlineSuggestionRenderService.aidl
index decdcf5..c389b1a 100644
--- a/core/java/android/service/autofill/IInlineSuggestionRenderService.aidl
+++ b/core/java/android/service/autofill/IInlineSuggestionRenderService.aidl
@@ -16,6 +16,7 @@
 
 package android.service.autofill;
 
+import android.os.IBinder;
 import android.service.autofill.IInlineSuggestionUiCallback;
 import android.service.autofill.InlinePresentation;
 
@@ -25,6 +26,7 @@
  * @hide
  */
 oneway interface IInlineSuggestionRenderService {
-    void renderSuggestion(in IInlineSuggestionUiCallback callback, in InlinePresentation presentation,
-                     int width, int height);
+    void renderSuggestion(in IInlineSuggestionUiCallback callback,
+                          in InlinePresentation presentation, int width, int height,
+                          in IBinder hostInputToken);
 }
diff --git a/core/java/android/service/autofill/IInlineSuggestionUiCallback.aidl b/core/java/android/service/autofill/IInlineSuggestionUiCallback.aidl
index a55a2ce..210f95f 100644
--- a/core/java/android/service/autofill/IInlineSuggestionUiCallback.aidl
+++ b/core/java/android/service/autofill/IInlineSuggestionUiCallback.aidl
@@ -16,6 +16,7 @@
 
 package android.service.autofill;
 
+import android.os.IBinder;
 import android.view.SurfaceControl;
 
 /**
@@ -24,6 +25,8 @@
  * @hide
  */
 oneway interface IInlineSuggestionUiCallback {
-    void autofill();
+    void onAutofill();
     void onContent(in SurfaceControl surface);
+    void onError();
+    void onTransferTouchFocusToImeWindow(in IBinder sourceInputToken, int displayId);
 }
diff --git a/core/java/android/service/autofill/InlineSuggestionRenderService.java b/core/java/android/service/autofill/InlineSuggestionRenderService.java
index 2593aab..29069e7 100644
--- a/core/java/android/service/autofill/InlineSuggestionRenderService.java
+++ b/core/java/android/service/autofill/InlineSuggestionRenderService.java
@@ -24,11 +24,17 @@
 import android.app.Service;
 import android.app.slice.Slice;
 import android.content.Intent;
+import android.graphics.PixelFormat;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
+import android.os.RemoteException;
 import android.util.Log;
+import android.view.SurfaceControl;
+import android.view.SurfaceControlViewHost;
 import android.view.View;
+import android.view.WindowManager;
 
 /**
  * A service that renders an inline presentation given the {@link InlinePresentation} containing
@@ -55,8 +61,40 @@
     private final Handler mHandler = new Handler(Looper.getMainLooper(), null, true);
 
     private void handleRenderSuggestion(IInlineSuggestionUiCallback callback,
-            InlinePresentation presentation, int width, int height) {
-        //TODO(b/146453086): implementation in ExtService
+            InlinePresentation presentation, int width, int height, IBinder hostInputToken) {
+        if (hostInputToken == null) {
+            try {
+                callback.onError();
+            } catch (RemoteException e) {
+                Log.w(TAG, "RemoteException calling onError()");
+            }
+            return;
+        }
+        final SurfaceControlViewHost host = new SurfaceControlViewHost(this, this.getDisplay(),
+                hostInputToken);
+        final SurfaceControl surface = host.getSurfacePackage().getSurfaceControl();
+
+        final View suggestionView = onRenderSuggestion(presentation, width, height);
+
+        final InlineSuggestionRoot suggestionRoot = new InlineSuggestionRoot(this, callback);
+        suggestionRoot.addView(suggestionView);
+        suggestionRoot.setOnClickListener((v) -> {
+            try {
+                callback.onAutofill();
+            } catch (RemoteException e) {
+                Log.w(TAG, "RemoteException calling onAutofill()");
+            }
+        });
+
+        WindowManager.LayoutParams lp =
+                new WindowManager.LayoutParams(width, height,
+                        WindowManager.LayoutParams.TYPE_APPLICATION, 0, PixelFormat.TRANSPARENT);
+        host.addView(suggestionRoot, lp);
+        try {
+            callback.onContent(surface);
+        } catch (RemoteException e) {
+            Log.w(TAG, "RemoteException calling onContent(" + surface + ")");
+        }
     }
 
     @Override
@@ -66,11 +104,12 @@
             return new IInlineSuggestionRenderService.Stub() {
                 @Override
                 public void renderSuggestion(@NonNull IInlineSuggestionUiCallback callback,
-                        @NonNull InlinePresentation presentation, int width, int height) {
+                        @NonNull InlinePresentation presentation, int width, int height,
+                        @Nullable IBinder hostInputToken) {
                     mHandler.sendMessage(obtainMessage(
                             InlineSuggestionRenderService::handleRenderSuggestion,
                             InlineSuggestionRenderService.this, callback, presentation,
-                            width, height));
+                            width, height, hostInputToken));
                 }
             }.asBinder();
         }
@@ -80,6 +119,14 @@
     }
 
     /**
+     *  Returns the metadata about the renderer. Returns {@code null} if no metadata is provided.
+     */
+    @Nullable
+    public Bundle onGetInlineSuggestionsRendererInfo() {
+        return null;
+    }
+
+    /**
      * Renders the slice into a view.
      */
     @Nullable
diff --git a/core/java/android/service/autofill/InlineSuggestionRoot.java b/core/java/android/service/autofill/InlineSuggestionRoot.java
new file mode 100644
index 0000000..bdcc253
--- /dev/null
+++ b/core/java/android/service/autofill/InlineSuggestionRoot.java
@@ -0,0 +1,78 @@
+/*
+ * 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.service.autofill;
+
+import android.annotation.NonNull;
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.os.RemoteException;
+import android.util.Log;
+import android.util.MathUtils;
+import android.view.MotionEvent;
+import android.view.ViewConfiguration;
+import android.widget.FrameLayout;
+
+/**
+ * This class is the root view for an inline suggestion. It is responsible for
+ * detecting the click on the item and to also transfer input focus to the IME
+ * window if we detect the user is scrolling.
+ *
+ * @hide
+ */
+@SuppressLint("ViewConstructor")
+public class InlineSuggestionRoot extends FrameLayout {
+    private static final String TAG = "InlineSuggestionRoot";
+
+    private final @NonNull IInlineSuggestionUiCallback mCallback;
+    private final int mTouchSlop;
+
+    private float mDownX;
+    private float mDownY;
+
+    public InlineSuggestionRoot(@NonNull Context context,
+            @NonNull IInlineSuggestionUiCallback callback) {
+        super(context);
+        mCallback = callback;
+        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+        setFocusable(false);
+    }
+
+    @Override
+    @SuppressLint("ClickableViewAccessibility")
+    public boolean onTouchEvent(@NonNull MotionEvent event) {
+        switch (event.getActionMasked()) {
+            case MotionEvent.ACTION_DOWN: {
+                mDownX = event.getX();
+                mDownY = event.getY();
+            } break;
+
+            case MotionEvent.ACTION_MOVE: {
+                final float distance = MathUtils.dist(mDownX, mDownY,
+                        event.getX(), event.getY());
+                if (distance > mTouchSlop) {
+                    try {
+                        mCallback.onTransferTouchFocusToImeWindow(getViewRootImpl().getInputToken(),
+                                getContext().getDisplayId());
+                    } catch (RemoteException e) {
+                        Log.w(TAG, "RemoteException transferring touch focus to IME");
+                    }
+                }
+            } break;
+        }
+        return super.onTouchEvent(event);
+    }
+}
diff --git a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java
index 79852d3..672b501 100644
--- a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java
+++ b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java
@@ -89,6 +89,8 @@
 
     private SparseArray<AutofillProxy> mAutofillProxies;
 
+    private AutofillProxy mAutofillProxyForLastRequest;
+
     // Used for metrics / debug only
     private ComponentName mServiceComponentName;
 
@@ -158,6 +160,38 @@
     }
 
     /**
+     * The child class of the service can call this method to initiate an Autofill flow.
+     *
+     * <p> The request would be respected only if the previous augmented autofill request was
+     * made for the same {@code activityComponent} and {@code autofillId}, and the field is
+     * currently on focus.
+     *
+     * <p> The request would start a new autofill flow. It doesn't guarantee that the
+     * {@link AutofillManager} will proceed with the request.
+     *
+     * @param activityComponent the client component for which the autofill is requested for
+     * @param autofillId        the client field id for which the autofill is requested for
+     * @return true if the request makes the {@link AutofillManager} start a new Autofill flow,
+     * false otherwise.
+     */
+    public final boolean requestAutofill(@NonNull ComponentName activityComponent,
+            @NonNull AutofillId autofillId) {
+        // TODO(b/149531989): revisit this. The request should start a new autofill session
+        //  rather than reusing the existing session.
+        final AutofillProxy proxy = mAutofillProxyForLastRequest;
+        if (proxy == null || !proxy.mComponentName.equals(activityComponent)
+                || !proxy.mFocusedId.equals(autofillId)) {
+            return false;
+        }
+        try {
+            return proxy.requestAutofill();
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+        }
+        return false;
+    }
+
+    /**
      * Asks the service to handle an "augmented" autofill request.
      *
      * <p>This method is called when the "stantard" autofill service cannot handle a request, which
@@ -241,6 +275,7 @@
         } catch (RemoteException e) {
             e.rethrowFromSystemServer();
         }
+        mAutofillProxyForLastRequest = proxy;
         onFillRequest(new FillRequest(proxy, inlineSuggestionsRequest), cancellationSignal,
                 new FillController(proxy), new FillCallback(proxy));
     }
@@ -268,6 +303,7 @@
                 proxy.destroy();
             }
             mAutofillProxies.clear();
+            mAutofillProxyForLastRequest = null;
         }
     }
 
@@ -287,6 +323,7 @@
             }
         }
         mAutofillProxies = null;
+        mAutofillProxyForLastRequest = null;
     }
 
     @Override
@@ -481,6 +518,11 @@
             mClient.requestHideFillUi(mSessionId, mFocusedId);
         }
 
+
+        private boolean requestAutofill() throws RemoteException {
+            return mClient.requestAutofill(mSessionId, mFocusedId);
+        }
+
         private void update(@NonNull AutofillId focusedId, @NonNull AutofillValue focusedValue,
                 @NonNull IFillCallback callback, @NonNull CancellationSignal cancellationSignal) {
             synchronized (mLock) {
diff --git a/core/java/android/service/contentcapture/ContentCaptureService.java b/core/java/android/service/contentcapture/ContentCaptureService.java
index 707426a..cecfe24 100644
--- a/core/java/android/service/contentcapture/ContentCaptureService.java
+++ b/core/java/android/service/contentcapture/ContentCaptureService.java
@@ -339,15 +339,18 @@
      * @hide
      */
     @SystemApi
+    @TestApi
     public void onDataShareRequest(@NonNull DataShareRequest request,
             @NonNull DataShareCallback callback) {
         if (sVerbose) Log.v(TAG, "onDataShareRequest()");
     }
 
     /**
-     * Notifies the service of {@link SnapshotData snapshot data} associated with a session.
+     * Notifies the service of {@link SnapshotData snapshot data} associated with an activity.
      *
-     * @param sessionId the session's Id
+     * @param sessionId the session's Id. This may also be
+     *                  {@link ContentCaptureSession#NO_SESSION_ID} if no content capture session
+     *                  exists for the activity being snapshotted
      * @param snapshotData the data
      */
     public void onActivitySnapshot(@NonNull ContentCaptureSessionId sessionId,
diff --git a/core/java/android/service/contentcapture/DataShareCallback.java b/core/java/android/service/contentcapture/DataShareCallback.java
index e3c7bb3..5df8a4b 100644
--- a/core/java/android/service/contentcapture/DataShareCallback.java
+++ b/core/java/android/service/contentcapture/DataShareCallback.java
@@ -19,6 +19,7 @@
 import android.annotation.CallbackExecutor;
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
+import android.annotation.TestApi;
 
 import java.util.concurrent.Executor;
 
@@ -32,6 +33,7 @@
  * @hide
  **/
 @SystemApi
+@TestApi
 public interface DataShareCallback {
 
     /** Accept the data share.
diff --git a/core/java/android/service/contentcapture/DataShareReadAdapter.java b/core/java/android/service/contentcapture/DataShareReadAdapter.java
index b9fce68..a481ec8 100644
--- a/core/java/android/service/contentcapture/DataShareReadAdapter.java
+++ b/core/java/android/service/contentcapture/DataShareReadAdapter.java
@@ -18,6 +18,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
+import android.annotation.TestApi;
 import android.os.ParcelFileDescriptor;
 
 /**
@@ -27,6 +28,7 @@
  * @hide
  **/
 @SystemApi
+@TestApi
 public interface DataShareReadAdapter {
 
     /**
diff --git a/core/java/android/service/controls/ControlsProviderService.java b/core/java/android/service/controls/ControlsProviderService.java
index bc65818..cb20db9 100644
--- a/core/java/android/service/controls/ControlsProviderService.java
+++ b/core/java/android/service/controls/ControlsProviderService.java
@@ -16,6 +16,7 @@
 package android.service.controls;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.app.Service;
@@ -34,7 +35,7 @@
 
 import com.android.internal.util.Preconditions;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.Flow.Publisher;
 import java.util.concurrent.Flow.Subscriber;
@@ -69,13 +70,48 @@
      * Retrieve all available controls, using the stateless builder
      * {@link Control.StatelessBuilder} to build each Control, then use the
      * provided consumer to callback to the call originator.
+     *
+     * @deprecated Removing consumer-based load apis. Use publisherForAllAvailable() instead
      */
-    public abstract void loadAvailableControls(@NonNull Consumer<List<Control>> consumer);
+    @Deprecated
+    public void loadAvailableControls(@NonNull Consumer<List<Control>> consumer) {
+        // pending removal
+        consumer.accept(Collections.emptyList());
+    }
 
     /**
-     * Return a valid Publisher for the given controlIds. This publisher will be asked
-     * to provide updates for the given list of controlIds as long as the Subscription
-     * is valid.
+     * Publisher for all available controls
+     *
+     * Retrieve all available controls. Use the stateless builder {@link Control.StatelessBuilder}
+     * to build each Control. Call {@link Subscriber#onComplete} when done loading all unique
+     * controls, or {@link Subscriber#onError} for error scenarios. Duplicate Controls will
+     * replace the original.
+     */
+    @Nullable
+    public Publisher<Control> publisherForAllAvailable() {
+        // will be abstract and @nonnull when consumers are removed
+        return null;
+    }
+
+    /**
+     * (Optional) Publisher for suggested controls
+     *
+     * The service may be asked to provide a small number of recommended controls, in
+     * order to suggest some controls to the user for favoriting. The controls shall be built using
+     * the stateless builder {@link Control.StatelessBuilder}. The number of controls requested
+     * through {@link Subscription#request} will be limited. Call {@link Subscriber#onComplete}
+     * when done, or {@link Subscriber#onError} for error scenarios.
+     */
+    @Nullable
+    public Publisher<Control> publisherForSuggested() {
+        return null;
+    }
+
+    /**
+     * Return a valid Publisher for the given controlIds. This publisher will be asked to provide
+     * updates for the given list of controlIds as long as the {@link Subscription} is valid.
+     * Calls to {@link Subscriber#onComplete} will not be expected. Instead, wait for the call from
+     * {@link Subscription#cancel} to indicate that updates are no longer required.
      */
     @NonNull
     public abstract Publisher<Control> publisherFor(@NonNull List<String> controlIds);
@@ -100,8 +136,13 @@
         mToken = bundle.getBinder(CALLBACK_TOKEN);
 
         return new IControlsProvider.Stub() {
-            public void load(IControlsLoadCallback cb) {
-                mHandler.obtainMessage(RequestHandler.MSG_LOAD, cb).sendToTarget();
+            public void load(IControlsSubscriber subscriber) {
+                mHandler.obtainMessage(RequestHandler.MSG_LOAD, subscriber).sendToTarget();
+            }
+
+            public void loadSuggested(IControlsSubscriber subscriber) {
+                mHandler.obtainMessage(RequestHandler.MSG_LOAD_SUGGESTED, subscriber)
+                        .sendToTarget();
             }
 
             public void subscribe(List<String> controlIds,
@@ -128,6 +169,7 @@
         private static final int MSG_LOAD = 1;
         private static final int MSG_SUBSCRIBE = 2;
         private static final int MSG_ACTION = 3;
+        private static final int MSG_LOAD_SUGGESTED = 4;
 
         RequestHandler(Looper looper) {
             super(looper);
@@ -135,53 +177,50 @@
 
         public void handleMessage(Message msg) {
             switch(msg.what) {
-                case MSG_LOAD:
-                    final IControlsLoadCallback cb = (IControlsLoadCallback) msg.obj;
-                    ControlsProviderService.this.loadAvailableControls(consumerFor(cb));
-                    break;
+                case MSG_LOAD: {
+                    final IControlsSubscriber cs = (IControlsSubscriber) msg.obj;
+                    final SubscriberProxy proxy = new SubscriberProxy(true, mToken, cs);
 
-                case MSG_SUBSCRIBE:
+                    Publisher<Control> publisher =
+                            ControlsProviderService.this.publisherForAllAvailable();
+                    if (publisher == null) {
+                        ControlsProviderService.this.loadAvailableControls(consumerFor(proxy));
+                    } else {
+                        publisher.subscribe(proxy);
+                    }
+                    break;
+                }
+
+                case MSG_LOAD_SUGGESTED: {
+                    final IControlsSubscriber cs = (IControlsSubscriber) msg.obj;
+                    final SubscriberProxy proxy = new SubscriberProxy(true, mToken, cs);
+
+                    Publisher<Control> publisher =
+                            ControlsProviderService.this.publisherForSuggested();
+                    if (publisher == null) {
+                        Log.i(TAG, "No publisher provided for suggested controls");
+                        proxy.onComplete();
+                    } else {
+                        publisher.subscribe(proxy);
+                    }
+                    break;
+                }
+
+                case MSG_SUBSCRIBE: {
                     final SubscribeMessage sMsg = (SubscribeMessage) msg.obj;
-                    final IControlsSubscriber cs = sMsg.mSubscriber;
-                    Subscriber<Control> s = new Subscriber<Control>() {
-                            public void onSubscribe(Subscription subscription) {
-                                try {
-                                    cs.onSubscribe(mToken, new SubscriptionAdapter(subscription));
-                                } catch (RemoteException ex) {
-                                    ex.rethrowAsRuntimeException();
-                                }
-                            }
-                            public void onNext(@NonNull Control statefulControl) {
-                                Preconditions.checkNotNull(statefulControl);
-                                try {
-                                    cs.onNext(mToken, statefulControl);
-                                } catch (RemoteException ex) {
-                                    ex.rethrowAsRuntimeException();
-                                }
-                            }
-                            public void onError(Throwable t) {
-                                try {
-                                    cs.onError(mToken, t.toString());
-                                } catch (RemoteException ex) {
-                                    ex.rethrowAsRuntimeException();
-                                }
-                            }
-                            public void onComplete() {
-                                try {
-                                    cs.onComplete(mToken);
-                                } catch (RemoteException ex) {
-                                    ex.rethrowAsRuntimeException();
-                                }
-                            }
-                        };
-                    ControlsProviderService.this.publisherFor(sMsg.mControlIds).subscribe(s);
-                    break;
+                    final SubscriberProxy proxy = new SubscriberProxy(false, mToken,
+                            sMsg.mSubscriber);
 
-                case MSG_ACTION:
+                    ControlsProviderService.this.publisherFor(sMsg.mControlIds).subscribe(proxy);
+                    break;
+                }
+
+                case MSG_ACTION: {
                     final ActionMessage aMsg = (ActionMessage) msg.obj;
                     ControlsProviderService.this.performControlAction(aMsg.mControlId,
                             aMsg.mAction, consumerFor(aMsg.mControlId, aMsg.mCb));
                     break;
+                }
             }
         }
 
@@ -201,33 +240,88 @@
             };
         }
 
-        private Consumer<List<Control>> consumerFor(IControlsLoadCallback cb) {
-            return (@NonNull List<Control> controls) -> {
+        /**
+         * Method will be removed during migration to publisher
+         */
+        private Consumer<List<Control>> consumerFor(final Subscriber<Control> subscriber) {
+            return (@NonNull final List<Control> controls) -> {
                 Preconditions.checkNotNull(controls);
-                List<Control> list = new ArrayList<>();
-                for (Control control: controls) {
-                    if (control == null) {
-                        Log.e(TAG, "onLoad: null control.");
-                    }
-                    if (isStatelessControl(control)) {
-                        list.add(control);
-                    } else {
-                        Log.w(TAG, "onLoad: control is not stateless.");
-                        list.add(new Control.StatelessBuilder(control).build());
-                    }
-                }
-                try {
-                    cb.accept(mToken, list);
-                } catch (RemoteException ex) {
-                    ex.rethrowAsRuntimeException();
-                }
+
+                subscriber.onSubscribe(new Subscription() {
+                        public void request(long n) {
+                            for (Control control: controls) {
+                                Control c;
+                                if (control == null) {
+                                    Log.e(TAG, "onLoad: null control.");
+                                }
+                                if (isStatelessControl(control)) {
+                                    c = control;
+                                } else {
+                                    Log.w(TAG, "onLoad: control is not stateless.");
+                                    c = new Control.StatelessBuilder(control).build();
+                                }
+
+                                subscriber.onNext(c);
+                            }
+                            subscriber.onComplete();
+                        }
+
+                        public void cancel() {}
+                    });
             };
         }
+    }
 
-        private boolean isStatelessControl(Control control) {
-            return (control.getStatus() == Control.STATUS_UNKNOWN
-                    && control.getControlTemplate().getTemplateType() == ControlTemplate.TYPE_NONE
-                    && TextUtils.isEmpty(control.getStatusText()));
+    private static boolean isStatelessControl(Control control) {
+        return (control.getStatus() == Control.STATUS_UNKNOWN
+                && control.getControlTemplate().getTemplateType() == ControlTemplate.TYPE_NONE
+                && TextUtils.isEmpty(control.getStatusText()));
+    }
+
+    private static class SubscriberProxy implements Subscriber<Control> {
+        private IBinder mToken;
+        private IControlsSubscriber mCs;
+        private boolean mEnforceStateless;
+
+        SubscriberProxy(boolean enforceStateless, IBinder token, IControlsSubscriber cs) {
+            mEnforceStateless = enforceStateless;
+            mToken = token;
+            mCs = cs;
+        }
+
+        public void onSubscribe(Subscription subscription) {
+            try {
+                mCs.onSubscribe(mToken, new SubscriptionAdapter(subscription));
+            } catch (RemoteException ex) {
+                ex.rethrowAsRuntimeException();
+            }
+        }
+        public void onNext(@NonNull Control control) {
+            Preconditions.checkNotNull(control);
+            try {
+                if (mEnforceStateless && !isStatelessControl(control)) {
+                    Log.w(TAG, "onNext(): control is not stateless. Use the "
+                            + "Control.StatelessBuilder() to build the control.");
+                    control = new Control.StatelessBuilder(control).build();
+                }
+                mCs.onNext(mToken, control);
+            } catch (RemoteException ex) {
+                ex.rethrowAsRuntimeException();
+            }
+        }
+        public void onError(Throwable t) {
+            try {
+                mCs.onError(mToken, t.toString());
+            } catch (RemoteException ex) {
+                ex.rethrowAsRuntimeException();
+            }
+        }
+        public void onComplete() {
+            try {
+                mCs.onComplete(mToken);
+            } catch (RemoteException ex) {
+                ex.rethrowAsRuntimeException();
+            }
         }
     }
 
diff --git a/core/java/android/service/controls/IControlsLoadCallback.aidl b/core/java/android/service/controls/IControlsLoadCallback.aidl
deleted file mode 100644
index bfc61cd..0000000
--- a/core/java/android/service/controls/IControlsLoadCallback.aidl
+++ /dev/null
@@ -1,26 +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.service.controls;
-
-import android.service.controls.Control;
-
-/**
- * @hide
- */
-oneway interface IControlsLoadCallback {
-    void accept(in IBinder token, in List<Control> controls);
-}
\ No newline at end of file
diff --git a/core/java/android/service/controls/IControlsProvider.aidl b/core/java/android/service/controls/IControlsProvider.aidl
index 4ce658e..0cb06b4 100644
--- a/core/java/android/service/controls/IControlsProvider.aidl
+++ b/core/java/android/service/controls/IControlsProvider.aidl
@@ -17,7 +17,6 @@
 package android.service.controls;
 
 import android.service.controls.IControlsActionCallback;
-import android.service.controls.IControlsLoadCallback;
 import android.service.controls.IControlsSubscriber;
 import android.service.controls.actions.ControlActionWrapper;
 
@@ -25,7 +24,9 @@
  * @hide
  */
 oneway interface IControlsProvider {
-    void load(IControlsLoadCallback cb);
+    void load(IControlsSubscriber subscriber);
+
+    void loadSuggested(IControlsSubscriber subscriber);
 
     void subscribe(in List<String> controlIds,
              IControlsSubscriber subscriber);
diff --git a/core/java/android/service/controls/templates/ControlTemplate.java b/core/java/android/service/controls/templates/ControlTemplate.java
index d2c0f76..a5156e3 100644
--- a/core/java/android/service/controls/templates/ControlTemplate.java
+++ b/core/java/android/service/controls/templates/ControlTemplate.java
@@ -74,8 +74,6 @@
             TYPE_TOGGLE,
             TYPE_RANGE,
             TYPE_THUMBNAIL,
-            TYPE_DISCRETE_TOGGLE,
-            TYPE_COORD_RANGE,
             TYPE_TOGGLE_RANGE,
             TYPE_TEMPERATURE,
             TYPE_STATELESS
@@ -104,16 +102,6 @@
      */
     public static final @TemplateType int TYPE_THUMBNAIL = 3;
 
-    /**
-     * Type identifier of {@link DiscreteToggleTemplate}.
-     */
-    public static final @TemplateType int TYPE_DISCRETE_TOGGLE = 4;
-
-    /**
-     * @hide
-     */
-    public static final @TemplateType int TYPE_COORD_RANGE = 5;
-
     public static final @TemplateType int TYPE_TOGGLE_RANGE = 6;
 
     public static final @TemplateType int TYPE_TEMPERATURE = 7;
@@ -190,10 +178,6 @@
                     return new RangeTemplate(bundle);
                 case TYPE_THUMBNAIL:
                     return new ThumbnailTemplate(bundle);
-                case TYPE_DISCRETE_TOGGLE:
-                    return new DiscreteToggleTemplate(bundle);
-                case TYPE_COORD_RANGE:
-                    return new CoordinatedRangeTemplate(bundle);
                 case TYPE_TOGGLE_RANGE:
                     return new ToggleRangeTemplate(bundle);
                 case TYPE_TEMPERATURE:
diff --git a/core/java/android/service/controls/templates/CoordinatedRangeTemplate.java b/core/java/android/service/controls/templates/CoordinatedRangeTemplate.java
deleted file mode 100644
index 6aa5480..0000000
--- a/core/java/android/service/controls/templates/CoordinatedRangeTemplate.java
+++ /dev/null
@@ -1,168 +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.service.controls.templates;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.os.Bundle;
-import android.util.Log;
-
-public final class CoordinatedRangeTemplate extends ControlTemplate {
-
-    private static final String TAG = "CoordinatedRangeTemplate";
-
-    private static final @TemplateType int TYPE = TYPE_COORD_RANGE;
-    private static final String KEY_RANGE_LOW = "key_range_low";
-    private static final String KEY_RANGE_HIGH = "key_range_high";
-    private static final String KEY_MIN_GAP = "key_min_gap";
-
-    private final @NonNull RangeTemplate mRangeLow;
-    private final @NonNull RangeTemplate mRangeHigh;
-    private final float mMinGap;
-
-    public CoordinatedRangeTemplate(
-            @NonNull String templateId,
-            float minGap,
-            @NonNull RangeTemplate rangeLow,
-            @NonNull RangeTemplate rangeHigh) {
-        super(templateId);
-        mRangeLow = rangeLow;
-        mRangeHigh = rangeHigh;
-        if (minGap < 0) {
-            Log.e(TAG, "minGap must be non-negative. Setting to 0");
-            mMinGap = 0;
-        } else {
-            mMinGap = minGap;
-        }
-        validateRanges();
-    }
-
-    public CoordinatedRangeTemplate(
-            @NonNull String templateId,
-            float minGap,
-            float minValueLow,
-            float maxValueLow,
-            float currentValueLow,
-            float minValueHigh,
-            float maxValueHigh,
-            float currentValueHigh,
-            float stepValue,
-            @Nullable CharSequence formatString) {
-        this(templateId,
-                minGap,
-            new RangeTemplate("",
-                minValueLow, maxValueLow, currentValueLow, stepValue, formatString),
-            new RangeTemplate("",
-                minValueHigh, maxValueHigh, currentValueHigh, stepValue, formatString));
-    }
-
-    /**
-     * @param b
-     * @hide
-     */
-    CoordinatedRangeTemplate(Bundle b) {
-        super(b);
-        mRangeLow = new RangeTemplate(b.getBundle(KEY_RANGE_LOW));
-        mRangeHigh = new RangeTemplate(b.getBundle(KEY_RANGE_HIGH));
-        mMinGap = b.getFloat(KEY_MIN_GAP);
-        validateRanges();
-    }
-
-    @NonNull
-    public RangeTemplate getRangeLow() {
-        return mRangeLow;
-    }
-
-    @NonNull
-    public RangeTemplate getRangeHigh() {
-        return mRangeHigh;
-    }
-
-    public float getMinValueLow() {
-        return mRangeLow.getMinValue();
-    }
-
-    public float getMaxValueLow() {
-        return mRangeLow.getMaxValue();
-    }
-
-    public float getCurrentValueLow() {
-        return mRangeLow.getCurrentValue();
-    }
-
-    public float getMinValueHigh() {
-        return mRangeHigh.getMinValue();
-    }
-
-    public float getMaxValueHigh() {
-        return mRangeHigh.getMaxValue();
-    }
-
-    public float getCurrentValueHigh() {
-        return mRangeHigh.getCurrentValue();
-    }
-
-    public float getStepValue() {
-        return mRangeLow.getStepValue();
-    }
-
-    public float getMinGap() {
-        return mMinGap;
-    }
-
-    @NonNull
-    public CharSequence getFormatString() {
-        return mRangeLow.getFormatString();
-    }
-
-    @Override
-    public int getTemplateType() {
-        return TYPE;
-    }
-
-    /**
-     * @return
-     * @hide
-     */
-    @Override
-    @NonNull
-    Bundle getDataBundle() {
-        Bundle b = super.getDataBundle();
-        b.putBundle(KEY_RANGE_LOW, mRangeLow.getDataBundle());
-        b.putBundle(KEY_RANGE_HIGH, mRangeHigh.getDataBundle());
-        return b;
-    }
-
-    private void validateRanges() {
-        if (Float.compare(mRangeLow.getStepValue(), mRangeHigh.getStepValue()) != 0) {
-            throw new IllegalArgumentException(
-                    String.format("lowStepValue=%f != highStepValue=%f",
-                            mRangeLow.getStepValue(), mRangeHigh.getStepValue()));
-        }
-        if (!mRangeLow.getFormatString().equals(mRangeHigh.getFormatString())) {
-            throw new IllegalArgumentException(
-                    String.format("lowFormatString=%s != highFormatString=%s",
-                            mRangeLow.getFormatString(), mRangeHigh.getFormatString()));
-        }
-        if (mMinGap > mRangeHigh.getCurrentValue() - mRangeLow.getCurrentValue()) {
-            throw new IllegalArgumentException(
-                    String.format("Minimum gap (%f) > Current gap (%f)", mMinGap,
-                            mRangeHigh.getCurrentValue() - mRangeLow.getCurrentValue()));
-        }
-    }
-
-}
diff --git a/core/java/android/service/controls/templates/DiscreteToggleTemplate.java b/core/java/android/service/controls/templates/DiscreteToggleTemplate.java
deleted file mode 100644
index 7a1331a..0000000
--- a/core/java/android/service/controls/templates/DiscreteToggleTemplate.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 android.service.controls.templates;
-
-import android.annotation.NonNull;
-import android.os.Bundle;
-import android.service.controls.Control;
-import android.service.controls.actions.BooleanAction;
-
-import com.android.internal.util.Preconditions;
-
-/**
- * A template for a {@link Control} with two discrete inputs.
- *
- * The two inputs represent a <i>Negative</i> input and a <i>Positive</i> input.
- * <p>
- * When one of the buttons is actioned, a {@link BooleanAction} will be sent.
- * {@link BooleanAction#getNewState} will be {@code false} if the button was
- * {@link DiscreteToggleTemplate#getNegativeButton} and {@code true} if the button was
- * {@link DiscreteToggleTemplate#getPositiveButton}.
- */
-public final class DiscreteToggleTemplate extends ControlTemplate {
-
-    private static final @TemplateType int TYPE = TYPE_DISCRETE_TOGGLE;
-    private static final String KEY_NEGATIVE_BUTTON = "key_negative_button";
-    private static final String KEY_POSITIVE_BUTTON = "key_positive_button";
-
-    private final @NonNull ControlButton mPositiveButton;
-    private final @NonNull ControlButton mNegativeButton;
-
-    /**
-     * @param templateId the identifier for this template object
-     * @param negativeButton a {@link ControlButton} for the <i>Negative</i> input
-     * @param positiveButton a {@link ControlButton} for the <i>Positive</i> input
-     */
-    public DiscreteToggleTemplate(@NonNull String templateId,
-            @NonNull ControlButton negativeButton,
-            @NonNull ControlButton positiveButton) {
-        super(templateId);
-        Preconditions.checkNotNull(negativeButton);
-        Preconditions.checkNotNull(positiveButton);
-        mNegativeButton = negativeButton;
-        mPositiveButton = positiveButton;
-    }
-
-    /**
-     * @param b
-     * @hide
-     */
-    DiscreteToggleTemplate(Bundle b) {
-        super(b);
-        mNegativeButton = b.getParcelable(KEY_NEGATIVE_BUTTON);
-        mPositiveButton = b.getParcelable(KEY_POSITIVE_BUTTON);
-    }
-
-    /**
-     * The {@link ControlButton} associated with the <i>Negative</i> action.
-     */
-    @NonNull
-    public ControlButton getNegativeButton() {
-        return mNegativeButton;
-    }
-
-    /**
-     * The {@link ControlButton} associated with the <i>Positive</i> action.
-     */
-    @NonNull
-    public ControlButton getPositiveButton() {
-        return mPositiveButton;
-    }
-
-    /**
-     * @return {@link ControlTemplate#TYPE_DISCRETE_TOGGLE}
-     */
-    @Override
-    public int getTemplateType() {
-        return TYPE;
-    }
-
-    /**
-     * @return
-     * @hide
-     */
-    @Override
-    @NonNull
-    Bundle getDataBundle() {
-        Bundle b = super.getDataBundle();
-        b.putParcelable(KEY_NEGATIVE_BUTTON, mNegativeButton);
-        b.putParcelable(KEY_POSITIVE_BUTTON, mPositiveButton);
-        return b;
-    }
-
-}
diff --git a/core/java/android/service/dataloader/DataLoaderService.java b/core/java/android/service/dataloader/DataLoaderService.java
index c215778..4190001 100644
--- a/core/java/android/service/dataloader/DataLoaderService.java
+++ b/core/java/android/service/dataloader/DataLoaderService.java
@@ -90,7 +90,7 @@
      * @hide
      */
     @SystemApi
-    public @Nullable DataLoader onCreateDataLoader() {
+    public @Nullable DataLoader onCreateDataLoader(@NonNull DataLoaderParams dataLoaderParams) {
         return null;
     }
 
@@ -240,7 +240,7 @@
     private native boolean nativeDestroyDataLoader(int storageId);
 
     private native boolean nativePrepareImage(int storageId,
-            Collection<InstallationFile> addedFiles, Collection<String> removedFiles);
+            List<InstallationFile> addedFiles, List<String> removedFiles);
 
     private static native void nativeWriteData(long nativeInstance, String name, long offsetBytes,
             long lengthBytes, ParcelFileDescriptor incomingFd);
diff --git a/core/java/android/service/notification/ConditionProviderService.java b/core/java/android/service/notification/ConditionProviderService.java
index 7d3b13b..f37e01d 100644
--- a/core/java/android/service/notification/ConditionProviderService.java
+++ b/core/java/android/service/notification/ConditionProviderService.java
@@ -58,7 +58,7 @@
  * &lt;/service></pre>
  *
  *  <p> Condition providers cannot be bound by the system on
- * {@link ActivityManager#isLowRamDevice() low ram} devices</p>
+ * {@link ActivityManager#isLowRamDevice() low ram} devices running Android Q (and below)</p>
  *
  * @deprecated Instead of using an automatically bound service, use
  * {@link android.app.NotificationManager#setAutomaticZenRuleState(String, Condition)} to tell the
diff --git a/core/java/android/service/notification/ConversationChannelWrapper.aidl b/core/java/android/service/notification/ConversationChannelWrapper.aidl
new file mode 100644
index 0000000..f324158
--- /dev/null
+++ b/core/java/android/service/notification/ConversationChannelWrapper.aidl
@@ -0,0 +1,19 @@
+/*
+ * 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.service.notification;
+
+parcelable ConversationChannelWrapper;
\ No newline at end of file
diff --git a/core/java/android/service/notification/ConversationChannelWrapper.java b/core/java/android/service/notification/ConversationChannelWrapper.java
new file mode 100644
index 0000000..ab465ab
--- /dev/null
+++ b/core/java/android/service/notification/ConversationChannelWrapper.java
@@ -0,0 +1,146 @@
+/**
+ * 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.service.notification;
+
+import android.app.NotificationChannel;
+import android.content.pm.ShortcutInfo;
+import android.graphics.drawable.Drawable;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+
+/**
+ * @hide
+ */
+public final class ConversationChannelWrapper implements Parcelable {
+
+    private NotificationChannel mNotificationChannel;
+    private CharSequence mGroupLabel;
+    private CharSequence mParentChannelLabel;
+    private ShortcutInfo mShortcutInfo;
+    private String mPkg;
+    private int mUid;
+
+    public ConversationChannelWrapper() {}
+
+    protected ConversationChannelWrapper(Parcel in) {
+        mNotificationChannel = in.readParcelable(NotificationChannel.class.getClassLoader());
+        mGroupLabel = in.readCharSequence();
+        mParentChannelLabel = in.readCharSequence();
+        mShortcutInfo = in.readParcelable(ShortcutInfo.class.getClassLoader());
+        mPkg = in.readStringNoHelper();
+        mUid = in.readInt();
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeParcelable(mNotificationChannel, flags);
+        dest.writeCharSequence(mGroupLabel);
+        dest.writeCharSequence(mParentChannelLabel);
+        dest.writeParcelable(mShortcutInfo, flags);
+        dest.writeStringNoHelper(mPkg);
+        dest.writeInt(mUid);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public static final Creator<ConversationChannelWrapper> CREATOR =
+            new Creator<ConversationChannelWrapper>() {
+                @Override
+                public ConversationChannelWrapper createFromParcel(Parcel in) {
+                    return new ConversationChannelWrapper(in);
+                }
+
+                @Override
+                public ConversationChannelWrapper[] newArray(int size) {
+                    return new ConversationChannelWrapper[size];
+                }
+            };
+
+
+    public NotificationChannel getNotificationChannel() {
+        return mNotificationChannel;
+    }
+
+    public void setNotificationChannel(
+            NotificationChannel notificationChannel) {
+        mNotificationChannel = notificationChannel;
+    }
+
+    public CharSequence getGroupLabel() {
+        return mGroupLabel;
+    }
+
+    public void setGroupLabel(CharSequence groupLabel) {
+        mGroupLabel = groupLabel;
+    }
+
+    public CharSequence getParentChannelLabel() {
+        return mParentChannelLabel;
+    }
+
+    public void setParentChannelLabel(CharSequence parentChannelLabel) {
+        mParentChannelLabel = parentChannelLabel;
+    }
+
+    public ShortcutInfo getShortcutInfo() {
+        return mShortcutInfo;
+    }
+
+    public void setShortcutInfo(ShortcutInfo shortcutInfo) {
+        mShortcutInfo = shortcutInfo;
+    }
+
+    public String getPkg() {
+        return mPkg;
+    }
+
+    public void setPkg(String pkg) {
+        mPkg = pkg;
+    }
+
+    public int getUid() {
+        return mUid;
+    }
+
+    public void setUid(int uid) {
+        mUid = uid;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        ConversationChannelWrapper that = (ConversationChannelWrapper) o;
+        return Objects.equals(getNotificationChannel(), that.getNotificationChannel()) &&
+                Objects.equals(getGroupLabel(), that.getGroupLabel()) &&
+                Objects.equals(getParentChannelLabel(), that.getParentChannelLabel()) &&
+                Objects.equals(getShortcutInfo(), that.getShortcutInfo()) &&
+                Objects.equals(getPkg(), that.getPkg()) &&
+                getUid() == that.getUid();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(getNotificationChannel(), getGroupLabel(), getParentChannelLabel(),
+                getShortcutInfo(), getPkg(), getUid());
+    }
+}
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index e053ed5..6562572 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -86,8 +86,8 @@
  * or after {@link #onListenerDisconnected()}.
  * </p>
  * <p> Notification listeners cannot get notification access or be bound by the system on
- * {@linkplain ActivityManager#isLowRamDevice() low-RAM} devices. The system also ignores
- * notification listeners running in a work profile. A
+ * {@linkplain ActivityManager#isLowRamDevice() low-RAM} devices running Android Q (and below).
+ * The system also ignores notification listeners running in a work profile. A
  * {@link android.app.admin.DevicePolicyManager} might block notifications originating from a work
  * profile.</p>
  * <p>
@@ -214,6 +214,32 @@
     public static final int REASON_TIMEOUT = 19;
 
     /**
+     * @hide
+     */
+    @IntDef(prefix = "REASON_", value = {
+            REASON_CLICK,
+            REASON_CANCEL,
+            REASON_CANCEL_ALL,
+            REASON_ERROR,
+            REASON_PACKAGE_CHANGED,
+            REASON_USER_STOPPED,
+            REASON_PACKAGE_BANNED,
+            REASON_APP_CANCEL,
+            REASON_APP_CANCEL_ALL,
+            REASON_LISTENER_CANCEL,
+            REASON_LISTENER_CANCEL_ALL,
+            REASON_GROUP_SUMMARY_CANCELED,
+            REASON_GROUP_OPTIMIZATION,
+            REASON_PACKAGE_SUSPENDED,
+            REASON_PROFILE_TURNED_OFF,
+            REASON_UNAUTOBUNDLED,
+            REASON_CHANNEL_BANNED,
+            REASON_SNOOZED,
+            REASON_TIMEOUT
+    })
+    public @interface NotificationCancelReason{};
+
+    /**
      * The full trim of the StatusBarNotification including all its features.
      *
      * @hide
diff --git a/core/java/android/service/quickaccesswallet/GetWalletCardsCallback.java b/core/java/android/service/quickaccesswallet/GetWalletCardsCallback.java
index 9d210cd..f6a86d9 100644
--- a/core/java/android/service/quickaccesswallet/GetWalletCardsCallback.java
+++ b/core/java/android/service/quickaccesswallet/GetWalletCardsCallback.java
@@ -17,28 +17,11 @@
 package android.service.quickaccesswallet;
 
 import android.annotation.NonNull;
-import android.os.Handler;
-import android.os.RemoteException;
-import android.util.Log;
 
 /**
  * Handles response from the {@link QuickAccessWalletService} for {@link GetWalletCardsRequest}
  */
-public final class GetWalletCardsCallback {
-
-    private static final String TAG = "QAWalletCallback";
-
-    private final IQuickAccessWalletServiceCallbacks mCallback;
-    private final Handler mHandler;
-    private boolean mCalled;
-
-    /**
-     * @hide
-     */
-    GetWalletCardsCallback(IQuickAccessWalletServiceCallbacks callback, Handler handler) {
-        mCallback = callback;
-        mHandler = handler;
-    }
+public interface GetWalletCardsCallback {
 
     /**
      * Notifies the Android System that an {@link QuickAccessWalletService#onWalletCardsRequested}
@@ -46,11 +29,10 @@
      *
      * @param response The response contains the list of {@link WalletCard walletCards} to be shown
      *                 to the user as well as the index of the card that should initially be
-     *                 presented as the selected card.
+     *                 presented as the selected card. The list should not contain more than the
+     *                 maximum number of cards requested.
      */
-    public void onSuccess(@NonNull GetWalletCardsResponse response) {
-        mHandler.post(() -> onSuccessInternal(response));
-    }
+    void onSuccess(@NonNull GetWalletCardsResponse response);
 
     /**
      * Notifies the Android System that an {@link QuickAccessWalletService#onWalletCardsRequested}
@@ -60,33 +42,5 @@
      *              (Personally Identifiable Information, such as username or email address).
      * @throws IllegalStateException if this method or {@link #onSuccess} was already called.
      */
-    public void onFailure(@NonNull GetWalletCardsError error) {
-        mHandler.post(() -> onFailureInternal(error));
-    }
-
-    private void onSuccessInternal(GetWalletCardsResponse response) {
-        if (mCalled) {
-            Log.w(TAG, "already called");
-            return;
-        }
-        mCalled = true;
-        try {
-            mCallback.onGetWalletCardsSuccess(response);
-        } catch (RemoteException e) {
-            Log.e(TAG, "Error returning wallet cards", e);
-        }
-    }
-
-    private void onFailureInternal(GetWalletCardsError error) {
-        if (mCalled) {
-            Log.w(TAG, "already called");
-            return;
-        }
-        mCalled = true;
-        try {
-            mCallback.onGetWalletCardsFailure(error);
-        } catch (RemoteException e) {
-            Log.e(TAG, "Error returning failure message", e);
-        }
-    }
+    void onFailure(@NonNull GetWalletCardsError error);
 }
diff --git a/core/java/android/service/quickaccesswallet/GetWalletCardsCallbackImpl.java b/core/java/android/service/quickaccesswallet/GetWalletCardsCallbackImpl.java
new file mode 100644
index 0000000..d2494a5
--- /dev/null
+++ b/core/java/android/service/quickaccesswallet/GetWalletCardsCallbackImpl.java
@@ -0,0 +1,136 @@
+/*
+ * 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.service.quickaccesswallet;
+
+import android.annotation.NonNull;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Icon;
+import android.os.Handler;
+import android.os.RemoteException;
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.util.List;
+
+/**
+ * Handles response from the {@link QuickAccessWalletService} for {@link GetWalletCardsRequest}
+ *
+ * @hide
+ */
+final class GetWalletCardsCallbackImpl implements GetWalletCardsCallback {
+
+    private static final String TAG = "QAWalletCallback";
+
+    private final IQuickAccessWalletServiceCallbacks mCallback;
+    private final GetWalletCardsRequest mRequest;
+    private final Handler mHandler;
+    private boolean mCalled;
+
+    GetWalletCardsCallbackImpl(GetWalletCardsRequest request,
+            IQuickAccessWalletServiceCallbacks callback, Handler handler) {
+        mRequest = request;
+        mCallback = callback;
+        mHandler = handler;
+    }
+
+    /**
+     * Notifies the Android System that an {@link QuickAccessWalletService#onWalletCardsRequested}
+     * was successfully handled by the service.
+     *
+     * @param response The response contains the list of {@link WalletCard walletCards} to be shown
+     *                 to the user as well as the index of the card that should initially be
+     *                 presented as the selected card.
+     */
+    public void onSuccess(@NonNull GetWalletCardsResponse response) {
+        Log.i(TAG, "onSuccess");
+        if (isValidResponse(response)) {
+            mHandler.post(() -> onSuccessInternal(response));
+        } else {
+            Log.w(TAG, "Invalid GetWalletCards response");
+            mHandler.post(() -> onFailureInternal(new GetWalletCardsError(null, null)));
+        }
+    }
+
+    /**
+     * Notifies the Android System that an {@link QuickAccessWalletService#onWalletCardsRequested}
+     * could not be handled by the service.
+     *
+     * @param error The error message. <b>Note: </b> this message should <b>not</b> contain PII
+     *              (Personally Identifiable Information, such as username or email address).
+     * @throws IllegalStateException if this method or {@link #onSuccess} was already called.
+     */
+    public void onFailure(@NonNull GetWalletCardsError error) {
+        mHandler.post(() -> onFailureInternal(error));
+    }
+
+    private void onSuccessInternal(GetWalletCardsResponse response) {
+        Log.i(TAG, "onSuccessInternal");
+        if (mCalled) {
+            Log.w(TAG, "already called");
+            return;
+        }
+        mCalled = true;
+        try {
+            mCallback.onGetWalletCardsSuccess(response);
+            Log.i(TAG, "onSuccessInternal: returned response");
+        } catch (RemoteException e) {
+            Log.w(TAG, "Error returning wallet cards", e);
+        }
+    }
+
+    private void onFailureInternal(GetWalletCardsError error) {
+        if (mCalled) {
+            Log.w(TAG, "already called");
+            return;
+        }
+        mCalled = true;
+        try {
+            mCallback.onGetWalletCardsFailure(error);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error returning failure message", e);
+        }
+    }
+
+    private boolean isValidResponse(@NonNull GetWalletCardsResponse response) {
+        return response != null
+                && response.getWalletCards() != null
+                && response.getSelectedIndex() >= 0
+                && (response.getWalletCards().isEmpty() // selectedIndex may be 0 when list is empty
+                || response.getSelectedIndex() < response.getWalletCards().size())
+                && response.getWalletCards().size() < mRequest.getMaxCards()
+                && areValidCards(response.getWalletCards());
+    }
+
+    private boolean areValidCards(List<WalletCard> walletCards) {
+        for (WalletCard walletCard : walletCards) {
+            if (walletCard == null
+                    || walletCard.getCardId() == null
+                    || walletCard.getCardImage() == null
+                    || TextUtils.isEmpty(walletCard.getContentDescription())
+                    || walletCard.getPendingIntent() == null) {
+                return false;
+            }
+            Icon cardImage = walletCard.getCardImage();
+            if (cardImage.getType() == Icon.TYPE_BITMAP
+                    && walletCard.getCardImage().getBitmap().getConfig()
+                    != Bitmap.Config.HARDWARE) {
+                Log.w(TAG, "WalletCard bitmaps should be hardware bitmaps");
+            }
+        }
+        return true;
+    }
+}
diff --git a/core/java/android/service/quickaccesswallet/GetWalletCardsResponse.java b/core/java/android/service/quickaccesswallet/GetWalletCardsResponse.java
index 996622a..0551e27 100644
--- a/core/java/android/service/quickaccesswallet/GetWalletCardsResponse.java
+++ b/core/java/android/service/quickaccesswallet/GetWalletCardsResponse.java
@@ -35,9 +35,13 @@
     /**
      * Construct a new response.
      *
-     * @param walletCards   The list of wallet cards.
+     * @param walletCards   The list of wallet cards. The list may be empty but must NOT be larger
+     *                      than {@link GetWalletCardsRequest#getMaxCards()}. The list may not
+     *                      contain null values.
      * @param selectedIndex The index of the card that should be presented as the initially
-     *                      'selected' card
+     *                      'selected' card. The index must be greater than or equal to zero and
+     *                      less than the size of the list of walletCards (unless the list is empty
+     *                      in which case the value may be 0).
      */
     public GetWalletCardsResponse(@NonNull List<WalletCard> walletCards, int selectedIndex) {
         this.mWalletCards = walletCards;
diff --git a/core/java/android/service/quickaccesswallet/QuickAccessWalletClient.java b/core/java/android/service/quickaccesswallet/QuickAccessWalletClient.java
index cfc6d57..be9ab11 100644
--- a/core/java/android/service/quickaccesswallet/QuickAccessWalletClient.java
+++ b/core/java/android/service/quickaccesswallet/QuickAccessWalletClient.java
@@ -18,16 +18,16 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.TestApi;
 import android.content.Context;
 import android.content.Intent;
 
-import java.util.function.Consumer;
-
 /**
  * Facilitates accessing cards from the {@link QuickAccessWalletService}.
  *
  * @hide
  */
+@TestApi
 public interface QuickAccessWalletClient {
 
     /**
@@ -40,17 +40,65 @@
     }
 
     /**
-     * @return true if the {@link QuickAccessWalletService} is available.
+     * @return true if the {@link QuickAccessWalletService} is available. This means that the
+     * default NFC payment application has an exported service that can provide cards to the Quick
+     * Access Wallet. However, it does not mean that (1) the call will necessarily be successful,
+     * nor does it mean that cards may be displayed at this time. Addition checks are required:
+     * <ul>
+     *     <li>If {@link #isWalletFeatureAvailable()} is false, cards should not be displayed
+     *     <li>If the device is locked and {@link #isWalletFeatureAvailableWhenDeviceLocked} is
+     *     false, cards should not be displayed while the device remains locked. (A message
+     *     prompting the user to unlock to view cards may be appropriate).</li>
+     * </ul>
      */
     boolean isWalletServiceAvailable();
 
     /**
+     * Wallet cards should not be displayed if:
+     * <ul>
+     *     <li>The wallet service is unavailable</li>
+     *     <li>The device is not provisioned, ie user setup is incomplete</li>
+     *     <li>If the wallet feature has been disabled by the user</li>
+     *     <li>If the phone has been put into lockdown mode</li>
+     * </ul>
+     * <p>
+     * Quick Access Wallet implementers should call this method before calling
+     * {@link #getWalletCards} to ensure that cards may be displayed.
+     */
+    boolean isWalletFeatureAvailable();
+
+    /**
+     * Wallet cards may not be displayed on the lock screen if the user has opted to hide
+     * notifications or sensitive content on the lock screen.
+     * <ul>
+     *     <li>The device is not provisioned, ie user setup is incomplete</li>
+     *     <li>If the wallet feature has been disabled by the user</li>
+     *     <li>If the phone has been put into lockdown mode</li>
+     * </ul>
+     *
+     * <p>
+     * Quick Access Wallet implementers should call this method before calling
+     * {@link #getWalletCards} if the device is currently locked.
+     *
+     * @return true if cards may be displayed on the lock screen.
+     */
+    boolean isWalletFeatureAvailableWhenDeviceLocked();
+
+    /**
      * Get wallet cards from the {@link QuickAccessWalletService}.
      */
     void getWalletCards(
             @NonNull GetWalletCardsRequest request,
-            @NonNull Consumer<GetWalletCardsResponse> onSuccessListener,
-            @NonNull Consumer<GetWalletCardsError> onFailureListener);
+            @NonNull OnWalletCardsRetrievedCallback callback);
+
+    /**
+     * Callback for getWalletCards
+     */
+    interface OnWalletCardsRetrievedCallback {
+        void onWalletCardsRetrieved(@NonNull GetWalletCardsResponse response);
+
+        void onWalletCardRetrievalError(@NonNull GetWalletCardsError error);
+    }
 
     /**
      * Notify the {@link QuickAccessWalletService} service that a wallet card was selected.
@@ -65,12 +113,24 @@
     /**
      * Unregister event listener.
      */
-    void registerWalletServiceEventListener(Consumer<WalletServiceEvent> listener);
+    void addWalletServiceEventListener(@NonNull WalletServiceEventListener listener);
 
     /**
      * Unregister event listener
      */
-    void unregisterWalletServiceEventListener(Consumer<WalletServiceEvent> listener);
+    void removeWalletServiceEventListener(@NonNull WalletServiceEventListener listener);
+
+    /**
+     * A listener for {@link WalletServiceEvent walletServiceEvents}
+     */
+    interface WalletServiceEventListener {
+        void onWalletServiceEvent(@NonNull WalletServiceEvent event);
+    }
+
+    /**
+     * Unregister all event listeners and disconnect from the service.
+     */
+    void disconnect();
 
     /**
      * The manifest entry for the QuickAccessWalletService may also publish information about the
@@ -78,12 +138,12 @@
      * application.
      */
     @Nullable
-    Intent getWalletActivity();
+    Intent createWalletIntent();
 
     /**
      * The manifest entry for the {@link QuickAccessWalletService} may publish the activity that
      * hosts the settings
      */
     @Nullable
-    Intent getSettingsActivity();
+    Intent createWalletSettingsIntent();
 }
diff --git a/core/java/android/service/quickaccesswallet/QuickAccessWalletClientImpl.java b/core/java/android/service/quickaccesswallet/QuickAccessWalletClientImpl.java
index 17c287f..37a8703 100644
--- a/core/java/android/service/quickaccesswallet/QuickAccessWalletClientImpl.java
+++ b/core/java/android/service/quickaccesswallet/QuickAccessWalletClientImpl.java
@@ -20,6 +20,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.app.ActivityManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -27,79 +28,225 @@
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
-import android.os.Message;
 import android.os.RemoteException;
+import android.os.UserHandle;
+import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.internal.widget.LockPatternUtils;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.Queue;
 import java.util.UUID;
-import java.util.function.Consumer;
 
 /**
+ * Implements {@link QuickAccessWalletClient}. The client connects, performs requests, waits for
+ * responses, and disconnects automatically after a short period of time. The client may
  * @hide
  */
-@SuppressWarnings("AndroidJdkLibsChecker")
-class QuickAccessWalletClientImpl implements QuickAccessWalletClient, Handler.Callback,
-        ServiceConnection {
+public class QuickAccessWalletClientImpl implements QuickAccessWalletClient, ServiceConnection {
 
     private static final String TAG = "QAWalletSClient";
     private final Handler mHandler;
     private final Context mContext;
     private final Queue<ApiCaller> mRequestQueue;
-    private final Map<Consumer<WalletServiceEvent>, String> mEventListeners;
+    private final Map<WalletServiceEventListener, String> mEventListeners;
     private boolean mIsConnected;
+    /**
+     * Timeout for active service connections (1 minute)
+     */
+    private static final long SERVICE_CONNECTION_TIMEOUT_MS = 60 * 1000;
     @Nullable
     private IQuickAccessWalletService mService;
 
-
     @Nullable
     private final QuickAccessWalletServiceInfo mServiceInfo;
 
-    private static final int MSG_CONNECT = 1;
-    private static final int MSG_CONNECTED = 2;
-    private static final int MSG_EXECUTE = 3;
-    private static final int MSG_DISCONNECT = 4;
+    private static final int MSG_TIMEOUT_SERVICE = 5;
 
     QuickAccessWalletClientImpl(@NonNull Context context) {
         mContext = context.getApplicationContext();
         mServiceInfo = QuickAccessWalletServiceInfo.tryCreate(context);
-        mHandler = new Handler(Looper.getMainLooper(), this);
+        mHandler = new Handler(Looper.getMainLooper());
         mRequestQueue = new LinkedList<>();
         mEventListeners = new HashMap<>(1);
     }
 
     @Override
-    public boolean handleMessage(Message msg) {
-        switch (msg.what) {
-            case MSG_CONNECT:
-                connectInternal();
-                break;
-            case MSG_CONNECTED:
-                onConnectedInternal((IQuickAccessWalletService) msg.obj);
-                break;
-            case MSG_EXECUTE:
-                executeInternal((ApiCaller) msg.obj);
-                break;
-            case MSG_DISCONNECT:
-                disconnectInternal();
-                break;
-            default:
-                Log.w(TAG, "Unknown what: " + msg.what);
-                return false;
+    public boolean isWalletServiceAvailable() {
+        boolean available = mServiceInfo != null;
+        Log.i(TAG, "isWalletServiceAvailable: " + available);
+        return available;
+    }
+
+    @Override
+    public boolean isWalletFeatureAvailable() {
+        int currentUser = ActivityManager.getCurrentUser();
+        return checkUserSetupComplete()
+                && checkSecureSetting(Settings.Secure.GLOBAL_ACTIONS_PANEL_ENABLED)
+                && !new LockPatternUtils(mContext).isUserInLockdown(currentUser);
+    }
+
+    @Override
+    public boolean isWalletFeatureAvailableWhenDeviceLocked() {
+        return checkSecureSetting(Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS)
+                && checkSecureSetting(Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS);
+    }
+
+    @Override
+    public void getWalletCards(
+            @NonNull GetWalletCardsRequest request,
+            @NonNull OnWalletCardsRetrievedCallback callback) {
+
+        Log.i(TAG, "getWalletCards");
+
+        if (!isWalletServiceAvailable()) {
+            callback.onWalletCardRetrievalError(new GetWalletCardsError(null, null));
+            return;
         }
-        return true;
+
+        BaseCallbacks serviceCallback = new BaseCallbacks() {
+            @Override
+            public void onGetWalletCardsSuccess(GetWalletCardsResponse response) {
+                mHandler.post(() -> callback.onWalletCardsRetrieved(response));
+            }
+
+            @Override
+            public void onGetWalletCardsFailure(GetWalletCardsError error) {
+                mHandler.post(() -> callback.onWalletCardRetrievalError(error));
+            }
+        };
+
+        executeApiCall(new ApiCaller("onWalletCardsRequested") {
+            @Override
+            public void performApiCall(IQuickAccessWalletService service) throws RemoteException {
+                service.onWalletCardsRequested(request, serviceCallback);
+            }
+
+            @Override
+            public void onApiError() {
+                serviceCallback.onGetWalletCardsFailure(new GetWalletCardsError(null, null));
+            }
+        });
+    }
+
+    @Override
+    public void selectWalletCard(@NonNull SelectWalletCardRequest request) {
+        Log.i(TAG, "selectWalletCard");
+        if (!isWalletServiceAvailable()) {
+            return;
+        }
+        executeApiCall(new ApiCaller("onWalletCardSelected") {
+            @Override
+            public void performApiCall(IQuickAccessWalletService service) throws RemoteException {
+                service.onWalletCardSelected(request);
+            }
+        });
+    }
+
+    @Override
+    public void notifyWalletDismissed() {
+        if (!isWalletServiceAvailable()) {
+            return;
+        }
+        Log.i(TAG, "notifyWalletDismissed");
+        executeApiCall(new ApiCaller("onWalletDismissed") {
+            @Override
+            public void performApiCall(IQuickAccessWalletService service) throws RemoteException {
+                service.onWalletDismissed();
+            }
+        });
+    }
+
+    @Override
+    public void addWalletServiceEventListener(WalletServiceEventListener listener) {
+        if (!isWalletServiceAvailable()) {
+            return;
+        }
+        Log.i(TAG, "registerWalletServiceEventListener");
+        BaseCallbacks callback = new BaseCallbacks() {
+            @Override
+            public void onWalletServiceEvent(WalletServiceEvent event) {
+                Log.i(TAG, "onWalletServiceEvent");
+                mHandler.post(() -> listener.onWalletServiceEvent(event));
+            }
+        };
+
+        executeApiCall(new ApiCaller("registerListener") {
+            @Override
+            public void performApiCall(IQuickAccessWalletService service) throws RemoteException {
+                String listenerId = UUID.randomUUID().toString();
+                WalletServiceEventListenerRequest request =
+                        new WalletServiceEventListenerRequest(listenerId);
+                mEventListeners.put(listener, listenerId);
+                service.registerWalletServiceEventListener(request, callback);
+            }
+        });
+    }
+
+    @Override
+    public void removeWalletServiceEventListener(WalletServiceEventListener listener) {
+        if (!isWalletServiceAvailable()) {
+            return;
+        }
+        Log.i(TAG, "unregisterWalletServiceEventListener");
+        executeApiCall(new ApiCaller("unregisterListener") {
+            @Override
+            public void performApiCall(IQuickAccessWalletService service) throws RemoteException {
+                String listenerId = mEventListeners.remove(listener);
+                if (listenerId == null) {
+                    return;
+                }
+                WalletServiceEventListenerRequest request =
+                        new WalletServiceEventListenerRequest(listenerId);
+                service.unregisterWalletServiceEventListener(request);
+            }
+        });
+    }
+
+    @Override
+    public void disconnect() {
+        Log.i(TAG, "disconnect");
+        mHandler.post(() -> disconnectInternal(true));
+    }
+
+    @Override
+    @Nullable
+    public Intent createWalletIntent() {
+        if (mServiceInfo == null || TextUtils.isEmpty(mServiceInfo.getWalletActivity())) {
+            return null;
+        }
+        return new Intent(QuickAccessWalletService.ACTION_VIEW_WALLET)
+                .setComponent(
+                        new ComponentName(
+                                mServiceInfo.getComponentName().getPackageName(),
+                                mServiceInfo.getWalletActivity()));
+    }
+
+    @Override
+    @Nullable
+    public Intent createWalletSettingsIntent() {
+        if (mServiceInfo == null || TextUtils.isEmpty(mServiceInfo.getSettingsActivity())) {
+            return null;
+        }
+        return new Intent(QuickAccessWalletService.ACTION_VIEW_WALLET_SETTINGS)
+                .setComponent(
+                        new ComponentName(
+                                mServiceInfo.getComponentName().getPackageName(),
+                                mServiceInfo.getSettingsActivity()));
     }
 
     private void connect() {
-        mHandler.sendMessage(mHandler.obtainMessage(MSG_CONNECT));
+        Log.i(TAG, "connect");
+        mHandler.post(this::connectInternal);
     }
 
     private void connectInternal() {
+        Log.i(TAG, "connectInternal");
         if (mServiceInfo == null) {
             Log.w(TAG, "Wallet service unavailable");
             return;
@@ -113,15 +260,18 @@
         intent.setComponent(mServiceInfo.getComponentName());
         int flags = Context.BIND_AUTO_CREATE | Context.BIND_WAIVE_PRIORITY;
         mContext.bindService(intent, this, flags);
+        resetServiceConnectionTimeout();
     }
 
     private void onConnectedInternal(IQuickAccessWalletService service) {
+        Log.i(TAG, "onConnectedInternal");
         if (!mIsConnected) {
             Log.w(TAG, "onConnectInternal but connection closed");
             mService = null;
             return;
         }
         mService = service;
+        Log.i(TAG, "onConnectedInternal success: request queue size " + mRequestQueue.size());
         for (ApiCaller apiCaller : new ArrayList<>(mRequestQueue)) {
             try {
                 apiCaller.performApiCall(mService);
@@ -135,15 +285,33 @@
         }
     }
 
-    private void disconnect() {
-        mHandler.sendMessage(mHandler.obtainMessage(MSG_DISCONNECT));
+    /**
+     * Resets the idle timeout for this connection by removing any pending timeout messages and
+     * posting a new delayed message.
+     */
+    private void resetServiceConnectionTimeout() {
+        Log.i(TAG, "resetServiceConnectionTimeout");
+        mHandler.removeMessages(MSG_TIMEOUT_SERVICE);
+        mHandler.postDelayed(
+                () -> disconnectInternal(true),
+                MSG_TIMEOUT_SERVICE,
+                SERVICE_CONNECTION_TIMEOUT_MS);
     }
 
-    private void disconnectInternal() {
+    private void disconnectInternal(boolean clearEventListeners) {
+        Log.i(TAG, "disconnectInternal: " + clearEventListeners);
         if (!mIsConnected) {
             Log.w(TAG, "already disconnected");
             return;
         }
+        if (clearEventListeners && !mEventListeners.isEmpty()) {
+            Log.i(TAG, "disconnectInternal: clear event listeners");
+            for (WalletServiceEventListener listener : mEventListeners.keySet()) {
+                removeWalletServiceEventListener(listener);
+            }
+            mHandler.post(() -> disconnectInternal(false));
+            return;
+        }
         mIsConnected = false;
         mContext.unbindService(/*conn=*/this);
         mService = null;
@@ -151,181 +319,81 @@
         mRequestQueue.clear();
     }
 
-    private void execute(ApiCaller apiCaller) {
-        mHandler.sendMessage(mHandler.obtainMessage(MSG_EXECUTE, apiCaller));
+    private void executeApiCall(ApiCaller apiCaller) {
+        Log.i(TAG, "execute: " + apiCaller.mDesc);
+        mHandler.post(() -> executeInternal(apiCaller));
     }
 
     private void executeInternal(ApiCaller apiCall) {
+        Log.i(TAG, "executeInternal: " + apiCall.mDesc);
         if (mIsConnected && mService != null) {
             try {
                 apiCall.performApiCall(mService);
+                Log.i(TAG, "executeInternal success: " + apiCall.mDesc);
+                resetServiceConnectionTimeout();
             } catch (RemoteException e) {
-                Log.w(TAG, "executeInternal error", e);
+                Log.w(TAG, "executeInternal error: " + apiCall.mDesc, e);
                 apiCall.onApiError();
                 disconnect();
             }
         } else {
+            Log.i(TAG, "executeInternal: queued" + apiCall.mDesc);
             mRequestQueue.add(apiCall);
             connect();
         }
     }
 
-    public boolean isWalletServiceAvailable() {
-        return mServiceInfo != null;
-    }
-
     private abstract static class ApiCaller {
+        private final String mDesc;
+
+        private ApiCaller(String desc) {
+            this.mDesc = desc;
+        }
+
         abstract void performApiCall(IQuickAccessWalletService service) throws RemoteException;
 
         void onApiError() {
-            Log.w(TAG, "api error");
+            Log.w(TAG, "api error: " + mDesc);
         }
     }
 
-    public void getWalletCards(
-            @NonNull GetWalletCardsRequest request,
-            @NonNull Consumer<GetWalletCardsResponse> onSuccessListener,
-            @NonNull Consumer<GetWalletCardsError> onFailureListener) {
-
-        BaseCallbacks callback = new BaseCallbacks() {
-            @Override
-            public void onGetWalletCardsSuccess(GetWalletCardsResponse response) {
-                mHandler.post(() -> onSuccessListener.accept(response));
-            }
-
-            @Override
-            public void onGetWalletCardsFailure(GetWalletCardsError error) {
-                mHandler.post(() -> onFailureListener.accept(error));
-            }
-        };
-
-        execute(new ApiCaller() {
-            @Override
-            public void performApiCall(IQuickAccessWalletService service) throws RemoteException {
-                service.onWalletCardsRequested(request, callback);
-            }
-
-            @Override
-            public void onApiError() {
-                callback.onGetWalletCardsFailure(new GetWalletCardsError(null, null));
-            }
-        });
-    }
-
-    public void selectWalletCard(@NonNull SelectWalletCardRequest request) {
-        execute(new ApiCaller() {
-            @Override
-            public void performApiCall(IQuickAccessWalletService service) throws RemoteException {
-                service.onWalletCardSelected(request);
-            }
-        });
-    }
-
-    public void notifyWalletDismissed() {
-        execute(new ApiCaller() {
-            @Override
-            public void performApiCall(IQuickAccessWalletService service) throws RemoteException {
-                service.onWalletDismissed();
-                mHandler.sendMessage(mHandler.obtainMessage(MSG_DISCONNECT));
-            }
-        });
-    }
-
-    @Override
-    public void registerWalletServiceEventListener(Consumer<WalletServiceEvent> listener) {
-
-        BaseCallbacks callback = new BaseCallbacks() {
-            @Override
-            public void onWalletServiceEvent(WalletServiceEvent event) {
-                Log.i(TAG, "onWalletServiceEvent");
-                mHandler.post(() -> listener.accept(event));
-            }
-        };
-
-        execute(new ApiCaller() {
-            @Override
-            public void performApiCall(IQuickAccessWalletService service) throws RemoteException {
-                String listenerId = UUID.randomUUID().toString();
-                WalletServiceEventListenerRequest request =
-                        new WalletServiceEventListenerRequest(listenerId);
-                mEventListeners.put(listener, listenerId);
-                service.registerWalletServiceEventListener(request, callback);
-            }
-        });
-    }
-
-    @Override
-    public void unregisterWalletServiceEventListener(Consumer<WalletServiceEvent> listener) {
-        execute(new ApiCaller() {
-            @Override
-            public void performApiCall(IQuickAccessWalletService service) throws RemoteException {
-                String listenerId = mEventListeners.get(listener);
-                if (listenerId == null) {
-                    return;
-                }
-                WalletServiceEventListenerRequest request =
-                        new WalletServiceEventListenerRequest(listenerId);
-                service.unregisterWalletServiceEventListener(request);
-            }
-        });
-    }
-
-    @Override
-    @Nullable
-    public Intent getWalletActivity() {
-        if (mServiceInfo == null || TextUtils.isEmpty(mServiceInfo.getWalletActivity())) {
-            return null;
-        }
-        return new Intent(QuickAccessWalletService.ACTION_VIEW_WALLET)
-                .setComponent(
-                        new ComponentName(
-                                mServiceInfo.getComponentName().getPackageName(),
-                                mServiceInfo.getWalletActivity()));
-    }
-
-    @Override
-    @Nullable
-    public Intent getSettingsActivity() {
-        if (mServiceInfo == null || TextUtils.isEmpty(mServiceInfo.getSettingsActivity())) {
-            return null;
-        }
-        return new Intent(QuickAccessWalletService.ACTION_VIEW_WALLET_SETTINGS)
-                .setComponent(
-                        new ComponentName(
-                                mServiceInfo.getComponentName().getPackageName(),
-                                mServiceInfo.getSettingsActivity()));
-    }
-
-    /**
-     * Connection to the {@link QuickAccessWalletService}
-     */
-
-
-    @Override
+    @Override // ServiceConnection
     public void onServiceConnected(ComponentName name, IBinder binder) {
+        Log.i(TAG, "onServiceConnected: " + name);
         IQuickAccessWalletService service = IQuickAccessWalletService.Stub.asInterface(binder);
-        mHandler.sendMessage(mHandler.obtainMessage(MSG_CONNECTED, service));
+        mHandler.post(() -> onConnectedInternal(service));
     }
 
-    @Override
+    @Override // ServiceConnection
     public void onServiceDisconnected(ComponentName name) {
         // Do not disconnect, as we may later be re-connected
         Log.w(TAG, "onServiceDisconnected");
     }
 
-    @Override
+    @Override // ServiceConnection
     public void onBindingDied(ComponentName name) {
         // This is a recoverable error but the client will need to reconnect.
         Log.w(TAG, "onBindingDied");
         disconnect();
     }
 
-    @Override
+    @Override // ServiceConnection
     public void onNullBinding(ComponentName name) {
         Log.w(TAG, "onNullBinding");
         disconnect();
     }
 
+    private boolean checkSecureSetting(String name) {
+        return Settings.Secure.getInt(mContext.getContentResolver(), name, 0) == 1;
+    }
+
+    private boolean checkUserSetupComplete() {
+        return Settings.Secure.getIntForUser(
+                mContext.getContentResolver(),
+                Settings.Secure.USER_SETUP_COMPLETE, 0,
+                UserHandle.USER_CURRENT) == 1;
+    }
+
     private static class BaseCallbacks extends IQuickAccessWalletServiceCallbacks.Stub {
         public void onGetWalletCardsSuccess(GetWalletCardsResponse response) {
             throw new IllegalStateException();
diff --git a/core/java/android/service/quickaccesswallet/QuickAccessWalletService.java b/core/java/android/service/quickaccesswallet/QuickAccessWalletService.java
index d968405..aba5611 100644
--- a/core/java/android/service/quickaccesswallet/QuickAccessWalletService.java
+++ b/core/java/android/service/quickaccesswallet/QuickAccessWalletService.java
@@ -45,8 +45,9 @@
  *   android.permission.BIND_NFC_SERVICE permission.
  *   <li>The user explicitly selected the application as the default payment application in
  *   the Tap &amp; pay settings screen.
- *   <li>The application requires the {@code android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE}
- *   permission in its manifest.
+ *   <li>The QuickAccessWalletService requires that the binding application hold the
+ *   {@code android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE} permission, which only the System
+ *   Service can hold.
  *   <li>The user explicitly enables it using Android Settings (the
  *       {@link Settings#ACTION_QUICK_ACCESS_WALLET_SETTINGS} intent can be used to launch it).
  * </ol>
@@ -73,6 +74,11 @@
  *   a new card is selected, the Android System will notify the service through
  *   {@link #onWalletCardSelected} and will provide the {@link WalletCard#getCardId() cardId} of the
  *   card that is now selected.
+ *   <li>If the user commences an NFC payment, the service may send a {@link WalletServiceEvent}
+ *   to the System indicating that the wallet application now needs to show the activity associated
+ *   with making a payment. Sending a {@link WalletServiceEvent} of type
+ *   {@link WalletServiceEvent#TYPE_NFC_PAYMENT_STARTED} should cause the quick access wallet UI
+ *   to be dismissed.
  *   <li>When the wallet is dismissed, the Android System will notify the service through
  *   {@link #onWalletDismissed}.
  * </ol>
@@ -110,6 +116,7 @@
  *     android:permission="android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE">
  *     <intent-filter>
  *         <action android:name="android.service.quickaccesswallet.QuickAccessWalletService" />
+ *         <category android:name="android.intent.category.DEFAULT"/>
  *     </intent-filter>
  *     <meta-data android:name="android.quickaccesswallet"
  *          android:resource="@xml/quickaccesswallet_configuration" />;
@@ -166,29 +173,6 @@
             "android.service.quickaccesswallet.action.VIEW_WALLET_SETTINGS";
 
     /**
-     * Broadcast Action: Sent by the wallet application to dismiss the Quick Access Wallet.
-     * <p>
-     * The Quick Access Wallet may be shown in a system window on top of other Activities. If the
-     * user selects a payment card from the Quick Access Wallet and then holds their phone to an NFC
-     * terminal, the wallet application will need to show a payment Activity. But if the Quick
-     * Access Wallet is still being shown, it may obscure the payment Activity. To avoid this, the
-     * wallet application can send a broadcast to the Android System with this action to request
-     * that the Quick Access Wallet be dismissed.
-     * <p>
-     * This broadcast must use the {@code android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE}
-     * permission to ensure that it is only delivered to System UI. Furthermore, your application
-     * must require the {@code android.permission.DISMISS_QUICK_ACCESS_WALLET}
-     * <p>
-     * <pre class="prettyprint">
-     * context.sendBroadcast(
-     *     new Intent(ACTION_DISMISS_WALLET), Manifest.permission.BIND_QUICK_ACCESS_WALLET_SERVICE);
-     * </pre>
-     */
-    @SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION)
-    public static final String ACTION_DISMISS_WALLET =
-            "android.service.quickaccesswallet.action.DISMISS_WALLET";
-
-    /**
      * Name under which a QuickAccessWalletService component publishes information about itself.
      * This meta-data should reference an XML resource containing a
      * <code>&lt;{@link
@@ -202,8 +186,20 @@
     public static final String SERVICE_META_DATA = "android.quickaccesswallet";
 
     private final Handler mHandler = new Handler(Looper.getMainLooper());
+
+    /**
+     * The service currently only supports one listener at a time. Multiple connections that
+     * register different listeners will clobber the listener. This field may only be accessed from
+     * the main thread.
+     */
     @Nullable
     private String mEventListenerId;
+
+    /**
+     * The service currently only supports one listener at a time. Multiple connections that
+     * register different listeners will clobber the listener. This field may only be accessed from
+     * the main thread.
+     */
     @Nullable
     private IQuickAccessWalletServiceCallbacks mEventListener;
 
@@ -240,7 +236,8 @@
     private void onWalletCardsRequestedInternal(
             GetWalletCardsRequest request,
             IQuickAccessWalletServiceCallbacks callback) {
-        onWalletCardsRequested(request, new GetWalletCardsCallback(callback, mHandler));
+        onWalletCardsRequested(request,
+                new GetWalletCardsCallbackImpl(request, callback, mHandler));
     }
 
     @Override
@@ -250,14 +247,14 @@
             // Binding to the QuickAccessWalletService is protected by the
             // android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE permission, which is defined in
             // R. Pre-R devices can have other side-loaded applications that claim this permission.
-            // This ensures that the service is only available when properly permission protected.
+            // Ensures that the service is only enabled when properly permission protected.
             Log.w(TAG, "Warning: binding on pre-R device");
         }
-        if (SERVICE_INTERFACE.equals(intent.getAction())) {
-            return mInterface.asBinder();
+        if (!SERVICE_INTERFACE.equals(intent.getAction())) {
+            Log.w(TAG, "Wrong action");
+            return null;
         }
-        Log.w(TAG, "Tried to bind to wrong intent (should be " + SERVICE_INTERFACE + ": " + intent);
-        return null;
+        return mInterface.asBinder();
     }
 
     /**
diff --git a/core/java/android/service/quickaccesswallet/QuickAccessWalletServiceInfo.java b/core/java/android/service/quickaccesswallet/QuickAccessWalletServiceInfo.java
index 8793f28..23173a8 100644
--- a/core/java/android/service/quickaccesswallet/QuickAccessWalletServiceInfo.java
+++ b/core/java/android/service/quickaccesswallet/QuickAccessWalletServiceInfo.java
@@ -77,8 +77,9 @@
         }
 
         if (!Manifest.permission.BIND_QUICK_ACCESS_WALLET_SERVICE.equals(serviceInfo.permission)) {
-            Log.w(TAG, String.format("QuickAccessWalletService from %s does not have permission %s",
-                    serviceInfo.packageName, Manifest.permission.BIND_QUICK_ACCESS_WALLET_SERVICE));
+            Log.w(TAG, String.format("%s.%s does not require permission %s",
+                    serviceInfo.packageName, serviceInfo.name,
+                    Manifest.permission.BIND_QUICK_ACCESS_WALLET_SERVICE));
             return null;
         }
 
diff --git a/core/java/android/service/quickaccesswallet/WalletCard.java b/core/java/android/service/quickaccesswallet/WalletCard.java
index c3b1a4b..e6ae0ab 100644
--- a/core/java/android/service/quickaccesswallet/WalletCard.java
+++ b/core/java/android/service/quickaccesswallet/WalletCard.java
@@ -174,22 +174,25 @@
          * @param cardId             The card id must be non-null and unique within the list of
          *                           cards returned. <b>Note:
          *                           </b> this card ID should <b>not</b> contain PII (Personally
-         *                           Identifiable Information, * such as username or email
-         *                           address).
+         *                           Identifiable Information, such as username or email address).
          * @param cardImage          The visual representation of the card. If the card image Icon
          *                           is a bitmap, it should have a width of {@link
          *                           GetWalletCardsRequest#getCardWidthPx()} and a height of {@link
          *                           GetWalletCardsRequest#getCardHeightPx()}. If the card image
          *                           does not have these dimensions, it may appear distorted when it
-         *                           is scaled to fit these dimensions on screen.
+         *                           is scaled to fit these dimensions on screen. Bitmaps should be
+         *                           of type {@link android.graphics.Bitmap.Config#HARDWARE} for
+         *                           performance reasons.
          * @param contentDescription The content description of the card image. This field is
-         *                           required.
+         *                           required and may not be null or empty.
          *                           <b>Note: </b> this message should <b>not</b> contain PII
          *                           (Personally Identifiable Information, such as username or email
          *                           address).
          * @param pendingIntent      If the user performs a click on the card, this PendingIntent
          *                           will be sent. If the device is locked, the wallet will first
-         *                           request device unlock before sending the pending intent.
+         *                           request device unlock before sending the pending intent. It is
+         *                           recommended that the pending intent be immutable (use {@link
+         *                           PendingIntent#FLAG_IMMUTABLE}).
          */
         public Builder(@NonNull String cardId,
                 @NonNull Icon cardImage,
diff --git a/core/java/android/service/quicksettings/TileService.java b/core/java/android/service/quicksettings/TileService.java
index d0675ed..b4b5819 100644
--- a/core/java/android/service/quicksettings/TileService.java
+++ b/core/java/android/service/quicksettings/TileService.java
@@ -126,22 +126,22 @@
             = "android.service.quicksettings.ACTIVE_TILE";
 
     /**
-     * Meta-data for a tile to support {@code BooleanState}.
+     * Meta-data for a tile to mark is toggleable.
      * <p>
-     * BooleanState is for tiles that should support switch tile behavior in accessibility. This is
+     * Toggleable tiles support switch tile behavior in accessibility. This is
      * the behavior of most of the framework tiles.
      *
-     * To make a TileService support BooleanState, set this meta-data to true on the TileService's
-     * manifest declaration.
+     * To indicate that a TileService is toggleable, set this meta-data to true on the
+     * TileService's manifest declaration.
      * <pre class="prettyprint">
      * {@literal
-     * <meta-data android:name="android.service.quicksettings.BOOLEAN_TILE"
+     * <meta-data android:name="android.service.quicksettings.TOGGLEABLE_TILE"
      *      android:value="true" />
      * }
      * </pre>
      */
-    public static final String META_DATA_BOOLEAN_TILE =
-            "android.service.quicksettings.BOOLEAN_TILE";
+    public static final String META_DATA_TOGGLEABLE_TILE =
+            "android.service.quicksettings.TOGGLEABLE_TILE";
 
     /**
      * Used to notify SysUI that Listening has be requested.
diff --git a/core/java/android/service/voice/AlwaysOnHotwordDetector.java b/core/java/android/service/voice/AlwaysOnHotwordDetector.java
index 1966f17..a88d389 100644
--- a/core/java/android/service/voice/AlwaysOnHotwordDetector.java
+++ b/core/java/android/service/voice/AlwaysOnHotwordDetector.java
@@ -181,14 +181,14 @@
      * Returned by {@link #getSupportedAudioCapabilities()}
      */
     public static final int AUDIO_CAPABILITY_ECHO_CANCELLATION =
-            SoundTrigger.ModuleProperties.CAPABILITY_ECHO_CANCELLATION;
+            SoundTrigger.ModuleProperties.AUDIO_CAPABILITY_ECHO_CANCELLATION;
 
     /**
      * If set, the underlying module supports noise suppression.
      * Returned by {@link #getSupportedAudioCapabilities()}
      */
     public static final int AUDIO_CAPABILITY_NOISE_SUPPRESSION =
-            SoundTrigger.ModuleProperties.CAPABILITY_NOISE_SUPPRESSION;
+            SoundTrigger.ModuleProperties.AUDIO_CAPABILITY_NOISE_SUPPRESSION;
 
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
@@ -249,21 +249,21 @@
         }
 
         /**
-         * The inclusive start of supported range.
+         * Get the beginning of the param range
          *
-         * @return start of range
+         * @return The inclusive start of the supported range.
          */
-        public int start() {
-            return mModelParamRange.start;
+        public int getStart() {
+            return mModelParamRange.getStart();
         }
 
         /**
-         * The inclusive end of supported range.
+         * Get the end of the param range
          *
-         * @return end of range
+         * @return The inclusive end of the supported range.
          */
-        public int end() {
-            return mModelParamRange.end;
+        public int getEnd() {
+            return mModelParamRange.getEnd();
         }
 
         @Override
diff --git a/core/java/android/service/voice/VoiceInteractionSession.java b/core/java/android/service/voice/VoiceInteractionSession.java
index 36f2c62..8e6f77b 100644
--- a/core/java/android/service/voice/VoiceInteractionSession.java
+++ b/core/java/android/service/voice/VoiceInteractionSession.java
@@ -1314,7 +1314,7 @@
             intent.migrateExtraStreamToClipData();
             intent.prepareToLeaveProcess(mContext);
             int res = mSystemService.startVoiceActivity(mToken, intent,
-                    intent.resolveType(mContext.getContentResolver()));
+                    intent.resolveType(mContext.getContentResolver()), mContext.getFeatureId());
             Instrumentation.checkStartActivityResult(res, intent);
         } catch (RemoteException e) {
         }
@@ -1342,7 +1342,7 @@
             intent.migrateExtraStreamToClipData();
             intent.prepareToLeaveProcess(mContext);
             int res = mSystemService.startAssistantActivity(mToken, intent,
-                    intent.resolveType(mContext.getContentResolver()));
+                    intent.resolveType(mContext.getContentResolver()), mContext.getFeatureId());
             Instrumentation.checkStartActivityResult(res, intent);
         } catch (RemoteException e) {
         }
diff --git a/core/java/android/telephony/PhoneStateListener.java b/core/java/android/telephony/PhoneStateListener.java
index 531ade0..d273500 100644
--- a/core/java/android/telephony/PhoneStateListener.java
+++ b/core/java/android/telephony/PhoneStateListener.java
@@ -301,6 +301,13 @@
     public static final int LISTEN_USER_MOBILE_DATA_STATE                  = 0x00080000;
 
     /**
+     *  Listen for display info changed event.
+     *
+     *  @see #onDisplayInfoChanged
+     */
+    public static final int LISTEN_DISPLAY_INFO_CHANGED = 0x00100000;
+
+    /**
      *  Listen for changes to the phone capability.
      *
      *  @see #onPhoneCapabilityChanged
@@ -412,23 +419,23 @@
      * domain. This indication does not necessarily indicate a change of service state, which should
      * be tracked via {@link #LISTEN_SERVICE_STATE}.
      *
-     * <p>Requires permission {@link android.Manifest.permission#READ_PHONE_STATE} or the calling
-     * app has carrier privileges (see {@link TelephonyManager#hasCarrierPrivileges}).
+     * <p>Requires permission {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE} or
+     * the calling app has carrier privileges (see {@link TelephonyManager#hasCarrierPrivileges}).
      *
      * @see #onRegistrationFailed()
      */
-    @RequiresPermission(Manifest.permission.READ_PHONE_STATE)
+    @RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
     public static final int LISTEN_REGISTRATION_FAILURE = 0x40000000;
 
     /**
      * Listen for Barring Information for the current registered / camped cell.
      *
-     * <p>Requires permission {@link android.Manifest.permission#READ_PHONE_STATE} or the calling
-     * app has carrier privileges (see {@link TelephonyManager#hasCarrierPrivileges}).
+     * <p>Requires permission {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE} or
+     * the calling app has carrier privileges (see {@link TelephonyManager#hasCarrierPrivileges}).
      *
      * @see #onBarringInfoChanged()
      */
-    @RequiresPermission(Manifest.permission.READ_PHONE_STATE)
+    @RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
     public static final int LISTEN_BARRING_INFO = 0x80000000;
 
     /*
@@ -848,6 +855,21 @@
     }
 
     /**
+     * Callback invoked when the display info has changed on the registered subscription.
+     * <p> The {@link DisplayInfo} contains status information shown to the user based on
+     * carrier policy.
+     *
+     * Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE} or that the calling
+     * app has carrier privileges (see {@link TelephonyManager#hasCarrierPrivileges}).
+     *
+     * @param displayInfo The display information.
+     */
+    @RequiresPermission((android.Manifest.permission.READ_PHONE_STATE))
+    public void onDisplayInfoChanged(@NonNull DisplayInfo displayInfo) {
+        // default implementation empty
+    }
+
+    /**
      * Callback invoked when the current emergency number list has changed on the registered
      * subscription.
      * Note, the registration subId comes from {@link TelephonyManager} object which registers
@@ -1226,6 +1248,15 @@
                             () -> psl.onUserMobileDataStateChanged(enabled)));
         }
 
+        public void onDisplayInfoChanged(DisplayInfo displayInfo) {
+            PhoneStateListener psl = mPhoneStateListenerWeakRef.get();
+            if (psl == null) return;
+
+            Binder.withCleanCallingIdentity(
+                    () -> mExecutor.execute(
+                            () -> psl.onDisplayInfoChanged(displayInfo)));
+        }
+
         public void onOemHookRawEvent(byte[] rawData) {
             PhoneStateListener psl = mPhoneStateListenerWeakRef.get();
             if (psl == null) return;
diff --git a/core/java/android/telephony/TelephonyRegistryManager.java b/core/java/android/telephony/TelephonyRegistryManager.java
index 4024db1..2c077bb 100644
--- a/core/java/android/telephony/TelephonyRegistryManager.java
+++ b/core/java/android/telephony/TelephonyRegistryManager.java
@@ -589,6 +589,24 @@
     }
 
     /**
+     * Notify display info changed.
+     *
+     * @param slotIndex The SIM slot index for which display info has changed. Can be
+     * derived from {@code subscriptionId} except when {@code subscriptionId} is invalid, such as
+     * when the device is in emergency-only mode.
+     * @param subscriptionId Subscription id for which display network info has changed.
+     * @param displayInfo The display info.
+     */
+    public void notifyDisplayInfoChanged(int slotIndex, int subscriptionId,
+                                         @NonNull DisplayInfo displayInfo) {
+        try {
+            sRegistry.notifyDisplayInfoChanged(slotIndex, subscriptionId, displayInfo);
+        } catch (RemoteException ex) {
+            // system process is dead
+        }
+    }
+
+    /**
      * Notify IMS call disconnect causes which contains {@link android.telephony.ims.ImsReasonInfo}.
      *
      * @param subId for which ims call disconnect.
diff --git a/core/java/android/telephony/WapPushManagerConnector.java b/core/java/android/telephony/WapPushManagerConnector.java
deleted file mode 100644
index a9df506..0000000
--- a/core/java/android/telephony/WapPushManagerConnector.java
+++ /dev/null
@@ -1,178 +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.telephony;
-
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.SdkConstant;
-import android.annotation.SystemApi;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.os.IBinder;
-import android.os.RemoteException;
-
-import com.android.internal.telephony.IWapPushManager;
-import com.android.internal.util.Preconditions;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * APIs for platform to connect to the WAP push manager service.
- *
- * <p>To start connection, {@link #bindToWapPushManagerService} should be called.
- *
- * <p>Upon completion {@link #unbindWapPushManagerService} should be called to unbind the service.
- *
- * @hide
- */
-@SystemApi
-public final class WapPushManagerConnector {
-    private final Context mContext;
-
-    private volatile WapPushManagerConnection mConnection;
-    private volatile IWapPushManager mWapPushManager;
-    private String mWapPushManagerPackage;
-
-    /**
-     * The {@link android.content.Intent} that must be declared as handled by the
-     * WAP push manager service.
-     * @hide
-     */
-    @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION)
-    public static final String SERVICE_INTERFACE =
-            "com.android.internal.telephony.IWapPushManager";
-
-    /** @hide */
-    @IntDef(flag = true, prefix = {"RESULT_"}, value = {
-            RESULT_MESSAGE_HANDLED,
-            RESULT_APP_QUERY_FAILED,
-            RESULT_SIGNATURE_NO_MATCH,
-            RESULT_INVALID_RECEIVER_NAME,
-            RESULT_EXCEPTION_CAUGHT,
-            RESULT_FURTHER_PROCESSING,
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface ProcessMessageResult{}
-
-    /** {@link #processMessage} return value: Message is handled. */
-    public static final int RESULT_MESSAGE_HANDLED = 0x1;
-    /** {@link #processMessage} return value: Application ID or content type was not found. */
-    public static final int RESULT_APP_QUERY_FAILED = 0x2;
-    /** {@link #processMessage} return value: Receiver application signature check failed. */
-    public static final int RESULT_SIGNATURE_NO_MATCH = 0x4;
-    /** {@link #processMessage} return value: Receiver application was not found. */
-    public static final int RESULT_INVALID_RECEIVER_NAME = 0x8;
-    /** {@link #processMessage} return value: Unknown exception. */
-    public static final int RESULT_EXCEPTION_CAUGHT = 0x10;
-    /** {@link #processMessage} return value: further processing needed. */
-    public static final int RESULT_FURTHER_PROCESSING = 0x8000;
-
-    /** The application package name of the WAP push manager service. */
-    private static final String SERVICE_PACKAGE = "com.android.smspush";
-
-    public WapPushManagerConnector(@NonNull Context context) {
-        mContext = context;
-    }
-
-    /**
-     * Binds to the WAP push manager service. This method should be called exactly once.
-     *
-     * @return {@code true} upon successfully binding to a service, {@code false} otherwise
-     */
-    public boolean bindToWapPushManagerService() {
-        Preconditions.checkState(mConnection == null);
-
-        Intent intent = new Intent(SERVICE_INTERFACE);
-        ComponentName component = intent.resolveSystemService(mContext.getPackageManager(), 0);
-        intent.setComponent(component);
-        mConnection = new WapPushManagerConnection();
-        if (component != null
-                && mContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE)) {
-            mWapPushManagerPackage = component.getPackageName();
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Returns the package name of WAP push manager service application connected to,
-     * or {@code null} if not connected.
-     */
-    @Nullable
-    public String getConnectedWapPushManagerServicePackage() {
-        return mWapPushManagerPackage;
-    }
-
-    /**
-     * Processes WAP push message and triggers the {@code intent}.
-     *
-     * @see RESULT_MESSAGE_HANDLED
-     * @see RESULT_APP_QUERY_FAILED
-     * @see RESULT_SIGNATURE_NO_MATCH
-     * @see RESULT_INVALID_RECEIVER_NAME
-     * @see RESULT_EXCEPTION_CAUGHT
-     * @see RESULT_FURTHER_PROCESSING
-     */
-    @ProcessMessageResult
-    public int processMessage(
-            @NonNull String applicationId, @NonNull String contentType, @NonNull Intent intent) {
-        try {
-            return mWapPushManager.processMessage(applicationId, contentType, intent);
-        } catch (NullPointerException | RemoteException e) {
-            return RESULT_EXCEPTION_CAUGHT;
-        }
-    }
-
-    /**
-     * Unbinds the WAP push manager service. This method should be called exactly once.
-     */
-    public void unbindWapPushManagerService() {
-        Preconditions.checkNotNull(mConnection);
-
-        mContext.unbindService(mConnection);
-        mConnection = null;
-    }
-
-    private class WapPushManagerConnection implements ServiceConnection {
-        @Override
-        public void onServiceConnected(ComponentName name, IBinder service) {
-            // Because we have bound to an explicit
-            // service that is running in our own process, we can
-            // cast its IBinder to a concrete class and directly access it.
-            mWapPushManager = IWapPushManager.Stub.asInterface(service);
-        }
-
-        @Override
-        public void onServiceDisconnected(ComponentName name) {
-            mWapPushManager = null;
-        }
-
-        @Override
-        public void onNullBinding(ComponentName name) {
-            onServiceDisconnected(name);
-        }
-
-        @Override
-        public void onBindingDied(ComponentName name) {
-            onServiceDisconnected(name);
-        }
-    }
-}
diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java
index 5fdac81..c60f714 100644
--- a/core/java/android/util/FeatureFlagUtils.java
+++ b/core/java/android/util/FeatureFlagUtils.java
@@ -50,6 +50,8 @@
     /** @hide */
     public static final String SETTINGS_DO_NOT_RESTORE_PRESERVED =
             "settings_do_not_restore_preserved";
+    /** @hide */
+    public static final String SETTINGS_SCHEDULES_FLAG = "settings_schedules";
 
     private static final Map<String, String> DEFAULT_FLAGS;
 
@@ -57,7 +59,7 @@
         DEFAULT_FLAGS = new HashMap<>();
         DEFAULT_FLAGS.put("settings_audio_switcher", "true");
         DEFAULT_FLAGS.put("settings_systemui_theme", "true");
-        DEFAULT_FLAGS.put(SETTINGS_FUSE_FLAG, "false");
+        DEFAULT_FLAGS.put(SETTINGS_FUSE_FLAG, "true");
         DEFAULT_FLAGS.put(DYNAMIC_SYSTEM, "false");
         DEFAULT_FLAGS.put(SEAMLESS_TRANSFER, "false");
         DEFAULT_FLAGS.put(HEARING_AID_SETTINGS, "false");
@@ -76,6 +78,8 @@
         DEFAULT_FLAGS.put(SETTINGS_DO_NOT_RESTORE_PRESERVED, "false");
 
         DEFAULT_FLAGS.put("settings_tether_all_in_one", "false");
+        DEFAULT_FLAGS.put(SETTINGS_SCHEDULES_FLAG, "false");
+        DEFAULT_FLAGS.put("settings_contextual_home2", "false");
     }
 
     /**
diff --git a/core/java/android/util/apk/ApkSignatureSchemeV4Verifier.java b/core/java/android/util/apk/ApkSignatureSchemeV4Verifier.java
new file mode 100644
index 0000000..b6b8089
--- /dev/null
+++ b/core/java/android/util/apk/ApkSignatureSchemeV4Verifier.java
@@ -0,0 +1,53 @@
+/*
+ * 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.apk;
+
+import android.os.incremental.IncrementalManager;
+
+import java.io.File;
+import java.security.cert.Certificate;
+
+import sun.security.pkcs.PKCS7;
+import sun.security.pkcs.ParsingException;
+
+/**
+ * APK Signature Scheme v4 verifier.
+ *
+ * @hide for internal use only.
+ */
+public class ApkSignatureSchemeV4Verifier {
+
+    /**
+     * Extracts APK Signature Scheme v4 signatures of the provided APK and returns the certificates
+     * associated with each signer.
+     */
+    public static Certificate[] extractCertificates(String apkFile)
+            throws SignatureNotFoundException, SecurityException {
+        final byte[] rawSignature = IncrementalManager.unsafeGetFileSignature(
+                new File(apkFile).getAbsolutePath());
+        if (rawSignature == null || rawSignature.length == 0) {
+            throw new SignatureNotFoundException("Failed to obtain raw signature from IncFS.");
+        }
+
+        try {
+            PKCS7 pkcs7 = new PKCS7(rawSignature);
+            return pkcs7.getCertificates();
+        } catch (ParsingException e) {
+            throw new SecurityException("Failed to parse signature and extract certificates", e);
+        }
+    }
+}
diff --git a/core/java/android/util/apk/ApkSignatureVerifier.java b/core/java/android/util/apk/ApkSignatureVerifier.java
index 6463509..f325c21 100644
--- a/core/java/android/util/apk/ApkSignatureVerifier.java
+++ b/core/java/android/util/apk/ApkSignatureVerifier.java
@@ -66,46 +66,72 @@
     public static PackageParser.SigningDetails verify(String apkPath,
             @SignatureSchemeVersion int minSignatureSchemeVersion)
             throws PackageParserException {
+        return verifySignatures(apkPath, minSignatureSchemeVersion, true);
+    }
+
+    /**
+     * Returns the certificates associated with each signer for the given APK without verification.
+     * This method is dangerous and should not be used, unless the caller is absolutely certain the
+     * APK is trusted.
+     *
+     * @throws PackageParserException if there was a problem collecting certificates.
+     */
+    public static PackageParser.SigningDetails unsafeGetCertsWithoutVerification(
+            String apkPath, int minSignatureSchemeVersion)
+            throws PackageParserException {
+        return verifySignatures(apkPath, minSignatureSchemeVersion, false);
+    }
+
+    /**
+     * Verifies the provided APK using all allowed signing schemas.
+     * @return the certificates associated with each signer.
+     * @param verifyFull whether to verify all contents of this APK or just collect certificates.
+     * @throws PackageParserException if there was a problem collecting certificates
+     */
+    private static PackageParser.SigningDetails verifySignatures(String apkPath,
+            @SignatureSchemeVersion int minSignatureSchemeVersion, boolean verifyFull)
+            throws PackageParserException {
+
+        if (minSignatureSchemeVersion > SignatureSchemeVersion.SIGNING_BLOCK_V4) {
+            // V3 and before are older than the requested minimum signing version
+            throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
+                    "No signature found in package of version " + minSignatureSchemeVersion
+                            + " or newer for package " + apkPath);
+        }
+
+        // first try v4
+        try {
+            return verifyV4Signature(apkPath, minSignatureSchemeVersion, verifyFull);
+        } catch (SignatureNotFoundException e) {
+            // not signed with v4, try older if allowed
+            if (minSignatureSchemeVersion >= SignatureSchemeVersion.SIGNING_BLOCK_V4) {
+                throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
+                        "No APK Signature Scheme v4 signature in package " + apkPath, e);
+            }
+        }
 
         if (minSignatureSchemeVersion > SignatureSchemeVersion.SIGNING_BLOCK_V3) {
             // V3 and before are older than the requested minimum signing version
             throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
                     "No signature found in package of version " + minSignatureSchemeVersion
-            + " or newer for package " + apkPath);
+                            + " or newer for package " + apkPath);
         }
 
-        // first try v3
-        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "verifyV3");
+        return verifyV3AndBelowSignatures(apkPath, minSignatureSchemeVersion, verifyFull);
+    }
+
+    private static PackageParser.SigningDetails verifyV3AndBelowSignatures(String apkPath,
+            @SignatureSchemeVersion int minSignatureSchemeVersion, boolean verifyFull)
+            throws PackageParserException {
+        // try v3
         try {
-            ApkSignatureSchemeV3Verifier.VerifiedSigner vSigner =
-                    ApkSignatureSchemeV3Verifier.verify(apkPath);
-            Certificate[][] signerCerts = new Certificate[][] { vSigner.certs };
-            Signature[] signerSigs = convertToSignatures(signerCerts);
-            Signature[] pastSignerSigs = null;
-            if (vSigner.por != null) {
-                // populate proof-of-rotation information
-                pastSignerSigs = new Signature[vSigner.por.certs.size()];
-                for (int i = 0; i < pastSignerSigs.length; i++) {
-                    pastSignerSigs[i] = new Signature(vSigner.por.certs.get(i).getEncoded());
-                    pastSignerSigs[i].setFlags(vSigner.por.flagsList.get(i));
-                }
-            }
-            return new PackageParser.SigningDetails(
-                    signerSigs, SignatureSchemeVersion.SIGNING_BLOCK_V3,
-                    pastSignerSigs);
+            return verifyV3Signature(apkPath, verifyFull);
         } catch (SignatureNotFoundException e) {
             // not signed with v3, try older if allowed
             if (minSignatureSchemeVersion >= SignatureSchemeVersion.SIGNING_BLOCK_V3) {
                 throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
                         "No APK Signature Scheme v3 signature in package " + apkPath, e);
             }
-        } catch (Exception e) {
-            // APK Signature Scheme v2 signature found but did not verify
-            throw new  PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
-                    "Failed to collect certificates from " + apkPath
-                            + " using APK Signature Scheme v3", e);
-        } finally {
-            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
         }
 
         // redundant, protective version check
@@ -117,26 +143,14 @@
         }
 
         // try v2
-        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "verifyV2");
         try {
-            Certificate[][] signerCerts = ApkSignatureSchemeV2Verifier.verify(apkPath);
-            Signature[] signerSigs = convertToSignatures(signerCerts);
-
-            return new PackageParser.SigningDetails(
-                    signerSigs, SignatureSchemeVersion.SIGNING_BLOCK_V2);
+            return verifyV2Signature(apkPath, verifyFull);
         } catch (SignatureNotFoundException e) {
             // not signed with v2, try older if allowed
             if (minSignatureSchemeVersion >= SignatureSchemeVersion.SIGNING_BLOCK_V2) {
                 throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
                         "No APK Signature Scheme v2 signature in package " + apkPath, e);
             }
-        } catch (Exception e) {
-            // APK Signature Scheme v2 signature found but did not verify
-            throw new  PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
-                    "Failed to collect certificates from " + apkPath
-                            + " using APK Signature Scheme v2", e);
-        } finally {
-            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
         }
 
         // redundant, protective version check
@@ -148,14 +162,136 @@
         }
 
         // v2 didn't work, try jarsigner
-        return verifyV1Signature(apkPath, true);
+        return verifyV1Signature(apkPath, verifyFull);
     }
 
     /**
-     * Verifies the provided APK and returns the certificates associated with each signer.
+     * Verifies the provided APK using V4 schema.
      *
      * @param verifyFull whether to verify all contents of this APK or just collect certificates.
+     * @return the certificates associated with each signer.
+     * @throws SignatureNotFoundException if there are no V4 signatures in the APK
+     * @throws PackageParserException     if there was a problem collecting certificates
+     */
+    private static PackageParser.SigningDetails verifyV4Signature(String apkPath,
+            @SignatureSchemeVersion int minSignatureSchemeVersion, boolean verifyFull)
+            throws SignatureNotFoundException, PackageParserException {
+        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, verifyFull ? "verifyV4" : "certsOnlyV4");
+        try {
+            Certificate[] certs = ApkSignatureSchemeV4Verifier.extractCertificates(apkPath);
+            Certificate[][] signerCerts = new Certificate[][]{certs};
+            Signature[] signerSigs = convertToSignatures(signerCerts);
+
+            if (verifyFull) {
+                // v4 is an add-on and requires v2/v3 signature to validate against its certificates
+                final PackageParser.SigningDetails nonstreaming = verifyV3AndBelowSignatures(
+                        apkPath, minSignatureSchemeVersion, false);
+                if (nonstreaming.signatureSchemeVersion <= SignatureSchemeVersion.JAR) {
+                    throw new SecurityException(
+                            "V4 signing block can only be verified along with V2 and above.");
+                }
+                if (nonstreaming.signatures.length == 0
+                        || nonstreaming.signatures.length != signerSigs.length) {
+                    throw new SecurityException("Invalid number of signatures in "
+                            + nonstreaming.signatureSchemeVersion);
+                }
+
+                for (int i = 0, size = signerSigs.length; i < size; ++i) {
+                    if (!nonstreaming.signatures[i].equals(signerSigs[i])) {
+                        throw new SecurityException("V4 signature certificate does not match "
+                                + nonstreaming.signatureSchemeVersion);
+                    }
+                }
+            }
+
+            return new PackageParser.SigningDetails(signerSigs,
+                    SignatureSchemeVersion.SIGNING_BLOCK_V4);
+        } catch (SignatureNotFoundException e) {
+            throw e;
+        } catch (Exception e) {
+            // APK Signature Scheme v4 signature found but did not verify
+            throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
+                    "Failed to collect certificates from " + apkPath
+                            + " using APK Signature Scheme v4", e);
+        } finally {
+            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
+        }
+    }
+
+    /**
+     * Verifies the provided APK using V3 schema.
      *
+     * @param verifyFull whether to verify all contents of this APK or just collect certificates.
+     * @return the certificates associated with each signer.
+     * @throws SignatureNotFoundException if there are no V3 signatures in the APK
+     * @throws PackageParserException     if there was a problem collecting certificates
+     */
+    private static PackageParser.SigningDetails verifyV3Signature(String apkPath,
+            boolean verifyFull) throws SignatureNotFoundException, PackageParserException {
+        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, verifyFull ? "verifyV3" : "certsOnlyV3");
+        try {
+            ApkSignatureSchemeV3Verifier.VerifiedSigner vSigner =
+                    verifyFull ? ApkSignatureSchemeV3Verifier.verify(apkPath)
+                            : ApkSignatureSchemeV3Verifier.unsafeGetCertsWithoutVerification(
+                                    apkPath);
+            Certificate[][] signerCerts = new Certificate[][]{vSigner.certs};
+            Signature[] signerSigs = convertToSignatures(signerCerts);
+            Signature[] pastSignerSigs = null;
+            if (vSigner.por != null) {
+                // populate proof-of-rotation information
+                pastSignerSigs = new Signature[vSigner.por.certs.size()];
+                for (int i = 0; i < pastSignerSigs.length; i++) {
+                    pastSignerSigs[i] = new Signature(vSigner.por.certs.get(i).getEncoded());
+                    pastSignerSigs[i].setFlags(vSigner.por.flagsList.get(i));
+                }
+            }
+            return new PackageParser.SigningDetails(signerSigs,
+                    SignatureSchemeVersion.SIGNING_BLOCK_V3, pastSignerSigs);
+        } catch (SignatureNotFoundException e) {
+            throw e;
+        } catch (Exception e) {
+            // APK Signature Scheme v3 signature found but did not verify
+            throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
+                    "Failed to collect certificates from " + apkPath
+                            + " using APK Signature Scheme v3", e);
+        } finally {
+            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
+        }
+    }
+
+    /**
+     * Verifies the provided APK using V2 schema.
+     *
+     * @param verifyFull whether to verify all contents of this APK or just collect certificates.
+     * @return the certificates associated with each signer.
+     * @throws SignatureNotFoundException if there are no V2 signatures in the APK
+     * @throws PackageParserException     if there was a problem collecting certificates
+     */
+    private static PackageParser.SigningDetails verifyV2Signature(String apkPath,
+            boolean verifyFull) throws SignatureNotFoundException, PackageParserException {
+        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, verifyFull ? "verifyV2" : "certsOnlyV2");
+        try {
+            Certificate[][] signerCerts = verifyFull ? ApkSignatureSchemeV2Verifier.verify(apkPath)
+                    : ApkSignatureSchemeV2Verifier.unsafeGetCertsWithoutVerification(apkPath);
+            Signature[] signerSigs = convertToSignatures(signerCerts);
+            return new PackageParser.SigningDetails(signerSigs,
+                    SignatureSchemeVersion.SIGNING_BLOCK_V2);
+        } catch (SignatureNotFoundException e) {
+            throw e;
+        } catch (Exception e) {
+            // APK Signature Scheme v2 signature found but did not verify
+            throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
+                    "Failed to collect certificates from " + apkPath
+                            + " using APK Signature Scheme v2", e);
+        } finally {
+            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
+        }
+    }
+
+    /**
+     * Verifies the provided APK using JAR schema.
+     * @return the certificates associated with each signer.
+     * @param verifyFull whether to verify all contents of this APK or just collect certificates.
      * @throws PackageParserException if there was a problem collecting certificates
      */
     private static PackageParser.SigningDetails verifyV1Signature(
@@ -277,7 +413,7 @@
      *
      * @throws CertificateEncodingException if it is unable to create a Signature object.
      */
-    public static Signature[] convertToSignatures(Certificate[][] certs)
+    private static Signature[] convertToSignatures(Certificate[][] certs)
             throws CertificateEncodingException {
         final Signature[] res = new Signature[certs.length];
         for (int i = 0; i < certs.length; i++) {
@@ -296,99 +432,29 @@
     }
 
     /**
-     * Returns the certificates associated with each signer for the given APK without verification.
-     * This method is dangerous and should not be used, unless the caller is absolutely certain the
-     * APK is trusted.
-     *
-     * @throws PackageParserException if the APK's signature failed to verify.
-     * or greater is not found, except in the case of no JAR signature.
+     * Returns the minimum signature scheme version required for an app targeting the specified
+     * {@code targetSdk}.
      */
-    public static PackageParser.SigningDetails unsafeGetCertsWithoutVerification(
-            String apkPath, int minSignatureSchemeVersion)
-            throws PackageParserException {
-
-        if (minSignatureSchemeVersion > SignatureSchemeVersion.SIGNING_BLOCK_V3) {
-            // V3 and before are older than the requested minimum signing version
-            throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
-                    "No signature found in package of version " + minSignatureSchemeVersion
-                            + " or newer for package " + apkPath);
+    public static int getMinimumSignatureSchemeVersionForTargetSdk(int targetSdk) {
+        if (targetSdk >= Build.VERSION_CODES.R) {
+            return SignatureSchemeVersion.SIGNING_BLOCK_V2;
         }
+        return SignatureSchemeVersion.JAR;
+    }
 
-        // first try v3
-        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "certsOnlyV3");
-        try {
-            ApkSignatureSchemeV3Verifier.VerifiedSigner vSigner =
-                    ApkSignatureSchemeV3Verifier.unsafeGetCertsWithoutVerification(apkPath);
-            Certificate[][] signerCerts = new Certificate[][] { vSigner.certs };
-            Signature[] signerSigs = convertToSignatures(signerCerts);
-            Signature[] pastSignerSigs = null;
-            if (vSigner.por != null) {
-                // populate proof-of-rotation information
-                pastSignerSigs = new Signature[vSigner.por.certs.size()];
-                for (int i = 0; i < pastSignerSigs.length; i++) {
-                    pastSignerSigs[i] = new Signature(vSigner.por.certs.get(i).getEncoded());
-                    pastSignerSigs[i].setFlags(vSigner.por.flagsList.get(i));
-                }
-            }
-            return new PackageParser.SigningDetails(
-                    signerSigs, SignatureSchemeVersion.SIGNING_BLOCK_V3,
-                    pastSignerSigs);
-        } catch (SignatureNotFoundException e) {
-            // not signed with v3, try older if allowed
-            if (minSignatureSchemeVersion >= SignatureSchemeVersion.SIGNING_BLOCK_V3) {
-                throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
-                        "No APK Signature Scheme v3 signature in package " + apkPath, e);
-            }
-        } catch (Exception e) {
-            // APK Signature Scheme v3 signature found but did not verify
-            throw new  PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
-                    "Failed to collect certificates from " + apkPath
-                            + " using APK Signature Scheme v3", e);
-        } finally {
-            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
+    /**
+     * Result of a successful APK verification operation.
+     */
+    public static class Result {
+        public final Certificate[][] certs;
+        public final Signature[] sigs;
+        public final int signatureSchemeVersion;
+
+        public Result(Certificate[][] certs, Signature[] sigs, int signingVersion) {
+            this.certs = certs;
+            this.sigs = sigs;
+            this.signatureSchemeVersion = signingVersion;
         }
-
-        // redundant, protective version check
-        if (minSignatureSchemeVersion > SignatureSchemeVersion.SIGNING_BLOCK_V2) {
-            // V2 and before are older than the requested minimum signing version
-            throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
-                    "No signature found in package of version " + minSignatureSchemeVersion
-                            + " or newer for package " + apkPath);
-        }
-
-        // first try v2
-        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "certsOnlyV2");
-        try {
-            Certificate[][] signerCerts =
-                    ApkSignatureSchemeV2Verifier.unsafeGetCertsWithoutVerification(apkPath);
-            Signature[] signerSigs = convertToSignatures(signerCerts);
-            return new PackageParser.SigningDetails(signerSigs,
-                    SignatureSchemeVersion.SIGNING_BLOCK_V2);
-        } catch (SignatureNotFoundException e) {
-            // not signed with v2, try older if allowed
-            if (minSignatureSchemeVersion >= SignatureSchemeVersion.SIGNING_BLOCK_V2) {
-                throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
-                        "No APK Signature Scheme v2 signature in package " + apkPath, e);
-            }
-        } catch (Exception e) {
-            // APK Signature Scheme v2 signature found but did not verify
-            throw new  PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
-                    "Failed to collect certificates from " + apkPath
-                            + " using APK Signature Scheme v2", e);
-        } finally {
-            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
-        }
-
-        // redundant, protective version check
-        if (minSignatureSchemeVersion > SignatureSchemeVersion.JAR) {
-            // V1 and is older than the requested minimum signing version
-            throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
-                    "No signature found in package of version " + minSignatureSchemeVersion
-                            + " or newer for package " + apkPath);
-        }
-
-        // v2 didn't work, try jarsigner
-        return verifyV1Signature(apkPath, false);
     }
 
     /**
@@ -416,7 +482,7 @@
      */
     public static byte[] generateApkVerity(String apkPath, ByteBufferFactory bufferFactory)
             throws IOException, SignatureNotFoundException, SecurityException, DigestException,
-                   NoSuchAlgorithmException {
+            NoSuchAlgorithmException {
         // first try v3
         try {
             return ApkSignatureSchemeV3Verifier.generateApkVerity(apkPath, bufferFactory);
@@ -446,30 +512,4 @@
             return null;
         }
     }
-
-    /**
-     * Returns the minimum signature scheme version required for an app targeting the specified
-     * {@code targetSdk}.
-     */
-    public static int getMinimumSignatureSchemeVersionForTargetSdk(int targetSdk) {
-        if (targetSdk >= Build.VERSION_CODES.R) {
-            return SignatureSchemeVersion.SIGNING_BLOCK_V2;
-        }
-        return SignatureSchemeVersion.JAR;
-    }
-
-    /**
-     * Result of a successful APK verification operation.
-     */
-    public static class Result {
-        public final Certificate[][] certs;
-        public final Signature[] sigs;
-        public final int signatureSchemeVersion;
-
-        public Result(Certificate[][] certs, Signature[] sigs, int signingVersion) {
-            this.certs = certs;
-            this.sigs = sigs;
-            this.signatureSchemeVersion = signingVersion;
-        }
-    }
 }
diff --git a/core/java/android/view/AccessibilityEmbeddedConnection.java b/core/java/android/view/AccessibilityEmbeddedConnection.java
new file mode 100644
index 0000000..5d34669
--- /dev/null
+++ b/core/java/android/view/AccessibilityEmbeddedConnection.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.graphics.Matrix;
+import android.os.IBinder;
+import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.IAccessibilityEmbeddedConnection;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * This class is an interface this ViewRootImpl provides to the host view to the latter
+ * can interact with the view hierarchy in SurfaceControlViewHost.
+ *
+ * @hide
+ */
+final class AccessibilityEmbeddedConnection extends IAccessibilityEmbeddedConnection.Stub {
+    private final WeakReference<ViewRootImpl> mViewRootImpl;
+    private final Matrix mTmpScreenMatrix = new Matrix();
+
+    AccessibilityEmbeddedConnection(ViewRootImpl viewRootImpl) {
+        mViewRootImpl = new WeakReference<>(viewRootImpl);
+    }
+
+    @Override
+    public @Nullable IBinder associateEmbeddedHierarchy(@NonNull IBinder host, int hostViewId) {
+        final ViewRootImpl viewRootImpl = mViewRootImpl.get();
+        if (viewRootImpl != null) {
+            final AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(
+                    viewRootImpl.mContext);
+            viewRootImpl.mAttachInfo.mLeashedParentToken = host;
+            viewRootImpl.mAttachInfo.mLeashedParentAccessibilityViewId = hostViewId;
+            if (accessibilityManager.isEnabled()) {
+                accessibilityManager.associateEmbeddedHierarchy(host, viewRootImpl.mLeashToken);
+            }
+            return viewRootImpl.mLeashToken;
+        }
+        return null;
+    }
+
+    @Override
+    public void disassociateEmbeddedHierarchy() {
+        final ViewRootImpl viewRootImpl = mViewRootImpl.get();
+        if (viewRootImpl != null) {
+            final AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(
+                    viewRootImpl.mContext);
+            viewRootImpl.mAttachInfo.mLeashedParentToken = null;
+            viewRootImpl.mAttachInfo.mLeashedParentAccessibilityViewId = View.NO_ID;
+            viewRootImpl.mAttachInfo.mLocationInParentDisplay.set(0, 0);
+            if (accessibilityManager.isEnabled()) {
+                accessibilityManager.disassociateEmbeddedHierarchy(viewRootImpl.mLeashToken);
+            }
+        }
+    }
+
+    @Override
+    public void setScreenMatrix(float[] matrixValues) {
+        final ViewRootImpl viewRootImpl = mViewRootImpl.get();
+        if (viewRootImpl != null) {
+            mTmpScreenMatrix.setValues(matrixValues);
+            if (viewRootImpl.mAttachInfo.mScreenMatrixInEmbeddedHierarchy == null) {
+                viewRootImpl.mAttachInfo.mScreenMatrixInEmbeddedHierarchy = new Matrix();
+            }
+            viewRootImpl.mAttachInfo.mScreenMatrixInEmbeddedHierarchy.set(mTmpScreenMatrix);
+        }
+    }
+}
diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java
index 203b087..6d4ac0e 100644
--- a/core/java/android/view/AccessibilityInteractionController.java
+++ b/core/java/android/view/AccessibilityInteractionController.java
@@ -21,6 +21,7 @@
 import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_REQUESTED_KEY;
 import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY;
 
+import android.graphics.Matrix;
 import android.graphics.Point;
 import android.graphics.Rect;
 import android.graphics.RectF;
@@ -109,6 +110,7 @@
     private final Rect mTempRect = new Rect();
     private final Rect mTempRect1 = new Rect();
     private final Rect mTempRect2 = new Rect();
+    private final RectF mTempRectF = new RectF();
 
     private AddNodeInfosForViewId mAddNodeInfosForViewId;
 
@@ -855,6 +857,68 @@
         return mViewRootImpl.mAttachInfo.mLocationInParentDisplay.equals(0, 0);
     }
 
+    private void applyScreenMatrixIfNeeded(List<AccessibilityNodeInfo> infos) {
+        if (infos == null || shouldBypassApplyScreenMatrix()) {
+            return;
+        }
+        final int infoCount = infos.size();
+        for (int i = 0; i < infoCount; i++) {
+            final AccessibilityNodeInfo info = infos.get(i);
+            applyScreenMatrixIfNeeded(info);
+        }
+    }
+
+    private void applyScreenMatrixIfNeeded(AccessibilityNodeInfo info) {
+        if (info == null || shouldBypassApplyScreenMatrix()) {
+            return;
+        }
+        final Rect boundsInScreen = mTempRect;
+        final RectF transformedBounds = mTempRectF;
+        final Matrix screenMatrix = mViewRootImpl.mAttachInfo.mScreenMatrixInEmbeddedHierarchy;
+
+        info.getBoundsInScreen(boundsInScreen);
+        transformedBounds.set(boundsInScreen);
+        screenMatrix.mapRect(transformedBounds);
+        boundsInScreen.set((int) transformedBounds.left, (int) transformedBounds.top,
+                (int) transformedBounds.right, (int) transformedBounds.bottom);
+        info.setBoundsInScreen(boundsInScreen);
+    }
+
+    private boolean shouldBypassApplyScreenMatrix() {
+        final Matrix screenMatrix = mViewRootImpl.mAttachInfo.mScreenMatrixInEmbeddedHierarchy;
+        return screenMatrix == null || screenMatrix.isIdentity();
+    }
+
+    private void associateLeashedParentIfNeeded(List<AccessibilityNodeInfo> infos) {
+        if (infos == null || shouldBypassAssociateLeashedParent()) {
+            return;
+        }
+        final int infoCount = infos.size();
+        for (int i = 0; i < infoCount; i++) {
+            final AccessibilityNodeInfo info = infos.get(i);
+            associateLeashedParentIfNeeded(info);
+        }
+    }
+
+    private void associateLeashedParentIfNeeded(AccessibilityNodeInfo info) {
+        if (info == null || shouldBypassAssociateLeashedParent()) {
+            return;
+        }
+        // The node id of root node in embedded maybe not be ROOT_NODE_ID so we compare the id
+        // with root view.
+        if (mViewRootImpl.mView.getAccessibilityViewId()
+                != AccessibilityNodeInfo.getAccessibilityViewId(info.getSourceNodeId())) {
+            return;
+        }
+        info.setLeashedParent(mViewRootImpl.mAttachInfo.mLeashedParentToken,
+                mViewRootImpl.mAttachInfo.mLeashedParentAccessibilityViewId);
+    }
+
+    private boolean shouldBypassAssociateLeashedParent() {
+        return (mViewRootImpl.mAttachInfo.mLeashedParentToken == null
+                && mViewRootImpl.mAttachInfo.mLeashedParentAccessibilityViewId == View.NO_ID);
+    }
+
     private void applyAppScaleAndMagnificationSpecIfNeeded(AccessibilityNodeInfo info,
             MagnificationSpec spec) {
         if (info == null) {
@@ -914,6 +978,8 @@
             MagnificationSpec spec, Region interactiveRegion) {
         try {
             mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
+            associateLeashedParentIfNeeded(infos);
+            applyScreenMatrixIfNeeded(infos);
             adjustBoundsInScreenIfNeeded(infos);
             // To avoid applyAppScaleAndMagnificationSpecIfNeeded changing the bounds of node,
             // then impact the visibility result, we need to adjust visibility before apply scale.
@@ -935,6 +1001,8 @@
             MagnificationSpec spec, Region interactiveRegion) {
         try {
             mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
+            associateLeashedParentIfNeeded(info);
+            applyScreenMatrixIfNeeded(info);
             adjustBoundsInScreenIfNeeded(info);
             // To avoid applyAppScaleAndMagnificationSpecIfNeeded changing the bounds of node,
             // then impact the visibility result, we need to adjust visibility before apply scale.
diff --git a/core/java/android/view/CutoutSpecification.java b/core/java/android/view/CutoutSpecification.java
new file mode 100644
index 0000000..850e9fc
--- /dev/null
+++ b/core/java/android/view/CutoutSpecification.java
@@ -0,0 +1,484 @@
+/*
+ * 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;
+
+import static android.view.Gravity.BOTTOM;
+import static android.view.Gravity.LEFT;
+import static android.view.Gravity.RIGHT;
+import static android.view.Gravity.TOP;
+
+import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.graphics.Insets;
+import android.graphics.Matrix;
+import android.graphics.Path;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.graphics.Region;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.PathParser;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.util.Locale;
+import java.util.Objects;
+
+/**
+ * In order to accept the cutout specification for all of edges in devices, the specification
+ * parsing method is extracted from
+ * {@link android.view.DisplayCutout#fromResourcesRectApproximation(Resources, int, int)} to be
+ * the specified class for parsing the specification.
+ * BNF definition:
+ * <ul>
+ *      <li>Cutouts Specification = ([Cutout Delimiter],Cutout Specification) {...}, [Dp] ; </li>
+ *      <li>Cutout Specification  = [Vertical Position], (SVG Path Element), [Horizontal Position]
+ *                                  [Bind Cutout] ;</li>
+ *      <li>Vertical Position     = "@bottom" | "@center_vertical" ;</li>
+ *      <li>Horizontal Position   = "@left" | "@right" ;</li>
+ *      <li>Bind Cutout           = "@bind_left_cutout" | "@bind_right_cutout" ;</li>
+ *      <li>Cutout Delimiter      = "@cutout" ;</li>
+ *      <li>Dp                    = "@dp"</li>
+ * </ul>
+ *
+ * <ul>
+ *     <li>Vertical position is top by default if there is neither "@bottom" nor "@center_vertical"
+ *     </li>
+ *     <li>Horizontal position is center horizontal by default if there is neither "@left" nor
+ *     "@right".</li>
+ *     <li>@bottom make the cutout piece bind to bottom edge.</li>
+ *     <li>both of @bind_left_cutout and @bind_right_cutout are use to claim the cutout belong to
+ *     left or right edge cutout.</li>
+ * </ul>
+ *
+ * @hide
+ */
+@VisibleForTesting(visibility = PACKAGE)
+public class CutoutSpecification {
+    private static final String TAG = "CutoutSpecification";
+    private static final boolean DEBUG = false;
+
+    private static final int MINIMAL_ACCEPTABLE_PATH_LENGTH = "H1V1Z".length();
+
+    private static final char MARKER_START_CHAR = '@';
+    private static final String DP_MARKER = MARKER_START_CHAR + "dp";
+
+    private static final String BOTTOM_MARKER = MARKER_START_CHAR + "bottom";
+    private static final String RIGHT_MARKER = MARKER_START_CHAR + "right";
+    private static final String LEFT_MARKER = MARKER_START_CHAR + "left";
+    private static final String CUTOUT_MARKER = MARKER_START_CHAR + "cutout";
+    private static final String CENTER_VERTICAL_MARKER = MARKER_START_CHAR + "center_vertical";
+
+    /* By default, it's top bound cutout. That's why TOP_BOUND_CUTOUT_MARKER is not defined */
+    private static final String BIND_RIGHT_CUTOUT_MARKER = MARKER_START_CHAR + "bind_right_cutout";
+    private static final String BIND_LEFT_CUTOUT_MARKER = MARKER_START_CHAR + "bind_left_cutout";
+
+    private final Path mPath;
+    private final Rect mLeftBound;
+    private final Rect mTopBound;
+    private final Rect mRightBound;
+    private final Rect mBottomBound;
+    private final Insets mInsets;
+
+    private CutoutSpecification(@NonNull Parser parser) {
+        mPath = parser.mPath;
+        mLeftBound = parser.mLeftBound;
+        mTopBound = parser.mTopBound;
+        mRightBound = parser.mRightBound;
+        mBottomBound = parser.mBottomBound;
+        mInsets = parser.mInsets;
+
+        if (DEBUG) {
+            Log.d(TAG, String.format(Locale.ENGLISH,
+                    "left cutout = %s, top cutout = %s, right cutout = %s, bottom cutout = %s",
+                    mLeftBound != null ? mLeftBound.toString() : "",
+                    mTopBound != null ? mTopBound.toString() : "",
+                    mRightBound != null ? mRightBound.toString() : "",
+                    mBottomBound != null ? mBottomBound.toString() : ""));
+        }
+    }
+
+    @VisibleForTesting(visibility = PACKAGE)
+    @Nullable
+    public Path getPath() {
+        return mPath;
+    }
+
+    @VisibleForTesting(visibility = PACKAGE)
+    @Nullable
+    public Rect getLeftBound() {
+        return mLeftBound;
+    }
+
+    @VisibleForTesting(visibility = PACKAGE)
+    @Nullable
+    public Rect getTopBound() {
+        return mTopBound;
+    }
+
+    @VisibleForTesting(visibility = PACKAGE)
+    @Nullable
+    public Rect getRightBound() {
+        return mRightBound;
+    }
+
+    @VisibleForTesting(visibility = PACKAGE)
+    @Nullable
+    public Rect getBottomBound() {
+        return mBottomBound;
+    }
+
+    /**
+     * To count the safe inset according to the cutout bounds and waterfall inset.
+     *
+     * @return the safe inset.
+     */
+    @VisibleForTesting(visibility = PACKAGE)
+    @NonNull
+    public Rect getSafeInset() {
+        return mInsets.toRect();
+    }
+
+    private static int decideWhichEdge(boolean isTopEdgeShortEdge,
+            boolean isShortEdge, boolean isStart) {
+        return (isTopEdgeShortEdge)
+                ? ((isShortEdge) ? (isStart ? TOP : BOTTOM) : (isStart ? LEFT : RIGHT))
+                : ((isShortEdge) ? (isStart ? LEFT : RIGHT) : (isStart ? TOP : BOTTOM));
+    }
+
+    /**
+     * The CutoutSpecification Parser.
+     */
+    @VisibleForTesting(visibility = PACKAGE)
+    public static class Parser {
+        private final boolean mIsShortEdgeOnTop;
+        private final float mDensity;
+        private final int mDisplayWidth;
+        private final int mDisplayHeight;
+        private final Matrix mMatrix;
+        private Insets mInsets;
+        private int mSafeInsetLeft;
+        private int mSafeInsetTop;
+        private int mSafeInsetRight;
+        private int mSafeInsetBottom;
+
+        private final Rect mTmpRect = new Rect();
+        private final RectF mTmpRectF = new RectF();
+
+        private boolean mInDp;
+
+        private Path mPath;
+        private Rect mLeftBound;
+        private Rect mTopBound;
+        private Rect mRightBound;
+        private Rect mBottomBound;
+
+        private boolean mPositionFromLeft = false;
+        private boolean mPositionFromRight = false;
+        private boolean mPositionFromBottom = false;
+        private boolean mPositionFromCenterVertical = false;
+
+        private boolean mBindLeftCutout = false;
+        private boolean mBindRightCutout = false;
+        private boolean mBindBottomCutout = false;
+
+        private boolean mIsTouchShortEdgeStart;
+        private boolean mIsTouchShortEdgeEnd;
+        private boolean mIsCloserToStartSide;
+
+        /**
+         * The constructor of the CutoutSpecification parser to parse the specification of cutout.
+         * @param density the display density.
+         * @param displayWidth the display width.
+         * @param displayHeight the display height.
+         */
+        @VisibleForTesting(visibility = PACKAGE)
+        public Parser(float density, int displayWidth, int displayHeight) {
+            mDensity = density;
+            mDisplayWidth = displayWidth;
+            mDisplayHeight = displayHeight;
+            mMatrix = new Matrix();
+            mIsShortEdgeOnTop = mDisplayWidth < mDisplayHeight;
+        }
+
+        private void computeBoundsRectAndAddToRegion(Path p, Region inoutRegion, Rect inoutRect) {
+            mTmpRectF.setEmpty();
+            p.computeBounds(mTmpRectF, false /* unused */);
+            mTmpRectF.round(inoutRect);
+            inoutRegion.op(inoutRect, Region.Op.UNION);
+        }
+
+        private void resetStatus(StringBuilder sb) {
+            sb.setLength(0);
+            mPositionFromBottom = false;
+            mPositionFromLeft = false;
+            mPositionFromRight = false;
+            mPositionFromCenterVertical = false;
+
+            mBindLeftCutout = false;
+            mBindRightCutout = false;
+            mBindBottomCutout = false;
+        }
+
+        private void translateMatrix() {
+            final float offsetX;
+            if (mPositionFromRight) {
+                offsetX = mDisplayWidth;
+            } else if (mPositionFromLeft) {
+                offsetX = 0;
+            } else {
+                offsetX = mDisplayWidth / 2f;
+            }
+
+            final float offsetY;
+            if (mPositionFromBottom) {
+                offsetY = mDisplayHeight;
+            } else if (mPositionFromCenterVertical) {
+                offsetY = mDisplayHeight / 2f;
+            } else {
+                offsetY = 0;
+            }
+
+            mMatrix.reset();
+            if (mInDp) {
+                mMatrix.postScale(mDensity, mDensity);
+            }
+            mMatrix.postTranslate(offsetX, offsetY);
+        }
+
+        private int computeSafeInsets(int gravity, Rect rect) {
+            if (gravity == LEFT && rect.right > 0 && rect.right < mDisplayWidth) {
+                return rect.right;
+            } else if (gravity == TOP && rect.bottom > 0 && rect.bottom < mDisplayHeight) {
+                return rect.bottom;
+            } else if (gravity == RIGHT && rect.left > 0 && rect.left < mDisplayWidth) {
+                return mDisplayWidth - rect.left;
+            } else if (gravity == BOTTOM && rect.top > 0 && rect.top < mDisplayHeight) {
+                return mDisplayHeight - rect.top;
+            }
+            return 0;
+        }
+
+        private void setSafeInset(int gravity, int inset) {
+            if (gravity == LEFT) {
+                mSafeInsetLeft = inset;
+            } else if (gravity == TOP) {
+                mSafeInsetTop = inset;
+            } else if (gravity == RIGHT) {
+                mSafeInsetRight = inset;
+            } else if (gravity == BOTTOM) {
+                mSafeInsetBottom = inset;
+            }
+        }
+
+        private int getSafeInset(int gravity) {
+            if (gravity == LEFT) {
+                return mSafeInsetLeft;
+            } else if (gravity == TOP) {
+                return mSafeInsetTop;
+            } else if (gravity == RIGHT) {
+                return mSafeInsetRight;
+            } else if (gravity == BOTTOM) {
+                return mSafeInsetBottom;
+            }
+            return 0;
+        }
+
+        @NonNull
+        private Rect onSetEdgeCutout(boolean isStart, boolean isShortEdge, @NonNull Rect rect) {
+            final int gravity;
+            if (isShortEdge) {
+                gravity = decideWhichEdge(mIsShortEdgeOnTop, true, isStart);
+            } else {
+                if (mIsTouchShortEdgeStart && mIsTouchShortEdgeEnd) {
+                    gravity = decideWhichEdge(mIsShortEdgeOnTop, false, isStart);
+                } else if (mIsTouchShortEdgeStart || mIsTouchShortEdgeEnd) {
+                    gravity = decideWhichEdge(mIsShortEdgeOnTop, true,
+                            mIsCloserToStartSide);
+                } else {
+                    gravity = decideWhichEdge(mIsShortEdgeOnTop, isShortEdge, isStart);
+                }
+            }
+
+            int oldSafeInset = getSafeInset(gravity);
+            int newSafeInset = computeSafeInsets(gravity, rect);
+            if (oldSafeInset < newSafeInset) {
+                setSafeInset(gravity, newSafeInset);
+            }
+
+            return new Rect(rect);
+        }
+
+        private void setEdgeCutout(@NonNull Path newPath) {
+            if (mBindRightCutout && mRightBound == null) {
+                mRightBound = onSetEdgeCutout(false, !mIsShortEdgeOnTop, mTmpRect);
+            } else if (mBindLeftCutout && mLeftBound == null) {
+                mLeftBound = onSetEdgeCutout(true, !mIsShortEdgeOnTop, mTmpRect);
+            } else if (mBindBottomCutout && mBottomBound == null) {
+                mBottomBound = onSetEdgeCutout(false, mIsShortEdgeOnTop, mTmpRect);
+            } else if (!(mBindBottomCutout || mBindLeftCutout || mBindRightCutout)
+                    && mTopBound == null) {
+                mTopBound = onSetEdgeCutout(true, mIsShortEdgeOnTop, mTmpRect);
+            } else {
+                return;
+            }
+
+            if (mPath != null) {
+                mPath.addPath(newPath);
+            } else {
+                mPath = newPath;
+            }
+        }
+
+        private void parseSvgPathSpec(Region region, String spec) {
+            if (TextUtils.length(spec) < MINIMAL_ACCEPTABLE_PATH_LENGTH) {
+                Log.e(TAG, "According to SVG definition, it shouldn't happen");
+                return;
+            }
+            spec.trim();
+            translateMatrix();
+
+            final Path newPath = PathParser.createPathFromPathData(spec);
+            newPath.transform(mMatrix);
+            computeBoundsRectAndAddToRegion(newPath, region, mTmpRect);
+
+            if (DEBUG) {
+                Log.d(TAG, String.format(Locale.ENGLISH,
+                        "hasLeft = %b, hasRight = %b, hasBottom = %b, hasCenterVertical = %b",
+                        mPositionFromLeft, mPositionFromRight, mPositionFromBottom,
+                        mPositionFromCenterVertical));
+                Log.d(TAG, "region = " + region);
+                Log.d(TAG, "spec = \"" + spec + "\" rect = " + mTmpRect + " newPath = " + newPath);
+            }
+
+            if (mTmpRect.isEmpty()) {
+                return;
+            }
+
+            if (mIsShortEdgeOnTop) {
+                mIsTouchShortEdgeStart = mTmpRect.top <= 0;
+                mIsTouchShortEdgeEnd = mTmpRect.bottom >= mDisplayHeight;
+                mIsCloserToStartSide = mTmpRect.centerY() < mDisplayHeight / 2;
+            } else {
+                mIsTouchShortEdgeStart = mTmpRect.left <= 0;
+                mIsTouchShortEdgeEnd = mTmpRect.right >= mDisplayWidth;
+                mIsCloserToStartSide = mTmpRect.centerX() < mDisplayWidth / 2;
+            }
+
+            setEdgeCutout(newPath);
+        }
+
+        private void parseSpecWithoutDp(@NonNull String specWithoutDp) {
+            Region region = Region.obtain();
+            StringBuilder sb = null;
+            int currentIndex = 0;
+            int lastIndex = 0;
+            while ((currentIndex = specWithoutDp.indexOf(MARKER_START_CHAR, lastIndex)) != -1) {
+                if (sb == null) {
+                    sb = new StringBuilder(specWithoutDp.length());
+                }
+                sb.append(specWithoutDp, lastIndex, currentIndex);
+
+                if (specWithoutDp.startsWith(LEFT_MARKER, currentIndex)) {
+                    if (!mPositionFromRight) {
+                        mPositionFromLeft = true;
+                    }
+                    currentIndex += LEFT_MARKER.length();
+                } else if (specWithoutDp.startsWith(RIGHT_MARKER, currentIndex)) {
+                    if (!mPositionFromLeft) {
+                        mPositionFromRight = true;
+                    }
+                    currentIndex += RIGHT_MARKER.length();
+                } else if (specWithoutDp.startsWith(BOTTOM_MARKER, currentIndex)) {
+                    parseSvgPathSpec(region, sb.toString());
+                    currentIndex += BOTTOM_MARKER.length();
+
+                    /* prepare to parse the rest path */
+                    resetStatus(sb);
+                    mBindBottomCutout = true;
+                    mPositionFromBottom = true;
+                } else if (specWithoutDp.startsWith(CENTER_VERTICAL_MARKER, currentIndex)) {
+                    parseSvgPathSpec(region, sb.toString());
+                    currentIndex += CENTER_VERTICAL_MARKER.length();
+
+                    /* prepare to parse the rest path */
+                    resetStatus(sb);
+                    mPositionFromCenterVertical = true;
+                } else if (specWithoutDp.startsWith(CUTOUT_MARKER, currentIndex)) {
+                    parseSvgPathSpec(region, sb.toString());
+                    currentIndex += CUTOUT_MARKER.length();
+
+                    /* prepare to parse the rest path */
+                    resetStatus(sb);
+                } else if (specWithoutDp.startsWith(BIND_LEFT_CUTOUT_MARKER, currentIndex)) {
+                    mBindBottomCutout = false;
+                    mBindRightCutout = false;
+                    mBindLeftCutout = true;
+
+                    currentIndex += BIND_LEFT_CUTOUT_MARKER.length();
+                } else if (specWithoutDp.startsWith(BIND_RIGHT_CUTOUT_MARKER, currentIndex)) {
+                    mBindBottomCutout = false;
+                    mBindLeftCutout = false;
+                    mBindRightCutout = true;
+
+                    currentIndex += BIND_RIGHT_CUTOUT_MARKER.length();
+                } else {
+                    currentIndex += 1;
+                }
+
+                lastIndex = currentIndex;
+            }
+
+            if (sb == null) {
+                parseSvgPathSpec(region, specWithoutDp);
+            } else {
+                sb.append(specWithoutDp, lastIndex, specWithoutDp.length());
+                parseSvgPathSpec(region, sb.toString());
+            }
+
+            region.recycle();
+        }
+
+        /**
+         * To parse specification string as the CutoutSpecification.
+         *
+         * @param originalSpec the specification string
+         * @return the CutoutSpecification instance
+         */
+        @VisibleForTesting(visibility = PACKAGE)
+        public CutoutSpecification parse(@NonNull String originalSpec) {
+            Objects.requireNonNull(originalSpec);
+
+            int dpIndex = originalSpec.lastIndexOf(DP_MARKER);
+            mInDp = (dpIndex != -1);
+            final String spec;
+            if (dpIndex != -1) {
+                spec = originalSpec.substring(0, dpIndex)
+                        + originalSpec.substring(dpIndex + DP_MARKER.length());
+            } else {
+                spec = originalSpec;
+            }
+
+            parseSpecWithoutDp(spec);
+
+            mInsets = Insets.of(mSafeInsetLeft, mSafeInsetTop, mSafeInsetRight, mSafeInsetBottom);
+            return new CutoutSpecification(this);
+        }
+    }
+}
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index f61217d..d1edf58 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -67,7 +67,7 @@
  * </ul>
  * </p><p>
  * A logical display does not necessarily represent a particular physical display device
- * such as the built-in screen or an external monitor.  The contents of a logical
+ * such as the internal display or an external display.  The contents of a logical
  * display may be presented on one or more physical displays according to the devices
  * that are currently attached and whether mirroring has been enabled.
  * </p>
@@ -104,8 +104,7 @@
     private int mCachedAppHeightCompat;
 
     /**
-     * The default Display id, which is the id of the built-in primary display
-     * assuming there is one.
+     * The default Display id, which is the id of the primary display assuming there is one.
      */
     public static final int DEFAULT_DISPLAY = 0;
 
@@ -188,7 +187,7 @@
      * Display flag: Indicates that the display is a presentation display.
      * <p>
      * This flag identifies secondary displays that are suitable for
-     * use as presentation displays such as HDMI or Wireless displays.  Applications
+     * use as presentation displays such as external or wireless displays.  Applications
      * may automatically project their content to presentation displays to provide
      * richer second screen experiences.
      * </p>
@@ -257,17 +256,17 @@
     public static final int TYPE_UNKNOWN = 0;
 
     /**
-     * Display type: Built-in display.
+     * Display type: Physical display connected through an internal port.
      * @hide
      */
-    public static final int TYPE_BUILT_IN = 1;
+    public static final int TYPE_INTERNAL = 1;
 
     /**
-     * Display type: HDMI display.
+     * Display type: Physical display connected through an external port.
      * @hide
      */
     @UnsupportedAppUsage
-    public static final int TYPE_HDMI = 2;
+    public static final int TYPE_EXTERNAL = 2;
 
     /**
      * Display type: WiFi display.
@@ -562,8 +561,8 @@
      * @return The display type.
      *
      * @see #TYPE_UNKNOWN
-     * @see #TYPE_BUILT_IN
-     * @see #TYPE_HDMI
+     * @see #TYPE_INTERNAL
+     * @see #TYPE_EXTERNAL
      * @see #TYPE_WIFI
      * @see #TYPE_OVERLAY
      * @see #TYPE_VIRTUAL
@@ -1251,10 +1250,10 @@
         switch (type) {
             case TYPE_UNKNOWN:
                 return "UNKNOWN";
-            case TYPE_BUILT_IN:
-                return "BUILT_IN";
-            case TYPE_HDMI:
-                return "HDMI";
+            case TYPE_INTERNAL:
+                return "INTERNAL";
+            case TYPE_EXTERNAL:
+                return "EXTERNAL";
             case TYPE_WIFI:
                 return "WIFI";
             case TYPE_OVERLAY:
diff --git a/core/java/android/view/DisplayCutout.java b/core/java/android/view/DisplayCutout.java
index d433591..31fc161 100644
--- a/core/java/android/view/DisplayCutout.java
+++ b/core/java/android/view/DisplayCutout.java
@@ -31,18 +31,12 @@
 import android.annotation.Nullable;
 import android.content.res.Resources;
 import android.graphics.Insets;
-import android.graphics.Matrix;
 import android.graphics.Path;
 import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Region;
-import android.graphics.Region.Op;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.text.TextUtils;
-import android.util.Log;
 import android.util.Pair;
-import android.util.PathParser;
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.R;
@@ -63,10 +57,6 @@
 public final class DisplayCutout {
 
     private static final String TAG = "DisplayCutout";
-    private static final String BOTTOM_MARKER = "@bottom";
-    private static final String DP_MARKER = "@dp";
-    private static final String RIGHT_MARKER = "@right";
-    private static final String LEFT_MARKER = "@left";
 
     /**
      * Category for overlays that allow emulating a display cutout on devices that don't have
@@ -703,77 +693,16 @@
             }
         }
 
-        Path p = null;
-        Rect boundTop = null;
-        Rect boundBottom = null;
-        Rect safeInset = new Rect();
-        String bottomSpec = null;
-        if (!TextUtils.isEmpty(spec)) {
-            spec = spec.trim();
-            final float offsetX;
-            if (spec.endsWith(RIGHT_MARKER)) {
-                offsetX = displayWidth;
-                spec = spec.substring(0, spec.length() - RIGHT_MARKER.length()).trim();
-            } else if (spec.endsWith(LEFT_MARKER)) {
-                offsetX = 0;
-                spec = spec.substring(0, spec.length() - LEFT_MARKER.length()).trim();
-            } else {
-                offsetX = displayWidth / 2f;
-            }
-            final boolean inDp = spec.endsWith(DP_MARKER);
-            if (inDp) {
-                spec = spec.substring(0, spec.length() - DP_MARKER.length());
-            }
+        spec = spec.trim();
 
-            if (spec.contains(BOTTOM_MARKER)) {
-                String[] splits = spec.split(BOTTOM_MARKER, 2);
-                spec = splits[0].trim();
-                bottomSpec = splits[1].trim();
-            }
+        CutoutSpecification cutoutSpec = new CutoutSpecification.Parser(density,
+                displayWidth, displayHeight).parse(spec);
+        Rect safeInset = cutoutSpec.getSafeInset();
+        final Rect boundLeft = cutoutSpec.getLeftBound();
+        final Rect boundTop = cutoutSpec.getTopBound();
+        final Rect boundRight = cutoutSpec.getRightBound();
+        final Rect boundBottom = cutoutSpec.getBottomBound();
 
-            final Matrix m = new Matrix();
-            final Region r = Region.obtain();
-            if (!spec.isEmpty()) {
-                try {
-                    p = PathParser.createPathFromPathData(spec);
-                } catch (Throwable e) {
-                    Log.wtf(TAG, "Could not inflate cutout: ", e);
-                }
-
-                if (p != null) {
-                    if (inDp) {
-                        m.postScale(density, density);
-                    }
-                    m.postTranslate(offsetX, 0);
-                    p.transform(m);
-
-                    boundTop = new Rect();
-                    toRectAndAddToRegion(p, r, boundTop);
-                    safeInset.top = boundTop.bottom;
-                }
-            }
-
-            if (bottomSpec != null) {
-                int bottomInset = 0;
-                Path bottomPath = null;
-                try {
-                    bottomPath = PathParser.createPathFromPathData(bottomSpec);
-                } catch (Throwable e) {
-                    Log.wtf(TAG, "Could not inflate bottom cutout: ", e);
-                }
-
-                if (bottomPath != null) {
-                    // Keep top transform
-                    m.postTranslate(0, displayHeight);
-                    bottomPath.transform(m);
-                    p.addPath(bottomPath);
-                    boundBottom = new Rect();
-                    toRectAndAddToRegion(bottomPath, r, boundBottom);
-                    bottomInset = displayHeight - boundBottom.top;
-                }
-                safeInset.bottom = bottomInset;
-            }
-        }
 
         if (!waterfallInsets.equals(Insets.NONE)) {
             safeInset.set(
@@ -784,9 +713,9 @@
         }
 
         final DisplayCutout cutout = new DisplayCutout(
-                safeInset, waterfallInsets, null /* boundLeft */, boundTop,
-                null /* boundRight */, boundBottom, false /* copyArguments */);
-        final Pair<Path, DisplayCutout> result = new Pair<>(p, cutout);
+                safeInset, waterfallInsets, boundLeft, boundTop,
+                boundRight, boundBottom, false /* copyArguments */);
+        final Pair<Path, DisplayCutout> result = new Pair<>(cutoutSpec.getPath(), cutout);
         synchronized (CACHE_LOCK) {
             sCachedSpec = spec;
             sCachedDisplayWidth = displayWidth;
@@ -798,14 +727,6 @@
         return result;
     }
 
-    private static void toRectAndAddToRegion(Path p, Region inoutRegion, Rect inoutRect) {
-        final RectF rectF = new RectF();
-        p.computeBounds(rectF, false /* unused */);
-        rectF.round(inoutRect);
-        inoutRegion.op(inoutRect, Op.UNION);
-    }
-
-
     private static Insets loadWaterfallInset(Resources res) {
         return Insets.of(
                 res.getDimensionPixelSize(R.dimen.waterfall_display_left_edge_size),
diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java
index b9868a7..3047385 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -28,6 +28,7 @@
 import android.content.res.CompatibilityInfo;
 import android.content.res.Configuration;
 import android.graphics.Rect;
+import android.hardware.display.DeviceProductInfo;
 import android.os.Build;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -70,6 +71,13 @@
     public DisplayAddress address;
 
     /**
+     * Product-specific information about the display or the directly connected device on the
+     * display chain. For example, if the display is transitively connected, this field may contain
+     * product information about the intermediate device.
+     */
+    public DeviceProductInfo deviceProductInfo;
+
+    /**
      * The human-readable name of the display.
      */
     public String name;
@@ -297,6 +305,7 @@
                 && type == other.type
                 && displayId == other.displayId
                 && Objects.equals(address, other.address)
+                && Objects.equals(deviceProductInfo, other.deviceProductInfo)
                 && Objects.equals(uniqueId, other.uniqueId)
                 && appWidth == other.appWidth
                 && appHeight == other.appHeight
@@ -336,6 +345,7 @@
         type = other.type;
         displayId = other.displayId;
         address = other.address;
+        deviceProductInfo = other.deviceProductInfo;
         name = other.name;
         uniqueId = other.uniqueId;
         appWidth = other.appWidth;
@@ -373,6 +383,7 @@
         type = source.readInt();
         displayId = source.readInt();
         address = source.readParcelable(null);
+        deviceProductInfo = source.readParcelable(null);
         name = source.readString();
         appWidth = source.readInt();
         appHeight = source.readInt();
@@ -418,6 +429,7 @@
         dest.writeInt(type);
         dest.writeInt(displayId);
         dest.writeParcelable(address, flags);
+        dest.writeParcelable(deviceProductInfo, flags);
         dest.writeString(name);
         dest.writeInt(appWidth);
         dest.writeInt(appHeight);
@@ -645,6 +657,8 @@
         if (address != null) {
             sb.append(", address ").append(address);
         }
+        sb.append(", deviceProductInfo ");
+        sb.append(deviceProductInfo);
         sb.append(", state ");
         sb.append(Display.stateToString(state));
         if (ownerUid != 0 || ownerPackageName != null) {
diff --git a/core/java/android/view/HapticFeedbackConstants.java b/core/java/android/view/HapticFeedbackConstants.java
index 37b9eb3..c62e934 100644
--- a/core/java/android/view/HapticFeedbackConstants.java
+++ b/core/java/android/view/HapticFeedbackConstants.java
@@ -90,13 +90,11 @@
 
     /**
      * The user has started a gesture (e.g. on the soft keyboard).
-     * @hide
      */
     public static final int GESTURE_START = 12;
 
     /**
      * The user has finished a gesture (e.g. on the soft keyboard).
-     * @hide
      */
     public static final int GESTURE_END = 13;
 
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index f9a023f..1730347 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -97,6 +97,8 @@
 
     IWindowSession openSession(in IWindowSessionCallback callback);
 
+    boolean useBLAST();
+
     @UnsupportedAppUsage
     void getInitialDisplaySize(int displayId, out Point size);
     @UnsupportedAppUsage
diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java
index 360dedd..58e5b2d 100644
--- a/core/java/android/view/InputDevice.java
+++ b/core/java/android/view/InputDevice.java
@@ -16,6 +16,7 @@
 
 package android.view;
 
+import android.annotation.IntDef;
 import android.annotation.RequiresPermission;
 import android.annotation.TestApi;
 import android.compat.annotation.UnsupportedAppUsage;
@@ -28,6 +29,8 @@
 import android.os.Parcelable;
 import android.os.Vibrator;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -138,6 +141,19 @@
      */
     public static final int SOURCE_CLASS_JOYSTICK = 0x00000010;
 
+    /** @hide */
+    @IntDef(flag = true, prefix = { "SOURCE_CLASS_" }, value = {
+            SOURCE_CLASS_NONE,
+            SOURCE_CLASS_BUTTON,
+            SOURCE_CLASS_POINTER,
+            SOURCE_CLASS_POINTER,
+            SOURCE_CLASS_TRACKBALL,
+            SOURCE_CLASS_POSITION,
+            SOURCE_CLASS_JOYSTICK
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    @interface InputSourceClass {}
+
     /**
      * The input source is unknown.
      */
diff --git a/core/java/android/view/InsetsAnimationControlCallbacks.java b/core/java/android/view/InsetsAnimationControlCallbacks.java
index 0645c98..5d5edec 100644
--- a/core/java/android/view/InsetsAnimationControlCallbacks.java
+++ b/core/java/android/view/InsetsAnimationControlCallbacks.java
@@ -17,8 +17,7 @@
 package android.view;
 
 import android.view.InsetsController.LayoutInsetsDuringAnimation;
-import android.view.WindowInsetsAnimationCallback.AnimationBounds;
-import android.view.WindowInsetsAnimationCallback.InsetsAnimation;
+import android.view.WindowInsetsAnimation.Bounds;
 
 /**
  * Provide an interface to let InsetsAnimationControlImpl call back into its owner.
@@ -29,15 +28,16 @@
     /**
      * Executes the necessary code to start the animation in the correct order, including:
      * <ul>
-     *     <li>Dispatch {@link WindowInsetsAnimationCallback#onPrepare}</li>
+     *     <li>Dispatch {@link WindowInsetsAnimation.Callback#onPrepare}</li>
      *     <li>Update insets state and run layout according to {@code layoutDuringAnimation}</li>
-     *     <li>Dispatch {@link WindowInsetsAnimationCallback#onStart}</li>
+     *     <li>Dispatch {@link WindowInsetsAnimation.Callback#onStart}</li>
      *     <li>Dispatch {@link WindowInsetsAnimationControlListener#onReady}</li>
      * </ul>
      */
     void startAnimation(InsetsAnimationControlImpl controller,
-            WindowInsetsAnimationControlListener listener, int types, InsetsAnimation animation,
-            AnimationBounds bounds, @LayoutInsetsDuringAnimation int layoutDuringAnimation);
+            WindowInsetsAnimationControlListener listener, int types,
+            WindowInsetsAnimation animation,
+            Bounds bounds, @LayoutInsetsDuringAnimation int layoutDuringAnimation);
 
     /**
      * Schedule the apply by posting the animation callback.
diff --git a/core/java/android/view/InsetsAnimationControlImpl.java b/core/java/android/view/InsetsAnimationControlImpl.java
index 0653b06..0e037c2 100644
--- a/core/java/android/view/InsetsAnimationControlImpl.java
+++ b/core/java/android/view/InsetsAnimationControlImpl.java
@@ -35,8 +35,7 @@
 import android.view.InsetsState.InternalInsetsType;
 import android.view.SyncRtSurfaceTransactionApplier.SurfaceParams;
 import android.view.WindowInsets.Type.InsetsType;
-import android.view.WindowInsetsAnimationCallback.AnimationBounds;
-import android.view.WindowInsetsAnimationCallback.InsetsAnimation;
+import android.view.WindowInsetsAnimation.Bounds;
 import android.view.WindowManager.LayoutParams;
 import android.view.animation.Interpolator;
 
@@ -67,7 +66,7 @@
     private final InsetsState mInitialInsetsState;
     private final @InsetsType int mTypes;
     private final InsetsAnimationControlCallbacks mController;
-    private final WindowInsetsAnimationCallback.InsetsAnimation mAnimation;
+    private final WindowInsetsAnimation mAnimation;
     private final Rect mFrame;
     private final boolean mFade;
     private Insets mCurrentInsets;
@@ -100,11 +99,11 @@
         mFrame = new Rect(frame);
         buildTypeSourcesMap(mTypeSideMap, mSideSourceMap, mControls);
 
-        mAnimation = new WindowInsetsAnimationCallback.InsetsAnimation(mTypes, interpolator,
+        mAnimation = new WindowInsetsAnimation(mTypes, interpolator,
                 durationMs);
         mAnimation.setAlpha(getCurrentAlpha());
         mController.startAnimation(this, listener, types, mAnimation,
-                new AnimationBounds(mHiddenInsets, mShownInsets), layoutInsetsDuringAnimation);
+                new Bounds(mHiddenInsets, mShownInsets), layoutInsetsDuringAnimation);
     }
 
     @Override
@@ -212,7 +211,7 @@
         return mCancelled;
     }
 
-    InsetsAnimation getAnimation() {
+    WindowInsetsAnimation getAnimation() {
         return mAnimation;
     }
 
diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java
index 54de1bb..4a6a5a0 100644
--- a/core/java/android/view/InsetsController.java
+++ b/core/java/android/view/InsetsController.java
@@ -32,6 +32,7 @@
 import android.annotation.Nullable;
 import android.graphics.Insets;
 import android.graphics.Rect;
+import android.os.CancellationSignal;
 import android.os.Handler;
 import android.os.RemoteException;
 import android.util.ArraySet;
@@ -39,15 +40,13 @@
 import android.util.Pair;
 import android.util.Property;
 import android.util.SparseArray;
-import android.view.InputDevice.MotionRange;
 import android.view.InsetsSourceConsumer.ShowResult;
 import android.view.InsetsState.InternalInsetsType;
 import android.view.SurfaceControl.Transaction;
 import android.view.ViewTreeObserver.OnPreDrawListener;
 import android.view.WindowInsets.Type;
 import android.view.WindowInsets.Type.InsetsType;
-import android.view.WindowInsetsAnimationCallback.AnimationBounds;
-import android.view.WindowInsetsAnimationCallback.InsetsAnimation;
+import android.view.WindowInsetsAnimation.Bounds;
 import android.view.WindowManager.LayoutParams.SoftInputModeFlags;
 import android.view.animation.Interpolator;
 import android.view.animation.PathInterpolator;
@@ -58,6 +57,8 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 import java.util.function.BiFunction;
 
 /**
@@ -242,13 +243,15 @@
 
         PendingControlRequest(@InsetsType int types, WindowInsetsAnimationControlListener listener,
                 long durationMs, Interpolator interpolator, @AnimationType int animationType,
-                @LayoutInsetsDuringAnimation int layoutInsetsDuringAnimation) {
+                @LayoutInsetsDuringAnimation int layoutInsetsDuringAnimation,
+                CancellationSignal cancellationSignal) {
             this.types = types;
             this.listener = listener;
             this.durationMs = durationMs;
             this.interpolator = interpolator;
             this.animationType = animationType;
             this.layoutInsetsDuringAnimation = layoutInsetsDuringAnimation;
+            this.cancellationSignal = cancellationSignal;
         }
 
         final @InsetsType int types;
@@ -257,6 +260,7 @@
         final Interpolator interpolator;
         final @AnimationType int animationType;
         final @LayoutInsetsDuringAnimation int layoutInsetsDuringAnimation;
+        final CancellationSignal cancellationSignal;
     }
 
     private final String TAG = "InsetsControllerImpl";
@@ -272,6 +276,9 @@
 
     private final SparseArray<InsetsSourceControl> mTmpControlArray = new SparseArray<>();
     private final ArrayList<RunningAnimation> mRunningAnimations = new ArrayList<>();
+    private final ArrayList<WindowInsetsAnimation> mRunningInsetsAnimations = new ArrayList<>();
+    private final List<WindowInsetsAnimation> mUnmodifiableRunningInsetsAnimations =
+            Collections.unmodifiableList(mRunningInsetsAnimations);
     private final ArrayList<InsetsAnimationControlImpl> mTmpFinishedControls = new ArrayList<>();
     private WindowInsets mLastInsets;
 
@@ -334,10 +341,11 @@
                     mLastInsets.shouldAlwaysConsumeSystemBars(), mLastInsets.getDisplayCutout(),
                     mLastLegacyContentInsets, mLastLegacyStableInsets, mLastLegacySoftInputMode,
                     mLastLegacySystemUiFlags, null /* typeSideMap */);
-            mViewRoot.mView.dispatchWindowInsetsAnimationProgress(insets);
+            mViewRoot.mView.dispatchWindowInsetsAnimationProgress(insets,
+                    mUnmodifiableRunningInsetsAnimations);
 
             for (int i = mTmpFinishedControls.size() - 1; i >= 0; i--) {
-                dispatchAnimationFinished(mTmpFinishedControls.get(i).getAnimation());
+                dispatchAnimationEnd(mTmpFinishedControls.get(i).getAnimation());
             }
         };
     }
@@ -455,10 +463,13 @@
             PendingControlRequest pendingRequest = mPendingImeControlRequest;
             mPendingImeControlRequest = null;
             mHandler.removeCallbacks(mPendingControlTimeout);
-            controlAnimationUnchecked(pendingRequest.types, pendingRequest.listener, mFrame,
+            CancellationSignal cancellationSignal = controlAnimationUnchecked(
+                    pendingRequest.types,
+                    pendingRequest.listener, mFrame,
                     true /* fromIme */, pendingRequest.durationMs, pendingRequest.interpolator,
                     false /* fade */, pendingRequest.animationType,
                     pendingRequest.layoutInsetsDuringAnimation);
+            pendingRequest.cancellationSignal.setOnCancelListener(cancellationSignal::cancel);
             return;
         }
 
@@ -504,35 +515,39 @@
     }
 
     @Override
-    public void controlWindowInsetsAnimation(@InsetsType int types, long durationMs,
+    public CancellationSignal controlWindowInsetsAnimation(@InsetsType int types, long durationMs,
             @Nullable Interpolator interpolator,
             @NonNull WindowInsetsAnimationControlListener listener) {
-        controlWindowInsetsAnimation(types, listener, false /* fromIme */, durationMs, interpolator,
-                ANIMATION_TYPE_USER);
+        return controlWindowInsetsAnimation(types, listener, false /* fromIme */, durationMs,
+                interpolator, ANIMATION_TYPE_USER);
     }
 
-    private void controlWindowInsetsAnimation(@InsetsType int types,
+    private CancellationSignal controlWindowInsetsAnimation(@InsetsType int types,
             WindowInsetsAnimationControlListener listener, boolean fromIme, long durationMs,
             @Nullable Interpolator interpolator, @AnimationType int animationType) {
         // If the frame of our window doesn't span the entire display, the control API makes very
         // little sense, as we don't deal with negative insets. So just cancel immediately.
         if (!mState.getDisplayFrame().equals(mFrame)) {
             listener.onCancelled();
-            return;
+            CancellationSignal cancellationSignal = new CancellationSignal();
+            cancellationSignal.cancel();
+            return cancellationSignal;
         }
-        controlAnimationUnchecked(types, listener, mFrame, fromIme, durationMs, interpolator,
+        return controlAnimationUnchecked(types, listener, mFrame, fromIme, durationMs, interpolator,
                 false /* fade */, animationType, getLayoutInsetsDuringAnimationMode(types));
     }
 
-    private void controlAnimationUnchecked(@InsetsType int types,
+    private CancellationSignal controlAnimationUnchecked(@InsetsType int types,
             WindowInsetsAnimationControlListener listener, Rect frame, boolean fromIme,
             long durationMs, Interpolator interpolator, boolean fade,
             @AnimationType int animationType,
             @LayoutInsetsDuringAnimation int layoutInsetsDuringAnimation) {
+        CancellationSignal cancellationSignal = new CancellationSignal();
         if (types == 0) {
             // nothing to animate.
             listener.onCancelled();
-            return;
+            cancellationSignal.cancel();
+            return cancellationSignal;
         }
         cancelExistingControllers(types);
 
@@ -546,21 +561,32 @@
         if (!imeReady) {
             // IME isn't ready, all requested types will be animated once IME is ready
             abortPendingImeControlRequest();
-            mPendingImeControlRequest = new PendingControlRequest(types, listener, durationMs,
-                    interpolator, animationType, layoutInsetsDuringAnimation);
+            final PendingControlRequest request = new PendingControlRequest(types,
+                    listener, durationMs,
+                    interpolator, animationType, layoutInsetsDuringAnimation, cancellationSignal);
+            mPendingImeControlRequest = request;
             mHandler.postDelayed(mPendingControlTimeout, PENDING_CONTROL_TIMEOUT_MS);
-            return;
+            cancellationSignal.setOnCancelListener(() -> {
+                if (mPendingImeControlRequest == request) {
+                    abortPendingImeControlRequest();
+                }
+            });
+            return cancellationSignal;
         }
 
         if (typesReady == 0) {
             listener.onCancelled();
-            return;
+            cancellationSignal.cancel();
+            return cancellationSignal;
         }
 
         final InsetsAnimationControlImpl controller = new InsetsAnimationControlImpl(controls,
                 frame, mState, listener, typesReady, this, durationMs, interpolator, fade,
                 layoutInsetsDuringAnimation);
         mRunningAnimations.add(new RunningAnimation(controller, animationType));
+        mRunningInsetsAnimations.add(controller.getAnimation());
+        cancellationSignal.setOnCancelListener(controller::onCancelled);
+        return cancellationSignal;
     }
 
     /**
@@ -680,7 +706,14 @@
             }
             mApplier = new SyncRtSurfaceTransactionApplier(mViewRoot.mView);
         }
-        mApplier.scheduleApply(params);
+        if (mViewRoot.mView.isHardwareAccelerated()) {
+            mApplier.scheduleApply(params);
+        } else {
+            // Window doesn't support hardware acceleration, no synchronization for now.
+            // TODO(b/149342281): use mViewRoot.mSurface.getNextFrameNumber() to sync on every
+            //  frame instead.
+            mApplier.applyParams(new Transaction(), -1 /* frame */, params);
+        }
     }
 
     void notifyControlRevoked(InsetsSourceConsumer consumer) {
@@ -702,6 +735,7 @@
         for (int i = mRunningAnimations.size() - 1; i >= 0; i--) {
             if (mRunningAnimations.get(i).control == control) {
                 mRunningAnimations.remove(i);
+                mRunningInsetsAnimations.remove(i);
                 break;
             }
         }
@@ -848,13 +882,16 @@
     @VisibleForTesting
     @Override
     public void startAnimation(InsetsAnimationControlImpl controller,
-            WindowInsetsAnimationControlListener listener, int types, InsetsAnimation animation,
-            AnimationBounds bounds, int layoutDuringAnimation) {
+            WindowInsetsAnimationControlListener listener, int types,
+            WindowInsetsAnimation animation, Bounds bounds, int layoutDuringAnimation) {
         if (layoutDuringAnimation == LAYOUT_INSETS_DURING_ANIMATION_SHOWN) {
             showDirectly(types);
         } else {
             hideDirectly(types);
         }
+        if (mViewRoot.mView == null) {
+            return;
+        }
         mViewRoot.mView.dispatchWindowInsetsAnimationPrepare(animation);
         mViewRoot.mView.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
             @Override
@@ -874,8 +911,8 @@
     }
 
     @VisibleForTesting
-    public void dispatchAnimationFinished(InsetsAnimation animation) {
-        mViewRoot.mView.dispatchWindowInsetsAnimationFinish(animation);
+    public void dispatchAnimationEnd(WindowInsetsAnimation animation) {
+        mViewRoot.mView.dispatchWindowInsetsAnimationEnd(animation);
     }
 
     @VisibleForTesting
diff --git a/core/java/android/view/InsetsSource.java b/core/java/android/view/InsetsSource.java
index d4961ea..6caa4fe 100644
--- a/core/java/android/view/InsetsSource.java
+++ b/core/java/android/view/InsetsSource.java
@@ -198,7 +198,7 @@
         return "InsetsSource: {"
                 + "mType=" + InsetsState.typeToString(mType)
                 + ", mFrame=" + mFrame.toShortString()
-                + ", mVisible" + mVisible
+                + ", mVisible=" + mVisible
                 + "}";
     }
 
diff --git a/core/java/android/view/RenderNodeAnimator.java b/core/java/android/view/RenderNodeAnimator.java
index 06cb519..31fdfb7 100644
--- a/core/java/android/view/RenderNodeAnimator.java
+++ b/core/java/android/view/RenderNodeAnimator.java
@@ -16,528 +16,52 @@
 
 package android.view;
 
-import android.animation.Animator;
-import android.animation.TimeInterpolator;
-import android.animation.ValueAnimator;
-import android.compat.annotation.UnsupportedAppUsage;
+import android.annotation.NonNull;
 import android.graphics.CanvasProperty;
 import android.graphics.Paint;
-import android.graphics.RecordingCanvas;
-import android.graphics.RenderNode;
-import android.os.Handler;
-import android.os.Looper;
-import android.util.SparseIntArray;
-
-import com.android.internal.util.VirtualRefBasePtr;
-import com.android.internal.view.animation.FallbackLUTInterpolator;
-import com.android.internal.view.animation.HasNativeInterpolator;
-import com.android.internal.view.animation.NativeInterpolatorFactory;
-
-import java.util.ArrayList;
 
 /**
  * @hide
  */
-public class RenderNodeAnimator extends Animator {
-    // Keep in sync with enum RenderProperty in Animator.h
-    public static final int TRANSLATION_X = 0;
-    public static final int TRANSLATION_Y = 1;
-    public static final int TRANSLATION_Z = 2;
-    public static final int SCALE_X = 3;
-    public static final int SCALE_Y = 4;
-    public static final int ROTATION = 5;
-    public static final int ROTATION_X = 6;
-    public static final int ROTATION_Y = 7;
-    public static final int X = 8;
-    public static final int Y = 9;
-    public static final int Z = 10;
-    public static final int ALPHA = 11;
-    // The last value in the enum, used for array size initialization
-    public static final int LAST_VALUE = ALPHA;
+public class RenderNodeAnimator extends android.graphics.animation.RenderNodeAnimator
+        implements android.graphics.animation.RenderNodeAnimator.ViewListener {
 
-    // Keep in sync with enum PaintFields in Animator.h
-    public static final int PAINT_STROKE_WIDTH = 0;
-
-    /**
-     * Field for the Paint alpha channel, which should be specified as a value
-     * between 0 and 255.
-     */
-    public static final int PAINT_ALPHA = 1;
-
-    // ViewPropertyAnimator uses a mask for its values, we need to remap them
-    // to the enum values here. RenderPropertyAnimator can't use the mask values
-    // directly as internally it uses a lookup table so it needs the values to
-    // be sequential starting from 0
-    private static final SparseIntArray sViewPropertyAnimatorMap = new SparseIntArray(15) {{
-        put(ViewPropertyAnimator.TRANSLATION_X, TRANSLATION_X);
-        put(ViewPropertyAnimator.TRANSLATION_Y, TRANSLATION_Y);
-        put(ViewPropertyAnimator.TRANSLATION_Z, TRANSLATION_Z);
-        put(ViewPropertyAnimator.SCALE_X, SCALE_X);
-        put(ViewPropertyAnimator.SCALE_Y, SCALE_Y);
-        put(ViewPropertyAnimator.ROTATION, ROTATION);
-        put(ViewPropertyAnimator.ROTATION_X, ROTATION_X);
-        put(ViewPropertyAnimator.ROTATION_Y, ROTATION_Y);
-        put(ViewPropertyAnimator.X, X);
-        put(ViewPropertyAnimator.Y, Y);
-        put(ViewPropertyAnimator.Z, Z);
-        put(ViewPropertyAnimator.ALPHA, ALPHA);
-    }};
-
-    private VirtualRefBasePtr mNativePtr;
-
-    private Handler mHandler;
-    private RenderNode mTarget;
     private View mViewTarget;
-    private int mRenderProperty = -1;
-    private float mFinalValue;
-    private TimeInterpolator mInterpolator;
 
-    private static final int STATE_PREPARE = 0;
-    private static final int STATE_DELAYED = 1;
-    private static final int STATE_RUNNING = 2;
-    private static final int STATE_FINISHED = 3;
-    private int mState = STATE_PREPARE;
-
-    private long mUnscaledDuration = 300;
-    private long mUnscaledStartDelay = 0;
-    // If this is true, we will run any start delays on the UI thread. This is
-    // the safe default, and is necessary to ensure start listeners fire at
-    // the correct time. Animators created by RippleDrawable (the
-    // CanvasProperty<> ones) do not have this expectation, and as such will
-    // set this to false so that the renderthread handles the startdelay instead
-    private final boolean mUiThreadHandlesDelay;
-    private long mStartDelay = 0;
-    private long mStartTime;
-
-    @UnsupportedAppUsage
-    public static int mapViewPropertyToRenderProperty(int viewProperty) {
-        return sViewPropertyAnimatorMap.get(viewProperty);
-    }
-
-    @UnsupportedAppUsage
     public RenderNodeAnimator(int property, float finalValue) {
-        mRenderProperty = property;
-        mFinalValue = finalValue;
-        mUiThreadHandlesDelay = true;
-        init(nCreateAnimator(property, finalValue));
+        super(property, finalValue);
     }
 
-    @UnsupportedAppUsage
     public RenderNodeAnimator(CanvasProperty<Float> property, float finalValue) {
-        init(nCreateCanvasPropertyFloatAnimator(
-                property.getNativeContainer(), finalValue));
-        mUiThreadHandlesDelay = false;
+        super(property, finalValue);
     }
 
-    /**
-     * Creates a new render node animator for a field on a Paint property.
-     *
-     * @param property The paint property to target
-     * @param paintField Paint field to animate, one of {@link #PAINT_ALPHA} or
-     *            {@link #PAINT_STROKE_WIDTH}
-     * @param finalValue The target value for the property
-     */
-    @UnsupportedAppUsage
     public RenderNodeAnimator(CanvasProperty<Paint> property, int paintField, float finalValue) {
-        init(nCreateCanvasPropertyPaintAnimator(
-                property.getNativeContainer(), paintField, finalValue));
-        mUiThreadHandlesDelay = false;
+        super(property, paintField, finalValue);
     }
 
     public RenderNodeAnimator(int x, int y, float startRadius, float endRadius) {
-        init(nCreateRevealAnimator(x, y, startRadius, endRadius));
-        mUiThreadHandlesDelay = true;
-    }
-
-    private void init(long ptr) {
-        mNativePtr = new VirtualRefBasePtr(ptr);
-    }
-
-    private void checkMutable() {
-        if (mState != STATE_PREPARE) {
-            throw new IllegalStateException("Animator has already started, cannot change it now!");
-        }
-        if (mNativePtr == null) {
-            throw new IllegalStateException("Animator's target has been destroyed "
-                    + "(trying to modify an animation after activity destroy?)");
-        }
-    }
-
-    static boolean isNativeInterpolator(TimeInterpolator interpolator) {
-        return interpolator.getClass().isAnnotationPresent(HasNativeInterpolator.class);
-    }
-
-    private void applyInterpolator() {
-        if (mInterpolator == null || mNativePtr == null) return;
-
-        long ni;
-        if (isNativeInterpolator(mInterpolator)) {
-            ni = ((NativeInterpolatorFactory)mInterpolator).createNativeInterpolator();
-        } else {
-            long duration = nGetDuration(mNativePtr.get());
-            ni = FallbackLUTInterpolator.createNativeInterpolator(mInterpolator, duration);
-        }
-        nSetInterpolator(mNativePtr.get(), ni);
+        super(x, y, startRadius, endRadius);
     }
 
     @Override
-    public void start() {
-        if (mTarget == null) {
-            throw new IllegalStateException("Missing target!");
-        }
-
-        if (mState != STATE_PREPARE) {
-            throw new IllegalStateException("Already started!");
-        }
-
-        mState = STATE_DELAYED;
-        if (mHandler == null) {
-            mHandler = new Handler(true);
-        }
-        applyInterpolator();
-
-        if (mNativePtr == null) {
-            // It's dead, immediately cancel
-            cancel();
-        } else if (mStartDelay <= 0 || !mUiThreadHandlesDelay) {
-            nSetStartDelay(mNativePtr.get(), mStartDelay);
-            doStart();
-        } else {
-            getHelper().addDelayedAnimation(this);
-        }
-    }
-
-    private void doStart() {
+    public void onAlphaAnimationStart(float finalAlpha) {
         // Alpha is a special snowflake that has the canonical value stored
         // in mTransformationInfo instead of in RenderNode, so we need to update
         // it with the final value here.
-        if (mRenderProperty == RenderNodeAnimator.ALPHA) {
-            mViewTarget.ensureTransformationInfo();
-            mViewTarget.setAlphaInternal(mFinalValue);
-        }
-
-        moveToRunningState();
-
-        if (mViewTarget != null) {
-            // Kick off a frame to start the process
-            mViewTarget.invalidateViewProperty(true, false);
-        }
-    }
-
-    private void moveToRunningState() {
-        mState = STATE_RUNNING;
-        if (mNativePtr != null) {
-            nStart(mNativePtr.get());
-        }
-        notifyStartListeners();
-    }
-
-    private void notifyStartListeners() {
-        final ArrayList<AnimatorListener> listeners = cloneListeners();
-        final int numListeners = listeners == null ? 0 : listeners.size();
-        for (int i = 0; i < numListeners; i++) {
-            listeners.get(i).onAnimationStart(this);
-        }
+        mViewTarget.ensureTransformationInfo();
+        mViewTarget.setAlphaInternal(finalAlpha);
     }
 
     @Override
-    public void cancel() {
-        if (mState != STATE_PREPARE && mState != STATE_FINISHED) {
-            if (mState == STATE_DELAYED) {
-                getHelper().removeDelayedAnimation(this);
-                moveToRunningState();
-            }
-
-            final ArrayList<AnimatorListener> listeners = cloneListeners();
-            final int numListeners = listeners == null ? 0 : listeners.size();
-            for (int i = 0; i < numListeners; i++) {
-                listeners.get(i).onAnimationCancel(this);
-            }
-
-            end();
-        }
-    }
-
-    @Override
-    public void end() {
-        if (mState != STATE_FINISHED) {
-            if (mState < STATE_RUNNING) {
-                getHelper().removeDelayedAnimation(this);
-                doStart();
-            }
-            if (mNativePtr != null) {
-                nEnd(mNativePtr.get());
-                if (mViewTarget != null) {
-                    // Kick off a frame to flush the state change
-                    mViewTarget.invalidateViewProperty(true, false);
-                }
-            } else {
-                // It's already dead, jump to onFinish
-                onFinished();
-            }
-        }
-    }
-
-    @Override
-    public void pause() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void resume() {
-        throw new UnsupportedOperationException();
+    public void invalidateParent(boolean forceRedraw) {
+        mViewTarget.invalidateViewProperty(true, false);
     }
 
     /** @hide */
-    @UnsupportedAppUsage
-    public void setTarget(View view) {
+    public void setTarget(@NonNull View view) {
         mViewTarget = view;
+        setViewListener(this);
         setTarget(mViewTarget.mRenderNode);
     }
-
-    /** Sets the animation target to the owning view of the RecordingCanvas */
-    public void setTarget(RecordingCanvas canvas) {
-        setTarget(canvas.mNode);
-    }
-
-    /** @hide */
-    @UnsupportedAppUsage
-    public void setTarget(DisplayListCanvas canvas) {
-        setTarget((RecordingCanvas) canvas);
-    }
-
-    private void setTarget(RenderNode node) {
-        checkMutable();
-        if (mTarget != null) {
-            throw new IllegalStateException("Target already set!");
-        }
-        nSetListener(mNativePtr.get(), this);
-        mTarget = node;
-        mTarget.addAnimator(this);
-    }
-
-    @UnsupportedAppUsage
-    public void setStartValue(float startValue) {
-        checkMutable();
-        nSetStartValue(mNativePtr.get(), startValue);
-    }
-
-    @Override
-    public void setStartDelay(long startDelay) {
-        checkMutable();
-        if (startDelay < 0) {
-            throw new IllegalArgumentException("startDelay must be positive; " + startDelay);
-        }
-        mUnscaledStartDelay = startDelay;
-        mStartDelay = (long) (ValueAnimator.getDurationScale() * startDelay);
-    }
-
-    @Override
-    public long getStartDelay() {
-        return mUnscaledStartDelay;
-    }
-
-    @UnsupportedAppUsage
-    @Override
-    public RenderNodeAnimator setDuration(long duration) {
-        checkMutable();
-        if (duration < 0) {
-            throw new IllegalArgumentException("duration must be positive; " + duration);
-        }
-        mUnscaledDuration = duration;
-        nSetDuration(mNativePtr.get(), (long) (duration * ValueAnimator.getDurationScale()));
-        return this;
-    }
-
-    @Override
-    public long getDuration() {
-        return mUnscaledDuration;
-    }
-
-    @Override
-    public long getTotalDuration() {
-        return mUnscaledDuration + mUnscaledStartDelay;
-    }
-
-    @Override
-    public boolean isRunning() {
-        return mState == STATE_DELAYED || mState == STATE_RUNNING;
-    }
-
-    @Override
-    public boolean isStarted() {
-        return mState != STATE_PREPARE;
-    }
-
-    @Override
-    public void setInterpolator(TimeInterpolator interpolator) {
-        checkMutable();
-        mInterpolator = interpolator;
-    }
-
-    @Override
-    public TimeInterpolator getInterpolator() {
-        return mInterpolator;
-    }
-
-    protected void onFinished() {
-        if (mState == STATE_PREPARE) {
-            // Unlikely but possible, the native side has been destroyed
-            // before we have started.
-            releaseNativePtr();
-            return;
-        }
-        if (mState == STATE_DELAYED) {
-            getHelper().removeDelayedAnimation(this);
-            notifyStartListeners();
-        }
-        mState = STATE_FINISHED;
-
-        final ArrayList<AnimatorListener> listeners = cloneListeners();
-        final int numListeners = listeners == null ? 0 : listeners.size();
-        for (int i = 0; i < numListeners; i++) {
-            listeners.get(i).onAnimationEnd(this);
-        }
-
-        // Release the native object, as it has a global reference to us. This
-        // breaks the cyclic reference chain, and allows this object to be
-        // GC'd
-        releaseNativePtr();
-    }
-
-    private void releaseNativePtr() {
-        if (mNativePtr != null) {
-            mNativePtr.release();
-            mNativePtr = null;
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    private ArrayList<AnimatorListener> cloneListeners() {
-        ArrayList<AnimatorListener> listeners = getListeners();
-        if (listeners != null) {
-            listeners = (ArrayList<AnimatorListener>) listeners.clone();
-        }
-        return listeners;
-    }
-
-    public long getNativeAnimator() {
-        return mNativePtr.get();
-    }
-
-    /**
-     * @return true if the animator was started, false if still delayed
-     */
-    private boolean processDelayed(long frameTimeMs) {
-        if (mStartTime == 0) {
-            mStartTime = frameTimeMs;
-        } else if ((frameTimeMs - mStartTime) >= mStartDelay) {
-            doStart();
-            return true;
-        }
-        return false;
-    }
-
-    private static DelayedAnimationHelper getHelper() {
-        DelayedAnimationHelper helper = sAnimationHelper.get();
-        if (helper == null) {
-            helper = new DelayedAnimationHelper();
-            sAnimationHelper.set(helper);
-        }
-        return helper;
-    }
-
-    private static ThreadLocal<DelayedAnimationHelper> sAnimationHelper =
-            new ThreadLocal<DelayedAnimationHelper>();
-
-    private static class DelayedAnimationHelper implements Runnable {
-
-        private ArrayList<RenderNodeAnimator> mDelayedAnims = new ArrayList<RenderNodeAnimator>();
-        private final Choreographer mChoreographer;
-        private boolean mCallbackScheduled;
-
-        public DelayedAnimationHelper() {
-            mChoreographer = Choreographer.getInstance();
-        }
-
-        public void addDelayedAnimation(RenderNodeAnimator animator) {
-            mDelayedAnims.add(animator);
-            scheduleCallback();
-        }
-
-        public void removeDelayedAnimation(RenderNodeAnimator animator) {
-            mDelayedAnims.remove(animator);
-        }
-
-        private void scheduleCallback() {
-            if (!mCallbackScheduled) {
-                mCallbackScheduled = true;
-                mChoreographer.postCallback(Choreographer.CALLBACK_ANIMATION, this, null);
-            }
-        }
-
-        @Override
-        public void run() {
-            long frameTimeMs = mChoreographer.getFrameTime();
-            mCallbackScheduled = false;
-
-            int end = 0;
-            for (int i = 0; i < mDelayedAnims.size(); i++) {
-                RenderNodeAnimator animator = mDelayedAnims.get(i);
-                if (!animator.processDelayed(frameTimeMs)) {
-                    if (end != i) {
-                        mDelayedAnims.set(end, animator);
-                    }
-                    end++;
-                }
-            }
-            while (mDelayedAnims.size() > end) {
-                mDelayedAnims.remove(mDelayedAnims.size() - 1);
-            }
-
-            if (mDelayedAnims.size() > 0) {
-                scheduleCallback();
-            }
-        }
-    }
-
-    // Called by native
-    @UnsupportedAppUsage
-    private static void callOnFinished(RenderNodeAnimator animator) {
-        if (animator.mHandler != null) {
-            animator.mHandler.post(animator::onFinished);
-        } else {
-            new Handler(Looper.getMainLooper(), null, true).post(animator::onFinished);
-        }
-    }
-
-    @Override
-    public Animator clone() {
-        throw new IllegalStateException("Cannot clone this animator");
-    }
-
-    @Override
-    public void setAllowRunningAsynchronously(boolean mayRunAsync) {
-        checkMutable();
-        nSetAllowRunningAsync(mNativePtr.get(), mayRunAsync);
-    }
-
-    private static native long nCreateAnimator(int property, float finalValue);
-    private static native long nCreateCanvasPropertyFloatAnimator(
-            long canvasProperty, float finalValue);
-    private static native long nCreateCanvasPropertyPaintAnimator(
-            long canvasProperty, int paintField, float finalValue);
-    private static native long nCreateRevealAnimator(
-            int x, int y, float startRadius, float endRadius);
-
-    private static native void nSetStartValue(long nativePtr, float startValue);
-    private static native void nSetDuration(long nativePtr, long duration);
-    private static native long nGetDuration(long nativePtr);
-    private static native void nSetStartDelay(long nativePtr, long startDelay);
-    private static native void nSetInterpolator(long animPtr, long interpolatorPtr);
-    private static native void nSetAllowRunningAsync(long animPtr, boolean mayRunAsync);
-    private static native void nSetListener(long animPtr, RenderNodeAnimator listener);
-
-    private static native void nStart(long animPtr);
-    private static native void nEnd(long animPtr);
 }
diff --git a/core/java/android/view/RenderNodeAnimatorSetHelper.java b/core/java/android/view/RenderNodeAnimatorSetHelper.java
deleted file mode 100644
index d222e07..0000000
--- a/core/java/android/view/RenderNodeAnimatorSetHelper.java
+++ /dev/null
@@ -1,52 +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 android.view;
-
-import android.animation.TimeInterpolator;
-import android.graphics.RecordingCanvas;
-import android.graphics.RenderNode;
-
-import com.android.internal.view.animation.FallbackLUTInterpolator;
-import com.android.internal.view.animation.NativeInterpolatorFactory;
-import com.android.internal.view.animation.NativeInterpolatorFactoryHelper;
-
-/**
- * This is a helper class to get access to methods and fields needed for RenderNodeAnimatorSet
- * that are internal or package private to android.view package.
- *
- * @hide
- */
-public class RenderNodeAnimatorSetHelper {
-
-    /** checkstyle @hide */
-    public static RenderNode getTarget(RecordingCanvas recordingCanvas) {
-        return recordingCanvas.mNode;
-    }
-
-    /** checkstyle @hide */
-    public static long createNativeInterpolator(TimeInterpolator interpolator, long
-            duration) {
-        if (interpolator == null) {
-            // create LinearInterpolator
-            return NativeInterpolatorFactoryHelper.createLinearInterpolator();
-        } else if (RenderNodeAnimator.isNativeInterpolator(interpolator)) {
-            return ((NativeInterpolatorFactory)interpolator).createNativeInterpolator();
-        } else {
-            return FallbackLUTInterpolator.createNativeInterpolator(interpolator, duration);
-        }
-    }
-
-}
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index 78a080d..13d6dd6 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -16,6 +16,8 @@
 
 package android.view;
 
+import static android.system.OsConstants.EINVAL;
+
 import android.annotation.FloatRange;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
@@ -89,7 +91,8 @@
     private static native int nativeSetSharedBufferModeEnabled(long nativeObject, boolean enabled);
     private static native int nativeSetAutoRefreshEnabled(long nativeObject, boolean enabled);
 
-    private static native int nativeSetFrameRate(long nativeObject, float frameRate);
+    private static native int nativeSetFrameRate(
+            long nativeObject, float frameRate, int compatibility);
 
     public static final @android.annotation.NonNull Parcelable.Creator<Surface> CREATOR =
             new Parcelable.Creator<Surface>() {
@@ -184,6 +187,28 @@
      */
     public static final int ROTATION_270 = 3;
 
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = {"FRAME_RATE_COMPATIBILITY_"},
+            value = {FRAME_RATE_COMPATIBILITY_DEFAULT, FRAME_RATE_COMPATIBILITY_FIXED_SOURCE})
+    public @interface FrameRateCompatibility {}
+
+    // From native_window.h. Keep these in sync.
+    /**
+     * There are no inherent restrictions on the frame rate of this surface.
+     */
+    public static final int FRAME_RATE_COMPATIBILITY_DEFAULT = 0;
+
+    /**
+     * This surface is being used to display content with an inherently fixed frame rate,
+     * e.g. a video that has a specific frame rate. When the system selects a frame rate
+     * other than what the app requested, the app will need to do pull down or use some
+     * other technique to adapt to the system's frame rate. The user experience is likely
+     * to be worse (e.g. more frame stuttering) than it would be if the system had chosen
+     * the app's requested frame rate.
+     */
+    public static final int FRAME_RATE_COMPATIBILITY_FIXED_SOURCE = 1;
+
     /**
      * Create an empty surface, which will later be filled in by readFromParcel().
      * @hide
@@ -258,14 +283,14 @@
      */
     public void release() {
         synchronized (mLock) {
-            if (mNativeObject != 0) {
-                nativeRelease(mNativeObject);
-                setNativeObjectLocked(0);
-            }
             if (mHwuiContext != null) {
                 mHwuiContext.destroy();
                 mHwuiContext = null;
             }
+            if (mNativeObject != 0) {
+                nativeRelease(mNativeObject);
+                setNativeObjectLocked(0);
+            }
         }
     }
 
@@ -864,11 +889,23 @@
      * called. The frameRate param does *not* need to be a valid refresh rate for this
      * device's display - e.g., it's fine to pass 30fps to a device that can only run the
      * display at 60fps.
+     *
+     * @param compatibility The frame rate compatibility of this surface. The
+     * compatibility value may influence the system's choice of display frame rate. See
+     * the FRAME_RATE_COMPATIBILITY_* values for more info.
+     *
+     * @throws IllegalArgumentException If frameRate or compatibility are invalid.
      */
-    public void setFrameRate(@FloatRange(from = 0.0) float frameRate) {
-        int error = nativeSetFrameRate(mNativeObject, frameRate);
-        if (error != 0) {
-            throw new RuntimeException("Failed to set frame rate on Surface");
+    public void setFrameRate(
+            @FloatRange(from = 0.0) float frameRate, @FrameRateCompatibility int compatibility) {
+        synchronized (mLock) {
+            checkNotReleasedLocked();
+            int error = nativeSetFrameRate(mNativeObject, frameRate, compatibility);
+            if (error == -EINVAL) {
+                throw new IllegalArgumentException("Invalid argument to Surface.setFrameRate()");
+            } else if (error != 0) {
+                throw new RuntimeException("Failed to set frame rate on Surface");
+            }
         }
     }
 
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index fe9e36e..0816e84 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -41,6 +41,7 @@
 import android.graphics.Point;
 import android.graphics.Rect;
 import android.graphics.Region;
+import android.hardware.display.DeviceProductInfo;
 import android.hardware.display.DisplayedContentSample;
 import android.hardware.display.DisplayedContentSamplingAttributes;
 import android.os.Build;
@@ -213,7 +214,7 @@
             @Size(4) float[] spotColor, float lightPosY, float lightPosZ, float lightRadius);
 
     private static native void nativeSetFrameRate(
-            long transactionObj, long nativeObject, float frameRate);
+            long transactionObj, long nativeObject, float frameRate, int compatibility);
 
     private final CloseGuard mCloseGuard = CloseGuard.get();
     private String mName;
@@ -321,14 +322,12 @@
     public static final int FX_SURFACE_NORMAL   = 0x00000000;
 
     /**
-     * Surface creation flag: Creates a Dim surface.
-     * Everything behind this surface is dimmed by the amount specified
-     * in {@link Transaction#setAlpha(SurfaceControl, float)}.  It is an error to lock a Dim
-     * surface, since it doesn't have a backing store.
+     * Surface creation flag: Creates a effect surface which
+     * represents a solid color and or shadows.
      *
      * @hide
      */
-    public static final int FX_SURFACE_DIM = 0x00020000;
+    public static final int FX_SURFACE_EFFECT = 0x00020000;
 
     /**
      * Surface creation flag: Creates a container surface.
@@ -739,11 +738,11 @@
          */
         public Builder setColorLayer() {
             unsetBufferSize();
-            return setFlags(FX_SURFACE_DIM, FX_SURFACE_MASK);
+            return setFlags(FX_SURFACE_EFFECT, FX_SURFACE_MASK);
         }
 
         private boolean isColorLayerSet() {
-            return  (mFlags & FX_SURFACE_DIM) == FX_SURFACE_DIM;
+            return  (mFlags & FX_SURFACE_EFFECT) == FX_SURFACE_EFFECT;
         }
 
         /**
@@ -1285,12 +1284,17 @@
      * @hide
      */
     public static final class DisplayInfo {
+        public boolean isInternal;
         public float density;
         public boolean secure;
+        public DeviceProductInfo deviceProductInfo;
 
         @Override
         public String toString() {
-            return "DisplayInfo{density=" + density + ", secure=" + secure + "}";
+            return "DisplayInfo{isInternal=" + isInternal
+                    + ", density=" + density
+                    + ", secure=" + secure
+                    + ", deviceProductInfo=" + deviceProductInfo + "}";
         }
     }
 
@@ -2075,6 +2079,7 @@
 
         private final ArrayMap<SurfaceControl, Point> mResizedSurfaces = new ArrayMap<>();
         Runnable mFreeNativeResources;
+        private static final float[] INVALID_COLOR = {-1, -1, -1};
 
         /**
          * @hide
@@ -2530,8 +2535,9 @@
         }
 
         /**
-         * Sets a color for the Surface.
-         * @param color A float array with three values to represent r, g, b in range [0..1]
+         * Fills the surface with the specified color.
+         * @param color A float array with three values to represent r, g, b in range [0..1]. An
+         * invalid color will remove the color fill.
          * @hide
          */
         @UnsupportedAppUsage
@@ -2542,6 +2548,16 @@
         }
 
         /**
+         * Removes color fill.
+        * @hide
+        */
+        public Transaction unsetColor(SurfaceControl sc) {
+            checkPreconditions(sc);
+            nativeSetColor(mNativeObject, sc.mNativeObject, INVALID_COLOR);
+            return this;
+        }
+
+        /**
          * Sets the security of the surface.  Setting the flag is equivalent to creating the
          * Surface with the {@link #SECURE} flag.
          * @hide
@@ -2722,13 +2738,17 @@
          *                  isn't called. The frameRate param does *not* need to be a valid refresh
          *                  rate for this device's display - e.g., it's fine to pass 30fps to a
          *                  device that can only run the display at 60fps.
+         * @param compatibility The frame rate compatibility of this surface. The compatibility
+         *                      value may influence the system's choice of display frame rate. See
+         *                      the Surface.FRAME_RATE_COMPATIBILITY_* values for more info.
          * @return This transaction object.
          */
         @NonNull
-        public Transaction setFrameRate(
-                @NonNull SurfaceControl sc, @FloatRange(from = 0.0) float frameRate) {
+        public Transaction setFrameRate(@NonNull SurfaceControl sc,
+                @FloatRange(from = 0.0) float frameRate,
+                @Surface.FrameRateCompatibility int compatibility) {
             checkPreconditions(sc);
-            nativeSetFrameRate(mNativeObject, sc.mNativeObject, frameRate);
+            nativeSetFrameRate(mNativeObject, sc.mNativeObject, frameRate, compatibility);
             return this;
         }
 
diff --git a/core/java/android/view/SurfaceControlViewHost.aidl b/core/java/android/view/SurfaceControlViewHost.aidl
new file mode 100644
index 0000000..3b31ab8
--- /dev/null
+++ b/core/java/android/view/SurfaceControlViewHost.aidl
@@ -0,0 +1,19 @@
+/**
+ * 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;
+
+parcelable SurfaceControlViewHost.SurfacePackage;
\ No newline at end of file
diff --git a/core/java/android/view/SurfaceControlViewHost.java b/core/java/android/view/SurfaceControlViewHost.java
index bf84819..680a878 100644
--- a/core/java/android/view/SurfaceControlViewHost.java
+++ b/core/java/android/view/SurfaceControlViewHost.java
@@ -24,6 +24,7 @@
 import android.os.IBinder;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.view.accessibility.IAccessibilityEmbeddedConnection;
 
 /**
  * Utility class for adding a View hierarchy to a {@link SurfaceControl}. The View hierarchy
@@ -40,6 +41,7 @@
     private WindowlessWindowManager mWm;
 
     private SurfaceControl mSurfaceControl;
+    private IAccessibilityEmbeddedConnection mAccessibilityEmbeddedConnection;
 
     /**
      * Package encapsulating a Surface hierarchy which contains interactive view
@@ -49,15 +51,18 @@
      */
     public static final class SurfacePackage implements Parcelable {
         private final SurfaceControl mSurfaceControl;
-        // TODO: Accessibility ID goes here
+        private final IAccessibilityEmbeddedConnection mAccessibilityEmbeddedConnection;
 
-        SurfacePackage(SurfaceControl sc) {
+        SurfacePackage(SurfaceControl sc, IAccessibilityEmbeddedConnection connection) {
             mSurfaceControl = sc;
+            mAccessibilityEmbeddedConnection = connection;
         }
 
         private SurfacePackage(Parcel in) {
             mSurfaceControl = new SurfaceControl();
             mSurfaceControl.readFromParcel(in);
+            mAccessibilityEmbeddedConnection = IAccessibilityEmbeddedConnection.Stub.asInterface(
+                    in.readStrongBinder());
         }
 
         /**
@@ -69,6 +74,16 @@
             return mSurfaceControl;
         }
 
+        /**
+         * Gets an accessibility embedded connection interface for this SurfaceControlViewHost.
+         *
+         * @return {@link IAccessibilityEmbeddedConnection} interface.
+         * @hide
+         */
+        public IAccessibilityEmbeddedConnection getAccessibilityEmbeddedConnection() {
+            return mAccessibilityEmbeddedConnection;
+        }
+
         @Override
         public int describeContents() {
             return 0;
@@ -77,6 +92,7 @@
         @Override
         public void writeToParcel(@NonNull Parcel out, int flags) {
             mSurfaceControl.writeToParcel(out, flags);
+            out.writeStrongBinder(mAccessibilityEmbeddedConnection.asBinder());
         }
 
         public static final @NonNull Creator<SurfacePackage> CREATOR
@@ -95,6 +111,7 @@
             @NonNull WindowlessWindowManager wwm) {
         mWm = wwm;
         mViewRoot = new ViewRootImpl(c, d, mWm);
+        mAccessibilityEmbeddedConnection = mViewRoot.getAccessibilityEmbeddedConnection();
     }
 
     /**
@@ -118,6 +135,7 @@
         mWm = new WindowlessWindowManager(context.getResources().getConfiguration(),
                 mSurfaceControl, hostToken);
         mViewRoot = new ViewRootImpl(context, display, mWm);
+        mAccessibilityEmbeddedConnection = mViewRoot.getAccessibilityEmbeddedConnection();
     }
 
     /**
@@ -128,8 +146,8 @@
      * are linked.
      */
     public @Nullable SurfacePackage getSurfacePackage() {
-        if (mSurfaceControl != null) {
-            return new SurfacePackage(mSurfaceControl);
+        if (mSurfaceControl != null && mAccessibilityEmbeddedConnection != null) {
+            return new SurfacePackage(mSurfaceControl, mAccessibilityEmbeddedConnection);
         } else {
             return null;
         }
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 75d5538..deff79d5 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -22,13 +22,13 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.annotation.TestApi;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.content.res.CompatibilityInfo.Translator;
 import android.graphics.BlendMode;
 import android.graphics.Canvas;
 import android.graphics.Color;
+import android.graphics.Matrix;
 import android.graphics.Paint;
 import android.graphics.PixelFormat;
 import android.graphics.PorterDuff;
@@ -39,12 +39,14 @@
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
+import android.os.RemoteException;
 import android.os.SystemClock;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.SurfaceControl.Transaction;
-import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.SurfaceControlViewHost;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.IAccessibilityEmbeddedConnection;
 
 import com.android.internal.view.SurfaceCallbackHelper;
 
@@ -204,8 +206,12 @@
     private SurfaceControl.Transaction mTmpTransaction = new SurfaceControl.Transaction();
     private int mParentSurfaceGenerationId;
 
-    // The token of embedded windowless view hierarchy.
-    private IBinder mEmbeddedViewHierarchy;
+    private RemoteAccessibilityEmbeddedConnection mRemoteAccessibilityEmbeddedConnection;
+
+    private final Matrix mScreenMatrixForEmbeddedHierarchy = new Matrix();
+    private final Matrix mTmpMatrix = new Matrix();
+    private final float[] mMatrixValues = new float[9];
+
     SurfaceControlViewHost.SurfacePackage mSurfacePackage;
 
     public SurfaceView(Context context) {
@@ -386,7 +392,7 @@
                  * This gets called on a RenderThread worker thread, so members accessed here must
                  * be protected by a lock.
                  */
-                final boolean useBLAST = WindowManagerGlobal.USE_BLAST_ADAPTER;
+                final boolean useBLAST = WindowManagerGlobal.useBLAST();
                 viewRoot.registerRtFrameCallback(frame -> {
                     try {
                         final SurfaceControl.Transaction t = useBLAST ?
@@ -782,9 +788,16 @@
         final boolean sizeChanged = mSurfaceWidth != myWidth || mSurfaceHeight != myHeight;
         final boolean windowVisibleChanged = mWindowVisibility != mLastWindowVisibility;
         boolean redrawNeeded = false;
+        getLocationInSurface(mLocation);
+        final boolean positionChanged = mWindowSpaceLeft != mLocation[0]
+            || mWindowSpaceTop != mLocation[1];
+        final boolean layoutSizeChanged = getWidth() != mScreenRect.width()
+            || getHeight() != mScreenRect.height();
 
-        if (creating || formatChanged || sizeChanged || visibleChanged || (mUseAlpha
-                && alphaChanged) || windowVisibleChanged) {
+
+        if (creating || formatChanged || sizeChanged || visibleChanged ||
+                (mUseAlpha && alphaChanged) || windowVisibleChanged ||
+                positionChanged || layoutSizeChanged) {
             getLocationInWindow(mLocation);
 
             if (DEBUG) Log.i(TAG, System.identityHashCode(this) + " "
@@ -916,6 +929,9 @@
                             mTmpTransaction.setWindowCrop(mSurfaceControl, mSurfaceWidth,
                                     mSurfaceHeight);
                         }
+                    } else if ((layoutSizeChanged || positionChanged) &&
+                            WindowManagerGlobal.useBLAST()) {
+                        viewRoot.setUseBLASTSyncTransaction();
                     }
                     mTmpTransaction.setCornerRadius(mSurfaceControl, mCornerRadius);
                     if (sizeChanged && !creating) {
@@ -924,6 +940,7 @@
                     }
 
                     mTmpTransaction.apply();
+                    updateScreenMatrixForEmbeddedHierarchy();
 
                     if (sizeChanged || creating) {
                         redrawNeeded = true;
@@ -1051,11 +1068,6 @@
         } else {
             // Calculate the window position in case RT loses the window
             // and we need to fallback to a UI-thread driven position update
-            getLocationInSurface(mLocation);
-            final boolean positionChanged = mWindowSpaceLeft != mLocation[0]
-                    || mWindowSpaceTop != mLocation[1];
-            final boolean layoutSizeChanged = getWidth() != mScreenRect.width()
-                    || getHeight() != mScreenRect.height();
             if (positionChanged || layoutSizeChanged) { // Only the position has changed
                 mWindowSpaceLeft = mLocation[0];
                 mWindowSpaceTop = mLocation[1];
@@ -1120,7 +1132,7 @@
 
     private void applySurfaceTransforms(SurfaceControl surface, SurfaceControl.Transaction t,
             Rect position, long frameNumber) {
-        if (frameNumber > 0 && !WindowManagerGlobal.USE_BLAST_ADAPTER) {
+        if (frameNumber > 0 && !WindowManagerGlobal.useBLAST()) {
             final ViewRootImpl viewRoot = getViewRootImpl();
 
             t.deferTransactionUntil(surface, viewRoot.getRenderSurfaceControl(),
@@ -1138,7 +1150,7 @@
     }
 
     private void setParentSpaceRectangle(Rect position, long frameNumber) {
-        final boolean useBLAST = WindowManagerGlobal.USE_BLAST_ADAPTER;
+        final boolean useBLAST = WindowManagerGlobal.useBLAST();
         final ViewRootImpl viewRoot = getViewRootImpl();
         final SurfaceControl.Transaction t = useBLAST ? viewRoot.getBLASTSyncTransaction() :
             mRtTransaction;
@@ -1199,7 +1211,7 @@
 
         @Override
         public void positionLost(long frameNumber) {
-            boolean useBLAST = WindowManagerGlobal.USE_BLAST_ADAPTER;
+            boolean useBLAST = WindowManagerGlobal.useBLAST();
             if (DEBUG) {
                 Log.d(TAG, String.format("%d windowPositionLost, frameNr = %d",
                         System.identityHashCode(this), frameNumber));
@@ -1511,6 +1523,7 @@
     @Override
     public void surfaceDestroyed() {
         setWindowStopped(true);
+        setRemoteAccessibilityEmbeddedConnection(null, null);
     }
 
     /**
@@ -1532,21 +1545,6 @@
     }
 
     /**
-     * @hide
-     * Note: Base class method is @UnsupportedAppUsage
-     */
-    @Override
-    public void invalidate(boolean invalidateCache) {
-        super.invalidate(invalidateCache);
-        if (!WindowManagerGlobal.USE_BLAST_ADAPTER) {
-            return;
-        }
-        final ViewRootImpl viewRoot = getViewRootImpl();
-        if (viewRoot == null) return;
-        viewRoot.setUseBLASTSyncTransaction();
-    }
-
-    /**
      * Display the view-hierarchy embedded within a {@link SurfaceControlViewHost.SurfacePackage}
      * within this SurfaceView. If this SurfaceView is above it's host Surface (see
      * {@link #setZOrderOnTop} then the embedded Surface hierarchy will be able to receive
@@ -1569,30 +1567,134 @@
 
     private void reparentSurfacePackage(SurfaceControl.Transaction t,
             SurfaceControlViewHost.SurfacePackage p) {
-        // TODO: Link accessibility IDs here.
-        t.reparent(p.getSurfaceControl(), mSurfaceControl);
-    }
-
-    /**
-     * Add the token of embedded view hierarchy. Set {@code null} to clear the embedded view
-     * hierarchy.
-     *
-     * @param token IBinder token.
-     * @hide
-     */
-    public void setEmbeddedViewHierarchy(IBinder token) {
-        mEmbeddedViewHierarchy = token;
+        initEmbeddedHierarchyForAccessibility(p);
+        final SurfaceControl sc = p.getSurfaceControl();
+        t.reparent(sc, mSurfaceControl).show(sc);
     }
 
     /** @hide */
     @Override
     public void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
         super.onInitializeAccessibilityNodeInfoInternal(info);
-        if (mEmbeddedViewHierarchy == null) {
+        final RemoteAccessibilityEmbeddedConnection wrapper =
+                getRemoteAccessibilityEmbeddedConnection();
+        if (wrapper == null) {
             return;
         }
         // Add a leashed child when this SurfaceView embeds another view hierarchy. Getting this
         // leashed child would return the root node in the embedded hierarchy
-        info.addChild(mEmbeddedViewHierarchy);
+        info.addChild(wrapper.getLeashToken());
+    }
+
+    private void initEmbeddedHierarchyForAccessibility(SurfaceControlViewHost.SurfacePackage p) {
+        final IAccessibilityEmbeddedConnection connection = p.getAccessibilityEmbeddedConnection();
+        final RemoteAccessibilityEmbeddedConnection wrapper =
+                getRemoteAccessibilityEmbeddedConnection();
+
+        // Do nothing if package is embedding the same view hierarchy.
+        if (wrapper != null && wrapper.getConnection().equals(connection)) {
+            return;
+        }
+
+        // If this SurfaceView embeds a different view hierarchy, unlink the previous one first.
+        setRemoteAccessibilityEmbeddedConnection(null, null);
+
+        try {
+            final IBinder leashToken = connection.associateEmbeddedHierarchy(
+                    getViewRootImpl().mLeashToken, getAccessibilityViewId());
+            setRemoteAccessibilityEmbeddedConnection(connection, leashToken);
+        } catch (RemoteException e) {
+            Log.d(TAG, "Error while associateEmbeddedHierarchy " + e);
+        }
+        updateScreenMatrixForEmbeddedHierarchy();
+    }
+
+    private void setRemoteAccessibilityEmbeddedConnection(
+            IAccessibilityEmbeddedConnection connection, IBinder leashToken) {
+        try {
+            if (mRemoteAccessibilityEmbeddedConnection != null) {
+                mRemoteAccessibilityEmbeddedConnection.getConnection()
+                        .disassociateEmbeddedHierarchy();
+                mRemoteAccessibilityEmbeddedConnection.unlinkToDeath();
+                mRemoteAccessibilityEmbeddedConnection = null;
+            }
+            if (connection != null && leashToken != null) {
+                mRemoteAccessibilityEmbeddedConnection =
+                        new RemoteAccessibilityEmbeddedConnection(connection, leashToken);
+                mRemoteAccessibilityEmbeddedConnection.linkToDeath();
+            }
+        } catch (RemoteException e) {
+            Log.d(TAG, "Error while setRemoteEmbeddedConnection " + e);
+        }
+    }
+
+    private RemoteAccessibilityEmbeddedConnection getRemoteAccessibilityEmbeddedConnection() {
+        return mRemoteAccessibilityEmbeddedConnection;
+    }
+
+    private void updateScreenMatrixForEmbeddedHierarchy() {
+        getBoundsOnScreen(mTmpRect, true);
+        mTmpMatrix.reset();
+        mTmpMatrix.setTranslate(mTmpRect.left, mTmpRect.top);
+        mTmpMatrix.postScale(mScreenRect.width() / (float) mSurfaceWidth,
+                mScreenRect.height() / (float) mSurfaceHeight);
+
+        // If the screen matrix is identity or doesn't change, do nothing.
+        if (mTmpMatrix.isIdentity() || mTmpMatrix.equals(mScreenMatrixForEmbeddedHierarchy)) {
+            return;
+        }
+
+        try {
+            final RemoteAccessibilityEmbeddedConnection wrapper =
+                    getRemoteAccessibilityEmbeddedConnection();
+            if (wrapper == null) {
+                return;
+            }
+            mTmpMatrix.getValues(mMatrixValues);
+            wrapper.getConnection().setScreenMatrix(mMatrixValues);
+            mScreenMatrixForEmbeddedHierarchy.set(mTmpMatrix);
+        } catch (RemoteException e) {
+            Log.d(TAG, "Error while setScreenMatrix " + e);
+        }
+    }
+
+    /**
+     * Wrapper of accessibility embedded connection for embedded view hierarchy.
+     */
+    private final class RemoteAccessibilityEmbeddedConnection implements IBinder.DeathRecipient {
+        private final IAccessibilityEmbeddedConnection mConnection;
+        private final IBinder mLeashToken;
+
+        RemoteAccessibilityEmbeddedConnection(IAccessibilityEmbeddedConnection connection,
+                IBinder leashToken) {
+            mConnection = connection;
+            mLeashToken = leashToken;
+        }
+
+        IAccessibilityEmbeddedConnection getConnection() {
+            return mConnection;
+        }
+
+        IBinder getLeashToken() {
+            return mLeashToken;
+        }
+
+        void linkToDeath() throws RemoteException {
+            mConnection.asBinder().linkToDeath(this, 0);
+        }
+
+        void unlinkToDeath() {
+            mConnection.asBinder().unlinkToDeath(this, 0);
+        }
+
+        @Override
+        public void binderDied() {
+            unlinkToDeath();
+            runOnUiThread(() -> {
+                if (mRemoteAccessibilityEmbeddedConnection == this) {
+                    mRemoteAccessibilityEmbeddedConnection = null;
+                }
+            });
+        }
     }
 }
diff --git a/core/java/android/view/SyncRtSurfaceTransactionApplier.java b/core/java/android/view/SyncRtSurfaceTransactionApplier.java
index abe44f4..15252b1 100644
--- a/core/java/android/view/SyncRtSurfaceTransactionApplier.java
+++ b/core/java/android/view/SyncRtSurfaceTransactionApplier.java
@@ -65,20 +65,33 @@
                 return;
             }
             Transaction t = new Transaction();
-            for (int i = params.length - 1; i >= 0; i--) {
-                SurfaceParams surfaceParams = params[i];
-                SurfaceControl surface = surfaceParams.surface;
-                t.deferTransactionUntil(surface, mTargetSc, frame);
-                applyParams(t, surfaceParams, mTmpFloat9);
-            }
-            t.setEarlyWakeup();
-            t.apply();
+            applyParams(t, frame, params);
         });
 
         // Make sure a frame gets scheduled.
         mTargetViewRootImpl.getView().invalidate();
     }
 
+    /**
+     * Applies surface parameters on the next frame.
+     * @param t transaction to apply all parameters in.
+     * @param frame frame to synchronize to. Set -1 when sync is not required.
+     * @param params The surface parameters to apply. DO NOT MODIFY the list after passing into
+     *               this method to avoid synchronization issues.
+     */
+    void applyParams(Transaction t, long frame, final SurfaceParams... params) {
+        for (int i = params.length - 1; i >= 0; i--) {
+            SurfaceParams surfaceParams = params[i];
+            SurfaceControl surface = surfaceParams.surface;
+            if (frame > 0) {
+                t.deferTransactionUntil(surface, mTargetSc, frame);
+            }
+            applyParams(t, surfaceParams, mTmpFloat9);
+        }
+        t.setEarlyWakeup();
+        t.apply();
+    }
+
     public static void applyParams(Transaction t, SurfaceParams params, float[] tmpFloat9) {
         if ((params.flags & FLAG_MATRIX) != 0) {
             t.setMatrix(params.surface, params.matrix, tmpFloat9);
diff --git a/core/java/android/view/VerifiedInputEvent.aidl b/core/java/android/view/VerifiedInputEvent.aidl
new file mode 100644
index 0000000..41608d8
--- /dev/null
+++ b/core/java/android/view/VerifiedInputEvent.aidl
@@ -0,0 +1,19 @@
+/*
+ * 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;
+
+parcelable VerifiedInputEvent;
diff --git a/core/java/android/view/VerifiedInputEvent.java b/core/java/android/view/VerifiedInputEvent.java
new file mode 100644
index 0000000..531b3ed
--- /dev/null
+++ b/core/java/android/view/VerifiedInputEvent.java
@@ -0,0 +1,162 @@
+/*
+ * 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;
+
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.SuppressLint;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.annotation.Retention;
+
+
+/**
+ * Base class for verified events.
+ * Verified events contain the subset of an InputEvent that the system can verify.
+ * Data contained inside VerifiedInputEvent's should be considered trusted and contain only
+ * the original event data that first came from the system.
+ *
+ * @see android.hardware.input.InputManager#verifyInputEvent(InputEvent)
+ */
+@SuppressLint("ParcelNotFinal")
+public abstract class VerifiedInputEvent implements Parcelable {
+    private static final String TAG = "VerifiedInputEvent";
+
+    /** @hide */
+    protected static final int VERIFIED_KEY = 1;
+    /** @hide */
+    protected static final int VERIFIED_MOTION = 2;
+
+    /** @hide */
+    @Retention(SOURCE)
+    @IntDef(prefix = "VERIFIED", value = {VERIFIED_KEY, VERIFIED_MOTION})
+    public @interface VerifiedInputEventType {};
+
+    @VerifiedInputEventType
+    private int mType;
+
+    private int mDeviceId;
+    private long mEventTimeNanos;
+    private int mSource;
+    private int mDisplayId;
+
+    /** @hide */
+    protected VerifiedInputEvent(int type, int deviceId, long eventTimeNanos, int source,
+            int displayId) {
+        mType = type;
+        mDeviceId = deviceId;
+        mEventTimeNanos = eventTimeNanos;
+        mSource = source;
+        mDisplayId = displayId;
+    }
+    /** @hide */
+    protected VerifiedInputEvent(@NonNull Parcel in, int expectedType) {
+        mType = in.readInt();
+        if (mType != expectedType) {
+            throw new IllegalArgumentException("Unexpected input event type token in parcel.");
+        }
+        mDeviceId = in.readInt();
+        mEventTimeNanos = in.readLong();
+        mSource = in.readInt();
+        mDisplayId = in.readInt();
+    }
+
+    /**
+     * Get the id of the device that generated this event.
+     *
+     * @see InputEvent#getDeviceId()
+     */
+    public int getDeviceId() {
+        return mDeviceId;
+    }
+
+    /**
+     * Get the time this event occurred, in the {@link android.os.SystemClock#uptimeMillis()}
+     * time base.
+     *
+     * @see InputEvent#getEventTime()
+     * @see KeyEvent#getEventTimeNano()
+     * @see MotionEvent#getEventTimeNano()
+     */
+    @SuppressLint("MethodNameUnits")
+    public long getEventTimeNanos() {
+        return mEventTimeNanos;
+    }
+
+    /**
+     * Get the source of the event.
+     *
+     * @see InputEvent#getSource()
+     */
+    public int getSource() {
+        return mSource;
+    }
+
+    /**
+     * Get the display id that is associated with this event.
+     *
+     * @see Display#getDisplayId()
+     */
+    public int getDisplayId() {
+        return mDisplayId;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeInt(mType);
+        dest.writeInt(mDeviceId);
+        dest.writeLong(mEventTimeNanos);
+        dest.writeInt(mSource);
+        dest.writeInt(mDisplayId);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    private static int peekInt(@NonNull Parcel parcel) {
+        final int initialDataPosition = parcel.dataPosition();
+        int data = parcel.readInt();
+        parcel.setDataPosition(initialDataPosition);
+        return data;
+    }
+
+    public static final @NonNull Parcelable.Creator<VerifiedInputEvent> CREATOR =
+            new Parcelable.Creator<VerifiedInputEvent>() {
+        @Override
+        public VerifiedInputEvent[] newArray(int size) {
+            return new VerifiedInputEvent[size];
+        }
+
+        @Override
+        public VerifiedInputEvent createFromParcel(@NonNull Parcel in) {
+            final int type = peekInt(in);
+            if (type == VERIFIED_KEY) {
+                return VerifiedKeyEvent.CREATOR.createFromParcel(in);
+            } else if (type == VERIFIED_MOTION) {
+                return VerifiedMotionEvent.CREATOR.createFromParcel(in);
+            }
+            throw new IllegalArgumentException("Unexpected input event type in parcel.");
+        }
+    };
+}
diff --git a/core/java/android/view/VerifiedKeyEvent.aidl b/core/java/android/view/VerifiedKeyEvent.aidl
new file mode 100644
index 0000000..2d6c3a4
--- /dev/null
+++ b/core/java/android/view/VerifiedKeyEvent.aidl
@@ -0,0 +1,19 @@
+/*
+ * 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;
+
+parcelable VerifiedKeyEvent;
diff --git a/core/java/android/view/VerifiedKeyEvent.java b/core/java/android/view/VerifiedKeyEvent.java
new file mode 100644
index 0000000..dc5b7cc
--- /dev/null
+++ b/core/java/android/view/VerifiedKeyEvent.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 android.view;
+
+import static android.view.KeyEvent.FLAG_CANCELED;
+
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+import android.annotation.IntDef;
+import android.annotation.Nullable;
+import android.annotation.SuppressLint;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.DataClass;
+
+import java.lang.annotation.Retention;
+
+/**
+ * KeyEvent that has been verified by the system.
+ * The data contained in this class is always a subset of a {@link KeyEvent}. Use this class to
+ * check which data has been confirmed by the system to be authentic.
+ *
+ * Most applications do not need to use this class.
+ *
+ * {@see android.hardware.input.InputManager#verifyInputEvent}
+ */
+@DataClass(genHiddenConstructor = true, genEqualsHashCode = true)
+public final class VerifiedKeyEvent extends VerifiedInputEvent implements Parcelable {
+    private static final String TAG = "VerifiedKeyEvent";
+
+    /** @hide */
+    @Retention(SOURCE)
+    @IntDef({KeyEvent.ACTION_DOWN, KeyEvent.ACTION_UP})
+    public @interface KeyEventAction {};
+
+    /**
+     * The action of this key event.  May be either {@link KeyEvent#ACTION_DOWN} or
+     * {@link KeyEvent#ACTION_UP}.
+     *
+     * @see KeyEvent#getAction()
+     */
+    @KeyEventAction
+    private int mAction;
+
+    /**
+     * Retrieve the time of the most recent key down event, in the
+     * {@link android.os.SystemClock#uptimeMillis} time base, but in nanoseconds. If this
+     * is a down event, this will be the same as {@link VerifiedInputEvent#getEventTimeNanos()}.
+     *
+     * @see KeyEvent#getDownTime()
+     */
+    @SuppressLint({"MethodNameUnits"})
+    private long mDownTimeNanos;
+
+    /**
+     * Returns the flags for this key event.
+     *
+     * @see KeyEvent#getFlags()
+     * @see KeyEvent#FLAG_CANCELED
+     *
+     * @hide
+     */
+    private int mFlags;
+
+    /**
+     * Retrieve the key code of the key event.
+     *
+     * @see KeyEvent#getKeyCode()
+     */
+    private int mKeyCode;
+
+    /**
+     * Retrieve the hardware key id of this key event. These values are not reliable
+     * and vary from device to device.
+     *
+     * @see KeyEvent#getScanCode()
+     */
+    private int mScanCode;
+
+    /**
+     * <p>Returns the state of the meta keys.</p>
+     *
+     * @return an integer in which each bit set to 1 represents a pressed meta key
+     * @see KeyEvent#getMetaState()
+     */
+    private int mMetaState;
+
+    /**
+     * Retrieve the repeat count of the event.  For key down events, this is the number of times
+     * the key has repeated with the first down starting at 0 and counting up from there.
+     * For key up events, this is always equal to zero. For multiple key events,
+     * this is the number of down/up pairs that have occurred.
+     */
+    private int mRepeatCount;
+
+    /**
+     * Get a specific flag of this key event, if possible. Return null if the flag value could
+     * not be checked.
+     *
+     * @param flag the flag of interest
+     * @return Boolean(true) if the key event has the requested flag
+     *         Boolean(false) if the key event does not have the requested flag
+     *         null if the flag value could not be checked
+     *
+     * @see KeyEvent#getFlags()
+     * @see KeyEvent#FLAG_CANCELED
+     */
+    public @Nullable Boolean getFlag(int flag) {
+        switch(flag) {
+            // InputDispatcher only verifies a subset of the KeyEvent flags.
+            // These values must be kept in sync with Input.cpp
+            case FLAG_CANCELED:
+                return (mFlags & flag) != 0;
+        }
+        return null;
+    }
+
+    // The codegen tool doesn't fully support subclasses, since it works on a per-file basis.
+    // To modify this file:
+    // 1. run codegen on this file
+    // 2. edit the constructor signature
+    // 3. add the "super" call for constructor that receives a Parcel
+    // 4. add the "super" call to the writeToParcel method
+    // 5. Update "equals" and "hashcode" methods to include VerifiedInputEvent fields
+    // 6. Edit "inputSignatures" to ensure KeyEventAction is properly qualified
+
+
+
+    // Code below generated by codegen v1.0.14.
+    //
+    // DO NOT MODIFY!
+    // CHECKSTYLE:OFF Generated code
+    //
+    // To regenerate run:
+    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/view/VerifiedKeyEvent.java
+    //
+    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+    //   Settings > Editor > Code Style > Formatter Control
+    //@formatter:off
+
+
+    /**
+     * Creates a new VerifiedKeyEvent.
+     *
+     * @param action
+     *   The action of this key event.  May be either {@link KeyEvent#ACTION_DOWN} or
+     *   {@link KeyEvent#ACTION_UP}.
+     * @param downTimeNanos
+     *   Retrieve the time of the most recent key down event, in the
+     *   {@link android.os.SystemClock#uptimeMillis} time base, but in nanoseconds. If this
+     *   is a down event, this will be the same as {@link VerifiedInputEvent#getEventTimeNanos()}.
+     * @param flags
+     *   Returns the flags for this key event.
+     * @param keyCode
+     *   Retrieve the key code of the key event.
+     * @param scanCode
+     *   Retrieve the hardware key id of this key event. These values are not reliable
+     *   and vary from device to device.
+     * @param metaState
+     *   <p>Returns the state of the meta keys.</p>
+     * @param repeatCount
+     *   Retrieve the repeat count of the event.  For key down events, this is the number of times
+     *   the key has repeated with the first down starting at 0 and counting up from there.
+     *   For key up events, this is always equal to zero. For multiple key events,
+     *   this is the number of down/up pairs that have occurred.
+     * @hide
+     */
+    @DataClass.Generated.Member
+    public VerifiedKeyEvent(
+            int deviceId,
+            long eventTimeNanos,
+            int source,
+            int displayId,
+            @KeyEventAction int action,
+            @SuppressLint({"MethodNameUnits"}) long downTimeNanos,
+            int flags,
+            int keyCode,
+            int scanCode,
+            int metaState,
+            int repeatCount) {
+        super(VERIFIED_KEY, deviceId, eventTimeNanos, source, displayId);
+        this.mAction = action;
+        com.android.internal.util.AnnotationValidations.validate(
+                KeyEventAction.class, null, mAction);
+        this.mDownTimeNanos = downTimeNanos;
+        com.android.internal.util.AnnotationValidations.validate(
+                SuppressLint.class, null, mDownTimeNanos,
+                "value", "MethodNameUnits");
+        this.mFlags = flags;
+        this.mKeyCode = keyCode;
+        this.mScanCode = scanCode;
+        this.mMetaState = metaState;
+        this.mRepeatCount = repeatCount;
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    /**
+     * The action of this key event.  May be either {@link KeyEvent#ACTION_DOWN} or
+     * {@link KeyEvent#ACTION_UP}.
+     *
+     * @see KeyEvent#getAction()
+     */
+    @DataClass.Generated.Member
+    public @KeyEventAction int getAction() {
+        return mAction;
+    }
+
+    /**
+     * Retrieve the time of the most recent key down event, in the
+     * {@link android.os.SystemClock#uptimeMillis} time base, but in nanoseconds. If this
+     * is a down event, this will be the same as {@link VerifiedInputEvent#getEventTimeNanos()}.
+     *
+     * @see KeyEvent#getDownTime()
+     */
+    @DataClass.Generated.Member
+    public @SuppressLint({"MethodNameUnits"}) long getDownTimeNanos() {
+        return mDownTimeNanos;
+    }
+
+    /**
+     * Returns the flags for this key event.
+     *
+     * @see KeyEvent#getFlags()
+     * @see KeyEvent#FLAG_CANCELED
+     * @hide
+     */
+    @DataClass.Generated.Member
+    public int getFlags() {
+        return mFlags;
+    }
+
+    /**
+     * Retrieve the key code of the key event.
+     *
+     * @see KeyEvent#getKeyCode()
+     */
+    @DataClass.Generated.Member
+    public int getKeyCode() {
+        return mKeyCode;
+    }
+
+    /**
+     * Retrieve the hardware key id of this key event. These values are not reliable
+     * and vary from device to device.
+     *
+     * @see KeyEvent#getScanCode()
+     */
+    @DataClass.Generated.Member
+    public int getScanCode() {
+        return mScanCode;
+    }
+
+    /**
+     * <p>Returns the state of the meta keys.</p>
+     *
+     * @return an integer in which each bit set to 1 represents a pressed meta key
+     * @see KeyEvent#getMetaState()
+     */
+    @DataClass.Generated.Member
+    public int getMetaState() {
+        return mMetaState;
+    }
+
+    /**
+     * Retrieve the repeat count of the event.  For key down events, this is the number of times
+     * the key has repeated with the first down starting at 0 and counting up from there.
+     * For key up events, this is always equal to zero. For multiple key events,
+     * this is the number of down/up pairs that have occurred.
+     */
+    @DataClass.Generated.Member
+    public int getRepeatCount() {
+        return mRepeatCount;
+    }
+
+    @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(VerifiedKeyEvent other) { ... }
+        // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        @SuppressWarnings("unchecked")
+        VerifiedKeyEvent that = (VerifiedKeyEvent) o;
+        //noinspection PointlessBooleanExpression
+        return true
+                && getDeviceId() == that.getDeviceId()
+                && getEventTimeNanos() == that.getEventTimeNanos()
+                && getSource() == that.getSource()
+                && getDisplayId() == that.getDisplayId()
+                && mAction == that.mAction
+                && mDownTimeNanos == that.mDownTimeNanos
+                && mFlags == that.mFlags
+                && mKeyCode == that.mKeyCode
+                && mScanCode == that.mScanCode
+                && mMetaState == that.mMetaState
+                && mRepeatCount == that.mRepeatCount;
+    }
+
+    @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 + getDeviceId();
+        _hash = 31 * _hash + Long.hashCode(getEventTimeNanos());
+        _hash = 31 * _hash + getSource();
+        _hash = 31 * _hash + getDisplayId();
+        _hash = 31 * _hash + mAction;
+        _hash = 31 * _hash + Long.hashCode(mDownTimeNanos);
+        _hash = 31 * _hash + mFlags;
+        _hash = 31 * _hash + mKeyCode;
+        _hash = 31 * _hash + mScanCode;
+        _hash = 31 * _hash + mMetaState;
+        _hash = 31 * _hash + mRepeatCount;
+        return _hash;
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public void writeToParcel(@android.annotation.NonNull Parcel dest, int flags) {
+        // You can override field parcelling by defining methods like:
+        // void parcelFieldName(Parcel dest, int flags) { ... }
+        super.writeToParcel(dest, flags);
+        dest.writeInt(mAction);
+        dest.writeLong(mDownTimeNanos);
+        dest.writeInt(mFlags);
+        dest.writeInt(mKeyCode);
+        dest.writeInt(mScanCode);
+        dest.writeInt(mMetaState);
+        dest.writeInt(mRepeatCount);
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public int describeContents() { return 0; }
+
+    /** @hide */
+    @SuppressWarnings({"unchecked", "RedundantCast"})
+    @DataClass.Generated.Member
+    /* package-private */ VerifiedKeyEvent(@android.annotation.NonNull Parcel in) {
+        // You can override field unparcelling by defining methods like:
+        // static FieldType unparcelFieldName(Parcel in) { ... }
+        super(in, VERIFIED_KEY);
+        int action = in.readInt();
+        long downTimeNanos = in.readLong();
+        int flags = in.readInt();
+        int keyCode = in.readInt();
+        int scanCode = in.readInt();
+        int metaState = in.readInt();
+        int repeatCount = in.readInt();
+
+        this.mAction = action;
+        com.android.internal.util.AnnotationValidations.validate(
+                KeyEventAction.class, null, mAction);
+        this.mDownTimeNanos = downTimeNanos;
+        com.android.internal.util.AnnotationValidations.validate(
+                SuppressLint.class, null, mDownTimeNanos,
+                "value", "MethodNameUnits");
+        this.mFlags = flags;
+        this.mKeyCode = keyCode;
+        this.mScanCode = scanCode;
+        this.mMetaState = metaState;
+        this.mRepeatCount = repeatCount;
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    @DataClass.Generated.Member
+    public static final @android.annotation.NonNull Parcelable.Creator<VerifiedKeyEvent> CREATOR
+            = new Parcelable.Creator<VerifiedKeyEvent>() {
+        @Override
+        public VerifiedKeyEvent[] newArray(int size) {
+            return new VerifiedKeyEvent[size];
+        }
+
+        @Override
+        public VerifiedKeyEvent createFromParcel(@android.annotation.NonNull Parcel in) {
+            return new VerifiedKeyEvent(in);
+        }
+    };
+
+    @DataClass.Generated(
+            time = 1581107066890L,
+            codegenVersion = "1.0.14",
+            sourceFile = "frameworks/base/core/java/android/view/VerifiedKeyEvent.java",
+            inputSignatures = "private static final  java.lang.String TAG\nprivate @android.view.VerifiedKeyEvent.KeyEventAction int mAction\nprivate @android.annotation.SuppressLint({\"MethodNameUnits\"}) long mDownTimeNanos\nprivate  int mFlags\nprivate  int mKeyCode\nprivate  int mScanCode\nprivate  int mMetaState\nprivate  int mRepeatCount\npublic @android.annotation.Nullable java.lang.Boolean getFlag(int)\nclass VerifiedKeyEvent extends android.view.VerifiedInputEvent implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genHiddenConstructor=true, genEqualsHashCode=true)")
+    @Deprecated
+    private void __metadata() {}
+
+
+    //@formatter:on
+    // End of generated code
+
+}
diff --git a/core/java/android/view/VerifiedMotionEvent.aidl b/core/java/android/view/VerifiedMotionEvent.aidl
new file mode 100644
index 0000000..3546c63
--- /dev/null
+++ b/core/java/android/view/VerifiedMotionEvent.aidl
@@ -0,0 +1,19 @@
+/*
+ * 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;
+
+parcelable VerifiedMotionEvent;
diff --git a/core/java/android/view/VerifiedMotionEvent.java b/core/java/android/view/VerifiedMotionEvent.java
new file mode 100644
index 0000000..b4c5d24
--- /dev/null
+++ b/core/java/android/view/VerifiedMotionEvent.java
@@ -0,0 +1,393 @@
+/*
+ * 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;
+
+import static android.view.MotionEvent.FLAG_WINDOW_IS_OBSCURED;
+import static android.view.MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED;
+
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+import android.annotation.IntDef;
+import android.annotation.Nullable;
+import android.annotation.SuppressLint;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.DataClass;
+
+import java.lang.annotation.Retention;
+
+/**
+ * MotionEvent that has been verified by the system.
+ * The data contained in this class is always a subset of a {@link MotionEvent}. Use this class to
+ * check which data has been confirmed by the system to be authentic.
+ *
+ * Most applications do not need to use this class.
+ *
+ * {@see android.hardware.input.InputManager#verifyInputEvent}
+ */
+@DataClass(genHiddenConstructor = true, genEqualsHashCode = true)
+public final class VerifiedMotionEvent extends VerifiedInputEvent implements Parcelable {
+    private static final String TAG = "VerifiedMotionEvent";
+
+    /**
+     * The raw X coordinate of the primary pointer.
+     * @see MotionEvent#getRawX()
+     */
+    private float mRawX;
+
+    /**
+     * The raw Y coordinate of the primary pointer.
+     * @see MotionEvent#getRawY()
+     */
+    private float mRawY;
+
+    /** @hide */
+    @Retention(SOURCE)
+    @IntDef({MotionEvent.ACTION_DOWN, MotionEvent.ACTION_POINTER_DOWN, MotionEvent.ACTION_CANCEL,
+            MotionEvent.ACTION_POINTER_UP, MotionEvent.ACTION_UP})
+    public @interface MotionEventAction {};
+
+    /**
+     * The masked action being performed, without pointer index information.
+     *
+     * @see MotionEvent#getActionMasked()
+     */
+    @MotionEventAction
+    private int mActionMasked;
+
+    /**
+     * The time that the gesture started, in nanoseconds.
+     * Uses the same time base as {@link android.os.SystemClock#uptimeMillis()}
+     *
+     * @see MotionEvent#getDownTime()
+     */
+    @SuppressLint({"MethodNameUnits"})
+    private long mDownTimeNanos;
+
+    /**
+     * Returns the flags for this motion event.
+     *
+     * @see MotionEvent#getFlags()
+     * @hide
+     */
+    private int mFlags;
+
+    /**
+     * The state of any meta / modifier keys that were in effect when the event was generated.
+     *
+     * @see MotionEvent#getMetaState()
+     */
+    private int mMetaState;
+
+    /**
+     *  The state of all buttons that are pressed such as a mouse or stylus button.
+     *
+     * @see MotionEvent#getButtonState()
+     */
+    private int mButtonState;
+
+    /**
+     * Get a specific flag of this motion event, if possible. Return null if the flag value could
+     * not be checked.
+     *
+     * @param flag the flag of interest
+     * @return Boolean(true) if the motion event has the requested flag
+     *         Boolean(false) if the motion event does not have the requested flag
+     *         null if the flag value could not be checked
+     *
+     * @see MotionEvent#FLAG_WINDOW_IS_OBSCURED
+     * @see MotionEvent#FLAG_WINDOW_IS_PARTIALLY_OBSCURED
+     */
+    public @Nullable Boolean getFlag(int flag) {
+        switch(flag) {
+            // InputDispatcher only verifies a subset of the MotionEvent flags.
+            // These values must be kept in sync with Input.cpp
+            case FLAG_WINDOW_IS_OBSCURED:
+            case FLAG_WINDOW_IS_PARTIALLY_OBSCURED:
+                return (mFlags & flag) != 0;
+        }
+        return null;
+    }
+
+    // The codegen tool doesn't fully support subclasses, since it works on a per-file basis.
+    // To modify this file:
+    // 1. run codegen on this file
+    // 2. edit the constructor signature
+    // 3. add the "super" call for constructor that receives a Parcel
+    // 4. add the "super" call to the writeToParcel method
+    // 5. Update "equals" and "hashcode" methods to include VerifiedInputEvent fields
+    // 6. Edit "inputSignatures" to ensure MotionEventAction is properly qualified
+
+
+
+    // Code below generated by codegen v1.0.14.
+    //
+    // DO NOT MODIFY!
+    // CHECKSTYLE:OFF Generated code
+    //
+    // To regenerate run:
+    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/view/VerifiedMotionEvent.java
+    //
+    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+    //   Settings > Editor > Code Style > Formatter Control
+    //@formatter:off
+
+
+    /**
+     * Creates a new VerifiedMotionEvent.
+     *
+     * @param rawX
+     *   The raw X coordinate of the primary pointer.
+     * @param rawY
+     *   The raw Y coordinate of the primary pointer.
+     * @param actionMasked
+     *   The masked action being performed, without pointer index information.
+     * @param downTimeNanos
+     *   The time that the gesture started, in nanoseconds.
+     *   Uses the same time base as {@link android.os.SystemClock#uptimeMillis()}
+     * @param flags
+     *   Returns the flags for this motion event.
+     * @param metaState
+     *   The state of any meta / modifier keys that were in effect when the event was generated.
+     * @param buttonState
+     *    The state of all buttons that are pressed such as a mouse or stylus button.
+     * @hide
+     */
+    @DataClass.Generated.Member
+    public VerifiedMotionEvent(
+            int deviceId, long eventTimeNanos, int source, int displayId,
+            float rawX,
+            float rawY,
+            @MotionEventAction int actionMasked,
+            @SuppressLint({"MethodNameUnits"}) long downTimeNanos,
+            int flags,
+            int metaState,
+            int buttonState) {
+        super(VERIFIED_MOTION, deviceId, eventTimeNanos, source, displayId);
+        this.mRawX = rawX;
+        this.mRawY = rawY;
+        this.mActionMasked = actionMasked;
+        com.android.internal.util.AnnotationValidations.validate(
+                MotionEventAction.class, null, mActionMasked);
+        this.mDownTimeNanos = downTimeNanos;
+        com.android.internal.util.AnnotationValidations.validate(
+                SuppressLint.class, null, mDownTimeNanos,
+                "value", "MethodNameUnits");
+        this.mFlags = flags;
+        this.mMetaState = metaState;
+        this.mButtonState = buttonState;
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    /**
+     * The raw X coordinate of the primary pointer.
+     *
+     * @see MotionEvent#getRawX()
+     */
+    @DataClass.Generated.Member
+    public float getRawX() {
+        return mRawX;
+    }
+
+    /**
+     * The raw Y coordinate of the primary pointer.
+     *
+     * @see MotionEvent#getRawY()
+     */
+    @DataClass.Generated.Member
+    public float getRawY() {
+        return mRawY;
+    }
+
+    /**
+     * The masked action being performed, without pointer index information.
+     *
+     * @see MotionEvent#getActionMasked()
+     */
+    @DataClass.Generated.Member
+    public @MotionEventAction int getActionMasked() {
+        return mActionMasked;
+    }
+
+    /**
+     * The time that the gesture started, in nanoseconds.
+     * Uses the same time base as {@link android.os.SystemClock#uptimeMillis()}
+     *
+     * @see MotionEvent#getDownTime()
+     */
+    @DataClass.Generated.Member
+    public @SuppressLint({"MethodNameUnits"}) long getDownTimeNanos() {
+        return mDownTimeNanos;
+    }
+
+    /**
+     * Returns the flags for this motion event.
+     *
+     * @see MotionEvent#getFlags()
+     * @hide
+     */
+    @DataClass.Generated.Member
+    public int getFlags() {
+        return mFlags;
+    }
+
+    /**
+     * The state of any meta / modifier keys that were in effect when the event was generated.
+     *
+     * @see MotionEvent#getMetaState()
+     */
+    @DataClass.Generated.Member
+    public int getMetaState() {
+        return mMetaState;
+    }
+
+    /**
+     *  The state of all buttons that are pressed such as a mouse or stylus button.
+     *
+     * @see MotionEvent#getButtonState()
+     */
+    @DataClass.Generated.Member
+    public int getButtonState() {
+        return mButtonState;
+    }
+
+    @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(VerifiedMotionEvent other) { ... }
+        // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        @SuppressWarnings("unchecked")
+        VerifiedMotionEvent that = (VerifiedMotionEvent) o;
+        //noinspection PointlessBooleanExpression
+        return true
+                && getDeviceId() == that.getDeviceId()
+                && getEventTimeNanos() == that.getEventTimeNanos()
+                && getSource() == that.getSource()
+                && getDisplayId() == that.getDisplayId()
+                && mRawX == that.mRawX
+                && mRawY == that.mRawY
+                && mActionMasked == that.mActionMasked
+                && mDownTimeNanos == that.mDownTimeNanos
+                && mFlags == that.mFlags
+                && mMetaState == that.mMetaState
+                && mButtonState == that.mButtonState;
+    }
+
+    @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 + getDeviceId();
+        _hash = 31 * _hash + Long.hashCode(getEventTimeNanos());
+        _hash = 31 * _hash + getSource();
+        _hash = 31 * _hash + getDisplayId();
+        _hash = 31 * _hash + Float.hashCode(mRawX);
+        _hash = 31 * _hash + Float.hashCode(mRawY);
+        _hash = 31 * _hash + mActionMasked;
+        _hash = 31 * _hash + Long.hashCode(mDownTimeNanos);
+        _hash = 31 * _hash + mFlags;
+        _hash = 31 * _hash + mMetaState;
+        _hash = 31 * _hash + mButtonState;
+        return _hash;
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public void writeToParcel(@android.annotation.NonNull Parcel dest, int flags) {
+        // You can override field parcelling by defining methods like:
+        // void parcelFieldName(Parcel dest, int flags) { ... }
+        super.writeToParcel(dest, flags);
+        dest.writeFloat(mRawX);
+        dest.writeFloat(mRawY);
+        dest.writeInt(mActionMasked);
+        dest.writeLong(mDownTimeNanos);
+        dest.writeInt(mFlags);
+        dest.writeInt(mMetaState);
+        dest.writeInt(mButtonState);
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public int describeContents() { return 0; }
+
+    /** @hide */
+    @SuppressWarnings({"unchecked", "RedundantCast"})
+    @DataClass.Generated.Member
+    /* package-private */ VerifiedMotionEvent(@android.annotation.NonNull Parcel in) {
+        // You can override field unparcelling by defining methods like:
+        // static FieldType unparcelFieldName(Parcel in) { ... }
+        super(in, VERIFIED_MOTION);
+        float rawX = in.readFloat();
+        float rawY = in.readFloat();
+        int actionMasked = in.readInt();
+        long downTimeNanos = in.readLong();
+        int flags = in.readInt();
+        int metaState = in.readInt();
+        int buttonState = in.readInt();
+
+        this.mRawX = rawX;
+        this.mRawY = rawY;
+        this.mActionMasked = actionMasked;
+        com.android.internal.util.AnnotationValidations.validate(
+                MotionEventAction.class, null, mActionMasked);
+        this.mDownTimeNanos = downTimeNanos;
+        com.android.internal.util.AnnotationValidations.validate(
+                SuppressLint.class, null, mDownTimeNanos,
+                "value", "MethodNameUnits");
+        this.mFlags = flags;
+        this.mMetaState = metaState;
+        this.mButtonState = buttonState;
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    @DataClass.Generated.Member
+    public static final @android.annotation.NonNull Parcelable.Creator<VerifiedMotionEvent> CREATOR
+            = new Parcelable.Creator<VerifiedMotionEvent>() {
+        @Override
+        public VerifiedMotionEvent[] newArray(int size) {
+            return new VerifiedMotionEvent[size];
+        }
+
+        @Override
+        public VerifiedMotionEvent createFromParcel(@android.annotation.NonNull Parcel in) {
+            return new VerifiedMotionEvent(in);
+        }
+    };
+
+    @DataClass.Generated(
+            time = 1581107073238L,
+            codegenVersion = "1.0.14",
+            sourceFile = "frameworks/base/core/java/android/view/VerifiedMotionEvent.java",
+            inputSignatures = "private static final  java.lang.String TAG\nprivate  float mRawX\nprivate  float mRawY\nprivate @android.view.VerifiedMotionEvent.MotionEventAction int mActionMasked\nprivate @android.annotation.SuppressLint({\"MethodNameUnits\"}) long mDownTimeNanos\nprivate  int mFlags\nprivate  int mMetaState\nprivate  int mButtonState\npublic @android.annotation.Nullable java.lang.Boolean getFlag(int)\nclass VerifiedMotionEvent extends android.view.VerifiedInputEvent implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genHiddenConstructor=true, genEqualsHashCode=true)")
+    @Deprecated
+    private void __metadata() {}
+
+
+    //@formatter:on
+    // End of generated code
+
+}
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index a407bd8..4c7307e 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -110,10 +110,10 @@
 import android.view.AccessibilityIterators.TextSegmentIterator;
 import android.view.AccessibilityIterators.WordTextSegmentIterator;
 import android.view.ContextMenu.ContextMenuInfo;
+import android.view.InputDevice.InputSourceClass;
 import android.view.Window.OnContentApplyWindowInsetsListener;
 import android.view.WindowInsets.Type;
-import android.view.WindowInsetsAnimationCallback.AnimationBounds;
-import android.view.WindowInsetsAnimationCallback.InsetsAnimation;
+import android.view.WindowInsetsAnimation.Bounds;
 import android.view.WindowManager.LayoutParams;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityEventSource;
@@ -4672,7 +4672,7 @@
 
         private ArrayList<OnUnhandledKeyEventListener> mUnhandledKeyListeners;
 
-        WindowInsetsAnimationCallback mWindowInsetsAnimationCallback;
+        WindowInsetsAnimation.Callback mWindowInsetsAnimationCallback;
 
         /**
          * This lives here since it's only valid for interactive views.
@@ -5206,6 +5206,14 @@
     private int mExplicitStyle;
 
     /**
+     * Specifies which input source classes should provide unbuffered input events to this view
+     *
+     * @see View#requestUnbufferedDispatch(int)
+     */
+    @InputSourceClass
+    int mUnbufferedInputSource = InputDevice.SOURCE_CLASS_NONE;
+
+    /**
      * Simple constructor to use when creating a view from code.
      *
      * @param context The Context the view is running in, through which it can
@@ -8014,6 +8022,10 @@
             mAttachInfo.mKeyDispatchState.reset(this);
         }
 
+        if (mParent != null) {
+            mParent.onDescendantUnbufferedRequested();
+        }
+
         notifyEnterOrExitForAutoFillIfNeeded(gainFocus);
     }
 
@@ -11200,43 +11212,45 @@
     }
 
     /**
-     * Sets a {@link WindowInsetsAnimationCallback} to be notified about animations of windows that
+     * Sets a {@link WindowInsetsAnimation.Callback} to be notified about animations of windows that
      * cause insets.
      * <p>
-     * When setting a listener, it's {@link WindowInsetsAnimationCallback#getDispatchMode() dispatch
-     * mode} will be retrieved and recorded until another listener will be set.
+     * The callback's {@link WindowInsetsAnimation.Callback#getDispatchMode()
+     * dispatch mode} will affect whether animation callbacks are dispatched to the children of
+     * this view.
      * </p>
-     * @param listener The listener to set.
+     * @param callback The callback to set.
      */
-    public void setWindowInsetsAnimationCallback(@Nullable WindowInsetsAnimationCallback listener) {
-        getListenerInfo().mWindowInsetsAnimationCallback = listener;
+    public void setWindowInsetsAnimationCallback(
+            @Nullable WindowInsetsAnimation.Callback callback) {
+        getListenerInfo().mWindowInsetsAnimationCallback = callback;
     }
 
     /**
-     * Dispatches {@link WindowInsetsAnimationCallback#onPrepare(InsetsAnimation)}
+     * Dispatches {@link WindowInsetsAnimation.Callback#onPrepare(WindowInsetsAnimation)}
      * when Window Insets animation is being prepared.
      * @param animation current animation
      *
-     * @see WindowInsetsAnimationCallback#onPrepare(InsetsAnimation)
+     * @see WindowInsetsAnimation.Callback#onPrepare(WindowInsetsAnimation)
      */
     public void dispatchWindowInsetsAnimationPrepare(
-            @NonNull InsetsAnimation animation) {
+            @NonNull WindowInsetsAnimation animation) {
         if (mListenerInfo != null && mListenerInfo.mWindowInsetsAnimationCallback != null) {
             mListenerInfo.mWindowInsetsAnimationCallback.onPrepare(animation);
         }
     }
 
     /**
-     * Dispatches {@link WindowInsetsAnimationCallback#onStart(InsetsAnimation, AnimationBounds)}
+     * Dispatches {@link WindowInsetsAnimation.Callback#onStart(WindowInsetsAnimation, Bounds)}
      * when Window Insets animation is started.
      * @param animation current animation
-     * @param bounds the upper and lower {@link AnimationBounds} that provides range of
-     *  {@link InsetsAnimation}.
-     * @return the upper and lower {@link AnimationBounds}.
+     * @param bounds the upper and lower {@link Bounds} that provides range of
+     *  {@link WindowInsetsAnimation}.
+     * @return the upper and lower {@link Bounds}.
      */
     @NonNull
-    public AnimationBounds dispatchWindowInsetsAnimationStart(
-            @NonNull InsetsAnimation animation, @NonNull AnimationBounds bounds) {
+    public Bounds dispatchWindowInsetsAnimationStart(
+            @NonNull WindowInsetsAnimation animation, @NonNull Bounds bounds) {
         if (mListenerInfo != null && mListenerInfo.mWindowInsetsAnimationCallback != null) {
             return mListenerInfo.mWindowInsetsAnimationCallback.onStart(animation, bounds);
         }
@@ -11244,28 +11258,31 @@
     }
 
     /**
-     * Dispatches {@link WindowInsetsAnimationCallback#onProgress(WindowInsets)}
+     * Dispatches {@link WindowInsetsAnimation.Callback#onProgress(WindowInsets, List)}
      * when Window Insets animation makes progress.
      * @param insets The current {@link WindowInsets}.
+     * @param runningAnimations The currently running {@link WindowInsetsAnimation}s.
      * @return current {@link WindowInsets}.
      */
     @NonNull
-    public WindowInsets dispatchWindowInsetsAnimationProgress(@NonNull WindowInsets insets) {
+    public WindowInsets dispatchWindowInsetsAnimationProgress(@NonNull WindowInsets insets,
+            @NonNull List<WindowInsetsAnimation> runningAnimations) {
         if (mListenerInfo != null && mListenerInfo.mWindowInsetsAnimationCallback != null) {
-            return mListenerInfo.mWindowInsetsAnimationCallback.onProgress(insets);
+            return mListenerInfo.mWindowInsetsAnimationCallback.onProgress(insets,
+                    runningAnimations);
         } else {
             return insets;
         }
     }
 
     /**
-     * Dispatches {@link WindowInsetsAnimationCallback#onFinish(InsetsAnimation)}
-     * when Window Insets animation finishes.
-     * @param animation The current ongoing {@link InsetsAnimation}.
+     * Dispatches {@link WindowInsetsAnimation.Callback#onEnd(WindowInsetsAnimation)}
+     * when Window Insets animation ends.
+     * @param animation The current ongoing {@link WindowInsetsAnimation}.
      */
-    public void dispatchWindowInsetsAnimationFinish(@NonNull InsetsAnimation animation) {
+    public void dispatchWindowInsetsAnimationEnd(@NonNull WindowInsetsAnimation animation) {
         if (mListenerInfo != null && mListenerInfo.mWindowInsetsAnimationCallback != null) {
-            mListenerInfo.mWindowInsetsAnimationCallback.onFinish(animation);
+            mListenerInfo.mWindowInsetsAnimationCallback.onEnd(animation);
         }
     }
 
@@ -12729,12 +12746,14 @@
                 return findViewInsideOutShouldExist(root, mNextFocusForwardId);
             case FOCUS_BACKWARD: {
                 if (mID == View.NO_ID) return null;
-                return root.findViewByPredicateInsideOut(this, new Predicate<View>() {
-                    @Override
-                    public boolean test(View t) {
-                        return t.findViewById(t.mNextFocusForwardId) == View.this;
-                    }
-                });
+                final View rootView = root;
+                final View startView = this;
+                // Since we have forward links but no backward links, we need to find the view that
+                // forward links to this view. We can't just find the view with the specified ID
+                // because view IDs need not be unique throughout the tree.
+                return root.findViewByPredicateInsideOut(startView,
+                    t -> findViewInsideOutShouldExist(rootView, t, t.mNextFocusForwardId)
+                            == startView);
             }
         }
         return null;
@@ -12764,11 +12783,15 @@
     }
 
     private View findViewInsideOutShouldExist(View root, int id) {
+        return findViewInsideOutShouldExist(root, this, id);
+    }
+
+    private View findViewInsideOutShouldExist(View root, View start, int id) {
         if (mMatchIdPredicate == null) {
             mMatchIdPredicate = new MatchIdPredicate();
         }
         mMatchIdPredicate.mId = id;
-        View result = root.findViewByPredicateInsideOut(this, mMatchIdPredicate);
+        View result = root.findViewByPredicateInsideOut(start, mMatchIdPredicate);
         if (result == null) {
             Log.w(VIEW_LOG_TAG, "couldn't find view with id " + id);
         }
@@ -15810,12 +15833,17 @@
      * system not batch {@link MotionEvent}s but instead deliver them as soon as they're
      * available. This method should only be called for touch events.
      *
-     * <p class="note">This api is not intended for most applications. Buffered dispatch
+     * <p class="note">This API is not intended for most applications. Buffered dispatch
      * provides many of benefits, and just requesting unbuffered dispatch on most MotionEvent
      * streams will not improve your input latency. Side effects include: increased latency,
      * jittery scrolls and inability to take advantage of system resampling. Talk to your input
      * professional to see if {@link #requestUnbufferedDispatch(MotionEvent)} is right for
      * you.</p>
+     *
+     * To receive unbuffered events for arbitrary input device source classes, use
+     * {@link #requestUnbufferedDispatch(int)},
+     *
+     * @see View#requestUnbufferedDispatch(int)
      */
     public final void requestUnbufferedDispatch(MotionEvent event) {
         final int action = event.getAction();
@@ -15827,6 +15855,27 @@
         mAttachInfo.mUnbufferedDispatchRequested = true;
     }
 
+    /**
+     * Request unbuffered dispatch of the given event source class to this view.
+     * This is similar to {@link View#requestUnbufferedDispatch(MotionEvent)}, but does not
+     * automatically terminate, and allows the specification of arbitrary input source classes.
+     *
+     * @param source The combined input source class to request unbuffered dispatch for. All
+     *               events coming from these source classes will not be buffered. Set to
+     *               {@link InputDevice#SOURCE_CLASS_NONE} in order to return to default behaviour.
+     *
+     * @see View#requestUnbufferedDispatch(MotionEvent)
+     */
+    public final void requestUnbufferedDispatch(@InputSourceClass int source) {
+        if (mUnbufferedInputSource == source) {
+            return;
+        }
+        mUnbufferedInputSource = source;
+        if (mParent != null) {
+            mParent.onDescendantUnbufferedRequested();
+        }
+    }
+
     private boolean hasSize() {
         return (mBottom > mTop) && (mRight > mLeft);
     }
@@ -28781,11 +28830,6 @@
         int mDisabledSystemUiVisibility;
 
         /**
-         * Last global system UI visibility reported by the window manager.
-         */
-        int mGlobalSystemUiVisibility = -1;
-
-        /**
          * True if a view in this hierarchy has an OnSystemUiVisibilityChangeListener
          * attached.
          */
@@ -28815,6 +28859,12 @@
         final Point mLocationInParentDisplay = new Point();
 
         /**
+         * The screen matrix of this view when it's on a {@link SurfaceControlViewHost} that is
+         * embedded within a SurfaceView.
+         */
+        Matrix mScreenMatrixInEmbeddedHierarchy;
+
+        /**
          * Global to the view hierarchy used as a temporary for dealing with
          * x/y points in the transparent region computations.
          */
@@ -28983,6 +29033,18 @@
         OnContentApplyWindowInsetsListener mContentOnApplyWindowInsetsListener;
 
         /**
+         * The leash token of this view's parent when it's in an embedded hierarchy that is
+         * re-parented to another window.
+         */
+        IBinder mLeashedParentToken;
+
+        /**
+         * The accessibility view id of this view's parent when it's in an embedded
+         * hierarchy that is re-parented to another window.
+         */
+        int mLeashedParentAccessibilityViewId;
+
+        /**
          * Creates a new set of attachment information with the specified
          * events handler and thread.
          *
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index d416d42..b6c46be 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -17,8 +17,8 @@
 package android.view;
 
 import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
-import static android.view.WindowInsetsAnimationCallback.DISPATCH_MODE_CONTINUE_ON_SUBTREE;
-import static android.view.WindowInsetsAnimationCallback.DISPATCH_MODE_STOP;
+import static android.view.WindowInsetsAnimation.Callback.DISPATCH_MODE_CONTINUE_ON_SUBTREE;
+import static android.view.WindowInsetsAnimation.Callback.DISPATCH_MODE_STOP;
 
 import android.animation.LayoutTransition;
 import android.annotation.CallSuper;
@@ -48,17 +48,14 @@
 import android.os.Bundle;
 import android.os.Parcelable;
 import android.os.SystemClock;
-import android.util.ArraySet;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.Pools;
 import android.util.Pools.SynchronizedPool;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
-import android.view.Window.OnContentApplyWindowInsetsListener;
-import android.view.WindowInsetsAnimationCallback.AnimationBounds;
-import android.view.WindowInsetsAnimationCallback.DispatchMode;
-import android.view.WindowInsetsAnimationCallback.InsetsAnimation;
+import android.view.WindowInsetsAnimation.Bounds;
+import android.view.WindowInsetsAnimation.Callback.DispatchMode;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -615,7 +612,7 @@
     /**
      * Current dispatch mode of animation events
      *
-     * @see WindowInsetsAnimationCallback#getDispatchMode()
+     * @see WindowInsetsAnimation.Callback#getDispatchMode()
      */
     private @DispatchMode int mInsetsAnimationDispatchMode = DISPATCH_MODE_CONTINUE_ON_SUBTREE;
 
@@ -3695,6 +3692,31 @@
             }
             childrenForAccessibility.clear();
         }
+        info.setAvailableExtraData(Collections.singletonList(
+                AccessibilityNodeInfo.EXTRA_DATA_RENDERING_INFO_KEY));
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @param info The info to which to add the extra data. Never {@code null}.
+     * @param extraDataKey A key specifying the type of extra data to add to the info. The
+     *                     extra data should be added to the {@link Bundle} returned by
+     *                     the info's {@link AccessibilityNodeInfo#getExtras} method. Never
+     *                     {@code null}.
+     * @param arguments A {@link Bundle} holding any arguments relevant for this request. May be
+     *                  {@code null} if the service provided no arguments.
+     *
+     */
+    @Override
+    public void addExtraDataToAccessibilityNodeInfo(@NonNull AccessibilityNodeInfo info,
+            @NonNull String extraDataKey, @Nullable Bundle arguments) {
+        if (extraDataKey.equals(AccessibilityNodeInfo.EXTRA_DATA_RENDERING_INFO_KEY)) {
+            final AccessibilityNodeInfo.ExtraRenderingInfo extraRenderingInfo =
+                    AccessibilityNodeInfo.ExtraRenderingInfo.obtain();
+            extraRenderingInfo.setLayoutParams(getLayoutParams().width, getLayoutParams().height);
+            info.setExtraRenderingInfo(extraRenderingInfo);
+        }
     }
 
     @Override
@@ -7228,16 +7250,17 @@
     }
 
     @Override
-    public void setWindowInsetsAnimationCallback(@Nullable WindowInsetsAnimationCallback listener) {
-        super.setWindowInsetsAnimationCallback(listener);
-        mInsetsAnimationDispatchMode = listener != null
-                ? listener.getDispatchMode()
+    public void setWindowInsetsAnimationCallback(
+            @Nullable WindowInsetsAnimation.Callback callback) {
+        super.setWindowInsetsAnimationCallback(callback);
+        mInsetsAnimationDispatchMode = callback != null
+                ? callback.getDispatchMode()
                 : DISPATCH_MODE_CONTINUE_ON_SUBTREE;
     }
 
     @Override
     public void dispatchWindowInsetsAnimationPrepare(
-            @NonNull InsetsAnimation animation) {
+            @NonNull WindowInsetsAnimation animation) {
         super.dispatchWindowInsetsAnimationPrepare(animation);
 
         // If we are root-level content view that fits insets, set dispatch mode to stop to imitate
@@ -7262,8 +7285,8 @@
 
     @Override
     @NonNull
-    public AnimationBounds dispatchWindowInsetsAnimationStart(
-            @NonNull InsetsAnimation animation, @NonNull AnimationBounds bounds) {
+    public Bounds dispatchWindowInsetsAnimationStart(
+            @NonNull WindowInsetsAnimation animation, @NonNull Bounds bounds) {
         bounds = super.dispatchWindowInsetsAnimationStart(animation, bounds);
         if (mInsetsAnimationDispatchMode == DISPATCH_MODE_STOP) {
             return bounds;
@@ -7277,27 +7300,28 @@
 
     @Override
     @NonNull
-    public WindowInsets dispatchWindowInsetsAnimationProgress(@NonNull WindowInsets insets) {
-        insets = super.dispatchWindowInsetsAnimationProgress(insets);
+    public WindowInsets dispatchWindowInsetsAnimationProgress(@NonNull WindowInsets insets,
+            @NonNull List<WindowInsetsAnimation> runningAnimations) {
+        insets = super.dispatchWindowInsetsAnimationProgress(insets, runningAnimations);
         if (mInsetsAnimationDispatchMode == DISPATCH_MODE_STOP) {
             return insets;
         }
         final int count = getChildCount();
         for (int i = 0; i < count; i++) {
-            getChildAt(i).dispatchWindowInsetsAnimationProgress(insets);
+            getChildAt(i).dispatchWindowInsetsAnimationProgress(insets, runningAnimations);
         }
         return insets;
     }
 
     @Override
-    public void dispatchWindowInsetsAnimationFinish(@NonNull InsetsAnimation animation) {
-        super.dispatchWindowInsetsAnimationFinish(animation);
+    public void dispatchWindowInsetsAnimationEnd(@NonNull WindowInsetsAnimation animation) {
+        super.dispatchWindowInsetsAnimationEnd(animation);
         if (mInsetsAnimationDispatchMode == DISPATCH_MODE_STOP) {
             return;
         }
         final int count = getChildCount();
         for (int i = 0; i < count; i++) {
-            getChildAt(i).dispatchWindowInsetsAnimationFinish(animation);
+            getChildAt(i).dispatchWindowInsetsAnimationEnd(animation);
         }
     }
 
@@ -9005,4 +9029,30 @@
             getChildAt(i).encode(encoder);
         }
     }
+
+    /** @hide */
+    @Override
+    public final void onDescendantUnbufferedRequested() {
+        // First look at the focused child for focused events
+        int focusedChildNonPointerSource = InputDevice.SOURCE_CLASS_NONE;
+        if (mFocused != null) {
+            focusedChildNonPointerSource = mFocused.mUnbufferedInputSource
+                    & (~InputDevice.SOURCE_CLASS_POINTER);
+        }
+        mUnbufferedInputSource = focusedChildNonPointerSource;
+
+        // Request unbuffered dispatch for pointer events for this view if any child requested
+        // unbuffered dispatch for pointer events. This is because we can't expect that the pointer
+        // source would dispatch to the focused view.
+        for (int i = 0; i < mChildrenCount; i++) {
+            final View child = mChildren[i];
+            if ((child.mUnbufferedInputSource & InputDevice.SOURCE_CLASS_POINTER) != 0) {
+                mUnbufferedInputSource |= InputDevice.SOURCE_CLASS_POINTER;
+                break;
+            }
+        }
+        if (mParent != null) {
+            mParent.onDescendantUnbufferedRequested();
+        }
+    }
 }
diff --git a/core/java/android/view/ViewParent.java b/core/java/android/view/ViewParent.java
index f25206d..775c15e 100644
--- a/core/java/android/view/ViewParent.java
+++ b/core/java/android/view/ViewParent.java
@@ -675,4 +675,18 @@
      */
     default void subtractObscuredTouchableRegion(Region touchableRegion, View view) {
     }
+
+    /**
+     * Unbuffered dispatch has been requested by a child of this view parent.
+     * This method is called by the View hierarchy to signal ancestors that a View needs to
+     * request unbuffered dispatch.
+     *
+     * @see View#requestUnbufferedDispatch(int)
+     * @hide
+     */
+    default void onDescendantUnbufferedRequested() {
+        if (getParent() != null) {
+            getParent().onDescendantUnbufferedRequested();
+        }
+    }
 }
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 159b93e..204d2c8 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -18,6 +18,7 @@
 
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Display.INVALID_DISPLAY;
+import static android.view.InputDevice.SOURCE_CLASS_NONE;
 import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
 import static android.view.InsetsState.ITYPE_STATUS_BAR;
 import static android.view.View.PFLAG_DRAW_ANIMATION;
@@ -116,6 +117,7 @@
 import android.util.SparseArray;
 import android.util.TimeUtils;
 import android.util.TypedValue;
+import android.view.InputDevice.InputSourceClass;
 import android.view.InsetsState.InternalInsetsType;
 import android.view.Surface.OutOfResourcesException;
 import android.view.SurfaceControl.Transaction;
@@ -135,6 +137,7 @@
 import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
 import android.view.accessibility.AccessibilityNodeProvider;
 import android.view.accessibility.AccessibilityWindowInfo;
+import android.view.accessibility.IAccessibilityEmbeddedConnection;
 import android.view.accessibility.IAccessibilityInteractionConnection;
 import android.view.accessibility.IAccessibilityInteractionConnectionCallback;
 import android.view.animation.AccelerateDecelerateInterpolator;
@@ -222,13 +225,6 @@
      * @see #USE_NEW_INSETS_PROPERTY
      * @hide
      */
-    public static int sNewInsetsMode =
-            SystemProperties.getInt(USE_NEW_INSETS_PROPERTY, 0);
-
-    /**
-     * @see #USE_NEW_INSETS_PROPERTY
-     * @hide
-     */
     public static final int NEW_INSETS_MODE_NONE = 0;
 
     /**
@@ -244,6 +240,13 @@
     public static final int NEW_INSETS_MODE_FULL = 2;
 
     /**
+     * @see #USE_NEW_INSETS_PROPERTY
+     * @hide
+     */
+    public static int sNewInsetsMode =
+            SystemProperties.getInt(USE_NEW_INSETS_PROPERTY, NEW_INSETS_MODE_FULL);
+
+    /**
      * Set this system property to true to force the view hierarchy to render
      * at 60 Hz. This can be used to measure the potential framerate.
      */
@@ -315,6 +318,8 @@
      */
     private boolean mForceNextConfigUpdate;
 
+    private final boolean mUseBLASTAdapter;
+
     /**
      * Signals that compatibility booleans have been initialized according to
      * target SDK versions.
@@ -353,6 +358,8 @@
 
     final W mWindow;
 
+    final IBinder mLeashToken;
+
     final int mTargetSdkVersion;
 
     int mSeq;
@@ -431,6 +438,8 @@
     @UnsupportedAppUsage
     final View.AttachInfo mAttachInfo;
     final SystemUiVisibilityInfo mCompatibleVisibilityInfo;
+    int mDispatchedSystemUiVisibility =
+            ViewRootImpl.sNewInsetsMode == NEW_INSETS_MODE_FULL ? 0 : -1;
     InputQueue.Callback mInputQueueCallback;
     InputQueue mInputQueue;
     @UnsupportedAppUsage
@@ -492,6 +501,10 @@
     int mPendingInputEventCount;
     boolean mProcessInputEventsScheduled;
     boolean mUnbufferedInputDispatch;
+    boolean mUnbufferedInputDispatchBySource;
+    @InputSourceClass
+    int mUnbufferedInputSource = SOURCE_CLASS_NONE;
+
     String mPendingInputEventQueueLengthCounterName = "pq";
 
     InputStage mFirstInputStage;
@@ -650,6 +663,8 @@
 
     private final GestureExclusionTracker mGestureExclusionTracker = new GestureExclusionTracker();
 
+    private IAccessibilityEmbeddedConnection mAccessibilityEmbeddedConnection;
+
     static final class SystemUiVisibilityInfo {
         int seq;
         int globalVisibility;
@@ -657,7 +672,22 @@
         int localChanges;
     }
 
+    // If set, ViewRootImpl will call BLASTBufferQueue::setNextTransaction with
+    // mRtBLASTSyncTransaction, prior to invoking draw. This provides a way
+    // to redirect the buffers in to transactions.
     private boolean mNextDrawUseBLASTSyncTransaction;
+    // Set when calling setNextTransaction, we can't just reuse mNextDrawUseBLASTSyncTransaction
+    // because, imagine this scenario:
+    //     1. First draw is using BLAST, mNextDrawUseBLAST = true
+    //     2. We call perform draw and are waiting on the callback
+    //     3. After the first perform draw but before the first callback and the
+    //        second perform draw, a second draw sets mNextDrawUseBLAST = true (it already was)
+    //     4. At this point the callback fires and we set mNextDrawUseBLAST = false;
+    //     5. We get to performDraw and fail to sync as we intended because mNextDrawUseBLAST
+    //        is now false.
+    // This is why we use a two-step latch with the two booleans, one consumed from
+    // performDraw and one consumed from finishBLASTSync()
+    private boolean mNextReportConsumeBLAST;
     // Be very careful with the threading here. This is used from the render thread while
     // the UI thread is paused and then applied and cleared from the UI thread right after
     // draw returns.
@@ -683,6 +713,7 @@
         mVisRect = new Rect();
         mWinFrame = new Rect();
         mWindow = new W(this);
+        mLeashToken = new Binder();
         mTargetSdkVersion = context.getApplicationInfo().targetSdkVersion;
         mViewVisibility = View.GONE;
         mTransparentRegion = new Region();
@@ -734,6 +765,7 @@
 
         loadSystemProperties();
         mImeFocusController = new ImeFocusController(this);
+        mUseBLASTAdapter = WindowManagerGlobal.useBLAST();
     }
 
     public static void addFirstDrawHandler(Runnable callback) {
@@ -861,7 +893,7 @@
                 if (mWindowAttributes.packageName == null) {
                     mWindowAttributes.packageName = mBasePackageName;
                 }
-                if (WindowManagerGlobal.USE_BLAST_ADAPTER) {
+                if (mUseBLASTAdapter) {
                     mWindowAttributes.privateFlags |=
                         WindowManager.LayoutParams.PRIVATE_FLAG_USE_BLAST;
                 }
@@ -1341,7 +1373,7 @@
             }
             mWindowAttributes.privateFlags |= compatibleWindowFlag;
 
-            if (WindowManagerGlobal.USE_BLAST_ADAPTER) {
+            if (mUseBLASTAdapter) {
                 mWindowAttributes.privateFlags |=
                     WindowManager.LayoutParams.PRIVATE_FLAG_USE_BLAST;
             }
@@ -1696,12 +1728,13 @@
     }
 
     Surface getOrCreateBLASTSurface(int width, int height) {
-        if (mSurfaceControl == null || !mSurfaceControl.isValid()) {
+        if (mSurfaceControl == null
+                || !mSurfaceControl.isValid()
+                || mBlastSurfaceControl == null
+                || !mBlastSurfaceControl.isValid()) {
             return null;
         }
-        if ((mBlastSurfaceControl != null)
-                && (mBlastBufferQueue == null)
-                && mBlastSurfaceControl.isValid()) {
+        if (mBlastBufferQueue == null) {
             mBlastBufferQueue = new BLASTBufferQueue(
                 mBlastSurfaceControl, width, height);
         }
@@ -1822,7 +1855,7 @@
             mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier();
             mChoreographer.postCallback(
                     Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null);
-            if (!mUnbufferedInputDispatch) {
+            if (!mUnbufferedInputDispatch && !mUnbufferedInputDispatchBySource) {
                 scheduleConsumeBatchedInput();
             }
             notifyRendererOfFramePending();
@@ -1936,11 +1969,33 @@
         } else {
             info.globalVisibility |= systemUiFlag;
         }
-        if (mAttachInfo.mGlobalSystemUiVisibility != info.globalVisibility) {
+        if (mDispatchedSystemUiVisibility != info.globalVisibility) {
             scheduleTraversals();
         }
     }
 
+    private void handleDispatchSystemUiVisibilityChanged(SystemUiVisibilityInfo args) {
+        if (mSeq != args.seq && sNewInsetsMode != NEW_INSETS_MODE_FULL) {
+            // The sequence has changed, so we need to update our value and make
+            // sure to do a traversal afterward so the window manager is given our
+            // most recent data.
+            mSeq = args.seq;
+            mAttachInfo.mForceReportNewAttributes = true;
+            scheduleTraversals();
+        }
+        if (mView == null) return;
+        if (args.localChanges != 0) {
+            mView.updateLocalSystemUiVisibility(args.localValue, args.localChanges);
+            args.localChanges = 0;
+        }
+
+        final int visibility = args.globalVisibility & View.SYSTEM_UI_CLEARABLE_FLAGS;
+        if (mDispatchedSystemUiVisibility != visibility) {
+            mDispatchedSystemUiVisibility = visibility;
+            mView.dispatchSystemUiVisibilityChanged(visibility);
+        }
+    }
+
     @VisibleForTesting
     public static void adjustLayoutParamsForCompatibility(WindowManager.LayoutParams inOutParams) {
         if (sNewInsetsMode != NEW_INSETS_MODE_FULL) {
@@ -2172,8 +2227,9 @@
         return insets;
     }
 
-    void dispatchApplyInsets(View host) {
+    public void dispatchApplyInsets(View host) {
         Trace.traceBegin(Trace.TRACE_TAG_VIEW, "dispatchApplyInsets");
+        mApplyInsetsRequested = false;
         WindowInsets insets = getWindowInsets(true /* forceConstruct */);
         final boolean dispatchCutout = (mWindowAttributes.layoutInDisplayCutoutMode
                 == LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS);
@@ -2410,7 +2466,6 @@
         }
 
         if (mApplyInsetsRequested) {
-            mApplyInsetsRequested = false;
             updateVisibleInsets();
             dispatchApplyInsets(host);
             if (mLayoutRequested) {
@@ -2587,7 +2642,6 @@
                 if (contentInsetsChanged || mLastSystemUiVisibility !=
                         mAttachInfo.mSystemUiVisibility || mApplyInsetsRequested) {
                     mLastSystemUiVisibility = mAttachInfo.mSystemUiVisibility;
-                    mApplyInsetsRequested = false;
                     dispatchApplyInsets(host);
                     // We applied insets so force contentInsetsChanged to ensure the
                     // hierarchy is measured below.
@@ -3685,9 +3739,9 @@
             usingAsyncReport = mReportNextDraw;
             if (needFrameCompleteCallback) {
                 final Handler handler = mAttachInfo.mHandler;
-                mAttachInfo.mThreadedRenderer.setFrameCompleteCallback((long frameNr) ->
+                mAttachInfo.mThreadedRenderer.setFrameCompleteCallback((long frameNr) -> {
+                        finishBLASTSync();
                         handler.postAtFrontOfQueue(() -> {
-                            finishBLASTSync();
                             if (reportNextDraw) {
                                 // TODO: Use the frame number
                                 pendingDrawFinished();
@@ -3697,12 +3751,23 @@
                                     commitCallbacks.get(i).run();
                                 }
                             }
-                        }));
+                        });});
             }
         }
 
         try {
             if (mNextDrawUseBLASTSyncTransaction) {
+                // TODO(b/149747443)
+                // We aren't prepared to handle overlapping use of mRtBLASTSyncTransaction
+                // so if we are BLAST syncing we make sure the previous draw has
+                // totally finished.
+                if (mAttachInfo.mThreadedRenderer != null) {
+                    mAttachInfo.mThreadedRenderer.fence();
+                }
+
+                mNextReportConsumeBLAST = true;
+                mNextDrawUseBLASTSyncTransaction = false;
+
                 mBlastBufferQueue.setNextTransaction(mRtBLASTSyncTransaction);
             }
             boolean canUseAsync = draw(fullRedrawNeeded);
@@ -7173,28 +7238,6 @@
         event.recycle();
     }
 
-    public void handleDispatchSystemUiVisibilityChanged(SystemUiVisibilityInfo args) {
-        if (mSeq != args.seq && sNewInsetsMode != NEW_INSETS_MODE_FULL) {
-            // The sequence has changed, so we need to update our value and make
-            // sure to do a traversal afterward so the window manager is given our
-            // most recent data.
-            mSeq = args.seq;
-            mAttachInfo.mForceReportNewAttributes = true;
-            scheduleTraversals();
-        }
-        if (mView == null) return;
-        if (args.localChanges != 0) {
-            mView.updateLocalSystemUiVisibility(args.localValue, args.localChanges);
-            args.localChanges = 0;
-        }
-
-        int visibility = args.globalVisibility&View.SYSTEM_UI_CLEARABLE_FLAGS;
-        if (visibility != mAttachInfo.mGlobalSystemUiVisibility) {
-            mAttachInfo.mGlobalSystemUiVisibility = visibility;
-            mView.dispatchSystemUiVisibilityChanged(visibility);
-        }
-    }
-
     /**
      * Notify that the window title changed
      */
@@ -7342,7 +7385,7 @@
                 mPendingMergedConfiguration, mSurfaceControl, mTempInsets, mSurfaceSize,
                 mBlastSurfaceControl);
         if (mSurfaceControl.isValid()) {
-            if (!WindowManagerGlobal.USE_BLAST_ADAPTER) {
+            if (!mUseBLASTAdapter) {
                 mSurface.copyFrom(mSurfaceControl);
             } else {
                 mSurface.transferFrom(getOrCreateBLASTSurface(mSurfaceSize.x,
@@ -7468,6 +7511,9 @@
                 writer.print(mTraversalScheduled);
         writer.print(innerPrefix); writer.print("mIsAmbientMode=");
                 writer.print(mIsAmbientMode);
+        writer.print(innerPrefix); writer.print("mUnbufferedInputSource=");
+        writer.print(Integer.toHexString(mUnbufferedInputSource));
+
         if (mTraversalScheduled) {
             writer.print(" (barrier="); writer.print(mTraversalBarrier); writer.println(")");
         } else {
@@ -8072,6 +8118,7 @@
         @Override
         public void onInputEvent(InputEvent event) {
             Trace.traceBegin(Trace.TRACE_TAG_VIEW, "processInputEventForCompatibility");
+            processUnbufferedRequest(event);
             List<InputEvent> processedEvents;
             try {
                 processedEvents =
@@ -8097,7 +8144,7 @@
 
         @Override
         public void onBatchedInputEventPending() {
-            if (mUnbufferedInputDispatch) {
+            if (mUnbufferedInputDispatch || mUnbufferedInputDispatchBySource) {
                 super.onBatchedInputEventPending();
             } else {
                 scheduleConsumeBatchedInput();
@@ -8114,6 +8161,17 @@
             unscheduleConsumeBatchedInput();
             super.dispose();
         }
+
+        private void processUnbufferedRequest(InputEvent event) {
+            if (!(event instanceof MotionEvent)) {
+                return;
+            }
+            mUnbufferedInputDispatchBySource =
+                    (event.getSource() & mUnbufferedInputSource) != SOURCE_CLASS_NONE;
+            if (mUnbufferedInputDispatchBySource && mConsumeBatchedInputScheduled) {
+                scheduleConsumeBatchedInputImmediately();
+            }
+        }
     }
     WindowInputEventReceiver mInputEventReceiver;
 
@@ -8364,6 +8422,7 @@
         mHandler.sendMessage(msg);
     }
 
+    // TODO(118118435): Remove this after migration
     public void dispatchSystemUiVisibilityChanged(int seq, int globalVisibility,
             int localValue, int localChanges) {
         SystemUiVisibilityInfo args = new SystemUiVisibilityInfo();
@@ -9154,6 +9213,10 @@
                         focusedView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
                     }
                 }
+                if (mAttachInfo.mLeashedParentToken != null) {
+                    mAccessibilityManager.associateEmbeddedHierarchy(
+                            mAttachInfo.mLeashedParentToken, mLeashToken);
+                }
             } else {
                 ensureNoConnection();
                 mHandler.obtainMessage(MSG_CLEAR_ACCESSIBILITY_FOCUS_HOST).sendToTarget();
@@ -9166,6 +9229,7 @@
             if (!registered) {
                 mAttachInfo.mAccessibilityWindowId =
                         mAccessibilityManager.addAccessibilityInteractionConnection(mWindow,
+                                mLeashToken,
                                 mContext.getPackageName(),
                                 new AccessibilityInteractionConnection(ViewRootImpl.this));
             }
@@ -9352,6 +9416,18 @@
         }
     }
 
+    /**
+     * Gets an accessibility embedded connection interface for this ViewRootImpl.
+     * @hide
+     */
+    public IAccessibilityEmbeddedConnection getAccessibilityEmbeddedConnection() {
+        if (mAccessibilityEmbeddedConnection == null) {
+            mAccessibilityEmbeddedConnection = new AccessibilityEmbeddedConnection(
+                    ViewRootImpl.this);
+        }
+        return mAccessibilityEmbeddedConnection;
+    }
+
     private class SendWindowContentChangedAccessibilityEvent implements Runnable {
         private int mChangeTypes = 0;
 
@@ -9526,8 +9602,8 @@
     }
 
     private void finishBLASTSync() {
-        if (mNextDrawUseBLASTSyncTransaction) {
-            mNextDrawUseBLASTSyncTransaction = false;
+        if (mNextReportConsumeBLAST) {
+            mNextReportConsumeBLAST = false;
             mRtBLASTSyncTransaction.apply();
         }
     }
@@ -9536,11 +9612,19 @@
         return mRtBLASTSyncTransaction;
     }
 
-    SurfaceControl getRenderSurfaceControl() {
-        if (WindowManagerGlobal.USE_BLAST_ADAPTER) {
+    /**
+     * @hide
+     */
+    public SurfaceControl getRenderSurfaceControl() {
+        if (mUseBLASTAdapter) {
             return mBlastSurfaceControl;
         } else {
             return mSurfaceControl;
         }
     }
+
+    @Override
+    public void onDescendantUnbufferedRequested() {
+        mUnbufferedInputSource = mView.mUnbufferedInputSource;
+    }
 }
diff --git a/core/java/android/view/WindowContainerTransaction.java b/core/java/android/view/WindowContainerTransaction.java
index 33f21f2..cf34b0b 100644
--- a/core/java/android/view/WindowContainerTransaction.java
+++ b/core/java/android/view/WindowContainerTransaction.java
@@ -16,6 +16,8 @@
 
 package android.view;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.app.WindowConfiguration;
 import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
@@ -25,6 +27,8 @@
 import android.os.Parcelable;
 import android.util.ArrayMap;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -36,10 +40,14 @@
 public class WindowContainerTransaction implements Parcelable {
     private final ArrayMap<IBinder, Change> mChanges = new ArrayMap<>();
 
+    // Flat list because re-order operations are order-dependent
+    private final ArrayList<HierarchyOp> mHierarchyOps = new ArrayList<>();
+
     public WindowContainerTransaction() {}
 
     protected WindowContainerTransaction(Parcel in) {
         in.readMap(mChanges, null /* loader */);
+        in.readList(mHierarchyOps, null /* loader */);
     }
 
     private Change getOrCreateChange(IBinder token) {
@@ -97,10 +105,39 @@
         return this;
     }
 
+    /**
+     * Reparents a container into another one. The effect of a {@code null} parent can vary. For
+     * example, reparenting a stack to {@code null} will reparent it to its display.
+     *
+     * @param onTop When {@code true}, the child goes to the top of parent; otherwise it goes to
+     *              the bottom.
+     */
+    public WindowContainerTransaction reparent(@NonNull IWindowContainer child,
+            @Nullable IWindowContainer parent, boolean onTop) {
+        mHierarchyOps.add(new HierarchyOp(child.asBinder(),
+                parent == null ? null : parent.asBinder(), onTop));
+        return this;
+    }
+
+    /**
+     * Reorders a container within its parent.
+     *
+     * @param onTop When {@code true}, the child goes to the top of parent; otherwise it goes to
+     *              the bottom.
+     */
+    public WindowContainerTransaction reorder(@NonNull IWindowContainer child, boolean onTop) {
+        mHierarchyOps.add(new HierarchyOp(child.asBinder(), onTop));
+        return this;
+    }
+
     public Map<IBinder, Change> getChanges() {
         return mChanges;
     }
 
+    public List<HierarchyOp> getHierarchyOps() {
+        return mHierarchyOps;
+    }
+
     @Override
     public String toString() {
         return "WindowContainerTransaction { changes = " + mChanges + " }";
@@ -109,6 +146,7 @@
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeMap(mChanges);
+        dest.writeList(mHierarchyOps);
     }
 
     @Override
@@ -249,4 +287,88 @@
             }
         };
     }
+
+    /**
+     * Holds information about a reparent/reorder operation in the hierarchy. This is separate from
+     * Changes because they must be executed in the same order that they are added.
+     */
+    public static class HierarchyOp implements Parcelable {
+        private final IBinder mContainer;
+
+        // If this is same as mContainer, then only change position, don't reparent.
+        private final IBinder mReparent;
+
+        // Moves/reparents to top of parent when {@code true}, otherwise moves/reparents to bottom.
+        private final boolean mToTop;
+
+        public HierarchyOp(@NonNull IBinder container, @Nullable IBinder reparent, boolean toTop) {
+            mContainer = container;
+            mReparent = reparent;
+            mToTop = toTop;
+        }
+
+        public HierarchyOp(@NonNull IBinder container, boolean toTop) {
+            mContainer = container;
+            mReparent = container;
+            mToTop = toTop;
+        }
+
+        protected HierarchyOp(Parcel in) {
+            mContainer = in.readStrongBinder();
+            mReparent = in.readStrongBinder();
+            mToTop = in.readBoolean();
+        }
+
+        public boolean isReparent() {
+            return mContainer != mReparent;
+        }
+
+        @Nullable
+        public IBinder getNewParent() {
+            return mReparent;
+        }
+
+        @NonNull
+        public IBinder getContainer() {
+            return mContainer;
+        }
+
+        public boolean getToTop() {
+            return mToTop;
+        }
+
+        @Override
+        public String toString() {
+            if (isReparent()) {
+                return "{reparent: " + mContainer + " to " + (mToTop ? "top of " : "bottom of ")
+                        + mReparent + "}";
+            } else {
+                return "{reorder: " + mContainer + " to " + (mToTop ? "top" : "bottom") + "}";
+            }
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeStrongBinder(mContainer);
+            dest.writeStrongBinder(mReparent);
+            dest.writeBoolean(mToTop);
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        public static final Creator<HierarchyOp> CREATOR = new Creator<HierarchyOp>() {
+            @Override
+            public HierarchyOp createFromParcel(Parcel in) {
+                return new HierarchyOp(in);
+            }
+
+            @Override
+            public HierarchyOp[] newArray(int size) {
+                return new HierarchyOp[size];
+            }
+        };
+    }
 }
diff --git a/core/java/android/view/WindowInsetsAnimation.java b/core/java/android/view/WindowInsetsAnimation.java
new file mode 100644
index 0000000..396da4a
--- /dev/null
+++ b/core/java/android/view/WindowInsetsAnimation.java
@@ -0,0 +1,432 @@
+/*
+ * 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;
+
+import android.annotation.FloatRange;
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SuppressLint;
+import android.graphics.Insets;
+import android.view.animation.Interpolator;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.List;
+
+/**
+ * Class representing an animation of a set of windows that cause insets.
+ */
+public final class WindowInsetsAnimation {
+
+    @WindowInsets.Type.InsetsType
+    private final int mTypeMask;
+    private float mFraction;
+    @Nullable
+    private final Interpolator mInterpolator;
+    private final long mDurationMillis;
+    private float mAlpha;
+
+    /**
+     * Creates a new {@link WindowInsetsAnimation} object.
+     * <p>
+     * This should only be used for testing, as usually the system creates this object for the
+     * application to listen to with {@link Callback}.
+     * </p>
+     * @param typeMask The bitmask of {@link WindowInsets.Type}s that are animating.
+     * @param interpolator The interpolator of the animation.
+     * @param durationMillis The duration of the animation in
+     *                   {@link java.util.concurrent.TimeUnit#MILLISECONDS}.
+     */
+    public WindowInsetsAnimation(
+            @WindowInsets.Type.InsetsType int typeMask, @Nullable Interpolator interpolator,
+            long durationMillis) {
+        mTypeMask = typeMask;
+        mInterpolator = interpolator;
+        mDurationMillis = durationMillis;
+    }
+
+    /**
+     * @return The bitmask of {@link WindowInsets.Type.InsetsType}s that are animating.
+     */
+    @WindowInsets.Type.InsetsType
+    public int getTypeMask() {
+        return mTypeMask;
+    }
+
+    /**
+     * Returns the raw fractional progress of this animation between
+     * start state of the animation and the end state of the animation. Note
+     * that this progress is the global progress of the animation, whereas
+     * {@link Callback#onProgress} will only dispatch the insets that may
+     * be inset with {@link WindowInsets#inset} by parents of views in the hierarchy.
+     * Progress per insets animation is global for the entire animation. One animation animates
+     * all things together (in, out, ...). If they don't animate together, we'd have
+     * multiple animations.
+     * <p>
+     * Note: In case the application is controlling the animation, the valued returned here will
+     * be the same as the application passed into
+     * {@link WindowInsetsAnimationController#setInsetsAndAlpha(Insets, float, float)}.
+     * </p>
+     * @return The current progress of this animation.
+     */
+    @FloatRange(from = 0f, to = 1f)
+    public float getFraction() {
+        return mFraction;
+    }
+
+    /**
+     * Returns the interpolated fractional progress of this animation between
+     * start state of the animation and the end state of the animation. Note
+     * that this progress is the global progress of the animation, whereas
+     * {@link Callback#onProgress} will only dispatch the insets that may
+     * be inset with {@link WindowInsets#inset} by parents of views in the hierarchy.
+     * Progress per insets animation is global for the entire animation. One animation animates
+     * all things together (in, out, ...). If they don't animate together, we'd have
+     * multiple animations.
+     * <p>
+     * Note: In case the application is controlling the animation, the valued returned here will
+     * be the same as the application passed into
+     * {@link WindowInsetsAnimationController#setInsetsAndAlpha(Insets, float, float)},
+     * interpolated with the interpolator passed into
+     * {@link WindowInsetsController#controlWindowInsetsAnimation}.
+     * </p>
+     * <p>
+     * Note: For system-initiated animations, this will always return a valid value between 0
+     * and 1.
+     * </p>
+     * @see #getFraction() for raw fraction.
+     * @return The current interpolated progress of this animation. -1 if interpolator isn't
+     *         specified.
+     */
+    public float getInterpolatedFraction() {
+        if (mInterpolator != null) {
+            return mInterpolator.getInterpolation(mFraction);
+        }
+        return -1;
+    }
+
+    /**
+     * Retrieves the interpolator used for this animation, or {@code null} if this animation
+     * doesn't follow an interpolation curved. For system-initiated animations, this will never
+     * return {@code null}.
+     *
+     * @return The interpolator used for this animation.
+     */
+    @Nullable
+    public Interpolator getInterpolator() {
+        return mInterpolator;
+    }
+
+    /**
+     * @return duration of animation in {@link java.util.concurrent.TimeUnit#MILLISECONDS}, or
+     *         -1 if the animation doesn't have a fixed duration.
+     */
+    public long getDurationMillis() {
+        return mDurationMillis;
+    }
+
+    /**
+     * Set fraction of the progress if {@link WindowInsets.Type.InsetsType} animation is
+     * controlled by the app.
+     * <p>
+     * Note: This should only be used for testing, as the system fills in the fraction for the
+     * application or the fraction that was passed into
+     * {@link WindowInsetsAnimationController#setInsetsAndAlpha(Insets, float, float)} is being
+     * used.
+     * </p>
+     * @param fraction fractional progress between 0 and 1 where 0 represents hidden and
+     *                zero progress and 1 represent fully shown final state.
+     * @see #getFraction()
+     */
+    public void setFraction(@FloatRange(from = 0f, to = 1f) float fraction) {
+        mFraction = fraction;
+    }
+
+    /**
+     * Retrieves the translucency of the windows that are animating.
+     *
+     * @return Alpha of windows that cause insets of type {@link WindowInsets.Type.InsetsType}.
+     */
+    @FloatRange(from = 0f, to = 1f)
+    public float getAlpha() {
+        return mAlpha;
+    }
+
+    /**
+     * Sets the translucency of the windows that are animating.
+     * <p>
+     * Note: This should only be used for testing, as the system fills in the alpha for the
+     * application or the alpha that was passed into
+     * {@link WindowInsetsAnimationController#setInsetsAndAlpha(Insets, float, float)} is being
+     * used.
+     * </p>
+     * @param alpha Alpha of windows that cause insets of type
+     *              {@link WindowInsets.Type.InsetsType}.
+     * @see #getAlpha()
+     */
+    public void setAlpha(@FloatRange(from = 0f, to = 1f) float alpha) {
+        mAlpha = alpha;
+    }
+
+    /**
+     * Class representing the range of an {@link WindowInsetsAnimation}
+     */
+    public static final class Bounds {
+
+        private final Insets mLowerBound;
+        private final Insets mUpperBound;
+
+        public Bounds(@NonNull Insets lowerBound, @NonNull Insets upperBound) {
+            mLowerBound = lowerBound;
+            mUpperBound = upperBound;
+        }
+
+        /**
+         * Queries the lower inset bound of the animation. If the animation is about showing or
+         * hiding a window that cause insets, the lower bound is {@link Insets#NONE} and the upper
+         * bound is the same as {@link WindowInsets#getInsets(int)} for the fully shown state. This
+         * is the same as {@link WindowInsetsAnimationController#getHiddenStateInsets} and
+         * {@link WindowInsetsAnimationController#getShownStateInsets} in case the listener gets
+         * invoked because of an animation that originates from
+         * {@link WindowInsetsAnimationController}.
+         * <p>
+         * However, if the size of a window that causes insets is changing, these are the
+         * lower/upper bounds of that size animation.
+         * </p>
+         * There are no overlapping animations for a specific type, but there may be multiple
+         * animations running at the same time for different inset types.
+         *
+         * @see #getUpperBound()
+         * @see WindowInsetsAnimationController#getHiddenStateInsets
+         */
+        @NonNull
+        public Insets getLowerBound() {
+            return mLowerBound;
+        }
+
+        /**
+         * Queries the upper inset bound of the animation. If the animation is about showing or
+         * hiding a window that cause insets, the lower bound is {@link Insets#NONE}
+         * nd the upper bound is the same as {@link WindowInsets#getInsets(int)} for the fully
+         * shown state. This is the same as
+         * {@link WindowInsetsAnimationController#getHiddenStateInsets} and
+         * {@link WindowInsetsAnimationController#getShownStateInsets} in case the listener gets
+         * invoked because of an animation that originates from
+         * {@link WindowInsetsAnimationController}.
+         * <p>
+         * However, if the size of a window that causes insets is changing, these are the
+         * lower/upper bounds of that size animation.
+         * <p>
+         * There are no overlapping animations for a specific type, but there may be multiple
+         * animations running at the same time for different inset types.
+         *
+         * @see #getLowerBound()
+         * @see WindowInsetsAnimationController#getShownStateInsets
+         */
+        @NonNull
+        public Insets getUpperBound() {
+            return mUpperBound;
+        }
+
+        /**
+         * Insets both the lower and upper bound by the specified insets. This is to be used in
+         * {@link Callback#onStart} to indicate that a part of the insets has
+         * been used to offset or clip its children, and the children shouldn't worry about that
+         * part anymore.
+         *
+         * @param insets The amount to inset.
+         * @return A copy of this instance inset in the given directions.
+         * @see WindowInsets#inset
+         * @see Callback#onStart
+         */
+        @NonNull
+        public Bounds inset(@NonNull Insets insets) {
+            return new Bounds(
+                    // TODO: refactor so that WindowInsets.insetInsets() is in a more appropriate
+                    //  place eventually.
+                    WindowInsets.insetInsets(
+                            mLowerBound, insets.left, insets.top, insets.right, insets.bottom),
+                    WindowInsets.insetInsets(
+                            mUpperBound, insets.left, insets.top, insets.right, insets.bottom));
+        }
+    }
+
+    /**
+     * Interface that allows the application to listen to animation events for windows that cause
+     * insets.
+     */
+    @SuppressLint("CallbackMethodName") // TODO(b/149430296) Should be on method, not class.
+    public abstract static class Callback {
+
+        /**
+         * Return value for {@link #getDispatchMode()}: Dispatching of animation events should
+         * stop at this level in the view hierarchy, and no animation events should be dispatch to
+         * the subtree of the view hierarchy.
+         */
+        public static final int DISPATCH_MODE_STOP = 0;
+
+        /**
+         * Return value for {@link #getDispatchMode()}: Dispatching of animation events should
+         * continue in the view hierarchy.
+         */
+        public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1;
+
+        /** @hide */
+        @IntDef(prefix = { "DISPATCH_MODE_" }, value = {
+                DISPATCH_MODE_STOP,
+                DISPATCH_MODE_CONTINUE_ON_SUBTREE
+        })
+        @Retention(RetentionPolicy.SOURCE)
+        public @interface DispatchMode {}
+
+        @DispatchMode
+        private final int mDispatchMode;
+
+        /**
+         * Creates a new {@link WindowInsetsAnimation} callback with the given
+         * {@link #getDispatchMode() dispatch mode}.
+         *
+         * @param dispatchMode The dispatch mode for this callback. See {@link #getDispatchMode()}.
+         */
+        public Callback(@DispatchMode int dispatchMode) {
+            mDispatchMode = dispatchMode;
+        }
+
+        /**
+         * Retrieves the dispatch mode of this listener. Dispatch of the all animation events is
+         * hierarchical: It will starts at the root of the view hierarchy and then traverse it and
+         * invoke the callback of the specific {@link View} that is being traversed.
+         * The method may return either {@link #DISPATCH_MODE_CONTINUE_ON_SUBTREE} to indicate that
+         * animation events should be propagated to the subtree of the view hierarchy, or
+         * {@link #DISPATCH_MODE_STOP} to stop dispatching. In that case, all animation callbacks
+         * related to the animation passed in will be stopped from propagating to the subtree of the
+         * hierarchy.
+         * <p>
+         * Also note that {@link #DISPATCH_MODE_STOP} behaves the same way as
+         * returning {@link WindowInsets#CONSUMED} during the regular insets dispatch in
+         * {@link View#onApplyWindowInsets}.
+         *
+         * @return Either {@link #DISPATCH_MODE_CONTINUE_ON_SUBTREE} to indicate that dispatching of
+         *         animation events will continue to the subtree of the view hierarchy, or
+         *         {@link #DISPATCH_MODE_STOP} to indicate that animation events will stop
+         *         dispatching.
+         */
+        @DispatchMode
+        @SuppressLint("CallbackMethodName") // TODO(b/149430296) False positive: not a callback.
+        public final int getDispatchMode() {
+            return mDispatchMode;
+        }
+
+        /**
+         * Called when an insets animation is about to start and before the views have been laid out
+         * in the end state of the animation. The ordering of events during an insets animation is
+         * the following:
+         * <p>
+         * <ul>
+         *     <li>Application calls {@link WindowInsetsController#hide(int)},
+         *     {@link WindowInsetsController#show(int)},
+         *     {@link WindowInsetsController#controlWindowInsetsAnimation}</li>
+         *     <li>onPrepare is called on the view hierarchy listeners</li>
+         *     <li>{@link View#onApplyWindowInsets} will be called with the end state of the
+         *     animation</li>
+         *     <li>View hierarchy gets laid out according to the changes the application has
+         *     requested due to the new insets being dispatched</li>
+         *     <li>{@link #onStart} is called <em>before</em> the view
+         *     hierarchy gets drawn in the new laid out state</li>
+         *     <li>{@link #onProgress} is called immediately after with the animation start
+         *     state</li>
+         *     <li>The frame gets drawn.</li>
+         * </ul>
+         * <p>
+         * This ordering allows the application to inspect the end state after the animation has
+         * finished, and then revert to the starting state of the animation in the first
+         * {@link #onProgress} callback by using post-layout view properties like {@link View#setX}
+         * and related methods.
+         * <p>
+         * Note: If the animation is application controlled by using
+         * {@link WindowInsetsController#controlWindowInsetsAnimation}, the end state of the
+         * animation is undefined as the application may decide on the end state only by passing in
+         * {@code shown} parameter when calling {@link WindowInsetsAnimationController#finish}. In
+         * this situation, the system will dispatch the insets in the opposite visibility state
+         * before the animation starts. Example: When controlling the input method with
+         * {@link WindowInsetsController#controlWindowInsetsAnimation} and the input method is
+         * currently showing, {@link View#onApplyWindowInsets} will receive a {@link WindowInsets}
+         * instance for which {@link WindowInsets#isVisible} will return {@code false} for
+         * {@link WindowInsets.Type#ime}.
+         *
+         * @param animation The animation that is about to start.
+         */
+        public void onPrepare(@NonNull WindowInsetsAnimation animation) {
+        }
+
+        /**
+         * Called when an insets animation gets started.
+         * <p>
+         * Note that, like {@link #onProgress}, dispatch of the animation start event is
+         * hierarchical: It will starts at the root of the view hierarchy and then traverse it
+         * and invoke the callback of the specific {@link View} that is being traversed.
+         * The method may return a modified
+         * instance of the bounds by calling {@link Bounds#inset} to indicate that a part of
+         * the insets have been used to offset or clip its children, and the children shouldn't
+         * worry about that part anymore. Furthermore, if {@link #getDispatchMode()} returns
+         * {@link #DISPATCH_MODE_STOP}, children of this view will not receive the callback anymore.
+         *
+         * @param animation The animation that is about to start.
+         * @param bounds The bounds in which animation happens.
+         * @return The animation representing the part of the insets that should be dispatched to
+         *         the subtree of the hierarchy.
+         */
+        @NonNull
+        public Bounds onStart(
+                @NonNull WindowInsetsAnimation animation, @NonNull Bounds bounds) {
+            return bounds;
+        }
+
+        /**
+         * Called when the insets change as part of running an animation. Note that even if multiple
+         * animations for different types are running, there will only be one progress callback per
+         * frame. The {@code insets} passed as an argument represents the overall state and will
+         * include all types, regardless of whether they are animating or not.
+         * <p>
+         * Note that insets dispatch is hierarchical: It will start at the root of the view
+         * hierarchy, and then traverse it and invoke the callback of the specific {@link View}
+         * being traversed. The method may return a modified instance by calling
+         * {@link WindowInsets#inset(int, int, int, int)} to indicate that a part of the insets have
+         * been used to offset or clip its children, and the children shouldn't worry about that
+         * part anymore. Furthermore, if {@link #getDispatchMode()} returns
+         * {@link #DISPATCH_MODE_STOP}, children of this view will not receive the callback anymore.
+         *
+         * @param insets The current insets.
+         * @param runningAnimations The currently running animations.
+         * @return The insets to dispatch to the subtree of the hierarchy.
+         */
+        @NonNull
+        public abstract WindowInsets onProgress(@NonNull WindowInsets insets,
+                @NonNull List<WindowInsetsAnimation> runningAnimations);
+
+        /**
+         * Called when an insets animation has ended.
+         *
+         * @param animation The animation that has ended. This will be the same instance
+         *                  as passed into {@link #onStart}
+         */
+        public void onEnd(@NonNull WindowInsetsAnimation animation) {
+        }
+
+    }
+}
diff --git a/core/java/android/view/WindowInsetsAnimationCallback.java b/core/java/android/view/WindowInsetsAnimationCallback.java
deleted file mode 100644
index 4c8463b3..0000000
--- a/core/java/android/view/WindowInsetsAnimationCallback.java
+++ /dev/null
@@ -1,412 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.view;
-
-import android.annotation.FloatRange;
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.graphics.Insets;
-import android.view.WindowInsets.Type;
-import android.view.WindowInsets.Type.InsetsType;
-import android.view.animation.Interpolator;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Interface that allows the application to listen to animation events for windows that cause
- * insets.
- */
-public interface WindowInsetsAnimationCallback {
-
-    /**
-     * Return value for {@link #getDispatchMode()}: Dispatching of animation events should
-     * stop at this level in the view hierarchy, and no animation events should be dispatch to the
-     * subtree of the view hierarchy.
-     */
-    int DISPATCH_MODE_STOP = 0;
-
-    /**
-     * Return value for {@link #getDispatchMode()}: Dispatching of animation events should
-     * continue in the view hierarchy.
-     */
-    int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1;
-
-    /** @hide */
-    @IntDef(prefix = { "DISPATCH_MODE_" }, value = {
-            DISPATCH_MODE_STOP,
-            DISPATCH_MODE_CONTINUE_ON_SUBTREE
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    @interface DispatchMode {}
-
-    /**
-     * Retrieves the dispatch mode of this listener. Dispatch of the all animation events is
-     * hierarchical: It will starts at the root of the view hierarchy and then traverse it and
-     * invoke the callback of the specific {@link View} that is being traversed.
-     * The method may return either {@link #DISPATCH_MODE_CONTINUE_ON_SUBTREE} to indicate that
-     * animation events should be propagated to the subtree of the view hierarchy, or
-     * {@link #DISPATCH_MODE_STOP} to stop dispatching. In that case, all animation callbacks
-     * related to the animation passed in will be stopped from propagating to the subtree of the
-     * hierarchy.
-     * <p>
-     * Note that this method will only be invoked once when
-     * {@link View#setWindowInsetsAnimationCallback setting the listener} and then the framework
-     * will use the recorded result.
-     * <p>
-     * Also note that returning {@link #DISPATCH_MODE_STOP} here behaves the same way as returning
-     * {@link WindowInsets#CONSUMED} during the regular insets dispatch in
-     * {@link View#onApplyWindowInsets}.
-     *
-     * @return Either {@link #DISPATCH_MODE_CONTINUE_ON_SUBTREE} to indicate that dispatching of
-     *         animation events will continue to the subtree of the view hierarchy, or
-     *         {@link #DISPATCH_MODE_STOP} to indicate that animation events will stop dispatching.
-     */
-    @DispatchMode
-    int getDispatchMode();
-
-    /**
-     * Called when an insets animation is about to start and before the views have been laid out in
-     * the end state of the animation. The ordering of events during an insets animation is the
-     * following:
-     * <p>
-     * <ul>
-     *     <li>Application calls {@link WindowInsetsController#hide(int)},
-     *     {@link WindowInsetsController#show(int)},
-     *     {@link WindowInsetsController#controlWindowInsetsAnimation}</li>
-     *     <li>onPrepare is called on the view hierarchy listeners</li>
-     *     <li>{@link View#onApplyWindowInsets} will be called with the end state of the
-     *     animation</li>
-     *     <li>View hierarchy gets laid out according to the changes the application has requested
-     *     due to the new insets being dispatched</li>
-     *     <li>{@link #onStart} is called <em>before</em> the view
-     *     hierarchy gets drawn in the new laid out state</li>
-     *     <li>{@link #onProgress} is called immediately after with the animation start state</li>
-     *     <li>The frame gets drawn.</li>
-     * </ul>
-     * <p>
-     * This ordering allows the application to inspect the end state after the animation has
-     * finished, and then revert to the starting state of the animation in the first
-     * {@link #onProgress} callback by using post-layout view properties like {@link View#setX} and
-     * related methods.
-     * <p>
-     * Note: If the animation is application controlled by using
-     * {@link WindowInsetsController#controlWindowInsetsAnimation}, the end state of the animation
-     * is undefined as the application may decide on the end state only by passing in the
-     * {@code shown} parameter when calling {@link WindowInsetsAnimationController#finish}. In this
-     * situation, the system will dispatch the insets in the opposite visibility state before the
-     * animation starts. Example: When controlling the input method with
-     * {@link WindowInsetsController#controlWindowInsetsAnimation} and the input method is currently
-     * showing, {@link View#onApplyWindowInsets} will receive a {@link WindowInsets} instance for
-     * which {@link WindowInsets#isVisible} will return {@code false} for {@link Type#ime}.
-     *
-     * @param animation The animation that is about to start.
-     */
-    default void onPrepare(@NonNull InsetsAnimation animation) {
-    }
-
-    /**
-     * Called when an insets animation gets started.
-     * <p>
-     * Note that, like {@link #onProgress}, dispatch of the animation start event is hierarchical:
-     * It will starts at the root of the view hierarchy and then traverse it and invoke the callback
-     * of the specific {@link View} that is being traversed. The method may return a modified
-     * instance of the bounds by calling {@link AnimationBounds#inset} to indicate that a part of
-     * the insets have been used to offset or clip its children, and the children shouldn't worry
-     * about that part anymore. Furthermore, if {@link #getDispatchMode()} returns
-     * {@link #DISPATCH_MODE_STOP}, children of this view will not receive the callback anymore.
-     *
-     * @param animation The animation that is about to start.
-     * @param bounds The bounds in which animation happens.
-     * @return The animation representing the part of the insets that should be dispatched to the
-     *         subtree of the hierarchy.
-     */
-    @NonNull
-    default AnimationBounds onStart(
-            @NonNull InsetsAnimation animation, @NonNull AnimationBounds bounds) {
-        return bounds;
-    }
-
-    /**
-     * Called when the insets change as part of running an animation. Note that even if multiple
-     * animations for different types are running, there will only be one progress callback per
-     * frame. The {@code insets} passed as an argument represents the overall state and will include
-     * all types, regardless of whether they are animating or not.
-     * <p>
-     * Note that insets dispatch is hierarchical: It will start at the root of the view hierarchy,
-     * and then traverse it and invoke the callback of the specific {@link View} being traversed.
-     * The method may return a modified instance by calling
-     * {@link WindowInsets#inset(int, int, int, int)} to indicate that a part of the insets have
-     * been used to offset or clip its children, and the children shouldn't worry about that part
-     * anymore. Furthermore, if {@link #getDispatchMode()} returns
-     * {@link #DISPATCH_MODE_STOP}, children of this view will not receive the callback anymore.
-     *
-     * TODO: Introduce a way to map (type -> InsetAnimation) so app developer can query animation
-     *  for a given type e.g. callback.getAnimation(type) OR controller.getAnimation(type).
-     *  Or on the controller directly?
-     * @param insets The current insets.
-     * @return The insets to dispatch to the subtree of the hierarchy.
-     */
-    @NonNull
-    WindowInsets onProgress(@NonNull WindowInsets insets);
-
-    /**
-     * Called when an insets animation has finished.
-     *
-     * @param animation The animation that has finished running. This will be the same instance as
-     *                  passed into {@link #onStart}
-     */
-    default void onFinish(@NonNull InsetsAnimation animation) {
-    }
-
-    /**
-     * Class representing an animation of a set of windows that cause insets.
-     */
-    final class InsetsAnimation {
-
-        private final @InsetsType int mTypeMask;
-        private float mFraction;
-        @Nullable private final Interpolator mInterpolator;
-        private final long mDurationMillis;
-        private float mAlpha;
-
-        /**
-         * Creates a new {@link InsetsAnimation} object.
-         * <p>
-         * This should only be used for testing, as usually the system creates this object for the
-         * application to listen to with {@link WindowInsetsAnimationCallback}.
-         * </p>
-         * @param typeMask The bitmask of {@link WindowInsets.Type}s that are animating.
-         * @param interpolator The interpolator of the animation.
-         * @param durationMillis The duration of the animation in
-         *                   {@link java.util.concurrent.TimeUnit#MILLISECONDS}.
-         */
-        public InsetsAnimation(
-                @InsetsType int typeMask, @Nullable Interpolator interpolator,
-                long durationMillis) {
-            mTypeMask = typeMask;
-            mInterpolator = interpolator;
-            mDurationMillis = durationMillis;
-        }
-
-        /**
-         * @return The bitmask of {@link WindowInsets.Type.InsetsType}s that are animating.
-         */
-        public @InsetsType int getTypeMask() {
-            return mTypeMask;
-        }
-
-        /**
-         * Returns the raw fractional progress of this animation between
-         * start state of the animation and the end state of the animation. Note
-         * that this progress is the global progress of the animation, whereas
-         * {@link WindowInsetsAnimationCallback#onProgress} will only dispatch the insets that may
-         * be inset with {@link WindowInsets#inset} by parents of views in the hierarchy.
-         * Progress per insets animation is global for the entire animation. One animation animates
-         * all things together (in, out, ...). If they don't animate together, we'd have
-         * multiple animations.
-         * <p>
-         * Note: In case the application is controlling the animation, the valued returned here will
-         * be the same as the application passed into
-         * {@link WindowInsetsAnimationController#setInsetsAndAlpha(Insets, float, float)}.
-         * </p>
-         * @return The current progress of this animation.
-         */
-        @FloatRange(from = 0f, to = 1f)
-        public float getFraction() {
-            return mFraction;
-        }
-
-        /**
-         * Returns the interpolated fractional progress of this animation between
-         * start state of the animation and the end state of the animation. Note
-         * that this progress is the global progress of the animation, whereas
-         * {@link WindowInsetsAnimationCallback#onProgress} will only dispatch the insets that may
-         * be inset with {@link WindowInsets#inset} by parents of views in the hierarchy.
-         * Progress per insets animation is global for the entire animation. One animation animates
-         * all things together (in, out, ...). If they don't animate together, we'd have
-         * multiple animations.
-         * <p>
-         * Note: In case the application is controlling the animation, the valued returned here will
-         * be the same as the application passed into
-         * {@link WindowInsetsAnimationController#setInsetsAndAlpha(Insets, float, float)},
-         * interpolated with the interpolator passed into
-         * {@link WindowInsetsController#controlWindowInsetsAnimation}.
-         * </p>
-         * <p>
-         * Note: For system-initiated animations, this will always return a valid value between 0
-         * and 1.
-         * </p>
-         * @see #getFraction() for raw fraction.
-         * @return The current interpolated progress of this animation. -1 if interpolator isn't
-         *         specified.
-         */
-        public float getInterpolatedFraction() {
-            if (mInterpolator != null) {
-                return mInterpolator.getInterpolation(mFraction);
-            }
-            return -1;
-        }
-
-        /**
-         * Retrieves the interpolator used for this animation, or {@code null} if this animation
-         * doesn't follow an interpolation curved. For system-initiated animations, this will never
-         * return {@code null}.
-         *
-         * @return The interpolator used for this animation.
-         */
-        @Nullable
-        public Interpolator getInterpolator() {
-            return mInterpolator;
-        }
-
-        /**
-         * @return duration of animation in {@link java.util.concurrent.TimeUnit#MILLISECONDS}, or
-         *         -1 if the animation doesn't have a fixed duration.
-         */
-        public long getDurationMillis() {
-            return mDurationMillis;
-        }
-
-        /**
-         * Set fraction of the progress if {@link WindowInsets.Type.InsetsType} animation is
-         * controlled by the app.
-         * <p>
-         * Note: This should only be used for testing, as the system fills in the fraction for the
-         * application or the fraction that was passed into
-         * {@link WindowInsetsAnimationController#setInsetsAndAlpha(Insets, float, float)} is being
-         * used.
-         * </p>
-         * @param fraction fractional progress between 0 and 1 where 0 represents hidden and
-         *                zero progress and 1 represent fully shown final state.
-         * @see #getFraction()
-         */
-        public void setFraction(@FloatRange(from = 0f, to = 1f) float fraction) {
-            mFraction = fraction;
-        }
-
-        /**
-         * Retrieves the translucency of the windows that are animating.
-         *
-         * @return Alpha of windows that cause insets of type {@link WindowInsets.Type.InsetsType}.
-         */
-        @FloatRange(from = 0f, to = 1f)
-        public float getAlpha() {
-            return mAlpha;
-        }
-
-        /**
-         * Sets the translucency of the windows that are animating.
-         * <p>
-         * Note: This should only be used for testing, as the system fills in the alpha for the
-         * application or the alpha that was passed into
-         * {@link WindowInsetsAnimationController#setInsetsAndAlpha(Insets, float, float)} is being
-         * used.
-         * </p>
-         * @param alpha Alpha of windows that cause insets of type
-         *              {@link WindowInsets.Type.InsetsType}.
-         * @see #getAlpha()
-         */
-        public void setAlpha(@FloatRange(from = 0f, to = 1f) float alpha) {
-            mAlpha = alpha;
-        }
-    }
-
-    /**
-     * Class representing the range of an {@link InsetsAnimation}
-     */
-    final class AnimationBounds {
-
-        private final Insets mLowerBound;
-        private final Insets mUpperBound;
-
-        public AnimationBounds(@NonNull Insets lowerBound, @NonNull Insets upperBound) {
-            mLowerBound = lowerBound;
-            mUpperBound = upperBound;
-        }
-
-        /**
-         * Queries the lower inset bound of the animation. If the animation is about showing or
-         * hiding a window that cause insets, the lower bound is {@link Insets#NONE} and the upper
-         * bound is the same as {@link WindowInsets#getInsets(int)} for the fully shown state. This
-         * is the same as {@link WindowInsetsAnimationController#getHiddenStateInsets} and
-         * {@link WindowInsetsAnimationController#getShownStateInsets} in case the listener gets
-         * invoked because of an animation that originates from
-         * {@link WindowInsetsAnimationController}.
-         * <p>
-         * However, if the size of a window that causes insets is changing, these are the
-         * lower/upper bounds of that size animation.
-         * </p>
-         * There are no overlapping animations for a specific type, but there may be multiple
-         * animations running at the same time for different inset types.
-         *
-         * @see #getUpperBound()
-         * @see WindowInsetsAnimationController#getHiddenStateInsets
-         */
-        @NonNull
-        public Insets getLowerBound() {
-            return mLowerBound;
-        }
-
-        /**
-         * Queries the upper inset bound of the animation. If the animation is about showing or
-         * hiding a window that cause insets, the lower bound is {@link Insets#NONE}
-         * nd the upper bound is the same as {@link WindowInsets#getInsets(int)} for the fully
-         * shown state. This is the same as
-         * {@link WindowInsetsAnimationController#getHiddenStateInsets} and
-         * {@link WindowInsetsAnimationController#getShownStateInsets} in case the listener gets
-         * invoked because of an animation that originates from
-         * {@link WindowInsetsAnimationController}.
-         * <p>
-         * However, if the size of a window that causes insets is changing, these are the
-         * lower/upper bounds of that size animation.
-         * <p>
-         * There are no overlapping animations for a specific type, but there may be multiple
-         * animations running at the same time for different inset types.
-         *
-         * @see #getLowerBound()
-         * @see WindowInsetsAnimationController#getShownStateInsets
-         */
-        @NonNull
-        public Insets getUpperBound() {
-            return mUpperBound;
-        }
-
-        /**
-         * Insets both the lower and upper bound by the specified insets. This is to be used in
-         * {@link WindowInsetsAnimationCallback#onStart} to indicate that a part of the insets has
-         * been used to offset or clip its children, and the children shouldn't worry about that
-         * part anymore.
-         *
-         * @param insets The amount to inset.
-         * @return A copy of this instance inset in the given directions.
-         * @see WindowInsets#inset
-         * @see WindowInsetsAnimationCallback#onStart
-         */
-        @NonNull
-        public AnimationBounds inset(@NonNull Insets insets) {
-            return new AnimationBounds(
-                    // TODO: refactor so that WindowInsets.insetInsets() is in a more appropriate
-                    //  place eventually.
-                    WindowInsets.insetInsets(
-                            mLowerBound, insets.left, insets.top, insets.right, insets.bottom),
-                    WindowInsets.insetInsets(
-                            mUpperBound, insets.left, insets.top, insets.right, insets.bottom));
-        }
-    }
-}
diff --git a/core/java/android/view/WindowInsetsAnimationController.java b/core/java/android/view/WindowInsetsAnimationController.java
index 4a864be..2c7880b 100644
--- a/core/java/android/view/WindowInsetsAnimationController.java
+++ b/core/java/android/view/WindowInsetsAnimationController.java
@@ -22,8 +22,7 @@
 import android.annotation.SuppressLint;
 import android.graphics.Insets;
 import android.view.WindowInsets.Type.InsetsType;
-import android.view.WindowInsetsAnimationCallback.AnimationBounds;
-import android.view.animation.Interpolator;
+import android.view.WindowInsetsAnimation.Bounds;
 
 /**
  * Controller for app-driven animation of system windows.
@@ -35,7 +34,7 @@
  *  <p>
  *  Control is obtained through {@link WindowInsetsController#controlWindowInsetsAnimation}.
  */
-@SuppressLint("NotClosable")
+@SuppressLint("NotCloseable")
 public interface WindowInsetsAnimationController {
 
     /**
@@ -45,12 +44,12 @@
      * to {@link View#getRootView}
      * <p>
      * If there are any animation listeners registered, this value is the same as
-     * {@link AnimationBounds#getLowerBound()} that is being be passed into the root view of the
+     * {@link Bounds#getLowerBound()} that is being be passed into the root view of the
      * hierarchy.
      *
      * @return Insets when the windows this animation is controlling are fully hidden.
      *
-     * @see AnimationBounds#getLowerBound()
+     * @see Bounds#getLowerBound()
      */
     @NonNull Insets getHiddenStateInsets();
 
@@ -61,11 +60,11 @@
      * to {@link View#getRootView}
      * <p>
      * If there are any animation listeners registered, this value is the same as
-     * {@link AnimationBounds#getUpperBound()} that is being passed into the root view of hierarchy.
+     * {@link Bounds#getUpperBound()} that is being passed into the root view of hierarchy.
      *
      * @return Insets when the windows this animation is controlling are fully shown.
      *
-     * @see AnimationBounds#getUpperBound()
+     * @see Bounds#getUpperBound()
      */
     @NonNull Insets getShownStateInsets();
 
@@ -114,9 +113,9 @@
      * Also note that this will <b>not</b> inform the view system of a full inset change via
      * {@link View#dispatchApplyWindowInsets} in order to avoid a full layout pass during the
      * animation. If you'd like to animate views during a window inset animation, register a
-     * {@link WindowInsetsAnimationCallback} by calling
-     * {@link View#setWindowInsetsAnimationCallback(WindowInsetsAnimationCallback)} that will be
-     * notified about any insets change via {@link WindowInsetsAnimationCallback#onProgress} during
+     * {@link WindowInsetsAnimation.Callback} by calling
+     * {@link View#setWindowInsetsAnimationCallback(WindowInsetsAnimation.Callback)} that will be
+     * notified about any insets change via {@link WindowInsetsAnimation.Callback#onProgress} during
      * the animation.
      * <p>
      * {@link View#dispatchApplyWindowInsets} will instead be called once the animation has
@@ -131,10 +130,10 @@
      *               If you intend on changing alpha only, pass null or {@link #getCurrentInsets()}.
      * @param alpha  The new alpha to apply to the inset side.
      * @param fraction instantaneous animation progress. This value is dispatched to
-     *                 {@link WindowInsetsAnimationCallback}.
+     *                 {@link WindowInsetsAnimation.Callback}.
      *
-     * @see WindowInsetsAnimationCallback
-     * @see View#setWindowInsetsAnimationCallback(WindowInsetsAnimationCallback)
+     * @see WindowInsetsAnimation.Callback
+     * @see View#setWindowInsetsAnimationCallback(WindowInsetsAnimation.Callback)
      */
     void setInsetsAndAlpha(@Nullable Insets insets, @FloatRange(from = 0f, to = 1f) float alpha,
             @FloatRange(from = 0f, to = 1f) float fraction);
diff --git a/core/java/android/view/WindowInsetsController.java b/core/java/android/view/WindowInsetsController.java
index f501de9..b7ca037 100644
--- a/core/java/android/view/WindowInsetsController.java
+++ b/core/java/android/view/WindowInsetsController.java
@@ -16,14 +16,12 @@
 
 package android.view;
 
-import static android.view.WindowInsets.Type.ime;
-
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.graphics.Insets;
+import android.os.CancellationSignal;
 import android.view.WindowInsets.Type.InsetsType;
-import android.view.WindowInsetsAnimationCallback.InsetsAnimation;
 import android.view.animation.Interpolator;
 
 import java.lang.annotation.Retention;
@@ -148,21 +146,23 @@
      * @param types The {@link InsetsType}s the application has requested to control.
      * @param durationMillis Duration of animation in
      *                       {@link java.util.concurrent.TimeUnit#MILLISECONDS}, or -1 if the
-     *                       animation doesn't have a predetermined duration.T his value will be
-     *                       passed to {@link InsetsAnimation#getDurationMillis()}
+     *                       animation doesn't have a predetermined duration. This value will be
+     *                       passed to {@link WindowInsetsAnimation#getDurationMillis()}
      * @param interpolator The interpolator used for this animation, or {@code null} if this
      *                     animation doesn't follow an interpolation curve. This value will be
-     *                     passed to {@link InsetsAnimation#getInterpolator()} and used to calculate
-     *                     {@link InsetsAnimation#getInterpolatedFraction()}.
+     *                     passed to {@link WindowInsetsAnimation#getInterpolator()} and used to
+     *                     calculate {@link WindowInsetsAnimation#getInterpolatedFraction()}.
      * @param listener The {@link WindowInsetsAnimationControlListener} that gets called when the
      *                 windows are ready to be controlled, among other callbacks.
-     *
-     * @see InsetsAnimation#getFraction()
-     * @see InsetsAnimation#getInterpolatedFraction()
-     * @see InsetsAnimation#getInterpolator()
-     * @see InsetsAnimation#getDurationMillis()
+     * @return A cancellation signal that the caller can use to cancel the request to obtain
+     *         control, or once they have control, to cancel the control.
+     * @see WindowInsetsAnimation#getFraction()
+     * @see WindowInsetsAnimation#getInterpolatedFraction()
+     * @see WindowInsetsAnimation#getInterpolator()
+     * @see WindowInsetsAnimation#getDurationMillis()
      */
-    void controlWindowInsetsAnimation(@InsetsType int types, long durationMillis,
+    @NonNull
+    CancellationSignal controlWindowInsetsAnimation(@InsetsType int types, long durationMillis,
             @Nullable Interpolator interpolator,
             @NonNull WindowInsetsAnimationControlListener listener);
 
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index dad7671..e731323 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -3687,6 +3687,8 @@
                     return "always";
                 case LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER:
                     return "never";
+                case LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES:
+                    return "shortEdges";
                 default:
                     return "unknown(" + mode + ")";
             }
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index f03c4e7..01a1c77 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -56,13 +56,7 @@
 public final class WindowManagerGlobal {
     private static final String TAG = "WindowManager";
 
-    private static final String WM_USE_BLAST_ADAPTER_FLAG = "wm_use_blast_adapter";
-
-    /**
-     * This flag controls whether ViewRootImpl will utilize the Blast Adapter
-     * to send buffer updates to SurfaceFlinger
-     */
-    public static final boolean USE_BLAST_ADAPTER = false;
+    private static boolean sUseBLASTAdapter = false;
 
     /**
      * The user is navigating with keys (not the touch screen), so
@@ -192,6 +186,7 @@
                     if (sWindowManagerService != null) {
                         ValueAnimator.setDurationScale(
                                 sWindowManagerService.getCurrentAnimatorScale());
+                        sUseBLASTAdapter = sWindowManagerService.useBLAST();
                     }
                 } catch (RemoteException e) {
                     throw e.rethrowFromSystemServer();
@@ -233,6 +228,13 @@
         }
     }
 
+    /**
+     * Whether or not to use BLAST for ViewRootImpl
+     */
+    public static boolean useBLAST() {
+        return sUseBLASTAdapter;
+    }
+
     @UnsupportedAppUsage
     public String[] getViewRootNames() {
         synchronized (mLock) {
diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java
index 4365d1f..56683dd 100644
--- a/core/java/android/view/WindowManagerImpl.java
+++ b/core/java/android/view/WindowManagerImpl.java
@@ -277,7 +277,7 @@
                     .setStableInsets(Insets.of(stableInsets))
                     .setDisplayCutout(displayCutout.get()).build();
         } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
         }
-        return null;
     }
 }
diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java
index 62f3fa4..87dcba0 100644
--- a/core/java/android/view/WindowlessWindowManager.java
+++ b/core/java/android/view/WindowlessWindowManager.java
@@ -163,6 +163,15 @@
         return !PixelFormat.formatHasAlpha(attrs.format);
     }
 
+    /** @hide */
+    protected SurfaceControl getSurfaceControl(View rootView) {
+        final State s = mStateForWindow.get(rootView.getViewRootImpl().mWindow.asBinder());
+        if (s == null) {
+            return null;
+        }
+        return s.mSurfaceControl;
+    }
+
     @Override
     public int relayout(IWindow window, int seq, WindowManager.LayoutParams inAttrs,
             int requestedWidth, int requestedHeight, int viewFlags, int flags, long frameNumber,
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index 02b098b..dc87453 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -1086,6 +1086,50 @@
     }
 
     /**
+     * Associate the connection between the host View and the embedded SurfaceControlViewHost.
+     *
+     * @hide
+     */
+    public void associateEmbeddedHierarchy(@NonNull IBinder host, @NonNull IBinder embedded) {
+        final IAccessibilityManager service;
+        synchronized (mLock) {
+            service = getServiceLocked();
+            if (service == null) {
+                return;
+            }
+        }
+        try {
+            service.associateEmbeddedHierarchy(host, embedded);
+        } catch (RemoteException e) {
+            return;
+        }
+    }
+
+    /**
+     * Disassociate the connection between the host View and the embedded SurfaceControlViewHost.
+     * The given token could be either from host side or embedded side.
+     *
+     * @hide
+     */
+    public void disassociateEmbeddedHierarchy(@NonNull IBinder token) {
+        if (token == null) {
+            return;
+        }
+        final IAccessibilityManager service;
+        synchronized (mLock) {
+            service = getServiceLocked();
+            if (service == null) {
+                return;
+            }
+        }
+        try {
+            service.disassociateEmbeddedHierarchy(token);
+        } catch (RemoteException e) {
+            return;
+        }
+    }
+
+    /**
      * Sets the current state and notifies listeners, if necessary.
      *
      * @param stateFlags The state flags.
@@ -1147,11 +1191,12 @@
     /**
      * Adds an accessibility interaction connection interface for a given window.
      * @param windowToken The window token to which a connection is added.
+     * @param leashToken The leash token to which a connection is added.
      * @param connection The connection.
      *
      * @hide
      */
-    public int addAccessibilityInteractionConnection(IWindow windowToken,
+    public int addAccessibilityInteractionConnection(IWindow windowToken, IBinder leashToken,
             String packageName, IAccessibilityInteractionConnection connection) {
         final IAccessibilityManager service;
         final int userId;
@@ -1163,8 +1208,8 @@
             userId = mUserId;
         }
         try {
-            return service.addAccessibilityInteractionConnection(windowToken, connection,
-                    packageName, userId);
+            return service.addAccessibilityInteractionConnection(windowToken, leashToken,
+                    connection, packageName, userId);
         } catch (RemoteException re) {
             Log.e(LOG_TAG, "Error while adding an accessibility interaction connection. ", re);
         }
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index 05cf3ed..eb4f9db 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -50,8 +50,12 @@
 import android.util.Log;
 import android.util.LongArray;
 import android.util.Pools.SynchronizedPool;
+import android.util.Size;
+import android.util.TypedValue;
 import android.view.TouchDelegate;
 import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
 
 import com.android.internal.R;
 import com.android.internal.util.CollectionUtils;
@@ -634,6 +638,25 @@
     public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH =
             "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH";
 
+    /**
+     * Key used to request extra data for accessibility scanning tool's purposes.
+     * The key requests that a {@link AccessibilityNodeInfo.ExtraRenderingInfo} be added to this
+     * info. This request is made with {@link #refreshWithExtraData(String, Bundle)} without
+     * argument.
+     * <p>
+     * The data can be retrieved from the {@link ExtraRenderingInfo} returned by
+     * {@link #getExtraRenderingInfo()} using {@link ExtraRenderingInfo#getLayoutParams},
+     * {@link ExtraRenderingInfo#getTextSizeInPx()} and
+     * {@link ExtraRenderingInfo#getTextSizeUnit()}. For layout params, it is supported by both
+     * {@link TextView} and {@link ViewGroup}. For text size and unit, it is only supported by
+     * {@link TextView}.
+     *
+     * @see #refreshWithExtraData(String, Bundle)
+     */
+
+    public static final String EXTRA_DATA_RENDERING_INFO_KEY =
+            "android.view.accessibility.extra.DATA_RENDERING_INFO_KEY";
+
     /** @hide */
     public static final String EXTRA_DATA_REQUESTED_KEY =
             "android.view.accessibility.AccessibilityNodeInfo.extra_data_requested";
@@ -804,6 +827,8 @@
 
     private TouchDelegateInfo mTouchDelegateInfo;
 
+    private ExtraRenderingInfo mExtraRenderingInfo;
+
     private IBinder mLeashedChild;
     private IBinder mLeashedParent;
     private long mLeashedParentNodeId = UNDEFINED_NODE_ID;
@@ -991,6 +1016,7 @@
      * @param extraDataKey The extra data requested. Data that must be requested
      *                     with this mechanism is generally expensive to retrieve, so should only be
      *                     requested when needed. See
+     *                     {@link #EXTRA_DATA_RENDERING_INFO_KEY},
      *                     {@link #EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY} and
      *                     {@link #getAvailableExtraData()}.
      * @param args A bundle of arguments for the request. These depend on the particular request.
@@ -1547,6 +1573,7 @@
      * {@link #refreshWithExtraData(String, Bundle)}.
      *
      * @return An unmodifiable list of keys corresponding to extra data that can be requested.
+     * @see #EXTRA_DATA_RENDERING_INFO_KEY
      * @see #EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY
      */
     public List<String> getAvailableExtraData() {
@@ -2375,6 +2402,32 @@
     }
 
     /**
+     * Gets the conformance info if the node is meant to be refreshed with extra data.
+     *
+     * @return The conformance info.
+     */
+    @Nullable
+    public ExtraRenderingInfo getExtraRenderingInfo() {
+        return mExtraRenderingInfo;
+    }
+
+    /**
+     * Sets the conformance info if the node is meant to be refreshed with extra data.
+     * <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 extraRenderingInfo The conformance info.
+     * @hide
+     */
+    public void setExtraRenderingInfo(@NonNull ExtraRenderingInfo extraRenderingInfo) {
+        enforceNotSealed();
+        mExtraRenderingInfo = extraRenderingInfo;
+    }
+
+    /**
      * Gets if the content of this node is invalid. For example,
      * a date is not well-formed.
      *
@@ -3695,6 +3748,10 @@
             nonDefaultFields |= bitAt(fieldIndex);
         }
         fieldIndex++;
+        if (!Objects.equals(mExtraRenderingInfo, DEFAULT.mExtraRenderingInfo)) {
+            nonDefaultFields |= bitAt(fieldIndex);
+        }
+        fieldIndex++;
         if (mLeashedChild != DEFAULT.mLeashedChild) {
             nonDefaultFields |= bitAt(fieldIndex);
         }
@@ -3833,6 +3890,12 @@
         }
 
         if (isBitSet(nonDefaultFields, fieldIndex++)) {
+            parcel.writeValue(mExtraRenderingInfo.getLayoutParams());
+            parcel.writeFloat(mExtraRenderingInfo.getTextSizeInPx());
+            parcel.writeInt(mExtraRenderingInfo.getTextSizeUnit());
+        }
+
+        if (isBitSet(nonDefaultFields, fieldIndex++)) {
             parcel.writeStrongBinder(mLeashedChild);
         }
         if (isBitSet(nonDefaultFields, fieldIndex++)) {
@@ -3941,6 +4004,9 @@
         if (mCollectionItemInfo != null) mCollectionItemInfo.recycle();
         mCollectionItemInfo =  (other.mCollectionItemInfo != null)
                 ? CollectionItemInfo.obtain(other.mCollectionItemInfo) : null;
+        if (mExtraRenderingInfo != null) mExtraRenderingInfo.recycle();
+        mExtraRenderingInfo = (other.mExtraRenderingInfo != null)
+                ? ExtraRenderingInfo.obtain(other.mExtraRenderingInfo) : null;
     }
 
     private void initCopyInfos(AccessibilityNodeInfo other) {
@@ -3955,6 +4021,9 @@
         mCollectionItemInfo = (cii == null)  ? null
                 : new CollectionItemInfo(cii.mRowIndex, cii.mRowSpan, cii.mColumnIndex,
                                          cii.mColumnSpan, cii.mHeading, cii.mSelected);
+        ExtraRenderingInfo ti = other.mExtraRenderingInfo;
+        mExtraRenderingInfo = (ti == null) ? null
+                : new ExtraRenderingInfo(ti);
     }
 
     /**
@@ -4083,6 +4152,14 @@
         }
 
         if (isBitSet(nonDefaultFields, fieldIndex++)) {
+            if (mExtraRenderingInfo != null) mExtraRenderingInfo.recycle();
+            mExtraRenderingInfo = ExtraRenderingInfo.obtain();
+            mExtraRenderingInfo.mLayoutParams = (Size) parcel.readValue(null);
+            mExtraRenderingInfo.mTextSizeInPx = parcel.readFloat();
+            mExtraRenderingInfo.mTextSizeUnit = parcel.readInt();
+        }
+
+        if (isBitSet(nonDefaultFields, fieldIndex++)) {
             mLeashedChild = parcel.readStrongBinder();
         }
         if (isBitSet(nonDefaultFields, fieldIndex++)) {
@@ -4854,8 +4931,11 @@
                 new AccessibilityAction(R.id.accessibilityActionPressAndHold);
 
         /**
-         * Action to send ime action. A node should expose this action only for views that are
-         * currently with input focus and editable.
+         * Action to send an ime action which is from
+         * {@link android.view.inputmethod.EditorInfo#actionId}. This action would be
+         * {@link android.view.inputmethod.EditorInfo#IME_ACTION_UNSPECIFIED} if no specific
+         * actionId defined. A node should expose this action only for views that are currently
+         * with input focus and editable.
          */
         @NonNull public static final AccessibilityAction ACTION_IME_ENTER =
                 new AccessibilityAction(R.id.accessibilityActionImeEnter);
@@ -5676,6 +5756,134 @@
     }
 
     /**
+     * Class with information of a view useful to evaluate accessibility needs. Developers can
+     * refresh the node with the key {@link #EXTRA_DATA_RENDERING_INFO_KEY} to fetch the text size
+     * and unit if it is {@link TextView} and the height and the width of layout params from
+     * {@link ViewGroup} or {@link TextView}.
+     *
+     * @see #EXTRA_DATA_RENDERING_INFO_KEY
+     * @see #refreshWithExtraData(String, Bundle)
+     */
+    public static final class ExtraRenderingInfo {
+        private static final int UNDEFINED_VALUE = -1;
+        private static final int MAX_POOL_SIZE = 20;
+        private static final SynchronizedPool<ExtraRenderingInfo> sPool =
+                new SynchronizedPool<>(MAX_POOL_SIZE);
+
+        private Size mLayoutParams;
+        private float mTextSizeInPx = UNDEFINED_VALUE;
+        private int mTextSizeUnit = UNDEFINED_VALUE;
+
+        /**
+         * Obtains a pooled instance.
+         * @hide
+         */
+        @NonNull
+        public static ExtraRenderingInfo obtain() {
+            final ExtraRenderingInfo info = sPool.acquire();
+            if (info == null) {
+                return new ExtraRenderingInfo(null);
+            }
+            return info;
+        }
+
+        /** Obtains a pooled instance that is a clone of another one. */
+        private static ExtraRenderingInfo obtain(ExtraRenderingInfo other) {
+            ExtraRenderingInfo extraRenderingInfo = ExtraRenderingInfo.obtain();
+            extraRenderingInfo.mLayoutParams = other.mLayoutParams;
+            extraRenderingInfo.mTextSizeInPx = other.mTextSizeInPx;
+            extraRenderingInfo.mTextSizeUnit = other.mTextSizeUnit;
+            return extraRenderingInfo;
+        }
+
+        /**
+         * Creates a new conformance info of a view, and this new instance is initialized from
+         * the given <code>other</code>.
+         *
+         * @param other The instance to clone.
+         */
+        private ExtraRenderingInfo(@Nullable ExtraRenderingInfo other) {
+            if (other != null) {
+                mLayoutParams = other.mLayoutParams;
+                mTextSizeInPx = other.mTextSizeInPx;
+                mTextSizeUnit = other.mTextSizeUnit;
+            }
+        }
+
+        /**
+         * @return a {@link Size} stores layout height and layout width of the view,
+         *         or null otherwise.
+         */
+        public @Nullable Size getLayoutParams() {
+            return mLayoutParams;
+        }
+
+        /**
+         * Sets layout width and layout height of the view.
+         *
+         * @param width The layout width.
+         * @param height The layout height.
+         * @hide
+         */
+        public void setLayoutParams(int width, int height) {
+            mLayoutParams = new Size(width, height);
+        }
+
+        /**
+         * @return the text size of a {@code TextView}, or -1 otherwise.
+         */
+        public float getTextSizeInPx() {
+            return mTextSizeInPx;
+        }
+
+        /**
+         * Sets text size of the view.
+         *
+         * @param textSizeInPx The text size in pixels.
+         * @hide
+         */
+        public void setTextSizeInPx(float textSizeInPx) {
+            mTextSizeInPx = textSizeInPx;
+        }
+
+        /**
+         * @return the text size unit which type is {@link TypedValue#TYPE_DIMENSION} of a
+         *         {@code TextView}, or -1 otherwise.
+         *
+         * @see TypedValue#TYPE_DIMENSION
+         */
+        public int getTextSizeUnit() {
+            return mTextSizeUnit;
+        }
+
+        /**
+         * Sets text size unit of the view.
+         *
+         * @param textSizeUnit The text size unit.
+         * @hide
+         */
+        public void setTextSizeUnit(int textSizeUnit) {
+            mTextSizeUnit = textSizeUnit;
+        }
+
+        /**
+         * Recycles this instance.
+         *
+         * <p>In most situations object pooling is not beneficial, and recycling is not necessary.
+         */
+        void recycle() {
+            clear();
+            sPool.release(this);
+        }
+
+        private void clear() {
+            mLayoutParams = null;
+            mTextSizeInPx = UNDEFINED_VALUE;
+            mTextSizeUnit = UNDEFINED_VALUE;
+        }
+    }
+
+    /**
      * @see android.os.Parcelable.Creator
      */
     public static final @android.annotation.NonNull Parcelable.Creator<AccessibilityNodeInfo> CREATOR =
diff --git a/core/java/android/view/accessibility/IAccessibilityEmbeddedConnection.aidl b/core/java/android/view/accessibility/IAccessibilityEmbeddedConnection.aidl
new file mode 100644
index 0000000..707099e
--- /dev/null
+++ b/core/java/android/view/accessibility/IAccessibilityEmbeddedConnection.aidl
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view.accessibility;
+
+/**
+ * Interface used by host View to talk to the view root of the embedded SurfaceControlViewHost
+ * that actually implements the functionality.
+ *
+ * @hide
+ */
+interface IAccessibilityEmbeddedConnection {
+
+    IBinder associateEmbeddedHierarchy(IBinder hostToken, int sourceId);
+
+    void disassociateEmbeddedHierarchy();
+
+    oneway void setScreenMatrix(in float[] matrixValues);
+}
diff --git a/core/java/android/view/accessibility/IAccessibilityManager.aidl b/core/java/android/view/accessibility/IAccessibilityManager.aidl
index 7f8fdf8..97036f3 100644
--- a/core/java/android/view/accessibility/IAccessibilityManager.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityManager.aidl
@@ -47,7 +47,7 @@
     @UnsupportedAppUsage
     List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int feedbackType, int userId);
 
-    int addAccessibilityInteractionConnection(IWindow windowToken,
+    int addAccessibilityInteractionConnection(IWindow windowToken, IBinder leashToken,
             in IAccessibilityInteractionConnection connection,
             String packageName, int userId);
 
@@ -88,4 +88,8 @@
     oneway void registerSystemAction(in RemoteAction action, int actionId);
     oneway void unregisterSystemAction(int actionId);
     oneway void setWindowMagnificationConnection(in IWindowMagnificationConnection connection);
+
+    void associateEmbeddedHierarchy(IBinder host, IBinder embedded);
+
+    void disassociateEmbeddedHierarchy(IBinder token);
 }
diff --git a/core/java/android/view/animation/AccelerateDecelerateInterpolator.java b/core/java/android/view/animation/AccelerateDecelerateInterpolator.java
index 21d5a5b..a2bbc5c 100644
--- a/core/java/android/view/animation/AccelerateDecelerateInterpolator.java
+++ b/core/java/android/view/animation/AccelerateDecelerateInterpolator.java
@@ -17,19 +17,18 @@
 package android.view.animation;
 
 import android.content.Context;
+import android.graphics.animation.HasNativeInterpolator;
+import android.graphics.animation.NativeInterpolator;
+import android.graphics.animation.NativeInterpolatorFactory;
 import android.util.AttributeSet;
 
-import com.android.internal.view.animation.HasNativeInterpolator;
-import com.android.internal.view.animation.NativeInterpolatorFactory;
-import com.android.internal.view.animation.NativeInterpolatorFactoryHelper;
-
 /**
  * An interpolator where the rate of change starts and ends slowly but
  * accelerates through the middle.
  */
 @HasNativeInterpolator
 public class AccelerateDecelerateInterpolator extends BaseInterpolator
-        implements NativeInterpolatorFactory {
+        implements NativeInterpolator {
     public AccelerateDecelerateInterpolator() {
     }
 
@@ -44,6 +43,6 @@
     /** @hide */
     @Override
     public long createNativeInterpolator() {
-        return NativeInterpolatorFactoryHelper.createAccelerateDecelerateInterpolator();
+        return NativeInterpolatorFactory.createAccelerateDecelerateInterpolator();
     }
 }
diff --git a/core/java/android/view/animation/AccelerateInterpolator.java b/core/java/android/view/animation/AccelerateInterpolator.java
index 6c8d7b1..9d4cd32 100644
--- a/core/java/android/view/animation/AccelerateInterpolator.java
+++ b/core/java/android/view/animation/AccelerateInterpolator.java
@@ -20,12 +20,12 @@
 import android.content.res.Resources;
 import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
+import android.graphics.animation.HasNativeInterpolator;
+import android.graphics.animation.NativeInterpolator;
+import android.graphics.animation.NativeInterpolatorFactory;
 import android.util.AttributeSet;
 
 import com.android.internal.R;
-import com.android.internal.view.animation.HasNativeInterpolator;
-import com.android.internal.view.animation.NativeInterpolatorFactory;
-import com.android.internal.view.animation.NativeInterpolatorFactoryHelper;
 
 /**
  * An interpolator where the rate of change starts out slowly and
@@ -33,7 +33,7 @@
  *
  */
 @HasNativeInterpolator
-public class AccelerateInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {
+public class AccelerateInterpolator extends BaseInterpolator implements NativeInterpolator {
     private final float mFactor;
     private final double mDoubleFactor;
 
@@ -85,6 +85,6 @@
     /** @hide */
     @Override
     public long createNativeInterpolator() {
-        return NativeInterpolatorFactoryHelper.createAccelerateInterpolator(mFactor);
+        return NativeInterpolatorFactory.createAccelerateInterpolator(mFactor);
     }
 }
diff --git a/core/java/android/view/animation/AnticipateInterpolator.java b/core/java/android/view/animation/AnticipateInterpolator.java
index 7a837c3..d146394 100644
--- a/core/java/android/view/animation/AnticipateInterpolator.java
+++ b/core/java/android/view/animation/AnticipateInterpolator.java
@@ -20,18 +20,18 @@
 import android.content.res.Resources;
 import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
+import android.graphics.animation.HasNativeInterpolator;
+import android.graphics.animation.NativeInterpolator;
+import android.graphics.animation.NativeInterpolatorFactory;
 import android.util.AttributeSet;
 
 import com.android.internal.R;
-import com.android.internal.view.animation.HasNativeInterpolator;
-import com.android.internal.view.animation.NativeInterpolatorFactory;
-import com.android.internal.view.animation.NativeInterpolatorFactoryHelper;
 
 /**
  * An interpolator where the change starts backward then flings forward.
  */
 @HasNativeInterpolator
-public class AnticipateInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {
+public class AnticipateInterpolator extends BaseInterpolator implements NativeInterpolator {
     private final float mTension;
 
     public AnticipateInterpolator() {
@@ -73,6 +73,6 @@
     /** @hide */
     @Override
     public long createNativeInterpolator() {
-        return NativeInterpolatorFactoryHelper.createAnticipateInterpolator(mTension);
+        return NativeInterpolatorFactory.createAnticipateInterpolator(mTension);
     }
 }
diff --git a/core/java/android/view/animation/AnticipateOvershootInterpolator.java b/core/java/android/view/animation/AnticipateOvershootInterpolator.java
index 9a75134..4d6a390 100644
--- a/core/java/android/view/animation/AnticipateOvershootInterpolator.java
+++ b/core/java/android/view/animation/AnticipateOvershootInterpolator.java
@@ -24,11 +24,11 @@
 import android.content.res.Resources;
 import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
+import android.graphics.animation.HasNativeInterpolator;
+import android.graphics.animation.NativeInterpolator;
+import android.graphics.animation.NativeInterpolatorFactory;
 import android.util.AttributeSet;
 
-import com.android.internal.view.animation.HasNativeInterpolator;
-import com.android.internal.view.animation.NativeInterpolatorFactory;
-import com.android.internal.view.animation.NativeInterpolatorFactoryHelper;
 
 /**
  * An interpolator where the change starts backward then flings forward and overshoots
@@ -36,7 +36,7 @@
  */
 @HasNativeInterpolator
 public class AnticipateOvershootInterpolator extends BaseInterpolator
-        implements NativeInterpolatorFactory {
+        implements NativeInterpolator {
     private final float mTension;
 
     public AnticipateOvershootInterpolator() {
@@ -103,6 +103,6 @@
     /** @hide */
     @Override
     public long createNativeInterpolator() {
-        return NativeInterpolatorFactoryHelper.createAnticipateOvershootInterpolator(mTension);
+        return NativeInterpolatorFactory.createAnticipateOvershootInterpolator(mTension);
     }
 }
diff --git a/core/java/android/view/animation/BounceInterpolator.java b/core/java/android/view/animation/BounceInterpolator.java
index 909eaa4..d3f6a3f 100644
--- a/core/java/android/view/animation/BounceInterpolator.java
+++ b/core/java/android/view/animation/BounceInterpolator.java
@@ -17,17 +17,16 @@
 package android.view.animation;
 
 import android.content.Context;
+import android.graphics.animation.HasNativeInterpolator;
+import android.graphics.animation.NativeInterpolator;
+import android.graphics.animation.NativeInterpolatorFactory;
 import android.util.AttributeSet;
 
-import com.android.internal.view.animation.HasNativeInterpolator;
-import com.android.internal.view.animation.NativeInterpolatorFactory;
-import com.android.internal.view.animation.NativeInterpolatorFactoryHelper;
-
 /**
  * An interpolator where the change bounces at the end.
  */
 @HasNativeInterpolator
-public class BounceInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {
+public class BounceInterpolator extends BaseInterpolator implements NativeInterpolator {
     public BounceInterpolator() {
     }
 
@@ -56,6 +55,6 @@
     /** @hide */
     @Override
     public long createNativeInterpolator() {
-        return NativeInterpolatorFactoryHelper.createBounceInterpolator();
+        return NativeInterpolatorFactory.createBounceInterpolator();
     }
 }
\ No newline at end of file
diff --git a/core/java/android/view/animation/CycleInterpolator.java b/core/java/android/view/animation/CycleInterpolator.java
index 72d64a1..6b1a80a 100644
--- a/core/java/android/view/animation/CycleInterpolator.java
+++ b/core/java/android/view/animation/CycleInterpolator.java
@@ -20,12 +20,12 @@
 import android.content.res.Resources;
 import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
+import android.graphics.animation.HasNativeInterpolator;
+import android.graphics.animation.NativeInterpolator;
+import android.graphics.animation.NativeInterpolatorFactory;
 import android.util.AttributeSet;
 
 import com.android.internal.R;
-import com.android.internal.view.animation.HasNativeInterpolator;
-import com.android.internal.view.animation.NativeInterpolatorFactory;
-import com.android.internal.view.animation.NativeInterpolatorFactoryHelper;
 
 /**
  * Repeats the animation for a specified number of cycles. The
@@ -33,7 +33,7 @@
  *
  */
 @HasNativeInterpolator
-public class CycleInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {
+public class CycleInterpolator extends BaseInterpolator implements NativeInterpolator {
     public CycleInterpolator(float cycles) {
         mCycles = cycles;
     }
@@ -65,6 +65,6 @@
     /** @hide */
     @Override
     public long createNativeInterpolator() {
-        return NativeInterpolatorFactoryHelper.createCycleInterpolator(mCycles);
+        return NativeInterpolatorFactory.createCycleInterpolator(mCycles);
     }
 }
diff --git a/core/java/android/view/animation/DecelerateInterpolator.java b/core/java/android/view/animation/DecelerateInterpolator.java
index 2d1249d..2d2f770 100644
--- a/core/java/android/view/animation/DecelerateInterpolator.java
+++ b/core/java/android/view/animation/DecelerateInterpolator.java
@@ -20,12 +20,12 @@
 import android.content.res.Resources;
 import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
+import android.graphics.animation.HasNativeInterpolator;
+import android.graphics.animation.NativeInterpolator;
+import android.graphics.animation.NativeInterpolatorFactory;
 import android.util.AttributeSet;
 
 import com.android.internal.R;
-import com.android.internal.view.animation.HasNativeInterpolator;
-import com.android.internal.view.animation.NativeInterpolatorFactory;
-import com.android.internal.view.animation.NativeInterpolatorFactoryHelper;
 
 /**
  * An interpolator where the rate of change starts out quickly and
@@ -33,7 +33,7 @@
  *
  */
 @HasNativeInterpolator
-public class DecelerateInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {
+public class DecelerateInterpolator extends BaseInterpolator implements NativeInterpolator {
     public DecelerateInterpolator() {
     }
 
@@ -81,6 +81,6 @@
     /** @hide */
     @Override
     public long createNativeInterpolator() {
-        return NativeInterpolatorFactoryHelper.createDecelerateInterpolator(mFactor);
+        return NativeInterpolatorFactory.createDecelerateInterpolator(mFactor);
     }
 }
diff --git a/core/java/android/view/animation/LinearInterpolator.java b/core/java/android/view/animation/LinearInterpolator.java
index 2a047b4..f6a820c 100644
--- a/core/java/android/view/animation/LinearInterpolator.java
+++ b/core/java/android/view/animation/LinearInterpolator.java
@@ -17,17 +17,16 @@
 package android.view.animation;
 
 import android.content.Context;
+import android.graphics.animation.HasNativeInterpolator;
+import android.graphics.animation.NativeInterpolator;
+import android.graphics.animation.NativeInterpolatorFactory;
 import android.util.AttributeSet;
 
-import com.android.internal.view.animation.HasNativeInterpolator;
-import com.android.internal.view.animation.NativeInterpolatorFactory;
-import com.android.internal.view.animation.NativeInterpolatorFactoryHelper;
-
 /**
  * An interpolator where the rate of change is constant
  */
 @HasNativeInterpolator
-public class LinearInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {
+public class LinearInterpolator extends BaseInterpolator implements NativeInterpolator {
 
     public LinearInterpolator() {
     }
@@ -42,6 +41,6 @@
     /** @hide */
     @Override
     public long createNativeInterpolator() {
-        return NativeInterpolatorFactoryHelper.createLinearInterpolator();
+        return NativeInterpolatorFactory.createLinearInterpolator();
     }
 }
diff --git a/core/java/android/view/animation/OvershootInterpolator.java b/core/java/android/view/animation/OvershootInterpolator.java
index 306688a..e6445d7 100644
--- a/core/java/android/view/animation/OvershootInterpolator.java
+++ b/core/java/android/view/animation/OvershootInterpolator.java
@@ -20,19 +20,19 @@
 import android.content.res.Resources;
 import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
+import android.graphics.animation.HasNativeInterpolator;
+import android.graphics.animation.NativeInterpolator;
+import android.graphics.animation.NativeInterpolatorFactory;
 import android.util.AttributeSet;
 
 import com.android.internal.R;
-import com.android.internal.view.animation.HasNativeInterpolator;
-import com.android.internal.view.animation.NativeInterpolatorFactory;
-import com.android.internal.view.animation.NativeInterpolatorFactoryHelper;
 
 /**
  * An interpolator where the change flings forward and overshoots the last value
  * then comes back.
  */
 @HasNativeInterpolator
-public class OvershootInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {
+public class OvershootInterpolator extends BaseInterpolator implements NativeInterpolator {
     private final float mTension;
 
     public OvershootInterpolator() {
@@ -76,6 +76,6 @@
     /** @hide */
     @Override
     public long createNativeInterpolator() {
-        return NativeInterpolatorFactoryHelper.createOvershootInterpolator(mTension);
+        return NativeInterpolatorFactory.createOvershootInterpolator(mTension);
     }
 }
diff --git a/core/java/android/view/animation/PathInterpolator.java b/core/java/android/view/animation/PathInterpolator.java
index 924437a..99d6b9c 100644
--- a/core/java/android/view/animation/PathInterpolator.java
+++ b/core/java/android/view/animation/PathInterpolator.java
@@ -20,14 +20,14 @@
 import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
 import android.graphics.Path;
+import android.graphics.animation.HasNativeInterpolator;
+import android.graphics.animation.NativeInterpolator;
+import android.graphics.animation.NativeInterpolatorFactory;
 import android.util.AttributeSet;
 import android.util.PathParser;
 import android.view.InflateException;
 
 import com.android.internal.R;
-import com.android.internal.view.animation.HasNativeInterpolator;
-import com.android.internal.view.animation.NativeInterpolatorFactory;
-import com.android.internal.view.animation.NativeInterpolatorFactoryHelper;
 
 /**
  * An interpolator that can traverse a Path that extends from <code>Point</code>
@@ -46,7 +46,7 @@
  * </pre></blockquote></p>
  */
 @HasNativeInterpolator
-public class PathInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {
+public class PathInterpolator extends BaseInterpolator implements NativeInterpolator {
 
     // This governs how accurate the approximation of the Path is.
     private static final float PRECISION = 0.002f;
@@ -237,7 +237,7 @@
     /** @hide **/
     @Override
     public long createNativeInterpolator() {
-        return NativeInterpolatorFactoryHelper.createPathInterpolator(mX, mY);
+        return NativeInterpolatorFactory.createPathInterpolator(mX, mY);
     }
 
 }
diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java
index c159f89..ce7cfa7 100644
--- a/core/java/android/view/autofill/AutofillManager.java
+++ b/core/java/android/view/autofill/AutofillManager.java
@@ -86,9 +86,10 @@
 import java.util.Objects;
 import java.util.Set;
 
-//TODO: use java.lang.ref.Cleaner once Android supports Java 9
 import sun.misc.Cleaner;
 
+//TODO: use java.lang.ref.Cleaner once Android supports Java 9
+
 /**
  * <p>The {@link AutofillManager} class provides ways for apps and custom views to
  * integrate with the Autofill Framework lifecycle.
@@ -547,7 +548,7 @@
          * @param fillInIntent The authentication fill-in intent.
          */
         void autofillClientAuthenticate(int authenticationId, IntentSender intent,
-                Intent fillInIntent);
+                Intent fillInIntent, boolean authenticateInline);
 
         /**
          * Tells the client this manager has state to be reset.
@@ -1793,6 +1794,9 @@
             client.autofillClientResetableStateAvailable();
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
+        } catch (SyncResultReceiver.TimeoutException e) {
+            // no-op, just log the error message.
+            Log.w(TAG, "Exception getting result from SyncResultReceiver: " + e);
         }
     }
 
@@ -2070,7 +2074,7 @@
     }
 
     private void authenticate(int sessionId, int authenticationId, IntentSender intent,
-            Intent fillInIntent) {
+            Intent fillInIntent, boolean authenticateInline) {
         synchronized (mLock) {
             if (sessionId == mSessionId) {
                 final AutofillClient client = getClient();
@@ -2078,7 +2082,8 @@
                     // clear mOnInvisibleCalled and we will see if receive onInvisibleForAutofill()
                     // before onAuthenticationResult()
                     mOnInvisibleCalled = false;
-                    client.autofillClientAuthenticate(authenticationId, intent, fillInIntent);
+                    client.autofillClientAuthenticate(authenticationId, intent, fillInIntent,
+                            authenticateInline);
                 }
             }
         }
@@ -3250,10 +3255,11 @@
 
         @Override
         public void authenticate(int sessionId, int authenticationId, IntentSender intent,
-                Intent fillInIntent) {
+                Intent fillInIntent, boolean authenticateInline) {
             final AutofillManager afm = mAfm.get();
             if (afm != null) {
-                afm.post(() -> afm.authenticate(sessionId, authenticationId, intent, fillInIntent));
+                afm.post(() -> afm.authenticate(sessionId, authenticationId, intent, fillInIntent,
+                        authenticateInline));
             }
         }
 
@@ -3363,14 +3369,8 @@
             final AutofillManager afm = mAfm.get();
             if (afm == null) return null;
 
-            final AutofillClient client = afm.getClient();
-            if (client == null) {
-                Log.w(TAG, "getViewCoordinates(" + id + "): no autofill client");
-                return null;
-            }
-            final View view = client.autofillClientFindViewByAutofillIdTraversal(id);
+            final View view = getView(afm, id);
             if (view == null) {
-                Log.w(TAG, "getViewCoordinates(" + id + "): could not find view");
                 return null;
             }
             final Rect windowVisibleDisplayFrame = new Rect();
@@ -3411,5 +3411,42 @@
                 afm.post(() -> afm.requestHideFillUi(id, false));
             }
         }
+
+        @Override
+        public boolean requestAutofill(int sessionId, AutofillId id) {
+            final AutofillManager afm = mAfm.get();
+            if (afm == null || afm.mSessionId != sessionId) {
+                if (sDebug) {
+                    Slog.d(TAG, "Autofill not available or sessionId doesn't match");
+                }
+                return false;
+            }
+            final View view = getView(afm, id);
+            if (view == null || !view.isFocused()) {
+                if (sDebug) {
+                    Slog.d(TAG, "View not available or is not on focus");
+                }
+                return false;
+            }
+            if (sVerbose) {
+                Log.v(TAG, "requestAutofill() by AugmentedAutofillService.");
+            }
+            afm.post(() -> afm.requestAutofill(view));
+            return true;
+        }
+
+        @Nullable
+        private View getView(@NonNull AutofillManager afm, @NonNull AutofillId id) {
+            final AutofillClient client = afm.getClient();
+            if (client == null) {
+                Log.w(TAG, "getView(" + id + "): no autofill client");
+                return null;
+            }
+            View view = client.autofillClientFindViewByAutofillIdTraversal(id);
+            if (view == null) {
+                Log.w(TAG, "getView(" + id + "): could not find view");
+            }
+            return view;
+        }
     }
 }
diff --git a/core/java/android/view/autofill/IAugmentedAutofillManagerClient.aidl b/core/java/android/view/autofill/IAugmentedAutofillManagerClient.aidl
index 140507c..03054df 100644
--- a/core/java/android/view/autofill/IAugmentedAutofillManagerClient.aidl
+++ b/core/java/android/view/autofill/IAugmentedAutofillManagerClient.aidl
@@ -50,4 +50,10 @@
       * Requests hiding the fill UI.
       */
     void requestHideFillUi(int sessionId, in AutofillId id);
+
+    /**
+      * Requests to start a new autofill flow. Returns true if the autofill request is made to
+      * {@link AutofillManager#requestAutofill(View)}.
+      */
+    boolean requestAutofill(int sessionId, in AutofillId id);
 }
diff --git a/core/java/android/view/autofill/IAutoFillManagerClient.aidl b/core/java/android/view/autofill/IAutoFillManagerClient.aidl
index 84949c8..3903665 100644
--- a/core/java/android/view/autofill/IAutoFillManagerClient.aidl
+++ b/core/java/android/view/autofill/IAutoFillManagerClient.aidl
@@ -50,7 +50,7 @@
       * Authenticates a fill response or a data set.
       */
     void authenticate(int sessionId, int authenticationId, in IntentSender intent,
-            in Intent fillInIntent);
+            in Intent fillInIntent, boolean authenticateInline);
 
     /**
       * Sets the views to track. If saveOnAllViewsInvisible is set and all these view are invisible
diff --git a/core/java/android/view/contentcapture/ContentCaptureSession.java b/core/java/android/view/contentcapture/ContentCaptureSession.java
index 232d96b..2134dab 100644
--- a/core/java/android/view/contentcapture/ContentCaptureSession.java
+++ b/core/java/android/view/contentcapture/ContentCaptureSession.java
@@ -22,6 +22,7 @@
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.SystemApi;
 import android.util.DebugUtils;
 import android.util.Log;
 import android.view.View;
@@ -50,7 +51,11 @@
 
     private static final Random sIdGenerator = new Random();
 
-    /** @hide */
+    /**
+    *  ID used to indicate that a session does not exist
+    *  @hide
+    */
+    @SystemApi
     public static final int NO_SESSION_ID = 0;
 
     /**
diff --git a/core/java/android/view/inline/InlinePresentationSpec.java b/core/java/android/view/inline/InlinePresentationSpec.java
index a85b5f1..3cc04b8 100644
--- a/core/java/android/view/inline/InlinePresentationSpec.java
+++ b/core/java/android/view/inline/InlinePresentationSpec.java
@@ -18,6 +18,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.os.Bundle;
 import android.os.Parcelable;
 import android.util.Size;
 
@@ -40,26 +41,16 @@
     private final Size mMaxSize;
 
     /**
-     * The fully qualified resource name of the UI style resource identifier, defaults to {@code
-     * null}.
-     *
-     * <p> The value can be obtained by calling {@code Resources#getResourceName(int)}.
+     * The extras encoding the UI style information. Defaults to {@code null} in which case the
+     * default system UI style will be used.
      */
     @Nullable
-    private final String mStyle;
+    private final Bundle mStyle;
 
-    private static String defaultStyle() {
+    private static Bundle defaultStyle() {
         return null;
     }
 
-    /**
-     * @hide
-     */
-    public @Nullable String getStyle() {
-        return mStyle;
-    }
-
-
     /** @hide */
     @DataClass.Suppress({"setMaxSize", "setMinSize"})
     abstract static class BaseBuilder {
@@ -84,7 +75,7 @@
     /* package-private */ InlinePresentationSpec(
             @NonNull Size minSize,
             @NonNull Size maxSize,
-            @Nullable String style) {
+            @Nullable Bundle style) {
         this.mMinSize = minSize;
         com.android.internal.util.AnnotationValidations.validate(
                 NonNull.class, null, mMinSize);
@@ -112,6 +103,15 @@
         return mMaxSize;
     }
 
+    /**
+     * The extras encoding the UI style information. Defaults to null in which case the default
+     * system UI style will be used.
+     */
+    @DataClass.Generated.Member
+    public @Nullable Bundle getStyle() {
+        return mStyle;
+    }
+
     @Override
     @DataClass.Generated.Member
     public String toString() {
@@ -167,7 +167,7 @@
         dest.writeByte(flg);
         dest.writeSize(mMinSize);
         dest.writeSize(mMaxSize);
-        if (mStyle != null) dest.writeString(mStyle);
+        if (mStyle != null) dest.writeBundle(mStyle);
     }
 
     @Override
@@ -184,7 +184,7 @@
         byte flg = in.readByte();
         Size minSize = (Size) in.readSize();
         Size maxSize = (Size) in.readSize();
-        String style = (flg & 0x4) == 0 ? null : in.readString();
+        Bundle style = (flg & 0x4) == 0 ? null : in.readBundle();
 
         this.mMinSize = minSize;
         com.android.internal.util.AnnotationValidations.validate(
@@ -220,7 +220,7 @@
 
         private @NonNull Size mMinSize;
         private @NonNull Size mMaxSize;
-        private @Nullable String mStyle;
+        private @Nullable Bundle mStyle;
 
         private long mBuilderFieldsSet = 0L;
 
@@ -244,13 +244,11 @@
         }
 
         /**
-         * The fully qualified resource name of the UI style resource identifier, defaults to {@code
-         * null}.
-         *
-         * <p> The value can be obtained by calling {@code Resources#getResourceName(int)}.
+         * The extras encoding the UI style information. Defaults to null in which case the default
+         * system UI style will be used.
          */
         @DataClass.Generated.Member
-        public @NonNull Builder setStyle(@Nullable String value) {
+        public @NonNull Builder setStyle(@Nullable Bundle value) {
             checkNotUsed();
             mBuilderFieldsSet |= 0x4;
             mStyle = value;
@@ -281,10 +279,10 @@
     }
 
     @DataClass.Generated(
-            time = 1577145109444L,
+            time = 1582078731418L,
             codegenVersion = "1.0.14",
             sourceFile = "frameworks/base/core/java/android/view/inline/InlinePresentationSpec.java",
-            inputSignatures = "private final @android.annotation.NonNull android.util.Size mMinSize\nprivate final @android.annotation.NonNull android.util.Size mMaxSize\nprivate final @android.annotation.Nullable java.lang.String mStyle\nprivate static  java.lang.String defaultStyle()\npublic @android.annotation.Nullable java.lang.String getStyle()\nclass InlinePresentationSpec extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nclass BaseBuilder extends java.lang.Object implements []")
+            inputSignatures = "private final @android.annotation.NonNull android.util.Size mMinSize\nprivate final @android.annotation.NonNull android.util.Size mMaxSize\nprivate final @android.annotation.Nullable android.os.Bundle mStyle\nprivate static  android.os.Bundle defaultStyle()\nclass InlinePresentationSpec extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nclass BaseBuilder extends java.lang.Object implements []")
     @Deprecated
     private void __metadata() {}
 
diff --git a/core/java/android/view/inputmethod/EditorInfo.java b/core/java/android/view/inputmethod/EditorInfo.java
index c80a1ae..7f90d57 100644
--- a/core/java/android/view/inputmethod/EditorInfo.java
+++ b/core/java/android/view/inputmethod/EditorInfo.java
@@ -33,11 +33,11 @@
 import android.view.View;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.Preconditions;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.Arrays;
+import java.util.Objects;
 
 /**
  * An EditorInfo describes several attributes of a text editing object
@@ -558,7 +558,7 @@
      *                      editor wants to trim out the first 10 chars, subTextStart should be 10.
      */
     public void setInitialSurroundingSubText(@NonNull CharSequence subText, int subTextStart) {
-        Preconditions.checkNotNull(subText);
+        Objects.requireNonNull(subText);
 
         // Swap selection start and end if necessary.
         final int subTextSelStart = initialSelStart > initialSelEnd
@@ -585,25 +585,35 @@
             return;
         }
 
-        // The input text is too long. Let's try to trim it reasonably. Fundamental rules are:
-        // 1. Text before the cursor is the most important information to IMEs.
-        // 2. Text after the cursor is the second important information to IMEs.
-        // 3. Selected text is the least important information but it shall NEVER be truncated.
-        //    When it is too long, just drop it.
-        //
-        // Source: <TextBeforeCursor><Selection><TextAfterCursor>
-        // Possible results:
-        // 1. <(maybeTrimmedAtHead)TextBeforeCursor><Selection><TextAfterCursor(maybeTrimmedAtTail)>
-        // 2. <(maybeTrimmedAtHead)TextBeforeCursor><TextAfterCursor(maybeTrimmedAtTail)>
-        //
-        final int sourceSelLength = subTextSelEnd - subTextSelStart;
+        trimLongSurroundingText(subText, subTextSelStart, subTextSelEnd);
+    }
+
+    /**
+     * Trims the initial surrounding text when it is over sized. Fundamental trimming rules are:
+     * - The text before the cursor is the most important information to IMEs.
+     * - The text after the cursor is the second important information to IMEs.
+     * - The selected text is the least important information but it shall NEVER be truncated. When
+     *    it is too long, just drop it.
+     *<p><pre>
+     * For example, the subText can be viewed as
+     *     TextBeforeCursor + Selection + TextAfterCursor
+     * The result could be
+     *     1. (maybeTrimmedAtHead)TextBeforeCursor + Selection + TextAfterCursor(maybeTrimmedAtTail)
+     *     2. (maybeTrimmedAtHead)TextBeforeCursor + TextAfterCursor(maybeTrimmedAtTail)</pre>
+     *
+     * @param subText The long text that needs to be trimmed.
+     * @param selStart The text offset of the start of the selection.
+     * @param selEnd The text offset of the end of the selection
+     */
+    private void trimLongSurroundingText(CharSequence subText, int selStart, int selEnd) {
+        final int sourceSelLength = selEnd - selStart;
         // When the selected text is too long, drop it.
         final int newSelLength = (sourceSelLength > MAX_INITIAL_SELECTION_LENGTH)
                 ? 0 : sourceSelLength;
 
         // Distribute rest of length quota to TextBeforeCursor and TextAfterCursor in 4:1 ratio.
-        final int subTextBeforeCursorLength = subTextSelStart;
-        final int subTextAfterCursorLength = subTextLength - subTextSelEnd;
+        final int subTextBeforeCursorLength = selStart;
+        final int subTextAfterCursorLength = subText.length() - selEnd;
         final int maxLengthMinusSelection = MEMORY_EFFICIENT_TEXT_LENGTH - newSelLength;
         final int possibleMaxBeforeCursorLength =
                 Math.min(subTextBeforeCursorLength, (int) (0.8 * maxLengthMinusSelection));
@@ -617,24 +627,23 @@
 
         // We don't want to cut surrogate pairs in the middle. Exam that at the new head and tail.
         if (isCutOnSurrogate(subText,
-                subTextSelStart - newBeforeCursorLength, TrimPolicy.HEAD)) {
+                selStart - newBeforeCursorLength, TrimPolicy.HEAD)) {
             newBeforeCursorHead = newBeforeCursorHead + 1;
             newBeforeCursorLength = newBeforeCursorLength - 1;
         }
         if (isCutOnSurrogate(subText,
-                subTextSelEnd + newAfterCursorLength - 1, TrimPolicy.TAIL)) {
+                selEnd + newAfterCursorLength - 1, TrimPolicy.TAIL)) {
             newAfterCursorLength = newAfterCursorLength - 1;
         }
 
         // Now we know where to trim, compose the initialSurroundingText.
         final int newTextLength = newBeforeCursorLength + newSelLength + newAfterCursorLength;
-        CharSequence newInitialSurroundingText;
+        final CharSequence newInitialSurroundingText;
         if (newSelLength != sourceSelLength) {
             final CharSequence beforeCursor = subText.subSequence(newBeforeCursorHead,
                     newBeforeCursorHead + newBeforeCursorLength);
-
-            final CharSequence afterCursor = subText.subSequence(subTextSelEnd,
-                    subTextSelEnd + newAfterCursorLength);
+            final CharSequence afterCursor = subText.subSequence(selEnd,
+                    selEnd + newAfterCursorLength);
 
             newInitialSurroundingText = TextUtils.concat(beforeCursor, afterCursor);
         } else {
@@ -651,15 +660,16 @@
     }
 
     /**
-     * Get <var>n</var> characters of text before the current cursor position. May be {@code null}
-     * when the protocol is not supported.
+     * Get <var>length</var> characters of text before the current cursor position. May be
+     * {@code null} when the protocol is not supported.
      *
      * @param length The expected length of the text.
      * @param flags Supplies additional options controlling how the text is returned. May be
      * either 0 or {@link InputConnection#GET_TEXT_WITH_STYLES}.
      * @return the text before the cursor position; the length of the returned text might be less
-     * than <var>n</var>. When there is no text before the cursor, an empty string will be returned.
-     * It could also be {@code null} when the editor or system could not support this protocol.
+     * than <var>length</var>. When there is no text before the cursor, an empty string will be
+     * returned. It could also be {@code null} when the editor or system could not support this
+     * protocol.
      */
     @Nullable
     public CharSequence getInitialTextBeforeCursor(int length, int flags) {
@@ -667,8 +677,8 @@
     }
 
     /**
-     * Gets the selected text, if any. May be {@code null} when no text is selected or the selected
-     * text is way too long.
+     * Gets the selected text, if any. May be {@code null} when the protocol is not supported or the
+     * selected text is way too long.
      *
      * @param flags Supplies additional options controlling how the text is returned. May be
      * either 0 or {@link InputConnection#GET_TEXT_WITH_STYLES}.
@@ -693,15 +703,16 @@
     }
 
     /**
-     * Get <var>n</var> characters of text after the current cursor position. May be {@code null}
-     * when the protocol is not supported.
+     * Get <var>length</var> characters of text after the current cursor position. May be
+     * {@code null} when the protocol is not supported.
      *
      * @param length The expected length of the text.
      * @param flags Supplies additional options controlling how the text is returned. May be
      * either 0 or {@link InputConnection#GET_TEXT_WITH_STYLES}.
      * @return the text after the cursor position; the length of the returned text might be less
-     * than <var>n</var>. When there is no text after the cursor, an empty string will be returned.
-     * It could also be {@code null} when the editor or system could not support this protocol.
+     * than <var>length</var>. When there is no text after the cursor, an empty string will be
+     * returned. It could also be {@code null} when the editor or system could not support this
+     * protocol.
      */
     @Nullable
     public CharSequence getInitialTextAfterCursor(int length, int flags) {
@@ -863,7 +874,6 @@
         return 0;
     }
 
-    // TODO(b/148035211): Unit tests for this class
     static final class InitialSurroundingText implements Parcelable {
         @Nullable final CharSequence mSurroundingText;
         final int mSelectionHead;
diff --git a/core/java/android/view/inputmethod/InlineSuggestion.java b/core/java/android/view/inputmethod/InlineSuggestion.java
index a32ea4b..ec485d3 100644
--- a/core/java/android/view/inputmethod/InlineSuggestion.java
+++ b/core/java/android/view/inputmethod/InlineSuggestion.java
@@ -22,6 +22,7 @@
 import android.annotation.TestApi;
 import android.content.Context;
 import android.os.AsyncTask;
+import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.RemoteException;
 import android.util.Size;
@@ -32,6 +33,7 @@
 import android.view.inline.InlinePresentationSpec;
 
 import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
 import com.android.internal.view.inline.IInlineContentCallback;
 import com.android.internal.view.inline.IInlineContentProvider;
 
@@ -62,6 +64,14 @@
     private final @Nullable IInlineContentProvider mContentProvider;
 
     /**
+     * Used to keep a strong reference to the callback so it doesn't get garbage collected.
+     *
+     * @hide
+     */
+    @DataClass.ParcelWith(InlineContentCallbackImplParceling.class)
+    private @Nullable InlineContentCallbackImpl mInlineContentCallback;
+
+    /**
      * Creates a new {@link InlineSuggestion}, for testing purpose.
      *
      * @hide
@@ -69,9 +79,19 @@
     @TestApi
     @NonNull
     public static InlineSuggestion newInlineSuggestion(@NonNull InlineSuggestionInfo info) {
-        return new InlineSuggestion(info, null);
+        return new InlineSuggestion(info, null, /* inlineContentCallback */ null);
     }
 
+    /**
+     * Creates a new {@link InlineSuggestion}.
+     *
+     * @hide
+     */
+    public InlineSuggestion(
+            @NonNull InlineSuggestionInfo info,
+            @Nullable IInlineContentProvider contentProvider) {
+        this(info, contentProvider, /* inlineContentCallback */ null);
+    }
 
 
 
@@ -79,12 +99,14 @@
      * Inflates a view with the content of this suggestion at a specific size.
      * The size must be between the {@link InlinePresentationSpec#getMinSize() min size}
      * and the {@link InlinePresentationSpec#getMaxSize() max size} of the presentation
-     * spec returned by {@link InlineSuggestionInfo#getPresentationSpec()}. If an invalid
-     * argument is passed an exception is thrown.
+     * spec returned by {@link InlineSuggestionInfo#getPresentationSpec()}.
      *
      * @param context Context in which to inflate the view.
      * @param size The size at which to inflate the suggestion.
      * @param callback Callback for receiving the inflated view.
+     *
+     * @throws IllegalArgumentException If an invalid argument is passed.
+     * @throws IllegalStateException if this method is already called.
      */
     public void inflate(@NonNull Context context, @NonNull Size size,
             @NonNull @CallbackExecutor Executor callbackExecutor,
@@ -96,19 +118,15 @@
             throw new IllegalArgumentException("size not between min:"
                     + minSize + " and max:" + maxSize);
         }
+        mInlineContentCallback = getInlineContentCallback(context, callbackExecutor, callback);
         AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
             if (mContentProvider == null) {
                 callback.accept(/* view */ null);
                 return;
             }
-            // TODO(b/137800469): keep a strong reference to the contentCallback so it doesn't
-            //  get GC'd. Also add a isInflated() method and make sure the view can only be
-            //  inflated once.
             try {
-                InlineContentCallbackImpl contentCallback = new InlineContentCallbackImpl(context,
-                        callbackExecutor, callback);
                 mContentProvider.provideContent(size.getWidth(), size.getHeight(),
-                        new InlineContentCallbackWrapper(contentCallback));
+                        new InlineContentCallbackWrapper(mInlineContentCallback));
             } catch (RemoteException e) {
                 Slog.w(TAG, "Error creating suggestion content surface: " + e);
                 callback.accept(/* view */ null);
@@ -116,6 +134,14 @@
         });
     }
 
+    private synchronized InlineContentCallbackImpl getInlineContentCallback(Context context,
+            Executor callbackExecutor, Consumer<View> callback) {
+        if (mInlineContentCallback != null) {
+            throw new IllegalStateException("Already called #inflate()");
+        }
+        return new InlineContentCallbackImpl(context, callbackExecutor, callback);
+    }
+
     private static final class InlineContentCallbackWrapper extends IInlineContentCallback.Stub {
 
         private final WeakReference<InlineContentCallbackImpl> mCallbackImpl;
@@ -157,6 +183,22 @@
         }
     }
 
+    /**
+     * This class used to provide parcelling logic for InlineContentCallbackImpl. It's intended to
+     * make this parcelling a no-op, since it can't be parceled and we don't need to parcel it.
+     */
+    private static class InlineContentCallbackImplParceling implements
+            Parcelling<InlineContentCallbackImpl> {
+        @Override
+        public void parcel(InlineContentCallbackImpl item, Parcel dest, int parcelFlags) {
+        }
+
+        @Override
+        public InlineContentCallbackImpl unparcel(Parcel source) {
+            return null;
+        }
+    }
+
 
 
     // Code below generated by codegen v1.0.14.
@@ -175,16 +217,20 @@
     /**
      * Creates a new InlineSuggestion.
      *
+     * @param inlineContentCallback
+     *   Used to keep a strong reference to the callback so it doesn't get garbage collected.
      * @hide
      */
     @DataClass.Generated.Member
     public InlineSuggestion(
             @NonNull InlineSuggestionInfo info,
-            @Nullable IInlineContentProvider contentProvider) {
+            @Nullable IInlineContentProvider contentProvider,
+            @Nullable InlineContentCallbackImpl inlineContentCallback) {
         this.mInfo = info;
         com.android.internal.util.AnnotationValidations.validate(
                 NonNull.class, null, mInfo);
         this.mContentProvider = contentProvider;
+        this.mInlineContentCallback = inlineContentCallback;
 
         // onConstructed(); // You can define this method to get a callback
     }
@@ -194,6 +240,16 @@
         return mInfo;
     }
 
+    /**
+     * Used to keep a strong reference to the callback so it doesn't get garbage collected.
+     *
+     * @hide
+     */
+    @DataClass.Generated.Member
+    public @Nullable InlineContentCallbackImpl getInlineContentCallback() {
+        return mInlineContentCallback;
+    }
+
     @Override
     @DataClass.Generated.Member
     public String toString() {
@@ -202,7 +258,8 @@
 
         return "InlineSuggestion { " +
                 "info = " + mInfo + ", " +
-                "contentProvider = " + mContentProvider +
+                "contentProvider = " + mContentProvider + ", " +
+                "inlineContentCallback = " + mInlineContentCallback +
         " }";
     }
 
@@ -220,7 +277,8 @@
         //noinspection PointlessBooleanExpression
         return true
                 && java.util.Objects.equals(mInfo, that.mInfo)
-                && java.util.Objects.equals(mContentProvider, that.mContentProvider);
+                && java.util.Objects.equals(mContentProvider, that.mContentProvider)
+                && java.util.Objects.equals(mInlineContentCallback, that.mInlineContentCallback);
     }
 
     @Override
@@ -232,20 +290,34 @@
         int _hash = 1;
         _hash = 31 * _hash + java.util.Objects.hashCode(mInfo);
         _hash = 31 * _hash + java.util.Objects.hashCode(mContentProvider);
+        _hash = 31 * _hash + java.util.Objects.hashCode(mInlineContentCallback);
         return _hash;
     }
 
+    @DataClass.Generated.Member
+    static Parcelling<InlineContentCallbackImpl> sParcellingForInlineContentCallback =
+            Parcelling.Cache.get(
+                    InlineContentCallbackImplParceling.class);
+    static {
+        if (sParcellingForInlineContentCallback == null) {
+            sParcellingForInlineContentCallback = Parcelling.Cache.put(
+                    new InlineContentCallbackImplParceling());
+        }
+    }
+
     @Override
     @DataClass.Generated.Member
-    public void writeToParcel(@NonNull android.os.Parcel dest, int flags) {
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
         // You can override field parcelling by defining methods like:
         // void parcelFieldName(Parcel dest, int flags) { ... }
 
         byte flg = 0;
         if (mContentProvider != null) flg |= 0x2;
+        if (mInlineContentCallback != null) flg |= 0x4;
         dest.writeByte(flg);
         dest.writeTypedObject(mInfo, flags);
         if (mContentProvider != null) dest.writeStrongInterface(mContentProvider);
+        sParcellingForInlineContentCallback.parcel(mInlineContentCallback, dest, flags);
     }
 
     @Override
@@ -255,18 +327,20 @@
     /** @hide */
     @SuppressWarnings({"unchecked", "RedundantCast"})
     @DataClass.Generated.Member
-    /* package-private */ InlineSuggestion(@NonNull android.os.Parcel in) {
+    /* package-private */ InlineSuggestion(@NonNull Parcel in) {
         // You can override field unparcelling by defining methods like:
         // static FieldType unparcelFieldName(Parcel in) { ... }
 
         byte flg = in.readByte();
         InlineSuggestionInfo info = (InlineSuggestionInfo) in.readTypedObject(InlineSuggestionInfo.CREATOR);
         IInlineContentProvider contentProvider = (flg & 0x2) == 0 ? null : IInlineContentProvider.Stub.asInterface(in.readStrongBinder());
+        InlineContentCallbackImpl inlineContentCallback = sParcellingForInlineContentCallback.unparcel(in);
 
         this.mInfo = info;
         com.android.internal.util.AnnotationValidations.validate(
                 NonNull.class, null, mInfo);
         this.mContentProvider = contentProvider;
+        this.mInlineContentCallback = inlineContentCallback;
 
         // onConstructed(); // You can define this method to get a callback
     }
@@ -280,16 +354,16 @@
         }
 
         @Override
-        public InlineSuggestion createFromParcel(@NonNull android.os.Parcel in) {
+        public InlineSuggestion createFromParcel(@NonNull Parcel in) {
             return new InlineSuggestion(in);
         }
     };
 
     @DataClass.Generated(
-            time = 1578972138081L,
+            time = 1581929285156L,
             codegenVersion = "1.0.14",
             sourceFile = "frameworks/base/core/java/android/view/inputmethod/InlineSuggestion.java",
-            inputSignatures = "private static final  java.lang.String TAG\nprivate final @android.annotation.NonNull android.view.inputmethod.InlineSuggestionInfo mInfo\nprivate final @android.annotation.Nullable com.android.internal.view.inline.IInlineContentProvider mContentProvider\npublic static @android.annotation.TestApi @android.annotation.NonNull android.view.inputmethod.InlineSuggestion newInlineSuggestion(android.view.inputmethod.InlineSuggestionInfo)\npublic  void inflate(android.content.Context,android.util.Size,java.util.concurrent.Executor,java.util.function.Consumer<android.view.View>)\nclass InlineSuggestion extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genHiddenConstDefs=true, genHiddenConstructor=true)")
+            inputSignatures = "private static final  java.lang.String TAG\nprivate final @android.annotation.NonNull android.view.inputmethod.InlineSuggestionInfo mInfo\nprivate final @android.annotation.Nullable com.android.internal.view.inline.IInlineContentProvider mContentProvider\nprivate @com.android.internal.util.DataClass.ParcelWith(android.view.inputmethod.InlineSuggestion.InlineContentCallbackImplParceling.class) @android.annotation.Nullable android.view.inputmethod.InlineSuggestion.InlineContentCallbackImpl mInlineContentCallback\npublic static @android.annotation.TestApi @android.annotation.NonNull android.view.inputmethod.InlineSuggestion newInlineSuggestion(android.view.inputmethod.InlineSuggestionInfo)\npublic  void inflate(android.content.Context,android.util.Size,java.util.concurrent.Executor,java.util.function.Consumer<android.view.View>)\nprivate synchronized  android.view.inputmethod.InlineSuggestion.InlineContentCallbackImpl getInlineContentCallback(android.content.Context,java.util.concurrent.Executor,java.util.function.Consumer<android.view.View>)\nclass InlineSuggestion extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genHiddenConstDefs=true, genHiddenConstructor=true)")
     @Deprecated
     private void __metadata() {}
 
diff --git a/core/java/android/view/inputmethod/InlineSuggestionInfo.java b/core/java/android/view/inputmethod/InlineSuggestionInfo.java
index 703b64f..024de4d 100644
--- a/core/java/android/view/inputmethod/InlineSuggestionInfo.java
+++ b/core/java/android/view/inputmethod/InlineSuggestionInfo.java
@@ -80,7 +80,6 @@
             @NonNull InlinePresentationSpec presentationSpec,
             @NonNull @Source String source,
             @Nullable String[] autofillHints) {
-        // TODO(b/147394280): Add CTS test for the type field.
         return new InlineSuggestionInfo(presentationSpec, source, autofillHints, TYPE_SUGGESTION);
     }
 
diff --git a/core/java/android/view/inputmethod/InlineSuggestionsRequest.java b/core/java/android/view/inputmethod/InlineSuggestionsRequest.java
index 860ce90..5700dda 100644
--- a/core/java/android/view/inputmethod/InlineSuggestionsRequest.java
+++ b/core/java/android/view/inputmethod/InlineSuggestionsRequest.java
@@ -19,6 +19,9 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.ActivityThread;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.LocaleList;
 import android.os.Parcelable;
 import android.view.inline.InlinePresentationSpec;
 
@@ -59,11 +62,31 @@
     private @NonNull String mHostPackageName;
 
     /**
-     * @hide
-     * @see {@link #mHostPackageName}.
+     * The IME provided locales for the request. If non-empty, the inline suggestions should
+     * return languages from the supported locales. If not provided, it'll default to system locale.
      */
-    public void setHostPackageName(@NonNull String hostPackageName) {
-        mHostPackageName = hostPackageName;
+    private @NonNull LocaleList mSupportedLocales;
+
+    // TODO(b/149609075): the generated code needs to be manually fixed due to the bug.
+    /**
+     * The host input token of the IME that made the request. This will be set by the system for
+     * safety reasons.
+     *
+     * @hide
+     */
+    private @Nullable IBinder mHostInputToken;
+
+    /**
+     * The extras state propagated from the IME to pass extra data.
+     */
+    private @Nullable Bundle mExtras;
+
+    /**
+     * @hide
+     * @see {@link #mHostInputToken}.
+     */
+    public void setHostInputToken(IBinder hostInputToken) {
+        mHostInputToken = hostInputToken;
     }
 
     private void onConstructed() {
@@ -78,11 +101,27 @@
         return ActivityThread.currentPackageName();
     }
 
+    private static LocaleList defaultSupportedLocales() {
+        return LocaleList.getDefault();
+    }
+
+    @Nullable
+    private static IBinder defaultHostInputToken() {
+        return null;
+    }
+
+    @Nullable
+    private static Bundle defaultExtras() {
+        return null;
+    }
+
     /** @hide */
     abstract static class BaseBuilder {
         abstract Builder setPresentationSpecs(@NonNull List<InlinePresentationSpec> value);
 
         abstract Builder setHostPackageName(@Nullable String value);
+
+        abstract Builder setHostInputToken(IBinder hostInputToken);
     }
 
 
@@ -104,7 +143,10 @@
     /* package-private */ InlineSuggestionsRequest(
             int maxSuggestionCount,
             @NonNull List<InlinePresentationSpec> presentationSpecs,
-            @NonNull String hostPackageName) {
+            @NonNull String hostPackageName,
+            @NonNull LocaleList supportedLocales,
+            @Nullable IBinder hostInputToken,
+            @Nullable Bundle extras) {
         this.mMaxSuggestionCount = maxSuggestionCount;
         this.mPresentationSpecs = presentationSpecs;
         com.android.internal.util.AnnotationValidations.validate(
@@ -112,6 +154,11 @@
         this.mHostPackageName = hostPackageName;
         com.android.internal.util.AnnotationValidations.validate(
                 NonNull.class, null, mHostPackageName);
+        this.mSupportedLocales = supportedLocales;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mSupportedLocales);
+        this.mHostInputToken = hostInputToken;
+        this.mExtras = extras;
 
         onConstructed();
     }
@@ -145,6 +192,34 @@
         return mHostPackageName;
     }
 
+    /**
+     * The IME provided locales for the request. If non-empty, the inline suggestions should
+     * return languages from the supported locales. If not provided, it'll default to system locale.
+     */
+    @DataClass.Generated.Member
+    public @NonNull LocaleList getSupportedLocales() {
+        return mSupportedLocales;
+    }
+
+    /**
+     * The host input token of the IME that made the request. This will be set by the system for
+     * safety reasons.
+     *
+     * @hide
+     */
+    @DataClass.Generated.Member
+    public @Nullable IBinder getHostInputToken() {
+        return mHostInputToken;
+    }
+
+    /**
+     * The extras state propagated from the IME to pass extra data.
+     */
+    @DataClass.Generated.Member
+    public @Nullable Bundle getExtras() {
+        return mExtras;
+    }
+
     @Override
     @DataClass.Generated.Member
     public String toString() {
@@ -154,7 +229,10 @@
         return "InlineSuggestionsRequest { " +
                 "maxSuggestionCount = " + mMaxSuggestionCount + ", " +
                 "presentationSpecs = " + mPresentationSpecs + ", " +
-                "hostPackageName = " + mHostPackageName +
+                "hostPackageName = " + mHostPackageName + ", " +
+                "supportedLocales = " + mSupportedLocales + ", " +
+                "hostInputToken = " + mHostInputToken + ", " +
+                "extras = " + mExtras +
         " }";
     }
 
@@ -173,7 +251,10 @@
         return true
                 && mMaxSuggestionCount == that.mMaxSuggestionCount
                 && java.util.Objects.equals(mPresentationSpecs, that.mPresentationSpecs)
-                && java.util.Objects.equals(mHostPackageName, that.mHostPackageName);
+                && java.util.Objects.equals(mHostPackageName, that.mHostPackageName)
+                && java.util.Objects.equals(mSupportedLocales, that.mSupportedLocales)
+                && java.util.Objects.equals(mHostInputToken, that.mHostInputToken)
+                && java.util.Objects.equals(mExtras, that.mExtras);
     }
 
     @Override
@@ -186,6 +267,9 @@
         _hash = 31 * _hash + mMaxSuggestionCount;
         _hash = 31 * _hash + java.util.Objects.hashCode(mPresentationSpecs);
         _hash = 31 * _hash + java.util.Objects.hashCode(mHostPackageName);
+        _hash = 31 * _hash + java.util.Objects.hashCode(mSupportedLocales);
+        _hash = 31 * _hash + java.util.Objects.hashCode(mHostInputToken);
+        _hash = 31 * _hash + java.util.Objects.hashCode(mExtras);
         return _hash;
     }
 
@@ -195,9 +279,16 @@
         // You can override field parcelling by defining methods like:
         // void parcelFieldName(Parcel dest, int flags) { ... }
 
+        byte flg = 0;
+        if (mHostInputToken != null) flg |= 0x10;
+        if (mExtras != null) flg |= 0x20;
+        dest.writeByte(flg);
         dest.writeInt(mMaxSuggestionCount);
         dest.writeParcelableList(mPresentationSpecs, flags);
         dest.writeString(mHostPackageName);
+        dest.writeTypedObject(mSupportedLocales, flags);
+        if (mHostInputToken != null) dest.writeStrongBinder(mHostInputToken);
+        if (mExtras != null) dest.writeBundle(mExtras);
     }
 
     @Override
@@ -211,10 +302,14 @@
         // You can override field unparcelling by defining methods like:
         // static FieldType unparcelFieldName(Parcel in) { ... }
 
+        byte flg = in.readByte();
         int maxSuggestionCount = in.readInt();
         List<InlinePresentationSpec> presentationSpecs = new ArrayList<>();
         in.readParcelableList(presentationSpecs, InlinePresentationSpec.class.getClassLoader());
         String hostPackageName = in.readString();
+        LocaleList supportedLocales = (LocaleList) in.readTypedObject(LocaleList.CREATOR);
+        IBinder hostInputToken = (flg & 0x10) == 0 ? null : in.readStrongBinder();
+        Bundle extras = (flg & 0x20) == 0 ? null : in.readBundle();
 
         this.mMaxSuggestionCount = maxSuggestionCount;
         this.mPresentationSpecs = presentationSpecs;
@@ -223,6 +318,11 @@
         this.mHostPackageName = hostPackageName;
         com.android.internal.util.AnnotationValidations.validate(
                 NonNull.class, null, mHostPackageName);
+        this.mSupportedLocales = supportedLocales;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mSupportedLocales);
+        this.mHostInputToken = hostInputToken;
+        this.mExtras = extras;
 
         onConstructed();
     }
@@ -251,6 +351,9 @@
         private int mMaxSuggestionCount;
         private @NonNull List<InlinePresentationSpec> mPresentationSpecs;
         private @NonNull String mHostPackageName;
+        private @NonNull LocaleList mSupportedLocales;
+        private @Nullable IBinder mHostInputToken;
+        private @Nullable Bundle mExtras;
 
         private long mBuilderFieldsSet = 0L;
 
@@ -320,10 +423,48 @@
             return this;
         }
 
+        /**
+         * The IME provided locales for the request. If non-empty, the inline suggestions should
+         * return languages from the supported locales. If not provided, it'll default to system locale.
+         */
+        @DataClass.Generated.Member
+        public @NonNull Builder setSupportedLocales(@NonNull LocaleList value) {
+            checkNotUsed();
+            mBuilderFieldsSet |= 0x8;
+            mSupportedLocales = value;
+            return this;
+        }
+
+        /**
+         * The host input token of the IME that made the request. This will be set by the system for
+         * safety reasons.
+         *
+         * @hide
+         */
+        @DataClass.Generated.Member
+        @Override
+        @NonNull Builder setHostInputToken(@Nullable IBinder value) {
+            checkNotUsed();
+            mBuilderFieldsSet |= 0x10;
+            mHostInputToken = value;
+            return this;
+        }
+
+        /**
+         * The extras state propagated from the IME to pass extra data.
+         */
+        @DataClass.Generated.Member
+        public @NonNull Builder setExtras(@Nullable Bundle value) {
+            checkNotUsed();
+            mBuilderFieldsSet |= 0x20;
+            mExtras = value;
+            return this;
+        }
+
         /** Builds the instance. This builder should not be touched after calling this! */
         public @NonNull InlineSuggestionsRequest build() {
             checkNotUsed();
-            mBuilderFieldsSet |= 0x8; // Mark builder used
+            mBuilderFieldsSet |= 0x40; // Mark builder used
 
             if ((mBuilderFieldsSet & 0x1) == 0) {
                 mMaxSuggestionCount = defaultMaxSuggestionCount();
@@ -331,15 +472,27 @@
             if ((mBuilderFieldsSet & 0x4) == 0) {
                 mHostPackageName = defaultHostPackageName();
             }
+            if ((mBuilderFieldsSet & 0x8) == 0) {
+                mSupportedLocales = defaultSupportedLocales();
+            }
+            if ((mBuilderFieldsSet & 0x10) == 0) {
+                mHostInputToken = defaultHostInputToken();
+            }
+            if ((mBuilderFieldsSet & 0x20) == 0) {
+                mExtras = defaultExtras();
+            }
             InlineSuggestionsRequest o = new InlineSuggestionsRequest(
                     mMaxSuggestionCount,
                     mPresentationSpecs,
-                    mHostPackageName);
+                    mHostPackageName,
+                    mSupportedLocales,
+                    mHostInputToken,
+                    mExtras);
             return o;
         }
 
         private void checkNotUsed() {
-            if ((mBuilderFieldsSet & 0x8) != 0) {
+            if ((mBuilderFieldsSet & 0x40) != 0) {
                 throw new IllegalStateException(
                         "This Builder should not be reused. Use a new Builder instance instead");
             }
@@ -347,10 +500,10 @@
     }
 
     @DataClass.Generated(
-            time = 1578948035951L,
+            time = 1581747892762L,
             codegenVersion = "1.0.14",
             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.view.inline.InlinePresentationSpec> mPresentationSpecs\nprivate @android.annotation.NonNull java.lang.String mHostPackageName\npublic  void setHostPackageName(java.lang.String)\nprivate  void onConstructed()\nprivate static  int defaultMaxSuggestionCount()\nprivate static  java.lang.String defaultHostPackageName()\nclass InlineSuggestionsRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setPresentationSpecs(java.util.List<android.view.inline.InlinePresentationSpec>)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostPackageName(java.lang.String)\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.view.inline.InlinePresentationSpec> mPresentationSpecs\nprivate @android.annotation.NonNull java.lang.String mHostPackageName\nprivate @android.annotation.NonNull android.os.LocaleList mSupportedLocales\nprivate @android.annotation.Nullable android.os.IBinder mHostInputToken\nprivate @android.annotation.Nullable android.os.Bundle mExtras\npublic  void setHostInputToken(android.os.IBinder)\nprivate  void onConstructed()\nprivate static  int defaultMaxSuggestionCount()\nprivate static  java.lang.String defaultHostPackageName()\nprivate static  android.os.LocaleList defaultSupportedLocales()\nprivate static @android.annotation.Nullable android.os.IBinder defaultHostInputToken()\nprivate static @android.annotation.Nullable android.os.Bundle defaultExtras()\nclass InlineSuggestionsRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setPresentationSpecs(java.util.List<android.view.inline.InlinePresentationSpec>)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostPackageName(java.lang.String)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostInputToken(android.os.IBinder)\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 91e15c1..71c9e33 100644
--- a/core/java/android/view/inputmethod/InputMethod.java
+++ b/core/java/android/view/inputmethod/InputMethod.java
@@ -21,17 +21,16 @@
 import android.annotation.Nullable;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
-import android.content.ComponentName;
 import android.inputmethodservice.InputMethodService;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.ResultReceiver;
 import android.util.Log;
 import android.view.View;
-import android.view.autofill.AutofillId;
 
 import com.android.internal.inputmethod.IInputMethodPrivilegedOperations;
 import com.android.internal.view.IInlineSuggestionsRequestCallback;
+import com.android.internal.view.InlineSuggestionsRequestInfo;
 
 /**
  * The InputMethod interface represents an input method which can generate key
@@ -114,14 +113,13 @@
     /**
      * Called to notify the IME that Autofill Frameworks requested an inline suggestions request.
      *
-     * @param componentName {@link ComponentName} of current app/activity.
-     * @param autofillId {@link AutofillId} of currently focused field.
+     * @param requestInfo information needed to create an {@link InlineSuggestionsRequest}.
      * @param cb {@link IInlineSuggestionsRequestCallback} used to pass back the request object.
      *
      * @hide
      */
-    default void onCreateInlineSuggestionsRequest(ComponentName componentName,
-            AutofillId autofillId, IInlineSuggestionsRequestCallback cb) {
+    default void onCreateInlineSuggestionsRequest(InlineSuggestionsRequestInfo requestInfo,
+            IInlineSuggestionsRequestCallback cb) {
         try {
             cb.onInlineSuggestionsUnsupported();
         } catch (RemoteException e) {
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index f0c16aa..dbab81b1 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -664,8 +664,6 @@
          */
         @Override
         public void setCurrentRootView(ViewRootImpl rootView) {
-            // If the mCurRootView is losing window focus, release the strong reference to it
-            // so as not to prevent it from being garbage-collected.
             if (mWindowFocusGainFuture != null) {
                 mWindowFocusGainFuture.cancel(false /* mayInterruptIfRunning */);
                 mWindowFocusGainFuture = null;
diff --git a/core/java/android/view/inputmethod/OWNERS b/core/java/android/view/inputmethod/OWNERS
new file mode 100644
index 0000000..244cc30
--- /dev/null
+++ b/core/java/android/view/inputmethod/OWNERS
@@ -0,0 +1,3 @@
+set noparent
+
+include ../../../../../services/core/java/com/android/server/inputmethod/OWNERS
diff --git a/core/java/android/view/textclassifier/TextClassificationManager.java b/core/java/android/view/textclassifier/TextClassificationManager.java
index a6c83a1..dfbec9b 100644
--- a/core/java/android/view/textclassifier/TextClassificationManager.java
+++ b/core/java/android/view/textclassifier/TextClassificationManager.java
@@ -25,7 +25,6 @@
 import android.os.ServiceManager;
 import android.provider.DeviceConfig;
 import android.provider.DeviceConfig.Properties;
-import android.util.SparseArray;
 import android.view.textclassifier.TextClassifier.TextClassifierType;
 
 import com.android.internal.annotations.GuardedBy;
@@ -62,8 +61,6 @@
     @Nullable
     private TextClassifier mLocalTextClassifier;
     @GuardedBy("mLock")
-    private SparseArray<TextClassifier> mSystemTextClassifiers = new SparseArray<>();
-    @GuardedBy("mLock")
     private TextClassificationSessionFactory mSessionFactory;
     @GuardedBy("mLock")
     private TextClassificationConstants mSettings;
@@ -207,23 +204,17 @@
     /** @hide */
     private TextClassifier getSystemTextClassifier(@TextClassifierType int type) {
         synchronized (mLock) {
-            if (mSystemTextClassifiers.get(type) == null
-                    && getSettings().isSystemTextClassifierEnabled()) {
+            if (getSettings().isSystemTextClassifierEnabled()) {
                 try {
-                    mSystemTextClassifiers.put(
-                            type,
-                            new SystemTextClassifier(
-                                    mContext,
-                                    getSettings(),
-                                    /* useDefault= */ type == TextClassifier.DEFAULT_SERVICE));
-                    Log.d(LOG_TAG, "Initialized SystemTextClassifier, type = " + type);
+                    Log.d(LOG_TAG, "Initializing SystemTextClassifier, type = " + type);
+                    return new SystemTextClassifier(
+                            mContext,
+                            getSettings(),
+                            /* useDefault= */ type == TextClassifier.DEFAULT_SERVICE);
                 } catch (ServiceManager.ServiceNotFoundException e) {
                     Log.e(LOG_TAG, "Could not initialize SystemTextClassifier", e);
                 }
             }
-            if (mSystemTextClassifiers.get(type) != null) {
-                return mSystemTextClassifiers.get(type);
-            }
             return TextClassifier.NO_OP;
         }
     }
@@ -263,7 +254,6 @@
     private void invalidateTextClassifiers() {
         synchronized (mLock) {
             mLocalTextClassifier = null;
-            mSystemTextClassifiers.clear();
         }
     }
 
diff --git a/core/java/android/view/textclassifier/TextClassificationSession.java b/core/java/android/view/textclassifier/TextClassificationSession.java
index 4329a20..fed3dbf 100644
--- a/core/java/android/view/textclassifier/TextClassificationSession.java
+++ b/core/java/android/view/textclassifier/TextClassificationSession.java
@@ -16,6 +16,7 @@
 
 package android.view.textclassifier;
 
+import android.annotation.NonNull;
 import android.annotation.WorkerThread;
 import android.view.textclassifier.SelectionEvent.InvocationMethod;
 
@@ -23,6 +24,8 @@
 
 import java.util.Objects;
 
+import sun.misc.Cleaner;
+
 /**
  * Session-aware TextClassifier.
  */
@@ -35,6 +38,7 @@
     private final SelectionEventHelper mEventHelper;
     private final TextClassificationSessionId mSessionId;
     private final TextClassificationContext mClassificationContext;
+    private final Cleaner mCleaner;
 
     private boolean mDestroyed;
 
@@ -44,6 +48,8 @@
         mSessionId = new TextClassificationSessionId();
         mEventHelper = new SelectionEventHelper(mSessionId, mClassificationContext);
         initializeRemoteSession();
+        // This ensures destroy() is called if the client forgot to do so.
+        mCleaner = Cleaner.create(this, new CleanerRunnable(mEventHelper, mDelegate));
     }
 
     @Override
@@ -114,8 +120,7 @@
 
     @Override
     public void destroy() {
-        mEventHelper.endSession();
-        mDelegate.destroy();
+        mCleaner.clean();
         mDestroyed = true;
     }
 
@@ -258,4 +263,25 @@
             }
         }
     }
+
+    // We use a static nested class here to avoid retaining the object reference of the outer
+    // class. Otherwise. the Cleaner would never be triggered.
+    private static class CleanerRunnable implements Runnable {
+        @NonNull
+        private final SelectionEventHelper mEventHelper;
+        @NonNull
+        private final TextClassifier mDelegate;
+
+        CleanerRunnable(
+                @NonNull SelectionEventHelper eventHelper, @NonNull TextClassifier delegate) {
+            mEventHelper = Objects.requireNonNull(eventHelper);
+            mDelegate = Objects.requireNonNull(delegate);
+        }
+
+        @Override
+        public void run() {
+            mEventHelper.endSession();
+            mDelegate.destroy();
+        }
+    }
 }
diff --git a/core/java/android/view/textclassifier/TextClassificationSessionId.java b/core/java/android/view/textclassifier/TextClassificationSessionId.java
index f90e6b2..0b6fba2 100644
--- a/core/java/android/view/textclassifier/TextClassificationSessionId.java
+++ b/core/java/android/view/textclassifier/TextClassificationSessionId.java
@@ -17,6 +17,8 @@
 package android.view.textclassifier;
 
 import android.annotation.NonNull;
+import android.os.Binder;
+import android.os.IBinder;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -28,7 +30,10 @@
  * This class represents the id of a text classification session.
  */
 public final class TextClassificationSessionId implements Parcelable {
-    private final @NonNull String mValue;
+    @NonNull
+    private final String mValue;
+    @NonNull
+    private final IBinder mToken;
 
     /**
      * Creates a new instance.
@@ -36,7 +41,7 @@
      * @hide
      */
     public TextClassificationSessionId() {
-        this(UUID.randomUUID().toString());
+        this(UUID.randomUUID().toString(), new Binder());
     }
 
     /**
@@ -46,34 +51,28 @@
      *
      * @hide
      */
-    public TextClassificationSessionId(@NonNull String value) {
-        mValue = value;
+    public TextClassificationSessionId(@NonNull String value, @NonNull IBinder token) {
+        mValue = Objects.requireNonNull(value);
+        mToken = Objects.requireNonNull(token);
+    }
+
+    /** @hide */
+    @NonNull
+    public IBinder getToken() {
+        return mToken;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        TextClassificationSessionId that = (TextClassificationSessionId) o;
+        return Objects.equals(mValue, that.mValue) && Objects.equals(mToken, that.mToken);
     }
 
     @Override
     public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + mValue.hashCode();
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        TextClassificationSessionId other = (TextClassificationSessionId) obj;
-        if (!mValue.equals(other.mValue)) {
-            return false;
-        }
-        return true;
+        return Objects.hash(mValue, mToken);
     }
 
     @Override
@@ -84,6 +83,7 @@
     @Override
     public void writeToParcel(Parcel parcel, int flags) {
         parcel.writeString(mValue);
+        parcel.writeStrongBinder(mToken);
     }
 
     @Override
@@ -96,28 +96,18 @@
      *
      * @return The flattened id.
      */
-    public @NonNull String flattenToString() {
+    @NonNull
+    public String flattenToString() {
         return mValue;
     }
 
-    /**
-     * Unflattens a print job id from a string.
-     *
-     * @param string The string.
-     * @return The unflattened id, or null if the string is malformed.
-     *
-     * @hide
-     */
-    public static @NonNull TextClassificationSessionId unflattenFromString(@NonNull String string) {
-        return new TextClassificationSessionId(string);
-    }
-
-    public static final @android.annotation.NonNull Parcelable.Creator<TextClassificationSessionId> CREATOR =
+    @NonNull
+    public static final Parcelable.Creator<TextClassificationSessionId> CREATOR =
             new Parcelable.Creator<TextClassificationSessionId>() {
                 @Override
                 public TextClassificationSessionId createFromParcel(Parcel parcel) {
                     return new TextClassificationSessionId(
-                            Objects.requireNonNull(parcel.readString()));
+                            parcel.readString(), parcel.readStrongBinder());
                 }
 
                 @Override
diff --git a/core/java/android/webkit/CookieManager.java b/core/java/android/webkit/CookieManager.java
index 3824c22..ff80ef7 100644
--- a/core/java/android/webkit/CookieManager.java
+++ b/core/java/android/webkit/CookieManager.java
@@ -102,6 +102,9 @@
      * path and name will be replaced with the new cookie. The cookie being set
      * will be ignored if it is expired.
      *
+     * <p class="note"><b>Note:</b> if specifying a {@code value} containing the {@code "Secure"}
+     * attribute, {@code url} must use the {@code "https://"} scheme.
+     *
      * @param url the URL for which the cookie is to be set
      * @param value the cookie as a string, using the format of the 'Set-Cookie'
      *              HTTP response header
@@ -122,6 +125,9 @@
      * completes or whether it succeeded, and in this case it is safe to call the method from a
      * thread without a Looper.
      *
+     * <p class="note"><b>Note:</b> if specifying a {@code value} containing the {@code "Secure"}
+     * attribute, {@code url} must use the {@code "https://"} scheme.
+     *
      * @param url the URL for which the cookie is to be set
      * @param value the cookie as a string, using the format of the 'Set-Cookie'
      *              HTTP response header
diff --git a/core/java/android/webkit/UserPackage.java b/core/java/android/webkit/UserPackage.java
index 8a1a0b5..556b24c 100644
--- a/core/java/android/webkit/UserPackage.java
+++ b/core/java/android/webkit/UserPackage.java
@@ -34,7 +34,7 @@
     private final UserInfo mUserInfo;
     private final PackageInfo mPackageInfo;
 
-    public static final int MINIMUM_SUPPORTED_SDK = Build.VERSION_CODES.Q;
+    public static final int MINIMUM_SUPPORTED_SDK = Build.VERSION_CODES.R;
 
     public UserPackage(UserInfo user, PackageInfo packageInfo) {
         this.mUserInfo = user;
diff --git a/core/java/android/webkit/WebResourceRequest.java b/core/java/android/webkit/WebResourceRequest.java
index 964b6f8..0b307e6 100644
--- a/core/java/android/webkit/WebResourceRequest.java
+++ b/core/java/android/webkit/WebResourceRequest.java
@@ -32,10 +32,10 @@
     Uri getUrl();
 
     /**
-     * Gets whether the request was made for the main frame.
+     * Gets whether the request was made in order to fetch the main frame's document.
      *
-     * @return whether the request was made for the main frame. Will be {@code false} for iframes,
-     *         for example.
+     * @return whether the request was made for the main frame document. Will be
+     *         {@code false} for subresources or iframes, for example.
      */
     boolean isForMainFrame();
 
diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java
index 941af6e..8790bbd 100644
--- a/core/java/android/webkit/WebViewFactory.java
+++ b/core/java/android/webkit/WebViewFactory.java
@@ -47,7 +47,7 @@
     // visible for WebViewZygoteInit to look up the class by reflection and call preloadInZygote.
     /** @hide */
     private static final String CHROMIUM_WEBVIEW_FACTORY =
-            "com.android.webview.chromium.WebViewChromiumFactoryProviderForQ";
+            "com.android.webview.chromium.WebViewChromiumFactoryProviderForR";
 
     private static final String CHROMIUM_WEBVIEW_FACTORY_METHOD = "create";
 
diff --git a/core/java/android/webkit/WebViewProviderResponse.java b/core/java/android/webkit/WebViewProviderResponse.java
index b58cc4bb..02e48dd 100644
--- a/core/java/android/webkit/WebViewProviderResponse.java
+++ b/core/java/android/webkit/WebViewProviderResponse.java
@@ -16,6 +16,8 @@
 
 package android.webkit;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.pm.PackageInfo;
 import android.os.Parcel;
@@ -30,7 +32,7 @@
     }
 
     // aidl stuff
-    public static final @android.annotation.NonNull Parcelable.Creator<WebViewProviderResponse> CREATOR =
+    public static final @NonNull Parcelable.Creator<WebViewProviderResponse> CREATOR =
         new Parcelable.Creator<WebViewProviderResponse>() {
             public WebViewProviderResponse createFromParcel(Parcel in) {
                 return new WebViewProviderResponse(in);
@@ -58,6 +60,7 @@
     }
 
     @UnsupportedAppUsage
+    @Nullable
     public final PackageInfo packageInfo;
     public final int status;
 }
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 4e4a983..9de1222 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -5111,8 +5111,10 @@
                     int lineRight = (int) layout.getLineRight(line);
                     lineRight += mTextView.getTotalPaddingLeft() - mTextView.getScrollX();
                     mMagnifierAnimator.mMagnifier.setSourceHorizontalBounds(lineLeft, lineRight);
+                    mMagnifierAnimator.mMagnifier.show(showPosInView.x, showPosInView.y);
+                } else {
+                  mMagnifierAnimator.show(showPosInView.x, showPosInView.y);
                 }
-                mMagnifierAnimator.show(showPosInView.x, showPosInView.y);
                 updateHandlesVisibility();
             } else {
                 dismissMagnifier();
@@ -5248,9 +5250,6 @@
         private boolean mIsInActionMode;
         // The timestamp for the last up event, which is used for double tap detection.
         private long mLastUpTime;
-        // The text height of the font of the text view, which is used to calculate the Y coordinate
-        // of the touch through events.
-        private float mTextHeight;
 
         // The delta height applied to the insertion handle view.
         private final int mDeltaHeight;
@@ -5272,6 +5271,8 @@
                 if (opacity < 10 || opacity > 100) {
                     opacity = 50;
                 }
+                // Converts the opacity value from range {0..100} to {0..255}.
+                opacity = opacity * 255 / 100;
             }
             mDeltaHeight = deltaHeight;
             mDrawableOpacity = opacity;
@@ -5403,8 +5404,6 @@
                     if (ev.getEventTime() - mLastUpTime < ViewConfiguration.getDoubleTapTimeout()) {
                         stopTextActionMode();  // Avoid crash when double tap and drag backwards.
                     }
-                    final Paint.FontMetrics fontMetrics = mTextView.getPaint().getFontMetrics();
-                    mTextHeight = fontMetrics.descent - fontMetrics.ascent;
                     mTouchState.setIsOnHandle(true);
                     break;
                 case MotionEvent.ACTION_UP:
@@ -5443,6 +5442,10 @@
         }
 
         private MotionEvent transformEventForTouchThrough(MotionEvent ev) {
+            final Layout layout = mTextView.getLayout();
+            final int line = layout.getLineForOffset(getCurrentCursorOffset());
+            final int textHeight =
+                    layout.getLineBottomWithoutSpacing(line) - layout.getLineTop(line);
             // Transforms the touch events to screen coordinates.
             // And also shift up to make the hit point is on the text.
             // Note:
@@ -5450,7 +5453,7 @@
             //  - The revised Y should be at the top of the text.
             Matrix m = new Matrix();
             m.setTranslate(ev.getRawX() - ev.getX() + (getMeasuredWidth() >> 1) - mTouchDownX,
-                    ev.getRawY() - ev.getY() - mTouchDownY - mTextHeight);
+                    ev.getRawY() - ev.getY() - (textHeight >> 1) - mTouchDownY);
             ev.transform(m);
             // Transforms the touch events to text view coordinates.
             mTextView.toLocalMotionEvent(ev);
@@ -6009,7 +6012,13 @@
     @VisibleForTesting
     public class InsertionPointCursorController implements CursorController {
         private InsertionHandleView mHandle;
+        // Tracks whether the cursor is currently being dragged.
         private boolean mIsDraggingCursor;
+        // During a drag, tracks whether the user's finger has adjusted to be over the handle rather
+        // than the cursor bar.
+        private boolean mIsTouchSnappedToHandleDuringDrag;
+        // During a drag, tracks the line of text where the cursor was last positioned.
+        private int mPrevLineDuringDrag;
 
         public void onTouchEvent(MotionEvent event) {
             if (hasSelectionController() && getSelectionController().isCursorBeingModified()) {
@@ -6040,8 +6049,8 @@
         }
 
         private void positionCursorDuringDrag(MotionEvent event) {
-            int line = mTextView.getLineAtCoordinate(event.getY());
-            int offset = mTextView.getOffsetAtCoordinate(line, event.getX());
+            mPrevLineDuringDrag = getLineDuringDrag(event);
+            int offset = mTextView.getOffsetAtCoordinate(mPrevLineDuringDrag, event.getX());
             int oldSelectionStart = mTextView.getSelectionStart();
             int oldSelectionEnd = mTextView.getSelectionEnd();
             if (offset == oldSelectionStart && offset == oldSelectionEnd) {
@@ -6054,11 +6063,58 @@
             }
         }
 
+        /**
+         * Returns the line where the cursor should be positioned during a cursor drag. Rather than
+         * simply returning the line directly at the touch position, this function has the following
+         * additional logic:
+         * 1) Apply some slop to avoid switching lines if the touch moves just slightly off the
+         * current line.
+         * 2) Allow the user's finger to slide down and "snap" to the handle to provide better
+         * visibility of the cursor and text.
+         */
+        private int getLineDuringDrag(MotionEvent event) {
+            final Layout layout = mTextView.getLayout();
+            if (mTouchState.isOnHandle()) {
+                // The drag was initiated from the handle, so no need to apply the snap logic. See
+                // InsertionHandleView.touchThrough().
+                return getCurrentLineAdjustedForSlop(layout, mPrevLineDuringDrag, event.getY());
+            }
+            if (mIsTouchSnappedToHandleDuringDrag) {
+                float cursorY = event.getY() - getHandle().getIdealVerticalOffset();
+                return getCurrentLineAdjustedForSlop(layout, mPrevLineDuringDrag, cursorY);
+            }
+            int line = getCurrentLineAdjustedForSlop(layout, mPrevLineDuringDrag, event.getY());
+            if (mPrevLineDuringDrag == UNSET_LINE || line <= mPrevLineDuringDrag) {
+                // User's finger is on the same line or moving up; continue positioning the cursor
+                // directly at the touch location.
+                return line;
+            }
+            // User's finger is moving downwards; delay jumping to the lower line to allow the
+            // touch to move to the handle.
+            float cursorY = event.getY() - getHandle().getIdealVerticalOffset();
+            line = getCurrentLineAdjustedForSlop(layout, mPrevLineDuringDrag, cursorY);
+            if (line < mPrevLineDuringDrag) {
+                return mPrevLineDuringDrag;
+            }
+            // User's finger is now over the handle, at the ideal offset from the cursor. From now
+            // on, position the cursor higher up from the actual touch location so that the user's
+            // finger stays "snapped" to the handle. This provides better visibility of the text.
+            mIsTouchSnappedToHandleDuringDrag = true;
+            if (TextView.DEBUG_CURSOR) {
+                logCursor("InsertionPointCursorController",
+                        "snapped touch to handle: eventY=%d, cursorY=%d, mLastLine=%d, line=%d",
+                        (int) event.getY(), (int) cursorY, mPrevLineDuringDrag, line);
+            }
+            return line;
+        }
+
         private void startCursorDrag(MotionEvent event) {
             if (TextView.DEBUG_CURSOR) {
                 logCursor("InsertionPointCursorController", "start cursor drag");
             }
             mIsDraggingCursor = true;
+            mIsTouchSnappedToHandleDuringDrag = false;
+            mPrevLineDuringDrag = UNSET_LINE;
             // We don't want the parent scroll/long-press handlers to take over while dragging.
             mTextView.getParent().requestDisallowInterceptTouchEvent(true);
             mTextView.cancelLongPress();
@@ -6081,6 +6137,8 @@
                 logCursor("InsertionPointCursorController", "end cursor drag");
             }
             mIsDraggingCursor = false;
+            mIsTouchSnappedToHandleDuringDrag = false;
+            mPrevLineDuringDrag = UNSET_LINE;
             // Hide the magnifier and set the handle to be hidden after a delay.
             getHandle().dismissMagnifier();
             getHandle().hideAfterDelay();
diff --git a/core/java/android/widget/Magnifier.java b/core/java/android/widget/Magnifier.java
index 50da6ce..47ea1cb 100644
--- a/core/java/android/widget/Magnifier.java
+++ b/core/java/android/widget/Magnifier.java
@@ -45,6 +45,7 @@
 import android.os.HandlerThread;
 import android.os.Message;
 import android.util.Log;
+import android.util.TypedValue;
 import android.view.ContextThemeWrapper;
 import android.view.Display;
 import android.view.PixelCopy;
@@ -76,6 +77,8 @@
     // the Handler of this Thread when the copy is finished.
     private static final HandlerThread sPixelCopyHandlerThread =
             new HandlerThread("magnifier pixel copy result handler");
+    // The width of the ramp region in DP on the left & right sides of the fish-eye effect.
+    private static final float FISHEYE_RAMP_WIDTH = 12f;
 
     // The view to which this magnifier is attached.
     private final View mView;
@@ -151,6 +154,8 @@
     // The horizontal bounds of the content source in pixels, relative to the view.
     private int mLeftBound = Integer.MIN_VALUE;
     private int mRightBound = Integer.MAX_VALUE;
+    // The width of the ramp region in pixels on the left & right sides of the fish-eye effect.
+    private final int mRamp;
 
     /**
      * Initializes a magnifier.
@@ -232,6 +237,8 @@
         mBottomContentBound = params.mBottomContentBound;
         // The view's surface coordinates will not be updated until the magnifier is first shown.
         mViewCoordinatesInSurface = new int[2];
+        mRamp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, FISHEYE_RAMP_WIDTH,
+                mView.getContext().getResources().getDisplayMetrics());
     }
 
     static {
@@ -303,16 +310,54 @@
             // The magnifier center is the same as source center in new style.
             magnifierCenterX = mClampedCenterZoomCoords.x - mViewCoordinatesInSurface[0];
             magnifierCenterY = mClampedCenterZoomCoords.y - mViewCoordinatesInSurface[1];
+
+            // mLeftBound & mRightBound (typically the text line left/right) is for magnified
+            // content. However the PixelCopy requires the pre-magnified bounds.
+            // The below logic calculates the leftBound & rightBound for the pre-magnified bounds.
+            final float rampPre =
+                    (mSourceWidth - (mSourceWidth - 2 * mRamp) / mZoom) / 2;
+
+            // Calculates the pre-zoomed left edge.
+            // The leftEdge moves from the left of view towards to sourceCenterX, considering the
+            // fisheye-like zooming.
+            final float x0 = sourceCenterX - mSourceWidth / 2;
+            final float rampX0 = x0 + mRamp;
+            float leftEdge = 0;
+            if (leftEdge > rampX0) {
+                // leftEdge is in the zoom range, the distance from leftEdge to sourceCenterX
+                // should reduce per mZoom.
+                leftEdge = sourceCenterX - (sourceCenterX - leftEdge) / mZoom;
+            } else if (leftEdge > x0) {
+                // leftEdge is in the ramp range, the distance from leftEdge to rampX0 should
+                // increase per ramp zoom (ramp / rampPre).
+                leftEdge = x0 + rampPre - (rampX0 - leftEdge) * rampPre / mRamp;
+            }
+            int leftBound = Math.min(Math.max((int) leftEdge, mLeftBound), mRightBound);
+
+            // Calculates the pre-zoomed right edge.
+            // The rightEdge moves from the right of view towards to sourceCenterX, considering the
+            // fisheye-like zooming.
+            final float x1 = sourceCenterX + mSourceWidth / 2;
+            final float rampX1 = x1 - mRamp;
+            float rightEdge = mView.getWidth();
+            if (rightEdge < rampX1) {
+                // rightEdge is in the zoom range, the distance from rightEdge to sourceCenterX
+                // should reduce per mZoom.
+                rightEdge = sourceCenterX + (rightEdge - sourceCenterX) / mZoom;
+            } else if (rightEdge < x1) {
+                // rightEdge is in the ramp range, the distance from rightEdge to rampX1 should
+                // increase per ramp zoom (ramp / rampPre).
+                rightEdge = x1 - rampPre + (rightEdge - rampX1) * rampPre / mRamp;
+            }
+            int rightBound = Math.max(leftBound, Math.min((int) rightEdge, mRightBound));
+
             // Gets the startX for new style, which should be bounded by the horizontal bounds.
             // Also calculates the left/right cut width for pixel copy.
-            final int left = startX;
-            final int right = startX + mSourceWidth;
-            final int leftBound = mViewCoordinatesInSurface[0] + Math.max(0, mLeftBound);
-            final int rightBound =
-                    mViewCoordinatesInSurface[0] + Math.min(mView.getWidth(), mRightBound);
-            startX = Math.max(left, leftBound);
-            mLeftCutWidth = Math.max(0, leftBound - left);
-            mRightCutWidth = Math.max(0, right - rightBound);
+            leftBound += mViewCoordinatesInSurface[0];
+            rightBound += mViewCoordinatesInSurface[0];
+            mLeftCutWidth = Math.max(0, leftBound - startX);
+            mRightCutWidth = Math.max(0, startX + mSourceWidth - rightBound);
+            startX = Math.max(startX, leftBound);
         }
         obtainWindowCoordinates(magnifierCenterX, magnifierCenterY);
 
@@ -322,7 +367,7 @@
                 synchronized (mLock) {
                     mWindow = new InternalPopupWindow(mView.getContext(), mView.getDisplay(),
                             mParentSurface.mSurfaceControl, mWindowWidth, mWindowHeight, mZoom,
-                            mWindowElevation, mWindowCornerRadius,
+                            mRamp, mWindowElevation, mWindowCornerRadius,
                             mOverlay != null ? mOverlay : new ColorDrawable(Color.TRANSPARENT),
                             Handler.getMain() /* draw the magnifier on the UI thread */, mLock,
                             mCallback, mIsFishEyeStyle);
@@ -854,8 +899,6 @@
         // The z of the magnifier surface, defining its z order in the list of
         // siblings having the same parent surface (usually the main app surface).
         private static final int SURFACE_Z = 5;
-        // The width of the ramp region in pixels on the left & right sides of the fish-eye effect.
-        private static final int FISHEYE_RAMP_WIDTH = 30;
 
         // Display associated to the view the magnifier is attached to.
         private final Display mDisplay;
@@ -905,6 +948,8 @@
         private Bitmap mCurrentContent;
 
         private final float mZoom;
+        // The width of the ramp region in pixels on the left & right sides of the fish-eye effect.
+        private final int mRamp;
         // Whether is in the new magnifier style.
         private boolean mIsFishEyeStyle;
         // The mesh matrix for the fish-eye effect.
@@ -915,7 +960,7 @@
 
         InternalPopupWindow(final Context context, final Display display,
                 final SurfaceControl parentSurfaceControl, final int width, final int height,
-                final float zoom, final float elevation, final float cornerRadius,
+                final float zoom, final int ramp, final float elevation, final float cornerRadius,
                 final Drawable overlay, final Handler handler, final Object lock,
                 final Callback callback, final boolean isFishEyeStyle) {
             mDisplay = display;
@@ -926,6 +971,7 @@
             mContentWidth = width;
             mContentHeight = height;
             mZoom = zoom;
+            mRamp = ramp;
             mOffsetX = (int) (1.05f * elevation);
             mOffsetY = (int) (1.05f * elevation);
             // Setup the surface we will use for drawing the content and shadow.
@@ -995,14 +1041,13 @@
             final float h = mContentHeight;
             final float h0 = h / mZoom;
             final float dh = h - h0;
-            final float ramp = FISHEYE_RAMP_WIDTH;
             mMeshLeft = new float[2 * (mMeshWidth + 1) * (mMeshHeight + 1)];
             mMeshRight = new float[2 * (mMeshWidth + 1) * (mMeshHeight + 1)];
             for (int i = 0; i < 2 * (mMeshWidth + 1) * (mMeshHeight + 1); i += 2) {
                 // Calculates X value.
                 final int colIndex = i % (2 * (mMeshWidth + 1)) / 2;
-                mMeshLeft[i] = (float) colIndex * ramp / mMeshWidth;
-                mMeshRight[i] = w - ramp + colIndex * ramp / mMeshWidth;
+                mMeshLeft[i] = (float) colIndex * mRamp / mMeshWidth;
+                mMeshRight[i] = w - mRamp + colIndex * mRamp / mMeshWidth;
 
                 // Calculates Y value.
                 final int rowIndex = i / 2 / (mMeshWidth + 1);
@@ -1174,14 +1219,13 @@
                     final Paint paint = new Paint();
                     paint.setFilterBitmap(true);
                     if (mIsFishEyeStyle) {
-                        final int ramp = FISHEYE_RAMP_WIDTH;
                         final int margin =
-                            (int)((mContentWidth - (mContentWidth - 2 * ramp) / mZoom) / 2);
+                            (int)((mContentWidth - (mContentWidth - 2 * mRamp) / mZoom) / 2);
 
                         // Draws the middle part.
                         final Rect srcRect = new Rect(margin, 0, w - margin, h);
                         final Rect dstRect = new Rect(
-                            ramp, 0, mContentWidth - ramp, mContentHeight);
+                            mRamp, 0, mContentWidth - mRamp, mContentHeight);
                         canvas.drawBitmap(mBitmap, srcRect, dstRect, paint);
 
                         // Draws the left/right parts with mesh matrixes.
@@ -1213,7 +1257,8 @@
                             return;
                         }
                         // Show or move the window at the content draw frame.
-                        mTransaction.deferTransactionUntilSurface(mSurfaceControl, mSurface, frame);
+                        mTransaction.deferTransactionUntil(mSurfaceControl, mSurfaceControl,
+                                frame);
                         if (updateWindowPosition) {
                             mTransaction.setPosition(mSurfaceControl, pendingX, pendingY);
                         }
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index cbfa05c..815cc5c 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -17,6 +17,7 @@
 package android.widget;
 
 import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
+import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_RENDERING_INFO_KEY;
 import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH;
 import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX;
 import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY;
@@ -422,9 +423,6 @@
      */
     static final int PROCESS_TEXT_REQUEST_CODE = 100;
 
-    // Accessibility action to send IME custom action for CTS testing.
-    public static final int ACCESSIBILITY_ACTION_IME_ENTER = R.id.accessibilityActionImeEnter;
-
     /**
      *  Return code of {@link #doKeyDown}.
      */
@@ -730,6 +728,7 @@
     @UnsupportedAppUsage
     private Layout mLayout;
     private boolean mLocalesChanged = false;
+    private int mTextSizeUnit = -1;
 
     // True if setKeyListener() has been explicitly called
     private boolean mListenerChanged = false;
@@ -3845,6 +3844,7 @@
         ColorStateList mTextColorHint = null;
         ColorStateList mTextColorLink = null;
         int mTextSize = -1;
+        int mTextSizeUnit = -1;
         LocaleList mTextLocales = null;
         String mFontFamily = null;
         Typeface mFontTypeface = null;
@@ -3872,6 +3872,7 @@
                     + "    mTextColorHint:" + mTextColorHint + "\n"
                     + "    mTextColorLink:" + mTextColorLink + "\n"
                     + "    mTextSize:" + mTextSize + "\n"
+                    + "    mTextSizeUnit:" + mTextSizeUnit + "\n"
                     + "    mTextLocales:" + mTextLocales + "\n"
                     + "    mFontFamily:" + mFontFamily + "\n"
                     + "    mFontTypeface:" + mFontTypeface + "\n"
@@ -3983,6 +3984,7 @@
                 case com.android.internal.R.styleable.TextAppearance_textSize:
                     attributes.mTextSize =
                             appearance.getDimensionPixelSize(attr, attributes.mTextSize);
+                    attributes.mTextSizeUnit = appearance.peekValue(attr).getComplexUnit();
                     break;
                 case com.android.internal.R.styleable.TextAppearance_textLocale:
                     final String localeString = appearance.getString(attr);
@@ -4076,6 +4078,7 @@
         }
 
         if (attributes.mTextSize != -1) {
+            mTextSizeUnit = attributes.mTextSizeUnit;
             setRawTextSize(attributes.mTextSize, true /* shouldRequestLayout */);
         }
 
@@ -4298,6 +4301,7 @@
             r = c.getResources();
         }
 
+        mTextSizeUnit = unit;
         setRawTextSize(TypedValue.applyDimension(unit, size, r.getDisplayMetrics()),
                 shouldRequestLayout);
     }
@@ -4318,6 +4322,17 @@
     }
 
     /**
+     * Gets the text size unit defined by the developer. It may be specified in resources or be
+     * passed as the unit argument of {@link #setTextSize(int, float)} at runtime.
+     *
+     * @return the dimension type of the text size unit originally defined.
+     * @see TypedValue#TYPE_DIMENSION
+     */
+    public int getTextSizeUnit() {
+        return mTextSizeUnit;
+    }
+
+    /**
      * Gets the extent by which text should be stretched horizontally.
      * This will usually be 1.0.
      * @return The horizontal scale factor.
@@ -8285,9 +8300,9 @@
         if (getKeyListener() != null && !mSingleLine && mEditor != null
                 && (mEditor.mInputType & EditorInfo.TYPE_MASK_CLASS)
                         == EditorInfo.TYPE_CLASS_TEXT) {
-            int variation = mEditor.mInputType & EditorInfo.TYPE_MASK_VARIATION;
-            if (variation == EditorInfo.TYPE_TEXT_FLAG_IME_MULTI_LINE
-                    || variation == EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE) {
+            int multilineFlags = EditorInfo.TYPE_TEXT_FLAG_IME_MULTI_LINE
+                    | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE;
+            if ((mEditor.mInputType & multilineFlags) != 0) {
                 return false;
             }
         }
@@ -11758,7 +11773,7 @@
                 }
                 AccessibilityNodeInfo.AccessibilityAction action =
                         new AccessibilityNodeInfo.AccessibilityAction(
-                                ACCESSIBILITY_ACTION_IME_ENTER, imeActionLabel);
+                                R.id.accessibilityActionImeEnter, imeActionLabel);
                 info.addAction(action);
             }
         }
@@ -11772,8 +11787,14 @@
                     | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PARAGRAPH
                     | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PAGE);
             info.addAction(AccessibilityNodeInfo.ACTION_SET_SELECTION);
-            info.setAvailableExtraData(
-                    Arrays.asList(EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY));
+            info.setAvailableExtraData(Arrays.asList(
+                    EXTRA_DATA_RENDERING_INFO_KEY,
+                    EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY
+            ));
+        } else {
+            info.setAvailableExtraData(Arrays.asList(
+                    EXTRA_DATA_RENDERING_INFO_KEY
+            ));
         }
 
         if (isFocused()) {
@@ -11827,11 +11848,7 @@
     @Override
     public void addExtraDataToAccessibilityNodeInfo(
             AccessibilityNodeInfo info, String extraDataKey, Bundle arguments) {
-        // The only extra data we support requires arguments.
-        if (arguments == null) {
-            return;
-        }
-        if (extraDataKey.equals(EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY)) {
+        if (arguments != null && extraDataKey.equals(EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY)) {
             int positionInfoStartIndex = arguments.getInt(
                     EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX, -1);
             int positionInfoLength = arguments.getInt(
@@ -11859,6 +11876,15 @@
                 }
             }
             info.getExtras().putParcelableArray(extraDataKey, boundingRects);
+            return;
+        }
+        if (extraDataKey.equals(AccessibilityNodeInfo.EXTRA_DATA_RENDERING_INFO_KEY)) {
+            final AccessibilityNodeInfo.ExtraRenderingInfo extraRenderingInfo =
+                    AccessibilityNodeInfo.ExtraRenderingInfo.obtain();
+            extraRenderingInfo.setLayoutParams(getLayoutParams().width, getLayoutParams().height);
+            extraRenderingInfo.setTextSizeInPx(getTextSize());
+            extraRenderingInfo.setTextSizeUnit(getTextSizeUnit());
+            info.setExtraRenderingInfo(extraRenderingInfo);
         }
     }
 
@@ -12072,7 +12098,7 @@
                     }
                 }
             } return true;
-            case ACCESSIBILITY_ACTION_IME_ENTER: {
+            case R.id.accessibilityActionImeEnter: {
                 if (isFocused() && isTextEditable()) {
                     final int imeActionId = (arguments != null) ? arguments.getInt(
                             AccessibilityNodeInfo.ACTION_ARGUMENT_IME_ACTION_ID_INT,
diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java
index a2c70b9..9e4ebfe 100644
--- a/core/java/android/widget/Toast.java
+++ b/core/java/android/widget/Toast.java
@@ -263,9 +263,14 @@
     /**
      * Return the view.
      *
-     * <p><strong>Warning:</strong> Starting from Android {@link Build.VERSION_CODES#R}, for apps
-     * targeting API level {@link Build.VERSION_CODES#R} or higher that haven't called {@link
-     * #setView(View)} with a non-{@code null} view, this method will return {@code null}.
+     * <p>Toasts constructed with {@link #Toast(Context)} that haven't called {@link #setView(View)}
+     * with a non-{@code null} view will return {@code null} here.
+     *
+     * <p>Starting from Android {@link Build.VERSION_CODES#R}, in apps targeting API level {@link
+     * Build.VERSION_CODES#R} or higher, toasts constructed with {@link #makeText(Context,
+     * CharSequence, int)} or its variants will also return {@code null} here unless they had called
+     * {@link #setView(View)} with a non-{@code null} view. If you want to be notified when the
+     * toast is shown or hidden, use {@link #addCallback(Callback)}.
      *
      * @see #setView
      * @deprecated Custom toast views are deprecated. Apps can create a standard text toast with the
@@ -276,7 +281,7 @@
      *      will not have custom toast views displayed.
      */
     @Deprecated
-    public View getView() {
+    @Nullable public View getView() {
         return mNextView;
     }
 
@@ -455,8 +460,19 @@
      * @hide
      */
     @UnsupportedAppUsage
-    public WindowManager.LayoutParams getWindowParams() {
-        return mTN.mParams;
+    @Nullable public WindowManager.LayoutParams getWindowParams() {
+        if (Compatibility.isChangeEnabled(CHANGE_TEXT_TOASTS_IN_THE_SYSTEM)) {
+            if (mNextView != null) {
+                // Custom toasts
+                return mTN.mParams;
+            } else {
+                // Text toasts
+                return null;
+            }
+        } else {
+            // Text and custom toasts are app-rendered
+            return mTN.mParams;
+        }
     }
 
     /**
diff --git a/core/java/com/android/internal/BrightnessSynchronizer.java b/core/java/com/android/internal/BrightnessSynchronizer.java
new file mode 100644
index 0000000..aa23251
--- /dev/null
+++ b/core/java/com/android/internal/BrightnessSynchronizer.java
@@ -0,0 +1,273 @@
+/*
+ * 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.internal;
+
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Message;
+import android.os.PowerManager;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.util.MathUtils;
+
+import java.util.LinkedList;
+import java.util.Queue;
+
+/**
+ * BrightnessSynchronizer helps convert between the int (old) system and float
+ * (new) system for storing the brightness. It has methods to convert between the two and also
+ * observes for when one of the settings is changed and syncs this with the other.
+ */
+public class BrightnessSynchronizer{
+
+    private static final int MSG_UPDATE_FLOAT = 1;
+    private static final int MSG_UPDATE_INT = 2;
+
+    private static final String TAG = "BrightnessSynchronizer";
+    private static final Uri BRIGHTNESS_URI =
+            Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);
+    private static final Uri BRIGHTNESS_FLOAT_URI =
+            Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FLOAT);
+
+    // The tolerance within which we consider brightness values approximately equal to eachother.
+    // This value is approximately 1/3 of the smallest possible brightness value.
+    public static final float EPSILON = 0.001f;
+
+    private final Context mContext;
+
+    private final Queue<Object> mWriteHistory = new LinkedList<>();
+
+    private final Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_UPDATE_FLOAT:
+                    updateBrightnessFloatFromInt(msg.arg1);
+                    break;
+                case MSG_UPDATE_INT:
+                    updateBrightnessIntFromFloat(Float.intBitsToFloat(msg.arg1));
+                    break;
+                default:
+                    super.handleMessage(msg);
+            }
+
+        }
+    };
+
+
+    public BrightnessSynchronizer(Context context) {
+        final BrightnessSyncObserver mBrightnessSyncObserver;
+        mContext = context;
+        mBrightnessSyncObserver = new BrightnessSyncObserver(mHandler);
+        mBrightnessSyncObserver.startObserving();
+    }
+
+    /**
+     * Converts between the int brightness system and the float brightness system.
+     */
+    public static float brightnessIntToFloat(Context context, int brightnessInt) {
+        PowerManager pm = context.getSystemService(PowerManager.class);
+        float pmMinBrightness = pm.getBrightnessConstraint(
+                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
+        float pmMaxBrightness = pm.getBrightnessConstraint(
+                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM);
+        int minBrightnessInt = brightnessFloatToInt(pmMinBrightness, PowerManager.BRIGHTNESS_MIN,
+                PowerManager.BRIGHTNESS_MAX, PowerManager.BRIGHTNESS_OFF + 1,
+                PowerManager.BRIGHTNESS_ON);
+        int maxBrightnessInt = brightnessFloatToInt(pmMaxBrightness, PowerManager.BRIGHTNESS_MIN,
+                PowerManager.BRIGHTNESS_MAX, PowerManager.BRIGHTNESS_OFF + 1,
+                PowerManager.BRIGHTNESS_ON);
+
+        return brightnessIntToFloat(brightnessInt, minBrightnessInt, maxBrightnessInt,
+                pmMinBrightness, pmMaxBrightness);
+    }
+
+    /**
+     * Converts between the int brightness system and the float brightness system.
+     */
+    public static float brightnessIntToFloat(int brightnessInt, int minInt, int maxInt,
+            float minFloat, float maxFloat) {
+        if (brightnessInt == PowerManager.BRIGHTNESS_OFF) {
+            return PowerManager.BRIGHTNESS_OFF_FLOAT;
+        } else if (brightnessInt == PowerManager.BRIGHTNESS_INVALID) {
+            return PowerManager.BRIGHTNESS_INVALID_FLOAT;
+        } else {
+            return MathUtils.constrainedMap(minFloat, maxFloat, (float) minInt, (float) maxInt,
+                    brightnessInt);
+        }
+    }
+
+    /**
+     * Converts between the float brightness system and the int brightness system.
+     */
+    public static int brightnessFloatToInt(Context context, float brightnessFloat) {
+        PowerManager pm = context.getSystemService(PowerManager.class);
+        float pmMinBrightness = pm.getBrightnessConstraint(
+                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
+        float pmMaxBrightness = pm.getBrightnessConstraint(
+                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM);
+        int minBrightnessInt = brightnessFloatToInt(pmMinBrightness, PowerManager.BRIGHTNESS_MIN,
+                PowerManager.BRIGHTNESS_MAX, PowerManager.BRIGHTNESS_OFF + 1,
+                PowerManager.BRIGHTNESS_ON);
+        int maxBrightnessInt = brightnessFloatToInt(pmMaxBrightness, PowerManager.BRIGHTNESS_MIN,
+                PowerManager.BRIGHTNESS_MAX, PowerManager.BRIGHTNESS_OFF + 1,
+                PowerManager.BRIGHTNESS_ON);
+
+        return brightnessFloatToInt(brightnessFloat, pmMinBrightness, pmMaxBrightness,
+                minBrightnessInt, maxBrightnessInt);
+    }
+
+    /**
+     * Converts between the float brightness system and the int brightness system.
+     */
+    public static int brightnessFloatToInt(float brightnessFloat, float minFloat, float maxFloat,
+            int minInt, int maxInt) {
+        if (floatEquals(brightnessFloat, PowerManager.BRIGHTNESS_OFF_FLOAT)) {
+            return PowerManager.BRIGHTNESS_OFF;
+        } else if (Float.isNaN(brightnessFloat)) {
+            return PowerManager.BRIGHTNESS_INVALID;
+        } else {
+            return Math.round(MathUtils.constrainedMap((float) minInt, (float) maxInt, minFloat,
+                    maxFloat, brightnessFloat));
+        }
+    }
+
+    private static float getScreenBrightnessFloat(Context context) {
+        return Settings.System.getFloatForUser(context.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_FLOAT, Float.NaN, UserHandle.USER_CURRENT);
+    }
+
+    private static int getScreenBrightnessInt(Context context) {
+        return Settings.System.getIntForUser(context.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS, 0, UserHandle.USER_CURRENT);
+    }
+
+    private float mPreferredSettingValue;
+
+    /**
+     * Updates the float setting based on a passed in int value. This is called whenever the int
+     * setting changes. mWriteHistory keeps a record of the values that been written to the settings
+     * from either this method or updateBrightnessIntFromFloat. This is to ensure that the value
+     * being set is due to an external value being set, rather than the updateBrightness* methods.
+     * The intention of this is to avoid race conditions when the setting is being changed
+     * frequently and to ensure we are not reacting to settings changes from this file.
+     * @param value Brightness value as int to store in the float setting.
+     */
+    private void updateBrightnessFloatFromInt(int value) {
+        Object topOfQueue = mWriteHistory.peek();
+        if (topOfQueue != null && topOfQueue.equals(value)) {
+            mWriteHistory.poll();
+        } else {
+            if (brightnessFloatToInt(mContext, mPreferredSettingValue) == value) {
+                return;
+            }
+            float newBrightnessFloat = brightnessIntToFloat(mContext, value);
+            mWriteHistory.offer(newBrightnessFloat);
+            mPreferredSettingValue = newBrightnessFloat;
+            Settings.System.putFloatForUser(mContext.getContentResolver(),
+                    Settings.System.SCREEN_BRIGHTNESS_FLOAT, newBrightnessFloat,
+                    UserHandle.USER_CURRENT);
+        }
+    }
+
+    /**
+     * Updates the int setting based on a passed in float value. This is called whenever the float
+     * setting changes. mWriteHistory keeps a record of the values that been written to the settings
+     * from either this method or updateBrightnessFloatFromInt. This is to ensure that the value
+     * being set is due to an external value being set, rather than the updateBrightness* methods.
+     * The intention of this is to avoid race conditions when the setting is being changed
+     * frequently and to ensure we are not reacting to settings changes from this file.
+     * @param value Brightness setting as float to store in int setting.
+     */
+    private void updateBrightnessIntFromFloat(float value) {
+        int newBrightnessInt = brightnessFloatToInt(mContext, value);
+        Object topOfQueue = mWriteHistory.peek();
+        if (topOfQueue != null && topOfQueue.equals(value)) {
+            mWriteHistory.poll();
+        } else {
+            mWriteHistory.offer(newBrightnessInt);
+            mPreferredSettingValue = value;
+            Settings.System.putIntForUser(mContext.getContentResolver(),
+                    Settings.System.SCREEN_BRIGHTNESS, newBrightnessInt, UserHandle.USER_CURRENT);
+        }
+    }
+
+    /**
+     * Tests whether two brightness float values are within a small enough tolerance
+     * of each other.
+     * @param a first float to compare
+     * @param b second float to compare
+     * @return whether the two values are within a small enough tolerance value
+     */
+    public static boolean floatEquals(float a, float b) {
+        if (a == b) {
+            return true;
+        } else if (Float.isNaN(a) && Float.isNaN(b)) {
+            return true;
+        } else if (Math.abs(a - b) < EPSILON) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    private class BrightnessSyncObserver extends ContentObserver {
+        /**
+         * Creates a content observer.
+         * @param handler The handler to run {@link #onChange} on, or null if none.
+         */
+        BrightnessSyncObserver(Handler handler) {
+            super(handler);
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            onChange(selfChange, null);
+        }
+
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            if (selfChange) {
+                return;
+            }
+            if (BRIGHTNESS_URI.equals(uri)) {
+                int currentBrightness = getScreenBrightnessInt(mContext);
+                mHandler.obtainMessage(MSG_UPDATE_FLOAT, currentBrightness, 0).sendToTarget();
+            } else if (BRIGHTNESS_FLOAT_URI.equals(uri)) {
+                float currentFloat = getScreenBrightnessFloat(mContext);
+                int toSend = Float.floatToIntBits(currentFloat);
+                mHandler.obtainMessage(MSG_UPDATE_INT, toSend, 0).sendToTarget();
+            }
+        }
+
+        public void startObserving() {
+            final ContentResolver cr = mContext.getContentResolver();
+            cr.unregisterContentObserver(this);
+            cr.registerContentObserver(BRIGHTNESS_URI, false, this, UserHandle.USER_ALL);
+            cr.registerContentObserver(BRIGHTNESS_FLOAT_URI, false, this, UserHandle.USER_ALL);
+        }
+
+        public void stopObserving() {
+            final ContentResolver cr = mContext.getContentResolver();
+            cr.unregisterContentObserver(this);
+        }
+    }
+}
diff --git a/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java b/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java
index 93659a4..bb40465 100644
--- a/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java
+++ b/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java
@@ -22,6 +22,7 @@
 import static com.android.internal.util.ArrayUtils.convertToLongArray;
 
 import android.accessibilityservice.AccessibilityServiceInfo;
+import android.annotation.IntDef;
 import android.app.ActivityManager;
 import android.app.ActivityThread;
 import android.app.AlertDialog;
@@ -53,6 +54,8 @@
 import com.android.internal.R;
 import com.android.internal.util.function.pooled.PooledLambda;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
@@ -85,6 +88,17 @@
     private boolean mEnabledOnLockScreen;
     private int mUserId;
 
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({
+            DialogStaus.NOT_SHOWN,
+            DialogStaus.SHOWN,
+    })
+    /** Denotes the user shortcut type. */
+    private @interface DialogStaus {
+        int NOT_SHOWN = 0;
+        int SHOWN  = 1;
+    }
+
     // Visible for testing
     public FrameworkObjectProvider mFrameworkObjectProvider = new FrameworkObjectProvider();
 
@@ -163,7 +177,8 @@
                 cr, Settings.Secure.ACCESSIBILITY_SHORTCUT_ENABLED, 1, mUserId) == 1;
         // Enable the shortcut from the lockscreen by default if the dialog has been shown
         final int dialogAlreadyShown = Settings.Secure.getIntForUser(
-                cr, Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0, mUserId);
+                cr, Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, DialogStaus.NOT_SHOWN,
+                mUserId);
         mEnabledOnLockScreen = Settings.Secure.getIntForUser(
                 cr, Settings.Secure.ACCESSIBILITY_SHORTCUT_ON_LOCK_SCREEN,
                 dialogAlreadyShown, mUserId) == 1;
@@ -178,7 +193,8 @@
         final ContentResolver cr = mContext.getContentResolver();
         final int userId = ActivityManager.getCurrentUser();
         final int dialogAlreadyShown = Settings.Secure.getIntForUser(
-                cr, Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0, userId);
+                cr, Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, DialogStaus.NOT_SHOWN,
+                userId);
         // Play a notification vibration
         Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
         if ((vibrator != null) && vibrator.hasVibrator()) {
@@ -205,7 +221,8 @@
             w.setAttributes(attr);
             mAlertDialog.show();
             Settings.Secure.putIntForUser(
-                    cr, Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 1, userId);
+                    cr, Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, DialogStaus.SHOWN,
+                    userId);
         } else {
             playNotificationTone();
             if (mAlertDialog != null) {
@@ -245,21 +262,12 @@
         String toastMessage = String.format(toastMessageFormatString, serviceName);
         Toast warningToast = mFrameworkObjectProvider.makeToastFromText(
                 mContext, toastMessage, Toast.LENGTH_LONG);
-        warningToast.getWindowParams().privateFlags |=
-                WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;
         warningToast.show();
     }
 
     private AlertDialog createShortcutWarningDialog(int userId) {
-        final String serviceDescription = getShortcutFeatureDescription(true /* Include summary */);
-
-        if (serviceDescription == null) {
-            return null;
-        }
-
-        final String warningMessage = String.format(
-                mContext.getString(R.string.accessibility_shortcut_toogle_warning),
-                serviceDescription);
+        final String warningMessage = mContext.getString(
+                R.string.accessibility_shortcut_toogle_warning);
         final AlertDialog alertDialog = mFrameworkObjectProvider.getAlertDialogBuilder(
                 // Use SystemUI context so we pick up any theme set in a vendor overlay
                 mFrameworkObjectProvider.getSystemUiContext())
@@ -272,11 +280,17 @@
                             Settings.Secure.putStringForUser(mContext.getContentResolver(),
                                     Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, "",
                                     userId);
+
+                            // If canceled, treat as if the dialog has never been shown
+                            Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                                    Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                                    DialogStaus.NOT_SHOWN, userId);
                         })
                 .setOnCancelListener((DialogInterface d) -> {
                     // If canceled, treat as if the dialog has never been shown
                     Settings.Secure.putIntForUser(mContext.getContentResolver(),
-                        Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0, userId);
+                            Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                            DialogStaus.NOT_SHOWN, userId);
                 })
                 .create();
         return alertDialog;
diff --git a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java
index ab8c19e..b4a0208 100644
--- a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java
+++ b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java
@@ -15,15 +15,27 @@
  */
 package com.android.internal.app;
 
+import android.annotation.DrawableRes;
 import android.annotation.IntDef;
 import android.annotation.Nullable;
+import android.annotation.StringRes;
+import android.app.AppGlobals;
+import android.app.admin.DevicePolicyEventLogger;
+import android.content.ContentResolver;
 import android.content.Context;
+import android.content.Intent;
+import android.content.pm.IPackageManager;
 import android.content.pm.ResolveInfo;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.stats.devicepolicy.DevicePolicyEnums;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
 
+import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.widget.PagerAdapter;
 import com.android.internal.widget.ViewPager;
@@ -51,6 +63,7 @@
     private Set<Integer> mLoadedPages;
     private final UserHandle mPersonalProfileUserHandle;
     private final UserHandle mWorkProfileUserHandle;
+    private Injector mInjector;
 
     AbstractMultiProfilePagerAdapter(Context context, int currentPage,
             UserHandle personalProfileUserHandle,
@@ -60,6 +73,33 @@
         mLoadedPages = new HashSet<>();
         mPersonalProfileUserHandle = personalProfileUserHandle;
         mWorkProfileUserHandle = workProfileUserHandle;
+        UserManager userManager = context.getSystemService(UserManager.class);
+        mInjector = new Injector() {
+            @Override
+            public boolean hasCrossProfileIntents(List<Intent> intents, int sourceUserId,
+                    int targetUserId) {
+                return AbstractMultiProfilePagerAdapter.this
+                        .hasCrossProfileIntents(intents, sourceUserId, targetUserId);
+            }
+
+            @Override
+            public boolean isQuietModeEnabled(UserHandle workProfileUserHandle) {
+                return userManager.isQuietModeEnabled(workProfileUserHandle);
+            }
+
+            @Override
+            public void requestQuietModeEnabled(boolean enabled, UserHandle workProfileUserHandle) {
+                userManager.requestQuietModeEnabled(enabled, workProfileUserHandle);
+            }
+        };
+    }
+
+    /**
+     * Overrides the default {@link Injector} for testing purposes.
+     */
+    @VisibleForTesting
+    public void setInjector(Injector injector) {
+        mInjector = injector;
     }
 
     void setOnProfileSelectedListener(OnProfileSelectedListener listener) {
@@ -213,26 +253,143 @@
 
     abstract @Nullable ViewGroup getInactiveAdapterView();
 
-    boolean rebuildActiveTab(boolean post) {
-        return rebuildTab(getActiveListAdapter(), post);
+    abstract String getMetricsCategory();
+
+    /**
+     * Rebuilds the tab that is currently visible to the user.
+     * <p>Returns {@code true} if rebuild has completed.
+     */
+    boolean rebuildActiveTab(boolean doPostProcessing) {
+        return rebuildTab(getActiveListAdapter(), doPostProcessing);
     }
 
-    boolean rebuildInactiveTab(boolean post) {
+    /**
+     * Rebuilds the tab that is not currently visible to the user, if such one exists.
+     * <p>Returns {@code true} if rebuild has completed.
+     */
+    boolean rebuildInactiveTab(boolean doPostProcessing) {
         if (getItemCount() == 1) {
             return false;
         }
-        return rebuildTab(getInactiveListAdapter(), post);
+        return rebuildTab(getInactiveListAdapter(), doPostProcessing);
+    }
+
+    private int userHandleToPageIndex(UserHandle userHandle) {
+        if (userHandle == getPersonalListAdapter().mResolverListController.getUserHandle()) {
+            return PROFILE_PERSONAL;
+        } else {
+            return PROFILE_WORK;
+        }
     }
 
     private boolean rebuildTab(ResolverListAdapter activeListAdapter, boolean doPostProcessing) {
         UserHandle listUserHandle = activeListAdapter.getUserHandle();
-        if (UserHandle.myUserId() != listUserHandle.getIdentifier() &&
-                !hasAppsInOtherProfile(activeListAdapter)) {
-            // TODO(arangelov): Show empty state UX here
+        if (listUserHandle == mWorkProfileUserHandle
+                && mInjector.isQuietModeEnabled(mWorkProfileUserHandle)) {
+            DevicePolicyEventLogger
+                    .createEvent(DevicePolicyEnums.RESOLVER_EMPTY_STATE_WORK_APPS_DISABLED)
+                    .setStrings(getMetricsCategory())
+                    .write();
+            showEmptyState(activeListAdapter,
+                    R.drawable.ic_work_apps_off,
+                    R.string.resolver_turn_on_work_apps,
+                    R.string.resolver_turn_on_work_apps_explanation,
+                    (View.OnClickListener) v ->
+                            mInjector.requestQuietModeEnabled(false, mWorkProfileUserHandle));
             return false;
-        } else {
-            return activeListAdapter.rebuildList(doPostProcessing);
         }
+        if (UserHandle.myUserId() != listUserHandle.getIdentifier()) {
+            if (!mInjector.hasCrossProfileIntents(activeListAdapter.getIntents(),
+                    UserHandle.myUserId(), listUserHandle.getIdentifier())) {
+                if (listUserHandle == mPersonalProfileUserHandle) {
+                    DevicePolicyEventLogger.createEvent(
+                                DevicePolicyEnums.RESOLVER_EMPTY_STATE_NO_SHARING_TO_PERSONAL)
+                            .setStrings(getMetricsCategory())
+                            .write();
+                    showEmptyState(activeListAdapter,
+                            R.drawable.ic_sharing_disabled,
+                            R.string.resolver_cant_share_with_personal_apps,
+                            R.string.resolver_cant_share_cross_profile_explanation);
+                } else {
+                    DevicePolicyEventLogger.createEvent(
+                            DevicePolicyEnums.RESOLVER_EMPTY_STATE_NO_SHARING_TO_WORK)
+                            .setStrings(getMetricsCategory())
+                            .write();
+                    showEmptyState(activeListAdapter,
+                            R.drawable.ic_sharing_disabled,
+                            R.string.resolver_cant_share_with_work_apps,
+                            R.string.resolver_cant_share_cross_profile_explanation);
+                }
+                return false;
+            }
+        }
+        showListView(activeListAdapter);
+        return activeListAdapter.rebuildList(doPostProcessing);
+    }
+
+    void showEmptyState(ResolverListAdapter listAdapter) {
+        UserHandle listUserHandle = listAdapter.getUserHandle();
+        if (UserHandle.myUserId() == listUserHandle.getIdentifier()
+                || !hasAppsInOtherProfile(listAdapter)) {
+            if (mWorkProfileUserHandle != null) {
+                DevicePolicyEventLogger.createEvent(
+                        DevicePolicyEnums.RESOLVER_EMPTY_STATE_NO_APPS_RESOLVED)
+                        .setStrings(getMetricsCategory())
+                        .write();
+            }
+            showEmptyState(listAdapter,
+                    R.drawable.ic_no_apps,
+                    R.string.resolver_no_apps_available,
+                    R.string.resolver_no_apps_available_explanation);
+        }
+    }
+
+    private void showEmptyState(ResolverListAdapter activeListAdapter,
+            @DrawableRes int iconRes, @StringRes int titleRes, @StringRes int subtitleRes) {
+        showEmptyState(activeListAdapter, iconRes, titleRes, subtitleRes, /* buttonOnClick */ null);
+    }
+
+    private void showEmptyState(ResolverListAdapter activeListAdapter,
+            @DrawableRes int iconRes, @StringRes int titleRes, @StringRes int subtitleRes,
+            View.OnClickListener buttonOnClick) {
+        ProfileDescriptor descriptor = getItem(
+                userHandleToPageIndex(activeListAdapter.getUserHandle()));
+        descriptor.rootView.findViewById(R.id.resolver_list).setVisibility(View.GONE);
+        View emptyStateView = descriptor.rootView.findViewById(R.id.resolver_empty_state);
+        emptyStateView.setVisibility(View.VISIBLE);
+
+        ImageView icon = emptyStateView.findViewById(R.id.resolver_empty_state_icon);
+        icon.setImageResource(iconRes);
+
+        TextView title = emptyStateView.findViewById(R.id.resolver_empty_state_title);
+        title.setText(titleRes);
+
+        TextView subtitle = emptyStateView.findViewById(R.id.resolver_empty_state_subtitle);
+        subtitle.setText(subtitleRes);
+
+        Button button = emptyStateView.findViewById(R.id.resolver_empty_state_button);
+        button.setVisibility(buttonOnClick != null ? View.VISIBLE : View.GONE);
+        button.setOnClickListener(buttonOnClick);
+    }
+
+    private void showListView(ResolverListAdapter activeListAdapter) {
+        ProfileDescriptor descriptor = getItem(
+                userHandleToPageIndex(activeListAdapter.getUserHandle()));
+        descriptor.rootView.findViewById(R.id.resolver_list).setVisibility(View.VISIBLE);
+        View emptyStateView = descriptor.rootView.findViewById(R.id.resolver_empty_state);
+        emptyStateView.setVisibility(View.GONE);
+    }
+
+    private boolean hasCrossProfileIntents(List<Intent> intents, int source, int target) {
+        IPackageManager packageManager = AppGlobals.getPackageManager();
+        ContentResolver contentResolver = mContext.getContentResolver();
+        for (Intent intent : intents) {
+            if (IntentForwarderActivity.canForward(intent, source, target, packageManager,
+                    contentResolver) != null) {
+                return true;
+            }
+        }
+        return false;
     }
 
     private boolean hasAppsInOtherProfile(ResolverListAdapter adapter) {
@@ -267,4 +424,26 @@
          */
         void onProfileSelected(int profileIndex);
     }
+
+    /**
+     * Describes an injector to be used for cross profile functionality. Overridable for testing.
+     */
+    @VisibleForTesting
+    public interface Injector {
+        /**
+         * Returns {@code true} if at least one of the provided {@code intents} can be forwarded
+         * from {@code sourceUserId} to {@code targetUserId}.
+         */
+        boolean hasCrossProfileIntents(List<Intent> intents, int sourceUserId, int targetUserId);
+
+        /**
+         * Returns whether the given profile is in quiet mode or not.
+         */
+        boolean isQuietModeEnabled(UserHandle workProfileUserHandle);
+
+        /**
+         * Enables or disables quiet mode for a managed profile.
+         */
+        void requestQuietModeEnabled(boolean enabled, UserHandle workProfileUserHandle);
+    }
 }
\ No newline at end of file
diff --git a/core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java b/core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java
index 82eb55a..86d2ed6 100644
--- a/core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java
+++ b/core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java
@@ -30,10 +30,12 @@
 import static com.android.internal.util.Preconditions.checkArgument;
 
 import android.accessibilityservice.AccessibilityServiceInfo;
+import android.accessibilityservice.AccessibilityShortcutInfo;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.Activity;
+import android.app.ActivityManager;
 import android.app.AlertDialog;
 import android.content.ComponentName;
 import android.content.Context;
@@ -265,6 +267,7 @@
             @ShortcutType int shortcutType) {
         final List<AccessibilityButtonTarget> targets = new ArrayList<>();
         targets.addAll(getAccessibilityServiceTargets(context));
+        targets.addAll(getAccessibilityActivityTargets(context));
         targets.addAll(getWhiteListingServiceTargets(context));
 
         final AccessibilityManager ams = context.getSystemService(AccessibilityManager.class);
@@ -291,6 +294,24 @@
         return targets;
     }
 
+    private static List<AccessibilityButtonTarget> getAccessibilityActivityTargets(
+            @NonNull Context context) {
+        final AccessibilityManager ams = context.getSystemService(AccessibilityManager.class);
+        final List<AccessibilityShortcutInfo> installedServices =
+                ams.getInstalledAccessibilityShortcutListAsUser(context,
+                        ActivityManager.getCurrentUser());
+        if (installedServices == null) {
+            return Collections.emptyList();
+        }
+
+        final List<AccessibilityButtonTarget> targets = new ArrayList<>(installedServices.size());
+        for (AccessibilityShortcutInfo info : installedServices) {
+            targets.add(new AccessibilityButtonTarget(context, info));
+        }
+
+        return targets;
+    }
+
     private static List<AccessibilityButtonTarget> getWhiteListingServiceTargets(
             @NonNull Context context) {
         final List<AccessibilityButtonTarget> targets = new ArrayList<>();
@@ -471,6 +492,7 @@
             holder.mSwitchItem.setVisibility(View.GONE);
             holder.mItemContainer.setVisibility(isLaunchMenuMode ? View.GONE : View.VISIBLE);
             holder.mItemView.setEnabled(enabledState);
+            holder.mItemView.setClickable(!enabledState);
         }
 
         private void updateInvisibleActionItemVisibility(@NonNull Context context,
@@ -485,6 +507,7 @@
             holder.mItemContainer.setVisibility((mShortcutMenuMode == ShortcutMenuMode.EDIT)
                     ? View.VISIBLE : View.GONE);
             holder.mItemView.setEnabled(true);
+            holder.mItemView.setClickable(false);
         }
 
         private void updateIntuitiveActionItemVisibility(@NonNull Context context,
@@ -504,6 +527,7 @@
             holder.mSwitchItem.setChecked(!isEditMenuMode && isServiceEnabled);
             holder.mItemContainer.setVisibility(View.VISIBLE);
             holder.mItemView.setEnabled(true);
+            holder.mItemView.setClickable(false);
         }
 
         private void updateBounceActionItemVisibility(@NonNull Context context,
@@ -518,6 +542,7 @@
             holder.mSwitchItem.setVisibility(View.GONE);
             holder.mItemContainer.setVisibility(View.VISIBLE);
             holder.mItemView.setEnabled(true);
+            holder.mItemView.setClickable(false);
         }
     }
 
@@ -536,6 +561,14 @@
             this.mFragmentType = getAccessibilityServiceFragmentType(serviceInfo);
         }
 
+        AccessibilityButtonTarget(@NonNull Context context,
+                @NonNull AccessibilityShortcutInfo shortcutInfo) {
+            this.mId = shortcutInfo.getComponentName().flattenToString();
+            this.mLabel = shortcutInfo.getActivityInfo().loadLabel(context.getPackageManager());
+            this.mDrawable = shortcutInfo.getActivityInfo().loadIcon(context.getPackageManager());
+            this.mFragmentType = AccessibilityServiceFragmentType.BOUNCE;
+        }
+
         AccessibilityButtonTarget(Context context, @NonNull String id, int labelResId,
                 int iconRes, @AccessibilityServiceFragmentType int fragmentType) {
             this.mId = id;
@@ -590,7 +623,7 @@
                 onIntuitiveTargetSelected(target);
                 break;
             case AccessibilityServiceFragmentType.BOUNCE:
-                // Do nothing
+                onBounceTargetSelected(target);
                 break;
             default:
                 throw new IllegalStateException("Unexpected fragment type");
@@ -621,6 +654,15 @@
         switchServiceState(target);
     }
 
+    private void onBounceTargetSelected(AccessibilityButtonTarget target) {
+        final AccessibilityManager ams = getSystemService(AccessibilityManager.class);
+        if (mShortcutType == ACCESSIBILITY_BUTTON) {
+            ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId());
+        } else if (mShortcutType == ACCESSIBILITY_SHORTCUT_KEY) {
+            ams.performAccessibilityShortcut(target.getId());
+        }
+    }
+
     private void switchServiceState(AccessibilityButtonTarget target) {
         final ComponentName componentName =
                 ComponentName.unflattenFromString(target.getId());
@@ -652,7 +694,7 @@
                 onIntuitiveTargetDeleted(position, componentId);
                 break;
             case AccessibilityServiceFragmentType.BOUNCE:
-                // Do nothing
+                onBounceTargetDeleted(position, componentId);
                 break;
             default:
                 throw new IllegalStateException("Unexpected fragment type");
@@ -690,6 +732,12 @@
         mTargetAdapter.notifyDataSetChanged();
     }
 
+    private void onBounceTargetDeleted(int position, String componentId) {
+        optOutValueFromSettings(this, mShortcutUserType, componentId);
+        mTargets.remove(position);
+        mTargetAdapter.notifyDataSetChanged();
+    }
+
     private void onCancelButtonClicked() {
         mTargetAdapter.setShortcutMenuMode(ShortcutMenuMode.LAUNCH);
         mTargetAdapter.notifyDataSetChanged();
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index 65cad83..a201a33 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -373,7 +373,11 @@
                 Log.i(TAG, "Hiding image preview area. Timed out waiting for preview to load"
                         + " within " + mImageLoadTimeoutMillis + "ms.");
                 collapseParentView();
-                hideContentPreview();
+                if (shouldShowTabs()) {
+                    hideStickyContentPreview();
+                } else if (mChooserMultiProfilePagerAdapter.getCurrentRootAdapter() != null) {
+                    mChooserMultiProfilePagerAdapter.getCurrentRootAdapter().hideContentPreview();
+                }
                 mHideParentOnFail = false;
             }
         }
@@ -769,7 +773,7 @@
             Intent[] initialIntents,
             List<ResolveInfo> rList,
             boolean filterLastUsed) {
-        if (hasWorkProfile() && ENABLE_TABBED_VIEW) {
+        if (shouldShowTabs()) {
             mChooserMultiProfilePagerAdapter = createChooserMultiProfilePagerAdapterForTwoProfiles(
                     initialIntents, rList, filterLastUsed);
         } else {
@@ -829,7 +833,12 @@
 
     @Override
     protected boolean postRebuildList(boolean rebuildCompleted) {
-        updateContentPreview();
+        updateStickyContentPreview();
+        if (shouldShowStickyContentPreview()
+                || mChooserMultiProfilePagerAdapter
+                        .getCurrentRootAdapter().getContentPreviewRowCount() != 0) {
+            logActionShareWithPreview();
+        }
         return postRebuildListInternal(rebuildCompleted);
     }
 
@@ -978,6 +987,8 @@
         updateLayoutWidth(R.id.content_preview_text_layout, width, parent);
         updateLayoutWidth(R.id.content_preview_title_layout, width, parent);
         updateLayoutWidth(R.id.content_preview_file_layout, width, parent);
+        findViewById(R.id.content_preview_container)
+                .setVisibility(shouldShowStickyContentPreview() ? View.VISIBLE : View.GONE);
     }
 
     private void updateLayoutWidth(int layoutResourceId, int width, View parent) {
@@ -1465,7 +1476,6 @@
 
     @Override
     public void addUseDifferentAppLabelIfNecessary(ResolverListAdapter adapter) {
-        mChooserMultiProfilePagerAdapter.getActiveAdapterView().setVisibility(View.VISIBLE);
         if (mCallerChooserTargets != null && mCallerChooserTargets.length > 0) {
             mChooserMultiProfilePagerAdapter.getActiveListAdapter().addServiceResults(
                     /* origTarget */ null,
@@ -2413,18 +2423,18 @@
 
                 // still zero? then use a default height and leave, which
                 // can happen when there are no targets to show
-                if (rowsToShow == 0 && !shouldShowContentPreview()) {
+                if (rowsToShow == 0 && !shouldShowStickyContentPreview()) {
                     offset += getResources().getDimensionPixelSize(
                             R.dimen.chooser_max_collapsed_height);
                     mResolverDrawerLayout.setCollapsibleHeightReserved(offset);
                     return;
                 }
 
-                if (shouldShowContentPreview()) {
+                if (shouldShowStickyContentPreview()) {
                     offset += findViewById(R.id.content_preview_container).getHeight();
                 }
 
-                if (hasWorkProfile() && ENABLE_TABBED_VIEW) {
+                if (shouldShowTabs()) {
                     offset += findViewById(R.id.tabs).getHeight();
                 }
 
@@ -2552,7 +2562,7 @@
     }
 
     private void setupScrollListener() {
-        if (mResolverDrawerLayout == null) {
+        if (mResolverDrawerLayout == null || shouldShowTabs()) {
             return;
         }
         final View chooserHeader = mResolverDrawerLayout.findViewById(R.id.chooser_header);
@@ -2597,28 +2607,35 @@
         return false;
     }
 
-    private boolean shouldShowContentPreview() {
-        return mMultiProfilePagerAdapter.getActiveListAdapter().getCount() > 0
-                && isSendAction(getTargetIntent());
+    /**
+     * The sticky content preview is shown only when we have a tabbed view. It's shown above
+     * the tabs so it is not part of the scrollable list. If we are not in tabbed view,
+     * we instead show the content preview as a regular list item.
+     */
+    private boolean shouldShowStickyContentPreview() {
+        return shouldShowTabs()
+                && mMultiProfilePagerAdapter.getListAdapterForUserHandle(
+                        UserHandle.of(UserHandle.myUserId())).getCount() > 0
+                && isSendAction(getTargetIntent())
+                && getResources().getBoolean(R.bool.sharesheet_show_content_preview);
     }
 
-    private void updateContentPreview() {
-        if (shouldShowContentPreview()) {
-            showContentPreview();
+    private void updateStickyContentPreview() {
+        if (shouldShowStickyContentPreview()) {
+            showStickyContentPreview();
         } else {
-            hideContentPreview();
+            hideStickyContentPreview();
         }
     }
 
-    private void showContentPreview() {
+    private void showStickyContentPreview() {
         ViewGroup contentPreviewContainer = findViewById(R.id.content_preview_container);
         contentPreviewContainer.setVisibility(View.VISIBLE);
         ViewGroup contentPreviewView = createContentPreviewView(contentPreviewContainer);
         contentPreviewContainer.addView(contentPreviewView);
-        logActionShareWithPreview();
     }
 
-    private void hideContentPreview() {
+    private void hideStickyContentPreview() {
         ViewGroup contentPreviewContainer = findViewById(R.id.content_preview_container);
         contentPreviewContainer.removeAllViews();
         contentPreviewContainer.setVisibility(View.GONE);
@@ -2634,6 +2651,7 @@
     /**
      * Used to bind types of individual item including
      * {@link ChooserGridAdapter#VIEW_TYPE_NORMAL},
+     * {@link ChooserGridAdapter#VIEW_TYPE_CONTENT_PREVIEW},
      * {@link ChooserGridAdapter#VIEW_TYPE_PROFILE},
      * and {@link ChooserGridAdapter#VIEW_TYPE_AZ_LABEL}.
      */
@@ -2680,6 +2698,11 @@
     @Override
     protected void resetButtonBar() {}
 
+    @Override
+    protected String getMetricsCategory() {
+        return METRICS_CATEGORY_CHOOSER;
+    }
+
     /**
      * Adapter for all types of items and targets in ShareSheet.
      * Note that ranked sections like Direct Share - while appearing grid-like - are handled on the
@@ -2695,16 +2718,18 @@
         private int mChooserTargetWidth = 0;
         private boolean mShowAzLabelIfPoss;
 
+        private boolean mHideContentPreview = false;
         private boolean mLayoutRequested = false;
 
         private int mFooterHeight = 0;
 
         private static final int VIEW_TYPE_DIRECT_SHARE = 0;
         private static final int VIEW_TYPE_NORMAL = 1;
-        private static final int VIEW_TYPE_PROFILE = 2;
-        private static final int VIEW_TYPE_AZ_LABEL = 3;
-        private static final int VIEW_TYPE_CALLER_AND_RANK = 4;
-        private static final int VIEW_TYPE_FOOTER = 5;
+        private static final int VIEW_TYPE_CONTENT_PREVIEW = 2;
+        private static final int VIEW_TYPE_PROFILE = 3;
+        private static final int VIEW_TYPE_AZ_LABEL = 4;
+        private static final int VIEW_TYPE_CALLER_AND_RANK = 5;
+        private static final int VIEW_TYPE_FOOTER = 6;
 
         private static final int MAX_TARGETS_PER_ROW_PORTRAIT = 4;
         private static final int MAX_TARGETS_PER_ROW_LANDSCAPE = 8;
@@ -2765,6 +2790,17 @@
             return maxTargets;
         }
 
+        /**
+         * Hides the list item content preview.
+         * <p>Not to be confused with the sticky content preview which is above the
+         * personal and work tabs.
+         */
+        public void hideContentPreview() {
+            mHideContentPreview = true;
+            mLayoutRequested = true;
+            notifyDataSetChanged();
+        }
+
         public boolean consumeLayoutRequest() {
             boolean oldValue = mLayoutRequested;
             mLayoutRequested = false;
@@ -2773,7 +2809,8 @@
 
         public int getRowCount() {
             return (int) (
-                    getProfileRowCount()
+                    getContentPreviewRowCount()
+                            + getProfileRowCount()
                             + getServiceTargetRowCount()
                             + getCallerAndRankedTargetRowCount()
                             + getAzLabelRowCount()
@@ -2783,7 +2820,33 @@
             );
         }
 
+        /**
+         * Returns either {@code 0} or {@code 1} depending on whether we want to show the list item
+         * content preview. Not to be confused with the sticky content preview which is above the
+         * personal and work tabs.
+         */
+        public int getContentPreviewRowCount() {
+            // For the tabbed case we show the sticky content preview above the tabs,
+            // please refer to shouldShowStickyContentPreview
+            if (shouldShowTabs()) {
+                return 0;
+            }
+            if (!isSendAction(getTargetIntent())) {
+                return 0;
+            }
+
+            if (mHideContentPreview || mChooserListAdapter == null
+                    || mChooserListAdapter.getCount() == 0) {
+                return 0;
+            }
+
+            return 1;
+        }
+
         public int getProfileRowCount() {
+            if (shouldShowTabs()) {
+                return 0;
+            }
             return mChooserListAdapter.getOtherProfile() == null ? 0 : 1;
         }
 
@@ -2815,7 +2878,8 @@
         @Override
         public int getItemCount() {
             return (int) (
-                    getProfileRowCount()
+                    getContentPreviewRowCount()
+                            + getProfileRowCount()
                             + getServiceTargetRowCount()
                             + getCallerAndRankedTargetRowCount()
                             + getAzLabelRowCount()
@@ -2827,6 +2891,8 @@
         @Override
         public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
             switch (viewType) {
+                case VIEW_TYPE_CONTENT_PREVIEW:
+                    return new ItemViewHolder(createContentPreviewView(parent), false);
                 case VIEW_TYPE_PROFILE:
                     return new ItemViewHolder(createProfileView(parent), false);
                 case VIEW_TYPE_AZ_LABEL:
@@ -2866,7 +2932,10 @@
         public int getItemViewType(int position) {
             int count;
 
-            int countSum = (count = getProfileRowCount());
+            int countSum = (count = getContentPreviewRowCount());
+            if (count > 0 && position < countSum) return VIEW_TYPE_CONTENT_PREVIEW;
+
+            countSum += (count = getProfileRowCount());
             if (count > 0 && position < countSum) return VIEW_TYPE_PROFILE;
 
             countSum += (count = getServiceTargetRowCount());
@@ -3031,7 +3100,7 @@
             final ViewGroup viewGroup = (ViewGroup) holder.itemView;
             int start = getListPosition(position);
             int startType = getRowType(start);
-            if (viewGroup.getForeground() == null) {
+            if (viewGroup.getForeground() == null && position > 0) {
                 viewGroup.setForeground(
                         getResources().getDrawable(R.drawable.chooser_row_layer_list, null));
             }
@@ -3082,7 +3151,7 @@
         }
 
         int getListPosition(int position) {
-            position -= getProfileRowCount();
+            position -= getContentPreviewRowCount() + getProfileRowCount();
 
             final int serviceCount = mChooserListAdapter.getServiceTargetCount();
             final int serviceRows = (int) Math.ceil((float) serviceCount
diff --git a/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java
index e350142..d440402 100644
--- a/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java
+++ b/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java
@@ -165,6 +165,11 @@
         return getListViewForIndex(1 - getCurrentPage());
     }
 
+    @Override
+    String getMetricsCategory() {
+        return ResolverActivity.METRICS_CATEGORY_CHOOSER;
+    }
+
     class ChooserProfileDescriptor extends ProfileDescriptor {
         private ChooserActivity.ChooserGridAdapter chooserGridAdapter;
         private RecyclerView recyclerView;
diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl
index dabaf5a..1c1c254 100644
--- a/core/java/com/android/internal/app/IAppOpsService.aidl
+++ b/core/java/com/android/internal/app/IAppOpsService.aidl
@@ -18,6 +18,8 @@
 
 import android.app.AppOpsManager;
 import android.app.AsyncNotedAppOp;
+import android.app.SyncNotedAppOp;
+import android.app.RuntimeAppOpAccessMessage;
 import android.content.pm.ParceledListSlice;
 import android.os.Bundle;
 import android.os.RemoteCallback;
@@ -25,6 +27,7 @@
 import com.android.internal.app.IAppOpsActiveCallback;
 import com.android.internal.app.IAppOpsAsyncNotedCallback;
 import com.android.internal.app.IAppOpsNotedCallback;
+import com.android.internal.app.MessageSamplingConfig;
 
 interface IAppOpsService {
     // These methods are also called by native code, so must
@@ -54,6 +57,9 @@
 
     // Remaining methods are only used in Java.
     int checkPackage(int uid, String packageName);
+    RuntimeAppOpAccessMessage collectRuntimeAppOpAccessMessage();
+    MessageSamplingConfig reportRuntimeAppOpAccessMessageAndGetConfig(String packageName,
+            in SyncNotedAppOp appOp, String message);
     @UnsupportedAppUsage
     List<AppOpsManager.PackageOps> getPackagesForOps(in int[] ops);
     @UnsupportedAppUsage
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 2f1a15f..dc6942c 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -133,7 +133,7 @@
     void noteNetworkStatsEnabled();
     void noteDeviceIdleMode(int mode, String activeReason, int activeUid);
     void setBatteryState(int status, int health, int plugType, int level, int temp, int volt,
-            int chargeUAh, int chargeFullUAh);
+            int chargeUAh, int chargeFullUAh, long chargeTimeToFullSeconds);
     @UnsupportedAppUsage
     long getAwakeTimeBattery();
     long getAwakeTimePlugged();
diff --git a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
index f3b6d29..417e23f 100644
--- a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
+++ b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
@@ -38,8 +38,10 @@
             IVoiceInteractor interactor);
     boolean showSessionFromSession(IBinder token, in Bundle sessionArgs, int flags);
     boolean hideSessionFromSession(IBinder token);
-    int startVoiceActivity(IBinder token, in Intent intent, String resolvedType);
-    int startAssistantActivity(IBinder token, in Intent intent, String resolvedType);
+    int startVoiceActivity(IBinder token, in Intent intent, String resolvedType,
+            String callingFeatureId);
+    int startAssistantActivity(IBinder token, in Intent intent, String resolvedType,
+            String callingFeatureId);
     void setKeepAwake(IBinder token, boolean keepAwake);
     void closeSystemDialogs(IBinder token);
     void finish(IBinder token);
diff --git a/core/java/com/android/internal/app/IntentForwarderActivity.java b/core/java/com/android/internal/app/IntentForwarderActivity.java
index 9488e4f..7a0afa2 100644
--- a/core/java/com/android/internal/app/IntentForwarderActivity.java
+++ b/core/java/com/android/internal/app/IntentForwarderActivity.java
@@ -26,6 +26,7 @@
 import android.app.AppGlobals;
 import android.app.admin.DevicePolicyManager;
 import android.compat.annotation.UnsupportedAppUsage;
+import android.content.ContentResolver;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.IPackageManager;
@@ -108,7 +109,8 @@
         }
 
         final int callingUserId = getUserId();
-        final Intent newIntent = canForward(intentReceived, targetUserId);
+        final Intent newIntent = canForward(intentReceived, getUserId(), targetUserId,
+                mInjector.getIPackageManager(), getContentResolver());
         if (newIntent != null) {
             if (Intent.ACTION_CHOOSER.equals(newIntent.getAction())) {
                 Intent innerIntent = newIntent.getParcelableExtra(Intent.EXTRA_INTENT);
@@ -191,7 +193,8 @@
      * Check whether the intent can be forwarded to target user. Return the intent used for
      * forwarding if it can be forwarded, {@code null} otherwise.
      */
-    Intent canForward(Intent incomingIntent, int targetUserId)  {
+    static Intent canForward(Intent incomingIntent, int sourceUserId, int targetUserId,
+            IPackageManager packageManager, ContentResolver contentResolver)  {
         Intent forwardIntent = new Intent(incomingIntent);
         forwardIntent.addFlags(
                 Intent.FLAG_ACTIVITY_FORWARD_RESULT | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
@@ -220,11 +223,11 @@
         if (forwardIntent.getSelector() != null) {
             intentToCheck = forwardIntent.getSelector();
         }
-        String resolvedType = intentToCheck.resolveTypeIfNeeded(getContentResolver());
+        String resolvedType = intentToCheck.resolveTypeIfNeeded(contentResolver);
         sanitizeIntent(intentToCheck);
         try {
-            if (mInjector.getIPackageManager().
-                    canForwardTo(intentToCheck, resolvedType, getUserId(), targetUserId)) {
+            if (packageManager.canForwardTo(
+                    intentToCheck, resolvedType, sourceUserId, targetUserId)) {
                 return forwardIntent;
             }
         } catch (RemoteException e) {
@@ -267,7 +270,7 @@
     /**
      * Sanitize the intent in place.
      */
-    private void sanitizeIntent(Intent intent) {
+    private static void sanitizeIntent(Intent intent) {
         // Apps should not be allowed to target a specific package/ component in the target user.
         intent.setPackage(null);
         intent.setComponent(null);
diff --git a/core/java/com/android/internal/app/MessageSamplingConfig.aidl b/core/java/com/android/internal/app/MessageSamplingConfig.aidl
new file mode 100644
index 0000000..ab89ca2
--- /dev/null
+++ b/core/java/com/android/internal/app/MessageSamplingConfig.aidl
@@ -0,0 +1,19 @@
+/*
+ * 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.internal.app;
+
+parcelable MessageSamplingConfig;
diff --git a/core/java/com/android/internal/app/MessageSamplingConfig.java b/core/java/com/android/internal/app/MessageSamplingConfig.java
new file mode 100644
index 0000000..5300c1c
--- /dev/null
+++ b/core/java/com/android/internal/app/MessageSamplingConfig.java
@@ -0,0 +1,187 @@
+/*
+ * 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.internal.app;
+
+import android.annotation.IntRange;
+import android.annotation.NonNull;
+import android.app.AppOpsManager;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.annotations.Immutable;
+import com.android.internal.util.DataClass;
+
+/**
+ * Configuration for AppOps access messages sampling.
+ */
+@Immutable
+/*@DataClass*/
+public final class MessageSamplingConfig implements Parcelable {
+    /** Op code targeted during current sampling session */
+    private final @IntRange(from = -1L, to = AppOpsManager._NUM_OP - 1) int mSampledOpCode;
+    /** Range of ops which should be reported during current sampling session */
+    private final @IntRange(from = 0L, to = AppOpsManager._NUM_OP - 1) int mAcceptableLeftDistance;
+    /** Expiration time for this sampling config */
+    private final @IntRange(from = 0L) long mExpirationTimeSinceBootMillis;
+
+
+
+
+
+
+
+    // Code below generated by codegen v1.0.14.
+    //
+    // DO NOT MODIFY!
+    // CHECKSTYLE:OFF Generated code
+    //
+    // To regenerate run:
+    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/com/android/internal/app/MessageSamplingConfig.java
+    //
+    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+    //   Settings > Editor > Code Style > Formatter Control
+    //@formatter:off
+
+
+    /**
+     * Creates a new MessageSamplingConfig.
+     *
+     * @param sampledOpCode
+     *   Op code targeted during current sampling session
+     * @param acceptableLeftDistance
+     *   Range of ops which should be reported during current sampling session
+     * @param expirationTimeSinceBootMillis
+     *   Expiration time for this sampling config
+     */
+    @DataClass.Generated.Member
+    public MessageSamplingConfig(
+            @IntRange(from = -1L, to = AppOpsManager._NUM_OP - 1) int sampledOpCode,
+            @IntRange(from = 0L, to = AppOpsManager._NUM_OP - 1) int acceptableLeftDistance,
+            @IntRange(from = 0L) long expirationTimeSinceBootMillis) {
+        this.mSampledOpCode = sampledOpCode;
+        com.android.internal.util.AnnotationValidations.validate(
+                IntRange.class, null, mSampledOpCode,
+                "from", -1L,
+                "to", AppOpsManager._NUM_OP - 1);
+        this.mAcceptableLeftDistance = acceptableLeftDistance;
+        com.android.internal.util.AnnotationValidations.validate(
+                IntRange.class, null, mAcceptableLeftDistance,
+                "from", 0L,
+                "to", AppOpsManager._NUM_OP - 1);
+        this.mExpirationTimeSinceBootMillis = expirationTimeSinceBootMillis;
+        com.android.internal.util.AnnotationValidations.validate(
+                IntRange.class, null, mExpirationTimeSinceBootMillis,
+                "from", 0L);
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    /**
+     * Op code targeted during current sampling session
+     */
+    @DataClass.Generated.Member
+    public @IntRange(from = -1L, to = AppOpsManager._NUM_OP - 1) int getSampledOpCode() {
+        return mSampledOpCode;
+    }
+
+    /**
+     * Range of ops which should be reported during current sampling session
+     */
+    @DataClass.Generated.Member
+    public @IntRange(from = 0L, to = AppOpsManager._NUM_OP - 1) int getAcceptableLeftDistance() {
+        return mAcceptableLeftDistance;
+    }
+
+    /**
+     * Expiration time for this sampling config
+     */
+    @DataClass.Generated.Member
+    public @IntRange(from = 0L) long getExpirationTimeSinceBootMillis() {
+        return mExpirationTimeSinceBootMillis;
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        // You can override field parcelling by defining methods like:
+        // void parcelFieldName(Parcel dest, int flags) { ... }
+
+        dest.writeInt(mSampledOpCode);
+        dest.writeInt(mAcceptableLeftDistance);
+        dest.writeLong(mExpirationTimeSinceBootMillis);
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public int describeContents() { return 0; }
+
+    /** @hide */
+    @SuppressWarnings({"unchecked", "RedundantCast"})
+    @DataClass.Generated.Member
+    /* package-private */ MessageSamplingConfig(@NonNull Parcel in) {
+        // You can override field unparcelling by defining methods like:
+        // static FieldType unparcelFieldName(Parcel in) { ... }
+
+        int sampledOpCode = in.readInt();
+        int acceptableLeftDistance = in.readInt();
+        long expirationTimeSinceBootMillis = in.readLong();
+
+        this.mSampledOpCode = sampledOpCode;
+        com.android.internal.util.AnnotationValidations.validate(
+                IntRange.class, null, mSampledOpCode,
+                "from", -1L,
+                "to", AppOpsManager._NUM_OP - 1);
+        this.mAcceptableLeftDistance = acceptableLeftDistance;
+        com.android.internal.util.AnnotationValidations.validate(
+                IntRange.class, null, mAcceptableLeftDistance,
+                "from", 0L,
+                "to", AppOpsManager._NUM_OP - 1);
+        this.mExpirationTimeSinceBootMillis = expirationTimeSinceBootMillis;
+        com.android.internal.util.AnnotationValidations.validate(
+                IntRange.class, null, mExpirationTimeSinceBootMillis,
+                "from", 0L);
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    @DataClass.Generated.Member
+    public static final @NonNull Parcelable.Creator<MessageSamplingConfig> CREATOR
+            = new Parcelable.Creator<MessageSamplingConfig>() {
+        @Override
+        public MessageSamplingConfig[] newArray(int size) {
+            return new MessageSamplingConfig[size];
+        }
+
+        @Override
+        public MessageSamplingConfig createFromParcel(@NonNull Parcel in) {
+            return new MessageSamplingConfig(in);
+        }
+    };
+
+    /*@DataClass.Generated(
+            time = 1580691255495L,
+            codegenVersion = "1.0.14",
+            sourceFile = "frameworks/base/core/java/com/android/internal/app/MessageSamplingConfig.java",
+            inputSignatures = "private final @android.annotation.IntRange(from=-1L, to=AppOpsManager._NUM_OP - 1) int mSampledOpCode\nprivate final @android.annotation.IntRange(from=0L, to=AppOpsManager._NUM_OP - 1) int mAcceptableLeftDistance\nprivate final @android.annotation.IntRange(from=0L) long mExpirationTimeSinceBootMillis\nclass MessageSamplingConfig extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass")*/
+    @Deprecated
+    private void __metadata() {}
+
+
+    //@formatter:on
+    // End of generated code
+
+}
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index bbb7513..96bfe73 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -33,7 +33,9 @@
 import android.app.VoiceInteractor.PickOptionRequest;
 import android.app.VoiceInteractor.PickOptionRequest.Option;
 import android.app.VoiceInteractor.Prompt;
+import android.app.admin.DevicePolicyEventLogger;
 import android.compat.annotation.UnsupportedAppUsage;
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -59,6 +61,7 @@
 import android.os.UserManager;
 import android.provider.MediaStore;
 import android.provider.Settings;
+import android.stats.devicepolicy.DevicePolicyEnums;
 import android.text.TextUtils;
 import android.util.Log;
 import android.util.Slog;
@@ -83,6 +86,7 @@
 import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.AbstractMultiProfilePagerAdapter.Profile;
+import com.android.internal.app.chooser.ChooserTargetInfo;
 import com.android.internal.app.chooser.DisplayResolveInfo;
 import com.android.internal.app.chooser.TargetInfo;
 import com.android.internal.content.PackageMonitor;
@@ -98,6 +102,7 @@
 import java.util.Objects;
 import java.util.Set;
 
+
 /**
  * This activity is displayed when the system attempts to start an Intent for
  * which there is more than one matching activity, allowing the user to decide
@@ -151,6 +156,8 @@
     private static final String EXTRA_SHOW_FRAGMENT_ARGS = ":settings:show_fragment_args";
     private static final String EXTRA_FRAGMENT_ARG_KEY = ":settings:fragment_args_key";
     private static final String OPEN_LINKS_COMPONENT_KEY = "app_link_state";
+    protected static final String METRICS_CATEGORY_RESOLVER = "intent_resolver";
+    protected static final String METRICS_CATEGORY_CHOOSER = "intent_chooser";
 
     /**
      * TODO(arangelov): Remove a couple of weeks after work/personal tabs are finalized.
@@ -169,6 +176,8 @@
     // Intent extra for connected audio devices
     public static final String EXTRA_IS_AUDIO_CAPTURE_DEVICE = "is_audio_capture_device";
 
+    private BroadcastReceiver mWorkProfileStateReceiver;
+
     /**
      * Get the string resource to be used as a label for the link to the resolver activity for an
      * action.
@@ -359,7 +368,7 @@
                 mMultiProfilePagerAdapter.getPersonalListAdapter());
         mPersonalPackageMonitor.register(
                 this, getMainLooper(), getPersonalProfileUserHandle(), false);
-        if (hasWorkProfile() && ENABLE_TABBED_VIEW) {
+        if (shouldShowTabs()) {
             mWorkPackageMonitor = createPackageMonitor(
                     mMultiProfilePagerAdapter.getWorkListAdapter());
             mWorkPackageMonitor.register(this, getMainLooper(), getWorkProfileUserHandle(), false);
@@ -387,6 +396,13 @@
                     | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
             rdl.setOnApplyWindowInsetsListener(this::onApplyWindowInsets);
 
+            if (shouldShowTabs()) {
+                rdl.setMaxCollapsedHeight(getResources().getDimensionPixelSize(
+                        R.dimen.resolver_empty_state_height_with_tabs));
+                findViewById(R.id.profile_pager).setMinimumHeight(
+                        getResources().getDimensionPixelSize(R.dimen.resolver_empty_state_height));
+            }
+
             mResolverDrawerLayout = rdl;
         }
 
@@ -409,7 +425,7 @@
             List<ResolveInfo> rList,
             boolean filterLastUsed) {
         AbstractMultiProfilePagerAdapter resolverMultiProfilePagerAdapter = null;
-        if (hasWorkProfile() && ENABLE_TABBED_VIEW) {
+        if (shouldShowTabs()) {
             resolverMultiProfilePagerAdapter =
                     createResolverMultiProfilePagerAdapterForTwoProfiles(
                             initialIntents, rList, filterLastUsed);
@@ -490,10 +506,14 @@
         return null;
     }
 
-    protected boolean hasWorkProfile() {
+    private boolean hasWorkProfile() {
         return getWorkProfileUserHandle() != null;
     }
 
+    protected boolean shouldShowTabs() {
+        return hasWorkProfile() && ENABLE_TABBED_VIEW;
+    }
+
     protected void onProfileClick(View v) {
         final DisplayResolveInfo dri =
                 mMultiProfilePagerAdapter.getActiveListAdapter().getOtherProfile();
@@ -548,13 +568,6 @@
             applyFooterView(mSystemWindowInsets.bottom);
         }
 
-        View emptyView = findViewById(R.id.empty);
-        if (emptyView != null) {
-            emptyView.setPadding(0, 0, 0, mSystemWindowInsets.bottom
-                                 + getResources().getDimensionPixelSize(
-                                         R.dimen.chooser_edge_margin_normal) * 2);
-        }
-
         return insets.consumeSystemWindowInsets();
     }
 
@@ -725,7 +738,7 @@
         if (!mRegistered) {
             mPersonalPackageMonitor.register(this, getMainLooper(),
                     getPersonalProfileUserHandle(), false);
-            if (hasWorkProfile() && ENABLE_TABBED_VIEW) {
+            if (shouldShowTabs()) {
                 if (mWorkPackageMonitor == null) {
                     mWorkPackageMonitor = createPackageMonitor(
                             mMultiProfilePagerAdapter.getWorkListAdapter());
@@ -740,6 +753,22 @@
     }
 
     @Override
+    protected void onStart() {
+        super.onStart();
+        if (shouldShowTabs()) {
+            mWorkProfileStateReceiver = createWorkProfileStateReceiver();
+            registerWorkProfileStateReceiver();
+        }
+    }
+
+    private void registerWorkProfileStateReceiver() {
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
+        filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
+        registerReceiverAsUser(mWorkProfileStateReceiver, UserHandle.ALL, filter, null, null);
+    }
+
+    @Override
     protected void onStop() {
         super.onStop();
         if (mRegistered) {
@@ -763,6 +792,10 @@
                 finish();
             }
         }
+        if (mWorkPackageMonitor != null) {
+            unregisterReceiver(mWorkProfileStateReceiver);
+            mWorkPackageMonitor = null;
+        }
     }
 
     @Override
@@ -941,10 +974,13 @@
     }
 
     @Override // ResolverListCommunicator
-    public void onPostListReady(ResolverListAdapter listAdapter, boolean doPostProcessing) {
+    public final void onPostListReady(ResolverListAdapter listAdapter, boolean doPostProcessing) {
         if (isAutolaunching() || maybeAutolaunchActivity()) {
             return;
         }
+        if (shouldShowEmptyState(listAdapter)) {
+            mMultiProfilePagerAdapter.showEmptyState(listAdapter);
+        }
         if (doPostProcessing) {
             if (mMultiProfilePagerAdapter.getCurrentUserHandle().getIdentifier()
                     == UserHandle.myUserId()) {
@@ -1171,12 +1207,14 @@
         if (!mSafeForwardingMode) {
             if (cti.startAsUser(this, null, currentUserHandle)) {
                 onActivityStarted(cti);
+                maybeLogCrossProfileTargetLaunch(cti, currentUserHandle);
             }
             return;
         }
         try {
             if (cti.startAsCaller(this, null, currentUserHandle.getIdentifier())) {
                 onActivityStarted(cti);
+                maybeLogCrossProfileTargetLaunch(cti, currentUserHandle);
             }
         } catch (RuntimeException e) {
             String launchedFromPackage;
@@ -1192,6 +1230,18 @@
         }
     }
 
+    private void maybeLogCrossProfileTargetLaunch(TargetInfo cti, UserHandle currentUserHandle) {
+        if (!hasWorkProfile() || currentUserHandle == getUser()) {
+            return;
+        }
+        DevicePolicyEventLogger
+                .createEvent(DevicePolicyEnums.RESOLVER_CROSS_PROFILE_TARGET_OPENED)
+                .setBoolean(currentUserHandle == getPersonalProfileUserHandle())
+                .setStrings(getMetricsCategory(),
+                        cti instanceof ChooserTargetInfo ? "direct_share" : "other_target")
+                .write();
+    }
+
 
     public boolean startAsCallerImpl(Intent intent, Bundle options, boolean ignoreTargetSecurity,
             int userId) {
@@ -1277,10 +1327,12 @@
             throw new IllegalStateException("mMultiProfilePagerAdapter.getCurrentListAdapter() "
                     + "cannot be null.");
         }
-        boolean rebuildCompleted = mMultiProfilePagerAdapter.rebuildActiveTab(true);
-
         // We partially rebuild the inactive adapter to determine if we should auto launch
-        mMultiProfilePagerAdapter.rebuildInactiveTab(false);
+        boolean rebuildCompleted = mMultiProfilePagerAdapter.rebuildActiveTab(true);
+        if (hasWorkProfile() && ENABLE_TABBED_VIEW) {
+            boolean rebuildInactiveCompleted = mMultiProfilePagerAdapter.rebuildInactiveTab(false);
+            rebuildCompleted = rebuildCompleted && rebuildInactiveCompleted;
+        }
 
         if (useLayoutWithDefault()) {
             mLayoutId = R.layout.resolver_list_with_default;
@@ -1318,7 +1370,7 @@
 
         setupViewVisibilities();
 
-        if (hasWorkProfile() && ENABLE_TABBED_VIEW) {
+        if (shouldShowTabs()) {
             setupProfileTabs();
         }
 
@@ -1337,10 +1389,11 @@
         int numberOfProfiles = mMultiProfilePagerAdapter.getItemCount();
         if (numberOfProfiles == 1 && maybeAutolaunchIfSingleTarget()) {
             return true;
-        } else if (numberOfProfiles == 2 && maybeAutolaunchIfCrossProfileSupported()) {
-            // note that autolaunching when we have 2 profiles, 1 resolved target on the active
-            // tab and 0 resolved targets on the inactive tab, is already handled before launching
-            // ResolverActivity
+        } else if (numberOfProfiles == 2
+                && mMultiProfilePagerAdapter.getActiveListAdapter().isListLoaded()
+                && mMultiProfilePagerAdapter.getInactiveListAdapter().isListLoaded()
+                && (maybeAutolaunchIfNoAppsOnInactiveTab()
+                        || maybeAutolaunchIfCrossProfileSupported())) {
             return true;
         }
         return false;
@@ -1352,6 +1405,10 @@
             return false;
         }
 
+        if (mMultiProfilePagerAdapter.getActiveListAdapter().getOtherProfile() != null) {
+            return false;
+        }
+
         // Only one target, so we're a candidate to auto-launch!
         final TargetInfo target = mMultiProfilePagerAdapter.getActiveListAdapter()
                 .targetInfoForPosition(0, false);
@@ -1363,6 +1420,23 @@
         return false;
     }
 
+    private boolean maybeAutolaunchIfNoAppsOnInactiveTab() {
+        int count = mMultiProfilePagerAdapter.getActiveListAdapter().getUnfilteredCount();
+        if (count != 1) {
+            return false;
+        }
+        ResolverListAdapter inactiveListAdapter =
+                mMultiProfilePagerAdapter.getInactiveListAdapter();
+        if (inactiveListAdapter.getUnfilteredCount() != 0) {
+            return false;
+        }
+        TargetInfo target = mMultiProfilePagerAdapter.getActiveListAdapter()
+                .targetInfoForPosition(0, false);
+        safelyStartActivity(target);
+        finish();
+        return true;
+    }
+
     /**
      * When we have a personal and a work profile, we auto launch in the following scenario:
      * - There is 1 resolved target on each profile
@@ -1371,7 +1445,8 @@
      * - The target app has declared it supports cross-profile communication via manifest metadata
      */
     private boolean maybeAutolaunchIfCrossProfileSupported() {
-        int count = mMultiProfilePagerAdapter.getActiveListAdapter().getUnfilteredCount();
+        ResolverListAdapter activeListAdapter = mMultiProfilePagerAdapter.getActiveListAdapter();
+        int count = activeListAdapter.getUnfilteredCount();
         if (count != 1) {
             return false;
         }
@@ -1380,7 +1455,7 @@
         if (inactiveListAdapter.getUnfilteredCount() != 1) {
             return false;
         }
-        TargetInfo activeProfileTarget = mMultiProfilePagerAdapter.getActiveListAdapter()
+        TargetInfo activeProfileTarget = activeListAdapter
                 .targetInfoForPosition(0, false);
         TargetInfo inactiveProfileTarget = inactiveListAdapter.targetInfoForPosition(0, false);
         if (!Objects.equals(activeProfileTarget.getResolvedComponentName(),
@@ -1395,6 +1470,11 @@
             return false;
         }
 
+        DevicePolicyEventLogger
+                .createEvent(DevicePolicyEnums.RESOLVER_AUTOLAUNCH_CROSS_PROFILE_TARGET)
+                .setBoolean(activeListAdapter.getUserHandle() == getPersonalProfileUserHandle())
+                .setStrings(getMetricsCategory())
+                .write();
         safelyStartActivity(activeProfileTarget);
         finish();
         return true;
@@ -1476,18 +1556,23 @@
                 viewPager.setCurrentItem(1);
             }
             setupViewVisibilities();
+            DevicePolicyEventLogger
+                    .createEvent(DevicePolicyEnums.RESOLVER_SWITCH_TABS)
+                    .setInt(viewPager.getCurrentItem())
+                    .setStrings(getMetricsCategory())
+                    .write();
         });
 
         viewPager.setVisibility(View.VISIBLE);
         tabHost.setCurrentTab(mMultiProfilePagerAdapter.getCurrentPage());
         mMultiProfilePagerAdapter.setOnProfileSelectedListener(tabHost::setCurrentTab);
+        findViewById(R.id.resolver_tab_divider).setVisibility(View.VISIBLE);
     }
 
     private void resetTabsHeaderStyle(TabWidget tabWidget) {
         for (int i = 0; i < tabWidget.getChildCount(); i++) {
             TextView title = tabWidget.getChildAt(i).findViewById(android.R.id.title);
             title.setTextColor(getColor(R.color.resolver_tabs_inactive_color));
-            title.setAllCaps(false);
         }
     }
 
@@ -1498,15 +1583,17 @@
     }
 
     private void setupViewVisibilities() {
-        int count = mMultiProfilePagerAdapter.getActiveListAdapter().getUnfilteredCount();
-        boolean shouldShowEmptyState = count == 0
-                && mMultiProfilePagerAdapter.getActiveListAdapter().getPlaceholderCount() == 0;
-        //TODO(arangelov): Handle empty state
-        if (!shouldShowEmptyState) {
-            addUseDifferentAppLabelIfNecessary(mMultiProfilePagerAdapter.getActiveListAdapter());
+        ResolverListAdapter activeListAdapter = mMultiProfilePagerAdapter.getActiveListAdapter();
+        if (!shouldShowEmptyState(activeListAdapter)) {
+            addUseDifferentAppLabelIfNecessary(activeListAdapter);
         }
     }
 
+    private boolean shouldShowEmptyState(ResolverListAdapter listAdapter) {
+        int count = listAdapter.getUnfilteredCount();
+        return count == 0 && listAdapter.getPlaceholderCount() == 0;
+    }
+
     /**
      * Add a label to signify that the user can pick a different app.
      * @param adapter The adapter used to provide data to item views.
@@ -1518,7 +1605,7 @@
             stub.setVisibility(View.VISIBLE);
             TextView textView = (TextView) LayoutInflater.from(this).inflate(
                     R.layout.resolver_different_item_header, null, false);
-            if (ENABLE_TABBED_VIEW) {
+            if (shouldShowTabs()) {
                 textView.setGravity(Gravity.CENTER);
             }
             stub.addView(textView);
@@ -1642,6 +1729,10 @@
                 && Objects.equals(lhs.activityInfo.packageName, rhs.activityInfo.packageName);
     }
 
+    protected String getMetricsCategory() {
+        return METRICS_CATEGORY_RESOLVER;
+    }
+
     @Override // ResolverListCommunicator
     public void onHandlePackagesChanged(ResolverListAdapter listAdapter) {
         if (listAdapter == mMultiProfilePagerAdapter.getActiveListAdapter()) {
@@ -1660,6 +1751,25 @@
         }
     }
 
+    private BroadcastReceiver createWorkProfileStateReceiver() {
+        return new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                String action = intent.getAction();
+                if (!TextUtils.equals(action, Intent.ACTION_MANAGED_PROFILE_AVAILABLE)
+                        && !TextUtils.equals(action, Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE)) {
+                    return;
+                }
+                if (mMultiProfilePagerAdapter.getCurrentUserHandle()
+                        == getWorkProfileUserHandle()) {
+                    mMultiProfilePagerAdapter.rebuildActiveTab(true);
+                } else {
+                    mMultiProfilePagerAdapter.clearInactiveProfileCache();
+                }
+            }
+        };
+    }
+
     @VisibleForTesting
     public static final class ResolvedComponentInfo {
         public final ComponentName name;
diff --git a/core/java/com/android/internal/app/ResolverListAdapter.java b/core/java/com/android/internal/app/ResolverListAdapter.java
index 2321da1..54453d0 100644
--- a/core/java/com/android/internal/app/ResolverListAdapter.java
+++ b/core/java/com/android/internal/app/ResolverListAdapter.java
@@ -87,6 +87,7 @@
     private final ResolverListCommunicator mResolverListCommunicator;
     private Runnable mPostListReadyRunnable;
     private final boolean mIsAudioCaptureDevice;
+    private boolean mIsListLoaded;
 
     public ResolverListAdapter(Context context, List<Intent> payloadIntents,
             Intent[] initialIntents, List<ResolveInfo> rList,
@@ -191,6 +192,7 @@
         mLastChosenPosition = -1;
         mAllTargetsAreBrowsers = false;
         mDisplayList.clear();
+        mIsListLoaded = false;
 
         if (mBaseResolveList != null) {
             currentResolveList = mUnfilteredResolveList = new ArrayList<>();
@@ -352,6 +354,7 @@
 
         mResolverListCommunicator.sendVoiceChoicesIfNeeded();
         postListReadyRunnable(doPostProcessing);
+        mIsListLoaded = true;
     }
 
     /**
@@ -607,6 +610,14 @@
                 mIntents, userHandle);
     }
 
+    protected List<Intent> getIntents() {
+        return mIntents;
+    }
+
+    protected boolean isListLoaded() {
+        return mIsListLoaded;
+    }
+
     /**
      * Necessary methods to communicate between {@link ResolverListAdapter}
      * and {@link ResolverActivity}.
diff --git a/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java
index 96dc83a..21e7fd9 100644
--- a/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java
+++ b/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java
@@ -150,6 +150,11 @@
         return getListViewForIndex(1 - getCurrentPage());
     }
 
+    @Override
+    String getMetricsCategory() {
+        return ResolverActivity.METRICS_CATEGORY_RESOLVER;
+    }
+
     class ResolverProfileDescriptor extends ProfileDescriptor {
         private ResolverListAdapter resolverListAdapter;
         final ListView listView;
diff --git a/core/java/com/android/internal/app/ResolverViewPager.java b/core/java/com/android/internal/app/ResolverViewPager.java
index 8ec94f1..84fed9c 100644
--- a/core/java/com/android/internal/app/ResolverViewPager.java
+++ b/core/java/com/android/internal/app/ResolverViewPager.java
@@ -57,10 +57,15 @@
         widthMeasureSpec = MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY);
         int height = getMeasuredHeight();
         if (getChildCount() > 0) {
-            View firstChild = getChildAt(0);
-            firstChild.measure(widthMeasureSpec,
+            View child = getChildAt(0);
+            child.measure(widthMeasureSpec,
                     MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));
-            height = firstChild.getMeasuredHeight();
+            if (height > child.getMeasuredHeight()) {
+                height = child.getMeasuredHeight();
+            }
+        }
+        if (height < getMinimumHeight()) {
+            height = getMinimumHeight();
         }
         heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
diff --git a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
index 3322834..086b9d8 100644
--- a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
+++ b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
@@ -377,6 +377,11 @@
     public static final String NAV_BAR_HANDLE_SHOW_OVER_LOCKSCREEN =
             "nav_bar_handle_show_over_lockscreen";
 
+    /**
+     * (boolean) Whether to enable user-drag resizing for PIP.
+     */
+    public static final String PIP_USER_RESIZE = "pip_user_resize";
+
     private SystemUiDeviceConfigFlags() {
     }
 }
diff --git a/core/java/com/android/internal/content/NativeLibraryHelper.java b/core/java/com/android/internal/content/NativeLibraryHelper.java
index 22fe31e..04bf915 100644
--- a/core/java/com/android/internal/content/NativeLibraryHelper.java
+++ b/core/java/com/android/internal/content/NativeLibraryHelper.java
@@ -25,14 +25,19 @@
 import static android.system.OsConstants.S_IXGRP;
 import static android.system.OsConstants.S_IXOTH;
 
+import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageParser;
 import android.content.pm.PackageParser.PackageLite;
 import android.content.pm.PackageParser.PackageParserException;
-import android.content.pm.parsing.AndroidPackage;
 import android.os.Build;
+import android.os.IBinder;
 import android.os.SELinux;
+import android.os.ServiceManager;
+import android.os.incremental.IIncrementalService;
+import android.os.incremental.IncrementalManager;
+import android.os.incremental.IncrementalStorage;
 import android.system.ErrnoException;
 import android.system.Os;
 import android.util.Slog;
@@ -44,6 +49,7 @@
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.IOException;
+import java.nio.file.Path;
 import java.util.List;
 
 /**
@@ -73,6 +79,7 @@
         private final CloseGuard mGuard = CloseGuard.get();
         private volatile boolean mClosed;
 
+        final String[] apkPaths;
         final long[] apkHandles;
         final boolean multiArch;
         final boolean extractNativeLibs;
@@ -87,25 +94,19 @@
             }
         }
 
-        public static Handle create(AndroidPackage pkg) throws IOException {
-            return create(
-                    pkg.makeListAllCodePaths(),
-                    (pkg.getFlags() & ApplicationInfo.FLAG_MULTIARCH) != 0,
-                    (pkg.getFlags() & ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS) != 0,
-                    (pkg.getFlags() & ApplicationInfo.FLAG_DEBUGGABLE) != 0);
-        }
-
         public static Handle create(PackageLite lite) throws IOException {
             return create(lite.getAllCodePaths(), lite.multiArch, lite.extractNativeLibs,
                     lite.debuggable);
         }
 
-        private static Handle create(List<String> codePaths, boolean multiArch,
+        public static Handle create(List<String> codePaths, boolean multiArch,
                 boolean extractNativeLibs, boolean debuggable) throws IOException {
             final int size = codePaths.size();
+            final String[] apkPaths = new String[size];
             final long[] apkHandles = new long[size];
             for (int i = 0; i < size; i++) {
                 final String path = codePaths.get(i);
+                apkPaths[i] = path;
                 apkHandles[i] = nativeOpenApk(path);
                 if (apkHandles[i] == 0) {
                     // Unwind everything we've opened so far
@@ -116,7 +117,7 @@
                 }
             }
 
-            return new Handle(apkHandles, multiArch, extractNativeLibs, debuggable);
+            return new Handle(apkPaths, apkHandles, multiArch, extractNativeLibs, debuggable);
         }
 
         public static Handle createFd(PackageLite lite, FileDescriptor fd) throws IOException {
@@ -127,11 +128,13 @@
                 throw new IOException("Unable to open APK " + path + " from fd " + fd);
             }
 
-            return new Handle(apkHandles, lite.multiArch, lite.extractNativeLibs, lite.debuggable);
+            return new Handle(new String[]{path}, apkHandles, lite.multiArch,
+                    lite.extractNativeLibs, lite.debuggable);
         }
 
-        Handle(long[] apkHandles, boolean multiArch, boolean extractNativeLibs,
-                boolean debuggable) {
+        Handle(String[] apkPaths, long[] apkHandles, boolean multiArch,
+                boolean extractNativeLibs, boolean debuggable) {
+            this.apkPaths = apkPaths;
             this.apkHandles = apkHandles;
             this.multiArch = multiArch;
             this.extractNativeLibs = extractNativeLibs;
@@ -313,40 +316,58 @@
     }
 
     public static int copyNativeBinariesForSupportedAbi(Handle handle, File libraryRoot,
-            String[] abiList, boolean useIsaSubdir) throws IOException {
-        createNativeLibrarySubdir(libraryRoot);
-
+            String[] abiList, boolean useIsaSubdir, boolean isIncremental) throws IOException {
         /*
          * If this is an internal application or our nativeLibraryPath points to
          * the app-lib directory, unpack the libraries if necessary.
          */
         int abi = findSupportedAbi(handle, abiList);
-        if (abi >= 0) {
-            /*
-             * If we have a matching instruction set, construct a subdir under the native
-             * library root that corresponds to this instruction set.
-             */
-            final String instructionSet = VMRuntime.getInstructionSet(abiList[abi]);
-            final File subDir;
-            if (useIsaSubdir) {
-                final File isaSubdir = new File(libraryRoot, instructionSet);
-                createNativeLibrarySubdir(isaSubdir);
-                subDir = isaSubdir;
-            } else {
-                subDir = libraryRoot;
-            }
+        if (abi < 0) {
+            return abi;
+        }
 
-            int copyRet = copyNativeBinaries(handle, subDir, abiList[abi]);
-            if (copyRet != PackageManager.INSTALL_SUCCEEDED) {
-                return copyRet;
+        /*
+         * If we have a matching instruction set, construct a subdir under the native
+         * library root that corresponds to this instruction set.
+         */
+        final String supportedAbi = abiList[abi];
+        final String instructionSet = VMRuntime.getInstructionSet(supportedAbi);
+        final File subDir;
+        if (useIsaSubdir) {
+            subDir = new File(libraryRoot, instructionSet);
+        } else {
+            subDir = libraryRoot;
+        }
+
+        if (isIncremental) {
+            int res =
+                    incrementalConfigureNativeBinariesForSupportedAbi(handle, subDir, supportedAbi);
+            if (res != PackageManager.INSTALL_SUCCEEDED) {
+                // TODO(b/133435829): the caller of this function expects that we return the index
+                // to the supported ABI. However, any non-negative integer can be a valid index.
+                // We should fix this function and make sure it doesn't accidentally return an error
+                // code that can also be a valid index.
+                return res;
             }
+            return abi;
+        }
+
+        // For non-incremental, use regular extraction and copy
+        createNativeLibrarySubdir(libraryRoot);
+        if (subDir != libraryRoot) {
+            createNativeLibrarySubdir(subDir);
+        }
+
+        int copyRet = copyNativeBinaries(handle, subDir, supportedAbi);
+        if (copyRet != PackageManager.INSTALL_SUCCEEDED) {
+            return copyRet;
         }
 
         return abi;
     }
 
     public static int copyNativeBinariesWithOverride(Handle handle, File libraryRoot,
-            String abiOverride) {
+            String abiOverride, boolean isIncremental) {
         try {
             if (handle.multiArch) {
                 // Warn if we've set an abiOverride for multi-lib packages..
@@ -359,7 +380,8 @@
                 int copyRet = PackageManager.NO_NATIVE_LIBRARIES;
                 if (Build.SUPPORTED_32_BIT_ABIS.length > 0) {
                     copyRet = copyNativeBinariesForSupportedAbi(handle, libraryRoot,
-                            Build.SUPPORTED_32_BIT_ABIS, true /* use isa specific subdirs */);
+                            Build.SUPPORTED_32_BIT_ABIS, true /* use isa specific subdirs */,
+                            isIncremental);
                     if (copyRet < 0 && copyRet != PackageManager.NO_NATIVE_LIBRARIES &&
                             copyRet != PackageManager.INSTALL_FAILED_NO_MATCHING_ABIS) {
                         Slog.w(TAG, "Failure copying 32 bit native libraries; copyRet=" +copyRet);
@@ -369,7 +391,8 @@
 
                 if (Build.SUPPORTED_64_BIT_ABIS.length > 0) {
                     copyRet = copyNativeBinariesForSupportedAbi(handle, libraryRoot,
-                            Build.SUPPORTED_64_BIT_ABIS, true /* use isa specific subdirs */);
+                            Build.SUPPORTED_64_BIT_ABIS, true /* use isa specific subdirs */,
+                            isIncremental);
                     if (copyRet < 0 && copyRet != PackageManager.NO_NATIVE_LIBRARIES &&
                             copyRet != PackageManager.INSTALL_FAILED_NO_MATCHING_ABIS) {
                         Slog.w(TAG, "Failure copying 64 bit native libraries; copyRet=" +copyRet);
@@ -392,7 +415,7 @@
                 }
 
                 int copyRet = copyNativeBinariesForSupportedAbi(handle, libraryRoot, abiList,
-                        true /* use isa specific subdirs */);
+                        true /* use isa specific subdirs */, isIncremental);
                 if (copyRet < 0 && copyRet != PackageManager.NO_NATIVE_LIBRARIES) {
                     Slog.w(TAG, "Failure copying native libraries [errorCode=" + copyRet + "]");
                     return copyRet;
@@ -449,29 +472,61 @@
      * Service will create native library directories and set up native library binary files in the
      * same structure as they are in non-incremental installations.
      *
-     * @param pkg The package to be installed, including all the APK files.
-     * @param handle The pointer to an zip archive.
-     * @param libraryRoot The root directory of the native library files, e.g., lib/
-     * @param abiList The list of ABIs that are supported by the current device.
-     * @param useIsaSubdir Whether or not to set up a sub dir for the ISA.
-     * @return ABI code if installation succeeds or error code if installation fails.
+     * @param handle The Handle object that contains all apk paths.
+     * @param libSubDir The target directory to put the native library files, e.g., lib/ or lib/arm
+     * @param abi The abi that is supported by the current device.
+     * @return Integer code if installation succeeds or fails.
      */
-    public static int configureNativeBinariesForSupportedAbi(AndroidPackage pkg, Handle handle,
-            File libraryRoot, String[] abiList, boolean useIsaSubdir) {
-        int abi = findSupportedAbi(handle, abiList);
-        if (abi < 0) {
-            Slog.e(TAG, "Failed to find find matching ABI.");
-            return abi;
+    private static int incrementalConfigureNativeBinariesForSupportedAbi(Handle handle,
+            File libSubDir, String abi) {
+        final String[] apkPaths = handle.apkPaths;
+        if (apkPaths == null || apkPaths.length == 0) {
+            Slog.e(TAG, "No apks to extract native libraries from.");
+            return PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
         }
 
-        // Currently only support installations that have pre-configured native library files
-        // TODO(b/136132412): implement this after incfs supports file mapping
-        if (!libraryRoot.exists()) {
-            Slog.e(TAG, "Incremental installation currently does not configure native libs");
-            return INSTALL_FAILED_NO_MATCHING_ABIS;
+        final IBinder incrementalService = ServiceManager.getService(Context.INCREMENTAL_SERVICE);
+        if (incrementalService == null) {
+            //TODO(b/133435829): add incremental specific error codes
+            return PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
+        }
+        final IncrementalManager incrementalManager = new IncrementalManager(
+                IIncrementalService.Stub.asInterface(incrementalService));
+        final File apkParent = new File(apkPaths[0]).getParentFile();
+        IncrementalStorage incrementalStorage =
+                incrementalManager.openStorage(apkParent.getAbsolutePath());
+        if (incrementalStorage == null) {
+            Slog.e(TAG, "Failed to find incremental storage");
+            return PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
         }
 
-        return abi;
+        String libRelativeDir = getRelativePath(apkParent, libSubDir);
+        if (libRelativeDir == null) {
+            return PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
+        }
+
+        for (int i = 0; i < apkPaths.length; i++) {
+            if (!incrementalStorage.configureNativeBinaries(apkPaths[i], libRelativeDir, abi)) {
+                return PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
+            }
+        }
+        return PackageManager.INSTALL_SUCCEEDED;
+    }
+
+    private static String getRelativePath(File base, File target) {
+        try {
+            final Path basePath = base.toPath();
+            final Path targetPath = target.toPath();
+            final Path relativePath = basePath.relativize(targetPath);
+            if (relativePath.toString().isEmpty()) {
+                return "";
+            }
+            return relativePath.toString();
+        } catch (IllegalArgumentException ex) {
+            Slog.e(TAG, "Failed to find relative path between: " + base.getAbsolutePath()
+                    + " and: " + target.getAbsolutePath());
+            return null;
+        }
     }
 
     // We don't care about the other return values for now.
diff --git a/core/java/com/android/internal/content/om/OverlayConfig.java b/core/java/com/android/internal/content/om/OverlayConfig.java
new file mode 100644
index 0000000..ffa347c
--- /dev/null
+++ b/core/java/com/android/internal/content/om/OverlayConfig.java
@@ -0,0 +1,413 @@
+/*
+ * 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.internal.content.om;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.PackagePartitions;
+import android.content.pm.parsing.ParsingPackageRead;
+import android.os.Build;
+import android.os.Process;
+import android.os.Trace;
+import android.util.ArrayMap;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.content.om.OverlayConfigParser.OverlayPartition;
+import com.android.internal.content.om.OverlayConfigParser.ParsedConfiguration;
+import com.android.internal.content.om.OverlayScanner.ParsedOverlayInfo;
+import com.android.internal.util.Preconditions;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.function.BiConsumer;
+import java.util.function.Supplier;
+
+/**
+ * Responsible for reading overlay configuration files and handling queries of overlay mutability,
+ * default-enabled state, and priority.
+ *
+ * @see OverlayConfigParser
+ */
+@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+public class OverlayConfig {
+    static final String TAG = "OverlayConfig";
+
+    // The default priority of an overlay that has not been configured. Overlays with default
+    // priority have a higher precedence than configured overlays.
+    @VisibleForTesting
+    public static final int DEFAULT_PRIORITY = Integer.MAX_VALUE;
+
+    @VisibleForTesting
+    public static final class Configuration {
+        @Nullable
+        public final ParsedConfiguration parsedConfig;
+
+        public final int configIndex;
+
+        public Configuration(@Nullable ParsedConfiguration parsedConfig, int configIndex) {
+            this.parsedConfig = parsedConfig;
+            this.configIndex = configIndex;
+        }
+    }
+
+    /**
+     * Interface for providing information on scanned packages.
+     * TODO(147840005): Remove this when android:isStatic and android:priority are fully deprecated
+     */
+    public interface PackageProvider {
+
+        /** Performs the given action for each package. */
+        void forEachPackage(BiConsumer<ParsingPackageRead, Boolean> p);
+    }
+
+    private static final Comparator<ParsedConfiguration> sStaticOverlayComparator = (c1, c2) -> {
+        final ParsedOverlayInfo o1 = c1.parsedInfo;
+        final ParsedOverlayInfo o2 = c2.parsedInfo;
+        Preconditions.checkArgument(o1.isStatic && o2.isStatic,
+                "attempted to sort non-static overlay");
+
+        if (!o1.targetPackageName.equals(o2.targetPackageName)) {
+            return o1.targetPackageName.compareTo(o2.targetPackageName);
+        }
+
+        final int comparedPriority = o1.priority - o2.priority;
+        return comparedPriority == 0 ? o1.path.compareTo(o2.path) : comparedPriority;
+    };
+
+    // Map of overlay package name to configured overlay settings
+    private final ArrayMap<String, Configuration> mConfigurations = new ArrayMap<>();
+
+    // Singleton instance only assigned in system server
+    private static OverlayConfig sInstance;
+
+    @VisibleForTesting
+    public OverlayConfig(@Nullable File rootDirectory,
+            @Nullable Supplier<OverlayScanner> scannerFactory,
+            @Nullable PackageProvider packageProvider) {
+        Preconditions.checkArgument((scannerFactory == null) != (packageProvider == null),
+                "scannerFactory and packageProvider cannot be both null or both non-null");
+
+        final ArrayList<OverlayPartition> partitions;
+        if (rootDirectory == null) {
+            partitions = new ArrayList<>(
+                    PackagePartitions.getOrderedPartitions(OverlayPartition::new));
+        } else {
+            // Rebase the system partitions and settings file on the specified root directory.
+            partitions = new ArrayList<>(PackagePartitions.getOrderedPartitions(
+                    p -> new OverlayPartition(new File(rootDirectory, p.folder.getPath()), p)));
+        }
+
+        boolean foundConfigFile = false;
+        ArrayList<ParsedOverlayInfo> packageManagerOverlayInfos = null;
+
+        final ArrayList<ParsedConfiguration> overlays = new ArrayList<>();
+        for (int i = 0, n = partitions.size(); i < n; i++) {
+            final OverlayPartition partition = partitions.get(i);
+            final OverlayScanner scanner = (scannerFactory == null) ? null : scannerFactory.get();
+            final ArrayList<ParsedConfiguration> partitionOverlays =
+                    OverlayConfigParser.getConfigurations(partition, scanner);
+            if (partitionOverlays != null) {
+                foundConfigFile = true;
+                overlays.addAll(partitionOverlays);
+                continue;
+            }
+
+            // If the configuration file is not present, then use android:isStatic and
+            // android:priority to configure the overlays in the partition.
+            // TODO(147840005): Remove converting static overlays to immutable, default-enabled
+            //  overlays when android:siStatic and android:priority are fully deprecated.
+            final ArrayList<ParsedOverlayInfo> partitionOverlayInfos;
+            if (scannerFactory != null) {
+                partitionOverlayInfos = new ArrayList<>(scanner.getAllParsedInfos());
+            } else {
+                if (packageManagerOverlayInfos == null) {
+                    packageManagerOverlayInfos = getOverlayPackageInfos(packageProvider);
+                }
+
+                // Filter out overlays not present in the partition.
+                partitionOverlayInfos = new ArrayList<>(packageManagerOverlayInfos);
+                for (int j = partitionOverlayInfos.size() - 1; j >= 0; j--) {
+                    if (!partition.containsPath(partitionOverlayInfos.get(j).path.getPath())) {
+                        partitionOverlayInfos.remove(j);
+                    }
+                }
+            }
+
+            // Static overlays are configured as immutable, default-enabled overlays.
+            final ArrayList<ParsedConfiguration> partitionConfigs = new ArrayList<>();
+            for (int j = 0, m = partitionOverlayInfos.size(); j < m; j++) {
+                final ParsedOverlayInfo p = partitionOverlayInfos.get(j);
+                if (p.isStatic) {
+                    partitionConfigs.add(new ParsedConfiguration(p.packageName,
+                            true /* enabled */, false /* mutable */, partition.policy, p));
+                }
+            }
+
+            partitionConfigs.sort(sStaticOverlayComparator);
+            overlays.addAll(partitionConfigs);
+        }
+
+        if (!foundConfigFile) {
+            // If no overlay configuration files exist, disregard partition precedence and allow
+            // android:priority to reorder overlays across partition boundaries.
+            overlays.sort(sStaticOverlayComparator);
+        }
+
+        for (int i = 0, n = overlays.size(); i < n; i++) {
+            // Add the configurations to a map so definitions of an overlay in an earlier
+            // partition can be replaced by an overlay with the same package name in a later
+            // partition.
+            final ParsedConfiguration config = overlays.get(i);
+            mConfigurations.put(config.packageName, new Configuration(config, i));
+        }
+    }
+
+    /**
+     * Creates an instance of OverlayConfig for use in the zygote process.
+     * This instance will not include information of static overlays existing outside of a partition
+     * overlay directory.
+     */
+    @NonNull
+    public static OverlayConfig getZygoteInstance() {
+        if (Process.myUid() != Process.ROOT_UID) {
+            // Scan the overlays in the zygote process to generate configuration settings for
+            // overlays on the system image. Do not cache this instance so OverlayConfig will not
+            // be present in applications by default.
+            throw new IllegalStateException("Can only be invoked in the root process");
+        }
+
+        Trace.traceBegin(Trace.TRACE_TAG_RRO, "OverlayConfig#getZygoteInstance");
+        try {
+            return new OverlayConfig(null /* rootDirectory */, OverlayScanner::new,
+                    null /* packageProvider */);
+        } finally {
+            Trace.traceEnd(Trace.TRACE_TAG_RRO);
+        }
+    }
+
+    /**
+     * Initializes a singleton instance for use in the system process.
+     * Can only be called once. This instance is cached so future invocations of
+     * {@link #getSystemInstance()} will return the initialized instance.
+     */
+    @NonNull
+    public static OverlayConfig initializeSystemInstance(PackageProvider packageProvider) {
+        if (Process.myUid() != Process.SYSTEM_UID) {
+            throw new IllegalStateException("Can only be invoked in the system process");
+        }
+
+        Trace.traceBegin(Trace.TRACE_TAG_RRO, "OverlayConfig#initializeSystemInstance");
+        sInstance = new OverlayConfig(null, null, packageProvider);
+        Trace.traceEnd(Trace.TRACE_TAG_RRO);
+        return sInstance;
+    }
+
+    /**
+     * Retrieves the singleton instance initialized by
+     * {@link #initializeSystemInstance(PackageProvider)}.
+     */
+    @NonNull
+    public static OverlayConfig getSystemInstance() {
+        if (sInstance == null) {
+            throw new IllegalStateException("System instance not initialized");
+        }
+
+        return sInstance;
+    }
+
+    @VisibleForTesting
+    @Nullable
+    public Configuration getConfiguration(@NonNull String packageName) {
+        return mConfigurations.get(packageName);
+    }
+
+    /**
+     * Returns whether the overlay is enabled by default.
+     * Overlays that are not configured are disabled by default mutable.
+     */
+    public boolean isEnabled(String packageName) {
+        final Configuration config = mConfigurations.get(packageName);
+
+        // STOPSHIP(149499802): Enabling a mutable overlay currently has no effect. Either implement
+        // some behavior for default-enabled, mutable overlays or prevent parsing of the enabled
+        // attribute on overlays that are mutable.
+        if (config != null && config.parsedConfig.mutable) {
+            Log.w(TAG, "Default-enabled configuration for mutable overlay "
+                    + config.parsedConfig.packageName + " has no effect");
+            return OverlayConfigParser.DEFAULT_ENABLED_STATE;
+        }
+
+        return config == null? OverlayConfigParser.DEFAULT_ENABLED_STATE
+                : config.parsedConfig.enabled;
+    }
+
+    /**
+     * Returns whether the overlay is mutable and can have its enabled state changed dynamically.
+     * Overlays that are not configured are mutable.
+     */
+    public boolean isMutable(String packageName) {
+        final Configuration config = mConfigurations.get(packageName);
+        return config == null ? OverlayConfigParser.DEFAULT_MUTABILITY
+                : config.parsedConfig.mutable;
+    }
+
+    /**
+     * Returns an integer corresponding to the priority of the overlay.
+     * When multiple overlays override the same resource, the overlay with the highest priority will
+     * will have its value chosen. Overlays that are not configured have a priority of
+     * {@link Integer#MAX_VALUE}.
+     */
+    public int getPriority(String packageName) {
+        final Configuration config = mConfigurations.get(packageName);
+        return config == null ? DEFAULT_PRIORITY : config.configIndex;
+    }
+
+    @NonNull
+    private ArrayList<Configuration> getSortedOverlays() {
+        final ArrayList<Configuration> sortedOverlays = new ArrayList<>();
+        for (int i = 0, n = mConfigurations.size(); i < n; i++) {
+            sortedOverlays.add(mConfigurations.valueAt(i));
+        }
+        sortedOverlays.sort(Comparator.comparingInt(o -> o.configIndex));
+        return sortedOverlays;
+    }
+
+    @NonNull
+    private static ArrayList<ParsedOverlayInfo> getOverlayPackageInfos(
+            @NonNull PackageProvider packageManager) {
+        final ArrayList<ParsedOverlayInfo> overlays = new ArrayList<>();
+        packageManager.forEachPackage((ParsingPackageRead p, Boolean isSystem) -> {
+            if (p.getOverlayTarget() != null && isSystem) {
+                overlays.add(new ParsedOverlayInfo(p.getPackageName(), p.getOverlayTarget(),
+                        p.getTargetSdkVersion(), p.isOverlayIsStatic(), p.getOverlayPriority(),
+                        new File(p.getBaseCodePath())));
+            }
+        });
+        return overlays;
+    }
+
+    /** Represents a single call to idmap create-multiple. */
+    @VisibleForTesting
+    public static class IdmapInvocation {
+        public final boolean enforceOverlayable;
+        public final String policy;
+        public final ArrayList<String> overlayPaths = new ArrayList<>();
+
+        IdmapInvocation(boolean enforceOverlayable, @NonNull String policy) {
+            this.enforceOverlayable = enforceOverlayable;
+            this.policy = policy;
+        }
+
+        @Override
+        public String toString() {
+            return getClass().getSimpleName() + String.format("{enforceOverlayable=%s, policy=%s"
+                            + ", overlayPaths=[%s]}", enforceOverlayable, policy,
+                    String.join(", ", overlayPaths));
+        }
+    }
+
+    /**
+     * Retrieves a list of immutable framework overlays in order of least precedence to greatest
+     * precedence.
+     */
+    @VisibleForTesting
+    public ArrayList<IdmapInvocation> getImmutableFrameworkOverlayIdmapInvocations() {
+        final ArrayList<IdmapInvocation> idmapInvocations = new ArrayList<>();
+        final ArrayList<Configuration> sortedConfigs = getSortedOverlays();
+        for (int i = 0, n = sortedConfigs.size(); i < n; i++) {
+            final Configuration overlay = sortedConfigs.get(i);
+            if (overlay.parsedConfig.mutable || !overlay.parsedConfig.enabled
+                    || !"android".equals(overlay.parsedConfig.parsedInfo.targetPackageName)) {
+                continue;
+            }
+
+            // Only enforce that overlays targeting packages with overlayable declarations abide by
+            // those declarations if the target sdk of the overlay is at least Q (when overlayable
+            // was introduced).
+            final boolean enforceOverlayable = overlay.parsedConfig.parsedInfo.targetSdkVersion
+                    >= Build.VERSION_CODES.Q;
+
+            // Determine if the idmap for the current overlay can be generated in the last idmap
+            // create-multiple invocation.
+            IdmapInvocation invocation = null;
+            if (!idmapInvocations.isEmpty()) {
+                final IdmapInvocation last = idmapInvocations.get(idmapInvocations.size() - 1);
+                if (last.enforceOverlayable == enforceOverlayable
+                        && last.policy.equals(overlay.parsedConfig.policy)) {
+                    invocation = last;
+                }
+            }
+
+            if (invocation == null) {
+                invocation = new IdmapInvocation(enforceOverlayable, overlay.parsedConfig.policy);
+                idmapInvocations.add(invocation);
+            }
+
+            invocation.overlayPaths.add(overlay.parsedConfig.parsedInfo.path.getAbsolutePath());
+        }
+        return idmapInvocations;
+    }
+
+    /**
+     * Creates idmap files for immutable overlays targeting the framework packages. Currently the
+     * android package is the only preloaded system package. Only the zygote can invoke this method.
+     *
+     * @return the paths of the created idmap files
+     */
+    @NonNull
+    public String[] createImmutableFrameworkIdmapsInZygote() {
+        if (Process.myUid() != Process.ROOT_UID) {
+            throw new IllegalStateException("This method can only be called from the root process");
+        }
+
+        final String targetPath = "/system/framework/framework-res.apk";
+        final ArrayList<String> idmapPaths = new ArrayList<>();
+        final ArrayList<IdmapInvocation> idmapInvocations =
+                getImmutableFrameworkOverlayIdmapInvocations();
+
+        for (int i = 0, n = idmapInvocations.size(); i < n; i++) {
+            final IdmapInvocation invocation = idmapInvocations.get(i);
+            final String[] idmaps = createIdmap(targetPath,
+                    invocation.overlayPaths.toArray(new String[0]),
+                    new String[]{OverlayConfigParser.OverlayPartition.POLICY_PUBLIC,
+                            invocation.policy},
+                    invocation.enforceOverlayable);
+
+            if (idmaps == null) {
+                Log.w(TAG, "'idmap2 create-multiple' failed: no mutable=\"false\" overlays"
+                        + " targeting \"android\" will be loaded");
+                return new String[0];
+            }
+
+            idmapPaths.addAll(Arrays.asList(idmaps));
+        }
+
+        return idmapPaths.toArray(new String[0]);
+    }
+
+    /**
+     * For each overlay APK, this creates the idmap file that allows the overlay to override the
+     * target package.
+     *
+     * @return the paths of the created idmap
+     */
+    private static native String[] createIdmap(@NonNull String targetPath,
+            @NonNull String[] overlayPath, @NonNull String[] policies, boolean enforceOverlayable);
+}
diff --git a/core/java/com/android/internal/content/om/OverlayConfigParser.java b/core/java/com/android/internal/content/om/OverlayConfigParser.java
new file mode 100644
index 0000000..139607f
--- /dev/null
+++ b/core/java/com/android/internal/content/om/OverlayConfigParser.java
@@ -0,0 +1,391 @@
+/*
+ * 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.internal.content.om;
+
+import static com.android.internal.content.om.OverlayConfig.TAG;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.PackagePartitions;
+import android.content.pm.PackagePartitions.SystemPartition;
+import android.os.FileUtils;
+import android.util.ArraySet;
+import android.util.Log;
+import android.util.Xml;
+
+import com.android.internal.util.XmlUtils;
+import com.android.internal.content.om.OverlayScanner.ParsedOverlayInfo;
+
+import libcore.io.IoUtils;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+
+/**
+ * Responsible for parsing configurations of Runtime Resource Overlays that control mutability,
+ * default enable state, and priority. To configure an overlay, create or modify the file located
+ * at {@code partition}/overlay/config/config.xml where {@code partition} is the partition of the
+ * overlay to be configured. In order to be configured, an overlay must reside in the overlay
+ * directory of the partition in which the overlay is configured.
+ *
+ * @see #parseOverlay(File, XmlPullParser, OverlayScanner, ParsingContext)
+ * @see #parseMerge(File, XmlPullParser, OverlayScanner, ParsingContext)
+ **/
+final class OverlayConfigParser {
+
+    // Default values for overlay configurations.
+    static final boolean DEFAULT_ENABLED_STATE = false;
+    static final boolean DEFAULT_MUTABILITY = true;
+
+    // Maximum recursive depth of processing merge tags.
+    private static final int MAXIMUM_MERGE_DEPTH = 5;
+
+    // The subdirectory within a partition's overlay directory that contains the configuration files
+    // for the partition.
+    private static final String CONFIG_DIRECTORY = "config";
+
+    /**
+     * The name of the configuration file to parse for overlay configurations. This class does not
+     * scan for overlay configuration files within the {@link #CONFIG_DIRECTORY}; rather, other
+     * files can be included at a particular position within this file using the <merge> tag.
+     *
+     * @see #parseMerge(File, XmlPullParser, OverlayScanner, ParsingContext)
+     */
+    private static final String CONFIG_DEFAULT_FILENAME = CONFIG_DIRECTORY + "/config.xml";
+
+    /** Represents the configurations of a particular overlay. */
+    public static class ParsedConfiguration {
+        @NonNull
+        public final String packageName;
+
+        /** Whether or not the overlay is enabled by default. */
+        public final boolean enabled;
+
+        /**
+         * Whether or not the overlay is mutable and can have its enabled state changed dynamically
+         * using the {@code OverlayManagerService}.
+         **/
+        public final boolean mutable;
+
+        /** The policy granted to overlays on the partition in which the overlay is located. */
+        @NonNull
+        public final String policy;
+
+        /** Information extracted from the manifest of the overlay. */
+        @NonNull
+        public final ParsedOverlayInfo parsedInfo;
+
+        ParsedConfiguration(@NonNull String packageName, boolean enabled, boolean mutable,
+                @NonNull String policy, @NonNull ParsedOverlayInfo parsedInfo) {
+            this.packageName = packageName;
+            this.enabled = enabled;
+            this.mutable = mutable;
+            this.policy = policy;
+            this.parsedInfo = parsedInfo;
+        }
+
+        @Override
+        public String toString() {
+            return getClass().getSimpleName() + String.format("{packageName=%s, enabled=%s"
+                            + ", mutable=%s, policy=%s, parsedInfo=%s}", packageName, enabled,
+                    mutable, policy, parsedInfo);
+        }
+    }
+
+    static class OverlayPartition extends SystemPartition {
+        // Policies passed to idmap2 during idmap creation.
+        // Keep partition policy constants in sync with f/b/cmds/idmap2/include/idmap2/Policies.h.
+        static final String POLICY_ODM = "odm";
+        static final String POLICY_OEM = "oem";
+        static final String POLICY_PRODUCT = "product";
+        static final String POLICY_PUBLIC = "public";
+        static final String POLICY_SYSTEM = "system";
+        static final String POLICY_VENDOR = "vendor";
+
+        @NonNull
+        public final String policy;
+
+        OverlayPartition(@NonNull SystemPartition partition) {
+            super(partition);
+            this.policy = policyForPartition(partition);
+        }
+
+        /**
+         * Creates a partition containing the same folders as the original partition but with a
+         * different root folder.
+         */
+        OverlayPartition(@NonNull File folder, @NonNull SystemPartition original) {
+            super(folder, original);
+            this.policy = policyForPartition(original);
+        }
+
+        private static String policyForPartition(SystemPartition partition) {
+            switch (partition.type) {
+                case PackagePartitions.PARTITION_SYSTEM:
+                case PackagePartitions.PARTITION_SYSTEM_EXT:
+                    return POLICY_SYSTEM;
+                case PackagePartitions.PARTITION_VENDOR:
+                    return POLICY_VENDOR;
+                case PackagePartitions.PARTITION_ODM:
+                    return POLICY_ODM;
+                case PackagePartitions.PARTITION_OEM:
+                    return POLICY_OEM;
+                case PackagePartitions.PARTITION_PRODUCT:
+                    return POLICY_PRODUCT;
+                default:
+                    throw new IllegalStateException("Unable to determine policy for "
+                            + partition.folder);
+            }
+        }
+    }
+
+    /** This class holds state related to parsing the configurations of a partition. */
+    private static class ParsingContext {
+        // The overlay directory of the partition
+        private final OverlayPartition mPartition;
+
+        // The ordered list of configured overlays
+        private final ArrayList<ParsedConfiguration> mOrderedConfigurations = new ArrayList<>();
+
+        // The packages configured in the partition
+        private final ArraySet<String> mConfiguredOverlays = new ArraySet<>();
+
+        // Whether an mutable overlay has been configured in the partition
+        private boolean mFoundMutableOverlay;
+
+        // The current recursive depth of merging configuration files
+        private int mMergeDepth;
+
+        private ParsingContext(OverlayPartition partition) {
+            mPartition = partition;
+        }
+    }
+
+    /**
+     * Retrieves overlays configured within the partition in increasing priority order.
+     *
+     * If {@code scanner} is null, then the {@link ParsedConfiguration#parsedInfo} fields of the
+     * added configured overlays will be null and the parsing logic will not assert that the
+     * configured overlays exist within the partition.
+     *
+     * @return list of configured overlays if configuration file exists; otherwise, null
+     */
+    @Nullable
+    static ArrayList<ParsedConfiguration> getConfigurations(
+            @NonNull OverlayPartition partition, @Nullable OverlayScanner scanner) {
+        if (partition.getOverlayFolder() == null) {
+            return null;
+        }
+
+        if (scanner != null) {
+            scanner.scanDir(partition.getOverlayFolder());
+        }
+
+        final File configFile = new File(partition.getOverlayFolder(), CONFIG_DEFAULT_FILENAME);
+        if (!configFile.exists()) {
+            return null;
+        }
+
+        final ParsingContext parsingContext = new ParsingContext(partition);
+        readConfigFile(configFile, scanner, parsingContext);
+        return parsingContext.mOrderedConfigurations;
+    }
+
+    private static void readConfigFile(@NonNull File configFile, @Nullable OverlayScanner scanner,
+            @NonNull ParsingContext parsingContext) {
+        FileReader configReader;
+        try {
+            configReader = new FileReader(configFile);
+        } catch (FileNotFoundException e) {
+            Log.w(TAG, "Couldn't find or open overlay configuration file " + configFile);
+            return;
+        }
+
+        try {
+            final XmlPullParser parser = Xml.newPullParser();
+            parser.setInput(configReader);
+            XmlUtils.beginDocument(parser, "config");
+
+            int depth = parser.getDepth();
+            while (XmlUtils.nextElementWithin(parser, depth)) {
+                final String name = parser.getName();
+                switch (name) {
+                    case "merge":
+                        parseMerge(configFile, parser, scanner, parsingContext);
+                        break;
+                    case "overlay":
+                        parseOverlay(configFile, parser, scanner, parsingContext);
+                        break;
+                    default:
+                        Log.w(TAG, String.format("Tag %s is unknown in %s at %s",
+                                name, configFile, parser.getPositionDescription()));
+                        break;
+                }
+            }
+        } catch (XmlPullParserException | IOException e) {
+            Log.w(TAG, "Got exception parsing overlay configuration.", e);
+        } finally {
+            IoUtils.closeQuietly(configReader);
+        }
+    }
+
+    /**
+     * Parses a <merge> tag within an overlay configuration file.
+     *
+     * Merge tags allow for other configuration files to be "merged" at the current parsing
+     * position into the current configuration file being parsed. The {@code path} attribute of the
+     * tag represents the path of the file to merge relative to the directory containing overlay
+     * configuration files.
+     */
+    private static void parseMerge(@NonNull File configFile, @NonNull XmlPullParser parser,
+            @Nullable OverlayScanner scanner, @NonNull ParsingContext parsingContext) {
+        final String path = parser.getAttributeValue(null, "path");
+        if (path == null) {
+            throw new IllegalStateException(String.format("<merge> without path in %s at %s"
+                    + configFile, parser.getPositionDescription()));
+        }
+
+        if (path.startsWith("/")) {
+            throw new IllegalStateException(String.format(
+                    "Path %s must be relative to the directory containing overlay configurations "
+                            + " files in %s at %s ", path, configFile,
+                    parser.getPositionDescription()));
+        }
+
+        if (parsingContext.mMergeDepth++ == MAXIMUM_MERGE_DEPTH) {
+            throw new IllegalStateException(String.format(
+                    "Maximum <merge> depth exceeded in %s at %s", configFile,
+                    parser.getPositionDescription()));
+        }
+
+        final File configDirectory;
+        final File includedConfigFile;
+        try {
+            configDirectory = new File(parsingContext.mPartition.getOverlayFolder(),
+                    CONFIG_DIRECTORY).getCanonicalFile();
+            includedConfigFile = new File(configDirectory, path).getCanonicalFile();
+        } catch (IOException e) {
+            throw new IllegalStateException(
+                    String.format("Couldn't find or open merged configuration file %s in %s at %s",
+                            path, configFile, parser.getPositionDescription()), e);
+        }
+
+        if (!includedConfigFile.exists()) {
+            throw new IllegalStateException(
+                    String.format("Merged configuration file %s does not exist in %s at %s",
+                            path, configFile, parser.getPositionDescription()));
+        }
+
+        if (!FileUtils.contains(configDirectory, includedConfigFile)) {
+            throw new IllegalStateException(
+                    String.format(
+                            "Merged file %s outside of configuration directory in %s at %s",
+                            includedConfigFile.getAbsolutePath(), includedConfigFile,
+                            parser.getPositionDescription()));
+        }
+
+        readConfigFile(includedConfigFile, scanner, parsingContext);
+        parsingContext.mMergeDepth--;
+    }
+
+    /**
+     * Parses an <overlay> tag within an overlay configuration file.
+     *
+     * Requires a {@code package} attribute that indicates which package is being configured.
+     * The optional {@code enabled} attribute controls whether or not the overlay is enabled by
+     * default (default is false). The optional {@code mutable} attribute controls whether or
+     * not the overlay is mutable and can have its enabled state changed at runtime (default is
+     * true).
+     *
+     * The order in which overlays that override the same resources are configured matters. An
+     * overlay will have a greater priority than overlays with configurations preceding its own
+     * configuration.
+     *
+     * Configurations of immutable overlays must precede configurations of mutable overlays.
+     * An overlay cannot be configured in multiple locations. All configured overlay must exist
+     * within the partition of the configuration file. An overlay cannot be configured multiple
+     * times in a single partition.
+     *
+     * Overlays not listed within a configuration file will be mutable and disabled by default. The
+     * order of non-configured overlays when enabled by the OverlayManagerService is undefined.
+     */
+    private static void parseOverlay(@NonNull File configFile, @NonNull XmlPullParser parser,
+            @Nullable OverlayScanner scanner, @NonNull ParsingContext parsingContext) {
+        final String packageName = parser.getAttributeValue(null, "package");
+        if (packageName == null) {
+            throw new IllegalStateException(String.format("\"<overlay> without package in %s at %s",
+                    configFile, parser.getPositionDescription()));
+        }
+
+        // Ensure the overlay being configured is present in the partition during zygote
+        // initialization.
+        ParsedOverlayInfo info = null;
+        if (scanner != null) {
+            info = scanner.getParsedInfo(packageName);
+            if (info == null|| !parsingContext.mPartition.containsOverlay(info.path)) {
+                throw new IllegalStateException(
+                        String.format("overlay %s not present in partition %s in %s at %s",
+                                packageName, parsingContext.mPartition.getOverlayFolder(),
+                                configFile, parser.getPositionDescription()));
+            }
+        }
+
+        if (parsingContext.mConfiguredOverlays.contains(packageName)) {
+            throw new IllegalStateException(
+                    String.format("overlay %s configured multiple times in a single partition"
+                                    + " in %s at %s", packageName, configFile,
+                            parser.getPositionDescription()));
+        }
+
+        boolean isEnabled = DEFAULT_ENABLED_STATE;
+        final String enabled = parser.getAttributeValue(null, "enabled");
+        if (enabled != null) {
+            isEnabled = !"false".equals(enabled);
+        }
+
+        boolean isMutable = DEFAULT_MUTABILITY;
+        final String mutable = parser.getAttributeValue(null, "mutable");
+        if (mutable != null) {
+            isMutable = !"false".equals(mutable);
+            if (!isMutable && parsingContext.mFoundMutableOverlay) {
+                throw new IllegalStateException(String.format(
+                        "immutable overlays must precede mutable overlays:"
+                                + " found in %s at %s",
+                        configFile, parser.getPositionDescription()));
+            }
+        }
+
+        if (isMutable) {
+            parsingContext.mFoundMutableOverlay = true;
+        } else if (!isEnabled) {
+            // Default disabled, immutable overlays may be a misconfiguration of the system so warn
+            // developers.
+            Log.w(TAG, "found default-disabled immutable overlay " + packageName);
+        }
+
+        final ParsedConfiguration Config = new ParsedConfiguration(packageName, isEnabled,
+                isMutable, parsingContext.mPartition.policy, info);
+        parsingContext.mConfiguredOverlays.add(packageName);
+        parsingContext.mOrderedConfigurations.add(Config);
+    }
+}
diff --git a/core/java/com/android/internal/content/om/OverlayScanner.java b/core/java/com/android/internal/content/om/OverlayScanner.java
new file mode 100644
index 0000000..a85cf56
--- /dev/null
+++ b/core/java/com/android/internal/content/om/OverlayScanner.java
@@ -0,0 +1,138 @@
+/*
+ * 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.internal.content.om;
+
+import static com.android.internal.content.om.OverlayConfig.TAG;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.PackageParser;
+import android.util.ArrayMap;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.io.File;
+import java.util.Collection;
+
+/**
+ * This class scans a directory containing overlay APKs and extracts information from the overlay
+ * manifests by parsing the overlay manifests.
+ */
+@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+public class OverlayScanner {
+
+    /** Represents information parsed from the manifest of an overlay. */
+    public static class ParsedOverlayInfo {
+        public final String packageName;
+        public final String targetPackageName;
+        public final int targetSdkVersion;
+        public final boolean isStatic;
+        public final int priority;
+        public final File path;
+
+        public ParsedOverlayInfo(String packageName, String targetPackageName,
+                int targetSdkVersion, boolean isStatic, int priority, File path) {
+            this.packageName = packageName;
+            this.targetPackageName = targetPackageName;
+            this.targetSdkVersion = targetSdkVersion;
+            this.isStatic = isStatic;
+            this.priority = priority;
+            this.path = path;
+        }
+
+        @Override
+        public String toString() {
+            return getClass().getSimpleName() + String.format("{packageName=%s"
+                            + ", targetPackageName=%s, targetSdkVersion=%s, isStatic=%s"
+                            + ", priority=%s, path=%s}",
+                    packageName, targetPackageName, targetSdkVersion, isStatic, priority, path);
+        }
+    }
+
+    /**
+     * A map of overlay package name to the parsed manifest information of the latest version of
+     * the overlay.
+     */
+    private final ArrayMap<String, ParsedOverlayInfo> mParsedOverlayInfos = new ArrayMap<>();
+
+    /** Retrieves information parsed from the overlay with the package name. */
+    @Nullable
+    public final ParsedOverlayInfo getParsedInfo(String packageName) {
+        return mParsedOverlayInfos.get(packageName);
+    }
+
+    /** Retrieves all of the scanned overlays. */
+    @NonNull
+    final Collection<ParsedOverlayInfo> getAllParsedInfos() {
+        return mParsedOverlayInfos.values();
+    }
+
+    /**
+     * Recursively searches the directory for overlay APKs. If an overlay is found with the same
+     * package name as a previously scanned overlay, the info of the new overlay will replace the
+     * info of the previously scanned overlay.
+     */
+    public void scanDir(File partitionOverlayDir) {
+        if (!partitionOverlayDir.exists() || !partitionOverlayDir.isDirectory()) {
+            return;
+        }
+
+        if (!partitionOverlayDir.canRead()) {
+            Log.w(TAG, "Directory " + partitionOverlayDir + " cannot be read");
+            return;
+        }
+
+        final File[] files = partitionOverlayDir.listFiles();
+        if (files == null) {
+            return;
+        }
+
+        for (int i = 0; i < files.length; i++) {
+            final File f = files[i];
+            if (f.isDirectory()) {
+                scanDir(f);
+            }
+
+            if (!f.isFile() || !f.getPath().endsWith(".apk")) {
+                continue;
+            }
+
+            final ParsedOverlayInfo info = parseOverlayManifest(f);
+            if (info == null) {
+                continue;
+            }
+
+            mParsedOverlayInfos.put(info.packageName, info);
+        }
+    }
+
+    /** Extracts information about the overlay from its manifest. */
+    @VisibleForTesting
+    public ParsedOverlayInfo parseOverlayManifest(File overlayApk) {
+        try {
+            final PackageParser.ApkLite apkLite = PackageParser.parseApkLite(overlayApk, 0);
+            return apkLite.targetPackageName == null ? null :
+                    new ParsedOverlayInfo(apkLite.packageName, apkLite.targetPackageName,
+                            apkLite.targetSdkVersion, apkLite.overlayIsStatic,
+                            apkLite.overlayPriority, new File(apkLite.codePath));
+        } catch (PackageParser.PackageParserException e) {
+            Log.w(TAG, "Got exception loading overlay.", e);
+            return null;
+        }
+    }
+}
diff --git a/core/java/com/android/internal/inputmethod/OWNERS b/core/java/com/android/internal/inputmethod/OWNERS
new file mode 100644
index 0000000..fc0e5d4
--- /dev/null
+++ b/core/java/com/android/internal/inputmethod/OWNERS
@@ -0,0 +1,3 @@
+set noparent
+
+include ../../../../../../services/core/java/com/android/server/inputmethod/OWNERS
diff --git a/core/java/com/android/internal/logging/MetricsLogger.java b/core/java/com/android/internal/logging/MetricsLogger.java
index 140c410..75eb4aa 100644
--- a/core/java/com/android/internal/logging/MetricsLogger.java
+++ b/core/java/com/android/internal/logging/MetricsLogger.java
@@ -55,8 +55,11 @@
     protected void saveLog(LogMaker log) {
         // TODO(b/116684537): Flag guard logging to event log and statsd socket.
         EventLogTags.writeSysuiMultiAction(log.serialize());
-        FrameworkStatsLog.write(FrameworkStatsLog.KEY_VALUE_PAIRS_ATOM,
-                /* UID is retrieved from statsd side */ 0, log.getEntries());
+        if (log.getCategory() != MetricsEvent.RESERVED_FOR_LOGBUILDER_COUNTER
+                && log.getCategory() != MetricsEvent.RESERVED_FOR_LOGBUILDER_HISTOGRAM) {
+            FrameworkStatsLog.write(FrameworkStatsLog.KEY_VALUE_PAIRS_ATOM,
+                    /* UID is retrieved from statsd side */ 0, log.getEntries());
+        }
     }
 
     public static final int VIEW_UNKNOWN = MetricsEvent.VIEW_UNKNOWN;
diff --git a/core/java/com/android/internal/logging/UiEventLogger.java b/core/java/com/android/internal/logging/UiEventLogger.java
index 48d2bc2..67ffd4d 100644
--- a/core/java/com/android/internal/logging/UiEventLogger.java
+++ b/core/java/com/android/internal/logging/UiEventLogger.java
@@ -56,8 +56,8 @@
      * @param event an enum implementing UiEventEnum interface.
      * @param uid the uid of the relevant app, if known (0 otherwise).
      * @param packageName the package name of the relevant app, if known (null otherwise).
-     * @param instance An identifier obtained from an InstanceIdSequence.
+     * @param instance An identifier obtained from an InstanceIdSequence. If null, reduces to log().
      */
     void logWithInstanceId(@NonNull UiEventEnum event, int uid, @Nullable String packageName,
-            @NonNull InstanceId instance);
+            @Nullable InstanceId instance);
 }
diff --git a/core/java/com/android/internal/logging/UiEventLoggerImpl.java b/core/java/com/android/internal/logging/UiEventLoggerImpl.java
index 785b2ed..4d171ec 100644
--- a/core/java/com/android/internal/logging/UiEventLoggerImpl.java
+++ b/core/java/com/android/internal/logging/UiEventLoggerImpl.java
@@ -41,9 +41,11 @@
     public void logWithInstanceId(UiEventEnum event, int uid, String packageName,
             InstanceId instance) {
         final int eventID = event.getId();
-        if (eventID > 0) {
+        if ((eventID > 0)  && (instance != null)) {
             FrameworkStatsLog.write(FrameworkStatsLog.UI_EVENT_REPORTED, eventID, uid, packageName,
                     instance.getId());
+        } else {
+            log(event, uid, packageName);
         }
     }
 }
diff --git a/core/java/com/android/internal/net/VpnProfile.java b/core/java/com/android/internal/net/VpnProfile.java
index bbae027..23b1ab5 100644
--- a/core/java/com/android/internal/net/VpnProfile.java
+++ b/core/java/com/android/internal/net/VpnProfile.java
@@ -18,6 +18,7 @@
 
 import android.annotation.NonNull;
 import android.compat.annotation.UnsupportedAppUsage;
+import android.net.Ikev2VpnProfile;
 import android.net.ProxyInfo;
 import android.os.Build;
 import android.os.Parcel;
@@ -332,15 +333,38 @@
         return builder.toString().getBytes(StandardCharsets.UTF_8);
     }
 
+    /** Checks if this profile specifies a LegacyVpn type. */
+    public static boolean isLegacyType(int type) {
+        switch (type) {
+            case VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS: // fall through
+            case VpnProfile.TYPE_IKEV2_IPSEC_RSA: // fall through
+            case VpnProfile.TYPE_IKEV2_IPSEC_PSK:
+                return false;
+            default:
+                return true;
+        }
+    }
+
+    private boolean isValidLockdownLegacyVpnProfile() {
+        return isLegacyType(type) && isServerAddressNumeric() && hasDns()
+                && areDnsAddressesNumeric();
+    }
+
+    private boolean isValidLockdownPlatformVpnProfile() {
+        return Ikev2VpnProfile.isValidVpnProfile(this);
+    }
+
     /**
-     * Tests if profile is valid for lockdown, which requires IPv4 address for both server and DNS.
-     * Server hostnames would require using DNS before connection.
+     * Tests if profile is valid for lockdown.
+     *
+     * <p>For LegacyVpn profiles, this requires an IPv4 address for both the server and DNS.
+     *
+     * <p>For PlatformVpn profiles, this requires a server, an identifier and the relevant fields to
+     * be non-null.
      */
     public boolean isValidLockdownProfile() {
         return isTypeValidForLockdown()
-                && isServerAddressNumeric()
-                && hasDns()
-                && areDnsAddressesNumeric();
+                && (isValidLockdownLegacyVpnProfile() || isValidLockdownPlatformVpnProfile());
     }
 
     /** Returns {@code true} if the VPN type is valid for lockdown. */
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 18066dc..27c7cb6 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -1000,6 +1000,8 @@
     private int mMinLearnedBatteryCapacity = -1;
     private int mMaxLearnedBatteryCapacity = -1;
 
+    private long mBatteryTimeToFullSeconds = -1;
+
     private long[] mCpuFreqs;
 
     @VisibleForTesting
@@ -12226,7 +12228,7 @@
     @GuardedBy("this")
     public void setBatteryStateLocked(final int status, final int health, final int plugType,
             final int level, /* not final */ int temp, final int volt, final int chargeUAh,
-            final int chargeFullUAh) {
+            final int chargeFullUAh, final long chargeTimeToFullSeconds) {
         // Temperature is encoded without the signed bit, so clamp any negative temperatures to 0.
         temp = Math.max(0, temp);
 
@@ -12429,6 +12431,8 @@
             mMinLearnedBatteryCapacity = Math.min(mMinLearnedBatteryCapacity, chargeFullUAh);
         }
         mMaxLearnedBatteryCapacity = Math.max(mMaxLearnedBatteryCapacity, chargeFullUAh);
+
+        mBatteryTimeToFullSeconds = chargeTimeToFullSeconds;
     }
 
     public static boolean isOnBattery(int plugType, int status) {
@@ -12578,19 +12582,10 @@
             // Not yet working.
             return -1;
         }
-        /* Broken
-        int curLevel = mCurrentBatteryLevel;
-        int plugLevel = mDischargePlugLevel;
-        if (plugLevel < 0 || curLevel < (plugLevel+1)) {
-            return -1;
+        if (mBatteryTimeToFullSeconds >= 0) {
+            return mBatteryTimeToFullSeconds * (1000 * 1000); // s to us
         }
-        long duration = computeBatteryRealtime(curTime, STATS_SINCE_UNPLUGGED);
-        if (duration < 1000*1000) {
-            return -1;
-        }
-        long usPerLevel = duration/(curLevel-plugLevel);
-        return usPerLevel * (100-curLevel);
-        */
+        // Else use algorithmic approach
         if (mChargeStepTracker.mNumStepDurations < 1) {
             return -1;
         }
@@ -12598,7 +12593,7 @@
         if (msPerLevel <= 0) {
             return -1;
         }
-        return (msPerLevel * (100-mCurrentBatteryLevel)) * 1000;
+        return (msPerLevel * (100 - mCurrentBatteryLevel)) * 1000;
     }
 
     /*@hide */
diff --git a/core/java/com/android/internal/os/KernelCpuUidBpfMapReader.java b/core/java/com/android/internal/os/KernelCpuUidBpfMapReader.java
new file mode 100644
index 0000000..26f81d9
--- /dev/null
+++ b/core/java/com/android/internal/os/KernelCpuUidBpfMapReader.java
@@ -0,0 +1,202 @@
+/*
+ * 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.internal.os;
+
+import android.os.StrictMode;
+import android.os.SystemClock;
+import android.util.Slog;
+import android.util.SparseArray;
+
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * Reads cpu time bpf maps.
+ *
+ * It is implemented as singletons for each separate set of per-UID times. Get___Instance() method
+ * returns the corresponding reader instance. In order to prevent frequent GC, it reuses the same
+ * SparseArray to store data read from BPF maps.
+ *
+ * A KernelCpuUidBpfMapReader instance keeps an error counter. When the number of read errors within
+ * that instance accumulates to 5, this instance will reject all further read requests.
+ *
+ * Data fetched within last 500ms is considered fresh, since the reading lifecycle can take up to
+ * 25ms. KernelCpuUidBpfMapReader always tries to use cache if it is fresh and valid, but it can
+ * be disabled through a parameter.
+ *
+ * A KernelCpuUidBpfMapReader instance is thread-safe. It acquires a write lock when reading the bpf
+ * map, releases it right after, then acquires a read lock before returning a BpfMapIterator. Caller
+ * is responsible for closing BpfMapIterator (also auto-closable) after reading, otherwise deadlock
+ * will occur.
+ */
+public abstract class KernelCpuUidBpfMapReader {
+    private static final int ERROR_THRESHOLD = 5;
+    private static final long FRESHNESS_MS = 500L;
+
+    private static final KernelCpuUidBpfMapReader FREQ_TIME_READER =
+        new KernelCpuUidFreqTimeBpfMapReader();
+
+    private static final KernelCpuUidBpfMapReader ACTIVE_TIME_READER =
+        new KernelCpuUidActiveTimeBpfMapReader();
+
+    private static final KernelCpuUidBpfMapReader CLUSTER_TIME_READER =
+        new KernelCpuUidClusterTimeBpfMapReader();
+
+    static KernelCpuUidBpfMapReader getFreqTimeReaderInstance() {
+        return FREQ_TIME_READER;
+    }
+
+    static KernelCpuUidBpfMapReader getActiveTimeReaderInstance() {
+        return ACTIVE_TIME_READER;
+    }
+
+    static KernelCpuUidBpfMapReader getClusterTimeReaderInstance() {
+        return CLUSTER_TIME_READER;
+    }
+
+    final String mTag = this.getClass().getSimpleName();
+    private int mErrors = 0;
+    private boolean mTracking = false;
+    protected SparseArray<long[]> mData = new SparseArray<>();
+    private long mLastReadTime = 0;
+    protected final ReentrantReadWriteLock mLock = new ReentrantReadWriteLock();
+    protected final ReentrantReadWriteLock.ReadLock mReadLock = mLock.readLock();
+    protected final ReentrantReadWriteLock.WriteLock mWriteLock = mLock.writeLock();
+
+    public native boolean startTrackingBpfTimes();
+
+    protected abstract boolean readBpfData();
+
+    /**
+     * Returns an array of metadata used to inform the caller of 1) the size of array required by
+     * getNextUid and 2) how to interpret the raw data copied to that array.
+     */
+    public abstract long[] getDataDimensions();
+
+    public void removeUidsInRange(int startUid, int endUid) {
+        if (mErrors > ERROR_THRESHOLD) {
+            return;
+        }
+        mWriteLock.lock();
+        int firstIndex = mData.indexOfKey(startUid);
+        int lastIndex = mData.indexOfKey(endUid);
+        mData.removeAtRange(firstIndex, lastIndex - firstIndex + 1);
+        mWriteLock.unlock();
+    }
+
+    public BpfMapIterator open() {
+        return open(false);
+    }
+
+    public BpfMapIterator open(boolean ignoreCache) {
+        if (mErrors > ERROR_THRESHOLD) {
+            return null;
+        }
+        if (!mTracking && !startTrackingBpfTimes()) {
+            Slog.w(mTag, "Failed to start tracking");
+            mErrors++;
+            return null;
+        }
+        if (ignoreCache) {
+            mWriteLock.lock();
+        } else {
+            mReadLock.lock();
+            if (dataValid()) {
+                return new BpfMapIterator();
+            }
+            mReadLock.unlock();
+            mWriteLock.lock();
+            if (dataValid()) {
+                mReadLock.lock();
+                mWriteLock.unlock();
+                return new BpfMapIterator();
+            }
+        }
+        if (readBpfData()) {
+            mLastReadTime = SystemClock.elapsedRealtime();
+            mReadLock.lock();
+            mWriteLock.unlock();
+            return new BpfMapIterator();
+        }
+
+        mWriteLock.unlock();
+        mErrors++;
+        Slog.w(mTag, "Failed to read bpf times");
+        return null;
+    }
+
+    private boolean dataValid() {
+        return mData.size() > 0 && (SystemClock.elapsedRealtime() - mLastReadTime < FRESHNESS_MS);
+    }
+
+    public class BpfMapIterator implements AutoCloseable {
+        private int mPos;
+
+        public BpfMapIterator() {
+        };
+
+        public boolean getNextUid(long[] buf) {
+            if (mPos >= mData.size()) {
+                return false;
+            }
+            buf[0] = mData.keyAt(mPos);
+            System.arraycopy(mData.valueAt(mPos), 0, buf, 1, mData.valueAt(mPos).length);
+            mPos++;
+            return true;
+        }
+
+        public void close() {
+            mReadLock.unlock();
+        }
+    }
+
+    public static class KernelCpuUidFreqTimeBpfMapReader extends KernelCpuUidBpfMapReader {
+
+        private final native boolean removeUidRange(int startUid, int endUid);
+
+        @Override
+        protected final native boolean readBpfData();
+
+        @Override
+        public final native long[] getDataDimensions();
+
+        @Override
+        public void removeUidsInRange(int startUid, int endUid) {
+            mWriteLock.lock();
+            super.removeUidsInRange(startUid, endUid);
+            removeUidRange(startUid, endUid);
+            mWriteLock.unlock();
+        }
+    }
+
+    public static class KernelCpuUidActiveTimeBpfMapReader extends KernelCpuUidBpfMapReader {
+
+        @Override
+        protected final native boolean readBpfData();
+
+        @Override
+        public final native long[] getDataDimensions();
+    }
+
+    public static class KernelCpuUidClusterTimeBpfMapReader extends KernelCpuUidBpfMapReader {
+
+        @Override
+        protected final native boolean readBpfData();
+
+        @Override
+        public final native long[] getDataDimensions();
+    }
+}
diff --git a/core/java/com/android/internal/os/KernelCpuUidTimeReader.java b/core/java/com/android/internal/os/KernelCpuUidTimeReader.java
index f1eb2fb..f7fad2c 100644
--- a/core/java/com/android/internal/os/KernelCpuUidTimeReader.java
+++ b/core/java/com/android/internal/os/KernelCpuUidTimeReader.java
@@ -28,6 +28,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.KernelCpuProcStringReader.ProcFileIterator;
+import com.android.internal.os.KernelCpuUidBpfMapReader.BpfMapIterator;
 
 import java.io.BufferedReader;
 import java.io.FileWriter;
@@ -57,6 +58,8 @@
     final SparseArray<T> mLastTimes = new SparseArray<>();
     final KernelCpuProcStringReader mReader;
     final boolean mThrottle;
+    protected boolean mBpfTimesAvailable;
+    final KernelCpuUidBpfMapReader mBpfReader;
     private long mMinTimeBetweenRead = DEFAULT_MIN_TIME_BETWEEN_READ;
     private long mLastReadTimeMs = 0;
 
@@ -73,9 +76,15 @@
         void onUidCpuTime(int uid, T time);
     }
 
-    KernelCpuUidTimeReader(KernelCpuProcStringReader reader, boolean throttle) {
+    KernelCpuUidTimeReader(KernelCpuProcStringReader reader, @Nullable KernelCpuUidBpfMapReader bpfReader, boolean throttle) {
         mReader = reader;
         mThrottle = throttle;
+        mBpfReader = bpfReader;
+        mBpfTimesAvailable = (mBpfReader != null);
+    }
+
+    KernelCpuUidTimeReader(KernelCpuProcStringReader reader, boolean throttle) {
+        this(reader, null, throttle);
     }
 
     /**
@@ -151,9 +160,13 @@
         }
         mLastTimes.put(startUid, null);
         mLastTimes.put(endUid, null);
-        final int firstIndex = mLastTimes.indexOfKey(startUid);
-        final int lastIndex = mLastTimes.indexOfKey(endUid);
+        int firstIndex = mLastTimes.indexOfKey(startUid);
+        int lastIndex = mLastTimes.indexOfKey(endUid);
         mLastTimes.removeAtRange(firstIndex, lastIndex - firstIndex + 1);
+
+        if (mBpfTimesAvailable) {
+            mBpfReader.removeUidsInRange(startUid, endUid);
+        }
     }
 
     /**
@@ -323,13 +336,13 @@
 
         public KernelCpuUidFreqTimeReader(boolean throttle) {
             this(UID_TIMES_PROC_FILE, KernelCpuProcStringReader.getFreqTimeReaderInstance(),
-                    throttle);
+                 KernelCpuUidBpfMapReader.getFreqTimeReaderInstance(), throttle);
         }
 
         @VisibleForTesting
         public KernelCpuUidFreqTimeReader(String procFile, KernelCpuProcStringReader reader,
-                boolean throttle) {
-            super(reader, throttle);
+                KernelCpuUidBpfMapReader bpfReader, boolean throttle) {
+            super(reader, bpfReader, throttle);
             mProcFilePath = Paths.get(procFile);
         }
 
@@ -370,19 +383,24 @@
             if (!mAllUidTimesAvailable) {
                 return null;
             }
-            final int oldMask = StrictMode.allowThreadDiskReadsMask();
-            try (BufferedReader reader = Files.newBufferedReader(mProcFilePath)) {
-                if (readFreqs(reader.readLine()) == 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);
                 }
-            } 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();
@@ -402,6 +420,21 @@
             return mCpuFreqs;
         }
 
+        private long[] readFreqsThroughBpf() {
+            if (!mBpfTimesAvailable || mBpfReader == null) {
+                return null;
+            }
+            mCpuFreqs = mBpfReader.getDataDimensions();
+            if (mCpuFreqs == null) {
+                return null;
+            }
+            mFreqCount = mCpuFreqs.length;
+            mCurTimes = new long[mFreqCount];
+            mDeltaTimes = new long[mFreqCount];
+            mBuffer = new long[mFreqCount + 1];
+            return mCpuFreqs;
+        }
+
         private long[] readFreqs(String line) {
             if (line == null || line.trim().isEmpty()) {
                 return null;
@@ -422,8 +455,45 @@
             return mCpuFreqs;
         }
 
+        private void processUidDelta(@Nullable Callback<long[]> cb) {
+            final int uid = (int) mBuffer[0];
+            long[] lastTimes = mLastTimes.get(uid);
+            if (lastTimes == null) {
+                lastTimes = new long[mFreqCount];
+                mLastTimes.put(uid, lastTimes);
+            }
+            copyToCurTimes();
+            boolean notify = false;
+            boolean valid = true;
+            for (int i = 0; i < mFreqCount; i++) {
+                // Unit is 10ms.
+                mDeltaTimes[i] = mCurTimes[i] - lastTimes[i];
+                if (mDeltaTimes[i] < 0) {
+                    Slog.e(mTag, "Negative delta from freq time proc: " + mDeltaTimes[i]);
+                    valid = false;
+                }
+                notify |= mDeltaTimes[i] > 0;
+            }
+            if (notify && valid) {
+                System.arraycopy(mCurTimes, 0, lastTimes, 0, mFreqCount);
+                if (cb != null) {
+                    cb.onUidCpuTime(uid, mDeltaTimes);
+                }
+            }
+        }
+
         @Override
         void readDeltaImpl(@Nullable Callback<long[]> cb) {
+            if (mBpfTimesAvailable) {
+                try (BpfMapIterator iter = mBpfReader.open(!mThrottle)) {
+                    if (checkPrecondition(iter)) {
+                        while (iter.getNextUid(mBuffer)) {
+                            processUidDelta(cb);
+                        }
+                        return;
+                    }
+                }
+            }
             try (ProcFileIterator iter = mReader.open(!mThrottle)) {
                 if (!checkPrecondition(iter)) {
                     return;
@@ -434,36 +504,24 @@
                         Slog.wtf(mTag, "Invalid line: " + buf.toString());
                         continue;
                     }
-                    final int uid = (int) mBuffer[0];
-                    long[] lastTimes = mLastTimes.get(uid);
-                    if (lastTimes == null) {
-                        lastTimes = new long[mFreqCount];
-                        mLastTimes.put(uid, lastTimes);
-                    }
-                    copyToCurTimes();
-                    boolean notify = false;
-                    boolean valid = true;
-                    for (int i = 0; i < mFreqCount; i++) {
-                        // Unit is 10ms.
-                        mDeltaTimes[i] = mCurTimes[i] - lastTimes[i];
-                        if (mDeltaTimes[i] < 0) {
-                            Slog.e(mTag, "Negative delta from freq time proc: " + mDeltaTimes[i]);
-                            valid = false;
-                        }
-                        notify |= mDeltaTimes[i] > 0;
-                    }
-                    if (notify && valid) {
-                        System.arraycopy(mCurTimes, 0, lastTimes, 0, mFreqCount);
-                        if (cb != null) {
-                            cb.onUidCpuTime(uid, mDeltaTimes);
-                        }
-                    }
+                    processUidDelta(cb);
                 }
             }
         }
 
         @Override
         void readAbsoluteImpl(Callback<long[]> cb) {
+            if (mBpfTimesAvailable) {
+                try (BpfMapIterator iter = mBpfReader.open(!mThrottle)) {
+                    if (checkPrecondition(iter)) {
+                        while (iter.getNextUid(mBuffer)) {
+                            copyToCurTimes();
+                            cb.onUidCpuTime((int) mBuffer[0], mCurTimes);
+                        }
+                        return;
+                    }
+                }
+            }
             try (ProcFileIterator iter = mReader.open(!mThrottle)) {
                 if (!checkPrecondition(iter)) {
                     return;
@@ -481,11 +539,24 @@
         }
 
         private void copyToCurTimes() {
+            long factor = mBpfTimesAvailable ? 1 : 10;
             for (int i = 0; i < mFreqCount; i++) {
-                mCurTimes[i] = mBuffer[i + 1] * 10;
+                mCurTimes[i] = mBuffer[i + 1] * factor;
             }
         }
 
+        private boolean checkPrecondition(BpfMapIterator iter) {
+            if (iter == null) {
+                mBpfTimesAvailable = false;
+                return false;
+            }
+            if (mCpuFreqs != null) {
+                return true;
+            }
+            mBpfTimesAvailable = (readFreqsThroughBpf() != null);
+            return mBpfTimesAvailable;
+        }
+
         private boolean checkPrecondition(ProcFileIterator iter) {
             if (iter == null || !iter.hasNextLine()) {
                 // Error logged in KernelCpuProcStringReader.
@@ -544,16 +615,43 @@
         private long[] mBuffer;
 
         public KernelCpuUidActiveTimeReader(boolean throttle) {
-            super(KernelCpuProcStringReader.getActiveTimeReaderInstance(), throttle);
+            super(KernelCpuProcStringReader.getActiveTimeReaderInstance(),
+                  KernelCpuUidBpfMapReader.getActiveTimeReaderInstance(), throttle);
         }
 
         @VisibleForTesting
-        public KernelCpuUidActiveTimeReader(KernelCpuProcStringReader reader, boolean throttle) {
-            super(reader, throttle);
+        public KernelCpuUidActiveTimeReader(KernelCpuProcStringReader reader, KernelCpuUidBpfMapReader bpfReader, boolean throttle) {
+            super(reader, bpfReader, throttle);
+        }
+
+        private void processUidDelta(@Nullable Callback<Long> cb) {
+            int uid = (int) mBuffer[0];
+            long cpuActiveTime = sumActiveTime(mBuffer, mBpfTimesAvailable ? 1 : 10);
+            if (cpuActiveTime > 0) {
+                long delta = cpuActiveTime - mLastTimes.get(uid, 0L);
+                if (delta > 0) {
+                    mLastTimes.put(uid, cpuActiveTime);
+                    if (cb != null) {
+                        cb.onUidCpuTime(uid, delta);
+                    }
+                } else if (delta < 0) {
+                    Slog.e(mTag, "Negative delta from active time proc: " + delta);
+                }
+            }
         }
 
         @Override
         void readDeltaImpl(@Nullable Callback<Long> cb) {
+            if (mBpfTimesAvailable) {
+                try (BpfMapIterator iter = mBpfReader.open(!mThrottle)) {
+                    if (checkPrecondition(iter)) {
+                        while (iter.getNextUid(mBuffer)) {
+                            processUidDelta(cb);
+                        }
+                        return;
+                    }
+                }
+            }
             try (ProcFileIterator iter = mReader.open(!mThrottle)) {
                 if (!checkPrecondition(iter)) {
                     return;
@@ -564,25 +662,30 @@
                         Slog.wtf(mTag, "Invalid line: " + buf.toString());
                         continue;
                     }
-                    int uid = (int) mBuffer[0];
-                    long cpuActiveTime = sumActiveTime(mBuffer);
-                    if (cpuActiveTime > 0) {
-                        long delta = cpuActiveTime - mLastTimes.get(uid, 0L);
-                        if (delta > 0) {
-                            mLastTimes.put(uid, cpuActiveTime);
-                            if (cb != null) {
-                                cb.onUidCpuTime(uid, delta);
-                            }
-                        } else if (delta < 0) {
-                            Slog.e(mTag, "Negative delta from active time proc: " + delta);
-                        }
-                    }
+                    processUidDelta(cb);
                 }
             }
         }
 
+        private void processUidAbsolute(@Nullable Callback<Long> cb) {
+            long cpuActiveTime = sumActiveTime(mBuffer, mBpfTimesAvailable ? 1 : 10);
+            if (cpuActiveTime > 0) {
+                cb.onUidCpuTime((int) mBuffer[0], cpuActiveTime);
+            }
+        }
+
         @Override
         void readAbsoluteImpl(Callback<Long> cb) {
+            if (mBpfTimesAvailable) {
+                try (BpfMapIterator iter = mBpfReader.open(!mThrottle)) {
+                    if (checkPrecondition(iter)) {
+                        while (iter.getNextUid(mBuffer)) {
+                            processUidAbsolute(cb);
+                        }
+                        return;
+                    }
+                }
+            }
             try (ProcFileIterator iter = mReader.open(!mThrottle)) {
                 if (!checkPrecondition(iter)) {
                     return;
@@ -593,23 +696,38 @@
                         Slog.wtf(mTag, "Invalid line: " + buf.toString());
                         continue;
                     }
-                    long cpuActiveTime = sumActiveTime(mBuffer);
-                    if (cpuActiveTime > 0) {
-                        cb.onUidCpuTime((int) mBuffer[0], cpuActiveTime);
-                    }
+                    processUidAbsolute(cb);
                 }
             }
         }
 
-        private static long sumActiveTime(long[] times) {
+        private static long sumActiveTime(long[] times, double factor) {
             // UID is stored at times[0].
             double sum = 0;
             for (int i = 1; i < times.length; i++) {
-                sum += (double) times[i] * 10 / i; // Unit is 10ms.
+                sum += (double) times[i] * factor / i; // Unit is 10ms.
             }
             return (long) sum;
         }
 
+        private boolean checkPrecondition(BpfMapIterator iter) {
+            if (iter == null) {
+                mBpfTimesAvailable = false;
+                return false;
+            }
+            if (mCores > 0) {
+                return true;
+            }
+            long[] cores = mBpfReader.getDataDimensions();
+            if (cores == null || cores.length < 1) {
+                mBpfTimesAvailable = false;
+                return false;
+            }
+            mCores = (int) cores[0];
+            mBuffer = new long[mCores + 1];
+            return true;
+        }
+
         private boolean checkPrecondition(ProcFileIterator iter) {
             if (iter == null || !iter.hasNextLine()) {
                 // Error logged in KernelCpuProcStringReader.
@@ -668,16 +786,54 @@
         private long[] mDeltaTime;
 
         public KernelCpuUidClusterTimeReader(boolean throttle) {
-            super(KernelCpuProcStringReader.getClusterTimeReaderInstance(), throttle);
+            super(KernelCpuProcStringReader.getClusterTimeReaderInstance(),
+                  KernelCpuUidBpfMapReader.getClusterTimeReaderInstance(), throttle);
         }
 
         @VisibleForTesting
-        public KernelCpuUidClusterTimeReader(KernelCpuProcStringReader reader, boolean throttle) {
-            super(reader, throttle);
+        public KernelCpuUidClusterTimeReader(KernelCpuProcStringReader reader,
+                                             KernelCpuUidBpfMapReader bpfReader, boolean throttle) {
+            super(reader, bpfReader, throttle);
+        }
+
+        void processUidDelta(@Nullable Callback<long[]> cb) {
+            int uid = (int) mBuffer[0];
+            long[] lastTimes = mLastTimes.get(uid);
+            if (lastTimes == null) {
+                lastTimes = new long[mNumClusters];
+                mLastTimes.put(uid, lastTimes);
+            }
+            sumClusterTime();
+            boolean valid = true;
+            boolean notify = false;
+            for (int i = 0; i < mNumClusters; i++) {
+                mDeltaTime[i] = mCurTime[i] - lastTimes[i];
+                if (mDeltaTime[i] < 0) {
+                    Slog.e(mTag, "Negative delta from cluster time proc: " + mDeltaTime[i]);
+                    valid = false;
+                }
+                notify |= mDeltaTime[i] > 0;
+            }
+            if (notify && valid) {
+                System.arraycopy(mCurTime, 0, lastTimes, 0, mNumClusters);
+                if (cb != null) {
+                    cb.onUidCpuTime(uid, mDeltaTime);
+                }
+            }
         }
 
         @Override
         void readDeltaImpl(@Nullable Callback<long[]> cb) {
+            if (mBpfTimesAvailable) {
+                try (BpfMapIterator iter = mBpfReader.open(!mThrottle)) {
+                    if (checkPrecondition(iter)) {
+                        while (iter.getNextUid(mBuffer)) {
+                            processUidDelta(cb);
+                        }
+                        return;
+                    }
+                }
+            }
             try (ProcFileIterator iter = mReader.open(!mThrottle)) {
                 if (!checkPrecondition(iter)) {
                     return;
@@ -688,35 +844,24 @@
                         Slog.wtf(mTag, "Invalid line: " + buf.toString());
                         continue;
                     }
-                    int uid = (int) mBuffer[0];
-                    long[] lastTimes = mLastTimes.get(uid);
-                    if (lastTimes == null) {
-                        lastTimes = new long[mNumClusters];
-                        mLastTimes.put(uid, lastTimes);
-                    }
-                    sumClusterTime();
-                    boolean valid = true;
-                    boolean notify = false;
-                    for (int i = 0; i < mNumClusters; i++) {
-                        mDeltaTime[i] = mCurTime[i] - lastTimes[i];
-                        if (mDeltaTime[i] < 0) {
-                            Slog.e(mTag, "Negative delta from cluster time proc: " + mDeltaTime[i]);
-                            valid = false;
-                        }
-                        notify |= mDeltaTime[i] > 0;
-                    }
-                    if (notify && valid) {
-                        System.arraycopy(mCurTime, 0, lastTimes, 0, mNumClusters);
-                        if (cb != null) {
-                            cb.onUidCpuTime(uid, mDeltaTime);
-                        }
-                    }
+                    processUidDelta(cb);
                 }
             }
         }
 
         @Override
         void readAbsoluteImpl(Callback<long[]> cb) {
+            if (mBpfTimesAvailable) {
+                try (BpfMapIterator iter = mBpfReader.open(!mThrottle)) {
+                    if (checkPrecondition(iter)) {
+                        while (iter.getNextUid(mBuffer)) {
+                            sumClusterTime();
+                            cb.onUidCpuTime((int) mBuffer[0], mCurTime);
+                        }
+                        return;
+                    }
+                }
+            }
             try (ProcFileIterator iter = mReader.open(!mThrottle)) {
                 if (!checkPrecondition(iter)) {
                     return;
@@ -734,17 +879,45 @@
         }
 
         private void sumClusterTime() {
+            double factor = mBpfTimesAvailable ? 1 : 10;
             // UID is stored at mBuffer[0].
             int core = 1;
             for (int i = 0; i < mNumClusters; i++) {
                 double sum = 0;
                 for (int j = 1; j <= mCoresOnClusters[i]; j++) {
-                    sum += (double) mBuffer[core++] * 10 / j; // Unit is 10ms.
+                    sum += (double) mBuffer[core++] * factor / j; // Unit is 10ms.
                 }
                 mCurTime[i] = (long) sum;
             }
         }
 
+        private boolean checkPrecondition(BpfMapIterator iter) {
+            if (iter == null) {
+                mBpfTimesAvailable = false;
+                return false;
+            }
+            if (mNumClusters > 0) {
+                return true;
+            }
+            long[] coresOnClusters = mBpfReader.getDataDimensions();
+            if (coresOnClusters == null || coresOnClusters.length < 1) {
+                mBpfTimesAvailable = false;
+                return false;
+            }
+            mNumClusters = coresOnClusters.length;
+            mCoresOnClusters = new int[mNumClusters];
+            int cores = 0;
+            for (int i = 0; i < mNumClusters; i++) {
+                mCoresOnClusters[i] = (int) coresOnClusters[i];
+                cores += mCoresOnClusters[i];
+            }
+            mNumCores = cores;
+            mBuffer = new long[cores + 1];
+            mCurTime = new long[mNumClusters];
+            mDeltaTime = new long[mNumClusters];
+            return true;
+        }
+
         private boolean checkPrecondition(ProcFileIterator iter) {
             if (iter == null || !iter.hasNextLine()) {
                 // Error logged in KernelCpuProcStringReader.
diff --git a/core/java/com/android/internal/os/KernelSingleUidTimeReader.java b/core/java/com/android/internal/os/KernelSingleUidTimeReader.java
index 3c43a11..fc0ce6f 100644
--- a/core/java/com/android/internal/os/KernelSingleUidTimeReader.java
+++ b/core/java/com/android/internal/os/KernelSingleUidTimeReader.java
@@ -53,6 +53,8 @@
     private int mReadErrorCounter;
     @GuardedBy("this")
     private boolean mSingleUidCpuTimesAvailable = true;
+    @GuardedBy("this")
+    private boolean mBpfTimesAvailable = true;
     // We use the freq count obtained from /proc/uid_time_in_state to decide how many longs
     // to read from each /proc/uid/<uid>/time_in_state. On the first read, verify if this is
     // correct and if not, set {@link #mSingleUidCpuTimesAvailable} to false. This flag will
@@ -62,6 +64,8 @@
 
     private final Injector mInjector;
 
+    private static final native boolean canReadBpfTimes();
+
     KernelSingleUidTimeReader(int cpuFreqsCount) {
         this(cpuFreqsCount, new Injector());
     }
@@ -83,6 +87,18 @@
             if (!mSingleUidCpuTimesAvailable) {
                 return null;
             }
+            if (mBpfTimesAvailable) {
+                final long[] cpuTimesMs = mInjector.readBpfData(uid);
+                if (cpuTimesMs.length == 0) {
+                    mBpfTimesAvailable = false;
+                } else if (!mCpuFreqsCountVerified && cpuTimesMs.length != mCpuFreqsCount) {
+                    mSingleUidCpuTimesAvailable = false;
+                    return null;
+                } else {
+                    mCpuFreqsCountVerified = true;
+                    return computeDelta(uid, cpuTimesMs);
+                }
+            }
             // Read total cpu times from the proc file.
             final String procFile = new StringBuilder(PROC_FILE_DIR)
                     .append(uid)
@@ -230,6 +246,8 @@
         public byte[] readData(String procFile) throws IOException {
             return Files.readAllBytes(Paths.get(procFile));
         }
+
+        public native long[] readBpfData(int uid);
     }
 
     @VisibleForTesting
diff --git a/core/java/com/android/internal/os/RuntimeInit.java b/core/java/com/android/internal/os/RuntimeInit.java
index 518911e..0e9c2c4 100644
--- a/core/java/com/android/internal/os/RuntimeInit.java
+++ b/core/java/com/android/internal/os/RuntimeInit.java
@@ -19,8 +19,6 @@
 import android.app.ActivityManager;
 import android.app.ActivityThread;
 import android.app.ApplicationErrorReport;
-import android.compat.annotation.ChangeId;
-import android.compat.annotation.EnabledAfter;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.type.DefaultMimeMapFactory;
 import android.os.Build;
@@ -36,7 +34,6 @@
 import com.android.internal.logging.AndroidConfig;
 import com.android.server.NetworkManagementSocketTagger;
 
-import dalvik.annotation.compat.VersionCodes;
 import dalvik.system.RuntimeHooks;
 import dalvik.system.ThreadPrioritySetter;
 import dalvik.system.VMRuntime;
@@ -67,18 +64,8 @@
 
     private static volatile boolean mCrashing = false;
 
-    /**
-     * Native heap allocations will now have a non-zero tag in the most significant byte.
-     * See
-     * <a href="https://source.android.com/devices/tech/debug/tagged-pointers">https://source.android.com/devices/tech/debug/tagged-pointers</a>.
-     */
-    @ChangeId
-    @EnabledAfter(targetSdkVersion = VersionCodes.Q)
-    private static final long NATIVE_HEAP_POINTER_TAGGING = 135754954; // This is a bug id.
-
     private static final native void nativeFinishInit();
     private static final native void nativeSetExitWithoutCleanup(boolean exitWithoutCleanup);
-    private static native void nativeDisableHeapPointerTagging();
 
     private static int Clog_e(String tag, String msg, Throwable tr) {
         return Log.printlns(Log.LOG_ID_CRASH, Log.ERROR, tag, msg, tr);
@@ -411,20 +398,6 @@
         if (DEBUG) Slog.d(TAG, "Leaving RuntimeInit!");
     }
 
-    private static void maybeDisableHeapPointerTagging(long[] disabledCompatChanges) {
-        // Heap tagging needs to be disabled before any additional threads are created, but the
-        // AppCompat framework is not initialized enough at this point.
-        // Check if the change is enabled manually.
-        if (disabledCompatChanges != null) {
-            for (int i = 0; i < disabledCompatChanges.length; i++) {
-                if (disabledCompatChanges[i] == NATIVE_HEAP_POINTER_TAGGING) {
-                    nativeDisableHeapPointerTagging();
-                    break;
-                }
-            }
-        }
-    }
-
     protected static Runnable applicationInit(int targetSdkVersion, long[] disabledCompatChanges,
             String[] argv, ClassLoader classLoader) {
         // If the application calls System.exit(), terminate the process
@@ -437,8 +410,6 @@
         VMRuntime.getRuntime().setTargetSdkVersion(targetSdkVersion);
         VMRuntime.getRuntime().setDisabledCompatChanges(disabledCompatChanges);
 
-        maybeDisableHeapPointerTagging(disabledCompatChanges);
-
         final Arguments args = new Arguments(argv);
 
         // The end of of the RuntimeInit event (see #zygoteInit).
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index e2985566..94924a5 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -24,7 +24,6 @@
 import android.net.Credentials;
 import android.net.LocalServerSocket;
 import android.net.LocalSocket;
-import android.os.Build;
 import android.os.FactoryTest;
 import android.os.IVold;
 import android.os.Process;
@@ -122,6 +121,25 @@
      */
     public static final int DISABLE_TEST_API_ENFORCEMENT_POLICY = 1 << 18;
 
+    public static final int MEMORY_TAG_LEVEL_MASK = (1 << 19) | (1 << 20);
+    /**
+     * Enable pointer tagging in this process.
+     * Tags are checked during memory deallocation, but not on access.
+     * TBI stands for Top-Byte-Ignore, an ARM CPU feature.
+     * {@link https://developer.arm.com/docs/den0024/latest/the-memory-management-unit/translation-table-configuration/virtual-address-tagging}
+     */
+    public static final int MEMORY_TAG_LEVEL_TBI = 1 << 19;
+
+    /**
+     * Enable asynchronous memory tag checks in this process.
+     */
+    public static final int MEMORY_TAG_LEVEL_ASYNC = 2 << 19;
+
+    /**
+     * Enable synchronous memory tag checks in this process.
+     */
+    public static final int MEMORY_TAG_LEVEL_SYNC = 3 << 19;
+
     /** No external storage should be mounted. */
     public static final int MOUNT_EXTERNAL_NONE = IVold.REMOUNT_MODE_NONE;
     /** Default external storage should be mounted. */
@@ -272,18 +290,14 @@
     static int forkAndSpecialize(int uid, int gid, int[] gids, int runtimeFlags,
             int[][] rlimits, int mountExternal, String seInfo, String niceName, int[] fdsToClose,
             int[] fdsToIgnore, boolean startChildZygote, String instructionSet, String appDataDir,
-            int targetSdkVersion, boolean isTopApp, String[] pkgDataInfoList) {
+            boolean isTopApp, String[] pkgDataInfoList) {
         ZygoteHooks.preFork();
 
         int pid = nativeForkAndSpecialize(
                 uid, gid, gids, runtimeFlags, rlimits, mountExternal, seInfo, niceName, fdsToClose,
                 fdsToIgnore, startChildZygote, instructionSet, appDataDir, isTopApp,
                 pkgDataInfoList);
-        // Enable tracing as soon as possible for the child process.
         if (pid == 0) {
-            Zygote.disableExecuteOnly(targetSdkVersion);
-            Trace.setTracingEnabled(true, runtimeFlags);
-
             // Note that this event ends at the end of handleChildProc,
             Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "PostFork");
         }
@@ -334,9 +348,6 @@
                 niceName, startChildZygote, instructionSet, appDataDir, isTopApp,
                 pkgDataInfoList);
 
-        // Enable tracing as soon as possible for the child process.
-        Trace.setTracingEnabled(true, runtimeFlags);
-
         // Note that this event ends at the end of handleChildProc.
         Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "PostFork");
 
@@ -393,11 +404,6 @@
                 uid, gid, gids, runtimeFlags, rlimits,
                 permittedCapabilities, effectiveCapabilities);
 
-        // Enable tracing as soon as we enter the system_server.
-        if (pid == 0) {
-            Trace.setTracingEnabled(true, runtimeFlags);
-        }
-
         // Set the Java Language thread priority to the default value for new apps.
         Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
 
@@ -687,8 +693,6 @@
                                  args.mInstructionSet, args.mAppDataDir, args.mIsTopApp,
                                  args.mPkgDataInfoList);
 
-            disableExecuteOnly(args.mTargetSdkVersion);
-
             Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
 
             return ZygoteInit.zygoteInit(args.mTargetSdkVersion,
@@ -768,17 +772,6 @@
     }
 
     /**
-     * Mark execute-only segments of libraries read+execute for apps with targetSdkVersion<Q.
-     */
-    private static void disableExecuteOnly(int targetSdkVersion) {
-        if ((targetSdkVersion < Build.VERSION_CODES.Q) && !nativeDisableExecuteOnly()) {
-            Log.e("Zygote", "Failed to set libraries to read+execute.");
-        }
-    }
-
-    private static native boolean nativeDisableExecuteOnly();
-
-    /**
      * @return  Raw file descriptors for the read-end of USAP reporting pipes.
      */
     static int[] getUsapPipeFDs() {
diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java
index c91c661..4949811 100644
--- a/core/java/com/android/internal/os/ZygoteConnection.java
+++ b/core/java/com/android/internal/os/ZygoteConnection.java
@@ -257,8 +257,8 @@
         pid = Zygote.forkAndSpecialize(parsedArgs.mUid, parsedArgs.mGid, parsedArgs.mGids,
                 parsedArgs.mRuntimeFlags, rlimits, parsedArgs.mMountExternal, parsedArgs.mSeInfo,
                 parsedArgs.mNiceName, fdsToClose, fdsToIgnore, parsedArgs.mStartChildZygote,
-                parsedArgs.mInstructionSet, parsedArgs.mAppDataDir, parsedArgs.mTargetSdkVersion,
-                parsedArgs.mIsTopApp, parsedArgs.mPkgDataInfoList);
+                parsedArgs.mInstructionSet, parsedArgs.mAppDataDir, parsedArgs.mIsTopApp,
+                parsedArgs.mPkgDataInfoList);
 
         try {
             if (pid == 0) {
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 7b6262b..a47bd17 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -653,17 +653,18 @@
         String classPathForElement = "";
         boolean compiledSomething = false;
         for (String classPathElement : classPathElements) {
-            // System server is fully AOTed and never profiled
-            // for profile guided compilation.
+            // We default to the verify filter because the compilation will happen on /data and
+            // system server cannot load executable code outside /system.
             String systemServerFilter = SystemProperties.get(
-                    "dalvik.vm.systemservercompilerfilter", "speed");
+                    "dalvik.vm.systemservercompilerfilter", "verify");
 
+            String classLoaderContext =
+                        getSystemServerClassLoaderContext(classPathForElement);
             int dexoptNeeded;
             try {
                 dexoptNeeded = DexFile.getDexOptNeeded(
                         classPathElement, instructionSet, systemServerFilter,
-                        null /* classLoaderContext */, false /* newProfile */,
-                        false /* downgrade */);
+                        classLoaderContext, false /* newProfile */, false /* downgrade */);
             } catch (FileNotFoundException ignored) {
                 // Do not add to the classpath.
                 Log.w(TAG, "Missing classpath element for system server: " + classPathElement);
@@ -684,8 +685,6 @@
                 final String compilerFilter = systemServerFilter;
                 final String uuid = StorageManager.UUID_PRIVATE_INTERNAL;
                 final String seInfo = null;
-                final String classLoaderContext =
-                        getSystemServerClassLoaderContext(classPathForElement);
                 final int targetSdkVersion = 0;  // SystemServer targets the system's SDK version
                 try {
                     installd.dexopt(classPathElement, Process.SYSTEM_UID, packageName,
@@ -788,6 +787,10 @@
             Zygote.applyDebuggerSystemProperty(parsedArgs);
             Zygote.applyInvokeWithSystemProperty(parsedArgs);
 
+            /* Enable pointer tagging in the system server unconditionally. Hardware support for
+             * this is present in all ARMv8 CPUs; this flag has no effect on other platforms. */
+            parsedArgs.mRuntimeFlags |= Zygote.MEMORY_TAG_LEVEL_TBI;
+
             if (shouldProfileSystemServer()) {
                 parsedArgs.mRuntimeFlags |= Zygote.PROFILE_SYSTEM_SERVER;
             }
@@ -914,10 +917,6 @@
             bootTimingsTraceLog.traceEnd(); // PostZygoteInitGC
 
             bootTimingsTraceLog.traceEnd(); // ZygoteInit
-            // Disable tracing so that forked processes do not inherit stale tracing tags from
-            // Zygote.
-            Trace.setTracingEnabled(false, 0);
-
 
             Zygote.initNativeState(isPrimaryZygote);
 
diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java
index adb4036..36025e3 100644
--- a/core/java/com/android/internal/policy/DecorView.java
+++ b/core/java/com/android/internal/policy/DecorView.java
@@ -1627,9 +1627,12 @@
 
         int opacity = PixelFormat.OPAQUE;
         final WindowConfiguration winConfig = getResources().getConfiguration().windowConfiguration;
+        // TODO(b/149585281) remove when root task has the correct bounds for freeform
+        final boolean renderShadowsInCompositor = mWindow.mRenderShadowsInCompositor
+                && winConfig.getWindowingMode() != WINDOWING_MODE_FREEFORM;
         // If we draw shadows in the compositor we don't need to force the surface to be
         // translucent.
-        if (winConfig.hasWindowShadow() && !mWindow.mRenderShadowsInCompositor) {
+        if (winConfig.hasWindowShadow() && !renderShadowsInCompositor) {
             // If the window has a shadow, it must be translucent.
             opacity = PixelFormat.TRANSLUCENT;
         } else{
@@ -2414,16 +2417,18 @@
     }
 
     private void updateElevation() {
+        final int windowingMode =
+                getResources().getConfiguration().windowConfiguration.getWindowingMode();
+        final boolean renderShadowsInCompositor = mWindow.mRenderShadowsInCompositor
+                && windowingMode != WINDOWING_MODE_FREEFORM;
         // If rendering shadows in the compositor, don't set an elevation on the view
-        if (mWindow.mRenderShadowsInCompositor) {
+        if (renderShadowsInCompositor) {
             return;
         }
         float elevation = 0;
         final boolean wasAdjustedForStack = mElevationAdjustedForStack;
         // Do not use a shadow when we are in resizing mode (mBackdropFrameRenderer not null)
         // since the shadow is bound to the content size and not the target size.
-        final int windowingMode =
-                getResources().getConfiguration().windowConfiguration.getWindowingMode();
         if ((windowingMode == WINDOWING_MODE_FREEFORM) && !isResizing()) {
             elevation = hasWindowFocus() ?
                     DECOR_SHADOW_FOCUSED_HEIGHT_IN_DIP : DECOR_SHADOW_UNFOCUSED_HEIGHT_IN_DIP;
diff --git a/core/java/com/android/internal/policy/DockedDividerUtils.java b/core/java/com/android/internal/policy/DockedDividerUtils.java
index c68e506..b61b9de 100644
--- a/core/java/com/android/internal/policy/DockedDividerUtils.java
+++ b/core/java/com/android/internal/policy/DockedDividerUtils.java
@@ -16,14 +16,15 @@
 
 package com.android.internal.policy;
 
-import android.graphics.Rect;
-
 import static android.view.WindowManager.DOCKED_BOTTOM;
 import static android.view.WindowManager.DOCKED_INVALID;
 import static android.view.WindowManager.DOCKED_LEFT;
 import static android.view.WindowManager.DOCKED_RIGHT;
 import static android.view.WindowManager.DOCKED_TOP;
 
+import android.content.res.Resources;
+import android.graphics.Rect;
+
 /**
  * Utility functions for docked stack divider used by both window manager and System UI.
  *
@@ -105,23 +106,6 @@
         return start + (end - start) / 2 - dividerSize / 2;
     }
 
-    public static int getDockSideFromCreatedMode(boolean dockOnTopOrLeft,
-            boolean isHorizontalDivision) {
-        if (dockOnTopOrLeft) {
-            if (isHorizontalDivision) {
-                return DOCKED_TOP;
-            } else {
-                return DOCKED_LEFT;
-            }
-        } else {
-            if (isHorizontalDivision) {
-                return DOCKED_BOTTOM;
-            } else {
-                return DOCKED_RIGHT;
-            }
-        }
-    }
-
     public static int invertDockSide(int dockSide) {
         switch (dockSide) {
             case DOCKED_LEFT:
@@ -136,4 +120,21 @@
                 return DOCKED_INVALID;
         }
     }
+
+    /** Returns the inset distance from the divider window edge to the dividerview. */
+    public static int getDividerInsets(Resources res) {
+        return res.getDimensionPixelSize(com.android.internal.R.dimen.docked_stack_divider_insets);
+    }
+
+    /** Returns the size of the divider */
+    public static int getDividerSize(Resources res, int dividerInsets) {
+        final int windowWidth = res.getDimensionPixelSize(
+                com.android.internal.R.dimen.docked_stack_divider_thickness);
+        return windowWidth - 2 * dividerInsets;
+    }
+
+    /** Returns the docked-stack side */
+    public static int getDockSide(int displayWidth, int displayHeight) {
+        return displayWidth > displayHeight ? DOCKED_LEFT : DOCKED_TOP;
+    }
 }
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
index 46d7f4e..24222d3 100644
--- a/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -335,7 +335,7 @@
         super(context);
         mLayoutInflater = LayoutInflater.from(context);
         mRenderShadowsInCompositor = Settings.Global.getInt(context.getContentResolver(),
-                DEVELOPMENT_RENDER_SHADOWS_IN_COMPOSITOR, 0) != 0;
+                DEVELOPMENT_RENDER_SHADOWS_IN_COMPOSITOR, 1) != 0;
     }
 
     /**
@@ -1821,15 +1821,20 @@
     }
 
     private ViewRootImpl getViewRootImpl() {
-        if (mDecor != null) {
-            ViewRootImpl viewRootImpl = mDecor.getViewRootImpl();
-            if (viewRootImpl != null) {
-                return viewRootImpl;
-            }
+        ViewRootImpl viewRootImpl = getViewRootImplOrNull();
+        if (viewRootImpl != null) {
+            return viewRootImpl;
         }
         throw new IllegalStateException("view not added");
     }
 
+    private ViewRootImpl getViewRootImplOrNull() {
+        if (mDecor == null) {
+            return null;
+        }
+        return mDecor.getViewRootImpl();
+    }
+
     /**
      * Request that key events come to this activity. Use this if your activity
      * has no views with focus, but the activity still wants a chance to process
@@ -3900,7 +3905,7 @@
 
     @Override
     public void setDecorFitsSystemWindows(boolean decorFitsSystemWindows) {
-        ViewRootImpl impl = getViewRootImpl();
+        ViewRootImpl impl = getViewRootImplOrNull();
         OnContentApplyWindowInsetsListener listener = decorFitsSystemWindows
                 ? createDefaultContentWindowInsetsListener()
                 : null;
diff --git a/core/java/com/android/internal/policy/TaskResizingAlgorithm.java b/core/java/com/android/internal/policy/TaskResizingAlgorithm.java
new file mode 100644
index 0000000..1fce098
--- /dev/null
+++ b/core/java/com/android/internal/policy/TaskResizingAlgorithm.java
@@ -0,0 +1,179 @@
+/*
+ * 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.internal.policy;
+
+import android.annotation.IntDef;
+import android.graphics.Point;
+import android.graphics.Rect;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Given a move coordinate (x, y), the original taks bounds and relevant details, calculate the new
+ * bounds.
+ *
+ * @hide
+ */
+public class TaskResizingAlgorithm {
+
+    @IntDef(flag = true,
+            value = {
+                    CTRL_NONE,
+                    CTRL_LEFT,
+                    CTRL_RIGHT,
+                    CTRL_TOP,
+                    CTRL_BOTTOM
+            })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface CtrlType {}
+
+    public static final int CTRL_NONE   = 0x0;
+    public static final int CTRL_LEFT   = 0x1;
+    public static final int CTRL_RIGHT  = 0x2;
+    public static final int CTRL_TOP    = 0x4;
+    public static final int CTRL_BOTTOM = 0x8;
+
+    // The minimal aspect ratio which needs to be met to count as landscape (or 1/.. for portrait).
+    // Note: We do not use the 1.33 from the CDD here since the user is allowed to use what ever
+    // aspect he desires.
+    @VisibleForTesting
+    public static final float MIN_ASPECT = 1.2f;
+
+    /**
+     * Given a (x, y) point and its original starting down point and its original bounds, calculate
+     * and return a new resized bound.
+     * @param x the new moved X point.
+     * @param y the new moved Y point.
+     * @param startDragX the original starting X point.
+     * @param startDragY the original starting Y point.
+     * @param originalBounds the original bound before resize.
+     * @param ctrlType The type of resize operation.
+     * @param minVisibleWidth The minimal width required for the new size.
+     * @param minVisibleHeight The minimal height required for the new size.
+     * @param maxVisibleSize The maximum size allowed.
+     * @param preserveOrientation
+     * @param startOrientationWasLandscape
+     * @return
+     */
+    public static Rect resizeDrag(float x, float y, float startDragX, float startDragY,
+            Rect originalBounds, int ctrlType, int minVisibleWidth, int minVisibleHeight,
+            Point maxVisibleSize, boolean preserveOrientation,
+            boolean startOrientationWasLandscape) {
+        // This is a resizing operation.
+        // We need to keep various constraints:
+        // 1. mMinVisible[Width/Height] <= [width/height] <= mMaxVisibleSize.[x/y]
+        // 2. The orientation is kept - if required.
+        final int deltaX = Math.round(x - startDragX);
+        final int deltaY = Math.round(y - startDragY);
+        int left = originalBounds.left;
+        int top = originalBounds.top;
+        int right = originalBounds.right;
+        int bottom = originalBounds.bottom;
+
+        // Calculate the resulting width and height of the drag operation.
+        int width = right - left;
+        int height = bottom - top;
+        if ((ctrlType & CTRL_LEFT) != 0) {
+            width = Math.max(minVisibleWidth, width - deltaX);
+        } else if ((ctrlType & CTRL_RIGHT) != 0) {
+            width = Math.max(minVisibleWidth, width + deltaX);
+        }
+        if ((ctrlType & CTRL_TOP) != 0) {
+            height = Math.max(minVisibleHeight, height - deltaY);
+        } else if ((ctrlType & CTRL_BOTTOM) != 0) {
+            height = Math.max(minVisibleHeight, height + deltaY);
+        }
+
+        // If we have to preserve the orientation - check that we are doing so.
+        final float aspect = (float) width / (float) height;
+        if (preserveOrientation && ((startOrientationWasLandscape && aspect < MIN_ASPECT)
+                || (!startOrientationWasLandscape && aspect > (1.0 / MIN_ASPECT)))) {
+            // Calculate 2 rectangles fulfilling all requirements for either X or Y being the major
+            // drag axis. What ever is producing the bigger rectangle will be chosen.
+            int width1;
+            int width2;
+            int height1;
+            int height2;
+            if (startOrientationWasLandscape) {
+                // Assuming that the width is our target we calculate the height.
+                width1 = Math.max(minVisibleWidth, Math.min(maxVisibleSize.x, width));
+                height1 = Math.min(height, Math.round((float) width1 / MIN_ASPECT));
+                if (height1 < minVisibleHeight) {
+                    // If the resulting height is too small we adjust to the minimal size.
+                    height1 = minVisibleHeight;
+                    width1 = Math.max(minVisibleWidth,
+                            Math.min(maxVisibleSize.x, Math.round((float) height1 * MIN_ASPECT)));
+                }
+                // Assuming that the height is our target we calculate the width.
+                height2 = Math.max(minVisibleHeight, Math.min(maxVisibleSize.y, height));
+                width2 = Math.max(width, Math.round((float) height2 * MIN_ASPECT));
+                if (width2 < minVisibleWidth) {
+                    // If the resulting width is too small we adjust to the minimal size.
+                    width2 = minVisibleWidth;
+                    height2 = Math.max(minVisibleHeight,
+                            Math.min(maxVisibleSize.y, Math.round((float) width2 / MIN_ASPECT)));
+                }
+            } else {
+                // Assuming that the width is our target we calculate the height.
+                width1 = Math.max(minVisibleWidth, Math.min(maxVisibleSize.x, width));
+                height1 = Math.max(height, Math.round((float) width1 * MIN_ASPECT));
+                if (height1 < minVisibleHeight) {
+                    // If the resulting height is too small we adjust to the minimal size.
+                    height1 = minVisibleHeight;
+                    width1 = Math.max(minVisibleWidth,
+                            Math.min(maxVisibleSize.x, Math.round((float) height1 / MIN_ASPECT)));
+                }
+                // Assuming that the height is our target we calculate the width.
+                height2 = Math.max(minVisibleHeight, Math.min(maxVisibleSize.y, height));
+                width2 = Math.min(width, Math.round((float) height2 / MIN_ASPECT));
+                if (width2 < minVisibleWidth) {
+                    // If the resulting width is too small we adjust to the minimal size.
+                    width2 = minVisibleWidth;
+                    height2 = Math.max(minVisibleHeight,
+                            Math.min(maxVisibleSize.y, Math.round((float) width2 * MIN_ASPECT)));
+                }
+            }
+
+            // Use the bigger of the two rectangles if the major change was positive, otherwise
+            // do the opposite.
+            final boolean grows = width > (right - left) || height > (bottom - top);
+            if (grows == (width1 * height1 > width2 * height2)) {
+                width = width1;
+                height = height1;
+            } else {
+                width = width2;
+                height = height2;
+            }
+        }
+
+        // Generate the final bounds by keeping the opposite drag edge constant.
+        if ((ctrlType & CTRL_LEFT) != 0) {
+            left = right - width;
+        } else { // Note: The right might have changed - if we pulled at the right or not.
+            right = left + width;
+        }
+        if ((ctrlType & CTRL_TOP) != 0) {
+            top = bottom - height;
+        } else { // Note: The height might have changed - if we pulled at the bottom or not.
+            bottom = top + height;
+        }
+        return new Rect(left, top, right, bottom);
+    }
+}
diff --git a/core/java/com/android/internal/telephony/IPhoneStateListener.aidl b/core/java/com/android/internal/telephony/IPhoneStateListener.aidl
index 0f50596..3d5dfbb 100644
--- a/core/java/com/android/internal/telephony/IPhoneStateListener.aidl
+++ b/core/java/com/android/internal/telephony/IPhoneStateListener.aidl
@@ -21,6 +21,7 @@
 import android.telephony.CellIdentity;
 import android.telephony.CellInfo;
 import android.telephony.DataConnectionRealTimeInfo;
+import android.telephony.DisplayInfo;
 import android.telephony.PhoneCapability;
 import android.telephony.PreciseCallState;
 import android.telephony.PreciseDataConnectionState;
@@ -54,6 +55,7 @@
     void onOemHookRawEvent(in byte[] rawData);
     void onCarrierNetworkChange(in boolean active);
     void onUserMobileDataStateChanged(in boolean enabled);
+    void onDisplayInfoChanged(in DisplayInfo displayInfo);
     void onPhoneCapabilityChanged(in PhoneCapability capability);
     void onActiveDataSubIdChanged(in int subId);
     void onRadioPowerStateChanged(in int state);
diff --git a/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl
index 47752c5..520ffc9 100644
--- a/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl
+++ b/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl
@@ -23,6 +23,7 @@
 import android.telephony.CallQuality;
 import android.telephony.CellIdentity;
 import android.telephony.CellInfo;
+import android.telephony.DisplayInfo;
 import android.telephony.ims.ImsReasonInfo;
 import android.telephony.PhoneCapability;
 import android.telephony.PhysicalChannelConfig;
@@ -87,6 +88,7 @@
     void notifyOpportunisticSubscriptionInfoChanged();
     void notifyCarrierNetworkChange(in boolean active);
     void notifyUserMobileDataStateChangedForPhoneId(in int phoneId, in int subId, in boolean state);
+    void notifyDisplayInfoChanged(int slotIndex, int subId, in DisplayInfo displayInfo);
     void notifyPhoneCapabilityChanged(in PhoneCapability capability);
     void notifyActiveDataSubIdChanged(int activeDataSubId);
     void notifyRadioPowerStateChanged(in int phoneId, in int subId, in int state);
diff --git a/core/java/com/android/internal/telephony/IWapPushManager.aidl b/core/java/com/android/internal/telephony/IWapPushManager.aidl
deleted file mode 100644
index 9f6851b..0000000
--- a/core/java/com/android/internal/telephony/IWapPushManager.aidl
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.telephony;
-
-import android.content.Intent;
-
-/** @hide */
-interface IWapPushManager {
-    /**
-     * Processes WAP push message and triggers the receiver application registered
-     * in the application ID table.
-     */
-    int processMessage(String app_id, String content_type, in Intent intent);
-
-    /**
-     * Adds receiver application into the application ID table.
-     * Returns true if inserting the information is successful. Inserting duplicated
-     * record in the application ID table is not allowed. Use update/delete method.
-     */
-    boolean addPackage(String x_app_id, String content_type,
-            String package_name, String class_name,
-            int app_type, boolean need_signature, boolean further_processing);
-
-    /**
-     * Updates receiver application that is last added.
-     * Returns true if updating the information is successfull.
-     */
-    boolean updatePackage(String x_app_id, String content_type,
-            String package_name, String class_name,
-            int app_type, boolean need_signature, boolean further_processing);
-
-    /**
-     * Deletes receiver application information.
-     * Returns true if deleting is successfull.
-     */
-    boolean deletePackage(String x_app_id, String content_type,
-            String package_name, String class_name);
-}
diff --git a/core/java/com/android/internal/telephony/WapPushManagerParams.java b/core/java/com/android/internal/telephony/WapPushManagerParams.java
deleted file mode 100644
index eafb8f1..0000000
--- a/core/java/com/android/internal/telephony/WapPushManagerParams.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.telephony;
-
-import android.telephony.WapPushManagerConnector;
-
-/**
- * WapPushManager constant value definitions.
- * @hide
- */
-public class WapPushManagerParams {
-    /**
-     * Application type activity
-     */
-    public static final int APP_TYPE_ACTIVITY = 0;
-
-    /**
-     * Application type service
-     */
-    public static final int APP_TYPE_SERVICE = 1;
-
-    /**
-     * Process Message return value
-     * Message is handled
-     */
-    public static final int MESSAGE_HANDLED = WapPushManagerConnector.RESULT_MESSAGE_HANDLED;
-
-    /**
-     * Process Message return value
-     * Application ID or content type was not found in the application ID table
-     */
-    public static final int APP_QUERY_FAILED = WapPushManagerConnector.RESULT_APP_QUERY_FAILED;
-
-    /**
-     * Process Message return value
-     * Receiver application signature check failed
-     */
-    public static final int SIGNATURE_NO_MATCH = WapPushManagerConnector.RESULT_SIGNATURE_NO_MATCH;
-
-    /**
-     * Process Message return value
-     * Receiver application was not found
-     */
-    public static final int INVALID_RECEIVER_NAME =
-            WapPushManagerConnector.RESULT_INVALID_RECEIVER_NAME;
-
-    /**
-     * Process Message return value
-     * Unknown exception
-     */
-    public static final int EXCEPTION_CAUGHT = WapPushManagerConnector.RESULT_EXCEPTION_CAUGHT;
-
-    /**
-     * Process Message return value
-     * Need further processing after WapPushManager message processing
-     */
-    public static final int FURTHER_PROCESSING = WapPushManagerConnector.RESULT_FURTHER_PROCESSING;
-}
diff --git a/core/java/com/android/internal/util/CollectionUtils.java b/core/java/com/android/internal/util/CollectionUtils.java
index 4dac542..9b2bcfb 100644
--- a/core/java/com/android/internal/util/CollectionUtils.java
+++ b/core/java/com/android/internal/util/CollectionUtils.java
@@ -186,6 +186,17 @@
     }
 
     /**
+     * Returns the given map, or an immutable empty map if the provided map is null
+     *
+     * This can be used to guarantee null-safety without paying the price of extra allocations
+     *
+     * @see Collections#emptyMap
+     */
+    public static @NonNull <K, V> Map<K, V> emptyIfNull(@Nullable Map<K, V> cur) {
+        return cur == null ? Collections.emptyMap() : cur;
+    }
+
+    /**
      * Returns the size of the given collection, or 0 if null
      */
     public static int size(@Nullable Collection<?> cur) {
@@ -297,6 +308,33 @@
     }
 
     /**
+     * Similar to {@link List#add(int, Object)}, but with support for list values of {@code null}
+     * and {@link Collections#emptyList}
+     */
+    public static @NonNull <T> List<T> add(@Nullable List<T> cur, int index, T val) {
+        if (cur == null || cur == Collections.emptyList()) {
+            cur = new ArrayList<>();
+        }
+        cur.add(index, val);
+        return cur;
+    }
+
+    /**
+     * Similar to {@link Set#addAll(Collection)}}, but with support for list values of {@code null}
+     * and {@link Collections#emptySet}
+     */
+    public static @NonNull <T> Set<T> addAll(@Nullable Set<T> cur, @Nullable Collection<T> val) {
+        if (isEmpty(val)) {
+            return cur != null ? cur : Collections.emptySet();
+        }
+        if (cur == null || cur == Collections.emptySet()) {
+            cur = new ArraySet<>();
+        }
+        cur.addAll(val);
+        return cur;
+    }
+
+    /**
      * @see #add(List, Object)
      */
     public static @NonNull <T> Set<T> add(@Nullable Set<T> cur, T val) {
diff --git a/core/java/com/android/internal/util/FunctionalUtils.java b/core/java/com/android/internal/util/FunctionalUtils.java
index 3c97917..720f4fe 100644
--- a/core/java/com/android/internal/util/FunctionalUtils.java
+++ b/core/java/com/android/internal/util/FunctionalUtils.java
@@ -16,12 +16,16 @@
 
 package com.android.internal.util;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.os.RemoteException;
 import android.util.ExceptionUtils;
 
+import java.util.Collection;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import java.util.function.Supplier;
 
 /**
@@ -218,4 +222,20 @@
             }
         }
     }
+
+    /**
+     * Find the first element in the list that matches the predicate.
+     *
+     * The standard Java way of doing this is to use streams, which is very expensive.
+     *
+     * @return the first matching element, or null if none.
+     */
+    @Nullable
+    public static <T> T findFirst(@NonNull final Collection<T> haystack,
+            @NonNull final Predicate<T> p) {
+        for (final T needle : haystack) {
+            if (p.test(needle)) return needle;
+        }
+        return null;
+    }
 }
diff --git a/core/java/com/android/internal/util/Parcelling.java b/core/java/com/android/internal/util/Parcelling.java
index 390c596..6258a69 100644
--- a/core/java/com/android/internal/util/Parcelling.java
+++ b/core/java/com/android/internal/util/Parcelling.java
@@ -15,10 +15,18 @@
  */
 package com.android.internal.util;
 
+import static java.util.Collections.emptySet;
+
 import android.annotation.Nullable;
 import android.os.Parcel;
+import android.text.TextUtils;
 import android.util.ArrayMap;
+import android.util.ArraySet;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.regex.Pattern;
 
 /**
@@ -90,6 +98,132 @@
      */
     interface BuiltIn {
 
+        class ForInternedString implements Parcelling<String> {
+            @Override
+            public void parcel(@Nullable String item, Parcel dest, int parcelFlags) {
+                dest.writeString(item);
+            }
+
+            @Nullable
+            @Override
+            public String unparcel(Parcel source) {
+                return TextUtils.safeIntern(source.readString());
+            }
+        }
+
+        class ForInternedStringArray implements Parcelling<String[]> {
+            @Override
+            public void parcel(String[] item, Parcel dest, int parcelFlags) {
+                dest.writeStringArray(item);
+            }
+
+            @Nullable
+            @Override
+            public String[] unparcel(Parcel source) {
+                String[] array = source.readStringArray();
+                if (array != null) {
+                    int size = ArrayUtils.size(array);
+                    for (int index = 0; index < size; index++) {
+                        array[index] = TextUtils.safeIntern(array[index]);
+                    }
+                }
+                return array;
+            }
+        }
+
+        class ForInternedStringList implements Parcelling<List<String>> {
+            @Override
+            public void parcel(List<String> item, Parcel dest, int parcelFlags) {
+                dest.writeStringList(item);
+            }
+
+            @Override
+            public List<String> unparcel(Parcel source) {
+                ArrayList<String> list = source.createStringArrayList();
+                if (list != null) {
+                    int size = list.size();
+                    for (int index = 0; index < size; index++) {
+                        list.set(index, list.get(index).intern());
+                    }
+                }
+                return CollectionUtils.emptyIfNull(list);
+            }
+        }
+
+        class ForInternedStringValueMap implements Parcelling<Map<String, String>> {
+            @Override
+            public void parcel(Map<String, String> item, Parcel dest, int parcelFlags) {
+                dest.writeMap(item);
+            }
+
+            @Override
+            public Map<String, String> unparcel(Parcel source) {
+                ArrayMap<String, String> map = new ArrayMap<>();
+                source.readMap(map, String.class.getClassLoader());
+                for (int index = 0; index < map.size(); index++) {
+                    map.setValueAt(index, TextUtils.safeIntern(map.valueAt(index)));
+                }
+                return map;
+            }
+        }
+
+        class ForInternedStringSet implements Parcelling<Set<String>> {
+            @Override
+            public void parcel(Set<String> item, Parcel dest, int parcelFlags) {
+                if (item == null) {
+                    dest.writeInt(-1);
+                } else {
+                    dest.writeInt(item.size());
+                    for (String string : item) {
+                        dest.writeString(string);
+                    }
+                }
+            }
+
+            @Override
+            public Set<String> unparcel(Parcel source) {
+                final int size = source.readInt();
+                if (size < 0) {
+                    return emptySet();
+                }
+                Set<String> set = new ArraySet<>();
+                for (int count = 0; count < size; count++) {
+                    set.add(TextUtils.safeIntern(source.readString()));
+                }
+                return set;
+            }
+        }
+
+        class ForBoolean implements Parcelling<Boolean> {
+            @Override
+            public void parcel(@Nullable Boolean item, Parcel dest, int parcelFlags) {
+                if (item == null) {
+                    // This writes 1 for null to mirror TypedArray.getInteger(booleanResId, 1)
+                    dest.writeInt(1);
+                } else if (!item) {
+                    dest.writeInt(0);
+                } else {
+                    dest.writeInt(-1);
+                }
+            }
+
+            @Nullable
+            @Override
+            public Boolean unparcel(Parcel source) {
+                switch (source.readInt()) {
+                    default:
+                        throw new IllegalStateException("Malformed Parcel reading Boolean: "
+                                + source);
+                    case 1:
+                        return null;
+                    case 0:
+                        return Boolean.FALSE;
+                    case -1:
+                        return Boolean.TRUE;
+                }
+            }
+        }
+
         class ForPattern implements Parcelling<Pattern> {
 
             @Override
diff --git a/core/java/com/android/internal/view/IInputMethod.aidl b/core/java/com/android/internal/view/IInputMethod.aidl
index 475a321..fd4b5ab 100644
--- a/core/java/com/android/internal/view/IInputMethod.aidl
+++ b/core/java/com/android/internal/view/IInputMethod.aidl
@@ -16,10 +16,8 @@
 
 package com.android.internal.view;
 
-import android.content.ComponentName;
 import android.os.IBinder;
 import android.os.ResultReceiver;
-import android.view.autofill.AutofillId;
 import android.view.InputChannel;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputBinding;
@@ -29,6 +27,7 @@
 import com.android.internal.view.IInputContext;
 import com.android.internal.view.IInputMethodSession;
 import com.android.internal.view.IInputSessionCallback;
+import com.android.internal.view.InlineSuggestionsRequestInfo;
 
 /**
  * Top-level interface to an input method component (implemented in a
@@ -38,7 +37,7 @@
 oneway interface IInputMethod {
     void initializeInternal(IBinder token, int displayId, IInputMethodPrivilegedOperations privOps);
 
-    void onCreateInlineSuggestionsRequest(in ComponentName componentName, in AutofillId autofillId,
+    void onCreateInlineSuggestionsRequest(in InlineSuggestionsRequestInfo requestInfo,
             in IInlineSuggestionsRequestCallback cb);
 
     void bindInput(in InputBinding binding);
diff --git a/core/java/com/android/internal/view/InlineSuggestionsRequestInfo.aidl b/core/java/com/android/internal/view/InlineSuggestionsRequestInfo.aidl
new file mode 100644
index 0000000..8125c0d
--- /dev/null
+++ b/core/java/com/android/internal/view/InlineSuggestionsRequestInfo.aidl
@@ -0,0 +1,19 @@
+/*
+ * 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.internal.view;
+
+parcelable InlineSuggestionsRequestInfo;
diff --git a/core/java/com/android/internal/view/InlineSuggestionsRequestInfo.java b/core/java/com/android/internal/view/InlineSuggestionsRequestInfo.java
new file mode 100644
index 0000000..6148490
--- /dev/null
+++ b/core/java/com/android/internal/view/InlineSuggestionsRequestInfo.java
@@ -0,0 +1,229 @@
+/*
+ * 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.internal.view;
+
+import android.annotation.NonNull;
+import android.content.ComponentName;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.view.autofill.AutofillId;
+import android.view.inputmethod.InlineSuggestionsRequest;
+
+import com.android.internal.util.DataClass;
+
+/**
+ * Wraps the information needed to create an {@link InlineSuggestionsRequest}.
+ *
+ * @hide
+ */
+@DataClass(
+        genToString = true,
+        genHiddenConstDefs = true,
+        genEqualsHashCode = true)
+public final class InlineSuggestionsRequestInfo implements Parcelable {
+    /**
+     * The {@link ComponentName} of current app/activity
+     */
+    private final @NonNull ComponentName mComponentName;
+
+    /**
+     * The {@link AutofillId} of currently focused field.
+     */
+    private final @NonNull AutofillId mAutofillId;
+
+    /**
+     * The extras that contain the UI renderer related information
+     */
+    private final @NonNull Bundle mUiExtras;
+
+
+
+    // Code below generated by codegen v1.0.14.
+    //
+    // DO NOT MODIFY!
+    // CHECKSTYLE:OFF Generated code
+    //
+    // To regenerate run:
+    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/com/android/internal/view/InlineSuggestionsRequestInfo.java
+    //
+    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+    //   Settings > Editor > Code Style > Formatter Control
+    //@formatter:off
+
+
+    /**
+     * Creates a new InlineSuggestionsRequestInfo.
+     *
+     * @param componentName
+     *   The {@link ComponentName} of current app/activity
+     * @param autofillId
+     *   The {@link AutofillId} of currently focused field.
+     * @param uiExtras
+     *   The extras that contain the ui renderer related information
+     */
+    @DataClass.Generated.Member
+    public InlineSuggestionsRequestInfo(
+            @NonNull ComponentName componentName,
+            @NonNull AutofillId autofillId,
+            @NonNull Bundle uiExtras) {
+        this.mComponentName = componentName;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mComponentName);
+        this.mAutofillId = autofillId;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mAutofillId);
+        this.mUiExtras = uiExtras;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mUiExtras);
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    /**
+     * The {@link ComponentName} of current app/activity
+     */
+    @DataClass.Generated.Member
+    public @NonNull ComponentName getComponentName() {
+        return mComponentName;
+    }
+
+    /**
+     * The {@link AutofillId} of currently focused field.
+     */
+    @DataClass.Generated.Member
+    public @NonNull AutofillId getAutofillId() {
+        return mAutofillId;
+    }
+
+    /**
+     * The extras that contain the ui renderer related information
+     */
+    @DataClass.Generated.Member
+    public @NonNull Bundle getUiExtras() {
+        return mUiExtras;
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public String toString() {
+        // You can override field toString logic by defining methods like:
+        // String fieldNameToString() { ... }
+
+        return "InlineSuggestionsRequestInfo { " +
+                "componentName = " + mComponentName + ", " +
+                "autofillId = " + mAutofillId + ", " +
+                "uiExtras = " + mUiExtras +
+        " }";
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public boolean equals(@android.annotation.Nullable Object o) {
+        // You can override field equality logic by defining either of the methods like:
+        // boolean fieldNameEquals(InlineSuggestionsRequestInfo other) { ... }
+        // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        @SuppressWarnings("unchecked")
+        InlineSuggestionsRequestInfo that = (InlineSuggestionsRequestInfo) o;
+        //noinspection PointlessBooleanExpression
+        return true
+                && java.util.Objects.equals(mComponentName, that.mComponentName)
+                && java.util.Objects.equals(mAutofillId, that.mAutofillId)
+                && java.util.Objects.equals(mUiExtras, that.mUiExtras);
+    }
+
+    @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(mComponentName);
+        _hash = 31 * _hash + java.util.Objects.hashCode(mAutofillId);
+        _hash = 31 * _hash + java.util.Objects.hashCode(mUiExtras);
+        return _hash;
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public void writeToParcel(@NonNull android.os.Parcel dest, int flags) {
+        // You can override field parcelling by defining methods like:
+        // void parcelFieldName(Parcel dest, int flags) { ... }
+
+        dest.writeTypedObject(mComponentName, flags);
+        dest.writeTypedObject(mAutofillId, flags);
+        dest.writeBundle(mUiExtras);
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public int describeContents() { return 0; }
+
+    /** @hide */
+    @SuppressWarnings({"unchecked", "RedundantCast"})
+    @DataClass.Generated.Member
+    /* package-private */ InlineSuggestionsRequestInfo(@NonNull android.os.Parcel in) {
+        // You can override field unparcelling by defining methods like:
+        // static FieldType unparcelFieldName(Parcel in) { ... }
+
+        ComponentName componentName = (ComponentName) in.readTypedObject(ComponentName.CREATOR);
+        AutofillId autofillId = (AutofillId) in.readTypedObject(AutofillId.CREATOR);
+        Bundle uiExtras = in.readBundle();
+
+        this.mComponentName = componentName;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mComponentName);
+        this.mAutofillId = autofillId;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mAutofillId);
+        this.mUiExtras = uiExtras;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mUiExtras);
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    @DataClass.Generated.Member
+    public static final @NonNull Parcelable.Creator<InlineSuggestionsRequestInfo> CREATOR
+            = new Parcelable.Creator<InlineSuggestionsRequestInfo>() {
+        @Override
+        public InlineSuggestionsRequestInfo[] newArray(int size) {
+            return new InlineSuggestionsRequestInfo[size];
+        }
+
+        @Override
+        public InlineSuggestionsRequestInfo createFromParcel(@NonNull android.os.Parcel in) {
+            return new InlineSuggestionsRequestInfo(in);
+        }
+    };
+
+    @DataClass.Generated(
+            time = 1582076613213L,
+            codegenVersion = "1.0.14",
+            sourceFile = "frameworks/base/core/java/com/android/internal/view/InlineSuggestionsRequestInfo.java",
+            inputSignatures = "private final @android.annotation.NonNull android.content.ComponentName mComponentName\nprivate final @android.annotation.NonNull android.view.autofill.AutofillId mAutofillId\nprivate final @android.annotation.NonNull android.os.Bundle mUiExtras\nclass InlineSuggestionsRequestInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstDefs=true, genEqualsHashCode=true)")
+    @Deprecated
+    private void __metadata() {}
+
+
+    //@formatter:on
+    // End of generated code
+
+}
diff --git a/core/java/com/android/internal/view/animation/FallbackLUTInterpolator.java b/core/java/com/android/internal/view/animation/FallbackLUTInterpolator.java
deleted file mode 100644
index d28ab07..0000000
--- a/core/java/com/android/internal/view/animation/FallbackLUTInterpolator.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.view.animation;
-
-import android.animation.TimeInterpolator;
-import android.util.TimeUtils;
-import android.view.Choreographer;
-
-/**
- * Interpolator that builds a lookup table to use. This is a fallback for
- * building a native interpolator from a TimeInterpolator that is not marked
- * with {@link HasNativeInterpolator}
- *
- * This implements TimeInterpolator to allow for easier interop with Animators
- */
-@HasNativeInterpolator
-public class FallbackLUTInterpolator implements NativeInterpolatorFactory, TimeInterpolator {
-
-    // If the duration of an animation is more than 300 frames, we cap the sample size to 300.
-    private static final int MAX_SAMPLE_POINTS = 300;
-    private TimeInterpolator mSourceInterpolator;
-    private final float mLut[];
-
-    /**
-     * Used to cache the float[] LUT for use across multiple native
-     * interpolator creation
-     */
-    public FallbackLUTInterpolator(TimeInterpolator interpolator, long duration) {
-        mSourceInterpolator = interpolator;
-        mLut = createLUT(interpolator, duration);
-    }
-
-    private static float[] createLUT(TimeInterpolator interpolator, long duration) {
-        long frameIntervalNanos = Choreographer.getInstance().getFrameIntervalNanos();
-        int animIntervalMs = (int) (frameIntervalNanos / TimeUtils.NANOS_PER_MS);
-        // We need 2 frame values as the minimal.
-        int numAnimFrames = Math.max(2, (int) Math.ceil(((double) duration) / animIntervalMs));
-        numAnimFrames = Math.min(numAnimFrames, MAX_SAMPLE_POINTS);
-        float values[] = new float[numAnimFrames];
-        float lastFrame = numAnimFrames - 1;
-        for (int i = 0; i < numAnimFrames; i++) {
-            float inValue = i / lastFrame;
-            values[i] = interpolator.getInterpolation(inValue);
-        }
-        return values;
-    }
-
-    @Override
-    public long createNativeInterpolator() {
-        return NativeInterpolatorFactoryHelper.createLutInterpolator(mLut);
-    }
-
-    /**
-     * Used to create a one-shot float[] LUT & native interpolator
-     */
-    public static long createNativeInterpolator(TimeInterpolator interpolator, long duration) {
-        float[] lut = createLUT(interpolator, duration);
-        return NativeInterpolatorFactoryHelper.createLutInterpolator(lut);
-    }
-
-    @Override
-    public float getInterpolation(float input) {
-        return mSourceInterpolator.getInterpolation(input);
-    }
-}
diff --git a/core/java/com/android/internal/view/animation/HasNativeInterpolator.java b/core/java/com/android/internal/view/animation/HasNativeInterpolator.java
deleted file mode 100644
index 48ea4da..0000000
--- a/core/java/com/android/internal/view/animation/HasNativeInterpolator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.view.animation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * This is a class annotation that signals that it is safe to create
- * a native interpolator counterpart via {@link NativeInterpolatorFactory}
- *
- * The idea here is to prevent subclasses of interpolators from being treated as a
- * NativeInterpolatorFactory, and instead have them fall back to the LUT & LERP
- * method like a custom interpolator.
- *
- * @hide
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE})
-public @interface HasNativeInterpolator {
-}
diff --git a/core/java/com/android/internal/view/animation/NativeInterpolatorFactory.java b/core/java/com/android/internal/view/animation/NativeInterpolatorFactory.java
deleted file mode 100644
index fcacd52..0000000
--- a/core/java/com/android/internal/view/animation/NativeInterpolatorFactory.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.view.animation;
-
-public interface NativeInterpolatorFactory {
-    long createNativeInterpolator();
-}
diff --git a/core/java/com/android/internal/view/animation/NativeInterpolatorFactoryHelper.java b/core/java/com/android/internal/view/animation/NativeInterpolatorFactoryHelper.java
deleted file mode 100644
index ebeec40..0000000
--- a/core/java/com/android/internal/view/animation/NativeInterpolatorFactoryHelper.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.view.animation;
-
-/**
- * Static utility class for constructing native interpolators to keep the
- * JNI simpler
- */
-public final class NativeInterpolatorFactoryHelper {
-    private NativeInterpolatorFactoryHelper() {}
-
-    public static native long createAccelerateDecelerateInterpolator();
-    public static native long createAccelerateInterpolator(float factor);
-    public static native long createAnticipateInterpolator(float tension);
-    public static native long createAnticipateOvershootInterpolator(float tension);
-    public static native long createBounceInterpolator();
-    public static native long createCycleInterpolator(float cycles);
-    public static native long createDecelerateInterpolator(float factor);
-    public static native long createLinearInterpolator();
-    public static native long createOvershootInterpolator(float tension);
-    public static native long createPathInterpolator(float[] x, float[] y);
-    public static native long createLutInterpolator(float[] values);
-}
diff --git a/core/java/com/android/internal/widget/ResolverDrawerLayout.java b/core/java/com/android/internal/widget/ResolverDrawerLayout.java
index e0c3823..b117e40 100644
--- a/core/java/com/android/internal/widget/ResolverDrawerLayout.java
+++ b/core/java/com/android/internal/widget/ResolverDrawerLayout.java
@@ -66,6 +66,12 @@
      */
     private int mMaxCollapsedHeightSmall;
 
+    /**
+     * Whether {@code mMaxCollapsedHeightSmall} was set explicitly as a layout attribute or
+     * inferred by {@code mMaxCollapsedHeight}.
+     */
+    private final boolean mIsMaxCollapsedHeightSmallExplicit;
+
     private boolean mSmallCollapsed;
 
     /**
@@ -146,6 +152,8 @@
         mMaxCollapsedHeightSmall = a.getDimensionPixelSize(
                 R.styleable.ResolverDrawerLayout_maxCollapsedHeightSmall,
                 mMaxCollapsedHeight);
+        mIsMaxCollapsedHeightSmallExplicit =
+                a.hasValue(R.styleable.ResolverDrawerLayout_maxCollapsedHeightSmall);
         mShowAtTop = a.getBoolean(R.styleable.ResolverDrawerLayout_showAtTop, false);
         a.recycle();
 
@@ -162,6 +170,21 @@
         setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
     }
 
+    /**
+     * Dynamically set the max collapsed height. Note this also updates the small collapsed
+     * height if it wasn't specified explicitly.
+     */
+    public void setMaxCollapsedHeight(int heightInPixels) {
+        if (heightInPixels == mMaxCollapsedHeight) {
+            return;
+        }
+        mMaxCollapsedHeight = heightInPixels;
+        if (!mIsMaxCollapsedHeightSmallExplicit) {
+            mMaxCollapsedHeightSmall = mMaxCollapsedHeight;
+        }
+        requestLayout();
+    }
+
     public void setSmallCollapsed(boolean smallCollapsed) {
         mSmallCollapsed = smallCollapsed;
         requestLayout();
diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java
index 74b481c..3378c07 100644
--- a/core/java/com/android/server/SystemConfig.java
+++ b/core/java/com/android/server/SystemConfig.java
@@ -29,6 +29,7 @@
 import android.os.Process;
 import android.os.SystemProperties;
 import android.os.Trace;
+import android.os.incremental.IncrementalManager;
 import android.os.storage.StorageManager;
 import android.permission.PermissionManager.SplitPermissionInfo;
 import android.text.TextUtils;
@@ -902,7 +903,6 @@
                     } break;
                     case "component-override": {
                         readComponentOverrides(parser, permFile);
-                        XmlUtils.skipCurrentTag(parser);
                     } break;
                     case "backup-transport-whitelisted-service": {
                         if (allowFeatures) {
@@ -1156,6 +1156,14 @@
             addFeature(PackageManager.FEATURE_RAM_NORMAL, 0);
         }
 
+        if (IncrementalManager.isFeatureEnabled()) {
+            addFeature(PackageManager.FEATURE_INCREMENTAL_DELIVERY, 0);
+        }
+
+        if (PackageManager.APP_ENUMERATION_ENABLED_BY_DEFAULT) {
+            addFeature(PackageManager.FEATURE_APP_ENUMERATION, 0);
+        }
+
         for (String featureName : mUnavailableFeatures) {
             removeFeature(featureName);
         }
@@ -1398,8 +1406,7 @@
 
         final int depth = parser.getDepth();
         while (XmlUtils.nextElementWithin(parser, depth)) {
-            String name = parser.getName();
-            if ("component".equals(name)) {
+            if ("component".equals(parser.getName())) {
                 String clsname = parser.getAttributeValue(null, "class");
                 String enabled = parser.getAttributeValue(null, "enabled");
                 if (clsname == null) {
@@ -1427,8 +1434,6 @@
                 }
 
                 componentEnabledStates.put(clsname, !"false".equals(enabled));
-            } else {
-                XmlUtils.skipCurrentTag(parser);
             }
         }
     }
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index 35eb0fc..5912f40 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -41,9 +41,8 @@
         "android_util_Log.cpp",
         "android_util_StringBlock.cpp",
         "android_util_XmlBlock.cpp",
-        "android_view_RenderNodeAnimator.cpp",
+        "android_util_jar_StrictJarFile.cpp",
         "com_android_internal_util_VirtualRefBasePtr.cpp",
-        "com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp",
     ],
 
     include_dirs: [
@@ -125,6 +124,8 @@
                 "android_view_SurfaceSession.cpp",
                 "android_view_TextureView.cpp",
                 "android_view_VelocityTracker.cpp",
+                "android_view_VerifiedKeyEvent.cpp",
+                "android_view_VerifiedMotionEvent.cpp",
                 "android_text_Hyphenator.cpp",
                 "android_os_Debug.cpp",
                 "android_os_GraphicsEnvironment.cpp",
@@ -152,8 +153,7 @@
                 "android_util_Binder.cpp",
                 "android_util_MemoryIntArray.cpp",
                 "android_util_Process.cpp",
-                "android_util_jar_StrictJarFile.cpp",
-                "android_media_AudioDeviceAddress.cpp",
+                "android_media_AudioDeviceAttributes.cpp",
                 "android_media_AudioEffectDescriptor.cpp",
                 "android_media_AudioRecord.cpp",
                 "android_media_AudioSystem.cpp",
@@ -182,6 +182,7 @@
                 "android_hardware_UsbRequest.cpp",
                 "android_hardware_location_ActivityRecognitionHardware.cpp",
                 "android_util_FileObserver.cpp",
+                "android/graphics/GraphicsStatsService.cpp",
                 "android/graphics/SurfaceTexture.cpp",
                 "android/opengl/poly_clip.cpp", // TODO: .arm
                 "android/opengl/util.cpp",
@@ -196,8 +197,11 @@
                 "android_content_res_ObbScanner.cpp",
                 "android_content_res_Configuration.cpp",
                 "android_security_Scrypt.cpp",
+                "com_android_internal_content_om_OverlayConfig.cpp",
                 "com_android_internal_os_ClassLoaderFactory.cpp",
                 "com_android_internal_os_FuseAppLoop.cpp",
+                "com_android_internal_os_KernelCpuUidBpfMapReader.cpp",
+                "com_android_internal_os_KernelSingleUidTimeReader.cpp",
                 "com_android_internal_os_Zygote.cpp",
                 "com_android_internal_os_ZygoteInit.cpp",
                 "hwbinder/EphemeralStorage.cpp",
@@ -233,6 +237,7 @@
                 "libui",
                 "libgraphicsenv",
                 "libgui",
+                "libmediandk",
                 "libsensor",
                 "libinput",
                 "libcamera_client",
@@ -270,9 +275,10 @@
                 "libnativewindow",
                 "libdl",
                 "libdl_android",
-                "libstats_jni",
                 "libstatslog",
+                "libtimeinstate",
                 "server_configurable_flags",
+                "libstatspull",
             ],
             export_shared_lib_headers: [
                 // AndroidRuntime.h depends on nativehelper/jni.h
@@ -347,6 +353,8 @@
         "android/graphics/apex/android_paint.cpp",
         "android/graphics/apex/android_region.cpp",
 
+        "android_graphics_animation_NativeInterpolatorFactory.cpp",
+        "android_graphics_animation_RenderNodeAnimator.cpp",
         "android_graphics_Canvas.cpp",
         "android_graphics_ColorSpace.cpp",
         "android_graphics_drawable_AnimatedVectorDrawable.cpp",
@@ -358,7 +366,6 @@
         "android_view_RenderNode.cpp",
         "android_util_PathParser.cpp",
 
-        "android/graphics/AnimatedImageDrawable.cpp",
         "android/graphics/Bitmap.cpp",
         "android/graphics/BitmapFactory.cpp",
         "android/graphics/ByteBufferStreamAdaptor.cpp",
@@ -434,6 +441,7 @@
 
                 "android_view_TextureLayer.cpp",
                 "android_view_ThreadedRenderer.cpp",
+                "android/graphics/AnimatedImageDrawable.cpp",
                 "android/graphics/BitmapRegionDecoder.cpp",
                 "android/graphics/GIFMovie.cpp",
                 "android/graphics/Movie.cpp",
@@ -445,9 +453,10 @@
             ],
             shared_libs: [
                 "libandroidfw",
+                "libEGL",
+                "libmediandk",
                 "libnativedisplay",
                 "libnativewindow",
-                "libgui",
                 "libpdfium",
             ],
             static_libs: [
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 657336e..4879478 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -86,7 +86,7 @@
 extern int register_android_hardware_UsbRequest(JNIEnv *env);
 extern int register_android_hardware_location_ActivityRecognitionHardware(JNIEnv* env);
 
-extern int register_android_media_AudioDeviceAddress(JNIEnv *env);
+extern int register_android_media_AudioDeviceAttributes(JNIEnv* env);
 extern int register_android_media_AudioEffectDescriptor(JNIEnv *env);
 extern int register_android_media_AudioRecord(JNIEnv *env);
 extern int register_android_media_AudioSystem(JNIEnv *env);
@@ -108,7 +108,6 @@
 extern int register_android_app_admin_SecurityLog(JNIEnv* env);
 extern int register_android_content_AssetManager(JNIEnv* env);
 extern int register_android_util_EventLog(JNIEnv* env);
-extern int register_android_util_StatsLog(JNIEnv* env);
 extern int register_android_util_StatsLogInternal(JNIEnv* env);
 extern int register_android_util_Log(JNIEnv* env);
 extern int register_android_util_MemoryIntArray(JNIEnv* env);
@@ -119,13 +118,11 @@
 extern int register_android_view_DisplayEventReceiver(JNIEnv* env);
 extern int register_android_view_InputApplicationHandle(JNIEnv* env);
 extern int register_android_view_InputWindowHandle(JNIEnv* env);
-extern int register_android_view_RenderNodeAnimator(JNIEnv* env);
 extern int register_android_view_Surface(JNIEnv* env);
 extern int register_android_view_SurfaceControl(JNIEnv* env);
 extern int register_android_view_SurfaceSession(JNIEnv* env);
 extern int register_android_view_CompositionSamplingListener(JNIEnv* env);
 extern int register_android_view_TextureView(JNIEnv* env);
-extern int register_com_android_internal_view_animation_NativeInterpolatorFactoryHelper(JNIEnv *env);
 extern int register_android_database_CursorWindow(JNIEnv* env);
 extern int register_android_database_SQLiteConnection(JNIEnv* env);
 extern int register_android_database_SQLiteGlobal(JNIEnv* env);
@@ -182,13 +179,18 @@
 extern int register_android_view_MotionEvent(JNIEnv* env);
 extern int register_android_view_PointerIcon(JNIEnv* env);
 extern int register_android_view_VelocityTracker(JNIEnv* env);
+extern int register_android_view_VerifiedKeyEvent(JNIEnv* env);
+extern int register_android_view_VerifiedMotionEvent(JNIEnv* env);
 extern int register_android_content_res_ObbScanner(JNIEnv* env);
 extern int register_android_content_res_Configuration(JNIEnv* env);
 extern int register_android_animation_PropertyValuesHolder(JNIEnv *env);
 extern int register_android_security_Scrypt(JNIEnv *env);
 extern int register_com_android_internal_content_NativeLibraryHelper(JNIEnv *env);
+extern int register_com_android_internal_content_om_OverlayConfig(JNIEnv *env);
 extern int register_com_android_internal_os_ClassLoaderFactory(JNIEnv* env);
 extern int register_com_android_internal_os_FuseAppLoop(JNIEnv* env);
+extern int register_com_android_internal_os_KernelCpuUidBpfMapReader(JNIEnv *env);
+extern int register_com_android_internal_os_KernelSingleUidTimeReader(JNIEnv *env);
 extern int register_com_android_internal_os_Zygote(JNIEnv *env);
 extern int register_com_android_internal_os_ZygoteInit(JNIEnv *env);
 extern int register_com_android_internal_util_VirtualRefBasePtr(JNIEnv *env);
@@ -209,9 +211,11 @@
 static const char* PROFILE_BOOT_CLASS_PATH = "profilebootclasspath";
 
 // Feature flag name for running the JIT in Zygote experiment, b/119800099.
-static const char* ENABLE_APEX_IMAGE = "enable_apex_image";
-// Flag to pass to the runtime when using the apex image.
-static const char* kApexImageOption = "-Ximage:/system/framework/apex.art";
+// TODO: Rename the server-level flag or remove.
+static const char* ENABLE_JITZYGOTE_IMAGE = "enable_apex_image";
+// Flag to pass to the runtime when using the JIT Zygote image.
+static const char* kJitZygoteImageOption =
+        "-Ximage:boot.art:/nonx/boot-framework.art!/system/etc/boot-image.prof";
 
 // Feature flag name for disabling lock profiling.
 static const char* DISABLE_LOCK_PROFILING = "disable_lock_profiling";
@@ -239,14 +243,6 @@
     gCurRuntime->setExitWithoutCleanup(exitWithoutCleanup);
 }
 
-static void com_android_internal_os_RuntimeInit_nativeDisableHeapPointerTagging(
-        JNIEnv* env, jobject clazz) {
-    HeapTaggingLevel tag_level = M_HEAP_TAGGING_LEVEL_NONE;
-    if (!android_mallopt(M_SET_HEAP_TAGGING_LEVEL, &tag_level, sizeof(tag_level))) {
-        ALOGE("ERROR: could not disable heap pointer tagging\n");
-    }
-}
-
 /*
  * JNI registration.
  */
@@ -258,8 +254,6 @@
              (void*)com_android_internal_os_RuntimeInit_nativeFinishInit},
             {"nativeSetExitWithoutCleanup", "(Z)V",
              (void*)com_android_internal_os_RuntimeInit_nativeSetExitWithoutCleanup},
-            {"nativeDisableHeapPointerTagging", "()V",
-             (void*)com_android_internal_os_RuntimeInit_nativeDisableHeapPointerTagging},
     };
     return jniRegisterNativeMethods(env, "com/android/internal/os/RuntimeInit",
         methods, NELEM(methods));
@@ -631,6 +625,8 @@
     char heaptargetutilizationOptsBuf[sizeof("-XX:HeapTargetUtilization=")-1 + PROPERTY_VALUE_MAX];
     char foregroundHeapGrowthMultiplierOptsBuf[
             sizeof("-XX:ForegroundHeapGrowthMultiplier=")-1 + PROPERTY_VALUE_MAX];
+    char finalizerTimeoutMsOptsBuf[sizeof("-XX:FinalizerTimeoutMs=")-1 + PROPERTY_VALUE_MAX];
+    char threadSuspendTimeoutOptsBuf[sizeof("-XX:ThreadSuspendTimeout=")-1 + PROPERTY_VALUE_MAX];
     char cachePruneBuf[sizeof("-Xzygote-max-boot-retry=")-1 + PROPERTY_VALUE_MAX];
     char dex2oatXmsImageFlagsBuf[sizeof("-Xms")-1 + PROPERTY_VALUE_MAX];
     char dex2oatXmxImageFlagsBuf[sizeof("-Xmx")-1 + PROPERTY_VALUE_MAX];
@@ -687,16 +683,16 @@
         addOption("-Xjitsaveprofilinginfo");
     }
 
-    std::string use_apex_image_flag =
-        server_configurable_flags::GetServerConfigurableFlag(RUNTIME_NATIVE_BOOT_NAMESPACE,
-                                                             ENABLE_APEX_IMAGE,
-                                                             /*default_value=*/ "");
+    std::string use_jitzygote_image_flag =
+            server_configurable_flags::GetServerConfigurableFlag(RUNTIME_NATIVE_BOOT_NAMESPACE,
+                                                                 ENABLE_JITZYGOTE_IMAGE,
+                                                                 /*default_value=*/"");
     // Use the APEX boot image for boot class path profiling to get JIT samples on BCP methods.
     // Also use the APEX boot image if it's explicitly enabled via configuration flag.
-    const bool use_apex_image = profile_boot_class_path || (use_apex_image_flag == "true");
+    const bool use_apex_image = profile_boot_class_path || (use_jitzygote_image_flag == "true");
     if (use_apex_image) {
-        addOption(kApexImageOption);
-        ALOGI("Using Apex boot image: '%s'\n", kApexImageOption);
+        ALOGI("Using JIT Zygote image: '%s'\n", kJitZygoteImageOption);
+        addOption(kJitZygoteImageOption);
     } else if (parseRuntimeOption("dalvik.vm.boot-image", bootImageBuf, "-Ximage:")) {
         ALOGI("Using dalvik.vm.boot-image: '%s'\n", bootImageBuf);
     } else {
@@ -784,7 +780,15 @@
     parseRuntimeOption("dalvik.vm.foreground-heap-growth-multiplier",
                        foregroundHeapGrowthMultiplierOptsBuf,
                        "-XX:ForegroundHeapGrowthMultiplier=");
-
+    /*
+     * Finalizer and thread suspend timeouts.
+     */
+    parseRuntimeOption("dalvik.vm.finalizer-timeout-ms",
+                       finalizerTimeoutMsOptsBuf,
+                       "-XX:FinalizerTimeoutMs=");
+    parseRuntimeOption("dalvik.vm.thread-suspend-timeout-ms",
+                       threadSuspendTimeoutOptsBuf,
+                       "-XX:ThreadSuspendTimeout=");
     /*
      * JIT related options.
      */
@@ -1424,140 +1428,142 @@
 }
 
 static const RegJNIRec gRegJNI[] = {
-    REG_JNI(register_com_android_internal_os_RuntimeInit),
-    REG_JNI(register_com_android_internal_os_ZygoteInit_nativeZygoteInit),
-    REG_JNI(register_android_os_SystemClock),
-    REG_JNI(register_android_util_EventLog),
-    REG_JNI(register_android_util_Log),
-    REG_JNI(register_android_util_MemoryIntArray),
-    REG_JNI(register_android_util_StatsLog),
-    REG_JNI(register_android_util_StatsLogInternal),
-    REG_JNI(register_android_app_admin_SecurityLog),
-    REG_JNI(register_android_content_AssetManager),
-    REG_JNI(register_android_content_StringBlock),
-    REG_JNI(register_android_content_XmlBlock),
-    REG_JNI(register_android_content_res_ApkAssets),
-    REG_JNI(register_android_text_AndroidCharacter),
-    REG_JNI(register_android_text_Hyphenator),
-    REG_JNI(register_android_view_InputDevice),
-    REG_JNI(register_android_view_KeyCharacterMap),
-    REG_JNI(register_android_os_Process),
-    REG_JNI(register_android_os_SystemProperties),
-    REG_JNI(register_android_os_Binder),
-    REG_JNI(register_android_os_Parcel),
-    REG_JNI(register_android_os_HidlMemory),
-    REG_JNI(register_android_os_HidlSupport),
-    REG_JNI(register_android_os_HwBinder),
-    REG_JNI(register_android_os_HwBlob),
-    REG_JNI(register_android_os_HwParcel),
-    REG_JNI(register_android_os_HwRemoteBinder),
-    REG_JNI(register_android_os_NativeHandle),
-    REG_JNI(register_android_os_storage_StorageManager),
-    REG_JNI(register_android_os_VintfObject),
-    REG_JNI(register_android_os_VintfRuntimeInfo),
-    REG_JNI(register_android_service_DataLoaderService),
-    REG_JNI(register_android_view_DisplayEventReceiver),
-    REG_JNI(register_android_view_RenderNodeAnimator),
-    REG_JNI(register_android_view_InputApplicationHandle),
-    REG_JNI(register_android_view_InputWindowHandle),
-    REG_JNI(register_android_view_Surface),
-    REG_JNI(register_android_view_SurfaceControl),
-    REG_JNI(register_android_view_SurfaceSession),
-    REG_JNI(register_android_view_CompositionSamplingListener),
-    REG_JNI(register_android_view_TextureView),
-    REG_JNI(register_com_android_internal_view_animation_NativeInterpolatorFactoryHelper),
-    REG_JNI(register_com_google_android_gles_jni_EGLImpl),
-    REG_JNI(register_com_google_android_gles_jni_GLImpl),
-    REG_JNI(register_android_opengl_jni_EGL14),
-    REG_JNI(register_android_opengl_jni_EGL15),
-    REG_JNI(register_android_opengl_jni_EGLExt),
-    REG_JNI(register_android_opengl_jni_GLES10),
-    REG_JNI(register_android_opengl_jni_GLES10Ext),
-    REG_JNI(register_android_opengl_jni_GLES11),
-    REG_JNI(register_android_opengl_jni_GLES11Ext),
-    REG_JNI(register_android_opengl_jni_GLES20),
-    REG_JNI(register_android_opengl_jni_GLES30),
-    REG_JNI(register_android_opengl_jni_GLES31),
-    REG_JNI(register_android_opengl_jni_GLES31Ext),
-    REG_JNI(register_android_opengl_jni_GLES32),
-    REG_JNI(register_android_graphics_classes),
-    REG_JNI(register_android_graphics_BLASTBufferQueue),
-    REG_JNI(register_android_graphics_GraphicBuffer),
-    REG_JNI(register_android_database_CursorWindow),
-    REG_JNI(register_android_database_SQLiteConnection),
-    REG_JNI(register_android_database_SQLiteGlobal),
-    REG_JNI(register_android_database_SQLiteDebug),
-    REG_JNI(register_android_os_Debug),
-    REG_JNI(register_android_os_FileObserver),
-    REG_JNI(register_android_os_GraphicsEnvironment),
-    REG_JNI(register_android_os_MessageQueue),
-    REG_JNI(register_android_os_SELinux),
-    REG_JNI(register_android_os_Trace),
-    REG_JNI(register_android_os_UEventObserver),
-    REG_JNI(register_android_net_LocalSocketImpl),
-    REG_JNI(register_android_net_NetworkUtils),
-    REG_JNI(register_android_os_MemoryFile),
-    REG_JNI(register_android_os_SharedMemory),
-    REG_JNI(register_android_os_incremental_IncrementalManager),
-    REG_JNI(register_com_android_internal_os_ClassLoaderFactory),
-    REG_JNI(register_com_android_internal_os_Zygote),
-    REG_JNI(register_com_android_internal_os_ZygoteInit),
-    REG_JNI(register_com_android_internal_util_VirtualRefBasePtr),
-    REG_JNI(register_android_hardware_Camera),
-    REG_JNI(register_android_hardware_camera2_CameraMetadata),
-    REG_JNI(register_android_hardware_camera2_legacy_LegacyCameraDevice),
-    REG_JNI(register_android_hardware_camera2_legacy_PerfMeasurement),
-    REG_JNI(register_android_hardware_camera2_DngCreator),
-    REG_JNI(register_android_hardware_HardwareBuffer),
-    REG_JNI(register_android_hardware_SensorManager),
-    REG_JNI(register_android_hardware_SerialPort),
-    REG_JNI(register_android_hardware_UsbDevice),
-    REG_JNI(register_android_hardware_UsbDeviceConnection),
-    REG_JNI(register_android_hardware_UsbRequest),
-    REG_JNI(register_android_hardware_location_ActivityRecognitionHardware),
-    REG_JNI(register_android_media_AudioDeviceAddress),
-    REG_JNI(register_android_media_AudioEffectDescriptor),
-    REG_JNI(register_android_media_AudioSystem),
-    REG_JNI(register_android_media_AudioRecord),
-    REG_JNI(register_android_media_AudioTrack),
-    REG_JNI(register_android_media_AudioAttributes),
-    REG_JNI(register_android_media_AudioProductStrategies),
-    REG_JNI(register_android_media_AudioVolumeGroups),
-    REG_JNI(register_android_media_AudioVolumeGroupChangeHandler),
-    REG_JNI(register_android_media_MediaMetrics),
-    REG_JNI(register_android_media_MicrophoneInfo),
-    REG_JNI(register_android_media_RemoteDisplay),
-    REG_JNI(register_android_media_ToneGenerator),
-    REG_JNI(register_android_media_midi),
+        REG_JNI(register_com_android_internal_os_RuntimeInit),
+        REG_JNI(register_com_android_internal_os_ZygoteInit_nativeZygoteInit),
+        REG_JNI(register_android_os_SystemClock),
+        REG_JNI(register_android_util_EventLog),
+        REG_JNI(register_android_util_Log),
+        REG_JNI(register_android_util_MemoryIntArray),
+        REG_JNI(register_android_util_StatsLogInternal),
+        REG_JNI(register_android_app_admin_SecurityLog),
+        REG_JNI(register_android_content_AssetManager),
+        REG_JNI(register_android_content_StringBlock),
+        REG_JNI(register_android_content_XmlBlock),
+        REG_JNI(register_android_content_res_ApkAssets),
+        REG_JNI(register_android_text_AndroidCharacter),
+        REG_JNI(register_android_text_Hyphenator),
+        REG_JNI(register_android_view_InputDevice),
+        REG_JNI(register_android_view_KeyCharacterMap),
+        REG_JNI(register_android_os_Process),
+        REG_JNI(register_android_os_SystemProperties),
+        REG_JNI(register_android_os_Binder),
+        REG_JNI(register_android_os_Parcel),
+        REG_JNI(register_android_os_HidlMemory),
+        REG_JNI(register_android_os_HidlSupport),
+        REG_JNI(register_android_os_HwBinder),
+        REG_JNI(register_android_os_HwBlob),
+        REG_JNI(register_android_os_HwParcel),
+        REG_JNI(register_android_os_HwRemoteBinder),
+        REG_JNI(register_android_os_NativeHandle),
+        REG_JNI(register_android_os_storage_StorageManager),
+        REG_JNI(register_android_os_VintfObject),
+        REG_JNI(register_android_os_VintfRuntimeInfo),
+        REG_JNI(register_android_service_DataLoaderService),
+        REG_JNI(register_android_view_DisplayEventReceiver),
+        REG_JNI(register_android_view_InputApplicationHandle),
+        REG_JNI(register_android_view_InputWindowHandle),
+        REG_JNI(register_android_view_Surface),
+        REG_JNI(register_android_view_SurfaceControl),
+        REG_JNI(register_android_view_SurfaceSession),
+        REG_JNI(register_android_view_CompositionSamplingListener),
+        REG_JNI(register_android_view_TextureView),
+        REG_JNI(register_com_google_android_gles_jni_EGLImpl),
+        REG_JNI(register_com_google_android_gles_jni_GLImpl),
+        REG_JNI(register_android_opengl_jni_EGL14),
+        REG_JNI(register_android_opengl_jni_EGL15),
+        REG_JNI(register_android_opengl_jni_EGLExt),
+        REG_JNI(register_android_opengl_jni_GLES10),
+        REG_JNI(register_android_opengl_jni_GLES10Ext),
+        REG_JNI(register_android_opengl_jni_GLES11),
+        REG_JNI(register_android_opengl_jni_GLES11Ext),
+        REG_JNI(register_android_opengl_jni_GLES20),
+        REG_JNI(register_android_opengl_jni_GLES30),
+        REG_JNI(register_android_opengl_jni_GLES31),
+        REG_JNI(register_android_opengl_jni_GLES31Ext),
+        REG_JNI(register_android_opengl_jni_GLES32),
+        REG_JNI(register_android_graphics_classes),
+        REG_JNI(register_android_graphics_BLASTBufferQueue),
+        REG_JNI(register_android_graphics_GraphicBuffer),
+        REG_JNI(register_android_database_CursorWindow),
+        REG_JNI(register_android_database_SQLiteConnection),
+        REG_JNI(register_android_database_SQLiteGlobal),
+        REG_JNI(register_android_database_SQLiteDebug),
+        REG_JNI(register_android_os_Debug),
+        REG_JNI(register_android_os_FileObserver),
+        REG_JNI(register_android_os_GraphicsEnvironment),
+        REG_JNI(register_android_os_MessageQueue),
+        REG_JNI(register_android_os_SELinux),
+        REG_JNI(register_android_os_Trace),
+        REG_JNI(register_android_os_UEventObserver),
+        REG_JNI(register_android_net_LocalSocketImpl),
+        REG_JNI(register_android_net_NetworkUtils),
+        REG_JNI(register_android_os_MemoryFile),
+        REG_JNI(register_android_os_SharedMemory),
+        REG_JNI(register_android_os_incremental_IncrementalManager),
+        REG_JNI(register_com_android_internal_content_om_OverlayConfig),
+        REG_JNI(register_com_android_internal_os_ClassLoaderFactory),
+        REG_JNI(register_com_android_internal_os_Zygote),
+        REG_JNI(register_com_android_internal_os_ZygoteInit),
+        REG_JNI(register_com_android_internal_util_VirtualRefBasePtr),
+        REG_JNI(register_android_hardware_Camera),
+        REG_JNI(register_android_hardware_camera2_CameraMetadata),
+        REG_JNI(register_android_hardware_camera2_legacy_LegacyCameraDevice),
+        REG_JNI(register_android_hardware_camera2_legacy_PerfMeasurement),
+        REG_JNI(register_android_hardware_camera2_DngCreator),
+        REG_JNI(register_android_hardware_HardwareBuffer),
+        REG_JNI(register_android_hardware_SensorManager),
+        REG_JNI(register_android_hardware_SerialPort),
+        REG_JNI(register_android_hardware_UsbDevice),
+        REG_JNI(register_android_hardware_UsbDeviceConnection),
+        REG_JNI(register_android_hardware_UsbRequest),
+        REG_JNI(register_android_hardware_location_ActivityRecognitionHardware),
+        REG_JNI(register_android_media_AudioDeviceAttributes),
+        REG_JNI(register_android_media_AudioEffectDescriptor),
+        REG_JNI(register_android_media_AudioSystem),
+        REG_JNI(register_android_media_AudioRecord),
+        REG_JNI(register_android_media_AudioTrack),
+        REG_JNI(register_android_media_AudioAttributes),
+        REG_JNI(register_android_media_AudioProductStrategies),
+        REG_JNI(register_android_media_AudioVolumeGroups),
+        REG_JNI(register_android_media_AudioVolumeGroupChangeHandler),
+        REG_JNI(register_android_media_MediaMetrics),
+        REG_JNI(register_android_media_MicrophoneInfo),
+        REG_JNI(register_android_media_RemoteDisplay),
+        REG_JNI(register_android_media_ToneGenerator),
+        REG_JNI(register_android_media_midi),
 
-    REG_JNI(register_android_opengl_classes),
-    REG_JNI(register_android_server_NetworkManagementSocketTagger),
-    REG_JNI(register_android_ddm_DdmHandleNativeHeap),
-    REG_JNI(register_android_backup_BackupDataInput),
-    REG_JNI(register_android_backup_BackupDataOutput),
-    REG_JNI(register_android_backup_FileBackupHelperBase),
-    REG_JNI(register_android_backup_BackupHelperDispatcher),
-    REG_JNI(register_android_app_backup_FullBackup),
-    REG_JNI(register_android_app_Activity),
-    REG_JNI(register_android_app_ActivityThread),
-    REG_JNI(register_android_app_NativeActivity),
-    REG_JNI(register_android_util_jar_StrictJarFile),
-    REG_JNI(register_android_view_InputChannel),
-    REG_JNI(register_android_view_InputEventReceiver),
-    REG_JNI(register_android_view_InputEventSender),
-    REG_JNI(register_android_view_InputQueue),
-    REG_JNI(register_android_view_KeyEvent),
-    REG_JNI(register_android_view_MotionEvent),
-    REG_JNI(register_android_view_PointerIcon),
-    REG_JNI(register_android_view_VelocityTracker),
+        REG_JNI(register_android_opengl_classes),
+        REG_JNI(register_android_server_NetworkManagementSocketTagger),
+        REG_JNI(register_android_ddm_DdmHandleNativeHeap),
+        REG_JNI(register_android_backup_BackupDataInput),
+        REG_JNI(register_android_backup_BackupDataOutput),
+        REG_JNI(register_android_backup_FileBackupHelperBase),
+        REG_JNI(register_android_backup_BackupHelperDispatcher),
+        REG_JNI(register_android_app_backup_FullBackup),
+        REG_JNI(register_android_app_Activity),
+        REG_JNI(register_android_app_ActivityThread),
+        REG_JNI(register_android_app_NativeActivity),
+        REG_JNI(register_android_util_jar_StrictJarFile),
+        REG_JNI(register_android_view_InputChannel),
+        REG_JNI(register_android_view_InputEventReceiver),
+        REG_JNI(register_android_view_InputEventSender),
+        REG_JNI(register_android_view_InputQueue),
+        REG_JNI(register_android_view_KeyEvent),
+        REG_JNI(register_android_view_MotionEvent),
+        REG_JNI(register_android_view_PointerIcon),
+        REG_JNI(register_android_view_VelocityTracker),
+        REG_JNI(register_android_view_VerifiedKeyEvent),
+        REG_JNI(register_android_view_VerifiedMotionEvent),
 
-    REG_JNI(register_android_content_res_ObbScanner),
-    REG_JNI(register_android_content_res_Configuration),
+        REG_JNI(register_android_content_res_ObbScanner),
+        REG_JNI(register_android_content_res_Configuration),
 
-    REG_JNI(register_android_animation_PropertyValuesHolder),
-    REG_JNI(register_android_security_Scrypt),
-    REG_JNI(register_com_android_internal_content_NativeLibraryHelper),
-    REG_JNI(register_com_android_internal_os_FuseAppLoop),
+        REG_JNI(register_android_animation_PropertyValuesHolder),
+        REG_JNI(register_android_security_Scrypt),
+        REG_JNI(register_com_android_internal_content_NativeLibraryHelper),
+        REG_JNI(register_com_android_internal_os_FuseAppLoop),
+        REG_JNI(register_com_android_internal_os_KernelCpuUidBpfMapReader),
+        REG_JNI(register_com_android_internal_os_KernelSingleUidTimeReader),
 };
 
 /*
diff --git a/core/jni/LayoutlibLoader.cpp b/core/jni/LayoutlibLoader.cpp
index 571a3387..7ee509b 100644
--- a/core/jni/LayoutlibLoader.cpp
+++ b/core/jni/LayoutlibLoader.cpp
@@ -40,6 +40,7 @@
 extern int register_android_graphics_CreateJavaOutputStreamAdaptor(JNIEnv* env);
 extern int register_android_graphics_Graphics(JNIEnv* env);
 extern int register_android_graphics_ImageDecoder(JNIEnv*);
+extern int register_android_graphics_Interpolator(JNIEnv* env);
 extern int register_android_graphics_MaskFilter(JNIEnv* env);
 extern int register_android_graphics_NinePatch(JNIEnv*);
 extern int register_android_graphics_PathEffect(JNIEnv* env);
@@ -64,6 +65,8 @@
 extern int register_android_graphics_PathMeasure(JNIEnv* env);
 extern int register_android_graphics_Picture(JNIEnv* env);
 extern int register_android_graphics_Region(JNIEnv* env);
+extern int register_android_graphics_animation_NativeInterpolatorFactory(JNIEnv* env);
+extern int register_android_graphics_animation_RenderNodeAnimator(JNIEnv* env);
 extern int register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env);
 extern int register_android_graphics_drawable_VectorDrawable(JNIEnv* env);
 extern int register_android_graphics_fonts_Font(JNIEnv* env);
@@ -79,11 +82,10 @@
 extern int register_android_util_EventLog(JNIEnv* env);
 extern int register_android_util_Log(JNIEnv* env);
 extern int register_android_util_PathParser(JNIEnv* env);
+extern int register_android_util_jar_StrictJarFile(JNIEnv* env);
 extern int register_android_view_RenderNode(JNIEnv* env);
-extern int register_android_view_RenderNodeAnimator(JNIEnv* env);
 extern int register_android_view_DisplayListCanvas(JNIEnv* env);
 extern int register_com_android_internal_util_VirtualRefBasePtr(JNIEnv *env);
-extern int register_com_android_internal_view_animation_NativeInterpolatorFactoryHelper(JNIEnv *env);
 
 #define REG_JNI(name)      { name }
 struct RegJNIRec {
@@ -115,6 +117,7 @@
         {"android.graphics.FontFamily", REG_JNI(register_android_graphics_FontFamily)},
         {"android.graphics.Graphics", REG_JNI(register_android_graphics_Graphics)},
         {"android.graphics.ImageDecoder", REG_JNI(register_android_graphics_ImageDecoder)},
+        {"android.graphics.Interpolator", REG_JNI(register_android_graphics_Interpolator)},
         {"android.graphics.MaskFilter", REG_JNI(register_android_graphics_MaskFilter)},
         {"android.graphics.Matrix", REG_JNI(register_android_graphics_Matrix)},
         {"android.graphics.NinePatch", REG_JNI(register_android_graphics_NinePatch)},
@@ -127,6 +130,10 @@
         {"android.graphics.Region", REG_JNI(register_android_graphics_Region)},
         {"android.graphics.Shader", REG_JNI(register_android_graphics_Shader)},
         {"android.graphics.Typeface", REG_JNI(register_android_graphics_Typeface)},
+        {"android.graphics.animation.NativeInterpolatorFactory",
+         REG_JNI(register_android_graphics_animation_NativeInterpolatorFactory)},
+        {"android.graphics.animation.RenderNodeAnimator",
+         REG_JNI(register_android_graphics_animation_RenderNodeAnimator)},
         {"android.graphics.drawable.AnimatedVectorDrawable",
          REG_JNI(register_android_graphics_drawable_AnimatedVectorDrawable)},
         {"android.graphics.drawable.VectorDrawable",
@@ -147,11 +154,9 @@
         {"android.util.EventLog", REG_JNI(register_android_util_EventLog)},
         {"android.util.Log", REG_JNI(register_android_util_Log)},
         {"android.util.PathParser", REG_JNI(register_android_util_PathParser)},
-        {"android.view.RenderNodeAnimator", REG_JNI(register_android_view_RenderNodeAnimator)},
+        {"android.util.jar.StrictJarFile", REG_JNI(register_android_util_jar_StrictJarFile)},
         {"com.android.internal.util.VirtualRefBasePtr",
          REG_JNI(register_com_android_internal_util_VirtualRefBasePtr)},
-        {"com.android.internal.view.animation.NativeInterpolatorFactoryHelper",
-         REG_JNI(register_com_android_internal_view_animation_NativeInterpolatorFactoryHelper)},
 };
 // Vector to store the names of classes that need delegates of their native methods
 static vector<string> classesToDelegate;
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index 30e914d..130322a 100755
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -19,11 +19,10 @@
 #include <utils/Color.h>
 
 #ifdef __ANDROID__ // Layoutlib does not support graphic buffer, parcel or render thread
-#include <binder/Parcel.h>
-#include <renderthread/RenderProxy.h>
 #include <android_runtime/android_graphics_GraphicBuffer.h>
-#include <android_runtime/android_hardware_HardwareBuffer.h>
-#include <private/android/AHardwareBufferHelpers.h>
+#include <binder/Parcel.h>
+#include <dlfcn.h>
+#include <renderthread/RenderProxy.h>
 #endif
 
 #include "core_jni_helpers.h"
@@ -1027,11 +1026,18 @@
     return createBitmap(env, bitmap.release(), getPremulBitmapCreateFlags(false));
 }
 
+#ifdef __ANDROID__ // Layoutlib does not support graphic buffer
+typedef AHardwareBuffer* (*AHB_from_HB)(JNIEnv*, jobject);
+AHB_from_HB AHardwareBuffer_fromHardwareBuffer;
+
+typedef jobject (*AHB_to_HB)(JNIEnv*, AHardwareBuffer*);
+AHB_to_HB AHardwareBuffer_toHardwareBuffer;
+#endif
+
 static jobject Bitmap_wrapHardwareBufferBitmap(JNIEnv* env, jobject, jobject hardwareBuffer,
                                                jlong colorSpacePtr) {
 #ifdef __ANDROID__ // Layoutlib does not support graphic buffer
-    AHardwareBuffer* buffer = android_hardware_HardwareBuffer_getNativeHardwareBuffer(env,
-        hardwareBuffer);
+    AHardwareBuffer* buffer = AHardwareBuffer_fromHardwareBuffer(env, hardwareBuffer);
     sk_sp<Bitmap> bitmap = Bitmap::createFrom(buffer,
                                               GraphicsJNI::getNativeColorSpace(colorSpacePtr));
     if (!bitmap.get()) {
@@ -1057,6 +1063,19 @@
 #endif
 }
 
+static jobject Bitmap_getHardwareBuffer(JNIEnv* env, jobject, jlong bitmapPtr) {
+#ifdef __ANDROID__ // Layoutlib does not support graphic buffer
+    LocalScopedBitmap bitmapHandle(bitmapPtr);
+    LOG_ALWAYS_FATAL_IF(!bitmapHandle->isHardware(),
+            "Hardware config is only supported config in Bitmap_getHardwareBuffer");
+
+    Bitmap& bitmap = bitmapHandle->bitmap();
+    return AHardwareBuffer_toHardwareBuffer(env, bitmap.hardwareBuffer());
+#else
+    return NULL;
+#endif
+}
+
 static jboolean Bitmap_isImmutable(CRITICAL_JNI_PARAMS_COMMA jlong bitmapHandle) {
     LocalScopedBitmap bitmapHolder(bitmapHandle);
     if (!bitmapHolder.valid()) return JNI_FALSE;
@@ -1123,6 +1142,8 @@
         (void*) Bitmap_wrapHardwareBufferBitmap },
     {   "nativeCreateGraphicBufferHandle", "(J)Landroid/graphics/GraphicBuffer;",
         (void*) Bitmap_createGraphicBufferHandle },
+    {   "nativeGetHardwareBuffer", "(J)Landroid/hardware/HardwareBuffer;",
+        (void*) Bitmap_getHardwareBuffer },
     {   "nativeComputeColorSpace",  "(J)Landroid/graphics/ColorSpace;", (void*)Bitmap_computeColorSpace },
     {   "nativeSetColorSpace",      "(JJ)V", (void*)Bitmap_setColorSpace },
     {   "nativeIsSRGB",             "(J)Z", (void*)Bitmap_isSRGB },
@@ -1140,6 +1161,18 @@
     gBitmap_nativePtr = GetFieldIDOrDie(env, gBitmap_class, "mNativePtr", "J");
     gBitmap_constructorMethodID = GetMethodIDOrDie(env, gBitmap_class, "<init>", "(JIIIZ[BLandroid/graphics/NinePatch$InsetStruct;Z)V");
     gBitmap_reinitMethodID = GetMethodIDOrDie(env, gBitmap_class, "reinit", "(IIZ)V");
+
+#ifdef __ANDROID__ // Layoutlib does not support graphic buffer
+    void* handle_ = dlopen("libandroid.so", RTLD_NOW | RTLD_NODELETE);
+    AHardwareBuffer_fromHardwareBuffer =
+            (AHB_from_HB)dlsym(handle_, "AHardwareBuffer_fromHardwareBuffer");
+    LOG_ALWAYS_FATAL_IF(AHardwareBuffer_fromHardwareBuffer == nullptr,
+                        "Failed to find required symbol AHardwareBuffer_fromHardwareBuffer!");
+
+    AHardwareBuffer_toHardwareBuffer = (AHB_to_HB)dlsym(handle_, "AHardwareBuffer_toHardwareBuffer");
+    LOG_ALWAYS_FATAL_IF(AHardwareBuffer_toHardwareBuffer == nullptr,
+                        " Failed to find required symbol AHardwareBuffer_toHardwareBuffer!");
+#endif
     return android::RegisterMethodsOrDie(env, "android/graphics/Bitmap", gBitmapMethods,
                                          NELEM(gBitmapMethods));
 }
diff --git a/core/jni/android/graphics/FontFamily.cpp b/core/jni/android/graphics/FontFamily.cpp
index 8fc6afa..0fd9cc7 100644
--- a/core/jni/android/graphics/FontFamily.cpp
+++ b/core/jni/android/graphics/FontFamily.cpp
@@ -27,16 +27,14 @@
 #include <nativehelper/ScopedPrimitiveArray.h>
 #include <nativehelper/ScopedUtfChars.h>
 #include <android_runtime/AndroidRuntime.h>
-#include <android_runtime/android_util_AssetManager.h>
-#include <androidfw/AssetManager2.h>
 #include "Utils.h"
 #include "FontUtils.h"
 
 #include <hwui/MinikinSkia.h>
 #include <hwui/Typeface.h>
-#include <utils/FatVector.h>
 #include <minikin/FontFamily.h>
 #include <minikin/LocaleList.h>
+#include <ui/FatVector.h>
 
 #include <memory>
 
@@ -109,7 +107,7 @@
 
 static bool addSkTypeface(NativeFamilyBuilder* builder, sk_sp<SkData>&& data, int ttcIndex,
         jint weight, jint italic) {
-    uirenderer::FatVector<SkFontArguments::Axis, 2> skiaAxes;
+    FatVector<SkFontArguments::Axis, 2> skiaAxes;
     for (const auto& axis : builder->axes) {
         skiaAxes.emplace_back(SkFontArguments::Axis{axis.axisTag, axis.value});
     }
@@ -212,63 +210,6 @@
     return addSkTypeface(builder, std::move(data), ttcIndex, weight, isItalic);
 }
 
-static void releaseAsset(const void* ptr, void* context) {
-    delete static_cast<Asset*>(context);
-}
-
-static jboolean FontFamily_addFontFromAssetManager(JNIEnv* env, jobject, jlong builderPtr,
-        jobject jassetMgr, jstring jpath, jint cookie, jboolean isAsset, jint ttcIndex,
-        jint weight, jint isItalic) {
-#ifdef __ANDROID__ // Layoutlib does not support native AssetManager
-    NPE_CHECK_RETURN_ZERO(env, jassetMgr);
-    NPE_CHECK_RETURN_ZERO(env, jpath);
-
-    NativeFamilyBuilder* builder = toNativeBuilder(builderPtr);
-    Guarded<AssetManager2>* mgr = AssetManagerForJavaObject(env, jassetMgr);
-    if (NULL == mgr) {
-        builder->axes.clear();
-        return false;
-    }
-
-    ScopedUtfChars str(env, jpath);
-    if (str.c_str() == nullptr) {
-        builder->axes.clear();
-        return false;
-    }
-
-    std::unique_ptr<Asset> asset;
-    {
-      ScopedLock<AssetManager2> locked_mgr(*mgr);
-      if (isAsset) {
-          asset = locked_mgr->Open(str.c_str(), Asset::ACCESS_BUFFER);
-      } else if (cookie > 0) {
-          // Valid java cookies are 1-based, but AssetManager cookies are 0-based.
-          asset = locked_mgr->OpenNonAsset(str.c_str(), static_cast<ApkAssetsCookie>(cookie - 1),
-                  Asset::ACCESS_BUFFER);
-      } else {
-          asset = locked_mgr->OpenNonAsset(str.c_str(), Asset::ACCESS_BUFFER);
-      }
-    }
-
-    if (nullptr == asset) {
-        builder->axes.clear();
-        return false;
-    }
-
-    const void* buf = asset->getBuffer(false);
-    if (NULL == buf) {
-        builder->axes.clear();
-        return false;
-    }
-
-    sk_sp<SkData> data(SkData::MakeWithProc(buf, asset->getLength(), releaseAsset,
-            asset.release()));
-    return addSkTypeface(builder, std::move(data), ttcIndex, weight, isItalic);
-#else
-    return false;
-#endif
-}
-
 static void FontFamily_addAxisValue(CRITICAL_JNI_PARAMS_COMMA jlong builderPtr, jint tag, jfloat value) {
     NativeFamilyBuilder* builder = toNativeBuilder(builderPtr);
     builder->axes.push_back({static_cast<minikin::AxisTag>(tag), value});
@@ -284,8 +225,6 @@
     { "nAddFont",               "(JLjava/nio/ByteBuffer;III)Z", (void*)FontFamily_addFont },
     { "nAddFontWeightStyle",    "(JLjava/nio/ByteBuffer;III)Z",
             (void*)FontFamily_addFontWeightStyle },
-    { "nAddFontFromAssetManager",    "(JLandroid/content/res/AssetManager;Ljava/lang/String;IZIII)Z",
-            (void*)FontFamily_addFontFromAssetManager },
     { "nAddAxisValue",         "(JIF)V", (void*)FontFamily_addAxisValue },
 };
 
diff --git a/core/jni/android/graphics/Graphics.cpp b/core/jni/android/graphics/Graphics.cpp
index aa209cb..38fb8bd 100644
--- a/core/jni/android/graphics/Graphics.cpp
+++ b/core/jni/android/graphics/Graphics.cpp
@@ -569,8 +569,8 @@
     // mRecycledBitmap specifies the width and height of the bitmap that we
     // want to reuse.  Neither can be changed.  We will try to find a way
     // to reuse the memory.
-    const int maxWidth = SkTMax(bitmap->width(), mRecycledBitmap->info().width());
-    const int maxHeight = SkTMax(bitmap->height(), mRecycledBitmap->info().height());
+    const int maxWidth = std::max(bitmap->width(), mRecycledBitmap->info().width());
+    const int maxHeight = std::max(bitmap->height(), mRecycledBitmap->info().height());
     const SkImageInfo maxInfo = bitmap->info().makeWH(maxWidth, maxHeight);
     const size_t rowBytes = maxInfo.minRowBytes();
     const size_t bytesNeeded = maxInfo.computeByteSize(rowBytes);
diff --git a/core/jni/android/graphics/GraphicsStatsService.cpp b/core/jni/android/graphics/GraphicsStatsService.cpp
new file mode 100644
index 0000000..ef0aacc
--- /dev/null
+++ b/core/jni/android/graphics/GraphicsStatsService.cpp
@@ -0,0 +1,195 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "GraphicsStatsService"
+
+#include <JankTracker.h>
+#include <jni.h>
+#include <log/log.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
+#include <nativehelper/ScopedUtfChars.h>
+#include <service/GraphicsStatsService.h>
+#include <stats_event.h>
+#include <stats_pull_atom_callback.h>
+#include <statslog.h>
+#include "core_jni_helpers.h"
+
+namespace android {
+
+using namespace android::uirenderer;
+
+static jint getAshmemSize(JNIEnv*, jobject) {
+    return sizeof(ProfileData);
+}
+
+static jlong createDump(JNIEnv*, jobject, jint fd, jboolean isProto) {
+    GraphicsStatsService::Dump* dump =
+            GraphicsStatsService::createDump(fd,
+                                             isProto ? GraphicsStatsService::DumpType::Protobuf
+                                                     : GraphicsStatsService::DumpType::Text);
+    return reinterpret_cast<jlong>(dump);
+}
+
+static void addToDump(JNIEnv* env, jobject, jlong dumpPtr, jstring jpath, jstring jpackage,
+                      jlong versionCode, jlong startTime, jlong endTime, jbyteArray jdata) {
+    std::string path;
+    const ProfileData* data = nullptr;
+    LOG_ALWAYS_FATAL_IF(jdata == nullptr && jpath == nullptr, "Path and data can't both be null");
+    ScopedByteArrayRO buffer{env};
+    if (jdata != nullptr) {
+        buffer.reset(jdata);
+        LOG_ALWAYS_FATAL_IF(buffer.size() != sizeof(ProfileData),
+                            "Buffer size %zu doesn't match expected %zu!", buffer.size(),
+                            sizeof(ProfileData));
+        data = reinterpret_cast<const ProfileData*>(buffer.get());
+    }
+    if (jpath != nullptr) {
+        ScopedUtfChars pathChars(env, jpath);
+        LOG_ALWAYS_FATAL_IF(pathChars.size() <= 0 || !pathChars.c_str(),
+                            "Failed to get path chars");
+        path.assign(pathChars.c_str(), pathChars.size());
+    }
+    ScopedUtfChars packageChars(env, jpackage);
+    LOG_ALWAYS_FATAL_IF(packageChars.size() <= 0 || !packageChars.c_str(),
+                        "Failed to get path chars");
+    GraphicsStatsService::Dump* dump = reinterpret_cast<GraphicsStatsService::Dump*>(dumpPtr);
+    LOG_ALWAYS_FATAL_IF(!dump, "null passed for dump pointer");
+
+    const std::string package(packageChars.c_str(), packageChars.size());
+    GraphicsStatsService::addToDump(dump, path, package, versionCode, startTime, endTime, data);
+}
+
+static void addFileToDump(JNIEnv* env, jobject, jlong dumpPtr, jstring jpath) {
+    ScopedUtfChars pathChars(env, jpath);
+    LOG_ALWAYS_FATAL_IF(pathChars.size() <= 0 || !pathChars.c_str(), "Failed to get path chars");
+    const std::string path(pathChars.c_str(), pathChars.size());
+    GraphicsStatsService::Dump* dump = reinterpret_cast<GraphicsStatsService::Dump*>(dumpPtr);
+    GraphicsStatsService::addToDump(dump, path);
+}
+
+static void finishDump(JNIEnv*, jobject, jlong dumpPtr) {
+    GraphicsStatsService::Dump* dump = reinterpret_cast<GraphicsStatsService::Dump*>(dumpPtr);
+    GraphicsStatsService::finishDump(dump);
+}
+
+static void finishDumpInMemory(JNIEnv* env, jobject, jlong dumpPtr, jlong pulledData,
+                               jboolean lastFullDay) {
+    GraphicsStatsService::Dump* dump = reinterpret_cast<GraphicsStatsService::Dump*>(dumpPtr);
+    AStatsEventList* data = reinterpret_cast<AStatsEventList*>(pulledData);
+    GraphicsStatsService::finishDumpInMemory(dump, data, lastFullDay == JNI_TRUE);
+}
+
+static void saveBuffer(JNIEnv* env, jobject clazz, jstring jpath, jstring jpackage,
+                       jlong versionCode, jlong startTime, jlong endTime, jbyteArray jdata) {
+    ScopedByteArrayRO buffer(env, jdata);
+    LOG_ALWAYS_FATAL_IF(buffer.size() != sizeof(ProfileData),
+                        "Buffer size %zu doesn't match expected %zu!", buffer.size(),
+                        sizeof(ProfileData));
+    ScopedUtfChars pathChars(env, jpath);
+    LOG_ALWAYS_FATAL_IF(pathChars.size() <= 0 || !pathChars.c_str(), "Failed to get path chars");
+    ScopedUtfChars packageChars(env, jpackage);
+    LOG_ALWAYS_FATAL_IF(packageChars.size() <= 0 || !packageChars.c_str(),
+                        "Failed to get path chars");
+
+    const std::string path(pathChars.c_str(), pathChars.size());
+    const std::string package(packageChars.c_str(), packageChars.size());
+    const ProfileData* data = reinterpret_cast<const ProfileData*>(buffer.get());
+    GraphicsStatsService::saveBuffer(path, package, versionCode, startTime, endTime, data);
+}
+
+static jobject gGraphicsStatsServiceObject = nullptr;
+static jmethodID gGraphicsStatsService_pullGraphicsStatsMethodID;
+
+static JNIEnv* getJNIEnv() {
+    JavaVM* vm = AndroidRuntime::getJavaVM();
+    JNIEnv* env = nullptr;
+    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
+        if (vm->AttachCurrentThreadAsDaemon(&env, nullptr) != JNI_OK) {
+            LOG_ALWAYS_FATAL("Failed to AttachCurrentThread!");
+        }
+    }
+    return env;
+}
+
+// graphicsStatsPullCallback is invoked by statsd service to pull GRAPHICS_STATS atom.
+static AStatsManager_PullAtomCallbackReturn graphicsStatsPullCallback(int32_t atom_tag,
+                                                                      AStatsEventList* data,
+                                                                      void* cookie) {
+    JNIEnv* env = getJNIEnv();
+    if (!env) {
+        return false;
+    }
+    if (gGraphicsStatsServiceObject == nullptr) {
+        ALOGE("Failed to get graphicsstats service");
+        return AStatsManager_PULL_SKIP;
+    }
+
+    for (bool lastFullDay : {true, false}) {
+        env->CallVoidMethod(gGraphicsStatsServiceObject,
+                            gGraphicsStatsService_pullGraphicsStatsMethodID,
+                            (jboolean)(lastFullDay ? JNI_TRUE : JNI_FALSE),
+                            reinterpret_cast<jlong>(data));
+        if (env->ExceptionCheck()) {
+            env->ExceptionDescribe();
+            env->ExceptionClear();
+            ALOGE("Failed to invoke graphicsstats service");
+            return AStatsManager_PULL_SKIP;
+        }
+    }
+    return AStatsManager_PULL_SUCCESS;
+}
+
+// Register a puller for GRAPHICS_STATS atom with the statsd service.
+static void nativeInit(JNIEnv* env, jobject javaObject) {
+    gGraphicsStatsServiceObject = env->NewGlobalRef(javaObject);
+    AStatsManager_PullAtomMetadata* metadata = AStatsManager_PullAtomMetadata_obtain();
+    AStatsManager_PullAtomMetadata_setCoolDownNs(metadata, 10 * 1000000);  // 10 milliseconds
+    AStatsManager_PullAtomMetadata_setTimeoutNs(metadata, 2 * NS_PER_SEC); // 2 seconds
+
+    AStatsManager_registerPullAtomCallback(android::util::GRAPHICS_STATS,
+                                           &graphicsStatsPullCallback, metadata, nullptr);
+
+    AStatsManager_PullAtomMetadata_release(metadata);
+}
+
+static void nativeDestructor(JNIEnv* env, jobject javaObject) {
+    AStatsManager_unregisterPullAtomCallback(android::util::GRAPHICS_STATS);
+    env->DeleteGlobalRef(gGraphicsStatsServiceObject);
+    gGraphicsStatsServiceObject = nullptr;
+}
+
+static const JNINativeMethod sMethods[] =
+        {{"nGetAshmemSize", "()I", (void*)getAshmemSize},
+         {"nCreateDump", "(IZ)J", (void*)createDump},
+         {"nAddToDump", "(JLjava/lang/String;Ljava/lang/String;JJJ[B)V", (void*)addToDump},
+         {"nAddToDump", "(JLjava/lang/String;)V", (void*)addFileToDump},
+         {"nFinishDump", "(J)V", (void*)finishDump},
+         {"nFinishDumpInMemory", "(JJZ)V", (void*)finishDumpInMemory},
+         {"nSaveBuffer", "(Ljava/lang/String;Ljava/lang/String;JJJ[B)V", (void*)saveBuffer},
+         {"nativeInit", "()V", (void*)nativeInit},
+         {"nativeDestructor", "()V", (void*)nativeDestructor}};
+
+int register_android_graphics_GraphicsStatsService(JNIEnv* env) {
+    jclass graphicsStatsService_class =
+            FindClassOrDie(env, "android/graphics/GraphicsStatsService");
+    gGraphicsStatsService_pullGraphicsStatsMethodID =
+            GetMethodIDOrDie(env, graphicsStatsService_class, "pullGraphicsStats", "(ZJ)V");
+    return jniRegisterNativeMethods(env, "android/graphics/GraphicsStatsService", sMethods,
+                                    NELEM(sMethods));
+}
+
+} // namespace android
diff --git a/core/jni/android/graphics/apex/jni_runtime.cpp b/core/jni/android/graphics/apex/jni_runtime.cpp
index 1f66153..35c997d 100644
--- a/core/jni/android/graphics/apex/jni_runtime.cpp
+++ b/core/jni/android/graphics/apex/jni_runtime.cpp
@@ -60,6 +60,8 @@
 extern int register_android_graphics_Picture(JNIEnv*);
 extern int register_android_graphics_Region(JNIEnv* env);
 extern int register_android_graphics_SurfaceTexture(JNIEnv* env);
+extern int register_android_graphics_animation_NativeInterpolatorFactory(JNIEnv* env);
+extern int register_android_graphics_animation_RenderNodeAnimator(JNIEnv* env);
 extern int register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env);
 extern int register_android_graphics_drawable_VectorDrawable(JNIEnv* env);
 extern int register_android_graphics_fonts_Font(JNIEnv* env);
@@ -123,6 +125,8 @@
     REG_JNI(register_android_graphics_SurfaceTexture),
     REG_JNI(register_android_graphics_Typeface),
     REG_JNI(register_android_graphics_YuvImage),
+    REG_JNI(register_android_graphics_animation_NativeInterpolatorFactory),
+    REG_JNI(register_android_graphics_animation_RenderNodeAnimator),
     REG_JNI(register_android_graphics_drawable_AnimatedVectorDrawable),
     REG_JNI(register_android_graphics_drawable_VectorDrawable),
     REG_JNI(register_android_graphics_fonts_Font),
diff --git a/core/jni/android/graphics/fonts/Font.cpp b/core/jni/android/graphics/fonts/Font.cpp
index bb0654d..bfb9bae 100644
--- a/core/jni/android/graphics/fonts/Font.cpp
+++ b/core/jni/android/graphics/fonts/Font.cpp
@@ -26,15 +26,13 @@
 #include "GraphicsJNI.h"
 #include <nativehelper/ScopedUtfChars.h>
 #include <android_runtime/AndroidRuntime.h>
-#include <android_runtime/android_util_AssetManager.h>
-#include <androidfw/AssetManager2.h>
 #include "Utils.h"
 #include "FontUtils.h"
 
 #include <hwui/MinikinSkia.h>
 #include <hwui/Typeface.h>
-#include <utils/FatVector.h>
 #include <minikin/FontFamily.h>
+#include <ui/FatVector.h>
 
 #include <memory>
 
@@ -48,14 +46,6 @@
     return reinterpret_cast<NativeFontBuilder*>(ptr);
 }
 
-static inline Asset* toAsset(jlong ptr) {
-    return reinterpret_cast<Asset*>(ptr);
-}
-
-static void releaseAsset(jlong asset) {
-    delete toAsset(asset);
-}
-
 static void releaseFont(jlong font) {
     delete reinterpret_cast<FontWrapper*>(font);
 }
@@ -79,54 +69,6 @@
 }
 
 // Regular JNI
-static jlong Font_Builder_getNativeAsset(
-    JNIEnv* env, jobject clazz, jobject assetMgr, jstring path, jboolean isAsset, jint cookie) {
-#ifdef __ANDROID__ // Layoutlib does not support native AssetManager
-    NPE_CHECK_RETURN_ZERO(env, assetMgr);
-    NPE_CHECK_RETURN_ZERO(env, path);
-
-    Guarded<AssetManager2>* mgr = AssetManagerForJavaObject(env, assetMgr);
-    if (mgr == nullptr) {
-        return 0;
-    }
-
-    ScopedUtfChars str(env, path);
-    if (str.c_str() == nullptr) {
-        return 0;
-    }
-
-    std::unique_ptr<Asset> asset;
-    {
-      ScopedLock<AssetManager2> locked_mgr(*mgr);
-      if (isAsset) {
-          asset = locked_mgr->Open(str.c_str(), Asset::ACCESS_BUFFER);
-      } else if (cookie > 0) {
-          // Valid java cookies are 1-based, but AssetManager cookies are 0-based.
-          asset = locked_mgr->OpenNonAsset(str.c_str(), static_cast<ApkAssetsCookie>(cookie - 1),
-                  Asset::ACCESS_BUFFER);
-      } else {
-          asset = locked_mgr->OpenNonAsset(str.c_str(), Asset::ACCESS_BUFFER);
-      }
-    }
-
-    return reinterpret_cast<jlong>(asset.release());
-#else
-    return 0;
-#endif
-}
-
-// Regular JNI
-static jobject Font_Builder_getAssetBuffer(JNIEnv* env, jobject clazz, jlong nativeAsset) {
-    Asset* asset = toAsset(nativeAsset);
-    return env->NewDirectByteBuffer(const_cast<void*>(asset->getBuffer(false)), asset->getLength());
-}
-
-// CriticalNative
-static jlong Font_Builder_getReleaseNativeAssetFunc(CRITICAL_JNI_PARAMS) {
-    return reinterpret_cast<jlong>(&releaseAsset);
-}
-
-// Regular JNI
 static jlong Font_Builder_initBuilder(JNIEnv*, jobject) {
     return reinterpret_cast<jlong>(new NativeFontBuilder());
 }
@@ -157,7 +99,7 @@
     sk_sp<SkData> data(SkData::MakeWithProc(fontPtr, fontSize,
             release_global_ref, reinterpret_cast<void*>(fontRef)));
 
-    uirenderer::FatVector<SkFontArguments::Axis, 2> skiaAxes;
+    FatVector<SkFontArguments::Axis, 2> skiaAxes;
     for (const auto& axis : builder->axes) {
         skiaAxes.emplace_back(SkFontArguments::Axis{axis.axisTag, axis.value});
     }
@@ -196,11 +138,6 @@
     { "nAddAxis", "(JIF)V", (void*) Font_Builder_addAxis },
     { "nBuild", "(JLjava/nio/ByteBuffer;Ljava/lang/String;IZI)J", (void*) Font_Builder_build },
     { "nGetReleaseNativeFont", "()J", (void*) Font_Builder_getReleaseNativeFont },
-
-    { "nGetNativeAsset", "(Landroid/content/res/AssetManager;Ljava/lang/String;ZI)J",
-      (void*) Font_Builder_getNativeAsset },
-    { "nGetAssetBuffer", "(J)Ljava/nio/ByteBuffer;", (void*) Font_Builder_getAssetBuffer },
-    { "nGetReleaseNativeAssetFunc", "()J", (void*) Font_Builder_getReleaseNativeAssetFunc },
 };
 
 int register_android_graphics_fonts_Font(JNIEnv* env) {
diff --git a/core/jni/android_graphics_animation_NativeInterpolatorFactory.cpp b/core/jni/android_graphics_animation_NativeInterpolatorFactory.cpp
new file mode 100644
index 0000000..2073ac2
--- /dev/null
+++ b/core/jni/android_graphics_animation_NativeInterpolatorFactory.cpp
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "OpenGLRenderer"
+
+#include "jni.h"
+#include <nativehelper/JNIHelp.h>
+#include <cutils/log.h>
+#include "core_jni_helpers.h"
+
+#include <Interpolator.h>
+
+namespace android {
+
+using namespace uirenderer;
+
+static jlong createAccelerateDecelerateInterpolator(JNIEnv* env, jobject clazz) {
+    return reinterpret_cast<jlong>(new AccelerateDecelerateInterpolator());
+}
+
+static jlong createAccelerateInterpolator(JNIEnv* env, jobject clazz, jfloat factor) {
+    return reinterpret_cast<jlong>(new AccelerateInterpolator(factor));
+}
+
+static jlong createAnticipateInterpolator(JNIEnv* env, jobject clazz, jfloat tension) {
+    return reinterpret_cast<jlong>(new AnticipateInterpolator(tension));
+}
+
+static jlong createAnticipateOvershootInterpolator(JNIEnv* env, jobject clazz, jfloat tension) {
+    return reinterpret_cast<jlong>(new AnticipateOvershootInterpolator(tension));
+}
+
+static jlong createBounceInterpolator(JNIEnv* env, jobject clazz) {
+    return reinterpret_cast<jlong>(new BounceInterpolator());
+}
+
+static jlong createCycleInterpolator(JNIEnv* env, jobject clazz, jfloat cycles) {
+    return reinterpret_cast<jlong>(new CycleInterpolator(cycles));
+}
+
+static jlong createDecelerateInterpolator(JNIEnv* env, jobject clazz, jfloat factor) {
+    return reinterpret_cast<jlong>(new DecelerateInterpolator(factor));
+}
+
+static jlong createLinearInterpolator(JNIEnv* env, jobject clazz) {
+    return reinterpret_cast<jlong>(new LinearInterpolator());
+}
+
+static jlong createOvershootInterpolator(JNIEnv* env, jobject clazz, jfloat tension) {
+    return reinterpret_cast<jlong>(new OvershootInterpolator(tension));
+}
+
+static jlong createPathInterpolator(JNIEnv* env, jobject clazz, jfloatArray jX, jfloatArray jY) {
+    jsize lenX = env->GetArrayLength(jX);
+    jsize lenY = env->GetArrayLength(jY);
+    LOG_ALWAYS_FATAL_IF(lenX != lenY || lenX <= 0, "Invalid path interpolator, x size: %d,"
+            " y size: %d", lenX, lenY);
+    std::vector<float> x(lenX);
+    std::vector<float> y(lenY);
+    env->GetFloatArrayRegion(jX, 0, lenX, x.data());
+    env->GetFloatArrayRegion(jY, 0, lenX, y.data());
+
+    return reinterpret_cast<jlong>(new PathInterpolator(std::move(x), std::move(y)));
+}
+
+static jlong createLutInterpolator(JNIEnv* env, jobject clazz, jfloatArray jlut) {
+    jsize len = env->GetArrayLength(jlut);
+    if (len <= 0) {
+        return 0;
+    }
+    float* lut = new float[len];
+    env->GetFloatArrayRegion(jlut, 0, len, lut);
+    return reinterpret_cast<jlong>(new LUTInterpolator(lut, len));
+}
+
+// ----------------------------------------------------------------------------
+// JNI Glue
+// ----------------------------------------------------------------------------
+
+const char* const kClassPathName = "android/graphics/animation/NativeInterpolatorFactory";
+
+static const JNINativeMethod gMethods[] = {
+    { "createAccelerateDecelerateInterpolator", "()J", (void*) createAccelerateDecelerateInterpolator },
+    { "createAccelerateInterpolator", "(F)J", (void*) createAccelerateInterpolator },
+    { "createAnticipateInterpolator", "(F)J", (void*) createAnticipateInterpolator },
+    { "createAnticipateOvershootInterpolator", "(F)J", (void*) createAnticipateOvershootInterpolator },
+    { "createBounceInterpolator", "()J", (void*) createBounceInterpolator },
+    { "createCycleInterpolator", "(F)J", (void*) createCycleInterpolator },
+    { "createDecelerateInterpolator", "(F)J", (void*) createDecelerateInterpolator },
+    { "createLinearInterpolator", "()J", (void*) createLinearInterpolator },
+    { "createOvershootInterpolator", "(F)J", (void*) createOvershootInterpolator },
+    { "createPathInterpolator", "([F[F)J", (void*) createPathInterpolator },
+    { "createLutInterpolator", "([F)J", (void*) createLutInterpolator },
+};
+
+int register_android_graphics_animation_NativeInterpolatorFactory(JNIEnv* env) {
+    return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods));
+}
+
+
+} // namespace android
diff --git a/core/jni/android_graphics_animation_RenderNodeAnimator.cpp b/core/jni/android_graphics_animation_RenderNodeAnimator.cpp
new file mode 100644
index 0000000..878d4fc
--- /dev/null
+++ b/core/jni/android_graphics_animation_RenderNodeAnimator.cpp
@@ -0,0 +1,225 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 "OpenGLRenderer"
+
+#include "jni.h"
+#include <nativehelper/JNIHelp.h>
+#include <android_runtime/AndroidRuntime.h>
+
+#include <Animator.h>
+#include <Interpolator.h>
+#include <RenderProperties.h>
+
+#include "core_jni_helpers.h"
+
+namespace android {
+
+using namespace uirenderer;
+
+static struct {
+    jclass clazz;
+
+    jmethodID callOnFinished;
+} gRenderNodeAnimatorClassInfo;
+
+static JNIEnv* getEnv(JavaVM* vm) {
+    JNIEnv* env;
+    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
+        return 0;
+    }
+    return env;
+}
+
+class AnimationListenerLifecycleChecker : public AnimationListener {
+public:
+    virtual void onAnimationFinished(BaseRenderNodeAnimator* animator) {
+        LOG_ALWAYS_FATAL("Lifecycle failure, nStart(%p) wasn't called", animator);
+    }
+};
+
+static AnimationListenerLifecycleChecker sLifecycleChecker;
+
+class AnimationListenerBridge : public AnimationListener {
+public:
+    // This holds a strong reference to a Java WeakReference<T> object. This avoids
+    // cyclic-references-of-doom. If you think "I know, just use NewWeakGlobalRef!"
+    // then you end up with basically a PhantomReference, which is totally not
+    // what we want.
+    AnimationListenerBridge(JNIEnv* env, jobject finishListener) {
+        mFinishListener = env->NewGlobalRef(finishListener);
+        env->GetJavaVM(&mJvm);
+    }
+
+    virtual ~AnimationListenerBridge() {
+        if (mFinishListener) {
+            onAnimationFinished(NULL);
+        }
+    }
+
+    virtual void onAnimationFinished(BaseRenderNodeAnimator*) {
+        LOG_ALWAYS_FATAL_IF(!mFinishListener, "Finished listener twice?");
+        JNIEnv* env = getEnv(mJvm);
+        env->CallStaticVoidMethod(
+                gRenderNodeAnimatorClassInfo.clazz,
+                gRenderNodeAnimatorClassInfo.callOnFinished,
+                mFinishListener);
+        releaseJavaObject();
+    }
+
+private:
+    void releaseJavaObject() {
+        JNIEnv* env = getEnv(mJvm);
+        env->DeleteGlobalRef(mFinishListener);
+        mFinishListener = NULL;
+    }
+
+    JavaVM* mJvm;
+    jobject mFinishListener;
+};
+
+static inline RenderPropertyAnimator::RenderProperty toRenderProperty(jint property) {
+    LOG_ALWAYS_FATAL_IF(property < 0 || property > RenderPropertyAnimator::ALPHA,
+            "Invalid property %d", property);
+    return static_cast<RenderPropertyAnimator::RenderProperty>(property);
+}
+
+static inline CanvasPropertyPaintAnimator::PaintField toPaintField(jint field) {
+    LOG_ALWAYS_FATAL_IF(field < 0
+            || field > CanvasPropertyPaintAnimator::ALPHA,
+            "Invalid paint field %d", field);
+    return static_cast<CanvasPropertyPaintAnimator::PaintField>(field);
+}
+
+static jlong createAnimator(JNIEnv* env, jobject clazz,
+        jint propertyRaw, jfloat finalValue) {
+    RenderPropertyAnimator::RenderProperty property = toRenderProperty(propertyRaw);
+    BaseRenderNodeAnimator* animator = new RenderPropertyAnimator(property, finalValue);
+    animator->setListener(&sLifecycleChecker);
+    return reinterpret_cast<jlong>( animator );
+}
+
+static jlong createCanvasPropertyFloatAnimator(JNIEnv* env, jobject clazz,
+        jlong canvasPropertyPtr, jfloat finalValue) {
+    CanvasPropertyPrimitive* canvasProperty = reinterpret_cast<CanvasPropertyPrimitive*>(canvasPropertyPtr);
+    BaseRenderNodeAnimator* animator = new CanvasPropertyPrimitiveAnimator(canvasProperty, finalValue);
+    animator->setListener(&sLifecycleChecker);
+    return reinterpret_cast<jlong>( animator );
+}
+
+static jlong createCanvasPropertyPaintAnimator(JNIEnv* env, jobject clazz,
+        jlong canvasPropertyPtr, jint paintFieldRaw,
+        jfloat finalValue) {
+    CanvasPropertyPaint* canvasProperty = reinterpret_cast<CanvasPropertyPaint*>(canvasPropertyPtr);
+    CanvasPropertyPaintAnimator::PaintField paintField = toPaintField(paintFieldRaw);
+    BaseRenderNodeAnimator* animator = new CanvasPropertyPaintAnimator(
+            canvasProperty, paintField, finalValue);
+    animator->setListener(&sLifecycleChecker);
+    return reinterpret_cast<jlong>( animator );
+}
+
+static jlong createRevealAnimator(JNIEnv* env, jobject clazz,
+        jint centerX, jint centerY, jfloat startRadius, jfloat endRadius) {
+    BaseRenderNodeAnimator* animator = new RevealAnimator(centerX, centerY, startRadius, endRadius);
+    animator->setListener(&sLifecycleChecker);
+    return reinterpret_cast<jlong>( animator );
+}
+
+static void setStartValue(JNIEnv* env, jobject clazz, jlong animatorPtr, jfloat startValue) {
+    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
+    animator->setStartValue(startValue);
+}
+
+static void setDuration(JNIEnv* env, jobject clazz, jlong animatorPtr, jlong duration) {
+    LOG_ALWAYS_FATAL_IF(duration < 0, "Duration cannot be negative");
+    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
+    animator->setDuration(duration);
+}
+
+static jlong getDuration(JNIEnv* env, jobject clazz, jlong animatorPtr) {
+    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
+    return static_cast<jlong>(animator->duration());
+}
+
+static void setStartDelay(JNIEnv* env, jobject clazz, jlong animatorPtr, jlong startDelay) {
+    LOG_ALWAYS_FATAL_IF(startDelay < 0, "Start delay cannot be negative");
+    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
+    animator->setStartDelay(startDelay);
+}
+
+static void setInterpolator(JNIEnv* env, jobject clazz, jlong animatorPtr, jlong interpolatorPtr) {
+    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
+    Interpolator* interpolator = reinterpret_cast<Interpolator*>(interpolatorPtr);
+    animator->setInterpolator(interpolator);
+}
+
+static void setAllowRunningAsync(JNIEnv* env, jobject clazz, jlong animatorPtr, jboolean mayRunAsync) {
+    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
+    animator->setAllowRunningAsync(mayRunAsync);
+}
+
+static void setListener(JNIEnv* env, jobject clazz, jlong animatorPtr, jobject finishListener) {
+    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
+    animator->setListener(new AnimationListenerBridge(env, finishListener));
+}
+
+static void start(JNIEnv* env, jobject clazz, jlong animatorPtr) {
+    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
+    animator->start();
+}
+
+static void end(JNIEnv* env, jobject clazz, jlong animatorPtr) {
+    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
+    animator->cancel();
+}
+
+// ----------------------------------------------------------------------------
+// JNI Glue
+// ----------------------------------------------------------------------------
+
+const char* const kClassPathName = "android/graphics/animation/RenderNodeAnimator";
+
+static const JNINativeMethod gMethods[] = {
+    { "nCreateAnimator", "(IF)J", (void*) createAnimator },
+    { "nCreateCanvasPropertyFloatAnimator", "(JF)J", (void*) createCanvasPropertyFloatAnimator },
+    { "nCreateCanvasPropertyPaintAnimator", "(JIF)J", (void*) createCanvasPropertyPaintAnimator },
+    { "nCreateRevealAnimator", "(IIFF)J", (void*) createRevealAnimator },
+    { "nSetStartValue", "(JF)V", (void*) setStartValue },
+    { "nSetDuration", "(JJ)V", (void*) setDuration },
+    { "nGetDuration", "(J)J", (void*) getDuration },
+    { "nSetStartDelay", "(JJ)V", (void*) setStartDelay },
+    { "nSetInterpolator", "(JJ)V", (void*) setInterpolator },
+    { "nSetAllowRunningAsync", "(JZ)V", (void*) setAllowRunningAsync },
+    { "nSetListener", "(JLandroid/graphics/animation/RenderNodeAnimator;)V", (void*) setListener},
+    { "nStart", "(J)V", (void*) start},
+    { "nEnd", "(J)V", (void*) end },
+};
+
+int register_android_graphics_animation_RenderNodeAnimator(JNIEnv* env) {
+    sLifecycleChecker.incStrong(0);
+    gRenderNodeAnimatorClassInfo.clazz = FindClassOrDie(env, kClassPathName);
+    gRenderNodeAnimatorClassInfo.clazz = MakeGlobalRefOrDie(env,
+                                                            gRenderNodeAnimatorClassInfo.clazz);
+
+    gRenderNodeAnimatorClassInfo.callOnFinished = GetStaticMethodIDOrDie(
+            env, gRenderNodeAnimatorClassInfo.clazz, "callOnFinished",
+            "(Landroid/graphics/animation/RenderNodeAnimator;)V");
+
+    return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods));
+}
+
+
+} // namespace android
diff --git a/core/jni/android_hardware_camera2_CameraMetadata.cpp b/core/jni/android_hardware_camera2_CameraMetadata.cpp
index fad5b0e..c523e2d 100644
--- a/core/jni/android_hardware_camera2_CameraMetadata.cpp
+++ b/core/jni/android_hardware_camera2_CameraMetadata.cpp
@@ -89,13 +89,13 @@
         ALOGE("%s: Invalid output metadata object.", __FUNCTION__);
         return BAD_VALUE;
     }
-    CameraMetadata* nativePtr = reinterpret_cast<CameraMetadata*>(env->GetLongField(thiz,
-            fields.metadata_ptr));
+    auto nativePtr = reinterpret_cast<std::shared_ptr<CameraMetadata> *>(
+            env->GetLongField(thiz, fields.metadata_ptr));
     if (nativePtr == NULL) {
         ALOGE("%s: Invalid native pointer in java metadata object.", __FUNCTION__);
         return BAD_VALUE;
     }
-    *metadata = *nativePtr;
+    *metadata = *(nativePtr->get());
     return OK;
 }
 
@@ -171,12 +171,15 @@
 
 // Less safe access to native pointer. Does NOT throw any Java exceptions if NULL.
 static CameraMetadata* CameraMetadata_getPointerNoThrow(JNIEnv *env, jobject thiz) {
-
-    if (thiz == NULL) {
-        return NULL;
+    if (thiz == nullptr) {
+        return nullptr;
     }
-
-    return reinterpret_cast<CameraMetadata*>(env->GetLongField(thiz, fields.metadata_ptr));
+    auto metadata = reinterpret_cast<std::shared_ptr<CameraMetadata> *>(
+            env->GetLongField(thiz, fields.metadata_ptr));
+    if (metadata == nullptr) {
+        return nullptr;
+    }
+    return metadata->get();
 }
 
 // Safe access to native pointer from object. Throws if not possible to access.
@@ -205,7 +208,7 @@
 static jlong CameraMetadata_allocate(JNIEnv *env, jobject thiz) {
     ALOGV("%s", __FUNCTION__);
 
-    return reinterpret_cast<jlong>(new CameraMetadata());
+    return reinterpret_cast<jlong>(new std::shared_ptr<CameraMetadata>(new CameraMetadata()));
 }
 
 static jlong CameraMetadata_allocateCopy(JNIEnv *env, jobject thiz,
@@ -214,12 +217,12 @@
 
     CameraMetadata* otherMetadata =
             CameraMetadata_getPointerThrow(env, other, "other");
-
     // In case of exception, return
     if (otherMetadata == NULL) return NULL;
 
-    // Clone native metadata and return new pointer
-    return reinterpret_cast<jlong>(new CameraMetadata(*otherMetadata));
+    // Clone native metadata and return new pointer.
+    auto clonedMetadata = new CameraMetadata(*otherMetadata);
+    return reinterpret_cast<jlong>(new std::shared_ptr<CameraMetadata>(clonedMetadata));
 }
 
 
@@ -256,14 +259,16 @@
 static void CameraMetadata_close(JNIEnv *env, jobject thiz) {
     ALOGV("%s", __FUNCTION__);
 
-    CameraMetadata* metadata = CameraMetadata_getPointerNoThrow(env, thiz);
-
-    if (metadata != NULL) {
-        delete metadata;
-        env->SetLongField(thiz, fields.metadata_ptr, 0);
+    if (thiz != nullptr) {
+        auto metadata = reinterpret_cast<std::shared_ptr<CameraMetadata> *>(
+                env->GetLongField(thiz, fields.metadata_ptr));
+        if (metadata != nullptr) {
+            delete metadata;
+            env->SetLongField(thiz, fields.metadata_ptr, 0);
+        }
     }
 
-    LOG_ALWAYS_FATAL_IF(CameraMetadata_getPointerNoThrow(env, thiz) != NULL,
+    LOG_ALWAYS_FATAL_IF(CameraMetadata_getPointerNoThrow(env, thiz) != nullptr,
                         "Expected the native ptr to be 0 after #close");
 }
 
diff --git a/core/jni/android_media_AudioDeviceAddress.cpp b/core/jni/android_media_AudioDeviceAddress.cpp
deleted file mode 100644
index 5f39f7e..0000000
--- a/core/jni/android_media_AudioDeviceAddress.cpp
+++ /dev/null
@@ -1,53 +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.
- */
-
-#include "core_jni_helpers.h"
-#include "android_media_AudioDeviceAddress.h"
-#include "android_media_AudioErrors.h"
-
-#include <media/AudioDeviceTypeAddr.h>
-
-using namespace android;
-
-static jclass gAudioDeviceAddressClass;
-static jmethodID gAudioDeviceAddressCstor;
-
-namespace android {
-
-jint createAudioDeviceAddressFromNative(
-        JNIEnv *env, jobject *jAudioDeviceAddress,
-        const AudioDeviceTypeAddr *devTypeAddr) {
-    jint jStatus = (jint)AUDIO_JAVA_SUCCESS;
-    jint jNativeType = (jint)devTypeAddr->mType;
-    ScopedLocalRef<jstring> jAddress(env, env->NewStringUTF(devTypeAddr->mAddress.data()));
-
-    *jAudioDeviceAddress = env->NewObject(gAudioDeviceAddressClass, gAudioDeviceAddressCstor,
-            jNativeType, jAddress.get());
-
-    return jStatus;
-}
-
-}
-
-int register_android_media_AudioDeviceAddress(JNIEnv *env)
-{
-    jclass audioDeviceTypeAddressClass = FindClassOrDie(env, "android/media/AudioDeviceAddress");
-    gAudioDeviceAddressClass = MakeGlobalRefOrDie(env, audioDeviceTypeAddressClass);
-    gAudioDeviceAddressCstor = GetMethodIDOrDie(env, audioDeviceTypeAddressClass, "<init>",
-                                                "(ILjava/lang/String;)V");
-
-    return 0;
-}
diff --git a/core/jni/android_media_AudioDeviceAddress.h b/core/jni/android_media_AudioDeviceAddress.h
deleted file mode 100644
index c66b179..0000000
--- a/core/jni/android_media_AudioDeviceAddress.h
+++ /dev/null
@@ -1,33 +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.
- */
-
-#ifndef ANDROID_MEDIA_AUDIODEVICEADDRESS_H
-#define ANDROID_MEDIA_AUDIODEVICEADDRESS_H
-
-#include <system/audio.h>
-#include <media/AudioDeviceTypeAddr.h>
-
-#include "jni.h"
-
-namespace android {
-
-// Create a Java AudioDeviceAddress instance from a C++ AudioDeviceTypeAddress
-
-extern jint createAudioDeviceAddressFromNative(JNIEnv *env, jobject *jAudioDeviceAddress,
-        const AudioDeviceTypeAddr *devTypeAddr);
-} // namespace android
-
-#endif
\ No newline at end of file
diff --git a/core/jni/android_media_AudioDeviceAttributes.cpp b/core/jni/android_media_AudioDeviceAttributes.cpp
new file mode 100644
index 0000000..e79c95e
--- /dev/null
+++ b/core/jni/android_media_AudioDeviceAttributes.cpp
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+
+#include "android_media_AudioDeviceAttributes.h"
+#include "android_media_AudioErrors.h"
+#include "core_jni_helpers.h"
+
+#include <media/AudioDeviceTypeAddr.h>
+
+using namespace android;
+
+static jclass gAudioDeviceAttributesClass;
+static jmethodID gAudioDeviceAttributesCstor;
+
+namespace android {
+
+jint createAudioDeviceAttributesFromNative(JNIEnv *env, jobject *jAudioDeviceAttributes,
+                                 const AudioDeviceTypeAddr *devTypeAddr) {
+    jint jStatus = (jint)AUDIO_JAVA_SUCCESS;
+    jint jNativeType = (jint)devTypeAddr->mType;
+    ScopedLocalRef<jstring> jAddress(env, env->NewStringUTF(devTypeAddr->mAddress.data()));
+
+    *jAudioDeviceAttributes = env->NewObject(gAudioDeviceAttributesClass, gAudioDeviceAttributesCstor,
+            jNativeType, jAddress.get());
+
+    return jStatus;
+}
+
+} // namespace android
+
+int register_android_media_AudioDeviceAttributes(JNIEnv *env) {
+    jclass audioDeviceTypeAddressClass =
+            FindClassOrDie(env, "android/media/AudioDeviceAttributes");
+    gAudioDeviceAttributesClass = MakeGlobalRefOrDie(env, audioDeviceTypeAddressClass);
+    gAudioDeviceAttributesCstor =
+            GetMethodIDOrDie(env, audioDeviceTypeAddressClass, "<init>", "(ILjava/lang/String;)V");
+
+    return 0;
+}
diff --git a/core/jni/android_media_AudioDeviceAttributes.h b/core/jni/android_media_AudioDeviceAttributes.h
new file mode 100644
index 0000000..b49d9ba
--- /dev/null
+++ b/core/jni/android_media_AudioDeviceAttributes.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+#ifndef ANDROID_MEDIA_AUDIODEVICEATTRIBUTES_H
+#define ANDROID_MEDIA_AUDIODEVICEATTRIBUTES_H
+
+#include <media/AudioDeviceTypeAddr.h>
+#include <system/audio.h>
+
+#include "jni.h"
+
+namespace android {
+
+// Create a Java AudioDeviceAttributes instance from a C++ AudioDeviceTypeAddress
+
+extern jint createAudioDeviceAttributesFromNative(JNIEnv *env, jobject *jAudioDeviceAttributes,
+                                        const AudioDeviceTypeAddr *devTypeAddr);
+} // namespace android
+
+#endif
\ No newline at end of file
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 0156e23..ab3cf30 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -26,12 +26,6 @@
 #include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
-#include "android_media_AudioAttributes.h"
-#include "android_media_AudioDeviceAddress.h"
-#include "android_media_AudioEffectDescriptor.h"
-#include "android_media_AudioErrors.h"
-#include "android_media_AudioFormat.h"
-#include "android_media_MicrophoneInfo.h"
 #include <audiomanager/AudioManager.h>
 #include <media/AudioPolicy.h>
 #include <media/AudioSystem.h>
@@ -39,6 +33,12 @@
 #include <nativehelper/ScopedLocalRef.h>
 #include <system/audio.h>
 #include <system/audio_policy.h>
+#include "android_media_AudioAttributes.h"
+#include "android_media_AudioDeviceAttributes.h"
+#include "android_media_AudioEffectDescriptor.h"
+#include "android_media_AudioErrors.h"
+#include "android_media_AudioFormat.h"
+#include "android_media_MicrophoneInfo.h"
 
 // ----------------------------------------------------------------------------
 
@@ -147,6 +147,7 @@
 static struct {
     jfieldID    mCriteria;
     jfieldID    mAllowPrivilegedPlaybackCapture;
+    jfieldID    mVoiceCommunicationCaptureAllowed;
     // other fields unused by JNI
 } gAudioMixingRuleFields;
 
@@ -565,10 +566,10 @@
     return (jint) status;
 }
 
-static jint
-android_media_AudioSystem_setPhoneState(JNIEnv *env, jobject thiz, jint state)
-{
-    return (jint) check_AudioSystem_Command(AudioSystem::setPhoneState((audio_mode_t) state));
+static jint android_media_AudioSystem_setPhoneState(JNIEnv *env, jobject thiz, jint state,
+                                                    jint uid) {
+    return (jint)check_AudioSystem_Command(
+            AudioSystem::setPhoneState((audio_mode_t)state, (uid_t)uid));
 }
 
 static jint
@@ -1919,6 +1920,8 @@
     jobject jRuleCriteria = env->GetObjectField(jRule, gAudioMixingRuleFields.mCriteria);
     nAudioMix->mAllowPrivilegedPlaybackCapture =
             env->GetBooleanField(jRule, gAudioMixingRuleFields.mAllowPrivilegedPlaybackCapture);
+    nAudioMix->mVoiceCommunicationCaptureAllowed =
+            env->GetBooleanField(jRule, gAudioMixingRuleFields.mVoiceCommunicationCaptureAllowed);
     env->DeleteLocalRef(jRule);
     jobjectArray jCriteria = (jobjectArray)env->CallObjectMethod(jRuleCriteria,
                                                                  gArrayListMethods.toArray);
@@ -2349,7 +2352,7 @@
         jint strategy, jobjectArray jDeviceArray)
 {
     if (jDeviceArray == nullptr || env->GetArrayLength(jDeviceArray) != 1) {
-        ALOGE("%s invalid array to store AudioDeviceAddress", __FUNCTION__);
+        ALOGE("%s invalid array to store AudioDeviceAttributes", __FUNCTION__);
         return (jint)AUDIO_JAVA_BAD_VALUE;
     }
 
@@ -2359,10 +2362,10 @@
     if (status != NO_ERROR) {
         return (jint) status;
     }
-    jobject jAudioDeviceAddress = NULL;
-    jint jStatus = createAudioDeviceAddressFromNative(env, &jAudioDeviceAddress, &elDevice);
+    jobject jAudioDeviceAttributes = NULL;
+    jint jStatus = createAudioDeviceAttributesFromNative(env, &jAudioDeviceAttributes, &elDevice);
     if (jStatus == AUDIO_JAVA_SUCCESS) {
-        env->SetObjectArrayElement(jDeviceArray, 0, jAudioDeviceAddress);
+        env->SetObjectArrayElement(jDeviceArray, 0, jAudioDeviceAttributes);
     }
     return jStatus;
 }
@@ -2377,7 +2380,7 @@
     // with reverse JNI to make the array grow as need as this would be less efficient, and some
     // components call this method often
     if (jDeviceArray == nullptr || maxResultSize == 0) {
-        ALOGE("%s invalid array to store AudioDeviceAddress", __FUNCTION__);
+        ALOGE("%s invalid array to store AudioDeviceAttributes", __FUNCTION__);
         return (jint)AUDIO_JAVA_BAD_VALUE;
     }
 
@@ -2398,105 +2401,133 @@
         return AUDIO_JAVA_INVALID_OPERATION;
     }
     size_t index = 0;
-    jobject jAudioDeviceAddress = NULL;
+    jobject jAudioDeviceAttributes = NULL;
     for (const auto& device : devices) {
-        jStatus = createAudioDeviceAddressFromNative(env, &jAudioDeviceAddress, &device);
+        jStatus = createAudioDeviceAttributesFromNative(env, &jAudioDeviceAttributes, &device);
         if (jStatus != AUDIO_JAVA_SUCCESS) {
             return jStatus;
         }
-        env->SetObjectArrayElement(jDeviceArray, index++, jAudioDeviceAddress);
+        env->SetObjectArrayElement(jDeviceArray, index++, jAudioDeviceAttributes);
     }
     return jStatus;
 }
 
 // ----------------------------------------------------------------------------
 
-static const JNINativeMethod gMethods[] = {
-    {"setParameters",        "(Ljava/lang/String;)I", (void *)android_media_AudioSystem_setParameters},
-    {"getParameters",        "(Ljava/lang/String;)Ljava/lang/String;", (void *)android_media_AudioSystem_getParameters},
-    {"muteMicrophone",      "(Z)I",     (void *)android_media_AudioSystem_muteMicrophone},
-    {"isMicrophoneMuted",   "()Z",      (void *)android_media_AudioSystem_isMicrophoneMuted},
-    {"isStreamActive",      "(II)Z",    (void *)android_media_AudioSystem_isStreamActive},
-    {"isStreamActiveRemotely","(II)Z",  (void *)android_media_AudioSystem_isStreamActiveRemotely},
-    {"isSourceActive",      "(I)Z",     (void *)android_media_AudioSystem_isSourceActive},
-    {"newAudioSessionId",   "()I",      (void *)android_media_AudioSystem_newAudioSessionId},
-    {"newAudioPlayerId",    "()I",      (void *)android_media_AudioSystem_newAudioPlayerId},
-    {"newAudioRecorderId",  "()I",      (void *)android_media_AudioSystem_newAudioRecorderId},
-    {"setDeviceConnectionState", "(IILjava/lang/String;Ljava/lang/String;I)I", (void *)android_media_AudioSystem_setDeviceConnectionState},
-    {"getDeviceConnectionState", "(ILjava/lang/String;)I",  (void *)android_media_AudioSystem_getDeviceConnectionState},
-    {"handleDeviceConfigChange", "(ILjava/lang/String;Ljava/lang/String;I)I", (void *)android_media_AudioSystem_handleDeviceConfigChange},
-    {"setPhoneState",       "(I)I",     (void *)android_media_AudioSystem_setPhoneState},
-    {"setForceUse",         "(II)I",    (void *)android_media_AudioSystem_setForceUse},
-    {"getForceUse",         "(I)I",     (void *)android_media_AudioSystem_getForceUse},
-    {"initStreamVolume",    "(III)I",   (void *)android_media_AudioSystem_initStreamVolume},
-    {"setStreamVolumeIndex","(III)I",   (void *)android_media_AudioSystem_setStreamVolumeIndex},
-    {"getStreamVolumeIndex","(II)I",    (void *)android_media_AudioSystem_getStreamVolumeIndex},
-    {"setVolumeIndexForAttributes","(Landroid/media/AudioAttributes;II)I",   (void *)android_media_AudioSystem_setVolumeIndexForAttributes},
-    {"getVolumeIndexForAttributes","(Landroid/media/AudioAttributes;I)I",    (void *)android_media_AudioSystem_getVolumeIndexForAttributes},
-    {"getMinVolumeIndexForAttributes","(Landroid/media/AudioAttributes;)I",    (void *)android_media_AudioSystem_getMinVolumeIndexForAttributes},
-    {"getMaxVolumeIndexForAttributes","(Landroid/media/AudioAttributes;)I",    (void *)android_media_AudioSystem_getMaxVolumeIndexForAttributes},
-    {"setMasterVolume",     "(F)I",     (void *)android_media_AudioSystem_setMasterVolume},
-    {"getMasterVolume",     "()F",      (void *)android_media_AudioSystem_getMasterVolume},
-    {"setMasterMute",       "(Z)I",     (void *)android_media_AudioSystem_setMasterMute},
-    {"getMasterMute",       "()Z",      (void *)android_media_AudioSystem_getMasterMute},
-    {"setMasterMono",       "(Z)I",     (void *)android_media_AudioSystem_setMasterMono},
-    {"getMasterMono",       "()Z",      (void *)android_media_AudioSystem_getMasterMono},
-    {"setMasterBalance",    "(F)I",     (void *)android_media_AudioSystem_setMasterBalance},
-    {"getMasterBalance",    "()F",      (void *)android_media_AudioSystem_getMasterBalance},
-    {"getDevicesForStream", "(I)I",     (void *)android_media_AudioSystem_getDevicesForStream},
-    {"getPrimaryOutputSamplingRate", "()I", (void *)android_media_AudioSystem_getPrimaryOutputSamplingRate},
-    {"getPrimaryOutputFrameCount",   "()I", (void *)android_media_AudioSystem_getPrimaryOutputFrameCount},
-    {"getOutputLatency",    "(I)I",     (void *)android_media_AudioSystem_getOutputLatency},
-    {"setLowRamDevice",     "(ZJ)I",    (void *)android_media_AudioSystem_setLowRamDevice},
-    {"checkAudioFlinger",    "()I",     (void *)android_media_AudioSystem_checkAudioFlinger},
-    {"listAudioPorts",      "(Ljava/util/ArrayList;[I)I",
-                                                (void *)android_media_AudioSystem_listAudioPorts},
-    {"createAudioPatch",    "([Landroid/media/AudioPatch;[Landroid/media/AudioPortConfig;[Landroid/media/AudioPortConfig;)I",
-                                            (void *)android_media_AudioSystem_createAudioPatch},
-    {"releaseAudioPatch",   "(Landroid/media/AudioPatch;)I",
-                                            (void *)android_media_AudioSystem_releaseAudioPatch},
-    {"listAudioPatches",    "(Ljava/util/ArrayList;[I)I",
-                                                (void *)android_media_AudioSystem_listAudioPatches},
-    {"setAudioPortConfig",   "(Landroid/media/AudioPortConfig;)I",
-                                            (void *)android_media_AudioSystem_setAudioPortConfig},
-    {"startAudioSource",    "(Landroid/media/AudioPortConfig;Landroid/media/AudioAttributes;)I",
-                                            (void *)android_media_AudioSystem_startAudioSource},
-    {"stopAudioSource",     "(I)I", (void *)android_media_AudioSystem_stopAudioSource},
-    {"getAudioHwSyncForSession", "(I)I",
-                                    (void *)android_media_AudioSystem_getAudioHwSyncForSession},
-    {"registerPolicyMixes",    "(Ljava/util/ArrayList;Z)I",
-                                            (void *)android_media_AudioSystem_registerPolicyMixes},
-    {"setUidDeviceAffinities", "(I[I[Ljava/lang/String;)I",
-                                        (void *)android_media_AudioSystem_setUidDeviceAffinities},
-    {"removeUidDeviceAffinities", "(I)I",
-                                        (void *)android_media_AudioSystem_removeUidDeviceAffinities},
-    {"native_register_dynamic_policy_callback", "()V",
-                                    (void *)android_media_AudioSystem_registerDynPolicyCallback},
-    {"native_register_recording_callback", "()V",
-                                    (void *)android_media_AudioSystem_registerRecordingCallback},
-    {"systemReady", "()I", (void *)android_media_AudioSystem_systemReady},
-    {"getStreamVolumeDB", "(III)F", (void *)android_media_AudioSystem_getStreamVolumeDB},
-    {"native_is_offload_supported", "(IIIII)Z", (void *)android_media_AudioSystem_isOffloadSupported},
-    {"getMicrophones", "(Ljava/util/ArrayList;)I", (void *)android_media_AudioSystem_getMicrophones},
-    {"getSurroundFormats", "(Ljava/util/Map;Z)I", (void *)android_media_AudioSystem_getSurroundFormats},
-    {"setSurroundFormatEnabled", "(IZ)I", (void *)android_media_AudioSystem_setSurroundFormatEnabled},
-    {"setAssistantUid", "(I)I", (void *)android_media_AudioSystem_setAssistantUid},
-    {"setA11yServicesUids", "([I)I", (void *)android_media_AudioSystem_setA11yServicesUids},
-    {"isHapticPlaybackSupported", "()Z", (void *)android_media_AudioSystem_isHapticPlaybackSupported},
-    {"getHwOffloadEncodingFormatsSupportedForA2DP", "(Ljava/util/ArrayList;)I",
-                    (void*)android_media_AudioSystem_getHwOffloadEncodingFormatsSupportedForA2DP},
-    {"setSupportedSystemUsages", "([I)I", (void *)android_media_AudioSystem_setSupportedSystemUsages},
-    {"setAllowedCapturePolicy", "(II)I", (void *)android_media_AudioSystem_setAllowedCapturePolicy},
-    {"setRttEnabled",       "(Z)I",     (void *)android_media_AudioSystem_setRttEnabled},
-    {"setAudioHalPids",  "([I)I", (void *)android_media_AudioSystem_setAudioHalPids},
-    {"isCallScreeningModeSupported", "()Z", (void *)android_media_AudioSystem_isCallScreeningModeSupported},
-    {"setPreferredDeviceForStrategy", "(IILjava/lang/String;)I", (void *)android_media_AudioSystem_setPreferredDeviceForStrategy},
-    {"removePreferredDeviceForStrategy", "(I)I", (void *)android_media_AudioSystem_removePreferredDeviceForStrategy},
-    {"getPreferredDeviceForStrategy", "(I[Landroid/media/AudioDeviceAddress;)I", (void *)android_media_AudioSystem_getPreferredDeviceForStrategy},
-    {"getDevicesForAttributes", "(Landroid/media/AudioAttributes;[Landroid/media/AudioDeviceAddress;)I", (void *)android_media_AudioSystem_getDevicesForAttributes},
-    {"setUserIdDeviceAffinities", "(I[I[Ljava/lang/String;)I", (void *)android_media_AudioSystem_setUserIdDeviceAffinities},
-    {"removeUserIdDeviceAffinities", "(I)I", (void *)android_media_AudioSystem_removeUserIdDeviceAffinities}
-};
+static const JNINativeMethod gMethods[] =
+        {{"setParameters", "(Ljava/lang/String;)I",
+          (void *)android_media_AudioSystem_setParameters},
+         {"getParameters", "(Ljava/lang/String;)Ljava/lang/String;",
+          (void *)android_media_AudioSystem_getParameters},
+         {"muteMicrophone", "(Z)I", (void *)android_media_AudioSystem_muteMicrophone},
+         {"isMicrophoneMuted", "()Z", (void *)android_media_AudioSystem_isMicrophoneMuted},
+         {"isStreamActive", "(II)Z", (void *)android_media_AudioSystem_isStreamActive},
+         {"isStreamActiveRemotely", "(II)Z",
+          (void *)android_media_AudioSystem_isStreamActiveRemotely},
+         {"isSourceActive", "(I)Z", (void *)android_media_AudioSystem_isSourceActive},
+         {"newAudioSessionId", "()I", (void *)android_media_AudioSystem_newAudioSessionId},
+         {"newAudioPlayerId", "()I", (void *)android_media_AudioSystem_newAudioPlayerId},
+         {"newAudioRecorderId", "()I", (void *)android_media_AudioSystem_newAudioRecorderId},
+         {"setDeviceConnectionState", "(IILjava/lang/String;Ljava/lang/String;I)I",
+          (void *)android_media_AudioSystem_setDeviceConnectionState},
+         {"getDeviceConnectionState", "(ILjava/lang/String;)I",
+          (void *)android_media_AudioSystem_getDeviceConnectionState},
+         {"handleDeviceConfigChange", "(ILjava/lang/String;Ljava/lang/String;I)I",
+          (void *)android_media_AudioSystem_handleDeviceConfigChange},
+         {"setPhoneState", "(II)I", (void *)android_media_AudioSystem_setPhoneState},
+         {"setForceUse", "(II)I", (void *)android_media_AudioSystem_setForceUse},
+         {"getForceUse", "(I)I", (void *)android_media_AudioSystem_getForceUse},
+         {"initStreamVolume", "(III)I", (void *)android_media_AudioSystem_initStreamVolume},
+         {"setStreamVolumeIndex", "(III)I", (void *)android_media_AudioSystem_setStreamVolumeIndex},
+         {"getStreamVolumeIndex", "(II)I", (void *)android_media_AudioSystem_getStreamVolumeIndex},
+         {"setVolumeIndexForAttributes", "(Landroid/media/AudioAttributes;II)I",
+          (void *)android_media_AudioSystem_setVolumeIndexForAttributes},
+         {"getVolumeIndexForAttributes", "(Landroid/media/AudioAttributes;I)I",
+          (void *)android_media_AudioSystem_getVolumeIndexForAttributes},
+         {"getMinVolumeIndexForAttributes", "(Landroid/media/AudioAttributes;)I",
+          (void *)android_media_AudioSystem_getMinVolumeIndexForAttributes},
+         {"getMaxVolumeIndexForAttributes", "(Landroid/media/AudioAttributes;)I",
+          (void *)android_media_AudioSystem_getMaxVolumeIndexForAttributes},
+         {"setMasterVolume", "(F)I", (void *)android_media_AudioSystem_setMasterVolume},
+         {"getMasterVolume", "()F", (void *)android_media_AudioSystem_getMasterVolume},
+         {"setMasterMute", "(Z)I", (void *)android_media_AudioSystem_setMasterMute},
+         {"getMasterMute", "()Z", (void *)android_media_AudioSystem_getMasterMute},
+         {"setMasterMono", "(Z)I", (void *)android_media_AudioSystem_setMasterMono},
+         {"getMasterMono", "()Z", (void *)android_media_AudioSystem_getMasterMono},
+         {"setMasterBalance", "(F)I", (void *)android_media_AudioSystem_setMasterBalance},
+         {"getMasterBalance", "()F", (void *)android_media_AudioSystem_getMasterBalance},
+         {"getDevicesForStream", "(I)I", (void *)android_media_AudioSystem_getDevicesForStream},
+         {"getPrimaryOutputSamplingRate", "()I",
+          (void *)android_media_AudioSystem_getPrimaryOutputSamplingRate},
+         {"getPrimaryOutputFrameCount", "()I",
+          (void *)android_media_AudioSystem_getPrimaryOutputFrameCount},
+         {"getOutputLatency", "(I)I", (void *)android_media_AudioSystem_getOutputLatency},
+         {"setLowRamDevice", "(ZJ)I", (void *)android_media_AudioSystem_setLowRamDevice},
+         {"checkAudioFlinger", "()I", (void *)android_media_AudioSystem_checkAudioFlinger},
+         {"listAudioPorts", "(Ljava/util/ArrayList;[I)I",
+          (void *)android_media_AudioSystem_listAudioPorts},
+         {"createAudioPatch",
+          "([Landroid/media/AudioPatch;[Landroid/media/AudioPortConfig;[Landroid/media/"
+          "AudioPortConfig;)I",
+          (void *)android_media_AudioSystem_createAudioPatch},
+         {"releaseAudioPatch", "(Landroid/media/AudioPatch;)I",
+          (void *)android_media_AudioSystem_releaseAudioPatch},
+         {"listAudioPatches", "(Ljava/util/ArrayList;[I)I",
+          (void *)android_media_AudioSystem_listAudioPatches},
+         {"setAudioPortConfig", "(Landroid/media/AudioPortConfig;)I",
+          (void *)android_media_AudioSystem_setAudioPortConfig},
+         {"startAudioSource", "(Landroid/media/AudioPortConfig;Landroid/media/AudioAttributes;)I",
+          (void *)android_media_AudioSystem_startAudioSource},
+         {"stopAudioSource", "(I)I", (void *)android_media_AudioSystem_stopAudioSource},
+         {"getAudioHwSyncForSession", "(I)I",
+          (void *)android_media_AudioSystem_getAudioHwSyncForSession},
+         {"registerPolicyMixes", "(Ljava/util/ArrayList;Z)I",
+          (void *)android_media_AudioSystem_registerPolicyMixes},
+         {"setUidDeviceAffinities", "(I[I[Ljava/lang/String;)I",
+          (void *)android_media_AudioSystem_setUidDeviceAffinities},
+         {"removeUidDeviceAffinities", "(I)I",
+          (void *)android_media_AudioSystem_removeUidDeviceAffinities},
+         {"native_register_dynamic_policy_callback", "()V",
+          (void *)android_media_AudioSystem_registerDynPolicyCallback},
+         {"native_register_recording_callback", "()V",
+          (void *)android_media_AudioSystem_registerRecordingCallback},
+         {"systemReady", "()I", (void *)android_media_AudioSystem_systemReady},
+         {"getStreamVolumeDB", "(III)F", (void *)android_media_AudioSystem_getStreamVolumeDB},
+         {"native_is_offload_supported", "(IIIII)Z",
+          (void *)android_media_AudioSystem_isOffloadSupported},
+         {"getMicrophones", "(Ljava/util/ArrayList;)I",
+          (void *)android_media_AudioSystem_getMicrophones},
+         {"getSurroundFormats", "(Ljava/util/Map;Z)I",
+          (void *)android_media_AudioSystem_getSurroundFormats},
+         {"setSurroundFormatEnabled", "(IZ)I",
+          (void *)android_media_AudioSystem_setSurroundFormatEnabled},
+         {"setAssistantUid", "(I)I", (void *)android_media_AudioSystem_setAssistantUid},
+         {"setA11yServicesUids", "([I)I", (void *)android_media_AudioSystem_setA11yServicesUids},
+         {"isHapticPlaybackSupported", "()Z",
+          (void *)android_media_AudioSystem_isHapticPlaybackSupported},
+         {"getHwOffloadEncodingFormatsSupportedForA2DP", "(Ljava/util/ArrayList;)I",
+          (void *)android_media_AudioSystem_getHwOffloadEncodingFormatsSupportedForA2DP},
+         {"setSupportedSystemUsages", "([I)I",
+          (void *)android_media_AudioSystem_setSupportedSystemUsages},
+         {"setAllowedCapturePolicy", "(II)I",
+          (void *)android_media_AudioSystem_setAllowedCapturePolicy},
+         {"setRttEnabled", "(Z)I", (void *)android_media_AudioSystem_setRttEnabled},
+         {"setAudioHalPids", "([I)I", (void *)android_media_AudioSystem_setAudioHalPids},
+         {"isCallScreeningModeSupported", "()Z",
+          (void *)android_media_AudioSystem_isCallScreeningModeSupported},
+         {"setPreferredDeviceForStrategy", "(IILjava/lang/String;)I",
+          (void *)android_media_AudioSystem_setPreferredDeviceForStrategy},
+         {"removePreferredDeviceForStrategy", "(I)I",
+          (void *)android_media_AudioSystem_removePreferredDeviceForStrategy},
+         {"getPreferredDeviceForStrategy", "(I[Landroid/media/AudioDeviceAttributes;)I",
+          (void *)android_media_AudioSystem_getPreferredDeviceForStrategy},
+         {"getDevicesForAttributes",
+          "(Landroid/media/AudioAttributes;[Landroid/media/AudioDeviceAttributes;)I",
+          (void *)android_media_AudioSystem_getDevicesForAttributes},
+         {"setUserIdDeviceAffinities", "(I[I[Ljava/lang/String;)I",
+          (void *)android_media_AudioSystem_setUserIdDeviceAffinities},
+         {"removeUserIdDeviceAffinities", "(I)I",
+          (void *)android_media_AudioSystem_removeUserIdDeviceAffinities}};
 
 static const JNINativeMethod gEventHandlerMethods[] = {
     {"native_setup",
@@ -2654,6 +2685,9 @@
     gAudioMixingRuleFields.mAllowPrivilegedPlaybackCapture =
             GetFieldIDOrDie(env, audioMixingRuleClass, "mAllowPrivilegedPlaybackCapture", "Z");
 
+    gAudioMixingRuleFields.mVoiceCommunicationCaptureAllowed =
+            GetFieldIDOrDie(env, audioMixingRuleClass, "mVoiceCommunicationCaptureAllowed", "Z");
+
     jclass audioMixMatchCriterionClass =
                 FindClassOrDie(env, "android/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion");
     gAudioMixMatchCriterionClass = MakeGlobalRefOrDie(env,audioMixMatchCriterionClass);
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index b523811..0d0dc3e 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -263,6 +263,8 @@
             which_heap = HEAP_NATIVE;
         } else if (base::StartsWith(name, "[anon:scudo:")) {
             which_heap = HEAP_NATIVE;
+        } else if (base::StartsWith(name, "[anon:GWP-ASan")) {
+            which_heap = HEAP_NATIVE;
         } else if (base::StartsWith(name, "[stack")) {
             which_heap = HEAP_STACK;
         } else if (base::StartsWith(name, "[anon:stack_and_tls:")) {
diff --git a/core/jni/android_os_incremental_IncrementalManager.cpp b/core/jni/android_os_incremental_IncrementalManager.cpp
index 698062a..44bff01 100644
--- a/core/jni/android_os_incremental_IncrementalManager.cpp
+++ b/core/jni/android_os_incremental_IncrementalManager.cpp
@@ -26,6 +26,10 @@
 
 namespace android {
 
+static jboolean nativeIsEnabled(JNIEnv* env, jobject clazz) {
+    return IncFs_IsEnabled();
+}
+
 static jboolean nativeIsIncrementalPath(JNIEnv* env,
                                     jobject clazz,
                                     jstring javaPath) {
@@ -33,10 +37,28 @@
     return (jboolean)IncFs_IsIncFsPath(path.c_str());
 }
 
-static const JNINativeMethod method_table[] = {
-        {"nativeIsIncrementalPath", "(Ljava/lang/String;)Z",
-         (void*)nativeIsIncrementalPath},
-};
+static jbyteArray nativeUnsafeGetFileSignature(JNIEnv* env, jobject clazz, jstring javaPath) {
+    ScopedUtfChars path(env, javaPath);
+
+    char signature[INCFS_MAX_SIGNATURE_SIZE];
+    size_t size = sizeof(signature);
+    if (IncFs_UnsafeGetSignatureByPath(path.c_str(), signature, &size) < 0) {
+        return nullptr;
+    }
+
+    jbyteArray result = env->NewByteArray(size);
+    if (result != nullptr) {
+        env->SetByteArrayRegion(result, 0, size, (const jbyte*)signature);
+    }
+    return result;
+}
+
+static const JNINativeMethod method_table[] = {{"nativeIsEnabled", "()Z", (void*)nativeIsEnabled},
+                                               {"nativeIsIncrementalPath", "(Ljava/lang/String;)Z",
+                                                (void*)nativeIsIncrementalPath},
+                                               {"nativeUnsafeGetFileSignature",
+                                                "(Ljava/lang/String;)[B",
+                                                (void*)nativeUnsafeGetFileSignature}};
 
 int register_android_os_incremental_IncrementalManager(JNIEnv* env) {
     return jniRegisterNativeMethods(env, "android/os/incremental/IncrementalManager",
diff --git a/core/jni/android_service_DataLoaderService.cpp b/core/jni/android_service_DataLoaderService.cpp
index b307a73..ed0d381 100644
--- a/core/jni/android_service_DataLoaderService.cpp
+++ b/core/jni/android_service_DataLoaderService.cpp
@@ -75,8 +75,9 @@
         {"nativeStartDataLoader", "(I)Z", (void*)nativeStartDataLoader},
         {"nativeStopDataLoader", "(I)Z", (void*)nativeStopDataLoader},
         {"nativeDestroyDataLoader", "(I)Z", (void*)nativeDestroyDataLoader},
-        {"nativePrepareImage", "(ILjava/util/Collection;Ljava/util/Collection;)Z", (void*)nativePrepareImage},
-        {"nativeWriteData", "(JLjava/lang/String;JJLandroid/os/ParcelFileDescriptor;)V", (void*)nativeWriteData},
+        {"nativePrepareImage", "(ILjava/util/List;Ljava/util/List;)Z", (void*)nativePrepareImage},
+        {"nativeWriteData", "(JLjava/lang/String;JJLandroid/os/ParcelFileDescriptor;)V",
+         (void*)nativeWriteData},
 };
 
 }  // namespace
diff --git a/core/jni/android_view_KeyEvent.cpp b/core/jni/android_view_KeyEvent.cpp
index 57979bd..bbe563e 100644
--- a/core/jni/android_view_KeyEvent.cpp
+++ b/core/jni/android_view_KeyEvent.cpp
@@ -102,7 +102,7 @@
                                         event->getRepeatCount(), event->getMetaState(),
                                         event->getDeviceId(), event->getScanCode(),
                                         event->getFlags(), event->getSource(),
-                                        event->getDisplayId(), hmac.get(), NULL);
+                                        event->getDisplayId(), hmac.get(), nullptr);
     if (env->ExceptionCheck()) {
         ALOGE("An exception occurred while obtaining a key event.");
         LOGE_EX(env);
diff --git a/core/jni/android_view_RenderNodeAnimator.cpp b/core/jni/android_view_RenderNodeAnimator.cpp
deleted file mode 100644
index ca32b00..0000000
--- a/core/jni/android_view_RenderNodeAnimator.cpp
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 "OpenGLRenderer"
-
-#include "jni.h"
-#include <nativehelper/JNIHelp.h>
-#include <android_runtime/AndroidRuntime.h>
-
-#include <Animator.h>
-#include <Interpolator.h>
-#include <RenderProperties.h>
-
-#include "core_jni_helpers.h"
-
-namespace android {
-
-using namespace uirenderer;
-
-static struct {
-    jclass clazz;
-
-    jmethodID callOnFinished;
-} gRenderNodeAnimatorClassInfo;
-
-static JNIEnv* getEnv(JavaVM* vm) {
-    JNIEnv* env;
-    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
-        return 0;
-    }
-    return env;
-}
-
-class AnimationListenerLifecycleChecker : public AnimationListener {
-public:
-    virtual void onAnimationFinished(BaseRenderNodeAnimator* animator) {
-        LOG_ALWAYS_FATAL("Lifecycle failure, nStart(%p) wasn't called", animator);
-    }
-};
-
-static AnimationListenerLifecycleChecker sLifecycleChecker;
-
-class AnimationListenerBridge : public AnimationListener {
-public:
-    // This holds a strong reference to a Java WeakReference<T> object. This avoids
-    // cyclic-references-of-doom. If you think "I know, just use NewWeakGlobalRef!"
-    // then you end up with basically a PhantomReference, which is totally not
-    // what we want.
-    AnimationListenerBridge(JNIEnv* env, jobject finishListener) {
-        mFinishListener = env->NewGlobalRef(finishListener);
-        env->GetJavaVM(&mJvm);
-    }
-
-    virtual ~AnimationListenerBridge() {
-        if (mFinishListener) {
-            onAnimationFinished(NULL);
-        }
-    }
-
-    virtual void onAnimationFinished(BaseRenderNodeAnimator*) {
-        LOG_ALWAYS_FATAL_IF(!mFinishListener, "Finished listener twice?");
-        JNIEnv* env = getEnv(mJvm);
-        env->CallStaticVoidMethod(
-                gRenderNodeAnimatorClassInfo.clazz,
-                gRenderNodeAnimatorClassInfo.callOnFinished,
-                mFinishListener);
-        releaseJavaObject();
-    }
-
-private:
-    void releaseJavaObject() {
-        JNIEnv* env = getEnv(mJvm);
-        env->DeleteGlobalRef(mFinishListener);
-        mFinishListener = NULL;
-    }
-
-    JavaVM* mJvm;
-    jobject mFinishListener;
-};
-
-static inline RenderPropertyAnimator::RenderProperty toRenderProperty(jint property) {
-    LOG_ALWAYS_FATAL_IF(property < 0 || property > RenderPropertyAnimator::ALPHA,
-            "Invalid property %d", property);
-    return static_cast<RenderPropertyAnimator::RenderProperty>(property);
-}
-
-static inline CanvasPropertyPaintAnimator::PaintField toPaintField(jint field) {
-    LOG_ALWAYS_FATAL_IF(field < 0
-            || field > CanvasPropertyPaintAnimator::ALPHA,
-            "Invalid paint field %d", field);
-    return static_cast<CanvasPropertyPaintAnimator::PaintField>(field);
-}
-
-static jlong createAnimator(JNIEnv* env, jobject clazz,
-        jint propertyRaw, jfloat finalValue) {
-    RenderPropertyAnimator::RenderProperty property = toRenderProperty(propertyRaw);
-    BaseRenderNodeAnimator* animator = new RenderPropertyAnimator(property, finalValue);
-    animator->setListener(&sLifecycleChecker);
-    return reinterpret_cast<jlong>( animator );
-}
-
-static jlong createCanvasPropertyFloatAnimator(JNIEnv* env, jobject clazz,
-        jlong canvasPropertyPtr, jfloat finalValue) {
-    CanvasPropertyPrimitive* canvasProperty = reinterpret_cast<CanvasPropertyPrimitive*>(canvasPropertyPtr);
-    BaseRenderNodeAnimator* animator = new CanvasPropertyPrimitiveAnimator(canvasProperty, finalValue);
-    animator->setListener(&sLifecycleChecker);
-    return reinterpret_cast<jlong>( animator );
-}
-
-static jlong createCanvasPropertyPaintAnimator(JNIEnv* env, jobject clazz,
-        jlong canvasPropertyPtr, jint paintFieldRaw,
-        jfloat finalValue) {
-    CanvasPropertyPaint* canvasProperty = reinterpret_cast<CanvasPropertyPaint*>(canvasPropertyPtr);
-    CanvasPropertyPaintAnimator::PaintField paintField = toPaintField(paintFieldRaw);
-    BaseRenderNodeAnimator* animator = new CanvasPropertyPaintAnimator(
-            canvasProperty, paintField, finalValue);
-    animator->setListener(&sLifecycleChecker);
-    return reinterpret_cast<jlong>( animator );
-}
-
-static jlong createRevealAnimator(JNIEnv* env, jobject clazz,
-        jint centerX, jint centerY, jfloat startRadius, jfloat endRadius) {
-    BaseRenderNodeAnimator* animator = new RevealAnimator(centerX, centerY, startRadius, endRadius);
-    animator->setListener(&sLifecycleChecker);
-    return reinterpret_cast<jlong>( animator );
-}
-
-static void setStartValue(JNIEnv* env, jobject clazz, jlong animatorPtr, jfloat startValue) {
-    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
-    animator->setStartValue(startValue);
-}
-
-static void setDuration(JNIEnv* env, jobject clazz, jlong animatorPtr, jlong duration) {
-    LOG_ALWAYS_FATAL_IF(duration < 0, "Duration cannot be negative");
-    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
-    animator->setDuration(duration);
-}
-
-static jlong getDuration(JNIEnv* env, jobject clazz, jlong animatorPtr) {
-    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
-    return static_cast<jlong>(animator->duration());
-}
-
-static void setStartDelay(JNIEnv* env, jobject clazz, jlong animatorPtr, jlong startDelay) {
-    LOG_ALWAYS_FATAL_IF(startDelay < 0, "Start delay cannot be negative");
-    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
-    animator->setStartDelay(startDelay);
-}
-
-static void setInterpolator(JNIEnv* env, jobject clazz, jlong animatorPtr, jlong interpolatorPtr) {
-    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
-    Interpolator* interpolator = reinterpret_cast<Interpolator*>(interpolatorPtr);
-    animator->setInterpolator(interpolator);
-}
-
-static void setAllowRunningAsync(JNIEnv* env, jobject clazz, jlong animatorPtr, jboolean mayRunAsync) {
-    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
-    animator->setAllowRunningAsync(mayRunAsync);
-}
-
-static void setListener(JNIEnv* env, jobject clazz, jlong animatorPtr, jobject finishListener) {
-    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
-    animator->setListener(new AnimationListenerBridge(env, finishListener));
-}
-
-static void start(JNIEnv* env, jobject clazz, jlong animatorPtr) {
-    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
-    animator->start();
-}
-
-static void end(JNIEnv* env, jobject clazz, jlong animatorPtr) {
-    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
-    animator->cancel();
-}
-
-// ----------------------------------------------------------------------------
-// JNI Glue
-// ----------------------------------------------------------------------------
-
-const char* const kClassPathName = "android/view/RenderNodeAnimator";
-
-static const JNINativeMethod gMethods[] = {
-    { "nCreateAnimator", "(IF)J", (void*) createAnimator },
-    { "nCreateCanvasPropertyFloatAnimator", "(JF)J", (void*) createCanvasPropertyFloatAnimator },
-    { "nCreateCanvasPropertyPaintAnimator", "(JIF)J", (void*) createCanvasPropertyPaintAnimator },
-    { "nCreateRevealAnimator", "(IIFF)J", (void*) createRevealAnimator },
-    { "nSetStartValue", "(JF)V", (void*) setStartValue },
-    { "nSetDuration", "(JJ)V", (void*) setDuration },
-    { "nGetDuration", "(J)J", (void*) getDuration },
-    { "nSetStartDelay", "(JJ)V", (void*) setStartDelay },
-    { "nSetInterpolator", "(JJ)V", (void*) setInterpolator },
-    { "nSetAllowRunningAsync", "(JZ)V", (void*) setAllowRunningAsync },
-    { "nSetListener", "(JLandroid/view/RenderNodeAnimator;)V", (void*) setListener},
-    { "nStart", "(J)V", (void*) start},
-    { "nEnd", "(J)V", (void*) end },
-};
-
-int register_android_view_RenderNodeAnimator(JNIEnv* env) {
-    sLifecycleChecker.incStrong(0);
-    gRenderNodeAnimatorClassInfo.clazz = FindClassOrDie(env, kClassPathName);
-    gRenderNodeAnimatorClassInfo.clazz = MakeGlobalRefOrDie(env,
-                                                            gRenderNodeAnimatorClassInfo.clazz);
-
-    gRenderNodeAnimatorClassInfo.callOnFinished = GetStaticMethodIDOrDie(
-            env, gRenderNodeAnimatorClassInfo.clazz, "callOnFinished",
-            "(Landroid/view/RenderNodeAnimator;)V");
-
-    return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods));
-}
-
-
-} // namespace android
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp
index b01083b..8a53bd0 100644
--- a/core/jni/android_view_Surface.cpp
+++ b/core/jni/android_view_Surface.cpp
@@ -413,10 +413,15 @@
     return anw->perform(surface, NATIVE_WINDOW_SET_AUTO_REFRESH, int(enabled));
 }
 
-static jint nativeSetFrameRate(JNIEnv* env, jclass clazz, jlong nativeObject, jfloat frameRate) {
+static jint nativeSetFrameRate(JNIEnv* env, jclass clazz, jlong nativeObject, jfloat frameRate,
+                               jint compatibility) {
     Surface* surface = reinterpret_cast<Surface*>(nativeObject);
     ANativeWindow* anw = static_cast<ANativeWindow*>(surface);
-    return anw->perform(surface, NATIVE_WINDOW_SET_FRAME_RATE, float(frameRate));
+    // Our compatibility is a Surface.FRAME_RATE_COMPATIBILITY_* value, and
+    // NATIVE_WINDOW_SET_FRAME_RATE takes an
+    // ANATIVEWINDOW_FRAME_RATE_COMPATIBILITY_* value. The values are identical
+    // though, so no need to explicitly convert.
+    return anw->perform(surface, NATIVE_WINDOW_SET_FRAME_RATE, float(frameRate), compatibility);
 }
 
 // ----------------------------------------------------------------------------
@@ -453,7 +458,7 @@
             (void*)nativeAttachAndQueueBufferWithColorSpace},
     {"nativeSetSharedBufferModeEnabled", "(JZ)I", (void*)nativeSetSharedBufferModeEnabled},
     {"nativeSetAutoRefreshEnabled", "(JZ)I", (void*)nativeSetAutoRefreshEnabled},
-    {"nativeSetFrameRate", "(JF)I", (void*)nativeSetFrameRate},
+    {"nativeSetFrameRate", "(JFI)I", (void*)nativeSetFrameRate},
 };
 
 int register_android_view_Surface(JNIEnv* env)
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index f564d75..a9ef257 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -37,6 +37,7 @@
 #include <stdio.h>
 #include <system/graphics.h>
 #include <ui/ConfigStoreTypes.h>
+#include <ui/DeviceProductInfo.h>
 #include <ui/DisplayConfig.h>
 #include <ui/DisplayInfo.h>
 #include <ui/DisplayedFrameStats.h>
@@ -65,8 +66,19 @@
 static struct {
     jclass clazz;
     jmethodID ctor;
+} gIntegerClassInfo;
+
+static jobject toInteger(JNIEnv* env, int32_t i) {
+    return env->NewObject(gIntegerClassInfo.clazz, gIntegerClassInfo.ctor, i);
+}
+
+static struct {
+    jclass clazz;
+    jmethodID ctor;
+    jfieldID isInternal;
     jfieldID density;
     jfieldID secure;
+    jfieldID deviceProductInfo;
 } gDisplayInfoClassInfo;
 
 static struct {
@@ -110,6 +122,16 @@
 
 static struct {
     jclass clazz;
+    jmethodID ctor;
+} gDeviceProductInfoClassInfo;
+
+static struct {
+    jclass clazz;
+    jmethodID ctor;
+} gDeviceProductInfoManufactureDateClassInfo;
+
+static struct {
+    jclass clazz;
     jmethodID builder;
 } gGraphicBufferClassInfo;
 
@@ -235,7 +257,6 @@
 
 static void nativeRelease(JNIEnv* env, jclass clazz, jlong nativeObject) {
     sp<SurfaceControl> ctrl(reinterpret_cast<SurfaceControl *>(nativeObject));
-    ctrl->release();
     ctrl->decStrong((void *)nativeCreate);
 }
 
@@ -592,11 +613,14 @@
 }
 
 static void nativeSetFrameRate(JNIEnv* env, jclass clazz, jlong transactionObj, jlong nativeObject,
-                               jfloat frameRate) {
+                               jfloat frameRate, jint compatibility) {
     auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
 
     const auto ctrl = reinterpret_cast<SurfaceControl*>(nativeObject);
-    transaction->setFrameRate(ctrl, frameRate);
+    // Our compatibility is a Surface.FRAME_RATE_COMPATIBILITY_* value, and
+    // Transaction::setFrameRate() takes an ANATIVEWINDOW_FRAME_RATE_COMPATIBILITY_* value. The
+    // values are identical though, so no need to convert anything.
+    transaction->setFrameRate(ctrl, frameRate, static_cast<int8_t>(compatibility));
 }
 
 static jlongArray nativeGetPhysicalDisplayIds(JNIEnv* env, jclass clazz) {
@@ -773,6 +797,41 @@
     }
 }
 
+static jobject convertDeviceProductInfoToJavaObject(
+        JNIEnv* env, const std::optional<DeviceProductInfo>& info) {
+    using ModelYear = android::DeviceProductInfo::ModelYear;
+    using ManufactureYear = android::DeviceProductInfo::ManufactureYear;
+    using ManufactureWeekAndYear = android::DeviceProductInfo::ManufactureWeekAndYear;
+
+    if (!info) return nullptr;
+    jstring name = env->NewStringUTF(info->name.data());
+    jstring manufacturerPnpId = env->NewStringUTF(info->manufacturerPnpId.data());
+    jobject productId = env->NewStringUTF(info->productId.data());
+    const auto& date = info->manufactureOrModelDate;
+    jobject modelYear, manufactureDate;
+    if (const auto* model = std::get_if<ModelYear>(&date)) {
+        modelYear = toInteger(env, model->year);
+        manufactureDate = nullptr;
+    } else if (const auto* manufactureWeekAndYear = std::get_if<ManufactureWeekAndYear>(&date)) {
+        modelYear = nullptr;
+        manufactureDate = env->NewObject(gDeviceProductInfoManufactureDateClassInfo.clazz,
+                                               gDeviceProductInfoManufactureDateClassInfo.ctor,
+                                               toInteger(env, manufactureWeekAndYear->week),
+                                               toInteger(env, manufactureWeekAndYear->year));
+    } else if (const auto* manufactureYear = std::get_if<ManufactureYear>(&date)) {
+        modelYear = nullptr;
+        manufactureDate = env->NewObject(gDeviceProductInfoManufactureDateClassInfo.clazz,
+                                       gDeviceProductInfoManufactureDateClassInfo.ctor,
+                                       nullptr,
+                                       toInteger(env, manufactureYear->year));
+    } else {
+        LOG_FATAL("Unknown alternative for variant DeviceProductInfo::ManufactureOrModelDate");
+    }
+
+    return env->NewObject(gDeviceProductInfoClassInfo.clazz, gDeviceProductInfoClassInfo.ctor, name,
+                          manufacturerPnpId, productId, modelYear, manufactureDate);
+}
+
 static jobject nativeGetDisplayInfo(JNIEnv* env, jclass clazz, jobject tokenObj) {
     DisplayInfo info;
     if (const auto token = ibinderForJavaObject(env, tokenObj);
@@ -781,8 +840,12 @@
     }
 
     jobject object = env->NewObject(gDisplayInfoClassInfo.clazz, gDisplayInfoClassInfo.ctor);
+    env->SetBooleanField(object, gDisplayInfoClassInfo.isInternal,
+                         info.connectionType == DisplayConnectionType::Internal);
     env->SetFloatField(object, gDisplayInfoClassInfo.density, info.density);
     env->SetBooleanField(object, gDisplayInfoClassInfo.secure, info.secure);
+    env->SetObjectField(object, gDisplayInfoClassInfo.deviceProductInfo,
+                        convertDeviceProductInfoToJavaObject(env, info.deviceProductInfo));
     return object;
 }
 
@@ -1407,7 +1470,7 @@
             (void*)nativeSetLayerStack },
     {"nativeSetShadowRadius", "(JJF)V",
             (void*)nativeSetShadowRadius },
-    {"nativeSetFrameRate", "(JJF)V",
+    {"nativeSetFrameRate", "(JJFI)V",
             (void*)nativeSetFrameRate },
     {"nativeGetPhysicalDisplayIds", "()[J",
             (void*)nativeGetPhysicalDisplayIds },
@@ -1525,11 +1588,19 @@
     int err = RegisterMethodsOrDie(env, "android/view/SurfaceControl",
             sSurfaceControlMethods, NELEM(sSurfaceControlMethods));
 
+    jclass integerClass = FindClassOrDie(env, "java/lang/Integer");
+    gIntegerClassInfo.clazz = MakeGlobalRefOrDie(env, integerClass);
+    gIntegerClassInfo.ctor = GetMethodIDOrDie(env, gIntegerClassInfo.clazz, "<init>", "(I)V");
+
     jclass infoClazz = FindClassOrDie(env, "android/view/SurfaceControl$DisplayInfo");
     gDisplayInfoClassInfo.clazz = MakeGlobalRefOrDie(env, infoClazz);
     gDisplayInfoClassInfo.ctor = GetMethodIDOrDie(env, infoClazz, "<init>", "()V");
+    gDisplayInfoClassInfo.isInternal = GetFieldIDOrDie(env, infoClazz, "isInternal", "Z");
     gDisplayInfoClassInfo.density = GetFieldIDOrDie(env, infoClazz, "density", "F");
     gDisplayInfoClassInfo.secure = GetFieldIDOrDie(env, infoClazz, "secure", "Z");
+    gDisplayInfoClassInfo.deviceProductInfo =
+            GetFieldIDOrDie(env, infoClazz, "deviceProductInfo",
+                            "Landroid/hardware/display/DeviceProductInfo;");
 
     jclass configClazz = FindClassOrDie(env, "android/view/SurfaceControl$DisplayConfig");
     gDisplayConfigClassInfo.clazz = MakeGlobalRefOrDie(env, configClazz);
@@ -1570,6 +1641,25 @@
     gHdrCapabilitiesClassInfo.ctor = GetMethodIDOrDie(env, hdrCapabilitiesClazz, "<init>",
             "([IFFF)V");
 
+    jclass deviceProductInfoClazz =
+            FindClassOrDie(env, "android/hardware/display/DeviceProductInfo");
+    gDeviceProductInfoClassInfo.clazz = MakeGlobalRefOrDie(env, deviceProductInfoClazz);
+    gDeviceProductInfoClassInfo.ctor =
+            GetMethodIDOrDie(env, deviceProductInfoClazz, "<init>",
+                             "(Ljava/lang/String;"
+                             "Ljava/lang/String;"
+                             "Ljava/lang/String;"
+                             "Ljava/lang/Integer;"
+                             "Landroid/hardware/display/DeviceProductInfo$ManufactureDate;)V");
+
+    jclass deviceProductInfoManufactureDateClazz =
+            FindClassOrDie(env, "android/hardware/display/DeviceProductInfo$ManufactureDate");
+    gDeviceProductInfoManufactureDateClassInfo.clazz =
+            MakeGlobalRefOrDie(env, deviceProductInfoManufactureDateClazz);
+    gDeviceProductInfoManufactureDateClassInfo.ctor =
+            GetMethodIDOrDie(env, deviceProductInfoManufactureDateClazz, "<init>",
+                             "(Ljava/lang/Integer;Ljava/lang/Integer;)V");
+
     jclass graphicsBufferClazz = FindClassOrDie(env, "android/graphics/GraphicBuffer");
     gGraphicBufferClassInfo.clazz = MakeGlobalRefOrDie(env, graphicsBufferClazz);
     gGraphicBufferClassInfo.builder = GetStaticMethodIDOrDie(env, graphicsBufferClazz,
diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp
index 69ca17c..27c5a73 100644
--- a/core/jni/android_view_ThreadedRenderer.cpp
+++ b/core/jni/android_view_ThreadedRenderer.cpp
@@ -17,40 +17,34 @@
 #define LOG_TAG "ThreadedRenderer"
 #define ATRACE_TAG ATRACE_TAG_VIEW
 
-#include <algorithm>
-#include <atomic>
-#include <inttypes.h>
-
-#include "jni.h"
-#include <nativehelper/JNIHelp.h>
-#include "core_jni_helpers.h"
-#include <GraphicsJNI.h>
-
-#include <gui/BufferItemConsumer.h>
-#include <gui/BufferQueue.h>
-#include <gui/Surface.h>
-
-#include "android_graphics_HardwareRendererObserver.h"
-
-#include <private/EGL/cache.h>
-
-#include <utils/RefBase.h>
-#include <utils/StrongPointer.h>
-#include <utils/Timers.h>
-#include <utils/TraceUtils.h>
-#include <android_runtime/android_view_Surface.h>
-#include <system/window.h>
-
 #include <FrameInfo.h>
+#include <GraphicsJNI.h>
 #include <Picture.h>
 #include <Properties.h>
 #include <RootRenderNode.h>
+#include <dlfcn.h>
+#include <inttypes.h>
+#include <media/NdkImage.h>
+#include <media/NdkImageReader.h>
+#include <nativehelper/JNIHelp.h>
+#include <pipeline/skia/ShaderCache.h>
+#include <private/EGL/cache.h>
 #include <renderthread/CanvasContext.h>
 #include <renderthread/RenderProxy.h>
 #include <renderthread/RenderTask.h>
 #include <renderthread/RenderThread.h>
-#include <pipeline/skia/ShaderCache.h>
 #include <utils/Color.h>
+#include <utils/RefBase.h>
+#include <utils/StrongPointer.h>
+#include <utils/Timers.h>
+#include <utils/TraceUtils.h>
+
+#include <algorithm>
+#include <atomic>
+
+#include "android_graphics_HardwareRendererObserver.h"
+#include "core_jni_helpers.h"
+#include "jni.h"
 
 namespace android {
 
@@ -78,6 +72,9 @@
     return env;
 }
 
+typedef ANativeWindow* (*ANW_fromSurface)(JNIEnv* env, jobject surface);
+ANW_fromSurface fromSurface;
+
 class JvmErrorReporter : public ErrorHandler {
 public:
     JvmErrorReporter(JNIEnv* env) {
@@ -147,10 +144,12 @@
 }
 
 static jlong android_view_ThreadedRenderer_createProxy(JNIEnv* env, jobject clazz,
-        jboolean translucent, jlong rootRenderNodePtr) {
+        jboolean translucent, jboolean isWideGamut, jlong rootRenderNodePtr) {
     RootRenderNode* rootRenderNode = reinterpret_cast<RootRenderNode*>(rootRenderNodePtr);
     ContextFactoryImpl factory(rootRenderNode);
-    return (jlong) new RenderProxy(translucent, rootRenderNode, &factory);
+    RenderProxy* proxy = new RenderProxy(translucent, rootRenderNode, &factory);
+    proxy->setWideGamut(isWideGamut);
+    return (jlong) proxy;
 }
 
 static void android_view_ThreadedRenderer_deleteProxy(JNIEnv* env, jobject clazz,
@@ -176,9 +175,9 @@
 static void android_view_ThreadedRenderer_setSurface(JNIEnv* env, jobject clazz,
         jlong proxyPtr, jobject jsurface, jboolean discardBuffer) {
     RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
-    sp<Surface> surface;
+    ANativeWindow* window = nullptr;
     if (jsurface) {
-        surface = android_view_Surface_getSurface(env, jsurface);
+        window = fromSurface(env, jsurface);
     }
     bool enableTimeout = true;
     if (discardBuffer) {
@@ -186,7 +185,7 @@
         enableTimeout = false;
         proxy->setSwapBehavior(SwapBehavior::kSwap_discardBuffer);
     }
-    proxy->setSurface(surface, enableTimeout);
+    proxy->setSurface(window, enableTimeout);
 }
 
 static jboolean android_view_ThreadedRenderer_pause(JNIEnv* env, jobject clazz,
@@ -456,8 +455,10 @@
         jint right, jint bottom, jlong bitmapPtr) {
     SkBitmap bitmap;
     bitmap::toBitmap(bitmapPtr).getSkBitmap(&bitmap);
-    sp<Surface> surface = android_view_Surface_getSurface(env, jsurface);
-    return RenderProxy::copySurfaceInto(surface, left, top, right, bottom, &bitmap);
+    ANativeWindow* window = fromSurface(env, jsurface);
+    jint result = RenderProxy::copySurfaceInto(window, left, top, right, bottom, &bitmap);
+    ANativeWindow_release(window);
+    return result;
 }
 
 class ContextFactory : public IContextFactory {
@@ -478,23 +479,35 @@
     uint32_t width = jwidth;
     uint32_t height = jheight;
 
-    // Create a Surface wired up to a BufferItemConsumer
-    sp<IGraphicBufferProducer> producer;
-    sp<IGraphicBufferConsumer> rawConsumer;
-    BufferQueue::createBufferQueue(&producer, &rawConsumer);
-    // We only need 1 buffer but some drivers have bugs so workaround it by setting max count to 2
-    rawConsumer->setMaxBufferCount(2);
-    sp<BufferItemConsumer> consumer = new BufferItemConsumer(rawConsumer,
-            GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_SW_READ_NEVER | GRALLOC_USAGE_SW_WRITE_NEVER);
-    consumer->setDefaultBufferSize(width, height);
-    sp<Surface> surface = new Surface(producer);
+    // Create an ImageReader wired up to a BufferItemConsumer
+    AImageReader* rawReader;
+    media_status_t result =
+            AImageReader_newWithUsage(width, height, AIMAGE_FORMAT_RGBA_8888,
+                                      AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE, 2, &rawReader);
+    std::unique_ptr<AImageReader, decltype(&AImageReader_delete)> reader(rawReader,
+                                                                         AImageReader_delete);
+
+    if (result != AMEDIA_OK) {
+        ALOGW("Error creating image reader!");
+        return nullptr;
+    }
+
+    // Note that ownership of this window is maintained by AImageReader, so we
+    // shouldn't need to wrap around a smart pointer.
+    ANativeWindow* window;
+    result = AImageReader_getWindow(rawReader, &window);
+
+    if (result != AMEDIA_OK) {
+        ALOGW("Error retrieving the native window!");
+        return nullptr;
+    }
 
     // Render into the surface
     {
         ContextFactory factory;
         RenderProxy proxy{true, renderNode, &factory};
         proxy.setSwapBehavior(SwapBehavior::kSwap_discardBuffer);
-        proxy.setSurface(surface);
+        proxy.setSurface(window);
         // Shadows can't be used via this interface, so just set the light source
         // to all 0s.
         proxy.setLightAlpha(0, 0);
@@ -506,33 +519,34 @@
         proxy.syncAndDrawFrame();
     }
 
-    // Yank out the GraphicBuffer
-    BufferItem bufferItem;
-    status_t err;
-    if ((err = consumer->acquireBuffer(&bufferItem, 0, true)) != OK) {
-        ALOGW("Failed to acquireBuffer, error %d (%s)", err, strerror(-err));
+    AImage* rawImage;
+    result = AImageReader_acquireNextImage(rawReader, &rawImage);
+    std::unique_ptr<AImage, decltype(&AImage_delete)> image(rawImage, AImage_delete);
+    if (result != AMEDIA_OK) {
+        ALOGW("Error reading image: %d!", result);
         return nullptr;
     }
-    sp<GraphicBuffer> buffer = bufferItem.mGraphicBuffer;
-    // We don't really care if this fails or not since we're just going to destroy this anyway
-    consumer->releaseBuffer(bufferItem);
-    if (!buffer.get()) {
-        ALOGW("GraphicBuffer is null?");
-        return nullptr;
-    }
-    if (buffer->getWidth() != width || buffer->getHeight() != height) {
-        ALOGW("GraphicBuffer size mismatch, got %dx%d expected %dx%d",
-                buffer->getWidth(), buffer->getHeight(), width, height);
+
+    AHardwareBuffer* buffer;
+    result = AImage_getHardwareBuffer(rawImage, &buffer);
+
+    AHardwareBuffer_Desc desc;
+    AHardwareBuffer_describe(buffer, &desc);
+
+    if (desc.width != width || desc.height != height) {
+        ALOGW("AHardwareBuffer size mismatch, got %dx%d expected %dx%d", desc.width, desc.height,
+              width, height);
         // Continue I guess?
     }
 
-    sk_sp<SkColorSpace> cs = uirenderer::DataSpaceToColorSpace(bufferItem.mDataSpace);
+    sk_sp<SkColorSpace> cs = uirenderer::DataSpaceToColorSpace(
+            static_cast<android_dataspace>(ANativeWindow_getBuffersDataSpace(window)));
     if (cs == nullptr) {
         // nullptr is treated as SRGB in Skia, thus explicitly use SRGB in order to make sure
         // the returned bitmap has a color space.
         cs = SkColorSpace::MakeSRGB();
     }
-    sk_sp<Bitmap> bitmap = Bitmap::createFrom(buffer->toAHardwareBuffer(), cs);
+    sk_sp<Bitmap> bitmap = Bitmap::createFrom(buffer, cs);
     return bitmap::createBitmap(env, bitmap.release(),
             android::bitmap::kBitmapCreateFlag_Premultiplied);
 }
@@ -627,7 +641,7 @@
     { "nSetProcessStatsBuffer", "(I)V", (void*) android_view_ThreadedRenderer_setProcessStatsBuffer },
     { "nGetRenderThreadTid", "(J)I", (void*) android_view_ThreadedRenderer_getRenderThreadTid },
     { "nCreateRootRenderNode", "()J", (void*) android_view_ThreadedRenderer_createRootRenderNode },
-    { "nCreateProxy", "(ZJ)J", (void*) android_view_ThreadedRenderer_createProxy },
+    { "nCreateProxy", "(ZZJ)J", (void*) android_view_ThreadedRenderer_createProxy },
     { "nDeleteProxy", "(J)V", (void*) android_view_ThreadedRenderer_deleteProxy },
     { "nLoadSystemProperties", "(J)Z", (void*) android_view_ThreadedRenderer_loadSystemProperties },
     { "nSetName", "(JLjava/lang/String;)V", (void*) android_view_ThreadedRenderer_setName },
@@ -720,6 +734,11 @@
     gFrameCompleteCallback.onFrameComplete = GetMethodIDOrDie(env, frameCompleteClass,
             "onFrameComplete", "(J)V");
 
+    void* handle_ = dlopen("libandroid.so", RTLD_NOW | RTLD_NODELETE);
+    fromSurface = (ANW_fromSurface)dlsym(handle_, "ANativeWindow_fromSurface");
+    LOG_ALWAYS_FATAL_IF(fromSurface == nullptr,
+                        "Failed to find required symbol ANativeWindow_fromSurface!");
+
     return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods));
 }
 
diff --git a/core/jni/android_view_VerifiedKeyEvent.cpp b/core/jni/android_view_VerifiedKeyEvent.cpp
new file mode 100644
index 0000000..bba10aa
--- /dev/null
+++ b/core/jni/android_view_VerifiedKeyEvent.cpp
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "VerifiedKey-JNI"
+
+#include "android_view_VerifiedKeyEvent.h"
+#include <input/Input.h>
+#include "core_jni_helpers.h"
+
+namespace android {
+
+static struct {
+    jclass clazz;
+
+    jmethodID constructor;
+} gVerifiedKeyEventClassInfo;
+
+// ----------------------------------------------------------------------------
+
+jobject android_view_VerifiedKeyEvent(JNIEnv* env, const VerifiedKeyEvent& event) {
+    return env->NewObject(gVerifiedKeyEventClassInfo.clazz, gVerifiedKeyEventClassInfo.constructor,
+                          event.deviceId, event.eventTimeNanos, event.source, event.displayId,
+                          event.action, event.downTimeNanos, event.flags, event.keyCode,
+                          event.scanCode, event.metaState, event.repeatCount);
+}
+
+int register_android_view_VerifiedKeyEvent(JNIEnv* env) {
+    jclass clazz = FindClassOrDie(env, "android/view/VerifiedKeyEvent");
+    gVerifiedKeyEventClassInfo.clazz = MakeGlobalRefOrDie(env, clazz);
+
+    gVerifiedKeyEventClassInfo.constructor =
+            GetMethodIDOrDie(env, clazz, "<init>", "(IJIIIJIIIII)V");
+
+    return OK;
+}
+
+} // namespace android
diff --git a/core/jni/android_view_VerifiedKeyEvent.h b/core/jni/android_view_VerifiedKeyEvent.h
new file mode 100644
index 0000000..032291b
--- /dev/null
+++ b/core/jni/android_view_VerifiedKeyEvent.h
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+
+#ifndef _ANDROID_VIEW_VERIFIEDKEYEVENT_H
+#define _ANDROID_VIEW_VERIFIEDKEYEVENT_H
+
+#include "jni.h"
+
+namespace android {
+
+class VerifiedKeyEvent;
+
+/* Create an instance of a DVM VerifiedMotionEvent object
+ * Return nullptr on error. */
+extern jobject android_view_VerifiedKeyEvent(JNIEnv* env, const VerifiedKeyEvent& event);
+
+} // namespace android
+
+#endif // _ANDROID_VIEW_VERIFIEDKEYEVENT_H
diff --git a/core/jni/android_view_VerifiedMotionEvent.cpp b/core/jni/android_view_VerifiedMotionEvent.cpp
new file mode 100644
index 0000000..c281197
--- /dev/null
+++ b/core/jni/android_view_VerifiedMotionEvent.cpp
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "VerifiedMotion-JNI"
+
+#include "android_view_VerifiedMotionEvent.h"
+#include <input/Input.h>
+#include "core_jni_helpers.h"
+
+namespace android {
+
+static struct {
+    jclass clazz;
+
+    jmethodID constructor;
+} gVerifiedMotionEventClassInfo;
+
+// ----------------------------------------------------------------------------
+
+jobject android_view_VerifiedMotionEvent(JNIEnv* env, const VerifiedMotionEvent& event) {
+    return env->NewObject(gVerifiedMotionEventClassInfo.clazz,
+                          gVerifiedMotionEventClassInfo.constructor, event.deviceId,
+                          event.eventTimeNanos, event.source, event.displayId, event.rawX,
+                          event.rawY, event.actionMasked, event.downTimeNanos, event.flags,
+                          event.metaState, event.buttonState);
+}
+
+int register_android_view_VerifiedMotionEvent(JNIEnv* env) {
+    jclass clazz = FindClassOrDie(env, "android/view/VerifiedMotionEvent");
+    gVerifiedMotionEventClassInfo.clazz = MakeGlobalRefOrDie(env, clazz);
+
+    gVerifiedMotionEventClassInfo.constructor =
+            GetMethodIDOrDie(env, clazz, "<init>", "(IJIIFFIJIII)V");
+
+    return OK;
+}
+
+} // namespace android
diff --git a/core/jni/android_view_VerifiedMotionEvent.h b/core/jni/android_view_VerifiedMotionEvent.h
new file mode 100644
index 0000000..deda1b7
--- /dev/null
+++ b/core/jni/android_view_VerifiedMotionEvent.h
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+
+#ifndef _ANDROID_VIEW_VERIFIEDMOTIONEVENT_H
+#define _ANDROID_VIEW_VERIFIEDMOTIONEVENT_H
+
+#include "jni.h"
+
+namespace android {
+
+class VerifiedMotionEvent;
+
+/* Create an instance of a DVM VerifiedMotionEvent object
+ * Return nullptr on error. */
+extern jobject android_view_VerifiedMotionEvent(JNIEnv* env, const VerifiedMotionEvent& event);
+
+} // namespace android
+
+#endif // _ANDROID_VIEW_VERIFIEDMOTIONEVENT_H
diff --git a/core/jni/com_android_internal_content_om_OverlayConfig.cpp b/core/jni/com_android_internal_content_om_OverlayConfig.cpp
new file mode 100644
index 0000000..6aa7c10
--- /dev/null
+++ b/core/jni/com_android_internal_content_om_OverlayConfig.cpp
@@ -0,0 +1,122 @@
+/*
+ * 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.
+ */
+
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <nativehelper/JNIHelp.h>
+#include "jni.h"
+#include "core_jni_helpers.h"
+
+#include "android-base/logging.h"
+#include "androidfw/PosixUtils.h"
+
+using ::android::util::ExecuteBinary;
+
+static jclass g_stringClass = nullptr;
+
+static jobjectArray createIdmap(JNIEnv* env, jclass /*clazz*/, jstring targetPath,
+                           jobjectArray overlayPath, jobjectArray policies,
+                           jboolean enforceOverlayable) {
+  if (access("/system/bin/idmap2", X_OK) == -1) {
+    PLOG(WARNING) << "unable to execute idmap2";
+    return nullptr;
+  }
+
+  const char* targetApkPath = env->GetStringUTFChars(targetPath, NULL /* isCopy */);
+  std::vector<std::string> argv{"/system/bin/idmap2",
+    "create-multiple",
+    "--target-apk-path", targetApkPath,
+  };
+  env->ReleaseStringUTFChars(targetPath, targetApkPath);
+
+  // Add the overlays for which to generate idmap files to the idmap arguments.
+  for (size_t i = 0, count = env->GetArrayLength(overlayPath); i < count; ++i) {
+    jstring element = (jstring) env->GetObjectArrayElement(overlayPath, i);
+    const char* overlayApkPath = env->GetStringUTFChars(element, NULL /* isCopy */);
+    argv.emplace_back("--overlay-apk-path");
+    argv.emplace_back(overlayApkPath);
+    env->ReleaseStringUTFChars(element, overlayApkPath);
+  }
+
+  // Add the policies the overlays fulfill to the idmap arguments.
+  for (size_t i = 0, count = env->GetArrayLength(policies); i < count; ++i) {
+    jstring element = (jstring)env->GetObjectArrayElement(policies, i);
+    const char* policy = env->GetStringUTFChars(element, NULL /* isCopy */);
+    argv.emplace_back("--policy");
+    argv.emplace_back(policy);
+    env->ReleaseStringUTFChars(element, policy);
+  }
+
+  if (!enforceOverlayable) {
+    argv.emplace_back("--ignore-overlayable");
+  }
+
+  const auto result = ExecuteBinary(argv);
+  if (!result) {
+      LOG(ERROR) << "failed to execute idmap2";
+      return nullptr;
+  }
+
+  if (result->status != 0) {
+    LOG(ERROR) << "idmap2: " << result->stderr;
+    return nullptr;
+  }
+
+  // Return the paths of the idmaps created or updated during the idmap invocation.
+  std::vector<std::string> idmap_paths;
+  std::istringstream input(result->stdout);
+  std::string path;
+  while (std::getline(input, path)) {
+    idmap_paths.push_back(path);
+  }
+
+  jobjectArray array = env->NewObjectArray(idmap_paths.size(), g_stringClass, nullptr);
+  if (array == nullptr) {
+    return nullptr;
+  }
+  for (size_t i = 0; i < idmap_paths.size(); i++) {
+    const std::string path = idmap_paths[i];
+    jstring java_string = env->NewStringUTF(path.c_str());
+    if (env->ExceptionCheck()) {
+      return nullptr;
+    }
+    env->SetObjectArrayElement(array, i, java_string);
+    env->DeleteLocalRef(java_string);
+  }
+
+  return array;
+}
+
+static const JNINativeMethod g_methods[] = {
+    { "createIdmap",
+      "(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Z)[Ljava/lang/String;",
+      (void *)createIdmap },
+};
+
+static const char* const kOverlayConfigPathName = "com/android/internal/content/om/OverlayConfig";
+
+namespace android {
+
+int register_com_android_internal_content_om_OverlayConfig(JNIEnv* env) {
+  jclass stringClass = FindClassOrDie(env, "java/lang/String");
+  g_stringClass = MakeGlobalRefOrDie(env, stringClass);
+
+  return RegisterMethodsOrDie(env, kOverlayConfigPathName, g_methods, NELEM(g_methods));
+}
+
+} // namespace android
diff --git a/core/jni/com_android_internal_os_KernelCpuUidBpfMapReader.cpp b/core/jni/com_android_internal_os_KernelCpuUidBpfMapReader.cpp
new file mode 100644
index 0000000..7c68de5
--- /dev/null
+++ b/core/jni/com_android_internal_os_KernelCpuUidBpfMapReader.cpp
@@ -0,0 +1,217 @@
+/*
+ * 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.
+ */
+
+#include "core_jni_helpers.h"
+
+#include <sys/sysinfo.h>
+
+#include <android-base/stringprintf.h>
+#include <cputimeinstate.h>
+
+namespace android {
+
+static constexpr uint64_t NSEC_PER_MSEC = 1000000;
+
+static struct {
+    jclass clazz;
+    jmethodID put;
+    jmethodID get;
+} gSparseArrayClassInfo;
+
+static jfieldID gmData;
+
+static jlongArray getUidArray(JNIEnv *env, jobject sparseAr, uint32_t uid, jsize sz) {
+    jlongArray ar = (jlongArray)env->CallObjectMethod(sparseAr, gSparseArrayClassInfo.get, uid);
+    if (!ar) {
+        ar = env->NewLongArray(sz);
+        if (ar == NULL) return ar;
+        env->CallVoidMethod(sparseAr, gSparseArrayClassInfo.put, uid, ar);
+    }
+    return ar;
+}
+
+static void copy2DVecToArray(JNIEnv *env, jlongArray ar, std::vector<std::vector<uint64_t>> &vec) {
+    jsize start = 0;
+    for (auto &subVec : vec) {
+        for (uint32_t i = 0; i < subVec.size(); ++i) subVec[i] /= NSEC_PER_MSEC;
+        env->SetLongArrayRegion(ar, start, subVec.size(),
+                                reinterpret_cast<const jlong *>(subVec.data()));
+        start += subVec.size();
+    }
+}
+
+static jboolean KernelCpuUidFreqTimeBpfMapReader_removeUidRange(JNIEnv *env, jclass, jint startUid,
+                                                                jint endUid) {
+    for (uint32_t uid = startUid; uid <= endUid; ++uid) {
+        if (!android::bpf::clearUidTimes(uid)) return false;
+    }
+    return true;
+}
+
+static jboolean KernelCpuUidFreqTimeBpfMapReader_readBpfData(JNIEnv *env, jobject thiz) {
+    static uint64_t lastUpdate = 0;
+    uint64_t newLastUpdate = lastUpdate;
+    auto sparseAr = env->GetObjectField(thiz, gmData);
+    if (sparseAr == NULL) return false;
+    auto data = android::bpf::getUidsUpdatedCpuFreqTimes(&newLastUpdate);
+    if (!data.has_value()) return false;
+
+    jsize s = 0;
+    for (auto &[uid, times] : *data) {
+        if (s == 0) {
+            for (const auto &subVec : times) s += subVec.size();
+        }
+        jlongArray ar = getUidArray(env, sparseAr, uid, s);
+        if (ar == NULL) return false;
+        copy2DVecToArray(env, ar, times);
+    }
+    lastUpdate = newLastUpdate;
+    return true;
+}
+
+static jlongArray KernelCpuUidFreqTimeBpfMapReader_getDataDimensions(JNIEnv *env, jobject) {
+    auto freqs = android::bpf::getCpuFreqs();
+    if (!freqs) return NULL;
+
+    std::vector<uint64_t> allFreqs;
+    for (const auto &vec : *freqs) std::copy(vec.begin(), vec.end(), std::back_inserter(allFreqs));
+
+    auto ar = env->NewLongArray(allFreqs.size());
+    if (ar != NULL) {
+        env->SetLongArrayRegion(ar, 0, allFreqs.size(),
+                                reinterpret_cast<const jlong *>(allFreqs.data()));
+    }
+    return ar;
+}
+
+static const JNINativeMethod gFreqTimeMethods[] = {
+        {"removeUidRange", "(II)Z", (void *)KernelCpuUidFreqTimeBpfMapReader_removeUidRange},
+        {"readBpfData", "()Z", (void *)KernelCpuUidFreqTimeBpfMapReader_readBpfData},
+        {"getDataDimensions", "()[J", (void *)KernelCpuUidFreqTimeBpfMapReader_getDataDimensions},
+};
+
+static jboolean KernelCpuUidActiveTimeBpfMapReader_readBpfData(JNIEnv *env, jobject thiz) {
+    static uint64_t lastUpdate = 0;
+    uint64_t newLastUpdate = lastUpdate;
+    auto sparseAr = env->GetObjectField(thiz, gmData);
+    if (sparseAr == NULL) return false;
+    auto data = android::bpf::getUidsUpdatedConcurrentTimes(&newLastUpdate);
+    if (!data.has_value()) return false;
+
+    for (auto &[uid, times] : *data) {
+        // TODO: revise calling code so we can divide by NSEC_PER_MSEC here instead
+        for (auto &time : times.active) time /= NSEC_PER_MSEC;
+        jlongArray ar = getUidArray(env, sparseAr, uid, times.active.size());
+        if (ar == NULL) return false;
+        env->SetLongArrayRegion(ar, 0, times.active.size(),
+                                reinterpret_cast<const jlong *>(times.active.data()));
+    }
+    lastUpdate = newLastUpdate;
+    return true;
+}
+
+static jlongArray KernelCpuUidActiveTimeBpfMapReader_getDataDimensions(JNIEnv *env, jobject) {
+    jlong nCpus = get_nprocs_conf();
+
+    auto ar = env->NewLongArray(1);
+    if (ar != NULL) env->SetLongArrayRegion(ar, 0, 1, &nCpus);
+    return ar;
+}
+
+static const JNINativeMethod gActiveTimeMethods[] = {
+        {"readBpfData", "()Z", (void *)KernelCpuUidActiveTimeBpfMapReader_readBpfData},
+        {"getDataDimensions", "()[J", (void *)KernelCpuUidActiveTimeBpfMapReader_getDataDimensions},
+};
+
+static jboolean KernelCpuUidClusterTimeBpfMapReader_readBpfData(JNIEnv *env, jobject thiz) {
+    static uint64_t lastUpdate = 0;
+    uint64_t newLastUpdate = lastUpdate;
+    auto sparseAr = env->GetObjectField(thiz, gmData);
+    if (sparseAr == NULL) return false;
+    auto data = android::bpf::getUidsUpdatedConcurrentTimes(&newLastUpdate);
+    if (!data.has_value()) return false;
+
+    jsize s = 0;
+    for (auto &[uid, times] : *data) {
+        if (s == 0) {
+            for (const auto &subVec : times.policy) s += subVec.size();
+        }
+        jlongArray ar = getUidArray(env, sparseAr, uid, s);
+        if (ar == NULL) return false;
+        copy2DVecToArray(env, ar, times.policy);
+    }
+    lastUpdate = newLastUpdate;
+    return true;
+}
+
+static jlongArray KernelCpuUidClusterTimeBpfMapReader_getDataDimensions(JNIEnv *env, jobject) {
+    auto times = android::bpf::getUidConcurrentTimes(0);
+    if (!times.has_value()) return NULL;
+
+    std::vector<jlong> clusterCores;
+    for (const auto &vec : times->policy) clusterCores.push_back(vec.size());
+    auto ar = env->NewLongArray(clusterCores.size());
+    if (ar != NULL) env->SetLongArrayRegion(ar, 0, clusterCores.size(), clusterCores.data());
+    return ar;
+}
+
+static const JNINativeMethod gClusterTimeMethods[] = {
+        {"readBpfData", "()Z", (void *)KernelCpuUidClusterTimeBpfMapReader_readBpfData},
+        {"getDataDimensions", "()[J",
+         (void *)KernelCpuUidClusterTimeBpfMapReader_getDataDimensions},
+};
+
+struct readerMethods {
+    const char *name;
+    const JNINativeMethod *methods;
+    int numMethods;
+};
+
+static const readerMethods gAllMethods[] = {
+        {"KernelCpuUidFreqTimeBpfMapReader", gFreqTimeMethods, NELEM(gFreqTimeMethods)},
+        {"KernelCpuUidActiveTimeBpfMapReader", gActiveTimeMethods, NELEM(gActiveTimeMethods)},
+        {"KernelCpuUidClusterTimeBpfMapReader", gClusterTimeMethods, NELEM(gClusterTimeMethods)},
+};
+
+static jboolean KernelCpuUidBpfMapReader_startTrackingBpfTimes(JNIEnv *, jobject) {
+    return android::bpf::startTrackingUidTimes();
+}
+
+int register_com_android_internal_os_KernelCpuUidBpfMapReader(JNIEnv *env) {
+    gSparseArrayClassInfo.clazz = FindClassOrDie(env, "android/util/SparseArray");
+    gSparseArrayClassInfo.clazz = MakeGlobalRefOrDie(env, gSparseArrayClassInfo.clazz);
+    gSparseArrayClassInfo.put =
+            GetMethodIDOrDie(env, gSparseArrayClassInfo.clazz, "put", "(ILjava/lang/Object;)V");
+    gSparseArrayClassInfo.get =
+            GetMethodIDOrDie(env, gSparseArrayClassInfo.clazz, "get", "(I)Ljava/lang/Object;");
+    constexpr auto readerName = "com/android/internal/os/KernelCpuUidBpfMapReader";
+    constexpr JNINativeMethod method = {"startTrackingBpfTimes", "()Z",
+                                        (void *)KernelCpuUidBpfMapReader_startTrackingBpfTimes};
+
+    int ret = RegisterMethodsOrDie(env, readerName, &method, 1);
+    if (ret < 0) return ret;
+    auto c = FindClassOrDie(env, readerName);
+    gmData = GetFieldIDOrDie(env, c, "mData", "Landroid/util/SparseArray;");
+
+    for (const auto &m : gAllMethods) {
+        auto fullName = android::base::StringPrintf("%s$%s", readerName, m.name);
+        ret = RegisterMethodsOrDie(env, fullName.c_str(), m.methods, m.numMethods);
+        if (ret < 0) break;
+    }
+    return ret;
+}
+
+} // namespace android
diff --git a/core/jni/com_android_internal_os_KernelSingleUidTimeReader.cpp b/core/jni/com_android_internal_os_KernelSingleUidTimeReader.cpp
new file mode 100644
index 0000000..c0ecf33
--- /dev/null
+++ b/core/jni/com_android_internal_os_KernelSingleUidTimeReader.cpp
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+
+#include "core_jni_helpers.h"
+
+#include <cputimeinstate.h>
+
+namespace android {
+
+static constexpr uint64_t NSEC_PER_MSEC = 1000000;
+
+static jlongArray copyVecsToArray(JNIEnv *env, std::vector<std::vector<uint64_t>> &vec) {
+    jsize s = 0;
+    for (const auto &subVec : vec) s += subVec.size();
+    jlongArray ar = env->NewLongArray(s);
+    jsize start = 0;
+    for (auto &subVec : vec) {
+        for (uint32_t i = 0; i < subVec.size(); ++i) subVec[i] /= NSEC_PER_MSEC;
+        env->SetLongArrayRegion(ar, start, subVec.size(),
+                                reinterpret_cast<const jlong*>(subVec.data()));
+        start += subVec.size();
+    }
+    return ar;
+}
+
+static jlongArray getUidCpuFreqTimeMs(JNIEnv *env, jclass, jint uid) {
+    auto out = android::bpf::getUidCpuFreqTimes(uid);
+    if (!out) return env->NewLongArray(0);
+    return copyVecsToArray(env, out.value());
+}
+
+static const JNINativeMethod g_single_methods[] = {
+    {"readBpfData", "(I)[J", (void *)getUidCpuFreqTimeMs},
+};
+
+int register_com_android_internal_os_KernelSingleUidTimeReader(JNIEnv *env) {
+    return RegisterMethodsOrDie(env, "com/android/internal/os/KernelSingleUidTimeReader$Injector",
+                                g_single_methods, NELEM(g_single_methods));
+}
+
+}
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index 92941b8..e4141e0 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -49,7 +49,6 @@
 #include <fcntl.h>
 #include <grp.h>
 #include <inttypes.h>
-#include <link.h>
 #include <malloc.h>
 #include <mntent.h>
 #include <paths.h>
@@ -59,7 +58,6 @@
 #include <sys/capability.h>
 #include <sys/cdefs.h>
 #include <sys/eventfd.h>
-#include <sys/mman.h>
 #include <sys/personality.h>
 #include <sys/prctl.h>
 #include <sys/resource.h>
@@ -72,25 +70,23 @@
 #include <sys/wait.h>
 #include <unistd.h>
 
+#include <android-base/file.h>
 #include <android-base/logging.h>
 #include <android-base/properties.h>
-#include <android-base/file.h>
 #include <android-base/stringprintf.h>
-#include <android-base/strings.h>
 #include <android-base/unique_fd.h>
 #include <bionic/malloc.h>
-#include <bionic/page.h>
 #include <cutils/fs.h>
 #include <cutils/multiuser.h>
 #include <cutils/sockets.h>
 #include <private/android_filesystem_config.h>
-#include <utils/String8.h>
-#include <utils/Trace.h>
-#include <selinux/android.h>
-#include <seccomp_policy.h>
-#include <stats_event_list.h>
 #include <processgroup/processgroup.h>
 #include <processgroup/sched_policy.h>
+#include <seccomp_policy.h>
+#include <selinux/android.h>
+#include <stats_socket.h>
+#include <utils/String8.h>
+#include <utils/Trace.h>
 
 #include "core_jni_helpers.h"
 #include <nativehelper/JNIHelp.h>
@@ -109,10 +105,12 @@
 using namespace std::placeholders;
 
 using android::String8;
+using android::base::ReadFileToString;
 using android::base::StringAppendF;
 using android::base::StringPrintf;
 using android::base::WriteStringToFile;
 using android::base::GetBoolProperty;
+using android::base::GetProperty;
 
 #define CREATE_ERROR(...) StringPrintf("%s:%d: ", __FILE__, __LINE__). \
                               append(StringPrintf(__VA_ARGS__))
@@ -178,6 +176,12 @@
 static const std::string ANDROID_APP_DATA_ISOLATION_ENABLED_PROPERTY =
     "persist.zygote.app_data_isolation";
 
+/**
+ * Property to enable app data isolation for sdcard obb or data in vold.
+ */
+static const std::string ANDROID_VOLD_APP_DATA_ISOLATION_ENABLED_PROPERTY =
+    "persist.sys.vold_app_data_isolation_enabled";
+
 static constexpr const uint64_t UPPER_HALF_WORD_MASK = 0xFFFF'FFFF'0000'0000;
 static constexpr const uint64_t LOWER_HALF_WORD_MASK = 0x0000'0000'FFFF'FFFF;
 
@@ -349,6 +353,8 @@
 enum RuntimeFlags : uint32_t {
   DEBUG_ENABLE_JDWP = 1,
   PROFILE_FROM_SHELL = 1 << 15,
+  MEMORY_TAG_LEVEL_MASK = (1 << 19) | (1 << 20),
+  MEMORY_TAG_LEVEL_TBI = 1 << 19,
 };
 
 enum UnsolicitedZygoteMessageTypes : uint32_t {
@@ -605,12 +611,27 @@
   }
 }
 
+static bool IsFilesystemSupported(const std::string& fsType) {
+    std::string supported;
+    if (!ReadFileToString("/proc/filesystems", &supported)) {
+        ALOGE("Failed to read supported filesystems");
+        return false;
+    }
+    return supported.find(fsType + "\n") != std::string::npos;
+}
+
 static void PreApplicationInit() {
   // The child process sets this to indicate it's not the zygote.
   android_mallopt(M_SET_ZYGOTE_CHILD, nullptr, 0);
 
   // Set the jemalloc decay time to 1.
   mallopt(M_DECAY_TIME, 1);
+
+  // Maybe initialize GWP-ASan here. Must be called after
+  // mallopt(M_SET_ZYGOTE_CHILD).
+  bool ForceEnableGwpAsan = false;
+  android_mallopt(M_INITIALIZE_GWP_ASAN, &ForceEnableGwpAsan,
+                  sizeof(ForceEnableGwpAsan));
 }
 
 static void SetUpSeccompFilter(uid_t uid, bool is_child_zygote) {
@@ -778,6 +799,31 @@
   }
 }
 
+static void BindMountObbPackage(std::string_view package_name, int userId, fail_fn_t fail_fn) {
+
+  // TODO(148772775): Pass primary volume name from zygote argument to here
+  std::string source;
+  if (IsFilesystemSupported("sdcardfs")) {
+    source = StringPrintf("/mnt/runtime/default/emulated/%d/Android/obb/%s",
+        userId, package_name.data());
+  } else {
+    source = StringPrintf("/mnt/pass_through/%d/emulated/%d/Android/obb/%s",
+        userId, userId, package_name.data());
+  }
+  std::string target(
+      StringPrintf("/storage/emulated/%d/Android/obb/%s", userId, package_name.data()));
+
+  if (access(source.c_str(), F_OK) != 0) {
+    fail_fn(CREATE_ERROR("Cannot access source %s: %s", source.c_str(), strerror(errno)));
+  }
+
+  if (access(target.c_str(), F_OK) != 0) {
+    fail_fn(CREATE_ERROR("Cannot access target %s: %s", target.c_str(), strerror(errno)));
+  }
+
+  BindMount(source, target, fail_fn);
+}
+
 // Create a private mount namespace and bind mount appropriate emulated
 // storage for the given user.
 static void MountEmulatedStorage(uid_t uid, jint mount_mode,
@@ -1072,7 +1118,7 @@
   // Close any logging related FDs before we start evaluating the list of
   // file descriptors.
   __android_log_close();
-  stats_log_close();
+  AStatsSocket_close();
 
   // If this is the first fork for this zygote, create the open FD table.  If
   // it isn't, we just need to check whether the list of open files has changed
@@ -1490,11 +1536,70 @@
     std::string mirrorCurPackageProfile = StringPrintf("/data_mirror/cur_profiles/%d/%s",
         user_id, packageName.c_str());
 
+    if (access(mirrorCurPackageProfile.c_str(), F_OK) != 0) {
+      ALOGW("Can't access app profile directory: %s", mirrorCurPackageProfile.c_str());
+      continue;
+    }
+
     PrepareDir(actualCurPackageProfile, DEFAULT_DATA_DIR_PERMISSION, uid, uid, fail_fn);
     BindMount(mirrorCurPackageProfile, actualCurPackageProfile, fail_fn);
   }
 }
 
+// Bind mount all obb directories that are visible to this app.
+// If app data isolation is not enabled for this process, bind mount the whole obb
+// directory instead.
+static void BindMountAppObbDirs(JNIEnv* env, jobjectArray pkg_data_info_list,
+    uid_t uid, const char* process_name, jstring managed_nice_name, fail_fn_t fail_fn) {
+
+  auto extract_fn = std::bind(ExtractJString, env, process_name, managed_nice_name, _1);
+  const userid_t user_id = multiuser_get_user_id(uid);
+
+  // If FUSE is not ready for this user, skip it
+  // TODO(148772775): Pass primary volume name from zygote argument to here
+  std::string tmp = GetProperty("vold.fuse_running_users", "");
+  std::istringstream fuse_running_users(tmp);
+  bool user_found = false;
+  std::string s;
+  std::string user_id_str = std::to_string(user_id);
+  while (!user_found && std::getline(fuse_running_users, s, ',')) {
+    if (user_id_str == s) {
+      user_found = true;
+    }
+  }
+  if (!user_found) {
+    ALOGI("User %d is not running fuse yet, fuse_running_users=%s", user_id, tmp.c_str());
+    return;
+  }
+
+  // Fuse is ready, so we can start using fuse path.
+  int size = (pkg_data_info_list != nullptr) ? env->GetArrayLength(pkg_data_info_list) : 0;
+
+  if (size == 0) {
+    // App data isolation is not enabled for this process, so we bind mount to whole obb/ dir.
+    std::string source;
+    if (IsFilesystemSupported("sdcardfs")) {
+      source = StringPrintf("/mnt/runtime/default/emulated/%d/Android/obb", user_id);
+    } else {
+      source = StringPrintf("/mnt/pass_through/%d/emulated/%d/Android/obb", user_id, user_id);
+    }
+    std::string target(StringPrintf("/storage/emulated/%d/Android/obb", user_id));
+
+    if (access(source.c_str(), F_OK) != 0) {
+      fail_fn(CREATE_ERROR("Error accessing %s: %s", source.c_str(), strerror(errno)));
+    }
+    BindMount(source, target, fail_fn);
+    return;
+  }
+
+  // Bind mount each package obb directory
+  for (int i = 0; i < size; i += 3) {
+    jstring package_str = (jstring) (env->GetObjectArrayElement(pkg_data_info_list, i));
+    std::string packageName = extract_fn(package_str).value();
+    BindMountObbPackage(packageName, user_id, fail_fn);
+  }
+}
+
 // Utility routine to specialize a zygote child process.
 static void SpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray gids,
                              jint runtime_flags, jobjectArray rlimits,
@@ -1543,6 +1648,12 @@
     isolateJitProfile(env, pkg_data_info_list, uid, process_name, managed_nice_name, fail_fn);
   }
 
+  if ((mount_external != MOUNT_EXTERNAL_INSTALLER) &&
+        GetBoolProperty(kPropFuse, false) &&
+        GetBoolProperty(ANDROID_VOLD_APP_DATA_ISOLATION_ENABLED_PROPERTY, false)) {
+    BindMountAppObbDirs(env, pkg_data_info_list, uid, process_name, managed_nice_name, fail_fn);
+  }
+
   // If this zygote isn't root, it won't be able to create a process group,
   // since the directory is owned by root.
   if (!is_system_server && getuid() == 0) {
@@ -1616,6 +1727,16 @@
     }
   }
 
+  HeapTaggingLevel heap_tagging_level;
+  switch (runtime_flags & RuntimeFlags::MEMORY_TAG_LEVEL_MASK) {
+    case RuntimeFlags::MEMORY_TAG_LEVEL_TBI:
+      heap_tagging_level = M_HEAP_TAGGING_LEVEL_TBI;
+      break;
+    default:
+      heap_tagging_level = M_HEAP_TAGGING_LEVEL_NONE;
+  }
+  android_mallopt(M_SET_HEAP_TAGGING_LEVEL, &heap_tagging_level, sizeof(heap_tagging_level));
+
   if (NeedsNoRandomizeWorkaround()) {
     // Work around ARM kernel ASLR lossage (http://b/5817320).
     int old_personality = personality(0xffffffff);
@@ -1628,7 +1749,7 @@
   SetCapabilities(permitted_capabilities, effective_capabilities, permitted_capabilities, fail_fn);
 
   __android_log_close();
-  stats_log_close();
+  AStatsSocket_close();
 
   const char* se_info_ptr = se_info.has_value() ? se_info.value().c_str() : nullptr;
   const char* nice_name_ptr = nice_name.has_value() ? nice_name.value().c_str() : nullptr;
@@ -1882,25 +2003,6 @@
   UnmountTree("/storage");
 }
 
-static int DisableExecuteOnly(struct dl_phdr_info* info,
-                              size_t size [[maybe_unused]],
-                              void* data [[maybe_unused]]) {
-  // Search for any execute-only segments and mark them read+execute.
-  for (int i = 0; i < info->dlpi_phnum; i++) {
-    const auto& phdr = info->dlpi_phdr[i];
-    if ((phdr.p_type == PT_LOAD) && (phdr.p_flags == PF_X)) {
-      auto addr = reinterpret_cast<void*>(info->dlpi_addr + PAGE_START(phdr.p_vaddr));
-      size_t len = PAGE_OFFSET(phdr.p_vaddr) + phdr.p_memsz;
-      if (mprotect(addr, len, PROT_READ | PROT_EXEC) == -1) {
-        ALOGE("mprotect(%p, %zu, PROT_READ | PROT_EXEC) failed: %m", addr, len);
-        return -1;
-      }
-    }
-  }
-  // Return non-zero to exit dl_iterate_phdr.
-  return 0;
-}
-
 }  // anonymous namespace
 
 namespace android {
@@ -2263,14 +2365,6 @@
   }
 }
 
-/**
- * @param env  Managed runtime environment
- * @return  True if disable was successful.
- */
-static jboolean com_android_internal_os_Zygote_nativeDisableExecuteOnly(JNIEnv* env, jclass) {
-  return dl_iterate_phdr(DisableExecuteOnly, nullptr) == 0;
-}
-
 static void com_android_internal_os_Zygote_nativeBlockSigTerm(JNIEnv* env, jclass) {
   auto fail_fn = std::bind(ZygoteFailure, env, "usap", nullptr, _1);
   BlockSignal(SIGTERM, fail_fn);
@@ -2352,8 +2446,6 @@
         {"nativeGetUsapPoolCount", "()I",
          (void*)com_android_internal_os_Zygote_nativeGetUsapPoolCount},
         {"nativeEmptyUsapPool", "()V", (void*)com_android_internal_os_Zygote_nativeEmptyUsapPool},
-        {"nativeDisableExecuteOnly", "()Z",
-         (void*)com_android_internal_os_Zygote_nativeDisableExecuteOnly},
         {"nativeBlockSigTerm", "()V", (void*)com_android_internal_os_Zygote_nativeBlockSigTerm},
         {"nativeUnblockSigTerm", "()V", (void*)com_android_internal_os_Zygote_nativeUnblockSigTerm},
         {"nativeBoostUsapPriority", "()V",
diff --git a/core/jni/com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp b/core/jni/com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp
deleted file mode 100644
index f4d2e7b..0000000
--- a/core/jni/com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp
+++ /dev/null
@@ -1,114 +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.
- */
-
-#define LOG_TAG "OpenGLRenderer"
-
-#include "jni.h"
-#include <nativehelper/JNIHelp.h>
-#include <cutils/log.h>
-#include "core_jni_helpers.h"
-
-#include <Interpolator.h>
-
-namespace android {
-
-using namespace uirenderer;
-
-static jlong createAccelerateDecelerateInterpolator(JNIEnv* env, jobject clazz) {
-    return reinterpret_cast<jlong>(new AccelerateDecelerateInterpolator());
-}
-
-static jlong createAccelerateInterpolator(JNIEnv* env, jobject clazz, jfloat factor) {
-    return reinterpret_cast<jlong>(new AccelerateInterpolator(factor));
-}
-
-static jlong createAnticipateInterpolator(JNIEnv* env, jobject clazz, jfloat tension) {
-    return reinterpret_cast<jlong>(new AnticipateInterpolator(tension));
-}
-
-static jlong createAnticipateOvershootInterpolator(JNIEnv* env, jobject clazz, jfloat tension) {
-    return reinterpret_cast<jlong>(new AnticipateOvershootInterpolator(tension));
-}
-
-static jlong createBounceInterpolator(JNIEnv* env, jobject clazz) {
-    return reinterpret_cast<jlong>(new BounceInterpolator());
-}
-
-static jlong createCycleInterpolator(JNIEnv* env, jobject clazz, jfloat cycles) {
-    return reinterpret_cast<jlong>(new CycleInterpolator(cycles));
-}
-
-static jlong createDecelerateInterpolator(JNIEnv* env, jobject clazz, jfloat factor) {
-    return reinterpret_cast<jlong>(new DecelerateInterpolator(factor));
-}
-
-static jlong createLinearInterpolator(JNIEnv* env, jobject clazz) {
-    return reinterpret_cast<jlong>(new LinearInterpolator());
-}
-
-static jlong createOvershootInterpolator(JNIEnv* env, jobject clazz, jfloat tension) {
-    return reinterpret_cast<jlong>(new OvershootInterpolator(tension));
-}
-
-static jlong createPathInterpolator(JNIEnv* env, jobject clazz, jfloatArray jX, jfloatArray jY) {
-    jsize lenX = env->GetArrayLength(jX);
-    jsize lenY = env->GetArrayLength(jY);
-    LOG_ALWAYS_FATAL_IF(lenX != lenY || lenX <= 0, "Invalid path interpolator, x size: %d,"
-            " y size: %d", lenX, lenY);
-    std::vector<float> x(lenX);
-    std::vector<float> y(lenY);
-    env->GetFloatArrayRegion(jX, 0, lenX, x.data());
-    env->GetFloatArrayRegion(jY, 0, lenX, y.data());
-
-    return reinterpret_cast<jlong>(new PathInterpolator(std::move(x), std::move(y)));
-}
-
-static jlong createLutInterpolator(JNIEnv* env, jobject clazz, jfloatArray jlut) {
-    jsize len = env->GetArrayLength(jlut);
-    if (len <= 0) {
-        return 0;
-    }
-    float* lut = new float[len];
-    env->GetFloatArrayRegion(jlut, 0, len, lut);
-    return reinterpret_cast<jlong>(new LUTInterpolator(lut, len));
-}
-
-// ----------------------------------------------------------------------------
-// JNI Glue
-// ----------------------------------------------------------------------------
-
-const char* const kClassPathName = "com/android/internal/view/animation/NativeInterpolatorFactoryHelper";
-
-static const JNINativeMethod gMethods[] = {
-    { "createAccelerateDecelerateInterpolator", "()J", (void*) createAccelerateDecelerateInterpolator },
-    { "createAccelerateInterpolator", "(F)J", (void*) createAccelerateInterpolator },
-    { "createAnticipateInterpolator", "(F)J", (void*) createAnticipateInterpolator },
-    { "createAnticipateOvershootInterpolator", "(F)J", (void*) createAnticipateOvershootInterpolator },
-    { "createBounceInterpolator", "()J", (void*) createBounceInterpolator },
-    { "createCycleInterpolator", "(F)J", (void*) createCycleInterpolator },
-    { "createDecelerateInterpolator", "(F)J", (void*) createDecelerateInterpolator },
-    { "createLinearInterpolator", "()J", (void*) createLinearInterpolator },
-    { "createOvershootInterpolator", "(F)J", (void*) createOvershootInterpolator },
-    { "createPathInterpolator", "([F[F)J", (void*) createPathInterpolator },
-    { "createLutInterpolator", "([F)J", (void*) createLutInterpolator },
-};
-
-int register_com_android_internal_view_animation_NativeInterpolatorFactoryHelper(JNIEnv* env) {
-    return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods));
-}
-
-
-} // namespace android
diff --git a/core/proto/android/app/appexitinfo.proto b/core/proto/android/app/appexitinfo.proto
index e23f150..6a49220 100644
--- a/core/proto/android/app/appexitinfo.proto
+++ b/core/proto/android/app/appexitinfo.proto
@@ -178,8 +178,8 @@
     }
 
     optional Importance importance = 10;
-    optional int32 pss = 11;
-    optional int32 rss = 12;
+    optional int64 pss = 11;
+    optional int64 rss = 12;
     optional int64 timestamp = 13;
     optional string description = 14;
 }
diff --git a/core/proto/android/app/settings_enums.proto b/core/proto/android/app/settings_enums.proto
index fc0a2ef..030483b 100644
--- a/core/proto/android/app/settings_enums.proto
+++ b/core/proto/android/app/settings_enums.proto
@@ -708,6 +708,22 @@
 
     // ACTION: Deny "Access all files" for an app
     APP_SPECIAL_PERMISSION_MANAGE_EXT_STRG_DENY = 1731;
+
+    // ACTION: Battery feature usage
+    ACTION_BATTERY_OPTION_FEATURE_USAGE = 1732;
+
+    // ACTION: Battery feature runtime event
+    ACTION_BATTERY_OPTION_RUNTIME_EVENT = 1733;
+
+    // ACTION: Settings > Developer Options > Toggle on Wireless debugging
+    // CATEGORY: SETTINGS
+    // OS: R
+    ACTION_ADB_WIRELESS_ON = 1734;
+
+    // ACTION: Settings > Developer Options > Toggle off Wireless debugging
+    // CATEGORY: SETTINGS
+    // OS: R
+    ACTION_ADB_WIRELESS_OFF = 1735;
 }
 
 /**
@@ -2578,4 +2594,43 @@
     // CATEGORY: SETTINGS
     // OS: R
     CONNECTION_DEVICE_ADVANCED_NFC = 1828;
+
+    // OPEN: Settings -> Apps & Notifications -> Special App Access
+    INTERACT_ACROSS_PROFILES = 1829;
+
+    // OPEN: Settings > Notifications > (app or conversations) > conversation
+    NOTIFICATION_CONVERSATION_SETTINGS = 1830;
+
+    // OPEN: Settings > Developer Options > Wireless debugging
+    // CATEGORY: SETTINGS
+    // OS: R
+    SETTINGS_ADB_WIRELESS = 1831;
+
+    // OPEN: Settings > Developer Options > Wireless debugging
+    //   > Pair device with pairing code > Pairing code dialog
+    // CATEGORY: SETTINGS
+    // OS: R
+    ADB_WIRELESS_DEVICE_PAIRING_DIALOG = 1832;
+
+    // OPEN: Settings > Developer Options > Wireless debugging
+    //   > Pair device with QR code > Scan QR code > Pairing device dialog
+    // CATEGORY: SETTINGS
+    // OS: R
+    ADB_WIRELESS_DEVICE_QR_PAIRING_DIALOG = 1833;
+
+    // OPEN: Settings > apps & notifications > notifications > conversations
+    // CATEGORY: SETTINGS
+    // OS: R
+    NOTIFICATION_CONVERSATION_LIST_SETTINGS = 1834;
+
+    // Panel for Media Output Group operation
+    // CATEGORY: SETTINGS
+    // OS: R
+    PANEL_MEDIA_OUTPUT_GROUP = 1835;
+
+    // OPEN: Settings > Developer Options > Wireless debugging
+    //   > Click on paired device
+    // CATEGORY: SETTINGS
+    // OS: R
+    ADB_WIRELESS_DEVICE_DETAILS = 1836;
 }
diff --git a/core/proto/android/content/intent.proto b/core/proto/android/content/intent.proto
index 014d71c..26e7dbb 100644
--- a/core/proto/android/content/intent.proto
+++ b/core/proto/android/content/intent.proto
@@ -65,7 +65,7 @@
     optional string identifier = 13 [ (.android.privacy).dest = DEST_EXPLICIT ];
 }
 
-// Next Tag: 11
+// Next Tag: 12
 message IntentFilterProto {
     option (.android.msg_privacy).dest = DEST_AUTOMATIC;
 
@@ -86,6 +86,7 @@
     optional int32 priority = 8;
     optional bool has_partial_types = 9;
     optional bool get_auto_verify = 10;
+    repeated string mime_groups = 11;
 }
 
 message AuthorityEntryProto {
diff --git a/core/proto/android/content/locusid.proto b/core/proto/android/content/locusid.proto
new file mode 100644
index 0000000..4f0ce6b
--- /dev/null
+++ b/core/proto/android/content/locusid.proto
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+syntax = "proto2";
+
+package android.content;
+
+option java_multiple_files = true;
+
+// On disk representation of android.content.LocusId. Currently used by
+// com.android.server.people.ConversationInfoProto.
+message LocusIdProto {
+  optional string locus_id = 1;
+}
diff --git a/core/proto/android/nfc/OWNERS b/core/proto/android/nfc/OWNERS
new file mode 100644
index 0000000..ca16721
--- /dev/null
+++ b/core/proto/android/nfc/OWNERS
@@ -0,0 +1 @@
+include platform/packages/apps/Nfc:/OWNERS
\ No newline at end of file
diff --git a/core/proto/android/nfc/aid_group.proto b/core/proto/android/nfc/aid_group.proto
new file mode 100644
index 0000000..0636519
--- /dev/null
+++ b/core/proto/android/nfc/aid_group.proto
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+
+syntax = "proto2";
+package android.nfc.cardemulation;
+
+import "frameworks/base/core/proto/android/privacy.proto";
+
+option java_multiple_files = true;
+
+// Debugging information for android.nfc.cardemulation.AidGroup
+message AidGroupProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+
+    optional string category = 1;
+    // A group of Application Identifiers. A hexadecimal string, with an even amount of hexadecimal
+    // characters, e.g. "F014811481".
+    repeated string aids = 2;
+}
diff --git a/core/proto/android/nfc/apdu_service_info.proto b/core/proto/android/nfc/apdu_service_info.proto
new file mode 100644
index 0000000..c726ea3
--- /dev/null
+++ b/core/proto/android/nfc/apdu_service_info.proto
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+
+syntax = "proto2";
+package android.nfc.cardemulation;
+
+import "frameworks/base/core/proto/android/content/component_name.proto";
+import "frameworks/base/core/proto/android/nfc/aid_group.proto";
+import "frameworks/base/core/proto/android/privacy.proto";
+
+option java_multiple_files = true;
+
+// Debugging information for android.nfc.cardemulation.ApduServiceInfo
+message ApduServiceInfoProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+
+    optional .android.content.ComponentNameProto component_name = 1;
+    optional string description = 2;
+    optional bool on_host = 3;
+    optional string off_host_name = 4;
+    optional string static_off_host_name = 5;
+    repeated AidGroupProto static_aid_groups = 6;
+    repeated AidGroupProto dynamic_aid_groups = 7;
+    optional string settings_activity_name = 8;
+}
diff --git a/core/proto/android/nfc/card_emulation.proto b/core/proto/android/nfc/card_emulation.proto
new file mode 100644
index 0000000..474d14a
--- /dev/null
+++ b/core/proto/android/nfc/card_emulation.proto
@@ -0,0 +1,129 @@
+/*
+ * 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.
+ */
+
+syntax = "proto2";
+package com.android.nfc.cardemulation;
+
+import "frameworks/base/core/proto/android/content/component_name.proto";
+import "frameworks/base/core/proto/android/nfc/apdu_service_info.proto";
+import "frameworks/base/core/proto/android/nfc/nfc_fservice_info.proto";
+import "frameworks/base/core/proto/android/privacy.proto";
+
+option java_multiple_files = true;
+
+// Debugging information for com.android.nfc.cardemulation.CardEmulationManager
+message CardEmulationManagerProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+    optional RegisteredServicesCacheProto registered_services_cache = 1;
+    optional RegisteredNfcFServicesCacheProto registered_nfc_f_services_cache = 2;
+    optional PreferredServicesProto preferred_services = 3;
+    optional EnabledNfcFServicesProto enabled_nfc_f_services = 4;
+    optional RegisteredAidCacheProto aid_cache = 5;
+    optional RegisteredT3tIdentifiersCacheProto t3t_identifiers_cache = 6;
+    optional HostEmulationManagerProto host_emulation_manager = 7;
+    optional HostNfcFEmulationManagerProto host_nfc_f_emulation_manager = 8;
+}
+
+// Debugging information for com.android.nfc.cardemulation.RegisteredServicesCache
+message RegisteredServicesCacheProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+    repeated .android.nfc.cardemulation.ApduServiceInfoProto apdu_service_infos = 1;
+}
+
+// Debugging information for com.android.nfc.cardemulation.RegisteredNfcFServicesCache
+message RegisteredNfcFServicesCacheProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+    repeated .android.nfc.cardemulation.NfcFServiceInfoProto nfc_fservice_info = 1;
+}
+
+// Debugging information for com.android.nfc.cardemulation.PreferredServices
+message PreferredServicesProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+    optional .android.content.ComponentNameProto foreground_current = 1;
+    optional .android.content.ComponentNameProto current_preferred = 2;
+    optional .android.content.ComponentNameProto next_tap_default = 3;
+    optional int32 foreground_uid = 4;
+    optional .android.content.ComponentNameProto foreground_requested = 5;
+    optional .android.content.ComponentNameProto settings_default = 6;
+    optional bool prefer_foreground = 7;
+}
+
+// Debugging information for com.android.nfc.cardemulation.EnabledNfcFServices
+message EnabledNfcFServicesProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+    optional .android.content.ComponentNameProto foreground_component = 1;
+    optional .android.content.ComponentNameProto foreground_requested = 2;
+    optional bool activated = 3;
+    optional bool compute_fg_requested = 4;
+    optional int32 foreground_uid = 5;
+}
+
+// Debugging information for com.android.nfc.cardemulation.RegisteredAidCache
+message RegisteredAidCacheProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+    message AidCacheEntry {
+        optional string key = 1;
+        optional string category = 2;
+        optional .android.content.ComponentNameProto default_component = 3;
+        repeated .android.nfc.cardemulation.ApduServiceInfoProto services = 4;
+    }
+    repeated AidCacheEntry aid_cache_entries = 1;
+    optional .android.content.ComponentNameProto preferred_foreground_service = 2;
+    optional .android.content.ComponentNameProto preferred_payment_service = 3;
+    optional AidRoutingManagerProto routing_manager = 4;
+}
+
+message AidRoutingManagerProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+    message Route {
+        option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+        optional int32 id = 1;
+        repeated string aids = 2;
+    }
+    optional int32 default_route = 1;
+    repeated Route routes = 2;
+}
+
+// Debugging information for com.android.nfc.cardemulation.RegisteredT3tIdentifiersCache
+message RegisteredT3tIdentifiersCacheProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+    repeated .android.nfc.cardemulation.NfcFServiceInfoProto t3t_identifier_cache_entries = 1;
+    optional SystemCodeRoutingManagerProto routing_manager = 2;
+}
+
+// Debugging information for com.android.nfc.cardemulation.SystemCodeRoutingManager
+message SystemCodeRoutingManagerProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+    message T3tIdentifier {
+        option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+        optional string system_code = 1;
+        optional string nfcid2 = 2;
+    }
+    repeated T3tIdentifier t3t_identifiers = 1;
+}
+
+// Debugging information for com.android.nfc.cardemulation.HostEmulationManager
+message HostEmulationManagerProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+    optional .android.content.ComponentNameProto payment_service_name = 1;
+    optional .android.content.ComponentNameProto service_name = 2;
+}
+
+// Debugging information for com.android.nfc.cardemulation.HostNfcFEmulationManager
+message HostNfcFEmulationManagerProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+    optional .android.content.ComponentNameProto service_name = 1;
+}
diff --git a/core/proto/android/nfc/ndef.proto b/core/proto/android/nfc/ndef.proto
new file mode 100644
index 0000000..52b3238
--- /dev/null
+++ b/core/proto/android/nfc/ndef.proto
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+syntax = "proto2";
+package android.nfc;
+
+import "frameworks/base/core/proto/android/privacy.proto";
+
+option java_multiple_files = true;
+
+// Debugging information for android.nfc.NdefMessage
+message NdefMessageProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+
+    repeated NdefRecordProto ndef_records = 1;
+}
+
+message NdefRecordProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+
+    optional bytes type = 1;
+    optional bytes id = 2;
+    optional int32 payload_bytes = 3;
+}
diff --git a/core/proto/android/nfc/nfc_fservice_info.proto b/core/proto/android/nfc/nfc_fservice_info.proto
new file mode 100644
index 0000000..eecd7b0
--- /dev/null
+++ b/core/proto/android/nfc/nfc_fservice_info.proto
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+
+syntax = "proto2";
+package android.nfc.cardemulation;
+
+import "frameworks/base/core/proto/android/content/component_name.proto";
+import "frameworks/base/core/proto/android/privacy.proto";
+
+option java_multiple_files = true;
+
+// Debugging information for android.nfc.cardemulation.NfcFServiceInfo
+message NfcFServiceInfoProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+
+    optional .android.content.ComponentNameProto component_name = 1;
+    // Description of the service
+    optional string description = 2;
+    // System Code of the service
+    optional string system_code = 3;
+    // NFCID2 of the service
+    optional string nfcid2 = 4;
+    // LF_T3T_PMM of the service
+    optional string t3t_pmm = 5;
+}
diff --git a/core/proto/android/nfc/nfc_service.proto b/core/proto/android/nfc/nfc_service.proto
new file mode 100644
index 0000000..73a7989
--- /dev/null
+++ b/core/proto/android/nfc/nfc_service.proto
@@ -0,0 +1,122 @@
+/*
+ * 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.
+ */
+
+syntax = "proto2";
+package com.android.nfc;
+
+import "frameworks/base/core/proto/android/app/pendingintent.proto";
+import "frameworks/base/core/proto/android/content/intent.proto";
+import "frameworks/base/core/proto/android/nfc/card_emulation.proto";
+import "frameworks/base/core/proto/android/nfc/ndef.proto";
+import "frameworks/base/core/proto/android/privacy.proto";
+
+option java_multiple_files = true;
+
+// Debugging information for com.android.nfc.NfcService
+message NfcServiceDumpProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+
+    enum State {
+        STATE_UNKNOWN = 0;
+        STATE_OFF = 1;
+        STATE_TURNING_ON = 2;
+        STATE_ON = 3;
+        STATE_TURNING_OFF = 4;
+    }
+
+    enum ScreenState {
+        SCREEN_STATE_UNKNOWN = 0;
+        SCREEN_STATE_OFF_UNLOCKED = 1;
+        SCREEN_STATE_OFF_LOCKED = 2;
+        SCREEN_STATE_ON_LOCKED = 3;
+        SCREEN_STATE_ON_UNLOCKED = 4;
+    }
+
+    optional State state = 1;
+    optional bool in_provision_mode = 2;
+    optional bool ndef_push_enabled = 3;
+    optional ScreenState screen_state = 4;
+    optional bool secure_nfc_enabled = 5;
+    optional bool polling_paused = 6;
+    optional int32 num_tags_detected = 7;
+    optional int32 num_p2p_detected = 8;
+    optional int32 num_hce_detected = 9;
+    optional bool hce_capable = 10;
+    optional bool hce_f_capable = 11;
+    optional bool beam_capable = 12;
+    optional bool secure_nfc_capable = 13;
+    optional bool vr_mode_enabled = 14;
+    optional DiscoveryParamsProto discovery_params = 15;
+    optional P2pLinkManagerProto p2p_link_manager = 16;
+    optional com.android.nfc.cardemulation.CardEmulationManagerProto card_emulation_manager = 17;
+    optional NfcDispatcherProto nfc_dispatcher = 18;
+    optional string native_crash_logs = 19 [(.android.privacy).dest = DEST_EXPLICIT];
+}
+
+// Debugging information for com.android.nfc.NfcDiscoveryParameters
+message DiscoveryParamsProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+
+    optional int32 tech_mask = 1;
+    optional bool enable_lpd = 2;
+    optional bool enable_reader = 3;
+    optional bool enable_host_routing = 4;
+    optional bool enable_p2p = 5;
+}
+
+// Debugging information for com.android.nfc.P2pLinkManager
+message P2pLinkManagerProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+
+    enum LinkState {
+        LINK_STATE_UNKNOWN = 0;
+        LINK_STATE_DOWN = 1;
+        LINK_STATE_DEBOUNCE = 2;
+        LINK_STATE_UP = 3;
+    }
+
+    enum SendState {
+        SEND_STATE_UNKNOWN = 0;
+        SEND_STATE_NOTHING_TO_SEND = 1;
+        SEND_STATE_NEED_CONFIRMATION = 2;
+        SEND_STATE_SENDING = 3;
+        SEND_STATE_COMPLETE = 4;
+        SEND_STATE_CANCELED = 5;
+    }
+
+    optional int32 default_miu = 1;
+    optional int32 default_rw_size = 2;
+    optional LinkState link_state = 3;
+    optional SendState send_state = 4;
+    optional int32 send_flags = 5;
+    optional bool send_enabled = 6;
+    optional bool receive_enabled = 7;
+    optional string callback_ndef = 8;
+    optional .android.nfc.NdefMessageProto message_to_send = 9;
+    repeated string uris_to_send = 10 [(.android.privacy).dest = DEST_EXPLICIT];
+}
+
+// Debugging information for com.android.nfc.NfcDispatcher
+message NfcDispatcherProto {
+    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+
+    optional bool device_supports_bluetooth = 1;
+    optional bool bluetooth_enabled_by_nfc = 2;
+    optional bool provisioning_only = 3;
+    optional .android.app.PendingIntentProto override_intent = 4;
+    repeated .android.content.IntentFilterProto override_filters = 5;
+    optional string override_tech_lists = 6;
+}
diff --git a/core/proto/android/os/incident.proto b/core/proto/android/os/incident.proto
index bf4cdee..7d1cf5d 100644
--- a/core/proto/android/os/incident.proto
+++ b/core/proto/android/os/incident.proto
@@ -17,6 +17,7 @@
 syntax = "proto2";
 option java_multiple_files = true;
 
+import "frameworks/base/core/proto/android/nfc/nfc_service.proto";
 import "frameworks/base/core/proto/android/os/backtrace.proto";
 import "frameworks/base/core/proto/android/os/batterytype.proto";
 import "frameworks/base/core/proto/android/os/cpufreq.proto";
@@ -34,6 +35,7 @@
 import "frameworks/base/core/proto/android/providers/settings.proto";
 import "frameworks/base/core/proto/android/server/activitymanagerservice.proto";
 import "frameworks/base/core/proto/android/server/alarmmanagerservice.proto";
+import "frameworks/base/core/proto/android/server/bluetooth_manager_service.proto";
 import "frameworks/base/core/proto/android/server/fingerprint.proto";
 import "frameworks/base/core/proto/android/server/jobscheduler.proto";
 import "frameworks/base/core/proto/android/server/location/context_hub.proto";
@@ -428,7 +430,7 @@
         (section).args = "dropbox --proto system_app_wtf"
     ];
 
-    optional android.service.dropbox.DropBoxManagerServiceDumpProto dropbox_system_server_crashes = 3037 [
+    optional android.service.dropbox.DropBoxManagerServiceDumpProto dropbox_system_server_crash = 3037 [
         (section).type = SECTION_DUMPSYS,
         (section).args = "dropbox --proto system_server_crash"
     ];
@@ -488,11 +490,21 @@
         (section).args = "connmetrics --proto"
     ];
 
+    optional com.android.server.BluetoothManagerServiceDumpProto bluetooth_manager = 3050 [
+        (section).type = SECTION_DUMPSYS,
+        (section).args = "bluetooth_manager --proto"
+    ];
+
     optional com.android.server.location.ContextHubServiceProto context_hub = 3051 [
         (section).type = SECTION_DUMPSYS,
         (section).args = "contexthub --proto"
     ];
 
+    optional com.android.nfc.NfcServiceDumpProto nfc_service  = 3052 [
+        (section).type = SECTION_DUMPSYS,
+        (section).args = "nfc --proto"
+    ];
+
     optional android.service.SensorServiceProto sensor_service = 3053 [
         (section).type = SECTION_DUMPSYS,
         (section).args = "sensorservice --proto"
diff --git a/core/proto/android/providers/settings/secure.proto b/core/proto/android/providers/settings/secure.proto
index 77d4e87..6d9e8ab 100644
--- a/core/proto/android/providers/settings/secure.proto
+++ b/core/proto/android/providers/settings/secure.proto
@@ -80,6 +80,11 @@
     }
     optional Accessibility accessibility = 2;
 
+    message AdaptiveSleep {
+        optional SettingProto enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+    }
+    optional AdaptiveSleep adaptive_sleep = 78;
+
     // Origins for which browsers should allow geolocation by default.
     // The value is a space-separated list of origins.
     optional SettingProto allowed_geolocation_origins = 3;
@@ -574,5 +579,5 @@
 
     // Please insert fields in alphabetical order and group them into messages
     // if possible (to avoid reaching the method limit).
-    // Next tag = 78;
+    // Next tag = 79;
 }
diff --git a/core/proto/android/providers/settings/system.proto b/core/proto/android/providers/settings/system.proto
index f8143de8..b723b53 100644
--- a/core/proto/android/providers/settings/system.proto
+++ b/core/proto/android/providers/settings/system.proto
@@ -161,6 +161,8 @@
         optional SettingProto brightness_for_vr = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
         optional SettingProto brightness_mode = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
         optional SettingProto auto_brightness_adj = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+        optional SettingProto brightness_float = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
+        optional SettingProto brightness_for_vr_float = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
     }
     optional Screen screen = 22;
 
diff --git a/core/proto/android/server/bluetooth_manager_service.proto b/core/proto/android/server/bluetooth_manager_service.proto
new file mode 100644
index 0000000..998413f
--- /dev/null
+++ b/core/proto/android/server/bluetooth_manager_service.proto
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ */
+
+syntax = "proto2";
+package com.android.server;
+
+import "frameworks/base/core/proto/android/bluetooth/enums.proto";
+import "frameworks/base/core/proto/android/privacy.proto";
+
+option java_multiple_files = true;
+
+message BluetoothManagerServiceDumpProto {
+   option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+
+   message ActiveLog {
+      option (.android.msg_privacy).dest = DEST_AUTOMATIC;
+      optional int64 timestamp_ms = 1;
+      optional bool enable = 2;
+      optional string package_name = 3;
+      optional .android.bluetooth.EnableDisableReasonEnum reason = 4;
+   }
+
+   optional bool enabled = 1;
+   optional int32 state = 2;
+   optional string state_name = 3;
+   optional string address = 4 [(.android.privacy).dest = DEST_EXPLICIT];
+   optional string name = 5 [(.android.privacy).dest = DEST_EXPLICIT];
+   optional int64 last_enabled_time_ms = 6;
+   optional int64 curr_timestamp_ms = 7;
+   repeated ActiveLog active_logs = 8;
+   optional int32 num_crashes = 9;
+   optional bool crash_log_maxed = 10;
+   repeated int64 crash_timestamps_ms = 11;
+   optional int32 num_ble_apps = 12;
+   repeated string ble_app_package_names = 13;
+}
\ No newline at end of file
diff --git a/core/proto/android/server/jobscheduler.proto b/core/proto/android/server/jobscheduler.proto
index 303d62d..4bef2e3 100644
--- a/core/proto/android/server/jobscheduler.proto
+++ b/core/proto/android/server/jobscheduler.proto
@@ -170,30 +170,13 @@
 message ConstantsProto {
     option (.android.msg_privacy).dest = DEST_AUTOMATIC;
 
-    // Minimum # of idle jobs that must be ready in order to force the JMS to
-    // schedule things early.
-    optional int32 min_idle_count = 1;
-    // Minimum # of charging jobs that must be ready in order to force the JMS
-    // to schedule things early.
-    optional int32 min_charging_count = 2;
-    // Minimum # of "battery not low" jobs that must be ready in order to force
-    // the JMS to schedule things early.
-    optional int32 min_battery_not_low_count = 3;
-    // Minimum # of "storage not low" jobs that must be ready in order to force
-    // the JMS to schedule things early.
-    optional int32 min_storage_not_low_count = 4;
-    // Minimum # of connectivity jobs that must be ready in order to force the
-    // JMS to schedule things early. 1 == Run connectivity jobs as soon as
-    // ready.
-    optional int32 min_connectivity_count = 5;
-    // Minimum # of content trigger jobs that must be ready in order to force
-    // the JMS to schedule things early.
-    optional int32 min_content_count = 6;
-    // Minimum # of jobs (with no particular constraints) for which the JMS will
-    // be happy running some work early. This (and thus the other min counts)
-    // is now set to 1, to prevent any batching at this level. Since we now do
-    // batching through doze, that is a much better mechanism.
-    optional int32 min_ready_jobs_count = 7;
+    reserved 1; // min_idle_count
+    reserved 2; // min_charging_count
+    reserved 3; // min_battery_not_low_count
+    reserved 4; // min_storage_not_low_count
+    reserved 5; // min_connectivity_count
+    reserved 6; // min_content_count
+    reserved 7; // min_ready_jobs_count
     // Minimum # of non-ACTIVE jobs for which the JMS will be happy running some work early.
     optional int32 min_ready_non_active_jobs_count = 29;
     // Don't batch a non-ACTIVE job if it's been delayed due to force batching attempts for
@@ -219,12 +202,8 @@
     // The maximum number of background jobs we allow when the system is in a
     // critical memory state.
     optional int32 bg_critical_job_count = 14;
-    // The maximum number of times we allow a job to have itself rescheduled
-    // before giving up on it, for standard jobs.
-    optional int32 max_standard_reschedule_count = 15;
-    // The maximum number of times we allow a job to have itself rescheduled
-    // before giving up on it, for jobs that are executing work.
-    optional int32 max_work_reschedule_count = 16;
+    reserved 15; // max_standard_reschedule_count
+    reserved 16; // max_work_reschedule_count
     // The minimum backoff time to allow for linear backoff.
     optional int64 min_linear_backoff_time_ms = 17;
     // The minimum backoff time to allow for exponential backoff.
diff --git a/core/proto/android/server/notificationhistory.proto b/core/proto/android/server/notificationhistory.proto
index 6749719..15f4abb 100644
--- a/core/proto/android/server/notificationhistory.proto
+++ b/core/proto/android/server/notificationhistory.proto
@@ -55,6 +55,11 @@
     // The small icon of the notification
     optional Icon icon = 12;
 
+    // The conversation id, if any, that this notification belongs to
+    optional string conversation_id = 13;
+    // conversation_id_index contains the index + 1 of the conversation id in the string pool
+    optional int32 conversation_id_index = 14;
+
     // Matches the constants of android.graphics.drawable.Icon
     enum ImageTypeEnum {
       TYPE_UNKNOWN = 0;
diff --git a/core/proto/android/server/peopleservice.proto b/core/proto/android/server/peopleservice.proto
new file mode 100644
index 0000000..e476c52
--- /dev/null
+++ b/core/proto/android/server/peopleservice.proto
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+
+syntax = "proto2";
+
+package com.android.server.people;
+
+option java_multiple_files = true;
+
+import "frameworks/base/core/proto/android/content/locusid.proto";
+
+// On disk data of conversation infos for a user and app package.
+message ConversationInfosProto {
+
+  // The series of conversation infos for a user and app package.
+  repeated ConversationInfoProto conversation_infos = 1;
+}
+
+// Individual conversation info (com.android.server.people.data.ConversationInfo) for a user
+// and app package.
+message ConversationInfoProto {
+
+  // The conversation's shortcut id.
+  optional string shortcut_id = 1;
+
+  // The conversation's locus id.
+  optional .android.content.LocusIdProto locus_id_proto = 2;
+
+  // The URI of the contact in the conversation.
+  optional string contact_uri = 3;
+
+  // The notification channel id of the conversation.
+  optional string notification_channel_id = 4;
+
+  // Integer representation of shortcut bit flags.
+  optional int32 shortcut_flags = 5;
+
+  // Integer representation of conversation bit flags.
+  optional int32 conversation_flags = 6;
+}
+
+// On disk data of events.
+message PeopleEventsProto {
+  repeated PeopleEventProto events = 1;
+}
+
+// Individual event (com.android.server.people.data.Event).
+message PeopleEventProto {
+
+  // For valid values, refer to java class documentation.
+  optional int32 event_type = 1;
+
+  optional int64 time = 2;
+
+  // The duration of the event. Should only be set for some event_types. Refer to java class
+  // documentation for details.
+  optional int32 duration = 3;
+}
+
+// On disk data of event indexes.
+message PeopleEventIndexesProto {
+  repeated TypedPeopleEventIndexProto typed_indexes = 1;
+}
+
+// Mapping of event_type to event index.
+message TypedPeopleEventIndexProto {
+  optional int32 event_type = 1;
+  optional PeopleEventIndexProto index = 2;
+}
+
+// Index of events' time distributions (com.android.server.people.data.EventIndex).
+message PeopleEventIndexProto {
+  // Each long value in event_bitmaps represents a time slot, there should be 4 values. Further
+  // details can be found in class documentation.
+  repeated int64 event_bitmaps = 1;
+
+  optional int64 last_updated_time = 2;
+}
+
diff --git a/core/proto/android/server/powermanagerservice.proto b/core/proto/android/server/powermanagerservice.proto
index c039570..6850d01 100644
--- a/core/proto/android/server/powermanagerservice.proto
+++ b/core/proto/android/server/powermanagerservice.proto
@@ -366,6 +366,15 @@
     // Whether battery level is low or not.
     optional bool is_battery_level_low = 8;
 
+    // Denotes which threshold should be used for automatic Battery Saver triggering.
+    enum AutomaticTriggerEnum {
+        TRIGGER_PERCENTAGE = 0;
+        TRIGGER_DYNAMIC = 1;
+    }
+    // The value of Global.AUTOMATIC_POWER_SAVE_MODE. This is a cached value, so it could
+    // be slightly different from what's in GlobalSettingsProto.DynamicPowerSavings.
+    optional AutomaticTriggerEnum setting_automatic_trigger = 19;
+
     // The value of Global.LOW_POWER_MODE. This is a cached value, so it could
     // be slightly different from what's in GlobalSettingsProto.LowPowerMode.
     optional bool setting_battery_saver_enabled = 9;
@@ -390,5 +399,18 @@
     // using elapsed realtime as the timebase.
     optional int64 last_adaptive_battery_saver_changed_externally_elapsed = 17;
 
-    // Next tag: 19
+    // The default disable threshold for Dynamic Power Savings enabled battery saver.
+    optional int32 default_dynamic_disable_threshold = 20;
+
+    // When to disable battery saver again if it was enabled due to an external suggestion.
+    // Corresponds to Global.DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD. This is a cached value,
+    // so it could be slightly different from what's in GlobalSettingsProto.DynamicPowerSavings.
+    optional int32 dynamic_disable_threshold = 21;
+
+    // Whether we've received a suggestion that battery saver should be on from an external app.
+    // Corresponds to Global.DYNAMIC_POWER_SAVINGS_ENABLED. This is a cached value, so it could
+    // be slightly different from what's in GlobalSettingsProto.DynamicPowerSavings.
+    optional bool dynamic_battery_saver_enabled = 22;
+
+    // Next tag: 23
 }
diff --git a/core/proto/android/server/windowmanagerservice.proto b/core/proto/android/server/windowmanagerservice.proto
index b0b9ce6f..08db454 100644
--- a/core/proto/android/server/windowmanagerservice.proto
+++ b/core/proto/android/server/windowmanagerservice.proto
@@ -275,6 +275,7 @@
     optional float adjust_divider_amount = 25;
     optional bool animating_bounds = 26;
     optional float minimize_amount = 27;
+    optional bool created_by_organizer = 28;
 }
 
 /* represents ActivityRecordProto */
diff --git a/core/proto/android/service/OWNERS b/core/proto/android/service/OWNERS
new file mode 100644
index 0000000..70cb50f
--- /dev/null
+++ b/core/proto/android/service/OWNERS
@@ -0,0 +1 @@
+per-file sensor_service.proto = arthuri@google.com, bduddie@google.com, stange@google.com
diff --git a/core/proto/android/service/graphicsstats.proto b/core/proto/android/service/graphicsstats.proto
index 2de5b7f..bb654f0 100644
--- a/core/proto/android/service/graphicsstats.proto
+++ b/core/proto/android/service/graphicsstats.proto
@@ -33,8 +33,9 @@
 
 message GraphicsStatsProto {
     enum PipelineType {
-        GL = 0;
-        VULKAN = 1;
+        UNKNOWN = 0;
+        GL = 1;
+        VULKAN = 2;
     }
     option (android.msg_privacy).dest = DEST_AUTOMATIC;
 
diff --git a/core/proto/android/service/sensor_service.proto b/core/proto/android/service/sensor_service.proto
index 8598f86..48f6670 100644
--- a/core/proto/android/service/sensor_service.proto
+++ b/core/proto/android/service/sensor_service.proto
@@ -39,7 +39,7 @@
         OP_MODE_RESTRICTED = 2;
         OP_MODE_DATA_INJECTION = 3;
     }
-
+    optional sint32 init_status = 16;
     optional int64 current_time_ms = 1;
     optional SensorDeviceProto sensor_device = 2;
     optional SensorListProto sensors = 3;
@@ -56,6 +56,8 @@
     repeated SensorEventConnectionProto active_connections = 13;
     repeated SensorDirectConnectionProto direct_connections = 14;
     repeated SensorRegistrationInfoProto previous_registrations = 15;
+
+    // Next tag: 17
 }
 
 // Proto dump of android::SensorDevice
diff --git a/core/proto/android/stats/devicepolicy/device_policy_enums.proto b/core/proto/android/stats/devicepolicy/device_policy_enums.proto
index 0f03e69..3d8108d 100644
--- a/core/proto/android/stats/devicepolicy/device_policy_enums.proto
+++ b/core/proto/android/stats/devicepolicy/device_policy_enums.proto
@@ -157,4 +157,33 @@
   SET_FACTORY_RESET_PROTECTION = 130;
   SET_COMMON_CRITERIA_MODE = 131;
   ALLOW_MODIFICATION_OF_ADMIN_CONFIGURED_NETWORKS = 132;
+  SET_TIME = 133;
+  SET_TIME_ZONE = 134;
+  SET_PERSONAL_APPS_SUSPENDED = 135;
+  SET_MANAGED_PROFILE_MAXIMUM_TIME_OFF = 136;
+  COMP_TO_ORG_OWNED_PO_MIGRATED = 137;
+  SET_CROSS_PROFILE_PACKAGES = 138;
+  SET_INTERACT_ACROSS_PROFILES_APP_OP = 139;
+  GET_CROSS_PROFILE_PACKAGES = 140;
+  CAN_REQUEST_INTERACT_ACROSS_PROFILES_TRUE = 141;
+  CAN_REQUEST_INTERACT_ACROSS_PROFILES_FALSE_NO_PROFILES = 142;
+  CAN_REQUEST_INTERACT_ACROSS_PROFILES_FALSE_WHITELIST = 143;
+  CAN_REQUEST_INTERACT_ACROSS_PROFILES_FALSE_PERMISSION = 144;
+  CAN_INTERACT_ACROSS_PROFILES_TRUE = 145;
+  CAN_INTERACT_ACROSS_PROFILES_FALSE_PERMISSION = 146;
+  CAN_INTERACT_ACROSS_PROFILES_FALSE_NO_PROFILES = 147;
+  CREATE_CROSS_PROFILE_INTENT = 148;
+  IS_MANAGED_PROFILE = 149;
+  START_ACTIVITY_BY_INTENT = 150;
+  BIND_CROSS_PROFILE_SERVICE = 151;
+  PROVISIONING_DPC_SETUP_STARTED = 152;
+  PROVISIONING_DPC_SETUP_COMPLETED = 153;
+  PROVISIONING_ORGANIZATION_OWNED_MANAGED_PROFILE = 154;
+  RESOLVER_CROSS_PROFILE_TARGET_OPENED = 155;
+  RESOLVER_SWITCH_TABS = 156;
+  RESOLVER_EMPTY_STATE_WORK_APPS_DISABLED = 157;
+  RESOLVER_EMPTY_STATE_NO_SHARING_TO_PERSONAL= 158;
+  RESOLVER_EMPTY_STATE_NO_SHARING_TO_WORK= 159;
+  RESOLVER_EMPTY_STATE_NO_APPS_RESOLVED= 160;
+  RESOLVER_AUTOLAUNCH_CROSS_PROFILE_TARGET = 161;
 }
diff --git a/core/proto/android/stats/mediametrics/mediametrics.proto b/core/proto/android/stats/mediametrics/mediametrics.proto
index 34ed90a..e1af962 100644
--- a/core/proto/android/stats/mediametrics/mediametrics.proto
+++ b/core/proto/android/stats/mediametrics/mediametrics.proto
@@ -154,6 +154,8 @@
     optional int64 latency_avg = 18;
     optional int64 latency_count = 19;
     optional int64 latency_unknown = 20;
+    optional int32 queue_input_buffer_error = 21;
+    optional int32 queue_secure_input_buffer_error = 22;
 }
 
 /**
diff --git a/core/res/Android.bp b/core/res/Android.bp
index 3dc74f8..b365de4 100644
--- a/core/res/Android.bp
+++ b/core/res/Android.bp
@@ -54,3 +54,22 @@
         "res/**/*",
     ],
 }
+
+// Generate a text file containing a list of permissions that non-system apps
+// are allowed to obtain.
+genrule {
+  name: "permission-list-normal",
+  out: ["permission-list-normal.txt"],
+  srcs: ["AndroidManifest.xml"],
+  cmd: "cat $(in) " +
+       // xmllint has trouble accessing attributes under the android namespace.
+       // Strip these prefixes prior to processing with xmllint.
+       " | sed -r 's/android:(name|protectionLevel)/\\1/g' " +
+       " | $(location xmllint) /dev/stdin --xpath " +
+       " '//permission[not(contains(@protectionLevel, \"signature\"))]/@name'" +
+       // The result of xmllint is name="value" pairs. Format these to just the
+       // permission name, one per-line.
+       " | sed -r 's/\\s*name=\\s*//g' | tr -d '\"'" +
+       " > $(out)",
+  tools: ["xmllint"]
+}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 32a6cc3..ddfc4b8 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -96,6 +96,7 @@
     <protected-broadcast android:name="android.intent.action.OVERLAY_PRIORITY_CHANGED" />
     <protected-broadcast android:name="android.intent.action.MY_PACKAGE_SUSPENDED" />
     <protected-broadcast android:name="android.intent.action.MY_PACKAGE_UNSUSPENDED" />
+    <protected-broadcast android:name="android.intent.action.LOAD_DATA" />
 
     <protected-broadcast android:name="android.os.action.POWER_SAVE_MODE_CHANGED" />
     <protected-broadcast android:name="android.os.action.POWER_SAVE_MODE_CHANGING" />
@@ -398,6 +399,9 @@
     <protected-broadcast android:name="android.intent.action.AIRPLANE_MODE" />
     <protected-broadcast android:name="android.intent.action.ADVANCED_SETTINGS" />
     <protected-broadcast android:name="android.intent.action.APPLICATION_RESTRICTIONS_CHANGED" />
+    <protected-broadcast android:name="com.android.server.adb.WIRELESS_DEBUG_PAIRED_DEVICES" />
+    <protected-broadcast android:name="com.android.server.adb.WIRELESS_DEBUG_PAIRING_RESULT" />
+    <protected-broadcast android:name="com.android.server.adb.WIRELESS_DEBUG_STATUS" />
 
     <!-- Legacy -->
     <protected-broadcast android:name="android.intent.action.ACTION_IDLE_MAINTENANCE_START" />
@@ -644,6 +648,9 @@
 
     <protected-broadcast android:name="android.intent.action.DEVICE_CUSTOMIZATION_READY" />
 
+    <!-- Added in R -->
+    <protected-broadcast android:name="android.app.action.RESET_PROTECTION_POLICY_CHANGED" />
+
     <!-- For tether entitlement recheck-->
     <protected-broadcast
         android:name="com.android.server.connectivity.tethering.PROVISIONING_RECHECK_ALARM" />
@@ -1196,6 +1203,15 @@
                 android:description="@string/permdesc_acceptHandovers"
                 android:protectionLevel="dangerous" />
 
+    <!-- Allows an application assigned to the Dialer role to be granted access to the telephony
+         call audio streams, both TX and RX.
+         <p>Protection level: signature|appop
+    -->
+    <permission android:name="android.permission.ACCESS_CALL_AUDIO"
+                android.label="@string/permlab_accessCallAudio"
+                android:description="@string/permdesc_accessCallAudio"
+                android:protectionLevel="signature|appop" />
+
     <!-- ====================================================================== -->
     <!-- Permissions for accessing the device microphone                        -->
     <!-- ====================================================================== -->
@@ -1535,7 +1551,7 @@
          @hide
     -->
     <permission android:name="android.permission.ACCESS_CONTEXT_HUB"
-        android:protectionLevel="signature" />
+        android:protectionLevel="signature|privileged" />
     <uses-permission android:name="android.permission.ACCESS_CONTEXT_HUB"/>
 
     <!-- @SystemApi Allows an application to create mock location providers for testing.
@@ -1639,7 +1655,7 @@
 
     <!-- Allows network stack services (Connectivity and Wifi) to coordinate
          <p>Not for use by third-party or privileged applications.
-         @SystemApi
+         @SystemApi @TestApi
          @hide This should only be used by Connectivity and Wifi Services.
     -->
     <permission android:name="android.permission.NETWORK_STACK"
@@ -1655,7 +1671,7 @@
 
     <!-- Allows Settings and SystemUI to call methods in Networking services
          <p>Not for use by third-party or privileged applications.
-         @SystemApi
+         @SystemApi @TestApi
          @hide This should only be used by Settings and SystemUI.
     -->
     <permission android:name="android.permission.NETWORK_SETTINGS"
@@ -1911,6 +1927,15 @@
     <permission android:name="android.permission.VIBRATE_ALWAYS_ON"
         android:protectionLevel="signature" />
 
+    <!-- @SystemApi Allows access to the vibrator state.
+         <p>Protection level: signature
+         @hide
+    -->
+    <permission android:name="android.permission.ACCESS_VIBRATOR_STATE"
+        android:label="@string/permdesc_vibrator_state"
+        android:description="@string/permdesc_vibrator_state"
+        android:protectionLevel="signature|privileged" />
+
     <!-- Allows using PowerManager WakeLocks to keep processor from sleeping or screen
          from dimming.
          <p>Protection level: normal
@@ -1941,6 +1966,18 @@
         android:description="@string/permdesc_modifyAudioSettings"
         android:protectionLevel="normal" />
 
+    <!-- ======================================== -->
+    <!-- Permissions for factory reset protection -->
+    <!-- ======================================== -->
+    <eat-comment />
+
+    <!-- @SystemApi Allows an application to set a factory reset protection (FRP) policy.
+         <p>Not for use by third-party applications.
+         @hide
+    -->
+    <permission android:name="android.permission.MANAGE_FACTORY_RESET_PROTECTION"
+        android:protectionLevel="signature|privileged"/>
+
     <!-- ================================== -->
     <!-- Permissions for accessing hardware -->
     <!-- ================================== -->
@@ -1998,17 +2035,17 @@
     <permission android:name="android.permission.REMOTE_AUDIO_PLAYBACK"
         android:protectionLevel="signature" />
 
-    <!-- @SystemApi Allows TvInputService to access underlying TV input hardware such as
+    <!-- Allows TvInputService to access underlying TV input hardware such as
          built-in tuners and HDMI-in's.
-         @hide This should only be used by OEM's TvInputService's.
-    -->
+         <p>This should only be used by OEM's TvInputService's.
+         @hide @SystemApi -->
     <permission android:name="android.permission.TV_INPUT_HARDWARE"
         android:protectionLevel="signature|privileged|vendorPrivileged" />
 
-    <!-- @SystemApi Allows to capture a frame of TV input hardware such as
+    <!-- Allows to capture a frame of TV input hardware such as
          built-in tuners and HDMI-in's.
-         @hide <p>Not for use by third-party applications.
-    -->
+         <p>Not for use by third-party applications.
+         @hide @SystemApi -->
     <permission android:name="android.permission.CAPTURE_TV_INPUT"
         android:protectionLevel="signature|privileged" />
 
@@ -2376,11 +2413,18 @@
          @hide -->
     <permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
         android:protectionLevel="signature|installer|telephony" />
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
 
     <!-- Allows interaction across profiles in the same profile group. -->
     <permission android:name="android.permission.INTERACT_ACROSS_PROFILES"
         android:protectionLevel="signature|appop|documenter|wellbeing" />
 
+    <!-- Allows configuring apps to have the INTERACT_ACROSS_PROFILES permission so that they can
+         interact across profiles in the same profile group.
+         @hide -->
+    <permission android:name="android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES"
+        android:protectionLevel="signature" />
+
     <!-- @SystemApi @hide Allows an application to call APIs that allow it to query and manage
          users on the device. This permission is not available to
          third party applications. -->
@@ -2730,7 +2774,7 @@
     <permission android:name="android.permission.READ_DEVICE_CONFIG"
         android:protectionLevel="signature|preinstalled" />
 
-    <!-- @SystemApi @hide Allows an application to monitor config settings access.
+    <!-- @hide Allows an application to monitor {@link android.provider.Settings.Config} access.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.MONITOR_DEVICE_CONFIG_ACCESS"
         android:protectionLevel="signature"/>
@@ -3433,10 +3477,10 @@
     <permission android:name="android.permission.READ_CONTENT_RATING_SYSTEMS"
         android:protectionLevel="signature|privileged" />
 
-    <!-- @SystemApi Allows an application to notify TV inputs by sending broadcasts.
+    <!-- Allows an application to notify TV inputs by sending broadcasts.
          <p>Protection level: signature|privileged
          <p>Not for use by third-party applications.
-         @hide -->
+         @hide @SystemApi -->
     <permission android:name="android.permission.NOTIFY_TV_INPUTS"
          android:protectionLevel="signature|privileged" />
 
@@ -3450,11 +3494,11 @@
 
     <!-- This permission is required by Media Resource Manager Service when
          accessing its overridePid Api.
-         <p>Protection level: signature|privileged
+         <p>Protection level: signature
          <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.MEDIA_RESOURCE_OVERRIDE_PID"
-         android:protectionLevel="signature|privileged" />
+         android:protectionLevel="signature" />
 
     <!-- Must be required by a {@link android.media.routing.MediaRouteService}
          to ensure that only the system can interact with it.
@@ -4030,6 +4074,15 @@
         android:protectionLevel="signature|privileged|development|appop|retailDemo" />
     <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
 
+    <!-- Allows a data loader to read a package's access logs. The access logs contain the
+         set of pages referenced over time.
+         <p>Declaring the permission implies intention to use the API and the user of the
+         device can grant permission through the Settings application.
+         <p>Protection level: signature|privileged|appop -->
+    <permission android:name="android.permission.LOADER_USAGE_STATS"
+        android:protectionLevel="signature|privileged|appop" />
+    <uses-permission android:name="android.permission.LOADER_USAGE_STATS" />
+
     <!-- @hide @SystemApi Allows an application to observe usage time of apps. The app can register
          for callbacks when apps reach a certain usage time limit, etc. -->
     <permission android:name="android.permission.OBSERVE_APP_USAGE"
@@ -4915,7 +4968,17 @@
          <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.ACCESS_TV_TUNER"
-        android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged|vendorPrivileged" />
+
+    <!-- @SystemApi Allows an application to access descrambler of TV tuner HAL
+         <p>Not for use by third-party applications.
+         @hide -->
+    <permission android:name="android.permission.ACCESS_TV_DESCRAMBLER"
+        android:protectionLevel="signature|privileged|vendorPrivileged" />
+
+    <!-- @hide @SystemApi Allows an application to access locusId events in the usage stats. -->
+    <permission android:name="android.permission.ACCESS_LOCUS_ID_USAGE_STATS"
+                android:protectionLevel="signature|appPredictor" />
 
     <application android:process="system"
                  android:persistent="true"
@@ -5314,6 +5377,10 @@
                  android:permission="android.permission.BIND_JOB_SERVICE" >
         </service>
 
+        <service android:name="com.android.server.people.data.DataMaintenanceService"
+                 android:permission="android.permission.BIND_JOB_SERVICE" >
+        </service>
+
         <service
                 android:name="com.android.server.autofill.AutofillCompatAccessibilityService"
                 android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
diff --git a/core/res/res/drawable-nodpi/platlogo.xml b/core/res/res/drawable-nodpi/platlogo.xml
index 46e8f64..b01eb39 100644
--- a/core/res/res/drawable-nodpi/platlogo.xml
+++ b/core/res/res/drawable-nodpi/platlogo.xml
@@ -1,31 +1,50 @@
-<!--
-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.
--->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="240dp"
-    android:height="240dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
+    android:width="512dp"
+    android:height="512dp"
+    android:viewportWidth="512"
+    android:viewportHeight="512">
     <path
-        android:fillColor="#000"
-        android:pathData="M16 4c-2.2 0-4 1.8-4 4v4H4V8c0-2.2 1.8-4 4-4h8z"/>
+        android:fillColor="#F86734"
+        android:pathData="M416.23 236.62h-10.67c-1.46 0-2.65-1.19-2.65-2.65v-9.85c0-1.47 1.19-2.65 2.65-2.65h23.37c1.47 0 2.66 1.19 2.66 2.65v66.9c0 1.46-1.2 2.65-2.66 2.65H418.9c-1.47 0-2.66-1.19-2.66-2.65v-54.4z"/>
     <path
-        android:fillColor="#000"
-        android:pathData="M8 20c2.2 0 4-1.8 4-4v-4H4v8h4z"/>
+        android:fillColor="#F86734"
+        android:pathData="M455.51 236.62h-10.67c-1.47 0-2.65-1.19-2.65-2.65v-9.85c0-1.47 1.18-2.65 2.65-2.65h23.37c1.47 0 2.66 1.19 2.66 2.65v66.9c0 1.46-1.2 2.65-2.66 2.65h-10.05c-1.46 0-2.65-1.19-2.65-2.65v-54.4z"/>
     <path
-        android:fillColor="#80000000"
-        android:pathData="M16 12c2.2 0 4-1.8 4-4V4h-8v8h4z"/>
+        android:fillColor="#D6F0FF"
+        android:pathData="M364.12 400.25a4.34 4.34 0 1 0 0 8.68a4.34 4.34 0 1 0 0-8.68z"/>
+    <path
+        android:fillColor="#D6F0FF"
+        android:pathData="M275.46 433.53a4.84 4.84 0 1 0 0 9.68a4.84 4.84 0 1 0 0-9.68z"/>
+    <path
+        android:fillColor="#D6F0FF"
+        android:pathData="M184.52 418.83a5.36 5.36 0 1 0 0 10.72a5.36 5.36 0 1 0 0-10.72z"/>
+    <path
+        android:fillColor="#D6F0FF"
+        android:pathData="M110.42 359.19a5.89 5.89 0 1 0 0 11.78a5.89 5.89 0 1 0 0-11.78z"/>
+    <path
+        android:fillColor="#D6F0FF"
+        android:pathData="M75.94 270.17a6.43 6.43 0 1 0 0 12.86a6.43 6.43 0 1 0 0-12.86z"/>
+    <path
+        android:fillColor="#D6F0FF"
+        android:pathData="M89.48 178.57a6.98 6.98 0 1 0 0 13.96a6.98 6.98 0 1 0 0-13.96z"/>
+    <path
+        android:fillColor="#D6F0FF"
+        android:pathData="M147.97 103.54a7.54 7.54 0 1 0 0 15.08a7.54 7.54 0 1 0 0-15.08z"/>
+    <path
+        android:fillColor="#D6F0FF"
+        android:pathData="M236.63 66.7a8.1 8.1 0 1 0 0 16.2a8.1 8.1 0 1 0 0-16.2z"/>
+    <path
+        android:fillColor="#D6F0FF"
+        android:pathData="M327.09 78.3a8.66 8.66 0 1 0 0 17.32a8.66 8.66 0 1 0 0-17.32z"/>
+    <path
+        android:fillColor="#D6F0FF"
+        android:pathData="M401.05 136.97a9.22 9.22 0 1 0 0 18.44a9.22 9.22 0 1 0 0-18.44z"/>
+    <group>
+        <path
+            android:fillColor="#3DDB85"
+            android:pathData="M255.45 129.46a128.11 128.11 0 1 0 0 256.22a128.11 128.11 0 1 0 0-256.22z"/>
+        <path
+            android:fillColor="#FFF"
+            android:pathData="M339.23 236.09a21.48 21.48 0 1 0 0 42.96a21.48 21.48 0 1 0 0-42.96z"/>
+    </group>
 </vector>
-
diff --git a/core/res/res/drawable-nodpi/stat_sys_adb.xml b/core/res/res/drawable-nodpi/stat_sys_adb.xml
index 0e9aab2..700781b 100644
--- a/core/res/res/drawable-nodpi/stat_sys_adb.xml
+++ b/core/res/res/drawable-nodpi/stat_sys_adb.xml
@@ -1,17 +1,17 @@
-<!--
-Copyright (C) 2020 The Android Open Source Project
+<?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
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
 
-         http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
     android:width="24dp"
@@ -19,12 +19,22 @@
     android:viewportWidth="24"
     android:viewportHeight="24">
     <path
-        android:fillColor="#000"
-        android:pathData="M16 4c-2.2 0-4 1.8-4 4v4H4V8c0-2.2 1.8-4 4-4h8z"/>
-    <path
-        android:fillColor="#000"
-        android:pathData="M8 20c2.2 0 4-1.8 4-4v-4H4v8h4z"/>
-    <path
-        android:fillColor="#80000000"
-        android:pathData="M16 12c2.2 0 4-1.8 4-4V4h-8v8h4z"/>
+        android:fillColor="#FFFFFF"
+        android:pathData="
+M 12,1
+A 11 11 0 0 0 1,12
+A 11 11 0 1 0 12,1
+Z
+
+M 12.5,8
+a 3,3 0 0 1 6,0
+a 3,3 0 0 1 -6,0
+Z
+
+M 5.5,8
+a 3,3 0 0 1 6,0
+l 0,8
+a 3,3 0 0 1 -6,0
+Z
+"/>
 </vector>
diff --git a/core/res/res/drawable/ic_no_apps.xml b/core/res/res/drawable/ic_no_apps.xml
new file mode 100644
index 0000000..4d296bd
--- /dev/null
+++ b/core/res/res/drawable/ic_no_apps.xml
@@ -0,0 +1,4 @@
+<vector android:height="32dp" android:viewportHeight="24"
+    android:viewportWidth="24" android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@color/resolver_empty_state_icon" android:fillType="evenOdd" android:pathData="M18.8123,20.0145L21.3999,22.6021L22.602,21.4L2.602,1.4L1.3999,2.6021L3.9873,5.1895C3.6248,5.552 3.3998,6.052 3.3998,6.602C3.3998,7.702 4.2998,8.602 5.3998,8.602C5.9498,8.602 6.4498,8.377 6.8123,8.0145L9.9873,11.1895C9.6248,11.552 9.3998,12.052 9.3998,12.602C9.3998,13.702 10.2998,14.602 11.3998,14.602C11.9498,14.602 12.4498,14.377 12.8123,14.0145L15.9873,17.1895C15.6248,17.552 15.3998,18.052 15.3998,18.602C15.3998,19.702 16.2998,20.602 17.3998,20.602C17.9498,20.602 18.4498,20.377 18.8123,20.0145ZM17.3998,8.602C16.2998,8.602 15.3998,7.7021 15.3998,6.602C15.3998,5.502 16.2998,4.602 17.3998,4.602C18.4998,4.602 19.3998,5.502 19.3998,6.602C19.3998,7.7021 18.4998,8.602 17.3998,8.602ZM5.3998,14.6021C6.4998,14.6021 7.3998,13.7021 7.3998,12.6021C7.3998,11.5021 6.4998,10.6021 5.3998,10.6021C4.2998,10.6021 3.3998,11.5021 3.3998,12.6021C3.3998,13.7021 4.2998,14.6021 5.3998,14.6021ZM7.3998,18.6021C7.3998,19.7021 6.4998,20.6021 5.3998,20.6021C4.2998,20.6021 3.3998,19.7021 3.3998,18.6021C3.3998,17.5021 4.2998,16.6021 5.3998,16.6021C6.4998,16.6021 7.3998,17.5021 7.3998,18.6021ZM13.3998,18.6021C13.3998,19.7021 12.4998,20.6021 11.3998,20.6021C10.2998,20.6021 9.3998,19.7021 9.3998,18.6021C9.3998,17.5021 10.2998,16.6021 11.3998,16.6021C12.4998,16.6021 13.3998,17.5021 13.3998,18.6021ZM13.3999,6.602C13.3999,7.547 12.7357,8.3444 11.8511,8.5504L9.4516,6.1509C9.6576,5.2663 10.4549,4.602 11.3999,4.602C12.4999,4.602 13.3999,5.502 13.3999,6.602ZM17.8511,14.5504C18.7357,14.3444 19.3999,13.547 19.3999,12.6021C19.3999,11.5021 18.4999,10.6021 17.3999,10.6021C16.4549,10.6021 15.6576,11.2663 15.4516,12.1509L17.8511,14.5504Z"/>
+</vector>
diff --git a/core/res/res/drawable/ic_sharing_disabled.xml b/core/res/res/drawable/ic_sharing_disabled.xml
new file mode 100644
index 0000000..d488cdb
--- /dev/null
+++ b/core/res/res/drawable/ic_sharing_disabled.xml
@@ -0,0 +1,4 @@
+<vector android:height="32dp" android:viewportHeight="24"
+    android:viewportWidth="24" android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@color/resolver_empty_state_icon" android:fillType="evenOdd" android:pathData="M19.7225,20.9245L21.2011,22.4031L22.4032,21.201L2.8022,1.6L1.6001,2.8021L8.1265,9.3284L7.64,9.612C7.1,9.112 6.39,8.802 5.6,8.802C3.94,8.802 2.6,10.142 2.6,11.802C2.6,13.462 3.94,14.802 5.6,14.802C6.39,14.802 7.1,14.492 7.64,13.992L14.69,18.112C14.64,18.332 14.6,18.562 14.6,18.802C14.6,20.462 15.94,21.802 17.6,21.802C18.43,21.802 19.18,21.467 19.7225,20.9245ZM16.8938,18.0958L18.3063,19.5083C18.125,19.6895 17.875,19.802 17.6,19.802C17.05,19.802 16.6,19.352 16.6,18.802C16.6,18.527 16.7125,18.277 16.8938,18.0958ZM15.1871,16.3891L9.3881,10.5901L8.51,11.102C8.56,11.332 8.6,11.562 8.6,11.802C8.6,12.042 8.56,12.272 8.51,12.502L15.1871,16.3891ZM15.56,6.992L12.4382,8.8119L11.1766,7.5503L14.69,5.502C14.64,5.282 14.6,5.042 14.6,4.802C14.6,3.142 15.94,1.802 17.6,1.802C19.26,1.802 20.6,3.142 20.6,4.802C20.6,6.462 19.26,7.802 17.6,7.802C16.81,7.802 16.09,7.492 15.56,6.992ZM18.6,4.802C18.6,4.252 18.15,3.802 17.6,3.802C17.05,3.802 16.6,4.252 16.6,4.802C16.6,5.352 17.05,5.802 17.6,5.802C18.15,5.802 18.6,5.352 18.6,4.802ZM5.6,12.802C5.05,12.802 4.6,12.352 4.6,11.802C4.6,11.252 5.05,10.802 5.6,10.802C6.15,10.802 6.6,11.252 6.6,11.802C6.6,12.352 6.15,12.802 5.6,12.802Z"/>
+</vector>
diff --git a/core/res/res/drawable/ic_work_apps_off.xml b/core/res/res/drawable/ic_work_apps_off.xml
new file mode 100644
index 0000000..f62eb27
--- /dev/null
+++ b/core/res/res/drawable/ic_work_apps_off.xml
@@ -0,0 +1,4 @@
+<vector android:height="32dp" android:viewportHeight="24.0"
+    android:viewportWidth="24.0" android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@color/resolver_empty_state_icon" android:pathData="M20,6h-4L16,4c0,-1.11 -0.89,-2 -2,-2h-4c-1.11,0 -2,0.89 -2,2v1.17L10.83,8L20,8v9.17l1.98,1.98c0,-0.05 0.02,-0.1 0.02,-0.16L22,8c0,-1.11 -0.89,-2 -2,-2zM14,6h-4L10,4h4v2zM19,19L8,8 6,6 2.81,2.81 1.39,4.22 3.3,6.13C2.54,6.41 2.01,7.14 2.01,8L2,19c0,1.11 0.89,2 2,2h14.17l1.61,1.61 1.41,-1.41 -0.37,-0.37L19,19zM4,19L4,8h1.17l11,11L4,19z"/>
+</vector>
\ No newline at end of file
diff --git a/core/res/res/drawable/tab_indicator_resolver.xml b/core/res/res/drawable/tab_indicator_resolver.xml
new file mode 100644
index 0000000..ff16d81a
--- /dev/null
+++ b/core/res/res/drawable/tab_indicator_resolver.xml
@@ -0,0 +1,35 @@
+<?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.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
+            android:paddingMode="nest">
+    <item>
+        <ripple android:color="@color/tab_highlight_material">
+            <item android:id="@id/mask">
+                <color android:color="@color/white" />
+            </item>
+        </ripple>
+    </item>
+    <item android:gravity="bottom">
+        <shape android:shape="rectangle"
+               android:tint="@color/resolver_tabs_active_color">
+            <size android:height="2dp" />
+            <solid android:color="@color/tab_indicator_material" />
+        </shape>
+    </item>
+    <item android:bottom="2dp"
+          android:drawable="@color/transparent" />
+</layer-list>
diff --git a/core/res/res/layout/accessibility_button_chooser_item.xml b/core/res/res/layout/accessibility_button_chooser_item.xml
index d6fd7aa..d19e313 100644
--- a/core/res/res/layout/accessibility_button_chooser_item.xml
+++ b/core/res/res/layout/accessibility_button_chooser_item.xml
@@ -20,7 +20,6 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:clickable="true"
     android:gravity="center"
     android:paddingStart="16dp"
     android:paddingEnd="16dp"
diff --git a/core/res/res/layout/autofill_inline_suggestion.xml b/core/res/res/layout/autofill_inline_suggestion.xml
deleted file mode 100644
index 27faea4..0000000
--- a/core/res/res/layout/autofill_inline_suggestion.xml
+++ /dev/null
@@ -1,69 +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"
-    style="?android:attr/autofillInlineSuggestionChip"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:gravity="center"
-    android:paddingTop="4dp"
-    android:paddingBottom="4dp"
-    android:orientation="horizontal">
-
-    <ImageView
-        android:id="@+id/autofill_inline_suggestion_start_icon"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        android:layout_gravity="center"
-        android:scaleType="fitCenter"
-        android:contentDescription="autofill_inline_suggestion_start_icon" />
-
-    <LinearLayout
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:layout_gravity="center"
-        android:layout_weight="1"
-        android:paddingStart="4dp"
-        android:paddingEnd="4dp"
-        android:orientation="vertical"
-        android:gravity="center">
-
-        <TextView
-            style="?android:attr/autofillInlineSuggestionTitle"
-            android:id="@+id/autofill_inline_suggestion_title"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:ellipsize="end"
-            android:maxLines="1"/>
-
-        <TextView
-            style="?android:attr/autofillInlineSuggestionSubtitle"
-            android:id="@+id/autofill_inline_suggestion_subtitle"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:ellipsize="end"
-            android:maxLines="1"/>
-    </LinearLayout>
-
-    <ImageView
-        android:id="@+id/autofill_inline_suggestion_end_icon"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        android:layout_gravity="center"
-        android:scaleType="fitCenter"
-        android:contentDescription="autofill_inline_suggestion_end_icon" />
-</LinearLayout>
diff --git a/core/res/res/layout/car_user_switching_dialog.xml b/core/res/res/layout/car_user_switching_dialog.xml
index 7ce35df..d727434 100644
--- a/core/res/res/layout/car_user_switching_dialog.xml
+++ b/core/res/res/layout/car_user_switching_dialog.xml
@@ -16,25 +16,22 @@
 -->
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:fitsSystemWindows="true"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    >
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
 
   <ImageView
       android:id="@+id/user_loading_avatar"
       android:layout_width="@dimen/car_fullscreen_user_pod_image_avatar_width"
       android:layout_height="@dimen/car_fullscreen_user_pod_image_avatar_height"
-      android:layout_centerHorizontal="true"
-  />
+      android:layout_centerHorizontal="true"/>
 
   <TextView android:id="@+id/user_loading"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_marginTop="@dimen/car_padding_4"
       android:textSize="@dimen/car_body1_size"
-      android:textColor="@color/car_body1_light"
+      android:textColor="@color/car_body1"
       android:layout_below="@id/user_loading_avatar"
-      android:gravity="center"
-  />
+      android:gravity="center"/>
 
 </RelativeLayout>
\ No newline at end of file
diff --git a/core/res/res/layout/chooser_grid.xml b/core/res/res/layout/chooser_grid.xml
index 4e8a41f..c0de693 100644
--- a/core/res/res/layout/chooser_grid.xml
+++ b/core/res/res/layout/chooser_grid.xml
@@ -75,8 +75,17 @@
             <TabWidget
                 android:id="@android:id/tabs"
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content">
+                android:layout_height="wrap_content"
+                android:visibility="gone">
             </TabWidget>
+            <View
+                android:id="@+id/resolver_tab_divider"
+                android:visibility="gone"
+                android:layout_alwaysShow="true"
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="?attr/colorBackgroundFloating"
+                android:foreground="?attr/dividerVertical" />
             <FrameLayout
                 android:id="@android:id/tabcontent"
                 android:layout_width="match_parent"
@@ -89,15 +98,4 @@
         </LinearLayout>
     </TabHost>
 
-    <TextView android:id="@+id/empty"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content"
-              android:layout_alwaysShow="true"
-              android:background="?attr/colorBackgroundFloating"
-              android:text="@string/noApplications"
-              android:padding="@dimen/chooser_edge_margin_normal"
-              android:gravity="center"
-              android:elevation="1dp"
-              android:visibility="gone"/>
-
 </com.android.internal.widget.ResolverDrawerLayout>
diff --git a/core/res/res/layout/chooser_list_per_profile.xml b/core/res/res/layout/chooser_list_per_profile.xml
index 212813f..38b1b52 100644
--- a/core/res/res/layout/chooser_list_per_profile.xml
+++ b/core/res/res/layout/chooser_list_per_profile.xml
@@ -13,15 +13,21 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-
-<com.android.internal.widget.RecyclerView
+<RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:layoutManager="com.android.internal.widget.GridLayoutManager"
-    android:id="@+id/resolver_list"
-    android:clipToPadding="false"
-    android:background="?attr/colorBackgroundFloating"
-    android:scrollbars="none"
-    android:elevation="1dp"
-    android:nestedScrollingEnabled="true"/>
\ No newline at end of file
+    android:layout_marginTop="8dp">
+    <com.android.internal.widget.RecyclerView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layoutManager="com.android.internal.widget.GridLayoutManager"
+        android:id="@+id/resolver_list"
+        android:clipToPadding="false"
+        android:background="?attr/colorBackgroundFloating"
+        android:scrollbars="none"
+        android:elevation="1dp"
+        android:nestedScrollingEnabled="true" />
+
+    <include layout="@layout/resolver_empty_states" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/core/res/res/layout/resolve_grid_item.xml b/core/res/res/layout/resolve_grid_item.xml
index 7098c95..9aecfd9 100644
--- a/core/res/res/layout/resolve_grid_item.xml
+++ b/core/res/res/layout/resolve_grid_item.xml
@@ -30,8 +30,8 @@
               android:background="?attr/selectableItemBackgroundBorderless">
 
     <ImageView android:id="@+id/icon"
-               android:layout_width="@dimen/resolver_icon_size"
-               android:layout_height="@dimen/resolver_icon_size"
+               android:layout_width="@dimen/chooser_icon_size"
+               android:layout_height="@dimen/chooser_icon_size"
                android:scaleType="fitCenter" />
 
     <!-- Size manually tuned to match specs -->
diff --git a/core/res/res/layout/resolver_empty_states.xml b/core/res/res/layout/resolver_empty_states.xml
new file mode 100644
index 0000000..5ed4c53
--- /dev/null
+++ b/core/res/res/layout/resolver_empty_states.xml
@@ -0,0 +1,58 @@
+<!--
+  ~ 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/resolver_empty_state"
+    android:layout_width="match_parent"
+    android:layout_height="@dimen/resolver_empty_state_height"
+    android:orientation="vertical"
+    android:layout_centerInParent="true"
+    android:gravity="center"
+    android:visibility="gone"
+    android:paddingStart="24dp"
+    android:paddingEnd="24dp">
+    <ImageView
+        android:id="@+id/resolver_empty_state_icon"
+        android:layout_width="32dp"
+        android:layout_height="32dp"/>
+    <TextView
+        android:id="@+id/resolver_empty_state_title"
+        android:layout_marginTop="16dp"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:fontFamily="@string/config_headlineFontFamilyMedium"
+        android:textColor="@color/resolver_empty_state_text"
+        android:textSize="18sp"/>
+    <TextView
+        android:id="@+id/resolver_empty_state_subtitle"
+        android:layout_marginTop="8dp"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textColor="@color/resolver_empty_state_text"
+        android:textSize="14sp"
+        android:gravity="center_horizontal" />
+    <Button
+        android:id="@+id/resolver_empty_state_button"
+        android:layout_marginTop="24dp"
+        android:text="@string/resolver_switch_on_work"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:background="@null"
+        android:fontFamily="@string/config_headlineFontFamilyMedium"
+        android:textSize="14sp"
+        android:textColor="@color/resolver_tabs_active_color"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/core/res/res/layout/resolver_list.xml b/core/res/res/layout/resolver_list.xml
index 757cd53..4359b10 100644
--- a/core/res/res/layout/resolver_list.xml
+++ b/core/res/res/layout/resolver_list.xml
@@ -91,8 +91,16 @@
             <TabWidget
                 android:id="@android:id/tabs"
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content">
+                android:layout_height="wrap_content"
+                android:visibility="gone">
             </TabWidget>
+            <View
+                android:id="@+id/resolver_tab_divider"
+                android:visibility="gone"
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="?attr/colorBackgroundFloating"
+                android:foreground="?attr/dividerVertical" />
             <FrameLayout
                 android:id="@android:id/tabcontent"
                 android:layout_width="match_parent"
@@ -101,10 +109,7 @@
                     android:id="@+id/profile_pager"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:divider="?attr/dividerVertical"
-                    android:footerDividersEnabled="false"
-                    android:headerDividersEnabled="false"
-                    android:dividerHeight="1dp"/>
+                    android:minHeight="@dimen/resolver_empty_state_height" />
             </FrameLayout>
         </LinearLayout>
     </TabHost>
@@ -116,17 +121,6 @@
         android:background="?attr/colorBackgroundFloating"
         android:foreground="?attr/dividerVertical" />
 
-    <TextView android:id="@+id/empty"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content"
-              android:background="?attr/colorBackgroundFloating"
-              android:elevation="@dimen/resolver_elevation"
-              android:layout_alwaysShow="true"
-              android:text="@string/noApplications"
-              android:padding="32dp"
-              android:gravity="center"
-              android:visibility="gone" />
-
     <LinearLayout
         android:id="@+id/button_bar"
         android:visibility="gone"
diff --git a/core/res/res/layout/resolver_list_per_profile.xml b/core/res/res/layout/resolver_list_per_profile.xml
index 6d8d348..c4f9ed9 100644
--- a/core/res/res/layout/resolver_list_per_profile.xml
+++ b/core/res/res/layout/resolver_list_per_profile.xml
@@ -14,18 +14,25 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<ListView
+<RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:id="@+id/resolver_list"
-    android:clipToPadding="false"
-    android:background="?attr/colorBackgroundFloating"
-    android:elevation="@dimen/resolver_elevation"
-    android:nestedScrollingEnabled="true"
-    android:scrollbarStyle="outsideOverlay"
-    android:scrollIndicators="top|bottom"
-    android:divider="@null"
-    android:footerDividersEnabled="false"
-    android:headerDividersEnabled="false"
-    android:dividerHeight="0dp" />
\ No newline at end of file
+    android:layout_height="match_parent"
+    android:layout_marginTop="8dp">
+    <ListView
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/resolver_list"
+        android:clipToPadding="false"
+        android:background="?attr/colorBackgroundFloating"
+        android:elevation="@dimen/resolver_elevation"
+        android:nestedScrollingEnabled="true"
+        android:scrollbarStyle="outsideOverlay"
+        android:divider="@null"
+        android:footerDividersEnabled="false"
+        android:headerDividersEnabled="false"
+        android:dividerHeight="0dp" />
+
+    <include layout="@layout/resolver_empty_states" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/core/res/res/layout/resolver_list_with_default.xml b/core/res/res/layout/resolver_list_with_default.xml
index b546738..72e8b0c 100644
--- a/core/res/res/layout/resolver_list_with_default.xml
+++ b/core/res/res/layout/resolver_list_with_default.xml
@@ -175,6 +175,14 @@
                 android:layout_height="wrap_content"
                 android:visibility="gone">
             </TabWidget>
+            <View
+                android:id="@+id/resolver_tab_divider"
+                android:visibility="gone"
+                android:layout_alwaysShow="true"
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="?attr/colorBackgroundFloating"
+                android:foreground="?attr/dividerVertical" />
             <FrameLayout
                 android:id="@android:id/tabcontent"
                 android:layout_width="match_parent"
@@ -183,10 +191,7 @@
                     android:id="@+id/profile_pager"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:dividerHeight="1dp"
-                    android:divider="?attr/dividerVertical"
-                    android:footerDividersEnabled="false"
-                    android:headerDividersEnabled="false"/>
+                    android:minHeight="@dimen/resolver_empty_state_height" />
             </FrameLayout>
         </LinearLayout>
     </TabHost>
diff --git a/core/res/res/layout/tab_indicator_resolver.xml b/core/res/res/layout/tab_indicator_resolver.xml
new file mode 100644
index 0000000..2038da6
--- /dev/null
+++ b/core/res/res/layout/tab_indicator_resolver.xml
@@ -0,0 +1,38 @@
+<?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_height="?android:attr/actionBarSize"
+    android:orientation="horizontal"
+    style="@android:style/Widget.Material.Resolver.Tab">
+
+    <ImageView
+        android:id="@android:id/icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:visibility="gone" />
+
+    <TextView
+        android:id="@android:id/title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:textAllCaps="false"
+        style="@android:style/Widget.Material.TabText" />
+
+</LinearLayout>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index d6c5a13..2e93904 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administrateur het toestel vir persoonlike gebruik afgestaan"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Toestel word bestuur"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Jou organisasie bestuur hierdie toestel en kan netwerkverkeer monitor. Tik vir besonderhede."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Ligginginstellings is deur jou administrateur verander"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Tik om jou ligginginstellings te sien."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Jou toestel sal uitgevee word"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Die administrasieprogram kan nie gebruik word nie. Jou toestel sal nou uitgevee word.\n\nKontak jou organisasie se administrateur as jy vrae het."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Druk is gedeaktiveer deur <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Hierdie bevoorregte | stelselprogram kan enige tyd met \'n stelselkamera foto\'s neem en video\'s opneem. Vereis dat die program ook die android.permission.CAMERA-toestemming het"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"beheer vibrasie"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"toegang tot kitsboodskapoproepdiens"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Probeer weer."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Geen vingerafdrukke is geregistreer nie."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Hierdie toetstel het nie \'n vingerafdruksensor nie."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Vinger <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Kan nie gesig verifieer nie. Probeer weer."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Jy het nie gesigslot opgestel nie."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Gesigslot word nie op hierdie toestel gesteun nie."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Gesig <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Die voorgronddiens wat in die agtergrond begin het vanaf <xliff:g id="PACKAGENAME">%1$s</xliff:g> sal nie ingebruik-toestemming hê in toekomstige R-bouweergawes nie. Raadpleeg asseblief go/r-bg-fgs-restriction en dien \'n foutverslag in."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Gebruik toeganklikheidkortpad?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Wanneer die kortpad aan is, sal \'n toeganklikheidkenmerk begin word as albei volumeknoppies 3 sekondes lank gedruk word.\n\n Bestaande toeganklikheidkenmerk:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Jy kan die kenmerk in Instellings &gt; Toeganklikheid verander."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Wysig kortpaaie"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Kanselleer"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Skakel kortpad af"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Skakel werkprofiel aan?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Jou werkprogramme, kennisgewings, data en ander werkprofielkenmerke sal aangeskakel word"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Skakel aan"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Program is nie beskikbaar nie"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is nie op die oomblik beskikbaar nie."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Hierdie program is vir \'n ouer weergawe van Android gebou en sal dalk nie behoorlik werk nie. Probeer kyk vir opdaterings, of kontak die ontwikkelaar."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Kyk vir opdatering"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Jy het nuwe boodskappe"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> is in die BEPERK-groep geplaas"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Persoonlik"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Werk"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index e9409fb..f49e2ef 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"የአካባቢ ቅንብሮች በአስተዳዳሪዎ ተቀይረዋል"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"የአካባቢ ቅንብሮችዎን ለመመልከት መታ ያድርጉ።"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"ይህ ልዩ ፈቃድ ያለው | የሥርዓት መተግበሪያ በማናቸውም ጊዜ የሥርዓት ካሜራን በመጠቀም ሥዕሎችን ማንሣት እና ቪዲዮ መቅረጽ ይችላል። የ android.ፈቃድን ይጠይቃል። ካሜራ ፍቃድ በመተግበሪያውም ጭምር መያዝ ይኖርበታል"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"ነዛሪ ተቆጣጠር"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"የአይኤምኤስ ጥሪ አገልግሎትን ይደርሳል"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"እንደገና ይሞክሩ።"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ምንም የጣት አሻራዎች አልተመዘገቡም።"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ይህ መሣሪያ የጣት አሻራ ዳሳሽ የለውም።"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ጣት <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ፊትን ማረጋገጥ አይቻልም። እንደገና ይሞክሩ።"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"በመልክ መክፈትን አላቀናበሩም።"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"በመልክ መክፈት መስጫ በዚህ መሣሪያ ላይ አይደገፍም።"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"ፊት <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"ዳራው ከ<xliff:g id="PACKAGENAME">%1$s</xliff:g> የጀመረው የፊት አገልግሎት ወደፊት በሚኖሩት R ግንቦች ላይ ጥቅም ላይ እየዋለ ፈቃድ አይኖረውም። እባክዎ go/r-bg-fgs-restriction እና ፋይል ሳንካ ሪፖርትን ይመልከቱ።"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ድምጹ ከሚመከረው መጠን በላይ ከፍ ይበል?\n\nበከፍተኛ ድምጽ ለረጅም ጊዜ ማዳመጥ ጆሮዎን ሊጎዳው ይችላል።"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"የተደራሽነት አቋራጭ ጥቅም ላይ ይዋል?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"አቋራጩ ሲበራ ሁለቱንም የድምፅ አዝራሮች ለ3 ሰከንዶች ተጭኖ መቆየት የተደራሽነት ባህሪን ያስጀምረዋል።\n\n አሁን ያለ የተደራሽነት ባህሪ፦\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n ባህሪውን በቅንብሮች &gt; ተደራሽነት ውስጥ ሊለውጡት ይችላሉ።"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"አቋራጮችን አርትዕ ያድርጉ"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"ይቅር"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"አቋራጩን አጥፋ"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"የስራ መገለጫ ይብራ?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"የእርስዎ የስራ መተግበሪያዎች፣ ማሳወቂያዎች፣ ውሂብ እና ሌሎች የስራ መገለጫ ባህሪያት ይበራሉ"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"አብራ"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"ይህ መተግበሪያ ለቆየ የAndroid ስሪት ነው የተገነባው፣ እና በአግባቡ ላይሰራ ይችላል። ዝማኔዎች ካሉ ለመመልከት ይሞክሩ፣ ወይም ደግሞ ገንቢውን ያነጋግሩ።"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ዝማኔ ካለ አረጋግጥ"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"አዲስ መልዕክቶች አለዎት"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ወደ የRESTRICTED ባልዲ ተከትቷል"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"የግል"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"ሥራ"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 23ffd7b..93f5dc1 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -199,6 +199,10 @@
     <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>
+    <!-- no translation found for location_changed_notification_title (4119726617105166830) -->
+    <skip />
+    <!-- no translation found for location_changed_notification_text (198907268219396399) -->
+    <skip />
     <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>
@@ -210,23 +214,23 @@
     <string name="power_dialog" product="default" msgid="1107775420270203046">"خيارات الهاتف"</string>
     <string name="silent_mode" msgid="8796112363642579333">"وضع صامت"</string>
     <string name="turn_on_radio" msgid="2961717788170634233">"تشغيل اللاسلكي"</string>
-    <string name="turn_off_radio" msgid="7222573978109933360">"إيقاف تشغيل الشبكة اللاسلكية"</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="silent_mode_silent" msgid="5079789070221150912">"إيقاف الرنين"</string>
     <string name="silent_mode_vibrate" msgid="8821830448369552678">"اهتزاز الرنين"</string>
     <string name="silent_mode_ring" msgid="6039011004781526678">"تشغيل الرنين"</string>
-    <string name="reboot_to_update_title" msgid="2125818841916373708">"‏تحديث نظام Android"</string>
+    <string name="reboot_to_update_title" msgid="2125818841916373708">"‏إعادة تحميل نظام Android"</string>
     <string name="reboot_to_update_prepare" msgid="6978842143587422365">"جارٍ الإعداد للتحديث…"</string>
     <string name="reboot_to_update_package" msgid="4644104795527534811">"جارٍ معالجة حزمة التحديث…"</string>
     <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_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" 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>
@@ -441,6 +445,8 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"‏إذا حصل تطبيق النظام على هذا الإذن، سيمكن لهذا التطبيق التقاط صور وتسجيل فيديوهات باستخدام كاميرا النظام في أي وقت. ويجب أن يحصل التطبيق أيضًا على الإذن android.permission.CAMERA."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"التحكم في الاهتزاز"</string>
     <string name="permdesc_vibrate" msgid="8733343234582083721">"للسماح للتطبيق بالتحكم في الهزّاز."</string>
+    <!-- no translation found for permdesc_vibrator_state (7050024956594170724) -->
+    <skip />
     <string name="permlab_callPhone" msgid="1798582257194643320">"اتصال مباشر بأرقام الهواتف"</string>
     <string name="permdesc_callPhone" msgid="5439809516131609109">"للسماح للتطبيق بطلب أرقام هاتفية بدون تدخل منك. وقد يؤدي ذلك إلى تحمل رسوم غير متوقعة أو إجراء مكالمات غير متوقعة. ومن الجدير بالذكر أن ذلك لا يتيح للتطبيق الاتصال بأرقام الطوارئ. وقد تؤدي التطبيقات الضارة إلى تحملك تكاليف مالية من خلال إجراء مكالمات بدون موافقة منك."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"الوصول إلى خدمة الاتصال عبر الرسائل الفورية"</string>
@@ -555,6 +561,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"أعد المحاولة."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ليست هناك بصمات إصبع مسجَّلة."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"لا يحتوي هذا الجهاز على مستشعِر بصمات إصبع."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"الإصبع <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -598,6 +606,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"يتعذّر التحقق من الوجه. حاول مرة أخرى."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"لم يسبق لك إعداد \"فتح القفل بالوجه\"."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"\"فتح القفل بالوجه\" غير متوفر على هذا الجهاز."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"الوجه <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -915,7 +925,7 @@
     <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_default" msgid="3769524569903332476">"جافا سكريبت"</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_negative_button" msgid="3873765747622415310">"البقاء في هذه الصفحة"</string>
@@ -979,8 +989,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">"‏هل تريد تفعيل ميزة Explore by Touch؟"</string>
-    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="1037295476738940824">"‏يريد <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> تفعيل ميزة Explore by Touch. عند تشغيل ميزة Explore by Touch، سيكون بإمكانك سماع أو مشاهدة أوصاف لما تحت إصبعك أو إجراء إيماءات للتفاعل مع الجهاز اللوحي."</string>
-    <string name="enable_explore_by_touch_warning_message" product="default" msgid="4312979647356179250">"‏يريد <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> تفعيل ميزة Explore by Touch. عند تشغيل ميزة Explore by Touch، سيكون بإمكانك سماع أو مشاهدة أوصاف لما تحت إصبعك أو إجراء إيماءات للتفاعل مع الهاتف."</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="1037295476738940824">"‏يريد <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> تفعيل ميزة Explore by Touch. عند تفعيل ميزة Explore by Touch، سيكون بإمكانك سماع أو مشاهدة أوصاف لما تحت إصبعك أو إجراء إيماءات للتفاعل مع الجهاز اللوحي."</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="4312979647356179250">"‏يريد <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> تفعيل ميزة Explore by Touch. عند تفعيل ميزة Explore by Touch، سيكون بإمكانك سماع أو مشاهدة أوصاف لما تحت إصبعك أو إجراء إيماءات للتفاعل مع الهاتف."</string>
     <string name="oneMonthDurationPast" msgid="4538030857114635777">"قبل شهر واحد"</string>
     <string name="beforeOneMonthDurationPast" msgid="8315149541372065392">"قبل شهر واحد"</string>
     <plurals name="last_num_days" formatted="false" msgid="687443109145393632">
@@ -1264,18 +1274,18 @@
     <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 وقد يحدث خلل في أدائه. قد يتوفّر إصدار محدّث من التطبيق."</string>
     <string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"الإظهار دائمًا"</string>
-    <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"البحث عن تحديث"</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>
     <string name="smv_process" msgid="1398801497130695446">"‏انتهكت العملية <xliff:g id="PROCESS">%1$s</xliff:g> سياسة StrictMode المفروضة ذاتيًا."</string>
-    <string name="android_upgrading_title" product="default" msgid="7279077384220829683">"جارٍ تحديث الهاتف…"</string>
-    <string name="android_upgrading_title" product="tablet" msgid="4268417249079938805">"جارٍ تحديث الجهاز اللوحي…"</string>
-    <string name="android_upgrading_title" product="device" msgid="6774767702998149762">"جارٍ تحديث الجهاز…"</string>
+    <string name="android_upgrading_title" product="default" msgid="7279077384220829683">"جارٍ إعادة تحميل الهاتف…"</string>
+    <string name="android_upgrading_title" product="tablet" msgid="4268417249079938805">"جارٍ إعادة تحميل الجهاز اللوحي…"</string>
+    <string name="android_upgrading_title" product="device" msgid="6774767702998149762">"جارٍ إعادة تحميل الجهاز…"</string>
     <string name="android_start_title" product="default" msgid="4036708252778757652">"جارٍ بدء تشغيل الهاتف…"</string>
     <string name="android_start_title" product="automotive" msgid="7917984412828168079">"‏جارٍ تشغيل Android…"</string>
     <string name="android_start_title" product="tablet" msgid="4429767260263190344">"جارٍ بدء تشغيل الجهاز اللوحي…"</string>
     <string name="android_start_title" product="device" msgid="6967413819673299309">"جارٍ بدء تشغيل الجهاز…"</string>
     <string name="android_upgrading_fstrim" msgid="3259087575528515329">"جارٍ تحسين مساحة التخزين."</string>
-    <string name="android_upgrading_notification_title" product="default" msgid="3509927005342279257">"جارٍ إنهاء تحديث النظام…"</string>
+    <string name="android_upgrading_notification_title" product="default" msgid="3509927005342279257">"جارٍ إنهاء إعادة تحميل النظام…"</string>
     <string name="app_upgrading_toast" msgid="1016267296049455585">"جارٍ ترقية <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string>
     <string name="android_upgrading_apk" msgid="1339564803894466737">"جارٍ تحسين التطبيق <xliff:g id="NUMBER_0">%1$d</xliff:g> من <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
     <string name="android_preparing_apk" msgid="589736917792300956">"جارٍ تحضير <xliff:g id="APPNAME">%1$s</xliff:g>."</string>
@@ -1395,7 +1405,7 @@
     <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="usb_contaminant_detected_title" msgid="4359048603069159678">"‏السوائل والشوائب في منفذ USB"</string>
+    <string name="usb_contaminant_detected_title" msgid="4359048603069159678">"‏السوائل أو الشوائب في منفذ USB"</string>
     <string name="usb_contaminant_detected_message" msgid="7346100585390795743">"‏تمّ إيقاف منفذ USB تلقائيًا. انقُر لمعرفة المزيد من المعلومات."</string>
     <string name="usb_contaminant_not_detected_title" msgid="2651167729563264053">"‏مسموح باستخدام منفذ USB"</string>
     <string name="usb_contaminant_not_detected_message" msgid="892863190942660462">"لم يَعُد الهاتف يكتشف سوائل أو شوائب."</string>
@@ -1702,7 +1712,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"‏لن يتم منح إذن الوصول إلى الموقع الجغرافي أثناء الاستخدام للخدمات التي تعمل في المقدّمة من <xliff:g id="PACKAGENAME">%1$s</xliff:g> والتي تبدأ من الخلفية في إصدارات R القادمة. يُرجى مراجعة go/r-bg-fgs-restriction وتقديم تقرير خطأ."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"هل تريد رفع مستوى الصوت فوق المستوى الموصى به؟\n\nقد يضر سماع صوت عالٍ لفترات طويلة بسمعك."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"هل تريد استخدام اختصار \"سهولة الاستخدام\"؟"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"عند تشغيل الاختصار، يؤدي الضغط على زرّي مستوى الصوت لمدة 3 ثوانٍ إلى تفعيل ميزة \"سهولة الاستخدام\".\n\n ميزة \"سهولة الاستخدام\" الحالية:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n يمكنك تغيير الميزة من \"الإعدادات\" &gt; \"سهولة الاستخدام\"."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"تعديل الاختصارات"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"إلغاء"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"إيقاف الاختصار"</string>
@@ -1981,8 +1992,10 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"تفعيل الملف الشخصي للعمل؟"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"سيتم تفعيل تطبيقات العمل التي تستخدمها والإشعارات والبيانات وغيرها من ميزات الملف الشخصي للعمل"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"تشغيل"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"‏تمّ إنشاء هذا التطبيق لإصدار قديم من Android وقد لا يعمل بشكل صحيح. جرِّب البحث عن تحديثات أو الاتصال بمطوّر البرامج."</string>
-    <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"البحث عن تحديث"</string>
+    <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"البحث عن إعادة تحميل"</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>
@@ -2035,9 +2048,9 @@
     <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_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>
@@ -2144,4 +2157,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"تم وضع <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> في الحزمة \"محظورة\"."</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"شخصي"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"عمل"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index a09c377..9b42cf2 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"আপোনাৰ প্ৰশাসকে অৱস্থানৰ ছেটিংসমূহ সলনি কৰিছে"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"আপোনাৰ অৱস্থানৰ ছেটিংসমূহ চাবলৈ টিপক।"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"এই বিশেষাধিকাৰ প্ৰাপ্ত | ছিষ্টেম এপ্‌টোৱে এটা ছিষ্টেম কেমেৰা ব্যৱহাৰ কৰি যিকোনো সময়তে ফট’ উঠাব পাৰে আৰু ভিডিঅ’ ৰেকৰ্ড কৰিব পাৰে। লগতে এপ্‌টোৰো android.permission.CAMERAৰ অনুমতি থকাটো প্ৰয়োজনীয়"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"কম্পন নিয়ন্ত্ৰণ কৰক"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"আইএমএছ কল সেৱা ব্যৱহাৰ কৰিব পাৰে"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"আকৌ চেষ্টা কৰক।"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"কোনো ফিংগাৰপ্ৰিণ্ট যোগ কৰা নহ\'ল।"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"এই ডিভাইচটোত ফিংগাৰপ্ৰিণ্ট ছেন্সৰ নাই।"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g> আঙুলি"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"মুখমণ্ডল সত্যাপন কৰিব পৰা নগ’ল। আকৌ চেষ্টা কৰক।"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"আপুনি মুখাৱয়বৰদ্বাৰা আনলক কৰাটো ছেট আপ কৰা নাই।"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"এই ডিভাইচটোত মুখাৱয়বৰদ্বাৰা আনলক কৰা সুবিধাটো নচলে।"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"মুখমণ্ডল <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"নেপথ্যই <xliff:g id="PACKAGENAME">%1$s</xliff:g>ৰ পৰা আৰম্ভ কৰা অগ্ৰভূমিৰ সেৱাটোৰ ভৱিষ্যতৰ R বিল্ডসমূহত ব্যৱহাৰ হৈ থকা সম্পৰ্কীয় অনুমতি নাথাকিব। অনুগ্ৰহ কৰি go/r-bg-fgs-restriction চাওক আৰু এটা বাগৰিপ\'ৰ্ট ফাইল কৰক।"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"অনুমোদিত স্তৰতকৈ ওপৰলৈ ভলিউম বঢ়াব নেকি?\n\nদীৰ্ঘ সময়ৰ বাবে উচ্চ ভলিউমত শুনাৰ ফলত শ্ৰৱণ ক্ষমতাৰ ক্ষতি হ\'ব পাৰে।"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"দিব্যাংগসকলৰ সুবিধাৰ শ্বৰ্টকাট ব্যৱহাৰ কৰেনে?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"শ্বৰ্টকাট অন হৈ থকাৰ সময়ত দুয়োটা ভলিউম বুটামত ৩ ছেকেণ্ডৰ বাবে ছাপ দি থাকিলে দিব্যাংগসকলৰ বাবে থকা সুবিধা এটা আৰম্ভ হ\'ব। \n\n চলিত দিব্যাংগসকলৰ সুবিধা:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n আপুনি এই সুবিধাটো ছেটিংসমূহ &gt; দিব্যাংগসকলৰ বাবে সুবিধা-লৈ গৈ সলনি কৰিব পাৰে।"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"শ্বৰ্টকাটসমূহ সম্পাদনা কৰক"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"বাতিল কৰক"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"শ্বৰ্টকাট অফ কৰক"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"কৰ্মস্থানৰ প্ৰ\'ফাইল অন কৰিবনে?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"আপোনাৰ কৰ্মস্থানৰ এপসমূহ, জাননীসমূহ, ডেটা আৰু কৰ্মস্থানৰ প্ৰ\'ফাইলৰ অইন সুবিধাসমূহ অন কৰা হ\'ব"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"অন কৰক"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"এই এপটো Androidৰ এটা পুৰণা সংস্কৰণৰ বাবে প্ৰস্তুত কৰা হৈছিল, আৰু ই বিচৰাধৰণে কাম নকৰিবও পাৰে। ইয়াৰ আপডে’ট আছে নেকি চাওক, বা বিকাশকৰ্তাৰ সৈতে যোগাযোগ কৰক।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"আপডে’ট আছে নেকি চাওক"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"আপুনি নতুন বার্তা লাভ কৰিছে"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>ক সীমাবদ্ধ বাকেটটোত ৰখা হৈছে"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"ব্যক্তিগত"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"কৰ্মস্থান"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index b1209b1..73adbd8 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Admin şəxsi istifadə üçün cihazdan imtina etdi"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Cihaz idarə olunur"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Təşkilat bu cihazı idarə edir və şəbəkənin ötürülməsinə nəzarət edə bilər. Detallar üçün klikləyin."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Məkan ayarları admininiz tərəfindən dəyişildi"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Məkan ayarlarınıza baxmaq üçün toxunun."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Cihazınız təmizlənəcəkdir"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Admin tətbiqini istifadə etmək mümkün deyil. Cihaz indi təmizlənəcək.\n\nSualınız varsa, təşkilatın admini ilə əlaqə saxlayın."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Çap <xliff:g id="OWNER_APP">%s</xliff:g> tərəfindən deaktiv edildi."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Bu icazəli | sistem tətbiqi istənilən vaxt sistem kamerasından istifadə edərək şəkil və videolar çəkə bilər. Tətbiqdə saxlanılması üçün android.permission.CAMERA icazəsini tələb edir"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"vibrasiyaya nəzarət edir"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS zəng xidmətinə giriş"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Yenidən cəhd edin."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Barmaq izi qeydə alınmayıb."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Bu cihazda barmaq izi sensoru yoxdur."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Barmaq <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"Üz kilidi quraşdırmamısınız."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Üz kilidi bu cihazda dəstəklənmir."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Üz <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Arxa fonda başladılan <xliff:g id="PACKAGENAME">%1$s</xliff:g> üzrə ön plan xidmətinin gələcək R versiyalarında \"istifadə zamanı\" icazəsi olmayacaq. go/r-bg-fgs-restriction bölməsinə keçin və baq hesabatı göndərin."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Əlçatımlılıq Qısayolu istifadə edilsin?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Qısayol aktiv olduqda hər iki səs düyməsinə 3 saniyə basıb saxlamaqla əlçatımlılıq funksiyası işə başlayacaq.\n\n Cari əlçatımlılıq funksiyası:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Funksiyanı Ayarlar və Əçatımlılıq bölməsində dəyişə bilərsiniz."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Qısayolları redaktə edin"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Ləğv edin"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Qısayolu Deaktiv edin"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"İş profili aktiv edilsin?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"İş tətbiqləri, bildirişləri, data və digər iş profili funksiyaları aktiv ediləcək"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Aktivləşdirin"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Tətbiq əlçatan deyil"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> hazırda əlçatan deyil."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Bu tətbiq köhnə Android versiyası üçün hazırlanıb və düzgün işləməyə bilər. Güncəlləməni yoxlayın və ya developer ilə əlaqə saxlayın."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Güncəlləməni yoxlayın"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Yeni mesajlarınız var"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> MƏHDUDLAŞDIRILMIŞ səbətinə yerləşdirilib"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Şəxsi"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"İş"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 5600882..bf250f7 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -193,6 +193,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administrator je ustupio uređaj za ličnu upotrebu"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Uređajem se upravlja"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Organizacija upravlja ovim uređajem i može da nadgleda mrežni saobraćaj. Dodirnite za detalje."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Administrator je promenio podešavanja lokacije"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Dodirnite da biste videli podešavanja lokacije."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Uređaj će biti obrisan"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Ne možete da koristite ovu aplikaciju za administratore. Uređaj će sada biti obrisan.\n\nAko imate pitanja, kontaktirajte administratora organizacije."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Štampanje je onemogućila aplikacija <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -432,6 +434,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Ova privilegovana | sistemska aplikacija može da snima slike i video snimke pomoću kamere sistema u bilo kom trenutku. Aplikacija treba da ima i dozvolu android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"kontrola vibracije"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"pristup usluzi poziva pomoću razmene trenutnih poruka"</string>
@@ -546,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Probajte ponovo."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nije registrovan nijedan otisak prsta."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ovaj uređaj nema senzor za otisak prsta."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Prst <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -589,6 +594,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Provera lica nije uspela. Probajte ponovo."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Niste podesili otključavanje licem"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Otključavanje licem nije podržano na ovom uređaju"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Lice <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1636,7 +1643,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Usluga u prvom planu sa <xliff:g id="PACKAGENAME">%1$s</xliff:g> koja je pokrenuta u pozadini neće imati dozvolu tokom korišćenja u budućim R verzijama. Posetite go/r-bg-fgs-restriction i pošaljite izveštaj o grešci."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Želite li da koristite prečicu za pristupačnost?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Kada je prečica uključena, pritisnite oba dugmeta za jačinu zvuka da biste pokrenuli funkciju pristupačnosti.\n\n Aktuelna funkcija pristupačnosti:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Možete da promenite funkciju u odeljku Podešavanja &gt; Pristupačnost."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Izmenite prečice"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Otkaži"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Isključi prečicu"</string>
@@ -1885,6 +1893,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Da uključimo profil za Work?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Uključiće se poslovne aplikacije, obaveštenja, podaci i druge funkcije profila za Work"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Uključi"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Ova aplikacija je napravljena za stariju verziju Android-a, pa možda neće raditi ispravno. Potražite ažuriranja ili kontaktirajte programera."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Potraži ažuriranje"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Imate nove poruke"</string>
@@ -2042,4 +2052,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> je dodat u segment OGRANIČENO"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Lični"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Poslovni"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index fb80e4b..454a21e 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -195,6 +195,8 @@
     <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="4119726617105166830">"Налады месцазнаходжання зменены адміністратарам"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Націсніце, каб праглядзець налады месцазнаходжання."</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>
@@ -435,6 +437,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Гэта прыярытэтная | сістэмная праграма можа здымаць фота і запісваць відэа, выкарыстоўваючы сістэмную камеру. Праграме патрэбны дазвол android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"кіраванне вібрацыяй"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"атрымліваць доступ да сэрвісу выклікаў IMS"</string>
@@ -549,6 +552,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Паспрабуйце яшчэ раз."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Адбіткі пальцаў не зарэгістраваны."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"На гэтай прыладзе няма сканера адбіткаў пальцаў."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Палец <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -592,6 +597,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Не ўдалося спраўдзіць твар. Паўтарыце спробу."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Вы не наладзілі распазнаванне твару."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"На гэтай прыладзе распазнаванне твару не падтрымліваецца."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Твар <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1658,7 +1665,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Запушчаны ў фонавым рэжыме асноўны сэрвіс з пакета \"<xliff:g id="PACKAGENAME">%1$s</xliff:g>\" не будзе мець дазволу while-in-use у будучых зборках на мове R. Наведайце сайт go/r-bg-fgs-restriction і адпраўце справаздачу пра памылку."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Павялiчыць гук вышэй рэкамендаванага ўзроўню?\n\nДоўгае праслухоўванне музыкi на вялiкай гучнасцi можа пашкодзiць ваш слых."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Выкарыстоўваць камбінацыю хуткага доступу для спецыяльных магчымасцей?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Калі камбінацыя хуткага доступу ўключана, вы можаце націснуць абедзве кнопкі гучнасці і ўтрымліваць іх 3 секунды, каб уключыць функцыю спецыяльных магчымасцей.\n\n Бягучая функцыя спецыяльных магчымасцей:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Вы можаце змяніць гэту функцыю ў меню \"Налады &gt; Спецыяльныя магчымасці\"."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Змяніць ярлыкі"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Скасаваць"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Дэактываваць камбінацыю хуткага доступу"</string>
@@ -1917,6 +1925,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Уключыць працоўны профіль?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Будуць уключаны вашы рабочыя праграмы, апавяшчэнні, даныя і іншыя функцыі працоўнага профілю"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Уключыць"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Гэта праграма была створана для больш старой версіі Android і можа не працаваць належным чынам. Праверце наяўнасць абнаўленняў або звярніцеся да распрацоўшчыка."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Праверыць на наяўнасць абнаўленняў"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"У вас ёсць новыя паведамленні"</string>
@@ -2076,4 +2086,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакет \"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>\" дададзены ў АБМЕЖАВАНУЮ групу"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Асабістыя"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Працоўныя"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 2892853..ad8fdc6 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"Настройките за местоположението са променени от администратора ви"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Докоснете, за да видите настройките за местоположението."</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">"Отпечатването е деактивиранo от <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Това привилегировано/системно приложение може по всяко време да прави снимки и да записва видеоклипове посредством системна камера. Необходимо е също на приложението да бъде дадено разрешението android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"контролиране на вибрирането"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"достъп до услугата за незабавни съобщения за обаждания"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Опитайте отново."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Няма регистрирани отпечатъци."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Това устройство няма сензор за отпечатъци."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Пръст <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Лицето не може да се потвърди. Опитайте отново."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Не сте настроили отключването с лице."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Отключването с лице не се поддържа на това устройство."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Лице <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Задният план, който е стартирал услуга на преден план от <xliff:g id="PACKAGENAME">%1$s</xliff:g>, няма да има разрешение при използване в бъдещите компилации R. Моля, вижте go/r-bg-fgs-restriction и подайте сигнал за програмна грешка."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Да се увеличи ли силата на звука над препоръчителното ниво?\n\nПродължителното слушане при висока сила на звука може да увреди слуха ви."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Искате ли да използвате пряк път към функцията за достъпност?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Когато прекият път е включен, можете да стартирате дадена функция за достъпност, като натиснете двата бутона за промяна на силата на звука и ги задържите 3 секунди.\n\n Текущата функция за достъпност е:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Можете да промените функцията от „Настройки“ &gt; „Достъпност“."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Редактиране на преките пътища"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Отказ"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Изключване на прекия път"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Вкл. на служ. потр. профил?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Служебните ви приложения, известия и данни, както и другите функции на служебния потребителски профил ще бъдат включени"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Включване"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Това приложение бе създадено за по-стара версия на Android и може да не работи правилно. Опитайте да проверите за актуализации или се свържете с програмиста."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Проверка за актуализация"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Имате нови съобщения"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакетът <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> е поставен в ОГРАНИЧЕНИЯ контейнер"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Лични"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Служебни"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index 4c95081..f5570c6 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -191,6 +191,10 @@
     <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>
+    <!-- no translation found for location_changed_notification_title (4119726617105166830) -->
+    <skip />
+    <!-- no translation found for location_changed_notification_text (198907268219396399) -->
+    <skip />
     <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>
@@ -429,6 +433,8 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"এই প্রিভিলিজ | সিস্টেম অ্যাপটি যেকোনও সময়ে সিস্টেম ক্যামেরা ব্যবহার করে ছবি তুলতে এবং ভিডিও রেকর্ড করতে পারবে। এর জন্য অ্যাপের Android.permission.CAMERA -এর অনুমতি প্রয়োজন"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"ভাইব্রেশন নিয়ন্ত্রণ করুন"</string>
     <string name="permdesc_vibrate" msgid="8733343234582083721">"অ্যাপ্লিকেশানকে কম্পক নিয়ন্ত্রণ করতে দেয়৷"</string>
+    <!-- no translation found for permdesc_vibrator_state (7050024956594170724) -->
+    <skip />
     <string name="permlab_callPhone" msgid="1798582257194643320">"সরাসরি ফোন নম্বরগুলিতে কল করে"</string>
     <string name="permdesc_callPhone" msgid="5439809516131609109">"অ্যাপ্লিকেশানটিকে আপনার হস্তক্ষেপ ছাড়াই ফোন নম্বরগুলিতে কল করতে মঞ্জুর করে৷ এটি অপ্রত্যাশিত পরিমাণ খরচা বা কলের কারণ হতে পারে৷ মনে রাখবেন, এটি অ্যাপ্লিকেশানটির দ্বারা জরুরি নম্বরগুলিতে কল করাকে অনুমতি দেয় না৷ ক্ষতিকারক অ্যাপ্লিকেশানগুলি আপনার সম্মতি ছাড়াই কল করার ফলে আপনাকে অহেতুক পেমেন্ট করতে হতে পারে৷"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS পরিষেবাতে অ্যাক্সেস"</string>
@@ -543,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"আবার চেষ্টা করুন৷"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"কোনও আঙ্গুলের ছাপ নথিভুক্ত করা হয়নি।"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"এই ডিভাইসে আঙ্গুলের ছাপ নেওয়ার সেন্সর নেই।"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"আঙ্গুল <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +594,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"আপনার মুখ যাচাই করা যাচ্ছে না। আবার চেষ্টা করুন।"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"এখনও মুখের সাহায্যে আনলক করার সুবিধা সেট-আপ করেননি।"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"এই ডিভাইসে মুখের সাহায্যে আনলক করার সুবিধাটি কাজ করে না।"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> ফেস"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1297,7 +1307,7 @@
     <string name="no_permissions" msgid="5729199278862516390">"কোনো অনুমতির প্রয়োজন নেই"</string>
     <string name="perm_costs_money" msgid="749054595022779685">"এর জন্য অর্থপ্রদান করতে হতে পারে"</string>
     <string name="dlg_ok" msgid="5103447663504839312">"ঠিক আছে"</string>
-    <string name="usb_charging_notification_title" msgid="1674124518282666955">"এই ডিভাইসটি USB এর মাধ্যমে চার্জ করুন"</string>
+    <string name="usb_charging_notification_title" msgid="1674124518282666955">"এই ডিভাইসটি USB দিয়ে চার্জ করা হচ্ছে"</string>
     <string name="usb_supplying_notification_title" msgid="5378546632408101811">"সংযুক্ত ডিভাইসটি USB এর মাধ্যমে চার্জ করা হচ্ছে"</string>
     <string name="usb_mtp_notification_title" msgid="1065989144124499810">"USB ফাইল ট্রান্সফার চালু করা হয়েছে"</string>
     <string name="usb_ptp_notification_title" msgid="5043437571863443281">"USB এর মাধ্যমে PTP চালু করা হয়েছে"</string>
@@ -1614,7 +1624,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> থেকে শুরু হওয়া ফোরগ্রাউন্ড পরিষেবাটির ভবিষ্যতে আর বিল্ডগুলিতে ব্যবহারের অনুমতি নেই। go/r-bg-fgs-restriction দেখুন এবং বাগরিপোর্ট জমা দিন।"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"প্রস্তাবিত স্তরের চেয়ে বেশি উঁচুতে ভলিউম বাড়াবেন?\n\nউঁচু ভলিউমে বেশি সময় ধরে কিছু শুনলে আপনার শ্রবনশক্তির ক্ষতি হতে পারে।"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"অ্যাক্সেসযোগ্যতা শর্টকাট ব্যবহার করবেন?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"শর্টকাটটি চালু থাকলে দুটি ভলিউম বোতাম একসাথে ৩ সেকেন্ড টিপে ধরে রাখলে একটি অ্যাকসেসিবিলিটি বৈশিষ্ট্য চালু হবে।\n\n বর্তমান অ্যাকসেসিবিলিটি বৈশিষ্ট্য:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n আপনি এই বৈশিষ্ট্যটি সেটিংস &gt; অ্যাকসেসিবিলিটিতে গিয়ে পরিবর্তন করতে পারবেন।"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"শর্টকাট এডিট করুন"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"বাতিল করুন"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"শর্টকাট বন্ধ করুন"</string>
@@ -1853,6 +1864,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"কাজের প্রোফাইল চালু করবেন?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"আপনার কাজের অ্যাপ, বিজ্ঞপ্তি, ডেটা এবং কাজের প্রোফাইলের অন্যান্য বৈশিষ্ট্য চালু করা হবে"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"চালু করুন"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"এই অ্যাপটি Android এর একটি পুরনো ভার্সনের জন্য তৈরি করা হয়েছিল, তাই এখানে সেটি ঠিকমতো কাজ নাও করতে পারে। আপডেট পাওয়া যাচ্ছে কিনা দেখুন বা ডেভেলপারের সাথে যোগাযোগ করুন।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"আপডেট পাওয়া যাচ্ছে কিনা দেখুন"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"আপনার নতুন মেসেজ আছে"</string>
@@ -2008,4 +2021,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> সীমাবদ্ধ গ্রুপে অন্তর্ভুক্ত করা হয়েছে"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"ব্যক্তিগত"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"অফিস"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index eaa212d..fd53b69 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -193,6 +193,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administrator je ustupio uređaj za ličnu upotrebu"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Uređajem se upravlja."</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Vaša organizacija upravlja ovim uređajem i može pratiti mrežni saobraćaj. Dodirnite za detalje."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Postavke lokacije je promijenio vaš administrator"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Dodirnite da vidite postavke lokacije."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Uređaj će biti izbrisan"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Nije moguće koristiti aplikaciju administratora. Potpuno će se izbrisati podaci na vašem uređaju.\n\nAko imate pitanja, obratite se administratoru svoje organizacije."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Štampanje je onemogućila aplikacija <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -432,6 +434,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Ova povlaštena | sistemska aplikacija u svakom trenutku može snimati fotografije i videozapise pomoću kamere sistema. Aplikacija također mora imati dopuštenje android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"kontrola vibracije"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"pristup usluzi IMS pozivanja"</string>
@@ -546,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Pokušajte ponovo."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nije prijavljen nijedan otisak prsta."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ovaj uređaj nema senzor za otisak prsta."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Prst <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -589,6 +594,8 @@
     <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="7369928733504691611">"Niste postavili otključavanje licem."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Otključavanje licem nije podržano na ovom uređaju."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Lice <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1638,7 +1645,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Usluge iz prvog plana započete u pozadini s web lokacije <xliff:g id="PACKAGENAME">%1$s</xliff:g> neće imati odobrenje za funkciju \"za vrijeme korištenja\" u budućim R verzijama. Pogledajte go/r-bg-fgs-restriction i podnesite izvještaj o greškama."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Želite li koristiti Prečicu za pristupačnost?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Kada je prečica uključena, pritiskom na oba dugmeta za podešavanje jačine zvuka u trajanju od 3 sekunde pokrenut će se funkcija za pristupačnost.\n\n Trenutna funkcija za pristupačnost je:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Funkciju možete promijeniti ako odete u Postavke &gt; Pristupačnost."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Uredi prečice"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Otkaži"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Isključi prečicu"</string>
@@ -1887,6 +1895,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Uključiti radni profil?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Uključit će se poslovne aplikacije, obavještenja, podaci i druge funkcije radnog profila"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Uključi"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Ova aplikacija je pravljena za stariju verziju Androida i možda neće ispravno raditi. Provjerite jesu li dostupna ažuriranja ili kontaktirajte programera."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Provjeri je li dostupno ažuriranje"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Imate nove poruke"</string>
@@ -2044,4 +2054,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> je stavljen u odjeljak OGRANIČENO"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Lično"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Posao"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 0b58cae..fdb8f45 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -182,15 +182,17 @@
       <item quantity="one">Autoritat de certificació instal·lada</item>
     </plurals>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4961102218216815242">"Per un tercer desconegut"</string>
-    <string name="ssl_ca_cert_noti_by_administrator" msgid="4564941950768783879">"Per l\'administrador del teu perfil professional"</string>
+    <string name="ssl_ca_cert_noti_by_administrator" msgid="4564941950768783879">"Per l\'administrador del teu perfil de treball"</string>
     <string name="ssl_ca_cert_noti_managed" msgid="217337232273211674">"Per <xliff:g id="MANAGING_DOMAIN">%s</xliff:g>"</string>
-    <string name="work_profile_deleted" msgid="5891181538182009328">"S\'ha suprimit el perfil professional"</string>
-    <string name="work_profile_deleted_details" msgid="3773706828364418016">"Falta l\'aplicació d\'administració del perfil professional o està malmesa. Com a conseqüència, s\'han suprimit el teu perfil professional i les dades relacionades. Contacta amb l\'administrador per obtenir ajuda."</string>
-    <string name="work_profile_deleted_description_dpm_wipe" msgid="2477244968924647232">"El teu perfil professional ja no està disponible en aquest dispositiu"</string>
+    <string name="work_profile_deleted" msgid="5891181538182009328">"S\'ha suprimit el perfil de treball"</string>
+    <string name="work_profile_deleted_details" msgid="3773706828364418016">"Falta l\'aplicació d\'administració del perfil de treball o està malmesa. Com a conseqüència, s\'han suprimit el teu perfil de treball i les dades relacionades. Contacta amb l\'administrador per obtenir ajuda."</string>
+    <string name="work_profile_deleted_description_dpm_wipe" msgid="2477244968924647232">"El teu perfil de treball ja no està disponible en aquest dispositiu"</string>
     <string name="work_profile_deleted_reason_maximum_password_failure" msgid="1080323158315663167">"Has intentat introduir la contrasenya massa vegades"</string>
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"L\'administrador ha cedit el dispositiu per a ús personal"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"El dispositiu està gestionat"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"La teva organització gestiona aquest dispositiu i és possible que supervisi el trànsit de xarxa. Toca per obtenir més informació."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"L\'administrador ha modificat la configuració d\'ubicació"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Toca per veure la configuració d\'ubicació."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"El contingut del dispositiu s\'esborrarà"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"No es pot utilitzar l\'aplicació d\'administració. S\'esborraran les dades del dispositiu.\n\nSi tens cap dubte, contacta amb l\'administrador de la teva organització."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> ha desactivat la impressió."</string>
@@ -280,7 +282,7 @@
     <string name="safeMode" msgid="8974401416068943888">"Mode segur"</string>
     <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 professional"</string>
+    <string name="managed_profile_label" msgid="7316778766973512382">"Canvia al perfil de treball"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Aquesta aplicació del sistema pot fer fotos i gravar vídeos amb una càmera del sistema en qualsevol moment. L\'aplicació també ha de tenir el permís android.permission.CAMERA per accedir-hi"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"controlar la vibració"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"accés al servei de trucades IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Torna-ho a provar."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No s\'ha registrat cap empremta digital."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Aquest dispositiu no té sensor d\'empremtes dactilars."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dit <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"No has configurat el desbloqueig facial"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"El desbloqueig facial no és compatible amb el dispositiu."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Cara <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1406,8 +1413,8 @@
     <string name="deny" msgid="6632259981847676572">"Denega"</string>
     <string name="permission_request_notification_title" msgid="1810025922441048273">"Permís sol·licitat"</string>
     <string name="permission_request_notification_with_subtitle" msgid="3743417870360129298">"S\'ha sol·licitat permís\nper al compte <xliff:g id="ACCOUNT">%s</xliff:g>."</string>
-    <string name="forward_intent_to_owner" msgid="4620359037192871015">"Estàs utilitzant aquesta aplicació fora del perfil professional."</string>
-    <string name="forward_intent_to_work" msgid="3620262405636021151">"Estàs utilitzant l\'aplicació al perfil professional."</string>
+    <string name="forward_intent_to_owner" msgid="4620359037192871015">"Estàs utilitzant aquesta aplicació fora del perfil de treball."</string>
+    <string name="forward_intent_to_work" msgid="3620262405636021151">"Estàs utilitzant l\'aplicació al perfil de treball."</string>
     <string name="input_method_binding_label" msgid="1166731601721983656">"Mètode d\'introducció de text"</string>
     <string name="sync_binding_label" msgid="469249309424662147">"Sincronització"</string>
     <string name="accessibility_binding_label" msgid="1974602776545801715">"Accessibilitat"</string>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"El servei en primer pla (<xliff:g id="PACKAGENAME">%1$s</xliff:g>) iniciat en segon pla no tindrà permís durant l\'ús en compilacions R posteriors. Consulta la pàgina go/r-bg-fgs-restriction i presenta un informe d\'errors."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Vols fer servir la drecera d\'accessibilitat?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Si la drecera està activada, prem els dos botons de volum durant 3 segons, per iniciar una funció d\'accessibilitat.\n\n Funció d\'accessibilitat actual:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Pots canviar la funció a Configuració &gt; Accessibilitat."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Edita les dreceres"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Cancel·la"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Desactiva la drecera"</string>
@@ -1817,7 +1825,7 @@
     <string name="stk_cc_ss_to_dial_video" msgid="1324194624384312664">"La sol·licitud SS s\'ha canviat per una videotrucada"</string>
     <string name="stk_cc_ss_to_ussd" msgid="8417905193112944760">"La sol·licitud SS s\'ha canviat per una sol·licitud USSD"</string>
     <string name="stk_cc_ss_to_ss" msgid="132040645206514450">"S\'ha canviat a una nova sol·licitud SS"</string>
-    <string name="notification_work_profile_content_description" msgid="5296477955677725799">"Perfil professional"</string>
+    <string name="notification_work_profile_content_description" msgid="5296477955677725799">"Perfil de treball"</string>
     <string name="notification_alerted_content_description" msgid="6139691253611265992">"S\'ha enviat una alerta"</string>
     <string name="expand_button_content_description_collapsed" msgid="3873368935659010279">"Desplega"</string>
     <string name="expand_button_content_description_expanded" msgid="7484217944948667489">"Replega"</string>
@@ -1850,15 +1858,17 @@
     <string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> no està disponible en aquests moments. Aquesta opció es gestiona a <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"Més informació"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Reactiva l\'aplicació"</string>
-    <string name="work_mode_off_title" msgid="5503291976647976560">"Activar el perfil professional?"</string>
-    <string name="work_mode_off_message" msgid="8417484421098563803">"S\'activaran les teves aplicacions de treball, les notificacions, les dades i altres funcions del perfil professional"</string>
+    <string name="work_mode_off_title" msgid="5503291976647976560">"Activar el perfil de treball?"</string>
+    <string name="work_mode_off_message" msgid="8417484421098563803">"S\'activaran les teves aplicacions de treball, les notificacions, les dades i altres funcions del perfil de treball"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Activa"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"L\'aplicació no està disponible"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"Ara mateix, <xliff:g id="APP_NAME">%1$s</xliff:g> no està disponible."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Aquesta aplicació es va crear per a una versió antiga d\'Android i pot ser que no funcioni correctament. Prova de cercar actualitzacions o contacta amb el desenvolupador."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Cerca actualitzacions"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tens missatges nous"</string>
     <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>
-    <string name="profile_encrypted_detail" msgid="5279730442756849055">"Perfil professional bloquejat"</string>
+    <string name="profile_encrypted_detail" msgid="5279730442756849055">"Perfil de treball bloquejat"</string>
     <string name="profile_encrypted_message" msgid="1128512616293157802">"Toca per desbloquejar el perfil"</string>
     <string name="usb_mtp_launch_notification_title" msgid="774319638256707227">"S\'ha connectat a <xliff:g id="PRODUCT_NAME">%1$s</xliff:g>"</string>
     <string name="usb_mtp_launch_notification_description" msgid="6942535713629852684">"Toca per veure els fitxers"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> s\'ha transferit al segment RESTRINGIT"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Feina"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 5874c24..a1ff467 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -195,6 +195,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administrátor zařízení uvolnil k osobnímu používání"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Zařízení je spravováno"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Toto zařízení je spravováno vaší organizací, která může sledovat síťový provoz. Podrobnosti zobrazíte klepnutím."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Administrátor změnil nastavení polohy"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Klepnutím zobrazíte nastavení polohy."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Zařízení bude vymazáno"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Aplikaci pro správu nelze použít. Zařízení teď bude vymazáno.\n\nV případě dotazů vám pomůže administrátor organizace."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Aplikace <xliff:g id="OWNER_APP">%s</xliff:g> tisk zakazuje."</string>
@@ -435,6 +437,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Tato privilegovaná | systémová aplikace může pomocí fotoaparátu kdykoli pořídit snímek nebo nahrát video. Aplikace musí zároveň mít oprávnění android.permission.CAMERA."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"ovládání vibrací"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"přístup ke službě zasílání rychlých zpráv pro účely hovorů"</string>
@@ -549,6 +552,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Zkuste to znovu."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nejsou zaregistrovány žádné otisky prstů."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Toto zařízení nemá snímač otisků prstů."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Prst <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -592,6 +597,8 @@
     <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="7369928733504691611">"Ověření obličejem nemáte nastavené."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Odemknutí obličejem na tomto zařízení není podporováno."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Obličej <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1658,7 +1665,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Služba v popředí z balíčku <xliff:g id="PACKAGENAME">%1$s</xliff:g>, která byla spuštěna na pozadí, v budoucích sestavenách typu R nebude mít oprávnění ke spuštění při používání. Přejděte na adresu go/r-bg-fgs-restriction a vyplňte zprávu o chybě."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Použít zkratku přístupnosti?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Když je tato zkratka zapnutá, můžete funkci přístupnosti spustit tím, že na tři sekundy podržíte obě tlačítka hlasitosti.\n\n Aktuální funkce přístupnosti:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Funkci můžete změnit v Nastavení &gt; Přístupnost."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Upravit zkratky"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Zrušit"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Vypnout zkratku"</string>
@@ -1917,6 +1925,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Zapnout pracovní profil?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Vaše pracovní aplikace, oznámení, data a ostatní funkce pracovního účtu budou zapnuty"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Zapnout"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Tato aplikace byla vytvořena pro starší verzi systému Android a nemusí fungovat správně. Zkuste vyhledat aktualizace, případně kontaktujte vývojáře."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Zkontrolovat aktualizace"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Máte nové zprávy"</string>
@@ -2076,4 +2086,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Balíček <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> byl vložen do sekce OMEZENO"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Osobní"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Pracovní"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index eb7ad1b..10da1e7 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administratoren har gjort personlig brug af enheden utilgængelig"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Dette er en administreret enhed"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Din organisation administrerer denne enhed og kan overvåge netværkstrafik. Tryk for at se info."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Placeringsindstillinger blev ændret af din administrator"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Tryk for at se dine placeringsindstillinger."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Enheden slettes"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Administrationsappen kan ikke bruges. Enheden vil nu blive ryddet. \n\nKontakt din organisations administrator, hvis du har spørgsmål."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Udskrivning er deaktiveret af <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Denne privilegerede app | systemapp kan tage billeder og optage video med kameraet når som helst. Appen skal også have tilladelsen android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"administrere vibration"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"få adgang til chat-opkaldstjeneste"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Prøv igen."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Der er ikke registreret nogen fingeraftryk."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Denne enhed har ingen fingeraftrykslæser."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Fingeraftryk <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Ansigtet kan ikke genkendes. Prøv igen."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Du har ikke konfigureret ansigtslås."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Ansigtslås understøttes ikke på denne enhed."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Ansigt <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Tjenesten i forgrunden fra <xliff:g id="PACKAGENAME">%1$s</xliff:g>, der starter i baggrunden, vil i fremtidige R-builds ikke have tilladelse, mens den er i brug. Se go/r-bg-fgs-restriction, og indsend en fejlrapport."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Vil du bruge genvejen til Hjælpefunktioner?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Når genvejen er slået til, kan du starte en hjælpefunktion ved at trykke på begge lydstyrkeknapper i tre sekunder.\n\n Nuværende hjælpefunktion:\n<xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Du kan skifte funktion i Indstillinger &gt; Hjælpefunktioner."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Rediger genveje"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Annuller"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Deaktiver genvej"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Skal arbejdsprofilen slås til?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Dine arbejdsapps, notifikationer, data og andre funktioner til din arbejdsprofil deaktiveres"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Slå til"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Appen er ikke tilgængelig"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> er ikke tilgængelig lige nu."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Denne app er lavet til en ældre version af Android og fungerer muligvis ikke korrekt. Prøv at søge efter opdateringer, eller kontakt udvikleren."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Søg efter opdatering"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Du har nye beskeder"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> er blevet placeret i samlingen BEGRÆNSET"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personlig"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Arbejde"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 6b01af1..98d9f92 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administrator hat das Gerät zur persönlichen Nutzung abgegeben"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Dies ist ein verwaltetes Gerät"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Deine Organisation verwaltet dieses Gerät und überprüft unter Umständen den Netzwerkverkehr. Tippe hier, um weitere Informationen zu erhalten."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Standorteinstellungen durch Administrator geändert"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Tippe, um deine Standorteinstellungen anzuzeigen."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Die Daten auf deinem Gerät werden gelöscht."</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Die Admin-App kann nicht verwendet werden. Die Daten auf deinem Gerät werden nun gelöscht.\n\nBitte wende dich bei Fragen an den Administrator deiner Organisation."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Drucken wurde von <xliff:g id="OWNER_APP">%s</xliff:g> deaktiviert."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Diese privilegierte App | System-App kann jederzeit mit einer Systemkamera Bilder und Videos aufnehmen. Die App benötigt auch die Berechtigung \"android.permission.CAMERA\"."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"Vibrationsalarm steuern"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"Zugriff auf IMS-Anrufdienst"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Bitte versuche es noch einmal."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Keine Fingerabdrücke erfasst."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Dieses Gerät hat keinen Fingerabdrucksensor."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"Face Unlock ist nicht eingerichtet."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Face Unlock wird auf diesem Gerät nicht unterstützt."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Gesicht <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Der Dienst im Vordergrund von <xliff:g id="PACKAGENAME">%1$s</xliff:g>, der im Hintergrund gestartet wurde, hat in zukünftigen R-Builds keine Zugriffsberechtigung mehr während der Nutzung. Siehe dazu go/r-bg-fgs-restriction und reiche einen Fehlerbericht ein."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Verknüpfung für Bedienungshilfen verwenden?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Wenn die Verknüpfung aktiviert ist, kannst du die beiden Lautstärketasten drei Sekunden lang gedrückt halten, um eine Bedienungshilfe zu starten.\n\n Aktuelle Bedienungshilfe:\n<xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Du kannst die Bedienungshilfe unter \"Einstellungen\" &gt; \"Bedienungshilfen\" ändern."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Verknüpfungen bearbeiten"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Abbrechen"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Verknüpfung deaktivieren"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Arbeitsprofil aktivieren?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Deine geschäftlichen Apps, Benachrichtigungen, Daten und andere Funktionen des Arbeitsprofils werden aktiviert"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Aktivieren"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Diese App wurde für eine ältere Android-Version entwickelt und funktioniert möglicherweise nicht mehr richtig. Prüfe, ob Updates verfügbar sind oder kontaktiere den Entwickler."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Auf Updates prüfen"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Du hast neue Nachrichten"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> wurde in den BESCHRÄNKT-Bucket gelegt"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Privat"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Geschäftlich"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 61ca692..e5cb635 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"Οι ρυθμίσεις τοποθεσίας άλλαξαν από τον διαχειριστή"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Πατήστε, για να δείτε τις ρυθμίσεις τοποθεσίας."</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Αυτή η προνομιούχα εφαρμογή | εφαρμογή συστήματος μπορεί να τραβάει φωτογραφίες και να εγγράφει βίντεο, χρησιμοποιώντας μια κάμερα του συστήματος ανά πάσα στιγμή. Απαιτείται, επίσης, η εφαρμογή να έχει την άδεια android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"ελέγχει τη δόνηση"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"έχει πρόσβαση στην υπηρεσία κλήσεων της IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Δοκιμάστε ξανά."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Δεν έχουν καταχωριστεί δακτυλικά αποτυπώματα."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Αυτή η συσκευή δεν διαθέτει αισθητήρα δακτυλικού αποτυπώματος."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Δάχτυλο <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Αδύνατη επαλήθευση του προσώπου. Επανάληψη."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Δεν έχετε ρυθμίσει το Face Unlock."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Το Face Unlock δεν υποστηρίζεται σε αυτήν τη συσκευή."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Πρόσωπο <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Η υπηρεσία στο προσκήνιο που ξεκίνησε από το παρασκήνιο από το πακέτο <xliff:g id="PACKAGENAME">%1$s</xliff:g> δεν θα έχει άδεια πρόσβασης μόνο κατά τη χρήση σε μελλοντικές εκδόσεις R. Ανατρέξτε στο go/r-bg-fgs-restriction και υποβάλετε αναφορά σφάλματος."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Αυξάνετε την ένταση ήχου πάνω από το επίπεδο ασφαλείας;\n\nΑν ακούτε μουσική σε υψηλή ένταση για μεγάλο χρονικό διάστημα ενδέχεται να προκληθεί βλάβη στην ακοή σας."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Να χρησιμοποιείται η συντόμευση προσβασιμότητας;"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Όταν η συντόμευση είναι ενεργοποιημένη, το πάτημα και των δύο κουμπιών έντασης ήχου για 3 δευτερόλεπτα θα ξεκινήσει μια λειτουργία προσβασιμότητας.\n\n Τρέχουσα λειτουργία προσβασιμότητας:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Μπορείτε να αλλάξετε τη λειτουργία από τις Ρυθμίσεις &gt; Προσβασιμότητα."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Επεξεργασία συντομεύσεων"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Άκυρο"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Απενεργοποίηση συντόμευσης"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Ενεργοποίηση προφίλ εργασίας;"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Οι εφαρμογές, οι ειδοποιήσεις και τα δεδομένα εργασίας σας, καθώς και άλλες λειτουργίες του προφίλ εργασίας, θα ενεργοποιηθούν"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Ενεργοποίηση"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Αυτή η εφαρμογή δημιουργήθηκε για παλαιότερη έκδοση του Android και μπορεί να μην λειτουργεί σωστά. Δοκιμάστε να ελέγξετε εάν υπάρχουν ενημερώσεις ή επικοινωνήστε με τον προγραμματιστή."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Έλεγχος για ενημέρωση"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Έχετε νέα μηνύματα"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Το πακέτο <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> τοποθετήθηκε στον κάδο ΠΕΡΙΟΡΙΣΜΕΝΗΣ ΠΡΟΣΒΑΣΗΣ."</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Προσωπικό"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Εργασία"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 15a059f..7ee9846 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Admin relinquished device for personal use"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Device is managed"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Your organisation manages this device and may monitor network traffic. Tap for details."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Location settings changed by your admin"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Tap to see your location settings."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Your device will be erased"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"The admin app can\'t be used. Your device will now be erased.\n\nIf you have questions, contact your organisation\'s admin."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Printing disabled by <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"This privileged | system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"control vibration"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"access IMS call service"</string>
@@ -543,6 +546,7 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Try again."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No fingerprints enrolled."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
+    <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +590,7 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"You haven’t set up face unlock."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Face unlock is not supported on this device."</string>
+    <string name="face_error_security_update_required" msgid="5076017208528750161">"Sensor temporarily disabled."</string>
     <string name="face_name_template" msgid="3877037340223318119">"Face <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1619,7 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"The background started foreground service from <xliff:g id="PACKAGENAME">%1$s</xliff:g> will not have while-in-use permission in future R builds. Please see go/r-bg-fgs-restriction and file a bug report."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Use Accessibility Shortcut?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"When the shortcut is on, pressing both volume buttons for 3 seconds will start an accessibility feature.\n\n Current accessibility feature:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n You can change the feature in Settings &gt; Accessibility."</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="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Edit shortcuts"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Cancel"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Turn off Shortcut"</string>
@@ -1853,6 +1858,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Turn on work profile?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Your work apps, notifications, data and other work profile features will be turned on"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Turn on"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"This app was built for an older version of Android and may not work properly. Try checking for updates or contact the developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Check for update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"You have new messages"</string>
@@ -2008,4 +2015,12 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Work"</string>
+    <string name="resolver_cant_share_with_work_apps" msgid="7539495559434146897">"Can’t share with work apps"</string>
+    <string name="resolver_cant_share_with_personal_apps" msgid="8020581735267157241">"Can’t share with personal apps"</string>
+    <string name="resolver_cant_share_cross_profile_explanation" msgid="3536237105241882679">"Your IT admin blocked sharing between personal and work apps"</string>
+    <string name="resolver_turn_on_work_apps" msgid="8987359079870455469">"Turn on work apps"</string>
+    <string name="resolver_turn_on_work_apps_explanation" msgid="6322467455509618928">"Turn on work apps to access work apps and contacts"</string>
+    <string name="resolver_no_apps_available" msgid="7710339903040989654">"No apps available"</string>
+    <string name="resolver_no_apps_available_explanation" msgid="4662694431121196560">"We couldn’t find any apps"</string>
+    <string name="resolver_switch_on_work" msgid="8294542702883688533">"Switch on work"</string>
 </resources>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index f3ab25a..4ff5975 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Admin relinquished device for personal use"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Device is managed"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Your organisation manages this device and may monitor network traffic. Tap for details."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Location settings changed by your admin"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Tap to see your location settings."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Your device will be erased"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"The admin app can\'t be used. Your device will now be erased.\n\nIf you have questions, contact your organisation\'s admin."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Printing disabled by <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"This privileged | system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"control vibration"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"access IMS call service"</string>
@@ -543,6 +546,7 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Try again."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No fingerprints enrolled."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
+    <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +590,7 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"You haven’t set up face unlock."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Face unlock is not supported on this device."</string>
+    <string name="face_error_security_update_required" msgid="5076017208528750161">"Sensor temporarily disabled."</string>
     <string name="face_name_template" msgid="3877037340223318119">"Face <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1619,7 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"The background started foreground service from <xliff:g id="PACKAGENAME">%1$s</xliff:g> will not have while-in-use permission in future R builds. Please see go/r-bg-fgs-restriction and file a bug report."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Use Accessibility Shortcut?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"When the shortcut is on, pressing both volume buttons for 3 seconds will start an accessibility feature.\n\n Current accessibility feature:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n You can change the feature in Settings &gt; Accessibility."</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="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Edit shortcuts"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Cancel"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Turn off Shortcut"</string>
@@ -1853,6 +1858,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Turn on work profile?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Your work apps, notifications, data and other work profile features will be turned on"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Turn on"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"This app was built for an older version of Android and may not work properly. Try checking for updates or contact the developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Check for update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"You have new messages"</string>
@@ -2008,4 +2015,12 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Work"</string>
+    <string name="resolver_cant_share_with_work_apps" msgid="7539495559434146897">"Can’t share with work apps"</string>
+    <string name="resolver_cant_share_with_personal_apps" msgid="8020581735267157241">"Can’t share with personal apps"</string>
+    <string name="resolver_cant_share_cross_profile_explanation" msgid="3536237105241882679">"Your IT admin blocked sharing between personal and work apps"</string>
+    <string name="resolver_turn_on_work_apps" msgid="8987359079870455469">"Turn on work apps"</string>
+    <string name="resolver_turn_on_work_apps_explanation" msgid="6322467455509618928">"Turn on work apps to access work apps and contacts"</string>
+    <string name="resolver_no_apps_available" msgid="7710339903040989654">"No apps available"</string>
+    <string name="resolver_no_apps_available_explanation" msgid="4662694431121196560">"We couldn’t find any apps"</string>
+    <string name="resolver_switch_on_work" msgid="8294542702883688533">"Switch on work"</string>
 </resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 15a059f..7ee9846 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Admin relinquished device for personal use"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Device is managed"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Your organisation manages this device and may monitor network traffic. Tap for details."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Location settings changed by your admin"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Tap to see your location settings."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Your device will be erased"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"The admin app can\'t be used. Your device will now be erased.\n\nIf you have questions, contact your organisation\'s admin."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Printing disabled by <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"This privileged | system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"control vibration"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"access IMS call service"</string>
@@ -543,6 +546,7 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Try again."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No fingerprints enrolled."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
+    <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +590,7 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"You haven’t set up face unlock."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Face unlock is not supported on this device."</string>
+    <string name="face_error_security_update_required" msgid="5076017208528750161">"Sensor temporarily disabled."</string>
     <string name="face_name_template" msgid="3877037340223318119">"Face <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1619,7 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"The background started foreground service from <xliff:g id="PACKAGENAME">%1$s</xliff:g> will not have while-in-use permission in future R builds. Please see go/r-bg-fgs-restriction and file a bug report."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Use Accessibility Shortcut?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"When the shortcut is on, pressing both volume buttons for 3 seconds will start an accessibility feature.\n\n Current accessibility feature:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n You can change the feature in Settings &gt; Accessibility."</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="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Edit shortcuts"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Cancel"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Turn off Shortcut"</string>
@@ -1853,6 +1858,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Turn on work profile?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Your work apps, notifications, data and other work profile features will be turned on"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Turn on"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"This app was built for an older version of Android and may not work properly. Try checking for updates or contact the developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Check for update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"You have new messages"</string>
@@ -2008,4 +2015,12 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Work"</string>
+    <string name="resolver_cant_share_with_work_apps" msgid="7539495559434146897">"Can’t share with work apps"</string>
+    <string name="resolver_cant_share_with_personal_apps" msgid="8020581735267157241">"Can’t share with personal apps"</string>
+    <string name="resolver_cant_share_cross_profile_explanation" msgid="3536237105241882679">"Your IT admin blocked sharing between personal and work apps"</string>
+    <string name="resolver_turn_on_work_apps" msgid="8987359079870455469">"Turn on work apps"</string>
+    <string name="resolver_turn_on_work_apps_explanation" msgid="6322467455509618928">"Turn on work apps to access work apps and contacts"</string>
+    <string name="resolver_no_apps_available" msgid="7710339903040989654">"No apps available"</string>
+    <string name="resolver_no_apps_available_explanation" msgid="4662694431121196560">"We couldn’t find any apps"</string>
+    <string name="resolver_switch_on_work" msgid="8294542702883688533">"Switch on work"</string>
 </resources>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 15a059f..7ee9846 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Admin relinquished device for personal use"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Device is managed"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Your organisation manages this device and may monitor network traffic. Tap for details."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Location settings changed by your admin"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Tap to see your location settings."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Your device will be erased"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"The admin app can\'t be used. Your device will now be erased.\n\nIf you have questions, contact your organisation\'s admin."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Printing disabled by <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"This privileged | system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"control vibration"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"access IMS call service"</string>
@@ -543,6 +546,7 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Try again."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No fingerprints enrolled."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
+    <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +590,7 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"You haven’t set up face unlock."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Face unlock is not supported on this device."</string>
+    <string name="face_error_security_update_required" msgid="5076017208528750161">"Sensor temporarily disabled."</string>
     <string name="face_name_template" msgid="3877037340223318119">"Face <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1619,7 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"The background started foreground service from <xliff:g id="PACKAGENAME">%1$s</xliff:g> will not have while-in-use permission in future R builds. Please see go/r-bg-fgs-restriction and file a bug report."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Use Accessibility Shortcut?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"When the shortcut is on, pressing both volume buttons for 3 seconds will start an accessibility feature.\n\n Current accessibility feature:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n You can change the feature in Settings &gt; Accessibility."</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="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Edit shortcuts"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Cancel"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Turn off Shortcut"</string>
@@ -1853,6 +1858,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Turn on work profile?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Your work apps, notifications, data and other work profile features will be turned on"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Turn on"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"This app was built for an older version of Android and may not work properly. Try checking for updates or contact the developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Check for update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"You have new messages"</string>
@@ -2008,4 +2015,12 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Work"</string>
+    <string name="resolver_cant_share_with_work_apps" msgid="7539495559434146897">"Can’t share with work apps"</string>
+    <string name="resolver_cant_share_with_personal_apps" msgid="8020581735267157241">"Can’t share with personal apps"</string>
+    <string name="resolver_cant_share_cross_profile_explanation" msgid="3536237105241882679">"Your IT admin blocked sharing between personal and work apps"</string>
+    <string name="resolver_turn_on_work_apps" msgid="8987359079870455469">"Turn on work apps"</string>
+    <string name="resolver_turn_on_work_apps_explanation" msgid="6322467455509618928">"Turn on work apps to access work apps and contacts"</string>
+    <string name="resolver_no_apps_available" msgid="7710339903040989654">"No apps available"</string>
+    <string name="resolver_no_apps_available_explanation" msgid="4662694431121196560">"We couldn’t find any apps"</string>
+    <string name="resolver_switch_on_work" msgid="8294542702883688533">"Switch on work"</string>
 </resources>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index 871e528..bef3442 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎Admin relinquished device for personal use‎‏‎‎‏‎"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎Device is managed‎‏‎‎‏‎"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‎‎‎‎‎Your organization manages this device and may monitor network traffic. Tap for details.‎‏‎‎‏‎"</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎Location settings changed by your admin‎‏‎‎‏‎"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‎‏‏‏‏‎Tap to see your location settings.‎‏‎‎‏‎"</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‎‏‎Your device will be erased‎‏‎‎‏‎"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎The admin app can\'t be used. Your device will now be erased.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎If you have questions, contact your organization\'s admin.‎‏‎‎‏‎"</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‏‎Printing disabled by ‎‏‎‎‏‏‎<xliff:g id="OWNER_APP">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎This privileged | system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well‎‏‎‎‏‎"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎control vibration‎‏‎‎‏‎"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‎access IMS call service‎‏‎‎‏‎"</string>
@@ -543,6 +546,7 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎Try again.‎‏‎‎‏‎"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‎No fingerprints enrolled.‎‏‎‎‏‎"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‎‎This device does not have a fingerprint sensor.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‎Sensor temporarily disabled.‎‏‎‎‏‎"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‏‎‎Finger ‎‏‎‎‏‏‎<xliff:g id="FINGERID">%d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +590,7 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎Can’t verify face. Try again.‎‏‎‎‏‎"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎You haven’t set up face unlock.‎‏‎‎‏‎"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎Face unlock is not supported on this device.‎‏‎‎‏‎"</string>
+    <string name="face_error_security_update_required" msgid="5076017208528750161">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‏‎Sensor temporarily disabled.‎‏‎‎‏‎"</string>
     <string name="face_name_template" msgid="3877037340223318119">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎Face ‎‏‎‎‏‏‎<xliff:g id="FACEID">%d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1619,7 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎The background started foreground service from ‎‏‎‎‏‏‎<xliff:g id="PACKAGENAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ will not have while-in-use permission in future R builds. Please see go/r-bg-fgs-restriction and file a bugreport.‎‏‎‎‏‎"</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎Use Accessibility Shortcut?‎‏‎‎‏‎"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎When the shortcut is on, pressing both volume buttons for 3 seconds will start an accessibility feature.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Current accessibility feature:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="SERVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ You can change the feature in Settings &gt; Accessibility.‎‏‎‎‏‎"</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="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‎‏‏‏‎Edit shortcuts‎‏‎‎‏‎"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎Cancel‎‏‎‎‏‎"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎Turn off Shortcut‎‏‎‎‏‎"</string>
@@ -1853,6 +1858,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‏‎‎‎‎‎Turn on work profile?‎‏‎‎‏‎"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎Your work apps, notifications, data, and other work profile features will be turned on‎‏‎‎‏‎"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‎Turn on‎‏‎‎‏‎"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‎App is not available‎‏‎‎‏‎"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is not available right now.‎‏‎‎‏‎"</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎This app was built for an older version of Android and may not work properly. Try checking for updates, or contact the developer.‎‏‎‎‏‎"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎Check for update‎‏‎‎‏‎"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎You have new messages‎‏‎‎‏‎"</string>
@@ -2008,4 +2015,12 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ has been put into the RESTRICTED bucket‎‏‎‎‏‎"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‎‏‎Personal‎‏‎‎‏‎"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‎Work‎‏‎‎‏‎"</string>
+    <string name="resolver_cant_share_with_work_apps" msgid="7539495559434146897">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎Can’t share with work apps‎‏‎‎‏‎"</string>
+    <string name="resolver_cant_share_with_personal_apps" msgid="8020581735267157241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‏‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‎Can’t share with personal apps‎‏‎‎‏‎"</string>
+    <string name="resolver_cant_share_cross_profile_explanation" msgid="3536237105241882679">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‎‏‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‎Your IT admin blocked sharing between personal and work apps‎‏‎‎‏‎"</string>
+    <string name="resolver_turn_on_work_apps" msgid="8987359079870455469">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‏‎Turn on work apps‎‏‎‎‏‎"</string>
+    <string name="resolver_turn_on_work_apps_explanation" msgid="6322467455509618928">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎‎‎‎Turn on work apps to access work apps &amp; contacts‎‏‎‎‏‎"</string>
+    <string name="resolver_no_apps_available" msgid="7710339903040989654">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‎‏‎‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎No apps available‎‏‎‎‏‎"</string>
+    <string name="resolver_no_apps_available_explanation" msgid="4662694431121196560">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎We couldn’t find any apps‎‏‎‎‏‎"</string>
+    <string name="resolver_switch_on_work" msgid="8294542702883688533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎Switch on work‎‏‎‎‏‎"</string>
 </resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 1cb9fde..29318bd 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"El administrador no permite hacer un uso personal del dispositivo"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Dispositivo administrado"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Tu organización administra este dispositivo y es posible que controle el tráfico de red. Presiona para obtener más información."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Tu administrador cambió la configuración de la ubicación"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Presiona para ver la configuración de la ubicación."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Se borrarán los datos del dispositivo"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"No se puede usar la app de administrador. Ahora se borrará tu dispositivo.\n\nSi tienes preguntas, comunícate con el administrador de tu organización."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> inhabilitó la impresión."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Esta privilegiada | app del sistema puede tomar fotos y grabar videos con una cámara del sistema en cualquier momento. También se requiere que la app posea el permiso android.permission.CAMERA."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"controlar la vibración"</string>
     <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 vibrador."</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="permlab_accessImsCallService" msgid="442192920714863782">"acceder al servicio IMS para realizar llamadas"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Vuelve a intentarlo."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No se registraron huellas digitales."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo no tiene sensor de huellas digitales."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"No se pudo verificar la cara. Vuelve a intentarlo."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"No configuraste el Desbloqueo facial."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"No se admite el Desbloqueo facial en este dispositivo."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Rostro <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1217,7 +1224,7 @@
     <string name="dump_heap_ready_text" msgid="5849618132123045516">"Tienes un volcado del montón del proceso de <xliff:g id="PROC">%1$s</xliff:g> disponible para compartir. Ten cuidado: Es posible que este volcado contenga información personal sensible (incluido el contenido que hayas escrito) a la que puede acceder el proceso."</string>
     <string name="sendText" msgid="493003724401350724">"Seleccionar una acción para el texto"</string>
     <string name="volume_ringtone" msgid="134784084629229029">"Volumen del timbre"</string>
-    <string name="volume_music" msgid="7727274216734955095">"Volumen de los medios"</string>
+    <string name="volume_music" msgid="7727274216734955095">"Volumen multimedia"</string>
     <string name="volume_music_hint_playing_through_bluetooth" msgid="2614142915948898228">"Reproduciendo a través de Bluetooth"</string>
     <string name="volume_music_hint_silent_ringtone_selected" msgid="1514829655029062233">"Tono de silencio establecido"</string>
     <string name="volume_call" msgid="7625321655265747433">"Volumen de llamadas entrantes"</string>
@@ -1228,7 +1235,7 @@
     <string name="volume_icon_description_bluetooth" msgid="7540388479345558400">"Volumen de Bluetooth"</string>
     <string name="volume_icon_description_ringer" msgid="2187800636867423459">"Volumen del tono de llamada"</string>
     <string name="volume_icon_description_incall" msgid="4491255105381227919">"Volumen de la llamada"</string>
-    <string name="volume_icon_description_media" msgid="4997633254078171233">"Volumen de los medios"</string>
+    <string name="volume_icon_description_media" msgid="4997633254078171233">"Volumen multimedia"</string>
     <string name="volume_icon_description_notification" msgid="579091344110747279">"Volumen de notificación"</string>
     <string name="ringtone_default" msgid="9118299121288174597">"Tono predeterminado"</string>
     <string name="ringtone_default_with_actual" msgid="2709686194556159773">"Predeterminado (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"El servicio que pasó del segundo al primer plano de <xliff:g id="PACKAGENAME">%1$s</xliff:g> no tendrá permiso durante el uso en las próximas compilaciones de R. Ve a go/r-bg-fgs-restriction y envía un informe de errores."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"¿Usar acceso directo de accesibilidad?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Cuando el acceso directo está activado, puedes presionar los botones de volumen durante 3 segundos para iniciar una función de accesibilidad.\n\n Función de accesibilidad actual:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Puedes cambiar la función en Configuración &gt; Accesibilidad."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Editar accesos directos"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Cancelar"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Desactivar acceso directo"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"¿Activar el perfil de trabajo?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Se activaran las apps de trabajo, los datos, las notificaciones y otras funciones del perfil de trabajo"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Activar"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"La app no está disponible"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> no está disponible en este momento."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Esta app se creó para una versión anterior de Android y es posible que no funcione correctamente. Busca actualizaciones o comunícate con el programador."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Buscar actualización"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tienes mensajes nuevos"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Se colocó <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> en el depósito RESTRICTED"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Trabajo"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index d8509a3..5db4f42 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"El administrador no permite hacer un uso personal del dispositivo"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"El dispositivo está administrado"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Tu organización administra este dispositivo y puede supervisar el tráfico de red. Toca la notificación para obtener más información."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Tu administrador ha cambiado los ajustes de ubicación-"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Toca para ver tus ajustes de ubicación."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Tu dispositivo se borrará"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"No se puede utilizar la aplicación de administración. Se borrarán todos los datos del dispositivo.\n\nSi tienes alguna pregunta, ponte en contacto con el administrador de tu organización."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> ha inhabilitado la impresión."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Esta aplicación del sistema tiene permiso para hacer fotos y grabar vídeos en cualquier momento con una cámara del sistema, aunque debe tener también el permiso android.permission.CAMERA para hacerlo"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"controlar la vibración"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"acceder al servicio de llamadas IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Vuelve a intentarlo."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No se ha registrado ninguna huella digital."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo no tiene sensor de huellas digitales."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"No has configurado el desbloqueo facial."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"El desbloqueo facial no está disponible en este dispositivo."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Cara <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -802,7 +809,7 @@
     <string name="keyguard_password_enter_pin_password_code" msgid="7792964196473964340">"Introduce el código PIN para desbloquear."</string>
     <string name="keyguard_password_wrong_pin_code" msgid="8583732939138432793">"Código PIN incorrecto"</string>
     <string name="keyguard_label_text" msgid="3841953694564168384">"Para desbloquear el teléfono, pulsa la tecla de menú y, a continuación, pulsa 0."</string>
-    <string name="emergency_call_dialog_number_for_display" msgid="2978165477085612673">"Número de emergencia"</string>
+    <string name="emergency_call_dialog_number_for_display" msgid="2978165477085612673">"Llamada de emergencia"</string>
     <string name="lockscreen_carrier_default" msgid="6192313772955399160">"Sin servicio"</string>
     <string name="lockscreen_screen_locked" msgid="7364905540516041817">"Pantalla bloqueada"</string>
     <string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"Pulsa la tecla de menú para desbloquear el teléfono o realizar una llamada de emergencia."</string>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"El servicio en primer plano que se inició en segundo plano en <xliff:g id="PACKAGENAME">%1$s</xliff:g> no tendrá permisos en compilaciones R futuras mientras se estén usando. Ve a go/r-bg-fgs-restriction y envía un informe de errores."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"¿Utilizar acceso directo de accesibilidad?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Si el acceso directo está activado, pulsa los dos botones de volumen durante tres segundos para iniciar una función de accesibilidad.\n\n Función de accesibilidad actual:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Puedes cambiar la función en Ajustes &gt; Accesibilidad."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Editar accesos directos"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Cancelar"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Desactivar acceso directo"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"¿Activar el perfil de trabajo?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Tus aplicaciones, notificaciones, datos y otras funciones del perfil de trabajo se activarán"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Activar"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"La aplicación no está disponible"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"En estos momentos, <xliff:g id="APP_NAME">%1$s</xliff:g> no está disponible."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Esta aplicación se ha diseñado para una versión anterior de Android y es posible que no funcione correctamente. Busca actualizaciones o ponte en contacto con el desarrollador."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Buscar actualizaciones"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tienes mensajes nuevos"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> se ha incluido en el grupo de restringidos"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Trabajo"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 2148c09..2c98716 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administraator keelas seadme isikliku kasutamise"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Seade on hallatud"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Teie organisatsioon haldab seda seadet ja võib jälgida võrguliiklust. Puudutage üksikasjade vaatamiseks."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Administraator muutis teie asukohaseadeid"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Puudutage oma asukohaseadete nägemiseks."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Seade kustutatakse"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Administraatori rakendust ei saa kasutada. Teie seade tühjendatakse nüüd.\n\nKui teil on küsimusi, võtke ühendust organisatsiooni administraatoriga."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Rakendus <xliff:g id="OWNER_APP">%s</xliff:g> on printimise keelanud."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"See privileegidega | süsteemirakendus saab süsteemi kaameraga alati pilte ja videoid jäädvustada. Rakendusel peab olema ka luba android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"juhtige vibreerimist"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"juurdepääs IMS-kõneteenusele"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Proovige uuesti."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Ühtegi sõrmejälge pole registreeritud."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Selles seadmes pole sõrmejäljeandurit."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Sõrm <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nägu ei saa kinnitada. Proovige uuesti."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Face Unlocki ei ole seadistatud."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Seade ei toeta Face Unlocki."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Nägu <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Taustal käitatud esiplaanil oleval teenusel paketist <xliff:g id="PACKAGENAME">%1$s</xliff:g> ei ole tulevastes R-järkudes luba „kui kasutuses”. Vaadake saiti go/r-bg-fgs-restriction ja esitage veaaruanne."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Kas kasutada juurdepääsetavuse otseteed?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Kui otsetee on sisse lülitatud, käivitab mõlema helitugevuse nupu kolm sekundit all hoidmine juurdepääsetavuse funktsiooni.\n\n Praegune juurdepääsetavuse funktsioon:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Saate seda funktsiooni muuta valikutega Seaded &gt; Juurdepääsetavus."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Muuda otseteid"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Tühista"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Lülita otsetee välja"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Kas lülitada tööprofiil sisse?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Teie töörakendused, märguanded, andmed ja muud tööprofiili funktsioonid lülitatakse sisse"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Lülita sisse"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"See rakendus on loodud Androidi vanema versiooni jaoks ega pruugi õigesti töötada. Otsige värskendusi või võtke ühendust arendajaga."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Otsi värskendust"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Teile on uusi sõnumeid"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> on lisatud salve PIIRANGUTEGA"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Isiklik"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Töö"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 07bde5e..8e247fc 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -191,6 +191,10 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Erabilera pertsonalerako utzi du gailua administratzaileak"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Jabeak kudeatzen du gailua"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Erakundeak kudeatzen du gailua eta baliteke sareko trafikoa gainbegiratzea. Sakatu hau xehetasunak ikusteko."</string>
+    <!-- no translation found for location_changed_notification_title (4119726617105166830) -->
+    <skip />
+    <!-- no translation found for location_changed_notification_text (198907268219396399) -->
+    <skip />
     <string name="factory_reset_warning" msgid="6858705527798047809">"Gailuko datuak ezabatu egingo dira"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Ezin da erabili administratzeko aplikazioa. Ezabatu egingo da gailuko eduki guztia.\n\nZalantzarik baduzu, jarri erakundeko administratzailearekin harremanetan."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> aplikazioak desgaitu egin du inprimatzeko aukera."</string>
@@ -429,6 +433,8 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Pribilegioa duen sistema-aplikazio honek edonoiz erabil dezake kamera argazkiak ateratzeko eta bideoak grabatzeko. Halaber, android.permission.CAMERA baimena izan behar du aplikazioak."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"kontrolatu dardara"</string>
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Bibragailua kontrolatzeko aukera ematen die aplikazioei."</string>
+    <!-- no translation found for permdesc_vibrator_state (7050024956594170724) -->
+    <skip />
     <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. Aplikazio gaiztoek erabil dezakete zuk berretsi gabeko deiak eginda gastuak eragiteko."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"atzitu IMS dei-zerbitzua"</string>
@@ -517,7 +523,7 @@
     <string name="permdesc_imagesWrite" msgid="5195054463269193317">"Argazki-bilduma aldatzeko baimena ematen die aplikazioei."</string>
     <string name="permlab_mediaLocation" msgid="7368098373378598066">"multimedia-edukien bildumako kokapena irakurri"</string>
     <string name="permdesc_mediaLocation" msgid="597912899423578138">"Multimedia-edukien bildumako kokapena irakurtzeko baimena ematen die aplikazioei."</string>
-    <string name="biometric_dialog_default_title" msgid="5284880398508155088">"Egiaztatu zu zarela"</string>
+    <string name="biometric_dialog_default_title" msgid="5284880398508155088">"Egiaztatu zeu zarela"</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>
@@ -543,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Saiatu berriro."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Ez da erregistratu hatz-markarik."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Gailu honek ez du hatz-marken sentsorerik."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g> hatza"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +594,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Ezin da egiaztatu aurpegia. Saiatu berriro."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Ez duzu konfiguratu aurpegiaren bidez desblokeatzeko aukera."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Gailu honek ez du onartzen aurpegiaren bidez desblokeatzea."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> aurpegia"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1624,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> webgunearen atzeko planoak hasitako aurreko planoko zerbitzuak ez du izango erabili bitarteko baimenik etorkizuneko R konpilazioetan. Joan go/r-bg-fgs-restriction atalera eta egin akatsaren txostena."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Erabilerraztasun-lasterbidea erabili nahi duzu?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Lasterbidea aktibatuta dagoenean, bi bolumen-botoiak hiru segundoz sakatuta abiaraziko da erabilerraztasun-eginbidea.\n\n Uneko erabilerraztasun-eginbidea:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Eginbidea aldatzeko, joan Ezarpenak &gt; Erabilerraztasuna atalera."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Editatu lasterbideak"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Utzi"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Desaktibatu lasterbidea"</string>
@@ -1853,6 +1864,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Laneko profila aktibatu?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Laneko aplikazioak, jakinarazpenak, datuak eta laneko profileko bestelako eginbideak aktibatuko dira"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Aktibatu"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Aplikazioa ez dago erabilgarri"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ez dago erabilgarri une honetan."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Aplikazioa Android-en bertsio zaharrago baterako sortu zenez, baliteke behar bezala ez funtzionatzea. Bilatu eguneratzerik baden, edo jarri garatzailearekin harremanetan."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Bilatu eguneratzeak"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Mezu berriak dituzu"</string>
@@ -2008,4 +2021,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Murriztuen edukiontzian ezarri da <xliff:g id="PACKAGE_NAME">%1$s</xliff:g>"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Pertsonala"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Lanekoa"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index d65357b..c603da3 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"سرپرست شما تنظیمات مکان را تغییر داده است"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"برای مشاهده تنظیمات مکان ضربه بزنید."</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"‏این برنامه سیستم که دارای امتیاز دسترسی است می‌تواند با استفاده از دوربین سیستم در هر زمانی عکس‌برداری و فیلم‌برداری کند. برنامه به مجوز android.permission.CAMERA هم نیاز دارد."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"کنترل لرزش"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"‏دسترسی به سرویس تماس IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"دوباره امتحان کنید."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"اثر انگشتی ثبت نشده است."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"این دستگاه حسگر اثر انگشت ندارد."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"انگشت <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"چهره تأیید نشد. دوباره امتحان کنید."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"«بازگشایی با چهره» را راه‌اندازی نکرده‌اید."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"«بازگشایی با چهره» در این دستگاه پشتیبانی نمی‌شود."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"چهره <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"‏سرویس پیش‌نمای <xliff:g id="PACKAGENAME">%1$s</xliff:g>، که در پس‌زمینه شروع شده، در ساخت‌های آتی R اجازهٔ حین استفاده نخواهد داشت. لطفاً به go/r-bg-fgs-restriction بروید و گزارش اشکال ارسال کنید."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"میزان صدا را به بالاتر از حد توصیه شده افزایش می‌دهید؟\n\nگوش دادن به صداهای بلند برای مدت طولانی می‌تواند به شنوایی‌تان آسیب وارد کند."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"از میان‌بر دسترس‌پذیری استفاده شود؟"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"وقتی میان‌بر روشن است،‌ اگر هر دو دکمه صدا را ۳ ثانیه فشار دهید یکی از قابلیت‌های دسترس‌پذیری شروع می‌شود.\n\n قابلیت دسترس‌پذیری کنونی:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n می‌توانید در «تنظیمات &gt; دسترس‌پذیری»، قابلیت را تغییر دهید."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"ویرایش میان‌برها"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"لغو"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"خاموش کردن میان‌بر"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"نمایه کاری روشن شود؟"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"برنامه‌ها، اعلان‌ها، داده‌ها و سایر قابلیت‌های نمایه کاری شما روشن خواهد شد"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"روشن کردن"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"‏این برنامه برای نسخه قدیمی‌تری از Android ساخته شده است و ممکن است درست کار نکند. وجود به‌روزرسانی را بررسی کنید یا با برنامه‌نویس تماس بگیرید."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"بررسی وجود به‌روزرسانی"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"پیام‌های جدیدی دارید"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> در سطل «محدودشده» قرار گرفت"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"شخصی"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"کاری"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 17b3d33..5ee67d95 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Järjestelmänvalvoja luovutti laitteen henkilökohtaiseen käyttöön"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Hallinnoitu laite"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Organisaatiosi hallinnoi tätä laitetta ja voi tarkkailla verkkoliikennettä. Katso lisätietoja napauttamalla."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Järjestelmänvalvoja muutti sijaintiasetuksia"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Katso sijaintiasetukset napauttamalla."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Laitteen tiedot poistetaan"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Hallintasovellusta ei voi käyttää. Laitteen tiedot pyyhitään.\n\nPyydä ohjeita järjestelmänvalvojaltasi."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> on poistanut tulostuksen käytöstä."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Tämä käyttöoikeuden saanut | järjestelmäsovellus voi ottaa järjestelmän kameralla kuvia ja videoita koska tahansa. Sovelluksella on oltava myös android.permission.CAMERA-käyttöoikeus"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"hallita värinää"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"pikaviestipalvelun puhelukäyttöoikeus"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Yritä uudelleen."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Sormenjälkiä ei ole otettu käyttöön."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Laitteessa ei ole sormenjälkitunnistinta."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Sormi <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Kasvoja ei voi vahvistaa. Yritä uudelleen."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Et ole määrittänyt Face Unlockia."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Tämä laite ei tue Face Unlockia."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Kasvot <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Taustalla aloitettu etualan palvelu (<xliff:g id="PACKAGENAME">%1$s</xliff:g>) ei ole käytön aikana sallittu R:n tulevissa versioissa. Lue go/r-bg-fgs-restriction ja lähetä virheraportti."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Käytetäänkö esteettömyyden pikanäppäintä?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Kun pikanäppäin on käytössä, voit käynnistää esteettömyystoiminnon pitämällä molempia äänenvoimakkuuspainikkeita painettuna kolmen sekunnin ajan.\n\n Tällä hetkellä valittu esteettömyystoiminto:\n<xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Voit vaihtaa toimintoa valitsemalla Asetukset &gt; Esteettömyys."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Muokkaa pikakuvakkeita"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Peruuta"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Poista pikanäppäin käytöstä"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Otetaanko työprofiili käyttöön?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Työsovellukset, ‑ilmoitukset, ‑tiedot ja muut työprofiiliominaisuudet otetaan käyttöön"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Ota käyttöön"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Sovellus ei ole käytettävissä"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei ole nyt käytettävissä."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Tämä sovellus on suunniteltu vanhemmalle Android-versiolle eikä välttämättä toimi oikein. Kokeile tarkistaa päivitykset tai ottaa yhteyttä kehittäjään."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Tarkista päivitykset"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Sinulle on uusia viestejä"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> on nyt rajoitettujen ryhmässä"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Henkilökohtainen"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Työ"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 45b8613..7c4dd03 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -191,6 +191,10 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"L\'administrateur a libéré l\'appareil pour un usage personnel"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"L\'appareil est géré"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Votre organisation gère cet appareil et peut surveiller le trafic réseau. Touchez ici pour obtenir plus d\'information."</string>
+    <!-- no translation found for location_changed_notification_title (4119726617105166830) -->
+    <skip />
+    <!-- no translation found for location_changed_notification_text (198907268219396399) -->
+    <skip />
     <string name="factory_reset_warning" msgid="6858705527798047809">"Le contenu de votre appareil sera effacé"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Impossible d\'utiliser l\'application d\'administration. Les données de votre appareil vont maintenant être effacées.\n\nSi vous avez des questions, communiquez avec l\'administrateur de votre organisation."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Impression désactivée par <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +433,8 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Cette application privilégiée | système peut prendre des photos ou filmer des vidéos à l\'aide d\'un appareil photo système en tout temps. L\'application doit également posséder l\'autorisation android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"gérer le vibreur"</string>
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Permet à l\'application de gérer le vibreur de l\'appareil."</string>
+    <!-- no translation found for permdesc_vibrator_state (7050024956594170724) -->
+    <skip />
     <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="permlab_accessImsCallService" msgid="442192920714863782">"accéder au service d\'appel IMS"</string>
@@ -543,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Réessayer."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Aucune empreinte digitale enregistrée."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Cet appareil ne possède pas de capteur d\'empreintes digitales."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Doigt <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +594,8 @@
     <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="7369928733504691611">"Vous n\'avez pas config. le déverr. par reconn. faciale."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Cet appar. ne prend pas en charge le déverr. par reconn. faciale."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Visage <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1624,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Le service de premier plan qui a démarré en arrière-plan provenant de <xliff:g id="PACKAGENAME">%1$s</xliff:g> ne disposera pas de l\'autorisation pendant l\'utilisation dans les futures versions R. Veuillez accéder à go/r-bg-fgs-restriction et envoyer un rapport de bogue."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Utiliser le raccourci d\'accessibilité?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Quand le raccourci est activé, appuyez sur les deux boutons de volume pendant trois secondes pour lancer une fonctionnalité d\'accessibilité.\n\n Fonctionnalité d\'accessibilité utilisée actuellement :\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Vous pouvez changer de fonctionnalité sous Paramètres &gt; Accessibilité."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Modifier les raccourcis"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Annuler"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Désactiver le raccourci"</string>
@@ -1853,6 +1864,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Activer le profil professionnel?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Vos applications professionnelles, vos notifications, vos données et les autres fonctionnalités de profil professionnel seront activées"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Activer"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Cette application a été conçue pour une ancienne version d\'Android et pourrait ne pas fonctionner correctement. Essayez de vérifier les mises à jour ou communiquez avec son concepteur."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Vérifier la présence de mises à jour"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Vous avez de nouveaux messages"</string>
@@ -2008,4 +2021,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> a été placé dans le compartiment RESTREINT"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personnel"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Bureau"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index c646aeb..9d2e267 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"L\'administrateur a mis l\'appareil à disposition pour un usage personnel"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"L\'appareil est géré"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Votre organisation gère cet appareil et peut surveiller le trafic réseau. Appuyez ici pour obtenir plus d\'informations."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Paramètres de localisation modifiés par l\'administrateur"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Appuyez pour afficher les paramètres de localisation."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Les données de votre appareil vont être effacées"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Impossible d\'utiliser l\'application d\'administration. Les données de votre appareil vont maintenant être effacées.\n\nSi vous avez des questions, contactez l\'administrateur de votre organisation."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Impression désactivée par <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Cette application privilégiée ou système peut utiliser une caméra photo système pour prendre des photos et enregistrer des vidéos à tout moment. Pour cela, l\'application doit également disposer de l\'autorisation android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"contrôler le vibreur"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"accéder au service d\'appel IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Veuillez réessayer."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Aucune empreinte digitale enregistrée."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Aucun lecteur d\'empreinte digitale n\'est installé sur cet appareil."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Doigt <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Impossible de valider votre visage. Réessayez."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Face Unlock n\'est pas configuré."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Face Unlock n\'est pas compatible avec cet appareil."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Visage <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Le service de premier plan qui a démarré en arrière-plan et provenant de <xliff:g id="PACKAGENAME">%1$s</xliff:g> ne disposera pas de l\'autorisation \"pendant l\'utilisation\" dans les futurs builds R. Veuillez accéder à go/r-bg-fgs-restriction et envoyer un rapport de bug."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Utiliser le raccourci d\'accessibilité ?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Quand le raccourci est activé, appuyez sur les deux boutons de volume pendant trois secondes pour lancer une fonctionnalité d\'accessibilité.\n\n Fonctionnalité d\'accessibilité utilisée actuellement :\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Vous pouvez changer de fonctionnalité dans Paramètres &gt; Accessibilité."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Modifier les raccourcis"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Annuler"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Désactiver le raccourci"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Activer profil professionnel ?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Vos applications professionnelles, notifications, données et d\'autres fonctionnalités de votre profil professionnel seront activées"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Activer"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Application non disponible"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> n\'est pas disponible pour le moment."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Cette application a été conçue pour une ancienne version d\'Android et risque de ne pas fonctionner correctement. Recherchez des mises à jour ou contactez le développeur."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Rechercher une mise à jour"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Vous avez de nouveaux messages"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> a été placé dans le bucket RESTRICTED"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personnel"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Professionnel"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index 2a2d7c4..0170f16 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"O administrador renunciou ao dispositivo para uso persoal"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"O dispositivo está xestionado"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"A túa organización xestiona este dispositivo e pode controlar o tráfico de rede. Toca para obter máis detalles."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"O administrador cambiou a configuración de localización"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Toca para ver a configuración de localización."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Borrarase o teu dispositivo"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Non se pode utilizar a aplicación de administración. Borrarase o teu dispositivo.\n\nSe tes preguntas, contacta co administrador da organización."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> desactivou a impresión."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Esta aplicación do sistema con privilexios pode utilizar unha cámara do sistema en calquera momento para sacar fotos e gravar vídeos. Require que a aplicación tamén teña o permiso android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"controlar a vibración"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"acceso ao servizo de chamadas de IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Téntao de novo."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Non se rexistraron impresións dixitais."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo non ten sensor de impresión dixital."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"Non configuraches o desbloqueo facial."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Este dispositivo non admite o desbloqueo facial."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Cara <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Nas futuras compilacións R, o servizo en primeiro plano iniciado en segundo plano desde <xliff:g id="PACKAGENAME">%1$s</xliff:g> non terá permiso mentres estea en uso. Consulta go/r-bg-fgs-restriction e presenta un informe de erros."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Queres utilizar o atallo de accesibilidade?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Cando o atallo está activado, podes premer os dous botóns de volume durante 3 segundos para iniciar unha función de accesibilidade.\n\n Función de accesibilidade actual:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Podes cambiar a función en Configuración &gt; Accesibilidade."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Editar atallos"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Cancelar"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Desactivar atallo"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Activar o perfil de traballo?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Activaranse as túas aplicacións de traballo, as notificacións, os datos e outras funcións do perfil de traballo"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Activar"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"A aplicación non está dispoñible"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"A aplicación <xliff:g id="APP_NAME">%1$s</xliff:g> non está dispoñible neste momento."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Esta aplicación deseñouse para unha versión anterior de Android e quizais non funcione correctamente. Proba a buscar actualizacións ou contacta co programador."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Buscar actualización"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tes mensaxes novas"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> incluíuse no grupo RESTRINXIDO"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Persoal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Traballo"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index aab09f7..8b0b374 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -191,6 +191,10 @@
     <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>
+    <!-- no translation found for location_changed_notification_title (4119726617105166830) -->
+    <skip />
+    <!-- no translation found for location_changed_notification_text (198907268219396399) -->
+    <skip />
     <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>
@@ -429,6 +433,8 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"આ વિશેષાધિકૃત | સિસ્ટમ ઍપ કોઈપણ સમયે સિસ્ટમ કૅમેરાનો ઉપયોગ કરીને ફોટા લઈ અને વીડિયો રેકોર્ડ કરી શકે છે. ઍપ દ્વારા આયોજિત કરવા માટે android.permission.CAMERAની પરવાનગી પણ જરૂરી છે"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"વાઇબ્રેશન નિયંત્રિત કરો"</string>
     <string name="permdesc_vibrate" msgid="8733343234582083721">"એપ્લિકેશનને વાઇબ્રેટરને નિયંત્રિત કરવાની મંજૂરી આપે છે."</string>
+    <!-- no translation found for permdesc_vibrator_state (7050024956594170724) -->
+    <skip />
     <string name="permlab_callPhone" msgid="1798582257194643320">"સીધા જ ફોન નંબર્સ પર કૉલ કરો"</string>
     <string name="permdesc_callPhone" msgid="5439809516131609109">"એપ્લિકેશનને તમારા હસ્તક્ષેપ વિના ફોન નંબર્સ પર કૉલ કરવાની મંજૂરી આપે છે. આ અનપેક્ષિત શુલ્ક અથવા કૉલ્સમાં પરિણમી શકે છે. નોંધો કે આ એપ્લિકેશનને કટોકટીના નંબર્સ પર કૉલ કરવાની મંજૂરી આપતું નથી. દુર્ભાવનાપૂર્ણ ઍપ્લિકેશનો તમારી પુષ્ટિ વિના કૉલ્સ કરીને તમારા પૈસા ખર્ચ કરી શકે છે."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS કૉલ સેવા ઍક્સેસ કરો"</string>
@@ -543,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ફરી પ્રયાસ કરો."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"કોઈ ફિંગરપ્રિન્ટની નોંધણી કરવામાં આવી નથી."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"આ ડિવાઇસમાં કોઈ ફિંગરપ્રિન્ટ સેન્સર નથી."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"આંગળી <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +594,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ચહેરો ચકાસી શકાતો નથી. ફરી પ્રયાસ કરો."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"તમે ફેસ અનલૉકનું સેટઅપ કર્યું નથી."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"આ ડિવાઇસ પર ફેસ અનલૉક કરવાની સુવિધા નથી."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"ચહેરાનું <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1624,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"બૅકગ્રાઉન્ડમાં શરૂ થયેલી <xliff:g id="PACKAGENAME">%1$s</xliff:g>ની ફોરગ્રાઉન્ડ સેવા પાસે ભવિષ્યની R બિલ્ડમાં ઉપયોગમાં હોય તે સમયની પરવાનગી હશે નહીં. કૃપા કરીને go/r-bg-fgs-restriction જુઓ અને ભૂલનો અહેવાલ દાખલ કરો."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ભલામણ કરેલ સ્તરની ઉપર વૉલ્યૂમ વધાર્યો?\n\nલાંબા સમય સુધી ઊંચા અવાજે સાંભળવું તમારી શ્રવણક્ષમતાને નુકસાન પહોંચાડી શકે છે."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ઍક્સેસિબિલિટી શૉર્ટકટનો ઉપયોગ કરીએ?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"જ્યારે શૉર્ટકટ ચાલુ હોય, ત્યારે બન્ને વૉલ્યૂમ બટનને 3 સેકન્ડ સુધી દબાવી રાખવાથી ઍક્સેસિબિલિટી સુવિધા શરૂ થઈ જશે.\n\n વર્તમાન ઍક્સેસિબિલિટી સુવિધા:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n તમે સેટિંગ્સ &gt; ઍક્સેસિબિલિટીમાં જઈને આ સુવિધા બદલી શકો છો."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"શૉર્ટકટમાં ફેરફાર કરો"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"રદ કરો"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"શૉર્ટકટ બંધ કરો"</string>
@@ -1853,6 +1864,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"કાર્યાલયની પ્રોફાઇલ ચાલુ કરીએ?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"તમારી કાર્યાલયની ઍપ, નોટિફિકેશન, ડેટા અને અન્ય કાર્યાલયની પ્રોફાઇલ સુવિધાઓ ચાલુ કરવામાં આવશે"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"ચાલુ કરો"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"આ ઍપ Androidના જૂના વર્ઝન માટે બનાવવામાં આવ્યું હતું અને તે કદાચ તે યોગ્ય રીતે કાર્ય કરી શકશે નહીં. અપડેટ માટે તપાસવાનો પ્રયાસ કરો અથવા ડેવલપરનો સંપર્ક કરો."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"અપડેટ માટે તપાસો"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"તમારી પાસે નવા સંદેશા છે"</string>
@@ -2008,4 +2021,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>ને પ્રતિબંધિત સમૂહમાં મૂકવામાં આવ્યું છે"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"વ્યક્તિગત"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"કાર્યાલય"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-h480dp/bools.xml b/core/res/res/values-h480dp/bools.xml
new file mode 100644
index 0000000..65e3ae6
--- /dev/null
+++ b/core/res/res/values-h480dp/bools.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>
+    <bool name="sharesheet_show_content_preview">true</bool>
+</resources>
\ No newline at end of file
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index e1bb060..989cb15 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -191,6 +191,10 @@
     <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>
+    <!-- no translation found for location_changed_notification_title (4119726617105166830) -->
+    <skip />
+    <!-- no translation found for location_changed_notification_text (198907268219396399) -->
+    <skip />
     <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>
@@ -429,6 +433,8 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"यह सिस्टम ऐप्लिकेशन तस्वीरें लेने और वीडियो रिकॉर्ड करने के लिए जब चाहे, सिस्टम के कैमरे का इस्तेमाल कर सकता है. ऐप्लिकेशन को android.permission.CAMERA की अनुमति देना भी ज़रूरी है"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"कंपन (वाइब्रेशन) को नियंत्रित करें"</string>
     <string name="permdesc_vibrate" msgid="8733343234582083721">"ऐप्स को कंपनकर्ता नियंत्रित करने देता है."</string>
+    <!-- no translation found for permdesc_vibrator_state (7050024956594170724) -->
+    <skip />
     <string name="permlab_callPhone" msgid="1798582257194643320">"फ़ोन नंबर पर सीधे कॉल करें"</string>
     <string name="permdesc_callPhone" msgid="5439809516131609109">"ऐप्लिकेशन को आपके हस्‍तक्षेप के बिना फ़ोन नंबर पर कॉल करने देता है. इसके परिणाम अनचाहे शुल्‍क या कॉल हो सकते हैं. ध्यान दें कि यह ऐप्लिकेशन को आपातकालीन नंबर पर कॉल नहीं करने देता. नुकसान पहुंचाने वाला ऐप्लिकेशन आपकी पुष्टि के बिना कॉल करके आपके पैसे खर्च करवा सकते हैं."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS कॉल सेवा ऐक्‍सेस करें"</string>
@@ -543,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"फिर से प्रयास करें."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"कोई फ़िंगरप्रिंट रजिस्टर नहीं किया गया है."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"इस डिवाइस में फ़िंगरप्रिंट सेंसर नहीं है."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"फ़िंगरप्रिंट <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +594,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"चेहरा नहीं पहचान पा रहे. फिर से कोशिश करें."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"आपने \'मालिक का चेहरा पहचानकर अनलॉक\' सेट नहीं की है."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"इस डिवाइस पर \'मालिक का चेहरा पहचानकर अनलॉक\' काम नहीं करती है."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"चेहरा <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1624,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g>से बैकग्राउंड में शुरू की गई फ़ॉरग्राउंड सेवा के लिए, भविष्य के R बिल्ड में \'इस्तेमाल के समय अनुमति दें\' की सुविधा नहीं होगी. कृपया go/r-bg-fgs-restriction देखें और गड़बड़ी की शिकायत करें."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"वॉल्यूम को सुझाए गए स्तर से ऊपर बढ़ाएं?\n\nअत्यधिक वॉल्यूम पर ज़्यादा समय तक सुनने से आपकी सुनने की क्षमता को नुकसान हो सकता है."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"सुलभता शॉर्टकट का इस्तेमाल करना चाहते हैं?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"इस शॉर्टकट के चालू होने पर, दोनों वॉल्यूम बटनों को 3 सेकंड तक दबाने से सुलभता सुविधा शुरू हो जाएगी.\n\n मौजूदा सुलभता सुविधा:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n आप इस सुविधा को सेटिंग &gt; सुलभता पर जाकर बदल सकते हैं."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"शॉर्टकट में बदलाव करें"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"अभी नहीं"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"शॉर्टकट बंद करें"</string>
@@ -1853,6 +1864,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"वर्क प्रोफ़ाइल चालू करें?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"आपके काम से जुड़े ऐप्लिकेशन, सूचनाएं, डेटा और वर्क प्रोफ़ाइल से जुड़ी दूसरी सुविधाएं चालू हो जाएंगी"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"चालू करें"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"यह ऐप्लिकेशन Android के पुराने वर्शन के लिए बनाया गया था, इसलिए हो सकता है कि यह सही से काम न करे. देखें कि अपडेट मौजूद हैं या नहीं, या फिर डेवलपर से संपर्क करें."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"देखें कि अपडेट मौजूद है या नहीं"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"आपके पास नए संदेश हैं"</string>
@@ -2008,4 +2021,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> को प्रतिबंधित बकेट में रखा गया है"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"निजी प्रोफ़ाइल"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"वर्क प्रोफ़ाइल"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 3839434..cd8eae5 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -193,6 +193,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administrator je ustupio uređaj za osobnu upotrebu"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Uređaj je upravljan"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Vaša organizacija upravlja ovim uređajem i može nadzirati mrežni promet. Dodirnite za pojedinosti."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Postavke lokacije koje je promijenio administrator"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Dodirnite da biste vidjeli svoje postavke lokacije."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Uređaj će se izbrisati"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Administratorska aplikacija ne može se upotrebljavati. Uređaj će se izbrisati.\n\nAko imate pitanja, obratite se administratoru organizacije."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Ispis je onemogućila aplikacija <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -432,6 +434,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Ova povlaštena aplikacija sustava | u svakom trenutku može snimati fotografije i videozapise kamerom sustava. Aplikacija mora imati i dopuštenje android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"upravljanje vibracijom"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"pristupiti usluzi poziva izravnih poruka"</string>
@@ -546,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Pokušajte ponovo."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nije registriran nijedan otisak prsta."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ovaj uređaj nema senzor otiska prsta."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Prst <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -589,6 +594,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Lice nije potvrđeno. Pokušajte ponovo."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Niste postavili otključavanje licem"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Otključavanje licem nije podržano na ovom uređaju."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Lice <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1636,7 +1643,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Usluga u prednjem planu s <xliff:g id="PACKAGENAME">%1$s</xliff:g> pokrenuta u pozadini neće imati dopuštenje tijekom upotrebe u budućim R kompilacijama. Pogledajte go/r-bg-fgs-restriction i pošaljite izvješće o programskoj pogrešci."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Želite li upotrebljavati prečac za pristupačnost?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Kada je taj prečac uključen, pritiskom na obje tipke za glasnoću na 3 sekunde pokrenut će se značajka pristupačnosti.\n\n Trenutačna značajka pristupačnosti:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Značajku možete promijeniti u Postavkama &gt; Pristupačnost."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Uredi prečace"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Otkaži"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Isključi prečac"</string>
@@ -1885,6 +1893,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Želite uključiti radni profil?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Uključit će se vaše radne aplikacije, obavijesti, podaci i druge značajke radnog profila"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Uključi"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Aplikacija nije dostupna"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> trenutačno nije dostupna."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ova je aplikacija razvijena za stariju verziju Androida i možda neće funkcionirati pravilno. Potražite ažuriranja ili se obratite razvojnom programeru."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Provjeri ažuriranja"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Imate nove poruke"</string>
@@ -2042,4 +2052,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> premješten je u spremnik OGRANIČENO"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Osobno"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Posao"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index fcea1ec..bb1ad32 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Az adminisztrátor átadta az eszközt személyes használatra"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Felügyelt eszköz"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Ezt az eszközt szervezete kezeli, és lehetséges, hogy a hálózati forgalmat is figyelik. További részletekért koppintson."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"A helybeállításokat módosította a adminisztrátora"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Koppintson a helybeállítások megtekintéséhez."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"A rendszer törölni fogja eszközét"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"A rendszergazdai alkalmazás nem használható. A rendszer most törli az eszközt.\n\nKérdéseivel forduljon szervezete rendszergazdájához."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"A(z) <xliff:g id="OWNER_APP">%s</xliff:g> letiltotta a nyomtatást."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"A rendszerkamera használatával ez az előnyben részesített vagy rendszeralkalmazás bármikor készíthet fényképeket és videókat. Az alkalmazásnak az „android.permission.CAMERA” engedéllyel is rendelkeznie kell."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"rezgés szabályozása"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"hozzáférés az IMS-hívásszolgáltatáshoz"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Próbálkozzon újra."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nincsenek regisztrált ujjlenyomatok."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ez az eszköz nem rendelkezik ujjlenyomat-érzékelővel."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g>. ujj"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"Nem állította be az arcalapú feloldást."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Az eszköz nem támogatja az arcalapú feloldást"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> arc"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"A háttér által indított előtérben futó szolgáltatás (innen: <xliff:g id="PACKAGENAME">%1$s</xliff:g>) nem tartalmaz majd használat közbeni engedélyt a jövőbeli R buildekben. Kérjük, keresse fel a go/r-bg-fgs-restriction webhelyet, és jelentse a hibát."</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="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="8306239551412868396">"Ha be van kapcsolva a billentyűparancs, a két hangerőgomb 3 másodpercig tartó lenyomásával elindíthatja a kisegítő lehetőségek egyik funkcióját.\n\n A kisegítő lehetőségek jelenleg beállított funkciója:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n A funkciót a Beállítások &gt; Kisegítő lehetőségek menüpontban módosíthatja."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Gyorsparancsszerkesztés"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Mégse"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Billentyűparancs kikapcsolása"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Bekapcsolja a munkaprofilt?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"A munkahelyi alkalmazások, értesítések, adatok és a munkaprofilhoz tartozó egyéb funkciók be lesznek kapcsolva"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Bekapcsolás"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Az alkalmazás nem hozzáférhető"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> jelenleg nem hozzáférhető."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ez az alkalmazás az Android egyik korábbi verziójához készült, így elképzelhető, hogy nem működik majd megfelelően ezen a rendszeren. Keressen frissítéseket, vagy vegye fel a kapcsolatot a fejlesztővel."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Frissítés keresése"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Új üzenetei érkeztek"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"A következő csomag a KORLÁTOZOTT csoportba került: <xliff:g id="PACKAGE_NAME">%1$s</xliff:g>"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Személyes"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Munka"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index cbd754f..aabfc80 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"Տեղադրության կարգավորումները փոփոխվել են ձեր ադմինիստրատորի կողմից։"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Հպեք՝ ձեր տեղադրության կարգավորումները տեսնելու համար։"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Այս արտոնյալ | համակարգային հավելվածը կարող է ցանկացած պահի լուսանկարել և տեսագրել՝ օգտագործելով համակարգի տեսախցիկները: Հավելվածին նաև անհրաժեշտ է android.permission.CAMERA թույլտվությունը:"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"կառավարել թրթռումը"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"օգտվել IMS զանգերի ծառայությունից"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Փորձեք նորից:"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Գրանցված մատնահետք չկա:"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Այս սարքը չունի մատնահետքերի սկաներ։"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Մատնահետք <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Չհաջողվեց հաստատել դեմքը։ Նորից փորձեք։"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Դուք չեք կարգավորել դեմքով ապակողպումը:"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Դեմքով ապակողպումն այս սարքում չի աջակցվում"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Դեմք <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Ֆոնային ռեժիմում <xliff:g id="PACKAGENAME">%1$s</xliff:g>-ից գործարկված առաջին պլանի ծառայությունը հետագա R կառուցումներում թույլտվություն չի ունենա օգտագործման ընթացքում։ Անցեք go/r-bg-fgs-restriction էջ և հաղորդեք վրիպակի մասին։"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Ձայնը բարձրացնե՞լ խորհուրդ տրվող մակարդակից ավել:\n\nԵրկարատև բարձրաձայն լսելը կարող է վնասել ձեր լսողությունը:"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Օգտագործե՞լ Մատչելիության դյուրանցումը։"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Հատուկ գործառույթն օգտագործելու համար սեղմեք և 3 վայրկյան սեղմած պահեք ձայնի ուժգնության երկու կոճակները, երբ գործառույթը միացված է։\n\n Մատչելիության ակտիվ գործառույթը՝\n<xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Գործառույթը կարող եք փոփոխել՝ անցնելով Կարգավորումներ &gt; Հատուկ գործառույթներ։"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Փոփոխել դյուրանցումները"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Չեղարկել"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Անջատել դյուրանցումը"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Միացնե՞լ աշխատանքային պրոֆիլը"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Ձեր աշխատանքային հավելվածները, ծանուցումները, տվյալները և աշխատանքային պրոֆիլի մյուս գործառույթները կմիանան"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Միացնել"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Այս հավելվածը ստեղծվել է Android-ի ավելի հին տարբերակի համար և կարող է պատշաճ չաշխատել: Ստուգեք թարմացումների առկայությունը կամ դիմեք մշակողին:"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Ստուգել նոր տարբերակի առկայությունը"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Դուք ունեք նոր հաղորդագրություններ"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> փաթեթը գցվեց ՍԱՀՄԱՆԱՓԱԿՎԱԾ զամբյուղի մեջ"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Անձնական"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Աշխատանքային"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index f1a94ff..7963ba7 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Admin melepaskan perangkat untuk penggunaan pribadi"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Perangkat ini ada yang mengelola"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Organisasi mengelola perangkat ini dan mungkin memantau traffic jaringan. Ketuk untuk melihat detailnya."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Setelan lokasi diubah oleh admin Anda"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Ketuk untuk melihat setelan lokasi Anda."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Perangkat akan dihapus"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Aplikasi admin tidak dapat digunakan. Perangkat Anda kini akan dihapus.\n\nJika ada pertanyaan, hubungi admin organisasi."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Fitur pencetakan dinonaktifkan oleh <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Hak istimewa ini | aplikasi sistem dapat mengambil gambar dan merekam video menggunakan kamera sistem kapan saja. Mewajibkan aplikasi juga memegang izin android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"kontrol getaran"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"akses layanan panggilan IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Coba lagi."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Tidak ada sidik jari yang terdaftar."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Perangkat ini tidak memiliki sensor sidik jari."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Jari <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Tidak dapat memverifikasi wajah. Coba lagi."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Anda belum menyiapkan face unlock."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Face unlock tidak didukung di perangkat ini."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> wajah"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Layanan latar depan yang dimulai oleh latar belakang dari <xliff:g id="PACKAGENAME">%1$s</xliff:g> tidak akan memiliki izin saat-sedang-digunakan pada build R masa mendatang Lihat go/r-bg-fgs-restriction dan kirim laporan bug."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Gunakan Pintasan Aksesibilitas?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Saat pintasan aktif, menekan kedua tombol volume selama 3 detik akan memulai fitur aksesibilitas.\n\n Fitur aksesibilitas saat ini:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Anda dapat mengubah fitur di Setelan &gt; Aksesibilitas."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Edit pintasan"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Batal"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Nonaktifkan Pintasan"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Aktifkan profil kerja?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Aplikasi kerja, notifikasi, data, dan fitur profil kerja lainnya akan diaktifkan"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Aktifkan"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Aplikasi tidak tersedia"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak tersedia saat ini."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Aplikasi ini dibuat untuk Android versi lama dan mungkin tidak berfungsi sebagaimana mestinya. Coba periksa apakah ada update, atau hubungi developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Periksa apakah ada update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Ada pesan baru"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> telah dimasukkan ke dalam bucket DIBATASI"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Pribadi"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Kerja"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index b4cb76d3..b128e53 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Kerfisstjóri lét af hendi tæki til einkanota"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Tækinu er stjórnað"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Fyrirtækið þitt stjórnar þessu tæki og kann að fylgjast með netnotkun. Ýttu hér til að fá upplýsingar."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Stjórnandi breytti staðsetningarstillingum"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Ýttu til að sjá staðsetningarstillingar."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Tækið verður hreinsað"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Ekki er hægt að nota stjórnunarforritið. Tækinu verður eytt.\n\nEf spurningar vakna skaltu hafa samband við kerfisstjóra fyrirtækisins."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> lokaði á prentun."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Þetta kerfisforrit hefur heimild til að taka myndir og taka upp myndskeið með myndavél kerfisins hvenær sem er. Forritið þarf einnig að vera með heimildina android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"stjórna titringi"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"fá aðgang að IMS-símtalsþjónustu"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Reyndu aftur."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Engin fingraför hafa verið skráð."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Þetta tæki er ekki með fingrafaralesara."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Fingur <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"Þú hefur ekki sett upp andlitsopnun."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Andlitsopnun er ekki studd í þessu tæki."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Andlit <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Forgrunnsþjónusta frá <xliff:g id="PACKAGENAME">%1$s</xliff:g> sem er ræst úr bakgrunni mun ekki hafa heimild við notkun í framtíðarútgáfum R. Farðu á go/r-bg-fgs-restriction og gefðu villuskýrslu."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Viltu nota aðgengisflýtileið?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Þegar flýtileiðin er virk er kveikt á aðgengiseiginleikanum með því að halda báðum hljóðstyrkshnöppunum inni í þrjár sekúndur.\n\n Virkur aðgengiseiginleiki:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Hægt er að skipta um eiginleika í Stillingar &gt; Aðgengi."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Breyta flýtileiðum"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Hætta við"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Slökkva á flýtileið"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Kveikja á vinnusniði?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Kveikt verður á vinnuforritum, tilkynningum, gögnum og öðrum eiginleikum vinnusniðsins"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Kveikja"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Forrit er ekki tiltækt"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> er ekki tiltækt núna."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Þetta forrit var hannað fyrir eldri útgáfu af Android og ekki er víst að það virki eðlilega. Athugaðu hvort uppfærslur séu í boði eða hafðu samband við þróunaraðilann."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Leita að uppfærslu"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Þú ert með ný skilaboð"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> var sett í flokkinn TAKMARKAÐ"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Persónulegt"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Vinna"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 23a62a8..b8515df 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"L\'amministratore ha abbandonato il dispositivo per uso personale"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Il dispositivo è gestito"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Questo dispositivo è gestito dalla tua organizzazione, che potrebbe monitorare il traffico di rete. Tocca per i dettagli."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Impostazioni di geolocalizzazione modificate dal tuo amministratore"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Tocca per vedere le tue impostazioni di geolocalizzazione."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Il dispositivo verrà resettato"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Impossibile usare l\'app di amministrazione. Il dispositivo verrà resettato.\n\nPer eventuali domande, contatta l\'amministratore della tua organizzazione."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Stampa disattivata da <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Questa app di sistema | privilegiata può fare foto e video tramite una videocamera del sistema in qualsiasi momento. Richiede che l\'autorizzazione android.permission.CAMERA sia concessa anche all\'app"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"controllo vibrazione"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"accesso al servizio di chiamata IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Riprova."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nessuna impronta digitale registrata."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Questo dispositivo non dispone di sensore di impronte."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dito <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Impossibile verificare il volto. Riprova."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Non hai configurato Sblocco con il volto."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Sblocco con il volto non supportato su questo dispositivo."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Volto <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1184,7 +1191,7 @@
     <string name="unsupported_display_size_show" msgid="980129850974919375">"Mostra sempre"</string>
     <string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"L\'app <xliff:g id="APP_NAME">%1$s</xliff:g> è stata realizzata per una versione non compatibile del sistema operativo Android e potrebbe avere un comportamento imprevisto. Potrebbe essere disponibile una versione aggiornata dell\'app."</string>
     <string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"Mostra sempre"</string>
-    <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Verifica la presenza di aggiornamenti"</string>
+    <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Cerca aggiornamenti"</string>
     <string name="smv_application" msgid="3775183542777792638">"L\'applicazione <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) ha violato la norma StrictMode autoimposta."</string>
     <string name="smv_process" msgid="1398801497130695446">"Il processo <xliff:g id="PROCESS">%1$s</xliff:g> ha violato la norma StrictMode autoimposta."</string>
     <string name="android_upgrading_title" product="default" msgid="7279077384220829683">"Aggiornamento del telefono…"</string>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Il servizio in primo piano avviato in background da <xliff:g id="PACKAGENAME">%1$s</xliff:g> non avrà l\'autorizzazione \"durante l\'uso\" nelle future build R. Visita la pagina go/r-bg-fgs-restriction e invia una segnalazione di bug."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Usare la scorciatoia Accessibilità?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Quando la scorciatoia è attiva, puoi premere entrambi i pulsanti del volume per tre secondi per avviare una funzione di accessibilità.\n\n Funzione di accessibilità corrente:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Puoi cambiare la funzione in Impostazioni &gt; Accessibilità."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Modifica scorciatoie"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Annulla"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Disattiva scorciatoia"</string>
@@ -1853,8 +1861,10 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Attivare il profilo di lavoro?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Le tue app di lavoro, le notifiche, i dati e altri elementi del profilo di lavoro saranno attivati."</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Attiva"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Questa app è stata realizzata per una versione precedente di Android e potrebbe non funzionare correttamente. Prova a verificare la disponibilità di aggiornamenti o contatta lo sviluppatore."</string>
-    <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Verifica la presenza di aggiornamenti"</string>
+    <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Cerca aggiornamenti"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Hai nuovi messaggi"</string>
     <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>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> è stato inserito nel bucket RESTRICTED"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personale"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Lavoro"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 4319aa8..4886b4a 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -195,6 +195,8 @@
     <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="4119726617105166830">"מנהל המערכת שינה את הגדרות המיקום"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"יש להקיש כדי לראות את הגדרות המיקום שלך."</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>
@@ -435,6 +437,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"‏לאפליקציית המערכת | הזו יש הרשאות מיוחדות והיא יכולה לצלם תמונות ולהקליט סרטונים באמצעות מצלמת מערכת בכל זמן. בנוסף, לאפליקציה נדרשת ההרשאה android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"שליטה ברטט"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"‏גישה אל שירות שיחות IMS"</string>
@@ -549,6 +552,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"כדאי לנסות שוב."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"לא נרשמו טביעות אצבע."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"במכשיר זה אין חיישן טביעות אצבע."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"אצבע <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -592,6 +597,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"לא ניתן לאמת את הפנים. יש לנסות שוב."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"לא הגדרת שחרור נעילה על ידי זיהוי פנים."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"המכשיר הזה לא תומך בשחרור נעילה על ידי זיהוי פנים."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"פנים <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1658,7 +1665,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"‏לשירות שפועל בחזית מ-<xliff:g id="PACKAGENAME">%1$s</xliff:g> שהחל ברקע לא תהיה הרשאת while-in-use בגרסאות R build בעתיד. יש לעיין בכתובת go/r-bg-fgs-restriction ולהגיש דוח על באג."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"האם להעלות את עוצמת הקול מעל לרמה המומלצת?\n\nהאזנה בעוצמת קול גבוהה למשכי זמן ממושכים עלולה לפגוע בשמיעה."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"להשתמש בקיצור הדרך לתכונת הנגישות?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"כשקיצור הדרך מופעל, לחיצה על שני לחצני עוצמת השמע למשך שלוש שניות מפעילה את תכונת הנגישות.\n\n תכונת הנגישות המוגדרת כרגע:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n אפשר לשנות את התכונה בקטע \'הגדרות ונגישות\'."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"עריכת קיצורי הדרך"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"ביטול"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"כבה את קיצור הדרך"</string>
@@ -1917,6 +1925,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"להפעיל את פרופיל העבודה?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"אפליקציות העבודה, התראות, נתונים ותכונות נוספות של פרופיל העבודה יופעלו"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"הפעל"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"‏האפליקציה הזו עוצבה לגרסה ישנה יותר של Android וייתכן שלא תפעל כראוי. ניתן לבדוק אם יש עדכונים או ליצור קשר עם המפתח."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"האם יש עדכון חדש?"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"יש לך הודעות חדשות"</string>
@@ -2076,4 +2086,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> התווספה לקטגוריה \'מוגבל\'"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"אישי"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"עבודה"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 481af76..9de1672 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"位置情報の設定が管理者によって変更されました"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"タップすると位置情報の設定が表示されます。"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"権限を付与されたこのシステムアプリは、いつでもシステムカメラを使用して写真と動画を撮影できます。アプリには android.permission.CAMERA 権限も必要です"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"バイブレーションの制御"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS通話サービスへのアクセス"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"もう一度お試しください。"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"指紋が登録されていません。"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"このデバイスには指紋認証センサーがありません。"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"指紋 <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"顔を確認できません。もう一度お試しください。"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"顔認証を設定していません。"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"このデバイスでは、顔認証はご利用いただけません。"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"顔 <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"今後の R ビルドでは、<xliff:g id="PACKAGENAME">%1$s</xliff:g> からバックグラウンドで開始されるフォアグラウンド サービスに「使用中のみ許可」の権限がありません。go/r-bg-fgs-restriction を確認し、バグレポートを提出してください。"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"推奨レベルを超えるまで音量を上げますか?\n\n大音量で長時間聞き続けると、聴力を損なう恐れがあります。"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ユーザー補助機能のショートカットの使用"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"ショートカットが ON の場合、両方の音量ボタンを 3 秒間押し続けるとユーザー補助機能が起動します。\n\n現在のユーザー補助機能:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\nユーザー補助機能は [設定] &gt; [ユーザー補助] で変更できます。"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"ショートカットの編集"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"キャンセル"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"ショートカットを OFF にする"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"仕事用プロファイルの有効化"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"仕事用のアプリ、通知、データなど、仕事用プロファイルの機能が ON になります"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"ON にする"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"このアプリは以前のバージョンの Android 用に作成されており、正常に動作しない可能性があります。アップデートを確認するか、デベロッパーにお問い合わせください。"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"アップデートを確認"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"新着メッセージがあります"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> は RESTRICTED バケットに移動しました。"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"個人用"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"仕事用"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index c2c28e5..2d15c16 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"მდებარეობის პარამეტრები თქვენმა ადმინისტრატორმა შეცვალა"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"შეეხეთ თქვენი მდებარეობის პარამეტრების სანახავად."</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"ამ პრივილეგირებულ | სისტემის აპს შეუძლია ფოტოების გადაღება და ვიდეოების ჩაწერა ნებისმიერ დროს სისტემის კამერის გამოყენებით. საჭიროა, რომ აპს ჰქოდეს android.permission.CAMERA ნებართვაც"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"ვიბრაციის კონტროლი"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS ზარების სერვისზე წვდომა"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ხელახლა სცადეთ"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"თითის ანაბეჭდები რეგისტრირებული არ არის."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ამ მოწყობილობას არ აქვს თითის ანაბეჭდის სენსორი."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"თითი <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"სახის დადასტურება ვერ ხერხდება. ცადეთ ხელახლა."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"თქვენ არ დაგიყენებიათ სახით განბლოკვა."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"განბლოკვა სახით ამ მოწყობილობაზე მხარდაჭერილი არ არის."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"სახე <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g>-ის ფონურად დაწყებულ წინა პლანის სერვისს მომავალ R build-ებში გამოყენების პროცესში წვდომის ნებართვა არ ექნება. გთხოვთ, იხილოთ go/r-bg-fgs-restriction და გამოგზავნოთ ხარვეზის ანგარიში."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"გსურთ ხმის რეკომენდებულ დონეზე მაღლა აწევა?\n\nხანგრძლივად ხმამაღლა მოსმენით შესაძლოა სმენადობა დაიზიანოთ."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"გსურთ მარტივი წვდომის მალსახმობის გამოყენება?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"მალსახმობის ჩართვის შემთხვევაში, ხმის ორივე ღილაკზე 3 წამის განმავლობაში დაჭერით მარტივი წვდომის ფუნქცია ჩაირთვება.\n\n მარტივი წვდომის ამჟამინდელი ფუნქციაა:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n ამ ფუნქციის შეცვლა შეგიძლიათ აქ: პარამეტრები &gt; მარტივი წვდომა."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"მალსახმობების რედაქტირება"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"გაუქმება"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"მალსახმობის გამორთვა"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"ჩაირთოს სამსახურის პროფილი?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"თქვენი სამსახურის აპები, შეტყობინებები, მონაცემები და სამსახურის პროფილის ყველა სხვა ფუნქცია ჩაირთვება"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"ჩართვა"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"ეს აპი Android-ის ძველი ვერსიისთვის შეიქმნა და შესაძლოა სათანადოდ არ მუშაობდეს. გადაამოწმეთ განახლებები ან დაუკავშირდით დეველოპერს."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"განახლების შემოწმება"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"თქვენ ახალი შეტყობინებები გაქვთ"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> მოთავსდა კალათაში „შეზღუდული“"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"პირადი"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"სამსახური"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index 7cb0512..1406a8b 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -191,6 +191,10 @@
     <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>
+    <!-- no translation found for location_changed_notification_title (4119726617105166830) -->
+    <skip />
+    <!-- no translation found for location_changed_notification_text (198907268219396399) -->
+    <skip />
     <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>
@@ -429,6 +433,8 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Осы айрықша | жүйе қолданбасы кез келген уақытта жүйелік камера арқылы суретке не бейнеге түсіре алады. Қолданбаға android.permission.CAMERA рұқсаты қажет болады."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"тербелісті басқару"</string>
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Қолданбаға вибраторды басқаруға рұқсат береді."</string>
+    <!-- no translation found for permdesc_vibrator_state (7050024956594170724) -->
+    <skip />
     <string name="permlab_callPhone" msgid="1798582257194643320">"нөмірлерге тікелей телефон шалу"</string>
     <string name="permdesc_callPhone" msgid="5439809516131609109">"Қолданбаға сіздің қатысуыңызсыз қоңырау шалу мүмкіндігін береді. Нәтижесінде қосымша төлем немесе күтпеген қоңырау алуыңыз мүмкін. Есіңізде болсын, қолданба төтенше байланыстарға қоңырау шала алмайды. Залалды қолданбалар сіздің рұқсатыңызсыз қоңыраулар шалып, күтпеген төлемдерге себеп болуы мүмкін."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS қоңырау қызметін пайдалану"</string>
@@ -543,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Әрекетті қайталаңыз."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Саусақ іздері тіркелмеген."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Бұл құрылғыда саусақ ізін оқу сканері жоқ."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g> саусағы"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +594,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Бетті тану мүмкін емес. Әрекетті қайталаңыз."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Face Unlock реттелмеді."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Бұл құрылғыда Face Unlock функциясы істемейді."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> беті"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1624,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Фондық режимде іске қосылған <xliff:g id="PACKAGENAME">%1$s</xliff:g> белсенді пакетінің алдағы R құрамаларында \"Пайдаланғанда ғана рұқсат ету\" рұқсаты болмайды. go/r-bg-fgs-restriction бетіне өтіп, қате туралы есеп жіберіңіз."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Дыбыс деңгейін ұсынылған деңгейден көтеру керек пе?\n\nЖоғары дыбыс деңгейінде ұзақ кезеңдер бойы тыңдау есту қабілетіңізге зиян тигізуі мүмкін."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Арнайы мүмкіндік төте жолын пайдалану керек пе?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Бұл төте жол қосулы кезде дыбыс деңгейі түймелерінің екеуін де 3 секунд бойы басқанда арнайы мүмкіндік іске қосылады.\n\n Ағымдағы арнайы мүмкіндік:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Бұл мүмкіндікті \"Параметрлер\" &gt; \"Арнайы мүмкіндіктер\" тармағында өзгертуге болады."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Таңбашаларды өзгерту"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Бас тарту"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Төте жолды өшіру"</string>
@@ -1853,6 +1864,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Жұмыс профилі қосылсын ба?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Жұмыс қолданбалары, хабарландырулар, деректер және басқа да жұмыс профильдерінің мүмкіндіктері қосылады"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Қосу"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Қолданба Android жүйесінің ескі нұсқасына арналған және дұрыс жұмыс істемеуі мүмкін. Жаңартылған нұсқаны тексеріңіз немесе әзірлеушіге хабарласыңыз."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Жаңартылған нұсқаны тексеру"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Сізде жаңа хабарлар бар"</string>
@@ -2008,4 +2021,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ШЕКТЕЛГЕН себетке салынды."</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Жеке"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Жұмыс"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index e0267d3..50e2e15 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"ការកំណត់​ទីតាំង​ត្រូវបានប្ដូរដោយ​អ្នកគ្រប់គ្រង​របស់អ្នក"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"ចុច​ដើម្បី​មើល​ការកំណត់​ទីតាំង​របស់អ្នក។"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"កម្មវិធីប្រព័ន្ធ​ដែលមានសិទ្ធិអនុញ្ញាត​នេះអាចថត​រូប និង​ថតវីដេអូ​ ដោយប្រើកាមេរ៉ា​ប្រព័ន្ធបាន​គ្រប់ពេល។ តម្រូវឱ្យមាន​ការអនុញ្ញាត android.permission.CAMERA ដើម្បីឱ្យ​កម្មវិធីអាចធ្វើ​សកម្មភាព​បានផងដែរ"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"ពិនិត្យ​ការ​ញ័រ"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"ចូលដំណើរការសេវាកម្មការហៅតាម IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ព្យាយាមម្ដងទៀត។"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"មិន​មាន​ការ​ចុះឈ្មោះស្នាម​ម្រាមដៃទេ។"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ឧបករណ៍នេះ​មិនមាន​ឧបករណ៍ចាប់​ស្នាមម្រាមដៃទេ។"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ម្រាមដៃ <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"មិន​អាច​ផ្ទៀងផ្ទាត់​មុខ​បាន​ទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"អ្នក​មិនទាន់​រៀបចំ​ការដោះសោតាមទម្រង់មុខ​នៅឡើយទេ។"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"មិនអាចប្រើ​ការដោះសោតាមទម្រង់មុខ​នៅលើ​ឧបករណ៍​នេះ​បានទេ។"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"ផ្ទៃមុខទី <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1616,7 +1623,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"សេវាកម្ម​ផ្ទៃខាងមុខ​ដែលចាប់ផ្ដើមដោយ​ផ្ទៃខាងក្រោយ​ពី <xliff:g id="PACKAGENAME">%1$s</xliff:g> នឹង​មិនមាន​ការអនុញ្ញាត​ខណៈពេល​កំពុង​ប្រើប្រាស់​ទេ នៅក្នុង​កំណែបង្កើត R នៅពេល​អនាគត​។ សូម​មើល go/r-bg-fgs-restriction និង​ផ្ញើ​របាយការណ៍​អំពី​បញ្ហា​។"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"បង្កើន​កម្រិត​សំឡេង​លើស​ពី​កម្រិត​បាន​ផ្ដល់​យោបល់?\n\nការ​ស្ដាប់​នៅ​កម្រិត​សំឡេង​ខ្លាំង​យូរ​អាច​ធ្វើឲ្យ​ខូច​ត្រចៀក។"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ប្រើប្រាស់​ផ្លូវកាត់​ភាព​ងាយស្រួល?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"នៅពេល​ផ្លូវកាត់​នេះបើក ការ​ចុច​ប៊ូតុង​កម្រិត​សំឡេង​ទាំង​ពីរ​ឲ្យ​ជាប់​រយៈពេល​ 3 វិនាទីនឹង​ចាប់ផ្តើម​មុខងារ​ភាពងាយស្រួល។\n\n មុខងារ​ភាពងាយស្រួល​បច្ចុប្បន្ន៖\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n អ្នក​អាច​ផ្លាស់​ប្តូរ​មុខងារ​នេះ​បាន​នៅក្នុង​ការ កំណត់ &gt; ភាព​ងាយស្រួល។"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"កែ​ផ្លូវកាត់"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"បោះបង់"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"បិទ​ផ្លូវកាត់"</string>
@@ -1855,6 +1863,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"បើក​កម្រង​ព័ត៌មាន​ការ​ងារ?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"កម្មវិធី​ការងារ ការ​ជូនដំណឹង ទិន្នន័យ និង​មុខងារ​កម្រង​ព័ត៌មាន​ការងារ​ផ្សេង​ទៀត​របស់អ្នក​នឹង​ត្រូវ​បាន​បើក"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"បើក"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"កម្មវិធី​នេះ​ត្រូវបាន​បង្កើត​ឡើង​សម្រាប់​កំណែ​ប្រព័ន្ធ​ប្រតិបត្តិការ Android ចាស់ ហើយ​វាអាច​ដំណើរការ​ខុសប្រក្រតី។ សូម​សាកល្បង​ពិនិត្យមើល​កំណែ​ថ្មី ឬ​ទាក់ទង​ទៅអ្នក​អភិវឌ្ឍន៍។"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"រក​មើល​កំណែ​ថ្មី"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"អ្នកមានសារថ្មី"</string>
@@ -2010,4 +2020,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ត្រូវបានដាក់​ទៅក្នុងធុង​ដែលបានដាក់កំហិត"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"ផ្ទាល់ខ្លួន"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"ការងារ"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index 4a2bc72..4099d30 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಂದ ಸ್ಥಳ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"ನಿಮ್ಮ ಸ್ಥಳ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನೋಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"ಈ ವಿಶೇಷ | ಸಿಸ್ಟಂ ಆ್ಯಪ್ ಯಾವುದೇ ಸಮಯದಲ್ಲಾದರೂ ಸಿಸ್ಟಂ ಕ್ಯಾಮರಾವನ್ನು ಬಳಸಿಕೊಂಡು ಫೋಟೋಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು ಮತ್ತು ವೀಡಿಯೋಗಳನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡಬಹುದು. ಆ್ಯಪ್‌ಗೆ android.permission.CAMERA ಅನುಮತಿಯ ಅಗತ್ಯವಿರುತ್ತದೆ"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"ವೈಬ್ರೇಷನ್‌‌ ನಿಯಂತ್ರಿಸಿ"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS ಕರೆ ಸೇವೆಯನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ಯಾವುದೇ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌ ಅನ್ನು ನೋಂದಣಿ ಮಾಡಿಲ್ಲ."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ಈ ಸಾಧನವು ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್‌‌ ಅನ್ನು ಹೊಂದಿಲ್ಲ."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ಫಿಂಗರ್ <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ಮುಖವನ್ನು ದೃಢೀಕರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"ನೀವು ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿಲ್ಲ."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"ಈ ಸಾಧನದಲ್ಲಿ ಫೇಸ್ ಅನ್‌ಲಾಕ್ ವೈಶಿಷ್ಟ್ಯವು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"ಮುಖದ <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> ನಿಂದ ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಪ್ರಾರಂಭಿಸಲಾದ ಮುನ್ನೆಲೆ ಸೇವೆ ಭವಿಷ್ಯದ R ಬಿಲ್ಡ್‌ಗಳಿಂದ ಬಳಕೆಯಲ್ಲಿರುವಾಗ ಅನುಮತಿಯನ್ನು ಪಡೆಯುವುದಿಲ್ಲ. go/r-bg-fgs-restriction ಅನ್ನು ನೋಡಿ ಮತ್ತು ದೋಷವರದಿಯನ್ನು ಫೈಲ್‌ ಮಾಡಿ."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ವಾಲ್ಯೂಮ್‌ ಅನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾದ ಮಟ್ಟಕ್ಕಿಂತಲೂ ಹೆಚ್ಚು ಮಾಡುವುದೇ?\n\nದೀರ್ಘ ಅವಧಿಯವರೆಗೆ ಹೆಚ್ಚಿನ ವಾಲ್ಯೂಮ್‌ನಲ್ಲಿ ಆಲಿಸುವುದರಿಂದ ನಿಮ್ಮ ಆಲಿಸುವಿಕೆ ಸಾಮರ್ಥ್ಯಕ್ಕೆ ಹಾನಿಯುಂಟು ಮಾಡಬಹುದು."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ಪ್ರವೇಶಿಸುವಿಕೆ ಶಾರ್ಟ್‌ಕಟ್ ಬಳಸುವುದೇ?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"ಶಾರ್ಟ್‌ಕಟ್ ಆನ್ ಆಗಿರುವಾಗ ಪ್ರವೇಶಿಸುವಿಕೆ ವೈಶಿಷ್ಟ್ಯ ಆನ್ ಮಾಡಲು, ಎರಡೂ ವಾಲ್ಯೂಮ್ ಬಟನ್‌ಗಳನ್ನು ನೀವು 3 ಸೆಕೆಂಡುಗಳ ಕಾಲ ಒತ್ತಬೇಕು.\n\nಪ್ರಸ್ತುತ ಪ್ರವೇಶಿಸುವಿಕೆ ವೈಶಿಷ್ಟ್ಯ: \n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಮತ್ತು ಪ್ರವೇಶಿಸುವಿಕೆಯಲ್ಲಿ ನೀವು ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬದಲಾಯಿಸಬಹುದು."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"ಶಾರ್ಟ್‌ಕಟ್‌‍ಗಳನ್ನು ಎಡಿಟ್ ಮಾಡಿ"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"ರದ್ದುಗೊಳಿಸಿ"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"ಶಾರ್ಟ್‌ಕಟ್‌ ಆಫ್ ಮಾಡಿ"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ ಆನ್ ಮಾಡುವುದೇ?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"ನಿಮ್ಮ ಕೆಲಸದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು, ಅಧಿಸೂಚನೆಗಳು, ಡೇಟಾ ಮತ್ತು ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ನ ಇತರ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಆನ್ ಮಾಡಲಾಗುತ್ತದೆ"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"ಆನ್‌ ಮಾಡಿ"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"ಈ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು Android ನ ಹಳೆಯ ಆವೃತ್ತಿಗೆ ರಚಿಸಲಾಗಿದೆ ಮತ್ತು ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡದಿರಬಹುದು. ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ಡೆವಲಪರ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ಅಪ್‌ಡೇಟ್‌ಗಾಗಿ ಪರಿಶೀಲಿಸಿ"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ನೀವು ಹೊಸ ಸಂದೇಶಗಳನ್ನು ಹೊಂದಿರುವಿರಿ"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ಅನ್ನು ನಿರ್ಬಂಧಿತ ಬಕೆಟ್‌ಗೆ ಹಾಕಲಾಗಿದೆ"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"ವೈಯಕ್ತಿಕ"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"ಕೆಲಸ"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 0ac7a14..bae739c 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"관리자가 위치 설정을 변경함"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"위치 설정을 보려면 탭하세요."</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"이 권한을 가진 시스템 앱은 언제든지 시스템 카메라를 사용하여 사진을 촬영하고 동영상을 녹화할 수 있습니다. 또한 앱에 android.permission.CAMERA 권한이 필요합니다."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"진동 제어"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS 통화 서비스에 접근"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"다시 시도해 보세요."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"등록된 지문이 없습니다."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"기기에 지문 센서가 없습니다."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"손가락 <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"얼굴을 확인할 수 없습니다. 다시 시도하세요."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"얼굴인식 잠금해제를 설정하지 않았습니다."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"이 기기에서는 얼굴인식 잠금해제가 지원되지 않습니다."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"얼굴 <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"향후 R 빌드에서는 백그라운드에서 시작된 <xliff:g id="PACKAGENAME">%1$s</xliff:g>의 포그라운드 서비스에 더 이상 사용 중인 상태에서 필요한 권한이 부여되지 않습니다. go/r-bg-fgs-restriction 페이지에서 버그 신고를 제출하세요."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"권장 수준 이상으로 볼륨을 높이시겠습니까?\n\n높은 볼륨으로 장시간 청취하면 청력에 손상이 올 수 있습니다."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"접근성 단축키를 사용하시겠습니까?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"단축키가 사용 설정된 경우 두 개의 볼륨 버튼을 3초간 누르면 접근성 기능이 시작됩니다.\n\n 현재 접근성 기능:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n \'설정 &gt; 접근성\'에서 기능을 변경할 수 있습니다."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"단축키 수정"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"취소"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"단축키 사용 중지"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"직장 프로필을 사용 설정하시겠어요?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"업무용 앱, 알림, 데이터 및 기타 직장 프로필 기능이 사용 설정됩니다."</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"사용 설정"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"이 앱은 Android 이전 버전에 맞게 개발되었기 때문에 제대로 작동하지 않을 수 있습니다. 업데이트를 확인하거나 개발자에게 문의하세요."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"업데이트 확인"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"새 메시지 있음"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 항목이 RESTRICTED 버킷으로 이동함"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"개인"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"직장"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index 88e36ff..e9177ab 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -184,13 +184,17 @@
     <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>
-    <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" 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_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="network_logging_notification_text" msgid="1327373071132562512">"Ишканаңыз бул түзмөктү башкарат жана тармак трафигин көзөмөлдөшү мүмкүн. Чоо-жайын билгиңиз келсе, таптап коюңуз."</string>
+    <!-- no translation found for location_changed_notification_title (4119726617105166830) -->
+    <skip />
+    <!-- no translation found for location_changed_notification_text (198907268219396399) -->
+    <skip />
     <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>
@@ -429,6 +433,8 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Бул артыкчылыктуу | тутум колдонмосу тутумдун камерасын каалаган убакта колдонуп, сүрөткө тартып, видео жаздыра алат. Ошондой эле колдонмого android.permission.CAMERA уруксатын берүү керек."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"титирөөнү башкаруу"</string>
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Колдонмого дирилдегичти көзөмөлдөө мүмкүнчүлүгүн берет."</string>
+    <!-- no translation found for permdesc_vibrator_state (7050024956594170724) -->
+    <skip />
     <string name="permlab_callPhone" msgid="1798582257194643320">"телефон номерлерине түз чалуу"</string>
     <string name="permdesc_callPhone" msgid="5439809516131609109">"Колдонмого сиздин катышууңузсуз телефон номурларга чалуу уруксатын берет. Бул сиз күтпөгөн чыгымдарга же чалууларга алып келиши мүмкүн. Бул куткаруучулардын номурларына чалууга уруксат бербей тургандыгын эске алыңыз. Зыяндуу колдонмолор, сиздин ырастооңузсуз чалууларды аткарып, көп чыгымдарга себепкер болушу мүмкүн."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS чалуу кызматына мүмкүнчүлүк алуу"</string>
@@ -523,11 +529,11 @@
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Таанылган жок"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Аныктыгын текшерүү жокко чыгарылды"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN код, графикалык ачкыч же сырсөз коюлган жок"</string>
-    <string name="fingerprint_acquired_partial" msgid="8532380671091299342">"Манжа изи жарым-жартылай аныкталды. Кайра аракет кылыңыз."</string>
-    <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Манжа изи иштелбей койду. Кайра аракет кылыңыз."</string>
-    <string name="fingerprint_acquired_imager_dirty" msgid="4694800187151533990">"Манжа изинин сенсору кирдеп калган. Тазалап, кайра аракет кылыңыз."</string>
-    <string name="fingerprint_acquired_too_fast" msgid="5151661932298844352">"Манжа өтө тез жылдырылды. Кайра аракет кылыңыз."</string>
-    <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Манжа өтө жай жылды. Кайра аракет кылыңыз."</string>
+    <string name="fingerprint_acquired_partial" msgid="8532380671091299342">"Манжа изи жарым-жартылай аныкталды. Кайталап көрүңүз."</string>
+    <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Манжа изи иштелбей койду. Кайталап көрүңүз."</string>
+    <string name="fingerprint_acquired_imager_dirty" msgid="4694800187151533990">"Манжа изинин сенсору кирдеп калган. Тазалап, кайталап көрүңүз."</string>
+    <string name="fingerprint_acquired_too_fast" msgid="5151661932298844352">"Манжа өтө тез жылдырылды. Кайталап көрүңүз."</string>
+    <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Манжа өтө жай жылды. Кайталап көрүңүз."</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_authenticated" msgid="2024862866860283100">"Манжа изи текшерилди"</string>
@@ -535,7 +541,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="6126456006769817485">"Манжа изин сактоо мүмкүн эмес. Учурдагы манжа изин алып салыңыз."</string>
-    <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Манжа изин күтүү мөөнөтү бүттү. Кайра аракет кылыңыз."</string>
+    <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Манжа изин күтүү мөөнөтү бүттү. Кайталап көрүңүз."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"Манжа изи иш-аракети жокко чыгарылды."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Манжа изи операциясын колдонуучу жокко чыгарды."</string>
     <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Аракеттер өтө көп болду. Бир аздан кийин кайталап көрүңүз."</string>
@@ -543,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Кайра бир аракеттениңиз."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Бир да манжа изи катталган эмес."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Бул түзмөктө манжа изинин сенсору жок."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g>-манжа"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -554,7 +562,7 @@
     <string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Жүзүнөн таануу"</string>
     <string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Жүзүңүздү кайра таанытыңыз."</string>
     <string name="face_recalibrate_notification_content" msgid="892757485125249962">"Мыкты таануу үчүн, жүзүңүздү кайра таанытыңыз"</string>
-    <string name="face_acquired_insufficient" msgid="2150805835949162453">"Жүзүңүз жакшы тартылган жок. Кайра аракет кылыңыз."</string>
+    <string name="face_acquired_insufficient" msgid="2150805835949162453">"Жүзүңүз жакшы тартылган жок. Кайталап көрүңүз."</string>
     <string name="face_acquired_too_bright" msgid="8070756048978079164">"Өтө жарык. Жарыктыкты азайтып көрүңүз."</string>
     <string name="face_acquired_too_dark" msgid="252573548464426546">"Өтө караңгы. Жарыгыраак жерден тартып көрүңүз."</string>
     <string name="face_acquired_too_close" msgid="1628767882971469833">"Телефонду алысыраак жылдырыңыз."</string>
@@ -567,7 +575,7 @@
     <string name="face_acquired_not_detected" msgid="2945945257956443257">"Телефонду жүзүңүздүн маңдайында кармаңыз."</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="4699657338753282542">"Жүз таанылган жок. Кайра аракет кылыңыз."</string>
+    <string name="face_acquired_too_different" msgid="4699657338753282542">"Жүз таанылган жок. Кайталап көрүңүз."</string>
     <string name="face_acquired_too_similar" msgid="7684650785108399370">"Мурункуга окшош болуп калды, башкача туруңуз."</string>
     <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Башыңызды бир аз гана эңкейтиңиз."</string>
     <string name="face_acquired_tilt_too_extreme" msgid="8119978324129248059">"Башыңызды бир аз гана эңкейтиңиз."</string>
@@ -583,9 +591,11 @@
     <string name="face_error_user_canceled" msgid="8553045452825849843">"Жүзүнөн таануу функциясын колдонуучу өчүрүп салды."</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Өтө көп жолу аракет жасадыңыз. Бир аздан кийин кайталап көрүңүз."</string>
     <string name="face_error_lockout_permanent" msgid="8277853602168960343">"Өтө көп жолу аракет кылдыңыз. Жүзүнөн таануу функциясы өчүрүлдү."</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="7369928733504691611">"Жүзүнөн таануу функциясын жөндөй элексиз."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Жүзүнөн таануу функциясы бул түзмөктө иштебейт."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Жүз <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -652,7 +662,7 @@
     <string name="policydesc_limitPassword" msgid="4105491021115793793">"Экран кулпусунун сырсөздөрү менен PIN\'дерине уруксат берилген узундук менен белгилерди көзөмөлдөө."</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>
+    <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"Экрандын кулпусун ачуу учурунда сырсөздөр канча жолу туура эмес терилгенин тескөө жана сырсөз өтө көп жолу туура эмес терилген болсо, Android TV түзмөгүңүздү кулпулап же Android TV түзмөгүңүздөгү бардык дайын-даректериңизди тазалап салуу."</string>
     <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"Экрандын кулпусу ачылып жатканда туура эмес терилген сырсөздөрдүн санын текшерип, эгер алардын саны өтө эле көп болсо, телефонду кулпулаңыз же телефондогу бардык дайындарды тазалап салыңыз."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="2049038943004297474">"Экрандын кулпусун ачуу учурунда туура эмес терилген сырсөздөрдү тескөө жана сырсөз өтө көп жолу туура эмес терилген болсо, планшетти кулпулап же бул колдонуучунун бардык дайындарын тазалап салуу."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="tv" msgid="8965224107449407052">"Экрандын кулпусун ачуу учурунда сырсөздөр канча жолу туура эмес терилгенин тескөө жана сырсөз өтө көп жолу туура эмес терилген болсо, Android TV түзмөгүңүздү кулпулап же колдонуучунун бардык дайындарын тазалап салуу."</string>
@@ -840,7 +850,7 @@
     <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> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүздүн кулпусун 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>
@@ -880,7 +890,7 @@
     <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>
-    <string name="keyguard_accessibility_widget_deleted" msgid="1509738950119878705">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> виждети жок кылынды."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="1509738950119878705">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> виждети өчүрүлдү."</string>
     <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>
@@ -1276,7 +1286,7 @@
     <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="5387212933992546283">"SIM-карта алынып салынды"</string>
+    <string name="sim_removed_title" msgid="5387212933992546283">"SIM-карта өчүрүлдү"</string>
     <string name="sim_removed_message" msgid="9051174064474904617">"Сиз жарактуу SIM салып, кайра иштетмейинче, мобилдик тармак жеткиликсиз болот."</string>
     <string name="sim_done_button" msgid="6464250841528410598">"Даяр"</string>
     <string name="sim_added_title" msgid="7930779986759414595">"SIM-карта кошулду"</string>
@@ -1348,7 +1358,7 @@
     <string name="ext_media_unsupported_notification_title" msgid="4358280700537030333">"<xliff:g id="NAME">%s</xliff:g> колдоого алынбайт"</string>
     <string name="ext_media_unsupported_notification_message" msgid="917738524888367560">"Бул түзмөктө <xliff:g id="NAME">%s</xliff:g> колдоого алынбайт. Колдоого алынуучу форматта орнотуу үчүн таптап коюңуз."</string>
     <string name="ext_media_unsupported_notification_message" product="tv" msgid="7744945987775645685">"Бул түзмөктө <xliff:g id="NAME">%s</xliff:g> колдоого алынбайт. Колдоого алынуучу форматта орнотуу үчүн тандаңыз."</string>
-    <string name="ext_media_badremoval_notification_title" msgid="4114625551266196872">"<xliff:g id="NAME">%s</xliff:g> күтүүсүздөн алынып салынды"</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>
     <string name="ext_media_nomedia_notification_message" msgid="2832724384636625852">"Айрым функциялар талаптагыдай иштебей калышы мүмкүн. Жаңы сактагычты салыңыз."</string>
@@ -1607,14 +1617,15 @@
     <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>
+    <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> жолу туура эмес көрсөтүлгөндөн кийин, телефондун кулпусун ачуу үчүн Google аккаунтуңузга кирүүгө туура келет.\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="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Фондогу <xliff:g id="PACKAGENAME">%1$s</xliff:g> кызматы активдүү режимде иштеп баштап, кийинки R курамаларында колдонуу учурунда уруксаты болбойт. Төмөнкү бөлүмгө өтүп, мүчүлүштүк тууралуу кабарды тапшырыңыз: go/r-bg-fgs-restriction."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Сунушталган деңгээлден да катуулатып уккуңуз келеби?\n\nМузыканы узакка чейин катуу уксаңыз, угууңуз начарлап кетиши мүмкүн."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Ыкчам иштетесизби?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Атайын мүмкүнчүлүктөр функциясын пайдалануу үчүн, ал күйгүзүлгөндө, үндү катуулатып/акырындаткан эки баскычты тең үч секунддай кое бербей басып туруңуз.\n\n Учурдагы атайын мүмкүнчүлүктөрдүн жөндөөлөрү:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\nЖөндөөлөр &gt; Атайын мүмкүнчүлүктөр бөлүмүнөн өзгөртө аласыз."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Кыска жолдорду түзөтүү"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Жокко чыгаруу"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Кыска жолду өчүрүү"</string>
@@ -1735,7 +1746,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> секунддан кийин кайталаңыз</item>
       <item quantity="one">1 секунддан кийин кайталаңыз</item>
     </plurals>
-    <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>
@@ -1853,6 +1864,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Жумуш профили күйгүзүлсүнбү?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Жумуш колдонмолоруңуз, эскертмелериңиз, дайын-даректериңиз жана жумуш профилинин башка функциялары күйгүзүлөт."</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Күйгүзүү"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Бул колдонмо Android\'дин эски версиясы үчүн иштеп чыгарылган, андыктан туура эмес иштеши мүмкүн. Жаңыртууларды издеп көрүңүз же иштеп чыгуучуга кайрылыңыз."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Жаңыртууну издөө"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Сизге жаңы билдирүүлөр келди"</string>
@@ -1946,11 +1959,11 @@
     <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="volume_dialog_ringer_guidance_vibrate" msgid="2055927873175228519">"Чалуулар менен эскертмелер дирилдөө режиминде иштейт"</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_do_not_disturb" msgid="7832584281883687653">"Тынчымды алба"</string>
-    <string name="zen_upgrade_notification_visd_title" msgid="2001148984371968620">"Жаңы: \"Тынчымды алба\" режими эскертмелерди жашырууда"</string>
+    <string name="zen_upgrade_notification_visd_title" msgid="2001148984371968620">"Жаңы: \"Тынчымды алба\" режими билдирмелерди жашырууда"</string>
     <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>
@@ -2008,4 +2021,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ЧЕКТЕЛГЕН чакага коюлган"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Жеке"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Жумуш"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index 63b87ac..ce17258 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"ຜູ້ເບິ່ງແຍງຂອງທ່ານປ່ຽນການຕັ້ງຄ່າສະຖານທີ່ແລ້ວ"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"ແຕະເພື່ອເບິ່ງການຕັ້ງຄ່າສະຖານທີ່ຂອງທ່ານ."</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"ສິດນີ້ | ແອັບລະບົບສາມາດຖ່າຍຮູບ ແລະ ບັນທຶກວິດີໂອໄດ້ໂດຍໃຊ້ກ້ອງຂອງລະບົບຕອນໃດກໍໄດ້. ຕ້ອງໃຊ້ສິດອະນຸຍາດ android.permission.CAMERA ໃຫ້ແອັບຖືນຳ"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"ຄວບຄຸມການສັ່ນ"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"ເຂົ້າ​ຫາ​ການ​ບໍ​ລິ​ການ​ໂທ IMS"</string>
@@ -543,6 +546,7 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ລອງໃໝ່ອີກຄັ້ງ."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ບໍ່ມີການລົງທະບຽນລາຍນິ້ວມື."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ອຸປະກອນນີ້ບໍ່ມີເຊັນເຊີລາຍນິ້ວມື."</string>
+    <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ປິດການເຮັດວຽກຂອງເຊັນເຊີໄວ້ຊົ່ວຄາວແລ້ວ."</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ນີ້ວ​ມື <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +590,7 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ບໍ່ສາມາດຢັ້ງຢືນໃບໜ້າໄດ້. ກະລຸນາລອງໃໝ່."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"ທ່ານຍັງບໍ່ໄດ້ຕັ້ງການປົດລັອກດ້ວຍໜ້າເທື່ອ."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"ບໍ່ຮອງຮັບການປົດລັອກດ້ວຍໜ້າຢູ່ອຸປະກອນນີ້."</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-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1619,7 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"ບໍລິການພື້ນໜ້າທີ່ເລີ່ມຕົ້ນຈາກພື້ນຫຼັງຈາກ <xliff:g id="PACKAGENAME">%1$s</xliff:g> ຈະບໍ່ມີສິດອະນຸຍາດໃນຂະນະທີ່ໃຊ້ໃນ R builds ໃນອະນາຄົດ. ກະລຸນາອ່ານ go/r-bg-fgs-restriction ແລະ ລາຍງານຂໍ້ຜິດພາດ."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ເພີ່ມ​ລະ​ດັບ​ສຽງ​ໃຫ້​ເກີນກວ່າ​ລະ​ດັບ​ທີ່​ແນະ​ນຳ​ບໍ?\n\n​ການ​ຮັບ​ຟັງ​ສຽງ​ໃນ​ລະ​ດັບ​ທີ່​ສູງ​ເປັນ​ໄລ​ຍະ​ເວ​ລາ​ດົນ​​ອາດ​ເຮັດ​ໃຫ້​ການ​ຟັງ​ຂອງ​ທ່ານ​ມີ​ບັນ​ຫາ​ໄດ້."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ໃຊ້ປຸ່ມລັດການຊ່ວຍເຂົ້າເຖິງບໍ?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"ເມື່ອເປີດໃຊ້ປຸ່ມລັດແລ້ວ, ໃຫ້ກົດປຸ່ມສຽງທັງສອງຄ້າງໄວ້ 3 ວິນາທີເພື່ອເລີ່ມຄຸນສົມບັດການຊ່ວຍເຂົ້າເຖິງ.\n\n ຄຸນສົມບັດການຊ່ວຍເຂົ້າເຖິງປັດຈຸບັນ:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n ທ່ານສາມາດປ່ຽນຄຸນສົມບັດໄດ້ໃນການຕັ້ງຄ່າ &gt; ການຊ່ວຍເຂົ້າເຖິງ."</string>
+    <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"ເມື່ອເປີດໃຊ້ທາງລັດແລ້ວ, ການກົດປຸ່ມລະດັບສຽງທັງສອງຄ້າງໄວ້ 3 ວິນາທີຈະເປັນການເລີ່ມຄຸນສົມບັດການຊ່ວຍເຂົ້າເຖິງ."</string>
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"ແກ້ໄຂທາງລັດ"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"ຍົກເລີກ"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"ປິດປຸ່ມລັດ"</string>
@@ -1853,6 +1858,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"ເປີດໃຊ້ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກບໍ?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"ແອັບວຽກຂອງທ່ານ, ການແຈ້ງເຕືອນ, ຂໍ້ມູນ ແລະ ຄຸນສົມບັດໂປຣໄຟລ໌ວຽກຈະຖືກເປີດໃຊ້"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"ເປີດ​"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"ແອັບນີ້ຖືກສ້າງຂຶ້ນສຳລັບ Android ເວີຊັນທີ່ເກົ່າກວ່າ ແລະ ອາດເຮັດວຽກໄດ້ບໍ່ປົກກະຕິ. ໃຫ້ລອງກວດສອບເບິ່ງອັບເດດ ຫຼື ຕິດຕໍ່ຜູ້ພັດທະນາ."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ກວດເບິ່ງອັບເດດ"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ທ່ານມີຂໍ້ຄວາມໃໝ່"</string>
@@ -2008,4 +2015,12 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ຖືກວາງໄວ້ໃນກະຕ່າ \"ຈຳກັດ\" ແລ້ວ"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"ສ່ວນຕົວ"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"ວຽກ"</string>
+    <string name="resolver_cant_share_with_work_apps" msgid="7539495559434146897">"ບໍ່ສາມາດແບ່ງປັນກັບແອັບວຽກໄດ້"</string>
+    <string name="resolver_cant_share_with_personal_apps" msgid="8020581735267157241">"ບໍ່ສາມາດແບ່ງປັນກັບແອັບສ່ວນຕົວໄດ້"</string>
+    <string name="resolver_cant_share_cross_profile_explanation" msgid="3536237105241882679">"ຜູ້ເບິ່ງແຍງໄອທີຂອງທ່ານບລັອກການແບ່ງປັນລະຫວ່າງແອັບສ່ວນຕົວ ແລະ ແອັບວຽກໄວ້"</string>
+    <string name="resolver_turn_on_work_apps" msgid="8987359079870455469">"ປຸ່ມເປີດຢູ່ແອັບວຽກ"</string>
+    <string name="resolver_turn_on_work_apps_explanation" msgid="6322467455509618928">"ເປີດໃຊ້ແອັບວຽກເພື່ອເຂົ້າເຖິງແອັບ ແລະ ລາຍຊື່ຜູ້ຕິດຕໍ່ວຽກ"</string>
+    <string name="resolver_no_apps_available" msgid="7710339903040989654">"ບໍ່ມີແອັບທີ່ສາມາດໃຊ້ໄດ້"</string>
+    <string name="resolver_no_apps_available_explanation" msgid="4662694431121196560">"ພວກເຮົາບໍ່ພົບແອັບໃດໆເລີຍ"</string>
+    <string name="resolver_switch_on_work" msgid="8294542702883688533">"ປຸ່ມເປີດຢູ່ວຽກ"</string>
 </resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index b8d848e..2c7e96b 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -195,6 +195,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administratorius atmetė prašymą įrenginį naudoti asmeniniais tikslais"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Įrenginys yra tvarkomas"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Šį įrenginį tvarko organizacija ir gali stebėti tinklo srautą. Palieskite, kad gautumėte daugiau informacijos."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Vietovės nustatymus pakeitė administratorius"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Palieskite, kad peržiūrėtumėte vietovės nustatymus."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Įrenginys bus ištrintas"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Administratoriaus programos negalima naudoti. Dabar įrenginio duomenys bus ištrinti.\n\nJei turite klausimų, susisiekite su organizacijos administratoriumi."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Neleidžiama spausdinti (<xliff:g id="OWNER_APP">%s</xliff:g>)."</string>
@@ -435,6 +437,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Ši privilegijuota | sistemos programa gali daryti nuotraukas ir įrašyti vaizdo įrašus naudodama sistemos fotoaparatą bet kuriuo metu. Programai taip pat būtinas leidimas „android.permission.CAMERA“"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"valdyti vibraciją"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"pasiekti IMS skambučių paslaugą"</string>
@@ -549,6 +552,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Bandykite dar kartą."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Neužregistruota jokių kontrolinių kodų."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Šiame įrenginyje nėra kontrolinio kodo jutiklio."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g> pirštas"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -592,6 +597,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nepavyko patvirtinti veido. Bandykite dar kartą."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Nenustatėte Atrakinimo pagal veidą."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Atrakinimas pagal veidą šiame įrenginyje nepalaikomas."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> veidas"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1658,7 +1665,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Fone pradėtai priekinio plano paslaugai iš „<xliff:g id="PACKAGENAME">%1$s</xliff:g>“ nebus suteiktas leidimas naudojimo metu būsimose R versijose. Apsilankykite go/r-bg-fgs-restriction ir pateikite pranešimą apie riktą."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Naudoti spartųjį pritaikymo neįgaliesiems klavišą?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Kai spartusis klavišas įjungtas, spaudžiant abu garsumo mygtukus 3 sekundes bus paleista pritaikymo neįgaliesiems funkcija.\n\n Dabartinė pritaikymo neįgaliesiems funkcija:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>„\n“\n Funkciją galite pakeisti skiltyje „Nustatymai“ &gt; „Pritaikymas neįgaliesiems“."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Redaguoti sparčiuosius klavišus"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Atšaukti"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Išjungti spartųjį klavišą"</string>
@@ -1917,6 +1925,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Įjungti darbo profilį?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Darbo programos, pranešimai, duomenys ir kitos darbo profilio funkcijos bus išjungtos"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Įjungti"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Programa nepasiekiama."</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ šiuo metu nepasiekiama."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ši programa sukurta naudoti senesnės versijos sistemoje „Android“ ir gali tinkamai neveikti. Pabandykite patikrinti, ar yra naujinių, arba susisiekite su kūrėju."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Tikrinti, ar yra naujinių"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Turite naujų pranešimų"</string>
@@ -2076,4 +2086,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"„<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>“ įkeltas į grupę APRIBOTA"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Asmeninė"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Darbo"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index f168bb4..8614214 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -193,6 +193,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administrators atteicās no tādas ierīces pārvaldības, ko var izmantot personiskām vajadzībām"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Ierīce tiek pārvaldīta"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Jūsu organizācija pārvalda šo ierīci un var uzraudzīt tīkla datplūsmu. Pieskarieties, lai saņemtu detalizētu informāciju."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Atrašanās vietas iestatījumus nomainīja administrators"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Pieskarieties, lai skatītu atrašanās vietas iestatījumus."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Jūsu ierīces dati tiks dzēsti"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Administratora lietotni nevar izmantot. Ierīcē saglabātie dati tiks dzēsti.\n\nJa jums ir kādi jautājumi, sazinieties ar savas organizācijas administratoru."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Drukāšanu atspējoja <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -432,6 +434,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Šī privileģētā/sistēmas lietotne var jebkurā brīdī uzņemt attēlus un ierakstīt videoklipus, izmantojot sistēmas kamerus. Lietotnei nepieciešama arī atļauja android.permission.CAMERA."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"kontrolēt vibrosignālu"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"piekļūt tūlītējās ziņojumapmaiņas pakalpojumam, lai veiktu zvanus"</string>
@@ -546,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Mēģiniet vēlreiz."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nav reģistrēts neviens pirksta nospiedums."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Šajā ierīcē nav pirksta nospieduma sensora."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g>. pirksts"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -589,6 +594,8 @@
     <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="7369928733504691611">"Autorizācija pēc sejas nav iestatīta."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Autorizācija pēc sejas šajā ierīcē netiek atbalstīta"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Seja <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1636,7 +1643,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Fonā sāktam priekšplāna pakalpojumam no pakotnes <xliff:g id="PACKAGENAME">%1$s</xliff:g> nebūs atļaujas “while-in-use” turpmākajās R versijās. Lūdzu, skatiet vietni go/r-bg-fgs-restriction un iesniedziet kļūdas pārskatu."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Vai izmantot pieejamības saīsni?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Ja saīsne ir iespējota, vienlaikus nospiežot abas skaļuma regulēšanas pogas un trīs sekundes turot tās, tiks palaista pieejamības funkcija.\n\n Pašreiz iestatītā pieejamības funkcija:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Šo funkciju var mainīt sadaļā Iestatījumi &gt; Pieejamība."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Rediģēt īsinājumtaustiņus"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Atcelt"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Izslēgt saīsni"</string>
@@ -1885,6 +1893,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Vai ieslēgt darba profilu?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Tiks ieslēgtas jūsu darba lietotnes, paziņojumi, dati un citas darba profila funkcijas."</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Ieslēgt"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Lietotne nav pieejama"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"Lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> pašlaik nav pieejama."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Šī lietotne tika izstrādāta vecākai Android versijai un var nedarboties pareizi. Meklējiet atjauninājumus vai sazinieties ar izstrādātāju."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Meklēt atjauninājumu"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Jums ir jaunas īsziņas."</string>
@@ -2042,4 +2052,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Pakotne “<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>” ir ievietota ierobežotā kopā."</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Privātais profils"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Darba profils"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index f94d191..a80779c 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"Администраторот ги променил поставките за локација"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Допрете за да ги видите поставките за локација."</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Оваа привилегирана | системска апликација може да фотографира и да снима видеа со системската камера во секое време. Потребно е апликацијата да ја има и дозволата android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"контролирај вибрации"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"пристапи до услугата за повици IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Обидете се повторно."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Не се запишани отпечатоци."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Уредов нема сензор за отпечатоци."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Прст <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Ликот не може да се потврди. Обидете се повторно."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Не сте поставиле „Отклучување со лик“."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"„Отклучувањето со лик“ не е поддржано на уредов."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Лице <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1616,7 +1623,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Услугата од преден план започната во заднина од <xliff:g id="PACKAGENAME">%1$s</xliff:g> нема да има дозола за „додека се користи“ во идните R-верзии. Погледнете на go/r-bg-fgs-restriction и испратете извештај за грешка."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Да го зголемиме звукот над препорачаното ниво?\n\nСлушањето звуци со голема јачина подолги периоди може да ви го оштети сетилото за слух."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Да се користи кратенка за „Пристапност“?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Кога е вклучена кратенката, ако ги притиснете двете копчиња за јачина на звук во времетраење од 3 секунди, ќе се стартува функција на пристапност.\n\n Тековна функција на пристапност:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Функцијата може да ја промените во „Поставки“ &gt; „Пристапност“."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Изменете ги кратенките"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Откажи"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Исклучи ја кратенката"</string>
@@ -1855,6 +1863,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Да се вклучи работниот профил?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Вашите работни апликации, известувања, податоци и други функции на работниот профил ќе бидат вклучени"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Вклучи"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Апликацијава е создадена за постара верзија на Android и може да не функционира правилно. Проверете за ажурирања или контактирајте со програмерот."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Проверка за ажурирање"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Имате нови пораки"</string>
@@ -2010,4 +2020,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> е ставен во корпата ОГРАНИЧЕНИ"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Лични"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Службени"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index 1efd211..ccc6b31 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -191,6 +191,10 @@
     <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>
+    <!-- no translation found for location_changed_notification_title (4119726617105166830) -->
+    <skip />
+    <!-- no translation found for location_changed_notification_text (198907268219396399) -->
+    <skip />
     <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>
@@ -429,6 +433,8 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"സിസ്‌റ്റം ക്യാമറ ഉപയോഗിച്ച് ഏത് സമയത്തും ചിത്രങ്ങളെടുക്കാനും വീഡിയോകൾ റെക്കോർഡ് ചെയ്യാനും ഈ വിശേഷാധികാര | സിസ്‌റ്റം ആപ്പിന് കഴിയും. ആപ്പിലും android.permission.CAMERA അനുമതി ഉണ്ടായിരിക്കണം"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"വൈബ്രേറ്റുചെയ്യൽ നിയന്ത്രിക്കുക"</string>
     <string name="permdesc_vibrate" msgid="8733343234582083721">"വൈബ്രേറ്റർ നിയന്ത്രിക്കുന്നതിന് അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു."</string>
+    <!-- no translation found for permdesc_vibrator_state (7050024956594170724) -->
+    <skip />
     <string name="permlab_callPhone" msgid="1798582257194643320">"ഫോൺ നമ്പറുകളിലേക്ക് നേരിട്ട് വിളിക്കുക"</string>
     <string name="permdesc_callPhone" msgid="5439809516131609109">"നിങ്ങളുടെ ഇടപെടൽ ഇല്ലാതെ ഫോൺ നമ്പറുകളിലേക്ക് കോൾ ചെയ്യാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു. ഇത് അപ്രതീക്ഷിത നിരക്കുകൾക്കോ കോളുകൾക്കോ ഇടയാക്കാം. ഇത് അടിയന്തര നമ്പറുകളിലേക്ക് വിളിക്കാൻ അപ്ലിക്കേഷനെ അനുവദിക്കില്ലെന്ന കാര്യം ശ്രദ്ധിക്കുക. ക്ഷുദ്രകരമായ അപ്ലിക്കേഷനുകൾ നിങ്ങളുടെ സ്ഥിരീകരണമില്ലാതെ കോളുകൾ ചെയ്യുന്നത് പണച്ചെലവിനിടയാക്കാം."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS കോൾ സേവനം ആക്സസ് ചെയ്യുക"</string>
@@ -543,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"വീണ്ടും ശ്രമിക്കൂ."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"വിരലടയാളങ്ങൾ എൻറോൾ ചെയ്തിട്ടില്ല."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ഈ ഉപകരണത്തിൽ ഫിംഗർപ്രിന്റ് സെൻസറില്ല."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"കൈവിരൽ <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +594,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"മുഖം പരിശോധിക്കാൻ കഴിയില്ല. വീണ്ടും ശ്രമിക്കൂ."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"മുഖം തിരിച്ചറിഞ്ഞുള്ള അൺലോക്ക് സജ്ജീകരിച്ചില്ല."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"മുഖം തിരിച്ചറിഞ്ഞുള്ള അൺലോക്ക് ഈ ഉപകരണം പിന്തുണയ്ക്കുന്നില്ല."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"മുഖം <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1624,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> എന്നതിൽ നിന്നുള്ള പശ്ചാത്തലത്തിൽ ആരംഭിച്ച് ഫോർഗ്രൗണ്ടിൽ വരുന്ന സേവനത്തിന് ഭാവി R ബിൽഡുകളിൽ, \'ഉപയോഗിക്കുമ്പോൾ മാത്രമുള്ള അനുമതി\' ഉണ്ടായിരിക്കില്ല. go/r-bg-fgs-restriction കണ്ട് ബഗ് റിപ്പോർട്ട് ഫയൽ ചെയ്യുക."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"മുകളിൽക്കൊടുത്തിരിക്കുന്ന ശുപാർശചെയ്‌ത ലെവലിലേക്ക് വോളിയം വർദ്ധിപ്പിക്കണോ?\n\nഉയർന്ന വോളിയത്തിൽ ദീർഘനേരം കേൾക്കുന്നത് നിങ്ങളുടെ ശ്രവണ ശേഷിയെ ദോഷകരമായി ബാധിക്കാം."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ഉപയോഗസഹായി കുറുക്കുവഴി ഉപയോഗിക്കണോ?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"കുറുക്കുവഴി ഓണാണെങ്കിൽ, രണ്ട് വോളിയം ബട്ടണുകളും 3 സെക്കൻഡ് നേരത്തേക്ക് അമർത്തുന്നത് ഉപയോഗസഹായി ഫീച്ചർ ആരംഭിക്കും.\n\n നിലവിലെ  ഉപയോഗസഹായി ഫീച്ചർ:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n ക്രമീകരണം &gt; ഉപയോഗസഹായി എന്നതിൽ ഏത് സമയത്തും നിങ്ങൾക്ക് ഫീച്ചർ മാറ്റാവുന്നതാണ്."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"കുറുക്കുവഴികൾ തിരുത്തുക"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"റദ്ദാക്കുക"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"കുറുക്കുവഴി ‌ഓഫാക്കുക"</string>
@@ -1853,6 +1864,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"ഔദ്യോഗിക പ്രൊഫൈൽ ഓണാക്കണോ?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"നിങ്ങളുടെ ഔദ്യോഗിക ആപ്പുകൾ, അറിയിപ്പുകൾ, ഡാറ്റ, മറ്റ് ഔദ്യോഗിക പ്രൊഫൈൽ ഫീച്ചറുകൾ എന്നിവ ഓണാക്കും"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"ഓണാക്കുക"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"ഈ ആപ്പ് Android-ന്റെ പഴയ പതിപ്പിനായി നിർമ്മിച്ചിരിക്കുന്നതിനാൽ ശരിയായി പ്രവർത്തിച്ചേക്കില്ല. അപ്‌ഡേറ്റിനായി പരിശോധിക്കുക, അല്ലെങ്കിൽ ഡെവലപ്പറുമായി ബന്ധപ്പെടുക."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"അപ്‌ഡേറ്റിനായി പരിശോധിക്കുക"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"നിങ്ങൾക്ക് പുതിയ സന്ദേശങ്ങൾ ഉണ്ട്"</string>
@@ -2008,4 +2021,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> നിയന്ത്രിത ബക്കറ്റിലേക്ക് നീക്കി"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"വ്യക്തിപരമായത്"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"ജോലിസ്ഥലം"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index cc03175..a21f6ec 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"Таны админ байршлын тохиргоог өөрчилсөн байна"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Байршлын тохиргоогоо харахын тулд товшино уу."</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Энэ хамгаалагдсан | системийн апп нь системийн камер ашиглан ямар ч үед зураг авж, видео бичих боломжтой. Аппыг ашиглахын тулд android.permission.CAMERA-н зөвшөөрөл мөн шаардлагатай"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"чичиргээг удирдах"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS дуудлагын үйлчилгээнд хандах"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Дахин оролдно уу."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Бүртгүүлсэн хурууны хээ алга."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Энэ төхөөрөмжид хурууны хээ мэдрэгч алга."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Хурууны хээ <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Царайг бататгаж чадсангүй. Дахин оролдоно уу."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Та царайгаар тайлахыг тохируулаагүй байна."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Царайгаар тайлахыг энэ төхөөрөмж дээр дэмждэггүй."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Царай <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g>-н дэлгэц дээрх үйлчилгээг эхлүүлдэг дэвсгэр нь цаашид R хийцийн ашиглах үеийн зөвшөөрөлгүй болно. go/r-bg-fgs-restriction-г үзэж, алдааны мэдээ илгээнэ үү."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Дууг санал болгосноос чанга болгож өсгөх үү?\n\nУрт хугацаанд чанга хөгжим сонсох нь таны сонсголыг муутгаж болно."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Хүртээмжийн товчлолыг ашиглах уу?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Товчлолыг асаасан үед дуун товчлуурыг 3 секунд дарснаар хүртээмжийн онцлогийг эхлүүлнэ.\n\n Одоогийн хүртээмжийн онцлог:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Онцлогийг Тохиргоо &gt; Хүртээмж хэсэгт өөрчлөх боломжтой."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Товчлолуудыг засах"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Болих"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Товчлолыг унтраах"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Ажлын профайлыг асаах уу?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Таны ажлын апп, мэдэгдэл, өгөгдөл болон бусад ажлын профайлын онцлогийг асаана"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Асаах"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Энэ аппыг Андройдын хуучин хувилбарт зориулсан бөгөөд буруу ажиллаж болзошгүй. Шинэчлэлтийг шалгаж эсвэл хөгжүүлэгчтэй холбогдоно уу."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Шинэчлэлтийг шалгах"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Танд шинэ зурвасууд байна"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>-г ХЯЗГААРЛАСАН сагс руу орууллаа"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Хувийн"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Ажил"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index cd9b6fc..5f392af 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"तुमच्या ॲडमिनने स्थान सेटिंग्ज बदलल्या आहेत"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"तुमची स्थान सेटिंग्ज पाहण्यासाठी टॅप करा."</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"हे विशेषाधिकृत आहे | सिस्टम ॲप कधीही सिस्टम कॅमेरा वापरून फोटो आणि व्हिडिओ रेकॉर्ड करू शकते. ॲपला android.permission.CAMERA परवानगी देण्याचीदेखील आवश्यकता आहे"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"व्हायब्रेट नियंत्रित करा"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS कॉल सेवा अ‍ॅक्सेस करा"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"पुन्हा प्रयत्न करा."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"कोणत्याही फिंगरप्रिंटची नोंद झाली नाही"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"या डिव्हाइसमध्ये फिंगरप्रिंट सेन्सर नाही."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g> बोट"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"चेहरा पडताळणी करू शकत नाही. पुन्हा प्रयत्न करा."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"तुम्ही फेस अनलॉक सेट केले नाही."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"या डिव्हाइसवर फेस अनलॉकला सपोर्ट नाही."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"चेहरा <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> कडून बॅकग्राउंडने फोरग्राउंडमध्ये सुरू केलेल्या सेवेला भविष्यातील आर बिल्डमध्ये वापर करते वेळची परवानगी नसेल. कृपया go/r-bg-fgs-restriction पहा आणि बगची तक्रार नोंदवा."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"शिफारस केलेल्‍या पातळीच्या वर आवाज वाढवायचा?\n\nउच्च आवाजात दीर्घ काळ ऐकण्‍याने आपल्‍या श्रवणशक्तीची हानी होऊ शकते."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"प्रवेशयोग्यता शॉर्टकट वापरायचा?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"शॉर्टकट चालू असताना, दोन्ही आवाज बटणे 3 सेकंद दाबल्याने प्रवेशयोग्यता वैशिष्ट्य सुरू होईल.\n\n वर्तमान प्रवेशयोग्यता वैशिष्ट्य:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n तुम्ही सेटिंग्ज &gt; प्रवेशयोग्यता मध्ये वैशिष्ट्य बदलू शकता."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"शॉर्टकट संपादित करा"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"रद्द करा"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"शॉर्टकट बंद करा"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"कार्य प्रोफाइल चालू ठेवायची?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"तुमची कार्य अ‍ॅप्स, सूचना, डेटा आणि अन्य कार्य प्रोफाइल वैशिष्ट्ये चालू केली जातील"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"चालू करा"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"हे अ‍ॅप Android च्या जुन्या आवृत्ती साठी तयार करण्यात आले होते आणि योग्यरितीने कार्य करू शकणार नाही. अपडेट आहेत का ते तपासून पाहा, किंवा डेव्हलपरशी संपर्क साधण्याचा प्रयत्न करा."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"अपडेट आहे का ते तपासा"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"आपल्याकडे नवीन मेसेज आहेत"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> हे प्रतिबंधित बादलीमध्ये ठेवण्यात आले आहे"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"वैयक्तिक"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"ऑफिस"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 0a40735..848ebf4 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Pentadbir melepaskan peranti untuk kegunaan peribadi"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Peranti ini diurus"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Organisasi anda mengurus peranti ini dan mungkin memantau trafik rangkaian. Ketik untuk mendapatkan butiran."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Tetapan lokasi diubah oleh pentadbir anda"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Ketik untuk melihat tetapan lokasi anda."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Peranti anda akan dipadam"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Apl pentadbir tidak dapat digunakan. Peranti anda akan dipadamkan sekarang.\n\nJika anda ingin mengemukakan soalan, hubungi pentadbir organisasi anda."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Pencetakan dilumpuhkan oleh <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Apl sistem | terlindung ini boleh mengambil gambar dan merakam video menggunakan kamera sistem pada bila-bila masa. Apl juga perlu mempunyai kebenaran android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"kawal getaran"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"akses perkhidmatan panggilan IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Cuba lagi."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Tiada cap jari didaftarkan."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Peranti ini tiada penderia cap jari."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Jari <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Tidak dapat mengesahkan wajah. Cuba lagi."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Anda belum menyediakan wajah buka kunci."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Wajah buka kunci tidak disokong pada peranti ini."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Wajah <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Perkhidmatan latar depan dimulakan latar belakang daripada <xliff:g id="PACKAGENAME">%1$s</xliff:g> tidak akan mempunyai kebenaran semasa-dalam-penggunaan dalam binaan R akan datang. Sila lihat go/r-bg-fgs-restriction dan failkan laporan pepijat."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Gunakan Pintasan Kebolehaksesan?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Apabila pintasan dihidupkan, tindakan menekan kedua-dua butang kelantangan selama 3 saat akan memulakan ciri kebolehaksesan.\n\n Ciri kebolehaksesan semasa:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Anda boleh menukar ciri itu dalam Tetapan &gt; Kebolehaksesan."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Edit pintasan"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Batal"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Matikan pintasan"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Hidupkan profil kerja?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Apl kerja, pemberitahuan, data dan ciri profil kerja anda yang lain akan dihidupkan"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Hidupkan"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Apl tidak tersedia"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak tersedia sekarang."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Apl ini dibina untuk versi Android yang lebih lama dan mungkin tidak berfungsi dengan betul. Cuba semak kemas kini atau hubungi pembangun."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Semak kemas kini"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Anda mempunyai mesej baharu"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> telah diletakkan dalam baldi TERHAD"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Peribadi"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Kerja"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 9e04841..95a41f2 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"သင့်စီမံခန့်ခွဲသူက တည်နေရာပြ ဆက်တင်များကို ပြောင်းထားသည်"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"သင့်တည်နေရာပြ ဆက်တင်များကို ကြည့်ရန် တို့ပါ။"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"ခွင့်ပြုချက်ရှိသည့် | ဤစနစ်အက်ပ်သည် စနစ်ကင်မရာကို အသုံးပြု၍ ဓာတ်ပုံနှင့် ဗီဒီယိုများကို အချိန်မရွေး ရိုက်ကူးနိုင်သည်။ အက်ပ်ကလည်း android.permission.CAMERA ခွင့်ပြုချက် ရှိရပါမည်"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"တုန်ခုန်မှုအား ထိန်းချုပ်ခြင်း"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS ဖုန်းခေါ်ဆိုမှု ဝန်ဆောင်ဌာန ဝင်ကြည့်ပါ"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ပြန်ကြိုးစားပါ"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"မည်သည့် လက်ဗွေကိုမျှ ထည့်သွင်းမထားပါ။"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ဤစက်တွင် လက်ဗွေအာရုံခံကိရိယာ မရှိပါ။"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"လက်ချောင်း <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"မျက်နှာကို အတည်ပြု၍ မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"မျက်နှာမှတ် သော့ဖွင့်ခြင်းကို ထည့်သွင်းမထားပါ"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"ဤစက်ပစ္စည်းတွင် မျက်နှာမှတ် သော့ဖွင့်ခြင်းကို သုံး၍မရပါ။"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"မျက်နှာ <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> တွင် မှ စတင်သည့် foreground ဝန်ဆောင်မှုသည် နောက်ထွက်ရှိမည့် R စုပေါင်းစပ်ပေါင်း ပရိုဂရမ်များတွင် အသုံးပြုစဉ်အတွင်း ခွင့်ပြုချက် ရရှိမည်မဟုတ်ပါ။ go/r-bg-fgs-ကန့်သတ်ချက်များကို ကြည့်ပြီး အမှားသတင်းပို့ချက်တစ်ခု တင်သွင်းပါ။"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"အသံကို အကြံပြုထားသည့် ပမာဏထက် မြှင့်ပေးရမလား?\n\nအသံကို မြင့်သည့် အဆင့်မှာ ကြာရှည်စွာ နားထောင်ခြင်းက သင်၏ နားကို ထိခိုက်စေနိုင်သည်။"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"အများသုံးစွဲနိုင်မှု ဖြတ်လမ်းလင့်ခ်ကို အသုံးပြုလိုပါသလား။"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"ဖြတ်လမ်းလင့်ခ်ကို ဖွင့်ထားစဉ် အသံအတိုးအလျှော့ခလုတ် နှစ်ခုစလုံးကို ၃ စက္ကန့်ခန့် ဖိထားခြင်းဖြင့် အများသုံးစွဲနိုင်မှုဆိုင်ရာ ဝန်ဆောင်မှုကို ဖွင့်နိုင်သည်။\n\n လက်ရှိ အများသုံးစွဲနိုင်မှုဆိုင်ရာ ဝန်ဆောင်မှု−\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n ဝန်ဆောင်မှုကို ဆက်တင်များ &gt; အများသုံးစွဲနိုင်မှုတွင် ပြောင်းလဲနိုင်ပါသည်။"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"ဖြတ်လမ်းများကို တည်းဖြတ်ရန်"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"မလုပ်တော့"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"ဖြတ်လမ်းလင့်ခ်ကို ပိတ်ရန်"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"အလုပ်ပရိုဖိုင် ဖွင့်လိုသလား။"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"သင်၏ အလုပ်အက်ပ်၊ အကြောင်းကြားချက်၊ ဒေတာနှင့် အခြားအလုပ်ပရိုဖိုင် ဝန်ဆောင်မှုများကို ဖွင့်လိုက်ပါမည်"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"ဖွင့်ပါ"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"ဤအက်ပ်ကို Android ဗားရှင်းဟောင်းအတွက် ပြုလုပ်ထားခြင်းဖြစ်ပြီး ပုံမှန်အလုပ်မလုပ်နိုင်ပါ။ အပ်ဒိတ်များအတွက် ရှာကြည့်ပါ သို့မဟုတ် ဆော့ဖ်ဝဲအင်ဂျင်နီယာကို ဆက်သွယ်ပါ။"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"အပ်ဒိတ်စစ်ရန်"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"သင့်ထံတွင် စာအသစ်များရောက်နေသည်"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ကို တားမြစ်ထားသော သိမ်းဆည်းမှုအတွင်းသို့ ထည့်ပြီးပါပြီ"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"ကိုယ်ပိုင်"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"အလုပ်"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 45ab3e5..7145ef3 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administratoren overførte enheten til personlig bruk"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Enheten administreres"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Organisasjonen din kontrollerer denne enheten og kan overvåke nettverkstrafikk. Trykk for å få mer informasjon."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Posisjonsinnstillingene er endret av administratoren din"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Trykk for å se posisjonsinnstillingene dine."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Enheten blir slettet"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Administratorappen kan ikke brukes. Enheten din blir nå tømt.\n\nTa kontakt med administratoren for organisasjonen din hvis du har spørsmål."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> har slått av utskrift."</string>
@@ -293,7 +295,7 @@
     <string name="permgroupdesc_storage" msgid="6351503740613026600">"åpne bilder, medieinnhold og filer på enheten din"</string>
     <string name="permgrouplab_microphone" msgid="2480597427667420076">"Mikrofon"</string>
     <string name="permgroupdesc_microphone" msgid="1047786732792487722">"ta opp lyd"</string>
-    <string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"Fysisk aktivitet-"</string>
+    <string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"Fysisk aktivitet"</string>
     <string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"tilgang til den fysiske aktiviteten din"</string>
     <string name="permgrouplab_camera" msgid="9090413408963547706">"Kamera"</string>
     <string name="permgroupdesc_camera" msgid="7585150538459320326">"ta bilder og ta opp video"</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Denne privilegerte | systemappen kan når som helst ta bilder og spille inn videoer med et systemkamera. Dette krever at appen også har tillatelsen android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"kontrollere vibreringen"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"få tilgang til nettprattjenesten for ringing"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Prøv igjen."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Ingen fingeravtrykk er registrert."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Denne enheten har ikke fingeravtrykkssensor."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Kan ikke bekrefte ansiktet. Prøv igjen."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Du har ikke konfigurert Ansiktslås."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Ansiktslås støttes ikke på denne enheten"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Ansikt <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Forgrunnstjenesten fra <xliff:g id="PACKAGENAME">%1$s</xliff:g>, som ble startet i bakgrunnen, kommer ikke til å ha tillatelser mens den er i bruk i fremtidige R-delversjoner. Les go/r-bg-fgs-restriction og send inn en feilrapport."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Vil du bruke tilgjengelighetssnarveien?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Når snarveien er på, starter en tilgjengelighetsfunksjon når du trykker inn begge volumknappene i tre sekunder.\n\n Nåværende tilgjengelighetsfunksjon:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Du kan endre funksjonen i Innstillinger &gt; Tilgjengelighet."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Endre snarveier"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Avbryt"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Slå av snarveien"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Vil du slå på jobbprofilen?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Jobbappene dine samt varsler, data og andre funksjoner i jobbprofilen din blir slått på"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Slå på"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Appen er ikke tilgjengelig"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> er ikke tilgjengelig for øyeblikket."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Denne appen er utviklet for en eldre versjon av Android og fungerer kanskje ikke som den skal. Prøv å se etter oppdateringer, eller kontakt utvikleren."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Se etter oppdateringer"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Du har nye meldinger"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> er blitt plassert i TILGANGSBEGRENSET-toppmappen"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personlig"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Jobb"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index 11033a7..6a61636 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"तपाईंका प्रशासकले परिवर्तन गरेका स्थानसम्बन्धी सेटिङहरू"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"आफ्नो स्थानका सेटिङहरू हेर्न ट्याप गर्नुहोस्।"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"यस विशेषाधिकार प्राप्त अनुप्रयोगले जुनसुकै समय प्रणालीको क्यामेरा प्रयोग गरी तस्बिर खिच्न र भिडियो रेकर्ड गर्न सक्छ। अनुप्रयोगसँग पनि android.permission.CAMERA सम्बन्धी अनुमति हुनु पर्छ"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"कम्पन नियन्त्रण गर्नुहोस्"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS कल सेवा पहुँच गर्नुहोस्"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"पुन: प्रयास गर्नुहोला।"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"कुनै पनि फिंगरप्रिन्ट दर्ता गरिएको छैन।"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"यो यन्त्रमा कुनै पनि फिंगरप्रिन्ट सेन्सर छैन।"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"औंला <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"अनुहार पुष्टि गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"तपाईंले फेस अनलक सुविधा सेट अप गर्नुभएको छैन।"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"यस यन्त्रमा फेस अनलक सुविधा प्रयोग गर्न मिल्दैन।"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"अनुहार <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1620,7 +1627,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> को पृष्ठभूमिबाट सुरु गरिने अग्रभूमि सेवाका भविष्यमा आउने R बिल्डहरूमा चलाउँदै गर्दा प्रयोग गर्ने अनुमतिको दिइने छैन। कृपया go/r-bg-fgs-restriction हेर्नुहोस् र कुनै बगसम्बन्धी रिपोर्ट फाइल गर्नुहोस्।"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"सिफारिस तहभन्दा आवाज ठुलो गर्नुहुन्छ?\n\nलामो समय सम्म उच्च आवाजमा सुन्दा तपाईँको सुन्ने शक्तिलाई हानी गर्न सक्छ।"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"पहुँच सम्बन्धी सर्टकट प्रयोग गर्ने हो?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"सर्टकट सक्रिय हुँदा, भोल्युमका दुवै बटनहरूलाई ३ सेकेन्डसम्म थिची राख्नाले पहुँच सम्बन्धी कुनै सुविधा सुरु हुनेछ।\n\n हाल व्यवहारमा रहेको पहुँच सम्बन्धी सुविधा:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n तपाईं सेटिङहरू अन्तर्गतको पहुँच सम्बन्धी विकल्पमा गई उक्त सुविधालाई बदल्न सक्नुहुन्छ।"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"सर्टकटहरू सम्पादन गर्नुहोस्"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"रद्द गर्नुहोस्"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"सर्टकटलाई निष्क्रिय पार्नुहोस्"</string>
@@ -1859,6 +1867,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"कार्य प्रोफाइल सक्रिय गर्ने?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"तपाईंका कार्यसम्बन्धी अनुप्रयोग, सूचना, डेटा र कार्य प्रोफाइलका अन्य सुविधाहरू सक्रिय गरिने छन्‌"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"सक्रिय गर्नुहोस्"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"यो अनुप्रयोग Android को पुरानो संस्करणका लागि बनाइएको हुनाले यसले सही ढङ्गले काम नगर्न सक्छ। अद्यावधिकहरू उपलब्ध छन् वा छैनन् भनी जाँच गरी हेर्नुहोस् वा यसको विकासकर्तालाई सम्पर्क गर्नुहोस्।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"अद्यावधिक उपलब्ध छ वा छैन भनी जाँच गर्नुहोस्"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"तपाईंलाई नयाँ सन्देश आएको छ"</string>
@@ -2014,4 +2024,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> लाई प्रतिबन्धित बाल्टीमा राखियो"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"व्यक्तिगत"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"काम"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-night/colors.xml b/core/res/res/values-night/colors.xml
index c5e72f0..7f77e6c 100644
--- a/core/res/res/values-night/colors.xml
+++ b/core/res/res/values-night/colors.xml
@@ -32,4 +32,8 @@
     <color name="chooser_row_divider">@color/list_divider_color_dark</color>
     <color name="chooser_gradient_background">@color/loading_gradient_background_color_dark</color>
     <color name="chooser_gradient_highlight">@color/loading_gradient_highlight_color_dark</color>
+
+    <color name="resolver_tabs_active_color">#FF8AB4F8</color>
+    <color name="resolver_empty_state_text">#FFFFFF</color>
+    <color name="resolver_empty_state_icon">#FFFFFF</color>
 </resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 13f6725..e959a07 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"De beheerder heeft het apparaat afgestaan voor persoonlijk gebruik"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Apparaat wordt beheerd"</string>
     <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="4119726617105166830">"Locatie-instellingen gewijzigd door je beheerder"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Tik om je locatie-instellingen te bekijken."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Je apparaat wordt gewist"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"De beheer-app kan niet worden gebruikt. Je apparaat wordt nu gewist.\n\nNeem contact op met de beheerder van je organisatie als je vragen hebt."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Afdrukken uitgeschakeld door <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Deze gemachtigde app/systeem-app kan op elk gewenst moment foto\'s maken en video\'s opnemen met een systeemcamera. De app moet ook het recht android.permission.CAMERA hebben."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"trilling beheren"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"toegang tot IMS-service voor bellen"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Probeer het opnieuw."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Geen vingerafdrukken geregistreerd."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Dit apparaat heeft geen vingerafdruksensor."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Vinger <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"Je hebt ontgrendelen via gezichtsherkenning niet ingesteld."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Ontgrendelen via gezichtsherkenning wordt niet ondersteund op dit apparaat."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Gezicht <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"De op de achtergrond gestarte voorgrondservice van <xliff:g id="PACKAGENAME">%1$s</xliff:g> heeft geen rechten tijdens gebruik in toekomstige R-builds. Ga naar go/r-bg-fgs-restriction en dien een bugrapport in."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Snelkoppeling toegankelijkheid gebruiken?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Wanneer de snelkoppeling is ingeschakeld, kun je drie seconden op beide volumeknoppen drukken om een toegankelijkheidsfunctie te starten.\n\n Huidige toegankelijkheidsfunctie:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Je kunt de functie wijzigen in Instellingen &gt; Toegankelijkheid."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Snelkoppelingen bewerken"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Annuleren"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Sneltoets uitschakelen"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Werkprofiel inschakelen?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Je werk-apps, meldingen, gegevens en andere functies van je werkprofiel worden uitgeschakeld"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Inschakelen"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"App is niet beschikbaar"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is momenteel niet beschikbaar."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Deze app is ontwikkeld voor een oudere versie van Android en werkt mogelijk niet op de juiste manier. Controleer op updates of neem contact op met de ontwikkelaar."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Controleren op update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Je hebt nieuwe berichten"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> is in de bucket RESTRICTED geplaatst"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Persoonlijk"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Werk"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index 4424af7..53b231c 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"ଲୋକେସନ୍ ସେଟିଂସ୍ ଆପଣଙ୍କର ଆଡମିନଙ୍କ ଦ୍ୱରା ବଦଳାଯାଇଛି"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"ଆପଣଙ୍କର ଲୋକେସନ୍ ସେଟିଂସ୍ ଦେଖିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ।"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"ଏହି ପ୍ରମୁଖ | ସିଷ୍ଟମ୍ ଆପ୍ ଯେକୌଣସି ସମୟରେ ଏକ ସିଷ୍ଟମ୍ କ୍ୟାମେରା ବ୍ୟବହାର କରି ଛବିଗୁଡ଼ିକ ନେଇପାରେ ଏବଂ ଭିଡିଓଗୁଡ଼ିକ ରେକର୍ଡ କରିପାରେ। ଆପ୍ ମଧ୍ୟ android.permission.CAMERA ଅନୁମତି ଆବଶ୍ୟକ କରେ"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"କମ୍ପନ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS କଲ୍‍ ସେବା ଆକ୍ସେସ୍‍ କରେ"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"କୌଣସି ଆଙ୍ଗୁଠି ଚିହ୍ନ ପଞ୍ଜୀକୃତ ହୋଇନାହିଁ।"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ଏହି ଡିଭାଇସ୍‌ରେ ଟିପଚିହ୍ନ ସେନ୍‍ସର୍ ନାହିଁ।"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ଆଙ୍ଗୁଠି <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ମୁହଁ ଚିହ୍ନଟ କରିପାରିଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"ଆପଣ ଫେସ୍ ଅନ୍‌ଲକ୍ ସେଟ୍ ଅପ୍ କରିନାହାଁନ୍ତି"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"ଏହି ଡିଭାଇସ୍‌ରେ ଫେସ୍ ଅନ୍‌ଲକ୍ ସମର୍ଥିତ ନୁହେଁ।"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g>ଙ୍କ ଫେସ୍‍"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"ପୃଷ୍ଠଭୂମିରେ <xliff:g id="PACKAGENAME">%1$s</xliff:g>ରୁ ଆରମ୍ଭ ହୋଇଥିବା ସମ୍ମୁଖଭାଗ ସେବା ପାଇଁ ଭବିଷ୍ୟତର R ବିଲ୍ଡଗୁଡ଼ିକରେ ବ୍ୟବହାର କରାଯିବା ସମୟରେ ଅନୁମତି ସୁବିଧା ରହିବ ନାହିଁ। ଦୟାକରି go/r-bg-fgs-restriction ଦେଖନ୍ତୁ ଏବଂ ଏକ ବଗରିପୋର୍ଟ ଫାଇଲ୍ କରନ୍ତୁ।"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ମାତ୍ରା ବଢ଼ାଇ ସୁପାରିଶ ସ୍ତର ବଢ଼ାଉଛନ୍ତି? \n\n ଲମ୍ବା ସମୟ ପର୍ଯ୍ୟନ୍ତ ଉଚ୍ଚ ଶବ୍ଦରେ ଶୁଣିଲେ ଆପଣଙ୍କ ଶ୍ରବଣ ଶକ୍ତି ଖରାପ ହୋଇପାରେ।"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ଆକ୍ସେସବିଲିଟି ଶର୍ଟକଟ୍‍ ବ୍ୟବହାର କରିବେ?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"ସର୍ଟକଟ୍‌ ଅନ୍‌ ଥିବା ବେଳେ, ଉଭୟ ଭଲ୍ୟୁମ୍‍ ବଟନ୍‍ 3 ସେକେଣ୍ଡ ପାଇଁ ଦବାଇବା ଦ୍ୱାରା ଆକ୍ସେସବିଲିଟି ବୈଶିଷ୍ଟ ଆରମ୍ଭ ହେବ।\n\n ସମ୍ପ୍ରତି ଆକ୍ସେସବିଲିଟି ବୈଶିଷ୍ଟ୍ୟ:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n ସେଟିଙ୍ଗ ଓ ଆକ୍ସେସବିଲିଟିରେ ଆପଣ ବୈଶିଷ୍ଟ୍ୟ ବଦଳାଇ ପାରିବେ।"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"ସର୍ଟକଟଗୁଡ଼ିକୁ ସମ୍ପାଦନ କରନ୍ତୁ"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"ବାତିଲ୍ କରନ୍ତୁ"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"ଶର୍ଟକଟ୍‍ ବନ୍ଦ କରନ୍ତୁ"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"ୱର୍କ ପ୍ରୋଫାଇଲ୍‌କୁ ଚାଲୁ କରିବେ?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"ଆପଣଙ୍କର କାର୍ଯ୍ୟକାରୀ ଆପ୍‌, ବିଜ୍ଞପ୍ତି, ଡାଟା ଓ ଅନ୍ୟ ୱର୍କ ପ୍ରୋଫାଇଲ୍‌ଗୁଡ଼ିକ ଚାଲୁ ହୋଇଯିବ"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"ଅନ୍ କରନ୍ତୁ"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"ଏହି ଆପ୍‌କୁ Androidର ପୁରୁଣା ଭର୍ସନ୍ ପାଇଁ ନିର୍ମାଣ କରାଯାଇଥିଲା ଏବଂ ଠିକ୍ ଭାବେ କାମ କରିନପାରେ। ଏହାପାଇଁ ଅପଡେଟ୍‌ ଅଛି କି ନାହିଁ ଯାଞ୍ଚ କରନ୍ତୁ କିମ୍ବା ଡେଭେଲପର୍‌ଙ୍କ ସହିତ ସମ୍ପର୍କ କରନ୍ତୁ।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ଅପଡେଟ୍‌ ପାଇଁ ଯାଞ୍ଚ କରନ୍ତୁ"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ଆପଣଙ୍କ ପାଖରେ ନୂଆ ମେସେଜ୍‍ ରହିଛି"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>କୁ ପ୍ରତିବନ୍ଧିତ ବକେଟରେ ରଖାଯାଇଛି"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"ବ୍ୟକ୍ତିଗତ"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"କାର୍ଯ୍ୟ"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 8c87581..b5194eb7 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਟਿਕਾਣਾ ਸੈਟਿੰਗਾਂ ਨੂੰ ਬਦਲ ਦਿੱਤਾ ਹੈ"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"ਆਪਣੀਆਂ ਟਿਕਾਣਾ ਸੈਟਿੰਗਾਂ ਨੂੰ ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ।"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"ਇਹ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰ ਸਿਸਟਮ ਐਪ ਕਿਸੇ ਵੇਲੇ ਵੀ ਸਿਸਟਮ ਕੈਮਰੇ ਨੂੰ ਵਰਤ ਕੇ ਤਸਵੀਰਾਂ ਖਿੱਚ ਸਕਦੀ ਹੈ ਅਤੇ ਵੀਡੀਓ ਫ਼ਾਈਲਾਂ ਰਿਕਾਰਡ ਕਰ ਸਕਦੀ ਹੈ। ਐਪ ਨੂੰ ਵੀ android.permission.CAMERA ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੈ।"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"ਵਾਈਬ੍ਰੇਸ਼ਨ ਤੇ ਨਿਯੰਤਰਣ ਪਾਓ"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS ਕਾਲ ਸੇਵਾ ਤੱਕ ਪਹੁੰਚ"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ਕੋਈ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਰਜ ਨਹੀਂ ਕੀਤੇ ਗਏ।"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ਇਸ ਡੀਵਾਈਸ ਵਿੱਚ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਨਹੀਂ ਹੈ।"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ਉਂਗਲ <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ਚਿਹਰੇ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"ਤੁਸੀਂ ਚਿਹਰਾ ਅਣਲਾਕ ਸੈੱਟਅੱਪ ਨਹੀਂ ਕੀਤਾ ਹੈ।"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"ਇਸ ਡੀਵਾਈਸ ਵਿੱਚ ਚਿਹਰਾ ਅਣਲਾਕ ਦੀ ਸੁਵਿਧਾ ਨਹੀਂ ਹੈ।"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"ਚਿਹਰਾ <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> ਤੋਂ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਸ਼ੁਰੂ ਕੀਤੀ ਗਈ ਫੋਰਗ੍ਰਾਊਂਡ ਸੇਵਾ ਲਈ ਭਵਿੱਖੀ R ਬਿਲਡ ਵਿੱਚ \'ਵਰਤੋਂ ਵਿੱਚ ਹੋਣ \'ਤੇ ਇਜਾਜ਼ਤ\' ਵਿਸ਼ੇਸ਼ਤਾ ਨਹੀਂ ਹੋਵੇਗੀ। ਕਿਰਪਾ ਕਰਕੇ go/r-bg-fgs-restriction ਦੇਖੋ ਅਤੇ ਬੱਗ ਰਿਪੋਰਟ ਫ਼ਾਈਲ ਕਰੋ।"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ਕੀ ਵੌਲਿਊਮ  ਸਿਫ਼ਾਰਸ਼  ਕੀਤੇ ਪੱਧਰ ਤੋਂ ਵਧਾਉਣੀ ਹੈ?\n\nਲੰਮੇ ਸਮੇਂ ਤੱਕ ਉੱਚ ਵੌਲਿਊਮ ਤੇ ਸੁਣਨ ਨਾਲ ਤੁਹਾਡੀ ਸੁਣਨ ਸ਼ਕਤੀ ਨੂੰ ਨੁਕਸਾਨ ਪਹੁੰਚ ਸਕਦਾ ਹੈ।"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ਕੀ ਪਹੁੰਚਯੋਗਤਾ ਸ਼ਾਰਟਕੱਟ ਵਰਤਣਾ ਹੈ?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"ਸ਼ਾਰਟਕੱਟ ਚਾਲੂ ਹੋਣ \'ਤੇ, ਕਿਸੇ ਪਹੁੰਚਯੋਗਤਾ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਅਵਾਜ਼ ਬਟਨਾਂ ਨੂੰ 3 ਸਕਿੰਟ ਲਈ ਦਬਾ ਕੇ ਰੱਖੋ।\n\n ਵਰਤਮਾਨ ਪਹੁੰਚਯੋਗਤਾ ਵਿਸ਼ੇਸ਼ਤਾ:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ &gt; ਪਹੁੰਚਯੋਗਤਾ ਵਿੱਚ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਬਦਲ ਸਕਦੇ ਹੋ।"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"ਸ਼ਾਰਟਕੱਟਾਂ ਦਾ ਸੰਪਾਦਨ ਕਰੋ"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"ਰੱਦ ਕਰੋ"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"ਸ਼ਾਰਟਕੱਟ ਬੰਦ ਕਰੋ"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"ਕੀ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਚਾਲੂ ਕਰਨੀ ਹੈ?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"ਤੁਹਾਡੀਆਂ ਕਾਰਜ-ਸਥਾਨ ਐਪਾਂ, ਸੂਚਨਾਵਾਂ, ਡਾਟਾ ਅਤੇ ਹੋਰ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਚਾਲੂ ਕੀਤੀਆਂ ਜਾਣਗੀਆਂ"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"ਚਾਲੂ ਕਰੋ"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"ਇਹ ਐਪ Android ਦੇ ਕਿਸੇ ਵਧੇਰੇ ਪੁਰਾਣੇ ਵਰਜਨ ਲਈ ਬਣਾਈ ਗਈ ਸੀ ਅਤੇ ਸ਼ਾਇਦ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਨਾ ਕਰੇ। ਅੱਪਡੇਟਾਂ ਲਈ ਜਾਂਚ ਕਰੋ ਜਾਂ ਵਿਕਾਸਕਾਰ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ਅੱਪਡੇਟ ਦੀ ਜਾਂਚ ਕਰੋ"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ਤੁਹਾਨੂੰ ਨਵੇਂ ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਹੋਏ ਹਨ"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ਨੂੰ ਪ੍ਰਤਿਬੰਧਿਤ ਖਾਨੇ ਵਿੱਚ ਪਾਇਆ ਗਿਆ ਹੈ"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"ਨਿੱਜੀ"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"ਕੰਮ"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 5efbfbe..50e6974 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -195,6 +195,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administrator odstąpił urządzenie do użytku osobistego"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Urządzenie jest zarządzane"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Twoja organizacja zarządza tym urządzeniem i może monitorować ruch w sieci. Kliknij, by dowiedzieć się więcej."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Ustawienia lokalizacji zmienione przez administratora"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Kliknij, aby zobaczyć ustawienia lokalizacji."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Twoje urządzenie zostanie wyczyszczone"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Nie można użyć aplikacji administratora. Dane z urządzenia zostaną wykasowane.\n\nJeśli masz pytania, skontaktuj się z administratorem organizacji."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Drukowanie wyłączone przez: <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -435,6 +437,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Ta aplikacja systemowa | o podwyższonych uprawnieniach może w dowolnym momencie robić zdjęcia i nagrywać filmy przy użyciu aparatu systemu. Wymaga przyznania uprawnień android.permission.CAMERA również aplikacji"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"sterowanie wibracjami"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"usługa telefoniczna z dostępem do komunikatora"</string>
@@ -549,6 +552,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Spróbuj ponownie."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nie zarejestrowano odcisków palców."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"To urządzenie nie jest wyposażone w czytnik linii papilarnych."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Odcisk palca <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -592,6 +597,8 @@
     <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="7369928733504691611">"Rozpoznawanie twarzy nie jest skonfigurowane."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"To urządzenie nie obsługuje rozpoznawania twarzy."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Twarz <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1658,7 +1665,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Uruchomiona w tle usługa działająca w pierwszym planie z pakietu <xliff:g id="PACKAGENAME">%1$s</xliff:g> nie będzie miała uprawnień obowiązujących podczas używania w przyszłych kompilacjach R. Zapoznaj się z ograniczeniem go/r-bg-fgs-restriction i zgłoś błąd."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Użyć skrótu do ułatwień dostępu?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Gdy skrót jest włączony, jednoczesne naciśnięcie przez trzy sekundy obu klawiszy sterowania głośnością uruchomi funkcję ułatwień dostępu.\n\nBieżąca funkcja ułatwień dostępu:\n<xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\nFunkcję możesz zmienić, wybierając Ustawienia &gt; Ułatwienia dostępu."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Edytuj skróty"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Anuluj"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Wyłącz skrót"</string>
@@ -1917,6 +1925,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Włączyć profil służbowy?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Aplikacje do pracy, powiadomienia, dane i inne funkcje profilu do pracy zostaną włączone"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Włącz"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Aplikacja jest niedostępna"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> jest obecnie niedostępna."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ta aplikacja jest na starszą wersję Androida i może nie działać prawidłowo. Sprawdź dostępność aktualizacji lub skontaktuj się z programistą."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Sprawdź dostępność aktualizacji"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Masz nowe wiadomości"</string>
@@ -2076,4 +2086,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Umieszczono pakiet <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> w zasobniku danych RESTRICTED"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Osobiste"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Do pracy"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index db48441..5677ab2 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"O administrador renunciou ao dispositivo para uso pessoal"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"O dispositivo é gerenciado"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Sua organização gerencia este dispositivo e pode monitorar o tráfego de rede. Toque para ver detalhes."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Configurações de localização modificadas pelo administrador"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Toque para ver as configurações de localização."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Seu dispositivo será limpo"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Não é possível usar o aplicativo para administrador. Seu dispositivo passará por uma limpeza agora.\n\nEm caso de dúvidas, entre em contato com o administrador da sua organização."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Impressão desativada por <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Este app do sistema/com privilégios pode tirar fotos e gravar vídeos a qualquer momento usando a câmera do sistema. É necessário que o app tenha também a permissão android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"controlar vibração"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"acessar serviço de mensagens instantâneas para chamadas"</string>
@@ -509,8 +512,8 @@
     <string name="permdesc_manageFingerprint" msgid="2025616816437339865">"Permite que o app execute métodos para adicionar e excluir modelos de impressão digital para uso."</string>
     <string name="permlab_useFingerprint" msgid="1001421069766751922">"usar hardware de impressão digital"</string>
     <string name="permdesc_useFingerprint" msgid="412463055059323742">"Permite que o app use hardware de impressão digital para autenticação."</string>
-    <string name="permlab_audioWrite" msgid="8501705294265669405">"modificar sua coleção de músicas"</string>
-    <string name="permdesc_audioWrite" msgid="8057399517013412431">"Permite que o app modifique sua coleção de músicas."</string>
+    <string name="permlab_audioWrite" msgid="8501705294265669405">"modificar sua biblioteca de música"</string>
+    <string name="permdesc_audioWrite" msgid="8057399517013412431">"Permite que o app modifique sua biblioteca de música."</string>
     <string name="permlab_videoWrite" msgid="5940738769586451318">"modificar sua coleção de vídeos"</string>
     <string name="permdesc_videoWrite" msgid="6124731210613317051">"Permite que o app modifique sua coleção de vídeos."</string>
     <string name="permlab_imagesWrite" msgid="1774555086984985578">"modificar sua coleção de fotos"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Tente novamente."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nenhuma impressão digital registrada."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo não tem um sensor de impressão digital."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"O desbloqueio facial não foi configurado."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"O desbloqueio facial não é compatível com este dispositivo."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Rosto <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"O serviço em primeiro plano iniciado em segundo plano por <xliff:g id="PACKAGENAME">%1$s</xliff:g> não receberá uma permissão durante o uso em futuras versões R. Consulte go/r-bg-fgs-restriction e crie um relatório de bug."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Usar atalho de Acessibilidade?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Quando o atalho está ativado, pressione os dois botões de volume por três segundos para iniciar um recurso de acessibilidade.\n\n Recurso de acessibilidade atual:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n É possível alterar o recurso em Configurações &gt; Acessibilidade."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Editar atalhos"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Cancelar"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Desativar atalho"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Ativar o perfil de trabalho?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Seus apps, notificações, dados e outros recursos do perfil de trabalho serão ativados"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Ativar"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"O app não está disponível"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> não está disponível no momento."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Este app foi criado para uma versão mais antiga do Android e pode não funcionar corretamente. Tente verificar se há atualizações ou entre em contato com o desenvolvedor."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Procurar atualizações"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Você tem mensagens novas"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> foi colocado no intervalo \"RESTRITO\""</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Pessoal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Trabalho"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 04296fe..4bdb07f 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"O administrador anulou o dispositivo para utilização pessoal."</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"O dispositivo é gerido"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"A sua entidade gere este dispositivo e pode monitorizar o tráfego de rede. Toque para obter mais detalhes."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Definições de localização alteradas pelo administrador"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Toque para ver as definições de localização."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"O seu dispositivo será apagado"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Não é possível utilizar a aplicação de administrador. O seu dispositivo será agora apagado.\n\nSe tiver questões, contacte o administrador da entidade."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Impressão desativada por <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Esta aplicação do sistema | privilegiada pode tirar fotos e gravar vídeos através de uma câmara do sistema em qualquer altura. Também necessita da autorização android.permission.CAMERA para a aplicação."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"controlar vibração"</string>
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite à aplicação 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 aplicação 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 aplicação 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="permlab_accessImsCallService" msgid="442192920714863782">"aceder ao serviço de chamadas IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Tente novamente."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nenhuma impressão digital registada."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo não tem sensor de impressões digitais."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"Não configurou o Desbloqueio Através do Rosto."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Desbloqueio Através do Rosto não suportado neste dispositivo."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Rosto <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"O serviço em primeiro plano iniciado em segundo plano de <xliff:g id="PACKAGENAME">%1$s</xliff:g> não terá a autorização durante a utilização em compilações R futuras. Aceda a go/r-bg-fgs-restriction e envie um relatório de erros."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Pretende utilizar o atalho de acessibilidade?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Quando o atalho está ativado, premir ambos os botões de volume durante 3 segundos inicia uma funcionalidade de acessibilidade.\n\n Funcionalidade de acessibilidade atual:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Pode alterar a funcionalidade em Definições &gt; Acessibilidade."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Editar atalhos"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Cancelar"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Desativar atalho"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Ativar o perfil de trabalho?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"As aplicações de trabalho, as notificações, os dados e outras funcionalidades do perfil de trabalho serão desativados"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Ativar"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"A app não está disponível"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"De momento, a app <xliff:g id="APP_NAME">%1$s</xliff:g> não está disponível."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Esta aplicação foi concebida para uma versão mais antiga do Android e pode não funcionar corretamente. Experimente verificar se existem atualizações ou contacte o programador."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Verificar se existem atualizações"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tem mensagens novas"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> foi colocado no contentor RESTRITO."</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Pessoal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Trabalho"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index db48441..5677ab2 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"O administrador renunciou ao dispositivo para uso pessoal"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"O dispositivo é gerenciado"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Sua organização gerencia este dispositivo e pode monitorar o tráfego de rede. Toque para ver detalhes."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Configurações de localização modificadas pelo administrador"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Toque para ver as configurações de localização."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Seu dispositivo será limpo"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Não é possível usar o aplicativo para administrador. Seu dispositivo passará por uma limpeza agora.\n\nEm caso de dúvidas, entre em contato com o administrador da sua organização."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Impressão desativada por <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Este app do sistema/com privilégios pode tirar fotos e gravar vídeos a qualquer momento usando a câmera do sistema. É necessário que o app tenha também a permissão android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"controlar vibração"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"acessar serviço de mensagens instantâneas para chamadas"</string>
@@ -509,8 +512,8 @@
     <string name="permdesc_manageFingerprint" msgid="2025616816437339865">"Permite que o app execute métodos para adicionar e excluir modelos de impressão digital para uso."</string>
     <string name="permlab_useFingerprint" msgid="1001421069766751922">"usar hardware de impressão digital"</string>
     <string name="permdesc_useFingerprint" msgid="412463055059323742">"Permite que o app use hardware de impressão digital para autenticação."</string>
-    <string name="permlab_audioWrite" msgid="8501705294265669405">"modificar sua coleção de músicas"</string>
-    <string name="permdesc_audioWrite" msgid="8057399517013412431">"Permite que o app modifique sua coleção de músicas."</string>
+    <string name="permlab_audioWrite" msgid="8501705294265669405">"modificar sua biblioteca de música"</string>
+    <string name="permdesc_audioWrite" msgid="8057399517013412431">"Permite que o app modifique sua biblioteca de música."</string>
     <string name="permlab_videoWrite" msgid="5940738769586451318">"modificar sua coleção de vídeos"</string>
     <string name="permdesc_videoWrite" msgid="6124731210613317051">"Permite que o app modifique sua coleção de vídeos."</string>
     <string name="permlab_imagesWrite" msgid="1774555086984985578">"modificar sua coleção de fotos"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Tente novamente."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nenhuma impressão digital registrada."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo não tem um sensor de impressão digital."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"O desbloqueio facial não foi configurado."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"O desbloqueio facial não é compatível com este dispositivo."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Rosto <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"O serviço em primeiro plano iniciado em segundo plano por <xliff:g id="PACKAGENAME">%1$s</xliff:g> não receberá uma permissão durante o uso em futuras versões R. Consulte go/r-bg-fgs-restriction e crie um relatório de bug."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Usar atalho de Acessibilidade?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Quando o atalho está ativado, pressione os dois botões de volume por três segundos para iniciar um recurso de acessibilidade.\n\n Recurso de acessibilidade atual:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n É possível alterar o recurso em Configurações &gt; Acessibilidade."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Editar atalhos"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Cancelar"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Desativar atalho"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Ativar o perfil de trabalho?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Seus apps, notificações, dados e outros recursos do perfil de trabalho serão ativados"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Ativar"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"O app não está disponível"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> não está disponível no momento."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Este app foi criado para uma versão mais antiga do Android e pode não funcionar corretamente. Tente verificar se há atualizações ou entre em contato com o desenvolvedor."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Procurar atualizações"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Você tem mensagens novas"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> foi colocado no intervalo \"RESTRITO\""</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Pessoal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Trabalho"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 030e76a..99cdc0b 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -193,6 +193,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administratorul a retras dispozitivul pentru uz personal"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Dispozitivul este gestionat"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Organizația dvs. gestionează acest dispozitiv și poate monitoriza traficul în rețea. Atingeți pentru mai multe detalii."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Setările privind locația au fost modificate de administrator"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Atingeți pentru a vedea setările privind locația."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Datele de pe dispozitiv vor fi șterse"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Aplicația de administrare nu poate fi utilizată. Dispozitivul va fi șters.\n\nDacă aveți întrebări, contactați administratorul organizației dvs."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Printare dezactivată de <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -432,6 +434,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Această aplicație de sistem | privilegiată poate să fotografieze și să înregistreze videoclipuri folosind o cameră de sistem în orice moment. Necesită și permisiunea android.permission.CAMERA pentru aplicație"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"controlează vibrarea"</string>
     <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">"apelare directă numere de telefon"</string>
     <string name="permdesc_callPhone" msgid="5439809516131609109">"Permite aplicației să apeleze numere de telefon fără intervenția dvs. 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="permlab_accessImsCallService" msgid="442192920714863782">"accesează serviciul de apelare IMS"</string>
@@ -546,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Încercați din nou."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nu au fost înregistrate amprente."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Dispozitivul nu are senzor de amprentă."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Degetul <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -589,6 +594,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nu se poate confirma fața. Încercați din nou."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Nu ați configurat deblocarea facială."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Deblocarea facială nu este acceptată pe dispozitiv."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Chip <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1636,7 +1643,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Serviciul în prim-plan inițializat în fundal din <xliff:g id="PACKAGENAME">%1$s</xliff:g> nu va avea permisiunea în timpul utilizării în versiunile R viitoare. Consultați go/r-bg-fgs-restriction și trimiteți un raport de eroare."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Ridicați volumul mai sus de nivelul recomandat?\n\nAscultarea la volum ridicat pe perioade lungi de timp vă poate afecta auzul."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Utilizați comanda rapidă pentru accesibilitate?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Când comanda rapidă este activată, dacă apăsați ambele butoane de volum timp de 3 secunde, veți lansa o funcție de accesibilitate.\n\n Funcția actuală de accesibilitate:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Puteți schimba funcția în Setări &gt; Accesibilitate."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Editați comenzile rapide"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Anulați"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Dezactivați comanda rapidă"</string>
@@ -1885,6 +1893,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Activați profilul de serviciu?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Se vor activa aplicațiile dvs. de serviciu, notificările, datele și alte funcții ale profilului de serviciu"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Activați"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Această aplicație a fost creată pentru o versiune Android mai veche și este posibil să nu funcționeze corect. Încercați să căutați actualizări sau contactați dezvoltatorul."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Căutați actualizări"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Aveți mesaje noi"</string>
@@ -2042,4 +2052,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> a fost adăugat la grupul RESTRICȚIONATE"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Serviciu"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 94029f5..244d0e6 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -195,6 +195,8 @@
     <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="4119726617105166830">"Настройки геолокации изменены администратором"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Нажмите, чтобы открыть настройки геолокации."</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>
@@ -435,6 +437,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Это привилегированное или системное приложение может в любое время делать фотографии и снимать видео с помощью камеры. Для этого приложению также требуется разрешение android.permission.CAMERA."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"Управление функцией вибросигнала"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"совершение звонков с помощью службы IMS"</string>
@@ -549,6 +552,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Повторите попытку."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Нет отсканированных отпечатков пальцев"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"На этом устройстве нет сканера отпечатков пальцев."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Отпечаток <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -592,6 +597,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Не удалось распознать лицо. Повторите попытку."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Вы не настроили фейсконтроль."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Это устройство не поддерживает функцию \"Фейсконтроль\"."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Лицо <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1177,7 +1184,7 @@
     <string name="whichEditApplication" msgid="6191568491456092812">"Редактировать с помощью приложения:"</string>
     <string name="whichEditApplicationNamed" msgid="8096494987978521514">"Редактировать с помощью приложения \"%1$s\""</string>
     <string name="whichEditApplicationLabel" msgid="1463288652070140285">"Изменить"</string>
-    <string name="whichSendApplication" msgid="4143847974460792029">"Отправка данных"</string>
+    <string name="whichSendApplication" msgid="4143847974460792029">"Поделиться"</string>
     <string name="whichSendApplicationNamed" msgid="4470386782693183461">"Поделиться через %1$s"</string>
     <string name="whichSendApplicationLabel" msgid="7467813004769188515">"Поделиться"</string>
     <string name="whichSendToApplication" msgid="77101541959464018">"Выберите приложение"</string>
@@ -1658,7 +1665,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Службы из пакета <xliff:g id="PACKAGENAME">%1$s</xliff:g>, переведенные из фонового режима в активный, не будут получать разрешение while-in-use в будущих сборках на языке R. Перейдите на страницу go/r-bg-fgs-restriction и отправьте отчет об ошибке."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Установить громкость выше рекомендуемого уровня?\n\nВоздействие громкого звука в течение долгого времени может привести к повреждению слуха."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Использовать быстрое включение?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Чтобы использовать функцию специальных возможностей, когда она включена, нажмите и удерживайте три секунды обе кнопки регулировки громкости.\n\nТекущая функция специальных возможностей:\n<xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\nВы можете изменить ее в разделе \"Настройки &gt; Специальные возможности\"."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Изменить быстрые клавиши"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Отмена"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Деактивировать быстрое включение"</string>
@@ -1917,6 +1925,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Включить рабочий профиль?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Будут включены корпоративные приложения, уведомления, данные и другие функции рабочего профиля."</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Включить"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Это приложение было создано для более ранней версии Android и может работать со сбоями. Проверьте наличие обновлений или свяжитесь с разработчиком."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Проверить обновления"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Новые сообщения"</string>
@@ -2076,4 +2086,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Приложение \"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>\" помещено в категорию с ограниченным доступом."</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Личный"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Рабочий"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index 73cf018..6583f94 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"ස්ථාන සැකසීම් ඔබේ පරිපාලක විසින් වෙනස් කරන ලදී"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"ඔබේ ස්ථාන සැකසීම් බැලීමට තට්ටු කරන්න."</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"මෙම වරප්‍රසාද ලත් | යෙදුමට ඕනෑම වේලාවක කැමරාව භාවිත කර පින්තූර ගැනීමට සහ වීඩියෝ පටිගත කිරීමට හැකිය. යෙදුම විසින් රඳවා තබා ගැනීමට android.permission.CAMERA ප්‍රවේශයද අවශ්‍ය වේ"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"කම්පනය පාලනය කිරීම"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS ඇමතුම් සේවාවට පිවිසෙන්න"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"නැවත උත්සාහ කරන්න."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ඇඟිලි සලකුණු ඇතුළත් කර නොමැත."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"මෙම උපාංගයේ ඇඟිලි සලකුණු සංවේදකයක් නොමැත."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ඇඟිලි <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"මුහුණ සත්‍යාපන කළ නොහැක. නැවත උත්සාහ කරන්න."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"ඔබ මුහුණු අඟුලු ඇරීම සකසා නැත"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"මෙම උපාංගයෙහි මුහුණු අඟුලු ඇරීමට සහය නොදැක්වේ"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"මුහුණු <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1616,7 +1623,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> වෙතින් පසුබිම ආරම්භ කරන ලද පෙරබිම් සේවාව අනාගත R තැනුම්වලදී භාවිතයේ අවසරය නැත. කරුණාකර go/r-bg-fgs-අවහිරතාව බලා දෝෂ වාර්තාවක් ගොනු කරන්න."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"නිර්දේශිතයි මට්ටමට වඩා ශබ්දය වැඩිද?\n\nදිගු කාලයක් සඳහා ඉහළ ශබ්දයක් ඇසීමෙන් ඇතැම් විට ඔබගේ ඇසීමට හානි විය හැක."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ප්‍රවේශ්‍යතා කෙටිමඟ භාවිතා කරන්නද?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"කෙටිමඟ සක්‍රිය විට, හඬ බොත්තම් දෙකම තත්පර 3ක් අල්ලාගෙන සිටීමෙන් ප්‍රවේශ්‍යත අංගයක් ඇරඹේ.\n\n වත්මන් ප්‍රවේශ්‍යතා අංගය:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n සැකසීම් &gt; ප්‍රවේශ්‍යතාව තුළ ඔබට අංගය වෙනස් කළ හැක."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"කෙටිමං සංස්කරණ කරන්න"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"අවලංගු කරන්න"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"කෙටිමඟ ක්‍රියාවිරහිත කරන්න"</string>
@@ -1855,6 +1863,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"කාර්යාල පැතිකඩ ක්‍රියාත්මක කරන්නද?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"ඔබගේ වැඩ යෙදුම්, දැනුම්දීම්, දත්ත සහ වෙනත් කාර්යාල පැතිකඩ විශේෂාංග ක්‍රියාත්මක කරනු ඇත"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"ක්‍රියාත්මක කරන්න"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"මෙම යෙදුම Android හි පැරණි අනුවාදයක් සඳහා තනා ඇති අතර නිසියාකාරව ක්‍රියා නොකරනු ඇත. යාවත්කාලීන සඳහා පරික්ෂා කිරීම උත්සාහ කරන්න, නැතහොත් සංවර්ධක අමතන්න."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"යාවත්කාලීන සඳහා පරික්ෂා කරන්න"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ඔබට නව පණිවිඩ තිබේ"</string>
@@ -2010,4 +2020,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> අවහිර කළ බාල්දියට දමා ඇත"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"පුද්ගලික"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"කාර්යාල"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index b86fc46..d8006e7 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -195,6 +195,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Správca uvoľnil toto zariadenie na osobné používanie"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Zariadenie je spravované"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Vaša organizácia spravuje toto zariadenie a môže sledovať sieťovú premávku. Klepnutím zobrazíte podrobnosti."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Nastavenia polohy zmenil váš správca"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Klepnutím zobrazíte nastavenia polohy."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Vaše zariadenie bude vymazané"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Daná aplikácia na správu sa nedá použiť. Vaše zariadenie bude vymazané.\n\nV prípade otázok kontaktujte správcu organizácie."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Tlač zakázala aplikácia <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -435,6 +437,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Táto oprávnená alebo systémová aplikácia môže kedykoľvek fotiť a nahrávať videá fotoaparátom systému. Aplikácia musí mať tiež povolenie android.permission.CAMERA."</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"ovládať vibrovanie"</string>
     <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 získať prístup k stavu vibrácií."</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="permlab_accessImsCallService" msgid="442192920714863782">"prístup k službe volania IMS"</string>
@@ -549,6 +552,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Skúste to znova"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Neregistrovali ste žiadne odtlačky prstov."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Toto zariadenie nemá senzor odtlačkov prstov."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Prst: <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -592,6 +597,8 @@
     <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="7369928733504691611">"Nenastavili ste odomknutie tvárou."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Toto zariadenie nepodporuje odomknutie tvárou."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Tvár <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1658,7 +1665,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Služba na popredí spustená na pozadí z balíka <xliff:g id="PACKAGENAME">%1$s</xliff:g> nebude mať v budúcich zostavách R povolenie Počas používania. Prejdite na go/r-bg-fgs-restriction a odošlite hlásenie chyby."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Použiť skratku dostupnosti?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Keď je skratka zapnutá, stlačením obidvoch tlačidiel hlasitosti na tri sekundy spustíte funkciu dostupnosti.\n\n Aktuálna funkcia dostupnosti:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Funkciu môžete zmeniť v časti Nastavenia &gt; Dostupnosť."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Upraviť skratky"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Zrušiť"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Vypnúť skratku"</string>
@@ -1917,6 +1925,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Zapnúť pracovný profil?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Pracovné aplikácie, upozornenia, dáta a ďalšie funkcie pracovného profilu sa zapnú"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Zapnúť"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Táto aplikácia bola zostavená pre staršiu verziu Androidu a nemusí správne fungovať. Skúste skontrolovať dostupnosť aktualizácií alebo kontaktovať vývojára."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Skontrolovať dostupnosť aktualizácie"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Máte nové správy."</string>
@@ -1944,7 +1954,7 @@
     <string name="app_category_social" msgid="2278269325488344054">"Sociálne siete a komunikácia"</string>
     <string name="app_category_news" msgid="1172762719574964544">"Noviny a časopisy"</string>
     <string name="app_category_maps" msgid="6395725487922533156">"Mapy a navigácia"</string>
-    <string name="app_category_productivity" msgid="1844422703029557883">"Produktivita"</string>
+    <string name="app_category_productivity" msgid="1844422703029557883">"Kancelárske"</string>
     <string name="device_storage_monitor_notification_channel" msgid="5164244565844470758">"Úložisko zariadenia"</string>
     <string name="adb_debugging_notification_channel_tv" msgid="4764046459631031496">"Ladenie cez USB"</string>
     <string name="time_picker_hour_label" msgid="4208590187662336864">"hodina"</string>
@@ -2076,4 +2086,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Balík <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> bol vložený do kontajnera OBMEDZENÉ"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Osobné"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Práca"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index bc2bc3a..93a1d34 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -195,6 +195,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Skrbnik je napravo prepustil osebni uporabi"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Naprava je upravljana"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Vaša organizacija upravlja to napravo in lahko nadzira omrežni promet. Dotaknite se za podrobnosti."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Skrbnik je spremenil nastavitve lokacije"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Dotaknite se za ogled nastavitev lokacije."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Podatki v napravi bodo izbrisani"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Skrbniške aplikacije ni mogoče uporabljati. Podatki v napravi bodo izbrisani.\n\nČe imate vprašanja, se obrnite na skrbnika organizacije."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Tiskanje je onemogočil pravilnik <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -435,6 +437,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Ta odobrena/sistemska aplikacija lahko z vgrajenim fotoaparatom kadar koli snema fotografije in videoposnetke. Aplikacija mora imeti omogočeno tudi dovoljenje android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"nadzor vibriranja"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"dostop do storitve za klicanje IMS"</string>
@@ -549,6 +552,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Poskusite znova."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Ni včlanjenih prstnih odtisov."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ta naprava nima tipala prstnih odtisov."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Prst <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -592,6 +597,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Obraza ni mogoče preveriti. Poskusite znova."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Odklepanja z obrazom niste nastavili."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Ta naprava ne podpira odklepanja z obrazom."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Obraz <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1658,7 +1665,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"V prihodnjih različicah R storitev v ospredju z zagonom iz ozadja iz paketa <xliff:g id="PACKAGENAME">%1$s</xliff:g> ne bo imela dovoljenja med uporabo aplikacije. Oglejte si go/r-bg-fgs-restriction in pošljite poročilo o napakah."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Želite uporabljati bližnjico funkcij za ljudi s posebnimi potrebami?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Ko je bližnjica vklopljena, pritisnite gumba za glasnost in ju pridržite tri sekunde, če želite zagnati funkcijo za ljudi s posebnimi potrebami.\n\n Trenutna funkcija za ljudi s posebnimi potrebami:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Funkcijo lahko spremenite v »Nastavitve &gt; Funkcije za ljudi s posebnimi potrebami«."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Uredi bližnjice"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Prekliči"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Izklopi bližnjico"</string>
@@ -1917,6 +1925,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Želite vklopiti delovni profil?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Vklopili boste svoje delovne aplikacije, obvestila, podatke in druge funkcije delovnega profila"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Vklop"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Aplikacija ni na voljo"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> trenutno ni na voljo."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ta aplikacija je bila zasnovana za starejšo različico Androida in morda ne bo delovala pravilno. Preverite, ali so na voljo posodobitve, ali pa se obrnite na razvijalca."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Preveri, ali je na voljo posodobitev"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Imate nova sporočila."</string>
@@ -2076,4 +2086,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> je bil dodan v segment OMEJENO"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Osebno"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Služba"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index a353288..f708fe4 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administratori e refuzoi pajisjen për përdorim personal"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Pajisja është e menaxhuar"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Organizata jote e menaxhon këtë pajisje dhe mund të monitorojë trafikun e rrjetit. Trokit për detaje."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Cilësimet e vendndodhjes u ndryshuan nga administratori yt"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Trokit për të parë cilësimet e tua të vendndodhjes."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Pajisja do të spastrohet"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Aplikacioni i administratorit nuk mund të përdoret. Pajisja jote tani do të fshihet.\n\nNëse ke pyetje, kontakto me administratorin e organizatës."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Printimi është çaktivizuar nga <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Ky aplikacion sistemi | i privilegjuar mund të shkrepë fotografi dhe të regjistrojë video duke përdorur një kamerë në çdo moment. Kërkon që autorizimi i android.permission.CAMERA të mbahet edhe nga aplikacioni"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"kontrollo dridhjen"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"qasje në shërbimin e telefonatave IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Provo përsëri."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nuk ka asnjë gjurmë gishti të regjistruar."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Kjo pajisje nuk ka sensor të gjurmës së gishtit."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Gishti <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"Nuk e ke konfiguruar shkyçjen me fytyrë."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Shkyçja me fytyrë nuk mbështetet në këtë pajisje"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Fytyra <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Shërbimi në plan të parë i nisur në sfond nga <xliff:g id="PACKAGENAME">%1$s</xliff:g> nuk do të ketë lejen e nevojshme gjatë përdorimit në ndërtimet e ardhshme R. Shiko go/r-bg-fgs-restriction dhe dërgo një raport të defekteve në kod."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Të përdoret shkurtorja e qasshmërisë?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Kur shkurtorja është e aktivizuar, shtypja e të dy butonave për 3 sekonda do të nisë një funksion qasshmërie.\n\n Funksioni aktual i qasshmërisë:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Mund ta ndryshosh funksionin te Cilësimet &gt; Qasshmëria."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Redakto shkurtoret"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Anulo"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Çaktivizo shkurtoren"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Të aktivizohet profili i punës?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Aplikacionet e punës, njoftimet, të dhënat e tua dhe funksionet e tjera të profilit të punës do të aktivizohen"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Aktivizo"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Aplikacioni nuk ofrohet"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk ofrohet për momentin."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ky aplikacion është ndërtuar për një version më të vjetër të Android dhe mund të mos funksionojë mirë. Provo të kontrollosh për përditësime ose kontakto me zhvilluesin."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Kontrollo për përditësim"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Ke mesazhe të reja"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> është vendosur në grupin E KUFIZUAR"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Puna"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 8ee644a..51e2674 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -193,6 +193,8 @@
     <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="4119726617105166830">"Администратор је променио подешавања локације"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Додирните да бисте видели подешавања локације."</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>
@@ -432,6 +434,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Ова привилегована | системска апликација може да снима слике и видео снимке помоћу камере система у било ком тренутку. Апликација треба да има и дозволу android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"контрола вибрације"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"приступ услузи позива помоћу размене тренутних порука"</string>
@@ -546,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Пробајте поново."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Није регистрован ниједан отисак прста."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Овај уређај нема сензор за отисак прста."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Прст <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -589,6 +594,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Провера лица није успела. Пробајте поново."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Нисте подесили откључавање лицем"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Откључавање лицем није подржано на овом уређају"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Лице <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1636,7 +1643,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Услуга у првом плану са <xliff:g id="PACKAGENAME">%1$s</xliff:g> која је покренута у позадини неће имати дозволу током коришћења у будућим R верзијама. Посетите go/r-bg-fgs-restriction и пошаљите извештај о грешци."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Желите да појачате звук изнад препорученог нивоа?\n\nСлушање гласне музике дуже време може да вам оштети слух."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Желите ли да користите пречицу за приступачност?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Када је пречица укључена, притисните оба дугмета за јачину звука да бисте покренули функцију приступачности.\n\n Актуелна функција приступачности:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Можете да промените функцију у одељку Подешавања &gt; Приступачност."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Измените пречице"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Откажи"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Искључи пречицу"</string>
@@ -1885,6 +1893,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Да укључимо профил за Work?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Укључиће се пословне апликације, обавештења, подаци и друге функције профила за Work"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Укључи"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Ова апликација је направљена за старију верзију Android-а, па можда неће радити исправно. Потражите ажурирања или контактирајте програмера."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Потражи ажурирање"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Имате нове поруке"</string>
@@ -2042,4 +2052,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакет <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> је додат у сегмент ОГРАНИЧЕНО"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Лични"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Пословни"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 577933e6..88b62f4 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administratören tillåter inte längre privat bruk av enheten"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Enheten hanteras"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Organisationen hanterar den här enheten och kan övervaka nätverkstrafiken. Tryck om du vill veta mer."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Platsinställningarna har ändrats av administratören"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Tryck för att se dina platsinställningar."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Enheten kommer att rensas"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Det går inte att använda administratörsappen. Enheten rensas.\n\nKontakta organisationens administratör om du har några frågor."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Utskrift har inaktiverats av <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -212,7 +214,7 @@
     <string name="reboot_to_update_prepare" msgid="6978842143587422365">"Förbereder uppdatering …"</string>
     <string name="reboot_to_update_package" msgid="4644104795527534811">"Uppdateringspaketet behandlas ..."</string>
     <string name="reboot_to_update_reboot" msgid="4474726009984452312">"Startar om …"</string>
-    <string name="reboot_to_reset_title" msgid="2226229680017882787">"Återställ standardinställning"</string>
+    <string name="reboot_to_reset_title" msgid="2226229680017882787">"Återställer standardinställning"</string>
     <string name="reboot_to_reset_message" msgid="3347690497972074356">"Startar om …"</string>
     <string name="shutdown_progress" msgid="5017145516412657345">"Avslutar…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="2872769463279602432">"Din surfplatta stängs av."</string>
@@ -293,7 +295,7 @@
     <string name="permgroupdesc_storage" msgid="6351503740613026600">"få åtkomst till foton, media och filer på din enhet"</string>
     <string name="permgrouplab_microphone" msgid="2480597427667420076">"Mikrofon"</string>
     <string name="permgroupdesc_microphone" msgid="1047786732792487722">"spela in ljud"</string>
-    <string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"Fysiska aktivitet"</string>
+    <string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"Fysisk aktivitet"</string>
     <string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"åtkomst till data om fysisk aktivitet"</string>
     <string name="permgrouplab_camera" msgid="9090413408963547706">"Kamera"</string>
     <string name="permgroupdesc_camera" msgid="7585150538459320326">"ta bilder och spela in video"</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Denna systemapp | med behörighet kan ta bilder och spela in videor med systemets kamera när som helst. Appen måste även ha behörigheten android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"styra vibration"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"tillgång till tjänsten för snabbmeddelanden vid samtal"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Försök igen."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Inga fingeravtryck har registrerats."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Enheten har ingen fingeravtryckssensor."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"Du har inte konfigurerat ansiktslås."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Ansiktslås stöds inte på den här enheten."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Ansikte <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Förgrundstjänsten från <xliff:g id="PACKAGENAME">%1$s</xliff:g> som startades i bakgrunden får inte behörighet som gäller vid användning i framtida R-versioner. Besök go/r-bg-fgs-restriction och skicka en felrapport."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Vill du använda Aktivera tillgänglighet snabbt?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"När kortkommandot har aktiverats startar du en tillgänglighetsfunktion genom att trycka ned båda volymknapparna i tre sekunder.\n\n Aktuell tillgänglighetsfunktion:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Du kan ändra funktionen i Inställningar &gt; Tillgänglighet."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Redigera genvägar"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Avbryt"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Inaktivera kortkommandot"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Vill du aktivera jobbprofilen?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Jobbappar, aviseringar, data och andra funktioner i jobbprofilen aktiveras"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Aktivera"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Appen är inte tillgänglig"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> är inte tillgängligt just nu."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Appen har utvecklats för en äldre version av Android och kanske inte fungerar som den ska. Testa att söka efter uppdateringar eller kontakta utvecklaren."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Sök efter uppdateringar"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Du har nya meddelanden"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> har placerats i hinken RESTRICTED"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Privat"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Jobb"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index a6ee366..e94856b 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Msimamizi aliacha kutumia kifaa kwa matumizi ya binafsi"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Kifaa kinadhibitiwa"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Shirika lako linadhibiti kifaa hiki na huenda likafuatilia shughuli kwenye mtandao. Gusa ili upate maelezo zaidi."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Mipangilio ya mahali imebadilishwa na msimamizi wako"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Gusa ili uone mipangilio ya mahali ulipo."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Data iliyomo kwenye kifaa chako itafutwa"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Huwezi kutumia programu ya msimamizi. Sasa data iliyo kwenye kifaa chako itafutwa.\n\nIkiwa una maswali yoyote, wasiliana na msimamizi wa shirika lako."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Kipengele cha kuchapisha kimezimwa na <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Programu hii ya mfumo ya | inayopendelewa inaweza kupiga picha na kurekodi video ikitumia kamera ya mfumo wakati wowote. Inahitaji ruhusa ya android.permission.CAMERA iwepo kwenye programu pia"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"Kudhibiti mtetemo"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"fikia huduma ya simu ya IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Jaribu tena."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Hakuna alama za vidole zilizojumuishwa."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Kifaa hiki hakina kitambua alama ya kidole."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Kidole cha <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Imeshindwa kuthibitisha uso. Jaribu tena."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Hujaweka mipangilio ya kufungua kwa uso."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Kufungua kwa uso hakutumiki kwenye kifaa hiki."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Uso wa <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Huduma ya programu inayotumika iliyoanzishwa chinichini kwenye <xliff:g id="PACKAGENAME">%1$s</xliff:g> haitakuwa na ruhusa inapotumika katika miundo ijayo ya R. Tafadhali angalia go/r-bg-fgs-restriction na uwasilishe ripoti ya hitilafu."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Ungependa kutumia njia ya mkato ya ufikivu?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Unapowasha kipengele cha njia ya mkato, hatua ya kubonyeza vitufe vyote viwili vya sauti kwa dakika 3 itafungua kipengele cha ufikivu.\n\n Kipengele cha ufikivu kilichopo kwa sasa:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Unaweza kubadilisha kipengele hiki katika Mipangilio &gt; Zana za ufikivu."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Kubadilisha njia za mkato"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Ghairi"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Zima kipengele cha Njia ya Mkato"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Ungependa kuwasha wasifu wa kazini?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Hatua hii itawasha data, arifa, programu za kazini, arifa na vipengele vingine vya wasifu wa kazini"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Washa"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Programu haipatikani"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> haipatikani hivi sasa."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Programu hii iliundwa kwa ajili ya toleo la zamani la Android na huenda isifanye kazi vizuri. Jaribu kuangalia masasisho au uwasiliane na msanidi programu."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Angalia masasisho"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Una ujumbe mpya"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> kimewekwa katika kikundi KILICHODHIBITIWA"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Binafsi"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Kazini"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index a56465f..8245786 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -191,6 +191,10 @@
     <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>
+    <!-- no translation found for location_changed_notification_title (4119726617105166830) -->
+    <skip />
+    <!-- no translation found for location_changed_notification_text (198907268219396399) -->
+    <skip />
     <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>
@@ -429,6 +433,8 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"இந்த முன்னுரிமை பெற்ற சிஸ்டம் ஆப்ஸால் சிஸ்டம் கேமராவைப் பயன்படுத்தி எப்போது வேண்டுமானாலும் படங்களை எடுக்கவோ வீடியோக்களை ரெக்கார்டு செய்யவோ முடியும். android.permission.CAMERA அனுமதியும் ஆப்ஸிற்குத் தேவை"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"அதிர்வைக் கட்டுப்படுத்துதல்"</string>
     <string name="permdesc_vibrate" msgid="8733343234582083721">"அதிர்வைக் கட்டுப்படுத்தப் ஆப்ஸை அனுமதிக்கிறது."</string>
+    <!-- no translation found for permdesc_vibrator_state (7050024956594170724) -->
+    <skip />
     <string name="permlab_callPhone" msgid="1798582257194643320">"தொலைபேசி எண்களை நேரடியாக அழைத்தல்"</string>
     <string name="permdesc_callPhone" msgid="5439809516131609109">"உங்கள் தலையீட்டின்றி மொபைல் எண்களை அழைக்கப் ஆப்ஸை அனுமதிக்கிறது. இதன் விளைவாக எதிர்பாராத கட்டணங்களோ அழைப்புகளோ ஏற்படலாம். அவசரகால எண்களை அழைக்க இது ஆப்ஸை அனுமதிக்காது என்பதை நினைவில்கொள்ளவும். தீங்கிழைக்கும் ஆப்ஸ், உங்கள் உறுதிப்படுத்தல் இன்றி அழைப்புகளைச் செய்வதால் உங்களுக்குச் செலவு ஏற்படக்கூடும்."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS அழைப்புச் சேவையை அணுகுதல்"</string>
@@ -543,6 +549,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"மீண்டும் முயற்சிக்கவும்."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"கைரேகைப் பதிவுகள் எதுவும் இல்லை."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"இந்தச் சாதனத்தில் கைரேகை சென்சார் இல்லை."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"கைரேகை <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +594,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"முகத்தைச் சரிபார்க்க இயலவில்லை. மீண்டும் முயலவும்."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"’முகம் காட்டித் திறத்தலை’ நீங்கள் அமைக்கவில்லை."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"இந்த சாதனத்தில் ’முகம் காட்டித் திறத்தல்’ ஆதரிக்கப்படவில்லை."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"முகம் <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1624,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> இல் இருந்து பின்னணியில் தொடங்கப்பட்ட முன்புலச் சேவைக்கு, வரவுள்ள R பதிப்புகளில் உபயோகத்தின்போது மட்டுமான அனுமதி இருக்காது. go/r-bg-fgs-restriction என்பதைப் பார்த்து பிழை அறிக்கை ஒன்றைச் சமர்ப்பிக்கவும்."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"பரிந்துரைத்த அளவை விட ஒலியை அதிகரிக்கவா?\n\nநீண்ட நேரத்திற்கு அதிகளவில் ஒலி கேட்பது கேட்கும் திறனைப் பாதிக்கலாம்."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"அணுகல்தன்மை ஷார்ட்கட்டைப் பயன்படுத்தவா?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"ஷார்ட்கட் இயக்கத்தில் இருந்தால், இரண்டு ஒலியளவு பொத்தான்களையும் 3 வினாடிகள் அழுத்தி, அணுகல்தன்மை அம்சத்தை இயக்கலாம்.\n\n தற்போதைய அணுகல்தன்மை அம்சம்:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n அமைப்புகள் &gt; அணுகல்தன்மை என்பதற்குச் சென்று, அம்சத்தை மாற்றலாம்."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"ஷார்ட்கட்களை மாற்று"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"ரத்துசெய்"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"ஷார்ட்கட்டை முடக்கு"</string>
@@ -1853,6 +1864,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"பணிச் சுயவிவரத்தை ஆன் செய்யவா?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"பணி ஆப்ஸ், அறிவிப்புகள், தரவு மற்றும் பிற பணிச் சுயவிவர அம்சங்கள் ஆன் செய்யப்படும்"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"இயக்கு"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"இந்த ஆப்ஸ் Android இன் பழைய பதிப்புக்காக உருவாக்கப்பட்டதால், சரியாக வேலை செய்யாமல் போகலாம். புதுப்பிப்புகள் ஏதேனும் உள்ளதா எனப் பார்க்கவும் அல்லது டெவெலப்பரைத் தொடர்புகொள்ளவும்."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"புதுப்பிப்பு உள்ளதா எனப் பார்"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"புதிய செய்திகள் வந்துள்ளன"</string>
@@ -2008,4 +2021,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> என்பதை வரம்பிடப்பட்ட பக்கெட்திற்குள் சேர்க்கப்பட்டது"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"தனிப்பட்ட சுயவிவரம்"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"பணிச் சுயவிவரம்"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 7a0aece..7d01f58 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"మీ అడ్మిన్ లొకేషన్ సెట్టింగ్‌లను మార్చారు"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"మీ లొకేషన్ సెట్టింగ్‌లను చుడటానికి ట్యాప్ చేయండి."</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"ఈ విశేష | సిస్టమ్ యాప్ ఎప్పుడైనా సిస్టమ్ కెమెరాను ఉపయోగించి ఫోటోలు తీయగలదు, వీడియోలను రికార్డ్ చేయగలదు. యాప్‌కు android.permission.CAMERA అనుమతి ఇవ్వడం కూడా అవసరం"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"వైబ్రేషన్‌ను నియంత్రించడం"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"IMS కాల్ సేవ యాక్సెస్ అనుమతి"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"మళ్లీ ప్రయత్నించండి."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"వేలిముద్రలు నమోదు చేయబడలేదు."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ఈ పరికరంలో వేలిముద్ర సెన్సార్ ఎంపిక లేదు."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"వేలు <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ముఖం ధృవీకరించలేకపోయింది. మళ్లీ ప్రయత్నించండి."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"మీరు ముఖంతో అన్‌లాక్‌ను సెటప్ చేయలేదు."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"ఈ పరికరంలో ముఖంతో అన్‌లాక్‌ను ఉపయోగించడానికి మద్దతు లేదు."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"ముఖ <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> నుండి, బ్యాక్‌గ్రౌండ్‌లో ప్రారంభమైన ఫోర్ గ్రౌండ్ సేవకు భవిష్యత్తు R బిల్డ్స్‌లో \'ఉపయోగంలో వున్నప్పుడు\' అనుమతి ఉండదు. దయచేసి go/r-bg-fgs-restrictionను చూసి బగ్ నివేదికను ఫైల్ చేయండి."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"వాల్యూమ్‌ను సిఫార్సు చేయబడిన స్థాయి కంటే ఎక్కువగా పెంచాలా?\n\nసుదీర్ఘ వ్యవధుల పాటు అధిక వాల్యూమ్‌లో వినడం వలన మీ వినికిడి శక్తి దెబ్బ తినవచ్చు."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"యాక్సెస్ సామర్థ్యం షార్ట్‌కట్‌ను ఉపయోగించాలా?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"షార్ట్‌కట్ ఆన్‌లో ఉన్నప్పుడు, రెండు వాల్యూమ్ బటన్‌లను 3 సెకన్ల పాటు నొక్కితే యాక్సెస్ సామర్థ్య ఫీచర్ ప్రారంభం అవుతుంది.\n\n ప్రస్తుత యాక్సెస్ సామర్థ్య ఫీచర్:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n సెట్టింగ్‌లు &gt; యాక్సెస్ సామర్థ్యంలో మీరు ఫీచర్‌ను మార్చవచ్చు."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"షార్ట్‌కట్‌లను ఎడిట్ చేయి"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"రద్దు చేయి"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"సత్వరమార్గాన్ని ఆఫ్ చేయి"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"కార్యాలయ ప్రొఫైల్‌ని ఆన్ చేయాలా?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"మీ కార్యాలయ యాప్‌లు, నోటిఫికేషన్‌లు, డేటా మరియు ఇతర కార్యాలయ ప్రొఫైల్ ఫీచర్‌లు ఆన్ చేయబడతాయి"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"ఆన్ చేయి"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"ఈ యాప్ పాత వెర్షన్ Android కోసం రూపొందించబడింది మరియు అది సరిగ్గా పని చేయకపోవచ్చు. అప్‌డేట్‌ల కోసం తనిఖీ చేయడానికి ప్రయత్నించండి లేదా డెవలపర్‌ని సంప్రదించండి."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"అప్‌డేట్ కోసం తనిఖీ చేయండి"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"మీకు కొత్త సందేశాలు ఉన్నాయి"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> పరిమితం చేయబడిన బకెట్‌లో ఉంచబడింది"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"వ్యక్తిగతం"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"కార్యాలయం"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 98f2d88..7f966db 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"ผู้ดูแลระบบได้เปลี่ยนการตั้งค่าตำแหน่ง"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"แตะเพื่อดูการตั้งค่าตำแหน่ง"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"แอปของระบบ | ที่ได้รับสิทธิ์นี้จะถ่ายภาพและบันทึกวิดีโอโดยใช้กล้องของระบบได้ทุกเมื่อ แอปต้องมีสิทธิ์ android.permission.CAMERA ด้วย"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"ควบคุมการสั่นเตือน"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"เข้าถึงบริการโทร IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ลองอีกครั้ง"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ไม่มีลายนิ้วมือที่ลงทะเบียน"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"อุปกรณ์นี้ไม่มีเซ็นเซอร์ลายนิ้วมือ"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"นิ้ว <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ยืนยันใบหน้าไม่ได้ ลองอีกครั้ง"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"คุณยังไม่ได้ตั้งค่า Face Unlock"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"อุปกรณ์นี้ไม่รองรับ Face Unlock"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"ใบหน้า <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"บริการที่ทำงานอยู่เบื้องหน้าซึ่งเริ่มขึ้นในเบื้องหลังจาก <xliff:g id="PACKAGENAME">%1$s</xliff:g> จะไม่มีสิทธิ์ขณะใช้งานใน R บิลด์ต่อๆ ไป โปรดดู go/r-bg-fgs-restriction และส่งรายงานข้อบกพร่อง"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"นี่เป็นการเพิ่มระดับเสียงเกินระดับที่แนะนำ\n\nการฟังเสียงดังเป็นเวลานานอาจทำให้การได้ยินของคุณบกพร่องได้"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ใช้ทางลัดการช่วยเหลือพิเศษไหม"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"เมื่อทางลัดเปิดอยู่ การกดปุ่มปรับระดับเสียงทั้ง 2 ปุ่มเป็นเวลา 3 วินาทีจะเริ่มฟีเจอร์การช่วยเหลือพิเศษ\n\n ฟีเจอร์การช่วยเหลือพิเศษปัจจุบัน:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n คุณสามารถเปลี่ยนฟีเจอร์ในการตั้งค่า &gt; การช่วยเหลือพิเศษ"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"แก้ไขทางลัด"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"ยกเลิก"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"ปิดทางลัด"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"เปิดโปรไฟล์งานไหม"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"ระบบจะเปิดแอปงาน การแจ้งเตือน ข้อมูล และฟีเจอร์อื่นๆ ในโปรไฟล์งาน"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"เปิด"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"แอปนี้สร้างขึ้นเพื่อ Android เวอร์ชันเก่าและอาจทำงานผิดปกติ โปรดลองตรวจหาการอัปเดตหรือติดต่อนักพัฒนาซอฟต์แวร์"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ตรวจสอบอัปเดต"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"คุณมีข้อความใหม่"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"ใส่ <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ในที่เก็บข้อมูลที่ถูกจำกัดแล้ว"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"ส่วนตัว"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"งาน"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index c38a6d5..53818ed 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Inalis ng admin ang device para sa personal na paggamit"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Pinamamahalaan ang device"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Pinamamahalaan ng iyong organisasyon ang device na ito, at maaari nitong subaybayan ang trapiko sa network. I-tap para sa mga detalye."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Binago ang mga setting ng lokasyon ng iyong admin"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"I-tap para makita ang iyong mga setting ng lokasyon."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Buburahin ang iyong device"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Hindi magamit ang admin app. Mabubura na ang iyong device.\n\nKung mayroon kang mga tanong, makipag-ugnayan sa admin ng iyong organisasyon."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Na-disable ng <xliff:g id="OWNER_APP">%s</xliff:g> ang pag-print."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Ang privileged | system app na ito ay makakakuha ng mga larawan at makakapag-record ng mga video gamit ang isang camera ng system anumang oras. Nangangailangang may android.permission.CAMERA na pahintulot din ang app"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"kontrolin ang pag-vibrate"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"i-access ang serbisyo sa tawag ng IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Subukang muli."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Walang naka-enroll na fingerprint."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Walang sensor ng fingerprint ang device na ito."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Daliri <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Hindi ma-verify ang mukha. Subukang muli."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Hindi mo pa nase-set up ang face unlock."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Hindi sinusuportahan ang face unlock sa device na ito."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Mukha <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Ang sinimulan sa background na serbisyo sa foreground mula sa <xliff:g id="PACKAGENAME">%1$s</xliff:g> ay hindi magkakaroon ng pahintulot habang ginagamit sa mga R build sa hinaharap. Pakipuntahan ang go/r-bg-fgs-restriction at maghain ng bugreport."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Gagamitin ang Shortcut sa Pagiging Accessible?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Kapag naka-on ang shortcut, magsisimula ang isang feature ng pagiging naa-access kapag pinindot ang parehong button ng volume sa loob ng 3 segundo.\n\n Kasalukuyang feature ng pagiging naa-access:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Maaari mong baguhin ang feature sa Mga Setting &gt; Pagiging Accessible."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"I-edit ang mga shortcut"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Kanselahin"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"I-off ang Shortcut"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"I-on ang profile sa trabaho?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Mao-on ang iyong mga app sa trabaho, notification, data, at iba pang feature sa profile sa trabaho"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"I-on"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Hindi available ang app"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"Hindi available sa ngayon ang <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ang app na ito ay ginawa para sa mas lumang bersyon ng Android at maaaring hindi gumana nang maayos. Subukang tingnan kung may mga update, o makipag-ugnayan sa developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Tingnan kung may update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Mayroon kang mga bagong mensahe"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Inilagay ang <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> sa PINAGHIHIGPITANG bucket"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Personal"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Trabaho"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 5e09309..2e3bf3a 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Yönetici, cihazı kişisel kullanım için serbest bıraktı"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Cihaz yönetiliyor"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Kuruluşunuz bu cihazı yönetmekte olup ağ trafiğini izleyebilir. Ayrıntılar için dokunun."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Konum ayarları, yöneticiniz tarafından değiştirildi"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Konum ayarlarınızı görmek için dokunun."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Cihazınız silinecek"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Yönetim uygulaması kullanılamıyor. Cihazınız şimdi silinecek.\n\nSorularınız varsa kuruluşunuzun yöneticisine başvurun."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Yazdırma işlemi <xliff:g id="OWNER_APP">%s</xliff:g> tarafından devre dışı bırakıldı."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Ayrıcalık tanınmış bu | sistem uygulaması herhangi bir zamanda sistem kamerası kullanarak fotoğraf çekebilir ve video kaydedebilir. Uygulamanın da bu ayrıcalığa sahip olması için android.permission.CAMERA izni gerektirir"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"titreşimi denetleme"</string>
     <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ına çağrı yapma izni verir. Bu durum beklenmeyen ödemelere veya çağrılara neden olabilir. Ancak bu iznin, uygulamanın acil numaralara çağrı yapmasına olanak sağlamadığını unutmayın. Kötü amaçlı uygulamalar onayınız olmadan çağrılar yaparak sizi zarara sokabilir."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS çağrı hizmetine erişme"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Tekrar deneyin."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Parmak izi kaydedilmedi."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Bu cihazda parmak izi sensörü yok."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g>. parmak"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Yüz doğrulanamıyor. Tekrar deneyin."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Yüz tanıma kilidi ayarlamadınız."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Bu cihazda yüz tanıma kilidi desteklenmiyor"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Yüz <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"<xliff:g id="PACKAGENAME">%1$s</xliff:g> paketinden ön plan hizmetini başlatan arka plan, sonraki R derlemelerinde kullanım sırasında iznine sahip olmayacak. Lütfen go/r-bg-fgs-restriction sayfasına bakıp hata raporu girin."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Erişilebilirlik Kısayolu Kullanılsın mı?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Kısayol açık olduğunda, ses düğmelerinin ikisini birden 3 saniyeliğine basılı tutmanız bir erişilebilirlik özelliğini başlatır.\n\n Geçerli erişilebilirlik özelliği:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Özelliği, Ayarlar &gt; Erişilebilirlik seçeneğinden değiştirebilirsiniz."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Kısayolları düzenle"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"İptal"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Kısayolu Kapat"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"İş profili açılsın mı?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"İş uygulamalarınız, bildirimleriniz, verileriniz ve diğer iş profili özellikleriniz açılacak"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Aç"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Uygulama kullanılamıyor"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulaması şu anda kullanılamıyor."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Bu uygulama Android\'in daha eski bir sürümü için oluşturuldu ve düzgün çalışmayabilir. Güncellemeleri kontrol etmeyi deneyin veya geliştiriciyle iletişime geçin."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Güncellemeleri denetle"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Yeni mesajlarınız var"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> KISITLANMIŞ gruba yerleştirildi"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Kişisel"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"İş"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 1096f97..37bb5cd 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -195,6 +195,8 @@
     <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="4119726617105166830">"Доступ до геоданих змінено адміністратором"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Натисніть, щоб переглянути доступ до геоданих."</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>
@@ -435,6 +437,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Цей пріоритетний | системний додаток може будь-коли робити фото й записувати відео, використовуючи камеру системи. Додатку потрібен дозвіл android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"контролювати вібросигнал"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"отримувати доступ до телефонної служби IMS"</string>
@@ -549,6 +552,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Повторіть спробу."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Відбитки пальців не зареєстровано."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"На цьому пристрої немає сканера відбитків пальців."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Відбиток пальця <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -592,6 +597,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Не вдається перевірити обличчя. Повторіть спробу."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Ви не налаштували Фейсконтроль"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"На цьому пристрої не підтримується Фейсконтроль."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Обличчя <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1658,7 +1665,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Активний сервіс пакета <xliff:g id="PACKAGENAME">%1$s</xliff:g>, запущений у фоновому режимі, не матиме дозволу \"Коли додаток використовується\" в майбутніх складаннях R. Перегляньте go/r-bg-fgs-restriction і надішліть звіт про помилки."</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Збільшити гучність понад рекомендований рівень?\n\nЯкщо слухати надто гучну музику тривалий час, можна пошкодити слух."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Використовувати швидке ввімкнення?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Коли ярлик увімкнено, після натискання обох клавіш гучності й утримування їх протягом 3 секунд увімкнеться функція спеціальних можливостей.\n\n Поточна функція спеціальних можливостей:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Цю функцію можна змінити в меню \"Налаштування\" &gt; \"Спеціальні можливості\"."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Редагувати засоби"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Скасувати"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Вимкнути ярлик"</string>
@@ -1917,6 +1925,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Увімкнути робочий профіль?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Додатки, сповіщення, дані й інші функції робочого профілю буде ввімкнено"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Увімкнути"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"Цей додаток створений для старішої версії Android і може працювати неналежним чином. Спробуйте знайти оновлення або зв’яжіться з розробником."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Шукати оновлення"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"У вас є нові повідомлення"</string>
@@ -2076,4 +2086,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакет \"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>\" додано в сегмент з обмеженнями"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Особисте"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Робоче"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index 4c33191..f2157bd 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"آپ کے منتظم نے مقام کی ترتیبات تبدیل کر دی"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"اپنے مقام کی ترتیبات دیکھنے کے لیے تھپتھپائیں۔"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"‏یہ مراعات یافتہ سسٹم ایپ کسی بھی وقت ایک سسٹم کیمرا استعمال کرتے ہوئے تصاویر اور ویڈیوز ریکارڈ کر سکتی ہے۔ ایپ کے پاس android.permission.CAMERA کے ليے بھی اجازت ہونا ضروری ہے۔"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"ارتعاش کو کنٹرول کریں"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"‏IMS کال سروس تک رسائی حاصل کریں"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"دوبارہ کوشش کریں۔"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"کوئی فنگر پرنٹ مندرج شدہ نہیں ہے۔"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"اس آلہ میں فنگر پرنٹ سینسر نہیں ہے۔"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"انگلی <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"چہرے کی توثیق نہیں کی جا سکی۔ پھر آزمائيں۔"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"آپ نے بذریعہ چہرہ غیر مقفل کرنے کو سیٹ نہیں کیا ہے۔"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"اس آلہ پر چہرے کے ذریعے غیر مقفل کرنا تعاون یافتہ نہیں ہے۔"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"چہرہ <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"‏پس منظر <xliff:g id="PACKAGENAME">%1$s</xliff:g> سے شروع کی گئی پیش منظر کی سروس کو مستقبل کے R بلڈز میں استعمال کے دوران اجازت نہیں ہوگی۔ براہ کرم go/r-bg-fgs-restriction دیکھیں اور بگ رپورٹ دائر کریں۔"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"والیوم کو تجویز کردہ سطح سے زیادہ کریں؟\n\nزیادہ وقت تک اونچی آواز میں سننے سے آپ کی سماعت کو نقصان پہنچ سکتا ہے۔"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ایکسیسبیلٹی شارٹ کٹ استعمال کریں؟"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"شارٹ کٹ آن ہونے پر، 3 سیکنڈ تک دونوں والیوم بٹنز کو دبانے سے ایک ایکسیسبیلٹی خصوصیت شروع ہو جائے گی۔\n\n موجودہ ایکسیسبیلٹی خصوصیت:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n آپ خصوصیت کو ترتیبات &gt; ایکسیسبیلٹی میں جا کر تبدیل کر سکتے ہیں۔"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"شارٹ کٹس میں ترمیم کریں"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"منسوخ کریں"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"شارٹ کٹ آف کریں"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"دفتری پروفائل آن کریں؟"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"آپ کی دفتری ایپس، اطلاعات، ڈیٹا اور دفتری پروفائل کی دیگر خصوصیات آن کر دی جائیں گی"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"آن کریں"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"‏یہ ایپ Android کے پرانے ورژن کے لئے بنائی گئی ہے اور ہو سکتا ہے صحیح طور پر کام نہ کرے۔ اپ ڈیٹس چیک کر کے آزمائیں یا ڈیولپر سے رابطہ کریں۔"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"اپ ڈیٹ چیک کریں"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"آپ کے پاس نئے پیغامات ہیں"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> کو پابند کردہ بکٹ میں رکھ دیا گیا ہے"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"ذاتی"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"دفتر"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index 23873b5..ee5a7d2 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Administrator shaxsiy foydalanishga qoldirilgan qurilmani rad etdi"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Bu – boshqariladigan qurilma"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Tashkilotingiz bu qurilmani boshqaradi va tarmoq trafigini nazorat qilishi mumkin. Tafsilotlar uchun bosing."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Joylashuv sozlamalari administratoringiz tomonidan oʻzgartirildi"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Joylashuv sozlamalarini koʻrish uchun bosing."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Qurilmangizdagi ma’lumotlar o‘chirib tashlanadi"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Administrator ilovasini ishlatib bo‘lmaydi. Qurilmada barcha ma’lumotlar o‘chirib tashlanadi.\n\nSavollaringiz bo‘lsa, administrator bilan bog‘laning."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Chop etish funksiyasi <xliff:g id="OWNER_APP">%s</xliff:g> tomonidan faolsizlantirilgan."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Bu imtiyozli | tizim ilovasi istalgan vaqtda tizim kamerasi orqali surat va videolar olishi mumkin. Ilovada android.permission.CAMERA ruxsati ham yoqilgan boʻlishi talab qilinadi"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"tebranishni boshqarish"</string>
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Ilova tebranishli signallarni boshqarishi mumkin."</string>
+    <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ilovaga tebranish holatiga kirish 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="permlab_accessImsCallService" msgid="442192920714863782">"IMS qo‘ng‘iroq xizmatiga kirish"</string>
@@ -543,6 +546,7 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Qayta urinib ko‘ring."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Hech qanday barmoq izi qayd qilinmagan."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Bu qurilmada barmoq izi skaneri mavjud emas."</string>
+    <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor vaqtincha faol emas."</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Barmoq izi <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +590,7 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Yuzingiz tasdiqlanmadi. Qaytadan urining."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Hali yuz bilan ochishni sozlamagansiz"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Yuz bilan ochish bu qurilmada ishlamaydi"</string>
+    <string name="face_error_security_update_required" msgid="5076017208528750161">"Sensor vaqtincha faol emas."</string>
     <string name="face_name_template" msgid="3877037340223318119">"Yuz <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1619,7 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Fonda faol <xliff:g id="PACKAGENAME">%1$s</xliff:g> xizmatini ishga tushirish uchun kelgusi R nashrlarida ishlatilayotganda ruxsat berish imkoniyati boʻlmaydi. go/r-bg-fgs-restriction sahifasiga kiring va xatolik hisobotini yuboring."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Tezkor ishga tushirishdan foydalanilsinmi?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Maxsus imkoniyatlar funksiyasidan foydalanish uchun u yoniqligida ikkala ovoz balandligini boshqarish tugmasini 3 soniya bosib turing.\n\n Joriy maxsus imkoniyatlar funksiyasi:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Bu funksiyani Sozlamalar &gt; Maxsus imkoniyatlar orqali o‘zgartirish mumkin."</string>
+    <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Maxsus imkoniyatlar funksiyasidan foydalanish uchun u yoniqligida ikkala ovoz balandligini boshqarish tugmasini 3 soniya bosib turing."</string>
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Tezkor tugmalarni tahrirlash"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Bekor qilish"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Tezkor ishga tushirishni o‘chirib qo‘yish"</string>
@@ -1853,6 +1858,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Ishchi profil yoqilsinmi?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Ishchi ilovalar, bildirishnomalar, ma’lumotlar va boshqa ishchi profil imkoniyatlari yoqiladi"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Yoqish"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Ilova ishlamayapti"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"Ayni vaqtda <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi ishlamayapti."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Bu ilova eskiroq Android versiyalariga chiqarilgan va xato ishlashi mumkin. Yangilanishlarini tekshiring yoki dasturchi bilan bog‘laning."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Yangilanish borligini tekshirish"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Sizga yangi SMS keldi"</string>
@@ -2008,4 +2015,12 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> cheklangan turkumga joylandi"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Shaxsiy"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Ish"</string>
+    <string name="resolver_cant_share_with_work_apps" msgid="7539495559434146897">"Ishchi ilovalarga ulashilmaydi"</string>
+    <string name="resolver_cant_share_with_personal_apps" msgid="8020581735267157241">"Shaxsiy ilovalarga ulashilmaydi"</string>
+    <string name="resolver_cant_share_cross_profile_explanation" msgid="3536237105241882679">"Shaxsiy va ishchi ilovalararo axborot ulashish AT administratori tomonidan taqiqlangan"</string>
+    <string name="resolver_turn_on_work_apps" msgid="8987359079870455469">"Ishchi ilovalarni yoqish"</string>
+    <string name="resolver_turn_on_work_apps_explanation" msgid="6322467455509618928">"Ishchi ilova va kontaktlarni ochish uchun ishchi ilovalarni yoqing"</string>
+    <string name="resolver_no_apps_available" msgid="7710339903040989654">"Mos ilova topilmadi"</string>
+    <string name="resolver_no_apps_available_explanation" msgid="4662694431121196560">"Hech qanday ilova topilmadi"</string>
+    <string name="resolver_switch_on_work" msgid="8294542702883688533">"Ishchi rejimni yoqish"</string>
 </resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 1ed30d7..1a8a275 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Quản trị viên đã từ bỏ quyền sở hữu thiết bị để cho phép dùng vào mục đích cá nhân"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Thiết bị được quản lý"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Tổ chức của bạn sẽ quản lý thiết bị này và có thể theo dõi lưu lượng truy cập mạng. Nhấn để biết chi tiết."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Quản trị viên của bạn đã thay đổi các tùy chọn cài đặt vị trí"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Nhấn để xem các tùy chọn cài đặt vị trí của bạn."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Thiết bị của bạn sẽ bị xóa"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Không thể sử dụng ứng dụng quản trị. Thiết bị của bạn sẽ bị xóa ngay bây giờ.\n\nHãy liên hệ với quản trị viên của tổ chức nếu bạn có thắc mắc."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> đã tắt tính năng in."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Ứng dụng hệ thống/đặc quyền này có thể dùng máy ảnh hệ thống để chụp ảnh và quay video bất cứ lúc nào. Ngoài ra, ứng dụng này cũng cần có quyền android.permission.CAMERA"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"kiểm soát rung"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"truy cập dịch vụ gọi điện qua IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Thử lại."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Chưa đăng ký vân tay."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Thiết bị này không có cảm biến vân tay."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Ngón tay <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <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="7369928733504691611">"Bạn chưa thiết lập tính năng mở khóa bằng khuôn mặt."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"Thiết bị này không hỗ trợ tính năng mở khóa bằng khuôn mặt."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Khuôn mặt <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Dịch vụ trên nền trước đã bắt đầu ở nền từ <xliff:g id="PACKAGENAME">%1$s</xliff:g> sẽ không có quyền khi đang sử dụng trong các bản dựng R trong tương lai. Vui lòng xem go/r-bg-fgs-restriction và gửi báo cáo lỗi."</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="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="8306239551412868396">"Khi phím tắt được bật, nhấn cả hai nút âm lượng trong 3 giây sẽ bắt đầu một tính năng trợ năng.\n\n Tính năng trợ năng hiện tại:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Bạn có thể thay đổi tính năng trong Cài đặt &gt; Trợ năng."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Chỉnh sửa phím tắt"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Hủy"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Tắt phím tắt"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Bạn muốn bật hồ sơ công việc?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Ứng dụng công việc, thông báo, dữ liệu và các tính năng khác của hồ sơ công việc sẽ được bật"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Bật"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Ứng dụng này không dùng được"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> hiện không dùng được."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ứng dụng này được xây dựng cho một phiên bản Android cũ hơn và có thể hoạt động không bình thường. Hãy thử kiểm tra các bản cập nhật hoặc liên hệ với nhà phát triển."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Kiểm tra bản cập nhật"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Bạn có tin nhắn mới"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Đã đưa <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> vào bộ chứa BỊ HẠN CHẾ"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Cá nhân"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Cơ quan"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 7671063..2339a44 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"您的管理员已更改位置信息设置"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"点按即可查看您的位置信息设置。"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"获取访问权限后,这个系统应用就随时可以使用系统相机拍照及录制视频。另外,应用还需要获取 android.permission.CAMERA 权限"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"控制振动"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"使用即时通讯通话服务"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"请重试。"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"未注册任何指纹。"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"此设备没有指纹传感器。"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"手指 <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"无法验证人脸,请重试。"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"您尚未设置人脸解锁。"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"此设备不支持人脸解锁。"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"面孔 <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"在未来的 R 版本中,在后台启动的 <xliff:g id="PACKAGENAME">%1$s</xliff:g> 中的前台服务将不具有仅在使用时授予的权限。请访问 go/r-bg-fgs-restriction 并提交错误报告。"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"要将音量调高到建议的音量以上吗?\n\n长时间保持高音量可能会损伤听力。"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"要使用无障碍快捷方式吗?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"开启快捷方式后,同时按下两个音量按钮 3 秒钟即可启动所设定的无障碍功能。\n\n当前设定的无障碍功能:\n<xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n如需更改设定的功能,请依次转到“设置”&gt;“无障碍”。"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"修改快捷方式"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"取消"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"关闭快捷方式"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"要开启工作资料吗?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"您的工作应用、通知、数据及其他工作资料功能将会开启"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"开启"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"此应用专为旧版 Android 打造,因此可能无法正常运行。请尝试检查更新或与开发者联系。"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"检查更新"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"您有新消息"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 已被放入受限存储分区"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"个人"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"工作"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 89bea07..94783a0 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"您的管理員變更了位置設定"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"輕按即可查看位置設定。"</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>
@@ -283,7 +285,7 @@
     <string name="managed_profile_label" msgid="7316778766973512382">"切換至工作設定檔"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"通訊錄"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"存取您的通訊錄"</string>
-    <string name="permgrouplab_location" msgid="1858277002233964394">"位置資訊"</string>
+    <string name="permgrouplab_location" msgid="1858277002233964394">"位置"</string>
     <string name="permgroupdesc_location" msgid="1995955142118450685">"存取此裝置的位置"</string>
     <string name="permgrouplab_calendar" msgid="6426860926123033230">"日曆"</string>
     <string name="permgroupdesc_calendar" msgid="6762751063361489379">"存取您的日曆"</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"這個獲特別權限的系統應用程式可以在任何時候使用系統相機來拍照和攝錄。此外,應用程式亦需要 android.permission.CAMERA 權限"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"控制震動"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"使用 IMS 通話服務"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"再試一次。"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"未註冊任何指紋"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"此裝置沒有指紋感應器。"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"手指 <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"無法驗證臉孔。請再試一次。"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"您尚未設定「臉孔解鎖」。"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"此裝置不支援「臉孔解鎖」。"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"臉孔 <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"從「<xliff:g id="PACKAGENAME">%1$s</xliff:g>」啟動前景服務的背景將不會在未來的 R 版本中提供「僅在使用此應用程式時允許」權限。請參閱 go/r-bg-fgs-restriction,提交錯誤報告。"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"要調高音量 (比建議的音量更大聲) 嗎?\n\n長時間聆聽高分貝音量可能會導致您的聽力受損。"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"要使用無障礙功能快速鍵嗎?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"快速鍵開啟後,同時按住音量按鈕 3 秒,無障礙功能便會啟用。\n\n目前的無障礙功能:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n如要變更功能,請前往「設定」&gt;「無障礙功能」。"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"編輯捷徑"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"取消"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"關閉快速鍵"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"要開啟工作設定檔嗎?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"系統將開啟您的工作應用程式、通知、資料和其他工作設定檔功能"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"開啟"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"此應用程式專為舊版 Android 打造,因此可能無法正常運作。請嘗試檢查更新,或與開發人員聯絡。"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"檢查更新"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"您有新的訊息"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 已納入受限制的儲存區"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"個人"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"公司"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index c95ae37..f3da0d8 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -191,6 +191,8 @@
     <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="4119726617105166830">"你的管理員變更了位置資訊設定"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"輕觸即可查看位置資訊設定。"</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>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"取得存取權後,這個系統應用程式就隨時可以使用系統攝影機拍照及錄影。此外,你也必須將 android.permission.CAMERA 權限授予這個應用程式"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"控制震動"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"存取 IMS 撥號服務"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"請再試一次。"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"未登錄任何指紋。"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"這個裝置沒有指紋感應器。"</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"手指 <xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"無法驗證臉孔,請再試一次。"</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"你尚未設定人臉解鎖功能。"</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"這個裝置不支援人臉解鎖功能。"</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"臉孔 <xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"來自「<xliff:g id="PACKAGENAME">%1$s</xliff:g>」的背景啟動前景服務不會具備未來 R 版本的使用狀態權限。請前往 go/r-bg-fgs-restriction 並提交錯誤報告。"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"要調高音量,比建議的音量更大聲嗎?\n\n長時間聆聽高分貝音量可能會使你的聽力受損。"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"要使用無障礙捷徑嗎?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"啟用捷徑功能後,只要同時按下兩個音量鍵 3 秒,就能啟動無障礙功能。\n\n 目前設定的無障礙功能為:\n<xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n 如要變更設定的功能,請依序輕觸 [設定] &gt; [無障礙設定]。"</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"編輯捷徑"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"取消"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"停用捷徑"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"要開啟工作資料夾嗎?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"系統將開啟你的辦公應用程式、通知、資料和其他工作資料夾功能"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"開啟"</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="deprecated_target_sdk_message" msgid="5203207875657579953">"這個應用程式是專為舊版 Android 所打造,因此可能無法正常運作。請嘗試檢查更新,或是與開發人員聯絡。"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"檢查更新"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"你有新訊息"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"已將「<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>」移入受限制的值區"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"個人"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"工作"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 0cd669b..d4a6c26 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -191,6 +191,8 @@
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"Umphathi udedela idivayisi ngokusetshenziswa komuntu siqu"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"Idivayisi iphethwe"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Inhlangano yakho iphethe le divayisi futhi kungenzeka ingaqaphi ithrafikhi yenethiwekhi. Thephela imininingwane."</string>
+    <string name="location_changed_notification_title" msgid="4119726617105166830">"Izilungiselelo zendawo zishintshwe umphathi wakho"</string>
+    <string name="location_changed_notification_text" msgid="198907268219396399">"Thepha ukuze ubone izilungiselelo zakho zendawo."</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"Idivayisi yakho izosulwa"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"Uhlelo lokusebenza lomlawuli alikwazi ukusetshenziswa. Idivayisi yakho manje izosuswa.\n\nUma unemibuzo, xhumana nomlawuli wezinhlangano zakho."</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"Ukuphrinta kukhutshazwe nge-<xliff:g id="OWNER_APP">%s</xliff:g>."</string>
@@ -429,6 +431,7 @@
     <string name="permdesc_systemCamera" msgid="544730545441964482">"Lolu hlelo lokusebenza lesistimu le-| lingathatha izithombe futhi lirekhode amavidiyo lisebenzisa ikhamera yesistimu noma kunini. Idinga imvume ye-android.permission.CAMERA permission ukuthi iphathwa uhlelo lokusebenza futhi"</string>
     <string name="permlab_vibrate" msgid="8596800035791962017">"lawula ukudlidliza"</string>
     <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="permlab_accessImsCallService" msgid="442192920714863782">"finyelela kusevisi yekholi ye-IMS"</string>
@@ -543,6 +546,8 @@
     <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Zama futhi."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Azikho izigxivizo zeminwe ezibhalisiwe."</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Le divayisi ayinayo inzwa yezigxivizo zeminwe."</string>
+    <!-- no translation found for fingerprint_error_security_update_required (7750187320640856433) -->
+    <skip />
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Umunwe ongu-<xliff:g id="FINGERID">%d</xliff:g>"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -586,6 +591,8 @@
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Ayikwazi ukuqinisekisa ubuso. Zama futhi."</string>
     <string name="face_error_not_enrolled" msgid="7369928733504691611">"Awukakasethi i-face unlock."</string>
     <string name="face_error_hw_not_present" msgid="1070600921591729944">"I-face unlock ayisekelwe kule divayisi."</string>
+    <!-- no translation found for face_error_security_update_required (5076017208528750161) -->
+    <skip />
     <string name="face_name_template" msgid="3877037340223318119">"Ubuso be-<xliff:g id="FACEID">%d</xliff:g>"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -1614,7 +1621,8 @@
     <string name="allow_while_in_use_permission_in_fgs" msgid="4101339676785053656">"Ingemuva eqalise isevisi yasemuva kusuka ku-<xliff:g id="PACKAGENAME">%1$s</xliff:g> ngeke ithole imvume yokusebenzisa yesikhathi ekwakheni kwe-R ezayo. Sicela ubone i-go/r-bg-fgs-restriction bese ufayele umbiko wesiphazamiso."</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="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Sebenzisa isinqamuleli sokufinyelela?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="8306239551412868396">"Uma kuvulwe isinqamuleli, ukucindezela zombili izinkinobho zevolumu amasekhondi angu-3 kuzoqala isici sokufinyelela.\n\n Isici samanje sokufinyelela:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n Ungashintsha isici kuzilungiselelo &gt; Ukufinyelela."</string>
+    <!-- no translation found for accessibility_shortcut_toogle_warning (4161716521310929544) -->
+    <skip />
     <string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Hlela izinqamuleli"</string>
     <string name="cancel_accessibility_shortcut_menu_button" msgid="1817413122335452474">"Khansela"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Vala isinqamuleli"</string>
@@ -1853,6 +1861,8 @@
     <string name="work_mode_off_title" msgid="5503291976647976560">"Vula iphrofayela yomsebenzi?"</string>
     <string name="work_mode_off_message" msgid="8417484421098563803">"Izinhlelo zakho zokusebenza zomsebenzi, izaziso, idatha, nezinye izici zephrofayela yomsebenzi kuzovulwa"</string>
     <string name="work_mode_turn_on" msgid="3662561662475962285">"Vula"</string>
+    <string name="app_blocked_title" msgid="7353262160455028160">"Uhlelo lokusebenza alutholakali"</string>
+    <string name="app_blocked_message" msgid="542972921087873023">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ayitholakali khona manje."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Lolu hlelo lokusebenza belakhelwe inguqulo endala ye-Android futhi kungenzeka lungasebenzi kahle. Zama ukuhlolela izibuyekezo, noma uxhumane nonjiniyela."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Hlola izibuyekezo"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Unemilayezo emisha"</string>
@@ -2008,4 +2018,20 @@
     <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"I-<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ifakwe kubhakede LOKUKHAWULELWE"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Okomuntu siqu"</string>
     <string name="resolver_work_tab" msgid="2690019516263167035">"Umsebenzi"</string>
+    <!-- no translation found for resolver_cant_share_with_work_apps (7539495559434146897) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_with_personal_apps (8020581735267157241) -->
+    <skip />
+    <!-- no translation found for resolver_cant_share_cross_profile_explanation (3536237105241882679) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps (8987359079870455469) -->
+    <skip />
+    <!-- no translation found for resolver_turn_on_work_apps_explanation (6322467455509618928) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available (7710339903040989654) -->
+    <skip />
+    <!-- no translation found for resolver_no_apps_available_explanation (4662694431121196560) -->
+    <skip />
+    <!-- no translation found for resolver_switch_on_work (8294542702883688533) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 20901e0..9cdd3ed 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -3774,7 +3774,7 @@
         <attr name="animatedImageDrawable" format="reference"/>
         <!-- Html description of the accessibility service, to help users understand
              how the service can help them.-->
-        <attr name="htmlDescription" format="string"/>
+        <attr name="htmlDescription" format="reference"/>
 
         <!-- Short description of the accessibility service purpose or behavior.-->
         <attr name="description" />
@@ -3790,6 +3790,12 @@
         <attr name="description" />
         <!-- Brief summary of the target of accessibility shortcut purpose or behavior. -->
         <attr name="summary" />
+        <!-- Animated image of the target of accessibility shortcut purpose or behavior, to help
+             users understand how the target of accessibility shortcut can help them.-->
+        <attr name="animatedImageDrawable" format="reference"/>
+        <!-- Html description of the target of accessibility shortcut purpose or behavior, to help
+             users understand how the target of accessibility shortcut can help them. -->
+        <attr name="htmlDescription" format="reference"/>
     </declare-styleable>
 
     <!-- Use <code>print-service</code> as the root tag of the XML resource that
@@ -9201,12 +9207,4 @@
     </declare-styleable>
 
     <attr name="autoSizePresetSizes" />
-
-    <declare-styleable name="AutofillInlineSuggestion">
-        <!-- @hide @SystemApi -->
-        <attr name="isAutofillInlineSuggestionTheme" format="boolean" />
-        <attr name="autofillInlineSuggestionChip" format="reference" />
-        <attr name="autofillInlineSuggestionTitle" format="reference" />
-        <attr name="autofillInlineSuggestionSubtitle" format="reference" />
-    </declare-styleable>
 </resources>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index b22e186..950f163 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -1770,6 +1770,21 @@
              -->
         <attr name="requestLegacyExternalStorage" format="boolean" />
 
+        <!-- If {@code true} this app would like to preserve the legacy storage
+             model from a previously installed version. Note that this may not always be
+             respected due to policy or backwards compatibility reasons.
+
+             <p>This has no effect on the first install of an app on a device.
+             For an updating app, setting this to {@code true} will preserve the legacy behaviour
+             configured by the {@code requestLegacyExternalStorage} flag. If on an update, this
+             flag is set to {@code false} then the legacy access is not preserved, such an app can
+             only have legacy access with the {@code requestLegacyExternalStorage} flag.
+             <p>
+
+             The default value is {@code false}.
+             -->
+        <attr name="preserveLegacyExternalStorage" format="boolean" />
+
         <!-- If {@code true} this app declares that it should be visible to all other apps on
              device, regardless of what they declare via the {@code queries} tags in their
              manifest.
@@ -1782,6 +1797,15 @@
 
              The default value is {@code false}. -->
         <attr name="crossProfile" format="boolean" />
+
+        <!-- If {@code true} this app will receive tagged pointers to native heap allocations
+             from functions like malloc() on compatible devices. Note that this may not always
+             be respected due to policy or backwards compatibility reasons. See the
+             <a href="https://source.android.com/devices/tech/debug/tagged-pointers">Tagged Pointers</a>
+             document for more information on this feature.
+
+             The default value is {@code true}. -->
+        <attr name="allowNativeHeapPointerTagging" format="boolean" />
     </declare-styleable>
 
     <!-- The <code>feature</code> tag declares a feature. A feature is a logical part of an app.
@@ -2056,6 +2080,9 @@
         <attr name="name" />
     </declare-styleable>
     <declare-styleable name="AndroidManifestQueriesIntent" parent="AndroidManifestQueries" />
+    <declare-styleable name="AndroidManifestQueriesProvider" parent="AndroidManifestQueries" >
+        <attr name="authorities" />
+    </declare-styleable>
 
 
     <!-- The <code>static-library</code> tag declares that this apk is providing itself
@@ -2782,6 +2809,9 @@
              case-sensitive, unlike formal RFC MIME types.  As a result,
              MIME types here should always use lower case letters.</em></p> -->
         <attr name="mimeType" format="string" />
+        <!-- Specify a group of MIME types that are handled. MIME types can be added and
+             removed to a package's MIME group via the PackageManager. -->
+        <attr name="mimeGroup" format="string" />
         <!-- Specify a URI scheme that is handled, as per
              {@link android.content.IntentFilter#addDataScheme
              IntentFilter.addDataScheme()}.
diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml
index 29f9f6c..c5127dc 100644
--- a/core/res/res/values/bools.xml
+++ b/core/res/res/values/bools.xml
@@ -29,4 +29,5 @@
          <p>The main purpose is for OEMs to customize the rendering of the
          lockscreen, setting this to true should come with customized drawables. -->
     <bool name="use_lock_pattern_drawable">false</bool>
+    <bool name="sharesheet_show_content_preview">false</bool>
 </resources>
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 731e2ec..bdec096 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -226,4 +226,6 @@
     <color name="resolver_text_color_secondary_dark">#ffC4C6C6</color>
     <color name="resolver_tabs_active_color">#FF1A73E8</color>
     <color name="resolver_tabs_inactive_color">#FF80868B</color>
+    <color name="resolver_empty_state_text">#FF202124</color>
+    <color name="resolver_empty_state_icon">#FF5F6368</color>
 </resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 31e68e8..6ca5081 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -59,6 +59,7 @@
         <item><xliff:g id="id">@string/status_bar_airplane</xliff:g></item>
         <item><xliff:g id="id">@string/status_bar_battery</xliff:g></item>
         <item><xliff:g id="id">@string/status_bar_sensors_off</xliff:g></item>
+        <item><xliff:g id="id">@string/status_bar_screen_record</xliff:g></item>
     </string-array>
 
     <string translatable="false" name="status_bar_rotate">rotate</string>
@@ -94,6 +95,7 @@
     <string translatable="false" name="status_bar_camera">camera</string>
     <string translatable="false" name="status_bar_airplane">airplane</string>
     <string translatable="false" name="status_bar_sensors_off">sensors_off</string>
+    <string translatable="false" name="status_bar_screen_record">screen_record</string>
 
     <!-- Flag indicating whether the surface flinger has limited
          alpha compositing functionality in hardware.  If set, the window
@@ -244,7 +246,7 @@
          correctly use them when installed on your device.  Otherwise, keep this disabled
          so that applications can still use their own mechanisms. -->
     <bool name="config_enableAutoPowerModes">false</bool>
-
+ 
     <!-- Whether (if true) this is a kind of device that can be moved around (eg. phone/laptop),
          or (if false) something for which movement is either not measurable or should not count
          toward power states (eg. tv/soundbar). -->
@@ -269,6 +271,11 @@
          when there's no network connection. If the scan doesn't timeout, use zero -->
     <integer name="config_radioScanningTimeout">0</integer>
 
+    <!-- When true, Android uses the PAC implementation included in WebView to handle
+         networks with PAC scripts.
+         When false, Android's own implementation of libpac is used.-->
+    <bool name ="config_useWebViewPacProcessor">true</bool>
+
     <!-- XXXXX NOTE THE FOLLOWING RESOURCES USE THE WRONG NAMING CONVENTION.
          Please don't copy them, copy anything else. -->
 
@@ -1258,32 +1265,63 @@
     -->
     <integer name="config_doubleTapOnHomeBehavior">0</integer>
 
-    <!-- Minimum screen brightness setting allowed by the power manager.
-         The user is forbidden from setting the brightness below this level. -->
+    <!-- Note: This setting is deprecated, please use
+    config_screenBrightnessSettingMinimumFloat instead -->
     <integer name="config_screenBrightnessSettingMinimum">10</integer>
 
-    <!-- Maximum screen brightness allowed by the power manager.
-         The user is forbidden from setting the brightness above this level. -->
+    <!-- Note: This setting is deprecated, please use
+    config_screenBrightnessSettingMaximumFloat instead -->
     <integer name="config_screenBrightnessSettingMaximum">255</integer>
 
-    <!-- Default screen brightness setting.
-         Must be in the range specified by minimum and maximum. -->
+    <!-- Note: This setting is deprecated, please use
+    config_screenBrightnessSettingDefaultFloat instead -->
     <integer name="config_screenBrightnessSettingDefault">102</integer>
 
-    <!-- Default screen brightness for VR setting. -->
+    <!-- Minimum screen brightness setting allowed by power manager.
+        The user is forbidden from setting the brightness below this level.
+        Equivalent to 10/255. -->
+    <item name="config_screenBrightnessSettingMinimumFloat" format="float" type="dimen">0.035433073</item>
+
+    <!-- Maximum screen brightness allowed by the power manager.
+         The user is forbidden from setting the brightness above this level.
+         This value is a fraction between 3.5% and 100%. -->
+    <item name="config_screenBrightnessSettingMaximumFloat" format="float" type="dimen">1.0</item>
+
+    <!-- Default screen brightness setting.
+         Must be in the range specified by minimum and maximum.
+         This value is a fraction between 3.5% and 100%.
+         Equivalent to 102/255 (default for this device)    -->
+    <item name="config_screenBrightnessSettingDefaultFloat" format="float" type="dimen">0.397637795276</item>
+
+    <!-- Note: This setting is deprecated, please use
+    config_screenBrightnessSettingForVrDefaultFloat instead -->
     <integer name="config_screenBrightnessForVrSettingDefault">86</integer>
 
-    <!-- Minimum screen brightness setting allowed for VR. Device panels start increasing pulse
-         width as brightness decreases below this theshold. -->
+    <!-- Note: This setting is deprecated, please use
+    config_screenBrightnessSettingForVrMinimumFloat instead -->
     <integer name="config_screenBrightnessForVrSettingMinimum">79</integer>
 
-    <!-- Maximum screen brightness setting allowed for VR. -->
+    <!-- Note: This setting is deprecated, please use
+    config_screenBrightnessSettingForVrMaximumFloat instead -->
     <integer name="config_screenBrightnessForVrSettingMaximum">255</integer>
 
+    <!-- Default screen brightness for VR setting as a float.
+    Equivalent to 86/255-->
+    <item name="config_screenBrightnessSettingForVrDefaultFloat" format="float" type="dimen">0.33464</item>
+
+    <!-- Minimum screen brightness setting allowed for VR. Device panels start increasing pulse
+     width as brightness decreases below this threshold as float.
+     Equivalent to 79/255 -->
+    <item name="config_screenBrightnessSettingForVrMinimumFloat" format="float" type="dimen">0.307087</item>
+
+    <!-- Maximum screen brightness setting allowed for VR as float. -->
+    <item name="config_screenBrightnessSettingForVrMaximumFloat" format="float" type="dimen">1.0</item>
+
     <!-- Screen brightness used to dim the screen while dozing in a very low power state.
          May be less than the minimum allowed brightness setting
          that can be set by the user. -->
     <integer name="config_screenBrightnessDoze">1</integer>
+    <item name="config_screenBrightnessDozeFloat" format="float" type="dimen">0.0</item>
 
     <!-- Delay that allows some content to arrive at the display before switching
          from DOZE to ON. -->
@@ -1339,6 +1377,7 @@
          timeout expires.  May be less than the minimum allowed brightness setting
          that can be set by the user. -->
     <integer name="config_screenBrightnessDim">10</integer>
+    <item name="config_screenBrightnessDimFloat" format="float" type="dimen">0.05</item>
 
     <!-- Minimum allowable screen brightness to use in a very dark room.
          This value sets the floor for the darkest possible auto-brightness
@@ -2351,7 +2390,7 @@
          type. These are flags and can be freely combined.
          0  - disable whitelist (install all system packages; no logging)
          1  - enforce (only install system packages if they are whitelisted)
-         2  - log (log when a non-whitelisted package is run)
+         2  - log (log non-whitelisted packages)
          4  - any package not mentioned in the whitelist file is implicitly whitelisted on all users
          8  - same as 4, but just for the SYSTEM user
          16 - ignore OTAs (don't install system packages during OTAs)
@@ -2793,13 +2832,13 @@
          "logout" =  Logout the current user
          -->
     <string-array translatable="false" name="config_globalActionsList">
+        <item>emergency</item>
         <item>power</item>
         <item>restart</item>
         <item>lockdown</item>
         <item>logout</item>
         <item>bugreport</item>
         <item>screenshot</item>
-        <item>emergency</item>
     </string-array>
 
     <!-- Number of milliseconds to hold a wake lock to ensure that drawing is fully
@@ -3402,8 +3441,8 @@
     <!-- True if assistant app should be pinned via Pinner Service -->
     <bool name="config_pinnerAssistantApp">false</bool>
 
-    <!-- List of files pinned by the Pinner Service with the apex boot image b/119800099 -->
-    <string-array translatable="false" name="config_apexBootImagePinnerServiceFiles">
+    <!-- List of files pinned by the Pinner Service with the JIT Zygote boot image b/119800099 -->
+    <string-array translatable="false" name="config_jitzygoteBootImagePinnerServiceFiles">
     </string-array>
 
     <!-- Number of days preloaded file cache should be preserved on a device before it can be
@@ -3493,11 +3532,10 @@
      mode -->
     <string-array translatable="false" name="config_priorityOnlyDndExemptPackages">
         <item>com.android.dialer</item>
+        <item>com.android.systemui</item>
+        <item>android</item>
     </string-array>
 
-    <!-- An array of packages which can listen for notifications on low ram devices. -->
-    <string-array translatable="false" name="config_allowedManagedServicesOnLowRamDevices" />
-
     <!-- The default value for transition animation scale found in developer settings.
          1.0 corresponds to 1x animator scale, 0 means that there will be no transition
          animations. Note that this is only a default and will be overridden by a
@@ -3792,6 +3830,10 @@
          or empty if the default should be used. -->
     <string translatable="false" name="config_deviceSpecificAudioService"></string>
 
+    <!-- Class name of the device specific implementation of DisplayAreaPolicy.Provider
+         or empty if the default should be used. -->
+    <string translatable="false" name="config_deviceSpecificDisplayAreaPolicyProvider"></string>
+
     <!-- Component name of media projection permission dialog -->
     <string name="config_mediaProjectionPermissionDialogComponent" translatable="false">com.android.systemui/com.android.systemui.media.MediaProjectionPermissionActivity</string>
 
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 22abedc..48049b4 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -768,6 +768,7 @@
     <dimen name="chooser_header_scroll_elevation">4dp</dimen>
     <dimen name="chooser_max_collapsed_height">288dp</dimen>
     <dimen name="chooser_direct_share_label_placeholder_max_width">72dp</dimen>
+    <dimen name="chooser_icon_size">42dp</dimen>
     <dimen name="resolver_icon_size">32dp</dimen>
     <dimen name="resolver_button_bar_spacing">8dp</dimen>
     <dimen name="resolver_badge_size">18dp</dimen>
@@ -775,6 +776,8 @@
     <dimen name="resolver_small_margin">18dp</dimen>
     <dimen name="resolver_edge_margin">24dp</dimen>
     <dimen name="resolver_elevation">1dp</dimen>
+    <dimen name="resolver_empty_state_height">212dp</dimen>
+    <dimen name="resolver_empty_state_height_with_tabs">268dp</dimen>
 
     <dimen name="chooser_action_button_icon_size">18dp</dimen>
 
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 4172044..7f7bbe9 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -3012,18 +3012,15 @@
       <public name="sdkVersion" />
       <!-- @hide @SystemApi -->
       <public name="minExtensionVersion" />
-      <public name="autofillInlineSuggestionChip" />
-      <public name="autofillInlineSuggestionTitle" />
-      <public name="autofillInlineSuggestionSubtitle" />
-      <!-- @hide @SystemApi -->
-      <public name="isAutofillInlineSuggestionTheme" />
+      <public name="allowNativeHeapPointerTagging" />
+      <public name="preserveLegacyExternalStorage" />
+      <public name="mimeGroup" />
     </public-group>
 
     <public-group type="drawable" first-id="0x010800b5">
     </public-group>
 
     <public-group type="style" first-id="0x010302e5">
-      <public name="Theme.AutofillInlineSuggestion" />
     </public-group>
 
     <public-group type="id" first-id="0x0102004a">
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index a54566c..d513e2b 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -414,6 +414,14 @@
          logging. [CHAR LIMIT=NONE]-->
     <string name="network_logging_notification_text">Your organization manages this device and may monitor network traffic. Tap for details.</string>
 
+    <!-- Content title for a notification. This notification indicates that the device owner has
+         changed the location settings. [CHAR LIMIT=NONE] -->
+    <string name="location_changed_notification_title">Location settings changed by your admin</string>
+    <!-- Content text for a notification. Tapping opens device location settings.
+         [CHAR LIMIT=NONE] -->
+    <string name="location_changed_notification_text">Tap to see your location settings.</string>
+
+
     <!-- Factory reset warning dialog strings--> <skip />
     <!-- Shows up in the dialog's title to warn about an impeding factory reset. [CHAR LIMIT=NONE] -->
     <string name="factory_reset_warning">Your device will be erased</string>
@@ -1148,6 +1156,8 @@
     <string name="permlab_vibrate">control vibration</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_vibrate">Allows the app to control the vibrator.</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_vibrator_state">Allows the app to access the vibrator state.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_callPhone">directly call phone numbers</string>
@@ -1473,6 +1483,8 @@
     <string name="fingerprint_error_no_fingerprints">No fingerprints enrolled.</string>
     <!-- Generic error message shown when the app requests fingerprint authentication on a device without a sensor -->
     <string name="fingerprint_error_hw_not_present">This device does not have a fingerprint sensor.</string>
+    <!-- Generic error message shown when fingerprint is not available due to a security vulnerability. [CHAR LIMIT=50] -->
+    <string name="fingerprint_error_security_update_required">Sensor temporarily disabled.</string>
 
     <!-- Template to be used to name enrolled fingerprints by default. -->
     <string name="fingerprint_name_template">Finger <xliff:g id="fingerId" example="1">%d</xliff:g></string>
@@ -1564,6 +1576,8 @@
     <string name="face_error_not_enrolled">You haven\u2019t set up face unlock.</string>
     <!-- Generic error message shown when the app requests face unlock on a device without a sensor. [CHAR LIMIT=61] -->
     <string name="face_error_hw_not_present">Face unlock is not supported on this device.</string>
+    <!-- Generic error message shown when face unlock is not available due to a security vulnerability. [CHAR LIMIT=50] -->
+    <string name="face_error_security_update_required">Sensor temporarily disabled.</string>
 
     <!-- Template to be used to name enrolled faces by default. [CHAR LIMIT=10] -->
     <string name="face_name_template">Face <xliff:g id="faceId" example="1">%d</xliff:g></string>
@@ -4362,10 +4376,7 @@
     service via the volume buttons shortcut for the first time. [CHAR LIMIT=none] -->
     <string name="accessibility_shortcut_toogle_warning">
         When the shortcut is on, pressing both volume buttons for 3 seconds will start an
-        accessibility feature.\n\n
-        Current accessibility feature:\n
-        <xliff:g id="service_name" example="TalkBack">%1$s</xliff:g>\n\n
-        You can change the feature in Settings > Accessibility.
+        accessibility feature.
     </string>
 
     <!-- Text in button that edit the accessibility shortcut menu, user can delete
@@ -5333,6 +5344,29 @@
         <xliff:g id="package_name" example="com.android.example">%1$s</xliff:g> has been put into the RESTRICTED bucket</string>
 
     <!-- ResolverActivity - profile tabs -->
+    <!-- Label for the perosnal tab of the share sheet and intent resolver [CHAR LIMIT=NONE] -->
     <string name="resolver_personal_tab">Personal</string>
+    <!-- Label for the work tab of the share sheet and intent resolver [CHAR LIMIT=NONE] -->
     <string name="resolver_work_tab">Work</string>
+    <!-- Label to indicate that the user cannot share with work apps [CHAR LIMIT=NONE] -->
+    <string name="resolver_cant_share_with_work_apps">Can\u2019t share with work apps</string>
+    <!-- Label to indicate that the user cannot share with personal apps [CHAR LIMIT=NONE] -->
+    <string name="resolver_cant_share_with_personal_apps">Can\u2019t share with personal apps</string>
+    <!-- Label to explain to the user that sharing between personal and work apps is not enabled by the IT admin [CHAR LIMIT=NONE] -->
+    <string name="resolver_cant_share_cross_profile_explanation">Your IT admin blocked sharing between personal and work apps</string>
+    <!-- Label to indicate that the user has to turn on work apps in order to access work data [CHAR LIMIT=NONE] -->
+    <string name="resolver_turn_on_work_apps">Turn on work apps</string>
+    <!-- Label to explain that the user has to turn on work apps in order to access work data [CHAR LIMIT=NONE] -->
+    <string name="resolver_turn_on_work_apps_explanation">Turn on work apps to access work apps &amp; contacts</string>
+    <!-- Label to indicate that no apps are resolved [CHAR LIMIT=NONE] -->
+    <string name="resolver_no_apps_available">No apps available</string>
+    <!-- Label to explain that no apps are resolved [CHAR LIMIT=NONE] -->
+    <string name="resolver_no_apps_available_explanation">We couldn\u2019t find any apps</string>
+    <!-- Button which switches on the disabled work profile [CHAR LIMIT=NONE] -->
+    <string name="resolver_switch_on_work">Switch on work</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=NONE] -->
+    <string name="permlab_accessCallAudio">Record or play audio in telephony calls</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=NONE] -->
+    <string name="permdesc_accessCallAudio">Allows this app, when assigned as default dialer application, to record or play audio in telephony calls.</string>
 </resources>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 751eca0..bcce1f0 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -1482,22 +1482,6 @@
         <item name="android:windowExitAnimation">@anim/slide_out_down</item>
     </style>
 
-    <!-- The style for the Autofill inline suggestion chip. -->
-    <!-- @hide -->
-    <style name="AutofillInlineSuggestionChip">
-        <item name="background">@drawable/autofill_dataset_picker_background</item>
-    </style>
-
-    <!-- @hide -->
-    <style name="AutofillInlineSuggestionTitle">
-        <item name="android:textAppearance">@style/TextAppearance</item>
-    </style>
-
-    <!-- @hide -->
-    <style name="AutofillInlineSuggestionSubtitle">
-        <item name="android:textAppearance">@style/TextAppearance.Small</item>
-    </style>
-
     <!-- The style for the container of media actions in a notification. -->
     <!-- @hide -->
     <style name="NotificationMediaActionContainer">
diff --git a/core/res/res/values/styles_device_defaults.xml b/core/res/res/values/styles_device_defaults.xml
index c63be7b..64768cf 100644
--- a/core/res/res/values/styles_device_defaults.xml
+++ b/core/res/res/values/styles_device_defaults.xml
@@ -285,7 +285,7 @@
         <item name="fontFamily">@string/config_bodyFontFamily</item>
     </style>
     <style name="TextAppearance.DeviceDefault.Notification" parent="TextAppearance.Material.Notification">
-        <item name="fontFamily">@string/config_headlineFontFamily</item>
+        <item name="fontFamily">@string/config_bodyFontFamily</item>
     </style>
     <style name="TextAppearance.DeviceDefault.Notification.Title" parent="TextAppearance.Material.Notification.Title">
         <item name="fontFamily">@string/config_headlineFontFamilyMedium</item>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 2453bb1..85c2a2a 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -286,6 +286,7 @@
   <java-symbol type="bool" name="config_duplicate_port_omadm_wappush" />
   <java-symbol type="bool" name="config_disableTransitionAnimation" />
   <java-symbol type="bool" name="config_enableAutoPowerModes" />
+  <java-symbol type="bool" name="config_useWebViewPacProcessor" />
   <java-symbol type="integer" name="config_autoPowerModeThresholdAngle" />
   <java-symbol type="integer" name="config_autoPowerModeAnyMotionSensor" />
   <java-symbol type="bool" name="config_autoPowerModePreferWristTilt" />
@@ -1213,6 +1214,8 @@
   <java-symbol type="string" name="device_ownership_relinquished" />
   <java-symbol type="string" name="network_logging_notification_title" />
   <java-symbol type="string" name="network_logging_notification_text" />
+  <java-symbol type="string" name="location_changed_notification_title" />
+  <java-symbol type="string" name="location_changed_notification_text" />
   <java-symbol type="string" name="personal_apps_suspended_notification_title" />
   <java-symbol type="string" name="personal_apps_suspended_notification_text" />
   <java-symbol type="string" name="factory_reset_warning" />
@@ -1558,6 +1561,7 @@
   <java-symbol type="layout" name="notification_material_media_seekbar" />
   <java-symbol type="layout" name="resolver_list_per_profile" />
   <java-symbol type="layout" name="chooser_list_per_profile" />
+  <java-symbol type="layout" name="resolver_empty_states" />
 
   <java-symbol type="anim" name="slide_in_child_bottom" />
   <java-symbol type="anim" name="slide_in_right" />
@@ -1978,6 +1982,14 @@
   <java-symbol type="integer" name="config_screenBrightnessForVrSettingDefault" />
   <java-symbol type="integer" name="config_screenBrightnessForVrSettingMaximum" />
   <java-symbol type="integer" name="config_screenBrightnessForVrSettingMinimum" />
+  <java-symbol type="dimen" name="config_screenBrightnessSettingForVrMinimumFloat" />
+  <java-symbol type="dimen" name="config_screenBrightnessSettingForVrMaximumFloat" />
+  <java-symbol type="dimen" name="config_screenBrightnessSettingForVrDefaultFloat" />
+  <java-symbol type="dimen" name="config_screenBrightnessSettingMinimumFloat" />
+  <java-symbol type="dimen" name="config_screenBrightnessSettingMaximumFloat" />
+  <java-symbol type="dimen" name="config_screenBrightnessSettingDefaultFloat" />
+  <java-symbol type="dimen" name="config_screenBrightnessDozeFloat" />
+  <java-symbol type="dimen" name="config_screenBrightnessDimFloat" />
   <java-symbol type="integer" name="config_screenBrightnessDark" />
   <java-symbol type="integer" name="config_screenBrightnessDim" />
   <java-symbol type="integer" name="config_screenBrightnessDoze" />
@@ -2446,6 +2458,7 @@
   <java-symbol type="string" name="fingerprint_authenticated" />
   <java-symbol type="string" name="fingerprint_error_no_fingerprints" />
   <java-symbol type="string" name="fingerprint_error_hw_not_present" />
+  <java-symbol type="string" name="fingerprint_error_security_update_required" />
 
   <!-- Fingerprint config -->
   <java-symbol type="integer" name="config_fingerprintMaxTemplatesPerUser"/>
@@ -2490,6 +2503,7 @@
   <java-symbol type="string" name="face_name_template" />
   <java-symbol type="string" name="face_authenticated_no_confirmation_required" />
   <java-symbol type="string" name="face_authenticated_confirmation_required" />
+  <java-symbol type="string" name="face_error_security_update_required" />
 
   <java-symbol type="array" name="config_biometric_sensors" />
 
@@ -2894,6 +2908,7 @@
   <java-symbol type="string" name="status_bar_microphone" />
   <java-symbol type="string" name="status_bar_camera" />
   <java-symbol type="string" name="status_bar_sensors_off" />
+  <java-symbol type="string" name="status_bar_screen_record" />
 
   <!-- Locale picker -->
   <java-symbol type="id" name="locale_search_menu" />
@@ -3037,7 +3052,7 @@
   <java-symbol type="bool" name="config_pinnerCameraApp" />
   <java-symbol type="bool" name="config_pinnerHomeApp" />
   <java-symbol type="bool" name="config_pinnerAssistantApp" />
-  <java-symbol type="array" name="config_apexBootImagePinnerServiceFiles" />
+  <java-symbol type="array" name="config_jitzygoteBootImagePinnerServiceFiles" />
 
   <java-symbol type="string" name="config_doubleTouchGestureEnableFile" />
 
@@ -3152,8 +3167,6 @@
   <java-symbol type="array" name="config_nonBlockableNotificationPackages" />
   <java-symbol type="array" name="config_priorityOnlyDndExemptPackages" />
 
-  <java-symbol type="array" name="config_allowedManagedServicesOnLowRamDevices" />
-
   <!-- Screen-size-dependent modes for picker dialogs. -->
   <java-symbol type="integer" name="time_picker_mode" />
   <java-symbol type="integer" name="date_picker_mode" />
@@ -3246,7 +3259,6 @@
   <java-symbol type="layout" name="autofill_dataset_picker"/>
   <java-symbol type="layout" name="autofill_dataset_picker_fullscreen"/>
   <java-symbol type="layout" name="autofill_dataset_picker_header_footer"/>
-  <java-symbol type="layout" name="autofill_inline_suggestion" />
   <java-symbol type="id" name="autofill" />
   <java-symbol type="id" name="autofill_dataset_footer"/>
   <java-symbol type="id" name="autofill_dataset_header"/>
@@ -3254,10 +3266,6 @@
   <java-symbol type="id" name="autofill_dataset_list"/>
   <java-symbol type="id" name="autofill_dataset_picker"/>
   <java-symbol type="id" name="autofill_dataset_title" />
-  <java-symbol type="id" name="autofill_inline_suggestion_end_icon" />
-  <java-symbol type="id" name="autofill_inline_suggestion_start_icon" />
-  <java-symbol type="id" name="autofill_inline_suggestion_subtitle" />
-  <java-symbol type="id" name="autofill_inline_suggestion_title" />
   <java-symbol type="id" name="autofill_save_custom_subtitle" />
   <java-symbol type="id" name="autofill_save_icon" />
   <java-symbol type="id" name="autofill_save_no" />
@@ -3755,6 +3763,7 @@
   <java-symbol type="dimen" name="resolver_small_margin"/>
   <java-symbol type="dimen" name="resolver_edge_margin"/>
   <java-symbol type="dimen" name="resolver_elevation"/>
+  <java-symbol type="dimen" name="chooser_icon_size"/>
 
   <!-- For DropBox -->
   <java-symbol type="integer" name="config_dropboxLowPriorityBroadcastRateLimitPeriod" />
@@ -3860,10 +3869,35 @@
   <java-symbol type="string" name="resolver_personal_tab" />
   <java-symbol type="string" name="resolver_work_tab" />
   <java-symbol type="id" name="stub" />
+  <java-symbol type="id" name="resolver_empty_state" />
+  <java-symbol type="id" name="resolver_empty_state_icon" />
+  <java-symbol type="id" name="resolver_empty_state_title" />
+  <java-symbol type="id" name="resolver_empty_state_subtitle" />
+  <java-symbol type="id" name="resolver_empty_state_button" />
+  <java-symbol type="id" name="resolver_tab_divider" />
+  <java-symbol type="string" name="resolver_cant_share_with_work_apps" />
+  <java-symbol type="string" name="resolver_cant_share_with_personal_apps" />
+  <java-symbol type="string" name="resolver_cant_share_cross_profile_explanation" />
+  <java-symbol type="string" name="resolver_turn_on_work_apps" />
+  <java-symbol type="string" name="resolver_turn_on_work_apps_explanation" />
+  <java-symbol type="string" name="resolver_no_apps_available" />
+  <java-symbol type="string" name="resolver_no_apps_available_explanation" />
+  <java-symbol type="string" name="resolver_no_apps_available_explanation" />
+  <java-symbol type="string" name="resolver_switch_on_work" />
+  <java-symbol type="drawable" name="ic_work_apps_off" />
+  <java-symbol type="drawable" name="ic_sharing_disabled" />
+  <java-symbol type="drawable" name="ic_no_apps" />
+  <java-symbol type="dimen" name="resolver_empty_state_height" />
+  <java-symbol type="dimen" name="resolver_empty_state_height_with_tabs" />
+  <java-symbol type="bool" name="sharesheet_show_content_preview" />
 
   <!-- Toast message for background started foreground service while-in-use permission restriction feature -->
   <java-symbol type="string" name="allow_while_in_use_permission_in_fgs" />
 
+  <java-symbol type="string" name="config_deviceSpecificDisplayAreaPolicyProvider" />
+
   <!-- Whether to expand the lock screen user switcher by default -->
   <java-symbol type="bool" name="config_expandLockScreenUserSwitcher" />
+
+  <java-symbol type="string" name="loading" />
 </resources>
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 5e6dd82..5d9cb48 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -892,12 +892,4 @@
         <item name="windowContentTransitions">false</item>
         <item name="windowActivityTransitions">false</item>
     </style>
-
-    <!-- Theme for the Autofill inline suggestion on IME -->
-    <style name="Theme.AutofillInlineSuggestion" parent="Theme.DeviceDefault">
-        <item name="isAutofillInlineSuggestionTheme">true</item>
-        <item name="autofillInlineSuggestionChip">@style/AutofillInlineSuggestionChip</item>
-        <item name="autofillInlineSuggestionTitle">@style/AutofillInlineSuggestionTitle</item>
-        <item name="autofillInlineSuggestionSubtitle">@style/AutofillInlineSuggestionSubtitle</item>
-    </style>
 </resources>
diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml
index cef21db..81ec278 100644
--- a/core/res/res/values/themes_device_defaults.xml
+++ b/core/res/res/values/themes_device_defaults.xml
@@ -1679,6 +1679,15 @@
         <item name="listPreferredItemPaddingStart">?attr/dialogPreferredPadding</item>
         <item name="listPreferredItemPaddingEnd">?attr/dialogPreferredPadding</item>
         <item name="navigationBarColor">@android:color/transparent</item>
+        <item name="tabWidgetStyle">@style/Widget.DeviceDefault.Resolver.TabWidget</item>
+    </style>
+
+    <style name="Widget.DeviceDefault.Resolver.TabWidget" parent="Widget.DeviceDefault.TabWidget">
+        <item name="tabLayout">@layout/tab_indicator_resolver</item>
+    </style>
+
+    <style name="Widget.Material.Resolver.Tab" parent="Widget.Material.Tab">
+        <item name="background">@drawable/tab_indicator_resolver</item>
     </style>
 
     <style name="Theme.DeviceDefault.Resolver" parent="Theme.DeviceDefault.ResolverCommon">
diff --git a/core/res/res/values/vendor_allowed_personal_apps_org_owned_device.xml b/core/res/res/values/vendor_allowed_personal_apps_org_owned_device.xml
new file mode 100644
index 0000000..0435c30
--- /dev/null
+++ b/core/res/res/values/vendor_allowed_personal_apps_org_owned_device.xml
@@ -0,0 +1,23 @@
+<?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>
+    <!-- A list of apps to be allowed in the personal profile of an organization-owned device. -->
+    <string-array translatable="false" name="vendor_allowed_personal_apps_org_owned_device">
+    </string-array>
+</resources>
diff --git a/core/res/res/xml/sms_short_codes.xml b/core/res/res/xml/sms_short_codes.xml
index 0d7ac08..70917e7 100644
--- a/core/res/res/xml/sms_short_codes.xml
+++ b/core/res/res/xml/sms_short_codes.xml
@@ -34,7 +34,7 @@
          http://smscoin.net/software/engine/WordPress/Paid+SMS-registration/ -->
 
     <!-- Arab Emirates -->
-    <shortcode country="ae" pattern="\\d{1,5}" free="3214|1017" />
+    <shortcode country="ae" pattern="\\d{1,5}" free="1017|1355|3214" />
 
     <!-- Albania: 5 digits, known short codes listed -->
     <shortcode country="al" pattern="\\d{5}" premium="15191|55[56]00" />
@@ -184,7 +184,7 @@
     <shortcode country="mk" pattern="\\d{1,6}" free="129005|122" />
 
     <!-- Mexico: 4-5 digits (not confirmed), known premium codes listed -->
-    <shortcode country="mx" pattern="\\d{4,5}" premium="53035|7766" free="46645|5050|26259|50025|50052|9963|76551" />
+    <shortcode country="mx" pattern="\\d{4,5}" premium="53035|7766" free="26259|46645|50025|50052|5050|76551|88778|9963" />
 
     <!-- Malaysia: 5 digits: http://www.skmm.gov.my/attachment/Consumer_Regulation/Mobile_Content_Services_FAQs.pdf -->
     <shortcode country="my" pattern="\\d{5}" premium="32298|33776" free="22099|28288" />
@@ -199,7 +199,7 @@
     <shortcode country="no" pattern="\\d{4,5}" premium="2201|222[67]" free="2171" />
 
     <!-- New Zealand: 3-4 digits, known premium codes listed -->
-    <shortcode country="nz" pattern="\\d{3,4}" premium="3903|8995|4679" free="1737|2141|3067|3068|3110|4006|4053|4061|4062|4202|4300|4334|4412|4575|5626|8006|8681" />
+    <shortcode country="nz" pattern="\\d{3,4}" premium="3903|8995|4679" free="1737|176|2141|3067|3068|3110|4006|4053|4061|4062|4202|4300|4334|4412|4575|5626|8006|8681" />
 
     <!-- Peru: 4-5 digits (not confirmed), known premium codes listed -->
     <shortcode country="pe" pattern="\\d{4,5}" free="9963" />
@@ -267,4 +267,7 @@
     <!-- Mayotte (French Territory): 1-5 digits (not confirmed) -->
     <shortcode country="yt" pattern="\\d{1,5}" free="38600,36300,36303,959" />
 
+    <!-- South Africa -->
+    <shortcode country="za" pattern="\d{1,5}" free="44136" />
+
 </shortcodes>
diff --git a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/DirectoryAssetsProviderTest.kt b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/DirectoryAssetsProviderTest.kt
index 9e94bdc..afe9d7f 100644
--- a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/DirectoryAssetsProviderTest.kt
+++ b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/DirectoryAssetsProviderTest.kt
@@ -44,7 +44,7 @@
         testDir = context.filesDir.resolve("DirectoryAssetsProvider_${testName.methodName}")
         assetsProvider = DirectoryAssetsProvider(testDir)
         loader = ResourcesLoader()
-        resources.addLoader(loader)
+        resources.addLoaders(loader)
     }
 
     @After
diff --git a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderAssetsTest.kt b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderAssetsTest.kt
index e3ba93d..da5092d 100644
--- a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderAssetsTest.kt
+++ b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderAssetsTest.kt
@@ -119,7 +119,7 @@
 
         val loader = ResourcesLoader()
         loader.providers = listOf(one, two)
-        resources.addLoader(loader)
+        resources.addLoaders(loader)
 
         assertOpenedAsset()
         inOrder(two.assetsProvider, one.assetsProvider).apply {
@@ -149,7 +149,7 @@
         val loader2 = ResourcesLoader()
         loader2.addProvider(two)
 
-        resources.loaders = listOf(loader1, loader2)
+        resources.addLoaders(loader1, loader2)
 
         assertOpenedAsset()
         inOrder(two.assetsProvider, one.assetsProvider).apply {
@@ -170,7 +170,7 @@
         val loader = ResourcesLoader()
         val one = ResourcesProvider.empty(assetsProvider1)
         val two = ResourcesProvider.empty(assetsProvider2)
-        resources.addLoader(loader)
+        resources.addLoaders(loader)
         loader.providers = listOf(one, two)
 
         assertOpenedAsset()
@@ -186,7 +186,7 @@
         val loader = ResourcesLoader()
         val one = ResourcesProvider.empty(assetsProvider1)
         val two = ResourcesProvider.empty(assetsProvider2)
-        resources.addLoader(loader)
+        resources.addLoaders(loader)
         loader.providers = listOf(one, two)
 
         assertOpenedAsset()
@@ -202,7 +202,7 @@
         val loader = ResourcesLoader()
         val one = ResourcesProvider.empty(assetsProvider1)
         val two = ResourcesProvider.empty(assetsProvider2)
-        resources.addLoader(loader)
+        resources.addLoaders(loader)
         loader.providers = listOf(one, two)
 
         assertOpenedAsset()
diff --git a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderValuesTest.kt b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderValuesTest.kt
index 0cc56d7..16eafcd 100644
--- a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderValuesTest.kt
+++ b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderValuesTest.kt
@@ -192,13 +192,13 @@
     }
 
     @Test
-    fun addMultipleProviders() {
+    fun addProvidersRepeatedly() {
         val originalValue = getValue()
         val testOne = openOne()
         val testTwo = openTwo()
         val loader = ResourcesLoader()
 
-        resources.addLoader(loader)
+        resources.addLoaders(loader)
         loader.addProvider(testOne)
         assertEquals(valueOne, getValue())
 
@@ -213,25 +213,25 @@
     }
 
     @Test
-    fun addMultipleLoaders() {
+    fun addLoadersRepeatedly() {
         val originalValue = getValue()
         val testOne = openOne()
         val testTwo = openTwo()
         val loader1 = ResourcesLoader()
         val loader2 = ResourcesLoader()
 
-        resources.addLoader(loader1)
+        resources.addLoaders(loader1)
         loader1.addProvider(testOne)
         assertEquals(valueOne, getValue())
 
-        resources.addLoader(loader2)
+        resources.addLoaders(loader2)
         loader2.addProvider(testTwo)
         assertEquals(valueTwo, getValue())
 
-        resources.removeLoader(loader1)
+        resources.removeLoaders(loader1)
         assertEquals(valueTwo, getValue())
 
-        resources.removeLoader(loader2)
+        resources.removeLoaders(loader2)
         assertEquals(originalValue, getValue())
     }
 
@@ -242,7 +242,7 @@
         val testTwo = openTwo()
         val loader = ResourcesLoader()
 
-        resources.addLoader(loader)
+        resources.addLoaders(loader)
         loader.providers = listOf(testOne, testTwo)
         assertEquals(valueTwo, getValue())
 
@@ -254,20 +254,20 @@
     }
 
     @Test
-    fun setMultipleLoaders() {
+    fun addMultipleLoaders() {
         val originalValue = getValue()
         val loader1 = ResourcesLoader()
         loader1.addProvider(openOne())
         val loader2 = ResourcesLoader()
         loader2.addProvider(openTwo())
 
-        resources.loaders = listOf(loader1, loader2)
+        resources.addLoaders(loader1, loader2)
         assertEquals(valueTwo, getValue())
 
-        resources.removeLoader(loader2)
+        resources.removeLoaders(loader2)
         assertEquals(valueOne, getValue())
 
-        resources.loaders = Collections.emptyList()
+        resources.removeLoaders(loader1)
         assertEquals(originalValue, getValue())
     }
 
@@ -291,7 +291,7 @@
         val testTwo = openTwo()
         val loader = ResourcesLoader()
 
-        resources.addLoader(loader)
+        resources.addLoaders(loader)
         loader.addProvider(testOne)
         loader.addProvider(testTwo)
         loader.addProvider(testOne)
@@ -308,9 +308,9 @@
         val loader2 = ResourcesLoader()
         loader2.addProvider(openTwo())
 
-        resources.addLoader(loader1)
-        resources.addLoader(loader2)
-        resources.addLoader(loader1)
+        resources.addLoaders(loader1)
+        resources.addLoaders(loader2)
+        resources.addLoaders(loader1)
 
         assertEquals(2, resources.loaders.size)
         assertEquals(resources.loaders[0], loader1)
@@ -323,7 +323,7 @@
         val testTwo = openTwo()
         val loader = ResourcesLoader()
 
-        resources.addLoader(loader)
+        resources.addLoaders(loader)
         loader.addProvider(testOne)
         loader.addProvider(testTwo)
 
@@ -341,12 +341,16 @@
         val loader2 = ResourcesLoader()
         loader2.addProvider(openTwo())
 
-        resources.loaders = listOf(loader1, loader2)
-        resources.removeLoader(loader1)
-        resources.removeLoader(loader1)
+        resources.addLoaders(loader1, loader2)
+        resources.removeLoaders(loader1)
+        resources.removeLoaders(loader1)
 
         assertEquals(1, resources.loaders.size)
         assertEquals(resources.loaders[0], loader2)
+
+        resources.removeLoaders(loader2, loader2)
+
+        assertEquals(0, resources.loaders.size)
     }
 
     @Test
@@ -355,7 +359,7 @@
         val testTwo = openTwo()
         val loader = ResourcesLoader()
 
-        resources.addLoader(loader)
+        resources.addLoaders(loader)
         loader.providers = listOf(testOne, testTwo)
         loader.providers = listOf(testOne, testTwo)
 
@@ -365,14 +369,14 @@
     }
 
     @Test
-    fun repeatedSetLoaders() {
+    fun repeatedAddMultipleLoaders() {
         val loader1 = ResourcesLoader()
         loader1.addProvider(openOne())
         val loader2 = ResourcesLoader()
         loader2.addProvider(openTwo())
 
-        resources.loaders = listOf(loader1, loader2)
-        resources.loaders = listOf(loader1, loader2)
+        resources.addLoaders(loader1, loader2)
+        resources.addLoaders(loader1, loader2)
 
         assertEquals(2, resources.loaders.size)
         assertEquals(resources.loaders[0], loader1)
@@ -386,7 +390,7 @@
         val testTwo = openTwo()
         val loader = ResourcesLoader()
 
-        resources.addLoader(loader)
+        resources.addLoaders(loader)
         loader.addProvider(testOne)
         loader.addProvider(testTwo)
         assertEquals(valueTwo, getValue())
@@ -414,20 +418,20 @@
         val loader2 = ResourcesLoader()
         loader2.addProvider(testTwo)
 
-        resources.addLoader(loader1)
-        resources.addLoader(loader2)
+        resources.addLoaders(loader1)
+        resources.addLoaders(loader2)
         assertEquals(valueTwo, getValue())
 
-        resources.removeLoader(loader1)
+        resources.removeLoaders(loader1)
         assertEquals(valueTwo, getValue())
 
-        resources.addLoader(loader1)
+        resources.addLoaders(loader1)
         assertEquals(valueOne, getValue())
 
-        resources.removeLoader(loader2)
+        resources.removeLoaders(loader2)
         assertEquals(valueOne, getValue())
 
-        resources.removeLoader(loader1)
+        resources.removeLoaders(loader1)
         assertEquals(originalValue, getValue())
     }
 
@@ -444,10 +448,11 @@
         val loader2 = ResourcesLoader()
         loader2.providers = listOf(testThree, testFour)
 
-        resources.loaders = listOf(loader1, loader2)
+        resources.addLoaders(loader1, loader2)
         assertEquals(valueFour, getValue())
 
-        resources.loaders = listOf(loader2, loader1)
+        resources.removeLoaders(loader1)
+        resources.addLoaders(loader1)
         assertEquals(valueTwo, getValue())
 
         loader1.removeProvider(testTwo)
@@ -471,7 +476,7 @@
         val loader2 = ResourcesLoader()
         loader2.addProvider(openTwo())
 
-        resources.loaders = listOf(loader1)
+        resources.addLoaders(loader1)
         assertEquals(valueOne, getValue())
 
         // The child context should include the loaders of the original context.
@@ -479,12 +484,12 @@
         assertEquals(valueOne, getValue(childContext))
 
         // Changing the loaders of the child context should not affect the original context.
-        childContext.resources.loaders = listOf(loader1, loader2)
+        childContext.resources.addLoaders(loader2)
         assertEquals(valueOne, getValue())
         assertEquals(valueTwo, getValue(childContext))
 
         // Changing the loaders of the original context should not affect the child context.
-        resources.removeLoader(loader1)
+        resources.removeLoaders(loader1)
         assertEquals(originalValue, getValue())
         assertEquals(valueTwo, getValue(childContext))
 
@@ -506,7 +511,7 @@
         val testTwo = openTwo()
         val loader = ResourcesLoader()
 
-        resources.addLoader(loader)
+        resources.addLoaders(loader)
         loader.addProvider(testOne)
         assertEquals(valueOne, getValue())
 
@@ -527,7 +532,7 @@
         assertEquals(originalValue, getValue())
         assertEquals(originalValue, getValue(childContext2))
 
-        childContext2.resources.addLoader(loader)
+        childContext2.resources.addLoaders(loader)
         assertEquals(originalValue, getValue())
         assertEquals(valueTwo, getValue(childContext))
         assertEquals(valueTwo, getValue(childContext2))
@@ -539,7 +544,7 @@
         loader.addProvider(openOne())
 
         val applicationContext = context.applicationContext
-        applicationContext.resources.addLoader(loader)
+        applicationContext.resources.addLoaders(loader)
         assertEquals(valueOne, getValue(applicationContext))
 
         val activity = mTestActivityRule.launchActivity(Intent())
@@ -556,7 +561,7 @@
         loader2.addProvider(openTwo())
 
         val applicationContext = context.applicationContext
-        applicationContext.resources.addLoader(loader1)
+        applicationContext.resources.addLoaders(loader1)
         assertEquals(valueOne, getValue(applicationContext))
 
         var token: IBinder? = null
@@ -569,7 +574,7 @@
             assertEquals(valueOne, getValue(applicationContext))
             assertEquals(valueOne, getValue(activity))
 
-            activity.resources.addLoader(loader2)
+            activity.resources.addLoaders(loader2)
             assertEquals(valueOne, getValue(applicationContext))
             assertEquals(valueTwo, getValue(activity))
 
@@ -598,10 +603,11 @@
         loader2.addProvider(provider1)
         loader2.addProvider(openTwo())
 
-        resources.loaders = listOf(loader1, loader2)
+        resources.addLoaders(loader1, loader2)
         assertEquals(valueTwo, getValue())
 
-        resources.loaders = listOf(loader2, loader1)
+        resources.removeLoaders(loader1)
+        resources.addLoaders(loader1)
         assertEquals(valueOne, getValue())
 
         assertEquals(2, resources.assets.apkAssets.count { apkAssets -> apkAssets.isForLoader })
diff --git a/core/tests/coretests/Android.bp b/core/tests/coretests/Android.bp
index 9f15faf..33fead6 100644
--- a/core/tests/coretests/Android.bp
+++ b/core/tests/coretests/Android.bp
@@ -3,6 +3,7 @@
 
     srcs: [
         "src/**/*.java",
+        "src/**/*.kt",
         "src/**/I*.aidl",
         "DisabledTestApp/src/**/*.java",
         "EnabledTestApp/src/**/*.java",
@@ -52,9 +53,14 @@
         "android.test.base",
         "android.test.mock",
         "framework-atb-backward-compatibility",
+        "framework-all",
+        "icing-java-proto-lite",
+        "ext",
+        "framework-res",
     ],
 
     platform_apis: true,
+    sdk_version: "core_platform",
     test_suites: ["device-tests"],
 
     certificate: "platform",
@@ -82,15 +88,8 @@
         ":FrameworksCoreTests_install_loc_internal",
         ":FrameworksCoreTests_install_loc_sdcard",
         ":FrameworksCoreTests_install_loc_unspecified",
-        ":FrameworksCoreTests_install_split_base",
-        ":FrameworksCoreTests_install_split_feature_a",
         ":FrameworksCoreTests_install_use_perm_good",
         ":FrameworksCoreTests_install_uses_feature",
-        ":FrameworksCoreTests_install_uses_sdk_0",
-        ":FrameworksCoreTests_install_uses_sdk_q0",
-        ":FrameworksCoreTests_install_uses_sdk_r",
-        ":FrameworksCoreTests_install_uses_sdk_r0",
-        ":FrameworksCoreTests_install_uses_sdk_r5",
         ":FrameworksCoreTests_install_verifier_bad",
         ":FrameworksCoreTests_install_verifier_good",
         ":FrameworksCoreTests_keyset_permdef_sa_unone",
@@ -108,6 +107,7 @@
         ":FrameworksCoreTests_keyset_splata_api",
         ":FrameworksCoreTests_keyset_splat_api",
         ":FrameworksCoreTests_locales",
+        ":FrameworksCoreTests_overlay_config",
         ":FrameworksCoreTests_version_1",
         ":FrameworksCoreTests_version_1_diff",
         ":FrameworksCoreTests_version_1_nosys",
diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml
index 59335a5..718ca46 100644
--- a/core/tests/coretests/AndroidManifest.xml
+++ b/core/tests/coretests/AndroidManifest.xml
@@ -1330,6 +1330,12 @@
             android:process=":FakeProvider">
         </provider>
 
+        <provider
+            android:name="android.content.SlowProvider"
+            android:authorities="android.content.SlowProvider"
+            android:process=":SlowProvider">
+        </provider>
+
         <!-- Application components used for os tests -->
 
         <service android:name="android.os.MessengerService"
diff --git a/core/tests/coretests/apks/install-split-base/Android.bp b/core/tests/coretests/apks/install-split-base/Android.bp
deleted file mode 100644
index ddf75b2..0000000
--- a/core/tests/coretests/apks/install-split-base/Android.bp
+++ /dev/null
@@ -1,6 +0,0 @@
-android_test_helper_app {
-    name: "FrameworksCoreTests_install_split_base",
-    defaults: ["FrameworksCoreTests_apks_defaults"],
-
-    srcs: ["**/*.java"],
-}
diff --git a/core/tests/coretests/apks/install-split-base/AndroidManifest.xml b/core/tests/coretests/apks/install-split-base/AndroidManifest.xml
deleted file mode 100644
index c2bfedd..0000000
--- a/core/tests/coretests/apks/install-split-base/AndroidManifest.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.frameworks.coretests.install_split"
-        android:isolatedSplits="true">
-
-    <application android:label="ClassloaderSplitApp">
-        <activity android:name=".BaseActivity">
-            <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/coretests/apks/install-split-feature-a/Android.bp b/core/tests/coretests/apks/install-split-feature-a/Android.bp
deleted file mode 100644
index 9ec9893..0000000
--- a/core/tests/coretests/apks/install-split-feature-a/Android.bp
+++ /dev/null
@@ -1,11 +0,0 @@
-android_test_helper_app {
-    name: "FrameworksCoreTests_install_split_feature_a",
-    defaults: ["FrameworksCoreTests_apks_defaults"],
-
-    srcs: ["**/*.java"],
-
-    aaptflags: [
-        "--custom-package com.google.android.dexapis.splitapp.feature_a",
-        "--package-id 0x80",
-    ],
-}
diff --git a/core/tests/coretests/apks/install-split-feature-a/AndroidManifest.xml b/core/tests/coretests/apks/install-split-feature-a/AndroidManifest.xml
deleted file mode 100644
index 3221c75..0000000
--- a/core/tests/coretests/apks/install-split-feature-a/AndroidManifest.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.frameworks.coretests.install_split"
-        featureSplit="feature_a">
-
-    <application>
-        <activity android:name=".feature_a.FeatureAActivity">
-            <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/coretests/apks/install_uses_sdk/Android.bp b/core/tests/coretests/apks/install_uses_sdk/Android.bp
deleted file mode 100644
index 92b09ed..0000000
--- a/core/tests/coretests/apks/install_uses_sdk/Android.bp
+++ /dev/null
@@ -1,39 +0,0 @@
-android_test_helper_app {
-    name: "FrameworksCoreTests_install_uses_sdk_r0",
-    defaults: ["FrameworksCoreTests_apks_defaults"],
-    manifest: "AndroidManifest-r0.xml",
-
-    srcs: ["**/*.java"],
-}
-
-android_test_helper_app {
-    name: "FrameworksCoreTests_install_uses_sdk_r5",
-    defaults: ["FrameworksCoreTests_apks_defaults"],
-    manifest: "AndroidManifest-r5.xml",
-
-    srcs: ["**/*.java"],
-}
-
-android_test_helper_app {
-    name: "FrameworksCoreTests_install_uses_sdk_q0",
-    defaults: ["FrameworksCoreTests_apks_defaults"],
-    manifest: "AndroidManifest-q0.xml",
-
-    srcs: ["**/*.java"],
-}
-
-android_test_helper_app {
-    name: "FrameworksCoreTests_install_uses_sdk_r",
-    defaults: ["FrameworksCoreTests_apks_defaults"],
-    manifest: "AndroidManifest-r.xml",
-
-    srcs: ["**/*.java"],
-}
-
-android_test_helper_app {
-    name: "FrameworksCoreTests_install_uses_sdk_0",
-    defaults: ["FrameworksCoreTests_apks_defaults"],
-    manifest: "AndroidManifest-0.xml",
-
-    srcs: ["**/*.java"],
-}
diff --git a/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-0.xml b/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-0.xml
deleted file mode 100644
index 634228b..0000000
--- a/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-0.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.frameworks.coretests.install_uses_sdk">
-
-    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
-        <!-- This is invalid, because there is no sdk version specified -->
-        <extension-sdk android:minExtensionVersion="5" />
-    </uses-sdk>
-
-    <application>
-    </application>
-</manifest>
diff --git a/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-q0.xml b/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-q0.xml
deleted file mode 100644
index 8994966..0000000
--- a/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-q0.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.frameworks.coretests.install_uses_sdk">
-
-    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
-        <!-- This fails because 29 doesn't have an extension sdk -->
-        <extension-sdk android:sdkVersion="29" android:minExtensionVersion="0" />
-    </uses-sdk>
-
-    <application>
-    </application>
-</manifest>
diff --git a/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-r.xml b/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-r.xml
deleted file mode 100644
index 0d0d8b9..0000000
--- a/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-r.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.frameworks.coretests.install_uses_sdk">
-
-    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
-        <!-- This is invalid, because there is no minimum extension version specified -->
-        <extension-sdk android:sdkVersion="10000" />
-    </uses-sdk>
-
-    <application>
-    </application>
-</manifest>
diff --git a/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-r0.xml b/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-r0.xml
deleted file mode 100644
index a987afa..0000000
--- a/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-r0.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.frameworks.coretests.install_uses_sdk">
-
-    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
-        <extension-sdk android:sdkVersion="10000" android:minExtensionVersion="0" />
-    </uses-sdk>
-
-    <application>
-    </application>
-</manifest>
diff --git a/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-r5.xml b/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-r5.xml
deleted file mode 100644
index 9860096..0000000
--- a/core/tests/coretests/apks/install_uses_sdk/AndroidManifest-r5.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.frameworks.coretests.install_uses_sdk">
-
-    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
-        <!-- This will fail to install, because minExtensionVersion is not met -->
-        <extension-sdk android:sdkVersion="10000" android:minExtensionVersion="5" />
-    </uses-sdk>
-
-    <application>
-    </application>
-</manifest>
diff --git a/core/tests/coretests/apks/overlay_config/Android.bp b/core/tests/coretests/apks/overlay_config/Android.bp
new file mode 100644
index 0000000..9573557
--- /dev/null
+++ b/core/tests/coretests/apks/overlay_config/Android.bp
@@ -0,0 +1,4 @@
+android_test_helper_app {
+    name: "FrameworksCoreTests_overlay_config",
+    defaults: ["FrameworksCoreTests_apks_defaults"],
+}
diff --git a/core/tests/coretests/apks/overlay_config/AndroidManifest.xml b/core/tests/coretests/apks/overlay_config/AndroidManifest.xml
new file mode 100644
index 0000000..b15338e
--- /dev/null
+++ b/core/tests/coretests/apks/overlay_config/AndroidManifest.xml
@@ -0,0 +1,26 @@
+<?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.
+  -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.frameworks.coretests.overlay_config">
+
+    <application android:hasCode="false" />
+
+    <uses-sdk android:targetSdkVersion="21"/>
+
+    <overlay android:targetPackage="android"
+             android:targetName="TestResources" />
+</manifest>
diff --git a/core/tests/coretests/res/values/strings.xml b/core/tests/coretests/res/values/strings.xml
index f630188..21613a8 100644
--- a/core/tests/coretests/res/values/strings.xml
+++ b/core/tests/coretests/res/values/strings.xml
@@ -148,4 +148,7 @@
 
     <!-- Summary of the accessibility shortcut [CHAR LIMIT=NONE] -->
     <string name="accessibility_shortcut_summary">Accessibility shortcut summary</string>
+
+    <!-- Html description of the accessibility shortcut [CHAR LIMIT=NONE] -->
+    <string name="accessibility_shortcut_html_description">Accessibility shortcut html description</string>
 </resources>
diff --git a/core/tests/coretests/res/xml/accessibility_shortcut_test_activity.xml b/core/tests/coretests/res/xml/accessibility_shortcut_test_activity.xml
index 60e2998..a597b71 100644
--- a/core/tests/coretests/res/xml/accessibility_shortcut_test_activity.xml
+++ b/core/tests/coretests/res/xml/accessibility_shortcut_test_activity.xml
@@ -19,4 +19,6 @@
 <accessibility-shortcut-target xmlns:android="http://schemas.android.com/apk/res/android"
                         android:description="@string/accessibility_shortcut_description"
                         android:summary="@string/accessibility_shortcut_summary"
+                        android:animatedImageDrawable="@drawable/bitmap_drawable"
+                        android:htmlDescription="@string/accessibility_shortcut_html_description"
 />
\ No newline at end of file
diff --git a/core/tests/coretests/src/android/accessibilityservice/AccessibilityShortcutInfoTest.java b/core/tests/coretests/src/android/accessibilityservice/AccessibilityShortcutInfoTest.java
index ae6d8df..9f0af60 100644
--- a/core/tests/coretests/src/android/accessibilityservice/AccessibilityShortcutInfoTest.java
+++ b/core/tests/coretests/src/android/accessibilityservice/AccessibilityShortcutInfoTest.java
@@ -84,6 +84,28 @@
     }
 
     @Test
+    public void testAnimatedImageRes() {
+        assertThat("Animated image resource id is not correct",
+                mShortcutInfo.getAnimatedImageRes(), is(R.drawable.bitmap_drawable));
+    }
+
+    @Test
+    public void testLoadAnimatedImage() {
+        assertNotNull("Can't find animated image",
+                mShortcutInfo.loadAnimatedImage(mPackageManager));
+    }
+
+    @Test
+    public void testHtmlDescription() {
+        final String htmlDescription = mTargetContext.getResources()
+                .getString(R.string.accessibility_shortcut_html_description);
+
+        assertNotNull("Can't find html description string", htmlDescription);
+        assertThat("Html description is not correct",
+                mShortcutInfo.loadHtmlDescription(mPackageManager), is(htmlDescription));
+    }
+
+    @Test
     public void testEquals() {
         assertTrue(mShortcutInfo.equals(mShortcutInfo));
         assertFalse(mShortcutInfo.equals(null));
diff --git a/core/tests/coretests/src/android/app/NotificationHistoryTest.java b/core/tests/coretests/src/android/app/NotificationHistoryTest.java
index 0a21875..0443d3a 100644
--- a/core/tests/coretests/src/android/app/NotificationHistoryTest.java
+++ b/core/tests/coretests/src/android/app/NotificationHistoryTest.java
@@ -21,6 +21,7 @@
 import android.app.NotificationHistory.HistoricalNotification;
 import android.graphics.drawable.Icon;
 import android.os.Parcel;
+import android.util.Slog;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
@@ -48,6 +49,10 @@
         String expectedText = "text" + index;
         Icon expectedIcon = Icon.createWithResource(InstrumentationRegistry.getContext(),
                 index);
+        String conversationId = null;
+        if (index % 2 == 0) {
+            conversationId = "convo" + index;
+        }
 
         return new HistoricalNotification.Builder()
                 .setPackage(packageName)
@@ -59,6 +64,7 @@
                 .setTitle(expectedTitle)
                 .setText(expectedText)
                 .setIcon(expectedIcon)
+                .setConversationId(conversationId)
                 .build();
     }
 
@@ -74,6 +80,7 @@
         String expectedText = "text";
         Icon expectedIcon = Icon.createWithResource(InstrumentationRegistry.getContext(),
                 android.R.drawable.btn_star);
+        String expectedConversationId = "convo";
 
         HistoricalNotification n = new HistoricalNotification.Builder()
                 .setPackage(expectedPackage)
@@ -85,6 +92,7 @@
                 .setTitle(expectedTitle)
                 .setText(expectedText)
                 .setIcon(expectedIcon)
+                .setConversationId(expectedConversationId)
                 .build();
 
         assertThat(n.getPackage()).isEqualTo(expectedPackage);
@@ -96,6 +104,7 @@
         assertThat(n.getTitle()).isEqualTo(expectedTitle);
         assertThat(n.getText()).isEqualTo(expectedText);
         assertThat(expectedIcon.sameAs(n.getIcon())).isTrue();
+        assertThat(n.getConversationId()).isEqualTo(expectedConversationId);
     }
 
     @Test
@@ -153,6 +162,9 @@
             expectedStrings.add(n.getPackage());
             expectedStrings.add(n.getChannelName());
             expectedStrings.add(n.getChannelId());
+            if (n.getConversationId() != null) {
+                expectedStrings.add(n.getConversationId());
+            }
             history.addNotificationToWrite(n);
         }
 
@@ -180,6 +192,9 @@
             expectedStrings.add(n.getPackage());
             expectedStrings.add(n.getChannelName());
             expectedStrings.add(n.getChannelId());
+            if (n.getConversationId() != null) {
+                expectedStrings.add(n.getConversationId());
+            }
             history.addNotificationToWrite(n);
         }
 
@@ -212,6 +227,9 @@
                 postRemoveExpectedStrings.add(n.getPackage());
                 postRemoveExpectedStrings.add(n.getChannelName());
                 postRemoveExpectedStrings.add(n.getChannelId());
+                if (n.getConversationId() != null) {
+                    postRemoveExpectedStrings.add(n.getConversationId());
+                }
                 postRemoveExpectedEntries.add(n);
             }
 
@@ -221,14 +239,89 @@
         history.poolStringsFromNotifications();
 
         assertThat(history.getNotificationsToWrite().size()).isEqualTo(10);
-        // 2 package names and 10 * 2 unique channel names and ids
-        assertThat(history.getPooledStringsToWrite().length).isEqualTo(22);
+        // 2 package names and 10 * 2 unique channel names and ids and 5 conversation ids
+        assertThat(history.getPooledStringsToWrite().length).isEqualTo(27);
 
         history.removeNotificationsFromWrite("pkgOdd");
 
 
-        // 1 package names and 5 * 2 unique channel names and ids
-        assertThat(history.getPooledStringsToWrite().length).isEqualTo(11);
+        // 1 package names and 5 * 2 unique channel names and ids and 5 conversation ids
+        assertThat(history.getPooledStringsToWrite().length).isEqualTo(16);
+        assertThat(history.getNotificationsToWrite())
+                .containsExactlyElementsIn(postRemoveExpectedEntries);
+    }
+
+    @Test
+    public void testRemoveNotificationFromWrite() {
+        NotificationHistory history = new NotificationHistory();
+
+        List<HistoricalNotification> postRemoveExpectedEntries = new ArrayList<>();
+        List<String> postRemoveExpectedStrings = new ArrayList<>();
+        for (int i = 1; i <= 10; i++) {
+            HistoricalNotification n = getHistoricalNotification("pkg", i);
+
+            if (987654323 != n.getPostedTimeMs()) {
+                postRemoveExpectedStrings.add(n.getPackage());
+                postRemoveExpectedStrings.add(n.getChannelName());
+                postRemoveExpectedStrings.add(n.getChannelId());
+                if (n.getConversationId() != null) {
+                    postRemoveExpectedStrings.add(n.getConversationId());
+                }
+                postRemoveExpectedEntries.add(n);
+            }
+
+            history.addNotificationToWrite(n);
+        }
+
+        history.poolStringsFromNotifications();
+
+        assertThat(history.getNotificationsToWrite().size()).isEqualTo(10);
+        // 1 package name and 20 unique channel names and ids and 5 conversation ids
+        assertThat(history.getPooledStringsToWrite().length).isEqualTo(26);
+
+        history.removeNotificationFromWrite("pkg", 987654323);
+
+
+        // 1 package names and 9 * 2 unique channel names and ids and 4 conversation ids
+        assertThat(history.getPooledStringsToWrite().length).isEqualTo(23);
+        assertThat(history.getNotificationsToWrite())
+                .containsExactlyElementsIn(postRemoveExpectedEntries);
+    }
+
+    @Test
+    public void testRemoveConversationNotificationFromWrite() {
+        NotificationHistory history = new NotificationHistory();
+
+        List<HistoricalNotification> postRemoveExpectedEntries = new ArrayList<>();
+        List<String> postRemoveExpectedStrings = new ArrayList<>();
+        for (int i = 1; i <= 10; i++) {
+            HistoricalNotification n = getHistoricalNotification("pkg", i);
+
+            if (i != 2) {
+                postRemoveExpectedStrings.add(n.getPackage());
+                postRemoveExpectedStrings.add(n.getChannelName());
+                postRemoveExpectedStrings.add(n.getChannelId());
+                if (n.getConversationId() != null) {
+                    postRemoveExpectedStrings.add(n.getConversationId());
+                }
+                postRemoveExpectedEntries.add(n);
+            }
+
+            history.addNotificationToWrite(n);
+        }
+        // add second notification with the same conversation id that will be removed
+        history.addNotificationToWrite(getHistoricalNotification("pkg", 2));
+
+        history.poolStringsFromNotifications();
+
+        assertThat(history.getNotificationsToWrite().size()).isEqualTo(11);
+        // 1 package name and 20 unique channel names and ids and 5 conversation ids
+        assertThat(history.getPooledStringsToWrite().length).isEqualTo(26);
+
+        history.removeConversationFromWrite("pkg", "convo2");
+
+        // 1 package names and 9 * 2 unique channel names and ids and 4 conversation ids
+        assertThat(history.getPooledStringsToWrite().length).isEqualTo(23);
         assertThat(history.getNotificationsToWrite())
                 .containsExactlyElementsIn(postRemoveExpectedEntries);
     }
diff --git a/core/tests/coretests/src/android/content/ContentResolverTest.java b/core/tests/coretests/src/android/content/ContentResolverTest.java
index 9dcce1e..78c4420 100644
--- a/core/tests/coretests/src/android/content/ContentResolverTest.java
+++ b/core/tests/coretests/src/android/content/ContentResolverTest.java
@@ -16,6 +16,8 @@
 
 package android.content;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
@@ -31,6 +33,7 @@
 import android.net.Uri;
 import android.os.MemoryFile;
 import android.os.ParcelFileDescriptor;
+import android.os.SystemClock;
 import android.util.Size;
 
 import androidx.test.InstrumentationRegistry;
@@ -209,4 +212,26 @@
         String type = mResolver.getType(Uri.parse("content://android.content.FakeProviderRemote"));
         assertEquals("fake/remote", type);
     }
+
+    @Test
+    public void testGetType_slowProvider() {
+        // This provider is running in a different process and is intentionally slow to start.
+        // We are trying to confirm that it does not cause an ANR
+        long start = SystemClock.uptimeMillis();
+        String type = mResolver.getType(Uri.parse("content://android.content.SlowProvider"));
+        long end = SystemClock.uptimeMillis();
+        assertEquals("slow", type);
+        assertThat(end).isLessThan(start + 5000);
+    }
+
+    @Test
+    public void testGetType_unknownProvider() {
+        // This provider does not exist.
+        // We are trying to confirm that getType returns null and does not cause an ANR
+        long start = SystemClock.uptimeMillis();
+        String type = mResolver.getType(Uri.parse("content://android.content.NonexistentProvider"));
+        long end = SystemClock.uptimeMillis();
+        assertThat(type).isNull();
+        assertThat(end).isLessThan(start + 5000);
+    }
 }
diff --git a/core/tests/coretests/src/android/content/SlowProvider.java b/core/tests/coretests/src/android/content/SlowProvider.java
new file mode 100644
index 0000000..aba32e8
--- /dev/null
+++ b/core/tests/coretests/src/android/content/SlowProvider.java
@@ -0,0 +1,65 @@
+/*
+ * 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.content;
+
+import android.database.Cursor;
+import android.net.Uri;
+
+/**
+ * A dummy content provider for tests.  This provider runs in a different process from the test and
+ * is intentionally slow.
+ */
+public class SlowProvider extends ContentProvider {
+
+    private static final int ON_CREATE_LATENCY_MILLIS = 3000;
+
+    @Override
+    public boolean onCreate() {
+        try {
+            Thread.sleep(ON_CREATE_LATENCY_MILLIS);
+        } catch (InterruptedException e) {
+            // Ignore
+        }
+        return true;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        return null;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        return "slow";
+    }
+
+    @Override
+    public Uri insert(Uri uri, ContentValues values) {
+        return null;
+    }
+
+    @Override
+    public int delete(Uri uri, String selection, String[] selectionArgs) {
+        return 0;
+    }
+
+    @Override
+    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+        return 0;
+    }
+}
diff --git a/core/tests/coretests/src/android/content/integrity/AtomicFormulaTest.java b/core/tests/coretests/src/android/content/integrity/AtomicFormulaTest.java
index 7733559..ea69176 100644
--- a/core/tests/coretests/src/android/content/integrity/AtomicFormulaTest.java
+++ b/core/tests/coretests/src/android/content/integrity/AtomicFormulaTest.java
@@ -29,6 +29,9 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.util.Arrays;
+import java.util.Collections;
+
 @RunWith(JUnit4.class)
 public class AtomicFormulaTest {
 
@@ -97,7 +100,7 @@
 
         assertThat(stringAtomicFormula.getKey()).isEqualTo(AtomicFormula.APP_CERTIFICATE);
         assertThat(stringAtomicFormula.getValue()).matches(appCert);
-        assertThat(stringAtomicFormula.getIsHashedValue()).isFalse();
+        assertThat(stringAtomicFormula.getIsHashedValue()).isTrue();
     }
 
     @Test
@@ -110,7 +113,7 @@
         assertThat(stringAtomicFormula.getKey()).isEqualTo(
                 AtomicFormula.INSTALLER_CERTIFICATE);
         assertThat(stringAtomicFormula.getValue()).matches(installerCert);
-        assertThat(stringAtomicFormula.getIsHashedValue()).isFalse();
+        assertThat(stringAtomicFormula.getIsHashedValue()).isTrue();
     }
 
     @Test
@@ -230,7 +233,7 @@
     }
 
     @Test
-    public void testFormulaMatches_string_true() {
+    public void testFormulaMatches_string_packageNameFormula_true() {
         StringAtomicFormula stringAtomicFormula =
                 new StringAtomicFormula(
                         AtomicFormula.PACKAGE_NAME, "com.test.app", /* isHashedValue= */
@@ -242,7 +245,7 @@
     }
 
     @Test
-    public void testFormulaMatches_string_false() {
+    public void testFormulaMatches_string_packageNameFormula_false() {
         StringAtomicFormula stringAtomicFormula =
                 new StringAtomicFormula(
                         AtomicFormula.PACKAGE_NAME, "com.test.app", /* isHashedValue= */
@@ -253,6 +256,63 @@
         assertThat(stringAtomicFormula.matches(appInstallMetadata)).isFalse();
     }
 
+    @Test
+    public void testFormulaMatches_string_multipleAppCertificates_true() {
+        StringAtomicFormula stringAtomicFormula =
+                new StringAtomicFormula(
+                        AtomicFormula.APP_CERTIFICATE, "cert", /* isHashedValue= */ true);
+        AppInstallMetadata appInstallMetadata =
+                getAppInstallMetadataBuilder()
+                        .setPackageName("com.test.app")
+                        .setAppCertificates(Arrays.asList("test-cert", "cert"))
+                        .build();
+
+        assertThat(stringAtomicFormula.matches(appInstallMetadata)).isTrue();
+    }
+
+    @Test
+    public void testFormulaMatches_string_multipleAppCertificates_false() {
+        StringAtomicFormula stringAtomicFormula =
+                new StringAtomicFormula(
+                        AtomicFormula.APP_CERTIFICATE, "cert", /* isHashedValue= */ true);
+        AppInstallMetadata appInstallMetadata =
+                getAppInstallMetadataBuilder()
+                        .setPackageName("com.test.app")
+                        .setAppCertificates(Arrays.asList("test-cert", "another-cert"))
+                        .build();
+
+        assertThat(stringAtomicFormula.matches(appInstallMetadata)).isFalse();
+    }
+
+    @Test
+    public void testFormulaMatches_string_multipleInstallerCertificates_true() {
+        StringAtomicFormula stringAtomicFormula =
+                new StringAtomicFormula(
+                        AtomicFormula.INSTALLER_CERTIFICATE, "cert", /* isHashedValue= */ true);
+        AppInstallMetadata appInstallMetadata =
+                getAppInstallMetadataBuilder()
+                        .setPackageName("com.test.app")
+                        .setAppCertificates(Collections.singletonList("abc"))
+                        .setInstallerCertificates(Arrays.asList("test-cert", "cert"))
+                        .build();
+
+        assertThat(stringAtomicFormula.matches(appInstallMetadata)).isTrue();
+    }
+
+    @Test
+    public void testFormulaMatches_string_multipleInstallerCertificates_false() {
+        StringAtomicFormula stringAtomicFormula =
+                new StringAtomicFormula(
+                        AtomicFormula.INSTALLER_CERTIFICATE, "cert", /* isHashedValue= */ true);
+        AppInstallMetadata appInstallMetadata =
+                getAppInstallMetadataBuilder()
+                        .setPackageName("com.test.app")
+                        .setAppCertificates(Collections.singletonList("abc"))
+                        .setInstallerCertificates(Arrays.asList("test-cert", "another-cert"))
+                        .build();
+
+        assertThat(stringAtomicFormula.matches(appInstallMetadata)).isFalse();
+    }
 
     @Test
     public void testIsAppCertificateFormula_string_true() {
@@ -430,8 +490,8 @@
     private AppInstallMetadata.Builder getAppInstallMetadataBuilder() {
         return new AppInstallMetadata.Builder()
                 .setPackageName("abc")
-                .setAppCertificate("abc")
-                .setInstallerCertificate("abc")
+                .setAppCertificates(Collections.singletonList("abc"))
+                .setInstallerCertificates(Collections.singletonList("abc"))
                 .setInstallerName("abc")
                 .setVersionCode(-1)
                 .setIsPreInstalled(true);
diff --git a/core/tests/coretests/src/android/content/integrity/CompoundFormulaTest.java b/core/tests/coretests/src/android/content/integrity/CompoundFormulaTest.java
index f47dfdd..abc5fed 100644
--- a/core/tests/coretests/src/android/content/integrity/CompoundFormulaTest.java
+++ b/core/tests/coretests/src/android/content/integrity/CompoundFormulaTest.java
@@ -286,8 +286,8 @@
     private AppInstallMetadata.Builder getAppInstallMetadataBuilder() {
         return new AppInstallMetadata.Builder()
                 .setPackageName("abc")
-                .setAppCertificate("abc")
-                .setInstallerCertificate("abc")
+                .setAppCertificates(Collections.singletonList("abc"))
+                .setInstallerCertificates(Collections.singletonList("abc"))
                 .setInstallerName("abc")
                 .setVersionCode(-1)
                 .setIsPreInstalled(true);
diff --git a/core/tests/coretests/src/android/content/integrity/InstallerAllowedByManifestFormulaTest.java b/core/tests/coretests/src/android/content/integrity/InstallerAllowedByManifestFormulaTest.java
new file mode 100644
index 0000000..693d4ca
--- /dev/null
+++ b/core/tests/coretests/src/android/content/integrity/InstallerAllowedByManifestFormulaTest.java
@@ -0,0 +1,123 @@
+/*
+ * 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.content.integrity;
+
+import static android.content.integrity.InstallerAllowedByManifestFormula.INSTALLER_CERTIFICATE_NOT_EVALUATED;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.collect.ImmutableMap;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+@RunWith(JUnit4.class)
+public class InstallerAllowedByManifestFormulaTest {
+
+    private static final InstallerAllowedByManifestFormula
+            FORMULA = new InstallerAllowedByManifestFormula();
+
+    @Test
+    public void testFormulaMatches_installerAndCertBothInManifest() {
+        AppInstallMetadata appInstallMetadata = getAppInstallMetadataBuilder()
+                .setInstallerName("installer1")
+                .setInstallerCertificates(Arrays.asList("installer_cert1", "random_cert"))
+                .setAllowedInstallersAndCert(ImmutableMap.of(
+                        "installer1", "installer_cert1",
+                        "installer2", "installer_cert2"
+                )).build();
+
+        assertThat(FORMULA.matches(appInstallMetadata)).isTrue();
+    }
+
+    @Test
+    public void testFormulaMatches_installerAndCertDoesNotMatchInManifest() {
+        AppInstallMetadata appInstallMetadata = getAppInstallMetadataBuilder()
+                .setInstallerName("installer1")
+                .setInstallerCertificates(Arrays.asList("installer_cert1", "random_cert"))
+                .setAllowedInstallersAndCert(ImmutableMap.of(
+                        "installer1", "installer_cert2",
+                        "installer2", "installer_cert1"
+                )).build();
+
+        assertThat(FORMULA.matches(appInstallMetadata)).isFalse();
+    }
+
+    @Test
+    public void testFormulaMatches_installerNotInManifest() {
+        AppInstallMetadata appInstallMetadata = getAppInstallMetadataBuilder()
+                .setInstallerName("installer3")
+                .setInstallerCertificates(Arrays.asList("installer_cert1", "random_cert"))
+                .setAllowedInstallersAndCert(ImmutableMap.of(
+                        "installer1", "installer_cert2",
+                        "installer2", "installer_cert1"
+                )).build();
+
+        assertThat(FORMULA.matches(appInstallMetadata)).isFalse();
+    }
+
+    @Test
+    public void testFormulaMatches_certificateDoesNotMatchManifest() {
+        AppInstallMetadata appInstallMetadata = getAppInstallMetadataBuilder()
+                .setInstallerName("installer1")
+                .setInstallerCertificates(Arrays.asList("installer_cert3", "random_cert"))
+                .setAllowedInstallersAndCert(ImmutableMap.of(
+                        "installer1", "installer_cert2",
+                        "installer2", "installer_cert1"
+                )).build();
+
+        assertThat(FORMULA.matches(appInstallMetadata)).isFalse();
+    }
+
+    @Test
+    public void testFormulaMatches_emptyManifest() {
+        AppInstallMetadata appInstallMetadata = getAppInstallMetadataBuilder()
+                .setInstallerName("installer1")
+                .setInstallerCertificates(Arrays.asList("installer_cert3", "random_cert"))
+                .setAllowedInstallersAndCert(ImmutableMap.of()).build();
+
+        assertThat(FORMULA.matches(appInstallMetadata)).isTrue();
+    }
+
+    @Test
+    public void testFormulaMatches_certificateNotSpecifiedInManifest() {
+        AppInstallMetadata appInstallMetadata = getAppInstallMetadataBuilder()
+                .setInstallerName("installer1")
+                .setInstallerCertificates(Arrays.asList("installer_cert3", "random_cert"))
+                .setAllowedInstallersAndCert(ImmutableMap.of(
+                        "installer1", INSTALLER_CERTIFICATE_NOT_EVALUATED,
+                        "installer2", "installer_cert1"
+                )).build();
+
+        assertThat(FORMULA.matches(appInstallMetadata)).isTrue();
+    }
+
+    /** Returns a builder with all fields filled with some dummy data. */
+    private AppInstallMetadata.Builder getAppInstallMetadataBuilder() {
+        return new AppInstallMetadata.Builder()
+                .setPackageName("abc")
+                .setAppCertificates(Collections.emptyList())
+                .setInstallerCertificates(Collections.emptyList())
+                .setInstallerName("abc")
+                .setVersionCode(-1)
+                .setIsPreInstalled(true);
+    }
+}
diff --git a/core/tests/coretests/src/android/content/integrity/IntegrityFormulaTest.java b/core/tests/coretests/src/android/content/integrity/IntegrityFormulaTest.java
index dc03167..7e4c138 100644
--- a/core/tests/coretests/src/android/content/integrity/IntegrityFormulaTest.java
+++ b/core/tests/coretests/src/android/content/integrity/IntegrityFormulaTest.java
@@ -20,8 +20,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.testng.Assert.assertThrows;
-
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -32,8 +30,7 @@
     @Test
     public void createEqualsFormula_packageName() {
         String packageName = "com.test.app";
-        IntegrityFormula formula =
-                IntegrityFormula.PACKAGE_NAME.equalTo(packageName);
+        IntegrityFormula formula = IntegrityFormula.Application.packageNameEquals(packageName);
 
         AtomicFormula.StringAtomicFormula stringAtomicFormula =
                 (AtomicFormula.StringAtomicFormula) formula;
@@ -46,22 +43,20 @@
     @Test
     public void createEqualsFormula_appCertificate() {
         String appCertificate = "com.test.app";
-        IntegrityFormula formula =
-                IntegrityFormula.APP_CERTIFICATE.equalTo(appCertificate);
+        IntegrityFormula formula = IntegrityFormula.Application.certificatesContain(appCertificate);
 
         AtomicFormula.StringAtomicFormula stringAtomicFormula =
                 (AtomicFormula.StringAtomicFormula) formula;
 
         assertThat(stringAtomicFormula.getKey()).isEqualTo(AtomicFormula.APP_CERTIFICATE);
         assertThat(stringAtomicFormula.getValue()).matches(appCertificate);
-        assertThat(stringAtomicFormula.getIsHashedValue()).isFalse();
+        assertThat(stringAtomicFormula.getIsHashedValue()).isTrue();
     }
 
     @Test
     public void createEqualsFormula_installerName() {
         String installerName = "com.test.app";
-        IntegrityFormula formula =
-                IntegrityFormula.INSTALLER_NAME.equalTo(installerName);
+        IntegrityFormula formula = IntegrityFormula.Installer.packageNameEquals(installerName);
 
         AtomicFormula.StringAtomicFormula stringAtomicFormula =
                 (AtomicFormula.StringAtomicFormula) formula;
@@ -75,21 +70,20 @@
     public void createEqualsFormula_installerCertificate() {
         String installerCertificate = "com.test.app";
         IntegrityFormula formula =
-                IntegrityFormula.INSTALLER_CERTIFICATE.equalTo(installerCertificate);
+                IntegrityFormula.Installer.certificatesContain(installerCertificate);
 
         AtomicFormula.StringAtomicFormula stringAtomicFormula =
                 (AtomicFormula.StringAtomicFormula) formula;
 
         assertThat(stringAtomicFormula.getKey()).isEqualTo(AtomicFormula.INSTALLER_CERTIFICATE);
         assertThat(stringAtomicFormula.getValue()).matches(installerCertificate);
-        assertThat(stringAtomicFormula.getIsHashedValue()).isFalse();
+        assertThat(stringAtomicFormula.getIsHashedValue()).isTrue();
     }
 
     @Test
     public void createEqualsFormula_versionCode() {
         int versionCode = 12;
-        IntegrityFormula formula =
-                IntegrityFormula.VERSION_CODE.equalTo(versionCode);
+        IntegrityFormula formula = IntegrityFormula.Application.versionCodeEquals(versionCode);
 
         AtomicFormula.LongAtomicFormula stringAtomicFormula =
                 (AtomicFormula.LongAtomicFormula) formula;
@@ -100,24 +94,9 @@
     }
 
     @Test
-    public void createEqualsFormula_invalidKeyTypeForStringParameter() {
-        assertThrows(
-                IllegalArgumentException.class,
-                () -> IntegrityFormula.PRE_INSTALLED.equalTo("wrongString"));
-    }
-
-    @Test
-    public void createEqualsFormula_invalidKeyTypeForLongParameter() {
-        assertThrows(
-                IllegalArgumentException.class,
-                () -> IntegrityFormula.PACKAGE_NAME.equalTo(12));
-    }
-
-    @Test
     public void createGreaterThanFormula_versionCode() {
         int versionCode = 12;
-        IntegrityFormula formula =
-                IntegrityFormula.VERSION_CODE.greaterThan(versionCode);
+        IntegrityFormula formula = IntegrityFormula.Application.versionCodeGreaterThan(versionCode);
 
         AtomicFormula.LongAtomicFormula stringAtomicFormula =
                 (AtomicFormula.LongAtomicFormula) formula;
@@ -128,17 +107,10 @@
     }
 
     @Test
-    public void createGreaterThanFormula_invalidKeyTypeForLongParameter() {
-        assertThrows(
-                IllegalArgumentException.class,
-                () -> IntegrityFormula.PACKAGE_NAME.greaterThan(12));
-    }
-
-    @Test
     public void createGreaterThanOrEqualsToFormula_versionCode() {
         int versionCode = 12;
         IntegrityFormula formula =
-                IntegrityFormula.VERSION_CODE.greaterThanOrEquals(versionCode);
+                IntegrityFormula.Application.versionCodeGreaterThanOrEqualTo(versionCode);
 
         AtomicFormula.LongAtomicFormula stringAtomicFormula =
                 (AtomicFormula.LongAtomicFormula) formula;
@@ -149,38 +121,23 @@
     }
 
     @Test
-    public void createGreaterThanOrEqualsToFormula_invalidKeyTypeForLongParameter() {
-        assertThrows(
-                IllegalArgumentException.class,
-                () -> IntegrityFormula.PACKAGE_NAME.greaterThanOrEquals(12));
-    }
-
-    @Test
     public void createIsTrueFormula_preInstalled() {
-        IntegrityFormula formula = IntegrityFormula.PRE_INSTALLED.equalTo(true);
+        IntegrityFormula formula = IntegrityFormula.Application.isPreInstalled();
 
-        AtomicFormula.BooleanAtomicFormula stringAtomicFormula =
+        AtomicFormula.BooleanAtomicFormula booleanAtomicFormula =
                 (AtomicFormula.BooleanAtomicFormula) formula;
 
-        assertThat(stringAtomicFormula.getKey()).isEqualTo(AtomicFormula.PRE_INSTALLED);
-        assertThat(stringAtomicFormula.getValue()).isTrue();
-    }
-
-    @Test
-    public void createIsTrueFormula_invalidKeyTypeForBoolParameter() {
-        assertThrows(
-                IllegalArgumentException.class,
-                () -> IntegrityFormula.PACKAGE_NAME.equalTo(true));
+        assertThat(booleanAtomicFormula.getKey()).isEqualTo(AtomicFormula.PRE_INSTALLED);
+        assertThat(booleanAtomicFormula.getValue()).isTrue();
     }
 
     @Test
     public void createAllFormula() {
         String packageName = "com.test.package";
         String certificateName = "certificate";
-        IntegrityFormula formula1 =
-                IntegrityFormula.PACKAGE_NAME.equalTo(packageName);
+        IntegrityFormula formula1 = IntegrityFormula.Application.packageNameEquals(packageName);
         IntegrityFormula formula2 =
-                IntegrityFormula.APP_CERTIFICATE.equalTo(certificateName);
+                IntegrityFormula.Application.certificatesContain(certificateName);
 
         IntegrityFormula compoundFormula = IntegrityFormula.all(formula1, formula2);
 
@@ -191,10 +148,9 @@
     public void createAnyFormula() {
         String packageName = "com.test.package";
         String certificateName = "certificate";
-        IntegrityFormula formula1 =
-                IntegrityFormula.PACKAGE_NAME.equalTo(packageName);
+        IntegrityFormula formula1 = IntegrityFormula.Application.packageNameEquals(packageName);
         IntegrityFormula formula2 =
-                IntegrityFormula.APP_CERTIFICATE.equalTo(certificateName);
+                IntegrityFormula.Application.certificatesContain(certificateName);
 
         IntegrityFormula compoundFormula = IntegrityFormula.any(formula1, formula2);
 
@@ -206,9 +162,33 @@
         String packageName = "com.test.package";
 
         IntegrityFormula compoundFormula =
-                IntegrityFormula.not(
-                        IntegrityFormula.PACKAGE_NAME.equalTo(packageName));
+                IntegrityFormula.not(IntegrityFormula.Application.packageNameEquals(packageName));
 
         assertThat(compoundFormula.getTag()).isEqualTo(COMPOUND_FORMULA_TAG);
     }
+
+    @Test
+    public void createIsTrueFormula_stampNotTrusted() {
+        IntegrityFormula formula = IntegrityFormula.SourceStamp.notTrusted();
+
+        AtomicFormula.BooleanAtomicFormula booleanAtomicFormula =
+                (AtomicFormula.BooleanAtomicFormula) formula;
+
+        assertThat(booleanAtomicFormula.getKey()).isEqualTo(AtomicFormula.STAMP_TRUSTED);
+        assertThat(booleanAtomicFormula.getValue()).isFalse();
+    }
+
+    @Test
+    public void createEqualsFormula_stampCertificateHash() {
+        String stampCertificateHash = "test-cert";
+        IntegrityFormula formula =
+                IntegrityFormula.SourceStamp.stampCertificateHashEquals(stampCertificateHash);
+
+        AtomicFormula.StringAtomicFormula stringAtomicFormula =
+                (AtomicFormula.StringAtomicFormula) formula;
+
+        assertThat(stringAtomicFormula.getKey()).isEqualTo(AtomicFormula.STAMP_CERTIFICATE_HASH);
+        assertThat(stringAtomicFormula.getValue()).matches(stampCertificateHash);
+        assertThat(stringAtomicFormula.getIsHashedValue()).isTrue();
+    }
 }
diff --git a/core/tests/coretests/src/android/content/pm/OptionalClassRunner.java b/core/tests/coretests/src/android/content/pm/OptionalClassRunner.java
deleted file mode 100644
index 05db8ee..0000000
--- a/core/tests/coretests/src/android/content/pm/OptionalClassRunner.java
+++ /dev/null
@@ -1,142 +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.content.pm;
-
-import org.junit.Assume;
-import org.junit.runner.Description;
-import org.junit.runner.Runner;
-import org.junit.runner.notification.RunNotifier;
-import org.junit.runners.JUnit4;
-import org.junit.runners.ParentRunner;
-import org.junit.runners.model.InitializationError;
-import org.junit.runners.model.Statement;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Will run a test class, iff a class, specified by name in the {@link OptionalClass} annotation,
- * exists on the class path.
- *
- * <p>It is an {@link InitializationError} if no {@link OptionalClass} annotation is specified on
- * the class that has {@code @RunWith(OptionalClassRunner.class)}.
- *
- * <p>If the named class cannot be found then the test class is reported as having been ignored.
- */
-public class OptionalClassRunner extends Runner {
-
-    private final Runner mDelegate;
-
-    public OptionalClassRunner(Class<?> testClass) throws InitializationError {
-        OptionalClass annotation = testClass.getAnnotation(OptionalClass.class);
-        if (annotation == null) {
-            throw new InitializationError(
-                    "No " + OptionalClass.class.getName() + " annotation found on " + testClass);
-        }
-
-        String className = annotation.value();
-        Runner delegate;
-        try {
-            Class.forName(className);
-            // The class could be found so create a JUnit4 delegate for the class to run.
-            delegate = new JUnit4(testClass);
-        } catch (ClassNotFoundException e) {
-            // The class could not be found so create a Runner delegate that will treat the
-            // test as having failed a test assumption.
-            delegate = new ClassNotFoundRunner(testClass, className);
-        }
-
-        this.mDelegate = delegate;
-    }
-
-    @Override
-    public Description getDescription() {
-        return mDelegate.getDescription();
-    }
-
-    @Override
-    public void run(RunNotifier notifier) {
-        mDelegate.run(notifier);
-    }
-
-    @Retention(RetentionPolicy.RUNTIME)
-    @Target(ElementType.TYPE)
-    public @interface OptionalClass {
-        String value();
-    }
-
-    /**
-     * Emulates a class containing a single test that fails due to an invalid assumption caused by
-     * the missing class.
-     */
-    private static class ClassNotFoundRunner extends ParentRunner<Runner> {
-
-        private List<Runner> mChildren;
-
-        ClassNotFoundRunner(Class<?> testClass, String className)
-                throws InitializationError {
-            super(testClass);
-            this.mChildren = Collections.singletonList(new ChildRunner(testClass, className));
-        }
-
-        @Override
-        protected List<Runner> getChildren() {
-            return mChildren;
-        }
-
-        @Override
-        protected Description describeChild(Runner child) {
-            return child.getDescription();
-        }
-
-        @Override
-        protected void runChild(Runner child, RunNotifier notifier) {
-            child.run(notifier);
-        }
-
-        private class ChildRunner extends Runner {
-
-            private final Class<?> mTestClass;
-
-            private final String mClassName;
-
-            ChildRunner(Class<?> testClass, String className) {
-                this.mTestClass = testClass;
-                this.mClassName = className;
-            }
-
-            @Override
-            public Description getDescription() {
-                return Description.createTestDescription(mTestClass, "classNotFound");
-            }
-
-            @Override
-            public void run(RunNotifier notifier) {
-                runLeaf(new Statement() {
-                    @Override
-                    public void evaluate() throws Throwable {
-                        Assume.assumeTrue("Could not find class: " + mClassName, false);
-                    }
-                }, getDescription(), notifier);
-            }
-        }
-    }
-}
diff --git a/core/tests/coretests/src/android/content/pm/PackageParserTest.java b/core/tests/coretests/src/android/content/pm/PackageParserTest.java
deleted file mode 100644
index dfd762b..0000000
--- a/core/tests/coretests/src/android/content/pm/PackageParserTest.java
+++ /dev/null
@@ -1,520 +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 android.content.pm;
-
-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.junit.Assert.fail;
-
-import android.apex.ApexInfo;
-import android.content.Context;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ComponentParseUtils.ParsedComponent;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermission;
-import android.content.pm.parsing.ParsedPackage;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.FileUtils;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.frameworks.coretests.R;
-import com.android.internal.util.ArrayUtils;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.io.File;
-import java.io.InputStream;
-import java.util.function.Function;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class PackageParserTest {
-    private static final String RELEASED = null;
-    private static final String OLDER_PRE_RELEASE = "A";
-    private static final String PRE_RELEASE = "B";
-    private static final String NEWER_PRE_RELEASE = "C";
-
-    // Codenames with a fingerprint attached to them. These may only be present in the apps
-    // declared min SDK and not as platform codenames.
-    private static final String OLDER_PRE_RELEASE_WITH_FINGERPRINT = "A.fingerprint";
-    private static final String PRE_RELEASE_WITH_FINGERPRINT = "B.fingerprint";
-    private static final String NEWER_PRE_RELEASE_WITH_FINGERPRINT = "C.fingerprint";
-
-    private static final String[] CODENAMES_RELEASED = { /* empty */};
-    private static final String[] CODENAMES_PRE_RELEASE = {PRE_RELEASE};
-
-    private static final int OLDER_VERSION = 10;
-    private static final int PLATFORM_VERSION = 20;
-    private static final int NEWER_VERSION = 30;
-
-    private void verifyComputeMinSdkVersion(int minSdkVersion, String minSdkCodename,
-            boolean isPlatformReleased, int expectedMinSdk) {
-        final String[] outError = new String[1];
-        final int result = PackageParser.computeMinSdkVersion(
-                minSdkVersion,
-                minSdkCodename,
-                PLATFORM_VERSION,
-                isPlatformReleased ? CODENAMES_RELEASED : CODENAMES_PRE_RELEASE,
-                outError);
-
-        assertEquals("Error msg: " + outError[0], expectedMinSdk, result);
-
-        if (expectedMinSdk == -1) {
-            assertNotNull(outError[0]);
-        } else {
-            assertNull(outError[0]);
-        }
-    }
-
-    @Test
-    public void testComputeMinSdkVersion_preReleasePlatform() {
-        // Do allow older release minSdkVersion on pre-release platform.
-        // APP: Released API 10
-        // DEV: Pre-release API 20
-        verifyComputeMinSdkVersion(OLDER_VERSION, RELEASED, false, OLDER_VERSION);
-
-        // Do allow same release minSdkVersion on pre-release platform.
-        // APP: Released API 20
-        // DEV: Pre-release API 20
-        verifyComputeMinSdkVersion(PLATFORM_VERSION, RELEASED, false, PLATFORM_VERSION);
-
-        // Don't allow newer release minSdkVersion on pre-release platform.
-        // APP: Released API 30
-        // DEV: Pre-release API 20
-        verifyComputeMinSdkVersion(NEWER_VERSION, RELEASED, false, -1);
-
-        // Don't allow older pre-release minSdkVersion on pre-release platform.
-        // APP: Pre-release API 10
-        // DEV: Pre-release API 20
-        verifyComputeMinSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, false, -1);
-        verifyComputeMinSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE_WITH_FINGERPRINT, false, -1);
-
-        // Do allow same pre-release minSdkVersion on pre-release platform,
-        // but overwrite the specified version with CUR_DEVELOPMENT.
-        // APP: Pre-release API 20
-        // DEV: Pre-release API 20
-        verifyComputeMinSdkVersion(PLATFORM_VERSION, PRE_RELEASE, false,
-                Build.VERSION_CODES.CUR_DEVELOPMENT);
-        verifyComputeMinSdkVersion(PLATFORM_VERSION, PRE_RELEASE_WITH_FINGERPRINT, false,
-                Build.VERSION_CODES.CUR_DEVELOPMENT);
-
-
-        // Don't allow newer pre-release minSdkVersion on pre-release platform.
-        // APP: Pre-release API 30
-        // DEV: Pre-release API 20
-        verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, false, -1);
-        verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, false, -1);
-    }
-
-    @Test
-    public void testComputeMinSdkVersion_releasedPlatform() {
-        // Do allow older release minSdkVersion on released platform.
-        // APP: Released API 10
-        // DEV: Released API 20
-        verifyComputeMinSdkVersion(OLDER_VERSION, RELEASED, true, OLDER_VERSION);
-
-        // Do allow same release minSdkVersion on released platform.
-        // APP: Released API 20
-        // DEV: Released API 20
-        verifyComputeMinSdkVersion(PLATFORM_VERSION, RELEASED, true, PLATFORM_VERSION);
-
-        // Don't allow newer release minSdkVersion on released platform.
-        // APP: Released API 30
-        // DEV: Released API 20
-        verifyComputeMinSdkVersion(NEWER_VERSION, RELEASED, true, -1);
-
-        // Don't allow older pre-release minSdkVersion on released platform.
-        // APP: Pre-release API 10
-        // DEV: Released API 20
-        verifyComputeMinSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, true, -1);
-        verifyComputeMinSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE_WITH_FINGERPRINT, true, -1);
-
-        // Don't allow same pre-release minSdkVersion on released platform.
-        // APP: Pre-release API 20
-        // DEV: Released API 20
-        verifyComputeMinSdkVersion(PLATFORM_VERSION, PRE_RELEASE, true, -1);
-        verifyComputeMinSdkVersion(PLATFORM_VERSION, PRE_RELEASE_WITH_FINGERPRINT, true, -1);
-
-
-        // Don't allow newer pre-release minSdkVersion on released platform.
-        // APP: Pre-release API 30
-        // DEV: Released API 20
-        verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, true, -1);
-        verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, true, -1);
-    }
-
-    private void verifyComputeTargetSdkVersion(int targetSdkVersion, String targetSdkCodename,
-            boolean isPlatformReleased, int expectedTargetSdk) {
-        final String[] outError = new String[1];
-        final int result = PackageParser.computeTargetSdkVersion(
-                targetSdkVersion,
-                targetSdkCodename,
-                isPlatformReleased ? CODENAMES_RELEASED : CODENAMES_PRE_RELEASE,
-                outError);
-
-        assertEquals(result, expectedTargetSdk);
-
-        if (expectedTargetSdk == -1) {
-            assertNotNull(outError[0]);
-        } else {
-            assertNull(outError[0]);
-        }
-    }
-
-    @Test
-    public void testComputeTargetSdkVersion_preReleasePlatform() {
-        // Do allow older release targetSdkVersion on pre-release platform.
-        // APP: Released API 10
-        // DEV: Pre-release API 20
-        verifyComputeTargetSdkVersion(OLDER_VERSION, RELEASED, false, OLDER_VERSION);
-
-        // Do allow same release targetSdkVersion on pre-release platform.
-        // APP: Released API 20
-        // DEV: Pre-release API 20
-        verifyComputeTargetSdkVersion(PLATFORM_VERSION, RELEASED, false, PLATFORM_VERSION);
-
-        // Do allow newer release targetSdkVersion on pre-release platform.
-        // APP: Released API 30
-        // DEV: Pre-release API 20
-        verifyComputeTargetSdkVersion(NEWER_VERSION, RELEASED, false, NEWER_VERSION);
-
-        // Don't allow older pre-release targetSdkVersion on pre-release platform.
-        // APP: Pre-release API 10
-        // DEV: Pre-release API 20
-        verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, false, -1);
-        verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE_WITH_FINGERPRINT, false, -1);
-
-
-        // Do allow same pre-release targetSdkVersion on pre-release platform,
-        // but overwrite the specified version with CUR_DEVELOPMENT.
-        // APP: Pre-release API 20
-        // DEV: Pre-release API 20
-        verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE, false,
-                Build.VERSION_CODES.CUR_DEVELOPMENT);
-        verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE_WITH_FINGERPRINT, false,
-                Build.VERSION_CODES.CUR_DEVELOPMENT);
-
-
-        // Don't allow newer pre-release targetSdkVersion on pre-release platform.
-        // APP: Pre-release API 30
-        // DEV: Pre-release API 20
-        verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, false, -1);
-        verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, false, -1);
-    }
-
-    @Test
-    public void testComputeTargetSdkVersion_releasedPlatform() {
-        // Do allow older release targetSdkVersion on released platform.
-        // APP: Released API 10
-        // DEV: Released API 20
-        verifyComputeTargetSdkVersion(OLDER_VERSION, RELEASED, true, OLDER_VERSION);
-
-        // Do allow same release targetSdkVersion on released platform.
-        // APP: Released API 20
-        // DEV: Released API 20
-        verifyComputeTargetSdkVersion(PLATFORM_VERSION, RELEASED, true, PLATFORM_VERSION);
-
-        // Do allow newer release targetSdkVersion on released platform.
-        // APP: Released API 30
-        // DEV: Released API 20
-        verifyComputeTargetSdkVersion(NEWER_VERSION, RELEASED, true, NEWER_VERSION);
-
-        // Don't allow older pre-release targetSdkVersion on released platform.
-        // APP: Pre-release API 10
-        // DEV: Released API 20
-        verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, true, -1);
-        verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE_WITH_FINGERPRINT, true, -1);
-
-        // Don't allow same pre-release targetSdkVersion on released platform.
-        // APP: Pre-release API 20
-        // DEV: Released API 20
-        verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE, true, -1);
-        verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE_WITH_FINGERPRINT, true, -1);
-
-
-        // Don't allow newer pre-release targetSdkVersion on released platform.
-        // APP: Pre-release API 30
-        // DEV: Released API 20
-        verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, true, -1);
-        verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, true, -1);
-    }
-
-    /**
-     * Unit test for PackageParser.getActivityConfigChanges().
-     * If the bit is 1 in the original configChanges, it is still 1 in the final configChanges.
-     * If the bit is 0 in the original configChanges and the bit is not set to 1 in
-     * recreateOnConfigChanges, the bit is changed to 1 in the final configChanges by default.
-     */
-    @Test
-    public void testGetActivityConfigChanges() {
-        // Not set in either configChanges or recreateOnConfigChanges.
-        int configChanges = 0x0000; // 00000000.
-        int recreateOnConfigChanges = 0x0000; // 00000000.
-        int finalConfigChanges =
-                PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges);
-        assertEquals(0x0003, finalConfigChanges); // Should be 00000011.
-
-        // Not set in configChanges, but set in recreateOnConfigChanges.
-        configChanges = 0x0000; // 00000000.
-        recreateOnConfigChanges = 0x0003; // 00000011.
-        finalConfigChanges =
-                PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges);
-        assertEquals(0x0000, finalConfigChanges); // Should be 00000000.
-
-        // Set in configChanges.
-        configChanges = 0x0003; // 00000011.
-        recreateOnConfigChanges = 0X0000; // 00000000.
-        finalConfigChanges =
-                PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges);
-        assertEquals(0x0003, finalConfigChanges); // Should be 00000011.
-
-        recreateOnConfigChanges = 0x0003; // 00000011.
-        finalConfigChanges =
-                PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges);
-        assertEquals(0x0003, finalConfigChanges); // Should still be 00000011.
-
-        // Other bit set in configChanges.
-        configChanges = 0x0080; // 10000000, orientation.
-        recreateOnConfigChanges = 0x0000; // 00000000.
-        finalConfigChanges =
-                PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges);
-        assertEquals(0x0083, finalConfigChanges); // Should be 10000011.
-    }
-
-    /**
-     * Copies a specified {@code resourceId} to a file. Returns a non-null file if the copy
-     * succeeded, or {@code null} otherwise.
-     */
-    File copyRawResourceToFile(String baseName, int resourceId) throws Exception {
-        // Copy the resource to a file.
-        Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
-        InputStream is = context.getResources().openRawResource(resourceId);
-        File outFile = null;
-        try {
-            outFile = new File(context.getFilesDir(), baseName);
-            assertTrue(FileUtils.copyToFile(is, outFile));
-            return outFile;
-        } catch (Exception e) {
-            if (outFile != null) {
-                outFile.delete();
-            }
-
-            return null;
-        }
-    }
-
-    /**
-     * Attempts to parse a package.
-     *
-     * APKs are put into coretests/apks/packageparser_*.
-     *
-     * @param apkFileName   temporary file name to store apk extracted from resources
-     * @param apkResourceId identifier of the apk as a resource
-     */
-    ParsedPackage parsePackage(String apkFileName, int apkResourceId,
-            Function<ParsedPackage, ParsedPackage> converter) throws Exception {
-        // Copy the resource to a file.
-        File outFile = null;
-        try {
-            outFile = copyRawResourceToFile(apkFileName, apkResourceId);
-            return converter.apply(
-                    new PackageParser().parseParsedPackage(outFile, 0 /* flags */, false));
-        } finally {
-            if (outFile != null) {
-                outFile.delete();
-            }
-        }
-    }
-
-    /**
-     * Asserts basic properties about a component.
-     */
-    private void assertComponent(String className, int numIntents, ParsedComponent<?> component) {
-        assertEquals(className, component.className);
-        assertEquals(numIntents, component.intents.size());
-    }
-
-    /**
-     * Asserts four regularly-named components of each type: one Activity, one Service, one
-     * Provider, and one Receiver.
-     *
-     * @param template templated string with %s subbed with Activity, Service, Provider, Receiver
-     */
-    private void assertOneComponentOfEachType(String template, AndroidPackage p) {
-        assertEquals(1, p.getActivities().size());
-        assertComponent(String.format(template, "Activity"),
-                0 /* intents */, p.getActivities().get(0));
-        assertEquals(1, p.getServices().size());
-        assertComponent(String.format(template, "Service"),
-                0 /* intents */, p.getServices().get(0));
-        assertEquals(1, p.getProviders().size());
-        assertComponent(String.format(template, "Provider"),
-                0 /* intents */, p.getProviders().get(0));
-        assertEquals(1, p.getReceivers().size());
-        assertComponent(String.format(template, "Receiver"),
-                0 /* intents */, p.getReceivers().get(0));
-    }
-
-    private void assertPermission(String name, int protectionLevel, ParsedPermission permission) {
-        assertEquals(name, permission.getName());
-        assertEquals(protectionLevel, permission.getProtection());
-    }
-
-    private void assertMetadata(Bundle b, String... keysAndValues) {
-        assertTrue("Odd number of elements in keysAndValues", (keysAndValues.length % 2) == 0);
-
-        assertNotNull(b);
-        assertEquals(keysAndValues.length / 2, b.size());
-
-        for (int i = 0; i < keysAndValues.length; i += 2) {
-            final String key = keysAndValues[i];
-            final String value = keysAndValues[i + 1];
-
-            assertEquals(value, b.getString(key));
-        }
-    }
-
-    // TODO Add a "_cached" test for testMultiPackageComponents() too, after fixing b/64295061.
-    // Package.writeToParcel can't handle circular package references.
-
-    @Test
-    public void testPackageWithComponents_no_cache() throws Exception {
-        checkPackageWithComponents(p -> p);
-    }
-
-    @Test
-    public void testPackageWithComponents_cached() throws Exception {
-        checkPackageWithComponents(p ->
-                PackageParser.fromCacheEntryStatic(PackageParser.toCacheEntryStatic(p)));
-    }
-
-    private void checkPackageWithComponents(
-            Function<ParsedPackage, ParsedPackage> converter) throws Exception {
-        ParsedPackage p = parsePackage(
-                "install_complete_package_info.apk", R.raw.install_complete_package_info,
-                converter);
-        String packageName = "com.android.frameworks.coretests.install_complete_package_info";
-
-        assertEquals(packageName, p.getPackageName());
-        assertEquals(1, p.getPermissions().size());
-        assertPermission(
-                "com.android.frameworks.coretests.install_complete_package_info.test_permission",
-                PermissionInfo.PROTECTION_NORMAL, p.getPermissions().get(0));
-
-        // Hidden "app details" activity is added to every package.
-        boolean foundAppDetailsActivity = false;
-        for (int i = 0; i < ArrayUtils.size(p.getActivities()); i++) {
-            if (p.getActivities().get(i).className.equals(
-                    PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME)) {
-                foundAppDetailsActivity = true;
-                p.getActivities().remove(i);
-                break;
-            }
-        }
-        assertTrue("Did not find app details activity", foundAppDetailsActivity);
-
-        assertOneComponentOfEachType("com.android.frameworks.coretests.Test%s", p);
-
-        assertMetadata(p.getAppMetaData(),
-                "key1", "value1",
-                "key2", "this_is_app");
-        assertMetadata(p.getActivities().get(0).getMetaData(),
-                "key1", "value1",
-                "key2", "this_is_activity");
-        assertMetadata(p.getServices().get(0).getMetaData(),
-                "key1", "value1",
-                "key2", "this_is_service");
-        assertMetadata(p.getReceivers().get(0).getMetaData(),
-                "key1", "value1",
-                "key2", "this_is_receiver");
-        assertMetadata(p.getProviders().get(0).getMetaData(),
-                "key1", "value1",
-                "key2", "this_is_provider");
-    }
-
-    @Test
-    public void testApexPackageInfoGeneration() throws Exception {
-        String apexModuleName = "com.android.tzdata.apex";
-        File apexFile = copyRawResourceToFile(apexModuleName,
-                R.raw.com_android_tzdata);
-        ApexInfo apexInfo = new ApexInfo();
-        apexInfo.isActive = true;
-        apexInfo.isFactory = false;
-        apexInfo.moduleName = apexModuleName;
-        apexInfo.modulePath = apexFile.getPath();
-        apexInfo.versionCode = 191000070;
-        int flags = PackageManager.GET_META_DATA | PackageManager.GET_SIGNING_CERTIFICATES;
-
-        PackageParser pp = new PackageParser();
-        PackageParser.Package p = pp.parsePackage(apexFile, flags, false);
-        PackageParser.collectCertificates(p, false);
-        PackageInfo pi = PackageParser.generatePackageInfo(p, apexInfo, flags);
-
-        assertEquals("com.google.android.tzdata", pi.applicationInfo.packageName);
-        assertTrue(pi.applicationInfo.enabled);
-        assertEquals(28, pi.applicationInfo.targetSdkVersion);
-        assertEquals(191000070, pi.applicationInfo.longVersionCode);
-        assertNotNull(pi.applicationInfo.metaData);
-        assertEquals(apexFile.getPath(), pi.applicationInfo.sourceDir);
-        assertEquals("Bundle[{com.android.vending.derived.apk.id=1}]",
-                pi.applicationInfo.metaData.toString());
-
-        assertEquals("com.google.android.tzdata", pi.packageName);
-        assertEquals(191000070, pi.getLongVersionCode());
-        assertNotNull(pi.signingInfo);
-        assertTrue(pi.signingInfo.getApkContentsSigners().length > 0);
-        assertTrue(pi.isApex);
-        assertTrue((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0);
-        assertTrue((pi.applicationInfo.flags & ApplicationInfo.FLAG_INSTALLED) != 0);
-    }
-
-    @Test
-    public void testUsesSdk() throws Exception {
-        parsePackage("install_uses_sdk.apk_r0", R.raw.install_uses_sdk_r0, x -> x);
-        try {
-            parsePackage("install_uses_sdk.apk_r5", R.raw.install_uses_sdk_r5, x -> x);
-            fail("Expected parsing exception due to incompatible extension SDK version");
-        } catch (PackageParser.PackageParserException expected) {
-            assertEquals(PackageManager.INSTALL_FAILED_OLDER_SDK, expected.error);
-        }
-        try {
-            parsePackage("install_uses_sdk.apk_q0", R.raw.install_uses_sdk_q0, x -> x);
-            fail("Expected parsing exception due to non-existent extension SDK");
-        } catch (PackageParser.PackageParserException expected) {
-            assertEquals(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, expected.error);
-        }
-        try {
-            parsePackage("install_uses_sdk.apk_r", R.raw.install_uses_sdk_r, x -> x);
-            fail("Expected parsing exception due to unspecified extension SDK version");
-        } catch (PackageParser.PackageParserException expected) {
-            assertEquals(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, expected.error);
-        }
-        try {
-            parsePackage("install_uses_sdk.apk_0", R.raw.install_uses_sdk_0, x -> x);
-            fail("Expected parsing exception due to unspecified extension SDK");
-        } catch (PackageParser.PackageParserException expected) {
-            assertEquals(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, expected.error);
-        }
-
-    }
-}
diff --git a/core/tests/coretests/src/android/content/pm/dex/DexMetadataHelperTest.java b/core/tests/coretests/src/android/content/pm/dex/DexMetadataHelperTest.java
deleted file mode 100644
index 1e0bfb0..0000000
--- a/core/tests/coretests/src/android/content/pm/dex/DexMetadataHelperTest.java
+++ /dev/null
@@ -1,232 +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.content.pm.dex;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageParser;
-import android.content.pm.PackageParser.ApkLite;
-import android.content.pm.PackageParser.PackageLite;
-import android.content.pm.PackageParser.PackageParserException;
-import android.content.pm.parsing.ParsedPackage;
-import android.os.FileUtils;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.frameworks.coretests.R;
-
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.junit.runner.RunWith;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.util.Map;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class DexMetadataHelperTest {
-    private static final String APK_FILE_EXTENSION = ".apk";
-    private static final String DEX_METADATA_FILE_EXTENSION = ".dm";
-
-    @Rule
-    public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
-
-    private File mTmpDir = null;
-
-    @Before
-    public void setUp() throws IOException {
-        mTmpDir = mTemporaryFolder.newFolder("DexMetadataHelperTest");
-    }
-
-    private File createDexMetadataFile(String apkFileName) throws IOException {
-        File dmFile = new File(mTmpDir, apkFileName.replace(APK_FILE_EXTENSION,
-                DEX_METADATA_FILE_EXTENSION));
-        try (FileOutputStream fos = new FileOutputStream(dmFile)) {
-            try (ZipOutputStream zipOs = new ZipOutputStream(fos)) {
-                zipOs.putNextEntry(new ZipEntry("primary.prof"));
-                zipOs.closeEntry();
-            }
-        }
-        return dmFile;
-    }
-
-    private File copyApkToToTmpDir(String apkFileName, int apkResourceId) throws IOException {
-        Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
-        File outFile = new File(mTmpDir, apkFileName);
-        try (InputStream is = context.getResources().openRawResource(apkResourceId)) {
-            FileUtils.copyToFileOrThrow(is, outFile);
-        }
-        return outFile;
-    }
-
-    @Test
-    public void testParsePackageWithDmFileValid() throws IOException, PackageParserException {
-        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
-        createDexMetadataFile("install_split_base.apk");
-        ParsedPackage pkg = new PackageParser().parseParsedPackage(mTmpDir, 0 /* flags */, false);
-
-        Map<String, String> packageDexMetadata = DexMetadataHelper.getPackageDexMetadata(pkg);
-        assertEquals(1, packageDexMetadata.size());
-        String baseDexMetadata = packageDexMetadata.get(pkg.getBaseCodePath());
-        assertNotNull(baseDexMetadata);
-        assertTrue(isDexMetadataForApk(baseDexMetadata, pkg.getBaseCodePath()));
-    }
-
-    @Test
-    public void testParsePackageSplitsWithDmFileValid()
-            throws IOException, PackageParserException {
-        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
-        copyApkToToTmpDir("install_split_feature_a.apk", R.raw.install_split_feature_a);
-        createDexMetadataFile("install_split_base.apk");
-        createDexMetadataFile("install_split_feature_a.apk");
-        ParsedPackage pkg = new PackageParser().parseParsedPackage(mTmpDir, 0 /* flags */, false);
-
-        Map<String, String> packageDexMetadata = DexMetadataHelper.getPackageDexMetadata(pkg);
-        assertEquals(2, packageDexMetadata.size());
-        String baseDexMetadata = packageDexMetadata.get(pkg.getBaseCodePath());
-        assertNotNull(baseDexMetadata);
-        assertTrue(isDexMetadataForApk(baseDexMetadata, pkg.getBaseCodePath()));
-
-        String splitDexMetadata = packageDexMetadata.get(pkg.getSplitCodePaths()[0]);
-        assertNotNull(splitDexMetadata);
-        assertTrue(isDexMetadataForApk(splitDexMetadata, pkg.getSplitCodePaths()[0]));
-    }
-
-    @Test
-    public void testParsePackageSplitsNoBaseWithDmFileValid()
-            throws IOException, PackageParserException {
-        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
-        copyApkToToTmpDir("install_split_feature_a.apk", R.raw.install_split_feature_a);
-        createDexMetadataFile("install_split_feature_a.apk");
-        ParsedPackage pkg = new PackageParser().parseParsedPackage(mTmpDir, 0 /* flags */, false);
-
-        Map<String, String> packageDexMetadata = DexMetadataHelper.getPackageDexMetadata(pkg);
-        assertEquals(1, packageDexMetadata.size());
-
-        String splitDexMetadata = packageDexMetadata.get(pkg.getSplitCodePaths()[0]);
-        assertNotNull(splitDexMetadata);
-        assertTrue(isDexMetadataForApk(splitDexMetadata, pkg.getSplitCodePaths()[0]));
-    }
-
-    @Test
-    public void testParsePackageWithDmFileInvalid() throws IOException {
-        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
-        File invalidDmFile = new File(mTmpDir, "install_split_base.dm");
-        Files.createFile(invalidDmFile.toPath());
-        try {
-            ParsedPackage pkg = new PackageParser()
-                    .parseParsedPackage(mTmpDir, 0 /* flags */, false);
-            DexMetadataHelper.validatePackageDexMetadata(pkg);
-        } catch (PackageParserException e) {
-            assertEquals(e.error, PackageManager.INSTALL_FAILED_BAD_DEX_METADATA);
-        }
-    }
-
-    @Test
-    public void testParsePackageSplitsWithDmFileInvalid()
-            throws IOException, PackageParserException {
-        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
-        copyApkToToTmpDir("install_split_feature_a.apk", R.raw.install_split_feature_a);
-        createDexMetadataFile("install_split_base.apk");
-        File invalidDmFile = new File(mTmpDir, "install_split_feature_a.dm");
-        Files.createFile(invalidDmFile.toPath());
-
-        try {
-            ParsedPackage pkg = new PackageParser()
-                    .parseParsedPackage(mTmpDir, 0 /* flags */, false);
-            DexMetadataHelper.validatePackageDexMetadata(pkg);
-        } catch (PackageParserException e) {
-            assertEquals(e.error, PackageManager.INSTALL_FAILED_BAD_DEX_METADATA);
-        }
-    }
-
-    @Test
-    public void testPackageWithDmFileNoMatch() throws IOException {
-        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
-        createDexMetadataFile("non_existent.apk");
-
-        try {
-            DexMetadataHelper.validateDexPaths(mTmpDir.list());
-            fail("Should fail validation");
-        } catch (IllegalStateException e) {
-            // expected.
-        }
-    }
-
-    @Test
-    public void testPackageSplitsWithDmFileNoMatch()
-            throws IOException, PackageParserException {
-        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
-        copyApkToToTmpDir("install_split_feature_a.apk", R.raw.install_split_feature_a);
-        createDexMetadataFile("install_split_base.apk");
-        createDexMetadataFile("install_split_feature_a.mistake.apk");
-
-        try {
-            DexMetadataHelper.validateDexPaths(mTmpDir.list());
-            fail("Should fail validation");
-        } catch (IllegalStateException e) {
-            // expected.
-        }
-    }
-
-    @Test
-    public void testPackageSizeWithDmFile()
-            throws IOException, PackageParserException {
-        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
-        File dm = createDexMetadataFile("install_split_base.apk");
-        PackageParser.PackageLite pkg = new PackageParser().parsePackageLite(mTmpDir,
-                0 /* flags */);
-
-        Assert.assertEquals(dm.length(), DexMetadataHelper.getPackageDexMetadataSize(pkg));
-    }
-
-    // This simulates the 'adb shell pm install' flow.
-    @Test
-    public void testPackageSizeWithPartialPackageLite() throws IOException, PackageParserException {
-        File base = copyApkToToTmpDir("install_split_base", R.raw.install_split_base);
-        File dm = createDexMetadataFile("install_split_base.apk");
-        try (FileInputStream is = new FileInputStream(base)) {
-            ApkLite baseApk = PackageParser.parseApkLite(is.getFD(), base.getAbsolutePath(), 0);
-            PackageLite pkgLite = new PackageLite(null, baseApk, null, null, null, null,
-                    null, null);
-            Assert.assertEquals(dm.length(), DexMetadataHelper.getPackageDexMetadataSize(pkgLite));
-        }
-
-    }
-
-    private static boolean isDexMetadataForApk(String dmaPath, String apkPath) {
-        return apkPath.substring(0, apkPath.length() - APK_FILE_EXTENSION.length()).equals(
-                dmaPath.substring(0, dmaPath.length() - DEX_METADATA_FILE_EXTENSION.length()));
-    }
-}
diff --git a/core/tests/coretests/src/android/content/pm/parsing/library/AndroidHidlUpdaterTest.java b/core/tests/coretests/src/android/content/pm/parsing/library/AndroidHidlUpdaterTest.java
deleted file mode 100644
index 21479c0..0000000
--- a/core/tests/coretests/src/android/content/pm/parsing/library/AndroidHidlUpdaterTest.java
+++ /dev/null
@@ -1,191 +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.content.pm.parsing.library;
-
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_HIDL_BASE;
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_HIDL_MANAGER;
-
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.PackageImpl;
-import android.content.pm.parsing.ParsedPackage;
-import android.os.Build;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/**
- * Test for {@link AndroidHidlUpdater}
- */
-@SmallTest
-@RunWith(JUnit4.class)
-public class AndroidHidlUpdaterTest extends PackageSharedLibraryUpdaterTest {
-
-    private static final String OTHER_LIBRARY = "other.library";
-
-    @Test
-    public void targeted_at_P() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.P)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.P)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // no change, not system
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_P_system() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.P)
-                .hideAsParsed()
-                .setSystem(true);
-
-        // Should add both HIDL libraries
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.P)
-                .addUsesLibrary(ANDROID_HIDL_MANAGER)
-                .addUsesLibrary(ANDROID_HIDL_BASE)
-                .hideAsParsed()
-                .setSystem(true)
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_P_not_empty_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.P)
-                .addUsesLibrary(OTHER_LIBRARY)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.P)
-                .addUsesLibrary(OTHER_LIBRARY)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // no change, not system
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_P_not_empty_usesLibraries_system() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.P)
-                .addUsesLibrary(OTHER_LIBRARY)
-                .hideAsParsed()
-                .setSystem(true);
-
-        // The hidl jars should be added at the start of the list because it
-        // is not on the bootclasspath and the package targets pre-P.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.P)
-                .addUsesLibrary(ANDROID_HIDL_MANAGER)
-                .addUsesLibrary(ANDROID_HIDL_BASE)
-                .addUsesLibrary(OTHER_LIBRARY)
-                .hideAsParsed()
-                .setSystem(true)
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_P_in_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.P)
-                .addUsesLibrary(ANDROID_HIDL_MANAGER)
-                .addUsesLibrary(ANDROID_HIDL_BASE)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.P)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // Libraries are removed because they are not available for non-system apps
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_P_in_usesLibraries_system() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.P)
-                .addUsesLibrary(ANDROID_HIDL_MANAGER)
-                .addUsesLibrary(ANDROID_HIDL_BASE)
-                .hideAsParsed()
-                .setSystem(true);
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.P)
-                .addUsesLibrary(ANDROID_HIDL_MANAGER)
-                .addUsesLibrary(ANDROID_HIDL_BASE)
-                .hideAsParsed()
-                .setSystem(true)
-                .hideAsFinal();
-
-        // No change is required because the package explicitly requests the HIDL libraries
-        // and is targeted at the current version so does not need backwards compatibility.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void in_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesLibrary(ANDROID_HIDL_BASE)
-                .hideAsParsed();
-
-        // Dependency is removed, it is not available.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // Libraries are removed because they are not available for apps targeting Q+
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void in_usesOptionalLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesOptionalLibrary(ANDROID_HIDL_BASE)
-                .hideAsParsed();
-
-        // Dependency is removed, it is not available.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // Libraries are removed because they are not available for apps targeting Q+
-        checkBackwardsCompatibility(before, after);
-    }
-
-    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
-        checkBackwardsCompatibility(before, after, AndroidHidlUpdater::new);
-    }
-}
diff --git a/core/tests/coretests/src/android/content/pm/parsing/library/AndroidTestBaseUpdaterTest.java b/core/tests/coretests/src/android/content/pm/parsing/library/AndroidTestBaseUpdaterTest.java
deleted file mode 100644
index 65ae219..0000000
--- a/core/tests/coretests/src/android/content/pm/parsing/library/AndroidTestBaseUpdaterTest.java
+++ /dev/null
@@ -1,152 +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.content.pm.parsing.library;
-
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_BASE;
-
-import android.content.pm.OptionalClassRunner;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.PackageImpl;
-import android.content.pm.parsing.ParsedPackage;
-import android.os.Build;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Test for {@link AndroidTestBaseUpdater}
- */
-@SmallTest
-@RunWith(OptionalClassRunner.class)
-@OptionalClassRunner.OptionalClass("android.content.pm.parsing.library.AndroidTestBaseUpdater")
-public class AndroidTestBaseUpdaterTest extends PackageSharedLibraryUpdaterTest {
-
-    private static final String OTHER_LIBRARY = "other.library";
-
-    @Test
-    public void targeted_at_Q() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.Q)
-                .hideAsParsed();
-
-        // Should add org.apache.http.legacy.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.Q)
-                .addUsesLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_Q_not_empty_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.Q)
-                .addUsesLibrary(OTHER_LIBRARY)
-                .hideAsParsed();
-
-        // The org.apache.http.legacy jar should be added at the start of the list because it
-        // is not on the bootclasspath and the package targets pre-Q.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.Q)
-                .addUsesLibrary(ANDROID_TEST_BASE)
-                .addUsesLibrary(OTHER_LIBRARY)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_Q_in_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.Q)
-                .addUsesLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.Q)
-                .addUsesLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // No change is required because although org.apache.http.legacy has been removed from
-        // the bootclasspath the package explicitly requests it.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_Q_in_usesOptionalLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.Q)
-                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.Q)
-                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // No change is required because although org.apache.http.legacy has been removed from
-        // the bootclasspath the package explicitly requests it.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void in_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // No change is required because the package explicitly requests org.apache.http.legacy
-        // and is targeted at the current version so does not need backwards compatibility.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void in_usesOptionalLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // No change is required because the package explicitly requests org.apache.http.legacy
-        // and is targeted at the current version so does not need backwards compatibility.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
-        checkBackwardsCompatibility(before, after, AndroidTestBaseUpdater::new);
-    }
-}
diff --git a/core/tests/coretests/src/android/content/pm/parsing/library/AndroidTestRunnerSplitUpdaterTest.java b/core/tests/coretests/src/android/content/pm/parsing/library/AndroidTestRunnerSplitUpdaterTest.java
deleted file mode 100644
index 38755b9..0000000
--- a/core/tests/coretests/src/android/content/pm/parsing/library/AndroidTestRunnerSplitUpdaterTest.java
+++ /dev/null
@@ -1,79 +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.content.pm.parsing.library;
-
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_MOCK;
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_RUNNER;
-
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.PackageImpl;
-import android.content.pm.parsing.ParsedPackage;
-import android.content.pm.parsing.library.PackageBackwardCompatibility.AndroidTestRunnerSplitUpdater;
-import android.os.Build;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/**
- * Test for {@link AndroidTestRunnerSplitUpdater}
- */
-@SmallTest
-@RunWith(JUnit4.class)
-public class AndroidTestRunnerSplitUpdaterTest extends PackageSharedLibraryUpdaterTest {
-
-    @Test
-    public void android_test_runner_in_usesOptionalLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesOptionalLibrary(ANDROID_TEST_RUNNER)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesOptionalLibrary(ANDROID_TEST_MOCK)
-                .addUsesOptionalLibrary(ANDROID_TEST_RUNNER)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void android_test_runner_in_usesLibraries_android_test_mock_in_usesOptionalLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesLibrary(ANDROID_TEST_RUNNER)
-                .addUsesOptionalLibrary(ANDROID_TEST_MOCK)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesLibrary(ANDROID_TEST_RUNNER)
-                .addUsesOptionalLibrary(ANDROID_TEST_MOCK)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
-        checkBackwardsCompatibility(before, after, AndroidTestRunnerSplitUpdater::new);
-    }
-}
diff --git a/core/tests/coretests/src/android/content/pm/parsing/library/OrgApacheHttpLegacyUpdaterTest.java b/core/tests/coretests/src/android/content/pm/parsing/library/OrgApacheHttpLegacyUpdaterTest.java
deleted file mode 100644
index 4c7899b..0000000
--- a/core/tests/coretests/src/android/content/pm/parsing/library/OrgApacheHttpLegacyUpdaterTest.java
+++ /dev/null
@@ -1,152 +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.content.pm.parsing.library;
-
-import static android.content.pm.parsing.library.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY;
-
-import android.content.pm.OptionalClassRunner;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.PackageImpl;
-import android.content.pm.parsing.ParsedPackage;
-import android.os.Build;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Test for {@link OrgApacheHttpLegacyUpdater}
- */
-@SmallTest
-@RunWith(OptionalClassRunner.class)
-@OptionalClassRunner.OptionalClass("android.content.pm.parsing.library.OrgApacheHttpLegacyUpdater")
-public class OrgApacheHttpLegacyUpdaterTest extends PackageSharedLibraryUpdaterTest {
-
-    private static final String OTHER_LIBRARY = "other.library";
-
-    @Test
-    public void targeted_at_O() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .hideAsParsed();
-
-        // Should add org.apache.http.legacy.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_O_not_empty_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesLibrary(OTHER_LIBRARY)
-                .hideAsParsed();
-
-        // The org.apache.http.legacy jar should be added at the start of the list because it
-        // is not on the bootclasspath and the package targets pre-P.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
-                .addUsesLibrary(OTHER_LIBRARY)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_O_in_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // No change is required because although org.apache.http.legacy has been removed from
-        // the bootclasspath the package explicitly requests it.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_O_in_usesOptionalLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // No change is required because although org.apache.http.legacy has been removed from
-        // the bootclasspath the package explicitly requests it.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void in_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // No change is required because the package explicitly requests org.apache.http.legacy
-        // and is targeted at the current version so does not need backwards compatibility.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void in_usesOptionalLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // No change is required because the package explicitly requests org.apache.http.legacy
-        // and is targeted at the current version so does not need backwards compatibility.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
-        checkBackwardsCompatibility(before, after, OrgApacheHttpLegacyUpdater::new);
-    }
-}
diff --git a/core/tests/coretests/src/android/content/pm/parsing/library/PackageBackwardCompatibilityTest.java b/core/tests/coretests/src/android/content/pm/parsing/library/PackageBackwardCompatibilityTest.java
deleted file mode 100644
index 00d468d..0000000
--- a/core/tests/coretests/src/android/content/pm/parsing/library/PackageBackwardCompatibilityTest.java
+++ /dev/null
@@ -1,151 +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.content.pm.parsing.library;
-
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_BASE;
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_MOCK;
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_RUNNER;
-import static android.content.pm.parsing.library.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY;
-
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.PackageImpl;
-import android.content.pm.parsing.ParsedPackage;
-import android.content.pm.parsing.ParsingPackage;
-import android.content.pm.parsing.library.PackageBackwardCompatibility.RemoveUnnecessaryAndroidTestBaseLibrary;
-import android.os.Build;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Assume;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-@SmallTest
-@RunWith(JUnit4.class)
-public class PackageBackwardCompatibilityTest extends PackageSharedLibraryUpdaterTest {
-
-    @Test
-    public void null_usesLibraries_and_usesOptionalLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    /**
-     * Detect when the android.test.base is not on the bootclasspath.
-     *
-     * <p>This test will be ignored when org.apache.http.legacy is not on the bootclasspath and
-     * succeed otherwise. This allows a developer to ensure that the tests are being run in the
-     * correct environment.
-     */
-    @Test
-    public void detectWhenATBisOnBCP() {
-        Assume.assumeTrue(PackageBackwardCompatibility.bootClassPathContainsATB());
-    }
-
-    /**
-     * Ensures that the {@link PackageBackwardCompatibility} uses {@link OrgApacheHttpLegacyUpdater}
-     * and {@link AndroidTestBaseUpdater} when necessary.
-     *
-     * <p>More comprehensive tests for that class can be found in
-     * {@link OrgApacheHttpLegacyUpdaterTest}.
-     */
-    @Test
-    public void targeted_at_O() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .hideAsParsed();
-
-        ParsingPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .setTargetSdkVersion(Build.VERSION_CODES.O);
-
-        if (!PackageBackwardCompatibility.bootClassPathContainsATB()) {
-            after.addUsesLibrary(ANDROID_TEST_BASE);
-        }
-        after.addUsesLibrary(ORG_APACHE_HTTP_LEGACY);
-
-        checkBackwardsCompatibility(before, after.hideAsParsed().hideAsFinal());
-    }
-
-    /**
-     * Ensures that the {@link PackageBackwardCompatibility} uses
-     * {@link RemoveUnnecessaryAndroidTestBaseLibrary}
-     * when necessary.
-     *
-     * <p>More comprehensive tests for that class can be found in
-     * {@link RemoveUnnecessaryAndroidTestBaseLibraryTest}.
-     */
-    @Test
-    public void android_test_base_in_usesLibraries() {
-        Assume.assumeTrue("Test requires that "
-                        + ANDROID_TEST_BASE + " is on the bootclasspath",
-                PackageBackwardCompatibility.bootClassPathContainsATB());
-
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed();
-
-        // android.test.base should be removed from the libraries because it is provided
-        // on the bootclasspath and providing both increases start up cost unnecessarily.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    /**
-     * Ensures that the {@link PackageBackwardCompatibility} uses a
-     * {@link PackageBackwardCompatibility.AndroidTestRunnerSplitUpdater}.
-     *
-     * <p>More comprehensive tests for that class can be found in
-     * {@link AndroidTestRunnerSplitUpdaterTest}.
-     */
-    @Test
-    public void android_test_runner_in_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesLibrary(ANDROID_TEST_RUNNER)
-                .hideAsParsed();
-
-        ParsingPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT);
-        if (!PackageBackwardCompatibility.bootClassPathContainsATB()) {
-            after.addUsesLibrary(ANDROID_TEST_BASE);
-        }
-        after.addUsesLibrary(ANDROID_TEST_MOCK);
-        after.addUsesLibrary(ANDROID_TEST_RUNNER);
-
-        checkBackwardsCompatibility(before, after.hideAsParsed().hideAsFinal());
-    }
-
-    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
-        checkBackwardsCompatibility(before, after, PackageBackwardCompatibility::getInstance);
-    }
-}
diff --git a/core/tests/coretests/src/android/content/pm/parsing/library/PackageSharedLibraryUpdaterTest.java b/core/tests/coretests/src/android/content/pm/parsing/library/PackageSharedLibraryUpdaterTest.java
deleted file mode 100644
index e7a80e1a..0000000
--- a/core/tests/coretests/src/android/content/pm/parsing/library/PackageSharedLibraryUpdaterTest.java
+++ /dev/null
@@ -1,50 +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.content.pm.parsing.library;
-
-import static org.junit.Assert.assertEquals;
-
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ParsedPackage;
-
-import java.util.function.Supplier;
-
-/**
- * Helper for classes that test {@link PackageSharedLibraryUpdater}.
- */
-abstract class PackageSharedLibraryUpdaterTest {
-
-    protected static final String PACKAGE_NAME = "org.package.name";
-
-    static void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after,
-            Supplier<PackageSharedLibraryUpdater> updaterSupplier) {
-        updaterSupplier.get().updatePackage(before);
-        check(before.hideAsFinal(), after);
-    }
-
-    private static void check(AndroidPackage before, AndroidPackage after) {
-        assertEquals("targetSdkVersion should not be changed",
-                after.getTargetSdkVersion(),
-                before.getTargetSdkVersion());
-        assertEquals("usesLibraries not updated correctly",
-                after.getUsesLibraries(),
-                before.getUsesLibraries());
-        assertEquals("usesOptionalLibraries not updated correctly",
-                after.getUsesOptionalLibraries(),
-                before.getUsesOptionalLibraries());
-    }
-}
diff --git a/core/tests/coretests/src/android/content/pm/parsing/library/RemoveUnnecessaryAndroidTestBaseLibraryTest.java b/core/tests/coretests/src/android/content/pm/parsing/library/RemoveUnnecessaryAndroidTestBaseLibraryTest.java
deleted file mode 100644
index fd3ba2b..0000000
--- a/core/tests/coretests/src/android/content/pm/parsing/library/RemoveUnnecessaryAndroidTestBaseLibraryTest.java
+++ /dev/null
@@ -1,169 +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.content.pm.parsing.library;
-
-import static android.content.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_BASE;
-
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.PackageImpl;
-import android.content.pm.parsing.ParsedPackage;
-import android.content.pm.parsing.library.PackageBackwardCompatibility.RemoveUnnecessaryAndroidTestBaseLibrary;
-import android.os.Build;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/**
- * Test for {@link RemoveUnnecessaryAndroidTestBaseLibrary}
- */
-@SmallTest
-@RunWith(JUnit4.class)
-public class RemoveUnnecessaryAndroidTestBaseLibraryTest
-        extends PackageSharedLibraryUpdaterTest {
-
-    private static final String OTHER_LIBRARY = "other.library";
-
-    @Test
-    public void targeted_at_O() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // No change required.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_O_not_empty_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesLibrary(OTHER_LIBRARY)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesLibrary(OTHER_LIBRARY)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // No change required.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_O_in_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed();
-
-        // android.test.base should be removed from the libraries because it is provided
-        // on the bootclasspath and providing both increases start up cost unnecessarily.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_O_in_usesOptionalLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed();
-
-        // android.test.base should be removed from the libraries because it is provided
-        // on the bootclasspath and providing both increases start up cost unnecessarily.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void in_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .addUsesLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed();
-
-        // android.test.base should be removed from the libraries because it is provided
-        // on the bootclasspath and providing both increases start up cost unnecessarily.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void in_usesOptionalLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed();
-
-        // android.test.base should be removed from the libraries because it is provided
-        // on the bootclasspath and providing both increases start up cost unnecessarily.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void in_bothLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesLibrary(ANDROID_TEST_BASE)
-                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
-                .hideAsParsed();
-
-        // android.test.base should be removed from the libraries because it is provided
-        // on the bootclasspath and providing both increases start up cost unnecessarily.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
-        // TODO(b/72538146) - Cannot use constructor reference here because it is also used in
-        // PackageBackwardCompatibility and that seems to create a package-private lambda in
-        // android.content.pm which this then tries to reuse but fails because it cannot access
-        // package-private classes/members because the test is loaded by a different ClassLoader
-        // than the lambda.
-        checkBackwardsCompatibility(before, after,
-                () -> new RemoveUnnecessaryAndroidTestBaseLibrary());
-    }
-
-}
diff --git a/core/tests/coretests/src/android/content/pm/parsing/library/RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest.java b/core/tests/coretests/src/android/content/pm/parsing/library/RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest.java
deleted file mode 100644
index d3494d9..0000000
--- a/core/tests/coretests/src/android/content/pm/parsing/library/RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest.java
+++ /dev/null
@@ -1,168 +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.content.pm.parsing.library;
-
-import static android.content.pm.parsing.library.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY;
-
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.PackageImpl;
-import android.content.pm.parsing.ParsedPackage;
-import android.content.pm.parsing.library.PackageBackwardCompatibility.RemoveUnnecessaryOrgApacheHttpLegacyLibrary;
-import android.os.Build;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/**
- * Test for {@link RemoveUnnecessaryOrgApacheHttpLegacyLibrary}
- */
-@SmallTest
-@RunWith(JUnit4.class)
-public class RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest
-        extends PackageSharedLibraryUpdaterTest {
-
-    private static final String OTHER_LIBRARY = "other.library";
-
-    @Test
-    public void targeted_at_O() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // No change required.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_O_not_empty_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesLibrary(OTHER_LIBRARY)
-                .hideAsParsed();
-
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesLibrary(OTHER_LIBRARY)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        // No change required.
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_O_in_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed();
-
-        // org.apache.http.legacy should be removed from the libraries because it is provided
-        // on the bootclasspath and providing both increases start up cost unnecessarily.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void targeted_at_O_in_usesOptionalLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed();
-
-        // org.apache.http.legacy should be removed from the libraries because it is provided
-        // on the bootclasspath and providing both increases start up cost unnecessarily.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.O)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void in_usesLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed();
-
-        // org.apache.http.legacy should be removed from the libraries because it is provided
-        // on the bootclasspath and providing both increases start up cost unnecessarily.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void in_usesOptionalLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed();
-
-        // org.apache.http.legacy should be removed from the libraries because it is provided
-        // on the bootclasspath and providing both increases start up cost unnecessarily.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    @Test
-    public void in_bothLibraries() {
-        ParsedPackage before = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
-                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
-                .hideAsParsed();
-
-        // org.apache.http.legacy should be removed from the libraries because it is provided
-        // on the bootclasspath and providing both increases start up cost unnecessarily.
-        AndroidPackage after = PackageImpl.forParsing(PACKAGE_NAME)
-                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
-                .hideAsParsed()
-                .hideAsFinal();
-
-        checkBackwardsCompatibility(before, after);
-    }
-
-    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
-        // TODO(b/72538146) - Cannot use constructor reference here because it is also used in
-        // PackageBackwardCompatibility and that seems to create a package-private lambda in
-        // android.content.pm which this then tries to reuse but fails because it cannot access
-        // package-private classes/members because the test is loaded by a different ClassLoader
-        // than the lambda.
-        checkBackwardsCompatibility(before, after,
-                () -> new RemoveUnnecessaryOrgApacheHttpLegacyLibrary());
-    }
-}
diff --git a/core/tests/coretests/src/android/content/res/ConfigurationTest.java b/core/tests/coretests/src/android/content/res/ConfigurationTest.java
index 2c956c9..669138c 100644
--- a/core/tests/coretests/src/android/content/res/ConfigurationTest.java
+++ b/core/tests/coretests/src/android/content/res/ConfigurationTest.java
@@ -148,6 +148,15 @@
         assertEquals(SMALLEST_SCREEN_WIDTH_DP_UNDEFINED, config.smallestScreenWidthDp);
     }
 
+    @Test
+    public void testNightModeHelper() {
+        Configuration config = new Configuration();
+        config.uiMode = Configuration.UI_MODE_NIGHT_YES;
+        assertTrue(config.isNightModeActive());
+        config.uiMode = Configuration.UI_MODE_NIGHT_NO;
+        assertFalse(config.isNightModeActive());
+    }
+
     private void dumpDebug(File f, Configuration config) throws Exception {
         final AtomicFile af = new AtomicFile(f);
         FileOutputStream fos = af.startWrite();
diff --git a/core/tests/coretests/src/android/database/DatabaseGeneralTest.java b/core/tests/coretests/src/android/database/DatabaseGeneralTest.java
index 49fb75b..b8dbfd3 100644
--- a/core/tests/coretests/src/android/database/DatabaseGeneralTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseGeneralTest.java
@@ -466,179 +466,7 @@
             // expected
         }
     }
-    
-    @MediumTest
-    public void testTokenize() throws Exception {
-        Cursor c;
-        mDatabase.execSQL("CREATE TABLE tokens (" +
-                "token TEXT COLLATE unicode," +
-                "source INTEGER," +
-                "token_index INTEGER," +
-                "tag TEXT" +
-                ");");
-        mDatabase.execSQL("CREATE TABLE tokens_no_index (" +
-                "token TEXT COLLATE unicode," +
-                "source INTEGER" +
-                ");");
-        
-        Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT _TOKENIZE(NULL, NULL, NULL, NULL)", null));
-        Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT _TOKENIZE('tokens', NULL, NULL, NULL)", null));
-        Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT _TOKENIZE('tokens', 10, NULL, NULL)", null));
-        Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT _TOKENIZE('tokens', 10, 'some string', NULL)", null));
-     
-        Assert.assertEquals(3, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT _TOKENIZE('tokens', 11, 'some string ok', ' ', 1, 'foo')", null));
-        Assert.assertEquals(2, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT _TOKENIZE('tokens', 11, 'second field', ' ', 1, 'bar')", null));
 
-        Assert.assertEquals(3, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT _TOKENIZE('tokens_no_index', 20, 'some string ok', ' ')", null));
-        Assert.assertEquals(3, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT _TOKENIZE('tokens_no_index', 21, 'foo bar baz', ' ', 0)", null));
-
-        // test Chinese
-        String chinese = new String("\u4eac\u4ec5 \u5c3d\u5f84\u60ca"); 
-        Assert.assertEquals(2, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT _TOKENIZE('tokens', 12,'" + chinese + "', ' ', 1)", null));
-        
-        String icustr = new String("Fr\u00e9d\u00e9ric Hj\u00f8nnev\u00e5g");
-        
-        Assert.assertEquals(2, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT _TOKENIZE('tokens', 13, '" + icustr + "', ' ', 1)", null));
-        
-        Assert.assertEquals(9, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT count(*) from tokens;", null));      
-
-        String key = DatabaseUtils.getHexCollationKey("Frederic Hjonneva");
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT count(*) from tokens where token GLOB '" + key + "*'", null));      
-        Assert.assertEquals(13, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT token_index from tokens where token GLOB '" + key + "*'", null));
-        key = DatabaseUtils.getHexCollationKey("Hjonneva");
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT count(*) from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(13, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT token_index from tokens where token GLOB '" + key + "*'", null));
-        
-        key = DatabaseUtils.getHexCollationKey("some string ok");
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT count(*) from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(11, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT token_index from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals("foo", DatabaseUtils.stringForQuery(mDatabase,
-                "SELECT tag from tokens where token GLOB '" + key + "*'", null));
-        key = DatabaseUtils.getHexCollationKey("string");
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT count(*) from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(11, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT token_index from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals("foo", DatabaseUtils.stringForQuery(mDatabase,
-                "SELECT tag from tokens where token GLOB '" + key + "*'", null));
-        key = DatabaseUtils.getHexCollationKey("ok");
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT count(*) from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(11, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(2, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT token_index from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals("foo", DatabaseUtils.stringForQuery(mDatabase,
-                "SELECT tag from tokens where token GLOB '" + key + "*'", null));
-
-        key = DatabaseUtils.getHexCollationKey("second field");
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT count(*) from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(11, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT token_index from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals("bar", DatabaseUtils.stringForQuery(mDatabase,
-                "SELECT tag from tokens where token GLOB '" + key + "*'", null));
-        key = DatabaseUtils.getHexCollationKey("field");
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT count(*) from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(11, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT token_index from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals("bar", DatabaseUtils.stringForQuery(mDatabase,
-                "SELECT tag from tokens where token GLOB '" + key + "*'", null));
-
-        key = DatabaseUtils.getHexCollationKey(chinese);
-        String[] a = new String[1];
-        a[0] = key;
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT count(*) from tokens where token= ?", a));
-        Assert.assertEquals(12, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens where token= ?", a));
-        Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT token_index from tokens where token= ?", a));
-        a[0] += "*";
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 
-             "SELECT count(*) from tokens where token GLOB ?", a));        
-        Assert.assertEquals(12, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens where token GLOB ?", a));
-        Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT token_index from tokens where token GLOB ?", a));
-
-       Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT count(*) from tokens where token= '" + key + "'", null));
-       Assert.assertEquals(12, DatabaseUtils.longForQuery(mDatabase,
-               "SELECT source from tokens where token= '" + key + "'", null));
-       Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase,
-               "SELECT token_index from tokens where token= '" + key + "'", null));
-        
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT count(*) from tokens where token GLOB '" + key + "*'", null));        
-        Assert.assertEquals(12, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT token_index from tokens where token GLOB '" + key + "*'", null));
-        
-        key = DatabaseUtils.getHexCollationKey("\u4eac\u4ec5");
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT count(*) from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(12, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT token_index from tokens where token GLOB '" + key + "*'", null));
-        
-        key = DatabaseUtils.getHexCollationKey("\u5c3d\u5f84\u60ca");
-        Log.d("DatabaseGeneralTest", "key = " + key);
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT count(*) from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(12, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT token_index from tokens where token GLOB '" + key + "*'", null));
-        
-        Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 
-                "SELECT count(*) from tokens where token GLOB 'ab*'", null));        
-
-        key = DatabaseUtils.getHexCollationKey("some string ok");
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT count(*) from tokens_no_index where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(20, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens_no_index where token GLOB '" + key + "*'", null));
-
-        key = DatabaseUtils.getHexCollationKey("bar");
-        Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT count(*) from tokens_no_index where token GLOB '" + key + "*'", null));
-        Assert.assertEquals(21, DatabaseUtils.longForQuery(mDatabase,
-                "SELECT source from tokens_no_index where token GLOB '" + key + "*'", null));
-    }
-    
     @MediumTest
     public void testTransactions() throws Exception {
         mDatabase.execSQL("CREATE TABLE test (num INTEGER);");
diff --git a/core/tests/coretests/src/android/os/BrightnessLimit.java b/core/tests/coretests/src/android/os/BrightnessLimit.java
index 5a3724f..be79355 100644
--- a/core/tests/coretests/src/android/os/BrightnessLimit.java
+++ b/core/tests/coretests/src/android/os/BrightnessLimit.java
@@ -42,7 +42,7 @@
 
     public void onClick(View v) {
         DisplayManager dm = getSystemService(DisplayManager.class);
-        dm.setTemporaryBrightness(0);
+        dm.setTemporaryBrightness(0.0f);
         Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 0);
     }
 }
diff --git a/core/tests/coretests/src/android/os/BundleTest.java b/core/tests/coretests/src/android/os/BundleTest.java
index e4dc993..4cc70ba 100644
--- a/core/tests/coretests/src/android/os/BundleTest.java
+++ b/core/tests/coretests/src/android/os/BundleTest.java
@@ -30,12 +30,23 @@
  * Unit tests for bundle that requires accessing hidden APS.  Tests that can be written only with
  * public APIs should go in the CTS counterpart.
  *
- * Run with:
- * bit FrameworksCoreTests:android.os.BundleTest
+ * Run with: atest FrameworksCoreTests:android.os.BundleTest
  */
 @SmallTest
 @RunWith(AndroidJUnit4.class)
 public class BundleTest {
+
+    /**
+     * Take a bundle, write it to a parcel and return the parcel.
+     */
+    private Parcel getParcelledBundle(Bundle bundle) {
+        final Parcel p = Parcel.obtain();
+        // Don't use p.writeParcelabe(), which would write the creator, which we don't need.
+        bundle.writeToParcel(p, 0);
+        p.setDataPosition(0);
+        return p;
+    }
+
     /**
      * Create a test bundle, parcel it and return the parcel.
      */
@@ -48,12 +59,7 @@
             pipe[1].close();
             source.putParcelable("fd", pipe[0]);
         }
-        final Parcel p = Parcel.obtain();
-        // Don't use p.writeParcelabe(), which would write the creator, which we don't need.
-        source.writeToParcel(p, 0);
-        p.setDataPosition(0);
-
-        return p;
+        return getParcelledBundle(source);
     }
 
     /**
@@ -137,4 +143,78 @@
         checkBundle(b, withFd);
         p.recycle();
     }
+
+    @Test
+    public void kindofEquals_bothUnparcelled_same() {
+        Bundle bundle1 = new Bundle();
+        bundle1.putString("StringKey", "S");
+        bundle1.putInt("IntKey", 2);
+
+        Bundle bundle2 = new Bundle();
+        bundle2.putString("StringKey", "S");
+        bundle2.putInt("IntKey", 2);
+
+        assertTrue(BaseBundle.kindofEquals(bundle1, bundle2));
+    }
+
+    @Test
+    public void kindofEquals_bothUnparcelled_different() {
+        Bundle bundle1 = new Bundle();
+        bundle1.putString("StringKey", "S");
+        bundle1.putInt("IntKey", 2);
+
+        Bundle bundle2 = new Bundle();
+        bundle2.putString("StringKey", "T");
+        bundle2.putLong("LongKey", 30L);
+
+        assertFalse(BaseBundle.kindofEquals(bundle1, bundle2));
+    }
+
+    @Test
+    public void kindofEquals_bothParcelled_same() {
+        Bundle bundle1 = new Bundle();
+        bundle1.putString("StringKey", "S");
+        bundle1.putInt("IntKey", 2);
+        bundle1.readFromParcel(getParcelledBundle(bundle1));
+
+        Bundle bundle2 = new Bundle();
+        bundle2.putString("StringKey", "S");
+        bundle2.putInt("IntKey", 2);
+        bundle2.readFromParcel(getParcelledBundle(bundle2));
+
+        assertTrue(bundle1.isParcelled());
+        assertTrue(bundle2.isParcelled());
+        assertTrue(BaseBundle.kindofEquals(bundle1, bundle2));
+    }
+
+    @Test
+    public void kindofEquals_bothParcelled_different() {
+        Bundle bundle1 = new Bundle();
+        bundle1.putString("StringKey", "S");
+        bundle1.putInt("IntKey", 2);
+        bundle1.readFromParcel(getParcelledBundle(bundle1));
+
+        Bundle bundle2 = new Bundle();
+        bundle2.putString("StringKey", "T");
+        bundle2.putLong("LongKey", 5);
+        bundle2.readFromParcel(getParcelledBundle(bundle2));
+
+        assertTrue(bundle1.isParcelled());
+        assertTrue(bundle2.isParcelled());
+        assertFalse(BaseBundle.kindofEquals(bundle1, bundle2));
+    }
+
+    @Test
+    public void kindofEquals_ParcelledUnparcelled_empty() {
+        Bundle bundle1 = new Bundle();
+        bundle1.readFromParcel(getParcelledBundle(bundle1));
+
+        Bundle bundle2 = new Bundle();
+
+        assertTrue(bundle1.isParcelled());
+        assertFalse(bundle2.isParcelled());
+        // Even though one is parcelled and the other is not, both are empty, so it should
+        // return true
+        assertTrue(BaseBundle.kindofEquals(bundle1, bundle2));
+    }
 }
diff --git a/core/tests/coretests/src/android/os/PowerManagerTest.java b/core/tests/coretests/src/android/os/PowerManagerTest.java
index ea0a0fd..37e8d59 100644
--- a/core/tests/coretests/src/android/os/PowerManagerTest.java
+++ b/core/tests/coretests/src/android/os/PowerManagerTest.java
@@ -244,6 +244,28 @@
     }
 
     @Test
+    public void testGetThermalHeadroom() throws Exception {
+        float headroom = mPm.getThermalHeadroom(0);
+        // If the device doesn't support thermal headroom, return early
+        if (Float.isNaN(headroom)) {
+            return;
+        }
+        assertTrue("Expected non-negative headroom", headroom >= 0.0f);
+        assertTrue("Expected reasonably small headroom", headroom < 10.0f);
+
+        // Call again immediately to ensure rate limiting works
+        headroom = mPm.getThermalHeadroom(0);
+        assertTrue("Expected NaN because of rate limiting", Float.isNaN(headroom));
+
+        // Sleep for a second before attempting to call again so as to not get rate limited
+        Thread.sleep(1000);
+        headroom = mPm.getThermalHeadroom(5);
+        assertFalse("Expected data to still be available", Float.isNaN(headroom));
+        assertTrue("Expected non-negative headroom", headroom >= 0.0f);
+        assertTrue("Expected reasonably small headroom", headroom < 10.0f);
+    }
+
+    @Test
     public void testUserspaceRebootNotSupported_throwsUnsupportedOperationException() {
         // Can't use assumption framework with AndroidTestCase :(
         if (mPm.isRebootingUserspaceSupported()) {
diff --git a/core/tests/coretests/src/android/service/controls/ControlProviderServiceTest.java b/core/tests/coretests/src/android/service/controls/ControlProviderServiceTest.java
index 2648a06..78c88d7 100644
--- a/core/tests/coretests/src/android/service/controls/ControlProviderServiceTest.java
+++ b/core/tests/coretests/src/android/service/controls/ControlProviderServiceTest.java
@@ -21,6 +21,7 @@
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -62,8 +63,6 @@
     @Mock
     private IControlsActionCallback.Stub mActionCallback;
     @Mock
-    private IControlsLoadCallback.Stub mLoadCallback;
-    @Mock
     private IControlsSubscriber.Stub mSubscriber;
     @Mock
     private IIntentSender mIIntentSender;
@@ -79,8 +78,6 @@
 
         when(mActionCallback.asBinder()).thenCallRealMethod();
         when(mActionCallback.queryLocalInterface(any())).thenReturn(mActionCallback);
-        when(mLoadCallback.asBinder()).thenCallRealMethod();
-        when(mLoadCallback.queryLocalInterface(any())).thenReturn(mLoadCallback);
         when(mSubscriber.asBinder()).thenCallRealMethod();
         when(mSubscriber.queryLocalInterface(any())).thenReturn(mSubscriber);
 
@@ -102,22 +99,28 @@
         Control control2 = new Control.StatelessBuilder("TEST_ID_2", mPendingIntent)
                 .setDeviceType(DeviceTypes.TYPE_AIR_FRESHENER).build();
 
-        @SuppressWarnings("unchecked")
-        ArgumentCaptor<List<Control>> captor = ArgumentCaptor.forClass(List.class);
+        ArgumentCaptor<IControlsSubscription.Stub> subscriptionCaptor =
+                ArgumentCaptor.forClass(IControlsSubscription.Stub.class);
+        ArgumentCaptor<Control> controlCaptor =
+                ArgumentCaptor.forClass(Control.class);
 
         ArrayList<Control> list = new ArrayList<>();
         list.add(control1);
         list.add(control2);
 
         mControlsProviderService.setControls(list);
-        mControlsProvider.load(mLoadCallback);
+        mControlsProvider.load(mSubscriber);
         InstrumentationRegistry.getInstrumentation().waitForIdleSync();
 
-        verify(mLoadCallback).accept(eq(mToken), captor.capture());
-        List<Control> l = captor.getValue();
-        assertEquals(2, l.size());
-        assertTrue(equals(control1, l.get(0)));
-        assertTrue(equals(control2, l.get(1)));
+        verify(mSubscriber).onSubscribe(eq(mToken), subscriptionCaptor.capture());
+        subscriptionCaptor.getValue().request(1000);
+
+        verify(mSubscriber, times(2)).onNext(eq(mToken), controlCaptor.capture());
+        List<Control> values = controlCaptor.getAllValues();
+        assertTrue(equals(values.get(0), list.get(0)));
+        assertTrue(equals(values.get(1), list.get(1)));
+
+        verify(mSubscriber).onComplete(eq(mToken));
     }
 
     @Test
@@ -128,22 +131,57 @@
                 .build();
         Control statelessControl = new Control.StatelessBuilder(control).build();
 
-        @SuppressWarnings("unchecked")
-        ArgumentCaptor<List<Control>> captor = ArgumentCaptor.forClass(List.class);
+        ArgumentCaptor<IControlsSubscription.Stub> subscriptionCaptor =
+                ArgumentCaptor.forClass(IControlsSubscription.Stub.class);
+        ArgumentCaptor<Control> controlCaptor =
+                ArgumentCaptor.forClass(Control.class);
 
         ArrayList<Control> list = new ArrayList<>();
         list.add(control);
 
         mControlsProviderService.setControls(list);
-        mControlsProvider.load(mLoadCallback);
+        mControlsProvider.load(mSubscriber);
         InstrumentationRegistry.getInstrumentation().waitForIdleSync();
 
-        verify(mLoadCallback).accept(eq(mToken), captor.capture());
-        List<Control> l = captor.getValue();
-        assertEquals(1, l.size());
-        assertFalse(equals(control, l.get(0)));
-        assertTrue(equals(statelessControl, l.get(0)));
-        assertEquals(Control.STATUS_UNKNOWN, l.get(0).getStatus());
+        verify(mSubscriber).onSubscribe(eq(mToken), subscriptionCaptor.capture());
+        subscriptionCaptor.getValue().request(1000);
+
+        verify(mSubscriber).onNext(eq(mToken), controlCaptor.capture());
+        Control c = controlCaptor.getValue();
+        assertFalse(equals(control, c));
+        assertTrue(equals(statelessControl, c));
+        assertEquals(Control.STATUS_UNKNOWN, c.getStatus());
+
+        verify(mSubscriber).onComplete(eq(mToken));
+    }
+
+    @Test
+    public void testOnLoadSuggested_allStateless() throws RemoteException {
+        Control control1 = new Control.StatelessBuilder("TEST_ID", mPendingIntent).build();
+        Control control2 = new Control.StatelessBuilder("TEST_ID_2", mPendingIntent)
+                .setDeviceType(DeviceTypes.TYPE_AIR_FRESHENER).build();
+
+        ArgumentCaptor<IControlsSubscription.Stub> subscriptionCaptor =
+                ArgumentCaptor.forClass(IControlsSubscription.Stub.class);
+        ArgumentCaptor<Control> controlCaptor =
+                ArgumentCaptor.forClass(Control.class);
+
+        ArrayList<Control> list = new ArrayList<>();
+        list.add(control1);
+        list.add(control2);
+
+        mControlsProviderService.setControls(list);
+        mControlsProvider.loadSuggested(mSubscriber);
+        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
+
+        verify(mSubscriber).onSubscribe(eq(mToken), subscriptionCaptor.capture());
+        subscriptionCaptor.getValue().request(1);
+
+        verify(mSubscriber).onNext(eq(mToken), controlCaptor.capture());
+        Control c = controlCaptor.getValue();
+        assertTrue(equals(c, list.get(0)));
+
+        verify(mSubscriber).onComplete(eq(mToken));
     }
 
     @Test
@@ -219,14 +257,16 @@
         public Publisher<Control> publisherFor(List<String> ids) {
             return new Publisher<Control>() {
                 public void subscribe(final Subscriber s) {
-                    s.onSubscribe(new Subscription() {
-                            public void request(long n) {
-                                for (Control c : mControls) {
-                                    s.onNext(c);
-                                }
-                            }
-                            public void cancel() {}
-                        });
+                    s.onSubscribe(createSubscription(s, mControls));
+                }
+            };
+        }
+
+        @Override
+        public Publisher<Control> publisherForSuggested() {
+            return new Publisher<Control>() {
+                public void subscribe(final Subscriber s) {
+                    s.onSubscribe(createSubscription(s, mControls));
                 }
             };
         }
@@ -236,7 +276,19 @@
                 Consumer<Integer> cb) {
             cb.accept(ControlAction.RESPONSE_OK);
         }
+
+        private Subscription createSubscription(Subscriber s, List<Control> controls) {
+            return new Subscription() {
+                public void request(long n) {
+                    int i = 0;
+                    for (Control c : mControls) {
+                        if (i++ < n) s.onNext(c);
+                        else break;
+                    }
+                    s.onComplete();
+                }
+                public void cancel() {}
+            };
+        }
     }
 }
-
-
diff --git a/core/tests/coretests/src/android/service/controls/templates/ControlTemplateTest.java b/core/tests/coretests/src/android/service/controls/templates/ControlTemplateTest.java
index c9b5eec..292ac09 100644
--- a/core/tests/coretests/src/android/service/controls/templates/ControlTemplateTest.java
+++ b/core/tests/coretests/src/android/service/controls/templates/ControlTemplateTest.java
@@ -113,54 +113,6 @@
     }
 
     @Test
-    public void testUnparcelingCorrectClass_discreteToggle() {
-        ControlTemplate toParcel =
-                new DiscreteToggleTemplate(TEST_ID, mControlButton, mControlButton);
-
-        ControlTemplate fromParcel = parcelAndUnparcel(toParcel);
-
-        assertEquals(ControlTemplate.TYPE_DISCRETE_TOGGLE, fromParcel.getTemplateType());
-        assertTrue(fromParcel instanceof DiscreteToggleTemplate);
-    }
-
-    @Test
-    public void testUnparcelingCorrectClass_coordRange() {
-        ControlTemplate toParcel =
-                new CoordinatedRangeTemplate(TEST_ID, 0.1f,  0, 1, 0.5f, 1, 2, 1.5f, 0.1f, "%f");
-        ControlTemplate fromParcel = parcelAndUnparcel(toParcel);
-        assertEquals(ControlTemplate.TYPE_COORD_RANGE, fromParcel.getTemplateType());
-        assertTrue(fromParcel instanceof CoordinatedRangeTemplate);
-    }
-
-    @Test
-    public void testCoordRangeParameters_negativeMinGap() {
-        CoordinatedRangeTemplate template =
-                new CoordinatedRangeTemplate(TEST_ID, -0.1f,  0, 1, 0.5f, 1, 2, 1.5f, 0.1f, "%f");
-        assertEquals(0, template.getMinGap(), 0);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testCoordRangeParameters_differentStep() {
-        RangeTemplate rangeLow = new RangeTemplate(TEST_ID, 0, 1, 0.5f, 0.1f, "%f");
-        RangeTemplate rangeHigh = new RangeTemplate(TEST_ID, 0, 1, 0.75f, 0.2f, "%f");
-        new CoordinatedRangeTemplate(TEST_ID, 0.1f, rangeLow, rangeHigh);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testCoordRangeParameters_differentFormat() {
-        RangeTemplate rangeLow = new RangeTemplate(TEST_ID, 0, 1, 0.5f, 0.1f, "%f");
-        RangeTemplate rangeHigh = new RangeTemplate(TEST_ID, 0, 1, 0.75f, 0.1f, "%.1f");
-        new CoordinatedRangeTemplate(TEST_ID, 0.1f, rangeLow, rangeHigh);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testCoordRangeParameters_LargeMinGap() {
-        RangeTemplate rangeLow = new RangeTemplate(TEST_ID, 0, 1, 0.5f, 0.1f, "%f");
-        RangeTemplate rangeHigh = new RangeTemplate(TEST_ID, 0, 1, 0.75f, 0.1f, "%f");
-        new CoordinatedRangeTemplate(TEST_ID, 0.5f, rangeLow, rangeHigh);
-    }
-
-    @Test
     public void testUnparcelingCorrectClass_toggleRange() {
         ControlTemplate toParcel = new ToggleRangeTemplate(TEST_ID, mControlButton,
                 new RangeTemplate(TEST_ID, 0, 2, 1, 1, "%f"));
diff --git a/core/tests/coretests/src/android/view/CutoutSpecificationTest.java b/core/tests/coretests/src/android/view/CutoutSpecificationTest.java
new file mode 100644
index 0000000..b41f90c
--- /dev/null
+++ b/core/tests/coretests/src/android/view/CutoutSpecificationTest.java
@@ -0,0 +1,356 @@
+/*
+ * 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;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.testng.Assert.assertThrows;
+
+import android.graphics.Rect;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class CutoutSpecificationTest {
+    private static final String WITHOUT_BIND_CUTOUT_SPECIFICATION = "M 0,0\n"
+            + "h 48\n"
+            + "v 48\n"
+            + "h -48\n"
+            + "z\n"
+            + "@left\n"
+            + "@center_vertical\n"
+            + "M 0,0\n"
+            + "h 48\n"
+            + "v 48\n"
+            + "h -48\n"
+            + "z\n"
+            + "@left\n"
+            + "@center_vertical\n"
+            + "M 0,0\n"
+            + "h -48\n"
+            + "v 48\n"
+            + "h 48\n"
+            + "z\n"
+            + "@right\n"
+            + "@dp";
+    private static final String WITH_BIND_CUTOUT_SPECIFICATION = "M 0,0\n"
+            + "h 48\n"
+            + "v 48\n"
+            + "h -48\n"
+            + "z\n"
+            + "@left\n"
+            + "@center_vertical\n"
+            + "M 0,0\n"
+            + "h 48\n"
+            + "v 48\n"
+            + "h -48\n"
+            + "z\n"
+            + "@left\n"
+            + "@bind_left_cutout\n"
+            + "@center_vertical\n"
+            + "M 0,0\n"
+            + "h -48\n"
+            + "v 48\n"
+            + "h 48\n"
+            + "z\n"
+            + "@right\n"
+            + "@bind_right_cutout\n"
+            + "@bottom\n"
+            + "M 0,0\n"
+            + "h -24\n"
+            + "v -48\n"
+            + "h 48\n"
+            + "v 48\n"
+            + "z\n"
+            + "@dp";
+    private static final String CORNER_CUTOUT_SPECIFICATION = "M 0,0\n"
+            + "h 1\n"
+            + "v 1\n"
+            + "h -1\n"
+            + "z\n"
+            + "@left\n"
+            + "@cutout\n"
+            + "M 0, 0\n"
+            + "h -2\n"
+            + "v 2\n"
+            + "h 2\n"
+            + "z\n"
+            + "@right\n"
+            + "@bind_right_cutout\n"
+            + "@cutout\n"
+            + "M 0, 200\n"
+            + "h 3\n"
+            + "v -3\n"
+            + "h -3\n"
+            + "z\n"
+            + "@left\n"
+            + "@bind_left_cutout\n"
+            + "@bottom\n"
+            + "M 0, 0\n"
+            + "h -4\n"
+            + "v -4\n"
+            + "h 4\n"
+            + "z\n"
+            + "@right\n"
+            + "@dp";
+
+    private CutoutSpecification.Parser mParser;
+
+    /**
+     * Setup the necessary member field used by test methods.
+     */
+    @Before
+    public void setUp() {
+        mParser = new CutoutSpecification.Parser(3.5f, 1080, 1920);
+    }
+
+    @Test
+    public void parse_nullString_shouldTriggerException() {
+        assertThrows(NullPointerException.class, () -> mParser.parse(null));
+    }
+
+    @Test
+    public void parse_emptyString_pathShouldBeNull() {
+        CutoutSpecification cutoutSpecification = mParser.parse("");
+        assertThat(cutoutSpecification.getPath()).isNull();
+    }
+
+    @Test
+    public void parse_withoutBindMarker_shouldHaveNoLeftBound() {
+        CutoutSpecification cutoutSpecification = mParser.parse(WITHOUT_BIND_CUTOUT_SPECIFICATION);
+        assertThat(cutoutSpecification.getLeftBound()).isNull();
+    }
+
+    @Test
+    public void parse_withoutBindMarker_shouldHaveNoRightBound() {
+        CutoutSpecification cutoutSpecification = mParser.parse(WITHOUT_BIND_CUTOUT_SPECIFICATION);
+        assertThat(cutoutSpecification.getRightBound()).isNull();
+    }
+
+    @Test
+    public void parse_withBindMarker_shouldHaveLeftBound() {
+        CutoutSpecification cutoutSpecification = mParser.parse(WITH_BIND_CUTOUT_SPECIFICATION);
+        assertThat(cutoutSpecification.getLeftBound()).isEqualTo(new Rect(0, 960, 168, 1128));
+    }
+
+    @Test
+    public void parse_withBindMarker_shouldHaveTopBound() {
+        CutoutSpecification cutoutSpecification = mParser.parse(WITH_BIND_CUTOUT_SPECIFICATION);
+        assertThat(cutoutSpecification.getTopBound()).isEqualTo(new Rect(0, 0, 168, 168));
+    }
+
+    @Test
+    public void parse_withBindMarker_shouldHaveRightBound() {
+        CutoutSpecification cutoutSpecification = mParser.parse(WITH_BIND_CUTOUT_SPECIFICATION);
+        assertThat(cutoutSpecification.getRightBound()).isEqualTo(new Rect(912, 960, 1080, 1128));
+    }
+
+    @Test
+    public void parse_withBindMarker_shouldHaveBottomBound() {
+        CutoutSpecification cutoutSpecification = mParser.parse(WITH_BIND_CUTOUT_SPECIFICATION);
+        assertThat(cutoutSpecification.getBottomBound()).isEqualTo(new Rect(456, 1752, 624, 1920));
+    }
+
+    @Test
+    public void parse_withBindMarker_shouldMatchExpectedSafeInset() {
+        CutoutSpecification cutoutSpecification = mParser.parse(WITH_BIND_CUTOUT_SPECIFICATION);
+        assertThat(cutoutSpecification.getSafeInset()).isEqualTo(new Rect(168, 168, 168, 168));
+    }
+
+    @Test
+    public void parse_withBindMarker_tabletLikeDevice_shouldHaveLeftBound() {
+        CutoutSpecification cutoutSpecification = new CutoutSpecification.Parser(3.5f, 1920, 1080)
+                .parse(WITH_BIND_CUTOUT_SPECIFICATION);
+        assertThat(cutoutSpecification.getLeftBound()).isEqualTo(new Rect(0, 540, 168, 708));
+    }
+
+    @Test
+    public void parse_withBindMarker_tabletLikeDevice_shouldHaveTopBound() {
+        CutoutSpecification cutoutSpecification = new CutoutSpecification.Parser(3.5f, 1920, 1080)
+                .parse(WITH_BIND_CUTOUT_SPECIFICATION);
+        assertThat(cutoutSpecification.getTopBound()).isEqualTo(new Rect(0, 0, 168, 168));
+    }
+
+    @Test
+    public void parse_withBindMarker_tabletLikeDevice_shouldHaveRightBound() {
+        CutoutSpecification cutoutSpecification = new CutoutSpecification.Parser(3.5f, 1920, 1080)
+                .parse(WITH_BIND_CUTOUT_SPECIFICATION);
+        assertThat(cutoutSpecification.getRightBound()).isEqualTo(new Rect(1752, 540, 1920, 708));
+    }
+
+    @Test
+    public void parse_withBindMarker_tabletLikeDevice_shouldHaveBottomBound() {
+        CutoutSpecification cutoutSpecification = new CutoutSpecification.Parser(3.5f, 1920, 1080)
+                .parse(WITH_BIND_CUTOUT_SPECIFICATION);
+        assertThat(cutoutSpecification.getBottomBound()).isEqualTo(new Rect(876, 912, 1044, 1080));
+    }
+
+    @Test
+    public void parse_withBindMarker_tabletLikeDevice_shouldMatchExpectedSafeInset() {
+        CutoutSpecification cutoutSpecification = new CutoutSpecification.Parser(3.5f, 1920, 1080)
+                .parse(WITH_BIND_CUTOUT_SPECIFICATION);
+        assertThat(cutoutSpecification.getSafeInset()).isEqualTo(new Rect(168, 0, 168, 168));
+    }
+
+    @Test
+    public void parse_tallCutout_topBoundShouldMatchExpectedHeight() {
+        CutoutSpecification cutoutSpecification = mParser.parse("M 0,0\n"
+                + "L -48, 0\n"
+                + "L -44.3940446283, 36.0595537175\n"
+                + "C -43.5582133885, 44.4178661152 -39.6, 48.0 -31.2, 48.0\n"
+                + "L 31.2, 48.0\n"
+                + "C 39.6, 48.0 43.5582133885, 44.4178661152 44.3940446283, 36.0595537175\n"
+                + "L 48, 0\n"
+                + "Z\n"
+                + "@dp");
+
+        assertThat(cutoutSpecification.getTopBound().height()).isEqualTo(168);
+    }
+
+    @Test
+    public void parse_wideCutout_topBoundShouldMatchExpectedWidth() {
+        CutoutSpecification cutoutSpecification = mParser.parse("M 0,0\n"
+                + "L -72, 0\n"
+                + "L -69.9940446283, 20.0595537175\n"
+                + "C -69.1582133885, 28.4178661152 -65.2, 32.0 -56.8, 32.0\n"
+                + "L 56.8, 32.0\n"
+                + "C 65.2, 32.0 69.1582133885, 28.4178661152 69.9940446283, 20.0595537175\n"
+                + "L 72, 0\n"
+                + "Z\n"
+                + "@dp");
+
+        assertThat(cutoutSpecification.getTopBound().width()).isEqualTo(504);
+    }
+
+    @Test
+    public void parse_narrowCutout_topBoundShouldHaveExpectedWidth() {
+        CutoutSpecification cutoutSpecification = mParser.parse("M 0,0\n"
+                + "L -24, 0\n"
+                + "L -21.9940446283, 20.0595537175\n"
+                + "C -21.1582133885, 28.4178661152 -17.2, 32.0 -8.8, 32.0\n"
+                + "L 8.8, 32.0\n"
+                + "C 17.2, 32.0 21.1582133885, 28.4178661152 21.9940446283, 20.0595537175\n"
+                + "L 24, 0\n"
+                + "Z\n"
+                + "@dp");
+
+        assertThat(cutoutSpecification.getTopBound().width()).isEqualTo(168);
+    }
+
+    @Test
+    public void parse_doubleCutout_topBoundShouldHaveExpectedHeight() {
+        CutoutSpecification cutoutSpecification = mParser.parse("M 0,0\n"
+                + "L -72, 0\n"
+                + "L -69.9940446283, 20.0595537175\n"
+                + "C -69.1582133885, 28.4178661152 -65.2, 32.0 -56.8, 32.0\n"
+                + "L 56.8, 32.0\n"
+                + "C 65.2, 32.0 69.1582133885, 28.4178661152 69.9940446283, 20.0595537175\n"
+                + "L 72, 0\n"
+                + "Z\n"
+                + "@bottom\n"
+                + "M 0,0\n"
+                + "L -72, 0\n"
+                + "L -69.9940446283, -20.0595537175\n"
+                + "C -69.1582133885, -28.4178661152 -65.2, -32.0 -56.8, -32.0\n"
+                + "L 56.8, -32.0\n"
+                + "C 65.2, -32.0 69.1582133885, -28.4178661152 69.9940446283, -20"
+                + ".0595537175\n"
+                + "L 72, 0\n"
+                + "Z\n"
+                + "@dp");
+
+        assertThat(cutoutSpecification.getTopBound().height()).isEqualTo(112);
+    }
+
+    @Test
+    public void parse_cornerCutout_topBoundShouldHaveExpectedHeight() {
+        CutoutSpecification cutoutSpecification = mParser.parse("M 0,0\n"
+                + "L -48, 0\n"
+                + "C -48,48 -48,48 0,48\n"
+                + "Z\n"
+                + "@dp\n"
+                + "@right");
+
+        assertThat(cutoutSpecification.getTopBound().height()).isEqualTo(168);
+    }
+
+    @Test
+    public void parse_holeCutout_shouldMatchExpectedInset() {
+        CutoutSpecification cutoutSpecification = mParser.parse("M 20.0,20.0\n"
+                + "h 136\n"
+                + "v 136\n"
+                + "h -136\n"
+                + "Z\n"
+                + "@left");
+
+        assertThat(cutoutSpecification.getSafeInset()).isEqualTo(new Rect(0, 156, 0, 0));
+    }
+
+    @Test
+    public void getSafeInset_shortEdgeIsTopBottom_shouldMatchExpectedInset() {
+        CutoutSpecification cutoutSpecification =
+                new CutoutSpecification.Parser(2f, 200, 400)
+                        .parse(CORNER_CUTOUT_SPECIFICATION);
+
+        assertThat(cutoutSpecification.getSafeInset())
+                .isEqualTo(new Rect(0, 4, 0, 8));
+    }
+
+    @Test
+    public void getSafeInset_shortEdgeIsLeftRight_shouldMatchExpectedInset() {
+        CutoutSpecification cutoutSpecification =
+                new CutoutSpecification.Parser(2f, 400, 200)
+                        .parse(CORNER_CUTOUT_SPECIFICATION);
+
+        assertThat(cutoutSpecification.getSafeInset())
+                .isEqualTo(new Rect(6, 0, 8, 0));
+    }
+
+    @Test
+    public void parse_bottomLeftSpec_withBindLeftMarker_shouldBeLeftBound() {
+        CutoutSpecification cutoutSpecification =
+                new CutoutSpecification.Parser(2f, 400, 200)
+                        .parse("@bottom"
+                                + "M 0,0\n"
+                                + "v -10\n"
+                                + "h 10\n"
+                                + "v 10\n"
+                                + "z\n"
+                                + "@left\n"
+                                + "@bind_left_cutout");
+
+        assertThat(cutoutSpecification.getLeftBound())
+                .isEqualTo(new Rect(0, 190, 10, 200));
+    }
+
+    @Test
+    public void parse_bottomRightSpec_withBindRightMarker_shouldBeRightBound() {
+        CutoutSpecification cutoutSpecification =
+                new CutoutSpecification.Parser(2f, 400, 200)
+                        .parse("@bottom"
+                                + "M 0,0\n"
+                                + "v -10\n"
+                                + "h 10\n"
+                                + "v 10\n"
+                                + "z\n"
+                                + "@right\n"
+                                + "@bind_right_cutout");
+
+        assertThat(cutoutSpecification.getRightBound())
+                .isEqualTo(new Rect(390, 190, 400, 200));
+    }
+}
diff --git a/core/tests/coretests/src/android/view/InsetsAnimationControlImplTest.java b/core/tests/coretests/src/android/view/InsetsAnimationControlImplTest.java
index bdb8021..aa5101e 100644
--- a/core/tests/coretests/src/android/view/InsetsAnimationControlImplTest.java
+++ b/core/tests/coretests/src/android/view/InsetsAnimationControlImplTest.java
@@ -11,7 +11,7 @@
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
- * limitations under the License
+ * limitations under the License.
  */
 
 package android.view;
@@ -23,7 +23,6 @@
 import static android.view.WindowInsets.Type.systemBars;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
diff --git a/core/tests/coretests/src/android/view/InsetsControllerTest.java b/core/tests/coretests/src/android/view/InsetsControllerTest.java
index 2c9dba1..24fe2a0 100644
--- a/core/tests/coretests/src/android/view/InsetsControllerTest.java
+++ b/core/tests/coretests/src/android/view/InsetsControllerTest.java
@@ -45,6 +45,7 @@
 import android.graphics.Insets;
 import android.graphics.Point;
 import android.graphics.Rect;
+import android.os.CancellationSignal;
 import android.platform.test.annotations.Presubmit;
 import android.view.SurfaceControl.Transaction;
 import android.view.WindowInsets.Type;
@@ -516,6 +517,34 @@
     }
 
     @Test
+    public void testCancellation_afterGainingControl() throws Exception {
+        InsetsSourceControl control =
+                new InsetsSourceControl(ITYPE_STATUS_BAR, mLeash, new Point());
+        mController.onControlsChanged(new InsetsSourceControl[] { control });
+
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
+            WindowInsetsAnimationControlListener mockListener =
+                    mock(WindowInsetsAnimationControlListener.class);
+            CancellationSignal cancellationSignal = mController.controlWindowInsetsAnimation(
+                    statusBars(), 0 /* durationMs */,
+                    new LinearInterpolator(), mockListener);
+
+            // Ready gets deferred until next predraw
+            mViewRoot.getView().getViewTreeObserver().dispatchOnPreDraw();
+
+            verify(mockListener).onReady(any(), anyInt());
+
+            cancellationSignal.cancel();
+            verify(mockListener).onCancelled();
+        });
+        waitUntilNextFrame();
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
+            assertFalse(mController.getSourceConsumer(ITYPE_STATUS_BAR).isRequestedVisible());
+        });
+        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
+    }
+
+    @Test
     public void testControlImeNotReady() {
         prepareControls();
         InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
@@ -580,6 +609,28 @@
         });
     }
 
+    @Test
+    public void testControlImeNotReady_cancel() {
+        prepareControls();
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
+            WindowInsetsAnimationControlListener listener =
+                    mock(WindowInsetsAnimationControlListener.class);
+            mController.controlWindowInsetsAnimation(ime(), 0, new LinearInterpolator(), listener)
+                    .cancel();
+
+            verify(listener).onCancelled();
+
+            // Ready gets deferred until next predraw
+            mViewRoot.getView().getViewTreeObserver().dispatchOnPreDraw();
+
+            verify(listener, never()).onReady(any(), anyInt());
+
+            // Pretend that timeout is happening
+            mTestClock.fastForward(2500);
+            mTestHandler.timeAdvance();
+        });
+    }
+
     private void waitUntilNextFrame() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
         Choreographer.getMainThreadInstance().postCallback(Choreographer.CALLBACK_COMMIT,
diff --git a/core/tests/coretests/src/android/view/VerifiedKeyEventTest.kt b/core/tests/coretests/src/android/view/VerifiedKeyEventTest.kt
new file mode 100644
index 0000000..531d55d
--- /dev/null
+++ b/core/tests/coretests/src/android/view/VerifiedKeyEventTest.kt
@@ -0,0 +1,165 @@
+/*
+ * 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
+
+import android.view.InputDevice.SOURCE_KEYBOARD
+import android.view.KeyEvent.ACTION_DOWN
+import android.os.Parcel
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.runner.RunWith
+import org.junit.Test
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class VerifiedKeyEventTest {
+
+    @Test
+    fun testConstructor() {
+        val event = createVerifiedKeyEvent()
+
+        assertEquals(DEVICE_ID, event.deviceId)
+        assertEquals(EVENT_TIME_NANOS, event.eventTimeNanos)
+        assertEquals(SOURCE, event.source)
+        assertEquals(DISPLAY_ID, event.displayId)
+
+        assertEquals(ACTION, event.action)
+        assertEquals(DOWN_TIME_NANOS, event.downTimeNanos)
+        assertEquals(FLAGS, event.flags)
+        assertEquals(KEY_CODE, event.keyCode)
+        assertEquals(SCAN_CODE, event.scanCode)
+        assertEquals(META_STATE, event.metaState)
+        assertEquals(REPEAT_COUNT, event.repeatCount)
+    }
+
+    /**
+     * Write to parcel as a KeyEvent, read back as a KeyEvent
+     */
+    @Test
+    fun testParcelUnparcel() {
+        val keyEvent = createVerifiedKeyEvent()
+        val parcel = Parcel.obtain()
+        keyEvent.writeToParcel(parcel, 0 /*flags*/)
+        parcel.setDataPosition(0)
+
+        val unparceledKeyEvent = VerifiedKeyEvent.CREATOR.createFromParcel(parcel)
+        parcel.recycle()
+
+        compareVerifiedKeyEvents(keyEvent, unparceledKeyEvent)
+    }
+
+    /**
+     * Write to parcel as an InputEvent, read back as an InputEvent
+     */
+    @Test
+    fun testParcelInputEvent() {
+        val keyEvent = createVerifiedKeyEvent()
+        val inputEvent: VerifiedInputEvent = keyEvent
+        val parcel = Parcel.obtain()
+        inputEvent.writeToParcel(parcel, 0 /*flags*/)
+        parcel.setDataPosition(0)
+
+        val unparceledEvent = VerifiedInputEvent.CREATOR.createFromParcel(parcel)
+        parcel.recycle()
+
+        assertTrue(unparceledEvent is VerifiedKeyEvent)
+        compareVerifiedKeyEvents(keyEvent, unparceledEvent as VerifiedKeyEvent)
+    }
+
+    /**
+     * Write to parcel as a KeyEvent, read back as an InputEvent
+     */
+    @Test
+    fun testParcelKeyEvent() {
+        val keyEvent = createVerifiedKeyEvent()
+        val parcel = Parcel.obtain()
+        keyEvent.writeToParcel(parcel, 0 /*flags*/)
+        parcel.setDataPosition(0)
+
+        val unparceledEvent = VerifiedInputEvent.CREATOR.createFromParcel(parcel)
+        parcel.recycle()
+
+        assertTrue(unparceledEvent is VerifiedKeyEvent)
+        compareVerifiedKeyEvents(keyEvent, unparceledEvent as VerifiedKeyEvent)
+    }
+
+    /**
+     * Write to parcel as an InputEvent, read back as a KeyEvent
+     */
+    @Test
+    fun testParcelInputToKeyEvent() {
+        val keyEvent = createVerifiedKeyEvent()
+        val inputEvent: VerifiedInputEvent = keyEvent
+        val parcel = Parcel.obtain()
+        inputEvent.writeToParcel(parcel, 0 /*flags*/)
+        parcel.setDataPosition(0)
+
+        val unparceledEvent = VerifiedKeyEvent.CREATOR.createFromParcel(parcel)
+        parcel.recycle()
+
+        compareVerifiedKeyEvents(keyEvent, unparceledEvent)
+    }
+
+    @Test
+    fun testEqualsHashcode() {
+        val keyEvent1 = createVerifiedKeyEvent()
+        val keyEvent2 = createVerifiedKeyEvent()
+        compareVerifiedKeyEvents(keyEvent1, keyEvent2)
+    }
+
+    companion object {
+        private const val DEVICE_ID = 0
+        private const val EVENT_TIME_NANOS: Long = 2000
+        private const val SOURCE = SOURCE_KEYBOARD
+        private const val DISPLAY_ID = 2
+
+        private const val ACTION = ACTION_DOWN
+        private const val DOWN_TIME_NANOS: Long = 1000
+        private const val FLAGS = 3
+        private const val KEY_CODE = 4
+        private const val SCAN_CODE = 5
+        private const val META_STATE = 11
+        private const val REPEAT_COUNT = 22
+
+        private fun createVerifiedKeyEvent(): VerifiedKeyEvent {
+            return VerifiedKeyEvent(DEVICE_ID, EVENT_TIME_NANOS, SOURCE, DISPLAY_ID, ACTION,
+                    DOWN_TIME_NANOS, FLAGS, KEY_CODE, SCAN_CODE, META_STATE, REPEAT_COUNT)
+        }
+
+        private fun compareVerifiedKeyEvents(event1: VerifiedKeyEvent, event2: VerifiedKeyEvent) {
+            assertEquals(event1, event2)
+            assertEquals(event1.hashCode(), event2.hashCode())
+
+            assertEquals(event1.deviceId, event2.deviceId)
+            assertEquals(event1.eventTimeNanos, event2.eventTimeNanos)
+            assertEquals(event1.source, event2.source)
+            assertEquals(event1.displayId, event2.displayId)
+
+            assertEquals(event1.action, event2.action)
+            assertEquals(event1.downTimeNanos, event2.downTimeNanos)
+            assertEquals(event1.flags, event2.flags)
+            assertEquals(event1.keyCode, event2.keyCode)
+            assertEquals(event1.scanCode, event2.scanCode)
+            assertEquals(event1.metaState, event2.metaState)
+            assertEquals(event1.repeatCount, event2.repeatCount)
+        }
+    }
+}
diff --git a/core/tests/coretests/src/android/view/VerifiedMotionEventTest.kt b/core/tests/coretests/src/android/view/VerifiedMotionEventTest.kt
new file mode 100644
index 0000000..2c4851f
--- /dev/null
+++ b/core/tests/coretests/src/android/view/VerifiedMotionEventTest.kt
@@ -0,0 +1,185 @@
+/*
+ * 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
+
+import android.view.InputDevice.SOURCE_TOUCHSCREEN
+import android.view.MotionEvent.ACTION_MOVE
+import android.view.MotionEvent.FLAG_WINDOW_IS_OBSCURED
+import android.view.MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED
+import android.view.MotionEvent.FLAG_TAINTED
+import android.os.Parcel
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.runner.RunWith
+import org.junit.Test
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class VerifiedMotionEventTest {
+
+    @Test
+    fun testConstructor() {
+        val event = createVerifiedMotionEvent()
+
+        assertEquals(DEVICE_ID, event.deviceId)
+        assertEquals(EVENT_TIME_NANOS, event.eventTimeNanos)
+        assertEquals(SOURCE, event.source)
+        assertEquals(DISPLAY_ID, event.displayId)
+
+        assertEquals(RAW_X, event.rawX, 0f)
+        assertEquals(RAW_Y, event.rawY, 0f)
+        assertEquals(ACTION_MASKED, event.actionMasked)
+        assertEquals(DOWN_TIME_NANOS, event.downTimeNanos)
+        assertEquals(META_STATE, event.metaState)
+        assertEquals(BUTTON_STATE, event.buttonState)
+    }
+
+    /**
+     * Write to parcel as a MotionEvent, read back as a MotionEvent
+     */
+    @Test
+    fun testParcelUnparcel() {
+        val motionEvent = createVerifiedMotionEvent()
+        val parcel = Parcel.obtain()
+        motionEvent.writeToParcel(parcel, 0 /*flags*/)
+        parcel.setDataPosition(0)
+
+        val unparceledMotionEvent = VerifiedMotionEvent.CREATOR.createFromParcel(parcel)
+        parcel.recycle()
+
+        compareVerifiedMotionEvents(motionEvent, unparceledMotionEvent)
+    }
+
+    /**
+     * Write to parcel as an InputEvent, read back as an InputEvent
+     */
+    @Test
+    fun testParcelInputEvent() {
+        val motionEvent = createVerifiedMotionEvent()
+        val inputEvent: VerifiedInputEvent = motionEvent
+        val parcel = Parcel.obtain()
+        inputEvent.writeToParcel(parcel, 0 /*flags*/)
+        parcel.setDataPosition(0)
+
+        val unparceledEvent = VerifiedInputEvent.CREATOR.createFromParcel(parcel)
+        parcel.recycle()
+
+        assertTrue(unparceledEvent is VerifiedMotionEvent)
+        compareVerifiedMotionEvents(motionEvent, unparceledEvent as VerifiedMotionEvent)
+    }
+
+    /**
+     * Write to parcel as a MotionEvent, read back as an InputEvent
+     */
+    @Test
+    fun testParcelMotionEvent() {
+        val motionEvent = createVerifiedMotionEvent()
+        val parcel = Parcel.obtain()
+        motionEvent.writeToParcel(parcel, 0 /*flags*/)
+        parcel.setDataPosition(0)
+
+        val unparceledEvent = VerifiedInputEvent.CREATOR.createFromParcel(parcel)
+        parcel.recycle()
+
+        assertTrue(unparceledEvent is VerifiedMotionEvent)
+        compareVerifiedMotionEvents(motionEvent, unparceledEvent as VerifiedMotionEvent)
+    }
+
+    /**
+     * Write to parcel as an InputEvent, read back as a MotionEvent
+     */
+    @Test
+    fun testParcelInputToMotionEvent() {
+        val motionEvent = createVerifiedMotionEvent()
+        val inputEvent: VerifiedInputEvent = motionEvent
+        val parcel = Parcel.obtain()
+        inputEvent.writeToParcel(parcel, 0 /*flags*/)
+        parcel.setDataPosition(0)
+
+        val unparceledEvent = VerifiedMotionEvent.CREATOR.createFromParcel(parcel)
+        parcel.recycle()
+
+        compareVerifiedMotionEvents(motionEvent, unparceledEvent)
+    }
+
+    @Test
+    fun testGetFlag() {
+        val motionEvent = createVerifiedMotionEvent()
+        // Invalid value of a flag
+        assertNull(motionEvent.getFlag(0))
+        // Flag that was not set
+        assertEquals(false, motionEvent.getFlag(FLAG_WINDOW_IS_PARTIALLY_OBSCURED))
+        // Flag that was set
+        assertEquals(true, motionEvent.getFlag(FLAG_WINDOW_IS_OBSCURED))
+        // Only 1 flag at a time is accepted
+        assertNull(motionEvent.getFlag(
+                FLAG_WINDOW_IS_PARTIALLY_OBSCURED or FLAG_WINDOW_IS_OBSCURED))
+        // Flag that is not verified returns null
+        assertNull(motionEvent.getFlag(FLAG_TAINTED))
+    }
+
+    @Test
+    fun testEqualsHashcode() {
+        val motionEvent1 = createVerifiedMotionEvent()
+        val motionEvent2 = createVerifiedMotionEvent()
+        compareVerifiedMotionEvents(motionEvent1, motionEvent2)
+    }
+
+    companion object {
+        private const val DEVICE_ID = 0
+        private const val EVENT_TIME_NANOS: Long = 2000
+        private const val SOURCE = SOURCE_TOUCHSCREEN
+        private const val DISPLAY_ID = 2
+        private const val RAW_X = 100f
+        private const val RAW_Y = 200f
+        private const val ACTION_MASKED = ACTION_MOVE
+        private const val DOWN_TIME_NANOS: Long = 1000
+        private const val FLAGS = FLAG_WINDOW_IS_OBSCURED
+        private const val META_STATE = 11
+        private const val BUTTON_STATE = 22
+
+        private fun createVerifiedMotionEvent(): VerifiedMotionEvent {
+            return VerifiedMotionEvent(DEVICE_ID, EVENT_TIME_NANOS, SOURCE, DISPLAY_ID,
+                    RAW_X, RAW_Y, ACTION_MASKED, DOWN_TIME_NANOS, FLAGS, META_STATE, BUTTON_STATE)
+        }
+
+        private fun compareVerifiedMotionEvents(
+            event1: VerifiedMotionEvent,
+            event2: VerifiedMotionEvent
+        ) {
+            assertEquals(event1, event2)
+            assertEquals(event1.hashCode(), event2.hashCode())
+
+            assertEquals(event1.deviceId, event2.deviceId)
+            assertEquals(event1.eventTimeNanos, event2.eventTimeNanos)
+            assertEquals(event1.source, event2.source)
+            assertEquals(event1.displayId, event2.displayId)
+
+            assertEquals(event1.rawX, event2.rawX, 0f)
+            assertEquals(event1.rawY, event2.rawY, 0f)
+            assertEquals(event1.actionMasked, event2.actionMasked)
+            assertEquals(event1.downTimeNanos, event2.downTimeNanos)
+            assertEquals(event1.metaState, event2.metaState)
+            assertEquals(event1.buttonState, event2.buttonState)
+        }
+    }
+}
diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java
index ade1e0d..79e7c50 100644
--- a/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java
+++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java
@@ -46,7 +46,7 @@
     // The number of fields tested in the corresponding CTS AccessibilityNodeInfoTest:
     // See fullyPopulateAccessibilityNodeInfo, assertEqualsAccessibilityNodeInfo,
     // and assertAccessibilityNodeInfoCleared in that class.
-    private static final int NUM_MARSHALLED_PROPERTIES = 38;
+    private static final int NUM_MARSHALLED_PROPERTIES = 39;
 
     /**
      * The number of properties that are purposely not marshalled
diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java
index 8b8e9ea..75a7504 100644
--- a/core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java
+++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java
@@ -19,7 +19,6 @@
 import android.accessibilityservice.AccessibilityServiceInfo;
 import android.accessibilityservice.IAccessibilityServiceConnection;
 import android.content.pm.ParceledListSlice;
-import android.graphics.Bitmap;
 import android.graphics.Region;
 import android.os.Bundle;
 import android.os.IBinder;
@@ -157,9 +156,9 @@
         return -1;
     }
 
-    public Bitmap takeScreenshot(int displayId) {
-        return null;
-    }
+    public void takeScreenshot(int displayId, RemoteCallback callback) {}
 
-    public void takeScreenshotWithCallback(int displayId, RemoteCallback callback) {}
+    public void setTouchExplorationPassthroughRegion(int displayId, Region region) {}
+
+    public void setGestureDetectionPassthroughRegion(int displayId, Region region) {}
 }
diff --git a/core/tests/coretests/src/android/view/inputmethod/EditorInfoTest.java b/core/tests/coretests/src/android/view/inputmethod/EditorInfoTest.java
index 12c057f..02ffc00 100644
--- a/core/tests/coretests/src/android/view/inputmethod/EditorInfoTest.java
+++ b/core/tests/coretests/src/android/view/inputmethod/EditorInfoTest.java
@@ -20,11 +20,11 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.anyInt;
 
 import android.annotation.Nullable;
 import android.os.Parcel;
 import android.os.UserHandle;
-import android.text.Spannable;
 import android.text.SpannableStringBuilder;
 import android.text.TextUtils;
 
@@ -41,6 +41,7 @@
 @RunWith(AndroidJUnit4.class)
 public class EditorInfoTest {
     private static final int TEST_USER_ID = 42;
+    private static final int LONG_EXP_TEXT_LENGTH = EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH * 2;
 
     /**
      * Makes sure that {@code null} {@link EditorInfo#targetInputMethodUser} can be copied via
@@ -79,8 +80,8 @@
     }
 
     @Test
-    public void testNullTextInputComposeInitialSurroundingText() {
-        final Spannable testText = null;
+    public void setInitialText_nullInputText_throwsException() {
+        final CharSequence testText = null;
         final EditorInfo editorInfo = new EditorInfo();
 
         try {
@@ -92,56 +93,75 @@
     }
 
     @Test
-    public void testNonNullTextInputComposeInitialSurroundingText() {
-        final Spannable testText = createTestText(/* prependLength= */ 0,
-                EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH);
-        final EditorInfo editorInfo = new EditorInfo();
+    public void setInitialText_cursorAtHead_dividesByCursorPosition() {
+        final CharSequence testText = createTestText(EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH);
 
-        // Cursor at position 0.
-        int selectionLength = 0;
+        final EditorInfo editorInfo = new EditorInfo();
+        final int selectionLength = 0;
         editorInfo.initialSelStart = 0;
         editorInfo.initialSelEnd = editorInfo.initialSelStart + selectionLength;
-        int expectedTextBeforeCursorLength = 0;
-        int expectedTextAfterCursorLength = testText.length();
+        final int expectedTextBeforeCursorLength = 0;
+        final int expectedTextAfterCursorLength = testText.length();
 
         editorInfo.setInitialSurroundingText(testText);
 
         assertExpectedTextLength(editorInfo, expectedTextBeforeCursorLength, selectionLength,
                 expectedTextAfterCursorLength);
+    }
 
-        // Cursor at the end.
+    @Test
+    public void setInitialText_cursorAtTail_dividesByCursorPosition() {
+        final CharSequence testText = createTestText(EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH);
+        final EditorInfo editorInfo = new EditorInfo();
+        final int selectionLength = 0;
         editorInfo.initialSelStart = testText.length() - selectionLength;
         editorInfo.initialSelEnd = testText.length();
-        expectedTextBeforeCursorLength = testText.length();
-        expectedTextAfterCursorLength = 0;
+        final int expectedTextBeforeCursorLength = testText.length();
+        final int expectedTextAfterCursorLength = 0;
 
         editorInfo.setInitialSurroundingText(testText);
 
         assertExpectedTextLength(editorInfo, expectedTextBeforeCursorLength, selectionLength,
                 expectedTextAfterCursorLength);
+    }
 
-        // Cursor at the middle.
-        selectionLength = 2;
+    @Test
+    public void setInitialText_cursorAtMiddle_dividesByCursorPosition() {
+        final CharSequence testText = createTestText(EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH);
+        final EditorInfo editorInfo = new EditorInfo();
+        final int selectionLength = 2;
         editorInfo.initialSelStart = testText.length() / 2;
         editorInfo.initialSelEnd = editorInfo.initialSelStart + selectionLength;
-        expectedTextBeforeCursorLength = editorInfo.initialSelStart;
-        expectedTextAfterCursorLength = testText.length() - editorInfo.initialSelEnd;
+        final int expectedTextBeforeCursorLength = editorInfo.initialSelStart;
+        final int expectedTextAfterCursorLength = testText.length() - editorInfo.initialSelEnd;
 
         editorInfo.setInitialSurroundingText(testText);
 
         assertExpectedTextLength(editorInfo, expectedTextBeforeCursorLength, selectionLength,
                 expectedTextAfterCursorLength);
+    }
 
-        // Accidentally swap selection start and end.
+    @Test
+    public void setInitialText_incorrectCursorOrder_correctsThenDivide() {
+        final CharSequence testText = createTestText(EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH);
+        final EditorInfo editorInfo = new EditorInfo();
+        final int selectionLength = 2;
         editorInfo.initialSelEnd = testText.length() / 2;
         editorInfo.initialSelStart = editorInfo.initialSelEnd + selectionLength;
+        final int expectedTextBeforeCursorLength = testText.length() / 2;
+        final int expectedTextAfterCursorLength = testText.length() - testText.length() / 2
+                - selectionLength;
 
         editorInfo.setInitialSurroundingText(testText);
 
         assertExpectedTextLength(editorInfo, expectedTextBeforeCursorLength, selectionLength,
                 expectedTextAfterCursorLength);
+    }
 
-        // Invalid cursor position.
+    @Test
+    public void setInitialText_invalidCursorPosition_returnsNull() {
+        final CharSequence testText = createTestText(EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH);
+        final EditorInfo editorInfo = new EditorInfo();
         editorInfo.initialSelStart = -1;
 
         editorInfo.setInitialSurroundingText(testText);
@@ -153,64 +173,33 @@
     }
 
     @Test
-    public void testTooLongTextInputComposeInitialSurroundingText() {
-        final Spannable testText = createTestText(/* prependLength= */ 0,
-                EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH + 2);
+    public void setOverSizeInitialText_cursorAtMiddle_dividesProportionately() {
+        final CharSequence testText = createTestText(EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH + 2);
         final EditorInfo editorInfo = new EditorInfo();
-
-        // Cursor at position 0.
-        int selectionLength = 0;
-        editorInfo.initialSelStart = 0;
-        editorInfo.initialSelEnd = 0 + selectionLength;
-        int expectedTextBeforeCursorLength = 0;
-        int expectedTextAfterCursorLength = editorInfo.MEMORY_EFFICIENT_TEXT_LENGTH;
-
-        editorInfo.setInitialSurroundingText(testText);
-
-        assertExpectedTextLength(editorInfo, expectedTextBeforeCursorLength, selectionLength,
-                expectedTextAfterCursorLength);
-
-        // Cursor at the end.
-        editorInfo.initialSelStart = testText.length() - selectionLength;
-        editorInfo.initialSelEnd = testText.length();
-        expectedTextBeforeCursorLength = editorInfo.MEMORY_EFFICIENT_TEXT_LENGTH;
-        expectedTextAfterCursorLength = 0;
-
-        editorInfo.setInitialSurroundingText(testText);
-
-        assertExpectedTextLength(editorInfo, expectedTextBeforeCursorLength, selectionLength,
-                expectedTextAfterCursorLength);
-
-        // Cursor at the middle.
-        selectionLength = 2;
+        final int selectionLength = 2;
         editorInfo.initialSelStart = testText.length() / 2;
         editorInfo.initialSelEnd = editorInfo.initialSelStart + selectionLength;
-        expectedTextBeforeCursorLength = Math.min(editorInfo.initialSelStart,
+        final int expectedTextBeforeCursorLength = Math.min(editorInfo.initialSelStart,
                 (int) (0.8 * (EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH - selectionLength)));
-        expectedTextAfterCursorLength = EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH
+        final int expectedTextAfterCursorLength = EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH
                 - expectedTextBeforeCursorLength - selectionLength;
 
         editorInfo.setInitialSurroundingText(testText);
 
         assertExpectedTextLength(editorInfo, expectedTextBeforeCursorLength, selectionLength,
                 expectedTextAfterCursorLength);
+    }
 
-        // Accidentally swap selection start and end.
-        editorInfo.initialSelEnd = testText.length() / 2;
-        editorInfo.initialSelStart = editorInfo.initialSelEnd + selectionLength;
-
-        editorInfo.setInitialSurroundingText(testText);
-
-        assertExpectedTextLength(editorInfo, expectedTextBeforeCursorLength, selectionLength,
-                expectedTextAfterCursorLength);
-
-        // Selection too long, selected text should be dropped.
-        selectionLength = EditorInfo.MAX_INITIAL_SELECTION_LENGTH + 1;
+    @Test
+    public void setOverSizeInitialText_overSizeSelection_dropsSelection() {
+        final CharSequence testText = createTestText(EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH + 2);
+        final EditorInfo editorInfo = new EditorInfo();
+        final int selectionLength = EditorInfo.MAX_INITIAL_SELECTION_LENGTH + 1;
         editorInfo.initialSelStart = testText.length() / 2;
         editorInfo.initialSelEnd = editorInfo.initialSelStart + selectionLength;
-        expectedTextBeforeCursorLength = Math.min(editorInfo.initialSelStart,
+        final int expectedTextBeforeCursorLength = Math.min(editorInfo.initialSelStart,
                 (int) (0.8 * EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH));
-        expectedTextAfterCursorLength = testText.length() - editorInfo.initialSelEnd;
+        final int expectedTextAfterCursorLength = testText.length() - editorInfo.initialSelEnd;
 
         editorInfo.setInitialSurroundingText(testText);
 
@@ -219,34 +208,59 @@
     }
 
     @Test
-    public void testTooLongSubTextInputComposeInitialSurroundingText() {
-        final int prependLength = 5;
-        final int subTextLength = EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH;
-        final Spannable fullText = createTestText(prependLength, subTextLength);
+    public void setInitialSubText_trimmedSubText_dividesByOriginalCursorPosition() {
+        final String prefixString = "prefix";
+        final CharSequence subText = createTestText(EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH);
+        final CharSequence originalText = TextUtils.concat(prefixString, subText);
         final EditorInfo editorInfo = new EditorInfo();
-        // Cursor at the middle.
-        final int selectionLength = 2;
-        editorInfo.initialSelStart = fullText.length() / 2;
-        editorInfo.initialSelEnd = editorInfo.initialSelStart + selectionLength;
-        // #prependLength characters will be trimmed out.
-        final Spannable expectedTextBeforeCursor = createExpectedText(/* startNumber= */0,
-                editorInfo.initialSelStart - prependLength);
-        final Spannable expectedSelectedText = createExpectedText(
-                editorInfo.initialSelStart - prependLength, selectionLength);
-        final Spannable expectedTextAfterCursor = createExpectedText(
-                editorInfo.initialSelEnd - prependLength,
-                fullText.length() - editorInfo.initialSelEnd);
+        final int selLength = 2;
+        editorInfo.initialSelStart = originalText.length() / 2;
+        editorInfo.initialSelEnd = editorInfo.initialSelStart + selLength;
+        final CharSequence expectedTextBeforeCursor = createExpectedText(/* startNumber= */0,
+                editorInfo.initialSelStart - prefixString.length());
+        final CharSequence expectedSelectedText = createExpectedText(
+                editorInfo.initialSelStart - prefixString.length(), selLength);
+        final CharSequence expectedTextAfterCursor = createExpectedText(
+                editorInfo.initialSelEnd - prefixString.length(),
+                originalText.length() - editorInfo.initialSelEnd);
 
-        editorInfo.setInitialSurroundingSubText(fullText.subSequence(prependLength,
-                fullText.length()), prependLength);
+        editorInfo.setInitialSurroundingSubText(subText, prefixString.length());
 
         assertTrue(TextUtils.equals(expectedTextBeforeCursor,
-                editorInfo.getInitialTextBeforeCursor(editorInfo.MEMORY_EFFICIENT_TEXT_LENGTH,
-                        InputConnection.GET_TEXT_WITH_STYLES)));
+                editorInfo.getInitialTextBeforeCursor(LONG_EXP_TEXT_LENGTH, anyInt())));
         assertTrue(TextUtils.equals(expectedSelectedText,
-                editorInfo.getInitialSelectedText(InputConnection.GET_TEXT_WITH_STYLES)));
+                editorInfo.getInitialSelectedText(anyInt())));
         assertTrue(TextUtils.equals(expectedTextAfterCursor,
-                editorInfo.getInitialTextAfterCursor(editorInfo.MEMORY_EFFICIENT_TEXT_LENGTH,
+                editorInfo.getInitialTextAfterCursor(LONG_EXP_TEXT_LENGTH, anyInt())));
+    }
+
+    @Test
+    public void initialSurroundingText_wrapIntoParcel_staysIntact() {
+        // EditorInfo.InitialSurroundingText is not visible to test class. But all its key elements
+        // must stay intact for its getter methods to return correct value and it will be wrapped
+        // into its outer class for parcel transfer, therefore we can verify its parcel
+        // wrapping/unwrapping logic through its outer class.
+        final CharSequence testText = createTestText(EditorInfo.MEMORY_EFFICIENT_TEXT_LENGTH);
+        final EditorInfo sourceEditorInfo = new EditorInfo();
+        final int selectionLength = 2;
+        sourceEditorInfo.initialSelStart = testText.length() / 2;
+        sourceEditorInfo.initialSelEnd = sourceEditorInfo.initialSelStart + selectionLength;
+        sourceEditorInfo.setInitialSurroundingText(testText);
+
+        final EditorInfo targetEditorInfo = cloneViaParcel(sourceEditorInfo);
+
+        assertTrue(TextUtils.equals(
+                sourceEditorInfo.getInitialTextBeforeCursor(LONG_EXP_TEXT_LENGTH,
+                        InputConnection.GET_TEXT_WITH_STYLES),
+                targetEditorInfo.getInitialTextBeforeCursor(LONG_EXP_TEXT_LENGTH,
+                        InputConnection.GET_TEXT_WITH_STYLES)));
+        assertTrue(TextUtils.equals(
+                sourceEditorInfo.getInitialSelectedText(InputConnection.GET_TEXT_WITH_STYLES),
+                targetEditorInfo.getInitialSelectedText(InputConnection.GET_TEXT_WITH_STYLES)));
+        assertTrue(TextUtils.equals(
+                sourceEditorInfo.getInitialTextAfterCursor(LONG_EXP_TEXT_LENGTH,
+                        InputConnection.GET_TEXT_WITH_STYLES),
+                targetEditorInfo.getInitialTextAfterCursor(LONG_EXP_TEXT_LENGTH,
                         InputConnection.GET_TEXT_WITH_STYLES)));
     }
 
@@ -254,12 +268,12 @@
             @Nullable Integer expectBeforeCursorLength, @Nullable Integer expectSelectionLength,
             @Nullable Integer expectAfterCursorLength) {
         final CharSequence textBeforeCursor =
-                editorInfo.getInitialTextBeforeCursor(editorInfo.MEMORY_EFFICIENT_TEXT_LENGTH,
+                editorInfo.getInitialTextBeforeCursor(LONG_EXP_TEXT_LENGTH,
                         InputConnection.GET_TEXT_WITH_STYLES);
         final CharSequence selectedText =
                 editorInfo.getInitialSelectedText(InputConnection.GET_TEXT_WITH_STYLES);
         final CharSequence textAfterCursor =
-                editorInfo.getInitialTextAfterCursor(editorInfo.MEMORY_EFFICIENT_TEXT_LENGTH,
+                editorInfo.getInitialTextAfterCursor(LONG_EXP_TEXT_LENGTH,
                         InputConnection.GET_TEXT_WITH_STYLES);
 
         if (expectBeforeCursorLength == null) {
@@ -281,19 +295,15 @@
         }
     }
 
-    private static Spannable createTestText(int prependLength, int surroundingLength) {
+    private static CharSequence createTestText(int surroundingLength) {
         final SpannableStringBuilder builder = new SpannableStringBuilder();
-        for (int i = 0; i < prependLength; i++) {
-            builder.append("a");
-        }
-
         for (int i = 0; i < surroundingLength; i++) {
             builder.append(Integer.toString(i % 10));
         }
         return builder;
     }
 
-    private static Spannable createExpectedText(int startNumber, int length) {
+    private static CharSequence createExpectedText(int startNumber, int length) {
         final SpannableStringBuilder builder = new SpannableStringBuilder();
         for (int i = startNumber; i < startNumber + length; i++) {
             builder.append(Integer.toString(i % 10));
diff --git a/core/tests/coretests/src/android/widget/EditorCursorDragTest.java b/core/tests/coretests/src/android/widget/EditorCursorDragTest.java
index a602fa3..d7abfcc 100644
--- a/core/tests/coretests/src/android/widget/EditorCursorDragTest.java
+++ b/core/tests/coretests/src/android/widget/EditorCursorDragTest.java
@@ -25,6 +25,9 @@
 import static androidx.test.espresso.action.ViewActions.replaceText;
 import static androidx.test.espresso.matcher.ViewMatchers.withId;
 
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
+
 import static org.hamcrest.Matchers.emptyString;
 import static org.hamcrest.Matchers.not;
 import static org.junit.Assert.assertFalse;
@@ -32,11 +35,14 @@
 
 import android.app.Activity;
 import android.app.Instrumentation;
+import android.text.Layout;
+import android.util.Log;
 import android.view.InputDevice;
 import android.view.MotionEvent;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SmallTest;
+import androidx.test.filters.Suppress;
 import androidx.test.rule.ActivityTestRule;
 import androidx.test.runner.AndroidJUnit4;
 
@@ -50,9 +56,15 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.util.concurrent.atomic.AtomicLong;
+
 @RunWith(AndroidJUnit4.class)
 @SmallTest
 public class EditorCursorDragTest {
+    private static final String LOG_TAG = EditorCursorDragTest.class.getSimpleName();
+
+    private static final AtomicLong sTicker = new AtomicLong(1);
+
     @Rule
     public ActivityTestRule<TextViewActivity> mActivityRule = new ActivityTestRule<>(
             TextViewActivity.class);
@@ -119,13 +131,11 @@
         onView(withId(R.id.textview)).perform(replaceText(text));
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(0));
 
-        // Swipe along a diagonal path. This should drag the cursor.
-        onView(withId(R.id.textview)).perform(dragOnText(text.indexOf("line1"), text.indexOf("2")));
-        onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.indexOf("2")));
-
-        // Swipe along a steeper diagonal path. This should still drag the cursor.
+        // Swipe along a diagonal path. This should drag the cursor. Because we snap the finger to
+        // the handle as the touch moves downwards (and because we have some slop to avoid jumping
+        // across lines), the cursor position will end up higher than the finger position.
         onView(withId(R.id.textview)).perform(dragOnText(text.indexOf("line1"), text.indexOf("3")));
-        onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.indexOf("3")));
+        onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.indexOf("1")));
 
         // Swipe right-down along a very steep diagonal path. This should not drag the cursor.
         // Normally this would trigger a scroll, but since the full view fits on the screen there
@@ -133,12 +143,15 @@
         onView(withId(R.id.textview)).perform(dragOnText(text.indexOf("line1"), text.indexOf("7")));
         onView(withId(R.id.textview)).check(hasSelection(not(emptyString())));
 
+        // Tap to clear the selection.
+        int index = text.indexOf("line9");
+        onView(withId(R.id.textview)).perform(clickOnTextAtIndex(index));
+        onView(withId(R.id.textview)).check(hasSelection(emptyString()));
+        onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(index));
+
         // Swipe right-up along a very steep diagonal path. This should not drag the cursor.
         // Normally this would trigger a scroll, but since the full view fits on the screen there
         // is nothing to scroll and the gesture will trigger a selection drag.
-        int index = text.indexOf("line9");
-        onView(withId(R.id.textview)).perform(clickOnTextAtIndex(index));
-        onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(index));
         onView(withId(R.id.textview)).perform(dragOnText(text.indexOf("line7"), text.indexOf("1")));
         onView(withId(R.id.textview)).check(hasSelection(not(emptyString())));
     }
@@ -154,13 +167,11 @@
         onView(withId(R.id.textview)).perform(replaceText(text));
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(0));
 
-        // Swipe along a diagonal path. This should drag the cursor.
-        onView(withId(R.id.textview)).perform(dragOnText(text.indexOf("line1"), text.indexOf("2")));
-        onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.indexOf("2")));
-
-        // Swipe along a steeper diagonal path. This should still drag the cursor.
+        // Swipe along a diagonal path. This should drag the cursor. Because we snap the finger to
+        // the handle as the touch moves downwards (and because we have some slop to avoid jumping
+        // across lines), the cursor position will end up higher than the finger position.
         onView(withId(R.id.textview)).perform(dragOnText(text.indexOf("line1"), text.indexOf("3")));
-        onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.indexOf("3")));
+        onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.indexOf("1")));
 
         // Swipe right-down along a very steep diagonal path. This should not drag the cursor.
         // Normally this would trigger a scroll up, but since the view is already at the top there
@@ -168,11 +179,14 @@
         onView(withId(R.id.textview)).perform(dragOnText(text.indexOf("line1"), text.indexOf("7")));
         onView(withId(R.id.textview)).check(hasSelection(not(emptyString())));
 
-        // Swipe right-up along a very steep diagonal path. This should not drag the cursor. This
-        // will trigger a downward scroll and the cursor position will not change.
+        // Tap to clear the selection.
         int index = text.indexOf("line9");
         onView(withId(R.id.textview)).perform(clickOnTextAtIndex(index));
+        onView(withId(R.id.textview)).check(hasSelection(emptyString()));
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(index));
+
+        // Swipe right-up along a very steep diagonal path. This should not drag the cursor. This
+        // will trigger a downward scroll and the cursor position will not change.
         onView(withId(R.id.textview)).perform(dragOnText(text.indexOf("line7"), text.indexOf("1")));
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(index));
     }
@@ -387,12 +401,14 @@
         assertFalse(editor.getSelectionController().isCursorBeingModified());
     }
 
+    @Suppress // b/149712851
     @Test // Reproduces b/147366705
     public void testCursorDrag_nonSelectableTextView() throws Throwable {
         String text = "Hello world!";
         TextView tv = mActivity.findViewById(R.id.nonselectable_textview);
         tv.setText(text);
         Editor editor = tv.getEditorForTesting();
+        assertThat(editor).isNotNull();
 
         // Simulate a tap. No error should be thrown.
         long event1Time = 1001;
@@ -404,6 +420,68 @@
                 dragOnText(text.indexOf("llo"), text.indexOf("!")));
     }
 
+    @Test
+    public void testCursorDrag_slop() throws Throwable {
+        String text = "line1: This is the 1st line: A\n"
+                    + "line2: This is the 2nd line: B\n"
+                    + "line3: This is the 3rd line: C\n";
+        onView(withId(R.id.textview)).perform(replaceText(text));
+        onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(0));
+        TextView tv = mActivity.findViewById(R.id.textview);
+
+        // Simulate a drag where the finger moves slightly up and down (above and below the original
+        // line where the drag started). The cursor should just move along the original line without
+        // jumping up or down across lines.
+        MotionEventInfo[] events = new MotionEventInfo[]{
+                // Start dragging along the second line
+                motionEventInfo(text.indexOf("line2"), 1.0f),
+                motionEventInfo(text.indexOf("This is the 2nd"), 1.0f),
+                // Move to the bottom of the first line; cursor should remain on second line
+                motionEventInfo(text.indexOf("he 1st"), 0.0f, text.indexOf("he 2nd")),
+                // Move to the top of the third line; cursor should remain on second line
+                motionEventInfo(text.indexOf("e: C"), 1.0f, text.indexOf("e: B")),
+                motionEventInfo(text.indexOf("B"), 0.0f)
+        };
+        simulateDrag(tv, events, true);
+    }
+
+    @Test
+    public void testCursorDrag_snapToHandle() throws Throwable {
+        String text = "line1: This is the 1st line: A\n"
+                    + "line2: This is the 2nd line: B\n"
+                    + "line3: This is the 3rd line: C\n";
+        onView(withId(R.id.textview)).perform(replaceText(text));
+        onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(0));
+        TextView tv = mActivity.findViewById(R.id.textview);
+
+        // When the drag motion moves downward, we delay jumping to the lower line to allow the
+        // user's touch to snap to the cursor's handle. Once the finger is over the handle, we
+        // position the cursor above the user's actual touch (offset such that the finger remains
+        // over the handle rather than on top of the cursor vertical bar). This improves the
+        // visibility of the cursor and the text underneath.
+        MotionEventInfo[] events = new MotionEventInfo[]{
+                // Start dragging along the first line
+                motionEventInfo(text.indexOf("line1"), 1.0f),
+                motionEventInfo(text.indexOf("This is the 1st"), 1.0f),
+                // Move to the bottom of the third line; cursor should end up on second line
+                motionEventInfo(text.indexOf("he 3rd"), 0.0f, text.indexOf("he 2nd")),
+                // Move to the middle of the second line; cursor should end up on the first line
+                motionEventInfo(text.indexOf("he 2nd"), 0.5f, text.indexOf("he 1st"))
+        };
+        simulateDrag(tv, events, true);
+
+        // If the drag motion hasn't moved downward (ie, we haven't had a chance to snap to the
+        // handle), we position the cursor directly at the touch position.
+        events = new MotionEventInfo[]{
+                // Start dragging along the third line
+                motionEventInfo(text.indexOf("line3"), 1.0f),
+                motionEventInfo(text.indexOf("This is the 3rd"), 1.0f),
+                // Move to the middle of the second line; cursor should end up on the second line
+                motionEventInfo(text.indexOf("he 2nd"), 0.5f, text.indexOf("he 2nd")),
+        };
+        simulateDrag(tv, events, true);
+    }
+
     private static MotionEvent downEvent(long downTime, long eventTime, float x, float y) {
         return MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x, y, 0);
     }
@@ -436,4 +514,89 @@
         event.setButtonState(MotionEvent.BUTTON_PRIMARY);
         return event;
     }
+
+    public static MotionEventInfo motionEventInfo(int index, float ratioToLineTop) {
+        return new MotionEventInfo(index, ratioToLineTop, index);
+    }
+
+    public static MotionEventInfo motionEventInfo(int index, float ratioToLineTop,
+            int expectedCursorIndex) {
+        return new MotionEventInfo(index, ratioToLineTop, expectedCursorIndex);
+    }
+
+    private static class MotionEventInfo {
+        public final int index;
+        public final float ratioToLineTop; // 0.0 = bottom of line, 0.5 = middle of line, etc
+        public final int expectedCursorIndex;
+
+        private MotionEventInfo(int index, float ratioToLineTop, int expectedCursorIndex) {
+            this.index = index;
+            this.ratioToLineTop = ratioToLineTop;
+            this.expectedCursorIndex = expectedCursorIndex;
+        }
+
+        public float[] getCoordinates(TextView textView) {
+            Layout layout = textView.getLayout();
+            int line = layout.getLineForOffset(index);
+            float x = layout.getPrimaryHorizontal(index) + textView.getTotalPaddingLeft();
+            int bottom = layout.getLineBottom(line);
+            int top = layout.getLineTop(line);
+            float y = bottom - ((bottom - top) * ratioToLineTop) + textView.getTotalPaddingTop();
+            return new float[]{x, y};
+        }
+    }
+
+    private void simulateDrag(TextView tv, MotionEventInfo[] events, boolean runAssertions)
+            throws Exception {
+        Editor editor = tv.getEditorForTesting();
+
+        float[] downCoords = events[0].getCoordinates(tv);
+        long downEventTime = sTicker.addAndGet(10_000);
+        MotionEvent downEvent = downEvent(downEventTime, downEventTime,
+                downCoords[0], downCoords[1]);
+        mInstrumentation.runOnMainSync(() -> editor.onTouchEvent(downEvent));
+
+        for (int i = 1; i < events.length; i++) {
+            float[] moveCoords = events[i].getCoordinates(tv);
+            long eventTime = downEventTime + i;
+            MotionEvent event = moveEvent(downEventTime, eventTime, moveCoords[0], moveCoords[1]);
+            mInstrumentation.runOnMainSync(() -> editor.onTouchEvent(event));
+            assertCursorPosition(tv, events[i].expectedCursorIndex, runAssertions);
+        }
+
+        MotionEventInfo lastEvent = events[events.length - 1];
+        float[] upCoords = lastEvent.getCoordinates(tv);
+        long upEventTime = downEventTime + events.length;
+        MotionEvent upEvent = upEvent(downEventTime, upEventTime, upCoords[0], upCoords[1]);
+        mInstrumentation.runOnMainSync(() -> editor.onTouchEvent(upEvent));
+    }
+
+    private static void assertCursorPosition(TextView tv, int expectedPosition,
+            boolean runAssertions) {
+        String textAfterExpectedPos = getTextAfterIndex(tv, expectedPosition, 15);
+        String textAfterActualPos = getTextAfterIndex(tv, tv.getSelectionStart(), 15);
+        String msg = "Expected cursor at " + expectedPosition + ", just before \""
+                + textAfterExpectedPos + "\". Cursor is at " + tv.getSelectionStart()
+                + ", just before \"" + textAfterActualPos + "\".";
+        Log.d(LOG_TAG, msg);
+        if (runAssertions) {
+            assertWithMessage(msg).that(tv.getSelectionStart()).isEqualTo(expectedPosition);
+            assertThat(tv.getSelectionEnd()).isEqualTo(expectedPosition);
+        }
+    }
+
+    private static String getTextAfterIndex(TextView tv, int position, int maxLength) {
+        int end = Math.min(position + maxLength, tv.getText().length());
+        try {
+            String afterPosition = tv.getText().subSequence(position, end).toString();
+            if (afterPosition.indexOf('\n') > 0) {
+                afterPosition = afterPosition.substring(0, afterPosition.indexOf('\n'));
+            }
+            return afterPosition;
+        } catch (StringIndexOutOfBoundsException e) {
+            Log.d(LOG_TAG, "Invalid target position: position=" + position + ", length="
+                    + tv.getText().length() + ", end=" + end);
+            return "";
+        }
+    }
 }
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 6784ede..bbf3b12 100644
--- a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java
+++ b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java
@@ -362,9 +362,10 @@
         accessibilityShortcutController.performAccessibilityShortcut();
         accessibilityShortcutController.performAccessibilityShortcut();
         verify(mToast).show();
-        assertEquals(WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS,
-                mLayoutParams.privateFlags
-                        & WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS);
+        // TODO(b/149408635): Reintroduce assertion
+        // assertEquals(WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS,
+        //        mLayoutParams.privateFlags
+        //                & WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS);
         verify(mAccessibilityManagerService, times(1)).performAccessibilityShortcut(null);
     }
 
diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
index ce71beb..6d0e58b 100644
--- a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
@@ -18,6 +18,7 @@
 
 import static androidx.test.espresso.Espresso.onView;
 import static androidx.test.espresso.action.ViewActions.click;
+import static androidx.test.espresso.action.ViewActions.swipeUp;
 import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
 import static androidx.test.espresso.assertion.ViewAssertions.matches;
 import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
@@ -355,18 +356,14 @@
     public void hasOtherProfileOneOption() throws Exception {
         // enable the work tab feature flag
         ResolverActivity.ENABLE_TABBED_VIEW = true;
-
+        List<ResolvedComponentInfo> personalResolvedComponentInfos =
+                createResolvedComponentsForTestWithOtherProfile(2, /* userId */ 10);
+        List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4);
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
         markWorkProfileUserAvailable();
+
+        ResolveInfo toChoose = personalResolvedComponentInfos.get(1).getResolveInfoAt(0);
         Intent sendIntent = createSendTextIntent();
-        List<ResolvedComponentInfo> resolvedComponentInfos =
-                createResolvedComponentsForTestWithOtherProfile(2);
-        ResolveInfo toChoose = resolvedComponentInfos.get(1).getResolveInfoAt(0);
-
-        when(ChooserWrapperActivity.sOverrides.resolverListController.getResolversForIntent(
-                Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
-
         final ChooserWrapperActivity activity = mActivityRule
                 .launchActivity(Intent.createChooser(sendIntent, null));
         waitForIdle();
@@ -382,9 +379,11 @@
 
         // Make a stable copy of the components as the original list may be modified
         List<ResolvedComponentInfo> stableCopy =
-                createResolvedComponentsForTestWithOtherProfile(2);
+                createResolvedComponentsForTestWithOtherProfile(2, /* userId= */ 10);
         waitForIdle();
-        onView(withText(stableCopy.get(1).getResolveInfoAt(0).activityInfo.name))
+        Thread.sleep(ChooserActivity.LIST_VIEW_UPDATE_INTERVAL_IN_MILLIS);
+
+        onView(first(withText(stableCopy.get(1).getResolveInfoAt(0).activityInfo.name)))
                 .perform(click());
         waitForIdle();
         assertThat(chosen[0], is(toChoose));
@@ -1218,17 +1217,7 @@
         int workProfileTargets = 4;
         List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(
                 workProfileTargets);
-        when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class)))
-                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
-        when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(new ArrayList<>(workResolvedComponentInfos));
-        when(sOverrides.workResolverListController.getResolversForIntentAsUser(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(UserHandle.SYSTEM))).thenReturn(new ArrayList<>(personalResolvedComponentInfos));
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
         Intent sendIntent = createSendTextIntent();
         sendIntent.setType("TestType");
         markWorkProfileUserAvailable();
@@ -1245,7 +1234,7 @@
     }
 
     @Test
-    public void testWorkTab_workProfileHasExpectedNumberOfTargets() {
+    public void testWorkTab_workProfileHasExpectedNumberOfTargets() throws InterruptedException {
         // enable the work tab feature flag
         ResolverActivity.ENABLE_TABBED_VIEW = true;
         markWorkProfileUserAvailable();
@@ -1254,18 +1243,7 @@
                 createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
         List<ResolvedComponentInfo> workResolvedComponentInfos =
                 createResolvedComponentsForTest(workProfileTargets);
-        when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class)))
-                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
-        when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(workResolvedComponentInfos);
-        when(sOverrides.workResolverListController.getResolversForIntentAsUser(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(UserHandle.SYSTEM)))
-                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
         Intent sendIntent = createSendTextIntent();
         sendIntent.setType("TestType");
 
@@ -1284,12 +1262,12 @@
         // enable the work tab feature flag
         ResolverActivity.ENABLE_TABBED_VIEW = true;
         markWorkProfileUserAvailable();
+        List<ResolvedComponentInfo> personalResolvedComponentInfos =
+                createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
         int workProfileTargets = 4;
         List<ResolvedComponentInfo> workResolvedComponentInfos =
                 createResolvedComponentsForTest(workProfileTargets);
-        when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(workResolvedComponentInfos);
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
         Intent sendIntent = createSendTextIntent();
         sendIntent.setType("TestType");
         ResolveInfo[] chosen = new ResolveInfo[1];
@@ -1312,6 +1290,85 @@
         assertThat(chosen[0], is(workResolvedComponentInfos.get(0).getResolveInfoAt(0)));
     }
 
+    @Test
+    public void testWorkTab_crossProfileIntentsDisabled_personalToWork_emptyStateShown() {
+        // enable the work tab feature flag
+        ResolverActivity.ENABLE_TABBED_VIEW = true;
+        markWorkProfileUserAvailable();
+        int workProfileTargets = 4;
+        List<ResolvedComponentInfo> personalResolvedComponentInfos =
+                createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
+        List<ResolvedComponentInfo> workResolvedComponentInfos =
+                createResolvedComponentsForTest(workProfileTargets);
+        sOverrides.hasCrossProfileIntents = false;
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
+        Intent sendIntent = createSendTextIntent();
+        sendIntent.setType("TestType");
+
+        final ChooserWrapperActivity activity =
+                mActivityRule.launchActivity(Intent.createChooser(sendIntent, "work tab test"));
+        waitForIdle();
+        onView(withText(R.string.resolver_work_tab)).perform(click());
+        waitForIdle();
+        onView(withId(R.id.contentPanel))
+                .perform(swipeUp());
+
+        onView(withText(R.string.resolver_cant_share_with_work_apps))
+                .check(matches(isDisplayed()));
+    }
+
+    @Test
+    public void testWorkTab_workProfileDisabled_emptyStateShown() {
+        // enable the work tab feature flag
+        ResolverActivity.ENABLE_TABBED_VIEW = true;
+        markWorkProfileUserAvailable();
+        int workProfileTargets = 4;
+        List<ResolvedComponentInfo> personalResolvedComponentInfos =
+                createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
+        List<ResolvedComponentInfo> workResolvedComponentInfos =
+                createResolvedComponentsForTest(workProfileTargets);
+        sOverrides.isQuietModeEnabled = true;
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
+        Intent sendIntent = createSendTextIntent();
+        sendIntent.setType("TestType");
+
+        final ChooserWrapperActivity activity =
+                mActivityRule.launchActivity(Intent.createChooser(sendIntent, "work tab test"));
+        waitForIdle();
+        onView(withId(R.id.contentPanel))
+                .perform(swipeUp());
+        onView(withText(R.string.resolver_work_tab)).perform(click());
+        waitForIdle();
+
+        onView(withText(R.string.resolver_turn_on_work_apps))
+                .check(matches(isDisplayed()));
+    }
+
+    @Test
+    public void testWorkTab_noWorkTargets_emptyStateShown() {
+        // enable the work tab feature flag
+        ResolverActivity.ENABLE_TABBED_VIEW = true;
+        markWorkProfileUserAvailable();
+        List<ResolvedComponentInfo> personalResolvedComponentInfos =
+                createResolvedComponentsForTest(3);
+        List<ResolvedComponentInfo> workResolvedComponentInfos =
+                createResolvedComponentsForTest(0);
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
+        Intent sendIntent = createSendTextIntent();
+        sendIntent.setType("TestType");
+
+        final ChooserWrapperActivity activity =
+                mActivityRule.launchActivity(Intent.createChooser(sendIntent, "work tab test"));
+        waitForIdle();
+        onView(withId(R.id.contentPanel))
+                .perform(swipeUp());
+        onView(withText(R.string.resolver_work_tab)).perform(click());
+        waitForIdle();
+
+        onView(withText(R.string.resolver_no_apps_available))
+                .check(matches(isDisplayed()));
+    }
+
     private Intent createSendTextIntent() {
         Intent sendIntent = new Intent();
         sendIntent.setAction(Intent.ACTION_SEND);
@@ -1486,4 +1543,21 @@
     private void markWorkProfileUserAvailable() {
         sOverrides.workProfileUserHandle = UserHandle.of(10);
     }
+
+    private void setupResolverControllers(
+            List<ResolvedComponentInfo> personalResolvedComponentInfos,
+            List<ResolvedComponentInfo> workResolvedComponentInfos) {
+        when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
+                Mockito.isA(List.class)))
+                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
+        when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
+                Mockito.isA(List.class))).thenReturn(new ArrayList<>(workResolvedComponentInfos));
+        when(sOverrides.workResolverListController.getResolversForIntentAsUser(Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
+                Mockito.isA(List.class),
+                eq(UserHandle.SYSTEM)))
+                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
+    }
 }
diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java b/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java
index a68b5908..363551b 100644
--- a/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java
+++ b/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java
@@ -16,15 +16,10 @@
 
 package com.android.internal.app;
 
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import android.annotation.Nullable;
-import android.app.prediction.AppPredictionContext;
-import android.app.prediction.AppPredictionManager;
-import android.app.prediction.AppPredictor;
 import android.app.usage.UsageStatsManager;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -35,7 +30,6 @@
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.net.Uri;
-import android.os.Bundle;
 import android.os.UserHandle;
 import android.util.Size;
 
@@ -45,8 +39,7 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 
-import org.mockito.Mockito;
-
+import java.util.List;
 import java.util.function.Function;
 
 public class ChooserWrapperActivity extends ChooserActivity {
@@ -56,6 +49,15 @@
     static final OverrideData sOverrides = new OverrideData();
     private UsageStatsManager mUsm;
 
+    @Override
+    protected AbstractMultiProfilePagerAdapter createMultiProfilePagerAdapter(
+            Intent[] initialIntents, List<ResolveInfo> rList, boolean filterLastUsed) {
+        AbstractMultiProfilePagerAdapter multiProfilePagerAdapter =
+                super.createMultiProfilePagerAdapter(initialIntents, rList, filterLastUsed);
+        multiProfilePagerAdapter.setInjector(sOverrides.multiPagerAdapterInjector);
+        return multiProfilePagerAdapter;
+    }
+
     ChooserListAdapter getAdapter() {
         return mChooserMultiProfilePagerAdapter.getActiveListAdapter();
     }
@@ -206,6 +208,9 @@
         public int alternateProfileSetting;
         public Resources resources;
         public UserHandle workProfileUserHandle;
+        public boolean hasCrossProfileIntents;
+        public boolean isQuietModeEnabled;
+        public AbstractMultiProfilePagerAdapter.Injector multiPagerAdapterInjector;
 
         public void reset() {
             onSafelyStartCallback = null;
@@ -221,6 +226,26 @@
             alternateProfileSetting = 0;
             resources = null;
             workProfileUserHandle = null;
+            hasCrossProfileIntents = true;
+            isQuietModeEnabled = false;
+            multiPagerAdapterInjector = new AbstractMultiProfilePagerAdapter.Injector() {
+                @Override
+                public boolean hasCrossProfileIntents(List<Intent> intents, int sourceUserId,
+                        int targetUserId) {
+                    return hasCrossProfileIntents;
+                }
+
+                @Override
+                public boolean isQuietModeEnabled(UserHandle workProfileUserHandle) {
+                    return isQuietModeEnabled;
+                }
+
+                @Override
+                public void requestQuietModeEnabled(boolean enabled,
+                        UserHandle workProfileUserHandle) {
+                    isQuietModeEnabled = enabled;
+                }
+            };
         }
     }
 }
diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java
index 5f4194a..a7bf488 100644
--- a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java
@@ -18,16 +18,16 @@
 
 import static androidx.test.espresso.Espresso.onView;
 import static androidx.test.espresso.action.ViewActions.click;
+import static androidx.test.espresso.action.ViewActions.swipeUp;
 import static androidx.test.espresso.assertion.ViewAssertions.matches;
-import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static androidx.test.espresso.matcher.ViewMatchers.isEnabled;
 import static androidx.test.espresso.matcher.ViewMatchers.withId;
 import static androidx.test.espresso.matcher.ViewMatchers.withText;
 
 import static com.android.internal.app.MatcherUtils.first;
 import static com.android.internal.app.ResolverDataProvider.createPackageManagerMockedInfo;
-import static com.android.internal.app.ResolverDataProvider.createResolvedComponentInfoWithOtherId;
 import static com.android.internal.app.ResolverWrapperActivity.sOverrides;
 
 import static org.hamcrest.CoreMatchers.allOf;
@@ -56,9 +56,6 @@
 import com.android.internal.app.ResolverListAdapter.ResolveInfoPresentationGetter;
 import com.android.internal.widget.ResolverDrawerLayout;
 
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Rule;
@@ -224,17 +221,14 @@
     public void hasOtherProfileOneOption() throws Exception {
         // enable the work tab feature flag
         ResolverActivity.ENABLE_TABBED_VIEW = true;
-
+        List<ResolvedComponentInfo> personalResolvedComponentInfos =
+                createResolvedComponentsForTestWithOtherProfile(2, /* userId */ 10);
+        List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4);
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
         markWorkProfileUserAvailable();
+
+        ResolveInfo toChoose = personalResolvedComponentInfos.get(1).getResolveInfoAt(0);
         Intent sendIntent = createSendImageIntent();
-        List<ResolvedComponentInfo> resolvedComponentInfos =
-                createResolvedComponentsForTestWithOtherProfile(2);
-        ResolveInfo toChoose = resolvedComponentInfos.get(1).getResolveInfoAt(0);
-
-        when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
-
         final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
         Espresso.registerIdlingResources(activity.getAdapter().getLabelIdlingResource());
         waitForIdle();
@@ -249,8 +243,9 @@
         };
         // Make a stable copy of the components as the original list may be modified
         List<ResolvedComponentInfo> stableCopy =
-                createResolvedComponentsForTestWithOtherProfile(2);
-        onView(withText(stableCopy.get(1).getResolveInfoAt(0).activityInfo.name))
+                createResolvedComponentsForTestWithOtherProfile(2, /* userId= */ 10);
+        // We pick the first one as there is another one in the work profile side
+        onView(first(withText(stableCopy.get(1).getResolveInfoAt(0).activityInfo.name)))
                 .perform(click());
         onView(withId(R.id.button_once))
                 .perform(click());
@@ -415,18 +410,14 @@
     }
 
     @Test
-    public void testWorkTab_workTabListEmptyBeforeGoingToTab() {
+    public void testWorkTab_workTabListPopulatedBeforeGoingToTab() throws InterruptedException {
         // enable the work tab feature flag
         ResolverActivity.ENABLE_TABBED_VIEW = true;
         List<ResolvedComponentInfo> personalResolvedComponentInfos =
-                createResolvedComponentsForTest(3);
+                createResolvedComponentsForTestWithOtherProfile(3, /* userId = */ 10);
         List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4);
-        when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(personalResolvedComponentInfos);
-        when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(workResolvedComponentInfos);
+        setupResolverControllers(personalResolvedComponentInfos,
+                new ArrayList<>(workResolvedComponentInfos));
         Intent sendIntent = createSendImageIntent();
         markWorkProfileUserAvailable();
 
@@ -434,8 +425,8 @@
         waitForIdle();
 
         assertThat(activity.getCurrentUserHandle().getIdentifier(), is(0));
-        // The work list adapter must only be filled when we open the work tab
-        assertThat(activity.getWorkListAdapter().getCount(), is(0));
+        // The work list adapter must be populated in advance before tapping the other tab
+        assertThat(activity.getWorkListAdapter().getCount(), is(4));
     }
 
     @Test
@@ -445,17 +436,7 @@
         List<ResolvedComponentInfo> personalResolvedComponentInfos =
                 createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
         List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4);
-        when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(personalResolvedComponentInfos);
-        when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(workResolvedComponentInfos);
-        when(sOverrides.workResolverListController.getResolversForIntentAsUser(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(UserHandle.SYSTEM)))
-                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
         Intent sendIntent = createSendImageIntent();
         markWorkProfileUserAvailable();
 
@@ -474,34 +455,7 @@
         List<ResolvedComponentInfo> personalResolvedComponentInfos =
                 createResolvedComponentsForTestWithOtherProfile(3);
         List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4);
-        when(sOverrides.resolverListController.getResolversForIntentAsUser(
-                Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(UserHandle.SYSTEM))).thenReturn(new ArrayList<>(personalResolvedComponentInfos));
-        when(sOverrides.resolverListController.getResolversForIntentAsUser(
-                Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(sOverrides.workProfileUserHandle)))
-                .thenReturn(new ArrayList<>(workResolvedComponentInfos));
-        when(sOverrides.workResolverListController.getResolversForIntentAsUser(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(sOverrides.workProfileUserHandle)))
-                .thenReturn(new ArrayList<>(workResolvedComponentInfos));
-        when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(new ArrayList<>(workResolvedComponentInfos));
-        when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class)))
-                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
-        when(sOverrides.workResolverListController.getResolversForIntentAsUser(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(UserHandle.SYSTEM))).thenReturn(new ArrayList<>(personalResolvedComponentInfos));
-
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
         Intent sendIntent = createSendImageIntent();
         markWorkProfileUserAvailable();
 
@@ -521,18 +475,7 @@
         List<ResolvedComponentInfo> personalResolvedComponentInfos =
                 createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
         List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4);
-        when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class)))
-                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
-        when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(workResolvedComponentInfos);
-        when(sOverrides.workResolverListController.getResolversForIntentAsUser(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(UserHandle.SYSTEM)))
-                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
         Intent sendIntent = createSendImageIntent();
 
         final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
@@ -552,18 +495,7 @@
         List<ResolvedComponentInfo> personalResolvedComponentInfos =
                 createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
         List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4);
-        when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class)))
-                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
-        when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(workResolvedComponentInfos);
-        when(sOverrides.workResolverListController.getResolversForIntentAsUser(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(UserHandle.SYSTEM)))
-                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
         Intent sendIntent = createSendImageIntent();
         ResolveInfo[] chosen = new ResolveInfo[1];
         sOverrides.onSafelyStartCallback = targetInfo -> {
@@ -597,35 +529,7 @@
         List<ResolvedComponentInfo> personalResolvedComponentInfos =
                 createResolvedComponentsForTestWithOtherProfile(1);
         List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4);
-
-        when(sOverrides.resolverListController.getResolversForIntentAsUser(
-                Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(UserHandle.SYSTEM))).thenReturn(new ArrayList<>(personalResolvedComponentInfos));
-        when(sOverrides.resolverListController.getResolversForIntentAsUser(
-                Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(sOverrides.workProfileUserHandle)))
-                .thenReturn(new ArrayList<>(workResolvedComponentInfos));
-        when(sOverrides.workResolverListController.getResolversForIntentAsUser(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(sOverrides.workProfileUserHandle)))
-                .thenReturn(new ArrayList<>(workResolvedComponentInfos));
-        when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(new ArrayList<>(workResolvedComponentInfos));
-        when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class)))
-                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
-        when(sOverrides.workResolverListController.getResolversForIntentAsUser(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class),
-                eq(UserHandle.SYSTEM))).thenReturn(new ArrayList<>(personalResolvedComponentInfos));
-
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
         Intent sendIntent = createSendImageIntent();
 
         final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
@@ -644,10 +548,10 @@
         // enable the work tab feature flag
         ResolverActivity.ENABLE_TABBED_VIEW = true;
         markWorkProfileUserAvailable();
+        List<ResolvedComponentInfo> personalResolvedComponentInfos =
+                createResolvedComponentsForTestWithOtherProfile(3, /* userId= */ 10);
         List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4);
-        when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
-                Mockito.anyBoolean(),
-                Mockito.isA(List.class))).thenReturn(workResolvedComponentInfos);
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
         Intent sendIntent = createSendImageIntent();
         ResolveInfo[] chosen = new ResolveInfo[1];
         sOverrides.onSafelyStartCallback = targetInfo -> {
@@ -672,6 +576,82 @@
         assertThat(chosen[0], is(workResolvedComponentInfos.get(0).getResolveInfoAt(0)));
     }
 
+    @Test
+    public void testWorkTab_crossProfileIntentsDisabled_personalToWork_emptyStateShown() {
+        // enable the work tab feature flag
+        ResolverActivity.ENABLE_TABBED_VIEW = true;
+        markWorkProfileUserAvailable();
+        int workProfileTargets = 4;
+        List<ResolvedComponentInfo> personalResolvedComponentInfos =
+                createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
+        List<ResolvedComponentInfo> workResolvedComponentInfos =
+                createResolvedComponentsForTest(workProfileTargets);
+        sOverrides.hasCrossProfileIntents = false;
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
+        Intent sendIntent = createSendImageIntent();
+        sendIntent.setType("TestType");
+
+        mActivityRule.launchActivity(sendIntent);
+        waitForIdle();
+        onView(withText(R.string.resolver_work_tab)).perform(click());
+        waitForIdle();
+        onView(withId(R.id.contentPanel))
+                .perform(swipeUp());
+
+        onView(withText(R.string.resolver_cant_share_with_work_apps))
+                .check(matches(isDisplayed()));
+    }
+
+    @Test
+    public void testWorkTab_workProfileDisabled_emptyStateShown() {
+        // enable the work tab feature flag
+        ResolverActivity.ENABLE_TABBED_VIEW = true;
+        markWorkProfileUserAvailable();
+        int workProfileTargets = 4;
+        List<ResolvedComponentInfo> personalResolvedComponentInfos =
+                createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
+        List<ResolvedComponentInfo> workResolvedComponentInfos =
+                createResolvedComponentsForTest(workProfileTargets);
+        sOverrides.isQuietModeEnabled = true;
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
+        Intent sendIntent = createSendImageIntent();
+        sendIntent.setType("TestType");
+
+        mActivityRule.launchActivity(sendIntent);
+        waitForIdle();
+        onView(withId(R.id.contentPanel))
+                .perform(swipeUp());
+        onView(withText(R.string.resolver_work_tab)).perform(click());
+        waitForIdle();
+
+        onView(withText(R.string.resolver_turn_on_work_apps))
+                .check(matches(isDisplayed()));
+    }
+
+    @Test
+    public void testWorkTab_noWorkTargets_emptyStateShown() {
+        // enable the work tab feature flag
+        ResolverActivity.ENABLE_TABBED_VIEW = true;
+        markWorkProfileUserAvailable();
+        List<ResolvedComponentInfo> personalResolvedComponentInfos =
+                createResolvedComponentsForTest(3);
+        List<ResolvedComponentInfo> workResolvedComponentInfos =
+                createResolvedComponentsForTest(0);
+        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
+        Intent sendIntent = createSendImageIntent();
+        sendIntent.setType("TestType");
+
+        mActivityRule.launchActivity(sendIntent);
+        waitForIdle();
+        onView(withId(R.id.contentPanel))
+                .perform(swipeUp());
+        onView(withText(R.string.resolver_work_tab)).perform(click());
+        waitForIdle();
+
+        onView(withText(R.string.resolver_no_apps_available))
+                .check(matches(isDisplayed()));
+    }
+
     private Intent createSendImageIntent() {
         Intent sendIntent = new Intent();
         sendIntent.setAction(Intent.ACTION_SEND);
@@ -722,4 +702,21 @@
     private void markWorkProfileUserAvailable() {
         ResolverWrapperActivity.sOverrides.workProfileUserHandle = UserHandle.of(10);
     }
+
+    private void setupResolverControllers(
+            List<ResolvedComponentInfo> personalResolvedComponentInfos,
+            List<ResolvedComponentInfo> workResolvedComponentInfos) {
+        when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
+                Mockito.isA(List.class)))
+                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
+        when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
+                Mockito.isA(List.class))).thenReturn(workResolvedComponentInfos);
+        when(sOverrides.workResolverListController.getResolversForIntentAsUser(Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
+                Mockito.isA(List.class),
+                eq(UserHandle.SYSTEM)))
+                .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
+    }
 }
diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverWrapperActivity.java b/core/tests/coretests/src/com/android/internal/app/ResolverWrapperActivity.java
index 36c8724..2087104 100644
--- a/core/tests/coretests/src/com/android/internal/app/ResolverWrapperActivity.java
+++ b/core/tests/coretests/src/com/android/internal/app/ResolverWrapperActivity.java
@@ -47,6 +47,15 @@
                 filterLastUsed, createListController(userHandle), useLayoutForBrowsables, this);
     }
 
+    @Override
+    protected AbstractMultiProfilePagerAdapter createMultiProfilePagerAdapter(
+            Intent[] initialIntents, List<ResolveInfo> rList, boolean filterLastUsed) {
+        AbstractMultiProfilePagerAdapter multiProfilePagerAdapter =
+                super.createMultiProfilePagerAdapter(initialIntents, rList, filterLastUsed);
+        multiProfilePagerAdapter.setInjector(sOverrides.multiPagerAdapterInjector);
+        return multiProfilePagerAdapter;
+    }
+
     ResolverWrapperAdapter getAdapter() {
         return (ResolverWrapperAdapter) mMultiProfilePagerAdapter.getActiveListAdapter();
     }
@@ -124,6 +133,9 @@
         public ResolverListController workResolverListController;
         public Boolean isVoiceInteraction;
         public UserHandle workProfileUserHandle;
+        public boolean hasCrossProfileIntents;
+        public boolean isQuietModeEnabled;
+        public AbstractMultiProfilePagerAdapter.Injector multiPagerAdapterInjector;
 
         public void reset() {
             onSafelyStartCallback = null;
@@ -132,6 +144,26 @@
             resolverListController = mock(ResolverListController.class);
             workResolverListController = mock(ResolverListController.class);
             workProfileUserHandle = null;
+            hasCrossProfileIntents = true;
+            isQuietModeEnabled = false;
+            multiPagerAdapterInjector = new AbstractMultiProfilePagerAdapter.Injector() {
+                @Override
+                public boolean hasCrossProfileIntents(List<Intent> intents, int sourceUserId,
+                        int targetUserId) {
+                    return hasCrossProfileIntents;
+                }
+
+                @Override
+                public boolean isQuietModeEnabled(UserHandle workProfileUserHandle) {
+                    return isQuietModeEnabled;
+                }
+
+                @Override
+                public void requestQuietModeEnabled(boolean enabled,
+                        UserHandle workProfileUserHandle) {
+                    isQuietModeEnabled = enabled;
+                }
+            };
         }
     }
 }
\ No newline at end of file
diff --git a/core/tests/coretests/src/com/android/internal/content/OverlayConfigIterationRule.java b/core/tests/coretests/src/com/android/internal/content/OverlayConfigIterationRule.java
new file mode 100644
index 0000000..fbf75df
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/content/OverlayConfigIterationRule.java
@@ -0,0 +1,161 @@
+/*
+ * 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.internal.content;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+import android.content.pm.parsing.ParsingPackageRead;
+import android.os.Build;
+import android.util.ArrayMap;
+
+import com.android.internal.content.om.OverlayConfig.PackageProvider;
+import com.android.internal.content.om.OverlayScanner;
+import com.android.internal.content.om.OverlayScanner.ParsedOverlayInfo;
+
+import org.junit.Assert;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+import java.util.function.BiConsumer;
+import java.util.function.Supplier;
+
+/**
+ * A {@link TestRule} that runs a test case twice. First, the test case runs with a non-null
+ * {@link OverlayScanner} as if the zygote process is scanning the overlay packages
+ * and parsing configuration files. The test case then runs with a non-null
+ * {@link PackageProvider} as if the system server is parsing configuration files.
+ *
+ * This simulates what will happen on device. If an exception would be thrown in the zygote, then
+ * the exception should be thrown in the first run of the test case.
+ */
+public class OverlayConfigIterationRule implements TestRule {
+
+    enum Iteration {
+        ZYGOTE,
+        SYSTEM_SERVER,
+    }
+
+    private final ArrayMap<File, ParsedOverlayInfo> mOverlayStubResults = new ArrayMap<>();
+    private Supplier<OverlayScanner> mOverlayScanner;
+    private PackageProvider mPkgProvider;
+    private Iteration mIteration;
+
+    /**
+     * Mocks the parsing of the file to make it appear to the scanner that the file is a valid
+     * overlay APK.
+     **/
+    void addOverlay(File path, String packageName, String targetPackage, int targetSdkVersion,
+            boolean isStatic, int priority) {
+        try {
+            final File canonicalPath = new File(path.getCanonicalPath());
+            mOverlayStubResults.put(canonicalPath, new ParsedOverlayInfo(
+                    packageName, targetPackage, targetSdkVersion, isStatic, priority,
+                    canonicalPath));
+        } catch (IOException e) {
+            Assert.fail("Failed to add overlay " + e);
+        }
+    }
+
+    void addOverlay(File path, String packageName) {
+        addOverlay(path, packageName, "target");
+    }
+
+    void addOverlay(File path, String packageName, String targetPackage) {
+        addOverlay(path, packageName, targetPackage, Build.VERSION_CODES.CUR_DEVELOPMENT);
+    }
+
+    void addOverlay(File path, String packageName, String targetPackage, int targetSdkVersion) {
+        addOverlay(path, packageName, targetPackage, targetSdkVersion, false, 0);
+    }
+
+    /** Retrieves the {@link OverlayScanner} for the current run of the test. */
+    Supplier<OverlayScanner> getScannerFactory() {
+        return mOverlayScanner;
+    }
+
+    /** Retrieves the {@link PackageProvider} for the current run of the test. */
+    PackageProvider getPackageProvider() {
+        return mPkgProvider;
+    }
+
+    /** Retrieves the current iteration of the test. */
+    Iteration getIteration() {
+        return mIteration;
+    }
+
+
+    @Override
+    public Statement apply(Statement base, Description description) {
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                // Run the test once as if the zygote process is scanning the overlay packages
+                // and parsing configuration files.
+                mOverlayScanner = () -> {
+                    OverlayScanner scanner = Mockito.spy(new OverlayScanner());
+                    for (Map.Entry<File, ParsedOverlayInfo> overlay :
+                            mOverlayStubResults.entrySet()) {
+                        doReturn(overlay.getValue()).when(scanner)
+                                .parseOverlayManifest(overlay.getKey());
+                    }
+                    return scanner;
+                };
+                mPkgProvider = null;
+                mIteration = Iteration.ZYGOTE;
+                base.evaluate();
+
+                // Run the test once more (if the first test did not throw an exception) as if
+                // the system server is parsing the configuration files and using PackageManager to
+                // retrieving information of overlays.
+                mOverlayScanner = null;
+                mPkgProvider = Mockito.mock(PackageProvider.class);
+                mIteration = Iteration.SYSTEM_SERVER;
+                doAnswer((InvocationOnMock invocation) -> {
+                    final Object[] args = invocation.getArguments();
+                    final BiConsumer<ParsingPackageRead, Boolean> f =
+                            (BiConsumer<ParsingPackageRead, Boolean>) args[0];
+                    for (Map.Entry<File, ParsedOverlayInfo> overlay :
+                            mOverlayStubResults.entrySet()) {
+                        final ParsingPackageRead a = Mockito.mock(ParsingPackageRead.class);
+                        final ParsedOverlayInfo info = overlay.getValue();
+                        when(a.getPackageName()).thenReturn(info.packageName);
+                        when(a.getOverlayTarget()).thenReturn(info.targetPackageName);
+                        when(a.getTargetSdkVersion()).thenReturn(info.targetSdkVersion);
+                        when(a.isOverlayIsStatic()).thenReturn(info.isStatic);
+                        when(a.getOverlayPriority()).thenReturn(info.priority);
+                        when(a.getBaseCodePath()).thenReturn(info.path.getPath());
+                        f.accept(a, !info.path.getPath().contains("data/overlay"));
+                    }
+                    return null;
+                }).when(mPkgProvider).forEachPackage(any());
+
+                base.evaluate();
+            }
+        };
+    }
+}
+
+
diff --git a/core/tests/coretests/src/com/android/internal/content/OverlayConfigTest.java b/core/tests/coretests/src/com/android/internal/content/OverlayConfigTest.java
new file mode 100644
index 0000000..dee118f
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/content/OverlayConfigTest.java
@@ -0,0 +1,603 @@
+/*
+ * 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.internal.content;
+
+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 android.os.FileUtils;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.frameworks.coretests.R;
+import com.android.internal.content.om.OverlayConfig;
+import com.android.internal.content.om.OverlayConfig.IdmapInvocation;
+import com.android.internal.content.om.OverlayScanner;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+
+@RunWith(AndroidJUnit4.class)
+public class OverlayConfigTest {
+    private static final String TEST_APK_PACKAGE_NAME =
+            "com.android.frameworks.coretests.overlay_config";
+
+    private ExpectedException mExpectedException = ExpectedException.none();
+    private OverlayConfigIterationRule mScannerRule = new OverlayConfigIterationRule();
+    private TemporaryFolder mTestFolder = new TemporaryFolder();
+
+    @Rule
+    public RuleChain chain = RuleChain.outerRule(mExpectedException)
+            .around(mTestFolder).around(mScannerRule);
+
+    private OverlayConfig createConfigImpl() throws IOException {
+        return new OverlayConfig(mTestFolder.getRoot().getCanonicalFile(),
+                mScannerRule.getScannerFactory(), mScannerRule.getPackageProvider());
+    }
+
+    private File createFile(String fileName) throws IOException {
+        return createFile(fileName, "");
+    }
+
+    private File createFile(String fileName, String content) throws IOException {
+        final File f = new File(String.format("%s/%s", mTestFolder.getRoot(), fileName));
+        if (!f.getParentFile().equals(mTestFolder.getRoot())) {
+            f.getParentFile().mkdirs();
+        }
+        FileUtils.stringToFile(f.getPath(), content);
+        return f;
+    }
+
+    private static void assertConfig(OverlayConfig overlayConfig, String packageName,
+            boolean mutable, boolean enabled, int configIndex) {
+        final OverlayConfig.Configuration config = overlayConfig.getConfiguration(packageName);
+        assertNotNull(config);
+        assertEquals(mutable, config.parsedConfig.mutable);
+        assertEquals(enabled, config.parsedConfig.enabled);
+        assertEquals(configIndex, config.configIndex);
+    }
+
+    @Test
+    public void testImmutableAfterNonImmutableFails() throws IOException {
+        mExpectedException.expect(IllegalStateException.class);
+        mExpectedException.expectMessage("immutable overlays must precede mutable overlays");
+
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" enabled=\"true\" />"
+                        + "  <overlay package=\"two\" mutable=\"false\" enabled=\"true\" />"
+                        + "</config>");
+
+        mScannerRule.addOverlay(createFile("/product/overlay/one.apk"), "one");
+        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two");
+        createConfigImpl();
+    }
+
+    @Test
+    public void testConfigureAbsentPackageFails() throws IOException {
+        mExpectedException.expect(IllegalStateException.class);
+        mExpectedException.expectMessage("not present in partition");
+
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" enabled=\"true\" />"
+                        + "</config>");
+
+        createConfigImpl();
+    }
+
+    @Test
+    public void testConfigurePackageTwiceFails() throws IOException {
+        mExpectedException.expect(IllegalStateException.class);
+        mExpectedException.expectMessage("configured multiple times in a single partition");
+
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" enabled=\"true\" />"
+                        + "  <overlay package=\"one\" mutable=\"false\" />"
+                        + "</config>");
+
+        mScannerRule.addOverlay(createFile("/product/overlay/one.apk"), "one");
+        createConfigImpl();
+    }
+
+    @Test
+    public void testConfigureOverlayAcrossPartitionsFails() throws IOException {
+        mExpectedException.expect(IllegalStateException.class);
+        mExpectedException.expectMessage("not present in partition");
+
+        createFile("/vendor/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" enabled=\"true\" />"
+                        + "</config>");
+
+        mScannerRule.addOverlay(createFile("/product/overlay/one.apk"), "one");
+        createConfigImpl();
+    }
+
+    @Test
+    public void testConfigureOverlayOutsideOverlayDirFails() throws IOException {
+        mExpectedException.expect(IllegalStateException.class);
+        mExpectedException.expectMessage("not present in partition");
+
+        createFile("/vendor/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" enabled=\"true\" />"
+                        + "</config>");
+
+        mScannerRule.addOverlay(createFile("/product/app/one.apk"), "one");
+        createConfigImpl();
+    }
+
+    @Test
+    public void testMergeOAbsolutePathFails() throws IOException {
+        mExpectedException.expect(IllegalStateException.class);
+        mExpectedException.expectMessage("must be relative to the directory");
+
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <merge path=\"/product/overlay/config/auto-generated-config.xml\" />"
+                        + "</config>");
+
+        createConfigImpl();
+    }
+
+    @Test
+    public void testMergeOutsideDirFails() throws IOException {
+        mExpectedException.expect(IllegalStateException.class);
+        mExpectedException.expectMessage("outside of configuration directory");
+
+        createFile("/product/overlay/auto-generated-config.xml");
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <merge path=\"../auto-generated-config.xml\" />"
+                        + "</config>");
+
+        createConfigImpl();
+    }
+
+    @Test
+    public void testMergeOutsidePartitionFails() throws IOException {
+        mExpectedException.expect(IllegalStateException.class);
+        mExpectedException.expectMessage("outside of configuration directory");
+
+        createFile("/vendor/overlay/config/config2.xml");
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <merge path=\"../../../vendor/overlay/config/config2.xml\" />"
+                        + "</config>");
+
+        createConfigImpl();
+    }
+
+    @Test
+    public void testMergeCircularFails() throws IOException {
+        mExpectedException.expect(IllegalStateException.class);
+        mExpectedException.expectMessage("Maximum <merge> depth exceeded");
+
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <merge path=\"config2.xml\" />"
+                        + "</config>");
+        createFile("/product/overlay/config/config2.xml",
+                "<config>"
+                        + "  <merge path=\"config.xml\" />"
+                        + "</config>");
+
+        createConfigImpl();
+    }
+
+    @Test
+    public void testMergeMissingFileFails() throws IOException {
+        mExpectedException.expect(IllegalStateException.class);
+        mExpectedException.expectMessage("does not exist");
+
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <merge path=\"config2.xml\" />"
+                        + "</config>");
+        createConfigImpl();
+    }
+
+    @Test
+    public void testProductOverridesVendor() throws IOException {
+        createFile("/vendor/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" enabled=\"false\" />"
+                        + "</config>");
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" enabled=\"true\" />"
+                        + "</config>");
+
+        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one");
+        mScannerRule.addOverlay(createFile("/product/overlay/one.apk"), "one");
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        assertConfig(overlayConfig, "one", true, true, 1);
+    }
+
+    @Test
+    public void testPartitionPrecedence() throws IOException {
+        createFile("/vendor/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" enabled=\"true\" />"
+                        + "</config>");
+        createFile("/odm/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"two\" enabled=\"true\" />"
+                        + "</config>");
+        createFile("/oem/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"three\" enabled=\"true\" />"
+                        + "</config>");
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"four\" enabled=\"true\" />"
+                        + "</config>");
+        createFile("/system_ext/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"five\" enabled=\"true\" />"
+                        + "</config>");
+
+        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one");
+        mScannerRule.addOverlay(createFile("/odm/overlay/two.apk"), "two");
+        mScannerRule.addOverlay(createFile("/oem/overlay/three.apk"), "three");
+        mScannerRule.addOverlay(createFile("/product/overlay/four.apk"), "four");
+        mScannerRule.addOverlay(createFile("/system_ext/overlay/five.apk"), "five");
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        assertConfig(overlayConfig, "one", true, true, 0);
+        assertConfig(overlayConfig, "two", true, true, 1);
+        assertConfig(overlayConfig, "three", true, true, 2);
+        assertConfig(overlayConfig, "four", true, true, 3);
+        assertConfig(overlayConfig, "five", true, true, 4);
+    }
+
+    @Test
+    public void testImmutable() throws IOException {
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" mutable=\"false\" />"
+                        + "  <overlay package=\"two\" />"
+                        + "  <overlay package=\"three\" mutable=\"true\" />"
+                        + "</config>");
+
+
+        mScannerRule.addOverlay(createFile("/product/overlay/one.apk"), "one");
+        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two");
+        mScannerRule.addOverlay(createFile("/product/overlay/three.apk"), "three");
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        assertConfig(overlayConfig, "one", false, false, 0);
+        assertConfig(overlayConfig, "two", true, false, 1);
+        assertConfig(overlayConfig, "three", true, false, 2);
+    }
+
+    @Test
+    public void testEnabled() throws IOException {
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" />"
+                        + "  <overlay package=\"two\" enabled=\"true\" />"
+                        + "  <overlay package=\"three\" enabled=\"false\" />"
+                        + "</config>");
+
+
+        mScannerRule.addOverlay(createFile("/product/overlay/one.apk"), "one");
+        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two");
+        mScannerRule.addOverlay(createFile("/product/overlay/three.apk"), "three");
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        assertConfig(overlayConfig, "one", true, false, 0);
+        assertConfig(overlayConfig, "two", true, true, 1);
+        assertConfig(overlayConfig, "three", true, false, 2);
+    }
+
+    @Test
+    public void testMerge() throws IOException {
+        createFile("/product/overlay/config/auto-generated-config.xml",
+                "<config>"
+                        + "  <overlay package=\"two\" mutable=\"false\" enabled=\"true\" />"
+                        + "  <overlay package=\"three\" mutable=\"false\" enabled=\"true\" />"
+                        + "</config>");
+
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" mutable=\"false\" enabled=\"true\" />"
+                        + "  <merge path=\"auto-generated-config.xml\" />"
+                        + "  <overlay package=\"four\" enabled=\"true\" />"
+                        + "</config>");
+
+        mScannerRule.addOverlay(createFile("/product/overlay/one.apk"), "one");
+        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two");
+        mScannerRule.addOverlay(createFile("/product/overlay/three.apk"), "three");
+        mScannerRule.addOverlay(createFile("/product/overlay/four.apk"), "four");
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        OverlayConfig.Configuration o1 = overlayConfig.getConfiguration("one");
+        assertNotNull(o1);
+        assertFalse(o1.parsedConfig.mutable);
+        assertTrue(o1.parsedConfig.enabled);
+        assertEquals(0, o1.configIndex);
+
+        OverlayConfig.Configuration o2 = overlayConfig.getConfiguration("two");
+        assertNotNull(o2);
+        assertFalse(o2.parsedConfig.mutable);
+        assertTrue(o2.parsedConfig.enabled);
+        assertEquals(1, o2.configIndex);
+
+        OverlayConfig.Configuration o3 = overlayConfig.getConfiguration("three");
+        assertNotNull(o3);
+        assertFalse(o3.parsedConfig.mutable);
+        assertTrue(o3.parsedConfig.enabled);
+        assertEquals(2, o3.configIndex);
+
+        OverlayConfig.Configuration o4 = overlayConfig.getConfiguration("four");
+        assertNotNull(o4);
+        assertTrue(o4.parsedConfig.mutable);
+        assertTrue(o4.parsedConfig.enabled);
+        assertEquals(3, o4.configIndex);
+    }
+
+    @Test
+    public void testIdmapInvocationsFrameworkImmutable() throws IOException {
+        createFile("/vendor/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" mutable=\"false\" enabled=\"true\" />"
+                        + "  <overlay package=\"two\" mutable=\"false\" enabled=\"true\" />"
+                        + "  <overlay package=\"three\" enabled=\"true\" />"
+                        + "</config>");
+
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"four\" mutable=\"false\" enabled=\"true\" />"
+                        + "  <overlay package=\"five\" mutable=\"false\" enabled=\"true\" />"
+                        + "  <overlay package=\"six\" mutable=\"false\" enabled=\"false\" />"
+                        + "</config>");
+
+        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android");
+        mScannerRule.addOverlay(createFile("/vendor/overlay/two.apk"), "two", "android");
+        mScannerRule.addOverlay(createFile("/vendor/overlay/three.apk"), "three", "android");
+        mScannerRule.addOverlay(createFile("/product/overlay/four.apk"), "four", "android");
+        mScannerRule.addOverlay(createFile("/product/overlay/five.apk"), "five");
+        mScannerRule.addOverlay(createFile("/product/overlay/six.apk"), "six", "android");
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        if (mScannerRule.getIteration() == OverlayConfigIterationRule.Iteration.ZYGOTE) {
+            final ArrayList<IdmapInvocation> idmapInvocations =
+                    overlayConfig.getImmutableFrameworkOverlayIdmapInvocations();
+            assertEquals(2, idmapInvocations.size());
+
+            final IdmapInvocation i0 = idmapInvocations.get(0);
+            assertTrue(i0.enforceOverlayable);
+            assertEquals("vendor", i0.policy);
+            assertEquals(2, i0.overlayPaths.size());
+            assertTrue(i0.overlayPaths.get(0).endsWith("/vendor/overlay/one.apk"));
+            assertTrue(i0.overlayPaths.get(1).endsWith("/vendor/overlay/two.apk"));
+
+            final IdmapInvocation i1 = idmapInvocations.get(1);
+            assertTrue(i1.enforceOverlayable);
+            assertEquals("product", i1.policy);
+            assertEquals(1, i1.overlayPaths.size());
+            assertTrue(i1.overlayPaths.get(0).endsWith("/product/overlay/four.apk"));
+        }
+    }
+
+    @Test
+    public void testIdmapInvocationsDifferentTargetSdk() throws IOException {
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" mutable=\"false\" enabled=\"true\" />"
+                        + "  <overlay package=\"two\" mutable=\"false\" enabled=\"true\" />"
+                        + "  <overlay package=\"three\" mutable=\"false\" enabled=\"true\" />"
+                        + "  <overlay package=\"four\" mutable=\"false\" enabled=\"true\" />"
+                        + "</config>");
+
+        mScannerRule.addOverlay(createFile("/product/overlay/one.apk"), "one", "android");
+        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two", "android");
+        mScannerRule.addOverlay(createFile("/product/overlay/three.apk"), "three", "android", 28);
+        mScannerRule.addOverlay(createFile("/product/overlay/four.apk"), "four", "android");
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+
+        if (mScannerRule.getIteration() == OverlayConfigIterationRule.Iteration.ZYGOTE) {
+            final ArrayList<IdmapInvocation> idmapInvocations =
+                    overlayConfig.getImmutableFrameworkOverlayIdmapInvocations();
+            assertEquals(3, idmapInvocations.size());
+
+            final IdmapInvocation i0 = idmapInvocations.get(0);
+            assertTrue(i0.enforceOverlayable);
+            assertEquals(2, i0.overlayPaths.size());
+            assertTrue(i0.overlayPaths.get(0).endsWith("/product/overlay/one.apk"));
+            assertTrue(i0.overlayPaths.get(1).endsWith("/product/overlay/two.apk"));
+
+            final IdmapInvocation i1 = idmapInvocations.get(1);
+            assertFalse(i1.enforceOverlayable);
+            assertEquals(1, i1.overlayPaths.size());
+            assertTrue(i1.overlayPaths.get(0).endsWith("/product/overlay/three.apk"));
+
+            final IdmapInvocation i2 = idmapInvocations.get(2);
+            assertTrue(i2.enforceOverlayable);
+            assertEquals(1, i2.overlayPaths.size());
+            assertTrue(i2.overlayPaths.get(0).endsWith("/product/overlay/four.apk"));
+        }
+    }
+
+    @Test
+    public void testNoConfigIsStatic() throws IOException {
+        mScannerRule.addOverlay(createFile("/product/overlay/one.apk"), "one", "android", 28, true,
+                1);
+        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two", "android", 28, false,
+                0);
+        mScannerRule.addOverlay(createFile("/product/overlay/three.apk"), "three", "android", 28,
+                true, 0);
+        mScannerRule.addOverlay(createFile("/product/overlay/four.apk"), "four", "android", 28,
+                false, 2);
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        assertConfig(overlayConfig, "one", false, true, 1);
+        assertConfig(overlayConfig, "three", false, true, 0);
+
+    }
+
+    @Test
+    public void testVendorStaticPrecedesProductImmutable() throws IOException {
+        createFile("/product/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"two\" mutable=\"false\" enabled=\"true\" />"
+                        + "</config>");
+
+        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
+                1);
+        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two", "android", 0, true,
+                0);
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        assertConfig(overlayConfig, "one", false, true, 0);
+        assertConfig(overlayConfig, "two", false, true, 1);
+    }
+
+    @Test
+    public void testVendorImmutablePrecededProductStatic() throws IOException {
+        createFile("/vendor/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"one\" mutable=\"false\" enabled=\"true\" />"
+                        + "</config>");
+
+        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
+                1);
+        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two", "android", 0, true,
+                0);
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        assertConfig(overlayConfig, "one", false, true, 0);
+        assertConfig(overlayConfig, "two", false, true, 1);
+    }
+
+    @Test
+    public void testNoConfigsAllowPartitionReordering() throws IOException {
+        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
+                1);
+        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two", "android", 0, true,
+                0);
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        assertConfig(overlayConfig, "one", false, true, 1);
+        assertConfig(overlayConfig, "two", false, true, 0);
+    }
+
+    @Test
+    public void testConfigDisablesPartitionReordering() throws IOException {
+        createFile("/odm/overlay/config/config.xml",
+                "<config>"
+                        + "  <overlay package=\"two\" enabled=\"true\" />"
+                        + "</config>");
+
+        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
+                1);
+        mScannerRule.addOverlay(createFile("/odm/overlay/two.apk"), "two");
+        mScannerRule.addOverlay(createFile("/product/overlay/three.apk"), "three", "android", 0,
+                true, 0);
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        assertConfig(overlayConfig, "one", false, true, 0);
+        assertConfig(overlayConfig, "two", true, true, 1);
+        assertConfig(overlayConfig, "three", false, true, 2);
+    }
+
+    @Test
+    public void testStaticOverlayOutsideOverlayDir() throws IOException {
+        mScannerRule.addOverlay(createFile("/product/app/one.apk"), "one", "android", 0, true, 0);
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        if (mScannerRule.getIteration() == OverlayConfigIterationRule.Iteration.SYSTEM_SERVER) {
+            assertConfig(overlayConfig, "one", false, true, 0);
+        }
+    }
+
+    @Test
+    public void testSortStaticOverlaysDifferentTargets() throws IOException {
+        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "other", 0, true, 0);
+        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two", "android", 0, true,
+                0);
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        assertConfig(overlayConfig, "one", false, true, 1);
+        assertConfig(overlayConfig, "two", false, true, 0);
+    }
+
+    @Test
+    public void testSortStaticOverlaysSamePriority() throws IOException {
+        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
+                0);
+        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two", "android", 0, true,
+                0);
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        assertConfig(overlayConfig, "one", false, true, 1);
+        assertConfig(overlayConfig, "two", false, true, 0);
+    }
+
+    @Test
+    public void testNonSystemOverlayCannotBeStatic() throws IOException {
+        mScannerRule.addOverlay(createFile("/data/overlay/one.apk"), "one", "android", 0, true,
+                0);
+
+        final OverlayConfig overlayConfig = createConfigImpl();
+        assertTrue(overlayConfig.isMutable("one"));
+        assertFalse(overlayConfig.isEnabled("one"));
+        assertEquals(Integer.MAX_VALUE, overlayConfig.getPriority("one"));
+    }
+
+    @Test
+    public void testGetOverlayInfo() throws IOException {
+        if (mScannerRule.getIteration() != OverlayConfigIterationRule.Iteration.ZYGOTE) {
+            // Run only one iteration of the test.
+            return;
+        }
+
+        final InputStream is = InstrumentationRegistry.getContext().getResources()
+                .openRawResource(R.raw.overlay_config);
+        final File partitionDir = mTestFolder.newFolder("product", "overlay");
+        final File testApk = new File(partitionDir, "test.apk");
+        FileUtils.copy(is, new FileOutputStream(testApk));
+
+        final OverlayScanner scanner = new OverlayScanner();
+        scanner.scanDir(partitionDir);
+
+        final OverlayScanner.ParsedOverlayInfo info = scanner.getParsedInfo(TEST_APK_PACKAGE_NAME);
+        assertNotNull(info);
+        assertEquals(TEST_APK_PACKAGE_NAME, info.packageName);
+        assertEquals("android", info.targetPackageName);
+        assertEquals(testApk.getPath(), info.path.getPath());
+        assertEquals(21, info.targetSdkVersion);
+    }
+}
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java
index a6329298..2ad8e18 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java
@@ -40,6 +40,7 @@
         BatteryStatsUserLifecycleTests.class,
         KernelCpuProcStringReaderTest.class,
         KernelCpuUidActiveTimeReaderTest.class,
+        KernelCpuUidBpfMapReaderTest.class,
         KernelCpuUidClusterTimeReaderTest.class,
         KernelCpuUidFreqTimeReaderTest.class,
         KernelCpuUidUserSysTimeReaderTest.class,
diff --git a/core/tests/coretests/src/com/android/internal/os/KernelCpuUidActiveTimeReaderTest.java b/core/tests/coretests/src/com/android/internal/os/KernelCpuUidActiveTimeReaderTest.java
index 1b13a99..2ccd74e 100644
--- a/core/tests/coretests/src/com/android/internal/os/KernelCpuUidActiveTimeReaderTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/KernelCpuUidActiveTimeReaderTest.java
@@ -21,11 +21,11 @@
 
 import android.content.Context;
 import android.os.FileUtils;
+import android.util.SparseArray;
 import android.util.SparseLongArray;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
 
 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidActiveTimeReader;
 
@@ -33,11 +33,15 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.Random;
 
 /**
@@ -46,14 +50,16 @@
  * $ atest FrameworksCoreTests:com.android.internal.os.KernelCpuUidActiveTimeReaderTest
  */
 @SmallTest
-@RunWith(AndroidJUnit4.class)
+@RunWith(Parameterized.class)
 public class KernelCpuUidActiveTimeReaderTest {
     private File mTestDir;
     private File mTestFile;
     private KernelCpuUidActiveTimeReader mReader;
+    private KernelCpuUidTestBpfMapReader mBpfMapReader;
     private VerifiableCallback mCallback;
 
     private Random mRand = new Random(12345);
+    protected boolean mUseBpf;
     private final int mCpus = 4;
     private final String mHeadline = "cpus: 4\n";
     private final int[] mUids = {0, 1, 22, 333, 4444, 55555};
@@ -62,12 +68,22 @@
         return InstrumentationRegistry.getContext();
     }
 
+    @Parameters(name="useBpf={0}")
+    public static Collection<Object[]> data() {
+        return Arrays.asList(new Object[][] { {true}, {false} });
+    }
+
+    public KernelCpuUidActiveTimeReaderTest(boolean useBpf) {
+        mUseBpf = useBpf;
+    }
+
     @Before
     public void setUp() {
         mTestDir = getContext().getDir("test", Context.MODE_PRIVATE);
         mTestFile = new File(mTestDir, "test.file");
+        mBpfMapReader = new KernelCpuUidTestBpfMapReader();
         mReader = new KernelCpuUidActiveTimeReader(
-                new KernelCpuProcStringReader(mTestFile.getAbsolutePath()), false);
+                new KernelCpuProcStringReader(mTestFile.getAbsolutePath()), mBpfMapReader, false);
         mCallback = new VerifiableCallback();
     }
 
@@ -80,7 +96,7 @@
     @Test
     public void testReadDelta() throws Exception {
         final long[][] times = increaseTime(new long[mUids.length][mCpus]);
-        writeToFile(mHeadline + uidLines(mUids, times));
+        setCpusAndData(times);
         mReader.readDelta(mCallback);
         for (int i = 0; i < mUids.length; ++i) {
             mCallback.verify(mUids[i], getActiveTime(times[i]));
@@ -90,7 +106,7 @@
         // Verify that a second call will only return deltas.
         mCallback.clear();
         final long[][] newTimes1 = increaseTime(times);
-        writeToFile(mHeadline + uidLines(mUids, newTimes1));
+        setCpusAndData(newTimes1);
         mReader.readDelta(mCallback);
         for (int i = 0; i < mUids.length; ++i) {
             mCallback.verify(mUids[i], getActiveTime(newTimes1[i]) - getActiveTime(times[i]));
@@ -105,7 +121,7 @@
         // Verify that calling with a null callback doesn't result in any crashes
         mCallback.clear();
         final long[][] newTimes2 = increaseTime(newTimes1);
-        writeToFile(mHeadline + uidLines(mUids, newTimes2));
+        setCpusAndData(newTimes2);
         mReader.readDelta(null);
         mCallback.verifyNoMoreInteractions();
 
@@ -113,19 +129,20 @@
         // the previous call had null callback.
         mCallback.clear();
         final long[][] newTimes3 = increaseTime(newTimes2);
+        setCpusAndData(newTimes3);
         writeToFile(mHeadline + uidLines(mUids, newTimes3));
         mReader.readDelta(mCallback);
         for (int i = 0; i < mUids.length; ++i) {
             mCallback.verify(mUids[i], getActiveTime(newTimes3[i]) - getActiveTime(newTimes2[i]));
         }
         mCallback.verifyNoMoreInteractions();
-        assertTrue(mTestFile.delete());
+        clearCpusAndData();
     }
 
     @Test
     public void testReadAbsolute() throws Exception {
         final long[][] times1 = increaseTime(new long[mUids.length][mCpus]);
-        writeToFile(mHeadline + uidLines(mUids, times1));
+        setCpusAndData(times1);
         mReader.readAbsolute(mCallback);
         for (int i = 0; i < mUids.length; i++) {
             mCallback.verify(mUids[i], getActiveTime(times1[i]));
@@ -135,19 +152,19 @@
         // Verify that a second call should still return absolute values
         mCallback.clear();
         final long[][] times2 = increaseTime(times1);
-        writeToFile(mHeadline + uidLines(mUids, times2));
+        setCpusAndData(times2);
         mReader.readAbsolute(mCallback);
         for (int i = 0; i < mUids.length; i++) {
             mCallback.verify(mUids[i], getActiveTime(times2[i]));
         }
         mCallback.verifyNoMoreInteractions();
-        assertTrue(mTestFile.delete());
+        clearCpusAndData();
     }
 
     @Test
     public void testReadDeltaDecreasedTime() throws Exception {
         final long[][] times1 = increaseTime(new long[mUids.length][mCpus]);
-        writeToFile(mHeadline + uidLines(mUids, times1));
+        setCpusAndData(times1);
         mReader.readDelta(mCallback);
 
         // Verify that there should not be a callback for a particular UID if its time decreases.
@@ -155,19 +172,19 @@
         final long[][] times2 = increaseTime(times1);
         System.arraycopy(times1[0], 0, times2[0], 0, mCpus);
         times2[0][0] = 100;
-        writeToFile(mHeadline + uidLines(mUids, times2));
+        setCpusAndData(times2);
         mReader.readDelta(mCallback);
         for (int i = 1; i < mUids.length; i++) {
             mCallback.verify(mUids[i], getActiveTime(times2[i]) - getActiveTime(times1[i]));
         }
         mCallback.verifyNoMoreInteractions();
-        assertTrue(mTestFile.delete());
+        clearCpusAndData();
 
         // Verify that the internal state was not modified.
         mCallback.clear();
         final long[][] times3 = increaseTime(times2);
         times3[0] = increaseTime(times1)[0];
-        writeToFile(mHeadline + uidLines(mUids, times3));
+        setCpusAndData(times3);
         mReader.readDelta(mCallback);
         mCallback.verify(mUids[0], getActiveTime(times3[0]) - getActiveTime(times1[0]));
         for (int i = 1; i < mUids.length; i++) {
@@ -179,26 +196,26 @@
     @Test
     public void testReadDeltaNegativeTime() throws Exception {
         final long[][] times1 = increaseTime(new long[mUids.length][mCpus]);
-        writeToFile(mHeadline + uidLines(mUids, times1));
+        setCpusAndData(times1);
         mReader.readDelta(mCallback);
 
         // Verify that there should not be a callback for a particular UID if its time is -ve.
         mCallback.clear();
         final long[][] times2 = increaseTime(times1);
         times2[0][0] *= -1;
-        writeToFile(mHeadline + uidLines(mUids, times2));
+        setCpusAndData(times2);
         mReader.readDelta(mCallback);
         for (int i = 1; i < mUids.length; i++) {
             mCallback.verify(mUids[i], getActiveTime(times2[i]) - getActiveTime(times1[i]));
         }
         mCallback.verifyNoMoreInteractions();
-        assertTrue(mTestFile.delete());
+        clearCpusAndData();
 
         // Verify that the internal state was not modified.
         mCallback.clear();
         final long[][] times3 = increaseTime(times2);
         times3[0] = increaseTime(times1)[0];
-        writeToFile(mHeadline + uidLines(mUids, times3));
+        setCpusAndData(times3);
         mReader.readDelta(mCallback);
         mCallback.verify(mUids[0], getActiveTime(times3[0]) - getActiveTime(times1[0]));
         for (int i = 1; i < mUids.length; i++) {
@@ -207,6 +224,28 @@
         mCallback.verifyNoMoreInteractions();
     }
 
+    private void setCpusAndData(long[][] times) throws IOException {
+        if (mUseBpf) {
+            mBpfMapReader.setCpus(new long[]{ mCpus });
+            SparseArray<long[]> data = new SparseArray<>();
+            for (int i = 0; i < mUids.length; i++) {
+                data.put(mUids[i], times[i]);
+            }
+            mBpfMapReader.setData(data);
+        } else {
+            writeToFile(mHeadline + uidLines(mUids, times));
+        }
+    }
+
+    private void clearCpusAndData() {
+        if (mUseBpf) {
+            mBpfMapReader.setCpus(null);
+            mBpfMapReader.setData(new SparseArray<>());
+        } else {
+            assertTrue(mTestFile.delete());
+        }
+    }
+
     private String uidLines(int[] uids, long[][] times) {
         StringBuffer sb = new StringBuffer();
         for (int i = 0; i < uids.length; i++) {
@@ -261,4 +300,36 @@
             assertEquals(0, mData.size());
         }
     }
+
+    private class KernelCpuUidTestBpfMapReader extends KernelCpuUidBpfMapReader {
+        private long[] mCpus;
+        private SparseArray<long[]> mNewData = new SparseArray<>();
+
+        public void setData(SparseArray<long[]> data) {
+            mNewData = data;
+        }
+
+        public void setCpus(long[] cpus) {
+            mCpus = cpus;
+        }
+
+        @Override
+        public final boolean startTrackingBpfTimes() {
+            return true;
+        }
+
+        @Override
+        protected final boolean readBpfData() {
+            if (!mUseBpf) {
+                return false;
+            }
+            mData = mNewData;
+            return true;
+        }
+
+        @Override
+        public final long[] getDataDimensions() {
+            return mCpus;
+        }
+    }
 }
diff --git a/core/tests/coretests/src/com/android/internal/os/KernelCpuUidBpfMapReaderTest.java b/core/tests/coretests/src/com/android/internal/os/KernelCpuUidBpfMapReaderTest.java
new file mode 100644
index 0000000..257b388
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/os/KernelCpuUidBpfMapReaderTest.java
@@ -0,0 +1,237 @@
+/*
+ * 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.internal.os;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import android.content.Context;
+import android.util.SparseArray;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+import org.junit.runner.RunWith;
+
+import com.android.internal.os.KernelCpuUidBpfMapReader.BpfMapIterator;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.IntStream;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class KernelCpuUidBpfMapReaderTest {
+    private Random mRand = new Random(12345);
+    private KernelCpuUidTestBpfMapReader mReader;
+
+    private Context getContext() {
+        return InstrumentationRegistry.getContext();
+    }
+
+    @Before
+    public void setUp() {
+        mReader =  new KernelCpuUidTestBpfMapReader();
+    }
+
+    /**
+     * Tests that reading returns null if readBpfData() fails.
+     */
+    @Test
+    public void testUnsuccessfulRead() {
+        assertEquals(null, mReader.open());
+    }
+
+    /**
+     * Tests that reading will always return null after 5 failures.
+     */
+    @Test
+    public void testReadErrorsLimit() {
+        for (int i = 0; i < 3; i++) {
+            try (BpfMapIterator iter = mReader.open()) {
+                assertNull(iter);
+            }
+        }
+
+        SparseArray<long[]> data = new SparseArray<>();
+        long[] times = {2};
+        data.put(1, new long[]{2});
+        mReader.setData(data);
+        testOpenAndReadData(data);
+
+        mReader.setData(null);
+        for (int i = 0; i < 3; i++) {
+            try (BpfMapIterator iter = mReader.open(true)) {
+                assertNull(iter);
+            }
+        }
+        mReader.setData(data);
+        try (BpfMapIterator iter = mReader.open(true)) {
+            assertNull(iter);
+        }
+    }
+
+    /** Tests getNextUid functionality. */
+    @Test
+    public void testGetNextUid() {
+        final SparseArray<long[]> data = getTestSparseArray(800, 50);
+        mReader.setData(data);
+        testOpenAndReadData(data);
+    }
+
+    @Test
+    public void testConcurrent() throws Exception {
+        final SparseArray<long[]> data = getTestSparseArray(200, 50);
+        final SparseArray<long[]> data1 = getTestSparseArray(180, 70);
+        final List<Throwable> errs = Collections.synchronizedList(new ArrayList<>());
+        mReader.setData(data);
+        // An additional thread for modifying the data.
+        ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(11);
+        final CountDownLatch ready = new CountDownLatch(10);
+        final CountDownLatch start = new CountDownLatch(1);
+        final CountDownLatch modify = new CountDownLatch(1);
+        final CountDownLatch done = new CountDownLatch(10);
+
+        for (int i = 0; i < 5; i++) {
+            threadPool.submit(() -> {
+                    ready.countDown();
+                    try {
+                        start.await();
+                        testOpenAndReadData(data);
+                    } catch (Throwable e) {
+                        errs.add(e);
+                    } finally {
+                        done.countDown();
+                    }
+            });
+            threadPool.submit(() -> {
+                    ready.countDown();
+                    try {
+                        start.await();
+                        // Wait for data modification.
+                        modify.await();
+                        testOpenAndReadData(data1);
+                    } catch (Throwable e) {
+                        errs.add(e);
+                    } finally {
+                        done.countDown();
+                    }
+             });
+        }
+
+        assertTrue("Prep timed out", ready.await(100, TimeUnit.MILLISECONDS));
+        start.countDown();
+
+        threadPool.schedule(() -> {
+                mReader.setData(data1);
+                modify.countDown();
+        }, 600, TimeUnit.MILLISECONDS);
+
+        assertTrue("Execution timed out", done.await(3, TimeUnit.SECONDS));
+        threadPool.shutdownNow();
+
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        errs.forEach(e -> e.printStackTrace(pw));
+
+        assertTrue("All Exceptions:\n" + sw.toString(), errs.isEmpty());
+    }
+
+    @Test
+    public void testRemoveUidsInRange() {
+        final SparseArray<long[]> data = getTestSparseArray(200, 50);
+        mReader.setData(data);
+        testOpenAndReadData(data);
+        SparseArray<long[]> changedData = new SparseArray<>();
+        for (int i = 6; i < 200; i++) {
+            changedData.put(i, data.get(i));
+        }
+        mReader.removeUidsInRange(0, 5);
+        testOpenAndReadData(changedData);
+    }
+
+    private void testOpenAndReadData(SparseArray<long[]> expectedData) {
+        try (BpfMapIterator iter = mReader.open()) {
+            long[] actual;
+            if (expectedData.size() > 0) {
+                actual = new long[expectedData.valueAt(0).length + 1];
+            } else {
+                actual = new long[0];
+            }
+            for (int i = 0; i < expectedData.size(); i++) {
+                assertTrue(iter.getNextUid(actual));
+                assertEquals(expectedData.keyAt(i), actual[0]);
+                assertArrayEquals(expectedData.valueAt(i), Arrays.copyOfRange(actual, 1, actual.length));
+            }
+            assertFalse(iter.getNextUid(actual));
+            assertFalse(iter.getNextUid(actual));
+        }
+    }
+
+
+    private SparseArray<long[]> getTestSparseArray(int uids, int numPerUid) {
+        SparseArray<long[]> data = new SparseArray<>();
+        for (int i = 0; i < uids; i++) {
+            data.put(i, mRand.longs(numPerUid, 0, Long.MAX_VALUE).toArray());
+        }
+        return data;
+    }
+
+
+    private class KernelCpuUidTestBpfMapReader extends KernelCpuUidBpfMapReader {
+        private SparseArray<long[]> mNewData;
+
+        public final void setData(SparseArray<long[]> newData) {
+            mNewData = newData;
+        }
+
+        @Override
+        public final boolean startTrackingBpfTimes() {
+            return true;
+        }
+
+        @Override
+        public final boolean readBpfData() {
+            if (mNewData == null) {
+                return false;
+            }
+            mData = mNewData;
+            return true;
+        }
+
+        @Override
+        public final long[] getDataDimensions() {
+            return null;
+        }
+
+    }
+}
diff --git a/core/tests/coretests/src/com/android/internal/os/KernelCpuUidClusterTimeReaderTest.java b/core/tests/coretests/src/com/android/internal/os/KernelCpuUidClusterTimeReaderTest.java
index 2ea80da..a0dab28 100644
--- a/core/tests/coretests/src/com/android/internal/os/KernelCpuUidClusterTimeReaderTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/KernelCpuUidClusterTimeReaderTest.java
@@ -27,7 +27,6 @@
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
 
 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidClusterTimeReader;
 
@@ -35,11 +34,15 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.Random;
 
 /**
@@ -48,28 +51,42 @@
  * $ atest FrameworksCoreTests:com.android.internal.os.KernelCpuUidClusterTimeReaderTest
  */
 @SmallTest
-@RunWith(AndroidJUnit4.class)
+@RunWith(Parameterized.class)
 public class KernelCpuUidClusterTimeReaderTest {
     private File mTestDir;
     private File mTestFile;
     private KernelCpuUidClusterTimeReader mReader;
+    private KernelCpuUidTestBpfMapReader mBpfMapReader;
     private VerifiableCallback mCallback;
 
     private Random mRand = new Random(12345);
+    protected boolean mUseBpf;
     private final int mCpus = 6;
     private final String mHeadline = "policy0: 4 policy4: 2\n";
+    private final long[] mCores = {4, 2};
     private final int[] mUids = {0, 1, 22, 333, 4444, 55555};
 
     private Context getContext() {
         return InstrumentationRegistry.getContext();
     }
 
+    @Parameters(name="useBpf={0}")
+    public static Collection<Object[]> data() {
+        return Arrays.asList(new Object[][] { {true}, {false} });
+    }
+
+    public KernelCpuUidClusterTimeReaderTest(boolean useBpf) {
+        mUseBpf = useBpf;
+    }
+
     @Before
     public void setUp() {
         mTestDir = getContext().getDir("test", Context.MODE_PRIVATE);
         mTestFile = new File(mTestDir, "test.file");
+        mBpfMapReader = new KernelCpuUidTestBpfMapReader();
         mReader = new KernelCpuUidClusterTimeReader(
-                new KernelCpuProcStringReader(mTestFile.getAbsolutePath()), false);
+                new KernelCpuProcStringReader(mTestFile.getAbsolutePath()), mBpfMapReader,
+                false);
         mCallback = new VerifiableCallback();
     }
 
@@ -82,7 +99,7 @@
     @Test
     public void testReadDelta() throws Exception {
         final long[][] times1 = increaseTime(new long[mUids.length][mCpus]);
-        writeToFile(mHeadline + uidLines(mUids, times1));
+        setCoresAndData(times1);
         mReader.readDelta(mCallback);
         for (int i = 0; i < mUids.length; ++i) {
             mCallback.verify(mUids[i], clusterTime(times1[i]));
@@ -92,7 +109,7 @@
         // Verify that a second call will only return deltas.
         mCallback.clear();
         final long[][] times2 = increaseTime(times1);
-        writeToFile(mHeadline + uidLines(mUids, times2));
+        setCoresAndData(times2);
         mReader.readDelta(mCallback);
         for (int i = 0; i < mUids.length; ++i) {
             mCallback.verify(mUids[i], subtract(clusterTime(times2[i]), clusterTime(times1[i])));
@@ -107,7 +124,7 @@
         // Verify that calling with a null callback doesn't result in any crashes
         mCallback.clear();
         final long[][] times3 = increaseTime(times2);
-        writeToFile(mHeadline + uidLines(mUids, times3));
+        setCoresAndData(times3);
         mReader.readDelta(null);
         mCallback.verifyNoMoreInteractions();
 
@@ -115,19 +132,19 @@
         // the previous call had null callback.
         mCallback.clear();
         final long[][] times4 = increaseTime(times3);
-        writeToFile(mHeadline + uidLines(mUids, times4));
+        setCoresAndData(times4);
         mReader.readDelta(mCallback);
         for (int i = 0; i < mUids.length; ++i) {
             mCallback.verify(mUids[i], subtract(clusterTime(times4[i]), clusterTime(times3[i])));
         }
         mCallback.verifyNoMoreInteractions();
-        assertTrue(mTestFile.delete());
+        clearCoresAndData();
     }
 
     @Test
     public void testReadAbsolute() throws Exception {
         final long[][] times1 = increaseTime(new long[mUids.length][mCpus]);
-        writeToFile(mHeadline + uidLines(mUids, times1));
+        setCoresAndData(times1);
         mReader.readAbsolute(mCallback);
         for (int i = 0; i < mUids.length; i++) {
             mCallback.verify(mUids[i], clusterTime(times1[i]));
@@ -137,19 +154,19 @@
         // Verify that a second call should still return absolute values
         mCallback.clear();
         final long[][] times2 = increaseTime(times1);
-        writeToFile(mHeadline + uidLines(mUids, times2));
+        setCoresAndData(times2);
         mReader.readAbsolute(mCallback);
         for (int i = 0; i < mUids.length; i++) {
             mCallback.verify(mUids[i], clusterTime(times2[i]));
         }
         mCallback.verifyNoMoreInteractions();
-        assertTrue(mTestFile.delete());
+        clearCoresAndData();
     }
 
     @Test
     public void testReadDeltaDecreasedTime() throws Exception {
         final long[][] times1 = increaseTime(new long[mUids.length][mCpus]);
-        writeToFile(mHeadline + uidLines(mUids, times1));
+        setCoresAndData(times1);
         mReader.readDelta(mCallback);
 
         // Verify that there should not be a callback for a particular UID if its time decreases.
@@ -157,19 +174,19 @@
         final long[][] times2 = increaseTime(times1);
         System.arraycopy(times1[0], 0, times2[0], 0, mCpus);
         times2[0][0] = 100;
-        writeToFile(mHeadline + uidLines(mUids, times2));
+        setCoresAndData(times2);
         mReader.readDelta(mCallback);
         for (int i = 1; i < mUids.length; i++) {
             mCallback.verify(mUids[i], subtract(clusterTime(times2[i]), clusterTime(times1[i])));
         }
         mCallback.verifyNoMoreInteractions();
-        assertTrue(mTestFile.delete());
+        clearCoresAndData();
 
         // Verify that the internal state was not modified.
         mCallback.clear();
         final long[][] times3 = increaseTime(times2);
         times3[0] = increaseTime(times1)[0];
-        writeToFile(mHeadline + uidLines(mUids, times3));
+        setCoresAndData(times3);
         mReader.readDelta(mCallback);
         mCallback.verify(mUids[0], subtract(clusterTime(times3[0]), clusterTime(times1[0])));
         for (int i = 1; i < mUids.length; i++) {
@@ -181,26 +198,26 @@
     @Test
     public void testReadDeltaNegativeTime() throws Exception {
         final long[][] times1 = increaseTime(new long[mUids.length][mCpus]);
-        writeToFile(mHeadline + uidLines(mUids, times1));
+        setCoresAndData(times1);
         mReader.readDelta(mCallback);
 
         // Verify that there should not be a callback for a particular UID if its time decreases.
         mCallback.clear();
         final long[][] times2 = increaseTime(times1);
         times2[0][0] *= -1;
-        writeToFile(mHeadline + uidLines(mUids, times2));
+        setCoresAndData(times2);
         mReader.readDelta(mCallback);
         for (int i = 1; i < mUids.length; i++) {
             mCallback.verify(mUids[i], subtract(clusterTime(times2[i]), clusterTime(times1[i])));
         }
         mCallback.verifyNoMoreInteractions();
-        assertTrue(mTestFile.delete());
+        clearCoresAndData();
 
         // Verify that the internal state was not modified.
         mCallback.clear();
         final long[][] times3 = increaseTime(times2);
         times3[0] = increaseTime(times1)[0];
-        writeToFile(mHeadline + uidLines(mUids, times3));
+        setCoresAndData(times3);
         mReader.readDelta(mCallback);
         mCallback.verify(mUids[0], subtract(clusterTime(times3[0]), clusterTime(times1[0])));
         for (int i = 1; i < mUids.length; i++) {
@@ -209,6 +226,28 @@
         mCallback.verifyNoMoreInteractions();
     }
 
+    private void setCoresAndData(long[][] times) throws IOException {
+        if (mUseBpf) {
+            mBpfMapReader.setClusterCores(mCores);
+            SparseArray<long[]> data = new SparseArray<>();
+            for (int i = 0; i < mUids.length; i++) {
+                data.put(mUids[i], times[i]);
+            }
+            mBpfMapReader.setData(data);
+        } else {
+            writeToFile(mHeadline + uidLines(mUids, times));
+        }
+    }
+
+    private void clearCoresAndData() {
+        if (mUseBpf) {
+            mBpfMapReader.setClusterCores(null);
+            mBpfMapReader.setData(new SparseArray<>());
+        } else {
+            assertTrue(mTestFile.delete());
+        }
+    }
+
     private long[] clusterTime(long[] times) {
         // Assumes 4 + 2 cores
         return new long[]{times[0] + times[1] / 2 + times[2] / 3 + times[3] / 4,
@@ -277,4 +316,36 @@
             assertEquals(0, mData.size());
         }
     }
+
+    private class KernelCpuUidTestBpfMapReader extends KernelCpuUidBpfMapReader {
+        private long[] mClusterCores;
+        private SparseArray<long[]> mNewData = new SparseArray<>();
+
+        public void setData(SparseArray<long[]> data) {
+            mNewData = data;
+        }
+
+        public void setClusterCores(long[] cores) {
+            mClusterCores = cores;
+        }
+
+        @Override
+        public final boolean startTrackingBpfTimes() {
+            return true;
+        }
+
+        @Override
+        protected final boolean readBpfData() {
+            if (!mUseBpf) {
+                return false;
+            }
+            mData = mNewData;
+            return true;
+        }
+
+        @Override
+        public final long[] getDataDimensions() {
+            return mClusterCores;
+        }
+    }
 }
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 0b6fed3..c60a6d6 100644
--- a/core/tests/coretests/src/com/android/internal/os/KernelCpuUidFreqTimeReaderTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/KernelCpuUidFreqTimeReaderTest.java
@@ -29,7 +29,6 @@
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
 
 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader;
 
@@ -37,6 +36,8 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
@@ -45,6 +46,7 @@
 import java.io.IOException;
 import java.nio.file.Files;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Random;
 
 /**
@@ -53,14 +55,16 @@
  * $ atest FrameworksCoreTests:com.android.internal.os.KernelCpuUidFreqTimeReaderTest
  */
 @SmallTest
-@RunWith(AndroidJUnit4.class)
+@RunWith(Parameterized.class)
 public class KernelCpuUidFreqTimeReaderTest {
     private File mTestDir;
     private File mTestFile;
     private KernelCpuUidFreqTimeReader mReader;
+    private KernelCpuUidTestBpfMapReader mBpfMapReader;
     private VerifiableCallback mCallback;
     @Mock
     private PowerProfile mPowerProfile;
+    private boolean mUseBpf;
 
     private Random mRand = new Random(12345);
     private final int[] mUids = {0, 1, 22, 333, 4444, 55555};
@@ -69,13 +73,23 @@
         return InstrumentationRegistry.getContext();
     }
 
+    @Parameters(name="useBpf={0}")
+    public static Collection<Object[]> data() {
+        return Arrays.asList(new Object[][] { {true}, {false} });
+    }
+
+    public KernelCpuUidFreqTimeReaderTest(boolean useBpf) {
+        mUseBpf = useBpf;
+    }
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mTestDir = getContext().getDir("test", Context.MODE_PRIVATE);
         mTestFile = new File(mTestDir, "test.file");
+        mBpfMapReader = new KernelCpuUidTestBpfMapReader();
         mReader = new KernelCpuUidFreqTimeReader(mTestFile.getAbsolutePath(),
-                new KernelCpuProcStringReader(mTestFile.getAbsolutePath()), false);
+                new KernelCpuProcStringReader(mTestFile.getAbsolutePath()), mBpfMapReader, false);
         mCallback = new VerifiableCallback();
     }
 
@@ -97,17 +111,17 @@
         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()), false);
+                    new KernelCpuProcStringReader(mTestFile.getAbsolutePath()), mBpfMapReader, false);
             setCpuClusterFreqs(numClusters[i], numFreqs[i]);
-            writeToFile(freqsLine(freqs[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 read the proc file again
-            assertTrue(mTestFile.delete());
+            // Verify that a second call won't re-read the freqs
+            clearFreqsAndData();
             actualFreqs = mReader.readFreqs(mPowerProfile);
             assertArrayEquals(freqs[i], actualFreqs);
             assertFalse(errMsg, mReader.perClusterTimesAvailable());
@@ -125,17 +139,17 @@
         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()), false);
+                    new KernelCpuProcStringReader(mTestFile.getAbsolutePath()), mBpfMapReader, false);
             setCpuClusterFreqs(numClusters[i], numFreqs[i]);
-            writeToFile(freqsLine(freqs[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 read the proc file again
-            assertTrue(mTestFile.delete());
+            // Verify that a second call won't re-read the freqs
+            clearFreqsAndData();
             actualFreqs = mReader.readFreqs(mPowerProfile);
             assertArrayEquals(freqs[i], actualFreqs);
             assertTrue(errMsg, mReader.perClusterTimesAvailable());
@@ -147,7 +161,7 @@
         final long[] freqs = {110, 123, 145, 167, 289, 997};
         final long[][] times = increaseTime(new long[mUids.length][freqs.length]);
 
-        writeToFile(freqsLine(freqs) + uidLines(mUids, times));
+        setFreqsAndData(freqs, times);
         mReader.readDelta(mCallback);
         for (int i = 0; i < mUids.length; ++i) {
             mCallback.verify(mUids[i], times[i]);
@@ -155,14 +169,14 @@
         mCallback.verifyNoMoreInteractions();
 
         // Verify that readDelta also reads the frequencies if not already available.
-        assertTrue(mTestFile.delete());
+        clearFreqsAndData();
         long[] actualFreqs = mReader.readFreqs(mPowerProfile);
         assertArrayEquals(freqs, actualFreqs);
 
         // Verify that a second call will only return deltas.
         mCallback.clear();
         final long[][] newTimes1 = increaseTime(times);
-        writeToFile(freqsLine(freqs) + uidLines(mUids, newTimes1));
+        setFreqsAndData(freqs, newTimes1);
         mReader.readDelta(mCallback);
         for (int i = 0; i < mUids.length; ++i) {
             mCallback.verify(mUids[i], subtract(newTimes1[i], times[i]));
@@ -177,7 +191,7 @@
         // Verify that calling with a null callback doesn't result in any crashes
         mCallback.clear();
         final long[][] newTimes2 = increaseTime(newTimes1);
-        writeToFile(freqsLine(freqs) + uidLines(mUids, newTimes2));
+        setFreqsAndData(freqs, newTimes2);
         mReader.readDelta(null);
         mCallback.verifyNoMoreInteractions();
 
@@ -185,13 +199,13 @@
         // the previous call had null callback.
         mCallback.clear();
         final long[][] newTimes3 = increaseTime(newTimes2);
-        writeToFile(freqsLine(freqs) + uidLines(mUids, newTimes3));
+        setFreqsAndData(freqs, newTimes3);
         mReader.readDelta(mCallback);
         for (int i = 0; i < mUids.length; ++i) {
             mCallback.verify(mUids[i], subtract(newTimes3[i], newTimes2[i]));
         }
         mCallback.verifyNoMoreInteractions();
-        assertTrue(mTestFile.delete());
+        clearFreqsAndData();
     }
 
     @Test
@@ -199,7 +213,7 @@
         final long[] freqs = {110, 123, 145, 167, 289, 997};
         final long[][] times1 = increaseTime(new long[mUids.length][freqs.length]);
 
-        writeToFile(freqsLine(freqs) + uidLines(mUids, times1));
+        setFreqsAndData(freqs, times1);
         mReader.readAbsolute(mCallback);
         for (int i = 0; i < mUids.length; i++) {
             mCallback.verify(mUids[i], times1[i]);
@@ -207,20 +221,20 @@
         mCallback.verifyNoMoreInteractions();
 
         // Verify that readDelta also reads the frequencies if not already available.
-        assertTrue(mTestFile.delete());
+        clearFreqsAndData();
         long[] actualFreqs = mReader.readFreqs(mPowerProfile);
         assertArrayEquals(freqs, actualFreqs);
 
         // Verify that a second call should still return absolute values
         mCallback.clear();
         final long[][] times2 = increaseTime(times1);
-        writeToFile(freqsLine(freqs) + uidLines(mUids, times2));
+        setFreqsAndData(freqs, times2);
         mReader.readAbsolute(mCallback);
         for (int i = 0; i < mUids.length; i++) {
             mCallback.verify(mUids[i], times2[i]);
         }
         mCallback.verifyNoMoreInteractions();
-        assertTrue(mTestFile.delete());
+        clearFreqsAndData();
     }
 
     @Test
@@ -228,14 +242,14 @@
         final long[] freqs = {110, 123, 145, 167, 289, 997};
         final long[][] times1 = increaseTime(new long[mUids.length][freqs.length]);
 
-        writeToFile(freqsLine(freqs) + uidLines(mUids, times1));
+        setFreqsAndData(freqs, times1);
         mReader.readDelta(mCallback);
 
         // Verify that there should not be a callback for a particular UID if its time decreases.
         mCallback.clear();
         final long[][] times2 = increaseTime(times1);
         times2[0][0] = 1000;
-        writeToFile(freqsLine(freqs) + uidLines(mUids, times2));
+        setFreqsAndData(freqs, times2);
         mReader.readDelta(mCallback);
         for (int i = 1; i < mUids.length; i++) {
             mCallback.verify(mUids[i], subtract(times2[i], times1[i]));
@@ -246,7 +260,7 @@
         mCallback.clear();
         final long[][] times3 = increaseTime(times2);
         times3[0] = increaseTime(times1)[0];
-        writeToFile(freqsLine(freqs) + uidLines(mUids, times3));
+        setFreqsAndData(freqs, times3);
         mReader.readDelta(mCallback);
         mCallback.verify(mUids[0], subtract(times3[0], times1[0]));
         for (int i = 1; i < mUids.length; i++) {
@@ -258,7 +272,7 @@
         mCallback.clear();
         final long[][] times4 = increaseTime(times3);
         times4[0][0] *= -1;
-        writeToFile(freqsLine(freqs) + uidLines(mUids, times4));
+        setFreqsAndData(freqs, times4);
         mReader.readDelta(mCallback);
         for (int i = 1; i < mUids.length; ++i) {
             mCallback.verify(mUids[i], subtract(times4[i], times3[i]));
@@ -269,14 +283,44 @@
         mCallback.clear();
         final long[][] times5 = increaseTime(times4);
         times5[0] = increaseTime(times3)[0];
-        writeToFile(freqsLine(freqs) + uidLines(mUids, times5));
+        setFreqsAndData(freqs, times5);
         mReader.readDelta(mCallback);
         mCallback.verify(mUids[0], subtract(times5[0], times3[0]));
         for (int i = 1; i < mUids.length; i++) {
             mCallback.verify(mUids[i], subtract(times5[i], times4[i]));
         }
 
-        assertTrue(mTestFile.delete());
+        clearFreqsAndData();
+    }
+
+    private void setFreqs(long[] freqs) throws IOException {
+        if (mUseBpf) {
+            mBpfMapReader.setFreqs(freqs);
+        } else {
+            writeToFile(freqsLine(freqs));
+        }
+    }
+
+    private void setFreqsAndData(long[] freqs, long[][] times) throws IOException {
+        if (mUseBpf) {
+            mBpfMapReader.setFreqs(freqs);
+            SparseArray<long[]> data = new SparseArray<>();
+            for (int i = 0; i < mUids.length; i++) {
+                data.put(mUids[i], times[i]);
+            }
+            mBpfMapReader.setData(data);
+        } else {
+            writeToFile(freqsLine(freqs) + uidLines(mUids, times));
+        }
+    }
+
+    private void clearFreqsAndData() {
+        if (mUseBpf) {
+            mBpfMapReader.setFreqs(null);
+            mBpfMapReader.setData(new SparseArray<>());
+        } else {
+            assertTrue(mTestFile.delete());
+        }
     }
 
     private String freqsLine(long[] freqs) {
@@ -358,4 +402,36 @@
             assertEquals(0, mData.size());
         }
     }
+
+    private class KernelCpuUidTestBpfMapReader extends KernelCpuUidBpfMapReader {
+        private long[] mCpuFreqs;
+        private SparseArray<long[]> mNewData = new SparseArray<>();
+
+        public void setData(SparseArray<long[]> data) {
+            mNewData = data;
+        }
+
+        public void setFreqs(long[] freqs) {
+            mCpuFreqs = freqs;
+        }
+
+        @Override
+        public final boolean startTrackingBpfTimes() {
+            return true;
+        }
+
+        @Override
+        protected final boolean readBpfData() {
+            if (!mUseBpf) {
+                return false;
+            }
+            mData = mNewData;
+            return true;
+        }
+
+        @Override
+        public final long[] getDataDimensions() {
+            return mCpuFreqs;
+        }
+    }
 }
diff --git a/core/tests/coretests/src/com/android/internal/os/KernelSingleUidTimeReaderTest.java b/core/tests/coretests/src/com/android/internal/os/KernelSingleUidTimeReaderTest.java
index 479e19e..dac35e5 100644
--- a/core/tests/coretests/src/com/android/internal/os/KernelSingleUidTimeReaderTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/KernelSingleUidTimeReaderTest.java
@@ -31,20 +31,33 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.util.Arrays;
+import java.util.Collection;
 
 @SmallTest
-@RunWith(AndroidJUnit4.class)
+@RunWith(Parameterized.class)
 public class KernelSingleUidTimeReaderTest {
     private final static int TEST_UID = 2222;
     private final static int TEST_FREQ_COUNT = 5;
 
     private KernelSingleUidTimeReader mReader;
     private TestInjector mInjector;
+    protected boolean mUseBpf;
+
+    @Parameters(name="useBpf={0}")
+    public static Collection<Object[]> data() {
+        return Arrays.asList(new Object[][] { {true}, {false} });
+    }
+
+    public KernelSingleUidTimeReaderTest(boolean useBpf) {
+        mUseBpf = useBpf;
+    }
 
     @Before
     public void setUp() {
@@ -273,6 +286,7 @@
 
     class TestInjector extends Injector {
         private byte[] mData;
+        private long[] mBpfData;
         private boolean mThrowExcpetion;
 
         @Override
@@ -284,6 +298,14 @@
             }
         }
 
+        @Override
+        public long[] readBpfData(int uid) {
+            if (!mUseBpf || mBpfData == null) {
+                return new long[0];
+            }
+            return mBpfData;
+        }
+
         public void setData(long[] cpuTimes) {
             final ByteBuffer buffer = ByteBuffer.allocate(cpuTimes.length * Long.BYTES);
             buffer.order(ByteOrder.nativeOrder());
@@ -291,6 +313,7 @@
                 buffer.putLong(time / 10);
             }
             mData = buffer.array();
+            mBpfData = cpuTimes.clone();
         }
 
         public void letReadDataThrowException(boolean throwException) {
diff --git a/core/xsd/vts/Android.bp b/core/xsd/vts/Android.bp
index 9cf68c1..a2a2168 100644
--- a/core/xsd/vts/Android.bp
+++ b/core/xsd/vts/Android.bp
@@ -25,10 +25,18 @@
     ],
     shared_libs: [
         "liblog",
-	"libbase",
+        "libbase",
     ],
     cflags: [
         "-Wall",
         "-Werror",
     ],
+    data: [
+        ":permission",
+    ],
+    test_suites: [
+        "general-tests",
+        "vts-core"
+    ],
+    test_config: "vts_permission_validate_test.xml",
 }
diff --git a/core/xsd/vts/vts_permission_validate_test.xml b/core/xsd/vts/vts_permission_validate_test.xml
new file mode 100644
index 0000000..228ffc4
--- /dev/null
+++ b/core/xsd/vts/vts_permission_validate_test.xml
@@ -0,0 +1,33 @@
+<?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.
+-->
+<configuration description="Runs vts_permission_validate_test.">
+    <option name="test-suite-tag" value="apct" />
+    <option name="test-suite-tag" value="apct-native" />
+
+    <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer">
+    </target_preparer>
+
+    <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
+        <option name="cleanup" value="true" />
+        <option name="push" value="permission.xsd->/data/local/tmp/permission.xsd" />
+        <option name="push" value="vts_permission_validate_test->/data/local/tmp/vts_permission_validate_test" />
+    </target_preparer>
+
+    <test class="com.android.tradefed.testtype.GTest" >
+        <option name="native-test-device-path" value="/data/local/tmp" />
+        <option name="module-name" value="vts_permission_validate_test" />
+    </test>
+</configuration>
diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml
index f83fb3f..78c7b76d 100644
--- a/data/etc/privapp-permissions-platform.xml
+++ b/data/etc/privapp-permissions-platform.xml
@@ -70,6 +70,7 @@
     <privapp-permissions package="com.android.managedprovisioning">
         <permission name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
         <permission name="android.permission.CHANGE_CONFIGURATION"/>
+        <permission name="android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES"/>
         <permission name="android.permission.CRYPT_KEEPER"/>
         <permission name="android.permission.DELETE_PACKAGES"/>
         <permission name="android.permission.INSTALL_PACKAGES"/>
@@ -218,6 +219,9 @@
         <permission name="android.permission.WATCH_APPOPS"/>
         <permission name="android.permission.UPDATE_APP_OPS_STATS"/>
         <permission name="android.permission.UPDATE_DEVICE_STATS"/>
+        <!-- Permissions required for reading and logging compat changes -->
+        <permission name="android.permission.LOG_COMPAT_CHANGE" />
+        <permission name="android.permission.READ_COMPAT_CHANGE_CONFIG" />
     </privapp-permissions>
 
     <privapp-permissions package="com.android.providers.telephony">
@@ -378,6 +382,10 @@
         <!-- Permission required for ShortcutManagerUsageTest CTS test. -->
         <permission name="android.permission.ACCESS_SHORTCUTS"/>
         <permission name="android.permission.REBOOT"/>
+        <!-- Permission required for access VIBRATOR_STATE. -->
+        <permission name="android.permission.ACCESS_VIBRATOR_STATE"/>
+        <!-- Permission required for UsageStatsTest CTS test. -->
+        <permission name="android.permission.MANAGE_NOTIFICATIONS"/>
     </privapp-permissions>
 
     <privapp-permissions package="com.android.statementservice">
@@ -402,6 +410,7 @@
     <privapp-permissions package="com.android.dynsystem">
         <permission name="android.permission.REBOOT"/>
         <permission name="android.permission.MANAGE_DYNAMIC_SYSTEM"/>
+        <permission name="android.permission.READ_OEM_UNLOCK_STATE"/>
     </privapp-permissions>
     <privapp-permissions package="com.android.settings">
         <permission name="android.permission.INSTALL_DYNAMIC_SYSTEM"/>
diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json
index 9da185b..5b23dc0 100644
--- a/data/etc/services.core.protolog.json
+++ b/data/etc/services.core.protolog.json
@@ -223,6 +223,12 @@
       "group": "WM_DEBUG_ADD_REMOVE",
       "at": "com\/android\/server\/wm\/ActivityRecord.java"
     },
+    "-1670695197": {
+      "message": "Attempted to add presentation window to a non-suitable display.  Aborting.",
+      "level": "WARN",
+      "group": "WM_ERROR",
+      "at": "com\/android\/server\/wm\/WindowManagerService.java"
+    },
     "-1661704580": {
       "message": "Attempted to set replacing window on non-existing app token %s",
       "level": "WARN",
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 9c2e95f..c1e7a36 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -2243,6 +2243,19 @@
         return nativeCreateGraphicBufferHandle(mNativePtr);
     }
 
+    /**
+     * @return {@link HardwareBuffer} which is internally used by hardware bitmap
+     *
+     * Note: the HardwareBuffer does *not* have an associated {@link ColorSpace}.
+     * To render this object the same as its rendered with this Bitmap, you
+     * should also call {@link getColorSpace}.
+     *
+     * @hide
+     */
+    public HardwareBuffer getHardwareBuffer() {
+        return nativeGetHardwareBuffer(mNativePtr);
+    }
+
     //////////// native methods
 
     private static native Bitmap nativeCreate(int[] colors, int offset,
@@ -2308,6 +2321,7 @@
     private static native Bitmap nativeWrapHardwareBufferBitmap(HardwareBuffer buffer,
                                                                 long nativeColorSpace);
     private static native GraphicBuffer nativeCreateGraphicBufferHandle(long nativeBitmap);
+    private static native HardwareBuffer nativeGetHardwareBuffer(long nativeBitmap);
     private static native ColorSpace nativeComputeColorSpace(long nativePtr);
     private static native void nativeSetColorSpace(long nativePtr, long nativeColorSpace);
     private static native boolean nativeIsSRGB(long nativePtr);
diff --git a/graphics/java/android/graphics/ColorSpace.java b/graphics/java/android/graphics/ColorSpace.java
index 06d4fbd..ce8ff7d 100644
--- a/graphics/java/android/graphics/ColorSpace.java
+++ b/graphics/java/android/graphics/ColorSpace.java
@@ -867,7 +867,8 @@
         }
     }
 
-    private ColorSpace(
+    /** @hide */
+    ColorSpace(
             @NonNull String name,
             @NonNull Model model,
             @IntRange(from = MIN_ID, to = MAX_ID) int id) {
diff --git a/graphics/java/android/graphics/FontFamily.java b/graphics/java/android/graphics/FontFamily.java
index 447f043..f50de16 100644
--- a/graphics/java/android/graphics/FontFamily.java
+++ b/graphics/java/android/graphics/FontFamily.java
@@ -19,6 +19,7 @@
 import android.annotation.Nullable;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.res.AssetManager;
+import android.graphics.fonts.Font;
 import android.graphics.fonts.FontVariationAxis;
 import android.os.Build;
 import android.text.TextUtils;
@@ -195,18 +196,13 @@
         if (mBuilderPtr == 0) {
             throw new IllegalStateException("Unable to call addFontFromAsset after freezing.");
         }
-        if (axes != null) {
-            for (FontVariationAxis axis : axes) {
-                nAddAxisValue(mBuilderPtr, axis.getOpenTypeTagValue(), axis.getStyleValue());
-            }
-        }
-        return nAddFontFromAssetManager(mBuilderPtr, mgr, path, cookie, isAsset, ttcIndex, weight,
-                isItalic);
-    }
 
-    // TODO: Remove once internal user stop using private API.
-    private static boolean nAddFont(long builderPtr, ByteBuffer font, int ttcIndex) {
-        return nAddFont(builderPtr, font, ttcIndex, -1, -1);
+        try {
+            ByteBuffer buffer =  Font.Builder.createBuffer(mgr, path, isAsset, cookie);
+            return addFontFromBuffer(buffer, ttcIndex, axes, weight, isItalic);
+        } catch (IOException e) {
+            return false;
+        }
     }
 
     private static native long nInitBuilder(String langs, int variant);
@@ -225,8 +221,6 @@
             int weight, int isItalic);
     private static native boolean nAddFontWeightStyle(long builderPtr, ByteBuffer font,
             int ttcIndex, int weight, int isItalic);
-    private static native boolean nAddFontFromAssetManager(long builderPtr, AssetManager mgr,
-            String path, int cookie, boolean isAsset, int ttcIndex, int weight, int isItalic);
 
     // The added axis values are only valid for the next nAddFont* method call.
     @CriticalNative
diff --git a/graphics/java/android/graphics/GraphicsStatsService.java b/graphics/java/android/graphics/GraphicsStatsService.java
new file mode 100644
index 0000000..8dfd6ee
--- /dev/null
+++ b/graphics/java/android/graphics/GraphicsStatsService.java
@@ -0,0 +1,566 @@
+/*
+ * 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.graphics;
+
+import android.annotation.SystemApi;
+import android.app.AlarmManager;
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Binder;
+import android.os.Environment;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.ParcelFileDescriptor;
+import android.os.Process;
+import android.os.RemoteException;
+import android.os.SharedMemory;
+import android.os.Trace;
+import android.os.UserHandle;
+import android.system.ErrnoException;
+import android.util.Log;
+import android.view.IGraphicsStats;
+import android.view.IGraphicsStatsCallback;
+
+import com.android.internal.util.DumpUtils;
+import com.android.internal.util.FastPrintWriter;
+
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.HashSet;
+import java.util.TimeZone;
+
+/**
+ * This service's job is to collect aggregate rendering profile data. It
+ * does this by allowing rendering processes to request an ashmem buffer
+ * to place their stats into.
+ *
+ * Buffers are rotated on a daily (in UTC) basis and only the 3 most-recent days
+ * are kept.
+ *
+ * The primary consumer of this is incident reports and automated metric checking. It is not
+ * intended for end-developer consumption, for that we have gfxinfo.
+ *
+ * Buffer rotation process:
+ * 1) Alarm fires
+ * 2) onRotateGraphicsStatsBuffer() is sent to all active processes
+ * 3) Upon receiving the callback, the process will stop using the previous ashmem buffer and
+ *    request a new one.
+ * 4) When that request is received we now know that the ashmem region is no longer in use so
+ *    it gets queued up for saving to disk and a new ashmem region is created and returned
+ *    for the process to use.
+ *
+ *  @hide */
+public class GraphicsStatsService extends IGraphicsStats.Stub {
+    public static final String GRAPHICS_STATS_SERVICE = "graphicsstats";
+
+    private static final String TAG = "GraphicsStatsService";
+
+    private static final int SAVE_BUFFER = 1;
+    private static final int DELETE_OLD = 2;
+
+    private static final int AID_STATSD = 1066; // Statsd uid is set to 1066 forever.
+
+    // This isn't static because we need this to happen after registerNativeMethods, however
+    // the class is loaded (and thus static ctor happens) before that occurs.
+    private final int mAshmemSize = nGetAshmemSize();
+    private final byte[] mZeroData = new byte[mAshmemSize];
+
+    private final Context mContext;
+    private final AppOpsManager mAppOps;
+    private final AlarmManager mAlarmManager;
+    private final Object mLock = new Object();
+    private ArrayList<ActiveBuffer> mActive = new ArrayList<>();
+    private File mGraphicsStatsDir;
+    private final Object mFileAccessLock = new Object();
+    private Handler mWriteOutHandler;
+    private boolean mRotateIsScheduled = false;
+
+    @SystemApi
+    public GraphicsStatsService(Context context) {
+        mContext = context;
+        mAppOps = context.getSystemService(AppOpsManager.class);
+        mAlarmManager = context.getSystemService(AlarmManager.class);
+        File systemDataDir = new File(Environment.getDataDirectory(), "system");
+        mGraphicsStatsDir = new File(systemDataDir, "graphicsstats");
+        mGraphicsStatsDir.mkdirs();
+        if (!mGraphicsStatsDir.exists()) {
+            throw new IllegalStateException("Graphics stats directory does not exist: "
+                    + mGraphicsStatsDir.getAbsolutePath());
+        }
+        HandlerThread bgthread = new HandlerThread("GraphicsStats-disk",
+                Process.THREAD_PRIORITY_BACKGROUND);
+        bgthread.start();
+
+        mWriteOutHandler = new Handler(bgthread.getLooper(), new Handler.Callback() {
+            @Override
+            public boolean handleMessage(Message msg) {
+                switch (msg.what) {
+                    case SAVE_BUFFER:
+                        saveBuffer((HistoricalBuffer) msg.obj);
+                        break;
+                    case DELETE_OLD:
+                        deleteOldBuffers();
+                        break;
+                }
+                return true;
+            }
+        });
+        nativeInit();
+    }
+
+    /**
+     * Current rotation policy is to rotate at midnight UTC. We don't specify RTC_WAKEUP because
+     * rotation can be delayed if there's otherwise no activity. However exact is used because
+     * we don't want the system to delay it by TOO much.
+     */
+    private void scheduleRotateLocked() {
+        if (mRotateIsScheduled) {
+            return;
+        }
+        mRotateIsScheduled = true;
+        Calendar calendar = normalizeDate(System.currentTimeMillis());
+        calendar.add(Calendar.DATE, 1);
+        mAlarmManager.setExact(AlarmManager.RTC, calendar.getTimeInMillis(), TAG, this::onAlarm,
+                mWriteOutHandler);
+    }
+
+    private void onAlarm() {
+        // We need to make a copy since some of the callbacks won't be proxy and thus
+        // can result in a re-entrant acquisition of mLock that would result in a modification
+        // of mActive during iteration.
+        ActiveBuffer[] activeCopy;
+        synchronized (mLock) {
+            mRotateIsScheduled = false;
+            scheduleRotateLocked();
+            activeCopy = mActive.toArray(new ActiveBuffer[0]);
+        }
+        for (ActiveBuffer active : activeCopy) {
+            try {
+                active.mCallback.onRotateGraphicsStatsBuffer();
+            } catch (RemoteException e) {
+                Log.w(TAG, String.format("Failed to notify '%s' (pid=%d) to rotate buffers",
+                        active.mInfo.mPackageName, active.mPid), e);
+            }
+        }
+        // Give a few seconds for everyone to rotate before doing the cleanup
+        mWriteOutHandler.sendEmptyMessageDelayed(DELETE_OLD, 10000);
+    }
+
+    @Override
+    public ParcelFileDescriptor requestBufferForProcess(String packageName,
+            IGraphicsStatsCallback token) throws RemoteException {
+        int uid = Binder.getCallingUid();
+        int pid = Binder.getCallingPid();
+        ParcelFileDescriptor pfd = null;
+        long callingIdentity = Binder.clearCallingIdentity();
+        try {
+            mAppOps.checkPackage(uid, packageName);
+            PackageInfo info = mContext.getPackageManager().getPackageInfoAsUser(
+                    packageName,
+                    0,
+                    UserHandle.getUserId(uid));
+            synchronized (mLock) {
+                pfd = requestBufferForProcessLocked(token, uid, pid, packageName,
+                        info.getLongVersionCode());
+            }
+        } catch (PackageManager.NameNotFoundException ex) {
+            throw new RemoteException("Unable to find package: '" + packageName + "'");
+        } finally {
+            Binder.restoreCallingIdentity(callingIdentity);
+        }
+        return pfd;
+    }
+
+    // If lastFullDay is true, pullGraphicsStats returns stats for the last complete day/24h period
+    // that does not include today. If lastFullDay is false, pullGraphicsStats returns stats for the
+    // current day.
+    // This method is invoked from native code only.
+    @SuppressWarnings({"UnusedDeclaration"})
+    private void pullGraphicsStats(boolean lastFullDay, long pulledData) throws RemoteException {
+        int uid = Binder.getCallingUid();
+
+        // DUMP and PACKAGE_USAGE_STATS permissions are required to invoke this method.
+        // TODO: remove exception for statsd daemon after required permissions are granted. statsd
+        // TODO: should have these permissions granted by data/etc/platform.xml, but it does not.
+        if (uid != AID_STATSD) {
+            StringWriter sw = new StringWriter();
+            PrintWriter pw = new FastPrintWriter(sw);
+            if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, TAG, pw)) {
+                pw.flush();
+                throw new RemoteException(sw.toString());
+            }
+        }
+
+        long callingIdentity = Binder.clearCallingIdentity();
+        try {
+            pullGraphicsStatsImpl(lastFullDay, pulledData);
+        } finally {
+            Binder.restoreCallingIdentity(callingIdentity);
+        }
+    }
+
+    private void pullGraphicsStatsImpl(boolean lastFullDay, long pulledData) {
+        long targetDay;
+        if (lastFullDay) {
+            // Get stats from yesterday. Stats stay constant, because the day is over.
+            targetDay = normalizeDate(System.currentTimeMillis() - 86400000).getTimeInMillis();
+        } else {
+            // Get stats from today. Stats may change as more apps are run today.
+            targetDay = normalizeDate(System.currentTimeMillis()).getTimeInMillis();
+        }
+
+        // Find active buffers for targetDay.
+        ArrayList<HistoricalBuffer> buffers;
+        synchronized (mLock) {
+            buffers = new ArrayList<>(mActive.size());
+            for (int i = 0; i < mActive.size(); i++) {
+                ActiveBuffer buffer = mActive.get(i);
+                if (buffer.mInfo.mStartTime == targetDay) {
+                    try {
+                        buffers.add(new HistoricalBuffer(buffer));
+                    } catch (IOException ex) {
+                        // Ignore
+                    }
+                }
+            }
+        }
+
+        // Dump active and historic buffers for targetDay in a serialized
+        // GraphicsStatsServiceDumpProto proto.
+        long dump = nCreateDump(-1, true);
+        try {
+            synchronized (mFileAccessLock) {
+                HashSet<File> skipList = dumpActiveLocked(dump, buffers);
+                buffers.clear();
+                String subPath = String.format("%d", targetDay);
+                File dateDir = new File(mGraphicsStatsDir, subPath);
+                if (dateDir.exists()) {
+                    for (File pkg : dateDir.listFiles()) {
+                        for (File version : pkg.listFiles()) {
+                            File data = new File(version, "total");
+                            if (skipList.contains(data)) {
+                                continue;
+                            }
+                            nAddToDump(dump, data.getAbsolutePath());
+                        }
+                    }
+                }
+            }
+        } finally {
+            nFinishDumpInMemory(dump, pulledData, lastFullDay);
+        }
+    }
+
+    private ParcelFileDescriptor requestBufferForProcessLocked(IGraphicsStatsCallback token,
+            int uid, int pid, String packageName, long versionCode) throws RemoteException {
+        ActiveBuffer buffer = fetchActiveBuffersLocked(token, uid, pid, packageName, versionCode);
+        scheduleRotateLocked();
+        return buffer.getPfd();
+    }
+
+    private Calendar normalizeDate(long timestamp) {
+        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+        calendar.setTimeInMillis(timestamp);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        return calendar;
+    }
+
+    private File pathForApp(BufferInfo info) {
+        String subPath = String.format("%d/%s/%d/total",
+                normalizeDate(info.mStartTime).getTimeInMillis(), info.mPackageName,
+                info.mVersionCode);
+        return new File(mGraphicsStatsDir, subPath);
+    }
+
+    private void saveBuffer(HistoricalBuffer buffer) {
+        if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) {
+            Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER,
+                    "saving graphicsstats for " + buffer.mInfo.mPackageName);
+        }
+        synchronized (mFileAccessLock) {
+            File path = pathForApp(buffer.mInfo);
+            File parent = path.getParentFile();
+            parent.mkdirs();
+            if (!parent.exists()) {
+                Log.w(TAG, "Unable to create path: '" + parent.getAbsolutePath() + "'");
+                return;
+            }
+            nSaveBuffer(path.getAbsolutePath(), buffer.mInfo.mPackageName,
+                    buffer.mInfo.mVersionCode, buffer.mInfo.mStartTime, buffer.mInfo.mEndTime,
+                    buffer.mData);
+        }
+        Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+    }
+
+    private void deleteRecursiveLocked(File file) {
+        if (file.isDirectory()) {
+            for (File child : file.listFiles()) {
+                deleteRecursiveLocked(child);
+            }
+        }
+        if (!file.delete()) {
+            Log.w(TAG, "Failed to delete '" + file.getAbsolutePath() + "'!");
+        }
+    }
+
+    private void deleteOldBuffers() {
+        Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "deleting old graphicsstats buffers");
+        synchronized (mFileAccessLock) {
+            File[] files = mGraphicsStatsDir.listFiles();
+            if (files == null || files.length <= 3) {
+                return;
+            }
+            long[] sortedDates = new long[files.length];
+            for (int i = 0; i < files.length; i++) {
+                try {
+                    sortedDates[i] = Long.parseLong(files[i].getName());
+                } catch (NumberFormatException ex) {
+                    // Skip unrecognized folders
+                }
+            }
+            if (sortedDates.length <= 3) {
+                return;
+            }
+            Arrays.sort(sortedDates);
+            for (int i = 0; i < sortedDates.length - 3; i++) {
+                deleteRecursiveLocked(new File(mGraphicsStatsDir, Long.toString(sortedDates[i])));
+            }
+        }
+        Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+    }
+
+    private void addToSaveQueue(ActiveBuffer buffer) {
+        try {
+            HistoricalBuffer data = new HistoricalBuffer(buffer);
+            Message.obtain(mWriteOutHandler, SAVE_BUFFER, data).sendToTarget();
+        } catch (IOException e) {
+            Log.w(TAG, "Failed to copy graphicsstats from " + buffer.mInfo.mPackageName, e);
+        }
+        buffer.closeAllBuffers();
+    }
+
+    private void processDied(ActiveBuffer buffer) {
+        synchronized (mLock) {
+            mActive.remove(buffer);
+        }
+        addToSaveQueue(buffer);
+    }
+
+    private ActiveBuffer fetchActiveBuffersLocked(IGraphicsStatsCallback token, int uid, int pid,
+            String packageName, long versionCode) throws RemoteException {
+        int size = mActive.size();
+        long today = normalizeDate(System.currentTimeMillis()).getTimeInMillis();
+        for (int i = 0; i < size; i++) {
+            ActiveBuffer buffer = mActive.get(i);
+            if (buffer.mPid == pid
+                    && buffer.mUid == uid) {
+                // If the buffer is too old we remove it and return a new one
+                if (buffer.mInfo.mStartTime < today) {
+                    buffer.binderDied();
+                    break;
+                } else {
+                    return buffer;
+                }
+            }
+        }
+        // Didn't find one, need to create it
+        try {
+            ActiveBuffer buffers = new ActiveBuffer(token, uid, pid, packageName, versionCode);
+            mActive.add(buffers);
+            return buffers;
+        } catch (IOException ex) {
+            throw new RemoteException("Failed to allocate space");
+        }
+    }
+
+    private HashSet<File> dumpActiveLocked(long dump, ArrayList<HistoricalBuffer> buffers) {
+        HashSet<File> skipFiles = new HashSet<>(buffers.size());
+        for (int i = 0; i < buffers.size(); i++) {
+            HistoricalBuffer buffer = buffers.get(i);
+            File path = pathForApp(buffer.mInfo);
+            skipFiles.add(path);
+            nAddToDump(dump, path.getAbsolutePath(), buffer.mInfo.mPackageName,
+                    buffer.mInfo.mVersionCode,  buffer.mInfo.mStartTime, buffer.mInfo.mEndTime,
+                    buffer.mData);
+        }
+        return skipFiles;
+    }
+
+    private void dumpHistoricalLocked(long dump, HashSet<File> skipFiles) {
+        for (File date : mGraphicsStatsDir.listFiles()) {
+            for (File pkg : date.listFiles()) {
+                for (File version : pkg.listFiles()) {
+                    File data = new File(version, "total");
+                    if (skipFiles.contains(data)) {
+                        continue;
+                    }
+                    nAddToDump(dump, data.getAbsolutePath());
+                }
+            }
+        }
+    }
+
+    @Override
+    protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
+        if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, TAG, fout)) return;
+        boolean dumpProto = false;
+        for (String str : args) {
+            if ("--proto".equals(str)) {
+                dumpProto = true;
+                break;
+            }
+        }
+        ArrayList<HistoricalBuffer> buffers;
+        synchronized (mLock) {
+            buffers = new ArrayList<>(mActive.size());
+            for (int i = 0; i < mActive.size(); i++) {
+                try {
+                    buffers.add(new HistoricalBuffer(mActive.get(i)));
+                } catch (IOException ex) {
+                    // Ignore
+                }
+            }
+        }
+        long dump = nCreateDump(fd.getInt$(), dumpProto);
+        try {
+            synchronized (mFileAccessLock) {
+                HashSet<File> skipList = dumpActiveLocked(dump, buffers);
+                buffers.clear();
+                dumpHistoricalLocked(dump, skipList);
+            }
+        } finally {
+            nFinishDump(dump);
+        }
+    }
+
+    @Override
+    protected void finalize() throws Throwable {
+        nativeDestructor();
+    }
+
+    private native void nativeInit();
+    private static native void nativeDestructor();
+
+    private static native int nGetAshmemSize();
+    private static native long nCreateDump(int outFd, boolean isProto);
+    private static native void nAddToDump(long dump, String path, String packageName,
+            long versionCode, long startTime, long endTime, byte[] data);
+    private static native void nAddToDump(long dump, String path);
+    private static native void nFinishDump(long dump);
+    private static native void nFinishDumpInMemory(long dump, long pulledData, boolean lastFullDay);
+    private static native void nSaveBuffer(String path, String packageName, long versionCode,
+            long startTime, long endTime, byte[] data);
+
+    private final class BufferInfo {
+        final String mPackageName;
+        final long mVersionCode;
+        long mStartTime;
+        long mEndTime;
+
+        BufferInfo(String packageName, long versionCode, long startTime) {
+            this.mPackageName = packageName;
+            this.mVersionCode = versionCode;
+            this.mStartTime = startTime;
+        }
+    }
+
+    private final class ActiveBuffer implements DeathRecipient {
+        final BufferInfo mInfo;
+        final int mUid;
+        final int mPid;
+        final IGraphicsStatsCallback mCallback;
+        final IBinder mToken;
+        SharedMemory mProcessBuffer;
+        ByteBuffer mMapping;
+
+        ActiveBuffer(IGraphicsStatsCallback token, int uid, int pid, String packageName,
+                long versionCode)
+                throws RemoteException, IOException {
+            mInfo = new BufferInfo(packageName, versionCode, System.currentTimeMillis());
+            mUid = uid;
+            mPid = pid;
+            mCallback = token;
+            mToken = mCallback.asBinder();
+            mToken.linkToDeath(this, 0);
+            try {
+                mProcessBuffer = SharedMemory.create("GFXStats-" + pid, mAshmemSize);
+                mMapping = mProcessBuffer.mapReadWrite();
+            } catch (ErrnoException ex) {
+                ex.rethrowAsIOException();
+            }
+            mMapping.position(0);
+            mMapping.put(mZeroData, 0, mAshmemSize);
+        }
+
+        @Override
+        public void binderDied() {
+            mToken.unlinkToDeath(this, 0);
+            processDied(this);
+        }
+
+        void closeAllBuffers() {
+            if (mMapping != null) {
+                SharedMemory.unmap(mMapping);
+                mMapping = null;
+            }
+            if (mProcessBuffer != null) {
+                mProcessBuffer.close();
+                mProcessBuffer = null;
+            }
+        }
+
+        ParcelFileDescriptor getPfd() {
+            try {
+                return mProcessBuffer.getFdDup();
+            } catch (IOException ex) {
+                throw new IllegalStateException("Failed to get PFD from memory file", ex);
+            }
+        }
+
+        void readBytes(byte[] buffer, int count) throws IOException  {
+            if (mMapping == null) {
+                throw new IOException("SharedMemory has been deactivated");
+            }
+            mMapping.position(0);
+            mMapping.get(buffer, 0, count);
+        }
+    }
+
+    private final class HistoricalBuffer {
+        final BufferInfo mInfo;
+        final byte[] mData = new byte[mAshmemSize];
+        HistoricalBuffer(ActiveBuffer active) throws IOException {
+            mInfo = active.mInfo;
+            mInfo.mEndTime = System.currentTimeMillis();
+            active.readBytes(mData, mAshmemSize);
+        }
+    }
+}
diff --git a/graphics/java/android/graphics/HardwareRenderer.java b/graphics/java/android/graphics/HardwareRenderer.java
index 3b86413..d08bfcf 100644
--- a/graphics/java/android/graphics/HardwareRenderer.java
+++ b/graphics/java/android/graphics/HardwareRenderer.java
@@ -157,7 +157,7 @@
     public HardwareRenderer() {
         mRootNode = RenderNode.adopt(nCreateRootRenderNode());
         mRootNode.setClipToBounds(false);
-        mNativeProxy = nCreateProxy(!mOpaque, mRootNode.mNativeRenderNode);
+        mNativeProxy = nCreateProxy(!mOpaque, mIsWideGamut, mRootNode.mNativeRenderNode);
         if (mNativeProxy == 0) {
             throw new OutOfMemoryError("Unable to create hardware renderer");
         }
@@ -1085,7 +1085,8 @@
 
     private static native long nCreateRootRenderNode();
 
-    private static native long nCreateProxy(boolean translucent, long rootRenderNode);
+    private static native long nCreateProxy(boolean translucent, boolean isWideGamut,
+            long rootRenderNode);
 
     private static native void nDeleteProxy(long nativeProxy);
 
diff --git a/graphics/java/android/graphics/ParcelableColorSpace.java b/graphics/java/android/graphics/ParcelableColorSpace.java
new file mode 100644
index 0000000..f9033a5
--- /dev/null
+++ b/graphics/java/android/graphics/ParcelableColorSpace.java
@@ -0,0 +1,183 @@
+/*
+ * 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.graphics;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * A {@link Parcelable} {@link ColorSpace}. In order to enable parceling, the ColorSpace
+ * must be either a {@link ColorSpace.Named Named} ColorSpace or a {@link ColorSpace.Rgb} instance
+ * that has an ICC parametric transfer function as returned by {@link Rgb#getTransferParameters()}.
+ * TODO: Make public
+ * @hide
+ */
+public final class ParcelableColorSpace extends ColorSpace implements Parcelable {
+    private final ColorSpace mColorSpace;
+
+    /**
+     * Checks if the given ColorSpace is able to be parceled. A ColorSpace can only be
+     * parceled if it is a {@link ColorSpace.Named Named} ColorSpace or a {@link ColorSpace.Rgb}
+     * instance that has an ICC parametric transfer function as returned by
+     * {@link Rgb#getTransferParameters()}
+     */
+    public static boolean isParcelable(@NonNull ColorSpace colorSpace) {
+        if (colorSpace.getId() == ColorSpace.MIN_ID) {
+            if (!(colorSpace instanceof ColorSpace.Rgb)) {
+                return false;
+            }
+            ColorSpace.Rgb rgb = (ColorSpace.Rgb) colorSpace;
+            if (rgb.getTransferParameters() == null) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Constructs a new ParcelableColorSpace that wraps the provided ColorSpace.
+     *
+     * @param colorSpace The ColorSpace to wrap. The ColorSpace must be either named or be an
+     *                   RGB ColorSpace with an ICC parametric transfer function.
+     * @throws IllegalArgumentException If the provided ColorSpace does not satisfy the requirements
+     * to be parceled. See {@link #isParcelable(ColorSpace)}.
+     */
+    public ParcelableColorSpace(@NonNull ColorSpace colorSpace) {
+        super(colorSpace.getName(), colorSpace.getModel(), colorSpace.getId());
+        mColorSpace = colorSpace;
+
+        if (mColorSpace.getId() == ColorSpace.MIN_ID) {
+            if (!(mColorSpace instanceof ColorSpace.Rgb)) {
+                throw new IllegalArgumentException(
+                        "Unable to parcel unknown ColorSpaces that are not ColorSpace.Rgb");
+            }
+            ColorSpace.Rgb rgb = (ColorSpace.Rgb) mColorSpace;
+            if (rgb.getTransferParameters() == null) {
+                throw new IllegalArgumentException("ColorSpace must use an ICC "
+                        + "parametric transfer function to be parcelable");
+            }
+        }
+    }
+
+    public @NonNull ColorSpace getColorSpace() {
+        return mColorSpace;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        final int id = mColorSpace.getId();
+        dest.writeInt(id);
+        if (id == ColorSpace.MIN_ID) {
+            // Not a named color space. We have to actually write, like, stuff. And things. Ugh.
+            // Cast is safe because this was asserted in the constructor
+            ColorSpace.Rgb rgb = (ColorSpace.Rgb) mColorSpace;
+            dest.writeString(rgb.getName());
+            dest.writeFloatArray(rgb.getPrimaries());
+            dest.writeFloatArray(rgb.getWhitePoint());
+            ColorSpace.Rgb.TransferParameters transferParameters = rgb.getTransferParameters();
+            dest.writeDouble(transferParameters.a);
+            dest.writeDouble(transferParameters.b);
+            dest.writeDouble(transferParameters.c);
+            dest.writeDouble(transferParameters.d);
+            dest.writeDouble(transferParameters.e);
+            dest.writeDouble(transferParameters.f);
+            dest.writeDouble(transferParameters.g);
+        }
+    }
+
+    @NonNull
+    public static final Parcelable.Creator<ParcelableColorSpace> CREATOR =
+            new Parcelable.Creator<ParcelableColorSpace>() {
+
+        public @NonNull ParcelableColorSpace createFromParcel(@NonNull Parcel in) {
+            final int id = in.readInt();
+            if (id == ColorSpace.MIN_ID) {
+                String name = in.readString();
+                float[] primaries = in.createFloatArray();
+                float[] whitePoint = in.createFloatArray();
+                double a = in.readDouble();
+                double b = in.readDouble();
+                double c = in.readDouble();
+                double d = in.readDouble();
+                double e = in.readDouble();
+                double f = in.readDouble();
+                double g = in.readDouble();
+                ColorSpace.Rgb.TransferParameters function =
+                        new ColorSpace.Rgb.TransferParameters(a, b, c, d, e, f, g);
+                return new ParcelableColorSpace(
+                        new ColorSpace.Rgb(name, primaries, whitePoint, function));
+            } else {
+                return new ParcelableColorSpace(ColorSpace.get(id));
+            }
+        }
+
+        public ParcelableColorSpace[] newArray(int size) {
+            return new ParcelableColorSpace[size];
+        }
+    };
+
+    @Override
+    public boolean isWideGamut() {
+        return mColorSpace.isWideGamut();
+    }
+
+    @Override
+    public float getMinValue(int component) {
+        return mColorSpace.getMinValue(component);
+    }
+
+    @Override
+    public float getMaxValue(int component) {
+        return mColorSpace.getMaxValue(component);
+    }
+
+    @Override
+    public @NonNull float[] toXyz(@NonNull float[] v) {
+        return mColorSpace.toXyz(v);
+    }
+
+    @Override
+    public @NonNull float[] fromXyz(@NonNull float[] v) {
+        return mColorSpace.fromXyz(v);
+    }
+
+    @Override
+    public boolean equals(@Nullable Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        ParcelableColorSpace other = (ParcelableColorSpace) o;
+        return mColorSpace.equals(other.mColorSpace);
+    }
+
+    @Override
+    public int hashCode() {
+        return mColorSpace.hashCode();
+    }
+
+    /** @hide */
+    @Override
+    long getNativeInstance() {
+        return mColorSpace.getNativeInstance();
+    }
+}
diff --git a/graphics/java/android/graphics/RenderNode.java b/graphics/java/android/graphics/RenderNode.java
index 3835b2d..752695f 100644
--- a/graphics/java/android/graphics/RenderNode.java
+++ b/graphics/java/android/graphics/RenderNode.java
@@ -22,8 +22,8 @@
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.graphics.animation.RenderNodeAnimator;
 import android.view.NativeVectorDrawableAnimator;
-import android.view.RenderNodeAnimator;
 import android.view.Surface;
 import android.view.View;
 
diff --git a/graphics/java/android/graphics/animation/FallbackLUTInterpolator.java b/graphics/java/android/graphics/animation/FallbackLUTInterpolator.java
new file mode 100644
index 0000000..36062c1
--- /dev/null
+++ b/graphics/java/android/graphics/animation/FallbackLUTInterpolator.java
@@ -0,0 +1,80 @@
+/*
+ * 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.graphics.animation;
+
+import android.animation.TimeInterpolator;
+import android.util.TimeUtils;
+import android.view.Choreographer;
+
+/**
+ * Interpolator that builds a lookup table to use. This is a fallback for
+ * building a native interpolator from a TimeInterpolator that is not marked
+ * with {@link HasNativeInterpolator}
+ *
+ * This implements TimeInterpolator to allow for easier interop with Animators
+ * @hide
+ */
+@HasNativeInterpolator
+public class FallbackLUTInterpolator implements NativeInterpolator, TimeInterpolator {
+
+    // If the duration of an animation is more than 300 frames, we cap the sample size to 300.
+    private static final int MAX_SAMPLE_POINTS = 300;
+    private TimeInterpolator mSourceInterpolator;
+    private final float[] mLut;
+
+    /**
+     * Used to cache the float[] LUT for use across multiple native
+     * interpolator creation
+     */
+    public FallbackLUTInterpolator(TimeInterpolator interpolator, long duration) {
+        mSourceInterpolator = interpolator;
+        mLut = createLUT(interpolator, duration);
+    }
+
+    private static float[] createLUT(TimeInterpolator interpolator, long duration) {
+        long frameIntervalNanos = Choreographer.getInstance().getFrameIntervalNanos();
+        int animIntervalMs = (int) (frameIntervalNanos / TimeUtils.NANOS_PER_MS);
+        // We need 2 frame values as the minimal.
+        int numAnimFrames = Math.max(2, (int) Math.ceil(((double) duration) / animIntervalMs));
+        numAnimFrames = Math.min(numAnimFrames, MAX_SAMPLE_POINTS);
+        float[] values = new float[numAnimFrames];
+        float lastFrame = numAnimFrames - 1;
+        for (int i = 0; i < numAnimFrames; i++) {
+            float inValue = i / lastFrame;
+            values[i] = interpolator.getInterpolation(inValue);
+        }
+        return values;
+    }
+
+    @Override
+    public long createNativeInterpolator() {
+        return NativeInterpolatorFactory.createLutInterpolator(mLut);
+    }
+
+    /**
+     * Used to create a one-shot float[] LUT & native interpolator
+     */
+    public static long createNativeInterpolator(TimeInterpolator interpolator, long duration) {
+        float[] lut = createLUT(interpolator, duration);
+        return NativeInterpolatorFactory.createLutInterpolator(lut);
+    }
+
+    @Override
+    public float getInterpolation(float input) {
+        return mSourceInterpolator.getInterpolation(input);
+    }
+}
diff --git a/graphics/java/android/graphics/animation/HasNativeInterpolator.java b/graphics/java/android/graphics/animation/HasNativeInterpolator.java
new file mode 100644
index 0000000..c53d5a4
--- /dev/null
+++ b/graphics/java/android/graphics/animation/HasNativeInterpolator.java
@@ -0,0 +1,37 @@
+/*
+ * 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.graphics.animation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * This is a class annotation that signals that it is safe to create
+ * a native interpolator counterpart via {@link NativeInterpolator}
+ *
+ * The idea here is to prevent subclasses of interpolators from being treated as a
+ * NativeInterpolator, and instead have them fall back to the LUT & LERP
+ * method like a custom interpolator.
+ *
+ * @hide
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface HasNativeInterpolator {
+}
diff --git a/graphics/java/android/graphics/animation/NativeInterpolator.java b/graphics/java/android/graphics/animation/NativeInterpolator.java
new file mode 100644
index 0000000..1e6fea8
--- /dev/null
+++ b/graphics/java/android/graphics/animation/NativeInterpolator.java
@@ -0,0 +1,29 @@
+/*
+ * 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.graphics.animation;
+
+/**
+ * @hide
+ */
+public interface NativeInterpolator {
+    /**
+     * Generates a native interpolator object that can be used by HardwareRenderer to draw
+     * RenderNodes.
+     * @return ptr to native object
+     */
+    long createNativeInterpolator();
+}
diff --git a/graphics/java/android/graphics/animation/NativeInterpolatorFactory.java b/graphics/java/android/graphics/animation/NativeInterpolatorFactory.java
new file mode 100644
index 0000000..3886614
--- /dev/null
+++ b/graphics/java/android/graphics/animation/NativeInterpolatorFactory.java
@@ -0,0 +1,67 @@
+/*
+ * 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.graphics.animation;
+
+import android.animation.TimeInterpolator;
+
+/**
+ * Static utility class for constructing native interpolators to keep the
+ * JNI simpler
+ *
+ * @hide
+ */
+public final class NativeInterpolatorFactory {
+    private NativeInterpolatorFactory() {}
+
+    /**
+     * Create a native interpolator from the provided param generating a LUT variant if a native
+     * implementation does not exist.
+     */
+    public static long createNativeInterpolator(TimeInterpolator interpolator, long
+            duration) {
+        if (interpolator == null) {
+            return createLinearInterpolator();
+        } else if (RenderNodeAnimator.isNativeInterpolator(interpolator)) {
+            return ((NativeInterpolator) interpolator).createNativeInterpolator();
+        } else {
+            return FallbackLUTInterpolator.createNativeInterpolator(interpolator, duration);
+        }
+    }
+
+    /** Creates a specialized native interpolator for Accelerate/Decelerate */
+    public static native long createAccelerateDecelerateInterpolator();
+    /** Creates a specialized native interpolator for Accelerate */
+    public static native long createAccelerateInterpolator(float factor);
+    /** Creates a specialized native interpolator for Anticipate */
+    public static native long createAnticipateInterpolator(float tension);
+    /** Creates a specialized native interpolator for Anticipate with Overshoot */
+    public static native long createAnticipateOvershootInterpolator(float tension);
+    /** Creates a specialized native interpolator for Bounce */
+    public static native long createBounceInterpolator();
+    /** Creates a specialized native interpolator for Cycle */
+    public static native long createCycleInterpolator(float cycles);
+    /** Creates a specialized native interpolator for Decelerate */
+    public static native long createDecelerateInterpolator(float factor);
+    /** Creates a specialized native interpolator for Linear interpolation */
+    public static native long createLinearInterpolator();
+    /** Creates a specialized native interpolator for Overshoot */
+    public static native long createOvershootInterpolator(float tension);
+    /** Creates a specialized native interpolator for along traveling along a Path */
+    public static native long createPathInterpolator(float[] x, float[] y);
+    /** Creates a specialized native interpolator for LUT */
+    public static native long createLutInterpolator(float[] values);
+}
diff --git a/graphics/java/android/graphics/animation/RenderNodeAnimator.java b/graphics/java/android/graphics/animation/RenderNodeAnimator.java
new file mode 100644
index 0000000..282b2f9
--- /dev/null
+++ b/graphics/java/android/graphics/animation/RenderNodeAnimator.java
@@ -0,0 +1,513 @@
+/*
+ * 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.graphics.animation;
+
+import android.animation.Animator;
+import android.animation.TimeInterpolator;
+import android.animation.ValueAnimator;
+import android.graphics.CanvasProperty;
+import android.graphics.Paint;
+import android.graphics.RecordingCanvas;
+import android.graphics.RenderNode;
+import android.os.Handler;
+import android.os.Looper;
+import android.view.Choreographer;
+
+import com.android.internal.util.VirtualRefBasePtr;
+
+import java.util.ArrayList;
+
+/**
+ * @hide
+ */
+public class RenderNodeAnimator extends Animator {
+    // Keep in sync with enum RenderProperty in Animator.h
+    public static final int TRANSLATION_X = 0;
+    public static final int TRANSLATION_Y = 1;
+    public static final int TRANSLATION_Z = 2;
+    public static final int SCALE_X = 3;
+    public static final int SCALE_Y = 4;
+    public static final int ROTATION = 5;
+    public static final int ROTATION_X = 6;
+    public static final int ROTATION_Y = 7;
+    public static final int X = 8;
+    public static final int Y = 9;
+    public static final int Z = 10;
+    public static final int ALPHA = 11;
+    // The last value in the enum, used for array size initialization
+    public static final int LAST_VALUE = ALPHA;
+
+    // Keep in sync with enum PaintFields in Animator.h
+    public static final int PAINT_STROKE_WIDTH = 0;
+
+    /**
+     * Field for the Paint alpha channel, which should be specified as a value
+     * between 0 and 255.
+     */
+    public static final int PAINT_ALPHA = 1;
+
+    private VirtualRefBasePtr mNativePtr;
+
+    private Handler mHandler;
+    private RenderNode mTarget;
+    private ViewListener mViewListener;
+    private int mRenderProperty = -1;
+    private float mFinalValue;
+    private TimeInterpolator mInterpolator;
+
+    private static final int STATE_PREPARE = 0;
+    private static final int STATE_DELAYED = 1;
+    private static final int STATE_RUNNING = 2;
+    private static final int STATE_FINISHED = 3;
+    private int mState = STATE_PREPARE;
+
+    private long mUnscaledDuration = 300;
+    private long mUnscaledStartDelay = 0;
+    // If this is true, we will run any start delays on the UI thread. This is
+    // the safe default, and is necessary to ensure start listeners fire at
+    // the correct time. Animators created by RippleDrawable (the
+    // CanvasProperty<> ones) do not have this expectation, and as such will
+    // set this to false so that the renderthread handles the startdelay instead
+    private final boolean mUiThreadHandlesDelay;
+    private long mStartDelay = 0;
+    private long mStartTime;
+
+    /**
+     * Interface used by the view system to update the view hierarchy in conjunction
+     * with this animator.
+     */
+    public interface ViewListener {
+        /** notify the listener that an alpha animation has begun. */
+        void onAlphaAnimationStart(float finalAlpha);
+        /** notify the listener that the animator has mutated a value that requires invalidation */
+        void invalidateParent(boolean forceRedraw);
+    }
+
+    public RenderNodeAnimator(int property, float finalValue) {
+        mRenderProperty = property;
+        mFinalValue = finalValue;
+        mUiThreadHandlesDelay = true;
+        init(nCreateAnimator(property, finalValue));
+    }
+
+    public RenderNodeAnimator(CanvasProperty<Float> property, float finalValue) {
+        init(nCreateCanvasPropertyFloatAnimator(
+                property.getNativeContainer(), finalValue));
+        mUiThreadHandlesDelay = false;
+    }
+
+    /**
+     * Creates a new render node animator for a field on a Paint property.
+     *
+     * @param property The paint property to target
+     * @param paintField Paint field to animate, one of {@link #PAINT_ALPHA} or
+     *            {@link #PAINT_STROKE_WIDTH}
+     * @param finalValue The target value for the property
+     */
+    public RenderNodeAnimator(CanvasProperty<Paint> property, int paintField, float finalValue) {
+        init(nCreateCanvasPropertyPaintAnimator(
+                property.getNativeContainer(), paintField, finalValue));
+        mUiThreadHandlesDelay = false;
+    }
+
+    public RenderNodeAnimator(int x, int y, float startRadius, float endRadius) {
+        init(nCreateRevealAnimator(x, y, startRadius, endRadius));
+        mUiThreadHandlesDelay = true;
+    }
+
+    private void init(long ptr) {
+        mNativePtr = new VirtualRefBasePtr(ptr);
+    }
+
+    private void checkMutable() {
+        if (mState != STATE_PREPARE) {
+            throw new IllegalStateException("Animator has already started, cannot change it now!");
+        }
+        if (mNativePtr == null) {
+            throw new IllegalStateException("Animator's target has been destroyed "
+                    + "(trying to modify an animation after activity destroy?)");
+        }
+    }
+
+    static boolean isNativeInterpolator(TimeInterpolator interpolator) {
+        return interpolator.getClass().isAnnotationPresent(HasNativeInterpolator.class);
+    }
+
+    private void applyInterpolator() {
+        if (mInterpolator == null || mNativePtr == null) return;
+
+        long ni;
+        if (isNativeInterpolator(mInterpolator)) {
+            ni = ((NativeInterpolator) mInterpolator).createNativeInterpolator();
+        } else {
+            long duration = nGetDuration(mNativePtr.get());
+            ni = FallbackLUTInterpolator.createNativeInterpolator(mInterpolator, duration);
+        }
+        nSetInterpolator(mNativePtr.get(), ni);
+    }
+
+    @Override
+    public void start() {
+        if (mTarget == null) {
+            throw new IllegalStateException("Missing target!");
+        }
+
+        if (mState != STATE_PREPARE) {
+            throw new IllegalStateException("Already started!");
+        }
+
+        mState = STATE_DELAYED;
+        if (mHandler == null) {
+            mHandler = new Handler(true);
+        }
+        applyInterpolator();
+
+        if (mNativePtr == null) {
+            // It's dead, immediately cancel
+            cancel();
+        } else if (mStartDelay <= 0 || !mUiThreadHandlesDelay) {
+            nSetStartDelay(mNativePtr.get(), mStartDelay);
+            doStart();
+        } else {
+            getHelper().addDelayedAnimation(this);
+        }
+    }
+
+    private void doStart() {
+        // Alpha is a special snowflake that has the canonical value stored
+        // in mTransformationInfo instead of in RenderNode, so we need to update
+        // it with the final value here.
+        if (mRenderProperty == RenderNodeAnimator.ALPHA && mViewListener != null) {
+            mViewListener.onAlphaAnimationStart(mFinalValue);
+        }
+
+        moveToRunningState();
+
+        if (mViewListener != null) {
+            // Kick off a frame to start the process
+            mViewListener.invalidateParent(false);
+        }
+    }
+
+    private void moveToRunningState() {
+        mState = STATE_RUNNING;
+        if (mNativePtr != null) {
+            nStart(mNativePtr.get());
+        }
+        notifyStartListeners();
+    }
+
+    private void notifyStartListeners() {
+        final ArrayList<AnimatorListener> listeners = cloneListeners();
+        final int numListeners = listeners == null ? 0 : listeners.size();
+        for (int i = 0; i < numListeners; i++) {
+            listeners.get(i).onAnimationStart(this);
+        }
+    }
+
+    @Override
+    public void cancel() {
+        if (mState != STATE_PREPARE && mState != STATE_FINISHED) {
+            if (mState == STATE_DELAYED) {
+                getHelper().removeDelayedAnimation(this);
+                moveToRunningState();
+            }
+
+            final ArrayList<AnimatorListener> listeners = cloneListeners();
+            final int numListeners = listeners == null ? 0 : listeners.size();
+            for (int i = 0; i < numListeners; i++) {
+                listeners.get(i).onAnimationCancel(this);
+            }
+
+            end();
+        }
+    }
+
+    @Override
+    public void end() {
+        if (mState != STATE_FINISHED) {
+            if (mState < STATE_RUNNING) {
+                getHelper().removeDelayedAnimation(this);
+                doStart();
+            }
+            if (mNativePtr != null) {
+                nEnd(mNativePtr.get());
+                if (mViewListener != null) {
+                    // Kick off a frame to flush the state change
+                    mViewListener.invalidateParent(false);
+                }
+            } else {
+                // It's already dead, jump to onFinish
+                onFinished();
+            }
+        }
+    }
+
+    @Override
+    public void pause() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void resume() {
+        throw new UnsupportedOperationException();
+    }
+
+    /** @hide */
+    public void setViewListener(ViewListener listener) {
+        mViewListener = listener;
+    }
+
+    /** Sets the animation target to the owning view of the RecordingCanvas */
+    public final void setTarget(RecordingCanvas canvas) {
+        setTarget(canvas.mNode);
+    }
+
+    /** Sets the node that is to be the target of this animation */
+    protected void setTarget(RenderNode node) {
+        checkMutable();
+        if (mTarget != null) {
+            throw new IllegalStateException("Target already set!");
+        }
+        nSetListener(mNativePtr.get(), this);
+        mTarget = node;
+        mTarget.addAnimator(this);
+    }
+
+    /** Set the start value for the animation */
+    public void setStartValue(float startValue) {
+        checkMutable();
+        nSetStartValue(mNativePtr.get(), startValue);
+    }
+
+    @Override
+    public void setStartDelay(long startDelay) {
+        checkMutable();
+        if (startDelay < 0) {
+            throw new IllegalArgumentException("startDelay must be positive; " + startDelay);
+        }
+        mUnscaledStartDelay = startDelay;
+        mStartDelay = (long) (ValueAnimator.getDurationScale() * startDelay);
+    }
+
+    @Override
+    public long getStartDelay() {
+        return mUnscaledStartDelay;
+    }
+
+    @Override
+    public RenderNodeAnimator setDuration(long duration) {
+        checkMutable();
+        if (duration < 0) {
+            throw new IllegalArgumentException("duration must be positive; " + duration);
+        }
+        mUnscaledDuration = duration;
+        nSetDuration(mNativePtr.get(), (long) (duration * ValueAnimator.getDurationScale()));
+        return this;
+    }
+
+    @Override
+    public long getDuration() {
+        return mUnscaledDuration;
+    }
+
+    @Override
+    public long getTotalDuration() {
+        return mUnscaledDuration + mUnscaledStartDelay;
+    }
+
+    @Override
+    public boolean isRunning() {
+        return mState == STATE_DELAYED || mState == STATE_RUNNING;
+    }
+
+    @Override
+    public boolean isStarted() {
+        return mState != STATE_PREPARE;
+    }
+
+    @Override
+    public void setInterpolator(TimeInterpolator interpolator) {
+        checkMutable();
+        mInterpolator = interpolator;
+    }
+
+    @Override
+    public TimeInterpolator getInterpolator() {
+        return mInterpolator;
+    }
+
+    protected void onFinished() {
+        if (mState == STATE_PREPARE) {
+            // Unlikely but possible, the native side has been destroyed
+            // before we have started.
+            releaseNativePtr();
+            return;
+        }
+        if (mState == STATE_DELAYED) {
+            getHelper().removeDelayedAnimation(this);
+            notifyStartListeners();
+        }
+        mState = STATE_FINISHED;
+
+        final ArrayList<AnimatorListener> listeners = cloneListeners();
+        final int numListeners = listeners == null ? 0 : listeners.size();
+        for (int i = 0; i < numListeners; i++) {
+            listeners.get(i).onAnimationEnd(this);
+        }
+
+        // Release the native object, as it has a global reference to us. This
+        // breaks the cyclic reference chain, and allows this object to be
+        // GC'd
+        releaseNativePtr();
+    }
+
+    private void releaseNativePtr() {
+        if (mNativePtr != null) {
+            mNativePtr.release();
+            mNativePtr = null;
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private ArrayList<AnimatorListener> cloneListeners() {
+        ArrayList<AnimatorListener> listeners = getListeners();
+        if (listeners != null) {
+            listeners = (ArrayList<AnimatorListener>) listeners.clone();
+        }
+        return listeners;
+    }
+
+    public long getNativeAnimator() {
+        return mNativePtr.get();
+    }
+
+    /**
+     * @return true if the animator was started, false if still delayed
+     */
+    private boolean processDelayed(long frameTimeMs) {
+        if (mStartTime == 0) {
+            mStartTime = frameTimeMs;
+        } else if ((frameTimeMs - mStartTime) >= mStartDelay) {
+            doStart();
+            return true;
+        }
+        return false;
+    }
+
+    private static DelayedAnimationHelper getHelper() {
+        DelayedAnimationHelper helper = sAnimationHelper.get();
+        if (helper == null) {
+            helper = new DelayedAnimationHelper();
+            sAnimationHelper.set(helper);
+        }
+        return helper;
+    }
+
+    private static ThreadLocal<DelayedAnimationHelper> sAnimationHelper =
+            new ThreadLocal<DelayedAnimationHelper>();
+
+    private static class DelayedAnimationHelper implements Runnable {
+
+        private ArrayList<RenderNodeAnimator> mDelayedAnims = new ArrayList<RenderNodeAnimator>();
+        private final Choreographer mChoreographer;
+        private boolean mCallbackScheduled;
+
+        DelayedAnimationHelper() {
+            mChoreographer = Choreographer.getInstance();
+        }
+
+        public void addDelayedAnimation(RenderNodeAnimator animator) {
+            mDelayedAnims.add(animator);
+            scheduleCallback();
+        }
+
+        public void removeDelayedAnimation(RenderNodeAnimator animator) {
+            mDelayedAnims.remove(animator);
+        }
+
+        private void scheduleCallback() {
+            if (!mCallbackScheduled) {
+                mCallbackScheduled = true;
+                mChoreographer.postCallback(Choreographer.CALLBACK_ANIMATION, this, null);
+            }
+        }
+
+        @Override
+        public void run() {
+            long frameTimeMs = mChoreographer.getFrameTime();
+            mCallbackScheduled = false;
+
+            int end = 0;
+            for (int i = 0; i < mDelayedAnims.size(); i++) {
+                RenderNodeAnimator animator = mDelayedAnims.get(i);
+                if (!animator.processDelayed(frameTimeMs)) {
+                    if (end != i) {
+                        mDelayedAnims.set(end, animator);
+                    }
+                    end++;
+                }
+            }
+            while (mDelayedAnims.size() > end) {
+                mDelayedAnims.remove(mDelayedAnims.size() - 1);
+            }
+
+            if (mDelayedAnims.size() > 0) {
+                scheduleCallback();
+            }
+        }
+    }
+
+    // Called by native
+    private static void callOnFinished(RenderNodeAnimator animator) {
+        if (animator.mHandler != null) {
+            animator.mHandler.post(animator::onFinished);
+        } else {
+            new Handler(Looper.getMainLooper(), null, true).post(animator::onFinished);
+        }
+    }
+
+    @Override
+    public Animator clone() {
+        throw new IllegalStateException("Cannot clone this animator");
+    }
+
+    @Override
+    public void setAllowRunningAsynchronously(boolean mayRunAsync) {
+        checkMutable();
+        nSetAllowRunningAsync(mNativePtr.get(), mayRunAsync);
+    }
+
+    private static native long nCreateAnimator(int property, float finalValue);
+    private static native long nCreateCanvasPropertyFloatAnimator(
+            long canvasProperty, float finalValue);
+    private static native long nCreateCanvasPropertyPaintAnimator(
+            long canvasProperty, int paintField, float finalValue);
+    private static native long nCreateRevealAnimator(
+            int x, int y, float startRadius, float endRadius);
+
+    private static native void nSetStartValue(long nativePtr, float startValue);
+    private static native void nSetDuration(long nativePtr, long duration);
+    private static native long nGetDuration(long nativePtr);
+    private static native void nSetStartDelay(long nativePtr, long startDelay);
+    private static native void nSetInterpolator(long animPtr, long interpolatorPtr);
+    private static native void nSetAllowRunningAsync(long animPtr, boolean mayRunAsync);
+    private static native void nSetListener(long animPtr, RenderNodeAnimator listener);
+
+    private static native void nStart(long animPtr);
+    private static native void nEnd(long animPtr);
+}
diff --git a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
index 1acf6c5..9fb72cf 100644
--- a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
@@ -42,6 +42,7 @@
 import android.graphics.RecordingCanvas;
 import android.graphics.Rect;
 import android.graphics.RenderNode;
+import android.graphics.animation.NativeInterpolatorFactory;
 import android.os.Build;
 import android.os.Handler;
 import android.util.ArrayMap;
@@ -54,7 +55,6 @@
 import android.util.TimeUtils;
 import android.view.Choreographer;
 import android.view.NativeVectorDrawableAnimator;
-import android.view.RenderNodeAnimatorSetHelper;
 import android.view.View;
 
 import com.android.internal.R;
@@ -1532,7 +1532,7 @@
             long startDelay = extraDelay + animator.getStartDelay();
             TimeInterpolator interpolator = animator.getInterpolator();
             long nativeInterpolator =
-                    RenderNodeAnimatorSetHelper.createNativeInterpolator(interpolator, duration);
+                    NativeInterpolatorFactory.createNativeInterpolator(interpolator, duration);
 
             startDelay *= ValueAnimator.getDurationScale();
             duration *= ValueAnimator.getDurationScale();
@@ -1548,7 +1548,7 @@
          * to the last seen RenderNode target and start right away.
          */
         protected void recordLastSeenTarget(RecordingCanvas canvas) {
-            final RenderNode node = RenderNodeAnimatorSetHelper.getTarget(canvas);
+            final RenderNode node = canvas.mNode;
             mLastSeenTarget = new WeakReference<RenderNode>(node);
             // Add the animator to the list of animators on every draw
             if (mInitialized || mPendingAnimationActions.size() > 0) {
diff --git a/graphics/java/android/graphics/drawable/RippleForeground.java b/graphics/java/android/graphics/drawable/RippleForeground.java
index cce9ba3..0f37695 100644
--- a/graphics/java/android/graphics/drawable/RippleForeground.java
+++ b/graphics/java/android/graphics/drawable/RippleForeground.java
@@ -25,9 +25,9 @@
 import android.graphics.Paint;
 import android.graphics.RecordingCanvas;
 import android.graphics.Rect;
+import android.graphics.animation.RenderNodeAnimator;
 import android.util.FloatProperty;
 import android.util.MathUtils;
-import android.view.RenderNodeAnimator;
 import android.view.animation.AnimationUtils;
 import android.view.animation.LinearInterpolator;
 import android.view.animation.PathInterpolator;
diff --git a/graphics/java/android/graphics/fonts/Font.java b/graphics/java/android/graphics/fonts/Font.java
index ba96a06..4899fbe 100644
--- a/graphics/java/android/graphics/fonts/Font.java
+++ b/graphics/java/android/graphics/fonts/Font.java
@@ -19,6 +19,7 @@
 import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.content.res.AssetFileDescriptor;
 import android.content.res.AssetManager;
 import android.content.res.Resources;
 import android.os.LocaleList;
@@ -35,7 +36,9 @@
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
 import java.nio.channels.FileChannel;
 import java.util.Arrays;
 import java.util.Objects;
@@ -54,10 +57,6 @@
      * A builder class for creating new Font.
      */
     public static final class Builder {
-        private static final NativeAllocationRegistry sAssetByteBufferRegistry =
-                NativeAllocationRegistry.createMalloced(ByteBuffer.class.getClassLoader(),
-                    nGetReleaseNativeAssetFunc());
-
         private static final NativeAllocationRegistry sFontRegistry =
                 NativeAllocationRegistry.createMalloced(Font.class.getClassLoader(),
                     nGetReleaseNativeFont());
@@ -151,7 +150,11 @@
          * @param path the file name of the font data in the asset directory
          */
         public Builder(@NonNull AssetManager am, @NonNull String path) {
-            this(am, path, true /* is asset */, 0 /* cookie */);
+            try {
+                mBuffer = createBuffer(am, path, true /* is asset */, 0 /* cookie */);
+            } catch (IOException e) {
+                mException = e;
+            }
         }
 
         /**
@@ -165,18 +168,11 @@
          */
         public Builder(@NonNull AssetManager am, @NonNull String path, boolean isAsset,
                 int cookie) {
-            final long nativeAsset = nGetNativeAsset(am, path, isAsset, cookie);
-            if (nativeAsset == 0) {
-                mException = new FileNotFoundException("Unable to open " + path);
-                return;
+            try {
+                mBuffer = createBuffer(am, path, isAsset, cookie);
+            } catch (IOException e) {
+                mException = e;
             }
-            final ByteBuffer b = nGetAssetBuffer(nativeAsset);
-            sAssetByteBufferRegistry.registerNativeAllocation(b, nativeAsset);
-            if (b == null) {
-                mException = new FileNotFoundException(path + " not found");
-                return;
-            }
-            mBuffer = b;
         }
 
         /**
@@ -199,19 +195,64 @@
                 mException = new FileNotFoundException(resId + " must be font file.");
                 return;
             }
-            final long nativeAsset = nGetNativeAsset(res.getAssets(), str, false /* is asset */,
-                    value.assetCookie);
-            if (nativeAsset == 0) {
-                mException = new FileNotFoundException("Unable to open " + str);
-                return;
+
+            try {
+                mBuffer = createBuffer(res.getAssets(), str, false, value.assetCookie);
+            } catch (IOException e) {
+                mException = e;
             }
-            final ByteBuffer b = nGetAssetBuffer(nativeAsset);
-            sAssetByteBufferRegistry.registerNativeAllocation(b, nativeAsset);
-            if (b == null) {
-                mException = new FileNotFoundException(str + " not found");
-                return;
+        }
+
+        /**
+         * Creates a buffer containing font data using the assetManager and other
+         * provided inputs.
+         *
+         * @param am the application's asset manager
+         * @param path the file name of the font data in the asset directory
+         * @param isAsset true if the undelying data is in asset
+         * @param cookie set asset cookie
+         * @return buffer containing the contents of the file
+         *
+         * @hide
+         */
+        public static ByteBuffer createBuffer(@NonNull AssetManager am, @NonNull String path,
+                                              boolean isAsset, int cookie) throws IOException {
+            Preconditions.checkNotNull(am, "assetManager can not be null");
+            Preconditions.checkNotNull(path, "path can not be null");
+
+            if (!isAsset) {
+                // Attempt to open as FD, which should work unless the asset is compressed
+                AssetFileDescriptor assetFD;
+                try {
+                    if (cookie > 0) {
+                        assetFD = am.openNonAssetFd(cookie, path);
+                    } else {
+                        assetFD = am.openNonAssetFd(path);
+                    }
+
+                    try (FileInputStream fis = assetFD.createInputStream()) {
+                        final FileChannel fc = fis.getChannel();
+                        return fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
+                    }
+                } catch (IOException e) {
+                    // failed to open as FD so now we will attempt to open as an input stream
+                }
             }
-            mBuffer = b;
+
+            try (InputStream assetStream = isAsset ? am.open(path, AssetManager.ACCESS_BUFFER)
+                    : am.openNonAsset(cookie, path, AssetManager.ACCESS_BUFFER)) {
+
+                int capacity = assetStream.available();
+                ByteBuffer buffer = ByteBuffer.allocateDirect(capacity);
+                buffer.order(ByteOrder.nativeOrder());
+                assetStream.read(buffer.array(), buffer.arrayOffset(), assetStream.available());
+
+                if (assetStream.read() != -1) {
+                    throw new IOException("Unable to access full contents of " + path);
+                }
+
+                return buffer;
+            }
         }
 
         /**
@@ -396,15 +437,6 @@
         }
 
         /**
-         * Native methods for accessing underlying buffer in Asset
-         */
-        private static native long nGetNativeAsset(
-                @NonNull AssetManager am, @NonNull String path, boolean isAsset, int cookie);
-        private static native ByteBuffer nGetAssetBuffer(long nativeAsset);
-        @CriticalNative
-        private static native long nGetReleaseNativeAssetFunc();
-
-        /**
          * Native methods for creating Font
          */
         private static native long nInitBuilder();
diff --git a/identity/java/android/security/identity/CredstoreIdentityCredential.java b/identity/java/android/security/identity/CredstoreIdentityCredential.java
index c520331..7c0af6d 100644
--- a/identity/java/android/security/identity/CredstoreIdentityCredential.java
+++ b/identity/java/android/security/identity/CredstoreIdentityCredential.java
@@ -152,8 +152,8 @@
             derivedKey = Util.computeHkdf("HmacSha256", sharedSecret, salt, info, 32);
             mReaderSecretKey = new SecretKeySpec(derivedKey, "AES");
 
-            mEphemeralCounter = 0;
-            mReadersExpectedEphemeralCounter = 0;
+            mEphemeralCounter = 1;
+            mReadersExpectedEphemeralCounter = 1;
 
         } catch (NoSuchAlgorithmException e) {
             throw new RuntimeException("Error performing key agreement", e);
diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreSecretKeyFactorySpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreSecretKeyFactorySpi.java
index a2d2355..8dbb5f5 100644
--- a/keystore/java/android/security/keystore/AndroidKeyStoreSecretKeyFactorySpi.java
+++ b/keystore/java/android/security/keystore/AndroidKeyStoreSecretKeyFactorySpi.java
@@ -206,6 +206,7 @@
                 blockModes,
                 userAuthenticationRequired,
                 (int) userAuthenticationValidityDurationSeconds,
+                keymasterHwEnforcedUserAuthenticators,
                 userAuthenticationRequirementEnforcedBySecureHardware,
                 userAuthenticationValidWhileOnBody,
                 trustedUserPresenceRequred,
diff --git a/keystore/java/android/security/keystore/KeyGenParameterSpec.java b/keystore/java/android/security/keystore/KeyGenParameterSpec.java
index 450dd33..d683041 100644
--- a/keystore/java/android/security/keystore/KeyGenParameterSpec.java
+++ b/keystore/java/android/security/keystore/KeyGenParameterSpec.java
@@ -263,6 +263,7 @@
     private final boolean mRandomizedEncryptionRequired;
     private final boolean mUserAuthenticationRequired;
     private final int mUserAuthenticationValidityDurationSeconds;
+    private final @KeyProperties.AuthEnum int mUserAuthenticationType;
     private final boolean mUserPresenceRequired;
     private final byte[] mAttestationChallenge;
     private final boolean mUniqueIdIncluded;
@@ -301,6 +302,7 @@
             boolean randomizedEncryptionRequired,
             boolean userAuthenticationRequired,
             int userAuthenticationValidityDurationSeconds,
+            @KeyProperties.AuthEnum int userAuthenticationType,
             boolean userPresenceRequired,
             byte[] attestationChallenge,
             boolean uniqueIdIncluded,
@@ -352,6 +354,7 @@
         mUserAuthenticationRequired = userAuthenticationRequired;
         mUserPresenceRequired = userPresenceRequired;
         mUserAuthenticationValidityDurationSeconds = userAuthenticationValidityDurationSeconds;
+        mUserAuthenticationType = userAuthenticationType;
         mAttestationChallenge = Utils.cloneIfNotNull(attestationChallenge);
         mUniqueIdIncluded = uniqueIdIncluded;
         mUserAuthenticationValidWhileOnBody = userAuthenticationValidWhileOnBody;
@@ -605,6 +608,22 @@
     }
 
     /**
+     * Gets the modes of authentication that can authorize use of this key. This has effect only if
+     * user authentication is required (see {@link #isUserAuthenticationRequired()}).
+     *
+     * <p>This authorization applies only to secret key and private key operations. Public key
+     * operations are not restricted.
+     *
+     * @return integer representing the bitwse OR of all acceptable authentication types for the
+     *         key.
+     *
+     * @see #isUserAuthenticationRequired()
+     * @see Builder#setUserAuthenticationParameters(int, int)
+     */
+    public @KeyProperties.AuthEnum int getUserAuthenticationType() {
+        return mUserAuthenticationType;
+    }
+    /**
      * Returns {@code true} if the key is authorized to be used only if a test of user presence has
      * been performed between the {@code Signature.initSign()} and {@code Signature.sign()} calls.
      * It requires that the KeyStore implementation have a direct way to validate the user presence
@@ -746,6 +765,7 @@
         private boolean mRandomizedEncryptionRequired = true;
         private boolean mUserAuthenticationRequired;
         private int mUserAuthenticationValidityDurationSeconds = -1;
+        private @KeyProperties.AuthEnum int mUserAuthenticationType;
         private boolean mUserPresenceRequired = false;
         private byte[] mAttestationChallenge = null;
         private boolean mUniqueIdIncluded = false;
@@ -810,6 +830,7 @@
             mUserAuthenticationRequired = sourceSpec.isUserAuthenticationRequired();
             mUserAuthenticationValidityDurationSeconds =
                 sourceSpec.getUserAuthenticationValidityDurationSeconds();
+            mUserAuthenticationType = sourceSpec.getUserAuthenticationType();
             mUserPresenceRequired = sourceSpec.isUserPresenceRequired();
             mAttestationChallenge = sourceSpec.getAttestationChallenge();
             mUniqueIdIncluded = sourceSpec.isUniqueIdIncluded();
@@ -1207,14 +1228,62 @@
          * @see BiometricPrompt
          * @see BiometricPrompt.CryptoObject
          * @see KeyguardManager
+         * @deprecated See {@link #setUserAuthenticationParameters(int, int)}
          */
+        @Deprecated
         @NonNull
         public Builder setUserAuthenticationValidityDurationSeconds(
                 @IntRange(from = -1) int seconds) {
             if (seconds < -1) {
                 throw new IllegalArgumentException("seconds must be -1 or larger");
             }
-            mUserAuthenticationValidityDurationSeconds = seconds;
+            if (seconds == -1) {
+                return setUserAuthenticationParameters(0, KeyProperties.AUTH_BIOMETRIC_STRONG);
+            }
+            return setUserAuthenticationParameters(seconds, KeyProperties.AUTH_BIOMETRIC_STRONG);
+        }
+
+        /**
+         * Sets the duration of time (seconds) and authorization type for which this key is
+         * authorized to be used after the user is successfully authenticated. This has effect if
+         * the key requires user authentication for its use (see
+         * {@link #setUserAuthenticationRequired(boolean)}).
+         *
+         * <p>By default, if user authentication is required, it must take place for every use of
+         * the key.
+         *
+         * <p>These cryptographic operations will throw {@link UserNotAuthenticatedException} during
+         * initialization if the user needs to be authenticated to proceed. This situation can be
+         * resolved by the user authenticating with the appropriate biometric or credential as
+         * required by the key. See {@link BiometricPrompt.Builder#setAllowedAuthenticators(int)}
+         * and {@link BiometricManager.Authenticators}.
+         *
+         * <p>Once resolved, initializing a new cryptographic operation using this key (or any other
+         * key which is authorized to be used for a fixed duration of time after user
+         * authentication) should succeed provided the user authentication flow completed
+         * successfully.
+         *
+         * @param timeout duration in seconds or {@code 0} if user authentication must take place
+         *        for every use of the key. {@code -1} is also accepted for legacy purposes. It is
+         *        functionally the same as {@code 0}.
+         * @param type set of authentication types which can authorize use of the key. See
+         *        {@link KeyProperties}.{@code AUTH} flags.
+         *
+         * @see #setUserAuthenticationRequired(boolean)
+         * @see BiometricPrompt
+         * @see BiometricPrompt.CryptoObject
+         * @see KeyguardManager
+         */
+        @NonNull
+        public Builder setUserAuthenticationParameters(@IntRange(from = -1) int timeout,
+                                                       @KeyProperties.AuthEnum int type) {
+            if (timeout < -1) {
+                throw new IllegalArgumentException("timeout must be -1 or larger");
+            } else if (timeout == -1) {
+                timeout = 0;
+            }
+            mUserAuthenticationValidityDurationSeconds = timeout;
+            mUserAuthenticationType = type;
             return this;
         }
 
@@ -1392,6 +1461,7 @@
                     mRandomizedEncryptionRequired,
                     mUserAuthenticationRequired,
                     mUserAuthenticationValidityDurationSeconds,
+                    mUserAuthenticationType,
                     mUserPresenceRequired,
                     mAttestationChallenge,
                     mUniqueIdIncluded,
diff --git a/keystore/java/android/security/keystore/KeyInfo.java b/keystore/java/android/security/keystore/KeyInfo.java
index 0a75cd5..d891a25 100644
--- a/keystore/java/android/security/keystore/KeyInfo.java
+++ b/keystore/java/android/security/keystore/KeyInfo.java
@@ -78,6 +78,7 @@
     private final @KeyProperties.BlockModeEnum String[] mBlockModes;
     private final boolean mUserAuthenticationRequired;
     private final int mUserAuthenticationValidityDurationSeconds;
+    private final @KeyProperties.AuthEnum int mUserAuthenticationType;
     private final boolean mUserAuthenticationRequirementEnforcedBySecureHardware;
     private final boolean mUserAuthenticationValidWhileOnBody;
     private final boolean mTrustedUserPresenceRequired;
@@ -101,6 +102,7 @@
             @KeyProperties.BlockModeEnum String[] blockModes,
             boolean userAuthenticationRequired,
             int userAuthenticationValidityDurationSeconds,
+            @KeyProperties.AuthEnum int userAuthenticationType,
             boolean userAuthenticationRequirementEnforcedBySecureHardware,
             boolean userAuthenticationValidWhileOnBody,
             boolean trustedUserPresenceRequired,
@@ -122,6 +124,7 @@
         mBlockModes = ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(blockModes));
         mUserAuthenticationRequired = userAuthenticationRequired;
         mUserAuthenticationValidityDurationSeconds = userAuthenticationValidityDurationSeconds;
+        mUserAuthenticationType = userAuthenticationType;
         mUserAuthenticationRequirementEnforcedBySecureHardware =
                 userAuthenticationRequirementEnforcedBySecureHardware;
         mUserAuthenticationValidWhileOnBody = userAuthenticationValidWhileOnBody;
@@ -301,6 +304,22 @@
     }
 
     /**
+     * Gets the acceptable user authentication types for which this key can be authorized to be
+     * used. This has effect only if user authentication is required (see
+     * {@link #isUserAuthenticationRequired()}).
+     *
+     * <p>This authorization applies only to secret key and private key operations. Public key
+     * operations are not restricted.
+     *
+     * @return integer representing the accepted forms of user authentication for this key
+     *
+     * @see #isUserAuthenticationRequired()
+     */
+    public @KeyProperties.AuthEnum int getUserAuthenticationType() {
+        return mUserAuthenticationType;
+    }
+
+    /**
      * Returns {@code true} if the requirement that this key can only be used if the user has been
      * authenticated is enforced by secure hardware (e.g., Trusted Execution Environment (TEE) or
      * Secure Element (SE)).
diff --git a/keystore/java/android/security/keystore/KeyProperties.java b/keystore/java/android/security/keystore/KeyProperties.java
index f12a659..c58a123 100644
--- a/keystore/java/android/security/keystore/KeyProperties.java
+++ b/keystore/java/android/security/keystore/KeyProperties.java
@@ -39,6 +39,27 @@
      * @hide
      */
     @Retention(RetentionPolicy.SOURCE)
+    @IntDef(flag = true, prefix = { "AUTH_" }, value = {
+            AUTH_BIOMETRIC_STRONG,
+            AUTH_DEVICE_CREDENTIAL,
+    })
+    public @interface AuthEnum {}
+
+    /**
+     * The non-biometric credential used to secure the device (i.e., PIN, pattern, or password)
+     */
+    public static final int AUTH_DEVICE_CREDENTIAL = 1 << 0;
+
+    /**
+     * Any biometric (e.g. fingerprint, iris, or face) on the device that meets or exceeds the
+     * requirements for <strong>Strong</strong>, as defined by the Android CDD.
+     */
+    public static final int AUTH_BIOMETRIC_STRONG = 1 << 1;
+
+    /**
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
     @IntDef(flag = true, prefix = { "PURPOSE_" }, value = {
             PURPOSE_ENCRYPT,
             PURPOSE_DECRYPT,
diff --git a/keystore/java/android/security/keystore/KeyProtection.java b/keystore/java/android/security/keystore/KeyProtection.java
index 26181a6..e230b7c 100644
--- a/keystore/java/android/security/keystore/KeyProtection.java
+++ b/keystore/java/android/security/keystore/KeyProtection.java
@@ -225,6 +225,7 @@
     private final @KeyProperties.BlockModeEnum String[] mBlockModes;
     private final boolean mRandomizedEncryptionRequired;
     private final boolean mUserAuthenticationRequired;
+    private final @KeyProperties.AuthEnum int mUserAuthenticationType;
     private final int mUserAuthenticationValidityDurationSeconds;
     private final boolean mUserPresenceRequred;
     private final boolean mUserAuthenticationValidWhileOnBody;
@@ -246,6 +247,7 @@
             @KeyProperties.BlockModeEnum String[] blockModes,
             boolean randomizedEncryptionRequired,
             boolean userAuthenticationRequired,
+            @KeyProperties.AuthEnum int userAuthenticationType,
             int userAuthenticationValidityDurationSeconds,
             boolean userPresenceRequred,
             boolean userAuthenticationValidWhileOnBody,
@@ -267,6 +269,7 @@
         mBlockModes = ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(blockModes));
         mRandomizedEncryptionRequired = randomizedEncryptionRequired;
         mUserAuthenticationRequired = userAuthenticationRequired;
+        mUserAuthenticationType = userAuthenticationType;
         mUserAuthenticationValidityDurationSeconds = userAuthenticationValidityDurationSeconds;
         mUserPresenceRequred = userPresenceRequred;
         mUserAuthenticationValidWhileOnBody = userAuthenticationValidWhileOnBody;
@@ -429,6 +432,10 @@
         return mUserConfirmationRequired;
     }
 
+    public @KeyProperties.AuthEnum int getUserAuthenticationType() {
+        return mUserAuthenticationType;
+    }
+
     /**
      * Gets the duration of time (seconds) for which this key is authorized to be used after the
      * user is successfully authenticated. This has effect only if user authentication is required
@@ -555,6 +562,7 @@
         private @KeyProperties.BlockModeEnum String[] mBlockModes;
         private boolean mRandomizedEncryptionRequired = true;
         private boolean mUserAuthenticationRequired;
+        private @KeyProperties.AuthEnum int mUserAuthenticationType;
         private int mUserAuthenticationValidityDurationSeconds = -1;
         private boolean mUserPresenceRequired = false;
         private boolean mUserAuthenticationValidWhileOnBody;
@@ -850,14 +858,62 @@
          * @see BiometricPrompt
          * @see BiometricPrompt.CryptoObject
          * @see KeyguardManager
+         * @deprecated See {@link #setUserAuthenticationParameters(int, int)}
          */
+        @Deprecated
         @NonNull
         public Builder setUserAuthenticationValidityDurationSeconds(
                 @IntRange(from = -1) int seconds) {
             if (seconds < -1) {
                 throw new IllegalArgumentException("seconds must be -1 or larger");
             }
-            mUserAuthenticationValidityDurationSeconds = seconds;
+            if (seconds == -1) {
+                return setUserAuthenticationParameters(0, KeyProperties.AUTH_BIOMETRIC_STRONG);
+            }
+            return setUserAuthenticationParameters(seconds, KeyProperties.AUTH_BIOMETRIC_STRONG);
+        }
+
+        /**
+         * Sets the duration of time (seconds) and authorization type for which this key is
+         * authorized to be used after the user is successfully authenticated. This has effect if
+         * the key requires user authentication for its use (see
+         * {@link #setUserAuthenticationRequired(boolean)}).
+         *
+         * <p>By default, if user authentication is required, it must take place for every use of
+         * the key.
+         *
+         * <p>These cryptographic operations will throw {@link UserNotAuthenticatedException} during
+         * initialization if the user needs to be authenticated to proceed. This situation can be
+         * resolved by the user authenticating with the appropriate biometric or credential as
+         * required by the key. See {@link BiometricPrompt.Builder#setAllowedAuthenticators(int)}
+         * and {@link BiometricManager.Authenticators}.
+         *
+         * <p>Once resolved, initializing a new cryptographic operation using this key (or any other
+         * key which is authorized to be used for a fixed duration of time after user
+         * authentication) should succeed provided the user authentication flow completed
+         * successfully.
+         *
+         * @param timeout duration in seconds or {@code 0} if user authentication must take place
+         *        for every use of the key. {@code -1} is also accepted for legacy purposes. It is
+         *        functionally the same as {@code 0}.
+         * @param type set of authentication types which can authorize use of the key. See
+         *        {@link KeyProperties}.{@code AUTH} flags.
+         *
+         * @see #setUserAuthenticationRequired(boolean)
+         * @see BiometricPrompt
+         * @see BiometricPrompt.CryptoObject
+         * @see KeyguardManager
+         */
+        @NonNull
+        public Builder setUserAuthenticationParameters(@IntRange(from = -1) int timeout,
+                                                       @KeyProperties.AuthEnum int type) {
+            if (timeout < -1) {
+                throw new IllegalArgumentException("timeout must be -1 or larger");
+            } else if (timeout == -1) {
+                timeout = 0;
+            }
+            mUserAuthenticationValidityDurationSeconds = timeout;
+            mUserAuthenticationType = type;
             return this;
         }
 
@@ -1002,6 +1058,7 @@
                     mBlockModes,
                     mRandomizedEncryptionRequired,
                     mUserAuthenticationRequired,
+                    mUserAuthenticationType,
                     mUserAuthenticationValidityDurationSeconds,
                     mUserPresenceRequired,
                     mUserAuthenticationValidWhileOnBody,
diff --git a/keystore/java/android/security/keystore/KeymasterUtils.java b/keystore/java/android/security/keystore/KeymasterUtils.java
index 79e48cd..37b1f23 100644
--- a/keystore/java/android/security/keystore/KeymasterUtils.java
+++ b/keystore/java/android/security/keystore/KeymasterUtils.java
@@ -88,17 +88,9 @@
      * Adds keymaster arguments to express the key's authorization policy supported by user
      * authentication.
      *
-     * @param userAuthenticationRequired whether user authentication is required to authorize the
-     *        use of the key.
-     * @param userAuthenticationValidityDurationSeconds duration of time (seconds) for which user
-     *        authentication is valid as authorization for using the key or {@code -1} if every
-     *        use of the key needs authorization.
-     * @param boundToSpecificSecureUserId if non-zero, specify which SID the key will be bound to,
-     *        overriding the default logic in this method where the key is bound to either the root
-     *        SID of the current user, or the fingerprint SID if explicit fingerprint authorization
-     *        is requested.
-     * @param userConfirmationRequired whether user confirmation is required to authorize the use
-     *        of the key.
+     * @param args The arguments sent to keymaster that need to be populated from the spec
+     * @param spec The user authentication relevant portions of the spec passed in from the caller.
+     *        This spec will be translated into the relevant keymaster tags to be loaded into args.
      * @throws IllegalStateException if user authentication is required but the system is in a wrong
      *         state (e.g., secure lock screen not set up) for generating or importing keys that
      *         require user authentication.
@@ -122,7 +114,7 @@
             return;
         }
 
-        if (spec.getUserAuthenticationValidityDurationSeconds() == -1) {
+        if (spec.getUserAuthenticationValidityDurationSeconds() == 0) {
             PackageManager pm = KeyStore.getApplicationContext().getPackageManager();
             // Every use of this key needs to be authorized by the user. This currently means
             // fingerprint or face auth.
@@ -168,7 +160,8 @@
                 args.addUnsignedLong(KeymasterDefs.KM_TAG_USER_SECURE_ID,
                         KeymasterArguments.toUint64(sids.get(i)));
             }
-            args.addEnum(KeymasterDefs.KM_TAG_USER_AUTH_TYPE, KeymasterDefs.HW_AUTH_BIOMETRIC);
+
+            args.addEnum(KeymasterDefs.KM_TAG_USER_AUTH_TYPE, spec.getUserAuthenticationType());
 
             if (spec.isUserAuthenticationValidWhileOnBody()) {
                 throw new ProviderException("Key validity extension while device is on-body is not "
diff --git a/keystore/java/android/security/keystore/ParcelableKeyGenParameterSpec.java b/keystore/java/android/security/keystore/ParcelableKeyGenParameterSpec.java
index 98e4589..9c9773e 100644
--- a/keystore/java/android/security/keystore/ParcelableKeyGenParameterSpec.java
+++ b/keystore/java/android/security/keystore/ParcelableKeyGenParameterSpec.java
@@ -97,6 +97,7 @@
         out.writeBoolean(mSpec.isRandomizedEncryptionRequired());
         out.writeBoolean(mSpec.isUserAuthenticationRequired());
         out.writeInt(mSpec.getUserAuthenticationValidityDurationSeconds());
+        out.writeInt(mSpec.getUserAuthenticationType());
         out.writeBoolean(mSpec.isUserPresenceRequired());
         out.writeByteArray(mSpec.getAttestationChallenge());
         out.writeBoolean(mSpec.isUniqueIdIncluded());
@@ -153,6 +154,7 @@
         final boolean randomizedEncryptionRequired = in.readBoolean();
         final boolean userAuthenticationRequired = in.readBoolean();
         final int userAuthenticationValidityDurationSeconds = in.readInt();
+        final int userAuthenticationTypes = in.readInt();
         final boolean userPresenceRequired = in.readBoolean();
         final byte[] attestationChallenge = in.createByteArray();
         final boolean uniqueIdIncluded = in.readBoolean();
@@ -185,6 +187,7 @@
                 randomizedEncryptionRequired,
                 userAuthenticationRequired,
                 userAuthenticationValidityDurationSeconds,
+                userAuthenticationTypes,
                 userPresenceRequired,
                 attestationChallenge,
                 uniqueIdIncluded,
diff --git a/keystore/java/android/security/keystore/UserAuthArgs.java b/keystore/java/android/security/keystore/UserAuthArgs.java
index 6952060..c9e9bf0 100644
--- a/keystore/java/android/security/keystore/UserAuthArgs.java
+++ b/keystore/java/android/security/keystore/UserAuthArgs.java
@@ -28,6 +28,7 @@
 
     boolean isUserAuthenticationRequired();
     int getUserAuthenticationValidityDurationSeconds();
+    @KeyProperties.AuthEnum int getUserAuthenticationType();
     boolean isUserAuthenticationValidWhileOnBody();
     boolean isInvalidatedByBiometricEnrollment();
     boolean isUserConfirmationRequired();
diff --git a/libs/androidfw/AssetManager2.cpp b/libs/androidfw/AssetManager2.cpp
index 8cfd2d8..3208662 100644
--- a/libs/androidfw/AssetManager2.cpp
+++ b/libs/androidfw/AssetManager2.cpp
@@ -992,6 +992,11 @@
   return bag;
 }
 
+static bool compare_bag_entries(const ResolvedBag::Entry& entry1,
+    const ResolvedBag::Entry& entry2) {
+  return entry1.key < entry2.key;
+}
+
 const ResolvedBag* AssetManager2::GetBag(uint32_t resid, std::vector<uint32_t>& child_resids) {
   auto cached_iter = cached_bags_.find(resid);
   if (cached_iter != cached_bags_.end()) {
@@ -1027,13 +1032,15 @@
   child_resids.push_back(resid);
 
   uint32_t parent_resid = dtohl(map->parent.ident);
-  if (parent_resid == 0 || std::find(child_resids.begin(), child_resids.end(), parent_resid)
+  if (parent_resid == 0U || std::find(child_resids.begin(), child_resids.end(), parent_resid)
       != child_resids.end()) {
-    // There is no parent or that a circular dependency exist, meaning there is nothing to
-    // inherit and we can do a simple copy of the entries in the map.
+    // There is no parent or a circular dependency exist, meaning there is nothing to inherit and
+    // we can do a simple copy of the entries in the map.
     const size_t entry_count = map_entry_end - map_entry;
     util::unique_cptr<ResolvedBag> new_bag{reinterpret_cast<ResolvedBag*>(
         malloc(sizeof(ResolvedBag) + (entry_count * sizeof(ResolvedBag::Entry))))};
+
+    bool sort_entries = false;
     ResolvedBag::Entry* new_entry = new_bag->entries;
     for (; map_entry != map_entry_end; ++map_entry) {
       uint32_t new_key = dtohl(map_entry->name.ident);
@@ -1059,8 +1066,15 @@
             new_entry->value.data, new_key);
         return nullptr;
       }
+      sort_entries = sort_entries ||
+          (new_entry != new_bag->entries && (new_entry->key < (new_entry - 1U)->key));
       ++new_entry;
     }
+
+    if (sort_entries) {
+      std::sort(new_bag->entries, new_bag->entries + entry_count, compare_bag_entries);
+    }
+
     new_bag->type_spec_flags = entry.type_flags;
     new_bag->entry_count = static_cast<uint32_t>(entry_count);
     ResolvedBag* result = new_bag.get();
@@ -1091,6 +1105,7 @@
   const ResolvedBag::Entry* const parent_entry_end = parent_entry + parent_bag->entry_count;
 
   // The keys are expected to be in sorted order. Merge the two bags.
+  bool sort_entries = false;
   while (map_entry != map_entry_end && parent_entry != parent_entry_end) {
     uint32_t child_key = dtohl(map_entry->name.ident);
     if (!is_internal_resid(child_key)) {
@@ -1123,6 +1138,8 @@
       memcpy(new_entry, parent_entry, sizeof(*new_entry));
     }
 
+    sort_entries = sort_entries ||
+        (new_entry != new_bag->entries && (new_entry->key < (new_entry - 1U)->key));
     if (child_key >= parent_entry->key) {
       // Move to the next parent entry if we used it or it was overridden.
       ++parent_entry;
@@ -1153,6 +1170,8 @@
                                        new_entry->value.dataType, new_entry->value.data, new_key);
       return nullptr;
     }
+    sort_entries = sort_entries ||
+        (new_entry != new_bag->entries && (new_entry->key < (new_entry - 1U)->key));
     ++map_entry;
     ++new_entry;
   }
@@ -1172,6 +1191,10 @@
         new_bag.release(), sizeof(ResolvedBag) + (actual_count * sizeof(ResolvedBag::Entry)))));
   }
 
+  if (sort_entries) {
+    std::sort(new_bag->entries, new_bag->entries + actual_count, compare_bag_entries);
+  }
+
   // Combine flags from the parent and our own bag.
   new_bag->type_spec_flags = entry.type_flags | parent_bag->type_spec_flags;
   new_bag->entry_count = static_cast<uint32_t>(actual_count);
diff --git a/libs/androidfw/tests/AssetManager2_test.cpp b/libs/androidfw/tests/AssetManager2_test.cpp
index 2f6f3df..35fea7a 100644
--- a/libs/androidfw/tests/AssetManager2_test.cpp
+++ b/libs/androidfw/tests/AssetManager2_test.cpp
@@ -285,6 +285,27 @@
   EXPECT_EQ(0x03, get_package_id(bag->entries[1].key));
 }
 
+TEST_F(AssetManager2Test, FindsBagResourceFromMultipleSharedLibraries) {
+  AssetManager2 assetmanager;
+
+  // 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()});
+
+  const ResolvedBag* bag = assetmanager.GetBag(libclient::R::style::ThemeMultiLib);
+  ASSERT_NE(nullptr, bag);
+  ASSERT_EQ(bag->entry_count, 2u);
+
+  // First attribute comes from lib_two.
+  EXPECT_EQ(2, bag->entries[0].cookie);
+  EXPECT_EQ(0x02, get_package_id(bag->entries[0].key));
+
+  // The next two attributes come from lib_one.
+  EXPECT_EQ(2, bag->entries[1].cookie);
+  EXPECT_EQ(0x03, get_package_id(bag->entries[1].key));
+}
+
 TEST_F(AssetManager2Test, FindsStyleResourceWithParentFromSharedLibrary) {
   AssetManager2 assetmanager;
 
diff --git a/libs/androidfw/tests/CommonHelpers.h b/libs/androidfw/tests/CommonHelpers.h
index c160fbb..8af13f2 100644
--- a/libs/androidfw/tests/CommonHelpers.h
+++ b/libs/androidfw/tests/CommonHelpers.h
@@ -44,10 +44,6 @@
   return out << str.string();
 }
 
-static inline ::std::ostream& operator<<(::std::ostream& out, const String16& str) {
-  return out << String8(str).string();
-}
-
 static inline ::std::ostream& operator<<(::std::ostream& out, const ResTable_config& c) {
   return out << c.toString();
 }
diff --git a/libs/androidfw/tests/data/lib_two/R.h b/libs/androidfw/tests/data/lib_two/R.h
index 92b9cc1..fd5a910 100644
--- a/libs/androidfw/tests/data/lib_two/R.h
+++ b/libs/androidfw/tests/data/lib_two/R.h
@@ -30,16 +30,22 @@
     };
   };
 
+  struct integer {
+    enum : uint32_t {
+      bar = 0x02020000, // default
+    };
+  };
+
   struct string {
     enum : uint32_t {
-      LibraryString = 0x02020000,  // default
-      foo = 0x02020001, // default
+      LibraryString = 0x02030000,  // default
+      foo = 0x02030001, // default
     };
   };
 
   struct style {
     enum : uint32_t {
-      Theme = 0x02030000, // default
+      Theme = 0x02040000, // default
     };
   };
 };
diff --git a/libs/androidfw/tests/data/lib_two/lib_two.apk b/libs/androidfw/tests/data/lib_two/lib_two.apk
index 486c230..8193db6 100644
--- a/libs/androidfw/tests/data/lib_two/lib_two.apk
+++ b/libs/androidfw/tests/data/lib_two/lib_two.apk
Binary files differ
diff --git a/libs/androidfw/tests/data/lib_two/res/values/values.xml b/libs/androidfw/tests/data/lib_two/res/values/values.xml
index 340d14c..4e1d69a 100644
--- a/libs/androidfw/tests/data/lib_two/res/values/values.xml
+++ b/libs/androidfw/tests/data/lib_two/res/values/values.xml
@@ -18,14 +18,17 @@
     <public type="attr" name="attr3" id="0x00010000" />
     <attr name="attr3" format="integer" />
 
-    <public type="string" name="LibraryString" id="0x00020000" />
+    <public type="integer" name="bar" id="0x00020000" />
+    <integer name="bar">1337</integer>
+
+    <public type="string" name="LibraryString" id="0x00030000" />
     <string name="LibraryString">Hi from library two</string>
 
-    <public type="string" name="foo" id="0x00020001" />
+    <public type="string" name="foo" id="0x00030001" />
     <string name="foo">Foo from lib_two</string>
 
-    <public type="style" name="Theme" id="0x02030000" />
+    <public type="style" name="Theme" id="0x00040000" />
     <style name="Theme">
-        <item name="com.android.lib_two:attr3">800</item>
+        <item name="com.android.lib_two:attr3">@integer/bar</item>
     </style>
 </resources>
diff --git a/libs/androidfw/tests/data/libclient/R.h b/libs/androidfw/tests/data/libclient/R.h
index 43d1f9b..e21b3eb 100644
--- a/libs/androidfw/tests/data/libclient/R.h
+++ b/libs/androidfw/tests/data/libclient/R.h
@@ -34,6 +34,7 @@
   struct style {
     enum : uint32_t {
       Theme = 0x7f020000,  // default
+      ThemeMultiLib = 0x7f020001,  // default
     };
   };
 
diff --git a/libs/androidfw/tests/data/libclient/libclient.apk b/libs/androidfw/tests/data/libclient/libclient.apk
index 1799024..4b9a8833 100644
--- a/libs/androidfw/tests/data/libclient/libclient.apk
+++ b/libs/androidfw/tests/data/libclient/libclient.apk
Binary files differ
diff --git a/libs/androidfw/tests/data/libclient/res/values/values.xml b/libs/androidfw/tests/data/libclient/res/values/values.xml
index fead7c3..a29f473 100644
--- a/libs/androidfw/tests/data/libclient/res/values/values.xml
+++ b/libs/androidfw/tests/data/libclient/res/values/values.xml
@@ -27,6 +27,12 @@
       <item name="bar">@com.android.lib_one:string/foo</item>
     </style>
 
+    <public type="style" name="ThemeMultiLib" id="0x7f020001" />
+    <style name="ThemeMultiLib" >
+      <item name="com.android.lib_one:attr1">@com.android.lib_one:string/foo</item>
+      <item name="com.android.lib_two:attr3">@com.android.lib_two:integer/bar</item>
+    </style>
+
     <public type="string" name="foo_one" id="0x7f030000" />
     <string name="foo_one">@com.android.lib_one:string/foo</string>
 
diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp
index 51270f5..81dedda 100644
--- a/libs/hwui/Android.bp
+++ b/libs/hwui/Android.bp
@@ -84,7 +84,6 @@
                 "libGLESv3",
                 "libvulkan",
                 "libui",
-                "libgui",
                 "libnativedisplay",
                 "libnativewindow",
                 "libprotobuf-cpp-lite",
@@ -92,9 +91,12 @@
                 "libandroidfw",
                 "libcrypto",
                 "libsync",
+                "libstatspull",
+                "libstatssocket",
             ],
             static_libs: [
                 "libEGL_blobCache",
+                "libprotoutil",
             ],
         },
         host: {
@@ -168,7 +170,6 @@
         "renderthread/RenderTask.cpp",
         "renderthread/TimeLord.cpp",
         "hwui/AnimatedImageDrawable.cpp",
-        "hwui/AnimatedImageThread.cpp",
         "hwui/Bitmap.cpp",
         "hwui/Canvas.cpp",
         "hwui/ImageDecoder.cpp",
@@ -210,6 +211,7 @@
         android: {
 
             srcs: [
+                "hwui/AnimatedImageThread.cpp",
                 "pipeline/skia/ATraceMemoryDump.cpp",
                 "pipeline/skia/GLFunctorDrawable.cpp",
                 "pipeline/skia/LayerDrawable.cpp",
@@ -286,6 +288,13 @@
     name: "hwui_test_defaults",
     defaults: ["hwui_defaults"],
     test_suites: ["device-tests"],
+    target: {
+        android: {
+            shared_libs: [
+	        "libgui",
+	    ],
+	}
+    },
     srcs: [
         "tests/common/scenes/*.cpp",
         "tests/common/LeakChecker.cpp",
diff --git a/libs/hwui/Readback.cpp b/libs/hwui/Readback.cpp
index 89a9b99..84c07d7 100644
--- a/libs/hwui/Readback.cpp
+++ b/libs/hwui/Readback.cpp
@@ -16,16 +16,16 @@
 
 #include "Readback.h"
 
-#include "pipeline/skia/LayerDrawable.h"
-#include "renderthread/EglManager.h"
-#include "renderthread/VulkanManager.h"
-
-#include <gui/Surface.h>
-#include <ui/Fence.h>
+#include <sync/sync.h>
+#include <system/window.h>
 #include <ui/GraphicBuffer.h>
+
 #include "DeferredLayerUpdater.h"
 #include "Properties.h"
 #include "hwui/Bitmap.h"
+#include "pipeline/skia/LayerDrawable.h"
+#include "renderthread/EglManager.h"
+#include "renderthread/VulkanManager.h"
 #include "utils/Color.h"
 #include "utils/MathUtils.h"
 #include "utils/TraceUtils.h"
@@ -35,40 +35,43 @@
 namespace android {
 namespace uirenderer {
 
-CopyResult Readback::copySurfaceInto(Surface& surface, const Rect& srcRect, SkBitmap* bitmap) {
+CopyResult Readback::copySurfaceInto(ANativeWindow* window, const Rect& srcRect, SkBitmap* bitmap) {
     ATRACE_CALL();
     // Setup the source
-    sp<GraphicBuffer> sourceBuffer;
-    sp<Fence> sourceFence;
+    AHardwareBuffer* rawSourceBuffer;
+    int rawSourceFence;
     Matrix4 texTransform;
-    status_t err = surface.getLastQueuedBuffer(&sourceBuffer, &sourceFence, texTransform.data);
+    status_t err = ANativeWindow_getLastQueuedBuffer(window, &rawSourceBuffer, &rawSourceFence,
+                                                     texTransform.data);
+    base::unique_fd sourceFence(rawSourceFence);
     texTransform.invalidateType();
     if (err != NO_ERROR) {
         ALOGW("Failed to get last queued buffer, error = %d", err);
         return CopyResult::UnknownError;
     }
-    if (!sourceBuffer.get()) {
+    if (rawSourceBuffer == nullptr) {
         ALOGW("Surface doesn't have any previously queued frames, nothing to readback from");
         return CopyResult::SourceEmpty;
     }
-    if (sourceBuffer->getUsage() & GRALLOC_USAGE_PROTECTED) {
+
+    std::unique_ptr<AHardwareBuffer, decltype(&AHardwareBuffer_release)> sourceBuffer(
+            rawSourceBuffer, AHardwareBuffer_release);
+    AHardwareBuffer_Desc description;
+    AHardwareBuffer_describe(sourceBuffer.get(), &description);
+    if (description.usage & AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT) {
         ALOGW("Surface is protected, unable to copy from it");
         return CopyResult::SourceInvalid;
     }
-    err = sourceFence->wait(500 /* ms */);
-    if (err != NO_ERROR) {
+
+    if (sourceFence != -1 && sync_wait(sourceFence.get(), 500 /* ms */) != NO_ERROR) {
         ALOGE("Timeout (500ms) exceeded waiting for buffer fence, abandoning readback attempt");
         return CopyResult::Timeout;
     }
-    if (!sourceBuffer.get()) {
-        return CopyResult::UnknownError;
-    }
 
-    sk_sp<SkColorSpace> colorSpace =
-            DataSpaceToColorSpace(static_cast<android_dataspace>(surface.getBuffersDataSpace()));
-    sk_sp<SkImage> image = SkImage::MakeFromAHardwareBuffer(
-            reinterpret_cast<AHardwareBuffer*>(sourceBuffer.get()),
-            kPremul_SkAlphaType, colorSpace);
+    sk_sp<SkColorSpace> colorSpace = DataSpaceToColorSpace(
+            static_cast<android_dataspace>(ANativeWindow_getBuffersDataSpace(window)));
+    sk_sp<SkImage> image =
+            SkImage::MakeFromAHardwareBuffer(sourceBuffer.get(), kPremul_SkAlphaType, colorSpace);
     return copyImageInto(image, texTransform, srcRect, bitmap);
 }
 
diff --git a/libs/hwui/Readback.h b/libs/hwui/Readback.h
index e86a813..e36f1ff 100644
--- a/libs/hwui/Readback.h
+++ b/libs/hwui/Readback.h
@@ -47,7 +47,7 @@
     /**
      * Copies the surface's most recently queued buffer into the provided bitmap.
      */
-    CopyResult copySurfaceInto(Surface& surface, const Rect& srcRect, SkBitmap* bitmap);
+    CopyResult copySurfaceInto(ANativeWindow* window, const Rect& srcRect, SkBitmap* bitmap);
 
     CopyResult copyHWBitmapInto(Bitmap* hwBitmap, SkBitmap* bitmap);
 
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp
index 6761435..31e4555 100644
--- a/libs/hwui/RenderNode.cpp
+++ b/libs/hwui/RenderNode.cpp
@@ -27,7 +27,6 @@
 #include "DamageAccumulator.h"
 #include "pipeline/skia/SkiaDisplayList.h"
 #endif
-#include "utils/FatVector.h"
 #include "utils/MathUtils.h"
 #include "utils/StringUtils.h"
 #include "utils/TraceUtils.h"
@@ -37,6 +36,7 @@
 #include <atomic>
 #include <sstream>
 #include <string>
+#include <ui/FatVector.h>
 
 namespace android {
 namespace uirenderer {
diff --git a/libs/hwui/RenderNode.h b/libs/hwui/RenderNode.h
index d55e5b0..c0ec217 100644
--- a/libs/hwui/RenderNode.h
+++ b/libs/hwui/RenderNode.h
@@ -27,6 +27,8 @@
 
 #include <androidfw/ResourceTypes.h>
 
+#include <ui/FatVector.h>
+
 #include "AnimatorManager.h"
 #include "CanvasTransform.h"
 #include "Debug.h"
@@ -35,7 +37,6 @@
 #include "RenderProperties.h"
 #include "pipeline/skia/SkiaDisplayList.h"
 #include "pipeline/skia/SkiaLayer.h"
-#include "utils/FatVector.h"
 
 #include <vector>
 
diff --git a/libs/hwui/hwui/AnimatedImageDrawable.cpp b/libs/hwui/hwui/AnimatedImageDrawable.cpp
index 4544bea..638de85 100644
--- a/libs/hwui/hwui/AnimatedImageDrawable.cpp
+++ b/libs/hwui/hwui/AnimatedImageDrawable.cpp
@@ -15,7 +15,9 @@
  */
 
 #include "AnimatedImageDrawable.h"
+#ifdef __ANDROID__ // Layoutlib does not support AnimatedImageThread
 #include "AnimatedImageThread.h"
+#endif
 
 #include "utils/TraceUtils.h"
 
@@ -160,8 +162,10 @@
     } else if (starting) {
         // The image has animated, and now is being reset. Queue up the first
         // frame, but keep showing the current frame until the first is ready.
+#ifdef __ANDROID__ // Layoutlib does not support AnimatedImageThread
         auto& thread = uirenderer::AnimatedImageThread::getInstance();
         mNextSnapshot = thread.reset(sk_ref_sp(this));
+#endif
     }
 
     bool finalFrame = false;
@@ -187,8 +191,10 @@
     }
 
     if (mRunning && !mNextSnapshot.valid()) {
+#ifdef __ANDROID__ // Layoutlib does not support AnimatedImageThread
         auto& thread = uirenderer::AnimatedImageThread::getInstance();
         mNextSnapshot = thread.decodeNextFrame(sk_ref_sp(this));
+#endif
     }
 
     if (!drawDirectly) {
diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp
index 58cc08b..914c046 100644
--- a/libs/hwui/hwui/Bitmap.cpp
+++ b/libs/hwui/hwui/Bitmap.cpp
@@ -32,7 +32,6 @@
 
 #ifndef _WIN32
 #include <binder/IServiceManager.h>
-#include <private/gui/ComposerService.h>
 #endif
 #include <ui/PixelFormat.h>
 
diff --git a/libs/hwui/hwui/ImageDecoder.cpp b/libs/hwui/hwui/ImageDecoder.cpp
index 4b2857f..afd82ac 100644
--- a/libs/hwui/hwui/ImageDecoder.cpp
+++ b/libs/hwui/hwui/ImageDecoder.cpp
@@ -24,6 +24,19 @@
 
 using namespace android;
 
+sk_sp<SkColorSpace> ImageDecoder::getDefaultColorSpace() const {
+    const skcms_ICCProfile* encodedProfile = mCodec->getICCProfile();
+    if (encodedProfile) {
+        // If the profile maps directly to an SkColorSpace, that SkColorSpace
+        // will be returned. Otherwise, nullptr will be returned. In either
+        // case, using this SkColorSpace results in doing no color correction.
+        return SkColorSpace::Make(*encodedProfile);
+    }
+
+    // The image has no embedded color profile, and should be treated as SRGB.
+    return SkColorSpace::MakeSRGB();
+}
+
 ImageDecoder::ImageDecoder(std::unique_ptr<SkAndroidCodec> codec, sk_sp<SkPngChunkReader> peeker)
     : mCodec(std::move(codec))
     , mPeeker(std::move(peeker))
@@ -31,7 +44,7 @@
     , mDecodeSize(mTargetSize)
     , mOutColorType(mCodec->computeOutputColorType(kN32_SkColorType))
     , mUnpremultipliedRequired(false)
-    , mOutColorSpace(mCodec->computeOutputColorSpace(mOutColorType, nullptr))
+    , mOutColorSpace(getDefaultColorSpace())
     , mSampleSize(1)
 {
 }
diff --git a/libs/hwui/hwui/ImageDecoder.h b/libs/hwui/hwui/ImageDecoder.h
index 0c99f84..a1b5157 100644
--- a/libs/hwui/hwui/ImageDecoder.h
+++ b/libs/hwui/hwui/ImageDecoder.h
@@ -43,6 +43,7 @@
 
     bool setUnpremultipliedRequired(bool unpremultipliedRequired);
 
+    sk_sp<SkColorSpace> getDefaultColorSpace() const;
     void setOutColorSpace(sk_sp<SkColorSpace> cs);
 
     // The size is the final size after scaling and cropping.
diff --git a/libs/hwui/pipeline/skia/ReorderBarrierDrawables.h b/libs/hwui/pipeline/skia/ReorderBarrierDrawables.h
index cfc0f9b..d669f84 100644
--- a/libs/hwui/pipeline/skia/ReorderBarrierDrawables.h
+++ b/libs/hwui/pipeline/skia/ReorderBarrierDrawables.h
@@ -21,7 +21,7 @@
 
 #include <SkCanvas.h>
 #include <SkDrawable.h>
-#include <utils/FatVector.h>
+#include <ui/FatVector.h>
 
 namespace android {
 namespace uirenderer {
diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp
index e7efe2f..8d5acc6 100644
--- a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp
@@ -171,17 +171,15 @@
 }
 
 bool SkiaOpenGLPipeline::setSurface(ANativeWindow* surface, SwapBehavior swapBehavior,
-                                    ColorMode colorMode, uint32_t extraBuffers) {
+                                    uint32_t extraBuffers) {
     if (mEglSurface != EGL_NO_SURFACE) {
         mEglManager.destroySurface(mEglSurface);
         mEglSurface = EGL_NO_SURFACE;
     }
 
-    setSurfaceColorProperties(colorMode);
-
     if (surface) {
         mRenderThread.requireGlContext();
-        auto newSurface = mEglManager.createSurface(surface, colorMode, mSurfaceColorSpace);
+        auto newSurface = mEglManager.createSurface(surface, mColorMode, mSurfaceColorSpace);
         if (!newSurface) {
             return false;
         }
diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.h b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.h
index 3fe0f92..fc6e114 100644
--- a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.h
+++ b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.h
@@ -16,8 +16,10 @@
 
 #pragma once
 
-#include "SkiaPipeline.h"
+#include <EGL/egl.h>
+#include <system/window.h>
 
+#include "SkiaPipeline.h"
 #include "renderstate/RenderState.h"
 
 namespace android {
@@ -44,7 +46,7 @@
                      FrameInfo* currentFrameInfo, bool* requireSwap) override;
     DeferredLayerUpdater* createTextureLayer() override;
     bool setSurface(ANativeWindow* surface, renderthread::SwapBehavior swapBehavior,
-                    renderthread::ColorMode colorMode, uint32_t extraBuffers) override;
+                    uint32_t extraBuffers) override;
     void onStop() override;
     bool isSurfaceReady() override;
     bool isContextReady() override;
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
index 6f4af3d..41aa1ff 100644
--- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
@@ -24,18 +24,19 @@
 #include <SkOverdrawColorFilter.h>
 #include <SkPicture.h>
 #include <SkPictureRecorder.h>
-#include <SkTypeface.h>
 #include <SkSerialProcs.h>
+#include <SkTypeface.h>
+#include <android-base/properties.h>
+#include <unistd.h>
+
+#include <sstream>
+
 #include "LightingInfo.h"
 #include "VectorDrawable.h"
 #include "thread/CommonPool.h"
 #include "tools/SkSharingProc.h"
-#include "utils/TraceUtils.h"
 #include "utils/String8.h"
-
-#include <unistd.h>
-
-#include <android-base/properties.h>
+#include "utils/TraceUtils.h"
 
 using namespace android::uirenderer::renderthread;
 
@@ -44,6 +45,7 @@
 namespace skiapipeline {
 
 SkiaPipeline::SkiaPipeline(RenderThread& thread) : mRenderThread(thread) {
+    setSurfaceColorProperties(mColorMode);
 }
 
 SkiaPipeline::~SkiaPipeline() {
@@ -584,6 +586,7 @@
 }
 
 void SkiaPipeline::setSurfaceColorProperties(ColorMode colorMode) {
+    mColorMode = colorMode;
     if (colorMode == ColorMode::SRGB) {
         mSurfaceColorType = SkColorType::kN32_SkColorType;
         mSurfaceColorSpace = SkColorSpace::MakeSRGB();
@@ -598,27 +601,24 @@
 // Overdraw debugging
 
 // These colors should be kept in sync with Caches::getOverdrawColor() with a few differences.
-// This implementation:
-// (1) Requires transparent entries for "no overdraw" and "single draws".
-// (2) Requires premul colors (instead of unpremul).
-// (3) Requires RGBA colors (instead of BGRA).
-static const uint32_t kOverdrawColors[2][6] = {
-        {
-                0x00000000,
-                0x00000000,
-                0x2f2f0000,
-                0x2f002f00,
-                0x3f00003f,
-                0x7f00007f,
-        },
-        {
-                0x00000000,
-                0x00000000,
-                0x2f2f0000,
-                0x4f004f4f,
-                0x5f50335f,
-                0x7f00007f,
-        },
+// This implementation requires transparent entries for "no overdraw" and "single draws".
+static const SkColor kOverdrawColors[2][6] = {
+    {
+        0x00000000,
+        0x00000000,
+        0x2f0000ff,
+        0x2f00ff00,
+        0x3fff0000,
+        0x7fff0000,
+    },
+    {
+        0x00000000,
+        0x00000000,
+        0x2f0000ff,
+        0x4fffff00,
+        0x5fff89d7,
+        0x7fff0000,
+    },
 };
 
 void SkiaPipeline::renderOverdraw(const SkRect& clip,
@@ -640,8 +640,8 @@
 
     // Draw overdraw colors to the canvas.  The color filter will convert counts to colors.
     SkPaint paint;
-    const SkPMColor* colors = kOverdrawColors[static_cast<int>(Properties::overdrawColorSet)];
-    paint.setColorFilter(SkOverdrawColorFilter::Make(colors));
+    const SkColor* colors = kOverdrawColors[static_cast<int>(Properties::overdrawColorSet)];
+    paint.setColorFilter(SkOverdrawColorFilter::MakeWithSkColors(colors));
     surface->getCanvas()->drawImage(counts.get(), 0.0f, 0.0f, &paint);
 }
 
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.h b/libs/hwui/pipeline/skia/SkiaPipeline.h
index af8414d..8341164 100644
--- a/libs/hwui/pipeline/skia/SkiaPipeline.h
+++ b/libs/hwui/pipeline/skia/SkiaPipeline.h
@@ -50,6 +50,7 @@
     bool createOrUpdateLayer(RenderNode* node, const DamageAccumulator& damageAccumulator,
                              ErrorHandler* errorHandler) override;
 
+    void setSurfaceColorProperties(renderthread::ColorMode colorMode) override;
     SkColorType getSurfaceColorType() const override { return mSurfaceColorType; }
     sk_sp<SkColorSpace> getSurfaceColorSpace() override { return mSurfaceColorSpace; }
 
@@ -72,9 +73,10 @@
 
 protected:
     void dumpResourceCacheUsage() const;
-    void setSurfaceColorProperties(renderthread::ColorMode colorMode);
 
     renderthread::RenderThread& mRenderThread;
+
+    renderthread::ColorMode mColorMode = renderthread::ColorMode::SRGB;
     SkColorType mSurfaceColorType;
     sk_sp<SkColorSpace> mSurfaceColorSpace;
 
diff --git a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp
index ad7c706..535a199 100644
--- a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp
@@ -117,17 +117,16 @@
 void SkiaVulkanPipeline::onStop() {}
 
 bool SkiaVulkanPipeline::setSurface(ANativeWindow* surface, SwapBehavior swapBehavior,
-                                    ColorMode colorMode, uint32_t extraBuffers) {
+                                    uint32_t extraBuffers) {
     if (mVkSurface) {
         mVkManager.destroySurface(mVkSurface);
         mVkSurface = nullptr;
     }
 
-    setSurfaceColorProperties(colorMode);
     if (surface) {
         mRenderThread.requireVkContext();
         mVkSurface =
-                mVkManager.createSurface(surface, colorMode, mSurfaceColorSpace, mSurfaceColorType,
+                mVkManager.createSurface(surface, mColorMode, mSurfaceColorSpace, mSurfaceColorType,
                                          mRenderThread.getGrContext(), extraBuffers);
     }
 
diff --git a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.h b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.h
index 3173478..c8bf233 100644
--- a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.h
+++ b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.h
@@ -43,7 +43,7 @@
                      FrameInfo* currentFrameInfo, bool* requireSwap) override;
     DeferredLayerUpdater* createTextureLayer() override;
     bool setSurface(ANativeWindow* surface, renderthread::SwapBehavior swapBehavior,
-                    renderthread::ColorMode colorMode, uint32_t extraBuffers) override;
+                    uint32_t extraBuffers) override;
     void onStop() override;
     bool isSurfaceReady() override;
     bool isContextReady() override;
diff --git a/libs/hwui/protos/graphicsstats.proto b/libs/hwui/protos/graphicsstats.proto
index dd5676c..745393c 100644
--- a/libs/hwui/protos/graphicsstats.proto
+++ b/libs/hwui/protos/graphicsstats.proto
@@ -30,8 +30,9 @@
 
 message GraphicsStatsProto {
     enum PipelineType {
-        GL = 0;
-        VULKAN = 1;
+        UNKNOWN = 0;
+        GL = 1;
+        VULKAN = 2;
     }
 
     // The package name of the app
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index aa8bac9..4299dd3 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -139,15 +139,15 @@
     mAnimationContext->destroy();
 }
 
-void CanvasContext::setSurface(sp<Surface>&& surface, bool enableTimeout) {
+void CanvasContext::setSurface(ANativeWindow* window, bool enableTimeout) {
     ATRACE_CALL();
 
-    if (surface) {
-        mNativeSurface = std::make_unique<ReliableSurface>(std::move(surface));
+    if (window) {
+        mNativeSurface = std::make_unique<ReliableSurface>(window);
         mNativeSurface->init();
         if (enableTimeout) {
             // TODO: Fix error handling & re-shorten timeout
-            ANativeWindow_setDequeueTimeout(mNativeSurface->getNativeWindow(), 4000_ms);
+            ANativeWindow_setDequeueTimeout(window, 4000_ms);
         }
     } else {
         mNativeSurface = nullptr;
@@ -161,14 +161,13 @@
         mRenderAheadCapacity = mRenderAheadDepth;
     }
 
-    ColorMode colorMode = mWideColorGamut ? ColorMode::WideColorGamut : ColorMode::SRGB;
     bool hasSurface = mRenderPipeline->setSurface(
-            mNativeSurface ? mNativeSurface->getNativeWindow() : nullptr, mSwapBehavior, colorMode,
+            mNativeSurface ? mNativeSurface->getNativeWindow() : nullptr, mSwapBehavior,
             mRenderAheadCapacity);
 
     mFrameNumber = -1;
 
-    if (hasSurface) {
+    if (window != nullptr && hasSurface) {
         mHaveNewSurface = true;
         mSwapHistory.clear();
         // Enable frame stats after the surface has been bound to the appropriate graphics API.
@@ -205,8 +204,7 @@
 
 void CanvasContext::allocateBuffers() {
     if (mNativeSurface) {
-        ANativeWindow* anw = mNativeSurface->getNativeWindow();
-        ANativeWindow_allocateBuffers(anw);
+        ANativeWindow_tryAllocateBuffers(mNativeSurface->getNativeWindow());
     }
 }
 
@@ -225,7 +223,8 @@
 }
 
 void CanvasContext::setWideGamut(bool wideGamut) {
-    mWideColorGamut = wideGamut;
+    ColorMode colorMode = wideGamut ? ColorMode::WideColorGamut : ColorMode::SRGB;
+    mRenderPipeline->setSurfaceColorProperties(colorMode);
 }
 
 bool CanvasContext::makeCurrent() {
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index 0967b20..0f1b8ae 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -35,7 +35,6 @@
 #include <SkRect.h>
 #include <SkSize.h>
 #include <cutils/compiler.h>
-#include <gui/Surface.h>
 #include <utils/Functor.h>
 
 #include <functional>
@@ -111,7 +110,7 @@
     // Won't take effect until next EGLSurface creation
     void setSwapBehavior(SwapBehavior swapBehavior);
 
-    void setSurface(sp<Surface>&& surface, bool enableTimeout = true);
+    void setSurface(ANativeWindow* window, bool enableTimeout = true);
     bool pauseSurface();
     void setStopped(bool stopped);
     bool hasSurface() const { return mNativeSurface.get(); }
@@ -251,7 +250,6 @@
     nsecs_t mLastDropVsync = 0;
 
     bool mOpaque;
-    bool mWideColorGamut = false;
     bool mUseForceDark = false;
     LightInfo mLightInfo;
     LightGeometry mLightGeometry = {{0, 0, 0}, 0};
diff --git a/libs/hwui/renderthread/EglManager.cpp b/libs/hwui/renderthread/EglManager.cpp
index c1fed26..5e0471c 100644
--- a/libs/hwui/renderthread/EglManager.cpp
+++ b/libs/hwui/renderthread/EglManager.cpp
@@ -20,7 +20,6 @@
 #include <GLES/gl.h>
 #include <cutils/properties.h>
 #include <log/log.h>
-#include <private/gui/SyncFeatures.h>
 #include <sync/sync.h>
 #include <utils/Trace.h>
 
@@ -79,6 +78,9 @@
     bool displayP3 = false;
     bool contextPriority = false;
     bool surfacelessContext = false;
+    bool nativeFenceSync = false;
+    bool fenceSync = false;
+    bool waitSync = false;
 } EglExtensions;
 
 EglManager::EglManager()
@@ -226,6 +228,9 @@
     EglExtensions.displayP3 = extensions.has("EGL_EXT_gl_colorspace_display_p3_passthrough");
     EglExtensions.contextPriority = extensions.has("EGL_IMG_context_priority");
     EglExtensions.surfacelessContext = extensions.has("EGL_KHR_surfaceless_context");
+    EglExtensions.nativeFenceSync = extensions.has("EGL_ANDROID_native_fence_sync");
+    EglExtensions.fenceSync = extensions.has("EGL_KHR_fence_sync");
+    EglExtensions.waitSync = extensions.has("EGL_KHR_wait_sync");
 }
 
 bool EglManager::hasEglContext() {
@@ -527,8 +532,7 @@
         return INVALID_OPERATION;
     }
 
-    if (SyncFeatures::getInstance().useWaitSync() &&
-        SyncFeatures::getInstance().useNativeFenceSync()) {
+    if (EglExtensions.waitSync && EglExtensions.nativeFenceSync) {
         // Block GPU on the fence.
         // Create an EGLSyncKHR from the current fence.
         int fenceFd = ::dup(fence);
@@ -572,7 +576,7 @@
         return INVALID_OPERATION;
     }
 
-    if (SyncFeatures::getInstance().useNativeFenceSync()) {
+    if (EglExtensions.nativeFenceSync) {
         EGLSyncKHR sync = eglCreateSyncKHR(mEglDisplay, EGL_SYNC_NATIVE_FENCE_ANDROID, nullptr);
         if (sync == EGL_NO_SYNC_KHR) {
             ALOGE("EglManager::createReleaseFence: error creating EGL fence: %#x", eglGetError());
@@ -589,7 +593,7 @@
         }
         *nativeFence = fenceFd;
         *eglFence = EGL_NO_SYNC_KHR;
-    } else if (useFenceSync && SyncFeatures::getInstance().useFenceSync()) {
+    } else if (useFenceSync && EglExtensions.fenceSync) {
         if (*eglFence != EGL_NO_SYNC_KHR) {
             // There is already a fence for the current slot.  We need to
             // wait on that before replacing it with another fence to
diff --git a/libs/hwui/renderthread/IRenderPipeline.h b/libs/hwui/renderthread/IRenderPipeline.h
index ef0aa98..ba0d64c 100644
--- a/libs/hwui/renderthread/IRenderPipeline.h
+++ b/libs/hwui/renderthread/IRenderPipeline.h
@@ -66,7 +66,7 @@
     virtual bool swapBuffers(const Frame& frame, bool drew, const SkRect& screenDirty,
                              FrameInfo* currentFrameInfo, bool* requireSwap) = 0;
     virtual DeferredLayerUpdater* createTextureLayer() = 0;
-    virtual bool setSurface(ANativeWindow* window, SwapBehavior swapBehavior, ColorMode colorMode,
+    virtual bool setSurface(ANativeWindow* window, SwapBehavior swapBehavior,
                             uint32_t extraBuffers) = 0;
     virtual void onStop() = 0;
     virtual bool isSurfaceReady() = 0;
@@ -80,6 +80,8 @@
     virtual bool pinImages(std::vector<SkImage*>& mutableImages) = 0;
     virtual bool pinImages(LsaVector<sk_sp<Bitmap>>& images) = 0;
     virtual void unpinImages() = 0;
+
+    virtual void setSurfaceColorProperties(ColorMode colorMode) = 0;
     virtual SkColorType getSurfaceColorType() const = 0;
     virtual sk_sp<SkColorSpace> getSurfaceColorSpace() = 0;
     virtual GrSurfaceOrigin getSurfaceOrigin() = 0;
diff --git a/libs/hwui/renderthread/ReliableSurface.cpp b/libs/hwui/renderthread/ReliableSurface.cpp
index e92500f..8a0b4e8 100644
--- a/libs/hwui/renderthread/ReliableSurface.cpp
+++ b/libs/hwui/renderthread/ReliableSurface.cpp
@@ -16,7 +16,10 @@
 
 #include "ReliableSurface.h"
 
+#include <log/log_main.h>
 #include <private/android/AHardwareBufferHelpers.h>
+// TODO: this should be including apex instead.
+#include <vndk/window.h>
 
 namespace android::uirenderer::renderthread {
 
@@ -26,8 +29,9 @@
 // to propagate this error back to the caller
 constexpr bool DISABLE_BUFFER_PREFETCH = true;
 
-ReliableSurface::ReliableSurface(sp<Surface>&& surface) : mSurface(std::move(surface)) {
-    LOG_ALWAYS_FATAL_IF(!mSurface, "Error, unable to wrap a nullptr");
+ReliableSurface::ReliableSurface(ANativeWindow* window) : mWindow(window) {
+    LOG_ALWAYS_FATAL_IF(!mWindow, "Error, unable to wrap a nullptr");
+    ANativeWindow_acquire(mWindow);
 }
 
 ReliableSurface::~ReliableSurface() {
@@ -36,26 +40,27 @@
     // As a concrete example, if the underlying ANativeWindow is associated with
     // an EGLSurface that is still in use, then if we don't clear out the
     // interceptors then we walk into undefined behavior.
-    ANativeWindow_setCancelBufferInterceptor(mSurface.get(), nullptr, nullptr);
-    ANativeWindow_setDequeueBufferInterceptor(mSurface.get(), nullptr, nullptr);
-    ANativeWindow_setQueueBufferInterceptor(mSurface.get(), nullptr, nullptr);
-    ANativeWindow_setPerformInterceptor(mSurface.get(), nullptr, nullptr);
+    ANativeWindow_setCancelBufferInterceptor(mWindow, nullptr, nullptr);
+    ANativeWindow_setDequeueBufferInterceptor(mWindow, nullptr, nullptr);
+    ANativeWindow_setQueueBufferInterceptor(mWindow, nullptr, nullptr);
+    ANativeWindow_setPerformInterceptor(mWindow, nullptr, nullptr);
+    ANativeWindow_release(mWindow);
 }
 
 void ReliableSurface::init() {
-    int result = ANativeWindow_setCancelBufferInterceptor(mSurface.get(), hook_cancelBuffer, this);
+    int result = ANativeWindow_setCancelBufferInterceptor(mWindow, hook_cancelBuffer, this);
     LOG_ALWAYS_FATAL_IF(result != NO_ERROR, "Failed to set cancelBuffer interceptor: error = %d",
                         result);
 
-    result = ANativeWindow_setDequeueBufferInterceptor(mSurface.get(), hook_dequeueBuffer, this);
+    result = ANativeWindow_setDequeueBufferInterceptor(mWindow, hook_dequeueBuffer, this);
     LOG_ALWAYS_FATAL_IF(result != NO_ERROR, "Failed to set dequeueBuffer interceptor: error = %d",
                         result);
 
-    result = ANativeWindow_setQueueBufferInterceptor(mSurface.get(), hook_queueBuffer, this);
+    result = ANativeWindow_setQueueBufferInterceptor(mWindow, hook_queueBuffer, this);
     LOG_ALWAYS_FATAL_IF(result != NO_ERROR, "Failed to set queueBuffer interceptor: error = %d",
                         result);
 
-    result = ANativeWindow_setPerformInterceptor(mSurface.get(), hook_perform, this);
+    result = ANativeWindow_setPerformInterceptor(mWindow, hook_perform, this);
     LOG_ALWAYS_FATAL_IF(result != NO_ERROR, "Failed to set perform interceptor: error = %d",
                         result);
 }
@@ -87,7 +92,7 @@
     ANativeWindowBuffer* buffer = nullptr;
 
     // Note that this calls back into our own hooked method.
-    int result = ANativeWindow_dequeueBuffer(mSurface.get(), &buffer, &fenceFd);
+    int result = ANativeWindow_dequeueBuffer(mWindow, &buffer, &fenceFd);
 
     {
         std::lock_guard _lock{mMutex};
@@ -117,7 +122,7 @@
         // Note that clearReservedBuffer may be reentrant here, so
         // mReservedBuffer must be cleared once we reach here to avoid recursing
         // forever.
-        ANativeWindow_cancelBuffer(mSurface.get(), buffer, releaseFd);
+        ANativeWindow_cancelBuffer(mWindow, buffer, releaseFd);
     }
 }
 
@@ -239,10 +244,10 @@
             case ANATIVEWINDOW_PERFORM_SET_BUFFERS_GEOMETRY:
                 /* width */ va_arg(args, uint32_t);
                 /* height */ va_arg(args, uint32_t);
-                rs->mFormat = va_arg(args, PixelFormat);
+                rs->mFormat = static_cast<AHardwareBuffer_Format>(va_arg(args, int32_t));
                 break;
             case ANATIVEWINDOW_PERFORM_SET_BUFFERS_FORMAT:
-                rs->mFormat = va_arg(args, PixelFormat);
+                rs->mFormat = static_cast<AHardwareBuffer_Format>(va_arg(args, int32_t));
                 break;
         }
     }
diff --git a/libs/hwui/renderthread/ReliableSurface.h b/libs/hwui/renderthread/ReliableSurface.h
index e3cd8c0..58cd067 100644
--- a/libs/hwui/renderthread/ReliableSurface.h
+++ b/libs/hwui/renderthread/ReliableSurface.h
@@ -16,12 +16,14 @@
 
 #pragma once
 
+#include <android-base/unique_fd.h>
 #include <apex/window.h>
-#include <gui/Surface.h>
+#include <utils/Errors.h>
 #include <utils/Macros.h>
 #include <utils/StrongPointer.h>
 
 #include <memory>
+#include <mutex>
 
 namespace android::uirenderer::renderthread {
 
@@ -29,7 +31,7 @@
     PREVENT_COPY_AND_ASSIGN(ReliableSurface);
 
 public:
-    ReliableSurface(sp<Surface>&& surface);
+    ReliableSurface(ANativeWindow* window);
     ~ReliableSurface();
 
     // Performs initialization that is not safe to do in the constructor.
@@ -37,12 +39,10 @@
     // passed as the data pointer is not safe.
     void init();
 
-    ANativeWindow* getNativeWindow() { return mSurface.get(); }
+    ANativeWindow* getNativeWindow() { return mWindow; }
 
     int reserveNext();
 
-    int query(int what, int* value) const { return mSurface->query(what, value); }
-
     int getAndClearError() {
         int ret = mBufferQueueState;
         mBufferQueueState = OK;
@@ -50,12 +50,12 @@
     }
 
 private:
-    sp<Surface> mSurface;
+    ANativeWindow* mWindow;
 
     mutable std::mutex mMutex;
 
     uint64_t mUsage = AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER;
-    PixelFormat mFormat = PIXEL_FORMAT_RGBA_8888;
+    AHardwareBuffer_Format mFormat = AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM;
     std::unique_ptr<AHardwareBuffer, void (*)(AHardwareBuffer*)> mScratchBuffer{
             nullptr, AHardwareBuffer_release};
     ANativeWindowBuffer* mReservedBuffer = nullptr;
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp
index f9e401a..b66a13d 100644
--- a/libs/hwui/renderthread/RenderProxy.cpp
+++ b/libs/hwui/renderthread/RenderProxy.cpp
@@ -16,8 +16,6 @@
 
 #include "RenderProxy.h"
 
-#include <gui/Surface.h>
-
 #include "DeferredLayerUpdater.h"
 #include "DisplayList.h"
 #include "Properties.h"
@@ -78,9 +76,11 @@
     mRenderThread.queue().runSync([this, name]() { mContext->setName(std::string(name)); });
 }
 
-void RenderProxy::setSurface(const sp<Surface>& surface, bool enableTimeout) {
-    mRenderThread.queue().post([this, surf = surface, enableTimeout]() mutable {
-        mContext->setSurface(std::move(surf), enableTimeout);
+void RenderProxy::setSurface(ANativeWindow* window, bool enableTimeout) {
+    ANativeWindow_acquire(window);
+    mRenderThread.queue().post([this, win = window, enableTimeout]() mutable {
+        mContext->setSurface(win, enableTimeout);
+        ANativeWindow_release(win);
     });
 }
 
@@ -314,11 +314,11 @@
             [context = mContext, renderAhead] { context->setRenderAheadDepth(renderAhead); });
 }
 
-int RenderProxy::copySurfaceInto(sp<Surface>& surface, int left, int top, int right, int bottom,
+int RenderProxy::copySurfaceInto(ANativeWindow* window, int left, int top, int right, int bottom,
                                  SkBitmap* bitmap) {
     auto& thread = RenderThread::getInstance();
     return static_cast<int>(thread.queue().runSync([&]() -> auto {
-        return thread.readback().copySurfaceInto(*surface, Rect(left, top, right, bottom), bitmap);
+        return thread.readback().copySurfaceInto(window, Rect(left, top, right, bottom), bitmap);
     }));
 }
 
diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h
index 4683e1d..3baeb2f 100644
--- a/libs/hwui/renderthread/RenderProxy.h
+++ b/libs/hwui/renderthread/RenderProxy.h
@@ -18,6 +18,7 @@
 #define RENDERPROXY_H_
 
 #include <SkBitmap.h>
+#include <android/native_window.h>
 #include <cutils/compiler.h>
 #include <utils/Functor.h>
 
@@ -69,7 +70,7 @@
     ANDROID_API bool loadSystemProperties();
     ANDROID_API void setName(const char* name);
 
-    ANDROID_API void setSurface(const sp<Surface>& surface, bool enableTimeout = true);
+    ANDROID_API void setSurface(ANativeWindow* window, bool enableTimeout = true);
     ANDROID_API void allocateBuffers();
     ANDROID_API bool pause();
     ANDROID_API void setStopped(bool stopped);
@@ -140,7 +141,7 @@
      */
     ANDROID_API void setRenderAheadDepth(int renderAhead);
 
-    ANDROID_API static int copySurfaceInto(sp<Surface>& surface, int left, int top, int right,
+    ANDROID_API static int copySurfaceInto(ANativeWindow* window, int left, int top, int right,
                                            int bottom, SkBitmap* bitmap);
     ANDROID_API static void prepareToDraw(Bitmap& bitmap);
 
diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp
index cae3e3b..206b58f 100644
--- a/libs/hwui/renderthread/RenderThread.cpp
+++ b/libs/hwui/renderthread/RenderThread.cpp
@@ -27,7 +27,6 @@
 #include "pipeline/skia/SkiaOpenGLPipeline.h"
 #include "pipeline/skia/SkiaVulkanPipeline.h"
 #include "renderstate/RenderState.h"
-#include "utils/FatVector.h"
 #include "utils/TimeUtils.h"
 #include "utils/TraceUtils.h"
 
@@ -40,6 +39,8 @@
 #include <utils/Mutex.h>
 #include <thread>
 
+#include <ui/FatVector.h>
+
 namespace android {
 namespace uirenderer {
 namespace renderthread {
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp
index a5355fc..ba70afc 100644
--- a/libs/hwui/renderthread/VulkanManager.cpp
+++ b/libs/hwui/renderthread/VulkanManager.cpp
@@ -23,13 +23,13 @@
 #include <GrContext.h>
 #include <GrTypes.h>
 #include <android/sync.h>
+#include <ui/FatVector.h>
 #include <vk/GrVkExtensions.h>
 #include <vk/GrVkTypes.h>
 
 #include "Properties.h"
 #include "RenderThread.h"
 #include "renderstate/RenderState.h"
-#include "utils/FatVector.h"
 #include "utils/TraceUtils.h"
 
 namespace android {
diff --git a/libs/hwui/service/GraphicsStatsService.cpp b/libs/hwui/service/GraphicsStatsService.cpp
index c418617..644d5fb 100644
--- a/libs/hwui/service/GraphicsStatsService.cpp
+++ b/libs/hwui/service/GraphicsStatsService.cpp
@@ -26,9 +26,9 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#include <algorithm>
-#include <map>
-#include <vector>
+#include <android/util/ProtoOutputStream.h>
+#include <stats_event.h>
+#include <statslog.h>
 
 #include "JankTracker.h"
 #include "protos/graphicsstats.pb.h"
@@ -61,7 +61,7 @@
         }
     }
     bool valid() { return mFd != -1; }
-    operator int() { return mFd; }  // NOLINT(google-explicit-constructor)
+    operator int() { return mFd; } // NOLINT(google-explicit-constructor)
 
 private:
     int mFd;
@@ -485,79 +485,82 @@
     delete dump;
 }
 
-class MemOutputStreamLite : public io::ZeroCopyOutputStream {
-public:
-    explicit MemOutputStreamLite() : mCopyAdapter(), mImpl(&mCopyAdapter) {}
-    virtual ~MemOutputStreamLite() {}
+using namespace google::protobuf;
 
-    virtual bool Next(void** data, int* size) override { return mImpl.Next(data, size); }
+// Field ids taken from FrameTimingHistogram message in atoms.proto
+#define TIME_MILLIS_BUCKETS_FIELD_NUMBER 1
+#define FRAME_COUNTS_FIELD_NUMBER 2
 
-    virtual void BackUp(int count) override { mImpl.BackUp(count); }
-
-    virtual int64 ByteCount() const override { return mImpl.ByteCount(); }
-
-    bool Flush() { return mImpl.Flush(); }
-
-    void copyData(const DumpMemoryFn& reader, void* param1, void* param2) {
-        int bufferOffset = 0;
-        int totalSize = mCopyAdapter.mBuffersSize - mCopyAdapter.mCurrentBufferUnusedSize;
-        int totalDataLeft = totalSize;
-        for (auto& it : mCopyAdapter.mBuffers) {
-            int bufferSize = std::min(totalDataLeft, (int)it.size());  // last buffer is not full
-            reader(it.data(), bufferOffset, bufferSize, totalSize, param1, param2);
-            bufferOffset += bufferSize;
-            totalDataLeft -= bufferSize;
-        }
+static void writeCpuHistogram(AStatsEvent* event,
+                              const uirenderer::protos::GraphicsStatsProto& stat) {
+    util::ProtoOutputStream proto;
+    for (int bucketIndex = 0; bucketIndex < stat.histogram_size(); bucketIndex++) {
+        auto& bucket = stat.histogram(bucketIndex);
+        proto.write(android::util::FIELD_TYPE_INT32 | android::util::FIELD_COUNT_REPEATED |
+                            TIME_MILLIS_BUCKETS_FIELD_NUMBER /* field id */,
+                    (int)bucket.render_millis());
     }
-
-private:
-    struct MemAdapter : public io::CopyingOutputStream {
-        // Data is stored in an array of buffers.
-        // JNI SetByteArrayRegion assembles data in one continuous Java byte[] buffer.
-        std::vector<std::vector<unsigned char>> mBuffers;
-        int mBuffersSize = 0;                     // total bytes allocated in mBuffers
-        int mCurrentBufferUnusedSize = 0;         // unused bytes in the last buffer mBuffers.back()
-        unsigned char* mCurrentBuffer = nullptr;  // pointer to next free byte in mBuffers.back()
-
-        explicit MemAdapter() {}
-        virtual ~MemAdapter() {}
-
-        virtual bool Write(const void* buffer, int size) override {
-            while (size > 0) {
-                if (0 == mCurrentBufferUnusedSize) {
-                    mCurrentBufferUnusedSize =
-                            std::max(size, mBuffersSize ? 2 * mBuffersSize : 10000);
-                    mBuffers.emplace_back();
-                    mBuffers.back().resize(mCurrentBufferUnusedSize);
-                    mCurrentBuffer = mBuffers.back().data();
-                    mBuffersSize += mCurrentBufferUnusedSize;
-                }
-                int dataMoved = std::min(mCurrentBufferUnusedSize, size);
-                memcpy(mCurrentBuffer, buffer, dataMoved);
-                mCurrentBufferUnusedSize -= dataMoved;
-                mCurrentBuffer += dataMoved;
-                buffer = reinterpret_cast<const unsigned char*>(buffer) + dataMoved;
-                size -= dataMoved;
-            }
-            return true;
-        }
-    };
-
-    MemOutputStreamLite::MemAdapter mCopyAdapter;
-    io::CopyingOutputStreamAdaptor mImpl;
-};
-
-void GraphicsStatsService::finishDumpInMemory(Dump* dump, const DumpMemoryFn& reader, void* param1,
-                                              void* param2) {
-    MemOutputStreamLite stream;
-    dump->updateProto();
-    bool success = dump->proto().SerializeToZeroCopyStream(&stream) && stream.Flush();
-    delete dump;
-    if (!success) {
-        return;
+    for (int bucketIndex = 0; bucketIndex < stat.histogram_size(); bucketIndex++) {
+        auto& bucket = stat.histogram(bucketIndex);
+        proto.write(android::util::FIELD_TYPE_INT64 | android::util::FIELD_COUNT_REPEATED |
+                            FRAME_COUNTS_FIELD_NUMBER /* field id */,
+                    (long long)bucket.frame_count());
     }
-    stream.copyData(reader, param1, param2);
+    std::vector<uint8_t> outVector;
+    proto.serializeToVector(&outVector);
+    AStatsEvent_writeByteArray(event, outVector.data(), outVector.size());
 }
 
+static void writeGpuHistogram(AStatsEvent* event,
+                              const uirenderer::protos::GraphicsStatsProto& stat) {
+    util::ProtoOutputStream proto;
+    for (int bucketIndex = 0; bucketIndex < stat.gpu_histogram_size(); bucketIndex++) {
+        auto& bucket = stat.gpu_histogram(bucketIndex);
+        proto.write(android::util::FIELD_TYPE_INT32 | android::util::FIELD_COUNT_REPEATED |
+                            TIME_MILLIS_BUCKETS_FIELD_NUMBER /* field id */,
+                    (int)bucket.render_millis());
+    }
+    for (int bucketIndex = 0; bucketIndex < stat.gpu_histogram_size(); bucketIndex++) {
+        auto& bucket = stat.gpu_histogram(bucketIndex);
+        proto.write(android::util::FIELD_TYPE_INT64 | android::util::FIELD_COUNT_REPEATED |
+                            FRAME_COUNTS_FIELD_NUMBER /* field id */,
+                    (long long)bucket.frame_count());
+    }
+    std::vector<uint8_t> outVector;
+    proto.serializeToVector(&outVector);
+    AStatsEvent_writeByteArray(event, outVector.data(), outVector.size());
+}
+
+
+void GraphicsStatsService::finishDumpInMemory(Dump* dump, AStatsEventList* data,
+                                              bool lastFullDay) {
+    dump->updateProto();
+    auto& serviceDump = dump->proto();
+    for (int stat_index = 0; stat_index < serviceDump.stats_size(); stat_index++) {
+        auto& stat = serviceDump.stats(stat_index);
+        AStatsEvent* event = AStatsEventList_addStatsEvent(data);
+        AStatsEvent_setAtomId(event, android::util::GRAPHICS_STATS);
+        AStatsEvent_writeString(event, stat.package_name().c_str());
+        AStatsEvent_writeInt64(event, (int64_t)stat.version_code());
+        AStatsEvent_writeInt64(event, (int64_t)stat.stats_start());
+        AStatsEvent_writeInt64(event, (int64_t)stat.stats_end());
+        AStatsEvent_writeInt32(event, (int32_t)stat.pipeline());
+        AStatsEvent_writeInt32(event, (int32_t)stat.summary().total_frames());
+        AStatsEvent_writeInt32(event, (int32_t)stat.summary().missed_vsync_count());
+        AStatsEvent_writeInt32(event, (int32_t)stat.summary().high_input_latency_count());
+        AStatsEvent_writeInt32(event, (int32_t)stat.summary().slow_ui_thread_count());
+        AStatsEvent_writeInt32(event, (int32_t)stat.summary().slow_bitmap_upload_count());
+        AStatsEvent_writeInt32(event, (int32_t)stat.summary().slow_draw_count());
+        AStatsEvent_writeInt32(event, (int32_t)stat.summary().missed_deadline_count());
+        writeCpuHistogram(event, stat);
+        writeGpuHistogram(event, stat);
+        // TODO: fill in UI mainline module version, when the feature is available.
+        AStatsEvent_writeInt64(event, (int64_t)0);
+        AStatsEvent_writeBool(event, !lastFullDay);
+        AStatsEvent_build(event);
+    }
+}
+
+
 } /* namespace uirenderer */
 } /* namespace android */
diff --git a/libs/hwui/service/GraphicsStatsService.h b/libs/hwui/service/GraphicsStatsService.h
index 4bed9633..59e21d0 100644
--- a/libs/hwui/service/GraphicsStatsService.h
+++ b/libs/hwui/service/GraphicsStatsService.h
@@ -20,6 +20,7 @@
 
 #include "JankTracker.h"
 #include "utils/Macros.h"
+#include <stats_pull_atom_callback.h>
 
 namespace android {
 namespace uirenderer {
@@ -27,9 +28,6 @@
 class GraphicsStatsProto;
 }
 
-typedef void (*DumpMemoryFn)(void* buffer, int bufferOffset, int bufferSize, int totalSize,
-                             void* param1, void* param2);
-
 /*
  * The exported entry points used by GraphicsStatsService.java in f/b/services/core
  *
@@ -56,8 +54,8 @@
                                       int64_t startTime, int64_t endTime, const ProfileData* data);
     ANDROID_API static void addToDump(Dump* dump, const std::string& path);
     ANDROID_API static void finishDump(Dump* dump);
-    ANDROID_API static void finishDumpInMemory(Dump* dump, const DumpMemoryFn& reader, void* param1,
-                                               void* param2);
+    ANDROID_API static void finishDumpInMemory(Dump* dump, AStatsEventList* data,
+                                               bool lastFullDay);
 
     // Visible for testing
     static bool parseFromFile(const std::string& path, protos::GraphicsStatsProto* output);
diff --git a/libs/hwui/tests/common/scenes/MagnifierAnimation.cpp b/libs/hwui/tests/common/scenes/MagnifierAnimation.cpp
index f6cff1c..f4fce27 100644
--- a/libs/hwui/tests/common/scenes/MagnifierAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/MagnifierAnimation.cpp
@@ -70,7 +70,7 @@
             magnifier->getSkBitmap(&temp);
             constexpr int x = 90;
             constexpr int y = 325;
-            RenderProxy::copySurfaceInto(renderTarget, x, y, x + magnifier->width(),
+            RenderProxy::copySurfaceInto(renderTarget.get(), x, y, x + magnifier->width(),
                                          y + magnifier->height(), &temp);
         }
     }
diff --git a/libs/hwui/tests/macrobench/TestSceneRunner.cpp b/libs/hwui/tests/macrobench/TestSceneRunner.cpp
index 3b6baa7..801cb7d 100644
--- a/libs/hwui/tests/macrobench/TestSceneRunner.cpp
+++ b/libs/hwui/tests/macrobench/TestSceneRunner.cpp
@@ -131,7 +131,7 @@
     ContextFactory factory;
     std::unique_ptr<RenderProxy> proxy(new RenderProxy(false, rootNode.get(), &factory));
     proxy->loadSystemProperties();
-    proxy->setSurface(surface);
+    proxy->setSurface(surface.get());
     float lightX = width / 2.0;
     proxy->setLightAlpha(255 * 0.075, 255 * 0.15);
     proxy->setLightGeometry((Vector3){lightX, dp(-200.0f), dp(800.0f)}, dp(800.0f));
diff --git a/libs/hwui/tests/unit/FatVectorTests.cpp b/libs/hwui/tests/unit/FatVectorTests.cpp
index 8523e6c..6585a62 100644
--- a/libs/hwui/tests/unit/FatVectorTests.cpp
+++ b/libs/hwui/tests/unit/FatVectorTests.cpp
@@ -15,7 +15,7 @@
  */
 
 #include <gtest/gtest.h>
-#include <utils/FatVector.h>
+#include <ui/FatVector.h>
 
 #include <tests/common/TestUtils.h>
 
diff --git a/libs/hwui/tests/unit/SkiaDisplayListTests.cpp b/libs/hwui/tests/unit/SkiaDisplayListTests.cpp
index 7d999c4..d08aea6 100644
--- a/libs/hwui/tests/unit/SkiaDisplayListTests.cpp
+++ b/libs/hwui/tests/unit/SkiaDisplayListTests.cpp
@@ -210,7 +210,7 @@
     auto surface = testContext.surface();
     int width = ANativeWindow_getWidth(surface.get());
     int height = ANativeWindow_getHeight(surface.get());
-    canvasContext->setSurface(std::move(surface));
+    canvasContext->setSurface(surface.get());
 
     TreeInfo info(TreeInfo::MODE_FULL, *canvasContext.get());
     DamageAccumulator damageAccumulator;
diff --git a/libs/hwui/tests/unit/SkiaPipelineTests.cpp b/libs/hwui/tests/unit/SkiaPipelineTests.cpp
index 307d136..90bcd1c 100644
--- a/libs/hwui/tests/unit/SkiaPipelineTests.cpp
+++ b/libs/hwui/tests/unit/SkiaPipelineTests.cpp
@@ -398,7 +398,7 @@
     auto surface = context.surface();
     auto pipeline = std::make_unique<SkiaOpenGLPipeline>(renderThread);
     EXPECT_FALSE(pipeline->isSurfaceReady());
-    EXPECT_TRUE(pipeline->setSurface(surface.get(), SwapBehavior::kSwap_default, ColorMode::SRGB, 0));
+    EXPECT_TRUE(pipeline->setSurface(surface.get(), SwapBehavior::kSwap_default, 0));
     EXPECT_TRUE(pipeline->isSurfaceReady());
     renderThread.destroyRenderingContext();
     EXPECT_FALSE(pipeline->isSurfaceReady());
diff --git a/libs/hwui/utils/FatVector.h b/libs/hwui/utils/FatVector.h
deleted file mode 100644
index 8cc4d10..0000000
--- a/libs/hwui/utils/FatVector.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2015, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef ANDROID_FAT_VECTOR_H
-#define ANDROID_FAT_VECTOR_H
-
-#include "utils/Macros.h"
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <utils/Log.h>
-#include <type_traits>
-
-#include <vector>
-
-namespace android {
-namespace uirenderer {
-
-template <typename T, size_t SIZE>
-class InlineStdAllocator {
-public:
-    struct Allocation {
-        PREVENT_COPY_AND_ASSIGN(Allocation);
-
-    public:
-        Allocation(){};
-        // char array instead of T array, so memory is uninitialized, with no destructors run
-        char array[sizeof(T) * SIZE];
-        bool inUse = false;
-    };
-
-    typedef T value_type;  // needed to implement std::allocator
-    typedef T* pointer;    // needed to implement std::allocator
-
-    explicit InlineStdAllocator(Allocation& allocation) : mAllocation(allocation) {}
-    InlineStdAllocator(const InlineStdAllocator& other) : mAllocation(other.mAllocation) {}
-    ~InlineStdAllocator() {}
-
-    T* allocate(size_t num, const void* = 0) {
-        if (!mAllocation.inUse && num <= SIZE) {
-            mAllocation.inUse = true;
-            return (T*)mAllocation.array;
-        } else {
-            return (T*)malloc(num * sizeof(T));
-        }
-    }
-
-    void deallocate(pointer p, size_t num) {
-        if (p == (T*)mAllocation.array) {
-            mAllocation.inUse = false;
-        } else {
-            // 'free' instead of delete here - destruction handled separately
-            free(p);
-        }
-    }
-    Allocation& mAllocation;
-};
-
-/**
- * std::vector with SIZE elements preallocated into an internal buffer.
- *
- * Useful for avoiding the cost of malloc in cases where only SIZE or
- * fewer elements are needed in the common case.
- */
-template <typename T, size_t SIZE>
-class FatVector : public std::vector<T, InlineStdAllocator<T, SIZE>> {
-public:
-    FatVector()
-            : std::vector<T, InlineStdAllocator<T, SIZE>>(
-                      InlineStdAllocator<T, SIZE>(mAllocation)) {
-        this->reserve(SIZE);
-    }
-
-    explicit FatVector(size_t capacity) : FatVector() { this->resize(capacity); }
-
-private:
-    typename InlineStdAllocator<T, SIZE>::Allocation mAllocation;
-};
-
-}  // namespace uirenderer
-}  // namespace android
-
-#endif  // ANDROID_FAT_VECTOR_H
diff --git a/libs/input/PointerController.cpp b/libs/input/PointerController.cpp
index e4348f2..3b494e9 100644
--- a/libs/input/PointerController.cpp
+++ b/libs/input/PointerController.cpp
@@ -251,19 +251,24 @@
 void PointerController::setPresentation(Presentation presentation) {
     AutoMutex _l(mLock);
 
-    if (presentation == PRESENTATION_POINTER && mLocked.additionalMouseResources.empty()) {
-        mPolicy->loadAdditionalMouseResources(&mLocked.additionalMouseResources,
-                &mLocked.animationResources, mLocked.viewport.displayId);
+    if (mLocked.presentation == presentation) {
+        return;
     }
 
-    if (mLocked.presentation != presentation) {
-        mLocked.presentation = presentation;
-        mLocked.presentationChanged = true;
+    mLocked.presentation = presentation;
+    mLocked.presentationChanged = true;
 
-        if (presentation != PRESENTATION_SPOT) {
-            fadeOutAndReleaseAllSpotsLocked();
+    if (!mLocked.viewport.isValid()) {
+        return;
+    }
+
+    if (presentation == PRESENTATION_POINTER) {
+        if (mLocked.additionalMouseResources.empty()) {
+            mPolicy->loadAdditionalMouseResources(&mLocked.additionalMouseResources,
+                                                  &mLocked.animationResources,
+                                                  mLocked.viewport.displayId);
         }
-
+        fadeOutAndReleaseAllSpotsLocked();
         updatePointerLocked();
     }
 }
@@ -285,6 +290,9 @@
 #endif
 
     AutoMutex _l(mLock);
+    if (!mLocked.viewport.isValid()) {
+        return;
+    }
 
     std::vector<Spot*> newSpots;
     std::map<int32_t, std::vector<Spot*>>::const_iterator iter =
@@ -331,6 +339,9 @@
 #endif
 
     AutoMutex _l(mLock);
+    if (!mLocked.viewport.isValid()) {
+        return;
+    }
 
     fadeOutAndReleaseAllSpotsLocked();
 }
@@ -752,6 +763,10 @@
 }
 
 void PointerController::loadResourcesLocked() REQUIRES(mLock) {
+    if (!mLocked.viewport.isValid()) {
+        return;
+    }
+
     mPolicy->loadPointerResources(&mResources, mLocked.viewport.displayId);
     mPolicy->loadPointerIcon(&mLocked.pointerIcon, mLocked.viewport.displayId);
 
diff --git a/libs/input/tests/PointerController_test.cpp b/libs/input/tests/PointerController_test.cpp
index b36406d..a157426 100644
--- a/libs/input/tests/PointerController_test.cpp
+++ b/libs/input/tests/PointerController_test.cpp
@@ -39,8 +39,8 @@
 
 using ::testing::AllOf;
 using ::testing::Field;
-using ::testing::NiceMock;
 using ::testing::Mock;
+using ::testing::NiceMock;
 using ::testing::Return;
 using ::testing::Test;
 
@@ -57,12 +57,20 @@
     virtual int32_t getDefaultPointerIconId() override;
     virtual int32_t getCustomPointerIconId() override;
 
+    bool allResourcesAreLoaded();
+    bool noResourcesAreLoaded();
+
 private:
     void loadPointerIconForType(SpriteIcon* icon, int32_t cursorType);
+
+    bool pointerIconLoaded{false};
+    bool pointerResourcesLoaded{false};
+    bool additionalMouseResourcesLoaded{false};
 };
 
 void MockPointerControllerPolicyInterface::loadPointerIcon(SpriteIcon* icon, int32_t) {
     loadPointerIconForType(icon, CURSOR_TYPE_DEFAULT);
+    pointerIconLoaded = true;
 }
 
 void MockPointerControllerPolicyInterface::loadPointerResources(PointerResources* outResources,
@@ -70,6 +78,7 @@
     loadPointerIconForType(&outResources->spotHover, CURSOR_TYPE_HOVER);
     loadPointerIconForType(&outResources->spotTouch, CURSOR_TYPE_TOUCH);
     loadPointerIconForType(&outResources->spotAnchor, CURSOR_TYPE_ANCHOR);
+    pointerResourcesLoaded = true;
 }
 
 void MockPointerControllerPolicyInterface::loadAdditionalMouseResources(
@@ -91,6 +100,8 @@
     anim.durationPerFrame = 10;
     (*outResources)[cursorType] = icon;
     (*outAnimationResources)[cursorType] = anim;
+
+    additionalMouseResourcesLoaded = true;
 }
 
 int32_t MockPointerControllerPolicyInterface::getDefaultPointerIconId() {
@@ -101,18 +112,27 @@
     return CURSOR_TYPE_CUSTOM;
 }
 
+bool MockPointerControllerPolicyInterface::allResourcesAreLoaded() {
+    return pointerIconLoaded && pointerResourcesLoaded && additionalMouseResourcesLoaded;
+}
+
+bool MockPointerControllerPolicyInterface::noResourcesAreLoaded() {
+    return !(pointerIconLoaded || pointerResourcesLoaded || additionalMouseResourcesLoaded);
+}
+
 void MockPointerControllerPolicyInterface::loadPointerIconForType(SpriteIcon* icon, int32_t type) {
     icon->style = type;
     std::pair<float, float> hotSpot = getHotSpotCoordinatesForType(type);
     icon->hotSpotX = hotSpot.first;
     icon->hotSpotY = hotSpot.second;
 }
-
 class PointerControllerTest : public Test {
 protected:
     PointerControllerTest();
     ~PointerControllerTest();
 
+    void ensureDisplayViewportIsSet();
+
     sp<MockSprite> mPointerSprite;
     sp<MockPointerControllerPolicyInterface> mPolicy;
     sp<MockSpriteController> mSpriteController;
@@ -141,7 +161,14 @@
             .WillOnce(Return(mPointerSprite));
 
     mPointerController = new PointerController(mPolicy, mLooper, mSpriteController);
+}
 
+PointerControllerTest::~PointerControllerTest() {
+    mRunning.store(false, std::memory_order_relaxed);
+    mThread.join();
+}
+
+void PointerControllerTest::ensureDisplayViewportIsSet() {
     DisplayViewport viewport;
     viewport.displayId = ADISPLAY_ID_DEFAULT;
     viewport.logicalRight = 1600;
@@ -151,11 +178,9 @@
     viewport.deviceWidth = 400;
     viewport.deviceHeight = 300;
     mPointerController->setDisplayViewport(viewport);
-}
 
-PointerControllerTest::~PointerControllerTest() {
-    mRunning.store(false, std::memory_order_relaxed);
-    mThread.join();
+    // The first call to setDisplayViewport should trigger the loading of the necessary resources.
+    EXPECT_TRUE(mPolicy->allResourcesAreLoaded());
 }
 
 void PointerControllerTest::loopThread() {
@@ -167,6 +192,7 @@
 }
 
 TEST_F(PointerControllerTest, useDefaultCursorTypeByDefault) {
+    ensureDisplayViewportIsSet();
     mPointerController->unfade(PointerController::TRANSITION_IMMEDIATE);
 
     std::pair<float, float> hotspot = getHotSpotCoordinatesForType(CURSOR_TYPE_DEFAULT);
@@ -181,6 +207,7 @@
 }
 
 TEST_F(PointerControllerTest, updatePointerIcon) {
+    ensureDisplayViewportIsSet();
     mPointerController->unfade(PointerController::TRANSITION_IMMEDIATE);
 
     int32_t type = CURSOR_TYPE_ADDITIONAL;
@@ -196,6 +223,7 @@
 }
 
 TEST_F(PointerControllerTest, setCustomPointerIcon) {
+    ensureDisplayViewportIsSet();
     mPointerController->unfade(PointerController::TRANSITION_IMMEDIATE);
 
     int32_t style = CURSOR_TYPE_CUSTOM;
@@ -217,4 +245,18 @@
     mPointerController->setCustomPointerIcon(icon);
 }
 
+TEST_F(PointerControllerTest, doesNotGetResourcesBeforeSettingViewport) {
+    mPointerController->setPresentation(PointerController::PRESENTATION_POINTER);
+    mPointerController->setSpots(nullptr, nullptr, BitSet32(), -1);
+    mPointerController->clearSpots();
+    mPointerController->setPosition(1.0f, 1.0f);
+    mPointerController->move(1.0f, 1.0f);
+    mPointerController->unfade(PointerController::TRANSITION_IMMEDIATE);
+    mPointerController->fade(PointerController::TRANSITION_IMMEDIATE);
+
+    EXPECT_TRUE(mPolicy->noResourcesAreLoaded());
+
+    ensureDisplayViewportIsSet();
+}
+
 }  // namespace android
diff --git a/libs/protoutil/Android.bp b/libs/protoutil/Android.bp
index b0af997..d2b7d5c 100644
--- a/libs/protoutil/Android.bp
+++ b/libs/protoutil/Android.bp
@@ -45,6 +45,12 @@
     defaults: ["libprotoutil_defaults"],
 
     export_include_dirs: ["include"],
+
+    apex_available: [
+        "//apex_available:platform",
+        "com.android.os.statsd",
+        "test_com.android.os.statsd",
+    ],
 }
 
 cc_test {
diff --git a/libs/services/Android.bp b/libs/services/Android.bp
index 9b047ca..1e62107 100644
--- a/libs/services/Android.bp
+++ b/libs/services/Android.bp
@@ -20,7 +20,6 @@
         ":IDropBoxManagerService.aidl",
         "src/content/ComponentName.cpp",
         "src/os/DropBoxManager.cpp",
-        "src/os/StatsDimensionsValue.cpp",
     ],
 
     shared_libs: [
diff --git a/libs/services/include/android/os/StatsDimensionsValue.h b/libs/services/include/android/os/StatsDimensionsValue.h
deleted file mode 100644
index cc0b056..0000000
--- a/libs/services/include/android/os/StatsDimensionsValue.h
+++ /dev/null
@@ -1,70 +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.
- */
-#ifndef STATS_DIMENSIONS_VALUE_H
-#define STATS_DIMENSIONS_VALUE_H
-
-#include <binder/Parcel.h>
-#include <binder/Parcelable.h>
-#include <binder/Status.h>
-#include <utils/String16.h>
-#include <vector>
-
-namespace android {
-namespace os {
-
-// Represents a parcelable object. Used to send data from statsd to StatsCompanionService.java.
-class StatsDimensionsValue : public android::Parcelable {
-public:
-    StatsDimensionsValue();
-
-    StatsDimensionsValue(int32_t field, String16 value);
-    StatsDimensionsValue(int32_t field, int32_t value);
-    StatsDimensionsValue(int32_t field, int64_t value);
-    StatsDimensionsValue(int32_t field, bool value);
-    StatsDimensionsValue(int32_t field, float value);
-    StatsDimensionsValue(int32_t field, std::vector<StatsDimensionsValue> value);
-
-    virtual ~StatsDimensionsValue();
-
-    virtual android::status_t writeToParcel(android::Parcel* out) const override;
-    virtual android::status_t readFromParcel(const android::Parcel* in) override;
-
-private:
-    // Keep constants in sync with android/os/StatsDimensionsValue.java
-    // and stats_log.proto's DimensionValue.
-    static const int kStrValueType = 2;
-    static const int kIntValueType = 3;
-    static const int kLongValueType = 4;
-    static const int kBoolValueType = 5;
-    static const int kFloatValueType = 6;
-    static const int kTupleValueType = 7;
-
-    int32_t mField;
-    int32_t mValueType;
-
-    // This isn't very clever, but it isn't used for long-term storage, so it'll do.
-    String16 mStrValue;
-    int32_t mIntValue;
-    int64_t mLongValue;
-    bool mBoolValue;
-    float mFloatValue;
-    std::vector<StatsDimensionsValue> mTupleValue;
-};
-
-}  // namespace os
-}  // namespace android
-
-#endif // STATS_DIMENSIONS_VALUE_H
diff --git a/libs/services/src/os/StatsDimensionsValue.cpp b/libs/services/src/os/StatsDimensionsValue.cpp
deleted file mode 100644
index 0052e0b..0000000
--- a/libs/services/src/os/StatsDimensionsValue.cpp
+++ /dev/null
@@ -1,126 +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.
- */
-
-#define LOG_TAG "StatsDimensionsValue"
-
-#include "android/os/StatsDimensionsValue.h"
-
-#include <cutils/log.h>
-
-using android::Parcel;
-using android::Parcelable;
-using android::status_t;
-using std::vector;
-
-namespace android {
-namespace os {
-
-StatsDimensionsValue::StatsDimensionsValue() {};
-
-StatsDimensionsValue::StatsDimensionsValue(int32_t field, String16 value) :
-    mField(field),
-    mValueType(kStrValueType),
-    mStrValue(value) {
-}
-StatsDimensionsValue::StatsDimensionsValue(int32_t field, int32_t value) :
-    mField(field),
-    mValueType(kIntValueType),
-    mIntValue(value) {
-}
-StatsDimensionsValue::StatsDimensionsValue(int32_t field, int64_t value) :
-    mField(field),
-    mValueType(kLongValueType),
-    mLongValue(value) {
-}
-StatsDimensionsValue::StatsDimensionsValue(int32_t field, bool value) :
-    mField(field),
-    mValueType(kBoolValueType),
-    mBoolValue(value) {
-}
-StatsDimensionsValue::StatsDimensionsValue(int32_t field, float value) :
-    mField(field),
-    mValueType(kFloatValueType),
-    mFloatValue(value) {
-}
-StatsDimensionsValue::StatsDimensionsValue(int32_t field, vector<StatsDimensionsValue> value) :
-    mField(field),
-    mValueType(kTupleValueType),
-    mTupleValue(value) {
-}
-
-StatsDimensionsValue::~StatsDimensionsValue() {}
-
-status_t
-StatsDimensionsValue::writeToParcel(Parcel* out) const {
-    status_t err ;
-
-    err = out->writeInt32(mField);
-    if (err != NO_ERROR) {
-        return err;
-    }
-    err = out->writeInt32(mValueType);
-    if (err != NO_ERROR) {
-        return err;
-    }
-    switch (mValueType) {
-        case kStrValueType:
-            err = out->writeString16(mStrValue);
-            break;
-        case kIntValueType:
-            err = out->writeInt32(mIntValue);
-            break;
-        case kLongValueType:
-            err = out->writeInt64(mLongValue);
-            break;
-        case kBoolValueType:
-            err = out->writeBool(mBoolValue);
-            break;
-        case kFloatValueType:
-            err = out->writeFloat(mFloatValue);
-            break;
-        case kTupleValueType:
-            {
-                int sz = mTupleValue.size();
-                err = out->writeInt32(sz);
-                if (err != NO_ERROR) {
-                    return err;
-                }
-                for (int i = 0; i < sz; ++i) {
-                    err = mTupleValue[i].writeToParcel(out);
-                    if (err != NO_ERROR) {
-                        return err;
-                    }
-                }
-            }
-            break;
-        default:
-            err = UNKNOWN_ERROR;
-            break;
-    }
-    return err;
-}
-
-status_t
-StatsDimensionsValue::readFromParcel(const Parcel* in)
-{
-    // Implement me if desired. We don't currently use this.
-    ALOGE("Cannot do c++ StatsDimensionsValue.readFromParcel(); it is not implemented.");
-    (void)in; // To prevent compile error of unused parameter 'in'
-    return UNKNOWN_ERROR;
-}
-
-}  // namespace os
-}  // namespace android
diff --git a/location/java/android/location/AbstractListenerManager.java b/location/java/android/location/AbstractListenerManager.java
index 944ebf9..3dc7cfc 100644
--- a/location/java/android/location/AbstractListenerManager.java
+++ b/location/java/android/location/AbstractListenerManager.java
@@ -16,6 +16,8 @@
 
 package android.location;
 
+import static com.android.internal.util.function.pooled.PooledLambda.obtainRunnable;
+
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.os.Binder;
@@ -27,6 +29,7 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.Preconditions;
 
+import java.util.Objects;
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
 
@@ -35,107 +38,183 @@
  *
  * @hide
  */
-abstract class AbstractListenerManager<T> {
+abstract class AbstractListenerManager<TRequest, TListener> {
 
-    private static class Registration<T> {
+    private static class Registration<TRequest, TListener> {
         private final Executor mExecutor;
-        @Nullable private volatile T mListener;
+        @Nullable private TRequest mRequest;
+        @Nullable private volatile TListener mListener;
 
-        private Registration(Executor executor, T listener) {
+        private Registration(@Nullable TRequest request, Executor executor, TListener listener) {
             Preconditions.checkArgument(listener != null, "invalid null listener/callback");
             Preconditions.checkArgument(executor != null, "invalid null executor");
             mExecutor = executor;
             mListener = listener;
+            mRequest = request;
+        }
+
+        @Nullable
+        public TRequest getRequest() {
+            return mRequest;
         }
 
         private void unregister() {
+            mRequest = null;
             mListener = null;
         }
 
-        private void execute(Consumer<T> operation) {
-            mExecutor.execute(() -> {
-                T listener = mListener;
-                if (listener == null) {
-                    return;
-                }
+        private void execute(Consumer<TListener> operation) {
+            mExecutor.execute(
+                    obtainRunnable(Registration<TRequest, TListener>::accept, this, operation)
+                            .recycleOnUse());
+        }
 
-                // we may be under the binder identity if a direct executor is used
-                long identity = Binder.clearCallingIdentity();
-                try {
-                    operation.accept(listener);
-                } finally {
-                    Binder.restoreCallingIdentity(identity);
-                }
-            });
+        private void accept(Consumer<TListener> operation) {
+            TListener listener = mListener;
+            if (listener == null) {
+                return;
+            }
+
+            // we may be under the binder identity if a direct executor is used
+            long identity = Binder.clearCallingIdentity();
+            try {
+                operation.accept(listener);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
     }
 
     @GuardedBy("mListeners")
-    private final ArrayMap<Object, Registration<T>> mListeners = new ArrayMap<>();
+    private final ArrayMap<Object, Registration<TRequest, TListener>> mListeners =
+            new ArrayMap<>();
 
-    public boolean addListener(@NonNull T listener, @NonNull Handler handler)
+    @GuardedBy("mListeners")
+    @Nullable
+    private TRequest mMergedRequest;
+
+    public boolean addListener(@NonNull TListener listener, @NonNull Handler handler)
             throws RemoteException {
-        return addInternal(listener, handler);
+        return addInternal(/* request= */ null, listener, handler);
     }
 
-    public boolean addListener(@NonNull T listener, @NonNull Executor executor)
+    public boolean addListener(@NonNull TListener listener, @NonNull Executor executor)
             throws RemoteException {
-        return addInternal(listener, executor);
+        return addInternal(/* request= */ null, listener, executor);
     }
 
-    protected final boolean addInternal(@NonNull Object listener, @NonNull Handler handler)
-            throws RemoteException {
-        return addInternal(listener, new HandlerExecutor(handler));
+    public boolean addListener(@Nullable TRequest request, @NonNull TListener listener,
+            @NonNull Handler handler) throws RemoteException {
+        return addInternal(request, listener, handler);
     }
 
-    protected final boolean addInternal(@NonNull Object listener, @NonNull Executor executor)
+    public boolean addListener(@Nullable TRequest request, @NonNull TListener listener,
+            @NonNull Executor executor) throws RemoteException {
+        return addInternal(request, listener, executor);
+    }
+
+    protected final boolean addInternal(@Nullable TRequest request, @NonNull Object listener,
+            @NonNull Handler handler) throws RemoteException {
+        return addInternal(request, listener, new HandlerExecutor(handler));
+    }
+
+    protected final boolean addInternal(@Nullable TRequest request, @NonNull Object listener,
+            @NonNull Executor executor)
             throws RemoteException {
         Preconditions.checkArgument(listener != null, "invalid null listener/callback");
-        return addInternal(listener, new Registration<>(executor, convertKey(listener)));
+        return addInternal(listener, new Registration<>(request, executor, convertKey(listener)));
     }
 
-    private boolean addInternal(Object key, Registration<T> registration) throws RemoteException {
+    private boolean addInternal(Object key, Registration<TRequest, TListener> registration)
+            throws RemoteException {
         Preconditions.checkNotNull(registration);
 
         synchronized (mListeners) {
-            if (mListeners.isEmpty() && !registerService()) {
-                return false;
-            }
-            Registration<T> oldRegistration = mListeners.put(key, registration);
+            boolean initialRequest = mListeners.isEmpty();
+
+            Registration<TRequest, TListener> oldRegistration = mListeners.put(key, registration);
             if (oldRegistration != null) {
                 oldRegistration.unregister();
             }
+            TRequest merged = mergeRequests();
+
+            if (initialRequest || !Objects.equals(merged, mMergedRequest)) {
+                mMergedRequest = merged;
+                if (!initialRequest) {
+                    unregisterService();
+                }
+                registerService(mMergedRequest);
+            }
+
             return true;
         }
     }
 
     public void removeListener(Object listener) throws RemoteException {
         synchronized (mListeners) {
-            Registration<T> oldRegistration = mListeners.remove(listener);
+            Registration<TRequest, TListener> oldRegistration = mListeners.remove(listener);
             if (oldRegistration == null) {
                 return;
             }
             oldRegistration.unregister();
 
-            if (mListeners.isEmpty()) {
+            boolean lastRequest = mListeners.isEmpty();
+            TRequest merged = lastRequest ? null : mergeRequests();
+            boolean newRequest = !lastRequest && !Objects.equals(merged, mMergedRequest);
+
+            if (lastRequest || newRequest) {
                 unregisterService();
+                mMergedRequest = merged;
+                if (newRequest) {
+                    registerService(mMergedRequest);
+                }
             }
         }
     }
 
     @SuppressWarnings("unchecked")
-    protected T convertKey(@NonNull Object listener) {
-        return (T) listener;
+    protected TListener convertKey(@NonNull Object listener) {
+        return (TListener) listener;
     }
 
-    protected abstract boolean registerService() throws RemoteException;
+    protected abstract boolean registerService(TRequest request) throws RemoteException;
     protected abstract void unregisterService() throws RemoteException;
 
-    protected void execute(Consumer<T> operation) {
+    @Nullable
+    protected TRequest merge(@NonNull TRequest[] requests) {
+        for (TRequest request : requests) {
+            Preconditions.checkArgument(request == null,
+                    "merge() has to be overridden for non-null requests.");
+        }
+        return null;
+    }
+
+    protected void execute(Consumer<TListener> operation) {
         synchronized (mListeners) {
-            for (Registration<T> registration : mListeners.values()) {
+            for (Registration<TRequest, TListener> registration : mListeners.values()) {
                 registration.execute(operation);
             }
         }
     }
+
+    @GuardedBy("mListeners")
+    @SuppressWarnings("unchecked")
+    @Nullable
+    private TRequest mergeRequests() {
+        Preconditions.checkState(Thread.holdsLock(mListeners));
+
+        if (mListeners.isEmpty()) {
+            return null;
+        }
+
+        if (mListeners.size() == 1) {
+            return mListeners.valueAt(0).getRequest();
+        }
+
+        TRequest[] requests = (TRequest[]) new Object[mListeners.size()];
+        for (int index = 0; index < mListeners.size(); index++) {
+            requests[index] = mListeners.valueAt(index).getRequest();
+        }
+        return merge(requests);
+    }
 }
diff --git a/location/java/android/location/GnssAntennaInfo.aidl b/location/java/android/location/GnssAntennaInfo.aidl
new file mode 100644
index 0000000..2b956af
--- /dev/null
+++ b/location/java/android/location/GnssAntennaInfo.aidl
@@ -0,0 +1,19 @@
+/*
+ * 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.location;
+
+parcelable GnssAntennaInfo;
\ No newline at end of file
diff --git a/location/java/android/location/GnssAntennaInfo.java b/location/java/android/location/GnssAntennaInfo.java
new file mode 100644
index 0000000..b2f9a0f
--- /dev/null
+++ b/location/java/android/location/GnssAntennaInfo.java
@@ -0,0 +1,467 @@
+/*
+ * 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.location;
+
+import android.annotation.FloatRange;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * A class that contains information about a GNSS antenna. GNSS antenna characteristics can change
+ * with device configuration, such as when a device is folded open or closed. Antenna information is
+ * delivered to registered instances of {@link Listener}.
+ */
+public final class GnssAntennaInfo implements Parcelable {
+    private final double mCarrierFrequencyMHz;
+    private final PhaseCenterOffset mPhaseCenterOffset;
+    private final SphericalCorrections mPhaseCenterVariationCorrections;
+    private final SphericalCorrections mSignalGainCorrections;
+
+    /**
+     * Used for receiving GNSS antenna info from the GNSS engine. You can implement this interface
+     * and call {@link LocationManager#registerAntennaInfoListener};
+     */
+    public interface Listener {
+        /**
+         * Returns the latest GNSS antenna info. This event is triggered when a listener is
+         * registered, and whenever the antenna info changes (due to a device configuration change).
+         */
+        void onGnssAntennaInfoReceived(@NonNull List<GnssAntennaInfo> gnssAntennaInfos);
+    }
+
+    /**
+     * Class containing information about the antenna phase center offset (PCO). PCO is defined with
+     * respect to the origin of the Android sensor coordinate system, e.g., center of primary screen
+     * for mobiles - see sensor or form factor documents for details. Uncertainties are reported
+     *  to 1-sigma.
+     */
+    public static final class PhaseCenterOffset implements Parcelable {
+        private final double mOffsetXMm;
+        private final double mOffsetXUncertaintyMm;
+        private final double mOffsetYMm;
+        private final double mOffsetYUncertaintyMm;
+        private final double mOffsetZMm;
+        private final double mOffsetZUncertaintyMm;
+
+        public PhaseCenterOffset(
+                double offsetXMm, double offsetXUncertaintyMm,
+                double offsetYMm, double offsetYUncertaintyMm,
+                double offsetZMm, double offsetZUncertaintyMm) {
+            mOffsetXMm = offsetXMm;
+            mOffsetYMm = offsetYMm;
+            mOffsetZMm = offsetZMm;
+            mOffsetXUncertaintyMm = offsetXUncertaintyMm;
+            mOffsetYUncertaintyMm = offsetYUncertaintyMm;
+            mOffsetZUncertaintyMm = offsetZUncertaintyMm;
+        }
+
+        public static final @NonNull Creator<PhaseCenterOffset> CREATOR =
+                new Creator<PhaseCenterOffset>() {
+                    @Override
+                    public PhaseCenterOffset createFromParcel(Parcel in) {
+                        return new PhaseCenterOffset(
+                                in.readDouble(),
+                                in.readDouble(),
+                                in.readDouble(),
+                                in.readDouble(),
+                                in.readDouble(),
+                                in.readDouble()
+                        );
+                    }
+
+                    @Override
+                    public PhaseCenterOffset[] newArray(int size) {
+                        return new PhaseCenterOffset[size];
+                    }
+                };
+
+        @FloatRange()
+        public double getXOffsetMm() {
+            return mOffsetXMm;
+        }
+
+        @FloatRange()
+        public double getXOffsetUncertaintyMm() {
+            return mOffsetXUncertaintyMm;
+        }
+
+        @FloatRange()
+        public double getYOffsetMm() {
+            return mOffsetYMm;
+        }
+
+        @FloatRange()
+        public double getYOffsetUncertaintyMm() {
+            return mOffsetYUncertaintyMm;
+        }
+
+        @FloatRange()
+        public double getZOffsetMm() {
+            return mOffsetZMm;
+        }
+
+        @FloatRange()
+        public double getZOffsetUncertaintyMm() {
+            return mOffsetZUncertaintyMm;
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(@NonNull Parcel dest, int flags) {
+            dest.writeDouble(mOffsetXMm);
+            dest.writeDouble(mOffsetXUncertaintyMm);
+            dest.writeDouble(mOffsetYMm);
+            dest.writeDouble(mOffsetYUncertaintyMm);
+            dest.writeDouble(mOffsetZMm);
+            dest.writeDouble(mOffsetZUncertaintyMm);
+        }
+
+        @Override
+        public String toString() {
+            return "PhaseCenterOffset{"
+                    + "OffsetXMm=" + mOffsetXMm + " +/-" + mOffsetXUncertaintyMm
+                    + ", OffsetYMm=" + mOffsetYMm + " +/-" + mOffsetYUncertaintyMm
+                    + ", OffsetZMm=" + mOffsetZMm + " +/-" + mOffsetZUncertaintyMm
+                    + '}';
+        }
+    }
+
+    /**
+     * Represents corrections on a spherical mapping. Corrections are added to measurements to
+     * obtain the corrected values.
+     *
+     * The corrections and associated (1-sigma) uncertainties are represented by respect 2D arrays.
+     *
+     * Each row (major indices) represents a fixed theta. The first row corresponds to a
+     * theta angle of 0 degrees. The last row corresponds to a theta angle of (360 - deltaTheta)
+     * degrees, where deltaTheta is the regular spacing between azimuthal angles, i.e., deltaTheta
+     * = 360 / (number of rows).
+     *
+     * The columns (minor indices) represent fixed zenith angles, beginning at 0 degrees and ending
+     * at 180 degrees. They are separated by deltaPhi, the regular spacing between zenith angles,
+     * i.e., deltaPhi = 180 / (number of columns - 1).
+     */
+    public static final class SphericalCorrections implements Parcelable{
+        private final double[][] mCorrections;
+        private final double[][] mCorrectionUncertainties;
+        private final double mDeltaTheta;
+        private final double mDeltaPhi;
+        private final int mNumRows;
+        private final int mNumColumns;
+
+        public SphericalCorrections(@NonNull double[][] corrections,
+                @NonNull double[][] correctionUncertainties) {
+            if (corrections.length != correctionUncertainties.length
+                    || corrections[0].length != correctionUncertainties[0].length) {
+                throw new IllegalArgumentException("Correction and correction uncertainty arrays "
+                        + "must have the same dimensions.");
+            }
+
+            mNumRows = corrections.length;
+            if (mNumRows < 1) {
+                throw new IllegalArgumentException("Arrays must have at least one row.");
+            }
+
+            mNumColumns = corrections[0].length;
+            if (mNumColumns < 2) {
+                throw new IllegalArgumentException("Arrays must have at least two columns.");
+            }
+
+            mCorrections = corrections;
+            mCorrectionUncertainties = correctionUncertainties;
+            mDeltaTheta = 360.0d / mNumRows;
+            mDeltaPhi = 180.0d / (mNumColumns - 1);
+        }
+
+        SphericalCorrections(Parcel in) {
+            int numRows = in.readInt();
+            int numColumns = in.readInt();
+
+            double[][] corrections =
+                    new double[numRows][numColumns];
+            double[][] correctionUncertainties =
+                    new double[numRows][numColumns];
+
+            for (int row = 0; row < numRows; row++) {
+                in.readDoubleArray(corrections[row]);
+            }
+
+            for (int row = 0; row < numRows; row++) {
+                in.readDoubleArray(correctionUncertainties[row]);
+            }
+
+            mNumRows = numRows;
+            mNumColumns = numColumns;
+            mCorrections = corrections;
+            mCorrectionUncertainties = correctionUncertainties;
+            mDeltaTheta = 360.0d / mNumRows;
+            mDeltaPhi = 180.0d / (mNumColumns - 1);
+        }
+
+        /**
+         * Array representing corrections on a spherical mapping. Corrections are added to
+         * measurements to obtain the corrected values.
+         *
+         * Each row (major indices) represents a fixed theta. The first row corresponds to a
+         * theta angle of 0 degrees. The last row corresponds to a theta angle of (360 - deltaTheta)
+         * degrees, where deltaTheta is the regular spacing between azimuthal angles, i.e.,
+         * deltaTheta = 360 / (number of rows).
+         *
+         * The columns (minor indices) represent fixed zenith angles, beginning at 0 degrees and
+         * ending at 180 degrees. They are separated by deltaPhi, the regular spacing between zenith
+         * angles, i.e., deltaPhi = 180 / (number of columns - 1).
+         */
+        @NonNull
+        public double[][] getCorrectionsArray() {
+            return mCorrections;
+        }
+
+        /**
+         * Array representing uncertainty on corrections on a spherical mapping.
+         *
+         * Each row (major indices) represents a fixed theta. The first row corresponds to a
+         * theta angle of 0 degrees. The last row corresponds to a theta angle of (360 - deltaTheta)
+         * degrees, where deltaTheta is the regular spacing between azimuthal angles, i.e.,
+         * deltaTheta = 360 / (number of rows).
+         *
+         * The columns (minor indices) represent fixed zenith angles, beginning at 0 degrees and
+         * ending at 180 degrees. They are separated by deltaPhi, the regular spacing between zenith
+         * angles, i.e., deltaPhi = 180 / (number of columns - 1).
+         */
+        @NonNull
+        public double[][] getCorrectionUncertaintiesArray() {
+            return mCorrectionUncertainties;
+        }
+
+        /**
+         * The fixed theta angle separation between successive rows.
+         */
+        @FloatRange(from = 0.0f, to = 360.0f)
+        public double getDeltaTheta() {
+            return mDeltaTheta;
+        }
+
+        /**
+         * The fixed phi angle separation between successive columns.
+         */
+        @FloatRange(from = 0.0f, to = 180.0f)
+        public double getDeltaPhi() {
+            return mDeltaPhi;
+        }
+
+
+        public static final @NonNull Creator<SphericalCorrections> CREATOR =
+                new Creator<SphericalCorrections>() {
+                    @Override
+                    public SphericalCorrections createFromParcel(Parcel in) {
+                        return new SphericalCorrections(in);
+                    }
+
+                    @Override
+                    public SphericalCorrections[] newArray(int size) {
+                        return new SphericalCorrections[size];
+                    }
+                };
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(@NonNull Parcel dest, int flags) {
+            dest.writeInt(mNumRows);
+            dest.writeInt(mNumColumns);
+            for (double[] row: mCorrections) {
+                dest.writeDoubleArray(row);
+            }
+            for (double[] row: mCorrectionUncertainties) {
+                dest.writeDoubleArray(row);
+            }
+        }
+
+        @Override
+        public String toString() {
+            return "SphericalCorrections{"
+                    + "Corrections=" + Arrays.toString(mCorrections)
+                    + ", CorrectionUncertainties=" + Arrays.toString(mCorrectionUncertainties)
+                    + ", DeltaTheta=" + mDeltaTheta
+                    + ", DeltaPhi=" + mDeltaPhi
+                    + '}';
+        }
+    }
+
+    private GnssAntennaInfo(
+            double carrierFrequencyMHz,
+            @NonNull PhaseCenterOffset phaseCenterOffset,
+            @Nullable SphericalCorrections phaseCenterVariationCorrections,
+            @Nullable SphericalCorrections signalGainCorrectionDbi) {
+        if (phaseCenterOffset == null) {
+            throw new IllegalArgumentException("Phase Center Offset Coordinates cannot be null.");
+        }
+        mCarrierFrequencyMHz = carrierFrequencyMHz;
+        mPhaseCenterOffset = phaseCenterOffset;
+        mPhaseCenterVariationCorrections = phaseCenterVariationCorrections;
+        mSignalGainCorrections = signalGainCorrectionDbi;
+    }
+
+    /**
+     * Builder class for GnssAntennaInfo.
+     */
+    public static class Builder {
+        private double mCarrierFrequencyMHz;
+        private PhaseCenterOffset mPhaseCenterOffset;
+        private SphericalCorrections mPhaseCenterVariationCorrections;
+        private SphericalCorrections mSignalGainCorrections;
+
+        /**
+         * Set antenna carrier frequency (MHz).
+         * @param carrierFrequencyMHz antenna carrier frequency (MHz)
+         * @return Builder builder object
+         */
+        @NonNull
+        public Builder setCarrierFrequencyMHz(@FloatRange(from = 0.0f) double carrierFrequencyMHz) {
+            mCarrierFrequencyMHz = carrierFrequencyMHz;
+            return this;
+        }
+
+        /**
+         * Set antenna phase center offset.
+         * @param phaseCenterOffset phase center offset object
+         * @return Builder builder object
+         */
+        @NonNull
+        public Builder setPhaseCenterOffset(@NonNull PhaseCenterOffset phaseCenterOffset) {
+            mPhaseCenterOffset = Objects.requireNonNull(phaseCenterOffset);
+            return this;
+        }
+
+        /**
+         * Set phase center variation corrections.
+         * @param phaseCenterVariationCorrections phase center variation corrections object
+         * @return Builder builder object
+         */
+        @NonNull
+        public Builder setPhaseCenterVariationCorrections(
+                @Nullable SphericalCorrections phaseCenterVariationCorrections) {
+            mPhaseCenterVariationCorrections = phaseCenterVariationCorrections;
+            return this;
+        }
+
+        /**
+         * Set signal gain corrections.
+         * @param signalGainCorrections signal gain corrections object
+         * @return Builder builder object
+         */
+        @NonNull
+        public Builder setSignalGainCorrections(
+                @Nullable SphericalCorrections signalGainCorrections) {
+            mSignalGainCorrections = signalGainCorrections;
+            return this;
+        }
+
+        /**
+         * Build GnssAntennaInfo object.
+         * @return instance of GnssAntennaInfo
+         */
+        @NonNull
+        public GnssAntennaInfo build() {
+            return new GnssAntennaInfo(mCarrierFrequencyMHz, mPhaseCenterOffset,
+                    mPhaseCenterVariationCorrections, mSignalGainCorrections);
+        }
+    }
+
+    @FloatRange(from = 0.0f)
+    public double getCarrierFrequencyMHz() {
+        return mCarrierFrequencyMHz;
+    }
+
+    @NonNull
+    public PhaseCenterOffset getPhaseCenterOffset() {
+        return mPhaseCenterOffset;
+    }
+
+    @Nullable
+    public SphericalCorrections getPhaseCenterVariationCorrections() {
+        return mPhaseCenterVariationCorrections;
+    }
+
+    @Nullable
+    public SphericalCorrections getSignalGainCorrections() {
+        return mSignalGainCorrections;
+    }
+
+    public static final @android.annotation.NonNull
+                    Creator<GnssAntennaInfo> CREATOR = new Creator<GnssAntennaInfo>() {
+                            @Override
+                            public GnssAntennaInfo createFromParcel(Parcel in) {
+                                double carrierFrequencyMHz = in.readDouble();
+
+                                ClassLoader classLoader = getClass().getClassLoader();
+                                PhaseCenterOffset phaseCenterOffset =
+                                        in.readParcelable(classLoader);
+                                SphericalCorrections phaseCenterVariationCorrections =
+                                        in.readParcelable(classLoader);
+                                SphericalCorrections signalGainCorrections =
+                                        in.readParcelable(classLoader);
+
+                                return new GnssAntennaInfo(
+                                            carrierFrequencyMHz,
+                                            phaseCenterOffset,
+                                            phaseCenterVariationCorrections,
+                                            signalGainCorrections);
+                            }
+
+                            @Override
+                            public GnssAntennaInfo[] newArray(int size) {
+                                return new GnssAntennaInfo[size];
+                            }
+                    };
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel parcel, int flags) {
+        parcel.writeDouble(mCarrierFrequencyMHz);
+        parcel.writeParcelable(mPhaseCenterOffset, flags);
+        parcel.writeParcelable(mPhaseCenterVariationCorrections, flags);
+        parcel.writeParcelable(mSignalGainCorrections, flags);
+    }
+
+    @Override
+    public String toString() {
+        return "GnssAntennaInfo{"
+                + "CarrierFrequencyMHz=" + mCarrierFrequencyMHz
+                + ", PhaseCenterOffset=" + mPhaseCenterOffset
+                + ", PhaseCenterVariationCorrections=" + mPhaseCenterVariationCorrections
+                + ", SignalGainCorrections=" + mSignalGainCorrections
+                + '}';
+    }
+}
diff --git a/location/java/android/location/GnssCapabilities.java b/location/java/android/location/GnssCapabilities.java
index 2e2f984..5734bf2 100644
--- a/location/java/android/location/GnssCapabilities.java
+++ b/location/java/android/location/GnssCapabilities.java
@@ -16,15 +16,11 @@
 
 package android.location;
 
-import android.annotation.NonNull;
 import android.annotation.SystemApi;
 
 /**
  * A container of supported GNSS chipset capabilities.
- *
- * @hide
  */
-@SystemApi
 public final class GnssCapabilities {
     /**
      * Bit mask indicating GNSS chipset supports low power mode.
@@ -82,6 +78,12 @@
      */
     public static final long MEASUREMENT_CORRECTIONS_REFLECTING_PLANE           = 1L << 8;
 
+    /**
+     * Bit mask indicating GNSS chipset supports GNSS antenna info.
+     * @hide
+     */
+    public static final long ANTENNA_INFO                                       = 1L << 9;
+
     /** @hide */
     public static final long INVALID_CAPABILITIES = -1;
 
@@ -99,7 +101,10 @@
 
     /**
      * Returns {@code true} if GNSS chipset supports low power mode, {@code false} otherwise.
+     *
+     * @hide
      */
+    @SystemApi
     public boolean hasLowPowerMode() {
         return hasCapability(LOW_POWER_MODE);
     }
@@ -107,28 +112,40 @@
     /**
      * Returns {@code true} if GNSS chipset supports blacklisting satellites, {@code false}
      * otherwise.
+     *
+     * @hide
      */
+    @SystemApi
     public boolean hasSatelliteBlacklist() {
         return hasCapability(SATELLITE_BLACKLIST);
     }
 
     /**
      * Returns {@code true} if GNSS chipset supports geofencing, {@code false} otherwise.
+     *
+     * @hide
      */
+    @SystemApi
     public boolean hasGeofencing() {
         return hasCapability(GEOFENCING);
     }
 
     /**
      * Returns {@code true} if GNSS chipset supports measurements, {@code false} otherwise.
+     *
+     * @hide
      */
+    @SystemApi
     public boolean hasMeasurements() {
         return hasCapability(MEASUREMENTS);
     }
 
     /**
      * Returns {@code true} if GNSS chipset supports navigation messages, {@code false} otherwise.
+     *
+     * @hide
      */
+    @SystemApi
     public boolean hasNavMessages() {
         return hasCapability(NAV_MESSAGES);
     }
@@ -136,7 +153,10 @@
     /**
      * Returns {@code true} if GNSS chipset supports measurement corrections, {@code false}
      * otherwise.
+     *
+     * @hide
      */
+    @SystemApi
     public boolean hasMeasurementCorrections() {
         return hasCapability(MEASUREMENT_CORRECTIONS);
     }
@@ -144,7 +164,10 @@
     /**
      * Returns {@code true} if GNSS chipset supports line-of-sight satellite identification
      * measurement corrections, {@code false} otherwise.
+     *
+     * @hide
      */
+    @SystemApi
     public boolean hasMeasurementCorrectionsLosSats() {
         return hasCapability(MEASUREMENT_CORRECTIONS_LOS_SATS);
     }
@@ -152,7 +175,10 @@
     /**
      * Returns {@code true} if GNSS chipset supports per satellite excess-path-length measurement
      * corrections, {@code false} otherwise.
+     *
+     * @hide
      */
+    @SystemApi
     public boolean hasMeasurementCorrectionsExcessPathLength() {
         return hasCapability(MEASUREMENT_CORRECTIONS_EXCESS_PATH_LENGTH);
     }
@@ -160,30 +186,19 @@
     /**
      * Returns {@code true} if GNSS chipset supports reflecting planes measurement corrections,
      * {@code false} otherwise.
+     *
+     * @hide
      */
+    @SystemApi
     public boolean hasMeasurementCorrectionsReflectingPane() {
         return hasCapability(MEASUREMENT_CORRECTIONS_REFLECTING_PLANE);
     }
 
-    @NonNull
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder("GnssCapabilities: ( ");
-        if (hasLowPowerMode()) sb.append("LOW_POWER_MODE ");
-        if (hasSatelliteBlacklist()) sb.append("SATELLITE_BLACKLIST ");
-        if (hasGeofencing()) sb.append("GEOFENCING ");
-        if (hasMeasurements()) sb.append("MEASUREMENTS ");
-        if (hasNavMessages()) sb.append("NAV_MESSAGES ");
-        if (hasMeasurementCorrections()) sb.append("MEASUREMENT_CORRECTIONS ");
-        if (hasMeasurementCorrectionsLosSats()) sb.append("MEASUREMENT_CORRECTIONS_LOS_SATS ");
-        if (hasMeasurementCorrectionsExcessPathLength()) {
-            sb.append("MEASUREMENT_CORRECTIONS_EXCESS_PATH_LENGTH ");
-        }
-        if (hasMeasurementCorrectionsReflectingPane()) {
-            sb.append("MEASUREMENT_CORRECTIONS_REFLECTING_PLANE ");
-        }
-        sb.append(")");
-        return sb.toString();
+    /**
+     * Returns {@code true} if GNSS chipset supports antenna info, {@code false} otherwise.
+     */
+    public boolean hasGnssAntennaInfo() {
+        return hasCapability(ANTENNA_INFO);
     }
 
     private boolean hasCapability(long capability) {
diff --git a/location/java/android/location/GnssMeasurementCorrections.java b/location/java/android/location/GnssMeasurementCorrections.java
index 19c3992..ffbe11a 100644
--- a/location/java/android/location/GnssMeasurementCorrections.java
+++ b/location/java/android/location/GnssMeasurementCorrections.java
@@ -179,6 +179,10 @@
      * Gets the environment bearing in degrees clockwise from true north, in the direction of user
      * motion. Environment bearing is provided when it is known with high probability that
      * velocity is aligned with an environment feature (such as edge of a building, or road).
+     *
+     * {@link #hasEnvironmentBearing} should be called to check the environment bearing is available
+     * before calling this method. The value is undefined if {@link #hasEnvironmentBearing} returns
+     * false.
      */
     @FloatRange(from = 0.0f, to = 360.0f)
     public float getEnvironmentBearingDegrees() {
@@ -186,7 +190,15 @@
     }
 
     /**
-     * Gets the environment bearing uncertainty in degrees.
+     * Gets the environment bearing uncertainty in degrees. It represents the standard deviation of
+     * the physical structure in the circle of position uncertainty. The uncertainty can take values
+     * between 0 and 180 degrees. The {@link #hasEnvironmentBearing} becomes false as the
+     * uncertainty value passes a predefined threshold depending on the physical structure around
+     * the user.
+     *
+     * {@link #hasEnvironmentBearing} should be called to check the environment bearing is available
+     * before calling this method. The value is undefined if {@link #hasEnvironmentBearing} returns
+     * false.
      */
     @FloatRange(from = 0.0f, to = 180.0f)
     public float getEnvironmentBearingUncertaintyDegrees() {
@@ -358,6 +370,8 @@
          * user motion. Environment bearing is provided when it is known with high probability
          * that velocity is aligned with an environment feature (such as edge of a building, or
          * road).
+         *
+         * Both the bearing and uncertainty must be set for the environment bearing to be valid.
          */
         @NonNull public Builder setEnvironmentBearingDegrees(
                 @FloatRange(from = 0.0f, to = 360.0f)
@@ -369,6 +383,8 @@
 
         /**
          * Sets the environment bearing uncertainty in degrees.
+         *
+         * Both the bearing and uncertainty must be set for the environment bearing to be valid.
          */
         @NonNull public Builder setEnvironmentBearingUncertaintyDegrees(
                 @FloatRange(from = 0.0f, to = 180.0f)
diff --git a/location/java/android/location/GnssRequest.aidl b/location/java/android/location/GnssRequest.aidl
new file mode 100644
index 0000000..581abcc
--- /dev/null
+++ b/location/java/android/location/GnssRequest.aidl
@@ -0,0 +1,22 @@
+/*
+ * 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.location;
+
+/**
+ * @hide
+ */
+parcelable GnssRequest;
diff --git a/location/java/android/location/GnssRequest.java b/location/java/android/location/GnssRequest.java
new file mode 100644
index 0000000..2afb265
--- /dev/null
+++ b/location/java/android/location/GnssRequest.java
@@ -0,0 +1,147 @@
+/*
+ * 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.location;
+
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * This class contains extra parameters to pass to a GNSS provider implementation.
+ * @hide
+ */
+@SystemApi
+public final class GnssRequest implements Parcelable {
+    private final boolean mFullTracking;
+
+    /**
+     * Creates a {@link GnssRequest} with a full list of parameters.
+     */
+    private GnssRequest(boolean fullTracking) {
+        mFullTracking = fullTracking;
+    }
+
+    /**
+     * Represents whether to enable full GNSS tracking.
+     *
+     * <p>If true, GNSS chipset switches off duty cycling. In such a mode, no clock
+     * discontinuities are expected, and when supported, carrier phase should be continuous in
+     * good signal conditions. All non-blacklisted, healthy constellations, satellites and
+     * frequency bands that the chipset supports must be reported in this mode. The GNSS chipset
+     * is allowed to consume more power in this mode. If false, GNSS chipset optimizes power via
+     * duty cycling, constellations and frequency limits, etc.
+     */
+    public boolean isFullTracking() {
+        return mFullTracking;
+    }
+
+    @NonNull
+    public static final Creator<GnssRequest> CREATOR =
+            new Creator<GnssRequest>() {
+                @Override
+                @NonNull
+                public GnssRequest createFromParcel(@NonNull Parcel parcel) {
+                    return new GnssRequest(parcel.readBoolean());
+                }
+
+                @Override
+                public GnssRequest[] newArray(int i) {
+                    return new GnssRequest[i];
+                }
+            };
+
+    @NonNull
+    @Override
+    public String toString() {
+        StringBuilder s = new StringBuilder();
+        s.append("GnssRequest[");
+        s.append("FullTracking=").append(mFullTracking);
+        s.append(']');
+        return s.toString();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) return true;
+        if (obj == null) return false;
+        if (!(obj instanceof GnssRequest)) return false;
+
+        GnssRequest other = (GnssRequest) obj;
+        if (mFullTracking != other.mFullTracking) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        return mFullTracking ? 1 : 0;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel parcel, int flags) {
+        parcel.writeBoolean(mFullTracking);
+    }
+
+    /** Builder for {@link GnssRequest} */
+    public static final class Builder {
+        private boolean mFullTracking;
+
+        /**
+         * Constructs a {@link Builder} instance.
+         */
+        public Builder() {
+        }
+
+        /**
+         * Constructs a {@link Builder} instance by copying a {@link GnssRequest}.
+         */
+        public Builder(@NonNull GnssRequest request) {
+            mFullTracking = request.isFullTracking();
+        }
+
+        /**
+         * Set the value of whether to enable full GNSS tracking, which is false by default.
+         *
+         * <p>If true, GNSS chipset switches off duty cycling. In such a mode, no clock
+         * discontinuities are expected, and when supported, carrier phase should be continuous in
+         * good signal conditions. All non-blacklisted, healthy constellations, satellites and
+         * frequency bands that the chipset supports must be reported in this mode. The GNSS chipset
+         * is allowed to consume more power in this mode. If false, GNSS chipset optimizes power via
+         * duty cycling, constellations and frequency limits, etc.
+         *
+         * <p>Full tracking requests always override non-full tracking requests. If any full
+         * tracking request occurs, all listeners on the device will receive full tracking GNSS
+         * measurements.
+         */
+        @NonNull public Builder setFullTracking(boolean value) {
+            mFullTracking = value;
+            return this;
+        }
+
+        /** Builds a {@link GnssRequest} instance as specified by this builder. */
+        @NonNull
+        public GnssRequest build() {
+            return new GnssRequest(mFullTracking);
+        }
+    }
+}
diff --git a/location/java/android/location/GnssStatus.java b/location/java/android/location/GnssStatus.java
index f17fa39..4d01cdc 100644
--- a/location/java/android/location/GnssStatus.java
+++ b/location/java/android/location/GnssStatus.java
@@ -24,6 +24,8 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Objects;
 
 /**
  * This class represents the current state of the GNSS engine and is used in conjunction with
@@ -339,6 +341,33 @@
         }
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof GnssStatus)) {
+            return false;
+        }
+
+        GnssStatus that = (GnssStatus) o;
+        return mSvCount == that.mSvCount
+                && Arrays.equals(mSvidWithFlags, that.mSvidWithFlags)
+                && Arrays.equals(mCn0DbHzs, that.mCn0DbHzs)
+                && Arrays.equals(mElevations, that.mElevations)
+                && Arrays.equals(mAzimuths, that.mAzimuths)
+                && Arrays.equals(mCarrierFrequencies, that.mCarrierFrequencies)
+                && Arrays.equals(mBasebandCn0DbHzs, that.mBasebandCn0DbHzs);
+    }
+
+    @Override
+    public int hashCode() {
+        int result = Objects.hash(mSvCount);
+        result = 31 * result + Arrays.hashCode(mSvidWithFlags);
+        result = 31 * result + Arrays.hashCode(mCn0DbHzs);
+        return result;
+    }
+
     /**
      * Builder class to help create new GnssStatus instances.
      */
@@ -451,8 +480,8 @@
             mCn0DbHz = cn0DbHz;
             mElevation = elevation;
             mAzimuth = azimuth;
-            mCarrierFrequency = carrierFrequency;
-            mBasebandCn0DbHz = basebandCn0DbHz;
+            mCarrierFrequency = hasCarrierFrequency ? carrierFrequency : 0;
+            mBasebandCn0DbHz = hasBasebandCn0DbHz ? basebandCn0DbHz : 0;
         }
     }
 }
diff --git a/location/java/android/location/GpsClock.java b/location/java/android/location/GpsClock.java
index f123766..58af6ee 100644
--- a/location/java/android/location/GpsClock.java
+++ b/location/java/android/location/GpsClock.java
@@ -25,8 +25,11 @@
  * A class containing a GPS clock timestamp.
  * It represents a measurement of the GPS receiver's clock.
  *
+ * @deprecated use {@link GnssClock} instead.
+ *
  * @hide
  */
+@Deprecated
 @SystemApi
 public class GpsClock implements Parcelable {
 
diff --git a/location/java/android/location/GpsMeasurement.java b/location/java/android/location/GpsMeasurement.java
index 27a8189..c2ab4ab 100644
--- a/location/java/android/location/GpsMeasurement.java
+++ b/location/java/android/location/GpsMeasurement.java
@@ -24,8 +24,11 @@
 /**
  * A class representing a GPS satellite measurement, containing raw and computed information.
  *
+ * @deprecated use {@link GnssMeasurement} instead.
+ *
  * @hide
  */
+@Deprecated
 @SystemApi
 public class GpsMeasurement implements Parcelable {
     private int mFlags;
diff --git a/location/java/android/location/GpsMeasurementsEvent.java b/location/java/android/location/GpsMeasurementsEvent.java
index d69158d..f3feb7a 100644
--- a/location/java/android/location/GpsMeasurementsEvent.java
+++ b/location/java/android/location/GpsMeasurementsEvent.java
@@ -30,8 +30,11 @@
  * A class implementing a container for data associated with a measurement event.
  * Events are delivered to registered instances of {@link Listener}.
  *
+ * @deprecated use {@link GnssMeasurementsEvent} instead.
+ *
  * @hide
  */
+@Deprecated
 @SystemApi
 public class GpsMeasurementsEvent implements Parcelable {
 
diff --git a/location/java/android/location/GpsNavigationMessage.java b/location/java/android/location/GpsNavigationMessage.java
index 6eeea26..dc1e99f 100644
--- a/location/java/android/location/GpsNavigationMessage.java
+++ b/location/java/android/location/GpsNavigationMessage.java
@@ -26,8 +26,11 @@
 /**
  * A class containing a GPS satellite Navigation Message.
  *
+ * @deprecated use {@link GnssNavigationMessage} instead.
+ *
  * @hide
  */
+@Deprecated
 @SystemApi
 public class GpsNavigationMessage implements Parcelable {
 
diff --git a/location/java/android/location/GpsNavigationMessageEvent.java b/location/java/android/location/GpsNavigationMessageEvent.java
index f60e5c7..2d5d6eb 100644
--- a/location/java/android/location/GpsNavigationMessageEvent.java
+++ b/location/java/android/location/GpsNavigationMessageEvent.java
@@ -27,8 +27,11 @@
  * A class implementing a container for data associated with a navigation message event.
  * Events are delivered to registered instances of {@link Listener}.
  *
+ * @deprecated use {@link GnssNavigationMessage} instead.
+ *
  * @hide
  */
+@Deprecated
 @SystemApi
 public class GpsNavigationMessageEvent implements Parcelable {
 
diff --git a/location/java/android/location/IGnssAntennaInfoListener.aidl b/location/java/android/location/IGnssAntennaInfoListener.aidl
new file mode 100644
index 0000000..603ed6a
--- /dev/null
+++ b/location/java/android/location/IGnssAntennaInfoListener.aidl
@@ -0,0 +1,26 @@
+/*
+ * 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.location;
+
+import android.location.GnssAntennaInfo;
+
+/**
+ * {@hide}
+ */
+oneway interface IGnssAntennaInfoListener {
+    void onGnssAntennaInfoReceived(in List<GnssAntennaInfo> gnssAntennaInfo);
+}
\ No newline at end of file
diff --git a/location/java/android/location/ILocationManager.aidl b/location/java/android/location/ILocationManager.aidl
index 6a5c0ec..8600dc4 100644
--- a/location/java/android/location/ILocationManager.aidl
+++ b/location/java/android/location/ILocationManager.aidl
@@ -22,7 +22,9 @@
 import android.location.GeocoderParams;
 import android.location.Geofence;
 import android.location.GnssMeasurementCorrections;
+import android.location.GnssRequest;
 import android.location.IBatchedLocationCallback;
+import android.location.IGnssAntennaInfoListener;
 import android.location.IGnssMeasurementsListener;
 import android.location.IGnssStatusListener;
 import android.location.IGnssNavigationMessageListener;
@@ -69,13 +71,19 @@
         double upperRightLatitude, double upperRightLongitude, int maxResults,
         in GeocoderParams params, out List<Address> addrs);
 
-    boolean addGnssMeasurementsListener(in IGnssMeasurementsListener listener,
-             String packageName, String featureId, String listenerIdentifier);
+    boolean addGnssMeasurementsListener(in GnssRequest request,
+            in IGnssMeasurementsListener listener,
+            String packageName, String featureId,
+            String listenerIdentifier);
     void injectGnssMeasurementCorrections(in GnssMeasurementCorrections corrections,
             in String packageName);
     long getGnssCapabilities(in String packageName);
     void removeGnssMeasurementsListener(in IGnssMeasurementsListener listener);
 
+    boolean addGnssAntennaInfoListener(in IGnssAntennaInfoListener listener,
+             String packageName, String featureId, String listenerIdentifier);
+    void removeGnssAntennaInfoListener(in IGnssAntennaInfoListener listener);
+
     boolean addGnssNavigationMessageListener(in IGnssNavigationMessageListener listener,
              String packageName, String featureId, String listenerIdentifier);
     void removeGnssNavigationMessageListener(in IGnssNavigationMessageListener listener);
@@ -90,7 +98,7 @@
     boolean startGnssBatch(long periodNanos, boolean wakeOnFifoFull, String packageName);
     void flushGnssBatch(String packageName);
     boolean stopGnssBatch();
-    boolean injectLocation(in Location location);
+    void injectLocation(in Location location);
 
     @UnsupportedAppUsage
     List<String> getAllProviders();
@@ -107,6 +115,7 @@
 
     boolean isProviderEnabledForUser(String provider, int userId);
     boolean isLocationEnabledForUser(int userId);
+    void setLocationEnabledForUser(boolean enabled, int userId);
     void addTestProvider(String name, in ProviderProperties properties, String opPackageName);
     void removeTestProvider(String provider, String opPackageName);
     void setTestProviderLocation(String provider, in Location loc, String opPackageName);
diff --git a/location/java/android/location/Location.java b/location/java/android/location/Location.java
index eb76c29..6724324 100644
--- a/location/java/android/location/Location.java
+++ b/location/java/android/location/Location.java
@@ -64,23 +64,18 @@
     public static final int FORMAT_SECONDS = 2;
 
     /**
-     * Bundle key for a version of the location that has been fed through
-     * LocationFudger. Allows location providers to flag locations as being
-     * safe for use with ACCESS_COARSE_LOCATION permission.
-     *
-     * @hide
-     */
-    public static final String EXTRA_COARSE_LOCATION = "coarseLocation";
-
-    /**
      * Bundle key for a version of the location containing no GPS data.
      * Allows location providers to flag locations as being safe to
      * feed to LocationFudger.
      *
      * @hide
+     * @deprecated As of Android R, this extra is longer in use, since it is not necessary to keep
+     * gps locations separate from other locations for coarsening. Providers that do not need to
+     * support platforms below Android R should not use this constant.
      */
     @TestApi
     @SystemApi
+    @Deprecated
     public static final String EXTRA_NO_GPS_LOCATION = "noGPSLocation";
 
     /**
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 197787e..19085bf 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -22,6 +22,8 @@
 import static android.Manifest.permission.WRITE_SECURE_SETTINGS;
 import static android.app.AlarmManager.ELAPSED_REALTIME;
 
+import static com.android.internal.util.function.pooled.PooledLambda.obtainRunnable;
+
 import android.Manifest;
 import android.annotation.CallbackExecutor;
 import android.annotation.NonNull;
@@ -33,6 +35,9 @@
 import android.annotation.TestApi;
 import android.app.AlarmManager;
 import android.app.PendingIntent;
+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.pm.PackageManager;
@@ -50,11 +55,11 @@
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.ArrayMap;
-import android.util.Log;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.location.ProviderProperties;
 import com.android.internal.util.Preconditions;
+import com.android.internal.util.function.pooled.PooledRunnable;
 
 import java.util.Collections;
 import java.util.List;
@@ -79,7 +84,35 @@
 @RequiresFeature(PackageManager.FEATURE_LOCATION)
 public class LocationManager {
 
-    private static final String TAG = "LocationManager";
+    /**
+     * For apps targeting Android K and above, supplied {@link PendingIntent}s must be targeted to a
+     * specific package.
+     *
+     * @hide
+     */
+    @ChangeId
+    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
+    private static final long TARGETED_PENDING_INTENT = 148963590L;
+
+    /**
+     * For apps targeting Android K and above, incomplete locations may not be passed to
+     * {@link #setTestProviderLocation}.
+     *
+     * @hide
+     */
+    @ChangeId
+    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
+    private static final long INCOMPLETE_LOCATION = 148964793L;
+
+    /**
+     * For apps targeting Android S and above, all {@link GpsStatus} API usage must be replaced with
+     * {@link GnssStatus} APIs.
+     *
+     * @hide
+     */
+    @ChangeId
+    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.R)
+    private static final long GPS_STATUS_USAGE = 144027538L;
 
     /**
      * Name of the network location provider.
@@ -219,7 +252,7 @@
      * @hide
      */
     public static final String HIGH_POWER_REQUEST_CHANGE_ACTION =
-        "android.location.HIGH_POWER_REQUEST_CHANGE";
+            "android.location.HIGH_POWER_REQUEST_CHANGE";
 
     /**
      * Broadcast intent action for Settings app to inject a footer at the bottom of location
@@ -278,6 +311,8 @@
             new GnssMeasurementsListenerManager();
     private final GnssNavigationMessageListenerManager mGnssNavigationMessageListenerTransport =
             new GnssNavigationMessageListenerManager();
+    private final GnssAntennaInfoListenerManager mGnssAntennaInfoListenerManager =
+            new GnssAntennaInfoListenerManager();
 
     /**
      * @hide
@@ -446,13 +481,11 @@
     @TestApi
     @RequiresPermission(WRITE_SECURE_SETTINGS)
     public void setLocationEnabledForUser(boolean enabled, @NonNull UserHandle userHandle) {
-        Settings.Secure.putIntForUser(
-                mContext.getContentResolver(),
-                Settings.Secure.LOCATION_MODE,
-                enabled
-                        ? Settings.Secure.LOCATION_MODE_ON
-                        : Settings.Secure.LOCATION_MODE_OFF,
-                userHandle.getIdentifier());
+        try {
+            mService.setLocationEnabledForUser(enabled, userHandle.getIdentifier());
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
     }
 
     /**
@@ -771,7 +804,6 @@
     public void requestSingleUpdate(@NonNull String provider,
             @NonNull PendingIntent pendingIntent) {
         Preconditions.checkArgument(provider != null, "invalid null provider");
-        checkPendingIntent(pendingIntent);
 
         LocationRequest request = LocationRequest.createFromDeprecatedProvider(
                 provider, 0, 0, true);
@@ -800,7 +832,6 @@
     public void requestSingleUpdate(@NonNull Criteria criteria,
             @NonNull PendingIntent pendingIntent) {
         Preconditions.checkArgument(criteria != null, "invalid null criteria");
-        checkPendingIntent(pendingIntent);
 
         LocationRequest request = LocationRequest.createFromDeprecatedCriteria(
                 criteria, 0, 0, true);
@@ -1021,7 +1052,6 @@
     public void requestLocationUpdates(@NonNull String provider, long minTimeMs, float minDistanceM,
             @NonNull PendingIntent pendingIntent) {
         Preconditions.checkArgument(provider != null, "invalid null provider");
-        checkPendingIntent(pendingIntent);
 
         LocationRequest request = LocationRequest.createFromDeprecatedProvider(
                 provider, minTimeMs, minDistanceM, false);
@@ -1048,7 +1078,6 @@
     public void requestLocationUpdates(long minTimeMs, float minDistanceM,
             @NonNull Criteria criteria, @NonNull PendingIntent pendingIntent) {
         Preconditions.checkArgument(criteria != null, "invalid null criteria");
-        checkPendingIntent(pendingIntent);
 
         LocationRequest request = LocationRequest.createFromDeprecatedCriteria(
                 criteria, minTimeMs, minDistanceM, false);
@@ -1164,9 +1193,9 @@
             @NonNull PendingIntent pendingIntent) {
         Preconditions.checkArgument(locationRequest != null, "invalid null location request");
         Preconditions.checkArgument(pendingIntent != null, "invalid null pending intent");
-        if (mContext.getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.JELLY_BEAN) {
+        if (Compatibility.isChangeEnabled(TARGETED_PENDING_INTENT)) {
             Preconditions.checkArgument(pendingIntent.isTargetedToPackage(),
-                    "pending intent must be targeted to package");
+                    "pending intent must be targeted to a package");
         }
 
         try {
@@ -1189,7 +1218,7 @@
      * the first fix.
      *
      * @param location newly available {@link Location} object
-     * @return true if the location was successfully injected, false otherwise
+     * @return true if the location was injected, false otherwise
      *
      * @throws IllegalArgumentException if location is null
      * @throws SecurityException if permissions are not present
@@ -1198,18 +1227,13 @@
      */
     @RequiresPermission(allOf = {LOCATION_HARDWARE, ACCESS_FINE_LOCATION})
     public boolean injectLocation(@NonNull Location location) {
-        if (location == null) {
-            IllegalArgumentException e = new IllegalArgumentException("invalid null location");
-            if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.R) {
-                throw e;
-            } else {
-                Log.w(TAG, e);
-                return false;
-            }
-        }
+        Preconditions.checkArgument(location != null, "invalid null location");
+        Preconditions.checkArgument(location.isComplete(),
+                "incomplete location object, missing timestamp or accuracy?");
 
         try {
-            return mService.injectLocation(location);
+            mService.injectLocation(location);
+            return true;
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -1487,15 +1511,11 @@
         Preconditions.checkArgument(provider != null, "invalid null provider");
         Preconditions.checkArgument(location != null, "invalid null location");
 
-        if (!location.isComplete()) {
-            IllegalArgumentException e = new IllegalArgumentException(
-                    "Incomplete location object, missing timestamp or accuracy? " + location);
-            if (mContext.getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.JELLY_BEAN) {
-                Log.w(TAG, e);
-                location.makeComplete();
-            } else {
-                throw e;
-            }
+        if (Compatibility.isChangeEnabled(INCOMPLETE_LOCATION)) {
+            Preconditions.checkArgument(location.isComplete(),
+                    "incomplete location object, missing timestamp or accuracy?");
+        } else {
+            location.makeComplete();
         }
 
         try {
@@ -1629,7 +1649,11 @@
     @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void addProximityAlert(double latitude, double longitude, float radius, long expiration,
             @NonNull PendingIntent intent) {
-        checkPendingIntent(intent);
+        Preconditions.checkArgument(intent != null, "invalid null pending intent");
+        if (Compatibility.isChangeEnabled(TARGETED_PENDING_INTENT)) {
+            Preconditions.checkArgument(intent.isTargetedToPackage(),
+                    "pending intent must be targeted to a package");
+        }
         if (expiration < 0) expiration = Long.MAX_VALUE;
 
         Geofence fence = Geofence.createCircle(latitude, longitude, radius);
@@ -1659,7 +1683,11 @@
      * permission is not present
      */
     public void removeProximityAlert(@NonNull PendingIntent intent) {
-        checkPendingIntent(intent);
+        Preconditions.checkArgument(intent != null, "invalid null pending intent");
+        if (Compatibility.isChangeEnabled(TARGETED_PENDING_INTENT)) {
+            Preconditions.checkArgument(intent.isTargetedToPackage(),
+                    "pending intent must be targeted to a package");
+        }
 
         try {
             mService.removeGeofence(null, intent, mContext.getPackageName());
@@ -1709,8 +1737,13 @@
             @NonNull LocationRequest request,
             @NonNull Geofence fence,
             @NonNull PendingIntent intent) {
-        checkPendingIntent(intent);
+        Preconditions.checkArgument(request != null, "invalid null location request");
         Preconditions.checkArgument(fence != null, "invalid null geofence");
+        Preconditions.checkArgument(intent != null, "invalid null pending intent");
+        if (Compatibility.isChangeEnabled(TARGETED_PENDING_INTENT)) {
+            Preconditions.checkArgument(intent.isTargetedToPackage(),
+                    "pending intent must be targeted to a package");
+        }
 
         try {
             mService.requestGeofence(request, fence, intent, mContext.getPackageName(),
@@ -1737,8 +1770,12 @@
      * @hide
      */
     public void removeGeofence(@NonNull Geofence fence, @NonNull PendingIntent intent) {
-        checkPendingIntent(intent);
         Preconditions.checkArgument(fence != null, "invalid null geofence");
+        Preconditions.checkArgument(intent != null, "invalid null pending intent");
+        if (Compatibility.isChangeEnabled(TARGETED_PENDING_INTENT)) {
+            Preconditions.checkArgument(intent.isTargetedToPackage(),
+                    "pending intent must be targeted to a package");
+        }
 
         try {
             mService.removeGeofence(fence, intent, mContext.getPackageName());
@@ -1759,7 +1796,11 @@
      * @hide
      */
     public void removeAllGeofences(@NonNull PendingIntent intent) {
-        checkPendingIntent(intent);
+        Preconditions.checkArgument(intent != null, "invalid null pending intent");
+        if (Compatibility.isChangeEnabled(TARGETED_PENDING_INTENT)) {
+            Preconditions.checkArgument(intent.isTargetedToPackage(),
+                    "pending intent must be targeted to a package");
+        }
 
         try {
             mService.removeGeofence(null, intent, mContext.getPackageName());
@@ -1772,13 +1813,7 @@
 
     /**
      * Returns the supported capabilities of the GNSS chipset.
-     *
-     * @throws SecurityException if the ACCESS_FINE_LOCATION permission is not present.
-     *
-     * @hide
      */
-    @SystemApi
-    @RequiresPermission(ACCESS_FINE_LOCATION)
     public @NonNull GnssCapabilities getGnssCapabilities() {
         try {
             long gnssCapabilities = mService.getGnssCapabilities(mContext.getPackageName());
@@ -1833,14 +1868,15 @@
      * @param status object containing GPS status details, or null.
      * @return status object containing updated GPS status.
      *
-     * @deprecated GpsStatus APIs are deprecated, use {@link GnssStatus} APIs instead.
+     * @deprecated GpsStatus APIs are deprecated, use {@link GnssStatus} APIs instead. No longer
+     * supported in apps targeting S and above.
      */
     @Deprecated
     @RequiresPermission(ACCESS_FINE_LOCATION)
     public @Nullable GpsStatus getGpsStatus(@Nullable GpsStatus status) {
-        if (mContext.getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.R) {
+        if (Compatibility.isChangeEnabled(GPS_STATUS_USAGE)) {
             throw new UnsupportedOperationException(
-                    "GpsStatus APIs not supported in S and above, use GnssStatus APIs instead");
+                    "GpsStatus APIs not supported, please use GnssStatus APIs instead");
         }
 
         GnssStatus gnssStatus = mGnssStatusListenerManager.getGnssStatus();
@@ -1863,17 +1899,14 @@
      * @throws SecurityException if the ACCESS_FINE_LOCATION permission is not present
      *
      * @deprecated use {@link #registerGnssStatusCallback(GnssStatus.Callback)} instead. No longer
-     * supported in apps targeting R and above.
+     * supported in apps targeting S and above.
      */
     @Deprecated
     @RequiresPermission(ACCESS_FINE_LOCATION)
     public boolean addGpsStatusListener(GpsStatus.Listener listener) {
-        UnsupportedOperationException ex = new UnsupportedOperationException(
-                "GpsStatus APIs not supported in S and above, use GnssStatus APIs instead");
-        if (mContext.getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.R) {
-            throw ex;
-        } else {
-            Log.w(TAG, ex);
+        if (Compatibility.isChangeEnabled(GPS_STATUS_USAGE)) {
+            throw new UnsupportedOperationException(
+                    "GpsStatus APIs not supported, please use GnssStatus APIs instead");
         }
 
         try {
@@ -1889,16 +1922,13 @@
      * @param listener GPS status listener object to remove
      *
      * @deprecated use {@link #unregisterGnssStatusCallback(GnssStatus.Callback)} instead. No longer
-     * supported in apps targeting R and above.
+     * supported in apps targeting S and above.
      */
     @Deprecated
     public void removeGpsStatusListener(GpsStatus.Listener listener) {
-        UnsupportedOperationException ex = new UnsupportedOperationException(
-                "GpsStatus APIs not supported in S and above, use GnssStatus APIs instead");
-        if (mContext.getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.R) {
-            throw ex;
-        } else {
-            Log.w(TAG, ex);
+        if (Compatibility.isChangeEnabled(GPS_STATUS_USAGE)) {
+            throw new UnsupportedOperationException(
+                    "GpsStatus APIs not supported, please use GnssStatus APIs instead");
         }
 
         try {
@@ -2162,6 +2192,35 @@
     }
 
     /**
+     * Registers a GNSS Measurement callback.
+     *
+     * @param request  extra parameters to pass to GNSS measurement provider. For example, if {@link
+     *                 GnssRequest#isFullTracking()} is true, GNSS chipset switches off duty
+     *                 cycling.
+     * @param executor the executor that the callback runs on.
+     * @param callback a {@link GnssMeasurementsEvent.Callback} object to register.
+     * @return {@code true} if the callback was added successfully, {@code false} otherwise.
+     * @throws IllegalArgumentException if request is null
+     * @throws IllegalArgumentException if executor is null
+     * @throws IllegalArgumentException if callback is null
+     * @throws SecurityException        if the ACCESS_FINE_LOCATION permission is not present
+     * @hide
+     */
+    @SystemApi
+    @RequiresPermission(allOf = {ACCESS_FINE_LOCATION, LOCATION_HARDWARE})
+    public boolean registerGnssMeasurementsCallback(
+            @NonNull GnssRequest request,
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull GnssMeasurementsEvent.Callback callback) {
+        Preconditions.checkArgument(request != null, "invalid null request");
+        try {
+            return mGnssMeasurementsListenerManager.addListener(request, callback, executor);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Injects GNSS measurement corrections into the GNSS chipset.
      *
      * @param measurementCorrections a {@link GnssMeasurementCorrections} object with the GNSS
@@ -2199,6 +2258,42 @@
     }
 
     /**
+     * Registers a Gnss Antenna Info listener. Only expect results if
+     * {@link GnssCapabilities#hasGnssAntennaInfo()} shows that antenna info is supported.
+     *
+     * @param executor the executor that the listener runs on.
+     * @param listener a {@link GnssAntennaInfo.Listener} object to register.
+     * @return {@code true} if the listener was added successfully, {@code false} otherwise.
+     *
+     * @throws IllegalArgumentException if executor is null
+     * @throws IllegalArgumentException if listener is null
+     * @throws SecurityException if the ACCESS_FINE_LOCATION permission is not present
+     */
+    @RequiresPermission(ACCESS_FINE_LOCATION)
+    public boolean registerAntennaInfoListener(
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull GnssAntennaInfo.Listener listener) {
+        try {
+            return mGnssAntennaInfoListenerManager.addListener(listener, executor);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Unregisters a GNSS Antenna Info listener.
+     *
+     * @param listener a {@link GnssAntennaInfo.Listener} object to remove.
+     */
+    public void unregisterAntennaInfoListener(@NonNull GnssAntennaInfo.Listener listener) {
+        try {
+            mGnssAntennaInfoListenerManager.removeListener(listener);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * No-op method to keep backward-compatibility.
      *
      * @hide
@@ -2397,19 +2492,6 @@
         }
     }
 
-    private void checkPendingIntent(PendingIntent pendingIntent) {
-        Preconditions.checkArgument(pendingIntent != null, "invalid null pending intent");
-        if (!pendingIntent.isTargetedToPackage()) {
-            IllegalArgumentException e = new IllegalArgumentException(
-                    "invalid pending intent - must be targeted to package");
-            if (mContext.getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.JELLY_BEAN) {
-                throw e;
-            } else {
-                Log.w(TAG, e);
-            }
-        }
-    }
-
     private static class GetCurrentLocationTransport extends ILocationListener.Stub implements
             AlarmManager.OnAlarmListener {
 
@@ -2518,18 +2600,28 @@
                 return;
             }
 
-            mExecutor.execute(() -> {
-                Consumer<Location> consumer;
-                synchronized (GetCurrentLocationTransport.this) {
-                    if (mConsumer == null) {
-                        return;
-                    }
-                    consumer = mConsumer;
-                    cancel();
-                }
+            PooledRunnable runnable =
+                    obtainRunnable(GetCurrentLocationTransport::acceptResult, this, location)
+                            .recycleOnUse();
+            try {
+                mExecutor.execute(runnable);
+            } catch (RejectedExecutionException e) {
+                runnable.recycle();
+                throw e;
+            }
+        }
 
-                consumer.accept(location);
-            });
+        private void acceptResult(Location location) {
+            Consumer<Location> consumer;
+            synchronized (this) {
+                if (mConsumer == null) {
+                    return;
+                }
+                consumer = mConsumer;
+                cancel();
+            }
+
+            consumer.accept(location);
         }
     }
 
@@ -2563,30 +2655,36 @@
                 return;
             }
 
+            PooledRunnable runnable =
+                    obtainRunnable(LocationListenerTransport::acceptLocation, this, currentExecutor,
+                            location).recycleOnUse();
             try {
-                currentExecutor.execute(() -> {
-                    try {
-                        if (currentExecutor != mExecutor) {
-                            return;
-                        }
-
-                        // we may be under the binder identity if a direct executor is used
-                        long identity = Binder.clearCallingIdentity();
-                        try {
-                            mListener.onLocationChanged(location);
-                        } finally {
-                            Binder.restoreCallingIdentity(identity);
-                        }
-                    } finally {
-                        locationCallbackFinished();
-                    }
-                });
+                currentExecutor.execute(runnable);
             } catch (RejectedExecutionException e) {
+                runnable.recycle();
                 locationCallbackFinished();
                 throw e;
             }
         }
 
+        private void acceptLocation(Executor currentExecutor, Location location) {
+            try {
+                if (currentExecutor != mExecutor) {
+                    return;
+                }
+
+                // we may be under the binder identity if a direct executor is used
+                long identity = Binder.clearCallingIdentity();
+                try {
+                    mListener.onLocationChanged(location);
+                } finally {
+                    Binder.restoreCallingIdentity(identity);
+                }
+            } finally {
+                locationCallbackFinished();
+            }
+        }
+
         @Override
         public void onProviderEnabled(String provider) {
             Executor currentExecutor = mExecutor;
@@ -2594,25 +2692,13 @@
                 return;
             }
 
+            PooledRunnable runnable =
+                    obtainRunnable(LocationListenerTransport::acceptProviderChange, this,
+                            currentExecutor, provider, true).recycleOnUse();
             try {
-                currentExecutor.execute(() -> {
-                    try {
-                        if (currentExecutor != mExecutor) {
-                            return;
-                        }
-
-                        // we may be under the binder identity if a direct executor is used
-                        long identity = Binder.clearCallingIdentity();
-                        try {
-                            mListener.onProviderEnabled(provider);
-                        } finally {
-                            Binder.restoreCallingIdentity(identity);
-                        }
-                    } finally {
-                        locationCallbackFinished();
-                    }
-                });
+                currentExecutor.execute(runnable);
             } catch (RejectedExecutionException e) {
+                runnable.recycle();
                 locationCallbackFinished();
                 throw e;
             }
@@ -2625,30 +2711,41 @@
                 return;
             }
 
+            PooledRunnable runnable =
+                    obtainRunnable(LocationListenerTransport::acceptProviderChange, this,
+                            currentExecutor, provider, false).recycleOnUse();
             try {
-                currentExecutor.execute(() -> {
-                    try {
-                        if (currentExecutor != mExecutor) {
-                            return;
-                        }
-
-                        // we may be under the binder identity if a direct executor is used
-                        long identity = Binder.clearCallingIdentity();
-                        try {
-                            mListener.onProviderDisabled(provider);
-                        } finally {
-                            Binder.restoreCallingIdentity(identity);
-                        }
-                    } finally {
-                        locationCallbackFinished();
-                    }
-                });
+                currentExecutor.execute(runnable);
             } catch (RejectedExecutionException e) {
+                runnable.recycle();
                 locationCallbackFinished();
                 throw e;
             }
         }
 
+        private void acceptProviderChange(Executor currentExecutor, String provider,
+                boolean enabled) {
+            try {
+                if (currentExecutor != mExecutor) {
+                    return;
+                }
+
+                // we may be under the binder identity if a direct executor is used
+                long identity = Binder.clearCallingIdentity();
+                try {
+                    if (enabled) {
+                        mListener.onProviderEnabled(provider);
+                    } else {
+                        mListener.onProviderDisabled(provider);
+                    }
+                } finally {
+                    Binder.restoreCallingIdentity(identity);
+                }
+            } finally {
+                locationCallbackFinished();
+            }
+        }
+
         @Override
         public void onRemoved() {
             // TODO: onRemoved is necessary to GC hanging listeners, but introduces some interesting
@@ -2718,8 +2815,7 @@
     }
 
     private class GnssStatusListenerManager extends
-            AbstractListenerManager<GnssStatus.Callback> {
-
+            AbstractListenerManager<Void, GnssStatus.Callback> {
         @Nullable
         private IGnssStatusListener mListenerTransport;
 
@@ -2737,19 +2833,19 @@
 
         public boolean addListener(@NonNull GpsStatus.Listener listener, @NonNull Executor executor)
                 throws RemoteException {
-            return addInternal(listener, executor);
+            return addInternal(null, listener, executor);
         }
 
         public boolean addListener(@NonNull OnNmeaMessageListener listener,
                 @NonNull Handler handler)
                 throws RemoteException {
-            return addInternal(listener, handler);
+            return addInternal(null, listener, handler);
         }
 
         public boolean addListener(@NonNull OnNmeaMessageListener listener,
                 @NonNull Executor executor)
                 throws RemoteException {
-            return addInternal(listener, executor);
+            return addInternal(null, listener, executor);
         }
 
         @Override
@@ -2788,7 +2884,7 @@
         }
 
         @Override
-        protected boolean registerService() throws RemoteException {
+        protected boolean registerService(Void ignored) throws RemoteException {
             Preconditions.checkState(mListenerTransport == null);
 
             GnssStatusListener transport = new GnssStatusListener();
@@ -2848,17 +2944,17 @@
     }
 
     private class GnssMeasurementsListenerManager extends
-            AbstractListenerManager<GnssMeasurementsEvent.Callback> {
+            AbstractListenerManager<GnssRequest, GnssMeasurementsEvent.Callback> {
 
         @Nullable
         private IGnssMeasurementsListener mListenerTransport;
 
         @Override
-        protected boolean registerService() throws RemoteException {
+        protected boolean registerService(GnssRequest request) throws RemoteException {
             Preconditions.checkState(mListenerTransport == null);
 
             GnssMeasurementsListener transport = new GnssMeasurementsListener();
-            if (mService.addGnssMeasurementsListener(transport, mContext.getPackageName(),
+            if (mService.addGnssMeasurementsListener(request, transport, mContext.getPackageName(),
                     mContext.getFeatureId(), "gnss measurement callback")) {
                 mListenerTransport = transport;
                 return true;
@@ -2875,6 +2971,18 @@
             mListenerTransport = null;
         }
 
+        @Override
+        @Nullable
+        protected GnssRequest merge(@NonNull GnssRequest[] requests) {
+            Preconditions.checkArgument(requests.length > 0);
+            for (GnssRequest request : requests) {
+                if (request.isFullTracking()) {
+                    return request;
+                }
+            }
+            return requests[0];
+        }
+
         private class GnssMeasurementsListener extends IGnssMeasurementsListener.Stub {
             @Override
             public void onGnssMeasurementsReceived(final GnssMeasurementsEvent event) {
@@ -2889,13 +2997,13 @@
     }
 
     private class GnssNavigationMessageListenerManager extends
-            AbstractListenerManager<GnssNavigationMessage.Callback> {
+            AbstractListenerManager<Void, GnssNavigationMessage.Callback> {
 
         @Nullable
         private IGnssNavigationMessageListener mListenerTransport;
 
         @Override
-        protected boolean registerService() throws RemoteException {
+        protected boolean registerService(Void ignored) throws RemoteException {
             Preconditions.checkState(mListenerTransport == null);
 
             GnssNavigationMessageListener transport = new GnssNavigationMessageListener();
@@ -2929,19 +3037,56 @@
         }
     }
 
+    private class GnssAntennaInfoListenerManager extends
+            AbstractListenerManager<Void, GnssAntennaInfo.Listener> {
+
+        @Nullable
+        private IGnssAntennaInfoListener mListenerTransport;
+
+        @Override
+        protected boolean registerService(Void ignored) throws RemoteException {
+            Preconditions.checkState(mListenerTransport == null);
+
+            GnssAntennaInfoListener transport = new GnssAntennaInfoListener();
+            if (mService.addGnssAntennaInfoListener(transport, mContext.getPackageName(),
+                    mContext.getFeatureId(), "gnss antenna info callback")) {
+                mListenerTransport = transport;
+                return true;
+            } else {
+                return false;
+            }
+        }
+
+        @Override
+        protected void unregisterService() throws RemoteException {
+            Preconditions.checkState(mListenerTransport != null);
+
+            mService.removeGnssAntennaInfoListener(mListenerTransport);
+            mListenerTransport = null;
+        }
+
+        private class GnssAntennaInfoListener extends IGnssAntennaInfoListener.Stub {
+            @Override
+            public void onGnssAntennaInfoReceived(final List<GnssAntennaInfo> gnssAntennaInfos) {
+                execute((callback) -> callback.onGnssAntennaInfoReceived(gnssAntennaInfos));
+            }
+        }
+
+    }
+
     private class BatchedLocationCallbackManager extends
-            AbstractListenerManager<BatchedLocationCallback> {
+            AbstractListenerManager<Void, BatchedLocationCallback> {
 
         @Nullable
         private IBatchedLocationCallback mListenerTransport;
 
         @Override
-        protected boolean registerService() throws RemoteException {
+        protected boolean registerService(Void ignored) throws RemoteException {
             Preconditions.checkState(mListenerTransport == null);
 
             BatchedLocationCallback transport = new BatchedLocationCallback();
             if (mService.addGnssBatchingCallback(transport, mContext.getPackageName(),
-                     mContext.getFeatureId(), "batched location callback")) {
+                    mContext.getFeatureId(), "batched location callback")) {
                 mListenerTransport = transport;
                 return true;
             } else {
diff --git a/location/java/android/location/LocationManagerInternal.java b/location/java/android/location/LocationManagerInternal.java
index 69162ba..085602c 100644
--- a/location/java/android/location/LocationManagerInternal.java
+++ b/location/java/android/location/LocationManagerInternal.java
@@ -43,6 +43,15 @@
     public abstract void requestSetProviderAllowed(@NonNull String provider, boolean allowed);
 
     /**
+     * Returns true if the given provider is enabled for the given user.
+     *
+     * @param provider A location provider as listed by {@link LocationManager#getAllProviders()}
+     * @param userId   The user id to check
+     * @return True if the provider is enabled, false otherwise
+     */
+    public abstract boolean isProviderEnabledForUser(@NonNull String provider, int userId);
+
+    /**
      * Returns true if the given package belongs to a location provider, and so should be afforded
      * some special privileges.
      *
diff --git a/location/lib/java/com/android/location/provider/LocationProviderBase.java b/location/lib/java/com/android/location/provider/LocationProviderBase.java
index f67d08e..bd29d8a 100644
--- a/location/lib/java/com/android/location/provider/LocationProviderBase.java
+++ b/location/lib/java/com/android/location/provider/LocationProviderBase.java
@@ -224,6 +224,19 @@
     public void reportLocation(Location location) {
         ILocationProviderManager manager = mManager;
         if (manager != null) {
+            // remove deprecated extras to save on serialization
+            Bundle extras = location.getExtras();
+            if (extras != null && (extras.containsKey("noGPSLocation")
+                    || extras.containsKey("coarseLocation"))) {
+                location = new Location(location);
+                extras = location.getExtras();
+                extras.remove("noGPSLocation");
+                extras.remove("coarseLocation");
+                if (extras.isEmpty()) {
+                    location.setExtras(null);
+                }
+            }
+
             try {
                 manager.onReportLocation(location);
             } catch (RemoteException | RuntimeException e) {
diff --git a/media/java/android/media/AudioDeviceAddress.aidl b/media/java/android/media/AudioDeviceAddress.aidl
deleted file mode 100644
index 6a1a7f7..0000000
--- a/media/java/android/media/AudioDeviceAddress.aidl
+++ /dev/null
@@ -1,18 +0,0 @@
-/* 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.
-*/
-
-package android.media;
-
-parcelable AudioDeviceAddress;
diff --git a/media/java/android/media/AudioDeviceAddress.java b/media/java/android/media/AudioDeviceAddress.java
deleted file mode 100644
index 3d8fc37..0000000
--- a/media/java/android/media/AudioDeviceAddress.java
+++ /dev/null
@@ -1,215 +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.media;
-
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.SystemApi;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.Objects;
-
-/**
- * @hide
- * Class to represent device type (speaker, headset...), address and role (input, output)
- * of an audio device.
- * <p>Unlike {@link AudioDeviceInfo}, the device
- * doesn't need to be connected to be uniquely identified, it can
- * for instance represent a specific A2DP headset even after a
- * disconnection, whereas the corresponding <code>AudioDeviceInfo</code>
- * would then be invalid.
- * <p>While creating / obtaining an instance is not protected by a
- * permission, APIs using one rely on MODIFY_AUDIO_ROUTING.
- */
-@SystemApi
-public final class AudioDeviceAddress implements Parcelable {
-
-    /**
-     * A role identifying input devices, such as microphones.
-     */
-    public static final int ROLE_INPUT = AudioPort.ROLE_SOURCE;
-    /**
-     * A role identifying output devices, such as speakers or headphones.
-     */
-    public static final int ROLE_OUTPUT = AudioPort.ROLE_SINK;
-
-    /** @hide */
-    @IntDef(flag = false, prefix = "ROLE_", value = {
-            ROLE_INPUT, ROLE_OUTPUT }
-    )
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface Role {}
-
-    /**
-     * The audio device type, as defined in {@link AudioDeviceInfo}
-     */
-    private final @AudioDeviceInfo.AudioDeviceType int mType;
-    /**
-     * The unique address of the device. Some devices don't have addresses, only an empty string.
-     */
-    private final @NonNull String mAddress;
-
-    /**
-     * Is input or output device
-     */
-    private final @Role int mRole;
-
-    /**
-     * @hide
-     * Constructor from a valid {@link AudioDeviceInfo}
-     * @param deviceInfo the connected audio device from which to obtain the device-identifying
-     *                   type and address.
-     */
-    @SystemApi
-    public AudioDeviceAddress(@NonNull AudioDeviceInfo deviceInfo) {
-        Objects.requireNonNull(deviceInfo);
-        mRole = deviceInfo.isSink() ? ROLE_OUTPUT : ROLE_INPUT;
-        mType = deviceInfo.getType();
-        mAddress = deviceInfo.getAddress();
-    }
-
-    /**
-     * @hide
-     * Constructor from role, device type and address
-     * @param role indicates input or output role
-     * @param type the device type, as defined in {@link AudioDeviceInfo}
-     * @param address the address of the device, or an empty string for devices without one
-     */
-    @SystemApi
-    public AudioDeviceAddress(@Role int role, @AudioDeviceInfo.AudioDeviceType int type,
-                              @NonNull String address) {
-        Objects.requireNonNull(address);
-        if (role != ROLE_OUTPUT && role != ROLE_INPUT) {
-            throw new IllegalArgumentException("Invalid role " + role);
-        }
-        if (role == ROLE_OUTPUT && !AudioDeviceInfo.isValidAudioDeviceTypeOut(type)) {
-            throw new IllegalArgumentException("Invalid output device type " + type);
-        }
-        if (role == ROLE_INPUT && !AudioDeviceInfo.isValidAudioDeviceTypeIn(type)) {
-            throw new IllegalArgumentException("Invalid input device type " + type);
-        }
-
-        mRole = role;
-        mType = type;
-        mAddress = address;
-    }
-
-    /*package*/ AudioDeviceAddress(int nativeType, @NonNull String address) {
-        mRole = (nativeType & AudioSystem.DEVICE_BIT_IN) != 0 ? ROLE_INPUT : ROLE_OUTPUT;
-        mType = AudioDeviceInfo.convertInternalDeviceToDeviceType(nativeType);
-        mAddress = address;
-    }
-
-    /**
-     * @hide
-     * Returns the role of a device
-     * @return the role
-     */
-    @SystemApi
-    public @Role int getRole() {
-        return mRole;
-    }
-
-    /**
-     * @hide
-     * Returns the audio device type of a device
-     * @return the type, as defined in {@link AudioDeviceInfo}
-     */
-    @SystemApi
-    public @AudioDeviceInfo.AudioDeviceType int getType() {
-        return mType;
-    }
-
-    /**
-     * @hide
-     * Returns the address of the audio device, or an empty string for devices without one
-     * @return the device address
-     */
-    @SystemApi
-    public @NonNull String getAddress() {
-        return mAddress;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(mRole, mType, mAddress);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        AudioDeviceAddress that = (AudioDeviceAddress) o;
-        return ((mRole == that.mRole)
-                && (mType == that.mType)
-                && mAddress.equals(that.mAddress));
-    }
-
-    /** @hide */
-    public static String roleToString(@Role int role) {
-        return (role == ROLE_OUTPUT ? "output" : "input");
-    }
-
-    @Override
-    public String toString() {
-        return new String("AudioDeviceAddress:"
-                + " role:" + roleToString(mRole)
-                + " type:" + (mRole == ROLE_OUTPUT ? AudioSystem.getOutputDeviceName(
-                        AudioDeviceInfo.convertDeviceTypeToInternalDevice(mType))
-                        : AudioSystem.getInputDeviceName(
-                                AudioDeviceInfo.convertDeviceTypeToInternalDevice(mType)))
-                + " addr:" + mAddress);
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(@NonNull Parcel dest, int flags) {
-        dest.writeInt(mRole);
-        dest.writeInt(mType);
-        dest.writeString(mAddress);
-    }
-
-    private AudioDeviceAddress(@NonNull Parcel in) {
-        mRole = in.readInt();
-        mType = in.readInt();
-        mAddress = in.readString();
-    }
-
-    public static final @NonNull Parcelable.Creator<AudioDeviceAddress> CREATOR =
-            new Parcelable.Creator<AudioDeviceAddress>() {
-        /**
-         * Rebuilds an AudioDeviceAddress previously stored with writeToParcel().
-         * @param p Parcel object to read the AudioDeviceAddress from
-         * @return a new AudioDeviceAddress created from the data in the parcel
-         */
-        public AudioDeviceAddress createFromParcel(Parcel p) {
-            return new AudioDeviceAddress(p);
-        }
-
-        public AudioDeviceAddress[] newArray(int size) {
-            return new AudioDeviceAddress[size];
-        }
-    };
-}
diff --git a/media/java/android/media/AudioDeviceAttributes.aidl b/media/java/android/media/AudioDeviceAttributes.aidl
new file mode 100644
index 0000000..82d4226
--- /dev/null
+++ b/media/java/android/media/AudioDeviceAttributes.aidl
@@ -0,0 +1,18 @@
+/* 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.
+*/
+
+package android.media;
+
+parcelable AudioDeviceAttributes;
diff --git a/media/java/android/media/AudioDeviceAttributes.java b/media/java/android/media/AudioDeviceAttributes.java
new file mode 100644
index 0000000..f5b0806
--- /dev/null
+++ b/media/java/android/media/AudioDeviceAttributes.java
@@ -0,0 +1,215 @@
+/*
+ * 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.media;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Objects;
+
+/**
+ * @hide
+ * Class to represent the attributes of an audio device: its type (speaker, headset...), address
+ * (if known) and role (input, output).
+ * <p>Unlike {@link AudioDeviceInfo}, the device
+ * doesn't need to be connected to be uniquely identified, it can
+ * for instance represent a specific A2DP headset even after a
+ * disconnection, whereas the corresponding <code>AudioDeviceInfo</code>
+ * would then be invalid.
+ * <p>While creating / obtaining an instance is not protected by a
+ * permission, APIs using one rely on MODIFY_AUDIO_ROUTING.
+ */
+@SystemApi
+public final class AudioDeviceAttributes implements Parcelable {
+
+    /**
+     * A role identifying input devices, such as microphones.
+     */
+    public static final int ROLE_INPUT = AudioPort.ROLE_SOURCE;
+    /**
+     * A role identifying output devices, such as speakers or headphones.
+     */
+    public static final int ROLE_OUTPUT = AudioPort.ROLE_SINK;
+
+    /** @hide */
+    @IntDef(flag = false, prefix = "ROLE_", value = {
+            ROLE_INPUT, ROLE_OUTPUT }
+    )
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Role {}
+
+    /**
+     * The audio device type, as defined in {@link AudioDeviceInfo}
+     */
+    private final @AudioDeviceInfo.AudioDeviceType int mType;
+    /**
+     * The unique address of the device. Some devices don't have addresses, only an empty string.
+     */
+    private final @NonNull String mAddress;
+
+    /**
+     * Is input or output device
+     */
+    private final @Role int mRole;
+
+    /**
+     * @hide
+     * Constructor from a valid {@link AudioDeviceInfo}
+     * @param deviceInfo the connected audio device from which to obtain the device-identifying
+     *                   type and address.
+     */
+    @SystemApi
+    public AudioDeviceAttributes(@NonNull AudioDeviceInfo deviceInfo) {
+        Objects.requireNonNull(deviceInfo);
+        mRole = deviceInfo.isSink() ? ROLE_OUTPUT : ROLE_INPUT;
+        mType = deviceInfo.getType();
+        mAddress = deviceInfo.getAddress();
+    }
+
+    /**
+     * @hide
+     * Constructor from role, device type and address
+     * @param role indicates input or output role
+     * @param type the device type, as defined in {@link AudioDeviceInfo}
+     * @param address the address of the device, or an empty string for devices without one
+     */
+    @SystemApi
+    public AudioDeviceAttributes(@Role int role, @AudioDeviceInfo.AudioDeviceType int type,
+                              @NonNull String address) {
+        Objects.requireNonNull(address);
+        if (role != ROLE_OUTPUT && role != ROLE_INPUT) {
+            throw new IllegalArgumentException("Invalid role " + role);
+        }
+        if (role == ROLE_OUTPUT && !AudioDeviceInfo.isValidAudioDeviceTypeOut(type)) {
+            throw new IllegalArgumentException("Invalid output device type " + type);
+        }
+        if (role == ROLE_INPUT && !AudioDeviceInfo.isValidAudioDeviceTypeIn(type)) {
+            throw new IllegalArgumentException("Invalid input device type " + type);
+        }
+
+        mRole = role;
+        mType = type;
+        mAddress = address;
+    }
+
+    /*package*/ AudioDeviceAttributes(int nativeType, @NonNull String address) {
+        mRole = (nativeType & AudioSystem.DEVICE_BIT_IN) != 0 ? ROLE_INPUT : ROLE_OUTPUT;
+        mType = AudioDeviceInfo.convertInternalDeviceToDeviceType(nativeType);
+        mAddress = address;
+    }
+
+    /**
+     * @hide
+     * Returns the role of a device
+     * @return the role
+     */
+    @SystemApi
+    public @Role int getRole() {
+        return mRole;
+    }
+
+    /**
+     * @hide
+     * Returns the audio device type of a device
+     * @return the type, as defined in {@link AudioDeviceInfo}
+     */
+    @SystemApi
+    public @AudioDeviceInfo.AudioDeviceType int getType() {
+        return mType;
+    }
+
+    /**
+     * @hide
+     * Returns the address of the audio device, or an empty string for devices without one
+     * @return the device address
+     */
+    @SystemApi
+    public @NonNull String getAddress() {
+        return mAddress;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mRole, mType, mAddress);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        AudioDeviceAttributes that = (AudioDeviceAttributes) o;
+        return ((mRole == that.mRole)
+                && (mType == that.mType)
+                && mAddress.equals(that.mAddress));
+    }
+
+    /** @hide */
+    public static String roleToString(@Role int role) {
+        return (role == ROLE_OUTPUT ? "output" : "input");
+    }
+
+    @Override
+    public String toString() {
+        return new String("AudioDeviceAttributes:"
+                + " role:" + roleToString(mRole)
+                + " type:" + (mRole == ROLE_OUTPUT ? AudioSystem.getOutputDeviceName(
+                        AudioDeviceInfo.convertDeviceTypeToInternalDevice(mType))
+                        : AudioSystem.getInputDeviceName(
+                                AudioDeviceInfo.convertDeviceTypeToInternalDevice(mType)))
+                + " addr:" + mAddress);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeInt(mRole);
+        dest.writeInt(mType);
+        dest.writeString(mAddress);
+    }
+
+    private AudioDeviceAttributes(@NonNull Parcel in) {
+        mRole = in.readInt();
+        mType = in.readInt();
+        mAddress = in.readString();
+    }
+
+    public static final @NonNull Parcelable.Creator<AudioDeviceAttributes> CREATOR =
+            new Parcelable.Creator<AudioDeviceAttributes>() {
+        /**
+         * Rebuilds an AudioDeviceAttributes previously stored with writeToParcel().
+         * @param p Parcel object to read the AudioDeviceAttributes from
+         * @return a new AudioDeviceAttributes created from the data in the parcel
+         */
+        public AudioDeviceAttributes createFromParcel(Parcel p) {
+            return new AudioDeviceAttributes(p);
+        }
+
+        public AudioDeviceAttributes[] newArray(int size) {
+            return new AudioDeviceAttributes[size];
+        }
+    };
+}
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 7b17f9f..0b825f6 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -17,6 +17,7 @@
 
 package android.media;
 
+import android.annotation.CallbackExecutor;
 import android.annotation.IntDef;
 import android.annotation.IntRange;
 import android.annotation.NonNull;
@@ -1596,7 +1597,7 @@
     @SystemApi
     @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
     public boolean setPreferredDeviceForStrategy(@NonNull AudioProductStrategy strategy,
-            @NonNull AudioDeviceAddress device) {
+            @NonNull AudioDeviceAttributes device) {
         Objects.requireNonNull(strategy);
         Objects.requireNonNull(device);
         try {
@@ -1611,7 +1612,7 @@
     /**
      * @hide
      * Removes the preferred audio device previously set with
-     * {@link #setPreferredDeviceForStrategy(AudioProductStrategy, AudioDeviceAddress)}.
+     * {@link #setPreferredDeviceForStrategy(AudioProductStrategy, AudioDeviceAttributes)}.
      * @param strategy the audio strategy whose routing will be affected
      * @return true if the operation was successful, false otherwise (invalid strategy, or no
      *     device set for example)
@@ -1632,14 +1633,14 @@
     /**
      * @hide
      * Return the preferred device for an audio strategy, previously set with
-     * {@link #setPreferredDeviceForStrategy(AudioProductStrategy, AudioDeviceAddress)}
+     * {@link #setPreferredDeviceForStrategy(AudioProductStrategy, AudioDeviceAttributes)}
      * @param strategy the strategy to query
      * @return the preferred device for that strategy, or null if none was ever set or if the
      *    strategy is invalid
      */
     @SystemApi
     @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
-    public @Nullable AudioDeviceAddress getPreferredDeviceForStrategy(
+    public @Nullable AudioDeviceAttributes getPreferredDeviceForStrategy(
             @NonNull AudioProductStrategy strategy) {
         Objects.requireNonNull(strategy);
         try {
@@ -1649,6 +1650,180 @@
         }
     }
 
+    /**
+     * @hide
+     * Interface to be notified of changes in the preferred audio device set for a given audio
+     * strategy.
+     * @see #setPreferredDeviceForStrategy(AudioProductStrategy, AudioDeviceAttributes)
+     * @see #removePreferredDeviceForStrategy(AudioProductStrategy)
+     * @see #getPreferredDeviceForStrategy(AudioProductStrategy)
+     */
+    @SystemApi
+    public interface OnPreferredDeviceForStrategyChangedListener {
+        /**
+         * Called on the listener to indicate that the preferred audio device for the given
+         * strategy has changed.
+         * @param strategy the {@link AudioProductStrategy} whose preferred device changed
+         * @param device <code>null</code> if the preferred device was removed, or the newly set
+         *              preferred audio device
+         */
+        void onPreferredDeviceForStrategyChanged(@NonNull AudioProductStrategy strategy,
+                @Nullable AudioDeviceAttributes device);
+    }
+
+    /**
+     * @hide
+     * Adds a listener for being notified of changes to the strategy-preferred audio device.
+     * @param executor
+     * @param listener
+     * @throws SecurityException if the caller doesn't hold the required permission
+     */
+    @SystemApi
+    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
+    public void addOnPreferredDeviceForStrategyChangedListener(
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull OnPreferredDeviceForStrategyChangedListener listener)
+            throws SecurityException {
+        Objects.requireNonNull(executor);
+        Objects.requireNonNull(listener);
+        synchronized (mPrefDevListenerLock) {
+            if (hasPrefDevListener(listener)) {
+                throw new IllegalArgumentException(
+                        "attempt to call addOnPreferredDeviceForStrategyChangedListener() "
+                                + "on a previously registered listener");
+            }
+            // lazy initialization of the list of strategy-preferred device listener
+            if (mPrefDevListeners == null) {
+                mPrefDevListeners = new ArrayList<>();
+            }
+            final int oldCbCount = mPrefDevListeners.size();
+            mPrefDevListeners.add(new PrefDevListenerInfo(listener, executor));
+            if (oldCbCount == 0 && mPrefDevListeners.size() > 0) {
+                // register binder for callbacks
+                if (mPrefDevDispatcherStub == null) {
+                    mPrefDevDispatcherStub = new StrategyPreferredDeviceDispatcherStub();
+                }
+                try {
+                    getService().registerStrategyPreferredDeviceDispatcher(mPrefDevDispatcherStub);
+                } catch (RemoteException e) {
+                    throw e.rethrowFromSystemServer();
+                }
+            }
+        }
+    }
+
+    /**
+     * @hide
+     * Removes a previously added listener of changes to the strategy-preferred audio device.
+     * @param listener
+     */
+    @SystemApi
+    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
+    public void removeOnPreferredDeviceForStrategyChangedListener(
+            @NonNull OnPreferredDeviceForStrategyChangedListener listener) {
+        Objects.requireNonNull(listener);
+        synchronized (mPrefDevListenerLock) {
+            if (!removePrefDevListener(listener)) {
+                throw new IllegalArgumentException(
+                        "attempt to call removeOnPreferredDeviceForStrategyChangedListener() "
+                                + "on an unregistered listener");
+            }
+            if (mPrefDevListeners.size() == 0) {
+                // unregister binder for callbacks
+                try {
+                    getService().unregisterStrategyPreferredDeviceDispatcher(
+                            mPrefDevDispatcherStub);
+                } catch (RemoteException e) {
+                    throw e.rethrowFromSystemServer();
+                } finally {
+                    mPrefDevDispatcherStub = null;
+                    mPrefDevListeners = null;
+                }
+            }
+        }
+    }
+
+
+    private final Object mPrefDevListenerLock = new Object();
+    /**
+     * List of listeners for preferred device for strategy and their associated Executor.
+     * List is lazy-initialized on first registration
+     */
+    @GuardedBy("mPrefDevListenerLock")
+    private @Nullable ArrayList<PrefDevListenerInfo> mPrefDevListeners;
+
+    private static class PrefDevListenerInfo {
+        final @NonNull OnPreferredDeviceForStrategyChangedListener mListener;
+        final @NonNull Executor mExecutor;
+        PrefDevListenerInfo(OnPreferredDeviceForStrategyChangedListener listener, Executor exe) {
+            mListener = listener;
+            mExecutor = exe;
+        }
+    }
+
+    @GuardedBy("mPrefDevListenerLock")
+    private StrategyPreferredDeviceDispatcherStub mPrefDevDispatcherStub;
+
+    private final class StrategyPreferredDeviceDispatcherStub
+            extends IStrategyPreferredDeviceDispatcher.Stub {
+
+        @Override
+        public void dispatchPrefDeviceChanged(int strategyId,
+                                              @Nullable AudioDeviceAttributes device) {
+            // make a shallow copy of listeners so callback is not executed under lock
+            final ArrayList<PrefDevListenerInfo> prefDevListeners;
+            synchronized (mPrefDevListenerLock) {
+                if (mPrefDevListeners == null || mPrefDevListeners.size() == 0) {
+                    return;
+                }
+                prefDevListeners = (ArrayList<PrefDevListenerInfo>) mPrefDevListeners.clone();
+            }
+            final AudioProductStrategy strategy =
+                    AudioProductStrategy.getAudioProductStrategyWithId(strategyId);
+            final long ident = Binder.clearCallingIdentity();
+            try {
+                for (PrefDevListenerInfo info : prefDevListeners) {
+                    info.mExecutor.execute(() ->
+                            info.mListener.onPreferredDeviceForStrategyChanged(strategy, device));
+                }
+            } finally {
+                Binder.restoreCallingIdentity(ident);
+            }
+        }
+    }
+
+    @GuardedBy("mPrefDevListenerLock")
+    private @Nullable PrefDevListenerInfo getPrefDevListenerInfo(
+            OnPreferredDeviceForStrategyChangedListener listener) {
+        if (mPrefDevListeners == null) {
+            return null;
+        }
+        for (PrefDevListenerInfo info : mPrefDevListeners) {
+            if (info.mListener == listener) {
+                return info;
+            }
+        }
+        return null;
+    }
+
+    @GuardedBy("mPrefDevListenerLock")
+    private boolean hasPrefDevListener(OnPreferredDeviceForStrategyChangedListener listener) {
+        return getPrefDevListenerInfo(listener) != null;
+    }
+
+    @GuardedBy("mPrefDevListenerLock")
+    /**
+     * @return true if the listener was removed from the list
+     */
+    private boolean removePrefDevListener(OnPreferredDeviceForStrategyChangedListener listener) {
+        final PrefDevListenerInfo infoToRemove = getPrefDevListenerInfo(listener);
+        if (infoToRemove != null) {
+            mPrefDevListeners.remove(infoToRemove);
+            return true;
+        }
+        return false;
+    }
+
     //====================================================================
     // Offload query
     /**
@@ -4379,7 +4554,7 @@
      */
     @SystemApi
     @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
-    public @NonNull List<AudioDeviceAddress> getDevicesForAttributes(
+    public @NonNull List<AudioDeviceAttributes> getDevicesForAttributes(
             @NonNull AudioAttributes attributes) {
         Objects.requireNonNull(attributes);
         final IAudioService service = getService();
diff --git a/media/java/android/media/AudioPlaybackCaptureConfiguration.java b/media/java/android/media/AudioPlaybackCaptureConfiguration.java
index 65f2f17..453704e 100644
--- a/media/java/android/media/AudioPlaybackCaptureConfiguration.java
+++ b/media/java/android/media/AudioPlaybackCaptureConfiguration.java
@@ -102,12 +102,6 @@
                                 criterion -> criterion.getIntProp());
     }
 
-    /** @return the userId's passed to {@link Builder#addMatchingUserId(int)}. */
-    public @NonNull int[] getMatchingUserIds() {
-        return getIntPredicates(AudioMixingRule.RULE_MATCH_USERID,
-                criterion -> criterion.getIntProp());
-    }
-
     /** @return the usages passed to {@link Builder#excludeUsage(int)}. */
     @AttributeUsage
     public @NonNull int[] getExcludeUsages() {
@@ -121,12 +115,6 @@
                                 criterion -> criterion.getIntProp());
     }
 
-    /** @return the userId's passed to {@link Builder#excludeUserId(int)}.  */
-    public @NonNull int[] getExcludeUserIds() {
-        return getIntPredicates(AudioMixingRule.RULE_EXCLUDE_USERID,
-                criterion -> criterion.getIntProp());
-    }
-
     private int[] getIntPredicates(int rule,
                                    ToIntFunction<AudioMixMatchCriterion> getPredicate) {
         return mAudioMixingRule.getCriteria().stream()
@@ -165,7 +153,6 @@
         private final MediaProjection mProjection;
         private int mUsageMatchType = MATCH_TYPE_UNSPECIFIED;
         private int mUidMatchType = MATCH_TYPE_UNSPECIFIED;
-        private int mUserIdMatchType = MATCH_TYPE_UNSPECIFIED;
 
         /** @param projection A MediaProjection that supports audio projection. */
         public Builder(@NonNull MediaProjection projection) {
@@ -215,23 +202,6 @@
         }
 
         /**
-         * Only capture audio output by app with the matching {@code userId}.
-         *
-         * <p>If called multiple times, will capture audio output by apps whose userId is any of the
-         * given userId's.
-         *
-         * @throws IllegalStateException if called in conjunction with {@link #excludeUserId(int)}.
-         */
-        public @NonNull Builder addMatchingUserId(int userId) {
-            Preconditions.checkState(
-                    mUserIdMatchType != MATCH_TYPE_EXCLUSIVE,
-                    ERROR_MESSAGE_MISMATCHED_RULES);
-            mAudioMixingRuleBuilder.addMixRule(AudioMixingRule.RULE_MATCH_USERID, userId);
-            mUserIdMatchType = MATCH_TYPE_INCLUSIVE;
-            return this;
-        }
-
-        /**
          * Only capture audio output that does not match the given {@link AudioAttributes}.
          *
          * <p>If called multiple times, will capture audio output that does not match any of the
@@ -268,24 +238,6 @@
         }
 
         /**
-         * Only capture audio output by apps that do not have the matching {@code userId}.
-         *
-         * <p>If called multiple times, will capture audio output by apps whose userId is not any of
-         * the given userId's.
-         *
-         * @throws IllegalStateException if called in conjunction with
-         * {@link #addMatchingUserId(int)}.
-         */
-        public @NonNull Builder excludeUserId(int userId) {
-            Preconditions.checkState(
-                    mUserIdMatchType != MATCH_TYPE_INCLUSIVE,
-                    ERROR_MESSAGE_MISMATCHED_RULES);
-            mAudioMixingRuleBuilder.excludeMixRule(AudioMixingRule.RULE_MATCH_USERID, userId);
-            mUserIdMatchType = MATCH_TYPE_EXCLUSIVE;
-            return this;
-        }
-
-        /**
          * Builds the configuration instance.
          *
          * @throws UnsupportedOperationException if the parameters set are incompatible.
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 02cb8aa..8b973a1 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -1024,7 +1024,18 @@
                                                       String device_name,
                                                       int codecFormat);
     @UnsupportedAppUsage
-    public static native int setPhoneState(int state);
+    public static int setPhoneState(int state) {
+        Log.w(TAG, "Do not use this method! Use AudioManager.setMode() instead.");
+        return 0;
+    }
+    /**
+     * @hide
+     * Send the current audio mode to audio policy manager and audio HAL.
+     * @param state the audio mode
+     * @param uid the UID of the app owning the audio mode
+     * @return command completion status.
+     */
+    public static native int setPhoneState(int state, int uid);
     @UnsupportedAppUsage
     public static native int setForceUse(int usage, int config);
     @UnsupportedAppUsage
@@ -1085,18 +1096,18 @@
      * @return an empty list if there was an issue with the request, a list of audio devices
      *   otherwise (typically one device, except for duplicated paths).
      */
-    public static @NonNull ArrayList<AudioDeviceAddress> getDevicesForAttributes(
+    public static @NonNull ArrayList<AudioDeviceAttributes> getDevicesForAttributes(
             @NonNull AudioAttributes attributes) {
         Objects.requireNonNull(attributes);
-        final AudioDeviceAddress[] devices = new AudioDeviceAddress[MAX_DEVICE_ROUTING];
+        final AudioDeviceAttributes[] devices = new AudioDeviceAttributes[MAX_DEVICE_ROUTING];
         final int res = getDevicesForAttributes(attributes, devices);
-        final ArrayList<AudioDeviceAddress> routeDevices = new ArrayList<>();
+        final ArrayList<AudioDeviceAttributes> routeDevices = new ArrayList<>();
         if (res != SUCCESS) {
             Log.e(TAG, "error " + res + " in getDevicesForAttributes for " + attributes);
             return routeDevices;
         }
 
-        for (AudioDeviceAddress device : devices) {
+        for (AudioDeviceAttributes device : devices) {
             if (device != null) {
                 routeDevices.add(device);
             }
@@ -1106,12 +1117,12 @@
 
     /**
      * Maximum number of audio devices a track is ever routed to, determines the size of the
-     * array passed to {@link #getDevicesForAttributes(AudioAttributes, AudioDeviceAddress[])}
+     * array passed to {@link #getDevicesForAttributes(AudioAttributes, AudioDeviceAttributes[])}
      */
     private static final int MAX_DEVICE_ROUTING = 4;
 
     private static native int getDevicesForAttributes(@NonNull AudioAttributes aa,
-                                                      @NonNull AudioDeviceAddress[] devices);
+                                                      @NonNull AudioDeviceAttributes[] devices);
 
     /** @hide returns true if master mono is enabled. */
     public static native boolean getMasterMono();
@@ -1246,7 +1257,7 @@
      * @return {@link #SUCCESS} if successfully set
      */
     public static int setPreferredDeviceForStrategy(
-            int strategy, @NonNull AudioDeviceAddress device) {
+            int strategy, @NonNull AudioDeviceAttributes device) {
         return setPreferredDeviceForStrategy(strategy,
                 AudioDeviceInfo.convertDeviceTypeToInternalDevice(device.getType()),
                 device.getAddress());
@@ -1277,7 +1288,7 @@
      *     and written to the array
      */
     public static native int getPreferredDeviceForStrategy(int strategy,
-                                                           AudioDeviceAddress[] device);
+                                                           AudioDeviceAttributes[] device);
 
     // Items shared with audio service
 
diff --git a/media/java/android/media/DrmInitData.java b/media/java/android/media/DrmInitData.java
index 170d9de..cc35f14 100644
--- a/media/java/android/media/DrmInitData.java
+++ b/media/java/android/media/DrmInitData.java
@@ -15,11 +15,10 @@
  */
 package android.media;
 
+import android.annotation.NonNull;
 import android.media.MediaDrm;
 
 import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.UUID;
 
 /**
@@ -42,11 +41,41 @@
     public abstract SchemeInitData get(UUID schemeUuid);
 
     /**
+     * Returns the number of {@link SchemeInitData} elements available through {@link
+     * #getSchemeInitDataAt}.
+     */
+    public int getSchemeInitDataCount() {
+        return 0;
+    }
+
+    /**
+     * Returns the {@link SchemeInitData} with the given {@code index}.
+     *
+     * @param index The index of the {@link SchemeInitData} to return.
+     * @return The {@link SchemeInitData} associated with the given {@code index}.
+     * @throws IndexOutOfBoundsException If the given {@code index} is negative or greater than
+     *         {@link #getSchemeInitDataCount}{@code - 1}.
+     */
+    @NonNull public SchemeInitData getSchemeInitDataAt(int index) {
+        throw new IndexOutOfBoundsException();
+    }
+
+    /**
      * Scheme initialization data.
      */
     public static final class SchemeInitData {
 
         /**
+         * The Nil UUID, as defined in RFC 4122, section 4.1.7.
+         */
+        @NonNull public static final UUID UUID_NIL = new UUID(0, 0);
+
+        /**
+         * The UUID associated with this scheme initialization data. May be {@link #UUID_NIL} if
+         * unknown or not applicable.
+         */
+        @NonNull public final UUID uuid;
+        /**
          * The mimeType of {@link #data}.
          */
         public final String mimeType;
@@ -56,12 +85,14 @@
         public final byte[] data;
 
         /**
+         * @param uuid The UUID associated with this scheme initialization data.
          * @param mimeType The mimeType of the initialization data.
          * @param data The initialization data.
          *
          * @hide
          */
-        public SchemeInitData(String mimeType, byte[] data) {
+        public SchemeInitData(UUID uuid, String mimeType, byte[] data) {
+            this.uuid = uuid;
             this.mimeType = mimeType;
             this.data = data;
         }
@@ -76,12 +107,14 @@
             }
 
             SchemeInitData other = (SchemeInitData) obj;
-            return mimeType.equals(other.mimeType) && Arrays.equals(data, other.data);
+            return uuid.equals(other.uuid)
+                    && mimeType.equals(other.mimeType)
+                    && Arrays.equals(data, other.data);
         }
 
         @Override
         public int hashCode() {
-            return mimeType.hashCode() + 31 * Arrays.hashCode(data);
+            return uuid.hashCode() + 31 * (mimeType.hashCode() + 31 * Arrays.hashCode(data));
         }
 
     }
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index 767b67b..d237975 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -1457,6 +1457,9 @@
     private int mRw2JpgFromRawOffset;
     private boolean mIsSupportedFile;
     private boolean mModified;
+    // XMP data can be contained as either part of the EXIF data (tag number 700), or as a
+    // separate data marker (a separate MARKER_APP1).
+    private boolean mXmpIsFromSeparateMarker;
 
     // Pattern to check non zero timestamp
     private static final Pattern sNonZeroTimePattern = Pattern.compile(".*[1-9].*");
@@ -2837,10 +2840,12 @@
                         final long offset = start + IDENTIFIER_XMP_APP1.length;
                         final byte[] value = Arrays.copyOfRange(bytes,
                                 IDENTIFIER_XMP_APP1.length, bytes.length);
-
+                        // TODO: check if ignoring separate XMP data when tag 700 already exists is
+                        //  valid.
                         if (getAttribute(TAG_XMP) == null) {
                             mAttributes[IFD_TYPE_PRIMARY].put(TAG_XMP, new ExifAttribute(
                                     IFD_FORMAT_BYTE, value.length, offset, value));
+                            mXmpIsFromSeparateMarker = true;
                         }
                     }
                     break;
@@ -3445,11 +3450,24 @@
         }
         dataOutputStream.writeByte(MARKER_SOI);
 
+        // Remove XMP data if it is from a separate marker (IDENTIFIER_XMP_APP1, not
+        // IDENTIFIER_EXIF_APP1)
+        // Will re-add it later after the rest of the file is written
+        ExifAttribute xmpAttribute = null;
+        if (getAttribute(TAG_XMP) != null && mXmpIsFromSeparateMarker) {
+            xmpAttribute = (ExifAttribute) mAttributes[IFD_TYPE_PRIMARY].remove(TAG_XMP);
+        }
+
         // Write EXIF APP1 segment
         dataOutputStream.writeByte(MARKER);
         dataOutputStream.writeByte(MARKER_APP1);
         writeExifSegment(dataOutputStream);
 
+        // Re-add previously removed XMP data.
+        if (xmpAttribute != null) {
+            mAttributes[IFD_TYPE_PRIMARY].put(TAG_XMP, xmpAttribute);
+        }
+
         byte[] bytes = new byte[4096];
 
         while (true) {
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index 64c5c05..5f320cd 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -18,7 +18,7 @@
 
 import android.bluetooth.BluetoothDevice;
 import android.media.AudioAttributes;
-import android.media.AudioDeviceAddress;
+import android.media.AudioDeviceAttributes;
 import android.media.AudioFocusInfo;
 import android.media.AudioPlaybackConfiguration;
 import android.media.AudioRecordingConfiguration;
@@ -29,6 +29,7 @@
 import android.media.IPlaybackConfigDispatcher;
 import android.media.IRecordingConfigDispatcher;
 import android.media.IRingtonePlayer;
+import android.media.IStrategyPreferredDeviceDispatcher;
 import android.media.IVolumeController;
 import android.media.IVolumeController;
 import android.media.PlayerBase;
@@ -274,18 +275,23 @@
 
     boolean isCallScreeningModeSupported();
 
-    int setPreferredDeviceForStrategy(in int strategy, in AudioDeviceAddress device);
+    int setPreferredDeviceForStrategy(in int strategy, in AudioDeviceAttributes device);
 
     int removePreferredDeviceForStrategy(in int strategy);
 
-    AudioDeviceAddress getPreferredDeviceForStrategy(in int strategy);
+    AudioDeviceAttributes getPreferredDeviceForStrategy(in int strategy);
 
-    List<AudioDeviceAddress> getDevicesForAttributes(in AudioAttributes attributes);
+    List<AudioDeviceAttributes> getDevicesForAttributes(in AudioAttributes attributes);
 
     int setAllowedCapturePolicy(in int capturePolicy);
 
     int getAllowedCapturePolicy();
 
+    void registerStrategyPreferredDeviceDispatcher(IStrategyPreferredDeviceDispatcher dispatcher);
+
+    oneway void unregisterStrategyPreferredDeviceDispatcher(
+            IStrategyPreferredDeviceDispatcher dispatcher);
+
     // WARNING: read warning at top of file, new methods that need to be used by native
     // code via IAudioManager.h need to be added to the top section.
 }
diff --git a/media/java/android/media/IMediaRoute2Provider.aidl b/media/java/android/media/IMediaRoute2Provider.aidl
deleted file mode 100644
index 9131f3b..0000000
--- a/media/java/android/media/IMediaRoute2Provider.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.
- */
-
-package android.media;
-
-import android.content.Intent;
-import android.media.IMediaRoute2ProviderClient;
-import android.media.RouteDiscoveryPreference;
-import android.os.Bundle;
-
-/**
- * {@hide}
- */
-oneway interface IMediaRoute2Provider {
-    void setClient(IMediaRoute2ProviderClient client);
-    void requestCreateSession(String packageName, String routeId, long requestId,
-            in @nullable Bundle sessionHints);
-    void releaseSession(String sessionId);
-    void updateDiscoveryPreference(in RouteDiscoveryPreference discoveryPreference);
-
-    void selectRoute(String sessionId, String routeId);
-    void deselectRoute(String sessionId, String routeId);
-    void transferToRoute(String sessionId, String routeId);
-
-    void notifyControlRequestSent(String id, in Intent request);
-    void requestSetVolume(String id, int volume);
-}
diff --git a/media/java/android/media/IMediaRoute2ProviderClient.aidl b/media/java/android/media/IMediaRoute2ProviderClient.aidl
deleted file mode 100644
index 0fccb3a..0000000
--- a/media/java/android/media/IMediaRoute2ProviderClient.aidl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-
-package android.media;
-
-import android.media.MediaRoute2ProviderInfo;
-import android.media.MediaRoute2Info;
-import android.media.RoutingSessionInfo;
-import android.os.Bundle;
-
-/**
- * @hide
- */
-oneway interface IMediaRoute2ProviderClient {
-    // TODO: Change it to updateRoutes?
-    void updateState(in MediaRoute2ProviderInfo providerInfo);
-    void notifySessionCreated(in RoutingSessionInfo sessionInfo, long requestId);
-    void notifySessionCreationFailed(long requestId);
-    void notifySessionUpdated(in RoutingSessionInfo sessionInfo);
-    void notifySessionReleased(in RoutingSessionInfo sessionInfo);
-}
diff --git a/media/java/android/media/IMediaRoute2ProviderService.aidl b/media/java/android/media/IMediaRoute2ProviderService.aidl
new file mode 100644
index 0000000..cd0def3
--- /dev/null
+++ b/media/java/android/media/IMediaRoute2ProviderService.aidl
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+package android.media;
+
+import android.content.Intent;
+import android.media.IMediaRoute2ProviderServiceCallback;
+import android.media.RouteDiscoveryPreference;
+import android.os.Bundle;
+
+/**
+ * {@hide}
+ */
+oneway interface IMediaRoute2ProviderService {
+    // Note: When changing this file, match the order of methods below with
+    // MediaRoute2ProviderService#MediaRoute2ProviderServiceStub for readability.
+    void setCallback(IMediaRoute2ProviderServiceCallback callback);
+    void updateDiscoveryPreference(in RouteDiscoveryPreference discoveryPreference);
+    void setRouteVolume(String routeId, int volume);
+
+    void requestCreateSession(String packageName, String routeId, long requestId,
+            in @nullable Bundle sessionHints);
+    void selectRoute(String sessionId, String routeId);
+    void deselectRoute(String sessionId, String routeId);
+    void transferToRoute(String sessionId, String routeId);
+    void setSessionVolume(String sessionId, int volume);
+    void releaseSession(String sessionId);
+}
diff --git a/media/java/android/media/IMediaRoute2ProviderServiceCallback.aidl b/media/java/android/media/IMediaRoute2ProviderServiceCallback.aidl
new file mode 100644
index 0000000..e35b0c4
--- /dev/null
+++ b/media/java/android/media/IMediaRoute2ProviderServiceCallback.aidl
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+
+package android.media;
+
+import android.media.MediaRoute2ProviderInfo;
+import android.media.MediaRoute2Info;
+import android.media.RoutingSessionInfo;
+import android.os.Bundle;
+
+/**
+ * @hide
+ */
+oneway interface IMediaRoute2ProviderServiceCallback {
+    // TODO: Change it to updateRoutes?
+    void updateState(in MediaRoute2ProviderInfo providerInfo);
+    void notifySessionCreated(in RoutingSessionInfo sessionInfo, long requestId);
+    void notifySessionCreationFailed(long requestId);
+    void notifySessionUpdated(in RoutingSessionInfo sessionInfo);
+    void notifySessionReleased(in RoutingSessionInfo sessionInfo);
+}
diff --git a/media/java/android/media/IMediaRouter2.aidl b/media/java/android/media/IMediaRouter2.aidl
new file mode 100644
index 0000000..550ecfd
--- /dev/null
+++ b/media/java/android/media/IMediaRouter2.aidl
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+
+package android.media;
+
+import android.media.MediaRoute2Info;
+import android.media.RoutingSessionInfo;
+import android.os.Bundle;
+
+/**
+ * @hide
+ */
+oneway interface IMediaRouter2 {
+    void notifyRestoreRoute();
+    void notifyRoutesAdded(in List<MediaRoute2Info> routes);
+    void notifyRoutesRemoved(in List<MediaRoute2Info> routes);
+    void notifyRoutesChanged(in List<MediaRoute2Info> routes);
+    void notifySessionCreated(in @nullable RoutingSessionInfo sessionInfo, int requestId);
+    void notifySessionInfoChanged(in RoutingSessionInfo sessionInfo);
+    void notifySessionReleased(in RoutingSessionInfo sessionInfo);
+}
diff --git a/media/java/android/media/IMediaRouter2Client.aidl b/media/java/android/media/IMediaRouter2Client.aidl
deleted file mode 100644
index bc7ebea..0000000
--- a/media/java/android/media/IMediaRouter2Client.aidl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-
-package android.media;
-
-import android.media.MediaRoute2Info;
-import android.media.RoutingSessionInfo;
-import android.os.Bundle;
-
-/**
- * @hide
- */
-oneway interface IMediaRouter2Client {
-    void notifyRestoreRoute();
-    void notifyRoutesAdded(in List<MediaRoute2Info> routes);
-    void notifyRoutesRemoved(in List<MediaRoute2Info> routes);
-    void notifyRoutesChanged(in List<MediaRoute2Info> routes);
-    void notifySessionCreated(in @nullable RoutingSessionInfo sessionInfo, int requestId);
-    void notifySessionInfoChanged(in RoutingSessionInfo sessionInfo);
-    void notifySessionReleased(in RoutingSessionInfo sessionInfo);
-}
diff --git a/media/java/android/media/IMediaRouterService.aidl b/media/java/android/media/IMediaRouterService.aidl
index 6fef468..cbec323 100644
--- a/media/java/android/media/IMediaRouterService.aidl
+++ b/media/java/android/media/IMediaRouterService.aidl
@@ -17,7 +17,7 @@
 package android.media;
 
 import android.content.Intent;
-import android.media.IMediaRouter2Client;
+import android.media.IMediaRouter2;
 import android.media.IMediaRouter2Manager;
 import android.media.IMediaRouterClient;
 import android.media.MediaRoute2Info;
@@ -44,39 +44,43 @@
     void requestSetVolume(IMediaRouterClient client, String routeId, int volume);
     void requestUpdateVolume(IMediaRouterClient client, String routeId, int direction);
 
-    // Methods for media router 2
+    // Note: When changing this file, match the order of methods below with 
+    // MediaRouterService.java for readability.
+
+    // Methods for MediaRouter2
     List<MediaRoute2Info> getSystemRoutes();
     RoutingSessionInfo getSystemSessionInfo();
-    void registerClient2(IMediaRouter2Client client, String packageName);
-    void unregisterClient2(IMediaRouter2Client client);
-    void sendControlRequest(IMediaRouter2Client client, in MediaRoute2Info route,
-            in Intent request);
-    void requestSetVolume2(IMediaRouter2Client client, in MediaRoute2Info route, int volume);
 
-    void requestCreateSession(IMediaRouter2Client client, in MediaRoute2Info route, int requestId,
-            in @nullable Bundle sessionHints);
-    void setDiscoveryRequest2(IMediaRouter2Client client, in RouteDiscoveryPreference preference);
-    void selectRoute(IMediaRouter2Client client, String sessionId, in MediaRoute2Info route);
-    void deselectRoute(IMediaRouter2Client client, String sessionId, in MediaRoute2Info route);
-    void transferToRoute(IMediaRouter2Client client, String sessionId, in MediaRoute2Info route);
-    void releaseSession(IMediaRouter2Client client, String sessionId);
+    void registerRouter2(IMediaRouter2 router, String packageName);
+    void unregisterRouter2(IMediaRouter2 router);
+    void setDiscoveryRequestWithRouter2(IMediaRouter2 router,
+            in RouteDiscoveryPreference preference);
+    void setRouteVolumeWithRouter2(IMediaRouter2 router, in MediaRoute2Info route, int volume);
 
+    void requestCreateSessionWithRouter2(IMediaRouter2 router, in MediaRoute2Info route,
+            int requestId, in @nullable Bundle sessionHints);
+    void selectRouteWithRouter2(IMediaRouter2 router, String sessionId, in MediaRoute2Info route);
+    void deselectRouteWithRouter2(IMediaRouter2 router, String sessionId, in MediaRoute2Info route);
+    void transferToRouteWithRouter2(IMediaRouter2 router, String sessionId,
+            in MediaRoute2Info route);
+    void setSessionVolumeWithRouter2(IMediaRouter2 router, String sessionId, int volume);
+    void releaseSessionWithRouter2(IMediaRouter2 router, String sessionId);
+
+    // Methods for MediaRouter2Manager
+    List<RoutingSessionInfo> getActiveSessions(IMediaRouter2Manager manager);
     void registerManager(IMediaRouter2Manager manager, String packageName);
     void unregisterManager(IMediaRouter2Manager manager);
+    void setRouteVolumeWithManager(IMediaRouter2Manager manager, in MediaRoute2Info route,
+            int volume);
 
-    void requestCreateClientSession(IMediaRouter2Manager manager, String packageName,
-        in @nullable MediaRoute2Info route, int requestId);
-
-    void requestSetVolume2Manager(IMediaRouter2Manager manager,
-            in MediaRoute2Info route, int volume);
-
-    List<RoutingSessionInfo> getActiveSessions(IMediaRouter2Manager manager);
-    void selectClientRoute(IMediaRouter2Manager manager,
-            String sessionId, in MediaRoute2Info route);
-    void deselectClientRoute(IMediaRouter2Manager manager,
-            String sessionId, in MediaRoute2Info route);
-    void transferToClientRoute(IMediaRouter2Manager manager,
-            String sessionId, in MediaRoute2Info route);
-    void releaseClientSession(IMediaRouter2Manager manager, String sessionId);
-
+    void requestCreateSessionWithManager(IMediaRouter2Manager manager, String packageName,
+            in @nullable MediaRoute2Info route, int requestId);
+    void selectRouteWithManager(IMediaRouter2Manager manager, String sessionId,
+            in MediaRoute2Info route);
+    void deselectRouteWithManager(IMediaRouter2Manager manager, String sessionId,
+            in MediaRoute2Info route);
+    void transferToRouteWithManager(IMediaRouter2Manager manager, String sessionId,
+            in MediaRoute2Info route);
+    void setSessionVolumeWithManager(IMediaRouter2Manager manager, String sessionId, int volume);
+    void releaseSessionWithManager(IMediaRouter2Manager manager, String sessionId);
 }
diff --git a/media/java/android/media/IStrategyPreferredDeviceDispatcher.aidl b/media/java/android/media/IStrategyPreferredDeviceDispatcher.aidl
new file mode 100644
index 0000000..b1f99e6
--- /dev/null
+++ b/media/java/android/media/IStrategyPreferredDeviceDispatcher.aidl
@@ -0,0 +1,30 @@
+/*
+ * 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.media;
+
+import android.media.AudioDeviceAttributes;
+
+/**
+ * AIDL for AudioService to signal audio strategy-preferred device updates.
+ *
+ * {@hide}
+ */
+oneway interface IStrategyPreferredDeviceDispatcher {
+
+    void dispatchPrefDeviceChanged(int strategyId, in AudioDeviceAttributes device);
+
+}
diff --git a/media/java/android/media/MediaCas.java b/media/java/android/media/MediaCas.java
index cefc9db..3a771bb 100644
--- a/media/java/android/media/MediaCas.java
+++ b/media/java/android/media/MediaCas.java
@@ -19,14 +19,20 @@
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.content.Context;
 import android.hardware.cas.V1_0.HidlCasPluginDescriptor;
 import android.hardware.cas.V1_0.ICas;
 import android.hardware.cas.V1_0.IMediaCasService;
 import android.hardware.cas.V1_2.ICasListener;
+import android.hardware.cas.V1_2.Status;
 import android.media.MediaCasException.*;
 import android.media.tv.TvInputService.PriorityHintUseCaseType;
+import android.media.tv.tunerresourcemanager.CasSessionRequest;
+import android.media.tv.tunerresourcemanager.ResourceClientProfile;
+import android.media.tv.tunerresourcemanager.TunerResourceManager;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.HandlerExecutor;
 import android.os.HandlerThread;
 import android.os.IHwBinder;
 import android.os.Looper;
@@ -39,6 +45,9 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * MediaCas can be used to obtain keys for descrambling protected media streams, in
@@ -110,6 +119,10 @@
     private EventHandler mEventHandler;
     private @PriorityHintUseCaseType int mPriorityHint;
     private String mTvInputServiceSessionId;
+    private int mClientId;
+    private int mCasSystemId;
+    private TunerResourceManager mTunerResourceManager = null;
+    private final Map<Session, Integer> mSessionMap = new HashMap<>();
 
     /**
      * Scrambling modes used to open cas sessions.
@@ -329,6 +342,10 @@
                         createFromSessionId(sessionId), msg.arg1, msg.arg2,
                         bundle.getByteArray(DATA_KEY));
             } else if (msg.what == MSG_CAS_STATUS_EVENT) {
+                if ((msg.arg1 == PLUGIN_STATUS_SESSION_NUMBER_CHANGED)
+                        && (mTunerResourceManager != null)) {
+                    mTunerResourceManager.updateCasInfo(mCasSystemId, msg.arg2);
+                }
                 mListener.onPluginStatusUpdate(MediaCas.this, msg.arg1, msg.arg2);
             } else if (msg.what == MSG_CAS_RESOURCE_LOST) {
                 mListener.onResourceLost(MediaCas.this);
@@ -364,6 +381,19 @@
                     EventHandler.MSG_CAS_STATUS_EVENT, status, arg));
         }
     };
+
+    private final TunerResourceManager.ResourcesReclaimListener mResourceListener =
+            new TunerResourceManager.ResourcesReclaimListener() {
+            @Override
+            public void onReclaimResources() {
+                synchronized (mSessionMap) {
+                    mSessionMap.forEach((casSession, sessionResourceId) -> casSession.close());
+                }
+                mEventHandler.sendMessage(mEventHandler.obtainMessage(
+                        EventHandler.MSG_CAS_RESOURCE_LOST));
+            }
+        };
+
     /**
      * Describe a CAS plugin with its CA_system_ID and string name.
      *
@@ -429,11 +459,21 @@
      */
     public final class Session implements AutoCloseable {
         final ArrayList<Byte> mSessionId;
+        boolean mIsClosed = false;
 
         Session(@NonNull ArrayList<Byte> sessionId) {
             mSessionId = new ArrayList<Byte>(sessionId);
         }
 
+        private void validateSessionInternalStates() {
+            if (mICas == null) {
+                throw new IllegalStateException();
+            }
+            if (mIsClosed) {
+                MediaCasStateException.throwExceptionIfNeeded(Status.ERROR_CAS_SESSION_NOT_OPENED);
+            }
+        }
+
         /**
          * Query if an object equal current Session object.
          *
@@ -459,7 +499,7 @@
          */
         public void setPrivateData(@NonNull byte[] data)
                 throws MediaCasException {
-            validateInternalStates();
+            validateSessionInternalStates();
 
             try {
                 MediaCasException.throwExceptionIfNeeded(
@@ -483,7 +523,7 @@
          */
         public void processEcm(@NonNull byte[] data, int offset, int length)
                 throws MediaCasException {
-            validateInternalStates();
+            validateSessionInternalStates();
 
             try {
                 MediaCasException.throwExceptionIfNeeded(
@@ -522,7 +562,7 @@
          */
         public void sendSessionEvent(int event, int arg, @Nullable byte[] data)
                 throws MediaCasException {
-            validateInternalStates();
+            validateSessionInternalStates();
 
             if (mICasV11 == null) {
                 Log.d(TAG, "Send Session Event isn't supported by cas@1.0 interface");
@@ -546,7 +586,7 @@
          */
         @NonNull
         public byte[] getSessionId() {
-            validateInternalStates();
+            validateSessionInternalStates();
             return toBytes(mSessionId);
         }
 
@@ -558,11 +598,12 @@
          */
         @Override
         public void close() {
-            validateInternalStates();
-
+            validateSessionInternalStates();
             try {
                 MediaCasStateException.throwExceptionIfNeeded(
                         mICas.closeSession(mSessionId));
+                mIsClosed = true;
+                removeSessionFromResourceMap(this);
             } catch (RemoteException e) {
                 cleanupAndRethrowIllegalState();
             }
@@ -664,6 +705,7 @@
     /**
      * Instantiate a CA system of the specified system id.
      *
+     * @param context the context of the caller.
      * @param casSystemId The system id of the CA system.
      * @param tvInputServiceSessionId The Id of the session opened in TV Input Service (TIS)
      *        {@link android.media.tv.TvInputService#onCreateSession(String, String)}
@@ -672,11 +714,23 @@
      * @throws UnsupportedCasException if the device does not support the
      * specified CA system.
      */
-    public MediaCas(int casSystemId, @Nullable String tvInputServiceSessionId,
-            @PriorityHintUseCaseType int priorityHint)  throws UnsupportedCasException {
+    public MediaCas(@NonNull Context context, int casSystemId,
+            @Nullable String tvInputServiceSessionId,
+            @PriorityHintUseCaseType int priorityHint) throws UnsupportedCasException {
         this(casSystemId);
-        mPriorityHint = priorityHint;
-        mTvInputServiceSessionId = tvInputServiceSessionId;
+
+        Objects.requireNonNull(context, "context must not be null");
+        mCasSystemId = casSystemId;
+        mTunerResourceManager = (TunerResourceManager)
+                context.getSystemService(Context.TV_TUNER_RESOURCE_MGR_SERVICE);
+        if (mTunerResourceManager != null) {
+            int[] clientId = new int[1];
+            ResourceClientProfile profile =
+                    new ResourceClientProfile(tvInputServiceSessionId, priorityHint);
+            mTunerResourceManager.registerClientProfile(
+                    profile, new HandlerExecutor(mEventHandler), mResourceListener, clientId);
+            mClientId = clientId[0];
+        }
     }
 
     IHwBinder getBinder() {
@@ -813,6 +867,40 @@
         }
     }
 
+    private int getSessionResourceId() throws MediaCasException {
+        validateInternalStates();
+
+        int[] sessionResourceId = new int[1];
+        sessionResourceId[0] = -1;
+        if (mTunerResourceManager != null) {
+            CasSessionRequest casSessionRequest = new CasSessionRequest(mClientId, mCasSystemId);
+            if (!mTunerResourceManager.requestCasSession(casSessionRequest, sessionResourceId)) {
+                throw new MediaCasException.ResourceBusyException(
+                    "insufficient resource to Open Session");
+            }
+        }
+        return  sessionResourceId[0];
+    }
+
+    private void addSessionToResourceMap(Session session, int sessionResourceId) {
+
+        if (sessionResourceId != -1) {
+            synchronized (mSessionMap) {
+                mSessionMap.put(session, sessionResourceId);
+            }
+        }
+    }
+
+    private void removeSessionFromResourceMap(Session session) {
+
+        synchronized (mSessionMap) {
+            if (mSessionMap.get(session) != null) {
+                mTunerResourceManager.releaseCasSession(mSessionMap.get(session));
+                mSessionMap.remove(session);
+            }
+        }
+    }
+
     /**
      * Open a session to descramble one or more streams scrambled by the
      * conditional access system.
@@ -824,12 +912,13 @@
      * @throws MediaCasStateException for CAS-specific state exceptions.
      */
     public Session openSession() throws MediaCasException {
-        validateInternalStates();
+        int sessionResourceId = getSessionResourceId();
 
         try {
             OpenSessionCallback cb = new OpenSessionCallback();
             mICas.openSession(cb);
             MediaCasException.throwExceptionIfNeeded(cb.mStatus);
+            addSessionToResourceMap(cb.mSession, sessionResourceId);
             return cb.mSession;
         } catch (RemoteException e) {
             cleanupAndRethrowIllegalState();
@@ -853,7 +942,7 @@
     @Nullable
     public Session openSession(@SessionUsage int sessionUsage, @ScramblingMode int scramblingMode)
             throws MediaCasException {
-        validateInternalStates();
+        int sessionResourceId = getSessionResourceId();
 
         if (mICasV12 == null) {
             Log.d(TAG, "Open Session with scrambling mode is only supported by cas@1.2+ interface");
@@ -864,6 +953,7 @@
             OpenSession_1_2_Callback cb = new OpenSession_1_2_Callback();
             mICasV12.openSession_1_2(sessionUsage, scramblingMode, cb);
             MediaCasException.throwExceptionIfNeeded(cb.mStatus);
+            addSessionToResourceMap(cb.mSession, sessionResourceId);
             return cb.mSession;
         } catch (RemoteException e) {
             cleanupAndRethrowIllegalState();
@@ -987,6 +1077,16 @@
                 mICas = null;
             }
         }
+
+        if (mTunerResourceManager != null) {
+            mTunerResourceManager.unregisterClientProfile(mClientId);
+            mTunerResourceManager = null;
+        }
+
+        if (mHandlerThread != null) {
+            mHandlerThread.quit();
+            mHandlerThread = null;
+        }
     }
 
     @Override
diff --git a/media/java/android/media/MediaExtractor.java b/media/java/android/media/MediaExtractor.java
index 7785900..6ef8713 100644
--- a/media/java/android/media/MediaExtractor.java
+++ b/media/java/android/media/MediaExtractor.java
@@ -40,10 +40,12 @@
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 /**
  * MediaExtractor facilitates extraction of demuxed, typically encoded,  media data
@@ -393,17 +395,28 @@
         }
         if (formatMap.containsKey("pssh")) {
             Map<UUID, byte[]> psshMap = getPsshInfo();
+            DrmInitData.SchemeInitData[] schemeInitDatas =
+                    psshMap.entrySet().stream().map(
+                            entry -> new DrmInitData.SchemeInitData(
+                                    entry.getKey(), /* mimeType= */ "cenc", entry.getValue()))
+                            .toArray(DrmInitData.SchemeInitData[]::new);
             final Map<UUID, DrmInitData.SchemeInitData> initDataMap =
-                new HashMap<UUID, DrmInitData.SchemeInitData>();
-            for (Map.Entry<UUID, byte[]> e: psshMap.entrySet()) {
-                UUID uuid = e.getKey();
-                byte[] data = e.getValue();
-                initDataMap.put(uuid, new DrmInitData.SchemeInitData("cenc", data));
-            }
+                    Arrays.stream(schemeInitDatas).collect(
+                            Collectors.toMap(initData -> initData.uuid, initData -> initData));
             return new DrmInitData() {
                 public SchemeInitData get(UUID schemeUuid) {
                     return initDataMap.get(schemeUuid);
                 }
+
+                @Override
+                public int getSchemeInitDataCount() {
+                    return schemeInitDatas.length;
+                }
+
+                @Override
+                public SchemeInitData getSchemeInitDataAt(int index) {
+                    return schemeInitDatas[index];
+                }
             };
         } else {
             int numTracks = getTrackCount();
@@ -416,9 +429,23 @@
                 buf.rewind();
                 final byte[] data = new byte[buf.remaining()];
                 buf.get(data);
+                // Webm scheme init data is not uuid-specific.
+                DrmInitData.SchemeInitData webmSchemeInitData =
+                        new DrmInitData.SchemeInitData(
+                                DrmInitData.SchemeInitData.UUID_NIL, "webm", data);
                 return new DrmInitData() {
                     public SchemeInitData get(UUID schemeUuid) {
-                        return new DrmInitData.SchemeInitData("webm", data);
+                        return webmSchemeInitData;
+                    }
+
+                    @Override
+                    public int getSchemeInitDataCount() {
+                        return 1;
+                    }
+
+                    @Override
+                    public SchemeInitData getSchemeInitDataAt(int index) {
+                        return webmSchemeInitData;
                     }
                 };
             }
diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java
index 6689080..70d79378 100644
--- a/media/java/android/media/MediaFile.java
+++ b/media/java/android/media/MediaFile.java
@@ -26,6 +26,7 @@
 import libcore.content.type.MimeMap;
 
 import java.util.HashMap;
+import java.util.Locale;
 
 /**
  * MediaScanner helper class.
@@ -215,23 +216,23 @@
             return true;
         }
 
-        switch (normalizedMimeType) {
+        switch (normalizedMimeType.toLowerCase(Locale.ROOT)) {
             case "application/epub+zip":
             case "application/msword":
             case "application/pdf":
             case "application/rtf":
             case "application/vnd.ms-excel":
-            case "application/vnd.ms-excel.addin.macroEnabled.12":
-            case "application/vnd.ms-excel.sheet.binary.macroEnabled.12":
-            case "application/vnd.ms-excel.sheet.macroEnabled.12":
-            case "application/vnd.ms-excel.template.macroEnabled.12":
+            case "application/vnd.ms-excel.addin.macroenabled.12":
+            case "application/vnd.ms-excel.sheet.binary.macroenabled.12":
+            case "application/vnd.ms-excel.sheet.macroenabled.12":
+            case "application/vnd.ms-excel.template.macroenabled.12":
             case "application/vnd.ms-powerpoint":
-            case "application/vnd.ms-powerpoint.addin.macroEnabled.12":
-            case "application/vnd.ms-powerpoint.presentation.macroEnabled.12":
-            case "application/vnd.ms-powerpoint.slideshow.macroEnabled.12":
-            case "application/vnd.ms-powerpoint.template.macroEnabled.12":
-            case "application/vnd.ms-word.document.macroEnabled.12":
-            case "application/vnd.ms-word.template.macroEnabled.12":
+            case "application/vnd.ms-powerpoint.addin.macroenabled.12":
+            case "application/vnd.ms-powerpoint.presentation.macroenabled.12":
+            case "application/vnd.ms-powerpoint.slideshow.macroenabled.12":
+            case "application/vnd.ms-powerpoint.template.macroenabled.12":
+            case "application/vnd.ms-word.document.macroenabled.12":
+            case "application/vnd.ms-word.template.macroenabled.12":
             case "application/vnd.oasis.opendocument.chart":
             case "application/vnd.oasis.opendocument.database":
             case "application/vnd.oasis.opendocument.formula":
diff --git a/media/java/android/media/MediaFormat.java b/media/java/android/media/MediaFormat.java
index 57405d7..5832fc1 100644
--- a/media/java/android/media/MediaFormat.java
+++ b/media/java/android/media/MediaFormat.java
@@ -20,8 +20,6 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.compat.annotation.UnsupportedAppUsage;
-import android.media.MediaCodec;
-import android.media.MediaParser;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -116,6 +114,7 @@
  * <table>
  * <tr><td>{@link #KEY_MIME}</td><td>String</td><td>The type of the format.</td></tr>
  * <tr><td>{@link #KEY_LANGUAGE}</td><td>String</td><td>The language of the content.</td></tr>
+ * <tr><td>{@link #KEY_CAPTION_SERVICE_NUMBER}</td><td>int</td><td>optional, the closed-caption service or channel number.</td></tr>
  * </table>
  *
  * Image formats have the following keys:
@@ -245,6 +244,13 @@
     public static final String KEY_LANGUAGE = "language";
 
     /**
+     * A key describing the closed caption service number. For CEA-608 caption tracks, holds the
+     * channel number. For CEA-708, holds the service number.
+     * The associated value is an int.
+     */
+    public static final String KEY_CAPTION_SERVICE_NUMBER = "caption-service-number";
+
+    /**
      * A key describing the sample rate of an audio format.
      * The associated value is an integer
      */
@@ -650,16 +656,20 @@
     public static final String KEY_AAC_MAX_OUTPUT_CHANNEL_COUNT = "aac-max-output-channel_count";
 
     /**
-     * A key describing a gain to be applied so that the output loudness matches the
-     * Target Reference Level. This is typically used to normalize loudness across program items.
-     * The gain is derived as the difference between the Target Reference Level and the
-     * Program Reference Level. The latter can be given in the bitstream and indicates the actual
-     * loudness value of the program item.
+     * A key describing the Target Reference Level (Target Loudness).
+     * <p>For normalizing loudness across program items, a gain is applied to the audio output so
+     * that the output loudness matches the Target Reference Level. The gain is derived as the
+     * difference between the Target Reference Level and the Program Reference Level (Program
+     * Loudness). The latter can be given in the bitstream and indicates the actual loudness value
+     * of the program item.</p>
      * <p>The Target Reference Level controls loudness normalization for both MPEG-4 DRC and
      * MPEG-D DRC.
      * <p>The value is given as an integer value between
      * 40 and 127, and is calculated as -4 * Target Reference Level in LKFS.
      * Therefore, it represents the range of -10 to -31.75 LKFS.
+     * <p>For MPEG-4 DRC, a value of -1 switches off loudness normalization and DRC processing.</p>
+     * <p>For MPEG-D DRC, a value of -1 switches off loudness normalization only. For DRC processing
+     * options of MPEG-D DRC, see {@link #KEY_AAC_DRC_EFFECT_TYPE}</p>
      * <p>The default value on mobile devices is 64 (-16 LKFS).
      * <p>This key is only used during decoding.
      */
@@ -680,7 +690,7 @@
      * <tr><th>6</th><th>General compression</th></tr>
      * </table>
      * <p>The value -1 (Off) disables DRC processing, while loudness normalization may still be
-     * active and dependent on KEY_AAC_DRC_TARGET_REFERENCE_LEVEL.<br>
+     * active and dependent on {@link #KEY_AAC_DRC_TARGET_REFERENCE_LEVEL}.<br>
      * The value 0 (None) automatically enables DRC processing if necessary to prevent signal
      * clipping<br>
      * The value 6 (General compression) can be used for enabling MPEG-D DRC without particular
@@ -697,8 +707,8 @@
      * 0 and 127, which is calculated as -4 * Encoded Target Level in LKFS.
      * If the Encoded Target Level is unknown, the value can be set to -1.
      * <p>The default value is -1 (unknown).
-     * <p>The value is ignored when heavy compression is used (see
-     * {@link #KEY_AAC_DRC_HEAVY_COMPRESSION}).
+     * <p>The value is ignored when heavy compression (see {@link #KEY_AAC_DRC_HEAVY_COMPRESSION})
+     * or MPEG-D DRC is used.
      * <p>This key is only used during decoding.
      */
     public static final String KEY_AAC_ENCODED_TARGET_LEVEL = "aac-encoded-target-level";
@@ -739,17 +749,17 @@
     public static final String KEY_AAC_DRC_ATTENUATION_FACTOR = "aac-drc-cut-level";
 
     /**
-     * A key describing the selection of the heavy compression profile for DRC.
-     * Two separate DRC gain sequences can be transmitted in one bitstream: MPEG-4 DRC light
-     * compression, and DVB-specific heavy compression. When selecting the application of the heavy
-     * compression, one of the sequences is selected:
+     * A key describing the selection of the heavy compression profile for MPEG-4 DRC.
+     * <p>Two separate DRC gain sequences can be transmitted in one bitstream: light compression
+     * and heavy compression. When selecting the application of the heavy compression, one of
+     * the sequences is selected:
      * <ul>
      * <li>0 enables light compression,</li>
      * <li>1 enables heavy compression instead.
      * </ul>
-     * Note that only light compression offers the features of scaling of DRC gains
+     * Note that heavy compression doesn't offer the features of scaling of DRC gains
      * (see {@link #KEY_AAC_DRC_BOOST_FACTOR} and {@link #KEY_AAC_DRC_ATTENUATION_FACTOR} for the
-     * boost and attenuation factors, and frequency-selective (multiband) DRC.
+     * boost and attenuation factors), and frequency-selective (multiband) DRC.
      * Light compression usually contains clipping prevention for stereo downmixing while heavy
      * compression, if additionally provided in the bitstream, is usually stronger, and contains
      * clipping prevention for stereo and mono downmixing.
diff --git a/media/java/android/media/MediaRoute2Info.java b/media/java/android/media/MediaRoute2Info.java
index 0e88c75..bf04fe8 100644
--- a/media/java/android/media/MediaRoute2Info.java
+++ b/media/java/android/media/MediaRoute2Info.java
@@ -411,11 +411,10 @@
 
     /**
      * Returns true if the route info has all of the required field.
-     * A route info only obtained from {@link com.android.server.media.MediaRouterService}
-     * is valid.
+     * A route is valid if and only if it is obtained from
+     * {@link com.android.server.media.MediaRouterService}.
      * @hide
      */
-    //TODO: Reconsider the validity of a route info when fields are added.
     public boolean isValid() {
         if (TextUtils.isEmpty(getId()) || TextUtils.isEmpty(getName())
                 || TextUtils.isEmpty(getProviderId())) {
diff --git a/media/java/android/media/MediaRoute2ProviderService.java b/media/java/android/media/MediaRoute2ProviderService.java
index 20a59bba5..38233fd 100644
--- a/media/java/android/media/MediaRoute2ProviderService.java
+++ b/media/java/android/media/MediaRoute2ProviderService.java
@@ -84,8 +84,8 @@
     private final Handler mHandler;
     private final Object mSessionLock = new Object();
     private final AtomicBoolean mStatePublishScheduled = new AtomicBoolean(false);
-    private ProviderStub mStub;
-    private IMediaRoute2ProviderClient mClient;
+    private MediaRoute2ProviderServiceStub mStub;
+    private IMediaRoute2ProviderServiceCallback mRemoteCallback;
     private MediaRoute2ProviderInfo mProviderInfo;
 
     @GuardedBy("mSessionLock")
@@ -104,10 +104,9 @@
     @Override
     @Nullable
     public IBinder onBind(@NonNull Intent intent) {
-        //TODO: Allow binding from media router service only?
         if (SERVICE_INTERFACE.equals(intent.getAction())) {
             if (mStub == null) {
-                mStub = new ProviderStub();
+                mStub = new MediaRoute2ProviderServiceStub();
             }
             return mStub;
         }
@@ -115,23 +114,22 @@
     }
 
     /**
-     * Called when sendControlRequest is called on a route of the provider
-     *
-     * @param routeId the id of the target route
-     * @param request the media control request intent
-     * @hide
-     */
-    //TODO: Discuss what to use for request (e.g., Intent? Request class?)
-    public abstract void onControlRequest(@NonNull String routeId, @NonNull Intent request);
-
-    /**
-     * Called when requestSetVolume is called on a route of the provider.
+     * Called when a volume setting is requested on a route of the provider
      *
      * @param routeId the id of the route
      * @param volume the target volume
      * @see MediaRoute2Info#getVolumeMax()
      */
-    public abstract void onSetVolume(@NonNull String routeId, int volume);
+    public abstract void onSetRouteVolume(@NonNull String routeId, int volume);
+
+    /**
+     * Called when {@link MediaRouter2.RoutingController#setVolume(int)} is called on
+     * a routing session of the provider
+     *
+     * @param sessionId the id of the routing session
+     * @param volume the target volume
+     */
+    public abstract void onSetSessionVolume(@NonNull String sessionId, int volume);
 
     /**
      * Gets information of the session with the given id.
@@ -186,14 +184,14 @@
             mSessionInfo.put(sessionInfo.getId(), sessionInfo);
         }
 
-        if (mClient == null) {
+        if (mRemoteCallback == null) {
             return;
         }
         try {
             // TODO: Calling binder calls in multiple thread may cause timing issue.
             //       Consider to change implementations to avoid the problems.
             //       For example, post binder calls, always send all sessions at once, etc.
-            mClient.notifySessionCreated(sessionInfo, requestId);
+            mRemoteCallback.notifySessionCreated(sessionInfo, requestId);
         } catch (RemoteException ex) {
             Log.w(TAG, "Failed to notify session created.");
         }
@@ -207,11 +205,11 @@
      * @see #onCreateSession(String, String, long, Bundle)
      */
     public final void notifySessionCreationFailed(long requestId) {
-        if (mClient == null) {
+        if (mRemoteCallback == null) {
             return;
         }
         try {
-            mClient.notifySessionCreationFailed(requestId);
+            mRemoteCallback.notifySessionCreationFailed(requestId);
         } catch (RemoteException ex) {
             Log.w(TAG, "Failed to notify session creation failed.");
         }
@@ -234,11 +232,11 @@
             }
         }
 
-        if (mClient == null) {
+        if (mRemoteCallback == null) {
             return;
         }
         try {
-            mClient.notifySessionUpdated(sessionInfo);
+            mRemoteCallback.notifySessionUpdated(sessionInfo);
         } catch (RemoteException ex) {
             Log.w(TAG, "Failed to notify session info changed.");
         }
@@ -264,11 +262,11 @@
             return;
         }
 
-        if (mClient == null) {
+        if (mRemoteCallback == null) {
             return;
         }
         try {
-            mClient.notifySessionReleased(sessionInfo);
+            mRemoteCallback.notifySessionReleased(sessionInfo);
         } catch (RemoteException ex) {
             Log.w(TAG, "Failed to notify session info changed.");
         }
@@ -383,8 +381,8 @@
         schedulePublishState();
     }
 
-    void setClient(IMediaRoute2ProviderClient client) {
-        mClient = client;
+    void setCallback(IMediaRoute2ProviderServiceCallback callback) {
+        mRemoteCallback = callback;
         schedulePublishState();
     }
 
@@ -399,7 +397,7 @@
             return;
         }
 
-        if (mClient == null) {
+        if (mRemoteCallback == null) {
             return;
         }
 
@@ -408,26 +406,45 @@
             sessionInfos = new ArrayList<>(mSessionInfo.values());
         }
         try {
-            mClient.updateState(mProviderInfo);
+            mRemoteCallback.updateState(mProviderInfo);
         } catch (RemoteException ex) {
             Log.w(TAG, "Failed to send onProviderInfoUpdated");
         }
     }
 
-    final class ProviderStub extends IMediaRoute2Provider.Stub {
-        ProviderStub() { }
+    final class MediaRoute2ProviderServiceStub extends IMediaRoute2ProviderService.Stub {
+        MediaRoute2ProviderServiceStub() { }
 
         boolean checkCallerisSystem() {
             return Binder.getCallingUid() == Process.SYSTEM_UID;
         }
 
         @Override
-        public void setClient(IMediaRoute2ProviderClient client) {
+        public void setCallback(IMediaRoute2ProviderServiceCallback callback) {
             if (!checkCallerisSystem()) {
                 return;
             }
-            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::setClient,
-                    MediaRoute2ProviderService.this, client));
+            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::setCallback,
+                    MediaRoute2ProviderService.this, callback));
+        }
+
+        @Override
+        public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference) {
+            if (!checkCallerisSystem()) {
+                return;
+            }
+            mHandler.sendMessage(obtainMessage(
+                    MediaRoute2ProviderService::onDiscoveryPreferenceChanged,
+                    MediaRoute2ProviderService.this, discoveryPreference));
+        }
+
+        @Override
+        public void setRouteVolume(String routeId, int volume) {
+            if (!checkCallerisSystem()) {
+                return;
+            }
+            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onSetRouteVolume,
+                    MediaRoute2ProviderService.this, routeId, volume));
         }
 
         @Override
@@ -442,29 +459,6 @@
         }
 
         @Override
-        public void releaseSession(@NonNull String sessionId) {
-            if (!checkCallerisSystem()) {
-                return;
-            }
-            if (TextUtils.isEmpty(sessionId)) {
-                Log.w(TAG, "releaseSession: Ignoring empty sessionId from system service.");
-                return;
-            }
-            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onReleaseSession,
-                    MediaRoute2ProviderService.this, sessionId));
-        }
-
-        @Override
-        public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference) {
-            if (!checkCallerisSystem()) {
-                return;
-            }
-            mHandler.sendMessage(obtainMessage(
-                    MediaRoute2ProviderService::onDiscoveryPreferenceChanged,
-                    MediaRoute2ProviderService.this, discoveryPreference));
-        }
-
-        @Override
         public void selectRoute(@NonNull String sessionId, String routeId) {
             if (!checkCallerisSystem()) {
                 return;
@@ -504,21 +498,25 @@
         }
 
         @Override
-        public void notifyControlRequestSent(String routeId, Intent request) {
+        public void setSessionVolume(String sessionId, int volume) {
             if (!checkCallerisSystem()) {
                 return;
             }
-            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onControlRequest,
-                    MediaRoute2ProviderService.this, routeId, request));
+            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onSetSessionVolume,
+                    MediaRoute2ProviderService.this, sessionId, volume));
         }
 
         @Override
-        public void requestSetVolume(String routeId, int volume) {
+        public void releaseSession(@NonNull String sessionId) {
             if (!checkCallerisSystem()) {
                 return;
             }
-            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onSetVolume,
-                    MediaRoute2ProviderService.this, routeId, volume));
+            if (TextUtils.isEmpty(sessionId)) {
+                Log.w(TAG, "releaseSession: Ignoring empty sessionId from system service.");
+                return;
+            }
+            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onReleaseSession,
+                    MediaRoute2ProviderService.this, sessionId));
         }
     }
 }
diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java
index 9837e1c..12fc3a6 100644
--- a/media/java/android/media/MediaRouter.java
+++ b/media/java/android/media/MediaRouter.java
@@ -64,7 +64,12 @@
  *
  * <p>The media router API is not thread-safe; all interactions with it must be
  * done from the main thread of the process.</p>
+ *
+ * <p>
+ * We recommend using {@link android.media.MediaRouter2} APIs for new applications.
+ * </p>
  */
+//TODO: Link androidx.media2.MediaRouter when we are ready.
 @SystemService(Context.MEDIA_ROUTER_SERVICE)
 public class MediaRouter {
     private static final String TAG = "MediaRouter";
diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java
index d7b74df..28bb4c1 100644
--- a/media/java/android/media/MediaRouter2.java
+++ b/media/java/android/media/MediaRouter2.java
@@ -22,7 +22,6 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
-import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
@@ -66,7 +65,8 @@
 
     private final CopyOnWriteArrayList<RouteCallbackRecord> mRouteCallbackRecords =
             new CopyOnWriteArrayList<>();
-
+    private final CopyOnWriteArrayList<TransferCallbackRecord> mTransferCallbackRecords =
+            new CopyOnWriteArrayList<>();
     private final CopyOnWriteArrayList<ControllerCallbackRecord> mControllerCallbackRecords =
             new CopyOnWriteArrayList<>();
 
@@ -84,7 +84,7 @@
 
     // TODO: Make MediaRouter2 is always connected to the MediaRouterService.
     @GuardedBy("sRouterLock")
-    Client2 mClient;
+    MediaRouter2Stub mStub;
 
     @GuardedBy("sRouterLock")
     private Map<String, RoutingController> mRoutingControllers = new ArrayMap<>();
@@ -178,18 +178,18 @@
         mRouteCallbackRecords.addIfAbsent(record);
 
         synchronized (sRouterLock) {
-            if (mClient == null) {
-                Client2 client = new Client2();
+            if (mStub == null) {
+                MediaRouter2Stub stub = new MediaRouter2Stub();
                 try {
-                    mMediaRouterService.registerClient2(client, mPackageName);
-                    mClient = client;
+                    mMediaRouterService.registerRouter2(stub, mPackageName);
+                    mStub = stub;
                 } catch (RemoteException ex) {
-                    Log.e(TAG, "registerRouteCallback: Unable to register client.", ex);
+                    Log.e(TAG, "registerRouteCallback: Unable to register MediaRouter2.", ex);
                 }
             }
-            if (mClient != null && updateDiscoveryPreferenceIfNeededLocked()) {
+            if (mStub != null && updateDiscoveryPreferenceIfNeededLocked()) {
                 try {
-                    mMediaRouterService.setDiscoveryRequest2(mClient, mDiscoveryPreference);
+                    mMediaRouterService.setDiscoveryRequestWithRouter2(mStub, mDiscoveryPreference);
                 } catch (RemoteException ex) {
                     Log.e(TAG, "registerRouteCallback: Unable to set discovery request.");
                 }
@@ -214,24 +214,26 @@
         }
 
         synchronized (sRouterLock) {
-            if (mClient != null) {
-                if (updateDiscoveryPreferenceIfNeededLocked()) {
-                    try {
-                        mMediaRouterService.setDiscoveryRequest2(mClient, mDiscoveryPreference);
-                    } catch (RemoteException ex) {
-                        Log.e(TAG, "unregisterRouteCallback: Unable to set discovery request.");
-                    }
-                }
-                if (mRouteCallbackRecords.size() == 0) {
-                    try {
-                        mMediaRouterService.unregisterClient2(mClient);
-                    } catch (RemoteException ex) {
-                        Log.e(TAG, "Unable to unregister media router.", ex);
-                    }
-                }
-                mShouldUpdateRoutes = true;
-                mClient = null;
+            if (mStub == null) {
+                return;
             }
+            if (updateDiscoveryPreferenceIfNeededLocked()) {
+                try {
+                    mMediaRouterService.setDiscoveryRequestWithRouter2(
+                            mStub, mDiscoveryPreference);
+                } catch (RemoteException ex) {
+                    Log.e(TAG, "unregisterRouteCallback: Unable to set discovery request.");
+                }
+            }
+            if (mRouteCallbackRecords.size() == 0) {
+                try {
+                    mMediaRouterService.unregisterRouter2(mStub);
+                } catch (RemoteException ex) {
+                    Log.e(TAG, "Unable to unregister media router.", ex);
+                }
+            }
+            mShouldUpdateRoutes = true;
+            mStub = null;
         }
     }
 
@@ -279,22 +281,21 @@
     }
 
     /**
-     * Registers a callback to get updates on creations and changes of
-     * {@link RoutingController routing controllers}.
+     * Registers a callback to get the result of {@link #transferTo(MediaRoute2Info)}.
      * If you register the same callback twice or more, it will be ignored.
      *
      * @param executor the executor to execute the callback on
      * @param callback the callback to register
-     * @see #unregisterControllerCallback
+     * @see #unregisterTransferCallback
      */
-    public void registerControllerCallback(@NonNull @CallbackExecutor Executor executor,
-            @NonNull RoutingControllerCallback callback) {
+    public void registerTransferCallback(@NonNull @CallbackExecutor Executor executor,
+            @NonNull TransferCallback callback) {
         Objects.requireNonNull(executor, "executor must not be null");
         Objects.requireNonNull(callback, "callback must not be null");
 
-        ControllerCallbackRecord record = new ControllerCallbackRecord(executor, callback);
-        if (!mControllerCallbackRecords.addIfAbsent(record)) {
-            Log.w(TAG, "Ignoring the same controller callback");
+        TransferCallbackRecord record = new TransferCallbackRecord(executor, callback);
+        if (!mTransferCallbackRecords.addIfAbsent(record)) {
+            Log.w(TAG, "registerTransferCallback: Ignoring the same callback");
             return;
         }
     }
@@ -304,13 +305,45 @@
      * If the callback has not been added or been removed already, it is ignored.
      *
      * @param callback the callback to unregister
-     * @see #registerControllerCallback
+     * @see #registerTransferCallback
      */
-    public void unregisterControllerCallback(@NonNull RoutingControllerCallback callback) {
+    public void unregisterTransferCallback(@NonNull TransferCallback callback) {
+        Objects.requireNonNull(callback, "callback must not be null");
+
+        if (!mTransferCallbackRecords.remove(new TransferCallbackRecord(null, callback))) {
+            Log.w(TAG, "unregisterTransferCallback: Ignoring an unknown callback");
+            return;
+        }
+    }
+
+    /**
+     * Registers a {@link ControllerCallback}.
+     * If you register the same callback twice or more, it will be ignored.
+     * @see #unregisterControllerCallback(ControllerCallback)
+     */
+    public void registerControllerCallback(@NonNull @CallbackExecutor Executor executor,
+            @NonNull ControllerCallback callback) {
+        Objects.requireNonNull(executor, "executor must not be null");
+        Objects.requireNonNull(callback, "callback must not be null");
+
+        ControllerCallbackRecord record = new ControllerCallbackRecord(executor, callback);
+        if (!mControllerCallbackRecords.addIfAbsent(record)) {
+            Log.w(TAG, "registerControllerCallback: Ignoring the same callback");
+            return;
+        }
+    }
+
+    /**
+     * Unregisters a {@link ControllerCallback}. The callback will no longer receive
+     * events. If the callback has not been added or been removed already, it is ignored.
+     * @see #registerControllerCallback(Executor, ControllerCallback)
+     */
+    public void unregisterControllerCallback(
+            @NonNull ControllerCallback callback) {
         Objects.requireNonNull(callback, "callback must not be null");
 
         if (!mControllerCallbackRecords.remove(new ControllerCallbackRecord(null, callback))) {
-            Log.w(TAG, "Ignoring unknown controller callback");
+            Log.w(TAG, "unregisterControllerCallback: Ignoring an unknown callback");
             return;
         }
     }
@@ -318,7 +351,7 @@
     /**
      * Sets an {@link OnGetControllerHintsListener} to send hints when creating a
      * {@link RoutingController}. To send the hints, listener should be set <em>BEFORE</em> calling
-     * {@link #requestCreateController(MediaRoute2Info)}.
+     * {@link #transferTo(MediaRoute2Info)}.
      *
      * @param listener A listener to send optional app-specific hints when creating a controller.
      *                 {@code null} for unset.
@@ -328,28 +361,55 @@
     }
 
     /**
-     * Requests the media route provider service to create a {@link RoutingController}
-     * with the given route.
+     * Transfers the current media to the given route.
+     * If it's necessary a new {@link RoutingController} is created or it is handled within
+     * the current routing controller.
      *
-     * @param route the route you want to create a controller with.
-     * @throws IllegalArgumentException if the given route is
-     * {@link MediaRoute2Info#isSystemRoute() system route}
+     * @param route the route you want to transfer the current media to. Pass {@code null} to
+     *              stop routing of the current media.
      *
-     * @see RoutingControllerCallback#onControllerCreated
-     * @see RoutingControllerCallback#onControllerCreationFailed
+     * @see TransferCallback#onTransferred
+     * @see TransferCallback#onTransferFailed
      */
-    public void requestCreateController(@NonNull MediaRoute2Info route) {
-        Objects.requireNonNull(route, "route must not be null");
-        if (route.isSystemRoute()) {
-            throw new IllegalArgumentException("Can't create a route controller with "
-                    + "a system route. Use getSystemController().");
+    public void transferTo(@Nullable MediaRoute2Info route) {
+        List<RoutingController> controllers = getControllers();
+        RoutingController controller = controllers.get(controllers.size() - 1);
+
+        transfer(controller, route);
+    }
+
+    /**
+     * Transfers the media of a routing controller to the given route.
+     * @param controller a routing controller controlling media routing.
+     * @param route the route you want to transfer the media to. Pass {@code null} to stop
+     *              routing controlled by the given controller.
+     * @hide
+     */
+    void transfer(@NonNull RoutingController controller, @Nullable MediaRoute2Info route) {
+        Objects.requireNonNull(controller, "controller must not be null");
+
+        if (route == null) {
+            controller.release();
+            return;
         }
-        // TODO: Check the given route exists
+
+        // TODO: Check thread-safety
+        if (!mRoutes.containsKey(route.getId())) {
+            notifyTransferFailed(route);
+            return;
+        }
+        if (controller.getRoutingSessionInfo().getTransferableRoutes().contains(route.getId())) {
+            controller.transferToRoute(route);
+            return;
+        }
+
+        controller.release();
 
         final int requestId;
         requestId = mControllerCreationRequestCnt.getAndIncrement();
 
-        ControllerCreationRequest request = new ControllerCreationRequest(requestId, route);
+        ControllerCreationRequest request =
+                new ControllerCreationRequest(requestId, controller, route);
         mControllerCreationRequests.add(request);
 
         OnGetControllerHintsListener listener = mOnGetControllerHintsListener;
@@ -361,15 +421,16 @@
             }
         }
 
-        Client2 client;
+        MediaRouter2Stub stub;
         synchronized (sRouterLock) {
-            client = mClient;
+            stub = mStub;
         }
-        if (client != null) {
+        if (stub != null) {
             try {
-                mMediaRouterService.requestCreateSession(client, route, requestId, controllerHints);
+                mMediaRouterService.requestCreateSessionWithRouter2(
+                        stub, route, requestId, controllerHints);
             } catch (RemoteException ex) {
-                Log.e(TAG, "Unable to request to create controller.", ex);
+                Log.e(TAG, "transfer: Unable to request to create controller.", ex);
                 mHandler.sendMessage(obtainMessage(MediaRouter2::createControllerOnHandler,
                         MediaRouter2.this, null, requestId));
             }
@@ -383,7 +444,7 @@
      * Note: The system controller can't be released. Calling {@link RoutingController#release()}
      * will be ignored.
      * <p>
-     * This method will always return the same instance.
+     * This method always returns the same instance.
      */
     @NonNull
     public RoutingController getSystemController() {
@@ -412,32 +473,6 @@
     }
 
     /**
-     * Sends a media control request to be performed asynchronously by the route's destination.
-     *
-     * @param route the route that will receive the control request
-     * @param request the media control request
-     * @hide
-     */
-    //TODO: Discuss what to use for request (e.g., Intent? Request class?)
-    //TODO: Provide a way to obtain the result
-    public void sendControlRequest(@NonNull MediaRoute2Info route, @NonNull Intent request) {
-        Objects.requireNonNull(route, "route must not be null");
-        Objects.requireNonNull(request, "request must not be null");
-
-        Client2 client;
-        synchronized (sRouterLock) {
-            client = mClient;
-        }
-        if (client != null) {
-            try {
-                mMediaRouterService.sendControlRequest(client, route, request);
-            } catch (RemoteException ex) {
-                Log.e(TAG, "Unable to send control request.", ex);
-            }
-        }
-    }
-
-    /**
      * Requests a volume change for the route asynchronously.
      * <p>
      * It may have no effect if the route is currently not selected.
@@ -446,16 +481,16 @@
      * @param volume The new volume value between 0 and {@link MediaRoute2Info#getVolumeMax}.
      * @hide
      */
-    public void requestSetVolume(@NonNull MediaRoute2Info route, int volume) {
+    public void setRouteVolume(@NonNull MediaRoute2Info route, int volume) {
         Objects.requireNonNull(route, "route must not be null");
 
-        Client2 client;
+        MediaRouter2Stub stub;
         synchronized (sRouterLock) {
-            client = mClient;
+            stub = mStub;
         }
-        if (client != null) {
+        if (stub != null) {
             try {
-                mMediaRouterService.requestSetVolume2(client, route, volume);
+                mMediaRouterService.setRouteVolumeWithRouter2(stub, route, volume);
             } catch (RemoteException ex) {
                 Log.e(TAG, "Unable to send control request.", ex);
             }
@@ -471,7 +506,8 @@
         synchronized (sRouterLock) {
             for (MediaRoute2Info route : routes) {
                 mRoutes.put(route.getId(), route);
-                if (route.hasAnyFeatures(mDiscoveryPreference.getPreferredFeatures())) {
+                if (route.isSystemRoute()
+                        || route.hasAnyFeatures(mDiscoveryPreference.getPreferredFeatures())) {
                     addedRoutes.add(route);
                 }
             }
@@ -487,7 +523,8 @@
         synchronized (sRouterLock) {
             for (MediaRoute2Info route : routes) {
                 mRoutes.remove(route.getId());
-                if (route.hasAnyFeatures(mDiscoveryPreference.getPreferredFeatures())) {
+                if (route.isSystemRoute()
+                        || route.hasAnyFeatures(mDiscoveryPreference.getPreferredFeatures())) {
                     removedRoutes.add(route);
                 }
             }
@@ -503,7 +540,8 @@
         synchronized (sRouterLock) {
             for (MediaRoute2Info route : routes) {
                 mRoutes.put(route.getId(), route);
-                if (route.hasAnyFeatures(mDiscoveryPreference.getPreferredFeatures())) {
+                if (route.isSystemRoute()
+                        || route.hasAnyFeatures(mDiscoveryPreference.getPreferredFeatures())) {
                     changedRoutes.add(route);
                 }
             }
@@ -514,9 +552,9 @@
     }
 
     /**
-     * Creates a controller and calls the {@link RoutingControllerCallback#onControllerCreated}.
+     * Creates a controller and calls the {@link TransferCallback#onTransferred}.
      * If the controller creation has failed, then it calls
-     * {@link RoutingControllerCallback#onControllerCreationFailed}.
+     * {@link TransferCallback#onTransferFailed}.
      * <p>
      * Pass {@code null} to sessionInfo for the failure case.
      */
@@ -537,14 +575,14 @@
             if (sessionInfo == null) {
                 // TODO: We may need to distinguish between failure and rejection.
                 //       One way can be introducing 'reason'.
-                notifyControllerCreationFailed(requestedRoute);
+                notifyTransferFailed(requestedRoute);
                 return;
             } else if (!sessionInfo.getSelectedRoutes().contains(requestedRoute.getId())) {
                 Log.w(TAG, "The session does not contain the requested route. "
                         + "(requestedRouteId=" + requestedRoute.getId()
                         + ", actualRoutes=" + sessionInfo.getSelectedRoutes()
                         + ")");
-                notifyControllerCreationFailed(requestedRoute);
+                notifyTransferFailed(requestedRoute);
                 return;
             } else if (!TextUtils.equals(requestedRoute.getProviderId(),
                     sessionInfo.getProviderId())) {
@@ -552,17 +590,18 @@
                         + "(requested route's providerId=" + requestedRoute.getProviderId()
                         + ", actual providerId=" + sessionInfo.getProviderId()
                         + ")");
-                notifyControllerCreationFailed(requestedRoute);
+                notifyTransferFailed(requestedRoute);
                 return;
             }
         }
 
         if (sessionInfo != null) {
-            RoutingController controller = new RoutingController(sessionInfo);
+            RoutingController newController = new RoutingController(sessionInfo);
             synchronized (sRouterLock) {
-                mRoutingControllers.put(controller.getId(), controller);
+                mRoutingControllers.put(newController.getId(), newController);
             }
-            notifyControllerCreated(controller);
+            notifyTransferred(matchingRequest != null ? matchingRequest.mController :
+                    getSystemController(), newController);
         }
     }
 
@@ -643,8 +682,8 @@
     private List<MediaRoute2Info> filterRoutes(List<MediaRoute2Info> routes,
             RouteDiscoveryPreference discoveryRequest) {
         return routes.stream()
-                .filter(
-                        route -> route.hasAnyFeatures(discoveryRequest.getPreferredFeatures()))
+                .filter(route -> route.isSystemRoute()
+                        || route.hasAnyFeatures(discoveryRequest.getPreferredFeatures()))
                 .collect(Collectors.toList());
     }
 
@@ -678,31 +717,32 @@
         }
     }
 
-    private void notifyControllerCreated(RoutingController controller) {
-        for (ControllerCallbackRecord record: mControllerCallbackRecords) {
+    private void notifyTransferred(RoutingController oldController,
+            RoutingController newController) {
+        for (TransferCallbackRecord record: mTransferCallbackRecords) {
             record.mExecutor.execute(
-                    () -> record.mControllerCallback.onControllerCreated(controller));
+                    () -> record.mTransferCallback.onTransferred(oldController,
+                            newController));
         }
     }
 
-    private void notifyControllerCreationFailed(MediaRoute2Info route) {
-        for (ControllerCallbackRecord record: mControllerCallbackRecords) {
+    private void notifyTransferFailed(MediaRoute2Info route) {
+        for (TransferCallbackRecord record: mTransferCallbackRecords) {
             record.mExecutor.execute(
-                    () -> record.mControllerCallback.onControllerCreationFailed(route));
+                    () -> record.mTransferCallback.onTransferFailed(route));
         }
     }
 
     private void notifyControllerUpdated(RoutingController controller) {
         for (ControllerCallbackRecord record: mControllerCallbackRecords) {
-            record.mExecutor.execute(
-                    () -> record.mControllerCallback.onControllerUpdated(controller));
+            record.mExecutor.execute(() -> record.mCallback.onControllerUpdated(controller));
         }
     }
 
     private void notifyControllerReleased(RoutingController controller) {
-        for (ControllerCallbackRecord record: mControllerCallbackRecords) {
+        for (TransferCallbackRecord record: mTransferCallbackRecords) {
             record.mExecutor.execute(
-                    () -> record.mControllerCallback.onControllerReleased(controller));
+                    () -> record.mTransferCallback.onTransferred(controller, null));
         }
     }
 
@@ -735,48 +775,28 @@
     }
 
     /**
-     * Callback for receiving a result of {@link RoutingController} creation and updates.
+     * Callback for receiving events on media transfer.
      */
-    public static class RoutingControllerCallback {
+    public static class TransferCallback {
         /**
-         * Called when the {@link RoutingController} is created.
-         * A {@link RoutingController} can be created by calling
-         * {@link #requestCreateController(MediaRoute2Info)}, or by the system.
+         * Called when a media is transferred between two different routing controllers.
+         * This can happen by calling {@link #transferTo(MediaRoute2Info)} or
+         * {@link RoutingController#release()}.
          *
-         * @param controller the controller to control routes
+         * @param oldController the previous controller that controlled routing.
+         * @param newController the new controller to control routing or {@code null} if the
+         *                      previous controller is released.
+         * @see #transferTo(MediaRoute2Info)
          */
-        public void onControllerCreated(@NonNull RoutingController controller) {}
+        public void onTransferred(@NonNull RoutingController oldController,
+                @Nullable RoutingController newController) {}
 
         /**
-         * Called when the controller creation request failed.
+         * Called when {@link #transferTo(MediaRoute2Info)} failed.
          *
-         * @param requestedRoute the route info which was used for the creation request
+         * @param requestedRoute the route info which was used for the transfer.
          */
-        public void onControllerCreationFailed(@NonNull MediaRoute2Info requestedRoute) {}
-
-        /**
-         * Called when the controller is updated.
-         *
-         * @param controller the updated controller. Can be the system controller.
-         * @see #getSystemController()
-         */
-        public void onControllerUpdated(@NonNull RoutingController controller) {}
-
-        /**
-         * Called when a routing controller is released. It can be released in two cases:
-         * <ul>
-         *     <li>When {@link RoutingController#release()} is called.</li>
-         *     <li>When the remote session in the provider is destroyed.</li>
-         * </ul>
-         * {@link RoutingController#isReleased()} will always return {@code true}
-         * for the {@code controller} here.
-         *
-         * @see RoutingController#release()
-         * @see RoutingController#isReleased()
-         */
-        // TODO: Add tests for checking whether this method is called.
-        // TODO: When service process dies, this should be called.
-        public void onControllerReleased(@NonNull RoutingController controller) {}
+        public void onTransferFailed(@NonNull MediaRoute2Info requestedRoute) {}
     }
 
     /**
@@ -790,8 +810,8 @@
          * The {@link Bundle} returned here will be sent to media route provider service as a hint.
          * <p>
          * To send hints when creating the controller, set the listener before calling
-         * {@link #requestCreateController(MediaRoute2Info)}. The method will be called
-         * on the same thread which calls {@link #requestCreateController(MediaRoute2Info)}.
+         * {@link #transferTo(MediaRoute2Info)}. The method will be called
+         * on the same thread which calls {@link #transferTo(MediaRoute2Info)}.
          *
          * @param route The route to create controller with
          * @return An optional bundle of app-specific arguments to send to the provider,
@@ -804,9 +824,23 @@
     }
 
     /**
+     * Callback for receiving {@link RoutingController} updates.
+     */
+    public static class ControllerCallback {
+        /**
+         * Called when a controller is updated. (e.g., the selected routes of the
+         * controller is changed or the volume of the controller is changed.)
+         *
+         * @param controller the updated controller. Can be the system controller.
+         * @see #getSystemController()
+         */
+        public void onControllerUpdated(@NonNull RoutingController controller) { }
+    }
+
+    /**
      * A class to control media routing session in media route provider.
-     * For example, selecting/deselcting/transferring routes to session can be done through this
-     * class. Instances are created by {@link #requestCreateController(MediaRoute2Info)}.
+     * For example, selecting/deselecting/transferring routes to a session can be done through this
+     * class. Instances are created by {@link #transferTo(MediaRoute2Info)}.
      */
     public class RoutingController {
         private final Object mControllerLock = new Object();
@@ -822,7 +856,7 @@
         }
 
         /**
-         * @return the ID of the controller
+         * @return the ID of the controller. It is globally unique.
          */
         @NonNull
         public String getId() {
@@ -846,9 +880,11 @@
          */
         @NonNull
         public List<MediaRoute2Info> getSelectedRoutes() {
+            List<String> selectedRouteIds;
             synchronized (mControllerLock) {
-                return getRoutesWithIdsLocked(mSessionInfo.getSelectedRoutes());
+                selectedRouteIds = mSessionInfo.getSelectedRoutes();
             }
+            return getRoutesWithIds(selectedRouteIds);
         }
 
         /**
@@ -856,9 +892,11 @@
          */
         @NonNull
         public List<MediaRoute2Info> getSelectableRoutes() {
+            List<String> selectableRouteIds;
             synchronized (mControllerLock) {
-                return getRoutesWithIdsLocked(mSessionInfo.getSelectableRoutes());
+                selectableRouteIds = mSessionInfo.getSelectableRoutes();
             }
+            return getRoutesWithIds(selectableRouteIds);
         }
 
         /**
@@ -866,18 +904,47 @@
          */
         @NonNull
         public List<MediaRoute2Info> getDeselectableRoutes() {
+            List<String> deselectableRouteIds;
             synchronized (mControllerLock) {
-                return getRoutesWithIdsLocked(mSessionInfo.getDeselectableRoutes());
+                deselectableRouteIds = mSessionInfo.getDeselectableRoutes();
+            }
+            return getRoutesWithIds(deselectableRouteIds);
+        }
+
+        /**
+         * Gets information about how volume is handled on the session.
+         *
+         * @return {@link MediaRoute2Info#PLAYBACK_VOLUME_FIXED} or
+         * {@link MediaRoute2Info#PLAYBACK_VOLUME_VARIABLE}
+         */
+        @MediaRoute2Info.PlaybackVolume
+        public int getVolumeHandling() {
+            synchronized (mControllerLock) {
+                return mSessionInfo.getVolumeHandling();
             }
         }
 
         /**
-         * @return the unmodifiable list of transferrable routes for the session.
+         * Gets the maximum volume of the session.
          */
-        @NonNull
-        public List<MediaRoute2Info> getTransferrableRoutes() {
+        public int getVolumeMax() {
             synchronized (mControllerLock) {
-                return getRoutesWithIdsLocked(mSessionInfo.getTransferrableRoutes());
+                return mSessionInfo.getVolumeMax();
+            }
+        }
+
+        /**
+         * Gets the current volume of the session.
+         * <p>
+         * When it's available, it represents the volume of routing session, which is a group
+         * of selected routes. To get the volume of a route,
+         * use {@link MediaRoute2Info#getVolume()}.
+         * </p>
+         * @see MediaRoute2Info#getVolume()
+         */
+        public int getVolume() {
+            synchronized (mControllerLock) {
+                return mSessionInfo.getVolume();
             }
         }
 
@@ -903,9 +970,10 @@
          * </ul>
          * If the route doesn't meet any of above conditions, it will be ignored.
          *
+         * @see #deselectRoute(MediaRoute2Info)
          * @see #getSelectedRoutes()
          * @see #getSelectableRoutes()
-         * @see RoutingControllerCallback#onControllerUpdated
+         * @see ControllerCallback#onControllerUpdated
          */
         public void selectRoute(@NonNull MediaRoute2Info route) {
             Objects.requireNonNull(route, "route must not be null");
@@ -928,13 +996,13 @@
                 return;
             }
 
-            Client2 client;
+            MediaRouter2Stub stub;
             synchronized (sRouterLock) {
-                client = mClient;
+                stub = mStub;
             }
-            if (client != null) {
+            if (stub != null) {
                 try {
-                    mMediaRouterService.selectRoute(client, getId(), route);
+                    mMediaRouterService.selectRouteWithRouter2(stub, getId(), route);
                 } catch (RemoteException ex) {
                     Log.e(TAG, "Unable to select route for session.", ex);
                 }
@@ -952,7 +1020,7 @@
          *
          * @see #getSelectedRoutes()
          * @see #getDeselectableRoutes()
-         * @see RoutingControllerCallback#onControllerUpdated
+         * @see ControllerCallback#onControllerUpdated
          */
         public void deselectRoute(@NonNull MediaRoute2Info route) {
             Objects.requireNonNull(route, "route must not be null");
@@ -975,13 +1043,13 @@
                 return;
             }
 
-            Client2 client;
+            MediaRouter2Stub stub;
             synchronized (sRouterLock) {
-                client = mClient;
+                stub = mStub;
             }
-            if (client != null) {
+            if (stub != null) {
                 try {
-                    mMediaRouterService.deselectRoute(client, getId(), route);
+                    mMediaRouterService.deselectRouteWithRouter2(stub, getId(), route);
                 } catch (RemoteException ex) {
                     Log.e(TAG, "Unable to remove route from session.", ex);
                 }
@@ -992,44 +1060,42 @@
          * Transfers to a given route for the remote session. The given route must satisfy
          * all of the following conditions:
          * <ul>
-         * <li>ID should not be included in {@link #getSelectedRoutes()}</li>
-         * <li>ID should be included in {@link #getTransferrableRoutes()}</li>
+         * <li>ID should not be included in {@link RoutingSessionInfo#getSelectedRoutes()}</li>
+         * <li>ID should be included in {@link RoutingSessionInfo#getTransferableRoutes()}</li>
          * </ul>
          * If the route doesn't meet any of above conditions, it will be ignored.
          *
-         * @see #getSelectedRoutes()
-         * @see #getTransferrableRoutes()
-         * @see RoutingControllerCallback#onControllerUpdated
+         * @see RoutingSessionInfo#getSelectedRoutes()
+         * @see RoutingSessionInfo#getTransferableRoutes()
+         * @see ControllerCallback#onControllerUpdated
          */
-        public void transferToRoute(@NonNull MediaRoute2Info route) {
+        void transferToRoute(@NonNull MediaRoute2Info route) {
             Objects.requireNonNull(route, "route must not be null");
             synchronized (mControllerLock) {
                 if (mIsReleased) {
                     Log.w(TAG, "transferToRoute() called on released controller. Ignoring.");
                     return;
                 }
+
+                if (mSessionInfo.getSelectedRoutes().contains(route.getId())) {
+                    Log.w(TAG, "Ignoring transferring to a route that is already added. "
+                            + "route=" + route);
+                    return;
+                }
+
+                if (!mSessionInfo.getTransferableRoutes().contains(route.getId())) {
+                    Log.w(TAG, "Ignoring transferring to a non-transferrable route=" + route);
+                    return;
+                }
             }
 
-            List<MediaRoute2Info> selectedRoutes = getSelectedRoutes();
-            if (checkRouteListContainsRouteId(selectedRoutes, route.getId())) {
-                Log.w(TAG, "Ignoring transferring to a route that is already added. route="
-                        + route);
-                return;
-            }
-
-            List<MediaRoute2Info> transferrableRoutes = getTransferrableRoutes();
-            if (!checkRouteListContainsRouteId(transferrableRoutes, route.getId())) {
-                Log.w(TAG, "Ignoring transferring to a non-transferrable route=" + route);
-                return;
-            }
-
-            Client2 client;
+            MediaRouter2Stub stub;
             synchronized (sRouterLock) {
-                client = mClient;
+                stub = mStub;
             }
-            if (client != null) {
+            if (stub != null) {
                 try {
-                    mMediaRouterService.transferToRoute(client, getId(), route);
+                    mMediaRouterService.transferToRouteWithRouter2(stub, getId(), route);
                 } catch (RemoteException ex) {
                     Log.e(TAG, "Unable to transfer to route for session.", ex);
                 }
@@ -1037,6 +1103,42 @@
         }
 
         /**
+         * Requests a volume change for the remote session asynchronously.
+         *
+         * @param volume The new volume value between 0 and {@link RoutingController#getVolumeMax}
+         *               (inclusive).
+         * @see #getVolume()
+         */
+        public void setVolume(int volume) {
+            if (getVolumeHandling() == MediaRoute2Info.PLAYBACK_VOLUME_FIXED) {
+                Log.w(TAG, "setVolume: the routing session has fixed volume. Ignoring.");
+                return;
+            }
+            if (volume < 0 || volume > getVolumeMax()) {
+                Log.w(TAG, "setVolume: the target volume is out of range. Ignoring");
+                return;
+            }
+
+            synchronized (mControllerLock) {
+                if (mIsReleased) {
+                    Log.w(TAG, "setVolume is called on released controller. Ignoring.");
+                    return;
+                }
+            }
+            MediaRouter2Stub stub;
+            synchronized (sRouterLock) {
+                stub = mStub;
+            }
+            if (stub != null) {
+                try {
+                    mMediaRouterService.setSessionVolumeWithRouter2(stub, getId(), volume);
+                } catch (RemoteException ex) {
+                    Log.e(TAG, "setVolume: Failed to deliver request.", ex);
+                }
+            }
+        }
+
+        /**
          * Release this controller and corresponding session.
          * Any operations on this controller after calling this method will be ignored.
          * The devices that are playing media will stop playing it.
@@ -1051,20 +1153,20 @@
                 mIsReleased = true;
             }
 
-            Client2 client;
+            MediaRouter2Stub stub;
             boolean removed;
             synchronized (sRouterLock) {
                 removed = mRoutingControllers.remove(getId(), this);
-                client = mClient;
+                stub = mStub;
             }
 
             if (removed) {
                 mHandler.post(() -> notifyControllerReleased(RoutingController.this));
             }
 
-            if (client != null) {
+            if (stub != null) {
                 try {
-                    mMediaRouterService.releaseSession(client, getId());
+                    mMediaRouterService.releaseSessionWithRouter2(stub, getId());
                 } catch (RemoteException ex) {
                     Log.e(TAG, "Unable to notify of controller release", ex);
                 }
@@ -1080,8 +1182,6 @@
                     .map(MediaRoute2Info::getId).collect(Collectors.toList());
             List<String> deselectableRoutes = getDeselectableRoutes().stream()
                     .map(MediaRoute2Info::getId).collect(Collectors.toList());
-            List<String> transferrableRoutes = getTransferrableRoutes().stream()
-                    .map(MediaRoute2Info::getId).collect(Collectors.toList());
 
             StringBuilder result = new StringBuilder()
                     .append("RoutingController{ ")
@@ -1095,19 +1195,12 @@
                     .append(", deselectableRoutes={")
                     .append(deselectableRoutes)
                     .append("}")
-                    .append(", transferrableRoutes={")
-                    .append(transferrableRoutes)
-                    .append("}")
                     .append(" }");
             return result.toString();
         }
 
-        /**
-         * TODO: Change this to package private. (Hidden for debugging purposes)
-         * @hide
-         */
         @NonNull
-        public RoutingSessionInfo getRoutingSessionInfo() {
+        RoutingSessionInfo getRoutingSessionInfo() {
             synchronized (mControllerLock) {
                 return mSessionInfo;
             }
@@ -1119,20 +1212,12 @@
             }
         }
 
-        // TODO: This method uses two locks (mLock outside, sLock inside).
-        //       Check if there is any possiblity of deadlock.
-        private List<MediaRoute2Info> getRoutesWithIdsLocked(List<String> routeIds) {
-            List<MediaRoute2Info> routes = new ArrayList<>();
+        private List<MediaRoute2Info> getRoutesWithIds(List<String> routeIds) {
             synchronized (sRouterLock) {
-                // TODO: Maybe able to change using Collection.stream()?
-                for (String routeId : routeIds) {
-                    MediaRoute2Info route = mRoutes.get(routeId);
-                    if (route != null) {
-                        routes.add(route);
-                    }
-                }
+                return routeIds.stream().map(mRoutes::get)
+                        .filter(Objects::nonNull)
+                        .collect(Collectors.toList());
             }
-            return Collections.unmodifiableList(routes);
         }
     }
 
@@ -1153,7 +1238,7 @@
         }
     }
 
-    final class RouteCallbackRecord {
+    static final class RouteCallbackRecord {
         public final Executor mExecutor;
         public final RouteCallback mRouteCallback;
         public final RouteDiscoveryPreference mPreference;
@@ -1182,13 +1267,41 @@
         }
     }
 
-    final class ControllerCallbackRecord {
+    static final class TransferCallbackRecord {
         public final Executor mExecutor;
-        public final RoutingControllerCallback mControllerCallback;
+        public final TransferCallback mTransferCallback;
 
-        ControllerCallbackRecord(@NonNull Executor executor,
-                @NonNull RoutingControllerCallback controllerCallback) {
-            mControllerCallback = controllerCallback;
+        TransferCallbackRecord(@NonNull Executor executor,
+                @NonNull TransferCallback transferCallback) {
+            mTransferCallback = transferCallback;
+            mExecutor = executor;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof TransferCallbackRecord)) {
+                return false;
+            }
+            return mTransferCallback
+                    == ((TransferCallbackRecord) obj).mTransferCallback;
+        }
+
+        @Override
+        public int hashCode() {
+            return mTransferCallback.hashCode();
+        }
+    }
+
+    static final class ControllerCallbackRecord {
+        public final Executor mExecutor;
+        public final ControllerCallback mCallback;
+
+        ControllerCallbackRecord(@Nullable Executor executor,
+                @NonNull ControllerCallback callback) {
+            mCallback = callback;
             mExecutor = executor;
         }
 
@@ -1200,27 +1313,29 @@
             if (!(obj instanceof ControllerCallbackRecord)) {
                 return false;
             }
-            return mControllerCallback
-                    == ((ControllerCallbackRecord) obj).mControllerCallback;
+            return mCallback == ((ControllerCallbackRecord) obj).mCallback;
         }
 
         @Override
         public int hashCode() {
-            return mControllerCallback.hashCode();
+            return mCallback.hashCode();
         }
     }
 
-    final class ControllerCreationRequest {
-        public final MediaRoute2Info mRoute;
+    static final class ControllerCreationRequest {
         public final int mRequestId;
+        public final RoutingController mController;
+        public final MediaRoute2Info mRoute;
 
-        ControllerCreationRequest(int requestId, @NonNull MediaRoute2Info route) {
-            mRoute = route;
+        ControllerCreationRequest(int requestId, @NonNull RoutingController controller,
+                @NonNull MediaRoute2Info route) {
             mRequestId = requestId;
+            mController = controller;
+            mRoute = route;
         }
     }
 
-    class Client2 extends IMediaRouter2Client.Stub {
+    class MediaRouter2Stub extends IMediaRouter2.Stub {
         @Override
         public void notifyRestoreRoute() throws RemoteException {}
 
diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java
index b1f930d..636ee92 100644
--- a/media/java/android/media/MediaRouter2Manager.java
+++ b/media/java/android/media/MediaRouter2Manager.java
@@ -22,6 +22,8 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
+import android.media.session.MediaController;
+import android.media.session.MediaSessionManager;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.RemoteException;
@@ -53,6 +55,8 @@
     @GuardedBy("sLock")
     private static MediaRouter2Manager sInstance;
 
+    private final MediaSessionManager mMediaSessionManager;
+
     final String mPackageName;
 
     private Context mContext;
@@ -89,6 +93,8 @@
         mContext = context.getApplicationContext();
         mMediaRouterService = IMediaRouterService.Stub.asInterface(
                 ServiceManager.getService(Context.MEDIA_ROUTER_SERVICE));
+        mMediaSessionManager = (MediaSessionManager) context
+                .getSystemService(Context.MEDIA_SESSION_SERVICE);
         mPackageName = mContext.getPackageName();
         mHandler = new Handler(context.getMainLooper());
     }
@@ -150,6 +156,23 @@
         }
     }
 
+    /**
+     * Gets a {@link android.media.session.MediaController} associated with the
+     * given routing session.
+     * If there is no matching media session, {@code null} is returned.
+     */
+    @Nullable
+    public MediaController getMediaControllerForRoutingSession(
+            @NonNull RoutingSessionInfo sessionInfo) {
+        for (MediaController controller : mMediaSessionManager.getActiveSessions(null)) {
+            String volumeControlId = controller.getPlaybackInfo().getVolumeControlId();
+            if (TextUtils.equals(sessionInfo.getId(), volumeControlId)) {
+                return controller;
+            }
+        }
+        return null;
+    }
+
     //TODO: Use cache not to create array. For now, it's unclear when to purge the cache.
     //Do this when we finalize how to set control categories.
     /**
@@ -178,24 +201,24 @@
     }
 
     /**
-     * Gets routing controllers of an application with the given package name.
+     * Gets routing sessions of an application with the given package name.
      * The first element of the returned list is the system routing controller.
      *
      * @see MediaRouter2#getSystemController()
      */
     @NonNull
-    public List<RoutingController> getRoutingControllers(@NonNull String packageName) {
+    public List<RoutingSessionInfo> getRoutingSessions(@NonNull String packageName) {
         Objects.requireNonNull(packageName, "packageName must not be null");
 
-        List<RoutingController> controllers = new ArrayList<>();
+        List<RoutingSessionInfo> sessions = new ArrayList<>();
 
         for (RoutingSessionInfo sessionInfo : getActiveSessions()) {
             if (sessionInfo.isSystemSession()
                     || TextUtils.equals(sessionInfo.getClientPackageName(), packageName)) {
-                controllers.add(new RoutingController(sessionInfo));
+                sessions.add(sessionInfo);
             }
         }
-        return controllers;
+        return sessions;
     }
 
     /**
@@ -236,7 +259,7 @@
     /**
      * Selects media route for the specified package name.
      *
-     * If the given route is {@link RoutingController#getTransferrableRoutes() a transferrable
+     * If the given route is {@link RoutingController#getTransferableRoutes() a transferable
      * route} of a routing session of the application, the session will be transferred to
      * the route. If not, a new routing session will be created.
      *
@@ -247,13 +270,22 @@
         Objects.requireNonNull(packageName, "packageName must not be null");
         Objects.requireNonNull(route, "route must not be null");
 
-        for (RoutingController controller : getRoutingControllers(packageName)) {
-            if (controller.getSessionInfo().getTransferrableRoutes().contains(route.getId())) {
-                controller.transferToRoute(route);
-                return;
+        boolean transferred = false;
+        //TODO: instead of release all controllers, add an API to specify controllers that
+        // should be released (or is the system controller).
+        for (RoutingSessionInfo sessionInfo : getRoutingSessions(packageName)) {
+            if (!transferred && sessionInfo.getTransferableRoutes().contains(route.getId())) {
+                new RoutingController(sessionInfo).transferToRoute(route);
+                transferred = true;
+            } else if (!sessionInfo.isSystemSession()) {
+                new RoutingController(sessionInfo).release();
             }
         }
 
+        if (transferred) {
+            return;
+        }
+
         Client client;
         synchronized (sLock) {
             client = mClient;
@@ -261,7 +293,7 @@
         if (client != null) {
             try {
                 int requestId = mNextRequestId.getAndIncrement();
-                mMediaRouterService.requestCreateClientSession(
+                mMediaRouterService.requestCreateSessionWithManager(
                         client, packageName, route, requestId);
                 //TODO: release the previous session?
             } catch (RemoteException ex) {
@@ -272,22 +304,72 @@
 
     /**
      * Requests a volume change for a route asynchronously.
+     */
+    //TODO: remove this.
+    public void requestSetVolume(MediaRoute2Info route, int volume) {
+        setRouteVolume(route, volume);
+    }
+
+    /**
+     * Requests a volume change for a route asynchronously.
      * <p>
      * It may have no effect if the route is currently not selected.
      * </p>
      *
-     * @param volume The new volume value between 0 and {@link MediaRoute2Info#getVolumeMax}.
+     * @param volume The new volume value between 0 and {@link MediaRoute2Info#getVolumeMax}
+     *               (inclusive).
      */
-    public void requestSetVolume(@NonNull MediaRoute2Info route, int volume) {
+    public void setRouteVolume(@NonNull MediaRoute2Info route, int volume) {
         Objects.requireNonNull(route, "route must not be null");
 
+        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;
+        }
+
         Client client;
         synchronized (sLock) {
             client = mClient;
         }
         if (client != null) {
             try {
-                mMediaRouterService.requestSetVolume2Manager(client, route, volume);
+                mMediaRouterService.setRouteVolumeWithManager(client, route, volume);
+            } catch (RemoteException ex) {
+                Log.e(TAG, "Unable to send control request.", ex);
+            }
+        }
+    }
+
+    /**
+     * Requests a volume change for a routing session asynchronously.
+     *
+     * @param volume The new volume value between 0 and {@link RoutingSessionInfo#getVolumeMax}
+     *               (inclusive).
+     */
+    public void setSessionVolume(@NonNull RoutingSessionInfo sessionInfo, int volume) {
+        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;
+        }
+
+        Client client;
+        synchronized (sLock) {
+            client = mClient;
+        }
+        if (client != null) {
+            try {
+                mMediaRouterService.setSessionVolumeWithManager(
+                        client, sessionInfo.getId(), volume);
             } catch (RemoteException ex) {
                 Log.e(TAG, "Unable to send control request.", ex);
             }
@@ -371,6 +453,10 @@
             record.mExecutor.execute(() -> record.mCallback
                     .onControlCategoriesChanged(packageName, preferredFeatures));
         }
+        for (CallbackRecord record : mCallbackRecords) {
+            record.mExecutor.execute(() -> record.mCallback
+                    .onPreferredFeaturesChanged(packageName, preferredFeatures));
+        }
     }
 
     /**
@@ -461,13 +547,13 @@
         }
 
         /**
-         * @return the unmodifiable list of transferrable routes for the session.
+         * @return the unmodifiable list of transferable routes for the session.
          */
         @NonNull
-        public List<MediaRoute2Info> getTransferrableRoutes() {
+        public List<MediaRoute2Info> getTransferableRoutes() {
             List<String> routeIds;
             synchronized (mControllerLock) {
-                routeIds = mSessionInfo.getTransferrableRoutes();
+                routeIds = mSessionInfo.getTransferableRoutes();
             }
             return getRoutesWithIds(routeIds);
         }
@@ -507,7 +593,7 @@
             }
             if (client != null) {
                 try {
-                    mMediaRouterService.selectClientRoute(mClient, getSessionId(), route);
+                    mMediaRouterService.selectRouteWithManager(mClient, getSessionId(), route);
                 } catch (RemoteException ex) {
                     Log.e(TAG, "Unable to select route for session.", ex);
                 }
@@ -549,7 +635,7 @@
             }
             if (client != null) {
                 try {
-                    mMediaRouterService.deselectClientRoute(mClient, getSessionId(), route);
+                    mMediaRouterService.deselectRouteWithManager(mClient, getSessionId(), route);
                 } catch (RemoteException ex) {
                     Log.e(TAG, "Unable to remove route from session.", ex);
                 }
@@ -561,12 +647,12 @@
          * all of the following conditions:
          * <ul>
          * <li>ID should not be included in {@link #getSelectedRoutes()}</li>
-         * <li>ID should be included in {@link #getTransferrableRoutes()}</li>
+         * <li>ID should be included in {@link #getTransferableRoutes()}</li>
          * </ul>
          * If the route doesn't meet any of above conditions, it will be ignored.
          *
          * @see #getSelectedRoutes()
-         * @see #getTransferrableRoutes()
+         * @see #getTransferableRoutes()
          */
         public void transferToRoute(@NonNull MediaRoute2Info route) {
             Objects.requireNonNull(route, "route must not be null");
@@ -581,8 +667,8 @@
                 return;
             }
 
-            if (!sessionInfo.getTransferrableRoutes().contains(route.getId())) {
-                Log.w(TAG, "Ignoring transferring to a non-transferrable route=" + route);
+            if (!sessionInfo.getTransferableRoutes().contains(route.getId())) {
+                Log.w(TAG, "Ignoring transferring to a non-transferable route=" + route);
                 return;
             }
 
@@ -592,7 +678,7 @@
             }
             if (client != null) {
                 try {
-                    mMediaRouterService.transferToClientRoute(mClient, getSessionId(), route);
+                    mMediaRouterService.transferToRouteWithManager(mClient, getSessionId(), route);
                 } catch (RemoteException ex) {
                     Log.e(TAG, "Unable to transfer to route for session.", ex);
                 }
@@ -610,7 +696,7 @@
             }
             if (client != null) {
                 try {
-                    mMediaRouterService.releaseClientSession(mClient, getSessionId());
+                    mMediaRouterService.releaseSessionWithManager(mClient, getSessionId());
                 } catch (RemoteException ex) {
                     Log.e(TAG, "Unable to notify of controller release", ex);
                 }
@@ -678,6 +764,7 @@
          */
         public void onSessionsUpdated() {}
 
+        //TODO: remove this
         /**
          * Called when the preferred route features of an app is changed.
          *
@@ -686,6 +773,16 @@
          */
         public void onControlCategoriesChanged(@NonNull String packageName,
                 @NonNull List<String> preferredFeatures) {}
+
+        /**
+         * Called when the preferred route features of an app is changed.
+         *
+         * @param packageName the package name of the application
+         * @param preferredFeatures the list of preferred route features set by an application.
+         */
+        public void onPreferredFeaturesChanged(@NonNull String packageName,
+                @NonNull List<String> preferredFeatures) {}
+
     }
 
     final class CallbackRecord {
diff --git a/media/java/android/media/MediaScannerConnection.java b/media/java/android/media/MediaScannerConnection.java
index 05fa511..2bffe8a 100644
--- a/media/java/android/media/MediaScannerConnection.java
+++ b/media/java/android/media/MediaScannerConnection.java
@@ -156,9 +156,7 @@
             }
             BackgroundThread.getExecutor().execute(() -> {
                 final Uri uri = scanFileQuietly(mProvider, new File(path));
-                if (mClient != null) {
-                    mClient.onScanCompleted(path, uri);
-                }
+                runCallBack(mContext, mClient, path, uri);
             });
         }
     }
@@ -187,9 +185,7 @@
                     .acquireContentProviderClient(MediaStore.AUTHORITY)) {
                 for (String path : paths) {
                     final Uri uri = scanFileQuietly(client, new File(path));
-                    if (callback != null) {
-                        callback.onScanCompleted(path, uri);
-                    }
+                    runCallBack(context, callback, path, uri);
                 }
             }
         });
@@ -206,6 +202,23 @@
         return uri;
     }
 
+    private static void runCallBack(Context context, OnScanCompletedListener callback,
+            String path, Uri uri) {
+        if (callback != null) {
+            // Ignore exceptions from callback to avoid calling app from crashing.
+            // Don't ignore exceptions for apps targeting 'R' or higher.
+            try {
+                callback.onScanCompleted(path, uri);
+            } catch (Throwable e) {
+                if (context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.R) {
+                    throw e;
+                } else {
+                    Log.w(TAG, "Ignoring exception from callback for backward compatibility", e);
+                }
+            }
+        }
+    }
+
     @Deprecated
     static class ClientProxy implements MediaScannerConnectionClient {
         @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.O)
diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java
index d058243..8deb0c4 100644
--- a/media/java/android/media/RingtoneManager.java
+++ b/media/java/android/media/RingtoneManager.java
@@ -512,15 +512,19 @@
      * @return The position of the {@link Uri}, or -1 if it cannot be found.
      */
     public int getRingtonePosition(Uri ringtoneUri) {
-        if (ringtoneUri == null) return -1;
-        final long ringtoneId = ContentUris.parseId(ringtoneUri);
-        
-        final Cursor cursor = getCursor();
-        cursor.moveToPosition(-1);
-        while (cursor.moveToNext()) {
-            if (ringtoneId == cursor.getLong(ID_COLUMN_INDEX)) {
-                return cursor.getPosition();
+        try {
+            if (ringtoneUri == null) return -1;
+            final long ringtoneId = ContentUris.parseId(ringtoneUri);
+
+            final Cursor cursor = getCursor();
+            cursor.moveToPosition(-1);
+            while (cursor.moveToNext()) {
+                if (ringtoneId == cursor.getLong(ID_COLUMN_INDEX)) {
+                    return cursor.getPosition();
+                }
             }
+        } catch (NumberFormatException e) {
+            Log.e(TAG, "NumberFormatException while getting ringtone position, returning -1", e);
         }
         return -1;
     }
diff --git a/media/java/android/media/RouteDiscoveryPreference.java b/media/java/android/media/RouteDiscoveryPreference.java
index ebcb9ed..2e038e6 100644
--- a/media/java/android/media/RouteDiscoveryPreference.java
+++ b/media/java/android/media/RouteDiscoveryPreference.java
@@ -31,8 +31,16 @@
 import java.util.Set;
 
 /**
- * A media route discovery preference describing the kinds of routes that media router
+ * A media route discovery preference describing the features of routes that media router
  * would like to discover and whether to perform active scanning.
+ * <p>
+ * When {@link MediaRouter2} instances set discovery preferences by calling
+ * {@link MediaRouter2#registerRouteCallback}, they are merged into a single discovery preference
+ * and it is delivered to call {@link MediaRoute2ProviderService#onDiscoveryPreferenceChanged}.
+ * </p><p>
+ * According to the given discovery preference, {@link MediaRoute2ProviderService} discovers
+ * routes and publishes them.
+ * </p>
  *
  * @see MediaRouter2#registerRouteCallback
  */
@@ -53,12 +61,12 @@
 
     @NonNull
     private final List<String> mPreferredFeatures;
-    private final boolean mActiveScan;
+    private final boolean mShouldPerformActiveScan;
     @Nullable
     private final Bundle mExtras;
 
     /**
-     * An empty discovery preference.
+     * An empty discovery preference
      * @hide
      */
     public static final RouteDiscoveryPreference EMPTY =
@@ -66,23 +74,39 @@
 
     RouteDiscoveryPreference(@NonNull Builder builder) {
         mPreferredFeatures = builder.mPreferredFeatures;
-        mActiveScan = builder.mActiveScan;
+        mShouldPerformActiveScan = builder.mActiveScan;
         mExtras = builder.mExtras;
     }
 
     RouteDiscoveryPreference(@NonNull Parcel in) {
         mPreferredFeatures = in.createStringArrayList();
-        mActiveScan = in.readBoolean();
+        mShouldPerformActiveScan = in.readBoolean();
         mExtras = in.readBundle();
     }
 
+    /**
+     * Gets the features of routes that media router would like to discover.
+     * <p>
+     * Routes that have at least one of the features will be discovered.
+     * They may include predefined features such as
+     * {@link MediaRoute2Info#FEATURE_LIVE_AUDIO}, {@link MediaRoute2Info#FEATURE_LIVE_VIDEO},
+     * or {@link MediaRoute2Info#FEATURE_REMOTE_PLAYBACK} or custom features defined by a provider.
+     * </p>
+     */
     @NonNull
     public List<String> getPreferredFeatures() {
         return mPreferredFeatures;
     }
 
-    public boolean isActiveScan() {
-        return mActiveScan;
+    /**
+     * Gets whether active scanning should be performed.
+     * <p>
+     * If any of discovery preferences sets this as {@code true}, active scanning will
+     * be performed regardless of other discovery preferences.
+     * </p>
+     */
+    public boolean shouldPerformActiveScan() {
+        return mShouldPerformActiveScan;
     }
 
     /**
@@ -100,7 +124,7 @@
     @Override
     public void writeToParcel(@NonNull Parcel dest, int flags) {
         dest.writeStringList(mPreferredFeatures);
-        dest.writeBoolean(mActiveScan);
+        dest.writeBoolean(mShouldPerformActiveScan);
         dest.writeBundle(mExtras);
     }
 
@@ -112,7 +136,7 @@
                 .append(String.join(", ", mPreferredFeatures))
                 .append("}")
                 .append(", activeScan=")
-                .append(mActiveScan)
+                .append(mShouldPerformActiveScan)
                 .append(" }");
 
         return result.toString();
@@ -128,12 +152,12 @@
         }
         RouteDiscoveryPreference other = (RouteDiscoveryPreference) o;
         return Objects.equals(mPreferredFeatures, other.mPreferredFeatures)
-                && mActiveScan == other.mActiveScan;
+                && mShouldPerformActiveScan == other.mShouldPerformActiveScan;
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(mPreferredFeatures, mActiveScan);
+        return Objects.hash(mPreferredFeatures, mShouldPerformActiveScan);
     }
 
     /**
@@ -154,12 +178,12 @@
             Objects.requireNonNull(preference, "preference must not be null");
 
             mPreferredFeatures = preference.getPreferredFeatures();
-            mActiveScan = preference.isActiveScan();
+            mActiveScan = preference.shouldPerformActiveScan();
             mExtras = preference.getExtras();
         }
 
         /**
-         * A constructor to combine all of the preferences into a single preference .
+         * A constructor to combine all of the preferences into a single preference.
          * It ignores extras of preferences.
          *
          * @hide
@@ -171,13 +195,19 @@
             mActiveScan = false;
             for (RouteDiscoveryPreference preference : preferences) {
                 routeFeatureSet.addAll(preference.mPreferredFeatures);
-                mActiveScan |= preference.mActiveScan;
+                mActiveScan |= preference.mShouldPerformActiveScan;
             }
             mPreferredFeatures = new ArrayList<>(routeFeatureSet);
         }
 
         /**
          * Sets preferred route features to discover.
+         * @param preferredFeatures features of routes that media router would like to discover.
+         *                          May include predefined features
+         *                          such as {@link MediaRoute2Info#FEATURE_LIVE_AUDIO},
+         *                          {@link MediaRoute2Info#FEATURE_LIVE_VIDEO},
+         *                          or {@link MediaRoute2Info#FEATURE_REMOTE_PLAYBACK}
+         *                          or custom features defined by a provider.
          */
         @NonNull
         public Builder setPreferredFeatures(@NonNull List<String> preferredFeatures) {
@@ -188,9 +218,13 @@
 
         /**
          * Sets if active scanning should be performed.
+         * <p>
+         * Since active scanning uses more system resources, set this as {@code true} only
+         * when it's necessary.
+         * </p>
          */
         @NonNull
-        public Builder setActiveScan(boolean activeScan) {
+        public Builder setShouldPerformActiveScan(boolean activeScan) {
             mActiveScan = activeScan;
             return this;
         }
diff --git a/media/java/android/media/RoutingSessionInfo.java b/media/java/android/media/RoutingSessionInfo.java
index 5383ea2..19a46ce 100644
--- a/media/java/android/media/RoutingSessionInfo.java
+++ b/media/java/android/media/RoutingSessionInfo.java
@@ -55,7 +55,12 @@
     final List<String> mSelectedRoutes;
     final List<String> mSelectableRoutes;
     final List<String> mDeselectableRoutes;
-    final List<String> mTransferrableRoutes;
+    final List<String> mTransferableRoutes;
+
+    final int mVolumeHandling;
+    final int mVolumeMax;
+    final int mVolume;
+
     @Nullable
     final Bundle mControlHints;
     final boolean mIsSystemSession;
@@ -74,8 +79,12 @@
                 convertToUniqueRouteIds(builder.mSelectableRoutes));
         mDeselectableRoutes = Collections.unmodifiableList(
                 convertToUniqueRouteIds(builder.mDeselectableRoutes));
-        mTransferrableRoutes = Collections.unmodifiableList(
-                convertToUniqueRouteIds(builder.mTransferrableRoutes));
+        mTransferableRoutes = Collections.unmodifiableList(
+                convertToUniqueRouteIds(builder.mTransferableRoutes));
+
+        mVolumeHandling = builder.mVolumeHandling;
+        mVolumeMax = builder.mVolumeMax;
+        mVolume = builder.mVolume;
 
         mControlHints = builder.mControlHints;
         mIsSystemSession = builder.mIsSystemSession;
@@ -91,7 +100,11 @@
         mSelectedRoutes = ensureList(src.createStringArrayList());
         mSelectableRoutes = ensureList(src.createStringArrayList());
         mDeselectableRoutes = ensureList(src.createStringArrayList());
-        mTransferrableRoutes = ensureList(src.createStringArrayList());
+        mTransferableRoutes = ensureList(src.createStringArrayList());
+
+        mVolumeHandling = src.readInt();
+        mVolumeMax = src.readInt();
+        mVolume = src.readInt();
 
         mControlHints = src.readBundle();
         mIsSystemSession = src.readBoolean();
@@ -180,11 +193,41 @@
     }
 
     /**
-     * Gets the list of ids of transferrable routes for the session.
+     * Gets the list of ids of transferable routes for the session.
      */
     @NonNull
-    public List<String> getTransferrableRoutes() {
-        return mTransferrableRoutes;
+    public List<String> getTransferableRoutes() {
+        return mTransferableRoutes;
+    }
+
+    /**
+     * Gets information about how volume is handled on the session.
+     *
+     * @return {@link MediaRoute2Info#PLAYBACK_VOLUME_FIXED} or
+     * {@link MediaRoute2Info#PLAYBACK_VOLUME_VARIABLE}.
+     */
+    @MediaRoute2Info.PlaybackVolume
+    public int getVolumeHandling() {
+        return mVolumeHandling;
+    }
+
+    /**
+     * Gets the maximum volume of the session.
+     */
+    public int getVolumeMax() {
+        return mVolumeMax;
+    }
+
+    /**
+     * Gets the current volume of the session.
+     * <p>
+     * When it's available, it represents the volume of routing session, which is a group
+     * of selected routes. To get the volume of each route, use {@link MediaRoute2Info#getVolume()}.
+     * </p>
+     * @see MediaRoute2Info#getVolume()
+     */
+    public int getVolume() {
+        return mVolume;
     }
 
     /**
@@ -217,7 +260,10 @@
         dest.writeStringList(mSelectedRoutes);
         dest.writeStringList(mSelectableRoutes);
         dest.writeStringList(mDeselectableRoutes);
-        dest.writeStringList(mTransferrableRoutes);
+        dest.writeStringList(mTransferableRoutes);
+        dest.writeInt(mVolumeHandling);
+        dest.writeInt(mVolumeMax);
+        dest.writeInt(mVolume);
         dest.writeBundle(mControlHints);
         dest.writeBoolean(mIsSystemSession);
     }
@@ -238,13 +284,17 @@
                 && Objects.equals(mSelectedRoutes, other.mSelectedRoutes)
                 && Objects.equals(mSelectableRoutes, other.mSelectableRoutes)
                 && Objects.equals(mDeselectableRoutes, other.mDeselectableRoutes)
-                && Objects.equals(mTransferrableRoutes, other.mTransferrableRoutes);
+                && Objects.equals(mTransferableRoutes, other.mTransferableRoutes)
+                && (mVolumeHandling == other.mVolumeHandling)
+                && (mVolumeMax == other.mVolumeMax)
+                && (mVolume == other.mVolume);
     }
 
     @Override
     public int hashCode() {
         return Objects.hash(mId, mClientPackageName, mProviderId,
-                mSelectedRoutes, mSelectableRoutes, mDeselectableRoutes, mTransferrableRoutes);
+                mSelectedRoutes, mSelectableRoutes, mDeselectableRoutes, mTransferableRoutes,
+                mVolumeMax, mVolumeHandling, mVolume);
     }
 
     @Override
@@ -261,9 +311,12 @@
                 .append(", deselectableRoutes={")
                 .append(String.join(",", mDeselectableRoutes))
                 .append("}")
-                .append(", transferrableRoutes={")
-                .append(String.join(",", mTransferrableRoutes))
+                .append(", transferableRoutes={")
+                .append(String.join(",", mTransferableRoutes))
                 .append("}")
+                .append(", volumeHandling=").append(getVolumeHandling())
+                .append(", volumeMax=").append(getVolumeMax())
+                .append(", volume=").append(getVolume())
                 .append(" }");
         return result.toString();
     }
@@ -297,7 +350,10 @@
         final List<String> mSelectedRoutes;
         final List<String> mSelectableRoutes;
         final List<String> mDeselectableRoutes;
-        final List<String> mTransferrableRoutes;
+        final List<String> mTransferableRoutes;
+        int mVolumeHandling = MediaRoute2Info.PLAYBACK_VOLUME_FIXED;
+        int mVolumeMax;
+        int mVolume;
         Bundle mControlHints;
         boolean mIsSystemSession;
 
@@ -325,7 +381,7 @@
             mSelectedRoutes = new ArrayList<>();
             mSelectableRoutes = new ArrayList<>();
             mDeselectableRoutes = new ArrayList<>();
-            mTransferrableRoutes = new ArrayList<>();
+            mTransferableRoutes = new ArrayList<>();
         }
 
         /**
@@ -344,7 +400,11 @@
             mSelectedRoutes = new ArrayList<>(sessionInfo.mSelectedRoutes);
             mSelectableRoutes = new ArrayList<>(sessionInfo.mSelectableRoutes);
             mDeselectableRoutes = new ArrayList<>(sessionInfo.mDeselectableRoutes);
-            mTransferrableRoutes = new ArrayList<>(sessionInfo.mTransferrableRoutes);
+            mTransferableRoutes = new ArrayList<>(sessionInfo.mTransferableRoutes);
+
+            mVolumeHandling = sessionInfo.mVolumeHandling;
+            mVolumeMax = sessionInfo.mVolumeMax;
+            mVolume = sessionInfo.mVolume;
 
             mControlHints = sessionInfo.mControlHints;
             mIsSystemSession = sessionInfo.mIsSystemSession;
@@ -464,35 +524,65 @@
         }
 
         /**
-         * Clears the transferrable routes.
+         * Clears the transferable routes.
          */
         @NonNull
-        public Builder clearTransferrableRoutes() {
-            mTransferrableRoutes.clear();
+        public Builder clearTransferableRoutes() {
+            mTransferableRoutes.clear();
             return this;
         }
 
         /**
-         * Adds a route to the transferrable routes. The {@code routeId} must not be empty.
+         * Adds a route to the transferable routes. The {@code routeId} must not be empty.
          */
         @NonNull
-        public Builder addTransferrableRoute(@NonNull String routeId) {
+        public Builder addTransferableRoute(@NonNull String routeId) {
             if (TextUtils.isEmpty(routeId)) {
                 throw new IllegalArgumentException("routeId must not be empty");
             }
-            mTransferrableRoutes.add(routeId);
+            mTransferableRoutes.add(routeId);
             return this;
         }
 
         /**
-         * Removes a route from the transferrable routes. The {@code routeId} must not be empty.
+         * Removes a route from the transferable routes. The {@code routeId} must not be empty.
          */
         @NonNull
-        public Builder removeTransferrableRoute(@NonNull String routeId) {
+        public Builder removeTransferableRoute(@NonNull String routeId) {
             if (TextUtils.isEmpty(routeId)) {
                 throw new IllegalArgumentException("routeId must not be empty");
             }
-            mTransferrableRoutes.remove(routeId);
+            mTransferableRoutes.remove(routeId);
+            return this;
+        }
+
+        /**
+         * Sets the session's volume handling.
+         * {@link MediaRoute2Info#PLAYBACK_VOLUME_FIXED} or
+         * {@link MediaRoute2Info#PLAYBACK_VOLUME_VARIABLE}.
+         */
+        @NonNull
+        public RoutingSessionInfo.Builder setVolumeHandling(
+                @MediaRoute2Info.PlaybackVolume int volumeHandling) {
+            mVolumeHandling = volumeHandling;
+            return this;
+        }
+
+        /**
+         * Sets the session's maximum volume, or 0 if unknown.
+         */
+        @NonNull
+        public RoutingSessionInfo.Builder setVolumeMax(int volumeMax) {
+            mVolumeMax = volumeMax;
+            return this;
+        }
+
+        /**
+         * Sets the session's current volume, or 0 if unknown.
+         */
+        @NonNull
+        public RoutingSessionInfo.Builder setVolume(int volume) {
+            mVolume = volume;
             return this;
         }
 
diff --git a/media/java/android/media/VolumeProvider.java b/media/java/android/media/VolumeProvider.java
index ed272d5..7cf63f4 100644
--- a/media/java/android/media/VolumeProvider.java
+++ b/media/java/android/media/VolumeProvider.java
@@ -89,7 +89,7 @@
      *            this provider.
      * @param maxVolume The maximum allowed volume.
      * @param currentVolume The current volume on the output.
-     * @param volumeControlId The volume control id of this provider.
+     * @param volumeControlId The volume control ID of this provider.
      */
     public VolumeProvider(@ControlType int volumeControl, int maxVolume, int currentVolume,
             @Nullable String volumeControlId) {
@@ -142,10 +142,10 @@
     }
 
     /**
-     * Gets the volume control id. It can be used to identify which volume provider is
+     * Gets the volume control ID. It can be used to identify which volume provider is
      * used by the session.
      *
-     * @return the volume control id or {@code null} if it isn't set.
+     * @return the volume control ID or {@code null} if it isn't set.
      */
     @Nullable
     public final String getVolumeControlId() {
diff --git a/media/java/android/media/audiofx/AudioEffect.java b/media/java/android/media/audiofx/AudioEffect.java
index c25a533..2587350 100644
--- a/media/java/android/media/audiofx/AudioEffect.java
+++ b/media/java/android/media/audiofx/AudioEffect.java
@@ -25,7 +25,7 @@
 import android.annotation.TestApi;
 import android.app.ActivityThread;
 import android.compat.annotation.UnsupportedAppUsage;
-import android.media.AudioDeviceAddress;
+import android.media.AudioDeviceAttributes;
 import android.media.AudioDeviceInfo;
 import android.media.AudioSystem;
 import android.os.Build;
@@ -476,12 +476,12 @@
      */
     @SystemApi
     @RequiresPermission(android.Manifest.permission.MODIFY_DEFAULT_AUDIO_EFFECTS)
-    public AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAddress device) {
+    public AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device) {
         this(EFFECT_TYPE_NULL, Objects.requireNonNull(uuid), 0, -2, Objects.requireNonNull(device));
     }
 
     private AudioEffect(UUID type, UUID uuid, int priority,
-            int audioSession, @Nullable AudioDeviceAddress device)
+            int audioSession, @Nullable AudioDeviceAttributes device)
             throws IllegalArgumentException, UnsupportedOperationException,
             RuntimeException {
         int[] id = new int[1];
diff --git a/media/java/android/media/audiopolicy/AudioMix.java b/media/java/android/media/audiopolicy/AudioMix.java
index dd9877a..61113bc 100644
--- a/media/java/android/media/audiopolicy/AudioMix.java
+++ b/media/java/android/media/audiopolicy/AudioMix.java
@@ -192,6 +192,16 @@
         return mRule.isAffectingUsage(usage);
     }
 
+    /**
+      * Returns {@code true} if the rule associated with this mix contains a
+      * RULE_MATCH_ATTRIBUTE_USAGE criterion for the given usage
+      *
+      * @hide
+      */
+    public boolean containsMatchAttributeRuleForUsage(int usage) {
+        return mRule.containsMatchAttributeRuleForUsage(usage);
+    }
+
     /** @hide */
     public boolean isRoutedToDevice(int deviceType, @NonNull String deviceAddress) {
         if ((mRouteFlags & ROUTE_FLAG_RENDER) != ROUTE_FLAG_RENDER) {
diff --git a/media/java/android/media/audiopolicy/AudioMixingRule.java b/media/java/android/media/audiopolicy/AudioMixingRule.java
index bca3fa7..68c9593 100644
--- a/media/java/android/media/audiopolicy/AudioMixingRule.java
+++ b/media/java/android/media/audiopolicy/AudioMixingRule.java
@@ -47,10 +47,12 @@
 public class AudioMixingRule {
 
     private AudioMixingRule(int mixType, ArrayList<AudioMixMatchCriterion> criteria,
-                            boolean allowPrivilegedPlaybackCapture) {
+                            boolean allowPrivilegedPlaybackCapture,
+                            boolean voiceCommunicationCaptureAllowed) {
         mCriteria = criteria;
         mTargetMixType = mixType;
         mAllowPrivilegedPlaybackCapture = allowPrivilegedPlaybackCapture;
+        mVoiceCommunicationCaptureAllowed = voiceCommunicationCaptureAllowed;
     }
 
     /**
@@ -171,6 +173,23 @@
         return false;
     }
 
+    /**
+      * Returns {@code true} if this rule contains a RULE_MATCH_ATTRIBUTE_USAGE criterion for
+      * the given usage
+      *
+      * @hide
+      */
+    boolean containsMatchAttributeRuleForUsage(int usage) {
+        for (AudioMixMatchCriterion criterion : mCriteria) {
+            if (criterion.mRule == RULE_MATCH_ATTRIBUTE_USAGE
+                    && criterion.mAttr != null
+                    && criterion.mAttr.getUsage() == usage) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private static boolean areCriteriaEquivalent(ArrayList<AudioMixMatchCriterion> cr1,
             ArrayList<AudioMixMatchCriterion> cr2) {
         if (cr1 == null || cr2 == null) return false;
@@ -188,6 +207,8 @@
     public ArrayList<AudioMixMatchCriterion> getCriteria() { return mCriteria; }
     @UnsupportedAppUsage
     private boolean mAllowPrivilegedPlaybackCapture = false;
+    @UnsupportedAppUsage
+    private boolean mVoiceCommunicationCaptureAllowed = false;
 
     /** @hide */
     public boolean allowPrivilegedPlaybackCapture() {
@@ -195,6 +216,16 @@
     }
 
     /** @hide */
+    public boolean voiceCommunicationCaptureAllowed() {
+        return mVoiceCommunicationCaptureAllowed;
+    }
+
+    /** @hide */
+    public void setVoiceCommunicationCaptureAllowed(boolean allowed) {
+        mVoiceCommunicationCaptureAllowed = allowed;
+    }
+
+    /** @hide */
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
@@ -203,12 +234,18 @@
         final AudioMixingRule that = (AudioMixingRule) o;
         return (this.mTargetMixType == that.mTargetMixType)
                 && (areCriteriaEquivalent(this.mCriteria, that.mCriteria)
-                && this.mAllowPrivilegedPlaybackCapture == that.mAllowPrivilegedPlaybackCapture);
+                && this.mAllowPrivilegedPlaybackCapture == that.mAllowPrivilegedPlaybackCapture
+                && this.mVoiceCommunicationCaptureAllowed
+                    == that.mVoiceCommunicationCaptureAllowed);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(mTargetMixType, mCriteria, mAllowPrivilegedPlaybackCapture);
+        return Objects.hash(
+            mTargetMixType,
+            mCriteria,
+            mAllowPrivilegedPlaybackCapture,
+            mVoiceCommunicationCaptureAllowed);
     }
 
     private static boolean isValidSystemApiRule(int rule) {
@@ -276,6 +313,8 @@
         private ArrayList<AudioMixMatchCriterion> mCriteria;
         private int mTargetMixType = AudioMix.MIX_TYPE_INVALID;
         private boolean mAllowPrivilegedPlaybackCapture = false;
+        // This value should be set internally according to a permission check
+        private boolean mVoiceCommunicationCaptureAllowed = false;
 
         /**
          * Constructs a new Builder with no rules.
@@ -401,6 +440,23 @@
         }
 
         /**
+         * Set if the caller of the rule is able to capture voice communication output.
+         * A system app can capture voice communication output only if it is granted with the.
+         * CAPTURE_VOICE_COMMUNICATION_OUTPUT permission.
+         *
+         * Note that this method is for internal use only and should not be called by the app that
+         * creates the rule.
+         *
+         * @return the same Builder instance.
+         *
+         * @hide
+         */
+        public @NonNull Builder voiceCommunicationCaptureAllowed(boolean allowed) {
+            mVoiceCommunicationCaptureAllowed = allowed;
+            return this;
+        }
+
+        /**
          * Add or exclude a rule for the selection of which streams are mixed together.
          * Does error checking on the parameters.
          * @param rule
@@ -583,7 +639,8 @@
          * @return a new {@link AudioMixingRule} object
          */
         public AudioMixingRule build() {
-            return new AudioMixingRule(mTargetMixType, mCriteria, mAllowPrivilegedPlaybackCapture);
+            return new AudioMixingRule(mTargetMixType, mCriteria,
+                mAllowPrivilegedPlaybackCapture, mVoiceCommunicationCaptureAllowed);
         }
     }
 }
diff --git a/media/java/android/media/audiopolicy/AudioPolicy.java b/media/java/android/media/audiopolicy/AudioPolicy.java
index 32a4a4f..d3e9c7e 100644
--- a/media/java/android/media/audiopolicy/AudioPolicy.java
+++ b/media/java/android/media/audiopolicy/AudioPolicy.java
@@ -21,6 +21,7 @@
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.annotation.TestApi;
+import android.annotation.UserIdInt;
 import android.app.ActivityManager;
 import android.content.Context;
 import android.content.pm.PackageManager;
@@ -481,12 +482,13 @@
      * @hide
      * Removes audio device affinity previously set by
      * {@link #setUserIdDeviceAffinity(int, java.util.List)}.
-     * @param userId userId of the application affected.
+     * @param userId userId of the application affected, as obtained via
+     * {@link UserHandle#getIdentifier}. Not to be confused with application uid.
      * @return true if the change was successful, false otherwise.
      */
     @TestApi
     @SystemApi
-    public boolean removeUserIdDeviceAffinity(int userId) {
+    public boolean removeUserIdDeviceAffinity(@UserIdInt int userId) {
         synchronized (mLock) {
             if (mStatus != POLICY_STATUS_REGISTERED) {
                 throw new IllegalStateException("Cannot use unregistered AudioPolicy");
@@ -512,13 +514,15 @@
      * multiple devices in the list doesn't imply the signals will be duplicated on the different
      * audio devices, final routing will depend on the {@link AudioAttributes} of the sounds being
      * played.
-     * @param userId Android user id to affect.
+     * @param userId userId of the application affected, as obtained via
+     * {@link UserHandle#getIdentifier}. Not to be confused with application uid.
      * @param devices list of devices to which the audio stream of the application may be routed.
      * @return true if the change was successful, false otherwise.
      */
     @TestApi
     @SystemApi
-    public boolean setUserIdDeviceAffinity(int userId, @NonNull List<AudioDeviceInfo> devices) {
+    public boolean setUserIdDeviceAffinity(@UserIdInt int userId,
+            @NonNull List<AudioDeviceInfo> devices) {
         Objects.requireNonNull(devices, "Illegal null list of audio devices");
         synchronized (mLock) {
             if (mStatus != POLICY_STATUS_REGISTERED) {
diff --git a/media/java/android/media/audiopolicy/AudioPolicyConfig.java b/media/java/android/media/audiopolicy/AudioPolicyConfig.java
index b048158..91b9bb3 100644
--- a/media/java/android/media/audiopolicy/AudioPolicyConfig.java
+++ b/media/java/android/media/audiopolicy/AudioPolicyConfig.java
@@ -98,6 +98,8 @@
             dest.writeInt(mix.getFormat().getChannelMask());
             // write opt-out respect
             dest.writeBoolean(mix.getRule().allowPrivilegedPlaybackCapture());
+            // write voice communication capture allowed flag
+            dest.writeBoolean(mix.getRule().voiceCommunicationCaptureAllowed());
             // write mix rules
             final ArrayList<AudioMixMatchCriterion> criteria = mix.getRule().getCriteria();
             dest.writeInt(criteria.size());
@@ -128,8 +130,10 @@
             mixBuilder.setFormat(format);
 
             AudioMixingRule.Builder ruleBuilder = new AudioMixingRule.Builder();
-            // write opt-out respect
+            // read opt-out respect
             ruleBuilder.allowPrivilegedPlaybackCapture(in.readBoolean());
+            // read voice capture allowed flag
+            ruleBuilder.voiceCommunicationCaptureAllowed(in.readBoolean());
             // read mix rules
             int nbRules = in.readInt();
             for (int j = 0 ; j < nbRules ; j++) {
@@ -169,6 +173,8 @@
             textDump += Integer.toHexString(mix.getFormat().getChannelMask()).toUpperCase() + "\n";
             textDump += "  ignore playback capture opt out="
                     + mix.getRule().allowPrivilegedPlaybackCapture() + "\n";
+            textDump += "  allow voice communication capture="
+                    + mix.getRule().voiceCommunicationCaptureAllowed() + "\n";
             // write mix rules
             final ArrayList<AudioMixMatchCriterion> criteria = mix.getRule().getCriteria();
             for (AudioMixMatchCriterion criterion : criteria) {
diff --git a/media/java/android/media/audiopolicy/AudioProductStrategy.java b/media/java/android/media/audiopolicy/AudioProductStrategy.java
index 60b3fc6..f9dbc50 100644
--- a/media/java/android/media/audiopolicy/AudioProductStrategy.java
+++ b/media/java/android/media/audiopolicy/AudioProductStrategy.java
@@ -83,6 +83,27 @@
 
     /**
      * @hide
+     * Return the AudioProductStrategy object for the given strategy ID.
+     * @param id the ID of the strategy to find
+     * @return an AudioProductStrategy on which getId() would return id, null if no such strategy
+     *     exists.
+     */
+    public static @Nullable AudioProductStrategy getAudioProductStrategyWithId(int id) {
+        synchronized (sLock) {
+            if (sAudioProductStrategies == null) {
+                sAudioProductStrategies = initializeAudioProductStrategies();
+            }
+            for (AudioProductStrategy strategy : sAudioProductStrategies) {
+                if (strategy.getId() == id) {
+                    return strategy;
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @hide
      * Create an invalid AudioProductStrategy instance for testing
      * @param id the ID for the invalid strategy, always use a different one than in use
      * @return an invalid instance that cannot successfully be used for volume groups or routing
diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java
index c2f6206..aa57233 100644
--- a/media/java/android/media/session/MediaController.java
+++ b/media/java/android/media/session/MediaController.java
@@ -1056,8 +1056,15 @@
         /**
          * Gets the volume control ID for this session. It can be used to identify which
          * volume provider is used by the session.
+         * <p>
+         * When the session starts to use {@link #PLAYBACK_TYPE_REMOTE remote volume handling},
+         * a volume provider should be set and it may set the volume control ID of the provider
+         * if the session wants to inform which volume provider is used.
+         * It can be {@code null} if the session didn't set the volume control ID or it uses
+         * {@link #PLAYBACK_TYPE_LOCAL local playback}.
+         * </p>
          *
-         * @return the volume control ID for this session or {@code null} if it's local playback
+         * @return the volume control ID for this session or {@code null} if it uses local playback
          * or not set.
          * @see VolumeProvider#getVolumeControlId()
          */
diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java
index 870c1b4..486c0c2 100644
--- a/media/java/android/media/session/MediaSession.java
+++ b/media/java/android/media/session/MediaSession.java
@@ -266,8 +266,12 @@
      * 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}.
      *
      * @param mbr The {@link PendingIntent} to send the media button event to.
+     * @see PendingIntent#getActivity
      */
     public void setMediaButtonReceiver(@Nullable PendingIntent mbr) {
         try {
diff --git a/media/java/android/media/soundtrigger/SoundTriggerDetector.java b/media/java/android/media/soundtrigger/SoundTriggerDetector.java
index 118f65c..0895339 100644
--- a/media/java/android/media/soundtrigger/SoundTriggerDetector.java
+++ b/media/java/android/media/soundtrigger/SoundTriggerDetector.java
@@ -113,7 +113,7 @@
      * This capability may or may not be supported by the system, and support can be queried
      * by calling {@link SoundTriggerManager#getModuleProperties()} and checking
      * {@link ModuleProperties#audioCapabilities}. The corresponding capabilities field for
-     * this flag is {@link SoundTrigger.ModuleProperties#CAPABILITY_ECHO_CANCELLATION}.
+     * this flag is {@link SoundTrigger.ModuleProperties#AUDIO_CAPABILITY_ECHO_CANCELLATION}.
      * If this flag is passed without the audio capability supported, there will be no audio effect
      * applied.
      */
@@ -125,8 +125,9 @@
      * This capability may or may not be supported by the system, and support can be queried
      * by calling {@link SoundTriggerManager#getModuleProperties()} and checking
      * {@link ModuleProperties#audioCapabilities}. The corresponding capabilities field for
-     * this flag is {@link SoundTrigger.ModuleProperties#CAPABILITY_NOISE_SUPPRESSION}. If this flag
-     * is passed without the audio capability supported, there will be no audio effect applied.
+     * this flag is {@link SoundTrigger.ModuleProperties#AUDIO_CAPABILITY_NOISE_SUPPRESSION}.
+     * If this flag is passed without the audio capability supported, there will be no audio effect
+     * applied.
      */
     public static final int RECOGNITION_FLAG_ENABLE_AUDIO_NOISE_SUPPRESSION = 0x8;
 
@@ -296,10 +297,10 @@
 
         int audioCapabilities = 0;
         if ((recognitionFlags & RECOGNITION_FLAG_ENABLE_AUDIO_ECHO_CANCELLATION) != 0) {
-            audioCapabilities |= SoundTrigger.ModuleProperties.CAPABILITY_ECHO_CANCELLATION;
+            audioCapabilities |= SoundTrigger.ModuleProperties.AUDIO_CAPABILITY_ECHO_CANCELLATION;
         }
         if ((recognitionFlags & RECOGNITION_FLAG_ENABLE_AUDIO_NOISE_SUPPRESSION) != 0) {
-            audioCapabilities |= SoundTrigger.ModuleProperties.CAPABILITY_NOISE_SUPPRESSION;
+            audioCapabilities |= SoundTrigger.ModuleProperties.AUDIO_CAPABILITY_NOISE_SUPPRESSION;
         }
 
         int status;
diff --git a/media/java/android/media/soundtrigger/SoundTriggerManager.java b/media/java/android/media/soundtrigger/SoundTriggerManager.java
index dd4dac2..6a8483c 100644
--- a/media/java/android/media/soundtrigger/SoundTriggerManager.java
+++ b/media/java/android/media/soundtrigger/SoundTriggerManager.java
@@ -173,8 +173,13 @@
         }
 
         /**
-         * Factory constructor to create a SoundModel instance for use with methods in this
-         * class.
+         * Factory constructor to a voice model to be used with {@link SoundTriggerManager}
+         *
+         * @param modelUuid Unique identifier associated with the model.
+         * @param vendorUuid Unique identifier associated the calling vendor.
+         * @param data Model's data.
+         * @param version Version identifier for the model.
+         * @return Voice model
          */
         @NonNull
         public static Model create(@NonNull UUID modelUuid, @NonNull UUID vendorUuid,
@@ -186,8 +191,12 @@
         }
 
         /**
-         * Factory constructor to create a SoundModel instance for use with methods in this
-         * class.
+         * Factory constructor to a voice model to be used with {@link SoundTriggerManager}
+         *
+         * @param modelUuid Unique identifier associated with the model.
+         * @param vendorUuid Unique identifier associated the calling vendor.
+         * @param data Model's data.
+         * @return Voice model
          */
         @NonNull
         public static Model create(@NonNull UUID modelUuid, @NonNull UUID vendorUuid,
@@ -195,20 +204,40 @@
             return create(modelUuid, vendorUuid, data, -1);
         }
 
+        /**
+         * Get the model's unique identifier
+         *
+         * @return UUID associated with the model
+         */
         @NonNull
         public UUID getModelUuid() {
             return mGenericSoundModel.uuid;
         }
 
+        /**
+         * Get the model's vendor identifier
+         *
+         * @return UUID associated with the vendor of the model
+         */
         @NonNull
         public UUID getVendorUuid() {
             return mGenericSoundModel.vendorUuid;
         }
 
+        /**
+         * Get the model's version
+         *
+         * @return Version associated with the model
+         */
         public int getVersion() {
             return mGenericSoundModel.version;
         }
 
+        /**
+         * Get the underlying model data
+         *
+         * @return Backing data of the model
+         */
         @Nullable
         public byte[] getModelData() {
             return mGenericSoundModel.data;
diff --git a/media/java/android/media/tv/TvInputService.java b/media/java/android/media/tv/TvInputService.java
index 62c7e51..b579144 100755
--- a/media/java/android/media/tv/TvInputService.java
+++ b/media/java/android/media/tv/TvInputService.java
@@ -111,37 +111,32 @@
     public @interface PriorityHintUseCaseType {}
 
     /**
-     * Use case of priority hint for {@link android.media.MediaCas#MediaCas(int, String , int)}:
-     * Background.
-     * TODO Link: Tuner#Tuner(Context, string, int).
+     * Use case of priority hint for {@link android.media.MediaCas#MediaCas(Context, int, String,
+     * int)}: Background. TODO Link: Tuner#Tuner(Context, string, int).
      */
     public static final int PRIORITY_HINT_USE_CASE_TYPE_BACKGROUND = 100;
 
     /**
-     * Use case of priority hint for {@link android.media.MediaCas#MediaCas(int, String , int)}:
-     * Scan.
-     * TODO Link: Tuner#Tuner(Context, string, int).
+     * Use case of priority hint for {@link android.media.MediaCas#MediaCas(Context, int, String,
+     * int)}: Scan. TODO Link: Tuner#Tuner(Context, string, int).
      */
     public static final int PRIORITY_HINT_USE_CASE_TYPE_SCAN = 200;
 
     /**
-     * Use case of priority hint for {@link android.media.MediaCas#MediaCas(int, String , int)}:
-     * Playback.
-     * TODO Link: Tuner#Tuner(Context, string, int).
+     * Use case of priority hint for {@link android.media.MediaCas#MediaCas(Context, int, String,
+     * int)}: Playback. TODO Link: Tuner#Tuner(Context, string, int).
      */
     public static final int PRIORITY_HINT_USE_CASE_TYPE_PLAYBACK = 300;
 
     /**
-     * Use case of priority hint for {@link android.media.MediaCas#MediaCas(int, String , int)}:
-     * Live.
-     * TODO Link: Tuner#Tuner(Context, string, int).
+     * Use case of priority hint for {@link android.media.MediaCas#MediaCas(Context, int, String,
+     * int)}: Live. TODO Link: Tuner#Tuner(Context, string, int).
      */
     public static final int PRIORITY_HINT_USE_CASE_TYPE_LIVE = 400;
 
     /**
-     * Use case of priority hint for {@link android.media.MediaCas#MediaCas(int, String , int)}:
-     * Record.
-     * TODO Link: Tuner#Tuner(Context, string, int).
+     * Use case of priority hint for {@link android.media.MediaCas#MediaCas(Context, int, String,
+     * int)}: Record. TODO Link: Tuner#Tuner(Context, string, int).
      */
     public static final int PRIORITY_HINT_USE_CASE_TYPE_RECORD = 500;
 
diff --git a/media/java/android/media/tv/TvTrackInfo.java b/media/java/android/media/tv/TvTrackInfo.java
index b40d43a..78d7d76 100644
--- a/media/java/android/media/tv/TvTrackInfo.java
+++ b/media/java/android/media/tv/TvTrackInfo.java
@@ -18,6 +18,7 @@
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -58,6 +59,8 @@
     private final String mId;
     private final String mLanguage;
     private final CharSequence mDescription;
+    @Nullable
+    private final String mEncoding;
     private final boolean mEncrypted;
     private final int mAudioChannelCount;
     private final int mAudioSampleRate;
@@ -73,14 +76,15 @@
     private final Bundle mExtra;
 
     private TvTrackInfo(int type, String id, String language, CharSequence description,
-            boolean encrypted, int audioChannelCount, int audioSampleRate, boolean audioDescription,
-            boolean hardOfHearing, boolean spokenSubtitle, int videoWidth, int videoHeight,
-            float videoFrameRate, float videoPixelAspectRatio, byte videoActiveFormatDescription,
-            Bundle extra) {
+            String encoding, boolean encrypted, int audioChannelCount, int audioSampleRate,
+            boolean audioDescription, boolean hardOfHearing, boolean spokenSubtitle, int videoWidth,
+            int videoHeight, float videoFrameRate, float videoPixelAspectRatio,
+            byte videoActiveFormatDescription, Bundle extra) {
         mType = type;
         mId = id;
         mLanguage = language;
         mDescription = description;
+        mEncoding = encoding;
         mEncrypted = encrypted;
         mAudioChannelCount = audioChannelCount;
         mAudioSampleRate = audioSampleRate;
@@ -100,6 +104,7 @@
         mId = in.readString();
         mLanguage = in.readString();
         mDescription = in.readString();
+        mEncoding = in.readString();
         mEncrypted = in.readInt() != 0;
         mAudioChannelCount = in.readInt();
         mAudioSampleRate = in.readInt();
@@ -146,13 +151,26 @@
     }
 
     /**
+     * Returns the codec in the form of mime type. If the encoding is unknown or could not be
+     * determined, the corresponding value will be {@code null}.
+     *
+     * <p>For example of broadcast, codec information may be referred to broadcast standard (e.g.
+     * Component Descriptor of ETSI EN 300 468). In the case that track type is subtitle, mime type
+     * could be defined in broadcast standard (e.g. "text/dvb.subtitle" or "text/dvb.teletext" in
+     * ETSI TS 102 812 V1.3.1 section 7.6).
+     */
+    @Nullable
+    public String getEncoding() {
+        return mEncoding;
+    }
+
+    /**
      * Returns {@code true} if the track is encrypted, {@code false} otherwise. If the encryption
      * status is unknown or could not be determined, the corresponding value will be {@code false}.
      *
      * <p>For example: ISO/IEC 13818-1 defines a CA descriptor that can be used to determine the
      * encryption status of some broadcast streams.
      */
-
     public boolean isEncrypted() {
         return mEncrypted;
     }
@@ -324,6 +342,7 @@
         dest.writeString(mId);
         dest.writeString(mLanguage);
         dest.writeString(mDescription != null ? mDescription.toString() : null);
+        dest.writeString(mEncoding);
         dest.writeInt(mEncrypted ? 1 : 0);
         dest.writeInt(mAudioChannelCount);
         dest.writeInt(mAudioSampleRate);
@@ -353,6 +372,7 @@
         if (!TextUtils.equals(mId, obj.mId) || mType != obj.mType
                 || !TextUtils.equals(mLanguage, obj.mLanguage)
                 || !TextUtils.equals(mDescription, obj.mDescription)
+                || !TextUtils.equals(mEncoding, obj.mEncoding)
                 || mEncrypted != obj.mEncrypted) {
             return false;
         }
@@ -416,6 +436,7 @@
         private final int mType;
         private String mLanguage;
         private CharSequence mDescription;
+        private String mEncoding;
         private boolean mEncrypted;
         private int mAudioChannelCount;
         private int mAudioSampleRate;
@@ -475,6 +496,22 @@
         }
 
         /**
+         * Sets the encoding of the track.
+         *
+         * <p>For example of broadcast, codec information may be referred to broadcast standard
+         * (e.g. Component Descriptor of ETSI EN 300 468). In the case that track type is subtitle,
+         * mime type could be defined in broadcast standard (e.g. "text/dvb.subtitle" or
+         * "text/dvb.teletext" in ETSI TS 102 812 V1.3.1 section 7.6).
+         *
+         * @param encoding The encoding of the track in the form of mime type.
+         */
+        @NonNull
+        public Builder setEncoding(@Nullable String encoding) {
+            mEncoding = encoding;
+            return this;
+        }
+
+        /**
          * Sets the encryption status of the track.
          *
          * <p>For example: ISO/IEC 13818-1 defines a CA descriptor that can be used to determine the
@@ -689,7 +726,7 @@
          */
         @NonNull
         public TvTrackInfo build() {
-            return new TvTrackInfo(mType, mId, mLanguage, mDescription, mEncrypted,
+            return new TvTrackInfo(mType, mId, mLanguage, mDescription, mEncoding, mEncrypted,
                     mAudioChannelCount, mAudioSampleRate, mAudioDescription, mHardOfHearing,
                     mSpokenSubtitle, mVideoWidth, mVideoHeight, mVideoFrameRate,
                     mVideoPixelAspectRatio, mVideoActiveFormatDescription, mExtra);
diff --git a/media/java/android/media/tv/tuner/DemuxCapabilities.java b/media/java/android/media/tv/tuner/DemuxCapabilities.java
index 364516c..0f5bf08 100644
--- a/media/java/android/media/tv/tuner/DemuxCapabilities.java
+++ b/media/java/android/media/tv/tuner/DemuxCapabilities.java
@@ -18,7 +18,7 @@
 
 import android.annotation.BytesLong;
 import android.annotation.IntDef;
-import android.annotation.Nullable;
+import android.annotation.NonNull;
 import android.annotation.Size;
 import android.annotation.SystemApi;
 import android.media.tv.tuner.filter.Filter;
@@ -159,7 +159,7 @@
      * {@link FilterConfiguration}.
      * <p>The ith element represents the filter's capability as the source for the ith type.
      */
-    @Nullable
+    @NonNull
     @Size(5)
     public int[] getLinkCapabilities() {
         return mLinkCaps;
diff --git a/media/java/android/media/tv/tuner/Descrambler.java b/media/java/android/media/tv/tuner/Descrambler.java
index f46d3ce..40add56 100644
--- a/media/java/android/media/tv/tuner/Descrambler.java
+++ b/media/java/android/media/tv/tuner/Descrambler.java
@@ -17,12 +17,15 @@
 package android.media.tv.tuner;
 
 import android.annotation.IntDef;
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
+import android.media.tv.tuner.TunerConstants.Result;
 import android.media.tv.tuner.filter.Filter;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.Objects;
 
 /**
  * This class is used to interact with descramblers.
@@ -75,6 +78,7 @@
      * @param filter an optional filter instance to identify upper stream.
      * @return result status of the operation.
      */
+    @Result
     public int addPid(@PidType int pidType, int pid, @Nullable Filter filter) {
         return nativeAddPid(pidType, pid, filter);
     }
@@ -89,6 +93,7 @@
      * @param filter an optional filter instance to identify upper stream.
      * @return result status of the operation.
      */
+    @Result
     public int removePid(@PidType int pidType, int pid, @Nullable Filter filter) {
         return nativeRemovePid(pidType, pid, filter);
     }
@@ -102,7 +107,9 @@
      * @param keyToken the token to be used to link the key slot.
      * @return result status of the operation.
      */
-    public int setKeyToken(@Nullable byte[] keyToken) {
+    @Result
+    public int setKeyToken(@NonNull byte[] keyToken) {
+        Objects.requireNonNull(keyToken, "key token must not be null");
         return nativeSetKeyToken(keyToken);
     }
 
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java
index 5e01244..012b8d6 100644
--- a/media/java/android/media/tv/tuner/Tuner.java
+++ b/media/java/android/media/tv/tuner/Tuner.java
@@ -34,9 +34,11 @@
 import android.media.tv.tuner.filter.Filter.Type;
 import android.media.tv.tuner.filter.FilterCallback;
 import android.media.tv.tuner.filter.TimeFilter;
+import android.media.tv.tuner.frontend.Atsc3PlpInfo;
 import android.media.tv.tuner.frontend.FrontendInfo;
 import android.media.tv.tuner.frontend.FrontendSettings;
 import android.media.tv.tuner.frontend.FrontendStatus;
+import android.media.tv.tuner.frontend.FrontendStatus.FrontendStatusType;
 import android.media.tv.tuner.frontend.OnTuneEventListener;
 import android.media.tv.tuner.frontend.ScanCallback;
 import android.os.Handler;
@@ -44,6 +46,7 @@
 import android.os.Message;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.Executor;
 
 /**
@@ -74,6 +77,8 @@
     private List<Integer> mFrontendIds;
     private Frontend mFrontend;
     private EventHandler mHandler;
+    @Nullable
+    private FrontendInfo mFrontendInfo;
 
     private List<Integer> mLnbIds;
     private Lnb mLnb;
@@ -85,6 +90,10 @@
     private ScanCallback mScanCallback;
     @Nullable
     private Executor mScanCallbackExecutor;
+    @Nullable
+    private OnResourceLostListener mOnResourceLostListener;
+    @Nullable
+    private Executor mOnResourceLostListenerExecutor;
 
     /**
      * Constructs a Tuner instance.
@@ -94,13 +103,37 @@
      * @param useCase the use case of this Tuner instance.
      */
     @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
-    public Tuner(@NonNull Context context, @NonNull String tvInputSessionId,
-            @TvInputService.PriorityHintUseCaseType int useCase,
-            @Nullable OnResourceLostListener listener) {
+    public Tuner(@NonNull Context context, @Nullable String tvInputSessionId,
+            @TvInputService.PriorityHintUseCaseType int useCase) {
+        nativeSetup();
         mContext = context;
     }
 
     /**
+     * Sets the listener for resource lost.
+     *
+     * @param executor the executor on which the listener should be invoked.
+     * @param listener the listener that will be run.
+     */
+    @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
+    public void setResourceLostListener(@NonNull @CallbackExecutor Executor executor,
+            @NonNull OnResourceLostListener listener) {
+        Objects.requireNonNull(executor, "OnResourceLostListener must not be null");
+        Objects.requireNonNull(listener, "executor must not be null");
+        mOnResourceLostListener = listener;
+        mOnResourceLostListenerExecutor = executor;
+    }
+
+    /**
+     * Removes the listener for resource lost.
+     */
+    @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
+    public void clearResourceLostListener() {
+        mOnResourceLostListener = null;
+        mOnResourceLostListenerExecutor = null;
+    }
+
+    /**
      * Shares the frontend resource with another Tuner instance
      *
      * @param tuner the Tuner instance to share frontend resource with.
@@ -185,7 +218,7 @@
     /**
      * Listener for resource lost.
      *
-     * <p>Resource is reclaimed and tuner instance is forced to close.
+     * <p>Insufficient resources are reclaimed by higher priority clients.
      */
     public interface OnResourceLostListener {
         /**
@@ -241,7 +274,7 @@
      *
      * <p>
      * Tuner events are started when {@link #tune(FrontendSettings)} is called and end when {@link
-     * #stopTune()} is called.
+     * #cancelTuning()} is called.
      *
      * @param eventListener receives tune events.
      * @throws SecurityException if the caller does not have appropriate permissions.
@@ -292,6 +325,7 @@
     @Result
     public int tune(@NonNull FrontendSettings settings) {
         TunerUtils.checkTunerPermission(mContext);
+        mFrontendInfo = null;
         return nativeTune(settings.getType(), settings);
     }
 
@@ -305,7 +339,7 @@
      */
     @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
     @Result
-    public int stopTune() {
+    public int cancelTuning() {
         TunerUtils.checkTunerPermission(mContext);
         return nativeStopTune();
     }
@@ -318,8 +352,8 @@
      * @param settings A {@link FrontendSettings} to configure the frontend.
      * @param scanType The scan type.
      * @throws SecurityException     if the caller does not have appropriate permissions.
-     * @throws IllegalStateException if {@code scan} is called again before {@link #stopScan()} is
-     *                               called.
+     * @throws IllegalStateException if {@code scan} is called again before
+     *                               {@link #cancelScanning()} is called.
      */
     @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
     @Result
@@ -333,6 +367,7 @@
         }
         mScanCallback = scanCallback;
         mScanCallbackExecutor = executor;
+        mFrontendInfo = null;
         return nativeScan(settings.getType(), settings, scanType);
     }
 
@@ -349,7 +384,7 @@
      */
     @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
     @Result
-    public int stopScan() {
+    public int cancelScanning() {
         TunerUtils.checkTunerPermission(mContext);
         int retVal = nativeStopScan();
         mScanCallback = null;
@@ -381,7 +416,7 @@
      */
     @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
     @Result
-    public int setLna(boolean enable) {
+    public int setLnaEnabled(boolean enable) {
         TunerUtils.checkTunerPermission(mContext);
         return nativeSetLna(enable);
     }
@@ -392,10 +427,10 @@
      * <p>This retrieve the statuses of the frontend for given status types.
      *
      * @param statusTypes an array of status types which the caller requests.
-     * @return statuses which response the caller's requests.
+     * @return statuses which response the caller's requests. {@code null} if the operation failed.
      */
     @Nullable
-    public FrontendStatus getFrontendStatus(@NonNull int[] statusTypes) {
+    public FrontendStatus getFrontendStatus(@NonNull @FrontendStatusType int[] statusTypes) {
         return nativeGetFrontendStatus(statusTypes);
     }
 
@@ -468,11 +503,18 @@
         if (mFrontend == null) {
             throw new IllegalStateException("frontend is not initialized");
         }
-        return nativeGetFrontendInfo(mFrontend.mId);
+        if (mFrontendInfo == null) {
+            mFrontendInfo = nativeGetFrontendInfo(mFrontend.mId);
+        }
+        return mFrontendInfo;
     }
 
     /**
      * Gets Demux capabilities.
+     *
+     * @param context the context of the caller.
+     * @return A {@link DemuxCapabilities} instance that represents the demux capabilities.
+     *         {@code null} if the operation failed.
      */
     @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
     @Nullable
@@ -503,6 +545,90 @@
         }
     }
 
+    private void onLocked() {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onLocked());
+        }
+    }
+
+    private void onScanStopped() {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onScanStopped());
+        }
+    }
+
+    private void onProgress(int percent) {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onProgress(percent));
+        }
+    }
+
+    private void onFrequenciesReport(int[] frequency) {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onFrequenciesReport(frequency));
+        }
+    }
+
+    private void onSymbolRates(int[] rate) {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onSymbolRates(rate));
+        }
+    }
+
+    private void onHierarchy(int hierarchy) {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onHierarchy(hierarchy));
+        }
+    }
+
+    private void onSignalType(int signalType) {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onSignalType(signalType));
+        }
+    }
+
+    private void onPlpIds(int[] plpIds) {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onPlpIds(plpIds));
+        }
+    }
+
+    private void onGroupIds(int[] groupIds) {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onGroupIds(groupIds));
+        }
+    }
+
+    private void onInputStreamIds(int[] inputStreamIds) {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onInputStreamIds(inputStreamIds));
+        }
+    }
+
+    private void onDvbsStandard(int dvbsStandandard) {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onDvbsStandard(dvbsStandandard));
+        }
+    }
+
+    private void onDvbtStandard(int dvbtStandard) {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onDvbtStandard(dvbtStandard));
+        }
+    }
+
+    private void onAnalogSifStandard(int sif) {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onAnalogSifStandard(sif));
+        }
+    }
+
+    private void onAtsc3PlpInfos(Atsc3PlpInfo[] atsc3PlpInfos) {
+        if (mScanCallbackExecutor != null && mScanCallback != null) {
+            mScanCallbackExecutor.execute(() -> mScanCallback.onAtsc3PlpInfos(atsc3PlpInfos));
+        }
+    }
+
     /**
      * Opens a filter object based on the given types and buffer size.
      *
@@ -524,6 +650,8 @@
         Filter filter = nativeOpenFilter(
                 mainType, TunerUtils.getFilterSubtype(mainType, subType), bufferSize);
         if (filter != null) {
+            filter.setMainType(mainType);
+            filter.setSubtype(subType);
             filter.setCallback(cb);
             if (mHandler == null) {
                 mHandler = createEventHandler();
@@ -542,13 +670,15 @@
      */
     @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
     @Nullable
-    public Lnb openLnb(@CallbackExecutor @Nullable Executor executor, @Nullable LnbCallback cb) {
+    public Lnb openLnb(@CallbackExecutor @NonNull Executor executor, @NonNull LnbCallback cb) {
+        Objects.requireNonNull(executor, "executor must not be null");
+        Objects.requireNonNull(cb, "LnbCallback must not be null");
         TunerUtils.checkTunerPermission(mContext);
         return openLnbByName(null, executor, cb);
     }
 
     /**
-     * Opens an LNB (low-noise block downconverter) object.
+     * Opens an LNB (low-noise block downconverter) object specified by the give name.
      *
      * @param name the LNB name.
      * @param executor the executor on which callback will be invoked. The default event handler
@@ -558,8 +688,10 @@
      */
     @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
     @Nullable
-    public Lnb openLnbByName(@Nullable String name, @CallbackExecutor @Nullable Executor executor,
+    public Lnb openLnbByName(@NonNull String name, @CallbackExecutor @NonNull Executor executor,
             @NonNull LnbCallback cb) {
+        Objects.requireNonNull(executor, "executor must not be null");
+        Objects.requireNonNull(cb, "LnbCallback must not be null");
         TunerUtils.checkTunerPermission(mContext);
         // TODO: use resource manager to get LNB ID.
         return new Lnb(0);
@@ -602,10 +734,10 @@
      *
      * @return  a {@link Descrambler} object.
      */
-    @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
+    @RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER)
     @Nullable
     public Descrambler openDescrambler() {
-        TunerUtils.checkTunerPermission(mContext);
+        TunerUtils.checkDescramblerPermission(mContext);
         return nativeOpenDescrambler();
     }
 
@@ -623,8 +755,10 @@
     @Nullable
     public DvrRecorder openDvrRecorder(
             @BytesLong long bufferSize,
-            @CallbackExecutor @Nullable Executor executor,
-            @Nullable OnRecordStatusChangedListener l) {
+            @CallbackExecutor @NonNull Executor executor,
+            @NonNull OnRecordStatusChangedListener l) {
+        Objects.requireNonNull(executor, "executor must not be null");
+        Objects.requireNonNull(l, "OnRecordStatusChangedListener must not be null");
         TunerUtils.checkTunerPermission(mContext);
         DvrRecorder dvr = nativeOpenDvrRecorder(bufferSize);
         return dvr;
@@ -644,8 +778,10 @@
     @Nullable
     public DvrPlayback openDvrPlayback(
             @BytesLong long bufferSize,
-            @CallbackExecutor @Nullable Executor executor,
-            @Nullable OnPlaybackStatusChangedListener l) {
+            @CallbackExecutor @NonNull Executor executor,
+            @NonNull OnPlaybackStatusChangedListener l) {
+        Objects.requireNonNull(executor, "executor must not be null");
+        Objects.requireNonNull(l, "OnPlaybackStatusChangedListener must not be null");
         TunerUtils.checkTunerPermission(mContext);
         DvrPlayback dvr = nativeOpenDvrPlayback(bufferSize);
         return dvr;
diff --git a/media/java/android/media/tv/tuner/TunerConstants.java b/media/java/android/media/tv/tuner/TunerConstants.java
index f54808d..82af658 100644
--- a/media/java/android/media/tv/tuner/TunerConstants.java
+++ b/media/java/android/media/tv/tuner/TunerConstants.java
@@ -38,6 +38,14 @@
      * Invalid stream ID.
      */
     public static final int INVALID_STREAM_ID = Constants.Constant.INVALID_STREAM_ID;
+    /**
+     * Invalid filter ID.
+     */
+    public static final int INVALID_FILTER_ID = Constants.Constant.INVALID_FILTER_ID;
+    /**
+     * Invalid AV Sync ID.
+     */
+    public static final int INVALID_AV_SYNC_ID = Constants.Constant.INVALID_AV_SYNC_ID;
 
     /** @hide */
     @IntDef(prefix = "SCAN_TYPE_", value = {SCAN_TYPE_UNDEFINED, SCAN_TYPE_AUTO, SCAN_TYPE_BLIND})
diff --git a/media/java/android/media/tv/tuner/TunerUtils.java b/media/java/android/media/tv/tuner/TunerUtils.java
index 30aaa02..5ecb8f0 100644
--- a/media/java/android/media/tv/tuner/TunerUtils.java
+++ b/media/java/android/media/tv/tuner/TunerUtils.java
@@ -27,7 +27,9 @@
  * @hide
  */
 public final class TunerUtils {
-    private static final String PERMISSION = android.Manifest.permission.ACCESS_TV_TUNER;
+    private static final String TUNER_PERMISSION = android.Manifest.permission.ACCESS_TV_TUNER;
+    private static final String DESCRAMBLER_PERMISSION =
+            android.Manifest.permission.ACCESS_TV_DESCRAMBLER;
 
     /**
      * Checks whether the caller has permission to access tuner.
@@ -36,9 +38,30 @@
      * @throws SecurityException if the caller doesn't have the permission.
      */
     public static void checkTunerPermission(Context context) {
-        if (context.checkCallingOrSelfPermission(PERMISSION)
+        checkPermission(context, TUNER_PERMISSION);
+    }
+
+    /**
+     * Checks whether the caller has permission to access the descrambler.
+     *
+     * @param context context of the caller.
+     * @throws SecurityException if the caller doesn't have the permission.
+     */
+    public static void checkDescramblerPermission(Context context) {
+        checkPermission(context, DESCRAMBLER_PERMISSION);
+    }
+
+    /**
+     * Checks whether the caller has the given permission.
+     *
+     * @param context context of the caller.
+     * @param permission the given permission.
+     * @throws SecurityException if the caller doesn't have the permission.
+     */
+    public static void checkPermission(Context context, String permission) {
+        if (context.checkCallingOrSelfPermission(permission)
                 != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Caller must have " + PERMISSION + " permission.");
+            throw new SecurityException("Caller must have " + permission + " permission.");
         }
     }
 
diff --git a/media/java/android/media/tv/tuner/filter/Filter.java b/media/java/android/media/tv/tuner/filter/Filter.java
index 06de6e8..a98183b 100644
--- a/media/java/android/media/tv/tuner/filter/Filter.java
+++ b/media/java/android/media/tv/tuner/filter/Filter.java
@@ -23,6 +23,7 @@
 import android.annotation.SystemApi;
 import android.hardware.tv.tuner.V1_0.Constants;
 import android.media.tv.tuner.TunerConstants.Result;
+import android.media.tv.tuner.TunerUtils;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -177,6 +178,8 @@
     private long mNativeContext;
     private FilterCallback mCallback;
     private final int mId;
+    private int mMainType;
+    private int mSubtype;
 
     private native int nativeConfigureFilter(
             int type, int subType, FilterConfiguration settings);
@@ -197,6 +200,15 @@
     }
 
     /** @hide */
+    public void setMainType(@Type int mainType) {
+        mMainType = mainType;
+    }
+    /** @hide */
+    public void setSubtype(@Subtype int subtype) {
+        mSubtype = subtype;
+    }
+
+    /** @hide */
     public void setCallback(FilterCallback cb) {
         mCallback = cb;
     }
@@ -213,10 +225,13 @@
      */
     @Result
     public int configure(@NonNull FilterConfiguration config) {
-        int subType = -1;
+        // TODO: validate main type, subtype, config, settings
+        int subType;
         Settings s = config.getSettings();
         if (s != null) {
             subType = s.getType();
+        } else {
+            subType = TunerUtils.getFilterSubtype(mMainType, mSubtype);
         }
         return nativeConfigureFilter(config.getType(), subType, config);
     }
diff --git a/media/java/android/media/tv/tuner/filter/IpFilterConfiguration.java b/media/java/android/media/tv/tuner/filter/IpFilterConfiguration.java
index bf5aaed..a8dbfa5 100644
--- a/media/java/android/media/tv/tuner/filter/IpFilterConfiguration.java
+++ b/media/java/android/media/tv/tuner/filter/IpFilterConfiguration.java
@@ -160,6 +160,12 @@
          */
         @NonNull
         public IpFilterConfiguration build() {
+            int ipAddrLength = mSrcIpAddress.length;
+            if (ipAddrLength != mDstIpAddress.length || (ipAddrLength != 4 && ipAddrLength != 16)) {
+                throw new IllegalArgumentException(
+                    "The lengths of src and dst IP address must be 4 or 16 and must be the same."
+                            + "srcLength=" + ipAddrLength + ", dstLength=" + mDstIpAddress.length);
+            }
             return new IpFilterConfiguration(
                     mSettings, mSrcIpAddress, mDstIpAddress, mSrcPort, mDstPort, mPassthrough);
         }
diff --git a/media/java/android/media/tv/tuner/filter/TsFilterConfiguration.java b/media/java/android/media/tv/tuner/filter/TsFilterConfiguration.java
index f186de6..6a8b6da 100644
--- a/media/java/android/media/tv/tuner/filter/TsFilterConfiguration.java
+++ b/media/java/android/media/tv/tuner/filter/TsFilterConfiguration.java
@@ -17,7 +17,6 @@
 package android.media.tv.tuner.filter;
 
 import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
 import android.content.Context;
@@ -43,13 +42,6 @@
     }
 
     /**
-     * Gets the {@link Settings} object of this filter configuration.
-     */
-    @Nullable
-    public Settings getSettings() {
-        return mSettings;
-    }
-    /**
      * Gets Tag Protocol ID.
      */
     public int getTpid() {
@@ -71,25 +63,13 @@
     /**
      * Builder for {@link TsFilterConfiguration}.
      */
-    public static class Builder {
-        private Settings mSettings;
+    public static class Builder extends FilterConfiguration.Builder<Builder> {
         private int mTpid;
 
         private Builder() {
         }
 
         /**
-         * Sets filter settings.
-         *
-         * @param settings the filter settings.
-         */
-        @NonNull
-        public Builder setSettings(@NonNull Settings settings) {
-            mSettings = settings;
-            return this;
-        }
-
-        /**
          * Sets Tag Protocol ID.
          *
          * @param tpid the Tag Protocol ID.
@@ -107,5 +87,10 @@
         public TsFilterConfiguration build() {
             return new TsFilterConfiguration(mSettings, mTpid);
         }
+
+        @Override
+        Builder self() {
+            return this;
+        }
     }
 }
diff --git a/media/java/android/media/tv/tuner/frontend/FrontendStatus.java b/media/java/android/media/tv/tuner/frontend/FrontendStatus.java
index c1b17d3..63de0334 100644
--- a/media/java/android/media/tv/tuner/frontend/FrontendStatus.java
+++ b/media/java/android/media/tv/tuner/frontend/FrontendStatus.java
@@ -41,8 +41,7 @@
             FRONTEND_STATUS_TYPE_MODULATION, FRONTEND_STATUS_TYPE_SPECTRAL,
             FRONTEND_STATUS_TYPE_LNB_VOLTAGE, FRONTEND_STATUS_TYPE_PLP_ID,
             FRONTEND_STATUS_TYPE_EWBS, FRONTEND_STATUS_TYPE_AGC, FRONTEND_STATUS_TYPE_LNA,
-            FRONTEND_STATUS_TYPE_LAYER_ERROR, FRONTEND_STATUS_TYPE_VBER_CN,
-            FRONTEND_STATUS_TYPE_LBER_CN, FRONTEND_STATUS_TYPE_XER_CN, FRONTEND_STATUS_TYPE_MER,
+            FRONTEND_STATUS_TYPE_LAYER_ERROR, FRONTEND_STATUS_TYPE_MER,
             FRONTEND_STATUS_TYPE_FREQ_OFFSET, FRONTEND_STATUS_TYPE_HIERARCHY,
             FRONTEND_STATUS_TYPE_RF_LOCK, FRONTEND_STATUS_TYPE_ATSC3_PLP_INFO})
     @Retention(RetentionPolicy.SOURCE)
@@ -125,18 +124,6 @@
     public static final int FRONTEND_STATUS_TYPE_LAYER_ERROR =
             Constants.FrontendStatusType.LAYER_ERROR;
     /**
-     * CN value by VBER.
-     */
-    public static final int FRONTEND_STATUS_TYPE_VBER_CN = Constants.FrontendStatusType.VBER_CN;
-    /**
-     * CN value by LBER.
-     */
-    public static final int FRONTEND_STATUS_TYPE_LBER_CN = Constants.FrontendStatusType.LBER_CN;
-    /**
-     * CN value by XER.
-     */
-    public static final int FRONTEND_STATUS_TYPE_XER_CN = Constants.FrontendStatusType.XER_CN;
-    /**
      * Modulation Error Ratio.
      */
     public static final int FRONTEND_STATUS_TYPE_MER = Constants.FrontendStatusType.MER;
@@ -223,9 +210,6 @@
     private Integer mAgc;
     private Boolean mIsLnaOn;
     private boolean[] mIsLayerErrors;
-    private Integer mVberCn;
-    private Integer mLberCn;
-    private Integer mXerCn;
     private Integer mMer;
     private Integer mFreqOffset;
     private Integer mHierarchy;
@@ -403,33 +387,6 @@
         return mIsLayerErrors;
     }
     /**
-     * Gets CN value by VBER in thousandths of a deciBel (0.001dB).
-     */
-    public int getVberCn() {
-        if (mVberCn == null) {
-            throw new IllegalStateException();
-        }
-        return mVberCn;
-    }
-    /**
-     * Gets CN value by LBER in thousandths of a deciBel (0.001dB).
-     */
-    public int getLberCn() {
-        if (mLberCn == null) {
-            throw new IllegalStateException();
-        }
-        return mLberCn;
-    }
-    /**
-     * Gets CN value by XER in thousandths of a deciBel (0.001dB).
-     */
-    public int getXerCn() {
-        if (mXerCn == null) {
-            throw new IllegalStateException();
-        }
-        return mXerCn;
-    }
-    /**
      * Gets Modulation Error Ratio in thousandths of a deciBel (0.001dB).
      */
     public int getMer() {
diff --git a/media/java/android/media/tv/tuner/frontend/ScanCallback.java b/media/java/android/media/tv/tuner/frontend/ScanCallback.java
index f90144b..63bc248 100644
--- a/media/java/android/media/tv/tuner/frontend/ScanCallback.java
+++ b/media/java/android/media/tv/tuner/frontend/ScanCallback.java
@@ -53,7 +53,7 @@
     void onInputStreamIds(@NonNull int[] inputStreamIds);
 
     /** Locked signal standard for DVBS. */
-    void onDvbsStandard(@DvbsFrontendSettings.Standard int dvbsStandandard);
+    void onDvbsStandard(@DvbsFrontendSettings.Standard int dvbsStandard);
 
     /** Locked signal standard. for DVBT */
     void onDvbtStandard(@DvbtFrontendSettings.Standard int dvbtStandard);
@@ -67,7 +67,7 @@
     /** Frontend hierarchy. */
     void onHierarchy(@DvbtFrontendSettings.Hierarchy int hierarchy);
 
-    /** Frontend hierarchy. */
+    /** Frontend signal type. */
     void onSignalType(@AnalogFrontendSettings.SignalType int signalType);
 
 }
diff --git a/media/java/android/media/tv/tunerresourcemanager/Android.bp b/media/java/android/media/tv/tunerresourcemanager/Android.bp
new file mode 100644
index 0000000..c65d25a
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/Android.bp
@@ -0,0 +1,17 @@
+filegroup {
+    name: "framework-media-tv-tunerresourcemanager-sources",
+    srcs: [
+        "*.java",
+        "*.aidl",
+    ],
+    path: ".",
+}
+
+java_library {
+    name: "framework-media-tv-trm-sources",
+    srcs: [":framework-media-tv-tunerresourcemanager-sources"],
+    installable: true,
+    visibility: [
+        "//frameworks/base",
+    ],
+}
\ No newline at end of file
diff --git a/media/java/android/media/tv/tunerresourcemanager/CasSessionRequest.aidl b/media/java/android/media/tv/tunerresourcemanager/CasSessionRequest.aidl
new file mode 100644
index 0000000..c918d88
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/CasSessionRequest.aidl
@@ -0,0 +1,24 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+/**
+ * A wrapper of a cas session requests that contains all the request info of the client.
+ *
+ * @hide
+ */
+parcelable CasSessionRequest;
\ No newline at end of file
diff --git a/media/java/android/media/tv/tunerresourcemanager/CasSessionRequest.java b/media/java/android/media/tv/tunerresourcemanager/CasSessionRequest.java
new file mode 100644
index 0000000..59802ff
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/CasSessionRequest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+/**
+ * Information required to request a Cas Session.
+ *
+ * @hide
+ */
+public final class CasSessionRequest implements Parcelable {
+    static final String TAG = "CasSessionRequest";
+
+    public static final
+                @NonNull
+                Parcelable.Creator<CasSessionRequest> CREATOR =
+                new Parcelable.Creator<CasSessionRequest>() {
+                @Override
+                public CasSessionRequest createFromParcel(Parcel source) {
+                    try {
+                        return new CasSessionRequest(source);
+                    } catch (Exception e) {
+                        Log.e(TAG, "Exception creating CasSessionRequest from parcel", e);
+                        return null;
+                    }
+                }
+
+                @Override
+                public CasSessionRequest[] newArray(int size) {
+                    return new CasSessionRequest[size];
+                }
+            };
+
+    /**
+     * Client id of the client that sends the request.
+     */
+    private final int mClientId;
+
+    /**
+     * System id of the requested cas.
+     */
+    private final int mCasSystemId;
+
+    private CasSessionRequest(@NonNull Parcel source) {
+        mClientId = source.readInt();
+        mCasSystemId = source.readInt();
+    }
+
+    /**
+     * Constructs a new {@link CasSessionRequest} with the given parameters.
+     *
+     * @param clientId id of the client.
+     * @param casSystemId the cas system id that the client is requesting.
+     */
+    public CasSessionRequest(int clientId,
+                             int casSystemId) {
+        mClientId = clientId;
+        mCasSystemId = casSystemId;
+    }
+
+    /**
+     * Returns the id of the client.
+     */
+    public int getClientId() {
+        return mClientId;
+    }
+
+    /**
+     * Returns the cas system id requested.
+     */
+    public int getCasSystemId() {
+        return mCasSystemId;
+    }
+
+    // Parcelable
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @NonNull
+    @Override
+    public String toString() {
+        StringBuilder b = new StringBuilder(128);
+        b.append("CasSessionRequest {clientId=").append(mClientId);
+        b.append(", casSystemId=").append(mCasSystemId);
+        b.append("}");
+        return b.toString();
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeInt(mClientId);
+        dest.writeInt(mCasSystemId);
+    }
+}
diff --git a/media/java/android/media/tv/tunerresourcemanager/IResourcesReclaimListener.aidl b/media/java/android/media/tv/tunerresourcemanager/IResourcesReclaimListener.aidl
new file mode 100644
index 0000000..1a4eb29
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/IResourcesReclaimListener.aidl
@@ -0,0 +1,33 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+/**
+ * Interface to receive callbacks from ITunerResourceManager.
+ *
+ * @hide
+ */
+oneway interface IResourcesReclaimListener {
+    /*
+     * TRM invokes this method when the client's resources need to be reclaimed.
+     *
+     * <p>This method is implemented in Tuner Framework to take the reclaiming
+     * actions. It's a synchronous call. TRM would wait on the call to finish
+     * then grant the resource.
+     */
+    void onReclaimResources();
+}
\ No newline at end of file
diff --git a/media/java/android/media/tv/tunerresourcemanager/ITunerResourceManager.aidl b/media/java/android/media/tv/tunerresourcemanager/ITunerResourceManager.aidl
new file mode 100644
index 0000000..20efaa1
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/ITunerResourceManager.aidl
@@ -0,0 +1,244 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+import android.media.tv.tunerresourcemanager.CasSessionRequest;
+import android.media.tv.tunerresourcemanager.IResourcesReclaimListener;
+import android.media.tv.tunerresourcemanager.ResourceClientProfile;
+import android.media.tv.tunerresourcemanager.TunerFrontendInfo;
+import android.media.tv.tunerresourcemanager.TunerFrontendRequest;
+import android.media.tv.tunerresourcemanager.TunerLnbRequest;
+
+/**
+ * Interface of the Tuner Resource Manager. It manages resources used by TV Tuners.
+ * <p>Resources include:
+ * <ul>
+ * <li>TunerFrontend {@link android.media.tv.tuner.frontend}.
+ * <li>TunerLnb {@link android.media.tv.tuner.Lnb}.
+ * <li>MediaCas {@link android.media.MediaCas}.
+ * <li>TvInputHardware {@link android.media.tv.TvInputHardwareInfo}.
+ * <ul>
+ *
+ * <p>Expected workflow is:
+ * <ul>
+ * <li>Tuner Java/MediaCas/TIF update resources of the current device with TRM.
+ * <li>Client registers its profile through {@link #registerClientProfile(ResourceClientProfile,
+ * IResourcesReclaimListener, int[])}.
+ * <li>Client requests resources through request APIs.
+ * <li>If the resource needs to be handed to a higher priority client from a lower priority
+ * one, TRM calls IResourcesReclaimListener registered by the lower priority client to release
+ * the resource.
+ * <ul>
+ *
+ * @hide
+ */
+interface ITunerResourceManager {
+    /*
+     * This API is used by the client to register their profile with the Tuner Resource manager.
+     *
+     * <p>The profile contains information that can show the base priority score of the client.
+     *
+     * @param profile {@link ResourceClientProfile} profile of the current client
+     * @param listener {@link IResourcesReclaimListener} a callback to
+     *                 reclaim clients' resources when needed.
+     * @param clientId returns a clientId from the resource manager when the
+     *                 the client registers its profile.
+     */
+    void registerClientProfile(in ResourceClientProfile profile,
+        IResourcesReclaimListener listener, out int[] clientId);
+
+    /*
+     * This API is used by the client to unregister their profile with the Tuner Resource manager.
+     *
+     * @param clientId the client id that needs to be unregistered.
+     */
+    void unregisterClientProfile(in int clientId);
+
+    /*
+     * Updates a registered client's priority and niceValue.
+     *
+     * @param clientId the id of the client that is updating its profile.
+     * @param priority the priority that the client would like to update to.
+     * @param niceValue the nice value that the client would like to update to.
+     *
+     * @return true if the update is successful.
+     */
+    boolean updateClientPriority(in int clientId, in int priority, in int niceValue);
+
+    /*
+     * Updates the available Frontend resources information on the current device.
+     *
+     * <p><strong>Note:</strong> This update must happen before the first
+     * {@link #requestFrontend(TunerFrontendRequest,int[])} and {@link #releaseFrontend(int)} call.
+     *
+     * @param infos an array of the available {@link TunerFrontendInfo} information.
+     */
+    void setFrontendInfoList(in TunerFrontendInfo[] infos);
+
+    /*
+     * Updates the available Cas resource information on the current device.
+     *
+     * <p><strong>Note:</strong> This update must happen before the first
+     * {@link #requestCasSession(CasSessionRequest, int[])} and {@link #releaseCasSession(int)} call.
+     *
+     * @param casSystemId id of the updating CAS system.
+     * @param maxSessionNum the max session number of the CAS system that is updated.
+     */
+    void updateCasInfo(in int casSystemId, in int maxSessionNum);
+
+    /*
+     * Updates the available Lnb resource information on the current device.
+     *
+     * <p><strong>Note:</strong> This update must happen before the first
+     * {@link #requestLnb(TunerLnbRequest, int[])} and {@link #releaseLnb(int)} call.
+     *
+     * @param lnbIds ids of the updating lnbs.
+     */
+    void setLnbInfoList(in int[] lnbIds);
+
+    /*
+     * This API is used by the Tuner framework to request an available frontend from the TunerHAL.
+     *
+     * <p>There are three possible scenarios:
+     * <ul>
+     * <li>If there is frontend available, the API would send the id back.
+     *
+     * <li>If no Frontend is available but the current request info can show higher priority than
+     * other uses of Frontend, the API will send
+     * {@link IResourcesReclaimListener#onReclaimResources()} to the {@link Tuner}. Tuner would
+     * handle the resource reclaim on the holder of lower priority and notify the holder of its
+     * resource loss.
+     *
+     * <li>If no frontend can be granted, the API would return false.
+     * <ul>
+     *
+     * <p><strong>Note:</strong> {@link #setFrontendInfoList(TunerFrontendInfo[])} must be called
+     * before this request.
+     *
+     * @param request {@link TunerFrontendRequest} information of the current request.
+     * @param frontendId a one-element array to return the granted frontendId.
+     *
+     * @return true if there is frontend granted.
+     */
+    boolean requestFrontend(in TunerFrontendRequest request, out int[] frontendId);
+
+    /*
+     * Requests to share frontend with an existing client.
+     *
+     * <p><strong>Note:</strong> {@link #setFrontendInfoList(TunerFrontendInfo[])} must be called
+     * before this request.
+     *
+     * @param selfClientId the id of the client that sends the request.
+     * @param targetClientId the id of the client to share the frontend with.
+     */
+    void shareFrontend(in int selfClientId, in int targetClientId);
+
+    /*
+     * This API is used by the Tuner framework to request an available Cas session. This session
+     * needs to be under the CAS system with the id indicated in the {@code request}.
+     *
+     * <p>There are three possible scenarios:
+     * <ul>
+     * <li>If there is Cas session available, the API would send the id back.
+     *
+     * <li>If no Cas session is available but the current request info can show higher priority than
+     * other uses of the sessions under the requested CAS system, the API will send
+     * {@link ITunerResourceManagerCallback#onReclaimResources()} to the {@link Tuner}. Tuner would
+     * handle the resource reclaim on the holder of lower priority and notify the holder of its
+     * resource loss.
+     *
+     * <li>If no Cas session can be granted, the API would return false.
+     * <ul>
+     *
+     * <p><strong>Note:</strong> {@link #updateCasInfo(int, int)} must be called before this request.
+     *
+     * @param request {@link CasSessionRequest} information of the current request.
+     * @param sessionResourceId a one-element array to return the granted cas session id.
+     *
+     * @return true if there is CAS session granted.
+     */
+    boolean requestCasSession(in CasSessionRequest request, out int[] sessionResourceId);
+
+    /*
+     * This API is used by the Tuner framework to request an available Lnb from the TunerHAL.
+     *
+     * <p>There are three possible scenarios:
+     * <ul>
+     * <li>If there is Lnb available, the API would send the id back.
+     *
+     * <li>If no Lnb is available but the current request has a higher priority than other uses of
+     * lnbs, the API will send {@link ITunerResourceManagerCallback#onReclaimResources()} to the
+     * {@link Tuner}. Tuner would handle the resource reclaim on the holder of lower priority and
+     * notify the holder of its resource loss.
+     *
+     * <li>If no Lnb system can be granted, the API would return false.
+     * <ul>
+     *
+     * <p><strong>Note:</strong> {@link #setLnbInfos(int[])} must be called before this request.
+     *
+     * @param request {@link TunerLnbRequest} information of the current request.
+     * @param lnbId a one-element array to return the granted Lnb id.
+     *
+     * @return true if there is Lnb granted.
+     */
+    boolean requestLnb(in TunerLnbRequest request, out int[] lnbId);
+
+    /*
+     * Notifies the TRM that the given frontend has been released.
+     *
+     * <p>Client must call this whenever it releases a Tuner frontend.
+     *
+     * <p><strong>Note:</strong> {@link #setFrontendInfoList(TunerFrontendInfo[])} must be called
+     * before this release.
+     *
+     * @param frontendId the id of the released frontend.
+     */
+    void releaseFrontend(in int frontendId);
+
+    /*
+     * Notifies the TRM that the given Cas session has been released.
+     *
+     * <p>Client must call this whenever it releases a Cas session.
+     *
+     * <p><strong>Note:</strong> {@link #updateCasInfo(int, int)} must be called before this release.
+     *
+     * @param sessionResourceId the id of the released CAS session.
+     */
+    void releaseCasSession(in int sessionResourceId);
+
+    /*
+     * Notifies the TRM that the Lnb with the given id was released.
+     *
+     * <p>Client must call this whenever it releases an Lnb.
+     *
+     * <p><strong>Note:</strong> {@link #setLnbInfos(int[])} must be called before this release.
+     *
+     * @param lnbId the id of the released Tuner Lnb.
+     */
+    void releaseLnb(in int lnbId);
+
+    /*
+     * Compare two clients' priority.
+     *
+     * @param challengerProfile the {@link ResourceClientProfile} of the challenger.
+     * @param holderProfile the {@link ResourceClientProfile} of the holder of the resource.
+     *
+     * @return true if the challenger has higher priority than the holder.
+     */
+    boolean isHigherPriority(in ResourceClientProfile challengerProfile,
+            in ResourceClientProfile holderProfile);
+}
diff --git a/media/java/android/media/tv/tunerresourcemanager/OWNER b/media/java/android/media/tv/tunerresourcemanager/OWNER
new file mode 100644
index 0000000..76b84d9
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/OWNER
@@ -0,0 +1,4 @@
+amyjojo@google.com
+nchalko@google.com
+quxiangfang@google.com
+shubang@google.com
\ No newline at end of file
diff --git a/media/java/android/media/tv/tunerresourcemanager/ResourceClientProfile.aidl b/media/java/android/media/tv/tunerresourcemanager/ResourceClientProfile.aidl
new file mode 100644
index 0000000..ed90c1d
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/ResourceClientProfile.aidl
@@ -0,0 +1,25 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+/**
+ * A profile of a resource client. This profile is used to register the client info
+ * with the Tuner Resource Manager.
+ *
+ * @hide
+ */
+parcelable ResourceClientProfile;
\ No newline at end of file
diff --git a/media/java/android/media/tv/tunerresourcemanager/ResourceClientProfile.java b/media/java/android/media/tv/tunerresourcemanager/ResourceClientProfile.java
new file mode 100644
index 0000000..6837244
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/ResourceClientProfile.java
@@ -0,0 +1,129 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+/**
+ * A profile of a resource client. This profile is used to register the client info
+ * with the Tuner Resource Manager(TRM).
+ *
+ * @hide
+ */
+public final class ResourceClientProfile implements Parcelable {
+    static final String TAG = "ResourceClientProfile";
+
+    public static final
+                @NonNull
+                Parcelable.Creator<ResourceClientProfile> CREATOR =
+                new Parcelable.Creator<ResourceClientProfile>() {
+                @Override
+                public ResourceClientProfile createFromParcel(Parcel source) {
+                    try {
+                        return new ResourceClientProfile(source);
+                    } catch (Exception e) {
+                        Log.e(TAG, "Exception creating ResourceClientProfile from parcel", e);
+                        return null;
+                    }
+                }
+
+                @Override
+                public ResourceClientProfile[] newArray(int size) {
+                    return new ResourceClientProfile[size];
+                }
+            };
+
+    /**
+     * This is used by TRM to get TV App’s processId from TIF.
+     * The processId will be used to identify foreground applications.
+     *
+     * <p>MediaCas, Tuner and TvInputHardwareManager get tvInputSessionId from TIS.
+     * If mTvInputSessionId is UNKNOWN, the client is always background.
+     */
+    private final String mTvInputSessionId;
+
+    /**
+     * Usage of the client.
+     */
+    private final int mUseCase;
+
+    private ResourceClientProfile(@NonNull Parcel source) {
+        mTvInputSessionId = source.readString();
+        mUseCase = source.readInt();
+    }
+
+    /**
+     * Constructs a new {@link ResourceClientProfile} with the given parameters.
+     *
+     * @param tvInputSessionId the unique id of the session owned by the client.
+     * @param useCase the usage of the client. Suggested priority hints are
+     *                {@link android.media.tv.TvInputService.PRIORITY_HINT_USE_CASE_TYPE_PLAYBACK}
+     *                {@link android.media.tv.TvInputService.PRIORITY_HINT_USE_CASE_TYPE_LIVE}
+     *                {@link android.media.tv.TvInputService.PRIORITY_HINT_USE_CASE_TYPE_RECORD}.
+     *                New [use case : priority value] pair can be defined in the manifest by the
+     *                OEM. Any undefined use case would cause IllegalArgumentException.
+     */
+    public ResourceClientProfile(@NonNull String tvInputSessionId,
+                                 int useCase) {
+        mTvInputSessionId = tvInputSessionId;
+        mUseCase = useCase;
+    }
+
+    /**
+     * Returns the tv input session id of the client.
+     *
+     * @return the value of the tv input session id.
+     */
+    @NonNull
+    public String getTvInputSessionId() {
+        return mTvInputSessionId;
+    }
+
+    /**
+     * Returns the user usage of the client.
+     *
+     * @return the value of use case.
+     */
+    public int getUseCase() {
+        return mUseCase;
+    }
+
+    // Parcelable
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @NonNull
+    @Override
+    public String toString() {
+        StringBuilder b = new StringBuilder(128);
+        b.append("ResourceClientProfile {tvInputSessionId=").append(mTvInputSessionId);
+        b.append(", useCase=").append(mUseCase);
+        b.append("}");
+        return b.toString();
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeString(mTvInputSessionId);
+        dest.writeInt(mUseCase);
+    }
+}
diff --git a/media/java/android/media/tv/tunerresourcemanager/TunerFrontendInfo.aidl b/media/java/android/media/tv/tunerresourcemanager/TunerFrontendInfo.aidl
new file mode 100644
index 0000000..e649c2a
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/TunerFrontendInfo.aidl
@@ -0,0 +1,24 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+/**
+ * Simple container of the FrontendInfo struct defined in the TunerHAL 1.0 interface.
+ *
+ * @hide
+ */
+parcelable TunerFrontendInfo;
\ No newline at end of file
diff --git a/media/java/android/media/tv/tunerresourcemanager/TunerFrontendInfo.java b/media/java/android/media/tv/tunerresourcemanager/TunerFrontendInfo.java
new file mode 100644
index 0000000..8957c37
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/TunerFrontendInfo.java
@@ -0,0 +1,141 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+import android.annotation.NonNull;
+import android.media.tv.tuner.frontend.FrontendSettings.Type;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+/**
+ * Simple container of the FrontendInfo struct defined in the TunerHAL 1.0 interface.
+ *
+ * <p>Note that this object is defined to pass necessary frontend info between the
+ * Tuner Resource Manager and the client. It includes partial information in
+ * {@link FrontendInfo}.
+ *
+ * @hide
+ */
+public final class TunerFrontendInfo implements Parcelable {
+    static final String TAG = "TunerFrontendInfo";
+
+    public static final
+            @NonNull
+            Parcelable.Creator<TunerFrontendInfo> CREATOR =
+            new Parcelable.Creator<TunerFrontendInfo>() {
+                @Override
+                public TunerFrontendInfo createFromParcel(Parcel source) {
+                    try {
+                        return new TunerFrontendInfo(source);
+                    } catch (Exception e) {
+                        Log.e(TAG, "Exception creating TunerFrontendInfo from parcel", e);
+                        return null;
+                    }
+                }
+
+                @Override
+                public TunerFrontendInfo[] newArray(int size) {
+                    return new TunerFrontendInfo[size];
+                }
+            };
+
+    private final int mId;
+
+    @Type
+    private final int mFrontendType;
+
+    /**
+     * Frontends are assigned with the same exclusiveGroupId if they can't
+     * function at same time. For instance, they share same hardware module.
+     */
+    private final int mExclusiveGroupId;
+
+    private TunerFrontendInfo(@NonNull Parcel source) {
+        mId = source.readInt();
+        mFrontendType = source.readInt();
+        mExclusiveGroupId = source.readInt();
+    }
+
+    /**
+     * Constructs a new {@link TunerFrontendInfo} with the given parameters.
+     *
+     * @param frontendType the type of the frontend.
+     * @param exclusiveGroupId the group id of the frontend. FE with the same
+                               group id can't function at the same time.
+     */
+    public TunerFrontendInfo(int id,
+                             @Type int frontendType,
+                             int exclusiveGroupId) {
+        mId = id;
+        mFrontendType = frontendType;
+        mExclusiveGroupId = exclusiveGroupId;
+    }
+
+    /**
+     * Returns the frontend id.
+     *
+     * @return the value of the frontend id.
+     */
+    public int getId() {
+        return mId;
+    }
+
+    /**
+     * Returns the application id that requests the tuner frontend resource.
+     *
+     * @return the value of the frontend type.
+     */
+    @Type
+    public int getFrontendType() {
+        return mFrontendType;
+    }
+
+    /**
+     * Returns the exclusiveGroupId. Frontends with the same exclusiveGroupId
+     * can't function at same time.
+     *
+     * @return the value of the exclusive group id.
+     */
+    public int getExclusiveGroupId() {
+        return mExclusiveGroupId;
+    }
+
+    // Parcelable
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @NonNull
+    @Override
+    public String toString() {
+        StringBuilder b = new StringBuilder(128);
+        b.append("TunerFrontendInfo {id=").append(mId);
+        b.append(", frontendType=").append(mFrontendType);
+        b.append(", exclusiveGroupId=").append(mExclusiveGroupId);
+        b.append("}");
+        return b.toString();
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeInt(mId);
+        dest.writeInt(mFrontendType);
+        dest.writeInt(mExclusiveGroupId);
+    }
+}
diff --git a/media/java/android/media/tv/tunerresourcemanager/TunerFrontendRequest.aidl b/media/java/android/media/tv/tunerresourcemanager/TunerFrontendRequest.aidl
new file mode 100644
index 0000000..5e48adc
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/TunerFrontendRequest.aidl
@@ -0,0 +1,24 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+/**
+ * Information required to request a Tuner Frontend.
+ *
+ * @hide
+ */
+parcelable TunerFrontendRequest;
\ No newline at end of file
diff --git a/media/java/android/media/tv/tunerresourcemanager/TunerFrontendRequest.java b/media/java/android/media/tv/tunerresourcemanager/TunerFrontendRequest.java
new file mode 100644
index 0000000..12f8032
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/TunerFrontendRequest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+import android.annotation.NonNull;
+import android.media.tv.tuner.frontend.FrontendSettings.Type;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+/**
+ * Information required to request a Tuner Frontend.
+ *
+ * @hide
+ */
+public final class TunerFrontendRequest implements Parcelable {
+    static final String TAG = "TunerFrontendRequest";
+
+    public static final
+            @NonNull
+            Parcelable.Creator<TunerFrontendRequest> CREATOR =
+            new Parcelable.Creator<TunerFrontendRequest>() {
+                @Override
+                public TunerFrontendRequest createFromParcel(Parcel source) {
+                    try {
+                        return new TunerFrontendRequest(source);
+                    } catch (Exception e) {
+                        Log.e(TAG, "Exception creating TunerFrontendRequest from parcel", e);
+                        return null;
+                    }
+                }
+
+                @Override
+                public TunerFrontendRequest[] newArray(int size) {
+                    return new TunerFrontendRequest[size];
+                }
+            };
+
+    private final int mClientId;
+    @Type
+    private final int mFrontendType;
+
+    private TunerFrontendRequest(@NonNull Parcel source) {
+        mClientId = source.readInt();
+        mFrontendType = source.readInt();
+    }
+
+    /**
+     * Constructs a new {@link TunerFrontendRequest} with the given parameters.
+     *
+     * @param clientId the unique id of the client returned when registering profile.
+     * @param frontendType the type of the requested frontend.
+     */
+    public TunerFrontendRequest(int clientId,
+                                @Type int frontendType) {
+        mClientId = clientId;
+        mFrontendType = frontendType;
+    }
+
+    /**
+     * Returns the client id that requests the tuner frontend resource.
+     *
+     * @return the value of the client id.
+     */
+    public int getClientId() {
+        return mClientId;
+    }
+
+    /**
+     * Returns the frontend type that the client requests for.
+     *
+     * @return the value of the requested frontend type.
+     */
+    @Type
+    public int getFrontendType() {
+        return mFrontendType;
+    }
+
+    // Parcelable
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @NonNull
+    @Override
+    public String toString() {
+        StringBuilder b = new StringBuilder(128);
+        b.append("TunerFrontendRequest {clientId=").append(mClientId);
+        b.append(", frontendType=").append(mFrontendType);
+        b.append("}");
+        return b.toString();
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeInt(mClientId);
+        dest.writeInt(mFrontendType);
+    }
+}
diff --git a/media/java/android/media/tv/tunerresourcemanager/TunerLnbRequest.aidl b/media/java/android/media/tv/tunerresourcemanager/TunerLnbRequest.aidl
new file mode 100644
index 0000000..0e6fcde
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/TunerLnbRequest.aidl
@@ -0,0 +1,24 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+/**
+ * Information required to request a Tuner Lnb.
+ *
+ * @hide
+ */
+parcelable TunerLnbRequest;
\ No newline at end of file
diff --git a/media/java/android/media/tv/tunerresourcemanager/TunerLnbRequest.java b/media/java/android/media/tv/tunerresourcemanager/TunerLnbRequest.java
new file mode 100644
index 0000000..5ed7f3f
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/TunerLnbRequest.java
@@ -0,0 +1,96 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+/**
+ * Information required to request a Tuner Lnb.
+ *
+ * @hide
+ */
+public final class TunerLnbRequest implements Parcelable {
+    static final String TAG = "TunerLnbRequest";
+
+    public static final
+            @NonNull
+                Parcelable.Creator<TunerLnbRequest> CREATOR =
+                new Parcelable.Creator<TunerLnbRequest>() {
+                @Override
+                public TunerLnbRequest createFromParcel(Parcel source) {
+                    try {
+                        return new TunerLnbRequest(source);
+                    } catch (Exception e) {
+                        Log.e(TAG, "Exception creating TunerLnbRequest from parcel", e);
+                        return null;
+                    }
+                }
+
+                @Override
+                public TunerLnbRequest[] newArray(int size) {
+                    return new TunerLnbRequest[size];
+                }
+            };
+
+    /**
+     * Client id of the client that sends the request.
+     */
+    private final int mClientId;
+
+    private TunerLnbRequest(@NonNull Parcel source) {
+        mClientId = source.readInt();
+    }
+
+    /**
+     * Constructs a new {@link TunerLnbRequest} with the given parameters.
+     *
+     * @param clientId the id of the client.
+     */
+    public TunerLnbRequest(int clientId) {
+        mClientId = clientId;
+    }
+
+    /**
+     * Returns the id of the client
+     */
+    public int getClientId() {
+        return mClientId;
+    }
+
+    // Parcelable
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @NonNull
+    @Override
+    public String toString() {
+        StringBuilder b = new StringBuilder(128);
+        b.append("TunerLnbRequest {clientId=").append(mClientId);
+        b.append("}");
+        return b.toString();
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeInt(mClientId);
+    }
+}
diff --git a/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java b/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java
new file mode 100644
index 0000000..7c11ed4
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java
@@ -0,0 +1,408 @@
+/*
+ * 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.media.tv.tunerresourcemanager;
+
+import android.annotation.CallbackExecutor;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.RequiresFeature;
+import android.annotation.SystemService;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Binder;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Interface of the Tuner Resource Manager(TRM). It manages resources used by TV Tuners.
+ * <p>Resources include:
+ * <ul>
+ * <li>TunerFrontend {@link android.media.tv.tuner.frontend}.
+ * <li>TunerLnb {@link android.media.tv.tuner.Lnb}.
+ * <li>MediaCas {@link android.media.MediaCas}.
+ * <ul>
+ *
+ * <p>Expected workflow is:
+ * <ul>
+ * <li>Tuner Java/MediaCas/TIF update resources of the current device with TRM.
+ * <li>Client registers its profile through {@link #registerClientProfile(ResourceClientProfile,
+ * Executor, ResourcesReclaimListener, int[])}.
+ * <li>Client requests resources through request APIs.
+ * <li>If the resource needs to be handed to a higher priority client from a lower priority
+ * one, TRM calls IResourcesReclaimListener registered by the lower priority client to release
+ * the resource.
+ * <ul>
+ *
+ * <p>TRM also exposes its priority comparison algorithm as a helping method to other services.
+ * {@see #isHigherPriority(ResourceClientProfile, ResourceClientProfile)}.
+ *
+ * @hide
+ */
+@RequiresFeature(PackageManager.FEATURE_LIVE_TV)
+@SystemService(Context.TV_TUNER_RESOURCE_MGR_SERVICE)
+public class TunerResourceManager {
+    private static final String TAG = "TunerResourceManager";
+    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+    public static final int INVALID_FRONTEND_ID = -1;
+    public static final int INVALID_CAS_SESSION_RESOURCE_ID = -1;
+    public static final int INVALID_LNB_ID = -1;
+    public static final int INVALID_TV_INPUT_DEVICE_ID = -1;
+    public static final int INVALID_TV_INPUT_PORT_ID = -1;
+
+    private final ITunerResourceManager mService;
+    private final int mUserId;
+
+    /**
+     * @hide
+     */
+    public TunerResourceManager(ITunerResourceManager service, int userId) {
+        mService = service;
+        mUserId = userId;
+    }
+
+    /**
+     * This API is used by the client to register their profile with the Tuner Resource manager.
+     *
+     * <p>The profile contains information that can show the base priority score of the client.
+     *
+     * @param profile {@link ResourceClientProfile} profile of the current client. Undefined use
+     *                case would cause IllegalArgumentException.
+     * @param executor the executor on which the listener would be invoked.
+     * @param listener {@link ResourcesReclaimListener} callback to reclaim clients' resources when
+     *                 needed.
+     * @param clientId returned a clientId from the resource manager when the
+     *                 the client registeres.
+     * @throws IllegalArgumentException when {@code profile} contains undefined use case.
+     */
+    public void registerClientProfile(@NonNull ResourceClientProfile profile,
+                        @NonNull @CallbackExecutor Executor executor,
+                        @NonNull ResourcesReclaimListener listener,
+                        @NonNull int[] clientId) {
+        // TODO: throw new IllegalArgumentException("Unknown client use case")
+        // when the use case is not defined.
+        try {
+            mService.registerClientProfile(profile,
+                    new IResourcesReclaimListener.Stub() {
+                    @Override
+                public void onReclaimResources() {
+                        final long identity = Binder.clearCallingIdentity();
+                        try {
+                            executor.execute(() -> listener.onReclaimResources());
+                        } finally {
+                            Binder.restoreCallingIdentity(identity);
+                        }
+                    }
+                }, clientId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * This API is used by the client to unregister their profile with the
+     * Tuner Resource manager.
+     *
+     * @param clientId the client id that needs to be unregistered.
+     */
+    public void unregisterClientProfile(int clientId) {
+        try {
+            mService.unregisterClientProfile(clientId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * This API is used by client to update its registered {@link ResourceClientProfile}.
+     *
+     * <p>We recommend creating a new tuner instance for different use cases instead of using this
+     * API since different use cases may need different resources.
+     *
+     * <p>If TIS updates use case, it needs to ensure underneath resources are exchangeable between
+     * two different use cases.
+     *
+     * <p>Only the arbitrary priority and niceValue are allowed to be updated.
+     *
+     * @param clientId the id of the client that is updating its profile.
+     * @param priority the priority that the client would like to update to.
+     * @param niceValue the nice value that the client would like to update to.
+     *
+     * @return true if the update is successful.
+     */
+    public boolean updateClientPriority(int clientId, int priority, int niceValue) {
+        boolean result = false;
+        try {
+            result = mService.updateClientPriority(clientId, priority, niceValue);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+        return result;
+    }
+
+    /**
+     * Updates the current TRM of the TunerHAL Frontend information.
+     *
+     * <p><strong>Note:</strong> This update must happen before the first
+     * {@link #requestFrontend(TunerFrontendRequest, int[])} and {@link #releaseFrontend(int)} call.
+     *
+     * @param infos an array of the available {@link TunerFrontendInfo} information.
+     */
+    public void setFrontendInfoList(@NonNull TunerFrontendInfo[] infos) {
+        try {
+            mService.setFrontendInfoList(infos);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Updates the TRM of the current CAS information.
+     *
+     * <p><strong>Note:</strong> This update must happen before the first
+     * {@link #requestCasSession(CasSessionRequest, int[])} and {@link #releaseCasSession(int)}
+     * call.
+     *
+     * @param casSystemId id of the updating CAS system.
+     * @param maxSessionNum the max session number of the CAS system that is updated.
+     */
+    public void updateCasInfo(int casSystemId, int maxSessionNum) {
+        try {
+            mService.updateCasInfo(casSystemId, maxSessionNum);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Updates the TRM of the current Lnb information.
+     *
+     * <p><strong>Note:</strong> This update must happen before the first
+     * {@link #requestLnb(TunerLnbRequest, int[])} and {@link #releaseLnb(int)} call.
+     *
+     * @param lnbIds ids of the updating lnbs.
+     */
+    public void setLnbInfoList(int[] lnbIds) {
+        try {
+            mService.setLnbInfoList(lnbIds);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Requests a frontend resource.
+     *
+     * <p>There are three possible scenarios:
+     * <ul>
+     * <li>If there is frontend available, the API would send the id back.
+     *
+     * <li>If no Frontend is available but the current request info can show higher priority than
+     * other uses of Frontend, the API will send
+     * {@link IResourcesReclaimListener#onReclaimResources()} to the {@link Tuner}. Tuner would
+     * handle the resource reclaim on the holder of lower priority and notify the holder of its
+     * resource loss.
+     *
+     * <li>If no frontend can be granted, the API would return false.
+     * <ul>
+     *
+     * <p><strong>Note:</strong> {@link #setFrontendInfoList(TunerFrontendInfo[])} must be called
+     * before this request.
+     *
+     * @param request {@link TunerFrontendRequest} information of the current request.
+     * @param frontendId a one-element array to return the granted frontendId. If
+     *                   no frontend granted, this will return {@link #INVALID_FRONTEND_ID}.
+     *
+     * @return true if there is frontend granted.
+     */
+    public boolean requestFrontend(@NonNull TunerFrontendRequest request,
+                @Nullable int[] frontendId) {
+        boolean result = false;
+        try {
+            result = mService.requestFrontend(request, frontendId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+        return result;
+    }
+
+    /**
+     * Requests from the client to share frontend with an existing client.
+     *
+     * <p><strong>Note:</strong> {@link #setFrontendInfoList(TunerFrontendInfo[])} must be called
+     * before this request.
+     *
+     * @param selfClientId the id of the client that sends the request.
+     * @param targetClientId the id of the client to share the frontend with.
+     */
+    public void shareFrontend(int selfClientId, int targetClientId) {
+        try {
+            mService.shareFrontend(selfClientId, targetClientId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Requests a CAS session resource.
+     *
+     * <p>There are three possible scenarios:
+     * <ul>
+     * <li>If there is Cas session available, the API would send the id back.
+     *
+     * <li>If no Cas system is available but the current request info can show higher priority than
+     * other uses of the cas sessions under the requested cas system, the API will send
+     * {@link IResourcesReclaimListener#onReclaimResources()} to the {@link Tuner}. Tuner would
+     * handle the resource reclaim on the holder of lower priority and notify the holder of its
+     * resource loss.
+     *
+     * <p><strong>Note:</strong> {@link #updateCasInfo(int, int)} must be called before this
+     * request.
+     *
+     * @param request {@link CasSessionRequest} information of the current request.
+     * @param sessionResourceId a one-element array to return the granted cas session id.
+     *                          If no CAS granted, this will return
+     *                          {@link #INVALID_CAS_SESSION_RESOURCE_ID}.
+     *
+     * @return true if there is CAS session granted.
+     */
+    public boolean requestCasSession(@NonNull CasSessionRequest request,
+                @NonNull int[] sessionResourceId) {
+        boolean result = false;
+        try {
+            result = mService.requestCasSession(request, sessionResourceId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+        return result;
+    }
+
+    /**
+     * Requests a Tuner Lnb resource.
+     *
+     * <p>There are three possible scenarios:
+     * <ul>
+     * <li>If there is Lnb available, the API would send the id back.
+     *
+     * <li>If no Lnb is available but the current request has a higher priority than other uses of
+     * lnbs, the API will send {@link IResourcesReclaimListener#onReclaimResources()} to the
+     * {@link Tuner}. Tuner would handle the resource reclaim on the holder of lower priority and
+     * notify the holder of its resource loss.
+     *
+     * <li>If no Lnb system can be granted, the API would return false.
+     * <ul>
+     *
+     * <p><strong>Note:</strong> {@link #setLnbInfos(int[])} must be called before this request.
+     *
+     * @param request {@link TunerLnbRequest} information of the current request.
+     * @param lnbId a one-element array to return the granted Lnb id.
+     *              If no Lnb granted, this will return {@link #INVALID_LNB_ID}.
+     *
+     * @return true if there is Lnb granted.
+     */
+    public boolean requestLnb(@NonNull TunerLnbRequest request, @NonNull int[] lnbId) {
+        boolean result = false;
+        try {
+            result = mService.requestLnb(request, lnbId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+        return result;
+    }
+
+    /**
+     * Notifies the TRM that the given frontend has been released.
+     *
+     * <p>Client must call this whenever it releases a Tuner frontend.
+     *
+     * <p><strong>Note:</strong> {@link #setFrontendInfoList(TunerFrontendInfo[])} must be called
+     * before this release.
+     *
+     * @param frontendId the id of the released frontend.
+     */
+    public void releaseFrontend(int frontendId) {
+        try {
+            mService.releaseFrontend(frontendId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Notifies the TRM that the given Cas session has been released.
+     *
+     * <p>Client must call this whenever it releases a Cas session.
+     *
+     * <p><strong>Note:</strong> {@link #updateCasInfo(int, int)} must be called before this
+     * release.
+     *
+     * @param sessionResourceId the id of the released CAS session.
+     */
+    public void releaseCasSession(int sessionResourceId) {
+        try {
+            mService.releaseCasSession(sessionResourceId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Notifies the TRM that the Lnb with the given id has been released.
+     *
+     * <p>Client must call this whenever it releases an Lnb.
+     *
+     * <p><strong>Note:</strong> {@link #setLnbInfos(int[])} must be called before this release.
+     *
+     * @param lnbId the id of the released Tuner Lnb.
+     */
+    public void releaseLnb(int lnbId) {
+        try {
+            mService.releaseLnb(lnbId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Compare two clients' priority.
+     *
+     * @param challengerProfile the {@link ResourceClientProfile} of the challenger.
+     * @param holderProfile the {@link ResourceClientProfile} of the holder of the resource.
+     *
+     * @return true if the challenger has higher priority than the holder.
+     */
+    public boolean isHigherPriority(ResourceClientProfile challengerProfile,
+            ResourceClientProfile holderProfile) {
+        try {
+            return mService.isHigherPriority(challengerProfile, holderProfile);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Interface used to receive events from TunerResourceManager.
+     */
+    public abstract static class ResourcesReclaimListener {
+        /*
+         * To reclaim all the resources of the callack owner.
+         */
+        public abstract void onReclaimResources();
+    }
+}
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index 9b37f95..71ba59c 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -724,18 +724,21 @@
     }
 
     if (buffer->size() > 0) {
-        // asC2Buffer clears internal reference, so set the reference again.
         std::shared_ptr<C2Buffer> c2Buffer = buffer->asC2Buffer();
-        buffer->copy(c2Buffer);
         if (c2Buffer) {
+            // asC2Buffer clears internal reference, so set the reference again.
+            buffer->copy(c2Buffer);
             switch (c2Buffer->data().type()) {
                 case C2BufferData::LINEAR: {
                     std::unique_ptr<JMediaCodecLinearBlock> context{new JMediaCodecLinearBlock};
                     context->mBuffer = c2Buffer;
                     ScopedLocalRef<jobject> linearBlock{env, env->NewObject(
                             gLinearBlockInfo.clazz, gLinearBlockInfo.ctorId)};
-                    env->SetLongField(
-                            linearBlock.get(), gLinearBlockInfo.contextId, (jlong)context.release());
+                    env->CallVoidMethod(
+                            linearBlock.get(),
+                            gLinearBlockInfo.setInternalStateId,
+                            (jlong)context.release(),
+                            true);
                     env->SetObjectField(frame, gFields.outputFrameLinearBlockID, linearBlock.get());
                     break;
                 }
@@ -744,8 +747,11 @@
                     context->mBuffer = c2Buffer;
                     ScopedLocalRef<jobject> graphicBlock{env, env->NewObject(
                             gGraphicBlockInfo.clazz, gGraphicBlockInfo.ctorId)};
-                    env->SetLongField(
-                            graphicBlock.get(), gGraphicBlockInfo.contextId, (jlong)context.release());
+                    env->CallVoidMethod(
+                            graphicBlock.get(),
+                            gGraphicBlockInfo.setInternalStateId,
+                            (jlong)context.release(),
+                            true);
                     env->SetObjectField(frame, gFields.outputFrameGraphicBlockID, graphicBlock.get());
                     break;
                 }
@@ -761,16 +767,22 @@
                 context->mLegacyBuffer = buffer;
                 ScopedLocalRef<jobject> linearBlock{env, env->NewObject(
                         gLinearBlockInfo.clazz, gLinearBlockInfo.ctorId)};
-                env->SetLongField(
-                        linearBlock.get(), gLinearBlockInfo.contextId, (jlong)context.release());
+                env->CallVoidMethod(
+                        linearBlock.get(),
+                        gLinearBlockInfo.setInternalStateId,
+                        (jlong)context.release(),
+                        true);
                 env->SetObjectField(frame, gFields.outputFrameLinearBlockID, linearBlock.get());
             } else {
                 std::unique_ptr<JMediaCodecGraphicBlock> context{new JMediaCodecGraphicBlock};
                 context->mLegacyBuffer = buffer;
                 ScopedLocalRef<jobject> graphicBlock{env, env->NewObject(
                         gGraphicBlockInfo.clazz, gGraphicBlockInfo.ctorId)};
-                env->SetLongField(
-                        graphicBlock.get(), gGraphicBlockInfo.contextId, (jlong)context.release());
+                env->CallVoidMethod(
+                        graphicBlock.get(),
+                        gGraphicBlockInfo.setInternalStateId,
+                        (jlong)context.release(),
+                        true);
                 env->SetObjectField(frame, gFields.outputFrameGraphicBlockID, graphicBlock.get());
             }
         }
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp
index 81a85c9..f4d2d03 100644
--- a/media/jni/android_media_tv_Tuner.cpp
+++ b/media/jni/android_media_tv_Tuner.cpp
@@ -27,16 +27,36 @@
 #pragma GCC diagnostic ignored "-Wunused-function"
 
 using ::android::hardware::Void;
+using ::android::hardware::hidl_bitfield;
 using ::android::hardware::hidl_vec;
 using ::android::hardware::tv::tuner::V1_0::DataFormat;
+using ::android::hardware::tv::tuner::V1_0::DemuxAlpFilterSettings;
+using ::android::hardware::tv::tuner::V1_0::DemuxAlpFilterType;
+using ::android::hardware::tv::tuner::V1_0::DemuxAlpLengthType;
+using ::android::hardware::tv::tuner::V1_0::DemuxFilterAvSettings;
+using ::android::hardware::tv::tuner::V1_0::DemuxFilterDownloadSettings;
 using ::android::hardware::tv::tuner::V1_0::DemuxFilterMainType;
 using ::android::hardware::tv::tuner::V1_0::DemuxFilterPesDataSettings;
+using ::android::hardware::tv::tuner::V1_0::DemuxFilterRecordSettings;
+using ::android::hardware::tv::tuner::V1_0::DemuxFilterSectionBits;
+using ::android::hardware::tv::tuner::V1_0::DemuxFilterSectionSettings;
 using ::android::hardware::tv::tuner::V1_0::DemuxFilterSettings;
+using ::android::hardware::tv::tuner::V1_0::DemuxIpAddress;
+using ::android::hardware::tv::tuner::V1_0::DemuxIpFilterSettings;
+using ::android::hardware::tv::tuner::V1_0::DemuxIpFilterType;
+using ::android::hardware::tv::tuner::V1_0::DemuxMmtpFilterSettings;
+using ::android::hardware::tv::tuner::V1_0::DemuxMmtpFilterType;
 using ::android::hardware::tv::tuner::V1_0::DemuxMmtpPid;
 using ::android::hardware::tv::tuner::V1_0::DemuxQueueNotifyBits;
+using ::android::hardware::tv::tuner::V1_0::DemuxRecordScIndexType;
+using ::android::hardware::tv::tuner::V1_0::DemuxScHevcIndex;
+using ::android::hardware::tv::tuner::V1_0::DemuxScIndex;
+using ::android::hardware::tv::tuner::V1_0::DemuxTlvFilterSettings;
+using ::android::hardware::tv::tuner::V1_0::DemuxTlvFilterType;
 using ::android::hardware::tv::tuner::V1_0::DemuxTpid;
 using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterSettings;
 using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterType;
+using ::android::hardware::tv::tuner::V1_0::DemuxTsIndex;
 using ::android::hardware::tv::tuner::V1_0::DvrSettings;
 using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSettings;
 using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard;
@@ -88,6 +108,7 @@
 using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtMode;
 using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtModulation;
 using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtSettings;
+using ::android::hardware::tv::tuner::V1_0::FrontendScanAtsc3PlpInfo;
 using ::android::hardware::tv::tuner::V1_0::FrontendType;
 using ::android::hardware::tv::tuner::V1_0::ITuner;
 using ::android::hardware::tv::tuner::V1_0::PlaybackSettings;
@@ -111,6 +132,9 @@
 
 static fields_t gFields;
 
+static int IP_V4_LENGTH = 4;
+static int IP_V6_LENGTH = 16;
+
 namespace android {
 /////////////// LnbCallback ///////////////////////
 LnbCallback::LnbCallback(jweak tunerObj, LnbId id) : mObject(tunerObj), mId(id) {}
@@ -226,14 +250,152 @@
             (jint)frontendEventType);
     return Void();
 }
-Return<void> FrontendCallback::onDiseqcMessage(const hidl_vec<uint8_t>& /*diseqcMessage*/) {
-    ALOGD("FrontendCallback::onDiseqcMessage");
-    return Void();
-}
 
-Return<void> FrontendCallback::onScanMessage(
-        FrontendScanMessageType type, const FrontendScanMessage& /*message*/) {
+Return<void> FrontendCallback::onScanMessage(FrontendScanMessageType type, const FrontendScanMessage& message) {
     ALOGD("FrontendCallback::onScanMessage, type=%d", type);
+    JNIEnv *env = AndroidRuntime::getJNIEnv();
+    jclass clazz = env->FindClass("android/media/tv/tuner/Tuner");
+    switch(type) {
+        case FrontendScanMessageType::LOCKED: {
+            if (message.isLocked()) {
+                env->CallVoidMethod(
+                        mObject,
+                        env->GetMethodID(clazz, "onLocked", "()V"));
+            }
+            break;
+        }
+        case FrontendScanMessageType::END: {
+            if (message.isEnd()) {
+                env->CallVoidMethod(
+                        mObject,
+                        env->GetMethodID(clazz, "onScanStopped", "()V"));
+            }
+            break;
+        }
+        case FrontendScanMessageType::PROGRESS_PERCENT: {
+            env->CallVoidMethod(
+                    mObject,
+                    env->GetMethodID(clazz, "onProgress", "(I)V"),
+                    (jint) message.progressPercent());
+            break;
+        }
+        case FrontendScanMessageType::FREQUENCY: {
+            std::vector<uint32_t> v = message.frequencies();
+            jintArray freqs = env->NewIntArray(v.size());
+            env->SetIntArrayRegion(freqs, 0, v.size(), reinterpret_cast<jint*>(&v[0]));
+
+            env->CallVoidMethod(
+                    mObject,
+                    env->GetMethodID(clazz, "onFrequenciesReport", "([I)V"),
+                    freqs);
+            break;
+        }
+        case FrontendScanMessageType::SYMBOL_RATE: {
+            std::vector<uint32_t> v = message.symbolRates();
+            jintArray symbolRates = env->NewIntArray(v.size());
+            env->SetIntArrayRegion(symbolRates, 0, v.size(), reinterpret_cast<jint*>(&v[0]));
+
+            env->CallVoidMethod(
+                    mObject,
+                    env->GetMethodID(clazz, "onSymbolRates", "([I)V"),
+                    symbolRates);
+            break;
+        }
+        case FrontendScanMessageType::HIERARCHY: {
+            env->CallVoidMethod(
+                    mObject,
+                    env->GetMethodID(clazz, "onHierarchy", "(I)V"),
+                    (jint) message.hierarchy());
+            break;
+        }
+        case FrontendScanMessageType::ANALOG_TYPE: {
+            env->CallVoidMethod(
+                    mObject,
+                    env->GetMethodID(clazz, "onSignalType", "(I)V"),
+                    (jint) message.analogType());
+            break;
+        }
+        case FrontendScanMessageType::PLP_IDS: {
+            std::vector<uint8_t> v = message.plpIds();
+            std::vector<jint> jintV(v.begin(), v.end());
+            jintArray plpIds = env->NewIntArray(v.size());
+            env->SetIntArrayRegion(plpIds, 0, jintV.size(), &jintV[0]);
+
+            env->CallVoidMethod(
+                    mObject,
+                    env->GetMethodID(clazz, "onPlpIds", "([I)V"),
+                    plpIds);
+            break;
+        }
+        case FrontendScanMessageType::GROUP_IDS: {
+            std::vector<uint8_t> v = message.groupIds();
+            std::vector<jint> jintV(v.begin(), v.end());
+            jintArray groupIds = env->NewIntArray(v.size());
+            env->SetIntArrayRegion(groupIds, 0, jintV.size(), &jintV[0]);
+
+            env->CallVoidMethod(
+                    mObject,
+                    env->GetMethodID(clazz, "onGroupIds", "([I)V"),
+                    groupIds);
+            break;
+        }
+        case FrontendScanMessageType::INPUT_STREAM_IDS: {
+            std::vector<uint16_t> v = message.inputStreamIds();
+            std::vector<jint> jintV(v.begin(), v.end());
+            jintArray streamIds = env->NewIntArray(v.size());
+            env->SetIntArrayRegion(streamIds, 0, jintV.size(), &jintV[0]);
+
+            env->CallVoidMethod(
+                    mObject,
+                    env->GetMethodID(clazz, "onInputStreamIds", "([I)V"),
+                    streamIds);
+            break;
+        }
+        case FrontendScanMessageType::STANDARD: {
+            FrontendScanMessage::Standard std = message.std();
+            jint standard;
+            if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sStd) {
+                standard = (jint) std.sStd();
+                env->CallVoidMethod(
+                        mObject,
+                        env->GetMethodID(clazz, "onDvbsStandard", "(I)V"),
+                        standard);
+            } else if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::tStd) {
+                standard = (jint) std.tStd();
+                env->CallVoidMethod(
+                        mObject,
+                        env->GetMethodID(clazz, "onDvbtStandard", "(I)V"),
+                        standard);
+            } else if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sifStd) {
+                standard = (jint) std.sifStd();
+                env->CallVoidMethod(
+                        mObject,
+                        env->GetMethodID(clazz, "onAnalogSifStandard", "(I)V"),
+                        standard);
+            }
+            break;
+        }
+        case FrontendScanMessageType::ATSC3_PLP_INFO: {
+            jclass plpClazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3PlpInfo");
+            jmethodID init = env->GetMethodID(plpClazz, "<init>", "(IZ)V");
+            std::vector<FrontendScanAtsc3PlpInfo> plpInfos = message.atsc3PlpInfos();
+            jobjectArray array = env->NewObjectArray(plpInfos.size(), plpClazz, NULL);
+
+            for (int i = 0; i < plpInfos.size(); i++) {
+                auto info = plpInfos[i];
+                jint plpId = (jint) info.plpId;
+                jboolean lls = (jboolean) info.bLlsFlag;
+
+                jobject obj = env->NewObject(plpClazz, init, plpId, lls);
+                env->SetObjectArrayElement(array, i, obj);
+            }
+            env->CallVoidMethod(
+                    mObject,
+                    env->GetMethodID(clazz, "onAtsc3PlpInfos", "([Landroid/media/tv/tuner/frontend/Atsc3PlpInfo;)V"),
+                    array);
+            break;
+        }
+    }
     return Void();
 }
 
@@ -322,6 +484,179 @@
             (jint) jId);
 }
 
+jobject JTuner::getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AnalogFrontendCapabilities");
+    jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V");
+
+    jint typeCap = caps.analogCaps().typeCap;
+    jint sifStandardCap = caps.analogCaps().sifStandardCap;
+    return env->NewObject(clazz, capsInit, typeCap, sifStandardCap);
+}
+
+jobject JTuner::getAtsc3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3FrontendCapabilities");
+    jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIIII)V");
+
+    jint bandwidthCap = caps.atsc3Caps().bandwidthCap;
+    jint modulationCap = caps.atsc3Caps().modulationCap;
+    jint timeInterleaveModeCap = caps.atsc3Caps().timeInterleaveModeCap;
+    jint codeRateCap = caps.atsc3Caps().codeRateCap;
+    jint fecCap = caps.atsc3Caps().fecCap;
+    jint demodOutputFormatCap = caps.atsc3Caps().demodOutputFormatCap;
+
+    return env->NewObject(clazz, capsInit, bandwidthCap, modulationCap, timeInterleaveModeCap,
+            codeRateCap, fecCap, demodOutputFormatCap);
+}
+
+jobject JTuner::getAtscFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AtscFrontendCapabilities");
+    jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(I)V");
+
+    jint modulationCap = caps.atscCaps().modulationCap;
+
+    return env->NewObject(clazz, capsInit, modulationCap);
+}
+
+jobject JTuner::getDvbcFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbcFrontendCapabilities");
+    jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(III)V");
+
+    jint modulationCap = caps.dvbcCaps().modulationCap;
+    jint fecCap = caps.dvbcCaps().fecCap;
+    jint annexCap = caps.dvbcCaps().annexCap;
+
+    return env->NewObject(clazz, capsInit, modulationCap, fecCap, annexCap);
+}
+
+jobject JTuner::getDvbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbsFrontendCapabilities");
+    jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IJI)V");
+
+    jint modulationCap = caps.dvbsCaps().modulationCap;
+    jlong innerfecCap = caps.dvbsCaps().innerfecCap;
+    jint standard = caps.dvbsCaps().standard;
+
+    return env->NewObject(clazz, capsInit, modulationCap, innerfecCap, standard);
+}
+
+jobject JTuner::getDvbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbtFrontendCapabilities");
+    jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIIIIZZ)V");
+
+    jint transmissionModeCap = caps.dvbtCaps().transmissionModeCap;
+    jint bandwidthCap = caps.dvbtCaps().bandwidthCap;
+    jint constellationCap = caps.dvbtCaps().constellationCap;
+    jint coderateCap = caps.dvbtCaps().coderateCap;
+    jint hierarchyCap = caps.dvbtCaps().hierarchyCap;
+    jint guardIntervalCap = caps.dvbtCaps().guardIntervalCap;
+    jboolean isT2Supported = caps.dvbtCaps().isT2Supported;
+    jboolean isMisoSupported = caps.dvbtCaps().isMisoSupported;
+
+    return env->NewObject(clazz, capsInit, transmissionModeCap, bandwidthCap, constellationCap,
+            coderateCap, hierarchyCap, guardIntervalCap, isT2Supported, isMisoSupported);
+}
+
+jobject JTuner::getIsdbs3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Isdbs3FrontendCapabilities");
+    jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V");
+
+    jint modulationCap = caps.isdbs3Caps().modulationCap;
+    jint coderateCap = caps.isdbs3Caps().coderateCap;
+
+    return env->NewObject(clazz, capsInit, modulationCap, coderateCap);
+}
+
+jobject JTuner::getIsdbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/frontend/IsdbsFrontendCapabilities");
+    jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V");
+
+    jint modulationCap = caps.isdbsCaps().modulationCap;
+    jint coderateCap = caps.isdbsCaps().coderateCap;
+
+    return env->NewObject(clazz, capsInit, modulationCap, coderateCap);
+}
+
+jobject JTuner::getIsdbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/frontend/IsdbtFrontendCapabilities");
+    jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIII)V");
+
+    jint modeCap = caps.isdbtCaps().modeCap;
+    jint bandwidthCap = caps.isdbtCaps().bandwidthCap;
+    jint modulationCap = caps.isdbtCaps().modulationCap;
+    jint coderateCap = caps.isdbtCaps().coderateCap;
+    jint guardIntervalCap = caps.isdbtCaps().guardIntervalCap;
+
+    return env->NewObject(clazz, capsInit, modeCap, bandwidthCap, modulationCap, coderateCap,
+            guardIntervalCap);
+}
+
+jobject JTuner::getFrontendInfo(int id) {
+    FrontendInfo feInfo;
+    Result res;
+    mTuner->getFrontendInfo(id, [&](Result r, const FrontendInfo& info) {
+        feInfo = info;
+        res = r;
+    });
+    if (res != Result::SUCCESS) {
+        return NULL;
+    }
+
+    JNIEnv *env = AndroidRuntime::getJNIEnv();
+    jclass clazz = env->FindClass("android/media/tv/tuner/frontend/FrontendInfo");
+    jmethodID infoInit = env->GetMethodID(clazz, "<init>",
+            "(IIIIIIII[ILandroid/media/tv/tuner/frontend/FrontendCapabilities;)V");
+
+    jint type = (jint) feInfo.type;
+    jint minFrequency = feInfo.minFrequency;
+    jint maxFrequency = feInfo.maxFrequency;
+    jint minSymbolRate = feInfo.minSymbolRate;
+    jint maxSymbolRate = feInfo.maxSymbolRate;
+    jint acquireRange = feInfo.acquireRange;
+    jint exclusiveGroupId = feInfo.exclusiveGroupId;
+    jintArray statusCaps = env->NewIntArray(feInfo.statusCaps.size());
+    env->SetIntArrayRegion(
+            statusCaps, 0, feInfo.statusCaps.size(),
+            reinterpret_cast<jint*>(&feInfo.statusCaps[0]));
+    FrontendInfo::FrontendCapabilities caps = feInfo.frontendCaps;
+
+    jobject jcaps = NULL;
+    switch(feInfo.type) {
+        case FrontendType::ANALOG:
+            jcaps = getAnalogFrontendCaps(env, caps);
+            break;
+        case FrontendType::ATSC3:
+            jcaps = getAtsc3FrontendCaps(env, caps);
+            break;
+        case FrontendType::ATSC:
+            jcaps = getAtscFrontendCaps(env, caps);
+            break;
+        case FrontendType::DVBC:
+            jcaps = getDvbcFrontendCaps(env, caps);
+            break;
+        case FrontendType::DVBS:
+            jcaps = getDvbsFrontendCaps(env, caps);
+            break;
+        case FrontendType::DVBT:
+            jcaps = getDvbtFrontendCaps(env, caps);
+            break;
+        case FrontendType::ISDBS:
+            jcaps = getIsdbsFrontendCaps(env, caps);
+            break;
+        case FrontendType::ISDBS3:
+            jcaps = getIsdbs3FrontendCaps(env, caps);
+            break;
+        case FrontendType::ISDBT:
+            jcaps = getIsdbtFrontendCaps(env, caps);
+            break;
+        default:
+            break;
+    }
+
+    return env->NewObject(
+            clazz, infoInit, (jint) id, type, minFrequency, maxFrequency, minSymbolRate,
+            maxSymbolRate, acquireRange, exclusiveGroupId, statusCaps, jcaps);
+}
+
 jobject JTuner::getLnbIds() {
     ALOGD("JTuner::getLnbIds()");
     mTuner->getLnbIds([&](Result, const hidl_vec<FrontendId>& lnbIds) {
@@ -1162,8 +1497,9 @@
     return 0;
 }
 
-static jobject android_media_tv_Tuner_get_frontend_info(JNIEnv*, jobject, jint) {
-    return NULL;
+static jobject android_media_tv_Tuner_get_frontend_info(JNIEnv *env, jobject thiz, jint id) {
+    sp<JTuner> tuner = getTuner(env, thiz);
+    return tuner->getFrontendInfo(id);
 }
 
 static jobject android_media_tv_Tuner_get_lnb_ids(JNIEnv *env, jobject thiz) {
@@ -1193,38 +1529,352 @@
     return NULL;
 }
 
-static DemuxFilterSettings getFilterSettings(
-        JNIEnv *env, int type, int subtype, jobject filterSettingsObj) {
+static DemuxFilterSectionBits getFilterSectionBits(JNIEnv *env, const jobject& settings) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/filter/SectionSettingsWithSectionBits");
+    jbyteArray jfilterBytes = static_cast<jbyteArray>(
+            env->GetObjectField(settings, env->GetFieldID(clazz, "mFilter", "[B")));
+    jsize size = env->GetArrayLength(jfilterBytes);
+    std::vector<uint8_t> filterBytes(size);
+    env->GetByteArrayRegion(
+            jfilterBytes, 0, size, reinterpret_cast<jbyte*>(&filterBytes[0]));
+
+    jbyteArray jmask = static_cast<jbyteArray>(
+            env->GetObjectField(settings, env->GetFieldID(clazz, "mMask", "[B")));
+    size = env->GetArrayLength(jmask);
+    std::vector<uint8_t> mask(size);
+    env->GetByteArrayRegion(jmask, 0, size, reinterpret_cast<jbyte*>(&mask[0]));
+
+    jbyteArray jmode = static_cast<jbyteArray>(
+            env->GetObjectField(settings, env->GetFieldID(clazz, "mMode", "[B")));
+    size = env->GetArrayLength(jmode);
+    std::vector<uint8_t> mode(size);
+    env->GetByteArrayRegion(jmode, 0, size, reinterpret_cast<jbyte*>(&mode[0]));
+
+    DemuxFilterSectionBits filterSectionBits {
+        .filter = filterBytes,
+        .mask = mask,
+        .mode = mode,
+    };
+    return filterSectionBits;
+}
+
+static DemuxFilterSectionSettings::Condition::TableInfo getFilterTableInfo(
+        JNIEnv *env, const jobject& settings) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/filter/SectionSettingsWithTableInfo");
+    uint16_t tableId = static_cast<uint16_t>(
+            env->GetIntField(settings, env->GetFieldID(clazz, "mTableId", "I")));
+    uint16_t version = static_cast<uint16_t>(
+            env->GetIntField(settings, env->GetFieldID(clazz, "mVersion", "I")));
+    DemuxFilterSectionSettings::Condition::TableInfo tableInfo {
+        .tableId = tableId,
+        .version = version,
+    };
+    return tableInfo;
+}
+
+static DemuxFilterSectionSettings getFilterSectionSettings(JNIEnv *env, const jobject& settings) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/filter/SectionSettings");
+    bool isCheckCrc = static_cast<bool>(
+            env->GetBooleanField(settings, env->GetFieldID(clazz, "mCrcEnabled", "Z")));
+    bool isRepeat = static_cast<bool>(
+            env->GetBooleanField(settings, env->GetFieldID(clazz, "mIsRepeat", "Z")));
+    bool isRaw = static_cast<bool>(
+            env->GetBooleanField(settings, env->GetFieldID(clazz, "mIsRaw", "Z")));
+
+    DemuxFilterSectionSettings filterSectionSettings {
+        .isCheckCrc = isCheckCrc,
+        .isRepeat = isRepeat,
+        .isRaw = isRaw,
+    };
+    if (env->IsInstanceOf(
+            settings,
+            env->FindClass("android/media/tv/tuner/filter/SectionSettingsWithSectionBits"))) {
+        filterSectionSettings.condition.sectionBits(getFilterSectionBits(env, settings));
+    } else if (env->IsInstanceOf(
+            settings,
+            env->FindClass("android/media/tv/tuner/filter/SectionSettingsWithTableInfo"))) {
+        filterSectionSettings.condition.tableInfo(getFilterTableInfo(env, settings));
+    }
+    return filterSectionSettings;
+}
+
+static DemuxFilterAvSettings getFilterAvSettings(JNIEnv *env, const jobject& settings) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/filter/AvSettings");
+    bool isPassthrough = static_cast<bool>(
+            env->GetBooleanField(settings, env->GetFieldID(clazz, "mIsPassthrough", "Z")));
+    DemuxFilterAvSettings filterAvSettings {
+        .isPassthrough = isPassthrough,
+    };
+    return filterAvSettings;
+}
+
+static DemuxFilterPesDataSettings getFilterPesDataSettings(JNIEnv *env, const jobject& settings) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/filter/PesSettings");
+    uint16_t streamId = static_cast<uint16_t>(
+            env->GetIntField(settings, env->GetFieldID(clazz, "mStreamId", "I")));
+    bool isRaw = static_cast<bool>(
+            env->GetBooleanField(settings, env->GetFieldID(clazz, "mIsRaw", "Z")));
+    DemuxFilterPesDataSettings filterPesDataSettings {
+        .streamId = streamId,
+        .isRaw = isRaw,
+    };
+    return filterPesDataSettings;
+}
+
+static DemuxFilterRecordSettings getFilterRecordSettings(JNIEnv *env, const jobject& settings) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/filter/RecordSettings");
+    hidl_bitfield<DemuxTsIndex> tsIndexMask = static_cast<hidl_bitfield<DemuxTsIndex>>(
+            env->GetIntField(settings, env->GetFieldID(clazz, "mTsIndexMask", "I")));
+    DemuxRecordScIndexType scIndexType = static_cast<DemuxRecordScIndexType>(
+            env->GetIntField(settings, env->GetFieldID(clazz, "mScIndexType", "I")));
+    jint scIndexMask = env->GetIntField(settings, env->GetFieldID(clazz, "mScIndexMask", "I"));
+
+    DemuxFilterRecordSettings filterRecordSettings {
+        .tsIndexMask = tsIndexMask,
+        .scIndexType = scIndexType,
+    };
+    if (scIndexType == DemuxRecordScIndexType::SC) {
+        filterRecordSettings.scIndexMask.sc(static_cast<hidl_bitfield<DemuxScIndex>>(scIndexMask));
+    } else if (scIndexType == DemuxRecordScIndexType::SC_HEVC) {
+        filterRecordSettings.scIndexMask.scHevc(
+                static_cast<hidl_bitfield<DemuxScHevcIndex>>(scIndexMask));
+    }
+    return filterRecordSettings;
+}
+
+static DemuxFilterDownloadSettings getFilterDownloadSettings(JNIEnv *env, const jobject& settings) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/filter/DownloadSettings");
+    uint32_t downloadId = static_cast<uint32_t>(
+            env->GetIntField(settings, env->GetFieldID(clazz, "mDownloadId", "I")));
+
+    DemuxFilterDownloadSettings filterDownloadSettings {
+        .downloadId = downloadId,
+    };
+    return filterDownloadSettings;
+}
+
+static DemuxIpAddress getDemuxIpAddress(JNIEnv *env, const jobject& config) {
+    jclass clazz = env->FindClass("android/media/tv/tuner/filter/IpFilterConfiguration");
+
+    jbyteArray jsrcIpAddress = static_cast<jbyteArray>(
+            env->GetObjectField(config, env->GetFieldID(clazz, "mSrcIpAddress", "[B")));
+    jsize srcSize = env->GetArrayLength(jsrcIpAddress);
+    jbyteArray jdstIpAddress = static_cast<jbyteArray>(
+            env->GetObjectField(config, env->GetFieldID(clazz, "mDstIpAddress", "[B")));
+    jsize dstSize = env->GetArrayLength(jdstIpAddress);
+
+    DemuxIpAddress res;
+
+    if (srcSize != dstSize) {
+        // should never happen. Validated on Java size.
+        jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
+            "IP address lengths don't match. srcLength=%d, dstLength=%d", srcSize, dstSize);
+        return res;
+    }
+
+    if (srcSize == IP_V4_LENGTH) {
+        uint8_t srcAddr[IP_V4_LENGTH];
+        uint8_t dstAddr[IP_V4_LENGTH];
+        env->GetByteArrayRegion(
+                jsrcIpAddress, 0, srcSize, reinterpret_cast<jbyte*>(srcAddr));
+        env->GetByteArrayRegion(
+                jdstIpAddress, 0, dstSize, reinterpret_cast<jbyte*>(dstAddr));
+        res.srcIpAddress.v4(srcAddr);
+        res.dstIpAddress.v4(dstAddr);
+    } else if (srcSize == IP_V6_LENGTH) {
+        uint8_t srcAddr[IP_V6_LENGTH];
+        uint8_t dstAddr[IP_V6_LENGTH];
+        env->GetByteArrayRegion(
+                jsrcIpAddress, 0, srcSize, reinterpret_cast<jbyte*>(srcAddr));
+        env->GetByteArrayRegion(
+                jdstIpAddress, 0, dstSize, reinterpret_cast<jbyte*>(dstAddr));
+        res.srcIpAddress.v6(srcAddr);
+        res.dstIpAddress.v6(dstAddr);
+    } else {
+        // should never happen. Validated on Java size.
+        jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
+            "Invalid IP address length %d", srcSize);
+        return res;
+    }
+
+    uint16_t srcPort = static_cast<uint16_t>(
+            env->GetIntField(config, env->GetFieldID(clazz, "mSrcPort", "I")));
+    uint16_t dstPort = static_cast<uint16_t>(
+            env->GetIntField(config, env->GetFieldID(clazz, "mDstPort", "I")));
+
+    res.srcPort = srcPort;
+    res.dstPort = dstPort;
+
+    return res;
+}
+
+static DemuxFilterSettings getFilterConfiguration(
+        JNIEnv *env, int type, int subtype, jobject filterConfigObj) {
     DemuxFilterSettings filterSettings;
-    // TODO: more setting types
     jobject settingsObj =
             env->GetObjectField(
-                    filterSettingsObj,
+                    filterConfigObj,
                     env->GetFieldID(
                             env->FindClass("android/media/tv/tuner/filter/FilterConfiguration"),
                             "mSettings",
                             "Landroid/media/tv/tuner/filter/Settings;"));
-    if (type == (int)DemuxFilterMainType::TS) {
-        // DemuxTsFilterSettings
-        jclass clazz = env->FindClass("android/media/tv/tuner/filter/TsFilterConfiguration");
-        int tpid = env->GetIntField(filterSettingsObj, env->GetFieldID(clazz, "mTpid", "I"));
-        if (subtype == (int)DemuxTsFilterType::PES) {
-            // DemuxFilterPesDataSettings
-            jclass settingClazz =
-                    env->FindClass("android/media/tv/tuner/filter/PesSettings");
-            int streamId = env->GetIntField(
-                    settingsObj, env->GetFieldID(settingClazz, "mStreamId", "I"));
-            bool isRaw = (bool)env->GetBooleanField(
-                    settingsObj, env->GetFieldID(settingClazz, "mIsRaw", "Z"));
-            DemuxFilterPesDataSettings filterPesDataSettings {
-                    .streamId = static_cast<uint16_t>(streamId),
-                    .isRaw = isRaw,
-            };
+    DemuxFilterMainType mainType = static_cast<DemuxFilterMainType>(type);
+    switch (mainType) {
+        case DemuxFilterMainType::TS: {
+            jclass clazz = env->FindClass("android/media/tv/tuner/filter/TsFilterConfiguration");
+            uint16_t tpid = static_cast<uint16_t>(
+                    env->GetIntField(filterConfigObj, env->GetFieldID(clazz, "mTpid", "I")));
             DemuxTsFilterSettings tsFilterSettings {
-                    .tpid = static_cast<uint16_t>(tpid),
+                .tpid = tpid,
             };
-            tsFilterSettings.filterSettings.pesData(filterPesDataSettings);
+
+            DemuxTsFilterType tsType = static_cast<DemuxTsFilterType>(subtype);
+            switch (tsType) {
+                case DemuxTsFilterType::SECTION:
+                    tsFilterSettings.filterSettings.section(
+                            getFilterSectionSettings(env, settingsObj));
+                    break;
+                case DemuxTsFilterType::AUDIO:
+                case DemuxTsFilterType::VIDEO:
+                    tsFilterSettings.filterSettings.av(getFilterAvSettings(env, settingsObj));
+                    break;
+                case DemuxTsFilterType::PES:
+                    tsFilterSettings.filterSettings.pesData(
+                            getFilterPesDataSettings(env, settingsObj));
+                    break;
+                case DemuxTsFilterType::RECORD:
+                    tsFilterSettings.filterSettings.record(
+                            getFilterRecordSettings(env, settingsObj));
+                    break;
+                default:
+                    break;
+            }
             filterSettings.ts(tsFilterSettings);
+            break;
+        }
+        case DemuxFilterMainType::MMTP: {
+            jclass clazz = env->FindClass("android/media/tv/tuner/filter/MmtpFilterConfiguration");
+            uint16_t mmtpPid = static_cast<uint16_t>(
+                    env->GetIntField(filterConfigObj, env->GetFieldID(clazz, "mMmtpPid", "I")));
+            DemuxMmtpFilterSettings mmtpFilterSettings {
+                .mmtpPid = mmtpPid,
+            };
+            DemuxMmtpFilterType mmtpType = static_cast<DemuxMmtpFilterType>(subtype);
+            switch (mmtpType) {
+                case DemuxMmtpFilterType::SECTION:
+                    mmtpFilterSettings.filterSettings.section(
+                            getFilterSectionSettings(env, settingsObj));
+                    break;
+                case DemuxMmtpFilterType::AUDIO:
+                case DemuxMmtpFilterType::VIDEO:
+                    mmtpFilterSettings.filterSettings.av(getFilterAvSettings(env, settingsObj));
+                    break;
+                case DemuxMmtpFilterType::PES:
+                    mmtpFilterSettings.filterSettings.pesData(
+                            getFilterPesDataSettings(env, settingsObj));
+                    break;
+                case DemuxMmtpFilterType::RECORD:
+                    mmtpFilterSettings.filterSettings.record(
+                            getFilterRecordSettings(env, settingsObj));
+                    break;
+                case DemuxMmtpFilterType::DOWNLOAD:
+                    mmtpFilterSettings.filterSettings.download(
+                            getFilterDownloadSettings(env, settingsObj));
+                    break;
+                default:
+                    break;
+            }
+            filterSettings.mmtp(mmtpFilterSettings);
+            break;
+        }
+        case DemuxFilterMainType::IP: {
+            DemuxIpAddress ipAddr = getDemuxIpAddress(env, filterConfigObj);
+
+            DemuxIpFilterSettings ipFilterSettings {
+                .ipAddr = ipAddr,
+            };
+            DemuxIpFilterType ipType = static_cast<DemuxIpFilterType>(subtype);
+            switch (ipType) {
+                case DemuxIpFilterType::SECTION: {
+                    ipFilterSettings.filterSettings.section(
+                            getFilterSectionSettings(env, settingsObj));
+                    break;
+                }
+                case DemuxIpFilterType::IP: {
+                    jclass clazz = env->FindClass(
+                            "android/media/tv/tuner/filter/IpFilterConfiguration");
+                    bool bPassthrough = static_cast<bool>(
+                            env->GetBooleanField(
+                                    filterConfigObj, env->GetFieldID(
+                                            clazz, "mPassthrough", "Z")));
+                    ipFilterSettings.filterSettings.bPassthrough(bPassthrough);
+                    break;
+                }
+                default: {
+                    break;
+                }
+            }
+            filterSettings.ip(ipFilterSettings);
+            break;
+        }
+        case DemuxFilterMainType::TLV: {
+            jclass clazz = env->FindClass("android/media/tv/tuner/filter/TlvFilterConfiguration");
+            uint8_t packetType = static_cast<uint8_t>(
+                    env->GetIntField(filterConfigObj, env->GetFieldID(clazz, "mPacketType", "I")));
+            bool isCompressedIpPacket = static_cast<bool>(
+                    env->GetBooleanField(
+                            filterConfigObj, env->GetFieldID(clazz, "mIsCompressedIpPacket", "Z")));
+
+            DemuxTlvFilterSettings tlvFilterSettings {
+                .packetType = packetType,
+                .isCompressedIpPacket = isCompressedIpPacket,
+            };
+            DemuxTlvFilterType tlvType = static_cast<DemuxTlvFilterType>(subtype);
+            switch (tlvType) {
+                case DemuxTlvFilterType::SECTION: {
+                    tlvFilterSettings.filterSettings.section(
+                            getFilterSectionSettings(env, settingsObj));
+                    break;
+                }
+                case DemuxTlvFilterType::TLV: {
+                    bool bPassthrough = static_cast<bool>(
+                            env->GetBooleanField(
+                                    filterConfigObj, env->GetFieldID(
+                                            clazz, "mPassthrough", "Z")));
+                    tlvFilterSettings.filterSettings.bPassthrough(bPassthrough);
+                    break;
+                }
+                default: {
+                    break;
+                }
+            }
+            filterSettings.tlv(tlvFilterSettings);
+            break;
+        }
+        case DemuxFilterMainType::ALP: {
+            jclass clazz = env->FindClass("android/media/tv/tuner/filter/AlpFilterConfiguration");
+            uint8_t packetType = static_cast<uint8_t>(
+                    env->GetIntField(filterConfigObj, env->GetFieldID(clazz, "mPacketType", "I")));
+            DemuxAlpLengthType lengthType = static_cast<DemuxAlpLengthType>(
+                    env->GetIntField(filterConfigObj, env->GetFieldID(clazz, "mLengthType", "I")));
+            DemuxAlpFilterSettings alpFilterSettings {
+                .packetType = packetType,
+                .lengthType = lengthType,
+            };
+            DemuxAlpFilterType alpType = static_cast<DemuxAlpFilterType>(subtype);
+            switch (alpType) {
+                case DemuxAlpFilterType::SECTION:
+                    alpFilterSettings.filterSettings.section(
+                            getFilterSectionSettings(env, settingsObj));
+                    break;
+                default:
+                    break;
+            }
+            filterSettings.alp(alpFilterSettings);
+            break;
+        }
+        default: {
+            break;
         }
     }
     return filterSettings;
@@ -1265,7 +1915,7 @@
         ALOGD("Failed to configure filter: filter not found");
         return (int)Result::INVALID_STATE;
     }
-    DemuxFilterSettings filterSettings = getFilterSettings(env, type, subtype, settings);
+    DemuxFilterSettings filterSettings = getFilterConfiguration(env, type, subtype, settings);
     Result res = iFilterSp->configure(filterSettings);
     MQDescriptorSync<uint8_t> filterMQDesc;
     if (res == Result::SUCCESS && filterSp->mFilterMQ == NULL) {
diff --git a/media/jni/android_media_tv_Tuner.h b/media/jni/android_media_tv_Tuner.h
index 978d9c6..d899bbd 100644
--- a/media/jni/android_media_tv_Tuner.h
+++ b/media/jni/android_media_tv_Tuner.h
@@ -39,6 +39,7 @@
 using ::android::hardware::tv::tuner::V1_0::DvrType;
 using ::android::hardware::tv::tuner::V1_0::FrontendEventType;
 using ::android::hardware::tv::tuner::V1_0::FrontendId;
+using ::android::hardware::tv::tuner::V1_0::FrontendInfo;
 using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage;
 using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType;
 using ::android::hardware::tv::tuner::V1_0::FrontendScanType;
@@ -108,7 +109,6 @@
     FrontendCallback(jweak tunerObj, FrontendId id);
 
     virtual Return<void> onEvent(FrontendEventType frontendEventType);
-    virtual Return<void> onDiseqcMessage(const hidl_vec<uint8_t>& diseqcMessage);
     virtual Return<void> onScanMessage(
             FrontendScanMessageType type, const FrontendScanMessage& message);
 
@@ -132,6 +132,7 @@
     sp<ITuner> getTunerService();
     jobject getFrontendIds();
     jobject openFrontendById(int id);
+    jobject getFrontendInfo(int id);
     int tune(const FrontendSettings& settings);
     int stopTune();
     int scan(const FrontendSettings& settings, FrontendScanType scanType);
@@ -158,6 +159,15 @@
     sp<ILnb> mLnb;
     sp<IDemux> mDemux;
     int mDemuxId;
+    static jobject getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps);
+    static jobject getAtsc3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps);
+    static jobject getAtscFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps);
+    static jobject getDvbcFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps);
+    static jobject getDvbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps);
+    static jobject getDvbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps);
+    static jobject getIsdbs3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps);
+    static jobject getIsdbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps);
+    static jobject getIsdbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps);
 };
 
 }  // namespace android
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaFileTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaFileTest.java
index 507dd4a..15a501d 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaFileTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaFileTest.java
@@ -97,6 +97,9 @@
         assertTrue(isDocumentMimeType("text/plain"));
         assertTrue(isDocumentMimeType("application/pdf"));
         assertTrue(isDocumentMimeType("application/msword"));
+        assertTrue(isDocumentMimeType("application/vnd.ms-excel.addin.macroEnabled.12"));
+        assertTrue(isDocumentMimeType("application/vnd.ms-powerpoint.addin.macroEnabled.12"));
+        assertTrue(isDocumentMimeType("application/vnd.ms-word.document.macroEnabled.12"));
         assertFalse(isDocumentMimeType("audio/mpeg"));
     }
 
diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java
new file mode 100644
index 0000000..e80562b
--- /dev/null
+++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java
@@ -0,0 +1,523 @@
+/*
+ * 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.
+ */
+
+package com.android.mediaroutertest;
+
+import static android.media.MediaRoute2Info.FEATURE_LIVE_AUDIO;
+import static android.media.MediaRoute2Info.PLAYBACK_VOLUME_FIXED;
+import static android.media.MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE;
+
+import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.FEATURE_SAMPLE;
+import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.FEATURE_SPECIAL;
+import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_ID1;
+import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_ID2;
+import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_ID5_TO_TRANSFER_TO;
+import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_ID_FIXED_VOLUME;
+import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_ID_SPECIAL_FEATURE;
+import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_ID_VARIABLE_VOLUME;
+import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_NAME2;
+import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.VOLUME_MAX;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import android.content.Context;
+import android.media.MediaRoute2Info;
+import android.media.MediaRouter2;
+import android.media.MediaRouter2.RouteCallback;
+import android.media.MediaRouter2.TransferCallback;
+import android.media.MediaRouter2Manager;
+import android.media.MediaRouter2Utils;
+import android.media.RouteDiscoveryPreference;
+import android.media.RoutingSessionInfo;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.text.TextUtils;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Predicate;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class MediaRouter2ManagerTest {
+    private static final String TAG = "MediaRouter2ManagerTest";
+    private static final int TIMEOUT_MS = 5000;
+
+    private Context mContext;
+    private MediaRouter2Manager mManager;
+    private MediaRouter2 mRouter2;
+    private Executor mExecutor;
+    private String mPackageName;
+
+    private final List<MediaRouter2Manager.Callback> mManagerCallbacks = new ArrayList<>();
+    private final List<RouteCallback> mRouteCallbacks = new ArrayList<>();
+    private final List<MediaRouter2.TransferCallback> mTransferCallbacks = new ArrayList<>();
+
+    public static final List<String> FEATURES_ALL = new ArrayList();
+    public static final List<String> FEATURES_SPECIAL = new ArrayList();
+    private static final List<String> FEATURES_LIVE_AUDIO = new ArrayList<>();
+
+    static {
+        FEATURES_ALL.add(FEATURE_SAMPLE);
+        FEATURES_ALL.add(FEATURE_SPECIAL);
+        FEATURES_ALL.add(FEATURE_LIVE_AUDIO);
+
+        FEATURES_SPECIAL.add(FEATURE_SPECIAL);
+
+        FEATURES_LIVE_AUDIO.add(FEATURE_LIVE_AUDIO);
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        mContext = InstrumentationRegistry.getTargetContext();
+        mManager = MediaRouter2Manager.getInstance(mContext);
+        mRouter2 = MediaRouter2.getInstance(mContext);
+        //TODO: If we need to support thread pool executors, change this to thread pool executor.
+        mExecutor = Executors.newSingleThreadExecutor();
+        mPackageName = mContext.getPackageName();
+    }
+
+    @After
+    public void tearDown() {
+        // order matters (callbacks should be cleared at the last)
+        releaseAllSessions();
+        // unregister callbacks
+        clearCallbacks();
+    }
+
+    @Test
+    public void testOnRoutesRemovedAndAdded() throws Exception {
+        RouteCallback routeCallback = new RouteCallback();
+        mRouteCallbacks.add(routeCallback);
+        mRouter2.registerRouteCallback(mExecutor, routeCallback,
+                new RouteDiscoveryPreference.Builder(FEATURES_ALL, true).build());
+
+        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
+
+        CountDownLatch removedLatch = new CountDownLatch(1);
+        CountDownLatch addedLatch = new CountDownLatch(1);
+
+        addManagerCallback(new MediaRouter2Manager.Callback() {
+            @Override
+            public void onRoutesRemoved(List<MediaRoute2Info> routes) {
+                assertTrue(routes.size() > 0);
+                for (MediaRoute2Info route : routes) {
+                    if (route.getOriginalId().equals(ROUTE_ID2)
+                            && route.getName().equals(ROUTE_NAME2)) {
+                        removedLatch.countDown();
+                    }
+                }
+            }
+            @Override
+            public void onRoutesAdded(List<MediaRoute2Info> routes) {
+                assertTrue(routes.size() > 0);
+                if (removedLatch.getCount() > 0) {
+                    return;
+                }
+                for (MediaRoute2Info route : routes) {
+                    if (route.getOriginalId().equals(ROUTE_ID2)
+                            && route.getName().equals(ROUTE_NAME2)) {
+                        addedLatch.countDown();
+                    }
+                }
+            }
+        });
+
+        MediaRoute2Info routeToRemove = routes.get(ROUTE_ID2);
+
+        SampleMediaRoute2ProviderService sInstance =
+                SampleMediaRoute2ProviderService.getInstance();
+        assertNotNull(sInstance);
+        sInstance.removeRoute(ROUTE_ID2);
+        assertTrue(removedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+
+        sInstance.addRoute(routeToRemove);
+        assertTrue(addedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+    }
+
+    /**
+     * Tests if we get proper routes for application that has special route feature.
+     */
+    @Test
+    public void testRouteFeatures() throws Exception {
+        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_SPECIAL);
+
+        int routeCount = 0;
+        for (MediaRoute2Info route : routes.values()) {
+            if (!route.isSystemRoute()) {
+                routeCount++;
+            }
+        }
+
+        assertEquals(1, routeCount);
+        assertNotNull(routes.get(ROUTE_ID_SPECIAL_FEATURE));
+    }
+
+    /**
+     * Tests if MR2.SessionCallback.onSessionCreated is called
+     * when a route is selected from MR2Manager.
+     */
+    @Test
+    public void testRouterOnSessionCreated() throws Exception {
+        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
+
+        CountDownLatch latch = new CountDownLatch(1);
+
+        addManagerCallback(new MediaRouter2Manager.Callback());
+        //TODO: remove this when it's not necessary.
+        addRouterCallback(new MediaRouter2.RouteCallback());
+        addTransferCallback(new MediaRouter2.TransferCallback() {
+            @Override
+            public void onTransferred(MediaRouter2.RoutingController oldController,
+                    MediaRouter2.RoutingController newController) {
+                if (newController == null) {
+                    return;
+                }
+                if (createRouteMap(newController.getSelectedRoutes()).containsKey(ROUTE_ID1)) {
+                    latch.countDown();
+                }
+            }
+        });
+
+        MediaRoute2Info routeToSelect = routes.get(ROUTE_ID1);
+        assertNotNull(routeToSelect);
+
+        mManager.selectRoute(mPackageName, routeToSelect);
+        assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+        assertEquals(2, mManager.getActiveSessions().size());
+    }
+
+    @Test
+    public void testGetRoutingControllers() throws Exception {
+        CountDownLatch latch = new CountDownLatch(1);
+
+        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
+        addRouterCallback(new RouteCallback());
+        addManagerCallback(new MediaRouter2Manager.Callback() {
+            @Override
+            public void onSessionCreated(MediaRouter2Manager.RoutingController controller) {
+                if (TextUtils.equals(mPackageName, controller.getClientPackageName())
+                        && createRouteMap(controller.getSelectedRoutes()).containsKey(ROUTE_ID1)) {
+                    latch.countDown();
+                }
+            }
+        });
+
+        assertEquals(1, mManager.getRoutingSessions(mPackageName).size());
+
+        mManager.selectRoute(mPackageName, routes.get(ROUTE_ID1));
+        latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS);
+
+        List<RoutingSessionInfo> sessions = mManager.getRoutingSessions(mPackageName);
+
+        assertEquals(2, sessions.size());
+
+        MediaRouter2Manager.RoutingController routingController =
+                mManager.getControllerForSession(sessions.get(1));
+        awaitOnRouteChangedManager(
+                () -> routingController.release(),
+                ROUTE_ID1,
+                route -> TextUtils.equals(route.getClientPackageName(), null));
+        assertEquals(1, mManager.getRoutingSessions(mPackageName).size());
+    }
+
+    /**
+     * Tests select, transfer, release of routes of a provider
+     */
+    @Test
+    public void testSelectAndTransferAndRelease() throws Exception {
+        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
+        addRouterCallback(new RouteCallback());
+
+        CountDownLatch onSessionCreatedLatch = new CountDownLatch(1);
+
+        addManagerCallback(new MediaRouter2Manager.Callback() {
+            @Override
+            public void onSessionCreated(MediaRouter2Manager.RoutingController controller) {
+                assertNotNull(controller);
+                onSessionCreatedLatch.countDown();
+            }
+        });
+        awaitOnRouteChangedManager(
+                () -> mManager.selectRoute(mPackageName, routes.get(ROUTE_ID1)),
+                ROUTE_ID1,
+                route -> TextUtils.equals(route.getClientPackageName(), mPackageName));
+        assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+
+        List<RoutingSessionInfo> sessions = mManager.getRoutingSessions(mPackageName);
+
+        assertEquals(2, sessions.size());
+        MediaRouter2Manager.RoutingController routingController =
+                mManager.getControllerForSession(sessions.get(1));
+
+        awaitOnRouteChangedManager(
+                () -> mManager.selectRoute(mPackageName, routes.get(ROUTE_ID5_TO_TRANSFER_TO)),
+                ROUTE_ID5_TO_TRANSFER_TO,
+                route -> TextUtils.equals(route.getClientPackageName(), mPackageName));
+
+        awaitOnRouteChangedManager(
+                () -> routingController.release(),
+                ROUTE_ID5_TO_TRANSFER_TO,
+                route -> TextUtils.equals(route.getClientPackageName(), null));
+    }
+
+    @Test
+    public void testSetSystemRouteVolume() throws Exception {
+        // ensure client
+        addManagerCallback(new MediaRouter2Manager.Callback());
+        String selectedSystemRouteId =
+                MediaRouter2Utils.getOriginalId(
+                mManager.getActiveSessions().get(0).getSelectedRoutes().get(0));
+        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(Collections.emptyList());
+        MediaRoute2Info volRoute = routes.get(selectedSystemRouteId);
+        assertNotNull(volRoute);
+
+        int originalVolume = volRoute.getVolume();
+        int targetVolume = originalVolume == volRoute.getVolumeMax()
+                ? originalVolume - 1 : originalVolume + 1;
+
+        awaitOnRouteChangedManager(
+                () -> mManager.setRouteVolume(volRoute, targetVolume),
+                selectedSystemRouteId,
+                (route -> route.getVolume() == targetVolume));
+
+        awaitOnRouteChangedManager(
+                () -> mManager.setRouteVolume(volRoute, originalVolume),
+                selectedSystemRouteId,
+                (route -> route.getVolume() == originalVolume));
+    }
+
+    @Test
+    public void testSetRouteVolume() throws Exception {
+        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
+        MediaRoute2Info volRoute = routes.get(ROUTE_ID_VARIABLE_VOLUME);
+
+        int originalVolume = volRoute.getVolume();
+        int targetVolume = originalVolume == volRoute.getVolumeMax()
+                ? originalVolume - 1 : originalVolume + 1;
+
+        awaitOnRouteChangedManager(
+                () -> mManager.setRouteVolume(volRoute, targetVolume),
+                ROUTE_ID_VARIABLE_VOLUME,
+                (route -> route.getVolume() == targetVolume));
+
+        awaitOnRouteChangedManager(
+                () -> mManager.setRouteVolume(volRoute, originalVolume),
+                ROUTE_ID_VARIABLE_VOLUME,
+                (route -> route.getVolume() == originalVolume));
+    }
+
+    @Test
+    public void testSetSessionVolume() throws Exception {
+        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
+        addRouterCallback(new RouteCallback());
+
+        CountDownLatch onSessionCreatedLatch = new CountDownLatch(1);
+        CountDownLatch volumeChangedLatch = new CountDownLatch(2);
+
+        // create a controller
+        addManagerCallback(new MediaRouter2Manager.Callback() {
+            @Override
+            public void onSessionCreated(MediaRouter2Manager.RoutingController controller) {
+                assertNotNull(controller);
+                onSessionCreatedLatch.countDown();
+            }
+        });
+
+        mManager.selectRoute(mPackageName, routes.get(ROUTE_ID1));
+        assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+
+        List<RoutingSessionInfo> sessions = mManager.getRoutingSessions(mPackageName);
+        assertEquals(2, sessions.size());
+
+        // test setSessionVolume
+        RoutingSessionInfo sessionInfo = sessions.get(1);
+        int currentVolume = sessionInfo.getVolume();
+        int targetVolume = (currentVolume == 0) ? 1 : (currentVolume - 1);
+
+        MediaRouter2.ControllerCallback controllerCallback = new MediaRouter2.ControllerCallback() {
+            @Override
+            public void onControllerUpdated(MediaRouter2.RoutingController controller) {
+                if (!TextUtils.equals(sessionInfo.getId(), controller.getId())) {
+                    return;
+                }
+                if (controller.getVolume() == targetVolume) {
+                    volumeChangedLatch.countDown();
+                }
+            }
+        };
+
+        addManagerCallback(new MediaRouter2Manager.Callback() {
+            @Override
+            public void onSessionsUpdated() {
+                List<RoutingSessionInfo> sessions = mManager.getRoutingSessions(mPackageName);
+                if (sessions.size() != 2) {
+                    return;
+                }
+
+                if (sessions.get(1).getVolume() == targetVolume) {
+                    volumeChangedLatch.countDown();
+                }
+            }
+        });
+
+        try {
+            mRouter2.registerControllerCallback(mExecutor, controllerCallback);
+            mManager.setSessionVolume(sessionInfo, targetVolume);
+            assertTrue(volumeChangedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+        } finally {
+            mRouter2.unregisterControllerCallback(controllerCallback);
+        }
+    }
+
+    @Test
+    public void testVolumeHandling() throws Exception {
+        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
+
+        MediaRoute2Info fixedVolumeRoute = routes.get(ROUTE_ID_FIXED_VOLUME);
+        MediaRoute2Info variableVolumeRoute = routes.get(ROUTE_ID_VARIABLE_VOLUME);
+
+        assertEquals(PLAYBACK_VOLUME_FIXED, fixedVolumeRoute.getVolumeHandling());
+        assertEquals(PLAYBACK_VOLUME_VARIABLE, variableVolumeRoute.getVolumeHandling());
+        assertEquals(VOLUME_MAX, variableVolumeRoute.getVolumeMax());
+    }
+
+    Map<String, MediaRoute2Info> waitAndGetRoutesWithManager(List<String> routeFeatures)
+            throws Exception {
+        CountDownLatch addedLatch = new CountDownLatch(1);
+        CountDownLatch featuresLatch = new CountDownLatch(1);
+
+        // A dummy callback is required to send route feature info.
+        RouteCallback routeCallback = new RouteCallback();
+        MediaRouter2Manager.Callback managerCallback = new MediaRouter2Manager.Callback() {
+            @Override
+            public void onRoutesAdded(List<MediaRoute2Info> routes) {
+                for (int i = 0; i < routes.size(); i++) {
+                    if (!routes.get(i).isSystemRoute()) {
+                        addedLatch.countDown();
+                        break;
+                    }
+                }
+            }
+
+            @Override
+            public void onControlCategoriesChanged(String packageName,
+                    List<String> preferredFeatures) {
+                if (TextUtils.equals(mPackageName, packageName)
+                        && preferredFeatures.equals(routeFeatures)) {
+                    featuresLatch.countDown();
+                }
+            }
+        };
+        mManager.registerCallback(mExecutor, managerCallback);
+        mRouter2.registerRouteCallback(mExecutor, routeCallback,
+                new RouteDiscoveryPreference.Builder(routeFeatures, true).build());
+        try {
+            addedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS);
+            featuresLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS);
+            return createRouteMap(mManager.getAvailableRoutes(mPackageName));
+        } finally {
+            mRouter2.unregisterRouteCallback(routeCallback);
+            mManager.unregisterCallback(managerCallback);
+        }
+    }
+
+    void awaitOnRouteChangedManager(Runnable task, String routeId,
+            Predicate<MediaRoute2Info> predicate) throws Exception {
+        CountDownLatch latch = new CountDownLatch(1);
+        MediaRouter2Manager.Callback callback = new MediaRouter2Manager.Callback() {
+            @Override
+            public void onRoutesChanged(List<MediaRoute2Info> changed) {
+                MediaRoute2Info route = createRouteMap(changed).get(routeId);
+                if (route != null && predicate.test(route)) {
+                    latch.countDown();
+                }
+            }
+        };
+        mManager.registerCallback(mExecutor, callback);
+        try {
+            task.run();
+            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+        } finally {
+            mManager.unregisterCallback(callback);
+        }
+    }
+
+    // Helper for getting routes easily
+    static Map<String, MediaRoute2Info> createRouteMap(List<MediaRoute2Info> routes) {
+        Map<String, MediaRoute2Info> routeMap = new HashMap<>();
+        for (MediaRoute2Info route : routes) {
+            routeMap.put(route.getOriginalId(), route);
+        }
+        return routeMap;
+    }
+
+    private void addManagerCallback(MediaRouter2Manager.Callback callback) {
+        mManagerCallbacks.add(callback);
+        mManager.registerCallback(mExecutor, callback);
+    }
+
+    private void addRouterCallback(RouteCallback routeCallback) {
+        mRouteCallbacks.add(routeCallback);
+        mRouter2.registerRouteCallback(mExecutor, routeCallback, RouteDiscoveryPreference.EMPTY);
+    }
+
+    private void addTransferCallback(TransferCallback transferCallback) {
+        mTransferCallbacks.add(transferCallback);
+        mRouter2.registerTransferCallback(mExecutor, transferCallback);
+    }
+
+    private void clearCallbacks() {
+        for (MediaRouter2Manager.Callback callback : mManagerCallbacks) {
+            mManager.unregisterCallback(callback);
+        }
+        mManagerCallbacks.clear();
+
+        for (RouteCallback routeCallback : mRouteCallbacks) {
+            mRouter2.unregisterRouteCallback(routeCallback);
+        }
+        mRouteCallbacks.clear();
+
+        for (MediaRouter2.TransferCallback transferCallback : mTransferCallbacks) {
+            mRouter2.unregisterTransferCallback(transferCallback);
+        }
+        mTransferCallbacks.clear();
+    }
+
+    private void releaseAllSessions() {
+        // ensure ManagerRecord in MediaRouter2ServiceImpl
+        addManagerCallback(new MediaRouter2Manager.Callback());
+
+        for (RoutingSessionInfo session : mManager.getActiveSessions()) {
+            mManager.getControllerForSession(session).release();
+        }
+    }
+}
diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouterManagerTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouterManagerTest.java
deleted file mode 100644
index f10e5eb..0000000
--- a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouterManagerTest.java
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.mediaroutertest;
-
-import static android.media.MediaRoute2Info.FEATURE_LIVE_AUDIO;
-import static android.media.MediaRoute2Info.PLAYBACK_VOLUME_FIXED;
-import static android.media.MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE;
-
-import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ACTION_REMOVE_ROUTE;
-import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.FEATURE_SAMPLE;
-import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.FEATURE_SPECIAL;
-import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_ID1;
-import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_ID2;
-import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_ID5_TO_TRANSFER_TO;
-import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_ID_FIXED_VOLUME;
-import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_ID_SPECIAL_FEATURE;
-import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_ID_VARIABLE_VOLUME;
-import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_NAME1;
-import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.ROUTE_NAME2;
-import static com.android.mediaroutertest.SampleMediaRoute2ProviderService.VOLUME_MAX;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import android.content.Context;
-import android.content.Intent;
-import android.media.MediaRoute2Info;
-import android.media.MediaRouter2;
-import android.media.MediaRouter2.RouteCallback;
-import android.media.MediaRouter2.RoutingControllerCallback;
-import android.media.MediaRouter2Manager;
-import android.media.RouteDiscoveryPreference;
-import android.media.RoutingSessionInfo;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-import android.text.TextUtils;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Predicate;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class MediaRouterManagerTest {
-    private static final String TAG = "MediaRouterManagerTest";
-    private static final int TIMEOUT_MS = 5000;
-
-    private Context mContext;
-    private MediaRouter2Manager mManager;
-    private MediaRouter2 mRouter2;
-    private Executor mExecutor;
-    private String mPackageName;
-
-    private final List<MediaRouter2Manager.Callback> mManagerCallbacks = new ArrayList<>();
-    private final List<RouteCallback> mRouteCallbacks = new ArrayList<>();
-    private final List<RoutingControllerCallback> mControllerCallbacks = new ArrayList<>();
-
-    public static final List<String> FEATURES_ALL = new ArrayList();
-    public static final List<String> FEATURES_SPECIAL = new ArrayList();
-    private static final List<String> FEATURES_LIVE_AUDIO = new ArrayList<>();
-
-    static {
-        FEATURES_ALL.add(FEATURE_SAMPLE);
-        FEATURES_ALL.add(FEATURE_SPECIAL);
-        FEATURES_ALL.add(FEATURE_LIVE_AUDIO);
-
-        FEATURES_SPECIAL.add(FEATURE_SPECIAL);
-
-        FEATURES_LIVE_AUDIO.add(FEATURE_LIVE_AUDIO);
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        mContext = InstrumentationRegistry.getTargetContext();
-        mManager = MediaRouter2Manager.getInstance(mContext);
-        mRouter2 = MediaRouter2.getInstance(mContext);
-        //TODO: If we need to support thread pool executors, change this to thread pool executor.
-        mExecutor = Executors.newSingleThreadExecutor();
-        mPackageName = mContext.getPackageName();
-    }
-
-    @After
-    public void tearDown() {
-        // order matters (callbacks should be cleared at the last)
-        releaseAllSessions();
-        // unregister callbacks
-        clearCallbacks();
-    }
-
-    /**
-     * Tests if routes are added correctly when a new callback is registered.
-     */
-    @Test
-    public void testOnRoutesAdded() throws Exception {
-        CountDownLatch latch = new CountDownLatch(1);
-        addManagerCallback(new MediaRouter2Manager.Callback() {
-            @Override
-            public void onRoutesAdded(List<MediaRoute2Info> routes) {
-                assertTrue(routes.size() > 0);
-                for (MediaRoute2Info route : routes) {
-                    if (route.getOriginalId().equals(ROUTE_ID1)
-                            && route.getName().equals(ROUTE_NAME1)) {
-                        latch.countDown();
-                    }
-                }
-            }
-        });
-
-        assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-    }
-
-    @Test
-    public void testOnRoutesRemoved() throws Exception {
-        CountDownLatch latch = new CountDownLatch(1);
-        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
-
-        addRouterCallback(new RouteCallback());
-        addManagerCallback(new MediaRouter2Manager.Callback() {
-            @Override
-            public void onRoutesRemoved(List<MediaRoute2Info> routes) {
-                assertTrue(routes.size() > 0);
-                for (MediaRoute2Info route : routes) {
-                    if (route.getOriginalId().equals(ROUTE_ID2)
-                            && route.getName().equals(ROUTE_NAME2)) {
-                        latch.countDown();
-                    }
-                }
-            }
-        });
-
-        //TODO: Figure out a more proper way to test.
-        // (Control requests shouldn't be used in this way.)
-        mRouter2.sendControlRequest(routes.get(ROUTE_ID2), new Intent(ACTION_REMOVE_ROUTE));
-        assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-    }
-
-    /**
-     * Tests if we get proper routes for application that has special route feature.
-     */
-    @Test
-    public void testRouteFeatures() throws Exception {
-        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_SPECIAL);
-
-        int routeCount = 0;
-        for (MediaRoute2Info route : routes.values()) {
-            if (!route.isSystemRoute()) {
-                routeCount++;
-            }
-        }
-
-        assertEquals(1, routeCount);
-        assertNotNull(routes.get(ROUTE_ID_SPECIAL_FEATURE));
-    }
-
-    /**
-     * Tests if MR2.SessionCallback.onSessionCreated is called
-     * when a route is selected from MR2Manager.
-     */
-    @Test
-    public void testRouterOnSessionCreated() throws Exception {
-        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
-
-        CountDownLatch latch = new CountDownLatch(1);
-
-        addManagerCallback(new MediaRouter2Manager.Callback());
-        //TODO: remove this when it's not necessary.
-        addRouterCallback(new MediaRouter2.RouteCallback());
-        addSessionCallback(new RoutingControllerCallback() {
-            @Override
-            public void onControllerCreated(MediaRouter2.RoutingController controller) {
-                if (createRouteMap(controller.getSelectedRoutes()).containsKey(ROUTE_ID1)) {
-                    latch.countDown();
-                }
-            }
-        });
-
-        MediaRoute2Info routeToSelect = routes.get(ROUTE_ID1);
-        assertNotNull(routeToSelect);
-
-        mManager.selectRoute(mPackageName, routeToSelect);
-        assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertEquals(2, mManager.getActiveSessions().size());
-    }
-
-    @Test
-    public void testGetRoutingControllers() throws Exception {
-        CountDownLatch latch = new CountDownLatch(1);
-
-        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
-        addRouterCallback(new RouteCallback());
-        addManagerCallback(new MediaRouter2Manager.Callback() {
-            @Override
-            public void onSessionCreated(MediaRouter2Manager.RoutingController controller) {
-                if (TextUtils.equals(mPackageName, controller.getClientPackageName())
-                        && createRouteMap(controller.getSelectedRoutes()).containsKey(ROUTE_ID1)) {
-                    latch.countDown();
-                }
-            }
-        });
-
-        assertEquals(1, mManager.getRoutingControllers(mPackageName).size());
-
-        mManager.selectRoute(mPackageName, routes.get(ROUTE_ID1));
-        latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS);
-
-        List<MediaRouter2Manager.RoutingController> controllers =
-                mManager.getRoutingControllers(mPackageName);
-
-        assertEquals(2, controllers.size());
-
-        MediaRouter2Manager.RoutingController routingController = controllers.get(1);
-        awaitOnRouteChangedManager(
-                () -> routingController.release(),
-                ROUTE_ID1,
-                route -> TextUtils.equals(route.getClientPackageName(), null));
-        assertEquals(1, mManager.getRoutingControllers(mPackageName).size());
-    }
-
-    /**
-     * Tests select, transfer, release of routes of a provider
-     */
-    @Test
-    public void testSelectAndTransferAndRelease() throws Exception {
-        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
-        addRouterCallback(new RouteCallback());
-
-        CountDownLatch onSessionCreatedLatch = new CountDownLatch(1);
-
-        addManagerCallback(new MediaRouter2Manager.Callback() {
-            @Override
-            public void onSessionCreated(MediaRouter2Manager.RoutingController controller) {
-                assertNotNull(controller);
-                onSessionCreatedLatch.countDown();
-            }
-        });
-        awaitOnRouteChangedManager(
-                () -> mManager.selectRoute(mPackageName, routes.get(ROUTE_ID1)),
-                ROUTE_ID1,
-                route -> TextUtils.equals(route.getClientPackageName(), mPackageName));
-        assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-
-        List<MediaRouter2Manager.RoutingController> controllers =
-                mManager.getRoutingControllers(mPackageName);
-
-        assertEquals(2, controllers.size());
-        MediaRouter2Manager.RoutingController routingController = controllers.get(1);
-
-        awaitOnRouteChangedManager(
-                () -> mManager.selectRoute(mPackageName, routes.get(ROUTE_ID5_TO_TRANSFER_TO)),
-                ROUTE_ID5_TO_TRANSFER_TO,
-                route -> TextUtils.equals(route.getClientPackageName(), mPackageName));
-
-        awaitOnRouteChangedManager(
-                () -> routingController.release(),
-                ROUTE_ID5_TO_TRANSFER_TO,
-                route -> TextUtils.equals(route.getClientPackageName(), null));
-    }
-
-    @Test
-    public void testControlVolumeWithManager() throws Exception {
-        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
-        MediaRoute2Info volRoute = routes.get(ROUTE_ID_VARIABLE_VOLUME);
-
-        int originalVolume = volRoute.getVolume();
-        int targetVolume = originalVolume == volRoute.getVolumeMax()
-                ? originalVolume - 1 : originalVolume + 1;
-
-        awaitOnRouteChangedManager(
-                () -> mManager.requestSetVolume(volRoute, targetVolume),
-                ROUTE_ID_VARIABLE_VOLUME,
-                (route -> route.getVolume() == targetVolume));
-
-        awaitOnRouteChangedManager(
-                () -> mManager.requestSetVolume(volRoute, originalVolume),
-                ROUTE_ID_VARIABLE_VOLUME,
-                (route -> route.getVolume() == originalVolume));
-    }
-
-    @Test
-    public void testVolumeHandling() throws Exception {
-        Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(FEATURES_ALL);
-
-        MediaRoute2Info fixedVolumeRoute = routes.get(ROUTE_ID_FIXED_VOLUME);
-        MediaRoute2Info variableVolumeRoute = routes.get(ROUTE_ID_VARIABLE_VOLUME);
-
-        assertEquals(PLAYBACK_VOLUME_FIXED, fixedVolumeRoute.getVolumeHandling());
-        assertEquals(PLAYBACK_VOLUME_VARIABLE, variableVolumeRoute.getVolumeHandling());
-        assertEquals(VOLUME_MAX, variableVolumeRoute.getVolumeMax());
-    }
-
-    Map<String, MediaRoute2Info> waitAndGetRoutesWithManager(List<String> routeFeatures)
-            throws Exception {
-        CountDownLatch latch = new CountDownLatch(2);
-
-        // A dummy callback is required to send route feature info.
-        RouteCallback routeCallback = new RouteCallback();
-        MediaRouter2Manager.Callback managerCallback = new MediaRouter2Manager.Callback() {
-            @Override
-            public void onRoutesAdded(List<MediaRoute2Info> routes) {
-                for (int i = 0; i < routes.size(); i++) {
-                    if (!routes.get(i).isSystemRoute()) {
-                        latch.countDown();
-                        break;
-                    }
-                }
-            }
-
-            @Override
-            public void onControlCategoriesChanged(String packageName,
-                    List<String> preferredFeatures) {
-                if (TextUtils.equals(mPackageName, packageName)
-                        && preferredFeatures.equals(preferredFeatures)) {
-                    latch.countDown();
-                }
-            }
-        };
-        mManager.registerCallback(mExecutor, managerCallback);
-        mRouter2.registerRouteCallback(mExecutor, routeCallback,
-                new RouteDiscoveryPreference.Builder(routeFeatures, true).build());
-        try {
-            latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS);
-            return createRouteMap(mManager.getAvailableRoutes(mPackageName));
-        } finally {
-            mRouter2.unregisterRouteCallback(routeCallback);
-            mManager.unregisterCallback(managerCallback);
-        }
-    }
-
-    void awaitOnRouteChangedManager(Runnable task, String routeId,
-            Predicate<MediaRoute2Info> predicate) throws Exception {
-        CountDownLatch latch = new CountDownLatch(1);
-        MediaRouter2Manager.Callback callback = new MediaRouter2Manager.Callback() {
-            @Override
-            public void onRoutesChanged(List<MediaRoute2Info> changed) {
-                MediaRoute2Info route = createRouteMap(changed).get(routeId);
-                if (route != null && predicate.test(route)) {
-                    latch.countDown();
-                }
-            }
-        };
-        mManager.registerCallback(mExecutor, callback);
-        try {
-            task.run();
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        } finally {
-            mManager.unregisterCallback(callback);
-        }
-    }
-
-    // Helper for getting routes easily
-    static Map<String, MediaRoute2Info> createRouteMap(List<MediaRoute2Info> routes) {
-        Map<String, MediaRoute2Info> routeMap = new HashMap<>();
-        for (MediaRoute2Info route : routes) {
-            routeMap.put(route.getOriginalId(), route);
-        }
-        return routeMap;
-    }
-
-    private void addManagerCallback(MediaRouter2Manager.Callback callback) {
-        mManagerCallbacks.add(callback);
-        mManager.registerCallback(mExecutor, callback);
-    }
-
-    private void addRouterCallback(RouteCallback routeCallback) {
-        mRouteCallbacks.add(routeCallback);
-        mRouter2.registerRouteCallback(mExecutor, routeCallback, RouteDiscoveryPreference.EMPTY);
-    }
-
-    private void addSessionCallback(RoutingControllerCallback controllerCallback) {
-        mControllerCallbacks.add(controllerCallback);
-        mRouter2.registerControllerCallback(mExecutor, controllerCallback);
-    }
-
-    private void clearCallbacks() {
-        for (MediaRouter2Manager.Callback callback : mManagerCallbacks) {
-            mManager.unregisterCallback(callback);
-        }
-        mManagerCallbacks.clear();
-
-        for (RouteCallback routeCallback : mRouteCallbacks) {
-            mRouter2.unregisterRouteCallback(routeCallback);
-        }
-        mRouteCallbacks.clear();
-
-        for (RoutingControllerCallback controllerCallback : mControllerCallbacks) {
-            mRouter2.unregisterControllerCallback(controllerCallback);
-        }
-        mControllerCallbacks.clear();
-    }
-
-    private void releaseAllSessions() {
-        // ensure ManagerRecord in MediaRouter2ServiceImpl
-        addManagerCallback(new MediaRouter2Manager.Callback());
-
-        for (RoutingSessionInfo session : mManager.getActiveSessions()) {
-            mManager.getControllerForSession(session).release();
-        }
-    }
-}
diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/SampleMediaRoute2ProviderService.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/SampleMediaRoute2ProviderService.java
index 1a866ca..3faefdb 100644
--- a/media/tests/MediaRouter/src/com/android/mediaroutertest/SampleMediaRoute2ProviderService.java
+++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/SampleMediaRoute2ProviderService.java
@@ -18,7 +18,9 @@
 
 import static android.media.MediaRoute2Info.DEVICE_TYPE_REMOTE_SPEAKER;
 import static android.media.MediaRoute2Info.DEVICE_TYPE_REMOTE_TV;
+import static android.media.MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Intent;
 import android.media.MediaRoute2Info;
@@ -30,9 +32,13 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
+
+import javax.annotation.concurrent.GuardedBy;
 
 public class SampleMediaRoute2ProviderService extends MediaRoute2ProviderService {
     private static final String TAG = "SampleMR2ProviderSvc";
+    private static final Object sLock = new Object();
 
     public static final String ROUTE_ID1 = "route_id1";
     public static final String ROUTE_NAME1 = "Sample Route 1";
@@ -51,14 +57,13 @@
     public static final String ROUTE_NAME_SPECIAL_FEATURE = "Special Feature Route";
 
     public static final int VOLUME_MAX = 100;
+    public static final int SESSION_VOLUME_MAX = 50;
+    public static final int SESSION_VOLUME_INITIAL = 20;
     public static final String ROUTE_ID_FIXED_VOLUME = "route_fixed_volume";
     public static final String ROUTE_NAME_FIXED_VOLUME = "Fixed Volume Route";
     public static final String ROUTE_ID_VARIABLE_VOLUME = "route_variable_volume";
     public static final String ROUTE_NAME_VARIABLE_VOLUME = "Variable Volume Route";
 
-    public static final String ACTION_REMOVE_ROUTE =
-            "com.android.mediarouteprovider.action_remove_route";
-
     public static final String FEATURE_SAMPLE =
             "com.android.mediarouteprovider.FEATURE_SAMPLE";
     public static final String FEATURE_SPECIAL =
@@ -68,6 +73,9 @@
     Map<String, String> mRouteIdToSessionId = new HashMap<>();
     private int mNextSessionId = 1000;
 
+    @GuardedBy("sLock")
+    private static SampleMediaRoute2ProviderService sInstance;
+
     private void initializeRoutes() {
         MediaRoute2Info route1 = new MediaRoute2Info.Builder(ROUTE_ID1, ROUTE_NAME1)
                 .addFeature(FEATURE_SAMPLE)
@@ -89,6 +97,7 @@
                 ROUTE_ID5_TO_TRANSFER_TO, ROUTE_NAME5)
                 .addFeature(FEATURE_SAMPLE)
                 .build();
+
         MediaRoute2Info routeSpecial =
                 new MediaRoute2Info.Builder(ROUTE_ID_SPECIAL_FEATURE, ROUTE_NAME_SPECIAL_FEATURE)
                         .addFeature(FEATURE_SAMPLE)
@@ -111,42 +120,71 @@
         mRoutes.put(route3.getId(), route3);
         mRoutes.put(route4.getId(), route4);
         mRoutes.put(route5.getId(), route5);
+
         mRoutes.put(routeSpecial.getId(), routeSpecial);
         mRoutes.put(fixedVolumeRoute.getId(), fixedVolumeRoute);
         mRoutes.put(variableVolumeRoute.getId(), variableVolumeRoute);
     }
 
+    public static SampleMediaRoute2ProviderService getInstance() {
+        synchronized (sLock) {
+            return sInstance;
+        }
+    }
+
+    /**
+     * Adds a route and publishes it. It could replace a route in the provider if
+     * they have the same route id.
+     */
+    public void addRoute(@NonNull MediaRoute2Info route) {
+        Objects.requireNonNull(route, "route must not be null");
+        mRoutes.put(route.getOriginalId(), route);
+        publishRoutes();
+    }
+
+    /**
+     * Removes a route and publishes it.
+     */
+    public void removeRoute(@NonNull String routeId) {
+        Objects.requireNonNull(routeId, "routeId must not be null");
+        MediaRoute2Info route = mRoutes.get(routeId);
+        if (route != null) {
+            mRoutes.remove(routeId);
+            publishRoutes();
+        }
+    }
+
     @Override
     public void onCreate() {
+        synchronized (sLock) {
+            sInstance = this;
+        }
         initializeRoutes();
     }
 
     @Override
+    public void onDestroy() {
+        super.onDestroy();
+        synchronized (sLock) {
+            if (sInstance == this) {
+                sInstance = null;
+            }
+        }
+    }
+
+    @Override
     public IBinder onBind(Intent intent) {
         publishRoutes();
         return super.onBind(intent);
     }
 
     @Override
-    public void onControlRequest(String routeId, Intent request) {
-        String action = request.getAction();
-        if (ACTION_REMOVE_ROUTE.equals(action)) {
-            MediaRoute2Info route = mRoutes.get(routeId);
-            if (route != null) {
-                mRoutes.remove(routeId);
-                publishRoutes();
-                mRoutes.put(routeId, route);
-            }
-        }
-    }
-
-    @Override
-    public void onSetVolume(String routeId, int volume) {
+    public void onSetRouteVolume(String routeId, int volume) {
         MediaRoute2Info route = mRoutes.get(routeId);
         if (route == null) {
             return;
         }
-        volume = Math.min(volume, Math.max(0, route.getVolumeMax()));
+        volume = Math.max(0, Math.min(volume, route.getVolumeMax()));
         mRoutes.put(routeId, new MediaRoute2Info.Builder(route)
                 .setVolume(volume)
                 .build());
@@ -154,6 +192,19 @@
     }
 
     @Override
+    public void onSetSessionVolume(String sessionId, int volume) {
+        RoutingSessionInfo sessionInfo = getSessionInfo(sessionId);
+        if (sessionInfo == null) {
+            return;
+        }
+        volume = Math.max(0, Math.min(volume, sessionInfo.getVolumeMax()));
+        RoutingSessionInfo newSessionInfo = new RoutingSessionInfo.Builder(sessionInfo)
+                .setVolume(volume)
+                .build();
+        notifySessionUpdated(newSessionInfo);
+    }
+
+    @Override
     public void onCreateSession(String packageName, String routeId, long requestId,
             @Nullable Bundle sessionHints) {
         MediaRoute2Info route = mRoutes.get(routeId);
@@ -175,7 +226,10 @@
         RoutingSessionInfo sessionInfo = new RoutingSessionInfo.Builder(sessionId, packageName)
                 .addSelectedRoute(routeId)
                 .addSelectableRoute(ROUTE_ID4_TO_SELECT_AND_DESELECT)
-                .addTransferrableRoute(ROUTE_ID5_TO_TRANSFER_TO)
+                .addTransferableRoute(ROUTE_ID5_TO_TRANSFER_TO)
+                .setVolumeHandling(PLAYBACK_VOLUME_VARIABLE)
+                .setVolumeMax(SESSION_VOLUME_MAX)
+                .setVolume(SESSION_VOLUME_INITIAL)
                 // Set control hints with given sessionHints
                 .setControlHints(sessionHints)
                 .build();
@@ -281,7 +335,7 @@
                 .clearSelectedRoutes()
                 .addSelectedRoute(routeId)
                 .removeDeselectableRoute(routeId)
-                .removeTransferrableRoute(routeId)
+                .removeTransferableRoute(routeId)
                 .build();
         notifySessionUpdated(newSessionInfo);
         publishRoutes();
diff --git a/media/tests/TunerTest/Android.bp b/media/tests/TunerTest/Android.bp
new file mode 100644
index 0000000..cef8791
--- /dev/null
+++ b/media/tests/TunerTest/Android.bp
@@ -0,0 +1,18 @@
+android_test {
+    name: "mediatunertest",
+
+    srcs: ["**/*.java"],
+
+    libs: [
+        "android.test.runner",
+        "android.test.base",
+    ],
+
+    static_libs: [
+        "android-support-test",
+        "testng"
+    ],
+
+    platform_apis: true,
+    certificate: "platform",
+}
diff --git a/media/tests/TunerTest/AndroidManifest.xml b/media/tests/TunerTest/AndroidManifest.xml
new file mode 100644
index 0000000..17e9f19
--- /dev/null
+++ b/media/tests/TunerTest/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.mediatunertest">
+
+    <uses-permission android:name="android.permission.ACCESS_TV_TUNER" />
+
+    <application android:label="@string/app_name">
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+                     android:targetPackage="com.android.mediatunertest"
+                     android:label="Media Tuner Tests"/>
+</manifest>
diff --git a/media/tests/TunerTest/AndroidTest.xml b/media/tests/TunerTest/AndroidTest.xml
new file mode 100644
index 0000000..d9c31f45
--- /dev/null
+++ b/media/tests/TunerTest/AndroidTest.xml
@@ -0,0 +1,17 @@
+<configuration description="Runs Media Tuner tests.">
+    <option name="test-suite-tag" value="apct"/>
+    <option name="test-tag" value="MediaTunerTest"/>
+
+    <target_preparer class="com.android.tradefed.targetprep.TestFilePushSetup"/>
+    <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
+        <option name="test-file-name" value="mediatunertest.apk"/>
+    </target_preparer>
+    <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer"/>
+    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer"/>
+
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest">
+        <option name="package" value="com.android.mediatunertest"/>
+        <option name="hidden-api-checks" value="false"/>
+        <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
+    </test>
+</configuration>
diff --git a/media/tests/TunerTest/OWNERS b/media/tests/TunerTest/OWNERS
new file mode 100644
index 0000000..73ea663
--- /dev/null
+++ b/media/tests/TunerTest/OWNERS
@@ -0,0 +1,4 @@
+amyjojo@google.com
+nchalko@google.com
+quxiangfang@google.com
+shubang@google.com
diff --git a/media/tests/TunerTest/res/values/strings.xml b/media/tests/TunerTest/res/values/strings.xml
new file mode 100644
index 0000000..b313944
--- /dev/null
+++ b/media/tests/TunerTest/res/values/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <!-- name of the app [CHAR LIMIT=25]-->
+    <string name="app_name">MediaTunerTest</string>
+</resources>
\ No newline at end of file
diff --git a/media/tests/TunerTest/src/com/android/mediatunertest/TunerTest.java b/media/tests/TunerTest/src/com/android/mediatunertest/TunerTest.java
new file mode 100644
index 0000000..afdbce0
--- /dev/null
+++ b/media/tests/TunerTest/src/com/android/mediatunertest/TunerTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ */
+
+package com.android.mediatunertest;
+
+import static org.junit.Assert.assertNotNull;
+
+import android.content.Context;
+import android.media.tv.tuner.Descrambler;
+import android.media.tv.tuner.Tuner;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class TunerTest {
+    private static final String TAG = "MediaTunerTest";
+
+    private Context mContext;
+
+    @Before
+    public void setUp() throws Exception {
+        mContext = InstrumentationRegistry.getTargetContext();
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    @Test
+    public void testTunerConstructor() throws Exception {
+        Tuner tuner = new Tuner(mContext, "123", 1);
+        assertNotNull(tuner);
+    }
+
+    @Test
+    public void testOpenDescrambler() throws Exception {
+        Tuner tuner = new Tuner(mContext, "123", 1);
+        Descrambler descrambler = tuner.openDescrambler();
+        assertNotNull(descrambler);
+    }
+}
diff --git a/native/android/Android.bp b/native/android/Android.bp
index 0c6f507..257ae73 100644
--- a/native/android/Android.bp
+++ b/native/android/Android.bp
@@ -25,6 +25,7 @@
     cflags: [
         "-Wall",
         "-Werror",
+        "-Wextra",
         "-Wunused",
         "-Wunreachable-code",
     ],
diff --git a/native/android/surface_control.cpp b/native/android/surface_control.cpp
index ba793e8..0af6cbf 100644
--- a/native/android/surface_control.cpp
+++ b/native/android/surface_control.cpp
@@ -547,16 +547,11 @@
 }
 
 void ASurfaceTransaction_setFrameRate(ASurfaceTransaction* aSurfaceTransaction,
-                                      ASurfaceControl* aSurfaceControl, float frameRate) {
+                                      ASurfaceControl* aSurfaceControl, float frameRate,
+                                      int8_t compatibility) {
     CHECK_NOT_NULL(aSurfaceTransaction);
     CHECK_NOT_NULL(aSurfaceControl);
-
-    sp<SurfaceControl> surfaceControl = ASurfaceControl_to_SurfaceControl(aSurfaceControl);
-    if (frameRate < 0) {
-        ALOGE("Failed to set frame ate - invalid frame rate");
-        return;
-    }
-
     Transaction* transaction = ASurfaceTransaction_to_Transaction(aSurfaceTransaction);
-    transaction->setFrameRate(surfaceControl, frameRate);
+    sp<SurfaceControl> surfaceControl = ASurfaceControl_to_SurfaceControl(aSurfaceControl);
+    transaction->setFrameRate(surfaceControl, frameRate, compatibility);
 }
diff --git a/native/graphics/jni/imagedecoder.cpp b/native/graphics/jni/imagedecoder.cpp
index c1143ce..d1946b0 100644
--- a/native/graphics/jni/imagedecoder.cpp
+++ b/native/graphics/jni/imagedecoder.cpp
@@ -28,6 +28,7 @@
 #include <utils/Color.h>
 
 #include <fcntl.h>
+#include <limits>
 #include <optional>
 #include <sys/stat.h>
 #include <sys/types.h>
@@ -70,6 +71,14 @@
         return ResultToErrorCode(result);
     }
 
+    // AImageDecoderHeaderInfo_getWidth/Height return an int32_t. Ensure that
+    // the conversion is safe.
+    const auto& info = androidCodec->getInfo();
+    if (info.width() > std::numeric_limits<int32_t>::max()
+        || info.height() > std::numeric_limits<int32_t>::max()) {
+        return ANDROID_IMAGE_DECODER_INVALID_INPUT;
+    }
+
     *outDecoder = reinterpret_cast<AImageDecoder*>(new ImageDecoder(std::move(androidCodec)));
     return ANDROID_IMAGE_DECODER_SUCCESS;
 }
@@ -213,12 +222,12 @@
         return ANDROID_IMAGE_DECODER_BAD_PARAMETER;
     }
 
-    // Note: This recomputes the data space because it's possible the client has
-    // changed the output color space, so we cannot rely on it. Alternatively,
+    // Note: This recomputes the color type because it's possible the client has
+    // changed the output color type, so we cannot rely on it. Alternatively,
     // we could store the ADataSpace in the ImageDecoder.
     const ImageDecoder* imageDecoder = toDecoder(info);
     SkColorType colorType = imageDecoder->mCodec->computeOutputColorType(kN32_SkColorType);
-    sk_sp<SkColorSpace> colorSpace = imageDecoder->mCodec->computeOutputColorSpace(colorType);
+    sk_sp<SkColorSpace> colorSpace = imageDecoder->getDefaultColorSpace();
     return uirenderer::ColorSpaceToADataSpace(colorSpace.get(), colorType);
 }
 
diff --git a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java
index 07b7b22..8eeaefd 100644
--- a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java
+++ b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIBinder.java
@@ -17,8 +17,10 @@
 package com.android.systemui;
 
 import com.android.systemui.biometrics.AuthController;
+import com.android.systemui.bubbles.dagger.BubbleModule;
 import com.android.systemui.globalactions.GlobalActionsComponent;
 import com.android.systemui.keyguard.KeyguardViewMediator;
+import com.android.systemui.keyguard.dagger.KeyguardModule;
 import com.android.systemui.navigationbar.car.CarNavigationBar;
 import com.android.systemui.pip.PipUI;
 import com.android.systemui.power.PowerUI;
@@ -29,6 +31,7 @@
 import com.android.systemui.statusbar.car.CarStatusBar;
 import com.android.systemui.statusbar.car.CarStatusBarModule;
 import com.android.systemui.statusbar.notification.InstantAppNotifier;
+import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
 import com.android.systemui.statusbar.phone.StatusBar;
 import com.android.systemui.statusbar.tv.TvStatusBar;
 import com.android.systemui.theme.ThemeOverlayController;
@@ -42,7 +45,8 @@
 import dagger.multibindings.IntoMap;
 
 /** Binder for car specific {@link SystemUI} modules. */
-@Module(includes = {RecentsModule.class, CarStatusBarModule.class})
+@Module(includes = {RecentsModule.class, CarStatusBarModule.class, NotificationsModule.class,
+        BubbleModule.class, KeyguardModule.class})
 public abstract class CarSystemUIBinder {
     /** Inject into AuthController. */
     @Binds
diff --git a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java
index 585acfe..a0d5a1b 100644
--- a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java
+++ b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java
@@ -43,9 +43,11 @@
 import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
 import com.android.systemui.statusbar.phone.KeyguardEnvironmentImpl;
+import com.android.systemui.statusbar.phone.NotificationGroupManager;
 import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.phone.StatusBar;
 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
 import com.android.systemui.volume.CarVolumeDialogComponent;
@@ -74,10 +76,14 @@
 
     @Singleton
     @Provides
-    static HeadsUpManagerPhone provideHeadsUpManagerPhone(Context context,
+    static HeadsUpManagerPhone provideHeadsUpManagerPhone(
+            Context context,
             StatusBarStateController statusBarStateController,
-            KeyguardBypassController bypassController) {
-        return new HeadsUpManagerPhone(context, statusBarStateController, bypassController);
+            KeyguardBypassController bypassController,
+            NotificationGroupManager groupManager,
+            ConfigurationController configurationController) {
+        return new HeadsUpManagerPhone(context, statusBarStateController, bypassController,
+                groupManager, configurationController);
     }
 
     @Binds
diff --git a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIRootComponent.java b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIRootComponent.java
index 51b263e..7d544c9 100644
--- a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIRootComponent.java
+++ b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIRootComponent.java
@@ -21,6 +21,7 @@
 import com.android.systemui.dagger.SystemServicesModule;
 import com.android.systemui.dagger.SystemUIModule;
 import com.android.systemui.dagger.SystemUIRootComponent;
+import com.android.systemui.pip.phone.dagger.PipModule;
 
 import javax.inject.Singleton;
 
@@ -32,6 +33,7 @@
                 CarComponentBinder.class,
                 DependencyProvider.class,
                 DependencyBinder.class,
+                PipModule.class,
                 SystemUIFactory.ContextHolder.class,
                 SystemServicesModule.class,
                 SystemUIModule.class,
diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
index 210dd32..a4eada4 100644
--- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
+++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
@@ -128,6 +128,7 @@
 import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
 import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter;
+import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager;
 import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -324,6 +325,7 @@
             ExtensionController extensionController,
             UserInfoControllerImpl userInfoControllerImpl,
             DismissCallbackRegistry dismissCallbackRegistry,
+            StatusBarTouchableRegionManager statusBarTouchableRegionManager,
             /* Car Settings injected components. */
             CarServiceProvider carServiceProvider,
             Lazy<PowerManagerHelper> powerManagerHelperLazy,
@@ -405,7 +407,8 @@
                 keyguardDismissUtil,
                 extensionController,
                 userInfoControllerImpl,
-                dismissCallbackRegistry);
+                dismissCallbackRegistry,
+                statusBarTouchableRegionManager);
         mUserSwitcherController = userSwitcherController;
         mScrimController = scrimController;
         mLockscreenLockIconController = lockscreenLockIconController;
@@ -916,7 +919,6 @@
             Dependency.get(KeyguardUpdateMonitor.class).dump(fd, pw, args);
         }
 
-        Dependency.get(FalsingManager.class).dump(pw);
         FalsingLog.dump(pw);
 
         pw.println("SharedPreferences:");
diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java
index 498bd87..7294965 100644
--- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java
+++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java
@@ -54,10 +54,10 @@
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.NotificationViewHierarchyManager;
 import com.android.systemui.statusbar.PulseExpansionHandler;
-import com.android.systemui.statusbar.StatusBarDependenciesModule;
 import com.android.systemui.statusbar.SuperStatusBarViewFactory;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.VibratorHelper;
+import com.android.systemui.statusbar.dagger.StatusBarDependenciesModule;
 import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier;
 import com.android.systemui.statusbar.notification.DynamicPrivacyController;
 import com.android.systemui.statusbar.notification.NotificationAlertingManager;
@@ -67,6 +67,7 @@
 import com.android.systemui.statusbar.notification.init.NotificationsController;
 import com.android.systemui.statusbar.notification.logging.NotificationLogger;
 import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
+import com.android.systemui.statusbar.notification.row.NotificationRowModule;
 import com.android.systemui.statusbar.phone.AutoHideController;
 import com.android.systemui.statusbar.phone.BiometricUnlockController;
 import com.android.systemui.statusbar.phone.DozeParameters;
@@ -86,7 +87,9 @@
 import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
 import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter;
+import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager;
 import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
+import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneDependenciesModule;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
@@ -112,7 +115,8 @@
 /**
  * Dagger Module providing {@link CarStatusBar}.
  */
-@Module(includes = {StatusBarDependenciesModule.class})
+@Module(includes = {StatusBarDependenciesModule.class, StatusBarPhoneDependenciesModule.class,
+        NotificationRowModule.class})
 public class CarStatusBarModule {
     /**
      * Provides our instance of StatusBar which is considered optional.
@@ -194,6 +198,7 @@
             ExtensionController extensionController,
             UserInfoControllerImpl userInfoControllerImpl,
             DismissCallbackRegistry dismissCallbackRegistry,
+            StatusBarTouchableRegionManager statusBarTouchableRegionManager,
             CarServiceProvider carServiceProvider,
             Lazy<PowerManagerHelper> powerManagerHelperLazy,
             FullscreenUserSwitcher fullscreenUserSwitcher,
@@ -274,6 +279,7 @@
                 extensionController,
                 userInfoControllerImpl,
                 dismissCallbackRegistry,
+                statusBarTouchableRegionManager,
                 carServiceProvider,
                 powerManagerHelperLazy,
                 fullscreenUserSwitcher,
diff --git a/packages/DynamicSystemInstallationService/AndroidManifest.xml b/packages/DynamicSystemInstallationService/AndroidManifest.xml
index d718eae..b4d520d 100644
--- a/packages/DynamicSystemInstallationService/AndroidManifest.xml
+++ b/packages/DynamicSystemInstallationService/AndroidManifest.xml
@@ -7,6 +7,7 @@
     <uses-permission android:name="android.permission.MANAGE_DYNAMIC_SYSTEM" />
     <uses-permission android:name="android.permission.REBOOT" />
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+    <uses-permission android:name="android.permission.READ_OEM_UNLOCK_STATE" />
 
     <application
         android:allowBackup="false"
diff --git a/packages/DynamicSystemInstallationService/res/values/strings.xml b/packages/DynamicSystemInstallationService/res/values/strings.xml
index 7595d2b..25b7fc1 100644
--- a/packages/DynamicSystemInstallationService/res/values/strings.xml
+++ b/packages/DynamicSystemInstallationService/res/values/strings.xml
@@ -18,6 +18,8 @@
     <string name="notification_install_inprogress">Install in progress</string>
     <!-- Displayed on notification: Dynamic System installation failed [CHAR LIMIT=128] -->
     <string name="notification_install_failed">Install failed</string>
+    <!-- Displayed on notification: Image validation failed [CHAR LIMIT=128] -->
+    <string name="notification_image_validation_failed">Image validation failed. Abort installation.</string>
     <!-- Displayed on notification: We are running in Dynamic System [CHAR LIMIT=128] -->
     <string name="notification_dynsystem_in_use">Currently running a dynamic system. Restart to use the original Android version.</string>
 
diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java
index 9bae223..7affe88 100644
--- a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java
+++ b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java
@@ -80,6 +80,7 @@
     static final String KEY_ENABLE_WHEN_COMPLETED = "KEY_ENABLE_WHEN_COMPLETED";
     static final String KEY_DSU_SLOT = "KEY_DSU_SLOT";
     static final String DEFAULT_DSU_SLOT = "dsu";
+    static final String KEY_PUBKEY = "KEY_PUBKEY";
 
     /*
      * Intent actions
@@ -267,6 +268,7 @@
         long userdataSize = intent.getLongExtra(DynamicSystemClient.KEY_USERDATA_SIZE, 0);
         mEnableWhenCompleted = intent.getBooleanExtra(KEY_ENABLE_WHEN_COMPLETED, false);
         String dsuSlot = intent.getStringExtra(KEY_DSU_SLOT);
+        String publicKey = intent.getStringExtra(KEY_PUBKEY);
 
         if (TextUtils.isEmpty(dsuSlot)) {
             dsuSlot = DEFAULT_DSU_SLOT;
@@ -274,7 +276,7 @@
         // TODO: better constructor or builder
         mInstallTask =
                 new InstallationAsyncTask(
-                        url, dsuSlot, systemSize, userdataSize, this, mDynSystem, this);
+                        url, dsuSlot, publicKey, systemSize, userdataSize, this, mDynSystem, this);
 
         mInstallTask.execute();
 
@@ -408,6 +410,10 @@
     }
 
     private Notification buildNotification(int status, int cause) {
+        return buildNotification(status, cause, null);
+    }
+
+    private Notification buildNotification(int status, int cause, Throwable detail) {
         Notification.Builder builder = new Notification.Builder(this, NOTIFICATION_CHANNEL_ID)
                 .setSmallIcon(R.drawable.ic_system_update_googblue_24dp)
                 .setProgress(0, 0, false);
@@ -463,7 +469,12 @@
 
             case STATUS_NOT_STARTED:
                 if (cause != CAUSE_NOT_SPECIFIED && cause != CAUSE_INSTALL_CANCELLED) {
-                    builder.setContentText(getString(R.string.notification_install_failed));
+                    if (detail instanceof InstallationAsyncTask.ImageValidationException) {
+                        builder.setContentText(
+                                getString(R.string.notification_image_validation_failed));
+                    } else {
+                        builder.setContentText(getString(R.string.notification_install_failed));
+                    }
                 } else {
                     // no need to notify the user if the task is not started, or cancelled.
                 }
@@ -525,7 +536,7 @@
                 break;
         }
 
-        Log.d(TAG, "status=" + statusString + ", cause=" + causeString);
+        Log.d(TAG, "status=" + statusString + ", cause=" + causeString + ", detail=" + detail);
 
         boolean notifyOnNotificationBar = true;
 
@@ -538,7 +549,7 @@
         }
 
         if (notifyOnNotificationBar) {
-            mNM.notify(NOTIFICATION_ID, buildNotification(status, cause));
+            mNM.notify(NOTIFICATION_ID, buildNotification(status, cause, detail));
         }
 
         for (int i = mClients.size() - 1; i >= 0; i--) {
diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/InstallationAsyncTask.java b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/InstallationAsyncTask.java
index 438c435..f8952ac 100644
--- a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/InstallationAsyncTask.java
+++ b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/InstallationAsyncTask.java
@@ -17,11 +17,13 @@
 package com.android.dynsystem;
 
 import android.content.Context;
+import android.gsi.AvbPublicKey;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.MemoryFile;
 import android.os.ParcelFileDescriptor;
 import android.os.image.DynamicSystemManager;
+import android.service.persistentdata.PersistentDataBlockManager;
 import android.util.Log;
 import android.webkit.URLUtil;
 
@@ -51,18 +53,46 @@
     private static final List<String> UNSUPPORTED_PARTITIONS =
             Arrays.asList("vbmeta", "boot", "userdata", "dtbo", "super_empty", "system_other");
 
-    private class UnsupportedUrlException extends RuntimeException {
+    private class UnsupportedUrlException extends Exception {
         private UnsupportedUrlException(String message) {
             super(message);
         }
     }
 
-    private class UnsupportedFormatException extends RuntimeException {
+    private class UnsupportedFormatException extends Exception {
         private UnsupportedFormatException(String message) {
             super(message);
         }
     }
 
+    static class ImageValidationException extends Exception {
+        ImageValidationException(String message) {
+            super(message);
+        }
+
+        ImageValidationException(Throwable cause) {
+            super(cause);
+        }
+    }
+
+    static class RevocationListFetchException extends ImageValidationException {
+        RevocationListFetchException(Throwable cause) {
+            super(cause);
+        }
+    }
+
+    static class KeyRevokedException extends ImageValidationException {
+        KeyRevokedException(String message) {
+            super(message);
+        }
+    }
+
+    static class PublicKeyException extends ImageValidationException {
+        PublicKeyException(String message) {
+            super(message);
+        }
+    }
+
     /** UNSET means the installation is not completed */
     static final int RESULT_UNSET = 0;
     static final int RESULT_OK = 1;
@@ -97,12 +127,14 @@
 
     private final String mUrl;
     private final String mDsuSlot;
+    private final String mPublicKey;
     private final long mSystemSize;
     private final long mUserdataSize;
     private final Context mContext;
     private final DynamicSystemManager mDynSystem;
     private final ProgressListener mListener;
     private final boolean mIsNetworkUrl;
+    private final boolean mIsDeviceBootloaderUnlocked;
     private DynamicSystemManager.Session mInstallationSession;
     private KeyRevocationList mKeyRevocationList;
 
@@ -115,6 +147,7 @@
     InstallationAsyncTask(
             String url,
             String dsuSlot,
+            String publicKey,
             long systemSize,
             long userdataSize,
             Context context,
@@ -122,12 +155,20 @@
             ProgressListener listener) {
         mUrl = url;
         mDsuSlot = dsuSlot;
+        mPublicKey = publicKey;
         mSystemSize = systemSize;
         mUserdataSize = userdataSize;
         mContext = context;
         mDynSystem = dynSystem;
         mListener = listener;
         mIsNetworkUrl = URLUtil.isNetworkUrl(mUrl);
+        PersistentDataBlockManager pdbManager =
+                (PersistentDataBlockManager)
+                        mContext.getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
+        mIsDeviceBootloaderUnlocked =
+                (pdbManager != null)
+                        && (pdbManager.getFlashLockState()
+                                == PersistentDataBlockManager.FLASH_LOCK_UNLOCKED);
     }
 
     @Override
@@ -157,8 +198,6 @@
                 return null;
             }
 
-            // TODO(yochiang): do post-install public key check (revocation list / boot-ramdisk)
-
             mDynSystem.finishInstallation();
         } catch (Exception e) {
             Log.e(TAG, e.toString(), e);
@@ -242,23 +281,26 @@
                     String.format(Locale.US, "Unsupported URL: %s", mUrl));
         }
 
-        // TODO(yochiang): Bypass this check if device is unlocked
         try {
             String listUrl = mContext.getString(R.string.key_revocation_list_url);
             mKeyRevocationList = KeyRevocationList.fromUrl(new URL(listUrl));
         } catch (IOException | JSONException e) {
-            Log.d(TAG, "Failed to fetch Dynamic System Key Revocation List");
             mKeyRevocationList = new KeyRevocationList();
-            keyRevocationThrowOrWarning(e);
+            imageValidationThrowOrWarning(new RevocationListFetchException(e));
+        }
+        if (mKeyRevocationList.isRevoked(mPublicKey)) {
+            imageValidationThrowOrWarning(new KeyRevokedException(mPublicKey));
         }
     }
 
-    private void keyRevocationThrowOrWarning(Exception e) throws Exception {
-        if (mIsNetworkUrl) {
-            throw e;
-        } else {
-            // If DSU is being installed from a local file URI, then be permissive
+    private void imageValidationThrowOrWarning(ImageValidationException e)
+            throws ImageValidationException {
+        if (mIsDeviceBootloaderUnlocked || !mIsNetworkUrl) {
+            // If device is OEM unlocked or DSU is being installed from a local file URI,
+            // then be permissive.
             Log.w(TAG, e.toString());
+        } else {
+            throw e;
         }
     }
 
@@ -294,7 +336,8 @@
         }
     }
 
-    private void installImages() throws IOException, InterruptedException {
+    private void installImages()
+            throws IOException, InterruptedException, ImageValidationException {
         if (mStream != null) {
             if (mIsZip) {
                 installStreamingZipUpdate();
@@ -306,12 +349,14 @@
         }
     }
 
-    private void installStreamingGzUpdate() throws IOException, InterruptedException {
+    private void installStreamingGzUpdate()
+            throws IOException, InterruptedException, ImageValidationException {
         Log.d(TAG, "To install a streaming GZ update");
         installImage("system", mSystemSize, new GZIPInputStream(mStream), 1);
     }
 
-    private void installStreamingZipUpdate() throws IOException, InterruptedException {
+    private void installStreamingZipUpdate()
+            throws IOException, InterruptedException, ImageValidationException {
         Log.d(TAG, "To install a streaming ZIP update");
 
         ZipInputStream zis = new ZipInputStream(mStream);
@@ -330,7 +375,8 @@
         }
     }
 
-    private void installLocalZipUpdate() throws IOException, InterruptedException {
+    private void installLocalZipUpdate()
+            throws IOException, InterruptedException, ImageValidationException {
         Log.d(TAG, "To install a local ZIP update");
 
         Enumeration<? extends ZipEntry> entries = mZipFile.entries();
@@ -349,8 +395,9 @@
         }
     }
 
-    private boolean installImageFromAnEntry(ZipEntry entry, InputStream is,
-            int numInstalledPartitions) throws IOException, InterruptedException {
+    private boolean installImageFromAnEntry(
+            ZipEntry entry, InputStream is, int numInstalledPartitions)
+            throws IOException, InterruptedException, ImageValidationException {
         String name = entry.getName();
 
         Log.d(TAG, "ZipEntry: " + name);
@@ -373,8 +420,9 @@
         return true;
     }
 
-    private void installImage(String partitionName, long uncompressedSize, InputStream is,
-            int numInstalledPartitions) throws IOException, InterruptedException {
+    private void installImage(
+            String partitionName, long uncompressedSize, InputStream is, int numInstalledPartitions)
+            throws IOException, InterruptedException, ImageValidationException {
 
         SparseInputStream sis = new SparseInputStream(new BufferedInputStream(is));
 
@@ -445,6 +493,24 @@
                 publishProgress(progress);
             }
         }
+
+        AvbPublicKey avbPublicKey = new AvbPublicKey();
+        if (!mInstallationSession.getAvbPublicKey(avbPublicKey)) {
+            imageValidationThrowOrWarning(new PublicKeyException("getAvbPublicKey() failed"));
+        } else {
+            String publicKey = toHexString(avbPublicKey.sha1);
+            if (mKeyRevocationList.isRevoked(publicKey)) {
+                imageValidationThrowOrWarning(new KeyRevokedException(publicKey));
+            }
+        }
+    }
+
+    private static String toHexString(byte[] bytes) {
+        StringBuilder sb = new StringBuilder();
+        for (byte b : bytes) {
+            sb.append(String.format("%02x", b));
+        }
+        return sb.toString();
     }
 
     private void close() {
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
index 38cf5ab..617305c 100644
--- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
+++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
@@ -38,7 +38,6 @@
 import android.provider.DocumentsContract.Document;
 import android.provider.DocumentsContract.Path;
 import android.provider.DocumentsContract.Root;
-import android.provider.MediaStore;
 import android.provider.Settings;
 import android.system.ErrnoException;
 import android.system.Os;
@@ -100,7 +99,6 @@
 
     private static final String ROOT_ID_PRIMARY_EMULATED =
             DocumentsContract.EXTERNAL_STORAGE_PRIMARY_EMULATED_ROOT_ID;
-    private static final String ROOT_ID_HOME = "home";
 
     private static final String GET_DOCUMENT_URI_CALL = "get_document_uri";
     private static final String GET_MEDIA_URI_CALL = "get_media_uri";
@@ -156,7 +154,6 @@
     private void updateVolumesLocked() {
         mRoots.clear();
 
-        VolumeInfo primaryVolume = null;
         final int userId = UserHandle.myUserId();
         final List<VolumeInfo> volumes = mStorageManager.getVolumes();
         for (VolumeInfo volume : volumes) {
@@ -234,8 +231,6 @@
             }
 
             if (volume.isPrimary()) {
-                // save off the primary volume for subsequent "Home" dir initialization.
-                primaryVolume = volume;
                 root.flags |= Root.FLAG_ADVANCED;
             }
             // Dunno when this would NOT be the case, but never hurts to be correct.
@@ -259,37 +254,6 @@
             }
         }
 
-        // Finally, if primary storage is available we add the "Documents" directory.
-        // If I recall correctly the actual directory is created on demand
-        // by calling either getPathForUser, or getInternalPathForUser.
-        if (primaryVolume != null && primaryVolume.isVisible()) {
-            final RootInfo root = new RootInfo();
-            root.rootId = ROOT_ID_HOME;
-            mRoots.put(root.rootId, root);
-            root.title = getContext().getString(R.string.root_documents);
-
-            // Only report bytes on *volumes*...as a matter of policy.
-            root.reportAvailableBytes = false;
-            root.flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_SEARCH
-                    | Root.FLAG_SUPPORTS_IS_CHILD;
-
-            // Dunno when this would NOT be the case, but never hurts to be correct.
-            if (primaryVolume.isMountedWritable()) {
-                root.flags |= Root.FLAG_SUPPORTS_CREATE;
-            }
-
-            // Create the "Documents" directory on disk (don't use the localized title).
-            root.visiblePath = new File(
-                    primaryVolume.getPathForUser(userId), Environment.DIRECTORY_DOCUMENTS);
-            root.path = new File(
-                    primaryVolume.getInternalPathForUser(userId), Environment.DIRECTORY_DOCUMENTS);
-            try {
-                root.docId = getDocIdForFile(root.path);
-            } catch (FileNotFoundException e) {
-                throw new IllegalStateException(e);
-            }
-        }
-
         Log.d(TAG, "After updating volumes, found " + mRoots.size() + " active roots");
 
         // Note this affects content://com.android.externalstorage.documents/root/39BD-07C5
diff --git a/packages/Incremental/NativeAdbDataLoader/AndroidManifest.xml b/packages/Incremental/NativeAdbDataLoader/AndroidManifest.xml
index a06dc54..c4d8f35 100644
--- a/packages/Incremental/NativeAdbDataLoader/AndroidManifest.xml
+++ b/packages/Incremental/NativeAdbDataLoader/AndroidManifest.xml
@@ -29,7 +29,7 @@
         <service android:enabled="true"
                  android:name="com.android.incremental.nativeadb.NativeAdbDataLoaderService"
                  android:label="@string/app_name"
-                 android:exported="true">
+                 android:exported="false">
             <intent-filter>
                 <action android:name="android.intent.action.LOAD_DATA" />
            </intent-filter>
diff --git a/packages/Incremental/NativeAdbDataLoader/jni/com_android_incremental_nativeadb_DataLoaderService.cpp b/packages/Incremental/NativeAdbDataLoader/jni/com_android_incremental_nativeadb_DataLoaderService.cpp
index 01150b7..c0cd527 100644
--- a/packages/Incremental/NativeAdbDataLoader/jni/com_android_incremental_nativeadb_DataLoaderService.cpp
+++ b/packages/Incremental/NativeAdbDataLoader/jni/com_android_incremental_nativeadb_DataLoaderService.cpp
@@ -63,8 +63,8 @@
 using CompressionType = int16_t;
 using RequestType = int16_t;
 
-static constexpr int COMMAND_SIZE = 2 + 2 + 4;     // bytes
-static constexpr int HEADER_SIZE = 2 + 2 + 4 + 2;  // bytes
+static constexpr int COMMAND_SIZE = 2 + 2 + 4;    // bytes
+static constexpr int HEADER_SIZE = 2 + 2 + 4 + 2; // bytes
 static constexpr std::string_view OKAY = "OKAY"sv;
 
 static constexpr auto PollTimeoutMs = 5000;
@@ -95,10 +95,9 @@
 
 static bool sendRequest(int fd, RequestType requestType, FileId fileId = -1,
                         BlockIdx blockIdx = -1) {
-    const RequestCommand command{
-            .requestType = static_cast<int16_t>(be16toh(requestType)),
-            .fileId = static_cast<int16_t>(be16toh(fileId)),
-            .blockIdx = static_cast<int32_t>(be32toh(blockIdx))};
+    const RequestCommand command{.requestType = static_cast<int16_t>(be16toh(requestType)),
+                                 .fileId = static_cast<int16_t>(be16toh(fileId)),
+                                 .blockIdx = static_cast<int32_t>(be32toh(blockIdx))};
     return android::base::WriteFully(fd, &command, sizeof(command));
 }
 
@@ -139,14 +138,11 @@
         return header;
     }
 
-    header.fileId = static_cast<FileId>(
-            be16toh(*reinterpret_cast<uint16_t*>(&data[0])));
-    header.compressionType = static_cast<CompressionType>(
-            be16toh(*reinterpret_cast<uint16_t*>(&data[2])));
-    header.blockIdx = static_cast<BlockIdx>(
-            be32toh(*reinterpret_cast<uint32_t*>(&data[4])));
-    header.blockSize = static_cast<BlockSize>(
-            be16toh(*reinterpret_cast<uint16_t*>(&data[8])));
+    header.fileId = static_cast<FileId>(be16toh(*reinterpret_cast<uint16_t*>(&data[0])));
+    header.compressionType =
+            static_cast<CompressionType>(be16toh(*reinterpret_cast<uint16_t*>(&data[2])));
+    header.blockIdx = static_cast<BlockIdx>(be32toh(*reinterpret_cast<uint32_t*>(&data[4])));
+    header.blockSize = static_cast<BlockSize>(be16toh(*reinterpret_cast<uint16_t*>(&data[8])));
     data = data.subspan(sizeof(header));
 
     return header;
@@ -162,8 +158,8 @@
     }
     const auto endPos = staticArgs.find(kSuffix, startPos + kPrefix.size());
     return staticArgs.substr(startPos + kPrefix.size(),
-                            endPos == staticArgs.npos ? staticArgs.npos
-                                                     : (endPos - (startPos + kPrefix.size())));
+                             endPos == staticArgs.npos ? staticArgs.npos
+                                                       : (endPos - (startPos + kPrefix.size())));
 }
 
 class AdbDataLoader : public android::dataloader::DataLoader {
@@ -176,7 +172,9 @@
                   android::dataloader::ServiceParamsPtr) final {
         CHECK(ifs) << "ifs can't be null";
         CHECK(statusListener) << "statusListener can't be null";
-        ALOGE("[AdbDataLoader] onCreate: %d/%s/%s/%s/%d", params.type(), params.packageName().c_str(), params.className().c_str(), params.arguments().c_str(), (int)params.dynamicArgs().size());
+        ALOGE("[AdbDataLoader] onCreate: %d/%s/%s/%s/%d", params.type(),
+              params.packageName().c_str(), params.className().c_str(), params.arguments().c_str(),
+              (int)params.dynamicArgs().size());
 
         if (params.dynamicArgs().empty()) {
             ALOGE("[AdbDataLoader] Invalid DataLoaderParams. Need in/out FDs.");
@@ -210,8 +208,7 @@
         }
         if (!logFile.empty()) {
             int flags = O_WRONLY | O_CREAT | O_CLOEXEC;
-            mReadLogFd.reset(
-                    TEMP_FAILURE_RETRY(open(logFile.c_str(), flags, 0666)));
+            mReadLogFd.reset(TEMP_FAILURE_RETRY(open(logFile.c_str(), flags, 0666)));
         }
 
         mIfs = ifs;
@@ -227,8 +224,8 @@
             return false;
         }
         if (std::string_view(okay_buf, OKAY.size()) != OKAY) {
-            ALOGE("[AdbDataLoader] Received '%.*s', expecting '%.*s'",
-                  (int)OKAY.size(), okay_buf, (int)OKAY.size(), OKAY.data());
+            ALOGE("[AdbDataLoader] Received '%.*s', expecting '%.*s'", (int)OKAY.size(), okay_buf,
+                  (int)OKAY.size(), OKAY.data());
             return false;
         }
 
@@ -261,6 +258,11 @@
         mReadLogFd.reset();
     }
 
+    // Installation callback
+    bool onPrepareImage(const android::dataloader::DataLoaderInstallationFiles& addedFiles) final {
+        return true;
+    }
+
     // IFS callbacks.
     void onPendingReads(const android::dataloader::PendingReads& pendingReads) final {
         std::lock_guard lock{mMapsMutex};
@@ -348,8 +350,8 @@
             auto remainingData = std::span(data);
             while (!remainingData.empty()) {
                 auto header = readHeader(remainingData);
-                if (header.fileId == -1 && header.compressionType == 0 &&
-                    header.blockIdx == 0 && header.blockSize == 0) {
+                if (header.fileId == -1 && header.compressionType == 0 && header.blockIdx == 0 &&
+                    header.blockSize == 0) {
                     ALOGI("[AdbDataLoader] stop signal received. Sending "
                           "exit command (remaining bytes: %d).",
                           int(remainingData.size()));
@@ -358,8 +360,8 @@
                     mStopReceiving = true;
                     break;
                 }
-                if (header.fileId < 0 || header.blockSize <= 0 ||
-                    header.compressionType < 0 || header.blockIdx < 0) {
+                if (header.fileId < 0 || header.blockSize <= 0 || header.compressionType < 0 ||
+                    header.blockIdx < 0) {
                     ALOGE("[AdbDataLoader] invalid header received. Abort.");
                     mStopReceiving = true;
                     break;
@@ -374,7 +376,7 @@
 
                 auto& writeFd = writeFds[id];
                 if (writeFd < 0) {
-                    writeFd.reset(this->mIfs->openWrite(id));
+                    writeFd = this->mIfs->openWrite(id);
                     if (writeFd < 0) {
                         ALOGE("Failed to open file %d for writing (%d). Aboring.", header.fileId,
                               -writeFd);
@@ -417,8 +419,7 @@
     MetaPair* updateMapsForFile(android::dataloader::FileId id) {
         android::dataloader::RawMetadata meta = mIfs->getRawMetadata(id);
         FileId fileId;
-        auto res =
-                std::from_chars(meta.data(), meta.data() + meta.size(), fileId);
+        auto res = std::from_chars(meta.data(), meta.data() + meta.size(), fileId);
         if (res.ec != std::errc{} || fileId < 0) {
             ALOGE("[AdbDataLoader] Invalid metadata for fileid=%s (%s)",
                   android::incfs::toString(id).c_str(), meta.data());
@@ -465,11 +466,11 @@
         }
         if (trace) {
             auto* meta = getMeta(read.fileId);
-            auto str = android::base::StringPrintf(
-                    "page_read: index=%lld count=%lld meta=%.*s",
-                    static_cast<long long>(read.firstBlockIdx),
-                    static_cast<long long>(read.count),
-                    meta ? int(meta->size()) : 0, meta ? meta->data() : "");
+            auto str = android::base::StringPrintf("page_read: index=%lld count=%lld meta=%.*s",
+                                                   static_cast<long long>(read.firstBlockIdx),
+                                                   static_cast<long long>(read.count),
+                                                   meta ? int(meta->size()) : 0,
+                                                   meta ? meta->data() : "");
             ATRACE_BEGIN(str.c_str());
             ATRACE_END();
         }
@@ -477,12 +478,11 @@
             mReadLog.reserve(ReadLogBufferSize);
 
             auto fileId = getFileId(read.fileId);
-            android::base::StringAppendF(
-                    &mReadLog, "%lld:%lld:%lld:%lld\n",
-                    static_cast<long long>(read.timestampUs),
-                    static_cast<long long>(fileId ? *fileId : -1),
-                    static_cast<long long>(read.firstBlockIdx),
-                    static_cast<long long>(read.count));
+            android::base::StringAppendF(&mReadLog, "%lld:%lld:%lld:%lld\n",
+                                         static_cast<long long>(read.timestampUs),
+                                         static_cast<long long>(fileId ? *fileId : -1),
+                                         static_cast<long long>(read.firstBlockIdx),
+                                         static_cast<long long>(read.count));
 
             if (mReadLog.size() >= mReadLog.capacity() - ReadLogMaxEntrySize) {
                 flushReadLog();
@@ -516,10 +516,10 @@
     std::atomic<bool> mStopReceiving = false;
 };
 
-}  // namespace
+} // namespace
 
 int JNI_OnLoad(JavaVM* jvm, void* /* reserved */) {
-  android::dataloader::DataLoader::initialize(
-            [](auto) { return std::make_unique<AdbDataLoader>(); });
+    android::dataloader::DataLoader::initialize(
+            [](auto, auto) { return std::make_unique<AdbDataLoader>(); });
     return JNI_VERSION_1_6;
 }
diff --git a/packages/Incremental/NativeAdbDataLoader/src/com/android/incremental/nativeadb/NativeAdbDataLoaderService.java b/packages/Incremental/NativeAdbDataLoader/src/com/android/incremental/nativeadb/NativeAdbDataLoaderService.java
index bd5b795..c4e41c8 100644
--- a/packages/Incremental/NativeAdbDataLoader/src/com/android/incremental/nativeadb/NativeAdbDataLoaderService.java
+++ b/packages/Incremental/NativeAdbDataLoader/src/com/android/incremental/nativeadb/NativeAdbDataLoaderService.java
@@ -16,6 +16,8 @@
 
 package com.android.incremental.nativeadb;
 
+import android.annotation.NonNull;
+import android.content.pm.DataLoaderParams;
 import android.service.dataloader.DataLoaderService;
 
 /** This code is used for testing only. */
@@ -26,7 +28,7 @@
     }
 
     @Override
-    public DataLoader onCreateDataLoader() {
+    public DataLoader onCreateDataLoader(@NonNull DataLoaderParams dataLoaderParams) {
         return null;
     }
 }
diff --git a/packages/OsuLogin/AndroidManifest.xml b/packages/OsuLogin/AndroidManifest.xml
index 123559a..a428cb3 100644
--- a/packages/OsuLogin/AndroidManifest.xml
+++ b/packages/OsuLogin/AndroidManifest.xml
@@ -17,7 +17,7 @@
  */
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.android.hotspot2">
+          package="com.android.hotspot2.osulogin">
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
     <uses-permission android:name="android.permission.INTERNET"/>
@@ -28,7 +28,7 @@
         android:label="@string/app_name"
         android:configChanges="keyboardHidden|orientation|screenSize"
         android:supportsRtl="true">
-        <activity android:name="com.android.hotspot2.osu.OsuLoginActivity"
+        <activity android:name="com.android.hotspot2.osulogin.OsuLoginActivity"
                   android:label="@string/action_bar_label"
                   android:theme="@style/AppTheme"
                   android:configChanges="keyboardHidden|orientation|screenSize">
diff --git a/packages/OsuLogin/res/layout/osu_web_view.xml b/packages/OsuLogin/res/layout/osu_web_view.xml
index fb3c065..4436aab 100644
--- a/packages/OsuLogin/res/layout/osu_web_view.xml
+++ b/packages/OsuLogin/res/layout/osu_web_view.xml
@@ -3,7 +3,7 @@
              android:id="@+id/container"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
-             tools:context="com.android.hotspot2.osu.OsuLoginActivity">
+             tools:context="com.android.hotspot2.osulogin.OsuLoginActivity">
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
diff --git a/packages/OsuLogin/src/com/android/hotspot2/osu/OsuLoginActivity.java b/packages/OsuLogin/src/com/android/hotspot2/osu/OsuLoginActivity.java
deleted file mode 100644
index 3a994d7..0000000
--- a/packages/OsuLogin/src/com/android/hotspot2/osu/OsuLoginActivity.java
+++ /dev/null
@@ -1,283 +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.hotspot2.osu;
-
-import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED;
-
-import android.annotation.Nullable;
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.net.ConnectivityManager;
-import android.net.Network;
-import android.net.NetworkCapabilities;
-import android.net.NetworkRequest;
-import android.net.wifi.WifiManager;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.View;
-import android.webkit.WebChromeClient;
-import android.webkit.WebResourceError;
-import android.webkit.WebResourceRequest;
-import android.webkit.WebSettings;
-import android.webkit.WebView;
-import android.webkit.WebViewClient;
-import android.widget.ProgressBar;
-import android.widget.Toast;
-
-import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
-
-import com.android.hotspot2.R;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-/**
- * Online Sign Up Login Web View launched during Provision Process of Hotspot 2.0 rel2.
- */
-public class OsuLoginActivity extends Activity {
-    private static final String TAG = "OsuLogin";
-    private static final boolean DBG = true;
-
-    private String mUrl;
-    private String mHostName;
-    private Network mNetwork;
-    private ConnectivityManager mCm;
-    private ConnectivityManager.NetworkCallback mNetworkCallback;
-    private WifiManager mWifiManager;
-    private WebView mWebView;
-    private SwipeRefreshLayout mSwipeRefreshLayout;
-    private ProgressBar mProgressBar;
-    private boolean mForceDisconnect = true;
-    boolean mRedirectResponseReceived = false;
-
-    @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        if (DBG) {
-            Log.d(TAG, "onCreate: Opening OSU Web View");
-        }
-
-        mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
-        if (mWifiManager == null) {
-            Log.e(TAG, "Cannot get wifi service");
-            finishAndRemoveTask();
-            return;
-        }
-
-        if (getIntent() == null) {
-            Log.e(TAG, "Intent is null");
-            finishAndRemoveTask();
-            return;
-        }
-
-        mNetwork = getIntent().getParcelableExtra(WifiManager.EXTRA_OSU_NETWORK);
-        if (mNetwork == null) {
-            Log.e(TAG, "Cannot get the network instance for OSU from intent");
-            finishAndRemoveTask();
-            return;
-        }
-
-        mUrl = getIntent().getStringExtra(WifiManager.EXTRA_URL);
-        if (mUrl == null) {
-            Log.e(TAG, "Cannot get OSU server url from intent");
-            finishAndRemoveTask();
-            return;
-        }
-
-        mHostName = getHost(mUrl);
-        if (mHostName == null) {
-            Log.e(TAG, "Cannot get host from the url");
-            finishAndRemoveTask();
-            return;
-        }
-
-        mCm = (ConnectivityManager) getApplicationContext().getSystemService(
-                Context.CONNECTIVITY_SERVICE);
-        if (mCm == null) {
-            Log.e(TAG, "Cannot get connectivity service");
-            finishAndRemoveTask();
-            return;
-        }
-
-        if (!mCm.bindProcessToNetwork(mNetwork)) {
-            Log.e(TAG, "Network is no longer valid");
-            finishAndRemoveTask();
-            return;
-        }
-
-        final NetworkCapabilities networkCapabilities = mCm.getNetworkCapabilities(mNetwork);
-        if (networkCapabilities == null || !networkCapabilities.hasTransport(
-                NetworkCapabilities.TRANSPORT_WIFI)) {
-            Log.e(TAG, "WiFi is not supported for the Network");
-            finishAndRemoveTask();
-            return;
-        }
-
-        getActionBar().setDisplayShowHomeEnabled(false);
-        getActionBar().setElevation(0); // remove shadow
-        getActionBar().setTitle(getString(R.string.action_bar_label));
-        getActionBar().setSubtitle("");
-        setContentView(R.layout.osu_web_view);
-
-        // Exit this app if network disappeared.
-        mNetworkCallback = new ConnectivityManager.NetworkCallback() {
-            @Override
-            public void onLost(Network network) {
-                if (DBG) {
-                    Log.d(TAG, "Lost for the current Network, close the browser");
-                }
-                mForceDisconnect = false; // It is already disconnected.
-                if (!mRedirectResponseReceived) {
-                    showSignUpFailedToast();
-                }
-                if (mNetwork.equals(network)) {
-                    finishAndRemoveTask();
-                }
-            }
-        };
-
-        mCm.registerNetworkCallback(
-                new NetworkRequest.Builder().addTransportType(
-                        NetworkCapabilities.TRANSPORT_WIFI).removeCapability(
-                        NET_CAPABILITY_TRUSTED).build(),
-                mNetworkCallback);
-
-        mWebView = findViewById(R.id.webview);
-        mWebView.clearCache(true);
-        WebSettings webSettings = mWebView.getSettings();
-        webSettings.setJavaScriptEnabled(true);
-        webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
-        webSettings.setUseWideViewPort(true);
-        webSettings.setLoadWithOverviewMode(true);
-        webSettings.setSupportZoom(true);
-        webSettings.setBuiltInZoomControls(true);
-        webSettings.setDisplayZoomControls(false);
-        mProgressBar = findViewById(R.id.progress_bar);
-        mWebView.setWebViewClient(new OsuWebViewClient());
-        mWebView.setWebChromeClient(new WebChromeClient() {
-            @Override
-            public void onProgressChanged(WebView view, int newProgress) {
-                mProgressBar.setProgress(newProgress);
-            }
-        });
-
-        if (DBG) {
-            Log.d(TAG, "OSU Web View to " + mUrl);
-        }
-
-        mWebView.loadUrl(mUrl);
-        mSwipeRefreshLayout = findViewById(R.id.swipe_refresh);
-        mSwipeRefreshLayout.setOnRefreshListener(() -> {
-            mWebView.reload();
-            mSwipeRefreshLayout.setRefreshing(true);
-        });
-    }
-
-    @Override
-    public boolean onKeyDown(int keyCode, KeyEvent event) {
-        // Check if the key event was the Back button.
-        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
-            // If there is a history to move back
-            if (mWebView.canGoBack()){
-                mWebView.goBack();
-                return true;
-            }
-        }
-        return super.onKeyDown(keyCode, event);
-    }
-
-    @Override
-    protected void onDestroy() {
-        if (mNetworkCallback != null) {
-            mCm.unregisterNetworkCallback(mNetworkCallback);
-            mNetworkCallback = null;
-        }
-        if (mWifiManager != null && mForceDisconnect) {
-            mWifiManager.disconnect();
-            mWifiManager = null;
-        }
-        super.onDestroy();
-    }
-
-    private String getHost(String url) {
-        try {
-            return new URL(url).getHost();
-        } catch (MalformedURLException e) {
-            Log.e(TAG, "Invalid URL " + url);
-        }
-        return null;
-    }
-
-    private String getHeaderSubtitle(String urlString) {
-        try {
-            URL url = new URL(urlString);
-            return url.getProtocol() + "://" +  url.getHost();
-        } catch (MalformedURLException e) {
-            Log.e(TAG, "Invalid URL " + urlString);
-        }
-        return "";
-    }
-
-    private void showSignUpFailedToast() {
-        Toast.makeText(getApplicationContext(), R.string.sign_up_failed,
-                Toast.LENGTH_SHORT).show();
-    }
-
-    private class OsuWebViewClient extends WebViewClient {
-        boolean mPageError = false;
-
-        @Override
-        public void onPageStarted(WebView view, String urlString, Bitmap favicon) {
-            String subtitle = getHeaderSubtitle(urlString);
-            getActionBar().setSubtitle(subtitle);
-            mProgressBar.setVisibility(View.VISIBLE);
-        }
-
-        @Override
-        public void onPageFinished(WebView view, String url) {
-            mProgressBar.setVisibility(View.INVISIBLE);
-            mSwipeRefreshLayout.setRefreshing(false);
-
-            // Do not show the page error on UI.
-            if (mPageError) {
-                if (mRedirectResponseReceived) {
-                    // Do not disconnect current connection while provisioning is in progress.
-                    mForceDisconnect = false;
-                }
-                finishAndRemoveTask();
-            }
-        }
-
-        @Override
-        public void onReceivedError(WebView view, WebResourceRequest request,
-                WebResourceError error) {
-            if (request.getUrl().toString().startsWith("http://127.0.0.1")) {
-                mRedirectResponseReceived = true;
-                view.stopLoading();
-            }
-
-            if (request.isForMainFrame()) {
-                // This happens right after getting HTTP redirect response from an OSU server
-                // since no more Http request is allowed to send to the OSU server.
-                mPageError = true;
-                Log.e(TAG, "onReceived Error for MainFrame: " + error.getErrorCode());
-            }
-         }
-    }
-}
diff --git a/packages/OsuLogin/src/com/android/hotspot2/osulogin/OsuLoginActivity.java b/packages/OsuLogin/src/com/android/hotspot2/osulogin/OsuLoginActivity.java
new file mode 100644
index 0000000..d554745
--- /dev/null
+++ b/packages/OsuLogin/src/com/android/hotspot2/osulogin/OsuLoginActivity.java
@@ -0,0 +1,281 @@
+/*
+ * 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.hotspot2.osulogin;
+
+import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED;
+
+import android.annotation.Nullable;
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.NetworkCapabilities;
+import android.net.NetworkRequest;
+import android.net.wifi.WifiManager;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.View;
+import android.webkit.WebChromeClient;
+import android.webkit.WebResourceError;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.ProgressBar;
+import android.widget.Toast;
+
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+/**
+ * Online Sign Up Login Web View launched during Provision Process of Hotspot 2.0 rel2.
+ */
+public class OsuLoginActivity extends Activity {
+    private static final String TAG = "OsuLogin";
+    private static final boolean DBG = true;
+
+    private String mUrl;
+    private String mHostName;
+    private Network mNetwork;
+    private ConnectivityManager mCm;
+    private ConnectivityManager.NetworkCallback mNetworkCallback;
+    private WifiManager mWifiManager;
+    private WebView mWebView;
+    private SwipeRefreshLayout mSwipeRefreshLayout;
+    private ProgressBar mProgressBar;
+    private boolean mForceDisconnect = true;
+    boolean mRedirectResponseReceived = false;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        if (DBG) {
+            Log.d(TAG, "onCreate: Opening OSU Web View");
+        }
+
+        mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+        if (mWifiManager == null) {
+            Log.e(TAG, "Cannot get wifi service");
+            finishAndRemoveTask();
+            return;
+        }
+
+        if (getIntent() == null) {
+            Log.e(TAG, "Intent is null");
+            finishAndRemoveTask();
+            return;
+        }
+
+        mNetwork = getIntent().getParcelableExtra(WifiManager.EXTRA_OSU_NETWORK);
+        if (mNetwork == null) {
+            Log.e(TAG, "Cannot get the network instance for OSU from intent");
+            finishAndRemoveTask();
+            return;
+        }
+
+        mUrl = getIntent().getStringExtra(WifiManager.EXTRA_URL);
+        if (mUrl == null) {
+            Log.e(TAG, "Cannot get OSU server url from intent");
+            finishAndRemoveTask();
+            return;
+        }
+
+        mHostName = getHost(mUrl);
+        if (mHostName == null) {
+            Log.e(TAG, "Cannot get host from the url");
+            finishAndRemoveTask();
+            return;
+        }
+
+        mCm = (ConnectivityManager) getApplicationContext().getSystemService(
+                Context.CONNECTIVITY_SERVICE);
+        if (mCm == null) {
+            Log.e(TAG, "Cannot get connectivity service");
+            finishAndRemoveTask();
+            return;
+        }
+
+        if (!mCm.bindProcessToNetwork(mNetwork)) {
+            Log.e(TAG, "Network is no longer valid");
+            finishAndRemoveTask();
+            return;
+        }
+
+        final NetworkCapabilities networkCapabilities = mCm.getNetworkCapabilities(mNetwork);
+        if (networkCapabilities == null || !networkCapabilities.hasTransport(
+                NetworkCapabilities.TRANSPORT_WIFI)) {
+            Log.e(TAG, "WiFi is not supported for the Network");
+            finishAndRemoveTask();
+            return;
+        }
+
+        getActionBar().setDisplayShowHomeEnabled(false);
+        getActionBar().setElevation(0); // remove shadow
+        getActionBar().setTitle(getString(R.string.action_bar_label));
+        getActionBar().setSubtitle("");
+        setContentView(R.layout.osu_web_view);
+
+        // Exit this app if network disappeared.
+        mNetworkCallback = new ConnectivityManager.NetworkCallback() {
+            @Override
+            public void onLost(Network network) {
+                if (DBG) {
+                    Log.d(TAG, "Lost for the current Network, close the browser");
+                }
+                mForceDisconnect = false; // It is already disconnected.
+                if (!mRedirectResponseReceived) {
+                    showSignUpFailedToast();
+                }
+                if (mNetwork.equals(network)) {
+                    finishAndRemoveTask();
+                }
+            }
+        };
+
+        mCm.registerNetworkCallback(
+                new NetworkRequest.Builder().addTransportType(
+                        NetworkCapabilities.TRANSPORT_WIFI).removeCapability(
+                        NET_CAPABILITY_TRUSTED).build(),
+                mNetworkCallback);
+
+        mWebView = findViewById(R.id.webview);
+        mWebView.clearCache(true);
+        WebSettings webSettings = mWebView.getSettings();
+        webSettings.setJavaScriptEnabled(true);
+        webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
+        webSettings.setUseWideViewPort(true);
+        webSettings.setLoadWithOverviewMode(true);
+        webSettings.setSupportZoom(true);
+        webSettings.setBuiltInZoomControls(true);
+        webSettings.setDisplayZoomControls(false);
+        mProgressBar = findViewById(R.id.progress_bar);
+        mWebView.setWebViewClient(new OsuWebViewClient());
+        mWebView.setWebChromeClient(new WebChromeClient() {
+            @Override
+            public void onProgressChanged(WebView view, int newProgress) {
+                mProgressBar.setProgress(newProgress);
+            }
+        });
+
+        if (DBG) {
+            Log.d(TAG, "OSU Web View to " + mUrl);
+        }
+
+        mWebView.loadUrl(mUrl);
+        mSwipeRefreshLayout = findViewById(R.id.swipe_refresh);
+        mSwipeRefreshLayout.setOnRefreshListener(() -> {
+            mWebView.reload();
+            mSwipeRefreshLayout.setRefreshing(true);
+        });
+    }
+
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        // Check if the key event was the Back button.
+        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
+            // If there is a history to move back
+            if (mWebView.canGoBack()) {
+                mWebView.goBack();
+                return true;
+            }
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+    @Override
+    protected void onDestroy() {
+        if (mNetworkCallback != null) {
+            mCm.unregisterNetworkCallback(mNetworkCallback);
+            mNetworkCallback = null;
+        }
+        if (mWifiManager != null && mForceDisconnect) {
+            mWifiManager.disconnect();
+            mWifiManager = null;
+        }
+        super.onDestroy();
+    }
+
+    private String getHost(String url) {
+        try {
+            return new URL(url).getHost();
+        } catch (MalformedURLException e) {
+            Log.e(TAG, "Invalid URL " + url);
+        }
+        return null;
+    }
+
+    private String getHeaderSubtitle(String urlString) {
+        try {
+            URL url = new URL(urlString);
+            return url.getProtocol() + "://" +  url.getHost();
+        } catch (MalformedURLException e) {
+            Log.e(TAG, "Invalid URL " + urlString);
+        }
+        return "";
+    }
+
+    private void showSignUpFailedToast() {
+        Toast.makeText(getApplicationContext(), R.string.sign_up_failed,
+                Toast.LENGTH_SHORT).show();
+    }
+
+    private class OsuWebViewClient extends WebViewClient {
+        boolean mPageError = false;
+
+        @Override
+        public void onPageStarted(WebView view, String urlString, Bitmap favicon) {
+            String subtitle = getHeaderSubtitle(urlString);
+            getActionBar().setSubtitle(subtitle);
+            mProgressBar.setVisibility(View.VISIBLE);
+        }
+
+        @Override
+        public void onPageFinished(WebView view, String url) {
+            mProgressBar.setVisibility(View.INVISIBLE);
+            mSwipeRefreshLayout.setRefreshing(false);
+
+            // Do not show the page error on UI.
+            if (mPageError) {
+                if (mRedirectResponseReceived) {
+                    // Do not disconnect current connection while provisioning is in progress.
+                    mForceDisconnect = false;
+                }
+                finishAndRemoveTask();
+            }
+        }
+
+        @Override
+        public void onReceivedError(WebView view, WebResourceRequest request,
+                WebResourceError error) {
+            if (request.getUrl().toString().startsWith("http://127.0.0.1")) {
+                mRedirectResponseReceived = true;
+                view.stopLoading();
+            }
+
+            if (request.isForMainFrame()) {
+                // This happens right after getting HTTP redirect response from an OSU server
+                // since no more Http request is allowed to send to the OSU server.
+                mPageError = true;
+                Log.e(TAG, "onReceived Error for MainFrame: " + error.getErrorCode());
+            }
+        }
+    }
+}
diff --git a/packages/PackageInstaller/AndroidManifest.xml b/packages/PackageInstaller/AndroidManifest.xml
index 7d07fda..f3b922e 100644
--- a/packages/PackageInstaller/AndroidManifest.xml
+++ b/packages/PackageInstaller/AndroidManifest.xml
@@ -16,6 +16,7 @@
     <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
     <uses-permission android:name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME" />
     <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
+    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
 
     <uses-permission android:name="com.google.android.permission.INSTALL_WEARABLE_PACKAGES" />
 
diff --git a/packages/PackageInstaller/res/values-ar/strings.xml b/packages/PackageInstaller/res/values-ar/strings.xml
index 87f89ce..2392c96 100644
--- a/packages/PackageInstaller/res/values-ar/strings.xml
+++ b/packages/PackageInstaller/res/values-ar/strings.xml
@@ -24,8 +24,8 @@
     <string name="installing_app" msgid="1165095864863849422">"جارٍ تثبيت <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
     <string name="install_done" msgid="5987363587661783896">"تم تثبيت التطبيق."</string>
     <string name="install_confirm_question" msgid="8176284075816604590">"هل تريد تثبيت هذا التطبيق؟"</string>
-    <string name="install_confirm_question_update" msgid="7942235418781274635">"هل تريد تثبيت تحديث لهذا التطبيق الحالي؟ لن تفقد بياناتك الحالية."</string>
-    <string name="install_confirm_question_update_system" msgid="4713001702777910263">"هل تريد تثبيت تحديث لهذا التطبيق المضمَّن؟ لن تفقد بياناتك الحالية."</string>
+    <string name="install_confirm_question_update" msgid="7942235418781274635">"هل تريد تثبيت إعادة تحميل لهذا التطبيق الحالي؟ لن تفقد بياناتك الحالية."</string>
+    <string name="install_confirm_question_update_system" msgid="4713001702777910263">"هل تريد تثبيت إعادة تحميل لهذا التطبيق المضمَّن؟ لن تفقد بياناتك الحالية."</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-ca/strings.xml b/packages/PackageInstaller/res/values-ca/strings.xml
index 62940fa..1833329 100644
--- a/packages/PackageInstaller/res/values-ca/strings.xml
+++ b/packages/PackageInstaller/res/values-ca/strings.xml
@@ -57,7 +57,7 @@
     <string name="uninstall_application_text_all_users" msgid="575491774380227119">"Vols desinstal·lar aquesta aplicació per a "<b>"tots"</b>" els usuaris? L\'aplicació i les seves dades se suprimiran per a "<b>"tots"</b>" els usuaris del dispositiu."</string>
     <string name="uninstall_application_text_user" msgid="498072714173920526">"Vols desinstal·lar aquesta aplicació per a l\'usuari <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
     <string name="uninstall_update_text" msgid="863648314632448705">"Vols substituir aquesta aplicació per la versió de fàbrica? Se suprimiran totes les dades."</string>
-    <string name="uninstall_update_text_multiuser" msgid="8992883151333057227">"Vols substituir aquesta aplicació per la versió de fàbrica? Se suprimiran totes les dades. Això afectarà tots els usuaris d\'aquest dispositiu, inclosos els que tinguin un perfil professional."</string>
+    <string name="uninstall_update_text_multiuser" msgid="8992883151333057227">"Vols substituir aquesta aplicació per la versió de fàbrica? Se suprimiran totes les dades. Això afectarà tots els usuaris d\'aquest dispositiu, inclosos els que tinguin un perfil de treball."</string>
     <string name="uninstall_keep_data" msgid="7002379587465487550">"Conserva <xliff:g id="SIZE">%1$s</xliff:g> de dades de l\'aplicació."</string>
     <string name="uninstalling_notification_channel" msgid="840153394325714653">"Desinstal·lacions en curs"</string>
     <string name="uninstall_failure_notification_channel" msgid="1136405866767576588">"Desinstal·lacions fallides"</string>
diff --git a/packages/PrintSpooler/res/values-ar/strings.xml b/packages/PrintSpooler/res/values-ar/strings.xml
index e309383..a21f2b5 100644
--- a/packages/PrintSpooler/res/values-ar/strings.xml
+++ b/packages/PrintSpooler/res/values-ar/strings.xml
@@ -75,7 +75,7 @@
     <string name="cannot_add_printer" msgid="7840348733668023106">"تعذرت إضافة طابعات"</string>
     <string name="select_to_add_printers" msgid="3800709038689830974">"اختر لإضافة طابعة"</string>
     <string name="enable_print_service" msgid="3482815747043533842">"حدد للتمكين"</string>
-    <string name="enabled_services_title" msgid="7036986099096582296">"الخدمات الممكنة"</string>
+    <string name="enabled_services_title" msgid="7036986099096582296">"الخدمات المفعّلة"</string>
     <string name="recommended_services_title" msgid="3799434882937956924">"الخدمات الموصى بها"</string>
     <string name="disabled_services_title" msgid="7313253167968363211">"الخدمات غير المفعّلة"</string>
     <string name="all_services_title" msgid="5578662754874906455">"جميع الخدمات"</string>
diff --git a/packages/PrintSpooler/res/values-fr-rCA/strings.xml b/packages/PrintSpooler/res/values-fr-rCA/strings.xml
index bf306ff..3b7775a 100644
--- a/packages/PrintSpooler/res/values-fr-rCA/strings.xml
+++ b/packages/PrintSpooler/res/values-fr-rCA/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="4469836075319831821">"File d\'att. impr."</string>
+    <string name="app_label" msgid="4469836075319831821">"File d\'attente d\'impression"</string>
     <string name="more_options_button" msgid="2243228396432556771">"Plus d\'options"</string>
     <string name="label_destination" msgid="9132510997381599275">"Destination"</string>
     <string name="label_copies" msgid="3634531042822968308">"Copies"</string>
diff --git a/packages/PrintSpooler/res/values-ja/donottranslate.xml b/packages/PrintSpooler/res/values-ja/donottranslate.xml
index d334ddd..6a0f768 100644
--- a/packages/PrintSpooler/res/values-ja/donottranslate.xml
+++ b/packages/PrintSpooler/res/values-ja/donottranslate.xml
@@ -16,7 +16,7 @@
 
 <resources>
 
-    <string name="mediasize_default">JIS_B5</string>
+    <string name="mediasize_default">ISO_A4</string>
     <string name="mediasize_standard">@string/mediasize_standard_japan</string>
 
 </resources>
diff --git a/packages/SettingsLib/Android.bp b/packages/SettingsLib/Android.bp
index 6212493..3f42ad4 100644
--- a/packages/SettingsLib/Android.bp
+++ b/packages/SettingsLib/Android.bp
@@ -27,6 +27,7 @@
         "SettingsLibRadioButtonPreference",
         "WifiTrackerLib",
         "SettingsLibDisplayDensityUtils",
+        "SettingsLibSchedulesProvider",
     ],
 
     // ANDROIDMK TRANSLATION ERROR: unsupported assignment to LOCAL_SHARED_JAVA_LIBRARIES
diff --git a/packages/SettingsLib/LayoutPreference/res/drawable/ic_swap_horiz_blue.xml b/packages/SettingsLib/LayoutPreference/res/drawable/ic_swap_horiz_blue.xml
new file mode 100644
index 0000000..04de174
--- /dev/null
+++ b/packages/SettingsLib/LayoutPreference/res/drawable/ic_swap_horiz_blue.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ 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.
+  -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+  <path
+      android:pathData="M6.99,11L3,15l3.99,4v-3H14v-2H6.99v-3zM21,9l-3.99,-4v3H10v2h7.01v3L21,9z"
+      android:fillColor="#4285F4"/>
+</vector>
diff --git a/packages/SettingsLib/LayoutPreference/res/drawable/ic_swap_horiz_grey.xml b/packages/SettingsLib/LayoutPreference/res/drawable/ic_swap_horiz_grey.xml
new file mode 100644
index 0000000..b4145f2
--- /dev/null
+++ b/packages/SettingsLib/LayoutPreference/res/drawable/ic_swap_horiz_grey.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ 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.
+  -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+  <path
+      android:pathData="M6.99,11L3,15l3.99,4v-3H14v-2H6.99v-3zM21,9l-3.99,-4v3H10v2h7.01v3L21,9z"
+      android:fillColor="#757575"/>
+</vector>
diff --git a/packages/SettingsLib/LayoutPreference/res/layout/cross_profiles_settings_entity_header.xml b/packages/SettingsLib/LayoutPreference/res/layout/cross_profiles_settings_entity_header.xml
new file mode 100644
index 0000000..dc6dddb
--- /dev/null
+++ b/packages/SettingsLib/LayoutPreference/res/layout/cross_profiles_settings_entity_header.xml
@@ -0,0 +1,56 @@
+<?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.
+  -->
+
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/entity_header"
+    style="@style/EntityHeader">
+
+    <LinearLayout
+        android:id="@+id/entity_header_content"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingTop="32dp"
+        android:paddingBottom="32dp"
+        android:layout_centerHorizontal="true"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:id="@+id/entity_header_content"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:orientation="horizontal">
+
+            <ImageView
+                android:id="@+id/entity_header_icon_personal"
+                style="@style/CrossProfileEntityHeaderIcon" />
+
+            <ImageView
+                android:id="@+id/entity_header_swap_horiz"
+                style="@style/CrossProfileSwapHorizIcon "/>
+
+            <ImageView
+                android:id="@+id/entity_header_icon_work"
+                style="@style/CrossProfileEntityHeaderIcon" />
+        </LinearLayout>
+
+        <TextView
+            android:id="@+id/entity_header_title"
+            style="@style/CrossProfileEntityHeaderTitle" />
+    </LinearLayout>
+</RelativeLayout>
diff --git a/packages/SettingsLib/LayoutPreference/res/values/styles.xml b/packages/SettingsLib/LayoutPreference/res/values/styles.xml
index 6a2b729..4a99e84 100644
--- a/packages/SettingsLib/LayoutPreference/res/values/styles.xml
+++ b/packages/SettingsLib/LayoutPreference/res/values/styles.xml
@@ -37,4 +37,35 @@
         <item name="android:singleLine">true</item>
         <item name="android:ellipsize">marquee</item>
     </style>
+
+    <style name="CrossProfileEntityHeaderIcon">
+        <item name="android:layout_width">48dp</item>
+        <item name="android:layout_height">48dp</item>
+        <item name="android:layout_gravity">center</item>
+        <item name="android:gravity">center</item>
+        <item name="android:scaleType">fitCenter</item>
+        <item name="android:antialias">true</item>
+    </style>
+
+    <style name="CrossProfileSwapHorizIcon">
+        <item name="android:layout_width">24dp</item>
+        <item name="android:layout_height">24dp</item>
+        <item name="android:layout_gravity">center</item>
+        <item name="android:gravity">center</item>
+        <item name="android:scaleType">fitCenter</item>
+        <item name="android:layout_marginStart">10dp</item>
+        <item name="android:layout_marginEnd">10dp</item>
+        <item name="android:src">@drawable/ic_swap_horiz_grey</item>
+        <item name="android:antialias">true</item>
+    </style>
+
+    <style name="CrossProfileEntityHeaderTitle">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_gravity">center</item>
+        <item name="android:textSize">18sp</item>
+        <item name="android:textColor">?android:attr/textColorPrimary</item>
+        <item name="android:fontFamily">google-sans-medium</item>
+        <item name="android:layout_marginTop">8dp</item>
+    </style>
 </resources>
\ No newline at end of file
diff --git a/packages/SettingsLib/SchedulesProvider/Android.bp b/packages/SettingsLib/SchedulesProvider/Android.bp
new file mode 100644
index 0000000..ef59252
--- /dev/null
+++ b/packages/SettingsLib/SchedulesProvider/Android.bp
@@ -0,0 +1,12 @@
+android_library {
+    name: "SettingsLibSchedulesProvider",
+
+    srcs: ["src/**/*.java"],
+
+    static_libs: [
+          "androidx.annotation_annotation",
+    ],
+
+    sdk_version: "system_current",
+    min_sdk_version: "21",
+}
diff --git a/packages/SettingsLib/SchedulesProvider/AndroidManifest.xml b/packages/SettingsLib/SchedulesProvider/AndroidManifest.xml
new file mode 100644
index 0000000..1b0e4bf
--- /dev/null
+++ b/packages/SettingsLib/SchedulesProvider/AndroidManifest.xml
@@ -0,0 +1,23 @@
+<?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
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.settingslib.schedulesprovider">
+
+    <uses-sdk android:minSdkVersion="21" />
+
+</manifest>
diff --git a/packages/SettingsLib/SchedulesProvider/src/com/android/settingslib/schedulesprovider/ScheduleInfo.java b/packages/SettingsLib/SchedulesProvider/src/com/android/settingslib/schedulesprovider/ScheduleInfo.java
new file mode 100644
index 0000000..7d2b8e2
--- /dev/null
+++ b/packages/SettingsLib/SchedulesProvider/src/com/android/settingslib/schedulesprovider/ScheduleInfo.java
@@ -0,0 +1,167 @@
+/*
+ * 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.settingslib.schedulesprovider;
+
+import android.content.Intent;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+
+/**
+ * This is a schedule data item. It contains the schedule title text, the summary text which
+ * displays on the summary of the Settings preference and an {@link Intent}. Intent is able to
+ * launch the editing page of the schedule data when user clicks this item (preference).
+ */
+public class ScheduleInfo implements Parcelable {
+    private static final String TAG = "ScheduleInfo";
+    private final String mTitle;
+    private final String mSummary;
+    private final Intent mIntent;
+
+    public ScheduleInfo(Builder builder) {
+        mTitle = builder.mTitle;
+        mSummary = builder.mSummary;
+        mIntent = builder.mIntent;
+    }
+
+    protected ScheduleInfo(Parcel in) {
+        mTitle = in.readString();
+        mSummary = in.readString();
+        mIntent = in.readParcelable(Intent.class.getClassLoader());
+    }
+
+    /**
+     * Returns the title text.
+     *
+     * @return The title.
+     */
+    public String getTitle() {
+        return mTitle;
+    }
+
+    /**
+     * Returns the summary text.
+     *
+     * @return The summary.
+     */
+    public String getSummary() {
+        return mSummary;
+    }
+
+    /**
+     * Returns an {@link Intent}.
+     */
+    public Intent getIntent() {
+        return mIntent;
+    }
+
+    /**
+     * Verify the member variables are valid.
+     *
+     * @return {@code true} if all member variables are valid.
+     */
+    public boolean isValid() {
+        return !TextUtils.isEmpty(mTitle) && !TextUtils.isEmpty(mSummary) && (mIntent != null);
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mTitle);
+        dest.writeString(mSummary);
+        dest.writeParcelable(mIntent, flags);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public static final Creator<ScheduleInfo> CREATOR = new Creator<ScheduleInfo>() {
+        @Override
+        public ScheduleInfo createFromParcel(Parcel in) {
+            return new ScheduleInfo(in);
+        }
+
+        @Override
+        public ScheduleInfo[] newArray(int size) {
+            return new ScheduleInfo[size];
+        }
+    };
+
+    @NonNull
+    @Override
+    public String toString() {
+        return "title : " + mTitle + " summary : " + mSummary + (mIntent == null
+                ? " and intent is null." : ".");
+    }
+
+    /**
+     * A simple builder for {@link ScheduleInfo}.
+     */
+    public static class Builder {
+        @NonNull
+        private String mTitle;
+        @NonNull
+        private String mSummary;
+        @NonNull
+        private Intent mIntent;
+
+        /**
+         * Sets the title.
+         *
+         * @param title The title of the preference item.
+         * @return This instance.
+         */
+        public Builder setTitle(@NonNull String title) {
+            mTitle = title;
+            return this;
+        }
+
+        /**
+         * Sets the summary.
+         *
+         * @param summary The summary of the preference summary.
+         * @return This instance.
+         */
+        public Builder setSummary(@NonNull String summary) {
+            mSummary = summary;
+            return this;
+        }
+
+        /**
+         * Sets the {@link Intent}.
+         *
+         * @param intent The action when user clicks the preference.
+         * @return This instance.
+         */
+        public Builder setIntent(@NonNull Intent intent) {
+            mIntent = intent;
+            return this;
+        }
+
+        /**
+         * Creates an instance of {@link ScheduleInfo}.
+         *
+         * @return The instance of {@link ScheduleInfo}.
+         */
+        public ScheduleInfo build() {
+            return new ScheduleInfo(this);
+        }
+    }
+}
diff --git a/packages/SettingsLib/SchedulesProvider/src/com/android/settingslib/schedulesprovider/SchedulesProvider.java b/packages/SettingsLib/SchedulesProvider/src/com/android/settingslib/schedulesprovider/SchedulesProvider.java
new file mode 100644
index 0000000..a423e47
--- /dev/null
+++ b/packages/SettingsLib/SchedulesProvider/src/com/android/settingslib/schedulesprovider/SchedulesProvider.java
@@ -0,0 +1,133 @@
+/*
+ * 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.settingslib.schedulesprovider;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.SystemProperties;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * This provider is a bridge for client apps to provide the schedule data.
+ * Client provider needs to implement their {@link #getScheduleInfoList()} and returns a list of
+ * {@link ScheduleInfo}.
+ */
+public abstract class SchedulesProvider extends ContentProvider {
+    public static final String METHOD_GENERATE_SCHEDULE_INFO_LIST = "generateScheduleInfoList";
+    public static final String BUNDLE_SCHEDULE_INFO_LIST = "scheduleInfoList";
+    private static final String TAG = "SchedulesProvider";
+
+    @Override
+    public boolean onCreate() {
+        return true;
+    }
+
+    @Override
+    public final Cursor query(
+            Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        throw new UnsupportedOperationException("Query operation is not supported currently.");
+    }
+
+    @Override
+    public final String getType(Uri uri) {
+        throw new UnsupportedOperationException("GetType operation is not supported currently.");
+    }
+
+    @Override
+    public final Uri insert(Uri uri, ContentValues values) {
+        throw new UnsupportedOperationException("Insert operation is not supported currently.");
+    }
+
+    @Override
+    public final int delete(Uri uri, String selection, String[] selectionArgs) {
+        throw new UnsupportedOperationException("Delete operation not supported currently.");
+    }
+
+    @Override
+    public final int update(Uri uri, ContentValues values, String selection,
+            String[] selectionArgs) {
+        throw new UnsupportedOperationException("Update operation is not supported currently.");
+    }
+
+    /**
+     * Return the list of the schedule information.
+     *
+     * @return a list of the {@link ScheduleInfo}.
+     */
+    public abstract ArrayList<ScheduleInfo> getScheduleInfoList();
+
+    /**
+     * Returns a bundle which contains a list of {@link ScheduleInfo} and data types:
+     * scheduleInfoList : ArrayList<ScheduleInfo>
+     */
+    @Override
+    public Bundle call(@NonNull String method, @Nullable String arg, @Nullable Bundle extras) {
+        final Bundle bundle = new Bundle();
+        if (METHOD_GENERATE_SCHEDULE_INFO_LIST.equals(method)) {
+            final ArrayList<ScheduleInfo> scheduleInfoList = filterInvalidData(
+                    getScheduleInfoList());
+            if (scheduleInfoList != null) {
+                bundle.putParcelableArrayList(BUNDLE_SCHEDULE_INFO_LIST, scheduleInfoList);
+            }
+        }
+        return bundle;
+    }
+
+    /**
+     * To filter the invalid schedule info.
+     *
+     * @param scheduleInfoList The list of the {@link ScheduleInfo}.
+     * @return The valid list of the {@link ScheduleInfo}.
+     */
+    private ArrayList<ScheduleInfo> filterInvalidData(ArrayList<ScheduleInfo> scheduleInfoList) {
+        if (scheduleInfoList == null) {
+            Log.d(TAG, "package : " + getContext().getPackageName() + " has no scheduling data.");
+            return null;
+        }
+        // Dump invalid data in debug mode.
+        if (SystemProperties.getInt("ro.debuggable", 0) == 1) {
+            new Thread(() -> {
+                dumpInvalidData(scheduleInfoList);
+            }).start();
+        }
+        final List<ScheduleInfo> filteredList = scheduleInfoList
+                .stream()
+                .filter(scheduleInfo -> scheduleInfo.isValid())
+                .collect(Collectors.toList());
+
+        return new ArrayList<>(filteredList);
+    }
+
+    private void dumpInvalidData(ArrayList<ScheduleInfo> scheduleInfoList) {
+        Log.d(TAG, "package : " + getContext().getPackageName()
+                + " provided some scheduling data are invalid.");
+        scheduleInfoList
+                .stream()
+                .filter(scheduleInfo -> !scheduleInfo.isValid())
+                .forEach(scheduleInfo -> Log.d(TAG, scheduleInfo.toString()));
+    }
+}
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index b31841d..762053e 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Gekoppel via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Beskikbaar via %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Tik om aan te meld"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Geen internet nie"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Daar kan nie by private DNS-bediener ingegaan word nie"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Beperkte verbinding"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Geen internet nie"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB-ontfouting"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"In ontfoutmodus wanneer USB gekoppel is"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Herroep USB-onfoutingmagtigings"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Draadlose ontfouting"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Ontfoutingmodus wanneer Wi-Fi gekoppel is"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Fout"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Draadlose ontfouting"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Skakel draadlose ontfouting aan om beskikbare toestelle te sien en te gebruik"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Gebruik QR-kode om toestel saam te bind"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Gebruik QR-kodeskandeerder om nuwe toestelle saam te bind"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Gebruik saambindkode om toestel saam te bind"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Gebruik \'n sessyferkode om nuwe toestelle saam te bind"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Saamgebinde toestelle"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Tans gekoppel"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Toestelbesonderhede"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Vergeet"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Toestelvingerafdruk: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Kon nie koppel nie"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Maak seker dat <xliff:g id="DEVICE_NAME">%1$s</xliff:g> aan die regte netwerk gekoppel is"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Bind met toestel saam"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi‑Fi-saambindkode"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Kon nie saambind nie"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Maak seker dat die toestel aan dieselfde netwerk gekoppel is."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Bind toestel oor Wi-Fi saam deur \'n QR-kode te skandeer"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Bind tans toestel saam …"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Kon nie die toestel saambind nie. Óf die QR-kode is verkeerd, óf die toestel is nie aan dieselfde netwerk gekoppel nie."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-adres en -poort"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skandeer QR-kode"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Bind toestel oor Wi-Fi saam deur \'n QR-kode te skandeer"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Kortpad na foutverslag"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Wys \'n knoppie in die kragkieslys om \'n foutverslag te doen"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Bly wakker"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Gebruik hardewareversnelling vir verbinding indien beskikbaar"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Laat USB-ontfouting toe?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB-ontfouting is net vir ontwikkelingsdoeleindes bedoel. Gebruik dit om data te kopieer tussen jou rekenaar en jou toestel, programme op jou toestel te installeer sonder kennisgewing en om loglêerdata te lees."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Laat draadlose ontfouting toe?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Draadlose ontfouting is net vir ontwikkelingsdoeleindes bedoel. Gebruik dit om data te kopieer tussen jou rekenaar en jou toestel, programme op jou toestel te installeer sonder kennisgewing, en loglêerdata te lees."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Herroep toegang tot USB-ontfouting vanaf alle rekenaars wat jy voorheen gemagtig het?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Laat ontwikkeling-instellings toe?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Hierdie instellings is bedoel net vir ontwikkelinggebruik. Dit kan jou toestel en die programme daarop breek of vreemde dinge laat doen."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalie (rooi-groen)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalie (blou-geel)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Kleurregstelling"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Kleurregstelling help mense met kleurblindheid om akkurater kleure te sien"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Kleurregstelling help mense met kleurblindheid om akkurater kleure te sien"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Geneutraliseer deur <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">"Ongeveer <xliff:g id="TIME_REMAINING">%1$s</xliff:g> oor"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Minder as <xliff:g id="THRESHOLD">%1$s</xliff:g> oor (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Meer as <xliff:g id="TIME_REMAINING">%1$s</xliff:g> oor (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Meer as <xliff:g id="TIME_REMAINING">%1$s</xliff:g> oor"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Foon kan binnekort afgaan"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet kan binnekort afgaan"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Toestel kan binnekort afgaan"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Foon kan binnekort afgaan (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet kan binnekort afgaan (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Toestel kan binnekort afgaan (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Foon sal dalk binnekort afgaan"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet sal dalk binnekort afgaan"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Toestel sal dalk binnekort afgaan"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Foon sal dalk binnekort afgaan (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet sal dalk binnekort afgaan (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Toestel sal dalk binnekort afgaan (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> oor tot battery gelaai is"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> tot battery gelaai is"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Onbekend"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Laai"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"laai tans"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Laai tans vinnig"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Laai tans stadig"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Laai nie"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Ingeprop; kan nie op die oomblik laai nie"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Vol"</string>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 4955ad8..3e6886c 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"በ <xliff:g id="NAME">%1$s</xliff:g> በኩል ተገናኝተዋል"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"በ%1$s በኩል የሚገኝ"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"ለመመዝገብ መታ ያድርጉ"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"ምንም በይነመረብ የለም"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"የግል ዲኤንኤስ አገልጋይ ሊደረስበት አይችልም"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"የተገደበ ግንኙነት"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"ምንም በይነመረብ የለም"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"የUSB አራሚ"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"USB ሲያያዝ የአርም ሁኔታ"</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">"Wi-Fi ሲገናኝ የማረም ሁነታ"</string>
+    <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">"የQR ኮድን በመጠቀም መሣሪያን ያጣምሩ"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"የQR ኮድ መቃኛን በመጠቀም አዲስ መሣሪያዎችን ያጣምሩ"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"የመሣሪያ ዝርዝሮች"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"እርሳ"</string>
+    <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_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_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">"የአይፒ አድራሻ እና ወደብ"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR ኮድን ይቃኙ"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"የQR ኮድ በመጠቀም መሣሪያን በመቃኘት በ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="keep_screen_on" msgid="1187161672348797558">"ነቅተህ ቆይ"</string>
@@ -272,6 +298,8 @@
     <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">"የዩ ኤስ ቢ ማረም መዳረሻ ከዚህ ቀደም ፍቃድ ከሰጧቸው ኮምፒውተሮች ላይ ይሻሩ?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"የግንባታ ቅንብሮችን ፍቀድ?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"እነዚህ ቅንብሮች  የታሰቡት ለግንባታ አጠቃቀም ብቻ ናቸው። መሳሪያህን እና በሱ ላይ ያሉትን መተግበሪያዎች እንዲበለሹ ወይም በትክክል እንዳይሰሩ ሊያደርጉ ይችላሉ።"</string>
@@ -384,7 +412,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="9137381746633858694">"ቀለም ማስተካከያ የቀለም ማየት የማይችሉ ሰዎች ተጨማሪ ትክክለኛ ቀለማትን እንዲመለከቱ ያስችላቸዋል"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"ቀለም ማስተካከያ ቀለም ማየት የማይችሉ ሰዎች ተጨማሪ ትክክለኛ ቀለማትን እንዲመለከቱ ያስችላቸዋል"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"ከ<xliff:g id="THRESHOLD">%1$s</xliff:g> ያነሰ ይቀራል (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"ከ<xliff:g id="TIME_REMAINING">%1$s</xliff:g> በላይ ይቀራል (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"ከ<xliff:g id="TIME_REMAINING">%1$s</xliff:g> በላይ ይቀራል"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ስልኩ በቅርቡ ሊዘጋ ይችላል"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ጡባዊው በቅርቡ ሊዘጋ ይችላል"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"መሣሪያው በቅርቡ ሊዘጋ ይችላል"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ስልኩ በቅርቡ ሊዘጋ ይችላል (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ጡባዊው በቅርቡ ሊዘጋ ይችላል (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"መሣሪያው በቅርቡ ሊዘጋ ይችላል (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"ስልኩ በቅርቡ ሊዘጋ ይችላል"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ጡባዊው በቅርቡ ሊዘጋ ይችላል"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"መሣሪያው በቅርቡ ሊዘጋ ይችላል"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"ስልኩ በቅርቡ ሊዘጋ ይችላል (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ጡባዊው በቅርቡ ሊዘጋ ይችላል (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> ኃይል እስከሚሞላ ድረስ ይቀራል"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"ኃይል በመሙላት ላይ"</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_discharging" msgid="6962689305413556485">"ባትሪ እየሞላ አይደለም"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"ተሰክቷል፣ አሁን ኃይል መሙላት አይቻልም"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"ሙሉነው"</string>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 7b26be4..7fa6b7f 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"تم الاتصال عبر <xliff:g id="NAME">%1$s</xliff:g>."</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"‏متوفرة عبر %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"انقر للاشتراك."</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"لا يتوفر اتصال إنترنت."</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"لا يمكن الوصول إلى خادم أسماء نظام نطاقات خاص"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"اتصال محدود"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"لا يتوفر اتصال إنترنت."</string>
@@ -207,6 +206,60 @@
     <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>
+    <!-- no translation found for enable_adb_wireless (6973226350963971018) -->
+    <skip />
+    <!-- no translation found for enable_adb_wireless_summary (7344391423657093011) -->
+    <skip />
+    <!-- no translation found for adb_wireless_error (721958772149779856) -->
+    <skip />
+    <!-- no translation found for adb_wireless_settings (2295017847215680229) -->
+    <skip />
+    <!-- no translation found for adb_wireless_list_empty_off (1713707973837255490) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_qrcode_title (6982904096137468634) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_qrcode_summary (3729901496856458634) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_code_title (1122590300445142904) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_code_summary (6370414511333685185) -->
+    <skip />
+    <!-- no translation found for adb_paired_devices_title (5268997341526217362) -->
+    <skip />
+    <!-- no translation found for adb_wireless_device_connected_summary (3039660790249148713) -->
+    <skip />
+    <!-- no translation found for adb_wireless_device_details_title (7129369670526565786) -->
+    <skip />
+    <!-- no translation found for adb_device_forget (193072400783068417) -->
+    <skip />
+    <!-- no translation found for adb_device_fingerprint_title_format (291504822917843701) -->
+    <skip />
+    <!-- no translation found for adb_wireless_connection_failed_title (664211177427438438) -->
+    <skip />
+    <!-- no translation found for adb_wireless_connection_failed_message (9213896700171602073) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_title (7141739231018530210) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_pairing_code_label (3639239786669722731) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_failed_title (3426758947882091735) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_failed_msg (6611097519661997148) -->
+    <skip />
+    <!-- no translation found for adb_wireless_qrcode_summary (8051414549011801917) -->
+    <skip />
+    <!-- no translation found for adb_wireless_verifying_qrcode_text (6123192424916029207) -->
+    <skip />
+    <!-- no translation found for adb_qrcode_pairing_device_failed_msg (6936292092592914132) -->
+    <skip />
+    <!-- no translation found for adb_wireless_ip_addr_preference_title (8335132107715311730) -->
+    <skip />
+    <!-- no translation found for adb_wireless_qrcode_pairing_title (1906409667944674707) -->
+    <skip />
+    <!-- no translation found for adb_wireless_qrcode_pairing_description (8578868049289910131) -->
+    <skip />
+    <!-- no translation found for keywords_adb_wireless (6507505581882171240) -->
+    <skip />
     <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>
@@ -272,6 +325,10 @@
     <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>
+    <!-- no translation found for adbwifi_warning_title (727104571653031865) -->
+    <skip />
+    <!-- no translation found for adbwifi_warning_message (8005936574322702388) -->
+    <skip />
     <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>
@@ -384,7 +441,8 @@
     <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="9137381746633858694">"تساعد ميزة تصحيح الألوان المصابين بعمى الألوان على رؤية الألوان بدقة أكبر"</string>
+    <!-- no translation found for accessibility_display_daltonizer_preference_subtitle (6178138727195403796) -->
+    <skip />
     <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>
@@ -403,18 +461,27 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"يتبقى أقل من <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"يتبقى أكثر من <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"يتبقى أكثر من <xliff:g id="TIME_REMAINING">%1$s</xliff:g>."</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"قد يتم إغلاق الهاتف بعد قليل."</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"قد يتم إغلاق الجهاز اللوحي بعد قليل."</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"قد يتم إغلاق الجهاز بعد قليل."</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"قد يتم إغلاق الهاتف بعد قليل (<xliff:g id="LEVEL">%1$s</xliff:g>)."</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"قد يتم إغلاق الجهاز اللوحي بعد قليل (<xliff:g id="LEVEL">%1$s</xliff:g>)."</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"قد يتم إغلاق الجهاز بعد قليل (<xliff:g id="LEVEL">%1$s</xliff:g>)."</string>
+    <!-- no translation found for power_remaining_duration_only_shutdown_imminent (137330009791560774) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_only_shutdown_imminent (145489081521468132) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_only_shutdown_imminent (1070562682853942350) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_shutdown_imminent (4429259621177089719) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_shutdown_imminent (7703677921000858479) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_shutdown_imminent (4374784375644214578) -->
+    <skip />
     <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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> إلى أن يتم شحن الجهاز بالكامل"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"جارٍ الشحن"</string>
+    <!-- no translation found for battery_info_status_charging_fast (8027559755902954885) -->
+    <skip />
+    <!-- no translation found for battery_info_status_charging_slow (3190803837168962319) -->
+    <skip />
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"لا يتم الشحن"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"تم التوصيل، ولكن يتعذّر الشحن الآن"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"ممتلئة"</string>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index dcebe5b..dc22f29 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g>ৰ জৰিয়তে সংযুক্ত"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$sৰ মাধ্যমেৰে উপলব্ধ"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"ছাইন আপ কৰিবলৈ টিপক"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"ইণ্টাৰনেট সংযোগ নাই"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"ব্যক্তিগত DNS ছাৰ্ভাৰ এক্সেছ কৰিব নোৱাৰি"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"ইণ্টাৰনেট সংযোগ সীমিত"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"ইণ্টাৰনেট সংযোগ নাই"</string>
@@ -207,6 +206,33 @@
     <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="enable_adb_wireless" msgid="6973226350963971018">"ৱায়াৰলেছ ডিবাগিং"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"ৱাই-ফাই সংযোজিত হৈ থকা সময়ত ডিবাগ ম’ড"</string>
+    <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_summary" msgid="3729901496856458634">"কিউআৰ ক’ড স্কেনাৰ ব্যৱহাৰ কৰি নতুন ডিভাইচসমূহ পেয়াৰ কৰক"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"ডিভাইচটোৰ সবিশেষ"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"পাহৰক"</string>
+    <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_pairing_code_label" msgid="3639239786669722731">"ৱাই-ফাইৰ পেয়াৰ কৰা ক’ড"</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">"এটা কিউআৰ ক’ড স্কেন কৰি ৱাই-ফাইৰে ডিভাইচ পেয়াৰ কৰক"</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">"আইপি ঠিকনা &amp; প’ৰ্ট"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"কিউআৰ ক’ড স্কেন কৰক"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"এটা কিউআৰ ক’ড স্কেন কৰি ৱাই-ফাইৰে ডিভাইচ পেয়াৰ কৰক"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ডিবাগ, dev"</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>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"যদিহে উপলব্ধ হয় তেন্তে টেডাৰিং হাৰ্ডৱেৰ ত্বৰণ ব্যৱহাৰ কৰক"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"ইউএছবি ডিবাগিঙৰ অনুমতি দিয়েনে?"</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="adb_keys_warning_message" msgid="2968555274488101220">"আপুনি আগতে ইউএছবি ডিবাগিঙৰ বাবে প্ৰৱেশৰ অনুমতি দিয়া সকলো কম্পিউটাৰৰ পৰা সেই অনুমতি প্ৰত্যাহাৰ কৰেনে?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"বিকাশৰ কামৰ বাবে থকা ছেটিংবিলাকক অনুমতি দিবনে?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"এই ছেটিংসমূহ বিকাশৰ কামত ব্যৱহাৰ কৰিবলৈ তৈয়াৰ কৰা হৈছে। সেইবিলাকে আপোনাৰ ডিভাইচ আৰু তাত থকা এপ্লিকেশ্বনসমূহক অকামিলা কৰি পেলাব পাৰে আৰু সেইবিলাকৰ কাৰণে এপ্লিকেশ্বনসমূহে অদ্ভুত আচৰণ কৰিব পাৰে।"</string>
@@ -384,7 +412,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="9137381746633858694">"ৰং শুধৰণী কৰা কার্যই বর্ণান্ধলোকসকলক ৰংবোৰ অধিক সঠিককৈ দেখাত সহায় কৰে"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"ৰং শুধৰণি কৰা কার্যই বর্ণান্ধ লোকসকলক ৰংবোৰ অধিক সঠিককৈ দেখাত সহায় কৰে"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g>তকৈও কম সময় বাকী আছে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>তকৈও বেছি সময় বাকী আছে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>তকৈও বেছি সময় বাকী আছে"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ফ\'নটো সোনকালেই বন্ধ হ\'ব পাৰে"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"টেবলেটটো সোনকালেই বন্ধ হ\'ব পাৰে"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"ডিভাইচটো সোনকালেই বন্ধ হ\'ব পাৰে"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ফ\'নটো সোনকালেই বন্ধ হ\'ব পাৰে (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"টেবলেটটো সোনকালেই বন্ধ হ\'ব পাৰে (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"ডিভাইচটো সোনকালেই বন্ধ হ\'ব পাৰে (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"ফ’নটো সোনকালে বন্ধ হৈ যাব পাৰে"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"টেবলেটটো সোনকালে বন্ধ হৈ যাব পাৰে"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"ডিভাইচটো সোনকালে বন্ধ হৈ যাব পাৰে"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"ফ’নটো সোনকালে বন্ধ হৈ যাব পাৰে (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"টেবলেটটো সোনকালে বন্ধ হৈ যাব পাৰে (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"চাৰ্জ হ’বলৈ <xliff:g id="TIME">%1$s</xliff:g> বাকী আছে"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"চ্চাৰ্জ হৈ আছে"</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_discharging" msgid="6962689305413556485">"চ্চাৰ্জ কৰা নাই"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"প্লাগ কৰি থোৱা হৈছে, এই মুহূৰ্তত চ্চাৰ্জ কৰিব নোৱাৰি"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"পূৰ্ণ"</string>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 7f3db37..9b082b6 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> ilə qoşulub"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s vasitəsilə əlçatandır"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Qeydiyyatdan keçmək üçün klikləyin"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"İnternet yoxdur"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Özəl DNS serverinə giriş mümkün deyil"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Məhdud bağlantı"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"İnternet yoxdur"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB debaq prosesi"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"USB qoşulu olan zaman debaq rejimi"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"USB debaq avtorizasiyasını ləğv edin"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Simsiz sazlama"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Wi‑Fi qoşulduqda sazlama rejimi"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Xəta"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Simsiz sazlama"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Əlçatan cihazları görmək və onlardan istifadə etmək üçün simsiz sazlamanı yandırın"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"QR kodu ilə cihazı cütləşdirin"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR kod Skanerindən istifadə etməklə yeni cihazları cütləşdirin"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Cütləşdirmə kodu ilə cihazı cütləşdirin"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Altı rəqəmli koddan istifadə etməklə yeni cihazları cütləşdirin"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Cütləşdirilmiş cihazlar"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Hazırda qoşulub"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Cihaz detalları"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Unudun"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Cihaz barmaq izi: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Bağlantı uğursuz oldu"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazının düzgün şəbəkəyə qoşulduğundan əmin olun"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Cihaz ilə cütləşdirin"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi‑Fi cütləşdirmə kodu"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Cütləşdirmə uğursuz oldu"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Cihazın eyni şəbəkəyə qoşulduğundan əmin olun."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"QR kodu skanlamaqla cihazı Wi‑Fi vasitəsilə cütləşdirin"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Cihaz cütləşdirilir…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Cihazı cütləşdirmək alınmadı. Ya QR kodu yanlış idi, ya da cihaz eyni şəbəkəyə qoşulmayıb."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP ünvanı və Port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR kodu skanlayın"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR Kodu skanlamaqla cihazı Wi‑Fi vasitəsilə cütləşdirin"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Baq raportu qısa yolu"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Baq raportunu götürmək üçün qidalanma menyusunda düyməni göstərin"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Oyaq qal"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Əlçatan oldarsa, birləşmə üçün avadanlıq akselerasiyasından istifadə edin"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"USB debaq funksiyasına icazə verilsin?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB sazlanması yalnız inkişaf məqsədlidir. Kompüteriniz və cihazınız arasında datanı kopyalamaq üçün ondan istifadə edin, bildiriş olmadan tətbiqləri cihazınıza quraşdırın və qeydiyyat datasını oxuyun."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Simsiz sazlamaya icazə verilsin?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Simsiz sazlama yalnız inkişaf məqsədlidir. Ondan kompüteriniz və cihazınız arasında datanı kopyalamaq, cihazınızda bildiriş olmadan tətbiqləri quraşdırmaq və qeydiyyat datasını oxumaq üçün istifadə edin."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Əvvəl icazə verdiyiniz kompüterlərdən USB debaq əməliyyatına giriş ləğv olunsun?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"İnkişaf ayarlarına icazə verilsin mi?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Bu parametrlər yalnız inkişafetdirici istifadə üçün nəzərdə tutulub. Onlar cihaz və tətbiqlərinizin sınması və ya pis işləməsinə səbəb ola bilər."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomaliya (qırmızı-yaşıl)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomaliya (göy-sarı)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Rəng düzəlişi"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Rəng düzəlişi rəng korluğu olanların daha yaxşı görməsinə kömək edir"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Rəng korreksiyası rəng korluğu olan insanlara rəngləri daha dəqiq görməkdə kömək edir"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"<xliff:g id="TITLE">%1$s</xliff:g> tərəfindən qəbul edilmir"</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">"Təxminən <xliff:g id="TIME_REMAINING">%1$s</xliff:g> qalıb"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Qalan vaxt <xliff:g id="THRESHOLD">%1$s</xliff:g> və daha azdır (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Qalan vaxt <xliff:g id="TIME_REMAINING">%1$s</xliff:g> və daha çoxdur (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Qalan vaxt <xliff:g id="TIME_REMAINING">%1$s</xliff:g> və daha çoxdur"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefon tezliklə sönə bilər"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Planşet tezliklə sönə bilər"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Cihaz tezliklə sönə bilər"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefon tezliklə sönə bilər(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Planşet tezliklə sönə bilər (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Cihaz tezliklə sönə bilər (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefon tezliklə sönə bilər"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Planşet tezliklə sönə bilər"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Cihaz tezliklə sönə bilər"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefon tezliklə sönə bilər (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Planşet tezliklə sönə bilər (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Cihaz tezliklə sönə bilər (<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="7415639699283965818">"Enerjinin dolmasına <xliff:g id="TIME">%1$s</xliff:g> qalıb"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - Enerjinin dolmasına <xliff:g id="TIME">%2$s</xliff:g> qalıb"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Naməlum"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Enerji doldurma"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"enerji yığır"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Sürətlə doldurulur"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Asta doldurulur"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Doldurulmur"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Cihaz hazırda batareya yığa bilmir"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Tam"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index b789cb0..cc63740 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Povezano preko: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Dostupna je preko pristupne tačke %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Dodirnite da biste se registrovali"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nema interneta"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Pristup privatnom DNS serveru nije uspeo"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Ograničena veza"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Nema interneta"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Otklanjanje USB grešaka"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Režim otklanjanja grešaka kada je USB povezan"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Opozivanje odobrenja za uklanjanje USB grešaka"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Bežično otklanjanje grešaka"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Režim za otklanjanje grešaka kada je Wi‑Fi povezan"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Greška"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Bežično otklanjanje grešaka"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Da biste videli i koristili dostupne uređaje, uključite bežično otklanjanje grešaka"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Uparite uređaj pomoću QR koda"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Uparite nove uređaje pomoću čitača QR koda"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Uparite uređaj pomoću koda za uparivanje"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Uparite nove uređaje pomoću šestocifrenog koda"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Upareni uređaji"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Trenutno je povezano"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Detalji o uređaju"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Zaboravi"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Otisak prsta na uređaju: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Povezivanje nije uspelo"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Uverite se da je <xliff:g id="DEVICE_NAME">%1$s</xliff:g> povezan sa odgovarajućom mrežom"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Uparite sa uređajem"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Kôd za uparivanje preko Wi‑Fi-ja"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Uparivanje nije uspelo"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Uverite se da je uređaj povezan na istu mrežu."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Uparite uređaj pomoću Wi‑Fi mreže ili tako što ćete skenirati QR kôd"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Uparuje se uređaj…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Uparivanje uređaja nije uspelo. QR kôd je pogrešan ili uređaj nije povezan sa istom mrežom."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adresa i port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skeniraj QR kôd"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Uparite uređaj pomoću Wi‑Fi mreže ili tako što ćete skenirati QR kôd"</string>
+    <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">"Prikaži dugme u meniju napajanja za pravljenje izveštaja o greškama"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Ne zaključavaj"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Koristi hardversko ubrzanje privezivanja ako je dostupno"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Dozvoli otklanjanje USB grešaka?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Otklanjanje USB grešaka namenjeno je samo za svrhe programiranja. Koristite ga za kopiranje podataka sa računara na uređaj i obrnuto, instaliranje aplikacija na uređaju bez obaveštenja i čitanje podataka iz evidencije."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Želite da dozvolite bežično otklanjanje grešaka?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Bežično otklanjanje grešaka namenjeno je samo programiranju. Koristite ga za kopiranje podataka sa računara na uređaj i obrnuto, instaliranje aplikacija na uređaju bez obaveštenja i čitanje podataka iz evidencije."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Želite li da opozovete pristup otklanjanju USB grešaka sa svih računara koje ste prethodno odobrili?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Želite li da omogućite programerska podešavanja?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Ova podešavanja su namenjena samo za programiranje. Mogu da izazovu prestanak funkcionisanja ili neočekivano ponašanje uređaja i aplikacija na njemu."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalija (crveno-zeleno)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalija (plavo-žuto)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Korekcija boja"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Korekcija boja pomaže ljudima koji su daltonisti da preciznije vide boje"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Korekcija boja pomaže ljudima koji su daltonisti da preciznije vide boje"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Zamenjuje ga <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">"Preostalo je oko <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefon će se uskoro isključiti"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet će se uskoro isključiti"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Uređaj će se uskoro isključiti"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefon će se uskoro isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet će se uskoro isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Uređaj će se uskoro isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefon će se uskoro isključiti"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet će se uskoro isključiti"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Uređaj će se uskoro isključiti"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefon će se uskoro isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet će se uskoro isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Uređaj će se uskoro isključiti (<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="7415639699283965818">"Napuniće se za <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – napuniće se za <xliff:g id="TIME">%2$s</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Nepoznato"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Puni se"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"puni se"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Brzo se puni"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Sporo se puni"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ne puni se"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Priključeno je, ali punjenje trenutno nije moguće"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Puna"</string>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index ce191eb..f08726e 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Падключана праз праграму \"<xliff:g id="NAME">%1$s</xliff:g>\""</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Даступна праз %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Націсніце, каб зарэгістравацца"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Не падключана да інтэрнэту"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Не ўдалося атрымаць доступ да прыватнага DNS-сервера"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Абмежаваныя магчымасці падключэння"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Не падключана да інтэрнэту"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"Спалучыць прыладу з дапамогай QR-кода"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Спалучаць новыя прылады з дапамогай сканера QR-кода"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Падрабязныя звесткі пра прыладу"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Ігнараваць"</string>
+    <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_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 шляхам сканіравання QR-кода"</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_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="8578868049289910131">"Спалучыць прыладу праз Wi‑Fi шляхам сканіравання QR-кода"</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="keep_screen_on" msgid="1187161672348797558">"Прадухіляць ад пераходу ў рэжым сну"</string>
@@ -272,6 +298,8 @@
     <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 прызначана толькі для мэтаў распрацоўкі. Яна можа выкарыстоўвацца, каб капіяваць дадзеныя паміж кампутарам і прыладай, усталёўваць прыкладанні на прыладзе без папярэдняга апавяшчэння і чытаць дадзеныя дзённiка."</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 з усіх камп\'ютараў, на якiх вы уваходзiлi ў сiстэму?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Дазволiць налады распрацоўшчыка?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Гэтыя налады прызначаны толькi для распрацоўшыкаў. Яны могуць выклікаць збоi прылад i ўсталяваных на iх прыкладанняў, а таксама перашкаджаць iх працы."</string>
@@ -384,7 +412,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="9137381746633858694">"Карэкцыя колеру дазваляе людзям з парушэннямі колеравага зроку лепш распазнаваць выявы на экране"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Карэкцыя колеру дазваляе людзям з парушэннямі колеравага зроку лепш распазнаваць выявы на экране"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Узровень зараду батарэі: <xliff:g id="LEVEL">%2$s</xliff:g> (хопіць менш чым на <xliff:g id="THRESHOLD">%1$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Узровень зараду батарэі: <xliff:g id="LEVEL">%2$s</xliff:g> (хопіць больш чым на <xliff:g id="TIME_REMAINING">%1$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Хопіць больш чым на <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Тэлефон у хуткім часе спыніць працу"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Планшэт у хуткім часе спыніць працу"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Прылада ў хуткім часе спыніць працу"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Узровень зараду батарэі: <xliff:g id="LEVEL">%1$s</xliff:g>. Тэлефон хутка спыніць працу."</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Узровень зараду батарэі: <xliff:g id="LEVEL">%1$s</xliff:g>. Планшэт хутка спыніць працу."</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Узровень зараду батарэі: <xliff:g id="LEVEL">%1$s</xliff:g>. Прылада хутка спыніць працу."</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Тэлефон у хуткім часе выключыцца"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Планшэт у хуткім часе выключыцца"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Прылада ў хуткім часе выключыцца"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Тэлефон у хуткім часе выключыцца (узровень зараду: <xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Планшэт у хуткім часе выключыцца (узровень зараду: <xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"Засталося <xliff:g id="TIME">%1$s</xliff:g> да поўнай зарадкі"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"ідзе зарадка"</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_discharging" msgid="6962689305413556485">"Не зараджаецца"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Падключана да сеткі сілкавання, зарадзіць зараз немагчыма"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Акумулятар зараджаны"</string>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index 3e6f77d..78ab01a 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Установена е връзка през <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Мрежата е достъпна през „%1$s“"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Докоснете, за да се регистрирате"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Няма интернет"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Не може да се осъществи достъп до частния DNS сървър"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Ограничена връзка"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Няма връзка с интернет"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"Сдвояване на устройството чрез QR код"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Сдвояване на новите устройства чрез скенер за QR кодове"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Подробности за устройството"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Забравяне"</string>
+    <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_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 чрез сканиране на QR код"</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_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="8578868049289910131">"Сдвояване на устройството през Wi‑Fi чрез сканиране на QR код"</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="keep_screen_on" msgid="1187161672348797558">"Да остане активен"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"Да се разрешат ли настройките за програмиране?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Тези настройки са предназначени само за програмиране. Те могат да доведат до прекъсване на работата или неправилно функциониране на устройството ви и приложенията в него."</string>
@@ -384,7 +412,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="9137381746633858694">"Коригирането на цветовете помага на хората с цветна слепота да виждат по-точни цветове"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Коригирането на цветовете помага на хората с цветна слепота да виждат по-точни цветове"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Остава/т по-малко от <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Остава/т повече от <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Остава/т повече от <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Възможно е телефонът да се изключи скоро"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Възможно е таблетът да се изключи скоро"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Възможно е устройството да се изключи скоро"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Възможно е телефонът да се изключи скоро (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Възможно е таблетът да се изключи скоро (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Възможно е устройството да се изключи скоро (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Възможно е телефонът да се изключи скоро"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Възможно е таблетът да се изключи скоро"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Възможно е устройството да се изключи скоро"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Възможно е телефонът да се изключи скоро (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Възможно е таблетът да се изключи скоро (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"Оставащо време до пълно зареждане: <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"зарежда се"</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_discharging" msgid="6962689305413556485">"Не се зарежда"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Включена в захранването, в момента не се зарежда"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Пълна"</string>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 7f6938a..15ebfb8 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g>-এর মাধ্যমে কানেক্ট করা আছে"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s এর মাধ্যমে উপলব্ধ"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"সাইন-আপ করতে ট্যাপ করুন"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"ইন্টারনেট কানেকশন নেই"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"ব্যক্তিগত ডিএনএস সার্ভার অ্যাক্সেস করা যাবে না"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"সীমিত কানেকশন"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"ইন্টারনেট কানেকশন নেই"</string>
@@ -207,6 +206,33 @@
     <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="enable_adb_wireless" msgid="6973226350963971018">"ওয়্যারলেস ডিবাগিং"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"ওয়াই-ফাই কানেক্ট থাকাকালীন ডিবাগ মোড"</string>
+    <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">"QR কোড ব্যবহার করে ডিভাইস যোগ করুন"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR কোড স্ক্যানার ব্যবহার করে নতুন ডিভাইস যোগ করুন"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"ডিভাইসের বিবরণ"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"ভুলে যান"</string>
+    <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_pairing_code_label" msgid="3639239786669722731">"ওয়াই-ফাই যোগ করার কোড"</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 কোড স্ক্যান করে ওয়াই-ফাই ব্যবহার করে ডিভাইস যোগ করুন"</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_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="8578868049289910131">"QR কোড স্ক্যান করে ওয়াই-ফাই ব্যবহার করে ডিভাইস যোগ করুন"</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="keep_screen_on" msgid="1187161672348797558">"জাগিয়ে রাখুন"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"উন্নতি সেটিংসের অনুমতি দেবেন?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"এইসব সেটিংস কেবলমাত্র উন্নত করার উদ্দেশ্য। সেগুলি কারণে আপনার ডিভাইস ভেঙ্গে এবং অ্যাপ্লিকেশানগুলি ভালো ভাবে কাজ করা নাও কারতে পারে।"</string>
@@ -384,7 +412,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="9137381746633858694">"রঙ অ্যাডজাস্ট করার সেটিংস, বর্ণান্ধতা আছে এমন ব্যক্তিদের আরও সঠিকভাবে রঙ চিনতে সাহায্য করে"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"রঙ অ্যাডজাস্ট করার সেটিংস, বর্ণান্ধতা আছে এমন ব্যক্তিদের আরও সঠিকভাবে রঙ দেখতে সাহায্য করে"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"আর <xliff:g id="THRESHOLD">%1$s</xliff:g>-এর কম চার্জ বাকি আছে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"আরও <xliff:g id="TIME_REMAINING">%1$s</xliff:g>-এর বেশি চলবে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"আরও <xliff:g id="TIME_REMAINING">%1$s</xliff:g>-এর বেশি চলবে"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ফোনটি শীঘ্রই বন্ধ হয়ে যেতে পারে"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ট্যাবলেটটি শীঘ্রই বন্ধ হয়ে যেতে পারে"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"ডিভাইসটি শীঘ্রই বন্ধ হয়ে যেতে পারে"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ফোনটি শীঘ্রই বন্ধ হয়ে যেতে পারে (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ট্যাবলেটটি শীঘ্রই বন্ধ হয়ে যেতে পারে (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"ডিভাইসটি শীঘ্রই বন্ধ হয়ে যেতে পারে (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"ফোন শীঘ্রই বন্ধ হয়ে যেতে পারে"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ট্যাবলেটটি শীঘ্রই বন্ধ হয়ে যেতে পারে"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"ডিভাইসটি শীঘ্রই বন্ধ হয়ে যেতে পারে"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"ফোনটি শীঘ্রই বন্ধ হয়ে যেতে পারে (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ট্যাবলেটটি শীঘ্রই বন্ধ হয়ে যেতে পারে (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"সম্পূর্ণ চার্জ হতে <xliff:g id="TIME">%1$s</xliff:g> বাকি আছে"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"চার্জ হচ্ছে"</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_discharging" msgid="6962689305413556485">"চার্জ হচ্ছে না"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"প্লাগ-ইন করা হয়েছে কিন্তু এখনই চার্জ করা যাবে না"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"পূর্ণ"</string>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index 0563abd..cb55c5d 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Povezano preko <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Dostupan preko %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Dodirnite za prijavu"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nema internetske veze"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Nije moguće pristupiti privatnom DNS serveru"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Ograničena veza"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Nema internetske veze"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Otklanjanje grešaka putem uređaja spojenog na USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Način rada za uklanjanje grešaka kada je povezan USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Ukini odobrenja otklanjanja grešaka putem uređaja spojenog na USB"</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 otklanjanja grešaka kada je WiFi mreža povezana"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Greška"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Bežično otklanjanje grešaka"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Da vidite i koristite dostupne uređaje, uključite otklanjanje grešaka putem bežične veze"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Uparite uređaj pomoću QR koda"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Uparite nove uređaje pomoću skenera QR koda"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Uparite uređaj pomoću koda za uparivanje"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Uparite nove uređaje pomoću šestocifrenog koda"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Upareni uređaji"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Trenutno povezano"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Detalji o uređaju"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Zaboravi"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Otisak prsta uređaja: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Povezivanje nije uspjelo"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Provjerite je li uređaj <xliff:g id="DEVICE_NAME">%1$s</xliff:g> povezan na odgovarajuću mrežu"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Uparite s uređajem"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Kôd za uparivanje putem WiFi-ja"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Uparivanje nije uspjelo"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Provjerite je li uređaj povezan na istu mrežu."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Uparite uređaj putem WiFi-ja skeniranjem QR koda"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Uparivanje uređaja…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Uparivanje uređaja nije uspjelo. QR kȏd nije tačan ili uređaj nije povezan na istu mrežu."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adresa i priključak"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skenirajte QR kôd"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Uparite uređaj putem WiFi-ja skeniranjem QR koda"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, otklanjanje grešaka, programer"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Prečica za izvještaj o greškama"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Prikaz dugmeta za prijavu grešaka u meniju napajanja"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Ne zaključavaj ekran"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Korištenje hardverskog ubrzavanja za povezivanje putem mobitela ako je dostupno"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Omogućiti otklanjanje grešaka putem uređaja spojenog na USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Otklanjanje grešaka putem uređaja spojenog na USB je namijenjeno samo u svrhe razvoja aplikacija. Koristite ga za kopiranje podataka između računara i uređaja, instaliranje aplikacija na uređaj bez obavještenja te čitanje podataka iz zapisnika."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Omogućiti bežično otklanjanje grešaka?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Bežično otklanjanje grešaka je namijenjeno samo u svrhe razvoja aplikacija. Koristite ga za kopiranje podataka između računara i uređaja, instaliranje aplikacija na uređaj bez obavještenja te čitanje podataka iz zapisnika."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Opozvati pristup otklanjanju grešaka putem uređaja spojenog na USB za sve računare koje ste prethodno ovlastili?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Dopustiti postavke za razvoj?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Ove postavke su namijenjene samo za svrhe razvoja. Mogu izazvati pogrešno ponašanje uređaja i aplikacija na njemu."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalija (crveno-zeleno)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalija (plavo-žuto)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Ispravka boje"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Ispravka boje pomaže daltonistima da preciznije vide boje"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Ispravka boje pomaže daltonistima da preciznije vide boje"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Zamjenjuje <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">"Preostalo je još oko <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Preostalo je više od: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefon će se uskoro isključiti"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet će se uskoro isključiti"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Uređaj će se uskoro isključiti"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefon će se uskoro isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet će se uskoro isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Uređaj će se uskoro isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefon će se uskoro isključiti"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet će se uskoro isključiti"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Uređaj će se uskoro isključiti"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefon će se uskoro isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet će se uskoro isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Uređaj će se uskoro isključiti (<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="7415639699283965818">"Napunit će se za <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – napunit će se za <xliff:g id="TIME">%2$s</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Nepoznato"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Punjenje"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"punjenje"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Brzo punjenje"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Sporo punjenje"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ne puni se"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Priključen, trenutno se ne može puniti"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Puna"</string>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 71b2c5d..7ac03aa 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Connectat mitjançant <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Disponible mitjançant %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Toca per registrar-te"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Sense connexió a Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"No es pot accedir al servidor DNS privat"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Connexió limitada"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Sense connexió a Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Depuració per USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Mode de depuració quan l\'USB està connectat"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revoca autoritzacions de depuració per USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Depuració sense fil"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Mode de depuració quan la Wi‑Fi està connectada"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Error"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Depuració sense fil"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Per veure i utilitzar els dispositius disponibles, activa la depuració sense fil"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Vincula el dispositiu amb un codi QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Vincula dispositius nous utilitzant l\'escàner de codis QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Vincula el dispositiu amb un codi de vinculació"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Vincula dispositius nous utilitzant un codi de sis dígits"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Dispositius vinculats"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Connectat actualment"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Dades del dispositiu"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Oblida"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Empremta digital del dispositiu: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"No s\'ha pogut connectar"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Assegura\'t que <xliff:g id="DEVICE_NAME">%1$s</xliff:g> estigui connectat a la xarxa correcta"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Vincular amb el dispositiu"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Codi de vinculació Wi‑Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"No s\'ha pogut vincular"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Assegura\'t que el dispositiu estigui connectat a la mateixa xarxa."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Vincula el dispositiu per Wi‑Fi escanejant un codi QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"S\'està vinculant el dispositiu…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"No s\'ha pogut vincular el dispositiu. O bé el codi QR és incorrecte, o bé el dispositiu no està connectat a la mateixa xarxa."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adreça IP i port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Escaneja un codi QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Vincula el dispositiu per Wi‑Fi escanejant un codi QR"</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_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>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Fes servir l\'acceleració per maquinari per a compartició de xarxa, si està disponible"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Voleu permetre la depuració per USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"La depuració per USB només està indicada per a activitats de desenvolupament. Fes-la servir intercanviar dades entre l\'ordinador i el dispositiu, per instal·lar aplicacions al dispositiu sense rebre notificacions i per llegir dades de registre."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Vols permetre la depuració sense fil?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"La depuració sense fil només està indicada per a activitats de desenvolupament. Fes-la servir per intercanviar dades entre l\'ordinador i el dispositiu, per instal·lar aplicacions al dispositiu sense rebre notificacions i per llegir dades de registre."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Vols revocar l\'accés a la depuració per USB dels ordinadors que has autoritzat anteriorment?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Vols permetre la conf. de desenvolupament?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Aquesta configuració només està prevista per a usos de desenvolupament. Pot fer que el dispositiu i que les aplicacions s\'interrompin o tinguin un comportament inadequat."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalia (vermell-verd)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalia (blau-groc)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Correcció del color"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"La correcció del color ajuda les persones daltòniques a veure colors més precisos"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"La correcció del color ajuda les persones daltòniques a veure colors més precisos"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"S\'ha substituït per <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">"Temps restant aproximat: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Temps restant inferior a <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Temps restant superior a <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Temps restant superior a <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"És possible que el telèfon s\'apagui aviat"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"És possible que la tauleta s\'apagui aviat"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"És possible que el dispositiu s\'apagui aviat"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"És possible que el telèfon s\'apagui aviat (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"És possible que la tauleta s\'apagui aviat (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"És possible que el dispositiu s\'apagui aviat (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"És possible que el telèfon s\'apagui aviat"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"És possible que la tauleta s\'apagui aviat"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"És possible que el dispositiu s\'apagui aviat"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"És possible que el telèfon s\'apagui aviat (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"És possible que la tauleta s\'apagui aviat (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"És possible que el dispositiu s\'apagui aviat (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> per completar la càrrega"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g>: <xliff:g id="TIME">%2$s</xliff:g> per completar la càrrega"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Desconegut"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"S\'està carregant"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"s\'està carregant"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Carregant ràpidament"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Carregant lentament"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"No s\'està carregant"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"El dispositiu està endollat però en aquests moments no es pot carregar"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Completa"</string>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index a381772..932051d 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Připojeno přes <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Dostupné prostřednictvím %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Klepnutím se zaregistrujete"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nejste připojeni k internetu"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Nelze získat přístup k soukromému serveru DNS"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Omezené připojení"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Nejste připojeni k internetu"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Ladění přes USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Povolit režim ladění s připojeným zařízením USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Zrušit autorizace k ladění přes USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Bezdrátové ladění"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Režim ladění při připojení k Wi-Fi"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Chyba"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Bezdrátové ladění"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Chcete-li zobrazit a použít dostupná zařízení, zapněte bezdrátové ladění"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Párovat zařízení pomocí QR kódu"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Párovat nová zařízení pomocí skenování QR kódu"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Párovat zařízení pomocí párovacího kódu"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Párovat nová zařízení pomocí šestimístného kódu"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Spárovaná zařízení"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Momentálně připojeno"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Podrobnosti o zařízení"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Zapomenout"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Otisk zařízení: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Připojení se nezdařilo"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Zkontrolujte, zda je zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g> připojeno ke správné síti"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Spárování se zařízením"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Párovací kód Wi‑Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Spárování se nezdařilo"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Zkontrolujte, zda je zařízení připojeno ke stejné síti."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Párovat zařízení přes Wi-Fi naskenováním QR kódu"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Párování zařízení…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Spárování zařízení se nezdařilo. Buď byl QR kód chybný, nebo zařízení není připojeno ke stejné síti."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adresa a port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Naskenování QR kódu"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Párovat zařízení přes Wi-Fi naskenováním QR kódu"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ladění, vývoj"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Zástupce hlášení chyb"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Zobrazit v hlavní nabídce tlačítko k vygenerování chybového hlášení"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Nevypínat obrazovku"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Pokud je k dispozici hardwarová akceleraci tetheringu, použít ji"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Povolit ladění přes USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Ladění prostřednictvím rozhraní USB je určeno pouze pro účely vývoje. Použijte je ke kopírování dat mezi počítačem a zařízením, instalaci aplikací do zařízení bez upozornění a čtení dat protokolů."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Povolit bezdrátové ladění?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Bezdrátové ladění je určeno pouze pro účely vývoje. Použijte jej ke kopírování dat mezi počítačem a zařízením, instalaci aplikací do zařízení bez upozornění a čtení dat protokolů."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Zrušit přístup k ladění přes USB ze všech počítačů, které jste v minulosti autorizovali?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Povolit nastavení pro vývojáře?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Tato nastavení jsou určena pouze pro vývojáře. Mohou způsobit rozbití nebo nesprávné fungování zařízení a nainstalovaných aplikací."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomálie (červená a zelená)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomálie (modrá a žlutá)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Korekce barev"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Korekce barev pomáhá barvoslepým lidem vidět přesnější barvy"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Korekce barev pomáhá barvoslepým lidem vidět přesnější barvy"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Přepsáno nastavením <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">"Zbývá asi <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Zbývá méně než <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Zbývá více než <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Zbývá více než <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefon se brzy vypne"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet se brzy vypne"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Zařízení se brzy vypne"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefon se brzy vypne (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet se brzy vypne (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Zařízení se brzy vypne (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefon se brzy vypne"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet se brzy vypne"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Zařízení se brzy vypne"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefon se brzy vypne (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet se brzy vypne (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Zařízení se brzy vypne (<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="7415639699283965818">"Do nabití zbývá: <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> do nabití"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Neznámé"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Nabíjí se"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"nabíjení"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Rychlé nabíjení"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Pomalé nabíjení"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nenabíjí se"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Zapojeno, ale nelze nabíjet"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Nabitá"</string>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index f6e8576..20fbf94 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Forbundet via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Tilgængelig via %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Tryk for at registrere dig"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Intet internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Der er ikke adgang til den private DNS-server"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Begrænset forbindelse"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Intet internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB-fejlretning"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Fejlretningstilstand, når USB er tilsluttet"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Tilbagekald tilladelser for USB-fejlretning"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Trådløs fejlfinding"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Fejlfindingstilstand, når der er Wi-Fi-forbindelse"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Fejl"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Trådløs fejlfinding"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Du kan se og bruge tilgængelige enheder ved at aktivere trådløs fejlretning"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Dan par med en enhed ved hjælp af en QR-kode"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Dan par med nye enheder ved hjælp af QR-kodescanneren"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Dan par med en enhed ved hjælp af en parringskode"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Dan par med nye enheder ved hjælp af den sekscifrede kode"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Parrede enheder"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Forbundet lige nu"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Enhedsoplysninger"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Glem"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Fingeraftryk for enhed: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Forbindelsen mislykkedes"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Sørg for, at <xliff:g id="DEVICE_NAME">%1$s</xliff:g> har forbindelse til det rigtige netværk."</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Dan par med enhed"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Parringskode til Wi-Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Parringen mislykkedes"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Sørg for, at enheden er forbundet til det samme netværk."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Dan par med en enhed via Wi-Fi ved at scanne en QR-kode"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Parrer enhed…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Enheden blev ikke parret. Det skyldes enten, at QR-koden var forkert, eller at enheden ikke er forbundet til det samme netværk."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-adresse og port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scan QR-kode"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Dan par med en enhed via Wi-Fi ved at scanne en QR-kode"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, fejlfinding, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Genvej til fejlrapportering"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Vis en knap til oprettelse af fejlrapporter i afbrydermenuen"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Lås ikke"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Brug hardwareacceleration ved netdeling, hvis det er muligt"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Vil du tillade USB-fejlretning?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB-fejlretning er kun beregnet til udvikling og kan bruges til at kopiere data mellem din computer og enheden, installere apps på enheden uden notifikation og læse logdata."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Vil du tillade trådløs fejlfinding?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Trådløs fejlretning er kun beregnet til udvikling og kan bruges til at kopiere data mellem din computer og enheden, installere apps på enheden uden notifikation og læse logdata."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Vil du ophæve adgangen til USB-fejlretning for alle computere, du tidligere har godkendt?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Vil du tillade udviklingsindstillinger?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Disse indstillinger er kun beregnet til brug i forbindelse med udvikling. De kan forårsage, at din enhed og dens apps går ned eller ikke fungerer korrekt."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanopi (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">"Korriger farver"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Farvekorrigering gør det nemmere for farveblinde at se farver mere nøjagtigt"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Farvekorrigering gør det nemmere for farveblinde at se farver mere nøjagtigt"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Tilsidesat af <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">"Ca. <xliff:g id="TIME_REMAINING">%1$s</xliff:g> tilbage"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Der er mindre end <xliff:g id="THRESHOLD">%1$s</xliff:g> tilbage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Der er mere end <xliff:g id="TIME_REMAINING">%1$s</xliff:g> tilbage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Der er mere end <xliff:g id="TIME_REMAINING">%1$s</xliff:g> tilbage"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefonen lukker muligvis snart ned"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Denne tablet lukker muligvis snart ned"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Enheden lukker muligvis snart ned"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefonen lukker muligvis snart ned (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Denne tablet lukker muligvis snart ned (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Enheden lukker muligvis snart ned (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefonen lukker muligvis snart ned"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Denne tablet lukker muligvis snart ned"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Enheden lukker muligvis snart ned"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefonen lukker muligvis snart ned (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tabletten lukker muligvis snart ned (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Enheden lukker muligvis snart ned (<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="7415639699283965818">"Opladet om <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – opladet om <xliff:g id="TIME">%2$s</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Ukendt"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Oplader"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"oplader"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Oplader hurtigt"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Oplader langsomt"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Oplader ikke"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Enheden er tilsluttet en strømkilde. Det er ikke muligt at oplade på nuværende tidspunkt."</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Fuldt"</string>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 99a0910..3d46649 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Verbunden über <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Verfügbar über %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Zum Anmelden tippen"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Kein Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Auf den privaten DNS-Server kann nicht zugegriffen werden"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Eingeschränkte Verbindung"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Kein Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB-Debugging"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Debugmodus bei Anschluss über USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"USB-Debugging-Autorisierungen aufheben"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Kabelloses Debugging"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Debugging-Modus, wenn eine WLAN-Verbindung besteht"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Fehler"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Kabelloses Debugging"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Aktiviere das kabellose Debugging, um verfügbare Geräte zu sehen und zu verwenden"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Gerät über einen QR-Code koppeln"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Neue Geräte über QR-Codescanner koppeln"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Gerät über einen Kopplungscode koppeln"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Neue Geräte mit sechsstelligem Code koppeln"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Gekoppelte Geräte"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Derzeit verbunden"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Gerätedetails"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Entfernen"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Fingerabdruck des Geräts: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Verbindung fehlgeschlagen"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Prüfe, ob <xliff:g id="DEVICE_NAME">%1$s</xliff:g> mit dem richtigen Netzwerk verbunden ist"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Mit einem Gerät koppeln"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"WLAN-Kopplungscode"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Kopplung fehlgeschlagen"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Prüfe, ob das Gerät mit demselben Netzwerk verbunden ist."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Scanne einen QR-Code, um ein Gerät über WLAN zu koppeln"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Gerät wird gekoppelt…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Das Gerät konnte nicht gekoppelt werden. Der QR-Code war nicht korrekt oder das Gerät ist nicht mit demselben Netzwerk verbunden."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-Adresse &amp; Port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR-Code scannen"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Scanne einen QR-Code, um ein Gerät über WLAN zu koppeln"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"ADB, Debug, Dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Verknüpfung zu Fehlerbericht"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Im Menü \"Ein/Aus\" wird eine Option zum Erstellen eines Fehlerberichts angezeigt"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Aktiv lassen"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Falls verfügbar, Hardwarebeschleunigung für Tethering verwenden"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"USB-Debugging zulassen?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB-Debugging ist nur für Entwicklungszwecke vorgesehen. Damit kannst du Daten zwischen deinem Computer und deinem Gerät kopieren, Apps auf deinem Gerät ohne Benachrichtigung installieren und Protokolldaten lesen."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Kabelloses Debugging zulassen?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Das kabellose Debugging ist nur für Entwicklungszwecke vorgesehen. Damit kannst du Daten zwischen deinem Computer und deinem Gerät kopieren, Apps auf deinem Gerät ohne Benachrichtigung installieren und Protokolldaten lesen."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Zugriff auf USB-Debugging für alle zuvor autorisierten Computer aufheben?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Entwicklungseinstellungen zulassen?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Diese Einstellungen sind ausschließlich für Entwicklungszwecke gedacht. Sie können dein Gerät und die darauf installierten Apps beschädigen oder zu unerwünschtem Verhalten führen."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalie (Rot-Grün-Sehschwäche)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalie (Blau-Gelb-Sehschwäche)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Farbkorrektur"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Die Farbkorrektur hilft farbenblinden Menschen, Farben besser zu erkennen"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Die Farbkorrektur hilft farbenblinden Menschen, Farben besser zu erkennen"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Außer Kraft gesetzt von \"<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">"Noch etwa <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Weniger als <xliff:g id="THRESHOLD">%1$s</xliff:g> verbleibend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mehr als <xliff:g id="TIME_REMAINING">%1$s</xliff:g> verbleibend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Mehr als <xliff:g id="TIME_REMAINING">%1$s</xliff:g> verbleibend"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Smartphone wird eventuell bald ausgeschaltet"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet wird eventuell bald ausgeschaltet"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Gerät wird eventuell bald ausgeschaltet"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Smartphone wird eventuell bald ausgeschaltet (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet wird eventuell bald ausgeschaltet (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Gerät wird eventuell bald ausgeschaltet (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Smartphone wird eventuell bald ausgeschaltet"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet wird eventuell bald ausgeschaltet"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Gerät wird eventuell bald ausgeschaltet"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Smartphone wird eventuell bald ausgeschaltet (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet wird eventuell bald ausgeschaltet (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Gerät wird eventuell bald ausgeschaltet (<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="7415639699283965818">"Noch <xliff:g id="TIME">%1$s</xliff:g> bis zur Aufladung"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> bis zur Aufladung"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Unbekannt"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Wird aufgeladen"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"wird aufgeladen..."</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Schnelles Aufladen"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Langsames Aufladen"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Wird nicht geladen"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Angeschlossen, kann derzeit nicht geladen werden"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Voll"</string>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index d37ea44..6bd8736 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Συνδέθηκε μέσω <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Διαθέσιμο μέσω %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Πατήστε για εγγραφή"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Χωρίς σύνδεση στο διαδίκτυο"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Δεν είναι δυνατή η πρόσβαση στον ιδιωτικό διακομιστή DNS."</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Περιορισμένη σύνδεση"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Δεν υπάρχει σύνδεση στο διαδίκτυο"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"Σύζευξη συσκευής με κωδικό QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Σύζευξη νέων συσκευών με τη χρήση σαρωτή κωδικών QR"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Λεπτομέρειες συσκευής"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Διαγραφή"</string>
+    <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_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 με τη σάρωση ενός κωδικού QR"</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_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="8578868049289910131">"Σύζευξη συσκευής μέσω Wi‑Fi με τη σάρωση ενός κωδικού QR"</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="keep_screen_on" msgid="1187161672348797558">"Παραμονή σε λειτουργία"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"Να επιτρέπεται η χρήση των ρυθμίσεων ανάπτυξης;"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Αυτές οι ρυθμίσεις προορίζονται για χρήση κατά την ανάπτυξη. Μπορούν να προκαλέσουν προβλήματα στη λειτουργία της συσκευής και των εφαρμογών σας."</string>
@@ -384,7 +412,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="9137381746633858694">"Η διόρθωση χρωμάτων βοηθάει τους ανθρώπους με αχρωματοψία να βλέπουν τα χρώματα με μεγαλύτερη ακρίβεια"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Η διόρθωση χρωμάτων βοηθάει τα άτομα με αχρωματοψία να βλέπουν τα χρώματα με μεγαλύτερη ακρίβεια"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Απομένει/ουν λιγότερo/α από <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Απομένουν περισσότερα/ες από <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Απομένουν περισσότερα/ες από <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Το τηλέφωνο μπορεί να απενεργοποιηθεί σύντομα"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Το tablet μπορεί να απενεργοποιηθεί σύντομα"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Η συσκευή μπορεί να απενεργοποιηθεί σύντομα"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Το τηλέφωνο μπορεί να απενεργοποιηθεί σύντομα (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Το tablet μπορεί να απενεργοποιηθεί σύντομα (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Η συσκευή μπορεί να απενεργοποιηθεί σύντομα (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Το τηλέφωνο μπορεί να απενεργοποιηθεί σύντομα"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Το tablet μπορεί να απενεργοποιηθεί σύντομα"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Η συσκευή μπορεί να απενεργοποιηθεί σύντομα"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Το τηλέφωνο μπορεί να απενεργοποιηθεί σύντομα (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Το tablet μπορεί να απενεργοποιηθεί σύντομα (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"Απομένουν <xliff:g id="TIME">%1$s</xliff:g> για ολοκλήρωση της φόρτισης"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"φόρτιση"</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_discharging" msgid="6962689305413556485">"Δεν φορτίζει"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Συνδέθηκε, δεν είναι δυνατή η φόρτιση αυτήν τη στιγμή"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Πλήρης"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 429cd3e..810f81e 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Available via %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Tap to sign up"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"No Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Private DNS server cannot be accessed"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Limited connection"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"No Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB debugging"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Debug mode when USB is connected"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revoke USB debugging authorisations"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Wireless debugging"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Debug mode when Wi‑Fi is connected"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Error"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Wireless debugging"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"To see and use available devices, turn on wireless debugging"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Pair device with QR code"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Pair new devices using QR code scanner"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Pair device with pairing code"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Pair new devices using six-digit code"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Paired devices"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Currently connected"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Device details"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Forget"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Device fingerprint: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Connection unsuccessful"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Make sure that <xliff:g id="DEVICE_NAME">%1$s</xliff:g> is connected to the correct network"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Pair with device"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi‑Fi pairing code"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Pairing unsuccessful"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Make sure that the device is connected to the same network."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Pair device over Wi‑Fi by scanning a QR code"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Pairing device…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Failed to pair the device. Either the QR code was incorrect, or the device is not connected to the same network."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP address &amp; port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scan QR code"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Pair device over Wi‑Fi by scanning a QR code"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Bug report shortcut"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Show a button in the power menu for taking a bug report"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Stay awake"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Use tethering hardware acceleration if available"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Allow USB debugging?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification and read log data."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Allow wireless debugging?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Wireless debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Revoke access to USB debugging from all computers you\'ve previously authorised?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Allow development settings?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomaly (red-green)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomaly (blue-yellow)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Colour correction"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Colour correction helps people with colour blindness to see more accurate colours"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Colour correction helps people with colour blindness see more accurate colours"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Overridden by <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">"About <xliff:g id="TIME_REMAINING">%1$s</xliff:g> left"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Phone may shutdown soon"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet may shutdown soon"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Device may shutdown soon"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Phone may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Device may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Phone may shut down soon"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet may shut down soon"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Device may shut down soon"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Phone may shut down soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet may shut down soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Device may shut down soon (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> left until charged"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> until charged"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Unknown"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Charging"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"charging"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charging rapidly"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Charging slowly"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Not charging"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Plugged in, can\'t charge at the moment"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Full"</string>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index 429cd3e..810f81e 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Available via %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Tap to sign up"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"No Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Private DNS server cannot be accessed"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Limited connection"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"No Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB debugging"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Debug mode when USB is connected"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revoke USB debugging authorisations"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Wireless debugging"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Debug mode when Wi‑Fi is connected"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Error"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Wireless debugging"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"To see and use available devices, turn on wireless debugging"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Pair device with QR code"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Pair new devices using QR code scanner"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Pair device with pairing code"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Pair new devices using six-digit code"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Paired devices"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Currently connected"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Device details"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Forget"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Device fingerprint: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Connection unsuccessful"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Make sure that <xliff:g id="DEVICE_NAME">%1$s</xliff:g> is connected to the correct network"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Pair with device"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi‑Fi pairing code"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Pairing unsuccessful"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Make sure that the device is connected to the same network."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Pair device over Wi‑Fi by scanning a QR code"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Pairing device…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Failed to pair the device. Either the QR code was incorrect, or the device is not connected to the same network."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP address &amp; port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scan QR code"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Pair device over Wi‑Fi by scanning a QR code"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Bug report shortcut"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Show a button in the power menu for taking a bug report"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Stay awake"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Use tethering hardware acceleration if available"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Allow USB debugging?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification and read log data."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Allow wireless debugging?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Wireless debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Revoke access to USB debugging from all computers you\'ve previously authorised?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Allow development settings?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomaly (red-green)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomaly (blue-yellow)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Colour correction"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Colour correction helps people with colour blindness to see more accurate colours"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Colour correction helps people with colour blindness see more accurate colours"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Overridden by <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">"About <xliff:g id="TIME_REMAINING">%1$s</xliff:g> left"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Phone may shutdown soon"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet may shutdown soon"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Device may shutdown soon"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Phone may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Device may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Phone may shut down soon"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet may shut down soon"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Device may shut down soon"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Phone may shut down soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet may shut down soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Device may shut down soon (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> left until charged"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> until charged"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Unknown"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Charging"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"charging"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charging rapidly"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Charging slowly"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Not charging"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Plugged in, can\'t charge at the moment"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Full"</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 429cd3e..810f81e 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Available via %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Tap to sign up"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"No Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Private DNS server cannot be accessed"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Limited connection"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"No Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB debugging"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Debug mode when USB is connected"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revoke USB debugging authorisations"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Wireless debugging"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Debug mode when Wi‑Fi is connected"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Error"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Wireless debugging"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"To see and use available devices, turn on wireless debugging"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Pair device with QR code"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Pair new devices using QR code scanner"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Pair device with pairing code"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Pair new devices using six-digit code"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Paired devices"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Currently connected"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Device details"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Forget"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Device fingerprint: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Connection unsuccessful"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Make sure that <xliff:g id="DEVICE_NAME">%1$s</xliff:g> is connected to the correct network"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Pair with device"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi‑Fi pairing code"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Pairing unsuccessful"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Make sure that the device is connected to the same network."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Pair device over Wi‑Fi by scanning a QR code"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Pairing device…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Failed to pair the device. Either the QR code was incorrect, or the device is not connected to the same network."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP address &amp; port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scan QR code"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Pair device over Wi‑Fi by scanning a QR code"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Bug report shortcut"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Show a button in the power menu for taking a bug report"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Stay awake"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Use tethering hardware acceleration if available"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Allow USB debugging?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification and read log data."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Allow wireless debugging?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Wireless debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Revoke access to USB debugging from all computers you\'ve previously authorised?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Allow development settings?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomaly (red-green)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomaly (blue-yellow)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Colour correction"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Colour correction helps people with colour blindness to see more accurate colours"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Colour correction helps people with colour blindness see more accurate colours"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Overridden by <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">"About <xliff:g id="TIME_REMAINING">%1$s</xliff:g> left"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Phone may shutdown soon"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet may shutdown soon"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Device may shutdown soon"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Phone may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Device may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Phone may shut down soon"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet may shut down soon"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Device may shut down soon"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Phone may shut down soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet may shut down soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Device may shut down soon (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> left until charged"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> until charged"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Unknown"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Charging"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"charging"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charging rapidly"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Charging slowly"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Not charging"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Plugged in, can\'t charge at the moment"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Full"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 429cd3e..810f81e 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Available via %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Tap to sign up"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"No Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Private DNS server cannot be accessed"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Limited connection"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"No Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB debugging"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Debug mode when USB is connected"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revoke USB debugging authorisations"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Wireless debugging"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Debug mode when Wi‑Fi is connected"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Error"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Wireless debugging"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"To see and use available devices, turn on wireless debugging"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Pair device with QR code"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Pair new devices using QR code scanner"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Pair device with pairing code"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Pair new devices using six-digit code"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Paired devices"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Currently connected"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Device details"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Forget"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Device fingerprint: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Connection unsuccessful"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Make sure that <xliff:g id="DEVICE_NAME">%1$s</xliff:g> is connected to the correct network"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Pair with device"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi‑Fi pairing code"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Pairing unsuccessful"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Make sure that the device is connected to the same network."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Pair device over Wi‑Fi by scanning a QR code"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Pairing device…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Failed to pair the device. Either the QR code was incorrect, or the device is not connected to the same network."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP address &amp; port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scan QR code"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Pair device over Wi‑Fi by scanning a QR code"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Bug report shortcut"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Show a button in the power menu for taking a bug report"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Stay awake"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Use tethering hardware acceleration if available"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Allow USB debugging?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification and read log data."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Allow wireless debugging?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Wireless debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Revoke access to USB debugging from all computers you\'ve previously authorised?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Allow development settings?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomaly (red-green)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomaly (blue-yellow)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Colour correction"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Colour correction helps people with colour blindness to see more accurate colours"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Colour correction helps people with colour blindness see more accurate colours"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Overridden by <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">"About <xliff:g id="TIME_REMAINING">%1$s</xliff:g> left"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Phone may shutdown soon"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet may shutdown soon"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Device may shutdown soon"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Phone may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Device may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Phone may shut down soon"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet may shut down soon"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Device may shut down soon"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Phone may shut down soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet may shut down soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Device may shut down soon (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> left until charged"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> until charged"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Unknown"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Charging"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"charging"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charging rapidly"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Charging slowly"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Not charging"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Plugged in, can\'t charge at the moment"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Full"</string>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
index 1aa6cdb..d142c0a 100644
--- a/packages/SettingsLib/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎Connected via ‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‎Available via %1$s‎‏‎‎‏‎"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎Tap to sign up‎‏‎‎‏‎"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‎No internet‎‏‎‎‏‎"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎Private DNS server cannot be accessed‎‏‎‎‏‎"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‎Limited connection‎‏‎‎‏‎"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎No internet‎‏‎‎‏‎"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎USB debugging‎‏‎‎‏‎"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‎‎Debug mode when USB is connected‎‏‎‎‏‎"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎Revoke USB debugging authorizations‎‏‎‎‏‎"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‎‏‎‎Wireless debugging‎‏‎‎‏‎"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‎Debug mode when Wi‑Fi is connected‎‏‎‎‏‎"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎Error‎‏‎‎‏‎"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‏‎‏‎Wireless debugging‎‏‎‎‏‎"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎To see and use available devices, turn on wireless debugging‎‏‎‎‏‎"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‎‏‎‎Pair device with QR code‎‏‎‎‏‎"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‎‎Pair new devices using QR code Scanner‎‏‎‎‏‎"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎Pair device with pairing code‎‏‎‎‏‎"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎Pair new devices using six digit code‎‏‎‎‏‎"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‎Paired devices‎‏‎‎‏‎"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎Currently connected‎‏‎‎‏‎"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎Device details‎‏‎‎‏‎"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‎‏‎Forget‎‏‎‎‏‎"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‏‎‏‎Device fingerprint: ‎‏‎‎‏‏‎<xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎Connection unsuccessful‎‏‎‎‏‎"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎‎‏‎Make sure ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is connected to the correct network‎‏‎‎‏‎"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎Pair with device‎‏‎‎‏‎"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎Wi‑Fi pairing code‎‏‎‎‏‎"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‎Pairing unsuccessful‎‏‎‎‏‎"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‎‎‎Make sure the device is connected to the same network.‎‏‎‎‏‎"</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‏‏‏‎‏‎Pair device over Wi‑Fi by scanning a QR code‎‏‎‎‏‎"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‏‏‏‎Pairing device…‎‏‎‎‏‎"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎Failed to pair the device. Either the QR code was incorrect, or the device is not connected to the same network.‎‏‎‎‏‎"</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎IP address &amp; Port‎‏‎‎‏‎"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎Scan QR code‎‏‎‎‏‎"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‎Pair device over Wi‑Fi by scanning a QR Code‎‏‎‎‏‎"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎adb, debug, dev‎‏‎‎‏‎"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎Bug report shortcut‎‏‎‎‏‎"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‎Show a button in the power menu for taking a bug report‎‏‎‎‏‎"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‎‎Stay awake‎‏‎‎‏‎"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎‏‎‏‎‏‎Use tethering hardware acceleration if available‎‏‎‎‏‎"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‏‎‎‎‎‎‎Allow USB debugging?‎‏‎‎‏‎"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‏‎‎‏‎‏‎USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data.‎‏‎‎‏‎"</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎Allow wireless debugging?‎‏‎‎‏‎"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎Wireless debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data.‎‏‎‎‏‎"</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‎‎‏‎‎‎Revoke access to USB debugging from all computers you’ve previously authorized?‎‏‎‎‏‎"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎Allow development settings?‎‏‎‎‏‎"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave.‎‏‎‎‏‎"</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎Protanomaly (red-green)‎‏‎‎‏‎"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎Tritanomaly (blue-yellow)‎‏‎‎‏‎"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎Color correction‎‏‎‎‏‎"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‎‎Color correction helps people with color blindness to see more accurate colors‎‏‎‎‏‎"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎Color correction helps people with colorblindness see more accurate colors‎‏‎‎‏‎"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎Overridden by ‎‏‎‎‏‏‎<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">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎About ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left‎‏‎‎‏‎"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎Less than ‎‏‎‎‏‏‎<xliff:g id="THRESHOLD">%1$s</xliff:g>‎‏‎‎‏‏‏‎ remaining (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎‎More than ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ remaining (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎More than ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ remaining‎‏‎‎‏‎"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎Phone may shutdown soon‎‏‎‎‏‎"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎Tablet may shutdown soon‎‏‎‎‏‎"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎Device may shutdown soon‎‏‎‎‏‎"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎Phone may shutdown soon (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎Tablet may shutdown soon (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‎Device may shutdown soon (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎Phone may shut down soon‎‏‎‎‏‎"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎Tablet may shut down soon‎‏‎‎‏‎"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‎‎Device may shut down soon‎‏‎‎‏‎"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‏‏‎Phone may shut down soon (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎Tablet may shut down soon (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎Device may shut down soon (‎‏‎‎‏‏‎<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="7415639699283965818">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left until charged‎‏‎‎‏‎"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎<xliff:g id="TIME">%2$s</xliff:g>‎‏‎‎‏‏‏‎ until charged‎‏‎‎‏‎"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎Unknown‎‏‎‎‏‎"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎Charging‎‏‎‎‏‎"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎charging‎‏‎‎‏‎"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎Charging rapidly‎‏‎‎‏‎"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎Charging slowly‎‏‎‎‏‎"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‏‎Not charging‎‏‎‎‏‎"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎Plugged in, can\'t charge right now‎‏‎‎‏‎"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎Full‎‏‎‎‏‎"</string>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 7d28a32..8b99f72 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Conexión a través de <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Disponible a través de %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Presiona para registrarte"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Sin Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"No se puede acceder al servidor DNS privado"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Conexión limitada"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Sin Internet"</string>
@@ -67,7 +66,7 @@
     <string name="bluetooth_disconnected" msgid="7739366554710388701">"Desconectado"</string>
     <string name="bluetooth_disconnecting" msgid="7638892134401574338">"Desconectando…"</string>
     <string name="bluetooth_connecting" msgid="5871702668260192755">"Conectando…"</string>
-    <string name="bluetooth_connected" msgid="8065345572198502293">"Conectado a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
+    <string name="bluetooth_connected" msgid="8065345572198502293">"Conectado<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_pairing" msgid="4269046942588193600">"Vinculando..."</string>
     <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Conectado (sin teléfono) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Conectado (sin archivos multimedia) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
@@ -173,7 +172,7 @@
     <string name="tts_engine_network_required" msgid="8722087649733906851">"Este idioma necesita una conexión de red en funcionamiento para la salida de texto a voz."</string>
     <string name="tts_default_sample_string" msgid="6388016028292967973">"Ejemplo de síntesis de voz"</string>
     <string name="tts_status_title" msgid="8190784181389278640">"Estado del idioma predeterminado"</string>
-    <string name="tts_status_ok" msgid="8583076006537547379">"El idioma <xliff:g id="LOCALE">%1$s</xliff:g> es totalmente compatible."</string>
+    <string name="tts_status_ok" msgid="8583076006537547379">"El idioma <xliff:g id="LOCALE">%1$s</xliff:g> es totalmente compatible"</string>
     <string name="tts_status_requires_network" msgid="8327617638884678896">"El idioma <xliff:g id="LOCALE">%1$s</xliff:g> requiere una conexión de red."</string>
     <string name="tts_status_not_supported" msgid="2702997696245523743">"El idioma <xliff:g id="LOCALE">%1$s</xliff:g> no es compatible."</string>
     <string name="tts_status_checking" msgid="8026559918948285013">"Comprobando…"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Depuración por USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Modo de depuración cuando se conecta el USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revocar autorizaciones de depur. USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Depuración inalámbrica"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Modo de depuración cuando la conexión Wi‑Fi está activada"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Error"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Depuración inalámbrica"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Para ver y usar los dispositivos disponibles, activa la depuración inalámbrica"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Vincular dispositivo mediante código QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Vincular dispositivos nuevos mediante escáner de código QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Vincular dispositivo mediante código de sincroniz."</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Vincular dispositivos nuevos mediante código de seis dígitos"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Dispositivos vinculados"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Conectado actualmente"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Detalles del dispositivo"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Olvidar"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Huellas digitales del dispositivo: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Error de conexión"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Asegúrate de que <xliff:g id="DEVICE_NAME">%1$s</xliff:g> esté conectado a la red correcta."</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Vincular con dispositivo"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Código de sincroniz. de Wi‑Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Error de sincronización"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Asegúrate de que el dispositivo esté conectado a la misma red."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Escanea un código QR para vincular el dispositivo mediante Wi‑Fi"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Vinculando dispositivo…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Error al vincular el dispositivo. El código QR era incorrecto o el dispositivo no está conectado a la misma red."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Dirección IP y puerto"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Escanear código QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Escanea un código QR para vincular el dispositivo mediante Wi‑Fi"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Acceso directo para informes de errores"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostrar un botón en el menú de encendido para realizar un informe de errores"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Permanecer activo"</string>
@@ -272,6 +298,8 @@
     <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="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>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"La depuración inalámbrica solo está indicada para actividades de desarrollo. Úsala para copiar datos entre la computadora y el dispositivo, instalar apps en el dispositivo sin recibir notificaciones y leer datos de registro."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"¿Quieres revocar el acceso a la depuración por USB desde todas la computadoras que autorizaste hasta ahora?"</string>
     <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>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalía (rojo-verde)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalía (azul-amarillo)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Corrección de color"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"La corrección de colores ayuda a las personas con daltonismo a ver colores más exactos"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"La corrección de color ayuda a las personas daltónicas a ver mejor los colores"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Reemplazado por <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">"Tiempo restante: aproximadamente <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Tiempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Tiempo restante: más de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Tiempo restante: más de <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Es posible que pronto se apague el teléfono"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Es posible que pronto se apague la tablet"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Es posible que pronto se apague el dispositivo"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Es posible que pronto se apague el teléfono (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Es posible que pronto se apague la tablet (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Es posible que pronto se apague el dispositivo (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Es posible que pronto se apague el teléfono"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Es posible que pronto se apague la tablet"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Es posible que pronto se apague el dispositivo"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Es posible que pronto se apague el teléfono (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Es posible que pronto se apague la tablet (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Es posible que pronto se apague el dispositivo (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> para completar la carga"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> para completar la carga"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Desconocido"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Cargando"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"cargando"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Carga rápida"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Carga lenta"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"No se está cargando."</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Conectado. No se puede cargar en este momento"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Cargado"</string>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index b35696f5..5c8efc5 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Conectado a través de <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Disponible a través de %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Toca para registrarte"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Sin Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"No se ha podido acceder al servidor DNS privado"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Conexión limitada"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Sin Internet"</string>
@@ -191,7 +190,7 @@
     <item msgid="5664310435707146591">"Más rápida"</item>
     <item msgid="5491266922147715962">"Muy rápida"</item>
     <item msgid="7659240015901486196">"Superrápida"</item>
-    <item msgid="7147051179282410945">"Hiperrrápida"</item>
+    <item msgid="7147051179282410945">"Hiperrápida"</item>
     <item msgid="581904787661470707">"La más rápida"</item>
   </string-array>
     <string name="choose_profile" msgid="343803890897657450">"Seleccionar perfil"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Depuración por USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Activar el modo de depuración cuando el dispositivo esté conectado por USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revocar autorizaciones de depuración USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Depuración inalámbrica"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Activar el modo Depuración cuando tenga conexión Wi‑Fi"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Error"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Depuración inalámbrica"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Para ver y utilizar los dispositivos disponibles, activa la depuración inalámbrica"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Vincular dispositivo con código QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Vincula nuevos dispositivos con el escáner de códigos QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Vincular dispositivo con código de sincronización"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Vincula nuevos dispositivos con un código de seis dígitos"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Dispositivos vinculados"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Conectados actualmente"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Datos del dispositivo"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Olvidar"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Huella digital del dispositivo: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"No se ha podido conectar"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Comprueba que has conectado <xliff:g id="DEVICE_NAME">%1$s</xliff:g> a la red correcta"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Vincular con dispositivo"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Código de sincronización de Wi‑Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"No se ha podido vincular"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Comprueba que el dispositivo está conectado a la misma red."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Vincula un dispositivo a través de Wi‑Fi con un código QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Vinculando dispositivo…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"No se ha podido vincular el dispositivo. El código QR no era correcto o el dispositivo no estaba conectado a la misma red."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Dirección IP y puerto"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Escanear código QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Vincula un dispositivo a través de Wi‑Fi con un código QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, depuración, desarrollo"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Atajo a informe de errores"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostrar un botón en el menú de encendido para crear un informe de errores"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Pantalla siempre encendida al cargar"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Usar 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>
     <string name="adb_warning_message" msgid="8145270656419669221">"La depuración por USB solo está indicada para actividades de desarrollo. Puedes utilizarla para intercambiar datos entre el ordenador 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>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"La depuración inalámbrica solo está pensada para llevar a cabo actividades de desarrollo. Puedes utilizarla para intercambiar datos entre el ordenador y el dispositivo, para instalar aplicaciones en el dispositivo sin recibir notificaciones y para leer datos de registro."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"¿Quieres revocar el acceso a la depuración por USB de todos los ordenadores que has autorizado?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"¿Permitir ajustes de desarrollo?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Estos ajustes están destinados únicamente a los desarrolladores. Pueden provocar que el dispositivo o las aplicaciones no funcionen correctamente."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalía (rojo-verde)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalía (azul-amarillo)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Corrección de color"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"La corrección del color ayuda a las personas con daltonismo a ver los colores más reales"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"La corrección de color ayuda a que los usuarios con daltonismo vean colores similares a los que perciben otras personas"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Anulado por <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">"Tiempo restante aproximado: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Queda menos del <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Queda más del <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Tiempo restante: más de <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Es posible que el teléfono se apague pronto"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Es posible que el tablet se apague pronto"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Es posible que el dispositivo se apague pronto"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Es posible que el teléfono se apague pronto (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Es posible que el tablet se apague pronto (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Es posible que el dispositivo se apague pronto (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Es posible que el teléfono se apague pronto"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Es posible que el tablet se apague pronto"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Es posible que el dispositivo se apague pronto"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Es posible que el teléfono se apague pronto (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Es posible que el tablet se apague pronto (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Es posible que el dispositivo se apague pronto (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> hasta que termine de cargarse"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> (<xliff:g id="TIME">%2$s</xliff:g> hasta que termine de cargarse)"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Desconocido"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Cargando"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"cargando"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Cargando rápidamente"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Cargando lentamente"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"No se está cargando"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Se ha conectado, pero no se puede cargar en este momento"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Completa"</string>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index b6c112b..7597476 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Ühendatud võrgu <xliff:g id="NAME">%1$s</xliff:g> kaudu"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Saadaval üksuse %1$s kaudu"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Puudutage registreerumiseks"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Interneti pole"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Privaatsele DNS-serverile ei pääse juurde"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Piiratud ühendus"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Interneti-ühendus puudub"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB silumine"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Silumisrežiim, kui USB on ühendatud"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Tühista USB silumisvolitused"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Juhtmevaba silumine"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Silumisrežiim, kui WiFi-ühendus on olemas"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Viga"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Juhtmevaba silumine"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Saadaolevate seadmete nägemiseks ja kasutamiseks lülitage sisse juhtmevaba silumine"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Seadme sidumine QR-koodiga"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Uute seadmete sidumine QR-koodi skanneriga"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Seadme sidumine sidumiskoodiga"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Uute seadmete sidumine kuuekohalise koodiga"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Seotud seadmed"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Praegu ühendatud"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Seadme üksikasjad"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Unusta"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Seadme sõrmejälg: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Ühendamine ebaõnnestus"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Veenduge, et seade <xliff:g id="DEVICE_NAME">%1$s</xliff:g> oleks ühendatud samasse võrku"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Sidumine seadmega"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"WiFi sidumiskood"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Sidumine ei õnnestunud"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Veenduge, et seade oleks ühendatud samasse võrku."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Siduge seade WiFi kaudu, skannides QR-koodi"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Seadme sidumine …"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Seadme sidumine ebaõnnestus. QR-kood oli vale või seade ei ole ühendatud samasse võrku."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-aadress ja port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR-koodi skannimine"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Siduge seade WiFi kaudu, skannides QR-koodi"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, silumine, arendus"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Veaaruande otsetee"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Kuva toitemenüüs veaaruande jäädvustamise nupp"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Jää sisselülitatuks"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Kasuta võimalusel jagamise riistvaralist kiirendust"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Luban USB silumise?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB-silumine on mõeldud ainult arendamiseks. Kasutage seda andmete kopeerimiseks oma arvuti ja seadme vahel, seadmesse rakenduste installimiseks ilma teatisteta ning logiandmete lugemiseks."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Kas lubada juhtmevaba silumine?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Juhtmevaba silumine on mõeldud ainult arendamiseks. Kasutage seda andmete kopeerimiseks oma arvuti ja seadme vahel, seadmesse rakenduste installimiseks ilma märguandeta ning logiandmete lugemiseks."</string>
     <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>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomaalia (punane-roheline)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomaalia (sinine-kollane)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Värvide korrigeerimine"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Värviparanduse funktsioon aitab värvipimedatel värve täpsemini näha"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Värviparanduse funktsioon aitab värvipimedatel värve täpsemini näha"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Alistas <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">"Ligikaudu <xliff:g id="TIME_REMAINING">%1$s</xliff:g> jäänud"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Jäänud on alla <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Jäänud on üle <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Jäänud on üle <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefon võib peagi välja lülituda"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tahvelarvuti võib peagi välja lülituda"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Seade võib peagi välja lülituda"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefon võib peagi välja lülituda (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tahvelarvuti võib peagi välja lülituda (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Seade võib peagi välja lülituda (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefon võib peagi välja lülituda"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tahvelarvuti võib peagi välja lülituda"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Seade võib peagi välja lülituda"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefon võib peagi välja lülituda (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tahvelarvuti võib peagi välja lülituda (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Seade võib peagi välja lülituda (<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="7415639699283965818">"Täislaadimiseni on jäänud <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> täislaadimiseni"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Tundmatu"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Laadimine"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"laadimine"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Kiiresti laadimine"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Aeglaselt laadimine"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ei lae"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Vooluvõrgus, praegu ei saa laadida"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Täis"</string>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 4fd9add..fd2635a 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> bidez konektatuta"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s bidez erabilgarri"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Sakatu erregistratzeko"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Ez dago Interneteko konexiorik"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Ezin da atzitu DNS zerbitzari pribatua"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Konexio mugatua"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Ez dago Interneteko konexiorik"</string>
@@ -125,7 +124,7 @@
     <string name="bluetooth_talkback_headset" msgid="3406852564400882682">"Mikrofonodun entzungailua"</string>
     <string name="bluetooth_talkback_phone" msgid="868393783858123880">"Telefonoa"</string>
     <string name="bluetooth_talkback_imaging" msgid="8781682986822514331">"Irudietarako gailua"</string>
-    <string name="bluetooth_talkback_headphone" msgid="8613073829180337091">"Aurikularra"</string>
+    <string name="bluetooth_talkback_headphone" msgid="8613073829180337091">"Entzungailua"</string>
     <string name="bluetooth_talkback_input_peripheral" msgid="5133944817800149942">"Idazteko gailua"</string>
     <string name="bluetooth_talkback_bluetooth" msgid="1143241359781999989">"Bluetooth gailua"</string>
     <string name="bluetooth_hearingaid_left_pairing_message" msgid="8561855779703533591">"Ezkerreko audifonoa parekatzen…"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB bidezko arazketa"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Gaitu arazketa modua USBa konektatzean"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Baliogabetu USB bidezko arazketarako baimenak"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Hari gabeko arazketa"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Arazketa modua wifi-konexioa aktibatuta dagoenean"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Errorea"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Hari gabeko arazketa"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Erabilgarri dauden gailuak ikusteko eta erabiltzeko, aktibatu hari gabeko arazketa"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Parekatu gailua QR kodearekin"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Parekatu gailu berriak QR kodea eskaneatuta"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Parekatu gailua parekatze-kodearekin"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Parekatu gailu berriak sei digituko kodearekin"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Parekatutako gailuak"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Konektatuta daudenak"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Gailuaren xehetasunak"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Ahaztu"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Gailuaren erreferentzia-gako digitala: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Ezin izan da konektatu"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Ziurtatu <xliff:g id="DEVICE_NAME">%1$s</xliff:g> sare berera konektatuta dagoela"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Parekatu gailuarekin"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wifi bidezko parekatze-kodea"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Ezin izan da parekatu gailua"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Ziurtatu gailua sare berera konektatuta dagoela."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Parekatu gailua wifi sare baten bidez QR kode bat eskaneatuta"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Gailua parekatzen…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Ezin izan da parekatu gailua. QR kodea ez zen zuzena zen edo gailua ez dago sare berera konektatuta."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP helbidea eta ataka"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Eskaneatu QR kodea"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Parekatu gailua wifi sare baten bidez QR kode bat eskaneatuta"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, araztu, gailua"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Akatsen txostenerako lasterbidea"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Bateriaren menuan, erakutsi akatsen txostena sortzeko botoia"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Mantendu aktibo"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Erabilgarri badago, erabili konexioa partekatzeko hardwarearen azelerazioa"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"USB bidezko arazketa onartu?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB bidezko arazketa garapen-xedeetarako soilik dago diseinatuta. Erabil ezazu ordenagailuaren eta gailuaren artean datuak kopiatzeko, aplikazioak gailuan jakinarazi gabe instalatzeko eta erregistro-datuak irakurtzeko."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Hari gabeko arazketa baimendu nahi duzu?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Hari gabeko arazketa garapen-xedeetarako soilik dago diseinatuta. Erabil ezazu ordenagailuaren eta gailuaren artean datuak kopiatzeko, gailuan aplikazioak jakinarazi gabe instalatzeko eta erregistroko datuak irakurtzeko."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Aurretik baimendutako ordenagailu guztiei USB bidezko arazketarako sarbidea baliogabetu nahi diezu?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Baimendu garapenerako ezarpenak?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Ezarpen hauek garapen-xedeetarako pentsatu dira soilik. Baliteke ezarpenen eraginez gailua matxuratzea edo funtzionamendu okerra izatea."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanopia (gorri-berdeak)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanopia (urdin-horia)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Koloreen zuzenketa"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Kolore-zuzenketak kolore zehatzagoak ikusten laguntzen die koloreentzako itsutasuna duten pertsonei."</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Kolore-zuzenketak kolore zehatzagoak ikusten laguntzen die kolore-itsutasuna duten pertsonei"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"<xliff:g id="TITLE">%1$s</xliff:g> hobespena gainjarri zaio"</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> inguru gelditzen dira"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> baino gutxiago gelditzen da (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> baino gehiago gelditzen da (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> baino gehiago gelditzen da"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Baliteke telefonoa laster itzaltzea"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Baliteke tableta laster itzaltzea"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Baliteke gailua laster itzaltzea"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Baliteke telefonoa laster itzaltzea (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Baliteke tableta laster itzaltzea (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Baliteke gailua laster itzaltzea (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Baliteke telefonoa laster itzaltzea"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Baliteke tableta laster itzaltzea"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Baliteke gailua laster itzaltzea"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Baliteke telefonoa laster itzaltzea (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Baliteke tableta laster itzaltzea (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Baliteke gailua laster itzaltzea (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> guztiz kargatu arte"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> guztiz kargatu arte"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Ezezaguna"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Kargatzen"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"kargatzen"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Bizkor kargatzen"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Mantso kargatzen"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ez da kargatzen ari"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Konektatuta dago. Ezin da kargatu une honetan."</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Beteta"</string>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 32a98be..9d92cfe 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"متصل شده ازطریق <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"‏در دسترس از طریق %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"برای ثبت‌نام ضربه بزنید"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"عدم اتصال به اینترنت"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"‏سرور DNS خصوصی قابل دسترسی نیست"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"اتصال محدود"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"عدم دسترسی به اینترنت"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"‏مرتبط کردن دستگاه با کد QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"‏دستگاه‌های جدید را با استفاده از اسکنر کد QR مرتبط کنید"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"جزئیات دستگاه"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"فراموش شود"</string>
+    <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_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 و با اسکن کردن کد QR مرتبط کنید"</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_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="8578868049289910131">"‏دستگاه را ازطریق Wi‑Fi و با اسکن کردن کد QR مرتبط کنید"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"‏ADB (پل اشکال‌زدایی Android)، اشکال‌زدایی کردن، برنامه‌نویس"</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>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"تنظیمات برنامه‌نویسی مجاز باشد؟"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"این تنظیمات فقط برای برنامه‌نویسی در نظر گرفته شده است. ممکن است استفاده از این تنظیمات موجب خرابی یا عملکرد نادرست دستگاه یا برنامه‌های شما شود."</string>
@@ -384,7 +412,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="9137381746633858694">"تصحیح رنگ به افراد مبتلا به کوررنگی کمک می‌کند رنگ‌ها را دقیق‌تر ببینند"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"تصحیح رنگ به افراد مبتلا به کوررنگی کمک می‌کند رنگ‌ها را دقیق‌تر ببینند"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"کمتر از <xliff:g id="THRESHOLD">%1$s</xliff:g> شارژ باقی مانده است (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"بیش از <xliff:g id="TIME_REMAINING">%1$s</xliff:g> شارژ باقی مانده است (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"بیش از <xliff:g id="TIME_REMAINING">%1$s</xliff:g> باقی مانده است"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ممکن است تلفن به‌زودی خاموش شود"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ممکن است رایانه لوحی به‌زودی خاموش شود"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"ممکن است دستگاه به‌زودی خاموش شود"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ممکن است تلفن به‌زودی خاموش شود (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ممکن است رایانه لوحی به‌زودی خاموش شود (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"ممکن است دستگاه به‌زودی خاموش شود (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"ممکن است تلفن به‌زودی خاموش شود"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ممکن است رایانه لوحی به‌زودی خاموش شود"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"ممکن است دستگاه به‌زودی خاموش شود"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"ممکن است تلفن به‌زودی خاموش شود (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ممکن است رایانه لوحی به‌زودی خاموش شود (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> مانده تا شارژ کامل"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"درحال شارژ شدن"</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_discharging" msgid="6962689305413556485">"شارژ نمی‌شود"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"به برق وصل شده‌ است، درحال‌حاضر شارژ نمی‌شود"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"پر"</string>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 84c5372..6bb6d5b 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Yhdistetty (<xliff:g id="NAME">%1$s</xliff:g>)"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Käytettävissä seuraavan kautta: %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Rekisteröidy napauttamalla"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Ei internetyhteyttä"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Ei pääsyä yksityiselle DNS-palvelimelle"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Rajallinen yhteys"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Ei internetyhteyttä"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB-vianetsintä"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Vianetsintätila USB-liitännän ollessa käytössä"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Peruuta USB-vianetsinnän käyttöoikeudet"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Langaton virheenkorjaus"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Virheenkorjaustila Wi-Fin ollessa käytössä"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Virhe"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Langaton virheenkorjaus"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Laita langaton virheenkorjaus päälle, niin voit nähdä saatavilla olevat laitteet ja käyttää niitä"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Muodosta laitepari QR-koodilla"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Muodosta uusia laitepareja QR-koodiskannerilla"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Yhdistä laite laiteparikoodilla"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Muodosta uusia laitepareja kuusinumeroisella koodilla"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Laiteparit"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Yhdistetty tällä hetkellä"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Laitteen tiedot"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Unohda"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Laitteen sormenjälki: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Yhteys epäonnistui"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Varmista, että <xliff:g id="DEVICE_NAME">%1$s</xliff:g> on yhdistetty oikeaan verkkoon"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Muodosta laitepari"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi-Fi-laiteparikoodi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Laiteparin muodostus ei onnistunut"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Varmista, että laite on yhdistetty samaan verkkoon."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Muodosta laitepari Wi-Fi-yhteyden kautta skannaamalla QR-koodi"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Muodostetaan laiteparia…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Laiteparin muodostus ei onnistunut. QR-koodi oli virheellinen, tai laitetta ei ole yhdistetty samaan verkkoon."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-osoite &amp; portti"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skannaa QR-koodi"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Muodosta laitepari Wi-Fi-yhteyden kautta skannaamalla QR-koodi"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, virheenkorjaus, kehittäminen"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Virheraportin pikakuvake"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Näytä virheraporttipainike virtavalikossa."</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Pysy käynnissä"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Käytä laitteistokiihdytyksen yhteyden jakamista, jos se on käytettävissä."</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Sallitaanko USB-vianetsintä?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB-vianetsintä on tarkoitettu vain kehittäjien käyttöön. Sen avulla voidaan kopioida tietoja tietokoneesi ja laitteesi välillä, asentaa laitteeseesi sovelluksia ilmoittamatta siitä sinulle ja lukea lokitietoja."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Sallitaanko langaton virheenkorjaus?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Langaton virheenkorjaus on tarkoitettu vain kehittäjien käyttöön. Sen avulla voidaan kopioida dataa tietokoneesi ja laitteesi välillä, asentaa laitteeseesi sovelluksia ilmoittamatta siitä sinulle ja lukea lokidataa."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Haluatko peruuttaa USB-vianetsinnän käyttöoikeuden kaikilta tietokoneilta, joille olet antanut luvan aiemmin?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Sallitaanko kehittäjäasetukset?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Nämä asetukset on tarkoitettu vain kehityskäyttöön, ja ne voivat aiheuttaa haittaa laitteellesi tai sen sovelluksille."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalia (puna-vihersokeus)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalia (sini-keltasokeus)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Värikorjaus"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Värinkorjaus auttaa värisokeita tulkitsemaan värejä"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Värinkorjaus auttaa värisokeita tulkitsemaan värejä"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Tämän ohittaa <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">"Noin <xliff:g id="TIME_REMAINING">%1$s</xliff:g> jäljellä"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Alle <xliff:g id="THRESHOLD">%1$s</xliff:g> jäljellä (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Yli <xliff:g id="TIME_REMAINING">%1$s</xliff:g> jäljellä (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Yli <xliff:g id="TIME_REMAINING">%1$s</xliff:g> jäljellä"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Puhelin voi pian sammua"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tabletti voi pian sammua"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Laite voi pian sammua"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Puhelin voi pian sammua (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tabletti voi pian sammua (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Laite voi pian sammua (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Puhelin voi sammua pian"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tabletti voi sammua pian"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Laite voi sammua pian"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Puhelin voi sammua pian (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tabletti voi sammua pian (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Laite voi sammua pian (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> jäljellä täyteen lataukseen"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> täyteen lataukseen"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Tuntematon"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Ladataan"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"ladataan"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Nopea lataus"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Hidas lataus"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ei laturissa"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Kytketty virtalähteeseen, lataaminen ei onnistu"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Täynnä"</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index 995eab6..b040be9 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Connecté sur le réseau <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Accessible par %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Toucher pour vous connecter"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Aucune connexion Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Impossible d\'accéder au serveur DNS privé"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Connexion limitée"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Aucune connexion Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Débogage USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Mode débogage lorsqu\'un câble USB est connecté"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Annuler les autorisations relatives au 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 débogage lorsque le Wi-Fi est connecté"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Erreur"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Débogage sans fil"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Pour afficher et utiliser les appareils à proximité, activez le débogage sans fil"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Associer l\'appareil à l\'aide d\'un code QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Associer les nouveaux appareils à l\'aide d\'un lecteur de code QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Associer l\'appareil avec un code d\'association"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Associer les nouveaux appareils à l\'aide d\'un code à six chiffres"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Appareils associés"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Actuellement connecté"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Renseignements sur l\'appareil"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Oublier"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Empreinte digitale d\'appareil : <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Échec de la connexion"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Vérifiez que <xliff:g id="DEVICE_NAME">%1$s</xliff:g> est connecté au bon réseau"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Associer avec l\'appareil"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Code d\'association Wi-Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Échec de l\'association"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Vérifier que l\'appareil est connecté au même réseau."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Associer un appareil au Wi-Fi en numérisant un code QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Association de l\'appareil en cours…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Échec de l\'association de l\'appareil Soit le code QR est incorrect, soit l\'appareil n\'est pas connecté au même réseau."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adresse IP et port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Numériser le code QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Associer un appareil au Wi-Fi en numérisant un code QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, débogage, appareil"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Raccourci de rapport de bogue"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Afficher un bouton permettant d\'établir un rapport de bogue dans le menu de démarrage"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Rester activé"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Utiliser l\'accélération matérielle du partage de connexion si possible"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Autoriser le débogage USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Le débogage USB est conçu uniquement pour le développement. Utilisez-le pour copier des données entre votre ordinateur et votre appareil, installer des applications sur votre appareil sans notification et lire les données de journal."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Autoriser le débogage sans fil?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Le débogage sans fil est conçu uniquement aux fin de conception. Utilisez-le pour copier des données entre votre ordinateur et votre appareil, installer des applications sur votre appareil sans notification et lire les données de journal."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Voulez-vous vraiment désactiver l\'accès au débogage USB de tous les ordinateurs précédemment autorisés?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Activer les paramètres de développement?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Ces paramètres sont en cours de développement. Ils peuvent endommager votre appareil et les applications qui s\'y trouvent, ou provoquer leur dysfonctionnement."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalie (rouge/vert)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalie (bleu/jaune)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Correction des couleurs"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"La correction des couleurs aide les personnes atteintes de daltonisme à mieux percevoir les couleurs"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"La correction des couleurs aide les personnes atteintes de daltonisme à mieux percevoir les couleurs"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Remplacé par <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">"Il reste environ <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Il reste plus de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Il reste plus de <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Il se peut que le téléphone s\'éteigne bientôt"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Il se peut que la tablette s\'éteigne bientôt"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Il se peut que l\'appareil s\'éteigne bientôt"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Il se peut que le téléphone s\'éteigne bientôt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Il se peut que la tablette s\'éteigne bientôt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Il se peut que l\'appareil s\'éteigne bientôt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Il se peut que le téléphone s\'éteigne bientôt"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Il se peut que la tablette s\'éteigne bientôt"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Il se peut que l\'appareil s\'éteigne bientôt"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Il se peut que le téléphone s\'éteigne bientôt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Il se peut que la tablette s\'éteigne bientôt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Il se peut que l\'appareil s\'éteigne bientôt (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> jusqu\'à la charge complète"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> : <xliff:g id="TIME">%2$s</xliff:g> jusqu\'à la charge complète"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Inconnu"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Charge en cours…"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"en cours de charge"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Recharge rapide"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Charge lente"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"N\'est pas en charge"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"L\'appareil est branché, mais il ne peut pas être chargé pour le moment"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Pleine"</string>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 2afacab..fb70c88 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Connecté via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Disponible via %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Appuyez ici pour vous connecter"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Aucun accès à Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Impossible d\'accéder au serveur DNS privé"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Connexion limitée"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Aucun accès à Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Débogage USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Mode débogage lorsqu\'un câble USB est connecté"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Annuler autorisations pour débog. USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Débogage via Wi-Fi"</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>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Débogage via Wi-Fi"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Pour afficher et utiliser les appareils disponibles, activez le débogage sans fil"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Associer l\'appareil avec un code QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Associer les nouveaux appareils à l\'aide d\'un lecteur de code QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Associer l\'appareil avec un code d\'association"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Associer les nouveaux appareils à l\'aide d\'un code à six chiffres"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Appareils associés"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Actuellement connecté"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Infos sur l\'appareil"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Retirer"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Empreinte de l\'appareil : <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Échec de la connexion"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Vérifiez que l\'appareil <xliff:g id="DEVICE_NAME">%1$s</xliff:g> est connecté au bon réseau"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Associer à l\'appareil"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Code d\'association via le Wi-Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Échec de l\'association"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Assurez-vous que l\'appareil est connecté au même réseau."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Associer l\'appareil via le Wi‑Fi à l\'aide d\'un code QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Association de l\'appareil…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Échec de l\'association à l\'appareil. Le code QR est incorrect, ou l\'appareil n\'est pas connecté au même réseau."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adresse IP et port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scanner un code QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Associer l\'appareil via le Wi‑Fi à l\'aide d\'un code QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, débogage, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Raccourci vers rapport de bug"</string>
     <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">"Écran toujours actif"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Utiliser l\'accélération matérielle pour le partage de connexion, si disponible"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Autoriser le débogage USB ?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Le débogage USB est conçu uniquement pour le développement. Utilisez-le pour copier des données entre votre ordinateur et votre appareil, installer des applications sur votre appareil sans notification et lire les données de journal."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Autoriser le débogage via Wi-Fi ?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Le débogage via Wi-Fi est conçu uniquement pour le développement. Utilisez-le pour copier des données entre votre ordinateur et votre appareil, installer des applications sur votre appareil sans notification et lire les données des journaux."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Voulez-vous vraiment désactiver l\'accès au débogage USB de tous les ordinateurs précédemment autorisés ?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Activer les paramètres de développement ?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Ces paramètres sont en cours de développement. Ils peuvent endommager votre appareil et les applications qui s\'y trouvent, ou provoquer leur dysfonctionnement."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalie (rouge/vert)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalie (bleu-jaune)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Correction couleur"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"La correction des couleurs aide les personnes atteintes de daltonisme à mieux percevoir les couleurs"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"La correction des couleurs aide les personnes atteintes de daltonisme à mieux percevoir les couleurs"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Remplacé par <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">"Temps restant : environ <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Il reste plus de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Il reste plus de <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Il est possible que le téléphone s\'éteigne bientôt"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Il est possible que la tablette s\'éteigne bientôt"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Il est possible que l\'appareil s\'éteigne bientôt"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Il est possible que le téléphone s\'éteigne bientôt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Il est possible que la tablette s\'éteigne bientôt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Il est possible que l\'appareil s\'éteigne bientôt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Le téléphone va bientôt s\'éteindre"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"La tablette va bientôt s\'éteindre"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"L\'appareil va bientôt s\'éteindre"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Le téléphone va bientôt s\'éteindre (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"La tablette va bientôt s\'éteindre (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"L\'appareil va bientôt s\'éteindre (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> jusqu\'à ce que la batterie soit chargée"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> jusqu\'à la charge complète"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Inconnu"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Batterie en charge"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"en charge…"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charge rapide"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Charge lente"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Pas en charge"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Appareil branché, mais impossible de le charger pour le moment"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Pleine"</string>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index a106e60..1407a50 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Wifi conectada a través de <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Dispoñible a través de %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Toca para rexistrarte"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Non hai conexión a Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Non se puido acceder ao servidor DNS privado"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Pouca conexión"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Non hai conexión a Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Depuración por USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Modo de depuración de erros cando o USB está conectado"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revogar as autorizacións de depuración por USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Depuración de erros sen fíos"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Modo de depuración de erros ao conectarse a wifi"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Produciuse un erro"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Depuración de erros sen fíos"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Para ver e usar os dispositivos dispoñibles, activa a depuración de erros sen fíos"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Vincular o dispositivo cun código QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Vincula dispositivos novos mediante un escáner de códigos QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Vincular o dispositivo co código de sincronización"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Vincula dispositivos novos mediante un código de seis díxitos"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Dispositivos vinculados"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Dispositivos conectados actualmente"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Datos do dispositivo"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Esquecer"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Impresión dixital do dispositivo: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Produciuse un erro na conexión"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Asegúrate de que o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g> estea conectado á rede correcta"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Sincronizar co dispositivo"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Código de sincronización da wifi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Produciuse un fallo na sincronización"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Asegúrate de que o dispositivo estea conectado á mesma rede"</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Vincula o dispositivo a través da wifi escaneando un código QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Sincronizando dispositivo…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Produciuse un erro ao sincronizar o dispositivo. O código QR era incorrecto ou o dispositivo non está conectado á mesma rede."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Enderezo IP e porto"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Escanear o código QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Vincula o dispositivo a través da wifi escaneando un código QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, depuración, programador"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Atallo do informe de erros"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostra un botón no menú de acendido para crear un informe de erros"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Pantalla activa"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Se está dispoñible, úsase a aceleración de hardware para conexión compartida"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Queres permitir a depuración por USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"A depuración de erros USB está deseñada unicamente para fins de programación. Utilízaa para copiar datos entre o ordenador e o dispositivo, instalar aplicacións no dispositivo sen enviar notificacións e ler os datos do rexistro."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Queres permitir a depuración de erros sen fíos?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"A depuración de erros sen fíos está deseñada unicamente para fins de programación. Utilízaa para copiar datos entre o ordenador e o dispositivo, instalar aplicacións no dispositivo sen recibir notificacións e ler os datos do rexistro."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Queres revogar o acceso á depuración por USB desde todos os ordenadores que autorizaches previamente?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Permitir a configuración de programación?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Esta configuración só está destinada á programación. Esta pode provocar que o dispositivo e as aplicacións fallen ou se comporten incorrectamente."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalía (vermello-verde)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalía (azul-amarelo)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Corrección da cor"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"A corrección das cores axuda ás persoas con daltonismo a ver as cores con maior precisión"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"A corrección da cor axuda ás persoas con daltonismo a ver as cores con maior precisión"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Anulado por <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">"Tempo restante aproximado: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Tempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Tempo restante: máis de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Tempo restante: máis de <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"É posible que o teléfono se apague en breve"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"É posible que a tableta se apague en breve"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"É posible que o dispositivo se apague en breve"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"É posible que o teléfono se apague en breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"É posible que a tableta se apague en breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"É posible que o dispositivo se apague en breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"O teléfono pode apagarse en breve"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"A tableta pode apagarse en breve"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"O dispositivo pode apagarse en breve"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"O teléfono pode apagarse en breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"A tableta pode apagarse en breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"O dispositivo pode apagarse en breve (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> para completar a carga"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g>: <xliff:g id="TIME">%2$s</xliff:g> para completar a carga"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Descoñecido"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Cargando"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"cargando"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Cargando rapidamente"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Cargando lentamente"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Non se está cargando"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Conectouse, pero non se pode cargar neste momento"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Completa"</string>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index 5f2d5cd..889857a 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> દ્વારા કનેક્ટ થયેલ"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s દ્વારા ઉપલબ્ધ"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"સાઇન અપ કરવા માટે ટૅપ કરો"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"કોઈ ઇન્ટરનેટ નથી"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"ખાનગી DNS સર્વર ઍક્સેસ કરી શકાતા નથી"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"મર્યાદિત કનેક્શન"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"ઇન્ટરનેટ ઍક્સેસ નથી"</string>
@@ -207,6 +206,33 @@
     <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="enable_adb_wireless" msgid="6973226350963971018">"વાયરલેસ ડિબગીંગ"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"વાઇ-ફાઇ કનેક્ટ કરેલું હોય ત્યારે ડિબગ મોડ"</string>
+    <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">"QR કોડ વડે ડિવાઇસનું જોડાણ બનાવો"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR કોડ સ્કૅનરનો ઉપયોગ કરીને નવા ડિવાઇસનું જોડાણ બનાવો"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"ડિવાઇસની વિગતો"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"ભૂલી જાઓ"</string>
+    <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_pairing_code_label" msgid="3639239786669722731">"વાઇ-ફાઇ જોડાણ કરવાનો કોડ"</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 કોડને સ્કૅન કરીને વાઇ-ફાઇ પર ડિવાઇસનું જોડાણ બનાવો"</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_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP ઍડ્રેસ &amp; પોર્ટ"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR કોડ સ્કૅન કરો"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR કોડને સ્કૅન કરીને વાઇ-ફાઇ પર ડિવાઇસનું જોડાણ બનાવો"</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="keep_screen_on" msgid="1187161672348797558">"સક્રિય રાખો"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"વિકાસ સેટિંગ્સને મંજૂરી આપીએ?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"આ સેટિંગ્સ ફક્ત વિકાસનાં ઉપયોગ માટે જ હેતુબદ્ધ છે. તે તમારા ઉપકરણ અને તેના પરની એપ્લિકેશન્સનાં ભંગ થવા અથવા ખરાબ વર્તનનું કારણ બની શકે છે."</string>
@@ -384,7 +412,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="9137381746633858694">"રંગ સુધારણા રંગ અંધત્વવાળા લોકોને વધુ સચોટ રંગો જોવામાં સહાય કરે છે"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"રંગ સુધારણા રંગ અંધત્વવાળા લોકોને વધુ સચોટ રંગો જોવામાં સહાય કરે છે"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> કરતાં ઓછો સમય બાકી છે (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> કરતાં વધુ સમય બાકી છે (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> કરતાં વધુ સમય બાકી છે"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ફોન થોડીક જ વારમાં બંધ થઈ શકે છે"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ટૅબ્લેટ થોડીક જ વારમાં બંધ થઈ શકે છે"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"ઉપકરણ થોડીક જ વારમાં બંધ થઈ શકે છે"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ફોન થોડીક જ વારમાં બંધ થઈ શકે છે (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ટૅબ્લેટ થોડીક જ વારમાં બંધ થઈ શકે છે (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"ઉપકરણ થોડીક જ વારમાં બંધ થઈ શકે છે (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"ફોન થોડીક જ વારમાં બંધ થઈ શકે છે"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ટૅબ્લેટ થોડીક જ વારમાં બંધ થઈ શકે છે"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"ડિવાઇસ થોડીક જ વારમાં બંધ થઈ શકે છે"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"ફોન થોડીક જ વારમાં બંધ થઈ શકે છે (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ટૅબ્લેટ થોડીક જ વારમાં બંધ થઈ શકે છે (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"ચાર્જ થવામાં <xliff:g id="TIME">%1$s</xliff:g> બાકી છે"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - ચાર્જ થવા માટે <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"ચાર્જ થઈ રહ્યું છે"</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_discharging" msgid="6962689305413556485">"ચાર્જ થઈ રહ્યું નથી"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"પ્લગ ઇન કરેલ, હમણાં ચાર્જ કરી શકતા નથી"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"પૂર્ણ"</string>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index d60eead..24153b9 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> के ज़रिए कनेक्ट किया गया"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s के द्वारा उपलब्ध"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"साइन अप करने के लिए टैप करें"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"इंटरनेट कनेक्शन नहीं है"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"निजी डीएनएस सर्वर को ऐक्सेस नहीं किया जा सकता"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"सीमित कनेक्शन"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"इंटरनेट कनेक्शन नहीं है"</string>
@@ -207,6 +206,60 @@
     <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>
+    <!-- no translation found for enable_adb_wireless (6973226350963971018) -->
+    <skip />
+    <!-- no translation found for enable_adb_wireless_summary (7344391423657093011) -->
+    <skip />
+    <!-- no translation found for adb_wireless_error (721958772149779856) -->
+    <skip />
+    <!-- no translation found for adb_wireless_settings (2295017847215680229) -->
+    <skip />
+    <!-- no translation found for adb_wireless_list_empty_off (1713707973837255490) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_qrcode_title (6982904096137468634) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_qrcode_summary (3729901496856458634) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_code_title (1122590300445142904) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_code_summary (6370414511333685185) -->
+    <skip />
+    <!-- no translation found for adb_paired_devices_title (5268997341526217362) -->
+    <skip />
+    <!-- no translation found for adb_wireless_device_connected_summary (3039660790249148713) -->
+    <skip />
+    <!-- no translation found for adb_wireless_device_details_title (7129369670526565786) -->
+    <skip />
+    <!-- no translation found for adb_device_forget (193072400783068417) -->
+    <skip />
+    <!-- no translation found for adb_device_fingerprint_title_format (291504822917843701) -->
+    <skip />
+    <!-- no translation found for adb_wireless_connection_failed_title (664211177427438438) -->
+    <skip />
+    <!-- no translation found for adb_wireless_connection_failed_message (9213896700171602073) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_title (7141739231018530210) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_pairing_code_label (3639239786669722731) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_failed_title (3426758947882091735) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_failed_msg (6611097519661997148) -->
+    <skip />
+    <!-- no translation found for adb_wireless_qrcode_summary (8051414549011801917) -->
+    <skip />
+    <!-- no translation found for adb_wireless_verifying_qrcode_text (6123192424916029207) -->
+    <skip />
+    <!-- no translation found for adb_qrcode_pairing_device_failed_msg (6936292092592914132) -->
+    <skip />
+    <!-- no translation found for adb_wireless_ip_addr_preference_title (8335132107715311730) -->
+    <skip />
+    <!-- no translation found for adb_wireless_qrcode_pairing_title (1906409667944674707) -->
+    <skip />
+    <!-- no translation found for adb_wireless_qrcode_pairing_description (8578868049289910131) -->
+    <skip />
+    <!-- no translation found for keywords_adb_wireless (6507505581882171240) -->
+    <skip />
     <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>
@@ -272,6 +325,10 @@
     <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>
+    <!-- no translation found for adbwifi_warning_title (727104571653031865) -->
+    <skip />
+    <!-- no translation found for adbwifi_warning_message (8005936574322702388) -->
+    <skip />
     <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>
@@ -384,7 +441,8 @@
     <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="9137381746633858694">"रंग में सुधार करने की सेटिंग, वर्णान्धता (कलर ब्लाइंडनेस) वाले लोगों को ज़्यादा सटीक रंग देखने में मदद करती है"</string>
+    <!-- no translation found for accessibility_display_daltonizer_preference_subtitle (6178138727195403796) -->
+    <skip />
     <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>
@@ -403,18 +461,27 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> से कम बैटरी बची है (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> से ज़्यादा चलने लायक बैटरी बची है (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> से ज़्यादा चलने लायक बैटरी बची है"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"फ़ोन जल्दी ही बंद हो सकता है"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"टैबलेट जल्दी ही बंद हो सकता है"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"डिवाइस जल्दी ही बंद हो सकता है"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"फ़ोन जल्दी ही बंद हो सकता है (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"टैबलेट जल्दी ही बंद हो सकता है (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"डिवाइस जल्दी ही बंद हो सकता है (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <!-- no translation found for power_remaining_duration_only_shutdown_imminent (137330009791560774) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_only_shutdown_imminent (145489081521468132) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_only_shutdown_imminent (1070562682853942350) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_shutdown_imminent (4429259621177089719) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_shutdown_imminent (7703677921000858479) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_shutdown_imminent (4374784375644214578) -->
+    <skip />
     <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="7415639699283965818">"चार्ज पूरा होने में <xliff:g id="TIME">%1$s</xliff:g> बचा है"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"चार्ज हो रही है"</string>
+    <!-- no translation found for battery_info_status_charging_fast (8027559755902954885) -->
+    <skip />
+    <!-- no translation found for battery_info_status_charging_slow (3190803837168962319) -->
+    <skip />
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"चार्ज नहीं हो रही है"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"प्लग इन है, अभी चार्ज नहीं हो सकती"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"पूरी"</string>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 28e3460..28a8858 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Povezan putem mreže <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Dostupno putem %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Dodirnite da biste se registrirali"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nema interneta"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Nije moguće pristupiti privatnom DNS poslužitelju"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Ograničena veza"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Nema interneta"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Pogreška"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Bežično otklanjanje pogrešaka"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Da biste vidjeli dostupne uređaje i mogli se njima koristiti, uključite bežično otklanjanje pogrešaka"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Uparivanje uređaja pomoću QR koda"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Uparivanje novih uređaja pomoću čitača QR koda"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Uparivanje uređaja pomoću koda za uparivanje"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Uparivanje novih uređaja pomoću šesteroznamenkastog koda"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Upareni uređaji"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Trenutačno povezano"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Pojedinosti o uređaju"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Zaboravi"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Otisak prsta na uređaju: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Neuspješno povezivanje"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Provjerite je li uređaj <xliff:g id="DEVICE_NAME">%1$s</xliff:g> povezan na ispravnu mrežu"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Uparivanje s uređajem"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Kôd za uparivanje putem Wi-Fija"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Uparivanje nije uspjelo"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Provjerite je li uređaj povezan na istu mrežu."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Uparivanje uređaja putem Wi-Fija skeniranjem QR koda"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Uparivanje uređaja…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Uparivanje uređaja nije uspjelo. QR kôd je neispravan ili uređaj nije povezan na istu mrežu."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adresa i priključak"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skeniraj QR kôd"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Uparivanje uređaja putem Wi-Fija skeniranjem QR koda"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, otklanjanje pogrešaka, razvoj"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Prečac izvješća o pogreškama"</string>
     <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>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Upotreba hardverskog ubrzanja 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>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Bežično otklanjanje pogrešaka 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đaj bez obavijesti i za čitanje dnevničkih zapisa."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Želite li opozvati pristup uklanjanju pogrešaka putem USB-a sa svih računala koja ste prethodno autorizirali?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Dopustiti postavke razvojnih programera?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Ove su postavke namijenjene samo razvojnim programerima. One mogu uzrokovati kvar ili neželjeno ponašanje vašeg uređaja i aplikacija na njemu."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalija (crveno – zeleno)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalija (plavo – žuto)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Korekcija boje"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Korekcija boje pomaže slijepima za boje da vide preciznije boje"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Korekcija boje pomaže slijepima za boje da vide preciznije boje"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Premošćeno postavkom <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">"Još otprilike <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefon bi se uskoro mogao isključiti"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet bi se uskoro mogao isključiti"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Uređaj bi se uskoro mogao isključiti"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefon bi se uskoro mogao isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet bi se uskoro mogao isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Uređaj bi se uskoro mogao isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefon bi se uskoro mogao isključiti"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet bi se uskoro mogao isključiti"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Uređaj bi se uskoro mogao isključiti"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefon bi se uskoro mogao isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet bi se uskoro mogao isključiti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Uređaj bi se uskoro mogao isključiti (<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="7415639699283965818">"Napunit će se za <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – napunit će se za <xliff:g id="TIME">%2$s</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Nepoznato"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Punjenje"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"punjenje"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Brzo punjenje"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Sporo punjenje"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ne puni se"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Uključen, trenutačno se ne može puniti"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Puna"</string>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 22e03a7..61433be 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Kapcsolódva a következőn keresztül: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Elérhető a következőn keresztül: %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Koppintson a regisztrációhoz"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nincs internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"A privát DNS-kiszolgálóhoz nem lehet hozzáférni"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Korlátozott kapcsolat"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Nincs internetkapcsolat"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB hibakeresés"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Hibakeresés mód USB csatlakoztatásakor"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"USB-s hibakeresésre vonatkozó engedélyek visszavonása"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Vezeték nélküli hibakeresés"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Hibakeresési mód, amikor van Wi-Fi-kapcsolat"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Hiba"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Vezeték nélküli hibakeresés"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"A rendelkezésre álló eszközök megtekintéséhez és használatához kapcsolja be a vezeték nélküli hibakeresést"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Eszköz párosítása QR-kóddal"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Párosítsa az új eszközöket QR-kód-szkennelő használatával"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Eszköz párosítása párosítókóddal"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Párosítsa az új eszközöket hatjegyű kód használatával"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Párosított eszközök"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Csatlakoztatva"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Eszközadatok"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Elfelejtés"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Ujjlenyomat az eszközön: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Sikertelen kapcsolódás"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Győződjön meg arról, hogy a(z) <xliff:g id="DEVICE_NAME">%1$s</xliff:g> a megfelelő hálózathoz csatlakozik"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Párosítás eszközzel"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi‑Fi-párosítókód"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Sikertelen párosítás"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Győződjön meg arról, hogy az eszköz a megfelelő hálózathoz csatlakozik."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Párosítsa az eszközt Wi-Fi-n keresztül QR-kód beolvasásával"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Eszköz párosítása…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Nem sikerült az eszközzel való párosítás. Vagy helytelen volt a QR-kód, vagy az eszköz másik hálózathoz csatlakozott."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-cím és port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR-kód beolvasása"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Párosítsa az eszközt Wi-Fi-n keresztül QR-kód beolvasásával"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Hibabejelentési gomb"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Gomb megjelenítése a bekapcsolási menüben hibajelentés készítéséhez"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Nem kapcsolódik ki"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Az internetmegosztás hardveres gyorsításának használata, amikor lehetséges"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Engedélyezi az USB hibakeresést?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Az USB hibakeresés fejlesztési célokat szolgál. Használhatja adatok másolására a számítógép és a készülék között, alkalmazások a készülékre való értesítés nélküli telepítésére és naplózási adatok olvasására."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Engedélyezi a vezeték nélküli hibakeresést?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"A vezeték nélküli hibakeresés kizárólag fejlesztési célokat szolgál. Használhatja adatok másolására a számítógép és az eszköz között, alkalmazásoknak az eszközre való telepítésére (értesítés nélkül) és naplózási adatok olvasására."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Visszavonja a hozzáférést az USB-s hibakereséshez az összes számítógépről, ahol korábban engedélyezte azt?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Engedélyezi a fejlesztői beállításokat?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Ezek a beállítások csak fejlesztői használatra szolgálnak. Használatuk esetén eszköze vagy alkalmazásai meghibásodhatnak, illetve nem várt módon viselkedhetnek."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomália (piros– zöld)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomália (kék–sárga)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Színkorrekció"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"A színkorrekció segít a színtévesztőknek abban, hogy pontosabban lássák a színeket"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"A színkorrekció segít a színtévesztőknek abban, hogy pontosabban lássák a színeket"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Felülírva erre: <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">"Körülbelül <xliff:g id="TIME_REMAINING">%1$s</xliff:g> maradt hátra"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Kevesebb mint <xliff:g id="THRESHOLD">%1$s</xliff:g> van hátra (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Kevesebb mint <xliff:g id="TIME_REMAINING">%1$s</xliff:g> van hátra (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Több mint <xliff:g id="TIME_REMAINING">%1$s</xliff:g> van hátra"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Előfordulhat, hogy a telefon hamarosan leáll"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Előfordulhat, hogy a táblagép hamarosan leáll"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Előfordulhat, hogy az eszköz hamarosan leáll"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Előfordulhat, hogy a telefon hamarosan leáll (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Előfordulhat, hogy a táblagép hamarosan leáll (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Előfordulhat, hogy az eszköz hamarosan leáll (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Előfordulhat, hogy a telefon hamarosan kikapcsol"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Előfordulhat, hogy a táblagép hamarosan kikapcsol"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Előfordulhat, hogy az eszköz hamarosan kikapcsol"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Előfordulhat, hogy a telefon hamarosan kikapcsol (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Előfordulhat, hogy a táblagép hamarosan kikapcsol (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Előfordulhat, hogy az eszköz hamarosan kikapcsol (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> van hátra a feltöltésig"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> a feltöltésig"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Ismeretlen"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Töltés"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"töltés"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Gyorstöltés"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Lassú töltés"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nem tölt"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Csatlakoztatva, jelenleg nem tölt"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Feltöltve"</string>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index ecb615a..2e39f2c 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Միացված է <xliff:g id="NAME">%1$s</xliff:g>-ի միջոցով"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Հասանելի է %1$s-ի միջոցով"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Հպեք՝ գրանցվելու համար"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Կապ չկա"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Մասնավոր DNS սերվերն անհասանելի է"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Սահմանափակ կապ"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Ինտերնետ կապ չկա"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"Զուգակցեք սարքը՝ օգտագործելով QR կոդը"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Զուգակցեք նոր սարքեր՝ օգտագործելով QR կոդերի սկաները"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Սարքի տվյալները"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Հեռացնել"</string>
+    <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_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-ի օգնությամբ սկանավորելով QR կոդը"</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_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="8578868049289910131">"Զուգակցեք սարքը՝ Wi‑Fi-ի օգնությամբ սկանավորելով QR կոդը"</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="keep_screen_on" msgid="1187161672348797558">"Մնալ արթուն"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"Ընդունե՞լ ծրագրավորման կարգավորումներ:"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Այս կարգավորումները միայն ծրագրավորման նպատակների համար են նախատեսված: Դրանք կարող են խանգարել ձեր սարքի կամ ծրագրի աշխատանքին:"</string>
@@ -384,7 +412,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="9137381746633858694">"Գունաշտկումն օգնում է գունային դալտոնիզմ ունեցող մարդկանց ավելի ճշգրիտ տեսնել գույները"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Գունաշտկումն օգնում է դալթոնիզմ ունեցող մարդկանց ավելի ճշգրիտ տեսնել գույները"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Մնացել է <xliff:g id="THRESHOLD">%1$s</xliff:g>-ից պակաս (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Մնացել է ավելի քան <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Մնացել է ավելի քան <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Հեռախոսը շուտով կանջատվի"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Պլանշետը շուտով կանջատվի"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Սարքը շուտով կանջատվի"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Հեռախոսը շուտով կանջատվի (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Պլանշետը շուտով կանջատվի (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Սարքը շուտով կանջատվի (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Հեռախոսը շուտով կանջատվի"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Պլանշետը շուտով կանջատվի"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Սարքը շուտով կանջատվի"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Հեռախոսը շուտով կանջատվի (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Պլանշետը շուտով կանջատվի (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> մինչև լիցքավորումը"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"լիցքավորում"</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_discharging" msgid="6962689305413556485">"Չի լիցքավորվում"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Միացված է հոսանքի աղբյուրին, սակայն այս պահին չի կարող լիցքավորվել"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Լիցքավորված է"</string>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index cfbda04..b75fa35 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Tersambung melalui <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Tersedia melalui %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Ketuk untuk mendaftar"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Tidak ada internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Server DNS pribadi tidak dapat diakses"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Koneksi terbatas"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Tidak ada internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Debugging USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Mode debug ketika USB tersambung"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Cabut otorisasi debug USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Proses debug nirkabel"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Mode debug saat Wi-Fi tersambung"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Error"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Proses debug nirkabel"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Untuk melihat dan menggunakan perangkat yang tersedia, aktifkan proses debug nirkabel"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Sambungkan perangkat dengan kode QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Sambungkan perangkat baru menggunakan Pemindai kode QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Sambungkan perangkat dengan kode penghubung"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Sambungkan perangkat baru menggunakan kode enam digit"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Perangkat disambungkan"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Saat ini tersambung"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Detail perangkat"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Lupakan"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Sidik jari perangkat: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Sambungan gagal"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Pastikan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> tersambung ke jaringan yang tepat"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Sambungkan dengan perangkat"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Kode penyambungan Wi-Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Penyambungan perangkat gagal"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Pastikan perangkat tersambung ke jaringan yang sama."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Menyambungkan perangkat melalui Wi‑Fi dengan memindai Kode QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Menyambungkan perangkat…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Gagal menyambungkan perangkat. Kode QR salah, atau perangkat tidak tersambung ke jaringan yang sama."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Alamat IP &amp; Port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Memindai kode QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Menyambungkan perangkat melalui Wi‑Fi dengan memindai Kode QR"</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">"Tampilkan tombol di menu daya untuk mengambil laporan bug"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Tetap terjaga"</string>
@@ -272,6 +298,8 @@
     <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>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Proses debug nirkabel dimaksudkan untuk tujuan pengembangan saja. Gunakan untuk menyalin data antara komputer dan perangkat Anda, menginstal aplikasi pada perangkat tanpa notifikasi, dan membaca data log."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Cabut akses ke debug USB dari semua komputer yang telah Anda otorisasi sebelumnya?"</string>
     <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>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomali (merah-hijau)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomali (biru-kuning)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Koreksi warna"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Koreksi warna membantu orang penderita buta warna untuk melihat warna yang lebih akurat"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Koreksi warna membantu orang penderita buta warna melihat warna yang lebih akurat"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Digantikan oleh <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">"Sekitar <xliff:g id="TIME_REMAINING">%1$s</xliff:g> lagi"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Tersisa kurang dari <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Tersisa lebih dari <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Tersisa lebih dari <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Ponsel mungkin segera dimatikan"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet mungkin segera dimatikan"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Perangkat mungkin segera dimatikan"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Ponsel mungkin segera dimatikan (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet mungkin segera dimatikan (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Perangkat mungkin segera dimatikan (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Ponsel akan segera dimatikan"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet akan segera dimatikan"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Perangkat akan segera dimatikan"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Ponsel akan segera dimatikan (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet akan segera dimatikan (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Perangkat akan segera dimatikan (<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="7415639699283965818">"Sisa <xliff:g id="TIME">%1$s</xliff:g> hingga terisi penuh"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> lagi terisi penuh"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Tidak diketahui"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Mengisi daya"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"mengisi daya baterai"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Mengisi daya cepat"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Mengisi daya lambat"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Tidak mengisi daya"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Tercolok, tidak dapat mengisi baterai sekarang"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Penuh"</string>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index ba4c009..c75c689 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Tenging í gegnum <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Í boði í gegnum %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Ýttu til að skrá þig"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Engin nettenging"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Ekki næst í DNS-einkaþjón"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Takmörkuð tenging"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Engin nettenging"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB-villuleit"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Villuleitarstilling þegar USB er tengt."</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Afturkalla USB-villuleitarheimildir"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Þráðlaus villuleit"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Villuleitarstilling þegar Wi-Fi er tengt"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Villa"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Þráðlaus villuleit"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Til að sjá og nota tiltæk tæki skal kveikja á þráðlausri villuleit"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Para tæki með QR-kóða"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Para ný tæki með QR-kóðaskanna"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Para tæki með pörunarkóða"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Para ný tæki með sex tölustafa kóða"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Pöruð tæki"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Tengt"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Upplýsingar um tæki"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Gleyma"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Fingrafar tækis: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Tenging mistókst"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Gakktu úr skugga um að <xliff:g id="DEVICE_NAME">%1$s</xliff:g> sé tengt réttu neti"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Para við tæki"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi-Fi pörunarkóði"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Pörun mistókst"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Gakktu úr skugga um að tækið sé tengt sama neti."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Tengja tæki með Wi-Fi með því að skanna QR-kóða"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Parar tæki…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Ekki tókst að para við tækið. Annað hvort var QR-kóðinn rangur eða tækið ekki tengt sama neti."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-tala og gátt"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skanna QR-kóða"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Tengja tæki með Wi-Fi með því að skanna QR-kóða"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, villuleit, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Flýtileið í villutilkynningu"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Sýna hnapp til að skrá villutilkynningu í valmynd aflrofans"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Vaka"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Nota vélbúnaðarhröðun fyrir tjóðrun ef það býðst"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Leyfa USB-villuleit?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB-villuleit er aðeins ætluð til nota í þróunarskyni. Hana má nota til að afrita gögn á milli tölvu og tækis, setja forrit upp í tækinu án tilkynninga og lesa annálagögn."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Leyfa þráðlausa villuleit?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Þráðlaus villuleit er aðeins ætluð til nota í þróunarskyni. Hana má nota til að afrita gögn á milli tölvu og tækis, setja forrit upp í tækinu án tilkynninga og lesa annálagögn."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Afturkalla aðgang að USB-villuleit í öllum tölvum sem þú hefur áður veitt heimild?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Leyfa þróunarstillingar?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Þessar stillingar eru einungis ætlaðar í þróunarskyni. Þær geta valdið því að tækið og forrit þess bili eða starfi á rangan hátt."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Litblinda (rauðgræn)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Litblinda (blágul)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Litaleiðrétting"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Litaleiðrétting hjálpar fólki með litblindu að sjá réttari liti"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Litaleiðrétting hjálpar fólki með litblindu að sjá réttari liti"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Hnekkt af <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">"Um það bil <xliff:g id="TIME_REMAINING">%1$s</xliff:g> eftir"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Minna en <xliff:g id="THRESHOLD">%1$s</xliff:g> eftir (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Meira en <xliff:g id="TIME_REMAINING">%1$s</xliff:g> eftir (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Meira en <xliff:g id="TIME_REMAINING">%1$s</xliff:g> eftir"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Síminn gæti slökkt á sér fljótlega"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Spjaldtölvan gæti slökkt á sér fljótlega"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Tækið gæti slökkt á sér fljótlega"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Síminn gæti slökkt á sér fljótlega (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Spjaldtölvan gæti slökkt á sér fljótlega (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Tækið gæti slökkt á sér fljótlega (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Síminn gæti slökkt á sér fljótlega"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Spjaldtölvan gæti slökkt á sér fljótlega"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Tækið gæti slökkt á sér fljótlega"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Síminn gæti slökkt á sér fljótlega (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Spjaldtölvan gæti slökkt á sér fljótlega (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Tækið gæti slökkt á sér fljótlega (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> að fullri hleðslu"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> að fullri hleðslu"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Óþekkt"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Í hleðslu"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"í hleðslu"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Hröð hleðsla"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Hæg hleðsla"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ekki í hleðslu"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Í sambandi, ekki hægt að hlaða eins og er"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Fullhlaðin"</string>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 50e5777..f0dba68 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Connesso tramite <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Disponibile tramite %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Tocca per registrarti"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Internet assente"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Non è possibile accedere al server DNS privato"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Connessione limitata"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Nessuna connessione a Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Debug USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Modalità debug quando è connesso tramite USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revoca autorizzazioni debug USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Debug wireless"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Modalità Debug quando il Wi-Fi è connesso"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Errore"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Debug wireless"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Per trovare e utilizzare i dispositivi disponibili, attiva il debug wireless"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Accoppia il dispositivo con il codice QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Accoppia i nuovi dispositivi utilizzando lo scanner di codici QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Accoppia dispositivo con codice di accoppiamento"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Accoppia i nuovi dispositivi utilizzando un codice di sei cifre"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Dispositivi accoppiati"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Attualmente connesso"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Dettagli dispositivo"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Elimina"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Impronta dispositivo: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Connessione non riuscita"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Assicurati che il dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g> sia connesso alla rete corretta"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Accoppia con dispositivo"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Codice di accoppiamento Wi-Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Accoppiamento non riuscito"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Assicurati che il dispositivo sia connesso alla stessa rete."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Accoppia il dispositivo tramite Wi-Fi eseguendo la scansione di un codice QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Accoppiamento dispositivo…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Impossibile accoppiare il dispositivo. Il codice QR non era corretto oppure il dispositivo non è connesso alla stessa rete."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Indirizzo IP e porta"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scansiona codice QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Accoppia il dispositivo tramite Wi-Fi eseguendo la scansione di un codice QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"ADB, debug, sviluppatori"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Scorciatoia segnalazione bug"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostra un pulsante per segnalare i bug nel menu di accensione"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Rimani attivo"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Utilizza l\'accelerazione hardware per il tethering se disponibile"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Consentire debug USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Il debug USB è solo a scopo di sviluppo. Utilizzalo per copiare dati tra il computer e il dispositivo, per installare applicazioni sul tuo dispositivo senza notifica e per leggere i dati dei log."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Consentire debug wireless?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Il debug wireless è solo a scopo di sviluppo. Utilizzalo per copiare dati tra il computer e il dispositivo, per installare app sul tuo dispositivo senza notifica e per leggere i dati dei log."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Revocare l\'accesso al debug USB da tutti i computer precedentemente autorizzati?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Consentire impostazioni di sviluppo?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Queste impostazioni sono utilizzabili solo a scopo di sviluppo. Possono causare l\'arresto o il comportamento anomalo del dispositivo e delle applicazioni su di esso."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalìa (rosso-verde)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalìa (blu-giallo)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Correzione del colore"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"La correzione del colore consente alle persone daltoniche di vedere colori più accurati"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"La correzione del colore consente alle persone daltoniche di vedere colori più accurati"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Valore sostituito da <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">"Tempo rimanente: <xliff:g id="TIME_REMAINING">%1$s</xliff:g> circa"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Tempo rimanente: meno di <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Tempo rimanente: più di <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Tempo rimanente: più di <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Il telefono potrebbe spegnersi a breve"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Il tablet potrebbe spegnersi a breve"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Il dispositivo potrebbe spegnersi a breve"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Il telefono potrebbe spegnersi a breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Il tablet potrebbe spegnersi a breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Il dispositivo potrebbe spegnersi a breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Il telefono potrebbe spegnersi a breve"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Il tablet potrebbe spegnersi a breve"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Il dispositivo potrebbe spegnersi a breve"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Il telefono potrebbe spegnersi a breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Il tablet potrebbe spegnersi a breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Il dispositivo potrebbe spegnersi a breve (<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="7415639699283965818">"Tempo rimanente alla carica completa: <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> alla carica completa"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Sconosciuta"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"In carica"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"in carica"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ricarica veloce"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Ricarica lenta"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Non in carica"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Collegato alla corrente. Impossibile caricare al momento"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Carica"</string>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 9f1e457..524a87d 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"מחוברת באמצעות <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"‏זמינה דרך %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"יש להקיש כדי להירשם"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"אין אינטרנט"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"‏לא ניתן לגשת לשרת DNS הפרטי"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"חיבור מוגבל"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"אין אינטרנט"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"‏התאמת מכשיר באמצעות קוד QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"‏התאמת מכשירים חדשים באמצעות סורק של קודי QR"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"פרטי מכשיר"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"אפשר לשכוח"</string>
+    <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_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_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_description" msgid="8578868049289910131">"‏יש לסרוק קוד QR כדי להתאים מכשיר באמצעות 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="keep_screen_on" msgid="1187161672348797558">"שיישאר פועל"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"האם להתיר הגדרות פיתוח?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"הגדרות אלה מיועדות לשימוש בפיתוח בלבד. הן עלולות לגרום למכשיר או לאפליקציות המותקנות בו לקרוס או לפעול באופן לא תקין."</string>
@@ -384,7 +412,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="9137381746633858694">"תיקון צבע עוזר למשתמשים עם עיוורון צבעים לראות צבעים מדויקים יותר"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"תיקון צבע עוזר לאנשים עם עיוורון צבעים לראות צבעים באופן מדויק יותר"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"נותרו פחות מ-<xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"נותרו יותר מ-<xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"הזמן שנותר: יותר מ-<xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ייתכן שהטלפון ייכבה בקרוב"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ייתכן שהטאבלט ייכבה בקרוב"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"ייתכן שהמכשיר ייכבה בקרוב"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ייתכן שהטלפון ייכבה בקרוב (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ייתכן שהטאבלט ייכבה בקרוב (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"ייתכן שהמכשיר ייכבה בקרוב (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"הטלפון עלול להיכבות בקרוב"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"הטאבלט עלול להיכבות בקרוב"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"המכשיר עלול להיכבות בקרוב"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"הטלפון עלול להיכבות בקרוב (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"הטאבלט עלול להיכבות בקרוב (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"נשארו <xliff:g id="TIME">%1$s</xliff:g> עד הטעינה"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"בטעינה"</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_discharging" msgid="6962689305413556485">"לא בטעינה"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"המכשיר מחובר, אבל לא ניתן לטעון עכשיו"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"מלאה"</string>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 47020ed..acefe20 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> で接続しました"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s経由で使用可能"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"タップして登録してください"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"インターネットに接続されていません"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"プライベート DNS サーバーにアクセスできません"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"接続が制限されています"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"インターネット未接続"</string>
@@ -204,9 +203,36 @@
     <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="enable_adb" msgid="8072776357237289039">"USBデバッグ"</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="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>
+    <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">"QR コードによるデバイスのペア設定"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR コードスキャナを使って新しいデバイスをペア設定します"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"ペア設定コードによるデバイスのペア設定"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"6 桁のコードを使って新しいデバイスをペア設定します"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"ペア設定済みのデバイス"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"現在接続"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"デバイスの詳細"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"削除"</string>
+    <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_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_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_description" msgid="8578868049289910131">"QR コードをスキャンして Wi-Fi 経由でデバイスをペア設定します"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, デバッグ, dev"</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>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"開発用の設定を許可しますか?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"これらの設定は開発専用に設計されています。そのためデバイスやデバイス上のアプリが故障したり正常に動作しなくなったりするおそれがあります。"</string>
@@ -384,7 +412,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="9137381746633858694">"色補正機能を利用すると、色覚異常のユーザーがより正確に色を判別できるようになります"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"色補正機能を利用すると、色覚障がいのある方がより正確に色を判別できるようになります"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"残り時間: <xliff:g id="THRESHOLD">%1$s</xliff:g>未満(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"残り時間: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>以上(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"残り時間: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>以上"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"スマートフォンの電源がもうすぐ切れます"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"タブレットの電源がもうすぐ切れます"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"デバイスの電源がもうすぐ切れます"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"スマートフォンの電源がもうすぐ切れます(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"タブレットの電源がもうすぐ切れます(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"デバイスの電源がもうすぐ切れます(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"スマートフォンの電源がもうすぐ切れます"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"タブレットの電源がもうすぐ切れます"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"デバイスの電源がもうすぐ切れます"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"スマートフォンの電源がもうすぐ切れます(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"タブレットの電源がもうすぐ切れます(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"充電完了まであと <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - 充電完了まで <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"充電しています"</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_discharging" msgid="6962689305413556485">"充電していません"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"接続されていますが、現在、充電できません"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"フル"</string>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 116488d..ddc46ad 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"დაკავშირებულია <xliff:g id="NAME">%1$s</xliff:g>-ით"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"ხელმისაწვდომია %1$s-ით"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"შეეხეთ რეგისტრაციისთვის"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"ინტერნეტ-კავშირი არ არის"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"პირად DNS სერვერზე წვდომა შეუძლებელია"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"შეზღუდული კავშირი"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"ინტერნეტ-კავშირი არ არის"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"ახალი მოწყობილობების დაწყვილება QR კოდით"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"ახალი მოწყობილობების დაწყვილება QR კოდის სკანერის გამოყენებით"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"მოწყობილობის დეტალები"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"დავიწყება"</string>
+    <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_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-ის მეშვეობით QR კოდის სკანირებით"</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_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="8578868049289910131">"მოწყობილობის დაწყვილება Wi-Fi-ის მეშვეობით QR კოდის სკანირებით"</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="keep_screen_on" msgid="1187161672348797558">"არ დაიძინო"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"გსურთ, დეველოპმენტის პარამეტრების ნების დართვა?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"ამ პარამეტრების გამოყენება დასაშვებია მხოლოდ დეველოპერული მიზნებით. მათმა გამოყენებამ შეიძლება გამოიწვიოს თქვენი მოწყობილობის და მისი აპლიკაციების დაზიანება ან გაუმართავი მუშაობა."</string>
@@ -384,7 +412,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="9137381746633858694">"ფერის კორექცია ეხმარება ფერითი სიბრმავის მქონე ადამიანებს, უფრო ზუსტად გაარჩიონ ფერები"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"ფერის კორექცია ეხმარება ფერითი სიბრმავის მქონე ადამიანებს, უფრო ზუსტად გაარჩიონ ფერები"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"დარჩენილია <xliff:g id="THRESHOLD">%1$s</xliff:g>-ზე ნაკლები დრო (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"დარჩენილია <xliff:g id="TIME_REMAINING">%1$s</xliff:g>-ზე მეტი დრო (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"დარჩენილია <xliff:g id="TIME_REMAINING">%1$s</xliff:g>-ზე მეტი დრო"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ტელეფონი შეიძლება მალე გაითიშოს"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ტაბლეტი შეიძლება მალე გაითიშოს"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"მოწყობილობა შეიძლება მალე გაითიშოს"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ტელეფონი შეიძლება მალე გაითიშოს (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ტაბლეტი შეიძლება მალე გაითიშოს (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"მოწყობილობა შეიძლება მალე გაითიშოს (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"ტელეფონი შეიძლება მალე გათიშოს"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ტაბლეტი შეიძლება მალე გაითიშოს"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"მოწყობილობა შეიძლება მალე გაითიშოს"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"ტელეფონი შეიძლება მალე გაითიშოს (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ტაბლეტი შეიძლება მალე გაითიშოს (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"დატენვამდე დარჩა <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"იტენება"</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_discharging" msgid="6962689305413556485">"არ იტენება"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"მიერთებულია, დატენვა ამჟამად ვერ ხერხდება"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"ბატარეა დატენილია"</string>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index 3c4fdb7..47babb1 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> арқылы жалғанған"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s арқылы қолжетімді"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Тіркелу үшін түртіңіз."</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Интернетпен байланыс жоқ."</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Жеке DNS серверіне кіру мүмкін емес."</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Шектеулі байланыс"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Интернетпен байланыс жоқ"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"Құрылғыны QR коды арқылы жұптау"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Жаңа құрылғыларды QR коды сканері арқылы жұптау"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Құрылғы мәліметтері"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Ұмыту"</string>
+    <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_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_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_description" msgid="8578868049289910131">"QR кодын сканерлеп, құрылғыны 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="keep_screen_on" msgid="1187161672348797558">"Ояу тұру"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"Жетілдіру параметрлеріне рұқсат берілсін бе?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Бұл параметрлер жетілдіру мақсатында ғана қолданылады. Олар құрылғыңыз бен қолданбаларыңыздың бұзылуына немесе әдеттен тыс әрекеттерге себеп болуы мүмкін."</string>
@@ -384,7 +412,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="9137381746633858694">"Түсті түзету түсті ажырата алмайтын адамдарға оларды дәлірек көруге көмектеседі"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Түсті түзету функциясы түстерді ажырата алмайтын адамдарға оларды дәлірек көруге көмектеседі"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> шамасынан аз қалды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> шамасынан көп уақыт қалды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> шамасынан көп уақыт қалды"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Телефон көп ұзамай өшуі мүмкін"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Планшет көп ұзамай өшуі мүмкін"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Құрылғы көп ұзамай өшуі мүмкін"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Телефон көп ұзамай өшуі мүмкін (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Планшет көп ұзамай өшуі мүмкін (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Құрылғы көп ұзамай өшуі мүмкін (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Телефон көп ұзамай өшуі мүмкін"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Планшет көп ұзамай өшуі мүмкін"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Құрылғы көп ұзамай өшуі мүмкін"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Телефон көп ұзамай өшуі мүмкін (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Планшет көп ұзамай өшуі мүмкін (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"Зарядталғанға дейін <xliff:g id="TIME">%1$s</xliff:g> қалды"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – зарядталғанға дейін <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"зарядталуда"</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_discharging" msgid="6962689305413556485">"Зарядталу орындалып жатқан жоқ"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Қосылған, зарядталмайды"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Толы"</string>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index 87a4f19..f62408d 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"ភ្ជាប់​តាម <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"មានតាមរយៈ %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"ចុច​ដើម្បី​ចុះឈ្មោះ"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"គ្មាន​អ៊ីនធឺណិតទេ"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"មិនអាច​ចូលប្រើ​ម៉ាស៊ីនមេ DNS ឯកជន​បានទេ"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"ការតភ្ជាប់មានកម្រិត"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"គ្មាន​អ៊ីនធឺណិតទេ"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"ផ្គូផ្គង​ឧបករណ៍​ដោយប្រើ​កូដ QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"ផ្គូផ្គង​ឧបករណ៍​ថ្មី​ដោយប្រើ​កម្មវិធីស្កេន​កូដ QR"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"ព័ត៌មានលម្អិត​អំពី​ឧបករណ៍"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"បំភ្លេច"</string>
+    <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_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 ដោយស្កេន​កូដ QR"</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_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="8578868049289910131">"ផ្គូផ្គង​ឧបករណ៍​តាមរយៈ Wi‑Fi ដោយស្កេន​កូដ QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ជួសជុល, dev"</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>
@@ -272,6 +298,8 @@
     <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="adbwifi_warning_title" msgid="727104571653031865">"អនុញ្ញាត​ការជួសជុល​ដោយឥតខ្សែ​ឬ?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"ការជួសជុល​ដោយឥតខ្សែ​គឺសម្រាប់​តែ​ការ​អភិវឌ្ឍ​ប៉ុណ្ណោះ។ ប្រើ​ការជួសជុល​ដោយឥតខ្សែ ដើម្បី​ចម្លង​ទិន្នន័យ​រវាង​កុំព្យូទ័រ និង​ឧបករណ៍​របស់អ្នក ដំឡើង​កម្មវិធី​នៅលើ​ឧបករណ៍​របស់អ្នក​ដោយ​គ្មានការ​ជូន​ដំណឹង និង​អាន​ទិន្នន័យ​កំណត់ហេតុ។"</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"ដក​សិទ្ធិ​ចូល​ការ​កែ​កំហុស​តាម​យូអេសប៊ី​ពី​គ្រប់​កុំព្យូទ័រ​ដែល​អ្នក​បាន​ផ្ដល់​សិទ្ធិ​ពី​មុន?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"អនុញ្ញាត​កំណត់​ការ​អភិវឌ្ឍ?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"ការ​កំណត់​ទាំង​នេះ​សម្រាប់​តែ​ការ​ប្រើ​ក្នុង​ការ​អភិវឌ្ឍ​ប៉ុណ្ណោះ។ ពួក​វា​អាច​ធ្វើ​ឲ្យ​ឧបករណ៍ និង​កម្មវិធី​របស់​អ្នក​ខូច ឬ​ដំណើរ​មិន​ត្រឹមត្រូវ។"</string>
@@ -384,7 +412,7 @@
     <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_subtitle" msgid="9137381746633858694">"ការកែតម្រូវ​ពណ៌​ជួយដល់​អ្នកដែល​មិនអាច​បែងចែក​ពណ៌​ឱ្យមើលឃើញ​ពណ៌ដែលត្រឹមត្រូវ​ជាមុន"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"ការកែតម្រូវ​ពណ៌​ជួយដល់​អ្នកដែល​មិនអាច​បែងចែក​ពណ៌​ឱ្យមើលឃើញ​ពណ៌ដែលត្រឹមត្រូវ​ជាងមុន"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"នៅសល់​តិចជាង <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"នៅសល់​ច្រើនជាង <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"នៅ​សល់​ច្រើន​ជាង <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ទូរសព្ទ​អាចនឹង​បិទក្នុង​ពេលបន្តិច​ទៀត"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ថេប្លេត​អាចនឹង​បិទក្នុង​ពេលបន្តិច​ទៀត"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"ឧបករណ៍​អាចនឹង​បិទក្នុង​ពេលបន្តិច​ទៀត"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ទូរសព្ទ​អាចនឹង​បិទក្នុង​ពេលបន្តិច​ទៀត (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ថេប្លេត​អាចនឹង​បិទក្នុង​ពេលបន្តិច​ទៀត (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"ឧបករណ៍​អាចនឹង​បិទក្នុង​ពេលបន្តិច​ទៀត (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"ទូរសព្ទ​អាច​នឹង​បិទ​ក្នុង​ពេល​បន្តិច​ទៀត"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ថេប្លេត​អាចនឹង​បិទក្នុង​ពេលបន្តិច​ទៀត"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"ឧបករណ៍​អាចនឹង​បិទក្នុង​ពេលបន្តិច​ទៀត"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"ទូរសព្ទ​អាចនឹង​បិទក្នុង​ពេលបន្តិច​ទៀត (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ថេប្លេត​អាចនឹង​បិទក្នុង​ពេលបន្តិច​ទៀត (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> ទៀតទើប​ត្រូវសាក"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"កំពុង​សាក​ថ្ម"</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_discharging" msgid="6962689305413556485">"មិនកំពុង​បញ្ចូល​ថ្ម"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"ដោត​សាកថ្ម​រួចហើយ ប៉ុន្តែ​​សាកថ្ម​មិន​ចូលទេឥឡូវនេះ"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"ពេញ"</string>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index 144dddb..39d6069 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> ಆ್ಯಪ್ ಮೂಲಕ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"ಸೈನ್ ಅಪ್ ಮಾಡಲು ಟ್ಯಾಪ್‌ ಮಾಡಿ"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"ಖಾಸಗಿ DNS ಸರ್ವರ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"ಸೀಮಿತ ಸಂಪರ್ಕ"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ"</string>
@@ -207,6 +206,33 @@
     <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="enable_adb_wireless" msgid="6973226350963971018">"ವೈರ್‌ಲೆಸ್ ಡೀಬಗ್ ಮಾಡುವಿಕೆ"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"ವೈ-ಫೈ ಕನೆಕ್ಟ್ ಆದಾಗ ಡೀಬಗ್ ಮೋಡ್"</string>
+    <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">"QR ಕೋಡ್ ಬಳಸಿ ಸಾಧನವನ್ನು ಜೋಡಿಸಿ"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR ಕೋಡ್ ಸ್ಕ್ಯಾನರ್ ಬಳಸಿ ಹೊಸ ಸಾಧನಗಳನ್ನು ಜೋಡಿಸಿ"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"ಸಾಧನದ ವಿವರಗಳು"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"ಮರೆತುಬಿಡಿ"</string>
+    <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_pairing_code_label" msgid="3639239786669722731">"ವೈ-ಫೈ ಜೋಡಿಸುವಿಕೆ ಕೋಡ್"</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 ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡುವ ಮೂಲಕ ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಸಾಧನವನ್ನು ಜೋಡಿಸಿ"</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_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="8578868049289910131">"QR ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡುವ ಮೂಲಕ ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಸಾಧನವನ್ನು ಜೋಡಿಸಿ"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ಡೀಬಗ್, dev"</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>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"ಅಭಿವೃದ್ಧಿಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಅನುಮತಿಸುವುದೇ?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"ಈ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಅಭಿವೃದ್ಧಿಯ ಬಳಕೆಗೆ ಮಾತ್ರ. ಅವುಗಳು ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್‌‌ಗಳಿಗೆ ಧಕ್ಕೆ ಮಾಡಬಹುದು ಅಥವಾ ಅವು ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರುವಂತೆ ಮಾಡಬಹುದು."</string>
@@ -384,7 +412,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="9137381746633858694">"ವರ್ಣ ಅಂಧತ್ವ ಹೊಂದಿರುವ ಜನರಿಗೆ ಬಣ್ಣಗಳನ್ನು ಹೆಚ್ಚು ನಿಖರವಾಗಿ ವೀಕ್ಷಿಸಲು ಬಣ್ಣ ತಿದ್ದುಪಡಿ ಸಹಾಯ ಮಾಡುತ್ತದೆ"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"ವರ್ಣ ಅಂಧತ್ವ ಹೊಂದಿರುವ ಜನರಿಗೆ ಬಣ್ಣಗಳನ್ನು ಹೆಚ್ಚು ನಿಖರವಾಗಿ ವೀಕ್ಷಿಸಲು ಬಣ್ಣ ತಿದ್ದುಪಡಿ ಸಹಾಯ ಮಾಡುತ್ತದೆ"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ಕ್ಕಿಂತ ಕಡಿಮೆ (<xliff:g id="LEVEL">%2$s</xliff:g>) ಬಾಕಿ"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ಕ್ಕಿಂತ ಹೆಚ್ಚು (<xliff:g id="LEVEL">%2$s</xliff:g>) ಬಾಕಿ"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ಕ್ಕಿಂತ ಹೆಚ್ಚು ಸಮಯ ಉಳಿದಿದೆ"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ಫೋನ್ ಶೀಘ್ರದಲ್ಲೇ ಶಟ್ ಡೌನ್ ಆಗಬಹುದು"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ಟ್ಯಾಬ್ಲೆಟ್‌‌ ಶೀಘ್ರದಲ್ಲೇ ಶಟ್ ಡೌನ್ ಆಗಬಹುದು"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"ಸಾಧನವು ಶೀಘ್ರದಲ್ಲೇ ಶಟ್ ಡೌನ್ ಆಗಬಹುದು"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ಫೋನ್ ಶೀಘ್ರದಲ್ಲೇ ಶಟ್ ಡೌನ್ ಆಗಬಹುದು (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ಟ್ಯಾಬ್ಲೆಟ್‌‌ ಶೀಘ್ರದಲ್ಲೇ ಶಟ್ ಡೌನ್ ಆಗಬಹುದು (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"ಸಾಧನವು ಶೀಘ್ರದಲ್ಲೇ ಶಟ್ ಡೌನ್ ಆಗಬಹುದು (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"ಫೋನ್ ಶೀಘ್ರದಲ್ಲೇ ಶಟ್ ಡೌನ್ ಆಗಬಹುದು"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ಟ್ಯಾಬ್ಲೆಟ್‌‌ ಶೀಘ್ರದಲ್ಲೇ ಶಟ್ ಡೌನ್ ಆಗಬಹುದು"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"ಸಾಧನವು ಶೀಘ್ರದಲ್ಲೇ ಶಟ್ ಡೌನ್ ಆಗಬಹುದು"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"ಫೋನ್ ಶೀಘ್ರದಲ್ಲೇ ಶಟ್ ಡೌನ್ ಆಗಬಹುದು (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ಟ್ಯಾಬ್ಲೆಟ್‌‌ ಶೀಘ್ರದಲ್ಲೇ ಶಟ್ ಡೌನ್ ಆಗಬಹುದು (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"ಚಾರ್ಜ್ ಆಗಲು <xliff:g id="TIME">%1$s</xliff:g> ಸಮಯ ಬಾಕಿ ಇದೆ"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - ಚಾರ್ಜ್ ಆಗಲು <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</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_discharging" msgid="6962689305413556485">"ಚಾರ್ಜ್‌ ಆಗುತ್ತಿಲ್ಲ"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"ಪ್ಲಗ್ ಇನ್ ಮಾಡಲಾಗಿದೆ, ಇದೀಗ ಚಾರ್ಜ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"ಭರ್ತಿ"</string>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index df9f21d..1ac029c 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g>을(를) 통해 연결됨"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s을(를) 통해 사용 가능"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"탭하여 가입"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"인터넷 연결 없음"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"비공개 DNS 서버에 액세스할 수 없습니다."</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"제한된 연결"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"인터넷 연결 없음"</string>
@@ -191,7 +190,7 @@
     <item msgid="5664310435707146591">"더 빠르게"</item>
     <item msgid="5491266922147715962">"매우 빠르게"</item>
     <item msgid="7659240015901486196">"상당히 빠르게"</item>
-    <item msgid="7147051179282410945">"매우 빠르게"</item>
+    <item msgid="7147051179282410945">"굉장히 빠르게"</item>
     <item msgid="581904787661470707">"가장 빠르게"</item>
   </string-array>
     <string name="choose_profile" msgid="343803890897657450">"프로필 선택"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"QR 코드로 기기 페어링"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR 코드 스캐너를 사용하여 새 기기 페어링"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"페어링 코드로 기기 페어링"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"6자리 코드를 사용하여 새 기기 페어링"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"페어링된 기기"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"현재 연결된 기기"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"기기 세부정보"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"저장 안함"</string>
+    <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_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_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_description" msgid="8578868049289910131">"QR 코드를 스캔하여 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="keep_screen_on" msgid="1187161672348797558">"화면 켜짐 상태 유지"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"개발자 설정을 허용하시겠습니까?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"이 설정은 개발자용으로만 설계되었습니다. 이 설정을 사용하면 기기 및 애플리케이션에 예기치 않은 중단이나 오류가 발생할 수 있습니다."</string>
@@ -384,7 +412,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="9137381746633858694">"색상 보정을 사용하면 색맹인 사용자가 색상을 정확하게 구분하는 데 도움이 됩니다."</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"색상 보정을 사용하면 색맹인 사용자가 색상을 정확하게 구분하는 데 도움이 됩니다."</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> 미만 남음(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> 이상 남음(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> 이상 남음"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"휴대전화가 곧 종료될 수 있음"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"태블릿이 곧 종료될 수 있음"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"기기가 곧 종료될 수 있음"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"휴대전화가 곧 종료될 수 있음(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"태블릿이 곧 종료될 수 있음(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"기기가 곧 종료될 수 있음(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"휴대전화가 곧 종료될 수 있음"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"태블릿이 곧 종료될 수 있음"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"기기가 곧 종료될 수 있음"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"휴대전화가 곧 종료될 수 있음(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"태블릿이 곧 종료될 수 있음(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"충전 완료까지 <xliff:g id="TIME">%1$s</xliff:g> 남음"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - 충전 완료까지 <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"충전 중"</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_discharging" msgid="6962689305413556485">"충전 안함"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"전원이 연결되었지만 현재 충전할 수 없음"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"충전 완료"</string>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index 13c4144..2070056 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -31,7 +31,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>
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> аркылуу туташты"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s аркылуу жеткиликтүү"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Катталуу үчүн таптап коюңуз"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Интернет жок"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Жеке DNS сервери жеткиликсиз"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Байланыш чектелген"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Интернет жок"</string>
@@ -126,7 +125,7 @@
     <string name="bluetooth_talkback_phone" msgid="868393783858123880">"Телефон"</string>
     <string name="bluetooth_talkback_imaging" msgid="8781682986822514331">"Сүрөт тартуучу түзмөк"</string>
     <string name="bluetooth_talkback_headphone" msgid="8613073829180337091">"Кулакчын"</string>
-    <string name="bluetooth_talkback_input_peripheral" msgid="5133944817800149942">"Дайындарды киргизүүчү сырткы түзмөк"</string>
+    <string name="bluetooth_talkback_input_peripheral" msgid="5133944817800149942">"Дайындарды киргизүүчү тышкы түзмөк"</string>
     <string name="bluetooth_talkback_bluetooth" msgid="1143241359781999989">"Bluetooth"</string>
     <string name="bluetooth_hearingaid_left_pairing_message" msgid="8561855779703533591">"Угуу аппаратынын сол кулагы жупташтырылууда…"</string>
     <string name="bluetooth_hearingaid_right_pairing_message" msgid="2655347721696331048">"Угуу аппаратынын оң кулагы жупташтырылууда…"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"QR кодун колдонуп, түзмөктү жупташтырыңыз"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR кодунун сканерин колдонуп, жаңы түзмөктөрдү жупташтырыңыз"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Түзмөктүн чоо-жайы"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Унутулсун"</string>
+    <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_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_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_description" msgid="8578868049289910131">"QR кодун скандап, түзмөктү 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="keep_screen_on" msgid="1187161672348797558">"Ойгоо туруу"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"Жөндөөлөрдү өзгөртүү"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Бул орнотуулар өндүрүүчүлөр үчүн гана берилген. Булар түзмөгүңүздүн колдонмолорун бузулушуна же туура эмес иштешине алып келиши мүмкүн."</string>
@@ -369,7 +397,7 @@
     <string name="runningservices_settings_summary" msgid="1046080643262665743">"Учурда иштеп жаткан кызматтарды көрүп, көзөмөлдөп турасыз"</string>
     <string name="select_webview_provider_title" msgid="3917815648099445503">"WebView кызматы"</string>
     <string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView аткарылышын коюу"</string>
-    <string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Тандалган нерсе жараксыз болуп калган. Кайра аракет кылыңыз."</string>
+    <string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Тандалган нерсе жараксыз болуп калган. Кайталап көрүңүз."</string>
     <string name="convert_to_file_encryption" msgid="2828976934129751818">"Файлдарды шифрлөөгө өтүү"</string>
     <string name="convert_to_file_encryption_enabled" msgid="840757431284311754">"Айландыруу…"</string>
     <string name="convert_to_file_encryption_done" msgid="8965831011811180627">"Файл мурунтан эле шифрленген"</string>
@@ -384,7 +412,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="9137381746633858694">"Түстү тууралоо жөндөөсү түстөрдү айырмалап көрбөгөн адамдарга түстөрдү тагыраак билүүгө жардам берет"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Түстү тууралоо жөндөөсү түстөрдү айырмалап көрбөгөн адамдарга түстөрдү тагыраак билүүгө жардам берет"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> жетпеген убакыт калды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ашыгыраак убакыт калды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ашыгыраак убакыт калды"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Телефон бир аздан кийин өчүп калышы мүмкүн"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Планшет бир аздан кийин өчүп калышы мүмкүн"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Түзмөк бир аздан кийин өчүп калышы мүмкүн"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Телефон бир аздан кийин өчүп калышы мүмкүн (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Планшет бир аздан кийин өчүп калышы мүмкүн (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Түзмөк бир аздан кийин өчүп калышы мүмкүн (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Телефон бир аздан кийин өчүп калышы мүмкүн"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Планшет бир аздан кийин өчүп калышы мүмкүн"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Түзмөк бир аздан кийин өчүп калышы мүмкүн"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Телефон бир аздан кийин өчүп калышы мүмкүн (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Планшет бир аздан кийин өчүп калышы мүмкүн (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> кийин кубатталат"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"кубатталууда"</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_discharging" msgid="6962689305413556485">"Кубат алган жок"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Сайылып турат, учурда кубаттоо мүмкүн эмес"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Толук"</string>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 48224f4..5d504d4 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"ເຊື່ອມ​ຕໍ່​ຜ່ານ <xliff:g id="NAME">%1$s</xliff:g> ແລ້ວ"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"ມີ​ໃຫ້​ຜ່ານ %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"ແຕະເພື່ອສະໝັກ"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"ບໍ່ມີອິນເຕີເນັດ"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"ບໍ່ສາມາດເຂົ້າເຖິງເຊີບເວີ DNS ສ່ວນຕົວໄດ້"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"ການເຊື່ອມຕໍ່ຈຳກັດ"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"ບໍ່ມີອິນເຕີເນັດ"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"ຈັບຄູ່ອຸປະກອນດ້ວຍລະຫັດ QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"ຈັບຄູ່ອຸປະກອນໃໝ່ໂດຍໃຊ້ຕົວສະແກນລະຫັດ QR"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"ລາຍລະອຽດອຸປະກອນ"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"ລືມ"</string>
+    <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_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 ໂດຍການສະແກນລະຫັດ QR"</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_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="8578868049289910131">"ຈັບຄູ່ອຸປະກອນຜ່ານ Wi‑Fi ໂດຍການສະແກນລະຫັດ QR"</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="keep_screen_on" msgid="1187161672348797558">"ເປີດໜ້າຈໍຕະຫຼອດ"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"ອະນຸຍາດການຕັ້ງຄ່າສຳລັບນັກພັດທະນາ?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"ການ​ຕັ້ງຄ່າ​ເຫຼົ່ານີ້​ແມ່ນ​ມີ​ຈຸດປະສົງ​ເພື່ອ​ການ​ພັດທະນາ​ເທົ່ານັ້ນ. ພວກ​ມັນ​ສາມາດ​ເຮັດ​ໃຫ້​ອຸປະກອນ ແລະ​ແອັບພລິເຄຊັນ​ຂອງ​ທ່ານ​ຢຸດ​ເຮັດ​ວຽກ ຫຼື​ເຮັດ​ວຽກ​ຜິດປົກກະຕິ​ໄດ້."</string>
@@ -384,7 +412,7 @@
     <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_subtitle" msgid="9137381746633858694">"ການແກ້ໄຂສີຈະຊ່ວຍໃຫ້ຄົນທີ່ຕາບອດສີເຫັນສີຕ່າງໆໄດ້ຖືກຕ້ອງຍິ່ງຂຶ້ນ"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"ການແກ້ໄຂສີຈະຊ່ວຍໃຫ້ຄົນທີ່ຕາບອດສີສາມາດເບິ່ງເຫັນສີໄດ້ຖືກຕ້ອງຍິ່ງຂຶ້ນ"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"ຍັງເຫຼືອໜ້ອຍກວ່າ <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"ຍັງເຫຼືອຫຼາຍກວ່າ <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"ຍັງເຫຼືອຫຼາຍກວ່າ <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ໂທລະສັບອາດຈະປິດໃນໄວໆນີ້"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ແທັບເລັດອາດຈະປິດໃນໄວໆນີ້"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"ອຸປະກອນອາດຈະປິດໃນໄວໆນີ້"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ໂທລະສັບອາດຈະປິດໃນໄວໆນີ້ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ແທັບເລັດອາດຈະປິດໃນໄວໆນີ້ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"ອຸປະກອນອາດຈະປິດໃນໄວໆນີ້ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"ໂທລະສັບອາດປິດໃນໄວໆນີ້"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ແທັບເລັດອາດປິດໃນໄວໆນີ້"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"ອຸປະກອນອາດປິດໃນໄວໆນີ້"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"ໂທລະສັບອາດປິດໃນໄວໆນີ້ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ແທັບເລັດອາດປິດໃນໄວໆນີ້ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> ຈົນກວ່າຈະສາກເຕັມ"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"ກຳລັງສາກໄຟ"</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_discharging" msgid="6962689305413556485">"ບໍ່ໄດ້ສາກໄຟ"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"ສຽບສາຍແລ້ວ, ບໍ່ສາມາດສາກໄດ້ໃນຕອນນີ້"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"ເຕັມ"</string>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index d080334..6cdb547 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Prisijungta naudojant programą „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Pasiekiama naudojant „%1$s“"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Palieskite, kad prisiregistruotumėte"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nėra interneto ryšio"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Privataus DNS serverio negalima pasiekti"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Ribotas ryšys"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Nėra interneto ryšio"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB perkrova"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Derinimo režimas, kai prijungtas USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Panaikinti USB derinimo prieigos teises"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Belaidžio ryšio derinimas"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Derinimo režimas, kai prisijungta prie „Wi‑Fi“"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Klaida"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Belaidžio ryšio derinimas"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Jei norite peržiūrėti ir naudoti pasiekiamus įrenginius, įjunkite belaidžio ryšio derinimą"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Įrenginio susiejimas naudojant QR kodą"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Susiekite naujus įrenginius naudodami QR kodų skaitytuvą"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Įrenginio susiejimas naudojant susiejimo kodą"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Susiekite naujus įrenginius naudodami šešių skaitmenų kodą"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Susieti įrenginiai"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Šiuo metu prisijungta"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Išsami įrenginio informacija"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Pamiršti"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Įrenginio kontrolinis kodas: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Nepavyko užmegzti ryšio"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Įsitikinkite, kad <xliff:g id="DEVICE_NAME">%1$s</xliff:g> prijungtas prie tinkamo tinklo"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Susiejimas su įrenginiu"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"„Wi‑Fi“ susiejimo kodas"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Nepavyko susieti"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Įsitikinkite, kad įrenginys prijungtas prie to paties tinklo."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Susiekite įrenginį „Wi‑Fi“ ryšiu nuskaitydami QR kodą"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Susiejamas įrenginys…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Nepavyko susieti įrenginio. Netinkamas QR kodas arba įrenginys neprijungtas prie to paties tinklo."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adresas ir prievadas"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR kodo nuskaitymas"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Susiekite įrenginį „Wi‑Fi“ ryšiu nuskaitydami QR kodą"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"ADB, derinti, kūrėjas"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Pranešimo apie riktą spartusis klavišas"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Rodyti pranešimo apie riktą mygtuką maitinimo meniu"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Veikti"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Naudoti įrenginio kaip modemo naudojimo aparatinės įrangos spartinimą, jei pasiekiama"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Leisti USB perkrovimą?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB derinimas skirtas naudoti tik kūrimo tikslais. Jis gali būti naudojamas norint kopijuoti duomenis iš kompiuterio į įrenginį ir atvirkščiai, įdiegti programas įrenginyje be pranešimo ir skaityti žurnalo duomenis."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Leisti belaidžio ryšio derinimą?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Belaidžio ryšio derinimas skirtas naudoti tik kūrimo tikslais. Jis gali būti naudojamas norint kopijuoti duomenis iš kompiuterio į įrenginį ir atvirkščiai, įdiegti programas įrenginyje be pranešimo ir skaityti žurnalo duomenis."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Panaikinti visų kompiuterių, kuriems anksčiau suteikėte prieigos teisę, prieigą prie USB derinimo?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Leisti kūrėjų nustatymus?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Šie nustatymai skirti tik kūrėjams. Nustačius juos įrenginys ir jame naudojamos programos gali nustoti veikti arba veikti netinkamai."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalija (raudona, žalia)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalija (mėlyna, geltona)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Spalvų taisymas"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Naudojant spalvų taisymo funkciją daltonikai gali geriau matyti spalvas"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Naudojant spalvų taisymo funkciją daltonikai gali geriau matyti spalvas"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Nepaisyta naudojant nuostatą „<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">"Liko maždaug <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Liko mažiau nei <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Liko daugiau nei <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Liko daugiau nei <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefonas netrukus gali būti išjungtas"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Planšetinis komp. netrukus gali būti išjungtas"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Įrenginys netrukus gali būti išjungtas"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefonas netrukus gali būti išjungtas (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Planšetinis kompiuteris netrukus gali būti išjungtas (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Įrenginys netrukus gali būti išjungtas (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefonas netrukus gali būti išjungtas"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Planšetinis komp. netrukus gali būti išjungtas"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Įrenginys netrukus gali būti išjungtas"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefonas netrukus gali būti išjungtas (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Planšetinis komp. netrukus gali būti išjungtas (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Įrenginys netrukus gali būti išjungtas (<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="7415639699283965818">"Iki visiškos įkrovos liko <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – iki visiškos įkrovos liko <xliff:g id="TIME">%2$s</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Nežinomas"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Kraunasi..."</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"įkraunama"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Greitai įkraunama"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Lėtai įkraunama"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nekraunama"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Įjungta į maitinimo lizdą, bet šiuo metu įkrauti neįmanoma"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Visiškai įkrautas"</string>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index e13a50d..8257d53 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Savienojums ar <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Pieejams, izmantojot %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Pieskarieties, lai reģistrētos"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nav interneta"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Nevar piekļūt privātam DNS serverim."</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Ierobežots savienojums"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Nav piekļuves internetam"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB atkļūdošana"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Atkļūdošanas režīms, kad ir pievienota kopne USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Atsaukt piekļuvi USB atkļūdošanai"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Bezvadu atkļūdošana"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Atkļūdošanas režīms, kad Wi-Fi savienojums ir izslēgts"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Kļūda"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Bezvadu atkļūdošana"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Lai skatītu un izmantotu pieejamās ierīces, ieslēdziet bezvadu atkļūdošanu."</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Ierīču savienošana pārī, izmantojot QR kodu"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Savienot pārī jaunas ierīces, izmantojot QR koda skeneri"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Ierīču savienošana pārī, izmantojot kodu"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Savienojiet pārī jaunas ierīces, izmantojot sešu ciparu kodu"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Pārī savienotās ierīces"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Pašlaik pievienota"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Ierīces dati"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Neiegaumēt"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Ierīces ciparnospiedums: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Neizdevās izveidot savienojumu"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Ierīcei <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ir jābūt izveidotam savienojumam ar pareizo tīklu."</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Savienošana pārī ar ierīci"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi‑Fi kods savienošanai pārī"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Neizdevās izveidot savienojumu pārī"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Ierīcei ir jābūt izveidotam savienojumam ar to pašu tīklu."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Izveidojiet savienojumu pārī ar ierīci Wi‑Fi tīklā, skenējot QR kodu."</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Notiek savienošana pārī ar ierīci…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Neizdevās izveidot savienojumu pārī ar ierīci. QR kods nebija pareizs, vai ierīcei nebija izveidots savienojums ar to pašu tīklu."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adrese un ports"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR koda skenēšana"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Izveidojiet savienojumu pārī ar ierīci Wi‑Fi tīklā, skenējot QR kodu."</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, atkļūdošana, izstrādātājiem"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Kļūdu pārskata saīsne"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Izslēgšanas izvēlnē rādīt kļūdu pārskata veidošanas pogu"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Atstāt nomodā"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Izmantot paātrinātu aparatūras darbību piesaistei, ja tā ir pieejama"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Vai atļaut USB atkļūdošanu?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB atkļūdošana ir paredzēta tikai ar izstrādi saistītām darbībām. Izmantojiet to datu kopēšanai no datora uz ierīci un pretēji, lietotņu instalēšanai ierīcē bez paziņojumiem un žurnāla datu lasīšanai."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Vai atļaut bezvadu atkļūdošanu?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Bezvadu atkļūdošana ir paredzēta tikai ar izstrādi saistītām darbībām. Izmantojiet to datu kopēšanai no datora uz ierīci un pretēji, lietotņu instalēšanai ierīcē bez paziņojumiem un žurnāla datu lasīšanai."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Vai atcelt piekļuvi USB atkļūdošanai no visiem datoriem, kuriem iepriekš piešķīrāt piekļuvi?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Vai atļaut izstrādes iestatījumus?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Šie iestatījumi ir paredzēti tikai izstrādei. To dēļ var tikt pārtraukta vai traucēta ierīces un lietojumprogrammu darbība."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomālija (sarkans/zaļš)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomālija (zils/dzeltens)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Krāsu korekcija"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Krāsu korekcija palīdz cilvēkiem ar krāsu aklumu redzēt precīzākas krāsas."</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Krāsu korekcija palīdz lietotājiem ar krāsu aklumu redzēt precīzākas krāsas."</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Jaunā preference: <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">"Aptuvenais atlikušais laiks: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Atlicis mazāk nekā <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Atlicis vairāk nekā <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Atlicis vairāk nekā <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Iespējams, tālrunis drīz izslēgsies"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Iespējams, planšetdators drīz izslēgsies"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Iespējams, ierīce drīz izslēgsies"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Iespējams, tālrunis drīz izslēgsies (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Iespējams, planšetdators drīz izslēgsies (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Iespējams, ierīce drīz izslēgsies (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Tālrunis, iespējams, drīz izslēgsies."</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Planšetdators, iespējams, drīz izslēgsies."</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Ierīce, iespējams, drīz izslēgsies."</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Tālrunis, iespējams, drīz izslēgsies (<xliff:g id="LEVEL">%1$s</xliff:g>)."</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Planšetdators, iespējams, drīz izslēgsies (<xliff:g id="LEVEL">%1$s</xliff:g>)."</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Ierīce, iespējams, drīz izslēgsies (<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="7415639699283965818">"Vēl <xliff:g id="TIME">%1$s</xliff:g> līdz pilnai uzlādei"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> — <xliff:g id="TIME">%2$s</xliff:g> līdz pilnai uzlādei"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Nezināms"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Uzlāde"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"notiek uzlāde"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Notiek ātrā uzlāde"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Notiek lēnā uzlāde"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nenotiek uzlāde"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Pievienots, taču pašlaik nevar veikt uzlādi"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Pilns"</string>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index d027ffe..ae2df9a 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Поврзано преку <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Достапно преку %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Допрете за да се регистрирате"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Нема интернет"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Не може да се пристапи до приватниот DNS-сервер"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Ограничена врска"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Нема интернет"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"Спарете уред преку QR-код"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Спарете нови уреди преку скенер за QR-код"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Детали за уредот"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Заборави"</string>
+    <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_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 со скенирање QR-код"</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_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="8578868049289910131">"Спарете го уредот преку Wi‑Fi со скенирање QR-код"</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="keep_screen_on" msgid="1187161672348797558">"Остани во активен режим"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"Дозволи поставки за развој?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Овие поставки се наменети само за употреба за развој. Тие може да предизвикаат уредот и апликациите во него да се расипат или да се однесуваат необично."</string>
@@ -384,7 +412,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="9137381746633858694">"Корекцијата на бои им помага на луѓето со далтонизам попрецизно да ги гледаат боите"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Корекцијата на бои им помага на луѓето што не ги разликуваат боите попрецизно да ги гледаат"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Уште помалку од <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Уште повеќе од <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Уште повеќе од <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Телефон може да се исклучи наскоро"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Таблетот може да се исклучи наскоро"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Уредот може да се исклучи наскоро"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Телефон може да се исклучи наскоро (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Таблетот може да се исклучи наскоро (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Уредот може да се исклучи наскоро (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Телефон може да се исклучи наскоро"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Таблетот може да се исклучи наскоро"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Уредот може да се исклучи наскоро"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Телефон може да се исклучи наскоро (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Таблетот може да се исклучи наскоро (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"Уште <xliff:g id="TIME">%1$s</xliff:g> до целосно полнење"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"се полни"</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_discharging" msgid="6962689305413556485">"Не се полни"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Приклучен е, но батеријата не може да се полни во моментов"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Полна"</string>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index e2a3d9f..8727755 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> മുഖേന കണക്‌റ്റ് ചെയ്‌തു"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s വഴി ലഭ്യം"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"സൈൻ അപ്പ് ചെയ്യാൻ ടാപ്പ് ചെയ്യുക"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"ഇന്റർനെറ്റ് ഇല്ല"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"സ്വകാര്യ DNS സെർവർ ആക്‌സസ് ചെയ്യാനാവില്ല"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"പരിമിത കണക്‌ഷൻ"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"ഇന്റർനെറ്റ് ഇല്ല"</string>
@@ -207,6 +206,60 @@
     <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>
+    <!-- no translation found for enable_adb_wireless (6973226350963971018) -->
+    <skip />
+    <!-- no translation found for enable_adb_wireless_summary (7344391423657093011) -->
+    <skip />
+    <!-- no translation found for adb_wireless_error (721958772149779856) -->
+    <skip />
+    <!-- no translation found for adb_wireless_settings (2295017847215680229) -->
+    <skip />
+    <!-- no translation found for adb_wireless_list_empty_off (1713707973837255490) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_qrcode_title (6982904096137468634) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_qrcode_summary (3729901496856458634) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_code_title (1122590300445142904) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_code_summary (6370414511333685185) -->
+    <skip />
+    <!-- no translation found for adb_paired_devices_title (5268997341526217362) -->
+    <skip />
+    <!-- no translation found for adb_wireless_device_connected_summary (3039660790249148713) -->
+    <skip />
+    <!-- no translation found for adb_wireless_device_details_title (7129369670526565786) -->
+    <skip />
+    <!-- no translation found for adb_device_forget (193072400783068417) -->
+    <skip />
+    <!-- no translation found for adb_device_fingerprint_title_format (291504822917843701) -->
+    <skip />
+    <!-- no translation found for adb_wireless_connection_failed_title (664211177427438438) -->
+    <skip />
+    <!-- no translation found for adb_wireless_connection_failed_message (9213896700171602073) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_title (7141739231018530210) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_pairing_code_label (3639239786669722731) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_failed_title (3426758947882091735) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_failed_msg (6611097519661997148) -->
+    <skip />
+    <!-- no translation found for adb_wireless_qrcode_summary (8051414549011801917) -->
+    <skip />
+    <!-- no translation found for adb_wireless_verifying_qrcode_text (6123192424916029207) -->
+    <skip />
+    <!-- no translation found for adb_qrcode_pairing_device_failed_msg (6936292092592914132) -->
+    <skip />
+    <!-- no translation found for adb_wireless_ip_addr_preference_title (8335132107715311730) -->
+    <skip />
+    <!-- no translation found for adb_wireless_qrcode_pairing_title (1906409667944674707) -->
+    <skip />
+    <!-- no translation found for adb_wireless_qrcode_pairing_description (8578868049289910131) -->
+    <skip />
+    <!-- no translation found for keywords_adb_wireless (6507505581882171240) -->
+    <skip />
     <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>
@@ -272,6 +325,10 @@
     <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>
+    <!-- no translation found for adbwifi_warning_title (727104571653031865) -->
+    <skip />
+    <!-- no translation found for adbwifi_warning_message (8005936574322702388) -->
+    <skip />
     <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>
@@ -384,7 +441,8 @@
     <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="9137381746633858694">"വർണ്ണം ശരിയാക്കൽ, വർണ്ണാന്ധത ബാധിച്ച ആളുകൾക്ക് നിറങ്ങൾ കൂടുതൽ കൃത്യമായി കാണാൻ സഹായിക്കുന്നു"</string>
+    <!-- no translation found for accessibility_display_daltonizer_preference_subtitle (6178138727195403796) -->
+    <skip />
     <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>
@@ -403,18 +461,27 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-ൽ കുറവ് സമയം ശേഷിക്കുന്നു (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>-ൽ കൂടുതൽ സമയം ശേഷിക്കുന്നു (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>-ൽ കൂടുതൽ സമയം ശേഷിക്കുന്നു"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ഫോൺ ഉടൻ ഷട്ട് ഡൗൺ ആയേക്കാം"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ടാബ്‌ലെറ്റ് ഉടൻ ഷട്ട് ഡൗൺ ആയേക്കാം"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"ഉപകരണം ഉടൻ ഷട്ട്ഡൗൺ ആയേക്കാം"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ഫോൺ ഉടൻ ഷട്ട് ഡൗൺ ആയേക്കാം (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ടാബ്‌ലെറ്റ് ഉടൻ ഷട്ട് ഡൗൺ ആയേക്കാം (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"ഉപകരണം ഉടൻ ഷട്ട്ഡൗൺ ആയേക്കാം (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <!-- no translation found for power_remaining_duration_only_shutdown_imminent (137330009791560774) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_only_shutdown_imminent (145489081521468132) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_only_shutdown_imminent (1070562682853942350) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_shutdown_imminent (4429259621177089719) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_shutdown_imminent (7703677921000858479) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_shutdown_imminent (4374784375644214578) -->
+    <skip />
     <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="7415639699283965818">"പൂർണ്ണമായി ചാർജാവാൻ <xliff:g id="TIME">%1$s</xliff:g> ശേഷിക്കുന്നു"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - പൂർണ്ണമായി ചാർജാവാൻ <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"ചാർജ് ചെയ്യുന്നു"</string>
+    <!-- no translation found for battery_info_status_charging_fast (8027559755902954885) -->
+    <skip />
+    <!-- no translation found for battery_info_status_charging_slow (3190803837168962319) -->
+    <skip />
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"ചാർജ്ജുചെയ്യുന്നില്ല"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"പ്ലഗ് ഇൻ ചെയ്‌തു, ഇപ്പോൾ ചാർജ് ചെയ്യാനാവില്ല"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"നിറഞ്ഞു"</string>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index dd08c9e..dc57b3b 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g>-р холбогдсон"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s-р боломжтой"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Бүртгүүлэхийн тулд товшино уу"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Интернэт алга"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Хувийн DNS серверт хандах боломжгүй байна"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Хязгаарлагдмал холболт"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Интернэт алга"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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_summary" msgid="3729901496856458634">"Хурдан хариу үйлдлийн кодын сканнерыг ашиглан шинэ төхөөрөмжүүдийг хослуулна уу"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Төхөөрөмжийн дэлгэрэнгүй"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Мартах"</string>
+    <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_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_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="8578868049289910131">"Хурдан хариу үйлдлийн кодыг скан хийж Wi-Fi-р төхөөрөмжийг хослуулна уу"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, дебаг хийх, dev"</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>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"Хөгжлийн тохиргоог зөвшөөрөх үү?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Эдгээр тохиргоо нь зөвхөн хөгжүүлэлтэд ашиглах зорилготой. Эдгээр нь таны төхөөрөмж буюу түүн дээрх аппликейшнүүдийг эвдрэх, буруу ажиллах шалтгаан нь болж болно."</string>
@@ -384,7 +412,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="9137381746633858694">"Өнгөний залруулга нь өнгөний сохортой хүмүүст илүү оновчтой өнгө харахад тусалдаг"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Өнгөний залруулга нь өнгө ялгадаггүй хүмүүст өнгийг илүү оновчтой харахад тусалдаг"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-с бага хугацаа үлдсэн (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>-с их хугацаа үлдсэн (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>-с их хугацаа үлдсэн"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Утас удахгүй унтарна"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Таблет удахгүй унтарна"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Төхөөрөмж удахгүй унтарна"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Утас удахгүй унтарна (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Таблет удахгүй унтарна (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Төхөөрөмж удахгүй унтарна (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Утас удахгүй унтарч болзошгүй"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Таблет удахгүй унтарч болзошгүй"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Төхөөрөмж удахгүй унтарч болзошгүй"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Утас удахгүй унтарч болзошгүй (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Таблет удахгүй унтарч болзошгүй (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"Цэнэглэх хүртэл үлдсэн <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - цэнэглэх хүртэл <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"цэнэглэж байна"</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_discharging" msgid="6962689305413556485">"Цэнэглэхгүй байна"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Залгаастай тул одоо цэнэглэх боломжгүй"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Дүүрэн"</string>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index fb7cd1f..1240c5b 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> द्वारे कनेक्ट केले"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s द्वारे उपलब्‍ध"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"साइन अप करण्यासाठी टॅप करा"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"इंटरनेट नाही"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"खाजगी DNS सर्व्हर ॲक्सेस करू शकत नाही"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"मर्यादित कनेक्शन"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"इंटरनेट नाही"</string>
@@ -207,6 +206,33 @@
     <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="enable_adb_wireless" msgid="6973226350963971018">"वायरलेस डीबगिंग"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"वाय-फाय कनेक्ट केलेले असताना डीबग मोड"</string>
+    <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">"QR कोडसह डिव्हाइस जोडा"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR कोड स्कॅनर वापरून नवीन डिव्हाइस जोडा"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"डिव्हाइस तपशील"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"विसरा"</string>
+    <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_pairing_code_label" msgid="3639239786669722731">"वाय-फाय पेअरींग कोड"</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 कोड स्कॅन करून वाय-फाय वापरून डिव्हाइस पेअर करा"</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_wireless_ip_addr_preference_title" msgid="8335132107715311730">"आयपी अ‍ॅड्रेस आणि पोर्ट"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR कोड स्कॅन करा"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR कोड स्कॅन करून वाय-फाय वापरून डिव्हाइस पेअर करा"</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="keep_screen_on" msgid="1187161672348797558">"सक्रिय रहा"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"विकास सेटिंग्जला अनुमती द्यायची?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"या सेटिंग्जचा हेतू फक्त विकास वापरासाठी आहे. त्यामुळे तुमचे डिव्हाइस आणि त्यावरील ॲप्लिकेशन ब्रेक होऊ शकतात किंवा नेहमीपेक्षा वेगळे वर्तन करू शकतात."</string>
@@ -384,7 +412,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="9137381746633858694">"रंग सुधारणा ही वर्णांधता असलेल्या लोकांना रंग अधिक अचूक दिसण्यात मदत करते"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"रंग सुधारणा ही रंगांधळेपणा असलेल्या लोकांना रंग अधिक अचूक दिसण्यात मदत करते"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> पेक्षा कमी वेळ शिल्लक आहे (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> पेक्षा जास्त वेळ शिल्लक आहे (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> हून जास्त वेळ शिल्लक आहे"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"फोन लवकरच बंद होऊ शकतो"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"टॅबलेट लवकरच बंद होऊ शकतो"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"डिव्हाइस लवकरच बंद होऊ शकते"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"फोन लवकरच बंद होऊ शकतो (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"टॅबलेट लवकरच बंद होऊ शकतो (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"डिव्हाइस लवकरच बंद पडू शकते (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"फोन लवकरच बंद होऊ शकतो"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"टॅबलेट लवकरच बंद होऊ शकतो"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"डिव्हाइस लवकरच बंद होऊ शकते"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"फोन लवकरच बंद होऊ शकतो (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"टॅबलेट लवकरच बंद होऊ शकतो (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> पर्यंत पूर्ण चार्ज होईल"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"चार्ज होत आहे"</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_discharging" msgid="6962689305413556485">"चार्ज होत नाही"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"प्लग इन केलेले आहे, आता चार्ज करू शकत नाही"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"पूर्ण"</string>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index 72b15ff..b4c3f60 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Disambungkan melalui <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Tersedia melalui %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Ketik untuk daftar"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Tiada Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Pelayan DNS peribadi tidak boleh diakses"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Sambungan terhad"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Tiada Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Penyahpepijatan USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Mod nyahpepijat apabila USB disambungkan"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Batalkan kebenaran penyahpepijatan USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Penyahpepijatan wayarles"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Mod penyahpepijatan apabila Wi-Fi disambungkan"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Ralat"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Penyahpepijatan wayarles"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Untuk melihat dan menggunakan peranti yang tersedia, hidupkan penyahpepijatan wayarles"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Gandingkan peranti dengan kod QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Gandingkan peranti baharu menggunakan Pengimbas kod QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Gandingkan peranti dengan kod gandingan"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Gandingkan peranti baharu menggunakan kod enam digit"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Peranti gandingan"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Tersambung pada masa ini"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Butiran peranti"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Lupakan"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Cap jari peranti: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Sambungan tidak berjaya"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Pastikan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> disambungkan kepada rangkaian yang betul"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Gandingkan dengan peranti"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Kod gandingan Wi‑Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Gandingan tidak berjaya"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Pastikan peranti disambungkan kepada rangkaian yang sama."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Gandingkan peranti melalui Wi-Fi dengan mengimbas kod QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Menggandingkan peranti…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Gagal menggandingkan peranti. Kod QR salah atau peranti tidak disambungkan kepada rangkaian yang sama."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Alamat IP &amp; Port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Imbas kod QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Gandingkan peranti melalui Wi-Fi dengan mengimbas Kod QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Pintasan laporan pepijat"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Tunjukkan butang dalam menu kuasa untuk mengambil laporan pepijat"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Tetap berjaga"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Gunakan pecutan perkakasan penambatan jika tersedia"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Benarkan penyahpepijatan USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Penyahpepijatan USB adalah dimaksudkan untuk tujuan pembangunan sahaja. Gunakannya untuk menyalin data antara komputer dan peranti anda, memasang aplikasi pada peranti anda tanpa pemberitahuan, dan membaca data log."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Benarkan penyahpepijatan wayarles?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Penyahpepijatan wayarles adalah dimaksudkan untuk tujuan pembangunan sahaja. Gunakannya untuk menyalin data antara komputer dengan peranti anda, memasang apl pada peranti anda tanpa pemberitahuan dan membaca data log."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Batalkan akses ke penyahpepijatan USB dari semua komputer yang anda berikan kebenaran sebelum ini?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Benarkan tetapan pembangunan?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Tetapan ini adalah untuk penggunaan pembangunan sahaja. Peranti dan aplikasi yang terdapat padanya boleh rosak atau tidak berfungsi dengan betul."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomali (merah-hijau)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomali (biru-kuning)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Pembetulan warna"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Pembetulan warna membantu orang yang mengalami kebutaan warna melihat warna yang lebih tepat"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Pembetulan warna membantu orang yang mengalami kebutaan warna melihat warna yang lebih tepat"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Diatasi oleh <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">"Kira-kira <xliff:g id="TIME_REMAINING">%1$s</xliff:g> lagi"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Kurang daripada <xliff:g id="THRESHOLD">%1$s</xliff:g> lagi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Lebih daripada <xliff:g id="TIME_REMAINING">%1$s</xliff:g> lagi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Lebih daripada <xliff:g id="TIME_REMAINING">%1$s</xliff:g> lagi"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefon mungkin ditutup tidak lama lagi"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet mungkin ditutup tidak lama lagi"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Peranti mungkin ditutup tidak lama lagi"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefon mungkin ditutup tidak lama lagi (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet mungkin ditutup tidak lama lagi (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Peranti mungkin ditutup tidak lama lagi (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefon mungkin ditutup tidak lama lagi"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet mungkin ditutup tidak lama lagi"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Peranti mungkin ditutup tidak lama lagi"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefon mungkin ditutup tidak lama lagi (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet mungkin ditutup tidak lama lagi (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Peranti mungkin ditutup tidak lama lagi (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> lagi sehingga dicas penuh"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> sehingga dicas"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Tidak diketahui"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Mengecas"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"mengecas"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Mengecas dgn cepat"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Mengecas dgn prlahan"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Tidak mengecas"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Dipalamkan, tidak boleh mengecas sekarang"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Penuh"</string>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index 24017ec..ae8c1b9 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s မှတစ်ဆင့်ရနိုင်သည်"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"အကောင့်ဖွင့်ရန် တို့ပါ"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"အင်တာနက် မရှိပါ"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"သီးသန့် ဒီအန်အက်စ် (DNS) ဆာဗာကို သုံး၍မရပါ။"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"ချိတ်ဆက်မှု ကန့်သတ်ထားသည်"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"အင်တာနက် မရှိပါ"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"QR ကုဒ်ဖြင့် စက်ပစ္စည်းကို အတူတွဲပါ"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR ကုဒ်ဖတ်စက် သုံး၍ စက်ပစ္စည်းသစ်များကို အတူတွဲပါ"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"စက်ပစ္စည်း အသေးစိတ်"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"မေ့ပစ်ရန်"</string>
+    <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_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_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_description" msgid="8578868049289910131">"QR ကုဒ် စကင်ဖတ်ခြင်းဖြင့် Wi-Fi ပေါ်တွင် စက်ပစ္စည်းကို အတူတွဲပါ"</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="keep_screen_on" msgid="1187161672348797558">"ဖွင့်လျက်သား"</string>
@@ -272,6 +298,8 @@
     <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">"သင် ယခင်က ခွင့်ပြုခဲ့သော ကွန်ပျူတာအားလုံးမှ ယူအက်စ်ဘီ အမှားစစ်ခွင့်ကို ရုတ်သိမ်းမည်လား ?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"တည်ဆောက်ပြုပြင်ရန်ဆက်တင်များကို အသုံးပြုခွင့်ပေးမည်လား?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"ဤဆက်တင်းများကို တည်ဆောက်ပြုပြင်ရာတွင် သုံးရန်အတွက်သာ ရည်ရွယ်သည်။ ၎င်းတို့သည် သင်၏စက်နှင့် အပလီကေးရှင်းများကို ရပ်စေခြင်း သို့ လုပ်ဆောင်ချက်မမှန်ကန်ခြင်းများ ဖြစ်ပေါ်စေနိုင်သည်။"</string>
@@ -384,7 +412,7 @@
     <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_subtitle" msgid="9137381746633858694">"အရောင်ပြင်ဆင်ခြင်းက အရောင်ကန်းသူများအတွက် ပိုမိုမှန်ကန်သော အရောင်များဖြင့် ကြည့်နိုင်ရန် ကူညီမည်"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"အရောင်ပြင်ဆင်ခြင်းက အရောင်မကွဲသူများအတွက် ပိုမိုတိကျသော အရောင်များ ကြည့်နိုင်ရန် ကူညီပေးသည်"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> အောက်သာ ကျန်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ကျော် ကျန်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ကျော် ကျန်သေးသည်"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"မကြာမီ ဖုန်းပိတ်သွားနိုင်သည်"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"မကြာမီ တက်ဘလက်ပိတ်သွားနိုင်သည်"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"မကြာမီ စက်ပိတ်သွားနိုင်သည်"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"မကြာမီ ဖုန်းပိတ်သွားနိုင်သည် (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"မကြာမီ တက်ဘလက် ပိတ်သွားနိုင်သည် (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"မကြာမီ စက်ပိတ်သွားနိုင်သည် (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"မကြာမီ ဖုန်းပိတ်သွားနိုင်သည်"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"မကြာမီ တက်ဘလက် ပိတ်သွားနိုင်သည်"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"မကြာမီ စက်ပိတ်သွားနိုင်သည်"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"မကြာမီ ဖုန်းပိတ်သွားနိုင်သည် (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"မကြာမီ တက်ဘလက် ပိတ်သွားနိုင်သည် (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"အားပြည့်ရန် <xliff:g id="TIME">%1$s</xliff:g> ကျန်သည်"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - အားပြည့်ရန် <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"အားသွင်းနေပါသည်"</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_discharging" msgid="6962689305413556485">"အားသွင်းမနေပါ"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"ပလပ်ထိုးထားသောကြောင့် ယခုအားသွင်း၍ မရသေးပါ"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"အပြည့်"</string>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index aca13a7..960398d 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Tilkoblet via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Tilgjengelig via %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Trykk for å registrere deg"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Ingen internettilkobling"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Den private DNS-tjeneren kan ikke nås"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Begrenset tilkobling"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Ingen internettilkobling"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB-feilsøking"</string>
     <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 Wi-Fi 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>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Koble til enheten med en QR-kode"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Koble til nye enheter med en QR-kodeskanner"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Koble til enheten med en tilkoblingskode"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Koble til nye enheter med en sekssifret kode"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Tilkoblede enheter"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Tilkoblet nå"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Enhetsdetaljer"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Glem"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Enhetens fingeravtrykk: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Tilkoblingen mislyktes"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Sørg for at <xliff:g id="DEVICE_NAME">%1$s</xliff:g> er koblet til riktig nettverk"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Koble til enheten"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi‑Fi-tilkoblingskode"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Tilkoblingen mislyktes"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Sørg for at enheten er koblet til samme nettverk."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Koble til enheten via Wi-Fi ved å skanne en QR-kode"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Kobler til enheten …"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Kunne ikke koble til enheten. Enten var QR-koden feil, eller enheten er ikke koblet til samme nettverk."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-adresse og port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skann QR-koden"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Koble til enheten via Wi-Fi ved å skanne en QR-kode"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, feilsøking, utvikler"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Snarvei til feilrapport"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Vis en knapp for generering av feilrapport i batterimenyen"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Forbli våken"</string>
@@ -272,6 +298,8 @@
     <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>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Vil du tillate trådløs feilsøking?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Trådløs 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>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Vil du oppheve tilgangen til USB-feilsøking fra alle datamaskiner du tidligere har autorisert?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Vil du aktivere utviklingsinnstillingene?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Disse innstillingene er bare beregnet for bruk under programutvikling. De kan forårsake problemer med enheten din og tilhørende apper."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomali (rød-grønn)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomali (blå-gul)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Fargekorrigering"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Med fargekorrigering kan personer med fargeblindhet se mer nøyaktige farger"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Med fargekorrigering kan personer med fargeblindhet se mer nøyaktige farger"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Overstyres av <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">"Omtrent <xliff:g id="TIME_REMAINING">%1$s</xliff:g> gjenstår"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Mindre enn <xliff:g id="THRESHOLD">%1$s</xliff:g> gjenstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mer enn <xliff:g id="TIME_REMAINING">%1$s</xliff:g> gjenstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Mer enn <xliff:g id="TIME_REMAINING">%1$s</xliff:g> gjenstår"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefonen slås kanskje av snart"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Nettbrettet slås kanskje av snart"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Enheten slås kanskje av snart"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefonen slås kanskje av snart (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Nettbrettet slås kanskje av snart (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Enheten slås kanskje av snart (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefonen slås kanskje av snart"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Nettbrettet slås kanskje av snart"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Enheten slås kanskje av snart"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefonen slås kanskje av snart (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Nettbrettet slås kanskje av snart (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Enheten slås kanskje av snart (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> til batteriet er fulladet"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> til batteriet er fulladet"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Ukjent"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Lader"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"lader"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Lader raskt"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Lader sakte"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Lader ikke"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Laderen er koblet til – kan ikke lade akkurat nå"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Fullt"</string>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index b2c7518..e11f02d 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> मार्फत जडान गरिएको"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s मार्फत उपलब्ध"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"साइन अप गर्न ट्याप गर्नुहोस्"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"इन्टरनेट छैन"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"निजी DNS सर्भरमाथि पहुँच प्राप्त गर्न सकिँदैन"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"सीमित जडान"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"इन्टरनेटमाथिको पहुँच छैन"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"QR कोडमार्फत यन्त्रको जोडा बनाउनुहोस्"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR कोड स्क्यानर प्रयोग गरी नयाँ यन्त्रहरूको जोडा बनाउनुहोस्"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"यन्त्रसम्बन्धी विवरणहरू"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"बिर्सनुहोस्"</string>
+    <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_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_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_description" msgid="8578868049289910131">"QR कोड स्क्यान गरेर Wi‑Fi प्रयोग गरी यन्त्रको जोडा बनाउनुहोस्"</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="keep_screen_on" msgid="1187161672348797558">"जागा रहनुहोस्"</string>
@@ -272,6 +298,8 @@
     <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="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="dev_settings_warning_title" msgid="8251234890169074553">"विकास सेटिङहरू अनुमति दिने हो?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"यी सेटिङहरू केवल विकास प्रयोगको लागि विचार गरिएको हो। तिनीहरूले तपाईंको उपकरण र अनुप्रयोगहरूलाई विच्छेदन गर्न वा दुर्व्यवहार गर्न सक्दछ।"</string>
@@ -384,7 +412,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="9137381746633858694">"रङ सुधार गर्नुले रङ छुट्याउन नसक्ने मान्छेलाई थप सही रङ देख्न मद्दत गर्दछ"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"रङ सुधार गर्नुले रङ छुट्याउन नसक्ने मान्छेलाई थप सटीक रूपमा रङहरू छुट्याउन मद्दत गर्दछ"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> भन्दा कम समय बाँकी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> भन्दा बढी समय बाँकी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> भन्दा बढी समय बाँकी"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"फोन चाँडै बन्द हुन सक्छ"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ट्याब्लेट चाँडै बन्द हुन सक्छ"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"यन्त्र चाँडै बन्द हुन सक्छ"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"फोन चाँडै बन्द हुन सक्छ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ट्याब्लेट चाँडै बन्द हुन सक्छ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"यन्त्र चाँडै बन्द हुन सक्छ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"फोन चाँडै बन्द हुन सक्छ"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ट्याब्लेट चाँडै बन्द हुन सक्छ"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"यन्त्र चाँडै बन्द हुन सक्छ"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"फोन चाँडै बन्द हुन सक्छ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ट्याब्लेट चाँडै बन्द हुन सक्छ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"पूर्ण चार्ज हुन <xliff:g id="TIME">%1$s</xliff:g> बाँकी"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"पूर्ण चार्ज हुन <xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"चार्ज हुँदै"</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_discharging" msgid="6962689305413556485">"चार्ज भइरहेको छैन"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"प्लगइन गरिएको छ, अहिले नै चार्ज गर्न सकिँदैन"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"पूर्ण चार्ज भएको स्थिति"</string>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index c74683b..e79784c 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Verbonden via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Beschikbaar via %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Tik om aan te melden"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Geen internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Geen toegang tot privé-DNS-server"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Beperkte verbinding"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Geen internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB-foutopsporing"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Foutopsporingsmodus bij USB-verbinding"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Autorisatie USB-foutopsporing intrekken"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Draadloze foutopsporing"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Foutopsporingsmodus als wifi is verbonden"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Fout"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Draadloze foutopsporing"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Schakel draadloze foutopsporing in om beschikbare apparaten te bekijken en te gebruiken"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Apparaat koppelen met QR-code"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Nieuwe apparaten koppelen via QR-codescanner"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Apparaat koppelen met koppelingscode"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Nieuwe apparaten koppelen via een zescijferige code"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Gekoppelde apparaten"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Momenteel verbonden"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Apparaatgegevens"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Vergeten"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Vingerafdruk van apparaat: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Verbinding mislukt"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Zorg dat <xliff:g id="DEVICE_NAME">%1$s</xliff:g> is verbonden met het juiste netwerk"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Koppelen aan apparaat"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wifi-koppelingscode"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Koppeling mislukt"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Zorg dat het apparaat is verbonden met hetzelfde netwerk."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Apparaat koppelen via wifi door een QR-code te scannen"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Apparaat koppelen…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Kan het apparaat niet koppelen. De QR-code was onjuist of het apparaat is niet verbonden met hetzelfde netwerk."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-adres en poort"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR-code scannen"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Apparaat koppelen via wifi door een QR-code te scannen"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, foutopsporing, ontwikkeling"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Snelle link naar bugrapport"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Een knop in het voedingsmenu weergeven om een bugrapport te maken"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Stand-by"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Hardwareversnelling voor tethering gebruiken indien beschikbaar"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"USB-foutopsporing toestaan?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB-foutopsporing is alleen bedoeld voor ontwikkeldoeleinden. Het kan worden gebruikt om gegevens te kopiëren tussen je computer en je apparaat, apps zonder melding op je apparaat te installeren en loggegevens te lezen."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Draadloze foutopsporing toestaan?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Draadloze foutopsporing is alleen bedoeld voor ontwikkeldoeleinden. Het kan worden gebruikt om gegevens te kopiëren tussen je computer en je apparaat, apps zonder melding op je apparaat te installeren en logboekgegevens te lezen."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Toegang tot USB-foutopsporing intrekken voor alle computers waarvoor je dit eerder hebt toegestaan?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Ontwikkelingsinstellingen toestaan?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Deze instellingen zijn uitsluitend bedoeld voor ontwikkelingsgebruik. Je apparaat en apps kunnen hierdoor vastlopen of anders reageren."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalie (rood-groen)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalie (blauw-geel)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Kleurcorrectie"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Met behulp van kleurcorrectie kunnen mensen die kleurenblind zijn, nauwkeurigere kleuren te zien krijgen"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Met behulp van kleurcorrectie kunnen mensen die kleurenblind zijn, nauwkeurigere kleuren te zien krijgen"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Overschreven door <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">"Nog ongeveer <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Nog minder dan <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Nog meer dan <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Nog meer dan <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefoon wordt binnenkort mogelijk uitgeschakeld"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet wordt binnenkort mogelijk uitgeschakeld"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Apparaat wordt binnenkort mogelijk uitgeschakeld"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefoon wordt binnenkort mogelijk uitgeschakeld (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet wordt binnenkort mogelijk uitgeschakeld (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Apparaat wordt binnenkort mogelijk uitgeschakeld (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefoon wordt binnenkort mogelijk uitgeschakeld"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet wordt binnenkort mogelijk uitgeschakeld"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Apparaat wordt binnenkort mogelijk uitgeschakeld"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefoon wordt binnenkort mogelijk uitgeschakeld (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet wordt binnenkort mogelijk uitgeschakeld (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Apparaat wordt binnenkort mogelijk uitgeschakeld (<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="7415639699283965818">"Nog <xliff:g id="TIME">%1$s</xliff:g> tot opgeladen"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> tot opgeladen"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Onbekend"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Opladen"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"opladen"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Snel opladen"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Langzaam opladen"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Wordt niet opgeladen"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Aangesloten, kan nu niet opladen"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Volledig"</string>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index 704fc42..7e7c22d 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> ଦ୍ବାରା ସଂଯୋଗ କରାଯାଇଛି"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s ମାଧ୍ୟମରେ ଉପଲବ୍ଧ"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"ସାଇନ୍ ଅପ୍ ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗ ନାହିଁ"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"ବ୍ୟକ୍ତିଗତ DNS ସର୍ଭର୍ ଆକ୍ସେସ୍ କରିହେବ ନାହିଁ"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"ସୀମିତ ସଂଯୋଗ"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"କୌଣସି ଇଣ୍ଟରନେଟ୍‌ ନାହିଁ"</string>
@@ -207,6 +206,33 @@
     <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="enable_adb_wireless" msgid="6973226350963971018">"ୱେୟାରଲେସ୍ ଡିବଗିଂ"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"ୱାଇ-ଫାଇ ସଂଯୁକ୍ତ ଥିବା ବେଳେ ଡିବଗ୍ ମୋଡ୍"</string>
+    <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">"QR କୋଡରେ ଡିଭାଇସକୁ ପେୟାର୍ କରନ୍ତୁ"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR କୋଡ୍ ସ୍କାନର୍ ବ୍ୟବହାର କରି ନୂଆ ଡିଭାଇସଗୁଡ଼ିକୁ ପେୟାର୍ କରନ୍ତୁ"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"ଡିଭାଇସ୍ ବିବରଣୀ"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"ଭୁଲିଗଲେ"</string>
+    <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_pairing_code_label" msgid="3639239786669722731">"ୱାଇ-ଫାଇ ପେୟାରିଂ କୋଡ୍"</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 କୋଡ୍ ସ୍କାନ୍ କରି ୱାଇ-ଫାଇରେ ଡିଭାଇସ୍ ପେୟାର୍ କରନ୍ତୁ"</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_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="8578868049289910131">"ଏକ QR କୋଡ୍ ସ୍କାନ୍ କରି ୱାଇ-ଫାଇରେ ଡିଭାଇସ୍ ପେୟାର୍ କରନ୍ତୁ"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ଡିବଗ୍, dev"</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>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"ଡେଭଲପମେଣ୍ଟ ସେଟିଙ୍ଗ ଅନୁମତି ଦେବେ?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"ଏହି ସେଟିଙ୍ଗଗୁଡ଼ିକ କେବଳ ବିକାଶ ବ୍ୟବହାର ପାଇଁ ଉଦ୍ଦିଷ୍ଟ। ସେଗୁଡ଼ିକ କାରଣରୁ ଆପଣଙ୍କ ଡିଭାଇସ୍‌ ଓ ଆପ୍ଲିକେଶନ୍‍‍ଗୁଡ଼ିକ ଠିକ୍‌ ଭାବେ କାମ ନକରିପାରେ।"</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"ପ୍ରୋଟାନୋମାଲି (ଲାଲ୍‌-ସବୁଜ)"</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_subtitle" msgid="9137381746633858694">"କଲର୍ କରେକ୍ସନ୍ ରଙ୍ଗ ଚିହ୍ନିବାରେ ସମସ୍ୟା ଥିବା ଲୋକମାନଙ୍କୁ ଅଧିକ ସଠିକ୍ ରଙ୍ଗ ଦେଖିବାରେ ସାହାଯ୍ୟ କରିଥାଏ"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"ରଙ୍ଗ ଚିହ୍ନିବାରେ ସମସ୍ୟା ଥିବା ଲୋକମାନଙ୍କୁ କଲର୍ କରେକ୍ସନ୍ ସଠିକ୍ ରଙ୍ଗ ଦେଖିବାରେ ସାହାଯ୍ୟ କରିଥାଏ"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ରୁ କମ୍ ସମୟ ବଳକା ଅଛି (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>ରୁ ଅଧିକ ସମୟ ବଳକା ଅଛି(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>ରୁ ଅଧିକ ବଳକା ଅଛି"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ଖୁବ୍ ଶୀଘ୍ର ଫୋନ୍‌ଟି ବନ୍ଦ ହୋଇଯାଇପାରେ"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ଖୁବ୍ ଶୀଘ୍ର ଟାବଲେଟ୍‌ଟି ବନ୍ଦ ହୋଇଯାଇପାରେ"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"ଡିଭାଇସ୍ ଶୀଘ୍ର ବନ୍ଦ ହୋଇଯାଇପାରେ"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ଖୁବ୍ ଶୀଘ୍ର ଫୋନ୍‌ଟି ବନ୍ଦ ହୋଇଯାଇପାରେ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ଖୁବ୍ ଶୀଘ୍ର ଟାବଲେଟ୍‌ଟି ବନ୍ଦ ହୋଇଯାଇପାରେ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"ଖୁବ୍ ଶୀଘ୍ର ଡିଭାଇସ୍‌ଟି ବନ୍ଦ ହୋଇଯାଇପାରେ(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"ଫୋନ୍ ଶୀଘ୍ର ବନ୍ଦ ହୋଇଯାଇପାରେ"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ଟାବଲେଟ୍ ଶୀଘ୍ର ବନ୍ଦ ହୋଇଯାଇପାରେ"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"ଡିଭାଇସ୍ ଶୀଘ୍ର ବନ୍ଦ ହୋଇଯାଇପାରେ"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"ଫୋନ୍ ଶୀଘ୍ର ବନ୍ଦ ହୋଇଯାଇପାରେ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ଟାବଲେଟ୍ ଶୀଘ୍ର ବନ୍ଦ ହୋଇଯାଇପାରେ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"ଚାର୍ଜ ହେବା ପାଇଁ <xliff:g id="TIME">%1$s</xliff:g> ବାକି ଅଛି"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"ଚାର୍ଜ ହେଉଛି"</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_discharging" msgid="6962689305413556485">"ଚାର୍ଜ ହେଉନାହିଁ"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"ପ୍ଲଗ୍‌ରେ ଲାଗିଛି, ହେଲେ ଏବେ ଚାର୍ଜ କରିପାରିବ ନାହିଁ"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"ଚାର୍ଜ ସମ୍ପୂର୍ଣ୍ଣ"</string>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index bf5a32c..7279f31 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s ਰਾਹੀਂ ਉਪਲਬਧ"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"ਸਾਈਨ-ਅੱਪ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"ਇੰਟਰਨੈੱਟ ਨਹੀਂ"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"ਨਿੱਜੀ ਡੋਮੇਨ ਨਾਮ ਪ੍ਰਣਾਲੀ (DNS) ਸਰਵਰ \'ਤੇ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"ਸੀਮਤ ਕਨੈਕਸ਼ਨ"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"ਇੰਟਰਨੈੱਟ ਨਹੀਂ"</string>
@@ -207,6 +206,33 @@
     <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="enable_adb_wireless" msgid="6973226350963971018">"ਵਾਇਰਲੈੱਸ ਡੀਬੱਗਿੰਗ"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"ਵਾਈ-ਫਾਈ ਕਨੈਕਟ ਹੋਣ \'ਤੇ ਡੀਬੱਗ ਮੋਡ"</string>
+    <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">"QR ਕੋਡ ਨਾਲ ਡੀਵਾਈਸ ਨੂੰ ਜੋੜਾਬੱਧ ਕਰੋ"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR ਕੋਡ ਸਕੈਨਰ ਵਰਤ ਕੇ ਨਵੇਂ ਡੀਵਾਈਸਾਂ ਨੂੰ ਜੋੜਾਬੱਧ ਕਰੋ"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"ਡੀਵਾਈਸ ਦੇ ਵੇਰਵੇ"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"ਭੁੱਲ ਜਾਓ"</string>
+    <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_pairing_code_label" msgid="3639239786669722731">"ਵਾਈ-ਫਾਈ ਜੋੜਾਬੱਧਕਰਨ ਕੋਡ"</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 ਕੋਡ ਸਕੈਨ ਕਰਕੇ ਵਾਈ-ਫਾਈ \'ਤੇ ਡੀਵਾਈਸ ਜੋੜਾਬੱਧ ਕਰੋ"</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_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP ਪਤਾ &amp; ਪੋਰਟ"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR ਕੋਡ ਸਕੈਨ ਕਰੋ"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR ਕੋਡ ਸਕੈਨ ਕਰਕੇ ਵਾਈ-ਫਾਈ \'ਤੇ ਡੀਵਾਈਸ ਜੋੜਾਬੱਧ ਕਰੋ"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ਡੀਬੱਗ, dev"</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>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"ਕੀ ਵਿਕਾਸ ਸੈਟਿੰਗਾਂ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"ਇਹ ਸੈਟਿੰਗਾਂ ਕੇਵਲ ਵਿਕਾਸਕਾਰ ਦੀ ਵਰਤੋਂ ਲਈ ਹਨ। ਇਹ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਅਤੇ ਇਸਤੇ ਮੌਜੂਦ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਬ੍ਰੇਕ ਕਰਨ ਜਾਂ ਦੁਰਵਿਵਹਾਰ ਕਰਨ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦੇ ਹਨ।"</string>
@@ -384,7 +412,7 @@
     <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_subtitle" msgid="9137381746633858694">"ਰੰਗ ਸੁਧਾਈ ਨਾਲ ਰੰਗਾਂ ਦੇ ਅੰਨ੍ਹਾਪਣ ਦੇ ਸ਼ਿਕਾਰ ਲੋਕਾਂ ਦੀ ਵਧੇਰੇ ਸਟੀਕ ਰੰਗਾਂ ਨੂੰ ਦੇਖਣ ਵਿੱਚ ਮਦਦ ਕੀਤੀ ਜਾਂਦੀ ਹੈ"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"ਰੰਗ ਸੁਧਾਈ ਨਾਲ ਰੰਗਾਂ ਦੇ ਅੰਨ੍ਹੇਪਣ ਦੇ ਸ਼ਿਕਾਰ ਲੋਕਾਂ ਦੀ ਵਧੇਰੇ ਸਟੀਕ ਰੰਗਾਂ ਨੂੰ ਦੇਖਣ ਵਿੱਚ ਮਦਦ ਕੀਤੀ ਜਾਂਦੀ ਹੈ"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ਤੋਂ ਘੱਟ ਸਮਾਂ ਬਾਕੀ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ਤੋਂ ਵੱਧ ਸਮਾਂ ਬਾਕੀ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ਤੋਂ ਵੱਧ ਸਮਾਂ ਬਾਕੀ"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ਫ਼ੋਨ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ਟੈਬਲੈੱਟ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"ਡੀਵਾਈਸ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ਫ਼ੋਨ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ਟੈਬਲੈੱਟ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"ਡੀਵਾਈਸ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"ਫ਼ੋਨ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ਟੈਬਲੈੱਟ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"ਡੀਵਾਈਸ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"ਫ਼ੋਨ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ਟੈਬਲੈੱਟ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"ਚਾਰਜ ਹੋਣ ਵਿੱਚ <xliff:g id="TIME">%1$s</xliff:g> ਬਾਕੀ"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"ਚਾਰਜ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</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_discharging" msgid="6962689305413556485">"ਚਾਰਜ ਨਹੀਂ ਹੋ ਰਿਹਾ"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"ਪਲੱਗ ਲੱਗਾ ਹੋਇਆ ਹੈ, ਇਸ ਸਮੇਂ ਚਾਰਜ ਨਹੀਂ ਹੋ ਸਕਦੀ"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"ਪੂਰੀ"</string>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index d907760..3b12891 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Połączenie przez: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Dostępne przez %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Kliknij, by się zarejestrować"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Brak internetu"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Brak dostępu do prywatnego serwera DNS"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Ograniczone połączenie"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Brak internetu"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Debugowanie USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Tryb debugowania, gdy podłączone jest USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Odwołaj dostęp do debugowania USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Debugowanie bezprzewodowe"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Tryb debugowania przy połączeniu z Wi-Fi"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Błąd"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Debugowanie bezprzewodowe"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Aby wyświetlić dostępne urządzenia i ich używać, włącz debugowanie bezprzewodowe"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Sparuj urządzenie przy pomocy kodu QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Sparuj nowe urządzenie, skanując kod QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Sparuj urządzenie przy pomocy kodu parowania"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Sparuj nowe urządzenie przy pomocy 6-cyfrowego kodu"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Sparowane urządzenia"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Obecnie połączone"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Szczegóły urządzenia"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Zapomnij"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Odcisk cyfrowy urządzenia: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Nie można połączyć"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Sprawdź, czy <xliff:g id="DEVICE_NAME">%1$s</xliff:g> jest podłączony do tej samej sieci"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Sparuj z urządzeniem"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Kod parowania Wi‑Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Parowanie nie powiodło się"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Upewnij się, że urządzenie jest podłączone do tej samej sieci."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Sparuj urządzenia przez Wi-Fi, skanując kod QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Paruję urządzenie…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Nie udało się sparować z urządzeniem. Kod QR jest nieprawidłowy albo urządzenie nie jest podłączone do tej samej sieci."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adres IP i port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Zeskanuj kod QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Sparuj urządzenia przez Wi-Fi, skanując kod QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Skrót do zgłoszenia błędu"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Pokaż w menu zasilania przycisk zgłaszania błędu"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Pozostaw włączony ekran"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Użyj akceleracji sprzętowej tetheringu, jeśli jest dostępna"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Czy zezwalać na debugowanie USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Debugowanie USB jest przeznaczone wyłącznie do celów programistycznych. Może służyć do kopiowania danych między komputerem a urządzeniem, instalowania aplikacji na urządzeniu bez powiadamiania, a także odczytu danych dziennika."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Zezwalać na debugowanie bezprzewodowe?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Debugowanie bezprzewodowe jest przeznaczone wyłącznie do celów programistycznych. Może służyć do kopiowania danych między komputerem a urządzeniem, instalowania aplikacji na urządzeniu bez powiadamiania, a także odczytu danych dziennika."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Odwołać dostęp wszystkich poprzednio autoryzowanych komputerów do debugowania USB?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Zezwolić na ustawienia programistyczne?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Te ustawienia są przeznaczone wyłącznie dla programistów. Ich użycie może spowodować uszkodzenie lub nieprawidłowe działanie urządzenia i zainstalowanych na nim aplikacji."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalia (czerwony-zielony)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalia (niebieski-żółty)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Korekcja kolorów"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Korekcja kolorów pomaga osobom z zaburzeniami rozpoznawania barw lepiej je widzieć."</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Korekcja kolorów pomaga osobom z zaburzeniami rozpoznawania barw lepiej je widzieć"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Nadpisana przez <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">"Jeszcze około <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Pozostało mniej niż <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Pozostało ponad: <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Pozostało ponad: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefon może się wkrótce wyłączyć"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet może się wkrótce wyłączyć"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Urządzenie może się wkrótce wyłączyć"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefon może się wkrótce wyłączyć (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet może się wkrótce wyłączyć (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Urządzenie może się wkrótce wyłączyć (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Wkrótce telefon może się wyłączyć"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet może się wkrótce wyłączyć"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Urządzenie może się wkrótce wyłączyć"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefon może się wkrótce wyłączyć (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet może się wkrótce wyłączyć (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Urządzenie może się wkrótce wyłączyć (<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="7415639699283965818">"Do naładowania <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – do naładowania <xliff:g id="TIME">%2$s</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Nieznane"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Ładowanie"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"ładowanie"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Szybkie ładowanie"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Wolne ładowanie"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nie podłączony"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Podłączony. Nie można teraz ładować"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Naładowana"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index e61c84e..5e76fe0 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Conectado via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Disponível via %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Toque para se inscrever"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Sem Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Não é possível acessar o servidor DNS privado"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Conexão limitada"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Sem Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Depuração USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Modo de depuração quando o USB estiver conectado"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revogar autorizações de depuração USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Depuração por Wi-Fi"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Modo de depuração quando a rede Wi‑Fi estiver conectada"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Erro"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Depuração por Wi-Fi"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Para ver e usar dispositivos disponíveis, ative a depuração por Wi-Fi"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Parear o dispositivo com um código QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Parear novos dispositivos usando um leitor de código QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Parear o dispositivo com um código de pareamento"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Parear novos dispositivos usando um código de seis dígitos"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Dispositivos pareados"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Conectados no momento"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Detalhes do dispositivo"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Esquecer"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Impressão digital do dispositivo: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Falha na conexão"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Verifique se o <xliff:g id="DEVICE_NAME">%1$s</xliff:g> está conectado à rede correta"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Parear com o dispositivo"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Código de pareamento de Wi‑Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Falha no pareamento"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Verifique se o dispositivo está conectado à mesma rede."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Parear dispositivo na rede Wi‑Fi fazendo a leitura do código QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Pareando dispositivo…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Falha ao parear o dispositivo. O código QR está incorreto ou o dispositivo não está conectado à mesma rede."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Endereço IP e porta"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Ler código QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Parear dispositivo na rede Wi‑Fi fazendo a leitura do código QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Atalho para relatório de bugs"</string>
     <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>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Usar aceleração de hardware de tethering quando disponível"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Permitir a depuração USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"A depuração USB serve apenas para fins de desenvolvimento. Use-a para copiar dados entre o computador e o dispositivo, instalar apps no seu aparelho sem notificação e ler dados de registro."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Permitir a depuração sem fio?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"A depuração sem fio serve apenas para fins de desenvolvimento. Use-a para copiar dados entre o computador e o dispositivo, instalar apps no seu aparelho sem notificação e ler dados de registro."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Revogar o acesso à depuração USB para todos os computadores autorizados?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Ativar as configurações de desenvolvimento?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Essas configurações são destinadas apenas para o uso de desenvolvedores. Elas podem causar a desativação ou mau funcionamento do dispositivo e dos apps contidos nele."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalia (vermelho-verde)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalia (azul-amarelo)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Correção de cor"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"A correção de cores ajuda pessoas com daltonismo a ver cores de forma mais precisa"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"A correção de cores ajuda pessoas com daltonismo a ver cores de forma mais precisa"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Substituído por <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">"Tempo restante aproximado: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> restante(s)"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"O smartphone pode ser desligado em breve"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"O tablet pode ser desligado em breve"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"O dispositivo pode ser desligado em breve"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"O smartphone pode ser desligado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"O tablet pode ser desligado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"O dispositivo pode ser desligado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"O smartphone pode ser desligado em breve"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"O tablet pode ser desligado em breve"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"O dispositivo pode ser desligado em breve"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"O smartphone pode ser desligado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"O tablet pode ser desligado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"O dispositivo pode ser desligado em breve (<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="7415639699283965818">"Tempo restante até a carga completa: <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g>: <xliff:g id="TIME">%2$s</xliff:g> até a carga completa"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Desconhecido"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Carregando"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"carregando"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Carregando rápido"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Carregando devagar"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Não está carregando"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Conectado. Não é possível carregar no momento"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Carregada"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index 8ceeb63..d1b29f0 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Ligado via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Disponível através de %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Toque para se inscrever"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Sem Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Não é possível aceder ao servidor DNS."</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Ligação limitada"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Sem Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Depuração USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Modo de depuração com USB ligado"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revogar autorizações de depur. USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Depuração sem fios"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Modo de depuração quando o Wi-Fi está ligado"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Erro."</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Depuração sem fios"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Para ver e utilizar dispositivos disponíveis, ative a depuração sem fios."</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Sincronize o dispositivo com o código QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Sincronize novos dispositivos com o leitor de códigos QR."</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Sincronize dispositivo com código de sincronização"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Sincronize novos dispositivos através do código de seis dígitos."</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Dispositivos sincronizados"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Atualmente ligado."</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Detalhes do dispositivo"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Esquecer"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Impressão digital do dispositivo: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"A ligação falhou"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Certifique-se de que o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g> está ligado à rede correta."</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Sincronize com o dispositivo"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Código de sincronização de Wi‑Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Sincronização sem êxito"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Certifique-se de que o dispositivo está ligado à mesma rede."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Sincronize o dispositivo através de Wi-Fi ao ler um código QR."</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"A sincronizar o dispositivo…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Falha ao sincronizar o dispositivo. O código QR estava incorreto ou o dispositivo não está ligado à mesma rede."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Porta e endereço IP"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Leia o código QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Sincronize o dispositivo através de Wi-Fi ao ler um código QR."</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, depurar, programador"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Atalho para relatório de erro"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostrar um botão no menu ligar/desligar para criar um relatório de erro"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Manter ativo"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Se disponível, utilizar a aceleração de hardware para ligação (à Internet) via telemóvel"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Permitir depuração USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"A depuração USB é utilizada apenas para fins de programação. Utilize-a para copiar dados entre o computador e o aparelho, instalar aplicações no aparelho sem notificação e ler dados de registo."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Pretende permitir a depuração sem fios?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"A depuração sem fios é utilizada apenas para fins de programação. Utilize-a para copiar dados entre o computador e o dispositivo, instalar apps no dispositivo sem notificação e ler dados de registo."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Revogar acesso à depuração USB de todos os computadores anteriormente autorizados?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Permitir definições de programação?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Estas definições destinam-se apenas a programação. Podem fazer com que o seu aparelho e as aplicações nele existentes falhem ou funcionem mal."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalia (vermelho-verde)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalia (azul-amarelo)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Correção da cor"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"A correção de cor ajuda as pessoas com daltonismo a ver cores mais precisas."</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"A correção de cor ajuda as pessoas com daltonismo a ver cores mais precisas."</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Substituído por <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">"Resta(m) cerca de <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Resta(m) menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Resta(m) mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Resta(m) mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g>."</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"O telemóvel poderá ser encerrado em breve."</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"O tablet poderá ser encerrado em breve."</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"O dispositivo poderá ser encerrado em breve."</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"O telemóvel poderá ser encerrado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)."</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"O tablet poderá ser encerrado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)."</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"O dispositivo poderá ser encerrado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)."</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"O telemóvel poderá ser encerrado em breve"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"O tablet poderá ser encerrado em breve"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"O dispositivo poderá ser encerrado em breve"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"O telemóvel poderá ser encerrado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"O tablet poderá ser encerrado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"O dispositivo poderá ser encerrado em breve (<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="7415639699283965818">"Falta(m) <xliff:g id="TIME">%1$s</xliff:g> até ficar carregada"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> até ficar carregada"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Desconhecido"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"A carregar"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"a carregar…"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Carregamento rápido"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Carregamento lento"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Não está a carregar"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Ligada à corrente, não é possível carregar neste momento"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Completo"</string>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index e61c84e..5e76fe0 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Conectado via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Disponível via %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Toque para se inscrever"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Sem Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Não é possível acessar o servidor DNS privado"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Conexão limitada"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Sem Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Depuração USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Modo de depuração quando o USB estiver conectado"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revogar autorizações de depuração USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Depuração por Wi-Fi"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Modo de depuração quando a rede Wi‑Fi estiver conectada"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Erro"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Depuração por Wi-Fi"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Para ver e usar dispositivos disponíveis, ative a depuração por Wi-Fi"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Parear o dispositivo com um código QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Parear novos dispositivos usando um leitor de código QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Parear o dispositivo com um código de pareamento"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Parear novos dispositivos usando um código de seis dígitos"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Dispositivos pareados"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Conectados no momento"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Detalhes do dispositivo"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Esquecer"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Impressão digital do dispositivo: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Falha na conexão"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Verifique se o <xliff:g id="DEVICE_NAME">%1$s</xliff:g> está conectado à rede correta"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Parear com o dispositivo"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Código de pareamento de Wi‑Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Falha no pareamento"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Verifique se o dispositivo está conectado à mesma rede."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Parear dispositivo na rede Wi‑Fi fazendo a leitura do código QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Pareando dispositivo…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Falha ao parear o dispositivo. O código QR está incorreto ou o dispositivo não está conectado à mesma rede."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Endereço IP e porta"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Ler código QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Parear dispositivo na rede Wi‑Fi fazendo a leitura do código QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Atalho para relatório de bugs"</string>
     <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>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Usar aceleração de hardware de tethering quando disponível"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Permitir a depuração USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"A depuração USB serve apenas para fins de desenvolvimento. Use-a para copiar dados entre o computador e o dispositivo, instalar apps no seu aparelho sem notificação e ler dados de registro."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Permitir a depuração sem fio?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"A depuração sem fio serve apenas para fins de desenvolvimento. Use-a para copiar dados entre o computador e o dispositivo, instalar apps no seu aparelho sem notificação e ler dados de registro."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Revogar o acesso à depuração USB para todos os computadores autorizados?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Ativar as configurações de desenvolvimento?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Essas configurações são destinadas apenas para o uso de desenvolvedores. Elas podem causar a desativação ou mau funcionamento do dispositivo e dos apps contidos nele."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalia (vermelho-verde)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalia (azul-amarelo)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Correção de cor"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"A correção de cores ajuda pessoas com daltonismo a ver cores de forma mais precisa"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"A correção de cores ajuda pessoas com daltonismo a ver cores de forma mais precisa"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Substituído por <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">"Tempo restante aproximado: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> restante(s)"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"O smartphone pode ser desligado em breve"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"O tablet pode ser desligado em breve"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"O dispositivo pode ser desligado em breve"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"O smartphone pode ser desligado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"O tablet pode ser desligado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"O dispositivo pode ser desligado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"O smartphone pode ser desligado em breve"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"O tablet pode ser desligado em breve"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"O dispositivo pode ser desligado em breve"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"O smartphone pode ser desligado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"O tablet pode ser desligado em breve (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"O dispositivo pode ser desligado em breve (<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="7415639699283965818">"Tempo restante até a carga completa: <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g>: <xliff:g id="TIME">%2$s</xliff:g> até a carga completa"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Desconhecido"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Carregando"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"carregando"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Carregando rápido"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Carregando devagar"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Não está carregando"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Conectado. Não é possível carregar no momento"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Carregada"</string>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 5ad8dfd..e1aa85b 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Conectat prin <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Disponibilă prin %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Atingeți pentru a vă înscrie"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Fără conexiune la internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Serverul DNS privat nu poate fi accesat"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Conexiune limitată"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Fără conexiune la internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Remedierea erorilor prin USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Mod de depanare când este conectat USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Revoc autorizații remediere a erorilor prin USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Remedierea erorilor prin 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>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Remedierea erorilor prin wireless"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Activați remedierea erorilor wireless pentru a vedea și a folosi dispozitivele disponibile"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Asociați dispozitivul folosind codul QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Asociați dispozitive noi folosind scannerul de coduri QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Asociați dispozitivul folosind codul de conectare"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Asociați dispozitive noi folosind codul din șase cifre"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Dispozitive asociate"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Conectat"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Detalii despre dispozitiv"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Ștergeți"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Amprenta pentru dispozitiv: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Conectare nereușită"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Asigurați-vă că ați conectat <xliff:g id="DEVICE_NAME">%1$s</xliff:g> la rețeaua corectă"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Asociați cu dispozitivul"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Cod de conectare pentru Wi-Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Asociere nereușită"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Asigurați-vă că dispozitivul este conectat la aceeași rețea."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Asociați dispozitivul prin Wi-Fi scanând un cod QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Se asociază dispozitivul…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Nu s-a asociat dispozitivul. Codul QR este incorect sau dispozitivul nu este conectat la aceeași rețea."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adresa IP și portul"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scanați codul QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Asociați dispozitivul prin Wi-Fi scanând un cod QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, remedierea erorilor, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Comandă rapidă pentru raportul de erori"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Afișați un buton în meniul de pornire pentru a realiza un raport de erori"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Activ permanent"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Folosiți accelerarea hardware pentru tethering, dacă este disponibilă"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Permiteți remedierea erorilor prin USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Remedierea erorilor prin USB are exclusiv scopuri de dezvoltare. Utilizați-o pentru a copia date de pe computer pe dispozitiv, pentru a instala aplicații pe dispozitiv fără notificare și pentru a citi datele din jurnale."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Permiteți remedierea erorilor prin wireless?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Remedierea erorilor prin wireless are exclusiv scopuri de dezvoltare. Folosiți-o pentru a copia date de pe computer pe dispozitiv, pentru a instala aplicații pe dispozitiv fără notificare și pentru a citi datele din jurnale."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Revocați accesul la remedierea erorilor prin USB de pe toate computerele pe care le-ați autorizat anterior?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Permiteți setările pentru dezvoltare?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Aceste setări sunt destinate exclusiv utilizării pentru dezvoltare. Din cauza lor, este posibil ca dispozitivul dvs. și aplicațiile de pe acesta să nu mai funcționeze sau să funcționeze necorespunzător."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalie (roșu-verde)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalie (albastru-galben)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Corecția culorii"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Corecția culorii ajută persoanele cu daltonism să vadă culori mai exacte"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Corecția culorii ajută persoanele cu daltonism să vadă culori mai exacte"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Valoare înlocuită de <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">"Timp aproximativ rămas: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"A mai rămas mai puțin de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"A mai rămas mai mult de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"A mai rămas mai mult de <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefonul se poate închide în curând"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tableta se poate închide în curând"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Dispozitivul se poate închide în curând"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefonul se poate închide în curând (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tableta se poate închide în curând (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Dispozitivul se poate închide în curând (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefonul se poate închide în curând"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tableta se poate închide în curând"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Dispozitivul se poate închide în curând"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefonul se poate închide în curând (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tableta se poate închide în curând (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Dispozitivul se poate închide în curând (<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="7415639699283965818">"Au mai rămas <xliff:g id="TIME">%1$s</xliff:g> până la încărcare"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> până la încărcare"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Necunoscut"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Se încarcă"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"se încarcă"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Se încarcă rapid"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Se încarcă lent"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nu se încarcă"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Conectat, nu se poate încărca chiar acum"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Complet"</string>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 104efdc..3df750d 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Подключено через приложение \"<xliff:g id="NAME">%1$s</xliff:g>\"."</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Доступно через %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Нажмите, чтобы зарегистрироваться"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Нет подключения к Интернету"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Доступа к частному DNS-серверу нет."</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Подключение к сети ограничено."</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Нет подключения к Интернету"</string>
@@ -113,7 +112,7 @@
     <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_pairing_accept" msgid="2054232610815498004">"Добавить"</string>
+    <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Подключить"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ДОБАВИТЬ"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Отмена"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Установление соединения обеспечивает доступ к вашим контактам и журналу звонков при подключении."</string>
@@ -207,6 +206,33 @@
     <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="enable_adb_wireless" msgid="6973226350963971018">"Отладка по Wi-Fi"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Режим отладки при подключении к сети Wi‑Fi"</string>
+    <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_summary" msgid="3729901496856458634">"Подключение новых устройств с помощью сканера QR-кодов"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Сведения об устройстве"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Удалить"</string>
+    <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_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 с использованием QR-кода"</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_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="8578868049289910131">"Подключение устройства через Wi‑Fi с использованием QR-кода"</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="keep_screen_on" msgid="1187161672348797558">"Не выключать экран"</string>
@@ -272,6 +298,8 @@
     <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">"Разрешить отладку по Wi-Fi?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Отладка по Wi-Fi – это режим, предназначенный только для разработчиков. Он позволяет перемещать файлы между устройством и компьютером, напрямую устанавливать приложения, а также просматривать системные журналы."</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>
@@ -384,7 +412,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="9137381746633858694">"Коррекция цвета помогает пользователям с нарушениями цветового зрения лучше различать изображение на экране."</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Коррекция цвета помогает пользователям с нарушениями цветового зрения лучше различать изображение на экране"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Уровень заряда батареи: <xliff:g id="LEVEL">%2$s</xliff:g> (хватит менее чем на <xliff:g id="THRESHOLD">%1$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Уровень заряда батареи: <xliff:g id="LEVEL">%2$s</xliff:g> (хватит более чем на <xliff:g id="TIME_REMAINING">%1$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Хватит более чем на <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Телефон скоро завершит работу"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Планшет скоро завершит работу"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Устройство скоро завершит работу"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Уровень заряда батареи: <xliff:g id="LEVEL">%1$s</xliff:g>. Телефон скоро завершит работу."</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Уровень заряда батареи: <xliff:g id="LEVEL">%1$s</xliff:g>. Планшет скоро завершит работу."</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Уровень заряда батареи: <xliff:g id="LEVEL">%1$s</xliff:g>. Устройство скоро завершит работу."</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Телефон скоро выключится"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Планшет скоро выключится"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Устройство скоро выключится"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Телефон скоро выключится (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Планшет скоро выключится (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> до полной зарядки"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"заряжается"</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_discharging" msgid="6962689305413556485">"Не заряжается"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Подключено, не заряжается"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Батарея заряжена"</string>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index f5dad87..c1452d2 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> හරහා සම්බන්ධයි"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s හරහා ලබා ගැනීමට හැකිය"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"ලියාපදිංචි වීමට තට්ටු කරන්න"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"අන්තර්ජාලය නැත"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"පුද්ගලික DNS සේවාදායකයට ප්‍රවේශ වීමට නොහැකිය"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"සීමිත සම්බන්ධතාව"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"අන්තර්ජාලය නැත"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"QR කේතය සමගින් උපාංගය යුගල කරන්න"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR කේත ස්කෑනරය භාවිතයෙන් නව උපාංග යුගල කරන්න"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"උපාංග විස්තර"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"අමතක කරන්න"</string>
+    <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_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_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 ලිපිනය &amp; තොට"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR කේතය ස්කෑන් කරන්න"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR කේතය ස්කෑන් කිරීමෙන් Wi‑Fi හරහා උපාංගය යුගල කරන්න"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, දෝෂාවෙක්ෂණ, dev"</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>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"සංවර්ධන සැකසීම් වවලට අවසර දෙන්නද?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"මෙම සැකසීම් වර්ධක භාවිතය සඳහා පමණි. ඔබගේ උපාංගයේ සහ යෙදුම්වල අක්‍රිය වීමට හෝ වැරදි ක්‍රියා කෙරුමකට ඒවා බලපෑ හැක."</string>
@@ -384,7 +412,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="9137381746633858694">"වර්ණ අන්ධතාවෙන් පෙළෙන පුද්ගලයන්ට වඩාත් නිරවද්‍ය වර්ණ බැලීමට වර්ණ නිවැරදි කිරීම සහාය වේ"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"වර්ණ අන්ධතාවෙන් පෙළෙන පුද්ගලයන්ට වඩාත් නිරවද්‍ය වර්ණ බැලීමට වර්ණ නිවැරදි කිරීම සහාය වේ"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g>ට වඩා අඩුවෙන් ඉතිරිය (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>ට වඩා වැඩියෙන් ඉතිරිය (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>කට වඩා වැඩියෙන් ඉතිරිය"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"දුරකථනය ඉක්මනින් වැසිය හැකිය"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ටැබ්ලටය ඉක්මනින් වැසිය හැකිය"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"උපාංගය ඉක්මනින් වැසිය හැකිය"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"දුරකථනය ඉක්මනින් වැසිය හැකිය (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ටැබ්ලටය ඉක්මනින් වැසිය හැකිය (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"උපාංගය ඉක්මනින් වැසිය හැකිය (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"දුරකථනය ඉක්මනින් වැසිය හැකිය"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ටැබ්ලට් පරිගණකය ඉක්මනින් වැසිය හැකිය"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"උපාංගය ඉක්මනින් වැසිය හැකිය"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"දුරකථනය ඉක්මනින් වැසිය හැකිය (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ටැබ්ලට් පරිගණකය ඉක්මනින් වැසිය හැකිය (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"ආරෝපණය වන තෙක් <xliff:g id="TIME">%1$s</xliff:g> ඇත"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - ආරෝපණය වන තෙක් <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"ආරෝපණය වේ"</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_discharging" msgid="6962689305413556485">"ආරෝපණය නොවේ"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"පේනුගත කර ඇත, මේ අවස්ථාවේදී ආරෝපණය කළ නොහැකිය"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"පූර්ණ"</string>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 527dafb..0f1fbce 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Pripojené prostredníctvom siete <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"K dispozícii prostredníctvom %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Prihláste sa klepnutím"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Bez internetu"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"K súkromnému serveru DNS sa nepodarilo získať prístup"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Obmedzené pripojenie"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Žiadny internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Ladenie cez USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Povoliť režim ladenia s pripojeným zariadením USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Odvolať autorizácie na ladenie cez USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Bezdrôtové ladenie"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Režim ladenia pri zapnutej sieti Wi-Fi"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Chyba"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Bezdrôtové ladenie"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Ak chcete zobraziť a používať dostupné zariadenia, zapnite bezdrôtové ladenie"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Spárovať zariadenie pomocou QR kódu"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Spárujte nové zariadenia pomocou skenera QR kódov"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Spárovať zariadenie pomocou párovacieho kódu"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Spárujte nové zariadenia pomocou šesťmiestneho kódu"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Spárované zariadenia"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Aktuálne pripojené"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Podrobnosti o zariadení"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Odstrániť"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Digitálny odtlačok zariadenia: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Pripojenie zlyhalo"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Skontrolujte, či je zariadenie <xliff:g id="DEVICE_NAME">%1$s</xliff:g> pripojené k správnej sieti"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Párovanie so zariadením"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Párovací kód siete Wi-Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Párovanie zlyhalo"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Skontrolujte, či je zariadenie pripojené k rovnakej sieti."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Spárujte zariadenie cez sieť Wi-Fi naskenovaním QR kódu"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Páruje sa zariadenie…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Zariadenie sa nepodarilo spárovať. Buď bol QR kód nesprávny, alebo zariadenie nie je pripojené k rovnakej sieti."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adresa IP a port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Naskenujte QR kód"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Spárujte zariadenie cez sieť Wi-Fi naskenovaním QR kódu"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ladenie, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Skratka hlásenia chyby"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Zobraziť v hlavnej ponuke tlačidlo na vytvorenie hlásenia chyby"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Nevypínať obrazovku"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Ak je k dispozícii hardvérová akcelerácia tetheringu, používať ju"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Povoliť ladenie cez USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Ladenie cez USB je určené iba na účely vývoja. Možno ho použiť na kopírovanie dát medzi počítačom a zariadením, inštaláciu aplikácií do zariadenia bez upozornenia a čítanie dát denníka."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Chcete povoliť bezdrôtové ladenie?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Bezdrôtové ladenie je určené iba na účely vývoja. Môžete pomocou neho kopírovať dáta medzi počítačom a zariadením, inštalovať bez upozornenia aplikácie do zariadenia a čítať dáta denníkov."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Chcete všetkým v minulosti autorizovaným počítačom odvolať prístup k ladeniu cez USB?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Povoliť nastavenia pre vývojárov?"</string>
     <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>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomália (červená a zelená)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomália (modrá a žltá)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Úprava farieb"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Korekcia farieb pomáha farboslepým ľuďom vidieť presnejšie farby"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Korekcia farieb pomáha farboslepým ľuďom vidieť presnejšie farby"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Prekonané predvoľbou <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">"Zostáva približne <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Zostáva menej ako <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Zostáva viac ako <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Zostáva viac ako <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefón sa môže čoskoro vypnúť"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet sa môže čoskoro vypnúť"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Zariadenie sa môže čoskoro vypnúť"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefón sa môže čoskoro vypnúť (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet sa môže čoskoro vypnúť (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Zariadenie sa môže čoskoro vypnúť (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefón sa môže čoskoro vypnúť"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet sa môže čoskoro vypnúť"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Zariadenie sa môže čoskoro vypnúť"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefón sa môže čoskoro vypnúť (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet sa môže čoskoro vypnúť (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Zariadenie sa môže čoskoro vypnúť (<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="7415639699283965818">"Zostávajúci čas do úplného nabitia: <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> do úplného nabitia"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Neznáme"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Nabíja sa"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"nabíja sa"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Rýchle nabíjanie"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Pomalé nabíjanie"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nenabíja sa"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Pripojené, ale nie je možné nabíjať"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Nabitá"</string>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index 4816950..08a74fb 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Povezava vzpostavljena prek omrežja <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Na voljo prek: %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Dotaknite se, če se želite registrirati"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Ni internetne povezave"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Do zasebnega strežnika DNS ni mogoče dostopati"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Omejena povezava"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Brez internetne povezave"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Odpravljanje težav prek USB-ja"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Način za odpravljanje težav, ko je vzpostavljena povezava USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Preklic dovoljenj za odpravljanje težav prek povezave USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Brezžično odpravljanje napak"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Način za odpravljanje napak pri vzpostavljeni povezavi Wi‑Fi"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Napaka"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Brezžično odpravljanje napak"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Če si želite ogledati in uporabljati razpoložljive naprave, vklopite brezžično odpravljanje napak"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Seznanjanje naprave s kodo QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Seznanjanje novih naprav z optičnim bralnikom kod QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Seznanjanje naprave s kodo za seznanjanje"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Seznanjanje novih naprav s šestmestno kodo"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Seznanjene naprave"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Trenutno povezano"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Podrobnosti o napravi"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Pozabi"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Prstni odtis naprave: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Povezava neuspešna"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Preverite, ali je naprava <xliff:g id="DEVICE_NAME">%1$s</xliff:g> povezana v ustrezno omrežje"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Seznanitev z napravo"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Koda za seznanjanje po Wi‑Fi-ju"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Seznanjanje neuspešno"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Preverite, ali je naprava povezana v isto omrežje."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Seznanitev naprave prek Wi‑Fi-ja z optičnim branjem kode QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Seznanjanje naprave …"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Seznanitev naprave ni uspela. Koda QR je nepravilna ali pa naprava ni povezana v isto omrežje."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Naslov IP in vrata"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Optično branje kode QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Seznanitev naprave prek Wi‑Fi-ja z optičnim branjem kode QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, odpravljanje napak, razvoj"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Bližnjica za poročanje o napakah"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Prikaz gumba za ustvarjanje poročila o napakah v meniju za vklop/izklop"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Brez izklopa zaslona"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Uporabi strojno pospeševanje za internetno povezavo prek mobilnega telefona, če je na voljo"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Ali dovolite odpravljanje težav s povezavo USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Odpravljanje težav s povezavo USB je namenjeno samo za razvoj. Lahko ga uporabljate za kopiranje podatkov med računalnikom in napravo, nameščanje aplikacij v napravo brez obveščanja in branje podatkov v dnevniku."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Ali dovolite brezžično odpravljanje napak?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Brezžično odpravljanje napak je namenjeno samo za razvoj. Lahko ga uporabljate za kopiranje podatkov med računalnikom in napravo, nameščanje aplikacij v napravo brez obveščanja in branje podatkov v dnevniku."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Ali želite preklicati dostop do odpravljanja težav prek povezave USB iz vseh računalnikov, ki ste jih pooblastili?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Ali želite omogočiti nastavitve za razvijanje?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Te nastavitve so namenjene samo za razvijanje in lahko povzročijo prekinitev ali napačno delovanje naprave in aplikacij v njej."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalija (rdeča – zelena)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalija (modra – rumena)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Popravljanje barv"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Popravljanje barv osebam z barvno slepoto pomaga, da vidijo bolj prave barve"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Popravljanje barv osebam z barvno slepoto pomaga, da vidijo razločnejše barve"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Preglasila nastavitev: <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">"Še približno <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Preostanek: manj kot <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Preostali čas delovanja: manj kot <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Preostali čas delovanja: več kot <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefon se bo morda kmalu zaustavil"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablični računalnik se bo morda kmalu zaustavil"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Naprava se bo morda kmalu zaustavila"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefon se bo morda kmalu zaustavil (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablični računalnik se bo morda kmalu zaustavil (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Naprava se bo morda kmalu zaustavila (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefon se bo morda kmalu zaustavil"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablični računalnik se bo morda kmalu zaustavil"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Naprava se bo morda kmalu zaustavila"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefon se bo morda kmalu zaustavil (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablični računalnik se bo morda kmalu zaustavil (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Naprava se bo morda kmalu zaustavila (<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="7415639699283965818">"Še <xliff:g id="TIME">%1$s</xliff:g> do polne napolnjenosti"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> do polne napolnjenosti"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Neznano"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Polnjenje"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"polnjenje"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Hitro polnjenje"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Počasno polnjenje"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Se ne polni"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Priključeno, trenutno ni mogoče polniti"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Poln"</string>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 12511dd3..1bd9424 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Lidhur përmes <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"E mundshme përmes %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Trokit për t\'u regjistruar"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nuk ka internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Serveri privat DNS nuk mund të qaset"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Lidhje e kufizuar"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Nuk ka internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Korrigjimi i USB-së"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Korrigjo gabimet e modalitetit kur UBS-ja është e lidhur"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Anulo autorizimet e korrigjimeve të gabimeve të USB-së"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Korrigjimi me valë"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Regjimi i korrigjimit kur Wi‑Fi është i lidhur"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Gabim"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Korrigjimi me valë"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Për të parë dhe përdorur pajisjet e disponueshme, aktivizo korrigjimin me valë"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Çifto pajisjen me kod QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Çifto pajisjet e reja duke përdorur skanerin e kodeve QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Çifto pajisjen me kodin e çiftimit"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Çifto pajisjet e reja duke përdorur kodin me gjashtë shifra"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Pajisjet e çiftuara"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Të lidhur aktualisht"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Detajet e pajisjes"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Harro"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Gjurma e gishtit e pajisjes: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Lidhja ishte e pasuksesshme"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Sigurohu që <xliff:g id="DEVICE_NAME">%1$s</xliff:g> të jetë e lidhur me rrjetin e duhur"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Çifto me pajisjen"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Kodi i çiftimit të Wi‑Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Çiftimi ishte i pasuksesshëm"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Sigurohu që pajisja të jetë e lidhur me të njëjtin rrjet"</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Çifto pajisjen përmes Wi‑Fi duke skanuar një kod QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Po çifton pajisjen…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Çiftimi i pajisjes dështoi. Ose kodi QR nuk ishte i saktë, ose pajisja nuk është e lidhur me të njëjtin rrjet."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adresa e IP-së dhe porta"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skano kodin QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Çifto pajisjen përmes Wi‑Fi duke skanuar një kod QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, korrigjimi, zhvilluesi"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Shkurtorja e raportit të defektit në kod"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Shfaq një buton në menynë e fikjes për marrjen e raportit të defekteve"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Qëndro zgjuar"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Përdor përshpejtimin e harduerit për ndarjen e lidhjes (internet) nëse është i disponueshëm"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Të lejohet korrigjimi i USB-së?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Korrigjuesi i USB-së është vetëm për qëllime zhvillimore. Përdore për të kopjuar të dhëna mes kompjuterit dhe pajisjes tënde, për të instaluar aplikacione në pajisjen tënde pa asnjë njoftim si dhe për të lexuar të dhënat e ditarit."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Të lejohet korrigjimi me valë?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Korrigjimi me valë është vetëm për qëllime zhvillimore. Përdore për të kopjuar të dhëna mes kompjuterit dhe pajisjes sate, për të instaluar aplikacione në pajisjen tënde pa asnjë njoftim si dhe për të lexuar të dhënat e regjistrit."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Të bllokohet qasja për korrigjim të USB-së nga të gjithë kompjuterët që ke autorizuar më parë?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Të lejohen cilësimet e zhvillimit?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Këto cilësime janë të projektuara vetëm për përdorim në programim. Ato mund të shkaktojnë që pajisja dhe aplikacionet në të, të mos punojnë ose të veprojnë në mënyrë të gabuar."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomali (e kuqe - e gjelbër)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomali (e kaltër - e verdhë)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Korrigjimi i ngjyrës"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Korrigjimi i ngjyrës i ndihmon njerëzit me daltonizëm të shohin ngjyra më të sakta"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Korrigjimi i ngjyrës i ndihmon njerëzit me daltonizëm të shohin ngjyra më të sakta"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Mbivendosur nga <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">"Rreth <xliff:g id="TIME_REMAINING">%1$s</xliff:g> të mbetura"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Mbeten më pak se <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mbeten më shumë se <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Mbeten më shumë se <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefoni mund të fiket së shpejti"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tableti mund të fiket së shpejti"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Pajisja mund të fiket së shpejti"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefoni mund të fiket së shpejti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tableti mund të fiket së shpejti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Pajisja mund të fiket së shpejti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefoni mund të fiket së shpejti"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tableti mund të fiket së shpejti"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Pajisja mund të fiket së shpejti"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefoni mund të fiket së shpejti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tableti mund të fiket së shpejti (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Pajisja mund të fiket së shpejti (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> të mbetura për karikimin"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> deri sa të karikohen"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"I panjohur"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Po karikohet"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"po karikohet"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Po ngarkon me shpejtësi"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Po karikohet ngadalë"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nuk po karikohet"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Në prizë, por nuk mund të ngarkohet për momentin"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"E mbushur"</string>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 4724be5..3355c57 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Повезано преко: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Доступна је преко приступне тачке %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Додирните да бисте се регистровали"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Нема интернета"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Приступ приватном DNS серверу није успео"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Ограничена веза"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Нема интернета"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"Упарите уређај помоћу QR кода"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Упарите нове уређаје помоћу читача QR кода"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Детаљи о уређају"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Заборави"</string>
+    <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_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 мреже или тако што ћете скенирати QR кôд"</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_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="8578868049289910131">"Упарите уређај помоћу Wi‑Fi мреже или тако што ћете скенирати QR кôд"</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="keep_screen_on" msgid="1187161672348797558">"Не закључавај"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"Желите ли да омогућите програмерска подешавања?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Ова подешавања су намењена само за програмирање. Могу да изазову престанак функционисања или неочекивано понашање уређаја и апликација на њему."</string>
@@ -384,7 +412,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="9137381746633858694">"Корекција боја помаже људима који су далтонисти да прецизније виде боје"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Корекција боја помаже људима који су далтонисти да прецизније виде боје"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Преостало је мање од <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Преостало је више од <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Преостало је више од <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Телефон ће се ускоро искључити"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Таблет ће се ускоро искључити"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Уређај ће се ускоро искључити"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Телефон ће се ускоро искључити (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Таблет ће се ускоро искључити (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Уређај ће се ускоро искључити (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Телефон ће се ускоро искључити"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Таблет ће се ускоро искључити"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Уређај ће се ускоро искључити"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Телефон ће се ускоро искључити (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Таблет ће се ускоро искључити (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"Напуниће се за <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – напуниће се за <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"пуни се"</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_discharging" msgid="6962689305413556485">"Не пуни се"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Прикључено је, али пуњење тренутно није могуће"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Пуна"</string>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index 9d1bc42..fce23af 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Anslutet via <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Tillgängligt via %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Tryck för att logga in"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Inget internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Det går inte att komma åt den privata DNS-servern."</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Begränsad anslutning"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Inget internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB-felsökning"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Felsökningsläge när USB har anslutits"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Återkalla åtkomst till USB-felsökning"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Trådlös felsökning"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Felsökningsläge vid Wi-Fi-anslutning"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Fel"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Trådlös felsökning"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Aktivera trådlös felsökning om du vill se tillgängliga enheter"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Parkoppla enheten med en QR-kod"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Koppla nya enheter med QR-kodsläsare"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Koppla enheten med en kopplingskod"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Koppla nya enheter med en sexsiffrig kod"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Kopplade enheter"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Anslutna just nu"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Enhetsinformation"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Glöm"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Enhetens signatur: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Det gick inte att ansluta"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Kontrollera att <xliff:g id="DEVICE_NAME">%1$s</xliff:g> är ansluten till rätt nätverk"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Parkoppla med enheten"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi-Fi-kopplingskod"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Det gick inte att parkoppla"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Kontrollera att enheten är ansluten till samma nätverk."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Parkoppla enheten via Wi-Fi genom att skanna en QR-kod"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Enheten parkopplas …"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Det gick inte att parkoppla enheten. Antingen var det fel QR-kod eller är enheten inte ansluten till samma nätverk."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-adress och port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skanna QR-kod"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Parkoppla enheten via Wi-Fi genom att skanna en QR-kod"</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="keep_screen_on" msgid="1187161672348797558">"Håll aktiverad"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Använd maskinvaruacceleration för internetdelning om tillgängligt"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Ska USB-felsökning tillåtas?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB-felsökning ska endast användas i utvecklingssyfte. Använd den för att kopiera data mellan datorn och enheten, installera appar på enheten utan meddelanden och läsa loggdata."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Vill du tillåta trådlös felsökning?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Trådlös felsökning ska endast användas i utvecklingssyfte. Använd den för att kopiera data mellan datorn och enheten, installera appar på enheten utan meddelanden och läsa loggdata."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Vill du återkalla åtkomst till USB-felsökning för alla datorer som du tidigare har godkänt?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Tillåt utvecklarinställningar?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Inställningarna är endast avsedda att användas för utvecklingsändamål. De kan orsaka problem med enheten eller apparna som finns installerade på den."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomali (rött-grönt)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomali (blått-gult)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Färgkorrigering"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Med färgkorrigering kan färgblinda personer se mer korrekta färger"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Med färgkorrigering kan färgblinda personer se mer korrekta färger"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Har åsidosatts av <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">"Cirka <xliff:g id="TIME_REMAINING">%1$s</xliff:g> kvar"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Mindre än <xliff:g id="THRESHOLD">%1$s</xliff:g> återstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mer än <xliff:g id="TIME_REMAINING">%1$s</xliff:g> återstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Mer än <xliff:g id="TIME_REMAINING">%1$s</xliff:g> återstår"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Mobilen kan stängas av snart"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Surfplattan kan stängas av snart"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Enheten kan stängas av snart"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Mobilen kan stängas av snart (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Surfplattan kan stängas av snart (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Enheten kan stängas av snart (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefonen kanske stängs av snart"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Surfplattan kanske stängs av snart"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Enheten kanske stängs av snart"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefonen kanske stängs av snart (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Surfplattan kanske stängs av snart (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Enheten kanske stängs av snart (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> kvar till full laddning"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> till full laddning"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Okänd"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Laddar"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"laddas"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Laddas snabbt"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Laddas långsamt"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Laddar inte"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Inkopplad, kan inte laddas just nu"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Fullt"</string>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 1e2489f..3ca705f 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Imeunganishwa kupitia <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Inapatikana kupitia %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Gusa ili ujisajili"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Hakuna intaneti"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Seva ya faragha ya DNS haiwezi kufikiwa"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Muunganisho hafifu"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Hakuna intaneti"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Utatuzi wa USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Muundo wa kurekebisha wakati USB imeunganishwa"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Batilisha idhini za kurekebisha USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Utatuzi usiotumia waya"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Hali ya utatuzi wakati Wi-Fi imeunganishwa"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Hitilafu"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Utatuzi usiotumia waya"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Ili kungalia na kutumia vifaa vinavyopatikana, washa utatuzi usiotumia waya"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Oanisha kifaa ukitumia msimbo wa QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Oanisha vifaa vipya ukitumia Kichanganuzi cha Msimbo wa QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Oanisha kifaa ukitumia msimbo wa kuoanisha"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Oanisha vifaa vipya ukitumia msimbo wa tarakimu sita"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Vifaa vilivyooanishwa"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Vilivyounganishwa kwa sasa"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Maelezo ya kifaa"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Sahau"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Alama bainifu ya kifaa: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Imeshindwa kuunganisha"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Hakikisha kuwa <xliff:g id="DEVICE_NAME">%1$s</xliff:g> kimeunganishwa kwenye mtandao sahihi"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Oanisha na kifaa"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Msimbo wa kuoanisha wa Wi-Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Imeshindwa kuunganisha"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Hakikisha kuwa kifaa kimeunganishwa kwenye mtandao mmoja."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Oanisha kifaa kupitia Wi-Fi kwa kuchanganua msimbo wa QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Inaoanisha kifaa…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Imeshindwa kuoanisha kifaa. Huenda msimbo wa QR haukuwa sahihi au kifaa hakijaunganishwa kwenye mtandao mmoja."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Anwani ya IP na Mlango"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Changanua msimbo wa QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Oanisha kifaa kupitia Wi-Fi kwa kuchanganua Msimbo wa QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, tatua, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Njia ya mkato ya kuripoti hitilafu"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Onyesha kitufe cha kuripoti hitilafu katika menyu ya kuzima/kuwasha kifaa"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Weka skrini ikiwa imewashwa"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Tumia huduma ya kuongeza kasi kwa kutumia maunzi ili kusambaza mtandao ikiwa inapatikana"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Ruhusu utatuaji USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Ueuaji wa USB umekusudiwa kwa malengo ya utengenezaji tu. Itumi kunakili data kati ya kompyuta yako na kifaa chako, kusanidi programu kwa kifaa chako bila arifa, na kusoma data ya rajisi."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Ungependa kuruhusu utatuzi usiotumia waya?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Utatuzi usiotumia waya umekusudiwa kwa malengo ya usanidi tu. Utumie kunakili data kati ya kompyuta yako na kifaa chako, kusakinisha programu kwenye kifaa chako bila arifa na kusoma data ya kumbukumbu."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Unataka kubatilisha ufikiaji wa urekebishaji wa USB kutoka kwenye kompyuta zote ulizotangulia kuidhinisha?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Ruhusu mipangilio ya usanidi?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Mipangilio hii imekusudiwa kwa matumizi ya usanidi tu. Inaweza kusababisha kifaa chako na programu zilizoko kuvunjika au kutofanya kazi vizuri."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomaly (nyekundu-kijani)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomaly (samawati-manjano)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Usahihishaji wa rangi"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Urekebishaji wa rangi huwasaidia watu wenye matatizo ya kutofautisha rangi ili waone rangi nyingi sahihi"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Urekebishaji wa rangi huwasaidia watu wenye matatizo ya kutofautisha rangi ili waone rangi nyingi sahihi"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Imetanguliwa na <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">"Zimesalia takribani <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Zimesalia chini ya <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Zimesalia zaidi ya <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Zimesalia zaidi ya <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Simu inakaribia kuzimika"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Kompyuta kibao inakaribia kuzimika"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Kifaa kinakaribia kuzimika"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Simu inakaribia kuzimika (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Kompyuta kibao inakaribia kuzimika (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Kifaa kinakaribia kuzimika (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Huenda simu ikazima hivi karibuni"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Huenda kompyuta yako kibao ikazima hivi karibuni"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Huenda kifaa kikazima hivi karibuni"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Huenda simu ikazima hivi karibuni (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Huenda kompyuta kibao ikazima hivi karibuni (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Huenda kifaa kikazima hivi karibuni (<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="7415639699283965818">"Zimesalia <xliff:g id="TIME">%1$s</xliff:g> hadi ijae chaji"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> hadi ijae chaji"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Haijulikani"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Inachaji"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"inachaji"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Inachaji kwa kasi"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Inachaji pole pole"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Haichaji"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Haiwezi kuchaji kwa sasa"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Imejaa"</string>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index fcb801b..4f0b779 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> மூலம் இணைக்கப்பட்டது"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s வழியாகக் கிடைக்கிறது"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"பதிவு செய்யத் தட்டவும்"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"இணைய இணைப்பு இல்லை"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"தனிப்பட்ட DNS சேவையகத்தை அணுக இயலாது"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"வரம்பிற்கு உட்பட்ட இணைப்பு"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"இணைய இணைப்பு இல்லை"</string>
@@ -150,7 +149,7 @@
     <string name="tether_settings_title_usb_bluetooth" msgid="1727111807207577322">"டெதெரிங்"</string>
     <string name="tether_settings_title_all" msgid="8910259483383010470">"டெதெரிங் &amp; போர்டபிள் ஹாட்ஸ்பாட்"</string>
     <string name="managed_user_title" msgid="449081789742645723">"எல்லா பணிப் பயன்பாடுகளும்"</string>
-    <string name="user_guest" msgid="6939192779649870792">"வேறொருவர்"</string>
+    <string name="user_guest" msgid="6939192779649870792">"கெஸ்ட்"</string>
     <string name="unknown" msgid="3544487229740637809">"அறியப்படாத"</string>
     <string name="running_process_item_user_label" msgid="3988506293099805796">"பயனர்: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="launch_defaults_some" msgid="3631650616557252926">"சில இயல்புநிலைகள் அமைக்கப்பட்டன"</string>
@@ -207,6 +206,60 @@
     <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>
+    <!-- no translation found for enable_adb_wireless (6973226350963971018) -->
+    <skip />
+    <!-- no translation found for enable_adb_wireless_summary (7344391423657093011) -->
+    <skip />
+    <!-- no translation found for adb_wireless_error (721958772149779856) -->
+    <skip />
+    <!-- no translation found for adb_wireless_settings (2295017847215680229) -->
+    <skip />
+    <!-- no translation found for adb_wireless_list_empty_off (1713707973837255490) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_qrcode_title (6982904096137468634) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_qrcode_summary (3729901496856458634) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_code_title (1122590300445142904) -->
+    <skip />
+    <!-- no translation found for adb_pair_method_code_summary (6370414511333685185) -->
+    <skip />
+    <!-- no translation found for adb_paired_devices_title (5268997341526217362) -->
+    <skip />
+    <!-- no translation found for adb_wireless_device_connected_summary (3039660790249148713) -->
+    <skip />
+    <!-- no translation found for adb_wireless_device_details_title (7129369670526565786) -->
+    <skip />
+    <!-- no translation found for adb_device_forget (193072400783068417) -->
+    <skip />
+    <!-- no translation found for adb_device_fingerprint_title_format (291504822917843701) -->
+    <skip />
+    <!-- no translation found for adb_wireless_connection_failed_title (664211177427438438) -->
+    <skip />
+    <!-- no translation found for adb_wireless_connection_failed_message (9213896700171602073) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_title (7141739231018530210) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_pairing_code_label (3639239786669722731) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_failed_title (3426758947882091735) -->
+    <skip />
+    <!-- no translation found for adb_pairing_device_dialog_failed_msg (6611097519661997148) -->
+    <skip />
+    <!-- no translation found for adb_wireless_qrcode_summary (8051414549011801917) -->
+    <skip />
+    <!-- no translation found for adb_wireless_verifying_qrcode_text (6123192424916029207) -->
+    <skip />
+    <!-- no translation found for adb_qrcode_pairing_device_failed_msg (6936292092592914132) -->
+    <skip />
+    <!-- no translation found for adb_wireless_ip_addr_preference_title (8335132107715311730) -->
+    <skip />
+    <!-- no translation found for adb_wireless_qrcode_pairing_title (1906409667944674707) -->
+    <skip />
+    <!-- no translation found for adb_wireless_qrcode_pairing_description (8578868049289910131) -->
+    <skip />
+    <!-- no translation found for keywords_adb_wireless (6507505581882171240) -->
+    <skip />
     <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>
@@ -272,6 +325,10 @@
     <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>
+    <!-- no translation found for adbwifi_warning_title (727104571653031865) -->
+    <skip />
+    <!-- no translation found for adbwifi_warning_message (8005936574322702388) -->
+    <skip />
     <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>
@@ -384,7 +441,8 @@
     <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="9137381746633858694">"வண்ணத் திருத்தத்தால் நிறக்குருடு உள்ளவர்களால் வண்ணங்களை இன்னும் துல்லியமாகப் பார்க்க முடியும்"</string>
+    <!-- no translation found for accessibility_display_daltonizer_preference_subtitle (6178138727195403796) -->
+    <skip />
     <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>
@@ -403,18 +461,27 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g>க்கும் குறைவாகவே பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>க்கும் மேல் பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>க்கும் மேல் பயன்படுத்த முடியும்"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"மொபைல் விரைவில் ஆஃப் ஆகக்கூடும்"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"டேப்லெட் விரைவில் ஆஃப் ஆகக்கூடும்"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"சாதனம் விரைவில் ஆஃப் ஆகக்கூடும்"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"மொபைல் விரைவில் ஆஃப் ஆகக்கூடும் (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"டேப்லெட் விரைவில் ஆஃப் ஆகக்கூடும் (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"சாதனம் விரைவில் ஆஃப் ஆகக்கூடும் (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <!-- no translation found for power_remaining_duration_only_shutdown_imminent (137330009791560774) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_only_shutdown_imminent (145489081521468132) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_only_shutdown_imminent (1070562682853942350) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_shutdown_imminent (4429259621177089719) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_shutdown_imminent (7703677921000858479) -->
+    <skip />
+    <!-- no translation found for power_remaining_duration_shutdown_imminent (4374784375644214578) -->
+    <skip />
     <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="7415639699283965818">"முழு சார்ஜாக <xliff:g id="TIME">%1$s</xliff:g> ஆகும்"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - முழு சார்ஜாக <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"சார்ஜ் ஆகிறது"</string>
+    <!-- no translation found for battery_info_status_charging_fast (8027559755902954885) -->
+    <skip />
+    <!-- no translation found for battery_info_status_charging_slow (3190803837168962319) -->
+    <skip />
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"சார்ஜ் செய்யப்படவில்லை"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"செருகப்பட்டது, ஆனால் இப்போது சார்ஜ் செய்ய முடியவில்லை"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"முழுவதும் சார்ஜ் ஆனது"</string>
@@ -436,7 +503,7 @@
     <string name="screen_zoom_summary_large" msgid="4706951482598978984">"பெரியது"</string>
     <string name="screen_zoom_summary_very_large" msgid="7317423942896999029">"கொஞ்சம் பெரியது"</string>
     <string name="screen_zoom_summary_extremely_large" msgid="1438045624562358554">"மிகப் பெரியது"</string>
-    <string name="screen_zoom_summary_custom" msgid="3468154096832912210">"தனிப்பயன் (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
+    <string name="screen_zoom_summary_custom" msgid="3468154096832912210">"பிரத்தியேக (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="content_description_menu_button" msgid="6254844309171779931">"மெனு"</string>
     <string name="retail_demo_reset_message" msgid="5392824901108195463">"டெமோ பயன்முறையில் ஆரம்பநிலை மீட்டமைவைச் செயல்படுத்த, கடவுச்சொல்லை உள்ளிடவும்"</string>
     <string name="retail_demo_reset_next" msgid="3688129033843885362">"அடுத்து"</string>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index 7a80451..3a354e0 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> ద్వారా కనెక్ట్ చేయబడింది"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s ద్వారా అందుబాటులో ఉంది"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"సైన్ అప్ చేయడానికి నొక్కండి"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"ఇంటర్నెట్ లేదు"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"ప్రైవేట్ DNS సర్వర్‌ను యాక్సెస్ చేయడం సాధ్యపడదు"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"పరిమిత కనెక్షన్"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"ఇంటర్నెట్ లేదు"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"QR కోడ్‌తో పరికరాన్ని పెయిర్ చేయండి"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR కోడ్ స్కానర్‌ను ఉపయోగించి కొత్త పరికరాలను పెయిర్ చేయండి"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"పరికర వివరాలు"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"విస్మరించు"</string>
+    <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_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_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 చిరునామా &amp; పోర్ట్"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR కోడ్‌ను స్కాన్ చేయండి"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"పరికరాన్ని Wi-Fi ద్వారా పెయిర్ చేయడానికి QR కోడ్‌ను స్కాన్ చేయండి"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, డీబగ్, dev"</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>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"అభివృద్ధి సెట్టింగ్‌లను అనుమతించాలా?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"ఈ సెట్టింగ్‌లు అభివృద్ధి వినియోగం కోసం మాత్రమే ఉద్దేశించబడినవి. వీటి వలన మీ పరికరం మరియు దీనిలోని యాప్‌లు విచ్ఛిన్నం కావచ్చు లేదా తప్పుగా ప్రవర్తించవచ్చు."</string>
@@ -384,7 +412,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="9137381746633858694">"రంగు సవరణ అనేది వర్ణాంధత్వం ఉన్న వ్యక్తులకు మరింత ఖచ్చితమైన రంగులను చూడడానికి సహాయపడుతుంది"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"రంగులను సరి చేయడం వల్ల, కలర్ బ్లైండ్‌నెస్ ఉన్నవారు మరింత ఖచ్చితమైన రంగులను చూడగలుగుతారు"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> కంటే తక్కువ సమయం మిగిలి ఉంది (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> కంటే ఎక్కువ సమయం మిగిలి ఉంది (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> కంటే ఎక్కువ సమయం మిగిలి ఉంది"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"ఫోన్ త్వరలో షట్‌డౌన్ కావచ్చు"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"టాబ్లెట్ త్వరలో షట్‌డౌన్ కావచ్చు"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"పరికరం త్వరలో షట్‌డౌన్ కావచ్చు"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"ఫోన్ షట్‌డౌన్ కావచ్చు (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"టాబ్లెట్ షట్‌డౌన్ కావచ్చు (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"పరికరం త్వరలో షట్‌డౌన్ కావచ్చు (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"ఫోన్ త్వరలో షట్‌డౌన్ కావచ్చు"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"టాబ్లెట్ త్వరలో షట్‌డౌన్ కావచ్చు"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"పరికరం త్వరలో షట్‌డౌన్ కావచ్చు"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"ఫోన్ త్వరలో షట్‌డౌన్ కావచ్చు (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"టాబ్లెట్ త్వరలో షట్‌డౌన్ కావచ్చు (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"ఛార్జ్ అవ్వడానికి <xliff:g id="TIME">%1$s</xliff:g> సమయం మిగిలి ఉంది"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - ఛార్జ్ అవ్వడానికి <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"ఛార్జ్ అవుతోంది"</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_discharging" msgid="6962689305413556485">"ఛార్జ్ కావడం లేదు"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"ప్లగ్ ఇన్ చేయబడింది, ప్రస్తుతం ఛార్జ్ చేయడం సాధ్యం కాదు"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"నిండింది"</string>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index 130e1c4..e34c548 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"เชื่อมต่อแล้วผ่าน <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"พร้อมใช้งานผ่านทาง %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"แตะเพื่อลงชื่อสมัครใช้"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"ไม่มีอินเทอร์เน็ต"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"เข้าถึงเซิร์ฟเวอร์ DNS ไม่ได้"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"การเชื่อมต่อที่จำกัด"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"ไม่มีอินเทอร์เน็ต"</string>
@@ -207,6 +206,33 @@
     <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="enable_adb_wireless" msgid="6973226350963971018">"การแก้ไขข้อบกพร่องผ่าน Wi-Fi"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"โหมดแก้ไขข้อบกพร่องเมื่อเชื่อมต่อ Wi-Fi"</string>
+    <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">"จับคู่อุปกรณ์ด้วยคิวอาร์โค้ด"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"จับคู่อุปกรณ์เครื่องใหม่โดยใช้เครื่องมือสแกนคิวอาร์โค้ด"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"จับคู่อุปกรณ์ด้วยรหัสการจับคู่"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"จับคู่อุปกรณ์เครื่องใหม่โดยใช้รหัสตัวเลข 6 หลัก"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"อุปกรณ์ที่จับคู่"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"เชื่อมต่ออยู่"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"รายละเอียดอุปกรณ์"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"ไม่จำ"</string>
+    <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_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_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="8578868049289910131">"จับคู่อุปกรณ์ผ่าน 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="keep_screen_on" msgid="1187161672348797558">"เปิดหน้าจอค้าง"</string>
@@ -272,6 +298,8 @@
     <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">"อนุญาตให้แก้ไขข้อบกพร่องผ่าน Wi-Fi ไหม"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"การแก้ไขข้อบกพร่องผ่าน Wi-Fi มีไว้เพื่อการพัฒนาเท่านั้น ให้ใช้การแก้ไขนี้เพื่อคัดลอกข้อมูลระหว่างคอมพิวเตอร์และอุปกรณ์ ติดตั้งแอปในอุปกรณ์โดยไม่มีการแจ้งเตือน และอ่านข้อมูลบันทึก"</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>
@@ -384,7 +412,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="9137381746633858694">"การแก้ไขสีช่วยให้ผู้ที่มีอาการตาบอดสีเห็นสีต่างๆ ได้ตรงตามจริงยิ่งขึ้น"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"การแก้ไขสีช่วยให้ผู้ที่มีอาการตาบอดสีเห็นสีต่างๆ ได้ตรงตามจริงยิ่งขึ้น"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"เหลือเวลาอีกไม่ถึง <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"เหลือเวลามากกว่า <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"เหลือเวลามากกว่า <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"โทรศัพท์อาจปิดเครื่องในไม่ช้า"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"แท็บเล็ตอาจปิดเครื่องในไม่ช้า"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"อุปกรณ์อาจปิดเครื่องในไม่ช้า"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"โทรศัพท์อาจปิดเครื่องในไม่ช้า (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"แท็บเล็ตอาจปิดเครื่องในไม่ช้า (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"อุปกรณ์อาจปิดเครื่องในไม่ช้า (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"โทรศัพท์อาจปิดเครื่องในไม่ช้า"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"แท็บเล็ตอาจปิดเครื่องในไม่ช้า"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"อุปกรณ์อาจปิดเครื่องในไม่ช้า"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"โทรศัพท์อาจปิดเครื่องในไม่ช้า (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"แท็บเล็ตอาจปิดเครื่องในไม่ช้า (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"เหลือ <xliff:g id="TIME">%1$s</xliff:g> จนกว่าจะชาร์จ"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"กำลังชาร์จ"</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_discharging" msgid="6962689305413556485">"ไม่ได้ชาร์จ"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"เสียบอยู่ ไม่สามารถชาร์จได้ในขณะนี้"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"เต็ม"</string>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index bc1a405..ee04288 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Nakakonekta sa pamamagitan ng <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Available sa pamamagitan ng %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"I-tap para mag-sign up"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Walang internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Hindi ma-access ang pribadong DNS server"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Limitadong koneksyon"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Walang internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Pag-debug ng USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Debug mode kapag nakakonekta ang USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Bawiin ang mga pahintulot sa pag-debug ng USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Wireless na pag-debug"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Debug mode kapag nakakonekta sa Wi‑Fi"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Error"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Wireless na pag-debug"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Para makita at magamit ang mga available na device, i-on ang wireless na pag-debug"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Magpares ng device gamit ang QR code"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Magpares ng mga bagong device gamit ang QR code Scanner"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Pinapares ang device gamit ang code ng pagpapares"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Magpares ng mga bagong device gamit ang six digit na code"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Mga nakapares na device"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Kasalukuyang nakakonekta"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Mga detalye ng device"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Kalimutan"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Fingerprint ng device: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Hindi nagawang kumonekta"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Tiyaking tama ang network kung saan nakakonekta ang <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Ipares sa device"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Code ng pagpapares sa Wi-Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Hindi nagawa ang pagpapares"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Tiyaking nakakonekta ang device sa parehong network."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Ipares ang device gamit ang Wi‑Fi sa pamamagitan ng pag-scan ng isang QR code"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Ipinapares ang device…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Hindi nagawang ipares ang device. Hindi tama ang QR code, o hindi nakakonekta ang device sa parehong network."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP address at Port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"I-scan ang QR code"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Ipares ang device gamit ang Wi‑Fi sa pamamagitan ng pag-scan ng isang QR Code"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Shortcut ng ulat sa bug"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Magpakita ng button sa power menu sa pagkuha ng ulat sa bug"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Manatiling gumagana"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Gamitin ang hardware acceleration para sa pag-tether kung available"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Payagan ang pag-debug ng USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Ang pag-debug ng USB ay para lang sa mga layuning pag-develop. Gamitin ito upang kumopya ng data sa pagitan ng iyong computer at iyong device, mag-install ng mga app sa iyong device nang walang notification, at magbasa ng data ng log."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Pahintulutan ang wireless na pag-debug?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Ang wireless na pag-debug ay para lang sa layunin ng pag-develop. Gamitin ito para kumopya ng data sa iyong computer at device mo, mag-install ng mga app sa iyong device nang walang notification, at magbasa ng data ng log."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Bawiin ang access sa pag-debug ng USB mula sa lahat ng computer na dati mong pinahintulutan?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Payagan ang mga setting ng pag-develop?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Nilalayon ang mga setting na ito para sa paggamit sa pag-develop lamang. Maaaring magsanhi ang mga ito ng pagkasira o hindi paggana nang maayos ng iyong device at mga application na nandito."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomaly (pula-berde)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomaly (asul-dilaw)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Pagtatama ng kulay"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Ang pagwawasto ng kulay ay nakakatulong sa mga taong may color blindness na makita ang mga mas tamang kulay"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Tinutulungan ng color correction ang mga taong colorblind na makakita ng mas tumpak na kulay"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Na-override ng <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">"Humigit-kumulang <xliff:g id="TIME_REMAINING">%1$s</xliff:g> ang natitira"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Wala nang <xliff:g id="THRESHOLD">%1$s</xliff:g> ang natitira (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mahigit <xliff:g id="TIME_REMAINING">%1$s</xliff:g> pa ang natitira (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Mahigit <xliff:g id="TIME_REMAINING">%1$s</xliff:g> pa ang natitira"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Malapit nang mag-shut down ang telepono"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Malapit nang mag-shut down ang tablet"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Malapit nang mag-shut down ang device"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Malapit nang mag-shut down ang telepono (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Malapit nang mag-shutdown ang tablet (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Malapit nang mag-shut down ang device (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Baka mag-shut down na ang telepono"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Baka mag-shut down na ang tablet"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Baka mag-shut down na ang device"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Baka mag-shut down na ang telepono (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Baka mag-shut down na ang tablet (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Baka mag-shut down na ang device (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> ang natitira bago matapos mag-charge"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> hanggang matapos mag-charge"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Hindi Kilala"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Nagcha-charge"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"nagcha-charge"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Mabilis na charge"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Mabagal na charge"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Hindi nagcha-charge"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Nakasaksak, hindi makapag-charge sa ngayon"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Puno"</string>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index 4e263ef..5015e38 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> ile bağlandı"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s üzerinden kullanılabilir"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Kaydolmak için dokunun"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"İnternet yok"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Gizli DNS sunucusuna erişilemiyor"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Sınırlı bağlantı"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"İnternet yok"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB hata ayıklaması"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"USB bağlandığında hata ayıklama modu"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"USB hata ayıklama yetkilerini kaldır"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Kablosuz hata ayıklama"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Kablosuz bağlandığında hata ayıklama modu"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Hata"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Kablosuz hata ayıklama"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Mevcut cihazları görmek ve kullanmak için kablosuz hata ayıklamayı açın"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Cihazı QR kodu ile eşle"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Yeni cihazları QR kodu Tarayıcıyı kullanarak eşleyin"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Eşleme kodu ile cihaz eşleme"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Yeni cihazları altı basamaklı kodu kullanarak eşleyin"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Eşlenen cihazlar"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Şu anda bağlı"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Cihaz ayrıntıları"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Unut"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Cihaz parmak izi: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Bağlantı başarısız oldu"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazının aynı ağa bağlı olduğundan emin olun"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Cihazla eşle"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Kablosuz eşleme kodu"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Eşleme başarısız oldu"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Cihazın aynı ağa bağlı olduğundan emin olun."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"QR kodu tarayarak kablosuz ağ üzerinden cihaz eşleyin"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Cihaz eşleniyor…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Cihaz eşlenemedi. QR kodu hatalı ya da cihaz aynı ağa bağlı değil."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adresi ve Bağlantı noktası"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR kodunu tara"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR kodu tarayarak kablosuz ağ üzerinden cihaz eşleyin"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, hata ayıklama, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Hata raporu kısayolu"</string>
     <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>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Mevcutsa, tethering donanım hızlandırıcısını kullan"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"USB hata ayıklamasına izin verilsin mi?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB hata ayıklaması yalnızca geliştirme amaçlıdır. Verileri bilgisayarınızla cihazınız arasında kopyalamak, bildirim göndermeksizin uygulamaları cihazınıza yüklemek ve günlük verilerini okumak için kullanın."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Kablosuz hata ayıklamaya izin verilsin mi?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Kablosuz hata ayıklama işlevi yalnızca geliştirme amaçlıdır. Verileri bilgisayarınızla cihazınız arasında kopyalamak, bildirim göndermeksizin uygulamaları cihazınıza yüklemek ve günlük verilerini okumak için kullanın."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Daha önce yetki verdiğiniz tüm bilgisayarların USB hata ayıklama erişimini iptal etmek istiyor musunuz?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Geliştirme amaçlı ayarlara izin verilsin mi?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Bu ayarlar yalnızca geliştirme amaçlıdır. Cihazınızın veya cihazdaki uygulamaların bozulmasına veya hatalı çalışmasına neden olabilir."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Kırmızı renk körlüğü (kırmızı-yeşil)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Mavi renk körlüğü (mavi-sarı)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Renk düzeltme"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Renk düzeltme, renk körlüğü olan kişilerin daha doğru renkler görmelerine yardımcı olur"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Renk düzeltme, renk körlüğü olan kişilerin daha doğru renkler görmelerine yardımcı olur"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"<xliff:g id="TITLE">%1$s</xliff:g> tarafından geçersiz kılındı"</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">"Yaklaşık <xliff:g id="TIME_REMAINING">%1$s</xliff:g> kaldı"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"En çok <xliff:g id="THRESHOLD">%1$s</xliff:g> kaldı (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"En az <xliff:g id="TIME_REMAINING">%1$s</xliff:g> kaldı (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"En az <xliff:g id="TIME_REMAINING">%1$s</xliff:g> kaldı"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefon kısa süre içinde kapanabilir"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Tablet kısa süre içinde kapanabilir"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Cihaz kısa süre içinde kapanabilir"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefon kısa süre içinde kapanabilir (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Tablet kısa süre içinde kapanabilir (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Cihaz kısa süre içinde kapanabilir (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefon kısa süre içinde kapanabilir"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Tablet kısa süre içinde kapanabilir"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Cihaz kısa süre içinde kapanabilir"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefon kısa süre içinde kapanabilir(<xliff:g id="LEVEL">%1$s</xliff:g>"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Tablet kısa süre içinde kapanabilir(<xliff:g id="LEVEL">%1$s</xliff:g>"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Cihaz kısa süre içinde kapanabilir (<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="7415639699283965818">"Şarj olmaya <xliff:g id="TIME">%1$s</xliff:g> kaldı"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - şarj olmaya <xliff:g id="TIME">%2$s</xliff:g> kaldı"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Bilinmiyor"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Şarj oluyor"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"şarj oluyor"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Hızlı şarj oluyor"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Yavaş şarj oluyor"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Şarj olmuyor"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Prize takıldı, şu anda şarj olamıyor"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Dolu"</string>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index ad9f600..3c8f481 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Підключено через додаток <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Доступ через %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Торкніться, щоб увійти"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Немає Інтернету"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Немає доступу до приватного DNS-сервера"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Обмежене з’єднання"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Немає Інтернету"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"Підключати пристрій за допомогою QR-коду"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Підключати нові пристрої за допомогою сканера QR-кодів"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Про пристрій"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Забути"</string>
+    <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_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 за допомогою QR-коду"</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_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="8578868049289910131">"Підключати пристрій через Wi‑Fi за допомогою QR-коду"</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="keep_screen_on" msgid="1187161672348797558">"Залишати активним"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"Дозволити налаштування розробки?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Ці налаштування застосовуються лише з метою розробки. Вони можуть спричиняти вихід з ладу або неправильне функціонування вашого пристрою чи програм у ньому."</string>
@@ -384,7 +412,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="9137381746633858694">"Корекція кольору допомагає людям із дальтонізмом бачити точніші кольори"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Корекція кольору допомагає людям із дальтонізмом бачити точніші кольори"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Залишилося менше ніж <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Залишилося понад <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Залишилося понад <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Телефон може невдовзі вимкнутися"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Планшет може невдовзі вимкнутися"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Пристрій може невдовзі вимкнутися"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Телефон може невдовзі вимкнутися (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Планшет може невдовзі вимкнутися (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Пристрій може невдовзі вимкнутися (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Телефон може невдовзі вимкнутися"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Планшет може невдовзі вимкнутися"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Пристрій може невдовзі вимкнутися"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Телефон може невдовзі вимкнутися (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Планшет може невдовзі вимкнутися (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> до повного заряду"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"заряджається"</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_discharging" msgid="6962689305413556485">"Не заряджається"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Підключено. Не вдається зарядити"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Акумулятор заряджено"</string>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index b995da1..27e5b20 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> کے ذریعے منسلک"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"‏دستیاب بذریعہ ‎%1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"سائن اپ کے لیے تھپتھپائیں"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"انٹرنیٹ نہیں ہے"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"‏نجی DNS سرور تک رسائی حاصل نہیں کی جا سکی"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"محدود کنکشن"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"انٹرنیٹ نہیں ہے"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"‏QR کوڈ کے ذریعے آلہ کا جوڑا بنائیں"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"‏QR کوڈ اسکینر کا استعمال کر کے نئے آلہ کا جوڑا بنائیں"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"آلہ کی تفصیلات"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"بھول جائیں"</string>
+    <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_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_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_description" msgid="8578868049289910131">"‏QR کوڈ اسکین کر کے Wi-Fi پر آلہ کا جوڑا بنائیں"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"‏adb، ڈیبگ، dev"</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>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"ڈویلپمنٹ ترتیبات کی اجازت دیں؟"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"یہ ترتیبات صرف ڈویلپمنٹ استعمال کے ارادے سے ہیں۔ ان سے آپ کا آلہ اور اس پر موجود ایپلیکیشنز بریک ہو سکتی یا غلط برتاؤ کر سکتی ہیں۔"</string>
@@ -384,7 +412,7 @@
     <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_subtitle" msgid="9137381746633858694">"رنگ کی درستگی رنگ نہ دکھائی دینے والے لوگوں کی رنگوں کو مزید درست طریقے سے دیکھنے میں مدد کرتی ہے"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"رنگ کی درستگی رنگ نہ دکھائی دینے والے لوگوں کی رنگوں کو مزید درست طریقے سے دیکھنے میں مدد کرتی ہے"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> سے کم باقی ہے (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> سے زیادہ باقی ہے (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> سے زیادہ باقی ہے"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"فون جلد ہی بند ہو سکتا ہے"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"ٹیبلیٹ جلد ہی بند ہو سکتا ہے"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"آلہ جلد ہی بند ہو سکتا ہے"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"فون جلد ہی بند ہو سکتا ہے (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"ٹیبلیٹ جلد ہی بند ہو سکتا ہے (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"آلہ جلد ہی بند ہو سکتا ہے (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"فون جلد ہی بند ہو سکتا ہے"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"ٹیبلیٹ جلد ہی بند ہو سکتا ہے"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"آلہ جلد ہی بند ہو سکتا ہے"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"فون جلد ہی بند ہو سکتا ہے (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"ٹیبلیٹ جلد ہی بند ہو سکتا ہے (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"چارج ہونے میں <xliff:g id="TIME">%1$s</xliff:g> باقی"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"چارج ہو رہا ہے"</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_discharging" msgid="6962689305413556485">"چارج نہیں ہو رہا ہے"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"پلگ ان ہے، ابھی چارج نہیں کر سکتے"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"مکمل"</string>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index f02b639..ee78795 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> orqali ulandi"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s orqali ishlaydi"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Yozilish uchun bosing"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Internetga ulanmagansiz"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Xususiy DNS server ishlamayapti"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Cheklangan aloqa"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Internet yo‘q"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"USB orqali nosozliklarni aniqlash"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"USB orqali kompyuterga ulanganda tuzatish rejimi yoqilsin"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"USB orqali nosozliklarni tuzatishni taqiqlash"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Simsiz nosozliklarni aniqlash"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Wi‑Fi tarmoqqa ulanganda nosozliklarni aniqlash rejimi"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Xato"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Simsiz nosozliklarni aniqlash"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Mavjud qurilmalarni koʻrish va ulardan foydalanish uchun simsiz nosozliklarni aniqlash funksiyasini yoqing"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"QR kod yordamida qurilmani ulang"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"QR kod skaneri yordamida yangi qurilmalarni ulash mumkin"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Ulanish kodi yordamida qurilmani ulang"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Olti xonali kod yordamida yangi qurilmalarni ulash mumkin"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Ulangan qurilmalar"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Hozirda ulangan"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Qurilma tafsilotlari"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Olib tashlash"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Qurilmadagi barmoq izi: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Ulanmadi"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> kerakli tarmoqqa ulanganini tekshiring"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Qurilma bilan ulanish"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi‑Fi ulanish kodi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Ulanmadi"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Qurilma bir xil tarmoqqa ulanganini tekshiring."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"QR kodni skanerlab, Wi-Fi orqali qurilmani ulang"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Qurilma ulanmoqda…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Qurilma ulanmadi. QR kod xato yoki qurilma bir xil tarmoqqa ulanmagan."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP manzil va port"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR kodni skanerlash"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR kodni skanerlab, Wi-Fi orqali qurilmani ulang"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debag, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Xatoliklar hisoboti"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Menyuda xatoliklar hisobotini yuborish tugmasi ko‘rsatilsin"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Ekranning yoniq turishi"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Modem rejimida apparatli tezlashtirishdan foydalanish (agar mavjud bo‘lsa)"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"USB orqali nosozliklarni tuzatishga ruxsat berilsinmi?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB orqali nosozliklarni aniqlash faqat dasturlash maqsadlarida yoqiladi. Undan maʼlumotlarni qurilmangiz va kompyuter o‘rtasida ko‘chirish, ilovalarni xabarnomasiz o‘rnatish va jurnal maʼlumotlarini o‘qish uchun foydalaniladi."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Simsiz nosozliklarni aniqlashga ruxsat berilsinmi?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Simsiz nosozliklarni aniqlash faqat dasturlash maqsadlarida yoqiladi. Undan maʼlumotlarni qurilmangiz va kompyuter oʻrtasida koʻchirish, ilovalarni bildirishnomasiz oʻrnatish va jurnal maʼlumotlarini oʻqish uchun foydalaniladi."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"USB orqali nosozliklarni tuzatishga berilgan ruxsat siz hisobingizga kirgan barcha kompyuterlar uchun bekor qilinsinmi?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Dasturlash sozlamalariga ruxsat berilsinmi?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Bu sozlamalar faqat dasturlash maqsadlariga mo‘ljallangan. Shuning uchun, ular qurilmangizga va undagi ilovalariga shikast yetkazib, noto‘g‘ri ishlashiga sabab bo‘lishi mumkin."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomaliya (qizil/yashil)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomaliya (ko‘k/sariq)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Rangni tuzatish"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Ranglarni sozlash ranglarni farqlashda muammosi bor insonlarga (masalan, daltoniklarga) aniq koʻrishda yordam beradi"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Ranglarni sozlash ranglarni farqlashda muammosi bor insonlarga (masalan, daltoniklarga) aniq koʻrishda yordam beradi"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"<xliff:g id="TITLE">%1$s</xliff:g> bilan almashtirildi"</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">"Taxminan <xliff:g id="TIME_REMAINING">%1$s</xliff:g> qoldi"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g>dan kamroq vaqt qoldi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>dan ko‘proq vaqt qoldi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>dan ko‘proq vaqt qoldi"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Telefon tez orada o‘chib qolishi mumkin"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Planshet tez orada o‘chib qolishi mumkin"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Qurilma tez orada o‘chib qolishi mumkin"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Telefon tez orada o‘chib qolishi mumkin (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Planshet tez orada o‘chib qolishi mumkin (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Qurilma tez orada o‘chib qolishi mumkin (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Telefon tez orada oʻchib qolishi mumkin"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Planshet tez orada oʻchib qolishi mumkin"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Qurilma tez orada oʻchib qolishi mumkin"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Telefon tez orada oʻchib qolishi mumkin (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Planshet tez orada oʻchib qolishi mumkin (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Qurilma tez orada oʻchib qolishi mumkin (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> ichida toʻliq quvvat oladi"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> ichida toʻliq quvvat oladi"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Noma’lum"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Quvvat olmoqda"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"quvvat olmoqda"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Tezkor quvvat olmoqda"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Sekin quvvat olmoqda"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Quvvat olmayapti"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Ulangan, lekin quvvat olmayapti"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"To‘la"</string>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index 8fcf1f2..6d76962 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Đã kết nối qua <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Có sẵn qua %1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Nhấn để đăng ký"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Không có Internet"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Không thể truy cập máy chủ DNS riêng tư"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Kết nối giới hạn"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Không có Internet"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Gỡ lỗi qua USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Bật chế độ gỡ lỗi khi kết nối USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Thu hồi ủy quyền gỡ lỗi USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Gỡ lỗi không dây"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Chế độ gỡ lỗi khi có kết nối Wi-Fi"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Lỗi"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Gỡ lỗi không dây"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Để xem và sử dụng các thiết bị có sẵn, hãy bật tính năng gỡ lỗi không dây"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Ghép nối thiết bị bằng mã QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Ghép nối các thiết bị mới bằng Trình quét mã QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Ghép nối thiết bị bằng mã ghép nối"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Ghép nối các thiết bị mới bằng mã gồm 6 chữ số"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Thiết bị được ghép nối"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Hiện đang kết nối"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Thông tin chi tiết về thiết bị"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Xóa"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Vân tay trên thiết bị: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Kết nối không thành công"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Đảm bảo bạn kết nối <xliff:g id="DEVICE_NAME">%1$s</xliff:g> với đúng mạng"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Ghép nối với thiết bị"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Mã ghép nối Wi-Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Ghép nối không thành công"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Đảm bảo bạn kết nối thiết bị với cùng một mạng."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Ghép nối thiết bị qua Wi-Fi bằng cách quét mã QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Đang ghép nối thiết bị…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Không ghép nối được thiết bị. Mã QR không chính xác hoặc bạn không kết nối thiết bị với cùng một mạng."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Địa chỉ IP và cổng"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Quét mã QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Ghép nối thiết bị qua Wi-Fi bằng cách quét mã QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, gỡ lỗi, nhà phát triển"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Phím tắt báo cáo lỗi"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Hiển thị một nút trong menu nguồn để báo cáo lỗi"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Không khóa màn hình"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Sử dụng tính năng tăng tốc phần cứng khi chia sẻ kết nối nếu có"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Cho phép gỡ lỗi qua USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Gỡ lỗi USB chỉ dành cho mục đích phát triển. Hãy sử dụng tính năng này để sao chép dữ liệu giữa máy tính và thiết bị của bạn, cài đặt ứng dụng trên thiết bị của bạn mà không thông báo và đọc dữ liệu nhật ký."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Bật tính năng gỡ lỗi không dây?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Tính năng gỡ lỗi không dây chỉ dành cho mục đích phát triển. Hãy sử dụng tính năng này để sao chép dữ liệu giữa máy tính và thiết bị của bạn, cài đặt ứng dụng trên thiết bị mà không thông báo và đọc dữ liệu nhật ký."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Thu hồi quyền truy cập gỡ lỗi USB từ tất cả máy tính mà bạn đã ủy quyền trước đó?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Cho phép cài đặt phát triển?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Những cài đặt này chỉ dành cho mục đích phát triển. Chúng có thể làm cho thiết bị và ứng dụng trên thiết bị của bạn bị lỗi và hoạt động sai."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Mù màu đỏ không hoàn toàn (đỏ-xanh lục)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Mù màu (xanh lam-vàng)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Sửa màu"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Tùy chọn sửa màu giúp những người bị mù màu thấy màu sắc chính xác hơn"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Tính năng hiệu chỉnh màu sắc giúp những người bị mù màu thấy màu sắc chính xác hơn"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Bị ghi đè bởi <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">"Còn khoảng <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Còn lại không đến <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Còn lại hơn <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Còn lại hơn <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Điện thoại có thể sắp tắt"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Máy tính bảng có thể sắp tắt"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Thiết bị có thể sắp tắt"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Điện thoại có thể sắp tắt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Máy tính bảng có thể sắp tắt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Thiết bị có thể sắp tắt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Điện thoại có thể sắp tắt"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Máy tính bảng có thể sắp tắt"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Thiết bị có thể sắp tắt"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Điện thoại có thể sắp tắt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Máy tính bảng có thể sắp tắt (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Thiết bị có thể sắp tắt (<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="7415639699283965818">"Còn <xliff:g id="TIME">%1$s</xliff:g> nữa là sạc xong"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> nữa là sạc xong"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Không xác định"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Đang sạc"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"đang sạc"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Đang sạc nhanh"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Đang sạc chậm"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Hiện không sạc"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Đã cắm nhưng không thể sạc ngay"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Đầy"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 755cbee..fbb30ca 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"已通过<xliff:g id="NAME">%1$s</xliff:g>连接到网络"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"可通过%1$s连接"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"点按即可注册"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"无法访问互联网"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"无法访问私人 DNS 服务器"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"网络连接受限"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"无法访问互联网"</string>
@@ -207,6 +206,33 @@
     <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="enable_adb_wireless" msgid="6973226350963971018">"无线调试"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"连接到 WLAN 后启用调试模式"</string>
+    <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_summary" msgid="3729901496856458634">"使用二维码扫描器配对新设备"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"设备详细信息"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"取消保存"</string>
+    <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_pairing_code_label" msgid="3639239786669722731">"WLAN 配对码"</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">"扫描二维码即可通过 WLAN 配对设备"</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="8578868049289910131">"扫描二维码即可通过 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="keep_screen_on" msgid="1187161672348797558">"不锁定屏幕"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"允许开发设置?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"这些设置仅适用于开发工作。一旦启用,会导致您的设备以及设备上的应用崩溃或出现异常。"</string>
@@ -384,7 +412,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="9137381746633858694">"颜色校正功能有助于色盲用户看到更准确的颜色"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"颜色校正功能有助于色盲用户看到更准确的颜色"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"电量剩余使用时间不到 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"电量剩余使用时间超过 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"电量剩余使用时间超过 <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"手机可能即将关机"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"平板电脑可能即将关机"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"设备可能即将关机"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"手机可能即将关机 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"平板电脑可能即将关机 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"设备可能即将关机 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"手机可能即将关机"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"平板电脑可能即将关机"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"设备可能即将关机"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"手机可能即将关机 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"平板电脑可能即将关机 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"还剩 <xliff:g id="TIME">%1$s</xliff:g>充满电"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"正在充电"</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_discharging" msgid="6962689305413556485">"未在充电"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"已插入电源,但是现在无法充电"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"电量充足"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index e50acf5..0b4ee7a 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"已透過「<xliff:g id="NAME">%1$s</xliff:g>」連線"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"可透過 %1$s 連線"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"輕按即可登入"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"沒有互聯網連線"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"無法存取私人 DNS 伺服器"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"連線受限"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"沒有互聯網連線"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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_summary" msgid="3729901496856458634">"使用二維條碼掃瞄器配對新裝置"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"裝置詳情"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"移除裝置"</string>
+    <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_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_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="8578868049289910131">"掃瞄二維條碼即可透過 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="keep_screen_on" msgid="1187161672348797558">"保持啟用"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"允許開發設定?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"這些設定僅供開發用途,可能會導致您的裝置及應用程式損毀或運作不正常。"</string>
@@ -384,7 +412,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="9137381746633858694">"色彩校正有助色盲人士看到更準確的顏色"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"色彩校正可以協助色盲人士睇到更加準確嘅顏色"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"還有少於 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"還有超過 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"還有超過 <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"手機可能即將關機"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"平板電腦可能即將關機"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"裝置可能即將關機"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"手機可能即將關機 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"平板電腦可能即將關機 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"裝置可能即將關機 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"手機可能即將關閉"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"平板電腦可能即將關機"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"裝置可能即將關機"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"手機可能即將關機 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"平板電腦可能即將關機 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"還需 <xliff:g id="TIME">%1$s</xliff:g>才能充滿電"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - 還需 <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"正在充電"</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_discharging" msgid="6962689305413556485">"非充電中"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"已插入電源插座,但目前無法充電"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"電量已滿"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index 7df6fed..487c33d 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"透過「<xliff:g id="NAME">%1$s</xliff:g>」連線"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"可透過 %1$s 使用"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"輕觸即可註冊"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"沒有網際網路連線"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"無法存取私人 DNS 伺服器"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"連線能力受限"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"沒有網際網路連線"</string>
@@ -207,6 +206,33 @@
     <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="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>
+    <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">"使用 QR 圖碼配對裝置"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"使用 QR 圖碼掃描器配對新裝置"</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>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"裝置詳細資料"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"移除裝置"</string>
+    <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_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_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_description" msgid="8578868049289910131">"掃描 QR 圖碼即可透過 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="keep_screen_on" msgid="1187161672348797558">"螢幕不休眠"</string>
@@ -272,6 +298,8 @@
     <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="dev_settings_warning_title" msgid="8251234890169074553">"允許開發設定?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"這些設定僅供開發之用,可能導致你的裝置及裝置中的應用程式毀損或運作異常。"</string>
@@ -384,7 +412,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="9137381746633858694">"色彩校正可協助色盲使用者看見較準確的色彩"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"色彩校正可協助色盲使用者看見較準確的色彩"</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>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"電池可用時間不到 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"電池可用時間超過 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"電池可用時間超過 <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"手機可能即將關機"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"平板電腦可能即將關機"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"裝置可能即將關機"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"手機可能即將關機 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"平板電腦可能即將關機 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"裝置可能即將關機 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"手機可能即將關機"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"平板電腦可能即將關機"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"裝置可能即將關機"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"手機可能即將關機 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"平板電腦可能即將關機 (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g>後充飽電"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$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_lower" msgid="8696042568167401574">"充電中"</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_discharging" msgid="6962689305413556485">"非充電中"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"已接上電源,但現在無法充電"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"電力充足"</string>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 46dffbe..684c100 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -42,8 +42,7 @@
     <string name="connected_via_app" msgid="3532267661404276584">"Ixhumeke nge-<xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="available_via_passpoint" msgid="1716000261192603682">"Iyatholakala nge-%1$s"</string>
     <string name="tap_to_sign_up" msgid="5356397741063740395">"Thepha ukuze ubhalisele"</string>
-    <!-- no translation found for wifi_connected_no_internet (5087420713443350646) -->
-    <skip />
+    <string name="wifi_connected_no_internet" msgid="5087420713443350646">"Ayikho i-inthanethi"</string>
     <string name="private_dns_broken" msgid="1984159464346556931">"Iseva eyimfihlo ye-DNS ayikwazi ukufinyelelwa"</string>
     <string name="wifi_limited_connection" msgid="1184778285475204682">"Iqoqo elikhawulelwe"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"Ayikho i-inthanethi"</string>
@@ -207,6 +206,33 @@
     <string name="enable_adb" msgid="8072776357237289039">"Ukulungisa iphutha le-USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Lungisa iphutha lemodi lapho i-USB ixhunyiwe"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Buyisa ukugunyaza kokususa iphutha le-USB"</string>
+    <string name="enable_adb_wireless" msgid="6973226350963971018">"Ukulungisa amaphutha okungenantambo"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Imodi yokususa iphutha lapho i-Wi-Fi ixhunyiwe"</string>
+    <string name="adb_wireless_error" msgid="721958772149779856">"Iphutha"</string>
+    <string name="adb_wireless_settings" msgid="2295017847215680229">"Ukulungisa amaphutha okungenantambo"</string>
+    <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Ukubona futhi usebenzise amadivayisi atholakalayo, vula ukulungisa amaphutha okungenantambo"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Bhangqa idivayisi ngekhodi ye-QR"</string>
+    <string name="adb_pair_method_qrcode_summary" msgid="3729901496856458634">"Bhangqa amadivayisi amasha usebenzisa iskena sekhodi ye-QR"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Bhangqa idivayisi ngekhodi yokumatanisa"</string>
+    <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Bhangqa amadivayisi amasha usebenzisa ikhodi yamadijithi ayisithupha"</string>
+    <string name="adb_paired_devices_title" msgid="5268997341526217362">"Amadivaysi abhangqene"</string>
+    <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"Kuxhunyiwe manje"</string>
+    <string name="adb_wireless_device_details_title" msgid="7129369670526565786">"Imininingwane yedivayisi"</string>
+    <string name="adb_device_forget" msgid="193072400783068417">"Khohlwa"</string>
+    <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"Izigxivizo zeminwe zedivayisi: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
+    <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"Ukuxhuma akuphumelelanga"</string>
+    <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Qiniseka ukuthi i-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>ixhunywe kunethiwekhi efanele"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Bhangqa nedivayisi"</string>
+    <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Ikhodi yokubhangqa ye-Wi-Fi"</string>
+    <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Ukubhangqa akuphumelelanga"</string>
+    <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Qiniseka ukuthi idivayisi ixhunywe kunethiwekhi efanayo."</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Bhangqa idivayisi nge-Wi‑Fi ngokuskena ikhodi ye-QR"</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Ibhangqa idivayisi…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Yehlulekile ukubhangqa idivayisi. Kungenzeka ukuthi ikhodi ye-QR kade ingalungile, noma idivayisi ayixhunyiwe kunethiwekhi efanayo."</string>
+    <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Ikheli le-IP nembobo"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skena ikhodi ye-QR"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Bhangqa idivayisi nge-Wi‑Fi ngokuskena ikhodi ye-QR"</string>
+    <string name="keywords_adb_wireless" msgid="6507505581882171240">"i-adb, ukulungisa amaphutha, i-dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Isinqamuleli sombiko wesiphazamisi"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Bonisa inkinobho kwimenyu yamandla ngokuthatha umbiko wesiphazamiso"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Hlala uphapheme"</string>
@@ -272,6 +298,8 @@
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Sebenzisa i-tethering hardware acceleration uma itholakala"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Vumela ukulungisa iphutha le-USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Ukulungisa iphutha le-USB kuhloselwe izinjongo zokuthuthukisa kuphela. Ingasebenziselwa ukukopisha idatha phakathi kwekhompyutha yakho nedivaysi yakho, faka izinhlelo zokusebenza kwidivaysi yakho ngaphandle kwesaziso, bese ufunda idatha yefayela lokungena."</string>
+    <string name="adbwifi_warning_title" msgid="727104571653031865">"Vumela ukulungisa amaphutha okungenantambo?"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"Ukulungisa iphutha okungenantambo kuhloselwe izinjongo zokuthuthukisa kuphela. Kusebenzisele ukukopisha idatha phakathi kwekhompuyutha yakho nedivaysi yakho, faka izinhlelo zokusebenza kwidivaysi yakho ngaphandle kwesaziso, bese ufunda idatha yelogu."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Buyisa ukufinyelela ekususeni iphutha le-USB kusuka kuwo wonke amakhompyutha owagunyaze ngaphambilini?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Vumele izilungiselelo zokuthuthukisa?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Lezi zilungiselelo zenzelwe ukusetshenziswa ukuthuthukisa kuphela. Zingadala ukuthi idivayisi yakho kanye nensiza ekuyona ukuthi iphuke noma iziphathe kabi."</string>
@@ -384,7 +412,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"I-Protanomaly (bomvu-luhlaza)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"I-Tritanomaly (luhlaza okwesibhakabhaka-phuzi)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Ukulungiswa kombala"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="9137381746633858694">"Ukulungisa umbala kusiza abantu abangaboni imibala ukubona ngokuqondile"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"Ukulungisa umbala kusiza abantu abangaboni imibala bobone imibala enembe kakhulu"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Igitshezwe ngaphezulu yi-<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">"Cishe u-<xliff:g id="TIME_REMAINING">%1$s</xliff:g> osele"</string>
@@ -403,18 +431,19 @@
     <string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Ngaphansi kuka-<xliff:g id="THRESHOLD">%1$s</xliff:g> osele (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Ngaphezu kuka-<xliff:g id="TIME_REMAINING">%1$s</xliff:g> osele (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_remaining_only_more_than_subtext" msgid="3274496164769110480">"Ngaphezulu kokungu-<xliff:g id="TIME_REMAINING">%1$s</xliff:g> okusele"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="6583866940347159957">"Ifoni ingacisha maduze"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="8009177999719462724">"Ithebulethi ingacisha maduze"</string>
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="8320892540455268018">"Idivayisi ingacisha maduze"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="6186572170809116621">"Ifoni ingacisha maduze (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="1338758278145563121">"Ithebhulethi ingacisha maduze (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="3699579688084774362">"Idivayisi ingacisha maduze (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="137330009791560774">"Ifoni ingacisha maduze"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="145489081521468132">"Ithebulethi ingacisha maduze"</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="1070562682853942350">"Idivayisi ingacisha maduze"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="4429259621177089719">"Ifoni ingacisha maduze (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7703677921000858479">"Ithebulethi ingacisha maduze (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Idivayisi ingacisha maduze (<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="7415639699283965818">"<xliff:g id="TIME">%1$s</xliff:g> esele ize ishaje"</string>
     <string name="power_charging_duration" msgid="5005740040558984057">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> ize igcwale"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Akwaziwa"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Iyashaja"</string>
-    <string name="battery_info_status_charging_lower" msgid="8696042568167401574">"iyashaja"</string>
+    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ishaja ngokushesha"</string>
+    <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Ishaja kancane"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ayishaji"</string>
     <string name="battery_info_status_not_charging" msgid="8330015078868707899">"Kuxhunyiwe, ayikwazi ukushaja khona manje"</string>
     <string name="battery_info_status_full" msgid="4443168946046847468">"Kugcwele"</string>
diff --git a/packages/SettingsLib/res/values/config.xml b/packages/SettingsLib/res/values/config.xml
new file mode 100644
index 0000000..332d6c7
--- /dev/null
+++ b/packages/SettingsLib/res/values/config.xml
@@ -0,0 +1,24 @@
+<?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.
+  -->
+<!-- These resources are around just to allow their values to be customized -->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- Threshold in micro watts below which a charger is rated as "slow"; 1A @ 5V -->
+    <integer name="config_chargingSlowlyThreshold">5000000</integer>
+
+    <!-- Threshold in micro watts above which a charger is rated as "fast"; 1.5A @ 5V  -->
+    <integer name="config_chargingFastThreshold">7500000</integer>
+</resources>
\ No newline at end of file
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index dd21e5c..59881e7 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -553,6 +553,60 @@
     <string name="enable_adb_summary">Debug mode when USB is connected</string>
     <!-- Setting title to revoke secure USB debugging authorizations -->
     <string name="clear_adb_keys">Revoke USB debugging authorizations</string>
+    <!-- [CHAR LIMIT=32] Setting title for ADB wireless switch -->
+    <string name="enable_adb_wireless">Wireless debugging</string>
+    <!-- [CHAR LIMIT=NONE] Setting checkbox summary for whether to enable Wireless debugging support on the phone -->
+    <string name="enable_adb_wireless_summary">Debug mode when Wi\u2011Fi is connected</string>
+    <!-- [CHAR LIMIT=32] Summary text when ADB wireless has error -->
+    <string name="adb_wireless_error">Error</string>
+    <!-- [CHAR LIMIT=32] Setting title for ADB wireless fragment -->
+    <string name="adb_wireless_settings">Wireless debugging</string>
+    <!-- [CHAR LIMIT=NONE] Wireless debugging settings. text displayed when wireless debugging is off and network list is empty. -->
+    <string name="adb_wireless_list_empty_off">To see and use available devices, turn on wireless debugging</string>
+    <!-- [CHAR LIMIT=50] Title for adb wireless pair by QR code preference -->
+    <string name="adb_pair_method_qrcode_title">Pair device with QR code</string>
+    <!-- [CHAR LIMIT=NONE] Summary for adb wireless pair by QR code preference -->
+    <string name="adb_pair_method_qrcode_summary">Pair new devices using QR code Scanner</string>
+    <!-- [CHAR LIMIT=50] Title for adb wireless pair by pairing code preference -->
+    <string name="adb_pair_method_code_title">Pair device with pairing code</string>
+    <!-- [CHAR LIMIT=NONE] Summary for adb wireless pair by pairing code preference -->
+    <string name="adb_pair_method_code_summary">Pair new devices using six digit code</string>
+    <!-- [CHAR LIMIT=50] Title for adb wireless paired devices category -->
+    <string name="adb_paired_devices_title">Paired devices</string>
+    <!-- [CHAR LIMIT=50] Summary for adb wireless paired device preference -->
+    <string name="adb_wireless_device_connected_summary">Currently connected</string>
+    <!-- [CHAR LIMIT=50] Title for the adb device details fragment -->
+    <string name="adb_wireless_device_details_title">Device details</string>
+    <!-- [CHAR LIMIT=16] Button label to forget an adb device -->
+    <string name="adb_device_forget">Forget</string>
+    <!-- [CHAR LIMIT=50] Title format for mac address preference in adb device details fragment -->
+    <string name="adb_device_fingerprint_title_format">Device fingerprint: <xliff:g id="fingerprint_param" example="a1:b2:c3:d4:e5:f6">%1$s</xliff:g></string>
+    <!-- [CHAR LIMIT=50] Title for adb wireless connection failed dialog -->
+    <string name="adb_wireless_connection_failed_title">Connection unsuccessful</string>
+    <!-- [CHAR LIMIT=NONE] Message for adb wireless connection failed dialog -->
+    <string name="adb_wireless_connection_failed_message">Make sure <xliff:g id="device_name" example="Bob's Macbook">%1$s</xliff:g> is connected to the correct network</string>
+    <!-- [CHAR LIMIT=32] Adb wireless pairing device dialog title -->
+    <string name="adb_pairing_device_dialog_title">Pair with device</string>
+    <!-- [CHAR LIMIT=32] Adb wireless pairing device dialog pairing code label -->
+    <string name="adb_pairing_device_dialog_pairing_code_label">Wi\u2011Fi pairing code</string>
+    <!-- [CHAR LIMIT=50] Adb Wireless pairing device failed dialog title -->
+    <string name="adb_pairing_device_dialog_failed_title">Pairing unsuccessful</string>
+    <!-- [CHAR LIMIT=NONE] Adb wireless pairing device failed dialog message -->
+    <string name="adb_pairing_device_dialog_failed_msg">Make sure the device is connected to the same network.</string>
+    <!-- [CHAR LIMIT=NONE] Adb wireless qr code scanner description -->
+    <string name="adb_wireless_qrcode_summary">Pair device over Wi\u2011Fi by scanning a QR code</string>
+    <!-- [CHAR LIMIT=NONE] Adb wireless QR code pairing in progress text -->
+    <string name="adb_wireless_verifying_qrcode_text">Pairing device\u2026</string>
+    <!-- [CHAR LIMIT=NONE] Adb wireless QR code failed message -->
+    <string name="adb_qrcode_pairing_device_failed_msg">Failed to pair the device. Either the QR code was incorrect, or the device is not connected to the same network.</string>
+    <!-- [CHAR LIMIT=50] Adb Wireless ip address and port title -->
+    <string name="adb_wireless_ip_addr_preference_title">IP address \u0026 Port</string>
+    <!-- [CHAR LIMIT=NONE] Adb Wireless QR code pairing scanner title -->
+    <string name="adb_wireless_qrcode_pairing_title">Scan QR code</string>
+    <!-- [CHAR LIMIT=NONE] Adb Wireless QR code pairing description -->
+    <string name="adb_wireless_qrcode_pairing_description">Pair device over Wi\u2011Fi by scanning a QR Code</string>
+    <!--Adb wireless search Keywords [CHAR LIMIT=NONE]-->
+    <string name="keywords_adb_wireless">adb, debug, dev</string>
     <!-- [CHAR LIMIT=NONE] Setting checkbox title for Whether to include bug report item in power menu. -->
     <string name="bugreport_in_power">Bug report shortcut</string>
     <!-- [CHAR LIMIT=NONE] Setting checkbox summary for Whether to include bug report item in power -->
@@ -689,6 +743,10 @@
     <string name="adb_warning_title">Allow USB debugging?</string>
     <!-- Warning text to user about the implications of enabling USB debugging -->
     <string name="adb_warning_message">USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data.</string>
+    <!-- Title of warning dialog about the implications of enabling USB debugging [CHAR LIMIT=NONE] -->
+    <string name="adbwifi_warning_title">Allow wireless debugging?</string>
+    <!-- Warning text to user about the implications of enabling USB debugging [CHAR LIMIT=NONE] -->
+    <string name="adbwifi_warning_message">Wireless debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data.</string>
     <!-- Message of dialog confirming that user wants to revoke access to adb from all computers they have authorized -->
     <string name="adb_keys_warning_message">Revoke access to USB debugging from all computers you\u2019ve previously authorized?</string>
     <!-- Title of warning dialog about the implications of enabling developer settings -->
@@ -970,7 +1028,7 @@
     <!-- Title for the accessibility preference to configure display color space correction. [CHAR LIMIT=NONE] -->
     <string name="accessibility_display_daltonizer_preference_title">Color correction</string>
     <!-- Subtitle for the accessibility preference to configure display color space correction. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_display_daltonizer_preference_subtitle">Color correction helps people with color blindness to see more accurate colors</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle">Color correction helps people with colorblindness see more accurate colors</string>
     <!-- Summary shown for color space correction preference when its value is overridden by another preference [CHAR LIMIT=35] -->
     <string name="daltonizer_type_overridden">Overridden by <xliff:g id="title" example="Simulate color space">%1$s</xliff:g></string>
 
@@ -1011,17 +1069,17 @@
     <string name="power_remaining_only_more_than_subtext">More than <xliff:g id="time_remaining">%1$s</xliff:g> remaining</string>
 
     <!-- [CHAR_LIMIT=50] Short label for imminent shutdown warning of device -->
-    <string name="power_remaining_duration_only_shutdown_imminent" product="default">Phone may shutdown soon</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="default">Phone may shut down soon</string>
     <!-- [CHAR_LIMIT=50] Short label for imminent shutdown warning of device -->
-    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet">Tablet may shutdown soon</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="tablet">Tablet may shut down soon</string>
     <!-- [CHAR_LIMIT=50] Short label for imminent shutdown warning of device -->
-    <string name="power_remaining_duration_only_shutdown_imminent" product="device">Device may shutdown soon</string>
+    <string name="power_remaining_duration_only_shutdown_imminent" product="device">Device may shut down soon</string>
     <!-- [CHAR_LIMIT=60] Label for battery level chart when shutdown is imminent-->
-    <string name="power_remaining_duration_shutdown_imminent" product="default">Phone may shutdown soon (<xliff:g id="level">%1$s</xliff:g>)</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="default">Phone may shut down soon (<xliff:g id="level">%1$s</xliff:g>)</string>
     <!-- [CHAR_LIMIT=60] Label for battery level chart when shutdown is imminent-->
-    <string name="power_remaining_duration_shutdown_imminent" product="tablet">Tablet may shutdown soon (<xliff:g id="level">%1$s</xliff:g>)</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="tablet">Tablet may shut down soon (<xliff:g id="level">%1$s</xliff:g>)</string>
     <!-- [CHAR_LIMIT=60] Label for battery level chart when shutdown is imminent-->
-    <string name="power_remaining_duration_shutdown_imminent" product="device">Device may shutdown soon (<xliff:g id="level">%1$s</xliff:g>)</string>
+    <string name="power_remaining_duration_shutdown_imminent" product="device">Device may shut down soon (<xliff:g id="level">%1$s</xliff:g>)</string>
 
     <!-- [CHAR_LIMIT=40] Label for battery level chart when charging -->
     <string name="power_charging"><xliff:g id="level">%1$s</xliff:g> - <xliff:g id="state">%2$s</xliff:g></string>
@@ -1034,8 +1092,10 @@
     <string name="battery_info_status_unknown">Unknown</string>
     <!-- [CHAR_LIMIT=20] Battery use screen.  Battery status shown in chart label when charging from an unknown source.  -->
     <string name="battery_info_status_charging">Charging</string>
-    <!-- [CHAR_LIMIT=20] Battery use screen with lower case.  Battery status shown in chart label when charging from an unknown source.  -->
-    <string name="battery_info_status_charging_lower">charging</string>
+    <!-- [CHAR_LIMIT=20] Battery use screen.  Battery status shown in chart label when charging speed is fast.  -->
+    <string name="battery_info_status_charging_fast">Charging rapidly</string>
+    <!-- [CHAR_LIMIT=20] Battery use screen.  Battery status shown in chart label when charging speed is slow.  -->
+    <string name="battery_info_status_charging_slow">Charging slowly</string>
     <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="battery_info_status_discharging">Not charging</string>
     <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java
index 213e365..f485793 100644
--- a/packages/SettingsLib/src/com/android/settingslib/Utils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java
@@ -35,6 +35,7 @@
 import com.android.internal.util.UserIcons;
 import com.android.launcher3.icons.IconFactory;
 import com.android.settingslib.drawable.UserIconDrawable;
+import com.android.settingslib.fuelgauge.BatteryStatus;
 
 import java.text.NumberFormat;
 
@@ -122,7 +123,7 @@
     public static Drawable getUserIcon(Context context, UserManager um, UserInfo user) {
         final int iconSize = UserIconDrawable.getSizeForList(context);
         if (user.isManagedProfile()) {
-            Drawable drawable =  UserIconDrawable.getManagedUserDrawable(context);
+            Drawable drawable = UserIconDrawable.getManagedUserDrawable(context);
             drawable.setBounds(0, 0, iconSize, iconSize);
             return drawable;
         }
@@ -164,20 +165,43 @@
         return (level * 100) / scale;
     }
 
-    public static String getBatteryStatus(Resources res, Intent batteryChangedIntent) {
-        int status = batteryChangedIntent.getIntExtra(BatteryManager.EXTRA_STATUS,
+    /**
+     * Get battery status string
+     *
+     * @param context the context
+     * @param batteryChangedIntent battery broadcast intent received from {@link
+     *                             Intent.ACTION_BATTERY_CHANGED}.
+     * @return battery status string
+     */
+    public static String getBatteryStatus(Context context, Intent batteryChangedIntent) {
+        final int status = batteryChangedIntent.getIntExtra(BatteryManager.EXTRA_STATUS,
                 BatteryManager.BATTERY_STATUS_UNKNOWN);
-        String statusString;
-        if (status == BatteryManager.BATTERY_STATUS_CHARGING) {
-            statusString = res.getString(R.string.battery_info_status_charging);
-        } else if (status == BatteryManager.BATTERY_STATUS_DISCHARGING) {
-            statusString = res.getString(R.string.battery_info_status_discharging);
-        } else if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
-            statusString = res.getString(R.string.battery_info_status_not_charging);
-        } else if (status == BatteryManager.BATTERY_STATUS_FULL) {
+        final Resources res = context.getResources();
+
+        String statusString = res.getString(R.string.battery_info_status_unknown);
+        final BatteryStatus batteryStatus = new BatteryStatus(batteryChangedIntent);
+
+        if (batteryStatus.isCharged()) {
             statusString = res.getString(R.string.battery_info_status_full);
         } else {
-            statusString = res.getString(R.string.battery_info_status_unknown);
+            if (status == BatteryManager.BATTERY_STATUS_CHARGING) {
+                switch (batteryStatus.getChargingSpeed(context)) {
+                    case BatteryStatus.CHARGING_FAST:
+                        statusString = res.getString(R.string.battery_info_status_charging_fast);
+                        break;
+                    case BatteryStatus.CHARGING_SLOWLY:
+                        statusString = res.getString(R.string.battery_info_status_charging_slow);
+                        break;
+                    default:
+                        statusString = res.getString(R.string.battery_info_status_charging);
+                        break;
+                }
+
+            } else if (status == BatteryManager.BATTERY_STATUS_DISCHARGING) {
+                statusString = res.getString(R.string.battery_info_status_discharging);
+            } else if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
+                statusString = res.getString(R.string.battery_info_status_not_charging);
+            }
         }
 
         return statusString;
@@ -211,7 +235,7 @@
     /**
      * This method computes disabled color from normal color
      *
-     * @param context
+     * @param context the context
      * @param inputColor normal color.
      * @return disabled color.
      */
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
index 3aa35cb..5d1e4cb 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
@@ -41,7 +41,6 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -71,10 +70,10 @@
     short mRssi;
     // mProfiles and mRemovedProfiles does not do swap() between main and sub device. It is
     // because current sub device is only for HearingAid and its profile is the same.
-    private final List<LocalBluetoothProfile> mProfiles = new ArrayList<>();
+    private final Collection<LocalBluetoothProfile> mProfiles = new CopyOnWriteArrayList<>();
 
     // List of profiles that were previously in mProfiles, but have been removed
-    private final List<LocalBluetoothProfile> mRemovedProfiles = new ArrayList<>();
+    private final Collection<LocalBluetoothProfile> mRemovedProfiles = new CopyOnWriteArrayList<>();
 
     // Device supports PANU but not NAP: remove PanProfile after device disconnects from NAP
     private boolean mLocalNapRoleConnected;
@@ -717,7 +716,7 @@
     }
 
     public List<LocalBluetoothProfile> getProfiles() {
-        return Collections.unmodifiableList(mProfiles);
+        return new ArrayList<>(mProfiles);
     }
 
     public List<LocalBluetoothProfile> getConnectableProfiles() {
@@ -734,7 +733,7 @@
     }
 
     public List<LocalBluetoothProfile> getRemovedProfiles() {
-        return mRemovedProfiles;
+        return new ArrayList<>(mRemovedProfiles);
     }
 
     public void registerCallback(Callback callback) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java
index c72efb7..35bbbc0 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java
@@ -48,6 +48,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 
 /**
@@ -232,7 +233,7 @@
     }
 
     private final Collection<ServiceListener> mServiceListeners =
-            new ArrayList<ServiceListener>();
+            new CopyOnWriteArrayList<ServiceListener>();
 
     private void addProfile(LocalBluetoothProfile profile,
             String profileName, String stateChangedAction) {
@@ -361,14 +362,18 @@
 
     // not synchronized: use only from UI thread! (TODO: verify)
     void callServiceConnectedListeners() {
-        for (ServiceListener l : mServiceListeners) {
+        final Collection<ServiceListener> listeners = new ArrayList<>(mServiceListeners);
+
+        for (ServiceListener l : listeners) {
             l.onServiceConnected();
         }
     }
 
     // not synchronized: use only from UI thread! (TODO: verify)
     void callServiceDisconnectedListeners() {
-        for (ServiceListener listener : mServiceListeners) {
+        final Collection<ServiceListener> listeners = new ArrayList<>(mServiceListeners);
+
+        for (ServiceListener listener : listeners) {
             listener.onServiceDisconnected();
         }
     }
diff --git a/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java b/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java
index 55723f9..57d9594 100644
--- a/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java
@@ -20,7 +20,8 @@
 
 public class BrightnessUtils {
 
-    public static final int GAMMA_SPACE_MAX = 1023;
+    public static final int GAMMA_SPACE_MIN = 0;
+    public static final int GAMMA_SPACE_MAX = 65535;
 
     // Hybrid Log Gamma constant values
     private static final float R = 0.5f;
@@ -51,7 +52,7 @@
      * @return The corresponding setting value.
      */
     public static final int convertGammaToLinear(int val, int min, int max) {
-        final float normalizedVal = MathUtils.norm(0, GAMMA_SPACE_MAX, val);
+        final float normalizedVal = MathUtils.norm(GAMMA_SPACE_MIN, GAMMA_SPACE_MAX, val);
         final float ret;
         if (normalizedVal <= R) {
             ret = MathUtils.sq(normalizedVal / R);
@@ -65,6 +66,29 @@
     }
 
     /**
+     * Version of {@link #convertGammaToLinear} that takes and returns float values.
+     * TODO: brightnessfloat Merge with above method later.
+     *
+     * @param val The slider value.
+     * @param min The minimum acceptable value for the setting.
+     * @param max The maximum acceptable value for the setting.
+     * @return The corresponding setting value.
+     */
+    public static final float convertGammaToLinearFloat(int val, float min, float max) {
+        final float normalizedVal = MathUtils.norm(GAMMA_SPACE_MIN, GAMMA_SPACE_MAX, val);
+        final float ret;
+        if (normalizedVal <= R) {
+            ret = MathUtils.sq(normalizedVal / R);
+        } else {
+            ret = MathUtils.exp((normalizedVal - C) / A) + B;
+        }
+
+        // HLG is normalized to the range [0, 12], so we need to re-normalize to the range [0, 1]
+        // in order to derive the correct setting value.
+        return MathUtils.lerp(min, max, ret / 12);
+    }
+
+    /**
      * A function for converting from the linear space that the setting works in to the
      * gamma space that the slider works in.
      *
@@ -96,6 +120,27 @@
             ret = A * MathUtils.log(normalizedVal - B) + C;
         }
 
-        return Math.round(MathUtils.lerp(0, GAMMA_SPACE_MAX, ret));
+        return Math.round(MathUtils.lerp(GAMMA_SPACE_MIN, GAMMA_SPACE_MAX, ret));
+    }
+
+    /**
+     * Version of {@link #convertLinearToGamma} that takes float values.
+     * TODO: brightnessfloat merge with above method(?)
+     * @param val The brightness setting value.
+     * @param min The minimum acceptable value for the setting.
+     * @param max The maximum acceptable value for the setting.
+     * @return The corresponding slider value
+     */
+    public static final int convertLinearToGammaFloat(float val, float min, float max) {
+        // For some reason, HLG normalizes to the range [0, 12] rather than [0, 1]
+        final float normalizedVal = MathUtils.norm(min, max, val) * 12;
+        final float ret;
+        if (normalizedVal <= 1f) {
+            ret = MathUtils.sqrt(normalizedVal) * R;
+        } else {
+            ret = A * MathUtils.log(normalizedVal - B) + C;
+        }
+
+        return Math.round(MathUtils.lerp(GAMMA_SPACE_MIN, GAMMA_SPACE_MAX, ret));
     }
 }
diff --git a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java
new file mode 100644
index 0000000..bc40903
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java
@@ -0,0 +1,147 @@
+/*
+ * 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.fuelgauge;
+
+import static android.os.BatteryManager.BATTERY_HEALTH_UNKNOWN;
+import static android.os.BatteryManager.BATTERY_STATUS_FULL;
+import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN;
+import static android.os.BatteryManager.EXTRA_HEALTH;
+import static android.os.BatteryManager.EXTRA_LEVEL;
+import static android.os.BatteryManager.EXTRA_MAX_CHARGING_CURRENT;
+import static android.os.BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE;
+import static android.os.BatteryManager.EXTRA_PLUGGED;
+import static android.os.BatteryManager.EXTRA_STATUS;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.BatteryManager;
+
+import com.android.settingslib.R;
+
+/**
+ * Stores and computes some battery information.
+ */
+public class BatteryStatus {
+    private static final int LOW_BATTERY_THRESHOLD = 20;
+    private static final int DEFAULT_CHARGING_VOLTAGE_MICRO_VOLT = 5000000;
+
+    public static final int CHARGING_UNKNOWN = -1;
+    public static final int CHARGING_SLOWLY = 0;
+    public static final int CHARGING_REGULAR = 1;
+    public static final int CHARGING_FAST = 2;
+
+    public final int status;
+    public final int level;
+    public final int plugged;
+    public final int health;
+    public final int maxChargingWattage;
+
+    public BatteryStatus(int status, int level, int plugged, int health,
+            int maxChargingWattage) {
+        this.status = status;
+        this.level = level;
+        this.plugged = plugged;
+        this.health = health;
+        this.maxChargingWattage = maxChargingWattage;
+    }
+
+    public BatteryStatus(Intent batteryChangedIntent) {
+        status = batteryChangedIntent.getIntExtra(EXTRA_STATUS, BATTERY_STATUS_UNKNOWN);
+        plugged = batteryChangedIntent.getIntExtra(EXTRA_PLUGGED, 0);
+        level = batteryChangedIntent.getIntExtra(EXTRA_LEVEL, 0);
+        health = batteryChangedIntent.getIntExtra(EXTRA_HEALTH, BATTERY_HEALTH_UNKNOWN);
+
+        final int maxChargingMicroAmp = batteryChangedIntent.getIntExtra(EXTRA_MAX_CHARGING_CURRENT,
+                -1);
+        int maxChargingMicroVolt = batteryChangedIntent.getIntExtra(EXTRA_MAX_CHARGING_VOLTAGE, -1);
+
+        if (maxChargingMicroVolt <= 0) {
+            maxChargingMicroVolt = DEFAULT_CHARGING_VOLTAGE_MICRO_VOLT;
+        }
+        if (maxChargingMicroAmp > 0) {
+            // Calculating muW = muA * muV / (10^6 mu^2 / mu); splitting up the divisor
+            // to maintain precision equally on both factors.
+            maxChargingWattage = (maxChargingMicroAmp / 1000)
+                    * (maxChargingMicroVolt / 1000);
+        } else {
+            maxChargingWattage = -1;
+        }
+    }
+
+    /**
+     * Determine whether the device is plugged in (USB, power, or wireless).
+     *
+     * @return true if the device is plugged in.
+     */
+    public boolean isPluggedIn() {
+        return plugged == BatteryManager.BATTERY_PLUGGED_AC
+                || plugged == BatteryManager.BATTERY_PLUGGED_USB
+                || plugged == BatteryManager.BATTERY_PLUGGED_WIRELESS;
+    }
+
+    /**
+     * Determine whether the device is plugged in (USB, power).
+     *
+     * @return true if the device is plugged in wired (as opposed to wireless)
+     */
+    public boolean isPluggedInWired() {
+        return plugged == BatteryManager.BATTERY_PLUGGED_AC
+                || plugged == BatteryManager.BATTERY_PLUGGED_USB;
+    }
+
+    /**
+     * Whether or not the device is charged. Note that some devices never return 100% for
+     * battery level, so this allows either battery level or status to determine if the
+     * battery is charged.
+     *
+     * @return true if the device is charged
+     */
+    public boolean isCharged() {
+        return status == BATTERY_STATUS_FULL || level >= 100;
+    }
+
+    /**
+     * Whether battery is low and needs to be charged.
+     *
+     * @return true if battery is low
+     */
+    public boolean isBatteryLow() {
+        return level < LOW_BATTERY_THRESHOLD;
+    }
+
+    /**
+     * Return current chargin speed is fast, slow or normal.
+     *
+     * @return the charing speed
+     */
+    public final int getChargingSpeed(Context context) {
+        final int slowThreshold = context.getResources().getInteger(
+                R.integer.config_chargingSlowlyThreshold);
+        final int fastThreshold = context.getResources().getInteger(
+                R.integer.config_chargingFastThreshold);
+        return maxChargingWattage <= 0 ? CHARGING_UNKNOWN :
+                maxChargingWattage < slowThreshold ? CHARGING_SLOWLY :
+                        maxChargingWattage > fastThreshold ? CHARGING_FAST :
+                                CHARGING_REGULAR;
+    }
+
+    @Override
+    public String toString() {
+        return "BatteryStatus{status=" + status + ",level=" + level + ",plugged=" + plugged
+                + ",health=" + health + ",maxChargingWattage=" + maxChargingWattage + "}";
+    }
+}
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
index 3a53d29..e551b69 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
@@ -19,7 +19,8 @@
 import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
-import android.util.Log;
+import android.media.MediaRoute2Info;
+import android.media.MediaRouter2Manager;
 import android.util.Pair;
 
 import com.android.settingslib.R;
@@ -35,8 +36,9 @@
 
     private CachedBluetoothDevice mCachedDevice;
 
-    BluetoothMediaDevice(Context context, CachedBluetoothDevice device) {
-        super(context, MediaDeviceType.TYPE_BLUETOOTH_DEVICE);
+    BluetoothMediaDevice(Context context, CachedBluetoothDevice device,
+            MediaRouter2Manager routerManager, MediaRoute2Info info, String packageName) {
+        super(context, MediaDeviceType.TYPE_BLUETOOTH_DEVICE, routerManager, info, packageName);
         mCachedDevice = device;
         initDeviceRecord();
     }
@@ -65,20 +67,6 @@
         return MediaDeviceUtils.getId(mCachedDevice);
     }
 
-    @Override
-    public boolean connect() {
-        //TODO(b/117129183): add callback to notify LocalMediaManager connection state.
-        final boolean isConnected = mCachedDevice.setActive();
-        setConnectedRecord();
-        Log.d(TAG, "connect() device : " + getName() + ", is selected : " + isConnected);
-        return isConnected;
-    }
-
-    @Override
-    public void disconnect() {
-        //TODO(b/117129183): disconnected last select device
-    }
-
     /**
      * Get current CachedBluetoothDevice
      */
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaManager.java
index 3a807c9..d84788b 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaManager.java
@@ -157,7 +157,7 @@
     private void addMediaDevice(CachedBluetoothDevice cachedDevice) {
         MediaDevice mediaDevice = findMediaDevice(MediaDeviceUtils.getId(cachedDevice));
         if (mediaDevice == null) {
-            mediaDevice = new BluetoothMediaDevice(mContext, cachedDevice);
+            mediaDevice = new BluetoothMediaDevice(mContext, cachedDevice, null, null, null);
             cachedDevice.registerCallback(mDeviceAttributeChangeCallback);
             mLastAddedDevice = mediaDevice;
             mMediaDevices.add(mediaDevice);
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
index d287f95..b725ba5 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
@@ -30,16 +30,9 @@
 
     private static final String TAG = "InfoMediaDevice";
 
-    private final MediaRoute2Info mRouteInfo;
-    private final MediaRouter2Manager mRouterManager;
-    private final String mPackageName;
-
     InfoMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
             String packageName) {
-        super(context, MediaDeviceType.TYPE_CAST_DEVICE);
-        mRouterManager = routerManager;
-        mRouteInfo = info;
-        mPackageName = packageName;
+        super(context, MediaDeviceType.TYPE_CAST_DEVICE, routerManager, info, packageName);
         initDeviceRecord();
     }
 
@@ -66,34 +59,6 @@
         return MediaDeviceUtils.getId(mRouteInfo);
     }
 
-    @Override
-    public boolean connect() {
-        setConnectedRecord();
-        mRouterManager.selectRoute(mPackageName, mRouteInfo);
-        return true;
-    }
-
-    @Override
-    public void requestSetVolume(int volume) {
-        mRouterManager.requestSetVolume(mRouteInfo, volume);
-    }
-
-    @Override
-    public int getMaxVolume() {
-        return mRouteInfo.getVolumeMax();
-    }
-
-    @Override
-    public int getCurrentVolume() {
-        return mRouteInfo.getVolume();
-    }
-
-    @Override
-    public void disconnect() {
-        //TODO(b/144535188): disconnected last select device
-    }
-
-    @Override
     public boolean isConnected() {
         return true;
     }
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
index a4be46c..f69e4f5 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
@@ -15,14 +15,25 @@
  */
 package com.android.settingslib.media;
 
+import static android.media.MediaRoute2Info.DEVICE_TYPE_BLUETOOTH;
+import static android.media.MediaRoute2Info.DEVICE_TYPE_REMOTE_TV;
+import static android.media.MediaRoute2Info.DEVICE_TYPE_UNKNOWN;
+
 import android.app.Notification;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 import android.media.MediaRoute2Info;
 import android.media.MediaRouter2Manager;
+import android.media.RoutingSessionInfo;
 import android.text.TextUtils;
+import android.util.Log;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
@@ -44,11 +55,14 @@
     String mPackageName;
 
     private MediaDevice mCurrentConnectedDevice;
+    private LocalBluetoothManager mBluetoothManager;
 
-    public InfoMediaManager(Context context, String packageName, Notification notification) {
+    public InfoMediaManager(Context context, String packageName, Notification notification,
+            LocalBluetoothManager localBluetoothManager) {
         super(context, notification);
 
         mRouterManager = MediaRouter2Manager.getInstance(context);
+        mBluetoothManager = localBluetoothManager;
         if (!TextUtils.isEmpty(packageName)) {
             mPackageName = packageName;
         }
@@ -61,13 +75,6 @@
         refreshDevices();
     }
 
-    @VisibleForTesting
-    String getControlCategoryByPackageName(String packageName) {
-        //TODO(b/117129183): Use package name to get ControlCategory.
-        //Since api not ready, return fixed ControlCategory for prototype.
-        return "com.google.android.gms.cast.CATEGORY_CAST";
-    }
-
     @Override
     public void stopScan() {
         mRouterManager.unregisterCallback(mMediaRouterCallback);
@@ -77,10 +84,207 @@
      * Get current device that played media.
      * @return MediaDevice
      */
-    public MediaDevice getCurrentConnectedDevice() {
+    MediaDevice getCurrentConnectedDevice() {
         return mCurrentConnectedDevice;
     }
 
+    /**
+     * Transfer MediaDevice for media without package name.
+     */
+    boolean connectDeviceWithoutPackageName(MediaDevice device) {
+        boolean isConnected = false;
+        final List<RoutingSessionInfo> infos = mRouterManager.getActiveSessions();
+        if (infos.size() > 0) {
+            final RoutingSessionInfo info = infos.get(0);
+            final MediaRouter2Manager.RoutingController controller =
+                    mRouterManager.getControllerForSession(info);
+
+            controller.transferToRoute(device.mRouteInfo);
+            isConnected = true;
+        }
+        return isConnected;
+    }
+
+    /**
+     * Add a MediaDevice to let it play current media.
+     *
+     * @param device MediaDevice
+     * @return If add device successful return {@code true}, otherwise return {@code false}
+     */
+    boolean addDeviceToPlayMedia(MediaDevice device) {
+        if (TextUtils.isEmpty(mPackageName)) {
+            Log.w(TAG, "addDeviceToPlayMedia() package name is null or empty!");
+            return false;
+        }
+
+        final RoutingSessionInfo info = getRoutingSessionInfo();
+        if (info != null && info.getSelectableRoutes().contains(device.mRouteInfo.getId())) {
+            mRouterManager.getControllerForSession(info).selectRoute(device.mRouteInfo);
+            return true;
+        }
+
+        Log.w(TAG, "addDeviceToPlayMedia() Ignoring selecting a non-selectable device : "
+                + device.getName());
+
+        return false;
+    }
+
+    private RoutingSessionInfo getRoutingSessionInfo() {
+        for (RoutingSessionInfo info : mRouterManager.getRoutingSessions(mPackageName)) {
+            if (TextUtils.equals(info.getClientPackageName(), mPackageName)) {
+                return info;
+            }
+        }
+
+        Log.w(TAG, "RoutingSessionInfo() cannot found match packagename : " + mPackageName);
+        return null;
+    }
+
+    /**
+     * Remove a {@code device} from current media.
+     *
+     * @param device MediaDevice
+     * @return If device stop successful return {@code true}, otherwise return {@code false}
+     */
+    boolean removeDeviceFromPlayMedia(MediaDevice device) {
+        if (TextUtils.isEmpty(mPackageName)) {
+            Log.w(TAG, "removeDeviceFromMedia() package name is null or empty!");
+            return false;
+        }
+
+        final RoutingSessionInfo info = getRoutingSessionInfo();
+        if (info != null && info.getSelectedRoutes().contains(device.mRouteInfo.getId())) {
+            mRouterManager.getControllerForSession(info).deselectRoute(device.mRouteInfo);
+            return true;
+        }
+
+        Log.w(TAG, "removeDeviceFromMedia() Ignoring deselecting a non-deselectable device : "
+                + device.getName());
+
+        return false;
+    }
+
+    /**
+     * Get the MediaDevice list that can be added to current media.
+     *
+     * @return list of MediaDevice
+     */
+    List<MediaDevice> getSelectableMediaDevice() {
+        final List<MediaDevice> deviceList = new ArrayList<>();
+        if (TextUtils.isEmpty(mPackageName)) {
+            Log.w(TAG, "getSelectableMediaDevice() package name is null or empty!");
+            return deviceList;
+        }
+
+        final RoutingSessionInfo info = getRoutingSessionInfo();
+        if (info != null) {
+            for (MediaRoute2Info route : mRouterManager.getControllerForSession(info)
+                    .getSelectableRoutes()) {
+                deviceList.add(new InfoMediaDevice(mContext, mRouterManager,
+                        route, mPackageName));
+            }
+            return deviceList;
+        }
+
+        Log.w(TAG, "getSelectableMediaDevice() cannot found selectable MediaDevice from : "
+                + mPackageName);
+
+        return deviceList;
+    }
+
+    /**
+     * Get the MediaDevice list that has been selected to current media.
+     *
+     * @return list of MediaDevice
+     */
+    List<MediaDevice> getSelectedMediaDevice() {
+        final List<MediaDevice> deviceList = new ArrayList<>();
+        if (TextUtils.isEmpty(mPackageName)) {
+            Log.w(TAG, "getSelectedMediaDevice() package name is null or empty!");
+            return deviceList;
+        }
+
+        final RoutingSessionInfo info = getRoutingSessionInfo();
+        if (info != null) {
+            for (MediaRoute2Info route : mRouterManager.getControllerForSession(info)
+                    .getSelectedRoutes()) {
+                deviceList.add(new InfoMediaDevice(mContext, mRouterManager,
+                        route, mPackageName));
+            }
+            return deviceList;
+        }
+
+        Log.w(TAG, "getSelectedMediaDevice() cannot found selectable MediaDevice from : "
+                + mPackageName);
+
+        return deviceList;
+    }
+
+    /**
+     * Adjust the volume of {@link android.media.RoutingSessionInfo}.
+     *
+     * @param volume the value of volume
+     */
+    void adjustSessionVolume(int volume) {
+        if (TextUtils.isEmpty(mPackageName)) {
+            Log.w(TAG, "adjustSessionVolume() package name is null or empty!");
+            return;
+        }
+
+        final RoutingSessionInfo info = getRoutingSessionInfo();
+        if (info != null) {
+            Log.d(TAG, "adjustSessionVolume() adjust volume : " + volume + ", with : "
+                    + mPackageName);
+            mRouterManager.setSessionVolume(info, volume);
+            return;
+        }
+
+        Log.w(TAG, "adjustSessionVolume() can't found corresponding RoutingSession with : "
+                + mPackageName);
+    }
+
+    /**
+     * Gets the maximum volume of the {@link android.media.RoutingSessionInfo}.
+     *
+     * @return  maximum volume of the session, and return -1 if not found.
+     */
+    public int getSessionVolumeMax() {
+        if (TextUtils.isEmpty(mPackageName)) {
+            Log.w(TAG, "getSessionVolumeMax() package name is null or empty!");
+            return -1;
+        }
+
+        final RoutingSessionInfo info = getRoutingSessionInfo();
+        if (info != null) {
+            return info.getVolumeMax();
+        }
+
+        Log.w(TAG, "getSessionVolumeMax() can't found corresponding RoutingSession with : "
+                + mPackageName);
+        return -1;
+    }
+
+    /**
+     * Gets the current volume of the {@link android.media.RoutingSessionInfo}.
+     *
+     * @return current volume of the session, and return -1 if not found.
+     */
+    public int getSessionVolume() {
+        if (TextUtils.isEmpty(mPackageName)) {
+            Log.w(TAG, "getSessionVolume() package name is null or empty!");
+            return -1;
+        }
+
+        final RoutingSessionInfo info = getRoutingSessionInfo();
+        if (info != null) {
+            return info.getVolume();
+        }
+
+        Log.w(TAG, "getSessionVolume() can't found corresponding RoutingSession with : "
+                + mPackageName);
+        return -1;
+    }
+
     private void refreshDevices() {
         mMediaDevices.clear();
         mCurrentConnectedDevice = null;
@@ -94,20 +298,53 @@
 
     private void buildAllRoutes() {
         for (MediaRoute2Info route : mRouterManager.getAllRoutes()) {
-            final MediaDevice device = new InfoMediaDevice(mContext, mRouterManager, route,
-                    mPackageName);
-            mMediaDevices.add(device);
+            addMediaDevice(route);
         }
     }
 
     private void buildAvailableRoutes() {
         for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) {
-            final MediaDevice device = new InfoMediaDevice(mContext, mRouterManager, route,
-                    mPackageName);
-            if (TextUtils.equals(route.getClientPackageName(), mPackageName)) {
-                mCurrentConnectedDevice = device;
-            }
-            mMediaDevices.add(device);
+            addMediaDevice(route);
+        }
+    }
+
+    private void addMediaDevice(MediaRoute2Info route) {
+        final int deviceType = route.getDeviceType();
+        MediaDevice mediaDevice = null;
+        switch (deviceType) {
+            case DEVICE_TYPE_UNKNOWN:
+                //TODO(b/148765806): use correct device type once api is ready.
+                final String defaultRoute = "DEFAULT_ROUTE";
+                if (TextUtils.equals(defaultRoute, route.getOriginalId())) {
+                    mediaDevice =
+                            new PhoneMediaDevice(mContext, mRouterManager, route, mPackageName);
+                } else {
+                    mediaDevice = new InfoMediaDevice(mContext, mRouterManager, route,
+                            mPackageName);
+                    if (!TextUtils.isEmpty(mPackageName)
+                            && TextUtils.equals(route.getClientPackageName(), mPackageName)) {
+                        mCurrentConnectedDevice = mediaDevice;
+                    }
+                }
+                break;
+            case DEVICE_TYPE_REMOTE_TV:
+                break;
+            case DEVICE_TYPE_BLUETOOTH:
+                final BluetoothDevice device =
+                        BluetoothAdapter.getDefaultAdapter().getRemoteDevice(route.getOriginalId());
+                final CachedBluetoothDevice cachedDevice =
+                        mBluetoothManager.getCachedDeviceManager().findDevice(device);
+                mediaDevice = new BluetoothMediaDevice(mContext, cachedDevice, mRouterManager,
+                        route, mPackageName);
+                break;
+            default:
+                Log.w(TAG, "addMediaDevice() unknown device type : " + deviceType);
+                break;
+
+        }
+
+        if (mediaDevice != null) {
+            mMediaDevices.add(mediaDevice);
         }
     }
 
@@ -124,5 +361,15 @@
                 refreshDevices();
             }
         }
+
+        @Override
+        public void onRoutesChanged(List<MediaRoute2Info> routes) {
+            refreshDevices();
+        }
+
+        @Override
+        public void onRoutesRemoved(List<MediaRoute2Info> routes) {
+            refreshDevices();
+        }
     }
 }
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
index 50196d2..617da6e 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
@@ -16,8 +16,11 @@
 package com.android.settingslib.media;
 
 import android.app.Notification;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothProfile;
 import android.content.Context;
+import android.text.TextUtils;
 import android.util.Log;
 
 import androidx.annotation.IntDef;
@@ -25,15 +28,16 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.settingslib.bluetooth.BluetoothCallback;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  * LocalMediaManager provide interface to get MediaDevice list and transfer media to MediaDevice.
@@ -52,12 +56,11 @@
         int STATE_DISCONNECTED = 3;
     }
 
-    private final Collection<DeviceCallback> mCallbacks = new ArrayList<>();
+    private final Collection<DeviceCallback> mCallbacks = new CopyOnWriteArrayList<>();
     @VisibleForTesting
     final MediaDeviceCallback mMediaDeviceCallback = new MediaDeviceCallback();
 
     private Context mContext;
-    private BluetoothMediaManager mBluetoothMediaManager;
     private LocalBluetoothManager mLocalBluetoothManager;
     private InfoMediaManager mInfoMediaManager;
     private String mPackageName;
@@ -65,26 +68,29 @@
     @VisibleForTesting
     List<MediaDevice> mMediaDevices = new ArrayList<>();
     @VisibleForTesting
+    List<MediaDevice> mDisconnectedMediaDevices = new ArrayList<>();
+    @VisibleForTesting
     MediaDevice mPhoneDevice;
     @VisibleForTesting
     MediaDevice mCurrentConnectedDevice;
+    @VisibleForTesting
+    DeviceAttributeChangeCallback mDeviceAttributeChangeCallback =
+            new DeviceAttributeChangeCallback();
+    @VisibleForTesting
+    BluetoothAdapter mBluetoothAdapter;
 
     /**
      * Register to start receiving callbacks for MediaDevice events.
      */
     public void registerCallback(DeviceCallback callback) {
-        synchronized (mCallbacks) {
-            mCallbacks.add(callback);
-        }
+        mCallbacks.add(callback);
     }
 
     /**
      * Unregister to stop receiving callbacks for MediaDevice events
      */
     public void unregisterCallback(DeviceCallback callback) {
-        synchronized (mCallbacks) {
-            mCallbacks.remove(callback);
-        }
+        mCallbacks.remove(callback);
     }
 
     public LocalMediaManager(Context context, String packageName, Notification notification) {
@@ -92,23 +98,24 @@
         mPackageName = packageName;
         mLocalBluetoothManager =
                 LocalBluetoothManager.getInstance(context, /* onInitCallback= */ null);
+        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
         if (mLocalBluetoothManager == null) {
             Log.e(TAG, "Bluetooth is not supported on this device");
             return;
         }
 
-        mBluetoothMediaManager =
-                new BluetoothMediaManager(context, mLocalBluetoothManager, notification);
-        mInfoMediaManager = new InfoMediaManager(context, packageName, notification);
+        mInfoMediaManager =
+                new InfoMediaManager(context, packageName, notification, mLocalBluetoothManager);
     }
 
     @VisibleForTesting
     LocalMediaManager(Context context, LocalBluetoothManager localBluetoothManager,
-            BluetoothMediaManager bluetoothMediaManager, InfoMediaManager infoMediaManager) {
+            InfoMediaManager infoMediaManager, String packageName) {
         mContext = context;
         mLocalBluetoothManager = localBluetoothManager;
-        mBluetoothMediaManager = bluetoothMediaManager;
         mInfoMediaManager = infoMediaManager;
+        mPackageName = packageName;
+
     }
 
     /**
@@ -135,7 +142,12 @@
             mCurrentConnectedDevice.disconnect();
         }
 
-        final boolean isConnected = device.connect();
+        boolean isConnected = false;
+        if (TextUtils.isEmpty(mPackageName)) {
+            isConnected = mInfoMediaManager.connectDeviceWithoutPackageName(device);
+        } else {
+            isConnected = device.connect();
+        }
         if (isConnected) {
             mCurrentConnectedDevice = device;
         }
@@ -147,10 +159,8 @@
     }
 
     void dispatchSelectedDeviceStateChanged(MediaDevice device, @MediaDeviceState int state) {
-        synchronized (mCallbacks) {
-            for (DeviceCallback callback : mCallbacks) {
-                callback.onSelectedDeviceStateChanged(device, state);
-            }
+        for (DeviceCallback callback : getCallbacks()) {
+            callback.onSelectedDeviceStateChanged(device, state);
         }
     }
 
@@ -159,43 +169,20 @@
      */
     public void startScan() {
         mMediaDevices.clear();
-        mBluetoothMediaManager.registerCallback(mMediaDeviceCallback);
-        mBluetoothMediaManager.startScan();
         mInfoMediaManager.registerCallback(mMediaDeviceCallback);
         mInfoMediaManager.startScan();
     }
 
-    private void addPhoneDeviceIfNecessary() {
-        // add phone device to list if there have any Bluetooth device and cast device.
-        if (mMediaDevices.size() > 0 && !mMediaDevices.contains(mPhoneDevice)) {
-            if (mPhoneDevice == null) {
-                mPhoneDevice = new PhoneMediaDevice(mContext, mLocalBluetoothManager);
-            }
-            mMediaDevices.add(mPhoneDevice);
-        }
-    }
-
-    private void removePhoneMediaDeviceIfNecessary() {
-        // if PhoneMediaDevice is the last item in the list, remove it.
-        if (mMediaDevices.size() == 1 && mMediaDevices.contains(mPhoneDevice)) {
-            mMediaDevices.clear();
-        }
-    }
-
     void dispatchDeviceListUpdate() {
-        synchronized (mCallbacks) {
-            Collections.sort(mMediaDevices, COMPARATOR);
-            for (DeviceCallback callback : mCallbacks) {
-                callback.onDeviceListUpdate(new ArrayList<>(mMediaDevices));
-            }
+        //TODO(b/149260820): Use new rule to rank device once device type api is ready.
+        for (DeviceCallback callback : getCallbacks()) {
+            callback.onDeviceListUpdate(new ArrayList<>(mMediaDevices));
         }
     }
 
     void dispatchDeviceAttributesChanged() {
-        synchronized (mCallbacks) {
-            for (DeviceCallback callback : mCallbacks) {
-                callback.onDeviceAttributesChanged();
-            }
+        for (DeviceCallback callback : getCallbacks()) {
+            callback.onDeviceAttributesChanged();
         }
     }
 
@@ -203,8 +190,6 @@
      * Stop scan MediaDevice
      */
     public void stopScan() {
-        mBluetoothMediaManager.unregisterCallback(mMediaDeviceCallback);
-        mBluetoothMediaManager.stopScan();
         mInfoMediaManager.unregisterCallback(mMediaDeviceCallback);
         mInfoMediaManager.stopScan();
     }
@@ -227,6 +212,22 @@
     }
 
     /**
+     * Find the MediaDevice from all media devices by id.
+     *
+     * @param id the unique id of MediaDevice
+     * @return MediaDevice
+     */
+    public MediaDevice getMediaDeviceById(String id) {
+        for (MediaDevice mediaDevice : mMediaDevices) {
+            if (mediaDevice.getId().equals(id)) {
+                return mediaDevice;
+            }
+        }
+        Log.i(TAG, "Unable to find device " + id);
+        return null;
+    }
+
+    /**
      * Find the current connected MediaDevice.
      *
      * @return MediaDevice
@@ -235,15 +236,99 @@
         return mCurrentConnectedDevice;
     }
 
+    /**
+     * Find the active MediaDevice.
+     *
+     * @param type the media device type.
+     * @return MediaDevice list
+     */
+    public List<MediaDevice> getActiveMediaDevice(@MediaDevice.MediaDeviceType int type) {
+        final List<MediaDevice> devices = new ArrayList<>();
+        for (MediaDevice device : mMediaDevices) {
+            if (type == device.mType && device.getClientPackageName() != null) {
+                devices.add(device);
+            }
+        }
+        return devices;
+    }
+
+    /**
+     * Add a MediaDevice to let it play current media.
+     *
+     * @param device MediaDevice
+     * @return If add device successful return {@code true}, otherwise return {@code false}
+     */
+    public boolean addDeviceToPlayMedia(MediaDevice device) {
+        return mInfoMediaManager.addDeviceToPlayMedia(device);
+    }
+
+    /**
+     * Remove a {@code device} from current media.
+     *
+     * @param device MediaDevice
+     * @return If device stop successful return {@code true}, otherwise return {@code false}
+     */
+    public boolean removeDeviceFromPlayMedia(MediaDevice device) {
+        return mInfoMediaManager.removeDeviceFromPlayMedia(device);
+    }
+
+    /**
+     * Get the MediaDevice list that can be added to current media.
+     *
+     * @return list of MediaDevice
+     */
+    public List<MediaDevice> getSelectableMediaDevice() {
+        return mInfoMediaManager.getSelectableMediaDevice();
+    }
+
+    /**
+     * Get the MediaDevice list that has been selected to current media.
+     *
+     * @return list of MediaDevice
+     */
+    public List<MediaDevice> getSelectedMediaDevice() {
+        return mInfoMediaManager.getSelectedMediaDevice();
+    }
+
+    /**
+     * Adjust the volume of session.
+     *
+     * @param volume the value of volume
+     */
+    public void adjustSessionVolume(int volume) {
+        mInfoMediaManager.adjustSessionVolume(volume);
+    }
+
+    /**
+     * Gets the maximum volume of the {@link android.media.RoutingSessionInfo}.
+     *
+     * @return  maximum volume of the session, and return -1 if not found.
+     */
+    public int getSessionVolumeMax() {
+        return mInfoMediaManager.getSessionVolumeMax();
+    }
+
+    /**
+     * Gets the current volume of the {@link android.media.RoutingSessionInfo}.
+     *
+     * @return current volume of the session, and return -1 if not found.
+     */
+    public int getSessionVolume() {
+        return mInfoMediaManager.getSessionVolume();
+    }
+
     private MediaDevice updateCurrentConnectedDevice() {
+        MediaDevice phoneMediaDevice = null;
         for (MediaDevice device : mMediaDevices) {
             if (device instanceof  BluetoothMediaDevice) {
                 if (isConnected(((BluetoothMediaDevice) device).getCachedDevice())) {
                     return device;
                 }
+            } else if (device instanceof PhoneMediaDevice) {
+                phoneMediaDevice = device;
             }
         }
-        return mMediaDevices.contains(mPhoneDevice) ? mPhoneDevice : null;
+        return mMediaDevices.contains(phoneMediaDevice) ? phoneMediaDevice : null;
     }
 
     private boolean isConnected(CachedBluetoothDevice device) {
@@ -251,43 +336,65 @@
                 || device.isActiveDevice(BluetoothProfile.HEARING_AID);
     }
 
+    private Collection<DeviceCallback> getCallbacks() {
+        return new CopyOnWriteArrayList<>(mCallbacks);
+    }
+
     class MediaDeviceCallback implements MediaManager.MediaDeviceCallback {
         @Override
         public void onDeviceAdded(MediaDevice device) {
             if (!mMediaDevices.contains(device)) {
                 mMediaDevices.add(device);
-                addPhoneDeviceIfNecessary();
                 dispatchDeviceListUpdate();
             }
         }
 
         @Override
         public void onDeviceListAdded(List<MediaDevice> devices) {
-            for (MediaDevice device : devices) {
-                if (getMediaDeviceById(mMediaDevices, device.getId()) == null) {
-                    mMediaDevices.add(device);
-                }
-            }
-            addPhoneDeviceIfNecessary();
+            mMediaDevices.clear();
+            mMediaDevices.addAll(devices);
+            mMediaDevices.addAll(buildDisconnectedBluetoothDevice());
+
             final MediaDevice infoMediaDevice = mInfoMediaManager.getCurrentConnectedDevice();
             mCurrentConnectedDevice = infoMediaDevice != null
                     ? infoMediaDevice : updateCurrentConnectedDevice();
-            updatePhoneMediaDeviceSummary();
             dispatchDeviceListUpdate();
         }
 
-        private void updatePhoneMediaDeviceSummary() {
-            if (mPhoneDevice != null) {
-                ((PhoneMediaDevice) mPhoneDevice)
-                        .updateSummary(mCurrentConnectedDevice == mPhoneDevice);
+        private List<MediaDevice> buildDisconnectedBluetoothDevice() {
+            for (MediaDevice device : mDisconnectedMediaDevices) {
+                ((BluetoothMediaDevice) device).getCachedDevice()
+                        .unregisterCallback(mDeviceAttributeChangeCallback);
             }
+            mDisconnectedMediaDevices.clear();
+            final List<BluetoothDevice> bluetoothDevices =
+                    mBluetoothAdapter.getMostRecentlyConnectedDevices();
+            final CachedBluetoothDeviceManager cachedDeviceManager =
+                    mLocalBluetoothManager.getCachedDeviceManager();
+
+            for (BluetoothDevice device : bluetoothDevices) {
+                final CachedBluetoothDevice cachedDevice =
+                        cachedDeviceManager.findDevice(device);
+                if (cachedDevice != null) {
+                    if (cachedDevice.getBondState() == BluetoothDevice.BOND_BONDED
+                            && !cachedDevice.isConnected()) {
+                        final MediaDevice mediaDevice = new BluetoothMediaDevice(mContext,
+                                cachedDevice,
+                                null, null, mPackageName);
+                        if (!mMediaDevices.contains(mediaDevice)) {
+                            cachedDevice.registerCallback(mDeviceAttributeChangeCallback);
+                            mDisconnectedMediaDevices.add(mediaDevice);
+                        }
+                    }
+                }
+            }
+            return new ArrayList<>(mDisconnectedMediaDevices);
         }
 
         @Override
         public void onDeviceRemoved(MediaDevice device) {
             if (mMediaDevices.contains(device)) {
                 mMediaDevices.remove(device);
-                removePhoneMediaDeviceIfNecessary();
                 dispatchDeviceListUpdate();
             }
         }
@@ -295,7 +402,6 @@
         @Override
         public void onDeviceListRemoved(List<MediaDevice> devices) {
             mMediaDevices.removeAll(devices);
-            removePhoneMediaDeviceIfNecessary();
             dispatchDeviceListUpdate();
         }
 
@@ -308,7 +414,6 @@
                 return;
             }
             mCurrentConnectedDevice = connectDevice;
-            updatePhoneMediaDeviceSummary();
             dispatchDeviceAttributesChanged();
         }
 
@@ -347,4 +452,17 @@
          */
         default void onDeviceAttributesChanged() {};
     }
+
+    /**
+     * This callback is for update {@link BluetoothMediaDevice} summary when
+     * {@link CachedBluetoothDevice} connection state is changed.
+     */
+    @VisibleForTesting
+    class DeviceAttributeChangeCallback implements CachedBluetoothDevice.Callback {
+
+        @Override
+        public void onDeviceAttributesChanged() {
+            dispatchDeviceAttributesChanged();
+        }
+    }
 }
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
index 839d528..33c3d7e 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
@@ -16,10 +16,17 @@
 package com.android.settingslib.media;
 
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
+import android.media.MediaRoute2Info;
+import android.media.MediaRouter2Manager;
 import android.text.TextUtils;
+import android.util.Log;
 
 import androidx.annotation.IntDef;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.settingslib.R;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -40,14 +47,23 @@
         int TYPE_BLUETOOTH_DEVICE = 3;
     }
 
+    @VisibleForTesting
+    int mType;
+
     private int mConnectedRecord;
 
-    protected Context mContext;
-    protected int mType;
+    protected final Context mContext;
+    protected final MediaRoute2Info mRouteInfo;
+    protected final MediaRouter2Manager mRouterManager;
+    protected final String mPackageName;
 
-    MediaDevice(Context context, @MediaDeviceType int type) {
+    MediaDevice(Context context, @MediaDeviceType int type, MediaRouter2Manager routerManager,
+            MediaRoute2Info info, String packageName) {
         mType = type;
         mContext = context;
+        mRouteInfo = info;
+        mRouterManager = routerManager;
+        mPackageName = packageName;
     }
 
     void initDeviceRecord() {
@@ -83,13 +99,6 @@
      */
     public abstract String getId();
 
-    /**
-     * Transfer MediaDevice for media
-     *
-     * @return result of transfer media
-     */
-    public abstract boolean connect();
-
     void setConnectedRecord() {
         mConnectedRecord++;
         ConnectionRecordManager.getInstance().setConnectionRecord(mContext, getId(),
@@ -97,11 +106,6 @@
     }
 
     /**
-     * Stop transfer MediaDevice
-     */
-    public abstract void disconnect();
-
-    /**
      * According the MediaDevice type to check whether we are connected to this MediaDevice.
      *
      * @return Whether it is connected.
@@ -113,7 +117,9 @@
      *
      * @param volume is the new value.
      */
+
     public void requestSetVolume(int volume) {
+        mRouterManager.requestSetVolume(mRouteInfo, volume);
     }
 
     /**
@@ -122,7 +128,7 @@
      * @return max volume.
      */
     public int getMaxVolume() {
-        return 100;
+        return mRouteInfo.getVolumeMax();
     }
 
     /**
@@ -131,7 +137,7 @@
      * @return current volume.
      */
     public int getCurrentVolume() {
-        return 0;
+        return mRouteInfo.getVolume();
     }
 
     /**
@@ -140,7 +146,7 @@
      * @return package name.
      */
     public String getClientPackageName() {
-        return null;
+        return mRouteInfo.getClientPackageName();
     }
 
     /**
@@ -149,7 +155,22 @@
      * @return application label.
      */
     public String getClientAppLabel() {
-        return null;
+        final String packageName = mRouteInfo.getClientPackageName();
+        if (TextUtils.isEmpty(packageName)) {
+            Log.d(TAG, "Client package name is empty");
+            return mContext.getResources().getString(R.string.unknown);
+        }
+        try {
+            final PackageManager packageManager = mContext.getPackageManager();
+            final String appLabel = packageManager.getApplicationLabel(
+                    packageManager.getApplicationInfo(packageName, 0)).toString();
+            if (!TextUtils.isEmpty(appLabel)) {
+                return appLabel;
+            }
+        } catch (PackageManager.NameNotFoundException e) {
+            Log.e(TAG, "unable to find " + packageName);
+        }
+        return mContext.getResources().getString(R.string.unknown);
     }
 
     /**
@@ -162,6 +183,23 @@
     }
 
     /**
+     * Transfer MediaDevice for media
+     *
+     * @return result of transfer media
+     */
+    public boolean connect() {
+        setConnectedRecord();
+        mRouterManager.selectRoute(mPackageName, mRouteInfo);
+        return true;
+    }
+
+    /**
+     * Stop transfer MediaDevice
+     */
+    public void disconnect() {
+    }
+
+    /**
      * Rules:
      * 1. If there is one of the connected devices identified as a carkit, this carkit will
      * be always on the top of the device list. Rule 2 and Rule 3 can’t overrule this rule.
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaManager.java
index 7898982..73551f6 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/MediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaManager.java
@@ -22,6 +22,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  * MediaManager provide interface to get MediaDevice list.
@@ -30,7 +31,7 @@
 
     private static final String TAG = "MediaManager";
 
-    protected final Collection<MediaDeviceCallback> mCallbacks = new ArrayList<>();
+    protected final Collection<MediaDeviceCallback> mCallbacks = new CopyOnWriteArrayList<>();
     protected final List<MediaDevice> mMediaDevices = new ArrayList<>();
 
     protected Context mContext;
@@ -42,18 +43,14 @@
     }
 
     protected void registerCallback(MediaDeviceCallback callback) {
-        synchronized (mCallbacks) {
-            if (!mCallbacks.contains(callback)) {
-                mCallbacks.add(callback);
-            }
+        if (!mCallbacks.contains(callback)) {
+            mCallbacks.add(callback);
         }
     }
 
     protected void unregisterCallback(MediaDeviceCallback callback) {
-        synchronized (mCallbacks) {
-            if (mCallbacks.contains(callback)) {
-                mCallbacks.remove(callback);
-            }
+        if (mCallbacks.contains(callback)) {
+            mCallbacks.remove(callback);
         }
     }
 
@@ -78,53 +75,45 @@
     }
 
     protected void dispatchDeviceAdded(MediaDevice mediaDevice) {
-        synchronized (mCallbacks) {
-            for (MediaDeviceCallback callback : mCallbacks) {
-                callback.onDeviceAdded(mediaDevice);
-            }
+        for (MediaDeviceCallback callback : getCallbacks()) {
+            callback.onDeviceAdded(mediaDevice);
         }
     }
 
     protected void dispatchDeviceRemoved(MediaDevice mediaDevice) {
-        synchronized (mCallbacks) {
-            for (MediaDeviceCallback callback : mCallbacks) {
-                callback.onDeviceRemoved(mediaDevice);
-            }
+        for (MediaDeviceCallback callback : getCallbacks()) {
+            callback.onDeviceRemoved(mediaDevice);
         }
     }
 
     protected void dispatchDeviceListAdded() {
-        synchronized (mCallbacks) {
-            for (MediaDeviceCallback callback : mCallbacks) {
-                callback.onDeviceListAdded(new ArrayList<>(mMediaDevices));
-            }
+        for (MediaDeviceCallback callback : getCallbacks()) {
+            callback.onDeviceListAdded(new ArrayList<>(mMediaDevices));
         }
     }
 
     protected void dispatchDeviceListRemoved(List<MediaDevice> devices) {
-        synchronized (mCallbacks) {
-            for (MediaDeviceCallback callback : mCallbacks) {
-                callback.onDeviceListRemoved(devices);
-            }
+        for (MediaDeviceCallback callback : getCallbacks()) {
+            callback.onDeviceListRemoved(devices);
         }
     }
 
     protected void dispatchConnectedDeviceChanged(String id) {
-        synchronized (mCallbacks) {
-            for (MediaDeviceCallback callback : mCallbacks) {
-                callback.onConnectedDeviceChanged(id);
-            }
+        for (MediaDeviceCallback callback : getCallbacks()) {
+            callback.onConnectedDeviceChanged(id);
         }
     }
 
     protected void dispatchDataChanged() {
-        synchronized (mCallbacks) {
-            for (MediaDeviceCallback callback : mCallbacks) {
-                callback.onDeviceAttributesChanged();
-            }
+        for (MediaDeviceCallback callback : getCallbacks()) {
+            callback.onDeviceAttributesChanged();
         }
     }
 
+    private Collection<MediaDeviceCallback> getCallbacks() {
+        return new CopyOnWriteArrayList<>(mCallbacks);
+    }
+
     /**
      * Callback for notifying device is added, removed and attributes changed.
      */
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaOutputSliceConstants.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaOutputSliceConstants.java
index 248b118..2821af9 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/MediaOutputSliceConstants.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaOutputSliceConstants.java
@@ -27,17 +27,39 @@
     public static final String KEY_MEDIA_OUTPUT = "media_output";
 
     /**
+     * Key for the Media output group setting.
+     */
+    public static final String KEY_MEDIA_OUTPUT_GROUP = "media_output_group";
+
+    /**
      * Key for the Remote Media slice.
      */
     public static final String KEY_REMOTE_MEDIA = "remote_media";
 
     /**
+     * Key for the {@link android.media.session.MediaSession.Token}.
+     */
+    public static final String KEY_MEDIA_SESSION_TOKEN = "key_media_session_token";
+
+    /**
+     * Key for the {@link android.media.RoutingSessionInfo#getId()}
+     */
+    public static final String KEY_SESSION_INFO_ID = "key_session_info_id";
+
+    /**
      * Activity Action: Show a settings dialog containing {@link MediaDevice} to transfer media.
      */
     public static final String ACTION_MEDIA_OUTPUT =
             "com.android.settings.panel.action.MEDIA_OUTPUT";
 
     /**
+     * Activity Action: Show a settings dialog containing {@link MediaDevice} to handle media group
+     * operation.
+     */
+    public static final String ACTION_MEDIA_OUTPUT_GROUP =
+            "com.android.settings.panel.action.MEDIA_OUTPUT_GROUP";
+
+    /**
      * An string extra specifying a media package name.
      */
     public static final String EXTRA_PACKAGE_NAME =
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java
index af91c34..166fbaa 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java
@@ -17,14 +17,11 @@
 
 import android.content.Context;
 import android.graphics.drawable.Drawable;
-import android.util.Log;
+import android.media.MediaRoute2Info;
+import android.media.MediaRouter2Manager;
 
 import com.android.settingslib.R;
-import com.android.settingslib.bluetooth.A2dpProfile;
 import com.android.settingslib.bluetooth.BluetoothUtils;
-import com.android.settingslib.bluetooth.HearingAidProfile;
-import com.android.settingslib.bluetooth.LocalBluetoothManager;
-import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
 
 /**
  * PhoneMediaDevice extends MediaDevice to represents Phone device.
@@ -35,15 +32,12 @@
 
     public static final String ID = "phone_media_device_id_1";
 
-    private LocalBluetoothProfileManager mProfileManager;
-    private LocalBluetoothManager mLocalBluetoothManager;
     private String mSummary = "";
 
-    PhoneMediaDevice(Context context, LocalBluetoothManager localBluetoothManager) {
-        super(context, MediaDeviceType.TYPE_PHONE_DEVICE);
+    PhoneMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
+            String packageName) {
+        super(context, MediaDeviceType.TYPE_PHONE_DEVICE, routerManager, info, packageName);
 
-        mLocalBluetoothManager = localBluetoothManager;
-        mProfileManager = mLocalBluetoothManager.getProfileManager();
         initDeviceRecord();
     }
 
@@ -69,32 +63,6 @@
     }
 
     @Override
-    public boolean connect() {
-        final HearingAidProfile hapProfile = mProfileManager.getHearingAidProfile();
-        final A2dpProfile a2dpProfile = mProfileManager.getA2dpProfile();
-
-        // Some device may not have HearingAidProfile, consider all situation to set active device.
-        boolean isConnected = false;
-        if (hapProfile != null && a2dpProfile != null) {
-            isConnected = hapProfile.setActiveDevice(null) && a2dpProfile.setActiveDevice(null);
-        } else if (a2dpProfile != null) {
-            isConnected = a2dpProfile.setActiveDevice(null);
-        } else if (hapProfile != null) {
-            isConnected = hapProfile.setActiveDevice(null);
-        }
-        updateSummary(isConnected);
-        setConnectedRecord();
-
-        Log.d(TAG, "connect() device : " + getName() + ", is selected : " + isConnected);
-        return isConnected;
-    }
-
-    @Override
-    public void disconnect() {
-        updateSummary(false);
-    }
-
-    @Override
     public boolean isConnected() {
         return true;
     }
diff --git a/packages/SettingsLib/src/com/android/settingslib/notification/ConversationIconFactory.java b/packages/SettingsLib/src/com/android/settingslib/notification/ConversationIconFactory.java
new file mode 100644
index 0000000..885b7d3
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/notification/ConversationIconFactory.java
@@ -0,0 +1,113 @@
+/*
+ * 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.settingslib.notification;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.LauncherApps;
+import android.content.pm.PackageManager;
+import android.content.pm.ShortcutInfo;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.UserHandle;
+import android.util.IconDrawableFactory;
+
+import com.android.launcher3.icons.BaseIconFactory;
+import com.android.launcher3.icons.BitmapInfo;
+import com.android.launcher3.icons.ShadowGenerator;
+
+/**
+ * Factory for creating normalized conversation icons.
+ * We are not using Launcher's IconFactory because conversation rendering only runs on the UI
+ * thread, so there is no need to manage a pool across multiple threads.
+ */
+public class ConversationIconFactory extends BaseIconFactory {
+
+    final LauncherApps mLauncherApps;
+    final PackageManager mPackageManager;
+    final IconDrawableFactory mIconDrawableFactory;
+
+    public ConversationIconFactory(Context context, LauncherApps la, PackageManager pm,
+            IconDrawableFactory iconDrawableFactory, int iconSizePx) {
+        super(context, context.getResources().getConfiguration().densityDpi,
+                iconSizePx);
+        mLauncherApps = la;
+        mPackageManager = pm;
+        mIconDrawableFactory = iconDrawableFactory;
+    }
+
+    private int getBadgeSize() {
+        return mContext.getResources().getDimensionPixelSize(
+                com.android.launcher3.icons.R.dimen.profile_badge_size);
+    }
+    /**
+     * Returns the conversation info drawable
+     */
+    private Drawable getConversationDrawable(ShortcutInfo shortcutInfo) {
+        return mLauncherApps.getShortcutIconDrawable(shortcutInfo, mFillResIconDpi);
+    }
+
+    /**
+     * Get the {@link Drawable} that represents the app icon
+     */
+    private Drawable getBadgedIcon(String packageName, int userId) {
+        try {
+            final ApplicationInfo appInfo = mPackageManager.getApplicationInfoAsUser(
+                    packageName, PackageManager.GET_META_DATA, userId);
+            return mIconDrawableFactory.getBadgedIcon(appInfo, userId);
+        } catch (PackageManager.NameNotFoundException e) {
+            return mPackageManager.getDefaultActivityIcon();
+        }
+    }
+
+    /**
+     * Turns a Drawable into a Bitmap
+     */
+    BitmapInfo toBitmap(Drawable userBadgedAppIcon) {
+        Bitmap bitmap = createIconBitmap(
+                userBadgedAppIcon, 1f, getBadgeSize());
+
+        Canvas c = new Canvas();
+        ShadowGenerator shadowGenerator = new ShadowGenerator(getBadgeSize());
+        c.setBitmap(bitmap);
+        shadowGenerator.recreateIcon(Bitmap.createBitmap(bitmap), c);
+        return createIconBitmap(bitmap);
+    }
+
+    /**
+     * Returns a {@link BitmapInfo} for the entire conversation icon including the badge.
+     */
+    public Bitmap getConversationBitmap(ShortcutInfo info, String packageName, int uid) {
+        return getConversationBitmap(getConversationDrawable(info), packageName, uid);
+    }
+
+    /**
+     * Returns a {@link BitmapInfo} for the entire conversation icon including the badge.
+     */
+    public Bitmap getConversationBitmap(Drawable baseIcon, String packageName, int uid) {
+        int userId = UserHandle.getUserId(uid);
+        Drawable badge = getBadgedIcon(packageName, userId);
+        BitmapInfo iconInfo = createBadgedIconBitmap(baseIcon,
+                UserHandle.of(userId),
+                true /* shrinkNonAdaptiveIcons */);
+
+        badgeWithDrawable(iconInfo.icon,
+                new BitmapDrawable(mContext.getResources(), toBitmap(badge).icon));
+        return iconInfo.icon;
+    }
+}
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index bfb79c0..cefe690 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -181,6 +181,7 @@
     static final String KEY_SCANRESULTS = "key_scanresults";
     static final String KEY_SCOREDNETWORKCACHE = "key_scorednetworkcache";
     static final String KEY_CONFIG = "key_config";
+    static final String KEY_PASSPOINT_UNIQUE_ID = "key_passpoint_unique_id";
     static final String KEY_FQDN = "key_fqdn";
     static final String KEY_PROVIDER_FRIENDLY_NAME = "key_provider_friendly_name";
     static final String KEY_EAPTYPE = "eap_psktype";
@@ -217,7 +218,7 @@
     public static final int UNREACHABLE_RSSI = Integer.MIN_VALUE;
 
     public static final String KEY_PREFIX_AP = "AP:";
-    public static final String KEY_PREFIX_FQDN = "FQDN:";
+    public static final String KEY_PREFIX_PASSPOINT_UNIQUE_ID = "PASSPOINT:";
     public static final String KEY_PREFIX_OSU = "OSU:";
 
     private final Context mContext;
@@ -250,6 +251,7 @@
      * Information associated with the {@link PasspointConfiguration}.  Only maintaining
      * the relevant info to preserve spaces.
      */
+    private String mPasspointUniqueId;
     private String mFqdn;
     private String mProviderFriendlyName;
     private boolean mIsRoaming = false;
@@ -308,6 +310,9 @@
                 mScoredNetworkCache.put(timedScore.getScore().networkKey.wifiKey.bssid, timedScore);
             }
         }
+        if (savedState.containsKey(KEY_PASSPOINT_UNIQUE_ID)) {
+            mPasspointUniqueId = savedState.getString(KEY_PASSPOINT_UNIQUE_ID);
+        }
         if (savedState.containsKey(KEY_FQDN)) {
             mFqdn = savedState.getString(KEY_FQDN);
         }
@@ -351,9 +356,10 @@
      */
     public AccessPoint(Context context, PasspointConfiguration config) {
         mContext = context;
+        mPasspointUniqueId = config.getUniqueId();
         mFqdn = config.getHomeSp().getFqdn();
         mProviderFriendlyName = config.getHomeSp().getFriendlyName();
-        mSubscriptionExpirationTimeInMillis = config.getSubscriptionExpirationTimeInMillis();
+        mSubscriptionExpirationTimeInMillis = config.getSubscriptionExpirationTimeMillis();
         if (config.isOsuProvisioned()) {
             mPasspointConfigurationVersion = PasspointConfigurationVersion.OSU_PROVISIONED;
         } else {
@@ -371,6 +377,7 @@
         mContext = context;
         networkId = config.networkId;
         mConfig = config;
+        mPasspointUniqueId = config.getKey();
         mFqdn = config.FQDN;
         setScanResultsPasspoint(homeScans, roamingScans);
         updateKey();
@@ -407,7 +414,7 @@
         if (isPasspoint()) {
             mKey = getKey(mConfig);
         } else if (isPasspointConfig()) {
-            mKey = getKey(mFqdn);
+            mKey = getKey(mPasspointUniqueId);
         } else if (isOsuProvider()) {
             mKey = getKey(mOsuProvider);
         } else { // Non-Passpoint AP
@@ -677,19 +684,19 @@
      */
     public static String getKey(WifiConfiguration config) {
         if (config.isPasspoint()) {
-            return getKey(config.FQDN);
+            return getKey(config.getKey());
         } else {
             return getKey(removeDoubleQuotes(config.SSID), config.BSSID, getSecurity(config));
         }
     }
 
     /**
-     * Returns the AccessPoint key corresponding to a Passpoint network by its FQDN.
+     * Returns the AccessPoint key corresponding to a Passpoint network by its unique identifier.
      */
-    public static String getKey(String fqdn) {
+    public static String getKey(String passpointUniqueId) {
         return new StringBuilder()
-                .append(KEY_PREFIX_FQDN)
-                .append(fqdn).toString();
+                .append(KEY_PREFIX_PASSPOINT_UNIQUE_ID)
+                .append(passpointUniqueId).toString();
     }
 
     /**
@@ -766,7 +773,7 @@
 
     public boolean matches(WifiConfiguration config) {
         if (config.isPasspoint()) {
-            return (isPasspoint() && config.FQDN.equals(mConfig.FQDN));
+            return (isPasspoint() && config.getKey().equals(mConfig.getKey()));
         }
 
         if (!ssid.equals(removeDoubleQuotes(config.SSID))
@@ -1052,7 +1059,7 @@
     public String getConfigName() {
         if (mConfig != null && mConfig.isPasspoint()) {
             return mConfig.providerFriendlyName;
-        } else if (mFqdn != null) {
+        } else if (mPasspointUniqueId != null) {
             return mProviderFriendlyName;
         } else {
             return ssid;
@@ -1254,7 +1261,7 @@
      * Return true if this AccessPoint represents a Passpoint provider configuration.
      */
     public boolean isPasspointConfig() {
-        return mFqdn != null && mConfig == null;
+        return mPasspointUniqueId != null && mConfig == null;
     }
 
     /**
@@ -1310,8 +1317,12 @@
         if (info.isOsuAp() || mOsuStatus != null) {
             return (info.isOsuAp() && mOsuStatus != null);
         } else if (info.isPasspointAp() || isPasspoint()) {
+            // TODO: Use TextUtils.equals(info.getPasspointUniqueId(), mConfig.getKey()) when API
+            //  is available
             return (info.isPasspointAp() && isPasspoint()
-                    && TextUtils.equals(info.getPasspointFqdn(), mConfig.FQDN));
+                    && TextUtils.equals(info.getPasspointFqdn(), mConfig.FQDN)
+                    && TextUtils.equals(info.getPasspointProviderFriendlyName(),
+                    mConfig.providerFriendlyName));
         }
 
         if (networkId != WifiConfiguration.INVALID_NETWORK_ID) {
@@ -1355,7 +1366,7 @@
             mConfig.allowedKeyManagement.set(KeyMgmt.NONE);
         } else {
             mConfig.allowedKeyManagement.set(KeyMgmt.OWE);
-            mConfig.requirePMF = true;
+            mConfig.requirePmf = true;
         }
     }
 
@@ -1377,6 +1388,9 @@
         if (mNetworkInfo != null) {
             savedState.putParcelable(KEY_NETWORKINFO, mNetworkInfo);
         }
+        if (mPasspointUniqueId != null) {
+            savedState.putString(KEY_PASSPOINT_UNIQUE_ID, mPasspointUniqueId);
+        }
         if (mFqdn != null) {
             savedState.putString(KEY_FQDN, mFqdn);
         }
@@ -1949,11 +1963,11 @@
                 return;
             }
 
-            String fqdn = passpointConfig.getHomeSp().getFqdn();
+            String uniqueId = passpointConfig.getUniqueId();
             for (Pair<WifiConfiguration, Map<Integer, List<ScanResult>>> pairing :
                     wifiManager.getAllMatchingWifiConfigs(wifiManager.getScanResults())) {
                 WifiConfiguration config = pairing.first;
-                if (TextUtils.equals(config.FQDN, fqdn)) {
+                if (TextUtils.equals(config.getKey(), uniqueId)) {
                     List<ScanResult> homeScans =
                             pairing.second.get(WifiManager.PASSPOINT_HOME_NETWORK);
                     List<ScanResult> roamingScans =
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java b/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java
index f21e466..2fb2481 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java
@@ -84,7 +84,7 @@
         bundle.putParcelable(AccessPoint.KEY_NETWORKINFO, mNetworkInfo);
         bundle.putParcelable(AccessPoint.KEY_WIFIINFO, mWifiInfo);
         if (mFqdn != null) {
-            bundle.putString(AccessPoint.KEY_FQDN, mFqdn);
+            bundle.putString(AccessPoint.KEY_PASSPOINT_UNIQUE_ID, mFqdn);
         }
         if (mProviderFriendlyName != null) {
             bundle.putString(AccessPoint.KEY_PROVIDER_FRIENDLY_NAME, mProviderFriendlyName);
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
index 26abf71..586c154 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
@@ -606,7 +606,7 @@
 
             List<ScanResult> cachedScanResults = new ArrayList<>(mScanResultCache.values());
 
-            // Add a unique Passpoint AccessPoint for each Passpoint profile's FQDN.
+            // Add a unique Passpoint AccessPoint for each Passpoint profile's unique identifier.
             accessPoints.addAll(updatePasspointAccessPoints(
                     mWifiManager.getAllMatchingWifiConfigs(cachedScanResults), cachedAccessPoints));
 
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java
index 1182945..6307caf 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java
@@ -31,6 +31,7 @@
 import android.content.res.Resources;
 import android.location.LocationManager;
 import android.media.AudioManager;
+import android.os.BatteryManager;
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.provider.Settings;
@@ -122,12 +123,12 @@
     public void testGetDefaultStorageManagerDaysToRetain_storageManagerDaysToRetainUsesResources() {
         Resources resources = mock(Resources.class);
         when(resources.getInteger(
-                        eq(
-                                com.android
-                                        .internal
-                                        .R
-                                        .integer
-                                        .config_storageManagerDaystoRetainDefault)))
+                eq(
+                        com.android
+                                .internal
+                                .R
+                                .integer
+                                .config_storageManagerDaystoRetainDefault)))
                 .thenReturn(60);
         assertThat(Utils.getDefaultStorageManagerDaysToRetain(resources)).isEqualTo(60);
     }
@@ -147,7 +148,8 @@
         private static Map<String, Integer> map = new HashMap<>();
 
         @Implementation
-        public static boolean putIntForUser(ContentResolver cr, String name, int value, int userHandle) {
+        public static boolean putIntForUser(ContentResolver cr, String name, int value,
+                int userHandle) {
             map.put(name, value);
             return true;
         }
@@ -312,4 +314,33 @@
         assertThat(Utils.getCombinedServiceState(mServiceState)).isEqualTo(
                 ServiceState.STATE_OUT_OF_SERVICE);
     }
+
+    @Test
+    public void getBatteryStatus_statusIsFull_returnFullString() {
+        final Intent intent = new Intent().putExtra(BatteryManager.EXTRA_LEVEL, 100);
+        final Resources resources = mContext.getResources();
+
+        assertThat(Utils.getBatteryStatus(mContext, intent)).isEqualTo(
+                resources.getString(R.string.battery_info_status_full));
+    }
+
+    @Test
+    public void getBatteryStatus_batteryLevelIs100_returnFullString() {
+        final Intent intent = new Intent().putExtra(BatteryManager.EXTRA_STATUS,
+                BatteryManager.BATTERY_STATUS_FULL);
+        final Resources resources = mContext.getResources();
+
+        assertThat(Utils.getBatteryStatus(mContext, intent)).isEqualTo(
+                resources.getString(R.string.battery_info_status_full));
+    }
+
+    @Test
+    public void getBatteryStatus_batteryLevel99_returnChargingString() {
+        final Intent intent = new Intent().putExtra(BatteryManager.EXTRA_STATUS,
+                BatteryManager.BATTERY_STATUS_CHARGING);
+        final Resources resources = mContext.getResources();
+
+        assertThat(Utils.getBatteryStatus(mContext, intent)).isEqualTo(
+                resources.getString(R.string.battery_info_status_charging));
+    }
 }
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaDeviceTest.java
index e0e2fd6..a39bcb7 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaDeviceTest.java
@@ -51,21 +51,7 @@
         when(mDevice.isActiveDevice(BluetoothProfile.A2DP)).thenReturn(true);
         when(mDevice.isActiveDevice(BluetoothProfile.HEARING_AID)).thenReturn(true);
 
-        mBluetoothMediaDevice = new BluetoothMediaDevice(mContext, mDevice);
-    }
-
-    @Test
-    public void connect_setActiveSuccess_isConnectedReturnTrue() {
-        when(mDevice.setActive()).thenReturn(true);
-
-        assertThat(mBluetoothMediaDevice.connect()).isTrue();
-    }
-
-    @Test
-    public void connect_setActiveFail_isConnectedReturnFalse() {
-        when(mDevice.setActive()).thenReturn(false);
-
-        assertThat(mBluetoothMediaDevice.connect()).isFalse();
+        mBluetoothMediaDevice = new BluetoothMediaDevice(mContext, mDevice, null, null, null);
     }
 
     @Test
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 c9db0d1..77a67c2 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
@@ -18,7 +18,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
@@ -47,7 +46,6 @@
     @Mock
     private MediaRoute2Info mRouteInfo;
 
-
     private Context mContext;
     private InfoMediaDevice mInfoMediaDevice;
 
@@ -88,11 +86,4 @@
 
         assertThat(mInfoMediaDevice.getId()).isEqualTo(TEST_ID);
     }
-
-    @Test
-    public void connect_shouldSelectRoute() {
-        mInfoMediaDevice.connect();
-
-        verify(mRouterManager).selectRoute(TEST_PACKAGE_NAME, mRouteInfo);
-    }
 }
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 3726fb2..9668629 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
@@ -25,6 +25,10 @@
 import android.content.Context;
 import android.media.MediaRoute2Info;
 import android.media.MediaRouter2Manager;
+import android.media.RoutingSessionInfo;
+
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.testutils.shadow.ShadowRouter2Manager;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -33,44 +37,37 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
 
 import java.util.ArrayList;
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowRouter2Manager.class})
 public class InfoMediaManagerTest {
 
     private static final String TEST_PACKAGE_NAME = "com.test.packagename";
     private static final String TEST_ID = "test_id";
+    private static final String TEST_NAME = "test_name";
 
     @Mock
     private MediaRouter2Manager mRouterManager;
+    @Mock
+    private LocalBluetoothManager mLocalBluetoothManager;
 
     private InfoMediaManager mInfoMediaManager;
     private Context mContext;
+    private ShadowRouter2Manager mShadowRouter2Manager;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
 
-        mInfoMediaManager = new InfoMediaManager(mContext, TEST_PACKAGE_NAME, null);
-        mInfoMediaManager.mRouterManager = mRouterManager;
-    }
-
-    @Test
-    public void stopScan_shouldRemoveCallback() {
-        mInfoMediaManager.stopScan();
-
-        verify(mRouterManager).unregisterCallback(mInfoMediaManager.mMediaRouterCallback);
-    }
-
-    @Test
-    public void startScan_shouldAddCallback() {
-        mInfoMediaManager.startScan();
-
-        verify(mRouterManager).registerCallback(mInfoMediaManager.mExecutor,
-                mInfoMediaManager.mMediaRouterCallback);
+        mInfoMediaManager =
+                new InfoMediaManager(mContext, TEST_PACKAGE_NAME, null, mLocalBluetoothManager);
+        mShadowRouter2Manager = ShadowRouter2Manager.getShadow();
+        mInfoMediaManager.mRouterManager = MediaRouter2Manager.getInstance(mContext);
     }
 
     @Test
@@ -81,7 +78,7 @@
 
         final List<MediaRoute2Info> routes = new ArrayList<>();
         routes.add(info);
-        when(mRouterManager.getAvailableRoutes(TEST_PACKAGE_NAME)).thenReturn(routes);
+        mShadowRouter2Manager.setAvailableRoutes(routes);
 
         final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
         assertThat(mediaDevice).isNull();
@@ -102,7 +99,7 @@
 
         final List<MediaRoute2Info> routes = new ArrayList<>();
         routes.add(info);
-        when(mRouterManager.getAllRoutes()).thenReturn(routes);
+        mShadowRouter2Manager.setAllRoutes(routes);
 
         final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
         assertThat(mediaDevice).isNull();
@@ -123,7 +120,7 @@
 
         final List<MediaRoute2Info> routes = new ArrayList<>();
         routes.add(info);
-        when(mRouterManager.getAvailableRoutes(TEST_PACKAGE_NAME)).thenReturn(routes);
+        mShadowRouter2Manager.setAvailableRoutes(routes);
 
         final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
         assertThat(mediaDevice).isNull();
@@ -142,4 +139,303 @@
 
         assertThat(mInfoMediaManager.mMediaDevices).hasSize(0);
     }
+
+    @Test
+    public void onRoutesChanged_getAvailableRoutes_shouldAddMediaDevice() {
+        final MediaRoute2Info info = mock(MediaRoute2Info.class);
+        when(info.getId()).thenReturn(TEST_ID);
+        when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        final List<MediaRoute2Info> routes = new ArrayList<>();
+        routes.add(info);
+        mShadowRouter2Manager.setAvailableRoutes(routes);
+
+        final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
+        assertThat(mediaDevice).isNull();
+
+        mInfoMediaManager.mMediaRouterCallback.onRoutesChanged(routes);
+
+        final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
+        assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
+        assertThat(mInfoMediaManager.getCurrentConnectedDevice()).isEqualTo(infoDevice);
+        assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
+    }
+
+    @Test
+    public void onRoutesChanged_buildAllRoutes_shouldAddMediaDevice() {
+        final MediaRoute2Info info = mock(MediaRoute2Info.class);
+        when(info.getId()).thenReturn(TEST_ID);
+        when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        final List<MediaRoute2Info> routes = new ArrayList<>();
+        routes.add(info);
+        mShadowRouter2Manager.setAllRoutes(routes);
+
+        final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
+        assertThat(mediaDevice).isNull();
+
+        mInfoMediaManager.mPackageName = "";
+        mInfoMediaManager.mMediaRouterCallback.onRoutesChanged(routes);
+
+        final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
+        assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
+        assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
+    }
+
+    @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 List<RoutingSessionInfo> infos = new ArrayList<>();
+
+        mShadowRouter2Manager.setActiveSessions(infos);
+
+        assertThat(mInfoMediaManager.connectDeviceWithoutPackageName(device)).isFalse();
+    }
+
+    @Test
+    public void onRoutesRemoved_getAvailableRoutes_shouldAddMediaDevice() {
+        final MediaRoute2Info info = mock(MediaRoute2Info.class);
+        when(info.getId()).thenReturn(TEST_ID);
+        when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        final List<MediaRoute2Info> routes = new ArrayList<>();
+        routes.add(info);
+        when(mRouterManager.getAvailableRoutes(TEST_PACKAGE_NAME)).thenReturn(routes);
+
+        final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
+        assertThat(mediaDevice).isNull();
+
+        mInfoMediaManager.mMediaRouterCallback.onRoutesRemoved(routes);
+
+        final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
+        assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
+        assertThat(mInfoMediaManager.getCurrentConnectedDevice()).isEqualTo(infoDevice);
+        assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
+    }
+
+    @Test
+    public void onRoutesRemoved_buildAllRoutes_shouldAddMediaDevice() {
+        final MediaRoute2Info info = mock(MediaRoute2Info.class);
+        when(info.getId()).thenReturn(TEST_ID);
+        when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        final List<MediaRoute2Info> routes = new ArrayList<>();
+        routes.add(info);
+        when(mRouterManager.getAllRoutes()).thenReturn(routes);
+
+        final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
+        assertThat(mediaDevice).isNull();
+
+        mInfoMediaManager.mPackageName = "";
+        mInfoMediaManager.mMediaRouterCallback.onRoutesRemoved(routes);
+
+        final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
+        assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
+        assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
+    }
+
+    @Test
+    public void addDeviceToPlayMedia_packageNameIsNull_returnFalse() {
+        mInfoMediaManager.mPackageName = null;
+        final MediaDevice device = mock(MediaDevice.class);
+
+        assertThat(mInfoMediaManager.addDeviceToPlayMedia(device)).isFalse();
+    }
+
+    @Test
+    public void addDeviceToPlayMedia_containSelectableRoutes_returnTrue() {
+        final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
+        final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
+        routingSessionInfos.add(info);
+
+        final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
+        final MediaDevice device =
+                new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager, route2Info,
+                        TEST_PACKAGE_NAME);
+
+        final List<String> list = new ArrayList<>();
+        list.add(TEST_ID);
+
+        mShadowRouter2Manager.setRoutingSessions(routingSessionInfos);
+        when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(info.getSelectableRoutes()).thenReturn(list);
+        when(route2Info.getId()).thenReturn(TEST_ID);
+        when(route2Info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        assertThat(mInfoMediaManager.addDeviceToPlayMedia(device)).isTrue();
+    }
+
+    @Test
+    public void addDeviceToPlayMedia_notContainSelectableRoutes_returnFalse() {
+        final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
+        final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
+        routingSessionInfos.add(info);
+
+        final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
+        final MediaDevice device =
+                new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager, route2Info,
+                        TEST_PACKAGE_NAME);
+
+        final List<String> list = new ArrayList<>();
+        list.add("fake_id");
+
+        mShadowRouter2Manager.setRoutingSessions(routingSessionInfos);
+        when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(info.getSelectableRoutes()).thenReturn(list);
+        when(route2Info.getId()).thenReturn(TEST_ID);
+        when(route2Info.getName()).thenReturn(TEST_NAME);
+        when(route2Info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        assertThat(mInfoMediaManager.addDeviceToPlayMedia(device)).isFalse();
+    }
+
+    @Test
+    public void removeDeviceFromMedia_packageNameIsNull_returnFalse() {
+        mInfoMediaManager.mPackageName = null;
+        final MediaDevice device = mock(MediaDevice.class);
+
+        assertThat(mInfoMediaManager.removeDeviceFromPlayMedia(device)).isFalse();
+    }
+
+    @Test
+    public void removeDeviceFromMedia_containSelectedRoutes_returnTrue() {
+        final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
+        final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
+        routingSessionInfos.add(info);
+
+        final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
+        final MediaDevice device =
+                new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager, route2Info,
+                        TEST_PACKAGE_NAME);
+
+        final List<String> list = new ArrayList<>();
+        list.add(TEST_ID);
+
+        mShadowRouter2Manager.setRoutingSessions(routingSessionInfos);
+        when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(info.getSelectedRoutes()).thenReturn(list);
+        when(route2Info.getId()).thenReturn(TEST_ID);
+        when(route2Info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        assertThat(mInfoMediaManager.removeDeviceFromPlayMedia(device)).isTrue();
+    }
+
+    @Test
+    public void removeDeviceFromMedia_notContainSelectedRoutes_returnFalse() {
+        final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
+        final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
+        routingSessionInfos.add(info);
+
+        final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
+        final MediaDevice device =
+                new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager, route2Info,
+                        TEST_PACKAGE_NAME);
+
+        final List<String> list = new ArrayList<>();
+        list.add("fake_id");
+
+        mShadowRouter2Manager.setRoutingSessions(routingSessionInfos);
+        when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(info.getSelectedRoutes()).thenReturn(list);
+        when(route2Info.getId()).thenReturn(TEST_ID);
+        when(route2Info.getName()).thenReturn(TEST_NAME);
+        when(route2Info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        assertThat(mInfoMediaManager.removeDeviceFromPlayMedia(device)).isFalse();
+    }
+
+    @Test
+    public void getSelectableMediaDevice_packageNameIsNull_returnFalse() {
+        mInfoMediaManager.mPackageName = null;
+
+        assertThat(mInfoMediaManager.getSelectableMediaDevice()).isEmpty();
+    }
+
+    @Test
+    public void getSelectableMediaDevice_notContainPackageName_returnEmpty() {
+        final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
+        final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
+        routingSessionInfos.add(info);
+
+        mShadowRouter2Manager.setRoutingSessions(routingSessionInfos);
+        when(info.getClientPackageName()).thenReturn("com.fake.packagename");
+
+        assertThat(mInfoMediaManager.getSelectableMediaDevice()).isEmpty();
+    }
+
+    @Test
+    public void adjustSessionVolume_packageNameIsNull_noCrash() {
+        mInfoMediaManager.mPackageName = null;
+
+        mInfoMediaManager.adjustSessionVolume(10);
+    }
+
+    @Test
+    public void getSessionVolumeMax_packageNameIsNull_returnNotFound() {
+        mInfoMediaManager.mPackageName = null;
+
+        assertThat(mInfoMediaManager.getSessionVolumeMax()).isEqualTo(-1);
+    }
+
+    @Test
+    public void getSessionVolumeMax_containPackageName_returnMaxVolume() {
+        final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
+        final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
+        routingSessionInfos.add(info);
+
+        mShadowRouter2Manager.setRoutingSessions(routingSessionInfos);
+        when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        mInfoMediaManager.getSessionVolumeMax();
+
+        verify(info).getVolumeMax();
+    }
+
+    @Test
+    public void getSessionVolumeMax_notContainPackageName_returnNotFound() {
+        final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
+        final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
+        routingSessionInfos.add(info);
+
+        mShadowRouter2Manager.setRoutingSessions(routingSessionInfos);
+        when(info.getClientPackageName()).thenReturn("com.fake.packagename");
+
+        assertThat(mInfoMediaManager.getSessionVolumeMax()).isEqualTo(-1);
+    }
+
+    @Test
+    public void getSessionVolume_packageNameIsNull_returnNotFound() {
+        mInfoMediaManager.mPackageName = null;
+
+        assertThat(mInfoMediaManager.getSessionVolume()).isEqualTo(-1);
+    }
+
+    @Test
+    public void getSessionVolume_containPackageName_returnMaxVolume() {
+        final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
+        final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
+        routingSessionInfos.add(info);
+
+        mShadowRouter2Manager.setRoutingSessions(routingSessionInfos);
+        when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        mInfoMediaManager.getSessionVolume();
+
+        verify(info).getVolume();
+    }
+
+    @Test
+    public void getSessionVolume_notContainPackageName_returnNotFound() {
+        final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
+        final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
+        routingSessionInfos.add(info);
+
+        mShadowRouter2Manager.setRoutingSessions(routingSessionInfos);
+        when(info.getClientPackageName()).thenReturn("com.fake.packagename");
+
+        assertThat(mInfoMediaManager.getSessionVolume()).isEqualTo(-1);
+    }
 }
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 c780a64..3611dfe 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
@@ -25,13 +25,17 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 
 import com.android.settingslib.bluetooth.A2dpProfile;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
 import com.android.settingslib.bluetooth.HearingAidProfile;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
+import com.android.settingslib.testutils.shadow.ShadowBluetoothAdapter;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -40,11 +44,14 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
 
 import java.util.ArrayList;
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowBluetoothAdapter.class})
 public class LocalMediaManagerTest {
 
     private static final String TEST_DEVICE_ID_1 = "device_id_1";
@@ -69,18 +76,23 @@
 
     private Context mContext;
     private LocalMediaManager mLocalMediaManager;
+    private ShadowBluetoothAdapter mShadowBluetoothAdapter;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
+        final List<BluetoothDevice> bluetoothDevices = new ArrayList<>();
+        mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
+        mShadowBluetoothAdapter.setMostRecentlyConnectedDevices(bluetoothDevices);
 
         when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalProfileManager);
         when(mLocalProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile);
         when(mLocalProfileManager.getHearingAidProfile()).thenReturn(mHapProfile);
 
         mLocalMediaManager = new LocalMediaManager(mContext, mLocalBluetoothManager,
-                mBluetoothMediaManager, mInfoMediaManager);
+                mInfoMediaManager, "com.test.packagename");
+        mLocalMediaManager.mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
     }
 
     @Test
@@ -163,14 +175,14 @@
     }
 
     @Test
-    public void onDeviceAdded_mediaDeviceAndPhoneDeviceNotExistInList_addBothDevice() {
+    public void onDeviceAdded_addDevice() {
         final MediaDevice device = mock(MediaDevice.class);
 
         assertThat(mLocalMediaManager.mMediaDevices).isEmpty();
         mLocalMediaManager.registerCallback(mCallback);
         mLocalMediaManager.mMediaDeviceCallback.onDeviceAdded(device);
 
-        assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
+        assertThat(mLocalMediaManager.mMediaDevices).hasSize(1);
         verify(mCallback).onDeviceListUpdate(any());
     }
 
@@ -206,7 +218,7 @@
     }
 
     @Test
-    public void onDeviceListAdded_phoneDeviceNotExistInList_addPhoneDeviceAndDevicesList() {
+    public void onDeviceListAdded_addDevicesList() {
         final List<MediaDevice> devices = new ArrayList<>();
         final MediaDevice device1 = mock(MediaDevice.class);
         final MediaDevice device2 = mock(MediaDevice.class);
@@ -220,12 +232,12 @@
         mLocalMediaManager.registerCallback(mCallback);
         mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
 
-        assertThat(mLocalMediaManager.mMediaDevices).hasSize(3);
+        assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
         verify(mCallback).onDeviceListUpdate(any());
     }
 
     @Test
-    public void onDeviceListAdded_phoneDeviceExistInList_addDeviceList() {
+    public void onDeviceListAdded_addDeviceList() {
         final List<MediaDevice> devices = new ArrayList<>();
         final MediaDevice device1 = mock(MediaDevice.class);
         final MediaDevice device2 = mock(MediaDevice.class);
@@ -245,12 +257,12 @@
         mLocalMediaManager.registerCallback(mCallback);
         mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
 
-        assertThat(mLocalMediaManager.mMediaDevices).hasSize(4);
+        assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
         verify(mCallback).onDeviceListUpdate(any());
     }
 
     @Test
-    public void onDeviceRemoved_phoneDeviceIsLastDeviceAfterRemoveMediaDevice_removeBothDevice() {
+    public void onDeviceRemoved_removeDevice() {
         final MediaDevice device1 = mock(MediaDevice.class);
         mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
         mLocalMediaManager.mMediaDevices.add(device1);
@@ -260,7 +272,7 @@
         mLocalMediaManager.registerCallback(mCallback);
         mLocalMediaManager.mMediaDeviceCallback.onDeviceRemoved(device1);
 
-        assertThat(mLocalMediaManager.mMediaDevices).isEmpty();
+        assertThat(mLocalMediaManager.mMediaDevices).hasSize(1);
         verify(mCallback).onDeviceListUpdate(any());
     }
 
@@ -298,7 +310,7 @@
     }
 
     @Test
-    public void onDeviceListRemoved_phoneDeviceIsLastDeviceAfterRemoveDeviceList_removeAll() {
+    public void onDeviceListRemoved_removeAll() {
         final List<MediaDevice> devices = new ArrayList<>();
         final MediaDevice device1 = mock(MediaDevice.class);
         final MediaDevice device2 = mock(MediaDevice.class);
@@ -311,7 +323,8 @@
 
         assertThat(mLocalMediaManager.mMediaDevices).hasSize(3);
         mLocalMediaManager.registerCallback(mCallback);
-        mLocalMediaManager.mMediaDeviceCallback.onDeviceListRemoved(devices);
+        mLocalMediaManager.mMediaDeviceCallback
+                .onDeviceListRemoved(mLocalMediaManager.mMediaDevices);
 
         assertThat(mLocalMediaManager.mMediaDevices).isEmpty();
         verify(mCallback).onDeviceListUpdate(any());
@@ -384,4 +397,84 @@
 
         verify(mCallback).onDeviceAttributesChanged();
     }
+
+    @Test
+    public void getActiveMediaDevice_checkList() {
+        final List<MediaDevice> devices = new ArrayList<>();
+        final MediaDevice device1 = mock(MediaDevice.class);
+        final MediaDevice device2 = mock(MediaDevice.class);
+        final MediaDevice device3 = mock(MediaDevice.class);
+        device1.mType = MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE;
+        device2.mType = MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE;
+        device3.mType = MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE;
+        when(device1.getClientPackageName()).thenReturn(TEST_DEVICE_ID_1);
+        when(device2.getClientPackageName()).thenReturn(TEST_DEVICE_ID_2);
+        when(device3.getClientPackageName()).thenReturn(TEST_DEVICE_ID_3);
+        when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
+        when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
+        when(device3.getId()).thenReturn(TEST_DEVICE_ID_3);
+        devices.add(device1);
+        devices.add(device2);
+        devices.add(device3);
+        mLocalMediaManager.registerCallback(mCallback);
+        mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
+
+        List<MediaDevice> activeDevices = mLocalMediaManager.getActiveMediaDevice(
+                MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE);
+        assertThat(activeDevices).containsExactly(device1);
+
+        activeDevices = mLocalMediaManager.getActiveMediaDevice(
+                MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
+        assertThat(activeDevices).containsExactly(device2);
+
+        activeDevices = mLocalMediaManager.getActiveMediaDevice(
+                MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE);
+        assertThat(activeDevices).containsExactly(device3);
+    }
+
+    @Test
+    public void onDeviceAttributesChanged_shouldBeCalled() {
+        mLocalMediaManager.registerCallback(mCallback);
+
+        mLocalMediaManager.mDeviceAttributeChangeCallback.onDeviceAttributesChanged();
+
+        verify(mCallback).onDeviceAttributesChanged();
+    }
+
+    @Test
+    public void onDeviceListAdded_haveDisconnectedDevice_addDisconnectedDevice() {
+        final List<MediaDevice> devices = new ArrayList<>();
+        final MediaDevice device1 = mock(MediaDevice.class);
+        final MediaDevice device2 = mock(MediaDevice.class);
+        final MediaDevice device3 = mock(MediaDevice.class);
+        mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
+        devices.add(device1);
+        devices.add(device2);
+        mLocalMediaManager.mMediaDevices.add(device3);
+        mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
+
+        final List<BluetoothDevice> bluetoothDevices = new ArrayList<>();
+        final BluetoothDevice bluetoothDevice = mock(BluetoothDevice.class);
+        final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
+        final CachedBluetoothDeviceManager cachedManager = mock(CachedBluetoothDeviceManager.class);
+        bluetoothDevices.add(bluetoothDevice);
+        mShadowBluetoothAdapter.setMostRecentlyConnectedDevices(bluetoothDevices);
+
+        when(mLocalBluetoothManager.getCachedDeviceManager()).thenReturn(cachedManager);
+        when(cachedManager.findDevice(bluetoothDevice)).thenReturn(cachedDevice);
+        when(cachedDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
+        when(cachedDevice.isConnected()).thenReturn(false);
+
+        when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
+        when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
+        when(device3.getId()).thenReturn(TEST_DEVICE_ID_3);
+        when(mLocalMediaManager.mPhoneDevice.getId()).thenReturn("test_phone_id");
+
+        assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
+        mLocalMediaManager.registerCallback(mCallback);
+        mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
+
+        assertThat(mLocalMediaManager.mMediaDevices).hasSize(3);
+        verify(mCallback).onDeviceListUpdate(any());
+    }
 }
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 02cb83e..3f29b72 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
@@ -17,14 +17,19 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+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.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageStats;
 import android.media.MediaRoute2Info;
 import android.media.MediaRouter2Manager;
 
+import com.android.settingslib.R;
 import com.android.settingslib.bluetooth.A2dpProfile;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.HearingAidProfile;
@@ -38,6 +43,8 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.Shadows;
+import org.robolectric.shadows.ShadowPackageManager;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -57,6 +64,8 @@
     private static final String ROUTER_ID_2 = "RouterId_2";
     private static final String ROUTER_ID_3 = "RouterId_3";
     private static final String TEST_PACKAGE_NAME = "com.test.playmusic";
+    private static final String TEST_PACKAGE_NAME2 = "com.test.playmusic2";
+    private static final String TEST_APPLICATION_LABEL = "playmusic";
     private final BluetoothClass mHeadreeClass =
             new BluetoothClass(BluetoothClass.Device.AUDIO_VIDEO_HEADPHONES);
     private final BluetoothClass mCarkitClass =
@@ -83,6 +92,14 @@
     @Mock
     private MediaRoute2Info mRouteInfo3;
     @Mock
+    private MediaRoute2Info mBluetoothRouteInfo1;
+    @Mock
+    private MediaRoute2Info mBluetoothRouteInfo2;
+    @Mock
+    private MediaRoute2Info mBluetoothRouteInfo3;
+    @Mock
+    private MediaRoute2Info mPhoneRouteInfo;
+    @Mock
     private LocalBluetoothProfileManager mProfileManager;
     @Mock
     private HearingAidProfile mHapProfile;
@@ -90,6 +107,8 @@
     private A2dpProfile mA2dpProfile;
     @Mock
     private BluetoothDevice mDevice;
+    @Mock
+    private MediaRouter2Manager mMediaRouter2Manager;
 
     private BluetoothMediaDevice mBluetoothMediaDevice1;
     private BluetoothMediaDevice mBluetoothMediaDevice2;
@@ -100,7 +119,10 @@
     private InfoMediaDevice mInfoMediaDevice3;
     private List<MediaDevice> mMediaDevices = new ArrayList<>();
     private PhoneMediaDevice mPhoneMediaDevice;
-    private MediaRouter2Manager mMediaRouter2Manager;
+    private ShadowPackageManager mShadowPackageManager;
+    private ApplicationInfo mAppInfo;
+    private PackageInfo mPackageInfo;
+    private PackageStats mPackageStats;
 
     @Before
     public void setUp() {
@@ -133,17 +155,24 @@
         when(mProfileManager.getHearingAidProfile()).thenReturn(mHapProfile);
         when(mA2dpProfile.getActiveDevice()).thenReturn(mDevice);
 
-        mBluetoothMediaDevice1 = new BluetoothMediaDevice(mContext, mCachedDevice1);
-        mBluetoothMediaDevice2 = new BluetoothMediaDevice(mContext, mCachedDevice2);
-        mBluetoothMediaDevice3 = new BluetoothMediaDevice(mContext, mCachedDevice3);
-        mMediaRouter2Manager = MediaRouter2Manager.getInstance(mContext);
+        mBluetoothMediaDevice1 =
+                new BluetoothMediaDevice(mContext, mCachedDevice1, mMediaRouter2Manager,
+                        mBluetoothRouteInfo1, TEST_PACKAGE_NAME);
+        mBluetoothMediaDevice2 =
+                new BluetoothMediaDevice(mContext, mCachedDevice2, mMediaRouter2Manager,
+                        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, mLocalBluetoothManager);
+        mPhoneMediaDevice =
+                new PhoneMediaDevice(mContext, mMediaRouter2Manager, mPhoneRouteInfo,
+                        TEST_PACKAGE_NAME);
     }
 
     @Test
@@ -370,4 +399,53 @@
         assertThat(mMediaDevices.get(5)).isEqualTo(mBluetoothMediaDevice1);
         assertThat(mMediaDevices.get(6)).isEqualTo(mBluetoothMediaDevice2);
     }
+
+    @Test
+    public void connect_shouldSelectRoute() {
+        mInfoMediaDevice1.connect();
+
+        verify(mMediaRouter2Manager).selectRoute(TEST_PACKAGE_NAME, mRouteInfo1);
+    }
+
+    @Test
+    public void getClientPackageName_returnPackageName() {
+        when(mRouteInfo1.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        assertThat(mInfoMediaDevice1.getClientPackageName()).isEqualTo(TEST_PACKAGE_NAME);
+    }
+
+    private void initPackage() {
+        mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager());
+        mAppInfo = new ApplicationInfo();
+        mAppInfo.flags = ApplicationInfo.FLAG_INSTALLED;
+        mAppInfo.packageName = TEST_PACKAGE_NAME;
+        mAppInfo.name = TEST_APPLICATION_LABEL;
+        mPackageInfo = new PackageInfo();
+        mPackageInfo.packageName = TEST_PACKAGE_NAME;
+        mPackageInfo.applicationInfo = mAppInfo;
+        mPackageStats = new PackageStats(TEST_PACKAGE_NAME);
+    }
+
+    @Test
+    public void getClientAppLabel_matchedPackageName_returnLabel() {
+        initPackage();
+        when(mRouteInfo1.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        assertThat(mInfoMediaDevice1.getClientAppLabel()).isEqualTo(
+                mContext.getResources().getString(R.string.unknown));
+
+        mShadowPackageManager.addPackage(mPackageInfo, mPackageStats);
+
+        assertThat(mInfoMediaDevice1.getClientAppLabel()).isEqualTo(TEST_APPLICATION_LABEL);
+    }
+
+    @Test
+    public void getClientAppLabel_noMatchedPackageName_returnDefault() {
+        initPackage();
+        mShadowPackageManager.addPackage(mPackageInfo, mPackageStats);
+        when(mRouteInfo1.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME2);
+
+        assertThat(mInfoMediaDevice1.getClientAppLabel()).isEqualTo(
+                mContext.getResources().getString(R.string.unknown));
+    }
 }
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 0752dc0..db984fb 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
@@ -18,21 +18,13 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Mockito.when;
-
-import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 
 import com.android.settingslib.R;
-import com.android.settingslib.bluetooth.A2dpProfile;
-import com.android.settingslib.bluetooth.HearingAidProfile;
-import com.android.settingslib.bluetooth.LocalBluetoothManager;
-import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
 
 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;
@@ -40,17 +32,6 @@
 @RunWith(RobolectricTestRunner.class)
 public class PhoneMediaDeviceTest {
 
-    @Mock
-    private LocalBluetoothProfileManager mLocalProfileManager;
-    @Mock
-    private LocalBluetoothManager mLocalBluetoothManager;
-    @Mock
-    private HearingAidProfile mHapProfile;
-    @Mock
-    private A2dpProfile mA2dpProfile;
-    @Mock
-    private BluetoothDevice mDevice;
-
     private Context mContext;
     private PhoneMediaDevice mPhoneMediaDevice;
 
@@ -59,68 +40,8 @@
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
 
-        when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalProfileManager);
-        when(mLocalProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile);
-        when(mLocalProfileManager.getHearingAidProfile()).thenReturn(mHapProfile);
-        when(mA2dpProfile.getActiveDevice()).thenReturn(mDevice);
-
-        mPhoneMediaDevice = new PhoneMediaDevice(mContext, mLocalBluetoothManager);
-    }
-
-    @Test
-    public void connect_phoneDeviceSetActiveSuccess_isConnectedReturnTrue() {
-        when(mA2dpProfile.setActiveDevice(null)).thenReturn(true);
-        when(mHapProfile.setActiveDevice(null)).thenReturn(true);
-
-        assertThat(mPhoneMediaDevice.connect()).isTrue();
-    }
-
-    @Test
-    public void connect_a2dpProfileSetActiveFail_isConnectedReturnFalse() {
-        when(mA2dpProfile.setActiveDevice(null)).thenReturn(false);
-        when(mHapProfile.setActiveDevice(null)).thenReturn(true);
-
-        assertThat(mPhoneMediaDevice.connect()).isFalse();
-    }
-
-    @Test
-    public void connect_hearingAidProfileSetActiveFail_isConnectedReturnFalse() {
-        when(mA2dpProfile.setActiveDevice(null)).thenReturn(true);
-        when(mHapProfile.setActiveDevice(null)).thenReturn(false);
-
-        assertThat(mPhoneMediaDevice.connect()).isFalse();
-    }
-
-    @Test
-    public void connect_hearingAidAndA2dpProfileSetActiveFail_isConnectedReturnFalse() {
-        when(mA2dpProfile.setActiveDevice(null)).thenReturn(false);
-        when(mHapProfile.setActiveDevice(null)).thenReturn(false);
-
-        assertThat(mPhoneMediaDevice.connect()).isFalse();
-    }
-
-    @Test
-    public void connect_hearingAidProfileIsNullAndA2dpProfileNotNull_isConnectedReturnTrue() {
-        when(mLocalProfileManager.getHearingAidProfile()).thenReturn(null);
-
-        when(mA2dpProfile.setActiveDevice(null)).thenReturn(true);
-        assertThat(mPhoneMediaDevice.connect()).isTrue();
-    }
-
-    @Test
-    public void connect_hearingAidProfileNotNullAndA2dpProfileIsNull_isConnectedReturnTrue() {
-        when(mLocalProfileManager.getA2dpProfile()).thenReturn(null);
-
-        when(mHapProfile.setActiveDevice(null)).thenReturn(true);
-        assertThat(mPhoneMediaDevice.connect()).isTrue();
-    }
-
-    @Test
-    public void connect_hearingAidProfileAndA2dpProfileIsNull_isConnectedReturnFalse() {
-        when(mLocalProfileManager.getA2dpProfile()).thenReturn(null);
-        when(mLocalProfileManager.getHearingAidProfile()).thenReturn(null);
-
-        assertThat(mPhoneMediaDevice.connect()).isFalse();
+        mPhoneMediaDevice =
+                new PhoneMediaDevice(mContext, null, null, null);
     }
 
     @Test
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/PowerUtilTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/PowerUtilTest.java
index 61fdbd5..ed308c8 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/PowerUtilTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/PowerUtilTest.java
@@ -120,9 +120,9 @@
                 true /* basedOnUsage */);
 
         // additional battery percentage in this string
-        assertThat(info).isEqualTo("Phone may shutdown soon (10%)");
+        assertThat(info).isEqualTo("Phone may shut down soon (10%)");
         // shortened string should not have percentage
-        assertThat(info2).isEqualTo("Phone may shutdown soon");
+        assertThat(info2).isEqualTo("Phone may shut down soon");
     }
 
     @Test
diff --git a/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowBluetoothAdapter.java b/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowBluetoothAdapter.java
index 906dba4..015ce149 100644
--- a/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowBluetoothAdapter.java
+++ b/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowBluetoothAdapter.java
@@ -17,6 +17,7 @@
 package com.android.settingslib.testutils.shadow;
 
 import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothProfile;
 import android.content.Context;
 
@@ -29,6 +30,7 @@
 public class ShadowBluetoothAdapter extends org.robolectric.shadows.ShadowBluetoothAdapter {
 
     private List<Integer> mSupportedProfiles;
+    private List<BluetoothDevice> mMostRecentlyConnectedDevices;
     private BluetoothProfile.ServiceListener mServiceListener;
 
     @Implementation
@@ -50,4 +52,13 @@
     public void setSupportedProfiles(List<Integer> supportedProfiles) {
         mSupportedProfiles = supportedProfiles;
     }
+
+    @Implementation
+    protected List<BluetoothDevice> getMostRecentlyConnectedDevices() {
+        return mMostRecentlyConnectedDevices;
+    }
+
+    public void setMostRecentlyConnectedDevices(List<BluetoothDevice> list) {
+        mMostRecentlyConnectedDevices = list;
+    }
 }
diff --git a/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowRouter2Manager.java b/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowRouter2Manager.java
new file mode 100644
index 0000000..db0cb06
--- /dev/null
+++ b/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowRouter2Manager.java
@@ -0,0 +1,77 @@
+/*
+ * 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.
+ */
+package com.android.settingslib.testutils.shadow;
+
+import android.media.MediaRoute2Info;
+import android.media.MediaRouter2Manager;
+import android.media.RoutingSessionInfo;
+
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.shadow.api.Shadow;
+
+import java.util.List;
+
+@Implements(MediaRouter2Manager.class)
+public class ShadowRouter2Manager {
+
+    private List<MediaRoute2Info> mAvailableRoutes;
+    private List<MediaRoute2Info> mAllRoutes;
+    private List<RoutingSessionInfo> mActiveSessions;
+    private List<RoutingSessionInfo> mRoutingSessions;
+
+    @Implementation
+    protected List<MediaRoute2Info> getAvailableRoutes(String packageName) {
+        return mAvailableRoutes;
+    }
+
+    public void setAvailableRoutes(List<MediaRoute2Info> infos) {
+        mAvailableRoutes = infos;
+    }
+
+    @Implementation
+    protected List<MediaRoute2Info> getAllRoutes() {
+        return mAllRoutes;
+    }
+
+    public void setAllRoutes(List<MediaRoute2Info> infos) {
+        mAllRoutes = infos;
+    }
+
+    @Implementation
+    protected List<RoutingSessionInfo> getActiveSessions() {
+        return mActiveSessions;
+    }
+
+    public void setActiveSessions(List<RoutingSessionInfo> infos) {
+        mActiveSessions = infos;
+    }
+
+    @Implementation
+    protected List<RoutingSessionInfo> getRoutingSessions(String packageName) {
+        return mRoutingSessions;
+    }
+
+    public void setRoutingSessions(List<RoutingSessionInfo> infos) {
+        mRoutingSessions = infos;
+    }
+
+    public static ShadowRouter2Manager getShadow() {
+        return (ShadowRouter2Manager) Shadow.extract(
+                MediaRouter2Manager.getInstance(RuntimeEnvironment.application));
+    }
+}
diff --git a/packages/SettingsProvider/res/values-af/strings.xml b/packages/SettingsProvider/res/values-af/strings.xml
index 8c2f8b3..24efbb6 100644
--- a/packages/SettingsProvider/res/values-af/strings.xml
+++ b/packages/SettingsProvider/res/values-af/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Instellingsberging"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Veranderings aan jou warmkolinstellings"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Jou warmkolband het verander."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Hierdie toestel steun nie jou voorkeur vir net 5 GHz nie. Hierdie toestel sal pleks daarvan die 5 GHz-band gebruik wanneer dit beskikbaar is."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Warmkolinstellings het verander"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Tik om besonderhede te sien"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-am/strings.xml b/packages/SettingsProvider/res/values-am/strings.xml
index 640301a..48fb705 100644
--- a/packages/SettingsProvider/res/values-am/strings.xml
+++ b/packages/SettingsProvider/res/values-am/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"በእርስዎ ሆትስፖት ቅንብሮች ላይ ለውጦች"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"የእርስዎ ሆትስፖት ባንድ ተለውጧል።"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"ይህ መሣሪያ የእርስዎን ምርጫ ለ5GHz ብቻ አይደግፍም። በምትኩ፣ ይህ መሣሪያ ሲገኝ 5GHz ባንድ ይጠቀማል።"</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-ar/strings.xml b/packages/SettingsProvider/res/values-ar/strings.xml
index 2675839..6371f2c 100644
--- a/packages/SettingsProvider/res/values-ar/strings.xml
+++ b/packages/SettingsProvider/res/values-ar/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"التغييرات التي طرأت على إعدادات نقطة الاتصال"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"تمّ تغيير نطاق نقطة الاتصال الخاصة بك."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"لا يتوافق هذا الجهاز مع إعدادك المفضّل الخاص باستخدام النطاق 5 غيغاهرتز فقط. وسيستخدم الجهاز بدلاً من ذلك النطاق 5 غيغاهرتز عندما يكون متاحًا."</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-as/strings.xml b/packages/SettingsProvider/res/values-as/strings.xml
index b70146a..5235e3c 100644
--- a/packages/SettingsProvider/res/values-as/strings.xml
+++ b/packages/SettingsProvider/res/values-as/strings.xml
@@ -20,7 +20,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="4567566098528588863">"ছেটিংছসমূহৰ সঞ্চয়াগাৰ"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"আপোনাৰ হটস্পট ছেটিংসমূহত হোৱা সালসলনিসমূহ"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"আপোনাৰ হটস্পটৰ বেণ্ড সলনি কৰা হৈছে।"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"আপোনাৰ কেৱল ৫ গিগাহাৰ্টজৰ প্ৰতি অগ্ৰাধিকাৰ এই ডিভাচইচটোৱে সমৰ্থন নকৰে। ইয়াৰ পৰিৱৰ্তে, ডিভাচইচটোৱে যেতিয়া ৫ গিগাহাৰ্টজ বেণ্ড উপলব্ধ হ’ব তেতিয়া তাক ব্যৱহাৰ কৰিব।"</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-az/strings.xml b/packages/SettingsProvider/res/values-az/strings.xml
index 8b4f75b..b0e8642 100644
--- a/packages/SettingsProvider/res/values-az/strings.xml
+++ b/packages/SettingsProvider/res/values-az/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Ayarlar Deposu"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Hotspot ayarlarınızda dəyişiklik"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Hotspot diapazonu dəyişib."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Bu cihaz yalnız 5GHz üçün tərcihinizi dəstəkləmir. Əvəzində, əlçatan olduqda bu cihaz 5GHz diapazonundan istifadə edəcək."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Hotspot ayarları dəyişib"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Detalları görmək üçün toxunun"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-b+sr+Latn/strings.xml b/packages/SettingsProvider/res/values-b+sr+Latn/strings.xml
index 9c3a00e..def4b68 100644
--- a/packages/SettingsProvider/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsProvider/res/values-b+sr+Latn/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Podešavanja skladišta"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Promene podešavanja za hotspot"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Opseg hotspota je promenjen."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Ovaj uređaj ne podržava podešavanje samo za 5 GHz. Uređaj će koristiti opseg od 5 GHz kada bude dostupan."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Podešavanja hotspota su promenjena"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Dodirnite da biste videli detalje"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-be/strings.xml b/packages/SettingsProvider/res/values-be/strings.xml
index 0e098e7..709178e 100644
--- a/packages/SettingsProvider/res/values-be/strings.xml
+++ b/packages/SettingsProvider/res/values-be/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"Змяненні ў наладах хот-спота"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Частата хот-спота змянілася."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Прылада не можа працаваць толькі на частаце 5 ГГц. Гэта частата будзе выкарыстоўвацца, калі гэта магчыма."</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-bg/strings.xml b/packages/SettingsProvider/res/values-bg/strings.xml
index 30526f2..b2eae73 100644
--- a/packages/SettingsProvider/res/values-bg/strings.xml
+++ b/packages/SettingsProvider/res/values-bg/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"Промени в настройките ви за точка за достъп"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Честотната лента на точката ви за достъп е променена."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Това устройство не поддържа предпочитанието ви за използване само на честотната лента от 5 ГХц. Вместо това то ще я ползва, когато е възможно."</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-bn/strings.xml b/packages/SettingsProvider/res/values-bn/strings.xml
index 8fc6bbb..c785cd8 100644
--- a/packages/SettingsProvider/res/values-bn/strings.xml
+++ b/packages/SettingsProvider/res/values-bn/strings.xml
@@ -20,7 +20,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="4567566098528588863">"সেটিংস স্টোরেজ"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"আপনার হটস্পট সেটিংসে করা পরিবর্তনগুলি"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"আপনার হটস্পট ব্যান্ড পরিবর্তন করা হয়েছে।"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"এই ডিভাইসটি শুধুমাত্র 5GHz এর জন্য আপনার পছন্দ সমর্থন করে না। পরিবর্তে, এই ডিভাইসটি 5GHz ব্যান্ড ব্যবহার করবে।"</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-bs/strings.xml b/packages/SettingsProvider/res/values-bs/strings.xml
index ddacb32..506fea2 100644
--- a/packages/SettingsProvider/res/values-bs/strings.xml
+++ b/packages/SettingsProvider/res/values-bs/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Postavke za pohranu podataka"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Promjene postavki pristupne tačke"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Opseg pristupne tačke je promijenjen."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Ovaj uređaj ne podržava vašu postavku za mreže od isključivo 5 GHz. Uređaj će koristiti opseg of 5 GHz kada bude dostupan."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Postavke pristupne tačke su promijenjene"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Dodirnite da vidite detalje"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-ca/strings.xml b/packages/SettingsProvider/res/values-ca/strings.xml
index 0c2ad73..58d3572e 100644
--- a/packages/SettingsProvider/res/values-ca/strings.xml
+++ b/packages/SettingsProvider/res/values-ca/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Configuració de l\'emmagatzematge"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Canvis en la configuració del punt d\'accés Wi‑Fi"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Ha canviat la teva banda del punt d\'accés Wi‑Fi."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Aquest dispositiu no admet utilitzar exclusivament una banda de 5 GHz. El dispositiu utilitzarà una banda de 5 GHz quan estigui disponible."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"La configuració del punt d\'accés Wi‑Fi ha canviat"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Toca per veure\'n els detalls"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-cs/strings.xml b/packages/SettingsProvider/res/values-cs/strings.xml
index ab474b1..449c632 100644
--- a/packages/SettingsProvider/res/values-cs/strings.xml
+++ b/packages/SettingsProvider/res/values-cs/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Paměť pro nastavení"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Změny nastavení hotspotu"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Pásmo hotspotu se změnilo."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Toto zařízení nepodporuje vaše nastavení jen 5GHz pásma. Zařízení použije pásmo 5 GHz, jen když bude dostupné."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Nastavení hotspotu se změnilo"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Klepnutím zobrazíte podrobnosti"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-da/strings.xml b/packages/SettingsProvider/res/values-da/strings.xml
index 719614c..278d978 100644
--- a/packages/SettingsProvider/res/values-da/strings.xml
+++ b/packages/SettingsProvider/res/values-da/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Lagring af indstillinger"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Ændringer af dine indstillinger for hotspot"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Dit hotspotbånd er ændret."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Denne enhed understøtter ikke din præference om kun 5 GHz. Denne enhed vil i stedet bruge 5 GHz-båndet, når det er muligt."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Indstillingerne for hotspots har ændret sig"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Tryk for at se flere oplysninger"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-de/strings.xml b/packages/SettingsProvider/res/values-de/strings.xml
index 6e253e0..a469936 100644
--- a/packages/SettingsProvider/res/values-de/strings.xml
+++ b/packages/SettingsProvider/res/values-de/strings.xml
@@ -20,7 +20,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="4567566098528588863">"Einstellungsspeicher"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Änderungen an deinen Hotspot-Einstellungen"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Dein Hotspot-Band hat sich geändert."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Dieses Gerät unterstützt die ausschließliche Nutzung von 5 GHz nicht. Es greift aber immer auf das 5-GHz-Band zurück, wenn dieses verfügbar ist."</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-el/strings.xml b/packages/SettingsProvider/res/values-el/strings.xml
index c47fea2..1bfbf27 100644
--- a/packages/SettingsProvider/res/values-el/strings.xml
+++ b/packages/SettingsProvider/res/values-el/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"Αλλαγές στις ρυθμίσεις σημείου πρόσβασης Wi-Fi"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Το εύρος σημείου πρόσβασης Wi-Fi άλλαξε."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Αυτή η συσκευή δεν υποστηρίζει την προτίμησή σας για αποκλειστική χρήση του εύρους 5 GHz. Αντ\' αυτού, αυτή η συσκευή θα χρησιμοποιεί το εύρος 5 GHz όταν είναι διαθέσιμο."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Οι ρυθμίσεις σημείου πρόσβασης Wi-Fi έχουν αλλάξει"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Πατήστε για προβολή λεπτομερειών."</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-en-rAU/strings.xml b/packages/SettingsProvider/res/values-en-rAU/strings.xml
index fac51d83..4e90cad 100644
--- a/packages/SettingsProvider/res/values-en-rAU/strings.xml
+++ b/packages/SettingsProvider/res/values-en-rAU/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Settings Storage"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Changes to your hotspot settings"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Your hotspot band has changed."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"This device doesn’t support your preference for 5 GHz only. Instead, this device will use the 5 GHz band when available."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Hotspot settings have changed"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Tap to see details"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-en-rCA/strings.xml b/packages/SettingsProvider/res/values-en-rCA/strings.xml
index fac51d83..4e90cad 100644
--- a/packages/SettingsProvider/res/values-en-rCA/strings.xml
+++ b/packages/SettingsProvider/res/values-en-rCA/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Settings Storage"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Changes to your hotspot settings"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Your hotspot band has changed."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"This device doesn’t support your preference for 5 GHz only. Instead, this device will use the 5 GHz band when available."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Hotspot settings have changed"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Tap to see details"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-en-rGB/strings.xml b/packages/SettingsProvider/res/values-en-rGB/strings.xml
index fac51d83..4e90cad 100644
--- a/packages/SettingsProvider/res/values-en-rGB/strings.xml
+++ b/packages/SettingsProvider/res/values-en-rGB/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Settings Storage"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Changes to your hotspot settings"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Your hotspot band has changed."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"This device doesn’t support your preference for 5 GHz only. Instead, this device will use the 5 GHz band when available."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Hotspot settings have changed"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Tap to see details"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-en-rIN/strings.xml b/packages/SettingsProvider/res/values-en-rIN/strings.xml
index fac51d83..4e90cad 100644
--- a/packages/SettingsProvider/res/values-en-rIN/strings.xml
+++ b/packages/SettingsProvider/res/values-en-rIN/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Settings Storage"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Changes to your hotspot settings"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Your hotspot band has changed."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"This device doesn’t support your preference for 5 GHz only. Instead, this device will use the 5 GHz band when available."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Hotspot settings have changed"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Tap to see details"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-en-rXC/strings.xml b/packages/SettingsProvider/res/values-en-rXC/strings.xml
index fbc348b..4ea5c57 100644
--- a/packages/SettingsProvider/res/values-en-rXC/strings.xml
+++ b/packages/SettingsProvider/res/values-en-rXC/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‎Settings Storage‎‏‎‎‏‎"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‏‏‎Changes to your hotspot settings‎‏‎‎‏‎"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‎‎Your hotspot band has changed.‎‏‎‎‏‎"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‎This device doesn’t support your preference for 5GHz only. Instead, this device will use the 5GHz band when available.‎‏‎‎‏‎"</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‏‎‏‎Hotspot settings have changed‎‏‎‎‏‎"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎Tap to see details‎‏‎‎‏‎"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-es-rUS/strings.xml b/packages/SettingsProvider/res/values-es-rUS/strings.xml
index af90257..4345b7a 100644
--- a/packages/SettingsProvider/res/values-es-rUS/strings.xml
+++ b/packages/SettingsProvider/res/values-es-rUS/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Almacenamiento de configuración"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Cambios en la configuración de tu hotspot"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Cambió la banda de tu hotspot."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Si bien este dispositivo no admite la opción para conectarse exclusivamente a bandas de 5 GHz, las usará cuando estén disponibles."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Se modificó la configuración de hotspot"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Presiona para obtener más información"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-es/strings.xml b/packages/SettingsProvider/res/values-es/strings.xml
index ff4ee38..3f1fa61 100644
--- a/packages/SettingsProvider/res/values-es/strings.xml
+++ b/packages/SettingsProvider/res/values-es/strings.xml
@@ -20,7 +20,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="4567566098528588863">"Almacenamiento de configuración"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Cambios en los ajustes del punto de acceso"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"La banda de tu punto de acceso ha cambiado."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Este dispositivo no admite la opción de conectarse únicamente a bandas de 5 GHz, pero las usará cuando estén disponibles."</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-et/strings.xml b/packages/SettingsProvider/res/values-et/strings.xml
index a0ec593..856ccf1 100644
--- a/packages/SettingsProvider/res/values-et/strings.xml
+++ b/packages/SettingsProvider/res/values-et/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Seadete talletusruum"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Muudatused teie kuumkoha seadetes"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Teie kuumkoha sagedusriba on muutunud."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"See seade ei toeta teie eelistatud ainult 5 GHz riba. Seade kasutab 5 GHz riba ainult siis, kui see on saadaval."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Kuumkoha seaded on muutunud"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Puudutage üksikasjade vaatamiseks"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-eu/strings.xml b/packages/SettingsProvider/res/values-eu/strings.xml
index 220b486..7ca91d8 100644
--- a/packages/SettingsProvider/res/values-eu/strings.xml
+++ b/packages/SettingsProvider/res/values-eu/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Ezarpenen biltegia"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Aldaketak egin dira sare publikoaren ezarpenetan"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Aldatu da sare publikoaren banda."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Gailuak ez du onartzen 5 GHz-ko banda soilik erabiltzeko hobespena. Horren ordez, erabilgarri dagoen bakoitzean erabiliko da 5 GHz-ko banda."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Sare publikoaren ezarpenak aldatu dira"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Sakatu hau xehetasunak ikusteko"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-fa/strings.xml b/packages/SettingsProvider/res/values-fa/strings.xml
index 6819d2f..cc0b557 100644
--- a/packages/SettingsProvider/res/values-fa/strings.xml
+++ b/packages/SettingsProvider/res/values-fa/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"تغییرات در تنظیمات نقطه اتصال"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"نوار نقطه اتصال شما تغییر کرد."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"این دستگاه از اولویت فقط ۵ گیگاهرتز شما پشتیبانی نمی‌کند. هرزمان نوار ۵ گیگاهرتزی دردسترس باشد، این دستگاه از آن استفاده خواهد کرد."</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-fi/strings.xml b/packages/SettingsProvider/res/values-fi/strings.xml
index 9ad01eb..829bb3b 100644
--- a/packages/SettingsProvider/res/values-fi/strings.xml
+++ b/packages/SettingsProvider/res/values-fi/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Asetuksien tallennus"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Hotspot-asetustesi muutokset"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Hotspot-taajuutesi on muuttunut."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Tämä laite ei tue asetustasi (vain 5 GHz). Sen sijaan laite käyttää 5 GHz:n taajuutta sen ollessa käytettävissä."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Hotspot-asetuksia on muutettu"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Katso lisätiedot napauttamalla"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-fr-rCA/strings.xml b/packages/SettingsProvider/res/values-fr-rCA/strings.xml
index 62951bd..d640845 100644
--- a/packages/SettingsProvider/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsProvider/res/values-fr-rCA/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Stockage des paramètres"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Modifications apportées à vos paramètres de point d\'accès"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"La bande de votre point d\'accès a changé."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Cet appareil ne prend pas en charge votre préférence pour la bande de 5 GHz seulement. Au lieu de cela, cet appareil utilisera la bande de 5 GHz lorsqu\'elle sera disponible."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Les paramètres de point d\'accès ont changé"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Touchez pour afficher les renseignements"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-fr/strings.xml b/packages/SettingsProvider/res/values-fr/strings.xml
index 56bc65b..ba6ec0b 100644
--- a/packages/SettingsProvider/res/values-fr/strings.xml
+++ b/packages/SettingsProvider/res/values-fr/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Stockage des paramètres"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Modifications apportées à vos paramètres de point d\'accès"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"La bande utilisée par votre point d\'accès a été modifiée."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Cet appareil n\'est pas conçu pour utiliser exclusivement la bande 5 GHz, mais il l\'utilisera chaque fois que disponible."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Les paramètres de point d\'accès ont changé"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Appuyer ici pour plus d\'infos"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-gl/strings.xml b/packages/SettingsProvider/res/values-gl/strings.xml
index 771fade..1be162e 100644
--- a/packages/SettingsProvider/res/values-gl/strings.xml
+++ b/packages/SettingsProvider/res/values-gl/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Almacenamento da configuración"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Cambios na configuración da zona wifi"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Modificouse a banda da zona wifi."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Este dispositivo non admite a opción de conectarse só a bandas de 5 GHz, pero usaraas se están dispoñibles."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"A configuración da zona wifi cambiou"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Toca a notificación para ver os detalles"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-gu/strings.xml b/packages/SettingsProvider/res/values-gu/strings.xml
index a561924..074675f 100644
--- a/packages/SettingsProvider/res/values-gu/strings.xml
+++ b/packages/SettingsProvider/res/values-gu/strings.xml
@@ -20,7 +20,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="4567566098528588863">"સેટિંગ્સ સંગ્રહ"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"તમારા હૉટસ્પૉટ સેટિંગને બદલે છે"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"તમારું હૉટસ્પૉટ બૅન્ડ બદલાઈ ગયું છે."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"આ ડિવાઇસ તમારી ફક્ત 5GHz માટેની પસંદગીને સપોર્ટ કરતું નથી. તેના બદલે, જ્યારે 5GHz બૅન્ડ ઉપલબ્ધ હશે ત્યારે આ ડિવાઇસ તેનો ઉપયોગ કરશે."</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-hi/strings.xml b/packages/SettingsProvider/res/values-hi/strings.xml
index 199a546..9441a59 100644
--- a/packages/SettingsProvider/res/values-hi/strings.xml
+++ b/packages/SettingsProvider/res/values-hi/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"आपकी हॉटस्पॉट की सेटिंग में किए गए बदलाव"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"आपका हॉटस्पॉट का बैंड बदल दिया गया है."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"इस डिवाइस पर आप \'सिर्फ़ 5 गीगाहर्ट्ज़\' वाला विकल्प नहीं चुन सकते. इसके बजाय, 5 गीगाहर्ट्ज़ बैंड उपलब्ध होने पर यह डिवाइस उसका इस्तेमाल करेगा."</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-hr/strings.xml b/packages/SettingsProvider/res/values-hr/strings.xml
index 9129a04..206f50f 100644
--- a/packages/SettingsProvider/res/values-hr/strings.xml
+++ b/packages/SettingsProvider/res/values-hr/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Postavke pohrane"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Promjene postavki vaše žarišne točke"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Promijenila se frekvencija vaše žarišne točke."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Ovaj uređaj ne podržava vašu postavku za upotrebu samo 5 GHz. Upotrebljavat će frekvenciju od 5 GHz kada je dostupna."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Promijenile su se postavke žarišne točke"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Dodirnite da biste vidjeli pojedinosti"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-hu/strings.xml b/packages/SettingsProvider/res/values-hu/strings.xml
index a1ed494..a7ca0d2 100644
--- a/packages/SettingsProvider/res/values-hu/strings.xml
+++ b/packages/SettingsProvider/res/values-hu/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Beállítástároló"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"A hotspot beállításainak módosítása"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"A hotspot sávja megváltozott."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Ez az eszköz nem támogatja a csak 5 GHz-es sávra vonatkozó beállítást. Az eszköz akkor használ 5 GHz-es sávot, ha a sáv rendelkezésre áll."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"A hotspot beállításai módosultak"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Koppintson a részletek megtekintéséhez"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-hy/strings.xml b/packages/SettingsProvider/res/values-hy/strings.xml
index 6d716f8..4fdb880 100644
--- a/packages/SettingsProvider/res/values-hy/strings.xml
+++ b/packages/SettingsProvider/res/values-hy/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"Փոփոխություններ թեժ կետի կարգավորումներում"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Ձեր թեժ կետի հաճախականությունը փոխվել է։"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Սարքը չի կարող աշխատել միայն 5 ԳՀց հաճախականությամբ։ Այդ հաճախականությունը կօգտագործվի հնարավորության դեպքում։"</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-in/strings.xml b/packages/SettingsProvider/res/values-in/strings.xml
index 8b1b1f4..911892b 100644
--- a/packages/SettingsProvider/res/values-in/strings.xml
+++ b/packages/SettingsProvider/res/values-in/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Setelan Penyimpanan"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Perubahan pada setelan hotspot Anda"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Band hotspot Anda telah berubah."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Perangkat ini tidak mendukung preferensi Anda, yaitu hanya 5GHz. Sebagai gantinya, perangkat ini akan menggunakan band 5GHz jika tersedia."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Setelan hotspot telah berubah"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Ketuk untuk melihat detail"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-is/strings.xml b/packages/SettingsProvider/res/values-is/strings.xml
index 150c084..c72442e 100644
--- a/packages/SettingsProvider/res/values-is/strings.xml
+++ b/packages/SettingsProvider/res/values-is/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Stillingageymsla"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Breytingar á stillingum heits reits"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Tíðnisvið heita reitsins hefur breyst."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Þetta tæki styður ekki val þitt fyrir aðeins 5 GHz. Í staðinn mun þetta tæki nota 5 GHz tíðnisvið þegar það er í boði."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Stillingum heits reits hefur verið breytt"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Ýttu til að sjá upplýsingar"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-it/strings.xml b/packages/SettingsProvider/res/values-it/strings.xml
index 6715c3c..0e11d06 100644
--- a/packages/SettingsProvider/res/values-it/strings.xml
+++ b/packages/SettingsProvider/res/values-it/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Memoria impostazioni"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Modifiche alle tue impostazioni dell\'hotspot"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"La banda dell\'hotspot è cambiata."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Questo dispositivo non supporta la tua preferenza esclusiva per 5 GHz. Utilizzerà la banda a 5 GHz solo quando è disponibile."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Le impostazioni di hotspot sono state modificate"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Tocca per vedere i dettagli"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-iw/strings.xml b/packages/SettingsProvider/res/values-iw/strings.xml
index dd44329..8d8594d 100644
--- a/packages/SettingsProvider/res/values-iw/strings.xml
+++ b/packages/SettingsProvider/res/values-iw/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"שינויים להגדרות של הנקודה לשיתוף אינטרנט"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"התדר של הנקודה לשיתוף אינטרנט השתנה."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"‏מכשיר זה לא תומך בהעדפות שלך ל-5GHz בלבד. במקום זאת, מכשיר זה ישתמש בתדר 5GHz כשיהיה זמין."</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-ja/strings.xml b/packages/SettingsProvider/res/values-ja/strings.xml
index 7bbcd46..5b91b2d 100644
--- a/packages/SettingsProvider/res/values-ja/strings.xml
+++ b/packages/SettingsProvider/res/values-ja/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"アクセス ポイントの設定の変更"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"アクセス ポイントの帯域幅が変更されました。"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"このデバイスは 5 GHz のみという設定に対応していません。ただし、5 GHz 周波数帯が利用できるときには利用します。"</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-ka/strings.xml b/packages/SettingsProvider/res/values-ka/strings.xml
index 86db4f3..70845ac 100644
--- a/packages/SettingsProvider/res/values-ka/strings.xml
+++ b/packages/SettingsProvider/res/values-ka/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"თქვენი უსადენო ქსელის პარამეტრების ცვლილება"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"თქვენი უსადენო ქსელის დიაპაზონი შეიცვალა."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"ამ მოწყობილობას არ შეუძლია მხოლოდ 5 გჰც სიხშირეზე მუშაობა. აღნიშნული სიხშირის გამოყენება მოხდება მაშინ, როცა ეს შესაძლებელია."</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-kk/strings.xml b/packages/SettingsProvider/res/values-kk/strings.xml
index a093d08..2823e4e 100644
--- a/packages/SettingsProvider/res/values-kk/strings.xml
+++ b/packages/SettingsProvider/res/values-kk/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"Хотспот параметрлеріне өзгерістер енгізілді"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Хотспот жолағы өзгертілді."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Бұл құрылғы тек 5 ГГц жиілікте жұмыс істей алмайды. Бұл жиілік мүмкін болған жағдайда ғана қолданылады."</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-km/strings.xml b/packages/SettingsProvider/res/values-km/strings.xml
index f0a2712..cdae410 100644
--- a/packages/SettingsProvider/res/values-km/strings.xml
+++ b/packages/SettingsProvider/res/values-km/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"ប្ដូរ​ទៅ​ការ​កំណត់​ហតស្ប៉ត​របស់អ្នក"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"កម្រិតបញ្ជូន​ហតស្ប៉ត​របស់​អ្នកបាន​ផ្លាស់ប្ដូរ។"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"ឧបករណ៍នេះ​មិនស្គាល់​ចំណូលចិត្ត​របស់អ្នក​សម្រាប់តែ 5GHz ប៉ុណ្ណោះ។ ផ្ទុយមកវិញ ឧបករណ៍នេះ​នឹងប្រើ​កម្រិតបញ្ជូន 5GHz នៅពេល​ដែលអាច​ប្រើបាន។"</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-kn/strings.xml b/packages/SettingsProvider/res/values-kn/strings.xml
index f2c1d5e..0b0000d 100644
--- a/packages/SettingsProvider/res/values-kn/strings.xml
+++ b/packages/SettingsProvider/res/values-kn/strings.xml
@@ -20,7 +20,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="4567566098528588863">"ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಸಂಗ್ರಹಣೆ"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"ನಿಮ್ಮ ಹಾಟ್‌ಸ್ಪಾಟ್‌ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿನ ಬದಲಾವಣೆಗಳು"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"ನಿಮ್ಮ ಹಾಟ್‌ಸ್ಪಾಟ್‌ ಬ್ಯಾಂಡ್ ಬದಲಾಗಿದೆ."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"ಈ ಸಾಧನವು 5GHz ಗೆ ಮಾತ್ರ ನಿಮ್ಮ ಆದ್ಯತೆಯನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ಬದಲಿಗೆ, ಈ ಸಾಧನವು 5GHz ಬ್ಯಾಂಡ್ ಅನ್ನು ಲಭ್ಯವಿರುವಾಗ ಬಳಸುತ್ತದೆ."</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-ko/strings.xml b/packages/SettingsProvider/res/values-ko/strings.xml
index 841832d..d76b766 100644
--- a/packages/SettingsProvider/res/values-ko/strings.xml
+++ b/packages/SettingsProvider/res/values-ko/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"핫스팟 설정 변경"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"핫스팟 대역이 변경되었습니다."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"이 기기에서는 5GHz 전용 환경설정이 지원되지 않습니다. 대신 가능할 때만 기기에서 5GHz 대역이 사용됩니다."</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-ky/strings.xml b/packages/SettingsProvider/res/values-ky/strings.xml
index 014c66c..e5b82c6 100644
--- a/packages/SettingsProvider/res/values-ky/strings.xml
+++ b/packages/SettingsProvider/res/values-ky/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"Байланыш түйүнүңүздүн жөндөөлөрү өзгөрүлдү"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Байланыш түйүнүңүздүн жыштыгы өзгөрдү."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Бул түзмөк 5ГГцти гана колдонуу жөндөөсүн колдоого албайт. Анын ордуна, бул түзмөк 5ГГц жыштыгын ал жеткиликтүү болгондо колдонот."</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-lo/strings.xml b/packages/SettingsProvider/res/values-lo/strings.xml
index 9d60ba1..c2b5df7 100644
--- a/packages/SettingsProvider/res/values-lo/strings.xml
+++ b/packages/SettingsProvider/res/values-lo/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"ການປ່ຽນແປງການຕັ້ງຄ່າຮັອດສະປອດຂອງທ່ານ"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"ຄື້ນຄວາມຖີ່ຮັອດສະປອດຂອງທ່ານປ່ຽນແປງແລ້ວ."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"ອຸປະກອນນີ້ບໍ່ຮອງຮັບການຕັ້ງຄ່າຂອງທ່ານສຳລັບ 5GHz ເທົ່ານັ້ນ. ແຕ່ວ່າອຸປະກອນນີ້ຈະໃຊ້ຄື້ນຄວາມຖີ່ 5GHz ເມື່ອສາມາດໃຊ້ໄດ້."</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-lt/strings.xml b/packages/SettingsProvider/res/values-lt/strings.xml
index 775d3b9..64f429b 100644
--- a/packages/SettingsProvider/res/values-lt/strings.xml
+++ b/packages/SettingsProvider/res/values-lt/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Nustatymų saugykla"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Viešosios interneto prieigos taško nustatymų pakeitimai"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Viešosios prieigos taško dažnio juosta pasikeitė."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Šiame įrenginyje nepalaikoma tik 5 GHz nuostata. Vietoj to šiame įrenginyje bus naudojama 5 GHz dažnio juosta, kai bus pasiekiama."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Buvo pakeisti viešosios interneto prieigos taško nustatymai"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Palieskite ir peržiūrėkite išsamią informaciją"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-lv/strings.xml b/packages/SettingsProvider/res/values-lv/strings.xml
index f7f3117..e5af8f7 100644
--- a/packages/SettingsProvider/res/values-lv/strings.xml
+++ b/packages/SettingsProvider/res/values-lv/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Iestatījumu krātuve"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Izmaiņas tīklāja iestatījumos"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Ir mainīts tīklāja joslas platums."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Šajā ierīcē netiek atbalstīta jūsu preference par tikai 5 GHz joslu. 5 GHz josla ierīcē tiks izmantota, kad tā būs pieejama."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Ir mainīti tīklāja iestatījumi"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Pieskarieties, lai skatītu detalizētāku informāciju."</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-mk/strings.xml b/packages/SettingsProvider/res/values-mk/strings.xml
index a245e5f..13ff8a2 100644
--- a/packages/SettingsProvider/res/values-mk/strings.xml
+++ b/packages/SettingsProvider/res/values-mk/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"Промени на поставките за точка на пристап"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Опсегот за точка на пристап е променет."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Уредов не ги поддржува вашите поставки за само 5 GHz. Наместо тоа, ќе го користи опсегот од 5 GHz кога е достапен."</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-ml/strings.xml b/packages/SettingsProvider/res/values-ml/strings.xml
index b63f20e..54a05fb 100644
--- a/packages/SettingsProvider/res/values-ml/strings.xml
+++ b/packages/SettingsProvider/res/values-ml/strings.xml
@@ -20,7 +20,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="4567566098528588863">"സംഭരണ ക്രമീകരണം"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"നിങ്ങളുടെ ഹോട്ട്‌സ്‌പോട്ട് ക്രമീകരണത്തിൽ വരുത്തിയ മാറ്റങ്ങൾ"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"നിങ്ങളുടെ ഹോട്ട്‌സ്‌പോട്ട് ബാൻഡ് മാറിയിരിക്കുന്നു."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"നിങ്ങളുടെ മുൻഗണനയനുസരിച്ചുള്ള, 5GHz മാത്രം എന്നത് ഈ ഉപകരണം പിന്തുണയ്ക്കുന്നില്ല. പകരം, 5GHz ബാൻഡ് ലഭ്യമാകുമ്പോൾ അത് ഉപയോഗിക്കും."</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-mn/strings.xml b/packages/SettingsProvider/res/values-mn/strings.xml
index c839177..a9c2e8c 100644
--- a/packages/SettingsProvider/res/values-mn/strings.xml
+++ b/packages/SettingsProvider/res/values-mn/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"Таны сүлжээний цэгийн тохиргооны өөрчлөлт"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Таны сүлжээний цэгийн хязгаарыг өөрчилсөн."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Энэ төхөөрөмж нь зөвхөн 5Гц гэсэн таны сонголтыг дэмждэггүй. Оронд нь энэ төхөөрөмж 5Гц-н хязгаарыг боломжтой үед нь ашиглах болно."</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-mr/strings.xml b/packages/SettingsProvider/res/values-mr/strings.xml
index 0c7041e..0e80f70 100644
--- a/packages/SettingsProvider/res/values-mr/strings.xml
+++ b/packages/SettingsProvider/res/values-mr/strings.xml
@@ -20,7 +20,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="4567566098528588863">"सेटिंग्ज संचयन"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"तुमच्या हॉटस्पॉट सेटिंग्जमधील बदल"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"तुमचा हॉटस्पॉट बँड बदलला गेला आहे."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"हे डिव्हाइस फक्त ५GHz च्या तुमच्या प्राधान्याला सपोर्ट करत नाही. त्याऐवजी, उपलब्ध असेल तेव्हा हे डिव्हाइस ५GHz बँड वापरेल."</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-ms/strings.xml b/packages/SettingsProvider/res/values-ms/strings.xml
index a1574df..51a8f2b 100644
--- a/packages/SettingsProvider/res/values-ms/strings.xml
+++ b/packages/SettingsProvider/res/values-ms/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Storan Tetapan"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Perubahan kepada tetapan tempat liputan anda"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Jalur tempat liputan anda telah berubah."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Peranti ini tidak menyokong pilihan anda untuk 5GHz sahaja. Sebaliknya, peranti ini akan menggunakan jalur 5GHz apabila tersedia."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Tetapan tempat liputan telah berubah"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Ketik untuk melihat butiran"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-my/strings.xml b/packages/SettingsProvider/res/values-my/strings.xml
index 48d4dba..dc9f531 100644
--- a/packages/SettingsProvider/res/values-my/strings.xml
+++ b/packages/SettingsProvider/res/values-my/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"သင်၏ဟော့စပေါ့ ဆက်တင်များ ပြောင်းလဲမှု"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"သင်၏ ဟော့စပေါ့လိုင်း ပြောင်းသွားပါပြီ။"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"ဤစက်ပစ္စည်းသည် သင်၏ 5GHz သီးသန့်ရွေးချယ်မှုအတွက် ပံ့ပိုးမထားပါ။ ၎င်းအစား ဤစက်ပစ္စည်းသည် ရနိုင်သည့်အခါ 5GHz လိုင်းကို သုံးသွားပါမည်။"</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-nb/strings.xml b/packages/SettingsProvider/res/values-nb/strings.xml
index e0cbd7e..3bdaf83 100644
--- a/packages/SettingsProvider/res/values-nb/strings.xml
+++ b/packages/SettingsProvider/res/values-nb/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Lagring av innstillinger"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Endres til innstillingene dine for Wi-Fi-soner"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Båndet ditt for Wi-Fi-sone er endret."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Denne enheten støtter ikke innstillingen din for bare 5 GHz. I stedet bruker enheten 5 GHz-båndet når det er tilgjengelig."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Innstillingene for Wi-Fi-sone er endret"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Trykk for å se detaljer"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-ne/strings.xml b/packages/SettingsProvider/res/values-ne/strings.xml
index 2fd9b00..bb04b6ba 100644
--- a/packages/SettingsProvider/res/values-ne/strings.xml
+++ b/packages/SettingsProvider/res/values-ne/strings.xml
@@ -20,7 +20,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="4567566098528588863">"सेटिङहरू भण्डारण"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"तपाईंका हटस्पट सेटिङहरूमा गरिएका परिवर्तनहरू"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"तपाईंको हटस्पट ब्यान्ड परिवर्तन भएको छ।"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"यो यन्त्रले तपाईंको 5GHz मात्रको प्राथमिकतालाई समर्थन गर्दैन। बरु, उपलब्ध भएको खण्डमा यो यन्त्रले 5GHz ब्यान्ड प्रयोग गर्ने छ।"</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-nl/strings.xml b/packages/SettingsProvider/res/values-nl/strings.xml
index 0b843ae..91b8542 100644
--- a/packages/SettingsProvider/res/values-nl/strings.xml
+++ b/packages/SettingsProvider/res/values-nl/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Opslagruimte voor instellingen"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Wijzigingen in je hotspot-instellingen"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Je hotspot-band is gewijzigd."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Dit apparaat biedt geen ondersteuning voor je voorkeur voor alleen 5 GHz. In plaats daarvan gebruikt dit apparaat de 5-GHz-band wanneer deze beschikbaar is."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Hotspot-instellingen zijn gewijzigd"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Tik voor meer informatie"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-or/strings.xml b/packages/SettingsProvider/res/values-or/strings.xml
index 53f6104..4b73a55 100644
--- a/packages/SettingsProvider/res/values-or/strings.xml
+++ b/packages/SettingsProvider/res/values-or/strings.xml
@@ -20,7 +20,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="4567566098528588863">"ସେଟିଙ୍ଗ ଷ୍ଟୋରେଜ୍‌"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"ଆପଣଙ୍କର ହଟ୍‌ସ୍ପଟ୍ ସେଟିଂସ୍‌କୁ ବଦଳାଇଥାଏ"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"ଆପଣଙ୍କର ହଟ୍‌ସ୍ପଟ୍ ପରିବର୍ତ୍ତନ କରାଯାଇଛି।"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"କେବଳ 5GHz ପାଇଁ, ଏହି ଡିଭାଇସ୍ ଆପଣଙ୍କର ପସନ୍ଦକୁ ସମର୍ଥନ କରେ ନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ, ଉପଲବ୍ଧ ହେଲେ ଏହି ଡିଭାଇସ୍ 5GHz ବ୍ୟାଣ୍ଡ ବ୍ୟବହାର କରିବ।"</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-pa/strings.xml b/packages/SettingsProvider/res/values-pa/strings.xml
index 9a41e36..5af8d6a 100644
--- a/packages/SettingsProvider/res/values-pa/strings.xml
+++ b/packages/SettingsProvider/res/values-pa/strings.xml
@@ -20,7 +20,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="4567566098528588863">"ਸੈਟਿੰਗਾਂ ਸਟੋਰੇਜ"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"ਤੁਹਾਡੀਆਂ ਹੌਟਸਪੌਟ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਬਦਲਾਅ"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"ਤੁਹਾਡਾ ਹੌਟਸਪੌਟ ਬੈਂਡ ਬਦਲ ਗਿਆ ਹੈ।"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"ਇਹ ਡੀਵਾਈਸ ਸਿਰਫ਼ 5GHz ਦੀ ਤੁਹਾਡੀ ਤਰਜੀਹ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ ਹੈ। ਇਸਦੀ ਬਜਾਏ, ਇਹ ਡੀਵਾਈਸ ਉਪਲਬਧ ਹੋਣ \'ਤੇ 5GHz ਬੈਂਡ ਵਰਤੇਗਾ।"</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-pl/strings.xml b/packages/SettingsProvider/res/values-pl/strings.xml
index 7fd2b13..d86fc4d 100644
--- a/packages/SettingsProvider/res/values-pl/strings.xml
+++ b/packages/SettingsProvider/res/values-pl/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Pamięć ustawień"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Zmieniono ustawienia hotspotu"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Zmieniono pasmo hotspotu."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"To urządzenie nie może korzystać tylko z częstotliwości 5 GHz. Będzie korzystać z tego pasma, jeśli będzie ono dostępne."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Ustawienia hotspotu zostały zmienione"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Kliknij, by zobaczyć szczegóły"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-pt-rBR/strings.xml b/packages/SettingsProvider/res/values-pt-rBR/strings.xml
index 18db8f6..a860018 100644
--- a/packages/SettingsProvider/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsProvider/res/values-pt-rBR/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Armazenamento de configurações"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Mudanças nas suas configurações de ponto de acesso"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Sua banda de ponto de acesso foi modificada."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Este dispositivo não é compatível com sua preferência apenas por 5 GHz. Em vez disso, o dispositivo usará a banda de 5 GHz quando ela estiver disponível."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"As configurações de ponto de acesso mudaram"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Toque para ver os detalhes"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-pt-rPT/strings.xml b/packages/SettingsProvider/res/values-pt-rPT/strings.xml
index be88cce..a8a8e07 100644
--- a/packages/SettingsProvider/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsProvider/res/values-pt-rPT/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Armazenamento de definições"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Alterações às definições de zona Wi-Fi"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"A banda da sua zona Wi-Fi foi alterada."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Este dispositivo não suporta a sua preferência apenas para 5 GHz. Em alternativa, este dispositivo vai utilizar a banda de 5 GHz quando estiver disponível."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"As definições da zona Wi-Fi foram alteradas"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Toque para ver os detalhes."</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-pt/strings.xml b/packages/SettingsProvider/res/values-pt/strings.xml
index 18db8f6..a860018 100644
--- a/packages/SettingsProvider/res/values-pt/strings.xml
+++ b/packages/SettingsProvider/res/values-pt/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Armazenamento de configurações"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Mudanças nas suas configurações de ponto de acesso"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Sua banda de ponto de acesso foi modificada."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Este dispositivo não é compatível com sua preferência apenas por 5 GHz. Em vez disso, o dispositivo usará a banda de 5 GHz quando ela estiver disponível."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"As configurações de ponto de acesso mudaram"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Toque para ver os detalhes"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-ro/strings.xml b/packages/SettingsProvider/res/values-ro/strings.xml
index 3a234e1..561a213 100644
--- a/packages/SettingsProvider/res/values-ro/strings.xml
+++ b/packages/SettingsProvider/res/values-ro/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Stocare setări"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Modificări aduse setărilor pentru hotspot"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"S-a schimbat banda de frecvență a hotspotului."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Dispozitivul nu acceptă doar preferința pentru 5 GHz. Dispozitivul va folosi banda de 5 GHz când este disponibilă."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Setările hotspotului s-au modificat"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Atingeți pentru detalii"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-ru/strings.xml b/packages/SettingsProvider/res/values-ru/strings.xml
index 184afdd..331fae1 100644
--- a/packages/SettingsProvider/res/values-ru/strings.xml
+++ b/packages/SettingsProvider/res/values-ru/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"Изменения в настройках точки доступа"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Частота точки доступа изменена."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Устройство не может работать только на частоте 5 ГГц. Эта частота будет использоваться, когда это возможно."</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-si/strings.xml b/packages/SettingsProvider/res/values-si/strings.xml
index 69e04f1..a9c4d0b 100644
--- a/packages/SettingsProvider/res/values-si/strings.xml
+++ b/packages/SettingsProvider/res/values-si/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"ඔබගේ හොට්ස්පොට් සැකසීම්වලට වෙනස් කිරීම්"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"ඔබගේ හොට්ස්පොට් කලාපය වෙනස් වී ඇත."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"මෙම උපාංගය 5GHz සඳහා ඔබේ මනාපවලට සහාය නොදක්වයි. ඒ වෙනුවට, මෙම උපාංගය ලබා ගත හැකි විට 5GHz කලාපය භාවිතා කරනු ඇත."</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-sk/strings.xml b/packages/SettingsProvider/res/values-sk/strings.xml
index a53178d..5712d05 100644
--- a/packages/SettingsProvider/res/values-sk/strings.xml
+++ b/packages/SettingsProvider/res/values-sk/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Ukladací priestor nastavení"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Zmeny nastavení hotspotu"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Pásmo vášho hotspotu sa zmenilo."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Toto zariadenie nepodporuje vašu predvoľbu používať iba 5 GHz. Namiesto toho bude pásmo 5 GHz používať vtedy, keď bude k dispozícii."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Nastavenia hotspotu boli zmenené"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Klepnutím zobrazíte podrobnosti"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-sl/strings.xml b/packages/SettingsProvider/res/values-sl/strings.xml
index ea697fe..4e265fb 100644
--- a/packages/SettingsProvider/res/values-sl/strings.xml
+++ b/packages/SettingsProvider/res/values-sl/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Shramba nastavitev"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Spremembe nastavitev dostopne točke"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Pas dostopne točke je spremenjen."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Ta naprava ne podpira prednostne nastavitve samo za 5-GHz pas. Namesto tega bo ta naprava uporabljala 5-GHz pas, ko bo na voljo."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Nastavitve dostopne ročke so spremenjene"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Dotaknite se za ogled podrobnosti"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-sq/strings.xml b/packages/SettingsProvider/res/values-sq/strings.xml
index a111576..8bbe2e7 100644
--- a/packages/SettingsProvider/res/values-sq/strings.xml
+++ b/packages/SettingsProvider/res/values-sq/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Hapësira ruajtëse e \"Cilësimeve\""</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Ndryshimet në cilësimet e zonës së qasjes për internet"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Brezi yt i zonës së qasjes për internet ka ndryshuar."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Kjo pajisje nuk e mbështet preferencën për vetëm 5 GHz. Përkundrazi, pajisja do të përdorë brezin 5 GHz nëse ka."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Cilësimet e zonës së qasjes për internet kanë ndryshuar"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Trokit për të parë detajet"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-sr/strings.xml b/packages/SettingsProvider/res/values-sr/strings.xml
index d473102..4d05762 100644
--- a/packages/SettingsProvider/res/values-sr/strings.xml
+++ b/packages/SettingsProvider/res/values-sr/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"Промене подешавања за хотспот"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Опсег хотспота је промењен."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Овај уређај не подржава подешавање само за 5 GHz. Уређај ће користити опсег од 5 GHz када буде доступан."</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-sv/strings.xml b/packages/SettingsProvider/res/values-sv/strings.xml
index fea3e5e..5ee4703 100644
--- a/packages/SettingsProvider/res/values-sv/strings.xml
+++ b/packages/SettingsProvider/res/values-sv/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Lagring av inställningar"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Ändringar i inställningarna för surfzon"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Frekvensbandet för surfzonen har ändrats."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Den här enheten har inte stöd för inställningen för att endast använda 5 GHz. I stället används 5 GHz när det är möjligt."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Inställningarna för surfzon har ändrats"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Tryck här för mer information"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-sw/strings.xml b/packages/SettingsProvider/res/values-sw/strings.xml
index 4d05817..59f82a9 100644
--- a/packages/SettingsProvider/res/values-sw/strings.xml
+++ b/packages/SettingsProvider/res/values-sw/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Hifadhi ya Mipangilio"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Mabadiliko kwenye mipangilio ya mtandaopepe"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Bendi ya mtandaopepe wako imebadilika."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Kifaa hiki hakitumii mapendeleo yako ya GHz 5 pekee. Badala yake, kifaa hiki kitatumia bendi ya GHz 5 itakapopatikana."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Mipangilio ya mtandaopepe imebadilika"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Gusa ili uangalie maelezo"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-ta/strings.xml b/packages/SettingsProvider/res/values-ta/strings.xml
index f518a78..fa6b8cd 100644
--- a/packages/SettingsProvider/res/values-ta/strings.xml
+++ b/packages/SettingsProvider/res/values-ta/strings.xml
@@ -20,7 +20,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="4567566098528588863">"அமைப்புகளின் சேமிப்பிடம்"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"உங்கள் ஹாட்ஸ்பாட் அமைப்புகளில் செய்யப்பட்டுள்ள மாற்றங்கள்"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"உங்கள் ஹாட்ஸ்பாட்டின் அலைவரிசை வரம்பு மாறிவிட்டது."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"இந்தச் சாதனத்தில், ’5GHz மட்டும்’ எனும் முன்னுரிமைத் தேர்வு ஆதரிக்கப்படவில்லை. எனினும் 5GHz அலைவரிசை வரம்பிற்குள் இருக்கும்போது சாதனம் அதைப் பயன்படுத்திக்கொள்ளும்."</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-te/strings.xml b/packages/SettingsProvider/res/values-te/strings.xml
index 6c59223..b1955ed 100644
--- a/packages/SettingsProvider/res/values-te/strings.xml
+++ b/packages/SettingsProvider/res/values-te/strings.xml
@@ -20,7 +20,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="4567566098528588863">"సెట్టింగ్‌ల నిల్వ"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"మీ హాట్‌స్పాట్ సెట్టింగ్‌లకు మార్పులు"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"మీ హాట్‌స్పాట్ బ్యాండ్ మార్చబడింది."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"ఈ పరికరం 5GHz కోసం మాత్రమే మీ ప్రాధాన్యతకు మద్దతు ఇవ్వదు. బదులుగా, ఈ పరికరం అందుబాటులో ఉన్నప్పుడు 5GHz బ్యాండ్‌ను ఉపయోగిస్తుంది."</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-th/strings.xml b/packages/SettingsProvider/res/values-th/strings.xml
index 4bf148f..ed63174 100644
--- a/packages/SettingsProvider/res/values-th/strings.xml
+++ b/packages/SettingsProvider/res/values-th/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"มีการเปลี่ยนแปลงการตั้งค่าฮอตสปอต"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"ย่านความถี่ฮอตสปอตมีการเปลี่ยนแปลง"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"อุปกรณ์นี้ไม่รองรับค่ากำหนดของคุณเฉพาะสำหรับ 5 GHz เท่านั้น และจะใช้ย่านความถี่ 5 GHz แทน เมื่อใช้ได้"</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-tl/strings.xml b/packages/SettingsProvider/res/values-tl/strings.xml
index 2a36d58..3d6be40 100644
--- a/packages/SettingsProvider/res/values-tl/strings.xml
+++ b/packages/SettingsProvider/res/values-tl/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Storage ng Mga Setting"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Mga pagbabago sa mga setting ng iyong hotspot"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Nagbago ang band ng iyong hotspot."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Hindi sinusuportahan ng device na ito ang kagustuhan mong gumamit lang ng 5GHz. Sa halip, gagamitin ng device na ito ang 5GHz na band kapag available."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Nabago ang mga setting ng hotspot"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"I-tap para makita ang mga detalye"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-tr/strings.xml b/packages/SettingsProvider/res/values-tr/strings.xml
index add1fdb..75e908f 100644
--- a/packages/SettingsProvider/res/values-tr/strings.xml
+++ b/packages/SettingsProvider/res/values-tr/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Ayarlar Deposu"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Hotspot ayarlarınız değişti"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Hotspot bandınız değişti."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Bu cihaz yalnızca 5 GHz bandının kullanılmasına yönelik tercihinizi desteklemiyor. Bunun yerine, bu cihaz 5 GHz bandını mevcut olduğunda kullanacak."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Hotspot ayarları değişti"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Ayrıntıları görmek için dokunun"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-uk/strings.xml b/packages/SettingsProvider/res/values-uk/strings.xml
index cd678bc..2dbb360 100644
--- a/packages/SettingsProvider/res/values-uk/strings.xml
+++ b/packages/SettingsProvider/res/values-uk/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"Зміни в налаштуваннях точки доступу"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Діапазон частот точки доступу змінено."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"На цьому пристрої не підтримується налаштування \"Лише 5 ГГц\". Натомість буде використано діапазон частот 5 ГГц (якщо доступно)."</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-ur/strings.xml b/packages/SettingsProvider/res/values-ur/strings.xml
index 2241ce9..2ce44b1 100644
--- a/packages/SettingsProvider/res/values-ur/strings.xml
+++ b/packages/SettingsProvider/res/values-ur/strings.xml
@@ -20,7 +20,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="4567566098528588863">"ترتیبات کا اسٹوریج"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"اپنے ہاٹ اسپاٹ کی ترتیبات میں تبدیلیاں"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"آپ کا ہاٹ اسپات بینڈ تبدیل ہو گیا ہے۔"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"‏یہ آلہ صرف 5GHz کے لیے آپ کی ترجیح کو سپورٹ نہیں کرے گا۔ بلکہ 5GHz بینڈ کے دستیاب ہونے پر اس کا استعمال کرے گا۔"</string>
+    <!-- no translation found for wifi_softap_config_change (5688373762357941645) -->
+    <skip />
+    <!-- no translation found for wifi_softap_config_change_summary (8946397286141531087) -->
+    <skip />
 </resources>
diff --git a/packages/SettingsProvider/res/values-uz/strings.xml b/packages/SettingsProvider/res/values-uz/strings.xml
index a266bf0..bb6e22e 100644
--- a/packages/SettingsProvider/res/values-uz/strings.xml
+++ b/packages/SettingsProvider/res/values-uz/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Sozlamalar xotirasi"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Hotspot sozlamalari o‘zgartirildi"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Hotspot chastotasi oʻzgartirildi."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Qurilma faqat 5 GGs chastotada ishlay olmaydi. Bu chastotadan imkoniyatga qarab foydalaniladi."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Hotspot sozlamalari oʻzgardi"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Tafsilotlar uchun bosing"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-vi/strings.xml b/packages/SettingsProvider/res/values-vi/strings.xml
index 74f93b2..4608983 100644
--- a/packages/SettingsProvider/res/values-vi/strings.xml
+++ b/packages/SettingsProvider/res/values-vi/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Lưu trữ bộ nhớ"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Những thay đổi trong mục cài đặt điểm phát sóng của bạn"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Bằng tần của điểm phát sóng đã thay đổi."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Thiết bị này không hỗ trợ tùy chọn chỉ sử dụng băng tần 5 GHz. Thay vào đó, thiết bị này sẽ sử dụng băng tần 5 GHz khi có thể."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Đã thay đổi các tùy chọn cài đặt điểm phát sóng"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Nhấn để xem chi tiết"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-zh-rCN/strings.xml b/packages/SettingsProvider/res/values-zh-rCN/strings.xml
index 95b15e0..a08afc8 100644
--- a/packages/SettingsProvider/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsProvider/res/values-zh-rCN/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"您的热点设置已变更"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"您的热点频段已变更。"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"此设备不支持您的偏好设置(仅限 5GHz),而且会在 5GHz 频段可用时使用该频段。"</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-zh-rHK/strings.xml b/packages/SettingsProvider/res/values-zh-rHK/strings.xml
index 41ebe27..fb91dbb 100644
--- a/packages/SettingsProvider/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsProvider/res/values-zh-rHK/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"您的熱點設定變更"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"您的熱點頻段已變更。"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"此裝置不支援只限 5 GHz 的偏好設定,但會在 5 GHz 頻段可用時採用。"</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-zh-rTW/strings.xml b/packages/SettingsProvider/res/values-zh-rTW/strings.xml
index d0a30f5..1b8fcb2 100644
--- a/packages/SettingsProvider/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsProvider/res/values-zh-rTW/strings.xml
@@ -20,7 +20,6 @@
 <resources 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="wifi_softap_config_change" msgid="5338670993556993667">"無線基地台設定變更"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"你的無線基地台頻帶已變更。"</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"這部裝置不支援你的偏好設定 (僅限 5GHz),而是會在 5GHz 可用時使用該頻帶。"</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-zu/strings.xml b/packages/SettingsProvider/res/values-zu/strings.xml
index 0440b3b..dad24b4 100644
--- a/packages/SettingsProvider/res/values-zu/strings.xml
+++ b/packages/SettingsProvider/res/values-zu/strings.xml
@@ -20,7 +20,6 @@
 <resources 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">"Izilungiselelo zesitoreji"</string>
-    <string name="wifi_softap_config_change" msgid="5338670993556993667">"Ushintsho kuzilungiselelo zakho ze-hotspot"</string>
-    <string name="wifi_softap_config_change_summary" msgid="7600005249167787750">"Ibhendi yakho ye-hotspot ishintshile."</string>
-    <string name="wifi_softap_config_change_detailed" msgid="2504664754843959730">"Le divayisi ayisekeli okuncamelayo kwe-5GHz kuphela. Kunalokho, le divayisi izosebenzisa ibhendi ye-5GHz uma itholakala."</string>
+    <string name="wifi_softap_config_change" msgid="5688373762357941645">"Izilungiselelo ze-Hotspot zishintshile"</string>
+    <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Thepha ukuze ubone imininingwane"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values/strings.xml b/packages/SettingsProvider/res/values/strings.xml
index 3787727..76bea31 100644
--- a/packages/SettingsProvider/res/values/strings.xml
+++ b/packages/SettingsProvider/res/values/strings.xml
@@ -23,15 +23,10 @@
     <!-- A notification is shown when the user's softap config has been changed due to underlying
      hardware restrictions. This is the notifications's title.
      [CHAR_LIMIT=NONE] -->
-    <string name="wifi_softap_config_change">Changes to your hotspot settings</string>
+    <string name="wifi_softap_config_change">Hotspot settings have changed</string>
 
     <!-- A notification is shown when the user's softap config has been changed due to underlying
          hardware restrictions. This is the notification's summary message.
          [CHAR_LIMIT=NONE] -->
-    <string name="wifi_softap_config_change_summary">Your hotspot band has changed.</string>
-
-    <!-- A notification is shown when the user's softap config has been changed due to underlying
-         hardware restrictions. This is the notification's full message.
-         [CHAR_LIMIT=NONE] -->
-    <string name="wifi_softap_config_change_detailed">This device doesn\u2019t support your preference for 5GHz only. Instead, this device will use the 5GHz band when available.</string>
+    <string name="wifi_softap_config_change_summary">Tap to see details</string>
 </resources>
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
index de4817c..2431381 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
@@ -37,6 +37,7 @@
         Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
         Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
         Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED,
+        Settings.Secure.ADAPTIVE_SLEEP,
         Settings.Secure.AUTOFILL_SERVICE,
         Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
         Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java
index 3f5b0da..c4330e1 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java
@@ -46,7 +46,7 @@
         Settings.System.SCREEN_BRIGHTNESS_MODE,
         Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ,
         Settings.System.SCREEN_BRIGHTNESS_FOR_VR,
-        Settings.System.ADAPTIVE_SLEEP,
+        Settings.System.ADAPTIVE_SLEEP,             // moved to secure
         Settings.System.VIBRATE_INPUT_DEVICES,
         Settings.System.MODE_RINGER_STREAMS_AFFECTED,
         Settings.System.TEXT_AUTO_REPLACE,
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
index 849f22f..5553469 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
@@ -59,6 +59,7 @@
         VALIDATORS.put(Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, BOOLEAN_VALIDATOR);
         VALIDATORS.put(
                 Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, BOOLEAN_VALIDATOR);
+        VALIDATORS.put(Secure.ADAPTIVE_SLEEP, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Secure.AUTOFILL_SERVICE, NULLABLE_COMPONENT_NAME_VALIDATOR);
         VALIDATORS.put(
                 Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
index 78b9f16..d677687 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
@@ -1813,6 +1813,12 @@
                 SecureSettingsProto.Accessibility.ACCESSIBILITY_MAGNIFICATION_MODE);
         p.end(accessibilityToken);
 
+        final long adaptiveSleepToken = p.start(SecureSettingsProto.ADAPTIVE_SLEEP);
+        dumpSetting(s, p,
+                Settings.Secure.ADAPTIVE_SLEEP,
+                SecureSettingsProto.AdaptiveSleep.ENABLED);
+        p.end(adaptiveSleepToken);
+
         dumpSetting(s, p,
                 Settings.Secure.ALLOWED_GEOLOCATION_ORIGINS,
                 SecureSettingsProto.ALLOWED_GEOLOCATION_ORIGINS);
@@ -2727,6 +2733,12 @@
         dumpSetting(s, p,
                 Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ,
                 SystemSettingsProto.Screen.AUTO_BRIGHTNESS_ADJ);
+        dumpSetting(s, p,
+                Settings.System.SCREEN_BRIGHTNESS_FLOAT,
+                SystemSettingsProto.Screen.BRIGHTNESS_FLOAT);
+        dumpSetting(s, p,
+                Settings.System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT,
+                SystemSettingsProto.Screen.BRIGHTNESS_FOR_VR_FLOAT);
         p.end(screenToken);
 
         dumpSetting(s, p,
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index c969bfd..aad46e9 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -2193,7 +2193,7 @@
         if (prefix == null) {
             return;
         }
-        String callingPackage = getCallingPackage();
+        String callingPackage = resolveCallingPackage();
         String namespace = prefix.replace("/", "");
         if (DeviceConfig.getPublicNamespaces().contains(namespace)) {
             return;
@@ -3426,7 +3426,7 @@
         }
 
         private final class UpgradeController {
-            private static final int SETTINGS_VERSION = 187;
+            private static final int SETTINGS_VERSION = 188;
 
             private final int mUserId;
 
@@ -4732,6 +4732,23 @@
                     currentVersion = 187;
                 }
 
+                if (currentVersion == 187) {
+                    // Migrate adaptive sleep setting from System to Secure.
+                    if (userId == UserHandle.USER_OWNER) {
+                        // Remove from the system settings.
+                        SettingsState systemSettings = getSystemSettingsLocked(userId);
+                        String name = Settings.System.ADAPTIVE_SLEEP;
+                        Setting setting = systemSettings.getSettingLocked(name);
+                        systemSettings.deleteSettingLocked(name);
+
+                        // Add to the secure settings.
+                        SettingsState secureSettings = getSecureSettingsLocked(userId);
+                        secureSettings.insertSettingLocked(name, setting.getValue(), null /* tag */,
+                                false /* makeDefault */, SettingsState.SYSTEM_PACKAGE_NAME);
+                    }
+                    currentVersion = 188;
+                }
+
                 // vXXX: Add new settings above this point.
 
                 if (currentVersion != newVersion) {
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/WifiSoftApConfigChangedNotifier.java b/packages/SettingsProvider/src/com/android/providers/settings/WifiSoftApConfigChangedNotifier.java
index 1ee5f90..ca841a5 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/WifiSoftApConfigChangedNotifier.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/WifiSoftApConfigChangedNotifier.java
@@ -57,7 +57,6 @@
         Resources resources = context.getResources();
         CharSequence title = resources.getText(R.string.wifi_softap_config_change);
         CharSequence contentSummary = resources.getText(R.string.wifi_softap_config_change_summary);
-        CharSequence content = resources.getText(R.string.wifi_softap_config_change_detailed);
         int color = resources.getColor(
                 android.R.color.system_notification_accent_color, context.getTheme());
 
@@ -73,7 +72,6 @@
                 .setLocalOnly(true)
                 .setColor(color)
                 .setStyle(new Notification.BigTextStyle()
-                        .bigText(content)
                         .setBigContentTitle(title)
                         .setSummaryText(contentSummary))
                 .setAutoCancel(true)
diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
index dee1d7e..4dc372a 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -99,7 +99,9 @@
                     Settings.System.WHEN_TO_MAKE_WIFI_CALLS, // bug?
                     Settings.System.WINDOW_ORIENTATION_LISTENER_LOG, // used for debugging only
                     Settings.System.MIN_REFRESH_RATE, // depends on hardware capabilities
-                    Settings.System.PEAK_REFRESH_RATE // depends on hardware capabilities
+                    Settings.System.PEAK_REFRESH_RATE, // depends on hardware capabilities
+                    Settings.System.SCREEN_BRIGHTNESS_FLOAT,
+                    Settings.System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT
                     );
 
     private static final Set<String> BACKUP_BLACKLISTED_GLOBAL_SETTINGS =
@@ -577,7 +579,8 @@
                     Settings.Global.MODEM_STACK_ENABLED_FOR_SLOT,
                     Settings.Global.POWER_BUTTON_LONG_PRESS,
                     Settings.Global.POWER_BUTTON_VERY_LONG_PRESS,
-                    Settings.Global.INTEGRITY_CHECK_INCLUDES_RULE_PROVIDER);
+                    Settings.Global.INTEGRITY_CHECK_INCLUDES_RULE_PROVIDER,
+                    Settings.Global.ADVANCED_BATTERY_USAGE_AMOUNT);
 
     private static final Set<String> BACKUP_BLACKLISTED_SECURE_SETTINGS =
              newHashSet(
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index 1d679c7..99f8c7d 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -111,7 +111,6 @@
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
-    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
     <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.CREATE_USERS" />
@@ -139,6 +138,7 @@
     <uses-permission android:name="android.permission.GET_APP_OPS_STATS" />
     <uses-permission android:name="android.permission.MANAGE_APP_OPS_MODES" />
     <uses-permission android:name="android.permission.VIBRATE" />
+    <uses-permission android:name="android.permission.ACCESS_VIBRATOR_STATE" />
     <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
     <uses-permission android:name="android.permission.START_TASKS_FROM_RECENTS" />
     <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
@@ -252,6 +252,10 @@
     <!-- Permission required for CTS test - ShortcutManagerUsageTest -->
     <uses-permission android:name="android.permission.ACCESS_SHORTCUTS"/>
 
+    <!-- Permissions required for CTS test - UsageStatsTest -->
+    <uses-permission android:name="android.permission.MANAGE_NOTIFICATIONS"/>
+    <uses-permission android:name="android.permission.ACCESS_LOCUS_ID_USAGE_STATS"/>
+
     <!-- Permissions required to test ambient display. -->
     <uses-permission android:name="android.permission.READ_DREAM_STATE"/>
     <uses-permission android:name="android.permission.WRITE_DREAM_STATE"/>
@@ -308,6 +312,22 @@
                   android:excludeFromRecents="true"
                   android:exported="false" />
 
+        <!--
+        The following is used as a no-op/null home activity when
+        no other MAIN/HOME activity is present (e.g., in CSI).
+        -->
+        <activity android:name=".NullHome"
+                  android:excludeFromRecents="true"
+                  android:label=""
+                  android:screenOrientation="nosensor">
+            <!-- The priority here is set to be lower than that for Settings -->
+            <intent-filter android:priority="-1100">
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.HOME" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
         <receiver
             android:name=".BugreportRequestedReceiver"
             android:permission="android.permission.TRIGGER_SHELL_BUGREPORT">
diff --git a/packages/Shell/res/layout/null_home_finishing_boot.xml b/packages/Shell/res/layout/null_home_finishing_boot.xml
new file mode 100644
index 0000000..5f9563a
--- /dev/null
+++ b/packages/Shell/res/layout/null_home_finishing_boot.xml
@@ -0,0 +1,44 @@
+<?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
+  -->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="#80000000"
+    android:forceHasOverlappingRendering="false">
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:layout_gravity="center"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp">
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textSize="40sp"
+            android:textColor="?android:attr/textColorPrimary"
+            android:text="@*android:string/android_start_title"/>
+        <ProgressBar
+            style="@android:style/Widget.Material.ProgressBar.Horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="12.75dp"
+            android:colorControlActivated="?android:attr/textColorPrimary"
+            android:indeterminate="true"/>
+    </LinearLayout>
+</FrameLayout>
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java
index 48d405a..d126ee0 100644
--- a/packages/Shell/src/com/android/shell/BugreportProgressService.java
+++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java
@@ -97,6 +97,7 @@
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -125,8 +126,6 @@
  * <li>This service calls startBugreport() and passes in local file descriptors to receive
  * bugreport artifacts.
  * </ol>
- *
- * TODO: There are multiple threads involved.  Add synchronization accordingly.
  */
 public class BugreportProgressService extends Service {
     private static final String TAG = "BugreportProgressService";
@@ -193,9 +192,7 @@
      * <p>
      * Must be a path supported by its FileProvider.
      */
-    // TODO: use the same variable for both dir
-    private static final String SCREENSHOT_DIR = "bugreports";
-    private static final String BUGREPORT_DIR = "/bugreports";
+    private static final String BUGREPORT_DIR = "bugreports";
 
     private static final String NOTIFICATION_CHANNEL_ID = "bugreports";
 
@@ -220,6 +217,7 @@
     private final Object mLock = new Object();
 
     /** Managed bugreport info (keyed by id) */
+    @GuardedBy("mLock")
     private final SparseArray<BugreportInfo> mBugreportInfos = new SparseArray<>();
 
     private Context mContext;
@@ -230,7 +228,7 @@
 
     private final BugreportInfoDialog mInfoDialog = new BugreportInfoDialog();
 
-    private File mScreenshotsDir;
+    private File mBugreportsDir;
 
     private BugreportManager mBugreportManager;
 
@@ -263,11 +261,12 @@
         mScreenshotHandler = new ScreenshotHandler("BugreportProgressServiceScreenshotThread");
         startSelfIntent = new Intent(this, this.getClass());
 
-        mScreenshotsDir = new File(getFilesDir(), SCREENSHOT_DIR);
-        if (!mScreenshotsDir.exists()) {
-            Log.i(TAG, "Creating directory " + mScreenshotsDir + " to store temporary screenshots");
-            if (!mScreenshotsDir.mkdir()) {
-                Log.w(TAG, "Could not create directory " + mScreenshotsDir);
+        mBugreportsDir = new File(getFilesDir(), BUGREPORT_DIR);
+        if (!mBugreportsDir.exists()) {
+            Log.i(TAG, "Creating directory " + mBugreportsDir
+                    + " to store bugreports and screenshots");
+            if (!mBugreportsDir.mkdir()) {
+                Log.w(TAG, "Could not create directory " + mBugreportsDir);
             }
         }
         final Configuration conf = mContext.getResources().getConfiguration();
@@ -317,23 +316,26 @@
 
     @Override
     protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
-        final int size = mBugreportInfos.size();
-        if (size == 0) {
-            writer.println("No monitored processes");
-            return;
-        }
-        writer.print("Foreground id: "); writer.println(mForegroundId);
-        writer.println("\n");
-        writer.println("Monitored dumpstate processes");
-        writer.println("-----------------------------");
-        for (int i = 0; i < size; i++) {
-            writer.print("#"); writer.println(i + 1);
-            writer.println(getInfo(mBugreportInfos.keyAt(i)));
+        synchronized (mLock) {
+            final int size = mBugreportInfos.size();
+            if (size == 0) {
+                writer.println("No monitored processes");
+                return;
+            }
+            writer.print("Foreground id: "); writer.println(mForegroundId);
+            writer.println("\n");
+            writer.println("Monitored dumpstate processes");
+            writer.println("-----------------------------");
+            for (int i = 0; i < size; i++) {
+                writer.print("#");
+                writer.println(i + 1);
+                writer.println(getInfoLocked(mBugreportInfos.keyAt(i)));
+            }
         }
     }
 
     private static String getFileName(BugreportInfo info, String suffix) {
-        return String.format("%s-%s%s", info.baseName, info.name, suffix);
+        return String.format("%s-%s%s", info.baseName, info.getName(), suffix);
     }
 
     private final class BugreportCallbackImpl extends BugreportCallback {
@@ -372,7 +374,7 @@
         @Override
         public void onFinished() {
             mInfo.renameBugreportFile();
-            mInfo.renameScreenshots(mScreenshotsDir);
+            mInfo.renameScreenshots();
             synchronized (mLock) {
                 sendBugreportFinishedBroadcastLocked();
             }
@@ -406,7 +408,7 @@
                         mInfo.bugreportFile);
             } else {
                 trackInfoWithIdLocked();
-                cleanupOldFiles(MIN_KEEP_COUNT, MIN_KEEP_AGE);
+                cleanupOldFiles(MIN_KEEP_COUNT, MIN_KEEP_AGE, mBugreportsDir);
                 final Intent intent = new Intent(INTENT_BUGREPORT_FINISHED);
                 intent.putExtra(EXTRA_BUGREPORT, bugreportFilePath);
                 intent.putExtra(EXTRA_SCREENSHOT, getScreenshotForIntent(mInfo));
@@ -418,7 +420,8 @@
 
     private static void sendRemoteBugreportFinishedBroadcast(Context context,
             String bugreportFileName, File bugreportFile) {
-        cleanupOldFiles(REMOTE_BUGREPORT_FILES_AMOUNT, REMOTE_MIN_KEEP_AGE);
+        cleanupOldFiles(REMOTE_BUGREPORT_FILES_AMOUNT, REMOTE_MIN_KEEP_AGE,
+                bugreportFile.getParentFile());
         final Intent intent = new Intent(DevicePolicyManager.ACTION_REMOTE_BUGREPORT_DISPATCH);
         final Uri bugreportUri = getUri(context, bugreportFile);
         final String bugreportHash = generateFileHash(bugreportFileName);
@@ -468,12 +471,12 @@
         return fileHash;
     }
 
-    static void cleanupOldFiles(final int minCount, final long minAge) {
+    static void cleanupOldFiles(final int minCount, final long minAge, File bugreportsDir) {
         new AsyncTask<Void, Void, Void>() {
             @Override
             protected Void doInBackground(Void... params) {
                 try {
-                    FileUtils.deleteOlderFiles(new File(BUGREPORT_DIR), minCount, minAge);
+                    FileUtils.deleteOlderFiles(bugreportsDir, minCount, minAge);
                 } catch (RuntimeException e) {
                     Log.e(TAG, "RuntimeException deleting old files", e);
                 }
@@ -572,7 +575,8 @@
         }
     }
 
-    private BugreportInfo getInfo(int id) {
+    @GuardedBy("mLock")
+    private BugreportInfo getInfoLocked(int id) {
         final BugreportInfo bugreportInfo = mBugreportInfos.get(id);
         if (bugreportInfo == null) {
             Log.w(TAG, "Not monitoring bugreports with ID " + id);
@@ -604,20 +608,22 @@
         String name = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date());
 
         BugreportInfo info = new BugreportInfo(mContext, baseName, name,
-                shareTitle, shareDescription, bugreportType);
-
-        ParcelFileDescriptor bugreportFd = info.createBugreportFd();
+                shareTitle, shareDescription, bugreportType, mBugreportsDir);
+        ParcelFileDescriptor bugreportFd = info.getBugreportFd();
         if (bugreportFd == null) {
-            Log.e(TAG, "Bugreport parcel file descriptor is null.");
+            Log.e(TAG, "Failed to start bugreport generation as "
+                    + " bugreport parcel file descriptor is null.");
             return;
         }
-        ParcelFileDescriptor screenshotFd = info.createScreenshotFd();
+        ParcelFileDescriptor screenshotFd = info.getDefaultScreenshotFd();
         if (screenshotFd == null) {
-            Log.e(TAG, "Screenshot parcel file descriptor is null. Deleting bugreport file");
+            Log.e(TAG, "Failed to start bugreport generation as"
+                    + " screenshot parcel file descriptor is null. Deleting bugreport file");
             FileUtils.closeQuietly(bugreportFd);
             info.bugreportFile.delete();
             return;
         }
+
         mBugreportManager = (BugreportManager) mContext.getSystemService(
                 Context.BUGREPORT_SERVICE);
         final Executor executor = ActivityThread.currentActivityThread().getExecutor();
@@ -631,7 +637,7 @@
             mBugreportManager.startBugreport(bugreportFd, screenshotFd,
                     new BugreportParams(bugreportType), executor, bugreportCallback);
         } catch (RuntimeException e) {
-            Log.i(TAG, "error in generating bugreports: ", e);
+            Log.i(TAG, "Error in generating bugreports: ", e);
             // The binder call didn't go through successfully, so need to close the fds.
             // If the calls went through API takes ownership.
             FileUtils.closeQuietly(bugreportFd);
@@ -639,31 +645,38 @@
         }
     }
 
-    private static ParcelFileDescriptor createReadWriteFile(File file) {
+    private static ParcelFileDescriptor getFd(File file) {
         try {
-            file.createNewFile();
-            file.setReadable(true, true);
-            file.setWritable(true, true);
-
-            ParcelFileDescriptor fd = ParcelFileDescriptor.open(file,
+            return ParcelFileDescriptor.open(file,
                     ParcelFileDescriptor.MODE_WRITE_ONLY | ParcelFileDescriptor.MODE_APPEND);
-            return fd;
-        } catch (IOException e) {
+        } catch (FileNotFoundException e) {
             Log.i(TAG, "Error in generating bugreports: ", e);
         }
         return null;
     }
 
+    private static void createReadWriteFile(File file) {
+        try {
+            if (!file.exists()) {
+                file.createNewFile();
+                file.setReadable(true, true);
+                file.setWritable(true, true);
+            }
+        } catch (IOException e) {
+            Log.e(TAG, "Error in creating bugreport file: ", e);
+        }
+    }
+
     /**
      * Updates the system notification for a given bugreport.
      */
     private void updateProgress(BugreportInfo info) {
-        if (info.progress < 0) {
-            Log.e(TAG, "Invalid progress value for " + info);
+        if (info.getProgress() < 0) {
+            Log.e(TAG, "Invalid progress values for " + info);
             return;
         }
 
-        if (info.finished) {
+        if (info.isFinished()) {
             Log.w(TAG, "Not sending progress notification because bugreport has finished already ("
                     + info + ")");
             return;
@@ -672,7 +685,7 @@
         final NumberFormat nf = NumberFormat.getPercentInstance();
         nf.setMinimumFractionDigits(2);
         nf.setMaximumFractionDigits(2);
-        final String percentageText = nf.format((double) info.progress / 100);
+        final String percentageText = nf.format((double) info.getProgress() / 100);
 
         String title = mContext.getString(R.string.bugreport_in_progress_title, info.id);
 
@@ -680,18 +693,19 @@
         if (mIsWatch) {
             nf.setMinimumFractionDigits(0);
             nf.setMaximumFractionDigits(0);
-            final String watchPercentageText = nf.format((double) info.progress / 100);
+            final String watchPercentageText = nf.format((double) info.getProgress() / 100);
             title = title + "\n" + watchPercentageText;
         }
 
         final String name =
-                info.name != null ? info.name : mContext.getString(R.string.bugreport_unnamed);
+                info.getName() != null ? info.getName()
+                        : mContext.getString(R.string.bugreport_unnamed);
 
         final Notification.Builder builder = newBaseNotification(mContext)
                 .setContentTitle(title)
                 .setTicker(title)
                 .setContentText(name)
-                .setProgress(100 /* max value of progress percentage */, info.progress, false)
+                .setProgress(100 /* max value of progress percentage */, info.getProgress(), false)
                 .setOngoing(true);
 
         // Wear and ATV bugreport doesn't need the bug info dialog, screenshot and cancel action.
@@ -720,10 +734,10 @@
                 .setActions(infoAction, screenshotAction, cancelAction);
         }
         // Show a debug log, every LOG_PROGRESS_STEP percent.
-        final int progress = info.progress;
+        final int progress = info.getProgress();
 
-        if ((info.progress == 0) || (info.progress >= 100) ||
-                ((progress / LOG_PROGRESS_STEP) != (mLastProgressPercent / LOG_PROGRESS_STEP))) {
+        if ((info.getProgress() == 0) || (info.getProgress() >= 100)
+                || ((progress / LOG_PROGRESS_STEP) != (mLastProgressPercent / LOG_PROGRESS_STEP))) {
             Log.d(TAG, "Progress #" + info.id + ": " + percentageText);
         }
         mLastProgressPercent = progress;
@@ -768,10 +782,10 @@
             mBugreportInfos.remove(id);
         }
         // Must stop foreground service first, otherwise notif.cancel() will fail below.
-        stopForegroundWhenDone(id);
+        stopForegroundWhenDoneLocked(id);
         Log.d(TAG, "stopProgress(" + id + "): cancel notification");
         NotificationManager.from(mContext).cancel(id);
-        stopSelfWhenDone();
+        stopSelfWhenDoneLocked();
     }
 
     /**
@@ -781,13 +795,13 @@
         MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_NOTIFICATION_ACTION_CANCEL);
         Log.v(TAG, "cancel: ID=" + id);
         mInfoDialog.cancel();
-        final BugreportInfo info = getInfo(id);
-        if (info != null && !info.finished) {
-            Log.i(TAG, "Cancelling bugreport service (ID=" + id + ") on user's request");
-            mBugreportManager.cancelBugreport();
-            deleteScreenshots(info);
-        }
         synchronized (mLock) {
+            final BugreportInfo info = getInfoLocked(id);
+            if (info != null && !info.isFinished()) {
+                Log.i(TAG, "Cancelling bugreport service (ID=" + id + ") on user's request");
+                mBugreportManager.cancelBugreport();
+                deleteScreenshots(info);
+            }
             stopProgressLocked(id);
         }
     }
@@ -798,7 +812,10 @@
      */
     private void launchBugreportInfoDialog(int id) {
         MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_NOTIFICATION_ACTION_DETAILS);
-        final BugreportInfo info = getInfo(id);
+        final BugreportInfo info;
+        synchronized (mLock) {
+            info = getInfoLocked(id);
+        }
         if (info == null) {
             // Most likely am killed Shell before user tapped the notification. Since system might
             // be too busy anwyays, it's better to ignore the notification and switch back to the
@@ -832,7 +849,11 @@
      */
     private void takeScreenshot(int id) {
         MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_NOTIFICATION_ACTION_SCREENSHOT);
-        if (getInfo(id) == null) {
+        BugreportInfo info;
+        synchronized (mLock) {
+            info = getInfoLocked(id);
+        }
+        if (info == null) {
             // Most likely am killed Shell before user tapped the notification. Since system might
             // be too busy anwyays, it's better to ignore the notification and switch back to the
             // non-interactive mode (where the bugerport will be shared upon completion).
@@ -867,14 +888,16 @@
             mServiceHandler.sendMessageDelayed(msg, DateUtils.SECOND_IN_MILLIS);
             return;
         }
-
+        final BugreportInfo info;
         // It's time to take the screenshot: let the proper thread handle it
-        final BugreportInfo info = getInfo(id);
+        synchronized (mLock) {
+            info = getInfoLocked(id);
+        }
         if (info == null) {
             return;
         }
         final String screenshotPath =
-                new File(mScreenshotsDir, info.getPathNextScreenshot()).getAbsolutePath();
+                new File(mBugreportsDir, info.getPathNextScreenshot()).getAbsolutePath();
 
         Message.obtain(mScreenshotHandler, MSG_SCREENSHOT_REQUEST, id, UNUSED_ARG2, screenshotPath)
                 .sendToTarget();
@@ -885,11 +908,11 @@
      * SCREENSHOT button is enabled or disabled accordingly.
      */
     private void setTakingScreenshot(boolean flag) {
-        synchronized (BugreportProgressService.this) {
+        synchronized (mLock) {
             mTakingScreenshot = flag;
             for (int i = 0; i < mBugreportInfos.size(); i++) {
-                final BugreportInfo info = getInfo(mBugreportInfos.keyAt(i));
-                if (info.finished) {
+                final BugreportInfo info = getInfoLocked(mBugreportInfos.keyAt(i));
+                if (info.isFinished()) {
                     Log.d(TAG, "Not updating progress for " + info.id + " while taking screenshot"
                             + " because share notification was already sent");
                     continue;
@@ -910,7 +933,10 @@
 
     private void handleScreenshotResponse(Message resultMsg) {
         final boolean taken = resultMsg.arg2 != 0;
-        final BugreportInfo info = getInfo(resultMsg.arg1);
+        final BugreportInfo info;
+        synchronized (mLock) {
+            info = getInfoLocked(resultMsg.arg1);
+        }
         if (info == null) {
             return;
         }
@@ -919,9 +945,9 @@
         final String msg;
         if (taken) {
             info.addScreenshot(screenshotFile);
-            if (info.finished) {
+            if (info.isFinished()) {
                 Log.d(TAG, "Screenshot finished after bugreport; updating share notification");
-                info.renameScreenshots(mScreenshotsDir);
+                info.renameScreenshots();
                 sendBugreportNotification(info, mTakingScreenshot);
             }
             msg = mContext.getString(R.string.bugreport_screenshot_taken);
@@ -945,9 +971,10 @@
     /**
      * Stop running on foreground once there is no more active bugreports being watched.
      */
-    private void stopForegroundWhenDone(int id) {
+    @GuardedBy("mLock")
+    private void stopForegroundWhenDoneLocked(int id) {
         if (id != mForegroundId) {
-            Log.d(TAG, "stopForegroundWhenDone(" + id + "): ignoring since foreground id is "
+            Log.d(TAG, "stopForegroundWhenDoneLocked(" + id + "): ignoring since foreground id is "
                     + mForegroundId);
             return;
         }
@@ -960,8 +987,8 @@
         final int total = mBugreportInfos.size();
         if (total > 0) {
             for (int i = 0; i < total; i++) {
-                final BugreportInfo info = getInfo(mBugreportInfos.keyAt(i));
-                if (!info.finished) {
+                final BugreportInfo info = getInfoLocked(mBugreportInfos.keyAt(i));
+                if (!info.isFinished()) {
                     updateProgress(info);
                     break;
                 }
@@ -972,7 +999,8 @@
     /**
      * Finishes the service when it's not monitoring any more processes.
      */
-    private void stopSelfWhenDone() {
+    @GuardedBy("mLock")
+    private void stopSelfWhenDoneLocked() {
         if (mBugreportInfos.size() > 0) {
             if (DEBUG) Log.d(TAG, "Staying alive, waiting for IDs " + mBugreportInfos);
             return;
@@ -985,12 +1013,14 @@
      * Wraps up bugreport generation and triggers a notification to share the bugreport.
      */
     private void onBugreportFinished(BugreportInfo info) {
-        Log.d(TAG, "Bugreport finished with title: " + info.title
+        Log.d(TAG, "Bugreport finished with title: " + info.getTitle()
                 + " and shareDescription:  " + info.shareDescription);
-        info.finished = true;
+        info.setFinished(true);
 
-        // Stop running on foreground, otherwise share notification cannot be dismissed.
-        stopForegroundWhenDone(info.id);
+        synchronized (mLock) {
+            // Stop running on foreground, otherwise share notification cannot be dismissed.
+            stopForegroundWhenDoneLocked(info.id);
+        }
 
         triggerLocalNotification(mContext, info);
     }
@@ -1030,11 +1060,10 @@
     /**
      * Build {@link Intent} that can be used to share the given bugreport.
      */
-    private static Intent buildSendIntent(Context context, BugreportInfo info,
-            File screenshotsDir) {
+    private static Intent buildSendIntent(Context context, BugreportInfo info) {
         // Rename files (if required) before sharing
         info.renameBugreportFile();
-        info.renameScreenshots(screenshotsDir);
+        info.renameScreenshots();
         // Files are kept on private storage, so turn into Uris that we can
         // grant temporary permissions for.
         final Uri bugreportUri;
@@ -1053,8 +1082,8 @@
         intent.addCategory(Intent.CATEGORY_DEFAULT);
         intent.setType(mimeType);
 
-        final String subject = !TextUtils.isEmpty(info.title) ?
-                info.title : bugreportUri.getLastPathSegment();
+        final String subject = !TextUtils.isEmpty(info.getTitle())
+                ? info.getTitle() : bugreportUri.getLastPathSegment();
         intent.putExtra(Intent.EXTRA_SUBJECT, subject);
 
         // EXTRA_TEXT should be an ArrayList, but some clients are expecting a single String.
@@ -1065,9 +1094,9 @@
             .append("\nSerial number: ")
             .append(SystemProperties.get("ro.serialno"));
         int descriptionLength = 0;
-        if (!TextUtils.isEmpty(info.description)) {
-            messageBody.append("\nDescription: ").append(info.description);
-            descriptionLength = info.description.length();
+        if (!TextUtils.isEmpty(info.getDescription())) {
+            messageBody.append("\nDescription: ").append(info.getDescription());
+            descriptionLength = info.getDescription().length();
         }
         intent.putExtra(Intent.EXTRA_TEXT, messageBody.toString());
         final ClipData clipData = new ClipData(null, new String[] { mimeType },
@@ -1108,19 +1137,24 @@
      */
     private void shareBugreport(int id, BugreportInfo sharedInfo) {
         MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_NOTIFICATION_ACTION_SHARE);
-        BugreportInfo info = getInfo(id);
+        BugreportInfo info;
+        synchronized (mLock) {
+            info = getInfoLocked(id);
+        }
         if (info == null) {
             // Service was terminated but notification persisted
             info = sharedInfo;
-            Log.d(TAG, "shareBugreport(): no info for ID " + id + " on managed processes ("
-                    + mBugreportInfos + "), using info from intent instead (" + info + ")");
+            synchronized (mLock) {
+                Log.d(TAG, "shareBugreport(): no info for ID " + id + " on managed processes ("
+                        + mBugreportInfos + "), using info from intent instead (" + info + ")");
+            }
         } else {
             Log.v(TAG, "shareBugReport(): id " + id + " info = " + info);
         }
 
         addDetailsToZipFile(info);
 
-        final Intent sendIntent = buildSendIntent(mContext, info, mScreenshotsDir);
+        final Intent sendIntent = buildSendIntent(mContext, info);
         if (sendIntent == null) {
             Log.w(TAG, "Stopping progres on ID " + id + " because share intent could not be built");
             synchronized (mLock) {
@@ -1185,10 +1219,10 @@
                 mContext.getString(R.string.bugreport_finished_pending_screenshot_text)
                 : mContext.getString(R.string.bugreport_finished_text);
         final String title;
-        if (TextUtils.isEmpty(info.title)) {
+        if (TextUtils.isEmpty(info.getTitle())) {
             title = mContext.getString(R.string.bugreport_finished_title, info.id);
         } else {
-            title = info.title;
+            title = info.getTitle();
             if (!TextUtils.isEmpty(info.shareDescription)) {
                 if(!takingScreenshot) content = info.shareDescription;
             }
@@ -1202,8 +1236,8 @@
                         PendingIntent.FLAG_UPDATE_CURRENT))
                 .setDeleteIntent(newCancelIntent(mContext, info));
 
-        if (!TextUtils.isEmpty(info.name)) {
-            builder.setSubText(info.name);
+        if (!TextUtils.isEmpty(info.getName())) {
+            builder.setSubText(info.getName());
         }
 
         Log.v(TAG, "Sending 'Share' notification for ID " + info.id + ": " + title);
@@ -1296,13 +1330,14 @@
         }
     }
 
+    @GuardedBy("mLock")
     private void addDetailsToZipFileLocked(BugreportInfo info) {
         if (info.bugreportFile == null) {
             // One possible reason is a bug in the Parcelization code.
             Log.wtf(TAG, "addDetailsToZipFile(): no bugreportFile on " + info);
             return;
         }
-        if (TextUtils.isEmpty(info.title) && TextUtils.isEmpty(info.description)) {
+        if (TextUtils.isEmpty(info.getTitle()) && TextUtils.isEmpty(info.getDescription())) {
             Log.d(TAG, "Not touching zip file since neither title nor description are set");
             return;
         }
@@ -1335,8 +1370,8 @@
             }
 
             // Then add the user-provided info.
-            addEntry(zos, "title.txt", info.title);
-            addEntry(zos, "description.txt", info.description);
+            addEntry(zos, "title.txt", info.getTitle());
+            addEntry(zos, "description.txt", info.getDescription());
         } catch (IOException e) {
             Log.e(TAG, "exception zipping file " + tmpZip, e);
             Toast.makeText(mContext, R.string.bugreport_add_details_to_zip_failed,
@@ -1346,7 +1381,7 @@
             // Make sure it only tries to add details once, even it fails the first time.
             info.addedDetailsToZip = true;
             info.addingDetailsToZip = false;
-            stopForegroundWhenDone(info.id);
+            stopForegroundWhenDoneLocked(info.id);
         }
 
         if (!tmpZip.renameTo(info.bugreportFile)) {
@@ -1499,24 +1534,27 @@
      * Updates the user-provided details of a bugreport.
      */
     private void updateBugreportInfo(int id, String name, String title, String description) {
-        final BugreportInfo info = getInfo(id);
+        final BugreportInfo info;
+        synchronized (mLock) {
+            info = getInfoLocked(id);
+        }
         if (info == null) {
             return;
         }
-        if (title != null && !title.equals(info.title)) {
+        if (title != null && !title.equals(info.getTitle())) {
             Log.d(TAG, "updating bugreport title: " + title);
             MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_DETAILS_TITLE_CHANGED);
         }
-        info.title = title;
-        if (description != null && !description.equals(info.description)) {
+        info.setTitle(title);
+        if (description != null && !description.equals(info.getDescription())) {
             Log.d(TAG, "updating bugreport description: " + description.length() + " chars");
             MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_DETAILS_DESCRIPTION_CHANGED);
         }
-        info.description = description;
-        if (name != null && !name.equals(info.name)) {
+        info.setDescription(description);
+        if (name != null && !name.equals(info.getName())) {
             Log.d(TAG, "updating bugreport name: " + name);
             MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_DETAILS_NAME_CHANGED);
-            info.name = name;
+            info.setName(name);
             updateProgress(info);
         }
     }
@@ -1631,14 +1669,14 @@
 
             // Then set fields.
             mId = info.id;
-            if (!TextUtils.isEmpty(info.name)) {
-                mInfoName.setText(info.name);
+            if (!TextUtils.isEmpty(info.getName())) {
+                mInfoName.setText(info.getName());
             }
-            if (!TextUtils.isEmpty(info.title)) {
-                mInfoTitle.setText(info.title);
+            if (!TextUtils.isEmpty(info.getTitle())) {
+                mInfoTitle.setText(info.getTitle());
             }
-            if (!TextUtils.isEmpty(info.description)) {
-                mInfoDescription.setText(info.description);
+            if (!TextUtils.isEmpty(info.getDescription())) {
+                mInfoDescription.setText(info.getDescription());
             }
 
             // And finally display it.
@@ -1657,7 +1695,7 @@
                     @Override
                     public void onClick(View view) {
                         MetricsLogger.action(context, MetricsEvent.ACTION_BUGREPORT_DETAILS_SAVED);
-                        sanitizeName(info.name);
+                        sanitizeName(info.getName());
                         final String name = mInfoName.getText().toString();
                         final String title = mInfoTitle.getText().toString();
                         final String description = mInfoDescription.getText().toString();
@@ -1808,29 +1846,116 @@
          */
         int type;
 
+        private final Object mLock = new Object();
+
         /**
          * Constructor for tracked bugreports - typically called upon receiving BUGREPORT_REQUESTED.
          */
         BugreportInfo(Context context, String baseName, String name,
                 @Nullable String shareTitle, @Nullable String shareDescription,
-                @BugreportParams.BugreportMode int type) {
+                @BugreportParams.BugreportMode int type, File bugreportsDir) {
             this.context = context;
             this.name = this.initialName = name;
             this.shareTitle = shareTitle == null ? "" : shareTitle;
             this.shareDescription = shareDescription == null ? "" : shareDescription;
             this.type = type;
             this.baseName = baseName;
+            createBugreportFile(bugreportsDir);
+            createScreenshotFile(bugreportsDir);
         }
 
-        ParcelFileDescriptor createBugreportFd() {
-            bugreportFile = new File(BUGREPORT_DIR, getFileName(this, ".zip"));
-            return createReadWriteFile(bugreportFile);
+        void createBugreportFile(File bugreportsDir) {
+            bugreportFile = new File(bugreportsDir, getFileName(this, ".zip"));
+            createReadWriteFile(bugreportFile);
         }
 
-        ParcelFileDescriptor createScreenshotFd() {
-            File screenshotFile = new File(BUGREPORT_DIR, getScreenshotName("default"));
+        void createScreenshotFile(File bugreportsDir) {
+            File screenshotFile = new File(bugreportsDir, getScreenshotName("default"));
             addScreenshot(screenshotFile);
-            return createReadWriteFile(screenshotFile);
+            createReadWriteFile(screenshotFile);
+        }
+
+        ParcelFileDescriptor getBugreportFd() {
+            return getFd(bugreportFile);
+        }
+
+        ParcelFileDescriptor getDefaultScreenshotFd() {
+            if (screenshotFiles.isEmpty()) {
+                return null;
+            }
+            return getFd(screenshotFiles.get(0));
+        }
+
+        void setFinished(boolean isFinished) {
+            synchronized (mLock) {
+                this.finished = isFinished;
+            }
+        }
+
+        boolean isFinished() {
+            synchronized (mLock) {
+                return finished;
+            }
+        }
+
+        void setTitle(String title) {
+            synchronized (mLock) {
+                this.title = title;
+            }
+        }
+
+        String getTitle() {
+            synchronized (mLock) {
+                return title;
+            }
+        }
+
+        void setName(String name) {
+            synchronized (mLock) {
+                this.name = name;
+            }
+        }
+
+        String getName() {
+            synchronized (mLock) {
+                return name;
+            }
+        }
+
+        void setDescription(String description) {
+            synchronized (mLock) {
+                this.description = description;
+            }
+        }
+
+        String getDescription() {
+            synchronized (mLock) {
+                return description;
+            }
+        }
+
+        void setProgress(int progress) {
+            synchronized (mLock) {
+                this.progress = progress;
+            }
+        }
+
+        int getProgress() {
+            synchronized (mLock) {
+                return progress;
+            }
+        }
+
+        void setLastUpdate(long lastUpdate) {
+            synchronized (mLock) {
+                this.lastUpdate = lastUpdate;
+            }
+        }
+
+        long getLastUpdate() {
+            synchronized (mLock) {
+                return lastUpdate;
+            }
         }
 
         /**
@@ -1859,7 +1984,7 @@
          * Rename all screenshots files so that they contain the new {@code name} instead of the
          * {@code initialName} if user has changed it.
          */
-        void renameScreenshots(File screenshotDir) {
+        void renameScreenshots() {
             if (TextUtils.isEmpty(name)) {
                 return;
             }
@@ -1869,7 +1994,7 @@
                 final String newName = oldName.replaceFirst(initialName, name);
                 final File newFile;
                 if (!newName.equals(oldName)) {
-                    final File renamedFile = new File(screenshotDir, newName);
+                    final File renamedFile = new File(oldFile.getParentFile(), newName);
                     Log.d(TAG, "Renaming screenshot file " + oldFile + " to " + renamedFile);
                     newFile = oldFile.renameTo(renamedFile) ? renamedFile : oldFile;
                 } else {
@@ -1889,7 +2014,8 @@
          * Rename bugreport file to include the name given by user via UI
          */
         void renameBugreportFile() {
-            File newBugreportFile = new File(BUGREPORT_DIR, getFileName(this, ".zip"));
+            File newBugreportFile = new File(bugreportFile.getParentFile(),
+                    getFileName(this, ".zip"));
             if (!newBugreportFile.getPath().equals(bugreportFile.getPath())) {
                 if (bugreportFile.renameTo(newBugreportFile)) {
                     bugreportFile = newBugreportFile;
@@ -1901,9 +2027,9 @@
             if (context == null) {
                 // Restored from Parcel
                 return formattedLastUpdate == null ?
-                        Long.toString(lastUpdate) : formattedLastUpdate;
+                        Long.toString(getLastUpdate()) : formattedLastUpdate;
             }
-            return DateUtils.formatDateTime(context, lastUpdate,
+            return DateUtils.formatDateTime(context, getLastUpdate(),
                     DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME);
         }
 
@@ -2024,13 +2150,13 @@
             progress = CAPPED_PROGRESS;
         }
         if (DEBUG) {
-            if (progress != info.progress) {
-                Log.v(TAG, "Updating progress for name " + info.name + "(id: " + info.id
-                        + ") from " + info.progress + " to " + progress);
+            if (progress != info.getProgress()) {
+                Log.v(TAG, "Updating progress for name " + info.getName() + "(id: " + info.id
+                        + ") from " + info.getProgress() + " to " + progress);
             }
         }
-        info.progress = progress;
-        info.lastUpdate = System.currentTimeMillis();
+        info.setProgress(progress);
+        info.setLastUpdate(System.currentTimeMillis());
 
         updateProgress(info);
     }
diff --git a/packages/Shell/src/com/android/shell/NullHome.java b/packages/Shell/src/com/android/shell/NullHome.java
new file mode 100644
index 0000000..bd97561
--- /dev/null
+++ b/packages/Shell/src/com/android/shell/NullHome.java
@@ -0,0 +1,43 @@
+/*
+ * 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.shell;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.util.Log;
+
+/**
+ * This covers the fallback case where no launcher is available.
+ * Usually Settings.apk has one fallback home activity.
+ * Settings.apk, however, is not part of CSI, which needs to be
+ * standalone (bootable and testable).
+ */
+public class NullHome extends Activity {
+    private static final String TAG = "NullHome";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Log.i(TAG, "onCreate");
+        setContentView(R.layout.null_home_finishing_boot);
+    }
+
+    protected void onDestroy() {
+        super.onDestroy();
+        Log.i(TAG, "onDestroy");
+    }
+}
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 1fe967b..5458676e 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -646,16 +646,17 @@
                   android:label="Controls Providers"
                   android:theme="@style/Theme.ControlsManagement"
                   android:showForAllUsers="true"
+                  android:clearTaskOnLaunch="true"
                   android:excludeFromRecents="true"
                   android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboard|keyboardHidden"
                   android:visibleToInstantApps="true">
         </activity>
 
         <activity android:name=".controls.management.ControlsFavoritingActivity"
-                  android:parentActivityName=".controls.management.ControlsProviderSelectorActivity"
                   android:theme="@style/Theme.ControlsManagement"
                   android:excludeFromRecents="true"
                   android:showForAllUsers="true"
+                  android:finishOnTaskLaunch="true"
                   android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboard|keyboardHidden"
                   android:visibleToInstantApps="true">
         </activity>
diff --git a/packages/SystemUI/docs/QS-QQS.png b/packages/SystemUI/docs/QS-QQS.png
new file mode 100644
index 0000000..02de479
--- /dev/null
+++ b/packages/SystemUI/docs/QS-QQS.png
Binary files differ
diff --git a/packages/SystemUI/docs/qs-tiles.md b/packages/SystemUI/docs/qs-tiles.md
new file mode 100644
index 0000000..b48ba67
--- /dev/null
+++ b/packages/SystemUI/docs/qs-tiles.md
@@ -0,0 +1,377 @@
+# Quick Settings Tiles (almost all there is to know about them)
+
+[TOC]
+
+## About this document
+
+This document is a more or less comprehensive summary of the state and infrastructure used by Quick Settings tiles. It provides descriptions about the lifecycle of a tile, how to create new tiles and how SystemUI manages and displays tiles, among other topics.
+
+## What are Quick Settings Tiles?
+
+Quick Settings (from now on, QS) is the expanded panel that contains shortcuts for the user to toggle many settings. This is opened by expanding the notification drawer twice (or once when phone is locked). Quick Quick Settings (QQS) is the smaller panel that appears on top of the notifications before expanding twice and contains some of the toggles with no text.
+
+Each of these toggles that appear either in QS or QQS are called Quick Settings Tiles (or tiles for short). They allow the user to enable or disable settings quickly and sometimes provides access to more comprehensive settings pages.
+
+The following image shows QQS on the left and QS on the right, with the tiles highlighted.
+
+![QQS on the left, QS on the right](QS-QQS.png)
+
+QS Tiles usually depend on one or more Controllers that bind the tile with the necessary service. Controllers are obtained by the backend and used for communication between the user and the device. 
+
+### A note on multi-user support
+
+All the classes described in this document that live inside SystemUI are only instantiated in the process of user 0. The different controllers that back the QS Tiles (also instantiated just in user 0) are user aware and provide an illusion of different instances for different users.
+
+For an example on this, see [`RotationLockController`](/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockControllerImpl.java). This controller for the `RotationLockTile` listens to changes in all users.
+
+## What are tiles made of?
+
+### Tile backend
+
+QS Tiles are composed of the following backend classes.
+
+* [`QSTile`](/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java): Interface providing common behavior for all Tiles. This class also contains some useful utility classes needed for the tiles.
+  * `Icon`: Defines the basic interface for an icon as used by the tiles.
+  * `State`: Encapsulates the state of the Tile in order to communicate between the backend and the UI.
+* [`QSTileImpl`](/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java): Abstract implementation of `QSTile`, providing basic common behavior for all tiles. Also implements extensions for different types of `Icon`. All tiles currently defined in SystemUI subclass from this implementation.
+* [`SystemUI/src/com/android/systemui/qs/tiles`](/packages/SystemUI/src/com/android/systemui/qs/tiles): Each tile from SystemUI is defined here by a class that extends `QSTileImpl`. These implementations connect to corresponding controllers. The controllers serve two purposes:
+    * track the state of the device and notify the tile when a change has occurred (for example, bluetooth connected to a device)
+    * accept actions from the tiles to modify the state of the phone (for example, enablind and disabling wifi).
+* [`CustomTile`](/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java): Equivalent to the tiles in the previous item, but used for 3rd party tiles. In depth information to be found in [`CustomTile`](#customtile)
+
+All the elements in SystemUI that work with tiles operate on `QSTile` or the interfaces defined in it. However, all the current implementations of tiles in SystemUI subclass from `QSTileImpl`, as it takes care of many common situations. Throughout this document, we will focus on `QSTileImpl` as examples of tiles.
+
+The interfaces in `QSTile` as well as other interfaces described in this document can be used to implement plugins to add additional tiles or different behavior. For more information, see [plugins.md](plugins.md)
+
+#### Tile State
+
+Each tile has an associated `State` object that is used to communicate information to the corresponding view. The base class `State` has (among others) the following fields:
+
+* **`state`**: one of `Tile#STATE_UNAVAILABLE`, `Tile#STATE_ACTIVE`, `Tile#STATE_INACTIVE`.
+* **`icon`**; icon to display. It may depend on the current state.
+* **`label`**: usually the name of the tile.
+* **`secondaryLabel`**: text to display in a second line. Usually extra state information.
+* **`contentDescription`**
+* **`expandedAccessibilityClassName`**: usually `Switch.class.getName()` for boolean Tiles. This will make screen readers read the current state of the tile as well as the new state when it's toggled. For this, the Tile has to use `BooleanState`.
+* **`handlesLongClick`**: whether the Tile will handle long click. If it won't, it should be set to `false` so it will not be announced for accessibility.
+
+Setting any of these fields during `QSTileImpl#handleUpdateState` will update the UI after it.
+
+Additionally. `BooleanState` has a `value` boolean field that usually would be set to `state == Tile#STATE_ACTIVE`. This is used by accessibility services along with `expandedAccessibilityClassName`.
+
+#### SystemUI tiles
+
+Each tile defined in SystemUI extends `QSTileImpl`. This abstract class implements some common functions and leaves others to be implemented by each tile, in particular those that determine how to handle different events (refresh, click, etc.).
+
+For more information on how to implement a tile in SystemUI, see [Implementing a SystemUI tile](#implementing-a-systemui-tile).
+
+### Tile views
+
+Each Tile has a couple of associated views for displaying it in QS and QQS. These views are updated after the backend updates the `State` using `QSTileImpl#handleUpdateState`.
+
+* **[`com.android.systemui.plugins.qs.QSTileView`](/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTileView.java)**: Abstract class that provides basic Tile functionality. These allows external [Factories](#qsfactory) to create Tiles.
+* **[`QSTileBaseView`](/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java)**: Implementation of `QSTileView` used in QQS that takes care of most of the features of the view:
+  * Holding the icon
+  * Background color and shape
+  * Ripple
+  * Click listening
+* **[`QSTileView`](/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileView.java)**: Extends `QSTileBaseView`to add label support. Used in QS.
+* **[`QSIconView`](/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSIconView.java)**
+* **[`QSIconViewImpl`](/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java)**
+
+#### QSIconView and QSIconViewImpl
+
+`QSIconView` is an interface that define the basic actions that icons have to respond to. Its base implementation in SystemUI is `QSIconViewImpl` and it and its subclasses are used by all QS tiles.
+
+This `ViewGroup` is a container for the icon used in each tile. It has methods to apply the current `State` of the tile, modifying the icon (color and animations). Classes that inherit from this can add other details that are modified when the `State` changes.
+
+Each `QSTileImpl` can specify that they use a particular implementation of this class when creating an icon.
+
+### How are the backend and the views related?
+
+The backend of the tiles (all the implementations of `QSTileImpl`) communicate with the views by using a `State`. The backend populates the state, and then the view maps the state to a visual representation.
+
+It's important to notice that the state of the tile (internal or visual) is not directly modified by a user action like clicking on the tile. Instead, acting on a tile produces internal state changes on the device, and those trigger the changes on the tile state and UI.
+
+When a container for tiles (`QuickQSPanel` or `QSPanel`) has to display tiles, they create a [`TileRecord`](/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java). This associates the corresponding `QSTile` with its `QSTileView`, doing the following:
+
+* Create the corresponding `QSTileView` to display in that container.
+* Create a callback for `QSTile` to call when its state changes. Note that a single tile will normally have up to two callbacks: one for QS and one for QQS.
+
+#### Life of a tile click
+
+This is a brief run-down of what happens when a user clicks on a tile. Internal changes on the device (for example, changes from Settings) will trigger this process starting in step 3. Throughout this section, we assume that we are dealing with a `QSTileImpl`.
+
+1. User clicks on tile. The following calls happen in sequence:
+   1. `QSTileBaseView#onClickListener`.
+   2. `QSTile#click`.
+   3. `QSTileImpl#handleClick`. This last call sets the new state for the device by using the associated controller.
+2. State in the device changes. This is normally outside of SystemUI's control.
+3. Controller receives a callback (or `Intent`) indicating the change in the device. The following calls happen:
+   1. `QSTileImpl#refreshState`, maybe passing an object with necessary information regarding the new state.
+   2. `QSTileImpl#handleRefreshState`
+4. `QSTileImpl#handleUpdateState` is called to update the state with the new information. This information can be obtained both from the `Object` passed to `refreshState` as well as from the controller.
+5. If the state has changed (in at least one element), `QSTileImpl#handleStateChanged` is called. This will trigger a call to all the associated `QSTile.Callback#onStateChanged`, passing the new `State`.
+6. `QSTileView#onStateChanged` is called and this calls `QSTileView#handleStateChanged`. This method maps the state into the view:
+   * The tile is rippled and the color changes to match the new state.
+   * `QSIconView.setIcon` is called to apply the correct state to the icon and the correct icon to the view.
+   * If the tile is a `QSTileView` (in expanded QS), the labels are changed.
+
+## Third party tiles (TileService)
+
+A third party tile is any Quick Settings tile that is provided by an app (that's not SystemUI). This is implemented by developers subclassing [`TileService`](/core/java/android/service/quicksettings/TileService.java) and interacting with its API.
+
+### API classes
+
+The classes that define the public API are in [core/java/android/service/quicksettings](core/java/android/service/quicksettings).
+
+#### Tile
+
+Parcelable class used to communicate information about the state between the external app and SystemUI. The class supports the following fields:
+
+* Label
+* Subtitle
+* Icon
+* State (`Tile#STATE_ACTIVE`, `Tile#STATE_INACTIVE`, `Tile#STATE_UNAVAILABLE`)
+* Content description
+
+Additionally, it provides a method to notify SystemUI that the information may have changed and the tile should be refreshed.
+
+#### TileService
+
+This is an abstract Service that needs to be implemented by the developer. The Service manifest must have the permission `android.permission.BIND_QUICK_SETTINGS_TILE` and must respond to the action `android.service.quicksettings.action.QS_TILE`. This will allow SystemUI to find the available tiles and display them to the user.
+
+The implementer is responsible for creating the methods that will respond to the following calls from SystemUI:
+
+* **`onTileAdded`**: called when the tile is added to QS.
+* **`onTileRemoved`**: called when the tile is removed from QS.
+* **`onStartListening`**: called when QS is opened and the tile is showing. This marks the start of the window when calling `getQSTile` is safe and will provide the correct object.
+* **`onStopListening`**: called when QS is closed or the tile is no longer visible by the user. This marks the end of the window described in `onStartListening`.
+* **`onClick`**: called when the user clicks on the tile.
+
+Additionally, the following final methods are provided:
+
+* ```java
+  public final Tile getQsTile()
+  ```
+
+  Provides the tile object that can be modified. This should only be called in the window between `onStartListening` and `onStopListening`.
+
+* ```java
+  public final boolean isLocked()
+
+  public final boolean isSecure()
+  ```
+
+  Provide information about the secure state of the device. This can be used by the tile to accept or reject actions on the tile.
+
+* ```java
+  public final void unlockAndRun(Runnable)
+  ```
+
+  May prompt the user to unlock the device if locked. Once the device is unlocked, it runs the given `Runnable`.
+
+* ```java
+  public final void showDialog(Dialog)
+  ```
+
+  Shows the provided dialog.
+
+##### Binding
+
+When the Service is bound, a callback Binder is provided by SystemUI for all the callbacks, as well as an identifier token (`Binder`). This token is used in the callbacks to identify this `TileService` and match it to the corresponding tile.
+
+The tiles are bound once immediately on creation. After that, the tile is bound whenever it should start listening. When the panels are closed, and the tile is set to stop listening, it will be unbound after a delay of `TileServiceManager#UNBIND_DELAY` (30s), if it's not set to listening again.
+
+##### Active tile
+
+A `TileService` can be declared as an active tile by adding specific meta-data to its manifest (see [TileService#META_DATA_ACTIVE_TILE](https://developer.android.com/reference/android/service/quicksettings/TileService#META_DATA_ACTIVE_TILE)). In this case, it won't receive a call of `onStartListening` when QS is opened. Instead, the tile must request listening status by making a call to `TileService#requestListeningState` with its component name. This will initiate a window that will last until the tile is updated.
+
+The tile will also be granted listening status if it's clicked by the user.
+
+### SystemUI classes
+
+The following sections describe the classes that live in SystemUI to support third party tiles. These classes live in [SystemUI/src/com/android/systemui/qs/external](/packages/SystemUI/src/com/android/systemui/qs/external/)
+
+#### CustomTile
+
+This class is an subclass of `QSTileImpl` to be used with third party tiles. It provides similar behavior to SystemUI tiles as well as handling exclusive behavior like lifting default icons and labels from the application manifest.
+
+#### TileServices
+
+This class is the central controller for all tile services that are currently in Quick Settings as well as provides the support for starting new ones. It is also an implementation of the `Binder` that receives all calls from current `TileService` components and dispatches them to SystemUI or the corresponding `CustomTile`.
+
+Whenever a binder call is made to this class, it matches the corresponding token assigned to the `TileService` with the `ComponentName` and verifies that the call comes from the right UID to prevent spoofing.
+
+As this class is the only one that's aware of every `TileService` that's currently bound, it is also in charge of requesting some to be unbound whenever there is a low memory situation.
+
+#### TileLifecycleManager
+
+This class is in charge of binding and unbinding to a particular `TileService` when necessary, as well as sending the corresponding binder calls. It does not decide whether the tile should be bound or unbound, unless it's requested to process a message. It additionally handles errors in the `Binder` as well as changes in the corresponding component (like updates and enable/disable).
+
+The class has a queue that stores requests while the service is not bound, to be processed as soon as the service is bound.
+
+Each `TileService` gets assigned an exclusive `TileLifecycleManager` when its corresponding tile is added to the set of current ones and kept as long as the tile is available to the user.
+
+#### TileServiceManager
+
+Each instance of this class is an intermediary between the `TileServices` controller and a `TileLifecycleManager` corresponding to a particular `TileService`.
+
+This class handles management of the service, including:
+
+* Deciding when to bind and unbind, requesting it to the `TileLifecycleManager`.
+* Relaying messages to the `TileService` through the `TileLifecycleManager`.
+* Determining the service's bind priority (to deal with OOM situations).
+* Detecting when the package/component has been removed in order to remove the tile and references to it.
+
+## How are tiles created/instantiated?
+
+This section describes the classes that aid in the creation of each tile as well as the complete lifecycle of a tile. First we describe two important interfaces/classes.
+
+### QSTileHost
+
+This class keeps track of the tiles selected by the current user (backed in the Secure Setting `sysui_qs_tiles`) to be displayed in Quick Settings. Whenever the value of this setting changes (or on device start), the whole list of tiles is read. This is compared with the current tiles, destroying unnecessary ones and creating needed ones.
+
+It additionally provides a point of communication between the tiles and the StatusBar, for example to open it and collapse it. And a way for the StatusBar service to add tiles (only works for `CustomTile`).
+
+#### Tile specs
+
+Each single tile is identified by a spec, which is a unique String for that type of tile. The current tiles are stored as a Setting string of comma separated values of these specs. Additionally, the default tiles (that appear on a fresh system) configuration value is stored likewise.
+
+SystemUI tile specs are usually a single simple word identifying the tile (like `wifi` or `battery`). Custom tile specs are always a string of the form `custom(...)` where the ellipsis is a flattened String representing the `ComponentName` for the corresponding `TileService`.
+
+### QSFactory
+
+This interface provides a way of creating tiles and views from a spec. It can be used in plugins to provide different definitions for tiles.
+
+In SystemUI there is only one implementation of this factory and that is the default factory (`QSFactoryImpl`) in `QSTileHost`.
+
+#### QSFactoryImpl
+
+This class implements two methods as specified in the `QSFactory` interface:
+
+* ```java
+  public QSTile createTile(String)
+  ```
+
+  Creates a tile (backend) from a given spec. The factory has providers for all of the SystemUI tiles, returning one when the correct spec is used.
+
+  If the spec is not recognized but it has the `custom(` prefix, the factory tries to create a `CustomTile` for the component in the spec. This could fail (the component is not a valid `TileService` or is not enabled) and will be detected later when the tile is polled to determine if it's available.
+
+* ```java
+  public QSTileView createTileView(QSTile, boolean)
+  ```
+
+  Creates a view for the corresponding `QSTile`. The second parameter determines if the view that is created should be a collapsed one (for using in QQS) or not (for using in QS).
+
+### Lifecycle of a Tile
+
+We describe first the parts of the lifecycle that are common to SystemUI tiles and third party tiles. Following that, there will be a section with the steps that are exclusive to third party tiles.
+
+1. The tile is added through the QS customizer by the user. This will immediately save the new list of tile specs to the Secure Setting `sysui_qs_tiles`. This step could also happend if `StatusBar` adds tiles (either through adb, or through its service interface as with the `DevelopmentTiles`).
+2. This triggers a "setting changed" that is caught by `QSTileHost`. This class processes the new value of the setting and finds out that there is a new spec in the list. Alternatively, when the device is booted, all tiles in the setting are considered as "new".
+3. `QSTileHost` calls all the available `QSFactory` classes that it has registered in order to find the first one that will be able to create a tile with that spec. Assume that `QSFactoryImpl` managed to create the tile, which is some implementation of `QSTile` (either a SystemUI subclass of `QSTileImpl` or a `CustomTile`). If the tile is available, it's stored in a map and things proceed forward.
+4. `QSTileHost` calls its callbacks indicating that the tiles have changed. In particular, `QSPanel` and `QuickQSPanel` receive this call with the full list of tiles. We will focus on these two classes.
+5. For each tile in this list, a `QSTileView` is created (collapsed or expanded) and attached to a `TileRecord` containing the tile backend and the view. Additionally:
+    * a callback is attached to the tile to communicate between the backend and the view or the panel.
+    * the click listeners in the tile are attached to those of the view.
+6. The tile view is added to the corresponding layout.
+
+When the tile is removed from the list of current tiles, all these classes are properly disposed including removing the callbacks and making sure that the backends remove themselves from the controllers they were listening to.
+
+#### Lifecycle of a CustomTile
+
+In step 3 of the previous process, when a `CustomTile` is created, additional steps are taken to ensure the proper binding to the service as described in [Third party tiles (TileService)](#third-party-tiles-tileservice).
+
+1. The `CustomTile` obtains the `TileServices` class from the `QSTileHost` and request the creation of a `TileServiceManager` with its token. As the spec for the `CustomTile` contains the `ComponentName` of the associated service, this can be used to bind to it.
+2. The `TileServiceManager` creates its own `TileLifecycleManager` to take care of binding to the service.
+3. `TileServices` creates maps between the token, the `CustomTile`, the `TileServiceManager`, the token and the `ComponentName`.
+
+## Implementing a tile
+
+This section describes necessary and recommended steps when implementing a Quick Settings tile. Some of them are optional and depend on the requirements of the tile.
+
+### Implementing a SystemUI tile
+
+1. Create a class (preferably in [`SystemUI/src/com/android/systemui/qs/tiles`](/packages/SystemUI/src/com/android/systemui/qs/tiles)) implementing `QSTileImpl` with a particular type of `State` as a parameter.
+2. Create an injectable constructor taking a `QSHost` and whichever classes are needed for the tile's operation. Normally this would be other SystemUI controllers.
+3. Implement the methods described in [Abstract methods in QSTileImpl](#abstract-methods-in-qstileimpl). Look at other tiles for help. Some considerations to have in mind:
+    * If the tile will not support long click (like the `FlashlightTile`), set `state.handlesLongClick` to `false` (maybe in `newTileState`).
+    * Changes to the tile state (either from controllers or from clicks) should call `refreshState`.
+    * Use only `handleUpdateState` to modify the values of the state to the new ones. This can be done by polling controllers or through the `arg` parameter.
+    * If the controller is not a `CallbackController`, respond to `handleSetListening` by attaching/dettaching from controllers.
+    * Implement `isAvailable` so the tile will not be created when it's not necessary.
+4. In `QSFactoryImpl`:
+    * Inject a `Provider` for the tile created before.
+    * Add a case to the `switch` with a unique String spec for the chosen tile.
+5. In [SystemUI/res/values/config.xml](/packages/SystemUI/res/values/config.xml), modify `quick_settings_tiles_stock` and add the spec defined in the previous step. If necessary, add it also to `quick_settings_tiles_default`. The first one contains a list of all the tiles that SystemUI knows how to create (to show to the user in the customization screen). The second one contains only the default tiles that the user will experience on a fresh boot or after they reset their tiles.
+
+#### Abstract methods in QSTileImpl
+
+Following are methods that need to be implemented when creating a new SystemUI tile. `TState` is a type variable of type `State`.
+
+* ```java
+    public TState newTileState()
+  ```
+
+    Creates a new `State` for this tile to use. Each time the state changes, it is copied into a new one and the corresponding fields are modified. The framework provides `State`, `BooleanState` (has an on and off state and provides this as a content description), `SignalState` (`BooleanState` with `activityIn` and `activityOut`), and `SlashState` (can be rotated or slashed through).
+
+    If a tile has special behavior (no long click, no ripple), it can be set in its state here.
+
+* ```java
+    public void handleSetListening(boolean)
+    ```
+
+    Initiates or terminates listening behavior, like listening to Callbacks from controllers. This gets triggered when QS is expanded or collapsed (i.e., when the tile is visible and actionable). Most tiles (like `WifiTile`) do not implement this. Instead, Tiles are LifecycleOwner and are marked as `RESUMED` or `DESTROYED` in `QSTileImpl#handleListening` and handled as part of the lifecycle of [CallbackController](/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackController.java)
+
+* ```java
+    public QSIconView createTileView(Context)
+  ```
+
+  Allows a Tile to use a `QSIconView` different from `QSIconViewImpl` (see [Tile views](#tile-views)), which is the default defined in `QSTileImpl`
+
+* ```java
+    public Intent getLongClickIntent()
+  ```
+
+  Determines the `Intent` launched when the Tile is long pressed.
+
+* ```java
+    protected void handleClick()
+
+    protected void handleSecondaryClick()
+
+    protected void handleLongClick()
+  ```
+
+  Handles what to do when the Tile is clicked. In general, a Tile will make calls to its controller here and maybe update its state immediately (by calling `QSTileImpl#refreshState`). A Tile can also decide to ignore the click here, if it's `Tile#STATE_UNAVAILABLE`.
+
+  By default long click redirects to click and long click launches the intent defined in `getLongClickIntent`.
+
+* ```java
+    protected void handleUpdateState(TState, Object)
+  ```
+
+  Updates the `State` of the Tile based on the state of the device as provided by the respective controller. It will be called every time the Tile becomes visible, is interacted with or `QSTileImpl#refreshState` is called. After this is done, the updated state will be reflected in the UI.
+
+* ```java
+  public int getMetricsCategory()
+  ```
+
+  Identifier for this Tile, as defined in [proto/src/metrics_constants/metrics_constants.proto](/proto/src/metrics_constants/metrics_constants.proto). This is used to log events related to this Tile.
+
+* ```java
+  public boolean isAvailable()
+  ```
+
+  Determines if a Tile is available to be used (for example, disable `WifiTile` in devices with no Wifi support). If this is false, the Tile will be destroyed upon creation.
+
+* ```java
+  public CharSequence getTileLabel()
+  ```
+
+  Provides a default label for this Tile. Used by the QS Panel customizer to show a name next to each available tile.
+
+### Implementing a third party tile
+
+For information about this, use the Android Developer documentation for [TileService](https://developer.android.com/reference/android/service/quicksettings/TileService).
\ No newline at end of file
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java
index 0a2dd6c..bcff634 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java
@@ -32,7 +32,7 @@
 public interface FalsingManager {
     int VERSION = 3;
 
-    void onSucccessfulUnlock();
+    void onSuccessfulUnlock();
 
     void onNotificationActive();
 
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java
index 01811e9..e586c38 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java
@@ -14,6 +14,7 @@
 
 package com.android.systemui.plugins.qs;
 
+import android.annotation.NonNull;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.metrics.LogMaker;
@@ -107,6 +108,12 @@
         public int getPadding() {
             return 0;
         }
+
+        @Override
+        @NonNull
+        public String toString() {
+            return "Icon";
+        }
     }
 
     @ProvidesInterface(version = State.VERSION)
@@ -118,6 +125,7 @@
         public CharSequence label;
         public CharSequence secondaryLabel;
         public CharSequence contentDescription;
+        public CharSequence stateDescription;
         public CharSequence dualLabelContentDescription;
         public boolean disabledByPolicy;
         public boolean dualTarget = false;
@@ -135,6 +143,7 @@
                     || !Objects.equals(other.label, label)
                     || !Objects.equals(other.secondaryLabel, secondaryLabel)
                     || !Objects.equals(other.contentDescription, contentDescription)
+                    || !Objects.equals(other.stateDescription, stateDescription)
                     || !Objects.equals(other.dualLabelContentDescription,
                             dualLabelContentDescription)
                     || !Objects.equals(other.expandedAccessibilityClassName,
@@ -151,6 +160,7 @@
             other.label = label;
             other.secondaryLabel = secondaryLabel;
             other.contentDescription = contentDescription;
+            other.stateDescription = stateDescription;
             other.dualLabelContentDescription = dualLabelContentDescription;
             other.expandedAccessibilityClassName = expandedAccessibilityClassName;
             other.disabledByPolicy = disabledByPolicy;
@@ -177,6 +187,7 @@
             sb.append(",label=").append(label);
             sb.append(",secondaryLabel=").append(secondaryLabel);
             sb.append(",contentDescription=").append(contentDescription);
+            sb.append(",stateDescription=").append(stateDescription);
             sb.append(",dualLabelContentDescription=").append(dualLabelContentDescription);
             sb.append(",expandedAccessibilityClassName=").append(expandedAccessibilityClassName);
             sb.append(",disabledByPolicy=").append(disabledByPolicy);
diff --git a/packages/SystemUI/res-keyguard/layout/controls_management.xml b/packages/SystemUI/res-keyguard/layout/controls_management.xml
deleted file mode 100644
index 8330258..0000000
--- a/packages/SystemUI/res-keyguard/layout/controls_management.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:gravity="center_horizontal"
-    android:paddingTop="@dimen/controls_management_top_padding"
-    android:paddingStart="@dimen/controls_management_side_padding"
-    android:paddingEnd="@dimen/controls_management_side_padding" >
-
-    <TextView
-        android:id="@+id/title"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:textAppearance="?android:attr/textAppearanceLarge"
-        android:textSize="@dimen/controls_title_size"
-        android:textAlignment="center" />
-
-    <TextView
-        android:id="@+id/subtitle"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/controls_management_titles_margin"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-        android:textAlignment="center" />
-
-    <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/list"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/controls_management_list_margin" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res-keyguard/layout/controls_zone_header.xml b/packages/SystemUI/res-keyguard/layout/controls_zone_header.xml
new file mode 100644
index 0000000..7b43a03
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/layout/controls_zone_header.xml
@@ -0,0 +1,28 @@
+<?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.
+  -->
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:textAppearance="@style/TextAppearance.Control.Title"
+    android:textColor="?android:attr/colorPrimary"
+    android:layout_marginStart="12dp"
+    android:layout_marginEnd="2dp"
+    android:layout_marginTop="8dp"
+    android:layout_marginBottom="4dp">
+
+</TextView>
\ No newline at end of file
diff --git a/packages/SystemUI/res-keyguard/values/config.xml b/packages/SystemUI/res-keyguard/values/config.xml
index bde6ed5..8d9d6ee 100644
--- a/packages/SystemUI/res-keyguard/values/config.xml
+++ b/packages/SystemUI/res-keyguard/values/config.xml
@@ -22,10 +22,4 @@
 
     <!-- Allow the menu hard key to be disabled in LockScreen on some devices [DO NOT TRANSLATE] -->
     <bool name="config_disableMenuKeyInLockScreen">false</bool>
-
-    <!-- Threshold in micro watts below which a charger is rated as "slow"; 1A @ 5V -->
-    <integer name="config_chargingSlowlyThreshold">5000000</integer>
-
-    <!-- Threshold in micro watts above which a charger is rated as "fast"; 1.5A @ 5V  -->
-    <integer name="config_chargingFastThreshold">7500000</integer>
 </resources>
diff --git a/packages/SystemUI/res-product/values-ca/strings.xml b/packages/SystemUI/res-product/values-ca/strings.xml
index 8c5c83a..a1444bb 100644
--- a/packages/SystemUI/res-product/values-ca/strings.xml
+++ b/packages/SystemUI/res-product/values-ca/strings.xml
@@ -34,10 +34,10 @@
     <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="8110939900089863103">"Has provat de desbloquejar el telèfon <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, l\'usuari se suprimirà, juntament amb totes les seves dades."</string>
     <string name="kg_failed_attempts_now_erasing_user" product="tablet" msgid="8509811676952707883">"Has provat de desbloquejar la tauleta <xliff:g id="NUMBER">%d</xliff:g> vegades de manera incorrecta. L\'usuari se suprimirà, juntament amb totes les seves dades."</string>
     <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="3051962486994265014">"Has provat de desbloquejar el telèfon <xliff:g id="NUMBER">%d</xliff:g> vegades de manera incorrecta. L\'usuari se suprimirà, juntament amb totes les seves dades."</string>
-    <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="1049523640263353830">"Has provat de desbloquejar la tauleta <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, el perfil professional se suprimirà, juntament amb totes les dades que contingui."</string>
-    <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="3280816298678433681">"Has provat de desbloquejar el telèfon <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, el perfil professional se suprimirà, juntament amb totes les dades que contingui."</string>
-    <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="4417100487251371559">"Has provat de desbloquejar la tauleta <xliff:g id="NUMBER">%d</xliff:g> vegades de manera incorrecta. El perfil professional se suprimirà, juntament amb totes les dades que contingui."</string>
-    <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 professional se suprimirà, juntament amb totes les dades que contingui."</string>
+    <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="1049523640263353830">"Has provat de desbloquejar la tauleta <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, el perfil de treball se suprimirà, juntament amb totes les dades que contingui."</string>
+    <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="3280816298678433681">"Has provat de desbloquejar el telèfon <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, el perfil de treball se suprimirà, juntament amb totes les dades que contingui."</string>
+    <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="4417100487251371559">"Has provat de desbloquejar la tauleta <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_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>
 </resources>
diff --git a/packages/SystemUI/res/color/control_background.xml b/packages/SystemUI/res/color/control_background.xml
index 646fe5d..977310c 100644
--- a/packages/SystemUI/res/color/control_background.xml
+++ b/packages/SystemUI/res/color/control_background.xml
@@ -2,5 +2,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_enabled="false"
         android:color="@color/control_default_background" />
-  <item android:color="@color/GM2_blue_50" />
+  <item android:color="@color/GM2_blue_200"
+        android:alpha="0.2" />
 </selector>
diff --git a/packages/SystemUI/res/color/control_foreground.xml b/packages/SystemUI/res/color/control_foreground.xml
index bf028f1..339f1e2 100644
--- a/packages/SystemUI/res/color/control_foreground.xml
+++ b/packages/SystemUI/res/color/control_foreground.xml
@@ -2,5 +2,5 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false"
          android:color="@color/control_default_foreground" />
-   <item android:color="@color/GM2_blue_700" />
+   <item android:color="@color/GM2_blue_200" />
  </selector>
diff --git a/packages/SystemUI/res/color/light_background.xml b/packages/SystemUI/res/color/light_background.xml
index 2effd99..1299464 100644
--- a/packages/SystemUI/res/color/light_background.xml
+++ b/packages/SystemUI/res/color/light_background.xml
@@ -2,5 +2,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_enabled="false"
         android:color="@color/control_default_background" />
-  <item android:color="@color/GM2_yellow_50" />
+  <item android:color="@color/GM2_yellow_200"
+        android:alpha="0.2" />
 </selector>
diff --git a/packages/SystemUI/res/color/light_foreground.xml b/packages/SystemUI/res/color/light_foreground.xml
index 8143028..7c02075 100644
--- a/packages/SystemUI/res/color/light_foreground.xml
+++ b/packages/SystemUI/res/color/light_foreground.xml
@@ -2,5 +2,5 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_enabled="false"
         android:color="@color/control_default_foreground" />
-  <item android:color="@color/GM2_orange_900" />
+  <item android:color="@color/GM2_yellow_200" />
 </selector>
diff --git a/packages/SystemUI/res/color/thermo_cool_background.xml b/packages/SystemUI/res/color/thermo_cool_background.xml
index 646fe5d..977310c 100644
--- a/packages/SystemUI/res/color/thermo_cool_background.xml
+++ b/packages/SystemUI/res/color/thermo_cool_background.xml
@@ -2,5 +2,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_enabled="false"
         android:color="@color/control_default_background" />
-  <item android:color="@color/GM2_blue_50" />
+  <item android:color="@color/GM2_blue_200"
+        android:alpha="0.2" />
 </selector>
diff --git a/packages/SystemUI/res/color/thermo_cool_foreground.xml b/packages/SystemUI/res/color/thermo_cool_foreground.xml
index bf028f1..339f1e2 100644
--- a/packages/SystemUI/res/color/thermo_cool_foreground.xml
+++ b/packages/SystemUI/res/color/thermo_cool_foreground.xml
@@ -2,5 +2,5 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false"
          android:color="@color/control_default_foreground" />
-   <item android:color="@color/GM2_blue_700" />
+   <item android:color="@color/GM2_blue_200" />
  </selector>
diff --git a/packages/SystemUI/res/color/thermo_heat_background.xml b/packages/SystemUI/res/color/thermo_heat_background.xml
index 6f29ed5..2709ebe 100644
--- a/packages/SystemUI/res/color/thermo_heat_background.xml
+++ b/packages/SystemUI/res/color/thermo_heat_background.xml
@@ -2,5 +2,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_enabled="false"
         android:color="@color/control_default_background" />
-  <item android:color="@color/GM2_red_50" />
+  <item android:color="@color/GM2_red_200"
+        android:alpha="0.2" />
 </selector>
diff --git a/packages/SystemUI/res/color/thermo_heat_foreground.xml b/packages/SystemUI/res/color/thermo_heat_foreground.xml
index 72f4b8d..ffcf550 100644
--- a/packages/SystemUI/res/color/thermo_heat_foreground.xml
+++ b/packages/SystemUI/res/color/thermo_heat_foreground.xml
@@ -2,5 +2,5 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_enabled="false"
         android:color="@color/control_default_foreground" />
-  <item android:color="@color/GM2_red_700" />
+  <item android:color="@color/GM2_red_200" />
 </selector>
diff --git a/packages/SystemUI/res/drawable-nodpi/android_11_dial.xml b/packages/SystemUI/res/drawable-nodpi/android_11_dial.xml
new file mode 100644
index 0000000..73fd37f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/android_11_dial.xml
@@ -0,0 +1,63 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:aapt="http://schemas.android.com/aapt"
+    android:width="108dp"
+    android:height="108dp"
+    android:viewportWidth="108"
+    android:viewportHeight="108">
+  <path
+      android:pathData="M77.773,51.064h-1.583c-0.217,0 -0.393,-0.176 -0.393,-0.393v-1.46c0,-0.217 0.176,-0.393 0.393,-0.393h3.466c0.217,0 0.393,0.176 0.393,0.393v9.921c0,0.217 -0.176,0.393 -0.393,0.393h-1.49c-0.217,0 -0.393,-0.176 -0.393,-0.393V51.064z"
+      android:fillColor="#F86734"/>
+  <path
+      android:pathData="M83.598,51.064h-1.583c-0.217,0 -0.393,-0.176 -0.393,-0.393v-1.46c0,-0.217 0.176,-0.393 0.393,-0.393h3.466c0.217,0 0.393,0.176 0.393,0.393v9.921c0,0.217 -0.176,0.393 -0.393,0.393h-1.49c-0.217,0 -0.393,-0.176 -0.393,-0.393V51.064z"
+      android:fillColor="#F86734"/>
+  <path
+      android:pathData="M70.044,75.974m-0.644,0a0.644,0.644 0,1 1,1.288 0a0.644,0.644 0,1 1,-1.288 0"
+      android:fillColor="#d7effe"/>
+  <path
+      android:pathData="M56.896,80.985m-0.718,0a0.718,0.718 0,1 1,1.436 0a0.718,0.718 0,1 1,-1.436 0"
+      android:fillColor="#d7effe"/>
+  <path
+      android:pathData="M43.408,78.881m-0.795,0a0.795,0.795 0,1 1,1.59 0a0.795,0.795 0,1 1,-1.59 0"
+      android:fillColor="#d7effe"/>
+  <path
+      android:pathData="M32.419,70.115m-0.874,0a0.874,0.874 0,1 1,1.748 0a0.874,0.874 0,1 1,-1.748 0"
+      android:fillColor="#d7effe"/>
+  <path
+      android:pathData="M27.306,56.992m-0.954,0a0.954,0.954 0,1 1,1.908 0a0.954,0.954 0,1 1,-1.908 0"
+      android:fillColor="#d7effe"/>
+  <path
+      android:pathData="M29.313,43.489m-1.036,0a1.036,1.036 0,1 1,2.072 0a1.036,1.036 0,1 1,-2.072 0"
+      android:fillColor="#d7effe"/>
+  <path
+      android:pathData="M37.988,32.445m-1.118,0a1.118,1.118 0,1 1,2.236 0a1.118,1.118 0,1 1,-2.236 0"
+      android:fillColor="#d7effe"/>
+  <path
+      android:pathData="M51.137,27.064m-1.201,0a1.201,1.201 0,1 1,2.402 0a1.201,1.201 0,1 1,-2.402 0"
+      android:fillColor="#d7effe"/>
+  <path
+      android:pathData="M64.553,28.868m-1.284,0a1.284,1.284 0,1 1,2.568 0a1.284,1.284 0,1 1,-2.568 0"
+      android:fillColor="#d7effe"/>
+  <path
+      android:pathData="M75.522,37.652m-1.368,0a1.368,1.368 0,1 1,2.736 0a1.368,1.368 0,1 1,-2.736 0"
+      android:fillColor="#d7effe"/>
+  <path
+      android:pathData="M87.942,115.052l-47.557,-47.557l26.869,-26.87l47.557,47.558z">
+    <aapt:attr name="android:fillColor">
+      <gradient 
+          android:startY="56.087"
+          android:startX="55.8464"
+          android:endY="100.0297"
+          android:endX="99.7891"
+          android:type="linear">
+        <item android:offset="0" android:color="#3F000000"/>
+        <item android:offset="1" android:color="#00000000"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+  <path
+      android:pathData="M53.928,54.17m-18.999,0a18.999,18.999 0,1 1,37.998 0a18.999,18.999 0,1 1,-37.998 0"
+      android:fillColor="#3ddc84"/>
+  <path
+      android:pathData="M66.353,54.17m-3.185,0a3.185,3.185 0,1 1,6.37 0a3.185,3.185 0,1 1,-6.37 0"
+      android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable-nodpi/icon.xml b/packages/SystemUI/res/drawable-nodpi/icon.xml
index 7a68c03..7f8d4fa 100644
--- a/packages/SystemUI/res/drawable-nodpi/icon.xml
+++ b/packages/SystemUI/res/drawable-nodpi/icon.xml
@@ -15,5 +15,5 @@
 -->
 <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
     <background android:drawable="@drawable/icon_bg"/>
-    <foreground android:drawable="@drawable/q"/>
+    <foreground android:drawable="@drawable/android_11_dial"/>
 </adaptive-icon>
diff --git a/packages/SystemUI/res/drawable-nodpi/icon_bg.xml b/packages/SystemUI/res/drawable-nodpi/icon_bg.xml
index 2a54dfa..31b2a7f 100644
--- a/packages/SystemUI/res/drawable-nodpi/icon_bg.xml
+++ b/packages/SystemUI/res/drawable-nodpi/icon_bg.xml
@@ -14,5 +14,5 @@
     limitations under the License.
 -->
 <color xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="#77C360" />
+    android:color="#073042" />
 
diff --git a/packages/SystemUI/res/drawable-nodpi/q.xml b/packages/SystemUI/res/drawable-nodpi/q.xml
deleted file mode 100644
index 0f42d2e..0000000
--- a/packages/SystemUI/res/drawable-nodpi/q.xml
+++ /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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="108dp"
-        android:height="108dp"
-        android:viewportWidth="108.0"
-        android:viewportHeight="108.0">
-    <group
-        android:name="scale"
-        android:pivotX="54" android:pivotY="54"
-        android:scaleX="0.9"
-        android:scaleY="0.9">
-        <group
-            android:name="nudge"
-            android:translateX="24"
-            android:translateY="23.5">
-            <path
-                android:name="tail"
-                android:fillColor="#FFFFFF"
-                android:pathData="M21.749674,34.122784l-9.431964,9.529709l-6.31771,-6.2529106l15.736504,-15.899582l64.765724,65.16436l-6.3046494,6.266083z"/>
-            <path
-                android:name="counter"
-                android:fillColor="#FFFFFF"
-                android:pathData="M30,9.32352941 C41.6954418,9.32352941 51.1764706,18.8045582 51.1764706,30.5 C51.1764706,42.1954418 41.6954418,51.6764706 30,51.6764706 C18.3045582,51.6764706 8.82352941,42.1954418 8.82352941,30.5 C8.82352941,18.8045582 18.3045582,9.32352941 30,9.32352941 L30,9.32352941 Z M30,0.5 C13.4314575,0.5 -5.53805368e-15,13.9314575 -7.10542736e-15,30.5 C-1.02401747e-14,47.0685425 13.4314575,60.5 30,60.5 C46.5685425,60.5 60,47.0685425 60,30.5 C59.9805514,13.9395201 46.5604799,0.519448617 30,0.5 Z"/>
-        </group>
-    </group>
-</vector>
diff --git a/packages/SystemUI/res/drawable/control_background.xml b/packages/SystemUI/res/drawable/control_background.xml
index b246ea0..29b4efa 100644
--- a/packages/SystemUI/res/drawable/control_background.xml
+++ b/packages/SystemUI/res/drawable/control_background.xml
@@ -19,7 +19,7 @@
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item>
     <shape>
-      <solid android:color="?android:attr/colorBackgroundFloating"/>
+      <solid android:color="@color/control_default_background" />
       <corners android:radius="@dimen/control_corner_radius" />
     </shape>
   </item>
diff --git a/packages/SystemUI/res/drawable/ic_cancel_24.xml b/packages/SystemUI/res/drawable/ic_cancel_24.xml
new file mode 100644
index 0000000..8ab28dd
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_cancel_24.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,2C6.47,2 2,6.47 2,12s4.47,10 10,10 10,-4.47 10,-10S17.53,2 12,2zM17,15.59L15.59,17 12,13.41 8.41,17 7,15.59 10.59,12 7,8.41 8.41,7 12,10.59 15.59,7 17,8.41 13.41,12 17,15.59z"/>
+</vector>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/ic_important.xml b/packages/SystemUI/res/drawable/ic_important.xml
new file mode 100644
index 0000000..d7439e1
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_important.xml
@@ -0,0 +1,26 @@
+<?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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M4,18.99h11c0.67,0 1.27,-0.32 1.63,-0.83L21,12l-4.37,-6.16C16.27,5.33 15.67,5 15,5H4l5,7 -5,6.99z"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/ic_important_outline.xml b/packages/SystemUI/res/drawable/ic_important_outline.xml
new file mode 100644
index 0000000..7a628bb
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_important_outline.xml
@@ -0,0 +1,27 @@
+<?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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?android:attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M15,19L3,19l4.5,-7L3,5h12c0.65,0 1.26,0.31 1.63,0.84L21,12l-4.37,6.16c-0.37,0.52 -0.98,0.84 -1.63,0.84zM6.5,17L15,17l3.5,-5L15,7L6.5,7l3.5,5 -3.5,5z"/>
+</vector>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/ic_screen_record_background.xml b/packages/SystemUI/res/drawable/ic_screen_record_background.xml
new file mode 100644
index 0000000..9195305
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_screen_record_background.xml
@@ -0,0 +1,25 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:tint="?android:attr/colorError"
+    android:viewportWidth="24.0"
+    android:viewportHeight="24.0">
+    <path
+        android:pathData="M10,0L14,0A10,10 0,0 1,24 10L24,10A10,10 0,0 1,14 20L10,20A10,10 0,0 1,0 10L0,10A10,10 0,0 1,10 0z"
+        android:fillColor="@android:color/white"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/ic_star.xml b/packages/SystemUI/res/drawable/ic_star.xml
deleted file mode 100644
index 4a731b3..0000000
--- a/packages/SystemUI/res/drawable/ic_star.xml
+++ /dev/null
@@ -1,25 +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
-  -->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="@android:color/white"
-        android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27z"/>
-</vector>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/ic_star_border.xml b/packages/SystemUI/res/drawable/ic_star_border.xml
deleted file mode 100644
index 9ede40b..0000000
--- a/packages/SystemUI/res/drawable/ic_star_border.xml
+++ /dev/null
@@ -1,25 +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
-  -->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="@android:color/white"
-        android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z"/>
-</vector>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/screenshot_cancel.xml b/packages/SystemUI/res/drawable/screenshot_cancel.xml
new file mode 100644
index 0000000..be3c598
--- /dev/null
+++ b/packages/SystemUI/res/drawable/screenshot_cancel.xml
@@ -0,0 +1,28 @@
+<?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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="48dp"
+        android:height="48dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:pathData="M24,24m-16,0a16,16 0,1 1,32 0a16,16 0,1 1,-32 0"
+        android:fillColor="@android:color/white"/>
+    <path
+        android:fillColor="@color/GM2_grey_500"
+        android:pathData="M31,18.41L29.59,17 24,22.59 18.41,17 17,18.41 22.59,24 17,29.59 18.41,31 24,25.41 29.59,31 31,29.59 25.41,24z"/>
+</vector>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/stat_sys_screen_record.xml b/packages/SystemUI/res/drawable/stat_sys_screen_record.xml
new file mode 100644
index 0000000..486af9e
--- /dev/null
+++ b/packages/SystemUI/res/drawable/stat_sys_screen_record.xml
@@ -0,0 +1,16 @@
+<!--
+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.
+-->
+<com.android.systemui.statusbar.ScreenRecordDrawable />
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/stat_sys_screen_record_1.xml b/packages/SystemUI/res/drawable/stat_sys_screen_record_1.xml
new file mode 100644
index 0000000..ab2314e
--- /dev/null
+++ b/packages/SystemUI/res/drawable/stat_sys_screen_record_1.xml
@@ -0,0 +1,18 @@
+<!--
+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.
+-->
+<com.android.systemui.statusbar.ScreenRecordDrawable
+    level="1"
+/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/stat_sys_screen_record_2.xml b/packages/SystemUI/res/drawable/stat_sys_screen_record_2.xml
new file mode 100644
index 0000000..8764ff9
--- /dev/null
+++ b/packages/SystemUI/res/drawable/stat_sys_screen_record_2.xml
@@ -0,0 +1,18 @@
+<!--
+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.
+-->
+<com.android.systemui.statusbar.ScreenRecordDrawable
+    level="2"
+/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/stat_sys_screen_record_3.xml b/packages/SystemUI/res/drawable/stat_sys_screen_record_3.xml
new file mode 100644
index 0000000..0ff4d9a
--- /dev/null
+++ b/packages/SystemUI/res/drawable/stat_sys_screen_record_3.xml
@@ -0,0 +1,18 @@
+<!--
+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.
+-->
+<com.android.systemui.statusbar.ScreenRecordDrawable
+    level="3"
+/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/bubble_overflow_activity.xml b/packages/SystemUI/res/layout/bubble_overflow_activity.xml
index 95f205a..481c4db 100644
--- a/packages/SystemUI/res/layout/bubble_overflow_activity.xml
+++ b/packages/SystemUI/res/layout/bubble_overflow_activity.xml
@@ -14,8 +14,45 @@
   ~ limitations under the License
   -->
 
-<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/bubble_overflow_recycler"
-    android:layout_gravity="center_horizontal"
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/bubble_overflow_container"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"/>
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:layout_gravity="center_horizontal">
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/bubble_overflow_recycler"
+        android:layout_gravity="center_horizontal"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+    <LinearLayout
+        android:id="@+id/bubble_overflow_empty_state"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical"
+        android:gravity="center">
+
+        <TextView
+            android:id="@+id/bubble_overflow_empty_title"
+            android:text="@string/bubble_overflow_empty_title"
+            android:fontFamily="@*android:string/config_bodyFontFamilyMedium"
+            android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Body2"
+            android:textColor="?android:attr/textColorSecondary"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"/>
+
+        <TextView
+            android:id="@+id/bubble_overflow_empty_subtitle"
+            android:fontFamily="@*android:string/config_bodyFontFamily"
+            android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Body2"
+            android:textColor="?android:attr/textColorSecondary"
+            android:text="@string/bubble_overflow_empty_subtitle"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"/>
+    </LinearLayout>
+</LinearLayout>
diff --git a/packages/SystemUI/res/layout/controls_base_item.xml b/packages/SystemUI/res/layout/controls_base_item.xml
index 68c8246..823bbcd 100644
--- a/packages/SystemUI/res/layout/controls_base_item.xml
+++ b/packages/SystemUI/res/layout/controls_base_item.xml
@@ -72,8 +72,8 @@
     <CheckBox
         android:id="@+id/favorite"
         android:visibility="gone"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
+        android:layout_width="48dp"
+        android:layout_height="48dp"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"/>
 </androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/packages/SystemUI/res/layout/controls_detail_dialog.xml b/packages/SystemUI/res/layout/controls_detail_dialog.xml
new file mode 100644
index 0000000..f2de45a
--- /dev/null
+++ b/packages/SystemUI/res/layout/controls_detail_dialog.xml
@@ -0,0 +1,23 @@
+<?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.
+-->
+
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/controls_activity_view"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" />
+
diff --git a/packages/SystemUI/res/layout/controls_icon.xml b/packages/SystemUI/res/layout/controls_icon.xml
new file mode 100644
index 0000000..cc46ced
--- /dev/null
+++ b/packages/SystemUI/res/layout/controls_icon.xml
@@ -0,0 +1,26 @@
+<?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.
+*/
+-->
+
+<ImageView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="28dp"
+    android:layout_height="28dp"
+    android:scaleType="fitCenter"
+    android:layout_marginLeft="2dp"
+    android:layout_marginRight="2dp" />
diff --git a/packages/SystemUI/res/layout/controls_management.xml b/packages/SystemUI/res/layout/controls_management.xml
new file mode 100644
index 0000000..a7379be
--- /dev/null
+++ b/packages/SystemUI/res/layout/controls_management.xml
@@ -0,0 +1,95 @@
+<?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.
+  -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center_horizontal"
+    android:paddingTop="@dimen/controls_management_top_padding"
+    android:paddingStart="@dimen/controls_management_side_padding"
+    android:paddingEnd="@dimen/controls_management_side_padding" >
+
+    <TextView
+        android:id="@+id/title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:textSize="@dimen/controls_title_size"
+        android:textAlignment="center" />
+
+    <TextView
+        android:id="@+id/subtitle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/controls_management_titles_margin"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textAlignment="center" />
+
+    <androidx.core.widget.NestedScrollView
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:orientation="vertical"
+        android:layout_marginTop="@dimen/controls_management_list_margin">
+
+        <ViewStub
+            android:id="@+id/stub"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"/>
+
+    </androidx.core.widget.NestedScrollView>
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="64dp">
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/controls_app_divider_height"
+            android:layout_gravity="center_horizontal|top"
+            android:background="?android:attr/listDivider" />
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:padding="4dp">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:text="See other apps"
+                android:textAppearance="@style/TextAppearance.Control.Title"
+                android:textColor="?android:attr/colorPrimary"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toStartOf="parent"/>
+
+            <Button
+                android:id="@+id/done"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:text="Done"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"/>
+        </androidx.constraintlayout.widget.ConstraintLayout>
+    </FrameLayout>
+
+
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/controls_management_apps.xml b/packages/SystemUI/res/layout/controls_management_apps.xml
new file mode 100644
index 0000000..2bab433
--- /dev/null
+++ b/packages/SystemUI/res/layout/controls_management_apps.xml
@@ -0,0 +1,25 @@
+<?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.
+  -->
+
+<androidx.recyclerview.widget.RecyclerView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/list"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    >
+
+</androidx.recyclerview.widget.RecyclerView>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/controls_management_favorites.xml b/packages/SystemUI/res/layout/controls_management_favorites.xml
new file mode 100644
index 0000000..62056e6
--- /dev/null
+++ b/packages/SystemUI/res/layout/controls_management_favorites.xml
@@ -0,0 +1,110 @@
+<?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.
+  -->
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/error_message"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/controls_management_list_margin"
+        android:text="@string/controls_favorite_load_error"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:visibility="gone"
+        android:gravity="center_horizontal"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toBottomOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/text_favorites"
+    />
+
+    <TextView
+        android:id="@+id/text_favorites"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/controls_management_list_margin"
+        android:text="@string/controls_favorite_header_favorites"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textAllCaps="true"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/divider1"
+        app:layout_constraintTop_toBottomOf="@id/error_message"
+        />
+
+    <View
+        android:id="@+id/divider1"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/controls_app_divider_height"
+        android:layout_gravity="center_horizontal|top"
+        android:background="?android:attr/listDivider"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/listFavorites"
+        app:layout_constraintTop_toBottomOf="@id/text_favorites"
+        />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/listFavorites"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginTop="@dimen/controls_management_list_margin"
+        android:nestedScrollingEnabled="false"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/text_all"
+        app:layout_constraintTop_toBottomOf="@id/divider1"/>
+
+    <TextView
+        android:id="@+id/text_all"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/controls_management_list_margin"
+        android:text="@string/controls_favorite_header_all"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textAllCaps="true"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/divider2"
+        app:layout_constraintTop_toBottomOf="@id/listFavorites"
+        />
+
+    <View
+        android:id="@+id/divider2"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/controls_app_divider_height"
+        android:layout_gravity="center_horizontal|top"
+        android:background="?android:attr/listDivider"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/listAll"
+        app:layout_constraintTop_toBottomOf="@id/text_all"
+        />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/listAll"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginTop="@dimen/controls_management_list_margin"
+        android:nestedScrollingEnabled="false"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/divider2"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/controls_no_favorites.xml b/packages/SystemUI/res/layout/controls_no_favorites.xml
index 096f1f4..3e0699d 100644
--- a/packages/SystemUI/res/layout/controls_no_favorites.xml
+++ b/packages/SystemUI/res/layout/controls_no_favorites.xml
@@ -1,18 +1,52 @@
+<?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.
+*/
+-->
+
 <merge
     xmlns:android="http://schemas.android.com/apk/res/android">
-  <TextView
-      android:id="@+id/controls_title"
-      android:text="@string/quick_controls_title"
+  <LinearLayout
+      android:id="@+id/controls_no_favorites_group"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:singleLine="true"
-      android:gravity="center"
-      android:textSize="25dp"
+      android:orientation="vertical"
       android:paddingTop="40dp"
       android:paddingBottom="40dp"
       android:layout_marginLeft="10dp"
       android:layout_marginRight="10dp"
-      android:textColor="@*android:color/foreground_material_dark"
-      android:fontFamily="@*android:string/config_headlineFontFamily"
-      android:background="@drawable/control_no_favorites_background"/>
+      android:background="@drawable/control_no_favorites_background">
+
+    <LinearLayout
+        android:id="@+id/controls_icon_row"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:orientation="horizontal"
+        android:paddingBottom="8dp" />
+
+    <TextView
+        android:id="@+id/controls_title"
+        android:text="@string/quick_controls_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:singleLine="true"
+        android:layout_gravity="center"
+        android:textSize="25sp"
+        android:textColor="@*android:color/foreground_material_dark"
+        android:fontFamily="@*android:string/config_headlineFontFamily" />
+  </LinearLayout>
 </merge>
diff --git a/packages/SystemUI/res/layout/controls_with_favorites.xml b/packages/SystemUI/res/layout/controls_with_favorites.xml
index 40b2476..2cd9505 100644
--- a/packages/SystemUI/res/layout/controls_with_favorites.xml
+++ b/packages/SystemUI/res/layout/controls_with_favorites.xml
@@ -1,3 +1,18 @@
+<!--
+  ~ Copyright (C) 2019 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <merge
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto">
diff --git a/packages/SystemUI/res/layout/global_actions_grid_v2.xml b/packages/SystemUI/res/layout/global_actions_grid_v2.xml
index f90012d..4fe21e5 100644
--- a/packages/SystemUI/res/layout/global_actions_grid_v2.xml
+++ b/packages/SystemUI/res/layout/global_actions_grid_v2.xml
@@ -2,15 +2,17 @@
 <ScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/global_actions_container"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
   <androidx.constraintlayout.widget.ConstraintLayout
       android:id="@+id/global_actions_grid_root"
       android:layout_width="match_parent"
-      android:layout_height="wrap_content"
+      android:layout_height="match_parent"
       android:clipChildren="false"
       android:clipToPadding="false"
+      android:paddingBottom="@dimen/global_actions_grid_container_shadow_offset"
       android:layout_marginBottom="@dimen/global_actions_grid_container_negative_shadow_offset">
 
     <com.android.systemui.globalactions.GlobalActionsFlatLayout
@@ -25,65 +27,20 @@
         android:gravity="top | center_horizontal"
         android:clipChildren="false"
         android:clipToPadding="false"
-        android:paddingBottom="@dimen/global_actions_grid_container_shadow_offset"
-        android:layout_marginTop="@dimen/global_actions_top_margin"
-        android:layout_marginBottom="@dimen/global_actions_grid_container_negative_shadow_offset">
+        android:layout_marginTop="@dimen/global_actions_top_margin">
       <LinearLayout
-          android:layout_height="wrap_content"
+          android:id="@android:id/list"
           android:layout_width="wrap_content"
-          android:layoutDirection="ltr"
-          android:clipChildren="false"
-          android:clipToPadding="false"
-          android:layout_marginBottom="@dimen/global_actions_grid_container_bottom_margin">
-        <!-- For separated items-->
-        <LinearLayout
-            android:id="@+id/separated_button"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_marginLeft="@dimen/global_actions_grid_side_margin"
-            android:layout_marginRight="@dimen/global_actions_grid_side_margin"
-            android:paddingLeft="@dimen/global_actions_grid_horizontal_padding"
-            android:paddingRight="@dimen/global_actions_grid_horizontal_padding"
-            android:paddingTop="@dimen/global_actions_grid_vertical_padding"
-            android:paddingBottom="@dimen/global_actions_grid_vertical_padding"
-            android:orientation="vertical"
-            android:gravity="center"
-            android:translationZ="@dimen/global_actions_translate"
-            />
-        <!-- Grid of action items -->
-        <com.android.systemui.globalactions.ListGridLayout
-            android:id="@android:id/list"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:gravity="right"
-            android:layout_marginRight="@dimen/global_actions_grid_side_margin"
-            android:translationZ="@dimen/global_actions_translate"
-            android:paddingLeft="@dimen/global_actions_grid_horizontal_padding"
-            android:paddingRight="@dimen/global_actions_grid_horizontal_padding"
-            android:paddingTop="@dimen/global_actions_grid_vertical_padding"
-            android:paddingBottom="@dimen/global_actions_grid_vertical_padding"
-            >
-          <LinearLayout
-              android:layout_width="wrap_content"
-              android:layout_height="wrap_content"
-              android:visibility="gone"
-              android:layoutDirection="locale"
-              />
-          <LinearLayout
-              android:layout_width="wrap_content"
-              android:layout_height="wrap_content"
-              android:visibility="gone"
-              android:layoutDirection="locale"
-              />
-          <LinearLayout
-              android:layout_width="wrap_content"
-              android:layout_height="wrap_content"
-              android:visibility="gone"
-              android:layoutDirection="locale"
-              />
-        </com.android.systemui.globalactions.ListGridLayout>
-      </LinearLayout>
+          android:layout_height="wrap_content"
+          android:layout_marginLeft="@dimen/global_actions_grid_side_margin"
+          android:layout_marginRight="@dimen/global_actions_grid_side_margin"
+          android:paddingLeft="@dimen/global_actions_grid_horizontal_padding"
+          android:paddingRight="@dimen/global_actions_grid_horizontal_padding"
+          android:paddingTop="@dimen/global_actions_grid_vertical_padding"
+          android:paddingBottom="@dimen/global_actions_grid_vertical_padding"
+          android:orientation="horizontal"
+          android:gravity="left"
+          android:translationZ="@dimen/global_actions_translate" />
     </com.android.systemui.globalactions.GlobalActionsFlatLayout>
 
     <LinearLayout
@@ -110,8 +67,7 @@
         android:layout_marginLeft="@dimen/global_actions_grid_horizontal_padding"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toRightOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/global_actions_panel">
-
-    </LinearLayout>
+        app:layout_constraintTop_toBottomOf="@id/global_actions_panel"
+        app:layout_constraintBottom_toBottomOf="parent" />
   </androidx.constraintlayout.widget.ConstraintLayout>
 </ScrollView>
diff --git a/packages/SystemUI/res/layout/global_screenshot.xml b/packages/SystemUI/res/layout/global_screenshot.xml
index 1f7def2..0b74a11a 100644
--- a/packages/SystemUI/res/layout/global_screenshot.xml
+++ b/packages/SystemUI/res/layout/global_screenshot.xml
@@ -55,15 +55,28 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
-        android:elevation="8dp"
+        android:elevation="@dimen/screenshot_preview_elevation"
         android:visibility="gone"
         android:background="@drawable/screenshot_rounded_corners"
         android:adjustViewBounds="true"/>
+    <FrameLayout
+        android:id="@+id/global_screenshot_dismiss_button"
+        android:layout_width="@dimen/screenshot_dismiss_button_tappable_size"
+        android:layout_height="@dimen/screenshot_dismiss_button_tappable_size"
+        android:elevation="9dp"
+        android:visibility="gone">
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_margin="@dimen/screenshot_dismiss_button_margin"
+            android:src="@drawable/screenshot_cancel"/>
+    </FrameLayout>
     <ImageView
         android:id="@+id/global_screenshot_flash"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:src="@android:color/white"
+        android:elevation="8dp"
         android:visibility="gone"/>
     <com.android.systemui.screenshot.ScreenshotSelectorView
         android:id="@+id/global_screenshot_selector"
diff --git a/packages/SystemUI/res/layout/keyguard_user_switcher_item.xml b/packages/SystemUI/res/layout/keyguard_user_switcher_item.xml
index d685528..fb38e1c 100644
--- a/packages/SystemUI/res/layout/keyguard_user_switcher_item.xml
+++ b/packages/SystemUI/res/layout/keyguard_user_switcher_item.xml
@@ -17,7 +17,7 @@
   -->
 
 <!-- LinearLayout -->
-<com.android.systemui.qs.tiles.UserDetailItemView
+<com.android.systemui.statusbar.policy.KeyguardUserDetailItemView
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:sysui="http://schemas.android.com/apk/res-auto"
         android:layout_width="wrap_content"
@@ -29,12 +29,13 @@
         android:background="@drawable/ripple_drawable"
         android:clipChildren="false"
         android:clipToPadding="false"
-        sysui:activatedFontFamily="sans-serif-medium">
+        sysui:regularTextAppearance="@style/TextAppearance.StatusBar.Expanded.UserSwitcher"
+        sysui:activatedTextAppearance="@style/TextAppearance.StatusBar.Expanded.UserSwitcher.Activated">
     <TextView android:id="@+id/user_name"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginEnd="13dp"
-            android:textAppearance="@style/TextAppearance.StatusBar.Expanded.UserSwitcher.UserName"
+            android:textAppearance="@style/TextAppearance.StatusBar.Expanded.UserSwitcher"
             />
     <com.android.systemui.statusbar.phone.UserAvatarView android:id="@+id/user_picture"
             android:layout_width="@dimen/framed_avatar_size"
@@ -47,4 +48,4 @@
             sysui:badgeDiameter="18dp"
             sysui:badgeMargin="1dp"
             sysui:frameColor="@color/qs_user_detail_avatar_frame" />
-</com.android.systemui.qs.tiles.UserDetailItemView>
+</com.android.systemui.statusbar.policy.KeyguardUserDetailItemView>
diff --git a/packages/SystemUI/res/layout/notification_conversation_info.xml b/packages/SystemUI/res/layout/notification_conversation_info.xml
index a9d6e35..8460612 100644
--- a/packages/SystemUI/res/layout/notification_conversation_info.xml
+++ b/packages/SystemUI/res/layout/notification_conversation_info.xml
@@ -28,7 +28,7 @@
     android:paddingStart="@*android:dimen/notification_content_margin_start">
 
     <!-- Package Info -->
-    <RelativeLayout
+    <LinearLayout
         android:id="@+id/header"
         android:layout_width="match_parent"
         android:layout_height="@dimen/notification_guts_conversation_header_height"
@@ -41,16 +41,20 @@
             android:layout_height="@dimen/notification_guts_conversation_icon_size"
             android:layout_centerVertical="true"
             android:layout_alignParentStart="true"
-            android:layout_marginEnd="6dp" />
+            android:layout_marginEnd="15dp" />
         <LinearLayout
             android:id="@+id/names"
+            android:layout_weight="1"
+            android:layout_width="0dp"
             android:orientation="vertical"
-            android:layout_width="wrap_content"
+
             android:layout_height="wrap_content"
             android:minHeight="@dimen/notification_guts_conversation_icon_size"
             android:layout_centerVertical="true"
             android:gravity="center_vertical"
-            android:layout_toEndOf="@id/conversation_icon">
+            android:layout_alignEnd="@id/conversation_icon"
+            android:layout_toEndOf="@id/conversation_icon"
+            android:layout_alignStart="@id/mute">
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
@@ -107,67 +111,40 @@
                     android:layout_weight="1"
                     style="@style/TextAppearance.NotificationImportanceChannel"/>
             </LinearLayout>
+            <TextView
+                android:id="@+id/delegate_name"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_centerVertical="true"
+                style="@style/TextAppearance.NotificationImportanceHeader"
+                android:layout_marginStart="2dp"
+                android:layout_marginEnd="2dp"
+                android:ellipsize="end"
+                android:text="@string/notification_delegate_header"
+                android:layout_toEndOf="@id/pkg_divider"
+                android:maxLines="1" />
 
         </LinearLayout>
 
-        <TextView
-            android:id="@+id/pkg_divider"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_centerVertical="true"
-            style="@style/TextAppearance.NotificationImportanceHeader"
-            android:layout_marginStart="2dp"
-            android:layout_marginEnd="2dp"
-            android:layout_toEndOf="@id/name"
-            android:text="@*android:string/notification_header_divider_symbol" />
-        <TextView
-            android:id="@+id/delegate_name"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_centerVertical="true"
-            style="@style/TextAppearance.NotificationImportanceHeader"
-            android:layout_marginStart="2dp"
-            android:layout_marginEnd="2dp"
-            android:ellipsize="end"
-            android:text="@string/notification_delegate_header"
-            android:layout_toEndOf="@id/pkg_divider"
-            android:maxLines="1" />
-
         <!-- end aligned fields -->
         <ImageButton
-            android:id="@+id/demote"
+            android:id="@+id/mute"
             android:layout_width="@dimen/notification_importance_toggle_size"
             android:layout_height="@dimen/notification_importance_toggle_size"
             android:layout_centerVertical="true"
             android:background="@drawable/ripple_drawable"
-            android:contentDescription="@string/demote"
-            android:src="@drawable/ic_demote_conversation"
-            android:layout_toStartOf="@id/app_settings"
-            android:tint="@color/notification_guts_link_icon_tint"/>
-        <!-- Optional link to app. Only appears if the channel is not disabled and the app
-asked for it -->
-        <ImageButton
-            android:id="@+id/app_settings"
-            android:layout_width="@dimen/notification_importance_toggle_size"
-            android:layout_height="@dimen/notification_importance_toggle_size"
-            android:layout_centerVertical="true"
-            android:visibility="gone"
-            android:background="@drawable/ripple_drawable"
-            android:contentDescription="@string/notification_app_settings"
-            android:src="@drawable/ic_info"
-            android:layout_toStartOf="@id/info"
+            android:layout_toStartOf="@id/fave"
             android:tint="@color/notification_guts_link_icon_tint"/>
         <ImageButton
-            android:id="@+id/info"
+            android:id="@+id/fave"
             android:layout_width="@dimen/notification_importance_toggle_size"
             android:layout_height="@dimen/notification_importance_toggle_size"
             android:layout_centerVertical="true"
             android:background="@drawable/ripple_drawable"
-            android:contentDescription="@string/notification_more_settings"
-            android:src="@drawable/ic_settings"
             android:layout_alignParentEnd="true"
             android:tint="@color/notification_guts_link_icon_tint"/>
-    </RelativeLayout>
+
+    </LinearLayout>
 
     <LinearLayout
         android:id="@+id/actions"
@@ -182,6 +159,23 @@
             android:layout_width="match_parent"
             android:layout_height="0.5dp"
             android:background="@color/GM2_grey_300" />
+
+        <Button
+            android:id="@+id/snooze"
+            android:layout_height="@dimen/notification_guts_conversation_action_height"
+            android:layout_width="match_parent"
+            style="?android:attr/borderlessButtonStyle"
+            android:text="@string/notification_menu_snooze_action"
+            android:gravity="left|center_vertical"
+            android:drawableStart="@drawable/ic_snooze"
+            android:drawablePadding="@dimen/notification_guts_conversation_action_text_padding_start"
+            android:drawableTint="@color/notification_guts_link_icon_tint"/>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="0.5dp"
+            android:background="@color/GM2_grey_300" />
+
         <Button
             android:id="@+id/bubble"
             android:layout_height="@dimen/notification_guts_conversation_action_height"
@@ -212,42 +206,15 @@
             android:layout_width="match_parent"
             android:layout_height="0.5dp"
             android:background="@color/GM2_grey_300" />
-        <Button
-            android:id="@+id/fave"
-            android:layout_height="@dimen/notification_guts_conversation_action_height"
-            android:layout_width="match_parent"
-            style="?android:attr/borderlessButtonStyle"
-            android:gravity="left|center_vertical"
-            android:drawablePadding="@dimen/notification_guts_conversation_action_text_padding_start"
-            android:drawableTint="@color/notification_guts_link_icon_tint"/>
 
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="0.5dp"
-            android:background="@color/GM2_grey_300" />
         <Button
-            android:id="@+id/snooze"
+            android:id="@+id/info"
             android:layout_height="@dimen/notification_guts_conversation_action_height"
             android:layout_width="match_parent"
             style="?android:attr/borderlessButtonStyle"
-            android:text="@string/notification_menu_snooze_action"
+            android:drawableStart="@drawable/ic_settings"
+            android:text="@string/notification_menu_settings_action"
             android:gravity="left|center_vertical"
-            android:drawableStart="@drawable/ic_snooze"
-            android:drawablePadding="@dimen/notification_guts_conversation_action_text_padding_start"
-            android:drawableTint="@color/notification_guts_link_icon_tint"/>
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="0.5dp"
-            android:background="@color/GM2_grey_300" />
-        <Button
-            android:id="@+id/mute"
-            android:layout_height="@dimen/notification_guts_conversation_action_height"
-            android:layout_width="match_parent"
-            style="?android:attr/borderlessButtonStyle"
-            android:text="@string/notification_conversation_mute"
-            android:gravity="left|center_vertical"
-            android:drawableStart="@drawable/ic_notifications_silence"
             android:drawablePadding="@dimen/notification_guts_conversation_action_text_padding_start"
             android:drawableTint="@color/notification_guts_link_icon_tint"/>
 
diff --git a/packages/SystemUI/res/layout/qs_carrier.xml b/packages/SystemUI/res/layout/qs_carrier.xml
index 28b2d21..a5b8cfa 100644
--- a/packages/SystemUI/res/layout/qs_carrier.xml
+++ b/packages/SystemUI/res/layout/qs_carrier.xml
@@ -14,7 +14,7 @@
   ~ limitations under the License
   -->
 
-<com.android.systemui.qs.QSCarrier
+<com.android.systemui.qs.carrier.QSCarrier
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/linear_carrier"
     android:layout_width="wrap_content"
@@ -46,4 +46,4 @@
         android:singleLine="true"
         android:maxEms="7"/>
 
-</com.android.systemui.qs.QSCarrier>
\ No newline at end of file
+</com.android.systemui.qs.carrier.QSCarrier>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/qs_carrier_group.xml b/packages/SystemUI/res/layout/qs_carrier_group.xml
index f2b0606..fd53a8b 100644
--- a/packages/SystemUI/res/layout/qs_carrier_group.xml
+++ b/packages/SystemUI/res/layout/qs_carrier_group.xml
@@ -15,7 +15,7 @@
   -->
 
 <!-- Extends LinearLayout -->
-<com.android.systemui.qs.QSCarrierGroup
+<com.android.systemui.qs.carrier.QSCarrierGroup
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/qs_mobile"
     android:layout_width="0dp"
@@ -71,4 +71,4 @@
         android:layout_weight="1"
         android:visibility="gone"/>
 
-</com.android.systemui.qs.QSCarrierGroup>
\ No newline at end of file
+</com.android.systemui.qs.carrier.QSCarrierGroup>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/qs_user_detail_item.xml b/packages/SystemUI/res/layout/qs_user_detail_item.xml
index c7bfaef..5c03e30 100644
--- a/packages/SystemUI/res/layout/qs_user_detail_item.xml
+++ b/packages/SystemUI/res/layout/qs_user_detail_item.xml
@@ -30,7 +30,8 @@
         android:clipToPadding="false"
         android:focusable="true"
         android:background="@drawable/ripple_drawable"
-        systemui:activatedFontFamily="sans-serif-medium">
+        systemui:regularTextAppearance="@style/TextAppearance.QS.UserSwitcher"
+        systemui:activatedTextAppearance="@style/TextAppearance.QS.UserSwitcher.Activated">
 
     <com.android.systemui.statusbar.phone.UserAvatarView
             android:id="@+id/user_picture"
@@ -52,8 +53,6 @@
                 android:id="@+id/user_name"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:textSize="@dimen/qs_detail_item_secondary_text_size"
-                android:textColor="?android:attr/textColorSecondary"
                 android:gravity="center_horizontal" />
         <ImageView
                 android:id="@+id/restricted_padlock"
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 478a93d..8ee7ee0 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoem om skerm te vul"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Strek om skerm te vul"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Skermkiekie"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Prent is ingevoeg"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"het \'n prent gestuur"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Stoor tans skermkiekie..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Stoor tans skermkiekie..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Skermkiekie is gestoor"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Probeer weer skermkiekie neem"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Kan weens beperkte bergingspasie nie skermkiekie stoor nie"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Die program of jou organisasie laat nie toe dat skermkiekies geneem word nie"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Skermopname"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Skermopnemer"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Deurlopende kennisgewing vir \'n skermopnamesessie"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Begin opname"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Neem stemopname op"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Wys tikke"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Tik om te stop"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Stop"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Laat wag"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Skermopname is uitgevee"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Kon nie skermopname uitvee nie"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Kon nie toestemmings kry nie"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Kon nie skermopname begin nie"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB-lêeroordrag-opsies"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Heg as \'n mediaspeler (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Heg as \'n kamera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Moenie weer wys nie"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Vee alles uit"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Bestuur"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Geskiedenis"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Stil kennisgewings"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Gesprekke"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Vee alle stil kennisgewings uit"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Help jou om te fokus sonder klank of vibrasie."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Kry jou aandag met klank of vibrasie."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Hou jou aandag met \'n swewende kortpad na hierdie inhoud toe."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Hierdie kennisgewings kan nie gewysig word nie."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Hierdie groep kennisgewings kan nie hier opgestel word nie"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Instaanbediener-kennisgewing"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Klaar"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Ontdoen"</string>
     <string name="demote" msgid="6225813324237153980">"Merk hierdie kennisgewing as \"nie \'n gesprek nie\""</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Gunsteling"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Ontmerk as gunsteling"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Demp"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Ontdemp"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Wys as borrel"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Skakel borrels af"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Belangrike gesprek"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Nie \'n belangrike gesprek nie"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Stilgemaak"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Waarskuwings"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Wys borrel"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Verwyder borrels"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Voeg by tuisskerm"</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">"kennisgewingkontroles"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"kennisgewing-sluimeropsies"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Sluimer"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Herinner my"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Instellings"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ONTDOEN"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Sluimer vir <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Databespaarder is af"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Aan"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Af"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Onbeskikbaar"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigasiebalk"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Uitleg"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Ekstra linksknoppie-tipe"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Vergrotingvenster"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Vergrotingvensterkontroles"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Vinnige kontroles"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Voeg kontroles by"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Kies \'n program vanwaar jy kontroles kan byvoeg"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> huidige gunstelinge.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> huidige gunsteling.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroles"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Kies kontroles vir kitstoegang"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 08a655a..7292020 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"ማያ እንዲሞላ አጉላ"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"ማያ ለመሙለት ሳብ"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ቅጽበታዊ ገጽ እይታ"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"ምስል ገብቷል"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ምስል ተልኳል"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"ቅጽበታዊ ገጽ እይታ በማስቀመጥ ላይ..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ቅጽበታዊ ገጽ እይታ በማስቀመጥ ላይ..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"ቅጽበታዊ ገጽ እይታ ተቀምጧል"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"ቅጽበታዊ ገጽ ዕይታን እንደገና ማንሳት ይሞክሩ"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"ባለው ውሱን የማከማቻ ቦታ ምክንያት ቅጽበታዊ ገጽ ዕይታን ማስቀመጥ አይችልም"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ቅጽበታዊ ገጽ እይታዎችን ማንሳት በመተግበሪያው ወይም በእርስዎ ድርጅት አይፈቀድም"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"የማያ ገጽ ቀረጻ"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"ማያ መቅረጫ"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ለአንድ የማያ ገጽ ቀረጻ ክፍለ-ጊዜ በመካሄድ ያለ ማሳወቂያ"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"መቅረጽ ጀምር"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"ድምጽን ቅረጽ"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"መታ ማድረጎችን አሳይ"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"መቅረጽ ይጀመር?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"እየቀረጹ ሳለ የAndroid ስርዓት በማያ ገጽዎ ላይ የሚታይ ወይም በመሣሪያዎ ላይ የሚጫወት ማንኛውም ሚስጥራዊነት ያለው መረጃን መያዝ ይችላል። ይህ የይለፍ ቃላትን፣ የክፍያ መረጃን፣ ፎቶዎችን፣ መልዕክቶችን እና ኦዲዮን ያካትታል።"</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_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_stop_text" msgid="6549288689506057686">"ለማቆም መታ ያድርጉ"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"አቁም"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"ባለበት አቁም"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"የማያ ገጽ ቀረጻ ተሰርዟል"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"የማያ ገጽ ቀረጻን መሰረዝ ላይ ስህተት"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"ፈቃዶችን ማግኘት አልተቻለም"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"የማያ ገጽ ቀረጻን መጀመር ላይ ስህተት"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"የUSB ፋይል ሰደዳ አማራጮች"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"እንደ ማህደረ አጫዋች (MTP) ሰካ"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"እንደ ካሜራ (PTP) ሰካ"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"ዳግመኛ አታሳይ"</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_gentle" msgid="3044910806569985386">"ጸጥ ያሉ ማሳወቂያዎች"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"ውይይቶች"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"ሁሉንም ጸጥ ያሉ ማሳወቂያዎችን ያጽዱ"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"ያለ ድምፅ ወይም ንዝረት እርስዎ ትኩረት እንዲያደርጉ ያግዛል።"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"ከድምፅ ወይም ንዝረት ጋር የእርስዎን ትኩረት ይስባል።"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ለዚህ ይዞታ ከተንሳፋፊ አቋራጭ ጋር የእርስዎን ትኩረት ያቆያል።"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"እነዚህ ማሳወቂያዎች ሊሻሻሉ አይችሉም።"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"የማሳወቂያዎች ይህ ቡድን እዚህ ላይ ሊዋቀር አይችልም"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"ተኪ ማሳወቂያ"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"ተከናውኗል"</string>
     <string name="inline_undo" msgid="9026953267645116526">"ቀልብስ"</string>
     <string name="demote" msgid="6225813324237153980">"ይህን ማሳወቂያ ውይይት እንዳልሆነ ምልክት ያድርጉበት"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"ተወዳጅ"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"ተወዳጅ አታድርግ"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"ድምጽ ዝጋ"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"ድምጽ ክፈት"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"እንደ አረፋ አሳይ"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"አረፋዎችን አጥፋ"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"አስፈላጊ ውይይት"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"አስፈላጊ ውይይት አይደለም"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"ድምጹ ተዘግቷል"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"ማንቃት"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"አረፋን አሳይ"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"አረፋዎችን አስወግድ"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"ወደ መነሻ ማያ ገጽ አክል"</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_snooze_action" msgid="8411152711279433989">"አሸልብ"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"አስታውሰኝ"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"ቅንብሮች"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ቀልብስ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"ለ<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> አሸልቧል"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"ውሂብ ቆጣቢ ጠፍቷል"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"በርቷል"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"ጠፍቷል"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"አይገኝም"</string>
     <string name="nav_bar" msgid="4642708685386136807">"የአሰሳ አሞሌ"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"አቀማመጥ"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"ተጨማሪ የግራ አዝራር ዓይነት"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"የማጉያ መስኮት"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"የማጉያ መስኮት መቆጣጠሪያዎች"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"ፈጣን መቆጣጠሪያዎች"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"መቆጣጠሪያዎችን ያክሉ"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"መቆጣጠሪያዎችን ከየት እንደሚታከሉ መተግበሪያ ይምረጡ"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> የአሁን ተወዳጆች።</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> የአሁን ተወዳጆች።</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"መቆጣጠሪያዎች"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"ለፈጣን መዳረሻ መቆጣጠሪያዎችን ይምረጡ"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 6ceb6cd..04ba45b 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"تكبير/تصغير لملء الشاشة"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"توسيع بملء الشاشة"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"لقطة شاشة"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"تم إدراج الصورة"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"أرسَل صورة"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"جارٍ حفظ لقطة الشاشة..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"جارٍ حفظ لقطة الشاشة..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"تم حفظ لقطة الشاشة."</string>
@@ -80,11 +80,31 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"جرّب أخذ لقطة الشاشة مرة أخرى"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"يتعذر حفظ لقطة الشاشة لأن مساحة التخزين المتاحة محدودة."</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"يحظر التطبيق أو تحظر مؤسستك التقاط لقطات شاشة"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"تسجيل الشاشة"</string>
+    <!-- no translation found for screenrecord_name (2596401223859996572) -->
+    <skip />
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"إشعار مستمر لجلسة تسجيل شاشة"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"بدء التسجيل"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"تسجيل التعليق الصوتي"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"عرض النقرات"</string>
+    <!-- no translation found for screenrecord_start_label (1750350278888217473) -->
+    <skip />
+    <!-- no translation found for screenrecord_description (1123231719680353736) -->
+    <skip />
+    <!-- no translation found for screenrecord_audio_label (6183558856175159629) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_label (9016927171280567791) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_description (4922694220572186193) -->
+    <skip />
+    <!-- no translation found for screenrecord_mic_label (2111264835791332350) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_and_mic_label (1831323771978646841) -->
+    <skip />
+    <!-- no translation found for screenrecord_start (330991441575775004) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_only (4459670242451527727) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_and_audio (5351133763125180920) -->
+    <skip />
+    <!-- no translation found for screenrecord_taps_label (1595690528298857649) -->
+    <skip />
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"انقر لإيقاف التسجيل"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"إيقاف"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"إيقاف مؤقت"</string>
@@ -97,6 +117,8 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"تمّ حذف تسجيل الشاشة."</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"حدث خطأ أثناء حذف تسجيل الشاشة."</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"تعذّر الحصول على أذونات."</string>
+    <!-- no translation found for screenrecord_start_error (2200660692479682368) -->
+    <skip />
     <string name="usb_preference_title" msgid="1439924437558480718">"‏خيارات نقل الملفات عبر USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"‏تثبيت كمشغل وسائط (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"‏تثبيت ككاميرا (PTP)"</string>
@@ -252,9 +274,9 @@
     <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="3344226652293797283">"تم إيقاف البلوتوث."</string>
     <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="1263282011749437549">"تم تشغيل البلوتوث."</string>
     <string name="accessibility_quick_settings_location_off" msgid="6122523378294740598">"إيقاف الإبلاغ عن الموقع."</string>
-    <string name="accessibility_quick_settings_location_on" msgid="6869947200325467243">"تشغيل الإبلاغ عن الموقع."</string>
+    <string name="accessibility_quick_settings_location_on" msgid="6869947200325467243">"تفعيل ميزة الإبلاغ عن الموقع الجغرافي."</string>
     <string name="accessibility_quick_settings_location_changed_off" msgid="5132776369388699133">"تم إيقاف الإبلاغ عن الموقع."</string>
-    <string name="accessibility_quick_settings_location_changed_on" msgid="7159115433070112154">"تم تشغيل الإبلاغ عن الموقع."</string>
+    <string name="accessibility_quick_settings_location_changed_on" msgid="7159115433070112154">"تم تفعيل ميزة الإبلاغ عن الموقع الجغرافي."</string>
     <string name="accessibility_quick_settings_alarm" msgid="558094529584082090">"تم ضبط المنبّه على <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_close" msgid="2974895537860082341">"إغلاق اللوحة."</string>
     <string name="accessibility_quick_settings_more_time" msgid="7646479831704665284">"وقت أكثر."</string>
@@ -274,7 +296,7 @@
     <string name="accessibility_quick_settings_work_mode_changed_off" msgid="6256690740556798683">"تم إيقاف وضع العمل."</string>
     <string name="accessibility_quick_settings_work_mode_changed_on" msgid="1105258550138313384">"تم تشغيل وضع العمل."</string>
     <string name="accessibility_quick_settings_data_saver_changed_off" msgid="4910847127871603832">"تم إيقاف توفير البيانات."</string>
-    <string name="accessibility_quick_settings_data_saver_changed_on" msgid="6370606590802623078">"تم تشغيل توفير البيانات."</string>
+    <string name="accessibility_quick_settings_data_saver_changed_on" msgid="6370606590802623078">"تم تفعيل توفير البيانات."</string>
     <string name="accessibility_quick_settings_sensor_privacy_changed_off" msgid="7608378211873807353">"تم إيقاف \"خصوصية أجهزة الاستشعار\"."</string>
     <string name="accessibility_quick_settings_sensor_privacy_changed_on" msgid="4267393685085328801">"تم تفعيل \"خصوصية أجهزة الاستشعار\"."</string>
     <string name="accessibility_brightness" msgid="5391187016177823721">"سطوع الشاشة"</string>
@@ -466,7 +488,7 @@
     <string name="user_logout_notification_text" msgid="7441286737342997991">"خروج المستخدم الحالي"</string>
     <string name="user_logout_notification_action" msgid="7974458760719361881">"خروج المستخدم"</string>
     <string name="user_add_user_title" msgid="4172327541504825032">"هل تريد إضافة مستخدم جديد؟"</string>
-    <string name="user_add_user_message_short" msgid="2599370307878014791">"عند إضافة مستخدم جديد، عليه إعداد مساحته.\n\nويُمكن لأي مستخدم تحديث التطبيقات لجميع المستخدمين الآخرين."</string>
+    <string name="user_add_user_message_short" msgid="2599370307878014791">"عند إضافة مستخدم جديد، عليه إعداد مساحته.\n\nويُمكن لأي مستخدم إعادة تحميل التطبيقات لجميع المستخدمين الآخرين."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"تم الوصول إلى أقصى عدد للمستخدمين"</string>
     <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
       <item quantity="zero">يمكنك إضافة ما يصل إلى <xliff:g id="COUNT">%d</xliff:g> مستخدم.</item>
@@ -489,6 +511,8 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"عدم الإظهار مرة أخرى"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"محو الكل"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"إدارة"</string>
+    <!-- no translation found for manage_notifications_history_text (57055985396576230) -->
+    <skip />
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"الإشعارات الصامتة"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"المحادثات"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"محو جميع الإشعارات الصامتة"</string>
@@ -688,6 +712,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"يساعدك هذا الإشعار على التركيز بدون صوت أو اهتزاز."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"يلفت هذا الإشعار انتباهك باستخدام الصوت والاهتزاز."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"يلفِت هذا الإشعار انتباهك لهذا المحتوى باستخدام اختصار عائم."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"يتعذّر تعديل هذه الإشعارات."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"يتعذّر ضبط مجموعة الإشعارات هذه هنا."</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"إشعار مستند إلى خادم وكيل"</string>
@@ -710,17 +738,25 @@
     <string name="notification_done" msgid="6215117625922713976">"تم"</string>
     <string name="inline_undo" msgid="9026953267645116526">"تراجع"</string>
     <string name="demote" msgid="6225813324237153980">"تحويل الإشعار من محادثة إلى إشعار عادي"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"المفضّلة"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"إزالة المحادثة من المفضّلة"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"كتم الصوت"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"إعادة الصوت"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"إظهار الإشعار كفقاعة تفسيرية"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"إيقاف الفقاعات التفسيرية"</string>
+    <!-- no translation found for notification_conversation_favorite (1905240206975921907) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unfavorite (181383708304763807) -->
+    <skip />
+    <!-- no translation found for notification_conversation_mute (268951550222925548) -->
+    <skip />
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"تنبيه"</string>
+    <!-- no translation found for notification_conversation_bubble (2242180995373949022) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unbubble (6908427185031099868) -->
+    <skip />
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"إضافة إلى الشاشة الرئيسية"</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_snooze_action" msgid="8411152711279433989">"تأجيل"</string>
+    <!-- no translation found for notification_menu_snooze_action (5415729610393475019) -->
+    <skip />
+    <!-- no translation found for notification_menu_settings_action (7085494017202764285) -->
+    <skip />
     <string name="snooze_undo" msgid="60890935148417175">"تراجع"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"تم تأجيل الإشعار لمدة <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -796,10 +832,12 @@
     <string name="accessibility_status_bar_headphones" msgid="1304082414912647414">"تم توصيل سماعات رأس"</string>
     <string name="accessibility_status_bar_headset" msgid="2699275863720926104">"تم توصيل سماعات رأس"</string>
     <string name="data_saver" msgid="3484013368530820763">"توفير البيانات"</string>
-    <string name="accessibility_data_saver_on" msgid="5394743820189757731">"تم تشغيل توفير البيانات"</string>
+    <string name="accessibility_data_saver_on" msgid="5394743820189757731">"تم تفعيل توفير البيانات"</string>
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"تم إيقاف توفير البيانات"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"مفعّل"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"إيقاف"</string>
+    <!-- no translation found for tile_unavailable (3095879009136616920) -->
+    <skip />
     <string name="nav_bar" msgid="4642708685386136807">"شريط التنقل"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"التنسيق"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"نوع زر اليسار الإضافي"</string>
@@ -887,12 +925,12 @@
     <string name="pip_phone_dismiss_hint" msgid="5825740708095316710">"اسحب لأسفل للإلغاء"</string>
     <string name="pip_menu_title" msgid="6365909306215631910">"القائمة"</string>
     <string name="pip_notification_title" msgid="8661573026059630525">"<xliff:g id="NAME">%s</xliff:g> يظهر في صورة داخل صورة"</string>
-    <string name="pip_notification_message" msgid="4991831338795022227">"إذا كنت لا تريد أن يستخدم <xliff:g id="NAME">%s</xliff:g> هذه الميزة، فانقر لفتح الإعدادات، ثم أوقِف تشغيل هذه الميزة."</string>
+    <string name="pip_notification_message" msgid="4991831338795022227">"إذا كنت لا تريد أن يستخدم <xliff:g id="NAME">%s</xliff:g> هذه الميزة، فانقر لفتح الإعدادات، ثم أوقِف تفعيل هذه الميزة."</string>
     <string name="pip_play" msgid="333995977693142810">"تشغيل"</string>
     <string name="pip_pause" msgid="1139598607050555845">"إيقاف مؤقت"</string>
     <string name="pip_skip_to_next" msgid="3864212650579956062">"التخطي إلى التالي"</string>
     <string name="pip_skip_to_prev" msgid="3742589641443049237">"التخطي إلى السابق"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"تم إيقاف تشغيل الهاتف بسبب الحرارة"</string>
+    <string name="thermal_shutdown_title" msgid="2702966892682930264">"تم إيقاف تفعيل الهاتف بسبب الحرارة"</string>
     <string name="thermal_shutdown_message" msgid="7432744214105003895">"يعمل هاتفك الآن بشكل طبيعي"</string>
     <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"ارتفعت درجة حرارة هاتفك بشدة، لذا تم إيقاف تشغيله لخفض درجة حرارته. يعمل هاتفك الآن بشكل طبيعي.\n\nقد ترتفع بشدة درجة حرارة هاتفك إذا:\n	• استخدمت تطبيقات كثيفة الاستخدام لموارد الجهاز (مثل الألعاب أو الفيديو أو تطبيقات التنقل)\n	• نزَّلت أو حمَّلت ملفات كبيرة الحجم\n	• استخدمت هاتفك وسط أجواء مرتفعة الحرارة"</string>
     <string name="high_temp_title" msgid="2218333576838496100">"تزداد درجة حرارة الهاتف"</string>
@@ -978,12 +1016,29 @@
     <string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"نقل إلى أسفل يمين الشاشة"</string>
     <string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"نقل إلى أسفل اليسار"</string>
     <string name="bubble_dismiss_text" msgid="7071770411580452911">"تجاهل"</string>
-    <string name="notification_content_system_nav_changed" msgid="5077913144844684544">"تم تحديث التنقل داخل النظام. لإجراء التغييرات، يُرجى الانتقال إلى \"الإعدادات\"."</string>
+    <string name="notification_content_system_nav_changed" msgid="5077913144844684544">"تم إعادة تحميل التنقل داخل النظام. لإجراء التغييرات، يُرجى الانتقال إلى \"الإعدادات\"."</string>
     <string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"الانتقال إلى \"الإعدادات\" لتعديل التنقل داخل النظام"</string>
     <string name="inattentive_sleep_warning_title" msgid="3891371591713990373">"وضع الاستعداد"</string>
     <string name="magnification_overlay_title" msgid="6584179429612427958">"نافذة تراكب التكبير"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"نافذة التكبير"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"عناصر التحكم في نافذة التكبير"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"عناصر التحكّم السريعة"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"إضافة عناصر تحكّم"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"اختيار تطبيق لإضافة عناصر التحكّم منه"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="zero"><xliff:g id="NUMBER_1">%s</xliff:g> عنصر مفضّل حالي</item>
+      <item quantity="two">عنصران مفضّلان (<xliff:g id="NUMBER_1">%s</xliff:g>) حاليان</item>
+      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> عناصر مفضّلة حالية</item>
+      <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> عنصرًا مفضّلاً حاليًا</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> عنصر مفضّل حالي</item>
+      <item quantity="one">عنصر مفضّل (<xliff:g id="NUMBER_0">%s</xliff:g>) واحد حالي</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"عناصر التحكّم"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"اختيار عناصر التحكّم للوصول السريع"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index ffefb48..76917bc 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"স্ক্ৰীণ পূর্ণ কৰিবলৈ জুম কৰক"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"স্ক্ৰীণ পূর্ণ কৰিবলৈ প্ৰসাৰিত কৰক"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"স্ক্ৰীনশ্বট"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"প্ৰতিচ্ছবি ভৰোৱা হ’ল"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"এখন প্ৰতিচ্ছবি পঠিয়াইছে"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"স্ক্ৰীণশ্বট ছেভ কৰি থকা হৈছে…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"স্ক্ৰীণশ্বট ছেভ কৰি থকা হৈছে…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"স্ক্ৰীণশ্বট ছেভ কৰা হ’ল"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"স্ক্ৰীণশ্বট আকৌ ল\'বলৈ চেষ্টা কৰক"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"সঞ্চয়াগাৰত সীমিত খালী ঠাই থকাৰ বাবে স্ক্ৰীণশ্বট ছেভ কৰিব পৰা নগ\'ল"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"এপটোৱে বা আপোনাৰ প্ৰতিষ্ঠানে স্ক্ৰীণশ্বট ল\'বলৈ অনুমতি নিদিয়ে"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"স্ক্রীণ ৰেকৰ্ডিং"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"স্ক্ৰীন ৰেকৰ্ডাৰ"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"স্ক্রীণ ৰেকৰ্ডিং ছেশ্বন চলি থকা সময়ত পোৱা জাননী"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"ৰেকৰ্ডিং কৰা আৰম্ভ কৰক"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"পাৰ্শ্ব-ধ্বনি ৰেকৰ্ড কৰক"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"টিপা ঠাইসমূহ দেখুৱাওক"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"ৰেকৰ্ড কৰা আৰম্ভ কৰিবনে?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"ৰেকৰ্ড কৰি থাকোঁতে, Android Systemএ আপোনাৰ স্ক্রীনত দৃশ্যমান হোৱা অথবা আপোনাৰ ডিভাইচত প্লে’ হৈ থকা যিকোনো সংবেনদশীল তথ্য কেপচাৰ কৰিব পাৰে। এইটোত পাছৱর্ড, পৰিশোধৰ তথ্য, ফট’, বার্তাসমূহ আৰু অডিঅ’ অন্তর্ভুক্ত হয়।"</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_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_stop_text" msgid="6549288689506057686">"বন্ধ কৰিবলৈ টিপক"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"বন্ধ কৰক"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"প\'জ কৰক"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"স্ক্রীণ ৰেকৰ্ডিং মচা হ’ল"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"স্ক্রীণ ৰেকৰ্ডিং মচি থাকোঁতে কিবা আসোঁৱাহ হ’ল"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"অনুমতি পাব পৰা নগ\'ল"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"স্ক্রীন ৰেকৰ্ড কৰা আৰম্ভ কৰোঁতে আসোঁৱাহ হৈছে"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"ইউএছবিৰে ফাইল স্থানান্তৰণৰ বিকল্পসমূহ"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"মিডিয়া প্লেয়াৰ (এমটিপি) হিচাপে সংলগ্ন কৰক"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"কেমেৰা (পিটিপি) হিচাপে সংলগ্ন কৰক"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"পুনৰাই নেদেখুৱাব"</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_gentle" msgid="3044910806569985386">"নীৰৱ জাননীসমূহ"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"বাৰ্তালাপসমূহ"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"সকলো নীৰৱ জাননী মচক"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"কোনো ধ্বনি অথবা কম্পন অবিহনে আপোনাক মনোযোগ দিয়াত সহায় কৰে।"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"ধ্বনি অথবা কম্পনৰ জৰিয়তে আপোনাৰ মনোযোগ আকৰ্ষণ কৰে।"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"উপঙি থকা এটা শ্বৰ্টকাটৰ জৰিয়তে এই সমলখিনিৰ প্ৰতি আপোনাক মনোযোগী কৰি ৰাখে।"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"এই জাননীসমূহ সংশোধন কৰিব নোৱাৰি।"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"এই ধৰণৰ জাননীবোৰ ইয়াত কনফিগাৰ কৰিব পৰা নাযায়"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"প্ৰক্সি হিচাপে পঠিওৱা জাননী"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"সম্পন্ন হ’ল"</string>
     <string name="inline_undo" msgid="9026953267645116526">"আনডু কৰক"</string>
     <string name="demote" msgid="6225813324237153980">"এই জাননীখন এটা বার্তালাপ নহয় বুলি চিহ্নিত কৰক"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"অপ্ৰিয় হিচাপে চিহ্নিত কৰক"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"অপ্ৰিয় হিচাপে চিহ্নিত কৰক"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"মিউট কৰক"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"আনমিউট কৰক"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"বাবল হিচাপে দেখুৱাওক"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"বাবলসমূহ অফ কৰক"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"গুৰুত্বপূর্ণ বার্তালাপ"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"এইটো কোনো গুৰুত্বপূর্ণ বার্তালাপ নহয়"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"নীৰৱ কৰি ৰখা হৈছে"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"সতৰ্কতামূলক"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"বাবল হিচাপে দেখুৱাওক"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"বাবলসমূহ আঁতৰাওক"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"গৃহ স্ক্ৰীনত যোগ কৰক"</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_snooze_action" msgid="8411152711279433989">"স্নুজ কৰক"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"মোক মনত পেলাই দিব"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"ছেটিংসমূহ"</string>
     <string name="snooze_undo" msgid="60890935148417175">"আনডু কৰক"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>ৰ বাবে স্নুজ কৰক"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"ডেটা সঞ্চয়কাৰী অফ হৈ আছে"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"অন"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"অফ"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"উপলব্ধ নহয়"</string>
     <string name="nav_bar" msgid="4642708685386136807">"নেভিগেশ্বন দণ্ড"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"লেআউট"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"বাওঁ বুটামৰ অতিৰিক্ত প্ৰকাৰ"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"বিবৰ্ধন অ’ভাৰলে’ৰ ৱিণ্ড’"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"বিবৰ্ধন ৱিণ্ড’"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"বিবৰ্ধন ৱিণ্ড’ৰ নিয়ন্ত্ৰণসমূহ"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"ক্ষিপ্ৰ নিয়ন্ত্ৰণসমূহ"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"নিয়ন্ত্ৰণসমূহ যোগ দিয়ক"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"এটা এপ্ বাছনি কৰক, যিটোৰ পৰা নিয়ন্ত্ৰণসমূহ যোগ দিয়া হ\'ব"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one">বর্তমানৰ প্ৰিয় <xliff:g id="NUMBER_1">%s</xliff:g> টা।</item>
+      <item quantity="other">বর্তমানৰ প্ৰিয় <xliff:g id="NUMBER_1">%s</xliff:g> টা।</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"নিয়ন্ত্ৰণসমূহ"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"ক্ষিপ্ৰ এক্সেছৰ বাবে নিয়ন্ত্ৰণসমূহ বাছনি কৰক"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 2caffff..cc3ede1 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Ekranı doldurmaq üçün yaxınlaşdır"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Ekranı doldurmaq üçün uzat"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Ekran şəkli"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Şəkil daxil edildi"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"şəkil göndərdi"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Skrinşot yadda saxlanılır..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Skrinşot yadda saxlanır..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Skrinşot yadda saxlandı"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Skrinşotu yenidən çəkin"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Yaddaş ehtiyatının az olması səbəbindən skrinşotu yadda saxlamaq olmur"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Skrinşot çəkməyə tətbiq və ya təşkilat tərəfindən icazə verilmir"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Ekranın Video Çəkimi"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Ekran Yazıcısı"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ekranın video çəkimi ərzində silinməyən bildiriş"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Ekranın Video Çəkimini Başladın"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Ekranın səsli video çəkimi"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Klikləmələri göstərin"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Yazmağa başlanılsın?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Yazarkən Android Sistemi ekranınızda görünən və ya cihazınızda göstərilən istənilən həssas məlumatı qeydə ala bilər. Buraya parollar, ödəniş məlumatı, fotolar, mesajlar və audio daxildir."</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_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">"Ekranda toxunuşları göstərin"</string>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Dayandırmaq üçün toxunun"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Dayandırın"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Dayandırın"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Ekranın video çəkimi silindi"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Ekranın video çəkiminin silinməsi zamanı xəta baş verdi"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"İcazələr əldə edilmədi"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Ekranın yazılması ilə bağlı xəta"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB fayl transferi seçimləri"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Media pleyer (MTP) kimi montaj edin"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Kamera kimi birləşdir (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Daha göstərmə"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Hamısını silin"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"İdarə edin"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Tarixçə"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Səssiz bildirişlər"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Söhbətlər"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Səssiz bildirişlərin hamısını silin"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Səs və ya vibrasiya olmadan fokuslanmağınıza kömək edir."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Səs və ya vibrasiya ilə diqqətinizi çəkir."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Bu məzmuna üzən qısayol ilə diqqətinizi cəlb edir."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirişlər dəyişdirilə bilməz."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Bu bildiriş qrupunu burada konfiqurasiya etmək olmaz"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Proksi bildirişi"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Hazırdır"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Ləğv edin"</string>
     <string name="demote" msgid="6225813324237153980">"Bu bildirişi \"söhbət deyil\" kimi qeyd edin."</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Sevimli"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Sevimlilərdən silin"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Səssiz"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Susdurmayın"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Qabarcıq kimi göstərin"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Qabarcıqları deaktiv edin"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Vacib söhbət"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Vacib söhbət deyil"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Susdurulub"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Siqnal"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Qabarcığı göstərin"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Qabarcıqları silin"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Əsas ekrana əlavə edin"</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">"bildiriş nəzarəti"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"bildiriş təxirə salma seçimləri"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Mürgü"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Mənə xatırladın"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Ayarlar"</string>
     <string name="snooze_undo" msgid="60890935148417175">"GERİ QAYTARIN"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> üçün təxirə salınıb"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Data Qənaəti deaktivdir"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Aktiv"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Deaktiv"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Əlçatan deyil"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Naviqasiya paneli"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Tərtibat"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Əlavə sol düymə növü"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Böyütmə Üst-üstə Düşən Pəncərəsi"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Böyütmə Pəncərəsi"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Böyütmə Pəncərəsi Kontrolları"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Sürətli Nizamlayıcılar"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Nizamlayıcılar əlavə edin"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Nizamlayıcıların hansı tətbiqdən əlavə ediləcəyini seçin"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">Hazırda <xliff:g id="NUMBER_1">%s</xliff:g> sevimli var.</item>
+      <item quantity="one">Hazırda <xliff:g id="NUMBER_0">%s</xliff:g> sevimli var.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Nizamlayıcılar"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Sürətli Giriş üçün nizamlayıcıları seçin"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index aaa35ff..7f4530a 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zumiraj na celom ekranu"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Razvuci na ceo ekran"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Snimak ekrana"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Slika je umetnuta"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"je poslao/la sliku"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Čuvanje snimka ekrana..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Čuvanje snimka ekrana..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Snimak ekrana je sačuvan"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Probajte da ponovo napravite snimak ekrana"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Čuvanje snimka ekrana nije uspelo zbog ograničenog memorijskog prostora"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Aplikacija ili organizacija ne dozvoljavaju pravljenje snimaka ekrana"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Snimanje ekrana"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Snimač ekrana"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Obaveštenje o sesiji snimanja ekrana je aktivno"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Započni snimanje"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Snimi prenos glasa"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Prikazuj dodire"</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_audio_label" msgid="6183558856175159629">"Snimi 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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Dodirnite da biste zaustavili"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Zaustavi"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pauziraj"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Snimak ekrana je izbrisan"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Došlo je do problema pri brisanju snimka ekrana"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Preuzimanje dozvola nije uspelo"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Greška pri pokretanju snimanja ekrana"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opcije USB prenosa datoteka"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Priključi kao medija plejer (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Priključi kao kameru (PTP)"</string>
@@ -480,6 +489,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Ne prikazuj ponovo"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Obriši sve"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Upravljajte"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Istorija"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Nečujna obaveštenja"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Konverzacije"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Obrišite sva nečujna obaveštenja"</string>
@@ -679,6 +689,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Pomaže vam da se koncentrišete bez zvuka ili vibracije."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Privlači vam pažnju pomoću zvuka ili vibracije."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Privlači vam pažnju pomoću plutajuće prečice do ovog sadržaja."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ova obaveštenja ne mogu da se menjaju."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Ova grupa obaveštenja ne može da se konfiguriše ovde"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Obaveštenje preko proksija"</string>
@@ -701,17 +715,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Gotovo"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Opozovi"</string>
     <string name="demote" msgid="6225813324237153980">"Označi da ovo obaveštenje nije konverzacija"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Označi kao omiljeno"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Ukloni iz omiljenih"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Isključi zvuk"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Uključi zvuk"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Prikaži kao oblačić"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Isključi oblačiće"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Važna konverzacija"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Nije važna konverzacija"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Zvuk je isključen"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Upozoravaj"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Prikaži oblačić"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Ukloni oblačiće"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Dodaj na početni ekran"</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">"kontrole obaveštenja"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opcije za odlaganje obaveštenja"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Odloži"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Podseti me"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Podešavanja"</string>
     <string name="snooze_undo" msgid="60890935148417175">"OPOZOVI"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Odloženo je za <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -785,6 +800,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Ušteda podataka je isključena"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Uključeno"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Isključeno"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Nedostupno"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Traka za navigaciju"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Raspored"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Dodatni tip levog dugmeta"</string>
@@ -970,4 +986,19 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Prozor za uvećanje"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Kontrole prozora za uvećanje"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Brze kontrole"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Dodajte kontrole"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Odaberite aplikaciju iz koje ćete dodavati kontrole"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> aktuelni favorit.</item>
+      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> aktuelna favorita.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> aktuelnih favorita.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrole"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Odaberite kontrole za brz pristup"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 619fd1c..0332091c 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Павял. на ўвесь экран"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Расцягн. на ўвесь экран"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Здымак экрана"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Відарыс устаўлены"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"адпраўлены відарыс"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Захаванне скрыншота..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Захаванне скрыншота..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Здымак экрана захаваны"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Паспрабуйце зрабіць здымак экрана яшчэ раз"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Немагчыма захаваць здымак экрана, бо мала месца ў сховішчы"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Рабіць здымкі экрана не дазваляе праграма ці ваша арганізацыя"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Запіс экрана"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Праграма запісу экрана"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Бягучае апавяшчэнне для сеанса запісу экрана"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Пачаць запіс"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Закадравае агучванне запісу"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Паказваць дотыкі"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Пачаць запіс?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Падчас запісу сістэма Android можа збіраць канфідэнцыяльную інфармацыю, якая адлюстроўваецца на экране вашай прылады ці прайграецца на ёй. Гэта могуць быць паролі, плацежная інфармацыя, фота, паведамленні і аўдыяданыя."</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_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_stop_text" msgid="6549288689506057686">"Націсніце, каб спыніць"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Спыніць"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Прыпыніць"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Запіс экрана выдалены"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Памылка выдалення запісу экрана"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Не ўдалося атрымаць дазволы"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Памылка пачатку запісу экрана"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Парам. перадачы файлаў па USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Падлучыць як медыяпрайгравальнік (ССП)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Падлучыць як камеру (PTP)"</string>
@@ -485,6 +494,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Не паказваць зноў"</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_gentle" msgid="3044910806569985386">"Апавяшчэнні без гуку"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Размовы"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Выдаліць усе апавяшчэнні без гуку"</string>
@@ -684,6 +694,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Не адцягвае ўвагу дзякуючы выключаным гуку і вібрацыі."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Прыцягвае ўвагу гукам і вібрацыяй."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Прыцягвае ўвагу да гэтага змесціва ўсплывальнай кнопкай."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Гэтыя апавяшчэнні нельга змяніць."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Тут канфігурыраваць гэту групу апавяшчэнняў забаронена"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Праксіраванае апавяшчэнне"</string>
@@ -706,17 +720,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Гатова"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Адрабіць"</string>
     <string name="demote" msgid="6225813324237153980">"Не пазначаць гэта апавяшчэнне як размову"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"У абранае"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Выдаліць з абранага"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Ігнараваць"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Уключыць паказ"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Паказваць як усплывальнае апавяшчэнне"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Выключыць усплывальныя апавяшчэнні"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Важная размова"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Размова не пазначана як важная"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Без гуку"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Уключыць гук"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Паказаць усплывальнае апавяшчэнне"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Выдаліць усплывальныя апавяшчэнні"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Дадаць на галоўны экран"</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_snooze_action" msgid="8411152711279433989">"Адкласці"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Нагадаць"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Налады"</string>
     <string name="snooze_undo" msgid="60890935148417175">"АДРАБІЦЬ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Адкладзена на <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -792,6 +807,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Эканомія трафіку адключана"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Уключана"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Выключана"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Недаступна"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Панэль навігацыі"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Раскладка"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Дадатковы тып кнопкі \"ўлева\""</string>
@@ -976,6 +992,21 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Акно-накладка з павелічэннем"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Акно павелічэння"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Налады акна павелічэння"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Элементы хуткага кіравання"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Дадаць сродкі кіравання"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Выберыце праграму, з якой трэба дадаць сродкі кіравання"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one">У абраным цяпер <xliff:g id="NUMBER_1">%s</xliff:g> элемент.</item>
+      <item quantity="few">У абраным цяпер <xliff:g id="NUMBER_1">%s</xliff:g> элементы.</item>
+      <item quantity="many">У абраным цяпер <xliff:g id="NUMBER_1">%s</xliff:g> элементаў.</item>
+      <item quantity="other">У абраным цяпер <xliff:g id="NUMBER_1">%s</xliff:g> элемента.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Сродкі кіравання"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Выберыце сродкі кіравання для хуткага доступу"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 99c1fec..8c8ce1d 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Мащаб – запълва екрана"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Разпъване – запълва екрана"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Екранна снимка"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Изображението бе вмъкнато"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"изпратено изображение"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Екранната снимка се запазва..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Екранната снимка се запазва..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Екранната снимка е запазена"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Опитайте да направите екранна снимка отново"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Екранната снимка не може да се запази поради ограничено място в хранилището"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Правенето на екранни снимки не е разрешено от приложението или организацията ви"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Записване на екрана"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Записване на екрана"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Текущо известие за сесия за записване на екрана"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Стартиране на записа"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Записване на озвучаване"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Показване на докосванията"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Да се стартира ли записът?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"По време на записване системата Android може да прихване поверителна информация, която е показана на екрана или възпроизвеждана на устройството ви. Това включва пароли, данни за плащане, снимки, съобщения и аудио."</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_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_stop_text" msgid="6549288689506057686">"Докоснете за спиране"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Спиране"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Поставяне на пауза"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Записът на екрана е изтрит"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"При изтриването на записа на екрана възникна грешка"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Извличането на разрешенията не бе успешно."</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"При стартирането на записа на екрана възникна грешка"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Опции за пренос на файлове чрез USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Свързване като медиен плейър (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Свързване като камера (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Да не се показва отново"</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_gentle" msgid="3044910806569985386">"Беззвучни известия"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Разговори"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Изчистване на всички беззвучни известия"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Помага ви да се фокусирате без звук или вибриране."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Привлича вниманието ви със звук или вибриране."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Задържа вниманието ви посредством плаващ пряк път към това съдържание."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Тези известия не могат да бъдат променяни."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Тази група от известия не може да бъде конфигурирана тук"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Известие, получено чрез делегиране"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Готово"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Отмяна"</string>
     <string name="demote" msgid="6225813324237153980">"Отбелязване, че известието не е за разговор"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Означаване като любим"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Не е любим"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Спиране"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Пускане"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Показване като балонче"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Изключване на балончетата"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Важен разговор"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Разговорът не е важен"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Без звуков сигнал"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Сигнализиране"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Показване на балонче"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Премахване на балончетата"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Добавяне към началния екран"</string>
     <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g> от <xliff:g id="APP_NAME">%1$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_snooze_action" msgid="8411152711279433989">"Отлагане"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Напомняне"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Настройки"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ОТМЯНА"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Отложено за <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Функцията „Икономия на данни“ е изключена"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Вкл."</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Изкл."</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Не е налице"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Лента за навигация"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Оформление"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Тип на допълнителния ляв бутон"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Прозорец за ниво на мащаба"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Контроли за прозореца за ниво на мащаба"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Бързи контроли"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Добавяне на контроли"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Изберете приложение, от което да добавите контроли"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">Понастоящем има <xliff:g id="NUMBER_1">%s</xliff:g> любими.</item>
+      <item quantity="one">Понастоящем има <xliff:g id="NUMBER_0">%s</xliff:g> любимо.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Контроли"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Изберете контроли за бърз достъп"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 1327cf4..84ae5b8 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"স্ক্রীণ পূরণ করতে জুম করুন"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"ফুল স্ক্রিন করুন"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"স্ক্রিনশট"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"ছবি যোগ করা হয়েছে"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"একটি ছবি পাঠানো হয়েছে"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"স্ক্রিনশট সেভ করা হচ্ছে..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"স্ক্রিনশট সেভ করা হচ্ছে..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"স্ক্রিনশট সেভ করা হয়েছে"</string>
@@ -80,11 +80,31 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"আবার স্ক্রিনশট নেওয়ার চেষ্টা করুন"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"বেশি জায়গা নেই তাই স্ক্রিনশটটি সেভ করা যাবে না৷"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"এই অ্যাপ বা আপনার প্রতিষ্ঠান স্ক্রিনশট নেওয়ার অনুমতি দেয়নি"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"স্ক্রিন রেকর্ডিং"</string>
+    <!-- no translation found for screenrecord_name (2596401223859996572) -->
+    <skip />
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"স্ক্রিন রেকর্ডিং সেশন চলার বিজ্ঞপ্তি"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"রেকর্ডিং শুরু করুন"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"ভয়েসওভার রেকর্ড করুন"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"ট্যাপগুলি দেখুন"</string>
+    <!-- no translation found for screenrecord_start_label (1750350278888217473) -->
+    <skip />
+    <!-- no translation found for screenrecord_description (1123231719680353736) -->
+    <skip />
+    <!-- no translation found for screenrecord_audio_label (6183558856175159629) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_label (9016927171280567791) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_description (4922694220572186193) -->
+    <skip />
+    <!-- no translation found for screenrecord_mic_label (2111264835791332350) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_and_mic_label (1831323771978646841) -->
+    <skip />
+    <!-- no translation found for screenrecord_start (330991441575775004) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_only (4459670242451527727) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_and_audio (5351133763125180920) -->
+    <skip />
+    <!-- no translation found for screenrecord_taps_label (1595690528298857649) -->
+    <skip />
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"বন্ধ করতে ট্যাপ করুন"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"বন্ধ করুন"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"পজ করুন"</string>
@@ -97,6 +117,8 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"স্ক্রিন রেকর্ডিং মুছে ফেলা হয়েছে"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"স্ক্রিন রেকডিং মুছে ফেলার সময় সমস্যা হয়েছে"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"অনুমতি পাওয়া যায়নি"</string>
+    <!-- no translation found for screenrecord_start_error (2200660692479682368) -->
+    <skip />
     <string name="usb_preference_title" msgid="1439924437558480718">"USB ফাইল স্থানান্তরের বিকল্পগুলি"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"একটি মিডিয়া প্লেয়ার হিসেবে মাউন্ট করুন (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"একটি ক্যামেরা হিসেবে মাউন্ট করুন (PTP)"</string>
@@ -477,6 +499,8 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"আর দেখাবেন না"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"সবকিছু সাফ করুন"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"পরিচালনা করুন"</string>
+    <!-- no translation found for manage_notifications_history_text (57055985396576230) -->
+    <skip />
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"নীরব বিজ্ঞপ্তি"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"কথোপকথন"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"সব নীরব বিজ্ঞপ্তি মুছুন"</string>
@@ -676,6 +700,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"সাউন্ড বা ভাইব্রেশন ছাড়া ফোকাস করতে আপনাকে সাহায্য করে।"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"সাউন্ড বা ভাইব্রেশনের সাহায্যে দৃষ্টি আকর্ষণ করে।"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ফ্লোটিং শর্টকাট ব্যবহার করে এই কন্টেন্টে আপনার দৃষ্টি আকর্ষণ করে রাখে।"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"এই বিজ্ঞপ্তিগুলি পরিবর্তন করা যাবে না।"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"এই সমস্ত বিজ্ঞপ্তিকে এখানে কনফিগার করা যাবে না"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"প্রক্সি করা বিজ্ঞপ্তি"</string>
@@ -698,17 +726,25 @@
     <string name="notification_done" msgid="6215117625922713976">"সম্পন্ন"</string>
     <string name="inline_undo" msgid="9026953267645116526">"আগের অবস্থায় ফিরে যান"</string>
     <string name="demote" msgid="6225813324237153980">"কথোপকথন হিসেবে এই বিজ্ঞপ্তি চিহ্নিত করবেন না"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"পছন্দসই"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"পছন্দসই থেকে সরান"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"মিউট করুন"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"আনমিউট করুন"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"পপ-আপ হিসেবে দেখুন"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"পপ-আপ বন্ধ করুন"</string>
+    <!-- no translation found for notification_conversation_favorite (1905240206975921907) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unfavorite (181383708304763807) -->
+    <skip />
+    <!-- no translation found for notification_conversation_mute (268951550222925548) -->
+    <skip />
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"সতর্ক করা"</string>
+    <!-- no translation found for notification_conversation_bubble (2242180995373949022) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unbubble (6908427185031099868) -->
+    <skip />
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"হোম স্ক্রিনে যোগ করুন"</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_snooze_action" msgid="8411152711279433989">"স্নুজ করুন"</string>
+    <!-- no translation found for notification_menu_snooze_action (5415729610393475019) -->
+    <skip />
+    <!-- no translation found for notification_menu_settings_action (7085494017202764285) -->
+    <skip />
     <string name="snooze_undo" msgid="60890935148417175">"পূর্বাবস্থায় ফিরুন"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> পরে আবার মনে করানো হবে"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +816,8 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"ডেটা সেভার বন্ধ আছে"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"চালু আছে"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"বন্ধ আছে"</string>
+    <!-- no translation found for tile_unavailable (3095879009136616920) -->
+    <skip />
     <string name="nav_bar" msgid="4642708685386136807">"নেভিগেশন বার"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"লেআউট"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"অতিরিক্ত বাঁদিকের বোতামের ধরণ"</string>
@@ -964,6 +1002,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"ওভারলে উইন্ডো বড় করে দেখা"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"উইন্ডো বড় করে দেখা"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"উইন্ডো কন্ট্রোল বড় করে দেখা"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"দ্রুত নিয়ন্ত্রণ"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"কন্ট্রোল যোগ করুন"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"এমন একটি অ্যাপ বাছুন যেটি থেকে কন্ট্রোল যোগ করা যাবে"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g>টি সাম্প্রতিক ফেভারিট।</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g>টি সাম্প্রতিক ফেভারিট।</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"নিয়ন্ত্রণ"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"দ্রুত অ্যাক্সেস করার জন্য কন্ট্রোল বেছে নিন"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 7bce70a..97b20d1 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Uvećaj prikaz na ekran"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Razvuci prikaz na ekran"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Snimak ekrana"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Slika je umetnuta"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"je poslao/la sliku"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Spašavanje snimka ekrana..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Spašavanje snimka ekrana..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Snimak ekrana je sačuvan"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Pokušajte ponovo snimiti ekran"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Snimak ekrana se ne može sačuvati zbog manjka prostora za pohranu"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Ova aplikacija ili vaša organizacija ne dozvoljavaju snimanje ekrana"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Snimanje ekrana"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Snimač 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="1539048263178882562">"Započni snimanje"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Govor snimka"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Prikaži dodire"</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_audio_label" msgid="6183558856175159629">"Snimi zvučni zapis"</string>
+    <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Zvuk uređaja"</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 i mikrofon uređaja"</string>
+    <string name="screenrecord_start" msgid="330991441575775004">"Počni"</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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Dodirnite za zaustavljanje"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Zaustavi"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pauza"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Snimak ekrana je izbrisan"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Greška prilikom brisanja snimka ekrana"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Dobijanje odobrenja nije uspjelo"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Greška pri pokretanju snimanja ekrana"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opcije USB prijenosa fajlova"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Reproduciranje medijskih sadržaja (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Priključiti kao kameru (PTP)"</string>
@@ -480,6 +489,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Ne prikazuj opet"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Očisti sve"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Upravljajte"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historija"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Nečujna obavještenja"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Razgovori"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Obriši sva nečujna obavještenja"</string>
@@ -681,6 +691,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Pomaže vam da se koncentrirate bez zvuka ili vibracije."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Privlači vašu pažnju pomoću zvuka ili vibracije."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Privlači vašu pažnju pomoću plutajuće prečice do ovog sadržaja."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ta obavještenja se ne mogu izmijeniti."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Ovdje nije moguće konfigurirati ovu grupu obavještenja"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Obavještenje preko proksi servera"</string>
@@ -703,17 +717,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Gotovo"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Opozovi"</string>
     <string name="demote" msgid="6225813324237153980">"Označi da ovo obavještenje nije razgovor"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Omiljeno"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Ukloni iz omiljenog"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Isključi zvuk"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Uključi zvuk"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Prikaži kao oblačić"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Isključi oblačiće"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Važan razgovor"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Ne radi se o važnom razgovoru"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Bez zvuka"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Upozorenja"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Prikaži oblačić"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Ukloni oblačiće"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Dodaj na početni ekran"</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">"kontrole obavještenja"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opcije za odgodu obavještenja"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Odgodi"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Podsjeti me"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Postavke"</string>
     <string name="snooze_undo" msgid="60890935148417175">"OPOZOVI"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Odgođeno za <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -787,6 +802,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Ušteda podataka je isključena"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Uključeno"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Isključeno"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Nedostupno"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigaciona traka"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Raspored"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Vrsta dodatnog dugmeta lijevo"</string>
@@ -972,4 +988,19 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Prozor za uvećavanje"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Kontrole prozora za uvećavanje"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Brze kontrole"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Dodavanje kontrola"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Odaberite aplikaciju za dodavanje kontrola"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one">Trenutno <xliff:g id="NUMBER_1">%s</xliff:g> omiljena.</item>
+      <item quantity="few">Trenutno <xliff:g id="NUMBER_1">%s</xliff:g> omiljene.</item>
+      <item quantity="other">Trenutno <xliff:g id="NUMBER_1">%s</xliff:g> omiljenih.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrole"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Odaberite kontrole za brzi pristup"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 5597f51..26074be 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom per omplir pantalla"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Estira per omplir pant."</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Captura de pantalla"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Imatge inserida"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ha enviat una imatge"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"S\'està desant captura de pantalla..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"S\'està desant la captura de pantalla..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"S\'ha desat la captura de pantalla"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Prova de tornar a fer una captura de pantalla"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"La captura de pantalla no es pot desar perquè no hi ha prou espai d\'emmagatzematge"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"L\'aplicació o la teva organització no permeten fer captures de pantalla"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Gravació de pantalla"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Gravadora 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="1539048263178882562">"Inicia la gravació"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Grava la veu en off"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Mostra els tocs"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Vols iniciar la gravació?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Quan graves contingut, 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_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">"Sons 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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Toca per aturar"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Atura"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Posa en pausa"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"S\'ha suprimit la gravació de la pantalla"</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_permission_error" msgid="7856841237023137686">"No s\'han pogut obtenir els permisos"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"S\'ha produït un error en iniciar la gravació de pantalla"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opcions transf. fitxers USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Munta com a reproductor multimèdia (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Munta com a càmera (PTP)"</string>
@@ -380,7 +389,7 @@
     <string name="quick_settings_cellular_detail_data_used" msgid="6798849610647988987">"Dades utilitzades: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
     <string name="quick_settings_cellular_detail_data_limit" msgid="1791389609409211628">"Límit: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
     <string name="quick_settings_cellular_detail_data_warning" msgid="7957253810481086455">"Advertiment: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
-    <string name="quick_settings_work_mode_label" msgid="2754212289804324685">"Perfil professional"</string>
+    <string name="quick_settings_work_mode_label" msgid="2754212289804324685">"Perfil de treball"</string>
     <string name="quick_settings_night_display_label" msgid="8180030659141778180">"Llum nocturna"</string>
     <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="3358706312129866626">"Al vespre"</string>
     <string name="quick_settings_night_secondary_label_until_sunrise" msgid="4063448287758262485">"Fins a l\'alba"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"No ho tornis a mostrar"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Esborra-ho tot"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Gestiona"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historial"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Notificacions silencioses"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Converses"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Esborra totes les notificacions silencioses"</string>
@@ -494,12 +504,12 @@
     <string name="quick_settings_disclosure_named_management" msgid="586473803771171610">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> gestiona el dispositiu"</string>
     <string name="quick_settings_disclosure_management_vpns" msgid="3447553497516286109">"Dispositiu gestionat per la teva organització i connectat a xarxes VPN"</string>
     <string name="quick_settings_disclosure_named_management_vpns" msgid="4066586579688193212">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> gestiona el dispositiu, que està connectat a xarxes VPN"</string>
-    <string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"És possible que la teva organització supervisi el trànsit de xarxa al teu perfil professional"</string>
-    <string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"És possible que <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> supervisi el trànsit de xarxa del teu perfil professional"</string>
+    <string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"És possible que la teva organització supervisi el trànsit de xarxa al teu perfil de treball"</string>
+    <string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"És possible que <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> supervisi el trànsit de xarxa del teu perfil de treball"</string>
     <string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"És possible que la xarxa estigui supervisada"</string>
     <string name="quick_settings_disclosure_vpns" msgid="2890510056934492407">"El dispositiu està connectat a xarxes VPN"</string>
-    <string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="5149334449426566152">"El perfil professional està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4201831495800021670">"El perfil professional està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
+    <string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="5149334449426566152">"El perfil de treball està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
+    <string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4201831495800021670">"El perfil de treball està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
     <string name="quick_settings_disclosure_named_vpn" msgid="5069088739435424666">"El dispositiu està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
     <string name="monitoring_title_device_owned" msgid="7029691083837606324">"Gestió del dispositiu"</string>
     <string name="monitoring_title_profile_owned" msgid="6301118649405449568">"Supervisió del perfil"</string>
@@ -513,12 +523,12 @@
     <string name="monitoring_description_named_management" msgid="7424612629468754552">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> gestiona el dispositiu.\n\nL\'administrador pot supervisar i gestionar la configuració, l\'accés corporatiu, les aplicacions, les dades associades al dispositiu, inclosa la informació d\'ubicació.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
     <string name="monitoring_description_management" msgid="8081910434889677718">"La teva organització gestiona el dispositiu.\n\nL\'administrador pot supervisar i gestionar la configuració, l\'accés corporatiu, les aplicacions, les dades associades al dispositiu, inclosa la informació d\'ubicació.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
     <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"La teva organització ha instal·lat una autoritat de certificació en aquest dispositiu. És possible que el trànsit a la xarxa segura se supervisi o es modifiqui."</string>
-    <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"La teva organització ha instal·lat una autoritat de certificació al teu perfil professional. És possible que el trànsit de xarxa segura se supervisi o es modifiqui."</string>
+    <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"La teva organització ha instal·lat una autoritat de certificació al teu perfil de treball. És possible que el trànsit de xarxa segura se supervisi o es modifiqui."</string>
     <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_named_vpn" msgid="5749932930634037027">"Estàs connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
     <string name="monitoring_description_two_named_vpns" msgid="3516830755681229463">"Estàs connectat a <xliff:g id="VPN_APP_0">%1$s</xliff:g> i <xliff:g id="VPN_APP_1">%2$s</xliff:g>, que poden supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
-    <string name="monitoring_description_managed_profile_named_vpn" msgid="368812367182387320">"El teu perfil professional està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
+    <string name="monitoring_description_managed_profile_named_vpn" msgid="368812367182387320">"El teu perfil de treball està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="8179722332380953673">"El teu perfil personal està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>,que pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
     <string name="monitoring_description_do_header_generic" msgid="6130190408164834986">"El teu dispositiu està gestionat per <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
     <string name="monitoring_description_do_header_with_name" msgid="2696255132542779511">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utilitza <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> per gestionar el teu dispositiu."</string>
@@ -532,13 +542,13 @@
     <string name="monitoring_description_ca_cert_settings" msgid="8329781950135541003">"Obre les credencials de confiança"</string>
     <string name="monitoring_description_network_logging" msgid="577305979174002252">"L\'administrador ha activat el registre de xarxa, que supervisa el trànsit del teu dispositiu.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
     <string name="monitoring_description_vpn" msgid="1685428000684586870">"Has donat permís a una aplicació per configurar una connexió VPN.\n\nAquesta aplicació pot supervisar el dispositiu i l\'activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="4964237035412372751">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el teu perfil professional.\n\nL\'administrador pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador.\n\nA més, estàs connectat a una VPN, que també pot supervisar la teva activitat a la xarxa."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="4964237035412372751">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el teu perfil de treball.\n\nL\'administrador pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador.\n\nA més, estàs connectat a una VPN, que també pot supervisar la teva activitat a la xarxa."</string>
     <string name="legacy_vpn_name" msgid="4174223520162559145">"VPN"</string>
     <string name="monitoring_description_app" msgid="376868879287922929">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
     <string name="monitoring_description_app_personal" msgid="1970094872688265987">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat personal a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
     <string name="branded_monitoring_description_app_personal" msgid="1703511985892688885">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat personal a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
-    <string name="monitoring_description_app_work" msgid="3713084153786663662">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el teu perfil professional. El perfil està connectat a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pot supervisar la teva activitat a la xarxa de treball, com ara els correus electrònics, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
-    <string name="monitoring_description_app_personal_work" msgid="6175816356939166101">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el teu perfil professional. El perfil està connectat a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pot supervisar la teva activitat a la xarxa de treball, com ara els correus electrònics, les aplicacions i els llocs web.\n\nTambé estàs connectat a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pot supervisar la teva activitat personal a la xarxa."</string>
+    <string name="monitoring_description_app_work" msgid="3713084153786663662">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el teu perfil de treball. El perfil està connectat a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pot supervisar la teva activitat a la xarxa de treball, com ara els correus electrònics, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
+    <string name="monitoring_description_app_personal_work" msgid="6175816356939166101">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el teu perfil de treball. El perfil està connectat a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pot supervisar la teva activitat a la xarxa de treball, com ara els correus electrònics, les aplicacions i els llocs web.\n\nTambé estàs connectat a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pot supervisar la teva activitat personal a la xarxa."</string>
     <string name="keyguard_indication_trust_unlocked" msgid="7395154975733744547">"Desbloquejat per TrustAgent"</string>
     <string name="keyguard_indication_trust_disabled" msgid="6820793704816727918">"El dispositiu continuarà bloquejat fins que no el desbloquegis manualment."</string>
     <string name="hidden_notifications_title" msgid="1782412844777612795">"Rep notificacions més ràpidament"</string>
@@ -615,7 +625,7 @@
     <string name="show_demo_mode" msgid="3677956462273059726">"Mostra el mode de demostració"</string>
     <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string>
     <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string>
-    <string name="status_bar_work" msgid="5238641949837091056">"Perfil professional"</string>
+    <string name="status_bar_work" msgid="5238641949837091056">"Perfil de treball"</string>
     <string name="status_bar_airplane" msgid="4848702508684541009">"Mode d\'avió"</string>
     <string name="add_tile" msgid="6239678623873086686">"Afegeix un mosaic"</string>
     <string name="broadcast_tile" msgid="5224010633596487481">"Mosaic d\'emissió"</string>
@@ -625,7 +635,7 @@
     <string name="alarm_template_far" msgid="3561752195856839456">"Dia: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_detail" msgid="544463655956179791">"Configuració ràpida, <xliff:g id="TITLE">%s</xliff:g>."</string>
     <string name="accessibility_status_bar_hotspot" msgid="2888479317489131669">"Punt d\'accés Wi-Fi"</string>
-    <string name="accessibility_managed_profile" msgid="4703836746209377356">"Perfil professional"</string>
+    <string name="accessibility_managed_profile" msgid="4703836746209377356">"Perfil de treball"</string>
     <string name="tuner_warning_title" msgid="7721976098452135267">"Diversió per a uns quants, però no per a tothom"</string>
     <string name="tuner_warning" msgid="1861736288458481650">"El Personalitzador d\'interfície d\'usuari presenta opcions addicionals per canviar i personalitzar la interfície d\'usuari d\'Android. És possible que aquestes funcions experimentals canviïn, deixin de funcionar o desapareguin en versions futures. Continua amb precaució."</string>
     <string name="tuner_persistent_warning" msgid="230466285569307806">"És possible que aquestes funcions experimentals canviïn, deixin de funcionar o desapareguin en versions futures. Continua amb precaució."</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"T\'ajuda a concentrar-te sense so ni vibració."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Atrau la teva atenció amb so i vibració."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Atrau la teva atenció amb una drecera flotant a aquest contingut."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Aquestes notificacions no es poden modificar."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Aquest grup de notificacions no es pot configurar aquí"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Notificació mitjançant aplicació intermediària"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Fet"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Desfés"</string>
     <string name="demote" msgid="6225813324237153980">"Marca que la notificació no és una conversa"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Marca com a preferida"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Desmarca com a preferida"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Silencia"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Deixa de silenciar"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Mostra com a bombolla"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Desactiva les bombolles"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Conversa important"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Conversa no important"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Silenciada"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alerta"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Mostra com a bombolla"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Suprimeix les bombolles"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Afegeix a la pantalla d\'inici"</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">"controls de notificació"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opcions per posposar la notificació"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Posposa"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Recorda-m\'ho"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Configuració"</string>
     <string name="snooze_undo" msgid="60890935148417175">"DESFÉS"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"S\'ha posposat <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Economitzador de dades desactivada"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Activat"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Desactivat"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"No disponible"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Barra de navegació"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Disposició"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Tipus de botó addicional de l\'esquerra"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Finestra d\'ampliació"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Finestra de controls d\'ampliació"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Controls ràpids"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Afegeix controls"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Tria una aplicació de la qual vulguis afegir controls"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> preferits actuals.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> preferit actual.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Tria controls per a l\'accés ràpid"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index a608c5b..dc01532 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Přiblížit na celou obrazovku"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Na celou obrazovku"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Snímek obrazovky"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Vložen obrázek"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"odesílá obrázek"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Ukládání snímku obrazovky..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Ukládání snímku obrazovky..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Snímek obrazovky byl uložen"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Zkuste snímek pořídit znovu"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Snímek obrazovky kvůli nedostatku místa v úložišti nelze uložit"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Aplikace nebo organizace zakazuje pořizování snímků obrazovky"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Nahrávání obrazovky"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Nahrávání obrazovky"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Trvalé oznámení o relaci nahrávání"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Spustit nahrávání"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Nahrávat komentář"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Zobrazovat klepnutí"</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_audio_label" msgid="6183558856175159629">"Nahrát 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ěcí tóny"</string>
+    <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
+    <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Zvuk a mikrofon zařízení"</string>
+    <string name="screenrecord_start" msgid="330991441575775004">"Spustit"</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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Klepnutím zastavíte"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Zastavit"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pozastavit"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Záznam obrazovky byl smazán"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Při mazání záznamu obrazovky došlo k chybě"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Nepodařilo se načíst oprávnění"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Při spouštění nahrávání obrazovky došlo k chybě"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Možnosti přenosu souborů pomocí rozhraní USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Připojit jako přehrávač médií (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Připojit jako fotoaparát (PTP)"</string>
@@ -483,6 +492,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Tuto zprávu příště nezobrazovat"</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_gentle" msgid="3044910806569985386">"Tichá 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>
@@ -682,6 +692,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Pomáhá vám soustředit se vypnutím zvuku a vibrací."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Upozorňuje vás pomocí zvuku a vibrací."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Přitahuje pozornost pomocí plovoucí zkratky k tomuto obsahu."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Tato oznámení nelze upravit."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Tuto skupinu oznámení tady nelze nakonfigurovat"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Zprostředkované oznámení"</string>
@@ -704,17 +718,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Hotovo"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Zpět"</string>
     <string name="demote" msgid="6225813324237153980">"Označit, že toto oznámení není součástí konverzace"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Přidat mezi oblíbené"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Odebrat z oblíbených"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Ignorovat"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Přestat ignorovat"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Zobrazit jako bublinu"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Vypnout bubliny"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Důležitá konverzace"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Není důležitá konverzace"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Bez zvuku"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Upozornění"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Zobrazit bublinu"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Odstranit bubliny"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Přidat na plochu"</string>
     <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g> aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_menu_gear_description" msgid="6429668976593634862">"Nastavení oznámení"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"Možnosti odložení oznámení"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Odložit"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Připomenutí"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Nastavení"</string>
     <string name="snooze_undo" msgid="60890935148417175">"VRÁTIT ZPĚT"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Odloženo o <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -790,6 +805,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Spořič dat je vypnutý"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Zapnuto"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Vypnuto"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Nedostupné"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigační panel"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Rozvržení"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Zvláštní typ tlačítka vlevo"</string>
@@ -975,4 +991,20 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Zvětšovací okno"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Ovládací prvky zvětšovacího okna"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Rychlé ovládací prvky"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Přidání ovládacích prvků"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Vyberte aplikaci, ze které chcete přidat ovládací prvky"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> stávající oblíbené.</item>
+      <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> stávajících oblíbených.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> stávajících oblíbených.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> stávající oblíbený.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Ovládací prvky"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Vyberte ovládací prvky pro rychlý přístup"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 9fb7783..261a80c 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom til fuld skærm"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Stræk til fuld skærm"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Billedet blev indsat"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"sendte et billede"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Gemmer screenshot..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Gemmer screenshot..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Screenshottet blev gemt"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Prøv at tage et screenshot igen"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Screenshottet kan ikke gemmes, fordi der er begrænset lagerplads"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Appen eller din organisation tillader ikke, at du tager screenshots"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Skærmoptagelse"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Skærmoptager"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Konstant notifikation om skærmoptagelse"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Start optagelse"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Optag voiceover"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Vis tryk"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Tryk for at stoppe"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Stop"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Sæt på pause"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Skærmoptagelsen er slettet"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Der opstod en fejl ved sletning af skærmoptagelsen"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Det lykkedes ikke et hente tilladelserne"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Skærmoptagelsen kunne ikke startes"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Muligheder for USB-filoverførsel"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Isæt som en medieafspiller (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Isæt som et kamera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Vis ikke igen"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Ryd alle"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Administrer"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historik"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Lydløse notifikationer"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Samtaler"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Ryd alle lydløse notifikationer"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Ingen lyde eller vibrationer, der forstyrrer dig."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Fanger din opmærksomhed med lyd eller vibration."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Fastholder din opmærksomhed med en svævende genvej til indholdet."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Disse notifikationer kan ikke redigeres."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Du kan ikke konfigurere denne gruppe notifikationer her"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Proxyforbundet notifikation"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Udfør"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Fortryd"</string>
     <string name="demote" msgid="6225813324237153980">"Markér denne notifikation som ikke en samtale"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Angiv som favorit"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Fjern som favorit"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Slå lyden fra"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Slå lyden til"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Vis som boble"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Slå bobler fra"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Vigtig samtale"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Ikke en vigtig samtale"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Lydløs"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Underretninger"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Vis boble"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Fjern bobler"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Føj til startskærm"</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">"kontrolelementer til notifikationer"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"Indstillinger for udsættelse"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Udsæt"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Påmind mig"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Indstillinger"</string>
     <string name="snooze_undo" msgid="60890935148417175">"FORTRYD"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Udsat i <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Datasparefunktionen er slået fra"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Til"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Fra"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Ikke tilgængelig"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigationslinje"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Layout"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Ekstra venstre knaptype"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Vindue med forstørrelse"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Vindue med forstørrelsesstyring"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Hurtig betjening"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Tilføj betjeningselementer"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Vælg en app at tilføje betjeningselementer fra"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> aktuel favorit.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> aktuelle favoritter.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Betjeningselementer"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Vælg betjeningselementer til hurtig adgang"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 9d83e9c..28d53ec 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom auf Bildschirmgröße"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Auf Bildschirmgröße anpassen"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Bild eingefügt"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"Bild gesendet"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Screenshot wird gespeichert..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Screenshot wird gespeichert..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Screenshot gespeichert"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Versuche noch einmal, den Screenshot zu erstellen"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Speichern des Screenshots aufgrund von zu wenig Speicher nicht möglich"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Die App oder deine Organisation lässt das Erstellen von Screenshots nicht zu"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Bildschirmaufzeichnung"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Bildschirmaufzeichnung"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Fortlaufende Benachrichtigung für eine Bildschirmaufzeichnung"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Aufzeichnung starten"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Voice-over aufnehmen"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Fingertipps anzeigen"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Aufzeichnung starten?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Beim Aufnehmen kann 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_audio_label" msgid="6183558856175159629">"Audio aufnehmen"</string>
+    <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audioausgabe 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 über Gerät und Mikrofon aufnehmen"</string>
+    <string name="screenrecord_start" msgid="330991441575775004">"Start"</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">"Tippen auf dem Display anzeigen"</string>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Zum Stoppen tippen"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Anhalten"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pausieren"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Bildschirmaufzeichnung gelöscht"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Fehler beim Löschen der Bildschirmaufzeichnung"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Berechtigungen nicht erhalten"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Fehler beim Start der Bildschirmaufzeichnung"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB-Dateiübertragungsoptionen"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Als Medienplayer (MTP) bereitstellen"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Als Kamera (PTP) bereitstellen"</string>
@@ -481,6 +490,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Nicht mehr anzeigen"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Alle löschen"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Verwalten"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Verlauf"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Lautlose Benachrichtigungen"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Unterhaltungen"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Alle lautlosen Benachrichtigungen löschen"</string>
@@ -680,6 +690,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Benachrichtigungen werden ohne Ton oder Vibration angekündigt, um deine Konzentration nicht zu stören."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Benachrichtigungen werden mit einem Ton oder einer Vibration angekündigt."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Du wirst mit einer unverankerten Verknüpfung darauf aufmerksam gemacht."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Diese Benachrichtigungen können nicht geändert werden."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Die Benachrichtigungsgruppe kann hier nicht konfiguriert werden"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Weitergeleitete Benachrichtigung"</string>
@@ -702,17 +716,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Fertig"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Rückgängig machen"</string>
     <string name="demote" msgid="6225813324237153980">"Diese Benachrichtigung als keine Unterhaltung markieren"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Favorit"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Aus Favoriten entfernen"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Stummschalten"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Stummschaltung aufheben"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Als Infofeld anzeigen"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Infofelder deaktivieren"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Wichtige Unterhaltung"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Keine wichtige Unterhaltung"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Stummgeschaltet"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Nicht stummgeschaltet"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Infofeld anzeigen"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Infofelder entfernen"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Zum Startbildschirm hinzufügen"</string>
     <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g> – <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_menu_gear_description" msgid="6429668976593634862">"Benachrichtigungseinstellungen"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"Optionen für spätere Erinnerung bei Benachrichtigungen"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Schlummern"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Erinnern"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Einstellungen"</string>
     <string name="snooze_undo" msgid="60890935148417175">"RÜCKGÄNGIG"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Erinnerung in <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -784,6 +799,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Datensparmodus deaktiviert"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"An"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Aus"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Nicht verfügbar"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigationsleiste"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Layout"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Zusätzlicher linker Schaltflächentyp"</string>
@@ -968,6 +984,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Overlay-Vergrößerungsfenster"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Vergrößerungsfenster"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Einstellungen für Vergrößerungsfenster"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Schnellsteuerung"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Steuerelemente hinzufügen"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"App auswählen, über die Steuerelemente hinzugefügt werden sollen"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> aktuelle Favoriten.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> aktueller Favorit.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Steuerelemente"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Steuerelemente für den Schnellzugriff auswählen"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index b94d10c..2ca15c8 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Ζουμ σε πλήρη οθόνη"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Προβoλή σε πλήρη οθ."</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Στιγμιότυπο οθόνης"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Έγινε εισαγωγή εικόνας"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"έστειλε μια εικόνα"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Αποθήκ. στιγμιότυπου οθόνης..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Αποθήκευση στιγμιότυπου οθόνης..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Το στιγμιότυπο οθόνης αποθηκεύτηκε"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Δοκιμάστε να κάνετε ξανά λήψη του στιγμιότυπου οθόνης"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Αδύνατη η αποθήκευση του στιγμιότυπου οθόνης λόγω περιορισμένου αποθηκευτικού χώρου"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Η λήψη στιγμιότυπων οθόνης δεν επιτρέπεται από την εφαρμογή ή τον οργανισμό σας"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Εγγραφή οθόνης"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Εγγραφή οθόνης"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ειδοποίηση σε εξέλιξη για μια περίοδο λειτουργίας εγγραφής οθόνης"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Έναρξη εγγραφής"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Εγγραφή σπικάζ"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Εμφάνιση πατημάτων"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Έναρξη εγγραφής;"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Κατά την εγγραφή, το σύστημα Android μπορεί να καταγράψει τυχόν ευαίσθητες πληροφορίες που είναι ορατές στην οθόνη ή αναπαράγονται στη συσκευή σας. Σε αυτές περιλαμβάνονται οι κωδικοί πρόσβασης, οι πληροφορίες πληρωμής, οι φωτογραφίες, τα μηνύματα και ο ήχος."</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_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_stop_text" msgid="6549288689506057686">"Πατήστε για διακοπή"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Διακοπή"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Παύση"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Η εγγραφή οθόνης διαγράφηκε"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Παρουσιάστηκε σφάλμα κατά τη διαγραφή της εγγραφής οθόνης"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Η λήψη αδειών απέτυχε"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Σφάλμα κατά την έναρξη της εγγραφής οθόνης"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Επιλογές μεταφοράς αρχείων μέσω USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Προσάρτηση ως μονάδας αναπαραγωγής μέσων (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Προσάρτηση ως κάμερας (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Να μην εμφανιστεί ξανά"</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_gentle" msgid="3044910806569985386">"Ειδοποιήσεις σε σίγαση"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Συνομιλίες"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Διαγραφή όλων των ειδοποιήσεων σε σίγαση"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Σας βοηθά να συγκεντρωθείτε χωρίς ήχο και δόνηση."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Τραβά την προσοχή σας με ήχο ή δόνηση."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Κρατάει την προσοχή σας με μια κινούμενη συντόμευση προς αυτό το περιεχόμενο."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Δεν είναι δυνατή η τροποποίηση αυτών των ειδοποιήσεων"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Δεν είναι δυνατή η διαμόρφωση αυτής της ομάδας ειδοποιήσεων εδώ"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Ειδοποίηση μέσω διακομιστή μεσολάβησης"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Τέλος"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Αναίρεση"</string>
     <string name="demote" msgid="6225813324237153980">"Επισήμανση αυτής της ειδοποίησης ως μη συνομιλίας"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Αγαπημένη"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Μη αγαπημένη"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Σίγαση"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Κατάργηση σίγασης"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Εμφάνιση ως φούσκας"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Απενεργοποίηση φουσκών"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Σημαντική συνομιλία"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Δεν είναι σημαντική συνομιλία"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Σε σίγαση"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Ειδοποίηση"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Εμφάνιση ως συννεφάκι"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Καταργήστε τα συννεφάκια"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Προσθήκη στην αρχική οθόνη"</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_snooze_action" msgid="8411152711279433989">"Αναβολή αφύπνισης"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Να γίνει υπενθύμιση"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Ρυθμίσεις"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ΑΝΑΙΡΕΣΗ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Σε αναβολή για <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Η Εξοικονόμηση δεδομένων είναι απενεργοποιημένη"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Ενεργό"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Απενεργοποίηση"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Μη διαθέσιμο"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Γραμμή πλοήγησης"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Διάταξη"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Επιπλέον τύπος αριστερού κουμπιού"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Παράθυρο μεγέθυνσης"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Στοιχεία ελέγχου παραθύρου μεγέθυνσης"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Στοιχεία γρήγορου ελέγχου"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Προσθήκη στοιχείων ελέγχου"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Επιλέξτε μια εφαρμογή από την οποία θα προσθέσετε στοιχεία ελέγχου"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> τρέχοντα αγαπημένα.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> τρέχον αγαπημένο.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Στοιχεία ελέγχου"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Επιλέξτε στοιχεία ελέγχου για γρήγορη πρόσβαση"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index df24969..529c6af 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom to fill screen"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Stretch to fill screen"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Image inserted"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"sent an image"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Saving screenshot…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Saving screenshot…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Screenshot saved"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Try taking screenshot again"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Can\'t save screenshot due to limited storage space"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Screen Recording"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Screen recorder"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ongoing notification for a screen record session"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Start Recording"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Record voiceover"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Show taps"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Tap to stop"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Stop"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pause"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Screen recording deleted"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error deleting screen recording"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Failed to get permissions"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Error starting screen recording"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB file transfer options"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Mount as a media player (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Mount as a camera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Don\'t show again"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Clear all"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Manage"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"History"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Silent notifications"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversations"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Clear all silent notifications"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Helps you focus without sound or vibration."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Gets your attention with sound or vibration."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Keeps your attention with a floating shortcut to this content."</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"Recently dismissed bubbles will appear here for easy retrieval."</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"This group of notifications cannot be configured here"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Proxied notification"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Done"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Undo"</string>
     <string name="demote" msgid="6225813324237153980">"Mark this notification as not a conversation"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Favourite"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Unfavourite"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Mute"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Unmute"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Show as bubble"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Turn off bubbles"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Important conversation"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Not an important conversation"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Silenced"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alerting"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Show bubble"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Remove bubbles"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Add to home screen"</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">"notification controls"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"notification snooze options"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Snooze"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Remind me"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Settings"</string>
     <string name="snooze_undo" msgid="60890935148417175">"UNDO"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Snoozed for <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Data Saver is off"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"On"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Off"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Unavailable"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigation bar"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Layout"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Extra left button type"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Magnification window"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Magnification window controls"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Quick controls"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Add controls"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Choose an app from which to add controls"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> current favourites.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> current favourite.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Choose controls for quick access"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"Favourites"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"All"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index 2d087c9..ce6c827 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom to fill screen"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Stretch to fill screen"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Image inserted"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"sent an image"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Saving screenshot…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Saving screenshot…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Screenshot saved"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Try taking screenshot again"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Can\'t save screenshot due to limited storage space"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Screen Recording"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Screen recorder"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ongoing notification for a screen record session"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Start Recording"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Record voiceover"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Show taps"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Tap to stop"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Stop"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pause"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Screen recording deleted"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error deleting screen recording"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Failed to get permissions"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Error starting screen recording"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB file transfer options"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Mount as a media player (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Mount as a camera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Don\'t show again"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Clear all"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Manage"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"History"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Silent notifications"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversations"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Clear all silent notifications"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Helps you focus without sound or vibration."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Gets your attention with sound or vibration."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Keeps your attention with a floating shortcut to this content."</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"Recently dismissed bubbles will appear here for easy retrieval."</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"This group of notifications cannot be configured here"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Proxied notification"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Done"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Undo"</string>
     <string name="demote" msgid="6225813324237153980">"Mark this notification as not a conversation"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Favourite"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Unfavourite"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Mute"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Unmute"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Show as bubble"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Turn off bubbles"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Important conversation"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Not an important conversation"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Silenced"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alerting"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Show bubble"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Remove bubbles"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Add to home screen"</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">"notification controls"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"notification snooze options"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Snooze"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Remind me"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Settings"</string>
     <string name="snooze_undo" msgid="60890935148417175">"UNDO"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Snoozed for <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Data Saver is off"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"On"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Off"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Unavailable"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigation bar"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Layout"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Extra left button type"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Magnification window"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Magnification window controls"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Quick controls"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Add controls"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Choose an app from which to add controls"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> current favourites.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> current favourite.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Choose controls for quick access"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"Favourites"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"All"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index df24969..529c6af 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom to fill screen"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Stretch to fill screen"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Image inserted"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"sent an image"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Saving screenshot…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Saving screenshot…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Screenshot saved"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Try taking screenshot again"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Can\'t save screenshot due to limited storage space"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Screen Recording"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Screen recorder"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ongoing notification for a screen record session"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Start Recording"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Record voiceover"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Show taps"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Tap to stop"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Stop"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pause"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Screen recording deleted"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error deleting screen recording"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Failed to get permissions"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Error starting screen recording"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB file transfer options"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Mount as a media player (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Mount as a camera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Don\'t show again"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Clear all"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Manage"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"History"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Silent notifications"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversations"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Clear all silent notifications"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Helps you focus without sound or vibration."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Gets your attention with sound or vibration."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Keeps your attention with a floating shortcut to this content."</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"Recently dismissed bubbles will appear here for easy retrieval."</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"This group of notifications cannot be configured here"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Proxied notification"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Done"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Undo"</string>
     <string name="demote" msgid="6225813324237153980">"Mark this notification as not a conversation"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Favourite"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Unfavourite"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Mute"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Unmute"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Show as bubble"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Turn off bubbles"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Important conversation"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Not an important conversation"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Silenced"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alerting"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Show bubble"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Remove bubbles"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Add to home screen"</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">"notification controls"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"notification snooze options"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Snooze"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Remind me"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Settings"</string>
     <string name="snooze_undo" msgid="60890935148417175">"UNDO"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Snoozed for <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Data Saver is off"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"On"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Off"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Unavailable"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigation bar"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Layout"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Extra left button type"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Magnification window"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Magnification window controls"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Quick controls"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Add controls"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Choose an app from which to add controls"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> current favourites.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> current favourite.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Choose controls for quick access"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"Favourites"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"All"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index df24969..529c6af 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom to fill screen"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Stretch to fill screen"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Image inserted"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"sent an image"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Saving screenshot…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Saving screenshot…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Screenshot saved"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Try taking screenshot again"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Can\'t save screenshot due to limited storage space"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Screen Recording"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Screen recorder"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ongoing notification for a screen record session"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Start Recording"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Record voiceover"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Show taps"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Tap to stop"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Stop"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pause"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Screen recording deleted"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error deleting screen recording"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Failed to get permissions"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Error starting screen recording"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB file transfer options"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Mount as a media player (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Mount as a camera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Don\'t show again"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Clear all"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Manage"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"History"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Silent notifications"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversations"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Clear all silent notifications"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Helps you focus without sound or vibration."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Gets your attention with sound or vibration."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Keeps your attention with a floating shortcut to this content."</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"Recently dismissed bubbles will appear here for easy retrieval."</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"This group of notifications cannot be configured here"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Proxied notification"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Done"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Undo"</string>
     <string name="demote" msgid="6225813324237153980">"Mark this notification as not a conversation"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Favourite"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Unfavourite"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Mute"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Unmute"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Show as bubble"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Turn off bubbles"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Important conversation"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Not an important conversation"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Silenced"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alerting"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Show bubble"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Remove bubbles"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Add to home screen"</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">"notification controls"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"notification snooze options"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Snooze"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Remind me"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Settings"</string>
     <string name="snooze_undo" msgid="60890935148417175">"UNDO"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Snoozed for <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Data Saver is off"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"On"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Off"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Unavailable"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigation bar"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Layout"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Extra left button type"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Magnification window"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Magnification window controls"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Quick controls"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Add controls"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Choose an app from which to add controls"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> current favourites.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> current favourite.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Choose controls for quick access"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"Favourites"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"All"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index 9d4e162..924ad60 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‎‏‎‎‎Zoom to fill screen‎‏‎‎‏‎"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‎Stretch to fill screen‎‏‎‎‏‎"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎Screenshot‎‏‎‎‏‎"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‎Image inserted‎‏‎‎‏‎"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‏‏‎sent an image‎‏‎‎‏‎"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎Saving screenshot…‎‏‎‎‏‎"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎Saving screenshot…‎‏‎‎‏‎"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎Screenshot saved‎‏‎‎‏‎"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎Try taking screenshot again‎‏‎‎‏‎"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‏‎Can\'t save screenshot due to limited storage space‎‏‎‎‏‎"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‏‎Taking screenshots isn\'t allowed by the app or your organization‎‏‎‎‏‎"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‏‏‎‎Screen Recording‎‏‎‎‏‎"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎Screen Recorder‎‏‎‎‏‎"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‏‎Ongoing notification for a screen record session‎‏‎‎‏‎"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‎‎Start Recording‎‏‎‎‏‎"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‎Record voiceover‎‏‎‎‏‎"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎Show taps‎‏‎‎‏‎"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎Tap to stop‎‏‎‎‏‎"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎Stop‎‏‎‎‏‎"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎Pause‎‏‎‎‏‎"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎Screen recording deleted‎‏‎‎‏‎"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‎Error deleting screen recording‎‏‎‎‏‎"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎Failed to get permissions‎‏‎‎‏‎"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎Error starting screen recording‎‏‎‎‏‎"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎USB file transfer options‎‏‎‎‏‎"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‎‎‏‏‎‎Mount as a media player (MTP)‎‏‎‎‏‎"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‏‎‎Mount as a camera (PTP)‎‏‎‎‏‎"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‎Don\'t show again‎‏‎‎‏‎"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎Clear all‎‏‎‎‏‎"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎Manage‎‏‎‎‏‎"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎History‎‏‎‎‏‎"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎‎Silent notifications‎‏‎‎‏‎"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‎Conversations‎‏‎‎‏‎"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‎Clear all silent notifications‎‏‎‎‏‎"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‎Helps you focus without sound or vibration.‎‏‎‎‏‎"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎Gets your attention with sound or vibration.‎‏‎‎‏‎"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎Keeps your attention with a floating shortcut to this content.‎‏‎‎‏‎"</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‏‏‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‎No recent bubbles‎‏‎‎‏‎"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‎Recently dismissed bubbles will appear here for easy retrieval.‎‏‎‎‏‎"</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎These notifications can\'t be modified.‎‏‎‎‏‎"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‎‎‏‎‎‏‎‎‏‏‎This group of notifications cannot be configured here‎‏‎‎‏‎"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎Proxied notification‎‏‎‎‏‎"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎Done‎‏‎‎‏‎"</string>
     <string name="inline_undo" msgid="9026953267645116526">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎Undo‎‏‎‎‏‎"</string>
     <string name="demote" msgid="6225813324237153980">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎Mark this notification as not a conversation‎‏‎‎‏‎"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‎‏‎‎‏‎‎‏‎‎‎‏‎‏‎Favorite‎‏‎‎‏‎"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎Unfavorite‎‏‎‎‏‎"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎Mute‎‏‎‎‏‎"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‎‏‏‏‏‏‎‎Unmute‎‏‎‎‏‎"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎Show as bubble‎‏‎‎‏‎"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎Turn off bubbles‎‏‎‎‏‎"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎Important conversation‎‏‎‎‏‎"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎Not an important conversation‎‏‎‎‏‎"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎Silenced‎‏‎‎‏‎"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎Alerting‎‏‎‎‏‎"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎Show bubble‎‏‎‎‏‎"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‏‏‏‎‎‎Remove bubbles‎‏‎‎‏‎"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‏‏‎Add to home screen‎‏‎‎‏‎"</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">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‎‎‏‎‏‏‏‎‎notification controls‎‏‎‎‏‎"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‎notification snooze options‎‏‎‎‏‎"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‏‎Snooze‎‏‎‎‏‎"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎Remind me‎‏‎‎‏‎"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎Settings‎‏‎‎‏‎"</string>
     <string name="snooze_undo" msgid="60890935148417175">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‏‏‏‎UNDO‎‏‎‎‏‎"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‏‎Snoozed for ‎‏‎‎‏‏‎<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎Data Saver is off‎‏‎‎‏‎"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎On‎‏‎‎‏‎"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‎‎‎Off‎‏‎‎‏‎"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎Unavailable‎‏‎‎‏‎"</string>
     <string name="nav_bar" msgid="4642708685386136807">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎Navigation bar‎‏‎‎‏‎"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎‎Layout‎‏‎‎‏‎"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎Extra left button type‎‏‎‎‏‎"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎Magnification Window‎‏‎‎‏‎"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎Magnification Window Controls‎‏‎‎‏‎"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‎Quick Controls‎‏‎‎‏‎"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎Add Controls‎‏‎‎‏‎"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎Choose an app from which to add controls‎‏‎‎‏‎"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%s</xliff:g>‎‏‎‎‏‏‏‎ current favorites.‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%s</xliff:g>‎‏‎‎‏‏‏‎ current favorite.‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‎Controls‎‏‎‎‏‎"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‎‏‎Choose controls for quick access‎‏‎‎‏‎"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎Favorites‎‏‎‎‏‎"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎All‎‏‎‎‏‎"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎The list of all controls could not be loaded.‎‏‎‎‏‎"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 33689a1..f2d145f 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom para ocupar la pantalla"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Estirar p/ ocupar la pantalla"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Captura de pantalla"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Se insertó la imagen"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"envió una imagen"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Guardando captura de pantalla"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Guardando la captura de pantalla..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Se guardó la captura de pantalla"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Vuelve a hacer una captura de pantalla"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"No se puede guardar la captura de pantalla debido a que no hay suficiente espacio de almacenamiento"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"La app o tu organización no permiten las capturas de pantalla"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Grabación de pantalla"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Grabadora de 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="1539048263178882562">"Iniciar grabación"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Grabar voz superpuesta"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Mostrar toques"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"¿Comenzar grabación?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Durante la grabación, el sistema de Android puede capturar la 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_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">"Micrófono y audio del dispositivo"</string>
+    <string name="screenrecord_start" msgid="330991441575775004">"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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Presiona para detener"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Detener"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pausar"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Se borró la grabación de pantalla"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error al borrar la grabación de pantalla"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Error al obtener permisos"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Error al iniciar la grabación de pantalla"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opciones de transferencia de archivos por USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Activar como reproductor de medios (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Activar como cámara (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"No volver a mostrar"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Borrar 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_gentle" msgid="3044910806569985386">"Notificaciones silenciosas"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversaciones"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Borrar todas las notificaciones silenciosas"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Te ayuda a concentrarte sin sonar ni vibrar."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Capta tu atención con sonido o vibración."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Retiene tu atención con un acceso directo flotante a este contenido."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"No se pueden modificar estas notificaciones."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"No se puede configurar aquí este grupo de notificaciones"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Notificación almacenada en proxy"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Listo"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Deshacer"</string>
     <string name="demote" msgid="6225813324237153980">"Marcar que la notificación no es una conversación"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Marcar como favorita"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Borrar de las favoritas"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Silenciar"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Dejar de silenciar"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Mostrar como cuadro"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Desactivar cuadros"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Conversación importante"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"No es una conversación importante"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Silenciada"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Activar alertas"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Mostrar cuadro"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Quitar cuadros"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Agregar a la pantalla principal"</string>
     <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g> de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_menu_gear_description" msgid="6429668976593634862">"controles de notificación"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opciones para posponer notificaciones"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Posponer"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Recuérdame"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Configuración"</string>
     <string name="snooze_undo" msgid="60890935148417175">"DESHACER"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Posponer <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Ahorro de datos desactivado"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Activado"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Desactivado"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"No disponible"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Barra de navegación"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Diseño"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Tipo de botón izquierdo adicional"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Ventana de ampliación"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Controles de ampliación de la ventana"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Controles rápidos"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Agregar controles"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Elige una app desde la cual agregar controles"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> favoritos actuales</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> favorito actual</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Elige los controles de acceso rápido"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 458df31..a5b1871 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom para ajustar"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Expandir para ajustar"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Captura de pantalla"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Se ha insertado la imagen"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ha enviado una imagen"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Guardando captura..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Guardando captura..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Se ha guardado la captura de pantalla"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Vuelve a intentar hacer la captura de pantalla"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"No se puede guardar la captura de pantalla porque no hay espacio de almacenamiento suficiente"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"La aplicación o tu organización no permiten realizar capturas de pantalla"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Grabación de la pantalla"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Grabadora 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="1539048263178882562">"Iniciar grabación"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Grabar voz en off"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Mostrar toques"</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 audios."</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 y micrófono del dispositivo"</string>
+    <string name="screenrecord_start" msgid="330991441575775004">"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 en la pantalla"</string>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Toca para detener"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Detener"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pausar"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Se ha eliminado la grabación de la pantalla"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"No se ha podido eliminar la grabación de la pantalla"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"No se han podido obtener los permisos"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"No se ha podido empezar a grabar la pantalla"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opciones de transferencia de archivos por USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Activar como reproductor de medios (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Activar como cámara (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"No volver a mostrar"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Borrar todo"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Gestionar"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historial"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Notificaciones silenciadas"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversaciones"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Borrar todas las notificaciones silenciadas"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Te ayuda a concentrarte sin sonido ni vibración."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Llama tu atención con sonido o vibración."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Llama tu atención con un acceso directo flotante a este contenido."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Estas notificaciones no se pueden modificar."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Este grupo de notificaciones no se puede configurar aquí"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Notificación mediante proxy"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Listo"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Deshacer"</string>
     <string name="demote" msgid="6225813324237153980">"Marcar esta notificación como que no es una conversación"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Favorita"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Quitar de favoritos"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Silenciar"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Activar sonido"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Mostrar como burbuja"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Desactivar las burbujas"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Conversación importante"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Conversación no importante"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Silenciada"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alertar"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Mostrar burbuja"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Desactivar burbujas"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Añadir a la pantalla de inicio"</string>
     <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g> de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_menu_gear_description" msgid="6429668976593634862">"Controles de las notificaciones"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"Opciones para posponer las notificaciones"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Posponer"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Recordar"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Ajustes"</string>
     <string name="snooze_undo" msgid="60890935148417175">"DESHACER"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Volverá a mostrarse en <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Ahorro de datos desactivado"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Activado"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Desactivado"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"No disponible"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Barra de navegación"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Diseño"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Tipo de botón a la izquierda extra"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Ventana de ampliación"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Ventana de controles de ampliación"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Controles rápidos"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Añadir controles"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Elige una aplicación de la que quieras añadir controles"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> favoritos.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> favorito.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Elige controles de acceso rápido"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 4729a0d..aaa4d5c 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Suumi ekraani täitmiseks"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Venita ekraani täitmiseks"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Ekraanipilt"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Pilt on sisestatud"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"saatis kujutise"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Kuvatõmmise salvestamine ..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Kuvatõmmise salvestamine ..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Ekraanipilt salvestati"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Proovige ekraanipilt uuesti jäädvustada"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Piiratud salvestusruumi tõttu ei saa ekraanipilti salvestada"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Rakendus või teie organisatsioon ei luba ekraanipilte jäädvustada"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Ekraanikuva salvestamine"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Ekraanikuva salvesti"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Pooleli märguanne ekraanikuva salvestamise seansi puhul"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Alusta salvestamist"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Salvesta hääl"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Kuva puudutused"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Kas alustada salvestamist?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Heli 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_audio_label" msgid="6183558856175159629">"Heli salvestamine"</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_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 ekraanikuva puudutused"</string>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Puudutage peatamiseks"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Peata"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Peata"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Ekraanikuva salvestis on kustutatud"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Viga ekraanikuva salvestise kustutamisel"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Lubade hankimine ebaõnnestus"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Viga ekraanikuva salvestamise alustamisel"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB-failiedastuse valikud"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Paigalda meediumimängijana (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Paigalda kaamerana (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Ära kuva uuesti"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Tühjenda kõik"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Haldamine"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Ajalugu"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Hääletud märguanded"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Vestlused"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Kustuta kõik hääletud märguanded"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Aitab teil keskenduda (heli või vibreerimine puudub)."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Haarab heli või vibreerimisega teie tähelepanu."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Hoiab teie tähelepanu hõljuva otseteega selle sisu juurde."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Neid märguandeid ei saa muuta."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Seda märguannete rühma ei saa siin seadistada"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Puhvriga märguanne"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Valmis"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Võta tagasi"</string>
     <string name="demote" msgid="6225813324237153980">"Eemalda see meeldetuletus vestlustest"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Lisa lemmikutesse"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Tühista lemmikutesse lisamine"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Vaigista"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Tühista vaigistus"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Kuva mullina"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Lülita mullid välja"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Tähtis vestlus"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Pole tähtis vestlus"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Vaigistatud"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Teavitamine"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Kuva mull"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Eemalda mullid"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Lisa avakuvale"</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">"märguannete juhtnupud"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"märguannete edasilükkamise valikud"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Lükka edasi"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Tuleta mulle meelde"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Seaded"</string>
     <string name="snooze_undo" msgid="60890935148417175">"VÕTA TAGASI"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Edasi lükatud <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Andmemahu säästja on välja lülitatud"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Sees"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Väljas"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Pole saadaval"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigeerimisriba"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Paigutus"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Täiendava vasaku nupu tüüp"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Suurendamisakna ülekate"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Suurendamisaken"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Suurendamisakna juhtelemendid"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Kiirnupud"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Juhtnuppude lisamine"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Valige rakendus, kus juhtnupud lisada"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> praegust lemmikut.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> praegune lemmik.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Juhtnupud"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Valige kiirjuurdepääsuks juhtnupud"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 470a410..8397c34 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Handiagotu pantaila betetzeko"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Luzatu pantaila betetzeko"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Pantaila-argazkia"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Irudi bat txertatu da"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"erabiltzaileak irudi bat bidali du"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Pantaila-argazkia gordetzen…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Pantaila-argazkia gordetzen…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Gorde da pantaila-argazkia"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Saiatu berriro pantaila-argazkia ateratzen"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Ezin da gorde pantaila-argazkia ez delako gelditzen tokirik"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Aplikazioak edo erakundeak ez du onartzen pantaila-argazkiak ateratzea"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Pantailaren grabaketa"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Pantaila-grabagailua"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Pantailaren grabaketa-saioaren jakinarazpen jarraitua"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Hasi grabatzen"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Grabatu off ahotsa"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Erakutsi sakatzeak"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Grabatzen hasi nahi duzu?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Zerbait grabatzen duzun bitartean, Android sistemak atzeman egin dezake pantailan agertzen den edo gailuak erreproduzitzen duen kontuzko informazioa; besteak beste, pasahitzak, ordainketen informazioa, argazkiak, mezuak eta audioak."</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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Sakatu gelditzeko"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Gelditu"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pausatu"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Ezabatu da pantailaren grabaketa"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Errore bat gertatu da pantailaren grabaketa ezabatzean"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Ezin izan dira lortu baimenak"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Errore bat gertatu da pantaila grabatzen hastean"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB fitxategiak transferitzeko aukerak"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Muntatu multimedia-erreproduzigailu gisa (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Muntatu kamera gisa (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Ez erakutsi berriro"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Garbitu guztiak"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Kudeatu"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historia"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Soinurik gabeko jakinarazpenak"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Elkarrizketak"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Garbitu soinurik gabeko jakinarazpen guztiak"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Ez du egiten soinu edo dardararik, arretarik gal ez dezazun."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Arreta erakartzen du soinua eta dardara eginda."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Eduki honetarako lasterbide gainerakor bat eskaintzen dizu, arretarik gal ez dezazun."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Jakinarazpen horiek ezin dira aldatu."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Jakinarazpen talde hau ezin da konfiguratu hemen"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Proxy bidezko jakinarazpena"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Eginda"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Desegin"</string>
     <string name="demote" msgid="6225813324237153980">"Markatu jakinarazpen hau ez dela elkarrizketa bat"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Markatu gogoko gisa"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Kendu gogokoetatik"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Ezkutatu"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Erakutsi"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Markatu burbuila gisa"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Desaktibatu burbuilak"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Elkarrizketa garrantzitsua"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Ez da elkarrizketa garrantzitsu bat"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Ezkutatuta"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Aktibatu jakinarazpenak"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Erakutsi burbuila"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Kendu burbuilak"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Gehitu hasierako pantailan"</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">"jakinarazpena kontrolatzeko aukerak"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"jakinarazpena atzeratzeko aukerak"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Atzeratu"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Gogorarazi"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Ezarpenak"</string>
     <string name="snooze_undo" msgid="60890935148417175">"DESEGIN"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>z atzeratu da"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Desaktibatuta dago datu-aurrezlea"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Aktibatuta"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Desaktibatuta"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Ez dago erabilgarri"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Nabigazio-barra"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Diseinua"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Ezkerreko botoi gehigarriaren mota"</string>
@@ -928,7 +944,7 @@
     <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_2">%2$s</xliff:g> aplikazioaren zatiak erakusteko baimena eman nahi diozu <xliff:g id="APP_0">%1$s</xliff:g> aplikazioari?"</string>
     <string name="slice_permission_text_1" msgid="6675965177075443714">"- <xliff:g id="APP">%1$s</xliff:g> aplikazioaren informazioa irakur dezake."</string>
     <string name="slice_permission_text_2" msgid="6758906940360746983">"- <xliff:g id="APP">%1$s</xliff:g> aplikazioan ekintzak gauza ditzake."</string>
-    <string name="slice_permission_checkbox" msgid="4242888137592298523">"Baimendu <xliff:g id="APP">%1$s</xliff:g> aplikazioari edozein aplikazioren zatiak erakustea"</string>
+    <string name="slice_permission_checkbox" msgid="4242888137592298523">"Eman aplikazio guztien zatiak erakusteko baimena <xliff:g id="APP">%1$s</xliff:g> aplikazioari"</string>
     <string name="slice_permission_allow" msgid="6340449521277951123">"Baimendu"</string>
     <string name="slice_permission_deny" msgid="6870256451658176895">"Ukatu"</string>
     <string name="auto_saver_title" msgid="6873691178754086596">"Sakatu bateria-aurrezlea noiz aktibatu antolatzeko"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Lupa-leihoa"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Lupa-leihoaren aukerak"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Kontrol bizkorrak"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Gehitu kontrolatzeko aukerak"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Aukeratu zein aplikaziotatik gehitu nahi dituzun kontrolatzeko aukerak"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">Une honetan, <xliff:g id="NUMBER_1">%s</xliff:g> gogoko daude.</item>
+      <item quantity="one">Une honetan, <xliff:g id="NUMBER_0">%s</xliff:g> gogoko daude.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrolatzeko aukerak"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Aukeratu sarbide bizkorra kontrolatzeko aukerak"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index ae85a26..b50e595 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"بزرگ‌نمایی برای پر کردن صفحه"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"گسترده کردن برای پر کردن صفحه"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"عکس صفحه‌نمایش"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"تصویر درج شد"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"تصویری ارسال کرد"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"در حال ذخیره عکس صفحه‌نمایش..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"درحال ذخیره عکس صفحه‌نمایش…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"عکس صفحه‌نمایش ذخیره شد"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"دوباره عکس صفحه‌نمایش بگیرید"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"به دلیل محدود بودن فضای ذخیره‌سازی نمی‌توان عکس صفحه‌نمایش را ذخیره کرد"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"برنامه یا سازمان شما اجازه نمی‌دهند عکس صفحه‌نمایش بگیرید."</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"ضبط صفحه‌نمایش"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"ضبط‌کننده صفحه‌نمایش"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"اعلان درحال انجام برای جلسه ضبط صفحه‌نمایش"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"شروع ضبط"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"ضبط صدا روی تصویر"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"نمایش ضربه‌ها"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"ضبط شروع شود؟"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"‏هنگام ضبط، «سیستم Android» می‌تواند هر اطلاعات حساسی را که روی صفحه‌نمایش شما نشان داده می‌شود یا روی دستگاه شما پخش می‌شود ضبط کند. این شامل گذرواژه‌ها، اطلاعات پرداخت، عکس‌ها، پیام‌ها، و صدا می‌شود."</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_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_stop_text" msgid="6549288689506057686">"ضربه برای توقف"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"توقف"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"مکث"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"فایل ضبط صفحه‌نمایش حذف شد"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"خطا در حذف فایل ضبط صفحه‌نمایش"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"مجوزها دریافت نشدند"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"خطا هنگام شروع ضبط صفحه‌نمایش"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"‏گزینه‌های انتقال فایل USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"‏نصب به‌عنوان دستگاه پخش رسانه (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"‏تصب به‌عنوان دوربین (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"دوباره نشان داده نشود"</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_gentle" msgid="3044910806569985386">"اعلان‌های بی‌صدا"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"مکالمه‌ها"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"پاک کردن همه اعلان‌های بی‌صدا"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"به شما کمک می‌کند بدون صدا یا لرزش تمرکز کنید."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"با صدا یا لرزش توجه شما را جلب می‌کند."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"با میان‌بری شناور به این محتوا، توجه‌تان را جلب می‌کند."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"این اعلان‌ها قابل اصلاح نیستند."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"نمی‌توانید این گروه اعلان‌ها را در اینجا پیکربندی کنید"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"اعلان‌های دارای پراکسی"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"تمام"</string>
     <string name="inline_undo" msgid="9026953267645116526">"واگرد"</string>
     <string name="demote" msgid="6225813324237153980">"علامت‌گذاری این اعلان به‌عنوان غیرمکالمه"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"مورد دلخواه"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"حذف از موارد دلخواه"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"صامت کردن"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"باصدا کردن"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"نمایش به‌شکل ابزارک اعلان"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"خاموش کردن ابزارک‌های اعلان"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"مکالمه مهم"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"مکالمه غیرمهم"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"بی‌صدا شد"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"هشدار دادن"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"نمایش ابزارک اعلان"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"برداشتن ابزارک اعلان"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"افزودن به صفحه اصلی"</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_snooze_action" msgid="8411152711279433989">"تعویق"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"به من یادآوری شود"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"تنظیمات"</string>
     <string name="snooze_undo" msgid="60890935148417175">"واگرد"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> به تعویق افتاد"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"صرفه‌جویی داده خاموش است"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"روشن"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"خاموش"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"در دسترس نیست"</string>
     <string name="nav_bar" msgid="4642708685386136807">"نوار پیمایش"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"طرح‌بندی"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"نوع دکمه منتهی‌الیه چپ"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"پنجره همپوشانی بزرگ‌نمایی"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"پنجره بزرگ‌نمایی"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"کنترل‌های پنجره بزرگ‌نمایی"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"کنترل های سریع"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"افزودن کنترل‌ها"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"برنامه‌ای را که می‌خواهید کنترل‌ها را از آن اضافه کنید انتخاب کنید"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> مورد دلخواه کنونی.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> مورد دلخواه کنونی.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"کنترل‌ها"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"کنترل‌های موردنظر را برای دسترسی سریع انتخاب کنید"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index da22e1c..c6898f0 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoomaa koko näyttöön"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Venytä koko näyttöön"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Kuvakaappaus"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Kuva lisätty"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"lähetti kuvan"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Tallennetaan kuvakaappausta..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Tallennetaan kuvakaappausta..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Kuvakaappaus tallennettu"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Yritä ottaa kuvakaappaus uudelleen."</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Kuvakaappauksen tallennus epäonnistui, sillä tallennustilaa ei ole riittävästi"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Sovellus tai organisaatio ei salli kuvakaappauksien tallentamista."</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Näytön tallennus"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Näytön tallentaja"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Pysyvä ilmoitus näytön tallentamisesta"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Aloita tallennus"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Äänitä taustaselostus"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Näytä napautukset"</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 äänisisältö."</string>
+    <string name="screenrecord_audio_label" msgid="6183558856175159629">"Tallenna ääntä"</string>
+    <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Laitteen äänet"</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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Lopeta napauttamalla"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Lopeta"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Keskeytä"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Näyttötallenne poistettu"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Virhe poistettaessa näyttötallennetta"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Käyttöoikeuksien hakeminen epäonnistui."</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Virhe näytön tallennuksen aloituksessa"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB-tiedostonsiirtoasetukset"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Käytä mediasoittimena (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Käytä kamerana (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Älä näytä uudelleen"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Poista kaikki"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Muuta asetuksia"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historia"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Hiljaiset ilmoitukset"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Keskustelut"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Tyhjennä kaikki hiljaiset ilmoitukset"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Keskittyminen on helpompaa ilman ääntä tai värinää."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Kiinnittää huomion äänellä tai värinällä"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Kelluva sisällön pikakuvake säilyttää huomiosi"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Näitä ilmoituksia ei voi muokata"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Tätä ilmoitusryhmää ei voi määrittää tässä"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Välitetty ilmoitus"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Valmis"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Kumoa"</string>
     <string name="demote" msgid="6225813324237153980">"Merkitse, että tämä ilmoitus ei ole keskustelu"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Suosikki"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Poista suosikeista"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Ohita"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Poista ohitus"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Näytä ohjekuplana"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Laita ohjekuplat pois päältä"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Tärkeä keskustelu"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Ei tärkeä keskustelu"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Mykistetty"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Hälyttää"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Näytä ohjekuplana"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Poista ohjekuplat"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Lisää aloitusnäytölle"</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">"Ilmoitusten hallinta"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"Ilmoitusten torkkuasetukset"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Siirrä myöhemmäksi"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Muistuta minua"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Asetukset"</string>
     <string name="snooze_undo" msgid="60890935148417175">"KUMOA"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Torkku: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Data Saver on pois käytöstä."</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Käytössä"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Pois käytöstä"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Ei käytettävissä"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigointipalkki"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Asettelu"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Ylimääräinen vasen painiketyyppi"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Suurennusikkuna"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Suurennusikkunan ohjaimet"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Pikasäätimet"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Säätimien lisääminen"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Valitse sovellus, jolla säätimet lisätään"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> nykyistä suosikkia.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> nykyinen suosikki.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Säätimet"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Valitse pikakäytön säätimet"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index d5d3f56..9b2003f 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoomer pour remplir l\'écran"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Étirer pour remplir l\'écran"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Capture d\'écran"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Image insérée"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"a envoyé une image"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Enregistrement capture écran…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Enregistrement capture écran…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Capture d\'écran enregistrée"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Essayez de faire une autre capture d\'écran"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Impossible d\'enregistrer la capture d\'écran, car l\'espace de stockage est limité"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"L\'application ou votre organisation n\'autorise pas les saisies d\'écran"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Enregistrement d\'écran"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Enregistreur 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="1539048263178882562">"Commencer l\'enregistrement"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Enregistrer la voix hors champ"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Afficher les éléments sélectionnés"</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_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_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 là où le doigt touche l\'écran"</string>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Toucher pour arrêter"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Arrêter"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pause"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"L\'enregistrement d\'écran a été supprimé"</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_permission_error" msgid="7856841237023137686">"Impossible d\'obtenir les autorisations"</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="usb_preference_title" msgid="1439924437558480718">"Options transfert fichiers USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Installer comme un lecteur multimédia (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Installer comme un appareil photo (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Ne plus afficher"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Tout effacer"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Gérer"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historique"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Notifications silencieuses"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversations"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Effacer toutes les notifications silencieuses"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Vous aider à vous concentrer, sans son ni vibration."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Attire votre attention à l\'aide de sons et de vibrations."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Garde votre attention à l\'aide d\'un raccourci flottant vers ce contenu."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ces notifications ne peuvent pas être modifiées"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Ce groupe de notifications ne peut pas être configuré ici"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Notification par mandataire"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Terminé"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Annuler"</string>
     <string name="demote" msgid="6225813324237153980">"Marquer cette notification comme n\'étant pas une conversation"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Ajouter aux favoris"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Supprimer des favoris"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Ignorer"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Réactiver"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Afficher comme bulle"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Désactiver les bulles"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Conversation importante"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"La conversation n\'est pas importante"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Désactivée"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alertes"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Afficher la bulle"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Supprimer les bulles"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Ajouter à l\'écran d\'accueil"</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_action" msgid="8411152711279433989">"Reporter"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Me rappeler"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Paramètres"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ANNULER"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Reporté pour <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"La fonction Économiseur de données est désactivée"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Activé"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Désactivé"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Non disponible"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Barre de navigation"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Disposition"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Type de bouton gauche supplémentaire"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Fenêtre d\'agrandissement superposée"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Fenêtre d\'agrandissement"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Commandes pour la fenêtre d\'agrandissement"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Commandes rapides"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Ajouter des commandes"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Choisissez une application de laquelle ajouter des commandes"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> favori actuel.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> favoris actuels.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Commandes"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Choisissez les commandes d\'accès rapide"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 5c5d353..90fdcfe 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoomer pour remplir l\'écran"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Étirer pour remplir l\'écran"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Capture d\'écran"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Image insérée"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"a envoyé une image"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Enregistrement capture écran…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Enregistrement de la capture d\'écran…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Capture d\'écran enregistrée"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Essayez de nouveau de faire une capture d\'écran"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Impossible d\'enregistrer la capture d\'écran, car l\'espace de stockage est limité"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Les captures d\'écran ne sont pas autorisées par l\'application ni par votre organisation"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Enregistrement de l\'écran"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Enregistreur d\'é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="1539048263178882562">"Démarrer l\'enregistrement"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Enregistrer une voix off"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Afficher les éléments sélectionnés"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Démarrer l\'enregistrement ?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Pendant l\'enregistrement, le système Android peut capturer des informations sensibles affichées à l\'écran ou lues depuis votre appareil. Ceci inclut les mots de passe, les informations de paiement, les photos, les messages et les contenus audio."</string>
+    <string name="screenrecord_audio_label" msgid="6183558856175159629">"Enregistrer les contenus audio"</string>
+    <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Appareil"</string>
+    <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Sons provenant de l\'appareil, tels que la musique, les appels et les sonneries"</string>
+    <string name="screenrecord_mic_label" msgid="2111264835791332350">"Micro"</string>
+    <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Appareil et micro"</string>
+    <string name="screenrecord_start" msgid="330991441575775004">"Démarrer"</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 des contenus audio"</string>
+    <string name="screenrecord_taps_label" msgid="1595690528298857649">"Afficher les éléments touchés à l\'écran"</string>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Appuyez ici pour arrêter"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Arrêter"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pause"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Enregistrement de l\'écran supprimé"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Erreur lors de la suppression de l\'enregistrement de l\'écran"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Échec d\'obtention des autorisations"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Erreur lors du démarrage de l\'enregistrement de l\'écran"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Options transfert fichiers USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Installer en tant que lecteur multimédia (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Installer en tant qu\'appareil photo (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Ne plus afficher"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Tout effacer"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Gérer"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historique"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Notifications silencieuses"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversations"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Effacer toutes les notifications silencieuses"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Sans sons ni vibrations, vous aide à vous concentrer."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Attire votre attention à l\'aide de sons ou de vibrations."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Attire votre attention à l\'aide d\'un raccourci flottant vers ce contenu."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Impossible de modifier ces notifications."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Vous ne pouvez pas configurer ce groupe de notifications ici"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Notification de proxy"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Terminé"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Annuler"</string>
     <string name="demote" msgid="6225813324237153980">"Marquer cette notification comme n\'étant pas une conversation"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Ajouter aux favoris"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Supprimer des favoris"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Couper le son"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Réactiver le son"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Afficher sous forme de bulle"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Désactiver les bulles"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Conversation importante"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Conversation non importante"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"En silencieux"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Réactiver le son"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Afficher sous forme de bulle"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Désactiver l\'affichage sous forme de bulle"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Ajouter à l\'écran d\'accueil"</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_action" msgid="8411152711279433989">"Répéter"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"M\'envoyer un rappel"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Paramètres"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ANNULER"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Répétée après <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"L\'économiseur de données est désactivé."</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Activé"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Désactivé"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Indisponible"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Barre de navigation"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Disposition"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Type de bouton gauche supplémentaire"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Fenêtre de superposition de l\'agrandissement"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Fenêtre d\'agrandissement"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Fenêtre des commandes d\'agrandissement"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Commandes rapides"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Ajouter des commandes"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Sélectionnez une application depuis laquelle vous souhaitez ajouter des commandes"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> current favorites.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> favoris actuels.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Commandes"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Sélectionnez des commandes pour pouvoir y accéder rapidement"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 2c0eef6..4e2a116 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Ampliar ata ocupar todo"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Estirar ata ocupar todo"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Crear captura"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Engadiuse a imaxe"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"enviou unha imaxe"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Gardando captura de pantalla…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Gardando captura de pantalla…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Gardouse a captura de pantalla"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Volve tentar crear unha captura de pantalla"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Non se puido gardar a captura de pantalla porque o espazo de almacenamento é limitado"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"A aplicación ou a túa organización non permite realizar capturas de pantalla"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Gravación de pantalla"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Gravadora da 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="1539048263178882562">"Iniciar gravación"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Gravar voz en off"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Mostrar toques"</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 visible na pantalla ou reproducila no dispositivo. Isto inclúe contrasinais, información de pago, fotos, mensaxes e audio."</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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Toca para deter a gravación"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Deter"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pór en pausa"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Eliminouse a gravación de pantalla"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Produciuse un erro ao eliminar a gravación de pantalla"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Produciuse un erro ao obter os permisos"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Produciuse un erro ao iniciar a gravación da pantalla"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opcións de transferencia USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Inserir como reprodutor multimedia (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Inserir como cámara (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Non mostrar outra vez"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Eliminar todas"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Xestionar"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historial"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Notificacións silenciadas"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversas"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Borra todas as notificacións silenciadas"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Axúdache a centrarte sen son nin vibración."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Chama a túa atención con son ou vibración."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Mantén a túa atención cun atallo flotante a este contido."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Estas notificacións non se poden modificar."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Aquí non se pode configurar este grupo de notificacións"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Notificación mediante proxy"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Feito"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Desfacer"</string>
     <string name="demote" msgid="6225813324237153980">"Marcar que esta notificación non é unha conversa"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Engadir a favoritos"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Quitar de favoritos"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Silenciar"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Activar son"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Mostrar como unha burbulla"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Desactivar burbullas"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"É unha conversa importante"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Non é unha conversa importante"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Silenciada"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alertando"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Mostrar burbulla"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Quitar burbullas"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Engadir á pantalla de inicio"</string>
     <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g> de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_menu_gear_description" msgid="6429668976593634862">"controis de notificacións"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opcións para adiar notificacións"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Adiar"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Lembrarme"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Configuración"</string>
     <string name="snooze_undo" msgid="60890935148417175">"DESFACER"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Adiouse <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"O aforro de datos está desactivado"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Activar"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Desactivar"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Opción non dispoñible"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Barra de navegación"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Deseño"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Tipo de botón adicional á esquerda"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Ampliación da ventá de superposición"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Ventá de superposición"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Controis de ampliación da ventá"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Controis rápidos"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Engadir controis"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Escolle unha aplicación cuxos controis queiras engadir"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> favoritos actuais.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> favorito actual.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Controis"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Escolle os controis aos que queiras acceder rapidamente"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index df4254c..b0f8cde 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"સ્ક્રીન ભરવા માટે ઝૂમ કરો"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"સ્ક્રીન ભરવા માટે ખેંચો"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"સ્ક્રીનશૉટ"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"છબી શામેલ કરી"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"છબી મોકલી"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"સ્ક્રીનશોટ સાચવી રહ્યું છે…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"સ્ક્રીનશોટ સાચવી રહ્યું છે…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"સ્ક્રીનશૉટ સાચવ્યો"</string>
@@ -80,11 +80,31 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"ફરીથી સ્ક્રીનશૉટ લેવાનો પ્રયાસ કરો"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"મર્યાદિત સ્ટોરેજ સ્પેસને કારણે સ્ક્રીનશૉટ સાચવી શકાતો નથી"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ઍપ્લિકેશન કે તમારી સંસ્થા દ્વારા સ્ક્રીનશૉટ લેવાની મંજૂરી નથી"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"સ્ક્રીન રેકોર્ડિંગ"</string>
+    <!-- no translation found for screenrecord_name (2596401223859996572) -->
+    <skip />
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"સ્ક્રીન રેકોર્ડિંગ સત્ર માટે ચાલુ નોટિફિકેશન"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"રેકોર્ડિંગ શરૂ કરો"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"વૉઇસઓવર રેકોર્ડ કરો"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"ટૅપ કર્યાની સંખ્યા બતાવો"</string>
+    <!-- no translation found for screenrecord_start_label (1750350278888217473) -->
+    <skip />
+    <!-- no translation found for screenrecord_description (1123231719680353736) -->
+    <skip />
+    <!-- no translation found for screenrecord_audio_label (6183558856175159629) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_label (9016927171280567791) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_description (4922694220572186193) -->
+    <skip />
+    <!-- no translation found for screenrecord_mic_label (2111264835791332350) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_and_mic_label (1831323771978646841) -->
+    <skip />
+    <!-- no translation found for screenrecord_start (330991441575775004) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_only (4459670242451527727) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_and_audio (5351133763125180920) -->
+    <skip />
+    <!-- no translation found for screenrecord_taps_label (1595690528298857649) -->
+    <skip />
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"રોકવા માટે ટૅપ કરો"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"રોકો"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"થોભાવો"</string>
@@ -97,6 +117,8 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"સ્ક્રીન રેકોર્ડિંગ ડિલીટ કર્યું"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"સ્ક્રીન રેકોર્ડિંગ ડિલીટ કરવામાં ભૂલ આવી"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"પરવાનગીઓ મેળવવામાં નિષ્ફળ રહ્યાં"</string>
+    <!-- no translation found for screenrecord_start_error (2200660692479682368) -->
+    <skip />
     <string name="usb_preference_title" msgid="1439924437558480718">"USB ફાઇલ ટ્રાન્સફર વિકલ્પો"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"મીડિયા પ્લેયર તરીકે માઉન્ટ કરો (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"કૅમેરા તરીકે માઉન્ટ કરો (PTP)"</string>
@@ -477,6 +499,8 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"ફરીથી બતાવશો નહીં"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"બધુ સાફ કરો"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"મેનેજ કરો"</string>
+    <!-- no translation found for manage_notifications_history_text (57055985396576230) -->
+    <skip />
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"સાઇલન્ટ નોટિફિકેશન"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"વાતચીત"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"બધા સાઇલન્ટ નોટિફિકેશન સાફ કરો"</string>
@@ -676,6 +700,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"તમને સાઉન્ડ અથવા વાઇબ્રેશન વિના ફોકસ કરવામાં સહાય કરે છે."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"સાઉન્ડ અથવા વાઇબ્રેશન વિના તમારું ધ્યાન દોરે છે."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ફ્લોટિંગ શૉર્ટકટથી આ કન્ટેન્ટ પર તમારું ધ્યાન દોરી રાખે છે."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"આ નોટિફિકેશનમાં કોઈ ફેરફાર થઈ શકશે નહીં."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"નોટિફિકેશનના આ ગ્રૂપની ગોઠવણી અહીં કરી શકાશે નહીં"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"પ્રૉક્સી નોટિફિકેશન"</string>
@@ -698,17 +726,25 @@
     <string name="notification_done" msgid="6215117625922713976">"થઈ ગયું"</string>
     <string name="inline_undo" msgid="9026953267645116526">"રદ કરો"</string>
     <string name="demote" msgid="6225813324237153980">"આ નોટિફિકેશન વાતચીત ન હોવા તરીકે માર્ક કરો"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"મનપસંદ"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"મનપસંદમાંથી કાઢી નાખો"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"મ્યૂટ કરો"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"અનમ્યૂટ કરો"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"બબલ તરીકે બતાવો"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"બબલ બંધ કરો"</string>
+    <!-- no translation found for notification_conversation_favorite (1905240206975921907) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unfavorite (181383708304763807) -->
+    <skip />
+    <!-- no translation found for notification_conversation_mute (268951550222925548) -->
+    <skip />
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"અલર્ટ કરીએ છીએ"</string>
+    <!-- no translation found for notification_conversation_bubble (2242180995373949022) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unbubble (6908427185031099868) -->
+    <skip />
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"હોમ સ્ક્રીન પર ઉમેરો"</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_snooze_action" msgid="8411152711279433989">"સ્નૂઝ કરો"</string>
+    <!-- no translation found for notification_menu_snooze_action (5415729610393475019) -->
+    <skip />
+    <!-- no translation found for notification_menu_settings_action (7085494017202764285) -->
+    <skip />
     <string name="snooze_undo" msgid="60890935148417175">"પૂર્વવત્ કરો"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> માટે સ્નૂઝ કરો"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +816,8 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"ડેટા સેવર બંધ છે"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"ચાલુ"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"બંધ"</string>
+    <!-- no translation found for tile_unavailable (3095879009136616920) -->
+    <skip />
     <string name="nav_bar" msgid="4642708685386136807">"નેવિગેશન બાર"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"લેઆઉટ"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"અતિરિક્ત ડાબો બટન પ્રકાર"</string>
@@ -964,6 +1002,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"વિસ્તૃતીકરણ ઓવરલે વિંડો"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"વિસ્તૃતીકરણ વિંડો"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"વિસ્તૃતીકરણ વિંડોના નિયંત્રણો"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"ઝડપી નિયંત્રણો"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"નિયંત્રણો ઉમેરો"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"જેમાંથી નિયંત્રણો ઉમેરવા હોય તે ઍપ પસંદ કરો"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one">હાલમાં <xliff:g id="NUMBER_1">%s</xliff:g> મનપસંદ.</item>
+      <item quantity="other">હાલમાં <xliff:g id="NUMBER_1">%s</xliff:g> મનપસંદ.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"નિયંત્રણો"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"ઝડપી ઍક્સેસ માટેનાં નિયંત્રણો પસંદ કરો"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index b62a45e..c3b5528 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"स्‍क्रीन भरने के लिए ज़ूम करें"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"स्‍क्रीन भरने के लिए खींचें"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"स्क्रीनशॉट"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"इमेज डाली गई"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"एक इमेज भेजी गई"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"स्क्रीनशॉट सहेजा जा रहा है..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"स्क्रीनशॉट सहेजा जा रहा है..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"स्क्रीनशॉट सेव किया गया"</string>
@@ -80,11 +80,31 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"स्क्रीनशॉट दोबारा लेने की कोशिश करें"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"मेमोरी कम होने की वजह से स्क्रीनशॉट सेव नहीं किया जा सका"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ऐप्लिकेशन या आपका संगठन स्क्रीनशॉट लेने की अनुमति नहीं देता"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"स्क्रीन रिकॉर्डिंग"</string>
+    <!-- no translation found for screenrecord_name (2596401223859996572) -->
+    <skip />
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"स्क्रीन रिकॉर्ड सेशन के लिए जारी सूचना"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"रिकॉर्डिंग शुरू करें"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"वॉइसओवर रिकॉर्ड करें"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"टैप दिखाएं"</string>
+    <!-- no translation found for screenrecord_start_label (1750350278888217473) -->
+    <skip />
+    <!-- no translation found for screenrecord_description (1123231719680353736) -->
+    <skip />
+    <!-- no translation found for screenrecord_audio_label (6183558856175159629) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_label (9016927171280567791) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_description (4922694220572186193) -->
+    <skip />
+    <!-- no translation found for screenrecord_mic_label (2111264835791332350) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_and_mic_label (1831323771978646841) -->
+    <skip />
+    <!-- no translation found for screenrecord_start (330991441575775004) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_only (4459670242451527727) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_and_audio (5351133763125180920) -->
+    <skip />
+    <!-- no translation found for screenrecord_taps_label (1595690528298857649) -->
+    <skip />
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"रोकने के लिए टैप करें"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"रोकें"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"रोकें"</string>
@@ -97,6 +117,8 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"स्क्रीन रिकॉर्डिंग मिटा दी गई"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"स्क्रीन रिकॉर्डिंग मिटाने में गड़बड़ी हुई"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"मंज़ूरी नहीं मिल सकी"</string>
+    <!-- no translation found for screenrecord_start_error (2200660692479682368) -->
+    <skip />
     <string name="usb_preference_title" msgid="1439924437558480718">"USB फ़ाइल स्थानांतरण विकल्प"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"मीडिया प्लेयर के रूप में माउंट करें (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"कैमरे के रूप में माउंट करें (PTP)"</string>
@@ -477,6 +499,8 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"फिर से न दिखाएं"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"सभी को हटाएं"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"प्रबंधित करें"</string>
+    <!-- no translation found for manage_notifications_history_text (57055985396576230) -->
+    <skip />
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"बिना आवाज़ या वाइब्रेशन वाली सूचनाएं"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"बातचीत"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"बिना आवाज़ की सभी सूचनाएं हटाएं"</string>
@@ -676,6 +700,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"आवाज़ या वाइब्रेशन न होने की वजह से आप काम में ध्यान लगा पाते हैं."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"आवाज़ या वाइब्रेशन होने की वजह से आपका ध्यान सूचनाओं पर जाता है."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"फ़्लोट करने वाले शॉर्टकट की मदद से इस सामग्री पर आपका ध्यान बना रहता है."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"ये सूचनाएं नहीं बदली जा सकती हैं."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"सूचनाओं के इस समूह को यहां कॉन्फ़िगर नहीं किया जा सकता"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"प्रॉक्सी सूचना"</string>
@@ -698,17 +726,25 @@
     <string name="notification_done" msgid="6215117625922713976">"हो गया"</string>
     <string name="inline_undo" msgid="9026953267645116526">"पहले जैसा करें"</string>
     <string name="demote" msgid="6225813324237153980">"इस सूचना को \'बातचीत नहीं\' के रूप में मार्क करें"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"पसंदीदा के रूप में मार्क करें"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"पसंदीदा से हटाएं"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"म्यूट करें"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"अनम्यूट करें"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"बबल के रूप में दिखाएं"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"बबल्स को बंद करें"</string>
+    <!-- no translation found for notification_conversation_favorite (1905240206975921907) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unfavorite (181383708304763807) -->
+    <skip />
+    <!-- no translation found for notification_conversation_mute (268951550222925548) -->
+    <skip />
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"आवाज़ या वाइब्रेशन चालू करें"</string>
+    <!-- no translation found for notification_conversation_bubble (2242180995373949022) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unbubble (6908427185031099868) -->
+    <skip />
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"होम स्क्रीन पर जोड़ें"</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_snooze_action" msgid="8411152711279433989">"स्नूज़ (थोड़ी देर के लिए चुप) करें"</string>
+    <!-- no translation found for notification_menu_snooze_action (5415729610393475019) -->
+    <skip />
+    <!-- no translation found for notification_menu_settings_action (7085494017202764285) -->
+    <skip />
     <string name="snooze_undo" msgid="60890935148417175">"पहले जैसा करें"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> के लिए याद दिलाया गया"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +816,8 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"डेटा बचाने की सेटिंग बंद है"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"चालू"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"बंद"</string>
+    <!-- no translation found for tile_unavailable (3095879009136616920) -->
+    <skip />
     <string name="nav_bar" msgid="4642708685386136807">"नेविगेशन बार"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"लेआउट"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"कुछ और बाएं बटन के प्रकार"</string>
@@ -964,6 +1002,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Magnification Overlay Window"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"स्क्रीन को बड़ा करके दिखाने वाली विंडो"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"स्क्रीन को बड़ा करके दिखाने वाली विंडो के नियंत्रण"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"फटाफट नियंत्रण"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"कंट्राेल जोड़ें"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"वह ऐप्लिकेशन चुनें जिससे आप कंट्राेल जोड़ना चाहते हैं"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one">फ़िलहाल, <xliff:g id="NUMBER_1">%s</xliff:g> कंट्राेल पसंदीदा है.</item>
+      <item quantity="other">फ़िलहाल, <xliff:g id="NUMBER_1">%s</xliff:g> कंट्राेल पसंदीदा हैं.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"कंट्राेल"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"झटपट ऐक्सेस पाने के लिए कंट्राेल चुनें"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 5eefc79..161c1ad 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zumiraj i ispuni zaslon"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Rastegni i ispuni zaslon"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Snimka zaslona"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Umetnuta je slika"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"šalje sliku"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Spremanje snimke zaslona..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Spremanje snimke zaslona..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Snimka zaslona spremljena"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Pokušajte ponovo napraviti snimku zaslona"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Zaslon nije snimljen zbog ograničenog prostora za pohranu"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Aplikacija ili vaša organizacija ne dopuštaju snimanje zaslona"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Snimanje zaslona"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Snimač zaslona"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Tekuća obavijest za sesiju snimanja zaslona"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Započni snimanje"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Snimi glasovni zapis"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Prikaži dodire"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Želite li započeti 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_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">"Početak"</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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Dodirnite da biste zaustavili"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Zaustavi"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pauza"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Snimanje zaslona izbrisano"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Pogreška prilikom brisanja snimanja zaslona"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Dohvaćanje dopuštenja nije uspjelo"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Pogreška prilikom pokretanja snimanja zaslona"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opcije USB prijenosa datoteka"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Učitaj kao media player (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Učitaj kao fotoaparat (PTP)"</string>
@@ -480,6 +489,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Ne prikazuj ponovo"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Izbriši sve"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Upravljajte"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Povijest"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Bešumne obavijesti"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Razgovori"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Izbriši sve bešumne obavijesti"</string>
@@ -679,6 +689,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Pomaže vam da se usredotočite bez zvučnih signala i vibracija."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Privlači vašu pažnju zvučnim signalima ili vibracijama."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Održava vam pozornost pomoću plutajućeg prečaca ovom sadržaju."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Te se obavijesti ne mogu izmijeniti."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Ta se grupa obavijesti ne može konfigurirati ovdje"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Obavijest poslana putem proxyja"</string>
@@ -701,17 +715,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Gotovo"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Poništi"</string>
     <string name="demote" msgid="6225813324237153980">"Označi da ova obavijest nije razgovor"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Favorit"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Nije omiljeno"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Zanemari"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Opozovi"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Prikaži u oblačiću"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Isključi oblačiće"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Važan razgovor"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Nije važan razgovor"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Utišan"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Upozoravanje"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Prikaz u oblačiću"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Ukloni oblačiće"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Dodavanje na početni zaslon"</string>
     <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g> za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_menu_gear_description" msgid="6429668976593634862">"kontrole obavijesti"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opcije odgode obavijesti"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Odgoda"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Podsjeti me"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Postavke"</string>
     <string name="snooze_undo" msgid="60890935148417175">"PONIŠTI"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Odgođeno <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -785,6 +800,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Štednja podatkovnog prometa je isključena"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Uključeno"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Isključeno"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Nedostupno"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigacijska traka"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Izgled"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Vrsta dodatnog lijevog gumba"</string>
@@ -970,4 +986,19 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Prozor za povećavanje"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Kontrole prozora za povećavanje"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Brze kontrole"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Dodavanje kontrola"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Odaberite aplikaciju putem koje želite dodati kontrole"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one">Trenutačno <xliff:g id="NUMBER_1">%s</xliff:g> omiljena.</item>
+      <item quantity="few">Trenutačno <xliff:g id="NUMBER_1">%s</xliff:g> omiljene.</item>
+      <item quantity="other">Trenutačno <xliff:g id="NUMBER_1">%s</xliff:g> omiljenih.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrole"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Odaberite kontrole za brzi pristup"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 5ce235d..21b383c 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Nagyítás a kitöltéshez"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Nyújtás kitöltéshez"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Képernyőkép"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Kép beszúrva"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"képet küldött"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Képernyőkép mentése..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Képernyőkép mentése..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"A képernyőkép mentése sikerült"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Próbálja meg újra elkészíteni a képernyőképet"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Nem menthet képernyőképet, mert kevés a tárhely"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Az alkalmazás vagy az Ön szervezete nem engedélyezi képernyőkép készítését"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Képernyőrögzítés"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Képernyőrögzítő"</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="1539048263178882562">"Rögzítés indítása"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Hang rögzítése"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Koppintások megjelenítése"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Koppintson a leállításhoz"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Leállítás"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Szünet"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"A képernyőről készült felvétel törölve"</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_permission_error" msgid="7856841237023137686">"Nincs engedély"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Hiba a képernyőrögzítés indításakor"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB-fájlátvitel beállításai"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Csatlakoztatás médialejátszóként (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Csatlakoztatás kameraként (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Ne jelenjen meg többé"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Az összes törlése"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Kezelés"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Előzmények"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Néma értesítések"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Beszélgetések"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Az összes néma értesítés törlése"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Hangjelzés és rezgés nélkül segít a koncentrálásban."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Figyelemfelkeltő a hangjelzésnek és rezgésnek köszönhetően."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"A tartalomra mutató lebegő parancsikon segítségével tartja fenn az Ön figyelmét."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ezeket az értesítéseket nem lehet módosítani."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Az értesítések jelen csoportját itt nem lehet beállítani"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Továbbított értesítés"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Kész"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Visszavonás"</string>
     <string name="demote" msgid="6225813324237153980">"Értesítés megjelölése mint nem beszélgetés"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Kedvenc"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Törlés a kedvencek közül"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Némítás"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Némítás feloldása"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Megjelenítés buborékként"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Buborékok kikapcsolása"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Fontos beszélgetés"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Nem fontos beszélgetés"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Lenémítva"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Némítás feloldása"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Buborék megjelenítése"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Buborékok eltávolítása"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Hozzáadás a kezdőképernyőhöz"</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">"értesítésvezérlők"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"értesítések halasztási beállításai"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Halasztás"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Emlékeztessen"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Beállítások"</string>
     <string name="snooze_undo" msgid="60890935148417175">"VISSZAVONÁS"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Elhalasztva: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Az Adatforgalom-csökkentő ki van kapcsolva"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Be"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Ki"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Nem használható"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigációs sáv"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Elrendezés"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"További bal oldali gombtípus"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Nagyítás ablaka"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Nagyítási vezérlők ablaka"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Gyorsvezérlők"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Vezérlők hozzáadása"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Alkalmazás kiválasztása, amelyről vezérlőket adhat hozzá"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> jelenlegi kedvenc.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> jelenlegi kedvenc.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Vezérlők"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Vezérlők kiválasztása a gyors hozzáféréshez"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index 4fa7096..e5d85a5 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Խոշորացնել` էկրանը լցնելու համար"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Ձգել` էկրանը լցնելու համար"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Սքրինշոթ"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Պատկերը զետեղվեց"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"պատկեր է ուղարկվել"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Սքրինշոթը պահվում է…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Սքրինշոթը պահվում է..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Սքրինշոթը պահվեց"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Փորձեք նորից"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Չհաջողվեց պահել սքրինշոթը անբավարար հիշողության պատճառով"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Հավելվածը կամ ձեր կազմակերպությունը չի թույլատրում սքրինշոթի ստացումը"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Էկրանի տեսագրում"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Էկրանի տեսագրիչ"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Էկրանի տեսագրման աշխատաշրջանի ընթացիկ ծանուցում"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Սկսել տեսագրումը"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Ձայնագրել ուղեկցող ձայները"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Ցույց տալ հպումները"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Սկսե՞լ տեսագրումը"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Տեսագրման ընթացքում Android-ի համակարգը կարող է գրանցել անձնական տեղեկություններ, որոնք տեսանելի են էկրանին կամ նվագարկվում են ձեր սարքում։ Սա ներառում է այնպիսի տեղեկություններ, ինչպիսիք են, օրինակ, գաղտնաբառերը, վճարային տվյալները, լուսանկարները, հաղորդագրությունները և նվագարկվող աուդիո ֆայլերը։"</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_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_stop_text" msgid="6549288689506057686">"Հպեք՝ դադարեցնելու համար"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Կանգնեցնել"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Դադարեցնել"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Էկրանի տեսագրությունը ջնջվեց"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Չհաջողվեց ջնջել տեսագրությունը"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Չհաջողվեց ստանալ անհրաժեշտ թույլտվությունները"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Չհաջողվեց սկսել տեսագրումը"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB ֆայլերի փոխանցման ընտրանքներ"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Միացնել որպես մեդիա նվագարկիչ (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Միացնել որպես ֆոտոխցիկ (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Այլևս ցույց չտալ"</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_gentle" msgid="3044910806569985386">"Անձայն ծանուցումներ"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Խոսակցություններ"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Ջնջել բոլոր անձայն ծանուցումները"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Ծանուցումները գալիս են առանց ձայնի և թրթռոցի։"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Ծանուցումները գալիս են ձայնով կամ թրթռոցով։"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Լողացող դյուրանցման միջոցով ձեր ուշադրությունն է գրավում բովանդակության նկատմամբ"</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Վերջին ամպիկներ չկան"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"Այստեղ կցուցադրվեն վերջերս փակված ամպիկները, որոնք կկարողանաք հեշտությամբ վերաբացել։"</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Այս ծանուցումները չեն կարող փոփոխվել:"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Ծանուցումների տվյալ խումբը հնարավոր չէ կարգավորել այստեղ"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Ծանուցումն ուղարկվել է պրոքսի սերվերի միջոցով"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Պատրաստ է"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Հետարկել"</string>
     <string name="demote" msgid="6225813324237153980">"Նշել այս ծանուցումը որպես ոչ խոսակցություն"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Ավելացնել ընտրանիում"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Հեռացնել ընտրանուց"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Անջատել ծանուցումները"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Միացնել ծանուցումները"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Ցուցադրել որպես ամպիկ"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Անջատել ամպիկները"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Կարևոր խոսակցություն"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Ոչ կարևոր խոսակցություն"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Լռեցված"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Միացնել ծանուցումների ձայնը"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Ցուցադրել ամպիկը"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Հեռացնել ամպիկները"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Ավելացնել հիմնական էկրանին"</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_snooze_action" msgid="8411152711279433989">"Հետաձգել"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Հիշեցնել ինձ"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Կարգավորումներ"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ՀԵՏԱՐԿԵԼ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Հետաձգվել է <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>ով"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Տվյալների խնայումն անջատված է"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Միացնել"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Անջատել"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Հասանելի չէ"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Նավարկման գոտի"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Դասավորություն"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Լրացուցիչ ձախ կոճակի տեսակ"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Խոշորացման պատուհան"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Խոշորացման պատուհանի կառավարման տարրեր"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Արագ կառավարման տարրեր"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Ավելացրեք կառավարման տարրեր"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Ընտրեք հավելված, որից կավելացվեն կառավարման տարրերը։"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one">Ընտրանու <xliff:g id="NUMBER_1">%s</xliff:g> տարր։</item>
+      <item quantity="other">Ընտրանու <xliff:g id="NUMBER_1">%s</xliff:g> տարր։</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Կառավարման տարրեր"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Ընտրեք կառավարման տարրեր՝ արագ մուտքի համար"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"Ընտրանի"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"Բոլորը"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"Չհաջողվեց բեռնել բոլոր կառավարների ցանկը։"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index b3db0f3..801b70c 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Perbesar utk mengisi layar"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Rentangkn utk mngisi layar"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Gambar disisipkan"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"mengirim gambar"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Menyimpan screenshot..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Menyimpan screenshot..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Screenshot disimpan"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Coba ambil screenshot lagi"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Tidak dapat menyimpan screenshot karena ruang penyimpanan terbatas"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Mengambil screenshot tidak diizinkan oleh aplikasi atau organisasi"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Rekaman Layar"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Perekam Layar"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notifikasi yang sedang berjalan untuk sesi rekaman layar"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Mulai Merekam"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Rekam voiceover"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Tampilkan sentuhan"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Mulai Merekam?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Saat merekam, Sistem Android dapat mengambil 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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Ketuk untuk menghentikan"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Stop"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Jeda"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Rekaman layar dihapus"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error saat menghapus rekaman layar"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Gagal mendapatkan izin"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Terjadi error saat memulai perekaman layar"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opsi transfer file USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Pasang sebagai pemutar media (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Pasang sebagai kamera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Jangan tampilkan lagi"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Hapus semua"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Kelola"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Histori"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Notifikasi senyap"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Percakapan"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Hapus semua notifikasi senyap"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Membantu Anda tetap fokus tanpa suara atau getaran."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Menarik perhatian Anda dengan suara atau getaran."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Menjaga perhatian dengan pintasan floating ke konten ini."</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Tidak ada balon baru-baru ini"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"Balon yang baru-baru ini ditutup akan muncul di sini agar mudah diambil."</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Notifikasi ini tidak dapat diubah."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Grup notifikasi ini tidak dapat dikonfigurasi di sini"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Notifikasi proxy"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Selesai"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Urungkan"</string>
     <string name="demote" msgid="6225813324237153980">"Tandai notifikasi ini sebagai bukan percakapan"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Favorit"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Batal favoritkan"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Bisukan"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Bunyikan"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Tampilkan sebagai balon"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Nonaktifkan balon"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Percakapan penting"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Bukan percakapan penting"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Dibisukan"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Membunyikan audio"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Tampilkan balon"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Hapus balon"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Tambahkan ke layar utama"</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">"kontrol notifikasi"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opsi tunda notifikasi"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Tunda"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Ingatkan saya"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Setelan"</string>
     <string name="snooze_undo" msgid="60890935148417175">"URUNGKAN"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Ditunda selama <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Penghemat Kuota nonaktif"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Aktif"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Nonaktif"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Tidak tersedia"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Bilah navigasi"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Tata Letak"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Jenis tombol ekstra kiri"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Jendela Pembesaran"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Kontrol Jendela Pembesaran"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Kontrol Cepat"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Tambahkan Kontrol"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Pilih aplikasi yang digunakan untuk menambahkan kontrol"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> favorit saat ini.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> favorit saat ini.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrol"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Pilih kontrol untuk akses cepat"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"Favorit"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"Semua"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"Daftar semua kontrol tidak dapat dimuat."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index 56e67ef..4ec778e 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Fylla skjá með aðdrætti"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Teygja yfir allan skjáinn"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Skjámynd"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Mynd sett inn"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"sendi mynd"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Vistar skjámynd…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Vistar skjámynd…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Skjámynd vistuð"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Prófaðu að taka skjámynd aftur"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Ekki tókst að vista skjámynd vegna takmarkaðs geymslupláss"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Forritið eða fyrirtækið þitt leyfir ekki skjámyndatöku"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Skjáupptaka"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Upptökutæki á skjá"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Áframhaldandi tilkynning fyrir skjáupptökulotu"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Hefja upptöku"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Taka upp talsetningu"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Sýna snertingar"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Hefja upptöku?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Á meðan tekið er upp getur Android kerfið fangað viðkvæmar upplýsingar sem sjást á skjánum eða spilast í tækinu. Þar á meðal eru upplýsingar á borð við aðgangsorð, greiðsluupplýsingar, myndir, skilaboð og hljóð."</string>
+    <string name="screenrecord_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Ýttu til að stöðva"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Stöðva"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Hlé"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Skjáupptöku eytt"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Villa við að eyða skjáupptöku"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Ekki tókst að fá heimildir"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Villa við að hefja upptöku skjás"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Valkostir USB-skráaflutnings"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Tengja sem efnisspilara (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Tengja sem myndavél (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Ekki sýna þetta aftur"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Hreinsa allt"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Stjórna"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Ferill"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Þöglar tilkynningar"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Samtöl"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Hreinsa allar þöglar tilkynningar"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Auðveldar þér að einbeita þér án hljóðs eða titrings."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Fangar athygli þína með hljóði eða titringi."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Fangar athygli þína með fljótandi flýtileið á þetta efni."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ekki er hægt að breyta þessum tilkynningum."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Ekki er hægt að stilla þessar tilkynningar hér"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Staðgengilstilkynning"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Lokið"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Afturkalla"</string>
     <string name="demote" msgid="6225813324237153980">"Merkja þessa tilkynningu sem „ekki samtal“"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Eftirlæti"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Fjarlægja úr eftirlæti"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Þagga"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Hætta að þagga"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Sýna sem blöðru"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Slökkva á blöðrum"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Mikilvægt samtal"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Ekki mikilvægt samtal"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Hljóð tekið af"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Viðvörun"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Sýna blöðru"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Fjarlægja blöðrur"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Bæta á heimaskjá"</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">"tilkynningastýringar"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"þöggunarstillingar tilkynninga"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Fresta"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Minna mig á"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Stillingar"</string>
     <string name="snooze_undo" msgid="60890935148417175">"AFTURKALLA"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Þaggað í <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Slökkt er á gagnasparnaði"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Kveikt"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Slökkt"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Ekki í boði"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Yfirlitsstika"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Útlit"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Gerð aukahnapps til vinstri"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Stækkunargluggi"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Stækkunarstillingar glugga"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Flýtistýringar"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Bæta við stýringum"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Veldu forrit sem bæta á við stýringum frá"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> núverandi eftirlæti.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> núverandi eftirlæti.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Stýringar"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Veldu stýringar fyrir skjótan aðgang"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 4230677..4d1db3a 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom per riempire schermo"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Estendi per riemp. schermo"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Immagine inserita"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"è stata inviata un\'immagine"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Salvataggio screenshot..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Salvataggio screenshot..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Screenshot salvato"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Riprova ad acquisire lo screenshot"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Impossibile salvare lo screenshot a causa dello spazio di archiviazione limitato"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"L\'acquisizione di screenshot non è consentita dall\'app o dall\'organizzazione"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Registrazione dello schermo"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Screen Recorder"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notifica costante per una sessione di registrazione dello schermo"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Avvia registrazione"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Registra voce fuori campo"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Mostra tocchi"</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ò catturare dati sensibili visibili sul tuo schermo o riprodotti durante la riproduzione sul tuo dispositivo. Sono incluse password, dettagli sui pagamenti, foto, messaggi e audio."</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">"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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Tocca per interrompere"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Interrompi"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pausa"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Registrazione dello schermo eliminata"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Errore durante l\'eliminazione della registrazione dello schermo"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Impossibile ottenere le autorizzazioni"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Errore durante l\'avvio della registrazione dello schermo"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opzioni trasferimento file USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Monta come lettore multimediale (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Monta come videocamera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Non mostrare più"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Cancella tutto"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Gestisci"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Storia"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Notifiche silenziose"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversazioni"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Cancella tutte le notifiche silenziose"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Favorisce la tua concentrazione grazie all\'assenza di suono o vibrazione."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Richiama la tua attenzione con suono o vibrazione."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Mantiene la tua attenzione con una scorciatoia mobile a questi contenuti."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Impossibile modificare queste notifiche."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Qui non è possibile configurare questo gruppo di notifiche"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Notifica inviata al proxy"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Fine"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Annulla"</string>
     <string name="demote" msgid="6225813324237153980">"Contrassegna questa notifica come \"non è una conversazione\""</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Aggiungi ai preferiti"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Rimuovi dai preferiti"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Disattiva"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Riattiva"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Mostra sotto forma di fumetto"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Disattiva i fumetti"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Conversazione importante"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Non è una conversazione importante"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Senza audio"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Avvisi"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Mostra fumetto"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Rimuovi fumetti"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Aggiungi a schermata Home"</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">"gestione delle notifiche"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opzioni di posticipazione notifiche"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Posticipa"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Ricordamelo"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Impostazioni"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ANNULLA"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Posticipato di <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Risparmio dati disattivato"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"On"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"OFF"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Non disponibile"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Barra di navigazione"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Layout"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Tipo di pulsante extra sinistra"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Finestra ingrandimento"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Finestra controlli di ingrandimento"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Controlli rapidi"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Aggiungi controlli"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Scegli un\'app da cui aggiungere controlli"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> preferiti attuali.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> preferito attuale.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Controlli"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Scegli i controlli per l\'accesso rapido"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index b20b10f..5d48af3 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"הגדל תצוגה כדי למלא את המסך"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"מתח כדי למלא את המסך"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"צילום מסך"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"התמונה התווספה"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"נשלחה תמונה"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"שומר צילום מסך..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"שומר צילום מסך..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"צילום המסך נשמר"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"יש לנסות שוב לבצע צילום מסך"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"לא היה מספיק מקום לשמור את צילום המסך"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"האפליקציה או הארגון שלך אינם מתירים ליצור צילומי מסך"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"הקלטת מסך"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"מכשיר הקלטה של המסך"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"התראה מתמשכת לסשן הקלטת מסך"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"הפעלת ההקלטה"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"‏הקלטת voiceover"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"הצגת הקשות"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"להתחיל את ההקלטה?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"‏בזמן ההקלטה, מערכת Android יכולה לתעד מידע רגיש שגלוי במסך או מופעל במכשיר שלך. זה כולל סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו."</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_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_stop_text" msgid="6549288689506057686">"אפשר להקיש כדי להפסיק"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"עצירה"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"השהיה"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"הקלטת המסך נמחקה"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"שגיאה במחיקת הקלטת המסך"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"קבלת ההרשאות נכשלה"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"שגיאה בהפעלה של הקלטת המסך"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"‏אפשרויות העברת קבצים ב-USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"‏טען כנגן מדיה (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"‏טען כמצלמה (PTP)"</string>
@@ -483,6 +492,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"אל תציג שוב"</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_gentle" msgid="3044910806569985386">"התראות שקטות"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"שיחות"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"ניקוי כל ההתראות השקטות"</string>
@@ -682,6 +692,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"עוזרת להתרכז ללא צלילים או רטט."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"מעוררת תשומת לב באמצעות צלילים או רטט."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"מעוררת תשומת לב באמצעות קיצור דרך צף לתוכן הזה."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"לא ניתן לשנות את ההתראות האלה."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"לא ניתן להגדיר כאן את קבוצת ההתראות הזו"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"‏התראה דרך שרת proxy"</string>
@@ -704,17 +718,18 @@
     <string name="notification_done" msgid="6215117625922713976">"סיום"</string>
     <string name="inline_undo" msgid="9026953267645116526">"ביטול"</string>
     <string name="demote" msgid="6225813324237153980">"סימון ההתראה הזו כהתראה שאינה משיחה"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"סימון כמועדפת"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"הסרה מהמועדפים"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"השתקה"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"ביטול ההשתקה"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"הצגה בתור בועה"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"כיבוי הבועות"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"שיחה חשובה"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"שיחה לא חשובה"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"מושתקת"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"שליחת התראות"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"הצגת בועה"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"הסרת בועות"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"הוספה למסך הבית"</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_snooze_action" msgid="8411152711279433989">"הפעלת נודניק"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"אשמח לקבל תזכורת"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"הגדרות"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ביטול"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"נדחה לטיפול בעוד <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -790,6 +805,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"‏חוסך הנתונים (Data Saver) כבוי"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"פועל"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"כבוי"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"לא זמין"</string>
     <string name="nav_bar" msgid="4642708685386136807">"סרגל ניווט"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"פריסה"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"סוג נוסף של לחצן שמאלי"</string>
@@ -974,6 +990,21 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"חלון ליצירת שכבת-על להגדלה"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"חלון הגדלה"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"בקרות של חלון ההגדלה"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"פקדים מהירים"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"הוספת פקדים"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"יש לבחור אפליקציות שמהן יתווספו פקדים"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="two"><xliff:g id="NUMBER_1">%s</xliff:g> מועדפים בשלב זה.</item>
+      <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> מועדפים בשלב זה.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> מועדפים בשלב זה.</item>
+      <item quantity="one">מועדף אחד (<xliff:g id="NUMBER_0">%s</xliff:g>) בשלב זה.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"פקדים"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"יש לבחור פקדים לגישה מהירה"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index b518973..b2059ef 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"画面サイズに合わせて拡大"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"画面サイズに合わせて拡大"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"スクリーンショット"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"画像を挿入しました"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"画像を送信しました"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"スクリーンショットを保存中..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"スクリーンショットを保存しています..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"スクリーンショットを保存しました"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"スクリーンショットを撮り直してください"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"空き容量が足りないため、スクリーンショットを保存できません"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"スクリーンショットの作成はアプリまたは組織で許可されていません"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"画面の録画"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"画面レコーダー"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"画面の録画セッション中の通知"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"録画を開始"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"ナレーションの録音"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"タップの表示"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"記録を開始しますか?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"録画中に機密情報が画面に表示されたりデバイスで再生されたりした場合、Android システムでキャプチャされることがあります。これには、パスワード、お支払い情報、写真、メッセージ、音声などが含まれます。"</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_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_stop_text" msgid="6549288689506057686">"タップして停止"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"停止"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"一時停止"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"画面の録画を削除しました"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"画面の録画の削除中にエラーが発生しました"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"権限を取得できませんでした"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"画面の記録中にエラーが発生しました"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USBファイル転送オプション"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"メディアプレーヤー(MTP)としてマウント"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"カメラ(PTP)としてマウント"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"次回から表示しない"</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_gentle" msgid="3044910806569985386">"サイレント通知"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"会話"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"サイレント通知がすべて消去されます"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"音やバイブレーションが作動しないため、通知に煩わされずに済みます。"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"音やバイブレーションで通知をお知らせします。"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"このコンテンツのフローティング ショートカットで通知をお知らせします。"</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"最近閉じたふきだしはありません"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"最近閉じたふきだしがここに表示され、簡単に確認できます。"</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"これらの通知は変更できません。"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"このグループの通知はここでは設定できません"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"代理通知"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"完了"</string>
     <string name="inline_undo" msgid="9026953267645116526">"元に戻す"</string>
     <string name="demote" msgid="6225813324237153980">"この通知を会話ではないとマーク"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"お気に入り"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"お気に入りから削除"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"ミュート"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"ミュートを解除"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"ふきだしとして表示"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"ふきだしを OFF にする"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"重要な会話"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"重要な会話ではない"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"マナーモード"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"アラートを受け取る"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"ふきだしを表示"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ふきだしを削除"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"ホーム画面に追加"</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_snooze_action" msgid="8411152711279433989">"スヌーズ"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"リマインダーの設定"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"設定"</string>
     <string name="snooze_undo" msgid="60890935148417175">"元に戻す"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"スヌーズ: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"データセーバー OFF"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"ON"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"OFF"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"使用不可"</string>
     <string name="nav_bar" msgid="4642708685386136807">"ナビゲーション バー"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"レイアウト"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"その他の左ボタンタイプ"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"拡大ウィンドウ"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"拡大ウィンドウ コントロール"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"クイック コントロール"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"コントロールの追加"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"コントロールを追加するアプリの選択"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">現在のお気に入りは <xliff:g id="NUMBER_1">%s</xliff:g> 個です。</item>
+      <item quantity="one">現在のお気に入りは <xliff:g id="NUMBER_0">%s</xliff:g> 個です。</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"コントロール"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"クイック アクセスのコントロールの選択"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"お気に入り"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"すべて"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"全コントロールの一覧を読み込めませんでした。"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index ab0dba8..e05f244 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"მასშტაბი შეცვალეთ ეკრანის შესავსებად."</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"გაწიეთ ეკრანის შესავსებად."</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ეკრანის ანაბეჭდი"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"სურათი ჩასმულია"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"გაიგზავნა სურათი"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"სკრინშოტის შენახვა…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ეკრანის სურათის შენახვა…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"ეკრანის ანაბეჭდი შენახულია"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"ხელახლა ცადეთ ეკრანის ანაბეჭდის გაკეთება"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"ეკრანის ანაბეჭდის შენახვა ვერ მოხერხდა შეზღუდული მეხსიერების გამო"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ეკრანის ანაბეჭდების შექმნა არ არის ნებადართული აპის ან თქვენი ორგანიზაციის მიერ"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"ეკრანის ჩაწერა"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"ეკრანის რეკორდერი"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"უწყვეტი შეტყობინება ეკრანის ჩაწერის სესიისთვის"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"ჩაწერის დაწყება"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"ხმის ჩაწერა"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"შეხებების ჩვენება"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"დაიწყოს ჩაწერა?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"ჩაწერის განმავლობაში Android სისტემას შეუძლია აღბეჭდოს ნებისმიერი სენსიტიური ინფორმაცია, რომელიც თქვენს ეკრანზე გამოჩნდება ან თქვენს მოწყობილობაზე დაიკვრება. აღნიშნული მოიცავს პაროლებს, გადახდის დეტალებს, ფოტოებს, შეტყობინებებსა და აუდიოს."</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_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_stop_text" msgid="6549288689506057686">"შეეხეთ შესაწყვეტად"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"შეწყვეტა"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"პაუზა"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"ეკრანის ჩანაწერი წაიშალა"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"ეკრანის ჩანაწერის წაშლისას წარმოიშვა შეცდომა"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"ნებართვების მიღება ვერ მოხერხდა"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"ეკრანის ჩაწერის დაწყებისას წარმოიქმნა შეცდომა"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB ფაილის ტრანსფერის პარამეტრები"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"მედია-საკრავად (MTP) ჩართვა"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"მიუერთეთ როგორც კამერა (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"აღარ მაჩვენო"</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_gentle" msgid="3044910806569985386">"ჩუმი შეტყობინებები"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"მიმოწერები"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"ყველა ჩუმი შეტყობინების გასუფთავება"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"გეხმარებათ ფოკუსირებაში ხმის ან ვიბრაციის უქონლობის გამო."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"იპყრობს თქვენს ყურადღებას ხმით ან ვიბრაციით."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"იპყრობს თქვენს ყურადღებას ამ კონტენტის მოლივლივე მალსახმობით."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"ამ შეტყობინებების შეცვლა შეუძლებელია."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"შეტყობინებების ამ ჯგუფის კონფიგურირება აქ შეუძლებელია"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"პროქსირებული შეტყობინება"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"მზადაა"</string>
     <string name="inline_undo" msgid="9026953267645116526">"მოქმედების გაუქმება"</string>
     <string name="demote" msgid="6225813324237153980">"ამ შეტყობინების მონიშვნა, როგორც არა მიმოწერის"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"რჩეული"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"რჩეულებიდან ამოღება"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"დადუმება"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"დადუმების მოხსნა"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"ბუშტის სახით ჩვენება"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"ბუშტების გამორთვა"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"მნიშვნელოვანი მიმოწერა"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"არ არის მნიშვნელოვანი მიმოწერა"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"გაჩუმებულია"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"გაფრთხილება"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"ბუშტის ჩვენება"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ბუშტების ამოშლა"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"მთავარ ეკრანზე დამატება"</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_snooze_action" msgid="8411152711279433989">"ჩაჩუმება"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"შემახსენე"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"პარამეტრები"</string>
     <string name="snooze_undo" msgid="60890935148417175">"მოქმედების გაუქმება"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"ჩაჩუმებული იქნება <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"მონაცემთა დამზოგველი გამორთულია"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"ჩართული"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"გამორთვა"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"მიუწვდომელი"</string>
     <string name="nav_bar" msgid="4642708685386136807">"ნავიგაციის ზოლი"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"განლაგება"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"მარცხენა დამატებითი ღილაკის ტიპი"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"გადიდების გადაფარვის ფანჯარა"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"გადიდების ფანჯარა"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"გადიდების კონტროლის ფანჯარა"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"სწრაფი მართვის ელემენტები"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"მართვის საშუალებების დამატება"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"აირჩიეთ აპი, რომლიდანაც მართვის საშუალებები დაემატება"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> ამჟამინდელი ფავორიტი.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> ამჟამინდელი ფავორიტი.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"მართვის საშუალებები"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"აირჩიეთ სწრაფი წვდომის მართვის საშუალებები"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 3c44cab..f3462a0 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Экранды толтыру үшін ұлғайту"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Экранды толтыру үшін созу"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Скриншот"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Сурет енгізілді"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"сурет жіберілді"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Скриншотты сақтауда…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Скриншотты сақтауда…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Скриншот сақталды"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Қайта скриншот жасап көріңіз"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Жадтағы шектеулі бос орынға байланысты скриншот сақталмайды"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Қолданба немесе ұйым скриншоттар түсіруге рұқсат етпейді"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Экранды бейнеге жазу"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Экрандағы бейнені жазу"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Экранды бейнеге жазудың ағымдағы хабарландыруы"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Жазуды бастау"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Кадр сыртындағы дыбысты жазу"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Түрту әрекеттерін көрсету"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Жазу басталсын ба?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Жазу кезінде Android жүйесі экранда көрсетілетін немесе құрылғыда ойнатылатын құпия ақпаратты пайдалана алады. Ол ақпаратқа құпия сөздер, төлеу ақпараты, фотосуреттер, хабарлар және аудио жатады."</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_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_stop_text" msgid="6549288689506057686">"Тоқтату үшін түртіңіз"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Тоқтату"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Тоқтата тұру"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Экран бейне жазбасы жойылды"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Экран бейне жазбасын жою кезінде қате кетті"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Рұқсаттар алынбады"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Экрандағы бейнені жазу кезінде қате шықты."</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB файлын жіберу опциялары"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Медиа ойнатқыш (MTP) ретінде қосыңыз"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Камера ретінде (PTP) қосыңыз"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Қайта көрсетпеу"</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_gentle" msgid="3044910806569985386">"Дыбыссыз хабарландырулар"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Сөйлесулер"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Барлық дыбыссыз хабарландыруларды өшіру"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Хабарландырулар келгенде, дыбыс шықпайды не дірілдемейді"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Хабарландырулар келгенде, дыбыс шығады не дірілдейді"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Осы мазмұнға бекітілген қалқымалы таңбашамен назарыңызды өзіне тартады."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Бұл хабарландыруларды өзгерту мүмкін емес."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Мұндай хабарландырулар бұл жерде конфигурацияланбайды."</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Прокси-сервер арқылы жіберілген хабарландыру"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Дайын"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Қайтару"</string>
     <string name="demote" msgid="6225813324237153980">"Хабарландыруды сөйлесу емес деп белгілеу"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Таңдаулы"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Таңдаулылар тізімінен шығару"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Дыбысын өшіру"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Дыбысын қосу"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Қалқымалы анықтама ретінде көрсету"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Қалқымалы анықтамаларды өшіру"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Маңызды чат"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Маңызды чат емес."</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Үнсіз режимге қойылған."</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Дыбысын қосу"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Қалқымалы анықтаманы көрсету"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Қалқымалы анықтамаларды өшіру"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Негізгі экранға қосу"</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_snooze_action" msgid="8411152711279433989">"Кідірту"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Есіме салу"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Параметрлер"</string>
     <string name="snooze_undo" msgid="60890935148417175">"КЕРІ ҚАЙТАРУ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> кідіртілді"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Дерек сақтағышы өшірулі"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Қосулы"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Өшірулі"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Қолжетімді емес"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Шарлау тақтасы"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Формат"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Қосымша сол жақ түйме түрі"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Ұлғайту терезесін қабаттастыру"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Ұлғайту терезесі"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Ұлғайту терезесінің басқару элементтері"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Жылдам басқару элементтері"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Басқару элементтерін енгізу"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Ішінен басқару элементтері енгізілетін қолданбаны таңдаңыз."</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">Ағымдағы таңдаулылар саны: <xliff:g id="NUMBER_1">%s</xliff:g>.</item>
+      <item quantity="one">Ағымдағы таңдаулылар саны: <xliff:g id="NUMBER_0">%s</xliff:g>.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Басқару элементтері"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Жылдам кіру үшін басқару элементтерін таңдау"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index 480b694..ddfe5cb 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"ពង្រីក​​ដើម្បី​ឲ្យ​ពេញ​អេក្រង់"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"ទាញ​ដើម្បី​ឲ្យ​ពេញ​អេក្រង់"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"រូបថតអេក្រង់"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"បាន​បញ្ចូល​រូបភាព"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"បាន​ផ្ញើរូបភាព"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"កំពុង​រក្សាទុក​រូបថត​អេក្រង់…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"កំពុង​រក្សាទុក​រូបថត​អេក្រង់..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"បានរក្សាទុក​រូបថតអេក្រង់"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"សាកល្បង​ថតរូបថត​អេក្រង់​ម្តងទៀត"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"មិនអាច​រក្សាទុក​រូបថតអេក្រង់​បានទេ ​ដោយសារ​ទំហំផ្ទុក​មានកម្រិតទាប"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ការថត​រូបអេក្រង់​មិនត្រូវ​បាន​អនុញ្ញាត​ដោយ​កម្មវិធី​នេះ ឬ​ស្ថាប័ន​របស់អ្នក"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"ការថត​សកម្មភាព​អេក្រង់"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"កម្មវិធីថត​អេក្រង់"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ការជូនដំណឹង​ដែល​កំពុង​ដំណើរការ​សម្រាប់​រយៈពេលប្រើ​ការថត​សកម្មភាព​អេក្រង់"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"ចាប់​ផ្តើមថត"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"ថត​ការបញ្ចូល​សំឡេង"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"បង្ហាញការចុច"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"ចាប់ផ្តើម​ថត​ឬ?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"នៅពេល​កំពុងថត ប្រព័ន្ធ Android អាច​ថត​ព័ត៌មាន​រសើប​ដែលអាច​មើលឃើញ​នៅលើ​អេក្រង់​របស់អ្នក ឬដែល​បានចាក់​នៅលើ​ឧបករណ៍​របស់អ្នក។ ព័ត៌មាននេះ​រួមមាន​ពាក្យសម្ងាត់ ព័ត៌មាន​អំពី​ការបង់ប្រាក់ រូបថត សារ និងសំឡេង។"</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_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_stop_text" msgid="6549288689506057686">"ចុច ដើម្បីបញ្ឈប់"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"ឈប់"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"ផ្អាក"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"បានលុប​ការថត​សកម្មភាព​អេក្រង់"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"មានបញ្ហា​ក្នុងការ​លុបការថត​សកម្មភាព​អេក្រង់"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"មិនអាច​ទទួលបាន​ការអនុញ្ញាត​ទេ"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"មានបញ្ហា​ក្នុងការ​ចាប់ផ្ដើម​ថត​អេក្រង់"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"ជម្រើស​ផ្ទេរ​ឯកសារ​តាម​យូអេសប៊ី"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"ភ្ជាប់​ជា​កម្មវិធី​ចាក់​មេឌៀ (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"ភ្ជាប់​ជា​ម៉ាស៊ីន​ថត (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"កុំ​បង្ហាញ​ម្ដងទៀត"</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_gentle" msgid="3044910806569985386">"ការជូនដំណឹង​ស្ងាត់"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"ការសន្ទនា"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"សម្អាត​ការជូនដំណឹង​ស្ងាត់ទាំងអស់"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"ជួយឱ្យ​អ្នក​ផ្តោតអារម្មណ៍ ដោយមិនឮសំឡេង ឬ​ការញ័រ។"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"ធ្វើឱ្យ​អ្នក​ចាប់អារម្មណ៍​តាមរយៈ​សំឡេង ឬ​ការញ័រ។"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ធ្វើឱ្យអ្នក​ចាប់អារម្មណ៍​ដោយប្រើ​ផ្លូវកាត់​អណ្ដែត​សម្រាប់ខ្លឹមសារនេះ។"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"មិនអាច​កែប្រែ​ការជូនដំណឹង​ទាំងនេះ​បានទេ។"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"មិនអាច​កំណត់​រចនាសម្ព័ន្ធ​ក្រុមការជូនដំណឹងនេះ​នៅទីនេះ​បានទេ"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"ការជូនដំណឹង​ជា​ប្រូកស៊ី"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"រួចរាល់"</string>
     <string name="inline_undo" msgid="9026953267645116526">"ត្រឡប់វិញ"</string>
     <string name="demote" msgid="6225813324237153980">"សម្គាល់​ការជូន​ដំណឹង​នេះ​ថា​មិនមែនជា​ការសន្ទនា"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"សំណព្វ"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"ដក​ចេញ​ពី​សំណព្វ"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"បិទ​សំឡេង"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"បើក​សំឡេង"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"បង្ហាញ​ជា​សារ​លេចឡើង"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"បិទ​សារ​លេចឡើង"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"ការសន្ទនា​សំខាន់"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"មិនមែនជា​ការសន្ទនា​សំខាន់​ទេ"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"បានបិទសំឡេង"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"បញ្ចេញ​សំឡេង"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"បង្ហាញ​ជា​សារ​លេចឡើង"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"លុប​សារលេចឡើង"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"បញ្ចូល​ទៅក្នុង​អេក្រង់​ដើម"</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_snooze_action" msgid="8411152711279433989">"ផ្អាក"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"រំលឹក​ខ្ញុំ"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"ការកំណត់"</string>
     <string name="snooze_undo" msgid="60890935148417175">"មិន​ធ្វើវិញ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"បាន​ផ្អាក​រយៈពេល <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"កម្មវិធីសន្សំសំចៃទិន្នន័យបានបិទ"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"បើក"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"បិទ"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"មិនមាន"</string>
     <string name="nav_bar" msgid="4642708685386136807">"របាររុករក"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"ប្លង់"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"ប្រភេទ​ប៊ូតុង​ខាង​ឆ្វេង​បន្ថែម"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"វិនដូ​ការពង្រីក"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"វិនដូគ្រប់គ្រង​​ការពង្រីក"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"ការគ្រប់គ្រង​រហ័ស"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"បញ្ចូល​ការគ្រប់គ្រង"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"ជ្រើសរើសកម្មវិធី​ដើម្បីបញ្ចូល​ការគ្រប់គ្រង"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">សំណព្វបច្ចុប្បន្ន <xliff:g id="NUMBER_1">%s</xliff:g>។</item>
+      <item quantity="one">សំណព្វបច្ចុប្បន្ន <xliff:g id="NUMBER_0">%s</xliff:g>។</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"ការគ្រប់គ្រង"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"ជ្រើសរើស​ការគ្រប់គ្រង​សម្រាប់ការចូលប្រើ​ប្រាស់រហ័ស"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index c65e653..7d2c6cb 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"ಪರದೆ ತುಂಬಿಸಲು ಝೂಮ್ ಮಾಡು"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"ಪರದೆ ತುಂಬಿಸಲು ವಿಸ್ತಾರಗೊಳಿಸು"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ಸ್ಕ್ರೀನ್‌ಶಾಟ್"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"ಚಿತ್ರವನ್ನು ಸೇರಿಸಲಾಗಿದೆ"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ಚಿತ್ರವನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಉಳಿಸಲಾಗುತ್ತಿದೆ…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಉಳಿಸಲಾಗುತ್ತಿದೆ…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ ಅನ್ನು ಉಳಿಸಲಾಗಿದೆ"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಅನ್ನು ಪುನಃ ತೆಗೆದುಕೊಳ್ಳಲು ಪ್ರಯತ್ನಿಸಿ"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"ಪರಿಮಿತ ಸಂಗ್ರಹಣೆ ಸ್ಥಳದ ಕಾರಣದಿಂದಾಗಿ ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಉಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ಅಪ್ಲಿಕೇಶನ್ ಅಥವಾ ಸಂಸ್ಥೆಯು ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳನ್ನು ತೆಗೆಯುವುದನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡರ್"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಸೆಶನ್‌ಗಾಗಿ ಚಾಲ್ತಿಯಲ್ಲಿರುವ ಅಧಿಸೂಚನೆ"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"ರೆಕಾರ್ಡಿಂಗ್ ಆರಂಭಿಸಿ"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"voiceover ಅನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡಿ"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"ಟ್ಯಾಪ್‌ಗಳನ್ನು ತೋರಿಸಿ"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸಬೇಕೆ?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"ರೆಕಾರ್ಡಿಂಗ್ ಸಮಯದಲ್ಲಿ, ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ಗೋಚರಿಸುವ ಅಥವಾ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಮಾಡಲಾದ ಸೂಕ್ಷ್ಮ ಮಾಹಿತಿಯನ್ನು Android ಸಿಸ್ಟಂ ಕ್ಯಾಪ್ಚರ್ ಮಾಡಬಹುದು. ಇದು ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ಮಾಹಿತಿ, ಫೋಟೋಗಳು, ಸಂದೇಶಗಳು ಮತ್ತು ಆಡಿಯೋವನ್ನು ಒಳಗೊಂಡಿದೆ."</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_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_stop_text" msgid="6549288689506057686">"ನಿಲ್ಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"ನಿಲ್ಲಿಸಿ"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"ವಿರಾಮಗೊಳಿಸಿ"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಅಳಿಸಲಾಗಿದೆ"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಅಳಿಸುವಾಗ ದೋಷ ಕಂಡುಬಂದಿದೆ"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"ಅನುಮತಿಗಳನ್ನು ಪಡೆಯುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸುವಾಗ ದೋಷ ಕಂಡುಬಂದಿದೆ"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB ಫೈಲ್ ವರ್ಗಾವಣೆ ಆಯ್ಕೆಗಳು"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"ಮೀಡಿಯಾ ಪ್ಲೇಯರ್ ರೂಪದಲ್ಲಿ ಅಳವಡಿಸಿ (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"ಕ್ಯಾಮರಾ ರೂಪದಲ್ಲಿ ಅಳವಡಿಸಿ (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"ಮತ್ತೊಮ್ಮೆ ತೋರಿಸದಿರು"</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_gentle" msgid="3044910806569985386">"ನಿಶ್ಶಬ್ಧ ಅಧಿಸೂಚನೆಗಳು"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"ಸಂವಾದಗಳು"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"ಎಲ್ಲಾ ನಿಶ್ಶಬ್ಧ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"ಶಬ್ದ ಅಥವಾ ವೈಬ್ರೇಷನ್ ಇರದಂತೆ ನಿಮಗೆ ಗಮನಹರಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"ಧ್ವನಿ ಅಥವಾ ವೈಬ್ರೇಷನ್ ಮೂಲಕ ನಿಮ್ಮ ಗಮನವನ್ನು ಸೆಳೆಯುತ್ತದೆ."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ಈ ವಿಷಯಕ್ಕೆ ಲಿಂಕ್ ಮಾಡಿ ಕೊಂಡೊಯ್ಯುವ ಶಾರ್ಟ್‌ಕಟ್‌ ಕಡೆಗೆ ಗಮನ ಇರಿಸಿ."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"ಈ ಗುಂಪಿನ ಅಧಿಸೂಚನೆಗಳನ್ನು ಇಲ್ಲಿ ಕಾನ್ಫಿಗರ್‌ ಮಾಡಲಾಗಿರುವುದಿಲ್ಲ"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"ಪ್ರಾಕ್ಸಿ ಮಾಡಿದ ಅಧಿಸೂಚನೆಗಳು"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"ಮುಗಿದಿದೆ"</string>
     <string name="inline_undo" msgid="9026953267645116526">"ರದ್ದುಮಾಡಿ"</string>
     <string name="demote" msgid="6225813324237153980">"ಈ ಅಧಿಸೂಚನೆಯನ್ನು ಸಂಭಾಷಣೆಯಲ್ಲ ಎಂಬುದಾಗಿ ಗುರುತಿಸಿ"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"ಮೆಚ್ಚಿನದು"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"ಮೆಚ್ಚಿನದಲ್ಲದ್ದು"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"ಮ್ಯೂಟ್ ಮಾಡಿ"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"ಅನ್‌ಮ್ಯೂಟ್ ಮಾಡಿ"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"ಗುಳ್ಳೆಯಾಗಿ ತೋರಿಸಿ"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"ಗುಳ್ಳೆಗಳನ್ನು ಆಫ್ ಮಾಡಿ"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"ಪ್ರಮುಖ ಸಂವಾದ"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"ಪ್ರಮುಖ ಸಂವಾದವಲ್ಲ"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"ಮೌನಗೊಳಿಸಲಾಗಿದೆ"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"ಎಚ್ಚರಿಸಲಾಗುತ್ತಿದೆ"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"ಬಬಲ್ ತೋರಿಸಿ"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ಬಬಲ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"ಮುಖಪುಟದ ಪರದೆಗೆ ಸೇರಿಸಿ"</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_snooze_action" msgid="8411152711279433989">"ಸ್ನೂಜ್"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"ನನಗೆ ಜ್ಞಾಪಿಸಿ"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ರದ್ದುಮಾಡಿ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ಗೆ ಸ್ನೂಜ್ ಮಾಡಲಾಗಿದೆ"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"ಡೇಟಾ ಸೇವರ್ ಆಫ್ ಆಗಿದೆ"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"ಆನ್"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"ಆಫ್"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="nav_bar" msgid="4642708685386136807">"ನ್ಯಾವಿಗೇಷನ್ ಬಾರ್"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"ಲೇಔಟ್"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"ಹೆಚ್ಚುವರಿ ಎಡ ಬಟನ್ ವಿಧ"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"ವರ್ಧನೆಯ ಓವರ್‌ಲೇ ವಿಂಡೋ"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"ವರ್ಧನೆಯ ವಿಂಡೋ"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"ವರ್ಧನೆಯ ವಿಂಡೋ ನಿಯಂತ್ರಣಗಳು"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"ತ್ವರಿತ ನಿಯಂತ್ರಣಗಳು"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"ನಿಯಂತ್ರಣಗಳನ್ನು ಸೇರಿಸಿ"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"ನಿಯಂತ್ರಣಗಳನ್ನು ಸೇರಿಸಲು ಆ್ಯಪ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> ಪ್ರಸ್ತುತ ಮೆಚ್ಚಿನವುಗಳು.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> ಪ್ರಸ್ತುತ ಮೆಚ್ಚಿನವುಗಳು.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"ನಿಯಂತ್ರಣಗಳು"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"ತ್ವರಿತ ಪ್ರವೇಶಕ್ಕಾಗಿ ನಿಯಂತ್ರಣಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index fb5818c..0c90b4a 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"전체화면 모드로 확대"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"전체화면 모드로 확대"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"스크린샷"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"이미지 삽입됨"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"이미지 보냄"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"캡쳐화면 저장 중..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"캡쳐화면 저장 중..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"스크린샷 저장됨"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"스크린샷을 다시 찍어 보세요."</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"저장용량이 부족하여 스크린샷을 저장할 수 없습니다"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"앱이나 조직에서 스크린샷 촬영을 허용하지 않습니다."</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"화면 녹화"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"화면 녹화"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"화면 녹화 세션에 관한 지속적인 알림"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"녹화 시작"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"음성 해설 녹음"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"탭한 항목 표시"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"녹화를 시작하시겠습니까?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Android 시스템이 녹화 중에 화면에 표시되거나 기기에서 재생되는 민감한 정보를 캡처할 수 있습니다. 여기에는 비밀번호, 결제 정보, 사진, 메시지 및 오디오가 포함됩니다."</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_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_stop_text" msgid="6549288689506057686">"탭하여 중지하기"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"중지"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"일시중지"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"화면 녹화가 삭제되었습니다."</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"화면 녹화는 삭제하는 중에 오류가 발생했습니다."</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"권한을 확보하지 못했습니다."</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"화면 녹화 시작 중 오류 발생"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB 파일 전송 옵션"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"미디어 플레이어로 마운트(MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"카메라로 마운트(PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"다시 표시 안함"</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_gentle" msgid="3044910806569985386">"무음 알림"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"대화"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"무음 알림 모두 삭제"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"소리나 진동 없이 집중할 수 있도록 도와줍니다"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"소리나 진동으로 알립니다."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"이 콘텐츠로 연결되는 플로팅 바로가기로 사용자의 주의를 끕니다."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"이 알림은 수정할 수 없습니다."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"이 알림 그룹은 여기에서 설정할 수 없습니다."</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"프록시를 통한 알림"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"완료"</string>
     <string name="inline_undo" msgid="9026953267645116526">"실행취소"</string>
     <string name="demote" msgid="6225813324237153980">"이 알림을 대화가 아닌 일반 알림으로 표시"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"즐겨찾기"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"즐겨찾기 해제"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"숨기기"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"숨기기 취소"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"버블로 표시"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"버블 사용 중지"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"중요한 대화"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"중요한 대화 아님"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"무음으로 설정됨"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"알림"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"버블 표시"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"버블 사용 중지"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"홈 화면에 추가"</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_snooze_action" msgid="8411152711279433989">"일시 중지"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"알림 받기"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"설정"</string>
     <string name="snooze_undo" msgid="60890935148417175">"실행취소"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> 동안 일시 중지됨"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"데이터 절약 모드 사용 안함"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"사용"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"사용 안함"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"사용할 수 없음"</string>
     <string name="nav_bar" msgid="4642708685386136807">"탐색 메뉴"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"레이아웃"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"추가 왼쪽 버튼 유형"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"확대 오버레이 창"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"확대 창"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"확대 창 컨트롤"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"빠른 컨트롤"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"컨트롤 추가"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"컨트롤을 추가할 앱을 선택하세요."</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">현재 즐겨찾는 항목 <xliff:g id="NUMBER_1">%s</xliff:g>개 있음</item>
+      <item quantity="one">현재 즐겨찾는 항목 <xliff:g id="NUMBER_0">%s</xliff:g>개 있음</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"제어"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"빠른 액세스를 위한 컨트롤을 선택하세요."</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 53d780e..3565389 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Экрнд тлтр ү. чен өлч өзг"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Экранды толтуруу ү-н чоюу"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Скриншот"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Сүрөт киргизилди"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"сүрөт жөнөттү"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Скриншот сакталууда…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Скриншот сакталууда..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Скриншот сакталды"</string>
@@ -80,11 +80,31 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Скриншотту кайра тартып көрүңүз"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Сактагычта бош орун аз болгондуктан скриншот сакталбай жатат"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Скриншот тартууга колдонмо же ишканаңыз тыюу салган."</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Экранды жаздыруу"</string>
+    <!-- no translation found for screenrecord_name (2596401223859996572) -->
+    <skip />
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Экранды жаздыруу сеансы боюнча учурдагы билдирме"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Жаздырып баштоо"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Үн коштоону жаздыруу"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Басылган жерди көрсөтүү"</string>
+    <!-- no translation found for screenrecord_start_label (1750350278888217473) -->
+    <skip />
+    <!-- no translation found for screenrecord_description (1123231719680353736) -->
+    <skip />
+    <!-- no translation found for screenrecord_audio_label (6183558856175159629) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_label (9016927171280567791) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_description (4922694220572186193) -->
+    <skip />
+    <!-- no translation found for screenrecord_mic_label (2111264835791332350) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_and_mic_label (1831323771978646841) -->
+    <skip />
+    <!-- no translation found for screenrecord_start (330991441575775004) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_only (4459670242451527727) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_and_audio (5351133763125180920) -->
+    <skip />
+    <!-- no translation found for screenrecord_taps_label (1595690528298857649) -->
+    <skip />
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Токтотуш үчүн басыңыз"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Токтотуу"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Тындыруу"</string>
@@ -97,6 +117,8 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Экранды жаздыруу өчүрүлдү"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Экранды жаздырууну өчүрүүдө ката кетти"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Уруксаттар алынбай калды"</string>
+    <!-- no translation found for screenrecord_start_error (2200660692479682368) -->
+    <skip />
     <string name="usb_preference_title" msgid="1439924437558480718">"USB менен файл өткөрүү мүмкүнчүлүктөрү"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Медиа ойноткуч катары кошуу (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Камера катары кошуу (PTP)"</string>
@@ -124,7 +146,7 @@
     <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_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>
@@ -211,7 +233,7 @@
     <string name="accessibility_battery_level_charging" msgid="8892191177774027364">"Батарея кубатталууда, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>%%."</string>
     <string name="accessibility_settings_button" msgid="2197034218538913880">"Система тууралоолору."</string>
     <string name="accessibility_notifications_button" msgid="3960913924189228831">"Билдирмелер"</string>
-    <string name="accessibility_overflow_action" msgid="8555835828182509104">"Бардык эскертмелерди көрүү"</string>
+    <string name="accessibility_overflow_action" msgid="8555835828182509104">"Бардык билдирмелерди көрүү"</string>
     <string name="accessibility_remove_notification" msgid="1641455251495815527">"Эскертмелерди тазалоо."</string>
     <string name="accessibility_gps_enabled" msgid="4061313248217660858">"GPS жандырылган."</string>
     <string name="accessibility_gps_acquiring" msgid="896207402196024040">"GPS байланышууда."</string>
@@ -222,7 +244,7 @@
     <skip />
     <!-- no translation found for accessibility_work_mode (1280025758672376313) -->
     <skip />
-    <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Эскертме жок кылынды."</string>
+    <string name="accessibility_notification_dismissed" msgid="4411652015138892952">"Эскертме өчүрүлдү."</string>
     <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Билдирмелер тактасы."</string>
     <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Тез тууралоолор."</string>
     <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Кулпуланган экран."</string>
@@ -289,7 +311,7 @@
     <string name="gps_notification_found_text" msgid="3145873880174658526">"GPS боюнча аныкталган жайгашуу"</string>
     <string name="accessibility_location_active" msgid="2845747916764660369">"Жайгаштыруу талаптары иштелүүдө"</string>
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"\"Сенсорлорду өчүрүүнү\" активдештирүү"</string>
-    <string name="accessibility_clear_all" msgid="970525598287244592">"Бардык эскертмелерди тазалоо."</string>
+    <string name="accessibility_clear_all" msgid="970525598287244592">"Бардык билдирмелерди тазалоо."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
       <item quantity="other">Дагы <xliff:g id="NUMBER_1">%s</xliff:g> эскертме бар.</item>
@@ -415,7 +437,7 @@
     <string name="zen_silence_introduction_voice" msgid="853573681302712348">"Ушуну менен эскертүүлөрдүн, музыканын, видеолордун жана оюндардын үндөрү жана дирилдөөлөрү өчүрүлөт. Бирок телефон менен сүйлөшө бересиз."</string>
     <string name="zen_silence_introduction" msgid="6117517737057344014">"Ушуну менен эскертүүлөрдүн, музыканын, видеолордун жана оюндардын үндөрү жана дирилдөөлөрү өчүрүлөт."</string>
     <string name="keyguard_more_overflow_text" msgid="5819512373606638727">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
-    <string name="speed_bump_explanation" msgid="7248696377626341060">"Анчейин шашылыш эмес эскертмелер төмөндө"</string>
+    <string name="speed_bump_explanation" msgid="7248696377626341060">"Анчейин шашылыш эмес билдирмелер төмөндө"</string>
     <string name="notification_tap_again" msgid="4477318164947497249">"Ачуу үчүн кайра таптап коюңуз"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Ачуу үчүн өйдө сүрүңүз"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Кайталоо үчүн экранды өйдө сүрүңүз"</string>
@@ -477,6 +499,8 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Экинчи көрсөтүлбөсүн"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Баарын тазалап салуу"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Башкаруу"</string>
+    <!-- no translation found for manage_notifications_history_text (57055985396576230) -->
+    <skip />
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Үнсүз билдирмелер"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Жазышуулар"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Маанилүү эмес билдирмелердин баарын өчүрүү"</string>
@@ -632,7 +656,7 @@
     <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="remove_from_settings_prompt" msgid="551565437265615426">"System UI Tuner Жөндөөлөрдөн өчүрүлүп, анын бардык функциялары токтотулсунбу?"</string>
     <string name="activity_not_found" msgid="8711661533828200293">"Колдонмо сиздин түзмөгүңүздө орнотулган эмес"</string>
     <string name="clock_seconds" msgid="8709189470828542071">"Сааттын секунддары көрсөтүлсүн"</string>
     <string name="clock_seconds_desc" msgid="2415312788902144817">"Абал тилкесинен сааттын секунддары көрсөтүлсүн. Батареянын кубаты көбүрөөк сарпталышы мүмкүн."</string>
@@ -643,7 +667,7 @@
     <string name="enable_bluetooth_message" msgid="6740938333772779717">"Баскычтобуңузду планшетиңизге туташтыруу үчүн, адегенде Bluetooth\'ту күйгүзүшүңүз керек."</string>
     <string name="enable_bluetooth_confirmation_ok" msgid="2866408183324184876">"Күйгүзүү"</string>
     <string name="show_silently" msgid="5629369640872236299">"Үнсүз көрүнөт"</string>
-    <string name="block" msgid="188483833983476566">"Бардык эскертмелерди бөгөттөө"</string>
+    <string name="block" msgid="188483833983476566">"Бардык билдирмелерди бөгөттөө"</string>
     <string name="do_not_silence" msgid="4982217934250511227">"Үнү менен көрсөтүлсүн"</string>
     <string name="do_not_silence_block" msgid="4361847809775811849">"Үнү менен көрсөтүлүп бөгөттөлбөсүн"</string>
     <string name="tuner_full_importance_settings" msgid="1388025816553459059">"Эскертмелерди башкаруу каражаттары"</string>
@@ -651,14 +675,14 @@
     <string name="tuner_full_importance_settings_off" msgid="5580102038749680829">"Өчүк"</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="notification_header_default_channel" msgid="225454696914642444">"Билдирмелер"</string>
-    <string name="notification_channel_disabled" msgid="928065923928416337">"Мындан ары бул эскертмелер сизге көрсөтүлбөйт"</string>
-    <string name="notification_channel_minimized" msgid="6892672757877552959">"Бул эскертмелер кичирейтилет"</string>
+    <string name="notification_channel_disabled" msgid="928065923928416337">"Мындан ары бул билдирмелер сизге көрсөтүлбөйт"</string>
+    <string name="notification_channel_minimized" msgid="6892672757877552959">"Бул билдирмелер кичирейтилет"</string>
     <string name="notification_channel_silenced" msgid="1995937493874511359">"Бул билдирмелер үнсүз көрсөтүлөт"</string>
     <string name="notification_channel_unsilenced" msgid="94878840742161152">"Бул билдирмелер тууралуу кабарлап турабыз"</string>
-    <string name="inline_blocking_helper" msgid="2891486013649543452">"Адатта мындай эскертмелерди өткөрүп жибересиз. \nАлар көрсөтүлө берсинби?"</string>
+    <string name="inline_blocking_helper" msgid="2891486013649543452">"Адатта мындай билдирмелерди өткөрүп жибересиз. \nАлар көрсөтүлө берсинби?"</string>
     <string name="inline_done_button" msgid="6043094985588909584">"Бүттү"</string>
     <string name="inline_ok_button" msgid="603075490581280343">"Колдонуу"</string>
-    <string name="inline_keep_showing" msgid="8736001253507073497">"Бул эскертмелер көрсөтүлө берсинби?"</string>
+    <string name="inline_keep_showing" msgid="8736001253507073497">"Бул билдирмелер көрсөтүлө берсинби?"</string>
     <string name="inline_stop_button" msgid="2453460935438696090">"Эскертмелерди токтотуу"</string>
     <string name="inline_deliver_silently_button" msgid="2714314213321223286">"Үнсүз жеткирүү"</string>
     <string name="inline_block_button" msgid="479892866568378793">"Бөгөттөө"</string>
@@ -669,13 +693,17 @@
     <string name="inline_silent_button_alert" msgid="5705343216858250354">"Билдирүү"</string>
     <string name="inline_silent_button_keep_alerting" msgid="6577845442184724992">"Кабар бериле берсин"</string>
     <string name="inline_turn_off_notifications" msgid="8543989584403106071">"Билдирмелерди өчүрүү"</string>
-    <string name="inline_keep_showing_app" msgid="4393429060390649757">"Бул колдонмонун эскертмелери көрсөтүлө берсинби?"</string>
+    <string name="inline_keep_showing_app" msgid="4393429060390649757">"Бул колдонмонун билдирмелери көрсөтүлө берсинби?"</string>
     <string name="notification_silence_title" msgid="8608090968400832335">"Үнсүз"</string>
     <string name="notification_alert_title" msgid="7629202599338071971">"Шашылыш билдирүү"</string>
     <string name="notification_bubble_title" msgid="8330481035191903164">"Көбүк"</string>
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Үн же дирилдөөсүз ой топтоого жардам берет."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Билдирүүдөн үн чыгат же дирилдейт."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Калкыма ыкчам баскыч менен көңүлүңүздү бул мазмунга буруп турат."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Бул билдирмелерди өзгөртүүгө болбойт."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Бул билдирмелердин тобун бул жерде конфигурациялоого болбойт"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Прокси билдирмеси"</string>
@@ -698,17 +726,25 @@
     <string name="notification_done" msgid="6215117625922713976">"Бүттү"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Кайтаруу"</string>
     <string name="demote" msgid="6225813324237153980">"Бул билдирме \"жазышуу эмес\" катары белгиленсин"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Сүйүктүүлөргө кошуу"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Сүйүктүүлөрдөн чыгаруу"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Үнүн басуу"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Үнүн чыгаруу"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Көбүк катары көрсөтүү"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Көбүктөрдү өчүрүү"</string>
+    <!-- no translation found for notification_conversation_favorite (1905240206975921907) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unfavorite (181383708304763807) -->
+    <skip />
+    <!-- no translation found for notification_conversation_mute (268951550222925548) -->
+    <skip />
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Билдирүү"</string>
+    <!-- no translation found for notification_conversation_bubble (2242180995373949022) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unbubble (6908427185031099868) -->
+    <skip />
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Башкы экранга кошуу"</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_gear_description" msgid="6429668976593634862">"билдирмелерди башкаруу каражаттары"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"эскертмени тындыруу опциялары"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Тындыруу"</string>
+    <!-- no translation found for notification_menu_snooze_action (5415729610393475019) -->
+    <skip />
+    <!-- no translation found for notification_menu_settings_action (7085494017202764285) -->
+    <skip />
     <string name="snooze_undo" msgid="60890935148417175">"КАЙТАРУУ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> тындырылды"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +816,8 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Трафикти үнөмдөө режими өчүрүлгөн"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Күйүк"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Өчүк"</string>
+    <!-- no translation found for tile_unavailable (3095879009136616920) -->
+    <skip />
     <string name="nav_bar" msgid="4642708685386136807">"Чабыттоо тилкеси"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Калып"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Сол жактагы кошумча баскычтын түрү"</string>
@@ -958,12 +996,25 @@
     <string name="bubble_accessibility_action_move_bottom_left" msgid="6339015902495504715">"Төмөнкү сол жакка жылдыруу"</string>
     <string name="bubble_accessibility_action_move_bottom_right" msgid="7471571700628346212">"Төмөнкү оң жакка жылдырыңыз"</string>
     <string name="bubble_dismiss_text" msgid="7071770411580452911">"Жабуу"</string>
-    <string name="notification_content_system_nav_changed" msgid="5077913144844684544">"Тутум чабыттоосу жаңыртылды. Өзгөртүү үчүн, Жөндөөлөргө өтүңүз."</string>
+    <string name="notification_content_system_nav_changed" msgid="5077913144844684544">"Тутум чабыттоосу жаңырды. Өзгөртүү үчүн, Жөндөөлөргө өтүңүз."</string>
     <string name="notification_content_gesture_nav_available" msgid="4431460803004659888">"Тутум чабыттоосун жаңыртуу үчүн Жөндөөлөргө өтүңүз"</string>
     <string name="inattentive_sleep_warning_title" msgid="3891371591713990373">"Көшүү режими"</string>
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Чоңойтуу терезесин үстүнө коюу"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Чоңойтуу терезеси"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Чоңойтуу терезесин башкаруу каражаттары"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Ыкчам көзөмөл"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Көзөмөлдөө функцияларын кошуу"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Көзөмөлдөө функцияларын кошуу үчүн колдонмо тандоо"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">Учурда <xliff:g id="NUMBER_1">%s</xliff:g> сүйүктүү бар.</item>
+      <item quantity="one">Учурда <xliff:g id="NUMBER_0">%s</xliff:g> сүйүктүү бар.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Башкаруу элементтери"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Тез табуу мүмкүнчүлүгү үчүн көзөмөлдөө функцияларын тандоо"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index 48166f3..c9fa791 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"ຊູມໃຫ້ເຕັມໜ້າຈໍ"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"ປັບໃຫ້ເຕັມໜ້າຈໍ"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ພາບໜ້າຈໍ"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"ແຊກຮູບແລ້ວ"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ສົ່ງຮູບແລ້ວ"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"ກຳລັງບັນທຶກຮູບໜ້າຈໍ"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ກຳລັງບັນທຶກພາບໜ້າຈໍ..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"ບັນທຶກຮູບໜ້າຈໍໄວ້ແລ້ວ"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"ກະລຸນາລອງຖ່າຍຮູບໜ້າຈໍອີກຄັ້ງ"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"ບໍ່ສາມາດຖ່າຍຮູບໜ້າຈໍໄດ້ເນື່ອງຈາກພື້ນທີ່ຈັດເກັບຂໍ້ມູນມີຈຳກັດ"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ແອັບ ຫຼື ອົງກອນຂອງທ່ານບໍ່ອະນຸຍາດໃຫ້ຖ່າຍຮູບໜ້າຈໍ"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"ການບັນທຶກໜ້າຈໍ"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"ຕົວບັນທຶກໜ້າຈໍ"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ການແຈ້ງເຕືອນສຳລັບເຊດຊັນການບັນທຶກໜ້າຈໍໃດໜຶ່ງ"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"ເລີ່ມການບັນທຶກ"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"ບັນທຶກສຽງພາກ"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"ສະແດງການແຕະ"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"ເລີ່ມການບັນທຶກບໍ?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"ໃນລະຫວ່າງການບັນທຶກ, ລະບົບ Android ຈະສາມາດບັນທຶກຂໍ້ມູນທີ່ລະອຽດອ່ອນໃດກໍຕາມທີ່ສະແດງຢູ່ໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຢູ່ອຸປະກອນທ່ານ. ນີ້ຮວມເຖິງລະຫັດຜ່ານ, ຂໍ້ມູນການຈ່າຍເງິນ, ຮູບ, ຂໍ້ຄວາມ ແລະ ສຽງນຳ."</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_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_stop_text" msgid="6549288689506057686">"ແຕະ​ເພື່ອ​ຢຸດ"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"ຢຸດ"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"ຢຸດຊົ່ວຄາວ"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"ລຶບການບັນທຶກໜ້າຈໍອອກແລ້ວ"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"ເກີດຄວາມຜິດພາດໃນການລຶບການບັນທຶກໜ້າຈໍ"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"ໂຫຼດສິດອະນຸຍາດບໍ່ສຳເລັດ"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"ເກີດຄວາມຜິດພາດໃນການບັນທຶກໜ້າຈໍ"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB ໂຕເລືອກການຍ້າຍໄຟລ໌"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"ເຊື່ອມຕໍ່ເປັນ media player (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"ເຊື່ອມຕໍ່ເປັນກ້ອງຖ່າຍຮູບ (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"ບໍ່​ຕ້ອງ​ສະ​ແດງ​ອີກ"</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_gentle" msgid="3044910806569985386">"ການແຈ້ງເຕືອນແບບງຽບ"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"ການສົນທະນາ"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"ລຶບລ້າງການແຈ້ງເຕືອນແບບງຽບທັງໝົດ"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"ຊ່ວຍທ່ານມີສະມາທິໂດຍບໍ່ໃຊ້ສຽງ ຫຼື ການສັ່ນເຕືອນ."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"ດຶງຄວາມສົນໃຈຂອງທ່ານດ້ວຍສຽງ ຫຼື ການສັ່ນເຕືອນ."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ເອົາໃຈໃສ່ທາງລັດແບບລອຍໄປຫາເນື້ອຫານີ້."</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ບໍ່ມີ bubble ຫຼ້າສຸດ"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"Bubble ທີ່ຫາກໍປິດໄປຈະປາກົດຢູ່ບ່ອນນີ້ເພື່ອໃຫ້ດຶງໄດ້ງ່າຍ."</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"ບໍ່ສາມາດແກ້ໄຂການແຈ້ງເຕືອນເຫຼົ່ານີ້ໄດ້."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"ບໍ່ສາມາດຕັ້ງຄ່າກຸ່ມການແຈ້ງເຕືອນນີ້ຢູ່ບ່ອນນີ້ໄດ້"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"ການແຈ້ງເຕືອນແບບພຣັອກຊີ"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"ສຳເລັດແລ້ວ"</string>
     <string name="inline_undo" msgid="9026953267645116526">"ຍົກເລີກ"</string>
     <string name="demote" msgid="6225813324237153980">"ໝາຍການແຈ້ງເຕືອນນີ້ວ່າບໍ່ແມ່ນການສົນທະນາ"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"ລາຍ​ການ​ທີ່​ມັກ"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"ຍົກເລີກລາຍການທີ່ມັກ"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"ປິດສຽງ"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"ເຊົາປິດສຽງ"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"ສະແດງເປັນ bubble"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"ປິດການໃຊ້ bubble"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"ການສົນທະນາສຳຄັນ"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"ບໍ່ແມ່ນການສົນທະນາສຳຄັນ"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"ປິດສຽງແລ້ວ"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"ການເຕືອນ"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"ສະແດງຟອງນ້ຳ"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ລຶບຟອງນ້ຳອອກ"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"ເພີ່ມໃສ່ໜ້າຈໍຫຼັກ"</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_snooze_action" msgid="8411152711279433989">"ເລື່ອນ"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"ແຈ້ງເຕືອນຂ້ອຍ"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"ການຕັ້ງຄ່າ"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ຍົກເລີກ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"ເລື່ອນໄປ <xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ນາທີແລ້ວ"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"ປິດຕົວປະຢັດອິນເຕີເນັດຢູ່"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"ເປີດ"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"ປິດ"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"ບໍ່ສາມາດໃຊ້ໄດ້"</string>
     <string name="nav_bar" msgid="4642708685386136807">"ແຖບນຳທາງ"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"ຮູບແບບ"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"ປະເພດປຸ່ມຊ້າຍພິເສດ"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"ໜ້າຈໍການຂະຫຍາຍ"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"ການຄວບຄຸມໜ້າຈໍການຂະຫຍາຍ"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"ການຄວບຄຸມດ່ວນ"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"ເພີ່ມການຄວບຄຸມ"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"ເລືອກແອັບໃດໜຶ່ງທີ່ຈະເພີ່ມການຄວບຄຸມ"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> ລາຍການທີ່ມັກປັດຈຸບັນ.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> ລາຍການທີ່ມັກປັດຈຸບັນ.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"ການຄວບຄຸມ"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"ເລືອກການຄວບຄຸມສຳລັບການເຂົ້າເຖິງດ່ວນ"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"ລາຍການທີ່ມັກ"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"ທັງໝົດ"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"ບໍ່ສາມາດໂຫຼດລາຍຊື່ການຄວບຄຸມທັງໝົດໄດ້."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 70bcf37..3132439 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Keisti mast., kad atit. ekr."</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Ištempti, kad atit. ekr."</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Ekrano kopija"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Vaizdas įterptas"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"išsiuntė vaizdą"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Išsaugoma ekrano kopija..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Išsaugoma ekrano kopija..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Ekrano kopija išsaugota"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Pabandykite padaryti ekrano kopiją dar kartą"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Negalima išsaugoti ekrano kopijos dėl ribotos saugyklos vietos"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Jūsų organizacijoje arba naudojant šią programą neleidžiama daryti ekrano kopijų"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Ekrano įrašymas"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Ekrano garso įrašytuvas"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Šiuo metu rodomas ekrano įrašymo sesijos pranešimas"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Pradėti įrašymą"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Įrašyti balsą už kadro"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Rodyti palietimus"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Sustabdykite palietę"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Sustabdyti"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pristabdyti"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Ekrano įrašas ištrintas"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Ištrinant ekrano įrašą įvyko klaida"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Nepavyko gauti leidimų"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Pradedant ekrano vaizdo įrašymą iškilo problema"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB failo perdavimo parinktys"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Įmontuoti kaip medijos leistuvę (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Įmontuoti kaip fotoaparatą (PTP)"</string>
@@ -483,6 +492,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Daugiau neberodyti"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Viską išvalyti"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Tvarkyti"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Istorija"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Tylieji pranešimai"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Pokalbiai"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Išvalyti visus tylius pranešimus"</string>
@@ -682,6 +692,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Padeda atkreipti dėmesį be garso arba vibravimo."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Atkreipia dėmesį garsu arba vibravimu."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Naudojant slankųjį spartųjį klavišą lengviau sutelkti dėmesį į šį turinį."</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nėra naujausių debesėlių"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"Neseniai atmesti debesėliai bus rodomi čia, kad galėtumėte lengvai vėl juos pasiekti."</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Šių pranešimų keisti negalima."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Šios grupės pranešimai čia nekonfigūruojami"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Per tarpinį serverį gautas pranešimas"</string>
@@ -704,17 +716,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Atlikta"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Anuliuoti"</string>
     <string name="demote" msgid="6225813324237153980">"Žymėti šį pranešimą kaip ne pokalbį"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Mėgstamiausi"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Pašalinti iš mėgstamiausių"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Nutildyti"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Rodyti"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Rodyti kaip debesėlį"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Išjungti debesėlius"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Svarbus pokalbis"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Nesvarbus pokalbis"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Nutildyta"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Įspėti"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Rodyti debesėlį"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Pašalinti debesėlius"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Pridėti prie pagrindinio ekrano"</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">"pranešimų valdikliai"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"pranešimų snaudimo parinktys"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Snausti"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Priminti"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Nustatymai"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ANULIUOTI"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Nustatyta snausti <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -790,6 +803,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Duomenų taupymo priemonė išjungta"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Įjungta"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Išjungta"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Nepasiekiama"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Naršymo juosta"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Išdėstymas"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Papildomo mygtuko kairėje tipas"</string>
@@ -975,4 +989,17 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Didinimo langas"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Didinimo lango valdikliai"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Spartieji valdikliai"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Valdiklių pridėjimas"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Pasirinkite programą, iš kurios norėsite pridėti valdiklių"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> dabartinis mėgstamiausias elementas.</item>
+      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> dabartiniai mėgstamiausi elementai.</item>
+      <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> dabartinio mėgstamiausio elemento.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> dabartinių mėgstamiausių elementų.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Valdikliai"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Pasirinkite sparčiosios prieigos valdiklius"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"Mėgstamiausi"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"Visi"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"Nepavyko įkelti visų valdiklių sąrašo."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 6c28b10..3d10ba1 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Tālumm., lai aizp. ekr."</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Stiepiet, lai aizp. ekr."</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Ekrānuzņēmums"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Attēls ir ievietots"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"nosūtīts attēls"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Saglabā ekrānuzņēmumu…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Notiek ekrānuzņēmuma saglabāšana..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Ekrānuzņēmums saglabāts"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Mēģiniet izveidot jaunu ekrānuzņēmumu."</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Nevar saglabāt ekrānuzņēmumu, jo krātuvē nepietiek vietas."</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Lietotne vai jūsu organizācija neatļauj veikt ekrānuzņēmumus."</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Notiek ekrāna ierakstīšana"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Ekrāna ierakstītājs"</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="1539048263178882562">"Sākt ierakstīšanu"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Ierakstīt balsi"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Rādīt pieskārienus"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Pieskarieties, lai apturētu"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Pārtraukt"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Apturēt"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Ekrāna ieraksts ir izdzēsts."</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Dzēšot ekrāna ierakstu, radās kļūda."</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Neizdevās iegūt atļaujas."</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Sākot ierakstīt ekrāna saturu, radās kļūda."</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB failu pārsūtīšanas opcijas"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Pievienot kā multivides atskaņotāju (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Pievienot kā kameru (PTP)"</string>
@@ -480,6 +489,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Vairs nerādīt"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Dzēst visu"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Pārvaldīt"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Vēsture"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Klusie paziņojumi"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Sarunas"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Notīrīt visus klusos paziņojumus"</string>
@@ -679,6 +689,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Palīdz jums koncentrēties, nenovēršot uzmanību ar skaņu vai vibrāciju."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Jūsu uzmanība tiek piesaistīta ar skaņas vai vibrācijas signālu."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Piesaista jūsu uzmanību, rādot peldošu saīsni uz šo saturu."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Šos paziņojumus nevar modificēt."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Šeit nevar konfigurēt šo paziņojumu grupu."</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Starpniekservera paziņojums"</string>
@@ -701,17 +715,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Gatavs"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Atsaukt"</string>
     <string name="demote" msgid="6225813324237153980">"Atzīmēt, ka šis paziņojums nav saruna"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Pievienot izlasei"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Noņemt no izlases"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Izslēgt skaņu"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Ieslēgt skaņu"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Rādīt kā burbuli"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Izslēgt burbuļus"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Svarīga saruna"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Nav svarīga saruna"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Bez skaņas signāla"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Saņemt brīdinājumus"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Rādīt burbuli"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Noņemt burbuļus"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Pievienot sākuma ekrānam"</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">"paziņojumu vadīklas"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"paziņojumu atlikšanas opcijas"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Atlikt"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Atgādināt"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Iestatījumi"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ATSAUKT"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Atlikts: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -785,6 +800,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Datu lietojuma samazinātājs ir izslēgts."</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Ieslēgts"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Izslēgts"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Nav pieejams"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigācijas josla"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Izkārtojums"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Kreisās puses papildu pogas veids"</string>
@@ -969,6 +985,20 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Palielināšanas pārklājuma logs"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Palielināšanas logs"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Palielināšanas loga vadīklas"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Ātrās vadīklas"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Vadīklu pievienošana"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Izvēlieties lietotni, no kuras pievienot vadīklas."</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="zero">Šobrīd izlasē ir <xliff:g id="NUMBER_1">%s</xliff:g> vienumi.</item>
+      <item quantity="one">Šobrīd izlasē ir <xliff:g id="NUMBER_1">%s</xliff:g> vienums.</item>
+      <item quantity="other">Šobrīd izlasē ir <xliff:g id="NUMBER_1">%s</xliff:g> vienumi.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Vadīklas"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Izvēlieties vadīklas ātrajai piekļuvei."</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index f81c5ff..e1e6365 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Зумирај да се исполни екранот"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Растегни да се исполни екранот"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Слика од екранот"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Вметната е слика"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"испрати слика"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Сликата на екранот се зачувува..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Сликата на екранот се зачувува..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Сликата од екранот е зачувана"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Повторно обидете се да направите слика од екранот"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Сликата од екранот не може да се зачува поради ограничена меморија"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Апликацијата или вашата организација не дозволува снимање слики од екранот"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Снимање на екранот"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Снимач на екранот"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Тековно известување за сесија за снимање на екранот"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Започни со снимање"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Снимај коментар"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Прикажувај допири"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Да се започне со снимање?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"При снимањето, системот на Android може да ги сними сите чувствителни податоци што се видливи на вашиот екран или пуштени на уредот. Ова вклучува лозинки, податоци за плаќање, фотографии, пораки и аудио."</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_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_stop_text" msgid="6549288689506057686">"Допрете за запирање"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Сопри"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Паузирај"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Снимката од екранот е избришана"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Грешка при бришењето на снимката од екранот"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Не успеаја да се добијат дозволи"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Грешка при почетокот на снимањето на екранот"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Пренос на датотека со USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Монтирај како мултимедијален плеер (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Монтирај како фотоапарат (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Не покажувај повторно"</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_gentle" msgid="3044910806569985386">"Тивки известувања"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Разговори"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Исчисти ги сите тивки известувања"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Ви помага да се концентрирате без звук или вибрации."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Ви го привлекува вниманието со звук или вибрации."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Ви го задржува вниманието со лебдечка кратенка на содржинава."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Овие известувања не може да се изменат"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Оваа група известувања не може да се конфигурира тука"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Известување преку прокси"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Готово"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Врати"</string>
     <string name="demote" msgid="6225813324237153980">"Означи го известувањево како „не е разговор“"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Омилен"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Неомилен"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Исклучи звук"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Вклучи звук"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Прикажи како балонче"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Исклучи балончиња"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Важен разговор"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Неважен разговор"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Стишен"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Предупредувај"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Прикажи балонче"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Отстрани ги балончињата"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Додај на почетниот екран"</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_snooze_action" msgid="8411152711279433989">"Одложете"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Потсети ме"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Поставки"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ВРАТИ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Одложено за <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Штедачот на интернет е исклучен"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Вклучено"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Исклучено"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Недостапно"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Лента за навигација"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Распоред"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Тип дополнително лево копче"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Прозорец за зголемување"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Контроли на прозорец за зголемување"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Брзи контроли"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Додајте контроли"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Изберете апликација од која ќе додавате контроли"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> моментална омилена.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> моментални омилени.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Контроли"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Изберете контроли за брз пристап"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index 3ffcbc2..ba78113 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"സ്‌ക്രീനിൽ ഉൾക്കൊള്ളിക്കാൻ സൂം ചെയ്യുക"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"സ്‌ക്രീനിൽ ഉൾക്കൊള്ളിക്കാൻ വലിച്ചുനീട്ടുക"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"സ്ക്രീൻഷോട്ട്"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"ചിത്രം ചേർത്തു"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ചിത്രം അയച്ചു"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"സ്‌ക്രീൻഷോട്ട് സംരക്ഷിക്കുന്നു..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"സ്‌ക്രീൻഷോട്ട് സംരക്ഷിക്കുന്നു..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"സ്‌ക്രീൻഷോട്ട് സംരക്ഷിച്ചു"</string>
@@ -80,11 +80,31 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"സ്‌ക്രീൻഷോട്ട് എടുക്കാൻ വീണ്ടും ശ്രമിക്കുക"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"സ്‌റ്റോറേജ് ഇടം പരിമിതമായതിനാൽ സ്‌ക്രീൻഷോട്ട് സംരക്ഷിക്കാനാകുന്നില്ല"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"സ്ക്രീൻഷോട്ടുകൾ എടുക്കുന്നത് ആപ്പോ നിങ്ങളുടെ സ്ഥാപനമോ അനുവദിക്കുന്നില്ല"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"സ്ക്രീൻ റെക്കോർഡിംഗ്"</string>
+    <!-- no translation found for screenrecord_name (2596401223859996572) -->
+    <skip />
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ഒരു സ്ക്രീൻ റെക്കോർഡിംഗ് സെഷനായി നിലവിലുള്ള അറിയിപ്പ്"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"റെക്കോര്‍ഡിംഗ് ആരംഭിക്കുക"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"വോയ്‌സ് ഓവർ റെക്കോർഡ് ചെയ്യുക"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"ടാപ്പുകൾ കാണിക്കുക"</string>
+    <!-- no translation found for screenrecord_start_label (1750350278888217473) -->
+    <skip />
+    <!-- no translation found for screenrecord_description (1123231719680353736) -->
+    <skip />
+    <!-- no translation found for screenrecord_audio_label (6183558856175159629) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_label (9016927171280567791) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_description (4922694220572186193) -->
+    <skip />
+    <!-- no translation found for screenrecord_mic_label (2111264835791332350) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_and_mic_label (1831323771978646841) -->
+    <skip />
+    <!-- no translation found for screenrecord_start (330991441575775004) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_only (4459670242451527727) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_and_audio (5351133763125180920) -->
+    <skip />
+    <!-- no translation found for screenrecord_taps_label (1595690528298857649) -->
+    <skip />
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"നിർത്താൻ ടാപ്പ് ചെയ്യുക"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"നിർത്തുക"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"താൽക്കാലികമായി നിർത്തുക"</string>
@@ -97,6 +117,8 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"സ്ക്രീൻ റെക്കോർഡിംഗ് ഇല്ലാതാക്കി"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"സ്ക്രീൻ റെക്കോർഡിംഗ് ഇല്ലാതാക്കുന്നതിൽ പിശക്"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"അനുമതികൾ ലഭിച്ചില്ല"</string>
+    <!-- no translation found for screenrecord_start_error (2200660692479682368) -->
+    <skip />
     <string name="usb_preference_title" msgid="1439924437558480718">"USB ഫയൽ കൈമാറൽ ഓപ്‌ഷനുകൾ"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"ഒരു മീഡിയ പ്ലേയറായി (MTP) മൗണ്ടുചെയ്യുക"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"ഒരു ക്യാമറയായി (PTP) മൗണ്ടുചെയ്യുക"</string>
@@ -477,6 +499,8 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"വീണ്ടും കാണിക്കരുത്"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"എല്ലാം മായ്‌ക്കുക"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"മാനേജ് ചെയ്യുക"</string>
+    <!-- no translation found for manage_notifications_history_text (57055985396576230) -->
+    <skip />
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"നിശബ്‌ദ അറിയിപ്പുകൾ"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"സംഭാഷണങ്ങൾ"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"എല്ലാ നിശബ്‌ദ അറിയിപ്പുകളും മായ്ക്കുക"</string>
@@ -676,6 +700,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"ശബ്‌ദമോ വൈബ്രേഷനോ ഇല്ലാതെ ശ്രദ്ധ കേന്ദ്രീകരിക്കാൻ നിങ്ങളെ സഹായിക്കുന്നു."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"ശബ്‌ദമോ വെെബ്രേഷനോ ഉപയോഗിച്ച് നിങ്ങളുടെ ശ്രദ്ധ ക്ഷണിക്കുന്നു."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ഈ ഉള്ളടക്കത്തിലേക്ക് ഒരു ഫ്ലോട്ടിംഗ് കുറുക്കുവഴി ഉപയോഗിച്ച് നിങ്ങളുടെ ശ്രദ്ധ നിലനിർത്തുന്നു."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"ഈ അറിയിപ്പുകൾ പരിഷ്ക്കരിക്കാനാവില്ല."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"അറിയിപ്പുകളുടെ ഈ ഗ്രൂപ്പ് ഇവിടെ കോണ്‍ഫിഗര്‍ ചെയ്യാൻ കഴിയില്ല"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"പ്രോക്‌സി അറിയിപ്പ്"</string>
@@ -698,17 +726,25 @@
     <string name="notification_done" msgid="6215117625922713976">"പൂർത്തിയായി"</string>
     <string name="inline_undo" msgid="9026953267645116526">"പഴയപടിയാക്കുക"</string>
     <string name="demote" msgid="6225813324237153980">"ഈ അറിയിപ്പ് സംഭാഷണമല്ലെന്ന് അടയാളപ്പെടുത്തുക"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"പ്രിയപ്പെട്ടവ"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"പ്രിയപ്പെട്ടതല്ലാതാക്കുക"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"മ്യൂട്ട് ചെയ്യുക"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"അൺമ്യൂട്ട് ചെയ്യുക"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"ബബ്‌ൾ ആയി കാണിക്കുക"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"ബബിളുകൾ ഓഫാക്കുക"</string>
+    <!-- no translation found for notification_conversation_favorite (1905240206975921907) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unfavorite (181383708304763807) -->
+    <skip />
+    <!-- no translation found for notification_conversation_mute (268951550222925548) -->
+    <skip />
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"മുന്നറിയിപ്പ് നൽകൽ"</string>
+    <!-- no translation found for notification_conversation_bubble (2242180995373949022) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unbubble (6908427185031099868) -->
+    <skip />
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"ഹോം സ്‌ക്രീനിലേക്ക് ചേർക്കുക"</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_snooze_action" msgid="8411152711279433989">"സ്‌നൂസ് ചെയ്യുക"</string>
+    <!-- no translation found for notification_menu_snooze_action (5415729610393475019) -->
+    <skip />
+    <!-- no translation found for notification_menu_settings_action (7085494017202764285) -->
+    <skip />
     <string name="snooze_undo" msgid="60890935148417175">"പഴയപടിയാക്കുക"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> സമയത്തേക്ക് സ്‌നൂസ് ‌ചെയ്‌തു"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +816,8 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"ഡാറ്റാ സേവർ ഓഫാണ്"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"ഓൺ"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"ഓഫ്"</string>
+    <!-- no translation found for tile_unavailable (3095879009136616920) -->
+    <skip />
     <string name="nav_bar" msgid="4642708685386136807">"നാവിഗേഷൻ ബാർ"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"ലേ‌ഔട്ട്"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"അധിക ഇടത് ബട്ടൺ തരം"</string>
@@ -964,6 +1002,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"മാഗ്നിഫിക്കേഷൻ ഓവർലേ വിൻഡോ"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"മാഗ്നിഫിക്കേഷൻ വിൻഡോ"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"മാഗ്നിഫിക്കേഷൻ വിൻഡോ നിയന്ത്രണങ്ങൾ"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"ദ്രുത നിയന്ത്രണങ്ങൾ"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"നിയന്ത്രണങ്ങൾ ചേർക്കുക"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"നിയന്ത്രണങ്ങൾ ചേർക്കാൻ ഒരു ആപ്പ് തിരഞ്ഞെടുക്കുക"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">നിലവിലെ <xliff:g id="NUMBER_1">%s</xliff:g> പ്രിയപ്പെട്ടവ.</item>
+      <item quantity="one">നിലവിലെ <xliff:g id="NUMBER_0">%s</xliff:g> പ്രിയപ്പെട്ടത്.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"നിയന്ത്രണങ്ങൾ"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"അതിവേഗ ആക്‌സസിനുള്ള നിയന്ത്രണങ്ങൾ തിരഞ്ഞെടുക്കുക"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 87d5fbf..cdb3995 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Дэлгэц дүүргэх бол өсгөнө үү"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Дэлгэц дүүргэх бол татна уу"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Дэлгэцийн зураг дарах"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Зургийг орууллаа"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"зураг илгээсэн"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Дэлгэцийн агшинг хадгалж байна…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Дэлгэцийн агшинг хадгалж байна…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Дэлгэцээс дарсан зургийг хадгалсан"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Дэлгэцийн зургийг дахин дарж үзнэ үү"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Сангийн багтаамж бага байгаа тул дэлгэцээс дарсан зургийг хадгалах боломжгүй байна"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Таны апп, байгууллагад дэлгэцийн зураг авахыг зөвшөөрдөггүй"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Дэлгэцийн бичлэг"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Дэлгэцийн бичигч"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Дэлгэц бичих горимын үргэлжилж буй мэдэгдэл"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Бичлэгийг эхлүүлэх"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Дуу оруулалтыг бичих"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Товшилтыг харуулах"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Бичлэгийг эхлүүлэх үү?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Бичих үед Андройд систем нь таны дэлгэц дээр харагдах эсвэл төхөөрөмж дээрээ тоглуулсан аливаа эмзэг мэдээллийг авах боломжтой. Үүнд нууц үг, төлбөрийн мэдээлэл, зураг, зурвас болон аудио багтана."</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_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_stop_text" msgid="6549288689506057686">"Зогсоохын тулд товшино уу"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Зогсоох"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Түр зогсоох"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Дэлгэцийн бичлэгийг устгасан"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Дэлгэцийн бичлэгийг устгахад алдаа гарлаа"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Зөвшөөрөл авч чадсангүй"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Дэлгэцийн бичлэгийг эхлүүлэхэд алдаа гарлаа"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB файл шилжүүлэх сонголт"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Медиа тоглуулагч(MTP) болгон залгах"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Камер болгон(PTP) залгах"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Дахиж үл харуулах"</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_gentle" msgid="3044910806569985386">"Чимээгүй мэдэгдэл"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Харилцан яриа"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Бүх чимээгүй мэдэгдлийг арилгах"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Дуу эсвэл чичиргээгүйгээр танд төвлөрөхөд тусална."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Дуу эсвэл чичиргээгүйгээр таны анхаарлыг татна."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Энэ контентын хөвөн гарч ирэх товчлолтойгоор таны анхаарлыг татдаг."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Эдгээр мэдэгдлийг өөрчлөх боломжгүй."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Энэ бүлэг мэдэгдлийг энд тохируулах боломжгүй байна"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Прокси хийсэн мэдэгдэл"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Дууссан"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Болих"</string>
     <string name="demote" msgid="6225813324237153980">"Энэ мэдэгдлийг харилцаа биш гэж тэмдэглэх"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Дуртай"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Дургүй"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Дууг хаах"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Дууг нээх"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Хөөс маягаар харуулах"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Хөөсийг унтраах"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Чухал харилцан яриа"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Чухал харилцан яриа биш"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Дуугүй болгосон"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Сэрэмжлүүлж байна"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Хөөсийг харуулах"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Хөөсийг хасах"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Үндсэн нүүрэнд нэмэх"</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_snooze_action" msgid="8411152711279433989">"Түр хойшлуулах"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Надад сануулах"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Тохиргоо"</string>
     <string name="snooze_undo" msgid="60890935148417175">"БУЦААХ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>-д түр хойшлуулсан"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Дата хэмнэгчийг унтраасан байна"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Идэвхтэй"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Идэвхгүй"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Боломжгүй"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Навигацийн самбар"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Бүдүүвч"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Нэмэлт зүүн товчлуураар шивэх"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Томруулалтын цонх"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Томруулалтын цонхны хяналт"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Шуурхай хяналтууд"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Хяналт нэмэх"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Хяналт нэмэх апп сонгох"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">Одоогоор <xliff:g id="NUMBER_1">%s</xliff:g> дуртай зүйл байна.</item>
+      <item quantity="one">Одоогоор <xliff:g id="NUMBER_0">%s</xliff:g> дуртай зүйл байна.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Хяналт"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Шуурхай хандалтын хяналт сонгох"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index d67c0ef..9012e88 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"स्क्रीन भरण्यासाठी झूम करा"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"स्क्रीन भरण्यासाठी ताणा"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"स्क्रीनशॉट"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"इमेज घातली गेली"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"इमेज पाठवली आहे"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"स्क्रीनशॉट सेव्ह करत आहे…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"स्क्रीनशॉट सेव्ह करत आहे…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"स्क्रीनशॉट सेव्ह केला"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"स्क्रीनशॉट पुन्हा घेण्याचा प्रयत्न करा"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"मर्यादित स्टोरेज जागेमुळे स्क्रीनशॉट सेव्ह करू शकत नाही"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"अ‍ॅप किंवा आपल्या संस्थेद्वारे स्क्रीनशॉट घेण्याची अनुमती नाही"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"स्क्रीन रेकॉर्डिंग"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"स्क्रीन रेकॉर्डर"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"स्क्रीन रेकॉर्ड सत्रासाठी सुरू असलेली सूचना"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"रेकॉर्डिंग सुरू करा"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"व्हॉइसओव्हर रेकॉर्ड करा"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"टॅप दाखवा"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"रेकॉर्डिंग सुरू करायची आहे का?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"रेकॉर्डिंग करताना, Android सिस्टम तुमच्या स्क्रीनवर दिसणारी किंवा तुमच्या डिव्हाइसवर प्ले केलेली कोणतीही संवेदनशील माहिती कॅप्चर करू शकते. यात पासवर्ड, पेमेंट माहिती, फोटो, मेसेज आणि ऑडिओचा समावेश आहे."</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_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_stop_text" msgid="6549288689506057686">"थांबवण्यासाठी टॅप करा"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"थांबवा"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"थांबवा"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"स्क्रीन रेकॉर्डिंग हटवले"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"स्क्रीन रेकॉर्डिंग हटवताना एरर आली"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"परवानग्या मिळवता आल्या नाहीत"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"स्क्रीन रेकॉर्डिंग सुरू एरर आली"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB फाईल स्थानांतरण पर्याय"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"मीडिया प्लेअर म्हणून माउंट करा (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"कॅमेरा म्हणून माउंट करा (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"पुन्हा दर्शवू नका"</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_gentle" msgid="3044910806569985386">"सायलंट सूचना"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"संभाषणे"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"सर्व सायलंट सूचना साफ करा"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"आवाज किंवा व्हायब्रेशनशिवाय तुम्हाला लक्ष केंद्रित करण्यास मदत करते."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"आवाज किंवा व्हायब्रेशनने तुमचे लक्ष वेधून घेते."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"या आशयाच्या फ्लोटिंग शॉर्टकटसह तुमचे लक्ष केंद्रित करते."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"या सूचनांमध्ये सुधारणा केली जाऊ शकत नाही."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"या सूचनांचा संच येथे कॉन्फिगर केला जाऊ शकत नाही"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"प्रॉक्सी केलेल्या सूचना"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"पूर्ण झाले"</string>
     <string name="inline_undo" msgid="9026953267645116526">"पहिल्यासारखे करा"</string>
     <string name="demote" msgid="6225813324237153980">"ही सूचना संभाषण नाही म्हणून खूण करा"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"आवडते"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"नावडते"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"म्यूट करा"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"अनम्यूट करा"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"बबल असे दाखवा"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"बुडबुडे बंद करा"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"महत्त्वाचे संभाषण"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"महत्वाचे संभाषण नाही"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"शांत केले"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"सूचना देत आहे"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"बबल दाखवा"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"बबल काढून टाका"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"होम स्क्रीनवर जोडा"</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_snooze_action" msgid="8411152711279433989">"स्नूझ करा"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"मला आठवण करून द्या"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"सेटिंग्ज"</string>
     <string name="snooze_undo" msgid="60890935148417175">"पूर्ववत करा"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> साठी स्नूझ करा"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"डेटा सेव्हर बंद आहे"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"सुरू"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"बंद"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"उपलब्ध नाही"</string>
     <string name="nav_bar" msgid="4642708685386136807">"नॅव्हिगेशन बार"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"लेआउट"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"अतिरिक्त डाव्या बटणाचा प्रकार"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"मॅग्निफिकेशन ओव्हरले विंडो"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"मॅग्निफिकेशन विंडो"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"मॅग्निफिकेशन विंडो नियंत्रणे"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"क्विक नियंत्रणे"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"नियंत्रणे जोडा"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"ज्यामधून नियंत्रणे जोडायची आहेत ते ॲप निवडा"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> सध्याचे आवडते.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> सध्याचे आवडते.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"नियंत्रणे"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"झटपट अ‍ॅक्सेससाठी नियंत्रणे निवडा"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index e3e9746..7b05493 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zum untuk memenuhi skrin"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Regang utk memenuhi skrin"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Tangkapan skrin"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Imej disisipkan"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"menghantar imej"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Menyimpan tangkapan skrin..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Menyimpan tangkapan skrin..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Tangkapan skrin disimpan"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Cuba ambil tangkapan skrin sekali lagi"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Tidak dapat menyimpan tangkapan skrin kerana ruang storan terhad"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Pengambilan tangkapan skrin tidak dibenarkan oleh apl atau organisasi anda"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Rakaman Skrin"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Perakam Skrin"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Pemberitahuan breterusan untuk sesi rakaman skrin"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Mula Merakam"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Rakam suara latar"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Tunjukkan ketikan"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Ketik untuk berhenti"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Berhenti"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Jeda"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Rakaman skrin dipadamkan"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Ralat semasa memadamkan rakaman skrin"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Gagal mendapatkan kebenaran"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Ralat semasa memulakan rakaman skrin"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Pilihan pemindahan fail USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Lekapkan sebagai pemain media (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Lekapkan sebagai kamera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Jangan tunjukkan lagi"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Kosongkan semua"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Urus"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Sejarah"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Pemberitahuan senyap"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Perbualan"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Kosongkan semua pemberitahuan senyap"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Membantu anda fokus tanpa bunyi atau getaran."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Menarik perhatian anda dengan bunyi atau getaran."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Memastikan anda memberikan perhatian dengan pintasan terapung ke kandungan ini."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Pemberitahuan ini tidak boleh diubah suai."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Kumpulan pemberitahuan ini tidak boleh dikonfigurasikan di sini"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Pemberitahuan berproksi"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Selesai"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Buat asal"</string>
     <string name="demote" msgid="6225813324237153980">"Tandai pemberitahuan ini sebagai bukan perbualan"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Kegemaran"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Nyahgemari"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Redam"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Nyahredam"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Tunjukkan sebagai gelembung"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Matikan gelembung"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Perbualan penting"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Bukan perbualan penting"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Disenyapkan"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Memaklumi"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Tunjukkan gelembung"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Alih keluar gelembung"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Tambahkan pada skrin utama"</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">"kawalan pemberitahuan"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"pilihan tunda pemberitahuan"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Tunda"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Ingatkan saya"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Tetapan"</string>
     <string name="snooze_undo" msgid="60890935148417175">"BUAT ASAL"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Ditunda selama <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Penjimat Data dimatikan"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Hidup"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Mati"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Tidak tersedia"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Bar navigasi"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Reka letak"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Jenis butang kiri tambahan"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Tetingkap Tindanan Pembesaran"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Tetingkap Pembesaran"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Kawalan Tetingkap Pembesaran"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Kawalan Pantas"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Tambah Kawalan"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Pilih apl untuk digunakan bagi menambah kawalan"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> kegemaran semasa.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> kegemaran semasa.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Kawalan"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Pilih kawalan untuk akses pantas"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index 9907570..d3b2941 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"ဇူးမ်အပြည့်ဆွဲခြင်း"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"ဖန်သားပြင်အပြည့်ဆန့်ခြင်း"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ဖန်သားပြင်ဓာတ်ပုံ"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"ပုံ ထည့်ထားသည်"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ပုံပို့ထားသည်"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"ဖန်သားပြင်ဓါတ်ပုံသိမ်းစဉ်.."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ဖန်သားပြင်ဓါတ်ပုံရိုက်ခြင်းအား သိမ်းဆည်းပါမည်"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"ဖန်သားပြင်ဓာတ်ပုံကို သိမ်းပြီးပါပြီ"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"မျက်နှာပြင်ပုံကို ထပ်ရိုက်ကြည့်ပါ"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"သိုလှောင်ခန်းနေရာ အကန့်အသတ်ရှိသောကြောင့် ဖန်သားပြင်ဓာတ်ပုံကို သိမ်းဆည်း၍မရပါ"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ဖန်သားပြင်ဓာတ်ပုံရိုက်ကူးခြင်းကို ဤအက်ပ် သို့မဟုတ် သင်၏အဖွဲ့အစည်းက ခွင့်မပြုပါ"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"ဖန်သားပြင် ရိုက်ကူးမှု"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"ဖန်သားပြင် ရိုက်ကူးမှု"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ဖန်သားပြင် ရိုက်ကူးသည့် စက်ရှင်အတွက် ဆက်တိုက်လာနေသော အကြောင်းကြားချက်"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"စတင် ရိုက်ကူးရန်"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"နောက်ခံစကားပြော ကူးယူရန်"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"တို့ခြင်းများကို ပြရန်"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"စတင် ရိုက်ကူးမလား။"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"ရိုက်ကူးနေစဉ်အတွင်း Android စနစ်သည် သင့်မျက်နှာပြင်ပေါ်တွင် မြင်နိုင်သော သို့မဟုတ် သင့်စက်ပစ္စည်းတွင် ဖွင့်ထားသော အရေးကြီးသည့် အချက်အလက်မှန်သမျှကို ရိုက်ကူးနိုင်သည်။ ၎င်းတွင် စကားဝှက်များ၊ ငွေပေးချေမှု အချက်အလက်၊ ဓာတ်ပုံများ၊ မက်ဆေ့ဂျ်များနှင့် အသံများ ပါဝင်သည်။"</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_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_stop_text" msgid="6549288689506057686">"ရပ်ရန် တို့ပါ"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"ရပ်ရန်"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"ခဏရပ်ရန်"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"ဖန်သားပြင် ရိုက်ကူးမှု ဖျက်ပြီးပါပြီ"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"ဖန်သားပြင် ရိုက်ကူးမှု ဖျက်ရာတွင် အမှားအယွင်းရှိနေသည်"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"ခွင့်ပြုချက် မရယူနိုင်ပါ"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"ဖန်သားပြင် ရိုက်ကူးမှု စတင်ရာတွင် အမှားအယွင်းရှိနေသည်"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB ဖိုင်ပြောင်း ရွေးမှုများ"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"မီဒီယာပလေရာအနေဖြင့် တပ်ဆင်ရန် (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"ကင်မရာအနေဖြင့် တပ်ဆင်ရန် (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"နောက်ထပ် မပြပါနှင့်"</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_gentle" msgid="3044910806569985386">"အကြောင်းကြားချက်များကို အသံတိတ်ခြင်း"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"စကားဝိုင်းများ"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"အသံတိတ် အကြောင်းကြားချက်များအားလုံးကို ရှင်းလင်းရန်"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"အသံ သို့မဟုတ် တုန်ခါမှု မပါဘဲ အာရုံစိုက်နိုင်စေရန် ကူညီပေးသည်။"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"အသံ သို့မဟုတ် တုန်ခါမှုဖြင့် အာရုံစိုက်လာအောင် ပြုလုပ်သည်။"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"အကြောင်းအရာကို floating shortcut ကိုသုံး၍ အာရုံစိုက်လာအောင်လုပ်ပါ။"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"ဤအကြောင်းကြားချက်များကို ပြုပြင်၍ မရပါ။"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"ဤအကြောင်းကြားချက်အုပ်စုကို ဤနေရာတွင် စီစဉ်သတ်မှတ်၍ မရပါ"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"ပရောက်စီထည့်ထားသော အကြောင်းကြားချက်"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"ပြီးပါပြီ"</string>
     <string name="inline_undo" msgid="9026953267645116526">"တစ်ဆင့်နောက်ပြန်ရန်"</string>
     <string name="demote" msgid="6225813324237153980">"ဤအကြောင်းကြားချက်ကို စကားဝိုင်းမဟုတ်ဟု မှတ်ထားရန်"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"အကြိုက်ဆုံး"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"အကြိုက်ဆုံးမှ ဖယ်ရှားရန်"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"အသံတိတ်ရန်"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"အသံဖွင့်ရန်"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"ပူဖောင်းကွက်အဖြစ် ပြရန်"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"ပူဖောင်းကွက်များကို ပိတ်ရန်"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"အရေးကြီး စကားဝိုင်းများ"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"အရေးကြီးစကားဝိုင်း မဟုတ်ပါ"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"အသံတိတ်ထားသည်"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"သတိပေးခြင်း"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"ပူဖောင်းကွက်ကို ပြရန်"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ပူဖောင်းကွက်ကို ဖယ်ရှားရန်"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"ပင်မစာမျက်နှာတွင် ထည့်ရန်"</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_snooze_action" msgid="8411152711279433989">"ဆိုင်းထားရန်"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"ကျွန်ုပ်ကို သတိပေးပါ"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"ဆက်တင်များ"</string>
     <string name="snooze_undo" msgid="60890935148417175">"တစ်ဆင့် နောက်ပြန်ပြန်ပါ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ဆိုင်းငံ့ရန်"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"ဒေတာချွေတာမှု ပိတ်ထားသည်"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"ဖွင့်ပါ"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"ပိတ်ထားသည်"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"မရနိုင်ပါ"</string>
     <string name="nav_bar" msgid="4642708685386136807">"ရွှေ့လျားရန်ဘားတန်း"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"အပြင်အဆင်"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"လက်ဝဲခလုတ် အမျိုးအစားအပို"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"ဝင်းဒိုး ထပ်ပိုးလွှာ ချဲ့ခြင်း"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"ဝင်းဒိုး ချဲ့ခြင်း"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"ဝင်းဒိုး ထိန်းချုပ်မှုများ ချဲ့ခြင်း"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"အမြန်ထိန်းချုပ်မှုများ"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"ထိန်းချုပ်မှုများကို ထည့်ပါ"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"ထိန်းချုပ်မှုများ ထည့်လိုသည့် အက်ပ်တစ်ခုကို ရွေးချယ်ပါ"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">လက်ရှိ အနှစ်သက်ဆုံး <xliff:g id="NUMBER_1">%s</xliff:g> ခု</item>
+      <item quantity="one">လက်ရှိ အနှစ်သက်ဆုံး <xliff:g id="NUMBER_0">%s</xliff:g> ခု</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"ထိန်းချုပ်မှုများ"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"အမြန်သုံးခွင့်အတွက် ထိန်းချုပ်မှုများကို ရွေးချယ်ပါ"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index c273cc9..efccd2b 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom for å fylle skjermen"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Strekk for å fylle skjerm"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Skjermdump"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Bildet er satt inn"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"har sendt et bilde"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Lagrer skjermdumpen …"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Lagrer skjermdumpen …"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Skjermdumpen er lagret"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Prøv å ta skjermdump på nytt"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Kan ikke lagre skjermdumpen på grunn av begrenset lagringsplass"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Appen eller organisasjonen din tillater ikke at du tar skjermdumper"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Skjermopptak"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Skjermopptaker"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Vedvarende varsel for et skjermopptak"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Start opptak"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Ta opp et kommentarspor"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Vis trykk"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Vil du starte opptaket?"</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_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 din, for eksempel 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_ongoing_screen_only" msgid="4459670242451527727">"Tar opp skjermen"</string>
+    <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Tar opp skjermen og lyden"</string>
+    <string name="screenrecord_taps_label" msgid="1595690528298857649">"Vis trykk på skjermen"</string>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Trykk for å stoppe"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Stopp"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Sett på pause"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Skjermopptaket er slettet"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Feil ved sletting av skjermopptaket"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Kunne ikke få tillatelser"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Feil ved start av skjermopptaket"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Altern. for USB-filoverføring"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Sett inn som mediespiller (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Sett inn som kamera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Ikke vis igjen"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Fjern alt"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Administrer"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Logg"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Lydløse varsler"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Samtaler"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Fjern alle lydløse varsler"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Hjelper deg med å fokusere uten lyd eller vibrering."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Får oppmerksomheten din med lyd eller vibrering."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Holder deg oppmerksom med en svevende snarvei til dette innholdet."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Disse varslene kan ikke endres."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Denne varselgruppen kan ikke konfigureres her"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Omdirigert varsel"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Ferdig"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Angre"</string>
     <string name="demote" msgid="6225813324237153980">"Marker dette varselet som ikke en samtale"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Favoritt"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Fjern som favoritt"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Ignorer"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Slutt å ignorere"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Vis som boble"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Slå av bobler"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Viktig samtale"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Ikke en viktig samtale"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Lydløs"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Varsling"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Vis boble"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Fjern bobler"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Legg til på startskjermen"</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">"varselinnstillinger"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"slumrealternativer for varsler"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Slumre"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Minn meg på det"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Innstillinger"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ANGRE"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Slumrer i <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Datasparing er av"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"På"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Av"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Utilgjengelig"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigasjonsrad"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Oppsett"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Ekstra venstre-knapptype"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Forstørringsvindu"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Kontroller for forstørringsvindu"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Hurtigkontroller"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Legg til kontroller"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Velg en app du vil legge til kontroller for"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> nåværende favoritter.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> nåværende favoritt.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroller"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Velg kontroller for rask tilgang"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index dea3311..def2320 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"स्क्रिन भर्न जुम गर्नुहोस्"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"स्क्रिन भर्न तन्काउनुहोस्"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"स्क्रिनसट"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"छवि सम्मिलित गरियो"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"कुनै छवि पठाइयो"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"स्क्रिनसट बचत गर्दै…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"स्क्रिनसट बचत गर्दै…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"स्क्रिनसट सुरक्षित गरियो"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"स्क्रिनसट फेरि लिएर हेर्नुहोस्"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"भण्डारण ठाउँ सीमित भएका कारण स्क्रिनसट सुरक्षित गर्न सकिएन"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"उक्त अनुप्रयोग वा तपाईंको संगठनले स्क्रिनसटहरू लिन दिँदैन"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"स्क्रिनको रेकर्डिङ"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"स्क्रिन रेकर्डर"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"कुनै स्क्रिन रेकर्ड गर्ने सत्रका लागि चलिरहेको सूचना"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"रेकर्डिङ सुरु गर्नुहोस्"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"भ्वाइसओवर रेकर्ड गर्नुहोस्"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"ट्यापहरू देखाउनुहोस्"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"रेकर्ड गर्न थाल्ने हो?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"रेकर्ड गर्दा, Android प्रणालीले तपाईंको स्क्रिनमा देखिने वा तपाईंको यन्त्रमा प्ले गरिने जुनसुकै संवेदनशील जानकारी समावेश गर्न सक्छ। यसमा पासवर्ड, भुक्तानीसम्बन्धी जानकारी, फोटो, सन्देश र अडियो समावेश हुन्छ।"</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_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_stop_text" msgid="6549288689506057686">"रोक्न ट्याप गर्नुहोस्"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"रोक्नुहोस्"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"पज गर्नुहोस्"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"स्क्रिनको रेकर्डिङ मेटाइयो"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"स्क्रिनको रेकर्डिङ मेट्ने क्रममा त्रुटि"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"अनुमति प्राप्त गर्न सकिएन"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"स्क्रिन रेकर्ड गर्न थाल्ने क्रममा त्रुटि भयो"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB फाइल सार्ने विकल्पहरू"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"मिडिया प्लेयर(MTP)को रूपमा माउन्ट गर्नुहोस्"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"क्यामेराको रूपमा माउन्ट गर्नुहोस् (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"फेरि नदेखाउनुहोस्"</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_gentle" msgid="3044910806569985386">"मौन सूचनाहरू"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"वार्तालापहरू"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"सबै मौन सूचनाहरू हटाउनुहोस्"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"तपाईंलाई आवाज वा कम्पनविना ध्यान केन्द्रित गर्न मद्दत गर्छ।"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"ध्वनि वा कम्पनमार्फत तपाईंको ध्यान आकर्षित गर्छ।"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"फ्लोटिङ सर्टकटमार्फत यो सामग्रीतर्फ तपाईंको ध्यान आकर्षित गर्दछ।"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"यी सूचनाहरू परिमार्जन गर्न मिल्दैन।"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"यहाँबाट सूचनाहरूको यो समूह कन्फिगर गर्न सकिँदैन"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"प्रोक्सीमार्फत आउने सूचना"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"सम्पन्‍न भयो"</string>
     <string name="inline_undo" msgid="9026953267645116526">"अन्डू गर्नुहोस्"</string>
     <string name="demote" msgid="6225813324237153980">"यो सूचनालाई वार्तालाप होइन भनी चिन्ह लगाउनुहोस्"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"मन पर्ने"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"मन पर्ने कुराहरूबाट हटाउनुहोस्"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"म्युट गर्नुहोस्"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"अनम्युट गर्नुहोस्"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"बबलको रूपमा देखाउनुहोस्"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"बबलहरूलाई निष्क्रिय पार्नुहोस्"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"महत्त्वपूर्ण वार्तालाप"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"महत्त्वपूर्ण वार्तालाप होइन"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"मौन पारिएको"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"सतर्क गराउँदै"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"बबल देखाउनुहोस्"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"बबलहरू हटाउनुहोस्"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"गृह स्क्रिनमा थप्नुहोस्"</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_snooze_action" msgid="8411152711279433989">"स्नुज गर्नुहोस्"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"मलाई सम्झाउनुहोस्"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"सेटिङहरू"</string>
     <string name="snooze_undo" msgid="60890935148417175">"अन्डू गर्नुहोस्"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> का लागि स्नुज गरियो"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"डेटा सेभर बन्द छ"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"सक्रिय गर्नुहोस्"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"निष्क्रिय"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"उपलब्ध छैन"</string>
     <string name="nav_bar" msgid="4642708685386136807">"नेभिगेशन पट्टी"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"लेआउट"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"अतिरिक्त बायाँतिरको बटनको प्रकार"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"म्याग्निफिकेसन ओभरले विन्डो"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"म्याग्निफिकेसन विन्डो"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"म्याग्निफिकेसन विन्डोका नियन्त्रणहरू"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"द्रुत नियन्त्रणहरू"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"नियन्त्रणहरू थप्नुहोस्"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"नियन्त्रणहरू जुन अनुप्रयोगबाट थप्ने हो त्यो अनुप्रयोग छनौट गर्नुहोस्"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">हालका मन पर्ने <xliff:g id="NUMBER_1">%s</xliff:g> कुराहरू।</item>
+      <item quantity="one">हालको मन पर्ने <xliff:g id="NUMBER_0">%s</xliff:g> कुरा।</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"नियन्त्रणहरू"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"द्रुत पहुँचका लागि नियन्त्रणहरू छनौट गर्नुहोस्"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 8b015ab..35dd6f5 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom om scherm te vullen"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Rek uit v. schermvulling"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Afbeelding ingevoegd"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"heeft een afbeelding gestuurd"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Screenshot opslaan..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Screenshot opslaan..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Screenshot opgeslagen"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Probeer opnieuw een screenshot te maken"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Kan screenshot niet opslaan vanwege beperkte opslagruimte"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Het maken van screenshots wordt niet toegestaan door de app of je organisatie"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Schermopname"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Schermrecorder"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Doorlopende melding voor een schermopname-sessie"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Opname starten"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Voice-over opnemen"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Tikken weergeven"</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. Dit omvat wachtwoorden, betalingsgegevens, foto\'s, berichten en audio."</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_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 weergeven"</string>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Tik om te stoppen"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Stoppen"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pauzeren"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Schermopname verwijderd"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Fout bij verwijderen van schermopname"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Kan rechten niet ophalen"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Fout bij starten van schermopname"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opties voor USB-bestandsoverdracht"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Koppelen als mediaspeler (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Koppelen als camera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Niet opnieuw weergeven"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Alles wissen"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Beheren"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Geschiedenis"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Stille meldingen"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Gesprekken"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Alle stille meldingen wissen"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Helpt je focussen zonder geluid of trilling."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Trekt je aandacht met geluid of trillingen."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Trekt de aandacht met een zwevende snelkoppeling naar deze content."</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Geen recente ballonnen"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"Onlangs gesloten ballonnen worden hier weergegeven zodat je ze gemakkelijk kunt terughalen."</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Deze meldingen kunnen niet worden aangepast."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Deze groep meldingen kan hier niet worden geconfigureerd"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Melding via proxy"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Gereed"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Ongedaan maken"</string>
     <string name="demote" msgid="6225813324237153980">"Deze melding markeren als geen gesprek"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Markeren als favoriet"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Favoriet verwijderen"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Negeren"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Negeren opheffen"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Weergeven als ballon"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Ballonnen uitschakelen"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Belangrijk gesprek"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Geen belangrijk gesprek"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Zonder geluid"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Waarschuwen"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Ballon weergeven"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Ballonnen verwijderen"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Toevoegen aan startscherm"</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">"beheeropties voor meldingen"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"snooze-opties voor meldingen"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Snoozen"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Herinneren"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Instellingen"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ONGEDAAN MAKEN"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Snoozefunctie <xliff:g id="TIME_AMOUNT">%1$s</xliff:g> actief"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Databesparing is uitgeschakeld"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Aan"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Uit"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Niet beschikbaar"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigatiebalk"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Lay-out"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Extra knoptype links"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Vergrotingsvenster"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Bediening van vergrotingsvenster"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Snelle bedieningselementen"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Bedieningselementen toevoegen"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Kies een app waaruit je bedieningselementen wilt toevoegen"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> huidige favorieten.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> huidige favoriet.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Bedieningselementen"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Kies bedieningselementen voor snelle toegang"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"Favorieten"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"Alle"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"Kan lijst met alle bedieningselementen niet laden."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index e274f27..6a59071 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"ସ୍କ୍ରୀନ ଭରିବା ପାଇଁ ଜୁମ୍ କରନ୍ତୁ"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"ସ୍କ୍ରୀନ୍‌କୁ ଭରିବା ପାଇଁ ଟାଣନ୍ତୁ"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ସ୍କ୍ରିନ୍‌ସଟ୍ ନିଅନ୍ତୁ"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"ଛବି ଭର୍ତ୍ତି କରାଯାଇଛି"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ଏକ ଛବି ପଠାଯାଇଛି"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"ସ୍କ୍ରୀନଶଟ୍‍ ସେଭ୍‍ କରାଯାଉଛି…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ସ୍କ୍ରୀନଶଟ୍‍ ସେଭ୍‍ କରାଯାଉଛି…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"ସ୍କ୍ରୀନଶଟ୍ ସେଭ୍ ହୋଇଛି"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"ପୁଣିଥରେ ସ୍କ୍ରୀନ୍‌ଶଟ୍ ନେବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"ସୀମିତ ଷ୍ଟୋରେଜ୍‍ ସ୍ପେସ୍‍ ହେତୁ ସ୍କ୍ରୀନଶଟ୍‍ ସେଭ୍‍ ହୋଇପାରିବ ନାହିଁ"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ଆପ୍‍ କିମ୍ବା ସଂସ୍ଥା ଦ୍ୱାରା ସ୍କ୍ରୀନଶଟ୍‍ ନେବାକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"ସ୍କ୍ରିନ୍‍ ରେକର୍ଡିଂ"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"ସ୍କ୍ରିନ୍ ରେକର୍ଡର୍"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ଏକ ସ୍କ୍ରି‍ନ୍‍ ରେକର୍ଡ୍‍ ସେସନ୍‍ ପାଇଁ ଚାଲୁଥିବା ବିଜ୍ଞପ୍ତି"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"ରେକର୍ଡିଂ ଆରମ୍ଭ କରନ୍ତୁ"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"ଭଏସ୍‍‍‍‍‍‍‍‍‍ଓଭର୍‍ ରେକର୍ଡ କରନ୍ତୁ"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"ଟାପ୍‌ ଦେଖାନ୍ତୁ"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"ରେକର୍ଡିଂ ଆରମ୍ଭ କରିବେ?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"ରେକର୍ଡିଂ ସମୟରେ, Android ସିଷ୍ଟମ୍ ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଦେଖାଯାଉଥିବା ବା ଆପଣଙ୍କ ଡିଭାଇସରେ ଚାଲୁଥିବା ଯେ କୌଣସି ସମ୍ବେଦନଶୀଳ ସୂଚନାକୁ କ୍ୟାପଚର୍ କରିପାରିବ। ଏହା ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ସୂଚନା, ଫଟୋ, ମେସେଜଗୁଡ଼ିକ ଏବଂ ଅଡିଓ ଅନ୍ତର୍ଭୁକ୍ତ କରେ।"</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_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_stop_text" msgid="6549288689506057686">"ବନ୍ଦ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"ବନ୍ଦ କରନ୍ତୁ"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"ବିରତି କରନ୍ତୁ"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"ସ୍କ୍ରିନ୍‍ ରେକର୍ଡିଂ ଡିଲିଟ୍‍ କରିଦିଆଯାଇଛି"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"ସ୍କ୍ରିନ୍‍ ରେକର୍ଡିଂ ଡିଲିଟ୍‍ କରିବାରେ ତ୍ରୁଟି"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"ଅନୁମତି ପାଇବାରେ ଅସଫଳ ହେଲା।"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"ସ୍କ୍ରିନ୍ ରେକର୍ଡିଂ ଆରମ୍ଭ କରିବାରେ ତ୍ରୁଟି"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB ଫାଇଲ୍‌ ଟ୍ରାନ୍ସଫର୍‌ର ବିକଳ୍ପ"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"ଏକ ମିଡିଆ ପ୍ଲେୟାର୍‍ (MTP) ଭାବରେ ଭର୍ତ୍ତି କରନ୍ତୁ"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"ଏକ କ୍ୟାମେରା (PTP) ଭାବରେ ଭର୍ତ୍ତି କରନ୍ତୁ"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"ପୁଣି ଦେଖାନ୍ତୁ ନାହିଁ"</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_gentle" msgid="3044910806569985386">"ନୀରବ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକ"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"ସମସ୍ତ ନୀରବ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଖାଲି କରନ୍ତୁ"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"ବିନା ସାଉଣ୍ଡ କିମ୍ବା ଭାଇବ୍ରେସନ୍‌ରେ ଆପଣଙ୍କୁ ଫୋକସ୍ କରିବାରେ ସାହାଯ୍ୟ କରେ।"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"ସାଉଣ୍ଡ କିମ୍ବା ଭାଇବ୍ରେସନ୍ ମାଧ୍ୟମରେ ଆପଣଙ୍କର ଧ୍ୟାନ ଆକର୍ଷିତ କରିଥାଏ।"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ଏହି ବିଷୟବସ୍ତୁ ପାଇଁ ଏକ ଭାସମାନ ସର୍ଟକଟ୍ ସହ ଆପଣଙ୍କର ଧ୍ୟାନ ଦିଅନ୍ତୁ।"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ପରିବର୍ତ୍ତନ କରିହେବ ନାହିଁ।"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"ଏଠାରେ ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକର ଗ୍ରୁପ୍ କନଫ୍ୟୁଗର୍ କରାଯାଇପାରିବ ନାହିଁ"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"ବିଜ୍ଞପ୍ତି ପ୍ରକ୍ସୀ ହୋଇଛି"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"ହୋଇଗଲା"</string>
     <string name="inline_undo" msgid="9026953267645116526">"ପୂର୍ବସ୍ଥାନକୁ ଫେରାଇଆଣନ୍ତୁ"</string>
     <string name="demote" msgid="6225813324237153980">"ଏହି ବିଜ୍ଞପ୍ତି କୌଣସି ବାର୍ତ୍ତାଳାପ ନୁହେଁ ବୋଲି ଚିହ୍ନଟ କରନ୍ତୁ"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"ପସନ୍ଦ ଭାବରେ ଚିହ୍ନଟ କରନ୍ତୁ"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"ନାପସନ୍ଦ କରନ୍ତୁ"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"ମ୍ୟୁଟ୍ କରନ୍ତୁ"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"ଅନମ୍ୟୁଟ୍ କରନ୍ତୁ"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"ବୁଦବୁଦ୍ ଭାବରେ ଦେଖାନ୍ତୁ"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"ବୁଦବୁଦଗୁଡ଼ିକ ବନ୍ଦ କରନ୍ତୁ"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ବାର୍ତ୍ତାଳାପ"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"କୌଣସି ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ବାର୍ତ୍ତାଳାପ ନାହିଁ"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"ନିରବ କରାଯାଇଛି"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"ଆଲର୍ଟ କରୁଛି"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"ବବଲ୍ ଦେଖାନ୍ତୁ"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ବବଲଗୁଡ଼ିକ କାଢ଼ି ଦିଅନ୍ତୁ"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"ମୂଳ ସ୍କ୍ରିନରେ ଯୋଗ କରନ୍ତୁ"</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_snooze_action" msgid="8411152711279433989">"ସ୍ନୁଜ୍"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"ମୋତେ ରିମାଇଣ୍ଡର୍ କରନ୍ତୁ"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"ସେଟିଂସ୍"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ପୂର୍ବାବସ୍ଥାକୁ ଫେରାଇ ଆଣନ୍ତୁ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ପାଇଁ ସ୍ନୁଜ୍‍ କରାଗଲା"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"ଡାଟା ସେଭର୍‍ ଅଫ୍ ଅଛି"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"ଚାଲୁ"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"ବନ୍ଦ"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"ଅନୁପଲବ୍ଧ"</string>
     <string name="nav_bar" msgid="4642708685386136807">"ନାଭିଗେଶନ୍ ବାର୍‍"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"ଲେଆଉଟ୍"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"ସମ୍ପୂର୍ଣ୍ଣ ବାମ ବଟନ୍‍ ପ୍ରକାର"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"ମ୍ୟାଗ୍ନିଫିକେସନ୍ ଓଭର୍‌ଲେ ୱିଣ୍ଡୋ"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"ମ୍ୟାଗ୍ନିଫିକେସନ୍ ୱିଣ୍ଡୋ"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"ମ୍ୟାଗ୍ନିଫିକେସନ୍ ୱିଣ୍ଡୋ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"ଦ୍ରୁତ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଯୋଗ କରନ୍ତୁ"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"କେଉଁ ଆପରୁ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଯୋଗ କରିବେ ତାହା ଚୟନ କରନ୍ତୁ"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g>ଟି ବର୍ତ୍ତମାନର ପସନ୍ଦ।</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g>ଟି ବର୍ତ୍ତମାନର ପସନ୍ଦ।</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"ଶୀଘ୍ର ଆକ୍ସେସ୍ ପାଇଁ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଚୟନ କରନ୍ତୁ"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 28da4ed..3fe56fd 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"ਸਕ੍ਰੀਨ ਭਰਨ ਲਈ ਜ਼ੂਮ ਕਰੋ"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"ਸਕ੍ਰੀਨ ਭਰਨ ਲਈ ਸਟ੍ਰੈਚ ਕਰੋ"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ਸਕ੍ਰੀਨਸ਼ਾਟ"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"ਚਿੱਤਰ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ਚਿੱਤਰ ਭੇਜਿਆ ਗਿਆ"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਦੁਬਾਰਾ ਲੈ ਕੇ ਦੇਖੋ"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"ਸੀਮਿਤ ਸਟੋਰੇਜ ਹੋਣ ਕਾਰਨ ਸਕ੍ਰੀਨਸ਼ਾਟ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ਐਪ ਜਾਂ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਸਕ੍ਰੀਨਸ਼ਾਟ ਲੈਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੱਤੀ ਗਈ ਹੈ"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਰ"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ਕਿਸੇ ਸਕ੍ਰੀਨ ਰਿਕਾਰਡ ਸੈਸ਼ਨ ਲਈ ਚੱਲ ਰਹੀ ਸੂਚਨਾ"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"ਰਿਕਾਰਡਿੰਗ ਸ਼ੁਰੂ ਕਰੋ"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"ਅਵਾਜ਼ ਰਿਕਾਰਡ ਕਰੋ"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"ਟੈਪਾਂ ਦਿਖਾਓ"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"ਕੀ ਰਿਕਾਰਡਿੰਗ ਸ਼ੁਰੂ ਕਰਨੀ ਹੈ?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"ਰਿਕਾਰਡਿੰਗ ਕਰਨ ਵੇਲੇ, Android ਸਿਸਟਮ ਕੋਈ ਵੀ ਅਜਿਹੀ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਕੈਪਚਰ ਕਰ ਸਕਦਾ ਹੈ ਜੋ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਖਣਯੋਗ ਹੈ ਜਾਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਜਾਂਦੀ ਹੈ। ਇਸ ਵਿੱਚ ਪਾਸਵਰਡ, ਭੁਗਤਾਨ ਵੇਰਵੇ, ਫ਼ੋਟੋਆਂ, ਸੁਨੇਹੇ ਅਤੇ ਆਡੀਓ ਸ਼ਾਮਲ ਹਨ।"</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_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_stop_text" msgid="6549288689506057686">"ਰੋਕਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"ਬੰਦ ਕਰੋ"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"ਰੋਕੋ"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਨੂੰ ਮਿਟਾਇਆ ਗਿਆ"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਨੂੰ ਮਿਟਾਉਣ ਦੌਰਾਨ ਗੜਬੜ ਹੋਈ"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"ਇਜਾਜ਼ਤਾਂ ਪ੍ਰਾਪਤ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਵੇਲੇ ਗੜਬੜ ਹੋਈ"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਚੋਣਾਂ"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"ਇੱਕ ਮੀਡੀਆ ਪਲੇਅਰ (MTP) ਦੇ ਤੌਰ ਤੇ ਮਾਊਂਟ ਕਰੋ"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"ਇੱਕ ਕੈਮਰੇ (PTP) ਦੇ ਤੌਰ ਤੇ ਮਾਊਂਟ ਕਰੋ"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"ਦੁਬਾਰਾ ਨਾ ਦਿਖਾਓ"</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_gentle" msgid="3044910806569985386">"ਸ਼ਾਂਤ ਸੂਚਨਾਵਾਂ"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"ਗੱਲਾਂਬਾਤਾਂ"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"ਸਾਰੀਆਂ ਖਾਮੋਸ਼ ਸੂਚਨਾਵਾਂ ਕਲੀਅਰ ਕਰੋ"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"ਤੁਹਾਨੂੰ ਬਿਨਾਂ ਧੁਨੀ ਅਤੇ ਥਰਥਰਾਹਟ ਦੇ ਫੋਕਸ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ।"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"ਧੁਨੀ ਅਤੇ ਥਰਥਰਾਹਟ ਨਾਲ ਤੁਹਾਡਾ ਧਿਆਨ ਖਿੱਚਦੀ ਹੈ।"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ਇਸ ਸਮੱਗਰੀ ਦੇ ਅਸਥਿਰ ਸ਼ਾਰਟਕੱਟ ਨਾਲ ਆਪਣਾ ਧਿਆਨ ਕੇਂਦਰਿਤ ਰੱਖੋ।"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਸੋਧਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"ਇਹ ਸੂਚਨਾਵਾਂ ਦਾ ਗਰੁੱਪ ਇੱਥੇ ਸੰਰੂਪਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"ਇੱਕ ਐਪ ਦੀ ਥਾਂ \'ਤੇ ਦੂਜੀ ਐਪ ਰਾਹੀਂ ਦਿੱਤੀ ਗਈ ਸੂਚਨਾ"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"ਹੋ ਗਿਆ"</string>
     <string name="inline_undo" msgid="9026953267645116526">"ਅਣਕੀਤਾ ਕਰੋ"</string>
     <string name="demote" msgid="6225813324237153980">"ਇਸ ਸੂਚਨਾ ਦੀ ਗੱਲ-ਬਾਤ ਨਹੀਂ ਵਜੋਂ ਨਿਸ਼ਾਨਦੇਹੀ ਕਰੋ"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"ਮਨਪਸੰਦ"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"ਨਾਪਸੰਦ"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"ਮਿਊਟ ਕਰੋ"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"ਅਣਮਿਊਟ ਕਰੋ"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"ਬੁਲਬੁਲੇ ਵਜੋਂ ਦਿਖਾਓ"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"ਬੁਲਬੁਲੇ ਬੰਦ ਕਰੋ"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"ਮਹੱਤਵਪੂਰਨ ਗੱਲਬਾਤ"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"ਮਹੱਤਵਪੂਰਨ ਗੱਲਬਾਤ ਨਹੀਂ ਹੈ"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"ਚੁੱਪ ਕਰਵਾਈਆਂ ਗਈਆਂ"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"ਸੁਚੇਤਨਾ"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"ਬੁਲਬੁਲਾ ਦਿਖਾਓ"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ਬੁਲਬੁਲੇ ਹਟਾਓ"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"ਹੋਮ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕਰੋ"</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_snooze_action" msgid="8411152711279433989">"ਸਨੂਜ਼ ਕਰੋ"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"ਮੈਨੂੰ ਯਾਦ ਕਰਵਾਓ"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"ਸੈਟਿੰਗਾਂ"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ਅਣਕੀਤਾ ਕਰੋ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ਲਈ ਸਨੂਜ਼ ਕੀਤਾ ਗਿਆ"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"ਡਾਟਾ ਸੇਵਰ ਬੰਦ ਹੈ"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"ਚਾਲੂ"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"ਬੰਦ"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"ਅਣਉਪਲਬਧ"</string>
     <string name="nav_bar" msgid="4642708685386136807">"ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼ ਪੱਟੀ"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"ਖਾਕਾ"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"ਵਧੇਰੇ ਖੱਬੇ ਬਟਨ ਕਿਸਮ"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"ਵੱਡਦਰਸ਼ੀਕਰਨ ਓਵਰਲੇ Window"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"ਵੱਡਦਰਸ਼ੀਕਰਨ Window"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"ਵੱਡਦਰਸ਼ੀਕਰਨ Window ਦੇ ਕੰਟਰੋਲ"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"ਤਤਕਾਲ ਕੰਟਰੋਲ"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕਰੋ"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"ਉਹ ਐਪ ਚੁਣੋ ਜਿੱਥੋਂ ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕਰਨੇ ਹਨ"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> ਮੌਜੂਦਾ ਮਨਪਸੰਦ।</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> ਮੌਜੂਦਾ ਮਨਪਸੰਦ।</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"ਕੰਟਰੋਲ"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"ਤਤਕਾਲ ਪਹੁੰਚ ਲਈ ਕੰਟਰੋਲ ਚੁਣੋ"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index fd48b97..dd2d31c 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Powiększ, aby wypełnić ekran"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Rozciągnij, aby wypełnić ekran"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Zrzut ekranu"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Wstawiono obraz"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"wysłano obraz"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Zapisywanie zrzutu ekranu..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Zapisywanie zrzutu ekranu..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Zrzut ekranu został zapisany"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Spróbuj jeszcze raz wykonać zrzut ekranu"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Nie można zapisać zrzutu ekranu, bo brakuje miejsca w pamięci"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Nie możesz wykonać zrzutu ekranu, bo nie zezwala na to aplikacja lub Twoja organizacja."</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Rejestrowanie zawartości ekranu"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Rejestrator 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="1539048263178882562">"Rozpocznij rejestrowanie"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Nagraj tekst lektora"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Pokaż dotknięcia"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Rozpocząć rejestrowanie?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Podczas nagrywania system Android może rejestrować wszelkie informacji 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_audio_label" msgid="6183558856175159629">"Nagraj dźwięk"</string>
+    <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Dźwięki odtwarzane na urządzeniu"</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 odtwarzane na urządzeniu"</string>
+    <string name="screenrecord_start" msgid="330991441575775004">"Rozpocznij"</string>
+    <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Rejestruję zawartość ekranu"</string>
+    <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Rejestruję zawartość ekranu i dźwięki odtwarzane na urządzeniu"</string>
+    <string name="screenrecord_taps_label" msgid="1595690528298857649">"Pokaż dotknięcia ekranu"</string>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Kliknij, by zatrzymać"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Zatrzymaj"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Wstrzymaj"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Usunięto nagranie zawartości ekranu"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Błąd podczas usuwania nagrania zawartości ekranu"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Nie udało się uzyskać uprawnień"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Błąd podczas rozpoczynania rejestracji zawartości ekranu"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB – opcje przesyłania plików"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Podłącz jako odtwarzacz multimedialny (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Podłącz jako aparat (PTP)"</string>
@@ -483,6 +492,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Nie pokazuj ponownie"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Usuń wszystkie"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Zarządzaj"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historia"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Ciche powiadomienia"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Rozmowy"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Usuń wszystkie ciche powiadomienia"</string>
@@ -682,6 +692,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Pomaga Ci się skupić, nie sygnalizując niczego dźwiękiem ani wibracjami."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Przyciąga uwagę dźwiękiem lub wibracjami."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Przyciąga uwagę dzięki pływającym skrótom do treści."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Tych powiadomień nie można zmodyfikować."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Tej grupy powiadomień nie można tu skonfigurować"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Powiadomienie w zastępstwie"</string>
@@ -704,17 +718,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Gotowe"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Cofnij"</string>
     <string name="demote" msgid="6225813324237153980">"Nie oznaczaj tego powiadomienia jako wątku"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Dodaj do ulubionych"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Usuń z ulubionych"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Wycisz"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Wyłącz wyciszenie"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Pokaż jako dymek"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Wyłącz dymki"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Ważne rozmowy"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Rozmowa nieoznaczona jako ważna"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Wyciszone"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alert"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Pokaż dymek"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Wyłącz dymki"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Dodaj do ekranu głównego"</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">"sterowanie powiadomieniami"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opcje odkładania powiadomień"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Odłóż"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Przypomnij"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Ustawienia"</string>
     <string name="snooze_undo" msgid="60890935148417175">"COFNIJ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Odłożono na <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -790,6 +805,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Oszczędzanie danych jest wyłączone"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Wł."</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Wył."</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Niedostępne"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Pasek nawigacji"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Układ"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Typ dodatkowego lewego przycisku"</string>
@@ -975,4 +991,20 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Okno powiększenia"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Elementy sterujące okna powiększenia"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Szybkie sterowanie"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Dodaj elementy sterujące"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Wybierz, z której chcesz wybrać elementy sterujące"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> aktualnie ulubione.</item>
+      <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> aktualnie ulubionych.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> aktualnie ulubionych.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> aktualnie ulubiony.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Elementy sterujące"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Wybierz elementy sterujące dla szybszego dostępu"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 6f61662..2d5e011 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom p/ preencher a tela"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Ampliar p/ preencher tela"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Capturar tela"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Imagem inserida"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"enviou uma imagem"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Salvando captura de tela..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Salvando captura de tela..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Captura de tela salva"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Tente fazer a captura de tela novamente"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Não é possível salvar a captura de tela, porque não há espaço suficiente"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"O app ou a organização não permitem capturas de tela"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Gravação de tela"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Gravador 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="1539048263178882562">"Iniciar gravação"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Gravar narração"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Mostrar toques"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Toque para parar"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Parar"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pausar"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Gravação de tela excluída"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Erro ao excluir a gravação de tela"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Não foi possível acessar as permissões"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Erro ao iniciar a gravação de tela"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opções transf. arq. por USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Conectar como media player (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Montar como uma câmera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Não mostrar novamente"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Limpar 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_gentle" msgid="3044910806569985386">"Notificações silenciosas"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversas"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Apagar todas as notificações silenciosas"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Ajuda você a manter o foco sem som ou vibração."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Chama sua atenção com som ou vibração."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Mantém sua atenção com um atalho flutuante para esse conteúdo."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar essas notificações."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Não é possível configurar esse grupo de notificações aqui"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Notificação salva no proxy"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Concluído"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Desfazer"</string>
     <string name="demote" msgid="6225813324237153980">"Marcar esta notificação como não sendo uma conversa"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Adicionar como favorito"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Remover dos favoritos"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Desativar som"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Ativar som"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Mostrar como balão"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Desativar balões"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Conversa importante"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Não é uma conversa importante"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Silenciada"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alertar"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Mostrar balão"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Remover balões"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Adicionar à tela inicial"</string>
     <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g> do <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_menu_gear_description" msgid="6429668976593634862">"controles de notificação"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opções de adiamento de notificação"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Adiar"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Lembrete"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Configurações"</string>
     <string name="snooze_undo" msgid="60890935148417175">"DESFAZER"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Adiada para <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"A Economia de dados está desativada"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Ativado"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Desativado"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Indisponível"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Barra de navegação"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Layout"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Tipo de botão esquerdo extra"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Janela de ampliação"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Controles da janela de ampliação"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Controles rápidos"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Adicionar controles"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Escolher um app para adicionar controles"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> favorito atual.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> favoritos atuais.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Escolher controles do acesso rápido"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index be534ae..855d339 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom para preencher o ecrã"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Esticar p. caber em ec. int."</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Captura de ecrã"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Imagem inserida"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"enviou uma imagem"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"A guardar captura de ecrã..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"A guardar captura de ecrã..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Captura de ecrã guardada"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Experimente voltar a efetuar a captura de ecrã."</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Não é possível guardar a captura de ecrã devido a espaço de armazenamento limitado."</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"A aplicação ou a sua entidade não permitem tirar capturas de ecrã"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Gravação de ecrã"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Gravador 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="1539048263178882562">"Iniciar gravação"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Gravar voz-off"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Mostrar toques"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Pretende 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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Tocar para parar"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Parar"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Colocar em pausa"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Gravação de ecrã eliminada."</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Erro ao eliminar a gravação de ecrã."</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Falha ao obter as autorizações."</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Ocorreu um erro ao iniciar a gravação do ecrã."</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opções de transm. de fich. USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Montar como leitor de multimédia (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Montar como câmara (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Não mostrar de novo"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Limpar tudo"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Gerir"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Histórico"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Notificações silenciosas"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversas"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Limpar todas as notificações silenciosas"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Ajuda-o a focar-se sem som ou vibração."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Chama a sua atenção com som ou vibração."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Mantém a sua atenção com um atalho flutuante para este conteúdo."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar estas notificações."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Não é possível configurar este grupo de notificações aqui."</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Notificação de aplicação proxy"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Concluído"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Anular"</string>
     <string name="demote" msgid="6225813324237153980">"Marcar esta notificação como não sendo uma conversa"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Adicionar aos favoritos"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Remover dos favoritos"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Ignorar"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Ativar"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Mostrar como balão"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Desativar balões"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Conversa importante"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Não é uma conversa importante"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Sem som"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alertar"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Mostrar balão"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Remover balões"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Adicionar ao ecrã principal"</string>
     <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g> do <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_menu_gear_description" msgid="6429668976593634862">"controlos de notificação"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opções de suspensão de notificações"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Suspender"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Lembrar-me"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Definições"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ANULAR"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Suspensa por <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Poupança de dados desativada"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Ativado"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Desativado"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Indisponível"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Barra de navegação"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Esquema"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Tipo de botão esquerdo adicional"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Janela de ampliação"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Controlos da janela de ampliação"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Controlos rápidos"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Adicione controlos"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Escolha uma app a partir da qual pretende adicionar controlos."</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> favoritos atuais.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> favorito atual.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Controlos"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Escolha os controlos para um acesso rápido."</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 6f61662..2d5e011 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom p/ preencher a tela"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Ampliar p/ preencher tela"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Capturar tela"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Imagem inserida"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"enviou uma imagem"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Salvando captura de tela..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Salvando captura de tela..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Captura de tela salva"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Tente fazer a captura de tela novamente"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Não é possível salvar a captura de tela, porque não há espaço suficiente"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"O app ou a organização não permitem capturas de tela"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Gravação de tela"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Gravador 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="1539048263178882562">"Iniciar gravação"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Gravar narração"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Mostrar toques"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Toque para parar"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Parar"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pausar"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Gravação de tela excluída"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Erro ao excluir a gravação de tela"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Não foi possível acessar as permissões"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Erro ao iniciar a gravação de tela"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opções transf. arq. por USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Conectar como media player (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Montar como uma câmera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Não mostrar novamente"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Limpar 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_gentle" msgid="3044910806569985386">"Notificações silenciosas"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversas"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Apagar todas as notificações silenciosas"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Ajuda você a manter o foco sem som ou vibração."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Chama sua atenção com som ou vibração."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Mantém sua atenção com um atalho flutuante para esse conteúdo."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar essas notificações."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Não é possível configurar esse grupo de notificações aqui"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Notificação salva no proxy"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Concluído"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Desfazer"</string>
     <string name="demote" msgid="6225813324237153980">"Marcar esta notificação como não sendo uma conversa"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Adicionar como favorito"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Remover dos favoritos"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Desativar som"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Ativar som"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Mostrar como balão"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Desativar balões"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Conversa importante"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Não é uma conversa importante"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Silenciada"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alertar"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Mostrar balão"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Remover balões"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Adicionar à tela inicial"</string>
     <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g> do <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_menu_gear_description" msgid="6429668976593634862">"controles de notificação"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opções de adiamento de notificação"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Adiar"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Lembrete"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Configurações"</string>
     <string name="snooze_undo" msgid="60890935148417175">"DESFAZER"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Adiada para <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"A Economia de dados está desativada"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Ativado"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Desativado"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Indisponível"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Barra de navegação"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Layout"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Tipo de botão esquerdo extra"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Janela de ampliação"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Controles da janela de ampliação"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Controles rápidos"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Adicionar controles"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Escolher um app para adicionar controles"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> favorito atual.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> favoritos atuais.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Escolher controles do acesso rápido"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 44940bf..9860d93 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zoom pt. a umple ecranul"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Înt. pt. a umple ecranul"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Captură de ecran"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"S-a inserat imaginea"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"a trimis o imagine"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Se salv. captura de ecran..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Se salvează captura de ecran..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Captură de ecran salvată"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Încercați să faceți din nou o captură de ecran"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Captura de ecran nu poate fi salvată din cauza spațiului de stocare limitat"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Crearea capturilor de ecran nu este permisă de aplicație sau de organizația dvs."</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Se înregistrează ecranul"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Recorder pentru ecran"</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="1539048263178882562">"Începeți înregistrarea"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Înregistrați vocal"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Afișați atingerile"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Începeți î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_audio_label" msgid="6183558856175159629">"Înregistrați conținut 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ți"</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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Atingeți pentru a opri"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Opriți"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Întrerupeți"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Înregistrarea ecranului a fost ștearsă."</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Eroare la ștergerea înregistrării ecranului"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Nu s-au obținut permisiunile"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Eroare la începerea înregistrării ecranului"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opțiuni pentru transferul de fișiere prin USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Montați ca player media (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Montați drept cameră foto (PTP)"</string>
@@ -480,6 +489,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Nu se mai afișează"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Ștergeți toate notificările"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Gestionați"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Istoric"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Notificări silențioase"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Conversații"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Ștergeți toate notificările silențioase"</string>
@@ -679,6 +689,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Vă ajută să vă concentrați fără sunet sau vibrare."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Vă atrage atenția fără sunet sau vibrare."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Vă atrage atenția printr-o comandă rapidă flotantă la acest conținut."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Aceste notificări nu pot fi modificate."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Acest grup de notificări nu poate fi configurat aici"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Notificare prin proxy"</string>
@@ -701,17 +715,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Terminat"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Anulați"</string>
     <string name="demote" msgid="6225813324237153980">"Marcați această notificare ca nefiind o conversație"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Preferată"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Anulați marcarea ca preferată"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Ignorați"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Afișați"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Afișează sub formă de balon"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Dezactivați baloanele"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Conversație importantă"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Nu este o conversație importantă"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Notificări dezactivate"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Alertare"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Afișați balonul"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Eliminați baloanele"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Adăugați pe ecranul de pornire"</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">"comenzile notificării"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opțiuni de amânare a notificării"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Amânați"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Reamintește-mi"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Setări"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ANULAȚI"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Amânată <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -785,6 +800,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Economizorul de date este dezactivat"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Activat"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Dezactivați"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Indisponibil"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Bară de navigare"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Aspect"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Tip de buton din extrema stângă"</string>
@@ -970,4 +986,19 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Fereastra de mărire"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Comenzi pentru fereastra de mărire"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Comenzi rapide"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Adăugați comenzi"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Alegeți o aplicație din care să adăugați comenzi"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> favorite actuale.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> de favorite actuale.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> favorit actual.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Comenzi"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Alegeți comenzile pentru acces rapid"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 6fe2094..38db1fa 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Подогнать по размерам экрана"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Растянуть на весь экран"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Скриншот"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Изображение вставлено"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"отправлено изображение"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Сохранение..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Сохранение..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Скриншот сохранен"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Попробуйте сделать скриншот снова."</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Не удалось сохранить скриншот: недостаточно места."</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Не удалось сделать скриншот: нет разрешения от приложения или организации."</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Запись видео с экрана"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Запись видео с экрана"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Текущее уведомление для записи видео с экрана"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Начать запись"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Записать закадровую речь"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Показывать нажатия"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Начать запись?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Во время записи система Android может получить доступ к конфиденциальной информации, которая видна на экране или воспроизводится на устройстве, в том числе к паролям, сведениям о платежах, фотографиям, сообщениям и аудиозаписям."</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_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_stop_text" msgid="6549288689506057686">"Нажмите, чтобы остановить"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Остановить"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Приостановить"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Запись видео с экрана удалена"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Не удалось удалить запись видео с экрана"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Не удалось получить необходимые разрешения"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Не удалось начать запись видео с экрана."</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Параметры передачи через USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Подключить как мультимедийный проигрыватель (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Установить как камеру (PTP)"</string>
@@ -483,6 +492,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Больше не показывать"</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_gentle" msgid="3044910806569985386">"Беззвучные уведомления"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Чаты"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Отклонить все беззвучные уведомления"</string>
@@ -682,6 +692,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Уведомления приходят без звука и вибрации"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Уведомления приходят со звуком или вибрацией"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Привлекает ваше внимание к контенту с помощью плавающего ярлыка"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Эти уведомления нельзя изменить."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Эту группу уведомлений нельзя настроить здесь."</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Уведомление отправлено через прокси-сервер."</string>
@@ -704,17 +718,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Готово"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Отменить"</string>
     <string name="demote" msgid="6225813324237153980">"Понизить приоритет уведомления (не считать чатом)"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Добавить в избранное"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Удалить из избранного"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Отключить звук"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Включить звук"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Показывать как всплывающее уведомление"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Отключить показ всплывающих уведомлений"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Важный чат"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Неважный чат"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Уведомления отключены"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Включить звук уведомлений"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Показывать всплывающее уведомление"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Не показывать всплывающие уведомления"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Добавить на главный экран"</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_snooze_action" msgid="8411152711279433989">"Отложить"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Добавить напоминание"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Настройки"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ОТМЕНИТЬ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Отложено на <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -790,6 +805,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Режим экономии трафика отключен"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Включено"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Отключено"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Недоступно"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Панель навигации"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Расположение кнопок"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Дополнительный тип кнопки \"Влево\""</string>
@@ -974,6 +990,21 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Наложение окна увеличения"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Окно увеличения"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Настройки окна увеличения"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Управление умным домом"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Добавление элементов"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Выберите приложение, из которого нужно добавить элементы управления."</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one">В избранном <xliff:g id="NUMBER_1">%s</xliff:g> элемент.</item>
+      <item quantity="few">В избранном <xliff:g id="NUMBER_1">%s</xliff:g> элемента.</item>
+      <item quantity="many">В избранном <xliff:g id="NUMBER_1">%s</xliff:g> элементов.</item>
+      <item quantity="other">В избранном <xliff:g id="NUMBER_1">%s</xliff:g> элемента.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Элементы управления"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Выберите элементы управления для быстрого доступа."</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index 38933ad..7c10938 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"තිරය පිරවීමට විශාලනය කරන්න"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"තිරය පිරවීමට අදින්න"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"තිර රුව"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"රූපය ඇතුල් කරන ලදී"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"රූපයක් එවන ලදී"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"තිර රුව සුරකිමින්…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"තිර රුව සුරැකෙමින් පවතී…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"තිර රුව සුරකින ලදී"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"තිර රුව නැවත ගැනීමට උත්සාහ කරන්න"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"සීමිත ගබඩා ඉඩ නිසා තිර රුව සුරැකිය නොහැකිය"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"තිර රූ ගැනීමට යෙදුම හෝ ඔබගේ සංවිධානය ඉඩ නොදේ"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"තිර පටිගත කිරීම"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"තිර රෙකෝඩරය"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"තිර පටිගත කිරීමේ සැසියක් සඳහා කෙරෙන දැනුම් දීම"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"පටිගත කිරීම ආරම්භ කරන්න"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"පසුබිම් කථනය පටිගත කරන්න"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"තට්ටු කිරීම් පෙන්වන්න"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"පටිගත කිරීම ආරම්භ කරන්නද?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"පටිගත කරන අතරතුර, Android පද්ධතියට ඔබේ තිරයේ පෙනෙන හෝ ඔබේ උපාංගයේ වාදනය කරන ඕනෑම සංවේදී තොරතුරක් ග්‍රහණය කර ගැනීමට හැකිය. මෙයට මුරපද, ගෙවීම් තොරතුරු, ඡායාරූප, පණිවිඩ සහ ඕඩියෝ ඇතුළත් වේ."</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_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_stop_text" msgid="6549288689506057686">"නතර කිරීමට තට්ටු කරන්න"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"නතර කරන්න"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"විරාම කරන්න"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"තිර පටිගත කිරීම මකන ලදී"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"තිර පටිගත කිරීම මැකීමේ දෝෂයකි"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"අවසර ලබා ගැනීමට අසමත් විය"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"තිර පටිගත කිරීම ආරම්භ කිරීමේ දෝෂයකි"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB ගොනු හුවමාරු විකල්ප"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"මධ්‍ය ධාවකයක් (MTP) ලෙස සවි කරන්න"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"කැමරාවක් (PTP) ලෙස සවි කරන්න"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"නැවත නොපෙන්වන්න"</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_gentle" msgid="3044910806569985386">"නිහඬ දැනුම්දීම්"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"සංවාද"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"සියලු නිහඬ දැනුම්දීම් හිස් කරන්න"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"ඔබට ශබ්දය හෝ කම්පනය නොමැතිව අවධානය යොමු කිරීමට උදවු කරයි."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"ශබ්දය හෝ කම්පනය සමඟ ඔබේ අවධානය ලබා ගනී."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"පාවෙන කෙටිමගක් සමග ඔබේ අවධානය මෙම අන්තර්ගතය වෙත තබා ගන්න."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"මෙම දැනුම්දීම් වෙනස් කළ නොහැක."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"මෙම දැනුම්දීම් සමූහය මෙහි වින්‍යාස කළ නොහැක"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"ප්‍රොක්සි කළ දැනුම්දීම"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"නිමයි"</string>
     <string name="inline_undo" msgid="9026953267645116526">"පසුගමනය කරන්න"</string>
     <string name="demote" msgid="6225813324237153980">"මෙම දැනුම් දීම සංවාදයක් නොවේ ලෙස ලකුණු කරන්න"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"ප්‍රියතම"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"ප්‍රියතම වෙතින් ඉවත් කරන්න"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"නිහඬ කරන්න"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"නිහඬ වෙතින් ඉවත් කරන්න"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"බුබුලක් ලෙස පෙන්වන්න"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"බුබුලු ක්‍රියාවිරහිත කරන්න"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"වැදගත් සංවාදයකි"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"වැදගත් සංවාදයක් නොවේ"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"නිශ්ශබ්ද කරන ලදී"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"ඇඟවීම"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"බුබුළ පෙන්වන්න"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"බුබුලු ඉවත් කරන්න"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"මුල් තිරය වෙත එක් කරන්න"</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_snooze_action" msgid="8411152711279433989">"යළි සිහි කැඳවන්න"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"මට මතක් කරන්න"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"සැකසීම්"</string>
     <string name="snooze_undo" msgid="60890935148417175">"අස් කරන්න"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>ක් මදක් නතර කරන ලදී"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"දත්ත සුරැකුම ක්‍රියාවිරහිතයි"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"ක්‍රියාත්මකයි"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"ක්‍රියාවිරහිතයි"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"ලබා ගත නොහැකිය"</string>
     <string name="nav_bar" msgid="4642708685386136807">"සංචලන තීරුව"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"පිරිසැලසුම"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"අමතර වම් බොත්තම් වර්ගය"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"විශාලන කවුළුව"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"විශාලනය කිරීමේ කවුළු පාලන"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"ඉක්මන් පාලන"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"පාලන එක් කරන්න"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"පාලන එක් කිරීමට යෙදුමක් තෝරා ගන්න"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one">දැනට ප්‍රියතම <xliff:g id="NUMBER_1">%s</xliff:g>.</item>
+      <item quantity="other">දැනට ප්‍රියතම <xliff:g id="NUMBER_1">%s</xliff:g>.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"පාලන"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"ඉක්මන් ප්‍රවේශය සඳහා පාලන තෝරා ගන්න"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 5bd709c..b420761 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Priblížiť na celú obrazovku"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Na celú obrazovku"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Snímka obrazovky"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Bol vložený obrázok"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"odoslal(a) obrázok"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Prebieha ukladanie snímky obrazovky..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Prebieha ukladanie snímky obrazovky..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Snímka obrazovky bola uložená"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Skúste snímku urobiť znova"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Snímka obrazovky sa nedá uložiť z dôvodu nedostatku miesta v úložisku"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Vytváranie snímok obrazovky je zakázané aplikáciou alebo vašou organizáciou"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Záznam obrazovky"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Nahrávanie 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="1539048263178882562">"Spustiť zaznamenávanie"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Hlasový vstup počas záznamu"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Zobrazovať klepnutia"</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_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, ako 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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Zastavte klepnutím"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Ukončiť"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pozastaviť"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Záznam obrazovky bol odstránený"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Pri odstraňovaní záznamu obrazovky sa vyskytla chyba"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Nepodarilo sa získať povolenia"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Pri spustení nahrávania obrazovky sa vyskytla chyba"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Možnosti prenosu súborov USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Pripojiť ako prehrávač médií (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Pripojiť ako fotoaparát (PTP)"</string>
@@ -483,6 +492,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Nabudúce nezobrazovať"</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_gentle" msgid="3044910806569985386">"Tiché 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>
@@ -682,6 +692,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Pomáha vám sústrediť sa bez zvukov či vibrácií."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Upúta vás zvukom alebo vibráciami."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Upúta vás plávajúcim odkazom na tento obsah."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Tieto upozornenia sa nedajú upraviť."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Túto skupinu upozornení nejde na tomto mieste konfigurovať"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Približné upozornenie"</string>
@@ -704,17 +718,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Hotovo"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Späť"</string>
     <string name="demote" msgid="6225813324237153980">"Označiť, že toto upozornenie nie je konverzácia"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Obľúbená"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Odstrániť z obľúbených"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Vypnúť zvuk"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Zapnúť zvuk"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Zobraziť ako bublinu"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Vypnúť bubliny"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Dôležitá konverzácia"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Nejde o dôležitú konverzáciu"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Stlmené"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Upozorňujúce"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Zobraziť bublinu"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Odstrániť bubliny"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Pridať na plochu"</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">"ovládacie prvky pre upozornenia"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"možnosti stlmenia upozornení"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Stlmiť"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Pripomenúť"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Nastavenia"</string>
     <string name="snooze_undo" msgid="60890935148417175">"SPÄŤ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Stlmené na <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -790,6 +805,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Šetrič dát je vypnutý"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Zapnuté"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Vypnuté"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Nedostupné"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigačný panel"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Rozloženie"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Dodatočný typ ľavého tlačidla"</string>
@@ -975,4 +991,20 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Okno priblíženia"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Ovládacie prvky okna priblíženia"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Rýchle ovládacie prvky"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Pridanie ovládacích prvkov"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Vyberte aplikáciu, z ktorej chcete pridať ovládacie prvky"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> aktuálne obľúbené.</item>
+      <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> current favorites.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> aktuálne obľúbených.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> aktuálne obľúbený.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Ovládacie prvky"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Vyberte ovládacie prvky na rýchly prístup"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 7c06fa7..b0201b4 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Povečava čez cel zaslon"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Raztegnitev čez zaslon"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Posnetek zaslona"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Slika je vstavljena"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"je poslal(-a) sliko"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Shranjev. posnetka zaslona ..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Shranjevanje posnetka zaslona ..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Posnetek zaslona je shranjen"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Poskusite znova ustvariti posnetek zaslona"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Shranjevanje posnetka zaslona ni mogoče zaradi omejenega prostora za shranjevanje"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Aplikacija ali vaša organizacija ne dovoljuje posnetkov zaslona"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Snemanje zaslona"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Snemalnik zaslona"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Nenehno obveščanje o seji snemanja zaslona"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Začni snemanje"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Snemanje spremnega govora"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Prikaz dotikov"</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_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">"Zvok 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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Dotaknite se, da ustavite"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Ustavi"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Začasno ustavi"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Videoposnetek zaslona je izbrisan"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Napaka pri brisanju videoposnetka zaslona"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Dovoljenj ni bilo mogoče pridobiti"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Napaka pri začenjanju snemanja zaslona"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Možnosti prenosa datotek prek USB-ja"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Vpni kot predvajalnik (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Vpni kot fotoaparat (PTP)"</string>
@@ -483,6 +492,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Tega ne prikaži več"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Izbriši vse"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Upravljanje"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Zgodovina"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Tiha obvestila"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Pogovori"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Brisanje vseh tihih obvestil"</string>
@@ -682,6 +692,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Nemoteč prikaz brez zvoka ali vibriranja"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Pritegne vašo pozornost z zvokom ali vibriranjem"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Zadrži vašo pozornost z lebdečo bližnjico do te vsebine."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Za ta obvestila ni mogoče spremeniti nastavitev."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Te skupine obvestil ni mogoče konfigurirati tukaj"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Posredovano obvestilo"</string>
@@ -704,17 +718,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Dokončano"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Razveljavi"</string>
     <string name="demote" msgid="6225813324237153980">"Označi, da to obvestilo ni pogovor"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Priljubljeno"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Odstrani iz priljubljenih"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Prezri"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Znova prikaži"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Pokaži kot oblaček"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Izklopi oblačke"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Pomemben pogovor"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Pogovor ni pomemben"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Utišano"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Z opozorilom"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Prikaži kot oblaček"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Odstrani oblačke"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Dodaj na začetni zaslon"</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">"kontrolniki obvestil"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"možnosti preložitve obvestil"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Preloži"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Opomni me"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Nastavitve"</string>
     <string name="snooze_undo" msgid="60890935148417175">"RAZVELJAVI"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Preloženo za <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -790,6 +805,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Varčevanje s podatki je izklopljeno"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Vklopljeno"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Izklop"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Ni na voljo"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Vrstica za krmarjenje"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Postavitev"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Vrsta dodatnega levega gumba"</string>
@@ -975,4 +991,20 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Povečevalno okno"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Kontrolniki povečevalnega okna"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Hitro upravljanje"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Dodajanje kontrolnikov"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Izberite aplikacijo, katere kontrolnike želite dodati"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> trenutni priljubljen.</item>
+      <item quantity="two"><xliff:g id="NUMBER_1">%s</xliff:g> trenutna priljubljena.</item>
+      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> trenutni priljubljeni.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> trenutnih priljubljenih.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrolniki"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Izberite kontrolnike za hiter dostop"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index 7549611..4f0c4e7 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zmadho për të mbushur ekranin"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Shtrije për të mbushur ekranin"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Pamja e ekranit"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Imazhi është futur"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"dërgoi një imazh"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Po ruan pamjen e ekranit..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Po ruan pamjen e ekranit…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Pamja e ekranit u ruajt"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Provo ta nxjerrësh përsëri pamjen e ekranit"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Pamja e ekranit nuk mund të ruhet për shkak të hapësirës ruajtëse të kufizuar"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Nxjerrja e pamjeve të ekranit nuk lejohet nga aplikacioni ose organizata jote."</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Regjistrimi i ekranit"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Regjistruesi i ekranit"</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="1539048263178882562">"Nis regjistrimin"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Regjistro zërin e mikrofonit"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Shfaq trokitjet"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Trokit për të ndaluar"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Ndalo"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Ndërprit"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Regjistrimi i ekranit u fshi"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Gabim gjatë fshirjes së regjistrimit të ekranit"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Marrja e lejeve dështoi"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Gabim gjatë nisjes së regjistrimit të ekranit"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opsionet e transferimit të dosjeve të USB-së"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Lidh si një lexues \"media\" (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Montoje si kamerë (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Mos e shfaq sërish"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Pastroji të gjitha"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Menaxho"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historiku"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Njoftimet në heshtje"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Bisedat"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Pastro të gjitha njoftimet në heshtje"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Të ndihmon të fokusohesh pa tinguj ose dridhje."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Të tërheq vëmendjen me tinguj ose dridhje."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Mban vëmendjen tënde me një shkurtore pluskuese te kjo përmbajtje."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Këto njoftime nuk mund të modifikohen."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Ky grup njoftimesh nuk mund të konfigurohet këtu"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Njoftim i dërguar me përfaqësues"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"U krye"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Zhbëj"</string>
     <string name="demote" msgid="6225813324237153980">"Shëno se ky njoftim nuk është një bisedë"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Shëno si të preferuar"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Hiq nga të preferuarat"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Kalo në heshtje"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Aktivizo"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Shfaqe si flluskë"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Çaktivizo flluskat"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Bashkëbisedim i rëndësishëm"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Nuk është bashkëbisedim i rëndësishëm"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Në heshtje"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Po sinjalizon"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Shfaq flluskën"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Hiq flluskat"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Shto në ekranin bazë"</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">"kontrollet e njoftimit"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"opsionet e shtyrjes së njoftimit"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Shty alarmin"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Më kujto"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Cilësimet"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ZHBËJ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"U shty për <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Kursyesi i të dhënave është joaktiv"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Aktiv"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Joaktiv"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Nuk ofrohet"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Shiriti i navigimit"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Struktura"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Lloji i butonit shtesë majtas"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Dritarja e mbivendosjes së zmadhimit"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Dritarja e zmadhimit"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Kontrollet e dritares së zmadhimit"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Kontrollet e shpejta"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Shto kontrollet"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Zgjidh një aplikacion nga i cili do të shtosh kontrollet"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> të preferuara aktuale.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> e preferuar aktuale.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrollet"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Zgjidh kontrollet për qasjen e shpejtë"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 6b2d971..fe8c436 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Зумирај на целом екрану"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Развуци на цео екран"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Снимак екрана"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Слика је уметнута"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"је послао/ла слику"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Чување снимка екрана..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Чување снимка екрана..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Снимак екрана је сачуван"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Пробајте да поново направите снимак екрана"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Чување снимка екрана није успело због ограниченог меморијског простора"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Апликација или организација не дозвољавају прављење снимака екрана"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Снимање екрана"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Снимач екрана"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Обавештење о сесији снимања екрана је активно"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Започни снимање"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Сними пренос гласа"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Приказуј додире"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Желите да започнете снимање?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Током снимања Android систем може да сними осетљиве информације које су видљиве на екрану или које се пуштају на уређају. То обухвата лозинке, информације о плаћању, слике, поруке и звук."</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_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_stop_text" msgid="6549288689506057686">"Додирните да бисте зауставили"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Заустави"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Паузирај"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Снимак екрана је избрисан"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Дошло је до проблема при брисању снимка екрана"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Преузимање дозвола није успело"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Грешка при покретању снимања екрана"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Опције USB преноса датотека"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Прикључи као медија плејер (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Прикључи као камеру (PTP)"</string>
@@ -480,6 +489,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Не приказуј поново"</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_gentle" msgid="3044910806569985386">"Нечујна обавештења"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Конверзације"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Обришите сва нечујна обавештења"</string>
@@ -679,6 +689,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Помаже вам да се концентришете без звука или вибрације."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Привлачи вам пажњу помоћу звука или вибрације."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Привлачи вам пажњу помоћу плутајуће пречице до овог садржаја."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ова обавештења не могу да се мењају."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Ова група обавештења не може да се конфигурише овде"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Обавештење преко проксија"</string>
@@ -701,17 +715,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Готово"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Опозови"</string>
     <string name="demote" msgid="6225813324237153980">"Означи да ово обавештење није конверзација"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Означи као омиљено"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Уклони из омиљених"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Искључи звук"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Укључи звук"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Прикажи као облачић"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Искључи облачиће"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Важна конверзација"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Није важна конверзација"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Звук је искључен"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Упозоравај"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Прикажи облачић"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Уклони облачиће"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Додај на почетни екран"</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_snooze_action" msgid="8411152711279433989">"Одложи"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Подсети ме"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Подешавања"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ОПОЗОВИ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Одложено је за <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -785,6 +800,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Уштеда података је искључена"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Укључено"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Искључено"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Недоступно"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Трака за навигацију"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Распоред"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Додатни тип левог дугмета"</string>
@@ -970,4 +986,19 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Прозор за увећање"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Контроле прозора за увећање"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Брзе контроле"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Додајте контроле"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Одаберите апликацију из које ћете додавати контроле"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> актуелни фаворит.</item>
+      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> актуелна фаворита.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> актуелних фаворита.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Контроле"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Одаберите контроле за брз приступ"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 33c2078..8f7d12c 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Zooma för att fylla skärm"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Dra för att fylla skärmen"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Skärmdump"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Bilden har infogats"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"har skickat en bild"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Skärmdumpen sparas ..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Skärmdumpen sparas ..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Skärmdumpen har sparats"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Testa att ta en skärmdump igen"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Det går inte att spara skärmdumpen eftersom lagringsutrymmet inte räcker"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Appen eller organisationen tillåter inte att du tar skärmdumpar"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Skärminspelning"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Skärminspelare"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Avisering om att skärminspelning pågår"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Börja spela in"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Spela in med mikrofondubbning"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Visa tryck"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Vill du starta inspelningen?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"När du spelar 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_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">"Start"</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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Tryck för att stoppa"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Stoppa"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pausa"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Skärminspelningen har raderats"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Det gick inte att radera skärminspelningen"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Behörighet saknas"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Det gick inte att starta skärminspelningen"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Överföringsalternativ"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Montera som mediaspelare (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Montera som kamera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Visa inte igen"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Rensa alla"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Hantera"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historik"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Ljudlösa aviseringar"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Konversationer"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Rensa alla ljudlösa aviseringar"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Inga ljud eller vibrationer som stör koncentrationen."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Påkallar uppmärksamhet med ljud eller vibrationer."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Behåller din uppmärksamhet med en flytande genväg till innehållet."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Det går inte att ändra de här aviseringarna."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Den här aviseringsgruppen kan inte konfigureras här"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Avisering via proxy"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Klar"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Ångra"</string>
     <string name="demote" msgid="6225813324237153980">"Markera aviseringen som icke-konversation"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Favorit"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Ta bort från favoriter"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Dölj"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Visa"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Visa som bubbla"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Inaktivera bubblor"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Viktig konversation"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Inte en viktig konversation"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Utan ljud"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Påkallar uppmärksamhet"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Visa bubbla"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Ta bort bubblor"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Lägg till på startskärmen"</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">"inställningar för aviseringar"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"alternativ för att snooza aviseringar"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Pausa"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Påminn mig"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Inställningar"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ÅNGRA"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Snoozad i <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Databesparing är inaktiverat"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"På"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Inaktiverat"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Inte tillgängligt"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigeringsfält"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Layout"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Knapptyp för extra vänster"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Förstoringsfönster"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Inställningar för förstoringsfönster"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Snabbinställningar"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Lägg till kontroller"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Välj den app du vill lägga till kontroller från"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> nuvarande favoriter.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> nuvarande favorit.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroller"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Välj kontroller för snabb åtkomst"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index bf2640f..4fa7d92 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Kuza ili kujaza skrini"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Tanua ili kujaza skrini"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Picha ya skrini"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Picha imewekwa"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"imetuma picha"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Inahifadhi picha ya skrini..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Inahifadhi picha ya skrini..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Imehifadhi picha ya skrini"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Jaribu kupiga picha ya skrini tena"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Imeshindwa kuhifadhi picha ya skrini kwa sababu nafasi haitoshi"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Programu au shirika lako halikuruhusu kupiga picha za skrini"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Kurekodi Skrini"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Kinasa Skrini"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Arifa inayoendelea ya kipindi cha kurekodi skrini"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Anza Kurekodi"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Rekodi sauti"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Onyesha unapogusa"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Ungependa kuanza kurekodi?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Inaporekodi, Mfumo wa Android unaweza kurekodi 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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Gusa ili ukomeshe"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Acha"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Sitisha"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Imefuta rekodi ya skrini"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Hitilafu imetokea wakati wa kufuta rekodi ya skrini"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Imeshindwa kupata ruhusa"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Hitilafu imetokea wakati wa kuanza kurekodi skrini"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Machaguo ya uhamisho wa faili la USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Angika kama kichezaji cha maudhui (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Angika kama kamera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Usionyeshe tena"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Futa zote"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Dhibiti"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Historia"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Arifa zisizo na sauti"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Mazungumzo"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Futa arifa zote zisizo na sauti"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Hukusaidia kuwa makini bila sauti au mtetemo."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Hupata umakinifu wako kwa sauti na mtetemo."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Huweka umakinifu wako kwenye maudhui haya kwa kutumia njia ya mkato ya kuelea."</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Hakuna viputo vya hivi majuzi"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"Viputo vilivyoondolewa hivi majuzi vitaonekana hapa ili virejeshwe kwa urahisi."</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Arifa hizi haziwezi kubadilishwa."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Kikundi hiki cha arifa hakiwezi kuwekewa mipangilio hapa"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Arifa wakilishi"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Nimemaliza"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Tendua"</string>
     <string name="demote" msgid="6225813324237153980">"Tia alama arifa hii kuwa si mazungumzo"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Tia alama ya kipendwa kwenye mazungumzo haya"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Ondoa alama ya kipendwa kwenye mazungumzo haya"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Komesha mazungumzo"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Ruhusu mazungumzo"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Onyesha kuwa kiputo"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Zima viputo"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Mazungumzo muhimu"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Si mazungumzo muhimu"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Arifa zimezimwa"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Kutoa arifa"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Onyesha kiputo"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Ondoa viputo"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Ongeza kwenye skrini ya kwanza"</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">"vidhibiti vya arifa"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"chaguo za kuahirisha arifa"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Ahirisha"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Nikumbushe"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Mipangilio"</string>
     <string name="snooze_undo" msgid="60890935148417175">"TENDUA"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Imeahirishwa kwa <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Kiokoa Data kimezimwa"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Imewashwa"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Imezimwa"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Hakipatikani"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Sehemu ya viungo muhimu"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Mpangilio"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Aina ya kitufe cha kushoto cha ziada"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Dirisha la Ukuzaji"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Vidhibiti vya Dirisha la Ukuzaji"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Vidhibiti vya Haraka"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Weka Vidhibiti"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Chagua programu utakayotumia kuweka vidhibiti"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">Vipendwa <xliff:g id="NUMBER_1">%s</xliff:g> vya sasa.</item>
+      <item quantity="one">Kipendwa <xliff:g id="NUMBER_0">%s</xliff:g> cha sasa.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Vidhibiti"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Chagua vidhibiti vya kufikia kwa haraka"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"Vipendwa"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"Vyote"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"Imeshindwa kupakia orodha ya vidhibiti vyote."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index c5289ec..26af750 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"திரையை நிரப்ப அளவை மாற்று"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"திரையை நிரப்ப இழு"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ஸ்கிரீன்ஷாட்"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"படம் செருகப்பட்டது"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"படம் அனுப்பப்பட்டது"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"ஸ்க்ரீன் ஷாட்டைச் சேமிக்கிறது…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ஸ்க்ரீன் ஷாட்டைச் சேமிக்கிறது…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"ஸ்கிரீன்ஷாட் சேமிக்கப்பட்டது"</string>
@@ -80,11 +80,31 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"ஸ்கிரீன் ஷாட்டை மீண்டும் எடுக்க முயலவும்"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"போதுமான சேமிப்பிடம் இல்லாததால் ஸ்கிரீன்ஷாட்டைச் சேமிக்க முடியவில்லை"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ஸ்கிரீன் ஷாட்டுகளை எடுப்பதை, ஆப்ஸ் அல்லது உங்கள் நிறுவனம் அனுமதிக்கவில்லை"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"திரை ரெக்கார்டிங்"</string>
+    <!-- no translation found for screenrecord_name (2596401223859996572) -->
+    <skip />
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"திரை ரெக்கார்டிங் அமர்விற்கான தொடர் அறிவிப்பு"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"ரெக்கார்டிங்கைத் தொடங்கு"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"வாய்ஸ் ஓவரை ரெக்கார்டு செய்"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"தட்டல்களைக் காட்டு"</string>
+    <!-- no translation found for screenrecord_start_label (1750350278888217473) -->
+    <skip />
+    <!-- no translation found for screenrecord_description (1123231719680353736) -->
+    <skip />
+    <!-- no translation found for screenrecord_audio_label (6183558856175159629) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_label (9016927171280567791) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_description (4922694220572186193) -->
+    <skip />
+    <!-- no translation found for screenrecord_mic_label (2111264835791332350) -->
+    <skip />
+    <!-- no translation found for screenrecord_device_audio_and_mic_label (1831323771978646841) -->
+    <skip />
+    <!-- no translation found for screenrecord_start (330991441575775004) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_only (4459670242451527727) -->
+    <skip />
+    <!-- no translation found for screenrecord_ongoing_screen_and_audio (5351133763125180920) -->
+    <skip />
+    <!-- no translation found for screenrecord_taps_label (1595690528298857649) -->
+    <skip />
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"நிறுத்த, தட்டவும்"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"நிறுத்து"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"இடைநிறுத்து"</string>
@@ -97,6 +117,8 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"திரை ரெக்கார்டிங் நீக்கப்பட்டது"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"திரை ரெக்கார்டிங்கை நீக்குவதில் பிழை"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"அனுமதிகளைப் பெற இயலவில்லை"</string>
+    <!-- no translation found for screenrecord_start_error (2200660692479682368) -->
+    <skip />
     <string name="usb_preference_title" msgid="1439924437558480718">"USB கோப்பு இடமாற்ற விருப்பங்கள்"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"(MTP) மீடியா பிளேயராக ஏற்று"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"(PTP) கேமராவாக ஏற்று"</string>
@@ -441,19 +463,19 @@
     <string name="accessibility_multi_user_switch_quick_contact" msgid="4504508915324898576">"சுயவிவரத்தைக் காட்டு"</string>
     <string name="user_add_user" msgid="4336657383006913022">"பயனரைச் சேர்"</string>
     <string name="user_new_user_name" msgid="2019166282704195789">"புதியவர்"</string>
-    <string name="guest_nickname" msgid="1863770639799615889">"வேறொருவர்"</string>
-    <string name="guest_new_guest" msgid="962155336259570156">"வேறொருவரைச் சேர்"</string>
-    <string name="guest_exit_guest" msgid="4030840507598850886">"அழைக்கப்பட்டவரை அகற்று"</string>
-    <string name="guest_exit_guest_dialog_title" msgid="5015697561580641422">"அழைக்கப்பட்டவரை அகற்றவா?"</string>
+    <string name="guest_nickname" msgid="1863770639799615889">"கெஸ்ட்"</string>
+    <string name="guest_new_guest" msgid="962155336259570156">"கெஸ்ட்டைச் சேர்"</string>
+    <string name="guest_exit_guest" msgid="4030840507598850886">"கெஸ்ட்டை அகற்று"</string>
+    <string name="guest_exit_guest_dialog_title" msgid="5015697561580641422">"கெஸ்ட்டை அகற்றவா?"</string>
     <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"இந்த அமர்வின் எல்லா பயன்பாடுகளும், தரவும் நீக்கப்படும்."</string>
     <string name="guest_exit_guest_dialog_remove" msgid="7505817591242703757">"அகற்று"</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_title" msgid="4434456703930764167">"வேறொருவர்"</string>
-    <string name="guest_notification_text" msgid="4202692942089571351">"பயன்பாடுகளையும் தரவையும் நீக்க, விருந்தினர் பயனரை அகற்றவும்"</string>
-    <string name="guest_notification_remove_action" msgid="4153019027696868099">"அழைக்கப்பட்டவரை அகற்றவா?"</string>
+    <string name="guest_notification_title" msgid="4434456703930764167">"கெஸ்ட்"</string>
+    <string name="guest_notification_text" msgid="4202692942089571351">"பயன்பாடுகளையும் தரவையும் நீக்க, கெஸ்ட் பயனரை அகற்றவும்"</string>
+    <string name="guest_notification_remove_action" msgid="4153019027696868099">"கெஸ்ட்டை அகற்றவா?"</string>
     <string name="user_logout_notification_title" msgid="3644848998053832589">"பயனரை வெளியேற்று"</string>
     <string name="user_logout_notification_text" msgid="7441286737342997991">"தற்போதைய பயனரிலிருந்து வெளியேறு"</string>
     <string name="user_logout_notification_action" msgid="7974458760719361881">"பயனரை வெளியேற்று"</string>
@@ -477,6 +499,8 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"மீண்டும் காட்டாதே"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"எல்லாவற்றையும் அழி"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"அறிவிப்புகளை நிர்வகி"</string>
+    <!-- no translation found for manage_notifications_history_text (57055985396576230) -->
+    <skip />
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"ஒலியில்லாத அறிவிப்புகள்"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"உரையாடல்கள்"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"ஒலியில்லாத அழைப்புகள் அனைத்தையும் அழிக்கும்"</string>
@@ -676,6 +700,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"ஒலியோ அதிர்வோ இல்லாமல் முழு கவனம் செலுத்த உதவும்."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"ஒலியோ அதிர்வோ ஏற்படுத்தி உங்கள் கவனத்தை ஈர்க்கும்."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"இந்த உள்ளடக்கத்திற்கான மிதக்கும் ஷார்ட்கட் மூலம் உங்கள் கவனத்தைப் பெற்றிருக்கும்."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"இந்த அறிவிப்புகளை மாற்ற இயலாது."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"இந்த அறிவுப்புக் குழுக்களை இங்கே உள்ளமைக்க இயலாது"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"ப்ராக்ஸியான அறிவிப்பு"</string>
@@ -698,17 +726,25 @@
     <string name="notification_done" msgid="6215117625922713976">"முடிந்தது"</string>
     <string name="inline_undo" msgid="9026953267645116526">"செயல்தவிர்"</string>
     <string name="demote" msgid="6225813324237153980">"இந்த அறிவிப்பை உரையாடல் அல்லாததாகக் குறிக்கவும்"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"பிடித்தது"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"பிடித்ததிலிருந்து அகற்று"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"அறிவிப்பைக் காட்டாதே"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"அறிவிப்பைக் காட்டு"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"குமிழாகக் காட்டு"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"குமிழ்களை ஆஃப் செய்"</string>
+    <!-- no translation found for notification_conversation_favorite (1905240206975921907) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unfavorite (181383708304763807) -->
+    <skip />
+    <!-- no translation found for notification_conversation_mute (268951550222925548) -->
+    <skip />
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"விழிப்பூட்டுகிறது"</string>
+    <!-- no translation found for notification_conversation_bubble (2242180995373949022) -->
+    <skip />
+    <!-- no translation found for notification_conversation_unbubble (6908427185031099868) -->
+    <skip />
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"முகப்புத் திரையில் சேர்"</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_snooze_action" msgid="8411152711279433989">"சற்றே பொறு"</string>
+    <!-- no translation found for notification_menu_snooze_action (5415729610393475019) -->
+    <skip />
+    <!-- no translation found for notification_menu_settings_action (7085494017202764285) -->
+    <skip />
     <string name="snooze_undo" msgid="60890935148417175">"செயல்தவிர்"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"உறக்கநிலையில் வைத்திருந்த நேரம்: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +816,8 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"டேட்டா சேமிப்பான் முடக்கப்பட்டது"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"ஆன்"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"ஆஃப்"</string>
+    <!-- no translation found for tile_unavailable (3095879009136616920) -->
+    <skip />
     <string name="nav_bar" msgid="4642708685386136807">"வழிசெலுத்தல் பட்டி"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"தளவமைப்பு"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"கூடுதல் இடப்புற பட்டன் வகை"</string>
@@ -964,6 +1002,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Magnification Overlay Window"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"பெரிதாக்கல் சாளரம்"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"பெரிதாக்கல் சாளரக் கட்டுப்பாடுகள்"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"விரைவுக் கட்டுப்பாடுகள்"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"கட்டுப்பாடுகளைச் சேர்த்தல்"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"எந்த ஆப்ஸிலிருந்து கட்டுப்பாடுகளைச் சேர்க்க வேண்டும் என்பதைத் தேர்ந்தெடுங்கள்"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">தற்போது பிடித்தவை: <xliff:g id="NUMBER_1">%s</xliff:g>.</item>
+      <item quantity="one">தற்போது பிடித்தது: <xliff:g id="NUMBER_0">%s</xliff:g>.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"கட்டுப்பாடுகள்"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"விரைவு அணுகலுக்கான கட்டுப்பாடுகளைத் தேர்ந்தெடுங்கள்"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index ed562f3..7c94117 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"స్క్రీన్‌కు నింపేలా జూమ్ చేయండి"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"స్క్రీన్‌కు నింపేలా విస్తరించండి"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"స్క్రీన్‌షాట్"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"ఇమేజ్ చొప్పించబడింది"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ఇమేజ్‌ను పంపారు"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"స్క్రీన్‌షాట్‌ను సేవ్ చేస్తోంది…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"స్క్రీన్‌షాట్‌ను సేవ్ చేస్తోంది…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"స్క్రీన్‌షాట్ సేవ్ చేయబడింది"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"స్క్రీన్‌షాట్ తీయడానికి మళ్లీ ప్రయత్నించండి"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"నిల్వ స్థలం పరిమితంగా ఉన్న కారణంగా స్క్రీన్‌షాట్‌ను సేవ్ చేయడం సాధ్యపడదు"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"స్క్రీన్‌షాట్‌లు తీయడానికి యాప్ లేదా మీ సంస్థ అనుమతించలేదు"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"స్క్రీన్ రికార్డింగ్"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"స్క్రీన్ రికార్డర్"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"స్క్రీన్ రికార్డ్ సెషన్ కోసం ఆన్‌గోయింగ్ నోటిఫికేషన్"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"రికార్డింగ్‌ను ప్రారంభించు"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"వాయిస్ఓవర్‌ని రికార్డ్ చేయి"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"నొక్కినవి చూపు"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"రికార్డింగ్‌ను ప్రారంభించాలా?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"రికార్డ్ చేస్తున్నప్పుడు, Android సిస్టమ్ మీ స్క్రీన్‌పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన ఏ సున్నితమైన సమాచారాన్నైనా క్యాప్చర్ చేయగలదు. ఈ సమాచారంలో, పాస్‌వర్డ్‌లు, చెల్లింపు వివరాలు, ఫోటోలు, మెసేజ్‌లు, ఆడియో ఉంటాయి."</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_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_stop_text" msgid="6549288689506057686">"ఆపడానికి నొక్కండి"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"ఆపివేయి"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"పాజ్ చేయి"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"స్క్రీన్ రికార్డింగ్ తొలగించబడింది"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"స్క్రీన్ రికార్డింగ్‌ని తొలగిస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"అనుమతులను పొందడం విఫలమైంది"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"స్క్రీన్ రికార్డింగ్ ప్రారంభించడంలో ఎర్రర్ ఏర్పడింది"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB ఫైల్ బదిలీ ఎంపికలు"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"మీడియా ప్లేయర్‌గా (MTP) మౌంట్ చేయి"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"కెమెరాగా (PTP) మౌంట్ చేయి"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"మళ్లీ చూపవద్దు"</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_gentle" msgid="3044910806569985386">"నిశ్శబ్ద నోటిఫికేషన్‌లు"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"సంభాషణలు"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"అన్ని నిశ్శబ్ద నోటిఫికేషన్‌లను క్లియర్ చేస్తుంది"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"శబ్దం లేదా వైబ్రేషన్ లేకుండా దృష్టి కేంద్రీకరించడానికి మీకు సహాయపడుతుంది."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"శబ్దం లేదా వైబ్రేషన్‌తో మీరు దృష్టి సారించేలా చేస్తుంది."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ఫ్లోటింగ్ షార్ట్‌కట్‌తో మీ దృష్టిని ఈ కంటెంట్‌పై నిలిపి ఉంచుతుంది."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"ఈ నోటిఫికేషన్‌లను సవరించడం వీలుపడదు."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"ఈ నోటిఫికేషన్‌ల సమూహాన్ని ఇక్కడ కాన్ఫిగర్ చేయలేము"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"ప్రాక్సీ చేయబడిన నోటిఫికేషన్"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"పూర్తయింది"</string>
     <string name="inline_undo" msgid="9026953267645116526">"చర్యరద్దు చేయి"</string>
     <string name="demote" msgid="6225813324237153980">"ఈ నోటిఫికేషన్‌ను సంభాషణ కానిది అని గుర్తు పెట్టండి"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"ఇష్టమైనది"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"ఇష్టమైనదిగా పెట్టిన గుర్తును తీసివేయి"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"మ్యూట్ చేయి"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"అన్‌మ్యూట్ చేయి"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"బబుల్‌లా చూపించు"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"బబుల్‌లను ఆఫ్ చేయి"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"ముఖ్యమైన సంభాషణ"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"ముఖ్యమైన సంభాషణ కాదు"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"నిశ్శబ్దం చేయబడింది"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"అలర్ట్ చేయడం"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"బబుల్‌ను చూపించు"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"బబుల్‌ను తీసివేయి"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"హోమ్ స్క్రీన్‌కు జోడించు"</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_snooze_action" msgid="8411152711279433989">"తాత్కాలికంగా ఆపివేయి"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"నాకు గుర్తు చేయి"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"సెట్టింగ్‌లు"</string>
     <string name="snooze_undo" msgid="60890935148417175">"చర్య రద్దు చేయి"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> వరకు తాత్కాలికంగా ఆపివేయబడింది"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"డేటా సేవర్ ఆఫ్‌లో ఉంది"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"ఆన్"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"ఆఫ్ చేయి"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"అందుబాటులో లేదు"</string>
     <string name="nav_bar" msgid="4642708685386136807">"నావిగేషన్ బార్"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"లేఅవుట్"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"అత్యంత ఎడమ వైపు ఉన్న బటన్ రకం"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"మాగ్నిఫికేషన్ ఓవర్‌లే విండో"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"మాగ్నిఫికేషన్ విండో"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"మాగ్నిఫికేషన్ నియంత్రణల విండో"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"త్వరిత నియంత్రణలు"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"నియంత్రణలను జోడించండి"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"దాని నుండి నియంత్రణలను జోడించేలా ఒక యాప్‌ను ఎంచుకోండి"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> ప్రస్తుత ఇష్టాలు.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> ప్రస్తుత ఇష్టం.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"నియంత్రణలు"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"త్వరిత యాక్సెస్ కోసం నియంత్రణలను ఎంచుకోండి"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-television/config.xml b/packages/SystemUI/res/values-television/config.xml
index bb49994..90ea5e2 100644
--- a/packages/SystemUI/res/values-television/config.xml
+++ b/packages/SystemUI/res/values-television/config.xml
@@ -21,8 +21,9 @@
      for different hardware and product builds. -->
 <resources>
     <!-- SystemUIFactory component -->
-    <string name="config_systemUIFactoryComponent" translatable="false">com.android.systemui.tv.TvSystemUIFactory</string>
-
+    <string name="config_systemUIFactoryComponent" translatable="false">
+        com.android.systemui.tv.TvSystemUIFactory
+    </string>
     <!-- SystemUI Services: The classes of the stuff to start. -->
     <string-array name="config_systemUIServiceComponents" translatable="false">
         <item>com.android.systemui.util.NotificationChannels</item>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 9e5b2db..fa22de8 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"ขยายจนเต็มหน้าจอ"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"ยืดจนเต็มหน้าจอ"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ภาพหน้าจอ"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"รูปภาพที่แทรก"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ส่งรูปภาพ"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"กำลังบันทึกภาพหน้าจอ..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"กำลังบันทึกภาพหน้าจอ..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"บันทึกภาพหน้าจอแล้ว"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"ลองบันทึกภาพหน้าจออีกครั้ง"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"บันทึกภาพหน้าจอไม่ได้เนื่องจากพื้นที่เก็บข้อมูลมีจำกัด"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"แอปหรือองค์กรของคุณไม่อนุญาตให้จับภาพหน้าจอ"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"การบันทึกหน้าจอ"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"โปรแกรมบันทึกหน้าจอ"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"การแจ้งเตือนต่อเนื่องสำหรับเซสชันการบันทึกหน้าจอ"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"เริ่มต้นการบันทึก"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"บันทึกเสียงบรรยาย"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"แสดงการแตะ"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"เริ่มบันทึกเลยไหม"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"ขณะบันทึก ระบบ Android จะบันทึกข้อมูลที่ละเอียดอ่อนที่ปรากฏบนหน้าจอหรือเล่นในอุปกรณ์ได้ ซึ่งรวมถึงรหัสผ่าน ข้อมูลการชำระเงิน รูปภาพ ข้อความ และเสียง"</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_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_stop_text" msgid="6549288689506057686">"แตะเพื่อหยุด"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"หยุด"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"หยุด"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"ลบการบันทึกหน้าจอแล้ว"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"เกิดข้อผิดพลาดในการลบการบันทึกหน้าจอ"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"ขอสิทธิ์ไม่สำเร็จ"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"เกิดข้อผิดพลาดขณะเริ่มบันทึกหน้าจอ"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"ตัวเลือกการถ่ายโอนไฟล์ USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"ต่อเชื่อมเป็นโปรแกรมเล่นสื่อ (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"ต่อเชื่อมเป็นกล้องถ่ายรูป (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"ไม่ต้องแสดงข้อความนี้อีก"</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_gentle" msgid="3044910806569985386">"การแจ้งเตือนแบบไม่มีเสียง"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"การสนทนา"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"ล้างการแจ้งเตือนแบบไม่มีเสียงทั้งหมด"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"ช่วยรักษาสมาธิของคุณด้วยการไม่ส่งเสียงหรือสั่น"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"ดึงความสนใจของคุณด้วยเสียงและการสั่น"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ดึงดูดความสนใจของคุณไว้เสมอด้วยทางลัดแบบลอยที่มายังเนื้อหานี้"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"แก้ไขการแจ้งเตือนเหล่านี้ไม่ได้"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"การแจ้งเตือนกลุ่มนี้กำหนดค่าที่นี่ไม่ได้"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"การแจ้งเตือนที่ผ่านพร็อกซี"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"เสร็จสิ้น"</string>
     <string name="inline_undo" msgid="9026953267645116526">"เลิกทำ"</string>
     <string name="demote" msgid="6225813324237153980">"ทำเครื่องหมายการแจ้งเตือนนี้ว่าไม่ใช่บทสนทนา"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"รายการโปรด"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"นำออกจากรายการโปรด"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"ปิดเสียง"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"เปิดเสียง"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"แสดงเป็นบับเบิล"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"ปิดบับเบิล"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"การสนทนาที่สำคัญ"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"ไม่ใช่การสนทนาที่สำคัญ"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"ปิดเสียงเตือนและการสั่น"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"แจ้งเตือน"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"แสดงเป็นบับเบิล"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"นำบับเบิลออก"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"เพิ่มลงในหน้าจอหลัก"</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_snooze_action" msgid="8411152711279433989">"ปิดเสียงเตือนชั่วคราว"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"เตือนฉัน"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"การตั้งค่า"</string>
     <string name="snooze_undo" msgid="60890935148417175">"เลิกทำ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"ปิดเสียงเตือนชั่วคราวไว้เป็นเวลา <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"โปรแกรมประหยัดอินเทอร์เน็ตปิดอยู่"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"เปิด"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"ปิด"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"ไม่มี"</string>
     <string name="nav_bar" msgid="4642708685386136807">"แถบนำทาง"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"การจัดวาง"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"ประเภทปุ่มทางซ้ายเพิ่มเติม"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"หน้าต่างการขยาย"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"การควบคุมหน้าต่างการขยาย"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"การควบคุมอย่างรวดเร็ว"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"เพิ่มการควบคุม"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"เลือกแอปเพื่อเพิ่มการควบคุม"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">รายการโปรดในปัจจุบัน <xliff:g id="NUMBER_1">%s</xliff:g> รายการ</item>
+      <item quantity="one">รายการโปรดในปัจจุบัน <xliff:g id="NUMBER_0">%s</xliff:g> รายการ</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"การควบคุม"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"เลือกการควบคุมสำหรับการเข้าถึงด่วน"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 9485a2b..016c4be 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"I-zoom upang punan screen"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"I-stretch upang mapuno screen"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Inilagay ang larawan"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"nagpadala ng larawan"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Sine-save ang screenshot…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Sine-save ang screenshot…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Na-save ang screenshot"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Subukang kumuhang muli ng screenshot"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Hindi ma-save ang screenshot dahil sa limitadong espasyo ng storage"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Hindi pinahihintulutan ng app o ng iyong organisasyon ang pagkuha ng mga screenshot"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Pag-record ng Screen"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Screen Recorder"</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="1539048263178882562">"Simulan ang Pag-record"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"I-record ang voiceover"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Ipakita ang mga pag-tap"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"I-tap para ihinto"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Ihinto"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"I-pause"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Na-delete ang pag-record ng screen"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error sa pag-delete sa pag-record ng screen"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Hindi nakuha ang mga pahintulot"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Nagkaroon ng error sa pagsisimula ng pag-record ng screen"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Opsyon paglipat ng USB file"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"I-mount bilang isang media player (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"I-mount bilang camera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Huwag ipakitang muli"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"I-clear lahat"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Pamahalaan"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"History"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Mga silent na notification"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Mga Pag-uusap"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"I-clear ang lahat ng silent na notification"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Nakakatulong sa iyong tumuon nang walang tunog o pag-vibrate."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Kinukuha ang iyong atensyon sa pamamagitan ng tunog o pag-vibrate."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Pinapanatili ang iyong atensyon sa pamamagitan ng lumulutang na shortcut sa content na ito."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Hindi puwedeng baguhin ang mga notification na ito."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Hindi mako-configure dito ang pangkat na ito ng mga notification"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Na-proxy na notification"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Tapos Na"</string>
     <string name="inline_undo" msgid="9026953267645116526">"I-undo"</string>
     <string name="demote" msgid="6225813324237153980">"Markahan ang notification na ito bilang hindi pag-uusap"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Gawing Paborito"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"I-unfavorite"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"I-mute"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"I-unmute"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Ipakita bilang bubble"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"I-off ang mga bubble"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Mahalagang pag-uusap"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Hindi mahalagang pag-uusap"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Pinatahimik"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Mag-alerto"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Magpakita ng bubble"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Alisin ang mga bubble"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Idagdag sa home screen"</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">"mga kontrol ng notification"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"mga opsyon sa pag-snooze ng notification"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"I-snooze"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Paalalahanan ako"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Mga Setting"</string>
     <string name="snooze_undo" msgid="60890935148417175">"I-UNDO"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Na-snooze ng <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Naka-off ang Data Saver"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"I-on"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"I-off"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Hindi available"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigation bar"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Layout"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Uri ng extra na button ng kaliwa"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Window ng Pag-magnify"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Mga Kontrol sa Pag-magnify ng Window"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Mga Mabilisang Kontrol"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Magdagdag ng Mga Kontrol"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Pumili ng app kung saan magdaragdag ng mga kontrol"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> kasalukuyang paborito.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> na kasalukuyang paborito.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Mga Kontrol"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Pumili ng mga kontrol para sa mabilis na pag-access"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 950b66b..de79fc4 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Yakınlaştır (ekranı kaplasın)"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Genişlet (ekran kapansın)"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Ekran görüntüsü"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Resim eklendi"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"bir resim gönderildi"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Ekran görüntüsü kaydediliyor..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Ekran görüntüsü kaydediliyor..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Ekran görüntüsü kaydedildi"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Tekrar ekran görüntüsü almayı deneyin"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Depolama alanı sınırlı olduğundan ekran görüntüsü kaydedilemiyor"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Uygulama veya kuruluşunuz, ekran görüntüsü alınmasına izin vermiyor."</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Ekran Kaydı"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Ekran Kaydedici"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ekran kaydı oturumu için devam eden bildirim"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Kaydı Başlat"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Seslendirme kaydet"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Dokunmaları göster"</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_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_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">"Dokunmaları ekranda göster"</string>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Durdurmak için dokunun"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Durdur"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Duraklat"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Ekran kaydı silindi"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Ekran kaydı silinirken hata oluştu"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"İzinler alınamadı"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Ekran kaydı başlatılırken hata oluştu"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB dosya aktarım seçenekleri"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Medya oynatıcı olarak ekle (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Kamera olarak ekle (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Bir daha gösterme"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Tümünü temizle"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Yönet"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Geçmiş"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Sessiz bildirimler"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Görüşmeler"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Sessiz bildirimlerin tümünü temizle"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Ses veya titreşim olmadan odaklanmanıza yardımcı olur."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Ses veya titreşimle dikkatinizi çeker."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Kayan kısayolla dikkatinizi bu içerik üzerinde tutar."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirimler değiştirilemez."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Bu bildirim grubu burada yapılandırılamaz"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Proxy uygulanan bildirim"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Bitti"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Geri al"</string>
     <string name="demote" msgid="6225813324237153980">"Bu bildirimi ileti dizisi değil olarak işaretle"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Favori"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Favorilerden kaldır"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Kapat"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Aç"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Balon olarak göster"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Balonları kapat"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Önemli görüşme"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Önemli bir görüşme değil"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Sesi kapatıldı"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Uyarı"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Balon olarak göster"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Balonları kaldır"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Ana ekrana ekle"</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">"Bildirim kontrolleri"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"bildirim erteleme seçenekleri"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Ertele"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Bana hatırlat"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Ayarlar"</string>
     <string name="snooze_undo" msgid="60890935148417175">"GERİ AL"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> süreyle ertelendi"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Veri Tasarrufu kapalı"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Açık"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Kapalı"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Kullanılamıyor"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Gezinme çubuğu"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Düzen"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Ekstra sol düğme türü"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Büyütme Penceresi"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Büyütme Penceresi Kontrolleri"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Hızlı Kontroller"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Kontrol Ekle"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Hangi uygulamadan kontrol ekleneceğini seçin"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> mevcut favori.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> mevcut favori.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroller"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Hızlı erişim için kontrolleri seçin"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 3e1e4a9..0d73da3 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Масштабув. на весь екран"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Розтягнути на весь екран"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Знімок екрана"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Вставлене зображення"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"надіслане зображення"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Збереження знімка екрана..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Збереження знімка екрана..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Знімок екрана збережено"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Спробуйте зробити знімок екрана ще раз"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Не вдалося зберегти знімок екрана через обмежений обсяг пам’яті"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Додаток або адміністратор вашої організації не дозволяють робити знімки екрана"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Запис екрана"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Засіб запису екрана"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Сповіщення про сеанс запису екрана"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Почати запис"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Записувати голосовий супровід"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Показувати дотики"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"Почати запис?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"Під час запису система Android може фіксувати будь-яку конфіденційну інформацію, яка з\'являється на екрані або відтворюється на пристрої, зокрема паролі, платіжну інформацію, фотографії, повідомлення та звуки."</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_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_stop_text" msgid="6549288689506057686">"Натисніть, щоб зупинити"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Зупинити"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Призупинити"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Запис екрана видалено"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Не вдалося видалити запис екрана"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Не вдалось отримати дозволи"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Не вдалося почати запис екрана"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Парам.передав.файлів через USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Підключити як медіапрогравач (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Підключити як камеру (PTP)"</string>
@@ -483,6 +492,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Більше не показувати"</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_gentle" msgid="3044910806569985386">"Беззвучні сповіщення"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Чати"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Очистити всі беззвучні сповіщення"</string>
@@ -682,6 +692,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Не відволікає увагу звуковим сигналом або вібрацією."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Привертає увагу звуковим сигналом або вібрацією."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Привертає увагу до контенту плаваючим ярликом."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ці сповіщення не можна змінити."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Цю групу сповіщень не можна налаштувати тут"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Проксі-сповіщення"</string>
@@ -704,17 +718,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Готово"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Відмінити"</string>
     <string name="demote" msgid="6225813324237153980">"Перетворити з ланцюжка повідомлень на сповіщення"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Вибране"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Видалити з вибраного"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Ігнорувати"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Не ігнорувати"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Показувати як спливаюче сповіщення"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Вимкнути спливаючі сповіщення"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Важливий чат"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Неважливий чат"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Сповіщення вимкнено"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Увімкнути сповіщення"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Показувати як спливаюче сповіщення"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Вимкнути спливаючі сповіщення"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Додати на головний екран"</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_snooze_action" msgid="8411152711279433989">"Відкласти"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Нагадати"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Налаштування"</string>
     <string name="snooze_undo" msgid="60890935148417175">"ВІДМІНИТИ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Відкладено на <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -790,6 +805,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Заощадження трафіку вимкнено"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Увімкнено"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Вимкнути"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Недоступно"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Панель навігації"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Макет"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Додатковий тип кнопки ліворуч"</string>
@@ -975,4 +991,20 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Вікно збільшення"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Елементи керування вікна збільшення"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Елементи швидкого керування"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Додайте елементи керування"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"З якого додатка потрібно вибрати елементи керування?"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one">Вибрано <xliff:g id="NUMBER_1">%s</xliff:g>.</item>
+      <item quantity="few">Вибрано <xliff:g id="NUMBER_1">%s</xliff:g>.</item>
+      <item quantity="many">Вибрано <xliff:g id="NUMBER_1">%s</xliff:g>.</item>
+      <item quantity="other">Вибрано <xliff:g id="NUMBER_1">%s</xliff:g>.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Елементи керування"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Виберіть елементи керування для швидкого доступу"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index 6f3e7ab..99be4bf 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"پوری سکرین پر زوم کریں"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"پوری سکرین پر پھیلائیں"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"اسکرین شاٹ"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"تصویر داخل کر دی گئی"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ایک تصویر بھیجی"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"اسکرین شاٹ محفوظ ہو رہا ہے…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"اسکرین شاٹ محفوظ ہو رہا ہے…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"اسکرین شاٹ محفوظ ہو گیا"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"دوبارہ اسکرین شاٹ لینے کی کوشش کریں"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"اسٹوریج کی محدود جگہ کی وجہ سے اسکرین شاٹ کو محفوظ نہیں کیا جا سکتا"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ایپ یا آپ کی تنظیم کی جانب سے اسکرین شاٹس لینے کی اجازت نہیں ہے"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"اسکرین ریکارڈنگ"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"اسکرین ریکارڈر"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"اسکرین ریکارڈ سیشن کیلئے جاری اطلاع"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"ریکارڈنگ شروع کریں"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"وائس اوور ریکارڈ کریں"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"تھپتھپاہٹیں دکھائیں"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"ریکارڈنگ شروع کریں؟"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"‏ریکارڈ کرنے کے دوران، Android سسٹم آپ کی اسکرین پر نظر آنے والی یا آپ کے آلہ پر چلنے والی کسی بھی حساس معلومات کو کیپچر کر سکتا ہے۔ اس میں پاس ورڈز، ادائیگی کی معلومات، تصاویر، پیغامات اور آڈیو شامل ہیں۔"</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_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_stop_text" msgid="6549288689506057686">"روکنے کے لیے تھپتھپائیں"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"روکیں"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"موقوف کریں"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"اسکرین ریکارڈنگ حذف ہو گئی"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"اسکرین ریکارڈنگ کو حذف کرنے میں خرابی"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"اجازتیں حاصل کرنے میں ناکامی"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"اسکرین ریکارڈنگ شروع کرنے میں خرابی"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"‏USB فائل منتقل کرنیکے اختیارات"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"‏ایک میڈیا پلیئر (MTP) کے بطور ماؤنٹ کریں"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"‏ایک کیمرہ (PTP) کے بطور ماؤنٹ کریں"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"دوبارہ نہ دکھائیں"</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_gentle" msgid="3044910806569985386">"اطلاعات خاموش کریں"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"گفتگوئیں"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"سبھی خاموش اطلاعات کو صاف کریں"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"بغیر آواز یا وائبریشن کے آپ کو فوکس کرنے میں مدد کرتا ہے۔"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"آواز اور وائبریشن کے ذریعے آپ کی توجہ حاصل کرتا ہے۔"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"اس مواد کے فلوٹنگ شارٹ کٹ کے ساتھ آپ کی توجہ دیتی ہے۔"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"ان اطلاعات کی ترمیم نہیں کی جا سکتی۔"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"اطلاعات کے اس گروپ کو یہاں کنفیگر نہیں کیا جا سکتا"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"پراکسی اطلاع"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"ہوگیا"</string>
     <string name="inline_undo" msgid="9026953267645116526">"کالعدم کریں"</string>
     <string name="demote" msgid="6225813324237153980">"اس اطلاع کو بطور گفتگو نشان زد نہ کریں"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"پسندیدہ"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"پسندیدگی ختم کریں"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"خاموش کریں"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"آواز چلائیں"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"بلبلہ کے بطور دکھائیں"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"بلبلے آف کریں"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"اہم گفتگو"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"اہم گفتگو نہیں ہے"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"خاموش کردہ"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"الرٹ کرنا"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"بلبلہ دکھائیں"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"بلبلے ہٹائیں"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"ہوم اسکرین میں شامل کریں"</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_snooze_action" msgid="8411152711279433989">"اسنوز کریں"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"مجھے یاد دلائیں"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"ترتیبات"</string>
     <string name="snooze_undo" msgid="60890935148417175">"کالعدم کریں"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> کیلئے اسنوز کیا گیا"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"ڈیٹا سیور آف ہے"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"آن"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"آف"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"غیر دستیاب ہے"</string>
     <string name="nav_bar" msgid="4642708685386136807">"نیویگیشن بار"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"لے آؤٹ"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"بائيں جانب کی اضافی بٹن کی قسم"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"میگنیفکیشن ونڈو"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"میگنیفکیشن ونڈو کنٹرولز"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"فوری کنٹرولز"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"کنٹرولز شامل کریں"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"ایک ایسی ایپ کا انتخاب جس سے کنٹرول شامل کرنا چاہتے ہیں"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> موجودہ پسندیدہ ہیں۔</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> موجودہ پسندیدہ ہے۔</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"کنٹرولز"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"فوری رسائی کیلئے کنٹرولز کا انتخاب کریں"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index 618463e..27a3f08 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Ekranga moslashtirish"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Ekran hajmida cho‘zish"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Skrinshot"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Rasm joylandi"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"rasm yuborildi"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Skrinshot saqlanmoqda…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Skrinshot saqlanmoqda…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Skrinshot saqlandi"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Qayta skrinshot olib ko‘ring"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Xotirada joy kamligi uchun skrinshot saqlanmadi"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Ilova yoki tashkilotingiz skrinshot olishni taqiqlagan"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Ekrandan video yozib olish"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Ekranni yozib olish vositasi"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ekrandan yozib olish seansi uchun joriy bildirishnoma"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Yozuvni boshlash"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Kadrorti nutqini yozib olish"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Bosishlarni ko‘rsatish"</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 maʼlumotlari ham yozib olinishi mumkin. Bunga parollar, toʻlovga oid axborot, suratlar, xabarlar va audio kiradi."</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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Toʻxtatish uchun bosing"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"To‘xtatish"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pauza"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Ekrandan yozib olingan video o‘chirib tashlandi"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Ekrandan yozib olingan vi olib tashlanmadi"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Zarur ruxsatlar olinmadi"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Ekranni yozib olish boshlanmadi"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB fayl ko‘chirish moslamalari"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Media pleyer sifatida ulash (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Kamera sifatida ulash (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Boshqa ko‘rsatilmasin"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Hammasini tozalash"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Boshqarish"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Tarix"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Sokin bildirishnomalar"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Suhbatlar"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Barcha sokin bildirishnomalarni tozalash"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Bildirishnomalar tovush va tebranishsiz keladi."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Bildirishnomalar tovush va tebranish bilan keladi."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Bu kontentni ochuvchi erkin yorliq diqqatingizda boʻladi."</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Avvalgi pufakchalar topilmadi"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"Avval yopilgan pufakchalar shu yerda chiqadi."</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirishnomalarni tahrirlash imkonsiz."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Ushbu bildirishnomalar guruhi bu yerda sozlanmaydi"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Ishonchli bildirishnoma"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Tayyor"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Qaytarish"</string>
     <string name="demote" msgid="6225813324237153980">"Bu bildirishnomani zanjirsiz deb belgilash"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Sevimli"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Sevimlilardan olib tashlash"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Ovozsiz"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Ovozli"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Bir zanjirda chiqarish"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Zanjirlarsiz chiqarish"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Muhim suhbat"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Muhim suhbat emas"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Ovozsiz qilingan"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Sukutdan chiqarish"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Bulutchani chiqarish"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Bulutchalarni olib tashlash"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Bosh ekranga chiqarish"</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">"bildirishnoma sozlamalari"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"bildirishnomalarni kechiktirish parametrlari"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Kechiktirish"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Menga eslatilsin"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Sozlamalar"</string>
     <string name="snooze_undo" msgid="60890935148417175">"BEKOR QILISH"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> muddatga kechiktirildi"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Trafik tejash o‘chiq"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Yoniq"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Yoqilmagan"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Mavjud emas"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Navigatsiya paneli"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Tugmalar joylashuvi"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Qo‘shimcha Chapga tugmasi turi"</string>
@@ -964,5 +978,16 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Kattalashtirish oynasining ustidan ochilishi"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Kattalashtirish oynasi"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Kattalashtirish oynasi sozlamalari"</string>
-    <string name="quick_controls_title" msgid="525285759614231333">"Tezkor tugmalar"</string>
+    <string name="quick_controls_title" msgid="525285759614231333">"Tezkor sozlamalar"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Elementlar kiritish"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Boshqaruv elementlariga kiritish uchun ilovani tanlang"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">Saralanganlarda <xliff:g id="NUMBER_1">%s</xliff:g> ta element bor.</item>
+      <item quantity="one">Saralanganlarda <xliff:g id="NUMBER_0">%s</xliff:g> ta element bor.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Boshqaruv elementlari"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Tezkor kirish uchun boshqaruv elementlarini tanlang"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"Saralanganlar"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"Hammasi"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"Boshqaruv elementlarining barchasi yuklanmadi."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 6be05aa..46775ef 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"T.phóng để lấp đầy m.hình"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Giãn ra để lấp đầy m.hình"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Chụp ảnh màn hình"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Đã chèn hình ảnh"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"đã gửi hình ảnh"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Đang lưu ảnh chụp màn hình..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Đang lưu ảnh chụp màn hình..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Đã lưu ảnh chụp màn hình"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Hãy thử chụp lại màn hình"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Không thể lưu ảnh chụp màn hình do giới hạn dung lượng bộ nhớ"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Ứng dụng hoặc tổ chức của bạn không cho phép chụp ảnh màn hình"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Đang ghi màn hình"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Trình 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="1539048263178882562">"Bắt đầu ghi"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Ghi phần thuyết minh"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Hiển thị số lần nhấn"</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 hiển thị 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_audio_label" msgid="6183558856175159629">"Ghi âm"</string>
+    <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Âm thanh từ thiết bị"</string>
+    <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Âm thanh từ thiết bị của bạn, 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 từ thiết bị và micrô"</string>
+    <string name="screenrecord_start" msgid="330991441575775004">"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 thị vị trí của các thao tác chạm trên màn hình"</string>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Nhấn để dừng"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Dừng"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Tạm dừng"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Đã xóa bản ghi màn hình"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Lỗi khi xóa bản ghi màn hình"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Không được cấp đủ quyền"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Lỗi khi bắt đầu ghi màn hình"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Tùy chọn truyền tệp USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Gắn như một trình phát đa phương tiện (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Gắn như một máy ảnh (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Không hiển thị lại"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Xóa tất cả"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Quản lý"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Lịch sử"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Thông báo im lặng"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Cuộc trò chuyện"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Xóa tất cả thông báo im lặng"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Giúp bạn tập trung bằng cách tắt tiếng hoặc không rung."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Thu hút sự chú ý của bạn bằng cách bật tiếng hoặc rung."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Luôn chú ý vào nội dung này bằng phím tắt nổi."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Không thể sửa đổi các thông báo này."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Không thể định cấu hình nhóm thông báo này tại đây"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Thông báo đã xử lý qua máy chủ proxy"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Xong"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Hoàn tác"</string>
     <string name="demote" msgid="6225813324237153980">"Đánh dấu thông báo này không phải là cuộc trò chuyện"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Đánh dấu là yêu thích"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Bỏ thích"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Ẩn"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Hiển thị"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Hiển thị dưới dạng bong bóng"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Tắt bong bóng"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Cuộc trò chuyện quan trọng"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Không phải là cuộc trò chuyện quan trọng"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Bị tắt tiếng"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Thông báo"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Hiển thị dưới dạng bong bóng"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Xóa bong bóng"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Thêm vào màn hình chính"</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">"điều khiển thông báo"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"Tùy chọn báo lại thông báo"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Báo lại"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Nhắc tôi"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Cài đặt"</string>
     <string name="snooze_undo" msgid="60890935148417175">"HOÀN TÁC"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Báo lại sau <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Trình tiết kiệm dữ liệu đang tắt"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Bật"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Tắt"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Không có sẵn"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Thanh điều hướng"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Bố cục"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Loại nút bổ sung bên trái"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"Cửa sổ lớp phủ phóng to"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Cửa sổ phóng to"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Các tùy chọn điều khiển cửa sổ phóng to"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"Điều khiển nhanh"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Thêm các tùy chọn điều khiển"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Chọn một ứng dụng để thêm các tùy chọn điều khiển"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> tùy chọn điều khiển yêu thích hiện tại.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> tùy chọn điều khiển yêu thích hiện tại.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Các tùy chọn điều khiển"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Chọn các tùy chọn điều khiển để truy cập nhanh"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index e10abbb..ff6ecfd 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"缩放以填满屏幕"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"拉伸以填满屏幕"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"屏幕截图"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"已插入图片"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"发送了一张图片"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"正在保存屏幕截图..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"正在保存屏幕截图..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"已保存屏幕截图"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"请再次尝试截屏"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"由于存储空间有限,无法保存屏幕截图"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"此应用或您所在的单位不允许进行屏幕截图"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"屏幕录制"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"屏幕录制工具"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"持续显示屏幕录制会话通知"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"开始录制"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"录制旁白"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"显示点按操作反馈"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"要开始录制吗?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"在录制内容时,Android 系统可以捕捉到您屏幕上显示或设备中播放的敏感信息,其中包括密码、付款信息、照片、消息和音频。"</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_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_stop_text" msgid="6549288689506057686">"点按即可停止"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"停止"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"暂停"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"已删除屏幕录制内容"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"删除屏幕录制内容时出错"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"无法获取权限"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"启动屏幕录制时出错"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB文件传输选项"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"作为媒体播放器(MTP)装载"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"作为相机(PTP)装载"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"不再显示"</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_gentle" msgid="3044910806569985386">"无声通知"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"对话"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"清除所有无声通知"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"不会发出提示音或振动,可帮助您保持专注。"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"通过提示音或振动吸引您的注意。"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"通过可链接到这项内容的浮动快捷方式吸引您的注意。"</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"无法修改这些通知。"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"您无法在此处配置这组通知"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"代理通知"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"完成"</string>
     <string name="inline_undo" msgid="9026953267645116526">"撤消"</string>
     <string name="demote" msgid="6225813324237153980">"将此通知标记为非对话"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"收藏"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"取消收藏"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"静音"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"取消静音"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"显示为气泡"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"关闭气泡"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"重要对话"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"非重要对话"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"已静音"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"提醒"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"显示气泡"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"移除气泡"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"添加到主屏幕"</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_snooze_action" msgid="8411152711279433989">"延后"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"提醒我"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"设置"</string>
     <string name="snooze_undo" msgid="60890935148417175">"撤消"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"已延后 <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"流量节省程序已关闭"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"开启"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"关闭"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"不可用"</string>
     <string name="nav_bar" msgid="4642708685386136807">"导航栏"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"布局"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"其他向左按钮类型"</string>
@@ -964,6 +980,19 @@
     <string name="magnification_overlay_title" msgid="6584179429612427958">"放大叠加窗口"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"放大窗口"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"放大窗口控件"</string>
-    <!-- no translation found for quick_controls_title (525285759614231333) -->
+    <string name="quick_controls_title" msgid="525285759614231333">"快速控制"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"添加控件"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"选择要添加的控件来自哪个应用"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">当前有 <xliff:g id="NUMBER_1">%s</xliff:g> 项收藏。</item>
+      <item quantity="one">当前有 <xliff:g id="NUMBER_0">%s</xliff:g> 项收藏。</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"控件"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"选择用于快速访问的控件"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index a83ce53..3a8c9fd 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"放大為全螢幕"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"放大為全螢幕"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"螢幕截圖"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"已插入圖片"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"已傳送圖片"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"正在儲存螢幕擷取畫面..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"正在儲存螢幕擷取畫面..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"螢幕擷取畫面已儲存"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"請再嘗試拍攝螢幕擷取畫面"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"由於儲存空間有限,因此無法儲存螢幕擷取畫面"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"應用程式或您的機構不允許擷取螢幕畫面"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"錄影畫面"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"螢幕畫面錄影工具"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"持續顯示錄影畫面工作階段通知"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"開始錄影"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"錄製畫面外的音效"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"顯示輕按選項"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"要開始錄影嗎?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"錄影時,Android 系統可擷取螢幕上顯示或裝置播放的任何敏感資料,包括密碼、付款資料、相片、訊息和音訊。"</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_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_stop_text" msgid="6549288689506057686">"輕按即可停止"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"停止"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"暫停"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"已刪除錄影畫面"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"刪除錄影畫面時發生錯誤"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"無法獲得權限"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"開始錄影畫面時發生錯誤"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB 檔案傳輸選項"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"掛接為媒體播放器 (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"掛接為相機 (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"不用再顯示"</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_gentle" msgid="3044910806569985386">"靜音通知"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"對話"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"清除所有靜音通知"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"助您保持專注,不會發出聲音或震動。"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"發出聲音或震動來吸引您的注意。"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"為此內容建立浮動捷徑以保持注意力。"</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"最近沒有任何泡泡"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"最近關閉的泡泡會顯示在這裡,方便你輕鬆存取。"</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"無法修改這些通知。"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"無法在此設定這組通知"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"代理通知"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"完成"</string>
     <string name="inline_undo" msgid="9026953267645116526">"復原"</string>
     <string name="demote" msgid="6225813324237153980">"將此通知標示為非對話"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"我的最愛"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"取消收藏"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"靜音"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"取消靜音"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"以小視窗顯示"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"關閉小視窗"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"重要對話"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"並非重要對話"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"已設定為靜音"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"發出提醒"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"以小視窗顯示"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"移除小視窗"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"加入主畫面"</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_snooze_action" msgid="8411152711279433989">"延後"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"提醒我"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"設定"</string>
     <string name="snooze_undo" msgid="60890935148417175">"復原"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"已延後 <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"數據節省模式已關閉"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"開啟"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"關閉"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"無法使用"</string>
     <string name="nav_bar" msgid="4642708685386136807">"導覽列"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"配置"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"其他向左按鈕類型"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"放大視窗"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"放大視窗控制項"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"快速控制介面"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"新增控制項"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"選擇要新增控制項的應用程式"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">目前有 <xliff:g id="NUMBER_1">%s</xliff:g> 個收藏。</item>
+      <item quantity="one">目前有 <xliff:g id="NUMBER_0">%s</xliff:g> 個收藏。</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"控制項"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"選擇控制項以快速存取"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"常用控制項"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"全部"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"無法載入完整的控制項清單。"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 9032595..1974b1d 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"放大為全螢幕"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"放大為全螢幕"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"擷取螢幕畫面"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"已插入圖片"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"傳送了一張圖片"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"正在儲存螢幕截圖…"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"正在儲存螢幕截圖…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"螢幕截圖已儲存"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"請再次嘗試拍攝螢幕截圖"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"由於儲存空間有限,因此無法儲存螢幕截圖"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"這個應用程式或貴機構不允許擷取螢幕畫面"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"錄製螢幕畫面"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"螢幕畫面錄製工具"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"持續顯示螢幕畫面錄製工作階段通知"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"開始錄製"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"錄製畫面外的音效"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"顯示觸控回應"</string>
+    <string name="screenrecord_start_label" msgid="1750350278888217473">"要開始錄製嗎?"</string>
+    <string name="screenrecord_description" msgid="1123231719680353736">"錄製螢幕畫面時,Android 系統可擷取螢幕上顯示或裝置播放的任何機密資訊,包括密碼、付款資訊、相片、訊息和音訊。"</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_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_stop_text" msgid="6549288689506057686">"輕觸即可停止"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"停止"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"暫停"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"已刪除螢幕畫面錄製內容"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"刪除螢幕畫面錄製內容時發生錯誤"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"無法取得權限"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"開始錄製螢幕畫面時發生錯誤"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"USB 檔案傳輸選項"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"掛接為媒體播放器 (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"掛接為相機 (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"不要再顯示"</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_gentle" msgid="3044910806569985386">"靜音通知"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"對話"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"清除所有靜音通知"</string>
@@ -676,6 +686,8 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"協助你不受音效或震動干擾。"</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"發出音效或震動吸引你的注意力。"</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"利用浮動式捷徑快速存取這項內容。"</string>
+    <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"最近沒有任何泡泡"</string>
+    <string name="bubble_overflow_empty_subtitle" msgid="3106801169793396894">"最近關閉的泡泡會顯示在這裡,方便你輕鬆存取。"</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"無法修改這些通知。"</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"無法在這裡設定這個通知群組"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"經過 Proxy 處理的通知"</string>
@@ -698,17 +710,18 @@
     <string name="notification_done" msgid="6215117625922713976">"完成"</string>
     <string name="inline_undo" msgid="9026953267645116526">"復原"</string>
     <string name="demote" msgid="6225813324237153980">"將這則通知標示為非對話"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"加入收藏"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"從收藏中移除"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"忽略"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"取消忽略"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"以泡泡形式顯示"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"關閉泡泡"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"重要對話"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"不是重要對話"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"已設為靜音"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"解除略過"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"以泡泡形式顯示"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"移除泡泡"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"新增至主螢幕"</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_snooze_action" msgid="8411152711279433989">"延後"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"提醒我"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"設定"</string>
     <string name="snooze_undo" msgid="60890935148417175">"復原"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"已延後 <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +793,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"數據節省模式已關閉"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"開啟"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"關閉"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"無法使用"</string>
     <string name="nav_bar" msgid="4642708685386136807">"導覽列"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"配置"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"其他向左按鈕類型"</string>
@@ -965,4 +979,15 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"放大視窗"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"放大視窗控制項"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"快速控制項"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"新增控制項"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"選擇要新增控制項的來源應用程式"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="other">目前有 <xliff:g id="NUMBER_1">%s</xliff:g> 個常用控制項。</item>
+      <item quantity="one">目前有 <xliff:g id="NUMBER_0">%s</xliff:g> 個常用控制項。</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"控制項"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"選擇要快速存取的控制項"</string>
+    <string name="controls_favorite_header_favorites" msgid="3118600046217493471">"常用控制項"</string>
+    <string name="controls_favorite_header_all" msgid="7507855973418969992">"全部"</string>
+    <string name="controls_favorite_load_error" msgid="2533215155804455348">"無法載入完整的控制項清單。"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 019128b..9782aa2 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -71,7 +71,7 @@
     <string name="compat_mode_on" msgid="4963711187149440884">"Sondeza ukugcwalisa isikrini"</string>
     <string name="compat_mode_off" msgid="7682459748279487945">"Nweba ukugcwalisa isikrini"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Isithombe-skrini"</string>
-    <string name="remote_input_image_insertion_text" msgid="4613177882724332877">"Isithombe sifakiwe"</string>
+    <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"uthumele isithombe"</string>
     <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Ilondoloz umfanekiso weskrini..."</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Ilondoloz umfanekiso weskrini..."</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"Isithombe-skrini silondoloziwe"</string>
@@ -80,11 +80,19 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"Zama ukuthatha isithombe-skrini futhi"</string>
     <string name="screenshot_failed_to_save_text" msgid="8344173457344027501">"Ayikwazi ukulondoloza isithombe-skrini ngenxa yesikhala sesitoreji esikhawulelwe"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Ukuthatha izithombe-skrini akuvunyelwe uhlelo lokusebenza noma inhlangano yakho"</string>
-    <string name="screenrecord_name" msgid="6286499308042305686">"Ukurekhoda isikrini"</string>
+    <string name="screenrecord_name" msgid="2596401223859996572">"Irekhoda yesikrini"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Isaziso esiqhubekayo seseshini yokurekhoda isikrini"</string>
-    <string name="screenrecord_start_label" msgid="1539048263178882562">"Qala ukurekhoda"</string>
-    <string name="screenrecord_mic_label" msgid="6134198080740031632">"Rekhoda izwi elingaphezulu"</string>
-    <string name="screenrecord_taps_label" msgid="2518244240225925076">"Bonisa amathebhu"</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_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_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>
     <string name="screenrecord_stop_text" msgid="6549288689506057686">"Thepha ukuze umise"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"Misa"</string>
     <string name="screenrecord_pause_label" msgid="6004054907104549857">"Phumula"</string>
@@ -97,6 +105,7 @@
     <string name="screenrecord_delete_description" msgid="1604522770162810570">"Ukurekhoda isikrini kususiwe"</string>
     <string name="screenrecord_delete_error" msgid="2870506119743013588">"Iphutha lokususa ukurekhoda isikrini"</string>
     <string name="screenrecord_permission_error" msgid="7856841237023137686">"Yehlulekile ukuthola izimvume"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"Iphutha lokuqala ukurekhoda isikrini"</string>
     <string name="usb_preference_title" msgid="1439924437558480718">"Okukhethwa kokudluliswa kwefayela ye-USB"</string>
     <string name="use_mtp_button_title" msgid="5036082897886518086">"Lengisa njengesidlali semediya (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7676427598943446826">"Lengisa ikhamera (PTP)"</string>
@@ -477,6 +486,7 @@
     <string name="media_projection_remember_text" msgid="6896767327140422951">"Ungabonisi futhi"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Sula konke"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Phatha"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"Umlando"</string>
     <string name="notification_section_header_gentle" msgid="3044910806569985386">"Thulisa izaziso"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Izingxoxo"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Sula zonke izaziso ezithulile"</string>
@@ -676,6 +686,10 @@
     <string name="notification_channel_summary_low" msgid="7300447764759926720">"Ikusiza ukuthi ugxile ngaphandle komsindo noma ukudlidliza."</string>
     <string name="notification_channel_summary_default" msgid="3539949463907902037">"Ithola ukunaka kwakho ngomsindo noma ukudlidliza."</string>
     <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Igcina ukunaka kwakho ngesinqamuleli esintantayo kulokhu okuqukethwe."</string>
+    <!-- no translation found for bubble_overflow_empty_title (3120029421991510842) -->
+    <skip />
+    <!-- no translation found for bubble_overflow_empty_subtitle (3106801169793396894) -->
+    <skip />
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"Lezi zaziso azikwazi ukushintshwa."</string>
     <string name="notification_multichannel_desc" msgid="7414593090056236179">"Leli qembu lezaziso alikwazi ukulungiselelwa lapha"</string>
     <string name="notification_delegate_header" msgid="1264510071031479920">"Isaziso sommeli"</string>
@@ -698,17 +712,18 @@
     <string name="notification_done" msgid="6215117625922713976">"Kwenziwe"</string>
     <string name="inline_undo" msgid="9026953267645116526">"Susa"</string>
     <string name="demote" msgid="6225813324237153980">"Maka lesi saziso njengokungesiyo ingxoxo"</string>
-    <string name="notification_conversation_favorite" msgid="8252976467488182853">"Intandokazi"</string>
-    <string name="notification_conversation_unfavorite" msgid="633301300443356176">"Susa ubuntandokazi"</string>
-    <string name="notification_conversation_mute" msgid="477431709687199671">"Thulisa"</string>
-    <string name="notification_conversation_unmute" msgid="410885000669775294">"Susa ukuthula"</string>
-    <string name="notification_conversation_bubble" msgid="4598142032706190028">"Bonisa njengebhamuza"</string>
-    <string name="notification_conversation_unbubble" msgid="2303087159802926401">"Vala amabhamuza"</string>
+    <string name="notification_conversation_favorite" msgid="1905240206975921907">"Ingxoxo ebalulekile"</string>
+    <string name="notification_conversation_unfavorite" msgid="181383708304763807">"Akuyona ingxoxo ebalulekile"</string>
+    <string name="notification_conversation_mute" msgid="268951550222925548">"Kuthulisiwe"</string>
+    <string name="notification_conversation_unmute" msgid="2692255619510896710">"Iyaxwayisa"</string>
+    <string name="notification_conversation_bubble" msgid="2242180995373949022">"Bonisa ibhamuza"</string>
+    <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Susa amabhamuza"</string>
     <string name="notification_conversation_home_screen" msgid="8347136037958438935">"Faka kusikrini sasekhaya"</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">"izilawuli zesaziso"</string>
     <string name="notification_menu_snooze_description" msgid="4740133348901973244">"izinketho zokusnuza zesaziso"</string>
-    <string name="notification_menu_snooze_action" msgid="8411152711279433989">"Snuza"</string>
+    <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Ngikhumbuze"</string>
+    <string name="notification_menu_settings_action" msgid="7085494017202764285">"Izilungiselelo"</string>
     <string name="snooze_undo" msgid="60890935148417175">"HLEHLISA"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Kusnuzwe u-<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
@@ -780,6 +795,7 @@
     <string name="accessibility_data_saver_off" msgid="58339669022107171">"Iseva yedatha ivaliwe"</string>
     <string name="switch_bar_on" msgid="1770868129120096114">"Vuliwe"</string>
     <string name="switch_bar_off" msgid="5669805115416379556">"Valiwe"</string>
+    <string name="tile_unavailable" msgid="3095879009136616920">"Akutholakali"</string>
     <string name="nav_bar" msgid="4642708685386136807">"Ibha yokuzula"</string>
     <string name="nav_bar_layout" msgid="4716392484772899544">"Isakhiwo"</string>
     <string name="left_nav_bar_button_type" msgid="2634852842345192790">"Uhlobo lwenkinobho engakwesokunxele engeziwe"</string>
@@ -965,4 +981,18 @@
     <string name="magnification_window_title" msgid="4863914360847258333">"Iwindi Lesikhulisi"</string>
     <string name="magnification_controls_title" msgid="8421106606708891519">"Izilawuli Zewindi Lesikhulisi"</string>
     <string name="quick_controls_title" msgid="525285759614231333">"Izilawuli Ezisheshayo"</string>
+    <string name="controls_providers_title" msgid="8844124515157926071">"Engeza Izilawuli"</string>
+    <string name="controls_providers_subtitle" msgid="8187768950110836569">"Khetha uhlelo lokusebenza ozongeza kulo izilawuli"</string>
+    <plurals name="controls_number_of_favorites" formatted="false" msgid="5867139290551373147">
+      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> izintandokazi zamanje.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> izintandokazi zamanje.</item>
+    </plurals>
+    <string name="controls_favorite_default_title" msgid="967742178688938137">"Izilawuli"</string>
+    <string name="controls_favorite_subtitle" msgid="4049644994401173949">"Khetha izilawuli mayelana nokufinyelela okusheshayo"</string>
+    <!-- no translation found for controls_favorite_header_favorites (3118600046217493471) -->
+    <skip />
+    <!-- no translation found for controls_favorite_header_all (7507855973418969992) -->
+    <skip />
+    <!-- no translation found for controls_favorite_load_error (2533215155804455348) -->
+    <skip />
 </resources>
diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml
index 79629e4..d3256ef 100644
--- a/packages/SystemUI/res/values/attrs.xml
+++ b/packages/SystemUI/res/values/attrs.xml
@@ -63,8 +63,8 @@
         <attr name="badgeMargin" format="dimension" />
     </declare-styleable>
     <declare-styleable name="UserDetailItemView">
-        <attr name="regularFontFamily" format="string" />
-        <attr name="activatedFontFamily" format="string" />
+        <attr name="regularTextAppearance" format="string" />
+        <attr name="activatedTextAppearance" format="string" />
     </declare-styleable>
     <declare-styleable name="DateView">
         <attr name="datePattern" format="string" />
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 09058f2..43ceb4e 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -201,6 +201,7 @@
     <color name="GM2_grey_900">#202124</color>
 
     <color name="GM2_red_50">#FCE8E6</color>
+    <color name="GM2_red_200">#F6AEA9</color>
     <color name="GM2_red_300">#F28B82</color>
     <color name="GM2_red_500">#B71C1C</color>
     <color name="GM2_red_700">#C5221F</color>
@@ -213,6 +214,7 @@
     <color name="GM2_blue_700">#1967D2</color>
 
     <color name="GM2_yellow_50">#FEF7E0</color>
+    <color name="GM2_yellow_200">#FDE293</color>
     <color name="GM2_yellow_500">#FFFBBC04</color>
 
     <color name="GM2_green_500">#FF34A853</color>
@@ -222,6 +224,8 @@
     <color name="magnification_border_color">#FF9900</color>
 
     <!-- controls -->
-    <color name="control_default_foreground">?android:attr/textColorPrimary</color>
-    <color name="control_default_background">?android:attr/colorBackgroundFloating</color>
+    <color name="control_primary_text">@*android:color/foreground_material_dark</color>
+    <color name="control_secondary_text">@*android:color/dim_foreground_dark</color>
+    <color name="control_default_foreground">@*android:color/foreground_material_dark</color>
+    <color name="control_default_background">@*android:color/background_floating_material_dark</color>
 </resources>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index d72ce5e..8de2df5 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -487,9 +487,6 @@
     <!-- Whether or not to add a "people" notifications section -->
     <bool name="config_usePeopleFiltering">false</bool>
 
-    <!-- Package name for controls plugin -->
-    <string name="config_controlsPluginPackageName" translatable="false">com.android.systemui.controls.panel</string>
-
     <!-- Defines the blacklist for system icons.  That is to say, the icons in the status bar that
          are part of the blacklist are never displayed. Each item in the blacklist must be a string
          defined in core/res/res/config.xml to properly blacklist the icon.
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index c4fa4e5..15575a4 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -103,7 +103,8 @@
     <item name="status_bar_icon_scale_factor" format="float" type="dimen">1.0</item>
 
     <dimen name="group_overflow_number_size">@*android:dimen/notification_text_size</dimen>
-    <dimen name="group_overflow_number_padding">@*android:dimen/notification_content_margin_end</dimen>
+    <dimen name="group_overflow_number_padding">@*android:dimen/notification_content_margin_end
+    </dimen>
 
     <!-- max height of a notification such that the content can still fade out when closing -->
     <dimen name="max_notification_fadeout_height">100dp</dimen>
@@ -267,7 +268,9 @@
     <dimen name="status_bar_icon_drawing_size">15dp</dimen>
 
     <!-- size at which Notification icons will be drawn on Ambient Display -->
-    <dimen name="status_bar_icon_drawing_size_dark">@*android:dimen/notification_header_icon_size_ambient</dimen>
+    <dimen name="status_bar_icon_drawing_size_dark">
+        @*android:dimen/notification_header_icon_size_ambient
+    </dimen>
 
     <!-- size of notification icons when the notifications are hidden -->
     <dimen name="hidden_shelf_icon_size">16dp</dimen>
@@ -299,8 +302,11 @@
     <dimen name="global_screenshot_legacy_bg_padding">20dp</dimen>
     <dimen name="global_screenshot_bg_padding">20dp</dimen>
     <dimen name="global_screenshot_x_scale">80dp</dimen>
+    <dimen name="screenshot_preview_elevation">8dp</dimen>
     <dimen name="screenshot_offset_y">48dp</dimen>
     <dimen name="screenshot_offset_x">16dp</dimen>
+    <dimen name="screenshot_dismiss_button_tappable_size">48dp</dimen>
+    <dimen name="screenshot_dismiss_button_margin">8dp</dimen>
     <dimen name="screenshot_action_container_offset_y">32dp</dimen>
     <dimen name="screenshot_action_container_corner_radius">10dp</dimen>
     <dimen name="screenshot_action_container_padding_vertical">10dp</dimen>
@@ -597,10 +603,14 @@
 
     <!-- The height of the divider between the individual notifications in a notification
          group. -->
-    <dimen name="notification_children_container_divider_height">@dimen/notification_divider_height</dimen>
+    <dimen name="notification_children_container_divider_height">
+        @dimen/notification_divider_height
+    </dimen>
 
     <!-- The top margin for the notification children container in its non-expanded form. -->
-    <dimen name="notification_children_container_margin_top">@*android:dimen/notification_content_margin_top</dimen>
+    <dimen name="notification_children_container_margin_top">
+        @*android:dimen/notification_content_margin_top
+    </dimen>
 
     <!-- The height of a notification header -->
     <dimen name="notification_header_height">53dp</dimen>
@@ -967,6 +977,9 @@
          Equal to pip_action_size - pip_action_padding. -->
     <dimen name="pip_expand_container_edge_margin">30dp</dimen>
 
+    <!-- The touchable/draggable edge size for PIP resize. -->
+    <dimen name="pip_resize_edge_size">30dp</dimen>
+
     <dimen name="default_gear_space">18dp</dimen>
     <dimen name="cell_overlay_padding">18dp</dimen>
 
@@ -1061,9 +1074,12 @@
     <integer name="wireless_charging_scale_dots_duration">83</integer>
     <integer name="wireless_charging_num_dots">16</integer>
     <!-- Starting text size in sp of batteryLevel for wireless charging animation -->
-    <item name="wireless_charging_anim_battery_level_text_size_start" format="float" type="dimen">0</item>
+    <item name="wireless_charging_anim_battery_level_text_size_start" format="float" type="dimen">
+        0
+    </item>
     <!-- Ending text size in sp of batteryLevel for wireless charging animation -->
-    <item name="wireless_charging_anim_battery_level_text_size_end" format="float" type="dimen">24</item>
+    <item name="wireless_charging_anim_battery_level_text_size_end" format="float" type="dimen">24
+    </item>
     <!-- time until battery info is at full opacity-->
     <integer name="wireless_charging_anim_opacity_offset">80</integer>
     <!-- duration batteryLevel opacity goes from 0 to 1 duration -->
@@ -1090,7 +1106,7 @@
 
     <!--  Blur radius on status bar window and power menu  -->
     <dimen name="min_window_blur_radius">1px</dimen>
-    <dimen name="max_window_blur_radius">250px</dimen>
+    <dimen name="max_window_blur_radius">150px</dimen>
 
     <!-- How much into a DisplayCutout's bounds we can go, on each side -->
     <dimen name="display_cutout_margin_consumption">0px</dimen>
@@ -1212,4 +1228,8 @@
     <!-- Screen Record -->
     <dimen name="screenrecord_dialog_padding">18dp</dimen>
     <dimen name="screenrecord_logo_size">24dp</dimen>
+    <dimen name="screenrecord_status_text_size">14sp</dimen>
+    <dimen name="screenrecord_status_icon_radius">5dp</dimen>
+
+    <dimen name="kg_user_switcher_text_size">16sp</dimen>
 </resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index b85b51e..5e9feff 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -487,6 +487,9 @@
     <!-- Content description of the data connection type 5Ge. [CHAR LIMIT=NONE] -->
     <string name="data_connection_5ge" translatable="false">5Ge</string>
 
+    <!-- Content description of the data connection type 5Ge with HTML styling. DO NOT TRANSLATE [CHAR LIMIT=NONE] -->
+    <string name="data_connection_5ge_html" translate="false"> &lt;i>5G &lt;small>E&lt;/small>&lt;/i> </string>
+
     <!-- Content description of the data connection type 5G. [CHAR LIMIT=NONE] -->
     <string name="data_connection_5g" translatable="false">5G</string>
 
@@ -1195,6 +1198,9 @@
     <!-- The text for the manage notifications link. [CHAR LIMIT=40] -->
     <string name="manage_notifications_text">Manage</string>
 
+    <!-- The text for the notification history link. [CHAR LIMIT=40] -->
+    <string name="manage_notifications_history_text">History</string>
+
     <!-- Section title for notifications that do not vibrate or make noise. [CHAR LIMIT=40] -->
     <string name="notification_section_header_gentle">Silent notifications</string>
 
@@ -1774,6 +1780,12 @@
     <!-- [CHAR LIMIT=150] Notification Importance title: bubble level summary -->
     <string name="notification_channel_summary_bubble">Keeps your attention with a floating shortcut to this content.</string>
 
+    <!-- [CHAR LIMIT=NONE] Empty overflow title -->
+    <string name="bubble_overflow_empty_title">No recent bubbles</string>
+
+    <!-- [CHAR LIMIT=NONE] Empty overflow subtitle -->
+    <string name="bubble_overflow_empty_subtitle">Recent bubbles and dismissed bubbles will appear here.</string>
+
     <!-- Notification: Control panel: Label that displays when the app's notifications cannot be blocked. -->
     <string name="notification_unblockable_desc">These notifications can\'t be modified.</string>
 
@@ -1829,23 +1841,23 @@
     <!-- Notification: Conversation: control panel, label for button that demotes notification from conversation to normal notification -->
     <string name="demote">Mark this notification as not a conversation</string>
 
-    <!-- [CHAR LIMIT=100] Mark this conversation as a favorite -->
-    <string name="notification_conversation_favorite">Mark as important</string>
+    <!-- [CHAR LIMIT=100] This conversation is marked as important -->
+    <string name="notification_conversation_favorite">Important conversation</string>
 
-    <!-- [CHAR LIMIT=100] Unmark this conversation as a favorite -->
-    <string name="notification_conversation_unfavorite">Mark as unimportant</string>
+    <!-- [CHAR LIMIT=100] This conversation is not marked as important -->
+    <string name="notification_conversation_unfavorite">Not an important conversation</string>
 
-    <!-- [CHAR LIMIT=100] Mute this conversation -->
-    <string name="notification_conversation_mute">Silence</string>
+    <!-- [CHAR LIMIT=100] This conversation is silenced (will not make sound or vibrate)-->
+    <string name="notification_conversation_mute">Silenced</string>
 
-    <!-- [CHAR LIMIT=100] Umute this conversation -->
+    <!-- [CHAR LIMIT=100] This conversation is alerting (may make sound and/or vibrate)-->
     <string name="notification_conversation_unmute">Alerting</string>
 
     <!-- [CHAR LIMIT=100] Show notification as bubble -->
-    <string name="notification_conversation_bubble">Show as bubble</string>
+    <string name="notification_conversation_bubble">Show bubble</string>
 
     <!-- [CHAR LIMIT=100] Turn off bubbles for notification -->
-    <string name="notification_conversation_unbubble">Turn off bubbles</string>
+    <string name="notification_conversation_unbubble">Remove bubbles</string>
 
     <!-- [CHAR LIMIT=100] Add this conversation to home screen -->
     <string name="notification_conversation_home_screen">Add to home screen</string>
@@ -1860,7 +1872,10 @@
     <string name="notification_menu_snooze_description">notification snooze options</string>
 
     <!-- Notification: Menu row: Label for the snooze action shown in local context menu. [CHAR LIMIT=NONE] -->
-    <string name="notification_menu_snooze_action">Snooze</string>
+    <string name="notification_menu_snooze_action">Remind me</string>
+
+    <!-- Notification: Menu row: Label for the snooze action shown in local context menu. [CHAR LIMIT=NONE] -->
+    <string name="notification_menu_settings_action">Settings</string>
 
     <!-- Notification: Snooze panel: Snooze undo button label. [CHAR LIMIT=50]-->
     <string name="snooze_undo">UNDO</string>
@@ -2029,6 +2044,9 @@
     <!-- Label for feature switch [CHAR LIMIT=30] -->
     <string name="switch_bar_off">Off</string>
 
+    <!-- The tile in quick settings is unavailable. [CHAR LIMIT=32] -->
+    <string name="tile_unavailable">Unavailable</string>
+
     <!-- SysUI Tuner: Button that leads to the navigation bar customization screen [CHAR LIMIT=60] -->
     <string name="nav_bar">Navigation bar</string>
 
@@ -2583,6 +2601,10 @@
     <string name="controls_favorite_default_title">Controls</string>
     <!-- Controls management controls screen subtitle [CHAR LIMIT=NONE] -->
     <string name="controls_favorite_subtitle">Choose controls for quick access</string>
-
-
+    <!-- Controls management controls screen favorites header [CHAR LIMIT=50] -->
+    <string name="controls_favorite_header_favorites">Favorites</string>
+    <!-- Controls management controls screen all header [CHAR LIMIT=50] -->
+    <string name="controls_favorite_header_all">All</string>
+    <!-- Controls management controls screen error on load message [CHAR LIMIT=50] -->
+    <string name="controls_favorite_load_error">The list of all controls could not be loaded.</string>
 </resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index bcffa8d..557e2d6 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -129,11 +129,15 @@
             parent="TextAppearance.StatusBar.Expanded.AboveDateTime" />
 
     <style name="TextAppearance.StatusBar.Expanded.UserSwitcher">
-        <item name="android:textSize">16sp</item>
+        <item name="android:textSize">@dimen/kg_user_switcher_text_size</item>
         <item name="android:textStyle">normal</item>
         <item name="android:textColor">?android:attr/textColorSecondary</item>
     </style>
-    <style name="TextAppearance.StatusBar.Expanded.UserSwitcher.UserName" />
+
+    <style name="TextAppearance.StatusBar.Expanded.UserSwitcher.Activated">
+        <item name="android:fontWeight">700</item>
+        <item name="android:textStyle">bold</item>
+    </style>
 
     <style name="TextAppearance" />
 
@@ -217,6 +221,16 @@
         <item name="android:fontFamily">@*android:string/config_bodyFontFamily</item>
     </style>
 
+    <style name="TextAppearance.QS.UserSwitcher">
+        <item name="android:textSize">@dimen/qs_detail_item_secondary_text_size</item>
+        <item name="android:textColor">?android:attr/textColorSecondary</item>
+    </style>
+
+    <style name="TextAppearance.QS.UserSwitcher.Activated">
+        <item name="android:fontWeight">700</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+
     <!-- This is hard coded to be sans-serif-condensed to match the icons -->
     <style name="TextAppearance.RATBadge" parent="@style/TextAppearance.QS.TileLabel.Secondary">
         <item name="android:fontFamily">sans-serif-condensed</item>
@@ -636,16 +650,16 @@
 
     <style name="TextAppearance.Control.Status">
         <item name="android:textSize">12sp</item>
-        <item name="android:textColor">?android:attr/textColorPrimary</item>
+        <item name="android:textColor">@color/control_primary_text</item>
     </style>
 
     <style name="TextAppearance.Control.Title">
         <item name="android:textSize">14sp</item>
-        <item name="android:textColor">?android:attr/textColorPrimary</item>
+        <item name="android:textColor">@color/control_primary_text</item>
     </style>
     <style name="TextAppearance.Control.Subtitle">
         <item name="android:textSize">12sp</item>
-        <item name="android:textColor">?android:attr/textColorSecondary</item>
+        <item name="android:textColor">@color/control_secondary_text</item>
     </style>
 
 </resources>
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstanceManager.java b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstanceManager.java
index a378610..b8997c2 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstanceManager.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstanceManager.java
@@ -135,8 +135,7 @@
         ArrayList<PluginInfo> plugins = new ArrayList<PluginInfo>(mPluginHandler.mPlugins);
         for (PluginInfo info : plugins) {
             if (className.startsWith(info.mPackage)) {
-                disable(info, PluginEnabler.DISABLED_FROM_EXPLICIT_CRASH);
-                disableAny = true;
+                disableAny |= disable(info, PluginEnabler.DISABLED_FROM_EXPLICIT_CRASH);
             }
         }
         return disableAny;
@@ -144,10 +143,11 @@
 
     public boolean disableAll() {
         ArrayList<PluginInfo> plugins = new ArrayList<PluginInfo>(mPluginHandler.mPlugins);
+        boolean disabledAny = false;
         for (int i = 0; i < plugins.size(); i++) {
-            disable(plugins.get(i), PluginEnabler.DISABLED_FROM_SYSTEM_CRASH);
+            disabledAny |= disable(plugins.get(i), PluginEnabler.DISABLED_FROM_SYSTEM_CRASH);
         }
-        return plugins.size() != 0;
+        return disabledAny;
     }
 
     private boolean isPluginWhitelisted(ComponentName pluginName) {
@@ -166,7 +166,7 @@
         return false;
     }
 
-    private void disable(PluginInfo info, @PluginEnabler.DisableReason int reason) {
+    private boolean disable(PluginInfo info, @PluginEnabler.DisableReason int reason) {
         // Live by the sword, die by the sword.
         // Misbehaving plugins get disabled and won't come back until uninstall/reinstall.
 
@@ -176,10 +176,12 @@
         // assuming one of them must be bad.
         if (isPluginWhitelisted(pluginComponent)) {
             // Don't disable whitelisted plugins as they are a part of the OS.
-            return;
+            return false;
         }
         Log.w(TAG, "Disabling plugin " + pluginComponent.flattenToShortString());
         mManager.getPluginEnabler().setDisabled(pluginComponent, reason);
+
+        return true;
     }
 
     public <T> boolean dependsOn(Plugin p, Class<T> cls) {
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
index 2d288ff..b1d39f5 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
@@ -123,4 +123,9 @@
      */
      void handleImageAsScreenshot(in Bitmap screenImage, in Rect locationInScreen,
               in Insets visibleInsets, int taskId) = 21;
+
+    /**
+     * Sets the split-screen divider minimized state
+     */
+    void setSplitScreenMinimized(boolean minimized) = 22;
 }
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ConfigurationCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ConfigurationCompat.java
new file mode 100644
index 0000000..d1c77a6
--- /dev/null
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ConfigurationCompat.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.systemui.shared.system;
+
+import android.content.res.Configuration;
+
+/**
+ * Wraps the Configuration to access the window configuration.
+ */
+public class ConfigurationCompat {
+
+    public static int getWindowConfigurationRotation(Configuration c) {
+        return c.windowConfiguration.getRotation();
+    }
+}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java
index e80b437..7dcf4b0 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java
@@ -24,6 +24,7 @@
 import android.os.Message;
 import android.os.Trace;
 import android.view.Surface;
+import android.view.SurfaceControl;
 import android.view.View;
 import android.view.ViewRootImpl;
 
@@ -39,7 +40,7 @@
 
     private static final int MSG_UPDATE_SEQUENCE_NUMBER = 0;
 
-    private final Surface mTargetSurface;
+    private final SurfaceControl mBarrierSurfaceControl;
     private final ViewRootImpl mTargetViewRootImpl;
     private final Handler mApplyHandler;
 
@@ -52,7 +53,8 @@
      */
     public SyncRtSurfaceTransactionApplierCompat(View targetView) {
         mTargetViewRootImpl = targetView != null ? targetView.getViewRootImpl() : null;
-        mTargetSurface = mTargetViewRootImpl != null ? mTargetViewRootImpl.mSurface : null;
+        mBarrierSurfaceControl = mTargetViewRootImpl != null
+            ? mTargetViewRootImpl.getRenderSurfaceControl() : null;
 
         mApplyHandler = new Handler(new Callback() {
             @Override
@@ -91,7 +93,7 @@
         mTargetViewRootImpl.registerRtFrameCallback(new HardwareRenderer.FrameDrawingCallback() {
             @Override
             public void onFrameDraw(long frame) {
-                if (mTargetSurface == null || !mTargetSurface.isValid()) {
+                if (mBarrierSurfaceControl == null || !mBarrierSurfaceControl.isValid()) {
                     Message.obtain(mApplyHandler, MSG_UPDATE_SEQUENCE_NUMBER, toApplySeqNo, 0)
                             .sendToTarget();
                     return;
@@ -102,7 +104,7 @@
                     SyncRtSurfaceTransactionApplierCompat.SurfaceParams surfaceParams =
                             params[i];
                     SurfaceControlCompat surface = surfaceParams.surface;
-                    t.deferTransactionUntil(surface, mTargetSurface, frame);
+                    t.deferTransactionUntil(surface, mBarrierSurfaceControl, frame);
                     applyParams(t, surfaceParams);
                 }
                 t.setEarlyWakeup();
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java
index 073688b..8f4926f 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java
@@ -20,6 +20,7 @@
 import android.graphics.Rect;
 import android.view.Surface;
 import android.view.SurfaceControl.Transaction;
+import android.view.SurfaceControl;
 
 public class TransactionCompat {
 
@@ -87,8 +88,8 @@
     }
 
     public TransactionCompat deferTransactionUntil(SurfaceControlCompat surfaceControl,
-            Surface barrier, long frameNumber) {
-        mTransaction.deferTransactionUntilSurface(surfaceControl.mSurfaceControl, barrier,
+            SurfaceControl barrier, long frameNumber) {
+        mTransaction.deferTransactionUntil(surfaceControl.mSurfaceControl, barrier,
                 frameNumber);
         return this;
     }
@@ -102,4 +103,4 @@
         mTransaction.setColor(surfaceControl.mSurfaceControl, color);
         return this;
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/keyguard/AdminSecondaryLockScreenController.java b/packages/SystemUI/src/com/android/keyguard/AdminSecondaryLockScreenController.java
index b2423b9..85724a9 100644
--- a/packages/SystemUI/src/com/android/keyguard/AdminSecondaryLockScreenController.java
+++ b/packages/SystemUI/src/com/android/keyguard/AdminSecondaryLockScreenController.java
@@ -27,7 +27,7 @@
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.util.Log;
-import android.view.SurfaceControl;
+import android.view.SurfaceControlViewHost;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
 import android.view.ViewGroup;
@@ -47,7 +47,6 @@
     private Handler mHandler;
     private IKeyguardClient mClient;
     private KeyguardSecurityCallback mKeyguardCallback;
-    private SurfaceControl.Transaction mTransaction;
 
     private final ServiceConnection mConnection = new ServiceConnection() {
         @Override
@@ -84,13 +83,13 @@
         }
 
         @Override
-        public void onSurfaceControlCreated(@Nullable SurfaceControl remoteSurfaceControl) {
+        public void onRemoteContentReady(
+                @Nullable SurfaceControlViewHost.SurfacePackage surfacePackage) {
             if (mHandler != null) {
                 mHandler.removeCallbacksAndMessages(null);
             }
-            if (remoteSurfaceControl != null) {
-                mTransaction.reparent(remoteSurfaceControl, mView.getSurfaceControl())
-                    .apply();
+            if (surfacePackage != null) {
+                mView.setChildSurfacePackage(surfacePackage);
             } else {
                 dismiss(KeyguardUpdateMonitor.getCurrentUser());
             }
@@ -138,11 +137,10 @@
 
     public AdminSecondaryLockScreenController(Context context, ViewGroup parent,
             KeyguardUpdateMonitor updateMonitor, KeyguardSecurityCallback callback,
-            Handler handler, SurfaceControl.Transaction transaction) {
+            Handler handler) {
         mContext = context;
         mHandler = handler;
         mParent = parent;
-        mTransaction = transaction;
         mUpdateMonitor = updateMonitor;
         mKeyguardCallback = callback;
         mView = new AdminSecurityView(mContext, mSurfaceHolderCallback);
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
index 29c67ae..ba8a1a9 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -39,7 +39,6 @@
 import android.util.TypedValue;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
-import android.view.SurfaceControl;
 import android.view.VelocityTracker;
 import android.view.View;
 import android.view.ViewConfiguration;
@@ -149,8 +148,7 @@
         mViewConfiguration = ViewConfiguration.get(context);
         mKeyguardStateController = Dependency.get(KeyguardStateController.class);
         mSecondaryLockScreenController = new AdminSecondaryLockScreenController(context, this,
-                mUpdateMonitor, mCallback, new Handler(Looper.myLooper()),
-                new SurfaceControl.Transaction());
+                mUpdateMonitor, mCallback, new Handler(Looper.myLooper()));
     }
 
     public void setSecurityCallback(SecurityCallback callback) {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
index f61f585..f48210c 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
@@ -42,7 +42,6 @@
 import android.util.TypedValue;
 import android.view.View;
 import android.view.animation.Animation;
-import android.widget.Button;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
@@ -251,9 +250,9 @@
             SliceItem item = rc.getSliceItem();
             final Uri itemTag = item.getSlice().getUri();
             // Try to reuse the view if already exists in the layout
-            KeyguardSliceButton button = mRow.findViewWithTag(itemTag);
+            KeyguardSliceTextView button = mRow.findViewWithTag(itemTag);
             if (button == null) {
-                button = new KeyguardSliceButton(mContext);
+                button = new KeyguardSliceTextView(mContext);
                 button.setTextColor(blendedColor);
                 button.setTag(itemTag);
                 final int viewIndex = i - (mHasHeader ? 1 : 0);
@@ -316,8 +315,8 @@
         int childCount = mRow.getChildCount();
         for (int i = 0; i < childCount; i++) {
             View v = mRow.getChildAt(i);
-            if (v instanceof Button) {
-                ((Button) v).setTextColor(blendedColor);
+            if (v instanceof TextView) {
+                ((TextView) v).setTextColor(blendedColor);
             }
         }
     }
@@ -500,8 +499,8 @@
             int childCount = getChildCount();
             for (int i = 0; i < childCount; i++) {
                 View child = getChildAt(i);
-                if (child instanceof KeyguardSliceButton) {
-                    ((KeyguardSliceButton) child).setMaxWidth(width / childCount);
+                if (child instanceof KeyguardSliceTextView) {
+                    ((KeyguardSliceTextView) child).setMaxWidth(width / childCount);
                 }
             }
             super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@@ -527,13 +526,13 @@
      * Representation of an item that appears under the clock on main keyguard message.
      */
     @VisibleForTesting
-    static class KeyguardSliceButton extends Button implements
+    static class KeyguardSliceTextView extends TextView implements
             ConfigurationController.ConfigurationListener {
 
         @StyleRes
         private static int sStyleId = R.style.TextAppearance_Keyguard_Secondary;
 
-        public KeyguardSliceButton(Context context) {
+        KeyguardSliceTextView(Context context) {
             super(context, null /* attrs */, 0 /* styleAttr */, sStyleId);
             onDensityOrFontScaleChanged();
             setEllipsize(TruncateAt.END);
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 6a04583..9ba3860 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -21,15 +21,7 @@
 import static android.content.Intent.ACTION_USER_REMOVED;
 import static android.content.Intent.ACTION_USER_STOPPED;
 import static android.content.Intent.ACTION_USER_UNLOCKED;
-import static android.os.BatteryManager.BATTERY_HEALTH_UNKNOWN;
-import static android.os.BatteryManager.BATTERY_STATUS_FULL;
 import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN;
-import static android.os.BatteryManager.EXTRA_HEALTH;
-import static android.os.BatteryManager.EXTRA_LEVEL;
-import static android.os.BatteryManager.EXTRA_MAX_CHARGING_CURRENT;
-import static android.os.BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE;
-import static android.os.BatteryManager.EXTRA_PLUGGED;
-import static android.os.BatteryManager.EXTRA_STATUS;
 import static android.telephony.PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE;
 import static android.telephony.TelephonyManager.MODEM_COUNT_DUAL_MODEM;
 
@@ -67,7 +59,6 @@
 import android.hardware.fingerprint.FingerprintManager.AuthenticationCallback;
 import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;
 import android.media.AudioManager;
-import android.os.BatteryManager;
 import android.os.CancellationSignal;
 import android.os.Handler;
 import android.os.IRemoteCallback;
@@ -94,6 +85,7 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.widget.LockPatternUtils;
 import com.android.settingslib.WirelessUtils;
+import com.android.settingslib.fuelgauge.BatteryStatus;
 import com.android.systemui.DejankUtils;
 import com.android.systemui.DumpController;
 import com.android.systemui.Dumpable;
@@ -103,6 +95,7 @@
 import com.android.systemui.shared.system.ActivityManagerWrapper;
 import com.android.systemui.shared.system.TaskStackChangeListener;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
+import com.android.systemui.util.Assert;
 
 import com.google.android.collect.Lists;
 
@@ -349,7 +342,7 @@
 
     @Override
     public void onTrustChanged(boolean enabled, int userId, int flags) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mUserHasTrust.put(userId, enabled);
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -368,7 +361,7 @@
     }
 
     private void handleSimSubscriptionInfoChanged() {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (DEBUG_SIM_STATES) {
             Log.v(TAG, "onSubscriptionInfoChanged()");
             List<SubscriptionInfo> sil = mSubscriptionManager
@@ -411,7 +404,7 @@
     }
 
     private void callbacksRefreshCarrierInfo() {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -474,7 +467,7 @@
 
     @Override
     public void onTrustManagedChanged(boolean managed, int userId) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mUserTrustIsManaged.put(userId, managed);
         mUserTrustIsUsuallyManaged.put(userId, mTrustManager.isTrustUsuallyManaged(userId));
         for (int i = 0; i < mCallbacks.size(); i++) {
@@ -531,7 +524,7 @@
 
     @VisibleForTesting
     protected void onFingerprintAuthenticated(int userId) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         Trace.beginSection("KeyGuardUpdateMonitor#onFingerPrintAuthenticated");
         mUserFingerprintAuthenticated.put(userId, true);
         // Update/refresh trust state only if user can skip bouncer
@@ -557,7 +550,7 @@
     }
 
     private void handleFingerprintAuthFailed() {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -569,7 +562,7 @@
     }
 
     private void handleFingerprintAcquired(int acquireInfo) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (acquireInfo != FingerprintManager.FINGERPRINT_ACQUIRED_GOOD) {
             return;
         }
@@ -607,7 +600,7 @@
     }
 
     private void handleFingerprintHelp(int msgId, String helpString) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -626,7 +619,7 @@
     };
 
     private void handleFingerprintError(int msgId, String errString) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (msgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED && mHandler.hasCallbacks(
                 mCancelNotReceived)) {
             mHandler.removeCallbacks(mCancelNotReceived);
@@ -679,7 +672,7 @@
     }
 
     private void notifyFingerprintRunningStateChanged() {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -692,7 +685,7 @@
     @VisibleForTesting
     protected void onFaceAuthenticated(int userId) {
         Trace.beginSection("KeyGuardUpdateMonitor#onFaceAuthenticated");
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mUserFaceAuthenticated.put(userId, true);
         // Update/refresh trust state only if user can skip bouncer
         if (getUserCanSkipBouncer(userId)) {
@@ -718,7 +711,7 @@
     }
 
     private void handleFaceAuthFailed() {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         setFaceRunningState(BIOMETRIC_STATE_STOPPED);
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -731,7 +724,7 @@
     }
 
     private void handleFaceAcquired(int acquireInfo) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (acquireInfo != FaceManager.FACE_ACQUIRED_GOOD) {
             return;
         }
@@ -775,7 +768,7 @@
     }
 
     private void handleFaceHelp(int msgId, String helpString) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (DEBUG_FACE) Log.d(TAG, "Face help received: " + helpString);
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -795,7 +788,7 @@
     };
 
     private void handleFaceError(int msgId, String errString) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (DEBUG_FACE) Log.d(TAG, "Face error received: " + errString);
         if (msgId == FaceManager.FACE_ERROR_CANCELED && mHandler.hasCallbacks(mCancelNotReceived)) {
             mHandler.removeCallbacks(mCancelNotReceived);
@@ -850,7 +843,7 @@
     }
 
     private void notifyFaceRunningStateChanged() {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -861,7 +854,7 @@
     }
 
     private void handleFaceUnlockStateChanged(boolean running, int userId) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mUserFaceUnlockRunning.put(userId, running);
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -973,7 +966,7 @@
      * Cached version of {@link TrustManager#isTrustUsuallyManaged(int)}.
      */
     public boolean isTrustUsuallyManaged(int userId) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         return mUserTrustIsUsuallyManaged.get(userId);
     }
 
@@ -1004,7 +997,7 @@
     }
 
     private void notifyStrongAuthStateChanged(int userId) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -1018,7 +1011,7 @@
     }
 
     private void dispatchErrorMessage(CharSequence message) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -1059,29 +1052,9 @@
                         MSG_TIMEZONE_UPDATE, intent.getStringExtra("time-zone"));
                 mHandler.sendMessage(msg);
             } else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
-                final int status = intent.getIntExtra(EXTRA_STATUS, BATTERY_STATUS_UNKNOWN);
-                final int plugged = intent.getIntExtra(EXTRA_PLUGGED, 0);
-                final int level = intent.getIntExtra(EXTRA_LEVEL, 0);
-                final int health = intent.getIntExtra(EXTRA_HEALTH, BATTERY_HEALTH_UNKNOWN);
 
-                final int maxChargingMicroAmp = intent.getIntExtra(EXTRA_MAX_CHARGING_CURRENT, -1);
-                int maxChargingMicroVolt = intent.getIntExtra(EXTRA_MAX_CHARGING_VOLTAGE, -1);
-                final int maxChargingMicroWatt;
-
-                if (maxChargingMicroVolt <= 0) {
-                    maxChargingMicroVolt = DEFAULT_CHARGING_VOLTAGE_MICRO_VOLT;
-                }
-                if (maxChargingMicroAmp > 0) {
-                    // Calculating muW = muA * muV / (10^6 mu^2 / mu); splitting up the divisor
-                    // to maintain precision equally on both factors.
-                    maxChargingMicroWatt = (maxChargingMicroAmp / 1000)
-                            * (maxChargingMicroVolt / 1000);
-                } else {
-                    maxChargingMicroWatt = -1;
-                }
                 final Message msg = mHandler.obtainMessage(
-                        MSG_BATTERY_UPDATE, new BatteryStatus(status, level, plugged, health,
-                                maxChargingMicroWatt));
+                        MSG_BATTERY_UPDATE, new BatteryStatus(intent));
                 mHandler.sendMessage(msg);
             } else if (Intent.ACTION_SIM_STATE_CHANGED.equals(action)) {
                 SimData args = SimData.fromIntent(intent);
@@ -1323,82 +1296,6 @@
         }
     }
 
-    public static class BatteryStatus {
-        public static final int CHARGING_UNKNOWN = -1;
-        public static final int CHARGING_SLOWLY = 0;
-        public static final int CHARGING_REGULAR = 1;
-        public static final int CHARGING_FAST = 2;
-
-        public final int status;
-        public final int level;
-        public final int plugged;
-        public final int health;
-        public final int maxChargingWattage;
-
-        public BatteryStatus(int status, int level, int plugged, int health,
-                int maxChargingWattage) {
-            this.status = status;
-            this.level = level;
-            this.plugged = plugged;
-            this.health = health;
-            this.maxChargingWattage = maxChargingWattage;
-        }
-
-        /**
-         * Determine whether the device is plugged in (USB, power, or wireless).
-         *
-         * @return true if the device is plugged in.
-         */
-        public boolean isPluggedIn() {
-            return plugged == BatteryManager.BATTERY_PLUGGED_AC
-                    || plugged == BatteryManager.BATTERY_PLUGGED_USB
-                    || plugged == BatteryManager.BATTERY_PLUGGED_WIRELESS;
-        }
-
-        /**
-         * Determine whether the device is plugged in (USB, power).
-         *
-         * @return true if the device is plugged in wired (as opposed to wireless)
-         */
-        public boolean isPluggedInWired() {
-            return plugged == BatteryManager.BATTERY_PLUGGED_AC
-                    || plugged == BatteryManager.BATTERY_PLUGGED_USB;
-        }
-
-        /**
-         * Whether or not the device is charged. Note that some devices never return 100% for
-         * battery level, so this allows either battery level or status to determine if the
-         * battery is charged.
-         *
-         * @return true if the device is charged
-         */
-        public boolean isCharged() {
-            return status == BATTERY_STATUS_FULL || level >= 100;
-        }
-
-        /**
-         * Whether battery is low and needs to be charged.
-         *
-         * @return true if battery is low
-         */
-        public boolean isBatteryLow() {
-            return level < LOW_BATTERY_THRESHOLD;
-        }
-
-        public final int getChargingSpeed(int slowThreshold, int fastThreshold) {
-            return maxChargingWattage <= 0 ? CHARGING_UNKNOWN :
-                    maxChargingWattage < slowThreshold ? CHARGING_SLOWLY :
-                            maxChargingWattage > fastThreshold ? CHARGING_FAST :
-                                    CHARGING_REGULAR;
-        }
-
-        @Override
-        public String toString() {
-            return "BatteryStatus{status=" + status + ",level=" + level + ",plugged=" + plugged
-                    + ",health=" + health + ",maxChargingWattage=" + maxChargingWattage + "}";
-        }
-    }
-
     public static class StrongAuthTracker extends LockPatternUtils.StrongAuthTracker {
         private final Consumer<Integer> mStrongAuthRequiredChangedCallback;
 
@@ -1427,7 +1324,7 @@
 
     protected void handleStartedWakingUp() {
         Trace.beginSection("KeyguardUpdateMonitor#handleStartedWakingUp");
-        checkIsHandlerThread();
+        Assert.isMainThread();
         updateBiometricListeningState();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -1439,7 +1336,7 @@
     }
 
     protected void handleStartedGoingToSleep(int arg1) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mLockIconPressed = false;
         clearBiometricRecognized();
         for (int i = 0; i < mCallbacks.size(); i++) {
@@ -1453,7 +1350,7 @@
     }
 
     protected void handleFinishedGoingToSleep(int arg1) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mGoingToSleep = false;
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -1465,7 +1362,7 @@
     }
 
     private void handleScreenTurnedOn() {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -1477,7 +1374,7 @@
     private void handleScreenTurnedOff() {
         final String tag = "KeyguardUpdateMonitor#handleScreenTurnedOff";
         DejankUtils.startDetectingBlockingIpcs(tag);
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mHardwareFingerprintUnavailableRetryCount = 0;
         mHardwareFaceUnavailableRetryCount = 0;
         for (int i = 0; i < mCallbacks.size(); i++) {
@@ -1490,7 +1387,7 @@
     }
 
     private void handleDreamingStateChanged(int dreamStart) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mIsDreaming = dreamStart == 1;
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -1502,7 +1399,7 @@
     }
 
     private void handleUserInfoChanged(int userId) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -1512,7 +1409,7 @@
     }
 
     private void handleUserUnlocked(int userId) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mUserIsUnlocked.put(userId, true);
         mNeedsSlowUnlockTransition = resolveNeedsSlowUnlockTransition();
         for (int i = 0; i < mCallbacks.size(); i++) {
@@ -1524,20 +1421,22 @@
     }
 
     private void handleUserStopped(int userId) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mUserIsUnlocked.put(userId, mUserManager.isUserUnlocked(userId));
     }
 
     @VisibleForTesting
     void handleUserRemoved(int userId) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mUserIsUnlocked.delete(userId);
         mUserTrustIsUsuallyManaged.delete(userId);
     }
 
     @VisibleForTesting
     @Inject
-    protected KeyguardUpdateMonitor(Context context, @Main Looper mainLooper,
+    protected KeyguardUpdateMonitor(
+            Context context,
+            @Main Looper mainLooper,
             BroadcastDispatcher broadcastDispatcher,
             DumpController dumpController) {
         mContext = context;
@@ -2066,7 +1965,7 @@
      * @param hasLockscreenWallpaper Whether Keyguard has a lockscreen wallpaper.
      */
     public void setHasLockscreenWallpaper(boolean hasLockscreenWallpaper) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (hasLockscreenWallpaper != mHasLockscreenWallpaper) {
             mHasLockscreenWallpaper = hasLockscreenWallpaper;
             for (int i = 0; i < mCallbacks.size(); i++) {
@@ -2089,7 +1988,7 @@
      * Handle {@link #MSG_DPM_STATE_CHANGED}
      */
     private void handleDevicePolicyManagerStateChanged(int userId) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         updateFingerprintListeningState();
         updateSecondaryLockscreenRequirement(userId);
         for (int i = 0; i < mCallbacks.size(); i++) {
@@ -2104,7 +2003,7 @@
      * Handle {@link #MSG_USER_SWITCHING}
      */
     private void handleUserSwitching(int userId, IRemoteCallback reply) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mUserTrustIsUsuallyManaged.put(userId, mTrustManager.isTrustUsuallyManaged(userId));
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -2122,7 +2021,7 @@
      * Handle {@link #MSG_USER_SWITCH_COMPLETE}
      */
     private void handleUserSwitchComplete(int userId) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -2135,7 +2034,7 @@
      * Handle {@link #MSG_DEVICE_PROVISIONED}
      */
     private void handleDeviceProvisioned() {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -2153,7 +2052,7 @@
      * Handle {@link #MSG_PHONE_STATE_CHANGED}
      */
     private void handlePhoneStateChanged(String newState) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (DEBUG) Log.d(TAG, "handlePhoneStateChanged(" + newState + ")");
         if (TelephonyManager.EXTRA_STATE_IDLE.equals(newState)) {
             mPhoneState = TelephonyManager.CALL_STATE_IDLE;
@@ -2174,7 +2073,7 @@
      * Handle {@link #MSG_RINGER_MODE_CHANGED}
      */
     private void handleRingerModeChange(int mode) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (DEBUG) Log.d(TAG, "handleRingerModeChange(" + mode + ")");
         mRingMode = mode;
         for (int i = 0; i < mCallbacks.size(); i++) {
@@ -2189,7 +2088,7 @@
      * Handle {@link #MSG_TIME_UPDATE}
      */
     private void handleTimeUpdate() {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (DEBUG) Log.d(TAG, "handleTimeUpdate");
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -2203,7 +2102,7 @@
      * Handle (@line #MSG_TIMEZONE_UPDATE}
      */
     private void handleTimeZoneUpdate(String timeZone) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (DEBUG) Log.d(TAG, "handleTimeZoneUpdate");
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -2219,7 +2118,7 @@
      * Handle {@link #MSG_BATTERY_UPDATE}
      */
     private void handleBatteryUpdate(BatteryStatus status) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (DEBUG) Log.d(TAG, "handleBatteryUpdate");
         final boolean batteryUpdateInteresting = isBatteryUpdateInteresting(mBatteryStatus, status);
         mBatteryStatus = status;
@@ -2238,7 +2137,7 @@
      */
     @VisibleForTesting
     void updateTelephonyCapable(boolean capable) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (capable == mTelephonyCapable) {
             return;
         }
@@ -2256,7 +2155,7 @@
      */
     @VisibleForTesting
     void handleSimStateChange(int subId, int slotId, int state) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (DEBUG_SIM_STATES) {
             Log.d(TAG, "handleSimStateChange(subId=" + subId + ", slotId="
                     + slotId + ", state=" + state + ")");
@@ -2340,7 +2239,7 @@
      * <p>Needs to be called from the main thread.
      */
     public void onKeyguardVisibilityChanged(boolean showing) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         Log.d(TAG, "onKeyguardVisibilityChanged(" + showing + ")");
         mKeyguardIsVisible = showing;
 
@@ -2383,7 +2282,7 @@
      * @see #sendKeyguardBouncerChanged(boolean)
      */
     private void handleKeyguardBouncerChanged(int bouncer) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (DEBUG) Log.d(TAG, "handleKeyguardBouncerChanged(" + bouncer + ")");
         boolean isBouncer = (bouncer == 1);
         mBouncer = isBouncer;
@@ -2409,7 +2308,7 @@
      * Handle {@link #MSG_REPORT_EMERGENCY_CALL_ACTION}
      */
     private void handleReportEmergencyCallAction() {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -2448,7 +2347,7 @@
      * @param callback The callback to remove
      */
     public void removeCallback(KeyguardUpdateMonitorCallback callback) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (DEBUG) {
             Log.v(TAG, "*** unregister callback for " + callback);
         }
@@ -2463,7 +2362,7 @@
      * @param callback The callback to register
      */
     public void registerCallback(KeyguardUpdateMonitorCallback callback) {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         if (DEBUG) Log.v(TAG, "*** register callback for " + callback);
         // Prevent adding duplicate callbacks
 
@@ -2552,7 +2451,7 @@
         if (!bypassHandler) {
             mHandler.obtainMessage(MSG_REPORT_EMERGENCY_CALL_ACTION).sendToTarget();
         } else {
-            checkIsHandlerThread();
+            Assert.isMainThread();
             handleReportEmergencyCallAction();
         }
     }
@@ -2570,7 +2469,7 @@
     }
 
     public void clearBiometricRecognized() {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         mUserFingerprintAuthenticated.clear();
         mUserFaceAuthenticated.clear();
         mTrustManager.clearAllBiometricRecognized(BiometricSourceType.FINGERPRINT);
@@ -2640,9 +2539,9 @@
      */
     private boolean refreshSimState(int subId, int slotId) {
         final TelephonyManager tele =
-            (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+                (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
         int state = (tele != null) ?
-            tele.getSimState(slotId) : TelephonyManager.SIM_STATE_UNKNOWN;
+                tele.getSimState(slotId) : TelephonyManager.SIM_STATE_UNKNOWN;
         SimData data = mSimDatas.get(subId);
         final boolean changed;
         if (data == null) {
@@ -2757,7 +2656,7 @@
     }
 
     private void updateLogoutEnabled() {
-        checkIsHandlerThread();
+        Assert.isMainThread();
         boolean logoutEnabled = mDevicePolicyManager.isLogoutEnabled();
         if (mLogoutEnabled != logoutEnabled) {
             mLogoutEnabled = logoutEnabled;
@@ -2771,13 +2670,6 @@
         }
     }
 
-    private void checkIsHandlerThread() {
-        if (!mHandler.getLooper().isCurrentThread()) {
-            Log.wtfStack(TAG, "must call on mHandler's thread "
-                    + mHandler.getLooper().getThread() + ", not " + Thread.currentThread());
-        }
-    }
-
     @Override
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
         pw.println("KeyguardUpdateMonitor state:");
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
index 8e87b7a..49f72a9 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
@@ -23,6 +23,7 @@
 import android.telephony.TelephonyManager;
 import android.view.WindowManagerPolicyConstants;
 
+import com.android.settingslib.fuelgauge.BatteryStatus;
 import com.android.systemui.statusbar.KeyguardIndicationController;
 
 import java.util.TimeZone;
@@ -42,7 +43,7 @@
      *
      * @param status current battery status
      */
-    public void onRefreshBatteryInfo(KeyguardUpdateMonitor.BatteryStatus status) { }
+    public void onRefreshBatteryInfo(BatteryStatus status) { }
 
     /**
      * Called once per minute or when the time changes.
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index 27fe37e..69bc259 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -48,7 +48,6 @@
 import com.android.systemui.model.SysUiState;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.DarkIconDispatcher;
-import com.android.systemui.plugins.FalsingManager;
 import com.android.systemui.plugins.PluginDependencyProvider;
 import com.android.systemui.plugins.VolumeDialogController;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -61,6 +60,7 @@
 import com.android.systemui.shared.system.ActivityManagerWrapper;
 import com.android.systemui.shared.system.DevicePolicyManagerWrapper;
 import com.android.systemui.shared.system.PackageManagerWrapper;
+import com.android.systemui.stackdivider.Divider;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.NavigationBarController;
 import com.android.systemui.statusbar.NotificationListener;
@@ -315,7 +315,6 @@
     @Inject Lazy<DockManager> mDockManager;
     @Inject Lazy<ChannelEditorDialogController> mChannelEditorDialogController;
     @Inject Lazy<INotificationManager> mINotificationManager;
-    @Inject Lazy<FalsingManager> mFalsingManager;
     @Inject Lazy<SysUiState> mSysUiStateFlagsContainer;
     @Inject Lazy<AlarmManager> mAlarmManager;
     @Inject Lazy<KeyguardSecurityModel> mKeyguardSecurityModel;
@@ -329,6 +328,7 @@
     @Inject Lazy<DisplayImeController> mDisplayImeController;
     @Inject Lazy<RecordingController> mRecordingController;
     @Inject Lazy<ProtoTracer> mProtoTracer;
+    @Inject Lazy<Divider> mDivider;
 
     @Inject
     public Dependency() {
@@ -509,7 +509,6 @@
         mProviders.put(DockManager.class, mDockManager::get);
         mProviders.put(ChannelEditorDialogController.class, mChannelEditorDialogController::get);
         mProviders.put(INotificationManager.class, mINotificationManager::get);
-        mProviders.put(FalsingManager.class, mFalsingManager::get);
         mProviders.put(SysUiState.class, mSysUiStateFlagsContainer::get);
         mProviders.put(AlarmManager.class, mAlarmManager::get);
         mProviders.put(KeyguardSecurityModel.class, mKeyguardSecurityModel::get);
@@ -530,6 +529,7 @@
         mProviders.put(AutoHideController.class, mAutoHideController::get);
 
         mProviders.put(RecordingController.class, mRecordingController::get);
+        mProviders.put(Divider.class, mDivider::get);
 
         sDependency = this;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/DockedStackExistsListener.java b/packages/SystemUI/src/com/android/systemui/DockedStackExistsListener.java
deleted file mode 100644
index 5c0df17..0000000
--- a/packages/SystemUI/src/com/android/systemui/DockedStackExistsListener.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-package com.android.systemui;
-
-import android.os.RemoteException;
-import android.util.Log;
-import android.view.IDockedStackListener;
-import android.view.WindowManagerGlobal;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.function.Consumer;
-
-/**
- * Utility wrapper to listen for whether or not a docked stack exists, to be
- * used for things like the different overview icon in that mode.
- */
-public class DockedStackExistsListener {
-
-    private static final String TAG = "DockedStackExistsListener";
-
-    private static ArrayList<WeakReference<Consumer<Boolean>>> sCallbacks = new ArrayList<>();
-    private static boolean mLastExists;
-
-    static {
-        try {
-            WindowManagerGlobal.getWindowManagerService().registerDockedStackListener(
-                    new IDockedStackListener.Stub() {
-                        @Override
-                        public void onDividerVisibilityChanged(boolean b) throws RemoteException {
-
-                        }
-
-                        @Override
-                        public void onDockedStackExistsChanged(boolean exists)
-                                throws RemoteException {
-                            DockedStackExistsListener.onDockedStackExistsChanged(exists);
-                        }
-
-                        @Override
-                        public void onDockedStackMinimizedChanged(boolean b, long l, boolean b1)
-                                throws RemoteException {
-
-                        }
-
-                        @Override
-                        public void onAdjustedForImeChanged(boolean b, long l)
-                                throws RemoteException {
-
-                        }
-
-                        @Override
-                        public void onDockSideChanged(int i) throws RemoteException {
-
-                        }
-                    });
-        } catch (RemoteException e) {
-            Log.e(TAG, "Failed registering docked stack exists listener", e);
-        }
-    }
-
-
-    private static void onDockedStackExistsChanged(boolean exists) {
-        mLastExists = exists;
-        synchronized (sCallbacks) {
-            sCallbacks.removeIf(wf -> {
-                Consumer<Boolean> l = wf.get();
-                if (l != null) l.accept(exists);
-                return l == null;
-            });
-        }
-    }
-
-    public static void register(Consumer<Boolean> callback) {
-        callback.accept(mLastExists);
-        synchronized (sCallbacks) {
-            sCallbacks.add(new WeakReference<>(callback));
-        }
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index e50d08c..4473b01 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -18,12 +18,14 @@
 
 import android.app.ActivityManager;
 import android.content.Context;
+import android.content.res.Configuration;
 import android.graphics.Rect;
 import android.os.HandlerThread;
 import android.os.Trace;
 import android.service.wallpaper.WallpaperService;
 import android.util.Log;
 import android.util.Size;
+import android.view.DisplayInfo;
 import android.view.SurfaceHolder;
 
 import com.android.internal.annotations.VisibleForTesting;
@@ -93,14 +95,20 @@
         private StatusBarStateController mController;
         private final Runnable mFinishRenderingTask = this::finishRendering;
         private final boolean mNeedTransition;
+        private boolean mShouldStopTransition;
+        @VisibleForTesting
+        final boolean mIsHighEndGfx;
+        private final boolean mDisplayNeedsBlanking;
+        private final DisplayInfo mDisplayInfo = new DisplayInfo();
         private final Object mMonitor = new Object();
         private boolean mNeedRedraw;
         // This variable can only be accessed in synchronized block.
         private boolean mWaitingForRendering;
 
         GLEngine(Context context, DozeParameters dozeParameters) {
-            mNeedTransition = ActivityManager.isHighEndGfx()
-                    && !dozeParameters.getDisplayNeedsBlanking();
+            mIsHighEndGfx = ActivityManager.isHighEndGfx();
+            mDisplayNeedsBlanking = dozeParameters.getDisplayNeedsBlanking();
+            mNeedTransition = mIsHighEndGfx && !mDisplayNeedsBlanking;
 
             // We will preserve EGL context when we are in lock screen or aod
             // to avoid janking in following transition, we need to release when back to home.
@@ -112,14 +120,23 @@
 
         @Override
         public void onCreate(SurfaceHolder surfaceHolder) {
-            mEglHelper = new EglHelper();
+            mEglHelper = getEglHelperInstance();
             // Deferred init renderer because we need to get wallpaper by display context.
-            mRenderer = new ImageWallpaperRenderer(getDisplayContext(), this /* SurfaceProxy */);
+            mRenderer = getRendererInstance();
+            getDisplayContext().getDisplay().getDisplayInfo(mDisplayInfo);
             setFixedSizeAllowed(true);
             setOffsetNotificationsEnabled(true);
             updateSurfaceSize();
         }
 
+        EglHelper getEglHelperInstance() {
+            return new EglHelper();
+        }
+
+        ImageWallpaperRenderer getRendererInstance() {
+            return new ImageWallpaperRenderer(getDisplayContext(), this /* SurfaceProxy */);
+        }
+
         private void updateSurfaceSize() {
             SurfaceHolder holder = getSurfaceHolder();
             Size frameSize = mRenderer.reportSurfaceSize();
@@ -128,21 +145,44 @@
             holder.setFixedSize(width, height);
         }
 
+        /**
+         * Check if necessary to stop transition with current wallpaper on this device. <br/>
+         * This should only be invoked after {@link #onSurfaceCreated(SurfaceHolder)}}
+         * is invoked since it needs display context and surface frame size.
+         * @return true if need to stop transition.
+         */
+        @VisibleForTesting
+        boolean checkIfShouldStopTransition() {
+            int orientation = getDisplayContext().getResources().getConfiguration().orientation;
+            Rect frame = getSurfaceHolder().getSurfaceFrame();
+            Rect display = new Rect();
+            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
+                display.set(0, 0, mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight);
+            } else {
+                display.set(0, 0, mDisplayInfo.logicalHeight, mDisplayInfo.logicalWidth);
+            }
+            return mNeedTransition
+                    && (frame.width() < display.width() || frame.height() < display.height());
+        }
+
         @Override
         public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep,
                 float yOffsetStep, int xPixelOffset, int yPixelOffset) {
+            if (mWorker == null) return;
             mWorker.getThreadHandler().post(() -> mRenderer.updateOffsets(xOffset, yOffset));
         }
 
         @Override
         public void onAmbientModeChanged(boolean inAmbientMode, long animationDuration) {
-            if (!mNeedTransition) return;
+            if (mWorker == null || !mNeedTransition) return;
+            final long duration = mShouldStopTransition ? 0 : animationDuration;
             if (DEBUG) {
                 Log.d(TAG, "onAmbientModeChanged: inAmbient=" + inAmbientMode
-                        + ", duration=" + animationDuration);
+                        + ", duration=" + duration
+                        + ", mShouldStopTransition=" + mShouldStopTransition);
             }
             mWorker.getThreadHandler().post(
-                    () -> mRenderer.updateAmbientMode(inAmbientMode, animationDuration));
+                    () -> mRenderer.updateAmbientMode(inAmbientMode, duration));
             if (inAmbientMode && animationDuration == 0) {
                 // This means that we are transiting from home to aod, to avoid
                 // race condition between window visibility and transition,
@@ -183,6 +223,8 @@
 
         @Override
         public void onSurfaceCreated(SurfaceHolder holder) {
+            mShouldStopTransition = checkIfShouldStopTransition();
+            if (mWorker == null) return;
             mWorker.getThreadHandler().post(() -> {
                 mEglHelper.init(holder, needSupportWideColorGamut());
                 mRenderer.onSurfaceCreated();
@@ -191,6 +233,7 @@
 
         @Override
         public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
+            if (mWorker == null) return;
             mWorker.getThreadHandler().post(() -> {
                 mRenderer.onSurfaceChanged(width, height);
                 mNeedRedraw = true;
@@ -199,6 +242,7 @@
 
         @Override
         public void onSurfaceRedrawNeeded(SurfaceHolder holder) {
+            if (mWorker == null) return;
             if (DEBUG) {
                 Log.d(TAG, "onSurfaceRedrawNeeded: mNeedRedraw=" + mNeedRedraw);
             }
@@ -227,7 +271,7 @@
         @Override
         public void onStatePostChange() {
             // When back to home, we try to release EGL, which is preserved in lock screen or aod.
-            if (mController.getState() == StatusBarState.SHADE) {
+            if (mWorker != null && mController.getState() == StatusBarState.SHADE) {
                 mWorker.getThreadHandler().post(this::scheduleFinishRendering);
             }
         }
@@ -316,10 +360,12 @@
         }
 
         private void cancelFinishRenderingTask() {
+            if (mWorker == null) return;
             mWorker.getThreadHandler().removeCallbacks(mFinishRenderingTask);
         }
 
         private void scheduleFinishRendering() {
+            if (mWorker == null) return;
             cancelFinishRenderingTask();
             mWorker.getThreadHandler().postDelayed(mFinishRenderingTask, DELAY_FINISH_RENDERING);
         }
@@ -348,15 +394,13 @@
         protected void dump(String prefix, FileDescriptor fd, PrintWriter out, String[] args) {
             super.dump(prefix, fd, out, args);
             out.print(prefix); out.print("Engine="); out.println(this);
-
-            boolean isHighEndGfx = ActivityManager.isHighEndGfx();
-            out.print(prefix); out.print("isHighEndGfx="); out.println(isHighEndGfx);
-
+            out.print(prefix); out.print("isHighEndGfx="); out.println(mIsHighEndGfx);
             out.print(prefix); out.print("displayNeedsBlanking=");
-            out.println(
-                    mDozeParameters != null ? mDozeParameters.getDisplayNeedsBlanking() : "null");
-
+            out.println(mDisplayNeedsBlanking);
+            out.print(prefix); out.print("displayInfo="); out.print(mDisplayInfo);
             out.print(prefix); out.print("mNeedTransition="); out.println(mNeedTransition);
+            out.print(prefix); out.print("mShouldStopTransition=");
+            out.println(mShouldStopTransition);
             out.print(prefix); out.print("StatusBarState=");
             out.println(mController != null ? mController.getState() : "null");
 
diff --git a/packages/SystemUI/src/com/android/systemui/MultiListLayout.java b/packages/SystemUI/src/com/android/systemui/MultiListLayout.java
index d153fb0..611da0d 100644
--- a/packages/SystemUI/src/com/android/systemui/MultiListLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/MultiListLayout.java
@@ -57,7 +57,10 @@
     }
 
     protected void setSeparatedViewVisibility(boolean visible) {
-        getSeparatedView().setVisibility(visible ? View.VISIBLE : View.GONE);
+        ViewGroup separatedView = getSeparatedView();
+        if (separatedView != null) {
+            separatedView.setVisibility(visible ? View.VISIBLE : View.GONE);
+        }
     }
 
     /**
diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
index e66b9f2..c9104dc 100644
--- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
+++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
@@ -14,6 +14,12 @@
 
 package com.android.systemui;
 
+import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.DisplayCutout.BOUNDS_POSITION_BOTTOM;
+import static android.view.DisplayCutout.BOUNDS_POSITION_LEFT;
+import static android.view.DisplayCutout.BOUNDS_POSITION_LENGTH;
+import static android.view.DisplayCutout.BOUNDS_POSITION_RIGHT;
+import static android.view.DisplayCutout.BOUNDS_POSITION_TOP;
 import static android.view.Surface.ROTATION_0;
 import static android.view.Surface.ROTATION_180;
 import static android.view.Surface.ROTATION_270;
@@ -22,12 +28,8 @@
 import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
 
-import static com.android.systemui.tuner.TunablePadding.FLAG_END;
-import static com.android.systemui.tuner.TunablePadding.FLAG_START;
-
 import android.annotation.Dimension;
 import android.app.ActivityManager;
-import android.app.Fragment;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -50,6 +52,7 @@
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.view.DisplayCutout;
+import android.view.DisplayCutout.BoundsPosition;
 import android.view.DisplayInfo;
 import android.view.Gravity;
 import android.view.LayoutInflater;
@@ -69,16 +72,9 @@
 import com.android.systemui.RegionInterceptingFrameLayout.RegionInterceptableView;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.dagger.qualifiers.Main;
-import com.android.systemui.fragments.FragmentHostManager;
-import com.android.systemui.fragments.FragmentHostManager.FragmentListener;
-import com.android.systemui.plugins.qs.QS;
 import com.android.systemui.qs.SecureSetting;
-import com.android.systemui.statusbar.phone.CollapsedStatusBarFragment;
-import com.android.systemui.statusbar.phone.StatusBar;
-import com.android.systemui.tuner.TunablePadding;
 import com.android.systemui.tuner.TunerService;
 import com.android.systemui.tuner.TunerService.Tunable;
-import com.android.systemui.util.leak.RotationUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -86,8 +82,6 @@
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
-import dagger.Lazy;
-
 /**
  * An overlay that draws screen decorations in software (e.g for rounded corners or display cutout)
  * for antialiasing and emulation purposes.
@@ -102,9 +96,9 @@
     private static final boolean DEBUG_SCREENSHOT_ROUNDED_CORNERS =
             SystemProperties.getBoolean("debug.screenshot_rounded_corners", false);
     private static final boolean VERBOSE = false;
-    private final Lazy<StatusBar> mStatusBarLazy;
 
     private DisplayManager mDisplayManager;
+    private boolean mIsRegistered;
     private final BroadcastDispatcher mBroadcastDispatcher;
     private final Handler mMainHandler;
     private final TunerService mTunerService;
@@ -116,13 +110,12 @@
     protected int mRoundedDefaultTop;
     @VisibleForTesting
     protected int mRoundedDefaultBottom;
-    private View mOverlay;
-    private View mBottomOverlay;
+    @VisibleForTesting
+    protected View[] mOverlays;
+    private DisplayCutoutView[] mCutoutViews;
     private float mDensity;
     private WindowManager mWindowManager;
     private int mRotation;
-    private DisplayCutoutView mCutoutTop;
-    private DisplayCutoutView mCutoutBottom;
     private SecureSetting mColorInversionSetting;
     private boolean mPendingRotationChange;
     private Handler mHandler;
@@ -146,12 +139,10 @@
 
     @Inject
     public ScreenDecorations(Context context,
-            Lazy<StatusBar> statusBarLazy,
             @Main Handler handler,
             BroadcastDispatcher broadcastDispatcher,
             TunerService tunerService) {
         super(context);
-        mStatusBarLazy = statusBarLazy;
         mMainHandler = handler;
         mBroadcastDispatcher = broadcastDispatcher;
         mTunerService = tunerService;
@@ -161,7 +152,6 @@
     public void start() {
         mHandler = startHandlerThread();
         mHandler.post(this::startOnScreenDecorationsThread);
-        setupStatusBarPaddingIfNeeded();
     }
 
     @VisibleForTesting
@@ -172,12 +162,11 @@
     }
 
     private void startOnScreenDecorationsThread() {
-        mRotation = RotationUtils.getExactRotation(mContext);
+        mRotation = mContext.getDisplay().getRotation();
         mWindowManager = mContext.getSystemService(WindowManager.class);
+        mDisplayManager = mContext.getSystemService(DisplayManager.class);
         updateRoundedCornerRadii();
-        if (hasRoundedCorners() || shouldDrawCutout()) {
-            setupDecorations();
-        }
+        setupDecorations();
 
         mDisplayListener = new DisplayManager.DisplayListener() {
             @Override
@@ -192,8 +181,8 @@
 
             @Override
             public void onDisplayChanged(int displayId) {
-                final int newRotation = RotationUtils.getExactRotation(mContext);
-                if (mOverlay != null && mBottomOverlay != null && mRotation != newRotation) {
+                final int newRotation = mContext.getDisplay().getRotation();
+                if (mOverlays != null && mRotation != newRotation) {
                     // We cannot immediately update the orientation. Otherwise
                     // WindowManager is still deferring layout until it has finished dispatching
                     // the config changes, which may cause divergence between what we draw
@@ -207,88 +196,246 @@
                                 + mRotation);
                     }
 
-                    mOverlay.getViewTreeObserver().addOnPreDrawListener(
-                            new RestartingPreDrawListener(mOverlay, newRotation));
-                    mBottomOverlay.getViewTreeObserver().addOnPreDrawListener(
-                            new RestartingPreDrawListener(mBottomOverlay, newRotation));
+                    for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) {
+                        if (mOverlays[i] != null) {
+                            mOverlays[i].getViewTreeObserver().addOnPreDrawListener(
+                                    new RestartingPreDrawListener(mOverlays[i], i, newRotation));
+                        }
+                    }
                 }
                 updateOrientation();
             }
         };
 
-        mDisplayManager = (DisplayManager) mContext.getSystemService(
-                Context.DISPLAY_SERVICE);
         mDisplayManager.registerDisplayListener(mDisplayListener, mHandler);
         updateOrientation();
     }
 
     private void setupDecorations() {
-        mOverlay = LayoutInflater.from(mContext)
-                .inflate(R.layout.rounded_corners, null);
-        mCutoutTop = new DisplayCutoutView(mContext, true,
-                this::updateWindowVisibilities, this);
-        ((ViewGroup) mOverlay).addView(mCutoutTop);
-        mBottomOverlay = LayoutInflater.from(mContext)
-                .inflate(R.layout.rounded_corners, null);
-        mCutoutBottom = new DisplayCutoutView(mContext, false,
-                this::updateWindowVisibilities, this);
-        ((ViewGroup) mBottomOverlay).addView(mCutoutBottom);
-
-        mOverlay.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
-        mOverlay.setAlpha(0);
-        mOverlay.setForceDarkAllowed(false);
-
-        mBottomOverlay.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
-        mBottomOverlay.setAlpha(0);
-        mBottomOverlay.setForceDarkAllowed(false);
-
-        updateViews();
-
-        mWindowManager.addView(mOverlay, getWindowLayoutParams());
-        mWindowManager.addView(mBottomOverlay, getBottomLayoutParams());
-
-        DisplayMetrics metrics = new DisplayMetrics();
-        mWindowManager.getDefaultDisplay().getMetrics(metrics);
-        mDensity = metrics.density;
-
-        mMainHandler.post(() -> mTunerService.addTunable(this, SIZE));
-
-        // Watch color inversion and invert the overlay as needed.
-        mColorInversionSetting = new SecureSetting(mContext, mHandler,
-                Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED) {
-            @Override
-            protected void handleValueChanged(int value, boolean observedChange) {
-                updateColorInversion(value);
+        if (hasRoundedCorners() || shouldDrawCutout()) {
+            final DisplayCutout cutout = getCutout();
+            final Rect[] bounds = cutout == null ? null : cutout.getBoundingRectsAll();
+            int rotatedPos;
+            for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) {
+                rotatedPos = getBoundPositionFromRotation(i, mRotation);
+                if ((bounds != null && !bounds[rotatedPos].isEmpty())
+                        || shouldShowRoundedCorner(i)) {
+                    createOverlay(i);
+                } else {
+                    removeOverlay(i);
+                }
             }
-        };
-        mColorInversionSetting.setListening(true);
-        mColorInversionSetting.onChange(false);
+        } else {
+            removeAllOverlays();
+        }
 
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(Intent.ACTION_USER_SWITCHED);
-        mBroadcastDispatcher.registerReceiverWithHandler(mIntentReceiver, filter, mHandler);
+        if (hasOverlays() && !mIsRegistered) {
+            DisplayMetrics metrics = new DisplayMetrics();
+            mDisplayManager.getDisplay(DEFAULT_DISPLAY).getMetrics(metrics);
+            mDensity = metrics.density;
 
-        mOverlay.addOnLayoutChangeListener(new OnLayoutChangeListener() {
+            mMainHandler.post(() -> mTunerService.addTunable(this, SIZE));
+
+            // Watch color inversion and invert the overlay as needed.
+            if (mColorInversionSetting == null) {
+                mColorInversionSetting = new SecureSetting(mContext, mHandler,
+                        Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED) {
+                    @Override
+                    protected void handleValueChanged(int value, boolean observedChange) {
+                        updateColorInversion(value);
+                    }
+                };
+            }
+            mColorInversionSetting.setListening(true);
+            mColorInversionSetting.onChange(false);
+
+            IntentFilter filter = new IntentFilter();
+            filter.addAction(Intent.ACTION_USER_SWITCHED);
+            mBroadcastDispatcher.registerReceiverWithHandler(mIntentReceiver, filter, mHandler);
+            mIsRegistered = true;
+        } else {
+            mMainHandler.post(() -> mTunerService.removeTunable(this));
+
+            if (mColorInversionSetting != null) {
+                mColorInversionSetting.setListening(false);
+            }
+
+            mBroadcastDispatcher.unregisterReceiver(mIntentReceiver);
+            mIsRegistered = false;
+        }
+    }
+
+    @VisibleForTesting
+    DisplayCutout getCutout() {
+        return mContext.getDisplay().getCutout();
+    }
+
+    private boolean hasOverlays() {
+        if (mOverlays == null) {
+            return false;
+        }
+
+        for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) {
+            if (mOverlays[i] != null) {
+                return true;
+            }
+        }
+        mOverlays = null;
+        return false;
+    }
+
+    private void removeAllOverlays() {
+        if (mOverlays == null) {
+            return;
+        }
+
+        for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) {
+            if (mOverlays[i] != null) {
+                removeOverlay(i);
+            }
+        }
+        mOverlays = null;
+    }
+
+    private void removeOverlay(@BoundsPosition int pos) {
+        if (mOverlays == null || mOverlays[pos] == null) {
+            return;
+        }
+        mWindowManager.removeViewImmediate(mOverlays[pos]);
+        mOverlays[pos] = null;
+    }
+
+    private void createOverlay(@BoundsPosition int pos) {
+        if (mOverlays == null) {
+            mOverlays = new View[BOUNDS_POSITION_LENGTH];
+        }
+
+        if (mCutoutViews == null) {
+            mCutoutViews = new DisplayCutoutView[BOUNDS_POSITION_LENGTH];
+        }
+
+        if (mOverlays[pos] != null) {
+            return;
+        }
+        mOverlays[pos] = LayoutInflater.from(mContext)
+                .inflate(R.layout.rounded_corners, null);
+
+        mCutoutViews[pos] = new DisplayCutoutView(mContext, pos, this);
+        ((ViewGroup) mOverlays[pos]).addView(mCutoutViews[pos]);
+
+        mOverlays[pos].setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+        mOverlays[pos].setAlpha(0);
+        mOverlays[pos].setForceDarkAllowed(false);
+
+        updateView(pos);
+
+        mWindowManager.addView(mOverlays[pos], getWindowLayoutParams(pos));
+
+        mOverlays[pos].addOnLayoutChangeListener(new OnLayoutChangeListener() {
             @Override
             public void onLayoutChange(View v, int left, int top, int right, int bottom,
-                    int oldLeft,
-                    int oldTop, int oldRight, int oldBottom) {
-                mOverlay.removeOnLayoutChangeListener(this);
-                mOverlay.animate()
-                        .alpha(1)
-                        .setDuration(1000)
-                        .start();
-                mBottomOverlay.animate()
+                    int oldLeft, int oldTop, int oldRight, int oldBottom) {
+                mOverlays[pos].removeOnLayoutChangeListener(this);
+                mOverlays[pos].animate()
                         .alpha(1)
                         .setDuration(1000)
                         .start();
             }
         });
 
-        mOverlay.getViewTreeObserver().addOnPreDrawListener(
-                new ValidatingPreDrawListener(mOverlay));
-        mBottomOverlay.getViewTreeObserver().addOnPreDrawListener(
-                new ValidatingPreDrawListener(mBottomOverlay));
+        mOverlays[pos].getViewTreeObserver().addOnPreDrawListener(
+                new ValidatingPreDrawListener(mOverlays[pos]));
+    }
+
+    private void updateView(@BoundsPosition int pos) {
+        if (mOverlays == null || mOverlays[pos] == null) {
+            return;
+        }
+
+        // update rounded corner view rotation
+        updateRoundedCornerView(pos, R.id.left);
+        updateRoundedCornerView(pos, R.id.right);
+
+        // update cutout view rotation
+        if (mCutoutViews != null && mCutoutViews[pos] != null) {
+            mCutoutViews[pos].setRotation(mRotation);
+        }
+    }
+
+    @VisibleForTesting
+    WindowManager.LayoutParams getWindowLayoutParams(@BoundsPosition int pos) {
+        final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
+                getWidthLayoutParamByPos(pos),
+                getHeightLayoutParamByPos(pos),
+                WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL,
+                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
+                        | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
+                        | WindowManager.LayoutParams.FLAG_SLIPPERY
+                        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
+                PixelFormat.TRANSLUCENT);
+        lp.privateFlags |= WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS
+                | WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
+
+        if (!DEBUG_SCREENSHOT_ROUNDED_CORNERS) {
+            lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY;
+        }
+
+        lp.setTitle(getWindowTitleByPos(pos));
+        lp.gravity = getOverlayWindowGravity(pos);
+        lp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+        lp.setFitInsetsTypes(0 /* types */);
+        lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC;
+        return lp;
+    }
+
+    private int getWidthLayoutParamByPos(@BoundsPosition int pos) {
+        final int rotatedPos = getBoundPositionFromRotation(pos, mRotation);
+        return rotatedPos == BOUNDS_POSITION_TOP || rotatedPos == BOUNDS_POSITION_BOTTOM
+                ? MATCH_PARENT : WRAP_CONTENT;
+    }
+
+    private int getHeightLayoutParamByPos(@BoundsPosition int pos) {
+        final int rotatedPos = getBoundPositionFromRotation(pos, mRotation);
+        return rotatedPos == BOUNDS_POSITION_TOP || rotatedPos == BOUNDS_POSITION_BOTTOM
+                ? WRAP_CONTENT : MATCH_PARENT;
+    }
+
+    private static String getWindowTitleByPos(@BoundsPosition int pos) {
+        switch (pos) {
+            case BOUNDS_POSITION_LEFT:
+                return "ScreenDecorOverlayLeft";
+            case BOUNDS_POSITION_TOP:
+                return "ScreenDecorOverlay";
+            case BOUNDS_POSITION_RIGHT:
+                return "ScreenDecorOverlayRight";
+            case BOUNDS_POSITION_BOTTOM:
+                return "ScreenDecorOverlayBottom";
+            default:
+                throw new IllegalArgumentException("unknown bound position: " + pos);
+        }
+    }
+
+    private int getOverlayWindowGravity(@BoundsPosition int pos) {
+        final int rotated = getBoundPositionFromRotation(pos, mRotation);
+        switch (rotated) {
+            case BOUNDS_POSITION_TOP:
+                return Gravity.TOP;
+            case BOUNDS_POSITION_BOTTOM:
+                return Gravity.BOTTOM;
+            case BOUNDS_POSITION_LEFT:
+                return Gravity.LEFT;
+            case BOUNDS_POSITION_RIGHT:
+                return Gravity.RIGHT;
+            default:
+                throw new IllegalArgumentException("unknown bound position: " + pos);
+        }
+    }
+
+    private static int getBoundPositionFromRotation(@BoundsPosition int pos, int rotation) {
+        return (pos - rotation) < 0
+                ? pos - rotation + DisplayCutout.BOUNDS_POSITION_LENGTH
+                : pos - rotation;
     }
 
     private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@@ -308,12 +455,25 @@
     private void updateColorInversion(int colorsInvertedValue) {
         int tint = colorsInvertedValue != 0 ? Color.WHITE : Color.BLACK;
         ColorStateList tintList = ColorStateList.valueOf(tint);
-        ((ImageView) mOverlay.findViewById(R.id.left)).setImageTintList(tintList);
-        ((ImageView) mOverlay.findViewById(R.id.right)).setImageTintList(tintList);
-        ((ImageView) mBottomOverlay.findViewById(R.id.left)).setImageTintList(tintList);
-        ((ImageView) mBottomOverlay.findViewById(R.id.right)).setImageTintList(tintList);
-        mCutoutTop.setColor(tint);
-        mCutoutBottom.setColor(tint);
+
+        if (mOverlays == null) {
+            return;
+        }
+        for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) {
+            if (mOverlays[i] == null) {
+                continue;
+            }
+            final int size = ((ViewGroup) mOverlays[i]).getChildCount();
+            View child;
+            for (int j = 0; j < size; j++) {
+                child = ((ViewGroup) mOverlays[i]).getChildAt(j);
+                if (child instanceof ImageView) {
+                    ((ImageView) child).setImageTintList(tintList);
+                } else if (child instanceof DisplayCutoutView) {
+                    ((DisplayCutoutView) child).setColor(tint);
+                }
+            }
+        }
     }
 
     @Override
@@ -324,10 +484,8 @@
             updateOrientation();
             updateRoundedCornerRadii();
             if (DEBUG) Log.i(TAG, "onConfigChanged from rot " + oldRotation + " to " + mRotation);
-            if (shouldDrawCutout() && mOverlay == null) {
-                setupDecorations();
-            }
-            if (mOverlay != null) {
+            setupDecorations();
+            if (mOverlays != null) {
                 // Updating the layout params ensures that ViewRootImpl will call relayoutWindow(),
                 // which ensures that the forced seamless rotation will end, even if we updated
                 // the rotation before window manager was ready (and was still waiting for sending
@@ -344,13 +502,18 @@
         if (mPendingRotationChange) {
             return;
         }
-        int newRotation = RotationUtils.getExactRotation(mContext);
+        int newRotation = mContext.getDisplay().getRotation();
         if (newRotation != mRotation) {
             mRotation = newRotation;
 
-            if (mOverlay != null) {
+            if (mOverlays != null) {
                 updateLayoutParams();
-                updateViews();
+                for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) {
+                    if (mOverlays[i] == null) {
+                        continue;
+                    }
+                    updateView(i);
+                }
             }
         }
     }
@@ -375,62 +538,75 @@
         }
     }
 
-    private void updateViews() {
-        View topLeft = mOverlay.findViewById(R.id.left);
-        View topRight = mOverlay.findViewById(R.id.right);
-        View bottomLeft = mBottomOverlay.findViewById(R.id.left);
-        View bottomRight = mBottomOverlay.findViewById(R.id.right);
-
-        if (mRotation == RotationUtils.ROTATION_NONE) {
-            updateView(topLeft, Gravity.TOP | Gravity.LEFT, 0);
-            updateView(topRight, Gravity.TOP | Gravity.RIGHT, 90);
-            updateView(bottomLeft, Gravity.BOTTOM | Gravity.LEFT, 270);
-            updateView(bottomRight, Gravity.BOTTOM | Gravity.RIGHT, 180);
-        } else if (mRotation == RotationUtils.ROTATION_LANDSCAPE) {
-            updateView(topLeft, Gravity.TOP | Gravity.LEFT, 0);
-            updateView(topRight, Gravity.BOTTOM | Gravity.LEFT, 270);
-            updateView(bottomLeft, Gravity.TOP | Gravity.RIGHT, 90);
-            updateView(bottomRight, Gravity.BOTTOM | Gravity.RIGHT, 180);
-        } else if (mRotation == RotationUtils.ROTATION_UPSIDE_DOWN) {
-            updateView(topLeft, Gravity.BOTTOM | Gravity.LEFT, 270);
-            updateView(topRight, Gravity.BOTTOM | Gravity.RIGHT, 180);
-            updateView(bottomLeft, Gravity.TOP | Gravity.LEFT, 0);
-            updateView(bottomRight, Gravity.TOP | Gravity.RIGHT, 90);
-        } else if (mRotation == RotationUtils.ROTATION_SEASCAPE) {
-            updateView(topLeft, Gravity.BOTTOM | Gravity.RIGHT, 180);
-            updateView(topRight, Gravity.TOP | Gravity.RIGHT, 90);
-            updateView(bottomLeft, Gravity.BOTTOM | Gravity.LEFT, 270);
-            updateView(bottomRight, Gravity.TOP | Gravity.LEFT, 0);
+    private void updateRoundedCornerView(@BoundsPosition int pos, int id) {
+        final View rounded = mOverlays[pos].findViewById(id);
+        if (rounded == null) {
+            return;
         }
-
-        mCutoutTop.setRotation(mRotation);
-        mCutoutBottom.setRotation(mRotation);
-
-        updateWindowVisibilities();
+        rounded.setVisibility(View.GONE);
+        if (shouldShowRoundedCorner(pos)) {
+            final int gravity = getRoundedCornerGravity(pos, id == R.id.left);
+            ((FrameLayout.LayoutParams) rounded.getLayoutParams()).gravity = gravity;
+            rounded.setRotation(getRoundedCornerRotation(gravity));
+            rounded.setVisibility(View.VISIBLE);
+        }
     }
 
-    private void updateView(View v, int gravity, int rotation) {
-        ((FrameLayout.LayoutParams) v.getLayoutParams()).gravity = gravity;
-        v.setRotation(rotation);
+    private int getRoundedCornerGravity(@BoundsPosition int pos, boolean isStart) {
+        final int rotatedPos = getBoundPositionFromRotation(pos, mRotation);
+        switch (rotatedPos) {
+            case BOUNDS_POSITION_LEFT:
+                return isStart ? Gravity.TOP | Gravity.LEFT : Gravity.BOTTOM | Gravity.LEFT;
+            case BOUNDS_POSITION_TOP:
+                return isStart ? Gravity.TOP | Gravity.LEFT : Gravity.TOP | Gravity.RIGHT;
+            case BOUNDS_POSITION_RIGHT:
+                return isStart ? Gravity.TOP | Gravity.RIGHT : Gravity.BOTTOM | Gravity.RIGHT;
+            case BOUNDS_POSITION_BOTTOM:
+                return isStart ? Gravity.BOTTOM | Gravity.LEFT : Gravity.BOTTOM | Gravity.RIGHT;
+            default:
+                throw new IllegalArgumentException("Incorrect position: " + rotatedPos);
+        }
     }
 
-    private void updateWindowVisibilities() {
-        updateWindowVisibility(mOverlay);
-        updateWindowVisibility(mBottomOverlay);
-    }
-
-    private void updateWindowVisibility(View overlay) {
-        boolean visibleForCutout = shouldDrawCutout()
-                && overlay.findViewById(R.id.display_cutout).getVisibility() == View.VISIBLE;
-        boolean visibleForRoundedCorners = hasRoundedCorners();
-        overlay.setVisibility(visibleForCutout || visibleForRoundedCorners
-                ? View.VISIBLE : View.GONE);
+    private int getRoundedCornerRotation(int gravity) {
+        switch (gravity) {
+            case Gravity.TOP | Gravity.LEFT:
+                return 0;
+            case Gravity.TOP | Gravity.RIGHT:
+                return 90;
+            case Gravity.BOTTOM | Gravity.LEFT:
+                return 270;
+            case Gravity.BOTTOM | Gravity.RIGHT:
+                return 180;
+            default:
+                throw new IllegalArgumentException("Unsupported gravity: " + gravity);
+        }
     }
 
     private boolean hasRoundedCorners() {
         return mRoundedDefault > 0 || mRoundedDefaultBottom > 0 || mRoundedDefaultTop > 0;
     }
 
+    private boolean shouldShowRoundedCorner(@BoundsPosition int pos) {
+        if (!hasRoundedCorners()) {
+            return false;
+        }
+
+        DisplayCutout cutout = getCutout();
+        // for cutout is null or cutout with only waterfall.
+        final boolean emptyBoundsOrWaterfall = cutout == null || cutout.isBoundsEmpty();
+        // Shows rounded corner on left and right overlays only when there is no top or bottom
+        // cutout.
+        final int rotatedTop = getBoundPositionFromRotation(BOUNDS_POSITION_TOP, mRotation);
+        final int rotatedBottom = getBoundPositionFromRotation(BOUNDS_POSITION_BOTTOM, mRotation);
+        if (emptyBoundsOrWaterfall || !cutout.getBoundingRectsAll()[rotatedTop].isEmpty()
+                || !cutout.getBoundingRectsAll()[rotatedBottom].isEmpty()) {
+            return pos == BOUNDS_POSITION_TOP || pos == BOUNDS_POSITION_BOTTOM;
+        } else {
+            return pos == BOUNDS_POSITION_LEFT || pos == BOUNDS_POSITION_RIGHT;
+        }
+    }
+
     private boolean shouldDrawCutout() {
         return shouldDrawCutout(mContext);
     }
@@ -440,99 +616,22 @@
                 com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout);
     }
 
-
-    private void setupStatusBarPaddingIfNeeded() {
-        // TODO: This should be moved to a more appropriate place, as it is not related to the
-        // screen decorations overlay.
-        int padding = mContext.getResources().getDimensionPixelSize(
-                R.dimen.rounded_corner_content_padding);
-        if (padding != 0) {
-            setupStatusBarPadding(padding);
-        }
-
-    }
-
-    private void setupStatusBarPadding(int padding) {
-        // Add some padding to all the content near the edge of the screen.
-        StatusBar statusBar = mStatusBarLazy.get();
-        final View notificationShadeWindowView = statusBar.getNotificationShadeWindowView();
-        if (notificationShadeWindowView != null) {
-            TunablePadding.addTunablePadding(
-                    notificationShadeWindowView.findViewById(R.id.keyguard_header),
-                    PADDING, padding, FLAG_END);
-
-            final FragmentHostManager fragmentHostManager =
-                    FragmentHostManager.get(notificationShadeWindowView);
-            fragmentHostManager.addTagListener(QS.TAG,
-                    new TunablePaddingTagListener(padding, R.id.header));
-        }
-
-        final View statusBarWindow = statusBar.getStatusBarWindow();
-        if (statusBarWindow != null) {
-            final FragmentHostManager fragmentHostManager =
-                    FragmentHostManager.get(statusBarWindow);
-            fragmentHostManager.addTagListener(CollapsedStatusBarFragment.TAG,
-                    new TunablePaddingTagListener(padding, R.id.status_bar));
-        }
-    }
-
-    @VisibleForTesting
-    WindowManager.LayoutParams getWindowLayoutParams() {
-        final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
-                ViewGroup.LayoutParams.MATCH_PARENT,
-                LayoutParams.WRAP_CONTENT,
-                WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL,
-                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
-                        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
-                        | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
-                        | WindowManager.LayoutParams.FLAG_SLIPPERY
-                        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
-                PixelFormat.TRANSLUCENT);
-        lp.privateFlags |= WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS
-                | WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
-
-        if (!DEBUG_SCREENSHOT_ROUNDED_CORNERS) {
-            lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY;
-        }
-
-        lp.setTitle("ScreenDecorOverlay");
-        if (mRotation == RotationUtils.ROTATION_SEASCAPE
-                || mRotation == RotationUtils.ROTATION_UPSIDE_DOWN) {
-            lp.gravity = Gravity.BOTTOM | Gravity.RIGHT;
-        } else {
-            lp.gravity = Gravity.TOP | Gravity.LEFT;
-        }
-        lp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
-        lp.setFitInsetsTypes(0 /* types */);
-        if (isLandscape(mRotation)) {
-            lp.width = WRAP_CONTENT;
-            lp.height = MATCH_PARENT;
-        }
-        lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC;
-        return lp;
-    }
-
-    private WindowManager.LayoutParams getBottomLayoutParams() {
-        WindowManager.LayoutParams lp = getWindowLayoutParams();
-        lp.setTitle("ScreenDecorOverlayBottom");
-        if (mRotation == RotationUtils.ROTATION_SEASCAPE
-                || mRotation == RotationUtils.ROTATION_UPSIDE_DOWN) {
-            lp.gravity = Gravity.TOP | Gravity.LEFT;
-        } else {
-            lp.gravity = Gravity.BOTTOM | Gravity.RIGHT;
-        }
-        return lp;
-    }
-
     private void updateLayoutParams() {
-        mWindowManager.updateViewLayout(mOverlay, getWindowLayoutParams());
-        mWindowManager.updateViewLayout(mBottomOverlay, getBottomLayoutParams());
+        if (mOverlays == null) {
+            return;
+        }
+        for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) {
+            if (mOverlays[i] == null) {
+                continue;
+            }
+            mWindowManager.updateViewLayout(mOverlays[i], getWindowLayoutParams(i));
+        }
     }
 
     @Override
     public void onTuningChanged(String key, String newValue) {
         mHandler.post(() -> {
-            if (mOverlay == null) return;
+            if (mOverlays == null) return;
             if (SIZE.equals(key)) {
                 int size = mRoundedDefault;
                 int sizeTop = mRoundedDefaultTop;
@@ -551,10 +650,13 @@
                     sizeBottom = size;
                 }
 
-                setSize(mOverlay.findViewById(R.id.left), sizeTop);
-                setSize(mOverlay.findViewById(R.id.right), sizeTop);
-                setSize(mBottomOverlay.findViewById(R.id.left), sizeBottom);
-                setSize(mBottomOverlay.findViewById(R.id.right), sizeBottom);
+                for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) {
+                    if (mOverlays[i] == null) {
+                        continue;
+                    }
+                    setSize(mOverlays[i].findViewById(R.id.left), sizeTop);
+                    setSize(mOverlays[i].findViewById(R.id.right), sizeBottom);
+                }
             }
         });
     }
@@ -566,32 +668,6 @@
         view.setLayoutParams(params);
     }
 
-    @VisibleForTesting
-    static class TunablePaddingTagListener implements FragmentListener {
-
-        private final int mPadding;
-        private final int mId;
-        private TunablePadding mTunablePadding;
-
-        public TunablePaddingTagListener(int padding, int id) {
-            mPadding = padding;
-            mId = id;
-        }
-
-        @Override
-        public void onFragmentViewCreated(String tag, Fragment fragment) {
-            if (mTunablePadding != null) {
-                mTunablePadding.destroy();
-            }
-            View view = fragment.getView();
-            if (mId != 0) {
-                view = view.findViewById(mId);
-            }
-            mTunablePadding = TunablePadding.addTunablePadding(view, PADDING, mPadding,
-                    FLAG_START | FLAG_END);
-        }
-    }
-
     public static class DisplayCutoutView extends View implements DisplayManager.DisplayListener,
             RegionInterceptableView {
 
@@ -601,24 +677,21 @@
         private final Rect mBoundingRect = new Rect();
         private final Path mBoundingPath = new Path();
         private final int[] mLocation = new int[2];
-        private final boolean mInitialStart;
-        private final Runnable mVisibilityChangedListener;
         private final ScreenDecorations mDecorations;
         private int mColor = Color.BLACK;
-        private boolean mStart;
         private int mRotation;
+        private int mInitialPosition;
+        private int mPosition;
 
-        public DisplayCutoutView(Context context, boolean start,
-                Runnable visibilityChangedListener, ScreenDecorations decorations) {
+        public DisplayCutoutView(Context context, @BoundsPosition int pos,
+                ScreenDecorations decorations) {
             super(context);
-            mInitialStart = start;
-            mVisibilityChangedListener = visibilityChangedListener;
+            mInitialPosition = pos;
             mDecorations = decorations;
             setId(R.id.display_cutout);
             if (DEBUG) {
                 getViewTreeObserver().addOnDrawListener(() -> Log.i(TAG,
-                        (mInitialStart ? "OverlayTop" : "OverlayBottom")
-                                + " drawn in rot " + mRotation));
+                        getWindowTitleByPos(pos) + " drawn in rot " + mRotation));
             }
         }
 
@@ -674,17 +747,11 @@
             update();
         }
 
-        private boolean isStart() {
-            final boolean flipped = (mRotation == RotationUtils.ROTATION_SEASCAPE
-                    || mRotation == RotationUtils.ROTATION_UPSIDE_DOWN);
-            return flipped ? !mInitialStart : mInitialStart;
-        }
-
         private void update() {
             if (!isAttachedToWindow() || mDecorations.mPendingRotationChange) {
                 return;
             }
-            mStart = isStart();
+            mPosition = getBoundPositionFromRotation(mInitialPosition, mRotation);
             requestLayout();
             getDisplay().getDisplayInfo(mInfo);
             mBounds.clear();
@@ -703,7 +770,6 @@
             }
             if (newVisible != getVisibility()) {
                 setVisibility(newVisible);
-                mVisibilityChangedListener.run();
             }
         }
 
@@ -762,13 +828,17 @@
             if (displayCutout == null) {
                 return false;
             }
-            if (mStart) {
-                return displayCutout.getSafeInsetLeft() > 0
-                        || displayCutout.getSafeInsetTop() > 0;
-            } else {
-                return displayCutout.getSafeInsetRight() > 0
-                        || displayCutout.getSafeInsetBottom() > 0;
+
+            if (mPosition == BOUNDS_POSITION_LEFT) {
+                return !displayCutout.getBoundingRectLeft().isEmpty();
+            } else if (mPosition == BOUNDS_POSITION_TOP) {
+                return !displayCutout.getBoundingRectTop().isEmpty();
+            } else if (mPosition == BOUNDS_POSITION_BOTTOM) {
+                return !displayCutout.getBoundingRectBottom().isEmpty();
+            } else if (mPosition == BOUNDS_POSITION_RIGHT) {
+                return !displayCutout.getBoundingRectRight().isEmpty();
             }
+            return false;
         }
 
         @Override
@@ -808,18 +878,22 @@
         }
 
         private int getGravity(DisplayCutout displayCutout) {
-            if (mStart) {
-                if (displayCutout.getSafeInsetLeft() > 0) {
+            if (mPosition == BOUNDS_POSITION_LEFT) {
+                if (!displayCutout.getBoundingRectLeft().isEmpty()) {
                     return Gravity.LEFT;
-                } else if (displayCutout.getSafeInsetTop() > 0) {
+                }
+            } else if (mPosition == BOUNDS_POSITION_TOP) {
+                if (!displayCutout.getBoundingRectTop().isEmpty()) {
                     return Gravity.TOP;
                 }
-            } else {
-                if (displayCutout.getSafeInsetRight() > 0) {
-                    return Gravity.RIGHT;
-                } else if (displayCutout.getSafeInsetBottom() > 0) {
+            } else if (mPosition == BOUNDS_POSITION_BOTTOM) {
+                if (!displayCutout.getBoundingRectBottom().isEmpty()) {
                     return Gravity.BOTTOM;
                 }
+            } else if (mPosition == BOUNDS_POSITION_RIGHT) {
+                if (!displayCutout.getBoundingRectRight().isEmpty()) {
+                    return Gravity.RIGHT;
+                }
             }
             return Gravity.NO_GRAVITY;
         }
@@ -851,11 +925,6 @@
         }
     }
 
-    private boolean isLandscape(int rotation) {
-        return rotation == RotationUtils.ROTATION_LANDSCAPE || rotation ==
-                RotationUtils.ROTATION_SEASCAPE;
-    }
-
     /**
      * A pre-draw listener, that cancels the draw and restarts the traversal with the updated
      * window attributes.
@@ -864,10 +933,13 @@
 
         private final View mView;
         private final int mTargetRotation;
+        private final int mPosition;
 
-        private RestartingPreDrawListener(View view, int targetRotation) {
+        private RestartingPreDrawListener(View view, @BoundsPosition int position,
+                int targetRotation) {
             mView = view;
             mTargetRotation = targetRotation;
+            mPosition = position;
         }
 
         @Override
@@ -876,8 +948,7 @@
 
             if (mTargetRotation == mRotation) {
                 if (DEBUG) {
-                    Log.i(TAG, (mView == mOverlay ? "OverlayTop" : "OverlayBottom")
-                            + " already in target rot "
+                    Log.i(TAG, getWindowTitleByPos(mPosition) + " already in target rot "
                             + mTargetRotation + ", allow draw without restarting it");
                 }
                 return true;
@@ -888,7 +959,7 @@
             // take effect.
             updateOrientation();
             if (DEBUG) {
-                Log.i(TAG, (mView == mOverlay ? "OverlayTop" : "OverlayBottom")
+                Log.i(TAG, getWindowTitleByPos(mPosition)
                         + " restarting listener fired, restarting draw for rot " + mRotation);
             }
             mView.invalidate();
@@ -913,7 +984,7 @@
 
         @Override
         public boolean onPreDraw() {
-            final int displayRotation = RotationUtils.getExactRotation(mContext);
+            final int displayRotation = mContext.getDisplay().getRotation();
             if (displayRotation != mRotation && !mPendingRotationChange) {
                 if (DEBUG) {
                     Log.i(TAG, "Drawing rot " + mRotation + ", but display is at rot "
diff --git a/packages/SystemUI/src/com/android/systemui/SysUIToast.java b/packages/SystemUI/src/com/android/systemui/SysUIToast.java
index 0f7f1be..023b74b 100644
--- a/packages/SystemUI/src/com/android/systemui/SysUIToast.java
+++ b/packages/SystemUI/src/com/android/systemui/SysUIToast.java
@@ -19,7 +19,6 @@
 
 import android.annotation.StringRes;
 import android.content.Context;
-import android.view.WindowManager;
 import android.widget.Toast;
 
 public class SysUIToast {
@@ -29,10 +28,7 @@
     }
 
     public static Toast makeText(Context context, CharSequence text, @Duration int duration) {
-        Toast toast = Toast.makeText(context, text, duration);
-        toast.getWindowParams().privateFlags |=
-                WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;
-        return toast;
+        return Toast.makeText(context, text, duration);
     }
 
 }
diff --git a/packages/SystemUI/src/com/android/systemui/TransactionPool.java b/packages/SystemUI/src/com/android/systemui/TransactionPool.java
new file mode 100644
index 0000000..801cf8a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/TransactionPool.java
@@ -0,0 +1,55 @@
+/*
+ * 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;
+
+import android.util.Pools;
+import android.view.SurfaceControl;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+/**
+ * Provides a synchronized pool of {@link SurfaceControl.Transaction}s to minimize allocations.
+ */
+@Singleton
+public class TransactionPool {
+    private final Pools.SynchronizedPool<SurfaceControl.Transaction> mTransactionPool =
+            new Pools.SynchronizedPool<>(4);
+
+    @Inject
+    TransactionPool() {
+    }
+
+    /** Gets a transaction from the pool. */
+    public SurfaceControl.Transaction acquire() {
+        SurfaceControl.Transaction t = mTransactionPool.acquire();
+        if (t == null) {
+            return new SurfaceControl.Transaction();
+        }
+        return t;
+    }
+
+    /**
+     * Return a transaction to the pool. DO NOT call {@link SurfaceControl.Transaction#close()} if
+     * returning to pool.
+     */
+    public void release(SurfaceControl.Transaction t) {
+        if (!mTransactionPool.release(t)) {
+            t.close();
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MirrorWindowControl.java b/packages/SystemUI/src/com/android/systemui/accessibility/MirrorWindowControl.java
new file mode 100644
index 0000000..e76a209
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/MirrorWindowControl.java
@@ -0,0 +1,197 @@
+/*
+ * 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.accessibility;
+
+import static android.view.WindowManager.LayoutParams;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.graphics.PixelFormat;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.os.IBinder;
+import android.util.Log;
+import android.util.MathUtils;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.WindowManager;
+
+import com.android.systemui.R;
+
+/**
+ * Contains a movable control UI to manipulate mirrored window's position, size and scale. The
+ * window type of the UI is {@link LayoutParams#TYPE_APPLICATION_SUB_PANEL} and the window type
+ * of the window token should be {@link LayoutParams#TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY} to
+ * ensure it is above all windows and won't be mirrored. It is not movable to the navigation bar.
+ */
+public abstract class MirrorWindowControl {
+    private static final String TAG = "MirrorWindowControl";
+    private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG) | false;
+
+    /**
+     * A delegate handling a mirrored window's offset.
+     */
+    public interface MirrorWindowDelegate {
+        /**
+         * Moves the window with specified offset.
+         *
+         * @param xOffset the amount in pixels to offset the window in the X coordinate, in current
+         *                display pixels.
+         * @param yOffset the amount in pixels to offset the window in the Y coordinate, in current
+         *                display pixels.
+         */
+        void move(int xOffset, int yOffset);
+    }
+
+    protected final Context mContext;
+    private final Rect mDraggableBound = new Rect();
+    final Point mTmpPoint = new Point();
+
+    @Nullable
+    protected MirrorWindowDelegate mMirrorWindowDelegate;
+    protected View mControlsView;
+    /**
+     * The left top position of the control UI. Initialized when the control UI is visible.
+     *
+     * @see #setDefaultPosition(LayoutParams)
+     */
+    private final Point mControlPosition = new Point();
+    private final WindowManager mWindowManager;
+
+    MirrorWindowControl(Context context) {
+        mContext = context;
+        mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
+    }
+
+    public void setWindowDelegate(@Nullable MirrorWindowDelegate windowDelegate) {
+        mMirrorWindowDelegate = windowDelegate;
+    }
+
+    /**
+     * Shows the control UI.
+     *
+     * @param binder the window token of the
+     * {@link LayoutParams#TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY}  window.
+     */
+    public final void showControl(IBinder binder) {
+        if (mControlsView != null) {
+            Log.w(TAG, "control view is visible");
+            return;
+        }
+        final Point  viewSize = mTmpPoint;
+        mControlsView = onCreateView(LayoutInflater.from(mContext), viewSize);
+
+        final LayoutParams lp = new LayoutParams();
+        final int defaultSize = mContext.getResources().getDimensionPixelSize(
+                R.dimen.magnification_controls_size);
+        lp.width = viewSize.x <= 0 ? defaultSize : viewSize.x;
+        lp.height = viewSize.y <= 0 ? defaultSize : viewSize.y;
+        lp.token = binder;
+        setDefaultParams(lp);
+        setDefaultPosition(lp);
+        mWindowManager.addView(mControlsView, lp);
+        updateDraggableBound(lp.width, lp.height);
+    }
+
+    private void setDefaultParams(LayoutParams lp) {
+        lp.gravity = Gravity.TOP | Gravity.LEFT;
+        lp.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
+                | LayoutParams.FLAG_NOT_FOCUSABLE;
+        lp.type = LayoutParams.TYPE_APPLICATION_SUB_PANEL;
+        lp.format = PixelFormat.RGBA_8888;
+        lp.setTitle(getWindowTitle());
+    }
+
+    private void setDefaultPosition(LayoutParams layoutParams) {
+        final Point displaySize = mTmpPoint;
+        mContext.getDisplay().getSize(displaySize);
+        layoutParams.x = displaySize.x - layoutParams.width;
+        layoutParams.y = displaySize.y - layoutParams.height;
+        mControlPosition.set(layoutParams.x, layoutParams.y);
+    }
+
+    /**
+     * Removes the UI from the scene.
+     */
+    public final void destroyControl() {
+        if (mControlsView != null) {
+            mWindowManager.removeView(mControlsView);
+            mControlsView = null;
+        }
+    }
+
+    /**
+     * Moves the control view with specified offset.
+     *
+     * @param xOffset the amount in pixels to offset the UI in the X coordinate, in current
+     *                display pixels.
+     * @param yOffset the amount in pixels to offset the UI in the Y coordinate, in current
+     *                display pixels.
+     */
+    public void move(int xOffset, int yOffset) {
+        if (mControlsView == null) {
+            Log.w(TAG, "control view is not available yet or destroyed");
+            return;
+        }
+        final Point nextPosition = mTmpPoint;
+        nextPosition.set(mControlPosition.x, mControlPosition.y);
+        mTmpPoint.offset(xOffset, yOffset);
+        setPosition(mTmpPoint);
+    }
+
+    private void setPosition(Point point) {
+        constrainFrameToDraggableBound(point);
+        if (point.equals(mControlPosition)) {
+            return;
+        }
+        mControlPosition.set(point.x, point.y);
+        LayoutParams lp = (LayoutParams) mControlsView.getLayoutParams();
+        lp.x = mControlPosition.x;
+        lp.y = mControlPosition.y;
+        mWindowManager.updateViewLayout(mControlsView, lp);
+    }
+
+    private void constrainFrameToDraggableBound(Point point) {
+        point.x = MathUtils.constrain(point.x, mDraggableBound.left, mDraggableBound.right);
+        point.y = MathUtils.constrain(point.y, mDraggableBound.top, mDraggableBound.bottom);
+    }
+
+    private void updateDraggableBound(int viewWidth, int viewHeight) {
+        final Point size = mTmpPoint;
+        mContext.getDisplay().getSize(size);
+        mDraggableBound.set(0, 0, size.x - viewWidth, size.y - viewHeight);
+        if (DBG) {
+            Log.d(TAG, "updateDraggableBound :" + mDraggableBound);
+        }
+    }
+
+    abstract String getWindowTitle();
+
+    /**
+     * Called when the UI is going to show.
+     *
+     * @param inflater The LayoutInflater object used to inflate the view.
+     * @param viewSize The {@link Point} to specify view's width with {@link Point#x)} and height
+     *                with {@link Point#y)} .The value should be greater than 0, otherwise will
+     *                 fall back to the default size.
+     * @return the View for the control's UI.
+     */
+    @NonNull
+    abstract View onCreateView(@NonNull LayoutInflater inflater, @NonNull Point viewSize);
+}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/SimpleMirrorWindowControl.java b/packages/SystemUI/src/com/android/systemui/accessibility/SimpleMirrorWindowControl.java
new file mode 100644
index 0000000..2ba2bb6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/SimpleMirrorWindowControl.java
@@ -0,0 +1,221 @@
+/*
+ * 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.accessibility;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Point;
+import android.graphics.PointF;
+import android.os.Handler;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+
+import com.android.systemui.R;
+
+/**
+ * A basic control to move the mirror window.
+ */
+class SimpleMirrorWindowControl extends MirrorWindowControl implements View.OnClickListener,
+        View.OnTouchListener, View.OnLongClickListener {
+
+    private static final String TAG = "SimpleMirrorWindowControl";
+    private static final int MOVE_FRAME_DURATION_MS = 100;
+    private final int mMoveFrameAmountShort;
+    private final int mMoveFrameAmountLong;
+
+    private boolean mIsDragState;
+    private boolean mShouldSetTouchStart;
+
+    @Nullable private MoveWindowTask mMoveWindowTask;
+    private PointF mLastDrag = new PointF();
+    private final Handler mHandler;
+
+    SimpleMirrorWindowControl(Context context, Handler handler) {
+        super(context);
+        mHandler = handler;
+        final Resources resource = context.getResources();
+        mMoveFrameAmountShort = resource.getDimensionPixelSize(
+                R.dimen.magnification_frame_move_short);
+        mMoveFrameAmountLong = resource.getDimensionPixelSize(
+                R.dimen.magnification_frame_move_long);
+    }
+
+    @Override
+    String getWindowTitle() {
+        return mContext.getString(R.string.magnification_controls_title);
+    }
+
+    @Override
+    View onCreateView(LayoutInflater layoutInflater, Point viewSize) {
+        final View view = layoutInflater.inflate(R.layout.magnifier_controllers, null);
+        final View leftControl = view.findViewById(R.id.left_control);
+        final View upControl = view.findViewById(R.id.up_control);
+        final View rightControl = view.findViewById(R.id.right_control);
+        final View bottomControl = view.findViewById(R.id.down_control);
+
+        leftControl.setOnClickListener(this);
+        upControl.setOnClickListener(this);
+        rightControl.setOnClickListener(this);
+        bottomControl.setOnClickListener(this);
+
+        leftControl.setOnLongClickListener(this);
+        upControl.setOnLongClickListener(this);
+        rightControl.setOnLongClickListener(this);
+        bottomControl.setOnLongClickListener(this);
+
+        leftControl.setOnTouchListener(this);
+        upControl.setOnTouchListener(this);
+        rightControl.setOnTouchListener(this);
+        bottomControl.setOnTouchListener(this);
+
+        view.setOnTouchListener(this);
+        view.setOnLongClickListener(this::onViewRootLongClick);
+        return view;
+    }
+
+    private Point findOffset(View v, int moveFrameAmount) {
+        final Point offset = mTmpPoint;
+        offset.set(0, 0);
+        if (v.getId() == R.id.left_control) {
+            mTmpPoint.x = -moveFrameAmount;
+        } else if (v.getId() == R.id.up_control) {
+            mTmpPoint.y = -moveFrameAmount;
+        } else if (v.getId() == R.id.right_control) {
+            mTmpPoint.x = moveFrameAmount;
+        } else if (v.getId() == R.id.down_control) {
+            mTmpPoint.y = moveFrameAmount;
+        } else {
+            Log.w(TAG, "findOffset move is zero ");
+        }
+        return mTmpPoint;
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (mMirrorWindowDelegate != null) {
+            Point offset = findOffset(v, mMoveFrameAmountShort);
+            mMirrorWindowDelegate.move(offset.x, offset.y);
+        }
+    }
+
+    @Override
+    public boolean onTouch(View v, MotionEvent event) {
+        if (handleDragState(event)) {
+            return true;
+        }
+        switch (event.getAction()) {
+            case MotionEvent.ACTION_UP:
+            case MotionEvent.ACTION_CANCEL:
+                if (mMoveWindowTask != null) {
+                    mMoveWindowTask.cancel();
+                    mMoveWindowTask = null;
+                }
+                break;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean onLongClick(View v) {
+        Point offset = findOffset(v, mMoveFrameAmountLong);
+        mMoveWindowTask = new MoveWindowTask(mMirrorWindowDelegate, mHandler, offset.x, offset.y,
+                MOVE_FRAME_DURATION_MS);
+        mMoveWindowTask.schedule();
+        return true;
+    }
+
+    private boolean onViewRootLongClick(View view) {
+        mIsDragState = true;
+        mShouldSetTouchStart = true;
+        return true;
+    }
+
+    private boolean handleDragState(final MotionEvent event) {
+        switch (event.getAction()) {
+            case MotionEvent.ACTION_MOVE:
+                if (mIsDragState) {
+                    if (mShouldSetTouchStart) {
+                        mLastDrag.set(event.getRawX(), event.getRawY());
+                        mShouldSetTouchStart = false;
+                    }
+                    int xDiff = (int) (event.getRawX() - mLastDrag.x);
+                    int yDiff = (int) (event.getRawY() - mLastDrag.y);
+                    move(xDiff, yDiff);
+                    mLastDrag.set(event.getRawX(), event.getRawY());
+                    return true;
+                }
+                return false;
+            case MotionEvent.ACTION_UP:
+            case MotionEvent.ACTION_CANCEL:
+                if (mIsDragState) {
+                    mIsDragState = false;
+                    return true;
+                }
+                return false;
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * A timer task to move the mirror window periodically.
+     */
+    static class MoveWindowTask implements Runnable {
+        private final MirrorWindowDelegate mMirrorWindowDelegate;
+        private final int mXOffset;
+        private final int mYOffset;
+        private final Handler mHandler;
+        /** Time in milliseconds between successive task executions.*/
+        private long mPeriod;
+        private boolean mCancel;
+
+        MoveWindowTask(@NonNull MirrorWindowDelegate windowDelegate, Handler handler, int xOffset,
+                int yOffset, long period) {
+            mMirrorWindowDelegate = windowDelegate;
+            mXOffset = xOffset;
+            mYOffset = yOffset;
+            mHandler = handler;
+            mPeriod = period;
+        }
+
+        @Override
+        public void run() {
+            if (mCancel) {
+                return;
+            }
+            mMirrorWindowDelegate.move(mXOffset, mYOffset);
+            schedule();
+        }
+
+        /**
+         * Schedules the specified task periodically and immediately.
+         */
+        void schedule() {
+            mHandler.postDelayed(this, mPeriod);
+            mCancel = false;
+        }
+
+        void cancel() {
+            mHandler.removeCallbacks(this);
+            mCancel = true;
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java
index 898cd13..b3ce4a0 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java
@@ -86,7 +86,7 @@
 
     private void enableMagnification() {
         if (mWindowMagnificationController == null) {
-            mWindowMagnificationController = new WindowMagnificationController(mContext, mHandler);
+            mWindowMagnificationController = new WindowMagnificationController(mContext, null);
         }
         mWindowMagnificationController.createWindowMagnification();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
index 581cf7a..7176490 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
@@ -18,6 +18,7 @@
 
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
 
+import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.PixelFormat;
@@ -25,7 +26,6 @@
 import android.graphics.PointF;
 import android.graphics.Rect;
 import android.os.Binder;
-import android.os.Handler;
 import android.view.Display;
 import android.view.Gravity;
 import android.view.LayoutInflater;
@@ -44,16 +44,13 @@
 /**
  * Class to handle adding and removing a window magnification.
  */
-public class WindowMagnificationController implements View.OnClickListener,
-        View.OnLongClickListener, View.OnTouchListener, SurfaceHolder.Callback {
+public class WindowMagnificationController implements View.OnTouchListener, SurfaceHolder.Callback,
+        MirrorWindowControl.MirrorWindowDelegate {
     private final int mBorderSize;
-    private final int mMoveFrameAmountShort;
-    private final int mMoveFrameAmountLong;
 
     private final Context mContext;
     private final Point mDisplaySize = new Point();
     private final int mDisplayId;
-    private final Handler mHandler;
     private final Rect mMagnificationFrame = new Rect();
     private final SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction();
 
@@ -66,13 +63,6 @@
     // The root of the mirrored content
     private SurfaceControl mMirrorSurface;
 
-    private boolean mIsPressedDown;
-
-    private View mLeftControl;
-    private View mUpControl;
-    private View mRightControl;
-    private View mBottomControl;
-
     private View mDragView;
     private View mLeftDrag;
     private View mTopDrag;
@@ -80,20 +70,18 @@
     private View mBottomDrag;
 
     private final PointF mLastDrag = new PointF();
-    private final Point mMoveWindowOffset = new Point();
 
     private View mMirrorView;
     private SurfaceView mMirrorSurfaceView;
-    private View mControlsView;
     private View mOverlayView;
     // The boundary of magnification frame.
     private final Rect mMagnificationFrameBoundary = new Rect();
 
-    private MoveMirrorRunnable mMoveMirrorRunnable = new MoveMirrorRunnable();
+    @Nullable
+    private MirrorWindowControl mMirrorWindowControl;
 
-    WindowMagnificationController(Context context, Handler handler) {
+    WindowMagnificationController(Context context, MirrorWindowControl mirrorWindowControl) {
         mContext = context;
-        mHandler = handler;
         Display display = mContext.getDisplay();
         display.getRealSize(mDisplaySize);
         mDisplayId = mContext.getDisplayId();
@@ -102,10 +90,12 @@
 
         Resources r = context.getResources();
         mBorderSize = (int) r.getDimension(R.dimen.magnification_border_size);
-        mMoveFrameAmountShort = (int) r.getDimension(R.dimen.magnification_frame_move_short);
-        mMoveFrameAmountLong = (int) r.getDimension(R.dimen.magnification_frame_move_long);
 
         mScale = r.getInteger(R.integer.magnification_default_scale);
+        mMirrorWindowControl = mirrorWindowControl;
+        if (mMirrorWindowControl != null) {
+            mMirrorWindowControl.setWindowDelegate(this);
+        }
     }
 
     /**
@@ -176,9 +166,8 @@
             mMirrorView = null;
         }
 
-        if (mControlsView != null) {
-            mWm.removeView(mControlsView);
-            mControlsView = null;
+        if (mMirrorWindowControl != null) {
+            mMirrorWindowControl.destroyControl();
         }
     }
 
@@ -238,40 +227,9 @@
     }
 
     private void createControls() {
-        int controlsSize = (int) mContext.getResources().getDimension(
-                R.dimen.magnification_controls_size);
-
-        WindowManager.LayoutParams lp = new WindowManager.LayoutParams(controlsSize, controlsSize,
-                WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL,
-                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
-                        | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
-                PixelFormat.RGBA_8888);
-        lp.gravity = Gravity.BOTTOM | Gravity.RIGHT;
-        lp.token = mOverlayView.getWindowToken();
-        lp.setTitle(mContext.getString(R.string.magnification_controls_title));
-
-        mControlsView = LayoutInflater.from(mContext).inflate(R.layout.magnifier_controllers, null);
-        mWm.addView(mControlsView, lp);
-
-        mLeftControl = mControlsView.findViewById(R.id.left_control);
-        mUpControl = mControlsView.findViewById(R.id.up_control);
-        mRightControl = mControlsView.findViewById(R.id.right_control);
-        mBottomControl = mControlsView.findViewById(R.id.down_control);
-
-        mLeftControl.setOnClickListener(this);
-        mUpControl.setOnClickListener(this);
-        mRightControl.setOnClickListener(this);
-        mBottomControl.setOnClickListener(this);
-
-        mLeftControl.setOnLongClickListener(this);
-        mUpControl.setOnLongClickListener(this);
-        mRightControl.setOnLongClickListener(this);
-        mBottomControl.setOnLongClickListener(this);
-
-        mLeftControl.setOnTouchListener(this);
-        mUpControl.setOnTouchListener(this);
-        mRightControl.setOnTouchListener(this);
-        mBottomControl.setOnTouchListener(this);
+        if (mMirrorWindowControl != null) {
+            mMirrorWindowControl.showControl(mOverlayView.getWindowToken());
+        }
     }
 
     private void setInitialStartBounds() {
@@ -331,40 +289,14 @@
     }
 
     @Override
-    public void onClick(View v) {
-        setMoveOffset(v, mMoveFrameAmountShort);
-        moveMirrorWindow(mMoveWindowOffset.x, mMoveWindowOffset.y);
-    }
-
-    @Override
-    public boolean onLongClick(View v) {
-        mIsPressedDown = true;
-        setMoveOffset(v, mMoveFrameAmountLong);
-        mHandler.post(mMoveMirrorRunnable);
-        return true;
-    }
-
-    @Override
     public boolean onTouch(View v, MotionEvent event) {
-        if (v == mLeftControl || v == mUpControl || v == mRightControl || v == mBottomControl) {
-            return handleControlTouchEvent(event);
-        } else if (v == mDragView || v == mLeftDrag || v == mTopDrag || v == mRightDrag
+        if (v == mDragView || v == mLeftDrag || v == mTopDrag || v == mRightDrag
                 || v == mBottomDrag) {
             return handleDragTouchEvent(event);
         }
         return false;
     }
 
-    private boolean handleControlTouchEvent(MotionEvent event) {
-        switch (event.getAction()) {
-            case MotionEvent.ACTION_UP:
-            case MotionEvent.ACTION_CANCEL:
-                mIsPressedDown = false;
-                break;
-        }
-        return false;
-    }
-
     private boolean handleDragTouchEvent(MotionEvent event) {
         switch (event.getAction()) {
             case MotionEvent.ACTION_DOWN:
@@ -380,20 +312,6 @@
         return false;
     }
 
-    private void setMoveOffset(View v, int moveFrameAmount) {
-        mMoveWindowOffset.set(0, 0);
-
-        if (v == mLeftControl) {
-            mMoveWindowOffset.x = -moveFrameAmount;
-        } else if (v == mUpControl) {
-            mMoveWindowOffset.y = -moveFrameAmount;
-        } else if (v == mRightControl) {
-            mMoveWindowOffset.x = moveFrameAmount;
-        } else if (v == mBottomControl) {
-            mMoveWindowOffset.y = moveFrameAmount;
-        }
-    }
-
     private void moveMirrorWindow(int xOffset, int yOffset) {
         if (updateMagnificationFramePosition(xOffset, yOffset)) {
             modifyWindowMagnification(mTransaction);
@@ -461,6 +379,7 @@
         }
         return false;
     }
+
     @Override
     public void surfaceCreated(SurfaceHolder holder) {
         createMirror();
@@ -474,13 +393,13 @@
     public void surfaceDestroyed(SurfaceHolder holder) {
     }
 
-    class MoveMirrorRunnable implements Runnable {
-        @Override
-        public void run() {
-            if (mIsPressedDown) {
-                moveMirrorWindow(mMoveWindowOffset.x, mMoveWindowOffset.y);
-                mHandler.postDelayed(mMoveMirrorRunnable, 100);
-            }
+    @Override
+    public void move(int xOffset, int yOffset) {
+        if (mMirrorSurfaceView == null) {
+            return;
         }
+        mMagnificationFrame.offset(xOffset, yOffset);
+        modifyWindowMagnification(mTransaction);
+        mTransaction.apply();
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
index 5c65977..8a492a8 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
@@ -87,7 +87,7 @@
     @VisibleForTesting @Nullable AuthBiometricView mBiometricView;
     @VisibleForTesting @Nullable AuthCredentialView mCredentialView;
 
-    private final ImageView mBackgroundView;
+    @VisibleForTesting final ImageView mBackgroundView;
     @VisibleForTesting final ScrollView mBiometricScrollView;
     private final View mPanelView;
 
@@ -333,6 +333,12 @@
                 throw new IllegalStateException("Unknown credential type: " + credentialType);
         }
 
+        // The background is used for detecting taps / cancelling authentication. Since the
+        // credential view is full-screen and should not be canceled from background taps,
+        // disable it.
+        mBackgroundView.setOnClickListener(null);
+        mBackgroundView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
+
         mCredentialView.setContainerView(this);
         mCredentialView.setEffectiveUserId(mEffectiveUserId);
         mCredentialView.setCredentialType(credentialType);
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthCredentialView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthCredentialView.java
index 68b05e3..9de1040 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthCredentialView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthCredentialView.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.biometrics;
 
+import android.annotation.NonNull;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.hardware.biometrics.BiometricPrompt;
@@ -33,6 +34,8 @@
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import androidx.annotation.Nullable;
+
 import com.android.internal.widget.LockPatternUtils;
 import com.android.systemui.Interpolators;
 import com.android.systemui.R;
@@ -126,18 +129,18 @@
         mHandler.postDelayed(mClearErrorRunnable, ERROR_DURATION_MS);
     }
 
-    private void setTextOrHide(TextView view, String string) {
-        if (TextUtils.isEmpty(string)) {
+    private void setTextOrHide(TextView view, CharSequence text) {
+        if (TextUtils.isEmpty(text)) {
             view.setVisibility(View.GONE);
         } else {
-            view.setText(string);
+            view.setText(text);
         }
 
         Utils.notifyAccessibilityContentChanged(mAccessibilityManager, this);
     }
 
-    private void setText(TextView view, String string) {
-        view.setText(string);
+    private void setText(TextView view, CharSequence text) {
+        view.setText(text);
     }
 
     void setEffectiveUserId(int effectiveUserId) {
@@ -173,11 +176,9 @@
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
 
-        setText(mTitleView, mBiometricPromptBundle.getString(BiometricPrompt.KEY_TITLE));
-        setTextOrHide(mSubtitleView,
-                mBiometricPromptBundle.getString(BiometricPrompt.KEY_SUBTITLE));
-        setTextOrHide(mDescriptionView,
-                mBiometricPromptBundle.getString(BiometricPrompt.KEY_DESCRIPTION));
+        setText(mTitleView, getTitle(mBiometricPromptBundle));
+        setTextOrHide(mSubtitleView, getSubtitle(mBiometricPromptBundle));
+        setTextOrHide(mDescriptionView, getDescription(mBiometricPromptBundle));
 
         final boolean isManagedProfile = Utils.isManagedProfile(mContext, mEffectiveUserId);
         final Drawable image;
@@ -279,4 +280,28 @@
             }
         }
     }
+
+    @Nullable
+    private static CharSequence getTitle(@NonNull Bundle bundle) {
+        final CharSequence credentialTitle =
+                bundle.getCharSequence(BiometricPrompt.KEY_DEVICE_CREDENTIAL_TITLE);
+        return credentialTitle != null ? credentialTitle
+                : bundle.getCharSequence(BiometricPrompt.KEY_TITLE);
+    }
+
+    @Nullable
+    private static CharSequence getSubtitle(@NonNull Bundle bundle) {
+        final CharSequence credentialSubtitle =
+                bundle.getCharSequence(BiometricPrompt.KEY_DEVICE_CREDENTIAL_SUBTITLE);
+        return credentialSubtitle != null ? credentialSubtitle
+                : bundle.getCharSequence(BiometricPrompt.KEY_SUBTITLE);
+    }
+
+    @Nullable
+    private static CharSequence getDescription(@NonNull Bundle bundle) {
+        final CharSequence credentialDescription =
+                bundle.getCharSequence(BiometricPrompt.KEY_DEVICE_CREDENTIAL_DESCRIPTION);
+        return credentialDescription != null ? credentialDescription
+                : bundle.getCharSequence(BiometricPrompt.KEY_DESCRIPTION);
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java b/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java
index 45705b7..cdeb5c3 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java
@@ -38,9 +38,11 @@
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.service.notification.StatusBarNotification;
 import android.util.Log;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.shared.system.SysUiStatsLog;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 
 import java.io.FileDescriptor;
@@ -50,7 +52,7 @@
 /**
  * Encapsulates the data and UI elements of a bubble.
  */
-class Bubble {
+class Bubble implements BubbleViewProvider {
     private static final String TAG = "Bubble";
 
     private NotificationEntry mEntry;
@@ -148,12 +150,12 @@
     }
 
     @Nullable
-    BadgedImageView getIconView() {
+    public BadgedImageView getIconView() {
         return mIconView;
     }
 
     @Nullable
-    BubbleExpandedView getExpandedView() {
+    public BubbleExpandedView getExpandedView() {
         return mExpandedView;
     }
 
@@ -226,6 +228,10 @@
         mIconView.update(this);
     }
 
+    void setInflated(boolean inflated) {
+        mInflated = inflated;
+    }
+
     /**
      * Set visibility of bubble in the expanded state.
      *
@@ -234,7 +240,7 @@
      * Note that this contents visibility doesn't affect visibility at {@link android.view.View},
      * and setting {@code false} actually means rendering the expanded view in transparent.
      */
-    void setContentVisibility(boolean visibility) {
+    public void setContentVisibility(boolean visibility) {
         if (mExpandedView != null) {
             mExpandedView.setContentVisibility(visibility);
         }
@@ -477,4 +483,36 @@
     public int hashCode() {
         return Objects.hash(mKey);
     }
+
+    public void logUIEvent(int bubbleCount, int action, float normalX, float normalY, int index) {
+        if (this.getEntry() == null
+                || this.getEntry().getSbn() == null) {
+            SysUiStatsLog.write(SysUiStatsLog.BUBBLE_UI_CHANGED,
+                    null /* package name */,
+                    null /* notification channel */,
+                    0 /* notification ID */,
+                    0 /* bubble position */,
+                    bubbleCount,
+                    action,
+                    normalX,
+                    normalY,
+                    false /* unread bubble */,
+                    false /* on-going bubble */,
+                    false /* isAppForeground (unused) */);
+        } else {
+            StatusBarNotification notification = this.getEntry().getSbn();
+            SysUiStatsLog.write(SysUiStatsLog.BUBBLE_UI_CHANGED,
+                    notification.getPackageName(),
+                    notification.getNotification().getChannelId(),
+                    notification.getId(),
+                    index,
+                    bubbleCount,
+                    action,
+                    normalX,
+                    normalY,
+                    this.showInShade(),
+                    this.isOngoing(),
+                    false /* isAppForeground (unused) */);
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
index 7c07c9d..de707b9 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
@@ -16,7 +16,6 @@
 
 package com.android.systemui.bubbles;
 
-import static android.app.Notification.FLAG_AUTOGROUP_SUMMARY;
 import static android.app.Notification.FLAG_BUBBLE;
 import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL;
 import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL_ALL;
@@ -44,19 +43,13 @@
 
 import android.annotation.UserIdInt;
 import android.app.ActivityManager.RunningTaskInfo;
-import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
-import android.app.RemoteInput;
 import android.content.Context;
-import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.ShortcutManager;
 import android.content.res.Configuration;
 import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Handler;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.service.notification.NotificationListenerService.RankingMap;
@@ -75,39 +68,41 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.statusbar.IStatusBarService;
-import com.android.internal.util.ScreenshotHelper;
+import com.android.internal.statusbar.NotificationVisibility;
+import com.android.systemui.DumpController;
+import com.android.systemui.Dumpable;
 import com.android.systemui.R;
+import com.android.systemui.bubbles.dagger.BubbleModule;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.shared.system.ActivityManagerWrapper;
 import com.android.systemui.shared.system.PinnedStackListenerForwarder;
 import com.android.systemui.shared.system.TaskStackChangeListener;
 import com.android.systemui.shared.system.WindowManagerWrapper;
+import com.android.systemui.statusbar.FeatureFlags;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationRemoveInterceptor;
 import com.android.systemui.statusbar.notification.NotificationEntryListener;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
+import com.android.systemui.statusbar.notification.collection.NotifCollection;
+import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
 import com.android.systemui.statusbar.phone.NotificationGroupManager;
 import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
 import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.phone.StatusBar;
 import com.android.systemui.statusbar.policy.ConfigurationController;
-import com.android.systemui.statusbar.policy.RemoteInputUriController;
 import com.android.systemui.statusbar.policy.ZenModeController;
+import com.android.systemui.util.FloatingContentCoordinator;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
-import java.util.function.Consumer;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
 
 /**
  * Bubbles are a special type of content that can "float" on top of other apps or System UI.
@@ -115,8 +110,7 @@
  *
  * The controller manages addition, removal, and visible state of bubbles on screen.
  */
-@Singleton
-public class BubbleController implements ConfigurationController.ConfigurationListener {
+public class BubbleController implements ConfigurationController.ConfigurationListener, Dumpable {
 
     private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleController" : TAG_BUBBLES;
 
@@ -140,14 +134,14 @@
 
     private final Context mContext;
     private final NotificationEntryManager mNotificationEntryManager;
+    private final NotifPipeline mNotifPipeline;
     private final BubbleTaskStackListener mTaskStackListener;
     private BubbleStateChangeListener mStateChangeListener;
     private BubbleExpandListener mExpandListener;
     @Nullable private BubbleStackView.SurfaceSynchronizer mSurfaceSynchronizer;
     private final NotificationGroupManager mNotificationGroupManager;
     private final ShadeController mShadeController;
-    private final RemoteInputUriController mRemoteInputUriController;
-    private Handler mHandler = new Handler() {};
+    private final FloatingContentCoordinator mFloatingContentCoordinator;
 
     private BubbleData mBubbleData;
     @Nullable private BubbleStackView mStackView;
@@ -171,7 +165,6 @@
     private final NotificationShadeWindowController mNotificationShadeWindowController;
     private final ZenModeController mZenModeController;
     private StatusBarStateListener mStatusBarStateListener;
-    private final ScreenshotHelper mScreenshotHelper;
 
     // Callback that updates BubbleOverflowActivity on data change.
     @Nullable private Runnable mOverflowCallback = null;
@@ -217,16 +210,6 @@
     }
 
     /**
-     * Listener for handling bubble screenshot events.
-     */
-    public interface BubbleScreenshotListener {
-        /**
-         * Called to trigger taking a screenshot and sending the result to a bubble.
-         */
-        void onBubbleScreenshot(Bubble bubble);
-    }
-
-    /**
      * Listener to be notified when a bubbles' notification suppression state changes.
      */
     public interface NotificationSuppressionChangedListener {
@@ -243,16 +226,17 @@
      */
     public interface NotifCallback {
         /**
-         * Called when the BubbleController wants to remove an entry that it was previously hiding
-         * from the shade. See {@link BubbleController#isBubbleNotificationSuppressedFromShade}.
+         * Called when a bubbled notification that was hidden from the shade is now being removed
+         * This can happen when an app cancels a bubbled notification or when the user dismisses a
+         * bubble.
          */
-        void removeNotification(NotificationEntry entry);
+        void removeNotification(NotificationEntry entry, int reason);
 
         /**
          * Called when a bubbled notification has changed whether it should be
          * filtered from the shade.
          */
-        void invalidateNotificationFilter(String reason);
+        void invalidateNotifications(String reason);
 
         /**
          * Called on a bubbled entry that has been removed when there are no longer
@@ -289,7 +273,6 @@
         }
     }
 
-    @Inject
     public BubbleController(Context context,
             NotificationShadeWindowController notificationShadeWindowController,
             StatusBarStateController statusBarStateController,
@@ -301,13 +284,19 @@
             NotificationLockscreenUserManager notifUserManager,
             NotificationGroupManager groupManager,
             NotificationEntryManager entryManager,
-            RemoteInputUriController remoteInputUriController) {
+            NotifPipeline notifPipeline,
+            FeatureFlags featureFlags,
+            DumpController dumpController,
+            FloatingContentCoordinator floatingContentCoordinator) {
         this(context, notificationShadeWindowController, statusBarStateController, shadeController,
                 data, null /* synchronizer */, configurationController, interruptionStateProvider,
                 zenModeController, notifUserManager, groupManager, entryManager,
-                remoteInputUriController);
+                notifPipeline, featureFlags, dumpController, floatingContentCoordinator);
     }
 
+    /**
+     * Injected constructor. See {@link BubbleModule}.
+     */
     public BubbleController(Context context,
             NotificationShadeWindowController notificationShadeWindowController,
             StatusBarStateController statusBarStateController,
@@ -320,13 +309,17 @@
             NotificationLockscreenUserManager notifUserManager,
             NotificationGroupManager groupManager,
             NotificationEntryManager entryManager,
-            RemoteInputUriController remoteInputUriController) {
+            NotifPipeline notifPipeline,
+            FeatureFlags featureFlags,
+            DumpController dumpController,
+            FloatingContentCoordinator floatingContentCoordinator) {
+        dumpController.registerDumpable(TAG, this);
         mContext = context;
         mShadeController = shadeController;
         mNotificationInterruptionStateProvider = interruptionStateProvider;
         mNotifUserManager = notifUserManager;
         mZenModeController = zenModeController;
-        mRemoteInputUriController = remoteInputUriController;
+        mFloatingContentCoordinator = floatingContentCoordinator;
         mZenModeController.addCallback(new ZenModeController.Callback() {
             @Override
             public void onZenChanged(int zen) {
@@ -364,7 +357,13 @@
 
         mNotificationEntryManager = entryManager;
         mNotificationGroupManager = groupManager;
-        setupNEM();
+        mNotifPipeline = notifPipeline;
+
+        if (!featureFlags.isNewNotifPipelineRenderingEnabled()) {
+            setupNEM();
+        } else {
+            setupNotifPipeline();
+        }
 
         mNotificationShadeWindowController = notificationShadeWindowController;
         mStatusBarStateListener = new StatusBarStateListener();
@@ -399,7 +398,6 @@
         mUserCreatedBubbles = new HashSet<>();
         mUserBlockedBubbles = new HashSet<>();
 
-        mScreenshotHelper = new ScreenshotHelper(context);
         mBubbleIconFactory = new BubbleIconFactory(context);
     }
 
@@ -424,6 +422,14 @@
                     }
 
                     @Override
+                    public void onEntryRemoved(
+                            NotificationEntry entry,
+                            @android.annotation.Nullable NotificationVisibility visibility,
+                            boolean removedByUser) {
+                        BubbleController.this.onEntryRemoved(entry);
+                    }
+
+                    @Override
                     public void onNotificationRankingUpdated(RankingMap rankingMap) {
                         onRankingUpdated(rankingMap);
                     }
@@ -433,8 +439,29 @@
                 new NotificationRemoveInterceptor() {
                     @Override
                     public boolean onNotificationRemoveRequested(
-                            String key, NotificationEntry entry, int reason) {
-                        return shouldInterceptDismissal(entry, reason);
+                            String key,
+                            NotificationEntry entry,
+                            int dismissReason) {
+                        final boolean isClearAll = dismissReason == REASON_CANCEL_ALL;
+                        final boolean isUserDimiss = dismissReason == REASON_CANCEL
+                                || dismissReason == REASON_CLICK;
+                        final boolean isAppCancel = dismissReason == REASON_APP_CANCEL
+                                || dismissReason == REASON_APP_CANCEL_ALL;
+                        final boolean isSummaryCancel =
+                                dismissReason == REASON_GROUP_SUMMARY_CANCELED;
+
+                        // Need to check for !appCancel here because the notification may have
+                        // previously been dismissed & entry.isRowDismissed would still be true
+                        boolean userRemovedNotif =
+                                (entry != null && entry.isRowDismissed() && !isAppCancel)
+                                || isClearAll || isUserDimiss || isSummaryCancel;
+
+                        if (userRemovedNotif || isUserCreatedBubble(key)
+                                || isSummaryOfUserCreatedBubble(entry)) {
+                            return handleDismissalInterception(entry);
+                        }
+
+                        return false;
                     }
                 });
 
@@ -458,13 +485,13 @@
 
         addNotifCallback(new NotifCallback() {
             @Override
-            public void removeNotification(NotificationEntry entry) {
+            public void removeNotification(NotificationEntry entry, int reason) {
                 mNotificationEntryManager.performRemoveNotification(entry.getSbn(),
-                        UNDEFINED_DISMISS_REASON);
+                        reason);
             }
 
             @Override
-            public void invalidateNotificationFilter(String reason) {
+            public void invalidateNotifications(String reason) {
                 mNotificationEntryManager.updateNotifications(reason);
             }
 
@@ -472,18 +499,28 @@
             public void maybeCancelSummary(NotificationEntry entry) {
                 // Check if removed bubble has an associated suppressed group summary that needs
                 // to be removed now.
-                final String groupKey = entry.getSbn().getGroup();
+                final String groupKey = entry.getSbn().getGroupKey();
                 if (mBubbleData.isSummarySuppressed(groupKey)) {
-                    mBubbleData.removeSuppressedSummary(entry.getSbn().getGroupKey());
+                    mBubbleData.removeSuppressedSummary(groupKey);
 
                     final NotificationEntry summary =
                             mNotificationEntryManager.getActiveNotificationUnfiltered(
                                     mBubbleData.getSummaryKey(groupKey));
-                    mNotificationEntryManager.performRemoveNotification(summary.getSbn(),
-                            UNDEFINED_DISMISS_REASON);
+                    if (summary != null) {
+                        mNotificationEntryManager.performRemoveNotification(summary.getSbn(),
+                                UNDEFINED_DISMISS_REASON);
+                    }
                 }
 
-                // Check if summary should be removed from NoManGroup
+                // Check if we still need to remove the summary from NoManGroup because the summary
+                // may not be in the mBubbleData.mSuppressedGroupKeys list and removed above.
+                // For example:
+                // 1. Bubbled notifications (group) is posted to shade and are visible bubbles
+                // 2. User expands bubbles so now their respective notifications in the shade are
+                // hidden, including the group summary
+                // 3. User removes all bubbles
+                // 4. We expect all the removed bubbles AND the summary (note: the summary was
+                // never added to the suppressedSummary list in BubbleData, so we add this check)
                 NotificationEntry summary =
                         mNotificationGroupManager.getLogicalGroupSummary(entry.getSbn());
                 if (summary != null) {
@@ -500,6 +537,31 @@
         });
     }
 
+    private void setupNotifPipeline() {
+        mNotifPipeline.addCollectionListener(new NotifCollectionListener() {
+            @Override
+            public void onEntryAdded(NotificationEntry entry) {
+                BubbleController.this.onEntryAdded(entry);
+            }
+
+            @Override
+            public void onEntryUpdated(NotificationEntry entry) {
+                BubbleController.this.onEntryUpdated(entry);
+            }
+
+            @Override
+            public void onRankingUpdate(RankingMap rankingMap) {
+                onRankingUpdated(rankingMap);
+            }
+
+            @Override
+            public void onEntryRemoved(NotificationEntry entry,
+                    @NotifCollection.CancellationReason int reason) {
+                BubbleController.this.onEntryRemoved(entry);
+            }
+        });
+    }
+
     /**
      * Sets whether to perform inflation on the same thread as the caller. This method should only
      * be used in tests, not in production.
@@ -527,7 +589,8 @@
      */
     private void ensureStackViewCreated() {
         if (mStackView == null) {
-            mStackView = new BubbleStackView(mContext, mBubbleData, mSurfaceSynchronizer);
+            mStackView = new BubbleStackView(
+                    mContext, mBubbleData, mSurfaceSynchronizer, mFloatingContentCoordinator);
             ViewGroup nsv = mNotificationShadeWindowController.getNotificationShadeView();
             int bubbleScrimIndex = nsv.indexOfChild(nsv.findViewById(R.id.scrim_for_bubble));
             int stackIndex = bubbleScrimIndex + 1;  // Show stack above bubble scrim.
@@ -536,9 +599,6 @@
             if (mExpandListener != null) {
                 mStackView.setExpandListener(mExpandListener);
             }
-            if (mBubbleScreenshotListener != null) {
-                mStackView.setBubbleScreenshotListener(mBubbleScreenshotListener);
-            }
         }
     }
 
@@ -691,7 +751,8 @@
     }
 
     void promoteBubbleFromOverflow(Bubble bubble) {
-        mBubbleData.promoteBubbleFromOverflow(bubble);
+        bubble.setInflateSynchronously(mInflateSynchronously);
+        mBubbleData.promoteBubbleFromOverflow(bubble, mStackView, mBubbleIconFactory);
     }
 
     /**
@@ -783,7 +844,7 @@
             Log.d(TAG, "onUserDemotedBubble: " + entry.getKey());
         }
         entry.setFlagBubble(false);
-        removeBubble(entry.getKey(), DISMISS_BLOCKED);
+        removeBubble(entry, DISMISS_BLOCKED);
         mUserCreatedBubbles.remove(entry.getKey());
         if (BubbleExperimentConfig.isPackageWhitelistedToAutoBubble(
                 mContext, entry.getSbn().getPackageName())) {
@@ -800,17 +861,29 @@
         return mUserCreatedBubbles.contains(key);
     }
 
+    boolean isSummaryOfUserCreatedBubble(NotificationEntry entry) {
+        if (isSummaryOfBubbles(entry)) {
+            List<Bubble> bubbleChildren =
+                    mBubbleData.getBubblesInGroup(entry.getSbn().getGroupKey());
+            for (int i = 0; i < bubbleChildren.size(); i++) {
+                // Check if any are user-created (i.e. experimental bubbles)
+                if (isUserCreatedBubble(bubbleChildren.get(i).getKey())) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
     /**
-     * Removes the bubble associated with the {@param uri}.
+     * Removes the bubble with the given NotificationEntry.
      * <p>
      * Must be called from the main thread.
      */
     @MainThread
-    void removeBubble(String key, int reason) {
-        // TEMP: refactor to change this to pass entry
-        Bubble bubble = mBubbleData.getBubbleWithKey(key);
-        if (bubble != null) {
-            mBubbleData.notificationEntryRemoved(bubble.getEntry(), reason);
+    void removeBubble(NotificationEntry entry, int reason) {
+        if (mBubbleData.hasBubbleWithKey(entry.getKey())) {
+            mBubbleData.notificationEntryRemoved(entry, reason);
         }
     }
 
@@ -840,7 +913,7 @@
                 && (canLaunchInActivityView(mContext, entry) || wasAdjusted);
         if (!shouldBubble && mBubbleData.hasBubbleWithKey(entry.getKey())) {
             // It was previously a bubble but no longer a bubble -- lets remove it
-            removeBubble(entry.getKey(), DISMISS_NO_LONGER_BUBBLE);
+            removeBubble(entry, DISMISS_NO_LONGER_BUBBLE);
         } else if (shouldBubble) {
             if (wasAdjusted && !previouslyUserCreated) {
                 // Gotta treat the auto-bubbled / whitelisted packaged bubbles as usercreated
@@ -850,6 +923,21 @@
         }
     }
 
+    private void onEntryRemoved(NotificationEntry entry) {
+        if (isSummaryOfBubbles(entry)) {
+            final String groupKey = entry.getSbn().getGroupKey();
+            mBubbleData.removeSuppressedSummary(groupKey);
+
+            // Remove any associated bubble children with the summary
+            final List<Bubble> bubbleChildren = mBubbleData.getBubblesInGroup(groupKey);
+            for (int i = 0; i < bubbleChildren.size(); i++) {
+                removeBubble(bubbleChildren.get(i).getEntry(), DISMISS_GROUP_CANCELLED);
+            }
+        } else {
+            removeBubble(entry, DISMISS_NOTIF_CANCEL);
+        }
+    }
+
     private void onRankingUpdated(RankingMap rankingMap) {
         // Forward to BubbleData to block any bubbles which should no longer be shown
         mBubbleData.notificationRankingUpdated(rankingMap);
@@ -877,7 +965,6 @@
                 final Bubble bubble = removed.first;
                 @DismissReason final int reason = removed.second;
                 mStackView.removeBubble(bubble);
-
                 // If the bubble is removed for user switching, leave the notification in place.
                 if (reason != DISMISS_USER_CHANGED) {
                     if (!mBubbleData.hasBubbleWithKey(bubble.getKey())
@@ -885,7 +972,7 @@
                         // The bubble is now gone & the notification is hidden from the shade, so
                         // time to actually remove it
                         for (NotifCallback cb : mCallbacks) {
-                            cb.removeNotification(bubble.getEntry());
+                            cb.removeNotification(bubble.getEntry(), REASON_CANCEL);
                         }
                     } else {
                         // Update the flag for SysUI
@@ -939,7 +1026,7 @@
             }
 
             for (NotifCallback cb : mCallbacks) {
-                cb.invalidateNotificationFilter("BubbleData.Listener.applyUpdate");
+                cb.invalidateNotifications("BubbleData.Listener.applyUpdate");
             }
             updateStack();
 
@@ -961,124 +1048,85 @@
     };
 
     /**
-     * We intercept notification entries cancelled by the user (i.e. dismissed) when there is an
-     * active bubble associated with it. We do this so that developers can still cancel it
-     * (and hence the bubbles associated with it). However, these intercepted notifications
-     * should then be hidden from the shade since the user has cancelled them, so we update
-     * {@link Bubble#showInShade}.
+     * We intercept notification entries (including group summaries) dismissed by the user when
+     * there is an active bubble associated with it. We do this so that developers can still
+     * cancel it (and hence the bubbles associated with it). However, these intercepted
+     * notifications should then be hidden from the shade since the user has cancelled them, so we
+     *  {@link Bubble#setSuppressNotification}.  For the case of suppressed summaries, we also add
+     *  {@link BubbleData#addSummaryToSuppress}.
      *
-     * The cancellation of summaries with children associated with bubbles are also handled in this
-     * method. User-cancelled summaries are tracked by {@link BubbleData#addSummaryToSuppress}.
-     *
-     * @return true if we want to intercept the dismissal of the entry, else false
+     * @return true if we want to intercept the dismissal of the entry, else false.
      */
-    public boolean shouldInterceptDismissal(NotificationEntry entry, int dismissReason) {
+    public boolean handleDismissalInterception(NotificationEntry entry) {
         if (entry == null) {
             return false;
         }
-        String key = entry.getKey();
-        String groupKey = entry != null ? entry.getSbn().getGroupKey() : null;
-        ArrayList<Bubble> bubbleChildren = mBubbleData.getBubblesInGroup(groupKey);
 
-        boolean inBubbleData = mBubbleData.hasBubbleWithKey(key);
-        boolean isSuppressedSummary = (mBubbleData.isSummarySuppressed(groupKey)
-                && mBubbleData.getSummaryKey(groupKey).equals(key));
-        boolean isSummary = entry != null
-                && entry.getSbn().getNotification().isGroupSummary();
-        boolean isSummaryOfBubbles = (isSuppressedSummary || isSummary)
-                && bubbleChildren != null && !bubbleChildren.isEmpty();
+        final boolean interceptBubbleDismissal = mBubbleData.hasBubbleWithKey(entry.getKey())
+                && entry.isBubble();
+        final boolean interceptSummaryDismissal = isSummaryOfBubbles(entry);
 
-        if (!inBubbleData && !isSummaryOfBubbles) {
-            return false;
-        }
-
-        final boolean isClearAll = dismissReason == REASON_CANCEL_ALL;
-        final boolean isUserDimiss = dismissReason == REASON_CANCEL
-                || dismissReason == REASON_CLICK;
-        final boolean isAppCancel = dismissReason == REASON_APP_CANCEL
-                || dismissReason == REASON_APP_CANCEL_ALL;
-        final boolean isSummaryCancel = dismissReason == REASON_GROUP_SUMMARY_CANCELED;
-
-        // Need to check for !appCancel here because the notification may have
-        // previously been dismissed & entry.isRowDismissed would still be true
-        boolean userRemovedNotif = (entry != null && entry.isRowDismissed() && !isAppCancel)
-                || isClearAll || isUserDimiss || isSummaryCancel;
-        if (isSummaryOfBubbles) {
-            return handleSummaryRemovalInterception(entry, userRemovedNotif);
-        }
-
-        // The bubble notification sticks around in the data as long as the bubble is
-        // not dismissed and the app hasn't cancelled the notification.
-        Bubble bubble = mBubbleData.getBubbleWithKey(key);
-        boolean bubbleExtended = entry != null && entry.isBubble() && userRemovedNotif;
-        if (bubbleExtended) {
+        if (interceptSummaryDismissal) {
+            handleSummaryDismissalInterception(entry);
+        } else if (interceptBubbleDismissal) {
+            Bubble bubble = mBubbleData.getBubbleWithKey(entry.getKey());
             bubble.setSuppressNotification(true);
             bubble.setShowDot(false /* show */, true /* animate */);
-            for (NotifCallback cb : mCallbacks) {
-                cb.invalidateNotificationFilter("BubbleController"
-                        + ".shouldInterceptDismissal");
-            }
-            return true;
-        } else if (!userRemovedNotif && entry != null
-                && !isUserCreatedBubble(bubble.getKey())) {
-            // This wasn't a user removal so we should remove the bubble as well
-            mBubbleData.notificationEntryRemoved(entry, DISMISS_NOTIF_CANCEL);
+        } else {
             return false;
         }
-        return false;
+
+        // Update the shade
+        for (NotifCallback cb : mCallbacks) {
+            cb.invalidateNotifications("BubbleController.handleDismissalInterception");
+        }
+        return true;
     }
 
-    private boolean handleSummaryRemovalInterception(NotificationEntry summary,
-            boolean userRemovedNotif) {
-        String groupKey = summary.getSbn().getGroupKey();
-        ArrayList<Bubble> bubbleChildren = mBubbleData.getBubblesInGroup(groupKey);
-
-        if (userRemovedNotif) {
-            // If it's a user dismiss we mark the children to be hidden from the shade.
-            for (int i = 0; i < bubbleChildren.size(); i++) {
-                Bubble bubbleChild = bubbleChildren.get(i);
-                // As far as group manager is concerned, once a child is no longer shown
-                // in the shade, it is essentially removed.
-                mNotificationGroupManager.onEntryRemoved(bubbleChild.getEntry());
-                bubbleChild.setSuppressNotification(true);
-                bubbleChild.setShowDot(false /* show */, true /* animate */);
-            }
-            // And since all children are removed, remove the summary.
-            mNotificationGroupManager.onEntryRemoved(summary);
-
-            // If the summary was auto-generated we don't need to keep that notification around
-            // because apps can't cancel it; so we only intercept & suppress real summaries.
-            boolean isAutogroupSummary = (summary.getSbn().getNotification().flags
-                    & FLAG_AUTOGROUP_SUMMARY) != 0;
-            if (!isAutogroupSummary) {
-                // TODO: (b/145659174) remove references to mSuppressedGroupKeys once fully migrated
-                mBubbleData.addSummaryToSuppress(summary.getSbn().getGroupKey(),
-                        summary.getKey());
-                // Tell shade to update for the suppression
-                mNotificationEntryManager.updateNotifications("BubbleController"
-                        + ".handleSummaryRemovalInterception");
-            }
-            return !isAutogroupSummary;
-        } else {
-            // If it's not a user dismiss it's a cancel.
-            for (int i = 0; i < bubbleChildren.size(); i++) {
-                // First check if any of these are user-created (i.e. experimental bubbles)
-                if (mUserCreatedBubbles.contains(bubbleChildren.get(i).getKey())) {
-                    // Experimental bubble! Intercept the removal.
-                    return true;
-                }
-            }
-
-            // Not an experimental bubble, safe to remove.
-            mBubbleData.removeSuppressedSummary(groupKey);
-            // Remove any associated bubble children with the summary.
-            for (int i = 0; i < bubbleChildren.size(); i++) {
-                Bubble bubbleChild = bubbleChildren.get(i);
-                mBubbleData.notificationEntryRemoved(bubbleChild.getEntry(),
-                        DISMISS_GROUP_CANCELLED);
-            }
+    private boolean isSummaryOfBubbles(NotificationEntry entry) {
+        if (entry == null) {
             return false;
         }
+
+        String groupKey = entry.getSbn().getGroupKey();
+        ArrayList<Bubble> bubbleChildren = mBubbleData.getBubblesInGroup(groupKey);
+        boolean isSuppressedSummary = (mBubbleData.isSummarySuppressed(groupKey)
+                && mBubbleData.getSummaryKey(groupKey).equals(entry.getKey()));
+        boolean isSummary = entry.getSbn().getNotification().isGroupSummary();
+        return (isSuppressedSummary || isSummary)
+                && bubbleChildren != null
+                && !bubbleChildren.isEmpty();
+    }
+
+    private void handleSummaryDismissalInterception(NotificationEntry summary) {
+        // current children in the row:
+        final List<NotificationEntry> children = summary.getChildren();
+        if (children != null) {
+            for (int i = 0; i < children.size(); i++) {
+                NotificationEntry child = children.get(i);
+                if (mBubbleData.hasBubbleWithKey(child.getKey())) {
+                    // Suppress the bubbled child
+                    // As far as group manager is concerned, once a child is no longer shown
+                    // in the shade, it is essentially removed.
+                    Bubble bubbleChild = mBubbleData.getBubbleWithKey(child.getKey());
+                    mNotificationGroupManager.onEntryRemoved(bubbleChild.getEntry());
+                    bubbleChild.setSuppressNotification(true);
+                    bubbleChild.setShowDot(false /* show */, true /* animate */);
+                } else {
+                    // non-bubbled children can be removed
+                    for (NotifCallback cb : mCallbacks) {
+                        cb.removeNotification(child, REASON_GROUP_SUMMARY_CANCELED);
+                    }
+                }
+            }
+        }
+
+        // And since all children are removed, remove the summary.
+        mNotificationGroupManager.onEntryRemoved(summary);
+
+        // TODO: (b/145659174) remove references to mSuppressedGroupKeys once fully migrated
+        mBubbleData.addSummaryToSuppress(summary.getSbn().getGroupKey(),
+                summary.getKey());
     }
 
     /**
@@ -1267,68 +1315,4 @@
             }
         }
     }
-
-    // TODO: Copied from RemoteInputView. Consolidate RemoteInput intent logic.
-    private Intent prepareRemoteInputFromData(String contentType, Uri data,
-            RemoteInput remoteInput, NotificationEntry entry) {
-        HashMap<String, Uri> results = new HashMap<>();
-        results.put(contentType, data);
-        mRemoteInputUriController.grantInlineReplyUriPermission(entry.getSbn(), data);
-        Intent fillInIntent = new Intent().addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-        RemoteInput.addDataResultToIntent(remoteInput, fillInIntent, results);
-
-        return fillInIntent;
-    }
-
-    // TODO: Copied from RemoteInputView. Consolidate RemoteInput intent logic.
-    private void sendRemoteInput(Intent intent, NotificationEntry entry,
-            PendingIntent pendingIntent) {
-        // Tell ShortcutManager that this package has been "activated".  ShortcutManager
-        // will reset the throttling for this package.
-        // Strictly speaking, the intent receiver may be different from the notification publisher,
-        // but that's an edge case, and also because we can't always know which package will receive
-        // an intent, so we just reset for the publisher.
-        mContext.getSystemService(ShortcutManager.class).onApplicationActive(
-                entry.getSbn().getPackageName(),
-                entry.getSbn().getUser().getIdentifier());
-
-        try {
-            pendingIntent.send(mContext, 0, intent);
-        } catch (PendingIntent.CanceledException e) {
-            Log.i(TAG, "Unable to send remote input result", e);
-        }
-    }
-
-    private void sendScreenshotToBubble(Bubble bubble) {
-        mScreenshotHelper.takeScreenshot(
-                android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN,
-                true /* hasStatus */,
-                true /* hasNav */,
-                mHandler,
-                new Consumer<Uri>() {
-                    @Override
-                    public void accept(Uri uri) {
-                        if (uri != null) {
-                            NotificationEntry entry = bubble.getEntry();
-                            Pair<RemoteInput, Notification.Action> pair = entry.getSbn()
-                                    .getNotification().findRemoteInputActionPair(false);
-                            if (pair != null) {
-                                RemoteInput remoteInput = pair.first;
-                                Notification.Action action = pair.second;
-                                Intent dataIntent = prepareRemoteInputFromData("image/png", uri,
-                                        remoteInput, entry);
-                                sendRemoteInput(dataIntent, entry, action.actionIntent);
-                                mBubbleData.setSelectedBubble(bubble);
-                                mBubbleData.setExpanded(true);
-                            } else {
-                                Log.w(TAG, "No RemoteInput found for notification: "
-                                        + entry.getSbn().getKey());
-                            }
-                        }
-                    }
-                });
-    }
-
-    private final BubbleScreenshotListener mBubbleScreenshotListener =
-            bubble -> sendScreenshotToBubble(bubble);
 }
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java
index 673121f..cf5a4d3 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java
@@ -199,16 +199,21 @@
         dispatchPendingChanges();
     }
 
-    public void promoteBubbleFromOverflow(Bubble bubble) {
+    public void promoteBubbleFromOverflow(Bubble bubble, BubbleStackView stack,
+            BubbleIconFactory factory) {
         if (DEBUG_BUBBLE_DATA) {
             Log.d(TAG, "promoteBubbleFromOverflow: " + bubble);
         }
-        mOverflowBubbles.remove(bubble);
-        doAdd(bubble);
-        setSelectedBubbleInternal(bubble);
+
         // Preserve new order for next repack, which sorts by last updated time.
         bubble.markUpdatedAt(mTimeSource.currentTimeMillis());
-        trim();
+        setSelectedBubbleInternal(bubble);
+        mOverflowBubbles.remove(bubble);
+
+        bubble.inflate(
+                b -> notificationEntryUpdated(bubble, /* suppressFlyout */
+                        false, /* showInShade */ true),
+                mContext, stack, factory);
         dispatchPendingChanges();
     }
 
@@ -438,16 +443,7 @@
             mStateChange.orderChanged |= repackAll();
         }
 
-        if (reason == BubbleController.DISMISS_AGED) {
-            if (DEBUG_BUBBLE_DATA) {
-                Log.d(TAG, "overflowing bubble: " + bubbleToRemove);
-            }
-            mOverflowBubbles.add(0, bubbleToRemove);
-            if (mOverflowBubbles.size() == mMaxOverflowBubbles + 1) {
-                // Remove oldest bubble.
-                mOverflowBubbles.remove(mOverflowBubbles.size() - 1);
-            }
-        }
+        overflowBubble(reason, bubbleToRemove);
 
         // Note: If mBubbles.isEmpty(), then mSelectedBubble is now null.
         if (Objects.equals(mSelectedBubble, bubbleToRemove)) {
@@ -459,6 +455,25 @@
         maybeSendDeleteIntent(reason, bubbleToRemove.getEntry());
     }
 
+    void overflowBubble(@DismissReason int reason, Bubble bubble) {
+        if (reason == BubbleController.DISMISS_AGED
+                || reason == BubbleController.DISMISS_USER_GESTURE) {
+            if (DEBUG_BUBBLE_DATA) {
+                Log.d(TAG, "overflowing bubble: " + bubble);
+            }
+            mOverflowBubbles.add(0, bubble);
+
+            if (mOverflowBubbles.size() == mMaxOverflowBubbles + 1) {
+                // Remove oldest bubble.
+                if (DEBUG_BUBBLE_DATA) {
+                    Log.d(TAG, "Overflow full. Remove bubble: " + mOverflowBubbles.get(
+                            mOverflowBubbles.size() - 1));
+                }
+                mOverflowBubbles.remove(mOverflowBubbles.size() - 1);
+            }
+        }
+    }
+
     public void dismissAll(@DismissReason int reason) {
         if (DEBUG_BUBBLE_DATA) {
             Log.d(TAG, "dismissAll: reason=" + reason);
@@ -469,9 +484,7 @@
         setExpandedInternal(false);
         setSelectedBubbleInternal(null);
         while (!mBubbles.isEmpty()) {
-            Bubble bubble = mBubbles.remove(0);
-            maybeSendDeleteIntent(reason, bubble.getEntry());
-            mStateChange.bubbleRemoved(bubble, reason);
+            doRemove(mBubbles.get(0).getKey(), reason);
         }
         dispatchPendingChanges();
     }
@@ -511,7 +524,7 @@
         if (Objects.equals(bubble, mSelectedBubble)) {
             return;
         }
-        if (bubble != null && !mBubbles.contains(bubble)) {
+        if (bubble != null && !mBubbles.contains(bubble) && !mOverflowBubbles.contains(bubble)) {
             Log.e(TAG, "Cannot select bubble which doesn't exist!"
                     + " (" + bubble + ") bubbles=" + mBubbles);
             return;
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java
index 50a5063..fe191f4 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java
@@ -19,9 +19,9 @@
 import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
 import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
 import static android.view.Display.INVALID_DISPLAY;
-
 import static android.view.ViewRootImpl.NEW_INSETS_MODE_FULL;
 import static android.view.ViewRootImpl.sNewInsetsMode;
+
 import static com.android.systemui.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_EXPANDED_VIEW;
 import static com.android.systemui.bubbles.BubbleDebugConfig.TAG_BUBBLES;
 import static com.android.systemui.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
@@ -56,6 +56,7 @@
 import com.android.systemui.recents.TriangleShape;
 import com.android.systemui.shared.system.SysUiStatsLog;
 import com.android.systemui.statusbar.AlphaOptimizedButton;
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 
 /**
  * Container for the expanded bubble view, handles rendering the caret and settings icon.
@@ -146,7 +147,7 @@
                             // the bubble again so we'll just remove it.
                             Log.w(TAG, "Exception while displaying bubble: " + getBubbleKey()
                                     + ", " + e.getMessage() + "; removing bubble");
-                            mBubbleController.removeBubble(getBubbleKey(),
+                            mBubbleController.removeBubble(getBubbleEntry(),
                                     BubbleController.DISMISS_INVALID_INTENT);
                         }
                     });
@@ -190,7 +191,7 @@
             }
             if (mBubble != null && !mBubbleController.isUserCreatedBubble(mBubble.getKey())) {
                 // Must post because this is called from a binder thread.
-                post(() -> mBubbleController.removeBubble(mBubble.getKey(),
+                post(() -> mBubbleController.removeBubble(mBubble.getEntry(),
                         BubbleController.DISMISS_TASK_FINISHED));
             }
         }
@@ -279,6 +280,10 @@
         return mBubble != null ? mBubble.getKey() : "null";
     }
 
+    private NotificationEntry getBubbleEntry() {
+        return mBubble != null ? mBubble.getEntry() : null;
+    }
+
     void applyThemeAttrs() {
         final TypedArray ta = mContext.obtainStyledAttributes(
                 new int[] {
@@ -289,7 +294,8 @@
         ta.recycle();
 
         mPointerDrawable.setTint(bgColor);
-        if (ScreenDecorationsUtils.supportsRoundedCornersOnWindows(mContext.getResources())) {
+        if (mActivityView != null && ScreenDecorationsUtils.supportsRoundedCornersOnWindows(
+                mContext.getResources())) {
             mActivityView.setCornerRadius(cornerRadius);
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExperimentConfig.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExperimentConfig.java
index 006de84..20b3386 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExperimentConfig.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExperimentConfig.java
@@ -73,9 +73,6 @@
 
     private static final String WHITELISTED_AUTO_BUBBLE_APPS = "whitelisted_auto_bubble_apps";
 
-    private static final String ALLOW_BUBBLE_MENU = "allow_bubble_screenshot_menu";
-    private static final boolean ALLOW_BUBBLE_MENU_DEFAULT = false;
-
     private static final String ALLOW_BUBBLE_OVERFLOW = "allow_bubble_overflow";
     private static final boolean ALLOW_BUBBLE_OVERFLOW_DEFAULT = false;
 
@@ -137,16 +134,6 @@
      * When true, show a menu when a bubble is long-pressed, which will allow the user to take
      * actions on that bubble.
      */
-    static boolean allowBubbleScreenshotMenu(Context context) {
-        return Settings.Secure.getInt(context.getContentResolver(),
-                ALLOW_BUBBLE_MENU,
-                ALLOW_BUBBLE_MENU_DEFAULT ? 1 : 0) != 0;
-    }
-
-    /**
-     * When true, show a menu when a bubble is long-pressed, which will allow the user to take
-     * actions on that bubble.
-     */
     static boolean allowBubbleOverflow(Context context) {
         return Settings.Secure.getInt(context.getContentResolver(),
                 ALLOW_BUBBLE_OVERFLOW,
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleMenuView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleMenuView.java
deleted file mode 100644
index bf83065..0000000
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleMenuView.java
+++ /dev/null
@@ -1,84 +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.bubbles;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-
-import com.android.systemui.R;
-
-/**
- * Menu which allows users to take actions on bubbles, ex. screenshots.
- */
-public class BubbleMenuView extends FrameLayout {
-    private FrameLayout mMenu;
-    private boolean mShowing = false;
-
-    /** Delay before taking a screenshot once the button is tapped to allow the menu time to hide.*/
-    public static final long SCREENSHOT_DELAY = 200;
-
-    public BubbleMenuView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public BubbleMenuView(Context context) {
-        super(context);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mMenu = findViewById(R.id.bubble_menu_view);
-        ImageView icon = findViewById(com.android.internal.R.id.icon);
-        icon.setImageDrawable(mContext.getDrawable(com.android.internal.R.drawable.ic_screenshot));
-    }
-
-    /**
-     * Get the bubble menu view.
-     */
-    public View getMenuView() {
-        return mMenu;
-    }
-
-    /**
-     * Checks whether the bubble menu is currently displayed.
-     */
-    public boolean isShowing() {
-        return mShowing;
-    }
-
-    /**
-     * Show the bubble menu at the specified position on the screen.
-     */
-    public void show(float x, float y) {
-        mShowing = true;
-        this.setVisibility(VISIBLE);
-        mMenu.setTranslationX(x);
-        mMenu.setTranslationY(y);
-    }
-
-    /**
-     * Hide the bubble menu.
-     */
-    public void hide() {
-        mShowing = false;
-        this.setVisibility(GONE);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflow.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflow.java
new file mode 100644
index 0000000..6cf1086
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflow.java
@@ -0,0 +1,107 @@
+/*
+ * 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.bubbles;
+
+import static android.view.View.GONE;
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Color;
+import android.graphics.drawable.AdaptiveIconDrawable;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.InsetDrawable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+
+import com.android.systemui.R;
+
+/**
+ * Class for showing aged out bubbles.
+ */
+public class BubbleOverflow implements BubbleViewProvider {
+
+    private ImageView mOverflowBtn;
+    private BubbleExpandedView mOverflowExpandedView;
+    private LayoutInflater mInflater;
+    private Context mContext;
+
+    public BubbleOverflow(Context context) {
+        mContext = context;
+        mInflater = LayoutInflater.from(context);
+    }
+
+    public void setUpOverflow(ViewGroup parentViewGroup) {
+        mOverflowExpandedView = (BubbleExpandedView) mInflater.inflate(
+                R.layout.bubble_expanded_view, parentViewGroup /* root */,
+                false /* attachToRoot */);
+        mOverflowExpandedView.setOverflow(true);
+
+        mOverflowBtn = (ImageView) mInflater.inflate(R.layout.bubble_overflow_button,
+                parentViewGroup /* root */,
+                false /* attachToRoot */);
+
+        setOverflowBtnTheme();
+        mOverflowBtn.setVisibility(GONE);
+    }
+
+    ImageView getBtn() {
+        return mOverflowBtn;
+    }
+
+    void setBtnVisible(int visible) {
+        mOverflowBtn.setVisibility(visible);
+    }
+
+    // TODO(b/149146374) Propagate theme change to bubbles in overflow.
+    void setOverflowBtnTheme() {
+        TypedArray ta = mContext.obtainStyledAttributes(
+                new int[]{android.R.attr.colorBackgroundFloating});
+        int bgColor = ta.getColor(0, Color.WHITE /* default */);
+        ta.recycle();
+
+        InsetDrawable fg = new InsetDrawable(mOverflowBtn.getDrawable(), 28);
+        ColorDrawable bg = new ColorDrawable(bgColor);
+        AdaptiveIconDrawable adaptiveIcon = new AdaptiveIconDrawable(bg, fg);
+        mOverflowBtn.setImageDrawable(adaptiveIcon);
+    }
+
+
+    public BubbleExpandedView getExpandedView() {
+        return mOverflowExpandedView;
+    }
+
+    public void setContentVisibility(boolean visible) {
+        mOverflowExpandedView.setContentVisibility(visible);
+    }
+
+    public void logUIEvent(int bubbleCount, int action, float normalX, float normalY,
+            int index) {
+        // TODO(b/149133814) Log overflow UI events.
+    }
+
+    public View getIconView() {
+        return mOverflowBtn;
+    }
+
+    public String getKey() {
+        return BubbleOverflowActivity.KEY;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java
index bea55c8..eb836b1 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java
@@ -26,7 +26,10 @@
 import android.os.Bundle;
 import android.util.Log;
 import android.view.LayoutInflater;
+import android.view.View;
 import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.TextView;
 
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -44,13 +47,14 @@
  * Must be public to be accessible to androidx...AppComponentFactory
  */
 public class BubbleOverflowActivity extends Activity {
+    public static final String KEY = "Overflow";
     private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleOverflowActivity" : TAG_BUBBLES;
 
+    private LinearLayout mEmptyState;
     private BubbleController mBubbleController;
     private BubbleOverflowAdapter mAdapter;
     private RecyclerView mRecyclerView;
     private List<Bubble> mOverflowBubbles = new ArrayList<>();
-    private int mMaxBubbles;
 
     @Inject
     public BubbleOverflowActivity(BubbleController controller) {
@@ -63,7 +67,7 @@
         setContentView(R.layout.bubble_overflow_activity);
         setBackgroundColor();
 
-        mMaxBubbles = getResources().getInteger(R.integer.bubbles_max_rendered);
+        mEmptyState = findViewById(R.id.bubble_overflow_empty_state);
         mRecyclerView = findViewById(R.id.bubble_overflow_recycler);
         mRecyclerView.setLayoutManager(
                 new GridLayoutManager(getApplicationContext(),
@@ -73,9 +77,9 @@
                 mBubbleController::promoteBubbleFromOverflow);
         mRecyclerView.setAdapter(mAdapter);
 
-        updateData(mBubbleController.getOverflowBubbles());
+        onDataChanged(mBubbleController.getOverflowBubbles());
         mBubbleController.setOverflowCallback(() -> {
-            updateData(mBubbleController.getOverflowBubbles());
+            onDataChanged(mBubbleController.getOverflowBubbles());
         });
     }
 
@@ -87,15 +91,17 @@
         findViewById(android.R.id.content).setBackgroundColor(bgColor);
     }
 
-    void updateData(List<Bubble> bubbles) {
+    void onDataChanged(List<Bubble> bubbles) {
         mOverflowBubbles.clear();
-        if (bubbles.size() > mMaxBubbles) {
-            mOverflowBubbles.addAll(bubbles.subList(mMaxBubbles, bubbles.size()));
-        } else {
-            mOverflowBubbles.addAll(bubbles);
-        }
+        mOverflowBubbles.addAll(bubbles);
         mAdapter.notifyDataSetChanged();
 
+        if (mOverflowBubbles.isEmpty()) {
+            mEmptyState.setVisibility(View.VISIBLE);
+        } else {
+            mEmptyState.setVisibility(View.GONE);
+        }
+
         if (DEBUG_OVERFLOW) {
             Log.d(TAG, "Updated overflow bubbles:\n" + BubbleDebugConfig.formatBubblesString(
                     mOverflowBubbles, /*selected*/ null));
@@ -146,7 +152,6 @@
             int viewType) {
         BadgedImageView view = (BadgedImageView) LayoutInflater.from(parent.getContext())
                 .inflate(R.layout.bubble_view, parent, false);
-        view.setPadding(15, 15, 15, 15);
         return new ViewHolder(view);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
index 20d19ec..955edcf 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
@@ -33,8 +33,6 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.graphics.Color;
 import android.graphics.ColorMatrix;
 import android.graphics.ColorMatrixColorFilter;
 import android.graphics.Paint;
@@ -42,13 +40,9 @@
 import android.graphics.PointF;
 import android.graphics.Rect;
 import android.graphics.RectF;
-import android.graphics.drawable.AdaptiveIconDrawable;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.InsetDrawable;
 import android.os.Bundle;
 import android.os.VibrationEffect;
 import android.os.Vibrator;
-import android.service.notification.StatusBarNotification;
 import android.util.Log;
 import android.view.Choreographer;
 import android.view.DisplayCutout;
@@ -63,7 +57,6 @@
 import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
 import android.view.animation.AccelerateDecelerateInterpolator;
 import android.widget.FrameLayout;
-import android.widget.ImageView;
 
 import androidx.annotation.MainThread;
 import androidx.annotation.Nullable;
@@ -79,6 +72,7 @@
 import com.android.systemui.bubbles.animation.PhysicsAnimationLayout;
 import com.android.systemui.bubbles.animation.StackAnimationController;
 import com.android.systemui.shared.system.SysUiStatsLog;
+import com.android.systemui.util.FloatingContentCoordinator;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
@@ -115,7 +109,6 @@
     /** How long to wait, in milliseconds, before hiding the flyout. */
     @VisibleForTesting
     static final int FLYOUT_HIDE_AFTER = 5000;
-    private BubbleController.BubbleScreenshotListener mBubbleScreenshotListener;
 
     /**
      * Interface to synchronize {@link View} state and the screen.
@@ -169,7 +162,6 @@
     private ExpandedAnimationController mExpandedAnimationController;
 
     private FrameLayout mExpandedViewContainer;
-    @Nullable private BubbleMenuView mBubbleMenuView;
 
     private BubbleFlyoutView mFlyout;
     /** Runnable that fades out the flyout and then sets it to GONE. */
@@ -201,7 +193,7 @@
     private int mPointerHeight;
     private int mStatusBarHeight;
     private int mImeOffset;
-    private Bubble mExpandedBubble;
+    private BubbleViewProvider mExpandedBubble;
     private boolean mIsExpanded;
 
     /** Whether the stack is currently on the left side of the screen, or animating there. */
@@ -324,18 +316,18 @@
     private Runnable mAfterMagnet;
 
     private int mOrientation = Configuration.ORIENTATION_UNDEFINED;
-    private BubbleExpandedView mOverflowExpandedView;
-    private ImageView mOverflowBtn;
+
+    private BubbleOverflow mBubbleOverflow;
 
     public BubbleStackView(Context context, BubbleData data,
-            @Nullable SurfaceSynchronizer synchronizer) {
+            @Nullable SurfaceSynchronizer synchronizer,
+            FloatingContentCoordinator floatingContentCoordinator) {
         super(context);
 
         mBubbleData = data;
         mInflater = LayoutInflater.from(context);
         mTouchHandler = new BubbleTouchHandler(this, data, context);
         setOnTouchListener(mTouchHandler);
-        mInflater = LayoutInflater.from(context);
 
         Resources res = getResources();
         mMaxBubbles = res.getInteger(R.integer.bubbles_max_rendered);
@@ -363,7 +355,7 @@
         mExpandedViewPadding = res.getDimensionPixelSize(R.dimen.bubble_expanded_view_padding);
         int elevation = res.getDimensionPixelSize(R.dimen.bubble_elevation);
 
-        mStackAnimationController = new StackAnimationController();
+        mStackAnimationController = new StackAnimationController(floatingContentCoordinator);
 
         mExpandedAnimationController = new ExpandedAnimationController(
                 mDisplaySize, mExpandedViewPadding, res.getConfiguration().orientation);
@@ -409,12 +401,8 @@
                         .setStiffness(SpringForce.STIFFNESS_LOW)
                         .setDampingRatio(SpringForce.DAMPING_RATIO_LOW_BOUNCY));
         mExpandedViewYAnim.addEndListener((anim, cancelled, value, velocity) -> {
-            if (mIsExpanded) {
-                if (mExpandedBubble == null) {
-                    mOverflowExpandedView.updateView();
-                } else {
-                    mExpandedBubble.getExpandedView().updateView();
-                }
+            if (mIsExpanded && mExpandedBubble != null) {
+                mExpandedBubble.getExpandedView().updateView();
             }
         });
 
@@ -422,8 +410,12 @@
         setFocusable(true);
         mBubbleContainer.bringToFront();
 
+        mBubbleOverflow = new BubbleOverflow(mContext);
         if (BubbleExperimentConfig.allowBubbleOverflow(mContext)) {
-            setUpOverflow();
+            mBubbleOverflow.setUpOverflow(this);
+            mBubbleContainer.addView(mBubbleOverflow.getBtn(), 0,
+                    new FrameLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
+
         }
 
         setOnApplyWindowInsetsListener((View view, WindowInsets insets) -> {
@@ -434,9 +426,7 @@
                     // Update the insets after we're done translating otherwise position
                     // calculation for them won't be correct.
                     () -> {
-                        if (mExpandedBubble == null) {
-                            mOverflowExpandedView.updateInsets(insets);
-                        } else {
+                        if (mExpandedBubble != null) {
                             mExpandedBubble.getExpandedView().updateInsets(insets);
                         }
                     });
@@ -451,9 +441,7 @@
                     // Reposition & adjust the height for new orientation
                     if (mIsExpanded) {
                         mExpandedViewContainer.setTranslationY(getExpandedViewY());
-                        if (mExpandedBubble == null) {
-                            mOverflowExpandedView.updateView();
-                        } else {
+                        if (mExpandedBubble != null) {
                             mExpandedBubble.getExpandedView().updateView();
                         }
                     }
@@ -516,41 +504,10 @@
             mDesaturateAndDarkenPaint.setColorFilter(new ColorMatrixColorFilter(animatedMatrix));
             mDesaturateAndDarkenTargetView.setLayerPaint(mDesaturateAndDarkenPaint);
         });
-
-        mInflater.inflate(R.layout.bubble_menu_view, this);
-        mBubbleMenuView = findViewById(R.id.bubble_menu_container);
-    }
-
-    private void setUpOverflow() {
-        mOverflowExpandedView = (BubbleExpandedView) mInflater.inflate(
-                R.layout.bubble_expanded_view, this /* root */, false /* attachToRoot */);
-        mOverflowExpandedView.setOverflow(true);
-
-        mOverflowBtn = (ImageView) mInflater.inflate(R.layout.bubble_overflow_button,
-                this /* root */,
-                false /* attachToRoot */);
-
-        mBubbleContainer.addView(mOverflowBtn, 0,
-                new FrameLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-
-        TypedArray ta = mContext.obtainStyledAttributes(
-                new int[]{android.R.attr.colorBackgroundFloating});
-        int bgColor = ta.getColor(0, Color.WHITE /* default */);
-        ta.recycle();
-
-        InsetDrawable fg = new InsetDrawable(mOverflowBtn.getDrawable(), 28);
-        ColorDrawable bg = new ColorDrawable(bgColor);
-        AdaptiveIconDrawable adaptiveIcon = new AdaptiveIconDrawable(bg, fg);
-        mOverflowBtn.setImageDrawable(adaptiveIcon);
-
-        mOverflowBtn.setVisibility(GONE);
     }
 
     void showExpandedViewContents(int displayId) {
-        if (mOverflowExpandedView != null
-                && mOverflowExpandedView.getVirtualDisplayId() == displayId) {
-            mOverflowExpandedView.setContentVisibility(true);
-        } else if (mExpandedBubble != null
+        if (mExpandedBubble != null
                 && mExpandedBubble.getExpandedView().getVirtualDisplayId() == displayId) {
             mExpandedBubble.setContentVisibility(true);
         }
@@ -573,6 +530,9 @@
      */
     public void onThemeChanged() {
         setUpFlyout();
+        if (BubbleExperimentConfig.allowBubbleOverflow(mContext)) {
+            mBubbleOverflow.setOverflowBtnTheme();
+        }
     }
 
     /** Respond to the phone being rotated by repositioning the stack and hiding any flyouts. */
@@ -662,16 +622,16 @@
             mBubbleData.setExpanded(true);
             return true;
         } else if (action == R.id.action_move_top_left) {
-            mStackAnimationController.springStack(stackBounds.left, stackBounds.top);
+            mStackAnimationController.springStackAfterFling(stackBounds.left, stackBounds.top);
             return true;
         } else if (action == R.id.action_move_top_right) {
-            mStackAnimationController.springStack(stackBounds.right, stackBounds.top);
+            mStackAnimationController.springStackAfterFling(stackBounds.right, stackBounds.top);
             return true;
         } else if (action == R.id.action_move_bottom_left) {
-            mStackAnimationController.springStack(stackBounds.left, stackBounds.bottom);
+            mStackAnimationController.springStackAfterFling(stackBounds.left, stackBounds.bottom);
             return true;
         } else if (action == R.id.action_move_bottom_right) {
-            mStackAnimationController.springStack(stackBounds.right, stackBounds.bottom);
+            mStackAnimationController.springStackAfterFling(stackBounds.right, stackBounds.bottom);
             return true;
         }
         return false;
@@ -688,7 +648,7 @@
         String appName = topBubble.getAppName();
         Notification notification = topBubble.getEntry().getSbn().getNotification();
         CharSequence titleCharSeq = notification.extras.getCharSequence(Notification.EXTRA_TITLE);
-        String titleStr = getResources().getString(R.string.stream_notification);
+        String titleStr = getResources().getString(R.string.notification_bubble_title);
         if (titleCharSeq != null) {
             titleStr = titleCharSeq.toString();
         }
@@ -738,13 +698,6 @@
     }
 
     /**
-     * Sets the screenshot listener.
-     */
-    public void setBubbleScreenshotListener(BubbleController.BubbleScreenshotListener listener) {
-        mBubbleScreenshotListener = listener;
-    }
-
-    /**
      * Whether the stack of bubbles is expanded or not.
      */
     public boolean isExpanded() {
@@ -761,15 +714,22 @@
     /**
      * The {@link BadgedImageView} that is expanded, null if one does not exist.
      */
-    BadgedImageView getExpandedBubbleView() {
+    View getExpandedBubbleView() {
         return mExpandedBubble != null ? mExpandedBubble.getIconView() : null;
     }
 
     /**
      * The {@link Bubble} that is expanded, null if one does not exist.
      */
+    @Nullable
     Bubble getExpandedBubble() {
-        return mExpandedBubble;
+        if (mExpandedBubble == null
+                || (BubbleExperimentConfig.allowBubbleOverflow(mContext)
+                    && mExpandedBubble.getIconView() == mBubbleOverflow.getBtn()
+                    && mExpandedBubble.getKey() == BubbleOverflowActivity.KEY)) {
+            return null;
+        }
+        return (Bubble) mExpandedBubble;
     }
 
     // via BubbleData.Listener
@@ -807,6 +767,7 @@
         if (removedIndex >= 0) {
             mBubbleContainer.removeViewAt(removedIndex);
             bubble.cleanupExpandedState();
+            bubble.setInflated(false);
             logBubbleEvent(bubble, SysUiStatsLog.BUBBLE_UICHANGED__ACTION__DISMISSED);
         } else {
             Log.d(TAG, "was asked to remove Bubble, but didn't find the view! " + bubble);
@@ -822,7 +783,7 @@
             if (DEBUG_BUBBLE_STACK_VIEW) {
                 Log.d(TAG, "Show overflow button.");
             }
-            mOverflowBtn.setVisibility(VISIBLE);
+            mBubbleOverflow.setBtnVisible(VISIBLE);
             if (apply) {
                 mExpandedAnimationController.expandFromStack(() -> {
                     updatePointerPosition();
@@ -832,7 +793,7 @@
             if (DEBUG_BUBBLE_STACK_VIEW) {
                 Log.d(TAG, "Collapsed. Hide overflow button.");
             }
-            mOverflowBtn.setVisibility(GONE);
+            mBubbleOverflow.setBtnVisible(GONE);
         }
     }
 
@@ -853,7 +814,7 @@
     }
 
     void showOverflow() {
-        setSelectedBubble(null);
+        setSelectedBubble(mBubbleOverflow);
     }
 
     /**
@@ -862,14 +823,14 @@
      * position of any bubble.
      */
     // via BubbleData.Listener
-    public void setSelectedBubble(@Nullable Bubble bubbleToSelect) {
+    public void setSelectedBubble(@Nullable BubbleViewProvider bubbleToSelect) {
         if (DEBUG_BUBBLE_STACK_VIEW) {
             Log.d(TAG, "setSelectedBubble: " + bubbleToSelect);
         }
         if (mExpandedBubble != null && mExpandedBubble.equals(bubbleToSelect)) {
             return;
         }
-        final Bubble previouslySelected = mExpandedBubble;
+        final BubbleViewProvider previouslySelected = mExpandedBubble;
         mExpandedBubble = bubbleToSelect;
 
         if (mIsExpanded) {
@@ -878,14 +839,11 @@
             // expanded view becomes visible on the screen. See b/126856255
             mExpandedViewContainer.setAlpha(0.0f);
             mSurfaceSynchronizer.syncSurfaceAndRun(() -> {
-                if (previouslySelected == null) {
-                    mOverflowExpandedView.setContentVisibility(false);
-                } else {
-                    previouslySelected.setContentVisibility(false);
-                }
+                previouslySelected.setContentVisibility(false);
                 updateExpandedBubble();
                 updatePointerPosition();
                 requestUpdate();
+
                 logBubbleEvent(previouslySelected,
                         SysUiStatsLog.BUBBLE_UICHANGED__ACTION__COLLAPSED);
                 logBubbleEvent(bubbleToSelect, SysUiStatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED);
@@ -942,17 +900,11 @@
     public View getTargetView(MotionEvent event) {
         float x = event.getRawX();
         float y = event.getRawY();
-        if (mBubbleMenuView.isShowing()) {
-            if (isIntersecting(mBubbleMenuView.getMenuView(), x, y)) {
-                return mBubbleMenuView;
-            }
-            return null;
-        }
         if (mIsExpanded) {
             if (isIntersecting(mBubbleContainer, x, y)) {
                 if (BubbleExperimentConfig.allowBubbleOverflow(mContext)
-                        && isIntersecting(mOverflowBtn, x, y)) {
-                    return mOverflowBtn;
+                        && isIntersecting(mBubbleOverflow.getBtn(), x, y)) {
+                    return mBubbleOverflow.getBtn();
                 }
                 // Could be tapping or dragging a bubble while expanded
                 for (int i = 0; i < getBubbleCount(); i++) {
@@ -1040,7 +992,7 @@
 
     private void animateCollapse() {
         mIsExpanded = false;
-        final Bubble previouslySelected = mExpandedBubble;
+        final BubbleViewProvider previouslySelected = mExpandedBubble;
         beforeExpandedViewAnimation();
 
         if (DEBUG_BUBBLE_STACK_VIEW) {
@@ -1056,11 +1008,7 @@
                 () -> {
                     mBubbleContainer.setActiveController(mStackAnimationController);
                     afterExpandedViewAnimation();
-                    if (previouslySelected == null) {
-                        mOverflowExpandedView.setContentVisibility(false);
-                    } else {
-                        previouslySelected.setContentVisibility(false);
-                    }
+                    previouslySelected.setContentVisibility(false);
                 });
 
         mExpandedViewXAnim.animateToFinalPosition(getCollapsedX());
@@ -1103,7 +1051,7 @@
                 mExpandedAnimateYDistance);
     }
 
-    private void notifyExpansionChanged(Bubble bubble, boolean expanded) {
+    private void notifyExpansionChanged(BubbleViewProvider bubble, boolean expanded) {
         if (mExpandListener != null && bubble != null) {
             mExpandListener.onBubbleExpandChanged(expanded, bubble.getKey());
         }
@@ -1168,7 +1116,6 @@
             }
             return;
         }
-        hideBubbleMenu();
         mStackAnimationController.cancelStackPositionAnimations();
         mBubbleContainer.setActiveController(mStackAnimationController);
         hideFlyoutImmediate();
@@ -1570,10 +1517,6 @@
     @Override
     public void getBoundsOnScreen(Rect outRect) {
         // If the bubble menu is open, the entire screen should capture touch events.
-        if (mBubbleMenuView.isShowing()) {
-            outRect.set(0, 0, getWidth(), getHeight());
-            return;
-        }
         if (!mIsExpanded) {
             if (getBubbleCount() > 0) {
                 mBubbleContainer.getChildAt(0).getBoundsOnScreen(outRect);
@@ -1628,11 +1571,8 @@
             Log.d(TAG, "updateExpandedBubble()");
         }
         mExpandedViewContainer.removeAllViews();
-        if (mIsExpanded) {
-            BubbleExpandedView bev = mOverflowExpandedView;
-            if (mExpandedBubble != null) {
-                bev = mExpandedBubble.getExpandedView();
-            }
+        if (mIsExpanded && mExpandedBubble != null) {
+            BubbleExpandedView bev = mExpandedBubble.getExpandedView();
             mExpandedViewContainer.addView(bev);
             bev.populateExpandedView();
             mExpandedViewContainer.setVisibility(VISIBLE);
@@ -1651,9 +1591,7 @@
             if (!mExpandedViewYAnim.isRunning()) {
                 // We're not animating so set the value
                 mExpandedViewContainer.setTranslationY(y);
-                if (mExpandedBubble == null) {
-                    mOverflowExpandedView.updateView();
-                } else {
+                if (mExpandedBubble != null) {
                     mExpandedBubble.getExpandedView().updateView();
                 }
             } else {
@@ -1708,15 +1646,16 @@
     /**
      * Finds the bubble index within the stack.
      *
-     * @param bubble the bubble to look up.
+     * @param provider the bubble view provider with the bubble to look up.
      * @return the index of the bubble view within the bubble stack. The range of the position
      * is between 0 and the bubble count minus 1.
      */
-    int getBubbleIndex(@Nullable Bubble bubble) {
-        if (bubble == null) {
+    int getBubbleIndex(@Nullable BubbleViewProvider provider) {
+        if (provider == null || provider.getKey() == BubbleOverflowActivity.KEY) {
             return 0;
         }
-        return mBubbleContainer.indexOfChild(bubble.getIconView());
+        Bubble b = (Bubble) provider;
+        return mBubbleContainer.indexOfChild(b.getIconView());
     }
 
     /**
@@ -1748,36 +1687,12 @@
      *               the user interaction is not specific to one bubble.
      * @param action the user interaction enum.
      */
-    private void logBubbleEvent(@Nullable Bubble bubble, int action) {
-        if (bubble == null || bubble.getEntry() == null
-                || bubble.getEntry().getSbn() == null) {
-            SysUiStatsLog.write(SysUiStatsLog.BUBBLE_UI_CHANGED,
-                    null /* package name */,
-                    null /* notification channel */,
-                    0 /* notification ID */,
-                    0 /* bubble position */,
-                    getBubbleCount(),
-                    action,
-                    getNormalizedXPosition(),
-                    getNormalizedYPosition(),
-                    false /* unread bubble */,
-                    false /* on-going bubble */,
-                    false /* isAppForeground (unused) */);
-        } else {
-            StatusBarNotification notification = bubble.getEntry().getSbn();
-            SysUiStatsLog.write(SysUiStatsLog.BUBBLE_UI_CHANGED,
-                    notification.getPackageName(),
-                    notification.getNotification().getChannelId(),
-                    notification.getId(),
-                    getBubbleIndex(bubble),
-                    getBubbleCount(),
-                    action,
-                    getNormalizedXPosition(),
-                    getNormalizedYPosition(),
-                    bubble.showInShade(),
-                    bubble.isOngoing(),
-                    false /* isAppForeground (unused) */);
+    private void logBubbleEvent(@Nullable BubbleViewProvider bubble, int action) {
+        if (bubble == null) {
+            return;
         }
+        bubble.logUIEvent(getBubbleCount(), action, getNormalizedXPosition(),
+                getNormalizedYPosition(), getBubbleIndex(bubble));
     }
 
     /**
@@ -1785,14 +1700,10 @@
      * a back key down/up event pair is forwarded to the bubble Activity.
      */
     boolean performBackPressIfNeeded() {
-        if (!isExpanded()) {
+        if (!isExpanded() || mExpandedBubble == null) {
             return false;
         }
-        if (mExpandedBubble == null) {
-            return mOverflowExpandedView.performBackPressIfNeeded();
-        } else {
-            return mExpandedBubble.getExpandedView().performBackPressIfNeeded();
-        }
+        return mExpandedBubble.getExpandedView().performBackPressIfNeeded();
     }
 
     /** For debugging only */
@@ -1808,50 +1719,4 @@
         }
         return bubbles;
     }
-
-    /**
-     * Show the bubble menu, positioned relative to the stack.
-     */
-    public void showBubbleMenu() {
-        PointF currentPos = mStackAnimationController.getStackPosition();
-        mBubbleMenuView.setVisibility(View.INVISIBLE);
-        post(() -> {
-            float yPos = currentPos.y;
-            float xPos = currentPos.x;
-            if (mStackAnimationController.isStackOnLeftSide()) {
-                xPos += mBubbleSize;
-            } else {
-                xPos -= mBubbleMenuView.getMenuView().getWidth();
-            }
-
-            mBubbleMenuView.show(xPos, yPos);
-        });
-    }
-
-    /**
-     * Hide the bubble menu.
-     */
-    public void hideBubbleMenu() {
-        mBubbleMenuView.hide();
-    }
-
-    /**
-     * Determines whether the bubble menu is currently showing.
-     */
-    public boolean isShowingBubbleMenu() {
-        return mBubbleMenuView.isShowing();
-    }
-
-    /**
-     * Take a screenshot and send it to the specified bubble.
-     */
-    public void sendScreenshotToBubble(Bubble bubble) {
-        hideBubbleMenu();
-        // delay allows the bubble menu to disappear before the screenshot
-        // done here because we already have a Handler to delay with.
-        // TODO: Hide bubble + menu UI from screenshots entirely instead of just delaying.
-        postDelayed(() -> {
-            mBubbleScreenshotListener.onBubbleScreenshot(bubble);
-        }, BubbleMenuView.SCREENSHOT_DELAY);
-    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleTouchHandler.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleTouchHandler.java
index 5a9d44b..645696d0 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleTouchHandler.java
@@ -58,14 +58,12 @@
     private final PointF mViewPositionOnTouchDown = new PointF();
     private final BubbleStackView mStack;
     private final BubbleData mBubbleData;
-    private final Context mContext;
 
     private BubbleController mController = Dependency.get(BubbleController.class);
 
     private boolean mMovedEnough;
     private int mTouchSlopSquared;
     private VelocityTracker mVelocityTracker;
-    private Runnable mShowBubbleMenuRunnable;
 
     /** View that was initially touched, when we received the first ACTION_DOWN event. */
     private View mTouchedView;
@@ -78,7 +76,6 @@
         mTouchSlopSquared = touchSlop * touchSlop;
         mBubbleData = bubbleData;
         mStack = stackView;
-        mContext = context;
     }
 
     @Override
@@ -95,18 +92,10 @@
         // anything, collapse the stack.
         if (action == MotionEvent.ACTION_OUTSIDE || mTouchedView == null) {
             mBubbleData.setExpanded(false);
-            mStack.hideBubbleMenu();
             resetForNextGesture();
             return false;
         }
 
-        if (mTouchedView instanceof BubbleMenuView) {
-            mStack.hideBubbleMenu();
-            resetForNextGesture();
-            mStack.sendScreenshotToBubble(mBubbleData.getSelectedBubble());
-            return false;
-        }
-
         if (!(mTouchedView instanceof BadgedImageView)
                 && !(mTouchedView instanceof BubbleStackView)
                 && !(mTouchedView instanceof BubbleFlyoutView)) {
@@ -116,7 +105,6 @@
             }
             // Not touching anything touchable, but we shouldn't collapse (e.g. touching edge
             // of expanded view).
-            mStack.hideBubbleMenu();
             resetForNextGesture();
             return false;
         }
@@ -139,12 +127,6 @@
                 if (isStack) {
                     mViewPositionOnTouchDown.set(mStack.getStackPosition());
                     mStack.onDragStart();
-                    if (!mStack.isShowingBubbleMenu() && !mStack.isExpanded()
-                            && BubbleExperimentConfig.allowBubbleScreenshotMenu(mContext)) {
-                        mShowBubbleMenuRunnable = mStack::showBubbleMenu;
-                        mStack.postDelayed(mShowBubbleMenuRunnable,
-                                ViewConfiguration.getLongPressTimeout());
-                    }
                 } else if (isFlyout) {
                     mStack.onFlyoutDragStart();
                 } else {
@@ -155,10 +137,6 @@
 
                 break;
             case MotionEvent.ACTION_MOVE:
-                // block all further touch inputs once the menu is open
-                if (mStack.isShowingBubbleMenu()) {
-                    return true;
-                }
                 trackMovement(event);
                 final float deltaX = rawX - mTouchDown.x;
                 final float deltaY = rawY - mTouchDown.y;
@@ -168,7 +146,6 @@
                 }
 
                 if (mMovedEnough) {
-                    mStack.removeCallbacks(mShowBubbleMenuRunnable);
                     if (isStack) {
                         mStack.onDragged(viewX, viewY);
                     } else if (isFlyout) {
@@ -199,12 +176,6 @@
                 break;
 
             case MotionEvent.ACTION_UP:
-                if (mStack.isShowingBubbleMenu()) {
-                    resetForNextGesture();
-                    return true;
-                } else {
-                    mStack.removeCallbacks(mShowBubbleMenuRunnable);
-                }
                 trackMovement(event);
                 mVelocityTracker.computeCurrentVelocity(/* maxVelocity */ 1000);
                 final float velX = mVelocityTracker.getXVelocity();
@@ -227,9 +198,14 @@
                                 if (isStack) {
                                     mController.dismissStack(BubbleController.DISMISS_USER_GESTURE);
                                 } else {
-                                    mController.removeBubble(
-                                            individualBubbleKey,
-                                            BubbleController.DISMISS_USER_GESTURE);
+                                    final Bubble bubble =
+                                            mBubbleData.getBubbleWithKey(individualBubbleKey);
+                                    // bubble can be null if the user is in the middle of
+                                    // dismissing the bubble, but the app also sent a cancel
+                                    if (bubble != null) {
+                                        mController.removeBubble(bubble.getEntry(),
+                                                BubbleController.DISMISS_USER_GESTURE);
+                                    }
                                 }
                             });
                 } else if (isFlyout) {
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleViewProvider.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleViewProvider.java
new file mode 100644
index 0000000..59fc435
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleViewProvider.java
@@ -0,0 +1,30 @@
+/*
+ * 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.bubbles;
+
+import android.view.View;
+
+/**
+ * Interface to represent actual Bubbles and UI elements that act like bubbles, like BubbleOverflow.
+ */
+interface BubbleViewProvider {
+    BubbleExpandedView getExpandedView();
+    void setContentVisibility(boolean visible);
+    View getIconView();
+    void logUIEvent(int bubbleCount, int action, float normalX, float normalY, int index);
+    String getKey();
+}
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/animation/StackAnimationController.java b/packages/SystemUI/src/com/android/systemui/bubbles/animation/StackAnimationController.java
index 793f8b9..60c8c4e 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/animation/StackAnimationController.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/animation/StackAnimationController.java
@@ -16,8 +16,10 @@
 
 package com.android.systemui.bubbles.animation;
 
+import android.annotation.NonNull;
 import android.content.res.Resources;
 import android.graphics.PointF;
+import android.graphics.Rect;
 import android.graphics.RectF;
 import android.util.Log;
 import android.view.View;
@@ -31,6 +33,8 @@
 import androidx.dynamicanimation.animation.SpringForce;
 
 import com.android.systemui.R;
+import com.android.systemui.util.FloatingContentCoordinator;
+import com.android.systemui.util.animation.PhysicsAnimator;
 
 import com.google.android.collect.Sets;
 
@@ -95,6 +99,12 @@
      */
     private PointF mStackPosition = new PointF(-1, -1);
 
+    /**
+     * The area that Bubbles will occupy after all animations end. This is used to move other
+     * floating content out of the way proactively.
+     */
+    private Rect mAnimatingToBounds = new Rect();
+
     /** Whether or not the stack's start position has been set. */
     private boolean mStackMovedToStartPosition = false;
 
@@ -163,11 +173,70 @@
     /** Height of the status bar. */
     private float mStatusBarHeight;
 
+    /** FloatingContentCoordinator instance for resolving floating content conflicts. */
+    private FloatingContentCoordinator mFloatingContentCoordinator;
+
+    /**
+     * FloatingContent instance that returns the stack's location on the screen, and moves it when
+     * requested.
+     */
+    private final FloatingContentCoordinator.FloatingContent mStackFloatingContent =
+            new FloatingContentCoordinator.FloatingContent() {
+
+        private final Rect mFloatingBoundsOnScreen = new Rect();
+
+        @Override
+        public void moveToBounds(@NonNull Rect bounds) {
+            springStack(bounds.left, bounds.top, SpringForce.STIFFNESS_LOW);
+        }
+
+        @NonNull
+        @Override
+        public Rect getAllowedFloatingBoundsRegion() {
+            final Rect floatingBounds = getFloatingBoundsOnScreen();
+            final Rect allowableStackArea = new Rect();
+            getAllowableStackPositionRegion().roundOut(allowableStackArea);
+            allowableStackArea.right += floatingBounds.width();
+            allowableStackArea.bottom += floatingBounds.height();
+            return allowableStackArea;
+        }
+
+        @NonNull
+        @Override
+        public Rect getFloatingBoundsOnScreen() {
+            if (!mAnimatingToBounds.isEmpty()) {
+                return mAnimatingToBounds;
+            }
+
+            if (mLayout.getChildCount() > 0) {
+                // Calculate the bounds using stack position + bubble size so that we don't need to
+                // wait for the bubble views to lay out.
+                mFloatingBoundsOnScreen.set(
+                        (int) mStackPosition.x,
+                        (int) mStackPosition.y,
+                        (int) mStackPosition.x + mBubbleSize,
+                        (int) mStackPosition.y + mBubbleSize + mBubblePaddingTop);
+            } else {
+                mFloatingBoundsOnScreen.setEmpty();
+            }
+
+            return mFloatingBoundsOnScreen;
+        }
+    };
+
+    public StackAnimationController(
+            FloatingContentCoordinator floatingContentCoordinator) {
+        mFloatingContentCoordinator = floatingContentCoordinator;
+    }
+
     /**
      * Instantly move the first bubble to the given point, and animate the rest of the stack behind
      * it with the 'following' effect.
      */
     public void moveFirstBubbleWithStackFollowing(float x, float y) {
+        // If we're moving the bubble around, we're not animating to any bounds.
+        mAnimatingToBounds.setEmpty();
+
         // If we manually move the bubbles with the IME open, clear the return point since we don't
         // want the stack to snap away from the new position.
         mPreImeY = Float.MIN_VALUE;
@@ -204,23 +273,33 @@
      * Note that we need new SpringForce instances per animation despite identical configs because
      * SpringAnimation uses SpringForce's internal (changing) velocity while the animation runs.
      */
-    public void springStack(float destinationX, float destinationY) {
+    public void springStack(float destinationX, float destinationY, float stiffness) {
+        notifyFloatingCoordinatorStackAnimatingTo(destinationX, destinationY);
+
         springFirstBubbleWithStackFollowing(DynamicAnimation.TRANSLATION_X,
                 new SpringForce()
-                        .setStiffness(SPRING_AFTER_FLING_STIFFNESS)
+                        .setStiffness(stiffness)
                         .setDampingRatio(SPRING_AFTER_FLING_DAMPING_RATIO),
                 0 /* startXVelocity */,
                 destinationX);
 
         springFirstBubbleWithStackFollowing(DynamicAnimation.TRANSLATION_Y,
                 new SpringForce()
-                        .setStiffness(SPRING_AFTER_FLING_STIFFNESS)
+                        .setStiffness(stiffness)
                         .setDampingRatio(SPRING_AFTER_FLING_DAMPING_RATIO),
                 0 /* startYVelocity */,
                 destinationY);
     }
 
     /**
+     * Springs the stack to the specified x/y coordinates, with the stiffness used for springs after
+     * flings.
+     */
+    public void springStackAfterFling(float destinationX, float destinationY) {
+        springStack(destinationX, destinationY, SPRING_AFTER_FLING_STIFFNESS);
+    }
+
+    /**
      * Flings the stack starting with the given velocities, springing it to the nearest edge
      * afterward.
      *
@@ -253,6 +332,13 @@
         final float minimumVelocityToReachEdge =
                 (destinationRelativeX - x) * (FLING_FRICTION_X * 4.2f);
 
+        final float estimatedY = PhysicsAnimator.estimateFlingEndValue(
+                mStackPosition.y, velY,
+                new PhysicsAnimator.FlingConfig(
+                        FLING_FRICTION_Y, stackBounds.top, stackBounds.bottom));
+
+        notifyFloatingCoordinatorStackAnimatingTo(destinationRelativeX, estimatedY);
+
         // Use the touch event's velocity if it's sufficient, otherwise use the minimum velocity so
         // that it'll make it all the way to the side of the screen.
         final float startXVelocity = stackShouldFlingLeft
@@ -426,14 +512,28 @@
                             .setStiffness(SpringForce.STIFFNESS_LOW),
                     /* startVel */ 0f,
                     destinationY);
+
+            notifyFloatingCoordinatorStackAnimatingTo(mStackPosition.x, destinationY);
         }
     }
 
     /**
-     * Returns the region within which the stack is allowed to rest. This goes slightly off the left
+     * Notifies the floating coordinator that we're moving, and sets {@link #mAnimatingToBounds} so
+     * we return these bounds from
+     * {@link FloatingContentCoordinator.FloatingContent#getFloatingBoundsOnScreen()}.
+     */
+    private void notifyFloatingCoordinatorStackAnimatingTo(float x, float y) {
+        final Rect floatingBounds = mStackFloatingContent.getFloatingBoundsOnScreen();
+        floatingBounds.offsetTo((int) x, (int) y);
+        mAnimatingToBounds = floatingBounds;
+        mFloatingContentCoordinator.onContentMoved(mStackFloatingContent);
+    }
+
+    /**
+     * Returns the region that the stack position must stay within. This goes slightly off the left
      * and right sides of the screen, below the status bar/cutout and above the navigation bar.
-     * While the stack is not allowed to rest outside of these bounds, it can temporarily be
-     * animated or dragged beyond them.
+     * While the stack position is not allowed to rest outside of these bounds, it can temporarily
+     * be animated or dragged beyond them.
      */
     public RectF getAllowableStackPositionRegion() {
         final WindowInsets insets = mLayout.getRootWindowInsets();
@@ -690,6 +790,10 @@
             setStackPosition(mRestingStackPosition == null
                     ? getDefaultStartPosition()
                     : mRestingStackPosition);
+
+            // Remove the stack from the coordinator since we don't have any bubbles and aren't
+            // visible.
+            mFloatingContentCoordinator.onContentRemoved(mStackFloatingContent);
         }
     }
 
@@ -741,6 +845,10 @@
 
             // Animate in the top bubble now that we're visible.
             if (mLayout.getChildCount() > 0) {
+                // Add the stack to the floating content coordinator now that we have a bubble and
+                // are visible.
+                mFloatingContentCoordinator.onContentAdded(mStackFloatingContent);
+
                 animateInBubble(mLayout.getChildAt(0), 0 /* index */);
             }
         });
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/dagger/BubbleModule.java b/packages/SystemUI/src/com/android/systemui/bubbles/dagger/BubbleModule.java
new file mode 100644
index 0000000..f057d0b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/dagger/BubbleModule.java
@@ -0,0 +1,84 @@
+/*
+ * 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.bubbles.dagger;
+
+import android.content.Context;
+
+import com.android.systemui.DumpController;
+import com.android.systemui.bubbles.BubbleController;
+import com.android.systemui.bubbles.BubbleData;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.FeatureFlags;
+import com.android.systemui.statusbar.NotificationLockscreenUserManager;
+import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
+import com.android.systemui.statusbar.notification.collection.NotifPipeline;
+import com.android.systemui.statusbar.phone.NotificationGroupManager;
+import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
+import com.android.systemui.statusbar.phone.ShadeController;
+import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.ZenModeController;
+import com.android.systemui.util.FloatingContentCoordinator;
+
+import javax.inject.Singleton;
+
+import dagger.Module;
+import dagger.Provides;
+
+/** */
+@Module
+public interface BubbleModule {
+
+    /**
+     */
+    @Singleton
+    @Provides
+    static BubbleController newBubbleController(
+            Context context,
+            NotificationShadeWindowController notificationShadeWindowController,
+            StatusBarStateController statusBarStateController,
+            ShadeController shadeController,
+            BubbleData data,
+            ConfigurationController configurationController,
+            NotificationInterruptionStateProvider interruptionStateProvider,
+            ZenModeController zenModeController,
+            NotificationLockscreenUserManager notifUserManager,
+            NotificationGroupManager groupManager,
+            NotificationEntryManager entryManager,
+            NotifPipeline notifPipeline,
+            FeatureFlags featureFlags,
+            DumpController dumpController,
+            FloatingContentCoordinator floatingContentCoordinator) {
+        return new BubbleController(
+                context,
+                notificationShadeWindowController,
+                statusBarStateController,
+                shadeController,
+                data,
+                /* synchronizer */null,
+                configurationController,
+                interruptionStateProvider,
+                zenModeController,
+                notifUserManager,
+                groupManager,
+                entryManager,
+                notifPipeline,
+                featureFlags,
+                dumpController,
+                floatingContentCoordinator);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java
index 099909d..e105795a 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java
@@ -35,7 +35,7 @@
     private boolean mIsReportingEnabled;
 
     @Override
-    public void onSucccessfulUnlock() {
+    public void onSuccessfulUnlock() {
 
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java
index d6faed5..6a64c83 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java
@@ -375,7 +375,7 @@
         sessionExitpoint(false /* force */);
     }
 
-    public void onSucccessfulUnlock() {
+    public void onSuccessfulUnlock() {
         if (FalsingLog.ENABLED) {
             FalsingLog.i("onSucccessfulUnlock", "");
         }
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java
index b2131e7..0db9ffc 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java
@@ -25,9 +25,12 @@
 import android.util.DisplayMetrics;
 import android.view.MotionEvent;
 
+import androidx.annotation.NonNull;
+
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.systemui.Dependency;
+import com.android.systemui.DumpController;
+import com.android.systemui.Dumpable;
 import com.android.systemui.classifier.brightline.BrightLineFalsingManager;
 import com.android.systemui.classifier.brightline.FalsingDataProvider;
 import com.android.systemui.dagger.qualifiers.Main;
@@ -40,6 +43,7 @@
 import com.android.systemui.util.DeviceConfigProxy;
 import com.android.systemui.util.sensors.ProximitySensor;
 
+import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.concurrent.Executor;
 
@@ -52,7 +56,7 @@
  * {@link FalsingManagerImpl} is used when a Plugin is not loaded.
  */
 @Singleton
-public class FalsingManagerProxy implements FalsingManager {
+public class FalsingManagerProxy implements FalsingManager, Dumpable {
 
     private static final String PROXIMITY_SENSOR_TAG = "FalsingManager";
 
@@ -63,16 +67,20 @@
     private final DeviceConfigProxy mDeviceConfig;
     private boolean mBrightlineEnabled;
     private final DockManager mDockManager;
+    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
     private Executor mUiBgExecutor;
 
     @Inject
     FalsingManagerProxy(Context context, PluginManager pluginManager, @Main Executor executor,
             DisplayMetrics displayMetrics, ProximitySensor proximitySensor,
             DeviceConfigProxy deviceConfig, DockManager dockManager,
+            KeyguardUpdateMonitor keyguardUpdateMonitor,
+            DumpController dumpController,
             @UiBackground Executor uiBgExecutor) {
         mDisplayMetrics = displayMetrics;
         mProximitySensor = proximitySensor;
         mDockManager = dockManager;
+        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
         mUiBgExecutor = uiBgExecutor;
         mProximitySensor.setTag(PROXIMITY_SENSOR_TAG);
         mProximitySensor.setSensorDelay(SensorManager.SENSOR_DELAY_GAME);
@@ -101,6 +109,8 @@
         };
 
         pluginManager.addPluginListener(mPluginListener, FalsingPlugin.class);
+
+        dumpController.registerDumpable("FalsingManager", this);
     }
 
     private void onDeviceConfigPropertiesChanged(Context context, String namespace) {
@@ -130,7 +140,7 @@
         } else {
             mInternalFalsingManager = new BrightLineFalsingManager(
                     new FalsingDataProvider(mDisplayMetrics),
-                    Dependency.get(KeyguardUpdateMonitor.class),
+                    mKeyguardUpdateMonitor,
                     mProximitySensor,
                     mDeviceConfig,
                     mDockManager
@@ -147,8 +157,8 @@
     }
 
     @Override
-    public void onSucccessfulUnlock() {
-        mInternalFalsingManager.onSucccessfulUnlock();
+    public void onSuccessfulUnlock() {
+        mInternalFalsingManager.onSuccessfulUnlock();
     }
 
     @Override
@@ -322,6 +332,11 @@
     }
 
     @Override
+    public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
+        mInternalFalsingManager.dump(pw);
+    }
+
+    @Override
     public void dump(PrintWriter pw) {
         mInternalFalsingManager.dump(pw);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java b/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java
index b2e61a2..2f3e336 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java
@@ -21,6 +21,7 @@
 
 import android.hardware.biometrics.BiometricSourceType;
 import android.net.Uri;
+import android.os.Build;
 import android.util.Log;
 import android.view.MotionEvent;
 
@@ -40,15 +41,19 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Queue;
+import java.util.StringJoiner;
+import java.util.stream.Collectors;
 
 /**
  * FalsingManager designed to make clear why a touch was rejected.
  */
 public class BrightLineFalsingManager implements FalsingManager {
 
-    static final boolean DEBUG = false;
     private static final String TAG = "FalsingManager";
-    private static final int RECENT_INFO_LOG_SIZE = 20;
+    static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+    private static final int RECENT_INFO_LOG_SIZE = 40;
+    private static final int RECENT_SWIPE_LOG_SIZE = 20;
 
     private final FalsingDataProvider mDataProvider;
     private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -62,6 +67,8 @@
     private boolean mJustUnlockedWithFace;
     private static final Queue<String> RECENT_INFO_LOG =
             new ArrayDeque<>(RECENT_INFO_LOG_SIZE + 1);
+    private static final Queue<DebugSwipeRecord> RECENT_SWIPES =
+            new ArrayDeque<>(RECENT_SWIPE_LOG_SIZE + 1);
 
     private final List<FalsingClassifier> mClassifiers;
 
@@ -78,6 +85,7 @@
                     }
                 }
             };
+    private boolean mPreviousResult = false;
 
     public BrightLineFalsingManager(FalsingDataProvider falsingDataProvider,
             KeyguardUpdateMonitor keyguardUpdateMonitor, ProximitySensor proximitySensor,
@@ -138,7 +146,7 @@
 
     private void updateInteractionType(@Classifier.InteractionType int type) {
         logDebug("InteractionType: " + type);
-        mClassifiers.forEach((classifier) -> classifier.setInteractionType(type));
+        mDataProvider.setInteractionType(type);
     }
 
     @Override
@@ -148,7 +156,11 @@
 
     @Override
     public boolean isFalseTouch() {
-        boolean r = !mJustUnlockedWithFace && !mDockManager.isDocked()
+        if (!mDataProvider.isDirty()) {
+            return mPreviousResult;
+        }
+
+        mPreviousResult = !mJustUnlockedWithFace && !mDockManager.isDocked()
                 && mClassifiers.stream().anyMatch(falsingClassifier -> {
                     boolean result = falsingClassifier.isFalseTouch();
                     if (result) {
@@ -167,9 +179,26 @@
                     return result;
                 });
 
-        logDebug("Is false touch? " + r);
+        logDebug("Is false touch? " + mPreviousResult);
 
-        return r;
+        if (Build.IS_ENG || Build.IS_USERDEBUG) {
+            // Copy motion events, as the passed in list gets emptied out elsewhere in the code.
+            RECENT_SWIPES.add(new DebugSwipeRecord(
+                    mPreviousResult,
+                    mDataProvider.getInteractionType(),
+                    mDataProvider.getRecentMotionEvents().stream().map(
+                            motionEvent -> new XYDt(
+                                    (int) motionEvent.getX(),
+                                    (int) motionEvent.getY(),
+                                    (int) (motionEvent.getEventTime() - motionEvent.getDownTime())))
+                            .collect(Collectors.toList())));
+            while (RECENT_SWIPES.size() > RECENT_INFO_LOG_SIZE) {
+                DebugSwipeRecord record = RECENT_SWIPES.remove();
+            }
+
+        }
+
+        return mPreviousResult;
     }
 
     @Override
@@ -187,7 +216,7 @@
     }
 
     @Override
-    public void onSucccessfulUnlock() {
+    public void onSuccessfulUnlock() {
         if (mIsFalseTouchCalls != 0) {
             mMetricsLogger.histogram(FALSING_SUCCESS, mIsFalseTouchCalls);
             mIsFalseTouchCalls = 0;
@@ -212,7 +241,6 @@
     @Override
     public void onNotificatonStartDraggingDown() {
         updateInteractionType(Classifier.NOTIFICATION_DRAG_DOWN);
-
     }
 
     @Override
@@ -235,7 +263,12 @@
     }
 
     @Override
-    public void setQsExpanded(boolean b) {
+    public void setQsExpanded(boolean expanded) {
+        if (expanded) {
+            unregisterSensors();
+        } else if (mSessionStarted) {
+            registerSensors();
+        }
     }
 
     @Override
@@ -338,25 +371,49 @@
 
     @Override
     public void onBouncerShown() {
+        unregisterSensors();
     }
 
     @Override
     public void onBouncerHidden() {
+        if (mSessionStarted) {
+            registerSensors();
+        }
     }
 
     @Override
     public void dump(PrintWriter pw) {
         IndentingPrintWriter ipw = new IndentingPrintWriter(pw, "  ");
         ipw.println("BRIGHTLINE FALSING MANAGER");
-        ipw.print("classifierEnabled="); pw.println(isClassifierEnabled() ? 1 : 0);
-        ipw.print("mJustUnlockedWithFace="); pw.println(mJustUnlockedWithFace ? 1 : 0);
-        ipw.print("isDocked="); pw.println(mDockManager.isDocked() ? 1 : 0);
+        ipw.print("classifierEnabled=");
+        ipw.println(isClassifierEnabled() ? 1 : 0);
+        ipw.print("mJustUnlockedWithFace=");
+        ipw.println(mJustUnlockedWithFace ? 1 : 0);
+        ipw.print("isDocked=");
+        ipw.println(mDockManager.isDocked() ? 1 : 0);
+        ipw.print("width=");
+        ipw.println(mDataProvider.getWidthPixels());
+        ipw.print("height=");
+        ipw.println(mDataProvider.getHeightPixels());
+        ipw.println();
+        if (RECENT_SWIPES.size() != 0) {
+            ipw.println("Recent swipes:");
+            ipw.increaseIndent();
+            for (DebugSwipeRecord record : RECENT_SWIPES) {
+                ipw.println(record.getString());
+                ipw.println();
+            }
+            ipw.decreaseIndent();
+        } else {
+            ipw.println("No recent swipes");
+        }
         ipw.println();
         ipw.println("Recent falsing info:");
         ipw.increaseIndent();
         for (String msg : RECENT_INFO_LOG) {
             ipw.println(msg);
         }
+        ipw.println();
     }
 
     @Override
@@ -386,4 +443,46 @@
     static void logError(String msg) {
         Log.e(TAG, msg);
     }
+
+    private static class DebugSwipeRecord {
+        private static final byte VERSION = 1;  // opaque version number indicating format of data.
+        private final boolean mIsFalse;
+        private final int mInteractionType;
+        private final List<XYDt> mRecentMotionEvents;
+
+        DebugSwipeRecord(boolean isFalse, int interactionType,
+                List<XYDt> recentMotionEvents) {
+            mIsFalse = isFalse;
+            mInteractionType = interactionType;
+            mRecentMotionEvents = recentMotionEvents;
+        }
+
+        String getString() {
+            StringJoiner sj = new StringJoiner(",");
+            sj.add(Integer.toString(VERSION))
+                    .add(mIsFalse ? "1" : "0")
+                    .add(Integer.toString(mInteractionType));
+            for (XYDt event : mRecentMotionEvents) {
+                sj.add(event.toString());
+            }
+            return sj.toString();
+        }
+    }
+
+    private static class XYDt {
+        private final int mX;
+        private final int mY;
+        private final int mDT;
+
+        XYDt(int x, int y, int dT) {
+            mX = x;
+            mY = y;
+            mDT = dT;
+        }
+
+        @Override
+        public String toString() {
+            return mX + "," + mY + "," + mDT;
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/brightline/DistanceClassifier.java b/packages/SystemUI/src/com/android/systemui/classifier/brightline/DistanceClassifier.java
index 7f45cc8..0329183 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/DistanceClassifier.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/DistanceClassifier.java
@@ -38,10 +38,10 @@
 class DistanceClassifier extends FalsingClassifier {
 
     private static final float HORIZONTAL_FLING_THRESHOLD_DISTANCE_IN = 1;
-    private static final float VERTICAL_FLING_THRESHOLD_DISTANCE_IN = 1;
+    private static final float VERTICAL_FLING_THRESHOLD_DISTANCE_IN = 1.5f;
     private static final float HORIZONTAL_SWIPE_THRESHOLD_DISTANCE_IN = 3;
     private static final float VERTICAL_SWIPE_THRESHOLD_DISTANCE_IN = 3;
-    private static final float VELOCITY_TO_DISTANCE = 80f;
+    private static final float VELOCITY_TO_DISTANCE = 30f;
     private static final float SCREEN_FRACTION_MAX_DISTANCE = 0.8f;
 
     private final float mVerticalFlingThresholdPx;
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingClassifier.java b/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingClassifier.java
index 7555051..cf08821 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingClassifier.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingClassifier.java
@@ -85,10 +85,6 @@
         return mDataProvider.getInteractionType();
     }
 
-    final void setInteractionType(@Classifier.InteractionType int interactionType) {
-        mDataProvider.setInteractionType(interactionType);
-    }
-
     /**
      * Called whenever a MotionEvent occurs.
      *
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingDataProvider.java b/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingDataProvider.java
index 8b11ceb..5494c64 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingDataProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingDataProvider.java
@@ -113,6 +113,10 @@
         this.mInteractionType = interactionType;
     }
 
+    public boolean isDirty() {
+        return mDirty;
+    }
+
     final int getInteractionType() {
         return mInteractionType;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/brightline/ZigZagClassifier.java b/packages/SystemUI/src/com/android/systemui/classifier/brightline/ZigZagClassifier.java
index 957ea8d..a796f3c 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/ZigZagClassifier.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/ZigZagClassifier.java
@@ -42,8 +42,8 @@
     // most swipes will follow somewhat of a 'C' or 'S' shape, we allow more deviance along the
     // `SECONDARY` axis.
     private static final float MAX_X_PRIMARY_DEVIANCE = .05f;
-    private static final float MAX_Y_PRIMARY_DEVIANCE = .1f;
-    private static final float MAX_X_SECONDARY_DEVIANCE = .6f;
+    private static final float MAX_Y_PRIMARY_DEVIANCE = .15f;
+    private static final float MAX_X_SECONDARY_DEVIANCE = .4f;
     private static final float MAX_Y_SECONDARY_DEVIANCE = .3f;
 
     private final float mMaxXPrimaryDeviance;
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ControlStatus.kt b/packages/SystemUI/src/com/android/systemui/controls/ControlStatus.kt
index 53841e2..49a16d8 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ControlStatus.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ControlStatus.kt
@@ -20,6 +20,6 @@
 
 data class ControlStatus(
     val control: Control,
-    val favorite: Boolean,
+    var favorite: Boolean,
     val removed: Boolean = false
 )
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/controls/UserAwareController.kt b/packages/SystemUI/src/com/android/systemui/controls/UserAwareController.kt
index 4f39f22..d2776d2 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/UserAwareController.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/UserAwareController.kt
@@ -18,8 +18,11 @@
 
 import android.os.UserHandle
 
+/**
+ * An interface for controllers that keep track of the current user and can be notified of user
+ * changes.
+ */
 interface UserAwareController {
-
     fun changeUser(newUser: UserHandle) {}
     val currentUserId: Int
 }
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlInfo.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlInfo.kt
index b6cca3f..f624120 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlInfo.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlInfo.kt
@@ -22,6 +22,15 @@
 
 /**
  * Stores basic information about a [Control] to persist and keep track of favorites.
+ *
+ * The identifier of this [Control] is the combination of [component] and [controlId]. The other
+ * two fields are there for persistence. In this way, basic information can be shown to the user
+ * before the service has to report on the status.
+ *
+ * @property component the name of the component that provides the [Control].
+ * @property controlId unique (for the given [component]) identifier for this [Control].
+ * @property controlTitle last title reported for this [Control].
+ * @property deviceType last reported type for this [Control].
  */
 data class ControlInfo(
     val component: ComponentName,
@@ -33,6 +42,14 @@
     companion object {
         private const val TAG = "ControlInfo"
         private const val SEPARATOR = ":"
+
+        /**
+         * Creates a [ControlInfo] from a [SEPARATOR] separated list of fields.
+         *
+         * @param separator fields of a [ControlInfo] separated by [SEPARATOR]
+         * @return a [ControlInfo] or `null` if there was an error.
+         * @see [ControlInfo.toString]
+         */
         fun createFromString(string: String): ControlInfo? {
             val parts = string.split(SEPARATOR)
             val component = ComponentName.unflattenFromString(parts[0])
@@ -53,6 +70,12 @@
                     if (DeviceTypes.validDeviceType(type)) type else DeviceTypes.TYPE_UNKNOWN)
         }
     }
+
+    /**
+     * Returns a [String] representation of the fields separated using [SEPARATOR].
+     *
+     * @return a [String] representation of `this`
+     */
     override fun toString(): String {
         return component.flattenToString() +
                 "$SEPARATOR$controlId$SEPARATOR$controlTitle$SEPARATOR$deviceType"
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingController.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingController.kt
index 12c3ce9..7fae6a3 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingController.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingController.kt
@@ -18,13 +18,72 @@
 
 import android.content.ComponentName
 import android.service.controls.Control
+import android.service.controls.ControlsProviderService
 import android.service.controls.actions.ControlAction
 import com.android.systemui.controls.UserAwareController
+import java.util.function.Consumer
 
+/**
+ * Controller for keeping track of any [ControlsProviderService] that needs to be bound.
+ *
+ * This controller serves as an interface between [ControlsController] and the services.
+ *
+ * This controller being a [UserAwareController] means that all binding and requests will be
+ * performed on services bound as the current user.
+ */
 interface ControlsBindingController : UserAwareController {
-    fun bindAndLoad(component: ComponentName, callback: (List<Control>) -> Unit)
+
+    /**
+     * Request bind to a service and load all controls.
+     *
+     * @param component The [ComponentName] of the service to bind
+     * @param callback a callback to return the loaded controls to (or an error).
+     */
+    fun bindAndLoad(component: ComponentName, callback: LoadCallback)
+
+    /**
+     * Request to bind to the given services.
+     *
+     * @param components a list of [ComponentName] of the services to bind
+     */
     fun bindServices(components: List<ComponentName>)
+
+    /**
+     * Send a subscribe message to retrieve status of a set of controls.
+     *
+     * The controls passed do not have to belong to a single [ControlsProviderService]. The
+     * corresponding service [ComponentName] is associated with each control.
+     *
+     * @param controls a list of controls with corresponding [ComponentName] to request status
+     *                 update
+     */
     fun subscribe(controls: List<ControlInfo>)
+
+    /**
+     * Send an action performed on a [Control].
+     *
+     * @param controlInfo information about the actioned control, including the [ComponentName]
+     * @param action the action performed on the control
+     */
     fun action(controlInfo: ControlInfo, action: ControlAction)
+
+    /**
+     * Unsubscribe from all services to stop status updates.
+     */
     fun unsubscribe()
+
+    /**
+     * Consumer for load calls.
+     *
+     * Supports also sending error messages.
+     */
+    interface LoadCallback : Consumer<List<Control>> {
+
+        /**
+         * Indicates an error loading.
+         *
+         * @message an error message.
+         */
+        fun error(message: String)
+    }
 }
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingControllerImpl.kt
index 0a2a925..6ff1bbc 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingControllerImpl.kt
@@ -22,7 +22,6 @@
 import android.os.UserHandle
 import android.service.controls.Control
 import android.service.controls.IControlsActionCallback
-import android.service.controls.IControlsLoadCallback
 import android.service.controls.IControlsSubscriber
 import android.service.controls.IControlsSubscription
 import android.service.controls.actions.ControlAction
@@ -63,12 +62,6 @@
     private val componentMap: MutableMap<Key, ControlsProviderLifecycleManager> =
             ArrayMap<Key, ControlsProviderLifecycleManager>()
 
-    private val loadCallbackService = object : IControlsLoadCallback.Stub() {
-        override fun accept(token: IBinder, controls: MutableList<Control>) {
-            backgroundExecutor.execute(OnLoadRunnable(token, controls))
-        }
-    }
-
     private val actionCallbackService = object : IControlsActionCallback.Stub() {
         override fun accept(
             token: IBinder,
@@ -106,7 +99,6 @@
         return ControlsProviderLifecycleManager(
                 context,
                 backgroundExecutor,
-                loadCallbackService,
                 actionCallbackService,
                 subscriberService,
                 currentUser,
@@ -125,9 +117,12 @@
         }
     }
 
-    override fun bindAndLoad(component: ComponentName, callback: (List<Control>) -> Unit) {
+    override fun bindAndLoad(
+        component: ComponentName,
+        callback: ControlsBindingController.LoadCallback
+    ) {
         val provider = retrieveLifecycleManager(component)
-        provider.maybeBindAndLoad(callback)
+        provider.maybeBindAndLoad(LoadSubscriber(callback))
     }
 
     override fun subscribe(controls: List<ControlInfo>) {
@@ -213,7 +208,8 @@
 
     private inner class OnLoadRunnable(
         token: IBinder,
-        val list: List<Control>
+        val list: List<Control>,
+        val callback: ControlsBindingController.LoadCallback
     ) : CallbackRunnable(token) {
         override fun run() {
             if (provider == null) {
@@ -230,9 +226,7 @@
                     return
                 }
             }
-            provider.lastLoadCallback?.invoke(list) ?: run {
-                Log.w(TAG, "Null callback")
-            }
+            callback.accept(list)
             provider.unbindService()
         }
     }
@@ -274,7 +268,7 @@
     ) : CallbackRunnable(token) {
         override fun run() {
             provider?.let {
-                Log.i(TAG, "onComplete receive from '${provider.componentName}'")
+                Log.i(TAG, "onComplete receive from '${it.componentName}'")
             }
         }
     }
@@ -285,7 +279,7 @@
     ) : CallbackRunnable(token) {
         override fun run() {
             provider?.let {
-                Log.e(TAG, "onError receive from '${provider.componentName}': $error")
+                Log.e(TAG, "onError receive from '${it.componentName}': $error")
             }
         }
     }
@@ -305,6 +299,44 @@
             }
         }
     }
+
+    private inner class OnLoadErrorRunnable(
+        token: IBinder,
+        val error: String,
+        val callback: ControlsBindingController.LoadCallback
+    ) : CallbackRunnable(token) {
+        override fun run() {
+            callback.error(error)
+            provider?.let {
+                Log.e(TAG, "onError receive from '${it.componentName}': $error")
+            }
+        }
+    }
+
+    private inner class LoadSubscriber(
+        val callback: ControlsBindingController.LoadCallback
+    ) : IControlsSubscriber.Stub() {
+        val loadedControls = ArrayList<Control>()
+        var hasError = false
+
+        override fun onSubscribe(token: IBinder, subs: IControlsSubscription) {
+            backgroundExecutor.execute(OnSubscribeRunnable(token, subs))
+        }
+
+        override fun onNext(token: IBinder, c: Control) {
+            backgroundExecutor.execute { loadedControls.add(c) }
+        }
+        override fun onError(token: IBinder, s: String) {
+            hasError = true
+            backgroundExecutor.execute(OnLoadErrorRunnable(token, s, callback))
+        }
+
+        override fun onComplete(token: IBinder) {
+            if (!hasError) {
+                backgroundExecutor.execute(OnLoadRunnable(token, loadedControls, callback))
+            }
+        }
+    }
 }
 
-private data class Key(val component: ComponentName, val user: UserHandle)
\ No newline at end of file
+private data class Key(val component: ComponentName, val user: UserHandle)
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt
index b3ba2b2..4b89fd4 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt
@@ -18,25 +18,194 @@
 
 import android.content.ComponentName
 import android.service.controls.Control
+import android.service.controls.ControlsProviderService
 import android.service.controls.actions.ControlAction
 import com.android.systemui.controls.ControlStatus
 import com.android.systemui.controls.UserAwareController
+import com.android.systemui.controls.management.ControlsFavoritingActivity
+import com.android.systemui.controls.ui.ControlsUiController
+import java.util.function.Consumer
 
+/**
+ * Controller to handle communication between different parts of the controls system.
+ *
+ * This controller is in charge of:
+ *  * Keeping track of favorites
+ *  * Determining and keeping track of whether controls are enabled
+ *  * Listening for user change and propagating that message in the system
+ *  * Communicate between the UI and the [ControlsBindingController]
+ *
+ *  This controller being a [UserAwareController] means that all operations will be conducted on
+ *  information for the current user only.
+ */
 interface ControlsController : UserAwareController {
+
+    /**
+     * Whether the controls system is available for the current user.
+     */
     val available: Boolean
 
-    fun getFavoriteControls(): List<ControlInfo>
-    fun loadForComponent(componentName: ComponentName, callback: (List<ControlStatus>) -> Unit)
+    // SERVICE COMMUNICATION
+
+    /**
+     * Load all available [Control] for a given service.
+     *
+     * @param componentName the [ComponentName] of the [ControlsProviderService] to load from
+     * @param dataCallback a callback in which to retrieve the result.
+     */
+    fun loadForComponent(
+        componentName: ComponentName,
+        dataCallback: Consumer<LoadData>
+    )
+
+    /**
+     * Request to subscribe for all favorite controls.
+     *
+     * @see [ControlsBindingController.subscribe]
+     */
     fun subscribeToFavorites()
-    fun changeFavoriteStatus(controlInfo: ControlInfo, state: Boolean)
-    fun countFavoritesForComponent(componentName: ComponentName): Int = 0
+
+    /**
+     * Request to unsubscribe to all providers.
+     *
+     * @see [ControlsBindingController.unsubscribe]
+     */
     fun unsubscribe()
+
+    /**
+     * Notify a [ControlsProviderService] that an action has been performed on a [Control].
+     *
+     * @param controlInfo information of the [Control] receiving the action
+     * @param action action performed on the [Control]
+     * @see [ControlsBindingController.action]
+     */
     fun action(controlInfo: ControlInfo, action: ControlAction)
+
+    /**
+     * Refresh the status of a [Control] with information provided from the service.
+     *
+     * @param componentName the name of the service that provides the [Control]
+     * @param control a stateful [Control] with updated information
+     * @see [ControlsUiController.onRefreshState]
+     */
     fun refreshStatus(componentName: ComponentName, control: Control)
+
+    /**
+     * Indicate the result of a [ControlAction] performed on a [Control].
+     *
+     * @param componentName the name of the service that provides the [Control]
+     * @param controlId the id of the [Control] the actioned was performed on
+     * @param response the result of the action.
+     * @see [ControlsUiController.onActionResponse]
+     */
     fun onActionResponse(
         componentName: ComponentName,
         controlId: String,
         @ControlAction.ResponseResult response: Int
     )
+
+    // FAVORITE MANAGEMENT
+
+    /**
+     * Get a list of all favorite controls.
+     *
+     * @return a list of [ControlInfo] with persistent information about the controls, including
+     *         their corresponding [ComponentName].
+     */
+    fun getFavoriteControls(): List<ControlInfo>
+
+    /**
+     * Get all the favorites for a given component.
+     *
+     * @param componentName the name of the component of the [ControlsProviderService] with
+     *                      which to filter the favorites.
+     * @return a list of the favorite controls for the given service. All the elements of the list
+     *         will have the same [ControlInfo.component] matching the one requested.
+     */
+    fun getFavoritesForComponent(componentName: ComponentName): List<ControlInfo>
+
+    /**
+     * Replaces the favorites for the given component.
+     *
+     * Calling this method will eliminate the previous selection of favorites and replace it with a
+     * new one.
+     *
+     * @param componentName The name of the component for the [ControlsProviderService]
+     * @param favorites a list of [ControlInfo] to replace the previous favorites.
+     */
+    fun replaceFavoritesForComponent(componentName: ComponentName, favorites: List<ControlInfo>)
+
+    /**
+     * Change the favorite status of a single [Control].
+     *
+     * If the control is added to favorites, it will be added to the end of the list for that
+     * particular component. Matching for removing the control will be done based on
+     * [ControlInfo.component] and [ControlInfo.controlId].
+     *
+     * Trying to add an already favorite control or trying to remove one that is not a favorite is
+     * a no-op.
+     *
+     * @param controlInfo persistent information about the [Control].
+     * @param state `true` to add to favorites and `false` to remove.
+     */
+    fun changeFavoriteStatus(controlInfo: ControlInfo, state: Boolean)
+
+    /**
+     * Return the number of favorites for a given component.
+     *
+     * This call returns the same as `getFavoritesForComponent(componentName).size`.
+     *
+     * @param componentName the name of the component
+     * @return the number of current favorites for the given component
+     */
+    fun countFavoritesForComponent(componentName: ComponentName): Int
+
+    /**
+     * Clears the list of all favorites.
+     *
+     * To clear the list of favorites for a given service, call [replaceFavoritesForComponent] with
+     * an empty list.
+     */
     fun clearFavorites()
+
+    /**
+     * Interface for structure to pass data to [ControlsFavoritingActivity].
+     */
+    interface LoadData {
+        /**
+         * All of the available controls for the loaded [ControlsProviderService].
+         *
+         * This will indicate if they are currently a favorite and whether they were removed (a
+         * favorite but not retrieved on load).
+         */
+        val allControls: List<ControlStatus>
+
+        /**
+         * Ordered list of ids of favorite controls.
+         */
+        val favoritesIds: List<String>
+
+        /**
+         * Whether there was an error in loading.
+         *
+         * In this case, [allControls] will only contain those that were favorited and will not be
+         * marked as removed.
+         */
+        val errorOnLoad: Boolean
+    }
+}
+
+/**
+ * Creates a basic implementation of a [LoadData].
+ */
+fun createLoadDataObject(
+    allControls: List<ControlStatus>,
+    favorites: List<String>,
+    error: Boolean = false
+): ControlsController.LoadData {
+    return object : ControlsController.LoadData {
+        override val allControls = allControls
+        override val favoritesIds = favorites
+        override val errorOnLoad = error
+    }
 }
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 7de1557..50ad515 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
@@ -38,7 +38,6 @@
 import com.android.systemui.Dumpable
 import com.android.systemui.broadcast.BroadcastDispatcher
 import com.android.systemui.controls.ControlStatus
-import com.android.systemui.controls.management.ControlsFavoritingActivity
 import com.android.systemui.controls.management.ControlsListingController
 import com.android.systemui.controls.ui.ControlsUiController
 import com.android.systemui.dagger.qualifiers.Background
@@ -47,6 +46,7 @@
 import java.io.PrintWriter
 import java.util.Optional
 import java.util.concurrent.TimeUnit
+import java.util.function.Consumer
 import javax.inject.Inject
 import javax.inject.Singleton
 
@@ -70,9 +70,10 @@
     }
 
     // Map of map: ComponentName -> (String -> ControlInfo).
-    // Only for current user
+    //
     @GuardedBy("currentFavorites")
-    private val currentFavorites = ArrayMap<ComponentName, MutableMap<String, ControlInfo>>()
+    private val currentFavorites = ArrayMap<ComponentName, MutableList<ControlInfo>>()
+            .withDefault { mutableListOf() }
 
     private var userChanging: Boolean = true
 
@@ -180,50 +181,81 @@
         val infos = persistenceWrapper.readFavorites()
         synchronized(currentFavorites) {
             infos.forEach {
-                currentFavorites.getOrPut(it.component, { ArrayMap<String, ControlInfo>() })
-                        .put(it.controlId, it)
+                currentFavorites.getOrPut(it.component, { mutableListOf() }).add(it)
             }
         }
     }
 
     override fun loadForComponent(
         componentName: ComponentName,
-        callback: (List<ControlStatus>) -> Unit
+        dataCallback: Consumer<ControlsController.LoadData>
     ) {
         if (!confirmAvailability()) {
             if (userChanging) {
                 // Try again later, userChanging should not last forever. If so, we have bigger
                 // problems
                 executor.executeDelayed(
-                        { loadForComponent(componentName, callback) },
+                        { loadForComponent(componentName, dataCallback) },
                         USER_CHANGE_RETRY_DELAY,
                         TimeUnit.MILLISECONDS
                 )
             } else {
-                callback(emptyList())
+                dataCallback.accept(createLoadDataObject(emptyList(), emptyList(), true))
             }
             return
         }
-        bindingController.bindAndLoad(componentName) {
-            synchronized(currentFavorites) {
-                val favoritesForComponentKeys: Set<String> =
-                        currentFavorites.get(componentName)?.keys ?: emptySet()
-                val changed = updateFavoritesLocked(componentName, it)
-                if (changed) {
-                    persistenceWrapper.storeFavorites(favoritesAsListLocked())
+        bindingController.bindAndLoad(
+                componentName,
+                object : ControlsBindingController.LoadCallback {
+                    override fun accept(controls: List<Control>) {
+                        val loadData = synchronized(currentFavorites) {
+                            val favoritesForComponentKeys: List<String> =
+                                    currentFavorites.getValue(componentName).map { it.controlId }
+                            val changed = updateFavoritesLocked(componentName, controls,
+                                    favoritesForComponentKeys)
+                            if (changed) {
+                                persistenceWrapper.storeFavorites(favoritesAsListLocked())
+                            }
+                            val removed = findRemovedLocked(favoritesForComponentKeys.toSet(),
+                                    controls)
+                            val controlsWithFavorite = controls.map {
+                                ControlStatus(it, it.controlId in favoritesForComponentKeys)
+                            }
+                            createLoadDataObject(
+                                    currentFavorites.getValue(componentName)
+                                            .filter { it.controlId in removed }
+                                            .map { createRemovedStatus(it) } +
+                                            controlsWithFavorite,
+                                    favoritesForComponentKeys
+                            )
+                        }
+                        dataCallback.accept(loadData)
+                    }
+
+                    override fun error(message: String) {
+                        val loadData = synchronized(currentFavorites) {
+                            val favoritesForComponent = currentFavorites.getValue(componentName)
+                            val favoritesForComponentKeys = favoritesForComponent
+                                    .map { it.controlId }
+                            createLoadDataObject(
+                                    favoritesForComponent.map { createRemovedStatus(it, false) },
+                                    favoritesForComponentKeys,
+                                    true
+                            )
+                        }
+                        dataCallback.accept(loadData)
+                    }
                 }
-                val removed = findRemovedLocked(favoritesForComponentKeys, it)
-                callback(removed.map { currentFavorites.getValue(componentName).getValue(it) }
-                            .map(::createRemovedStatus) +
-                        it.map { ControlStatus(it, it.controlId in favoritesForComponentKeys) })
-            }
-        }
+        )
     }
 
-    private fun createRemovedStatus(controlInfo: ControlInfo): ControlStatus {
-        val intent = Intent(context, ControlsFavoritingActivity::class.java).apply {
-            putExtra(ControlsFavoritingActivity.EXTRA_COMPONENT, controlInfo.component)
-            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP
+    private fun createRemovedStatus(
+        controlInfo: ControlInfo,
+        setRemoved: Boolean = true
+    ): ControlStatus {
+        val intent = Intent(Intent.ACTION_MAIN).apply {
+            addCategory(Intent.CATEGORY_LAUNCHER)
+            this.`package` = controlInfo.component.packageName
         }
         val pendingIntent = PendingIntent.getActivity(context,
                 controlInfo.component.hashCode(),
@@ -233,7 +265,7 @@
                 .setTitle(controlInfo.controlTitle)
                 .setDeviceType(controlInfo.deviceType)
                 .build()
-        return ControlStatus(control, true, true)
+        return ControlStatus(control, true, setRemoved)
     }
 
     @GuardedBy("currentFavorites")
@@ -243,17 +275,24 @@
     }
 
     @GuardedBy("currentFavorites")
-    private fun updateFavoritesLocked(componentName: ComponentName, list: List<Control>): Boolean {
-        val favorites = currentFavorites.get(componentName) ?: mutableMapOf()
-        val favoriteKeys = favorites.keys
+    private fun updateFavoritesLocked(
+        componentName: ComponentName,
+        list: List<Control>,
+        favoriteKeys: List<String>
+    ): Boolean {
+        val favorites = currentFavorites.get(componentName) ?: mutableListOf()
         if (favoriteKeys.isEmpty()) return false // early return
         var changed = false
-        list.forEach {
-            if (it.controlId in favoriteKeys) {
-                val value = favorites.getValue(it.controlId)
-                if (value.controlTitle != it.title || value.deviceType != it.deviceType) {
-                    favorites[it.controlId] = value.copy(controlTitle = it.title,
-                            deviceType = it.deviceType)
+        list.forEach { control ->
+            if (control.controlId in favoriteKeys) {
+                val index = favorites.indexOfFirst { it.controlId == control.controlId }
+                val value = favorites[index]
+                if (value.controlTitle != control.title ||
+                        value.deviceType != control.deviceType) {
+                    favorites[index] = value.copy(
+                            controlTitle = control.title,
+                            deviceType = control.deviceType
+                    )
                     changed = true
                 }
             }
@@ -263,14 +302,14 @@
 
     @GuardedBy("currentFavorites")
     private fun favoritesAsListLocked(): List<ControlInfo> {
-        return currentFavorites.flatMap { it.value.values }
+        return currentFavorites.flatMap { it.value }
     }
 
     override fun subscribeToFavorites() {
         if (!confirmAvailability()) return
         // Make a copy of the favorites list
         val favorites = synchronized(currentFavorites) {
-            currentFavorites.flatMap { it.value.values.toList() }
+            currentFavorites.flatMap { it.value }
         }
         bindingController.subscribe(favorites)
     }
@@ -286,22 +325,19 @@
         val listOfControls = synchronized(currentFavorites) {
             if (state) {
                 if (controlInfo.component !in currentFavorites) {
-                    currentFavorites.put(controlInfo.component, ArrayMap<String, ControlInfo>())
+                    currentFavorites.put(controlInfo.component, mutableListOf())
                     changed = true
                 }
                 val controlsForComponent = currentFavorites.getValue(controlInfo.component)
-                if (controlInfo.controlId !in controlsForComponent) {
-                    controlsForComponent.put(controlInfo.controlId, controlInfo)
+                if (controlsForComponent.firstOrNull {
+                            it.controlId == controlInfo.controlId
+                        } == null) {
+                    controlsForComponent.add(controlInfo)
                     changed = true
-                } else {
-                    if (controlsForComponent.getValue(controlInfo.controlId) != controlInfo) {
-                        controlsForComponent.put(controlInfo.controlId, controlInfo)
-                        changed = true
-                    }
                 }
             } else {
                 changed = currentFavorites.get(controlInfo.component)
-                        ?.remove(controlInfo.controlId) != null
+                        ?.remove(controlInfo) != null
             }
             favoritesAsListLocked()
         }
@@ -310,6 +346,19 @@
         }
     }
 
+    override fun replaceFavoritesForComponent(
+        componentName: ComponentName,
+        favorites: List<ControlInfo>
+    ) {
+        if (!confirmAvailability()) return
+        val filtered = favorites.filter { it.component == componentName }
+        val listOfControls = synchronized(currentFavorites) {
+            currentFavorites.put(componentName, filtered.toMutableList())
+            favoritesAsListLocked()
+        }
+        persistenceWrapper.storeFavorites(listOfControls)
+    }
+
     override fun refreshStatus(componentName: ComponentName, control: Control) {
         if (!confirmAvailability()) {
             Log.d(TAG, "Controls not available")
@@ -317,7 +366,13 @@
         }
         executor.execute {
             synchronized(currentFavorites) {
-                val changed = updateFavoritesLocked(componentName, listOf(control))
+                val favoriteKeysForComponent =
+                        currentFavorites.get(componentName)?.map { it.controlId } ?: emptyList()
+                val changed = updateFavoritesLocked(
+                        componentName,
+                        listOf(control),
+                        favoriteKeysForComponent
+                )
                 if (changed) {
                     persistenceWrapper.storeFavorites(favoritesAsListLocked())
                 }
@@ -361,6 +416,12 @@
         }
     }
 
+    override fun getFavoritesForComponent(componentName: ComponentName): List<ControlInfo> {
+        return synchronized(currentFavorites) {
+            currentFavorites.get(componentName) ?: emptyList()
+        }
+    }
+
     override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array<out String>) {
         pw.println("ControlsController state:")
         pw.println("  Available: $available")
@@ -368,10 +429,8 @@
         pw.println("  Current user: ${currentUser.identifier}")
         pw.println("  Favorites:")
         synchronized(currentFavorites) {
-            currentFavorites.forEach {
-                it.value.forEach {
-                    pw.println("    ${it.value}")
-                }
+            favoritesAsListLocked().forEach {
+                pw.println("    ${ it }")
             }
         }
         pw.println(bindingController.toString())
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsFavoritePersistenceWrapper.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsFavoritePersistenceWrapper.kt
index 7d1df14..883f8a9 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsFavoritePersistenceWrapper.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsFavoritePersistenceWrapper.kt
@@ -19,9 +19,7 @@
 import android.content.ComponentName
 import android.util.AtomicFile
 import android.util.Log
-import android.util.Slog
 import android.util.Xml
-import com.android.systemui.util.concurrency.DelayableExecutor
 import libcore.io.IoUtils
 import org.xmlpull.v1.XmlPullParser
 import org.xmlpull.v1.XmlPullParserException
@@ -29,10 +27,18 @@
 import java.io.FileInputStream
 import java.io.FileNotFoundException
 import java.io.IOException
+import java.util.concurrent.Executor
 
+/**
+ * Manages persistence of favorite controls.
+ *
+ * This class uses an [AtomicFile] to serialize the favorite controls to an xml.
+ * @property file a file location for storing/reading the favorites.
+ * @property executor an executor in which to execute storing the favorites.
+ */
 class ControlsFavoritePersistenceWrapper(
     private var file: File,
-    private var executor: DelayableExecutor
+    private val executor: Executor
 ) {
 
     companion object {
@@ -46,10 +52,20 @@
         private const val TAG_TYPE = "type"
     }
 
+    /**
+     * Change the file location for storing/reading the favorites
+     *
+     * @param fileName new location
+     */
     fun changeFile(fileName: File) {
         file = fileName
     }
 
+    /**
+     * Stores the list of favorites in the corresponding file.
+     *
+     * @param list a list of favorite controls. The list will be stored in the same order.
+     */
     fun storeFavorites(list: List<ControlInfo>) {
         executor.execute {
             Log.d(TAG, "Saving data to file: $file")
@@ -87,6 +103,12 @@
         }
     }
 
+    /**
+     * Stores the list of favorites in the corresponding file.
+     *
+     * @return a list of stored favorite controls. Return an empty list if the file is not found
+     * @throws [IllegalStateException] if there is an error while reading the file
+     */
     fun readFavorites(): List<ControlInfo> {
         if (!file.exists()) {
             Log.d(TAG, "No favorites, returning empty list")
@@ -95,7 +117,7 @@
         val reader = try {
             FileInputStream(file)
         } catch (fnfe: FileNotFoundException) {
-            Slog.i(TAG, "No file found")
+            Log.i(TAG, "No file found")
             return emptyList()
         }
         try {
@@ -113,7 +135,7 @@
     }
 
     private fun parseXml(parser: XmlPullParser): List<ControlInfo> {
-        var type = 0
+        var type: Int
         val infos = mutableListOf<ControlInfo>()
         while (parser.next().also { type = it } != XmlPullParser.END_DOCUMENT) {
             if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManager.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManager.kt
index b4bd82c..a53fcd4 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManager.kt
@@ -25,11 +25,10 @@
 import android.os.IBinder
 import android.os.RemoteException
 import android.os.UserHandle
-import android.service.controls.Control
+import android.service.controls.ControlsProviderService
 import android.service.controls.ControlsProviderService.CALLBACK_BUNDLE
 import android.service.controls.ControlsProviderService.CALLBACK_TOKEN
 import android.service.controls.IControlsActionCallback
-import android.service.controls.IControlsLoadCallback
 import android.service.controls.IControlsProvider
 import android.service.controls.IControlsSubscriber
 import android.service.controls.IControlsSubscription
@@ -40,19 +39,30 @@
 import com.android.systemui.util.concurrency.DelayableExecutor
 import java.util.concurrent.TimeUnit
 
-typealias LoadCallback = (List<Control>) -> Unit
+/**
+ * Manager for the lifecycle of the connection to a given [ControlsProviderService].
+ *
+ * This class handles binding and unbinding and requests to the service. The class will queue
+ * requests until the service is connected and dispatch them then.
+ *
+ * @property context A SystemUI context for binding to the services
+ * @property executor A delayable executor for posting timeouts
+ * @property actionCallbackService a callback interface to hand the remote service for sending
+ *                                 action responses
+ * @property subscriberService an "subscriber" interface for requesting and accepting updates for
+ *                             controls from the service.
+ * @property user the user for whose this service should be bound.
+ * @property componentName the name of the component for the service.
+ */
 class ControlsProviderLifecycleManager(
     private val context: Context,
     private val executor: DelayableExecutor,
-    private val loadCallbackService: IControlsLoadCallback.Stub,
     private val actionCallbackService: IControlsActionCallback.Stub,
     private val subscriberService: IControlsSubscriber.Stub,
     val user: UserHandle,
     val componentName: ComponentName
 ) : IBinder.DeathRecipient {
 
-    var lastLoadCallback: LoadCallback? = null
-        private set
     val token: IBinder = Binder()
     @GuardedBy("subscriptions")
     private val subscriptions = mutableListOf<IControlsSubscription>()
@@ -70,7 +80,7 @@
         private const val MSG_ACTION = 2
         private const val MSG_UNBIND = 3
         private const val BIND_RETRY_DELAY = 1000L // ms
-        private const val LOAD_TIMEOUT = 5000L // ms
+        private const val LOAD_TIMEOUT_SECONDS = 30L // seconds
         private const val MAX_BIND_RETRIES = 5
         private const val MAX_CONTROLS_REQUEST = 100000L
         private const val DEBUG = true
@@ -140,9 +150,12 @@
             bindService(false)
             return
         }
-        if (Message.Load in queue) {
-            load()
+
+        queue.filter { it is Message.Load }.forEach {
+            val msg = it as Message.Load
+            load(msg.subscriber)
         }
+
         queue.filter { it is Message.Subscribe }.flatMap { (it as Message.Subscribe).list }.run {
             if (this.isNotEmpty()) {
                 subscribe(this)
@@ -177,17 +190,17 @@
         }
     }
 
-    private fun load() {
+    private fun load(subscriber: IControlsSubscriber.Stub) {
         if (DEBUG) {
             Log.d(TAG, "load $componentName")
         }
-        if (!(wrapper?.load(loadCallbackService) ?: false)) {
-            queueMessage(Message.Load)
+        if (!(wrapper?.load(subscriber) ?: false)) {
+            queueMessage(Message.Load(subscriber))
             binderDied()
         }
     }
 
-    private fun invokeOrQueue(f: () -> Unit, msg: Message) {
+    private inline fun invokeOrQueue(f: () -> Unit, msg: Message) {
         wrapper?.run {
             f()
         } ?: run {
@@ -196,18 +209,33 @@
         }
     }
 
-    fun maybeBindAndLoad(callback: LoadCallback) {
+    /**
+     * Request a call to [IControlsProvider.load].
+     *
+     * If the service is not bound, the call will be queued and the service will be bound first.
+     * The service will be unbound after the controls are returned or the call times out.
+     *
+     * @param subscriber the subscriber that manages coordination for loading controls
+     */
+    fun maybeBindAndLoad(subscriber: IControlsSubscriber.Stub) {
         unqueueMessage(Message.Unbind)
-        lastLoadCallback = callback
         onLoadCanceller = executor.executeDelayed({
-            // Didn't receive a response in time, log and send back empty list
+            // Didn't receive a response in time, log and send back error
             Log.d(TAG, "Timeout waiting onLoad for $componentName")
-            loadCallbackService.accept(token, emptyList())
-        }, LOAD_TIMEOUT, TimeUnit.MILLISECONDS)
+            subscriber.onError(token, "Timeout waiting onLoad")
+            unbindService()
+        }, LOAD_TIMEOUT_SECONDS, TimeUnit.SECONDS)
 
-        invokeOrQueue(::load, Message.Load)
+        invokeOrQueue({ load(subscriber) }, Message.Load(subscriber))
     }
 
+    /**
+     * Request a subscription to the [Publisher] returned by [ControlsProviderService.publisherFor]
+     *
+     * If the service is not bound, the call will be queued and the service will be bound first.
+     *
+     * @param controlIds a list of the ids of controls to send status back.
+     */
     fun maybeBindAndSubscribe(controlIds: List<String>) {
         invokeOrQueue({ subscribe(controlIds) }, Message.Subscribe(controlIds))
     }
@@ -222,6 +250,14 @@
         }
     }
 
+    /**
+     * Request a call to [ControlsProviderService.performControlAction].
+     *
+     * If the service is not bound, the call will be queued and the service will be bound first.
+     *
+     * @param controlId the id of the [Control] the action is performed on
+     * @param action the action performed
+     */
     fun maybeBindAndSendAction(controlId: String, action: ControlAction) {
         invokeOrQueue({ action(controlId, action) }, Message.Action(controlId, action))
     }
@@ -236,6 +272,12 @@
         }
     }
 
+    /**
+     * Starts the subscription to the [ControlsProviderService] and requests status of controls.
+     *
+     * @param subscription the subscriber to use to request controls
+     * @see maybeBindAndLoad
+     */
     fun startSubscription(subscription: IControlsSubscription) {
         synchronized(subscriptions) {
             subscriptions.add(subscription)
@@ -243,6 +285,9 @@
         wrapper?.request(subscription, MAX_CONTROLS_REQUEST)
     }
 
+    /**
+     * Unsubscribe from this service, cancelling all status requests.
+     */
     fun unsubscribe() {
         if (DEBUG) {
             Log.d(TAG, "unsubscribe $componentName")
@@ -260,13 +305,18 @@
         }
     }
 
+    /**
+     * Request bind to the service.
+     */
     fun bindService() {
         unqueueMessage(Message.Unbind)
         bindService(true)
     }
 
+    /**
+     * Request unbind from the service.
+     */
     fun unbindService() {
-        lastLoadCallback = null
         onLoadCanceller?.run()
         onLoadCanceller = null
 
@@ -281,9 +331,12 @@
         }.toString()
     }
 
+    /**
+     * Messages for the internal queue.
+     */
     sealed class Message {
         abstract val type: Int
-        object Load : Message() {
+        class Load(val subscriber: IControlsSubscriber.Stub) : Message() {
             override val type = MSG_LOAD
         }
         object Unbind : Message() {
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ServiceWrapper.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ServiceWrapper.kt
index 5c812b1..b2afd3c 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ServiceWrapper.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ServiceWrapper.kt
@@ -18,19 +18,23 @@
 
 import android.service.controls.actions.ControlAction
 import android.service.controls.IControlsActionCallback
-import android.service.controls.IControlsLoadCallback
 import android.service.controls.IControlsProvider
 import android.service.controls.IControlsSubscriber
 import android.service.controls.IControlsSubscription
 import android.service.controls.actions.ControlActionWrapper
 import android.util.Log
 
+/**
+ * Wrapper for the service calls.
+ *
+ * Calling all [IControlsProvider] methods through here will wrap them in a try/catch block.
+ */
 class ServiceWrapper(val service: IControlsProvider) {
     companion object {
         private const val TAG = "ServiceWrapper"
     }
 
-    private fun callThroughService(block: () -> Unit): Boolean {
+    private inline fun callThroughService(block: () -> Unit): Boolean {
         try {
             block()
             return true
@@ -40,9 +44,9 @@
         }
     }
 
-    fun load(cb: IControlsLoadCallback): Boolean {
+    fun load(subscriber: IControlsSubscriber): Boolean {
         return callThroughService {
-            service.load(cb)
+            service.load(subscriber)
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/AppAdapter.kt b/packages/SystemUI/src/com/android/systemui/controls/management/AppAdapter.kt
index b122439..ac5e089 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/AppAdapter.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/AppAdapter.kt
@@ -29,6 +29,7 @@
 import com.android.settingslib.applications.DefaultAppInfo
 import com.android.settingslib.widget.CandidateInfo
 import com.android.systemui.R
+import java.text.Collator
 import java.util.concurrent.Executor
 
 /**
@@ -44,23 +45,27 @@
  * @param onAppSelected a callback to indicate that an app has been selected in the list.
  */
 class AppAdapter(
+    backgroundExecutor: Executor,
     uiExecutor: Executor,
     lifecycle: Lifecycle,
     controlsListingController: ControlsListingController,
     private val layoutInflater: LayoutInflater,
     private val onAppSelected: (ComponentName?) -> Unit = {},
-    private val favoritesRenderer: FavoritesRenderer
+    private val favoritesRenderer: FavoritesRenderer,
+    private val resources: Resources
 ) : RecyclerView.Adapter<AppAdapter.Holder>() {
 
     private var listOfServices = emptyList<CandidateInfo>()
 
     private val callback = object : ControlsListingController.ControlsListingCallback {
-        override fun onServicesUpdated(list: List<CandidateInfo>) {
-            uiExecutor.execute {
-                listOfServices = list.sortedBy {
-                    it.loadLabel().toString()
+        override fun onServicesUpdated(candidates: List<CandidateInfo>) {
+            backgroundExecutor.execute {
+                val collator = Collator.getInstance(resources.configuration.locales[0])
+                val localeComparator = compareBy<CandidateInfo, CharSequence>(collator) {
+                    it.loadLabel()
                 }
-                notifyDataSetChanged()
+                listOfServices = candidates.sortedWith(localeComparator)
+                uiExecutor.execute(::notifyDataSetChanged)
             }
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt
index 65dcc2b1..d3cabe6 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlAdapter.kt
@@ -25,101 +25,150 @@
 import android.widget.CheckBox
 import android.widget.ImageView
 import android.widget.TextView
+import androidx.recyclerview.widget.GridLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import com.android.systemui.R
-import com.android.systemui.controls.ControlStatus
-import com.android.systemui.controls.controller.ControlInfo
 import com.android.systemui.controls.ui.RenderInfo
 
+private typealias ModelFavoriteChanger = (String, Boolean) -> Unit
+
 /**
  * Adapter for binding [Control] information to views.
  *
+ * The model for this adapter is provided by a [FavoriteModel] that is set using
+ * [changeFavoritesModel]. This allows for updating the model if there's a reload.
+ *
  * @param layoutInflater an inflater for the views in the containing [RecyclerView]
- * @param favoriteCallback a callback to be called when the favorite status of a [Control] is
- *                         changed. The callback will take a [ControlInfo.Builder] that's
- *                         pre-populated with the [Control] information and the new favorite
- *                         status.
+ * @param onlyFavorites set to true to only display favorites instead of all controls
  */
 class ControlAdapter(
     private val layoutInflater: LayoutInflater,
-    private val favoriteCallback: (ControlInfo.Builder, Boolean) -> Unit
-) : RecyclerView.Adapter<ControlAdapter.Holder>() {
+    private val onlyFavorites: Boolean = false
+) : RecyclerView.Adapter<Holder>() {
 
-    var listOfControls = emptyList<ControlStatus>()
-
-    override fun onCreateViewHolder(parent: ViewGroup, i: Int): Holder {
-        return Holder(layoutInflater.inflate(R.layout.controls_base_item, parent, false).apply {
-            layoutParams.apply {
-                width = ViewGroup.LayoutParams.MATCH_PARENT
-            }
-            elevation = 15f
-        })
+    companion object {
+        private const val TYPE_ZONE = 0
+        private const val TYPE_CONTROL = 1
     }
 
-    override fun getItemCount() = listOfControls.size
+    val spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
+        override fun getSpanSize(position: Int): Int {
+            return if (getItemViewType(position) == TYPE_ZONE) 2 else 1
+        }
+    }
+
+    var modelList: List<ElementWrapper> = emptyList()
+    private var favoritesModel: FavoriteModel? = null
+
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
+        return when (viewType) {
+            TYPE_CONTROL -> {
+                ControlHolder(
+                        layoutInflater.inflate(R.layout.controls_base_item, parent, false).apply {
+                            layoutParams.apply {
+                                width = ViewGroup.LayoutParams.MATCH_PARENT
+                            }
+                            elevation = 15f
+                        },
+                        { id, favorite ->
+                            favoritesModel?.changeFavoriteStatus(id, favorite)
+                        })
+            }
+            TYPE_ZONE -> {
+                ZoneHolder(layoutInflater.inflate(R.layout.controls_zone_header, parent, false))
+            }
+            else -> throw IllegalStateException("Wrong viewType: $viewType")
+        }
+    }
+
+    fun changeFavoritesModel(favoritesModel: FavoriteModel) {
+        this.favoritesModel = favoritesModel
+        if (onlyFavorites) {
+            modelList = favoritesModel.favorites
+        } else {
+            modelList = favoritesModel.all
+        }
+        notifyDataSetChanged()
+    }
+
+    override fun getItemCount() = modelList.size
 
     override fun onBindViewHolder(holder: Holder, index: Int) {
-        holder.bindData(listOfControls[index], favoriteCallback)
+        holder.bindData(modelList[index])
     }
 
+    override fun getItemViewType(position: Int): Int {
+        return when (modelList[position]) {
+            is ZoneNameWrapper -> TYPE_ZONE
+            is ControlWrapper -> TYPE_CONTROL
+        }
+    }
+}
+
+/**
+ * Holder for binding views in the [RecyclerView]-
+ * @param view the [View] for this [Holder]
+ */
+sealed class Holder(view: View) : RecyclerView.ViewHolder(view) {
+
     /**
-     * Holder for binding views in the [RecyclerView]-
+     * Bind the data from the model into the view
      */
-    class Holder(view: View) : RecyclerView.ViewHolder(view) {
-        private val icon: ImageView = itemView.requireViewById(R.id.icon)
-        private val title: TextView = itemView.requireViewById(R.id.title)
-        private val subtitle: TextView = itemView.requireViewById(R.id.subtitle)
-        private val removed: TextView = itemView.requireViewById(R.id.status)
-        private val favorite: CheckBox = itemView.requireViewById<CheckBox>(R.id.favorite).apply {
-            visibility = View.VISIBLE
-        }
+    abstract fun bindData(wrapper: ElementWrapper)
+}
 
-        /**
-         * Bind data to the view
-         * @param data information about the [Control]
-         * @param callback a callback to be called when the favorite status of the [Control] is
-         *                 changed. The callback will take a [ControlInfo.Builder] that's
-         *                 pre-populated with the [Control] information and the new favorite status.
-         */
-        fun bindData(data: ControlStatus, callback: (ControlInfo.Builder, Boolean) -> Unit) {
-            val renderInfo = getRenderInfo(data.control.deviceType, data.favorite)
-            title.text = data.control.title
-            subtitle.text = data.control.subtitle
-            favorite.isChecked = data.favorite
-            removed.text = if (data.removed) "Removed" else ""
-            favorite.setOnClickListener {
-                val infoBuilder = ControlInfo.Builder().apply {
-                    controlId = data.control.controlId
-                    controlTitle = data.control.title
-                    deviceType = data.control.deviceType
-                }
-                callback(infoBuilder, favorite.isChecked)
-            }
-            itemView.setOnClickListener {
-                favorite.performClick()
-            }
-            applyRenderInfo(renderInfo)
-        }
+/**
+ * Holder for using with [ZoneNameWrapper] to display names of zones.
+ */
+private class ZoneHolder(view: View) : Holder(view) {
+    private val zone: TextView = itemView as TextView
 
-        private fun getRenderInfo(
-            @DeviceTypes.DeviceType deviceType: Int,
-            favorite: Boolean
-        ): RenderInfo {
-            return RenderInfo.lookup(deviceType, favorite)
-        }
+    override fun bindData(wrapper: ElementWrapper) {
+        wrapper as ZoneNameWrapper
+        zone.text = wrapper.zoneName
+    }
+}
 
-        private fun applyRenderInfo(ri: RenderInfo) {
-            val context = itemView.context
-            val fg = context.getResources().getColorStateList(ri.foreground, context.getTheme())
-
-            icon.setImageIcon(Icon.createWithResource(context, ri.iconResourceId))
-            icon.setImageTintList(fg)
-        }
+/**
+ * Holder for using with [ControlWrapper] to display names of zones.
+ * @param favoriteCallback this callback will be called whenever the favorite state of the
+ *                         [Control] this view represents changes.
+ */
+private class ControlHolder(view: View, val favoriteCallback: ModelFavoriteChanger) : Holder(view) {
+    private val icon: ImageView = itemView.requireViewById(R.id.icon)
+    private val title: TextView = itemView.requireViewById(R.id.title)
+    private val subtitle: TextView = itemView.requireViewById(R.id.subtitle)
+    private val removed: TextView = itemView.requireViewById(R.id.status)
+    private val favorite: CheckBox = itemView.requireViewById<CheckBox>(R.id.favorite).apply {
+        visibility = View.VISIBLE
     }
 
-    fun setItems(list: List<ControlStatus>) {
-        listOfControls = list
-        notifyDataSetChanged()
+    override fun bindData(wrapper: ElementWrapper) {
+        wrapper as ControlWrapper
+        val data = wrapper.controlStatus
+        val renderInfo = getRenderInfo(data.control.deviceType)
+        title.text = data.control.title
+        subtitle.text = data.control.subtitle
+        favorite.isChecked = data.favorite
+        removed.text = if (data.removed) "Removed" else ""
+        favorite.setOnClickListener {
+            favoriteCallback(data.control.controlId, favorite.isChecked)
+        }
+        applyRenderInfo(renderInfo)
+    }
+
+    private fun getRenderInfo(
+        @DeviceTypes.DeviceType deviceType: Int
+    ): RenderInfo {
+        return RenderInfo.lookup(deviceType, true)
+    }
+
+    private fun applyRenderInfo(ri: RenderInfo) {
+        val context = itemView.context
+        val fg = context.getResources().getColorStateList(ri.foreground, context.getTheme())
+
+        icon.setImageIcon(Icon.createWithResource(context, ri.iconResourceId))
+        icon.setImageTintList(fg)
     }
 }
 
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsFavoritingActivity.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsFavoritingActivity.kt
index be52583..af4a977 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsFavoritingActivity.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsFavoritingActivity.kt
@@ -18,10 +18,15 @@
 
 import android.app.Activity
 import android.content.ComponentName
+import android.content.Intent
 import android.os.Bundle
 import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewStub
+import android.widget.Button
 import android.widget.TextView
 import androidx.recyclerview.widget.GridLayoutManager
+import androidx.recyclerview.widget.ItemTouchHelper
 import androidx.recyclerview.widget.RecyclerView
 import com.android.systemui.R
 import com.android.systemui.broadcast.BroadcastDispatcher
@@ -30,6 +35,7 @@
 import com.android.systemui.dagger.qualifiers.Main
 import com.android.systemui.settings.CurrentUserTracker
 import java.util.concurrent.Executor
+import java.util.function.Consumer
 import javax.inject.Inject
 
 class ControlsFavoritingActivity @Inject constructor(
@@ -41,13 +47,37 @@
     companion object {
         private const val TAG = "ControlsFavoritingActivity"
         const val EXTRA_APP = "extra_app_label"
-        const val EXTRA_COMPONENT = "extra_component"
     }
 
-    private lateinit var recyclerView: RecyclerView
-    private lateinit var adapter: ControlAdapter
+    private lateinit var recyclerViewAll: RecyclerView
+    private lateinit var adapterAll: ControlAdapter
+    private lateinit var recyclerViewFavorites: RecyclerView
+    private lateinit var adapterFavorites: ControlAdapter
+    private lateinit var errorText: TextView
     private var component: ComponentName? = null
 
+    private var currentModel: FavoriteModel? = null
+    private var itemTouchHelperCallback = object : ItemTouchHelper.SimpleCallback(
+            /* dragDirs */ ItemTouchHelper.UP
+                    or ItemTouchHelper.DOWN
+                    or ItemTouchHelper.LEFT
+                    or ItemTouchHelper.RIGHT,
+            /* swipeDirs */0
+    ) {
+        override fun onMove(
+            recyclerView: RecyclerView,
+            viewHolder: RecyclerView.ViewHolder,
+            target: RecyclerView.ViewHolder
+        ): Boolean {
+            return currentModel?.onMoveItem(
+                    viewHolder.layoutPosition, target.layoutPosition) != null
+        }
+
+        override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {}
+
+        override fun isItemViewSwipeEnabled() = false
+    }
+
     private val currentUserTracker = object : CurrentUserTracker(broadcastDispatcher) {
         private val startingUser = controller.currentUserId
 
@@ -62,41 +92,82 @@
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.controls_management)
+        requireViewById<ViewStub>(R.id.stub).apply {
+            layoutResource = R.layout.controls_management_favorites
+            inflate()
+        }
 
         val app = intent.getCharSequenceExtra(EXTRA_APP)
-        component = intent.getParcelableExtra<ComponentName>(EXTRA_COMPONENT)
+        component = intent.getParcelableExtra<ComponentName>(Intent.EXTRA_COMPONENT_NAME)
+        errorText = requireViewById(R.id.error_message)
 
-        // If we have no component name, there's not much we can do.
-        val callback = component?.let {
-            { infoBuilder: ControlInfo.Builder, status: Boolean ->
-                infoBuilder.componentName = it
-                controller.changeFavoriteStatus(infoBuilder.build(), status)
-            }
-        } ?: { _, _ -> Unit }
-
-        recyclerView = requireViewById(R.id.list)
-        adapter = ControlAdapter(LayoutInflater.from(applicationContext), callback)
-        recyclerView.adapter = adapter
-        recyclerView.layoutManager = GridLayoutManager(applicationContext, 2)
-        val margin = resources.getDimensionPixelSize(R.dimen.controls_card_margin)
-        recyclerView.addItemDecoration(MarginItemDecorator(margin, margin))
+        setUpRecyclerViews()
 
         requireViewById<TextView>(R.id.title).text = app?.let { it }
                 ?: resources.getText(R.string.controls_favorite_default_title)
         requireViewById<TextView>(R.id.subtitle).text =
                 resources.getText(R.string.controls_favorite_subtitle)
 
+        requireViewById<Button>(R.id.done).setOnClickListener {
+            if (component == null) return@setOnClickListener
+            val favoritesForStorage = currentModel?.favorites?.map {
+                with(it.controlStatus.control) {
+                    ControlInfo(component!!, controlId, title, deviceType)
+                }
+            }
+            if (favoritesForStorage != null) {
+                controller.replaceFavoritesForComponent(component!!, favoritesForStorage)
+                finishAffinity()
+            }
+        }
+
+        component?.let {
+            controller.loadForComponent(it, Consumer { data ->
+                val allControls = data.allControls
+                val favoriteKeys = data.favoritesIds
+                val error = data.errorOnLoad
+                executor.execute {
+                    val favoriteModel = FavoriteModel(
+                        allControls,
+                        favoriteKeys,
+                        allAdapter = adapterAll,
+                        favoritesAdapter = adapterFavorites)
+                    adapterAll.changeFavoritesModel(favoriteModel)
+                    adapterFavorites.changeFavoritesModel(favoriteModel)
+                    currentModel = favoriteModel
+                    errorText.visibility = if (error) View.VISIBLE else View.GONE
+                }
+            })
+        }
+
         currentUserTracker.startTracking()
     }
 
-    override fun onResume() {
-        super.onResume()
-        component?.let {
-            controller.loadForComponent(it) {
-                executor.execute {
-                    adapter.setItems(it)
-                }
+    private fun setUpRecyclerViews() {
+        val margin = resources.getDimensionPixelSize(R.dimen.controls_card_margin)
+        val itemDecorator = MarginItemDecorator(margin, margin)
+        val layoutInflater = LayoutInflater.from(applicationContext)
+
+        adapterAll = ControlAdapter(layoutInflater)
+        recyclerViewAll = requireViewById<RecyclerView>(R.id.listAll).apply {
+            adapter = adapterAll
+            layoutManager = GridLayoutManager(applicationContext, 2).apply {
+                spanSizeLookup = adapterAll.spanSizeLookup
             }
+            addItemDecoration(itemDecorator)
         }
+
+        adapterFavorites = ControlAdapter(layoutInflater, true)
+        recyclerViewFavorites = requireViewById<RecyclerView>(R.id.listFavorites).apply {
+            layoutManager = GridLayoutManager(applicationContext, 2)
+            adapter = adapterFavorites
+            addItemDecoration(itemDecorator)
+        }
+        ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerViewFavorites)
+    }
+
+    override fun onDestroy() {
+        currentUserTracker.stopTracking()
+        super.onDestroy()
     }
 }
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingController.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingController.kt
index 34db684..8e47f64 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingController.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingController.kt
@@ -21,15 +21,30 @@
 import com.android.systemui.controls.UserAwareController
 import com.android.systemui.statusbar.policy.CallbackController
 
+/**
+ * Controller for keeping track of services that can be bound given a particular [ServiceListing].
+ */
 interface ControlsListingController :
         CallbackController<ControlsListingController.ControlsListingCallback>,
         UserAwareController {
 
+    /**
+     * @return the current list of services that satisfies the [ServiceListing].
+     */
     fun getCurrentServices(): List<CandidateInfo>
+
+    /**
+     * Get the app label for a given component.
+     *
+     * This call may do Binder calls (to [PackageManager])
+     *
+     * @param name the component name to retrieve the label
+     * @return the label for the component
+     */
     fun getAppLabel(name: ComponentName): CharSequence? = ""
 
     @FunctionalInterface
     interface ControlsListingCallback {
-        fun onServicesUpdated(list: List<CandidateInfo>)
+        fun onServicesUpdated(candidates: List<CandidateInfo>)
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt
index 645e929..ad4bdef 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt
@@ -20,6 +20,7 @@
 import android.content.Intent
 import android.os.Bundle
 import android.view.LayoutInflater
+import android.view.ViewStub
 import android.widget.TextView
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
@@ -63,11 +64,21 @@
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.controls_management)
+        requireViewById<ViewStub>(R.id.stub).apply {
+            layoutResource = R.layout.controls_management_apps
+            inflate()
+        }
 
         recyclerView = requireViewById(R.id.list)
-        recyclerView.adapter = AppAdapter(executor, lifecycle, listingController,
-                LayoutInflater.from(this), ::launchFavoritingActivity,
-                FavoritesRenderer(resources, controlsController::countFavoritesForComponent))
+        recyclerView.adapter = AppAdapter(
+                backExecutor,
+                executor,
+                lifecycle,
+                listingController,
+                LayoutInflater.from(this),
+                ::launchFavoritingActivity,
+                FavoritesRenderer(resources, controlsController::countFavoritesForComponent),
+                resources)
         recyclerView.layoutManager = LinearLayoutManager(applicationContext)
 
         requireViewById<TextView>(R.id.title).text =
@@ -89,11 +100,16 @@
                         .apply {
                     putExtra(ControlsFavoritingActivity.EXTRA_APP,
                             listingController.getAppLabel(it))
-                    putExtra(ControlsFavoritingActivity.EXTRA_COMPONENT, it)
-                    flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP
+                    putExtra(Intent.EXTRA_COMPONENT_NAME, it)
+                    flags = Intent.FLAG_ACTIVITY_SINGLE_TOP
                 }
                 startActivity(intent)
             }
         }
     }
+
+    override fun onDestroy() {
+        currentUserTracker.stopTracking()
+        super.onDestroy()
+    }
 }
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/FavoriteModel.kt b/packages/SystemUI/src/com/android/systemui/controls/management/FavoriteModel.kt
new file mode 100644
index 0000000..6bade0a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/FavoriteModel.kt
@@ -0,0 +1,153 @@
+/*
+ * 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.controls.management
+
+import android.text.TextUtils
+import android.util.Log
+import com.android.systemui.controls.ControlStatus
+import java.util.Collections
+import java.util.Comparator
+
+/**
+ * Model for keeping track of current favorites and their order.
+ *
+ * This model is to be used with two [ControlAdapter] one that shows only favorites in the current
+ * order and another that shows all controls, separated by zone. When the favorite state of any
+ * control is modified or when the favorites are reordered, the adapters are notified of the change.
+ *
+ * @param listControls list of all the [ControlStatus] to display. This includes controls currently
+ *                     marked as favorites as well as those that have been removed (not returned
+ *                     from load)
+ * @param listFavoritesIds list of the [Control.controlId] for all the favorites, including those
+ *                         that have been removed.
+ * @param favoritesAdapter [ControlAdapter] used by the [RecyclerView] that shows only favorites
+ * @param allAdapter [ControlAdapter] used by the [RecyclerView] that shows all controls
+ */
+class FavoriteModel(
+    private val listControls: List<ControlStatus>,
+    listFavoritesIds: List<String>,
+    private val favoritesAdapter: ControlAdapter,
+    private val allAdapter: ControlAdapter
+) {
+
+    companion object {
+        private const val TAG = "FavoriteModel"
+    }
+
+    /**
+     * List of favorite controls ([ControlWrapper]) in order.
+     *
+     * Initially, this list will give a list of wrappers in the order specified by the constructor
+     * variable `listFavoriteIds`.
+     *
+     * As the favorites are added, removed or moved, this list will keep track of those changes.
+     */
+    val favorites: List<ControlWrapper> = listFavoritesIds.map { id ->
+            ControlWrapper(listControls.first { it.control.controlId == id })
+        }.toMutableList()
+
+    /**
+     * List of all controls by zones.
+     *
+     * Lists all the controls with the zone names interleaved as a flat list. After each zone name,
+     * the controls in that zone are listed. Zones are listed in alphabetical order
+     */
+    val all: List<ElementWrapper> = listControls.groupBy { it.control.zone }
+            .mapKeys { it.key ?: "" } // map null to empty
+            .toSortedMap(CharSequenceComparator())
+            .flatMap {
+                val controls = it.value.map { ControlWrapper(it) }
+                if (!TextUtils.isEmpty(it.key)) {
+                    listOf(ZoneNameWrapper(it.key)) + controls
+                } else {
+                    controls
+                }
+            }
+
+    /**
+     * Change the favorite status of a [Control].
+     *
+     * This can be invoked from any of the [ControlAdapter]. It will change the status of that
+     * control and either add it to the list of favorites (at the end) or remove it from it.
+     *
+     * Removing the favorite status from a Removed control will make it disappear completely if
+     * changes are saved.
+     *
+     * @param controlId the id of the [Control] to change the status
+     * @param favorite `true` if and only if it's set to be a favorite.
+     */
+    fun changeFavoriteStatus(controlId: String, favorite: Boolean) {
+        favorites as MutableList
+        val index = all.indexOfFirst {
+            it is ControlWrapper && it.controlStatus.control.controlId == controlId
+        }
+        val control = (all[index] as ControlWrapper).controlStatus
+        if (control.favorite == favorite) {
+            Log.d(TAG, "Changing favorite to same state for ${control.control.controlId} ")
+            return
+        } else {
+            control.favorite = favorite
+        }
+        allAdapter.notifyItemChanged(index)
+        if (favorite) {
+            favorites.add(all[index] as ControlWrapper)
+            favoritesAdapter.notifyItemInserted(favorites.size - 1)
+        } else {
+            val i = favorites.indexOfFirst { it.controlStatus.control.controlId == controlId }
+            favorites.removeAt(i)
+            favoritesAdapter.notifyItemRemoved(i)
+        }
+    }
+
+    /**
+     * Move items in the model and notify the [favoritesAdapter].
+     */
+    fun onMoveItem(from: Int, to: Int) {
+        if (from < to) {
+            for (i in from until to) {
+                Collections.swap(favorites, i, i + 1)
+            }
+        } else {
+            for (i in from downTo to + 1) {
+                Collections.swap(favorites, i, i - 1)
+            }
+        }
+        favoritesAdapter.notifyItemMoved(from, to)
+    }
+}
+
+/**
+ * Compares [CharSequence] as [String].
+ *
+ * It will have empty strings as the first element
+ */
+class CharSequenceComparator : Comparator<CharSequence> {
+    override fun compare(p0: CharSequence?, p1: CharSequence?): Int {
+        if (p0 == null && p1 == null) return 0
+        else if (p0 == null && p1 != null) return -1
+        else if (p0 != null && p1 == null) return 1
+        return p0.toString().compareTo(p1.toString())
+    }
+}
+
+/**
+ * Wrapper classes for the different types of elements shown in the [RecyclerView]s in
+ * [ControlsFavoritingActivity].
+ */
+sealed class ElementWrapper
+data class ZoneNameWrapper(val zoneName: CharSequence) : ElementWrapper()
+data class ControlWrapper(val controlStatus: ControlStatus) : ElementWrapper()
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/Behavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/Behavior.kt
index 44f3fbc..275c778 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/Behavior.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/Behavior.kt
@@ -16,6 +16,20 @@
 
 package com.android.systemui.controls.ui
 
+/**
+ * All controls need to respond to changes in state and handle user-generated events.
+ * Implementations of this interface provide these different means by adding their own
+ * event handlers, and will update the control ui as they see fit.
+ */
 interface Behavior {
-    fun apply(cvh: ControlViewHolder, cws: ControlWithState)
+
+    /**
+     * Only called once per instance
+     */
+    fun initialize(cvh: ControlViewHolder)
+
+    /**
+     * Will be invoked on every update provided to the Control
+     */
+    fun bind(cws: ControlWithState)
 }
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinator.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinator.kt
new file mode 100644
index 0000000..eb84a8b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinator.kt
@@ -0,0 +1,62 @@
+/*
+ * 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.controls.ui
+
+import android.app.PendingIntent
+import android.content.Intent
+import android.provider.Settings
+import android.service.controls.actions.BooleanAction
+import android.util.Log
+import android.view.HapticFeedbackConstants
+
+object ControlActionCoordinator {
+    public const val MIN_LEVEL = 0
+    public const val MAX_LEVEL = 10000
+
+    private var useDetailDialog: Boolean? = null
+
+    fun toggle(cvh: ControlViewHolder, templateId: String, isChecked: Boolean) {
+        cvh.action(BooleanAction(templateId, !isChecked))
+
+        val nextLevel = if (isChecked) MIN_LEVEL else MAX_LEVEL
+        cvh.clipLayer.setLevel(nextLevel)
+    }
+
+    fun longPress(cvh: ControlViewHolder) {
+        // Long press snould only be called when there is valid control state, otherwise ignore
+        cvh.cws.control?.let {
+            if (useDetailDialog == null) {
+                useDetailDialog = Settings.Secure.getInt(cvh.context.getContentResolver(),
+                    "systemui.controls_use_detail_panel", 0) != 0
+            }
+
+            try {
+                cvh.layout.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
+                if (useDetailDialog!!) {
+                    DetailDialog(cvh.context, it.getAppIntent()).show()
+                } else {
+                    it.getAppIntent().send()
+                    val closeDialog = Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)
+                    cvh.context.sendBroadcast(closeDialog)
+                }
+            } catch (e: PendingIntent.CanceledException) {
+                Log.e(ControlsUiController.TAG, "Error sending pending intent", e)
+                cvh.setTransientStatus("Error opening application")
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt
index 88b19b5..feaea7c 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt
@@ -17,15 +17,15 @@
 package com.android.systemui.controls.ui
 
 import android.content.Context
-import android.content.Intent
+import android.graphics.BlendMode
 import android.graphics.drawable.ClipDrawable
-import android.graphics.drawable.GradientDrawable
 import android.graphics.drawable.Icon
 import android.graphics.drawable.LayerDrawable
 import android.service.controls.Control
 import android.service.controls.actions.ControlAction
 import android.service.controls.templates.ControlTemplate
 import android.service.controls.templates.TemperatureControlTemplate
+import android.service.controls.templates.ThumbnailTemplate
 import android.service.controls.templates.ToggleRangeTemplate
 import android.service.controls.templates.ToggleTemplate
 import android.view.View
@@ -37,14 +37,15 @@
 import com.android.systemui.util.concurrency.DelayableExecutor
 import com.android.systemui.R
 
-const val MIN_LEVEL = 0
-const val MAX_LEVEL = 10000
-private const val UPDATE_DELAY_IN_MILLIS = 2000L
+import kotlin.reflect.KClass
+
+private const val UPDATE_DELAY_IN_MILLIS = 3000L
 
 class ControlViewHolder(
     val layout: ViewGroup,
     val controlsController: ControlsController,
-    val uiExecutor: DelayableExecutor
+    val uiExecutor: DelayableExecutor,
+    val bgExecutor: DelayableExecutor
 ) {
     val icon: ImageView = layout.requireViewById(R.id.icon)
     val status: TextView = layout.requireViewById(R.id.status)
@@ -53,15 +54,14 @@
     val subtitle: TextView = layout.requireViewById(R.id.subtitle)
     val context: Context = layout.getContext()
     val clipLayer: ClipDrawable
-    val gd: GradientDrawable
     lateinit var cws: ControlWithState
     var cancelUpdate: Runnable? = null
+    var behavior: Behavior? = null
 
     init {
         val ld = layout.getBackground() as LayerDrawable
         ld.mutate()
         clipLayer = ld.findDrawableByLayerId(R.id.clip_layer) as ClipDrawable
-        gd = clipLayer.getDrawable() as GradientDrawable
     }
 
     fun bindData(cws: ControlWithState) {
@@ -79,17 +79,21 @@
             Pair(Control.STATUS_UNKNOWN, ControlTemplate.NO_TEMPLATE)
         }
 
-        cws.control?.let { c ->
+        cws.control?.let {
             layout.setOnLongClickListener(View.OnLongClickListener() {
-                val closeDialog = Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)
-                context.sendBroadcast(closeDialog)
-
-                c.getAppIntent().send()
+                ControlActionCoordinator.longPress(this@ControlViewHolder)
                 true
             })
         }
 
-        findBehavior(status, template).apply(this, cws)
+        val clazz = findBehavior(status, template)
+        if (behavior == null || behavior!!::class != clazz) {
+            // Behavior changes can signal a change in template from the app or
+            // first time setup
+            behavior = clazz.java.newInstance()
+            behavior?.initialize(this)
+        }
+        behavior?.bind(cws)
     }
 
     fun actionResponse(@ControlAction.ResponseResult response: Int) {
@@ -100,37 +104,35 @@
         }
 
         if (!text.isEmpty()) {
-            val previousText = status.getText()
-            val previousTextExtra = statusExtra.getText()
-
-            cancelUpdate = uiExecutor.executeDelayed({
-                    status.setText(previousText)
-                    statusExtra.setText(previousTextExtra)
-                }, UPDATE_DELAY_IN_MILLIS)
-
-            status.setText(text)
-            statusExtra.setText("")
+            setTransientStatus(text)
         }
     }
 
+    fun setTransientStatus(tempStatus: String) {
+        val previousText = status.getText()
+        val previousTextExtra = statusExtra.getText()
+
+        cancelUpdate = uiExecutor.executeDelayed({
+                status.setText(previousText)
+                statusExtra.setText(previousTextExtra)
+            }, UPDATE_DELAY_IN_MILLIS)
+
+        status.setText(tempStatus)
+        statusExtra.setText("")
+    }
+
     fun action(action: ControlAction) {
         controlsController.action(cws.ci, action)
     }
 
-    private fun findBehavior(status: Int, template: ControlTemplate): Behavior {
+    private fun findBehavior(status: Int, template: ControlTemplate): KClass<out Behavior> {
         return when {
-            status == Control.STATUS_UNKNOWN -> UnknownBehavior()
-            template is ToggleTemplate -> ToggleBehavior()
-            template is ToggleRangeTemplate -> ToggleRangeBehavior()
-            template is TemperatureControlTemplate -> TemperatureControlBehavior()
-            else -> {
-                object : Behavior {
-                    override fun apply(cvh: ControlViewHolder, cws: ControlWithState) {
-                        cvh.status.setText(cws.control?.getStatusText())
-                        cvh.applyRenderInfo(RenderInfo.lookup(cws.ci.deviceType, false))
-                    }
-                }
-            }
+            status == Control.STATUS_UNKNOWN -> UnknownBehavior::class
+            template is ToggleTemplate -> ToggleBehavior::class
+            template is ToggleRangeTemplate -> ToggleRangeBehavior::class
+            template is TemperatureControlTemplate -> TemperatureControlBehavior::class
+            template is ThumbnailTemplate -> StaticBehavior::class
+            else -> DefaultBehavior::class
         }
     }
 
@@ -143,7 +145,10 @@
         icon.setImageIcon(Icon.createWithResource(context, ri.iconResourceId))
         icon.setImageTintList(fg)
 
-        gd.setColor(bg)
+        clipLayer.getDrawable().apply {
+            setTintBlendMode(BlendMode.HUE)
+            setTintList(bg)
+        }
     }
 
     fun setEnabled(enabled: Boolean) {
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt
index d70c86f..0f10537 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt
@@ -24,6 +24,10 @@
 interface ControlsUiController {
     val available: Boolean
 
+    companion object {
+        public const val TAG = "ControlsUiController"
+    }
+
     fun show(parent: ViewGroup)
     fun hide()
     fun onRefreshState(componentName: ComponentName, controls: List<Control>)
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 ed521e3..f4fd375 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
@@ -22,6 +22,7 @@
 import android.content.Context
 import android.content.Intent
 import android.content.ServiceConnection
+import android.graphics.drawable.Drawable
 import android.os.IBinder
 import android.service.controls.Control
 import android.service.controls.TokenProvider
@@ -29,24 +30,27 @@
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.widget.ImageView
 import android.widget.LinearLayout
 import android.widget.Space
-import android.widget.TextView
 
+import com.android.settingslib.widget.CandidateInfo
 import com.android.systemui.controls.controller.ControlsController
 import com.android.systemui.controls.controller.ControlInfo
+import com.android.systemui.controls.management.ControlsListingController
 import com.android.systemui.controls.management.ControlsProviderSelectorActivity
+import com.android.systemui.dagger.qualifiers.Background
 import com.android.systemui.dagger.qualifiers.Main
 import com.android.systemui.R
 import com.android.systemui.util.concurrency.DelayableExecutor
 
 import dagger.Lazy
 
+import java.text.Collator
+
 import javax.inject.Inject
 import javax.inject.Singleton
 
-private const val TAG = "ControlsUi"
-
 // TEMP CODE for MOCK
 private const val TOKEN = "https://www.googleapis.com/auth/assistant"
 private const val SCOPE = "oauth2:" + TOKEN
@@ -57,13 +61,13 @@
 
     override fun onServiceConnected(cName: ComponentName, binder: IBinder) {
         Thread({
-            Log.i(TAG, "TokenProviderConnection connected")
+            Log.i(ControlsUiController.TAG, "TokenProviderConnection connected")
             mTokenProvider = TokenProvider.Stub.asInterface(binder)
 
             val mLastAccountName = mTokenProvider?.getAccountName()
 
             if (mLastAccountName == null || mLastAccountName.isEmpty()) {
-                Log.e(TAG, "NO ACCOUNT IS SET. Open HomeMock app")
+                Log.e(ControlsUiController.TAG, "NO ACCOUNT IS SET. Open HomeMock app")
             } else {
                 mTokenProvider?.setAuthToken(getAuthToken(mLastAccountName))
                 cc.subscribeToFavorites()
@@ -79,7 +83,7 @@
         val am = AccountManager.get(context)
         val accounts = am.getAccountsByType("com.google")
         if (accounts == null || accounts.size == 0) {
-            Log.w(TAG, "No com.google accounts found")
+            Log.w(ControlsUiController.TAG, "No com.google accounts found")
             return null
         }
 
@@ -98,7 +102,7 @@
         try {
             return am.blockingGetAuthToken(account!!, SCOPE, true)
         } catch (e: Throwable) {
-            Log.e(TAG, "Error getting auth token", e)
+            Log.e(ControlsUiController.TAG, "Error getting auth token", e)
             return null
         }
     }
@@ -110,7 +114,9 @@
 class ControlsUiControllerImpl @Inject constructor (
     val controlsController: Lazy<ControlsController>,
     val context: Context,
-    @Main val uiExecutor: DelayableExecutor
+    @Main val uiExecutor: DelayableExecutor,
+    @Background val bgExecutor: DelayableExecutor,
+    val controlsListingController: Lazy<ControlsListingController>
 ) : ControlsUiController {
 
     private lateinit var controlInfos: List<ControlInfo>
@@ -121,8 +127,23 @@
     override val available: Boolean
         get() = controlsController.get().available
 
+    private val listingCallback = object : ControlsListingController.ControlsListingCallback {
+        override fun onServicesUpdated(candidates: List<CandidateInfo>) {
+            bgExecutor.execute {
+                val collator = Collator.getInstance(context.resources.configuration.locales[0])
+                val localeComparator = compareBy<CandidateInfo, CharSequence>(collator) {
+                    it.loadLabel()
+                }
+
+                val mList = candidates.toMutableList()
+                mList.sortWith(localeComparator)
+                loadInitialSetupViewIcons(mList.map { it.loadLabel() to it.loadIcon() })
+            }
+        }
+    }
+
     override fun show(parent: ViewGroup) {
-        Log.d(TAG, "show()")
+        Log.d(ControlsUiController.TAG, "show()")
 
         this.parent = parent
 
@@ -153,8 +174,26 @@
         val inflater = LayoutInflater.from(context)
         inflater.inflate(R.layout.controls_no_favorites, parent, true)
 
-        val textView = parent.requireViewById(R.id.controls_title) as TextView
-        textView.setOnClickListener(launchSelectorActivityListener(context))
+        val viewGroup = parent.requireViewById(R.id.controls_no_favorites_group) as ViewGroup
+        viewGroup.setOnClickListener(launchSelectorActivityListener(context))
+
+        controlsListingController.get().addCallback(listingCallback)
+    }
+
+    private fun loadInitialSetupViewIcons(icons: List<Pair<CharSequence, Drawable>>) {
+        uiExecutor.execute {
+            val viewGroup = parent.requireViewById(R.id.controls_icon_row) as ViewGroup
+            viewGroup.removeAllViews()
+
+            val inflater = LayoutInflater.from(context)
+            icons.forEach {
+                val imageView = inflater.inflate(R.layout.controls_icon, viewGroup, false)
+                        as ImageView
+                imageView.setContentDescription(it.first)
+                imageView.setImageDrawable(it.second)
+                viewGroup.addView(imageView)
+            }
+        }
     }
 
     private fun launchSelectorActivityListener(context: Context): (View) -> Unit {
@@ -176,14 +215,14 @@
         val listView = parent.requireViewById(R.id.global_actions_controls_list) as ViewGroup
         var lastRow: ViewGroup = createRow(inflater, listView)
         controlInfos.forEach {
-            Log.d(TAG, "favorited control id: " + it.controlId)
+            Log.d(ControlsUiController.TAG, "favorited control id: " + it.controlId)
             if (lastRow.getChildCount() == 2) {
                 lastRow = createRow(inflater, listView)
             }
             val item = inflater.inflate(
                 R.layout.controls_base_item, lastRow, false) as ViewGroup
             lastRow.addView(item)
-            val cvh = ControlViewHolder(item, controlsController.get(), uiExecutor)
+            val cvh = ControlViewHolder(item, controlsController.get(), uiExecutor, bgExecutor)
             val key = ControlKey(it.component, it.controlId)
             cvh.bindData(controlsById.getValue(key))
             controlViewsById.put(key, cvh)
@@ -198,7 +237,7 @@
     }
 
     override fun hide() {
-        Log.d(TAG, "hide()")
+        Log.d(ControlsUiController.TAG, "hide()")
         controlsController.get().unsubscribe()
         context.unbindService(tokenProviderConnection)
         tokenProviderConnection = null
@@ -206,13 +245,14 @@
         parent.removeAllViews()
         controlsById.clear()
         controlViewsById.clear()
+        controlsListingController.get().removeCallback(listingCallback)
     }
 
     override fun onRefreshState(componentName: ComponentName, controls: List<Control>) {
-        Log.d(TAG, "onRefreshState()")
+        Log.d(ControlsUiController.TAG, "onRefreshState()")
         controls.forEach { c ->
             controlsById.get(ControlKey(componentName, c.getControlId()))?.let {
-                Log.d(TAG, "onRefreshState() for id: " + c.getControlId())
+                Log.d(ControlsUiController.TAG, "onRefreshState() for id: " + c.getControlId())
                 val cws = ControlWithState(it.ci, c)
                 val key = ControlKey(componentName, c.getControlId())
                 controlsById.put(key, cws)
@@ -231,9 +271,9 @@
         }
     }
 
-    private fun createRow(inflater: LayoutInflater, parent: ViewGroup): ViewGroup {
-        val row = inflater.inflate(R.layout.controls_row, parent, false) as ViewGroup
-        parent.addView(row)
+    private fun createRow(inflater: LayoutInflater, listView: ViewGroup): ViewGroup {
+        val row = inflater.inflate(R.layout.controls_row, listView, false) as ViewGroup
+        listView.addView(row)
         return row
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/CornerDrawable.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/CornerDrawable.kt
new file mode 100644
index 0000000..af581e1
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/CornerDrawable.kt
@@ -0,0 +1,57 @@
+/*
+ * 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.controls.ui
+
+import android.graphics.Canvas
+import android.graphics.Path
+import android.graphics.Rect
+import android.graphics.RectF
+import android.graphics.drawable.Drawable
+import android.graphics.drawable.DrawableWrapper
+
+/**
+ * Use a path to add mask for corners around the drawable, to match the radius
+ * of the underlying shape.
+ */
+class CornerDrawable(val wrapped: Drawable, val cornerRadius: Float) : DrawableWrapper(wrapped) {
+    val path: Path = Path()
+
+    init {
+        val b = getBounds()
+        updatePath(RectF(b))
+    }
+
+    override fun draw(canvas: Canvas) {
+        canvas.clipPath(path)
+        super.draw(canvas)
+    }
+
+    override fun setBounds(l: Int, t: Int, r: Int, b: Int) {
+        updatePath(RectF(l.toFloat(), t.toFloat(), r.toFloat(), b.toFloat()))
+        super.setBounds(l, t, r, b)
+    }
+
+    override fun setBounds(r: Rect) {
+        updatePath(RectF(r))
+        super.setBounds(r)
+    }
+
+    private fun updatePath(r: RectF) {
+        path.reset()
+        path.addRoundRect(r, cornerRadius, cornerRadius, Path.Direction.CW)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/DefaultBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/DefaultBehavior.kt
new file mode 100644
index 0000000..1747929
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/DefaultBehavior.kt
@@ -0,0 +1,31 @@
+/*
+ * 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.controls.ui
+
+class DefaultBehavior : Behavior {
+    lateinit var cvh: ControlViewHolder
+
+    override fun initialize(cvh: ControlViewHolder) {
+        this.cvh = cvh
+    }
+
+    override fun bind(cws: ControlWithState) {
+        cvh.status.setText(cws.control?.getStatusText() ?: "")
+        cvh.setEnabled(false)
+        cvh.applyRenderInfo(RenderInfo.lookup(cws.ci.deviceType, false))
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt
new file mode 100644
index 0000000..d3d4287
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt
@@ -0,0 +1,110 @@
+/*
+ * 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.controls.ui
+
+import android.app.ActivityView
+import android.app.ActivityOptions
+import android.app.Dialog
+import android.app.PendingIntent
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.view.View
+import android.view.ViewGroup
+import android.view.ViewGroup.LayoutParams.MATCH_PARENT
+import android.view.Window
+import android.view.WindowManager
+import android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
+
+import com.android.systemui.R
+
+/**
+ * A dialog that provides an {@link ActivityView}, allowing the application to provide
+ * additional information and actions pertaining to a {@link android.service.controls.Control}.
+ * The activity being launched is specified by {@link android.service.controls.Control#getAppIntent}.
+ */
+class DetailDialog(
+    val parentContext: Context,
+    val intent: PendingIntent
+) : Dialog(parentContext) {
+
+    var activityView: ActivityView
+
+    val stateCallback: ActivityView.StateCallback = object : ActivityView.StateCallback() {
+        override fun onActivityViewReady(view: ActivityView) {
+            val fillInIntent = Intent()
+
+            // Apply flags to make behaviour match documentLaunchMode=always.
+            fillInIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+            fillInIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
+            view.startActivity(intent, fillInIntent, ActivityOptions.makeBasic())
+        }
+
+        override fun onActivityViewDestroyed(view: ActivityView) {}
+
+        override fun onTaskCreated(taskId: Int, componentName: ComponentName) {}
+
+        override fun onTaskRemovalStarted(taskId: Int) {}
+    }
+
+    @Suppress("DEPRECATION")
+    private fun Window.setWindowParams() {
+        requestFeature(Window.FEATURE_NO_TITLE)
+
+        // Inflate the decor view, so the attributes below are not overwritten by the theme.
+        decorView
+        attributes.systemUiVisibility =
+                (attributes.systemUiVisibility
+                        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+                        or View.SYSTEM_UI_FLAG_LAYOUT_STABLE)
+
+        setLayout(MATCH_PARENT, MATCH_PARENT)
+        clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
+        addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
+                or WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR
+                or WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED)
+        setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY)
+        getAttributes().setFitInsetsTypes(0 /* types */)
+    }
+
+    init {
+        getWindow()?.setWindowParams()
+
+        setContentView(R.layout.controls_detail_dialog)
+
+        activityView = ActivityView(context, null, 0, false)
+        requireViewById<ViewGroup>(R.id.controls_activity_view).apply {
+            addView(activityView)
+        }
+    }
+
+    override fun show() {
+        val attrs = getWindow()?.attributes
+        attrs?.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
+        getWindow()?.attributes = attrs
+
+        activityView.setCallback(stateCallback)
+
+        super.show()
+    }
+
+    override fun dismiss() {
+        activityView.release()
+
+        super.dismiss()
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/StaticBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/StaticBehavior.kt
new file mode 100644
index 0000000..c006d6f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/StaticBehavior.kt
@@ -0,0 +1,67 @@
+/*
+ * 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.controls.ui
+
+import android.graphics.drawable.ClipDrawable
+import android.graphics.drawable.LayerDrawable
+import android.service.controls.Control
+import android.service.controls.templates.ThumbnailTemplate
+
+import com.android.systemui.R
+import com.android.systemui.controls.ui.ControlActionCoordinator.MAX_LEVEL
+
+/**
+ * Used for controls that cannot be interacted with. Information is presented to the user
+ * but no actions can be taken. If using a ThumbnailTemplate, the background image will
+ * be changed.
+ */
+class StaticBehavior() : Behavior {
+    lateinit var control: Control
+    lateinit var cvh: ControlViewHolder
+
+    override fun initialize(cvh: ControlViewHolder) {
+        this.cvh = cvh
+    }
+
+    override fun bind(cws: ControlWithState) {
+        this.control = cws.control!!
+
+        cvh.status.setText(control.getStatusText())
+
+        val ld = cvh.layout.getBackground() as LayerDrawable
+        val clipLayer = ld.findDrawableByLayerId(R.id.clip_layer) as ClipDrawable
+
+        clipLayer.setLevel(MAX_LEVEL)
+        cvh.setEnabled(true)
+        cvh.applyRenderInfo(RenderInfo.lookup(control.getDeviceType(), true))
+
+        val template = control.getControlTemplate()
+        if (template is ThumbnailTemplate) {
+            cvh.bgExecutor.execute {
+                // clear the default tinting in favor of only using alpha
+                val drawable = template.getThumbnail().loadDrawable(cvh.context)
+                drawable.setTintList(null)
+                drawable.setAlpha((0.45 * 255).toInt())
+                cvh.uiExecutor.execute {
+                    val radius = cvh.context.getResources()
+                            .getDimensionPixelSize(R.dimen.control_corner_radius).toFloat()
+                    clipLayer.setDrawable(CornerDrawable(drawable, radius))
+                }
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt
index ae0ebbb..239d2e5 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt
@@ -16,29 +16,29 @@
 
 package com.android.systemui.controls.ui
 
-import android.content.Context
 import android.graphics.drawable.Drawable
 import android.graphics.drawable.LayerDrawable
 import android.service.controls.Control
 import android.service.controls.templates.TemperatureControlTemplate
-import android.widget.TextView
 
 import com.android.systemui.R
+import com.android.systemui.controls.ui.ControlActionCoordinator.MIN_LEVEL
+import com.android.systemui.controls.ui.ControlActionCoordinator.MAX_LEVEL
 
 class TemperatureControlBehavior : Behavior {
     lateinit var clipLayer: Drawable
     lateinit var control: Control
     lateinit var cvh: ControlViewHolder
     lateinit var template: TemperatureControlTemplate
-    lateinit var status: TextView
-    lateinit var context: Context
 
-    override fun apply(cvh: ControlViewHolder, cws: ControlWithState) {
-        this.control = cws.control!!
+    override fun initialize(cvh: ControlViewHolder) {
         this.cvh = cvh
-        status = cvh.status
+    }
 
-        status.setText(control.getStatusText())
+    override fun bind(cws: ControlWithState) {
+        this.control = cws.control!!
+
+        cvh.status.setText(control.getStatusText())
 
         val ld = cvh.layout.getBackground() as LayerDrawable
         clipLayer = ld.findDrawableByLayerId(R.id.clip_layer)
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleBehavior.kt
index 7cd3ab7..d306d7c 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleBehavior.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleBehavior.kt
@@ -16,39 +16,40 @@
 
 package com.android.systemui.controls.ui
 
-import android.content.Context
 import android.graphics.drawable.Drawable
 import android.graphics.drawable.LayerDrawable
 import android.view.View
-import android.widget.TextView
 import android.service.controls.Control
-import android.service.controls.actions.BooleanAction
 import android.service.controls.templates.ToggleTemplate
 
 import com.android.systemui.R
+import com.android.systemui.controls.ui.ControlActionCoordinator.MIN_LEVEL
+import com.android.systemui.controls.ui.ControlActionCoordinator.MAX_LEVEL
 
 class ToggleBehavior : Behavior {
     lateinit var clipLayer: Drawable
     lateinit var template: ToggleTemplate
     lateinit var control: Control
     lateinit var cvh: ControlViewHolder
-    lateinit var context: Context
-    lateinit var status: TextView
 
-    override fun apply(cvh: ControlViewHolder, cws: ControlWithState) {
-        this.control = cws.control!!
+    override fun initialize(cvh: ControlViewHolder) {
         this.cvh = cvh
-        status = cvh.status
+        cvh.setEnabled(false)
 
-        status.setText(control.getStatusText())
+        cvh.layout.setOnClickListener(View.OnClickListener() {
+            ControlActionCoordinator.toggle(cvh, template.getTemplateId(), template.isChecked())
+        })
+    }
 
-        cvh.layout.setOnClickListener(View.OnClickListener() { toggle() })
+    override fun bind(cws: ControlWithState) {
+        this.control = cws.control!!
+
+        cvh.status.setText(control.getStatusText())
+        template = control.getControlTemplate() as ToggleTemplate
 
         val ld = cvh.layout.getBackground() as LayerDrawable
         clipLayer = ld.findDrawableByLayerId(R.id.clip_layer)
 
-        template = control.getControlTemplate() as ToggleTemplate
-
         val checked = template.isChecked()
         val deviceType = control.getDeviceType()
 
@@ -56,11 +57,4 @@
         cvh.setEnabled(checked)
         cvh.applyRenderInfo(RenderInfo.lookup(deviceType, checked))
     }
-
-    fun toggle() {
-        cvh.action(BooleanAction(template.getTemplateId(), !template.isChecked()))
-
-        val nextLevel = if (template.isChecked()) MIN_LEVEL else MAX_LEVEL
-        clipLayer.setLevel(nextLevel)
-    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt
index a6918f5..cca56c2 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt
@@ -19,17 +19,23 @@
 import android.content.Context
 import android.graphics.drawable.Drawable
 import android.graphics.drawable.LayerDrawable
+import android.util.Log
+import android.view.GestureDetector
+import android.view.GestureDetector.SimpleOnGestureListener
 import android.view.MotionEvent
 import android.view.View
 import android.widget.TextView
 import android.service.controls.Control
-import android.service.controls.actions.BooleanAction
 import android.service.controls.actions.FloatAction
 import android.service.controls.templates.RangeTemplate
 import android.service.controls.templates.ToggleRangeTemplate
 import android.util.TypedValue
 
 import com.android.systemui.R
+import com.android.systemui.controls.ui.ControlActionCoordinator.MIN_LEVEL
+import com.android.systemui.controls.ui.ControlActionCoordinator.MAX_LEVEL
+
+import java.util.IllegalFormatException
 
 class ToggleRangeBehavior : Behavior {
     lateinit var clipLayer: Drawable
@@ -41,21 +47,43 @@
     lateinit var status: TextView
     lateinit var context: Context
 
-    override fun apply(cvh: ControlViewHolder, cws: ControlWithState) {
-        this.control = cws.control!!
+    companion object {
+        private const val DEFAULT_FORMAT = "%.1f"
+    }
+
+    override fun initialize(cvh: ControlViewHolder) {
         this.cvh = cvh
-
-        statusExtra = cvh.statusExtra
         status = cvh.status
-
-        status.setText(control.getStatusText())
-
         context = status.getContext()
 
-        cvh.layout.setOnTouchListener(ToggleRangeTouchListener())
+        cvh.setEnabled(false)
+
+        val gestureListener = ToggleRangeGestureListener(cvh.layout)
+        val gestureDetector = GestureDetector(context, gestureListener)
+        cvh.layout.setOnTouchListener { _: View, e: MotionEvent ->
+            if (gestureDetector.onTouchEvent(e)) {
+                return@setOnTouchListener true
+            }
+
+            if (e.getAction() == MotionEvent.ACTION_UP && gestureListener.isDragging) {
+                gestureListener.isDragging = false
+                endUpdateRange()
+                return@setOnTouchListener true
+            }
+
+            return@setOnTouchListener false
+        }
+    }
+
+    override fun bind(cws: ControlWithState) {
+        this.control = cws.control!!
+
+        statusExtra = cvh.statusExtra
+        status.setText(control.getStatusText())
 
         val ld = cvh.layout.getBackground() as LayerDrawable
         clipLayer = ld.findDrawableByLayerId(R.id.clip_layer)
+        clipLayer.setLevel(MIN_LEVEL)
 
         template = control.getControlTemplate() as ToggleRangeTemplate
         rangeTemplate = template.getRange()
@@ -63,30 +91,31 @@
         val checked = template.isChecked()
         val deviceType = control.getDeviceType()
 
-        updateRange((rangeTemplate.getCurrentValue() / 100.0f), checked)
+        val currentRatio = rangeTemplate.getCurrentValue() /
+                (rangeTemplate.getMaxValue() - rangeTemplate.getMinValue())
+        updateRange(currentRatio, checked)
 
         cvh.setEnabled(checked)
         cvh.applyRenderInfo(RenderInfo.lookup(deviceType, checked))
     }
 
-    fun toggle() {
-        cvh.action(BooleanAction(template.getTemplateId(), !template.isChecked()))
-
-        val nextLevel = if (template.isChecked()) MIN_LEVEL else MAX_LEVEL
-        clipLayer.setLevel(nextLevel)
-    }
-
     fun beginUpdateRange() {
         status.setVisibility(View.GONE)
         statusExtra.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources()
                 .getDimensionPixelSize(R.dimen.control_status_expanded).toFloat())
     }
 
-    fun updateRange(f: Float, checked: Boolean) {
-        clipLayer.setLevel(if (checked) (MAX_LEVEL * f).toInt() else MIN_LEVEL)
+    fun updateRange(ratioDiff: Float, checked: Boolean) {
+        val changeAmount = if (checked) (MAX_LEVEL * ratioDiff).toInt() else MIN_LEVEL
+        val newLevel = Math.max(MIN_LEVEL, Math.min(MAX_LEVEL, clipLayer.getLevel() + changeAmount))
+        clipLayer.setLevel(newLevel)
 
-        if (checked && f < 100.0f && f > 0.0f) {
-            statusExtra.setText("" + (f * 100.0).toInt() + "%")
+        if (checked) {
+            val newValue = levelToRangeValue()
+            val formattedNewValue = format(rangeTemplate.getFormatString().toString(),
+                    DEFAULT_FORMAT, newValue)
+
+            statusExtra.setText(formattedNewValue)
             statusExtra.setVisibility(View.VISIBLE)
         } else {
             statusExtra.setText("")
@@ -94,17 +123,30 @@
         }
     }
 
-    fun endUpdateRange(f: Float) {
-        statusExtra.setText(" - " + (f * 100.0).toInt() + "%")
+    private fun format(primaryFormat: String, backupFormat: String, value: Float): String {
+        return try {
+            String.format(primaryFormat, value)
+        } catch (e: IllegalFormatException) {
+            Log.w(ControlsUiController.TAG, "Illegal format in range template", e)
+            if (backupFormat == "") {
+                ""
+            } else {
+                format(backupFormat, "", value)
+            }
+        }
+    }
 
-        val newValue = rangeTemplate.getMinValue() +
-            (f * (rangeTemplate.getMaxValue() - rangeTemplate.getMinValue()))
+    private fun levelToRangeValue(): Float {
+        val ratio = clipLayer.getLevel().toFloat() / MAX_LEVEL
+        return rangeTemplate.getMinValue() +
+            (ratio * (rangeTemplate.getMaxValue() - rangeTemplate.getMinValue()))
+    }
 
+    fun endUpdateRange() {
         statusExtra.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources()
                 .getDimensionPixelSize(R.dimen.control_status_normal).toFloat())
         status.setVisibility(View.VISIBLE)
-
-        cvh.action(FloatAction(rangeTemplate.getTemplateId(), findNearestStep(newValue)))
+        cvh.action(FloatAction(rangeTemplate.getTemplateId(), findNearestStep(levelToRangeValue())))
     }
 
     fun findNearestStep(value: Float): Float {
@@ -125,59 +167,39 @@
         return rangeTemplate.getMaxValue()
     }
 
-    inner class ToggleRangeTouchListener() : View.OnTouchListener {
-        private var initialTouchX: Float = 0.0f
-        private var initialTouchY: Float = 0.0f
-        private var isDragging: Boolean = false
-        private val minDragDiff = 20
+    inner class ToggleRangeGestureListener(
+        val v: View
+    ) : SimpleOnGestureListener() {
+        var isDragging: Boolean = false
 
-        override fun onTouch(v: View, e: MotionEvent): Boolean {
-            when (e.getActionMasked()) {
-                MotionEvent.ACTION_DOWN -> setupTouch(e)
-                MotionEvent.ACTION_MOVE -> detectDrag(v, e)
-                MotionEvent.ACTION_UP -> endTouch(v, e)
-            }
-
+        override fun onDown(e: MotionEvent): Boolean {
             return true
         }
 
-        private fun setupTouch(e: MotionEvent) {
-            initialTouchX = e.getX()
-            initialTouchY = e.getY()
+        override fun onLongPress(e: MotionEvent) {
+            ControlActionCoordinator.longPress(this@ToggleRangeBehavior.cvh)
         }
 
-        private fun detectDrag(v: View, e: MotionEvent) {
-            val xDiff = Math.abs(e.getX() - initialTouchX)
-            val yDiff = Math.abs(e.getY() - initialTouchY)
-
-            if (xDiff < minDragDiff) {
-                isDragging = false
-            } else {
-                if (!isDragging) {
-                    this@ToggleRangeBehavior.beginUpdateRange()
-                }
-                v.getParent().requestDisallowInterceptTouchEvent(true)
-                isDragging = true
-                if (yDiff > xDiff) {
-                    endTouch(v, e)
-                } else {
-                    val percent = Math.max(0.0f, Math.min(1.0f, e.getX() / v.getWidth()))
-                    this@ToggleRangeBehavior.updateRange(percent, true)
-                }
-            }
-        }
-
-        private fun endTouch(v: View, e: MotionEvent) {
+        override fun onScroll(
+            e1: MotionEvent,
+            e2: MotionEvent,
+            xDiff: Float,
+            yDiff: Float
+        ): Boolean {
             if (!isDragging) {
-                this@ToggleRangeBehavior.toggle()
-            } else {
-                val percent = Math.max(0.0f, Math.min(1.0f, e.getX() / v.getWidth()))
-                this@ToggleRangeBehavior.endUpdateRange(percent)
+                this@ToggleRangeBehavior.beginUpdateRange()
+                isDragging = true
             }
 
-            initialTouchX = 0.0f
-            initialTouchY = 0.0f
-            isDragging = false
+            this@ToggleRangeBehavior.updateRange(-xDiff / v.getWidth(), true)
+            return true
+        }
+
+        override fun onSingleTapUp(e: MotionEvent): Boolean {
+            val th = this@ToggleRangeBehavior
+            ControlActionCoordinator.toggle(th.cvh, th.template.getTemplateId(),
+                    th.template.isChecked())
+            return true
         }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/UnknownBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/UnknownBehavior.kt
index 5a6e5b4..1f33b85 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/UnknownBehavior.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/UnknownBehavior.kt
@@ -17,8 +17,14 @@
 package com.android.systemui.controls.ui
 
 class UnknownBehavior : Behavior {
-    override fun apply(cvh: ControlViewHolder, cws: ControlWithState) {
-        cvh.status.setText("Loading...")
+    lateinit var cvh: ControlViewHolder
+
+    override fun initialize(cvh: ControlViewHolder) {
+        this.cvh = cvh
+    }
+
+    override fun bind(cws: ControlWithState) {
+        cvh.status.setText(cvh.context.getString(com.android.internal.R.string.loading))
         cvh.setEnabled(false)
         cvh.applyRenderInfo(RenderInfo.lookup(cws.ci.deviceType, false))
     }
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
index 53a23b8..7c0033c 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
@@ -26,10 +26,12 @@
 import android.os.HandlerThread;
 import android.os.ServiceManager;
 import android.util.DisplayMetrics;
-import android.view.IWindowManager;
+import android.view.Choreographer;
 import android.view.LayoutInflater;
+import android.view.WindowManager;
 
 import com.android.internal.logging.MetricsLogger;
+import com.android.internal.util.NotificationMessagingUtil;
 import com.android.internal.widget.LockPatternUtils;
 import com.android.keyguard.ViewMediatorCallback;
 import com.android.systemui.dagger.qualifiers.Background;
@@ -43,8 +45,6 @@
 import com.android.systemui.shared.system.DevicePolicyManagerWrapper;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.NavigationBarController;
-import com.android.systemui.statusbar.NotificationRemoteInputManager;
-import com.android.systemui.statusbar.phone.AutoHideController;
 import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.DataSaverController;
@@ -97,10 +97,10 @@
 
     @Singleton
     @Provides
-    // Single instance of DisplayMetrics, gets updated by StatusBar, but can be used
-    // anywhere it is needed.
-    public DisplayMetrics provideDisplayMetrics() {
-        return new DisplayMetrics();
+    public DisplayMetrics provideDisplayMetrics(Context context, WindowManager windowManager) {
+        DisplayMetrics displayMetrics = new DisplayMetrics();
+        context.getDisplay().getMetrics(displayMetrics);
+        return displayMetrics;
     }
 
     /** */
@@ -159,16 +159,6 @@
 
     @Singleton
     @Provides
-    public AutoHideController provideAutoHideController(Context context,
-            @Main Handler mainHandler,
-            NotificationRemoteInputManager notificationRemoteInputManager,
-            IWindowManager iWindowManager) {
-        return new AutoHideController(context, mainHandler, notificationRemoteInputManager,
-                iWindowManager);
-    }
-
-    @Singleton
-    @Provides
     public ActivityManagerWrapper provideActivityManagerWrapper() {
         return ActivityManagerWrapper.getInstance();
     }
@@ -191,9 +181,22 @@
         return new AlwaysOnDisplayPolicy(context);
     }
 
+    /***/
+    @Provides
+    public NotificationMessagingUtil provideNotificationMessagingUtil(Context context) {
+        return new NotificationMessagingUtil(context);
+    }
+
     /** */
     @Provides
     public ViewMediatorCallback providesViewMediatorCallback(KeyguardViewMediator viewMediator) {
         return viewMediator.getViewMediatorCallback();
     }
+
+    /** */
+    @Singleton
+    @Provides
+    public Choreographer providesChoreographer() {
+        return Choreographer.getInstance();
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java
index 5de88e1..413a522 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIBinder.java
@@ -24,17 +24,19 @@
 import com.android.systemui.accessibility.SystemActions;
 import com.android.systemui.accessibility.WindowMagnification;
 import com.android.systemui.biometrics.AuthController;
+import com.android.systemui.bubbles.dagger.BubbleModule;
 import com.android.systemui.globalactions.GlobalActionsComponent;
 import com.android.systemui.keyguard.KeyguardViewMediator;
+import com.android.systemui.keyguard.dagger.KeyguardModule;
 import com.android.systemui.pip.PipUI;
 import com.android.systemui.power.PowerUI;
 import com.android.systemui.recents.Recents;
 import com.android.systemui.recents.RecentsModule;
 import com.android.systemui.shortcut.ShortcutKeyDispatcher;
 import com.android.systemui.stackdivider.Divider;
+import com.android.systemui.statusbar.dagger.StatusBarModule;
 import com.android.systemui.statusbar.notification.InstantAppNotifier;
 import com.android.systemui.statusbar.phone.StatusBar;
-import com.android.systemui.statusbar.phone.StatusBarModule;
 import com.android.systemui.statusbar.tv.TvStatusBar;
 import com.android.systemui.theme.ThemeOverlayController;
 import com.android.systemui.toast.ToastUI;
@@ -49,7 +51,8 @@
 /**
  * SystemUI objects that are injectable should go here.
  */
-@Module(includes = {RecentsModule.class, StatusBarModule.class})
+@Module(includes = {RecentsModule.class, StatusBarModule.class, BubbleModule.class,
+        KeyguardModule.class})
 public abstract class SystemUIBinder {
     /** Inject into AuthController. */
     @Binds
@@ -142,7 +145,7 @@
     @ClassKey(StatusBar.class)
     public abstract SystemUI bindsStatusBar(StatusBar sysui);
 
-   /** Inject into SystemActions. */
+    /** Inject into SystemActions. */
     @Binds
     @IntoMap
     @ClassKey(SystemActions.class)
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIDefaultModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIDefaultModule.java
index a57ec5b..3e257b6 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIDefaultModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIDefaultModule.java
@@ -38,8 +38,10 @@
 import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
 import com.android.systemui.statusbar.phone.KeyguardEnvironmentImpl;
+import com.android.systemui.statusbar.phone.NotificationGroupManager;
 import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.phone.ShadeControllerImpl;
+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;
@@ -92,10 +94,14 @@
 
     @Singleton
     @Provides
-    static HeadsUpManagerPhone provideHeadsUpManagerPhone(Context context,
+    static HeadsUpManagerPhone provideHeadsUpManagerPhone(
+            Context context,
             StatusBarStateController statusBarStateController,
-            KeyguardBypassController bypassController) {
-        return new HeadsUpManagerPhone(context, statusBarStateController, bypassController);
+            KeyguardBypassController bypassController,
+            NotificationGroupManager groupManager,
+            ConfigurationController configurationController) {
+        return new HeadsUpManagerPhone(context, statusBarStateController, bypassController,
+                groupManager, configurationController);
     }
 
     @Binds
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
index 7b54199..030b504 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
@@ -19,14 +19,13 @@
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.pm.PackageManager;
-import android.content.res.Resources;
+import android.view.Choreographer;
 
 import com.android.keyguard.KeyguardUpdateMonitor;
 import com.android.systemui.BootCompleteCache;
 import com.android.systemui.BootCompleteCacheImpl;
 import com.android.systemui.DumpController;
 import com.android.systemui.assist.AssistModule;
-import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.log.dagger.LogModule;
 import com.android.systemui.model.SysUiState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -34,17 +33,20 @@
 import com.android.systemui.stackdivider.Divider;
 import com.android.systemui.statusbar.BlurUtils;
 import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.statusbar.StatusBarWindowBlurController;
+import com.android.systemui.statusbar.NotificationShadeWindowBlurController;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
-import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
 import com.android.systemui.statusbar.notification.people.PeopleHubModule;
+import com.android.systemui.statusbar.notification.row.dagger.ExpandableNotificationRowComponent;
 import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
+import com.android.systemui.statusbar.phone.BiometricUnlockController;
 import com.android.systemui.statusbar.phone.KeyguardLiftController;
+import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
 import com.android.systemui.statusbar.phone.StatusBar;
 import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
 import com.android.systemui.util.concurrency.ConcurrencyModule;
 import com.android.systemui.util.sensors.AsyncSensorManager;
 import com.android.systemui.util.time.SystemClock;
@@ -65,10 +67,11 @@
             AssistModule.class,
             ConcurrencyModule.class,
             LogModule.class,
-            NotificationsModule.class,
             PeopleHubModule.class,
         },
-        subcomponents = {StatusBarComponent.class, NotificationRowComponent.class})
+        subcomponents = {StatusBarComponent.class,
+                NotificationRowComponent.class,
+                ExpandableNotificationRowComponent.class})
 public abstract class SystemUIModule {
 
     @Binds
@@ -97,11 +100,16 @@
     @Singleton
     @Provides
     @Nullable
-    static StatusBarWindowBlurController providesBlurController(BlurUtils blurUtils,
-            @Main Resources resources, SysuiStatusBarStateController statusBarStateController,
-            DumpController dumpController) {
-        return blurUtils.supportsBlursOnWindows() ? new StatusBarWindowBlurController(resources,
-                statusBarStateController, blurUtils, dumpController) : null;
+    static NotificationShadeWindowBlurController providesBlurController(BlurUtils blurUtils,
+            SysuiStatusBarStateController statusBarStateController,
+            DumpController dumpController, BiometricUnlockController biometricUnlockController,
+            KeyguardStateController keyguardStateController,
+            NotificationShadeWindowController notificationShadeWindowController,
+            Choreographer choreographer) {
+        return blurUtils.supportsBlursOnWindows() ? new NotificationShadeWindowBlurController(
+                statusBarStateController, blurUtils, biometricUnlockController,
+                keyguardStateController, notificationShadeWindowController, choreographer,
+                dumpController) : null;
     }
 
     /** */
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIRootComponent.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIRootComponent.java
index 3bf5ad7..12b9be1 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIRootComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIRootComponent.java
@@ -27,6 +27,7 @@
 import com.android.systemui.SystemUIFactory;
 import com.android.systemui.fragments.FragmentService;
 import com.android.systemui.keyguard.KeyguardSliceProvider;
+import com.android.systemui.pip.phone.dagger.PipModule;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.util.InjectionInflationController;
 
@@ -43,6 +44,7 @@
         DefaultComponentBinder.class,
         DependencyProvider.class,
         DependencyBinder.class,
+        PipModule.class,
         SystemServicesModule.class,
         SystemUIFactory.ContextHolder.class,
         SystemUIBinder.class,
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
index 4e88726..c45063a 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
@@ -167,6 +167,10 @@
                 // again, it will only show after the brightness sensor has stabilized,
                 // avoiding a potential flicker.
                 scrimOpacity = 255;
+            } else if (!mScreenOff && mLightSensor == null) {
+                // No light sensor but previous state turned the screen black. Make the scrim
+                // transparent and below views visible.
+                scrimOpacity = 0;
             } else if (brightnessReady) {
                 // Only unblank scrim once brightness is ready.
                 scrimOpacity = computeScrimOpacity(sensorValue);
@@ -199,7 +203,7 @@
         mDozeService.setDozeScreenBrightness(clampToUserSetting(mDefaultDozeBrightness));
         mDozeHost.setAodDimmingScrim(0f);
     }
-
+    //TODO: brightnessfloat change usages to float.
     private int clampToUserSetting(int brightness) {
         int userSetting = Settings.System.getIntForUser(mContext.getContentResolver(),
                 Settings.System.SCREEN_BRIGHTNESS, Integer.MAX_VALUE,
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index 082b065..9203e6d 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -64,12 +64,12 @@
 import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.view.ContextThemeWrapper;
+import android.view.IWindowManager;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
 import android.view.WindowManager;
-import android.view.WindowManagerGlobal;
 import android.view.accessibility.AccessibilityEvent;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
@@ -88,19 +88,20 @@
 import com.android.internal.util.ScreenshotHelper;
 import com.android.internal.view.RotationPolicy;
 import com.android.internal.widget.LockPatternUtils;
-import com.android.systemui.Dependency;
 import com.android.systemui.Interpolators;
 import com.android.systemui.MultiListLayout;
 import com.android.systemui.MultiListLayout.MultiListAdapter;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.colorextraction.SysuiColorExtractor;
 import com.android.systemui.controls.ui.ControlsUiController;
+import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.GlobalActions.GlobalActionsManager;
 import com.android.systemui.plugins.GlobalActionsPanelPlugin;
 import com.android.systemui.statusbar.BlurUtils;
 import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
+import com.android.systemui.statusbar.phone.ScrimController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 import com.android.systemui.util.EmergencyDialerConstants;
@@ -109,6 +110,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.Executor;
 
 import javax.inject.Inject;
 
@@ -154,6 +156,7 @@
     private final BroadcastDispatcher mBroadcastDispatcher;
     private final ContentResolver mContentResolver;
     private final Resources mResources;
+    private final ConfigurationController mConfigurationController;
     private final UserManager mUserManager;
     private final TrustManager mTrustManager;
     private final IActivityManager mIActivityManager;
@@ -185,6 +188,8 @@
     private final NotificationShadeWindowController mNotificationShadeWindowController;
     private GlobalActionsPanelPlugin mPanelPlugin;
     private ControlsUiController mControlsUiController;
+    private final IWindowManager mIWindowManager;
+    private final Executor mBackgroundExecutor;
 
     /**
      * @param context everything needs a context :(
@@ -203,7 +208,8 @@
             BlurUtils blurUtils, SysuiColorExtractor colorExtractor,
             IStatusBarService statusBarService,
             NotificationShadeWindowController notificationShadeWindowController,
-            ControlsUiController controlsUiController) {
+            ControlsUiController controlsUiController, IWindowManager iWindowManager,
+            @Background Executor backgroundExecutor) {
         mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme);
         mWindowManagerFuncs = windowManagerFuncs;
         mAudioManager = audioManager;
@@ -214,6 +220,7 @@
         mBroadcastDispatcher = broadcastDispatcher;
         mContentResolver = contentResolver;
         mResources = resources;
+        mConfigurationController = configurationController;
         mUserManager = userManager;
         mTrustManager = trustManager;
         mIActivityManager = iActivityManager;
@@ -224,6 +231,8 @@
         mStatusBarService = statusBarService;
         mNotificationShadeWindowController = notificationShadeWindowController;
         mControlsUiController = controlsUiController;
+        mIWindowManager = iWindowManager;
+        mBackgroundExecutor = backgroundExecutor;
 
         // receive broadcasts
         IntentFilter filter = new IntentFilter();
@@ -248,7 +257,7 @@
         mScreenshotHelper = new ScreenshotHelper(context);
         mScreenRecordHelper = new ScreenRecordHelper(context);
 
-        configurationController.addCallback(this);
+        mConfigurationController.addCallback(this);
 
         mActivityStarter = activityStarter;
         keyguardStateController.addCallback(new KeyguardStateController.Callback() {
@@ -334,45 +343,7 @@
         } else {
             mSilentModeAction = new SilentModeTriStateAction(mAudioManager, mHandler);
         }
-        mAirplaneModeOn = new ToggleAction(
-                R.drawable.ic_lock_airplane_mode,
-                R.drawable.ic_lock_airplane_mode_off,
-                R.string.global_actions_toggle_airplane_mode,
-                R.string.global_actions_airplane_mode_on_status,
-                R.string.global_actions_airplane_mode_off_status) {
-
-            void onToggle(boolean on) {
-                if (mHasTelephony && TelephonyProperties.in_ecm_mode().orElse(false)) {
-                    mIsWaitingForEcmExit = true;
-                    // Launch ECM exit dialog
-                    Intent ecmDialogIntent =
-                            new Intent(TelephonyManager.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null);
-                    ecmDialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                    mContext.startActivity(ecmDialogIntent);
-                } else {
-                    changeAirplaneModeSystemSetting(on);
-                }
-            }
-
-            @Override
-            protected void changeStateFromPress(boolean buttonOn) {
-                if (!mHasTelephony) return;
-
-                // In ECM mode airplane state cannot be changed
-                if (!TelephonyProperties.in_ecm_mode().orElse(false)) {
-                    mState = buttonOn ? State.TurningOn : State.TurningOff;
-                    mAirplaneState = mState;
-                }
-            }
-
-            public boolean showDuringKeyguard() {
-                return true;
-            }
-
-            public boolean showBeforeProvisioning() {
-                return false;
-            }
-        };
+        mAirplaneModeOn = new AirplaneModeAction();
         onAirplaneModeChanged();
 
         mItems = new ArrayList<Action>();
@@ -494,7 +465,7 @@
     }
 
     public void destroy() {
-        Dependency.get(ConfigurationController.class).removeCallback(this);
+        mConfigurationController.removeCallback(this);
     }
 
     private final class PowerAction extends SinglePressAction implements LongPressAction {
@@ -536,7 +507,7 @@
 
         @Override
         public boolean shouldBeSeparated() {
-            return !shouldShowControls();
+            return true;
         }
 
         @Override
@@ -835,14 +806,12 @@
 
             @Override
             public void onPress() {
-                new LockPatternUtils(mContext)
-                        .requireStrongAuth(STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN,
-                                UserHandle.USER_ALL);
+                mLockPatternUtils.requireStrongAuth(STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN,
+                        UserHandle.USER_ALL);
                 try {
-                    WindowManagerGlobal.getWindowManagerService().lockNow(null);
+                    mIWindowManager.lockNow(null);
                     // Lock profiles (if any) on the background thread.
-                    final Handler bgHandler = new Handler(Dependency.get(Dependency.BG_LOOPER));
-                    bgHandler.post(() -> lockProfiles());
+                    mBackgroundExecutor.execute(() -> lockProfiles());
                 } catch (RemoteException e) {
                     Log.e(TAG, "Error while trying to lock device.", e);
                 }
@@ -1045,7 +1014,9 @@
             Action action = getItem(position);
             View view = action.create(mContext, convertView, parent, LayoutInflater.from(mContext));
             view.setOnClickListener(v -> onClickItem(position));
-            view.setOnLongClickListener(v -> onLongClickItem(position));
+            if (action instanceof LongPressAction) {
+                view.setOnLongClickListener(v -> onLongClickItem(position));
+            }
             return view;
         }
 
@@ -1330,6 +1301,48 @@
         }
     }
 
+    private class AirplaneModeAction extends ToggleAction {
+        AirplaneModeAction() {
+            super(
+                R.drawable.ic_lock_airplane_mode,
+                R.drawable.ic_lock_airplane_mode_off,
+                R.string.global_actions_toggle_airplane_mode,
+                R.string.global_actions_airplane_mode_on_status,
+                R.string.global_actions_airplane_mode_off_status);
+        }
+        void onToggle(boolean on) {
+            if (mHasTelephony && TelephonyProperties.in_ecm_mode().orElse(false)) {
+                mIsWaitingForEcmExit = true;
+                // Launch ECM exit dialog
+                Intent ecmDialogIntent =
+                        new Intent(TelephonyManager.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null);
+                ecmDialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                mContext.startActivity(ecmDialogIntent);
+            } else {
+                changeAirplaneModeSystemSetting(on);
+            }
+        }
+
+        @Override
+        protected void changeStateFromPress(boolean buttonOn) {
+            if (!mHasTelephony) return;
+
+            // In ECM mode airplane state cannot be changed
+            if (!TelephonyProperties.in_ecm_mode().orElse(false)) {
+                mState = buttonOn ? State.TurningOn : State.TurningOff;
+                mAirplaneState = mState;
+            }
+        }
+
+        public boolean showDuringKeyguard() {
+            return true;
+        }
+
+        public boolean showBeforeProvisioning() {
+            return false;
+        }
+    }
+
     private class SilentModeToggleAction extends ToggleAction {
         public SilentModeToggleAction() {
             super(R.drawable.ic_audio_vol_mute,
@@ -1552,6 +1565,7 @@
 
         private ControlsUiController mControlsUiController;
         private ViewGroup mControlsView;
+        private ViewGroup mContainerView;
 
         ActionsDialog(Context context, MyAdapter adapter,
                 GlobalActionsPanelPlugin.PanelViewController plugin, BlurUtils blurUtils,
@@ -1666,9 +1680,17 @@
             }
             if (mBackgroundDrawable == null) {
                 mBackgroundDrawable = new ScrimDrawable();
-                mScrimAlpha = 0.8f;
+                mScrimAlpha = ScrimController.BUSY_SCRIM_ALPHA;
             }
             getWindow().setBackgroundDrawable(mBackgroundDrawable);
+
+            if (mControlsView != null) {
+                mContainerView = findViewById(com.android.systemui.R.id.global_actions_container);
+                mContainerView.setOnTouchListener((v, e) -> {
+                    dismiss();
+                    return true;
+                });
+            }
         }
 
         private void fixNavBarClipping() {
@@ -1725,7 +1747,8 @@
             if (!(mBackgroundDrawable instanceof ScrimDrawable)) {
                 return;
             }
-            ((ScrimDrawable) mBackgroundDrawable).setColor(Color.BLACK, animate);
+            ((ScrimDrawable) mBackgroundDrawable).setColor(colors.supportsDarkText() ? Color.WHITE
+                    : Color.BLACK, animate);
             View decorView = getWindow().getDecorView();
             if (colors.supportsDarkText()) {
                 decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR |
@@ -1890,14 +1913,6 @@
         return isPanelDebugModeEnabled(context);
     }
 
-
-    /**
-     * Determines whether the Global Actions menu should use a separated view for emergency actions.
-     */
-    private static boolean shouldUseSeparatedView() {
-        return true;
-    }
-
     private boolean shouldShowControls() {
         return !mKeyguardManager.isDeviceLocked()
                 && mControlsUiController.getAvailable();
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsFlatLayout.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsFlatLayout.java
index 6749f1d..f102561 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsFlatLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsFlatLayout.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 The Android Open Source Project
+ * Copyright (C) 2020 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,164 +23,62 @@
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.View;
-import android.view.ViewGroup;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.HardwareBgDrawable;
+import com.android.systemui.R;
 
 /**
- * Single row implementation of the button layout created by the global actions dialog.
+ * Flat, single-row implementation of the button layout created by the global actions dialog.
  */
 public class GlobalActionsFlatLayout extends GlobalActionsLayout {
+    private static final int MAX_ITEMS = 4;
     public GlobalActionsFlatLayout(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        mBackgroundsSet = true;
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
-        // backgrounds set only once, the first time onMeasure is called after inflation
-        // if (getListView() != null && !mBackgroundsSet) {
-        //     setBackgrounds();
-        //     mBackgroundsSet = true;
-        // }
-    }
-
     @VisibleForTesting
-    protected void setupListView() {
-        ListGridLayout listView = getListView();
-        listView.setExpectedCount(Math.min(2, mAdapter.countListItems()));
-        listView.setReverseSublists(shouldReverseSublists());
-        listView.setReverseItems(shouldReverseListItems());
-        listView.setSwapRowsAndColumns(shouldSwapRowsAndColumns());
+    protected boolean shouldReverseListItems() {
+        int rotation = getCurrentRotation();
+        if (rotation == ROTATION_NONE) {
+            return false;
+        }
+        if (getCurrentLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
+            return rotation == ROTATION_LANDSCAPE;
+        }
+        return rotation == ROTATION_SEASCAPE;
     }
 
     @Override
-    public void onUpdateList() {
-        setupListView();
-        super.onUpdateList();
-        updateSeparatedItemSize();
-    }
-
-    /**
-     * If the separated view contains only one item, expand the bounds of that item to take up the
-     * entire view, so that the whole thing is touch-able.
-     */
-    @VisibleForTesting
-    protected void updateSeparatedItemSize() {
-        ViewGroup separated = getSeparatedView();
-        if (separated.getChildCount() == 0) {
-            return;
-        }
-        View firstChild = separated.getChildAt(0);
-        ViewGroup.LayoutParams childParams = firstChild.getLayoutParams();
-
-        if (separated.getChildCount() == 1) {
-            childParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
-            childParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
-        } else {
-            childParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;
-            childParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
-        }
-    }
-
-    @Override
-    protected ListGridLayout getListView() {
-        return (ListGridLayout) super.getListView();
-    }
-
-    @Override
-    protected void removeAllListViews() {
-        ListGridLayout list = getListView();
-        if (list != null) {
-            list.removeAllItems();
-        }
+    protected HardwareBgDrawable getBackgroundDrawable(int backgroundColor) {
+        return null;
     }
 
     @Override
     protected void addToListView(View v, boolean reverse) {
-        ListGridLayout list = getListView();
-        if (list != null) {
-            list.addItem(v);
+        // only add items to the list view if we haven't hit our max yet
+        if (getListView().getChildCount() < MAX_ITEMS) {
+            super.addToListView(v, reverse);
         }
     }
 
-    @Override
-    public void removeAllItems() {
-        ViewGroup separatedList = getSeparatedView();
-        ListGridLayout list = getListView();
-        if (separatedList != null) {
-            separatedList.removeAllViews();
-        }
-        if (list != null) {
-            list.removeAllItems();
-        }
-    }
-
-    /**
-     * Determines whether the ListGridLayout should fill sublists in the reverse order.
-     * Used to account for sublist ordering changing between landscape and seascape views.
-     */
     @VisibleForTesting
-    protected boolean shouldReverseSublists() {
-        if (getCurrentRotation() == ROTATION_SEASCAPE) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Determines whether the ListGridLayout should fill rows first instead of columns.
-     * Used to account for vertical/horizontal changes due to landscape or seascape rotations.
-     */
-    @VisibleForTesting
-    protected boolean shouldSwapRowsAndColumns() {
-        if (getCurrentRotation() == ROTATION_NONE) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    protected boolean shouldReverseListItems() {
-        int rotation = getCurrentRotation();
-        boolean reverse = false; // should we add items to parents in the reverse order?
-        if (rotation == ROTATION_NONE
-                || rotation == ROTATION_SEASCAPE) {
-            reverse = !reverse; // if we're in portrait or seascape, reverse items
-        }
-        if (getCurrentLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
-            reverse = !reverse; // if we're in an RTL language, reverse items (again)
-        }
-        return reverse;
+    protected float getGridItemSize() {
+        return getContext().getResources().getDimension(R.dimen.global_actions_grid_item_height);
     }
 
     @VisibleForTesting
     protected float getAnimationDistance() {
-        int rows = getListView().getRowCount();
-        float gridItemSize = getContext().getResources().getDimension(
-                com.android.systemui.R.dimen.global_actions_grid_item_height);
-        return rows * gridItemSize / 2;
+        return getGridItemSize() / 2;
     }
 
     @Override
     public float getAnimationOffsetX() {
-        switch (getCurrentRotation()) {
-            case ROTATION_LANDSCAPE:
-                return getAnimationDistance();
-            case ROTATION_SEASCAPE:
-                return -getAnimationDistance();
-            default: // Portrait
-                return 0;
-        }
+        return 0;
     }
 
     @Override
     public float getAnimationOffsetY() {
-        if (getCurrentRotation() == ROTATION_NONE) {
-            return getAnimationDistance();
-        }
-        return 0;
+        return -getAnimationDistance();
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java
index c9c38d3..280a248 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java
@@ -36,8 +36,6 @@
 import com.android.systemui.Dependency;
 import com.android.systemui.plugins.GlobalActions;
 import com.android.systemui.plugins.GlobalActionsPanelPlugin;
-import com.android.systemui.plugins.PluginListener;
-import com.android.systemui.shared.plugins.PluginManager;
 import com.android.systemui.statusbar.BlurUtils;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.phone.ScrimController;
@@ -49,8 +47,7 @@
 
 import dagger.Lazy;
 
-public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks,
-        PluginListener<GlobalActionsPanelPlugin> {
+public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks {
 
     private static final float SHUTDOWN_SCRIM_ALPHA = 0.95f;
 
@@ -60,12 +57,9 @@
     private final DeviceProvisionedController mDeviceProvisionedController;
     private final ExtensionController.Extension<GlobalActionsPanelPlugin> mPanelExtension;
     private final BlurUtils mBlurUtils;
-    private GlobalActionsPanelPlugin mPlugin;
     private final CommandQueue mCommandQueue;
     private GlobalActionsDialog mGlobalActionsDialog;
     private boolean mDisabled;
-    private final PluginManager mPluginManager;
-    private final String mPluginPackageName;
 
     @Inject
     public GlobalActionsImpl(Context context, CommandQueue commandQueue,
@@ -74,7 +68,6 @@
         mGlobalActionsDialogLazy = globalActionsDialogLazy;
         mKeyguardStateController = Dependency.get(KeyguardStateController.class);
         mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class);
-        mPluginManager = Dependency.get(PluginManager.class);
         mCommandQueue = commandQueue;
         mBlurUtils = blurUtils;
         mCommandQueue.addCallback(this);
@@ -82,17 +75,11 @@
                 .newExtension(GlobalActionsPanelPlugin.class)
                 .withPlugin(GlobalActionsPanelPlugin.class)
                 .build();
-        mPluginPackageName = mContext.getString(
-                com.android.systemui.R.string.config_controlsPluginPackageName);
-        mPluginManager.addPluginListener(
-                GlobalActionsPanelPlugin.ACTION, this, GlobalActionsPanelPlugin.class, true);
     }
 
     @Override
     public void destroy() {
         mCommandQueue.removeCallback(this);
-        mPluginManager.removePluginListener(this);
-        if (mPlugin != null) mPlugin.onDestroy();
         if (mGlobalActionsDialog != null) {
             mGlobalActionsDialog.destroy();
             mGlobalActionsDialog = null;
@@ -105,7 +92,7 @@
         mGlobalActionsDialog = mGlobalActionsDialogLazy.get();
         mGlobalActionsDialog.showDialog(mKeyguardStateController.isShowing(),
                 mDeviceProvisionedController.isDeviceProvisioned(),
-                mPlugin != null ? mPlugin : mPanelExtension.get());
+                mPanelExtension.get());
         Dependency.get(KeyguardUpdateMonitor.class).requestFaceAuth();
     }
 
@@ -162,7 +149,7 @@
         }
 
         if (mBlurUtils.supportsBlursOnWindows()) {
-            background.setAlpha((int) (ScrimController.GRADIENT_SCRIM_ALPHA_BUSY * 255));
+            background.setAlpha((int) (ScrimController.BUSY_SCRIM_ALPHA * 255));
             mBlurUtils.applyBlur(d.getWindow().getDecorView().getViewRootImpl(),
                         mBlurUtils.radiusForRatio(1));
         } else {
@@ -205,16 +192,4 @@
             mGlobalActionsDialog.dismissDialog();
         }
     }
-
-    @Override
-    public void onPluginConnected(GlobalActionsPanelPlugin plugin, Context pluginContext) {
-        if (pluginContext.getPackageName().equals(mPluginPackageName)) {
-            mPlugin = plugin;
-        }
-    }
-
-    @Override
-    public void onPluginDisconnected(GlobalActionsPanelPlugin plugin) {
-        mPlugin = null;
-    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayout.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayout.java
index f755a93..183ee45 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayout.java
@@ -42,16 +42,30 @@
     }
 
     private void setBackgrounds() {
-        int gridBackgroundColor = getResources().getColor(
+        ViewGroup listView = getListView();
+        int listBgColor = getResources().getColor(
                 R.color.global_actions_grid_background, null);
-        int separatedBackgroundColor = getResources().getColor(
-                R.color.global_actions_separated_background, null);
-        HardwareBgDrawable listBackground  = new HardwareBgDrawable(true, true, getContext());
-        HardwareBgDrawable separatedBackground = new HardwareBgDrawable(true, true, getContext());
-        listBackground.setTint(gridBackgroundColor);
-        separatedBackground.setTint(separatedBackgroundColor);
-        getListView().setBackground(listBackground);
-        getSeparatedView().setBackground(separatedBackground);
+        HardwareBgDrawable listBackground = getBackgroundDrawable(listBgColor);
+        if (listBackground != null) {
+            listView.setBackground(listBackground);
+        }
+
+        ViewGroup separatedView = getSeparatedView();
+
+        if (separatedView != null) {
+            int separatedBgColor = getResources().getColor(
+                    R.color.global_actions_separated_background, null);
+            HardwareBgDrawable separatedBackground = getBackgroundDrawable(separatedBgColor);
+            if (separatedBackground != null) {
+                getSeparatedView().setBackground(separatedBackground);
+            }
+        }
+    }
+
+    protected HardwareBgDrawable getBackgroundDrawable(int backgroundColor) {
+        HardwareBgDrawable background = new HardwareBgDrawable(true, true, getContext());
+        background.setTint(backgroundColor);
+        return background;
     }
 
     @Override
@@ -74,10 +88,16 @@
     }
 
     protected void addToSeparatedView(View v, boolean reverse) {
-        if (reverse) {
-            getSeparatedView().addView(v, 0);
+        ViewGroup separated = getSeparatedView();
+        if (separated != null) {
+            if (reverse) {
+                separated.addView(v, 0);
+            } else {
+                separated.addView(v);
+            }
         } else {
-            getSeparatedView().addView(v);
+            // if no separated view exists, just use the list view
+            addToListView(v, reverse);
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/glwallpaper/EglHelper.java b/packages/SystemUI/src/com/android/systemui/glwallpaper/EglHelper.java
index 657a308..11e215d 100644
--- a/packages/SystemUI/src/com/android/systemui/glwallpaper/EglHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/glwallpaper/EglHelper.java
@@ -153,11 +153,11 @@
         return true;
     }
 
-    private boolean checkExtensionCapability(String extName) {
+    boolean checkExtensionCapability(String extName) {
         return mExts.contains(extName);
     }
 
-    private int getWcgCapability() {
+    int getWcgCapability() {
         if (checkExtensionCapability(EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH)) {
             return EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT;
         }
@@ -212,7 +212,7 @@
             if (wcg && checkExtensionCapability(KHR_GL_COLOR_SPACE) && wcgCapability > 0) {
                 attrs = new int[] {EGL_GL_COLORSPACE_KHR, wcgCapability, EGL_NONE};
             }
-            mEglSurface = eglCreateWindowSurface(mEglDisplay, mEglConfig, surfaceHolder, attrs, 0);
+            mEglSurface = askCreatingEglWindowSurface(surfaceHolder, attrs, 0 /* offset */);
         } else {
             Log.w(TAG, "Create EglSurface failed: hasEglDisplay=" + hasEglDisplay()
                     + ", has valid surface=" + surfaceHolder.getSurface().isValid());
@@ -235,6 +235,10 @@
         return true;
     }
 
+    EGLSurface askCreatingEglWindowSurface(SurfaceHolder holder, int[] attrs, int offset) {
+        return eglCreateWindowSurface(mEglDisplay, mEglConfig, holder, attrs, offset);
+    }
+
     /**
      * Destroy EglSurface.
      */
@@ -242,7 +246,7 @@
         if (hasEglSurface()) {
             eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
             eglDestroySurface(mEglDisplay, mEglSurface);
-            mEglSurface = null;
+            mEglSurface = EGL_NO_SURFACE;
         }
     }
 
@@ -296,7 +300,7 @@
     public void destroyEglContext() {
         if (hasEglContext()) {
             eglDestroyContext(mEglDisplay, mEglContext);
-            mEglContext = null;
+            mEglContext = EGL_NO_CONTEXT;
         }
     }
 
@@ -340,11 +344,16 @@
             destroyEglContext();
         }
         if (hasEglDisplay()) {
-            eglTerminate(mEglDisplay);
+            terminateEglDisplay();
         }
         mEglReady = false;
     }
 
+    void terminateEglDisplay() {
+        eglTerminate(mEglDisplay);
+        mEglDisplay = EGL_NO_DISPLAY;
+    }
+
     /**
      * Called to dump current state.
      * @param prefix prefix.
diff --git a/packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java b/packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java
index fa8269d..ed6675dc 100644
--- a/packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java
+++ b/packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java
@@ -31,7 +31,6 @@
 import android.util.MathUtils;
 import android.util.Size;
 import android.view.DisplayInfo;
-import android.view.WindowManager;
 
 import com.android.systemui.R;
 
@@ -71,8 +70,7 @@
         }
 
         DisplayInfo displayInfo = new DisplayInfo();
-        WindowManager wm = context.getSystemService(WindowManager.class);
-        wm.getDefaultDisplay().getDisplayInfo(displayInfo);
+        context.getDisplay().getDisplayInfo(displayInfo);
 
         // We only do transition in portrait currently, b/137962047.
         int orientation = context.getResources().getConfiguration().orientation;
@@ -88,6 +86,10 @@
         mImageProcessHelper = new ImageProcessHelper();
         mImageRevealHelper = new ImageRevealHelper(this);
 
+        startProcessingImage();
+    }
+
+    protected void startProcessingImage() {
         if (loadBitmap()) {
             // Compute threshold of the image, this is an async work.
             mImageProcessHelper.start(mBitmap);
@@ -113,7 +115,7 @@
         mBitmap = null;
     }
 
-    private boolean loadBitmap() {
+    protected boolean loadBitmap() {
         if (DEBUG) {
             Log.d(TAG, "loadBitmap: mBitmap=" + mBitmap);
         }
@@ -122,12 +124,7 @@
             mWcgContent = mWallpaperManager.wallpaperSupportsWcg(WallpaperManager.FLAG_SYSTEM);
             mWallpaperManager.forgetLoadedWallpaper();
             if (mBitmap != null) {
-                float scale = (float) mScissor.height() / mBitmap.getHeight();
-                int surfaceHeight = Math.max(mScissor.height(), mBitmap.getHeight());
-                int surfaceWidth = scale > 1f
-                        ? Math.round(mBitmap.getWidth() * scale)
-                        : mBitmap.getWidth();
-                mSurfaceSize.set(0, 0, surfaceWidth, surfaceHeight);
+                mSurfaceSize.set(0, 0, mBitmap.getWidth(), mBitmap.getHeight());
             }
         }
         if (DEBUG) {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 14eec59..374153c 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -80,12 +80,14 @@
 import com.android.keyguard.KeyguardUpdateMonitor;
 import com.android.keyguard.KeyguardUpdateMonitorCallback;
 import com.android.keyguard.ViewMediatorCallback;
-import com.android.systemui.Dependency;
+import com.android.systemui.DumpController;
+import com.android.systemui.Dumpable;
 import com.android.systemui.R;
 import com.android.systemui.SystemUI;
 import com.android.systemui.SystemUIFactory;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.dagger.qualifiers.UiBackground;
+import com.android.systemui.keyguard.dagger.KeyguardModule;
 import com.android.systemui.plugins.FalsingManager;
 import com.android.systemui.statusbar.phone.BiometricUnlockController;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
@@ -100,9 +102,6 @@
 import java.util.ArrayList;
 import java.util.concurrent.Executor;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
 import dagger.Lazy;
 
 /**
@@ -146,12 +145,11 @@
  * directly to the keyguard UI is posted to a {@link android.os.Handler} to ensure it is taken on the UI
  * thread of the keyguard.
  */
-@Singleton
-public class KeyguardViewMediator extends SystemUI {
+public class KeyguardViewMediator extends SystemUI implements Dumpable {
     private static final int KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT = 30000;
     private static final long KEYGUARD_DONE_PENDING_TIMEOUT_MS = 3000;
 
-    private static final boolean DEBUG = KeyguardConstants.DEBUG;
+    private static final boolean DEBUG = true;
     private static final boolean DEBUG_SIM_STATES = KeyguardConstants.DEBUG_SIM_STATES;
 
     private final static String TAG = "KeyguardViewMediator";
@@ -225,10 +223,10 @@
     private final FalsingManager mFalsingManager;
 
     /** High level access to the power manager for WakeLocks */
-    private PowerManager mPM;
+    private final PowerManager mPM;
 
     /** TrustManager for letting it know when we change visibility */
-    private TrustManager mTrustManager;
+    private final TrustManager mTrustManager;
 
     /**
      * Used to keep the device awake while to ensure the keyguard finishes opening before
@@ -286,7 +284,7 @@
 
     // the properties of the keyguard
 
-    private KeyguardUpdateMonitor mUpdateMonitor;
+    private final KeyguardUpdateMonitor mUpdateMonitor;
 
     /**
      * Last SIM state reported by the telephony system.
@@ -613,6 +611,7 @@
         @Override
         public void keyguardGone() {
             Trace.beginSection("KeyguardViewMediator.mViewMediatorCallback#keyguardGone");
+            mNotificationShadeWindowController.setKeyguardGoingAway(false);
             mKeyguardDisplayManager.hide();
             Trace.endSection();
         }
@@ -688,7 +687,9 @@
         }
     };
 
-    @Inject
+    /**
+     * Injected constructor. See {@link KeyguardModule}.
+     */
     public KeyguardViewMediator(
             Context context,
             FalsingManager falsingManager,
@@ -697,7 +698,9 @@
             NotificationShadeWindowController notificationShadeWindowController,
             Lazy<StatusBarKeyguardViewManager> statusBarKeyguardViewManagerLazy,
             DismissCallbackRegistry dismissCallbackRegistry,
-            @UiBackground Executor uiBgExecutor) {
+            KeyguardUpdateMonitor keyguardUpdateMonitor, DumpController dumpController,
+            @UiBackground Executor uiBgExecutor, PowerManager powerManager,
+            TrustManager trustManager) {
         super(context);
         mFalsingManager = falsingManager;
         mLockPatternUtils = lockPatternUtils;
@@ -706,6 +709,10 @@
         mStatusBarKeyguardViewManagerLazy = statusBarKeyguardViewManagerLazy;
         mDismissCallbackRegistry = dismissCallbackRegistry;
         mUiBgExecutor = uiBgExecutor;
+        mUpdateMonitor = keyguardUpdateMonitor;
+        mPM = powerManager;
+        mTrustManager = trustManager;
+        dumpController.registerDumpable(this);
         mShowHomeOverLockscreen = DeviceConfig.getBoolean(
                 DeviceConfig.NAMESPACE_SYSTEMUI,
                 NAV_BAR_HANDLE_SHOW_OVER_LOCKSCREEN,
@@ -732,9 +739,6 @@
     }
 
     private void setupLocked() {
-        mPM = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
-        mTrustManager = mContext.getSystemService(TrustManager.class);
-
         mShowKeyguardWakeLock = mPM.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "show keyguard");
         mShowKeyguardWakeLock.setReferenceCounted(false);
 
@@ -755,8 +759,6 @@
 
         mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
 
-        mUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class);
-
         KeyguardUpdateMonitor.setCurrentUser(ActivityManager.getCurrentUser());
 
         // Assume keyguard is showing (unless it's disabled) until we know for sure, unless Keyguard
@@ -1651,7 +1653,7 @@
                             "KeyguardViewMediator#handleMessage START_KEYGUARD_EXIT_ANIM");
                     StartKeyguardExitAnimParams params = (StartKeyguardExitAnimParams) msg.obj;
                     handleStartKeyguardExitAnimation(params.startTime, params.fadeoutDuration);
-                    mFalsingManager.onSucccessfulUnlock();
+                    mFalsingManager.onSuccessfulUnlock();
                     Trace.endSection();
                     break;
                 case KEYGUARD_DONE_PENDING_TIMEOUT:
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java
index 6498b91..ae380b7 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java
@@ -93,6 +93,7 @@
             return mIatm.startActivityAsUser(
                     mContext.getIApplicationThread() /*caller*/,
                     mContext.getBasePackageName() /*callingPackage*/,
+                    mContext.getFeatureId() /*callingFeatureId*/,
                     intent /*intent*/,
                     intent.resolveTypeIfNeeded(mContext.getContentResolver()) /*resolvedType*/,
                     null /*resultTo*/,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
new file mode 100644
index 0000000..2ba0315
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
@@ -0,0 +1,80 @@
+/*
+ * 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.keyguard.dagger;
+
+import android.app.trust.TrustManager;
+import android.content.Context;
+import android.os.PowerManager;
+
+import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.systemui.DumpController;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.dagger.qualifiers.UiBackground;
+import com.android.systemui.keyguard.DismissCallbackRegistry;
+import com.android.systemui.keyguard.KeyguardViewMediator;
+import com.android.systemui.plugins.FalsingManager;
+import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
+import com.android.systemui.statusbar.phone.StatusBar;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+
+import java.util.concurrent.Executor;
+
+import javax.inject.Singleton;
+
+import dagger.Lazy;
+import dagger.Module;
+import dagger.Provides;
+
+/**
+ * Dagger Module providing {@link StatusBar}.
+ */
+@Module
+public class KeyguardModule {
+    /**
+     * Provides our instance of KeyguardViewMediator which is considered optional.
+     */
+    @Provides
+    @Singleton
+    public static KeyguardViewMediator newKeyguardViewMediator(
+            Context context,
+            FalsingManager falsingManager,
+            LockPatternUtils lockPatternUtils,
+            BroadcastDispatcher broadcastDispatcher,
+            NotificationShadeWindowController notificationShadeWindowController,
+            Lazy<StatusBarKeyguardViewManager> statusBarKeyguardViewManagerLazy,
+            DismissCallbackRegistry dismissCallbackRegistry,
+            KeyguardUpdateMonitor updateMonitor,
+            DumpController dumpController,
+            PowerManager powerManager,
+            TrustManager trustManager,
+            @UiBackground Executor uiBgExecutor) {
+        return new KeyguardViewMediator(
+                context,
+                falsingManager,
+                lockPatternUtils,
+                broadcastDispatcher,
+                notificationShadeWindowController,
+                statusBarKeyguardViewManagerLazy,
+                dismissCallbackRegistry,
+                updateMonitor,
+                dumpController,
+                uiBgExecutor,
+                powerManager,
+                trustManager);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/log/Event.java b/packages/SystemUI/src/com/android/systemui/log/Event.java
deleted file mode 100644
index 7bc1abf..0000000
--- a/packages/SystemUI/src/com/android/systemui/log/Event.java
+++ /dev/null
@@ -1,84 +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.log;
-
-import android.annotation.IntDef;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Stores information about an event that occurred in SystemUI to be used for debugging and triage.
- * Every event has a time stamp, log level and message.
- * Events are stored in {@link SysuiLog} and can be printed in a dumpsys.
- */
-public class Event {
-    public static final int UNINITIALIZED = -1;
-
-    @IntDef({ERROR, WARN, INFO, DEBUG, VERBOSE})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface Level {}
-    public static final int VERBOSE = 2;
-    public static final int DEBUG = 3;
-    public static final int INFO = 4;
-    public static final int WARN = 5;
-    public static final int ERROR = 6;
-    public static final @Level int DEFAULT_LOG_LEVEL = DEBUG;
-
-    private long mTimestamp;
-    private @Level int mLogLevel = DEFAULT_LOG_LEVEL;
-    private String mMessage = "";
-
-    /**
-     * initialize an event with a message
-     */
-    public Event init(String message) {
-        init(DEFAULT_LOG_LEVEL, message);
-        return this;
-    }
-
-    /**
-     * initialize an event with a logLevel and message
-     */
-    public Event init(@Level int logLevel, String message) {
-        mTimestamp = System.currentTimeMillis();
-        mLogLevel = logLevel;
-        mMessage = message;
-        return this;
-    }
-
-    public String getMessage() {
-        return mMessage;
-    }
-
-    public long getTimestamp() {
-        return mTimestamp;
-    }
-
-    public @Level int getLogLevel() {
-        return mLogLevel;
-    }
-
-    /**
-     * Recycle this event
-     */
-    void recycle() {
-        mTimestamp = -1;
-        mLogLevel = DEFAULT_LOG_LEVEL;
-        mMessage = "";
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/log/RichEvent.java b/packages/SystemUI/src/com/android/systemui/log/RichEvent.java
deleted file mode 100644
index 470f2b0..0000000
--- a/packages/SystemUI/src/com/android/systemui/log/RichEvent.java
+++ /dev/null
@@ -1,123 +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.log;
-
-/**
- * Stores information about an event that occurred in SystemUI to be used for debugging and triage.
- * Every rich event has a time stamp, event type, and log level, with the option to provide the
- * reason this event was triggered.
- * Events are stored in {@link SysuiLog} and can be printed in a dumpsys.
- */
-public abstract class RichEvent extends Event {
-    private int mType;
-
-    /**
-     * Initializes a rich event that includes an event type that matches with an index in the array
-     * getEventLabels().
-     */
-    public RichEvent init(@Event.Level int logLevel, int type, String reason) {
-        final int numEvents = getEventLabels().length;
-        if (type < 0 || type >= numEvents) {
-            throw new IllegalArgumentException("Unsupported event type. Events only supported"
-                    + " from 0 to " + (numEvents - 1) + ", but given type=" + type);
-        }
-        mType = type;
-        super.init(logLevel, getEventLabels()[mType] + " " + reason);
-        return this;
-    }
-
-    /**
-     * Returns an array of the event labels.  The index represents the event type and the
-     * corresponding String stored at that index is the user-readable representation of that event.
-     * @return array of user readable events, where the index represents its event type constant
-     */
-    public abstract String[] getEventLabels();
-
-    @Override
-    public void recycle() {
-        super.recycle();
-        mType = -1;
-    }
-
-    public int getType() {
-        return mType;
-    }
-
-    /**
-     * Builder to build a RichEvent.
-     * @param <B> Log specific builder that is extending this builder
-     * @param <E> Type of event we'll be building
-     */
-    public abstract static class Builder<B extends Builder<B, E>, E extends RichEvent> {
-        public static final int UNINITIALIZED = -1;
-
-        public final SysuiLog mLog;
-        private B mBuilder = getBuilder();
-        protected int mType;
-        protected String mReason;
-        protected @Level int mLogLevel;
-
-        public Builder(SysuiLog sysuiLog) {
-            mLog = sysuiLog;
-            reset();
-        }
-
-        /**
-         * Reset this builder's parameters so it can be reused to build another RichEvent.
-         */
-        public void reset() {
-            mType = UNINITIALIZED;
-            mReason = null;
-            mLogLevel = VERBOSE;
-        }
-
-        /**
-         * Get the log-specific builder.
-         */
-        public abstract B getBuilder();
-
-        /**
-         * Build the log-specific event given an event to populate.
-         */
-        public abstract E build(E e);
-
-        /**
-         * Optional - set the log level. Defaults to DEBUG.
-         */
-        public B setLogLevel(@Level int logLevel) {
-            mLogLevel = logLevel;
-            return mBuilder;
-        }
-
-        /**
-         * Required - set the event type.  These events must correspond with the events from
-         * getEventLabels().
-         */
-        public B setType(int type) {
-            mType = type;
-            return mBuilder;
-        }
-
-        /**
-         * Optional - set the reason why this event was triggered.
-         */
-        public B setReason(String reason) {
-            mReason = reason;
-            return mBuilder;
-        }
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/log/SysuiLog.java b/packages/SystemUI/src/com/android/systemui/log/SysuiLog.java
deleted file mode 100644
index 9ee3e67..0000000
--- a/packages/SystemUI/src/com/android/systemui/log/SysuiLog.java
+++ /dev/null
@@ -1,180 +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.log;
-
-import android.os.Build;
-import android.os.SystemProperties;
-import android.util.Log;
-
-import com.android.internal.annotations.GuardedBy;
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.systemui.DumpController;
-import com.android.systemui.Dumpable;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.text.SimpleDateFormat;
-import java.util.ArrayDeque;
-import java.util.Locale;
-
-/**
- * Thread-safe logger in SystemUI which prints logs to logcat and stores logs to be
- * printed by the DumpController. This is an alternative to printing directly
- * to avoid logs being deleted by chatty. The number of logs retained is varied based on
- * whether the build is {@link Build.IS_DEBUGGABLE}.
- *
- * To manually view the logs via adb:
- *      adb shell dumpsys activity service com.android.systemui/.SystemUIService \
- *      dependency DumpController <SysuiLogId>
- *
- * Logs can be disabled by setting the following SystemProperty and then restarting the device:
- *      adb shell setprop persist.sysui.log.enabled.<id> true/false && adb reboot
- *
- * @param <E> Type of event we'll be logging
- */
-public class SysuiLog<E extends Event> implements Dumpable {
-    public static final SimpleDateFormat DATE_FORMAT =
-            new SimpleDateFormat("MM-dd HH:mm:ss.S", Locale.US);
-
-    protected final Object mDataLock = new Object();
-    private final String mId;
-    private final int mMaxLogs;
-    protected boolean mEnabled;
-    protected boolean mLogToLogcatEnabled;
-
-    @VisibleForTesting protected ArrayDeque<E> mTimeline;
-
-    /**
-     * Creates a SysuiLog
-     * @param dumpController where to register this logger's dumpsys
-     * @param id user-readable tag for this logger
-     * @param maxDebugLogs maximum number of logs to retain when {@link sDebuggable} is true
-     * @param maxLogs maximum number of logs to retain when {@link sDebuggable} is false
-     */
-    public SysuiLog(DumpController dumpController, String id, int maxDebugLogs, int maxLogs) {
-        this(dumpController, id, sDebuggable ? maxDebugLogs : maxLogs,
-                SystemProperties.getBoolean(SYSPROP_ENABLED_PREFIX + id, DEFAULT_ENABLED),
-                SystemProperties.getBoolean(SYSPROP_LOGCAT_ENABLED_PREFIX + id,
-                        DEFAULT_LOGCAT_ENABLED));
-    }
-
-    @VisibleForTesting
-    protected SysuiLog(DumpController dumpController, String id, int maxLogs, boolean enabled,
-            boolean logcatEnabled) {
-        mId = id;
-        mMaxLogs = maxLogs;
-        mEnabled = enabled;
-        mLogToLogcatEnabled = logcatEnabled;
-        mTimeline = mEnabled ? new ArrayDeque<>(mMaxLogs) : null;
-        dumpController.registerDumpable(mId, this);
-    }
-
-    /**
-     * Logs an event to the timeline which can be printed by the dumpsys.
-     * May also log to logcat if enabled.
-     * @return the last event that was discarded from the Timeline (can be recycled)
-     */
-    public E log(E event) {
-        if (!mEnabled) {
-            return null;
-        }
-
-        E recycledEvent = null;
-        synchronized (mDataLock) {
-            if (mTimeline.size() >= mMaxLogs) {
-                recycledEvent = mTimeline.removeFirst();
-            }
-
-            mTimeline.add(event);
-        }
-
-        if (mLogToLogcatEnabled) {
-            final String strEvent = eventToString(event);
-            switch (event.getLogLevel()) {
-                case Event.VERBOSE:
-                    Log.v(mId, strEvent);
-                    break;
-                case Event.DEBUG:
-                    Log.d(mId, strEvent);
-                    break;
-                case Event.ERROR:
-                    Log.e(mId, strEvent);
-                    break;
-                case Event.INFO:
-                    Log.i(mId, strEvent);
-                    break;
-                case Event.WARN:
-                    Log.w(mId, strEvent);
-                    break;
-            }
-        }
-
-        if (recycledEvent != null) {
-            recycledEvent.recycle();
-        }
-
-        return recycledEvent;
-    }
-
-    /**
-     * @return user-readable string of the given event with timestamp
-     */
-    private String eventToTimestampedString(Event event) {
-        StringBuilder sb = new StringBuilder();
-        sb.append(SysuiLog.DATE_FORMAT.format(event.getTimestamp()));
-        sb.append(" ");
-        sb.append(event.getMessage());
-        return sb.toString();
-    }
-
-    /**
-     * @return user-readable string of the given event without a timestamp
-     */
-    public String eventToString(Event event) {
-        return event.getMessage();
-    }
-
-    @GuardedBy("mDataLock")
-    private void dumpTimelineLocked(PrintWriter pw) {
-        pw.println("\tTimeline:");
-
-        for (Event event : mTimeline) {
-            pw.println("\t" + eventToTimestampedString(event));
-        }
-    }
-
-    @Override
-    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        pw.println(mId + ":");
-
-        if (mEnabled) {
-            synchronized (mDataLock) {
-                dumpTimelineLocked(pw);
-            }
-        } else {
-            pw.print(" - Logging disabled.");
-        }
-    }
-
-    private static boolean sDebuggable = Build.IS_DEBUGGABLE;
-    private static final String SYSPROP_ENABLED_PREFIX = "persist.sysui.log.enabled.";
-    private static final String SYSPROP_LOGCAT_ENABLED_PREFIX = "persist.sysui.log.enabled.logcat.";
-    private static final boolean DEFAULT_ENABLED = sDebuggable;
-    private static final boolean DEFAULT_LOGCAT_ENABLED = false;
-    private static final int DEFAULT_MAX_DEBUG_LOGS = 100;
-    private static final int DEFAULT_MAX_LOGS = 50;
-}
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
index e119bef..4a7469c 100644
--- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
@@ -61,6 +61,18 @@
         return buffer;
     }
 
+    /** Provides a logging buffer for all logs related to Quick Settings. */
+    @Provides
+    @Singleton
+    @QSLog
+    public static LogBuffer provideQuickSettingsLogBuffer(
+            LogcatEchoTracker bufferFilter,
+            DumpController dumpController) {
+        LogBuffer buffer = new LogBuffer("QSLog", 500, 10, bufferFilter);
+        buffer.attach(dumpController);
+        return buffer;
+    }
+
     /** Allows logging buffers to be tweaked via adb on debug builds but not on prod builds. */
     @Provides
     @Singleton
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/QSLog.java b/packages/SystemUI/src/com/android/systemui/log/dagger/QSLog.java
new file mode 100644
index 0000000..dd5010c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/QSLog.java
@@ -0,0 +1,33 @@
+/*
+ * 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.log.dagger;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import com.android.systemui.log.LogBuffer;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Qualifier;
+
+/** A {@link LogBuffer} for QS-related messages. */
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+public @interface QSLog {
+}
diff --git a/packages/SystemUI/src/com/android/systemui/model/SysUiState.java b/packages/SystemUI/src/com/android/systemui/model/SysUiState.java
index 029ab43..a827f59 100644
--- a/packages/SystemUI/src/com/android/systemui/model/SysUiState.java
+++ b/packages/SystemUI/src/com/android/systemui/model/SysUiState.java
@@ -19,6 +19,7 @@
 import static android.view.Display.DEFAULT_DISPLAY;
 
 import android.annotation.NonNull;
+import android.util.Log;
 
 import com.android.systemui.Dumpable;
 import com.android.systemui.shared.system.QuickStepContract;
@@ -37,6 +38,9 @@
 @Singleton
 public class SysUiState implements Dumpable {
 
+    private static final String TAG = SysUiState.class.getSimpleName();
+    public static final boolean DEBUG = true;
+
     private @QuickStepContract.SystemUiStateFlags int mFlags;
     private final List<SysUiStateCallback> mCallbacks = new ArrayList<>();
     private int mFlagsToSet = 0;
@@ -76,6 +80,7 @@
     private void updateFlags(int displayId) {
         if (displayId != DEFAULT_DISPLAY) {
             // Ignore non-default displays for now
+            Log.w(TAG, "Ignoring flag update for display: " + displayId, new Throwable());
             return;
         }
 
@@ -87,6 +92,9 @@
 
     /** Notify all those who are registered that the state has changed. */
     private void notifyAndSetSystemUiStateChanged(int newFlags, int oldFlags) {
+        if (DEBUG) {
+            Log.d(TAG, "SysUiState changed: old=" + oldFlags + " new=" + newFlags);
+        }
         if (newFlags != oldFlags) {
             mCallbacks.forEach(callback -> callback.onSystemUiStateChanged(newFlags));
             mFlags = newFlags;
diff --git a/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java b/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java
index 92aa020..adee7f2 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java
@@ -16,17 +16,12 @@
 
 package com.android.systemui.pip;
 
-import android.content.Context;
 import android.content.res.Configuration;
 
-import com.android.systemui.broadcast.BroadcastDispatcher;
-import com.android.systemui.wm.DisplayController;
-
 import java.io.PrintWriter;
 
+
 public interface BasePipManager {
-    void initialize(Context context, BroadcastDispatcher broadcastDispatcher,
-            DisplayController displayController);
     void showPictureInPictureMenu();
     default void expandPip() {}
     default void hidePipMenu(Runnable onStartCallback, Runnable onEndCallback) {}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java b/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java
index 6f03f18..41b3130 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java
@@ -345,6 +345,14 @@
     }
 
     /**
+     * Sets the current bound with the currently store aspect ratio.
+     * @param stackBounds
+     */
+    public void transformBoundsToAspectRatio(Rect stackBounds) {
+        transformBoundsToAspectRatio(stackBounds, mAspectRatio, true);
+    }
+
+    /**
      * Set the current bounds (or the default bounds if there are no current bounds) with the
      * specified aspect ratio.
      */
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipUI.java b/packages/SystemUI/src/com/android/systemui/pip/PipUI.java
index cecdc9c..599c845 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipUI.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipUI.java
@@ -16,7 +16,6 @@
 
 package com.android.systemui.pip;
 
-import static android.content.pm.PackageManager.FEATURE_LEANBACK_ONLY;
 import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE;
 
 import android.content.Context;
@@ -26,9 +25,7 @@
 import android.os.UserManager;
 
 import com.android.systemui.SystemUI;
-import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.wm.DisplayController;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
@@ -44,25 +41,20 @@
 
     private final CommandQueue mCommandQueue;
     private BasePipManager mPipManager;
-    private final BroadcastDispatcher mBroadcastDispatcher;
-    private final DisplayController mDisplayController;
-    private boolean mSupportsPip;
 
     @Inject
     public PipUI(Context context, CommandQueue commandQueue,
-            BroadcastDispatcher broadcastDispatcher,
-            DisplayController displayController) {
+            BasePipManager pipManager) {
         super(context);
-        mBroadcastDispatcher = broadcastDispatcher;
         mCommandQueue = commandQueue;
-        mDisplayController = displayController;
+        mPipManager = pipManager;
     }
 
     @Override
     public void start() {
         PackageManager pm = mContext.getPackageManager();
-        mSupportsPip = pm.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE);
-        if (!mSupportsPip) {
+        boolean supportsPip = pm.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE);
+        if (!supportsPip) {
             return;
         }
 
@@ -72,11 +64,6 @@
             throw new IllegalStateException("Non-primary Pip component not currently supported.");
         }
 
-        mPipManager = pm.hasSystemFeature(FEATURE_LEANBACK_ONLY)
-                ? com.android.systemui.pip.tv.PipManager.getInstance()
-                : com.android.systemui.pip.phone.PipManager.getInstance();
-        mPipManager.initialize(mContext, mBroadcastDispatcher, mDisplayController);
-
         mCommandQueue.addCallback(this);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
index 239ef36..cb94e28 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
@@ -46,19 +46,22 @@
 import com.android.systemui.shared.system.PinnedStackListenerForwarder.PinnedStackListener;
 import com.android.systemui.shared.system.TaskStackChangeListener;
 import com.android.systemui.shared.system.WindowManagerWrapper;
+import com.android.systemui.util.FloatingContentCoordinator;
 import com.android.systemui.wm.DisplayChangeController;
 import com.android.systemui.wm.DisplayController;
 
 import java.io.PrintWriter;
 
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
 /**
  * Manages the picture-in-picture (PIP) UI and states for Phones.
  */
+@Singleton
 public class PipManager implements BasePipManager {
     private static final String TAG = "PipManager";
 
-    private static PipManager sPipController;
-
     private Context mContext;
     private IActivityManager mActivityManager;
     private IActivityTaskManager mActivityTaskManager;
@@ -225,13 +228,10 @@
         }
     }
 
-    private PipManager() {}
-
-    /**
-     * Initializes {@link PipManager}.
-     */
-    public void initialize(Context context, BroadcastDispatcher broadcastDispatcher,
-            DisplayController displayController) {
+    @Inject
+    public PipManager(Context context, BroadcastDispatcher broadcastDispatcher,
+            DisplayController displayController,
+            FloatingContentCoordinator floatingContentCoordinator) {
         mContext = context;
         mActivityManager = ActivityManager.getService();
         mActivityTaskManager = ActivityTaskManager.getService();
@@ -249,7 +249,8 @@
         mMenuController = new PipMenuActivityController(context, mActivityManager, mMediaController,
                 mInputConsumerController);
         mTouchHandler = new PipTouchHandler(context, mActivityManager, mActivityTaskManager,
-                mMenuController, mInputConsumerController, mPipBoundsHandler);
+                mMenuController, mInputConsumerController, mPipBoundsHandler,
+                floatingContentCoordinator);
         mAppOpsListener = new PipAppOpsListener(context, mActivityManager,
                 mTouchHandler.getMotionHelper());
         displayController.addDisplayChangingController(mRotationController);
@@ -329,16 +330,6 @@
                 mTmpDisplayInfo.rotation);
     }
 
-    /**
-     * Gets an instance of {@link PipManager}.
-     */
-    public static PipManager getInstance() {
-        if (sPipController == null) {
-            sPipController = new PipManager();
-        }
-        return sPipController;
-    }
-
     public void dump(PrintWriter pw) {
         final String innerPrefix = "  ";
         pw.println(TAG);
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java
index f9b18cf..c7bfc06 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java
@@ -280,7 +280,9 @@
         if (mToActivityMessenger != null) {
             Bundle data = new Bundle();
             data.putInt(EXTRA_MENU_STATE, menuState);
-            data.putParcelable(EXTRA_STACK_BOUNDS, stackBounds);
+            if (stackBounds != null) {
+                data.putParcelable(EXTRA_STACK_BOUNDS, stackBounds);
+            }
             data.putParcelable(EXTRA_MOVEMENT_BOUNDS, movementBounds);
             data.putBoolean(EXTRA_ALLOW_TIMEOUT, allowMenuTimeout);
             data.putBoolean(EXTRA_WILL_RESIZE_MENU, willResizeMenu);
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java
index eba2e78..c6e2852 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java
@@ -19,10 +19,7 @@
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
 
-import android.animation.AnimationHandler;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.TimeAnimator;
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.ActivityManager.StackInfo;
 import android.app.IActivityManager;
@@ -36,6 +33,7 @@
 import android.os.Message;
 import android.os.RemoteException;
 import android.util.Log;
+import android.view.Choreographer;
 
 import androidx.dynamicanimation.animation.SpringForce;
 
@@ -44,6 +42,7 @@
 import com.android.systemui.pip.PipSnapAlgorithm;
 import com.android.systemui.shared.system.WindowManagerWrapper;
 import com.android.systemui.statusbar.FlingAnimationUtils;
+import com.android.systemui.util.FloatingContentCoordinator;
 import com.android.systemui.util.animation.FloatProperties;
 import com.android.systemui.util.animation.PhysicsAnimator;
 
@@ -52,7 +51,8 @@
 /**
  * A helper to animate and manipulate the PiP.
  */
-public class PipMotionHelper implements Handler.Callback, PipAppOpsListener.Callback {
+public class PipMotionHelper implements Handler.Callback, PipAppOpsListener.Callback,
+        FloatingContentCoordinator.FloatingContent {
 
     private static final String TAG = "PipMotionHelper";
     private static final boolean DEBUG = false;
@@ -88,24 +88,42 @@
     /** PIP's current bounds on the screen. */
     private final Rect mBounds = new Rect();
 
+    /** The bounds within which PIP's top-left coordinate is allowed to move. */
+    private Rect mMovementBounds = new Rect();
+
+    /** The region that all of PIP must stay within. */
+    private Rect mFloatingAllowedArea = new Rect();
+
+    private final SfVsyncFrameCallbackProvider mSfVsyncFrameProvider =
+            new SfVsyncFrameCallbackProvider();
+
     /**
-     * Bounds that are animated using the physics animator. PIP is moved to these bounds whenever
-     * the {@link #mVsyncTimeAnimator} ticks.
+     * Bounds that are animated using the physics animator.
      */
     private final Rect mAnimatedBounds = new Rect();
 
+    /** The destination bounds to which PIP is animating. */
+    private Rect mAnimatingToBounds = new Rect();
+
+    /** Coordinator instance for resolving conflicts with other floating content. */
+    private FloatingContentCoordinator mFloatingContentCoordinator;
+
     /**
      * PhysicsAnimator instance for animating {@link #mAnimatedBounds} using physics animations.
      */
     private PhysicsAnimator<Rect> mAnimatedBoundsPhysicsAnimator = PhysicsAnimator.getInstance(
             mAnimatedBounds);
 
+    /** Callback that re-sizes PIP to the animated bounds. */
+    private final Choreographer.FrameCallback mResizePipVsyncCallback =
+            l -> resizePipUnchecked(mAnimatedBounds);
+
     /**
-     * Time animator whose frame timing comes from the SurfaceFlinger vsync frame provider. At each
-     * frame, PIP is moved to {@link #mAnimatedBounds}, which are animated asynchronously using
-     * physics animations.
+     * Update listener that posts a vsync frame callback to resize PIP to {@link #mAnimatedBounds}.
      */
-    private TimeAnimator mVsyncTimeAnimator;
+    private final PhysicsAnimator.UpdateListener<Rect> mResizePipVsyncUpdateListener =
+            (target, values) ->
+                    mSfVsyncFrameProvider.postFrameCallback(mResizePipVsyncCallback);
 
     /** FlingConfig instances provided to PhysicsAnimator for fling gestures. */
     private PhysicsAnimator.FlingConfig mFlingConfigX;
@@ -116,9 +134,15 @@
             new PhysicsAnimator.SpringConfig(
                     SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_LOW_BOUNCY);
 
+    /** SpringConfig to use for springing PIP away from conflicting floating content. */
+    private final PhysicsAnimator.SpringConfig mConflictResolutionSpringConfig =
+                new PhysicsAnimator.SpringConfig(
+                        SpringForce.STIFFNESS_LOW, SpringForce.DAMPING_RATIO_LOW_BOUNCY);
+
     public PipMotionHelper(Context context, IActivityManager activityManager,
             IActivityTaskManager activityTaskManager, PipMenuActivityController menuController,
-            PipSnapAlgorithm snapAlgorithm, FlingAnimationUtils flingAnimationUtils) {
+            PipSnapAlgorithm snapAlgorithm, FlingAnimationUtils flingAnimationUtils,
+            FloatingContentCoordinator floatingContentCoordinator) {
         mContext = context;
         mHandler = new Handler(ForegroundThread.get().getLooper(), this);
         mActivityManager = activityManager;
@@ -126,39 +150,25 @@
         mMenuController = menuController;
         mSnapAlgorithm = snapAlgorithm;
         mFlingAnimationUtils = flingAnimationUtils;
-        final AnimationHandler vsyncFrameCallbackProvider = new AnimationHandler();
-        vsyncFrameCallbackProvider.setProvider(new SfVsyncFrameCallbackProvider());
-
+        mFloatingContentCoordinator = floatingContentCoordinator;
         onConfigurationChanged();
+    }
 
-        // Construct a time animator that uses the vsync frame provider. Physics animations can't
-        // use custom frame providers, since they rely on constant time between frames to run the
-        // physics simulations. To work around this, we physically-animate a second set of bounds,
-        // and apply those animating bounds to the PIP in-sync via this TimeAnimator.
-        mVsyncTimeAnimator = new TimeAnimator() {
-            @Override
-            public AnimationHandler getAnimationHandler() {
-                return vsyncFrameCallbackProvider;
-            }
-        };
+    @NonNull
+    @Override
+    public Rect getFloatingBoundsOnScreen() {
+        return !mAnimatingToBounds.isEmpty() ? mAnimatingToBounds : mBounds;
+    }
 
-        // When the time animator ticks, move PIP to the animated bounds.
-        mVsyncTimeAnimator.setTimeListener(
-                (animation, totalTime, deltaTime) ->
-                        resizePipUnchecked(mAnimatedBounds));
+    @NonNull
+    @Override
+    public Rect getAllowedFloatingBoundsRegion() {
+        return mFloatingAllowedArea;
+    }
 
-        // Add a listener for cancel/end events that moves PIP to the final animated bounds.
-        mVsyncTimeAnimator.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                resizePipUnchecked(mAnimatedBounds);
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                resizePipUnchecked(mAnimatedBounds);
-            }
-        });
+    @Override
+    public void moveToBounds(@NonNull Rect bounds) {
+        animateToBounds(bounds, mConflictResolutionSpringConfig);
     }
 
     /**
@@ -186,9 +196,24 @@
     }
 
     /**
-     * Tries to the move the pinned stack to the given {@param bounds}.
+     * Tries to move the pinned stack to the given {@param bounds}.
      */
     void movePip(Rect toBounds) {
+        movePip(toBounds, false /* isDragging */);
+    }
+
+    /**
+     * Tries to move the pinned stack to the given {@param bounds}.
+     *
+     * @param isDragging Whether this movement is the result of a drag touch gesture. If so, we
+     *                   won't notify the floating content coordinator of this move, since that will
+     *                   happen when the gesture ends.
+     */
+    void movePip(Rect toBounds, boolean isDragging) {
+        if (!isDragging) {
+            mFloatingContentCoordinator.onContentMoved(this);
+        }
+
         cancelAnimations();
         resizePipUnchecked(toBounds);
         mBounds.set(toBounds);
@@ -240,6 +265,18 @@
         });
     }
 
+    /** Sets the movement bounds to use to constrain PIP position animations. */
+    void setCurrentMovementBounds(Rect movementBounds) {
+        mMovementBounds.set(movementBounds);
+        rebuildFlingConfigs();
+
+        // The movement bounds represent the area within which we can move PIP's top-left position.
+        // The allowed area for all of PIP is those bounds plus PIP's width and height.
+        mFloatingAllowedArea.set(mMovementBounds);
+        mFloatingAllowedArea.right += mBounds.width();
+        mFloatingAllowedArea.bottom += mBounds.height();
+    }
+
     /**
      * @return the PiP bounds.
      */
@@ -250,11 +287,11 @@
     /**
      * @return the closest minimized PiP bounds.
      */
-    Rect getClosestMinimizedBounds(Rect stackBounds, Rect movementBounds) {
+    Rect getClosestMinimizedBounds(Rect stackBounds) {
         Point displaySize = new Point();
         mContext.getDisplay().getRealSize(displaySize);
-        Rect toBounds = mSnapAlgorithm.findClosestSnapBounds(movementBounds, stackBounds);
-        mSnapAlgorithm.applyMinimizedOffset(toBounds, movementBounds, displaySize, mStableInsets);
+        Rect toBounds = mSnapAlgorithm.findClosestSnapBounds(mMovementBounds, stackBounds);
+        mSnapAlgorithm.applyMinimizedOffset(toBounds, mMovementBounds, displaySize, mStableInsets);
         return toBounds;
     }
 
@@ -293,11 +330,10 @@
     /**
      * Animates the PiP to the minimized state, slightly offscreen.
      */
-    void animateToClosestMinimizedState(Rect movementBounds, @Nullable Runnable updateAction) {
-        final Rect toBounds = getClosestMinimizedBounds(mBounds, movementBounds);
+    void animateToClosestMinimizedState(@Nullable Runnable updateAction) {
+        final Rect toBounds = getClosestMinimizedBounds(mBounds);
 
-        prepareForBoundsAnimation(movementBounds);
-
+        mAnimatedBounds.set(mBounds);
         mAnimatedBoundsPhysicsAnimator
                 .spring(FloatProperties.RECT_X, toBounds.left, mSpringConfig)
                 .spring(FloatProperties.RECT_Y, toBounds.top, mSpringConfig);
@@ -314,10 +350,8 @@
      * Flings the PiP to the closest snap target.
      */
     void flingToSnapTarget(
-            float velocityX, float velocityY, Rect movementBounds, Runnable updateAction,
-            @Nullable Runnable endAction) {
-        prepareForBoundsAnimation(movementBounds);
-
+            float velocityX, float velocityY, Runnable updateAction, @Nullable Runnable endAction) {
+        mAnimatedBounds.set(mBounds);
         mAnimatedBoundsPhysicsAnimator
                 .flingThenSpring(
                         FloatProperties.RECT_X, velocityX, mFlingConfigX, mSpringConfig,
@@ -327,21 +361,39 @@
                 .addUpdateListener((target, values) -> updateAction.run())
                 .withEndActions(endAction);
 
+        final float xEndValue = velocityX < 0 ? mMovementBounds.left : mMovementBounds.right;
+        final float estimatedFlingYEndValue =
+                PhysicsAnimator.estimateFlingEndValue(mBounds.top, velocityY, mFlingConfigY);
+
+        setAnimatingToBounds(new Rect(
+                (int) xEndValue,
+                (int) estimatedFlingYEndValue,
+                (int) xEndValue + mBounds.width(),
+                (int) estimatedFlingYEndValue + mBounds.height()));
+
         startBoundsAnimation();
     }
 
     /**
      * Animates the PiP to the closest snap target.
      */
-    void animateToClosestSnapTarget(Rect movementBounds) {
-        prepareForBoundsAnimation(movementBounds);
+    void animateToClosestSnapTarget() {
+        final Rect newBounds = mSnapAlgorithm.findClosestSnapBounds(mMovementBounds, mBounds);
+        animateToBounds(newBounds, mSpringConfig);
+    }
 
-        final Rect toBounds = mSnapAlgorithm.findClosestSnapBounds(movementBounds, mBounds);
+    /**
+     * Animates PIP to the provided bounds, using physics animations and the given spring
+     * configuration
+     */
+    void animateToBounds(Rect bounds, PhysicsAnimator.SpringConfig springConfig) {
+        mAnimatedBounds.set(mBounds);
         mAnimatedBoundsPhysicsAnimator
-                .spring(FloatProperties.RECT_X, toBounds.left, mSpringConfig)
-                .spring(FloatProperties.RECT_Y, toBounds.top, mSpringConfig);
-
+                .spring(FloatProperties.RECT_X, bounds.left, springConfig)
+                .spring(FloatProperties.RECT_Y, bounds.top, springConfig);
         startBoundsAnimation();
+
+        setAnimatingToBounds(bounds);
     }
 
     /**
@@ -352,9 +404,6 @@
         final boolean isFling = velocity > mFlingAnimationUtils.getMinVelocityPxPerSecond();
         final Point dismissEndPoint = getDismissEndPoint(mBounds, velocityX, velocityY, isFling);
 
-        // Set the animated bounds to start at the current bounds. We don't need to rebuild the
-        // fling configs here via prepareForBoundsAnimation, since animateDismiss isn't provided
-        // with new movement bounds.
         mAnimatedBounds.set(mBounds);
 
         // Animate to the dismiss end point, and then dismiss PIP.
@@ -395,9 +444,11 @@
                     currentMovementBounds);
         }
         mSnapAlgorithm.applySnapFraction(normalBounds, normalMovementBounds, savedSnapFraction);
+
         if (minimized) {
-            normalBounds = getClosestMinimizedBounds(normalBounds, normalMovementBounds);
+            normalBounds = getClosestMinimizedBounds(normalBounds);
         }
+
         if (immediate) {
             movePip(normalBounds);
         } else {
@@ -429,20 +480,15 @@
      */
     private void cancelAnimations() {
         mAnimatedBoundsPhysicsAnimator.cancel();
-        mVsyncTimeAnimator.cancel();
+        mAnimatingToBounds.setEmpty();
     }
 
-    /**
-     * Set new fling configs whose min/max values respect the given movement bounds, and set the
-     * animated bounds to PIP's current 'real' bounds.
-     */
-    private void prepareForBoundsAnimation(Rect movementBounds) {
+    /** Set new fling configs whose min/max values respect the given movement bounds. */
+    private void rebuildFlingConfigs() {
         mFlingConfigX = new PhysicsAnimator.FlingConfig(
-                DEFAULT_FRICTION, movementBounds.left, movementBounds.right);
+                DEFAULT_FRICTION, mMovementBounds.left, mMovementBounds.right);
         mFlingConfigY = new PhysicsAnimator.FlingConfig(
-                DEFAULT_FRICTION, movementBounds.top, movementBounds.bottom);
-
-        mAnimatedBounds.set(mBounds);
+                DEFAULT_FRICTION, mMovementBounds.top, mMovementBounds.bottom);
     }
 
     /**
@@ -457,10 +503,18 @@
         cancelAnimations();
 
         mAnimatedBoundsPhysicsAnimator
-                .withEndActions(
-                        mVsyncTimeAnimator::cancel)
+                .addUpdateListener(mResizePipVsyncUpdateListener)
                 .start();
-        mVsyncTimeAnimator.start();
+    }
+
+    /**
+     * Notifies the floating coordinator that we're moving, and sets {@link #mAnimatingToBounds} so
+     * we return these bounds from
+     * {@link FloatingContentCoordinator.FloatingContent#getFloatingBoundsOnScreen()}.
+     */
+    private void setAnimatingToBounds(Rect bounds) {
+        mAnimatingToBounds = bounds;
+        mFloatingContentCoordinator.onContentMoved(this);
     }
 
     /**
@@ -491,6 +545,7 @@
             args.arg1 = toBounds;
             args.argi1 = duration;
             mHandler.sendMessage(mHandler.obtainMessage(MSG_RESIZE_ANIMATE, args));
+            setAnimatingToBounds(toBounds);
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipResizeGestureHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipResizeGestureHandler.java
new file mode 100644
index 0000000..9fb6234
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipResizeGestureHandler.java
@@ -0,0 +1,235 @@
+/*
+ * 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.pip.phone;
+
+import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.PIP_USER_RESIZE;
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_BOTTOM;
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_LEFT;
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_NONE;
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_RIGHT;
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_TOP;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Point;
+import android.graphics.PointF;
+import android.graphics.Rect;
+import android.graphics.Region;
+import android.hardware.input.InputManager;
+import android.os.Looper;
+import android.provider.DeviceConfig;
+import android.util.DisplayMetrics;
+import android.view.InputChannel;
+import android.view.InputEvent;
+import android.view.InputEventReceiver;
+import android.view.InputMonitor;
+import android.view.MotionEvent;
+
+import com.android.internal.policy.TaskResizingAlgorithm;
+import com.android.systemui.R;
+import com.android.systemui.pip.PipBoundsHandler;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Helper on top of PipTouchHandler that handles inputs OUTSIDE of the PIP window, which is used to
+ * trigger dynamic resize.
+ */
+public class PipResizeGestureHandler {
+
+    private static final String TAG = "PipResizeGestureHandler";
+
+    private final DisplayMetrics mDisplayMetrics = new DisplayMetrics();
+    private final PipBoundsHandler mPipBoundsHandler;
+    private final PipTouchHandler mPipTouchHandler;
+    private final PipMotionHelper mMotionHelper;
+    private final int mDisplayId;
+    private final Executor mMainExecutor;
+    private final Region mTmpRegion = new Region();
+
+    private final PointF mDownPoint = new PointF();
+    private final Point mMaxSize = new Point();
+    private final Point mMinSize = new Point();
+    private final Rect mTmpBounds = new Rect();
+    private final int mDelta;
+
+    private boolean mAllowGesture = false;
+    private boolean mIsAttached;
+    private boolean mIsEnabled;
+    private boolean mEnablePipResize;
+
+    private InputMonitor mInputMonitor;
+    private InputEventReceiver mInputEventReceiver;
+
+    private int mCtrlType;
+
+    public PipResizeGestureHandler(Context context, PipBoundsHandler pipBoundsHandler,
+            PipTouchHandler pipTouchHandler, PipMotionHelper motionHelper) {
+        final Resources res = context.getResources();
+        context.getDisplay().getMetrics(mDisplayMetrics);
+        mDisplayId = context.getDisplayId();
+        mMainExecutor = context.getMainExecutor();
+        mPipBoundsHandler = pipBoundsHandler;
+        mPipTouchHandler = pipTouchHandler;
+        mMotionHelper = motionHelper;
+
+        context.getDisplay().getRealSize(mMaxSize);
+        mDelta = res.getDimensionPixelSize(R.dimen.pip_resize_edge_size);
+
+        mEnablePipResize = DeviceConfig.getBoolean(
+                DeviceConfig.NAMESPACE_SYSTEMUI,
+                PIP_USER_RESIZE,
+                /* defaultValue = */ false);
+        DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI, mMainExecutor,
+                new DeviceConfig.OnPropertiesChangedListener() {
+                    @Override
+                    public void onPropertiesChanged(DeviceConfig.Properties properties) {
+                        if (properties.getKeyset().contains(PIP_USER_RESIZE)) {
+                            mEnablePipResize = properties.getBoolean(
+                                    PIP_USER_RESIZE, /* defaultValue = */ false);
+                        }
+                    }
+                });
+    }
+
+    private void disposeInputChannel() {
+        if (mInputEventReceiver != null) {
+            mInputEventReceiver.dispose();
+            mInputEventReceiver = null;
+        }
+        if (mInputMonitor != null) {
+            mInputMonitor.dispose();
+            mInputMonitor = null;
+        }
+    }
+
+    void onActivityPinned() {
+        mIsAttached = true;
+        updateIsEnabled();
+    }
+
+    void onActivityUnpinned() {
+        mIsAttached = false;
+        updateIsEnabled();
+    }
+
+    private void updateIsEnabled() {
+        boolean isEnabled = mIsAttached && mEnablePipResize;
+        if (isEnabled == mIsEnabled) {
+            return;
+        }
+        mIsEnabled = isEnabled;
+        disposeInputChannel();
+
+        if (mIsEnabled) {
+            // Register input event receiver
+            mInputMonitor = InputManager.getInstance().monitorGestureInput(
+                    "pip-resize", mDisplayId);
+            mInputEventReceiver = new SysUiInputEventReceiver(
+                    mInputMonitor.getInputChannel(), Looper.getMainLooper());
+        }
+    }
+
+    private void onInputEvent(InputEvent ev) {
+        if (ev instanceof MotionEvent) {
+            onMotionEvent((MotionEvent) ev);
+        }
+    }
+
+    private boolean isWithinTouchRegion(int x, int y) {
+        final Rect currentPipBounds = mMotionHelper.getBounds();
+        if (currentPipBounds == null) {
+            return false;
+        }
+
+        mTmpBounds.set(currentPipBounds);
+        mTmpBounds.inset(-mDelta, -mDelta);
+
+        mTmpRegion.set(mTmpBounds);
+        mTmpRegion.op(currentPipBounds, Region.Op.DIFFERENCE);
+
+        if (mTmpRegion.contains(x, y)) {
+            if (x < currentPipBounds.left) {
+                mCtrlType |= CTRL_LEFT;
+            }
+            if (x > currentPipBounds.right) {
+                mCtrlType |= CTRL_RIGHT;
+            }
+            if (y < currentPipBounds.top) {
+                mCtrlType |= CTRL_TOP;
+            }
+            if (y > currentPipBounds.bottom) {
+                mCtrlType |= CTRL_BOTTOM;
+            }
+            return true;
+        }
+        return false;
+    }
+
+    private void onMotionEvent(MotionEvent ev) {
+        int action = ev.getActionMasked();
+        if (action == MotionEvent.ACTION_DOWN) {
+            mAllowGesture = isWithinTouchRegion((int) ev.getX(), (int) ev.getY());
+            if (mAllowGesture) {
+                mDownPoint.set(ev.getX(), ev.getY());
+            }
+
+        } else if (mAllowGesture) {
+            final Rect currentPipBounds = mMotionHelper.getBounds();
+            Rect newSize = TaskResizingAlgorithm.resizeDrag(ev.getX(), ev.getY(), mDownPoint.x,
+                    mDownPoint.y, currentPipBounds, mCtrlType, mMinSize.x, mMinSize.y, mMaxSize,
+                    true, true);
+            mPipBoundsHandler.transformBoundsToAspectRatio(newSize);
+            switch (action) {
+                case MotionEvent.ACTION_POINTER_DOWN:
+                    // We do not support multi touch for resizing via drag
+                    mAllowGesture = false;
+                    break;
+                case MotionEvent.ACTION_MOVE:
+                    // Capture inputs
+                    mInputMonitor.pilferPointers();
+                    //TODO: Actually do resize here.
+                    break;
+                case MotionEvent.ACTION_UP:
+                case MotionEvent.ACTION_CANCEL:
+                    //TODO: Finish resize operation here.
+                    mMotionHelper.synchronizePinnedStackBounds();
+                    mCtrlType = CTRL_NONE;
+                    mAllowGesture = false;
+                    break;
+            }
+        }
+    }
+
+    void updateMaxSize(int maxX, int maxY) {
+        mMaxSize.set(maxX, maxY);
+    }
+
+    void updateMiniSize(int minX, int minY) {
+        mMinSize.set(minX, minY);
+    }
+
+    class SysUiInputEventReceiver extends InputEventReceiver {
+        SysUiInputEventReceiver(InputChannel channel, Looper looper) {
+            super(channel, looper);
+        }
+
+        public void onInputEvent(InputEvent event) {
+            PipResizeGestureHandler.this.onInputEvent(event);
+            finishInputEvent(event, true);
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
index 65cc666..8e588e6 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
@@ -47,6 +47,7 @@
 import com.android.systemui.pip.PipSnapAlgorithm;
 import com.android.systemui.shared.system.InputConsumerController;
 import com.android.systemui.statusbar.FlingAnimationUtils;
+import com.android.systemui.util.FloatingContentCoordinator;
 
 import java.io.PrintWriter;
 
@@ -73,6 +74,7 @@
     private final ViewConfiguration mViewConfig;
     private final PipMenuListener mMenuListener = new PipMenuListener();
     private final PipBoundsHandler mPipBoundsHandler;
+    private final PipResizeGestureHandler mPipResizeGestureHandler;
     private IPinnedStackController mPinnedStackController;
 
     private final PipMenuActivityController mMenuController;
@@ -126,6 +128,7 @@
     // Touch state
     private final PipTouchState mTouchState;
     private final FlingAnimationUtils mFlingAnimationUtils;
+    private final FloatingContentCoordinator mFloatingContentCoordinator;
     private final PipMotionHelper mMotionHelper;
     private PipTouchGesture mGesture;
 
@@ -151,7 +154,7 @@
         @Override
         public void onPipMinimize() {
             setMinimizedStateInternal(true);
-            mMotionHelper.animateToClosestMinimizedState(mMovementBounds, null /* updateAction */);
+            mMotionHelper.animateToClosestMinimizedState(null /* updateAction */);
         }
 
         @Override
@@ -171,7 +174,8 @@
     public PipTouchHandler(Context context, IActivityManager activityManager,
             IActivityTaskManager activityTaskManager, PipMenuActivityController menuController,
             InputConsumerController inputConsumerController,
-            PipBoundsHandler pipBoundsHandler) {
+            PipBoundsHandler pipBoundsHandler,
+            FloatingContentCoordinator floatingContentCoordinator) {
 
         // Initialize the Pip input consumer
         mContext = context;
@@ -187,7 +191,9 @@
                 2.5f);
         mGesture = new DefaultPipTouchGesture();
         mMotionHelper = new PipMotionHelper(mContext, mActivityManager, mActivityTaskManager,
-                mMenuController, mSnapAlgorithm, mFlingAnimationUtils);
+                mMenuController, mSnapAlgorithm, mFlingAnimationUtils, floatingContentCoordinator);
+        mPipResizeGestureHandler =
+                new PipResizeGestureHandler(context, pipBoundsHandler, this, mMotionHelper);
         mTouchState = new PipTouchState(mViewConfig, mHandler,
                 () -> mMenuController.showMenu(MENU_STATE_FULL, mMotionHelper.getBounds(),
                         mMovementBounds, true /* allowMenuTimeout */, willResizeMenu()));
@@ -204,6 +210,7 @@
         inputConsumerController.setRegistrationListener(this::onRegistrationChanged);
 
         mPipBoundsHandler = pipBoundsHandler;
+        mFloatingContentCoordinator = floatingContentCoordinator;
         mConnection = new PipAccessibilityInteractionConnection(mMotionHelper,
                 this::onAccessibilityShowMenu, mHandler);
     }
@@ -225,20 +232,27 @@
     }
 
     public void onActivityPinned() {
-        cleanUp();
+        cleanUpDismissTarget();
         mShowPipMenuOnAnimationEnd = true;
+        mPipResizeGestureHandler.onActivityPinned();
+        mFloatingContentCoordinator.onContentAdded(mMotionHelper);
     }
 
     public void onActivityUnpinned(ComponentName topPipActivity) {
         if (topPipActivity == null) {
             // Clean up state after the last PiP activity is removed
-            cleanUp();
+            cleanUpDismissTarget();
+
+            mFloatingContentCoordinator.onContentRemoved(mMotionHelper);
         }
+        mPipResizeGestureHandler.onActivityUnpinned();
     }
 
     public void onPinnedStackAnimationEnded() {
         // Always synchronize the motion helper bounds once PiP animations finish
         mMotionHelper.synchronizePinnedStackBounds();
+        mPipResizeGestureHandler.updateMiniSize(mMotionHelper.getBounds().width(),
+                mMotionHelper.getBounds().height());
 
         if (mShowPipMenuOnAnimationEnd) {
             mMenuController.showMenu(MENU_STATE_CLOSE, mMotionHelper.getBounds(),
@@ -279,6 +293,7 @@
         Size expandedSize = mSnapAlgorithm.getSizeForAspectRatio(aspectRatio,
                 mExpandedShortestEdgeSize, displaySize.x, displaySize.y);
         mExpandedBounds.set(0, 0, expandedSize.getWidth(), expandedSize.getHeight());
+        mPipResizeGestureHandler.updateMaxSize(expandedSize.getWidth(), expandedSize.getHeight());
         Rect expandedMovementBounds = new Rect();
         mSnapAlgorithm.getMovementBounds(mExpandedBounds, insetBounds, expandedMovementBounds,
                 bottomOffset);
@@ -493,8 +508,7 @@
         if (fromController) {
             if (isMinimized) {
                 // Move the PiP to the new bounds immediately if minimized
-                mMotionHelper.movePip(mMotionHelper.getClosestMinimizedBounds(mNormalBounds,
-                        mMovementBounds));
+                mMotionHelper.movePip(mMotionHelper.getClosestMinimizedBounds(mNormalBounds));
             }
         } else if (mPinnedStackController != null) {
             try {
@@ -646,7 +660,7 @@
 
                 mTmpBounds.set(mMotionHelper.getBounds());
                 mTmpBounds.offsetTo((int) left, (int) top);
-                mMotionHelper.movePip(mTmpBounds);
+                mMotionHelper.movePip(mTmpBounds, true /* isDragging */);
 
                 if (mEnableDimissDragToEdge) {
                     updateDismissFraction();
@@ -716,7 +730,6 @@
                         mMenuController.hideMenu();
                     } else {
                         mMotionHelper.animateToClosestMinimizedState(
-                                mMovementBounds,
                                 PipTouchHandler.this::updateDismissFraction /* updateAction */);
                     }
                     return true;
@@ -740,16 +753,15 @@
                 }
 
                 if (isFling) {
-                    mMotionHelper.flingToSnapTarget(
-                            vel.x, vel.y, mMovementBounds,
+                    mMotionHelper.flingToSnapTarget(vel.x, vel.y,
                             PipTouchHandler.this::updateDismissFraction /* updateAction */,
                             endAction /* endAction */);
                 } else {
-                    mMotionHelper.animateToClosestSnapTarget(mMovementBounds);
+                    mMotionHelper.animateToClosestSnapTarget();
                 }
             } else if (mIsMinimized) {
                 // This was a tap, so no longer minimized
-                mMotionHelper.animateToClosestSnapTarget(mMovementBounds);
+                mMotionHelper.animateToClosestSnapTarget();
                 setMinimizedStateInternal(false);
             } else if (mTouchState.isDoubleTap()) {
                 // Expand to fullscreen if this is a double tap
@@ -781,6 +793,7 @@
                 : mNormalMovementBounds;
         mPipBoundsHandler.setMinEdgeSize(
                 isMenuExpanded ? mExpandedShortestEdgeSize : 0);
+        mMotionHelper.setCurrentMovementBounds(mMovementBounds);
     }
 
     /**
@@ -792,16 +805,6 @@
     }
 
     /**
-     * Resets some states related to the touch handling.
-     */
-    private void cleanUp() {
-        if (mIsMinimized) {
-            setMinimizedStateInternal(false);
-        }
-        cleanUpDismissTarget();
-    }
-
-    /**
      * @return whether the menu will resize as a part of showing the full menu.
      */
     private boolean willResizeMenu() {
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/dagger/PipModule.java b/packages/SystemUI/src/com/android/systemui/pip/phone/dagger/PipModule.java
new file mode 100644
index 0000000..c8b6982
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/dagger/PipModule.java
@@ -0,0 +1,34 @@
+/*
+ * 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.pip.phone.dagger;
+
+import com.android.systemui.pip.BasePipManager;
+import com.android.systemui.pip.phone.PipManager;
+
+import dagger.Binds;
+import dagger.Module;
+
+/**
+ * Dagger Module for Phone PIP.
+ */
+@Module
+public abstract class PipModule {
+
+    /** Binds PipManager as the default BasePipManager. */
+    @Binds
+    public abstract BasePipManager providePipManager(PipManager pipManager);
+}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipControlsView.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipControlsView.java
index a40b72b..9c175bc 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipControlsView.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipControlsView.java
@@ -16,286 +16,38 @@
 
 package com.android.systemui.pip.tv;
 
-import android.app.PendingIntent.CanceledException;
-import android.app.RemoteAction;
 import android.content.Context;
-import android.graphics.Color;
-import android.media.session.MediaController;
-import android.media.session.PlaybackState;
-import android.os.Handler;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
-import android.view.View;
 import android.widget.LinearLayout;
 
 import com.android.systemui.R;
 
-import java.util.ArrayList;
-import java.util.List;
-
 
 /**
  * A view containing PIP controls including fullscreen, close, and media controls.
  */
 public class PipControlsView extends LinearLayout {
 
-    private static final String TAG = PipControlsView.class.getSimpleName();
-
-    private static final float DISABLED_ACTION_ALPHA = 0.54f;
-
-    /**
-     * An interface to listen user action.
-     */
-    public abstract static interface Listener {
-        /**
-         * Called when an user clicks close PIP button.
-         */
-        public abstract void onClosed();
-    };
-
-    private MediaController mMediaController;
-
-    private final PipManager mPipManager = PipManager.getInstance();
-    private final LayoutInflater mLayoutInflater;
-    private final Handler mHandler;
-    private Listener mListener;
-
-    private PipControlButtonView mFullButtonView;
-    private PipControlButtonView mCloseButtonView;
-    private PipControlButtonView mPlayPauseButtonView;
-    private ArrayList<PipControlButtonView> mCustomButtonViews = new ArrayList<>();
-    private List<RemoteAction> mCustomActions = new ArrayList<>();
-
-    private PipControlButtonView mFocusedChild;
-
-    private MediaController.Callback mMediaControllerCallback = new MediaController.Callback() {
-        @Override
-        public void onPlaybackStateChanged(PlaybackState state) {
-            updateUserActions();
-        }
-    };
-
-    private final PipManager.MediaListener mPipMediaListener = new PipManager.MediaListener() {
-        @Override
-        public void onMediaControllerChanged() {
-            updateMediaController();
-        }
-    };
-
-    private final OnFocusChangeListener mFocusChangeListener = new OnFocusChangeListener() {
-        @Override
-        public void onFocusChange(View view, boolean hasFocus) {
-            if (hasFocus) {
-                mFocusedChild = (PipControlButtonView) view;
-            } else if (mFocusedChild == view) {
-                mFocusedChild = null;
-            }
-        }
-    };
-
-    public PipControlsView(Context context) {
-        this(context, null, 0, 0);
-    }
-
-    public PipControlsView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0, 0);
-    }
-
-    public PipControlsView(Context context, AttributeSet attrs, int defStyleAttr) {
-        this(context, attrs, defStyleAttr, 0);
-    }
-
     public PipControlsView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
         super(context, attrs, defStyleAttr, defStyleRes);
-        mLayoutInflater = (LayoutInflater) getContext()
-                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        mLayoutInflater.inflate(R.layout.tv_pip_controls, this);
-        mHandler = new Handler();
-
+        LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(
+                Context.LAYOUT_INFLATER_SERVICE);
+        layoutInflater.inflate(R.layout.tv_pip_controls, this);
         setOrientation(LinearLayout.HORIZONTAL);
         setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
     }
 
-    @Override
-    public void onFinishInflate() {
-        super.onFinishInflate();
-
-        mFullButtonView = findViewById(R.id.full_button);
-        mFullButtonView.setOnFocusChangeListener(mFocusChangeListener);
-        mFullButtonView.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mPipManager.movePipToFullscreen();
-            }
-        });
-
-        mCloseButtonView = findViewById(R.id.close_button);
-        mCloseButtonView.setOnFocusChangeListener(mFocusChangeListener);
-        mCloseButtonView.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mPipManager.closePip();
-                if (mListener != null) {
-                    mListener.onClosed();
-                }
-            }
-        });
-
-        mPlayPauseButtonView = findViewById(R.id.play_pause_button);
-        mPlayPauseButtonView.setOnFocusChangeListener(mFocusChangeListener);
-        mPlayPauseButtonView.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                if (mMediaController == null || mMediaController.getPlaybackState() == null) {
-                    return;
-                }
-                long actions = mMediaController.getPlaybackState().getActions();
-                int state = mMediaController.getPlaybackState().getState();
-                if (mPipManager.getPlaybackState() == PipManager.PLAYBACK_STATE_PAUSED) {
-                    mMediaController.getTransportControls().play();
-                } else if (mPipManager.getPlaybackState() == PipManager.PLAYBACK_STATE_PLAYING) {
-                    mMediaController.getTransportControls().pause();
-                }
-                // View will be updated later in {@link mMediaControllerCallback}
-            }
-        });
+    PipControlButtonView getFullButtonView() {
+        return findViewById(R.id.full_button);
     }
 
-    @Override
-    public void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        updateMediaController();
-        mPipManager.addMediaListener(mPipMediaListener);
+    PipControlButtonView getCloseButtonView() {
+        return findViewById(R.id.close_button);
     }
 
-    @Override
-    public void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        mPipManager.removeMediaListener(mPipMediaListener);
-        if (mMediaController != null) {
-            mMediaController.unregisterCallback(mMediaControllerCallback);
-        }
-    }
-
-    private void updateMediaController() {
-        MediaController newController = mPipManager.getMediaController();
-        if (mMediaController == newController) {
-            return;
-        }
-        if (mMediaController != null) {
-            mMediaController.unregisterCallback(mMediaControllerCallback);
-        }
-        mMediaController = newController;
-        if (mMediaController != null) {
-            mMediaController.registerCallback(mMediaControllerCallback);
-        }
-        updateUserActions();
-    }
-
-    /**
-     * Updates the actions for the PIP. If there are no custom actions, then the media session
-     * actions are shown.
-     */
-    private void updateUserActions() {
-        if (!mCustomActions.isEmpty()) {
-            // Ensure we have as many buttons as actions
-            while (mCustomButtonViews.size() < mCustomActions.size()) {
-                PipControlButtonView buttonView = (PipControlButtonView) mLayoutInflater.inflate(
-                        R.layout.tv_pip_custom_control, this, false);
-                addView(buttonView);
-                mCustomButtonViews.add(buttonView);
-            }
-
-            // Update the visibility of all views
-            for (int i = 0; i < mCustomButtonViews.size(); i++) {
-                mCustomButtonViews.get(i).setVisibility(i < mCustomActions.size()
-                        ? View.VISIBLE
-                        : View.GONE);
-            }
-
-            // Update the state and visibility of the action buttons, and hide the rest
-            for (int i = 0; i < mCustomActions.size(); i++) {
-                final RemoteAction action = mCustomActions.get(i);
-                PipControlButtonView actionView = mCustomButtonViews.get(i);
-
-                // TODO: Check if the action drawable has changed before we reload it
-                action.getIcon().loadDrawableAsync(getContext(), d -> {
-                    d.setTint(Color.WHITE);
-                    actionView.setImageDrawable(d);
-                }, mHandler);
-                actionView.setText(action.getContentDescription());
-                if (action.isEnabled()) {
-                    actionView.setOnClickListener(v -> {
-                        try {
-                            action.getActionIntent().send();
-                        } catch (CanceledException e) {
-                            Log.w(TAG, "Failed to send action", e);
-                        }
-                    });
-                }
-                actionView.setEnabled(action.isEnabled());
-                actionView.setAlpha(action.isEnabled() ? 1f : DISABLED_ACTION_ALPHA);
-            }
-
-            // Hide the media session buttons
-            mPlayPauseButtonView.setVisibility(View.GONE);
-        } else {
-            int state = mPipManager.getPlaybackState();
-            if (state == PipManager.PLAYBACK_STATE_UNAVAILABLE) {
-                mPlayPauseButtonView.setVisibility(View.GONE);
-            } else {
-                mPlayPauseButtonView.setVisibility(View.VISIBLE);
-                if (state == PipManager.PLAYBACK_STATE_PLAYING) {
-                    mPlayPauseButtonView.setImageResource(R.drawable.ic_pause_white);
-                    mPlayPauseButtonView.setText(R.string.pip_pause);
-                } else {
-                    mPlayPauseButtonView.setImageResource(R.drawable.ic_play_arrow_white);
-                    mPlayPauseButtonView.setText(R.string.pip_play);
-                }
-            }
-
-            // Hide all the custom action buttons
-            for (int i = 0; i < mCustomButtonViews.size(); i++) {
-                mCustomButtonViews.get(i).setVisibility(View.GONE);
-            }
-        }
-    }
-
-    /**
-     * Resets to initial state.
-     */
-    public void reset() {
-        mFullButtonView.reset();
-        mCloseButtonView.reset();
-        mPlayPauseButtonView.reset();
-        mFullButtonView.requestFocus();
-        for (int i = 0; i < mCustomButtonViews.size(); i++) {
-            mCustomButtonViews.get(i).reset();
-        }
-    }
-
-    /**
-     * Sets the {@link Listener} to listen user actions.
-     */
-    public void setListener(Listener listener) {
-        mListener = listener;
-    }
-
-    /**
-     * Updates the set of activity-defined actions.
-     */
-    public void setActions(List<RemoteAction> actions) {
-        mCustomActions.clear();
-        mCustomActions.addAll(actions);
-        updateUserActions();
-    }
-
-    /**
-     * Returns the focused control button view to animate focused button.
-     */
-    PipControlButtonView getFocusedButton() {
-        return mFocusedChild;
+    PipControlButtonView getPlayPauseButtonView() {
+        return findViewById(R.id.play_pause_button);
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipControlsViewController.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipControlsViewController.java
new file mode 100644
index 0000000..1fe531b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipControlsViewController.java
@@ -0,0 +1,251 @@
+/*
+ * 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.pip.tv;
+
+import android.app.PendingIntent;
+import android.app.RemoteAction;
+import android.graphics.Color;
+import android.media.session.MediaController;
+import android.media.session.PlaybackState;
+import android.os.Handler;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import com.android.systemui.R;
+import com.android.systemui.dagger.qualifiers.Main;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
+
+/**
+ * Controller for {@link PipControlsView}.
+ */
+public class PipControlsViewController {
+    private static final String TAG = PipControlsViewController.class.getSimpleName();
+
+    private static final float DISABLED_ACTION_ALPHA = 0.54f;
+
+    private final PipControlsView mView;
+    private final PipManager mPipManager;
+    private final LayoutInflater mLayoutInflater;
+    private final Handler mHandler;
+    private final PipControlButtonView mPlayPauseButtonView;
+    private MediaController mMediaController;
+    private PipControlButtonView mFocusedChild;
+    private Listener mListener;
+    private ArrayList<PipControlButtonView> mCustomButtonViews = new ArrayList<>();
+    private List<RemoteAction> mCustomActions = new ArrayList<>();
+
+    public PipControlsView getView() {
+        return mView;
+    }
+
+    /**
+     * An interface to listen user action.
+     */
+    public interface Listener {
+        /**
+         * Called when a user clicks close PIP button.
+         */
+        void onClosed();
+    }
+
+    private View.OnAttachStateChangeListener
+            mOnAttachStateChangeListener =
+            new View.OnAttachStateChangeListener() {
+                @Override
+                public void onViewAttachedToWindow(View v) {
+                    updateMediaController();
+                    mPipManager.addMediaListener(mPipMediaListener);
+                }
+
+                @Override
+                public void onViewDetachedFromWindow(View v) {
+                    mPipManager.removeMediaListener(mPipMediaListener);
+                }
+            };
+
+    private MediaController.Callback mMediaControllerCallback = new MediaController.Callback() {
+        @Override
+        public void onPlaybackStateChanged(PlaybackState state) {
+            updateUserActions();
+        }
+    };
+
+    private final PipManager.MediaListener mPipMediaListener = this::updateMediaController;
+
+    private final View.OnFocusChangeListener
+            mFocusChangeListener =
+            new View.OnFocusChangeListener() {
+                @Override
+                public void onFocusChange(View view, boolean hasFocus) {
+                    if (hasFocus) {
+                        mFocusedChild = (PipControlButtonView) view;
+                    } else if (mFocusedChild == view) {
+                        mFocusedChild = null;
+                    }
+                }
+            };
+
+
+    @Inject
+    public PipControlsViewController(PipControlsView view, PipManager pipManager,
+            LayoutInflater layoutInflater, @Main Handler handler) {
+        super();
+        mView = view;
+        mPipManager = pipManager;
+        mLayoutInflater = layoutInflater;
+        mHandler = handler;
+
+        mView.addOnAttachStateChangeListener(mOnAttachStateChangeListener);
+        if (mView.isAttachedToWindow()) {
+            mOnAttachStateChangeListener.onViewAttachedToWindow(mView);
+        }
+
+        View fullButtonView = mView.getFullButtonView();
+        fullButtonView.setOnFocusChangeListener(mFocusChangeListener);
+        fullButtonView.setOnClickListener(v -> mPipManager.movePipToFullscreen());
+
+        View closeButtonView = mView.getCloseButtonView();
+        closeButtonView.setOnFocusChangeListener(mFocusChangeListener);
+        closeButtonView.setOnClickListener(v -> {
+            mPipManager.closePip();
+            if (mListener != null) {
+                mListener.onClosed();
+            }
+        });
+
+
+        mPlayPauseButtonView = mView.getPlayPauseButtonView();
+        mPlayPauseButtonView.setOnFocusChangeListener(mFocusChangeListener);
+        mPlayPauseButtonView.setOnClickListener(v -> {
+            if (mMediaController == null || mMediaController.getPlaybackState() == null) {
+                return;
+            }
+            if (mPipManager.getPlaybackState() == PipManager.PLAYBACK_STATE_PAUSED) {
+                mMediaController.getTransportControls().play();
+            } else if (mPipManager.getPlaybackState() == PipManager.PLAYBACK_STATE_PLAYING) {
+                mMediaController.getTransportControls().pause();
+            }
+            // View will be updated later in {@link mMediaControllerCallback}
+        });
+    }
+
+    private void updateMediaController() {
+        MediaController newController = mPipManager.getMediaController();
+        if (mMediaController == newController) {
+            return;
+        }
+        if (mMediaController != null) {
+            mMediaController.unregisterCallback(mMediaControllerCallback);
+        }
+        mMediaController = newController;
+        if (mMediaController != null) {
+            mMediaController.registerCallback(mMediaControllerCallback);
+        }
+        updateUserActions();
+    }
+
+    /**
+     * Updates the actions for the PIP. If there are no custom actions, then the media session
+     * actions are shown.
+     */
+    private void updateUserActions() {
+        if (!mCustomActions.isEmpty()) {
+            // Ensure we have as many buttons as actions
+            while (mCustomButtonViews.size() < mCustomActions.size()) {
+                PipControlButtonView buttonView = (PipControlButtonView) mLayoutInflater.inflate(
+                        R.layout.tv_pip_custom_control, mView, false);
+                mView.addView(buttonView);
+                mCustomButtonViews.add(buttonView);
+            }
+
+            // Update the visibility of all views
+            for (int i = 0; i < mCustomButtonViews.size(); i++) {
+                mCustomButtonViews.get(i).setVisibility(
+                        i < mCustomActions.size() ? View.VISIBLE : View.GONE);
+            }
+
+            // Update the state and visibility of the action buttons, and hide the rest
+            for (int i = 0; i < mCustomActions.size(); i++) {
+                final RemoteAction action = mCustomActions.get(i);
+                PipControlButtonView actionView = mCustomButtonViews.get(i);
+
+                // TODO: Check if the action drawable has changed before we reload it
+                action.getIcon().loadDrawableAsync(mView.getContext(), d -> {
+                    d.setTint(Color.WHITE);
+                    actionView.setImageDrawable(d);
+                }, mHandler);
+                actionView.setText(action.getContentDescription());
+                if (action.isEnabled()) {
+                    actionView.setOnClickListener(v -> {
+                        try {
+                            action.getActionIntent().send();
+                        } catch (PendingIntent.CanceledException e) {
+                            Log.w(TAG, "Failed to send action", e);
+                        }
+                    });
+                }
+                actionView.setEnabled(action.isEnabled());
+                actionView.setAlpha(action.isEnabled() ? 1f : DISABLED_ACTION_ALPHA);
+            }
+
+            // Hide the media session buttons
+            mPlayPauseButtonView.setVisibility(View.GONE);
+        } else {
+            int state = mPipManager.getPlaybackState();
+            if (state == PipManager.PLAYBACK_STATE_UNAVAILABLE) {
+                mPlayPauseButtonView.setVisibility(View.GONE);
+            } else {
+                mPlayPauseButtonView.setVisibility(View.VISIBLE);
+                if (state == PipManager.PLAYBACK_STATE_PLAYING) {
+                    mPlayPauseButtonView.setImageResource(R.drawable.ic_pause_white);
+                    mPlayPauseButtonView.setText(R.string.pip_pause);
+                } else {
+                    mPlayPauseButtonView.setImageResource(R.drawable.ic_play_arrow_white);
+                    mPlayPauseButtonView.setText(R.string.pip_play);
+                }
+            }
+
+            // Hide all the custom action buttons
+            for (int i = 0; i < mCustomButtonViews.size(); i++) {
+                mCustomButtonViews.get(i).setVisibility(View.GONE);
+            }
+        }
+    }
+
+
+    /**
+     * Sets the {@link Listener} to listen user actions.
+     */
+    public void setListener(Listener listener) {
+        mListener = listener;
+    }
+
+
+    /**
+     * Updates the set of activity-defined actions.
+     */
+    public void setActions(List<RemoteAction> actions) {
+        mCustomActions.clear();
+        mCustomActions.addAll(actions);
+        updateUserActions();
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
index 7532f9f..487c253 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
@@ -55,21 +55,23 @@
 import com.android.systemui.shared.system.PinnedStackListenerForwarder.PinnedStackListener;
 import com.android.systemui.shared.system.TaskStackChangeListener;
 import com.android.systemui.shared.system.WindowManagerWrapper;
-import com.android.systemui.wm.DisplayController;
 
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
 /**
  * Manages the picture-in-picture (PIP) UI and states.
  */
+@Singleton
 public class PipManager implements BasePipManager {
     private static final String TAG = "PipManager";
     static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     private static final String SETTINGS_PACKAGE_AND_CLASS_DELIMITER = "/";
 
-    private static PipManager sPipManager;
     private static List<Pair<String, String>> sSettingsPackageAndClassNamePairList;
 
     /**
@@ -224,13 +226,8 @@
         }
     }
 
-    private PipManager() { }
-
-    /**
-     * Initializes {@link PipManager}.
-     */
-    public void initialize(Context context, BroadcastDispatcher broadcastDispatcher,
-            DisplayController displayController) {
+    @Inject
+    public PipManager(Context context, BroadcastDispatcher broadcastDispatcher) {
         if (mInitialized) {
             return;
         }
@@ -289,7 +286,7 @@
             Log.e(TAG, "Failed to register pinned stack listener", e);
         }
 
-        mPipNotification = new PipNotification(context, broadcastDispatcher);
+        mPipNotification = new PipNotification(context, broadcastDispatcher, this);
     }
 
     private void loadConfigurationsAndApply(Configuration newConfig) {
@@ -739,16 +736,6 @@
         void onMediaControllerChanged();
     }
 
-    /**
-     * Gets an instance of {@link PipManager}.
-     */
-    public static PipManager getInstance() {
-        if (sPipManager == null) {
-            sPipManager = new PipManager();
-        }
-        return sPipManager;
-    }
-
     private void updatePipVisibility(final boolean visible) {
         Dependency.get(UiOffloadThread.class).execute(() -> {
             WindowManagerWrapper.getInstance().setPipVisibility(visible);
diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipMenuActivity.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipMenuActivity.java
index 3a5fa22..f43f8e7 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipMenuActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipMenuActivity.java
@@ -24,8 +24,12 @@
 import android.os.Bundle;
 
 import com.android.systemui.R;
+import com.android.systemui.pip.tv.dagger.TvPipComponent;
 
 import java.util.Collections;
+
+import javax.inject.Inject;
+
 /**
  * Activity to show the PIP menu to control PIP.
  */
@@ -34,12 +38,22 @@
 
     static final String EXTRA_CUSTOM_ACTIONS = "custom_actions";
 
-    private final PipManager mPipManager = PipManager.getInstance();
+    private final TvPipComponent.Builder mPipComponentBuilder;
+    private TvPipComponent mTvPipComponent;
+    private final PipManager mPipManager;
 
     private Animator mFadeInAnimation;
     private Animator mFadeOutAnimation;
-    private PipControlsView mPipControlsView;
     private boolean mRestorePipSizeWhenClose;
+    private PipControlsViewController mPipControlsViewController;
+
+
+    @Inject
+    public PipMenuActivity(TvPipComponent.Builder pipComponentBuilder, PipManager pipManager) {
+        super();
+        mPipComponentBuilder = pipComponentBuilder;
+        mPipManager = pipManager;
+    }
 
     @Override
     protected void onCreate(Bundle bundle) {
@@ -48,16 +62,19 @@
             finish();
         }
         setContentView(R.layout.tv_pip_menu);
+        mTvPipComponent = mPipComponentBuilder.pipControlsView(
+                findViewById(R.id.pip_controls)).build();
+        mPipControlsViewController = mTvPipComponent.getPipControlsViewController();
+
         mPipManager.addListener(this);
 
         mRestorePipSizeWhenClose = true;
-        mPipControlsView = findViewById(R.id.pip_controls);
         mFadeInAnimation = AnimatorInflater.loadAnimator(
                 this, R.anim.tv_pip_menu_fade_in_animation);
-        mFadeInAnimation.setTarget(mPipControlsView);
+        mFadeInAnimation.setTarget(mPipControlsViewController.getView());
         mFadeOutAnimation = AnimatorInflater.loadAnimator(
                 this, R.anim.tv_pip_menu_fade_out_animation);
-        mFadeOutAnimation.setTarget(mPipControlsView);
+        mFadeOutAnimation.setTarget(mPipControlsViewController.getView());
 
         onPipMenuActionsChanged(getIntent().getParcelableExtra(EXTRA_CUSTOM_ACTIONS));
     }
@@ -114,7 +131,8 @@
     @Override
     public void onPipMenuActionsChanged(ParceledListSlice actions) {
         boolean hasCustomActions = actions != null && !actions.getList().isEmpty();
-        mPipControlsView.setActions(hasCustomActions ? actions.getList() : Collections.EMPTY_LIST);
+        mPipControlsViewController.setActions(
+                hasCustomActions ? actions.getList() : Collections.EMPTY_LIST);
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipNotification.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipNotification.java
index ca15131..b01c2f4 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipNotification.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipNotification.java
@@ -50,7 +50,7 @@
     private static final String ACTION_MENU = "PipNotification.menu";
     private static final String ACTION_CLOSE = "PipNotification.close";
 
-    private final PipManager mPipManager = PipManager.getInstance();
+    private final PipManager mPipManager;
 
     private final NotificationManager mNotificationManager;
     private final Notification.Builder mNotificationBuilder;
@@ -144,7 +144,8 @@
         }
     };
 
-    public PipNotification(Context context, BroadcastDispatcher broadcastDispatcher) {
+    public PipNotification(Context context, BroadcastDispatcher broadcastDispatcher,
+            PipManager pipManager) {
         mNotificationManager = (NotificationManager) context.getSystemService(
                 Context.NOTIFICATION_SERVICE);
 
@@ -156,6 +157,7 @@
                         .setContentIntent(createPendingIntent(context, ACTION_MENU))
                         .setDeleteIntent(createPendingIntent(context, ACTION_CLOSE)));
 
+        mPipManager = pipManager;
         mPipManager.addListener(mPipListener);
         mPipManager.addMediaListener(mPipMediaListener);
 
diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/dagger/PipModule.java b/packages/SystemUI/src/com/android/systemui/pip/tv/dagger/PipModule.java
new file mode 100644
index 0000000..52b38a9
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/dagger/PipModule.java
@@ -0,0 +1,46 @@
+/*
+ * 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.pip.tv.dagger;
+
+import android.app.Activity;
+
+import com.android.systemui.pip.BasePipManager;
+import com.android.systemui.pip.tv.PipManager;
+import com.android.systemui.pip.tv.PipMenuActivity;
+
+import dagger.Binds;
+import dagger.Module;
+import dagger.multibindings.ClassKey;
+import dagger.multibindings.IntoMap;
+
+/**
+ * Dagger module for TV Pip.
+ */
+@Module(subcomponents = {TvPipComponent.class})
+public abstract class PipModule {
+
+    /** Binds PipManager as the default BasePipManager. */
+    @Binds
+    public abstract BasePipManager providePipManager(PipManager pipManager);
+
+
+    /** Inject into PipMenuActivity. */
+    @Binds
+    @IntoMap
+    @ClassKey(PipMenuActivity.class)
+    public abstract Activity providePipMenuActivity(PipMenuActivity activity);
+}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/dagger/TvPipComponent.java b/packages/SystemUI/src/com/android/systemui/pip/tv/dagger/TvPipComponent.java
new file mode 100644
index 0000000..8e8b7f3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/dagger/TvPipComponent.java
@@ -0,0 +1,61 @@
+/*
+ * 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.pip.tv.dagger;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import com.android.systemui.pip.tv.PipControlsView;
+import com.android.systemui.pip.tv.PipControlsViewController;
+import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Scope;
+
+import dagger.BindsInstance;
+import dagger.Subcomponent;
+
+/**
+ * Component for injecting into Pip related classes.
+ */
+@Subcomponent
+public interface TvPipComponent {
+    /**
+     * Builder for {@link StatusBarComponent}.
+     */
+    @Subcomponent.Builder
+    interface Builder {
+        @BindsInstance
+        TvPipComponent.Builder pipControlsView(PipControlsView pipControlsView);
+        TvPipComponent build();
+    }
+
+    /**
+     * Scope annotation for singleton items within the PipComponent.
+     */
+    @Documented
+    @Retention(RUNTIME)
+    @Scope
+    @interface PipScope {}
+
+    /**
+     * Creates a StatusBarWindowViewController.
+     */
+    @TvPipComponent.PipScope
+    PipControlsViewController getPipControlsViewController();
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSCarrier.java b/packages/SystemUI/src/com/android/systemui/qs/QSCarrier.java
deleted file mode 100644
index 5a9c360..0000000
--- a/packages/SystemUI/src/com/android/systemui/qs/QSCarrier.java
+++ /dev/null
@@ -1,120 +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.qs;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.settingslib.Utils;
-import com.android.settingslib.graph.SignalDrawable;
-import com.android.systemui.DualToneHandler;
-import com.android.systemui.R;
-
-import java.util.Objects;
-
-public class QSCarrier extends LinearLayout {
-
-    private View mMobileGroup;
-    private TextView mCarrierText;
-    private ImageView mMobileSignal;
-    private ImageView mMobileRoaming;
-    private DualToneHandler mDualToneHandler;
-    private ColorStateList mColorForegroundStateList;
-    private float mColorForegroundIntensity;
-    private QSCarrierGroupController.CellSignalState mLastSignalState;
-
-    public QSCarrier(Context context) {
-        super(context);
-    }
-
-    public QSCarrier(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public QSCarrier(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    public QSCarrier(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
-        super(context, attrs, defStyleAttr, defStyleRes);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mDualToneHandler = new DualToneHandler(getContext());
-        mMobileGroup = findViewById(R.id.mobile_combo);
-        mMobileSignal = findViewById(R.id.mobile_signal);
-        mMobileRoaming = findViewById(R.id.mobile_roaming);
-        mCarrierText = findViewById(R.id.qs_carrier_text);
-
-        mMobileSignal.setImageDrawable(new SignalDrawable(mContext));
-
-        int colorForeground = Utils.getColorAttrDefaultColor(mContext,
-                android.R.attr.colorForeground);
-        mColorForegroundStateList = ColorStateList.valueOf(colorForeground);
-        mColorForegroundIntensity = QuickStatusBarHeader.getColorIntensity(colorForeground);
-    }
-
-    public void updateState(QSCarrierGroupController.CellSignalState state) {
-        if (Objects.equals(state, mLastSignalState)) return;
-        mLastSignalState = state;
-        mMobileGroup.setVisibility(state.visible ? View.VISIBLE : View.GONE);
-        if (state.visible) {
-            mMobileRoaming.setVisibility(state.roaming ? View.VISIBLE : View.GONE);
-            ColorStateList colorStateList = ColorStateList.valueOf(
-                    mDualToneHandler.getSingleColor(mColorForegroundIntensity));
-            mMobileRoaming.setImageTintList(colorStateList);
-            mMobileSignal.setImageTintList(colorStateList);
-            mMobileSignal.setImageLevel(state.mobileSignalIconId);
-
-            StringBuilder contentDescription = new StringBuilder();
-            if (state.contentDescription != null) {
-                contentDescription.append(state.contentDescription).append(", ");
-            }
-            if (state.roaming) {
-                contentDescription
-                        .append(mContext.getString(R.string.data_connection_roaming))
-                        .append(", ");
-            }
-            // TODO: show mobile data off/no internet text for 5 seconds before carrier text
-            if (hasValidTypeContentDescription(state.typeContentDescription)) {
-                contentDescription.append(state.typeContentDescription);
-            }
-            mMobileSignal.setContentDescription(contentDescription);
-        }
-    }
-
-    private boolean hasValidTypeContentDescription(String typeContentDescription) {
-        return TextUtils.equals(typeContentDescription,
-                mContext.getString(R.string.data_connection_no_internet))
-                || TextUtils.equals(typeContentDescription,
-                mContext.getString(R.string.cell_data_off_content_description))
-                || TextUtils.equals(typeContentDescription,
-                mContext.getString(R.string.not_default_data_content_description));
-    }
-
-    public void setCarrierText(CharSequence text) {
-        mCarrierText.setText(text);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSCarrierGroup.java b/packages/SystemUI/src/com/android/systemui/qs/QSCarrierGroup.java
deleted file mode 100644
index 346c75d..0000000
--- a/packages/SystemUI/src/com/android/systemui/qs/QSCarrierGroup.java
+++ /dev/null
@@ -1,58 +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.qs;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.systemui.R;
-
-/**
- * Displays Carrier name and network status in QS
- */
-public class QSCarrierGroup extends LinearLayout {
-    public QSCarrierGroup(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    TextView getNoSimTextView() {
-        return findViewById(R.id.no_carrier_text);
-    }
-
-    QSCarrier getCarrier1View() {
-        return findViewById(R.id.carrier1);
-    }
-
-    QSCarrier getCarrier2View() {
-        return findViewById(R.id.carrier2);
-    }
-
-    QSCarrier getCarrier3View() {
-        return findViewById(R.id.carrier3);
-    }
-
-    View getCarrierDivider1() {
-        return findViewById(R.id.qs_carrier_divider1);
-    }
-
-    View getCarrierDivider2() {
-        return findViewById(R.id.qs_carrier_divider2);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSCarrierGroupController.java b/packages/SystemUI/src/com/android/systemui/qs/QSCarrierGroupController.java
deleted file mode 100644
index 86fccd7..0000000
--- a/packages/SystemUI/src/com/android/systemui/qs/QSCarrierGroupController.java
+++ /dev/null
@@ -1,354 +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.qs;
-
-import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_YES;
-
-import android.annotation.MainThread;
-import android.content.Intent;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.provider.Settings;
-import android.telephony.SubscriptionManager;
-import android.util.Log;
-import android.view.View;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.annotation.VisibleForTesting;
-
-import com.android.keyguard.CarrierTextController;
-import com.android.systemui.dagger.qualifiers.Background;
-import com.android.systemui.dagger.qualifiers.Main;
-import com.android.systemui.plugins.ActivityStarter;
-import com.android.systemui.statusbar.policy.NetworkController;
-
-import java.util.Objects;
-import java.util.function.Consumer;
-
-import javax.inject.Inject;
-
-public class QSCarrierGroupController {
-    private static final String TAG = "QSCarrierGroup";
-
-    /**
-     * Support up to 3 slots which is what's supported by {@link TelephonyManager#getPhoneCount}
-     */
-    private static final int SIM_SLOTS = 3;
-
-    private final ActivityStarter mActivityStarter;
-    private final Handler mBgHandler;
-    private final NetworkController mNetworkController;
-    private final CarrierTextController mCarrierTextController;
-    private final TextView mNoSimTextView;
-    private final H mMainHandler;
-    private final Callback mCallback;
-    private boolean mListening;
-    private final CellSignalState[] mInfos =
-            new CellSignalState[SIM_SLOTS];
-    private View[] mCarrierDividers = new View[SIM_SLOTS - 1];
-    private QSCarrier[] mCarrierGroups = new QSCarrier[SIM_SLOTS];
-
-    private final NetworkController.SignalCallback mSignalCallback =
-            new NetworkController.SignalCallback() {
-                @Override
-                public void setMobileDataIndicators(NetworkController.IconState statusIcon,
-                        NetworkController.IconState qsIcon, int statusType, int qsType,
-                        boolean activityIn, boolean activityOut, String typeContentDescription,
-                        String description, boolean isWide, int subId, boolean roaming) {
-                    int slotIndex = getSlotIndex(subId);
-                    if (slotIndex >= SIM_SLOTS) {
-                        Log.w(TAG, "setMobileDataIndicators - slot: " + slotIndex);
-                        return;
-                    }
-                    if (slotIndex == SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
-                        Log.e(TAG, "Invalid SIM slot index for subscription: " + subId);
-                        return;
-                    }
-                    mInfos[slotIndex].visible = statusIcon.visible;
-                    mInfos[slotIndex].mobileSignalIconId = statusIcon.icon;
-                    mInfos[slotIndex].contentDescription = statusIcon.contentDescription;
-                    mInfos[slotIndex].typeContentDescription = typeContentDescription;
-                    mInfos[slotIndex].roaming = roaming;
-                    mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
-                }
-
-                @Override
-                public void setNoSims(boolean hasNoSims, boolean simDetected) {
-                    if (hasNoSims) {
-                        for (int i = 0; i < SIM_SLOTS; i++) {
-                            mInfos[i].visible = false;
-                        }
-                    }
-                    mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
-                }
-            };
-
-    private static class Callback implements CarrierTextController.CarrierTextCallback {
-        private H mHandler;
-
-        Callback(H handler) {
-            mHandler = handler;
-        }
-
-        @Override
-        public void updateCarrierInfo(CarrierTextController.CarrierTextCallbackInfo info) {
-            mHandler.obtainMessage(H.MSG_UPDATE_CARRIER_INFO, info).sendToTarget();
-        }
-    }
-
-    private QSCarrierGroupController(QSCarrierGroup view, ActivityStarter activityStarter,
-            @Background Handler bgHandler, @Main Looper mainLooper,
-            NetworkController networkController,
-            CarrierTextController.Builder carrierTextControllerBuilder) {
-        mActivityStarter = activityStarter;
-        mBgHandler = bgHandler;
-        mNetworkController = networkController;
-        mCarrierTextController = carrierTextControllerBuilder
-                .setShowAirplaneMode(false)
-                .setShowMissingSim(false)
-                .build();
-
-        View.OnClickListener onClickListener = v -> {
-            if (!v.isVisibleToUser()) {
-                return;
-            }
-            mActivityStarter.postStartActivityDismissingKeyguard(
-                    new Intent(Settings.ACTION_WIRELESS_SETTINGS), 0);
-        };
-        view.setOnClickListener(onClickListener);
-        mNoSimTextView = view.getNoSimTextView();
-        mNoSimTextView.setOnClickListener(onClickListener);
-        mMainHandler = new H(mainLooper, this::handleUpdateCarrierInfo, this::handleUpdateState);
-        mCallback = new Callback(mMainHandler);
-
-
-        mCarrierGroups[0] = view.getCarrier1View();
-        mCarrierGroups[1] = view.getCarrier2View();
-        mCarrierGroups[2] = view.getCarrier3View();
-
-        mCarrierDividers[0] = view.getCarrierDivider1();
-        mCarrierDividers[1] = view.getCarrierDivider2();
-
-        for (int i = 0; i < SIM_SLOTS; i++) {
-            mInfos[i] = new CellSignalState();
-            mCarrierGroups[i].setOnClickListener(onClickListener);
-        }
-        view.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
-
-        view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
-            @Override
-            public void onViewAttachedToWindow(View v) {
-            }
-
-            @Override
-            public void onViewDetachedFromWindow(View v) {
-                setListening(false);
-            }
-        });
-    }
-
-    @VisibleForTesting
-    protected int getSlotIndex(int subscriptionId) {
-        return SubscriptionManager.getSlotIndex(subscriptionId);
-    }
-
-    public void setListening(boolean listening) {
-        if (listening == mListening) {
-            return;
-        }
-        mListening = listening;
-
-        mBgHandler.post(this::updateListeners);
-    }
-
-    private void updateListeners() {
-        if (mListening) {
-            if (mNetworkController.hasVoiceCallingFeature()) {
-                mNetworkController.addCallback(mSignalCallback);
-            }
-            mCarrierTextController.setListening(mCallback);
-        } else {
-            mNetworkController.removeCallback(mSignalCallback);
-            mCarrierTextController.setListening(null);
-        }
-    }
-
-
-    @MainThread
-    private void handleUpdateState() {
-        if (!mMainHandler.getLooper().isCurrentThread()) {
-            mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
-            return;
-        }
-
-        for (int i = 0; i < SIM_SLOTS; i++) {
-            mCarrierGroups[i].updateState(mInfos[i]);
-        }
-
-        mCarrierDividers[0].setVisibility(
-                mInfos[0].visible && mInfos[1].visible ? View.VISIBLE : View.GONE);
-        // This tackles the case of slots 2 being available as well as at least one other.
-        // In that case we show the second divider. Note that if both dividers are visible, it means
-        // all three slots are in use, and that is correct.
-        mCarrierDividers[1].setVisibility(
-                (mInfos[1].visible && mInfos[2].visible)
-                        || (mInfos[0].visible && mInfos[2].visible) ? View.VISIBLE : View.GONE);
-    }
-
-    @MainThread
-    private void handleUpdateCarrierInfo(CarrierTextController.CarrierTextCallbackInfo info) {
-        if (!mMainHandler.getLooper().isCurrentThread()) {
-            mMainHandler.obtainMessage(H.MSG_UPDATE_CARRIER_INFO, info).sendToTarget();
-            return;
-        }
-
-        mNoSimTextView.setVisibility(View.GONE);
-        if (!info.airplaneMode && info.anySimReady) {
-            boolean[] slotSeen = new boolean[SIM_SLOTS];
-            if (info.listOfCarriers.length == info.subscriptionIds.length) {
-                for (int i = 0; i < SIM_SLOTS && i < info.listOfCarriers.length; i++) {
-                    int slot = getSlotIndex(info.subscriptionIds[i]);
-                    if (slot >= SIM_SLOTS) {
-                        Log.w(TAG, "updateInfoCarrier - slot: " + slot);
-                        continue;
-                    }
-                    if (slot == SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
-                        Log.e(TAG,
-                                "Invalid SIM slot index for subscription: "
-                                        + info.subscriptionIds[i]);
-                        continue;
-                    }
-                    mInfos[slot].visible = true;
-                    slotSeen[slot] = true;
-                    mCarrierGroups[slot].setCarrierText(
-                            info.listOfCarriers[i].toString().trim());
-                    mCarrierGroups[slot].setVisibility(View.VISIBLE);
-                }
-                for (int i = 0; i < SIM_SLOTS; i++) {
-                    if (!slotSeen[i]) {
-                        mInfos[i].visible = false;
-                        mCarrierGroups[i].setVisibility(View.GONE);
-                    }
-                }
-            } else {
-                Log.e(TAG, "Carrier information arrays not of same length");
-            }
-        } else {
-            // No sims or airplane mode (but not WFC). Do not show QSCarrierGroup, instead just show
-            // info.carrierText in a different view.
-            for (int i = 0; i < SIM_SLOTS; i++) {
-                mInfos[i].visible = false;
-                mCarrierGroups[i].setCarrierText("");
-                mCarrierGroups[i].setVisibility(View.GONE);
-            }
-            mNoSimTextView.setText(info.carrierText);
-            mNoSimTextView.setVisibility(View.VISIBLE);
-        }
-        handleUpdateState(); // handleUpdateCarrierInfo is always called from main thread.
-    }
-
-    private static class H extends Handler {
-        private Consumer<CarrierTextController.CarrierTextCallbackInfo> mUpdateCarrierInfo;
-        private Runnable mUpdateState;
-        static final int MSG_UPDATE_CARRIER_INFO = 0;
-        static final int MSG_UPDATE_STATE = 1;
-
-        H(Looper looper,
-                Consumer<CarrierTextController.CarrierTextCallbackInfo> updateCarrierInfo,
-                Runnable updateState) {
-            super(looper);
-            mUpdateCarrierInfo = updateCarrierInfo;
-            mUpdateState = updateState;
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MSG_UPDATE_CARRIER_INFO:
-                    mUpdateCarrierInfo.accept(
-                            (CarrierTextController.CarrierTextCallbackInfo) msg.obj);
-                    break;
-                case MSG_UPDATE_STATE:
-                    mUpdateState.run();
-                    break;
-                default:
-                    super.handleMessage(msg);
-            }
-        }
-    }
-
-    static final class CellSignalState {
-        boolean visible;
-        int mobileSignalIconId;
-        String contentDescription;
-        String typeContentDescription;
-        boolean roaming;
-
-        @Override
-        public boolean equals(@Nullable Object obj) {
-            if (this == obj) return true;
-            if (!(obj instanceof CellSignalState)) return false;
-            CellSignalState other = (CellSignalState) obj;
-            return this.visible == other.visible
-                    && this.mobileSignalIconId == other.mobileSignalIconId
-                    && Objects.equals(this.contentDescription, other.contentDescription)
-                    && Objects.equals(this.typeContentDescription, other.typeContentDescription)
-                    && this.roaming == other.roaming;
-        }
-
-        @Override
-        public int hashCode() {
-            return Objects.hash(visible,
-                    mobileSignalIconId,
-                    contentDescription,
-                    typeContentDescription,
-                    roaming);
-        }
-    }
-
-    public static class Builder {
-        private QSCarrierGroup mView;
-        private final ActivityStarter mActivityStarter;
-        private final Handler mHandler;
-        private final Looper mLooper;
-        private final NetworkController mNetworkController;
-        private final CarrierTextController.Builder mCarrierTextControllerBuilder;
-
-        @Inject
-        public Builder(ActivityStarter activityStarter, @Background Handler handler,
-                @Main Looper looper, NetworkController networkController,
-                CarrierTextController.Builder carrierTextControllerBuilder) {
-            mActivityStarter = activityStarter;
-            mHandler = handler;
-            mLooper = looper;
-            mNetworkController = networkController;
-            mCarrierTextControllerBuilder = carrierTextControllerBuilder;
-        }
-
-        Builder setQSCarrierGroup(QSCarrierGroup view) {
-            mView = view;
-            return this;
-        }
-
-        public QSCarrierGroupController build() {
-            return new QSCarrierGroupController(mView, mActivityStarter, mHandler, mLooper,
-                    mNetworkController, mCarrierTextControllerBuilder);
-        }
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
index 019cb14..17aaff1 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
@@ -25,10 +25,13 @@
 import android.content.res.Configuration;
 import android.graphics.drawable.Animatable;
 import android.util.AttributeSet;
+import android.util.Pair;
 import android.util.SparseArray;
+import android.view.DisplayCutout;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewStub;
+import android.view.WindowInsets;
 import android.view.accessibility.AccessibilityEvent;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
@@ -42,6 +45,7 @@
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.qs.DetailAdapter;
 import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.phone.StatusBarWindowView;
 
 public class QSDetail extends LinearLayout {
 
@@ -274,6 +278,32 @@
         }
     }
 
+    @Override
+    public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+        DisplayCutout cutout = insets.getDisplayCutout();
+
+        Pair<Integer, Integer> padding = StatusBarWindowView.cornerCutoutMargins(
+                cutout, getDisplay());
+
+        if (padding == null) {
+            mQsDetailHeader.setPaddingRelative(
+                    getResources().getDimensionPixelSize(R.dimen.qs_detail_header_padding),
+                    getPaddingTop(),
+                    getResources().getDimensionPixelSize(R.dimen.qs_detail_header_padding),
+                    getPaddingBottom()
+            );
+        } else {
+            mQsDetailHeader.setPadding(
+                    padding.first,
+                    getPaddingTop(),
+                    padding.second,
+                    getPaddingBottom()
+            );
+        }
+
+        return super.onApplyWindowInsets(insets);
+    }
+
     private void handleToggleStateChanged(boolean state, boolean toggleEnabled) {
         mSwitchState = state;
         if (mAnimatingOpen) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java
index 84fa700..3cf0718 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java
@@ -18,6 +18,7 @@
 
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.qs.external.TileServices;
+import com.android.systemui.qs.logging.QSLogger;
 
 import java.util.Collection;
 
@@ -27,6 +28,7 @@
     void forceCollapsePanels();
     void openPanels();
     Context getContext();
+    QSLogger getQSLogger();
     Collection<QSTile> getTiles();
     void addCallback(Callback callback);
     void removeCallback(Callback callback);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSMediaPlayer.java b/packages/SystemUI/src/com/android/systemui/qs/QSMediaPlayer.java
index 6c69718..011893d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSMediaPlayer.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSMediaPlayer.java
@@ -244,7 +244,10 @@
         ActivityStarter mActivityStarter = Dependency.get(ActivityStarter.class);
         mSeamless.setOnClickListener(v -> {
             final Intent intent = new Intent()
-                    .setAction(MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT);
+                    .setAction(MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT)
+                    .putExtra(MediaOutputSliceConstants.EXTRA_PACKAGE_NAME,
+                        mController.getPackageName())
+                    .putExtra(MediaOutputSliceConstants.KEY_MEDIA_SESSION_TOKEN, token);
             mActivityStarter.startActivity(intent, false, true /* dismissShade */,
                     Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
         });
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index 14a117c..53454d6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -38,7 +38,6 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.FrameLayout;
 import android.widget.HorizontalScrollView;
 import android.widget.LinearLayout;
 
@@ -58,9 +57,9 @@
 import com.android.systemui.qs.QSHost.Callback;
 import com.android.systemui.qs.customize.QSCustomizer;
 import com.android.systemui.qs.external.CustomTile;
+import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.settings.BrightnessController;
 import com.android.systemui.settings.ToggleSliderView;
-import com.android.systemui.shared.plugins.PluginManager;
 import com.android.systemui.statusbar.policy.BrightnessMirrorController;
 import com.android.systemui.statusbar.policy.BrightnessMirrorController.BrightnessMirrorListener;
 import com.android.systemui.tuner.TunerService;
@@ -71,6 +70,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -86,6 +86,7 @@
 
     protected final Context mContext;
     protected final ArrayList<TileRecord> mRecords = new ArrayList<>();
+    private String mCachedSpecs = "";
     protected final View mBrightnessView;
     private final H mHandler = new H();
     private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class);
@@ -103,6 +104,7 @@
     private QSDetail.Callback mCallback;
     private BrightnessController mBrightnessController;
     private DumpController mDumpController;
+    private final QSLogger mQSLogger;
     protected QSTileHost mHost;
 
     protected QSSecurityFooter mFooter;
@@ -117,9 +119,6 @@
     private BrightnessMirrorController mBrightnessMirrorController;
     private View mDivider;
 
-    private FrameLayout mPluginFrame;
-    private final PluginManager mPluginManager;
-
     private final LocalMediaManager.DeviceCallback mDeviceCallback =
             new LocalMediaManager.DeviceCallback() {
         @Override
@@ -145,24 +144,17 @@
         }
     };
 
-    public QSPanel(Context context) {
-        this(context, null);
-    }
-
-    public QSPanel(Context context, AttributeSet attrs) {
-        this(context, attrs, null);
-    }
-
-    public QSPanel(Context context, AttributeSet attrs, DumpController dumpController) {
-        this(context, attrs, dumpController, null, Dependency.get(BroadcastDispatcher.class));
-    }
-
     @Inject
-    public QSPanel(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
-            DumpController dumpController, PluginManager pluginManager,
-            BroadcastDispatcher broadcastDispatcher) {
+    public QSPanel(
+            @Named(VIEW_CONTEXT) Context context,
+            AttributeSet attrs,
+            DumpController dumpController,
+            BroadcastDispatcher broadcastDispatcher,
+            QSLogger qsLogger
+    ) {
         super(context, attrs);
         mContext = context;
+        mQSLogger = qsLogger;
 
         setOrientation(VERTICAL);
 
@@ -172,6 +164,7 @@
 
         mTileLayout = (QSTileLayout) LayoutInflater.from(mContext).inflate(
                 R.layout.qs_paged_tile_layout, this, false);
+        mQSLogger.logAllTilesChangeListening(mListening, getDumpableTag(), mCachedSpecs);
         mTileLayout.setListening(mListening);
         addView((View) mTileLayout);
 
@@ -198,7 +191,6 @@
         mBrightnessController = new BrightnessController(getContext(),
                 findViewById(R.id.brightness_slider), broadcastDispatcher);
         mDumpController = dumpController;
-        mPluginManager = pluginManager;
     }
 
     @Override
@@ -528,6 +520,7 @@
 
     public void setExpanded(boolean expanded) {
         if (mExpanded == expanded) return;
+        mQSLogger.logPanelExpanded(expanded, getDumpableTag());
         mExpanded = expanded;
         if (!mExpanded && mTileLayout instanceof PagedTileLayout) {
             ((PagedTileLayout) mTileLayout).setCurrentItem(0, false);
@@ -554,6 +547,7 @@
         if (mListening == listening) return;
         mListening = listening;
         if (mTileLayout != null) {
+            mQSLogger.logAllTilesChangeListening(listening, getDumpableTag(), mCachedSpecs);
             mTileLayout.setListening(listening);
         }
         if (mListening) {
@@ -561,6 +555,12 @@
         }
     }
 
+    private String getTilesSpecs() {
+        return mRecords.stream()
+                .map(tileRecord ->  tileRecord.tile.getTileSpec())
+                .collect(Collectors.joining(","));
+    }
+
     public void setListening(boolean listening, boolean expanded) {
         setListening(listening && expanded);
         getFooter().setListening(listening);
@@ -618,6 +618,7 @@
             record.tile.removeCallback(record.callback);
         }
         mRecords.clear();
+        mCachedSpecs = "";
         for (QSTile tile : tiles) {
             addTile(tile, collapsedView);
         }
@@ -682,6 +683,7 @@
         r.tileView.init(r.tile);
         r.tile.refreshState();
         mRecords.add(r);
+        mCachedSpecs = getTilesSpecs();
 
         if (mTileLayout != null) {
             mTileLayout.addTile(r);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
index 00e09f8..73c42d4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
@@ -43,6 +43,7 @@
 import com.android.systemui.qs.external.CustomTile;
 import com.android.systemui.qs.external.TileLifecycleManager;
 import com.android.systemui.qs.external.TileServices;
+import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSFactoryImpl;
 import com.android.systemui.shared.plugins.PluginManager;
 import com.android.systemui.statusbar.phone.AutoTileManager;
@@ -82,6 +83,7 @@
     private final PluginManager mPluginManager;
     private final DumpController mDumpController;
     private final BroadcastDispatcher mBroadcastDispatcher;
+    private final QSLogger mQSLogger;
 
     private final List<Callback> mCallbacks = new ArrayList<>();
     private AutoTileManager mAutoTiles;
@@ -101,12 +103,14 @@
             Provider<AutoTileManager> autoTiles,
             DumpController dumpController,
             BroadcastDispatcher broadcastDispatcher,
-            Optional<StatusBar> statusBarOptional) {
+            Optional<StatusBar> statusBarOptional,
+            QSLogger qsLogger) {
         mIconController = iconController;
         mContext = context;
         mTunerService = tunerService;
         mPluginManager = pluginManager;
         mDumpController = dumpController;
+        mQSLogger = qsLogger;
         mBroadcastDispatcher = broadcastDispatcher;
 
         mServices = new TileServices(this, bgLooper, mBroadcastDispatcher);
@@ -159,6 +163,10 @@
         onTuningChanged(TILES_SETTING, value);
     }
 
+    public QSLogger getQSLogger() {
+        return mQSLogger;
+    }
+
     @Override
     public void addCallback(Callback callback) {
         mCallbacks.add(callback);
@@ -223,6 +231,7 @@
         mTiles.entrySet().stream().filter(tile -> !tileSpecs.contains(tile.getKey())).forEach(
                 tile -> {
                     Log.d(TAG, "Destroying tile: " + tile.getKey());
+                    mQSLogger.logTileDestroyed(tile.getKey(), "Tile removed");
                     tile.getValue().destroy();
                 });
         final LinkedHashMap<String, QSTile> newTiles = new LinkedHashMap<>();
@@ -237,9 +246,11 @@
                         tile.userSwitch(currentUser);
                     }
                     newTiles.put(tileSpec, tile);
+                    mQSLogger.logTileAdded(tileSpec);
                 } else {
                     tile.destroy();
                     Log.d(TAG, "Destroying not available tile: " + tileSpec);
+                    mQSLogger.logTileDestroyed(tileSpec, "Tile not available");
                 }
             } else {
                 Log.d(TAG, "Creating tile: " + tileSpec);
@@ -249,9 +260,11 @@
                         if (tile.isAvailable()) {
                             tile.setTileSpec(tileSpec);
                             newTiles.put(tileSpec, tile);
+                            mQSLogger.logTileAdded(tileSpec);
                         } else {
                             tile.destroy();
                             Log.d(TAG, "Destroying not available tile: " + tileSpec);
+                            mQSLogger.logTileDestroyed(tileSpec, "Tile not available");
                         }
                     }
                 } catch (Throwable t) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
index e920701..fda2f6a4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
@@ -29,10 +29,12 @@
 import com.android.systemui.Dependency;
 import com.android.systemui.DumpController;
 import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.qs.QSTile.SignalState;
 import com.android.systemui.plugins.qs.QSTile.State;
 import com.android.systemui.qs.customize.QSCustomizer;
+import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.tuner.TunerService;
 import com.android.systemui.tuner.TunerService.Tunable;
 import com.android.systemui.util.Utils;
@@ -65,9 +67,14 @@
     private QSTileLayout mRegularTileLayout;
 
     @Inject
-    public QuickQSPanel(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
-            DumpController dumpController) {
-        super(context, attrs, dumpController);
+    public QuickQSPanel(
+            @Named(VIEW_CONTEXT) Context context,
+            AttributeSet attrs,
+            DumpController dumpController,
+            BroadcastDispatcher broadcastDispatcher,
+            QSLogger qsLogger
+    ) {
+        super(context, attrs, dumpController, broadcastDispatcher, qsLogger);
         if (mFooter != null) {
             removeView(mFooter.getView());
         }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
index d4af154..d422dd7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
@@ -60,10 +60,11 @@
 import com.android.systemui.plugins.DarkIconDispatcher;
 import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
 import com.android.systemui.qs.QSDetail.Callback;
+import com.android.systemui.qs.carrier.QSCarrierGroup;
 import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.statusbar.phone.PhoneStatusBarView;
 import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager;
+import com.android.systemui.statusbar.phone.StatusBarWindowView;
 import com.android.systemui.statusbar.phone.StatusIconContainer;
 import com.android.systemui.statusbar.policy.Clock;
 import com.android.systemui.statusbar.policy.DateView;
@@ -146,6 +147,7 @@
         }
     };
     private boolean mHasTopCutout = false;
+    private int mRoundedCornerPadding = 0;
 
     @Inject
     public QuickStatusBarHeader(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
@@ -325,6 +327,9 @@
         Resources resources = mContext.getResources();
         updateMinimumHeight();
 
+        mRoundedCornerPadding = resources.getDimensionPixelSize(
+                R.dimen.rounded_corner_content_padding);
+
         // Update height for a few views, especially due to landscape mode restricting space.
         mHeaderTextContainerView.getLayoutParams().height =
                 resources.getDimensionPixelSize(R.dimen.qs_header_tooltip_height);
@@ -431,17 +436,23 @@
 
     @Override
     public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+        // Handle padding of SystemIconsView
         DisplayCutout cutout = insets.getDisplayCutout();
-        Pair<Integer, Integer> padding = PhoneStatusBarView.cornerCutoutMargins(
+        Pair<Integer, Integer> cornerCutoutPadding = StatusBarWindowView.cornerCutoutMargins(
                 cutout, getDisplay());
-        if (padding == null) {
-            mSystemIconsView.setPaddingRelative(
-                    getResources().getDimensionPixelSize(R.dimen.status_bar_padding_start), 0,
-                    getResources().getDimensionPixelSize(R.dimen.status_bar_padding_end), 0);
-        } else {
-            mSystemIconsView.setPadding(padding.first, 0, padding.second, 0);
+        Pair<Integer, Integer> padding =
+                StatusBarWindowView.paddingNeededForCutoutAndRoundedCorner(
+                        cutout, cornerCutoutPadding, mRoundedCornerPadding);
+        final int waterfallTopInset = cutout == null ? 0 : cutout.getWaterfallInsets().top;
+        int statusBarPaddingLeft = isLayoutRtl()
+                ? getResources().getDimensionPixelSize(R.dimen.status_bar_padding_end)
+                : getResources().getDimensionPixelSize(R.dimen.status_bar_padding_start);
+        int statusBarPaddingRight = isLayoutRtl()
+                ? getResources().getDimensionPixelSize(R.dimen.status_bar_padding_start)
+                : getResources().getDimensionPixelSize(R.dimen.status_bar_padding_end);
+        mSystemIconsView.setPadding(padding.first + statusBarPaddingLeft, waterfallTopInset,
+                padding.second + statusBarPaddingRight, 0);
 
-        }
         return super.onApplyWindowInsets(insets);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java
index 867677a..d899acb 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java
@@ -17,6 +17,7 @@
 package com.android.systemui.qs;
 
 import com.android.systemui.R;
+import com.android.systemui.qs.carrier.QSCarrierGroupController;
 
 import javax.inject.Inject;
 
diff --git a/packages/SystemUI/src/com/android/systemui/qs/carrier/CellSignalState.kt b/packages/SystemUI/src/com/android/systemui/qs/carrier/CellSignalState.kt
new file mode 100644
index 0000000..663f3f0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/carrier/CellSignalState.kt
@@ -0,0 +1,43 @@
+/*
+ * 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.qs.carrier
+
+/**
+ * Represents the state of cell signal for a particular slot.
+ *
+ * To be used between [QSCarrierGroupController] and [QSCarrier].
+ */
+data class CellSignalState(
+    @JvmField val visible: Boolean = false,
+    @JvmField val mobileSignalIconId: Int = 0,
+    @JvmField val contentDescription: String? = null,
+    @JvmField val typeContentDescription: String? = null,
+    @JvmField val roaming: Boolean = false
+) {
+    /**
+     * Changes the visibility of this state by returning a copy with the visibility changed.
+     *
+     * If the visibility would not change, the same state is returned.
+     *
+     * @param visible the new visibility state
+     * @return `this` if `this.visible == visible`. Else, a new copy with the visibility changed.
+     */
+    fun changeVisibility(visible: Boolean): CellSignalState {
+        if (this.visible == visible) return this
+        else return copy(visible = visible)
+    }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrier.java b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrier.java
new file mode 100644
index 0000000..ad275f1
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrier.java
@@ -0,0 +1,127 @@
+/*
+ * 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.qs.carrier;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.settingslib.Utils;
+import com.android.settingslib.graph.SignalDrawable;
+import com.android.systemui.DualToneHandler;
+import com.android.systemui.R;
+import com.android.systemui.qs.QuickStatusBarHeader;
+
+import java.util.Objects;
+
+public class QSCarrier extends LinearLayout {
+
+    private View mMobileGroup;
+    private TextView mCarrierText;
+    private ImageView mMobileSignal;
+    private ImageView mMobileRoaming;
+    private DualToneHandler mDualToneHandler;
+    private ColorStateList mColorForegroundStateList;
+    private float mColorForegroundIntensity;
+    private CellSignalState mLastSignalState;
+
+    public QSCarrier(Context context) {
+        super(context);
+    }
+
+    public QSCarrier(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public QSCarrier(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public QSCarrier(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mDualToneHandler = new DualToneHandler(getContext());
+        mMobileGroup = findViewById(R.id.mobile_combo);
+        mMobileSignal = findViewById(R.id.mobile_signal);
+        mMobileRoaming = findViewById(R.id.mobile_roaming);
+        mCarrierText = findViewById(R.id.qs_carrier_text);
+
+        mMobileSignal.setImageDrawable(new SignalDrawable(mContext));
+
+        int colorForeground = Utils.getColorAttrDefaultColor(mContext,
+                android.R.attr.colorForeground);
+        mColorForegroundStateList = ColorStateList.valueOf(colorForeground);
+        mColorForegroundIntensity = QuickStatusBarHeader.getColorIntensity(colorForeground);
+    }
+
+    /**
+     * Update the state of this view
+     * @param state the current state of the signal for this view
+     * @return true if the state was actually changed
+     */
+    public boolean updateState(CellSignalState state) {
+        if (Objects.equals(state, mLastSignalState)) return false;
+        mLastSignalState = state;
+        mMobileGroup.setVisibility(state.visible ? View.VISIBLE : View.GONE);
+        if (state.visible) {
+            mMobileRoaming.setVisibility(state.roaming ? View.VISIBLE : View.GONE);
+            ColorStateList colorStateList = ColorStateList.valueOf(
+                    mDualToneHandler.getSingleColor(mColorForegroundIntensity));
+            mMobileRoaming.setImageTintList(colorStateList);
+            mMobileSignal.setImageTintList(colorStateList);
+            mMobileSignal.setImageLevel(state.mobileSignalIconId);
+
+            StringBuilder contentDescription = new StringBuilder();
+            if (state.contentDescription != null) {
+                contentDescription.append(state.contentDescription).append(", ");
+            }
+            if (state.roaming) {
+                contentDescription
+                        .append(mContext.getString(R.string.data_connection_roaming))
+                        .append(", ");
+            }
+            // TODO: show mobile data off/no internet text for 5 seconds before carrier text
+            if (hasValidTypeContentDescription(state.typeContentDescription)) {
+                contentDescription.append(state.typeContentDescription);
+            }
+            mMobileSignal.setContentDescription(contentDescription);
+        }
+        return true;
+    }
+
+    private boolean hasValidTypeContentDescription(String typeContentDescription) {
+        return TextUtils.equals(typeContentDescription,
+                mContext.getString(R.string.data_connection_no_internet))
+                || TextUtils.equals(typeContentDescription,
+                mContext.getString(R.string.cell_data_off_content_description))
+                || TextUtils.equals(typeContentDescription,
+                mContext.getString(R.string.not_default_data_content_description));
+    }
+
+    public void setCarrierText(CharSequence text) {
+        mCarrierText.setText(text);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroup.java b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroup.java
new file mode 100644
index 0000000..d03563f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroup.java
@@ -0,0 +1,58 @@
+/*
+ * 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.qs.carrier;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.systemui.R;
+
+/**
+ * Displays Carrier name and network status in QS
+ */
+public class QSCarrierGroup extends LinearLayout {
+    public QSCarrierGroup(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    TextView getNoSimTextView() {
+        return findViewById(R.id.no_carrier_text);
+    }
+
+    QSCarrier getCarrier1View() {
+        return findViewById(R.id.carrier1);
+    }
+
+    QSCarrier getCarrier2View() {
+        return findViewById(R.id.carrier2);
+    }
+
+    QSCarrier getCarrier3View() {
+        return findViewById(R.id.carrier3);
+    }
+
+    View getCarrierDivider1() {
+        return findViewById(R.id.qs_carrier_divider1);
+    }
+
+    View getCarrierDivider2() {
+        return findViewById(R.id.qs_carrier_divider2);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java
new file mode 100644
index 0000000..f9b1473
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.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 com.android.systemui.qs.carrier;
+
+import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_YES;
+
+import android.annotation.MainThread;
+import android.content.Intent;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.provider.Settings;
+import android.telephony.SubscriptionManager;
+import android.util.Log;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.annotation.VisibleForTesting;
+
+import com.android.keyguard.CarrierTextController;
+import com.android.systemui.dagger.qualifiers.Background;
+import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.statusbar.policy.NetworkController;
+
+import java.util.function.Consumer;
+
+import javax.inject.Inject;
+
+public class QSCarrierGroupController {
+    private static final String TAG = "QSCarrierGroup";
+
+    /**
+     * Support up to 3 slots which is what's supported by {@link TelephonyManager#getPhoneCount}
+     */
+    private static final int SIM_SLOTS = 3;
+
+    private final ActivityStarter mActivityStarter;
+    private final Handler mBgHandler;
+    private final NetworkController mNetworkController;
+    private final CarrierTextController mCarrierTextController;
+    private final TextView mNoSimTextView;
+    private final H mMainHandler;
+    private final Callback mCallback;
+    private boolean mListening;
+    private final CellSignalState[] mInfos =
+            new CellSignalState[SIM_SLOTS];
+    private View[] mCarrierDividers = new View[SIM_SLOTS - 1];
+    private QSCarrier[] mCarrierGroups = new QSCarrier[SIM_SLOTS];
+
+    private final NetworkController.SignalCallback mSignalCallback =
+            new NetworkController.SignalCallback() {
+                @Override
+                public void setMobileDataIndicators(NetworkController.IconState statusIcon,
+                        NetworkController.IconState qsIcon, int statusType, int qsType,
+                        boolean activityIn, boolean activityOut,
+                        CharSequence typeContentDescription,
+                        CharSequence typeContentDescriptionHtml, CharSequence description,
+                        boolean isWide, int subId, boolean roaming) {
+                    int slotIndex = getSlotIndex(subId);
+                    if (slotIndex >= SIM_SLOTS) {
+                        Log.w(TAG, "setMobileDataIndicators - slot: " + slotIndex);
+                        return;
+                    }
+                    if (slotIndex == SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
+                        Log.e(TAG, "Invalid SIM slot index for subscription: " + subId);
+                        return;
+                    }
+                    mInfos[slotIndex] = new CellSignalState(
+                            statusIcon.visible,
+                            statusIcon.icon,
+                            statusIcon.contentDescription,
+                            typeContentDescription.toString(),
+                            roaming
+                    );
+                    mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
+                }
+
+                @Override
+                public void setNoSims(boolean hasNoSims, boolean simDetected) {
+                    if (hasNoSims) {
+                        for (int i = 0; i < SIM_SLOTS; i++) {
+                            mInfos[i] = mInfos[i].changeVisibility(false);
+                        }
+                    }
+                    mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
+                }
+            };
+
+    private static class Callback implements CarrierTextController.CarrierTextCallback {
+        private H mHandler;
+
+        Callback(H handler) {
+            mHandler = handler;
+        }
+
+        @Override
+        public void updateCarrierInfo(CarrierTextController.CarrierTextCallbackInfo info) {
+            mHandler.obtainMessage(H.MSG_UPDATE_CARRIER_INFO, info).sendToTarget();
+        }
+    }
+
+    private QSCarrierGroupController(QSCarrierGroup view, ActivityStarter activityStarter,
+            @Background Handler bgHandler, @Main Looper mainLooper,
+            NetworkController networkController,
+            CarrierTextController.Builder carrierTextControllerBuilder) {
+        mActivityStarter = activityStarter;
+        mBgHandler = bgHandler;
+        mNetworkController = networkController;
+        mCarrierTextController = carrierTextControllerBuilder
+                .setShowAirplaneMode(false)
+                .setShowMissingSim(false)
+                .build();
+
+        View.OnClickListener onClickListener = v -> {
+            if (!v.isVisibleToUser()) {
+                return;
+            }
+            mActivityStarter.postStartActivityDismissingKeyguard(
+                    new Intent(Settings.ACTION_WIRELESS_SETTINGS), 0);
+        };
+        view.setOnClickListener(onClickListener);
+        mNoSimTextView = view.getNoSimTextView();
+        mNoSimTextView.setOnClickListener(onClickListener);
+        mMainHandler = new H(mainLooper, this::handleUpdateCarrierInfo, this::handleUpdateState);
+        mCallback = new Callback(mMainHandler);
+
+
+        mCarrierGroups[0] = view.getCarrier1View();
+        mCarrierGroups[1] = view.getCarrier2View();
+        mCarrierGroups[2] = view.getCarrier3View();
+
+        mCarrierDividers[0] = view.getCarrierDivider1();
+        mCarrierDividers[1] = view.getCarrierDivider2();
+
+        for (int i = 0; i < SIM_SLOTS; i++) {
+            mInfos[i] = new CellSignalState();
+            mCarrierGroups[i].setOnClickListener(onClickListener);
+        }
+        view.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
+
+        view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
+            @Override
+            public void onViewAttachedToWindow(View v) {
+            }
+
+            @Override
+            public void onViewDetachedFromWindow(View v) {
+                setListening(false);
+            }
+        });
+    }
+
+    @VisibleForTesting
+    protected int getSlotIndex(int subscriptionId) {
+        return SubscriptionManager.getSlotIndex(subscriptionId);
+    }
+
+    public void setListening(boolean listening) {
+        if (listening == mListening) {
+            return;
+        }
+        mListening = listening;
+
+        mBgHandler.post(this::updateListeners);
+    }
+
+    private void updateListeners() {
+        if (mListening) {
+            if (mNetworkController.hasVoiceCallingFeature()) {
+                mNetworkController.addCallback(mSignalCallback);
+            }
+            mCarrierTextController.setListening(mCallback);
+        } else {
+            mNetworkController.removeCallback(mSignalCallback);
+            mCarrierTextController.setListening(null);
+        }
+    }
+
+
+    @MainThread
+    private void handleUpdateState() {
+        if (!mMainHandler.getLooper().isCurrentThread()) {
+            mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
+            return;
+        }
+
+        for (int i = 0; i < SIM_SLOTS; i++) {
+            mCarrierGroups[i].updateState(mInfos[i]);
+        }
+
+        mCarrierDividers[0].setVisibility(
+                mInfos[0].visible && mInfos[1].visible ? View.VISIBLE : View.GONE);
+        // This tackles the case of slots 2 being available as well as at least one other.
+        // In that case we show the second divider. Note that if both dividers are visible, it means
+        // all three slots are in use, and that is correct.
+        mCarrierDividers[1].setVisibility(
+                (mInfos[1].visible && mInfos[2].visible)
+                        || (mInfos[0].visible && mInfos[2].visible) ? View.VISIBLE : View.GONE);
+    }
+
+    @MainThread
+    private void handleUpdateCarrierInfo(CarrierTextController.CarrierTextCallbackInfo info) {
+        if (!mMainHandler.getLooper().isCurrentThread()) {
+            mMainHandler.obtainMessage(H.MSG_UPDATE_CARRIER_INFO, info).sendToTarget();
+            return;
+        }
+
+        mNoSimTextView.setVisibility(View.GONE);
+        if (!info.airplaneMode && info.anySimReady) {
+            boolean[] slotSeen = new boolean[SIM_SLOTS];
+            if (info.listOfCarriers.length == info.subscriptionIds.length) {
+                for (int i = 0; i < SIM_SLOTS && i < info.listOfCarriers.length; i++) {
+                    int slot = getSlotIndex(info.subscriptionIds[i]);
+                    if (slot >= SIM_SLOTS) {
+                        Log.w(TAG, "updateInfoCarrier - slot: " + slot);
+                        continue;
+                    }
+                    if (slot == SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
+                        Log.e(TAG,
+                                "Invalid SIM slot index for subscription: "
+                                        + info.subscriptionIds[i]);
+                        continue;
+                    }
+                    mInfos[slot] = mInfos[slot].changeVisibility(true);
+                    slotSeen[slot] = true;
+                    mCarrierGroups[slot].setCarrierText(
+                            info.listOfCarriers[i].toString().trim());
+                    mCarrierGroups[slot].setVisibility(View.VISIBLE);
+                }
+                for (int i = 0; i < SIM_SLOTS; i++) {
+                    if (!slotSeen[i]) {
+                        mInfos[i] = mInfos[i].changeVisibility(false);
+                        mCarrierGroups[i].setVisibility(View.GONE);
+                    }
+                }
+            } else {
+                Log.e(TAG, "Carrier information arrays not of same length");
+            }
+        } else {
+            // No sims or airplane mode (but not WFC). Do not show QSCarrierGroup, instead just show
+            // info.carrierText in a different view.
+            for (int i = 0; i < SIM_SLOTS; i++) {
+                mInfos[i] = mInfos[i].changeVisibility(false);
+                mCarrierGroups[i].setCarrierText("");
+                mCarrierGroups[i].setVisibility(View.GONE);
+            }
+            mNoSimTextView.setText(info.carrierText);
+            mNoSimTextView.setVisibility(View.VISIBLE);
+        }
+        handleUpdateState(); // handleUpdateCarrierInfo is always called from main thread.
+    }
+
+    private static class H extends Handler {
+        private Consumer<CarrierTextController.CarrierTextCallbackInfo> mUpdateCarrierInfo;
+        private Runnable mUpdateState;
+        static final int MSG_UPDATE_CARRIER_INFO = 0;
+        static final int MSG_UPDATE_STATE = 1;
+
+        H(Looper looper,
+                Consumer<CarrierTextController.CarrierTextCallbackInfo> updateCarrierInfo,
+                Runnable updateState) {
+            super(looper);
+            mUpdateCarrierInfo = updateCarrierInfo;
+            mUpdateState = updateState;
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_UPDATE_CARRIER_INFO:
+                    mUpdateCarrierInfo.accept(
+                            (CarrierTextController.CarrierTextCallbackInfo) msg.obj);
+                    break;
+                case MSG_UPDATE_STATE:
+                    mUpdateState.run();
+                    break;
+                default:
+                    super.handleMessage(msg);
+            }
+        }
+    }
+
+    public static class Builder {
+        private QSCarrierGroup mView;
+        private final ActivityStarter mActivityStarter;
+        private final Handler mHandler;
+        private final Looper mLooper;
+        private final NetworkController mNetworkController;
+        private final CarrierTextController.Builder mCarrierTextControllerBuilder;
+
+        @Inject
+        public Builder(ActivityStarter activityStarter, @Background Handler handler,
+                @Main Looper looper, NetworkController networkController,
+                CarrierTextController.Builder carrierTextControllerBuilder) {
+            mActivityStarter = activityStarter;
+            mHandler = handler;
+            mLooper = looper;
+            mNetworkController = networkController;
+            mCarrierTextControllerBuilder = carrierTextControllerBuilder;
+        }
+
+        public Builder setQSCarrierGroup(QSCarrierGroup view) {
+            mView = view;
+            return this;
+        }
+
+        public QSCarrierGroupController build() {
+            return new QSCarrierGroupController(mView, mActivityStarter, mHandler, mLooper,
+                    mNetworkController, mCarrierTextControllerBuilder);
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
index 411980b..21a424c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
@@ -83,7 +83,7 @@
         mTile = new Tile();
         updateDefaultTileAndIcon();
         mServiceManager = host.getTileServices().getTileWrapper(this);
-        if (mServiceManager.isBooleanTile()) {
+        if (mServiceManager.isToggleableTile()) {
             // Replace states with BooleanState
             resetStates();
         }
@@ -191,6 +191,7 @@
         mTile.setLabel(tile.getLabel());
         mTile.setSubtitle(tile.getSubtitle());
         mTile.setContentDescription(tile.getContentDescription());
+        mTile.setStateDescription(tile.getStateDescription());
         mTile.setState(tile.getState());
     }
 
@@ -209,8 +210,10 @@
 
     @Override
     public void handleSetListening(boolean listening) {
+        super.handleSetListening(listening);
         if (mListening == listening) return;
         mListening = listening;
+
         try {
             if (listening) {
                 updateDefaultTileAndIcon();
@@ -252,7 +255,7 @@
 
     @Override
     public State newTileState() {
-        if (mServiceManager != null && mServiceManager.isBooleanTile()) {
+        if (mServiceManager != null && mServiceManager.isToggleableTile()) {
             return new BooleanState();
         }
         return new State();
@@ -345,6 +348,12 @@
             state.contentDescription = state.label;
         }
 
+        if (mTile.getStateDescription() != null) {
+            state.stateDescription = mTile.getStateDescription();
+        } else {
+            state.stateDescription = null;
+        }
+
         if (state instanceof BooleanState) {
             state.expandedAccessibilityClassName = Switch.class.getName();
             ((BooleanState) state).value = (state.state == Tile.STATE_ACTIVE);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
index ad79cad..17b0251 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
@@ -141,16 +141,16 @@
     /**
      * Determines whether the associated TileService is a Boolean Tile.
      *
-     * @return true if {@link TileService#META_DATA_BOOLEAN_TILE} is set to {@code true} for this
+     * @return true if {@link TileService#META_DATA_TOGGLEABLE_TILE} is set to {@code true} for this
      *         tile
-     * @see TileService#META_DATA_BOOLEAN_TILE
+     * @see TileService#META_DATA_TOGGLEABLE_TILE
      */
-    public boolean isBooleanTile() {
+    public boolean isToggleableTile() {
         try {
             ServiceInfo info = mPackageManagerAdapter.getServiceInfo(mIntent.getComponent(),
                     PackageManager.MATCH_UNINSTALLED_PACKAGES | PackageManager.GET_META_DATA);
             return info.metaData != null
-                    && info.metaData.getBoolean(TileService.META_DATA_BOOLEAN_TILE, false);
+                    && info.metaData.getBoolean(TileService.META_DATA_TOGGLEABLE_TILE, false);
         } catch (PackageManager.NameNotFoundException e) {
             return false;
         }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
index 1902d65..cfa8fb6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
@@ -124,8 +124,8 @@
         return mStateManager.isActiveTile();
     }
 
-    public boolean isBooleanTile() {
-        return mStateManager.isBooleanTile();
+    public boolean isToggleableTile() {
+        return mStateManager.isToggleableTile();
     }
 
     public void setShowingDialog(boolean dialog) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/logging/QSLogger.kt b/packages/SystemUI/src/com/android/systemui/qs/logging/QSLogger.kt
new file mode 100644
index 0000000..5c1d332
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/logging/QSLogger.kt
@@ -0,0 +1,147 @@
+/*
+ * 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.qs.logging
+
+import android.service.quicksettings.Tile
+import com.android.systemui.log.LogBuffer
+import com.android.systemui.log.LogLevel
+import com.android.systemui.log.LogLevel.DEBUG
+import com.android.systemui.log.LogLevel.VERBOSE
+import com.android.systemui.log.LogMessage
+import com.android.systemui.log.dagger.QSLog
+import com.android.systemui.plugins.qs.QSTile
+import com.android.systemui.statusbar.StatusBarState
+import javax.inject.Inject
+
+private const val TAG = "QSLog"
+
+class QSLogger @Inject constructor(
+    @QSLog private val buffer: LogBuffer
+) {
+
+    fun logTileAdded(tileSpec: String) {
+        log(DEBUG, {
+            str1 = tileSpec
+        }, {
+            "[$str1] Tile added"
+        })
+    }
+
+    fun logTileDestroyed(tileSpec: String, reason: String) {
+        log(DEBUG, {
+            str1 = tileSpec
+            str2 = reason
+        }, {
+            "[$str1] Tile destroyed. Reason: $str2"
+        })
+    }
+
+    fun logTileChangeListening(tileSpec: String, listening: Boolean) {
+        log(VERBOSE, {
+            bool1 = listening
+            str1 = tileSpec
+        }, {
+            "[$str1] Tile listening=$bool1"
+        })
+    }
+
+    fun logAllTilesChangeListening(listening: Boolean, containerName: String, allSpecs: String) {
+        log(DEBUG, {
+            bool1 = listening
+            str1 = containerName
+            str2 = allSpecs
+        }, {
+            "Tiles listening=$bool1 in $str1. $str2"
+        })
+    }
+
+    fun logTileClick(tileSpec: String, statusBarState: Int, state: Int) {
+        log(DEBUG, {
+            str1 = tileSpec
+            int1 = statusBarState
+            str2 = StatusBarState.toShortString(statusBarState)
+            str3 = toStateString(state)
+        }, {
+            "[$str1] Tile clicked. StatusBarState=$str2. TileState=$str3"
+        })
+    }
+
+    fun logTileSecondaryClick(tileSpec: String, statusBarState: Int, state: Int) {
+        log(DEBUG, {
+            str1 = tileSpec
+            int1 = statusBarState
+            str2 = StatusBarState.toShortString(statusBarState)
+            str3 = toStateString(state)
+        }, {
+            "[$str1] Tile long clicked. StatusBarState=$str2. TileState=$str3"
+        })
+    }
+
+    fun logTileLongClick(tileSpec: String, statusBarState: Int, state: Int) {
+        log(DEBUG, {
+            str1 = tileSpec
+            int1 = statusBarState
+            str2 = StatusBarState.toShortString(statusBarState)
+            str3 = toStateString(state)
+        }, {
+            "[$str1] Tile long clicked. StatusBarState=$str2. TileState=$str3"
+        })
+    }
+
+    fun logTileUpdated(tileSpec: String, state: QSTile.State) {
+        log(VERBOSE, {
+            str1 = tileSpec
+            str2 = state.label?.toString()
+            str3 = state.icon?.toString()
+            int1 = state.state
+            if (state is QSTile.SignalState) {
+                bool1 = true
+                bool2 = state.activityIn
+                bool3 = state.activityOut
+            }
+        }, {
+            "[$str1] Tile updated. Label=$str2. State=$int1. Icon=$str3." +
+                if (bool1) " Activity in/out=$bool2/$bool3" else ""
+        })
+    }
+
+    fun logPanelExpanded(expanded: Boolean, containerName: String) {
+        log(DEBUG, {
+            str1 = containerName
+            bool1 = expanded
+        }, {
+            "$str1 expanded=$bool1"
+        })
+    }
+
+    private fun toStateString(state: Int): String {
+        return when (state) {
+            Tile.STATE_ACTIVE -> "active"
+            Tile.STATE_INACTIVE -> "inactive"
+            Tile.STATE_UNAVAILABLE -> "unavailable"
+            else -> "wrong state"
+        }
+    }
+
+    private inline fun log(
+        logLevel: LogLevel,
+        initializer: LogMessage.() -> Unit,
+        noinline printer: LogMessage.() -> String
+    ) {
+        buffer.log(TAG, logLevel, initializer, printer)
+    }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
index 2fe64d2..8feee10 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
@@ -63,7 +63,6 @@
     private String mAccessibilityClass;
     private boolean mTileState;
     private boolean mCollapsedView;
-    private boolean mClicked;
     private boolean mShowRippleEffect = true;
 
     private final ImageView mBg;
@@ -230,13 +229,35 @@
         setLongClickable(state.handlesLongClick);
         mIcon.setIcon(state, allowAnimations);
         setContentDescription(state.contentDescription);
+        final StringBuilder stateDescription = new StringBuilder();
+        switch (state.state) {
+            case Tile.STATE_UNAVAILABLE:
+                stateDescription.append(mContext.getString(R.string.tile_unavailable));
+                break;
+            case Tile.STATE_INACTIVE:
+                if (state instanceof QSTile.BooleanState) {
+                    stateDescription.append(mContext.getString(R.string.switch_bar_off));
+                }
+                break;
+            case Tile.STATE_ACTIVE:
+                if (state instanceof QSTile.BooleanState) {
+                    stateDescription.append(mContext.getString(R.string.switch_bar_on));
+                }
+                break;
+            default:
+                break;
+        }
+        if (!TextUtils.isEmpty(state.stateDescription)) {
+            stateDescription.append(", ");
+            stateDescription.append(state.stateDescription);
+        }
+        setStateDescription(stateDescription.toString());
 
         mAccessibilityClass =
                 state.state == Tile.STATE_UNAVAILABLE ? null : state.expandedAccessibilityClassName;
         if (state instanceof QSTile.BooleanState) {
             boolean newState = ((BooleanState) state).value;
             if (mTileState != newState) {
-                mClicked = false;
                 mTileState = newState;
             }
         }
@@ -288,23 +309,10 @@
     }
 
     @Override
-    public boolean performClick() {
-        mClicked = true;
-        return super.performClick();
-    }
-
-    @Override
     public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
         super.onInitializeAccessibilityEvent(event);
         if (!TextUtils.isEmpty(mAccessibilityClass)) {
             event.setClassName(mAccessibilityClass);
-            if (Switch.class.getName().equals(mAccessibilityClass)) {
-                boolean b = mClicked ? !mTileState : mTileState;
-                String label = getResources()
-                        .getString(b ? R.string.switch_bar_on : R.string.switch_bar_off);
-                event.setContentDescription(label);
-                event.setChecked(b);
-            }
         }
     }
 
@@ -316,11 +324,13 @@
         if (!TextUtils.isEmpty(mAccessibilityClass)) {
             info.setClassName(mAccessibilityClass);
             if (Switch.class.getName().equals(mAccessibilityClass)) {
-                boolean b = mClicked ? !mTileState : mTileState;
-                String label = getResources()
-                        .getString(b ? R.string.switch_bar_on : R.string.switch_bar_off);
+                String label = getResources().getString(
+                        mTileState ? R.string.switch_bar_on : R.string.switch_bar_off);
+                // Set the text here for tests in
+                // android.platform.test.scenario.sysui.quicksettings. Can be removed when
+                // UiObject2 has a new getStateDescription() API and tests are updated.
                 info.setText(label);
-                info.setChecked(b);
+                info.setChecked(mTileState);
                 info.setCheckable(true);
                 if (isLongClickable()) {
                     info.addAction(
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
index e1b61c6..60f6647 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
@@ -27,6 +27,8 @@
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_ACTION;
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
+import android.annotation.CallSuper;
+import android.annotation.NonNull;
 import android.app.ActivityManager;
 import android.content.Context;
 import android.content.Intent;
@@ -41,7 +43,6 @@
 import android.util.Log;
 import android.util.SparseArray;
 
-import androidx.annotation.NonNull;
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleOwner;
 import androidx.lifecycle.LifecycleRegistry;
@@ -63,6 +64,7 @@
 import com.android.systemui.qs.PagedTileLayout.TilePage;
 import com.android.systemui.qs.QSHost;
 import com.android.systemui.qs.QuickStatusBarHeader;
+import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tiles.QSSettingsControllerKt;
 import com.android.systemui.qs.tiles.QSSettingsPanel;
 
@@ -95,6 +97,7 @@
     private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class);
     private final StatusBarStateController
             mStatusBarStateController = Dependency.get(StatusBarStateController.class);
+    private final QSLogger mQSLogger;
 
     private final ArrayList<Callback> mCallbacks = new ArrayList<>();
     private final Object mStaleListener = new Object();
@@ -109,10 +112,31 @@
 
     private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this);
 
+    /**
+     * Provides a new {@link TState} of the appropriate type to use between this tile and the
+     * corresponding view.
+     *
+     * @return new state to use by the tile.
+     */
     public abstract TState newTileState();
 
+    /**
+     * Handles clicks by the user.
+     *
+     * Calls to the controller should be made here to set the new state of the device.
+     */
     abstract protected void handleClick();
 
+    /**
+     * Update state of the tile based on device state
+     *
+     * Called whenever the state of the tile needs to be updated, either after user
+     * interaction or from callbacks from the controller. It populates {@code state} with the
+     * information to display to the user.
+     *
+     * @param state {@link TState} to populate with information to display
+     * @param arg additional arguments needed to populate {@code state}
+     */
     abstract protected void handleUpdateState(TState state, Object arg);
 
     /**
@@ -135,6 +159,7 @@
         mState = newTileState();
         mTmpState = newTileState();
         mQSSettingsPanelOption = QSSettingsControllerKt.getQSSettingsPanelOption();
+        mQSLogger = host.getQSLogger();
     }
 
     protected final void resetStates() {
@@ -177,6 +202,12 @@
         return mHost;
     }
 
+    /**
+     * Return the {@link QSIconView} to be used by this tile's view.
+     *
+     * @param context view context for the view
+     * @return icon view for this tile
+     */
     public QSIconView createTileView(Context context) {
         return new QSIconViewImpl(context);
     }
@@ -216,6 +247,7 @@
         mMetricsLogger.write(populate(new LogMaker(ACTION_QS_CLICK).setType(TYPE_ACTION)
                 .addTaggedData(FIELD_STATUS_BAR_STATE,
                         mStatusBarStateController.getState())));
+        mQSLogger.logTileClick(mTileSpec, mStatusBarStateController.getState(), mState.state);
         mHandler.sendEmptyMessage(H.CLICK);
     }
 
@@ -223,6 +255,8 @@
         mMetricsLogger.write(populate(new LogMaker(ACTION_QS_SECONDARY_CLICK).setType(TYPE_ACTION)
                 .addTaggedData(FIELD_STATUS_BAR_STATE,
                         mStatusBarStateController.getState())));
+        mQSLogger.logTileSecondaryClick(mTileSpec, mStatusBarStateController.getState(),
+                mState.state);
         mHandler.sendEmptyMessage(H.SECONDARY_CLICK);
     }
 
@@ -230,6 +264,7 @@
         mMetricsLogger.write(populate(new LogMaker(ACTION_QS_LONG_PRESS).setType(TYPE_ACTION)
                 .addTaggedData(FIELD_STATUS_BAR_STATE,
                         mStatusBarStateController.getState())));
+        mQSLogger.logTileLongClick(mTileSpec, mStatusBarStateController.getState(), mState.state);
         mHandler.sendEmptyMessage(H.LONG_CLICK);
 
         Prefs.putInt(
@@ -298,11 +333,20 @@
         mCallbacks.clear();
     }
 
+    /**
+     * Handles secondary click on the tile.
+     *
+     * Defaults to {@link QSTileImpl#handleClick}
+     */
     protected void handleSecondaryClick() {
         // Default to normal click.
         handleClick();
     }
 
+    /**
+     * Handles long click on the tile by launching the {@link Intent} defined in
+     * {@link QSTileImpl#getLongClickIntent}
+     */
     protected void handleLongClick() {
         if (mQSSettingsPanelOption == QSSettingsPanel.USE_DETAIL) {
             showDetail(true);
@@ -312,12 +356,18 @@
                 getLongClickIntent(), 0);
     }
 
+    /**
+     * Returns an intent to be launched when the tile is long pressed.
+     *
+     * @return the intent to launch
+     */
     public abstract Intent getLongClickIntent();
 
     protected void handleRefreshState(Object arg) {
         handleUpdateState(mTmpState, arg);
         final boolean changed = mTmpState.copyTo(mState);
         if (changed) {
+            mQSLogger.logTileUpdated(mTileSpec, mState);
             handleStateChanged();
         }
         mHandler.removeMessages(H.STALE);
@@ -404,9 +454,15 @@
         mIsFullQs = 0;
     }
 
-    protected abstract void handleSetListening(boolean listening);
+    @CallSuper
+    protected void handleSetListening(boolean listening) {
+        if (mTileSpec != null) {
+            mQSLogger.logTileChangeListening(mTileSpec, listening);
+        }
+    }
 
     protected void handleDestroy() {
+        mQSLogger.logTileDestroyed(mTileSpec, "Handle destroy");
         if (mListeners.size() != 0) {
             handleSetListening(false);
         }
@@ -427,6 +483,10 @@
         }
     }
 
+    /**
+     * Provides a default label for the tile.
+     * @return default label for the tile.
+     */
     public abstract CharSequence getTileLabel();
 
     public static int getColorForState(Context context, int state) {
@@ -547,6 +607,12 @@
         public Drawable getInvisibleDrawable(Context context) {
             return mInvisibleDrawable;
         }
+
+        @Override
+        @NonNull
+        public String toString() {
+            return "DrawableIcon";
+        }
     }
 
     public static class DrawableIconWithRes extends DrawableIcon {
@@ -561,6 +627,12 @@
         public boolean equals(Object o) {
             return o instanceof DrawableIconWithRes && ((DrawableIconWithRes) o).mId == mId;
         }
+
+        @Override
+        @NonNull
+        public String toString() {
+            return String.format("DrawableIconWithRes[resId=0x%08x]", mId);
+        }
     }
 
     public static class ResourceIcon extends Icon {
@@ -597,6 +669,7 @@
         }
 
         @Override
+        @NonNull
         public String toString() {
             return String.format("ResourceIcon[resId=0x%08x]", mResId);
         }
@@ -615,6 +688,12 @@
             // workaround: get a clean state for every new AVD
             return context.getDrawable(mAnimatedResId).getConstantState().newDrawable();
         }
+
+        @Override
+        @NonNull
+        public String toString() {
+            return String.format("AnimationIcon[resId=0x%08x]", mResId);
+        }
     }
 
     /**
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
index 5e297e2..b24fdbf 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
@@ -130,6 +130,7 @@
     }
 
     public void handleSetListening(boolean listening) {
+        super.handleSetListening(listening);
         if (mListening == listening) return;
         mListening = listening;
         if (listening) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
index d62f10d..4449d48 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
@@ -74,6 +74,7 @@
 
     @Override
     public void handleSetListening(boolean listening) {
+        super.handleSetListening(listening);
         mSetting.setListening(listening);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
index 9282a2e..cc7aaea 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
@@ -82,10 +82,6 @@
     }
 
     @Override
-    public void handleSetListening(boolean listening) {
-    }
-
-    @Override
     protected void handleClick() {
         // Secondary clicks are header clicks, just toggle.
         final boolean isEnabled = mState.value;
@@ -134,25 +130,27 @@
         state.label = mContext.getString(R.string.quick_settings_bluetooth_label);
         state.secondaryLabel = TextUtils.emptyIfNull(
                 getSecondaryLabel(enabled, connecting, connected, state.isTransient));
+        state.contentDescription = state.label;
+        state.stateDescription = "";
         if (enabled) {
             if (connected) {
                 state.icon = new BluetoothConnectedTileIcon();
                 if (!TextUtils.isEmpty(mController.getConnectedDeviceName())) {
                     state.label = mController.getConnectedDeviceName();
                 }
-                state.contentDescription =
+                state.stateDescription =
                         mContext.getString(R.string.accessibility_bluetooth_name, state.label)
                                 + ", " + state.secondaryLabel;
             } else if (state.isTransient) {
                 state.icon = ResourceIcon.get(
                         com.android.internal.R.drawable.ic_bluetooth_transient_animation);
-                state.contentDescription = state.secondaryLabel;
+                state.stateDescription = state.secondaryLabel;
             } else {
                 state.icon =
                         ResourceIcon.get(com.android.internal.R.drawable.ic_qs_bluetooth);
                 state.contentDescription = mContext.getString(
-                        R.string.accessibility_quick_settings_bluetooth) + ","
-                        + mContext.getString(R.string.accessibility_not_connected);
+                        R.string.accessibility_quick_settings_bluetooth);
+                state.stateDescription = mContext.getString(R.string.accessibility_not_connected);
             }
             state.state = Tile.STATE_ACTIVE;
         } else {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
index 32b051e..4b53ae2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -97,6 +97,7 @@
 
     @Override
     public void handleSetListening(boolean listening) {
+        super.handleSetListening(listening);
         if (DEBUG) Log.d(TAG, "handleSetListening " + listening);
         if (!listening) {
             mController.setDiscovering(false);
@@ -183,6 +184,7 @@
     protected void handleUpdateState(BooleanState state, Object arg) {
         state.label = mContext.getString(R.string.quick_settings_cast_title);
         state.contentDescription = state.label;
+        state.stateDescription = "";
         state.value = false;
         final List<CastDevice> devices = mController.getCastDevices();
         boolean connecting = false;
@@ -192,8 +194,9 @@
             if (device.state == CastDevice.STATE_CONNECTED) {
                 state.value = true;
                 state.secondaryLabel = getDeviceName(device);
-                state.contentDescription = state.contentDescription + ","
-                        + mContext.getString(R.string.accessibility_cast_name, state.label);
+                state.stateDescription = state.stateDescription + ","
+                        + mContext.getString(
+                                R.string.accessibility_cast_name, state.label);
                 connecting = false;
                 break;
             } else if (device.state == CastDevice.STATE_CONNECTING) {
@@ -217,9 +220,8 @@
             state.state = Tile.STATE_UNAVAILABLE;
             String noWifi = mContext.getString(R.string.quick_settings_cast_no_wifi);
             state.secondaryLabel = noWifi;
-            state.contentDescription = state.contentDescription + ", " + mContext.getString(
-                    R.string.accessibility_quick_settings_not_available, noWifi);
         }
+        state.stateDescription = state.stateDescription + ", " + state.secondaryLabel;
         mDetailAdapter.updateItems(devices);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
index 22470c7..bc03ca6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
@@ -26,6 +26,7 @@
 import android.provider.Settings;
 import android.service.quicksettings.Tile;
 import android.telephony.SubscriptionManager;
+import android.text.Html;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -90,10 +91,6 @@
     }
 
     @Override
-    public void handleSetListening(boolean listening) {
-    }
-
-    @Override
     public Intent getLongClickIntent() {
         if (getState().state == Tile.STATE_UNAVAILABLE) {
             return new Intent(Settings.ACTION_WIRELESS_SETTINGS);
@@ -194,27 +191,24 @@
             state.secondaryLabel = r.getString(R.string.cell_data_off);
         }
 
-
-        // TODO(b/77881974): Instead of switching out the description via a string check for
-        // we need to have two strings provided by the MobileIconGroup.
-        final CharSequence contentDescriptionSuffix;
+        state.contentDescription = state.label;
         if (state.state == Tile.STATE_INACTIVE) {
-            contentDescriptionSuffix = r.getString(R.string.cell_data_off_content_description);
+            // This information is appended later by converting the Tile.STATE_INACTIVE state.
+            state.stateDescription = "";
         } else {
-            contentDescriptionSuffix = state.secondaryLabel;
+            state.stateDescription = state.secondaryLabel;
         }
-
-        state.contentDescription = state.label + ", " + contentDescriptionSuffix;
     }
 
     private CharSequence appendMobileDataType(CharSequence current, CharSequence dataType) {
         if (TextUtils.isEmpty(dataType)) {
-            return current;
+            return Html.fromHtml(current.toString(), 0);
         }
         if (TextUtils.isEmpty(current)) {
-            return dataType;
+            return Html.fromHtml(dataType.toString(), 0);
         }
-        return mContext.getString(R.string.mobile_carrier_text_format, current, dataType);
+        String concat = mContext.getString(R.string.mobile_carrier_text_format, current, dataType);
+        return Html.fromHtml(concat, 0);
     }
 
     private CharSequence getMobileDataContentName(CallbackInfo cb) {
@@ -255,14 +249,17 @@
 
         @Override
         public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
-                int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
-                String description, boolean isWide, int subId, boolean roaming) {
+                int qsType, boolean activityIn, boolean activityOut,
+                CharSequence typeContentDescription,
+                CharSequence typeContentDescriptionHtml, CharSequence description,
+                boolean isWide, int subId, boolean roaming) {
             if (qsIcon == null) {
                 // Not data sim, don't display.
                 return;
             }
             mInfo.dataSubscriptionName = mController.getMobileDataNetworkName();
-            mInfo.dataContentDescription = (description != null) ? typeContentDescription : null;
+            mInfo.dataContentDescription =
+                    (description != null) ? typeContentDescriptionHtml : null;
             mInfo.activityIn = activityIn;
             mInfo.activityOut = activityOut;
             mInfo.roaming = roaming;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
index ecb4048..9c0030d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
@@ -66,6 +66,7 @@
 
     @Override
     public void handleSetListening(boolean listening) {
+        super.handleSetListening(listening);
         mSetting.setListening(listening);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
index 79996bc..8ba6084 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
@@ -50,10 +50,6 @@
     }
 
     @Override
-    public void handleSetListening(boolean listening) {
-    }
-
-    @Override
     public Intent getLongClickIntent() {
         return new Intent(Settings.ACTION_DATA_SAVER_SETTINGS);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
index 52d1a5b3..ebf45a6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
@@ -240,6 +240,8 @@
                 zen != Global.ZEN_MODE_OFF, mController.getConfig(), false));
         state.icon = ResourceIcon.get(com.android.internal.R.drawable.ic_qs_dnd);
         checkIfRestrictionEnforcedByAdminOnly(state, UserManager.DISALLOW_ADJUST_VOLUME);
+        // Keeping the secondaryLabel in contentDescription instead of stateDescription is easier
+        // to understand.
         switch (zen) {
             case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
                 state.contentDescription =
@@ -287,6 +289,7 @@
 
     @Override
     public void handleSetListening(boolean listening) {
+        super.handleSetListening(listening);
         if (mListening == listening) return;
         mListening = listening;
         if (mListening) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
index dafdd89..27ccd7c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
@@ -58,10 +58,6 @@
     }
 
     @Override
-    public void handleSetListening(boolean listening) {
-    }
-
-    @Override
     protected void handleUserSwitch(int newUserId) {
     }
 
@@ -102,14 +98,13 @@
         }
         state.label = mHost.getContext().getString(R.string.quick_settings_flashlight_label);
         state.secondaryLabel = "";
+        state.stateDescription = "";
         if (!mFlashlightController.isAvailable()) {
             state.icon = mIcon;
             state.slash.isSlashed = true;
             state.secondaryLabel = mContext.getString(
                     R.string.quick_settings_flashlight_camera_in_use);
-            state.contentDescription = mContext.getString(
-                    R.string.accessibility_quick_settings_flashlight_unavailable)
-                    + ", " + state.secondaryLabel;
+            state.stateDescription = state.secondaryLabel;
             state.state = Tile.STATE_UNAVAILABLE;
             return;
         }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
index 001e094..1ab77f3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
@@ -17,10 +17,11 @@
 package com.android.systemui.qs.tiles;
 
 import android.annotation.Nullable;
-import android.content.ComponentName;
 import android.content.Intent;
 import android.os.UserManager;
+import android.provider.Settings;
 import android.service.quicksettings.Tile;
+import android.util.Log;
 import android.widget.Switch;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -35,9 +36,6 @@
 
 /** Quick settings tile: Hotspot **/
 public class HotspotTile extends QSTileImpl<BooleanState> {
-    private static final Intent TETHER_SETTINGS = new Intent().setComponent(new ComponentName(
-            "com.android.settings", "com.android.settings.TetherSettings"));
-
     private final Icon mEnabledStatic = ResourceIcon.get(R.drawable.ic_hotspot);
 
     private final HotspotController mHotspotController;
@@ -68,6 +66,7 @@
 
     @Override
     public void handleSetListening(boolean listening) {
+        super.handleSetListening(listening);
         if (mListening == listening) return;
         mListening = listening;
         if (listening) {
@@ -77,7 +76,7 @@
 
     @Override
     public Intent getLongClickIntent() {
-        return new Intent(TETHER_SETTINGS);
+        return new Intent(Settings.ACTION_TETHER_SETTINGS);
     }
 
     @Override
@@ -147,6 +146,7 @@
 
         state.secondaryLabel = getSecondaryLabel(
                 isTileActive, isTransient, isDataSaverEnabled, numConnectedDevices);
+        state.stateDescription = state.secondaryLabel;
     }
 
     @Nullable
@@ -200,6 +200,14 @@
             mCallbackInfo.numConnectedDevices = numDevices;
             refreshState(mCallbackInfo);
         }
+
+        @Override
+        public void onHotspotAvailabilityChanged(boolean available) {
+            if (!available) {
+                Log.d(TAG, "Tile removed. Hotspot no longer available");
+                mHost.removeTile(getTileSpec());
+            }
+        }
     }
 
     /**
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
index fbdca3b..02f364b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
@@ -61,10 +61,6 @@
     }
 
     @Override
-    public void handleSetListening(boolean listening) {
-    }
-
-    @Override
     public Intent getLongClickIntent() {
         return new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
     }
@@ -105,15 +101,8 @@
         }
         state.icon = mIcon;
         state.slash.isSlashed = !state.value;
-        if (locationEnabled) {
-            state.label = mContext.getString(R.string.quick_settings_location_label);
-            state.contentDescription = mContext.getString(
-                    R.string.accessibility_quick_settings_location_on);
-        } else {
-            state.label = mContext.getString(R.string.quick_settings_location_label);
-            state.contentDescription = mContext.getString(
-                    R.string.accessibility_quick_settings_location_off);
-        }
+        state.label = mContext.getString(R.string.quick_settings_location_label);
+        state.contentDescription = state.label;
         state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
         state.expandedAccessibilityClassName = Switch.class.getName();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
index f0140ba..4bee075 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
@@ -57,6 +57,7 @@
 
     @Override
     public void handleSetListening(boolean listening) {
+        super.handleSetListening(listening);
         mListening = listening;
         if (mListening) {
             mBroadcastDispatcher.registerReceiver(mNfcReceiver,
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
index 241b375..bc1c1e1 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
@@ -190,6 +190,7 @@
 
     @Override
     protected void handleSetListening(boolean listening) {
+        super.handleSetListening(listening);
         mIsListening = listening;
         if (listening) {
             mListener.setCallback(this);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
index 7ca1e44..2557226 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
@@ -51,9 +51,6 @@
         return new BooleanState();
     }
 
-    public void handleSetListening(boolean listening) {
-    }
-
     @Override
     public Intent getLongClickIntent() {
         return new Intent(Settings.ACTION_DISPLAY_SETTINGS);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
index 596c3b9..6663237 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
@@ -31,20 +31,26 @@
 /**
  * Quick settings tile for screen recording
  */
-public class ScreenRecordTile extends QSTileImpl<QSTile.BooleanState> {
+public class ScreenRecordTile extends QSTileImpl<QSTile.BooleanState>
+        implements RecordingController.RecordingStateChangeCallback {
     private static final String TAG = "ScreenRecordTile";
     private RecordingController mController;
     private long mMillisUntilFinished = 0;
+    private Callback mCallback = new Callback();
 
     @Inject
     public ScreenRecordTile(QSHost host, RecordingController controller) {
         super(host);
         mController = controller;
+        mController.observe(this, mCallback);
     }
 
     @Override
     public BooleanState newTileState() {
-        return new BooleanState();
+        BooleanState state = new BooleanState();
+        state.label = mContext.getString(R.string.quick_settings_screen_record_label);
+        state.handlesLongClick = false;
+        return state;
     }
 
     @Override
@@ -59,24 +65,13 @@
         refreshState();
     }
 
-    /**
-     * Refresh tile state
-     * @param millisUntilFinished Time until countdown completes, or 0 if not counting down
-     */
-    public void refreshState(long millisUntilFinished) {
-        mMillisUntilFinished = millisUntilFinished;
-        refreshState();
-    }
-
     @Override
     protected void handleUpdateState(BooleanState state, Object arg) {
         boolean isStarting = mController.isStarting();
         boolean isRecording = mController.isRecording();
 
-        state.label = mContext.getString(R.string.quick_settings_screen_record_label);
         state.value = isRecording || isStarting;
         state.state = (isRecording || isStarting) ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
-        state.handlesLongClick = false;
 
         if (isRecording) {
             state.icon = ResourceIcon.get(R.drawable.ic_qs_screenrecord);
@@ -105,10 +100,6 @@
     }
 
     @Override
-    protected void handleSetListening(boolean listening) {
-    }
-
-    @Override
     public CharSequence getTileLabel() {
         return mContext.getString(R.string.quick_settings_screen_record_label);
     }
@@ -117,7 +108,7 @@
         Log.d(TAG, "Starting countdown");
         // Close QS, otherwise the permission dialog appears beneath it
         getHost().collapsePanels();
-        mController.launchRecordPrompt(this);
+        mController.launchRecordPrompt();
     }
 
     private void cancelCountdown() {
@@ -129,4 +120,27 @@
         Log.d(TAG, "Stopping recording from tile");
         mController.stopRecording();
     }
+
+    private final class Callback implements RecordingController.RecordingStateChangeCallback {
+        @Override
+        public void onCountdown(long millisUntilFinished) {
+            mMillisUntilFinished = millisUntilFinished;
+            refreshState();
+        }
+
+        @Override
+        public void onCountdownEnd() {
+            refreshState();
+        }
+
+        @Override
+        public void onRecordingStart() {
+            refreshState();
+        }
+
+        @Override
+        public void onRecordingEnd() {
+            refreshState();
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java
index 8f1769b..b90ca01 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java
@@ -32,10 +32,11 @@
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 
-import javax.inject.Inject;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 
+import javax.inject.Inject;
+
 /**
  * Quick Settings tile for: Night Mode / Dark Theme / Dark Mode.
  *
@@ -141,10 +142,6 @@
     }
 
     @Override
-    protected void handleSetListening(boolean listening) {
-    }
-
-    @Override
     public CharSequence getTileLabel() {
         return getState().label;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java
index 64fe54a..6249f82 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java
@@ -20,7 +20,6 @@
 import android.content.res.Configuration;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
-import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
@@ -43,8 +42,8 @@
 
     private UserAvatarView mAvatar;
     private TextView mName;
-    private Typeface mRegularTypeface;
-    private Typeface mActivatedTypeface;
+    private int mActivatedStyle;
+    private int mRegularStyle;
     private View mRestrictedPadlock;
 
     public UserDetailItemView(Context context) {
@@ -68,10 +67,10 @@
         final int N = a.getIndexCount();
         for (int i = 0; i < N; i++) {
             int attr = a.getIndex(i);
-            if (attr == R.styleable.UserDetailItemView_regularFontFamily) {
-                mRegularTypeface = Typeface.create(a.getString(attr), 0 /* style */);
-            } else if (attr == R.styleable.UserDetailItemView_activatedFontFamily) {
-                mActivatedTypeface = Typeface.create(a.getString(attr), 0 /* style */);
+            if (attr == R.styleable.UserDetailItemView_regularTextAppearance) {
+                mRegularStyle = a.getResourceId(attr, 0);
+            } else if (attr == R.styleable.UserDetailItemView_activatedTextAppearance) {
+                mActivatedStyle = a.getResourceId(attr, 0);
             }
         }
         a.recycle();
@@ -115,35 +114,42 @@
     protected void onFinishInflate() {
         mAvatar = findViewById(R.id.user_picture);
         mName = findViewById(R.id.user_name);
-        if (mRegularTypeface == null) {
-            mRegularTypeface = mName.getTypeface();
+
+        if (mRegularStyle == 0) {
+            mRegularStyle = mName.getExplicitStyle();
         }
-        if (mActivatedTypeface == null) {
-            mActivatedTypeface = mName.getTypeface();
+
+        if (mActivatedStyle == 0) {
+            mActivatedStyle = mName.getExplicitStyle();
         }
-        updateTypeface();
+
+        updateTextStyle();
         mRestrictedPadlock = findViewById(R.id.restricted_padlock);
     }
 
     @Override
     protected void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
-        FontSizeUtils.updateFontSize(mName, R.dimen.qs_detail_item_secondary_text_size);
+        FontSizeUtils.updateFontSize(mName, getFontSizeDimen());
     }
 
     @Override
     protected void drawableStateChanged() {
         super.drawableStateChanged();
-        updateTypeface();
+        updateTextStyle();
     }
 
-    private void updateTypeface() {
+    private void updateTextStyle() {
         boolean activated = ArrayUtils.contains(getDrawableState(), android.R.attr.state_activated);
-        mName.setTypeface(activated ? mActivatedTypeface : mRegularTypeface);
+        mName.setTextAppearance(activated ? mActivatedStyle : mRegularStyle);
     }
 
     @Override
     public boolean hasOverlappingRendering() {
         return false;
     }
+
+    protected int getFontSizeDimen() {
+        return R.dimen.qs_detail_item_secondary_text_size;
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java
index 7c1ffde..aab30d4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java
@@ -73,10 +73,6 @@
     }
 
     @Override
-    public void handleSetListening(boolean listening) {
-    }
-
-    @Override
     public CharSequence getTileLabel() {
         return getState().label;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
index b7ce101..39bfd5a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
@@ -84,10 +84,6 @@
     }
 
     @Override
-    public void handleSetListening(boolean listening) {
-    }
-
-    @Override
     public void setDetailListening(boolean listening) {
         if (listening) {
             mWifiController.addAccessPointCallback(mDetailAdapter);
@@ -195,6 +191,7 @@
         state.activityIn = cb.enabled && cb.activityIn;
         state.activityOut = cb.enabled && cb.activityOut;
         final StringBuffer minimalContentDescription = new StringBuffer();
+        final StringBuffer minimalStateDescription = new StringBuffer();
         final Resources r = mContext.getResources();
         if (isTransient) {
             state.icon = ResourceIcon.get(
@@ -219,13 +216,14 @@
                 mContext.getString(R.string.quick_settings_wifi_label)).append(",");
         if (state.value) {
             if (wifiConnected) {
-                minimalContentDescription.append(cb.wifiSignalContentDescription).append(",");
+                minimalStateDescription.append(cb.wifiSignalContentDescription);
                 minimalContentDescription.append(removeDoubleQuotes(cb.ssid));
                 if (!TextUtils.isEmpty(state.secondaryLabel)) {
                     minimalContentDescription.append(",").append(state.secondaryLabel);
                 }
             }
         }
+        state.stateDescription = minimalStateDescription.toString();
         state.contentDescription = minimalContentDescription.toString();
         state.dualLabelContentDescription = r.getString(
                 R.string.accessibility_quick_settings_open_settings, getTileLabel());
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 7853dc3..318c0c4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
@@ -50,10 +50,6 @@
     }
 
     @Override
-    public void handleSetListening(boolean listening) {
-    }
-
-    @Override
     public Intent getLongClickIntent() {
         return new Intent(Settings.ACTION_MANAGED_PROFILE_SETTINGS);
     }
@@ -103,14 +99,11 @@
         state.icon = mIcon;
         if (state.value) {
             state.slash.isSlashed = false;
-            state.contentDescription =  mContext.getString(
-                    R.string.accessibility_quick_settings_work_mode_on);
         } else {
             state.slash.isSlashed = true;
-            state.contentDescription =  mContext.getString(
-                    R.string.accessibility_quick_settings_work_mode_off);
         }
         state.label = mContext.getString(R.string.quick_settings_work_mode_label);
+        state.contentDescription = state.label;
         state.expandedAccessibilityClassName = Switch.class.getName();
         state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
index 573ea4d..34cad51 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
@@ -352,6 +352,8 @@
             try {
                 Intent intent = new Intent(AccessibilityManager.ACTION_CHOOSE_ACCESSIBILITY_BUTTON);
                 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+                intent.putExtra(AccessibilityManager.EXTRA_SHORTCUT_TYPE,
+                        AccessibilityManager.ACCESSIBILITY_BUTTON);
                 mContext.startActivityAsUser(intent, UserHandle.CURRENT);
             } finally {
                 Binder.restoreCallingIdentity(token);
@@ -378,6 +380,14 @@
                     taskId, mHandler, null);
         }
 
+        @Override
+        public void setSplitScreenMinimized(boolean minimized) {
+            Divider divider = mDividerOptional.get();
+            if (divider != null) {
+                divider.setMinimized(minimized);
+            }
+        }
+
         private boolean verifyCaller(String reason) {
             final int callerId = Binder.getCallingUserHandle().getIdentifier();
             if (callerId != mCurrentBoundedUserId) {
@@ -408,6 +418,9 @@
     private final ServiceConnection mOverviewServiceConnection = new ServiceConnection() {
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
+            if (SysUiState.DEBUG) {
+                Log.d(TAG_OPS, "Overview proxy service connected");
+            }
             mConnectionBackoffAttempts = 0;
             mHandler.removeCallbacks(mDeferredConnectionCallback);
             try {
@@ -560,6 +573,10 @@
                 mNavBarController.getDefaultNavigationBarFragment();
         final NavigationBarView navBarView =
                 mNavBarController.getNavigationBarView(mContext.getDisplayId());
+        if (SysUiState.DEBUG) {
+            Log.d(TAG_OPS, "Updating sysui state flags: navBarFragment=" + navBarFragment
+                    + " navBarView=" + navBarView);
+        }
 
         if (navBarFragment != null) {
             navBarFragment.updateSystemUiStateFlags(-1);
@@ -574,6 +591,10 @@
     }
 
     private void notifySystemUiStateFlags(int flags) {
+        if (SysUiState.DEBUG) {
+            Log.d(TAG_OPS, "Notifying sysui state change to overview service: proxy="
+                    + mOverviewProxy + " flags=" + flags);
+        }
         try {
             if (mOverviewProxy != null) {
                 mOverviewProxy.onSystemUiStateChanged(flags);
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingController.java b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingController.java
index 188501e..8dad08e 100644
--- a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingController.java
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingController.java
@@ -23,7 +23,9 @@
 import android.os.CountDownTimer;
 import android.util.Log;
 
-import com.android.systemui.qs.tiles.ScreenRecordTile;
+import com.android.systemui.statusbar.policy.CallbackController;
+
+import java.util.ArrayList;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -32,7 +34,8 @@
  * Helper class to initiate a screen recording
  */
 @Singleton
-public class RecordingController {
+public class RecordingController
+        implements CallbackController<RecordingController.RecordingStateChangeCallback> {
     private static final String TAG = "RecordingController";
     private static final String SYSUI_PACKAGE = "com.android.systemui";
     private static final String SYSUI_SCREENRECORD_LAUNCHER =
@@ -41,10 +44,11 @@
     private final Context mContext;
     private boolean mIsStarting;
     private boolean mIsRecording;
-    private ScreenRecordTile mTileToUpdate;
     private PendingIntent mStopIntent;
     private CountDownTimer mCountDownTimer = null;
 
+    private ArrayList<RecordingStateChangeCallback> mListeners = new ArrayList<>();
+
     /**
      * Create a new RecordingController
      * @param context Context for the controller
@@ -57,41 +61,45 @@
     /**
      * Show dialog of screen recording options to user.
      */
-    public void launchRecordPrompt(ScreenRecordTile tileToUpdate) {
+    public void launchRecordPrompt() {
         final ComponentName launcherComponent = new ComponentName(SYSUI_PACKAGE,
                 SYSUI_SCREENRECORD_LAUNCHER);
         final Intent intent = new Intent();
         intent.setComponent(launcherComponent);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        intent.putExtra("com.android.systemui.screenrecord.EXTRA_SETTINGS_ONLY", true);
         mContext.startActivity(intent);
-
-        mTileToUpdate = tileToUpdate;
     }
 
     /**
      * Start counting down in preparation to start a recording
-     * @param ms Time in ms to count down
+     * @param ms Total time in ms to wait before starting
+     * @param interval Time in ms per countdown step
      * @param startIntent Intent to start a recording
      * @param stopIntent Intent to stop a recording
      */
-    public void startCountdown(long ms, PendingIntent startIntent, PendingIntent stopIntent) {
+    public void startCountdown(long ms, long interval, PendingIntent startIntent,
+            PendingIntent stopIntent) {
         mIsStarting = true;
         mStopIntent = stopIntent;
 
-        mCountDownTimer = new CountDownTimer(ms, 1000) {
+        mCountDownTimer = new CountDownTimer(ms, interval) {
             @Override
             public void onTick(long millisUntilFinished) {
-                refreshTile(millisUntilFinished);
+                for (RecordingStateChangeCallback cb : mListeners) {
+                    cb.onCountdown(millisUntilFinished);
+                }
             }
 
             @Override
             public void onFinish() {
                 mIsStarting = false;
                 mIsRecording = true;
-                refreshTile();
+                for (RecordingStateChangeCallback cb : mListeners) {
+                    cb.onCountdownEnd();
+                }
                 try {
                     startIntent.send();
+                    Log.d(TAG, "sent start intent");
                 } catch (PendingIntent.CanceledException e) {
                     Log.e(TAG, "Pending intent was cancelled: " + e.getMessage());
                 }
@@ -101,18 +109,6 @@
         mCountDownTimer.start();
     }
 
-    private void refreshTile() {
-        refreshTile(0);
-    }
-
-    private void refreshTile(long millisUntilFinished) {
-        if (mTileToUpdate != null) {
-            mTileToUpdate.refreshState(millisUntilFinished);
-        } else {
-            Log.e(TAG, "No tile to refresh");
-        }
-    }
-
     /**
      * Cancel a countdown in progress. This will not stop the recording if it already started.
      */
@@ -123,7 +119,10 @@
             Log.e(TAG, "Timer was null");
         }
         mIsStarting = false;
-        refreshTile();
+
+        for (RecordingStateChangeCallback cb : mListeners) {
+            cb.onCountdownEnd();
+        }
     }
 
     /**
@@ -146,13 +145,12 @@
      * Stop the recording
      */
     public void stopRecording() {
-        updateState(false);
         try {
             mStopIntent.send();
+            updateState(false);
         } catch (PendingIntent.CanceledException e) {
             Log.e(TAG, "Error stopping: " + e.getMessage());
         }
-        refreshTile();
     }
 
     /**
@@ -161,6 +159,50 @@
      */
     public void updateState(boolean isRecording) {
         mIsRecording = isRecording;
-        refreshTile();
+        for (RecordingStateChangeCallback cb : mListeners) {
+            if (isRecording) {
+                cb.onRecordingStart();
+            } else {
+                cb.onRecordingEnd();
+            }
+        }
+    }
+
+    @Override
+    public void addCallback(RecordingStateChangeCallback listener) {
+        mListeners.add(listener);
+    }
+
+    @Override
+    public void removeCallback(RecordingStateChangeCallback listener) {
+        mListeners.remove(listener);
+    }
+
+    /**
+     * A callback for changes in the screen recording state
+     */
+    public interface RecordingStateChangeCallback {
+        /**
+         * Called when a countdown to recording has updated
+         *
+         * @param millisUntilFinished Time in ms remaining in the countdown
+         */
+        default void onCountdown(long millisUntilFinished) {}
+
+        /**
+         * Called when a countdown to recording has ended. This is a separate method so that if
+         * needed, listeners can handle cases where recording fails to start
+         */
+        default void onCountdownEnd() {}
+
+        /**
+         * Called when a screen recording has started
+         */
+        default void onRecordingStart() {}
+
+        /**
+         * Called when a screen recording has ended
+         */
+        default void onRecordingEnd() {}
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java
index 566f12b..26973d0 100644
--- a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java
@@ -34,6 +34,7 @@
  */
 public class ScreenRecordDialog extends Activity {
     private static final long DELAY_MS = 3000;
+    private static final long INTERVAL_MS = 1000;
 
     private final RecordingController mController;
     private Switch mAudioSwitch;
@@ -83,6 +84,6 @@
                 RecordingService.REQUEST_CODE,
                 RecordingService.getStopIntent(this),
                 PendingIntent.FLAG_UPDATE_CURRENT);
-        mController.startCountdown(DELAY_MS, startIntent, stopIntent);
+        mController.startCountdown(DELAY_MS, INTERVAL_MS, startIntent, stopIntent);
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 880b8f8..9e1e347 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -27,7 +27,6 @@
 import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
 import android.animation.ValueAnimator;
-import android.animation.ValueAnimator.AnimatorUpdateListener;
 import android.annotation.Nullable;
 import android.annotation.SuppressLint;
 import android.app.ActivityManager;
@@ -58,6 +57,7 @@
 import android.provider.DeviceConfig;
 import android.util.DisplayMetrics;
 import android.util.Log;
+import android.util.MathUtils;
 import android.util.Slog;
 import android.view.Display;
 import android.view.LayoutInflater;
@@ -68,7 +68,9 @@
 import android.view.ViewOutlineProvider;
 import android.view.ViewTreeObserver;
 import android.view.WindowManager;
+import android.view.animation.AnimationUtils;
 import android.view.animation.Interpolator;
+import android.widget.FrameLayout;
 import android.widget.HorizontalScrollView;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
@@ -135,15 +137,13 @@
 
     private static final String TAG = "GlobalScreenshot";
 
-    private static final int SCREENSHOT_FLASH_TO_PEAK_DURATION = 130;
-    private static final int SCREENSHOT_DROP_IN_DURATION = 430;
-    private static final int SCREENSHOT_DROP_OUT_DELAY = 500;
-    private static final int SCREENSHOT_DROP_OUT_DURATION = 430;
-    private static final int SCREENSHOT_DROP_OUT_SCALE_DURATION = 370;
-    private static final float BACKGROUND_ALPHA = 0.5f;
-    private static final float SCREENSHOT_DROP_IN_MIN_SCALE = 0.725f;
+    private static final long SCREENSHOT_FLASH_IN_DURATION_MS = 133;
+    private static final long SCREENSHOT_FLASH_OUT_DURATION_MS = 217;
+    private static final long SCREENSHOT_TO_CORNER_X_DURATION_MS = 234;
+    private static final long SCREENSHOT_TO_CORNER_Y_DURATION_MS = 500;
+    private static final long SCREENSHOT_TO_CORNER_SCALE_DURATION_MS = 234;
     private static final float ROUNDED_CORNER_RADIUS = .05f;
-    private static final long SCREENSHOT_CORNER_TIMEOUT_MILLIS = 8000;
+    private static final long SCREENSHOT_CORNER_TIMEOUT_MILLIS = 6000;
     private static final int MESSAGE_CORNER_TIMEOUT = 2;
 
     private final ScreenshotNotificationsController mNotificationsController;
@@ -162,19 +162,24 @@
     private final HorizontalScrollView mActionsContainer;
     private final LinearLayout mActionsView;
     private final ImageView mBackgroundProtection;
+    private final FrameLayout mDismissButton;
 
     private Bitmap mScreenBitmap;
-    private AnimatorSet mScreenshotAnimation;
+    private Animator mScreenshotAnimation;
 
     private float mScreenshotOffsetXPx;
     private float mScreenshotOffsetYPx;
     private float mScreenshotHeightPx;
-    private float mCornerScale;
+    private float mDismissButtonSize;
+    private float mCornerSizeX;
 
     private AsyncTask<Void, Void, Void> mSaveInBgTask;
 
     private MediaActionSound mCameraSound;
 
+    // standard material ease
+    private final Interpolator mFastOutSlowIn;
+
     private final Handler mScreenshotHandler = new Handler(Looper.getMainLooper()) {
         @Override
         public void handleMessage(Message msg) {
@@ -216,19 +221,16 @@
         mActionsView = mScreenshotLayout.findViewById(R.id.global_screenshot_actions);
         mBackgroundProtection = mScreenshotLayout.findViewById(
                 R.id.global_screenshot_actions_background);
+        mDismissButton = mScreenshotLayout.findViewById(R.id.global_screenshot_dismiss_button);
+        mDismissButton.setOnClickListener(view -> clearScreenshot("dismiss_button"));
 
         mScreenshotFlash = mScreenshotLayout.findViewById(R.id.global_screenshot_flash);
         mScreenshotSelectorView = mScreenshotLayout.findViewById(R.id.global_screenshot_selector);
         mScreenshotLayout.setFocusable(true);
         mScreenshotSelectorView.setFocusable(true);
         mScreenshotSelectorView.setFocusableInTouchMode(true);
-        mScreenshotLayout.setOnTouchListener((v, event) -> {
-            if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
-                clearScreenshot("tap_outside");
-            }
-            // Intercept and ignore all touch events
-            return true;
-        });
+        mScreenshotView.setPivotX(0);
+        mScreenshotView.setPivotY(0);
 
         // Setup the window that we are going to use
         mWindowLayoutParams = new WindowManager.LayoutParams(
@@ -252,8 +254,12 @@
         mScreenshotOffsetYPx = resources.getDimensionPixelSize(R.dimen.screenshot_offset_y);
         mScreenshotHeightPx =
                 resources.getDimensionPixelSize(R.dimen.screenshot_action_container_offset_y);
-        mCornerScale = resources.getDimensionPixelSize(R.dimen.global_screenshot_x_scale)
-                / (float) mDisplayMetrics.widthPixels;
+        mDismissButtonSize = resources.getDimensionPixelSize(
+                R.dimen.screenshot_dismiss_button_tappable_size);
+        mCornerSizeX = resources.getDimensionPixelSize(R.dimen.global_screenshot_x_scale);
+
+        mFastOutSlowIn =
+                AnimationUtils.loadInterpolator(mContext, android.R.interpolator.fast_out_slow_in);
 
         // Setup the Camera shutter sound
         mCameraSound = new MediaActionSound();
@@ -271,6 +277,9 @@
         Rect actionsRect = new Rect();
         mActionsContainer.getBoundsOnScreen(actionsRect);
         touchRegion.op(actionsRect, Region.Op.UNION);
+        Rect dismissRect = new Rect();
+        mDismissButton.getBoundsOnScreen(dismissRect);
+        touchRegion.op(dismissRect, Region.Op.UNION);
 
         inoutInfo.touchableRegion.set(touchRegion);
     }
@@ -302,7 +311,9 @@
         int width = crop.width();
         int height = crop.height();
 
-        takeScreenshot(SurfaceControl.screenshot(crop, width, height, rot), finisher, null);
+        Rect screenRect = new Rect(0, 0, mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels);
+
+        takeScreenshot(SurfaceControl.screenshot(crop, width, height, rot), finisher, screenRect);
     }
 
     private void takeScreenshot(Bitmap screenshot, Consumer<Uri> finisher, Rect screenRect) {
@@ -322,7 +333,7 @@
         mScreenshotLayout.getViewTreeObserver().addOnComputeInternalInsetsListener(this);
 
         // Start the post-screenshot animation
-        startAnimation(finisher, mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels,
+        startAnimation(finisher, screenRect.width(), screenRect.height(),
                 screenRect);
     }
 
@@ -403,11 +414,11 @@
         mScreenshotLayout.getViewTreeObserver().removeOnComputeInternalInsetsListener(this);
 
         // Clear any references to the bitmap
-        mScreenBitmap = null;
         mScreenshotView.setImageBitmap(null);
         mActionsContainer.setVisibility(View.GONE);
         mBackgroundView.setVisibility(View.GONE);
         mBackgroundProtection.setAlpha(0f);
+        mDismissButton.setVisibility(View.GONE);
         mScreenshotView.setVisibility(View.GONE);
         mScreenshotView.setLayerType(View.LAYER_TYPE_NONE, null);
     }
@@ -426,39 +437,34 @@
 
         // Add the view for the animation
         mScreenshotView.setImageBitmap(mScreenBitmap);
-        mScreenshotLayout.requestFocus();
 
-        // Setup the animation with the screenshot just taken
-        if (mScreenshotAnimation != null) {
-            if (mScreenshotAnimation.isStarted()) {
-                mScreenshotAnimation.end();
-            }
-            mScreenshotAnimation.removeAllListeners();
-        }
+        mScreenshotAnimation = createScreenshotDropInAnimation(w, h, screenRect);
 
-        ValueAnimator screenshotDropInAnim = screenRect != null ? createRectAnimation(screenRect)
-                : createScreenshotDropInAnimation();
-        ValueAnimator screenshotFadeOutAnim = createScreenshotToCornerAnimation(w, h);
-        mScreenshotAnimation = new AnimatorSet();
-        mScreenshotAnimation.playSequentially(screenshotDropInAnim, screenshotFadeOutAnim);
-        mScreenshotAnimation.addListener(new AnimatorListenerAdapter() {
+        saveScreenshotInWorkerThread(finisher, new ActionsReadyListener() {
             @Override
-            public void onAnimationEnd(Animator animation) {
-                // Save the screenshot once we have a bit of time now
-                saveScreenshotInWorkerThread(finisher, new ActionsReadyListener() {
-                    @Override
-                    void onActionsReady(Uri uri, List<Notification.Action> smartActions,
-                            List<Notification.Action> actions) {
-                        if (uri == null) {
-                            mNotificationsController.notifyScreenshotError(
-                                    R.string.screenshot_failed_to_capture_text);
+            void onActionsReady(Uri uri, List<Notification.Action> smartActions,
+                    List<Notification.Action> actions) {
+                if (uri == null) {
+                    mNotificationsController.notifyScreenshotError(
+                            R.string.screenshot_failed_to_capture_text);
+                } else {
+                    mScreenshotHandler.post(() -> {
+                        if (mScreenshotAnimation != null && mScreenshotAnimation.isRunning()) {
+                            mScreenshotAnimation.addListener(
+                                    new AnimatorListenerAdapter() {
+                                        @Override
+                                        public void onAnimationEnd(Animator animation) {
+                                            super.onAnimationEnd(animation);
+                                            createScreenshotActionsShadeAnimation(
+                                                    smartActions, actions).start();
+                                        }
+                                    });
                         } else {
-                            mScreenshotHandler.post(() ->
-                                    createScreenshotActionsShadeAnimation(smartActions,
-                                            actions).start());
+                            createScreenshotActionsShadeAnimation(smartActions,
+                                    actions).start();
                         }
-                    }
-                });
+                    });
+                }
                 mScreenshotHandler.removeMessages(MESSAGE_CORNER_TIMEOUT);
                 mScreenshotHandler.sendMessageDelayed(
                         mScreenshotHandler.obtainMessage(MESSAGE_CORNER_TIMEOUT),
@@ -475,147 +481,76 @@
         });
     }
 
-    private ValueAnimator createRectAnimation(Rect rect) {
-        mScreenshotView.setAdjustViewBounds(true);
-        mScreenshotView.setMaxHeight(rect.height());
-        mScreenshotView.setMaxWidth(rect.width());
+    private AnimatorSet createScreenshotDropInAnimation(int width, int height, Rect bounds) {
+        float cornerScale = mCornerSizeX / (float) width;
 
-        final float flashPeakDurationPct = ((float) (SCREENSHOT_FLASH_TO_PEAK_DURATION)
-                / SCREENSHOT_DROP_IN_DURATION);
-        final float flashDurationPct = 2f * flashPeakDurationPct;
-        final Interpolator scaleInterpolator = x -> {
-            // We start scaling when the flash is at it's peak
-            if (x < flashPeakDurationPct) {
-                return 0;
+        AnimatorSet dropInAnimation = new AnimatorSet();
+        ValueAnimator flashInAnimator = ValueAnimator.ofFloat(0, 1);
+        flashInAnimator.setDuration(SCREENSHOT_FLASH_IN_DURATION_MS);
+        flashInAnimator.setInterpolator(mFastOutSlowIn);
+        flashInAnimator.addUpdateListener(animation ->
+                mScreenshotFlash.setAlpha((float) animation.getAnimatedValue()));
+
+        ValueAnimator flashOutAnimator = ValueAnimator.ofFloat(1, 0);
+        flashOutAnimator.setDuration(SCREENSHOT_FLASH_OUT_DURATION_MS);
+        flashOutAnimator.setInterpolator(mFastOutSlowIn);
+        flashOutAnimator.addUpdateListener(animation ->
+                mScreenshotFlash.setAlpha((float) animation.getAnimatedValue()));
+
+        final PointF startPos = new PointF((float) bounds.left, (float) bounds.top);
+        final PointF finalPos = new PointF(mScreenshotOffsetXPx,
+                mDisplayMetrics.heightPixels - mScreenshotOffsetYPx - height * cornerScale);
+
+        ValueAnimator toCorner = ValueAnimator.ofFloat(0, 1);
+        toCorner.setDuration(SCREENSHOT_TO_CORNER_Y_DURATION_MS);
+        float xPositionPct =
+                SCREENSHOT_TO_CORNER_X_DURATION_MS / (float) SCREENSHOT_TO_CORNER_Y_DURATION_MS;
+        float scalePct =
+                SCREENSHOT_TO_CORNER_SCALE_DURATION_MS / (float) SCREENSHOT_TO_CORNER_Y_DURATION_MS;
+        toCorner.addUpdateListener(animation -> {
+            float t = animation.getAnimatedFraction();
+            if (t < scalePct) {
+                float scale = MathUtils.lerp(
+                        1, cornerScale, mFastOutSlowIn.getInterpolation(t / scalePct));
+                mScreenshotView.setScaleX(scale);
+                mScreenshotView.setScaleY(scale);
             }
-            return (x - flashDurationPct) / (1f - flashDurationPct);
-        };
 
-        ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
-        anim.setDuration(SCREENSHOT_DROP_IN_DURATION);
-        anim.addListener(new AnimatorListenerAdapter() {
+            if (t < xPositionPct) {
+                mScreenshotView.setX(MathUtils.lerp(
+                        startPos.x, finalPos.x, mFastOutSlowIn.getInterpolation(t / xPositionPct)));
+            }
+            mScreenshotView.setY(MathUtils.lerp(
+                    startPos.y, finalPos.y, mFastOutSlowIn.getInterpolation(t)));
+        });
+
+        toCorner.addListener(new AnimatorListenerAdapter() {
             @Override
             public void onAnimationStart(Animator animation) {
-                mBackgroundView.setAlpha(0f);
-                mBackgroundView.setVisibility(View.VISIBLE);
-                mScreenshotView.setAlpha(0f);
-                mScreenshotView.setElevation(0f);
-                mScreenshotView.setTranslationX(0f);
-                mScreenshotView.setTranslationY(0f);
-                mScreenshotView.setScaleX(1f);
-                mScreenshotView.setScaleY(1f);
+                super.onAnimationStart(animation);
                 mScreenshotView.setVisibility(View.VISIBLE);
             }
         });
-        anim.addUpdateListener(animation -> {
-            float t = (Float) animation.getAnimatedValue();
-            mBackgroundView.setAlpha(scaleInterpolator.getInterpolation(t) * BACKGROUND_ALPHA);
-            mScreenshotView.setAlpha(t);
-        });
-        return anim;
-    }
 
-    private ValueAnimator createScreenshotDropInAnimation() {
-        final float flashPeakDurationPct = ((float) (SCREENSHOT_FLASH_TO_PEAK_DURATION)
-                / SCREENSHOT_DROP_IN_DURATION);
-        final float flashDurationPct = 2f * flashPeakDurationPct;
-        final Interpolator flashAlphaInterpolator = new Interpolator() {
-            @Override
-            public float getInterpolation(float x) {
-                // Flash the flash view in and out quickly
-                if (x <= flashDurationPct) {
-                    return (float) Math.sin(Math.PI * (x / flashDurationPct));
-                }
-                return 0;
-            }
-        };
-        final Interpolator scaleInterpolator = new Interpolator() {
-            @Override
-            public float getInterpolation(float x) {
-                // We start scaling when the flash is at it's peak
-                if (x < flashPeakDurationPct) {
-                    return 0;
-                }
-                return (x - flashDurationPct) / (1f - flashDurationPct);
-            }
-        };
+        mScreenshotFlash.setAlpha(0f);
+        mScreenshotFlash.setVisibility(View.VISIBLE);
 
-        ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
-        anim.setDuration(SCREENSHOT_DROP_IN_DURATION);
-        anim.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationStart(Animator animation) {
-                mBackgroundView.setAlpha(0f);
-                mBackgroundView.setVisibility(View.VISIBLE);
-                mScreenshotView.setAlpha(0f);
-                mScreenshotView.setTranslationX(0f);
-                mScreenshotView.setTranslationY(0f);
-                mScreenshotView.setScaleX(1);
-                mScreenshotView.setScaleY(1);
-                mScreenshotView.setVisibility(View.VISIBLE);
-                mScreenshotFlash.setAlpha(0f);
-                mScreenshotFlash.setVisibility(View.VISIBLE);
-            }
+        dropInAnimation.play(flashOutAnimator).after(flashInAnimator);
+        dropInAnimation.play(flashOutAnimator).with(toCorner);
 
+        dropInAnimation.addListener(new AnimatorListenerAdapter() {
             @Override
             public void onAnimationEnd(Animator animation) {
-                mScreenshotFlash.setVisibility(View.GONE);
+                super.onAnimationEnd(animation);
+                Rect bounds = new Rect();
+                mScreenshotView.getBoundsOnScreen(bounds);
+                mDismissButton.setX(bounds.right - mDismissButtonSize / 2f);
+                mDismissButton.setY(bounds.top - mDismissButtonSize / 2f);
+                mDismissButton.setVisibility(View.VISIBLE);
             }
         });
-        anim.addUpdateListener(new AnimatorUpdateListener() {
-            @Override
-            public void onAnimationUpdate(ValueAnimator animation) {
-                float t = (Float) animation.getAnimatedValue();
-                float scaleT = 1 - (scaleInterpolator.getInterpolation(t)
-                        * (1 - SCREENSHOT_DROP_IN_MIN_SCALE));
-                mBackgroundView.setAlpha(scaleInterpolator.getInterpolation(t) * BACKGROUND_ALPHA);
-                mScreenshotView.setAlpha(t);
-                mScreenshotView.setScaleX(scaleT);
-                mScreenshotView.setScaleY(scaleT);
-                mScreenshotFlash.setAlpha(flashAlphaInterpolator.getInterpolation(t));
-            }
-        });
-        return anim;
-    }
 
-    private ValueAnimator createScreenshotToCornerAnimation(int w, int h) {
-        ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
-        anim.setStartDelay(SCREENSHOT_DROP_OUT_DELAY);
-
-        final float scaleDurationPct =
-                (float) SCREENSHOT_DROP_OUT_SCALE_DURATION / SCREENSHOT_DROP_OUT_DURATION;
-        final Interpolator scaleInterpolator = new Interpolator() {
-            @Override
-            public float getInterpolation(float x) {
-                if (x < scaleDurationPct) {
-                    // Decelerate, and scale the input accordingly
-                    return (float) (1f - Math.pow(1f - (x / scaleDurationPct), 2f));
-                }
-                return 1f;
-            }
-        };
-
-        // Determine the bounds of how to scale
-        float halfScreenWidth = w / 2f;
-        float halfScreenHeight = h / 2f;
-        final PointF finalPos = new PointF(
-                -halfScreenWidth + mCornerScale * halfScreenWidth + mScreenshotOffsetXPx,
-                halfScreenHeight - mCornerScale * halfScreenHeight - mScreenshotOffsetYPx);
-
-        // Animate the screenshot to the bottom left corner
-        anim.setDuration(SCREENSHOT_DROP_OUT_DURATION);
-        anim.addUpdateListener(animation -> {
-            float t = (Float) animation.getAnimatedValue();
-            float scaleT = (SCREENSHOT_DROP_IN_MIN_SCALE)
-                    - scaleInterpolator.getInterpolation(t)
-                    * (SCREENSHOT_DROP_IN_MIN_SCALE - mCornerScale);
-            mBackgroundView.setAlpha((1f - t) * BACKGROUND_ALPHA);
-            mScreenshotView.setScaleX(scaleT);
-            mScreenshotView.setScaleY(scaleT);
-            mScreenshotView.setTranslationX(t * finalPos.x);
-            mScreenshotView.setTranslationY(t * finalPos.y);
-        });
-        return anim;
+        return dropInAnimation;
     }
 
     private ValueAnimator createScreenshotActionsShadeAnimation(
@@ -686,14 +621,6 @@
             mBackgroundProtection.setAlpha(t);
             mActionsContainer.setY(mDisplayMetrics.heightPixels - actionsViewHeight * t);
         });
-        animator.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                super.onAnimationEnd(animation);
-                mScreenshotView.requestFocus();
-                mScreenshotView.setElevation(50);
-            }
-        });
         return animator;
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java b/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java
index e7e1ba8..7de70f5 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java
@@ -38,7 +38,6 @@
 import android.os.Environment;
 import android.os.Handler;
 import android.os.ParcelFileDescriptor;
-import android.os.Process;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -124,10 +123,6 @@
             return null;
         }
 
-        // By default, AsyncTask sets the worker thread to have background thread priority,
-        // so bump it back up so that we save a little quicker.
-        Process.setThreadPriority(Process.THREAD_PRIORITY_FOREGROUND);
-
         ContentResolver resolver = mContext.getContentResolver();
         Bitmap image = mParams.image;
         Resources r = mContext.getResources();
@@ -224,11 +219,6 @@
             mParams.mActionsReadyListener.onActionsReady(null, null, null);
         }
 
-        // Recycle the bitmap data
-        if (image != null) {
-            image.recycle();
-        }
-
         return null;
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
index b1f1f38..821144a 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
@@ -17,8 +17,8 @@
 package com.android.systemui.settings;
 
 import static com.android.settingslib.display.BrightnessUtils.GAMMA_SPACE_MAX;
-import static com.android.settingslib.display.BrightnessUtils.convertGammaToLinear;
-import static com.android.settingslib.display.BrightnessUtils.convertLinearToGamma;
+import static com.android.settingslib.display.BrightnessUtils.convertGammaToLinearFloat;
+import static com.android.settingslib.display.BrightnessUtils.convertLinearToGammaFloat;
 
 import android.animation.ValueAnimator;
 import android.content.ContentResolver;
@@ -39,7 +39,9 @@
 import android.service.vr.IVrManager;
 import android.service.vr.IVrStateCallbacks;
 import android.util.Log;
+import android.util.MathUtils;
 
+import com.android.internal.BrightnessSynchronizer;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settingslib.RestrictedLockUtilsInternal;
@@ -58,12 +60,21 @@
     private static final int MSG_DETACH_LISTENER = 4;
     private static final int MSG_VR_MODE_CHANGED = 5;
 
-    private final int mMinimumBacklight;
-    private final int mMaximumBacklight;
-    private final int mDefaultBacklight;
-    private final int mMinimumBacklightForVr;
-    private final int mMaximumBacklightForVr;
-    private final int mDefaultBacklightForVr;
+    private static final Uri BRIGHTNESS_MODE_URI =
+            Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE);
+    private static final Uri BRIGHTNESS_URI =
+            Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);
+    private static final Uri BRIGHTNESS_FLOAT_URI =
+            Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FLOAT);
+    private static final Uri BRIGHTNESS_FOR_VR_FLOAT_URI =
+            Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT);
+
+    private final float mMinimumBacklight;
+    private final float mMaximumBacklight;
+    private final float mDefaultBacklight;
+    private final float mMinimumBacklightForVr;
+    private final float mMaximumBacklightForVr;
+    private final float mDefaultBacklightForVr;
 
     private final Context mContext;
     private final ToggleSlider mControl;
@@ -90,16 +101,9 @@
         public void onBrightnessLevelChanged();
     }
 
-    /** ContentObserver to watch brightness **/
+    /** ContentObserver to watch brightness */
     private class BrightnessObserver extends ContentObserver {
 
-        private final Uri BRIGHTNESS_MODE_URI =
-                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE);
-        private final Uri BRIGHTNESS_URI =
-                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);
-        private final Uri BRIGHTNESS_FOR_VR_URI =
-                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FOR_VR);
-
         public BrightnessObserver(Handler handler) {
             super(handler);
         }
@@ -116,9 +120,9 @@
             if (BRIGHTNESS_MODE_URI.equals(uri)) {
                 mBackgroundHandler.post(mUpdateModeRunnable);
                 mBackgroundHandler.post(mUpdateSliderRunnable);
-            } else if (BRIGHTNESS_URI.equals(uri)) {
+            } else if (BRIGHTNESS_FLOAT_URI.equals(uri)) {
                 mBackgroundHandler.post(mUpdateSliderRunnable);
-            } else if (BRIGHTNESS_FOR_VR_URI.equals(uri)) {
+            } else if (BRIGHTNESS_FOR_VR_FLOAT_URI.equals(uri)) {
                 mBackgroundHandler.post(mUpdateSliderRunnable);
             } else {
                 mBackgroundHandler.post(mUpdateModeRunnable);
@@ -139,7 +143,10 @@
                     BRIGHTNESS_URI,
                     false, this, UserHandle.USER_ALL);
             cr.registerContentObserver(
-                    BRIGHTNESS_FOR_VR_URI,
+                    BRIGHTNESS_FLOAT_URI,
+                    false, this, UserHandle.USER_ALL);
+            cr.registerContentObserver(
+                    BRIGHTNESS_FOR_VR_FLOAT_URI,
                     false, this, UserHandle.USER_ALL);
         }
 
@@ -229,18 +236,21 @@
     private final Runnable mUpdateSliderRunnable = new Runnable() {
         @Override
         public void run() {
-            final int val;
+            final float valFloat;
             final boolean inVrMode = mIsVrModeEnabled;
             if (inVrMode) {
-                val = Settings.System.getIntForUser(mContext.getContentResolver(),
-                        Settings.System.SCREEN_BRIGHTNESS_FOR_VR, mDefaultBacklightForVr,
+                valFloat = Settings.System.getFloatForUser(mContext.getContentResolver(),
+                        Settings.System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT, mDefaultBacklightForVr,
                         UserHandle.USER_CURRENT);
             } else {
-                val = Settings.System.getIntForUser(mContext.getContentResolver(),
-                        Settings.System.SCREEN_BRIGHTNESS, mDefaultBacklight,
+                valFloat = Settings.System.getFloatForUser(mContext.getContentResolver(),
+                        Settings.System.SCREEN_BRIGHTNESS_FLOAT, mDefaultBacklight,
                         UserHandle.USER_CURRENT);
             }
-            mHandler.obtainMessage(MSG_UPDATE_SLIDER, val, inVrMode ? 1 : 0).sendToTarget();
+            // Value is passed as intbits, since this is what the message takes.
+            final int valueAsIntBits = Float.floatToIntBits(valFloat);
+            mHandler.obtainMessage(MSG_UPDATE_SLIDER, valueAsIntBits,
+                    inVrMode ? 1 : 0).sendToTarget();
         }
     };
 
@@ -259,7 +269,7 @@
             try {
                 switch (msg.what) {
                     case MSG_UPDATE_SLIDER:
-                        updateSlider(msg.arg1, msg.arg2 != 0);
+                        updateSlider(Float.intBitsToFloat(msg.arg1), msg.arg2 != 0);
                         break;
                     case MSG_SET_CHECKED:
                         mControl.setChecked(msg.arg1 != 0);
@@ -298,12 +308,19 @@
         mBrightnessObserver = new BrightnessObserver(mHandler);
 
         PowerManager pm = context.getSystemService(PowerManager.class);
-        mMinimumBacklight = pm.getMinimumScreenBrightnessSetting();
-        mMaximumBacklight = pm.getMaximumScreenBrightnessSetting();
-        mDefaultBacklight = pm.getDefaultScreenBrightnessSetting();
-        mMinimumBacklightForVr = pm.getMinimumScreenBrightnessForVrSetting();
-        mMaximumBacklightForVr = pm.getMaximumScreenBrightnessForVrSetting();
-        mDefaultBacklightForVr = pm.getDefaultScreenBrightnessForVrSetting();
+        mMinimumBacklight = pm.getBrightnessConstraint(
+                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
+        mMaximumBacklight = pm.getBrightnessConstraint(
+                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM);
+        mDefaultBacklight = pm.getBrightnessConstraint(
+                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT);
+        mMinimumBacklightForVr = pm.getBrightnessConstraint(
+                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM_VR);
+        mMaximumBacklightForVr = pm.getBrightnessConstraint(
+                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM_VR);
+        mDefaultBacklightForVr = pm.getBrightnessConstraint(
+                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_VR);
+
 
         mAutomaticAvailable = context.getResources().getBoolean(
                 com.android.internal.R.bool.config_automatic_brightness_available);
@@ -344,37 +361,39 @@
             mSliderAnimator.cancel();
         }
 
-        final int min;
-        final int max;
+        final float minBacklight;
+        final float maxBacklight;
         final int metric;
-        final String setting;
+        final String settingToChange;
 
         if (mIsVrModeEnabled) {
             metric = MetricsEvent.ACTION_BRIGHTNESS_FOR_VR;
-            min = mMinimumBacklightForVr;
-            max = mMaximumBacklightForVr;
-            setting = Settings.System.SCREEN_BRIGHTNESS_FOR_VR;
+            minBacklight = mMinimumBacklightForVr;
+            maxBacklight = mMaximumBacklightForVr;
+            settingToChange = Settings.System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT;
         } else {
             metric = mAutomatic
                     ? MetricsEvent.ACTION_BRIGHTNESS_AUTO
                     : MetricsEvent.ACTION_BRIGHTNESS;
-            min = mMinimumBacklight;
-            max = mMaximumBacklight;
-            setting = Settings.System.SCREEN_BRIGHTNESS;
+            minBacklight = mMinimumBacklight;
+            maxBacklight = mMaximumBacklight;
+            settingToChange = Settings.System.SCREEN_BRIGHTNESS_FLOAT;
         }
-
-        final int val = convertGammaToLinear(value, min, max);
-
+        final float valFloat = MathUtils.min(convertGammaToLinearFloat(value,
+                minBacklight, maxBacklight),
+                1.0f);
         if (stopTracking) {
-            MetricsLogger.action(mContext, metric, val);
-        }
+            // TODO(brightnessfloat): change to use float value instead.
+            MetricsLogger.action(mContext, metric,
+                    BrightnessSynchronizer.brightnessFloatToInt(mContext, valFloat));
 
-        setBrightness(val);
+        }
+        setBrightness(valFloat);
         if (!tracking) {
             AsyncTask.execute(new Runnable() {
                     public void run() {
-                        Settings.System.putIntForUser(mContext.getContentResolver(),
-                                setting, val, UserHandle.USER_CURRENT);
+                        Settings.System.putFloatForUser(mContext.getContentResolver(),
+                                settingToChange, valFloat, UserHandle.USER_CURRENT);
                     }
                 });
         }
@@ -402,7 +421,7 @@
                 mUserTracker.getCurrentUserId());
     }
 
-    private void setBrightness(int brightness) {
+    private void setBrightness(float brightness) {
         mDisplayManager.setTemporaryBrightness(brightness);
     }
 
@@ -413,9 +432,9 @@
         }
     }
 
-    private void updateSlider(int val, boolean inVrMode) {
-        final int min;
-        final int max;
+    private void updateSlider(float brightnessValue, boolean inVrMode) {
+        final float min;
+        final float max;
         if (inVrMode) {
             min = mMinimumBacklightForVr;
             max = mMaximumBacklightForVr;
@@ -423,7 +442,10 @@
             min = mMinimumBacklight;
             max = mMaximumBacklight;
         }
-        if (val == convertGammaToLinear(mControl.getValue(), min, max)) {
+        // convertGammaToLinearFloat returns 0-1
+        if (BrightnessSynchronizer.brightnessFloatToInt(mContext, brightnessValue)
+                == BrightnessSynchronizer.brightnessFloatToInt(mContext,
+                convertGammaToLinearFloat(mControl.getValue(), min, max))) {
             // If we have more resolution on the slider than we do in the actual setting, then
             // multiple slider positions will map to the same setting value. Thus, if we see a
             // setting value here that maps to the current slider position, we don't bother to
@@ -431,7 +453,8 @@
             // change to the user even though it isn't one.
             return;
         }
-        final int sliderVal = convertLinearToGamma(val, min, max);
+        // Returns GAMMA_SPACE_MIN - GAMMA_SPACE_MAX
+        final int sliderVal = convertLinearToGammaFloat(brightnessValue, min, max);
         animateSliderTo(sliderVal);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/shortcut/ShortcutKeyDispatcher.java b/packages/SystemUI/src/com/android/systemui/shortcut/ShortcutKeyDispatcher.java
index 5ae0954..4f20492 100644
--- a/packages/SystemUI/src/com/android/systemui/shortcut/ShortcutKeyDispatcher.java
+++ b/packages/SystemUI/src/com/android/systemui/shortcut/ShortcutKeyDispatcher.java
@@ -22,10 +22,8 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.os.RemoteException;
-import android.util.Log;
 import android.view.IWindowManager;
 import android.view.KeyEvent;
-import android.view.WindowManager;
 import android.view.WindowManagerGlobal;
 
 import com.android.internal.policy.DividerSnapAlgorithm;
@@ -94,29 +92,24 @@
     }
 
     private void handleDockKey(long shortcutCode) {
-        try {
-            int dockSide = mWindowManagerService.getDockedStackSide();
-            if (dockSide == WindowManager.DOCKED_INVALID) {
-                // Split the screen
-                mRecents.splitPrimaryTask((shortcutCode == SC_DOCK_LEFT)
-                        ? SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT
-                        : SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT, null, -1);
-            } else {
-                // If there is already a docked window, we respond by resizing the docking pane.
-                DividerView dividerView = mDivider.getView();
-                DividerSnapAlgorithm snapAlgorithm = dividerView.getSnapAlgorithm();
-                int dividerPosition = dividerView.getCurrentPosition();
-                DividerSnapAlgorithm.SnapTarget currentTarget =
-                        snapAlgorithm.calculateNonDismissingSnapTarget(dividerPosition);
-                DividerSnapAlgorithm.SnapTarget target = (shortcutCode == SC_DOCK_LEFT)
-                        ? snapAlgorithm.getPreviousTarget(currentTarget)
-                        : snapAlgorithm.getNextTarget(currentTarget);
-                dividerView.startDragging(true /* animate */, false /* touching */);
-                dividerView.stopDragging(target.position, 0f, false /* avoidDismissStart */,
-                        true /* logMetrics */);
-            }
-        } catch (RemoteException e) {
-            Log.e(TAG, "handleDockKey() failed.");
+        if (mDivider == null || !mDivider.inSplitMode()) {
+            // Split the screen
+            mRecents.splitPrimaryTask((shortcutCode == SC_DOCK_LEFT)
+                    ? SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT
+                    : SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT, null, -1);
+        } else {
+            // If there is already a docked window, we respond by resizing the docking pane.
+            DividerView dividerView = mDivider.getView();
+            DividerSnapAlgorithm snapAlgorithm = dividerView.getSnapAlgorithm();
+            int dividerPosition = dividerView.getCurrentPosition();
+            DividerSnapAlgorithm.SnapTarget currentTarget =
+                    snapAlgorithm.calculateNonDismissingSnapTarget(dividerPosition);
+            DividerSnapAlgorithm.SnapTarget target = (shortcutCode == SC_DOCK_LEFT)
+                    ? snapAlgorithm.getPreviousTarget(currentTarget)
+                    : snapAlgorithm.getNextTarget(currentTarget);
+            dividerView.startDragging(true /* animate */, false /* touching */);
+            dividerView.stopDragging(target.position, 0f, false /* avoidDismissStart */,
+                    true /* logMetrics */);
         }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
index 90cc0e57..2daefbd 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
@@ -17,69 +17,283 @@
 package com.android.systemui.stackdivider;
 
 import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+import static android.view.Display.DEFAULT_DISPLAY;
 
+import android.app.ActivityTaskManager;
 import android.content.Context;
 import android.content.res.Configuration;
+import android.graphics.Rect;
+import android.os.Handler;
 import android.os.RemoteException;
+import android.provider.Settings;
 import android.util.Log;
-import android.view.IDockedStackListener;
+import android.util.Slog;
+import android.view.IWindowContainer;
 import android.view.LayoutInflater;
+import android.view.SurfaceControl;
+import android.view.SurfaceSession;
 import android.view.View;
-import android.view.WindowManagerGlobal;
+import android.view.WindowContainerTransaction;
 
+import com.android.internal.policy.DividerSnapAlgorithm;
 import com.android.systemui.R;
 import com.android.systemui.SystemUI;
+import com.android.systemui.TransactionPool;
 import com.android.systemui.recents.Recents;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.wm.DisplayChangeController;
+import com.android.systemui.wm.DisplayController;
+import com.android.systemui.wm.DisplayImeController;
+import com.android.systemui.wm.DisplayLayout;
+import com.android.systemui.wm.SystemWindows;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
 import java.util.Optional;
+import java.util.function.Consumer;
+
+import javax.inject.Singleton;
 
 import dagger.Lazy;
 
 /**
  * Controls the docked stack divider.
  */
-public class Divider extends SystemUI implements DividerView.DividerCallbacks {
+@Singleton
+public class Divider extends SystemUI implements DividerView.DividerCallbacks,
+        DisplayController.OnDisplaysChangedListener {
     private static final String TAG = "Divider";
+
+    static final boolean DEBUG = true;
+
+    static final int DEFAULT_APP_TRANSITION_DURATION = 336;
+
     private final Optional<Lazy<Recents>> mRecentsOptionalLazy;
 
     private DividerWindowManager mWindowManager;
     private DividerView mView;
     private final DividerState mDividerState = new DividerState();
-    private DockDividerVisibilityListener mDockDividerVisibilityListener;
     private boolean mVisible = false;
     private boolean mMinimized = false;
     private boolean mAdjustedForIme = false;
     private boolean mHomeStackResizable = false;
     private ForcedResizableInfoActivityController mForcedResizableController;
+    private SystemWindows mSystemWindows;
+    final SurfaceSession mSurfaceSession = new SurfaceSession();
+    private DisplayController mDisplayController;
+    private DisplayImeController mImeController;
+    final TransactionPool mTransactionPool;
 
-    public Divider(Context context, Optional<Lazy<Recents>> recentsOptionalLazy) {
+    // Keeps track of real-time split geometry including snap positions and ime adjustments
+    private SplitDisplayLayout mSplitLayout;
+
+    // Transient: this contains the layout calculated for a new rotation requested by WM. This is
+    // kept around so that we can wait for a matching configuration change and then use the exact
+    // layout that we sent back to WM.
+    private SplitDisplayLayout mRotateSplitLayout;
+
+    private Handler mHandler;
+    private KeyguardStateController mKeyguardStateController;
+
+    private final ArrayList<WeakReference<Consumer<Boolean>>> mDockedStackExistsListeners =
+            new ArrayList<>();
+
+    private SplitScreenTaskOrganizer mSplits = new SplitScreenTaskOrganizer(this);
+
+    private DisplayChangeController.OnDisplayChangingListener mRotationController =
+            (display, fromRotation, toRotation, t) -> {
+                DisplayLayout displayLayout =
+                        new DisplayLayout(mDisplayController.getDisplayLayout(display));
+                SplitDisplayLayout sdl = new SplitDisplayLayout(mContext, displayLayout, mSplits);
+                sdl.rotateTo(toRotation);
+                mRotateSplitLayout = sdl;
+                int position = mMinimized ? mView.mSnapTargetBeforeMinimized.position
+                        : mView.getCurrentPosition();
+                DividerSnapAlgorithm snap = sdl.getSnapAlgorithm();
+                final DividerSnapAlgorithm.SnapTarget target =
+                        snap.calculateNonDismissingSnapTarget(position);
+                sdl.resizeSplits(target.position, t);
+
+                if (inSplitMode()) {
+                    WindowManagerProxy.applyHomeTasksMinimized(sdl, mSplits.mSecondary.token, t);
+                }
+            };
+
+    private IWindowContainer mLastImeTarget = null;
+    private boolean mShouldAdjustForIme = false;
+
+    private DisplayImeController.ImePositionProcessor mImePositionProcessor =
+            new DisplayImeController.ImePositionProcessor() {
+                private int mStartTop = 0;
+                private int mFinalTop = 0;
+                @Override
+                public void onImeStartPositioning(int displayId, int imeTop, int finalImeTop,
+                        boolean showing, SurfaceControl.Transaction t) {
+                    mStartTop = imeTop;
+                    mFinalTop = finalImeTop;
+                    if (showing) {
+                        try {
+                            mLastImeTarget = ActivityTaskManager.getTaskOrganizerController()
+                                    .getImeTarget(displayId);
+                            mShouldAdjustForIme = !mSplitLayout.mDisplayLayout.isLandscape()
+                                    && (mLastImeTarget.asBinder()
+                                    == mSplits.mSecondary.token.asBinder());
+                        } catch (RemoteException e) {
+                            Slog.w(TAG, "Failed to get IME target", e);
+                        }
+                    }
+                    if (!mShouldAdjustForIme) {
+                        setAdjustedForIme(false);
+                        return;
+                    }
+                    mView.setAdjustedForIme(showing, showing
+                            ? DisplayImeController.ANIMATION_DURATION_SHOW_MS
+                            : DisplayImeController.ANIMATION_DURATION_HIDE_MS);
+                    // Reposition the server's secondary split position so that it evaluates
+                    // insets properly.
+                    WindowContainerTransaction wct = new WindowContainerTransaction();
+                    if (showing) {
+                        mSplitLayout.updateAdjustedBounds(finalImeTop, imeTop, finalImeTop);
+                        wct.setBounds(mSplits.mSecondary.token, mSplitLayout.mAdjustedSecondary);
+                    } else {
+                        wct.setBounds(mSplits.mSecondary.token, mSplitLayout.mSecondary);
+                    }
+                    try {
+                        ActivityTaskManager.getTaskOrganizerController()
+                                .applyContainerTransaction(wct, null /* organizer */);
+                    } catch (RemoteException e) {
+                    }
+                    setAdjustedForIme(showing);
+                }
+
+                @Override
+                public void onImePositionChanged(int displayId, int imeTop,
+                        SurfaceControl.Transaction t) {
+                    if (!mShouldAdjustForIme) {
+                        return;
+                    }
+                    mSplitLayout.updateAdjustedBounds(imeTop, mStartTop, mFinalTop);
+                    mView.resizeSplitSurfaces(t, mSplitLayout.mAdjustedPrimary,
+                            mSplitLayout.mAdjustedSecondary);
+                    final boolean showing = mFinalTop < mStartTop;
+                    final float progress = ((float) (imeTop - mStartTop)) / (mFinalTop - mStartTop);
+                    final float fraction = showing ? progress : 1.f - progress;
+                    mView.setResizeDimLayer(t, true /* primary */, fraction * 0.3f);
+                }
+
+                @Override
+                public void onImeEndPositioning(int displayId, int imeTop,
+                        boolean showing, SurfaceControl.Transaction t) {
+                    if (!mShouldAdjustForIme) {
+                        return;
+                    }
+                    mSplitLayout.updateAdjustedBounds(imeTop, mStartTop, mFinalTop);
+                    mView.resizeSplitSurfaces(t, mSplitLayout.mAdjustedPrimary,
+                            mSplitLayout.mAdjustedSecondary);
+                    mView.setResizeDimLayer(t, true /* primary */, showing ? 0.3f : 0.f);
+                }
+            };
+
+    public Divider(Context context, Optional<Lazy<Recents>> recentsOptionalLazy,
+            DisplayController displayController, SystemWindows systemWindows,
+            DisplayImeController imeController, Handler handler,
+            KeyguardStateController keyguardStateController, TransactionPool transactionPool) {
         super(context);
+        mDisplayController = displayController;
+        mSystemWindows = systemWindows;
+        mImeController = imeController;
+        mHandler = handler;
+        mKeyguardStateController = keyguardStateController;
         mRecentsOptionalLazy = recentsOptionalLazy;
+        mForcedResizableController = new ForcedResizableInfoActivityController(context, this);
+        mTransactionPool = transactionPool;
     }
 
     @Override
     public void start() {
-        mWindowManager = new DividerWindowManager(mContext);
-        update(mContext.getResources().getConfiguration());
-        mDockDividerVisibilityListener = new DockDividerVisibilityListener();
-        try {
-            WindowManagerGlobal.getWindowManagerService().registerDockedStackListener(
-                    mDockDividerVisibilityListener);
-        } catch (Exception e) {
-            Log.e(TAG, "Failed to register docked stack listener", e);
-        }
-        mForcedResizableController = new ForcedResizableInfoActivityController(mContext);
+        mWindowManager = new DividerWindowManager(mSystemWindows);
+        mDisplayController.addDisplayWindowListener(this);
+        // Hide the divider when keyguard is showing. Even though keyguard/statusbar is above
+        // everything, it is actually transparent except for notifications, so we still need to
+        // hide any surfaces that are below it.
+        // TODO(b/148906453): Figure out keyguard dismiss animation for divider view.
+        mKeyguardStateController.addCallback(new KeyguardStateController.Callback() {
+            @Override
+            public void onUnlockedChanged() {
+
+            }
+
+            @Override
+            public void onKeyguardShowingChanged() {
+                if (!inSplitMode() || mView == null) {
+                    return;
+                }
+                mView.setHidden(mKeyguardStateController.isShowing());
+            }
+
+            @Override
+            public void onKeyguardFadingAwayChanged() {
+
+            }
+        });
+        // Don't initialize the divider or anything until we get the default display.
     }
 
     @Override
-    protected void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
+    public void onDisplayAdded(int displayId) {
+        if (displayId != DEFAULT_DISPLAY) {
+            return;
+        }
+        mSplitLayout = new SplitDisplayLayout(mDisplayController.getDisplayContext(displayId),
+                mDisplayController.getDisplayLayout(displayId), mSplits);
+        mImeController.addPositionProcessor(mImePositionProcessor);
+        mDisplayController.addDisplayChangingController(mRotationController);
+        try {
+            mSplits.init(ActivityTaskManager.getTaskOrganizerController(), mSurfaceSession);
+            // Set starting tile bounds based on middle target
+            final WindowContainerTransaction tct = new WindowContainerTransaction();
+            int midPos = mSplitLayout.getSnapAlgorithm().getMiddleTarget().position;
+            mSplitLayout.resizeSplits(midPos, tct);
+            ActivityTaskManager.getTaskOrganizerController().applyContainerTransaction(tct,
+                    null /* organizer */);
+        } catch (Exception e) {
+            Slog.e(TAG, "Failed to register docked stack listener", e);
+        }
+        update(mDisplayController.getDisplayContext(displayId).getResources().getConfiguration());
+    }
+
+    @Override
+    public void onDisplayConfigurationChanged(int displayId, Configuration newConfig) {
+        if (displayId != DEFAULT_DISPLAY) {
+            return;
+        }
+        mSplitLayout = new SplitDisplayLayout(mDisplayController.getDisplayContext(displayId),
+                mDisplayController.getDisplayLayout(displayId), mSplits);
+        if (mRotateSplitLayout == null) {
+            int midPos = mSplitLayout.getSnapAlgorithm().getMiddleTarget().position;
+            final WindowContainerTransaction tct = new WindowContainerTransaction();
+            mSplitLayout.resizeSplits(midPos, tct);
+            try {
+                ActivityTaskManager.getTaskOrganizerController().applyContainerTransaction(tct,
+                        null /* organizer */);
+            } catch (RemoteException e) {
+            }
+        } else if (mRotateSplitLayout != null
+                && mSplitLayout.mDisplayLayout.rotation()
+                        == mRotateSplitLayout.mDisplayLayout.rotation()) {
+            mSplitLayout.mPrimary = new Rect(mRotateSplitLayout.mPrimary);
+            mSplitLayout.mSecondary = new Rect(mRotateSplitLayout.mSecondary);
+            mRotateSplitLayout = null;
+        }
         update(newConfig);
     }
 
+    Handler getHandler() {
+        return mHandler;
+    }
+
     public DividerView getView() {
         return mView;
     }
@@ -92,18 +306,25 @@
         return mHomeStackResizable;
     }
 
+    /** {@code true} if this is visible */
+    public boolean inSplitMode() {
+        return mView != null && mView.getVisibility() == View.VISIBLE;
+    }
+
     private void addDivider(Configuration configuration) {
+        Context dctx = mDisplayController.getDisplayContext(mContext.getDisplayId());
         mView = (DividerView)
-                LayoutInflater.from(mContext).inflate(R.layout.docked_stack_divider, null);
-        mView.injectDependencies(mWindowManager, mDividerState, this);
+                LayoutInflater.from(dctx).inflate(R.layout.docked_stack_divider, null);
+        DisplayLayout displayLayout = mDisplayController.getDisplayLayout(mContext.getDisplayId());
+        mView.injectDependencies(mWindowManager, mDividerState, this, mSplits, mSplitLayout);
         mView.setVisibility(mVisible ? View.VISIBLE : View.INVISIBLE);
         mView.setMinimizedDockStack(mMinimized, mHomeStackResizable);
-        final int size = mContext.getResources().getDimensionPixelSize(
+        final int size = dctx.getResources().getDimensionPixelSize(
                 com.android.internal.R.dimen.docked_stack_divider_thickness);
         final boolean landscape = configuration.orientation == ORIENTATION_LANDSCAPE;
-        final int width = landscape ? size : MATCH_PARENT;
-        final int height = landscape ? MATCH_PARENT : size;
-        mWindowManager.add(mView, width, height);
+        final int width = landscape ? size : displayLayout.width();
+        final int height = landscape ? displayLayout.height() : size;
+        mWindowManager.add(mView, width, height, mContext.getDisplayId());
     }
 
     private void removeDivider() {
@@ -116,65 +337,86 @@
     private void update(Configuration configuration) {
         removeDivider();
         addDivider(configuration);
-        if (mMinimized) {
+        if (mMinimized && mView != null) {
             mView.setMinimizedDockStack(true, mHomeStackResizable);
             updateTouchable();
         }
     }
 
-    private void updateVisibility(final boolean visible) {
-        mView.post(new Runnable() {
-            @Override
-            public void run() {
-                if (mVisible != visible) {
-                    mVisible = visible;
-                    mView.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
+    void updateVisibility(final boolean visible) {
+        if (mVisible != visible) {
+            mVisible = visible;
+            mView.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
 
-                    // Update state because animations won't finish.
-                    mView.setMinimizedDockStack(mMinimized, mHomeStackResizable);
-                }
+            if (visible) {
+                mView.enterSplitMode(mHomeStackResizable);
+                // Update state because animations won't finish.
+                mView.setMinimizedDockStack(mMinimized, mHomeStackResizable);
+            } else {
+                mView.exitSplitMode();
+                // un-minimize so that next entry triggers minimize anim.
+                mView.setMinimizedDockStack(false /* minimized */, mHomeStackResizable);
             }
-        });
+            // Notify existence listeners
+            synchronized (mDockedStackExistsListeners) {
+                mDockedStackExistsListeners.removeIf(wf -> {
+                    Consumer<Boolean> l = wf.get();
+                    if (l != null) l.accept(visible);
+                    return l == null;
+                });
+            }
+        }
+    }
+
+    private void setHomeStackResizable(boolean resizable) {
+        if (mHomeStackResizable == resizable) {
+            return;
+        }
+        mHomeStackResizable = resizable;
+        if (!inSplitMode()) {
+            return;
+        }
+        WindowManagerProxy.applyHomeTasksMinimized(mSplitLayout, mSplits.mSecondary.token);
     }
 
     private void updateMinimizedDockedStack(final boolean minimized, final long animDuration,
             final boolean isHomeStackResizable) {
-        mView.post(new Runnable() {
-            @Override
-            public void run() {
-                mHomeStackResizable = isHomeStackResizable;
-                if (mMinimized != minimized) {
-                    mMinimized = minimized;
-                    updateTouchable();
-                    if (animDuration > 0) {
-                        mView.setMinimizedDockStack(minimized, animDuration, isHomeStackResizable);
-                    } else {
-                        mView.setMinimizedDockStack(minimized, isHomeStackResizable);
-                    }
-                }
+        setHomeStackResizable(isHomeStackResizable);
+        if (animDuration > 0) {
+            mView.setMinimizedDockStack(minimized, animDuration, isHomeStackResizable);
+        } else {
+            mView.setMinimizedDockStack(minimized, isHomeStackResizable);
+        }
+        updateTouchable();
+    }
+
+    /** Switch to minimized state if appropriate */
+    public void setMinimized(final boolean minimized) {
+        mHandler.post(() -> {
+            if (!inSplitMode()) {
+                return;
             }
+            if (mMinimized == minimized) {
+                return;
+            }
+            mMinimized = minimized;
+            mView.setMinimizedDockStack(minimized, getAnimDuration(), mHomeStackResizable);
+            updateTouchable();
         });
     }
 
-    private void notifyDockedStackExistsChanged(final boolean exists) {
-        mView.post(new Runnable() {
-            @Override
-            public void run() {
-                mForcedResizableController.notifyDockedStackExistsChanged(exists);
-            }
-        });
+    void setAdjustedForIme(boolean adjustedForIme) {
+        if (mAdjustedForIme == adjustedForIme) {
+            return;
+        }
+        mAdjustedForIme = adjustedForIme;
+        updateTouchable();
     }
 
     private void updateTouchable() {
         mWindowManager.setTouchable((mHomeStackResizable || !mMinimized) && !mAdjustedForIme);
     }
 
-    public void onRecentsActivityStarting() {
-        if (mView != null) {
-            mView.onRecentsActivityStarting();
-        }
-    }
-
     /**
      * Workaround for b/62528361, at the time recents has drawn, it may happen before a
      * configuration change to the Divider, and internally, the event will be posted to the
@@ -206,6 +448,9 @@
     }
 
     public void onAppTransitionFinished() {
+        if (mView == null) {
+            return;
+        }
         mForcedResizableController.onAppTransitionFinished();
     }
 
@@ -231,46 +476,66 @@
         pw.print("  mAdjustedForIme="); pw.println(mAdjustedForIme);
     }
 
-    class DockDividerVisibilityListener extends IDockedStackListener.Stub {
+    long getAnimDuration() {
+        float transitionScale = Settings.Global.getFloat(mContext.getContentResolver(),
+                Settings.Global.TRANSITION_ANIMATION_SCALE,
+                mContext.getResources().getFloat(
+                        com.android.internal.R.dimen
+                                .config_appTransitionAnimationDurationScaleDefault));
+        final long transitionDuration = DEFAULT_APP_TRANSITION_DURATION;
+        return (long) (transitionDuration * transitionScale);
+    }
 
-        @Override
-        public void onDividerVisibilityChanged(boolean visible) throws RemoteException {
-            updateVisibility(visible);
+    /** Register a listener that gets called whenever the existence of the divider changes */
+    public void registerInSplitScreenListener(Consumer<Boolean> listener) {
+        listener.accept(inSplitMode());
+        synchronized (mDockedStackExistsListeners) {
+            mDockedStackExistsListeners.add(new WeakReference<>(listener));
         }
+    }
 
-        @Override
-        public void onDockedStackExistsChanged(boolean exists) throws RemoteException {
-            notifyDockedStackExistsChanged(exists);
+    void startEnterSplit() {
+        // Set resizable directly here because applyEnterSplit already resizes home stack.
+        mHomeStackResizable = WindowManagerProxy.applyEnterSplit(mSplits, mSplitLayout);
+    }
+
+    void ensureMinimizedSplit() {
+        final boolean wasMinimized = mMinimized;
+        mMinimized = true;
+        setHomeStackResizable(mSplits.mSecondary.isResizable());
+        if (!inSplitMode()) {
+            // Wasn't in split-mode yet, so enter now.
+            if (DEBUG) {
+                Log.d(TAG, " entering split mode with minimized=true");
+            }
+            updateVisibility(true /* visible */);
+        } else if (!wasMinimized) {
+            if (DEBUG) {
+                Log.d(TAG, " in split mode, but minimizing ");
+            }
+            // Was already in split-mode, update just minimized state.
+            updateMinimizedDockedStack(mMinimized, getAnimDuration(),
+                    mHomeStackResizable);
         }
+    }
 
-        @Override
-        public void onDockedStackMinimizedChanged(boolean minimized, long animDuration,
-                boolean isHomeStackResizable) throws RemoteException {
-            mHomeStackResizable = isHomeStackResizable;
-            updateMinimizedDockedStack(minimized, animDuration, isHomeStackResizable);
+    void ensureNormalSplit() {
+        if (!inSplitMode()) {
+            // Wasn't in split-mode, so enter now.
+            if (DEBUG) {
+                Log.d(TAG, " enter split mode unminimized ");
+            }
+            mMinimized = false;
+            updateVisibility(true /* visible */);
         }
-
-        @Override
-        public void onAdjustedForImeChanged(boolean adjustedForIme, long animDuration)
-                throws RemoteException {
-            mView.post(() -> {
-                if (mAdjustedForIme != adjustedForIme) {
-                    mAdjustedForIme = adjustedForIme;
-                    updateTouchable();
-                    if (!mMinimized) {
-                        if (animDuration > 0) {
-                            mView.setAdjustedForIme(adjustedForIme, animDuration);
-                        } else {
-                            mView.setAdjustedForIme(adjustedForIme);
-                        }
-                    }
-                }
-            });
-        }
-
-        @Override
-        public void onDockSideChanged(final int newDockSide) throws RemoteException {
-            mView.post(() -> mView.notifyDockSideChanged(newDockSide));
+        if (mMinimized) {
+            // Was in minimized state, so leave that.
+            if (DEBUG) {
+                Log.d(TAG, " in split mode already, but unminimizing ");
+            }
+            mMinimized = false;
+            updateMinimizedDockedStack(mMinimized, getAnimDuration(),
+                    mHomeStackResizable);
         }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerModule.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerModule.java
index 49f4d5e..3b7f315 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerModule.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerModule.java
@@ -17,8 +17,15 @@
 package com.android.systemui.stackdivider;
 
 import android.content.Context;
+import android.os.Handler;
 
+import com.android.systemui.TransactionPool;
+import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.recents.Recents;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.wm.DisplayController;
+import com.android.systemui.wm.DisplayImeController;
+import com.android.systemui.wm.SystemWindows;
 
 import java.util.Optional;
 
@@ -35,7 +42,11 @@
 public class DividerModule {
     @Singleton
     @Provides
-    static Divider provideDivider(Context context, Optional<Lazy<Recents>> recentsOptionalLazy) {
-        return new Divider(context, recentsOptionalLazy);
+    static Divider provideDivider(Context context, Optional<Lazy<Recents>> recentsOptionalLazy,
+            DisplayController displayController, SystemWindows systemWindows,
+            DisplayImeController imeController, @Main Handler handler,
+            KeyguardStateController keyguardStateController, TransactionPool transactionPool) {
+        return new Divider(context, recentsOptionalLazy, displayController, systemWindows,
+                imeController, handler, keyguardStateController, transactionPool);
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
index 9fe6e84..375d9bb 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
@@ -16,12 +16,8 @@
 
 package com.android.systemui.stackdivider;
 
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 import static android.view.PointerIcon.TYPE_HORIZONTAL_DOUBLE_ARROW;
 import static android.view.PointerIcon.TYPE_VERTICAL_DOUBLE_ARROW;
-import static android.view.WindowManager.DOCKED_LEFT;
 import static android.view.WindowManager.DOCKED_RIGHT;
 import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING;
 
@@ -40,10 +36,11 @@
 import android.util.AttributeSet;
 import android.view.Choreographer;
 import android.view.Display;
-import android.view.DisplayInfo;
 import android.view.InsetsState;
 import android.view.MotionEvent;
 import android.view.PointerIcon;
+import android.view.SurfaceControl;
+import android.view.SurfaceControl.Transaction;
 import android.view.VelocityTracker;
 import android.view.View;
 import android.view.View.OnTouchListener;
@@ -75,6 +72,7 @@
  */
 public class DividerView extends FrameLayout implements OnTouchListener,
         OnComputeInternalInsetsListener {
+    private static final String TAG = "DividerView";
 
     public interface DividerCallbacks {
         void onDraggingStart();
@@ -123,14 +121,11 @@
     private int mTouchSlop;
     private boolean mBackgroundLifted;
     private boolean mIsInMinimizeInteraction;
-    private SnapTarget mSnapTargetBeforeMinimized;
+    SnapTarget mSnapTargetBeforeMinimized;
 
     private int mDividerInsets;
     private final Display mDefaultDisplay;
-    private int mDisplayWidth;
-    private int mDisplayHeight;
-    private int mDisplayRotation;
-    private int mDividerWindowWidth;
+
     private int mDividerSize;
     private int mTouchElevation;
     private int mLongPressEntraceAnimDuration;
@@ -147,8 +142,7 @@
     private DividerWindowManager mWindowManager;
     private VelocityTracker mVelocityTracker;
     private FlingAnimationUtils mFlingAnimationUtils;
-    private DividerSnapAlgorithm mSnapAlgorithm;
-    private DividerSnapAlgorithm mMinimizedSnapAlgorithm;
+    private SplitDisplayLayout mSplitLayout;
     private DividerCallbacks mCallback;
     private final Rect mStableInsets = new Rect();
 
@@ -163,6 +157,10 @@
     private DividerState mState;
     private final SurfaceFlingerVsyncChoreographer mSfChoreographer;
 
+    private SplitScreenTaskOrganizer mTiles;
+    boolean mFirstLayout = true;
+    int mDividerPositionX;
+    int mDividerPositionY;
 
     // The view is removed or in the process of been removed from the system.
     private boolean mRemoved;
@@ -172,7 +170,7 @@
         public void handleMessage(Message msg) {
             switch (msg.what) {
                 case MSG_RESIZE_STACK:
-                    resizeStack(msg.arg1, msg.arg2, (SnapTarget) msg.obj);
+                    resizeStackSurfaces(msg.arg1, msg.arg2, (SnapTarget) msg.obj);
                     break;
                 default:
                     super.handleMessage(msg);
@@ -228,16 +226,17 @@
         public boolean performAccessibilityAction(View host, int action, Bundle args) {
             int currentPosition = getCurrentPosition();
             SnapTarget nextTarget = null;
+            DividerSnapAlgorithm snapAlgorithm = mSplitLayout.getSnapAlgorithm();
             if (action == R.id.action_move_tl_full) {
-                nextTarget = mSnapAlgorithm.getDismissEndTarget();
+                nextTarget = snapAlgorithm.getDismissEndTarget();
             } else if (action == R.id.action_move_tl_70) {
-                nextTarget = mSnapAlgorithm.getLastSplitTarget();
+                nextTarget = snapAlgorithm.getLastSplitTarget();
             } else if (action == R.id.action_move_tl_50) {
-                nextTarget = mSnapAlgorithm.getMiddleTarget();
+                nextTarget = snapAlgorithm.getMiddleTarget();
             } else if (action == R.id.action_move_tl_30) {
-                nextTarget = mSnapAlgorithm.getFirstSplitTarget();
+                nextTarget = snapAlgorithm.getFirstSplitTarget();
             } else if (action == R.id.action_move_rb_full) {
-                nextTarget = mSnapAlgorithm.getDismissStartTarget();
+                nextTarget = snapAlgorithm.getDismissStartTarget();
             }
             if (nextTarget != null) {
                 startDragging(true /* animate */, false /* touching */);
@@ -284,11 +283,11 @@
         mBackground = findViewById(R.id.docked_divider_background);
         mMinimizedShadow = findViewById(R.id.minimized_dock_shadow);
         mHandle.setOnTouchListener(this);
-        mDividerWindowWidth = getResources().getDimensionPixelSize(
+        final int dividerWindowWidth = getResources().getDimensionPixelSize(
                 com.android.internal.R.dimen.docked_stack_divider_thickness);
         mDividerInsets = getResources().getDimensionPixelSize(
                 com.android.internal.R.dimen.docked_stack_divider_insets);
-        mDividerSize = mDividerWindowWidth - 2 * mDividerInsets;
+        mDividerSize = dividerWindowWidth - 2 * mDividerInsets;
         mTouchElevation = getResources().getDimensionPixelSize(
                 R.dimen.docked_stack_divider_lift_elevation);
         mLongPressEntraceAnimDuration = getResources().getInteger(
@@ -296,7 +295,6 @@
         mGrowRecents = getResources().getBoolean(R.bool.recents_grow_in_multiwindow);
         mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop();
         mFlingAnimationUtils = new FlingAnimationUtils(getResources().getDisplayMetrics(), 0.3f);
-        updateDisplayInfo();
         boolean landscape = getResources().getConfiguration().orientation
                 == Configuration.ORIENTATION_LANDSCAPE;
         mHandle.setPointerIcon(PointerIcon.getSystemIcon(getContext(),
@@ -314,6 +312,7 @@
                 && !mIsInMinimizeInteraction) {
             saveSnapTargetBeforeMinimized(mSnapTargetBeforeMinimized);
         }
+        mFirstLayout = true;
     }
 
     void onDividerRemoved() {
@@ -341,17 +340,17 @@
                 || mStableInsets.bottom != insets.getStableInsetBottom()) {
             mStableInsets.set(insets.getStableInsetLeft(), insets.getStableInsetTop(),
                     insets.getStableInsetRight(), insets.getStableInsetBottom());
-            if (mSnapAlgorithm != null || mMinimizedSnapAlgorithm != null) {
-                mSnapAlgorithm = null;
-                mMinimizedSnapAlgorithm = null;
-                initializeSnapAlgorithm();
-            }
         }
         return super.onApplyWindowInsets(insets);
     }
 
     @Override
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        if (mFirstLayout) {
+            // Wait for first layout so that the ViewRootImpl surface has been created.
+            initializeSurfaceState();
+            mFirstLayout = false;
+        }
         super.onLayout(changed, left, top, right, bottom);
         int minimizeLeft = 0;
         int minimizeTop = 0;
@@ -372,19 +371,16 @@
     }
 
     public void injectDependencies(DividerWindowManager windowManager, DividerState dividerState,
-            DividerCallbacks callback) {
+            DividerCallbacks callback, SplitScreenTaskOrganizer tiles, SplitDisplayLayout sdl) {
         mWindowManager = windowManager;
         mState = dividerState;
         mCallback = callback;
-
-        // Set the previous position ratio before minimized state after attaching this divider
-        if (mStableInsets.isEmpty()) {
-            WindowManagerWrapper.getInstance().getStableInsets(mStableInsets);
-        }
+        mTiles = tiles;
+        mSplitLayout = sdl;
 
         if (mState.mRatioPositionBeforeMinimized == 0) {
             // Set the middle target as the initial state
-            mSnapTargetBeforeMinimized = mSnapAlgorithm.getMiddleTarget();
+            mSnapTargetBeforeMinimized = mSplitLayout.getSnapAlgorithm().getMiddleTarget();
         } else {
             repositionSnapTargetBeforeMinimized();
         }
@@ -411,18 +407,35 @@
         return mOtherTaskRect;
     }
 
+    private boolean inSplitMode() {
+        return getVisibility() == VISIBLE;
+    }
+
+    /** Unlike setVisible, this directly hides the surface without changing view visibility. */
+    void setHidden(boolean hidden) {
+        post(() -> {
+            final SurfaceControl sc = getWindowSurfaceControl();
+            if (sc == null) {
+                return;
+            }
+            Transaction t = mTiles.getTransaction();
+            if (hidden) {
+                t.hide(sc);
+            } else {
+                t.show(sc);
+            }
+            t.apply();
+            mTiles.releaseTransaction(t);
+        });
+    }
+
     public boolean startDragging(boolean animate, boolean touching) {
         cancelFlingAnimation();
         if (touching) {
             mHandle.setTouching(true, animate);
         }
-        mDockSide = mWindowManagerProxy.getDockSide();
+        mDockSide = mSplitLayout.getPrimarySplitSide();
 
-        // Update snap algorithm if rotation has occurred
-        if (mDisplayRotation != mDefaultDisplay.getRotation()) {
-            updateDisplayInfo();
-        }
-        initializeSnapAlgorithm();
         mWindowManagerProxy.setResizing(true);
         if (touching) {
             mWindowManager.setSlippery(false);
@@ -431,7 +444,7 @@
         if (mCallback != null) {
             mCallback.onDraggingStart();
         }
-        return mDockSide != WindowManager.DOCKED_INVALID;
+        return inSplitMode();
     }
 
     public void stopDragging(int position, float velocity, boolean avoidDismissStart,
@@ -467,38 +480,22 @@
     }
 
     private void updateDockSide() {
-        mDockSide = mWindowManagerProxy.getDockSide();
+        mDockSide = mSplitLayout.getPrimarySplitSide();
         mMinimizedShadow.setDockSide(mDockSide);
     }
 
-    private void initializeSnapAlgorithm() {
-        if (mSnapAlgorithm == null) {
-            mSnapAlgorithm = new DividerSnapAlgorithm(getContext().getResources(), mDisplayWidth,
-                    mDisplayHeight, mDividerSize, isHorizontalDivision(), mStableInsets, mDockSide);
-            if (mSnapTargetBeforeMinimized != null && mSnapTargetBeforeMinimized.isMiddleTarget) {
-                mSnapTargetBeforeMinimized = mSnapAlgorithm.getMiddleTarget();
-            }
-        }
-        if (mMinimizedSnapAlgorithm == null) {
-            mMinimizedSnapAlgorithm = new DividerSnapAlgorithm(getContext().getResources(),
-                    mDisplayWidth, mDisplayHeight, mDividerSize, isHorizontalDivision(),
-                    mStableInsets, mDockSide, mDockedStackMinimized && mHomeStackResizable);
-        }
-    }
-
     public DividerSnapAlgorithm getSnapAlgorithm() {
-        initializeSnapAlgorithm();
-        return mDockedStackMinimized && mHomeStackResizable ? mMinimizedSnapAlgorithm :
-                mSnapAlgorithm;
+        return mDockedStackMinimized
+                && mHomeStackResizable ? mSplitLayout.getMinimizedSnapAlgorithm()
+                        : mSplitLayout.getSnapAlgorithm();
     }
 
     public int getCurrentPosition() {
-        getLocationOnScreen(mTempInt2);
-        if (isHorizontalDivision()) {
-            return mTempInt2[1] + mDividerInsets;
-        } else {
-            return mTempInt2[0] + mDividerInsets;
-        }
+        return isHorizontalDivision() ? mDividerPositionY : mDividerPositionX;
+    }
+
+    public boolean isMinimized() {
+        return mDockedStackMinimized;
     }
 
     @Override
@@ -557,25 +554,25 @@
     }
 
     private void logResizeEvent(SnapTarget snapTarget) {
-        if (snapTarget == mSnapAlgorithm.getDismissStartTarget()) {
+        if (snapTarget == mSplitLayout.getSnapAlgorithm().getDismissStartTarget()) {
             MetricsLogger.action(
                     mContext, MetricsEvent.ACTION_WINDOW_UNDOCK_MAX, dockSideTopLeft(mDockSide)
                             ? LOG_VALUE_UNDOCK_MAX_OTHER
                             : LOG_VALUE_UNDOCK_MAX_DOCKED);
-        } else if (snapTarget == mSnapAlgorithm.getDismissEndTarget()) {
+        } else if (snapTarget == mSplitLayout.getSnapAlgorithm().getDismissEndTarget()) {
             MetricsLogger.action(
                     mContext, MetricsEvent.ACTION_WINDOW_UNDOCK_MAX, dockSideBottomRight(mDockSide)
                             ? LOG_VALUE_UNDOCK_MAX_OTHER
                             : LOG_VALUE_UNDOCK_MAX_DOCKED);
-        } else if (snapTarget == mSnapAlgorithm.getMiddleTarget()) {
+        } else if (snapTarget == mSplitLayout.getSnapAlgorithm().getMiddleTarget()) {
             MetricsLogger.action(mContext, MetricsEvent.ACTION_WINDOW_DOCK_RESIZE,
                     LOG_VALUE_RESIZE_50_50);
-        } else if (snapTarget == mSnapAlgorithm.getFirstSplitTarget()) {
+        } else if (snapTarget == mSplitLayout.getSnapAlgorithm().getFirstSplitTarget()) {
             MetricsLogger.action(mContext, MetricsEvent.ACTION_WINDOW_DOCK_RESIZE,
                     dockSideTopLeft(mDockSide)
                             ? LOG_VALUE_RESIZE_DOCKED_SMALLER
                             : LOG_VALUE_RESIZE_DOCKED_LARGER);
-        } else if (snapTarget == mSnapAlgorithm.getLastSplitTarget()) {
+        } else if (snapTarget == mSplitLayout.getSnapAlgorithm().getLastSplitTarget()) {
             MetricsLogger.action(mContext, MetricsEvent.ACTION_WINDOW_DOCK_RESIZE,
                     dockSideTopLeft(mDockSide)
                             ? LOG_VALUE_RESIZE_DOCKED_LARGER
@@ -625,12 +622,16 @@
                         : snapTarget.taskPosition,
                 snapTarget));
         Runnable endAction = () -> {
-            commitSnapFlags(snapTarget);
+            boolean dismissed = commitSnapFlags(snapTarget);
             mWindowManagerProxy.setResizing(false);
             updateDockSide();
             mCurrentAnimator = null;
             mEntranceAnimationRunning = false;
             mExitAnimationRunning = false;
+            if (!dismissed) {
+                WindowManagerProxy.applyResizeSplits((mIsInMinimizeInteraction
+                        ? mSnapTargetBeforeMinimized : snapTarget).position, mSplitLayout);
+            }
             if (mCallback != null) {
                 mCallback.onDraggingEnd();
             }
@@ -642,12 +643,13 @@
                 // position isn't negative.
                 final SnapTarget saveTarget;
                 if (snapTarget.position < 0) {
-                    saveTarget = mSnapAlgorithm.getMiddleTarget();
+                    saveTarget = mSplitLayout.getSnapAlgorithm().getMiddleTarget();
                 } else {
                     saveTarget = snapTarget;
                 }
-                if (saveTarget.position != mSnapAlgorithm.getDismissEndTarget().position
-                        && saveTarget.position != mSnapAlgorithm.getDismissStartTarget().position) {
+                final DividerSnapAlgorithm snapAlgo = mSplitLayout.getSnapAlgorithm();
+                if (saveTarget.position != snapAlgo.getDismissEndTarget().position
+                        && saveTarget.position != snapAlgo.getDismissStartTarget().position) {
                     saveSnapTargetBeforeMinimized(saveTarget);
                 }
             }
@@ -701,11 +703,11 @@
         }
     }
 
-    private void commitSnapFlags(SnapTarget target) {
+    private boolean commitSnapFlags(SnapTarget target) {
         if (target.flag == SnapTarget.FLAG_NONE) {
-            return;
+            return false;
         }
-        boolean dismissOrMaximize;
+        final boolean dismissOrMaximize;
         if (target.flag == SnapTarget.FLAG_DISMISS_START) {
             dismissOrMaximize = mDockSide == WindowManager.DOCKED_LEFT
                     || mDockSide == WindowManager.DOCKED_TOP;
@@ -713,12 +715,13 @@
             dismissOrMaximize = mDockSide == WindowManager.DOCKED_RIGHT
                     || mDockSide == WindowManager.DOCKED_BOTTOM;
         }
-        if (dismissOrMaximize) {
-            mWindowManagerProxy.dismissDockedStack();
-        } else {
-            mWindowManagerProxy.maximizeDockedStack();
-        }
-        mWindowManagerProxy.setResizeDimLayer(false, WINDOWING_MODE_UNDEFINED, 0f);
+        mWindowManagerProxy.dismissOrMaximizeDocked(mTiles, dismissOrMaximize);
+        Transaction t = mTiles.getTransaction();
+        setResizeDimLayer(t, true /* primary */, 0f);
+        setResizeDimLayer(t, false /* primary */, 0f);
+        t.apply();
+        mTiles.releaseTransaction(t);
+        return true;
     }
 
     private void liftBackground() {
@@ -765,6 +768,28 @@
         mBackgroundLifted = false;
     }
 
+    private void initializeSurfaceState() {
+        int midPos = mSplitLayout.getSnapAlgorithm().getMiddleTarget().position;
+        // Recalculate the split-layout's internal tile bounds
+        mSplitLayout.resizeSplits(midPos);
+        Transaction t = mTiles.getTransaction();
+        if (mDockedStackMinimized) {
+            int position = mSplitLayout.getMinimizedSnapAlgorithm().getMiddleTarget().position;
+            calculateBoundsForPosition(position, mDockSide, mDockedRect);
+            calculateBoundsForPosition(position, DockedDividerUtils.invertDockSide(mDockSide),
+                    mOtherRect);
+            mDividerPositionX = mDividerPositionY = position;
+            resizeSplitSurfaces(t, mDockedRect, mSplitLayout.mPrimary,
+                    mOtherRect, mSplitLayout.mSecondary);
+        } else {
+            resizeSplitSurfaces(t, mSplitLayout.mPrimary, null,
+                    mSplitLayout.mSecondary, null);
+        }
+        setResizeDimLayer(t, true /* primary */, 0.f /* alpha */);
+        setResizeDimLayer(t, false /* secondary */, 0.f /* alpha */);
+        t.apply();
+        mTiles.releaseTransaction(t);
+    }
 
     public void setMinimizedDockStack(boolean minimized, boolean isHomeStackResizable) {
         mHomeStackResizable = isHomeStackResizable;
@@ -789,15 +814,11 @@
             mDockedStackMinimized = minimized;
         } else if (mDockedStackMinimized != minimized) {
             mDockedStackMinimized = minimized;
-            if (mDisplayRotation != mDefaultDisplay.getRotation()) {
+            if (mSplitLayout.mDisplayLayout.rotation() != mDefaultDisplay.getRotation()) {
                 // Splitscreen to minimize is about to starts after rotating landscape to seascape,
                 // update insets, display info and snap algorithm targets
                 WindowManagerWrapper.getInstance().getStableInsets(mStableInsets);
                 repositionSnapTargetBeforeMinimized();
-                updateDisplayInfo();
-            } else {
-                mMinimizedSnapAlgorithm = null;
-                initializeSnapAlgorithm();
             }
             if (mIsInMinimizeInteraction != minimized || mCurrentAnimator != null) {
                 cancelFlingAnimation();
@@ -805,15 +826,64 @@
                     // Relayout to recalculate the divider shadow when minimizing
                     requestLayout();
                     mIsInMinimizeInteraction = true;
-                    resizeStack(mMinimizedSnapAlgorithm.getMiddleTarget());
+                    resizeStackSurfaces(mSplitLayout.getMinimizedSnapAlgorithm().getMiddleTarget());
                 } else {
-                    resizeStack(mSnapTargetBeforeMinimized);
+                    resizeStackSurfaces(mSnapTargetBeforeMinimized);
                     mIsInMinimizeInteraction = false;
                 }
             }
         }
     }
 
+    void enterSplitMode(boolean isHomeStackResizable) {
+        post(() -> {
+            final SurfaceControl sc = getWindowSurfaceControl();
+            if (sc == null) {
+                return;
+            }
+            Transaction t = mTiles.getTransaction();
+            t.show(sc).apply();
+            mTiles.releaseTransaction(t);
+        });
+        if (isHomeStackResizable) {
+            SnapTarget miniMid = mSplitLayout.getMinimizedSnapAlgorithm().getMiddleTarget();
+            if (mDockedStackMinimized) {
+                mDividerPositionY = mDividerPositionX = miniMid.position;
+            }
+        }
+    }
+
+    /**
+     * Tries to grab a surface control from ViewRootImpl. If this isn't available for some reason
+     * (ie. the window isn't ready yet), it will get the surfacecontrol that the WindowlessWM has
+     * assigned to it.
+     */
+    private SurfaceControl getWindowSurfaceControl() {
+        if (getViewRootImpl() == null) {
+            return null;
+        }
+        SurfaceControl out = getViewRootImpl().getSurfaceControl();
+        if (out != null && out.isValid()) {
+            return out;
+        }
+        return mWindowManager.mSystemWindows.getViewSurface(this);
+    }
+
+    void exitSplitMode() {
+        // Reset tile bounds
+        post(() -> {
+            final SurfaceControl sc = getWindowSurfaceControl();
+            if (sc == null) {
+                return;
+            }
+            Transaction t = mTiles.getTransaction();
+            t.hide(sc).apply();
+            mTiles.releaseTransaction(t);
+        });
+        int midPos = mSplitLayout.getSnapAlgorithm().getMiddleTarget().position;
+        WindowManagerProxy.applyResizeSplits(midPos, mSplitLayout);
+    }
+
     public void setMinimizedDockStack(boolean minimized, long animDuration,
             boolean isHomeStackResizable) {
         mHomeStackResizable = isHomeStackResizable;
@@ -844,14 +914,12 @@
             mDockedStackMinimized = minimized;
         } else if (mDockedStackMinimized != minimized) {
             mIsInMinimizeInteraction = true;
-            mMinimizedSnapAlgorithm = null;
             mDockedStackMinimized = minimized;
-            initializeSnapAlgorithm();
             stopDragging(minimized
                             ? mSnapTargetBeforeMinimized.position
                             : getCurrentPosition(),
                     minimized
-                            ? mMinimizedSnapAlgorithm.getMiddleTarget()
+                            ? mSplitLayout.getMinimizedSnapAlgorithm().getMiddleTarget()
                             : mSnapTargetBeforeMinimized,
                     animDuration, Interpolators.FAST_OUT_SLOW_IN, 0);
             setAdjustedForIme(false, animDuration);
@@ -865,18 +933,6 @@
                 .start();
     }
 
-    public void setAdjustedForIme(boolean adjustedForIme) {
-        updateDockSide();
-        mHandle.setAlpha(adjustedForIme ? 0f : 1f);
-        if (!adjustedForIme) {
-            resetBackground();
-        } else if (mDockSide == WindowManager.DOCKED_TOP) {
-            mBackground.setPivotY(0);
-            mBackground.setScaleY(ADJUSTED_FOR_IME_SCALE);
-        }
-        mAdjustedForIme = adjustedForIme;
-    }
-
     public void setAdjustedForIme(boolean adjustedForIme, long animDuration) {
         updateDockSide();
         mHandle.animate()
@@ -902,7 +958,8 @@
     private void saveSnapTargetBeforeMinimized(SnapTarget target) {
         mSnapTargetBeforeMinimized = target;
         mState.mRatioPositionBeforeMinimized = (float) target.position /
-                (isHorizontalDivision() ? mDisplayHeight : mDisplayWidth);
+                (isHorizontalDivision() ? mSplitLayout.mDisplayLayout.height()
+                        : mSplitLayout.mDisplayLayout.width());
     }
 
     private void resetBackground() {
@@ -916,51 +973,17 @@
     @Override
     protected void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
-        updateDisplayInfo();
-    }
-
-    public void notifyDockSideChanged(int newDockSide) {
-        int oldDockSide = mDockSide;
-        mDockSide = newDockSide;
-        mMinimizedShadow.setDockSide(mDockSide);
-        requestLayout();
-
-        // Update the snap position to the new docked side with correct insets
-        WindowManagerWrapper.getInstance().getStableInsets(mStableInsets);
-        mMinimizedSnapAlgorithm = null;
-        initializeSnapAlgorithm();
-
-        if (oldDockSide == DOCKED_LEFT && mDockSide == DOCKED_RIGHT
-                || oldDockSide == DOCKED_RIGHT && mDockSide == DOCKED_LEFT) {
-            repositionSnapTargetBeforeMinimized();
-        }
-
-        // Landscape to seascape rotation requires minimized to resize docked app correctly
-        if (mHomeStackResizable && mDockedStackMinimized) {
-            resizeStack(mMinimizedSnapAlgorithm.getMiddleTarget());
-        }
     }
 
     private void repositionSnapTargetBeforeMinimized() {
         int position = (int) (mState.mRatioPositionBeforeMinimized *
-                (isHorizontalDivision() ? mDisplayHeight : mDisplayWidth));
-        mSnapAlgorithm = null;
-        initializeSnapAlgorithm();
+                (isHorizontalDivision() ? mSplitLayout.mDisplayLayout.height()
+                        : mSplitLayout.mDisplayLayout.width()));
 
         // Set the snap target before minimized but do not save until divider is attached and not
         // minimized because it does not know its minimized state yet.
-        mSnapTargetBeforeMinimized = mSnapAlgorithm.calculateNonDismissingSnapTarget(position);
-    }
-
-    private void updateDisplayInfo() {
-        mDisplayRotation = mDefaultDisplay.getRotation();
-        final DisplayInfo info = new DisplayInfo();
-        mDefaultDisplay.getDisplayInfo(info);
-        mDisplayWidth = info.logicalWidth;
-        mDisplayHeight = info.logicalHeight;
-        mSnapAlgorithm = null;
-        mMinimizedSnapAlgorithm = null;
-        initializeSnapAlgorithm();
+        mSnapTargetBeforeMinimized =
+                mSplitLayout.getSnapAlgorithm().calculateNonDismissingSnapTarget(position);
     }
 
     private int calculatePosition(int touchX, int touchY) {
@@ -994,8 +1017,9 @@
     }
 
     public void calculateBoundsForPosition(int position, int dockSide, Rect outRect) {
-        DockedDividerUtils.calculateBoundsForPosition(position, dockSide, outRect, mDisplayWidth,
-                mDisplayHeight, mDividerSize);
+        DockedDividerUtils.calculateBoundsForPosition(position, dockSide, outRect,
+                mSplitLayout.mDisplayLayout.width(), mSplitLayout.mDisplayLayout.height(),
+                mDividerSize);
     }
 
     public void resizeStackDelayed(int position, int taskPosition, SnapTarget taskSnapTarget) {
@@ -1005,16 +1029,60 @@
         mSfChoreographer.scheduleAtSfVsync(mHandler, message);
     }
 
-    private void resizeStack(SnapTarget taskSnapTarget) {
-        resizeStack(taskSnapTarget.position, taskSnapTarget.position, taskSnapTarget);
+    private void resizeStackSurfaces(SnapTarget taskSnapTarget) {
+        resizeStackSurfaces(taskSnapTarget.position, taskSnapTarget.position, taskSnapTarget);
     }
 
-    public void resizeStack(int position, int taskPosition, SnapTarget taskSnapTarget) {
+    void resizeSplitSurfaces(Transaction t, Rect dockedRect, Rect otherRect) {
+        resizeSplitSurfaces(t, dockedRect, null, otherRect, null);
+    }
+
+    private void resizeSplitSurfaces(Transaction t, Rect dockedRect, Rect dockedTaskRect,
+            Rect otherRect, Rect otherTaskRect) {
+        dockedTaskRect = dockedTaskRect == null ? dockedRect : dockedTaskRect;
+        otherTaskRect = otherTaskRect == null ? otherRect : otherTaskRect;
+
+        mDividerPositionX = dockedRect.right;
+        mDividerPositionY = dockedRect.bottom;
+
+        t.setPosition(mTiles.mPrimarySurface, dockedTaskRect.left, dockedTaskRect.top);
+        Rect crop = new Rect(dockedRect);
+        crop.offsetTo(-Math.min(dockedTaskRect.left - dockedRect.left, 0),
+                -Math.min(dockedTaskRect.top - dockedRect.top, 0));
+        t.setWindowCrop(mTiles.mPrimarySurface, crop);
+        t.setPosition(mTiles.mSecondarySurface, otherTaskRect.left, otherTaskRect.top);
+        crop.set(otherRect);
+        crop.offsetTo(-(otherTaskRect.left - otherRect.left),
+                -(otherTaskRect.top - otherRect.top));
+        t.setWindowCrop(mTiles.mSecondarySurface, crop);
+        final SurfaceControl dividerCtrl = getWindowSurfaceControl();
+        if (dividerCtrl != null) {
+            if (isHorizontalDivision()) {
+                t.setPosition(dividerCtrl, 0, mDividerPositionY - mDividerInsets);
+            } else {
+                t.setPosition(dividerCtrl, mDividerPositionX - mDividerInsets, 0);
+            }
+        }
+    }
+
+    void setResizeDimLayer(Transaction t, boolean primary, float alpha) {
+        SurfaceControl dim = primary ? mTiles.mPrimaryDim : mTiles.mSecondaryDim;
+        if (alpha <= 0.f) {
+            t.hide(dim);
+        } else {
+            t.setAlpha(dim, alpha);
+            t.show(dim);
+        }
+    }
+
+    void resizeStackSurfaces(int position, int taskPosition, SnapTarget taskSnapTarget) {
         if (mRemoved) {
             // This divider view has been removed so shouldn't have any additional influence.
             return;
         }
         calculateBoundsForPosition(position, mDockSide, mDockedRect);
+        calculateBoundsForPosition(position, DockedDividerUtils.invertDockSide(mDockSide),
+                mOtherRect);
 
         if (mDockedRect.equals(mLastResizeRect) && !mEntranceAnimationRunning) {
             return;
@@ -1025,6 +1093,7 @@
             mBackground.invalidate();
         }
 
+        Transaction t = mTiles.getTransaction();
         mLastResizeRect.set(mDockedRect);
         if (mHomeStackResizable && mIsInMinimizeInteraction) {
             calculateBoundsForPosition(mSnapTargetBeforeMinimized.position, mDockSide,
@@ -1037,8 +1106,10 @@
                 mDockedTaskRect.offset(Math.max(position, mStableInsets.left - mDividerSize)
                         - mDockedTaskRect.left + mDividerSize, 0);
             }
-            mWindowManagerProxy.resizeDockedStack(mDockedRect, mDockedTaskRect, mDockedTaskRect,
-                    mOtherTaskRect, null);
+            resizeSplitSurfaces(t, mDockedRect, mDockedTaskRect, mOtherRect,
+                    mOtherTaskRect);
+            t.apply();
+            mTiles.releaseTransaction(t);
             return;
         }
 
@@ -1052,8 +1123,7 @@
             }
             calculateBoundsForPosition(taskPosition, DockedDividerUtils.invertDockSide(mDockSide),
                     mOtherTaskRect);
-            mWindowManagerProxy.resizeDockedStack(mDockedRect, mDockedTaskRect, null,
-                    mOtherTaskRect, null);
+            resizeSplitSurfaces(t, mDockedRect, mDockedTaskRect, mOtherRect, mOtherTaskRect);
         } else if (mExitAnimationRunning && taskPosition != TASK_POSITION_SAME) {
             calculateBoundsForPosition(taskPosition, mDockSide, mDockedTaskRect);
             mDockedInsetRect.set(mDockedTaskRect);
@@ -1066,8 +1136,7 @@
             if (mDockSide == DOCKED_RIGHT) {
                 mDockedTaskRect.offset(position - mStableInsets.left + mDividerSize, 0);
             }
-            mWindowManagerProxy.resizeDockedStack(mDockedRect, mDockedTaskRect, mDockedInsetRect,
-                    mOtherTaskRect, mOtherInsetRect);
+            resizeSplitSurfaces(t, mDockedRect, mDockedTaskRect, mOtherRect, mOtherTaskRect);
         } else if (taskPosition != TASK_POSITION_SAME) {
             calculateBoundsForPosition(position, DockedDividerUtils.invertDockSide(mDockSide),
                     mOtherRect);
@@ -1078,7 +1147,8 @@
                     restrictDismissingTaskPosition(taskPosition, dockSideInverted, taskSnapTarget);
             calculateBoundsForPosition(taskPositionDocked, mDockSide, mDockedTaskRect);
             calculateBoundsForPosition(taskPositionOther, dockSideInverted, mOtherTaskRect);
-            mTmpRect.set(0, 0, mDisplayWidth, mDisplayHeight);
+            mTmpRect.set(0, 0, mSplitLayout.mDisplayLayout.width(),
+                    mSplitLayout.mDisplayLayout.height());
             alignTopLeft(mDockedRect, mDockedTaskRect);
             alignTopLeft(mOtherRect, mOtherTaskRect);
             mDockedInsetRect.set(mDockedTaskRect);
@@ -1094,15 +1164,15 @@
                     taskPositionDocked);
             applyDismissingParallax(mOtherTaskRect, dockSideInverted, taskSnapTarget, position,
                     taskPositionOther);
-            mWindowManagerProxy.resizeDockedStack(mDockedRect, mDockedTaskRect, mDockedInsetRect,
-                    mOtherTaskRect, mOtherInsetRect);
+            resizeSplitSurfaces(t, mDockedRect, mDockedTaskRect, mOtherRect, mOtherTaskRect);
         } else {
-            mWindowManagerProxy.resizeDockedStack(mDockedRect, null, null, null, null);
+            resizeSplitSurfaces(t, mDockedRect, null, mOtherRect, null);
         }
         SnapTarget closestDismissTarget = getSnapAlgorithm().getClosestDismissTarget(position);
         float dimFraction = getDimFraction(position, closestDismissTarget);
-        mWindowManagerProxy.setResizeDimLayer(dimFraction != 0f,
-                getWindowingModeForDismissTarget(closestDismissTarget), dimFraction);
+        setResizeDimLayer(t, isDismissTargetPrimary(closestDismissTarget), dimFraction);
+        t.apply();
+        mTiles.releaseTransaction(t);
     }
 
     private void applyExitAnimationParallax(Rect taskRect, int position) {
@@ -1156,10 +1226,12 @@
     private int restrictDismissingTaskPosition(int taskPosition, int dockSide,
             SnapTarget snapTarget) {
         if (snapTarget.flag == SnapTarget.FLAG_DISMISS_START && dockSideTopLeft(dockSide)) {
-            return Math.max(mSnapAlgorithm.getFirstSplitTarget().position, mStartPosition);
+            return Math.max(mSplitLayout.getSnapAlgorithm().getFirstSplitTarget().position,
+                    mStartPosition);
         } else if (snapTarget.flag == SnapTarget.FLAG_DISMISS_END
                 && dockSideBottomRight(dockSide)) {
-            return Math.min(mSnapAlgorithm.getLastSplitTarget().position, mStartPosition);
+            return Math.min(mSplitLayout.getSnapAlgorithm().getLastSplitTarget().position,
+                    mStartPosition);
         } else {
             return taskPosition;
         }
@@ -1171,19 +1243,19 @@
     private void applyDismissingParallax(Rect taskRect, int dockSide, SnapTarget snapTarget,
             int position, int taskPosition) {
         float fraction = Math.min(1, Math.max(0,
-                mSnapAlgorithm.calculateDismissingFraction(position)));
+                mSplitLayout.getSnapAlgorithm().calculateDismissingFraction(position)));
         SnapTarget dismissTarget = null;
         SnapTarget splitTarget = null;
         int start = 0;
-        if (position <= mSnapAlgorithm.getLastSplitTarget().position
+        if (position <= mSplitLayout.getSnapAlgorithm().getLastSplitTarget().position
                 && dockSideTopLeft(dockSide)) {
-            dismissTarget = mSnapAlgorithm.getDismissStartTarget();
-            splitTarget = mSnapAlgorithm.getFirstSplitTarget();
+            dismissTarget = mSplitLayout.getSnapAlgorithm().getDismissStartTarget();
+            splitTarget = mSplitLayout.getSnapAlgorithm().getFirstSplitTarget();
             start = taskPosition;
-        } else if (position >= mSnapAlgorithm.getLastSplitTarget().position
+        } else if (position >= mSplitLayout.getSnapAlgorithm().getLastSplitTarget().position
                 && dockSideBottomRight(dockSide)) {
-            dismissTarget = mSnapAlgorithm.getDismissEndTarget();
-            splitTarget = mSnapAlgorithm.getLastSplitTarget();
+            dismissTarget = mSplitLayout.getSnapAlgorithm().getDismissEndTarget();
+            splitTarget = mSplitLayout.getSnapAlgorithm().getLastSplitTarget();
             start = splitTarget.position;
         }
         if (dismissTarget != null && fraction > 0f
@@ -1236,14 +1308,10 @@
         }
     }
 
-    private int getWindowingModeForDismissTarget(SnapTarget dismissTarget) {
-        if ((dismissTarget.flag == SnapTarget.FLAG_DISMISS_START && dockSideTopLeft(mDockSide))
+    private boolean isDismissTargetPrimary(SnapTarget dismissTarget) {
+        return (dismissTarget.flag == SnapTarget.FLAG_DISMISS_START && dockSideTopLeft(mDockSide))
                 || (dismissTarget.flag == SnapTarget.FLAG_DISMISS_END
-                        && dockSideBottomRight(mDockSide))) {
-            return WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-        } else {
-            return WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
-        }
+                        && dockSideBottomRight(mDockSide));
     }
 
     /**
@@ -1297,7 +1365,7 @@
     }
 
     void onDockedFirstAnimationFrame() {
-        saveSnapTargetBeforeMinimized(mSnapAlgorithm.getMiddleTarget());
+        saveSnapTargetBeforeMinimized(mSplitLayout.getSnapAlgorithm().getMiddleTarget());
     }
 
     void onDockedTopTask() {
@@ -1307,8 +1375,9 @@
         updateDockSide();
         mEntranceAnimationRunning = true;
 
-        resizeStack(calculatePositionForInsetBounds(), mSnapAlgorithm.getMiddleTarget().position,
-                mSnapAlgorithm.getMiddleTarget());
+        resizeStackSurfaces(calculatePositionForInsetBounds(),
+                mSplitLayout.getSnapAlgorithm().getMiddleTarget().position,
+                mSplitLayout.getSnapAlgorithm().getMiddleTarget());
     }
 
     void onRecentsDrawn() {
@@ -1337,13 +1406,12 @@
     }
 
     void onUndockingTask() {
-        int dockSide = mWindowManagerProxy.getDockSide();
-        if (dockSide != WindowManager.DOCKED_INVALID && (mHomeStackResizable
-                || !mDockedStackMinimized)) {
+        int dockSide = mSplitLayout.getPrimarySplitSide();
+        if (inSplitMode() && (mHomeStackResizable || !mDockedStackMinimized)) {
             startDragging(false /* animate */, false /* touching */);
             SnapTarget target = dockSideTopLeft(dockSide)
-                    ? mSnapAlgorithm.getDismissEndTarget()
-                    : mSnapAlgorithm.getDismissStartTarget();
+                    ? mSplitLayout.getSnapAlgorithm().getDismissEndTarget()
+                    : mSplitLayout.getSnapAlgorithm().getDismissStartTarget();
 
             // Don't start immediately - give a little bit time to settle the drag resize change.
             mExitAnimationRunning = true;
@@ -1354,8 +1422,7 @@
     }
 
     private int calculatePositionForInsetBounds() {
-        mTmpRect.set(0, 0, mDisplayWidth, mDisplayHeight);
-        mTmpRect.inset(mStableInsets);
+        mSplitLayout.mDisplayLayout.getStableBounds(mTmpRect);
         return DockedDividerUtils.calculatePositionForBounds(mTmpRect, mDockSide, mDividerSize);
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerWindowManager.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerWindowManager.java
index 2486d653..3020a25 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerWindowManager.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerWindowManager.java
@@ -26,12 +26,13 @@
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
 import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
 
-import android.content.Context;
 import android.graphics.PixelFormat;
 import android.os.Binder;
 import android.view.View;
 import android.view.WindowManager;
 
+import com.android.systemui.wm.SystemWindows;
+
 /**
  * Manages the window parameters of the docked stack divider.
  */
@@ -39,15 +40,16 @@
 
     private static final String WINDOW_TITLE = "DockedStackDivider";
 
-    private final WindowManager mWindowManager;
+    final SystemWindows mSystemWindows;
     private WindowManager.LayoutParams mLp;
     private View mView;
 
-    public DividerWindowManager(Context ctx) {
-        mWindowManager = ctx.getSystemService(WindowManager.class);
+    public DividerWindowManager(SystemWindows systemWindows) {
+        mSystemWindows = systemWindows;
     }
 
-    public void add(View view, int width, int height) {
+    /** Add a divider view */
+    public void add(View view, int width, int height, int displayId) {
         mLp = new WindowManager.LayoutParams(
                 width, height, TYPE_DOCK_DIVIDER,
                 FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL
@@ -60,13 +62,13 @@
         view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
-        mWindowManager.addView(view, mLp);
+        mSystemWindows.addView(view, mLp, displayId, TYPE_DOCK_DIVIDER);
         mView = view;
     }
 
     public void remove() {
         if (mView != null) {
-            mWindowManager.removeView(mView);
+            mSystemWindows.removeView(mView);
         }
         mView = null;
     }
@@ -81,7 +83,7 @@
             changed = true;
         }
         if (changed) {
-            mWindowManager.updateViewLayout(mView, mLp);
+            mSystemWindows.updateViewLayout(mView, mLp);
         }
     }
 
@@ -95,7 +97,7 @@
             changed = true;
         }
         if (changed) {
-            mWindowManager.updateViewLayout(mView, mLp);
+            mSystemWindows.updateViewLayout(mView, mLp);
         }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java
index c6ac309..db7996e 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java
@@ -31,6 +31,8 @@
 import com.android.systemui.shared.system.ActivityManagerWrapper;
 import com.android.systemui.shared.system.TaskStackChangeListener;
 
+import java.util.function.Consumer;
+
 /**
  * Controller that decides when to show the {@link ForcedResizableInfoActivity}.
  */
@@ -52,6 +54,12 @@
         }
     };
 
+    private final Consumer<Boolean> mDockedStackExistsListener = exists -> {
+        if (!exists) {
+            mPackagesShownInSession.clear();
+        }
+    };
+
     /** Record of force resized task that's pending to be handled. */
     private class PendingTaskRecord {
         int taskId;
@@ -67,7 +75,7 @@
         }
     }
 
-    public ForcedResizableInfoActivityController(Context context) {
+    public ForcedResizableInfoActivityController(Context context, Divider divider) {
         mContext = context;
         ActivityManagerWrapper.getInstance().registerTaskStackListener(
                 new TaskStackChangeListener() {
@@ -87,12 +95,7 @@
                         activityLaunchOnSecondaryDisplayFailed();
                     }
                 });
-    }
-
-    public void notifyDockedStackExistsChanged(boolean exists) {
-        if (!exists) {
-            mPackagesShownInSession.clear();
-        }
+        divider.registerInSplitScreenListener(mDockedStackExistsListener);
     }
 
     public void onAppTransitionFinished() {
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitDisplayLayout.java b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitDisplayLayout.java
new file mode 100644
index 0000000..b19f560
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitDisplayLayout.java
@@ -0,0 +1,310 @@
+/*
+ * 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.stackdivider;
+
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
+import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
+import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
+import static android.view.WindowManager.DOCKED_BOTTOM;
+import static android.view.WindowManager.DOCKED_INVALID;
+import static android.view.WindowManager.DOCKED_LEFT;
+import static android.view.WindowManager.DOCKED_RIGHT;
+import static android.view.WindowManager.DOCKED_TOP;
+
+import android.annotation.NonNull;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.graphics.Rect;
+import android.util.TypedValue;
+import android.view.WindowContainerTransaction;
+
+import com.android.internal.policy.DividerSnapAlgorithm;
+import com.android.internal.policy.DockedDividerUtils;
+import com.android.systemui.wm.DisplayLayout;
+
+/**
+ * Handles split-screen related internal display layout. In general, this represents the
+ * WM-facing understanding of the splits.
+ */
+public class SplitDisplayLayout {
+    /** Minimum size of an adjusted stack bounds relative to original stack bounds. Used to
+     * restrict IME adjustment so that a min portion of top stack remains visible.*/
+    private static final float ADJUSTED_STACK_FRACTION_MIN = 0.3f;
+
+    private static final int DIVIDER_WIDTH_INACTIVE_DP = 4;
+
+    SplitScreenTaskOrganizer mTiles;
+    DisplayLayout mDisplayLayout;
+    Context mContext;
+
+    // Lazy stuff
+    boolean mResourcesValid = false;
+    int mDividerSize;
+    int mDividerSizeInactive;
+    private DividerSnapAlgorithm mSnapAlgorithm = null;
+    private DividerSnapAlgorithm mMinimizedSnapAlgorithm = null;
+    Rect mPrimary = null;
+    Rect mSecondary = null;
+    Rect mAdjustedPrimary = null;
+    Rect mAdjustedSecondary = null;
+
+    public SplitDisplayLayout(Context ctx, DisplayLayout dl, SplitScreenTaskOrganizer taskTiles) {
+        mTiles = taskTiles;
+        mDisplayLayout = dl;
+        mContext = ctx;
+    }
+
+    void rotateTo(int newRotation) {
+        mDisplayLayout.rotateTo(mContext.getResources(), newRotation);
+        final Configuration config = new Configuration();
+        config.unset();
+        config.orientation = mDisplayLayout.getOrientation();
+        Rect tmpRect = new Rect(0, 0, mDisplayLayout.width(), mDisplayLayout.height());
+        tmpRect.inset(mDisplayLayout.nonDecorInsets());
+        config.windowConfiguration.setAppBounds(tmpRect);
+        tmpRect.set(0, 0, mDisplayLayout.width(), mDisplayLayout.height());
+        tmpRect.inset(mDisplayLayout.stableInsets());
+        config.screenWidthDp = (int) (tmpRect.width() / mDisplayLayout.density());
+        config.screenHeightDp = (int) (tmpRect.height() / mDisplayLayout.density());
+        mContext = mContext.createConfigurationContext(config);
+        mSnapAlgorithm = null;
+        mMinimizedSnapAlgorithm = null;
+        mResourcesValid = false;
+    }
+
+    private void updateResources() {
+        if (mResourcesValid) {
+            return;
+        }
+        mResourcesValid = true;
+        Resources res = mContext.getResources();
+        mDividerSize = DockedDividerUtils.getDividerSize(res,
+                DockedDividerUtils.getDividerInsets(res));
+        mDividerSizeInactive = (int) TypedValue.applyDimension(
+                TypedValue.COMPLEX_UNIT_DIP, DIVIDER_WIDTH_INACTIVE_DP, res.getDisplayMetrics());
+    }
+
+    int getPrimarySplitSide() {
+        return mDisplayLayout.isLandscape() ? DOCKED_LEFT : DOCKED_TOP;
+    }
+
+    boolean isMinimized() {
+        return mTiles.mSecondary.topActivityType == ACTIVITY_TYPE_HOME
+                || mTiles.mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS;
+    }
+
+    DividerSnapAlgorithm getSnapAlgorithm() {
+        if (mSnapAlgorithm == null) {
+            updateResources();
+            boolean isHorizontalDivision = !mDisplayLayout.isLandscape();
+            mSnapAlgorithm = new DividerSnapAlgorithm(mContext.getResources(),
+                    mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize,
+                    isHorizontalDivision, mDisplayLayout.stableInsets(), getPrimarySplitSide());
+        }
+        return mSnapAlgorithm;
+    }
+
+    DividerSnapAlgorithm getMinimizedSnapAlgorithm() {
+        if (mMinimizedSnapAlgorithm == null) {
+            updateResources();
+            boolean isHorizontalDivision = !mDisplayLayout.isLandscape();
+            mMinimizedSnapAlgorithm = new DividerSnapAlgorithm(mContext.getResources(),
+                    mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize,
+                    isHorizontalDivision, mDisplayLayout.stableInsets(), getPrimarySplitSide(),
+                    true /* isMinimized */);
+        }
+        return mMinimizedSnapAlgorithm;
+    }
+
+    void resizeSplits(int position) {
+        mPrimary = mPrimary == null ? new Rect() : mPrimary;
+        mSecondary = mSecondary == null ? new Rect() : mSecondary;
+        calcSplitBounds(position, mPrimary, mSecondary);
+    }
+
+    void resizeSplits(int position, WindowContainerTransaction t) {
+        resizeSplits(position);
+        t.setBounds(mTiles.mPrimary.token, mPrimary);
+        t.setBounds(mTiles.mSecondary.token, mSecondary);
+
+        t.setSmallestScreenWidthDp(mTiles.mPrimary.token,
+                getSmallestWidthDpForBounds(mContext, mDisplayLayout, mPrimary));
+        t.setSmallestScreenWidthDp(mTiles.mSecondary.token,
+                getSmallestWidthDpForBounds(mContext, mDisplayLayout, mSecondary));
+    }
+
+    void calcSplitBounds(int position, @NonNull Rect outPrimary, @NonNull Rect outSecondary) {
+        int dockSide = getPrimarySplitSide();
+        DockedDividerUtils.calculateBoundsForPosition(position, dockSide, outPrimary,
+                mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize);
+
+        DockedDividerUtils.calculateBoundsForPosition(position,
+                DockedDividerUtils.invertDockSide(dockSide), outSecondary, mDisplayLayout.width(),
+                mDisplayLayout.height(), mDividerSize);
+    }
+
+    Rect calcMinimizedHomeStackBounds() {
+        DividerSnapAlgorithm.SnapTarget miniMid = getMinimizedSnapAlgorithm().getMiddleTarget();
+        Rect homeBounds = new Rect();
+        DockedDividerUtils.calculateBoundsForPosition(miniMid.position,
+                DockedDividerUtils.invertDockSide(getPrimarySplitSide()), homeBounds,
+                mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize);
+        return homeBounds;
+    }
+
+    /**
+     * Updates the adjustment depending on it's current state.
+     */
+    void updateAdjustedBounds(int currImeTop, int startTop, int finalTop) {
+        updateAdjustedBounds(mDisplayLayout, currImeTop, startTop, finalTop, mDividerSize,
+                mDividerSizeInactive, mPrimary, mSecondary);
+    }
+
+    /**
+     * Updates the adjustment depending on it's current state.
+     */
+    private void updateAdjustedBounds(DisplayLayout dl, int currImeTop, int startTop, int finalTop,
+            int dividerWidth, int dividerWidthInactive, Rect primaryBounds, Rect secondaryBounds) {
+        adjustForIME(dl, currImeTop, startTop, finalTop, dividerWidth, dividerWidthInactive,
+                primaryBounds, secondaryBounds);
+    }
+
+    /** Assumes top/bottom split. Splits are not adjusted for left/right splits. */
+    private void adjustForIME(DisplayLayout dl, int currImeTop, int startTop, int finalTop,
+            int dividerWidth, int dividerWidthInactive, Rect primaryBounds, Rect secondaryBounds) {
+        if (mAdjustedPrimary == null) {
+            mAdjustedPrimary = new Rect();
+            mAdjustedSecondary = new Rect();
+        }
+
+        final Rect displayStableRect = new Rect();
+        dl.getStableBounds(displayStableRect);
+
+        final boolean showing = finalTop < startTop;
+        final float progress = ((float) (currImeTop - startTop)) / (finalTop - startTop);
+        final float dividerSquish = showing ? progress : 1.f - progress;
+        final int currDividerWidth =
+                (int) (dividerWidthInactive * dividerSquish + dividerWidth * (1.f - dividerSquish));
+
+        final int minTopStackBottom = displayStableRect.top
+                + (int) ((mPrimary.bottom - displayStableRect.top) * ADJUSTED_STACK_FRACTION_MIN);
+        final int minImeTop = minTopStackBottom + currDividerWidth;
+
+        // Calculate an offset which shifts the stacks up by the height of the IME, but still
+        // leaves at least 30% of the top stack visible.
+        final int yOffset = Math.max(0, dl.height() - Math.max(currImeTop, minImeTop));
+
+        // TOP
+        // Reduce the offset by an additional small amount to squish the divider bar.
+        mAdjustedPrimary.set(primaryBounds);
+        mAdjustedPrimary.offset(0, -yOffset + (dividerWidth - currDividerWidth));
+
+        // BOTTOM
+        mAdjustedSecondary.set(secondaryBounds);
+        mAdjustedSecondary.offset(0, -yOffset);
+    }
+
+    static int getSmallestWidthDpForBounds(@NonNull Context context, DisplayLayout dl,
+            Rect bounds) {
+        int dividerSize = DockedDividerUtils.getDividerSize(context.getResources(),
+                DockedDividerUtils.getDividerInsets(context.getResources()));
+
+        int minWidth = Integer.MAX_VALUE;
+
+        // Go through all screen orientations and find the orientation in which the task has the
+        // smallest width.
+        Rect tmpRect = new Rect();
+        Rect rotatedDisplayRect = new Rect();
+        Rect displayRect = new Rect(0, 0, dl.width(), dl.height());
+
+        DisplayLayout tmpDL = new DisplayLayout();
+        for (int rotation = 0; rotation < 4; rotation++) {
+            tmpDL.set(dl);
+            tmpDL.rotateTo(context.getResources(), rotation);
+            DividerSnapAlgorithm snap = initSnapAlgorithmForRotation(context, tmpDL, dividerSize);
+
+            tmpRect.set(bounds);
+            DisplayLayout.rotateBounds(tmpRect, displayRect, rotation - dl.rotation());
+            rotatedDisplayRect.set(0, 0, tmpDL.width(), tmpDL.height());
+            final int dockSide = getPrimarySplitSide(tmpRect, rotatedDisplayRect,
+                    tmpDL.getOrientation());
+            final int position = DockedDividerUtils.calculatePositionForBounds(tmpRect, dockSide,
+                    dividerSize);
+
+            final int snappedPosition =
+                    snap.calculateNonDismissingSnapTarget(position).position;
+            DockedDividerUtils.calculateBoundsForPosition(snappedPosition, dockSide, tmpRect,
+                    tmpDL.width(), tmpDL.height(), dividerSize);
+            Rect insettedDisplay = new Rect(rotatedDisplayRect);
+            insettedDisplay.inset(tmpDL.stableInsets());
+            tmpRect.intersect(insettedDisplay);
+            minWidth = Math.min(tmpRect.width(), minWidth);
+        }
+        return (int) (minWidth / dl.density());
+    }
+
+    static DividerSnapAlgorithm initSnapAlgorithmForRotation(Context context, DisplayLayout dl,
+            int dividerSize) {
+        final Configuration config = new Configuration();
+        config.unset();
+        config.orientation = dl.getOrientation();
+        Rect tmpRect = new Rect(0, 0, dl.width(), dl.height());
+        tmpRect.inset(dl.nonDecorInsets());
+        config.windowConfiguration.setAppBounds(tmpRect);
+        tmpRect.set(0, 0, dl.width(), dl.height());
+        tmpRect.inset(dl.stableInsets());
+        config.screenWidthDp = (int) (tmpRect.width() / dl.density());
+        config.screenHeightDp = (int) (tmpRect.height() / dl.density());
+        final Context rotationContext = context.createConfigurationContext(config);
+        return new DividerSnapAlgorithm(
+                rotationContext.getResources(), dl.width(), dl.height(), dividerSize,
+                config.orientation == ORIENTATION_PORTRAIT, dl.stableInsets());
+    }
+
+    /**
+     * Get the current primary-split side. Determined by its location of {@param bounds} within
+     * {@param displayRect} but if both are the same, it will try to dock to each side and determine
+     * if allowed in its respected {@param orientation}.
+     *
+     * @param bounds bounds of the primary split task to get which side is docked
+     * @param displayRect bounds of the display that contains the primary split task
+     * @param orientation the origination of device
+     * @return current primary-split side
+     */
+    static int getPrimarySplitSide(Rect bounds, Rect displayRect, int orientation) {
+        if (orientation == ORIENTATION_PORTRAIT) {
+            // Portrait mode, docked either at the top or the bottom.
+            final int diff = (displayRect.bottom - bounds.bottom) - (bounds.top - displayRect.top);
+            if (diff < 0) {
+                return DOCKED_BOTTOM;
+            } else {
+                // Top is default
+                return DOCKED_TOP;
+            }
+        } else if (orientation == ORIENTATION_LANDSCAPE) {
+            // Landscape mode, docked either on the left or on the right.
+            final int diff = (displayRect.right - bounds.right) - (bounds.left - displayRect.left);
+            if (diff < 0) {
+                return DOCKED_RIGHT;
+            }
+            return DOCKED_LEFT;
+        }
+        return DOCKED_INVALID;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
new file mode 100644
index 0000000..5cc8799
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
@@ -0,0 +1,159 @@
+/*
+ * 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.stackdivider;
+
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
+import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
+import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
+import static android.view.Display.DEFAULT_DISPLAY;
+
+import android.app.ActivityManager.RunningTaskInfo;
+import android.app.ITaskOrganizerController;
+import android.app.WindowConfiguration;
+import android.os.RemoteException;
+import android.util.Log;
+import android.view.Display;
+import android.view.ITaskOrganizer;
+import android.view.IWindowContainer;
+import android.view.SurfaceControl;
+import android.view.SurfaceSession;
+
+class SplitScreenTaskOrganizer extends ITaskOrganizer.Stub {
+    private static final String TAG = "SplitScreenTaskOrganizer";
+    private static final boolean DEBUG = Divider.DEBUG;
+
+    RunningTaskInfo mPrimary;
+    RunningTaskInfo mSecondary;
+    SurfaceControl mPrimarySurface;
+    SurfaceControl mSecondarySurface;
+    SurfaceControl mPrimaryDim;
+    SurfaceControl mSecondaryDim;
+    final Divider mDivider;
+
+    SplitScreenTaskOrganizer(Divider divider) {
+        mDivider = divider;
+    }
+
+    void init(ITaskOrganizerController organizerController, SurfaceSession session)
+            throws RemoteException {
+        organizerController.registerTaskOrganizer(this, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+        organizerController.registerTaskOrganizer(this, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+        mPrimary = organizerController.createRootTask(Display.DEFAULT_DISPLAY,
+                WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+        mSecondary = organizerController.createRootTask(Display.DEFAULT_DISPLAY,
+                WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+        mPrimarySurface = mPrimary.token.getLeash();
+        mSecondarySurface = mSecondary.token.getLeash();
+
+        // Initialize dim surfaces:
+        mPrimaryDim = new SurfaceControl.Builder(session).setParent(mPrimarySurface)
+                .setColorLayer().setName("Primary Divider Dim").build();
+        mSecondaryDim = new SurfaceControl.Builder(session).setParent(mSecondarySurface)
+                .setColorLayer().setName("Secondary Divider Dim").build();
+        SurfaceControl.Transaction t = getTransaction();
+        t.setLayer(mPrimaryDim, Integer.MAX_VALUE);
+        t.setColor(mPrimaryDim, new float[]{0f, 0f, 0f});
+        t.setLayer(mSecondaryDim, Integer.MAX_VALUE);
+        t.setColor(mSecondaryDim, new float[]{0f, 0f, 0f});
+        t.apply();
+        releaseTransaction(t);
+    }
+
+    SurfaceControl.Transaction getTransaction() {
+        return mDivider.mTransactionPool.acquire();
+    }
+
+    void releaseTransaction(SurfaceControl.Transaction t) {
+        mDivider.mTransactionPool.release(t);
+    }
+
+    @Override
+    public void taskAppeared(RunningTaskInfo taskInfo) {
+    }
+
+    @Override
+    public void taskVanished(IWindowContainer container) {
+    }
+
+    @Override
+    public void transactionReady(int id, SurfaceControl.Transaction t) {
+    }
+
+    @Override
+    public void onTaskInfoChanged(RunningTaskInfo taskInfo) {
+        if (taskInfo.displayId != DEFAULT_DISPLAY) {
+            return;
+        }
+        mDivider.getHandler().post(() -> handleTaskInfoChanged(taskInfo));
+    }
+
+    /**
+     * This is effectively a finite state machine which moves between the various split-screen
+     * presentations based on the contents of the split regions.
+     */
+    private void handleTaskInfoChanged(RunningTaskInfo info) {
+        final boolean primaryWasEmpty = mPrimary.topActivityType == ACTIVITY_TYPE_UNDEFINED;
+        final boolean secondaryWasEmpty = mSecondary.topActivityType == ACTIVITY_TYPE_UNDEFINED;
+        if (info.token.asBinder() == mPrimary.token.asBinder()) {
+            mPrimary = info;
+        } else if (info.token.asBinder() == mSecondary.token.asBinder()) {
+            mSecondary = info;
+        }
+        final boolean primaryIsEmpty = mPrimary.topActivityType == ACTIVITY_TYPE_UNDEFINED;
+        final boolean secondaryIsEmpty = mSecondary.topActivityType == ACTIVITY_TYPE_UNDEFINED;
+        if (DEBUG) {
+            Log.d(TAG, "onTaskInfoChanged " + mPrimary + "  " + mSecondary);
+        }
+        if (primaryIsEmpty || secondaryIsEmpty) {
+            // At-least one of the splits is empty which means we are currently transitioning
+            // into or out-of split-screen mode.
+            if (DEBUG) {
+                Log.d(TAG, " at-least one split empty " + mPrimary.topActivityType
+                        + "  " + mSecondary.topActivityType);
+            }
+            if (mDivider.inSplitMode()) {
+                // Was in split-mode, which means we are leaving split, so continue that.
+                // This happens when the stack in the primary-split is dismissed.
+                if (DEBUG) {
+                    Log.d(TAG, "    was in split, so this means leave it "
+                            + mPrimary.topActivityType + "  " + mSecondary.topActivityType);
+                }
+                WindowManagerProxy.applyDismissSplit(this, true /* dismissOrMaximize */);
+                mDivider.updateVisibility(false /* visible */);
+            } else if (!primaryIsEmpty && primaryWasEmpty && secondaryWasEmpty) {
+                // Wasn't in split-mode (both were empty), but now that the primary split is
+                // populated, we should fully enter split by moving everything else into secondary.
+                // This just tells window-manager to reparent things, the UI will respond
+                // when it gets new task info for the secondary split.
+                if (DEBUG) {
+                    Log.d(TAG, "   was not in split, but primary is populated, so enter it");
+                }
+                mDivider.startEnterSplit();
+            }
+        } else if (mSecondary.topActivityType == ACTIVITY_TYPE_HOME
+                || mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS) {
+            // Both splits are populated but the secondary split has a home/recents stack on top,
+            // so enter minimized mode.
+            mDivider.ensureMinimizedSplit();
+        } else {
+            // Both splits are populated by normal activities, so make sure we aren't minimized.
+            mDivider.ensureNormalSplit();
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java
index 228aab5..7685733 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java
@@ -16,16 +16,25 @@
 
 package com.android.systemui.stackdivider;
 
-import static android.view.WindowManager.DOCKED_INVALID;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.view.Display.DEFAULT_DISPLAY;
 
+import android.app.ActivityManager;
 import android.app.ActivityTaskManager;
 import android.graphics.Rect;
 import android.os.RemoteException;
 import android.util.Log;
+import android.view.Display;
+import android.view.IWindowContainer;
+import android.view.WindowContainerTransaction;
 import android.view.WindowManagerGlobal;
 
 import com.android.internal.annotations.GuardedBy;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -35,88 +44,20 @@
 public class WindowManagerProxy {
 
     private static final String TAG = "WindowManagerProxy";
+    private static final int[] HOME_AND_RECENTS = {ACTIVITY_TYPE_HOME, ACTIVITY_TYPE_RECENTS};
 
     private static final WindowManagerProxy sInstance = new WindowManagerProxy();
 
     @GuardedBy("mDockedRect")
     private final Rect mDockedRect = new Rect();
-    private final Rect mTempDockedTaskRect = new Rect();
-    private final Rect mTempDockedInsetRect = new Rect();
-    private final Rect mTempOtherTaskRect = new Rect();
-    private final Rect mTempOtherInsetRect = new Rect();
 
     private final Rect mTmpRect1 = new Rect();
-    private final Rect mTmpRect2 = new Rect();
-    private final Rect mTmpRect3 = new Rect();
-    private final Rect mTmpRect4 = new Rect();
-    private final Rect mTmpRect5 = new Rect();
 
     @GuardedBy("mDockedRect")
     private final Rect mTouchableRegion = new Rect();
 
-    private boolean mDimLayerVisible;
-    private int mDimLayerTargetWindowingMode;
-    private float mDimLayerAlpha;
-
     private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
 
-    private final Runnable mResizeRunnable = new Runnable() {
-        @Override
-        public void run() {
-            synchronized (mDockedRect) {
-                mTmpRect1.set(mDockedRect);
-                mTmpRect2.set(mTempDockedTaskRect);
-                mTmpRect3.set(mTempDockedInsetRect);
-                mTmpRect4.set(mTempOtherTaskRect);
-                mTmpRect5.set(mTempOtherInsetRect);
-            }
-            try {
-                ActivityTaskManager.getService()
-                        .resizeDockedStack(mTmpRect1,
-                                mTmpRect2.isEmpty() ? null : mTmpRect2,
-                                mTmpRect3.isEmpty() ? null : mTmpRect3,
-                                mTmpRect4.isEmpty() ? null : mTmpRect4,
-                                mTmpRect5.isEmpty() ? null : mTmpRect5);
-            } catch (RemoteException e) {
-                Log.w(TAG, "Failed to resize stack: " + e);
-            }
-        }
-    };
-
-    private final Runnable mDismissRunnable = new Runnable() {
-        @Override
-        public void run() {
-            try {
-                ActivityTaskManager.getService().dismissSplitScreenMode(false /* onTop */);
-            } catch (RemoteException e) {
-                Log.w(TAG, "Failed to remove stack: " + e);
-            }
-        }
-    };
-
-    private final Runnable mMaximizeRunnable = new Runnable() {
-        @Override
-        public void run() {
-            try {
-                ActivityTaskManager.getService().dismissSplitScreenMode(true /* onTop */);
-            } catch (RemoteException e) {
-                Log.w(TAG, "Failed to resize stack: " + e);
-            }
-        }
-    };
-
-    private final Runnable mDimLayerRunnable = new Runnable() {
-        @Override
-        public void run() {
-            try {
-                WindowManagerGlobal.getWindowManagerService().setResizeDimLayer(mDimLayerVisible,
-                        mDimLayerTargetWindowingMode, mDimLayerAlpha);
-            } catch (RemoteException e) {
-                Log.w(TAG, "Failed to resize stack: " + e);
-            }
-        }
-    };
-
     private final Runnable mSetTouchableRegionRunnable = new Runnable() {
         @Override
         public void run() {
@@ -139,40 +80,9 @@
         return sInstance;
     }
 
-    public void resizeDockedStack(Rect docked, Rect tempDockedTaskRect, Rect tempDockedInsetRect,
-            Rect tempOtherTaskRect, Rect tempOtherInsetRect) {
-        synchronized (mDockedRect) {
-            mDockedRect.set(docked);
-            if (tempDockedTaskRect != null) {
-                mTempDockedTaskRect.set(tempDockedTaskRect);
-            } else {
-                mTempDockedTaskRect.setEmpty();
-            }
-            if (tempDockedInsetRect != null) {
-                mTempDockedInsetRect.set(tempDockedInsetRect);
-            } else {
-                mTempDockedInsetRect.setEmpty();
-            }
-            if (tempOtherTaskRect != null) {
-                mTempOtherTaskRect.set(tempOtherTaskRect);
-            } else {
-                mTempOtherTaskRect.setEmpty();
-            }
-            if (tempOtherInsetRect != null) {
-                mTempOtherInsetRect.set(tempOtherInsetRect);
-            } else {
-                mTempOtherInsetRect.setEmpty();
-            }
-        }
-        mExecutor.execute(mResizeRunnable);
-    }
-
-    public void dismissDockedStack() {
-        mExecutor.execute(mDismissRunnable);
-    }
-
-    public void maximizeDockedStack() {
-        mExecutor.execute(mMaximizeRunnable);
+    void dismissOrMaximizeDocked(
+            final SplitScreenTaskOrganizer tiles, final boolean dismissOrMaximize) {
+        mExecutor.execute(() -> applyDismissSplit(tiles, dismissOrMaximize));
     }
 
     public void setResizing(final boolean resizing) {
@@ -188,26 +98,204 @@
         });
     }
 
-    public int getDockSide() {
-        try {
-            return WindowManagerGlobal.getWindowManagerService().getDockedStackSide();
-        } catch (RemoteException e) {
-            Log.w(TAG, "Failed to get dock side: " + e);
-        }
-        return DOCKED_INVALID;
-    }
-
-    public void setResizeDimLayer(boolean visible, int targetWindowingMode, float alpha) {
-        mDimLayerVisible = visible;
-        mDimLayerTargetWindowingMode = targetWindowingMode;
-        mDimLayerAlpha = alpha;
-        mExecutor.execute(mDimLayerRunnable);
-    }
-
+    /** Sets a touch region */
     public void setTouchRegion(Rect region) {
         synchronized (mDockedRect) {
             mTouchableRegion.set(region);
         }
         mExecutor.execute(mSetTouchableRegionRunnable);
     }
+
+    static void applyResizeSplits(int position, SplitDisplayLayout splitLayout) {
+        WindowContainerTransaction t = new WindowContainerTransaction();
+        splitLayout.resizeSplits(position, t);
+        try {
+            ActivityTaskManager.getTaskOrganizerController().applyContainerTransaction(t,
+                    null /* organizer */);
+        } catch (RemoteException e) {
+        }
+    }
+
+    private static boolean getHomeAndRecentsTasks(List<IWindowContainer> out,
+            IWindowContainer parent) {
+        boolean resizable = false;
+        try {
+            List<ActivityManager.RunningTaskInfo> rootTasks = parent == null
+                    ? ActivityTaskManager.getTaskOrganizerController().getRootTasks(
+                            Display.DEFAULT_DISPLAY, HOME_AND_RECENTS)
+                    : ActivityTaskManager.getTaskOrganizerController().getChildTasks(parent,
+                            HOME_AND_RECENTS);
+            for (int i = 0, n = rootTasks.size(); i < n; ++i) {
+                final ActivityManager.RunningTaskInfo ti = rootTasks.get(i);
+                out.add(ti.token);
+                if (ti.topActivityType == ACTIVITY_TYPE_HOME) {
+                    resizable = ti.isResizable();
+                }
+            }
+        } catch (RemoteException e) {
+        }
+        return resizable;
+    }
+
+    static void applyHomeTasksMinimized(SplitDisplayLayout layout, IWindowContainer parent) {
+        applyHomeTasksMinimized(layout, parent, null /* transaction */);
+    }
+
+    /**
+     * Assign a fixed override-bounds to home tasks that reflect their geometry while the primary
+     * split is minimized. This actually "sticks out" of the secondary split area, but when in
+     * minimized mode, the secondary split gets a 'negative' crop to expose it.
+     */
+    static boolean applyHomeTasksMinimized(SplitDisplayLayout layout, IWindowContainer parent,
+            WindowContainerTransaction t) {
+        // Resize the home/recents stacks to the larger minimized-state size
+        final Rect homeBounds;
+        final ArrayList<IWindowContainer> homeStacks = new ArrayList<>();
+        boolean isHomeResizable = getHomeAndRecentsTasks(homeStacks, parent);
+        if (isHomeResizable) {
+            homeBounds = layout.calcMinimizedHomeStackBounds();
+        } else {
+            homeBounds = new Rect(0, 0, layout.mDisplayLayout.width(),
+                    layout.mDisplayLayout.height());
+        }
+        WindowContainerTransaction wct = t != null ? t : new WindowContainerTransaction();
+        for (int i = homeStacks.size() - 1; i >= 0; --i) {
+            wct.setBounds(homeStacks.get(i), homeBounds);
+        }
+        if (t != null) {
+            return isHomeResizable;
+        }
+        try {
+            ActivityTaskManager.getTaskOrganizerController().applyContainerTransaction(wct,
+                    null /* organizer */);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to resize home stacks ", e);
+        }
+        return isHomeResizable;
+    }
+
+    /**
+     * Finishes entering split-screen by reparenting all FULLSCREEN tasks into the secondary split.
+     * This assumes there is already something in the primary split since that is usually what
+     * triggers a call to this. In the same transaction, this overrides the home task bounds via
+     * {@link #applyHomeTasksMinimized}.
+     *
+     * @return whether the home stack is resizable
+     */
+    static boolean applyEnterSplit(SplitScreenTaskOrganizer tiles, SplitDisplayLayout layout) {
+        try {
+            // Set launchtile first so that any stack created after
+            // getAllStackInfos and before reparent (even if unlikely) are placed
+            // correctly.
+            ActivityTaskManager.getTaskOrganizerController().setLaunchRoot(
+                    DEFAULT_DISPLAY, tiles.mSecondary.token);
+            List<ActivityManager.RunningTaskInfo> rootTasks =
+                    ActivityTaskManager.getTaskOrganizerController().getRootTasks(DEFAULT_DISPLAY,
+                            null /* activityTypes */);
+            WindowContainerTransaction wct = new WindowContainerTransaction();
+            if (rootTasks.isEmpty()) {
+                return false;
+            }
+            for (int i = rootTasks.size() - 1; i >= 0; --i) {
+                if (rootTasks.get(i).configuration.windowConfiguration.getWindowingMode()
+                        != WINDOWING_MODE_FULLSCREEN) {
+                    continue;
+                }
+                wct.reparent(rootTasks.get(i).token, tiles.mSecondary.token,
+                        true /* onTop */);
+            }
+            boolean isHomeResizable = applyHomeTasksMinimized(layout, null /* parent */, wct);
+            ActivityTaskManager.getTaskOrganizerController()
+                    .applyContainerTransaction(wct, null /* organizer */);
+            return isHomeResizable;
+        } catch (RemoteException e) {
+            Log.w(TAG, "Error moving fullscreen tasks to secondary split: " + e);
+        }
+        return false;
+    }
+
+    private static boolean isHomeOrRecentTask(ActivityManager.RunningTaskInfo ti) {
+        final int atype = ti.configuration.windowConfiguration.getActivityType();
+        return atype == ACTIVITY_TYPE_HOME || atype == ACTIVITY_TYPE_RECENTS;
+    }
+
+    /**
+     * Reparents all tile members back to their display and resets home task override bounds.
+     * @param dismissOrMaximize When {@code true} this resolves the split by closing the primary
+     *                          split (thus resulting in the top of the secondary split becoming
+     *                          fullscreen. {@code false} resolves the other way.
+     */
+    static void applyDismissSplit(SplitScreenTaskOrganizer tiles, boolean dismissOrMaximize) {
+        try {
+            // Set launch root first so that any task created after getChildContainers and
+            // before reparent (pretty unlikely) are put into fullscreen.
+            ActivityTaskManager.getTaskOrganizerController().setLaunchRoot(Display.DEFAULT_DISPLAY,
+                    null);
+            // TODO(task-org): Once task-org is more complete, consider using Appeared/Vanished
+            //                 plus specific APIs to clean this up.
+            List<ActivityManager.RunningTaskInfo> primaryChildren =
+                    ActivityTaskManager.getTaskOrganizerController().getChildTasks(
+                            tiles.mPrimary.token, null /* activityTypes */);
+            List<ActivityManager.RunningTaskInfo> secondaryChildren =
+                    ActivityTaskManager.getTaskOrganizerController().getChildTasks(
+                            tiles.mSecondary.token, null /* activityTypes */);
+            // In some cases (eg. non-resizable is launched), system-server will leave split-screen.
+            // as a result, the above will not capture any tasks; yet, we need to clean-up the
+            // home task bounds.
+            List<ActivityManager.RunningTaskInfo> freeHomeAndRecents =
+                    ActivityTaskManager.getTaskOrganizerController().getRootTasks(
+                            Display.DEFAULT_DISPLAY, HOME_AND_RECENTS);
+            if (primaryChildren.isEmpty() && secondaryChildren.isEmpty()
+                    && freeHomeAndRecents.isEmpty()) {
+                return;
+            }
+            WindowContainerTransaction wct = new WindowContainerTransaction();
+            if (dismissOrMaximize) {
+                // Dismissing, so move all primary split tasks first
+                for (int i = primaryChildren.size() - 1; i >= 0; --i) {
+                    wct.reparent(primaryChildren.get(i).token, null /* parent */,
+                            true /* onTop */);
+                }
+                // Don't need to worry about home tasks because they are already in the "proper"
+                // order within the secondary split.
+                for (int i = secondaryChildren.size() - 1; i >= 0; --i) {
+                    final ActivityManager.RunningTaskInfo ti = secondaryChildren.get(i);
+                    wct.reparent(ti.token, null /* parent */, true /* onTop */);
+                    if (isHomeOrRecentTask(ti)) {
+                        wct.setBounds(ti.token, null);
+                    }
+                }
+            } else {
+                // Maximize, so move non-home secondary split first
+                for (int i = secondaryChildren.size() - 1; i >= 0; --i) {
+                    if (isHomeOrRecentTask(secondaryChildren.get(i))) {
+                        continue;
+                    }
+                    wct.reparent(secondaryChildren.get(i).token, null /* parent */,
+                            true /* onTop */);
+                }
+                // Find and place home tasks in-between. This simulates the fact that there was
+                // nothing behind the primary split's tasks.
+                for (int i = secondaryChildren.size() - 1; i >= 0; --i) {
+                    final ActivityManager.RunningTaskInfo ti = secondaryChildren.get(i);
+                    if (isHomeOrRecentTask(ti)) {
+                        wct.reparent(ti.token, null /* parent */, true /* onTop */);
+                        // reset bounds too
+                        wct.setBounds(ti.token, null);
+                    }
+                }
+                for (int i = primaryChildren.size() - 1; i >= 0; --i) {
+                    wct.reparent(primaryChildren.get(i).token, null /* parent */,
+                            true /* onTop */);
+                }
+            }
+            for (int i = freeHomeAndRecents.size() - 1; i >= 0; --i) {
+                wct.setBounds(freeHomeAndRecents.get(i).token, null);
+            }
+            ActivityTaskManager.getTaskOrganizerController().applyContainerTransaction(wct,
+                    null /* organizer */);
+        } catch (RemoteException e) {
+            Log.w(TAG, "Failed to remove stack: " + e);
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
index 7ad07c2..7d3d406 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
@@ -20,7 +20,6 @@
 import android.animation.AnimatorListenerAdapter;
 import android.content.Context;
 import android.content.res.ColorStateList;
-import android.content.res.Resources;
 import android.graphics.Color;
 import android.hardware.biometrics.BiometricSourceType;
 import android.hardware.face.FaceManager;
@@ -46,6 +45,7 @@
 import com.android.keyguard.KeyguardUpdateMonitor;
 import com.android.keyguard.KeyguardUpdateMonitorCallback;
 import com.android.settingslib.Utils;
+import com.android.settingslib.fuelgauge.BatteryStatus;
 import com.android.systemui.Dependency;
 import com.android.systemui.Interpolators;
 import com.android.systemui.R;
@@ -97,8 +97,6 @@
     private final LockPatternUtils mLockPatternUtils;
     private final DockManager mDockManager;
 
-    private final int mSlowThreshold;
-    private final int mFastThreshold;
     private final LockIcon mLockIcon;
     private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
     private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger();
@@ -178,10 +176,6 @@
         mWakeLock = new SettableWakeLock(wakeLock, TAG);
         mLockPatternUtils = lockPatternUtils;
 
-        Resources res = context.getResources();
-        mSlowThreshold = res.getInteger(R.integer.config_chargingSlowlyThreshold);
-        mFastThreshold = res.getInteger(R.integer.config_chargingFastThreshold);
-
         mUserManager = context.getSystemService(UserManager.class);
         mBatteryInfo = iBatteryStats;
 
@@ -484,12 +478,12 @@
         int chargingId;
         if (mPowerPluggedInWired) {
             switch (mChargingSpeed) {
-                case KeyguardUpdateMonitor.BatteryStatus.CHARGING_FAST:
+                case BatteryStatus.CHARGING_FAST:
                     chargingId = hasChargingTime
                             ? R.string.keyguard_indication_charging_time_fast
                             : R.string.keyguard_plugged_in_charging_fast;
                     break;
-                case KeyguardUpdateMonitor.BatteryStatus.CHARGING_SLOWLY:
+                case BatteryStatus.CHARGING_SLOWLY:
                     chargingId = hasChargingTime
                             ? R.string.keyguard_indication_charging_time_slowly
                             : R.string.keyguard_plugged_in_charging_slowly;
@@ -620,7 +614,7 @@
         public static final int HIDE_DELAY_MS = 5000;
 
         @Override
-        public void onRefreshBatteryInfo(KeyguardUpdateMonitor.BatteryStatus status) {
+        public void onRefreshBatteryInfo(BatteryStatus status) {
             boolean isChargingOrFull = status.status == BatteryManager.BATTERY_STATUS_CHARGING
                     || status.status == BatteryManager.BATTERY_STATUS_FULL;
             boolean wasPluggedIn = mPowerPluggedIn;
@@ -628,7 +622,7 @@
             mPowerPluggedIn = status.isPluggedIn() && isChargingOrFull;
             mPowerCharged = status.isCharged();
             mChargingWattage = status.maxChargingWattage;
-            mChargingSpeed = status.getChargingSpeed(mSlowThreshold, mFastThreshold);
+            mChargingSpeed = status.getChargingSpeed(mContext);
             mBatteryLevel = status.level;
             try {
                 mChargingTimeRemaining = mPowerPluggedIn
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/MediaArtworkProcessor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/MediaArtworkProcessor.kt
index aaf4849..711d6a6d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/MediaArtworkProcessor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/MediaArtworkProcessor.kt
@@ -19,7 +19,6 @@
 import android.content.Context
 import android.graphics.Bitmap
 import android.graphics.Canvas
-import android.graphics.Point
 import android.graphics.Rect
 import android.renderscript.Allocation
 import android.renderscript.Element
@@ -27,9 +26,11 @@
 import android.renderscript.ScriptIntrinsicBlur
 import android.util.Log
 import android.util.MathUtils
+import android.util.Size
+import android.view.WindowManager
+import com.android.internal.annotations.VisibleForTesting
 import com.android.internal.graphics.ColorUtils
 import com.android.systemui.statusbar.notification.MediaNotificationProcessor
-
 import javax.inject.Inject
 import javax.inject.Singleton
 
@@ -41,10 +42,9 @@
 @Singleton
 class MediaArtworkProcessor @Inject constructor() {
 
-    private val mTmpSize = Point()
     private var mArtworkCache: Bitmap? = null
 
-    fun processArtwork(context: Context, artwork: Bitmap): Bitmap? {
+    fun processArtwork(context: Context, artwork: Bitmap, windowType: Int): Bitmap? {
         if (mArtworkCache != null) {
             return mArtworkCache
         }
@@ -54,9 +54,9 @@
         var output: Allocation? = null
         var inBitmap: Bitmap? = null
         try {
-            context.display.getSize(mTmpSize)
+            val size = getWindowSize(context, windowType)
             val rect = Rect(0, 0, artwork.width, artwork.height)
-            MathUtils.fitRect(rect, Math.max(mTmpSize.x / DOWNSAMPLE, mTmpSize.y / DOWNSAMPLE))
+            MathUtils.fitRect(rect, Math.max(size.width / DOWNSAMPLE, size.height / DOWNSAMPLE))
             inBitmap = Bitmap.createScaledBitmap(artwork, rect.width(), rect.height(),
                     true /* filter */)
             // Render script blurs only support ARGB_8888, we need a conversion if we got a
@@ -98,4 +98,15 @@
         mArtworkCache?.recycle()
         mArtworkCache = null
     }
+
+    @VisibleForTesting
+    internal fun getWindowSize(context: Context, windowType: Int): Size {
+        val windowContext = context.display?.let {
+            context.createDisplayContext(it)
+                    .createWindowContext(windowType, null)
+        } ?: run { throw NullPointerException("Display is null") }
+        val windowManager = windowContext.getSystemService(WindowManager::class.java)
+                ?: run { throw NullPointerException("Null window manager") }
+        return windowManager.currentWindowMetrics.size
+    }
 }
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java
index 4d6764e..b43fe73 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java
@@ -31,20 +31,17 @@
 import android.util.Log;
 
 import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.statusbar.dagger.StatusBarModule;
 import com.android.systemui.statusbar.phone.NotificationListenerWithPlugins;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
 /**
  * This class handles listening to notification updates and passing them along to
  * NotificationPresenter to be displayed to the user.
  */
 @SuppressLint("OverrideAbstract")
-@Singleton
 public class NotificationListener extends NotificationListenerWithPlugins {
     private static final String TAG = "NotificationListener";
 
@@ -54,7 +51,9 @@
     private final List<NotificationHandler> mNotificationHandlers = new ArrayList<>();
     private final ArrayList<NotificationSettingsListener> mSettingsListeners = new ArrayList<>();
 
-    @Inject
+    /**
+     * Injected constructor. See {@link StatusBarModule}.
+     */
     public NotificationListener(
             Context context,
             NotificationManager notificationManager,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
index a457266..f8db922 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
@@ -15,7 +15,6 @@
  */
 package com.android.systemui.statusbar;
 
-import static com.android.systemui.Dependency.MAIN_HANDLER;
 import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
 import static com.android.systemui.statusbar.phone.StatusBar.DEBUG_MEDIA_FAKE_ARTWORK;
 import static com.android.systemui.statusbar.phone.StatusBar.ENABLE_LOCKSCREEN_WALLPAPER;
@@ -36,7 +35,6 @@
 import android.media.session.MediaSessionManager;
 import android.media.session.PlaybackState;
 import android.os.AsyncTask;
-import android.os.Handler;
 import android.os.Trace;
 import android.os.UserHandle;
 import android.provider.DeviceConfig;
@@ -44,6 +42,7 @@
 import android.util.ArraySet;
 import android.util.Log;
 import android.view.View;
+import android.view.WindowManager;
 import android.widget.ImageView;
 
 import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
@@ -52,7 +51,9 @@
 import com.android.systemui.Dumpable;
 import com.android.systemui.Interpolators;
 import com.android.systemui.colorextraction.SysuiColorExtractor;
+import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.dagger.StatusBarModule;
 import com.android.systemui.statusbar.notification.NotificationEntryListener;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -72,9 +73,7 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
+import java.util.concurrent.Executor;
 
 import dagger.Lazy;
 
@@ -82,7 +81,6 @@
  * Handles tasks and state related to media notifications. For example, there is a 'current' media
  * notification, which this class keeps track of.
  */
-@Singleton
 public class NotificationMediaManager implements Dumpable {
     private static final String TAG = "NotificationMediaManager";
     public static final boolean DEBUG_MEDIA = false;
@@ -101,11 +99,10 @@
         PAUSED_MEDIA_STATES.add(PlaybackState.STATE_ERROR);
     }
 
-
     private final NotificationEntryManager mEntryManager;
 
     @Nullable
-    private Lazy<NotificationShadeWindowController> mStatusBarWindowController;
+    private Lazy<NotificationShadeWindowController> mNotificationShadeWindowController;
 
     @Nullable
     private BiometricUnlockController mBiometricUnlockController;
@@ -114,7 +111,7 @@
     @Nullable
     private LockscreenWallpaper mLockscreenWallpaper;
 
-    private final Handler mHandler = Dependency.get(MAIN_HANDLER);
+    private final Executor mMainExecutor;
 
     private final Context mContext;
     private final MediaSessionManager mMediaSessionManager;
@@ -176,14 +173,17 @@
         }
     };
 
-    @Inject
+    /**
+     * Injected constructor. See {@link StatusBarModule}.
+     */
     public NotificationMediaManager(
             Context context,
             Lazy<StatusBar> statusBarLazy,
-            Lazy<NotificationShadeWindowController> statusBarWindowController,
+            Lazy<NotificationShadeWindowController> notificationShadeWindowController,
             NotificationEntryManager notificationEntryManager,
             MediaArtworkProcessor mediaArtworkProcessor,
-            KeyguardBypassController keyguardBypassController) {
+            KeyguardBypassController keyguardBypassController,
+            @Main Executor mainExecutor) {
         mContext = context;
         mMediaArtworkProcessor = mediaArtworkProcessor;
         mKeyguardBypassController = keyguardBypassController;
@@ -194,8 +194,9 @@
                 Context.MEDIA_SESSION_SERVICE);
         // TODO: use KeyguardStateController#isOccluded to remove this dependency
         mStatusBarLazy = statusBarLazy;
-        mStatusBarWindowController = statusBarWindowController;
+        mNotificationShadeWindowController = notificationShadeWindowController;
         mEntryManager = notificationEntryManager;
+        mMainExecutor = mainExecutor;
         notificationEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
             @Override
             public void onPendingEntryAdded(NotificationEntry entry) {
@@ -525,7 +526,8 @@
             }
         }
 
-        NotificationShadeWindowController windowController = mStatusBarWindowController.get();
+        NotificationShadeWindowController windowController =
+                mNotificationShadeWindowController.get();
         boolean hideBecauseOccluded = mStatusBarLazy.get().isOccluded();
 
         final boolean hasArtwork = artworkDrawable != null;
@@ -624,7 +626,7 @@
                                 mBackdrop.setVisibility(View.GONE);
                                 mBackdropFront.animate().cancel();
                                 mBackdropBack.setImageDrawable(null);
-                                mHandler.post(mHideBackdropFront);
+                                mMainExecutor.execute(mHideBackdropFront);
                             });
                     if (mKeyguardStateController.isKeyguardFadingAway()) {
                         mBackdrop.animate()
@@ -669,7 +671,8 @@
     };
 
     private Bitmap processArtwork(Bitmap artwork) {
-        return mMediaArtworkProcessor.processArtwork(mContext, artwork);
+        return mMediaArtworkProcessor.processArtwork(mContext, artwork,
+                WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE);
     }
 
     @MainThread
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
index f3783c8..ebc2fa6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
@@ -54,6 +54,7 @@
 import com.android.systemui.R;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.dagger.StatusBarModule;
 import com.android.systemui.statusbar.notification.NotificationEntryListener;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -70,9 +71,6 @@
 import java.util.Objects;
 import java.util.Set;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
 import dagger.Lazy;
 
 /**
@@ -81,7 +79,6 @@
  * interaction, keeping track of notifications to remove when NotificationPresenter is collapsed,
  * and handling clicks on remote views.
  */
-@Singleton
 public class NotificationRemoteInputManager implements Dumpable {
     public static final boolean ENABLE_REMOTE_INPUT =
             SystemProperties.getBoolean("debug.enable_remote_input", true);
@@ -257,7 +254,9 @@
         }
     };
 
-    @Inject
+    /**
+     * Injected constructor. See {@link StatusBarModule}.
+     */
     public NotificationRemoteInputManager(
             Context context,
             NotificationLockscreenUserManager lockscreenUserManager,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeWindowBlurController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeWindowBlurController.kt
new file mode 100644
index 0000000..85215ed
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeWindowBlurController.kt
@@ -0,0 +1,176 @@
+/*
+ * 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
+
+import android.animation.Animator
+import android.animation.AnimatorListenerAdapter
+import android.animation.ValueAnimator
+import android.view.Choreographer
+import android.view.View
+import com.android.internal.util.IndentingPrintWriter
+import com.android.systemui.DumpController
+import com.android.systemui.Dumpable
+import com.android.systemui.Interpolators
+import com.android.systemui.statusbar.phone.BiometricUnlockController
+import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK
+import com.android.systemui.statusbar.phone.NotificationShadeWindowController
+import com.android.systemui.statusbar.phone.PanelExpansionListener
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import java.io.FileDescriptor
+import java.io.PrintWriter
+import javax.inject.Inject
+import javax.inject.Singleton
+import kotlin.math.max
+
+/**
+ * Controller responsible for statusbar window blur.
+ */
+@Singleton
+class NotificationShadeWindowBlurController @Inject constructor(
+    private val statusBarStateController: SysuiStatusBarStateController,
+    private val blurUtils: BlurUtils,
+    private val biometricUnlockController: BiometricUnlockController,
+    private val keyguardStateController: KeyguardStateController,
+    private val notificationShadeWindowController: NotificationShadeWindowController,
+    private val choreographer: Choreographer,
+    dumpController: DumpController
+) : PanelExpansionListener, Dumpable {
+    companion object {
+        private const val WAKE_UP_ANIMATION_ENABLED = true
+        private const val SHADE_BLUR_ENABLED = true
+    }
+
+    lateinit var root: View
+    private var keyguardAnimator: Animator? = null
+    private var notificationAnimator: Animator? = null
+    private var updateScheduled: Boolean = false
+    private var shadeExpansion = 1.0f
+    private var shadeBlurRadius = 0
+        set(value) {
+            if (field == value) return
+            field = value
+            scheduleUpdate()
+        }
+    private var wakeAndUnlockBlurRadius = 0
+        set(value) {
+            if (field == value) return
+            field = value
+            scheduleUpdate()
+        }
+    private var incomingNotificationBlurRadius = 0
+        set(value) {
+            if (field == value) return
+            field = value
+            scheduleUpdate()
+        }
+
+    /**
+     * Callback that updates the window blur value and is called only once per frame.
+     */
+    private val updateBlurCallback = Choreographer.FrameCallback {
+        updateScheduled = false
+
+        var notificationBlur = 0
+        if (statusBarStateController.state == StatusBarState.KEYGUARD) {
+            notificationBlur = (incomingNotificationBlurRadius * shadeExpansion).toInt()
+        }
+
+        val blur = max(max(shadeBlurRadius, wakeAndUnlockBlurRadius), notificationBlur)
+        blurUtils.applyBlur(root.viewRootImpl, blur)
+    }
+
+    /**
+     * Animate blurs when unlocking.
+     */
+    private val keyguardStateCallback = object : KeyguardStateController.Callback {
+        override fun onKeyguardFadingAwayChanged() {
+            if (!keyguardStateController.isKeyguardFadingAway ||
+                    biometricUnlockController.mode != MODE_WAKE_AND_UNLOCK) {
+                return
+            }
+
+            keyguardAnimator?.cancel()
+            keyguardAnimator = ValueAnimator.ofFloat(1f, 0f).apply {
+                duration = keyguardStateController.keyguardFadingAwayDuration
+                startDelay = keyguardStateController.keyguardFadingAwayDelay
+                interpolator = Interpolators.DECELERATE_QUINT
+                addUpdateListener { animation: ValueAnimator ->
+                    wakeAndUnlockBlurRadius =
+                            blurUtils.radiusForRatio(animation.animatedValue as Float)
+                }
+                addListener(object : AnimatorListenerAdapter() {
+                    override fun onAnimationEnd(animation: Animator?) {
+                        keyguardAnimator = null
+                        scheduleUpdate()
+                    }
+                })
+                start()
+            }
+        }
+
+        override fun onKeyguardShowingChanged() {
+            if (keyguardStateController.isShowing) {
+                keyguardAnimator?.cancel()
+                notificationAnimator?.cancel()
+            }
+        }
+    }
+
+    init {
+        dumpController.registerDumpable(this)
+        if (WAKE_UP_ANIMATION_ENABLED) {
+            keyguardStateController.addCallback(keyguardStateCallback)
+        }
+    }
+
+    /**
+     * Update blurs when pulling down the shade
+     */
+    override fun onPanelExpansionChanged(expansion: Float, tracking: Boolean) {
+        if (!SHADE_BLUR_ENABLED) {
+            return
+        }
+
+        var newBlur = 0
+        if (statusBarStateController.state == StatusBarState.SHADE) {
+            newBlur = blurUtils.radiusForRatio(expansion)
+        }
+
+        if (shadeBlurRadius == newBlur) {
+            return
+        }
+        shadeBlurRadius = newBlur
+        scheduleUpdate()
+    }
+
+    private fun scheduleUpdate() {
+        if (updateScheduled) {
+            return
+        }
+        updateScheduled = true
+        choreographer.postFrameCallback(updateBlurCallback)
+    }
+
+    override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array<out String>) {
+        IndentingPrintWriter(pw, "  ").use {
+            it.println("StatusBarWindowBlurController:")
+            it.increaseIndent()
+            it.println("shadeBlurRadius: $shadeBlurRadius")
+            it.println("wakeAndUnlockBlur: $wakeAndUnlockBlurRadius")
+        }
+    }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java
index 37f9f88..7e70c20 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java
@@ -29,6 +29,7 @@
 import com.android.systemui.bubbles.BubbleController;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.dagger.StatusBarModule;
 import com.android.systemui.statusbar.notification.DynamicPrivacyController;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.VisualStabilityManager;
@@ -46,9 +47,6 @@
 import java.util.List;
 import java.util.Stack;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
 /**
  * NotificationViewHierarchyManager manages updating the view hierarchy of notification views based
  * on their group structure. For example, if a notification becomes bundled with another,
@@ -56,7 +54,6 @@
  * tell NotificationListContainer which notifications to display, and inform it of changes to those
  * notifications that might affect their display.
  */
-@Singleton
 public class NotificationViewHierarchyManager implements DynamicPrivacyController.Listener {
     private static final String TAG = "NotificationViewHierarchyManager";
 
@@ -94,8 +91,12 @@
     // the problem.
     private boolean mIsHandleDynamicPrivacyChangeScheduled;
 
-    @Inject
-    public NotificationViewHierarchyManager(Context context, @Main Handler mainHandler,
+    /**
+     * Injected constructor. See {@link StatusBarModule}.
+     */
+    public NotificationViewHierarchyManager(
+            Context context,
+            @Main Handler mainHandler,
             NotificationLockscreenUserManager notificationLockscreenUserManager,
             NotificationGroupManager groupManager,
             VisualStabilityManager visualStabilityManager,
@@ -104,8 +105,7 @@
             KeyguardBypassController bypassController,
             BubbleController bubbleController,
             DynamicPrivacyController privacyController,
-            ForegroundServiceSectionController fgsSectionController
-    ) {
+            ForegroundServiceSectionController fgsSectionController) {
         mContext = context;
         mHandler = mainHandler;
         mLockscreenUserManager = notificationLockscreenUserManager;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ScreenRecordDrawable.java b/packages/SystemUI/src/com/android/systemui/statusbar/ScreenRecordDrawable.java
new file mode 100644
index 0000000..44ef6b4
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ScreenRecordDrawable.java
@@ -0,0 +1,140 @@
+/*
+ * 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;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.DrawableWrapper;
+import android.util.AttributeSet;
+
+import com.android.systemui.R;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/**
+ * The screen record drawable draws a colored background and either a countdown or circle to
+ * indicate that the screen is being recorded.
+ */
+public class ScreenRecordDrawable extends DrawableWrapper {
+    private Drawable mFillDrawable;
+    private int mHorizontalPadding;
+    private int mLevel;
+    private float mTextSize;
+    private float mIconRadius;
+    private Paint mPaint;
+
+    /** No-arg constructor used by drawable inflation. */
+    public ScreenRecordDrawable() {
+        super(null);
+    }
+
+    @Override
+    public void inflate(@NonNull Resources r, @NonNull XmlPullParser parser,
+            @NonNull AttributeSet attrs, @Nullable Resources.Theme theme)
+            throws XmlPullParserException, IOException {
+        super.inflate(r, parser, attrs, theme);
+        setDrawable(r.getDrawable(R.drawable.ic_screen_record_background, theme).mutate());
+        mFillDrawable = r.getDrawable(R.drawable.ic_screen_record_background, theme).mutate();
+        mHorizontalPadding = r.getDimensionPixelSize(R.dimen.status_bar_horizontal_padding);
+
+        mTextSize = r.getDimensionPixelSize(R.dimen.screenrecord_status_text_size);
+        mIconRadius = r.getDimensionPixelSize(R.dimen.screenrecord_status_icon_radius);
+        mLevel = attrs.getAttributeIntValue(null, "level", 0);
+
+        mPaint = new Paint();
+        mPaint.setTextAlign(Paint.Align.CENTER);
+        mPaint.setColor(Color.WHITE);
+        mPaint.setTextSize(mTextSize);
+        mPaint.setFakeBoldText(true);
+    }
+
+    @Override
+    public boolean canApplyTheme() {
+        return mFillDrawable.canApplyTheme() || super.canApplyTheme();
+    }
+
+    @Override
+    public void applyTheme(Resources.Theme t) {
+        super.applyTheme(t);
+        mFillDrawable.applyTheme(t);
+    }
+
+    @Override
+    protected void onBoundsChange(Rect bounds) {
+        super.onBoundsChange(bounds);
+        mFillDrawable.setBounds(bounds);
+    }
+
+    @Override
+    public boolean onLayoutDirectionChanged(int layoutDirection) {
+        mFillDrawable.setLayoutDirection(layoutDirection);
+        return super.onLayoutDirectionChanged(layoutDirection);
+    }
+
+    @Override
+    public void draw(Canvas canvas) {
+        super.draw(canvas);
+        mFillDrawable.draw(canvas);
+
+        Rect b = mFillDrawable.getBounds();
+        if (mLevel > 0) {
+            String val = String.valueOf(mLevel);
+            Rect textBounds = new Rect();
+            mPaint.getTextBounds(val, 0, val.length(), textBounds);
+            float yOffset = textBounds.height() / 4; // half, and half again since it's centered
+            canvas.drawText(val, b.centerX(), b.centerY() + yOffset, mPaint);
+        } else {
+            canvas.drawCircle(b.centerX(), b.centerY() - mIconRadius / 2, mIconRadius, mPaint);
+        }
+    }
+
+    @Override
+    public boolean getPadding(Rect padding) {
+        padding.left += mHorizontalPadding;
+        padding.right += mHorizontalPadding;
+        padding.top = 0;
+        padding.bottom = 0;
+        android.util.Log.d("ScreenRecordDrawable", "set zero top/bottom pad");
+        return true;
+    }
+
+    @Override
+    public void setAlpha(int alpha) {
+        super.setAlpha(alpha);
+        mFillDrawable.setAlpha(alpha);
+    }
+
+    @Override
+    public boolean setVisible(boolean visible, boolean restart) {
+        mFillDrawable.setVisible(visible, restart);
+        return super.setVisible(visible, restart);
+    }
+
+    @Override
+    public Drawable mutate() {
+        mFillDrawable.mutate();
+        return super.mutate();
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SmartReplyController.java b/packages/SystemUI/src/com/android/systemui/statusbar/SmartReplyController.java
index 40f8e39..bb96f42 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SmartReplyController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SmartReplyController.java
@@ -21,27 +21,26 @@
 
 import com.android.internal.statusbar.IStatusBarService;
 import com.android.internal.statusbar.NotificationVisibility;
+import com.android.systemui.statusbar.dagger.StatusBarModule;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.logging.NotificationLogger;
 
 import java.util.Set;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
 /**
  * Handles when smart replies are added to a notification
  * and clicked upon.
  */
-@Singleton
 public class SmartReplyController {
     private final IStatusBarService mBarService;
     private final NotificationEntryManager mEntryManager;
     private Set<String> mSendingKeys = new ArraySet<>();
     private Callback mCallback;
 
-    @Inject
+    /**
+     * Injected constructor. See {@link StatusBarModule}.
+     */
     public SmartReplyController(NotificationEntryManager entryManager,
             IStatusBarService statusBarService) {
         mBarService = statusBarService;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarDependenciesModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarDependenciesModule.java
deleted file mode 100644
index 493482a..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarDependenciesModule.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar;
-
-import android.content.Context;
-
-import com.android.systemui.statusbar.notification.row.NotificationRowModule;
-import com.android.systemui.recents.OverviewProxyService;
-import com.android.systemui.tracing.ProtoTracer;
-
-import javax.inject.Singleton;
-
-import dagger.Module;
-import dagger.Provides;
-
-/**
- * Dagger Module providing common dependencies of StatusBar.
- */
-@Module(includes = {NotificationRowModule.class})
-public class StatusBarDependenciesModule {
-    /**
-     * Provides our instance of CommandQueue which is considered optional.
-     */
-    @Provides
-    @Singleton
-    public CommandQueue provideCommandQueue(Context context, ProtoTracer protoTracer) {
-        return new CommandQueue(context, protoTracer);
-    }
-
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWindowBlurController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWindowBlurController.kt
deleted file mode 100644
index 2e72163..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWindowBlurController.kt
+++ /dev/null
@@ -1,69 +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
-
-import android.content.res.Resources
-import android.view.View
-import com.android.internal.util.IndentingPrintWriter
-import com.android.systemui.DumpController
-import com.android.systemui.Dumpable
-import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.statusbar.phone.PanelExpansionListener
-import java.io.FileDescriptor
-import java.io.PrintWriter
-import javax.inject.Inject
-import javax.inject.Singleton
-
-/**
- * Controller responsible for statusbar window blur.
- */
-@Singleton
-class StatusBarWindowBlurController @Inject constructor(
-    @Main private val resources: Resources,
-    private val statusBarStateController: SysuiStatusBarStateController,
-    private val blurUtils: BlurUtils,
-    dumpController: DumpController
-) : PanelExpansionListener, Dumpable {
-
-    lateinit var root: View
-    private var blurRadius = 0
-
-    init {
-        dumpController.registerDumpable(this)
-    }
-
-    override fun onPanelExpansionChanged(expansion: Float, tracking: Boolean) {
-        val newBlur = if (statusBarStateController.state == StatusBarState.SHADE)
-            blurUtils.radiusForRatio(expansion)
-        else
-            0
-
-        if (blurRadius == newBlur) {
-            return
-        }
-        blurRadius = newBlur
-        blurUtils.applyBlur(root.viewRootImpl, blurRadius)
-    }
-
-    override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array<out String>) {
-        IndentingPrintWriter(pw, "  ").use {
-            it.println("StatusBarWindowBlurController:")
-            it.increaseIndent()
-            it.println("blurRadius: $blurRadius")
-        }
-    }
-}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java
new file mode 100644
index 0000000..cd5bb77
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java
@@ -0,0 +1,161 @@
+/*
+ * 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.dagger;
+
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Handler;
+
+import com.android.internal.statusbar.IStatusBarService;
+import com.android.systemui.bubbles.BubbleController;
+import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.MediaArtworkProcessor;
+import com.android.systemui.statusbar.NotificationListener;
+import com.android.systemui.statusbar.NotificationLockscreenUserManager;
+import com.android.systemui.statusbar.NotificationMediaManager;
+import com.android.systemui.statusbar.NotificationRemoteInputManager;
+import com.android.systemui.statusbar.NotificationViewHierarchyManager;
+import com.android.systemui.statusbar.SmartReplyController;
+import com.android.systemui.statusbar.notification.DynamicPrivacyController;
+import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.VisualStabilityManager;
+import com.android.systemui.statusbar.notification.stack.ForegroundServiceSectionController;
+import com.android.systemui.statusbar.phone.KeyguardBypassController;
+import com.android.systemui.statusbar.phone.NotificationGroupManager;
+import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
+import com.android.systemui.statusbar.phone.StatusBar;
+import com.android.systemui.statusbar.policy.RemoteInputUriController;
+import com.android.systemui.tracing.ProtoTracer;
+
+import java.util.concurrent.Executor;
+
+import javax.inject.Singleton;
+
+import dagger.Lazy;
+import dagger.Module;
+import dagger.Provides;
+
+/**
+ * This module provides instances needed to construct {@link StatusBar}. These are moved to this
+ * separate from {@link StatusBarModule} module so that components that wish to build their own
+ * version of StatusBar can include just dependencies, without injecting StatusBar itself.
+ */
+@Module
+public interface StatusBarDependenciesModule {
+    /** */
+    @Singleton
+    @Provides
+    static NotificationRemoteInputManager provideNotificationRemoteInputManager(
+            Context context,
+            NotificationLockscreenUserManager lockscreenUserManager,
+            SmartReplyController smartReplyController,
+            NotificationEntryManager notificationEntryManager,
+            Lazy<StatusBar> statusBarLazy,
+            StatusBarStateController statusBarStateController,
+            Handler mainHandler,
+            RemoteInputUriController remoteInputUriController) {
+        return new NotificationRemoteInputManager(
+                context,
+                lockscreenUserManager,
+                smartReplyController,
+                notificationEntryManager,
+                statusBarLazy,
+                statusBarStateController,
+                mainHandler,
+                remoteInputUriController);
+    }
+
+    /** */
+    @Singleton
+    @Provides
+    static NotificationMediaManager provideNotificationMediaManager(
+            Context context,
+            Lazy<StatusBar> statusBarLazy,
+            Lazy<NotificationShadeWindowController> notificationShadeWindowController,
+            NotificationEntryManager notificationEntryManager,
+            MediaArtworkProcessor mediaArtworkProcessor,
+            KeyguardBypassController keyguardBypassController,
+            @Main Executor mainExecutor) {
+        return new NotificationMediaManager(
+                context,
+                statusBarLazy,
+                notificationShadeWindowController,
+                notificationEntryManager,
+                mediaArtworkProcessor,
+                keyguardBypassController,
+                mainExecutor);
+    }
+
+    /** */
+    @Singleton
+    @Provides
+    static NotificationListener provideNotificationListener(
+            Context context,
+            NotificationManager notificationManager,
+            @Main Handler mainHandler) {
+        return new NotificationListener(
+                context, notificationManager, mainHandler);
+    }
+
+    /** */
+    @Singleton
+    @Provides
+    static SmartReplyController provideSmartReplyController(
+            NotificationEntryManager entryManager, IStatusBarService statusBarService) {
+        return new SmartReplyController(entryManager, statusBarService);
+    }
+
+    /** */
+    @Singleton
+    @Provides
+    static NotificationViewHierarchyManager provideNotificationViewHierarchyManager(
+            Context context,
+            @Main Handler mainHandler,
+            NotificationLockscreenUserManager notificationLockscreenUserManager,
+            NotificationGroupManager groupManager,
+            VisualStabilityManager visualStabilityManager,
+            StatusBarStateController statusBarStateController,
+            NotificationEntryManager notificationEntryManager,
+            KeyguardBypassController bypassController,
+            BubbleController bubbleController,
+            DynamicPrivacyController privacyController,
+            ForegroundServiceSectionController fgsSectionController) {
+        return new NotificationViewHierarchyManager(
+                context,
+                mainHandler,
+                notificationLockscreenUserManager,
+                groupManager,
+                visualStabilityManager,
+                statusBarStateController,
+                notificationEntryManager,
+                bypassController,
+                bubbleController,
+                privacyController,
+                fgsSectionController);
+    }
+
+    /**
+     * Provides our instance of CommandQueue which is considered optional.
+     */
+    @Provides
+    @Singleton
+    static CommandQueue provideCommandQueue(Context context, ProtoTracer protoTracer) {
+        return new CommandQueue(context, protoTracer);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.java
new file mode 100644
index 0000000..ad5ef20
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.java
@@ -0,0 +1,29 @@
+/*
+ * 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.dagger;
+
+import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
+import com.android.systemui.statusbar.notification.row.NotificationRowModule;
+import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneModule;
+
+import dagger.Module;
+
+/** */
+@Module(includes = {StatusBarPhoneModule.class, StatusBarDependenciesModule.class,
+        NotificationsModule.class, NotificationRowModule.class})
+public interface StatusBarModule {
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java
index 93f5805..55a20fa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java
@@ -51,10 +51,10 @@
 import com.android.internal.messages.nano.SystemMessageProto;
 import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
 import com.android.systemui.Dependency;
-import com.android.systemui.DockedStackExistsListener;
 import com.android.systemui.R;
 import com.android.systemui.SystemUI;
 import com.android.systemui.dagger.qualifiers.UiBackground;
+import com.android.systemui.stackdivider.Divider;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 import com.android.systemui.util.NotificationChannels;
@@ -80,11 +80,13 @@
     private final CommandQueue mCommandQueue;
     private boolean mDockedStackExists;
     private KeyguardStateController mKeyguardStateController;
+    private final Divider mDivider;
 
     @Inject
     public InstantAppNotifier(Context context, CommandQueue commandQueue,
-            @UiBackground Executor uiBgExecutor) {
+            @UiBackground Executor uiBgExecutor, Divider divider) {
         super(context);
+        mDivider = divider;
         mCommandQueue = commandQueue;
         mUiBgExecutor = uiBgExecutor;
     }
@@ -103,7 +105,7 @@
         mCommandQueue.addCallback(this);
         mKeyguardStateController.addCallback(this);
 
-        DockedStackExistsListener.register(
+        mDivider.registerInSplitScreenListener(
                 exists -> {
                     mDockedStackExists = exists;
                     updateForegroundInstantApps();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationAlertingManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationAlertingManager.java
index d0e238a..07cf9d9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationAlertingManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationAlertingManager.java
@@ -28,13 +28,10 @@
 import com.android.systemui.statusbar.NotificationListener;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
 /** Handles heads-up and pulsing behavior driven by notification changes. */
-@Singleton
 public class NotificationAlertingManager {
 
     private static final String TAG = "NotifAlertManager";
@@ -47,19 +44,23 @@
 
     private HeadsUpManager mHeadsUpManager;
 
-    @Inject
+    /**
+     * Injected constructor. See {@link NotificationsModule}.
+     */
     public NotificationAlertingManager(
             NotificationEntryManager notificationEntryManager,
             NotificationRemoteInputManager remoteInputManager,
             VisualStabilityManager visualStabilityManager,
             StatusBarStateController statusBarStateController,
             NotificationInterruptionStateProvider notificationInterruptionStateProvider,
-            NotificationListener notificationListener) {
+            NotificationListener notificationListener,
+            HeadsUpManager headsUpManager) {
         mRemoteInputManager = remoteInputManager;
         mVisualStabilityManager = visualStabilityManager;
         mStatusBarStateController = statusBarStateController;
         mNotificationInterruptionStateProvider = notificationInterruptionStateProvider;
         mNotificationListener = notificationListener;
+        mHeadsUpManager = headsUpManager;
 
         notificationEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
             @Override
@@ -82,10 +83,6 @@
         });
     }
 
-    public void setHeadsUpManager(HeadsUpManager headsUpManager) {
-        mHeadsUpManager = headsUpManager;
-    }
-
     /**
      * Adds the entry to the respective alerting manager if the content view was inflated and
      * the entry should still alert.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
index 61915ad..5ebd368 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
@@ -47,12 +47,9 @@
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
-import com.android.systemui.statusbar.notification.logging.NotifEvent;
-import com.android.systemui.statusbar.notification.logging.NotifLog;
+import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
 import com.android.systemui.statusbar.notification.logging.NotificationLogger;
-import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
 import com.android.systemui.statusbar.phone.NotificationGroupManager;
-import com.android.systemui.statusbar.policy.HeadsUpManager;
 import com.android.systemui.util.Assert;
 import com.android.systemui.util.leak.LeakDetector;
 
@@ -66,9 +63,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
 import dagger.Lazy;
 
 /**
@@ -96,7 +90,6 @@
  * aware of
  * @see #getActiveNotificationsForCurrentUser() to see every notification that the current user owns
  */
-@Singleton
 public class NotificationEntryManager implements
         CommonNotifCollection,
         Dumpable,
@@ -129,6 +122,8 @@
     private final Map<NotificationEntry, NotificationLifetimeExtender> mRetainedNotifications =
             new ArrayMap<>();
 
+    private final NotificationEntryManagerLogger mLogger;
+
     // Lazily retrieved dependencies
     private final Lazy<NotificationRowBinder> mNotificationRowBinderLazy;
     private final Lazy<NotificationRemoteInputManager> mRemoteInputManagerLazy;
@@ -143,7 +138,6 @@
 
     private NotificationPresenter mPresenter;
     private RankingMap mLatestRankingMap;
-    private NotifLog mNotifLog;
 
     @VisibleForTesting
     final ArrayList<NotificationLifetimeExtender> mNotificationLifetimeExtenders
@@ -182,9 +176,11 @@
         }
     }
 
-    @Inject
+    /**
+     * Injected constructor. See {@link NotificationsModule}.
+     */
     public NotificationEntryManager(
-            NotifLog notifLog,
+            NotificationEntryManagerLogger logger,
             NotificationGroupManager groupManager,
             NotificationRankingManager rankingManager,
             KeyguardEnvironment keyguardEnvironment,
@@ -193,7 +189,7 @@
             Lazy<NotificationRemoteInputManager> notificationRemoteInputManagerLazy,
             LeakDetector leakDetector,
             ForegroundServiceDismissalFeatureController fgsFeatureController) {
-        mNotifLog = notifLog;
+        mLogger = logger;
         mGroupManager = groupManager;
         mRankingManager = rankingManager;
         mKeyguardEnvironment = keyguardEnvironment;
@@ -232,9 +228,7 @@
         mRemoveInterceptors.remove(interceptor);
     }
 
-    public void setUpWithPresenter(NotificationPresenter presenter,
-            NotificationListContainer listContainer,
-            HeadsUpManager headsUpManager) {
+    public void setUpWithPresenter(NotificationPresenter presenter) {
         mPresenter = presenter;
     }
 
@@ -291,13 +285,15 @@
             NotificationEntry entry = mPendingNotifications.get(key);
             entry.abortTask();
             mPendingNotifications.remove(key);
-            mNotifLog.log(NotifEvent.INFLATION_ABORTED, entry, "PendingNotification aborted"
-                    + " reason=" + reason);
+            for (NotifCollectionListener listener : mNotifCollectionListeners) {
+                listener.onEntryCleanUp(entry);
+            }
+            mLogger.logInflationAborted(key, "pending", reason);
         }
         NotificationEntry addedEntry = getActiveNotificationUnfiltered(key);
         if (addedEntry != null) {
             addedEntry.abortTask();
-            mNotifLog.log(NotifEvent.INFLATION_ABORTED, addedEntry.getKey() + " " + reason);
+            mLogger.logInflationAborted(key, "active", reason);
         }
     }
 
@@ -328,9 +324,9 @@
         // the list, otherwise we might get leaks.
         if (!entry.isRowRemoved()) {
             boolean isNew = getActiveNotificationUnfiltered(entry.getKey()) == null;
+            mLogger.logNotifInflated(entry.getKey(), isNew);
             if (isNew) {
                 for (NotificationEntryListener listener : mNotificationEntryListeners) {
-                    mNotifLog.log(NotifEvent.INFLATED, entry);
                     listener.onEntryInflated(entry);
                 }
                 addActiveNotification(entry);
@@ -340,7 +336,6 @@
                 }
             } else {
                 for (NotificationEntryListener listener : mNotificationEntryListeners) {
-                    mNotifLog.log(NotifEvent.INFLATED, entry);
                     listener.onEntryReinflated(entry);
                 }
             }
@@ -422,7 +417,7 @@
         for (NotificationRemoveInterceptor interceptor : mRemoveInterceptors) {
             if (interceptor.onNotificationRemoveRequested(key, entry, reason)) {
                 // Remove intercepted; log and skip
-                mNotifLog.log(NotifEvent.REMOVE_INTERCEPTED);
+                mLogger.logRemovalIntercepted(key);
                 return;
             }
         }
@@ -437,10 +432,7 @@
                     if (extender.shouldExtendLifetimeForPendingNotification(pendingEntry)) {
                         extendLifetime(pendingEntry, extender);
                         lifetimeExtended = true;
-                        mNotifLog.log(
-                                NotifEvent.LIFETIME_EXTENDED,
-                                pendingEntry.getSbn(),
-                                "pendingEntry extendedBy=" + extender.toString());
+                        mLogger.logLifetimeExtended(key, extender.getClass().getName(), "pending");
                     }
                 }
             }
@@ -460,10 +452,7 @@
                         mLatestRankingMap = ranking;
                         extendLifetime(entry, extender);
                         lifetimeExtended = true;
-                        mNotifLog.log(
-                                NotifEvent.LIFETIME_EXTENDED,
-                                entry.getSbn(),
-                                "entry extendedBy=" + extender.toString());
+                        mLogger.logLifetimeExtended(key, extender.getClass().getName(), "active");
                         break;
                     }
                 }
@@ -486,8 +475,7 @@
                 mLeakDetector.trackGarbage(entry);
                 removedByUser |= entryDismissed;
 
-                mNotifLog.log(NotifEvent.NOTIF_REMOVED, entry.getSbn(),
-                        "removedByUser=" + removedByUser);
+                mLogger.logNotifRemoved(entry.getKey(), removedByUser);
                 for (NotificationEntryListener listener : mNotificationEntryListeners) {
                     listener.onEntryRemoved(entry, visibility, removedByUser);
                 }
@@ -576,7 +564,7 @@
 
         abortExistingInflation(key, "addNotification");
         mPendingNotifications.put(key, entry);
-        mNotifLog.log(NotifEvent.NOTIF_ADDED, entry);
+        mLogger.logNotifAdded(entry.getKey());
         for (NotificationEntryListener listener : mNotificationEntryListeners) {
             listener.onPendingEntryAdded(entry);
         }
@@ -613,7 +601,7 @@
         entry.setSbn(notification);
         mGroupManager.onEntryUpdated(entry, oldSbn);
 
-        mNotifLog.log(NotifEvent.NOTIF_UPDATED, entry);
+        mLogger.logNotifUpdated(entry.getKey());
         for (NotificationEntryListener listener : mNotificationEntryListeners) {
             listener.onPreEntryUpdated(entry);
         }
@@ -808,7 +796,7 @@
     //TODO: Get rid of this in favor of NotificationUpdateHandler#updateNotificationRanking
     /**
      * @param rankingMap the {@link RankingMap} to apply to the current notification list
-     * @param reason the reason for calling this method, for {@link NotifLog}
+     * @param reason the reason for calling this method, which will be logged
      */
     public void updateRanking(RankingMap rankingMap, String reason) {
         updateRankingAndSort(rankingMap, reason);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManagerLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManagerLogger.kt
new file mode 100644
index 0000000..4382ab5
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManagerLogger.kt
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification
+
+import com.android.systemui.log.LogBuffer
+import com.android.systemui.log.LogLevel.DEBUG
+import com.android.systemui.log.LogLevel.INFO
+import com.android.systemui.log.dagger.NotificationLog
+import javax.inject.Inject
+
+/** Logger for [NotificationEntryManager]. */
+class NotificationEntryManagerLogger @Inject constructor(
+    @NotificationLog private val buffer: LogBuffer
+) {
+    fun logNotifAdded(key: String) {
+        buffer.log(TAG, INFO, {
+            str1 = key
+        }, {
+            "NOTIF ADDED $str1"
+        })
+    }
+
+    fun logNotifUpdated(key: String) {
+        buffer.log(TAG, INFO, {
+            str1 = key
+        }, {
+            "NOTIF UPDATED $str1"
+        })
+    }
+
+    fun logInflationAborted(key: String, status: String, reason: String) {
+        buffer.log(TAG, DEBUG, {
+            str1 = key
+            str2 = status
+            str3 = reason
+        }, {
+            "NOTIF INFLATION ABORTED $str1 notifStatus=$str2 reason=$str3"
+        })
+    }
+
+    fun logNotifInflated(key: String, isNew: Boolean) {
+        buffer.log(TAG, DEBUG, {
+            str1 = key
+            bool1 = isNew
+        }, {
+            "NOTIF INFLATED $str1 isNew=$bool1}"
+        })
+    }
+
+    fun logRemovalIntercepted(key: String) {
+        buffer.log(TAG, INFO, {
+            str1 = key
+        }, {
+            "NOTIF REMOVE INTERCEPTED for $str1"
+        })
+    }
+
+    fun logLifetimeExtended(key: String, extenderName: String, status: String) {
+        buffer.log(TAG, INFO, {
+            str1 = key
+            str2 = extenderName
+            str3 = status
+        }, {
+            "NOTIF LIFETIME EXTENDED $str1 extender=$str2 status=$str3"
+        })
+    }
+
+    fun logNotifRemoved(key: String, removedByUser: Boolean) {
+        buffer.log(TAG, INFO, {
+            str1 = key
+            bool1 = removedByUser
+        }, {
+            "NOTIF REMOVED $str1 removedByUser=$bool1"
+        })
+    }
+
+    fun logFilterAndSort(reason: String) {
+        buffer.log(TAG, INFO, {
+            str1 = reason
+        }, {
+            "FILTER AND SORT reason=$str1"
+        })
+    }
+}
+
+private const val TAG = "NotificationEntryMgr"
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/VisualStabilityManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/VisualStabilityManager.java
index 99718ab..fabe3a7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/VisualStabilityManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/VisualStabilityManager.java
@@ -26,6 +26,7 @@
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.statusbar.NotificationPresenter;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
 import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
 
@@ -33,14 +34,10 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
 /**
  * A manager that ensures that notifications are visually stable. It will suppress reorderings
  * and reorder at the right time when they are out of view.
  */
-@Singleton
 public class VisualStabilityManager implements OnHeadsUpChangedListener, Dumpable {
 
     private static final long TEMPORARY_REORDERING_ALLOWED_DURATION = 1000;
@@ -60,9 +57,12 @@
     private ArraySet<View> mAddedChildren = new ArraySet<>();
     private boolean mPulsing;
 
-    @Inject
+    /**
+     * Injected constructor. See {@link NotificationsModule}.
+     */
     public VisualStabilityManager(
-            NotificationEntryManager notificationEntryManager, @Main Handler handler) {
+            NotificationEntryManager notificationEntryManager,
+            @Main Handler handler) {
 
         mHandler = handler;
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java
index 7fe229c..b5c81b2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java
@@ -123,6 +123,16 @@
                         .append(" ");
             }
 
+            if (!notifEntry.mDismissInterceptors.isEmpty()) {
+                String[] interceptorsNames = new String[notifEntry.mDismissInterceptors.size()];
+                for (int i = 0; i < interceptorsNames.length; i++) {
+                    interceptorsNames[i] = notifEntry.mDismissInterceptors.get(i).getName();
+                }
+                rksb.append("dismissInterceptors=")
+                        .append(Arrays.toString(interceptorsNames))
+                        .append(" ");
+            }
+
             if (notifEntry.mExcludingFilter != null) {
                 rksb.append("filter=")
                         .append(notifEntry.mExcludingFilter)
@@ -141,10 +151,6 @@
                         .append(" ");
             }
 
-            if (notifEntry.hasInflationError()) {
-                rksb.append("(!)hasInflationError ");
-            }
-
             if (notifEntry.getDismissState() != NOT_DISMISSED) {
                 rksb.append("dismissState=")
                         .append(notifEntry.getDismissState())
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
index 3b2fe94..91d2de7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
@@ -44,11 +44,16 @@
 import android.annotation.IntDef;
 import android.annotation.MainThread;
 import android.annotation.Nullable;
+import android.annotation.UserIdInt;
+import android.app.Notification;
 import android.os.RemoteException;
+import android.os.UserHandle;
+import android.service.notification.NotificationListenerService;
 import android.service.notification.NotificationListenerService.Ranking;
 import android.service.notification.NotificationListenerService.RankingMap;
 import android.service.notification.StatusBarNotification;
 import android.util.ArrayMap;
+import android.util.Pair;
 
 import androidx.annotation.NonNull;
 
@@ -63,6 +68,7 @@
 import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionLogger;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifDismissInterceptor;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
 import com.android.systemui.util.Assert;
 
@@ -116,6 +122,7 @@
     @Nullable private CollectionReadyForBuildListener mBuildListener;
     private final List<NotifCollectionListener> mNotifCollectionListeners = new ArrayList<>();
     private final List<NotifLifetimeExtender> mLifetimeExtenders = new ArrayList<>();
+    private final List<NotifDismissInterceptor> mDismissInterceptors = new ArrayList<>();
 
     private boolean mAttached = false;
     private boolean mAmDispatchingToOtherCode;
@@ -176,55 +183,133 @@
         extender.setCallback(this::onEndLifetimeExtension);
     }
 
-    /**
-     * Dismiss a notification on behalf of the user.
-     */
-    void dismissNotification(NotificationEntry entry, @NonNull DismissedByUserStats stats) {
+    /** @see NotifPipeline#addNotificationDismissInterceptor(NotifDismissInterceptor) */
+    void addNotificationDismissInterceptor(NotifDismissInterceptor interceptor) {
         Assert.isMainThread();
-        requireNonNull(stats);
+        checkForReentrantCall();
+        if (mDismissInterceptors.contains(interceptor)) {
+            throw new IllegalArgumentException("Interceptor " + interceptor + " already added.");
+        }
+        mDismissInterceptors.add(interceptor);
+        interceptor.setCallback(this::onEndDismissInterception);
+    }
+
+    /**
+     * Dismisses multiple notifications on behalf of the user.
+     */
+    public void dismissNotifications(
+            List<Pair<NotificationEntry, DismissedByUserStats>> entriesToDismiss) {
+        Assert.isMainThread();
         checkForReentrantCall();
 
-        if (entry != mNotificationSet.get(entry.getKey())) {
-            throw new IllegalStateException("Invalid entry: " + entry.getKey());
-        }
+        final List<NotificationEntry> entriesToLocallyDismiss = new ArrayList<>();
+        for (int i = 0; i < entriesToDismiss.size(); i++) {
+            NotificationEntry entry = entriesToDismiss.get(i).first;
+            DismissedByUserStats stats = entriesToDismiss.get(i).second;
 
-        if (entry.getDismissState() == DISMISSED) {
-            return;
-        }
-
-        // Optimistically mark the notification as dismissed -- we'll wait for the signal from
-        // system server before removing it from our notification set.
-        entry.setDismissState(DISMISSED);
-        mLogger.logNotifDismissed(entry.getKey());
-
-        List<NotificationEntry> canceledEntries = new ArrayList<>();
-
-        if (isCanceled(entry)) {
-            canceledEntries.add(entry);
-        } else {
-            // Ask system server to remove it for us
-            try {
-                mStatusBarService.onNotificationClear(
-                        entry.getSbn().getPackageName(),
-                        entry.getSbn().getTag(),
-                        entry.getSbn().getId(),
-                        entry.getSbn().getUser().getIdentifier(),
-                        entry.getSbn().getKey(),
-                        stats.dismissalSurface,
-                        stats.dismissalSentiment,
-                        stats.notificationVisibility);
-            } catch (RemoteException e) {
-                // system process is dead if we're here.
+            requireNonNull(stats);
+            if (entry != mNotificationSet.get(entry.getKey())) {
+                throw new IllegalStateException("Invalid entry: " + entry.getKey());
             }
 
-            // Also mark any children as dismissed as system server will auto-dismiss them as well
-            if (entry.getSbn().getNotification().isGroupSummary()) {
-                for (NotificationEntry otherEntry : mNotificationSet.values()) {
-                    if (otherEntry.getSbn().getGroupKey().equals(entry.getSbn().getGroupKey())
-                            && otherEntry.getDismissState() != DISMISSED) {
-                        otherEntry.setDismissState(PARENT_DISMISSED);
-                        if (isCanceled(otherEntry)) {
-                            canceledEntries.add(otherEntry);
+            if (entry.getDismissState() == DISMISSED) {
+                continue;
+            }
+
+            updateDismissInterceptors(entry);
+            if (isDismissIntercepted(entry)) {
+                mLogger.logNotifDismissedIntercepted(entry.getKey());
+                continue;
+            }
+
+            entriesToLocallyDismiss.add(entry);
+            if (!isCanceled(entry)) {
+                // send message to system server if this notification hasn't already been cancelled
+                try {
+                    mStatusBarService.onNotificationClear(
+                            entry.getSbn().getPackageName(),
+                            entry.getSbn().getTag(),
+                            entry.getSbn().getId(),
+                            entry.getSbn().getUser().getIdentifier(),
+                            entry.getSbn().getKey(),
+                            stats.dismissalSurface,
+                            stats.dismissalSentiment,
+                            stats.notificationVisibility);
+                } catch (RemoteException e) {
+                    // system process is dead if we're here.
+                }
+            }
+        }
+
+        locallyDismissNotifications(entriesToLocallyDismiss);
+        rebuildList();
+    }
+
+    /**
+     * Dismisses a single notification on behalf of the user.
+     */
+    public void dismissNotification(
+            NotificationEntry entry,
+            @NonNull DismissedByUserStats stats) {
+        dismissNotifications(List.of(
+                new Pair<NotificationEntry, DismissedByUserStats>(entry, stats)));
+    }
+
+    /**
+     * Dismisses all clearable notifications for a given userid on behalf of the user.
+     */
+    public void dismissAllNotifications(@UserIdInt int userId) {
+        Assert.isMainThread();
+        checkForReentrantCall();
+
+        try {
+            mStatusBarService.onClearAllNotifications(userId);
+        } catch (RemoteException e) {
+            // system process is dead if we're here.
+        }
+
+        final List<NotificationEntry> entries = new ArrayList(getActiveNotifs());
+        for (int i = entries.size() - 1; i >= 0; i--) {
+            NotificationEntry entry = entries.get(i);
+            if (!shouldDismissOnClearAll(entry, userId)) {
+                // system server won't be removing these notifications, but we still give dismiss
+                // interceptors the chance to filter the notification
+                updateDismissInterceptors(entry);
+                if (isDismissIntercepted(entry)) {
+                    mLogger.logNotifClearAllDismissalIntercepted(entry.getKey());
+                }
+                entries.remove(i);
+            }
+        }
+
+        locallyDismissNotifications(entries);
+        rebuildList();
+    }
+
+    /**
+     * Optimistically marks the given notifications as dismissed -- we'll wait for the signal
+     * from system server before removing it from our notification set.
+     */
+    private void locallyDismissNotifications(List<NotificationEntry> entries) {
+        final List<NotificationEntry> canceledEntries = new ArrayList<>();
+
+        for (int i = 0; i < entries.size(); i++) {
+            NotificationEntry entry = entries.get(i);
+
+            entry.setDismissState(DISMISSED);
+            mLogger.logNotifDismissed(entry.getKey());
+
+            if (isCanceled(entry)) {
+                canceledEntries.add(entry);
+            } else {
+                // Mark any children as dismissed as system server will auto-dismiss them as well
+                if (entry.getSbn().getNotification().isGroupSummary()) {
+                    for (NotificationEntry otherEntry : mNotificationSet.values()) {
+                        if (shouldAutoDismissChildren(otherEntry, entry.getSbn().getGroupKey())) {
+                            otherEntry.setDismissState(PARENT_DISMISSED);
+                            if (isCanceled(otherEntry)) {
+                                canceledEntries.add(otherEntry);
+                            }
                         }
                     }
                 }
@@ -236,8 +321,6 @@
         for (NotificationEntry canceledEntry : canceledEntries) {
             tryRemoveNotification(canceledEntry);
         }
-
-        rebuildList();
     }
 
     private void onNotificationPosted(StatusBarNotification sbn, RankingMap rankingMap) {
@@ -307,11 +390,11 @@
             // Update to an existing entry
             mLogger.logNotifUpdated(sbn.getKey());
 
+            // Notification is updated so it is essentially re-added and thus alive again, so we
+            // can reset its state.
             cancelLocalDismissal(entry);
-
-            // Notification is updated so it is essentially re-added and thus alive again. Don't
-            // need to keep its lifetime extended.
             cancelLifetimeExtension(entry);
+            cancelDismissInterception(entry);
             entry.mCancellationReason = REASON_NOT_CANCELED;
 
             entry.setSbn(sbn);
@@ -348,6 +431,7 @@
 
         if (!isLifetimeExtended(entry)) {
             mNotificationSet.remove(entry.getKey());
+            cancelDismissInterception(entry);
             dispatchOnEntryRemoved(entry, entry.mCancellationReason);
             dispatchOnEntryCleanUp(entry);
             return true;
@@ -436,6 +520,17 @@
         mAmDispatchingToOtherCode = false;
     }
 
+    private void updateDismissInterceptors(@NonNull NotificationEntry entry) {
+        entry.mDismissInterceptors.clear();
+        mAmDispatchingToOtherCode = true;
+        for (NotifDismissInterceptor interceptor : mDismissInterceptors) {
+            if (interceptor.shouldInterceptDismissal(entry)) {
+                entry.mDismissInterceptors.add(interceptor);
+            }
+        }
+        mAmDispatchingToOtherCode = false;
+    }
+
     private void cancelLocalDismissal(NotificationEntry entry) {
         if (isDismissedByUser(entry)) {
             entry.setDismissState(NOT_DISMISSED);
@@ -450,6 +545,42 @@
         }
     }
 
+    private void onEndDismissInterception(
+            NotifDismissInterceptor interceptor,
+            NotificationEntry entry,
+            @NonNull DismissedByUserStats stats) {
+        Assert.isMainThread();
+        if (!mAttached) {
+            return;
+        }
+        checkForReentrantCall();
+
+        if (!entry.mDismissInterceptors.remove(interceptor)) {
+            throw new IllegalStateException(
+                    String.format(
+                            "Cannot end dismiss interceptor for interceptor \"%s\" (%s)",
+                            interceptor.getName(),
+                            interceptor));
+        }
+
+        if (!isDismissIntercepted(entry)) {
+            dismissNotification(entry, stats);
+        }
+    }
+
+    private void cancelDismissInterception(NotificationEntry entry) {
+        mAmDispatchingToOtherCode = true;
+        for (NotifDismissInterceptor interceptor : entry.mDismissInterceptors) {
+            interceptor.cancelDismissInterception(entry);
+        }
+        mAmDispatchingToOtherCode = false;
+        entry.mDismissInterceptors.clear();
+    }
+
+    private boolean isDismissIntercepted(NotificationEntry entry) {
+        return entry.mDismissInterceptors.size() > 0;
+    }
+
     private void checkForReentrantCall() {
         if (mAmDispatchingToOtherCode) {
             throw new IllegalStateException("Reentrant call detected");
@@ -478,6 +609,57 @@
         return entry.getDismissState() != NOT_DISMISSED;
     }
 
+    /**
+     * When a group summary is dismissed, NotificationManager will also try to dismiss its children.
+     * Returns true if we think dismissing the group summary with group key
+     * <code>dismissedGroupKey</code> will cause NotificationManager to also dismiss
+     * <code>entry</code>.
+     *
+     * See NotificationManager.cancelGroupChildrenByListLocked() for corresponding code.
+     */
+    private static boolean shouldAutoDismissChildren(
+            NotificationEntry entry,
+            String dismissedGroupKey) {
+        return entry.getSbn().getGroupKey().equals(dismissedGroupKey)
+                && !entry.getSbn().getNotification().isGroupSummary()
+                && !hasFlag(entry, Notification.FLAG_FOREGROUND_SERVICE)
+                && !hasFlag(entry, Notification.FLAG_BUBBLE)
+                && entry.getDismissState() != DISMISSED;
+    }
+
+    /**
+     * When the user 'clears all notifications' through SystemUI, NotificationManager will not
+     * dismiss unclearable notifications.
+     * @return true if we think NotificationManager will dismiss the entry when asked to
+     * cancel this notification with {@link NotificationListenerService#REASON_CANCEL_ALL}
+     *
+     * See NotificationManager.cancelAllLocked for corresponding code.
+     */
+    private static boolean shouldDismissOnClearAll(
+            NotificationEntry entry,
+            @UserIdInt int userId) {
+        return userIdMatches(entry, userId)
+                && entry.isClearable()
+                && !hasFlag(entry, Notification.FLAG_BUBBLE)
+                && entry.getDismissState() != DISMISSED;
+    }
+
+    private static boolean hasFlag(NotificationEntry entry, int flag) {
+        return (entry.getSbn().getNotification().flags & flag) != 0;
+    }
+
+    /**
+     * Determine whether the userId applies to the notification in question, either because
+     * they match exactly, or one of them is USER_ALL (which is treated as a wildcard).
+     *
+     * See NotificationManager#notificationMatchesUserId
+     */
+    private static boolean userIdMatches(NotificationEntry entry, int userId) {
+        return userId == UserHandle.USER_ALL
+                || entry.getSbn().getUser().getIdentifier() == UserHandle.USER_ALL
+                || entry.getSbn().getUser().getIdentifier() == userId;
+    }
+
     private void dispatchOnEntryInit(NotificationEntry entry) {
         mAmDispatchingToOtherCode = true;
         for (NotifCollectionListener listener : mNotifCollectionListeners) {
@@ -525,6 +707,7 @@
         }
         mAmDispatchingToOtherCode = false;
     }
+
     @Override
     public void dump(@NonNull FileDescriptor fd, PrintWriter pw, @NonNull String[] args) {
         final List<NotificationEntry> entries = new ArrayList<>(getActiveNotifs());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java
index 9272e51b..1f6413b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java
@@ -18,9 +18,7 @@
 
 import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_NEUTRAL;
 
-import android.os.RemoteException;
 import android.service.notification.NotificationStats;
-import android.service.notification.StatusBarNotification;
 
 import com.android.internal.statusbar.IStatusBarService;
 import com.android.internal.statusbar.NotificationVisibility;
@@ -29,6 +27,7 @@
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
 import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
 import com.android.systemui.statusbar.notification.logging.NotificationLogger;
+import com.android.systemui.statusbar.notification.row.NotifInflationErrorManager;
 import com.android.systemui.statusbar.notification.row.NotificationContentInflater;
 
 import javax.inject.Inject;
@@ -44,6 +43,8 @@
 
     private final IStatusBarService mStatusBarService;
     private final NotifCollection mNotifCollection;
+    private final NotifInflationErrorManager mNotifErrorManager;
+    private final NotifPipeline mNotifPipeline;
 
     private NotificationRowBinderImpl mNotificationRowBinder;
     private InflationCallback mExternalInflationCallback;
@@ -51,9 +52,13 @@
     @Inject
     public NotifInflaterImpl(
             IStatusBarService statusBarService,
-            NotifCollection notifCollection) {
+            NotifCollection notifCollection,
+            NotifInflationErrorManager errorManager,
+            NotifPipeline notifPipeline) {
         mStatusBarService = statusBarService;
         mNotifCollection = notifCollection;
+        mNotifErrorManager = errorManager;
+        mNotifPipeline = notifPipeline;
     }
 
     /**
@@ -81,7 +86,6 @@
     @Override
     public void inflateViews(NotificationEntry entry) {
         try {
-            entry.setHasInflationError(false);
             requireBinder().inflateViews(entry, getDismissCallback(entry));
         } catch (InflationException e) {
             // logged in mInflationCallback.handleInflationException
@@ -109,7 +113,7 @@
                                 DISMISS_SENTIMENT_NEUTRAL,
                                 NotificationVisibility.obtain(entry.getKey(),
                                         entry.getRanking().getRank(),
-                                        mNotifCollection.getActiveNotifs().size(),
+                                        mNotifPipeline.getShadeListCount(),
                                         true,
                                         NotificationLogger.getNotificationLocation(entry))
                         ));
@@ -131,25 +135,12 @@
                 public void handleInflationException(
                         NotificationEntry entry,
                         Exception e) {
-                    entry.setHasInflationError(true);
-                    try {
-                        final StatusBarNotification sbn = entry.getSbn();
-                        // report notification inflation errors back up
-                        // to notification delegates
-                        mStatusBarService.onNotificationError(
-                                sbn.getPackageName(),
-                                sbn.getTag(),
-                                sbn.getId(),
-                                sbn.getUid(),
-                                sbn.getInitialPid(),
-                                e.getMessage(),
-                                sbn.getUserId());
-                    } catch (RemoteException ex) {
-                    }
+                    mNotifErrorManager.setInflationError(entry, e);
                 }
 
                 @Override
                 public void onAsyncInflationFinished(NotificationEntry entry) {
+                    mNotifErrorManager.clearInflationError(entry);
                     if (mExternalInflationCallback != null) {
                         mExternalInflationCallback.onInflationFinished(entry);
                     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.java
index 5767ad9..44cec96 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.java
@@ -25,6 +25,7 @@
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSection;
 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifDismissInterceptor;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
 
 import java.util.Collection;
@@ -97,13 +98,21 @@
 
     /**
      * Registers a lifetime extender. Lifetime extenders can cause notifications that have been
-     * dismissed or retracted to be temporarily retained in the collection.
+     * dismissed or retracted by system server to be temporarily retained in the collection.
      */
     public void addNotificationLifetimeExtender(NotifLifetimeExtender extender) {
         mNotifCollection.addNotificationLifetimeExtender(extender);
     }
 
     /**
+     * Registers a dismiss interceptor. Dismiss interceptors can cause notifications that have been
+     * dismissed by the user to be retained (won't send a dismissal to system server).
+     */
+    public void addNotificationDismissInterceptor(NotifDismissInterceptor interceptor) {
+        mNotifCollection.addNotificationDismissInterceptor(interceptor);
+    }
+
+    /**
      * Registers a filter with the pipeline before grouping, promoting and sorting occurs. Filters
      * are called on each notification in the order that they were registered. If any filter
      * returns true, the notification is removed from the pipeline (and no other filters are
@@ -186,4 +195,27 @@
     public List<ListEntry> getShadeList() {
         return mShadeListBuilder.getShadeList();
     }
+
+    /**
+     * Returns the number of notifications currently shown in the shade. This includes all
+     * children and summary notifications. If this method is called during pipeline execution it
+     * will return the number of notifications in its current state, which will likely be only
+     * partially-generated.
+     */
+    public int getShadeListCount() {
+        final List<ListEntry> entries = getShadeList();
+        int numNotifs = 0;
+        for (int i = 0; i < entries.size(); i++) {
+            final ListEntry entry = entries.get(i);
+            if (entry instanceof GroupEntry) {
+                final GroupEntry parentEntry = (GroupEntry) entry;
+                numNotifs++; // include the summary in the count
+                numNotifs += parentEntry.getChildren().size();
+            } else {
+                numNotifs++;
+            }
+        }
+
+        return numNotifs;
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
index 0b14363..25a832d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
@@ -72,8 +72,10 @@
 import com.android.systemui.statusbar.notification.collection.NotifCollection.CancellationReason;
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifDismissInterceptor;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
+import com.android.systemui.statusbar.notification.row.ExpandableNotificationRowController;
 import com.android.systemui.statusbar.notification.row.NotificationGuts;
 import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
 import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager;
@@ -116,6 +118,9 @@
     /** List of lifetime extenders that are extending the lifetime of this notification. */
     final List<NotifLifetimeExtender> mLifetimeExtenders = new ArrayList<>();
 
+    /** List of dismiss interceptors that are intercepting the dismissal of this notification. */
+    final List<NotifDismissInterceptor> mDismissInterceptors = new ArrayList<>();
+
     /** If this notification was filtered out, then the filter that did the filtering. */
     @Nullable NotifFilter mExcludingFilter;
 
@@ -129,9 +134,6 @@
      */
     @CancellationReason int mCancellationReason = REASON_NOT_CANCELED;
 
-    /** @see #hasInflationError() */
-    private boolean mHasInflationError;
-
     /** @see #getDismissState() */
     @NonNull private DismissState mDismissState = DismissState.NOT_DISMISSED;
 
@@ -161,6 +163,7 @@
 
     private NotificationEntry parent; // our parent (if we're in a group)
     private ExpandableNotificationRow row; // the outer expanded view
+    private ExpandableNotificationRowController mRowController;
 
     private int mCachedContrastColor = COLOR_INVALID;
     private int mCachedContrastColorIsFor = COLOR_INVALID;
@@ -280,23 +283,6 @@
      */
 
     /**
-     * Whether this notification had an error when attempting to inflate. This is only used in
-     * the NewNotifPipeline
-     */
-    public boolean hasInflationError() {
-        return mHasInflationError;
-    }
-
-    /**
-     * Set whether the notification has an error while inflating.
-     *
-     * TODO: Move this into an inflation error manager class.
-     */
-    public void setHasInflationError(boolean hasError) {
-        mHasInflationError = hasError;
-    }
-
-    /**
      * Set if the user has dismissed this notif but we haven't yet heard back from system server to
      * confirm the dismissal.
      */
@@ -432,6 +418,14 @@
         this.row = row;
     }
 
+    public ExpandableNotificationRowController getRowController() {
+        return mRowController;
+    }
+
+    public void setRowController(ExpandableNotificationRowController controller) {
+        mRowController = controller;
+    }
+
     @Nullable
     public List<NotificationEntry> getChildren() {
         if (row == null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManager.kt
index 1eeeab3..e612c07 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManager.kt
@@ -22,11 +22,10 @@
 import android.service.notification.NotificationListenerService.RankingMap
 import android.service.notification.StatusBarNotification
 import com.android.systemui.statusbar.NotificationMediaManager
+import com.android.systemui.statusbar.notification.NotificationEntryManagerLogger
 import com.android.systemui.statusbar.notification.NotificationFilter
 import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
 import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider
-import com.android.systemui.statusbar.notification.logging.NotifEvent
-import com.android.systemui.statusbar.notification.logging.NotifLog
 import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier
 import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager.BUCKET_ALERTING
 import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager.BUCKET_PEOPLE
@@ -34,6 +33,7 @@
 import com.android.systemui.statusbar.phone.NotificationGroupManager
 import com.android.systemui.statusbar.policy.HeadsUpManager
 import dagger.Lazy
+import java.util.Comparator
 import java.util.Objects
 import javax.inject.Inject
 
@@ -53,7 +53,7 @@
     private val groupManager: NotificationGroupManager,
     private val headsUpManager: HeadsUpManager,
     private val notifFilter: NotificationFilter,
-    private val notifLog: NotifLog,
+    private val logger: NotificationEntryManagerLogger,
     sectionsFeatureManager: NotificationSectionsFeatureManager,
     private val peopleNotificationIdentifier: PeopleNotificationIdentifier,
     private val highPriorityProvider: HighPriorityProvider
@@ -74,6 +74,9 @@
         val aIsPeople = a.isPeopleNotification()
         val bIsPeople = b.isPeopleNotification()
 
+        val aIsImportantPeople = a.isImportantPeopleNotification()
+        val bIsImportantPeople = b.isImportantPeopleNotification()
+
         val aMedia = isImportantMedia(a)
         val bMedia = isImportantMedia(b)
 
@@ -88,6 +91,8 @@
 
         when {
             usePeopleFiltering && aIsPeople != bIsPeople -> if (aIsPeople) -1 else 1
+            usePeopleFiltering && aIsImportantPeople != bIsImportantPeople ->
+                if (aIsImportantPeople) -1 else 1
             aHeadsUp != bHeadsUp -> if (aHeadsUp) -1 else 1
             // Provide consistent ranking with headsUpManager
             aHeadsUp -> headsUpManager.compare(a, b)
@@ -134,7 +139,7 @@
         entries: Sequence<NotificationEntry>,
         reason: String
     ): Sequence<NotificationEntry> {
-        notifLog.log(NotifEvent.FILTER_AND_SORT, reason)
+        logger.logFilterAndSort(reason)
 
         return entries.filter { !notifFilter.shouldFilterOut(it) }
                 .sortedWith(rankingComparator)
@@ -193,6 +198,9 @@
     private fun NotificationEntry.isPeopleNotification() =
             peopleNotificationIdentifier.isPeopleNotification(sbn, ranking)
 
+    private fun NotificationEntry.isImportantPeopleNotification() =
+            peopleNotificationIdentifier.isImportantPeopleNotification(sbn, ranking)
+
     private fun NotificationEntry.isHighPriority() =
             highPriorityProvider.isHighPriority(this)
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BubbleCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BubbleCoordinator.java
new file mode 100644
index 0000000..8b2a07d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BubbleCoordinator.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.collection.coordinator;
+
+import static android.service.notification.NotificationStats.DISMISSAL_OTHER;
+import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_NEUTRAL;
+
+import com.android.internal.statusbar.NotificationVisibility;
+import com.android.systemui.bubbles.BubbleController;
+import com.android.systemui.statusbar.notification.collection.NotifCollection;
+import com.android.systemui.statusbar.notification.collection.NotifPipeline;
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
+import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifDismissInterceptor;
+import com.android.systemui.statusbar.notification.logging.NotificationLogger;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+/**
+ * Coordinates hiding, intercepting (the dismissal), and deletion of bubbled notifications.
+ *
+ * The typical "start state" for a bubbled notification is when a bubble-able notification is
+ * posted. It is visible as a bubble AND as a notification in the shade. From here, we can get
+ * into a few hidden-from-shade states described below:
+ *
+ * Start State -> Hidden from shade
+ * User expands the bubble so we hide its notification from the shade.
+ * OR
+ * User dismisses a group summary with a bubbled child. All bubbled children are now hidden from
+ * the shade. And the group summary's dismissal is intercepted + hidden from the shade (see below).
+ *
+ * Start State -> Dismissal intercepted + hidden from shade
+ * User dismisses the notification from the shade. We now hide the notification from the shade
+ * and intercept its dismissal (the removal signal is never sent to system server). We
+ * keep the notification alive in system server so that {@link BubbleController} can still
+ * respond to app-cancellations (ie: remove the bubble if the app cancels the notification).
+ *
+ */
+@Singleton
+public class BubbleCoordinator implements Coordinator {
+    private static final String TAG = "BubbleCoordinator";
+
+    private final BubbleController mBubbleController;
+    private final NotifCollection mNotifCollection;
+    private final Set<String> mInterceptedDismissalEntries = new HashSet<>();
+    private NotifPipeline mNotifPipeline;
+    private NotifDismissInterceptor.OnEndDismissInterception mOnEndDismissInterception;
+
+    @Inject
+    public BubbleCoordinator(
+            BubbleController bubbleController,
+            NotifCollection notifCollection) {
+        mBubbleController = bubbleController;
+        mNotifCollection = notifCollection;
+    }
+
+    @Override
+    public void attach(NotifPipeline pipeline) {
+        mNotifPipeline = pipeline;
+        mNotifPipeline.addNotificationDismissInterceptor(mDismissInterceptor);
+        mNotifPipeline.addPreRenderFilter(mNotifFilter);
+        mBubbleController.addNotifCallback(mNotifCallback);
+    }
+
+    private final NotifFilter mNotifFilter = new NotifFilter(TAG) {
+        @Override
+        public boolean shouldFilterOut(NotificationEntry entry, long now) {
+            return mBubbleController.isBubbleNotificationSuppressedFromShade(entry);
+        }
+    };
+
+    private final NotifDismissInterceptor mDismissInterceptor = new NotifDismissInterceptor() {
+        @Override
+        public String getName() {
+            return TAG;
+        }
+
+        @Override
+        public void setCallback(OnEndDismissInterception callback) {
+            mOnEndDismissInterception = callback;
+        }
+
+        @Override
+        public boolean shouldInterceptDismissal(NotificationEntry entry) {
+            // TODO: b/149041810 add support for intercepting app-cancelled bubble notifications
+            // for experimental bubbles
+            if (mBubbleController.handleDismissalInterception(entry)) {
+                mInterceptedDismissalEntries.add(entry.getKey());
+                return true;
+            } else {
+                mInterceptedDismissalEntries.remove(entry.getKey());
+                return false;
+            }
+        }
+
+        @Override
+        public void cancelDismissInterception(NotificationEntry entry) {
+            mInterceptedDismissalEntries.remove(entry.getKey());
+        }
+    };
+
+    private final BubbleController.NotifCallback mNotifCallback =
+            new BubbleController.NotifCallback() {
+        @Override
+        public void removeNotification(NotificationEntry entry, int reason) {
+            if (isInterceptingDismissal(entry)) {
+                mInterceptedDismissalEntries.remove(entry.getKey());
+                mOnEndDismissInterception.onEndDismissInterception(mDismissInterceptor, entry,
+                        createDismissedByUserStats(entry));
+            } else if (mNotifPipeline.getActiveNotifs().contains(entry)) {
+                // Bubbles are hiding the notifications from the shade, but the bubble was
+                // deleted; therefore, the notification should be cancelled as if it were a user
+                // dismissal (this won't re-enter handleInterceptDimissal because Bubbles
+                // will have already marked it as no longer a bubble)
+                mNotifCollection.dismissNotification(entry, createDismissedByUserStats(entry));
+            }
+        }
+
+        @Override
+        public void invalidateNotifications(String reason) {
+            mNotifFilter.invalidateList();
+        }
+
+        @Override
+        public void maybeCancelSummary(NotificationEntry entry) {
+            // no-op
+        }
+    };
+
+    private boolean isInterceptingDismissal(NotificationEntry entry) {
+        return mInterceptedDismissalEntries.contains(entry.getKey());
+    }
+
+    private DismissedByUserStats createDismissedByUserStats(NotificationEntry entry) {
+        return new DismissedByUserStats(
+                DISMISSAL_OTHER,
+                DISMISS_SENTIMENT_NEUTRAL,
+                NotificationVisibility.obtain(entry.getKey(),
+                        entry.getRanking().getRank(),
+                        mNotifPipeline.getShadeListCount(),
+                        true, // was visible as a bubble
+                        NotificationLogger.getNotificationLocation(entry))
+        );
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/NotifCoordinators.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/NotifCoordinators.java
index 0a1e09f..7a9547c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/NotifCoordinators.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/NotifCoordinators.java
@@ -53,6 +53,7 @@
             RankingCoordinator rankingCoordinator,
             ForegroundCoordinator foregroundCoordinator,
             DeviceProvisionedCoordinator deviceProvisionedCoordinator,
+            BubbleCoordinator bubbleCoordinator,
             PreparationCoordinator preparationCoordinator) {
         dumpController.registerDumpable(TAG, this);
 
@@ -61,6 +62,7 @@
         mCoordinators.add(rankingCoordinator);
         mCoordinators.add(foregroundCoordinator);
         mCoordinators.add(deviceProvisionedCoordinator);
+        mCoordinators.add(bubbleCoordinator);
         if (featureFlags.isNewNotifPipelineRenderingEnabled()) {
             mCoordinators.add(preparationCoordinator);
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java
index 41314b8..1c8fdac 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java
@@ -16,14 +16,18 @@
 
 package com.android.systemui.statusbar.notification.collection.coordinator;
 
+import android.os.RemoteException;
+import android.service.notification.StatusBarNotification;
+
+import com.android.internal.statusbar.IStatusBarService;
 import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.ShadeListBuilder;
 import com.android.systemui.statusbar.notification.collection.inflation.NotifInflater;
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
-import com.android.systemui.statusbar.notification.logging.NotifEvent;
-import com.android.systemui.statusbar.notification.logging.NotifLog;
+import com.android.systemui.statusbar.notification.row.NotifInflationErrorManager;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -36,21 +40,30 @@
  * Aborts inflation when a notification is removed.
  *
  * If a notification is not done inflating, this coordinator will filter the notification out
- * from the NotifListBuilder.
+ * from the {@link ShadeListBuilder}.
  */
 @Singleton
 public class PreparationCoordinator implements Coordinator {
     private static final String TAG = "PreparationCoordinator";
 
-    private final NotifLog mNotifLog;
+    private final PreparationCoordinatorLogger mLogger;
     private final NotifInflater mNotifInflater;
+    private final NotifInflationErrorManager mNotifErrorManager;
     private final List<NotificationEntry> mPendingNotifications = new ArrayList<>();
+    private final IStatusBarService mStatusBarService;
 
     @Inject
-    public PreparationCoordinator(NotifLog notifLog, NotifInflaterImpl notifInflater) {
-        mNotifLog = notifLog;
+    public PreparationCoordinator(
+            PreparationCoordinatorLogger logger,
+            NotifInflaterImpl notifInflater,
+            NotifInflationErrorManager errorManager,
+            IStatusBarService service) {
+        mLogger = logger;
         mNotifInflater = notifInflater;
         mNotifInflater.setInflationCallback(mInflationCallback);
+        mNotifErrorManager = errorManager;
+        mNotifErrorManager.addInflationErrorListener(mInflationErrorListener);
+        mStatusBarService = service;
     }
 
     @Override
@@ -84,8 +97,7 @@
          */
         @Override
         public boolean shouldFilterOut(NotificationEntry entry, long now) {
-            if (entry.hasInflationError()) {
-                mPendingNotifications.remove(entry);
+            if (mNotifErrorManager.hasInflationError(entry)) {
                 return true;
             }
             return false;
@@ -106,12 +118,40 @@
             new NotifInflater.InflationCallback() {
         @Override
         public void onInflationFinished(NotificationEntry entry) {
-            mNotifLog.log(NotifEvent.INFLATED, entry);
+            mLogger.logNotifInflated(entry.getKey());
             mPendingNotifications.remove(entry);
             mNotifInflatingFilter.invalidateList();
         }
     };
 
+    private final NotifInflationErrorManager.NotifInflationErrorListener mInflationErrorListener =
+            new NotifInflationErrorManager.NotifInflationErrorListener() {
+        @Override
+        public void onNotifInflationError(NotificationEntry entry, Exception e) {
+            mPendingNotifications.remove(entry);
+            try {
+                final StatusBarNotification sbn = entry.getSbn();
+                // report notification inflation errors back up
+                // to notification delegates
+                mStatusBarService.onNotificationError(
+                        sbn.getPackageName(),
+                        sbn.getTag(),
+                        sbn.getId(),
+                        sbn.getUid(),
+                        sbn.getInitialPid(),
+                        e.getMessage(),
+                        sbn.getUserId());
+            } catch (RemoteException ex) {
+            }
+            mNotifInflationErrorFilter.invalidateList();
+        }
+
+        @Override
+        public void onNotifInflationErrorCleared(NotificationEntry entry) {
+            mNotifInflationErrorFilter.invalidateList();
+        }
+    };
+
     private void inflateEntry(NotificationEntry entry, String reason) {
         abortInflation(entry, reason);
         mPendingNotifications.add(entry);
@@ -123,7 +163,7 @@
     }
 
     private void abortInflation(NotificationEntry entry, String reason) {
-        mNotifLog.log(NotifEvent.INFLATION_ABORTED, reason);
+        mLogger.logInflationAborted(entry.getKey(), reason);
         entry.abortTask();
         mPendingNotifications.remove(entry);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorLogger.kt
new file mode 100644
index 0000000..75e7bc9
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorLogger.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.collection.coordinator
+
+import com.android.systemui.log.LogBuffer
+import com.android.systemui.log.LogLevel
+import com.android.systemui.log.dagger.NotificationLog
+import javax.inject.Inject
+
+class PreparationCoordinatorLogger @Inject constructor(
+    @NotificationLog private val buffer: LogBuffer
+) {
+    fun logNotifInflated(key: String) {
+        buffer.log(TAG, LogLevel.DEBUG, {
+            str1 = key
+        }, {
+            "NOTIF INFLATED $str1"
+        })
+    }
+
+    fun logInflationAborted(key: String, reason: String) {
+        buffer.log(TAG, LogLevel.DEBUG, {
+            str1 = key
+            str2 = reason
+        }, {
+            "NOTIF INFLATION ABORTED $str1 reason=$str2"
+        })
+    }
+}
+
+private const val TAG = "PreparationCoordinator"
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java
index 59d82a1..e8a62e4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java
@@ -17,7 +17,6 @@
 package com.android.systemui.statusbar.notification.collection.inflation;
 
 import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
-import static com.android.systemui.statusbar.NotificationRemoteInputManager.ENABLE_REMOTE_INPUT;
 import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.FLAG_CONTENT_VIEW_HEADS_UP;
 
 import android.annotation.Nullable;
@@ -40,19 +39,19 @@
 import com.android.systemui.statusbar.notification.NotificationClicker;
 import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.logging.NotificationLogger;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
+import com.android.systemui.statusbar.notification.row.ExpandableNotificationRowController;
 import com.android.systemui.statusbar.notification.row.NotifBindPipeline;
 import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
 import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder;
 import com.android.systemui.statusbar.notification.row.RowContentBindParams;
 import com.android.systemui.statusbar.notification.row.RowContentBindStage;
 import com.android.systemui.statusbar.notification.row.RowInflaterTask;
+import com.android.systemui.statusbar.notification.row.dagger.ExpandableNotificationRowComponent;
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
 import com.android.systemui.statusbar.phone.NotificationGroupManager;
 import com.android.systemui.statusbar.phone.StatusBar;
-import com.android.systemui.statusbar.policy.HeadsUpManager;
 
 import java.util.Objects;
 
@@ -67,35 +66,28 @@
 
     private static final String TAG = "NotificationViewManager";
 
-    private final NotificationGroupManager mGroupManager;
-    private final NotificationGutsManager mGutsManager;
     private final NotificationInterruptionStateProvider mNotificationInterruptionStateProvider;
 
     private final Context mContext;
     private final NotifBindPipeline mNotifBindPipeline;
     private final RowContentBindStage mRowContentBindStage;
     private final NotificationMessagingUtil mMessagingUtil;
-    private final ExpandableNotificationRow.ExpansionLogger mExpansionLogger =
-            this::logNotificationExpansion;
     private final NotificationRemoteInputManager mNotificationRemoteInputManager;
     private final NotificationLockscreenUserManager mNotificationLockscreenUserManager;
-    private final boolean mAllowLongPress;
-    private final KeyguardBypassController mKeyguardBypassController;
-    private final StatusBarStateController mStatusBarStateController;
 
     private NotificationPresenter mPresenter;
     private NotificationListContainer mListContainer;
-    private HeadsUpManager mHeadsUpManager;
     private NotificationRowContentBinder.InflationCallback mInflationCallback;
-    private ExpandableNotificationRow.OnAppOpsClickListener mOnAppOpsClickListener;
     private BindRowCallback mBindRowCallback;
     private NotificationClicker mNotificationClicker;
     private final Provider<RowInflaterTask> mRowInflaterTaskProvider;
-    private final NotificationLogger mNotificationLogger;
+    private final ExpandableNotificationRowComponent.Builder
+            mExpandableNotificationRowComponentBuilder;
 
     @Inject
     public NotificationRowBinderImpl(
             Context context,
+            NotificationMessagingUtil notificationMessagingUtil,
             NotificationRemoteInputManager notificationRemoteInputManager,
             NotificationLockscreenUserManager notificationLockscreenUserManager,
             NotifBindPipeline notifBindPipeline,
@@ -107,21 +99,16 @@
             NotificationGutsManager notificationGutsManager,
             NotificationInterruptionStateProvider notificationInterruptionStateProvider,
             Provider<RowInflaterTask> rowInflaterTaskProvider,
-            NotificationLogger logger) {
+            ExpandableNotificationRowComponent.Builder expandableNotificationRowComponentBuilder) {
         mContext = context;
         mNotifBindPipeline = notifBindPipeline;
         mRowContentBindStage = rowContentBindStage;
-        mMessagingUtil = new NotificationMessagingUtil(context);
+        mMessagingUtil = notificationMessagingUtil;
         mNotificationRemoteInputManager = notificationRemoteInputManager;
         mNotificationLockscreenUserManager = notificationLockscreenUserManager;
-        mAllowLongPress = allowLongPress;
-        mKeyguardBypassController = keyguardBypassController;
-        mStatusBarStateController = statusBarStateController;
-        mGroupManager = notificationGroupManager;
-        mGutsManager = notificationGutsManager;
         mNotificationInterruptionStateProvider = notificationInterruptionStateProvider;
         mRowInflaterTaskProvider = rowInflaterTaskProvider;
-        mNotificationLogger = logger;
+        mExpandableNotificationRowComponentBuilder = expandableNotificationRowComponentBuilder;
     }
 
     /**
@@ -129,13 +116,10 @@
      */
     public void setUpWithPresenter(NotificationPresenter presenter,
             NotificationListContainer listContainer,
-            HeadsUpManager headsUpManager,
             BindRowCallback bindRowCallback) {
         mPresenter = presenter;
         mListContainer = listContainer;
-        mHeadsUpManager = headsUpManager;
         mBindRowCallback = bindRowCallback;
-        mOnAppOpsClickListener = mGutsManager::openGuts;
     }
 
     public void setInflationCallback(NotificationRowContentBinder.InflationCallback callback) {
@@ -150,9 +134,7 @@
      * Inflates the views for the given entry (possibly asynchronously).
      */
     @Override
-    public void inflateViews(
-            NotificationEntry entry,
-            Runnable onDismissRunnable)
+    public void inflateViews(NotificationEntry entry, Runnable onDismissRunnable)
             throws InflationException {
         ViewGroup parent = mListContainer.getViewParentForNotification(entry);
         PackageManager pmUser = StatusBar.getPackageManagerForUser(mContext,
@@ -163,12 +145,26 @@
             entry.updateIcons(mContext, sbn);
             entry.reset();
             updateNotification(entry, pmUser, sbn, entry.getRow());
-            entry.getRow().setOnDismissRunnable(onDismissRunnable);
+            entry.getRowController().setOnDismissRunnable(onDismissRunnable);
         } else {
             entry.createIcons(mContext, sbn);
             mRowInflaterTaskProvider.get().inflate(mContext, parent, entry,
                     row -> {
-                        bindRow(entry, pmUser, sbn, row, onDismissRunnable);
+                        // Setup the controller for the view.
+                        ExpandableNotificationRowComponent component =
+                                mExpandableNotificationRowComponentBuilder
+                                        .expandableNotificationRow(row)
+                                        .notificationEntry(entry)
+                                        .onDismissRunnable(onDismissRunnable)
+                                        .inflationCallback(mInflationCallback)
+                                        .rowContentBindStage(mRowContentBindStage)
+                                        .onExpandClickListener(mPresenter)
+                                        .build();
+                        ExpandableNotificationRowController rowController =
+                                component.getExpandableNotificationRowController();
+                        rowController.init();
+                        entry.setRowController(rowController);
+                        bindRow(entry, pmUser, sbn, row);
                         updateNotification(entry, pmUser, sbn, row);
                     });
         }
@@ -176,55 +172,12 @@
 
     //TODO: This method associates a row with an entry, but eventually needs to not do that
     private void bindRow(NotificationEntry entry, PackageManager pmUser,
-            StatusBarNotification sbn, ExpandableNotificationRow row,
-            Runnable onDismissRunnable) {
-        // Get the app name.
-        // Note that Notification.Builder#bindHeaderAppName has similar logic
-        // but since this field is used in the guts, it must be accurate.
-        // Therefore we will only show the application label, or, failing that, the
-        // package name. No substitutions.
-        final String pkg = sbn.getPackageName();
-        String appname = pkg;
-        try {
-            final ApplicationInfo info = pmUser.getApplicationInfo(pkg,
-                    PackageManager.MATCH_UNINSTALLED_PACKAGES
-                            | PackageManager.MATCH_DISABLED_COMPONENTS);
-            if (info != null) {
-                appname = String.valueOf(pmUser.getApplicationLabel(info));
-            }
-        } catch (PackageManager.NameNotFoundException e) {
-            // Do nothing
-        }
-
-        row.initialize(
-                appname,
-                sbn.getKey(),
-                mExpansionLogger,
-                mKeyguardBypassController,
-                mGroupManager,
-                mHeadsUpManager,
-                mRowContentBindStage,
-                mPresenter);
-
-        // TODO: Either move these into ExpandableNotificationRow#initialize or out of row entirely
-        row.setStatusBarStateController(mStatusBarStateController);
-        row.setAppOpsOnClickListener(mOnAppOpsClickListener);
-        if (mAllowLongPress) {
-            row.setLongPressListener(mGutsManager::openGuts);
-        }
+            StatusBarNotification sbn, ExpandableNotificationRow row) {
         mListContainer.bindRow(row);
         mNotificationRemoteInputManager.bindRow(row);
-
-        row.setOnDismissRunnable(onDismissRunnable);
-        row.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
-        if (ENABLE_REMOTE_INPUT) {
-            row.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
-        }
-
         entry.setRow(row);
         row.setEntry(entry);
         mNotifBindPipeline.manageRow(entry, row);
-
         mBindRowCallback.onBindRow(entry, pmUser, sbn, row);
     }
 
@@ -295,6 +248,7 @@
         }
         //TODO: Replace this API with RowContentBindParams directly
         row.setNeedsRedaction(mNotificationLockscreenUserManager.needsRedaction(entry));
+        params.rebindAllContentViews();
         mRowContentBindStage.requestRebind(entry, en -> {
             row.setUsesIncreasedCollapsedHeight(useIncreasedCollapsedHeight);
             row.setUsesIncreasedHeadsUpHeight(useIncreasedHeadsUp);
@@ -306,10 +260,6 @@
         Objects.requireNonNull(mNotificationClicker).register(row, sbn);
     }
 
-    private void logNotificationExpansion(String key, boolean userAction, boolean expanded) {
-        mNotificationLogger.onExpansionChanged(key, userAction, expanded);
-    }
-
     /** Callback for when a row is bound to an entry. */
     public interface BindRowCallback {
         /**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt
index 14e1503..8675cca 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt
@@ -69,6 +69,22 @@
         })
     }
 
+    fun logNotifDismissedIntercepted(key: String) {
+        buffer.log(TAG, INFO, {
+            str1 = key
+        }, {
+            "DISMISS INTERCEPTED $str1"
+        })
+    }
+
+    fun logNotifClearAllDismissalIntercepted(key: String) {
+        buffer.log(TAG, INFO, {
+            str1 = key
+        }, {
+            "CLEAR ALL DISMISSAL INTERCEPTED $str1"
+        })
+    }
+
     fun logRankingMissing(key: String, rankingMap: RankingMap) {
         buffer.log(TAG, WARNING, { str1 = key }, { "Ranking update is missing ranking for $str1" })
         buffer.log(TAG, DEBUG, {}, { "Ranking map contents:" })
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifDismissInterceptor.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifDismissInterceptor.java
new file mode 100644
index 0000000..3354ad1
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifDismissInterceptor.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.collection.notifcollection;
+
+import com.android.systemui.statusbar.notification.collection.NotifCollection;
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+
+/**
+ * A way for coordinators to temporarily intercept a user-dismissed notification before a message
+ * is sent to system server to officially remove this notification.
+ * See {@link NotifCollection#addNotificationDismissInterceptor(NotifDismissInterceptor)}.
+ */
+public interface NotifDismissInterceptor {
+    /** Name to associate with this interceptor (for the purposes of debugging) */
+    String getName();
+
+    /**
+     * Called on the interceptor immediately after it has been registered. The interceptor should
+     * hang on to this callback and execute it whenever it no longer needs to intercept the
+     * dismissal of the notification.
+     */
+    void setCallback(OnEndDismissInterception callback);
+
+    /**
+     * Called by the NotifCollection whenever a notification has been dismissed (by the user).
+     * If the interceptor returns true, it is considered to be intercepting the notification.
+     * Intercepted notifications will not be sent to system server for removal until it is no
+     * longer being intercepted. However, the notification can still be cancelled by the app.
+     * This method is called on all interceptors even if earlier ones return true.
+     */
+    boolean shouldInterceptDismissal(NotificationEntry entry);
+
+
+    /**
+     * Called by the NotifCollection to inform a DismissInterceptor that its interception of a notif
+     * is no longer valid (usually because the notif has been removed by means other than the
+     * user dismissing the notification from the shade, or the notification has been updated). The
+     * interceptor should clean up any references it has to the notif in question.
+     */
+    void cancelDismissInterception(NotificationEntry entry);
+
+    /**
+     * Callback for notifying the NotifCollection that it no longer is intercepting the dismissal.
+     * If the end of this dismiss interception triggers a dismiss (ie: no other
+     * NotifDismissInterceptors are intercepting the entry), NotifCollection will use stats
+     * in the message sent to system server for the notification's dismissal.
+     */
+    interface OnEndDismissInterception {
+        void onEndDismissInterception(
+                NotifDismissInterceptor interceptor,
+                NotificationEntry entry,
+                DismissedByUserStats stats);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java
index 39f4dfa..d0b553d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java
@@ -17,15 +17,40 @@
 package com.android.systemui.statusbar.notification.dagger;
 
 import android.content.Context;
+import android.os.Handler;
+import android.view.accessibility.AccessibilityManager;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
+import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.dagger.qualifiers.UiBackground;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.FeatureFlags;
+import com.android.systemui.statusbar.NotificationListener;
+import com.android.systemui.statusbar.NotificationRemoteInputManager;
+import com.android.systemui.statusbar.notification.ForegroundServiceDismissalFeatureController;
+import com.android.systemui.statusbar.notification.NotificationAlertingManager;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.NotificationEntryManagerLogger;
+import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
+import com.android.systemui.statusbar.notification.VisualStabilityManager;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
+import com.android.systemui.statusbar.notification.collection.NotificationRankingManager;
+import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
+import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
 import com.android.systemui.statusbar.notification.init.NotificationsController;
 import com.android.systemui.statusbar.notification.init.NotificationsControllerImpl;
 import com.android.systemui.statusbar.notification.init.NotificationsControllerStub;
+import com.android.systemui.statusbar.notification.logging.NotificationLogger;
+import com.android.systemui.statusbar.notification.row.NotificationBlockingHelperManager;
+import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
+import com.android.systemui.statusbar.phone.NotificationGroupManager;
+import com.android.systemui.statusbar.phone.StatusBar;
+import com.android.systemui.statusbar.policy.HeadsUpManager;
+import com.android.systemui.util.leak.LeakDetector;
+
+import java.util.concurrent.Executor;
 
 import javax.inject.Singleton;
 
@@ -33,9 +58,113 @@
 import dagger.Module;
 import dagger.Provides;
 
-/** Module for classes related to the notifications data pipeline */
+/**
+ * Dagger Module for classes found within the com.android.systemui.statusbar.notification package.
+ */
 @Module
-public class NotificationsModule {
+public interface NotificationsModule {
+    /** Provides an instance of {@link NotificationEntryManager} */
+    @Singleton
+    @Provides
+    static NotificationEntryManager provideNotificationEntryManager(
+            NotificationEntryManagerLogger logger,
+            NotificationGroupManager groupManager,
+            NotificationRankingManager rankingManager,
+            NotificationEntryManager.KeyguardEnvironment keyguardEnvironment,
+            FeatureFlags featureFlags,
+            Lazy<NotificationRowBinder> notificationRowBinderLazy,
+            Lazy<NotificationRemoteInputManager> notificationRemoteInputManagerLazy,
+            LeakDetector leakDetector,
+            ForegroundServiceDismissalFeatureController fgsFeatureController) {
+        return new NotificationEntryManager(
+                logger,
+                groupManager,
+                rankingManager,
+                keyguardEnvironment,
+                featureFlags,
+                notificationRowBinderLazy,
+                notificationRemoteInputManagerLazy,
+                leakDetector,
+                fgsFeatureController);
+    }
+
+    /** Provides an instance of {@link NotificationGutsManager} */
+    @Singleton
+    @Provides
+    static NotificationGutsManager provideNotificationGutsManager(
+            Context context,
+            VisualStabilityManager visualStabilityManager,
+            Lazy<StatusBar> statusBarLazy,
+            @Main Handler mainHandler,
+            AccessibilityManager accessibilityManager,
+            HighPriorityProvider highPriorityProvider) {
+        return new NotificationGutsManager(
+                context,
+                visualStabilityManager,
+                statusBarLazy,
+                mainHandler,
+                accessibilityManager,
+                highPriorityProvider);
+    }
+
+    /** Provides an instance of {@link VisualStabilityManager} */
+    @Singleton
+    @Provides
+    static VisualStabilityManager provideVisualStabilityManager(
+            NotificationEntryManager notificationEntryManager, Handler handler) {
+        return new VisualStabilityManager(notificationEntryManager, handler);
+    }
+
+    /** Provides an instance of {@link NotificationAlertingManager} */
+    @Singleton
+    @Provides
+    static NotificationAlertingManager provideNotificationAlertingManager(
+            NotificationEntryManager notificationEntryManager,
+            NotificationRemoteInputManager remoteInputManager,
+            VisualStabilityManager visualStabilityManager,
+            StatusBarStateController statusBarStateController,
+            NotificationInterruptionStateProvider notificationInterruptionStateProvider,
+            NotificationListener notificationListener,
+            HeadsUpManager headsUpManager) {
+        return new NotificationAlertingManager(
+                notificationEntryManager,
+                remoteInputManager,
+                visualStabilityManager,
+                statusBarStateController,
+                notificationInterruptionStateProvider,
+                notificationListener,
+                headsUpManager);
+    }
+
+    /** Provides an instance of {@link NotificationLogger} */
+    @Singleton
+    @Provides
+    static NotificationLogger provideNotificationLogger(
+            NotificationListener notificationListener,
+            @UiBackground Executor uiBgExecutor,
+            NotificationEntryManager entryManager,
+            StatusBarStateController statusBarStateController,
+            NotificationLogger.ExpansionStateLogger expansionStateLogger) {
+        return new NotificationLogger(
+                notificationListener,
+                uiBgExecutor,
+                entryManager,
+                statusBarStateController,
+                expansionStateLogger);
+    }
+
+    /** Provides an instance of {@link NotificationBlockingHelperManager} */
+    @Singleton
+    @Provides
+    static NotificationBlockingHelperManager provideNotificationBlockingHelperManager(
+            Context context,
+            NotificationGutsManager notificationGutsManager,
+            NotificationEntryManager notificationEntryManager,
+            MetricsLogger metricsLogger) {
+        return new NotificationBlockingHelperManager(
+                context, notificationGutsManager, notificationEntryManager, metricsLogger);
+    }
+
     /** Initializes the notification data pipeline (can be disabled via config). */
     @Singleton
     @Provides
@@ -55,7 +184,7 @@
      */
     @Provides
     @Singleton
-    public CommonNotifCollection provideCommonNotifCollection(
+    static CommonNotifCollection provideCommonNotifCollection(
             FeatureFlags featureFlags,
             Lazy<NotifPipeline> pipeline,
             NotificationEntryManager entryManager) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt
index 254b64f..8a6d5c7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt
@@ -90,8 +90,8 @@
         notificationRowBinder.setUpWithPresenter(
                 presenter,
                 listContainer,
-                headsUpManager,
                 bindRowCallback)
+        notifBindPipelineInitializer.initialize()
 
         if (featureFlags.isNewNotifPipelineEnabled) {
             newNotifPipeline.get().initialize(notificationListener, notificationRowBinder)
@@ -100,7 +100,6 @@
         if (featureFlags.isNewNotifPipelineRenderingEnabled) {
             // TODO
         } else {
-            notifBindPipelineInitializer.initialize()
             notificationRowBinder.setInflationCallback(entryManager)
 
             remoteInputUriController.attach(entryManager)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotifEvent.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotifEvent.java
deleted file mode 100644
index 9adceb7..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotifEvent.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.notification.logging;
-
-import android.annotation.IntDef;
-import android.service.notification.NotificationListenerService;
-import android.service.notification.StatusBarNotification;
-
-import com.android.systemui.log.RichEvent;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.collection.ShadeListBuilder;
-import com.android.systemui.statusbar.notification.collection.coalescer.GroupCoalescer;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * An event related to notifications. {@link NotifLog} stores and prints these events for debugging
- * and triaging purposes. We do not store a copy of the status bar notification nor ranking
- * here to mitigate memory usage.
- */
-public class NotifEvent extends RichEvent {
-    /**
-     * Initializes a rich event that includes an event type that matches with an index in the array
-     * getEventLabels().
-     */
-    public NotifEvent init(@EventType int type, StatusBarNotification sbn,
-            NotificationListenerService.Ranking ranking, String reason) {
-        StringBuilder extraInfo = new StringBuilder(reason);
-        if (sbn != null) {
-            extraInfo.append(" " + sbn.getKey());
-        }
-
-        if (ranking != null) {
-            extraInfo.append(" Ranking=");
-            extraInfo.append(ranking.getRank());
-        }
-        super.init(INFO, type, extraInfo.toString());
-        return this;
-    }
-
-    /**
-     * Event labels for ListBuilderEvents
-     * Index corresponds to an # in {@link EventType}
-     */
-    @Override
-    public String[] getEventLabels() {
-        assert (TOTAL_EVENT_LABELS
-                == (TOTAL_NEM_EVENT_TYPES
-                        + TOTAL_LIST_BUILDER_EVENT_TYPES
-                        + TOTAL_COALESCER_EVENT_TYPES));
-        return EVENT_LABELS;
-    }
-
-    /**
-     * @return if this event occurred in {@link ShadeListBuilder}
-     */
-    static boolean isListBuilderEvent(@EventType int type) {
-        return isBetweenInclusive(type, 0, TOTAL_LIST_BUILDER_EVENT_TYPES);
-    }
-
-    /**
-     * @return if this event occurred in {@link NotificationEntryManager}
-     */
-    static boolean isNemEvent(@EventType int type) {
-        return isBetweenInclusive(type, TOTAL_LIST_BUILDER_EVENT_TYPES,
-                TOTAL_LIST_BUILDER_EVENT_TYPES + TOTAL_NEM_EVENT_TYPES);
-    }
-
-    private static boolean isBetweenInclusive(int x, int a, int b) {
-        return x >= a && x <= b;
-    }
-
-    @IntDef({
-            // NotifListBuilder events:
-            WARN,
-            ON_BUILD_LIST,
-            START_BUILD_LIST,
-            DISPATCH_FINAL_LIST,
-            LIST_BUILD_COMPLETE,
-            PRE_GROUP_FILTER_INVALIDATED,
-            PROMOTER_INVALIDATED,
-            SECTION_INVALIDATED,
-            COMPARATOR_INVALIDATED,
-            PARENT_CHANGED,
-            FILTER_CHANGED,
-            PROMOTER_CHANGED,
-            PRE_RENDER_FILTER_INVALIDATED,
-
-            // NotificationEntryManager events:
-            NOTIF_ADDED,
-            NOTIF_REMOVED,
-            NOTIF_UPDATED,
-            FILTER,
-            SORT,
-            FILTER_AND_SORT,
-            NOTIF_VISIBILITY_CHANGED,
-            LIFETIME_EXTENDED,
-            REMOVE_INTERCEPTED,
-            INFLATION_ABORTED,
-            INFLATED,
-
-            // GroupCoalescer
-            COALESCED_EVENT,
-            EARLY_BATCH_EMIT,
-            EMIT_EVENT_BATCH
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface EventType {}
-
-    private static final String[] EVENT_LABELS =
-            new String[]{
-                    // NotifListBuilder labels:
-                    "Warning",
-                    "OnBuildList",
-                    "StartBuildList",
-                    "DispatchFinalList",
-                    "ListBuildComplete",
-                    "FilterInvalidated",
-                    "PromoterInvalidated",
-                    "SectionInvalidated",
-                    "ComparatorInvalidated",
-                    "ParentChanged",
-                    "FilterChanged",
-                    "PromoterChanged",
-                    "FinalFilterInvalidated",
-                    "SectionerChanged",
-
-                    // NEM event labels:
-                    "NotifAdded",
-                    "NotifRemoved",
-                    "NotifUpdated",
-                    "Filter",
-                    "Sort",
-                    "FilterAndSort",
-                    "NotifVisibilityChanged",
-                    "LifetimeExtended",
-                    "RemoveIntercepted",
-                    "InflationAborted",
-                    "Inflated",
-
-                    // GroupCoalescer labels:
-                    "CoalescedEvent",
-                    "EarlyBatchEmit",
-                    "EmitEventBatch",
-                    "BatchMaxTimeout"
-            };
-
-    private static final int TOTAL_EVENT_LABELS = EVENT_LABELS.length;
-
-    /**
-     * Events related to {@link ShadeListBuilder}
-     */
-    public static final int WARN = 0;
-    public static final int ON_BUILD_LIST = 1;
-    public static final int START_BUILD_LIST = 2;
-    public static final int DISPATCH_FINAL_LIST = 3;
-    public static final int LIST_BUILD_COMPLETE = 4;
-    public static final int PRE_GROUP_FILTER_INVALIDATED = 5;
-    public static final int PROMOTER_INVALIDATED = 6;
-    public static final int SECTION_INVALIDATED = 7;
-    public static final int COMPARATOR_INVALIDATED = 8;
-    public static final int PARENT_CHANGED = 9;
-    public static final int FILTER_CHANGED = 10;
-    public static final int PROMOTER_CHANGED = 11;
-    public static final int PRE_RENDER_FILTER_INVALIDATED = 12;
-    public static final int SECTION_CHANGED = 13;
-    private static final int TOTAL_LIST_BUILDER_EVENT_TYPES = 14;
-
-    /**
-     * Events related to {@link NotificationEntryManager}
-     */
-    private static final int NEM_EVENT_START_INDEX = TOTAL_LIST_BUILDER_EVENT_TYPES;
-    public static final int NOTIF_ADDED = NEM_EVENT_START_INDEX;
-    public static final int NOTIF_REMOVED = NEM_EVENT_START_INDEX + 1;
-    public static final int NOTIF_UPDATED = NEM_EVENT_START_INDEX + 2;
-    public static final int FILTER = NEM_EVENT_START_INDEX + 3;
-    public static final int SORT = NEM_EVENT_START_INDEX + 4;
-    public static final int FILTER_AND_SORT = NEM_EVENT_START_INDEX + 5;
-    public static final int NOTIF_VISIBILITY_CHANGED = NEM_EVENT_START_INDEX + 6;
-    public static final int LIFETIME_EXTENDED = NEM_EVENT_START_INDEX + 7;
-    // unable to remove notif - removal intercepted by {@link NotificationRemoveInterceptor}
-    public static final int REMOVE_INTERCEPTED = NEM_EVENT_START_INDEX + 8;
-    public static final int INFLATION_ABORTED = NEM_EVENT_START_INDEX + 9;
-    public static final int INFLATED = NEM_EVENT_START_INDEX + 10;
-    private static final int TOTAL_NEM_EVENT_TYPES = 11;
-
-    /**
-     * Events related to {@link GroupCoalescer}
-     */
-    private static final int COALESCER_EVENT_START_INDEX = NEM_EVENT_START_INDEX
-            + TOTAL_NEM_EVENT_TYPES;
-    public static final int COALESCED_EVENT = COALESCER_EVENT_START_INDEX;
-    public static final int EARLY_BATCH_EMIT = COALESCER_EVENT_START_INDEX + 1;
-    public static final int EMIT_EVENT_BATCH = COALESCER_EVENT_START_INDEX + 2;
-    public static final int BATCH_MAX_TIMEOUT = COALESCER_EVENT_START_INDEX + 3;
-    private static final int TOTAL_COALESCER_EVENT_TYPES = 3;
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotifLog.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotifLog.java
deleted file mode 100644
index 299d628..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotifLog.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.notification.logging;
-
-import android.os.SystemProperties;
-import android.service.notification.NotificationListenerService.Ranking;
-import android.service.notification.StatusBarNotification;
-
-import com.android.systemui.DumpController;
-import com.android.systemui.log.SysuiLog;
-import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-/**
- * Logs systemui notification events for debugging and triaging purposes. Logs are dumped in
- * bugreports or on demand:
- *      adb shell dumpsys activity service com.android.systemui/.SystemUIService \
- *      dependency DumpController NotifLog
- */
-@Singleton
-public class NotifLog extends SysuiLog<NotifEvent> {
-    private static final String TAG = "NotifLog";
-    private static final boolean SHOW_NEM_LOGS =
-            SystemProperties.getBoolean("persist.sysui.log.notif.nem", true);
-    private static final boolean SHOW_LIST_BUILDER_LOGS =
-            SystemProperties.getBoolean("persist.sysui.log.notif.listbuilder", true);
-
-    private static final int MAX_DOZE_DEBUG_LOGS = 400;
-    private static final int MAX_DOZE_LOGS = 50;
-
-    private NotifEvent mRecycledEvent;
-
-    @Inject
-    public NotifLog(DumpController dumpController) {
-        super(dumpController, TAG, MAX_DOZE_DEBUG_LOGS, MAX_DOZE_LOGS);
-    }
-
-    /**
-     * Logs a {@link NotifEvent} with a notification, ranking and message.
-     * Uses the last recycled event if available.
-     * @return true if successfully logged, else false
-     */
-    public void log(@NotifEvent.EventType int eventType,
-            StatusBarNotification sbn, Ranking ranking, String msg) {
-        if (!mEnabled
-                || (NotifEvent.isListBuilderEvent(eventType) && !SHOW_LIST_BUILDER_LOGS)
-                || (NotifEvent.isNemEvent(eventType) && !SHOW_NEM_LOGS)) {
-            return;
-        }
-
-        if (mRecycledEvent != null) {
-            mRecycledEvent = log(mRecycledEvent.init(eventType, sbn, ranking, msg));
-        } else {
-            mRecycledEvent = log(new NotifEvent().init(eventType, sbn, ranking, msg));
-        }
-    }
-
-    /**
-     * Logs a {@link NotifEvent} with no extra information aside from the event type
-     */
-    public void log(@NotifEvent.EventType int eventType) {
-        log(eventType, null, null, "");
-    }
-
-    /**
-     * Logs a {@link NotifEvent} with a message
-     */
-    public void log(@NotifEvent.EventType int eventType, String msg) {
-        log(eventType, null, null, msg);
-    }
-
-    /**
-     * Logs a {@link NotifEvent} with a entry
-     */
-    public void log(@NotifEvent.EventType int eventType, NotificationEntry entry) {
-        log(eventType, entry.getSbn(), entry.getRanking(), "");
-    }
-
-    /**
-     * Logs a {@link NotifEvent} with a NotificationEntry and message
-     */
-    public void log(@NotifEvent.EventType int eventType, NotificationEntry entry, String msg) {
-        log(eventType, entry.getSbn(), entry.getRanking(), msg);
-    }
-
-    /**
-     * Logs a {@link NotifEvent} with a notification and message
-     */
-    public void log(@NotifEvent.EventType int eventType, StatusBarNotification sbn, String msg) {
-        log(eventType, sbn, null, msg);
-    }
-
-    /**
-     * Logs a {@link NotifEvent} with a ranking and message
-     */
-    public void log(@NotifEvent.EventType int eventType, Ranking ranking, String msg) {
-        log(eventType, null, ranking, msg);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
index 89e5f55..becb758 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
@@ -39,6 +39,7 @@
 import com.android.systemui.statusbar.notification.NotificationEntryListener;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
 import com.android.systemui.statusbar.notification.stack.ExpandableViewState;
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
@@ -50,13 +51,11 @@
 import java.util.concurrent.Executor;
 
 import javax.inject.Inject;
-import javax.inject.Singleton;
 
 /**
  * Handles notification logging, in particular, logging which notifications are visible and which
  * are not.
  */
-@Singleton
 public class NotificationLogger implements StateListener {
     private static final String TAG = "NotificationLogger";
 
@@ -192,7 +191,9 @@
         }
     }
 
-    @Inject
+    /**
+     * Injected constructor. See {@link NotificationsModule}.
+     */
     public NotificationLogger(NotificationListener notificationListener,
             @UiBackground Executor uiBgExecutor,
             NotificationEntryManager entryManager,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt
index 4672de0..e15fa2e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt
@@ -23,6 +23,7 @@
 
 interface PeopleNotificationIdentifier {
     fun isPeopleNotification(sbn: StatusBarNotification, ranking: Ranking): Boolean
+    fun isImportantPeopleNotification(sbn: StatusBarNotification, ranking: Ranking): Boolean
 }
 
 @Singleton
@@ -32,4 +33,7 @@
 
     override fun isPeopleNotification(sbn: StatusBarNotification, ranking: Ranking) =
             ranking.isConversation || personExtractor.isPersonNotification(sbn)
+
+    override fun isImportantPeopleNotification(sbn: StatusBarNotification, ranking: Ranking) =
+            isPeopleNotification(sbn, ranking) && ranking.channel.isImportantConversation
 }
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
index 50a2037..b03ba3c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
@@ -33,16 +33,14 @@
 import android.view.animation.Interpolator;
 import android.view.animation.PathInterpolator;
 
-import com.android.systemui.Dependency;
+import com.android.systemui.Gefingerpoken;
 import com.android.systemui.Interpolators;
 import com.android.systemui.R;
-import com.android.systemui.plugins.FalsingManager;
 import com.android.systemui.statusbar.NotificationShelf;
 import com.android.systemui.statusbar.notification.FakeShadowView;
 import com.android.systemui.statusbar.notification.NotificationUtils;
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
 import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
-import com.android.systemui.statusbar.phone.DoubleTapHelper;
 
 /**
  * Base class for both {@link ExpandableNotificationRow} and {@link NotificationShelf}
@@ -94,14 +92,12 @@
     private static final Interpolator ACTIVATE_INVERSE_ALPHA_INTERPOLATOR
             = new PathInterpolator(0, 0, 0.5f, 1);
     private int mTintedRippleColor;
-    protected int mNormalRippleColor;
-    private final AccessibilityManager mAccessibilityManager;
-    private final DoubleTapHelper mDoubleTapHelper;
+    private int mNormalRippleColor;
+    private Gefingerpoken mTouchHandler;
 
     private boolean mDimmed;
 
-    protected int mBgTint = NO_COLOR;
-    private float mBgAlpha = 1f;
+    int mBgTint = NO_COLOR;
 
     /**
      * Flag to indicate that the notification has been touched once and the second touch will
@@ -116,7 +112,7 @@
     private Interpolator mCurrentAppearInterpolator;
     private Interpolator mCurrentAlphaInterpolator;
 
-    protected NotificationBackgroundView mBackgroundNormal;
+    NotificationBackgroundView mBackgroundNormal;
     private NotificationBackgroundView mBackgroundDimmed;
     private ObjectAnimator mBackgroundAnimator;
     private RectF mAppearAnimationRect = new RectF();
@@ -130,7 +126,6 @@
     private boolean mLastInSection;
     private boolean mFirstInSection;
     private boolean mIsBelowSpeedBump;
-    private final FalsingManager mFalsingManager;
 
     private float mNormalBackgroundVisibilityAmount;
     private float mDimmedBackgroundFadeInAmount = -1;
@@ -154,38 +149,25 @@
      */
     private boolean mNeedsDimming;
     private int mDimmedAlpha;
-    private boolean mBlockNextTouch;
     private boolean mIsHeadsUpAnimation;
     private int mHeadsUpAddStartLocation;
     private float mHeadsUpLocation;
     private boolean mIsAppearing;
     private boolean mDismissed;
     private boolean mRefocusOnDismiss;
+    private OnDimmedListener mOnDimmedListener;
+    private AccessibilityManager mAccessibilityManager;
 
     public ActivatableNotificationView(Context context, AttributeSet attrs) {
         super(context, attrs);
         mSlowOutFastInInterpolator = new PathInterpolator(0.8f, 0.0f, 0.6f, 1.0f);
         mSlowOutLinearInInterpolator = new PathInterpolator(0.8f, 0.0f, 1.0f, 1.0f);
-        mFalsingManager = Dependency.get(FalsingManager.class);  // TODO: inject into a controller.
         setClipChildren(false);
         setClipToPadding(false);
         updateColors();
-        mAccessibilityManager = AccessibilityManager.getInstance(mContext);
-
-        mDoubleTapHelper = new DoubleTapHelper(this, (active) -> {
-            if (active) {
-                makeActive();
-            } else {
-                makeInactive(true /* animate */);
-            }
-        }, super::performClick, this::handleSlideBack, mFalsingManager::onNotificationDoubleTap);
         initDimens();
     }
 
-    public FalsingManager getFalsingManager() {
-        return mFalsingManager;
-    }
-
     private void updateColors() {
         mNormalColor = mContext.getColor(R.color.notification_material_background_color);
         mTintedRippleColor = mContext.getColor(
@@ -236,32 +218,15 @@
         mBackgroundDimmed.setCustomBackground(R.drawable.notification_material_bg_dim);
     }
 
-    private final Runnable mTapTimeoutRunnable = new Runnable() {
-        @Override
-        public void run() {
-            makeInactive(true /* animate */);
-        }
-    };
 
     @Override
     public boolean onInterceptTouchEvent(MotionEvent ev) {
-        if (mNeedsDimming && ev.getActionMasked() == MotionEvent.ACTION_DOWN
-                && disallowSingleClick(ev) && !isTouchExplorationEnabled()) {
-            if (!mActivated) {
-                return true;
-            } else if (!mDoubleTapHelper.isWithinDoubleTapSlop(ev)) {
-                mBlockNextTouch = true;
-                makeInactive(true /* animate */);
-                return true;
-            }
+        if (mTouchHandler != null && mTouchHandler.onInterceptTouchEvent(ev)) {
+            return true;
         }
         return super.onInterceptTouchEvent(ev);
     }
 
-    private boolean isTouchExplorationEnabled() {
-        return mAccessibilityManager.isTouchExplorationEnabled();
-    }
-
     protected boolean disallowSingleClick(MotionEvent ev) {
         return false;
     }
@@ -270,25 +235,6 @@
         return false;
     }
 
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        boolean result;
-        if (mBlockNextTouch) {
-            mBlockNextTouch = false;
-            return false;
-        }
-        if (mNeedsDimming && !isTouchExplorationEnabled() && isInteractive()) {
-            boolean wasActivated = mActivated;
-            result = handleTouchEventDimmed(event);
-            if (wasActivated && result && event.getAction() == MotionEvent.ACTION_UP) {
-                removeCallbacks(mTapTimeoutRunnable);
-            }
-        } else {
-            result = super.onTouchEvent(event);
-        }
-        return result;
-    }
-
     /**
      * @return whether this view is interactive and can be double tapped
      */
@@ -313,28 +259,11 @@
         }
     }
 
-    public void setRippleAllowed(boolean allowed) {
+    void setRippleAllowed(boolean allowed) {
         mBackgroundNormal.setPressedAllowed(allowed);
     }
 
-    private boolean handleTouchEventDimmed(MotionEvent event) {
-        if (mNeedsDimming && !mDimmed) {
-            // We're actually dimmed, but our content isn't dimmable, let's ensure we have a ripple
-            super.onTouchEvent(event);
-        }
-        return mDoubleTapHelper.onTouchEvent(event, getActualHeight());
-    }
-
-    @Override
-    public boolean performClick() {
-        if (!mNeedsDimming || isTouchExplorationEnabled()) {
-            return super.performClick();
-        }
-        return false;
-    }
-
-    private void makeActive() {
-        mFalsingManager.onNotificationActive();
+    void makeActive() {
         startActivateAnimation(false /* reverse */);
         mActivated = true;
         if (mOnActivatedListener != null) {
@@ -388,19 +317,29 @@
         mBackgroundNormal.animate()
                 .alpha(reverse ? 0f : 1f)
                 .setInterpolator(alphaInterpolator)
-                .setUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                    @Override
-                    public void onAnimationUpdate(ValueAnimator animation) {
-                        float animatedFraction = animation.getAnimatedFraction();
-                        if (reverse) {
-                            animatedFraction = 1.0f - animatedFraction;
-                        }
-                        setNormalBackgroundVisibilityAmount(animatedFraction);
+                .setUpdateListener(animation -> {
+                    float animatedFraction = animation.getAnimatedFraction();
+                    if (reverse) {
+                        animatedFraction = 1.0f - animatedFraction;
                     }
+                    setNormalBackgroundVisibilityAmount(animatedFraction);
                 })
                 .setDuration(ACTIVATE_ANIMATION_LENGTH);
     }
 
+    @Override
+    public boolean performClick() {
+        if (!mNeedsDimming || (mAccessibilityManager != null
+                && mAccessibilityManager.isTouchExplorationEnabled())) {
+            return super.performClick();
+        }
+        return false;
+    }
+
+    boolean superPerformClick() {
+        return super.performClick();
+    }
+
     /**
      * Cancels the hotspot and makes the notification inactive.
      */
@@ -418,11 +357,13 @@
         if (mOnActivatedListener != null) {
             mOnActivatedListener.onActivationReset(this);
         }
-        removeCallbacks(mTapTimeoutRunnable);
     }
 
     public void setDimmed(boolean dimmed, boolean fade) {
         mNeedsDimming = dimmed;
+        if (mOnDimmedListener != null) {
+            mOnDimmedListener.onSetDimmed(dimmed);
+        }
         dimmed &= isDimmable();
         if (mDimmed != dimmed) {
             mDimmed = dimmed;
@@ -439,13 +380,17 @@
         return true;
     }
 
+    public boolean isDimmed() {
+        return mDimmed;
+    }
+
     private void updateOutlineAlpha() {
         float alpha = NotificationStackScrollLayout.BACKGROUND_ALPHA_DIMMED;
         alpha = (alpha + (1.0f - alpha) * mNormalBackgroundVisibilityAmount);
         setOutlineAlpha(alpha);
     }
 
-    public void setNormalBackgroundVisibilityAmount(float normalBackgroundVisibilityAmount) {
+    private void setNormalBackgroundVisibilityAmount(float normalBackgroundVisibilityAmount) {
         mNormalBackgroundVisibilityAmount = normalBackgroundVisibilityAmount;
         updateOutlineAlpha();
     }
@@ -473,14 +418,14 @@
     /**
      * Sets the tint color of the background
      */
-    public void setTintColor(int color) {
+    protected void setTintColor(int color) {
         setTintColor(color, false);
     }
 
     /**
      * Sets the tint color of the background
      */
-    public void setTintColor(int color, boolean animated) {
+    void setTintColor(int color, boolean animated) {
         if (color != mBgTint) {
             mBgTint = color;
             updateBackgroundTint(animated);
@@ -562,13 +507,10 @@
             mStartTint = mCurrentBackgroundTint;
             mTargetTint = color;
             mBackgroundColorAnimator = ValueAnimator.ofFloat(0.0f, 1.0f);
-            mBackgroundColorAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                @Override
-                public void onAnimationUpdate(ValueAnimator animation) {
-                    int newColor = NotificationUtils.interpolateColors(mStartTint, mTargetTint,
-                            animation.getAnimatedFraction());
-                    setBackgroundTintColor(newColor);
-                }
+            mBackgroundColorAnimator.addUpdateListener(animation -> {
+                int newColor = NotificationUtils.interpolateColors(mStartTint, mTargetTint,
+                        animation.getAnimatedFraction());
+                setBackgroundTintColor(newColor);
             });
             mBackgroundColorAnimator.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
             mBackgroundColorAnimator.setInterpolator(Interpolators.LINEAR);
@@ -643,11 +585,11 @@
     }
 
     protected void updateBackgroundAlpha(float transformationAmount) {
-        mBgAlpha =  isChildInGroup() && mDimmed ? transformationAmount : 1f;
+        float bgAlpha = isChildInGroup() && mDimmed ? transformationAmount : 1f;
         if (mDimmedBackgroundFadeInAmount != -1) {
-            mBgAlpha *= mDimmedBackgroundFadeInAmount;
+            bgAlpha *= mDimmedBackgroundFadeInAmount;
         }
-        mBackgroundDimmed.setAlpha(mBgAlpha);
+        mBackgroundDimmed.setAlpha(bgAlpha);
     }
 
     protected void resetBackgroundAlpha() {
@@ -671,7 +613,6 @@
             mBackgroundDimmed.setVisibility(View.INVISIBLE);
             mBackgroundNormal.setVisibility(View.VISIBLE);
             mBackgroundNormal.setAlpha(1f);
-            removeCallbacks(mTapTimeoutRunnable);
             // make in inactive to avoid it sticking around active
             makeInactive(false /* animate */);
         }
@@ -783,14 +724,11 @@
         mAppearAnimator.setInterpolator(Interpolators.LINEAR);
         mAppearAnimator.setDuration(
                 (long) (duration * Math.abs(mAppearAnimationFraction - targetValue)));
-        mAppearAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-            @Override
-            public void onAnimationUpdate(ValueAnimator animation) {
-                mAppearAnimationFraction = (float) animation.getAnimatedValue();
-                updateAppearAnimationAlpha();
-                updateAppearRect();
-                invalidate();
-            }
+        mAppearAnimator.addUpdateListener(animation -> {
+            mAppearAnimationFraction = (float) animation.getAnimatedValue();
+            updateAppearAnimationAlpha();
+            updateAppearRect();
+            invalidate();
         });
         if (animationListener != null) {
             mAppearAnimator.addListener(animationListener);
@@ -921,7 +859,7 @@
                 getCurrentBackgroundRadiusBottom());
     }
 
-    protected void applyBackgroundRoundness(float topRadius, float bottomRadius) {
+    private void applyBackgroundRoundness(float topRadius, float bottomRadius) {
         mBackgroundDimmed.setRoundness(topRadius, bottomRadius);
         mBackgroundNormal.setRoundness(topRadius, bottomRadius);
     }
@@ -963,7 +901,7 @@
         }
     }
 
-    protected int getRippleColor() {
+    private int getRippleColor() {
         if (mBgTint != 0) {
             return mTintedRippleColor;
         } else {
@@ -1010,10 +948,6 @@
         mOnActivatedListener = onActivatedListener;
     }
 
-    public boolean hasSameBgColor(ActivatableNotificationView otherView) {
-        return calculateBgColor() == otherView.calculateBgColor();
-    }
-
     @Override
     public void setFakeShadowIntensity(float shadowIntensity, float outlineAlpha, int shadowYEnd,
             int outlineTranslation) {
@@ -1071,8 +1005,24 @@
         return mRefocusOnDismiss || isAccessibilityFocused();
     }
 
+    void setTouchHandler(Gefingerpoken touchHandler) {
+        mTouchHandler = touchHandler;
+    }
+
+    void setOnDimmedListener(OnDimmedListener onDimmedListener) {
+        mOnDimmedListener = onDimmedListener;
+    }
+
+    public void setAccessibilityManager(AccessibilityManager accessibilityManager) {
+        mAccessibilityManager = accessibilityManager;
+    }
+
     public interface OnActivatedListener {
         void onActivated(ActivatableNotificationView view);
         void onActivationReset(ActivatableNotificationView view);
     }
+
+    interface OnDimmedListener {
+        void onSetDimmed(boolean dimmed);
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewController.java
index 18993ff..2643ec9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewController.java
@@ -16,9 +16,13 @@
 
 package com.android.systemui.statusbar.notification.row;
 
+import android.view.MotionEvent;
+import android.view.View;
 import android.view.accessibility.AccessibilityManager;
 
+import com.android.systemui.Gefingerpoken;
 import com.android.systemui.plugins.FalsingManager;
+import com.android.systemui.statusbar.phone.DoubleTapHelper;
 
 import javax.inject.Inject;
 
@@ -27,21 +31,103 @@
  */
 public class ActivatableNotificationViewController {
     private final ActivatableNotificationView mView;
+    private final ExpandableOutlineViewController mExpandableOutlineViewController;
     private final AccessibilityManager mAccessibilityManager;
     private final FalsingManager mFalsingManager;
+    private DoubleTapHelper mDoubleTapHelper;
+    private boolean mNeedsDimming;
+
+    private TouchHandler mTouchHandler = new TouchHandler();
 
     @Inject
     public ActivatableNotificationViewController(ActivatableNotificationView view,
+            ExpandableOutlineViewController expandableOutlineViewController,
             AccessibilityManager accessibilityManager, FalsingManager falsingManager) {
         mView = view;
+        mExpandableOutlineViewController = expandableOutlineViewController;
         mAccessibilityManager = accessibilityManager;
         mFalsingManager = falsingManager;
+
+        mView.setOnActivatedListener(new ActivatableNotificationView.OnActivatedListener() {
+            @Override
+            public void onActivated(ActivatableNotificationView view) {
+                mFalsingManager.onNotificationActive();
+            }
+
+            @Override
+            public void onActivationReset(ActivatableNotificationView view) {
+            }
+        });
     }
 
     /**
      * Initialize the controller, setting up handlers and other behavior.
      */
     public void init() {
+        mExpandableOutlineViewController.init();
+        mDoubleTapHelper = new DoubleTapHelper(mView, (active) -> {
+            if (active) {
+                mView.makeActive();
+                mFalsingManager.onNotificationActive();
+            } else {
+                mView.makeInactive(true /* animate */);
+            }
+        }, mView::superPerformClick, mView::handleSlideBack,
+                mFalsingManager::onNotificationDoubleTap);
+        mView.setOnTouchListener(mTouchHandler);
+        mView.setTouchHandler(mTouchHandler);
+        mView.setOnDimmedListener(dimmed -> {
+            mNeedsDimming = dimmed;
+        });
+        mView.setAccessibilityManager(mAccessibilityManager);
+    }
 
+    class TouchHandler implements Gefingerpoken, View.OnTouchListener {
+        private boolean mBlockNextTouch;
+
+        @Override
+        public boolean onTouch(View v, MotionEvent ev) {
+            boolean result;
+            if (mBlockNextTouch) {
+                mBlockNextTouch = false;
+                return true;
+            }
+            if (mNeedsDimming && !mAccessibilityManager.isTouchExplorationEnabled()
+                    && mView.isInteractive()) {
+                if (mNeedsDimming && !mView.isDimmed()) {
+                    // We're actually dimmed, but our content isn't dimmable,
+                    // let's ensure we have a ripple
+                    return false;
+                }
+                result = mDoubleTapHelper.onTouchEvent(ev, mView.getActualHeight());
+            } else {
+                return false;
+            }
+            return result;
+        }
+
+        @Override
+        public boolean onInterceptTouchEvent(MotionEvent ev) {
+            if (mNeedsDimming && ev.getActionMasked() == MotionEvent.ACTION_DOWN
+                    && mView.disallowSingleClick(ev)
+                    && !mAccessibilityManager.isTouchExplorationEnabled()) {
+                if (!mView.isActivated()) {
+                    return true;
+                } else if (!mDoubleTapHelper.isWithinDoubleTapSlop(ev)) {
+                    mBlockNextTouch = true;
+                    mView.makeInactive(true /* animate */);
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        /**
+         * Use {@link #onTouch(View, MotionEvent) instead}.
+         */
+        @Override
+        public boolean onTouchEvent(MotionEvent ev) {
+            return false;
+        }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogController.kt
index 4f27c0f..5b4a927 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogController.kt
@@ -26,26 +26,23 @@
 import android.content.DialogInterface
 import android.graphics.Color
 import android.graphics.PixelFormat
-import android.graphics.drawable.Drawable
 import android.graphics.drawable.ColorDrawable
+import android.graphics.drawable.Drawable
 import android.util.Log
 import android.view.Gravity
 import android.view.View
 import android.view.ViewGroup.LayoutParams.MATCH_PARENT
 import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
 import android.view.Window
-import android.view.WindowInsets.Type
 import android.view.WindowInsets.Type.statusBars
 import android.view.WindowManager
 import android.widget.TextView
 import com.android.internal.annotations.VisibleForTesting
-
 import com.android.systemui.R
-
 import javax.inject.Inject
 import javax.inject.Singleton
 
-const val TAG = "ChannelDialogController"
+private const val TAG = "ChannelDialogController"
 
 /**
  * ChannelEditorDialogController is the controller for the dialog half-shelf
@@ -149,9 +146,9 @@
         val channels = groupList
                 .flatMap { group ->
                     group.channels.asSequence().filterNot { channel ->
-                        channel.isImportanceLockedByOEM
-                                || channel.importance == IMPORTANCE_NONE
-                                || channel.isImportanceLockedByCriticalDeviceFunction
+                        channel.isImportanceLockedByOEM ||
+                                channel.importance == IMPORTANCE_NONE ||
+                                channel.isImportanceLockedByCriticalDeviceFunction
                     }
                 }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
index c34bba7..5008133 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
@@ -42,7 +42,6 @@
 import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
-import android.os.SystemClock;
 import android.service.notification.StatusBarNotification;
 import android.util.ArraySet;
 import android.util.AttributeSet;
@@ -72,11 +71,11 @@
 import com.android.systemui.Dependency;
 import com.android.systemui.Interpolators;
 import com.android.systemui.R;
+import com.android.systemui.plugins.FalsingManager;
 import com.android.systemui.plugins.PluginListener;
 import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
 import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin.MenuItem;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shared.plugins.PluginManager;
 import com.android.systemui.statusbar.NotificationMediaManager;
 import com.android.systemui.statusbar.RemoteInputController;
 import com.android.systemui.statusbar.StatusBarIconView;
@@ -199,6 +198,7 @@
     private NotificationGuts mGuts;
     private NotificationEntry mEntry;
     private String mAppName;
+    private FalsingManager mFalsingManager;
 
     /**
      * Whether or not the notification is using the heads up view and should peek from the top.
@@ -482,6 +482,7 @@
      * once per notification as the packageInfo can't technically change for a notification row.
      */
     private void cacheIsSystemNotification() {
+        //TODO: This probably shouldn't be in ExpandableNotificationRow
         if (mEntry != null && mEntry.mIsSystemNotification == null) {
             if (mSystemNotificationAsyncTask.getStatus() == AsyncTask.Status.PENDING) {
                 // Run async task once, only if it hasn't already been executed. Note this is
@@ -1087,20 +1088,6 @@
     }
 
     @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        mEntry.setInitializationTime(SystemClock.elapsedRealtime());
-        Dependency.get(PluginManager.class).addPluginListener(this,
-                NotificationMenuRowPlugin.class, false /* Allow multiple */);
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        Dependency.get(PluginManager.class).removePluginListener(this);
-    }
-
-    @Override
     public void onPluginConnected(NotificationMenuRowPlugin plugin, Context pluginContext) {
         boolean existed = mMenuRow != null && mMenuRow.getMenuView() != null;
         if (existed) {
@@ -1211,6 +1198,9 @@
         if (mMenuRow != null && mMenuRow.getMenuView() != null) {
             mMenuRow.onConfigurationChanged();
         }
+        if (mImageResolver != null) {
+            mImageResolver.updateMaxImageSizes();
+        }
     }
 
     public void onUiModeChanged() {
@@ -1439,7 +1429,7 @@
         return mIsBlockingHelperShowing && mNotificationTranslationFinished;
     }
 
-    public void setOnDismissRunnable(Runnable onDismissRunnable) {
+    void setOnDismissRunnable(Runnable onDismissRunnable) {
         mOnDismissRunnable = onDismissRunnable;
     }
 
@@ -1597,7 +1587,6 @@
         mMenuRow = new NotificationMenuRow(mContext);
         mImageResolver = new NotificationInlineImageResolver(context,
                 new NotificationInlineImageCache());
-        mMediaManager = Dependency.get(NotificationMediaManager.class);
         initDimens();
     }
 
@@ -1612,7 +1601,11 @@
             NotificationGroupManager groupManager,
             HeadsUpManager headsUpManager,
             RowContentBindStage rowContentBindStage,
-            OnExpandClickListener onExpandClickListener) {
+            OnExpandClickListener onExpandClickListener,
+            NotificationMediaManager notificationMediaManager,
+            OnAppOpsClickListener onAppOpsClickListener,
+            FalsingManager falsingManager,
+            StatusBarStateController statusBarStateController) {
         mAppName = appName;
         if (mMenuRow != null && mMenuRow.getMenuView() != null) {
             mMenuRow.setAppName(mAppName);
@@ -1625,9 +1618,9 @@
         mHeadsUpManager = headsUpManager;
         mRowContentBindStage = rowContentBindStage;
         mOnExpandClickListener = onExpandClickListener;
-    }
-
-    public void setStatusBarStateController(StatusBarStateController statusBarStateController) {
+        mMediaManager = notificationMediaManager;
+        setAppOpsOnClickListener(onAppOpsClickListener);
+        mFalsingManager = falsingManager;
         mStatusbarStateController = statusBarStateController;
     }
 
@@ -1719,7 +1712,7 @@
         return mOnAppOpsClickListener;
     }
 
-    public void setAppOpsOnClickListener(ExpandableNotificationRow.OnAppOpsClickListener l) {
+    void setAppOpsOnClickListener(ExpandableNotificationRow.OnAppOpsClickListener l) {
         mOnAppOpsClickListener = v -> {
             createMenu();
             NotificationMenuRowPlugin provider = getProvider();
@@ -2188,7 +2181,7 @@
      * @param allowChildExpansion whether a call to this method allows expanding children
      */
     public void setUserExpanded(boolean userExpanded, boolean allowChildExpansion) {
-        getFalsingManager().setNotificationExpanded();
+        mFalsingManager.setNotificationExpanded();
         if (mIsSummaryWithChildren && !shouldShowPublic() && allowChildExpansion
                 && !mChildrenContainer.showingAsLowPriority()) {
             final boolean wasExpanded = mGroupManager.isGroupExpanded(mEntry.getSbn());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java
new file mode 100644
index 0000000..39fab43
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row;
+
+import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
+import static com.android.systemui.statusbar.NotificationRemoteInputManager.ENABLE_REMOTE_INPUT;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.systemui.plugins.FalsingManager;
+import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shared.plugins.PluginManager;
+import com.android.systemui.statusbar.NotificationMediaManager;
+import com.android.systemui.statusbar.notification.logging.NotificationLogger;
+import com.android.systemui.statusbar.notification.row.dagger.AppName;
+import com.android.systemui.statusbar.notification.row.dagger.DismissRunnable;
+import com.android.systemui.statusbar.notification.row.dagger.NotificationKey;
+import com.android.systemui.statusbar.notification.row.dagger.NotificationRowScope;
+import com.android.systemui.statusbar.phone.KeyguardBypassController;
+import com.android.systemui.statusbar.phone.NotificationGroupManager;
+import com.android.systemui.statusbar.policy.HeadsUpManager;
+import com.android.systemui.util.time.SystemClock;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+/**
+ * Controller for {@link ExpandableNotificationRow}.
+ */
+@NotificationRowScope
+public class ExpandableNotificationRowController {
+    private final ExpandableNotificationRow mView;
+    private final ActivatableNotificationViewController mActivatableNotificationViewController;
+    private final NotificationMediaManager mMediaManager;
+    private final PluginManager mPluginManager;
+    private final SystemClock mClock;
+    private final String mAppName;
+    private final String mNotificationKey;
+    private final KeyguardBypassController mKeyguardBypassController;
+    private final NotificationGroupManager mNotificationGroupManager;
+    private final RowContentBindStage mRowContentBindStage;
+    private final NotificationLogger mNotificationLogger;
+    private final HeadsUpManager mHeadsUpManager;
+    private final ExpandableNotificationRow.OnExpandClickListener mOnExpandClickListener;
+    private final StatusBarStateController mStatusBarStateController;
+    private final NotificationRowContentBinder.InflationCallback mInflationCallback;
+
+    private final ExpandableNotificationRow.ExpansionLogger mExpansionLogger =
+            this::logNotificationExpansion;
+    private final ExpandableNotificationRow.OnAppOpsClickListener mOnAppOpsClickListener;
+    private final NotificationGutsManager mNotificationGutsManager;
+    private Runnable mOnDismissRunnable;
+    private final FalsingManager mFalsingManager;
+    private final boolean mAllowLongPress;
+
+    @Inject
+    public ExpandableNotificationRowController(ExpandableNotificationRow view,
+            ActivatableNotificationViewController activatableNotificationViewController,
+            NotificationMediaManager mediaManager, PluginManager pluginManager,
+            SystemClock clock, @AppName String appName, @NotificationKey String notificationKey,
+            KeyguardBypassController keyguardBypassController,
+            NotificationGroupManager notificationGroupManager,
+            RowContentBindStage rowContentBindStage,
+            NotificationLogger notificationLogger, HeadsUpManager headsUpManager,
+            ExpandableNotificationRow.OnExpandClickListener onExpandClickListener,
+            StatusBarStateController statusBarStateController,
+            NotificationRowContentBinder.InflationCallback inflationCallback,
+            NotificationGutsManager notificationGutsManager,
+            @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) boolean allowLongPress,
+            @DismissRunnable Runnable onDismissRunnable, FalsingManager falsingManager) {
+        mView = view;
+        mActivatableNotificationViewController = activatableNotificationViewController;
+        mMediaManager = mediaManager;
+        mPluginManager = pluginManager;
+        mClock = clock;
+        mAppName = appName;
+        mNotificationKey = notificationKey;
+        mKeyguardBypassController = keyguardBypassController;
+        mNotificationGroupManager = notificationGroupManager;
+        mRowContentBindStage = rowContentBindStage;
+        mNotificationLogger = notificationLogger;
+        mHeadsUpManager = headsUpManager;
+        mOnExpandClickListener = onExpandClickListener;
+        mStatusBarStateController = statusBarStateController;
+        mInflationCallback = inflationCallback;
+        mNotificationGutsManager = notificationGutsManager;
+        mOnDismissRunnable = onDismissRunnable;
+        mOnAppOpsClickListener = mNotificationGutsManager::openGuts;
+        mAllowLongPress = allowLongPress;
+        mFalsingManager = falsingManager;
+    }
+
+    /**
+     * Initialize the controller.
+     */
+    public void init() {
+        mActivatableNotificationViewController.init();
+        mView.initialize(
+                mAppName,
+                mNotificationKey,
+                mExpansionLogger,
+                mKeyguardBypassController,
+                mNotificationGroupManager,
+                mHeadsUpManager,
+                mRowContentBindStage,
+                mOnExpandClickListener,
+                mMediaManager,
+                mOnAppOpsClickListener,
+                mFalsingManager,
+                mStatusBarStateController
+        );
+        mView.setOnDismissRunnable(mOnDismissRunnable);
+        mView.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
+        if (mAllowLongPress) {
+            mView.setLongPressListener(mNotificationGutsManager::openGuts);
+        }
+        if (ENABLE_REMOTE_INPUT) {
+            mView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
+        }
+
+        mView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
+            @Override
+            public void onViewAttachedToWindow(View v) {
+                mView.getEntry().setInitializationTime(mClock.elapsedRealtime());
+                mPluginManager.addPluginListener(mView,
+                        NotificationMenuRowPlugin.class, false /* Allow multiple */);
+            }
+
+            @Override
+            public void onViewDetachedFromWindow(View v) {
+                mPluginManager.removePluginListener(mView);
+            }
+        });
+    }
+
+    private void logNotificationExpansion(String key, boolean userAction, boolean expanded) {
+        mNotificationLogger.onExpansionChanged(key, userAction, expanded);
+    }
+
+    /** */
+    public void setOnDismissRunnable(Runnable onDismissRunnable) {
+        mOnDismissRunnable = onDismissRunnable;
+        mView.setOnDismissRunnable(onDismissRunnable);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineViewController.java
new file mode 100644
index 0000000..75c9d1e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineViewController.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row;
+
+import javax.inject.Inject;
+
+/**
+ * Controller for {@link ExpandableOutlineView}.
+ */
+public class ExpandableOutlineViewController {
+    private final ExpandableOutlineView mView;
+    private final ExpandableViewController mExpandableViewController;
+
+    @Inject
+    public ExpandableOutlineViewController(ExpandableOutlineView view,
+            ExpandableViewController expandableViewController) {
+        mView = view;
+        mExpandableViewController = expandableViewController;
+    }
+
+    /**
+     * Initialize the controller.
+     */
+    public void init() {
+        mExpandableViewController.init();
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableViewController.java
new file mode 100644
index 0000000..e14ca8c4
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableViewController.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row;
+
+import javax.inject.Inject;
+
+/**
+ * Controller for {@link ExpandableView}.
+ */
+public class ExpandableViewController {
+    private final ExpandableView mView;
+
+    @Inject
+    public ExpandableViewController(ExpandableView view) {
+        mView = view;
+    }
+
+    /**
+     * Initialize the controller.
+     */
+    public void init() {
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java
index c2da517..41b248f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java
@@ -78,9 +78,9 @@
         mDismissButton.setText(R.string.clear_all_notifications_text);
         mDismissButton.setContentDescription(
                 mContext.getString(R.string.accessibility_clear_all));
-        mManageButton.setText(R.string.manage_notifications_text);
+        mManageButton.setText(R.string.manage_notifications_history_text);
         mManageButton.setContentDescription(
-                mContext.getString(R.string.accessibility_manage_notification));
+                mContext.getString(R.string.manage_notifications_history_text));
     }
 
     public boolean isButtonVisible() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java
index af2d084..d744fc3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java
@@ -25,11 +25,10 @@
 import androidx.annotation.Nullable;
 import androidx.core.os.CancellationSignal;
 
-import com.android.internal.statusbar.NotificationVisibility;
-import com.android.systemui.statusbar.notification.NotificationEntryListener;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
 import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
 
 import java.util.Map;
@@ -75,11 +74,15 @@
 @Singleton
 public final class NotifBindPipeline {
     private final Map<NotificationEntry, BindEntry> mBindEntries = new ArrayMap<>();
+    private final NotifBindPipelineLogger mLogger;
     private BindStage mStage;
 
     @Inject
-    NotifBindPipeline(NotificationEntryManager entryManager) {
-        entryManager.addNotificationEntryListener(mEntryListener);
+    NotifBindPipeline(
+            CommonNotifCollection collection,
+            NotifBindPipelineLogger logger) {
+        collection.addCollectionListener(mCollectionListener);
+        mLogger = logger;
     }
 
     /**
@@ -87,6 +90,8 @@
      */
     public void setStage(
             BindStage stage) {
+        mLogger.logStageSet(stage.getClass().getName());
+
         mStage = stage;
         mStage.setBindRequestListener(this::onBindRequested);
     }
@@ -97,6 +102,8 @@
     public void manageRow(
             @NonNull NotificationEntry entry,
             @NonNull ExpandableNotificationRow row) {
+        mLogger.logManagedRow(entry.getKey());
+
         final BindEntry bindEntry = getBindEntry(entry);
         bindEntry.row = row;
         if (bindEntry.invalidated) {
@@ -131,6 +138,8 @@
      * callbacks when the run finishes. If a run is already in progress, it is restarted.
      */
     private void startPipeline(NotificationEntry entry) {
+        mLogger.logStartPipeline(entry.getKey());
+
         if (mStage == null) {
             throw new IllegalStateException("No stage was ever set on the pipeline");
         }
@@ -148,28 +157,26 @@
 
     private void onPipelineComplete(NotificationEntry entry) {
         final BindEntry bindEntry = getBindEntry(entry);
+        final Set<BindCallback> callbacks = bindEntry.callbacks;
+
+        mLogger.logFinishedPipeline(entry.getKey(), callbacks.size());
 
         bindEntry.invalidated = false;
-
-        final Set<BindCallback> callbacks = bindEntry.callbacks;
         for (BindCallback cb : callbacks) {
             cb.onBindFinished(entry);
         }
         callbacks.clear();
     }
 
-    //TODO: Move this to onManageEntry hook when we split that from add/remove
-    private final NotificationEntryListener mEntryListener = new NotificationEntryListener() {
+    private final NotifCollectionListener mCollectionListener = new NotifCollectionListener() {
         @Override
-        public void onPendingEntryAdded(NotificationEntry entry) {
+        public void onEntryInit(NotificationEntry entry) {
             mBindEntries.put(entry, new BindEntry());
             mStage.createStageParams(entry);
         }
 
         @Override
-        public void onEntryRemoved(NotificationEntry entry,
-                @Nullable NotificationVisibility visibility,
-                boolean removedByUser) {
+        public void onEntryCleanUp(NotificationEntry entry) {
             BindEntry bindEntry = mBindEntries.remove(entry);
             ExpandableNotificationRow row = bindEntry.row;
             if (row != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipelineLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipelineLogger.kt
new file mode 100644
index 0000000..2717d7a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipelineLogger.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row
+
+import com.android.systemui.log.LogBuffer
+import com.android.systemui.log.LogLevel.INFO
+import com.android.systemui.log.dagger.NotificationLog
+import javax.inject.Inject
+
+class NotifBindPipelineLogger @Inject constructor(
+    @NotificationLog private val buffer: LogBuffer
+) {
+    fun logStageSet(stageName: String) {
+        buffer.log(TAG, INFO, {
+            str1 = stageName
+        }, {
+            "Stage set: $str1"
+        })
+    }
+
+    fun logManagedRow(notifKey: String) {
+        buffer.log(TAG, INFO, {
+            str1 = notifKey
+        }, {
+            "Row set for notif: $str1"
+        })
+    }
+
+    fun logStartPipeline(notifKey: String) {
+        buffer.log(TAG, INFO, {
+            str1 = notifKey
+        }, {
+            "Start pipeline for notif: $str1"
+        })
+    }
+
+    fun logFinishedPipeline(notifKey: String, numCallbacks: Int) {
+        buffer.log(TAG, INFO, {
+            str1 = notifKey
+            int1 = numCallbacks
+        }, {
+            "Finished pipeline for notif $str1 with $int1 callbacks"
+        })
+    }
+}
+
+private const val TAG = "NotifBindPipeline"
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifInflationErrorManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifInflationErrorManager.java
new file mode 100644
index 0000000..a3ca084
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifInflationErrorManager.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row;
+
+import androidx.annotation.NonNull;
+import androidx.collection.ArraySet;
+
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+/**
+ * A manager handling the error state of a notification when it encounters an exception while
+ * inflating. We don't want to show these notifications to the user but may want to keep them
+ * around for logging purposes.
+ */
+@Singleton
+public class NotifInflationErrorManager {
+
+    Set<NotificationEntry> mErroredNotifs = new ArraySet<>();
+    List<NotifInflationErrorListener> mListeners = new ArrayList<>();
+
+    @Inject
+    public NotifInflationErrorManager() { }
+
+    /**
+     * Mark the notification as errored out due to encountering an exception while inflating.
+     *
+     * @param e the exception encountered while inflating
+     */
+    public void setInflationError(NotificationEntry entry, Exception e) {
+        mErroredNotifs.add(entry);
+        for (int i = 0; i < mListeners.size(); i++) {
+            mListeners.get(i).onNotifInflationError(entry, e);
+        }
+    }
+
+    /**
+     * Notification inflated successfully and is no longer errored out.
+     */
+    public void clearInflationError(NotificationEntry entry) {
+        if (mErroredNotifs.contains(entry)) {
+            mErroredNotifs.remove(entry);
+            for (int i = 0; i < mListeners.size(); i++) {
+                mListeners.get(i).onNotifInflationErrorCleared(entry);
+            }
+        }
+    }
+
+    /**
+     * Whether or not the notification encountered an exception while inflating.
+     */
+    public boolean hasInflationError(@NonNull NotificationEntry entry) {
+        return mErroredNotifs.contains(entry);
+    }
+
+    /**
+     * Add listener for changes in inflation error state.
+     */
+    public void addInflationErrorListener(NotifInflationErrorListener listener) {
+        mListeners.add(listener);
+    }
+
+    /**
+     * Listener for changes in notification inflation error state.
+     */
+    public interface NotifInflationErrorListener {
+
+        /**
+         * Called when notification encounters an inflation exception.
+         *
+         * @param e the exception encountered while inflating
+         */
+        void onNotifInflationError(NotificationEntry entry, Exception e);
+
+        /**
+         * Called when notification inflation error is cleared.
+         */
+        default void onNotifInflationErrorCleared(NotificationEntry entry) {}
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBlockingHelperManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBlockingHelperManager.java
index 7b758aa..9212325 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBlockingHelperManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBlockingHelperManager.java
@@ -16,8 +16,7 @@
 
 package com.android.systemui.statusbar.notification.row;
 
-import static android.service.notification.NotificationListenerService.Ranking
-        .USER_SENTIMENT_NEGATIVE;
+import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE;
 
 import android.content.Context;
 import android.metrics.LogMaker;
@@ -27,29 +26,28 @@
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.systemui.Dependency;
 import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
 import com.android.systemui.statusbar.notification.logging.NotificationCounters;
 
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
 /**
  * Manager for the notification blocking helper - tracks and helps create the blocking helper
  * affordance.
  */
-@Singleton
 public class NotificationBlockingHelperManager {
     /** Enables debug logging and always makes the blocking helper show up after a dismiss. */
     private static final boolean DEBUG = false;
     private static final String TAG = "BlockingHelper";
 
     private final Context mContext;
+    private final NotificationGutsManager mNotificationGutsManager;
+    private final NotificationEntryManager mNotificationEntryManager;
+    private final MetricsLogger mMetricsLogger;
     /** Row that the blocking helper will be shown in (via {@link NotificationGuts}. */
     private ExpandableNotificationRow mBlockingHelperRow;
     private Set<String> mNonBlockablePkgs;
@@ -60,11 +58,18 @@
      */
     private boolean mIsShadeExpanded;
 
-    private MetricsLogger mMetricsLogger = new MetricsLogger();
-
-    @Inject
-    public NotificationBlockingHelperManager(Context context) {
+    /**
+     * Injected constructor. See {@link NotificationsModule}.
+     */
+    public NotificationBlockingHelperManager(
+            Context context,
+            NotificationGutsManager notificationGutsManager,
+            NotificationEntryManager notificationEntryManager,
+            MetricsLogger metricsLogger) {
         mContext = context;
+        mNotificationGutsManager = notificationGutsManager;
+        mNotificationEntryManager = notificationEntryManager;
+        mMetricsLogger = metricsLogger;
         mNonBlockablePkgs = new HashSet<>();
         Collections.addAll(mNonBlockablePkgs, mContext.getResources().getStringArray(
                 com.android.internal.R.array.config_nonBlockableNotificationPackages));
@@ -99,7 +104,6 @@
             if (DEBUG) {
                 Log.d(TAG, "Manager.perhapsShowBlockingHelper: Showing new blocking helper");
             }
-            NotificationGutsManager manager = Dependency.get(NotificationGutsManager.class);
 
             // Enable blocking helper on the row before moving forward so everything in the guts is
             // correctly prepped.
@@ -113,10 +117,10 @@
 
             // We don't care about the touch origin (x, y) since we're opening guts without any
             // explicit user interaction.
-            manager.openGuts(mBlockingHelperRow, 0, 0, menuRow.getLongpressMenuItem(mContext));
+            mNotificationGutsManager.openGuts(
+                    mBlockingHelperRow, 0, 0, menuRow.getLongpressMenuItem(mContext));
 
-            Dependency.get(MetricsLogger.class)
-                    .count(NotificationCounters.BLOCKING_HELPER_SHOWN, 1);
+            mMetricsLogger.count(NotificationCounters.BLOCKING_HELPER_SHOWN, 1);
             return true;
         }
         return false;
@@ -139,8 +143,7 @@
 
             mBlockingHelperRow.setBlockingHelperShowing(false);
             if (mBlockingHelperRow.isAttachedToWindow()) {
-                Dependency.get(NotificationEntryManager.class).updateNotifications(
-                        "dismissCurrentBlockingHelper");
+                mNotificationEntryManager.updateNotifications("dismissCurrentBlockingHelper");
             }
             mBlockingHelperRow = null;
             return true;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java
index 566da65..e3ca283 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java
@@ -33,7 +33,6 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.widget.ImageMessageConsumer;
-import com.android.systemui.Dependency;
 import com.android.systemui.statusbar.InflationTask;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.SmartReplyController;
@@ -53,6 +52,8 @@
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
+import dagger.Lazy;
+
 /**
  * {@link NotificationContentInflater} binds content to a {@link ExpandableNotificationRow} by
  * asynchronously building the content's {@link RemoteViews} and applying it to the row.
@@ -66,13 +67,19 @@
     private boolean mInflateSynchronously = false;
     private final NotificationRemoteInputManager mRemoteInputManager;
     private final NotifRemoteViewCache mRemoteViewCache;
+    private final Lazy<SmartReplyConstants> mSmartReplyConstants;
+    private final Lazy<SmartReplyController> mSmartReplyController;
 
     @Inject
     NotificationContentInflater(
             NotifRemoteViewCache remoteViewCache,
-            NotificationRemoteInputManager remoteInputManager) {
+            NotificationRemoteInputManager remoteInputManager,
+            Lazy<SmartReplyConstants> smartReplyConstants,
+            Lazy<SmartReplyController> smartReplyController) {
         mRemoteViewCache = remoteViewCache;
         mRemoteInputManager = remoteInputManager;
+        mSmartReplyConstants = smartReplyConstants;
+        mSmartReplyController = smartReplyController;
     }
 
     @Override
@@ -104,6 +111,8 @@
                 contentToBind,
                 mRemoteViewCache,
                 entry,
+                mSmartReplyConstants.get(),
+                mSmartReplyController.get(),
                 row,
                 bindParams.isLowPriority,
                 bindParams.isChildInGroup,
@@ -136,6 +145,7 @@
                 packageContext);
         result = inflateSmartReplyViews(result, reInflateFlags, entry,
                 row.getContext(), packageContext, row.getHeadsUpManager(),
+                mSmartReplyConstants.get(), mSmartReplyController.get(),
                 row.getExistingSmartRepliesAndActions());
 
         apply(
@@ -204,9 +214,8 @@
     private static InflationProgress inflateSmartReplyViews(InflationProgress result,
             @InflationFlag int reInflateFlags, NotificationEntry entry, Context context,
             Context packageContext, HeadsUpManager headsUpManager,
+            SmartReplyConstants smartReplyConstants, SmartReplyController smartReplyController,
             SmartRepliesAndActions previousSmartRepliesAndActions) {
-        SmartReplyConstants smartReplyConstants = Dependency.get(SmartReplyConstants.class);
-        SmartReplyController smartReplyController = Dependency.get(SmartReplyController.class);
         if ((reInflateFlags & FLAG_CONTENT_VIEW_EXPANDED) != 0 && result.newExpandedView != null) {
             result.expandedInflatedSmartReplies =
                     InflatedSmartReplies.inflate(
@@ -643,6 +652,8 @@
         private final boolean mUsesIncreasedHeadsUpHeight;
         private final @InflationFlag int mReInflateFlags;
         private final NotifRemoteViewCache mRemoteViewCache;
+        private final SmartReplyConstants mSmartReplyConstants;
+        private final SmartReplyController mSmartReplyController;
         private ExpandableNotificationRow mRow;
         private Exception mError;
         private RemoteViews.OnClickHandler mRemoteViewClickHandler;
@@ -653,6 +664,8 @@
                 @InflationFlag int reInflateFlags,
                 NotifRemoteViewCache cache,
                 NotificationEntry entry,
+                SmartReplyConstants smartReplyConstants,
+                SmartReplyController smartReplyController,
                 ExpandableNotificationRow row,
                 boolean isLowPriority,
                 boolean isChildInGroup,
@@ -662,6 +675,8 @@
                 RemoteViews.OnClickHandler remoteViewClickHandler) {
             mEntry = entry;
             mRow = row;
+            mSmartReplyConstants = smartReplyConstants;
+            mSmartReplyController = smartReplyController;
             mInflateSynchronously = inflateSynchronously;
             mReInflateFlags = reInflateFlags;
             mRemoteViewCache = cache;
@@ -701,6 +716,7 @@
                         mUsesIncreasedHeadsUpHeight, packageContext);
                 return inflateSmartReplyViews(inflationProgress, mReInflateFlags, mEntry,
                         mRow.getContext(), packageContext, mRow.getHeadsUpManager(),
+                        mSmartReplyConstants, mSmartReplyController,
                         mRow.getExistingSmartRepliesAndActions());
             } catch (Exception e) {
                 mError = e;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java
index bb0681c..60eda06 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java
@@ -22,14 +22,7 @@
 import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
 import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC;
 import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED;
-
-import static com.android.systemui.statusbar.notification.row.NotificationConversationInfo.UpdateChannelRunnable.ACTION_BUBBLE;
-import static com.android.systemui.statusbar.notification.row.NotificationConversationInfo.UpdateChannelRunnable.ACTION_DEMOTE;
-import static com.android.systemui.statusbar.notification.row.NotificationConversationInfo.UpdateChannelRunnable.ACTION_FAVORITE;
-import static com.android.systemui.statusbar.notification.row.NotificationConversationInfo.UpdateChannelRunnable.ACTION_HOME;
-import static com.android.systemui.statusbar.notification.row.NotificationConversationInfo.UpdateChannelRunnable.ACTION_MUTE;
-import static com.android.systemui.statusbar.notification.row.NotificationConversationInfo.UpdateChannelRunnable.ACTION_SNOOZE;
-import static com.android.systemui.statusbar.notification.row.NotificationConversationInfo.UpdateChannelRunnable.ACTION_UNBUBBLE;
+import static android.provider.Settings.Secure.BUBBLE_IMPORTANT_CONVERSATIONS;
 
 import static java.lang.annotation.RetentionPolicy.SOURCE;
 
@@ -41,11 +34,9 @@
 import android.app.NotificationChannelGroup;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.LauncherApps;
 import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
 import android.content.pm.ShortcutInfo;
 import android.content.pm.ShortcutManager;
 import android.graphics.drawable.Icon;
@@ -69,11 +60,14 @@
 import android.widget.TextView;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.settingslib.notification.ConversationIconFactory;
+import com.android.settingslib.utils.ThreadUtils;
 import com.android.systemui.Dependency;
 import com.android.systemui.R;
 import com.android.systemui.bubbles.BubbleController;
 import com.android.systemui.statusbar.notification.VisualStabilityManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.phone.ShadeController;
 
 import java.lang.annotation.Retention;
 import java.util.Arrays;
@@ -92,6 +86,8 @@
     ShortcutManager mShortcutManager;
     private PackageManager mPm;
     private VisualStabilityManager mVisualStabilityManager;
+    private ShadeController mShadeController;
+    private ConversationIconFactory mIconFactory;
 
     private String mPackageName;
     private String mAppName;
@@ -103,32 +99,37 @@
     private NotificationEntry mEntry;
     private StatusBarNotification mSbn;
     private boolean mIsDeviceProvisioned;
-    private int mStartingChannelImportance;
     private boolean mStartedAsBubble;
     private boolean mIsBubbleable;
-    // TODO: remove when launcher api works
-    @VisibleForTesting
-    boolean mShowHomeScreen = false;
 
-    private @UpdateChannelRunnable.Action int mSelectedAction = -1;
+    private @Action int mSelectedAction = -1;
 
     private OnSnoozeClickListener mOnSnoozeClickListener;
     private OnSettingsClickListener mOnSettingsClickListener;
-    private OnAppSettingsClickListener mAppSettingsClickListener;
     private NotificationGuts mGutsContainer;
     private BubbleController mBubbleController;
 
     @VisibleForTesting
     boolean mSkipPost = false;
 
+    @Retention(SOURCE)
+    @IntDef({ACTION_BUBBLE, ACTION_HOME, ACTION_FAVORITE, ACTION_SNOOZE, ACTION_MUTE,
+            ACTION_UNBUBBLE, ACTION_SETTINGS})
+    private @interface Action {}
+    static final int ACTION_BUBBLE = 0;
+    static final int ACTION_HOME = 1;
+    static final int ACTION_FAVORITE = 2;
+    static final int ACTION_SNOOZE = 3;
+    static final int ACTION_MUTE = 4;
+    static final int ACTION_SETTINGS = 5;
+    static final int ACTION_UNBUBBLE = 6;
+
     private OnClickListener mOnBubbleClick = v -> {
         mSelectedAction = mStartedAsBubble ? ACTION_UNBUBBLE : ACTION_BUBBLE;
         if (mStartedAsBubble) {
             mBubbleController.onUserDemotedBubbleFromNotification(mEntry);
         } else {
             mBubbleController.onUserCreatedBubbleFromNotification(mEntry);
-            Settings.Global.putInt(
-                    mContext.getContentResolver(), Settings.Global.NOTIFICATION_BUBBLES, 1);
         }
         closeControls(v, true);
     };
@@ -136,12 +137,14 @@
     private OnClickListener mOnHomeClick = v -> {
         mSelectedAction = ACTION_HOME;
         mShortcutManager.requestPinShortcut(mShortcutInfo, null);
+        mShadeController.animateCollapsePanels();
         closeControls(v, true);
     };
 
     private OnClickListener mOnFavoriteClick = v -> {
         mSelectedAction = ACTION_FAVORITE;
-        closeControls(v, true);
+        updateChannel();
+
     };
 
     private OnClickListener mOnSnoozeClick = v -> {
@@ -151,13 +154,8 @@
     };
 
     private OnClickListener mOnMuteClick = v -> {
-      mSelectedAction = ACTION_MUTE;
-      closeControls(v, true);
-    };
-
-    private OnClickListener mOnDemoteClick = v -> {
-        mSelectedAction = ACTION_DEMOTE;
-        closeControls(v, true);
+        mSelectedAction = ACTION_MUTE;
+        updateChannel();
     };
 
     public NotificationConversationInfo(Context context, AttributeSet attrs) {
@@ -188,6 +186,7 @@
             OnSettingsClickListener onSettingsClick,
             OnAppSettingsClickListener onAppSettingsClick,
             OnSnoozeClickListener onSnoozeClickListener,
+            ConversationIconFactory conversationIconFactory,
             boolean isDeviceProvisioned) {
         mSelectedAction = -1;
         mINotificationManager = iNotificationManager;
@@ -197,15 +196,15 @@
         mEntry = entry;
         mSbn = entry.getSbn();
         mPm = pm;
-        mAppSettingsClickListener = onAppSettingsClick;
         mAppName = mPackageName;
         mOnSettingsClickListener = onSettingsClick;
         mNotificationChannel = notificationChannel;
-        mStartingChannelImportance = mNotificationChannel.getImportance();
         mAppUid = mSbn.getUid();
         mDelegatePkg = mSbn.getOpPkg();
         mIsDeviceProvisioned = isDeviceProvisioned;
         mOnSnoozeClickListener = onSnoozeClickListener;
+        mShadeController = Dependency.get(ShadeController.class);
+        mIconFactory = conversationIconFactory;
 
         mShortcutManager = shortcutManager;
         mLauncherApps = launcherApps;
@@ -226,7 +225,9 @@
             mShortcutInfo = shortcuts.get(0);
         }
 
-        mIsBubbleable = mEntry.getBubbleMetadata() != null;
+        mIsBubbleable = mEntry.getBubbleMetadata() != null
+            && Settings.Global.getInt(mContext.getContentResolver(),
+                Settings.Global.NOTIFICATION_BUBBLES, 0) == 1;
         mStartedAsBubble = mEntry.isBubble();
 
         createConversationChannelIfNeeded();
@@ -251,9 +252,6 @@
                 mNotificationChannel = mINotificationManager.getConversationNotificationChannel(
                         mContext.getOpPackageName(), UserHandle.getUserId(mAppUid), mPackageName,
                         mNotificationChannel.getId(), false, mConversationId);
-
-                // TODO: ask LA to pin the shortcut once api exists for pinning one shortcut at a
-                // time
             } catch (RemoteException e) {
                 Slog.e(TAG, "Could not create conversation channel", e);
             }
@@ -274,40 +272,24 @@
 
         Button home = findViewById(R.id.home);
         home.setOnClickListener(mOnHomeClick);
-        home.setVisibility(mShowHomeScreen && mShortcutInfo != null
+        home.setVisibility(mShortcutInfo != null
                 && mShortcutManager.isRequestPinShortcutSupported()
                 ? VISIBLE : GONE);
 
-        Button favorite = findViewById(R.id.fave);
+        View favorite = findViewById(R.id.fave);
         favorite.setOnClickListener(mOnFavoriteClick);
-        if (mNotificationChannel.isImportantConversation()) {
-            favorite.setText(R.string.notification_conversation_unfavorite);
-            favorite.setCompoundDrawablesRelative(
-                    mContext.getDrawable(R.drawable.ic_star), null, null, null);
-        } else {
-            favorite.setText(R.string.notification_conversation_favorite);
-            favorite.setCompoundDrawablesRelative(
-                    mContext.getDrawable(R.drawable.ic_star_border), null, null, null);
-        }
 
         Button snooze = findViewById(R.id.snooze);
         snooze.setOnClickListener(mOnSnoozeClick);
 
-        Button mute = findViewById(R.id.mute);
+        View mute = findViewById(R.id.mute);
         mute.setOnClickListener(mOnMuteClick);
-        if (mStartingChannelImportance >= IMPORTANCE_DEFAULT
-                || mStartingChannelImportance == IMPORTANCE_UNSPECIFIED) {
-            mute.setText(R.string.notification_conversation_mute);
-            favorite.setCompoundDrawablesRelative(
-                    mContext.getDrawable(R.drawable.ic_notifications_silence), null, null, null);
-        } else {
-            mute.setText(R.string.notification_conversation_unmute);
-            favorite.setCompoundDrawablesRelative(
-                    mContext.getDrawable(R.drawable.ic_notifications_alert), null, null, null);
-        }
 
-        ImageButton demote = findViewById(R.id.demote);
-        demote.setOnClickListener(mOnDemoteClick);
+        final View settingsButton = findViewById(R.id.info);
+        settingsButton.setOnClickListener(getSettingsOnClickListener());
+        settingsButton.setVisibility(settingsButton.hasOnClickListeners() ? VISIBLE : GONE);
+
+        updateToggleActions();
     }
 
     private void bindHeader() {
@@ -315,26 +297,6 @@
 
         // Delegate
         bindDelegate();
-
-        // Set up app settings link (i.e. Customize)
-        View settingsLinkView = findViewById(R.id.app_settings);
-        Intent settingsIntent = getAppSettingsIntent(mPm, mPackageName,
-                mNotificationChannel,
-                mSbn.getId(), mSbn.getTag());
-        if (settingsIntent != null
-                && !TextUtils.isEmpty(mSbn.getNotification().getSettingsText())) {
-            settingsLinkView.setVisibility(VISIBLE);
-            settingsLinkView.setOnClickListener((View view) -> {
-                mAppSettingsClickListener.onClick(view, settingsIntent);
-            });
-        } else {
-            settingsLinkView.setVisibility(View.GONE);
-        }
-
-        // System Settings button.
-        final View settingsButton = findViewById(R.id.info);
-        settingsButton.setOnClickListener(getSettingsOnClickListener());
-        settingsButton.setVisibility(settingsButton.hasOnClickListeners() ? VISIBLE : GONE);
     }
 
     private OnClickListener getSettingsOnClickListener() {
@@ -362,8 +324,8 @@
     private void bindIcon() {
         ImageView image = findViewById(R.id.conversation_icon);
         if (mShortcutInfo != null) {
-            image.setImageDrawable(mLauncherApps.getShortcutBadgedIconDrawable(mShortcutInfo,
-                    mContext.getResources().getDisplayMetrics().densityDpi));
+            image.setImageBitmap(mIconFactory.getConversationBitmap(
+                    mShortcutInfo, mPackageName, mAppUid));
         } else {
             if (mSbn.getNotification().extras.getBoolean(EXTRA_IS_GROUP_CONVERSATION, false)) {
                 // TODO: maybe use a generic group icon, or a composite of recent senders
@@ -422,17 +384,19 @@
         ((TextView) findViewById(R.id.pkg_name)).setText(mAppName);
     }
 
+    private boolean bubbleImportantConversations() {
+        return Settings.Secure.getInt(mContext.getContentResolver(),
+                BUBBLE_IMPORTANT_CONVERSATIONS, 1) == 1;
+    }
+
     private void bindDelegate() {
         TextView delegateView = findViewById(R.id.delegate_name);
-        TextView dividerView = findViewById(R.id.pkg_divider);
 
         if (!TextUtils.equals(mPackageName, mDelegatePkg)) {
             // this notification was posted by a delegate!
             delegateView.setVisibility(View.VISIBLE);
-            dividerView.setVisibility(View.VISIBLE);
         } else {
             delegateView.setVisibility(View.GONE);
-            dividerView.setVisibility(View.GONE);
         }
     }
 
@@ -492,26 +456,37 @@
         }
     }
 
-    private Intent getAppSettingsIntent(PackageManager pm, String packageName,
-            NotificationChannel channel, int id, String tag) {
-        Intent intent = new Intent(Intent.ACTION_MAIN)
-                .addCategory(Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES)
-                .setPackage(packageName);
-        final List<ResolveInfo> resolveInfos = pm.queryIntentActivities(
-                intent,
-                PackageManager.MATCH_DEFAULT_ONLY
-        );
-        if (resolveInfos == null || resolveInfos.size() == 0 || resolveInfos.get(0) == null) {
-            return null;
+    private void updateToggleActions() {
+        ImageButton favorite = findViewById(R.id.fave);
+        if (mNotificationChannel.isImportantConversation()) {
+            favorite.setContentDescription(
+                    mContext.getString(R.string.notification_conversation_favorite));
+            favorite.setImageResource(R.drawable.ic_important);
+        } else {
+            favorite.setContentDescription(
+                    mContext.getString(R.string.notification_conversation_unfavorite));
+            favorite.setImageResource(R.drawable.ic_important_outline);
         }
-        final ActivityInfo activityInfo = resolveInfos.get(0).activityInfo;
-        intent.setClassName(activityInfo.packageName, activityInfo.name);
-        if (channel != null) {
-            intent.putExtra(Notification.EXTRA_CHANNEL_ID, channel.getId());
+
+        ImageButton mute = findViewById(R.id.mute);
+        if (mNotificationChannel.getImportance() >= IMPORTANCE_DEFAULT
+                || mNotificationChannel.getImportance() == IMPORTANCE_UNSPECIFIED) {
+            mute.setContentDescription(
+                    mContext.getString(R.string.notification_conversation_unmute));
+            mute.setImageResource(R.drawable.ic_notifications_alert);
+        } else {
+            mute.setContentDescription(
+                    mContext.getString(R.string.notification_conversation_mute));
+            mute.setImageResource(R.drawable.ic_notifications_silence);
         }
-        intent.putExtra(Notification.EXTRA_NOTIFICATION_ID, id);
-        intent.putExtra(Notification.EXTRA_NOTIFICATION_TAG, tag);
-        return intent;
+    }
+
+    private void updateChannel() {
+        Handler bgHandler = new Handler(Dependency.get(Dependency.BG_LOOPER));
+        bgHandler.post(
+                new UpdateChannelRunnable(mINotificationManager, mPackageName,
+                        mAppUid, mSelectedAction, mNotificationChannel));
+        mVisualStabilityManager.temporarilyAllowReordering();
     }
 
     /**
@@ -545,7 +520,11 @@
 
     @Override
     public boolean shouldBeSaved() {
-        return mSelectedAction > -1;
+        // Toggle actions are already saved by the time the guts are closed; save for any other
+        // taps
+        return mSelectedAction > -1
+                && mSelectedAction != ACTION_FAVORITE
+                && mSelectedAction != ACTION_MUTE;
     }
 
     @Override
@@ -556,11 +535,7 @@
     @Override
     public boolean handleCloseControls(boolean save, boolean force) {
         if (save && mSelectedAction > -1) {
-            Handler bgHandler = new Handler(Dependency.get(Dependency.BG_LOOPER));
-            bgHandler.post(
-                    new UpdateChannelRunnable(mINotificationManager, mPackageName,
-                            mAppUid, mSelectedAction, mNotificationChannel));
-            mVisualStabilityManager.temporarilyAllowReordering();
+            updateChannel();
         }
         return false;
     }
@@ -575,19 +550,7 @@
         return false;
     }
 
-    static class UpdateChannelRunnable implements Runnable {
-
-        @Retention(SOURCE)
-        @IntDef({ACTION_BUBBLE, ACTION_HOME, ACTION_FAVORITE, ACTION_SNOOZE, ACTION_MUTE,
-                ACTION_DEMOTE})
-        private @interface Action {}
-        static final int ACTION_BUBBLE = 0;
-        static final int ACTION_HOME = 1;
-        static final int ACTION_FAVORITE = 2;
-        static final int ACTION_SNOOZE = 3;
-        static final int ACTION_MUTE = 4;
-        static final int ACTION_DEMOTE = 5;
-        static final int ACTION_UNBUBBLE = 6;
+    class UpdateChannelRunnable implements Runnable {
 
         private final INotificationManager mINotificationManager;
         private final String mAppPkg;
@@ -623,6 +586,10 @@
                     case ACTION_FAVORITE:
                         mChannelToUpdate.setImportantConversation(
                                 !mChannelToUpdate.isImportantConversation());
+                        if (mChannelToUpdate.isImportantConversation()
+                                && bubbleImportantConversations()) {
+                            mChannelToUpdate.setAllowBubbles(true);
+                        }
                         break;
                     case ACTION_MUTE:
                         if (mChannelToUpdate.getImportance() == IMPORTANCE_UNSPECIFIED
@@ -633,10 +600,6 @@
                                     mChannelToUpdate.getOriginalImportance(), IMPORTANCE_DEFAULT));
                         }
                         break;
-                    case ACTION_DEMOTE:
-                        mChannelToUpdate.setDemoted(!mChannelToUpdate.isDemoted());
-                        break;
-
                 }
 
                 if (channelSettingChanged) {
@@ -646,13 +609,7 @@
             } catch (RemoteException e) {
                 Log.e(TAG, "Unable to update notification channel", e);
             }
+            ThreadUtils.postOnMainThread(() -> updateToggleActions());
         }
     }
-
-    @Retention(SOURCE)
-    @IntDef({BEHAVIOR_ALERTING, BEHAVIOR_SILENT, BEHAVIOR_BUBBLE})
-    private @interface AlertingBehavior {}
-    private static final int BEHAVIOR_ALERTING = 0;
-    private static final int BEHAVIOR_SILENT = 1;
-    private static final int BEHAVIOR_BUBBLE = 2;
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
index 6789c81..c01f6c4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
@@ -34,6 +34,7 @@
 import android.provider.Settings;
 import android.service.notification.StatusBarNotification;
 import android.util.ArraySet;
+import android.util.IconDrawableFactory;
 import android.util.Log;
 import android.view.HapticFeedbackConstants;
 import android.view.View;
@@ -42,8 +43,10 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto;
+import com.android.settingslib.notification.ConversationIconFactory;
 import com.android.systemui.Dependency;
 import com.android.systemui.Dumpable;
+import com.android.systemui.R;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -56,6 +59,7 @@
 import com.android.systemui.statusbar.notification.VisualStabilityManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
+import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
 import com.android.systemui.statusbar.notification.row.NotificationInfo.CheckSaveListener;
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
 import com.android.systemui.statusbar.phone.StatusBar;
@@ -64,16 +68,12 @@
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
 import dagger.Lazy;
 
 /**
  * Handles various NotificationGuts related tasks, such as binding guts to a row, opening and
  * closing guts, and keeping track of the currently exposed notification guts.
  */
-@Singleton
 public class NotificationGutsManager implements Dumpable, NotificationLifetimeExtender {
     private static final String TAG = "NotificationGutsManager";
 
@@ -110,7 +110,9 @@
     private final Handler mMainHandler;
     private Runnable mOpenRunnable;
 
-    @Inject
+    /**
+     * Injected constructor. See {@link NotificationsModule}.
+     */
     public NotificationGutsManager(Context context, VisualStabilityManager visualStabilityManager,
             Lazy<StatusBar> statusBarLazy, @Main Handler mainHandler,
             AccessibilityManager accessibilityManager,
@@ -384,8 +386,13 @@
                 guts.resetFalsingCheck();
                 mOnSettingsClickListener.onSettingsClick(sbn.getKey());
                 startAppNotificationSettingsActivity(packageName, appUid, channel, row);
+                notificationInfoView.closeControls(v, false);
             };
         }
+        ConversationIconFactory iconFactoryLoader = new ConversationIconFactory(mContext,
+                launcherApps, pmUser, IconDrawableFactory.newInstance(mContext),
+                mContext.getResources().getDimensionPixelSize(
+                        R.dimen.notification_guts_conversation_icon_size));
 
         notificationInfoView.bindNotification(
                 shortcutManager,
@@ -399,8 +406,8 @@
                 onSettingsClick,
                 onAppSettingsClick,
                 onSnoozeClickListener,
+                iconFactoryLoader,
                 mDeviceProvisionedController.isDeviceProvisioned());
-
     }
 
     /**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInlineImageResolver.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInlineImageResolver.java
index fa4bc2a..52f7c2c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInlineImageResolver.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInlineImageResolver.java
@@ -19,12 +19,17 @@
 import android.app.ActivityManager;
 import android.app.Notification;
 import android.content.Context;
+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.Bundle;
 import android.os.Parcelable;
 import android.util.Log;
 
+import com.android.internal.R;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.widget.ImageResolver;
 import com.android.internal.widget.LocalImageResolver;
 import com.android.internal.widget.MessagingMessage;
@@ -36,6 +41,10 @@
 
 /**
  * Custom resolver with built-in image cache for image messages.
+ *
+ * If the URL points to a bitmap that's larger than the maximum width or height, the bitmap
+ * will be resized down to that maximum size before being cached. See {@link #getMaxImageWidth()},
+ * {@link #getMaxImageHeight()}, and {@link #resolveImage(Uri)} for the downscaling implementation.
  */
 public class NotificationInlineImageResolver implements ImageResolver {
     private static final String TAG = NotificationInlineImageResolver.class.getSimpleName();
@@ -44,6 +53,13 @@
     private final ImageCache mImageCache;
     private Set<Uri> mWantedUriSet;
 
+    // max allowed bitmap width, in pixels
+    @VisibleForTesting
+    protected int mMaxImageWidth;
+    // max allowed bitmap height, in pixels
+    @VisibleForTesting
+    protected int mMaxImageHeight;
+
     /**
      * Constructor.
      * @param context    Context.
@@ -56,6 +72,8 @@
         if (mImageCache != null) {
             mImageCache.setImageResolver(this);
         }
+
+        updateMaxImageSizes();
     }
 
     /**
@@ -66,14 +84,49 @@
         return mImageCache != null && !ActivityManager.isLowRamDeviceStatic();
     }
 
+    private boolean isLowRam() {
+        return ActivityManager.isLowRamDeviceStatic();
+    }
+
     /**
-     * To resolve image from specified uri directly.
+     * Update the maximum width and height allowed for bitmaps, ex. after a configuration change.
+     */
+    public void updateMaxImageSizes() {
+        mMaxImageWidth = getMaxImageWidth();
+        mMaxImageHeight = getMaxImageHeight();
+    }
+
+    @VisibleForTesting
+    protected int getMaxImageWidth() {
+        return mContext.getResources().getDimensionPixelSize(isLowRam()
+                ? R.dimen.notification_custom_view_max_image_width_low_ram
+                : R.dimen.notification_custom_view_max_image_width);
+    }
+
+    @VisibleForTesting
+    protected int getMaxImageHeight() {
+        return mContext.getResources().getDimensionPixelSize(isLowRam()
+                ? R.dimen.notification_custom_view_max_image_height_low_ram
+                : R.dimen.notification_custom_view_max_image_height);
+    }
+
+    @VisibleForTesting
+    protected BitmapDrawable resolveImageInternal(Uri uri) throws IOException {
+        return (BitmapDrawable) LocalImageResolver.resolveImage(uri, mContext);
+    }
+
+    /**
+     * To resolve image from specified uri directly. If the resulting image is larger than the
+     * maximum allowed size, scale it down.
      * @param uri Uri of the image.
      * @return Drawable of the image.
      * @throws IOException Throws if failed at resolving the image.
      */
     Drawable resolveImage(Uri uri) throws IOException {
-        return LocalImageResolver.resolveImage(uri, mContext);
+        BitmapDrawable image = resolveImageInternal(uri);
+        Bitmap bitmap = image.getBitmap();
+        image.setBitmap(Icon.scaleDownIfNecessary(bitmap, mMaxImageWidth, mMaxImageHeight));
+        return image;
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindParams.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindParams.java
index 8280a63..88ed0bb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindParams.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindParams.java
@@ -123,6 +123,14 @@
     }
 
     /**
+     * Request that all content views be rebound. This may happen if, for example, the underlying
+     * layout has changed.
+     */
+    public void rebindAllContentViews() {
+        mDirtyContentViews = mContentViews;
+    }
+
+    /**
      * Clears all dirty content views so that they no longer need to be rebound.
      */
     void clearDirtyContentViews() {
@@ -149,6 +157,15 @@
         return mViewsNeedReinflation;
     }
 
+    @Override
+    public String toString() {
+        return String.format("RowContentBindParams[mContentViews=%x mDirtyContentViews=%x "
+                + "mUseLowPriority=%b mUseChildInGroup=%b mUseIncreasedHeight=%b "
+                + "mUseIncreasedHeadsUpHeight=%b mViewsNeedReinflation=%b]",
+                mContentViews, mDirtyContentViews, mUseLowPriority, mUseChildInGroup,
+                mUseIncreasedHeight, mUseIncreasedHeadsUpHeight, mViewsNeedReinflation);
+    }
+
     /**
      * Content views that should be inflated by default for all notifications.
      */
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStage.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStage.java
index f124179..c632f3e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStage.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStage.java
@@ -18,12 +18,8 @@
 
 import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.FLAG_CONTENT_VIEW_ALL;
 
-import android.os.RemoteException;
-import android.service.notification.StatusBarNotification;
-
 import androidx.annotation.NonNull;
 
-import com.android.internal.statusbar.IStatusBarService;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.BindParams;
 import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationCallback;
@@ -41,14 +37,17 @@
 @Singleton
 public class RowContentBindStage extends BindStage<RowContentBindParams> {
     private final NotificationRowContentBinder mBinder;
-    private final IStatusBarService mStatusBarService;
+    private final NotifInflationErrorManager mNotifInflationErrorManager;
+    private final RowContentBindStageLogger mLogger;
 
     @Inject
     RowContentBindStage(
             NotificationRowContentBinder binder,
-            IStatusBarService statusBarService) {
+            NotifInflationErrorManager errorManager,
+            RowContentBindStageLogger logger) {
         mBinder = binder;
-        mStatusBarService = statusBarService;
+        mNotifInflationErrorManager = errorManager;
+        mLogger = logger;
     }
 
     @Override
@@ -58,6 +57,8 @@
             @NonNull StageCallback callback) {
         RowContentBindParams params = getStageParams(entry);
 
+        mLogger.logStageParams(entry.getKey(), params.toString());
+
         // Resolve content to bind/unbind.
         @InflationFlag int inflationFlags = params.getContentViews();
         @InflationFlag int invalidatedFlags = params.getDirtyContentViews();
@@ -78,24 +79,12 @@
         InflationCallback inflationCallback = new InflationCallback() {
             @Override
             public void handleInflationException(NotificationEntry entry, Exception e) {
-                entry.setHasInflationError(true);
-                try {
-                    final StatusBarNotification sbn = entry.getSbn();
-                    mStatusBarService.onNotificationError(
-                            sbn.getPackageName(),
-                            sbn.getTag(),
-                            sbn.getId(),
-                            sbn.getUid(),
-                            sbn.getInitialPid(),
-                            e.getMessage(),
-                            sbn.getUserId());
-                } catch (RemoteException ex) {
-                }
+                mNotifInflationErrorManager.setInflationError(entry, e);
             }
 
             @Override
             public void onAsyncInflationFinished(NotificationEntry entry) {
-                entry.setHasInflationError(false);
+                mNotifInflationErrorManager.clearInflationError(entry);
                 getStageParams(entry).clearDirtyContentViews();
                 callback.onStageFinished(entry);
             }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStageLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStageLogger.kt
new file mode 100644
index 0000000..29cce33
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStageLogger.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row
+
+import com.android.systemui.log.LogBuffer
+import com.android.systemui.log.LogLevel.INFO
+import com.android.systemui.log.dagger.NotificationLog
+import javax.inject.Inject
+
+class RowContentBindStageLogger @Inject constructor(
+    @NotificationLog private val buffer: LogBuffer
+) {
+    fun logStageParams(notifKey: String, stageParams: String) {
+        buffer.log(TAG, INFO, {
+            str1 = notifKey
+            str2 = stageParams
+        }, {
+            "Invalidated notif $str1 with params: \n$str2"
+        })
+    }
+}
+
+private const val TAG = "RowContentBindStage"
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowInflaterTask.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowInflaterTask.java
index c173b4d..6feffe6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowInflaterTask.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowInflaterTask.java
@@ -26,7 +26,6 @@
 import com.android.systemui.R;
 import com.android.systemui.statusbar.InflationTask;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
 
 import javax.inject.Inject;
 
@@ -37,7 +36,6 @@
 
     private static final String TAG = "RowInflaterTask";
     private static final boolean TRACE_ORIGIN = true;
-    private final NotificationRowComponent.Builder mNotificationRowComponentBuilder;
 
     private RowInflationFinishedListener mListener;
     private NotificationEntry mEntry;
@@ -45,10 +43,7 @@
     private Throwable mInflateOrigin;
 
     @Inject
-    public RowInflaterTask(
-            NotificationRowComponent.Builder notificationRowComponentBuilder) {
-        super();
-        mNotificationRowComponentBuilder = notificationRowComponentBuilder;
+    public RowInflaterTask() {
     }
 
     /**
@@ -75,12 +70,6 @@
     public void onInflateFinished(View view, int resid, ViewGroup parent) {
         if (!mCancelled) {
             try {
-                // Setup the controller for the view.
-                NotificationRowComponent component = mNotificationRowComponentBuilder
-                        .activatableNotificationView((ActivatableNotificationView) view)
-                        .build();
-                component.getActivatableNotificationViewController().init();
-
                 mEntry.onInflationTaskFinished();
                 mListener.onInflationFinished((ExpandableNotificationRow) view);
             } catch (Throwable t) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/ActivatableNotificationViewModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/ActivatableNotificationViewModule.java
new file mode 100644
index 0000000..a3dfa60
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/ActivatableNotificationViewModule.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row.dagger;
+
+import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
+import com.android.systemui.statusbar.notification.row.ExpandableOutlineView;
+import com.android.systemui.statusbar.notification.row.ExpandableView;
+
+import dagger.Binds;
+import dagger.Module;
+
+/**
+ * Module for NotificationRowComponent.
+ */
+@Module
+public interface ActivatableNotificationViewModule {
+    /** ExpandableView is provided as an instance of ActivatableNotificationView. */
+    @Binds
+    ExpandableView bindExpandableView(ActivatableNotificationView view);
+    /** ExpandableOutlineView is provided as an instance of ActivatableNotificationView. */
+    @Binds
+    ExpandableOutlineView bindExpandableOutlineView(ActivatableNotificationView view);
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/AppName.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/AppName.java
new file mode 100644
index 0000000..1dbca0c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/AppName.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row.dagger;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+public @interface AppName {
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/DismissRunnable.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/DismissRunnable.java
new file mode 100644
index 0000000..4331142
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/DismissRunnable.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row.dagger;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+public @interface DismissRunnable {
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/ExpandableNotificationRowComponent.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/ExpandableNotificationRowComponent.java
new file mode 100644
index 0000000..6d6d3e4
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/ExpandableNotificationRowComponent.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row.dagger;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.service.notification.StatusBarNotification;
+
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
+import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
+import com.android.systemui.statusbar.notification.row.ExpandableNotificationRowController;
+import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder;
+import com.android.systemui.statusbar.notification.row.RowContentBindStage;
+import com.android.systemui.statusbar.phone.StatusBar;
+
+import dagger.Binds;
+import dagger.BindsInstance;
+import dagger.Module;
+import dagger.Provides;
+import dagger.Subcomponent;
+
+/**
+ * Dagger Component for a {@link ExpandableNotificationRow}.
+ */
+@Subcomponent(modules = {ExpandableNotificationRowComponent.ExpandableNotificationRowModule.class,
+        ActivatableNotificationViewModule.class})
+@NotificationRowScope
+public interface ExpandableNotificationRowComponent {
+
+    /**
+     * Builder for {@link NotificationRowComponent}.
+     */
+    @Subcomponent.Builder
+    interface Builder {
+        // TODO: NotificationEntry contains a reference to ExpandableNotificationRow, so it
+        // should be possible to pull one from the other, but they aren't connected at the time
+        // this component is constructed.
+        @BindsInstance
+        Builder expandableNotificationRow(ExpandableNotificationRow view);
+        @BindsInstance
+        Builder notificationEntry(NotificationEntry entry);
+        @BindsInstance
+        Builder onDismissRunnable(@DismissRunnable Runnable runnable);
+        @BindsInstance
+        Builder rowContentBindStage(RowContentBindStage rowContentBindStage);
+        @BindsInstance
+        Builder inflationCallback(NotificationRowContentBinder.InflationCallback inflationCallback);
+        @BindsInstance
+        Builder onExpandClickListener(ExpandableNotificationRow.OnExpandClickListener presenter);
+        ExpandableNotificationRowComponent build();
+    }
+
+    /**
+     * Creates a ExpandableNotificationRowController.
+     */
+    @NotificationRowScope
+    ExpandableNotificationRowController getExpandableNotificationRowController();
+
+    /**
+     * Dagger Module that extracts interesting properties from an ExpandableNotificationRow.
+     */
+    @Module
+    abstract class ExpandableNotificationRowModule {
+
+        /** ExpandableNotificationRow is provided as an instance of ActivatableNotificationView. */
+        @Binds
+        abstract ActivatableNotificationView bindExpandableView(ExpandableNotificationRow view);
+
+        @Provides
+        static StatusBarNotification provideStatusBarNotification(
+                NotificationEntry notificationEntry) {
+            return notificationEntry.getSbn();
+        }
+
+        @Provides
+        @NotificationKey
+        static String provideNotificationKey(StatusBarNotification statusBarNotification) {
+            return statusBarNotification.getKey();
+        }
+
+        @Provides
+        @AppName
+        static String provideAppName(Context context, StatusBarNotification statusBarNotification) {
+            // Get the app name.
+            // Note that Notification.Builder#bindHeaderAppName has similar logic
+            // but since this field is used in the guts, it must be accurate.
+            // Therefore we will only show the application label, or, failing that, the
+            // package name. No substitutions.
+            PackageManager pmUser = StatusBar.getPackageManagerForUser(
+                    context, statusBarNotification.getUser().getIdentifier());
+            final String pkg = statusBarNotification.getPackageName();
+            try {
+                final ApplicationInfo info = pmUser.getApplicationInfo(pkg,
+                        PackageManager.MATCH_UNINSTALLED_PACKAGES
+                                | PackageManager.MATCH_DISABLED_COMPONENTS);
+                if (info != null) {
+                    return String.valueOf(pmUser.getApplicationLabel(info));
+                }
+            } catch (PackageManager.NameNotFoundException e) {
+                // Do nothing
+            }
+
+            return pkg;
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/NotificationKey.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/NotificationKey.java
new file mode 100644
index 0000000..b1fff38
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/NotificationKey.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row.dagger;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+public @interface NotificationKey {
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/NotificationRowComponent.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/NotificationRowComponent.java
index f16ea7a..1f535c5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/NotificationRowComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/NotificationRowComponent.java
@@ -16,24 +16,17 @@
 
 package com.android.systemui.statusbar.notification.row.dagger;
 
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
 import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
 import com.android.systemui.statusbar.notification.row.ActivatableNotificationViewController;
 
-import java.lang.annotation.Documented;
-import java.lang.annotation.Retention;
-
-import javax.inject.Scope;
-
 import dagger.BindsInstance;
 import dagger.Subcomponent;
 
 /**
  * Dagger subcomponent for Notification related views.
  */
-@Subcomponent(modules = {})
-@NotificationRowComponent.NotificationRowScope
+@Subcomponent(modules = {ActivatableNotificationViewModule.class})
+@NotificationRowScope
 public interface NotificationRowComponent {
     /**
      * Builder for {@link NotificationRowComponent}.
@@ -46,14 +39,6 @@
     }
 
     /**
-     * Scope annotation for singleton items within the StatusBarComponent.
-     */
-    @Documented
-    @Retention(RUNTIME)
-    @Scope
-    @interface NotificationRowScope {}
-
-    /**
      * Creates a ActivatableNotificationViewController.
      */
     @NotificationRowScope
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/NotificationRowScope.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/NotificationRowScope.java
new file mode 100644
index 0000000..4555b83
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/dagger/NotificationRowScope.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row.dagger;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Scope;
+
+/**
+ * Scope annotation for singleton items within the StatusBarComponent.
+ */
+@Documented
+@Retention(RUNTIME)
+@Scope
+public @interface NotificationRowScope {}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
index 4b9976c..2eeda1f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
@@ -16,6 +16,9 @@
 
 package com.android.systemui.statusbar.notification.stack;
 
+import static android.service.notification.NotificationStats.DISMISSAL_SHADE;
+import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_NEUTRAL;
+
 import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
 import static com.android.systemui.statusbar.notification.ActivityLaunchAnimator.ExpandAnimationParameters;
 import static com.android.systemui.statusbar.notification.stack.NotificationSectionsManager.BUCKET_SILENT;
@@ -57,6 +60,7 @@
 import android.util.MathUtils;
 import android.util.Pair;
 import android.view.ContextThemeWrapper;
+import android.view.DisplayCutout;
 import android.view.InputDevice;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
@@ -79,6 +83,7 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.statusbar.IStatusBarService;
+import com.android.internal.statusbar.NotificationVisibility;
 import com.android.keyguard.KeyguardSliceView;
 import com.android.settingslib.Utils;
 import com.android.systemui.Dependency;
@@ -98,6 +103,7 @@
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.DragDownHelper.DragDownCallback;
 import com.android.systemui.statusbar.EmptyShadeView;
+import com.android.systemui.statusbar.FeatureFlags;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager.UserChangedListener;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
@@ -114,7 +120,11 @@
 import com.android.systemui.statusbar.notification.ShadeViewRefactor;
 import com.android.systemui.statusbar.notification.ShadeViewRefactor.RefactorComponent;
 import com.android.systemui.statusbar.notification.VisualStabilityManager;
+import com.android.systemui.statusbar.notification.collection.NotifCollection;
+import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
 import com.android.systemui.statusbar.notification.logging.NotificationLogger;
 import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -484,8 +494,10 @@
     private NotificationIconAreaController mIconAreaController;
     private final NotificationLockscreenUserManager mLockscreenUserManager;
     private final Rect mTmpRect = new Rect();
-    private final NotificationEntryManager mEntryManager =
-            Dependency.get(NotificationEntryManager.class);
+    private final FeatureFlags mFeatureFlags;
+    private final NotifPipeline mNotifPipeline;
+    private final NotifCollection mNotifCollection;
+    private final NotificationEntryManager mEntryManager;
     private final IStatusBarService mBarService = IStatusBarService.Stub.asInterface(
             ServiceManager.getService(Context.STATUS_BAR_SERVICE));
     @VisibleForTesting
@@ -513,6 +525,8 @@
     private float mLastSentExpandedHeight;
     private boolean mWillExpand;
 
+    private int mWaterfallTopInset;
+
     @Inject
     public NotificationStackScrollLayout(
             @Named(VIEW_CONTEXT) Context context,
@@ -529,7 +543,11 @@
             ZenModeController zenController,
             NotificationSectionsManager notificationSectionsManager,
             ForegroundServiceSectionController fgsSectionController,
-            ForegroundServiceDismissalFeatureController fgsFeatureController
+            ForegroundServiceDismissalFeatureController fgsFeatureController,
+            FeatureFlags featureFlags,
+            NotifPipeline notifPipeline,
+            NotificationEntryManager entryManager,
+            NotifCollection notifCollection
     ) {
         super(context, attrs, 0, 0);
         Resources res = getResources();
@@ -607,16 +625,26 @@
             }
         }, HIGH_PRIORITY, Settings.Secure.NOTIFICATION_DISMISS_RTL);
 
-        mEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
-            @Override
-            public void onPreEntryUpdated(NotificationEntry entry) {
-                if (entry.rowExists() && !entry.getSbn().isClearable()) {
-                    // If the row already exists, the user may have performed a dismiss action on
-                    // the notification. Since it's not clearable we should snap it back.
-                    snapViewIfNeeded(entry);
+        mFeatureFlags = featureFlags;
+        mNotifPipeline = notifPipeline;
+        mEntryManager = entryManager;
+        mNotifCollection = notifCollection;
+        if (mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
+            mNotifPipeline.addCollectionListener(new NotifCollectionListener() {
+                @Override
+                public void onEntryUpdated(NotificationEntry entry) {
+                    NotificationStackScrollLayout.this.onEntryUpdated(entry);
                 }
-            }
-        });
+            });
+        } else {
+            mEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
+                @Override
+                public void onPreEntryUpdated(NotificationEntry entry) {
+                    NotificationStackScrollLayout.this.onEntryUpdated(entry);
+                }
+            });
+        }
+
         dynamicPrivacyController.addListener(this);
         mDynamicPrivacyController = dynamicPrivacyController;
         mStatusbarStateController = statusBarStateController;
@@ -708,7 +736,7 @@
     @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
     public void updateFooter() {
         boolean showDismissView = mClearAllEnabled && hasActiveClearableNotifications(ROWS_ALL);
-        boolean showFooterView = (showDismissView || mEntryManager.hasActiveNotifications())
+        boolean showFooterView = (showDismissView || hasActiveNotifications())
                 && mStatusBarState != StatusBarState.KEYGUARD
                 && !mRemoteInputManager.getController().isRemoteInputActive();
 
@@ -1714,6 +1742,12 @@
     public WindowInsets onApplyWindowInsets(WindowInsets insets) {
         mBottomInset = insets.getSystemWindowInsetBottom();
 
+        mWaterfallTopInset = 0;
+        final DisplayCutout cutout = insets.getDisplayCutout();
+        if (cutout != null) {
+            mWaterfallTopInset = cutout.getWaterfallInsets().top;
+        }
+
         if (ANCHOR_SCROLLING) {
             // TODO
         } else {
@@ -5310,7 +5344,9 @@
 
     @ShadeViewRefactor(RefactorComponent.COORDINATOR)
     public int getMinExpansionHeight() {
-        return mShelf.getIntrinsicHeight() - (mShelf.getIntrinsicHeight() - mStatusBarHeight) / 2;
+        return mShelf.getIntrinsicHeight()
+                - (mShelf.getIntrinsicHeight() - mStatusBarHeight + mWaterfallTopInset) / 2
+                + mWaterfallTopInset;
     }
 
     @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
@@ -5481,7 +5517,7 @@
 
     @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
     public void manageNotifications(View v) {
-        Intent intent = new Intent(Settings.ACTION_ALL_APPS_NOTIFICATION_SETTINGS);
+        Intent intent = new Intent(Settings.ACTION_NOTIFICATION_HISTORY);
         mStatusBar.startActivity(intent, true, true, Intent.FLAG_ACTIVITY_SINGLE_TOP);
     }
 
@@ -5537,32 +5573,10 @@
             return;
         }
 
-        performDismissAllAnimations(viewsToHide, closeShade, () -> {
-            for (ExpandableNotificationRow rowToRemove : viewsToRemove) {
-                if (canChildBeDismissed(rowToRemove)) {
-                    if (selection == ROWS_ALL) {
-                        // TODO: This is a listener method; we shouldn't be calling it. Can we just
-                        // call performRemoveNotification as below?
-                        mEntryManager.removeNotification(
-                                rowToRemove.getEntry().getKey(),
-                                null /* ranking */,
-                                NotificationListenerService.REASON_CANCEL_ALL);
-                    } else {
-                        mEntryManager.performRemoveNotification(
-                                rowToRemove.getEntry().getSbn(),
-                                NotificationListenerService.REASON_CANCEL_ALL);
-                    }
-                } else {
-                    rowToRemove.resetTranslation();
-                }
-            }
-            if (selection == ROWS_ALL) {
-                try {
-                    mBarService.onClearAllNotifications(mLockscreenUserManager.getCurrentUserId());
-                } catch (Exception ex) {
-                }
-            }
-        });
+        performDismissAllAnimations(
+                viewsToHide,
+                closeShade,
+                () -> onDismissAllAnimationsEnd(viewsToRemove, selection));
     }
 
     private boolean includeChildInDismissAll(
@@ -6407,6 +6421,83 @@
         return false;
     }
 
+    // --------------------- NotificationEntryManager/NotifPipeline methods ------------------------
+
+    private void onEntryUpdated(NotificationEntry entry) {
+        // If the row already exists, the user may have performed a dismiss action on the
+        // notification. Since it's not clearable we should snap it back.
+        if (entry.rowExists() && !entry.getSbn().isClearable()) {
+            snapViewIfNeeded(entry);
+        }
+    }
+
+    private boolean hasActiveNotifications() {
+        if (mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
+            return mNotifPipeline.getShadeList().isEmpty();
+        } else {
+            return mEntryManager.hasActiveNotifications();
+        }
+    }
+
+    /**
+     * Called after the animations for a "clear all notifications" action has ended.
+     */
+    private void onDismissAllAnimationsEnd(
+            List<ExpandableNotificationRow> viewsToRemove,
+            @SelectedRows int selectedRows) {
+        if (mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
+            if (selectedRows == ROWS_ALL) {
+                mNotifCollection.dismissAllNotifications(mLockscreenUserManager.getCurrentUserId());
+            } else {
+                final List<Pair<NotificationEntry, DismissedByUserStats>>
+                        entriesWithRowsDismissedFromShade = new ArrayList<>();
+                final List<DismissedByUserStats> dismissalUserStats = new ArrayList<>();
+                final int numVisibleEntries = mNotifPipeline.getShadeListCount();
+                for (int i = 0; i < viewsToRemove.size(); i++) {
+                    final NotificationEntry entry = viewsToRemove.get(i).getEntry();
+                    final DismissedByUserStats stats =
+                            new DismissedByUserStats(
+                                    DISMISSAL_SHADE,
+                                    DISMISS_SENTIMENT_NEUTRAL,
+                                    NotificationVisibility.obtain(
+                                            entry.getKey(),
+                                            entry.getRanking().getRank(),
+                                            numVisibleEntries,
+                                            true,
+                                            NotificationLogger.getNotificationLocation(entry)));
+                    entriesWithRowsDismissedFromShade.add(
+                            new Pair<NotificationEntry, DismissedByUserStats>(entry, stats));
+                }
+                mNotifCollection.dismissNotifications(entriesWithRowsDismissedFromShade);
+            }
+        } else {
+            for (ExpandableNotificationRow rowToRemove : viewsToRemove) {
+                if (canChildBeDismissed(rowToRemove)) {
+                    if (selectedRows == ROWS_ALL) {
+                        // TODO: This is a listener method; we shouldn't be calling it. Can we just
+                        // call performRemoveNotification as below?
+                        mEntryManager.removeNotification(
+                                rowToRemove.getEntry().getKey(),
+                                null /* ranking */,
+                                NotificationListenerService.REASON_CANCEL_ALL);
+                    } else {
+                        mEntryManager.performRemoveNotification(
+                                rowToRemove.getEntry().getSbn(),
+                                NotificationListenerService.REASON_CANCEL_ALL);
+                    }
+                } else {
+                    rowToRemove.resetTranslation();
+                }
+            }
+            if (selectedRows == ROWS_ALL) {
+                try {
+                    mBarService.onClearAllNotifications(mLockscreenUserManager.getCurrentUserId());
+                } catch (Exception ex) {
+                }
+            }
+        }
+    }
+
     // ---------------------- DragDownHelper.OnDragDownListener ------------------------------------
 
     @ShadeViewRefactor(RefactorComponent.INPUT)
@@ -6415,8 +6506,7 @@
         /* Only ever called as a consequence of a lockscreen expansion gesture. */
         @Override
         public boolean onDraggedDown(View startingChild, int dragLengthY) {
-            if (mStatusBarState == StatusBarState.KEYGUARD
-                    && mEntryManager.hasActiveNotifications()) {
+            if (mStatusBarState == StatusBarState.KEYGUARD && hasActiveNotifications()) {
                 mLockscreenGestureLogger.write(
                         MetricsEvent.ACTION_LS_SHADE,
                         (int) (dragLengthY / mDisplayMetrics.density),
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideController.java
index 3165597..971f045 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideController.java
@@ -25,8 +25,7 @@
 
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
-
-import javax.inject.Inject;
+import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneModule;
 
 /** A controller to control all auto-hide things. */
 public class AutoHideController {
@@ -51,7 +50,9 @@
         }
     };
 
-    @Inject
+    /**
+     * Injected constructor. See {@link StatusBarPhoneModule}.
+     */
     public AutoHideController(Context context, @Main Handler handler,
             NotificationRemoteInputManager notificationRemoteInputManager,
             IWindowManager iWindowManager) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
index db692c8..745843d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
@@ -375,6 +375,7 @@
                 mDownPoint.set(ev.getX(), ev.getY());
                 mThresholdCrossed = false;
             }
+
         } else if (mAllowGesture) {
             if (!mThresholdCrossed) {
                 if (action == MotionEvent.ACTION_POINTER_DOWN) {
@@ -422,9 +423,7 @@
     }
 
     private void updateDisplaySize() {
-        mContext.getSystemService(DisplayManager.class)
-                .getDisplay(mDisplayId)
-                .getRealSize(mDisplaySize);
+        mContext.getDisplay().getRealSize(mDisplaySize);
         if (mEdgeBackPlugin != null) {
             mEdgeBackPlugin.setDisplaySize(mDisplaySize);
         }
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 c6e3fde..63fe700 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java
@@ -19,24 +19,15 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
-import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.graphics.Rect;
 import android.graphics.Region;
-import android.util.Log;
 import android.util.Pools;
-import android.view.DisplayCutout;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewTreeObserver;
-import android.view.WindowInsets;
 
 import androidx.collection.ArraySet;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.systemui.Dumpable;
 import com.android.systemui.R;
-import com.android.systemui.ScreenDecorations;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
 import com.android.systemui.statusbar.StatusBarState;
@@ -49,31 +40,27 @@
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Stack;
 
 /**
  * A implementation of HeadsUpManager for phone and car.
  */
 public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable,
-        VisualStabilityManager.Callback, OnHeadsUpChangedListener,
-        ConfigurationController.ConfigurationListener, StateListener {
+        VisualStabilityManager.Callback, OnHeadsUpChangedListener {
     private static final String TAG = "HeadsUpManagerPhone";
 
     @VisibleForTesting
     final int mExtensionTime;
-    private final StatusBarStateController mStatusBarStateController;
     private final KeyguardBypassController mBypassController;
+    private final NotificationGroupManager mGroupManager;
+    private final List<OnHeadsUpPhoneListenerChange> mHeadsUpPhoneListeners = new ArrayList<>();
     private final int mAutoHeadsUpNotificationDecay;
-    private View mNotificationShadeWindowView;
-    private NotificationGroupManager mGroupManager;
     private VisualStabilityManager mVisualStabilityManager;
-    private StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
     private boolean mReleaseOnExpandFinish;
 
-    private int mStatusBarHeight;
-    private int mHeadsUpInset;
-    private int mDisplayCutoutTouchableRegionSize;
     private boolean mTrackingHeadsUp;
     private HashSet<String> mSwipedOutKeys = new HashSet<>();
     private HashSet<NotificationEntry> mEntriesToRemoveAfterExpand = new HashSet<>();
@@ -81,12 +68,13 @@
     private ArraySet<NotificationEntry> mEntriesToRemoveWhenReorderingAllowed
             = new ArraySet<>();
     private boolean mIsExpanded;
-    private int[] mTmpTwoArray = new int[2];
     private boolean mHeadsUpGoingAway;
     private int mStatusBarState;
-    private Region mTouchableRegion = new Region();
-
     private AnimationStateHandler mAnimationStateHandler;
+    private int mHeadsUpInset;
+
+    // Used for determining the region for touch interaction
+    private final Region mTouchableRegion = new Region();
 
     private final Pools.Pool<HeadsUpEntryPhone> mEntryPool = new Pools.Pool<HeadsUpEntryPhone>() {
         private Stack<HeadsUpEntryPhone> mPoolObjects = new Stack<>();
@@ -111,76 +99,96 @@
 
     public HeadsUpManagerPhone(@NonNull final Context context,
             StatusBarStateController statusBarStateController,
-            KeyguardBypassController bypassController) {
+            KeyguardBypassController bypassController,
+            NotificationGroupManager groupManager,
+            ConfigurationController configurationController) {
         super(context);
         Resources resources = mContext.getResources();
         mExtensionTime = resources.getInteger(R.integer.ambient_notification_extension_time);
         mAutoHeadsUpNotificationDecay = resources.getInteger(
                 R.integer.auto_heads_up_notification_decay);
-        mStatusBarStateController = statusBarStateController;
-        mStatusBarStateController.addCallback(this);
+        statusBarStateController.addCallback(mStatusBarStateListener);
         mBypassController = bypassController;
-
-        initResources();
-    }
-
-    public void setUp(@NonNull View notificationShadeWindowView,
-            @NonNull NotificationGroupManager groupManager,
-            @NonNull StatusBar bar,
-            @NonNull VisualStabilityManager visualStabilityManager) {
-        mNotificationShadeWindowView = notificationShadeWindowView;
-        mStatusBarTouchableRegionManager = new StatusBarTouchableRegionManager(this, bar,
-                notificationShadeWindowView);
         mGroupManager = groupManager;
-        mVisualStabilityManager = visualStabilityManager;
 
-        addListener(new OnHeadsUpChangedListener() {
+        updateResources();
+        configurationController.addCallback(new ConfigurationController.ConfigurationListener() {
             @Override
-            public void onHeadsUpPinnedModeChanged(boolean hasPinnedNotification) {
-                if (Log.isLoggable(TAG, Log.WARN)) {
-                    Log.w(TAG, "onHeadsUpPinnedModeChanged");
-                }
-                mStatusBarTouchableRegionManager.updateTouchableRegion();
+            public void onDensityOrFontScaleChanged() {
+                updateResources();
+            }
+
+            @Override
+            public void onOverlayChanged() {
+                updateResources();
             }
         });
     }
 
+    void setup(VisualStabilityManager visualStabilityManager) {
+        mVisualStabilityManager = visualStabilityManager;
+    }
+
     public void setAnimationStateHandler(AnimationStateHandler handler) {
         mAnimationStateHandler = handler;
     }
 
-    private void initResources() {
+    private void updateResources() {
         Resources resources = mContext.getResources();
-        mStatusBarHeight = resources.getDimensionPixelSize(
-                com.android.internal.R.dimen.status_bar_height);
-        mHeadsUpInset = mStatusBarHeight + resources.getDimensionPixelSize(
-                R.dimen.heads_up_status_bar_padding);
-        mDisplayCutoutTouchableRegionSize = resources.getDimensionPixelSize(
-                com.android.internal.R.dimen.display_cutout_touchable_region_size);
-    }
-
-    @Override
-    public void onDensityOrFontScaleChanged() {
-        super.onDensityOrFontScaleChanged();
-        initResources();
-    }
-
-    @Override
-    public void onOverlayChanged() {
-        initResources();
+        mHeadsUpInset =
+                resources.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height)
+                        + resources.getDimensionPixelSize(R.dimen.heads_up_status_bar_padding);
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////
     //  Public methods:
 
     /**
+     * Add a listener to receive callbacks onHeadsUpGoingAway
+     */
+    void addHeadsUpPhoneListener(OnHeadsUpPhoneListenerChange listener) {
+        mHeadsUpPhoneListeners.add(listener);
+    }
+
+    /**
+     * Gets the touchable region needed for heads up notifications. Returns null if no touchable
+     * region is required (ie: no heads up notification currently exists).
+     */
+    @Nullable Region getTouchableRegion() {
+        NotificationEntry topEntry = getTopEntry();
+
+        // This call could be made in an inconsistent state while the pinnedMode hasn't been
+        // updated yet, but callbacks leading out of the headsUp manager, querying it. Let's
+        // therefore also check if the topEntry is null.
+        if (!hasPinnedHeadsUp() || topEntry == null) {
+            return null;
+        } else {
+            if (topEntry.isChildInGroup()) {
+                final NotificationEntry groupSummary =
+                        mGroupManager.getGroupSummary(topEntry.getSbn());
+                if (groupSummary != null) {
+                    topEntry = groupSummary;
+                }
+            }
+            ExpandableNotificationRow topRow = topEntry.getRow();
+            int[] tmpArray = new int[2];
+            topRow.getLocationOnScreen(tmpArray);
+            int minX = tmpArray[0];
+            int maxX = tmpArray[0] + topRow.getWidth();
+            int height = topRow.getIntrinsicHeight();
+            mTouchableRegion.set(minX, 0, maxX, mHeadsUpInset + height);
+            return mTouchableRegion;
+        }
+    }
+
+    /**
      * Decides whether a click is invalid for a notification, i.e it has not been shown long enough
      * that a user might have consciously clicked on it.
      *
      * @param key the key of the touched notification
      * @return whether the touch is invalid and should be discarded
      */
-    public boolean shouldSwallowClick(@NonNull String key) {
+    boolean shouldSwallowClick(@NonNull String key) {
         HeadsUpManager.HeadsUpEntry entry = getHeadsUpEntry(key);
         return entry != null && mClock.currentTimeMillis() < entry.mPostTime;
     }
@@ -213,39 +221,12 @@
      *
      * @param isExpanded True to notify expanded, false to notify collapsed.
      */
-    public void setIsPanelExpanded(boolean isExpanded) {
+    void setIsPanelExpanded(boolean isExpanded) {
         if (isExpanded != mIsExpanded) {
             mIsExpanded = isExpanded;
             if (isExpanded) {
                 mHeadsUpGoingAway = false;
             }
-            mStatusBarTouchableRegionManager.setIsStatusBarExpanded(isExpanded);
-            mStatusBarTouchableRegionManager.updateTouchableRegion();
-        }
-    }
-
-    @Override
-    public void onStateChanged(int newState) {
-        boolean wasKeyguard = mStatusBarState == StatusBarState.KEYGUARD;
-        boolean isKeyguard = newState == StatusBarState.KEYGUARD;
-        mStatusBarState = newState;
-        if (wasKeyguard && !isKeyguard && mKeysToRemoveWhenLeavingKeyguard.size() != 0) {
-            String[] keys = mKeysToRemoveWhenLeavingKeyguard.toArray(new String[0]);
-            for (String key : keys) {
-                removeAlertEntry(key);
-            }
-            mKeysToRemoveWhenLeavingKeyguard.clear();
-        }
-    }
-
-    @Override
-    public void onDozingChanged(boolean isDozing) {
-        if (!isDozing) {
-            // 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 */);
-            }
         }
     }
 
@@ -262,18 +243,16 @@
      * Set that we are exiting the headsUp pinned mode, but some notifications might still be
      * animating out. This is used to keep the touchable regions in a sane state.
      */
-    public void setHeadsUpGoingAway(boolean headsUpGoingAway) {
+    void setHeadsUpGoingAway(boolean headsUpGoingAway) {
         if (headsUpGoingAway != mHeadsUpGoingAway) {
             mHeadsUpGoingAway = headsUpGoingAway;
-            if (!headsUpGoingAway) {
-                mStatusBarTouchableRegionManager.updateTouchableRegionAfterLayout();
-            } else {
-                mStatusBarTouchableRegionManager.updateTouchableRegion();
+            for (OnHeadsUpPhoneListenerChange listener : mHeadsUpPhoneListeners) {
+                listener.onHeadsUpGoingAwayStateChanged(headsUpGoingAway);
             }
         }
     }
 
-    public boolean isHeadsUpGoingAway() {
+    boolean isHeadsUpGoingAway() {
         return mHeadsUpGoingAway;
     }
 
@@ -346,63 +325,6 @@
         dumpInternal(fd, pw, args);
     }
 
-    /**
-     * Update touch insets to include any area needed for touching a heads up notification.
-     *
-     * @param info Insets that will include heads up notification touch area after execution.
-     */
-    @Nullable
-    public void updateTouchableRegion(ViewTreeObserver.InternalInsetsInfo info) {
-        info.setTouchableInsets(ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION);
-        info.touchableRegion.set(calculateTouchableRegion());
-    }
-
-    public Region calculateTouchableRegion() {
-        NotificationEntry topEntry = getTopEntry();
-        // This call could be made in an inconsistent state while the pinnedMode hasn't been
-        // updated yet, but callbacks leading out of the headsUp manager, querying it. Let's
-        // therefore also check if the topEntry is null.
-        if (!hasPinnedHeadsUp() || topEntry == null) {
-            mTouchableRegion.set(0, 0, mNotificationShadeWindowView.getWidth(), mStatusBarHeight);
-            updateRegionForNotch(mTouchableRegion);
-
-        } else {
-            if (topEntry.isChildInGroup()) {
-                final NotificationEntry groupSummary =
-                        mGroupManager.getGroupSummary(topEntry.getSbn());
-                if (groupSummary != null) {
-                    topEntry = groupSummary;
-                }
-            }
-            ExpandableNotificationRow topRow = topEntry.getRow();
-            topRow.getLocationOnScreen(mTmpTwoArray);
-            int minX = mTmpTwoArray[0];
-            int maxX = mTmpTwoArray[0] + topRow.getWidth();
-            int height = topRow.getIntrinsicHeight();
-            mTouchableRegion.set(minX, 0, maxX, mHeadsUpInset + height);
-        }
-        return mTouchableRegion;
-    }
-
-    private void updateRegionForNotch(Region region) {
-        WindowInsets windowInsets = mNotificationShadeWindowView.getRootWindowInsets();
-        if (windowInsets == null) {
-            Log.w(TAG, "StatusBarWindowView is not attached.");
-            return;
-        }
-        DisplayCutout cutout = windowInsets.getDisplayCutout();
-        if (cutout == null) {
-            return;
-        }
-
-        // Expand touchable region such that we also catch touches that just start below the notch
-        // area.
-        Rect bounds = new Rect();
-        ScreenDecorations.DisplayCutoutView.boundsFromDirection(cutout, Gravity.TOP, bounds);
-        bounds.offset(0, mDisplayCutoutTouchableRegionSize);
-        region.union(bounds);
-    }
-
     @Override
     public boolean shouldExtendLifetime(NotificationEntry entry) {
         // We should not defer the removal if reordering isn't allowed since otherwise
@@ -411,11 +333,6 @@
         return mVisualStabilityManager.isReorderingAllowed() && super.shouldExtendLifetime(entry);
     }
 
-    @Override
-    public void onConfigChanged(Configuration newConfig) {
-        initResources();
-    }
-
     ///////////////////////////////////////////////////////////////////////////////////////////////
     //  VisualStabilityManager.Callback overrides:
 
@@ -522,8 +439,7 @@
                         // time out anyway
                         && !entry.showingPulsing()) {
                     mEntriesToRemoveWhenReorderingAllowed.add(entry);
-                    mVisualStabilityManager.addReorderingAllowedCallback(
-                            HeadsUpManagerPhone.this);
+                    mVisualStabilityManager.addReorderingAllowedCallback(HeadsUpManagerPhone.this);
                 } else if (mTrackingHeadsUp) {
                     mEntriesToRemoveAfterExpand.add(entry);
                 } else if (mIsAutoHeadsUp && mStatusBarState == StatusBarState.KEYGUARD) {
@@ -626,4 +542,42 @@
     public interface AnimationStateHandler {
         void setHeadsUpGoingAwayAnimationsAllowed(boolean allowed);
     }
+
+    /**
+     * Listener to register for HeadsUpNotification Phone changes.
+     */
+    public interface OnHeadsUpPhoneListenerChange {
+        /**
+         * Called when a heads up notification is 'going away' or no longer 'going away'.
+         * See {@link HeadsUpManagerPhone#setHeadsUpGoingAway}.
+         */
+        void onHeadsUpGoingAwayStateChanged(boolean headsUpGoingAway);
+    }
+
+    private final StateListener mStatusBarStateListener = new StateListener() {
+        @Override
+        public void onStateChanged(int newState) {
+            boolean wasKeyguard = mStatusBarState == StatusBarState.KEYGUARD;
+            boolean isKeyguard = newState == StatusBarState.KEYGUARD;
+            mStatusBarState = newState;
+            if (wasKeyguard && !isKeyguard && mKeysToRemoveWhenLeavingKeyguard.size() != 0) {
+                String[] keys = mKeysToRemoveWhenLeavingKeyguard.toArray(new String[0]);
+                for (String key : keys) {
+                    removeAlertEntry(key);
+                }
+                mKeysToRemoveWhenLeavingKeyguard.clear();
+            }
+        }
+
+        @Override
+        public void onDozingChanged(boolean isDozing) {
+            if (!isDozing) {
+                // 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 */);
+                }
+            }
+        }
+    };
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
index d3e44ea..ee31300 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
@@ -492,7 +492,7 @@
                     try {
                         result = ActivityTaskManager.getService().startActivityAsUser(
                                 null, getContext().getBasePackageName(),
-                                intent,
+                                getContext().getFeatureId(), intent,
                                 intent.resolveTypeIfNeeded(getContext().getContentResolver()),
                                 null, null, 0, Intent.FLAG_ACTIVITY_NEW_TASK, null, o.toBundle(),
                                 UserHandle.CURRENT.getIdentifier());
@@ -643,9 +643,12 @@
         if (previewBefore != null) {
             mPreviewContainer.removeView(previewBefore);
         }
+
         if (mLeftIsVoiceAssist) {
-            mLeftPreview = mPreviewInflater.inflatePreviewFromService(
-                    Dependency.get(AssistManager.class).getVoiceInteractorComponentName());
+            if (Dependency.get(AssistManager.class).getVoiceInteractorComponentName() != null) {
+                mLeftPreview = mPreviewInflater.inflatePreviewFromService(
+                        Dependency.get(AssistManager.class).getVoiceInteractorComponentName());
+            }
         } else {
             mLeftPreview = mPreviewInflater.inflatePreview(mLeftButton.getIntent());
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
index b24942a..b46ca40 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
@@ -102,6 +102,9 @@
      */
     private int mCutoutSideNudge = 0;
 
+    private DisplayCutout mDisplayCutout;
+    private int mRoundedCornerPadding = 0;
+
     public KeyguardStatusBarView(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
@@ -159,9 +162,15 @@
                 getResources().getDimensionPixelSize(R.dimen.keyguard_carrier_text_margin));
         mCarrierLabel.setLayoutParams(lp);
 
-        lp = (MarginLayoutParams) getLayoutParams();
+        updateKeyguardStatusBarHeight();
+    }
+
+    private void updateKeyguardStatusBarHeight() {
+        final int waterfallTop =
+                mDisplayCutout == null ? 0 : mDisplayCutout.getWaterfallInsets().top;
+        MarginLayoutParams lp =  (MarginLayoutParams) getLayoutParams();
         lp.height =  getResources().getDimensionPixelSize(
-                R.dimen.status_bar_header_height_keyguard);
+                R.dimen.status_bar_header_height_keyguard) + waterfallTop;
         setLayoutParams(lp);
     }
 
@@ -175,6 +184,8 @@
                 R.dimen.display_cutout_margin_consumption);
         mShowPercentAvailable = getContext().getResources().getBoolean(
                 com.android.internal.R.bool.config_battery_percentage_setting_available);
+        mRoundedCornerPadding = res.getDimensionPixelSize(
+                R.dimen.rounded_corner_content_padding);
     }
 
     private void updateVisibilities() {
@@ -225,23 +236,26 @@
     }
 
     private boolean updateLayoutConsideringCutout() {
-        DisplayCutout dc = getRootWindowInsets().getDisplayCutout();
+        mDisplayCutout = getRootWindowInsets().getDisplayCutout();
+        updateKeyguardStatusBarHeight();
+
         Pair<Integer, Integer> cornerCutoutMargins =
-                PhoneStatusBarView.cornerCutoutMargins(dc, getDisplay());
-        updateCornerCutoutPadding(cornerCutoutMargins);
-        if (dc == null || cornerCutoutMargins != null) {
+                StatusBarWindowView.cornerCutoutMargins(mDisplayCutout, getDisplay());
+        updatePadding(cornerCutoutMargins);
+        if (mDisplayCutout == null || cornerCutoutMargins != null) {
             return updateLayoutParamsNoCutout();
         } else {
-            return updateLayoutParamsForCutout(dc);
+            return updateLayoutParamsForCutout();
         }
     }
 
-    private void updateCornerCutoutPadding(Pair<Integer, Integer> cornerCutoutMargins) {
-        if (cornerCutoutMargins != null) {
-            setPadding(cornerCutoutMargins.first, 0, cornerCutoutMargins.second, 0);
-        } else {
-            setPadding(0, 0, 0, 0);
-        }
+    private void updatePadding(Pair<Integer, Integer> cornerCutoutMargins) {
+        final int waterfallTop =
+                mDisplayCutout == null ? 0 : mDisplayCutout.getWaterfallInsets().top;
+        Pair<Integer, Integer> padding =
+                StatusBarWindowView.paddingNeededForCutoutAndRoundedCorner(
+                        mDisplayCutout, cornerCutoutMargins, mRoundedCornerPadding);
+        setPadding(padding.first, waterfallTop, padding.second, 0);
     }
 
     private boolean updateLayoutParamsNoCutout() {
@@ -268,7 +282,7 @@
         return true;
     }
 
-    private boolean updateLayoutParamsForCutout(DisplayCutout dc) {
+    private boolean updateLayoutParamsForCutout() {
         if (mLayoutState == LAYOUT_CUTOUT) {
             return false;
         }
@@ -279,7 +293,7 @@
         }
 
         Rect bounds = new Rect();
-        boundsFromDirection(dc, Gravity.TOP, bounds);
+        boundsFromDirection(mDisplayCutout, Gravity.TOP, bounds);
 
         mCutoutSpace.setVisibility(View.VISIBLE);
         RelativeLayout.LayoutParams lp = (LayoutParams) mCutoutSpace.getLayoutParams();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
index 9e64748..fd8c71b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
@@ -269,6 +269,17 @@
         }
     };
 
+    private final DeviceConfig.OnPropertiesChangedListener mOnPropertiesChangedListener =
+            new DeviceConfig.OnPropertiesChangedListener() {
+        @Override
+        public void onPropertiesChanged(DeviceConfig.Properties properties) {
+            if (properties.getKeyset().contains(NAV_BAR_HANDLE_FORCE_OPAQUE)) {
+                mForceNavBarHandleOpaque = properties.getBoolean(
+                        NAV_BAR_HANDLE_FORCE_OPAQUE, /* defaultValue = */ true);
+            }
+        }
+    };
+
     @Inject
     public NavigationBarFragment(AccessibilityManagerWrapper accessibilityManagerWrapper,
             DeviceProvisionedController deviceProvisionedController, MetricsLogger metricsLogger,
@@ -298,21 +309,6 @@
         mDivider = divider;
         mRecentsOptional = recentsOptional;
         mHandler = mainHandler;
-
-        mForceNavBarHandleOpaque = DeviceConfig.getBoolean(
-                DeviceConfig.NAMESPACE_SYSTEMUI,
-                NAV_BAR_HANDLE_FORCE_OPAQUE,
-                /* defaultValue = */ true);
-        DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI, mHandler::post,
-                new DeviceConfig.OnPropertiesChangedListener() {
-                    @Override
-                    public void onPropertiesChanged(DeviceConfig.Properties properties) {
-                        if (properties.getKeyset().contains(NAV_BAR_HANDLE_FORCE_OPAQUE)) {
-                            mForceNavBarHandleOpaque = properties.getBoolean(
-                                    NAV_BAR_HANDLE_FORCE_OPAQUE, /* defaultValue = */ true);
-                        }
-                    }
-                });
     }
 
     // ----- Fragment Lifecycle Callbacks -----
@@ -338,6 +334,13 @@
 
         // Respect the latest disabled-flags.
         mCommandQueue.recomputeDisableFlags(mDisplayId, false);
+
+        mForceNavBarHandleOpaque = DeviceConfig.getBoolean(
+                DeviceConfig.NAMESPACE_SYSTEMUI,
+                NAV_BAR_HANDLE_FORCE_OPAQUE,
+                /* defaultValue = */ true);
+        DeviceConfig.addOnPropertiesChangedListener(
+                DeviceConfig.NAMESPACE_SYSTEMUI, mHandler::post, mOnPropertiesChangedListener);
     }
 
     @Override
@@ -346,6 +349,8 @@
         mNavigationModeController.removeListener(this);
         mAccessibilityManagerWrapper.removeCallback(mAccessibilityListener);
         mContentResolver.unregisterContentObserver(mAssistContentObserver);
+
+        DeviceConfig.removeOnPropertiesChangedListener(mOnPropertiesChangedListener);
     }
 
     @Override
@@ -951,6 +956,8 @@
     private boolean onAccessibilityLongClick(View v) {
         Intent intent = new Intent(AccessibilityManager.ACTION_CHOOSE_ACCESSIBILITY_BUTTON);
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+        intent.putExtra(AccessibilityManager.EXTRA_SHORTCUT_TYPE,
+                AccessibilityManager.ACCESSIBILITY_BUTTON);
         v.getContext().startActivityAsUser(intent, UserHandle.CURRENT);
         return true;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index ba9ba6c..84aecd4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -63,7 +63,6 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.systemui.Dependency;
-import com.android.systemui.DockedStackExistsListener;
 import com.android.systemui.Interpolators;
 import com.android.systemui.R;
 import com.android.systemui.assist.AssistHandleViewController;
@@ -75,6 +74,7 @@
 import com.android.systemui.shared.system.ActivityManagerWrapper;
 import com.android.systemui.shared.system.QuickStepContract;
 import com.android.systemui.shared.system.WindowManagerWrapper;
+import com.android.systemui.stackdivider.Divider;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.NavigationBarController;
 import com.android.systemui.statusbar.policy.DeadZone;
@@ -770,7 +770,14 @@
 
     public void updatePanelSystemUiStateFlags() {
         int displayId = mContext.getDisplayId();
+        if (SysUiState.DEBUG) {
+            Log.d(TAG, "Updating panel sysui state flags: panelView=" + mPanelView);
+        }
         if (mPanelView != null) {
+            if (SysUiState.DEBUG) {
+                Log.d(TAG, "Updating panel sysui state flags: fullyExpanded="
+                        + mPanelView.isFullyExpanded() + " inQs=" + mPanelView.isInSettings());
+            }
             mSysUiFlagContainer.setFlag(SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED,
                     mPanelView.isFullyExpanded() && !mPanelView.isInSettings())
                     .setFlag(SYSUI_STATE_QUICK_SETTINGS_EXPANDED,
@@ -862,7 +869,8 @@
 
         getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener);
 
-        DockedStackExistsListener.register(mDockedListener);
+        Divider divider = Dependency.get(Divider.class);
+        divider.registerInSplitScreenListener(mDockedListener);
         updateOrientationViews();
         reloadNavIcons();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java
index 826af66..67e7f23 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java
@@ -73,7 +73,7 @@
 public class NavigationModeController implements Dumpable {
 
     private static final String TAG = NavigationModeController.class.getSimpleName();
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = true;
 
     public interface ModeChangedListener {
         void onNavigationModeChanged(int mode);
@@ -248,8 +248,7 @@
                     Secure.NAVIGATION_MODE, String.valueOf(mode));
         });
         if (DEBUG) {
-            Log.e(TAG, "updateCurrentInteractionMode: mode=" + mMode
-                    + " contextUser=" + mCurrentUserContext.getUserId());
+            Log.e(TAG, "updateCurrentInteractionMode: mode=" + mMode);
             dumpAssetPaths(mCurrentUserContext);
         }
 
@@ -293,6 +292,7 @@
                     0 /* flags */, UserHandle.of(userId));
         } catch (PackageManager.NameNotFoundException e) {
             // Never happens for the sysui package
+            Log.e(TAG, "Failed to create package context", e);
             return null;
         }
     }
@@ -404,11 +404,17 @@
             defaultOverlays = "failed_to_fetch";
         }
         pw.println("  defaultOverlays=" + defaultOverlays);
+        pw.println("  restoreGesturalNavMode:");
+        for (int i = 0; i < mRestoreGesturalNavBarMode.size(); i++) {
+            pw.println("    userId=" + mRestoreGesturalNavBarMode.keyAt(i)
+                    + " shouldRestore=" + mRestoreGesturalNavBarMode.valueAt(i));
+        }
         dumpAssetPaths(mCurrentUserContext);
     }
 
     private void dumpAssetPaths(Context context) {
-        Log.d(TAG, "assetPaths=");
+        Log.d(TAG, "  contextUser=" + mCurrentUserContext.getUserId());
+        Log.d(TAG, "  assetPaths=");
         ApkAssets[] assets = context.getResources().getAssets().getApkAssets();
         for (ApkAssets a : assets) {
             Log.d(TAG, "    " + a.getAssetPath());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupAlertTransferHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupAlertTransferHelper.java
index bdca9a4..d709e02 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupAlertTransferHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupAlertTransferHelper.java
@@ -36,21 +36,18 @@
 import com.android.systemui.statusbar.notification.row.RowContentBindStage;
 import com.android.systemui.statusbar.phone.NotificationGroupManager.NotificationGroup;
 import com.android.systemui.statusbar.phone.NotificationGroupManager.OnGroupChangeListener;
+import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneModule;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
 import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
 
 import java.util.ArrayList;
 import java.util.Objects;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
 /**
  * A helper class dealing with the alert interactions between {@link NotificationGroupManager} and
  * {@link HeadsUpManager}. In particular, this class deals with keeping
  * the correct notification in a group alerting based off the group suppression.
  */
-@Singleton
 public class NotificationGroupAlertTransferHelper implements OnHeadsUpChangedListener,
         StateListener {
 
@@ -76,7 +73,9 @@
 
     private boolean mIsDozing;
 
-    @Inject
+    /**
+     * Injected constructor. See {@link StatusBarPhoneModule}.
+     */
     public NotificationGroupAlertTransferHelper(RowContentBindStage bindStage) {
         Dependency.get(StatusBarStateController.class).addCallback(this);
         mRowContentBindStage = bindStage;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
index d2186f9..fb7976f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
@@ -453,10 +453,11 @@
             KeyguardUpdateMonitor keyguardUpdateMonitor, MetricsLogger metricsLogger,
             ActivityManager activityManager, ZenModeController zenModeController,
             ConfigurationController configurationController,
-            FlingAnimationUtils.Builder flingAnimationUtilsBuilder) {
+            FlingAnimationUtils.Builder flingAnimationUtilsBuilder,
+            StatusBarTouchableRegionManager statusBarTouchableRegionManager) {
         super(view, falsingManager, dozeLog, keyguardStateController,
                 (SysuiStatusBarStateController) statusBarStateController, vibratorHelper,
-                latencyTracker, flingAnimationUtilsBuilder);
+                latencyTracker, flingAnimationUtilsBuilder, statusBarTouchableRegionManager);
         mView = view;
         mMetricsLogger = metricsLogger;
         mActivityManager = activityManager;
@@ -704,9 +705,9 @@
 
     private Rect calculateGestureExclusionRect() {
         Rect exclusionRect = null;
-        Region touchableRegion = mHeadsUpManager.calculateTouchableRegion();
+        Region touchableRegion = mStatusBarTouchableRegionManager.calculateTouchableRegion();
         if (isFullyCollapsed() && touchableRegion != null) {
-            // Note: The heads up manager also calculates the non-pinned touchable region
+            // Note: The manager also calculates the non-pinned touchable region
             exclusionRect = touchableRegion.getBounds();
         }
         return exclusionRect != null ? exclusionRect : EMPTY_RECT;
@@ -1914,6 +1915,7 @@
         boolean isExpanded = !isFullyCollapsed() || mExpectingSynthesizedDown;
         if (mPanelExpanded != isExpanded) {
             mHeadsUpManager.setIsPanelExpanded(isExpanded);
+            mStatusBarTouchableRegionManager.setPanelExpanded(isExpanded);
             mStatusBar.setPanelExpanded(isExpanded);
             mPanelExpanded = isExpanded;
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java
index 10b68b9..2dd42c2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java
@@ -18,8 +18,8 @@
 
 import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
-
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_BEHAVIOR_CONTROLLED;
+
 import static com.android.systemui.DejankUtils.whitelistIpcs;
 import static com.android.systemui.statusbar.NotificationRemoteInputManager.ENABLE_REMOTE_INPUT;
 
@@ -40,6 +40,7 @@
 import android.view.WindowManager;
 import android.view.WindowManager.LayoutParams;
 
+import com.android.systemui.DumpController;
 import com.android.systemui.Dumpable;
 import com.android.systemui.R;
 import com.android.systemui.colorextraction.SysuiColorExtractor;
@@ -48,7 +49,6 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
 import com.android.systemui.statusbar.RemoteInputController.Callback;
 import com.android.systemui.statusbar.StatusBarState;
-import com.android.systemui.statusbar.SuperStatusBarViewFactory;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
@@ -96,7 +96,6 @@
             mCallbacks = Lists.newArrayList();
 
     private final SysuiColorExtractor mColorExtractor;
-    private final SuperStatusBarViewFactory mSuperStatusBarViewFactory;
 
     @Inject
     public NotificationShadeWindowController(Context context, WindowManager windowManager,
@@ -104,7 +103,7 @@
             StatusBarStateController statusBarStateController,
             ConfigurationController configurationController,
             KeyguardBypassController keyguardBypassController, SysuiColorExtractor colorExtractor,
-            SuperStatusBarViewFactory superStatusBarViewFactory) {
+            DumpController dumpController) {
         mContext = context;
         mWindowManager = windowManager;
         mActivityManager = activityManager;
@@ -114,8 +113,7 @@
         mLpChanged = new LayoutParams();
         mKeyguardBypassController = keyguardBypassController;
         mColorExtractor = colorExtractor;
-        mSuperStatusBarViewFactory = superStatusBarViewFactory;
-        mNotificationShadeView = mSuperStatusBarViewFactory.getNotificationShadeWindowView();
+        dumpController.registerDumpable(this);
 
         mLockScreenDisplayTimeout = context.getResources()
                 .getInteger(R.integer.config_lockScreenDisplayTimeout);
@@ -194,6 +192,10 @@
         onThemeChanged();
     }
 
+    public void setNotificationShadeView(ViewGroup view) {
+        mNotificationShadeView = view;
+    }
+
     public ViewGroup getNotificationShadeView() {
         return mNotificationShadeView;
     }
@@ -595,7 +597,7 @@
     }
 
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        pw.println("StatusBarWindowController:");
+        pw.println(TAG + ":");
         pw.println("  mKeyguardDisplayMode=" + mKeyguardDisplayMode);
         pw.println(mCurrentState);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowView.java
index 7650a3a..bc80a1a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowView.java
@@ -88,33 +88,11 @@
             boolean paddingChanged = insets.top != getPaddingTop()
                     || insets.bottom != getPaddingBottom();
 
-            int rightCutout = 0;
-            int leftCutout = 0;
-            DisplayCutout displayCutout = getRootWindowInsets().getDisplayCutout();
-            if (displayCutout != null) {
-                leftCutout = displayCutout.getSafeInsetLeft();
-                rightCutout = displayCutout.getSafeInsetRight();
-            }
-
-            int targetLeft = Math.max(insets.left, leftCutout);
-            int targetRight = Math.max(insets.right, rightCutout);
-
-            // Super-special right inset handling, because scrims and backdrop need to ignore it.
-            if (targetRight != mRightInset || targetLeft != mLeftInset) {
-                mRightInset = targetRight;
-                mLeftInset = targetLeft;
-                applyMargins();
-            }
             // Drop top inset, and pass through bottom inset.
             if (paddingChanged) {
                 setPadding(0, 0, 0, 0);
             }
         } else {
-            if (mRightInset != 0 || mLeftInset != 0) {
-                mRightInset = 0;
-                mLeftInset = 0;
-                applyMargins();
-            }
             boolean changed = getPaddingLeft() != 0
                     || getPaddingRight() != 0
                     || getPaddingTop() != 0
@@ -123,6 +101,17 @@
                 setPadding(0, 0, 0, 0);
             }
         }
+
+        mLeftInset = 0;
+        mRightInset = 0;
+        DisplayCutout displayCutout = getRootWindowInsets().getDisplayCutout();
+        if (displayCutout != null) {
+            mLeftInset = displayCutout.getSafeInsetLeft();
+            mRightInset = displayCutout.getSafeInsetRight();
+        }
+        mLeftInset = Math.max(insets.left, mLeftInset);
+        mRightInset = Math.max(insets.right, mRightInset);
+        applyMargins();
         return windowInsets;
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java
index ab1c8ad..8729e04 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java
@@ -45,7 +45,7 @@
 import com.android.systemui.statusbar.DragDownHelper;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.PulseExpansionHandler;
-import com.android.systemui.statusbar.StatusBarWindowBlurController;
+import com.android.systemui.statusbar.NotificationShadeWindowBlurController;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.notification.DynamicPrivacyController;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
@@ -81,7 +81,7 @@
     private final CommandQueue mCommandQueue;
     private final NotificationShadeWindowView mView;
     private final ShadeController mShadeController;
-    private final StatusBarWindowBlurController mBlurController;
+    private final NotificationShadeWindowBlurController mBlurController;
 
     private GestureDetector mGestureDetector;
     private View mBrightnessMirror;
@@ -123,7 +123,7 @@
             CommandQueue commandQueue,
             ShadeController shadeController,
             DockManager dockManager,
-            @Nullable StatusBarWindowBlurController blurController,
+            @Nullable NotificationShadeWindowBlurController blurController,
             NotificationShadeWindowView statusBarWindowView,
             NotificationPanelViewController notificationPanelViewController) {
         mInjectionInflationController = injectionInflationController;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java
index af46f7b..30367ed 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java
@@ -73,6 +73,7 @@
 
     protected StatusBar mStatusBar;
     protected HeadsUpManagerPhone mHeadsUpManager;
+    protected final StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
 
     private float mPeekHeight;
     private float mHintDistance;
@@ -206,7 +207,9 @@
             FalsingManager falsingManager, DozeLog dozeLog,
             KeyguardStateController keyguardStateController,
             SysuiStatusBarStateController statusBarStateController, VibratorHelper vibratorHelper,
-            LatencyTracker latencyTracker, FlingAnimationUtils.Builder flingAnimationUtilsBuilder) {
+            LatencyTracker latencyTracker,
+            FlingAnimationUtils.Builder flingAnimationUtilsBuilder,
+            StatusBarTouchableRegionManager statusBarTouchableRegionManager) {
         mView = view;
         mView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
             @Override
@@ -251,6 +254,7 @@
                 R.bool.config_enableNotificationShadeDrag);
         mVibratorHelper = vibratorHelper;
         mVibrateOnOpening = mResources.getBoolean(R.bool.config_vibrateOnIconAnimation);
+        mStatusBarTouchableRegionManager = statusBarTouchableRegionManager;
     }
 
     protected void loadDimens() {
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 41d8968..1ab36c5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -43,6 +43,7 @@
 import com.android.systemui.dagger.qualifiers.UiBackground;
 import com.android.systemui.qs.tiles.DndTile;
 import com.android.systemui.qs.tiles.RotationLockTile;
+import com.android.systemui.screenrecord.RecordingController;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.policy.BluetoothController;
 import com.android.systemui.statusbar.policy.CastController;
@@ -76,7 +77,8 @@
                 ZenModeController.Callback,
                 DeviceProvisionedListener,
                 KeyguardStateController.Callback,
-                LocationController.LocationChangeCallback {
+                LocationController.LocationChangeCallback,
+                RecordingController.RecordingStateChangeCallback {
     private static final String TAG = "PhoneStatusBarPolicy";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
@@ -98,6 +100,7 @@
     private final String mSlotMicrophone;
     private final String mSlotCamera;
     private final String mSlotSensorsOff;
+    private final String mSlotScreenRecord;
 
     private final Context mContext;
     private final Handler mHandler = new Handler();
@@ -116,6 +119,7 @@
     private final LocationController mLocationController;
     private final Executor mUiBgExecutor;
     private final SensorPrivacyController mSensorPrivacyController;
+    private final RecordingController mRecordingController;
 
     // Assume it's all good unless we hear otherwise.  We don't always seem
     // to get broadcasts that it *is* there.
@@ -149,6 +153,7 @@
         mKeyguardStateController = Dependency.get(KeyguardStateController.class);
         mLocationController = Dependency.get(LocationController.class);
         mSensorPrivacyController = Dependency.get(SensorPrivacyController.class);
+        mRecordingController = Dependency.get(RecordingController.class);
         mUiBgExecutor = uiBgExecutor;
 
         mSlotCast = context.getString(com.android.internal.R.string.status_bar_cast);
@@ -167,6 +172,8 @@
         mSlotMicrophone = context.getString(com.android.internal.R.string.status_bar_microphone);
         mSlotCamera = context.getString(com.android.internal.R.string.status_bar_camera);
         mSlotSensorsOff = context.getString(com.android.internal.R.string.status_bar_sensors_off);
+        mSlotScreenRecord = context.getString(
+                com.android.internal.R.string.status_bar_screen_record);
 
         // listen for broadcasts
         IntentFilter filter = new IntentFilter();
@@ -235,6 +242,10 @@
         mIconController.setIconVisibility(mSlotSensorsOff,
                 mSensorPrivacyController.isSensorPrivacyEnabled());
 
+        // screen record
+        mIconController.setIcon(mSlotScreenRecord, R.drawable.stat_sys_screen_record, null);
+        mIconController.setIconVisibility(mSlotScreenRecord, false);
+
         mRotationLockController.addCallback(this);
         mBluetooth.addCallback(this);
         mProvisionedController.addCallback(this);
@@ -246,6 +257,7 @@
         mKeyguardStateController.addCallback(this);
         mSensorPrivacyController.addCallback(mSensorPrivacyListener);
         mLocationController.addCallback(this);
+        mRecordingController.addCallback(this);
 
         commandQueue.addCallback(this);
     }
@@ -438,7 +450,7 @@
         }
         if (DEBUG) Log.v(TAG, "updateCast: isCasting: " + isCasting);
         mHandler.removeCallbacks(mRemoveCastIconRunnable);
-        if (isCasting) {
+        if (isCasting && !mRecordingController.isRecording()) { // screen record has its own icon
             mIconController.setIcon(mSlotCast, R.drawable.stat_sys_cast,
                     mContext.getString(R.string.accessibility_casting));
             mIconController.setIconVisibility(mSlotCast, true);
@@ -643,4 +655,46 @@
             mIconController.setIconVisibility(mSlotCast, false);
         }
     };
+
+    // Screen Recording
+    @Override
+    public void onCountdown(long millisUntilFinished) {
+        if (DEBUG) Log.d(TAG, "screenrecord: countdown " + millisUntilFinished);
+        int countdown = (int) Math.floorDiv(millisUntilFinished + 500, 1000);
+        int resourceId = R.drawable.stat_sys_screen_record;
+        switch (countdown) {
+            case 1:
+                resourceId = R.drawable.stat_sys_screen_record_1;
+                break;
+            case 2:
+                resourceId = R.drawable.stat_sys_screen_record_2;
+                break;
+            case 3:
+                resourceId = R.drawable.stat_sys_screen_record_3;
+                break;
+        }
+        mIconController.setIcon(mSlotScreenRecord, resourceId, null);
+        mIconController.setIconVisibility(mSlotScreenRecord, true);
+    }
+
+    @Override
+    public void onCountdownEnd() {
+        if (DEBUG) Log.d(TAG, "screenrecord: hiding icon during countdown");
+        mHandler.post(() -> mIconController.setIconVisibility(mSlotScreenRecord, false));
+    }
+
+    @Override
+    public void onRecordingStart() {
+        if (DEBUG) Log.d(TAG, "screenrecord: showing icon");
+        mIconController.setIcon(mSlotScreenRecord,
+                R.drawable.stat_sys_screen_record, null);
+        mIconController.setIconVisibility(mSlotScreenRecord, true);
+    }
+
+    @Override
+    public void onRecordingEnd() {
+        // Ensure this is on the main thread
+        if (DEBUG) Log.d(TAG, "screenrecord: hiding icon");
+        mHandler.post(() -> mIconController.setIconVisibility(mSlotScreenRecord, false));
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
index f3b0a79..b949e3a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
@@ -16,19 +16,15 @@
 
 package com.android.systemui.statusbar.phone;
 
-import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
-
 import static com.android.systemui.ScreenDecorations.DisplayCutoutView.boundsFromDirection;
 
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.Configuration;
-import android.graphics.Point;
 import android.graphics.Rect;
 import android.util.AttributeSet;
 import android.util.EventLog;
 import android.util.Pair;
-import android.view.Display;
 import android.view.DisplayCutout;
 import android.view.Gravity;
 import android.view.MotionEvent;
@@ -36,7 +32,6 @@
 import android.view.ViewGroup;
 import android.view.WindowInsets;
 import android.view.accessibility.AccessibilityEvent;
-import android.widget.FrameLayout;
 import android.widget.LinearLayout;
 
 import com.android.systemui.Dependency;
@@ -84,6 +79,8 @@
     private int mCutoutSideNudge = 0;
     private boolean mHeadsUpVisible;
 
+    private int mRoundedCornerPadding = 0;
+
     public PhoneStatusBarView(Context context, AttributeSet attrs) {
         super(context, attrs);
 
@@ -294,15 +291,25 @@
     public void updateResources() {
         mCutoutSideNudge = getResources().getDimensionPixelSize(
                 R.dimen.display_cutout_margin_consumption);
+        mRoundedCornerPadding = getResources().getDimensionPixelSize(
+                R.dimen.rounded_corner_content_padding);
 
+        updateStatusBarHeight();
+    }
+
+    private void updateStatusBarHeight() {
+        final int waterfallTopInset =
+                mDisplayCutout == null ? 0 : mDisplayCutout.getWaterfallInsets().top;
         ViewGroup.LayoutParams layoutParams = getLayoutParams();
-        layoutParams.height = getResources().getDimensionPixelSize(R.dimen.status_bar_height);
+        layoutParams.height =
+                getResources().getDimensionPixelSize(R.dimen.status_bar_height) - waterfallTopInset;
         setLayoutParams(layoutParams);
     }
 
     private void updateLayoutForCutout() {
-        Pair<Integer, Integer> cornerCutoutMargins = cornerCutoutMargins(mDisplayCutout,
-                getDisplay());
+        updateStatusBarHeight();
+        Pair<Integer, Integer> cornerCutoutMargins =
+                StatusBarWindowView.cornerCutoutMargins(mDisplayCutout, getDisplay());
         updateCutoutLocation(cornerCutoutMargins);
         updateSafeInsets(cornerCutoutMargins);
     }
@@ -313,8 +320,7 @@
             return;
         }
 
-        if (mDisplayCutout == null || mDisplayCutout.isEmpty()
-                    || mLastOrientation != ORIENTATION_PORTRAIT || cornerCutoutMargins != null) {
+        if (mDisplayCutout == null || mDisplayCutout.isEmpty() || cornerCutoutMargins != null) {
             mCenterIconSpace.setVisibility(View.VISIBLE);
             mCutoutSpace.setVisibility(View.GONE);
             return;
@@ -337,47 +343,11 @@
         // Depending on our rotation, we may have to work around a cutout in the middle of the view,
         // or letterboxing from the right or left sides.
 
-        FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams();
-        if (mDisplayCutout == null || mDisplayCutout.isEmpty()
-                || mLastOrientation != ORIENTATION_PORTRAIT || cornerCutoutMargins == null) {
-            lp.leftMargin = 0;
-            lp.rightMargin = 0;
-            return;
-        }
+        Pair<Integer, Integer> padding =
+                StatusBarWindowView.paddingNeededForCutoutAndRoundedCorner(
+                        mDisplayCutout, cornerCutoutMargins, mRoundedCornerPadding);
 
-        lp.leftMargin = Math.max(lp.leftMargin, cornerCutoutMargins.first);
-        lp.rightMargin = Math.max(lp.rightMargin, cornerCutoutMargins.second);
-
-        // If we're already inset enough (e.g. on the status bar side), we can have 0 margin
-        WindowInsets insets = getRootWindowInsets();
-        int leftInset = insets.getSystemWindowInsetLeft();
-        int rightInset = insets.getSystemWindowInsetRight();
-        if (lp.leftMargin <= leftInset) {
-            lp.leftMargin = 0;
-        }
-        if (lp.rightMargin <= rightInset) {
-            lp.rightMargin = 0;
-        }
-    }
-
-    public static Pair<Integer, Integer> cornerCutoutMargins(DisplayCutout cutout,
-            Display display) {
-        if (cutout == null) {
-            return null;
-        }
-        Point size = new Point();
-        display.getRealSize(size);
-
-        Rect bounds = new Rect();
-        boundsFromDirection(cutout, Gravity.TOP, bounds);
-
-        if (bounds.left <= 0) {
-            return new Pair<>(bounds.right, 0);
-        }
-        if (bounds.right >= size.x) {
-            return new Pair<>(0, size.x - bounds.left);
-        }
-        return null;
+        setPadding(padding.first, getPaddingTop(), padding.second, getPaddingBottom());
     }
 
     public void setHeadsUpVisible(boolean headsUpVisible) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
index 2b9fc8d..10821d6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -107,7 +107,7 @@
     /**
      * Default alpha value for most scrims.
      */
-    public static final float GRADIENT_SCRIM_ALPHA = 0.2f;
+    public static final float SCRIM_ALPHA = 0.2f;
     /**
      * Scrim opacity when the phone is about to wake-up.
      */
@@ -116,12 +116,12 @@
      * A scrim varies its opacity based on a busyness factor, for example
      * how many notifications are currently visible.
      */
-    public static final float GRADIENT_SCRIM_ALPHA_BUSY = 0.7f;
+    public static final float BUSY_SCRIM_ALPHA = 0.54f;
 
     /**
      * The most common scrim, the one under the keyguard.
      */
-    protected static final float SCRIM_BEHIND_ALPHA_KEYGUARD = GRADIENT_SCRIM_ALPHA;
+    protected static final float SCRIM_BEHIND_ALPHA_KEYGUARD = SCRIM_ALPHA;
 
     static final int TAG_KEY_ANIM = R.id.scrim;
     private static final int TAG_START_ALPHA = R.id.scrim_alpha_start;
@@ -481,7 +481,7 @@
             // Darken scrim as you pull down the shade when unlocked
             float behindFraction = getInterpolatedFraction();
             behindFraction = (float) Math.pow(behindFraction, 0.8f);
-            mBehindAlpha = behindFraction * GRADIENT_SCRIM_ALPHA_BUSY;
+            mBehindAlpha = behindFraction * BUSY_SCRIM_ALPHA;
             mInFrontAlpha = 0;
         } else if (mState == ScrimState.KEYGUARD || mState == ScrimState.PULSING) {
             // Either darken of make the scrim transparent when you
@@ -489,7 +489,7 @@
             float interpolatedFract = getInterpolatedFraction();
             float alphaBehind = mState.getBehindAlpha();
             if (mDarkenWhileDragging) {
-                mBehindAlpha = MathUtils.lerp(GRADIENT_SCRIM_ALPHA_BUSY, alphaBehind,
+                mBehindAlpha = MathUtils.lerp(BUSY_SCRIM_ALPHA, alphaBehind,
                         interpolatedFract);
                 mInFrontAlpha = mState.getFrontAlpha();
             } else {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
index 40f8d58..c23fd0a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
@@ -92,7 +92,7 @@
     BOUNCER {
         @Override
         public void prepare(ScrimState previousState) {
-            mBehindAlpha = ScrimController.GRADIENT_SCRIM_ALPHA_BUSY;
+            mBehindAlpha = ScrimController.BUSY_SCRIM_ALPHA;
             mFrontAlpha = 0f;
             mBubbleAlpha = 0f;
         }
@@ -106,7 +106,7 @@
         public void prepare(ScrimState previousState) {
             mBehindAlpha = 0;
             mBubbleAlpha = 0f;
-            mFrontAlpha = ScrimController.GRADIENT_SCRIM_ALPHA_BUSY;
+            mFrontAlpha = ScrimController.BUSY_SCRIM_ALPHA;
         }
     },
 
@@ -234,8 +234,8 @@
             mBubbleTint = Color.TRANSPARENT;
 
             mFrontAlpha = ScrimController.TRANSPARENT;
-            mBehindAlpha = ScrimController.GRADIENT_SCRIM_ALPHA_BUSY;
-            mBubbleAlpha = ScrimController.GRADIENT_SCRIM_ALPHA_BUSY;
+            mBehindAlpha = ScrimController.BUSY_SCRIM_ALPHA;
+            mBubbleAlpha = ScrimController.BUSY_SCRIM_ALPHA;
 
             mAnimationDuration = ScrimController.ANIMATION_DURATION;
             mBlankScreen = false;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 11f7079..0d3b09a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -163,7 +163,6 @@
 import com.android.systemui.shared.plugins.PluginManager;
 import com.android.systemui.shared.system.WindowManagerWrapper;
 import com.android.systemui.stackdivider.Divider;
-import com.android.systemui.stackdivider.WindowManagerProxy;
 import com.android.systemui.statusbar.BackDropView;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.CrossFadeHelper;
@@ -199,6 +198,7 @@
 import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
 import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
+import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneModule;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
 import com.android.systemui.statusbar.policy.BrightnessMirrorController;
@@ -355,6 +355,7 @@
     private final KeyguardBypassController mKeyguardBypassController;
     private final KeyguardStateController mKeyguardStateController;
     private final HeadsUpManagerPhone mHeadsUpManager;
+    private final StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
     private final DynamicPrivacyController mDynamicPrivacyController;
     private final BypassHeadsUpNotifier mBypassHeadsUpNotifier;
     private final FalsingManager mFalsingManager;
@@ -597,7 +598,7 @@
      * Public constructor for StatusBar.
      *
      * StatusBar is considered optional, and therefore can not be marked as @Inject directly.
-     * Instead, an @Provide method is included.
+     * Instead, an @Provide method is included. See {@link StatusBarPhoneModule}.
      */
     @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
     public StatusBar(
@@ -675,7 +676,8 @@
             KeyguardDismissUtil keyguardDismissUtil,
             ExtensionController extensionController,
             UserInfoControllerImpl userInfoControllerImpl,
-            DismissCallbackRegistry dismissCallbackRegistry) {
+            DismissCallbackRegistry dismissCallbackRegistry,
+            StatusBarTouchableRegionManager statusBarTouchableRegionManager) {
         super(context);
         mNotificationsController = notificationsController;
         mLightBarController = lightBarController;
@@ -687,6 +689,7 @@
         mKeyguardBypassController = keyguardBypassController;
         mKeyguardStateController = keyguardStateController;
         mHeadsUpManager = headsUpManagerPhone;
+        mStatusBarTouchableRegionManager = statusBarTouchableRegionManager;
         mDynamicPrivacyController = dynamicPrivacyController;
         mBypassHeadsUpNotifier = bypassHeadsUpNotifier;
         mFalsingManager = falsingManager;
@@ -1030,9 +1033,8 @@
                         CollapsedStatusBarFragment.TAG)
                 .commit();
 
-        mHeadsUpManager.setUp(mNotificationShadeWindowView, mGroupManager, this,
-                mVisualStabilityManager);
-        mConfigurationController.addCallback(mHeadsUpManager);
+        mHeadsUpManager.setup(mVisualStabilityManager);
+        mStatusBarTouchableRegionManager.setup(this, mNotificationShadeWindowView);
         mHeadsUpManager.addListener(this);
         mHeadsUpManager.addListener(mNotificationPanelViewController.getOnHeadsUpChangedListener());
         mHeadsUpManager.addListener(mVisualStabilityManager);
@@ -1353,6 +1355,7 @@
                 .statusBarWindowView(mNotificationShadeWindowView).build();
         mNotificationShadeWindowViewController = statusBarComponent
                 .getNotificationShadeWindowViewController();
+        mNotificationShadeWindowController.setNotificationShadeView(mNotificationShadeWindowView);
         mNotificationShadeWindowViewController.setupExpandedStatusBar();
         mStatusBarWindowController = statusBarComponent.getStatusBarWindowController();
         mPhoneStatusBarWindow = mSuperStatusBarViewFactory.getStatusBarWindowView();
@@ -1408,8 +1411,11 @@
         if (!mRecentsOptional.isPresent()) {
             return false;
         }
-        int dockSide = WindowManagerProxy.getInstance().getDockSide();
-        if (dockSide == WindowManager.DOCKED_INVALID) {
+        Divider divider = null;
+        if (mDividerOptional.isPresent()) {
+            divider = mDividerOptional.get();
+        }
+        if (divider == null || !divider.inSplitMode()) {
             final int navbarPos = WindowManagerWrapper.getInstance().getNavBarPosition(mDisplayId);
             if (navbarPos == NAV_BAR_POS_INVALID) {
                 return false;
@@ -1419,16 +1425,13 @@
                     : SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT;
             return mRecentsOptional.get().splitPrimaryTask(createMode, null, metricsDockAction);
         } else {
-            if (mDividerOptional.isPresent()) {
-                Divider divider = mDividerOptional.get();
-                if (divider.isMinimized() && !divider.isHomeStackResizable()) {
-                    // Undocking from the minimized state is not supported
-                    return false;
-                } else {
-                    divider.onUndockingTask();
-                    if (metricsUndockAction != -1) {
-                        mMetricsLogger.action(metricsUndockAction);
-                    }
+            if (divider.isMinimized() && !divider.isHomeStackResizable()) {
+                // Undocking from the minimized state is not supported
+                return false;
+            } else {
+                divider.onUndockingTask();
+                if (metricsUndockAction != -1) {
+                    mMetricsLogger.action(metricsUndockAction);
                 }
             }
         }
@@ -2466,8 +2469,10 @@
             pw.println("  mHeadsUpManager: null");
         }
 
-        if (mBubbleController != null) {
-            mBubbleController.dump(fd, pw, args);
+        if (mStatusBarTouchableRegionManager != null) {
+            mStatusBarTouchableRegionManager.dump(fd, pw, args);
+        } else {
+            pw.println("  mStatusBarTouchableRegionManager: null");
         }
 
         if (mLightBarController != null) {
@@ -2571,7 +2576,7 @@
             }
             try {
                 result = ActivityTaskManager.getService().startActivityAsUser(
-                        null, mContext.getBasePackageName(),
+                        null, mContext.getBasePackageName(), mContext.getFeatureId(),
                         intent,
                         intent.resolveTypeIfNeeded(mContext.getContentResolver()),
                         null, null, 0, Intent.FLAG_ACTIVITY_NEW_TASK, null,
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 6a046884..0644a42 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -19,6 +19,7 @@
 import static android.view.ViewRootImpl.NEW_INSETS_MODE_FULL;
 import static android.view.ViewRootImpl.sNewInsetsMode;
 import static android.view.WindowInsets.Type.navigationBars;
+
 import static com.android.systemui.plugins.ActivityStarter.OnDismissAction;
 import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_UNLOCK_FADING;
 import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK;
@@ -95,6 +96,8 @@
     private static String TAG = "StatusBarKeyguardViewManager";
 
     protected final Context mContext;
+    private final ConfigurationController mConfigurationController;
+    private final NavigationModeController mNavigationModeController;
     private final NotificationShadeWindowController mNotificationShadeWindowController;
     private final BouncerExpansionCallback mExpansionCallback = new BouncerExpansionCallback() {
         @Override
@@ -208,21 +211,14 @@
         mContext = context;
         mViewMediatorCallback = callback;
         mLockPatternUtils = lockPatternUtils;
+        mConfigurationController = configurationController;
+        mNavigationModeController = navigationModeController;
         mNotificationShadeWindowController = notificationShadeWindowController;
         mKeyguardStateController = keyguardStateController;
         mMediaManager = notificationMediaManager;
         mKeyguardUpdateManager = keyguardUpdateMonitor;
-        mKeyguardUpdateManager.registerCallback(mUpdateMonitorCallback);
         mStatusBarStateController = sysuiStatusBarStateController;
-        mStatusBarStateController.addCallback(this);
-        configurationController.addCallback(this);
-        mGesturalNav = QuickStepContract.isGesturalMode(
-                navigationModeController.addListener(this));
         mDockManager = dockManager;
-        if (mDockManager != null) {
-            mDockManager.addListener(mDockEventListener);
-            mIsDocked = mDockManager.isDocked();
-        }
     }
 
     public void registerStatusBar(StatusBar statusBar,
@@ -246,6 +242,20 @@
         notificationPanelViewController.addExpansionListener(this);
         mBypassController = bypassController;
         mNotificationContainer = notificationContainer;
+
+        registerListeners();
+    }
+
+    private void registerListeners() {
+        mKeyguardUpdateManager.registerCallback(mUpdateMonitorCallback);
+        mStatusBarStateController.addCallback(this);
+        mConfigurationController.addCallback(this);
+        mGesturalNav = QuickStepContract.isGesturalMode(
+                mNavigationModeController.addListener(this));
+        if (mDockManager != null) {
+            mDockManager.addListener(mDockEventListener);
+            mIsDocked = mDockManager.isDocked();
+        }
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java
deleted file mode 100644
index 15a0e08..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.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 com.android.systemui.statusbar.phone;
-
-import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME;
-
-import android.content.Context;
-import android.os.Handler;
-import android.os.PowerManager;
-import android.util.DisplayMetrics;
-
-import androidx.annotation.Nullable;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.keyguard.ViewMediatorCallback;
-import com.android.systemui.InitController;
-import com.android.systemui.assist.AssistManager;
-import com.android.systemui.broadcast.BroadcastDispatcher;
-import com.android.systemui.bubbles.BubbleController;
-import com.android.systemui.colorextraction.SysuiColorExtractor;
-import com.android.systemui.dagger.qualifiers.UiBackground;
-import com.android.systemui.keyguard.DismissCallbackRegistry;
-import com.android.systemui.keyguard.KeyguardViewMediator;
-import com.android.systemui.keyguard.ScreenLifecycle;
-import com.android.systemui.keyguard.WakefulnessLifecycle;
-import com.android.systemui.plugins.DarkIconDispatcher;
-import com.android.systemui.plugins.FalsingManager;
-import com.android.systemui.plugins.PluginDependencyProvider;
-import com.android.systemui.recents.Recents;
-import com.android.systemui.recents.ScreenPinningRequest;
-import com.android.systemui.shared.plugins.PluginManager;
-import com.android.systemui.stackdivider.Divider;
-import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.statusbar.NavigationBarController;
-import com.android.systemui.statusbar.NotificationLockscreenUserManager;
-import com.android.systemui.statusbar.NotificationMediaManager;
-import com.android.systemui.statusbar.NotificationRemoteInputManager;
-import com.android.systemui.statusbar.NotificationViewHierarchyManager;
-import com.android.systemui.statusbar.PulseExpansionHandler;
-import com.android.systemui.statusbar.StatusBarDependenciesModule;
-import com.android.systemui.statusbar.SuperStatusBarViewFactory;
-import com.android.systemui.statusbar.SysuiStatusBarStateController;
-import com.android.systemui.statusbar.VibratorHelper;
-import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier;
-import com.android.systemui.statusbar.notification.DynamicPrivacyController;
-import com.android.systemui.statusbar.notification.NotificationAlertingManager;
-import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
-import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
-import com.android.systemui.statusbar.notification.VisualStabilityManager;
-import com.android.systemui.statusbar.notification.init.NotificationsController;
-import com.android.systemui.statusbar.notification.logging.NotificationLogger;
-import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
-import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
-import com.android.systemui.statusbar.policy.BatteryController;
-import com.android.systemui.statusbar.policy.ConfigurationController;
-import com.android.systemui.statusbar.policy.DeviceProvisionedController;
-import com.android.systemui.statusbar.policy.ExtensionController;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-import com.android.systemui.statusbar.policy.NetworkController;
-import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
-import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
-import com.android.systemui.statusbar.policy.UserSwitcherController;
-import com.android.systemui.volume.VolumeComponent;
-
-import java.util.Optional;
-import java.util.concurrent.Executor;
-
-import javax.inject.Named;
-import javax.inject.Provider;
-import javax.inject.Singleton;
-
-import dagger.Lazy;
-import dagger.Module;
-import dagger.Provides;
-
-/**
- * Dagger Module providing {@link StatusBar}.
- */
-@Module(includes = {StatusBarDependenciesModule.class})
-public class StatusBarModule {
-    /**
-     * Provides our instance of StatusBar which is considered optional.
-     */
-    @Provides
-    @Singleton
-    static StatusBar provideStatusBar(
-            Context context,
-            NotificationsController notificationsController,
-            LightBarController lightBarController,
-            AutoHideController autoHideController,
-            KeyguardUpdateMonitor keyguardUpdateMonitor,
-            StatusBarIconController statusBarIconController,
-            PulseExpansionHandler pulseExpansionHandler,
-            NotificationWakeUpCoordinator notificationWakeUpCoordinator,
-            KeyguardBypassController keyguardBypassController,
-            KeyguardStateController keyguardStateController,
-            HeadsUpManagerPhone headsUpManagerPhone,
-            DynamicPrivacyController dynamicPrivacyController,
-            BypassHeadsUpNotifier bypassHeadsUpNotifier,
-            FalsingManager falsingManager,
-            BroadcastDispatcher broadcastDispatcher,
-            RemoteInputQuickSettingsDisabler remoteInputQuickSettingsDisabler,
-            NotificationGutsManager notificationGutsManager,
-            NotificationLogger notificationLogger,
-            NotificationInterruptionStateProvider notificationInterruptionStateProvider,
-            NotificationViewHierarchyManager notificationViewHierarchyManager,
-            KeyguardViewMediator keyguardViewMediator,
-            NotificationAlertingManager notificationAlertingManager,
-            DisplayMetrics displayMetrics,
-            MetricsLogger metricsLogger,
-            @UiBackground Executor uiBgExecutor,
-            NotificationMediaManager notificationMediaManager,
-            NotificationLockscreenUserManager lockScreenUserManager,
-            NotificationRemoteInputManager remoteInputManager,
-            UserSwitcherController userSwitcherController,
-            NetworkController networkController,
-            BatteryController batteryController,
-            SysuiColorExtractor colorExtractor,
-            ScreenLifecycle screenLifecycle,
-            WakefulnessLifecycle wakefulnessLifecycle,
-            SysuiStatusBarStateController statusBarStateController,
-            VibratorHelper vibratorHelper,
-            BubbleController bubbleController,
-            NotificationGroupManager groupManager,
-            VisualStabilityManager visualStabilityManager,
-            DeviceProvisionedController deviceProvisionedController,
-            NavigationBarController navigationBarController,
-            Lazy<AssistManager> assistManagerLazy,
-            ConfigurationController configurationController,
-            NotificationShadeWindowController notificationShadeWindowController,
-            LockscreenLockIconController lockscreenLockIconController,
-            DozeParameters dozeParameters,
-            ScrimController scrimController,
-            @Nullable KeyguardLiftController keyguardLiftController,
-            Lazy<LockscreenWallpaper> lockscreenWallpaperLazy,
-            Lazy<BiometricUnlockController> biometricUnlockControllerLazy,
-            DozeServiceHost dozeServiceHost,
-            PowerManager powerManager,
-            ScreenPinningRequest screenPinningRequest,
-            DozeScrimController dozeScrimController,
-            VolumeComponent volumeComponent,
-            CommandQueue commandQueue,
-            Optional<Recents> recentsOptional,
-            Provider<StatusBarComponent.Builder> statusBarComponentBuilder,
-            PluginManager pluginManager,
-            Optional<Divider> dividerOptional,
-            LightsOutNotifController lightsOutNotifController,
-            StatusBarNotificationActivityStarter.Builder
-                    statusBarNotificationActivityStarterBuilder,
-            ShadeController shadeController,
-            SuperStatusBarViewFactory superStatusBarViewFactory,
-            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
-            ViewMediatorCallback viewMediatorCallback,
-            InitController initController,
-            DarkIconDispatcher darkIconDispatcher,
-            @Named(TIME_TICK_HANDLER_NAME) Handler timeTickHandler,
-            PluginDependencyProvider pluginDependencyProvider,
-            KeyguardDismissUtil keyguardDismissUtil,
-            ExtensionController extensionController,
-            UserInfoControllerImpl userInfoControllerImpl,
-            DismissCallbackRegistry dismissCallbackRegistry) {
-        return new StatusBar(
-                context,
-                notificationsController,
-                lightBarController,
-                autoHideController,
-                keyguardUpdateMonitor,
-                statusBarIconController,
-                pulseExpansionHandler,
-                notificationWakeUpCoordinator,
-                keyguardBypassController,
-                keyguardStateController,
-                headsUpManagerPhone,
-                dynamicPrivacyController,
-                bypassHeadsUpNotifier,
-                falsingManager,
-                broadcastDispatcher,
-                remoteInputQuickSettingsDisabler,
-                notificationGutsManager,
-                notificationLogger,
-                notificationInterruptionStateProvider,
-                notificationViewHierarchyManager,
-                keyguardViewMediator,
-                notificationAlertingManager,
-                displayMetrics,
-                metricsLogger,
-                uiBgExecutor,
-                notificationMediaManager,
-                lockScreenUserManager,
-                remoteInputManager,
-                userSwitcherController,
-                networkController,
-                batteryController,
-                colorExtractor,
-                screenLifecycle,
-                wakefulnessLifecycle,
-                statusBarStateController,
-                vibratorHelper,
-                bubbleController,
-                groupManager,
-                visualStabilityManager,
-                deviceProvisionedController,
-                navigationBarController,
-                assistManagerLazy,
-                configurationController,
-                notificationShadeWindowController,
-                lockscreenLockIconController,
-                dozeParameters,
-                scrimController,
-                keyguardLiftController,
-                lockscreenWallpaperLazy,
-                biometricUnlockControllerLazy,
-                dozeServiceHost,
-                powerManager,
-                screenPinningRequest,
-                dozeScrimController,
-                volumeComponent,
-                commandQueue,
-                recentsOptional,
-                statusBarComponentBuilder,
-                pluginManager,
-                dividerOptional,
-                lightsOutNotifController,
-                statusBarNotificationActivityStarterBuilder,
-                shadeController,
-                superStatusBarViewFactory,
-                statusBarKeyguardViewManager,
-                viewMediatorCallback,
-                initController,
-                darkIconDispatcher,
-                timeTickHandler,
-                pluginDependencyProvider,
-                keyguardDismissUtil,
-                extensionController,
-                userInfoControllerImpl,
-                dismissCallbackRegistry);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
index 0f3b5db..e1a20b6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
@@ -17,6 +17,7 @@
 package com.android.systemui.statusbar.phone;
 
 import static android.service.notification.NotificationListenerService.REASON_CLICK;
+import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_NEUTRAL;
 
 import static com.android.systemui.statusbar.phone.StatusBar.getActivityOptions;
 
@@ -35,6 +36,7 @@
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.service.dreams.IDreamManager;
+import android.service.notification.NotificationStats;
 import android.service.notification.StatusBarNotification;
 import android.text.TextUtils;
 import android.util.EventLog;
@@ -56,6 +58,7 @@
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.FeatureFlags;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationPresenter;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
@@ -66,7 +69,11 @@
 import com.android.systemui.statusbar.notification.NotificationEntryListener;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
+import com.android.systemui.statusbar.notification.collection.NotifCollection;
+import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
 import com.android.systemui.statusbar.notification.logging.NotificationLogger;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
 import com.android.systemui.statusbar.policy.HeadsUpUtil;
@@ -97,6 +104,9 @@
     private final KeyguardStateController mKeyguardStateController;
     private final ActivityStarter mActivityStarter;
     private final NotificationEntryManager mEntryManager;
+    private final NotifPipeline mNotifPipeline;
+    private final NotifCollection mNotifCollection;
+    private final FeatureFlags mFeatureFlags;
     private final StatusBarStateController mStatusBarStateController;
     private final NotificationInterruptionStateProvider mNotificationInterruptionStateProvider;
     private final MetricsLogger mMetricsLogger;
@@ -135,7 +145,9 @@
             NotificationInterruptionStateProvider notificationInterruptionStateProvider,
             MetricsLogger metricsLogger, LockPatternUtils lockPatternUtils,
             Handler mainThreadHandler, Handler backgroundHandler, Executor uiBgExecutor,
-            ActivityIntentHelper activityIntentHelper, BubbleController bubbleController) {
+            ActivityIntentHelper activityIntentHelper, BubbleController bubbleController,
+            FeatureFlags featureFlags, NotifPipeline notifPipeline,
+            NotifCollection notifCollection) {
         mContext = context;
         mNotificationPanel = panel;
         mPresenter = presenter;
@@ -162,12 +174,25 @@
         mLockPatternUtils = lockPatternUtils;
         mBackgroundHandler = backgroundHandler;
         mUiBgExecutor = uiBgExecutor;
-        mEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
-            @Override
-            public void onPendingEntryAdded(NotificationEntry entry) {
-                handleFullScreenIntent(entry);
-            }
-        });
+        mFeatureFlags = featureFlags;
+        mNotifPipeline = notifPipeline;
+        mNotifCollection = notifCollection;
+        if (!mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
+            mEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
+                @Override
+                public void onPendingEntryAdded(NotificationEntry entry) {
+                    handleFullScreenIntent(entry);
+                }
+            });
+        } else {
+            mNotifPipeline.addCollectionListener(new NotifCollectionListener() {
+                @Override
+                public void onEntryAdded(NotificationEntry entry) {
+                    handleFullScreenIntent(entry);
+                }
+            });
+        }
+
         mStatusBarRemoteInputCallback = remoteInputCallback;
         mMainThreadHandler = mainThreadHandler;
         mActivityIntentHelper = activityIntentHelper;
@@ -246,15 +271,14 @@
             mHeadsUpManager.removeNotification(sbn.getKey(),
                     true /* releaseImmediately */);
         }
-        StatusBarNotification parentToCancel = null;
+        NotificationEntry parentToCancel = null;
         if (shouldAutoCancel(sbn) && mGroupManager.isOnlyChildInGroup(sbn)) {
-            StatusBarNotification summarySbn =
-                    mGroupManager.getLogicalGroupSummary(sbn).getSbn();
-            if (shouldAutoCancel(summarySbn)) {
+            NotificationEntry summarySbn = mGroupManager.getLogicalGroupSummary(sbn);
+            if (shouldAutoCancel(summarySbn.getSbn())) {
                 parentToCancel = summarySbn;
             }
         }
-        final StatusBarNotification parentToCancelFinal = parentToCancel;
+        final NotificationEntry parentToCancelFinal = parentToCancel;
         final Runnable runnable = () -> handleNotificationClickAfterPanelCollapsed(
                 sbn, row, controller, intent,
                 isActivityIntent, wasOccluded, parentToCancelFinal);
@@ -279,7 +303,7 @@
             PendingIntent intent,
             boolean isActivityIntent,
             boolean wasOccluded,
-            StatusBarNotification parentToCancelFinal) {
+            NotificationEntry parentToCancelFinal) {
         String notificationKey = sbn.getKey();
         try {
             // The intent we are sending is for the application, which
@@ -330,7 +354,7 @@
             collapseOnMainThread();
         }
 
-        final int count = mEntryManager.getActiveNotificationsCount();
+        final int count = getVisibleNotificationsCount();
         final int rank = entry.getRanking().getRank();
         NotificationVisibility.NotificationLocation location =
                 NotificationLogger.getNotificationLocation(entry);
@@ -341,15 +365,19 @@
         } catch (RemoteException ex) {
             // system process is dead if we're here.
         }
+
         if (!isBubble) {
             if (parentToCancelFinal != null) {
+                // TODO: (b/145659174) remove - this cancels the parent if the notification clicked
+                // on will auto-cancel and is the only child in the group. This won't be
+                // necessary in the new pipeline due to group pruning in ShadeListBuilder.
                 removeNotification(parentToCancelFinal);
             }
             if (shouldAutoCancel(sbn)
                     || mRemoteInputManager.isNotificationKeptForRemoteInputHistory(
                     notificationKey)) {
                 // Automatically remove all notifications that we may have kept around longer
-                removeNotification(sbn);
+                removeNotification(row.getEntry());
             }
         }
         mIsCollapsingToShowActivityOverLockscreen = false;
@@ -482,11 +510,10 @@
         return entry.shouldSuppressFullScreenIntent();
     }
 
-    private void removeNotification(StatusBarNotification notification) {
+    private void removeNotification(NotificationEntry entry) {
         // We have to post it to the UI thread for synchronization
         mMainThreadHandler.post(() -> {
-            Runnable removeRunnable =
-                    () -> mEntryManager.performRemoveNotification(notification, REASON_CLICK);
+            Runnable removeRunnable = createRemoveRunnable(entry);
             if (mPresenter.isCollapsing()) {
                 // To avoid lags we're only performing the remove
                 // after the shade was collapsed
@@ -497,6 +524,53 @@
         });
     }
 
+    // --------------------- NotificationEntryManager/NotifPipeline methods ------------------------
+
+    private int getVisibleNotificationsCount() {
+        if (mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
+            return mNotifPipeline.getShadeListCount();
+        } else {
+            return mEntryManager.getActiveNotificationsCount();
+        }
+    }
+
+    private Runnable createRemoveRunnable(NotificationEntry entry) {
+        if (mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
+            return new Runnable() {
+                @Override
+                public void run() {
+                    // see NotificationLogger#logNotificationClear
+                    int dismissalSurface = NotificationStats.DISMISSAL_SHADE;
+                    if (mHeadsUpManager.isAlerting(entry.getKey())) {
+                        dismissalSurface = NotificationStats.DISMISSAL_PEEK;
+                    } else if (mNotificationPanel.hasPulsingNotifications()) {
+                        dismissalSurface = NotificationStats.DISMISSAL_AOD;
+                    }
+
+                    mNotifCollection.dismissNotification(
+                            entry,
+                            new DismissedByUserStats(
+                                    dismissalSurface,
+                                    DISMISS_SENTIMENT_NEUTRAL,
+                                    NotificationVisibility.obtain(
+                                            entry.getKey(),
+                                            entry.getRanking().getRank(),
+                                            mNotifPipeline.getShadeListCount(),
+                                            true,
+                                            NotificationLogger.getNotificationLocation(entry))
+                            ));
+                }
+            };
+        } else {
+            return new Runnable() {
+                @Override
+                public void run() {
+                    mEntryManager.performRemoveNotification(entry.getSbn(), REASON_CLICK);
+                }
+            };
+        }
+    }
+
     /**
      * Public builder for {@link StatusBarNotificationActivityStarter}.
      */
@@ -506,6 +580,9 @@
         private final CommandQueue mCommandQueue;
         private final Lazy<AssistManager> mAssistManagerLazy;
         private final NotificationEntryManager mEntryManager;
+        private final FeatureFlags mFeatureFlags;
+        private final NotifPipeline mNotifPipeline;
+        private final NotifCollection mNotifCollection;
         private final HeadsUpManagerPhone mHeadsUpManager;
         private final ActivityStarter mActivityStarter;
         private final IStatusBarService mStatusBarService;
@@ -557,7 +634,10 @@
                 @UiBackground Executor uiBgExecutor,
                 ActivityIntentHelper activityIntentHelper,
                 BubbleController bubbleController,
-                ShadeController shadeController) {
+                ShadeController shadeController,
+                FeatureFlags featureFlags,
+                NotifPipeline notifPipeline,
+                NotifCollection notifCollection) {
             mContext = context;
             mCommandQueue = commandQueue;
             mAssistManagerLazy = assistManagerLazy;
@@ -583,6 +663,9 @@
             mActivityIntentHelper = activityIntentHelper;
             mBubbleController = bubbleController;
             mShadeController = shadeController;
+            mFeatureFlags = featureFlags;
+            mNotifPipeline = notifPipeline;
+            mNotifCollection = notifCollection;
         }
 
         /** Sets the status bar to use as {@link StatusBar}. */
@@ -608,8 +691,6 @@
             return this;
         }
 
-
-
         public StatusBarNotificationActivityStarter build() {
             return new StatusBarNotificationActivityStarter(mContext,
                     mCommandQueue, mAssistManagerLazy,
@@ -638,7 +719,10 @@
                     mBackgroundHandler,
                     mUiBgExecutor,
                     mActivityIntentHelper,
-                    mBubbleController);
+                    mBubbleController,
+                    mFeatureFlags,
+                    mNotifPipeline,
+                    mNotifCollection);
         }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
index 2485513..693cdd2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
@@ -209,7 +209,7 @@
             };
 
             mViewHierarchyManager.setUpWithPresenter(this, notifListContainer);
-            mEntryManager.setUpWithPresenter(this, notifListContainer, mHeadsUpManager);
+            mEntryManager.setUpWithPresenter(this);
             mEntryManager.addNotificationEntryListener(notificationEntryListener);
             mEntryManager.addNotificationLifetimeExtender(mHeadsUpManager);
             mEntryManager.addNotificationLifetimeExtender(mGutsManager);
@@ -230,8 +230,6 @@
             onUserSwitched(mLockscreenUserManager.getCurrentUserId());
         });
         Dependency.get(ConfigurationController.class).addCallback(this);
-
-        notificationAlertingManager.setHeadsUpManager(mHeadsUpManager);
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
index d2e9262..690d573 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
@@ -177,8 +177,10 @@
 
     @Override
     public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
-            int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
-            String description, boolean isWide, int subId, boolean roaming) {
+            int qsType, boolean activityIn, boolean activityOut,
+            CharSequence typeContentDescription,
+            CharSequence typeContentDescriptionHtml, CharSequence description,
+            boolean isWide, int subId, boolean roaming) {
         MobileIconState state = getState(subId);
         if (state == null) {
             return;
@@ -387,7 +389,7 @@
         public int typeId;
         public boolean roaming;
         public boolean needsLeadingPadding;
-        public String typeContentDescription;
+        public CharSequence typeContentDescription;
 
         private MobileIconState(int subId) {
             super();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java
index b8fb6d3..5bab867 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java
@@ -17,66 +17,187 @@
 package com.android.systemui.statusbar.phone;
 
 import android.annotation.NonNull;
+import android.content.Context;
+import android.content.res.Resources;
 import android.graphics.Rect;
+import android.graphics.Region;
+import android.util.Log;
+import android.view.DisplayCutout;
+import android.view.Gravity;
 import android.view.View;
 import android.view.ViewTreeObserver;
 import android.view.ViewTreeObserver.OnComputeInternalInsetsListener;
+import android.view.WindowInsets;
 
-import com.android.systemui.Dependency;
+import com.android.systemui.Dumpable;
 import com.android.systemui.R;
+import com.android.systemui.ScreenDecorations;
 import com.android.systemui.bubbles.BubbleController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
+import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
 
 /**
- * Manages what parts of the status bar are touchable. Clients are primarily UI that displays in the
- * status bar even though the UI doesn't look like part of the status bar.
+ * Manages what parts of the status bar are touchable. Clients are primarily UI that display in the
+ * status bar even though the UI doesn't look like part of the status bar. Currently this
+ * includes HeadsUpNotifications and Bubbles.
  */
-public final class StatusBarTouchableRegionManager implements
-        OnComputeInternalInsetsListener, ConfigurationListener {
+@Singleton
+public final class StatusBarTouchableRegionManager implements Dumpable {
+    private static final String TAG = "TouchableRegionManager";
 
-    private final BubbleController mBubbleController = Dependency.get(BubbleController.class);
+    private final Context mContext;
     private final HeadsUpManagerPhone mHeadsUpManager;
+    private final NotificationShadeWindowController mNotificationShadeWindowController;
+    private final BubbleController mBubbleController;
+
     private boolean mIsStatusBarExpanded = false;
     private boolean mShouldAdjustInsets = false;
-    private final StatusBar mStatusBar;
-    private final View mNotificationShadeWindowView;
+    private StatusBar mStatusBar;
+    private View mNotificationShadeWindowView;
     private View mNotificationPanelView;
     private boolean mForceCollapsedUntilLayout = false;
-    private final NotificationShadeWindowController mNotificationShadeWindowController;
 
-    public StatusBarTouchableRegionManager(HeadsUpManagerPhone headsUpManager,
-                                           @NonNull StatusBar statusBar,
-                                           @NonNull View notificationShadeWindowView) {
-        mHeadsUpManager = headsUpManager;
-        mStatusBar = statusBar;
-        mNotificationShadeWindowView = notificationShadeWindowView;
-        mNotificationShadeWindowController =
-                Dependency.get(NotificationShadeWindowController.class);
+    private Region mTouchableRegion = new Region();
+    private int mDisplayCutoutTouchableRegionSize;
+    private int mStatusBarHeight;
 
-        mBubbleController.setBubbleStateChangeListener((hasBubbles) -> {
-            updateTouchableRegion();
+    @Inject
+    public StatusBarTouchableRegionManager(
+            Context context,
+            NotificationShadeWindowController notificationShadeWindowController,
+            ConfigurationController configurationController,
+            HeadsUpManagerPhone headsUpManager,
+            BubbleController bubbleController
+    ) {
+        mContext = context;
+        initResources();
+        configurationController.addCallback(new ConfigurationListener() {
+            @Override
+            public void onDensityOrFontScaleChanged() {
+                initResources();
+            }
+
+            @Override
+            public void onOverlayChanged() {
+                initResources();
+            }
         });
 
+        mHeadsUpManager = headsUpManager;
+        mHeadsUpManager.addListener(
+                new OnHeadsUpChangedListener() {
+                    @Override
+                    public void onHeadsUpPinnedModeChanged(boolean hasPinnedNotification) {
+                        if (Log.isLoggable(TAG, Log.WARN)) {
+                            Log.w(TAG, "onHeadsUpPinnedModeChanged");
+                        }
+                        updateTouchableRegion();
+                    }
+                });
+        mHeadsUpManager.addHeadsUpPhoneListener(
+                new HeadsUpManagerPhone.OnHeadsUpPhoneListenerChange() {
+                    @Override
+                    public void onHeadsUpGoingAwayStateChanged(boolean headsUpGoingAway) {
+                        if (!headsUpGoingAway) {
+                            updateTouchableRegionAfterLayout();
+                        } else {
+                            updateTouchableRegion();
+                        }
+                    }
+                });
+
+        mNotificationShadeWindowController = notificationShadeWindowController;
         mNotificationShadeWindowController.setForcePluginOpenListener((forceOpen) -> {
             updateTouchableRegion();
         });
-        Dependency.get(ConfigurationController.class).addCallback(this);
-        if (mNotificationShadeWindowView != null) {
-            mNotificationPanelView = mNotificationShadeWindowView.findViewById(
-                    R.id.notification_panel);
+
+        mBubbleController = bubbleController;
+        mBubbleController.setBubbleStateChangeListener((hasBubbles) -> {
+            updateTouchableRegion();
+        });
+    }
+
+    protected void setup(
+            @NonNull StatusBar statusBar,
+            @NonNull View notificationShadeWindowView) {
+        mStatusBar = statusBar;
+        mNotificationShadeWindowView = notificationShadeWindowView;
+        mNotificationPanelView = mNotificationShadeWindowView.findViewById(R.id.notification_panel);
+    }
+
+    @Override
+    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+        pw.println("StatusBarTouchableRegionManager state:");
+        pw.print("  mTouchableRegion=");
+        pw.println(mTouchableRegion);
+    }
+
+    /**
+     * Notify that the status bar panel gets expanded or collapsed.
+     *
+     * @param isExpanded True to notify expanded, false to notify collapsed.
+     */
+    void setPanelExpanded(boolean isExpanded) {
+        if (isExpanded != mIsStatusBarExpanded) {
+            mIsStatusBarExpanded = isExpanded;
+            if (isExpanded) {
+                // make sure our state is sane
+                mForceCollapsedUntilLayout = false;
+            }
+            updateTouchableRegion();
         }
     }
 
     /**
+     * Calculates the touch region needed for heads up notifications, taking into consideration
+     * any existing display cutouts (notch)
+     * @return the heads up notification touch area
+     */
+    Region calculateTouchableRegion() {
+        // Update touchable region for HeadsUp notifications
+        final Region headsUpTouchableRegion = mHeadsUpManager.getTouchableRegion();
+        if (headsUpTouchableRegion != null) {
+            mTouchableRegion.set(headsUpTouchableRegion);
+        } else {
+            // If there aren't any HUNs, update the touch region to the status bar
+            // width/height, potentially adjusting for a display cutout (notch)
+            mTouchableRegion.set(0, 0, mNotificationShadeWindowView.getWidth(),
+                    mStatusBarHeight);
+            updateRegionForNotch(mTouchableRegion);
+        }
+
+        // Update touchable region for bubbles
+        Rect bubbleRect = mBubbleController.getTouchableRegion();
+        if (bubbleRect != null) {
+            mTouchableRegion.union(bubbleRect);
+        }
+        return mTouchableRegion;
+    }
+
+    private void initResources() {
+        Resources resources = mContext.getResources();
+        mDisplayCutoutTouchableRegionSize = resources.getDimensionPixelSize(
+                com.android.internal.R.dimen.display_cutout_touchable_region_size);
+        mStatusBarHeight =
+                resources.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height);
+    }
+
+    /**
      * Set the touchable portion of the status bar based on what elements are visible.
      */
-    public void updateTouchableRegion() {
+    private void updateTouchableRegion() {
         boolean hasCutoutInset = (mNotificationShadeWindowView != null)
                 && (mNotificationShadeWindowView.getRootWindowInsets() != null)
                 && (mNotificationShadeWindowView.getRootWindowInsets().getDisplayCutout() != null);
-        boolean shouldObserve =
-                mHeadsUpManager.hasPinnedHeadsUp() || mHeadsUpManager.isHeadsUpGoingAway()
+        boolean shouldObserve = mHeadsUpManager.hasPinnedHeadsUp()
+                        || mHeadsUpManager.isHeadsUpGoingAway()
                         || mBubbleController.hasBubbles()
                         || mForceCollapsedUntilLayout
                         || hasCutoutInset
@@ -87,11 +208,11 @@
 
         if (shouldObserve) {
             mNotificationShadeWindowView.getViewTreeObserver()
-                    .addOnComputeInternalInsetsListener(this);
+                    .addOnComputeInternalInsetsListener(mOnComputeInternalInsetsListener);
             mNotificationShadeWindowView.requestLayout();
         } else {
             mNotificationShadeWindowView.getViewTreeObserver()
-                    .removeOnComputeInternalInsetsListener(this);
+                    .removeOnComputeInternalInsetsListener(mOnComputeInternalInsetsListener);
         }
         mShouldAdjustInsets = shouldObserve;
     }
@@ -99,7 +220,7 @@
     /**
      * Calls {@code updateTouchableRegion()} after a layout pass completes.
      */
-    public void updateTouchableRegionAfterLayout() {
+    private void updateTouchableRegionAfterLayout() {
         if (mNotificationPanelView != null) {
             mForceCollapsedUntilLayout = true;
             mNotificationPanelView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@@ -116,34 +237,38 @@
         }
     }
 
-    /**
-     * Notify that the status bar panel gets expanded or collapsed.
-     *
-     * @param isExpanded True to notify expanded, false to notify collapsed.
-     */
-    public void setIsStatusBarExpanded(boolean isExpanded) {
-        if (isExpanded != mIsStatusBarExpanded) {
-            mIsStatusBarExpanded = isExpanded;
-            if (isExpanded) {
-                // make sure our state is sane
-                mForceCollapsedUntilLayout = false;
-            }
-            updateTouchableRegion();
+    private void updateRegionForNotch(Region touchableRegion) {
+        WindowInsets windowInsets = mNotificationShadeWindowView.getRootWindowInsets();
+        if (windowInsets == null) {
+            Log.w(TAG, "StatusBarWindowView is not attached.");
+            return;
         }
-    }
-
-    @Override
-    public void onComputeInternalInsets(ViewTreeObserver.InternalInsetsInfo info) {
-        if (mIsStatusBarExpanded || mStatusBar.isBouncerShowing()) {
-            // The touchable region is always the full area when expanded
+        DisplayCutout cutout = windowInsets.getDisplayCutout();
+        if (cutout == null) {
             return;
         }
 
-        mHeadsUpManager.updateTouchableRegion(info);
-
-        Rect bubbleRect = mBubbleController.getTouchableRegion();
-        if (bubbleRect != null) {
-            info.touchableRegion.union(bubbleRect);
-        }
+        // Expand touchable region such that we also catch touches that just start below the notch
+        // area.
+        Rect bounds = new Rect();
+        ScreenDecorations.DisplayCutoutView.boundsFromDirection(cutout, Gravity.TOP, bounds);
+        bounds.offset(0, mDisplayCutoutTouchableRegionSize);
+        touchableRegion.union(bounds);
     }
+
+    private final OnComputeInternalInsetsListener mOnComputeInternalInsetsListener =
+            new OnComputeInternalInsetsListener() {
+        @Override
+        public void onComputeInternalInsets(ViewTreeObserver.InternalInsetsInfo info) {
+            if (mIsStatusBarExpanded || mStatusBar.isBouncerShowing()) {
+                // The touchable region is always the full area when expanded
+                return;
+            }
+
+            // Update touch insets to include any area needed for touching features that live in
+            // the status bar (ie: heads up notifications or bubbles)
+            info.setTouchableInsets(ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION);
+            info.touchableRegion.set(calculateTouchableRegion());
+        }
+    };
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
index da5df6a..22bf513 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
@@ -16,8 +16,21 @@
 
 package com.android.systemui.statusbar.phone;
 
+import static android.view.WindowInsets.Type.systemBars;
+
+import static com.android.systemui.ScreenDecorations.DisplayCutoutView.boundsFromDirection;
+
 import android.content.Context;
+import android.graphics.Insets;
+import android.graphics.Point;
+import android.graphics.Rect;
 import android.util.AttributeSet;
+import android.util.Pair;
+import android.view.Display;
+import android.view.DisplayCutout;
+import android.view.Gravity;
+import android.view.View;
+import android.view.WindowInsets;
 import android.widget.FrameLayout;
 
 /**
@@ -28,7 +41,118 @@
     public static final String TAG = "PhoneStatusBarWindowView";
     public static final boolean DEBUG = StatusBar.DEBUG;
 
+    private int mLeftInset = 0;
+    private int mRightInset = 0;
+    private int mTopInset = 0;
+
     public StatusBarWindowView(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
+
+    @Override
+    public WindowInsets onApplyWindowInsets(WindowInsets windowInsets) {
+        final Insets insets = windowInsets.getInsetsIgnoringVisibility(systemBars());
+        mLeftInset = 0;
+        mRightInset = 0;
+        mTopInset = 0;
+        DisplayCutout displayCutout = getRootWindowInsets().getDisplayCutout();
+        if (displayCutout != null) {
+            mTopInset = displayCutout.getWaterfallInsets().top;
+            mLeftInset = displayCutout.getSafeInsetLeft();
+            mRightInset = displayCutout.getSafeInsetRight();
+        }
+        mLeftInset = Math.max(insets.left, mLeftInset);
+        mRightInset = Math.max(insets.right, mRightInset);
+        applyMargins();
+        return windowInsets;
+    }
+
+    private void applyMargins() {
+        final int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            View child = getChildAt(i);
+            if (child.getLayoutParams() instanceof LayoutParams) {
+                LayoutParams lp = (LayoutParams) child.getLayoutParams();
+                if (lp.rightMargin != mRightInset || lp.leftMargin != mLeftInset
+                        || lp.topMargin != mTopInset) {
+                    lp.rightMargin = mRightInset;
+                    lp.leftMargin = mLeftInset;
+                    lp.topMargin = mTopInset;
+                    child.requestLayout();
+                }
+            }
+        }
+    }
+
+    /**
+     * Compute the padding needed for status bar related views, e.g., PhoneStatusBar,
+     * QuickStatusBarHeader and KeyguardStatusBarView).
+     *
+     * @param cutout
+     * @param cornerCutoutPadding
+     * @param roundedCornerContentPadding
+     * @return
+     */
+    public static Pair<Integer, Integer> paddingNeededForCutoutAndRoundedCorner(
+            DisplayCutout cutout, Pair<Integer, Integer> cornerCutoutPadding,
+            int roundedCornerContentPadding) {
+        if (cutout == null) {
+            return new Pair<>(roundedCornerContentPadding, roundedCornerContentPadding);
+        }
+
+        // compute the padding needed for corner cutout.
+        final int leftMargin = cutout.getSafeInsetLeft();
+        final int rightMargin = cutout.getSafeInsetRight();
+        int leftCornerCutoutPadding = 0;
+        int rightCornerCutoutPadding = 0;
+        if (cornerCutoutPadding != null) {
+            if (cornerCutoutPadding.first > leftMargin) {
+                leftCornerCutoutPadding = cornerCutoutPadding.first - leftMargin;
+            }
+            if (cornerCutoutPadding.second > rightMargin) {
+                rightCornerCutoutPadding = cornerCutoutPadding.second - rightMargin;
+            }
+        }
+
+        // compute the padding needed for rounded corner
+        int leftRoundedCornerPadding = 0;
+        int rightRoundedCornerPadding = 0;
+        if (roundedCornerContentPadding > leftMargin) {
+            leftRoundedCornerPadding = roundedCornerContentPadding - leftMargin;
+        }
+        if (roundedCornerContentPadding > rightMargin) {
+            rightRoundedCornerPadding = roundedCornerContentPadding - rightMargin;
+        }
+
+        return new Pair<>(
+                Math.max(leftCornerCutoutPadding, leftRoundedCornerPadding),
+                Math.max(rightCornerCutoutPadding, rightRoundedCornerPadding));
+    }
+
+    /**
+     * Compute the corner cutout margins
+     *
+     * @param cutout
+     * @param display
+     * @return
+     */
+    public static Pair<Integer, Integer> cornerCutoutMargins(DisplayCutout cutout,
+            Display display) {
+        if (cutout == null) {
+            return null;
+        }
+        Point size = new Point();
+        display.getRealSize(size);
+
+        Rect bounds = new Rect();
+        boundsFromDirection(cutout, Gravity.TOP, bounds);
+
+        if (bounds.left <= 0) {
+            return new Pair<>(bounds.right, 0);
+        }
+        if (bounds.right >= size.x) {
+            return new Pair<>(0, size.x - bounds.left);
+        }
+        return null;
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneDependenciesModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneDependenciesModule.java
new file mode 100644
index 0000000..fcf698c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneDependenciesModule.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone.dagger;
+
+import android.content.Context;
+import android.os.Handler;
+import android.view.IWindowManager;
+
+import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.statusbar.NotificationRemoteInputManager;
+import com.android.systemui.statusbar.notification.row.RowContentBindStage;
+import com.android.systemui.statusbar.phone.AutoHideController;
+import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper;
+import com.android.systemui.statusbar.phone.StatusBar;
+
+import javax.inject.Singleton;
+
+import dagger.Module;
+import dagger.Provides;
+
+/**
+ * This module provides instances needed to construct {@link StatusBar}. These are moved to this
+ * separate from {@link StatusBarPhoneModule} module so that components that wish to build their own
+ * version of StatusBar can include just dependencies, without injecting StatusBar itself.
+ */
+@Module
+public interface StatusBarPhoneDependenciesModule {
+    /** */
+    @Singleton
+    @Provides
+    static AutoHideController newAutoHideController(Context context,
+            @Main Handler handler,
+            NotificationRemoteInputManager notificationRemoteInputManager,
+            IWindowManager iWindowManager) {
+        return new AutoHideController(context, handler, notificationRemoteInputManager,
+                iWindowManager);
+    }
+
+    /** */
+    @Singleton
+    @Provides
+    static NotificationGroupAlertTransferHelper provideNotificationGroupAlertTransferHelper(
+            RowContentBindStage bindStage) {
+        return new NotificationGroupAlertTransferHelper(bindStage);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java
new file mode 100644
index 0000000..e64f821
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.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.systemui.statusbar.phone.dagger;
+
+import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME;
+
+import android.content.Context;
+import android.os.Handler;
+import android.os.PowerManager;
+import android.util.DisplayMetrics;
+
+import androidx.annotation.Nullable;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.ViewMediatorCallback;
+import com.android.systemui.InitController;
+import com.android.systemui.assist.AssistManager;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.bubbles.BubbleController;
+import com.android.systemui.colorextraction.SysuiColorExtractor;
+import com.android.systemui.dagger.qualifiers.UiBackground;
+import com.android.systemui.keyguard.DismissCallbackRegistry;
+import com.android.systemui.keyguard.KeyguardViewMediator;
+import com.android.systemui.keyguard.ScreenLifecycle;
+import com.android.systemui.keyguard.WakefulnessLifecycle;
+import com.android.systemui.plugins.DarkIconDispatcher;
+import com.android.systemui.plugins.FalsingManager;
+import com.android.systemui.plugins.PluginDependencyProvider;
+import com.android.systemui.recents.Recents;
+import com.android.systemui.recents.ScreenPinningRequest;
+import com.android.systemui.shared.plugins.PluginManager;
+import com.android.systemui.stackdivider.Divider;
+import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.NavigationBarController;
+import com.android.systemui.statusbar.NotificationLockscreenUserManager;
+import com.android.systemui.statusbar.NotificationMediaManager;
+import com.android.systemui.statusbar.NotificationRemoteInputManager;
+import com.android.systemui.statusbar.NotificationViewHierarchyManager;
+import com.android.systemui.statusbar.PulseExpansionHandler;
+import com.android.systemui.statusbar.SuperStatusBarViewFactory;
+import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.VibratorHelper;
+import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier;
+import com.android.systemui.statusbar.notification.DynamicPrivacyController;
+import com.android.systemui.statusbar.notification.NotificationAlertingManager;
+import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
+import com.android.systemui.statusbar.notification.VisualStabilityManager;
+import com.android.systemui.statusbar.notification.init.NotificationsController;
+import com.android.systemui.statusbar.notification.logging.NotificationLogger;
+import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
+import com.android.systemui.statusbar.phone.AutoHideController;
+import com.android.systemui.statusbar.phone.BiometricUnlockController;
+import com.android.systemui.statusbar.phone.DozeParameters;
+import com.android.systemui.statusbar.phone.DozeScrimController;
+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.KeyguardDismissUtil;
+import com.android.systemui.statusbar.phone.KeyguardLiftController;
+import com.android.systemui.statusbar.phone.LightBarController;
+import com.android.systemui.statusbar.phone.LightsOutNotifController;
+import com.android.systemui.statusbar.phone.LockscreenLockIconController;
+import com.android.systemui.statusbar.phone.LockscreenWallpaper;
+import com.android.systemui.statusbar.phone.NotificationGroupManager;
+import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
+import com.android.systemui.statusbar.phone.ScrimController;
+import com.android.systemui.statusbar.phone.ShadeController;
+import com.android.systemui.statusbar.phone.StatusBar;
+import com.android.systemui.statusbar.phone.StatusBarIconController;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter;
+import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager;
+import com.android.systemui.statusbar.policy.BatteryController;
+import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.DeviceProvisionedController;
+import com.android.systemui.statusbar.policy.ExtensionController;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.statusbar.policy.NetworkController;
+import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
+import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
+import com.android.systemui.statusbar.policy.UserSwitcherController;
+import com.android.systemui.volume.VolumeComponent;
+
+import java.util.Optional;
+import java.util.concurrent.Executor;
+
+import javax.inject.Named;
+import javax.inject.Provider;
+import javax.inject.Singleton;
+
+import dagger.Lazy;
+import dagger.Module;
+import dagger.Provides;
+
+/**
+ * Dagger Module providing {@link StatusBar}.
+ */
+@Module(includes = {StatusBarPhoneDependenciesModule.class})
+public interface StatusBarPhoneModule {
+    /**
+     * Provides our instance of StatusBar which is considered optional.
+     */
+    @Provides
+    @Singleton
+    static StatusBar provideStatusBar(
+            Context context,
+            NotificationsController notificationsController,
+            LightBarController lightBarController,
+            AutoHideController autoHideController,
+            KeyguardUpdateMonitor keyguardUpdateMonitor,
+            StatusBarIconController statusBarIconController,
+            PulseExpansionHandler pulseExpansionHandler,
+            NotificationWakeUpCoordinator notificationWakeUpCoordinator,
+            KeyguardBypassController keyguardBypassController,
+            KeyguardStateController keyguardStateController,
+            HeadsUpManagerPhone headsUpManagerPhone,
+            DynamicPrivacyController dynamicPrivacyController,
+            BypassHeadsUpNotifier bypassHeadsUpNotifier,
+            FalsingManager falsingManager,
+            BroadcastDispatcher broadcastDispatcher,
+            RemoteInputQuickSettingsDisabler remoteInputQuickSettingsDisabler,
+            NotificationGutsManager notificationGutsManager,
+            NotificationLogger notificationLogger,
+            NotificationInterruptionStateProvider notificationInterruptionStateProvider,
+            NotificationViewHierarchyManager notificationViewHierarchyManager,
+            KeyguardViewMediator keyguardViewMediator,
+            NotificationAlertingManager notificationAlertingManager,
+            DisplayMetrics displayMetrics,
+            MetricsLogger metricsLogger,
+            @UiBackground Executor uiBgExecutor,
+            NotificationMediaManager notificationMediaManager,
+            NotificationLockscreenUserManager lockScreenUserManager,
+            NotificationRemoteInputManager remoteInputManager,
+            UserSwitcherController userSwitcherController,
+            NetworkController networkController,
+            BatteryController batteryController,
+            SysuiColorExtractor colorExtractor,
+            ScreenLifecycle screenLifecycle,
+            WakefulnessLifecycle wakefulnessLifecycle,
+            SysuiStatusBarStateController statusBarStateController,
+            VibratorHelper vibratorHelper,
+            BubbleController bubbleController,
+            NotificationGroupManager groupManager,
+            VisualStabilityManager visualStabilityManager,
+            DeviceProvisionedController deviceProvisionedController,
+            NavigationBarController navigationBarController,
+            Lazy<AssistManager> assistManagerLazy,
+            ConfigurationController configurationController,
+            NotificationShadeWindowController notificationShadeWindowController,
+            LockscreenLockIconController lockscreenLockIconController,
+            DozeParameters dozeParameters,
+            ScrimController scrimController,
+            @Nullable KeyguardLiftController keyguardLiftController,
+            Lazy<LockscreenWallpaper> lockscreenWallpaperLazy,
+            Lazy<BiometricUnlockController> biometricUnlockControllerLazy,
+            DozeServiceHost dozeServiceHost,
+            PowerManager powerManager,
+            ScreenPinningRequest screenPinningRequest,
+            DozeScrimController dozeScrimController,
+            VolumeComponent volumeComponent,
+            CommandQueue commandQueue,
+            Optional<Recents> recentsOptional,
+            Provider<StatusBarComponent.Builder> statusBarComponentBuilder,
+            PluginManager pluginManager,
+            Optional<Divider> dividerOptional,
+            LightsOutNotifController lightsOutNotifController,
+            StatusBarNotificationActivityStarter.Builder
+                    statusBarNotificationActivityStarterBuilder,
+            ShadeController shadeController,
+            SuperStatusBarViewFactory superStatusBarViewFactory,
+            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
+            ViewMediatorCallback viewMediatorCallback,
+            InitController initController,
+            DarkIconDispatcher darkIconDispatcher,
+            @Named(TIME_TICK_HANDLER_NAME) Handler timeTickHandler,
+            PluginDependencyProvider pluginDependencyProvider,
+            KeyguardDismissUtil keyguardDismissUtil,
+            ExtensionController extensionController,
+            UserInfoControllerImpl userInfoControllerImpl,
+            DismissCallbackRegistry dismissCallbackRegistry,
+            StatusBarTouchableRegionManager statusBarTouchableRegionManager) {
+        return new StatusBar(
+                context,
+                notificationsController,
+                lightBarController,
+                autoHideController,
+                keyguardUpdateMonitor,
+                statusBarIconController,
+                pulseExpansionHandler,
+                notificationWakeUpCoordinator,
+                keyguardBypassController,
+                keyguardStateController,
+                headsUpManagerPhone,
+                dynamicPrivacyController,
+                bypassHeadsUpNotifier,
+                falsingManager,
+                broadcastDispatcher,
+                remoteInputQuickSettingsDisabler,
+                notificationGutsManager,
+                notificationLogger,
+                notificationInterruptionStateProvider,
+                notificationViewHierarchyManager,
+                keyguardViewMediator,
+                notificationAlertingManager,
+                displayMetrics,
+                metricsLogger,
+                uiBgExecutor,
+                notificationMediaManager,
+                lockScreenUserManager,
+                remoteInputManager,
+                userSwitcherController,
+                networkController,
+                batteryController,
+                colorExtractor,
+                screenLifecycle,
+                wakefulnessLifecycle,
+                statusBarStateController,
+                vibratorHelper,
+                bubbleController,
+                groupManager,
+                visualStabilityManager,
+                deviceProvisionedController,
+                navigationBarController,
+                assistManagerLazy,
+                configurationController,
+                notificationShadeWindowController,
+                lockscreenLockIconController,
+                dozeParameters,
+                scrimController,
+                keyguardLiftController,
+                lockscreenWallpaperLazy,
+                biometricUnlockControllerLazy,
+                dozeServiceHost,
+                powerManager,
+                screenPinningRequest,
+                dozeScrimController,
+                volumeComponent,
+                commandQueue,
+                recentsOptional,
+                statusBarComponentBuilder,
+                pluginManager,
+                dividerOptional,
+                lightsOutNotifController,
+                statusBarNotificationActivityStarterBuilder,
+                shadeController,
+                superStatusBarViewFactory,
+                statusBarKeyguardViewManager,
+                viewMediatorCallback,
+                initController,
+                darkIconDispatcher,
+                timeTickHandler,
+                pluginDependencyProvider,
+                keyguardDismissUtil,
+                extensionController,
+                userInfoControllerImpl,
+                dismissCallbackRegistry,
+                statusBarTouchableRegionManager);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
index e1bb19a..97d348b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
@@ -111,30 +111,25 @@
     public void setWifiIndicators(final boolean enabled, final IconState statusIcon,
             final IconState qsIcon, final boolean activityIn, final boolean activityOut,
             final String description, boolean isTransient, String secondaryLabel) {
-        post(new Runnable() {
-            @Override
-            public void run() {
-                for (SignalCallback callback : mSignalCallbacks) {
-                    callback.setWifiIndicators(enabled, statusIcon, qsIcon, activityIn, activityOut,
-                            description, isTransient, secondaryLabel);
-                }
+        post(() -> {
+            for (SignalCallback callback : mSignalCallbacks) {
+                callback.setWifiIndicators(enabled, statusIcon, qsIcon, activityIn, activityOut,
+                        description, isTransient, secondaryLabel);
             }
         });
     }
 
     @Override
     public void setMobileDataIndicators(final IconState statusIcon, final IconState qsIcon,
-            final int statusType, final int qsType,final boolean activityIn,
-            final boolean activityOut, final String typeContentDescription,
-            final String description, final boolean isWide, final int subId, boolean roaming) {
-        post(new Runnable() {
-            @Override
-            public void run() {
-                for (SignalCallback signalCluster : mSignalCallbacks) {
-                    signalCluster.setMobileDataIndicators(statusIcon, qsIcon, statusType, qsType,
-                            activityIn, activityOut, typeContentDescription, description, isWide,
-                            subId, roaming);
-                }
+            final int statusType, final int qsType, final boolean activityIn,
+            final boolean activityOut, final CharSequence typeContentDescription,
+            CharSequence typeContentDescriptionHtml, final CharSequence description,
+            final boolean isWide, final int subId, boolean roaming) {
+        post(() -> {
+            for (SignalCallback signalCluster : mSignalCallbacks) {
+                signalCluster.setMobileDataIndicators(statusIcon, qsIcon, statusType, qsType,
+                        activityIn, activityOut, typeContentDescription,
+                        typeContentDescriptionHtml, description, isWide, subId, roaming);
             }
         });
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/EthernetSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/EthernetSignalController.java
index 159bd41..4fbf5ff 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/EthernetSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/EthernetSignalController.java
@@ -49,7 +49,7 @@
     @Override
     public void notifyListeners(SignalCallback callback) {
         boolean ethernetVisible = mCurrentState.connected;
-        String contentDescription = getStringIfExists(getContentDescription());
+        String contentDescription = getTextIfExists(getContentDescription()).toString();
 
         // TODO: wire up data transfer using WifiSignalPoller.
         callback.setEthernetIndicators(new IconState(ethernetVisible, getCurrentIconId(),
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotController.java
index 830b50e..8231f8b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotController.java
@@ -30,5 +30,6 @@
 
     interface Callback {
         void onHotspotChanged(boolean enabled, int numDevices);
+        default void onHotspotAvailabilityChanged(boolean available) {}
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java
index df9c3f4..d090404 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java
@@ -19,6 +19,7 @@
 import android.app.ActivityManager;
 import android.content.Context;
 import android.net.ConnectivityManager;
+import android.net.TetheringManager;
 import android.net.wifi.WifiClient;
 import android.net.wifi.WifiManager;
 import android.os.Handler;
@@ -26,6 +27,8 @@
 import android.os.UserManager;
 import android.util.Log;
 
+import com.android.internal.util.ConcurrentUtils;
+import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.dagger.qualifiers.Main;
 
 import java.io.FileDescriptor;
@@ -46,36 +49,63 @@
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     private final ArrayList<Callback> mCallbacks = new ArrayList<>();
-    private final ConnectivityManager mConnectivityManager;
+    private final TetheringManager mTetheringManager;
     private final WifiManager mWifiManager;
     private final Handler mMainHandler;
     private final Context mContext;
 
     private int mHotspotState;
     private volatile int mNumConnectedDevices;
+    private volatile boolean mIsTetheringSupported;
+    private volatile boolean mHasTetherableWifiRegexs;
     private boolean mWaitingForTerminalState;
 
+    private TetheringManager.TetheringEventCallback mTetheringCallback =
+            new TetheringManager.TetheringEventCallback() {
+                @Override
+                public void onTetheringSupported(boolean supported) {
+                    super.onTetheringSupported(supported);
+                    if (mIsTetheringSupported != supported) {
+                        mIsTetheringSupported = supported;
+                        fireHotspotAvailabilityChanged();
+                    }
+                }
+
+                @Override
+                public void onTetherableInterfaceRegexpsChanged(
+                        TetheringManager.TetheringInterfaceRegexps reg) {
+                    super.onTetherableInterfaceRegexpsChanged(reg);
+                    final boolean newValue = reg.getTetherableWifiRegexs().size() != 0;
+                    if (mHasTetherableWifiRegexs != newValue) {
+                        mHasTetherableWifiRegexs = newValue;
+                        fireHotspotAvailabilityChanged();
+                    }
+                }
+            };
+
     /**
      * Controller used to retrieve information related to a hotspot.
      */
     @Inject
-    public HotspotControllerImpl(Context context, @Main Handler mainHandler) {
+    public HotspotControllerImpl(Context context, @Main Handler mainHandler,
+            @Background Handler backgroundHandler) {
         mContext = context;
-        mConnectivityManager =
-                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+        mTetheringManager = context.getSystemService(TetheringManager.class);
         mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
         mMainHandler = mainHandler;
+        mTetheringManager.registerTetheringEventCallback(
+                new HandlerExecutor(backgroundHandler), mTetheringCallback);
     }
 
     @Override
     public boolean isHotspotSupported() {
-        return mConnectivityManager.isTetheringSupported()
-                && mConnectivityManager.getTetherableWifiRegexs().length != 0
+        return mIsTetheringSupported && mHasTetherableWifiRegexs
                 && UserManager.get(mContext).isUserAdmin(ActivityManager.getCurrentUser());
     }
 
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
         pw.println("HotspotController state:");
+        pw.print("  available="); pw.println(isHotspotSupported());
         pw.print("  mHotspotState="); pw.println(stateToString(mHotspotState));
         pw.print("  mNumConnectedDevices="); pw.println(mNumConnectedDevices);
         pw.print("  mWaitingForTerminalState="); pw.println(mWaitingForTerminalState);
@@ -152,17 +182,18 @@
         if (enabled) {
             mWaitingForTerminalState = true;
             if (DEBUG) Log.d(TAG, "Starting tethering");
-            mConnectivityManager.startTethering(ConnectivityManager.TETHERING_WIFI, false,
-                    new ConnectivityManager.OnStartTetheringCallback() {
+            mTetheringManager.startTethering(ConnectivityManager.TETHERING_WIFI,
+                    ConcurrentUtils.DIRECT_EXECUTOR,
+                    new TetheringManager.StartTetheringCallback() {
                         @Override
-                        public void onTetheringFailed() {
+                        public void onTetheringFailed(final int result) {
                             if (DEBUG) Log.d(TAG, "onTetheringFailed");
                             maybeResetSoftApState();
                             fireHotspotChangedCallback();
                         }
                     });
         } else {
-            mConnectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI);
+            mTetheringManager.stopTethering(ConnectivityManager.TETHERING_WIFI);
         }
     }
 
@@ -177,10 +208,25 @@
      * (as it can be blocked).
      */
     private void fireHotspotChangedCallback() {
+        List<Callback> list;
         synchronized (mCallbacks) {
-            for (Callback callback : mCallbacks) {
-                callback.onHotspotChanged(isHotspotEnabled(), mNumConnectedDevices);
-            }
+            list = new ArrayList<>(mCallbacks);
+        }
+        for (Callback callback : list) {
+            callback.onHotspotChanged(isHotspotEnabled(), mNumConnectedDevices);
+        }
+    }
+
+    /**
+     * Sends a hotspot available changed callback.
+     */
+    private void fireHotspotAvailabilityChanged() {
+        List<Callback> list;
+        synchronized (mCallbacks) {
+            list = new ArrayList<>(mCallbacks);
+        }
+        for (Callback callback : list) {
+            callback.onHotspotAvailabilityChanged(isHotspotSupported());
         }
     }
 
@@ -206,7 +252,7 @@
         switch (mHotspotState) {
             case WifiManager.WIFI_AP_STATE_FAILED:
                 // TODO(b/110697252): must be called to reset soft ap state after failure
-                mConnectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI);
+                mTetheringManager.stopTethering(ConnectivityManager.TETHERING_WIFI);
                 // Fall through
             case WifiManager.WIFI_AP_STATE_ENABLED:
             case WifiManager.WIFI_AP_STATE_DISABLED:
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserDetailItemView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserDetailItemView.java
new file mode 100644
index 0000000..07433e1
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserDetailItemView.java
@@ -0,0 +1,51 @@
+/*
+ * 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.policy;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import com.android.systemui.R;
+import com.android.systemui.qs.tiles.UserDetailItemView;
+
+/**
+ * Displays a user on the keyguard user switcher.
+ */
+public class KeyguardUserDetailItemView extends UserDetailItemView {
+
+    public KeyguardUserDetailItemView(Context context) {
+        this(context, null);
+    }
+
+    public KeyguardUserDetailItemView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public KeyguardUserDetailItemView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public KeyguardUserDetailItemView(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    protected int getFontSizeDimen() {
+        return R.dimen.kg_user_switcher_text_size;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
index 28ba125..cebcf76 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
@@ -15,30 +15,25 @@
  */
 package com.android.systemui.statusbar.policy;
 
-import static android.telephony.AccessNetworkConstants.TRANSPORT_TYPE_WWAN;
-import static android.telephony.NetworkRegistrationInfo.DOMAIN_PS;
-
 import android.content.Context;
 import android.content.Intent;
 import android.database.ContentObserver;
 import android.net.NetworkCapabilities;
 import android.os.Handler;
 import android.os.Looper;
-import android.os.Message;
 import android.provider.Settings.Global;
-import android.telephony.AccessNetworkConstants;
 import android.telephony.Annotation;
 import android.telephony.CdmaEriInformation;
 import android.telephony.CellSignalStrength;
 import android.telephony.CellSignalStrengthCdma;
-import android.telephony.DataSpecificRegistrationInfo;
-import android.telephony.NetworkRegistrationInfo;
+import android.telephony.DisplayInfo;
 import android.telephony.PhoneStateListener;
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
+import android.text.Html;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -59,16 +54,10 @@
 import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.Executor;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 
 public class MobileSignalController extends SignalController<
         MobileSignalController.MobileState, MobileSignalController.MobileIconGroup> {
-
-    // The message to display Nr5G icon gracfully by CarrierConfig timeout
-    private static final int MSG_DISPLAY_GRACE = 1;
-
     private final TelephonyManager mPhone;
     private final SubscriptionDefaults mDefaults;
     private final String mNetworkNameDefault;
@@ -85,19 +74,15 @@
     // Since some pieces of the phone state are interdependent we store it locally,
     // this could potentially become part of MobileState for simplification/complication
     // of code.
-    private int mDataNetType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
-    private boolean mCA = false;
-    private boolean mCAPlus = false;
     private int mDataState = TelephonyManager.DATA_DISCONNECTED;
+    private DisplayInfo mDisplayInfo = new DisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
+            DisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
     private ServiceState mServiceState;
     private SignalStrength mSignalStrength;
     private MobileIconGroup mDefaultIcons;
     private Config mConfig;
-    private final Handler mDisplayGraceHandler;
     @VisibleForTesting
     boolean mInflateSignalStrengths = false;
-    @VisibleForTesting
-    boolean mIsShowingIconGracefully = false;
 
     // TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't
     // need listener lists anymore.
@@ -114,9 +99,10 @@
         mDefaults = defaults;
         mSubscriptionInfo = info;
         mPhoneStateListener = new MobilePhoneStateListener((new Handler(receiverLooper))::post);
-        mNetworkNameSeparator = getStringIfExists(R.string.status_bar_network_name_separator);
-        mNetworkNameDefault = getStringIfExists(
-                com.android.internal.R.string.lockscreen_carrier_default);
+        mNetworkNameSeparator = getTextIfExists(R.string.status_bar_network_name_separator)
+                .toString();
+        mNetworkNameDefault = getTextIfExists(
+                com.android.internal.R.string.lockscreen_carrier_default).toString();
 
         mapIconSets();
 
@@ -134,16 +120,6 @@
                 updateTelephony();
             }
         };
-
-        mDisplayGraceHandler = new Handler(receiverLooper) {
-            @Override
-            public void handleMessage(Message msg) {
-                if (msg.what == MSG_DISPLAY_GRACE) {
-                    mIsShowingIconGracefully = false;
-                    updateTelephony();
-                }
-            }
-        };
     }
 
     public void setConfiguration(Config config) {
@@ -153,10 +129,6 @@
         updateTelephony();
     }
 
-    public int getDataContentDescription() {
-        return getIcons().mDataContentDescription;
-    }
-
     public void setAirplaneMode(boolean airplaneMode) {
         mCurrentState.airplaneMode = airplaneMode;
         notifyListenersIfNecessary();
@@ -192,7 +164,8 @@
                         | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
                         | PhoneStateListener.LISTEN_DATA_ACTIVITY
                         | PhoneStateListener.LISTEN_CARRIER_NETWORK_CHANGE
-                        | PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE);
+                        | PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE
+                        | PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
         mContext.getContentResolver().registerContentObserver(Global.getUriFor(Global.MOBILE_DATA),
                 true, mObserver);
         mContext.getContentResolver().registerContentObserver(Global.getUriFor(
@@ -270,52 +243,60 @@
             mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_LTE),
                     TelephonyIcons.FOUR_G);
             if (mConfig.hideLtePlus) {
-                mNetworkToIconLookup.put(toIconKeyCA(TelephonyManager.NETWORK_TYPE_LTE),
-                        TelephonyIcons.FOUR_G);
+                mNetworkToIconLookup.put(toDisplayIconKey(
+                        DisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA), TelephonyIcons.FOUR_G);
             } else {
-                mNetworkToIconLookup.put(toIconKeyCA(TelephonyManager.NETWORK_TYPE_LTE),
-                        TelephonyIcons.FOUR_G_PLUS);
+                mNetworkToIconLookup.put(toDisplayIconKey(
+                        DisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA), TelephonyIcons.FOUR_G_PLUS);
             }
         } else {
             mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_LTE),
                     TelephonyIcons.LTE);
             if (mConfig.hideLtePlus) {
-                mNetworkToIconLookup.put(toIconKeyCA(TelephonyManager.NETWORK_TYPE_LTE),
-                        TelephonyIcons.LTE);
+                mNetworkToIconLookup.put(toDisplayIconKey(
+                        DisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA), TelephonyIcons.LTE);
             } else {
-                mNetworkToIconLookup.put(toIconKeyCA(TelephonyManager.NETWORK_TYPE_LTE),
-                        TelephonyIcons.LTE_PLUS);
+                mNetworkToIconLookup.put(toDisplayIconKey(
+                        DisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA), TelephonyIcons.LTE_PLUS);
             }
         }
-        mNetworkToIconLookup.put(toIconKeyCAPlus(TelephonyManager.NETWORK_TYPE_LTE),
-                TelephonyIcons.LTE_CA_5G_E);
         mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_IWLAN),
                 TelephonyIcons.WFC);
+        mNetworkToIconLookup.put(toDisplayIconKey(
+                DisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO), TelephonyIcons.LTE_CA_5G_E);
+        mNetworkToIconLookup.put(toDisplayIconKey(
+                DisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA), TelephonyIcons.NR_5G);
+        mNetworkToIconLookup.put(toDisplayIconKey(
+                DisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE), TelephonyIcons.NR_5G_PLUS);
     }
 
     private String getIconKey() {
-        if (mCA) {
-            return toIconKeyCA(mDataNetType);
-        } else if (mCAPlus) {
-            return toIconKeyCAPlus(mDataNetType);
+        if (mDisplayInfo.getOverrideNetworkType() == DisplayInfo.OVERRIDE_NETWORK_TYPE_NONE) {
+            return toIconKey(mDisplayInfo.getNetworkType());
         } else {
-            return toIconKey(mDataNetType);
+            return toDisplayIconKey(mDisplayInfo.getOverrideNetworkType());
         }
     }
 
-    // Some specific carriers have 5GE network which is special CA network.
-    private String toIconKeyCAPlus(@Annotation.NetworkType int networkType) {
-        return toIconKeyCA(networkType) + "_Plus";
-    }
-
-    private String toIconKeyCA(@Annotation.NetworkType int networkType) {
-        return toIconKey(networkType) + "_CA";
-    }
-
     private String toIconKey(@Annotation.NetworkType int networkType) {
         return Integer.toString(networkType);
     }
 
+    private String toDisplayIconKey(@Annotation.OverrideNetworkType int displayNetworkType) {
+        switch (displayNetworkType) {
+            case DisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA:
+                return toIconKey(TelephonyManager.NETWORK_TYPE_LTE) + "_CA";
+            case DisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO:
+                return toIconKey(TelephonyManager.NETWORK_TYPE_LTE) + "_CA_Plus";
+            case DisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA:
+                return "5G";
+            case DisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE:
+                return "5G_Plus";
+            default:
+                return "unsupported";
+        }
+    }
+
     private void updateInflateSignalStrength() {
         mInflateSignalStrengths = SignalStrengthUtil.shouldInflateSignalStrength(mContext,
                 mSubscriptionInfo.getSubscriptionId());
@@ -360,8 +341,14 @@
     public void notifyListeners(SignalCallback callback) {
         MobileIconGroup icons = getIcons();
 
-        String contentDescription = getStringIfExists(getContentDescription());
-        String dataContentDescription = getStringIfExists(icons.mDataContentDescription);
+        String contentDescription = getTextIfExists(getContentDescription()).toString();
+        CharSequence dataContentDescriptionHtml = getTextIfExists(icons.mDataContentDescription);
+
+        //TODO: Hacky
+        // The data content description can sometimes be shown in a text view and might come to us
+        // as HTML. Strip any styling here so that listeners don't have to care
+        CharSequence dataContentDescription = Html.fromHtml(
+                dataContentDescriptionHtml.toString(), 0).toString();
         if (mCurrentState.inetCondition == 0) {
             dataContentDescription = mContext.getString(R.string.data_connection_no_internet);
         }
@@ -376,7 +363,7 @@
 
         int qsTypeIcon = 0;
         IconState qsIcon = null;
-        String description = null;
+        CharSequence description = null;
         // Only send data sim callbacks to QS.
         if (mCurrentState.dataSim) {
             qsTypeIcon = (showDataIcon || mConfig.alwaysShowDataRatIcon) ? icons.mQsDataType : 0;
@@ -393,8 +380,9 @@
         showDataIcon &= mCurrentState.isDefault || dataDisabled;
         int typeIcon = (showDataIcon || mConfig.alwaysShowDataRatIcon) ? icons.mDataType : 0;
         callback.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, qsTypeIcon,
-                activityIn, activityOut, dataContentDescription, description, icons.mIsWide,
-                mSubscriptionInfo.getSubscriptionId(), mCurrentState.roaming);
+                activityIn, activityOut, dataContentDescription, dataContentDescriptionHtml,
+                description, icons.mIsWide, mSubscriptionInfo.getSubscriptionId(),
+                mCurrentState.roaming);
     }
 
     @Override
@@ -460,26 +448,6 @@
         }
     }
 
-    private boolean isCarrierSpecificDataIcon() {
-        if (mConfig.patternOfCarrierSpecificDataIcon == null
-                || mConfig.patternOfCarrierSpecificDataIcon.length() == 0) {
-            return false;
-        }
-
-        Pattern stringPattern = Pattern.compile(mConfig.patternOfCarrierSpecificDataIcon);
-        String[] operatorNames = new String[]{mServiceState.getOperatorAlphaLongRaw(),
-                mServiceState.getOperatorAlphaShortRaw()};
-        for (String opName : operatorNames) {
-            if (!TextUtils.isEmpty(opName)) {
-                Matcher matcher = stringPattern.matcher(opName);
-                if (matcher.find()) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
     /**
      * Updates the network's name based on incoming spn and plmn.
      */
@@ -533,18 +501,18 @@
     }
 
     /**
-     * Updates the current state based on mServiceState, mSignalStrength, mDataNetType,
-     * mDataState, and mSimState.  It should be called any time one of these is updated.
+     * Updates the current state based on mServiceState, mSignalStrength, mDataState,
+     * mDisplayInfo, and mSimState.  It should be called any time one of these is updated.
      * This will call listeners if necessary.
      */
     private final void updateTelephony() {
         if (DEBUG) {
             Log.d(mTag, "updateTelephonySignalStrength: hasService=" +
-                    Utils.isInService(mServiceState) + " ss=" + mSignalStrength);
+                    Utils.isInService(mServiceState) + " ss=" + mSignalStrength
+                    + " displayInfo=" + mDisplayInfo);
         }
         checkDefaultData();
-        mCurrentState.connected = Utils.isInService(mServiceState)
-                && mSignalStrength != null;
+        mCurrentState.connected = Utils.isInService(mServiceState) && mSignalStrength != null;
         if (mCurrentState.connected) {
             if (!mSignalStrength.isGsm() && mConfig.alwaysShowCdmaRssi) {
                 mCurrentState.level = getCdmaLevel();
@@ -553,17 +521,8 @@
             }
         }
 
-        // When the device is camped on a 5G Non-Standalone network, the data network type is still
-        // LTE. In this case, we first check which 5G icon should be shown.
-        MobileIconGroup nr5GIconGroup = getNr5GIconGroup();
-        if (mConfig.nrIconDisplayGracePeriodMs > 0) {
-            nr5GIconGroup = adjustNr5GIconGroupByDisplayGraceTime(nr5GIconGroup);
-        }
-
         String iconKey = getIconKey();
-        if (nr5GIconGroup != null) {
-            mCurrentState.iconGroup = nr5GIconGroup;
-        } else if (mNetworkToIconLookup.get(iconKey) != null) {
+        if (mNetworkToIconLookup.get(iconKey) != null) {
             mCurrentState.iconGroup = mNetworkToIconLookup.get(iconKey);
         } else {
             mCurrentState.iconGroup = mDefaultIcons;
@@ -575,8 +534,7 @@
         if (isCarrierNetworkChangeActive()) {
             mCurrentState.iconGroup = TelephonyIcons.CARRIER_NETWORK_CHANGE;
         } else if (isDataDisabled() && !mConfig.alwaysShowDataRatIcon) {
-            if (mSubscriptionInfo.getSubscriptionId()
-                    != mDefaults.getDefaultDataSubId()) {
+            if (mSubscriptionInfo.getSubscriptionId() != mDefaults.getDefaultDataSubId()) {
                 mCurrentState.iconGroup = TelephonyIcons.NOT_DEFAULT_DATA;
             } else {
                 mCurrentState.iconGroup = TelephonyIcons.DATA_DISABLED;
@@ -618,91 +576,6 @@
         notifyListenersIfNecessary();
     }
 
-    private int getNrState(ServiceState serviceState) {
-        NetworkRegistrationInfo nri = serviceState.getNetworkRegistrationInfo(
-                NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
-        if (nri != null) {
-            return nri.getNrState();
-        }
-        return NetworkRegistrationInfo.NR_STATE_NONE;
-    }
-
-    private MobileIconGroup getNr5GIconGroup() {
-        if (mServiceState == null) return null;
-
-        int nrState = getNrState(mServiceState);
-        if (nrState == NetworkRegistrationInfo.NR_STATE_CONNECTED) {
-            // Check if the NR 5G is using millimeter wave and the icon is config.
-            if (mServiceState.getNrFrequencyRange() == ServiceState.FREQUENCY_RANGE_MMWAVE) {
-                if (mConfig.nr5GIconMap.containsKey(Config.NR_CONNECTED_MMWAVE)) {
-                    return mConfig.nr5GIconMap.get(Config.NR_CONNECTED_MMWAVE);
-                }
-            }
-
-            // If NR 5G is not using millimeter wave or there is no icon for millimeter wave, we
-            // check the normal 5G icon.
-            if (mConfig.nr5GIconMap.containsKey(Config.NR_CONNECTED)) {
-                return mConfig.nr5GIconMap.get(Config.NR_CONNECTED);
-            }
-        } else if (nrState == NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED) {
-            if (mCurrentState.activityDormant) {
-                if (mConfig.nr5GIconMap.containsKey(Config.NR_NOT_RESTRICTED_RRC_IDLE)) {
-                    return mConfig.nr5GIconMap.get(Config.NR_NOT_RESTRICTED_RRC_IDLE);
-                }
-            } else {
-                if (mConfig.nr5GIconMap.containsKey(Config.NR_NOT_RESTRICTED_RRC_CON)) {
-                    return mConfig.nr5GIconMap.get(Config.NR_NOT_RESTRICTED_RRC_CON);
-                }
-            }
-        } else if (nrState == NetworkRegistrationInfo.NR_STATE_RESTRICTED) {
-            if (mConfig.nr5GIconMap.containsKey(Config.NR_RESTRICTED)) {
-                return mConfig.nr5GIconMap.get(Config.NR_RESTRICTED);
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * The function to adjust MobileIconGroup depend on CarrierConfig's time
-     * nextIconGroup == null imply next state could be 2G/3G/4G/4G+
-     * nextIconGroup != null imply next state will be 5G/5G+
-     * Flag : mIsShowingIconGracefully
-     * ---------------------------------------------------------------------------------
-     * |   Last state   |  Current state  | Flag |       Action                        |
-     * ---------------------------------------------------------------------------------
-     * |     5G/5G+     | 2G/3G/4G/4G+    | true | return previous IconGroup           |
-     * |     5G/5G+     |     5G/5G+      | true | Bypass                              |
-     * |  2G/3G/4G/4G+  |     5G/5G+      | true | Bypass                              |
-     * |  2G/3G/4G/4G+  | 2G/3G/4G/4G+    | true | Bypass                              |
-     * |  SS.connected  | SS.disconnect   |  T|F | Reset timer                         |
-     * |NETWORK_TYPE_LTE|!NETWORK_TYPE_LTE|  T|F | Reset timer                         |
-     * |     5G/5G+     | 2G/3G/4G/4G+    | false| Bypass                              |
-     * |     5G/5G+     |     5G/5G+      | false| Bypass                              |
-     * |  2G/3G/4G/4G+  |     5G/5G+      | false| SendMessageDelay(time), flag->true  |
-     * |  2G/3G/4G/4G+  | 2G/3G/4G/4G+    | false| Bypass                              |
-     * ---------------------------------------------------------------------------------
-     */
-    private MobileIconGroup adjustNr5GIconGroupByDisplayGraceTime(
-            MobileIconGroup candidateIconGroup) {
-        if (mIsShowingIconGracefully && candidateIconGroup == null) {
-            candidateIconGroup = (MobileIconGroup) mCurrentState.iconGroup;
-        } else if (!mIsShowingIconGracefully && candidateIconGroup != null
-                && mLastState.iconGroup != candidateIconGroup) {
-            mDisplayGraceHandler.sendMessageDelayed(
-                    mDisplayGraceHandler.obtainMessage(MSG_DISPLAY_GRACE),
-                    mConfig.nrIconDisplayGracePeriodMs);
-            mIsShowingIconGracefully = true;
-        } else if (!mCurrentState.connected || mDataState == TelephonyManager.DATA_DISCONNECTED
-                || candidateIconGroup == null) {
-            mDisplayGraceHandler.removeMessages(MSG_DISPLAY_GRACE);
-            mIsShowingIconGracefully = false;
-            candidateIconGroup = null;
-        }
-
-        return candidateIconGroup;
-    }
-
     boolean isDataDisabled() {
         return !mPhone.isDataConnectionEnabled();
     }
@@ -713,8 +586,6 @@
                 || activity == TelephonyManager.DATA_ACTIVITY_IN;
         mCurrentState.activityOut = activity == TelephonyManager.DATA_ACTIVITY_INOUT
                 || activity == TelephonyManager.DATA_ACTIVITY_OUT;
-        mCurrentState.activityDormant = activity == TelephonyManager.DATA_ACTIVITY_DORMANT;
-
         notifyListenersIfNecessary();
     }
 
@@ -724,13 +595,10 @@
         pw.println("  mSubscription=" + mSubscriptionInfo + ",");
         pw.println("  mServiceState=" + mServiceState + ",");
         pw.println("  mSignalStrength=" + mSignalStrength + ",");
+        pw.println("  mDisplayInfo=" + mDisplayInfo + ",");
         pw.println("  mDataState=" + mDataState + ",");
-        pw.println("  mDataNetType=" + mDataNetType + ",");
-        pw.println("  mCA=" + mCA + ",");
-        pw.println("  mCAPlus=" + mCAPlus + ",");
         pw.println("  mInflateSignalStrengths=" + mInflateSignalStrengths + ",");
         pw.println("  isDataDisabled=" + isDataDisabled() + ",");
-        pw.println("  mIsShowingIconGracefully=" + mIsShowingIconGracefully + ",");
     }
 
     class MobilePhoneStateListener extends PhoneStateListener {
@@ -755,14 +623,8 @@
                         + " dataState=" + state.getDataRegistrationState());
             }
             mServiceState = state;
-            if (mServiceState != null) {
-                NetworkRegistrationInfo regInfo = mServiceState.getNetworkRegistrationInfo(
-                        DOMAIN_PS, TRANSPORT_TYPE_WWAN);
-                if (regInfo != null) {
-                    updateDataNetType(regInfo.getAccessNetworkTechnology());
-                }
-            }
-            updateTelephony();
+            // onDisplayInfoChanged is invoked directly after onServiceStateChanged, so not calling
+            // updateTelephony() to prevent icon flickering in case of overrides.
         }
 
         @Override
@@ -772,35 +634,12 @@
                         + " type=" + networkType);
             }
             mDataState = state;
-            updateDataNetType(networkType);
+            if (networkType != mDisplayInfo.getNetworkType()) {
+                mDisplayInfo = new DisplayInfo(networkType, DisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
+            }
             updateTelephony();
         }
 
-        private void updateDataNetType(int networkType) {
-            mDataNetType = networkType;
-            mCA = false;
-            mCAPlus = false;
-            if (mDataNetType == TelephonyManager.NETWORK_TYPE_LTE) {
-                if (isCarrierSpecificDataIcon()) {
-                    mCAPlus = true;
-                } else if (mServiceState != null && isUsingCarrierAggregation(mServiceState)) {
-                    mCA = true;
-                }
-            }
-        }
-
-        private boolean isUsingCarrierAggregation(ServiceState serviceState) {
-            NetworkRegistrationInfo nri = serviceState.getNetworkRegistrationInfo(
-                    NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
-            if (nri != null) {
-                DataSpecificRegistrationInfo dsri = nri.getDataSpecificInfo();
-                if (dsri != null) {
-                    return dsri.isUsingCarrierAggregation();
-                }
-            }
-            return false;
-        }
-
         @Override
         public void onDataActivity(int direction) {
             if (DEBUG) {
@@ -815,7 +654,6 @@
                 Log.d(mTag, "onCarrierNetworkChange: active=" + active);
             }
             mCurrentState.carrierNetworkChangeMode = active;
-
             updateTelephony();
         }
 
@@ -825,7 +663,16 @@
             updateDataSim();
             updateTelephony();
         }
-    };
+
+        @Override
+        public void onDisplayInfoChanged(DisplayInfo displayInfo) {
+            if (DEBUG) {
+                Log.d(mTag, "onDisplayInfoChanged: displayInfo=" + displayInfo);
+            }
+            mDisplayInfo = displayInfo;
+            updateTelephony();
+        }
+    }
 
     static class MobileIconGroup extends SignalController.IconGroup {
         final int mDataContentDescription; // mContentDescriptionDataType
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index 71db618..95a9772 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -44,6 +44,7 @@
     void addEmergencyListener(EmergencyListener listener);
     void removeEmergencyListener(EmergencyListener listener);
     boolean hasEmergencyCryptKeeperText();
+
     boolean isRadioOn();
 
     public interface SignalCallback {
@@ -51,10 +52,31 @@
                 boolean activityIn, boolean activityOut, String description, boolean isTransient,
                 String statusLabel) {}
 
+        /**
+         * Callback for listeners to be able to update the state of any UI tracking connectivity
+         *  @param statusIcon the icon that should be shown in the status bar
+         * @param qsIcon the icon to show in Quick Settings
+         * @param statusType the resId of the data type icon (e.g. LTE) to show in the status bar
+         * @param qsType similar to above, the resId of the data type icon to show in Quick Settings
+         * @param activityIn indicates whether there is inbound activity
+         * @param activityOut indicates outbound activity
+         * @param typeContentDescription the contentDescription of the data type
+         * @param typeContentDescriptionHtml the (possibly HTML-styled) contentDescription of the
+         *                                   data type. Suitable for display
+         * @param description description of the network (usually just the network name)
+         * @param isWide //TODO: unused?
+         * @param subId subscription ID for which to update the UI
+         * @param roaming indicates roaming
+         */
         default void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
-                int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
-                String description, boolean isWide, int subId, boolean roaming) {}
+                int qsType, boolean activityIn, boolean activityOut,
+                CharSequence typeContentDescription,
+                CharSequence typeContentDescriptionHtml, CharSequence description,
+                boolean isWide, int subId, boolean roaming) {
+        }
+
         default void setSubs(List<SubscriptionInfo> subs) {}
+
         default void setNoSims(boolean show, boolean simDetected) {}
 
         default void setEthernetIndicators(IconState icon) {}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
index 46143ca..9003de1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -49,7 +49,6 @@
 import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
-import android.text.format.DateUtils;
 import android.util.Log;
 import android.util.MathUtils;
 import android.util.SparseArray;
@@ -64,7 +63,6 @@
 import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.settings.CurrentUserTracker;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
-import com.android.systemui.statusbar.policy.MobileSignalController.MobileIconGroup;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
@@ -72,10 +70,8 @@
 import java.util.BitSet;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
-import java.util.Map;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -846,12 +842,6 @@
         pw.println(emergencyToString(mEmergencySource));
 
         pw.println("  - config ------");
-        pw.print("  patternOfCarrierSpecificDataIcon=");
-        pw.println(mConfig.patternOfCarrierSpecificDataIcon);
-        pw.print("  nr5GIconMap=");
-        pw.println(mConfig.nr5GIconMap.toString());
-        pw.print("  nrIconDisplayGracePeriodMs=");
-        pw.println(mConfig.nrIconDisplayGracePeriodMs);
         for (int i = 0; i < mMobileSignalControllers.size(); i++) {
             MobileSignalController mobileSignalController = mMobileSignalControllers.valueAt(i);
             mobileSignalController.dump(pw);
@@ -1016,6 +1006,7 @@
                             datatype.equals("4g") ? TelephonyIcons.FOUR_G :
                             datatype.equals("4g+") ? TelephonyIcons.FOUR_G_PLUS :
                             datatype.equals("5g") ? TelephonyIcons.NR_5G :
+                            datatype.equals("5ge") ? TelephonyIcons.LTE_CA_5G_E :
                             datatype.equals("5g+") ? TelephonyIcons.NR_5G_PLUS :
                             datatype.equals("e") ? TelephonyIcons.E :
                             datatype.equals("g") ? TelephonyIcons.G :
@@ -1131,14 +1122,6 @@
 
     @VisibleForTesting
     static class Config {
-        static final int NR_CONNECTED_MMWAVE = 1;
-        static final int NR_CONNECTED = 2;
-        static final int NR_NOT_RESTRICTED_RRC_IDLE = 3;
-        static final int NR_NOT_RESTRICTED_RRC_CON = 4;
-        static final int NR_RESTRICTED = 5;
-
-        Map<Integer, MobileIconGroup> nr5GIconMap = new HashMap<>();
-
         boolean showAtLeast3G = false;
         boolean show4gFor3g = false;
         boolean alwaysShowCdmaRssi = false;
@@ -1147,22 +1130,6 @@
         boolean hspaDataDistinguishable;
         boolean inflateSignalStrengths = false;
         boolean alwaysShowDataRatIcon = false;
-        public String patternOfCarrierSpecificDataIcon = "";
-        public long nrIconDisplayGracePeriodMs;
-
-        /**
-         * Mapping from NR 5G status string to an integer. The NR 5G status string should match
-         * those in carrier config.
-         */
-        private static final Map<String, Integer> NR_STATUS_STRING_TO_INDEX;
-        static {
-            NR_STATUS_STRING_TO_INDEX = new HashMap<>(5);
-            NR_STATUS_STRING_TO_INDEX.put("connected_mmwave", NR_CONNECTED_MMWAVE);
-            NR_STATUS_STRING_TO_INDEX.put("connected", NR_CONNECTED);
-            NR_STATUS_STRING_TO_INDEX.put("not_restricted_rrc_idle", NR_NOT_RESTRICTED_RRC_IDLE);
-            NR_STATUS_STRING_TO_INDEX.put("not_restricted_rrc_con", NR_NOT_RESTRICTED_RRC_CON);
-            NR_STATUS_STRING_TO_INDEX.put("restricted", NR_RESTRICTED);
-        }
 
         static Config readConfig(Context context) {
             Config config = new Config();
@@ -1191,64 +1158,9 @@
                         CarrierConfigManager.KEY_SHOW_4G_FOR_3G_DATA_ICON_BOOL);
                 config.hideLtePlus = b.getBoolean(
                         CarrierConfigManager.KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL);
-                config.patternOfCarrierSpecificDataIcon = b.getString(
-                        CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING);
-                String nr5GIconConfiguration =
-                        b.getString(CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING);
-                if (!TextUtils.isEmpty(nr5GIconConfiguration)) {
-                    String[] nr5GIconConfigPairs = nr5GIconConfiguration.trim().split(",");
-                    for (String pair : nr5GIconConfigPairs) {
-                        add5GIconMapping(pair, config);
-                    }
-                }
-                setDisplayGraceTime(
-                        b.getInt(CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_SEC_INT),
-                        config);
             }
 
             return config;
         }
-
-        /**
-         * Add a mapping from NR 5G status to the 5G icon. All the icon resources come from
-         * {@link TelephonyIcons}.
-         *
-         * @param keyValuePair the NR 5G status and icon name separated by a colon.
-         * @param config container that used to store the parsed configs.
-         */
-        @VisibleForTesting
-        static void add5GIconMapping(String keyValuePair, Config config) {
-            String[] kv = (keyValuePair.trim().toLowerCase()).split(":");
-
-            if (kv.length != 2) {
-                if (DEBUG) Log.e(TAG, "Invalid 5G icon configuration, config = " + keyValuePair);
-                return;
-            }
-
-            String key = kv[0], value = kv[1];
-
-            // There is no icon config for the specific 5G status.
-            if (value.equals("none")) return;
-
-            if (NR_STATUS_STRING_TO_INDEX.containsKey(key)
-                    && TelephonyIcons.ICON_NAME_TO_ICON.containsKey(value)) {
-                config.nr5GIconMap.put(
-                        NR_STATUS_STRING_TO_INDEX.get(key),
-                        TelephonyIcons.ICON_NAME_TO_ICON.get(value));
-            }
-        }
-
-        /**
-         * Set display gracefully period time(MS) depend on carrierConfig KEY
-         * KEY_5G_ICON_DISPLAY_GRACE_PERIOD_SEC_INT, and this function will convert to ms.
-         * {@link CarrierConfigManager}.
-         *
-         * @param time   showing 5G icon gracefully in the period of the time(SECOND)
-         * @param config container that used to store the parsed configs.
-         */
-        @VisibleForTesting
-        static void setDisplayGraceTime(int time, Config config) {
-            config.nrIconDisplayGracePeriodMs = time * DateUtils.SECOND_IN_MILLIS;
-        }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java
index fc6e5e2..3a45691 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java
@@ -17,6 +17,7 @@
 
 import static com.android.systemui.statusbar.policy.NetworkControllerImpl.TAG;
 
+import android.annotation.NonNull;
 import android.content.Context;
 import android.util.Log;
 
@@ -166,8 +167,8 @@
     /**
      * Returns the resource if resId is not 0, and an empty string otherwise.
      */
-    protected String getStringIfExists(int resId) {
-        return resId != 0 ? mContext.getString(resId) : "";
+    @NonNull CharSequence getTextIfExists(int resId) {
+        return resId != 0 ? mContext.getText(resId) : "";
     }
 
     protected I getIcons() {
@@ -260,7 +261,6 @@
         boolean enabled;
         boolean activityIn;
         boolean activityOut;
-        public boolean activityDormant;
         int level;
         IconGroup iconGroup;
         int inetCondition;
@@ -277,7 +277,6 @@
             inetCondition = state.inetCondition;
             activityIn = state.activityIn;
             activityOut = state.activityOut;
-            activityDormant = state.activityDormant;
             rssi = state.rssi;
             time = state.time;
         }
@@ -301,7 +300,6 @@
                     .append("iconGroup=").append(iconGroup).append(',')
                     .append("activityIn=").append(activityIn).append(',')
                     .append("activityOut=").append(activityOut).append(',')
-                    .append("activityDormant=").append(activityDormant).append(',')
                     .append("rssi=").append(rssi).append(',')
                     .append("lastModified=").append(sSDF.format(time));
         }
@@ -319,7 +317,6 @@
                     && other.iconGroup == iconGroup
                     && other.activityIn == activityIn
                     && other.activityOut == activityOut
-                    && other.activityDormant == activityDormant
                     && other.rssi == rssi;
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
index c22ff8b..d9591cf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
@@ -214,7 +214,7 @@
             0,
             0,
             AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0],
-            R.string.data_connection_5ge,
+            R.string.data_connection_5ge_html,
             TelephonyIcons.ICON_5G_E,
             true);
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
index 6baf36c..8bd0f2c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
@@ -90,7 +90,7 @@
                     || !mHasMobileData || visibleWhenEnabled);
         String wifiDesc = wifiVisible ? mCurrentState.ssid : null;
         boolean ssidPresent = wifiVisible && mCurrentState.ssid != null;
-        String contentDescription = getStringIfExists(getContentDescription());
+        String contentDescription = getTextIfExists(getContentDescription()).toString();
         if (mCurrentState.inetCondition == 0) {
             contentDescription += ("," + mContext.getString(R.string.data_connection_no_internet));
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
index 39de0f3..241d978 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
@@ -17,8 +17,12 @@
 package com.android.systemui.statusbar.tv;
 
 import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.UserHandle;
 
 import com.android.internal.statusbar.IStatusBarService;
 import com.android.systemui.SystemUI;
@@ -40,6 +44,9 @@
 @Singleton
 public class TvStatusBar extends SystemUI implements CommandQueue.Callbacks {
 
+    private static final String ACTION_OPEN_TV_NOTIFICATIONS_PANEL =
+            "com.android.tv.action.OPEN_NOTIFICATIONS_PANEL";
+
     private final CommandQueue mCommandQueue;
 
     @Inject
@@ -61,4 +68,23 @@
 
         new AudioRecordingDisclosureBar(mContext).start();
     }
+
+    @Override
+    public void animateExpandNotificationsPanel() {
+        startSystemActivity(new Intent(ACTION_OPEN_TV_NOTIFICATIONS_PANEL));
+    }
+
+    @Override
+    public void animateCollapsePanels(int flags, boolean force) {
+        startSystemActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME));
+    }
+
+    private void startSystemActivity(Intent intent) {
+        PackageManager pm = mContext.getPackageManager();
+        ResolveInfo ri = pm.resolveActivity(intent, PackageManager.MATCH_SYSTEM_ONLY);
+        if (ri != null && ri.activityInfo != null) {
+            intent.setPackage(ri.activityInfo.packageName);
+            mContext.startActivityAsUser(intent, UserHandle.CURRENT);
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/toast/ToastUI.java b/packages/SystemUI/src/com/android/systemui/toast/ToastUI.java
index dea8c5d..edab4a7 100644
--- a/packages/SystemUI/src/com/android/systemui/toast/ToastUI.java
+++ b/packages/SystemUI/src/com/android/systemui/toast/ToastUI.java
@@ -38,6 +38,7 @@
 import android.widget.Toast;
 
 import com.android.internal.R;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.systemui.SystemUI;
 import com.android.systemui.statusbar.CommandQueue;
 
@@ -67,12 +68,21 @@
 
     @Inject
     public ToastUI(Context context, CommandQueue commandQueue) {
+        this(context, commandQueue,
+                (WindowManager) context.getSystemService(Context.WINDOW_SERVICE),
+                INotificationManager.Stub.asInterface(
+                        ServiceManager.getService(Context.NOTIFICATION_SERVICE)),
+                AccessibilityManager.getInstance(context));
+    }
+
+    @VisibleForTesting
+    ToastUI(Context context, CommandQueue commandQueue, WindowManager windowManager,
+            INotificationManager notificationManager, AccessibilityManager accessibilityManager) {
         super(context);
         mCommandQueue = commandQueue;
-        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
-        mNotificationManager = INotificationManager.Stub.asInterface(
-                ServiceManager.getService(Context.NOTIFICATION_SERVICE));
-        mAccessibilityManager = AccessibilityManager.getInstance(context);
+        mWindowManager = windowManager;
+        mNotificationManager = notificationManager;
+        mAccessibilityManager = accessibilityManager;
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIBinder.java b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIBinder.java
index 264ddc0..be30a4a 100644
--- a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIBinder.java
+++ b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIBinder.java
@@ -17,11 +17,12 @@
 package com.android.systemui.tv;
 
 import com.android.systemui.dagger.SystemUIRootComponent;
+import com.android.systemui.pip.tv.dagger.PipModule;
 
 import dagger.Binds;
 import dagger.Module;
 
-@Module
+@Module(includes = {PipModule.class})
 interface TvSystemUIBinder {
     @Binds
     SystemUIRootComponent bindSystemUIRootComponent(TvSystemUIRootComponent systemUIRootComponent);
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java
index 2e30d32..0aa965b 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java
@@ -190,4 +190,9 @@
         }
         return true;
     }
+
+    @Override
+    protected boolean shouldShowTabs() {
+        return false;
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/util/Assert.java b/packages/SystemUI/src/com/android/systemui/util/Assert.java
index f6e921e..3f05657 100644
--- a/packages/SystemUI/src/com/android/systemui/util/Assert.java
+++ b/packages/SystemUI/src/com/android/systemui/util/Assert.java
@@ -24,12 +24,17 @@
  * Helper providing common assertions.
  */
 public class Assert {
+    private static final Looper sMainLooper = Looper.getMainLooper();
+    private static Looper sTestLooper = null;
 
     @VisibleForTesting
-    public static Looper sMainLooper = Looper.getMainLooper();
+    public static void setTestableLooper(Looper testLooper) {
+        sTestLooper = testLooper;
+    }
 
     public static void isMainThread() {
-        if (!sMainLooper.isCurrentThread()) {
+        if (!sMainLooper.isCurrentThread()
+                && (sTestLooper == null || !sTestLooper.isCurrentThread())) {
             throw new IllegalStateException("should be called from the main thread."
                     + " sMainLooper.threadName=" + sMainLooper.getThread().getName()
                     + " Thread.currentThread()=" + Thread.currentThread().getName());
@@ -37,7 +42,8 @@
     }
 
     public static void isNotMainThread() {
-        if (sMainLooper.isCurrentThread()) {
+        if (sMainLooper.isCurrentThread()
+                && (sTestLooper == null || sTestLooper.isCurrentThread())) {
             throw new IllegalStateException("should not be called from the main thread.");
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/util/FloatingContentCoordinator.kt b/packages/SystemUI/src/com/android/systemui/util/FloatingContentCoordinator.kt
index 70bcc21..ca4b67d 100644
--- a/packages/SystemUI/src/com/android/systemui/util/FloatingContentCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/util/FloatingContentCoordinator.kt
@@ -98,6 +98,14 @@
     private val allContentBounds: MutableMap<FloatingContent, Rect> = HashMap()
 
     /**
+     * Whether we are currently resolving conflicts by asking content to move. If we are, we'll
+     * temporarily ignore calls to [onContentMoved] - those calls are from the content that is
+     * moving to new, conflict-free bounds, so we don't need to perform conflict detection
+     * calculations in response.
+     */
+    private var currentlyResolvingConflicts = false
+
+    /**
      * Makes the coordinator aware of a new piece of floating content, and moves any existing
      * content out of the way, if necessary.
      *
@@ -124,8 +132,14 @@
      *
      * @param content The content that has moved.
      */
-    @JvmOverloads
     fun onContentMoved(content: FloatingContent) {
+
+        // Ignore calls when we are currently resolving conflicts, since those calls are from
+        // content that is moving to new, conflict-free bounds.
+        if (currentlyResolvingConflicts) {
+            return
+        }
+
         if (!allContentBounds.containsKey(content)) {
             Log.wtf(TAG, "Received onContentMoved call before onContentAdded! " +
                     "This should never happen.")
@@ -162,6 +176,8 @@
      * them to move out of the way.
      */
     private fun maybeMoveConflictingContent(fromContent: FloatingContent) {
+        currentlyResolvingConflicts = true
+
         val conflictingNewBounds = allContentBounds[fromContent]!!
         allContentBounds
                 // Filter to content that intersects with the new bounds. That's content that needs
@@ -182,6 +198,8 @@
                                             .minus(conflictingNewBounds)))
                     allContentBounds[content] = content.getFloatingBoundsOnScreen()
                 }
+
+        currentlyResolvingConflicts = false
     }
 
     /**
diff --git a/packages/SystemUI/src/com/android/systemui/util/animation/PhysicsAnimator.kt b/packages/SystemUI/src/com/android/systemui/util/animation/PhysicsAnimator.kt
index cfd77be..f4157f2 100644
--- a/packages/SystemUI/src/com/android/systemui/util/animation/PhysicsAnimator.kt
+++ b/packages/SystemUI/src/com/android/systemui/util/animation/PhysicsAnimator.kt
@@ -901,6 +901,23 @@
             verboseLogging = debug
         }
 
+        /**
+         * Estimates the end value of a fling that starts at the given value using the provided
+         * start velocity and fling configuration.
+         *
+         * This is only an estimate. Fling animations use a timing-based physics simulation that is
+         * non-deterministic, so this exact value may not be reached.
+         */
+        @JvmStatic
+        fun estimateFlingEndValue(
+            startValue: Float,
+            startVelocity: Float,
+            flingConfig: FlingConfig
+        ): Float {
+            val distance = startVelocity / (flingConfig.friction * FLING_FRICTION_SCALAR_MULTIPLIER)
+            return Math.min(flingConfig.max, Math.max(flingConfig.min, startValue + distance))
+        }
+
         @JvmStatic
         fun getReadablePropertyName(property: FloatPropertyCompat<*>): String {
             return when (property) {
diff --git a/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java b/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java
index 2c7c52e..2e0c035 100644
--- a/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java
+++ b/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java
@@ -434,6 +434,7 @@
 
         @Override
         public void handleSetListening(boolean listening) {
+            super.handleSetListening(listening);
             if (gm != null) gm.setTile(listening ? this : null);
 
             final ActivityManager am = mContext.getSystemService(ActivityManager.class);
diff --git a/packages/SystemUI/src/com/android/systemui/wm/DisplayController.java b/packages/SystemUI/src/com/android/systemui/wm/DisplayController.java
index bc24ad0..c66f07d 100644
--- a/packages/SystemUI/src/com/android/systemui/wm/DisplayController.java
+++ b/packages/SystemUI/src/com/android/systemui/wm/DisplayController.java
@@ -101,6 +101,11 @@
                                 return;
                             }
                             Display display = getDisplay(displayId);
+                            if (display == null) {
+                                Slog.w(TAG, "Skipping Display Configuration change on invalid"
+                                        + " display. It may have been removed.");
+                                return;
+                            }
                             Context perDisplayContext = mContext;
                             if (displayId != Display.DEFAULT_DISPLAY) {
                                 perDisplayContext = mContext.createDisplayContext(display);
diff --git a/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java b/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java
index 7dad05d..1b62cbf 100644
--- a/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java
+++ b/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java
@@ -34,6 +34,7 @@
 import android.view.animation.Interpolator;
 import android.view.animation.PathInterpolator;
 
+import com.android.systemui.TransactionPool;
 import com.android.systemui.dagger.qualifiers.Main;
 
 import java.util.ArrayList;
@@ -48,8 +49,8 @@
 public class DisplayImeController implements DisplayController.OnDisplaysChangedListener {
     private static final String TAG = "DisplayImeController";
 
-    static final int ANIMATION_DURATION_SHOW_MS = 275;
-    static final int ANIMATION_DURATION_HIDE_MS = 340;
+    public static final int ANIMATION_DURATION_SHOW_MS = 275;
+    public static final int ANIMATION_DURATION_HIDE_MS = 340;
     static final Interpolator INTERPOLATOR = new PathInterpolator(0.4f, 0f, 0.2f, 1f);
     private static final int DIRECTION_NONE = 0;
     private static final int DIRECTION_SHOW = 1;
@@ -57,6 +58,7 @@
 
     SystemWindows mSystemWindows;
     final Handler mHandler;
+    final TransactionPool mTransactionPool;
 
     final SparseArray<PerDisplay> mImePerDisplay = new SparseArray<>();
 
@@ -64,9 +66,10 @@
 
     @Inject
     public DisplayImeController(SystemWindows syswin, DisplayController displayController,
-            @Main Handler mainHandler) {
+            @Main Handler mainHandler, TransactionPool transactionPool) {
         mHandler = mainHandler;
         mSystemWindows = syswin;
+        mTransactionPool = transactionPool;
         displayController.addDisplayWindowListener(this);
     }
 
@@ -255,18 +258,18 @@
                         show ? ANIMATION_DURATION_SHOW_MS : ANIMATION_DURATION_HIDE_MS);
 
                 mAnimation.addUpdateListener(animation -> {
-                    SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+                    SurfaceControl.Transaction t = mTransactionPool.acquire();
                     float value = (float) animation.getAnimatedValue();
                     t.setPosition(mImeSourceControl.getLeash(), x, value);
                     dispatchPositionChanged(mDisplayId, imeTop(imeSource, value), t);
                     t.apply();
-                    t.close();
+                    mTransactionPool.release(t);
                 });
                 mAnimation.setInterpolator(INTERPOLATOR);
                 mAnimation.addListener(new AnimatorListenerAdapter() {
                     @Override
                     public void onAnimationStart(Animator animation) {
-                        SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+                        SurfaceControl.Transaction t = mTransactionPool.acquire();
                         t.setPosition(mImeSourceControl.getLeash(), x, startY);
                         dispatchStartPositioning(mDisplayId, imeTop(imeSource, startY),
                                 imeTop(imeSource, endY), mAnimationDirection == DIRECTION_SHOW,
@@ -275,11 +278,11 @@
                             t.show(mImeSourceControl.getLeash());
                         }
                         t.apply();
-                        t.close();
+                        mTransactionPool.release(t);
                     }
                     @Override
                     public void onAnimationEnd(Animator animation) {
-                        SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+                        SurfaceControl.Transaction t = mTransactionPool.acquire();
                         t.setPosition(mImeSourceControl.getLeash(), x, endY);
                         dispatchEndPositioning(mDisplayId, imeTop(imeSource, endY),
                                 mAnimationDirection == DIRECTION_SHOW, t);
@@ -287,7 +290,7 @@
                             t.hide(mImeSourceControl.getLeash());
                         }
                         t.apply();
-                        t.close();
+                        mTransactionPool.release(t);
 
                         mAnimationDirection = DIRECTION_NONE;
                         mAnimation = null;
diff --git a/packages/SystemUI/src/com/android/systemui/wm/DisplayLayout.java b/packages/SystemUI/src/com/android/systemui/wm/DisplayLayout.java
index 64b0b66..4652abf 100644
--- a/packages/SystemUI/src/com/android/systemui/wm/DisplayLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/wm/DisplayLayout.java
@@ -35,6 +35,7 @@
 import android.graphics.Rect;
 import android.os.SystemProperties;
 import android.provider.Settings;
+import android.util.DisplayMetrics;
 import android.util.RotationUtils;
 import android.util.Size;
 import android.view.Display;
@@ -191,6 +192,11 @@
         return mDensityDpi;
     }
 
+    /** Get the density scale for the display. */
+    public float density() {
+        return mDensityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE;
+    }
+
     /** Get whether this layout is landscape. */
     public boolean isLandscape() {
         return mWidth > mHeight;
diff --git a/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java b/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java
index 044a2a6..23df991 100644
--- a/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java
+++ b/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java
@@ -162,6 +162,23 @@
         return pd.getWindow(windowType);
     }
 
+    /**
+     * Gets the SurfaceControl associated with a root view. This is the same surface that backs the
+     * ViewRootImpl.
+     */
+    public SurfaceControl getViewSurface(View rootView) {
+        for (int i = 0; i < mPerDisplay.size(); ++i) {
+            for (int iWm = 0; iWm < mPerDisplay.valueAt(i).mWwms.size(); ++iWm) {
+                SurfaceControl out =
+                        mPerDisplay.valueAt(i).mWwms.get(iWm).getSurfaceControlForWindow(rootView);
+                if (out != null) {
+                    return out;
+                }
+            }
+        }
+        return null;
+    }
+
     private class PerDisplay {
         final int mDisplayId;
         private final SparseArray<SysUiWindowManager> mWwms = new SparseArray<>();
@@ -256,6 +273,10 @@
         void updateConfiguration(Configuration configuration) {
             setConfiguration(configuration);
         }
+
+        SurfaceControl getSurfaceControlForWindow(View rootView) {
+            return getSurfaceControl(rootView);
+        }
     }
 
     class ContainerWindow extends IWindow.Stub {
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/AdminSecondaryLockScreenControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/AdminSecondaryLockScreenControllerTest.java
index 1954b39..0e9a245 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/AdminSecondaryLockScreenControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/AdminSecondaryLockScreenControllerTest.java
@@ -39,7 +39,7 @@
 import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 import android.testing.ViewUtils;
-import android.view.SurfaceControl;
+import android.view.SurfaceControlViewHost;
 import android.view.SurfaceView;
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
@@ -54,7 +54,6 @@
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.mockito.Spy;
 
 @RunWithLooper
 @RunWith(AndroidTestingRunner.class)
@@ -77,8 +76,8 @@
     private KeyguardSecurityCallback mKeyguardCallback;
     @Mock
     private KeyguardUpdateMonitor mUpdateMonitor;
-    @Spy
-    private StubTransaction mTransaction;
+    @Mock
+    private SurfaceControlViewHost.SurfacePackage mSurfacePackage;
 
     @Before
     public void setUp() {
@@ -97,21 +96,20 @@
         when(mKeyguardClient.asBinder()).thenReturn(mKeyguardClient);
 
         mTestController = new AdminSecondaryLockScreenController(
-                mContext, mParent, mUpdateMonitor, mKeyguardCallback, mHandler, mTransaction);
+                mContext, mParent, mUpdateMonitor, mKeyguardCallback, mHandler);
     }
 
     @Test
     public void testShow() throws Exception {
         doAnswer(invocation -> {
             IKeyguardCallback callback = (IKeyguardCallback) invocation.getArguments()[1];
-            callback.onSurfaceControlCreated(new SurfaceControl());
+            callback.onRemoteContentReady(mSurfacePackage);
             return null;
         }).when(mKeyguardClient).onSurfaceReady(any(), any(IKeyguardCallback.class));
 
         mTestController.show(mServiceIntent);
 
         verifySurfaceReady();
-        verify(mTransaction).reparent(any(), any());
         assertThat(mContext.isBound(mComponentName)).isTrue();
     }
 
@@ -133,7 +131,7 @@
         // Show the view first, then hide.
         doAnswer(invocation -> {
             IKeyguardCallback callback = (IKeyguardCallback) invocation.getArguments()[1];
-            callback.onSurfaceControlCreated(new SurfaceControl());
+            callback.onRemoteContentReady(mSurfacePackage);
             return null;
         }).when(mKeyguardClient).onSurfaceReady(any(), any(IKeyguardCallback.class));
 
@@ -189,19 +187,4 @@
         verify(mKeyguardCallback).dismiss(true, TARGET_USER_ID);
         assertThat(mContext.isBound(mComponentName)).isFalse();
     }
-
-    /**
-     * Stubbed {@link SurfaceControl.Transaction} class that can be used when unit testing to
-     * avoid calls to native code.
-     */
-    private class StubTransaction extends SurfaceControl.Transaction {
-        @Override
-        public void apply() {
-        }
-
-        @Override
-        public SurfaceControl.Transaction reparent(SurfaceControl sc, SurfaceControl newParent) {
-            return this;
-        }
-    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPresentationTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPresentationTest.java
index 082782d..b6ca8d8e 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPresentationTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPresentationTest.java
@@ -37,7 +37,7 @@
     @Test
     public void testInflation_doesntCrash() {
         mDependency.injectMockDependency(KeyguardUpdateMonitor.class);
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         InjectionInflationController inflationController = new InjectionInflationController(
                 SystemUIFactory.getInstance().getRootComponent());
         Context context = getContext();
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java
index 116f8fc..462b042 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java
@@ -19,7 +19,6 @@
 import android.net.Uri;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 import android.view.LayoutInflater;
 
@@ -51,7 +50,7 @@
 
     @Before
     public void setUp() throws Exception {
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         InjectionInflationController inflationController = new InjectionInflationController(
                 SystemUIFactory.getInstance().getRootComponent());
         LayoutInflater layoutInflater = inflationController
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.java
index e4b83cc..bc3c3d9 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.java
@@ -20,14 +20,12 @@
 
 import android.test.suitebuilder.annotation.SmallTest;
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 import android.view.LayoutInflater;
 
 import com.android.systemui.R;
 import com.android.systemui.SystemUIFactory;
 import com.android.systemui.SysuiTestCase;
-import com.android.systemui.util.Assert;
 import com.android.systemui.util.InjectionInflationController;
 
 import org.junit.Before;
@@ -50,7 +48,7 @@
 
     @Before
     public void setUp() {
-        Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         mDependency.injectMockDependency(KeyguardUpdateMonitor.class);
         InjectionInflationController inflationController = new InjectionInflationController(
                 SystemUIFactory.getInstance().getRootComponent());
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
index 7e4ba92..befe3e1 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
@@ -147,6 +147,7 @@
         context.addMockSystemService(SubscriptionManager.class, mSubscriptionManager);
 
         mTestableLooper = TestableLooper.get(this);
+        allowTestableLooperAsMainThread();
         mKeyguardUpdateMonitor = new TestableKeyguardUpdateMonitor(context);
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ExpandHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/ExpandHelperTest.java
index ffe8c28..471149c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ExpandHelperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ExpandHelperTest.java
@@ -23,7 +23,6 @@
 import android.animation.ObjectAnimator;
 import android.content.Context;
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 
 import androidx.test.annotation.UiThreadTest;
@@ -33,7 +32,6 @@
 import com.android.systemui.statusbar.NotificationMediaManager;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
 import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
-import com.android.systemui.util.Assert;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -52,7 +50,7 @@
     public void setUp() throws Exception {
         mDependency.injectMockDependency(KeyguardUpdateMonitor.class);
         mDependency.injectMockDependency(NotificationMediaManager.class);
-        Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         Context context = getContext();
         mRow = new NotificationTestHelper(context, mDependency).createRow();
         mCallback = mock(ExpandHelper.Callback.class);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java
index 8d11b54..c912b67 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java
@@ -35,7 +35,6 @@
 import android.app.NotificationManager;
 import android.os.Bundle;
 import android.os.Handler;
-import android.os.Looper;
 import android.os.UserHandle;
 import android.service.notification.StatusBarNotification;
 import android.testing.AndroidTestingRunner;
@@ -75,8 +74,8 @@
 
     @Before
     public void setUp() throws Exception {
-        // assume the TestLooper is the main looper for these tests
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        // allow the TestLooper to be asserted as the main thread these tests
+        allowTestableLooperAsMainThread();
 
         MockitoAnnotations.initMocks(this);
         mFsc = new ForegroundServiceController(mEntryManager, mAppOpsController, mMainHandler);
@@ -93,7 +92,7 @@
     public void testAppOpsChangedCalledFromBgThread() {
         try {
             // WHEN onAppOpChanged is called from a different thread than the MainLooper
-            com.android.systemui.util.Assert.sMainLooper = Looper.getMainLooper();
+            disallowTestableLooperAsMainThread();
             NotificationEntry entry = createFgEntry();
             mFsc.onAppOpChanged(
                     AppOpsManager.OP_CAMERA,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java b/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java
index 48a5369..689eed9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java
@@ -16,35 +16,185 @@
 
 package com.android.systemui;
 
-import android.test.suitebuilder.annotation.SmallTest;
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
-import androidx.test.runner.AndroidJUnit4;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.WallpaperManager;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.ColorSpace;
+import android.graphics.Rect;
+import android.hardware.display.DisplayManagerGlobal;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.util.Size;
+import android.view.Display;
+import android.view.DisplayInfo;
+import android.view.SurfaceHolder;
+
+import com.android.systemui.glwallpaper.ImageWallpaperRenderer;
+import com.android.systemui.statusbar.phone.DozeParameters;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
 import java.util.concurrent.CountDownLatch;
 
 @SmallTest
-@RunWith(AndroidJUnit4.class)
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
 public class ImageWallpaperTest extends SysuiTestCase {
+    private static final int LOW_BMP_WIDTH = 128;
+    private static final int LOW_BMP_HEIGHT = 128;
+    private static final int INVALID_BMP_WIDTH = 1;
+    private static final int INVALID_BMP_HEIGHT = 1;
+    private static final int DISPLAY_WIDTH = 1920;
+    private static final int DISPLAY_HEIGHT = 1080;
+
+    @Mock
+    private SurfaceHolder mSurfaceHolder;
+    @Mock
+    private Context mMockContext;
+    @Mock
+    private Bitmap mWallpaperBitmap;
+    @Mock
+    private DozeParameters mDozeParam;
 
     private CountDownLatch mEventCountdown;
-    private CountDownLatch mAmbientEventCountdown;
 
     @Before
     public void setUp() throws Exception {
+        allowTestableLooperAsMainThread();
         MockitoAnnotations.initMocks(this);
         mEventCountdown = new CountDownLatch(1);
-        mAmbientEventCountdown = new CountDownLatch(2);
+
+        WallpaperManager wallpaperManager = mock(WallpaperManager.class);
+        Resources resources = mock(Resources.class);
+
+        when(mMockContext.getSystemService(WallpaperManager.class)).thenReturn(wallpaperManager);
+        when(mMockContext.getResources()).thenReturn(resources);
+        when(resources.getConfiguration()).thenReturn(mock(Configuration.class));
+
+        DisplayInfo displayInfo = new DisplayInfo();
+        displayInfo.logicalWidth = DISPLAY_WIDTH;
+        displayInfo.logicalHeight = DISPLAY_HEIGHT;
+        when(mMockContext.getDisplay()).thenReturn(
+                new Display(mock(DisplayManagerGlobal.class), 0, displayInfo, (Resources) null));
+
+        when(wallpaperManager.getBitmap(false)).thenReturn(mWallpaperBitmap);
+        when(mWallpaperBitmap.getColorSpace()).thenReturn(ColorSpace.get(ColorSpace.Named.SRGB));
+        when(mWallpaperBitmap.getConfig()).thenReturn(Bitmap.Config.ARGB_8888);
+        when(mDozeParam.getDisplayNeedsBlanking()).thenReturn(false);
+    }
+
+    private ImageWallpaper createImageWallpaper() {
+        return new ImageWallpaper(mDozeParam) {
+            @Override
+            public Engine onCreateEngine() {
+                return new GLEngine(mMockContext, mDozeParam) {
+                    @Override
+                    public Context getDisplayContext() {
+                        return mMockContext;
+                    }
+
+                    @Override
+                    public SurfaceHolder getSurfaceHolder() {
+                        return mSurfaceHolder;
+                    }
+
+                    @Override
+                    public void setFixedSizeAllowed(boolean allowed) {
+                        super.setFixedSizeAllowed(allowed);
+                        assertWithMessage("mFixedSizeAllowed should be true").that(
+                                allowed).isTrue();
+                        mEventCountdown.countDown();
+                    }
+                };
+            }
+        };
+    }
+
+    private ImageWallpaperRenderer createImageWallpaperRenderer(ImageWallpaper.GLEngine engine) {
+        return new ImageWallpaperRenderer(mMockContext, engine) {
+            @Override
+            public void startProcessingImage() {
+                loadBitmap();
+            }
+        };
     }
 
     @Test
-    public void testDeliversAmbientModeChanged() {
-        //TODO: We need add tests for GLEngine.
+    public void testBitmapWallpaper_normal() {
+        // Will use a image wallpaper with dimensions DISPLAY_WIDTH x DISPLAY_WIDTH.
+        // Then we expect the surface size will be also DISPLAY_WIDTH x DISPLAY_WIDTH.
+        // Finally, we assert the transition will not be stopped.
+        verifySurfaceSizeAndAssertTransition(DISPLAY_WIDTH /* bmpWidth */,
+                DISPLAY_WIDTH /* bmpHeight */,
+                DISPLAY_WIDTH /* surfaceWidth */,
+                DISPLAY_WIDTH /* surfaceHeight */,
+                false /* assertion */);
     }
 
-    // TODO: Add more test cases for GLEngine, tracing in b/124838911.
+    @Test
+    public void testBitmapWallpaper_low_resolution() {
+        // Will use a image wallpaper with dimensions BMP_WIDTH x BMP_HEIGHT.
+        // Then we expect the surface size will be also BMP_WIDTH x BMP_HEIGHT.
+        // Finally, we assert the transition will be stopped.
+        verifySurfaceSizeAndAssertTransition(LOW_BMP_WIDTH /* bmpWidth */,
+                LOW_BMP_HEIGHT /* bmpHeight */,
+                LOW_BMP_WIDTH /* surfaceWidth */,
+                LOW_BMP_HEIGHT /* surfaceHeight */,
+                true /* assertion */);
+    }
+
+    @Test
+    public void testBitmapWallpaper_too_small() {
+        // Will use a image wallpaper with dimensions INVALID_BMP_WIDTH x INVALID_BMP_HEIGHT.
+        // Then we expect the surface size will be also MIN_SURFACE_WIDTH x MIN_SURFACE_HEIGHT.
+        // Finally, we assert the transition will be stopped.
+        verifySurfaceSizeAndAssertTransition(INVALID_BMP_WIDTH /* bmpWidth */,
+                INVALID_BMP_HEIGHT /* bmpHeight */,
+                ImageWallpaper.GLEngine.MIN_SURFACE_WIDTH /* surfaceWidth */,
+                ImageWallpaper.GLEngine.MIN_SURFACE_HEIGHT /* surfaceHeight */,
+                true /* assertion */);
+    }
+
+    private void verifySurfaceSizeAndAssertTransition(int bmpWidth, int bmpHeight,
+            int surfaceWidth, int surfaceHeight, boolean assertion) {
+        ImageWallpaper.GLEngine wallpaperEngine =
+                (ImageWallpaper.GLEngine) createImageWallpaper().onCreateEngine();
+
+        ImageWallpaper.GLEngine engineSpy = spy(wallpaperEngine);
+        when(engineSpy.mIsHighEndGfx).thenReturn(true);
+
+        when(mWallpaperBitmap.getWidth()).thenReturn(bmpWidth);
+        when(mWallpaperBitmap.getHeight()).thenReturn(bmpHeight);
+
+        ImageWallpaperRenderer renderer = createImageWallpaperRenderer(engineSpy);
+        doReturn(renderer).when(engineSpy).getRendererInstance();
+        engineSpy.onCreate(engineSpy.getSurfaceHolder());
+
+        verify(mSurfaceHolder, times(1)).setFixedSize(surfaceWidth, surfaceHeight);
+        assertWithMessage("setFixedSizeAllowed should have been called.").that(
+                mEventCountdown.getCount()).isEqualTo(0);
+
+        Size frameSize = renderer.reportSurfaceSize();
+        Rect frame = new Rect(0, 0, frameSize.getWidth(), frameSize.getHeight());
+        when(mSurfaceHolder.getSurfaceFrame()).thenReturn(frame);
+
+        assertThat(engineSpy.checkIfShouldStopTransition()).isEqualTo(assertion);
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
index 5706bee..a974c6d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
@@ -14,19 +14,23 @@
 
 package com.android.systemui;
 
+import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.DisplayCutout.BOUNDS_POSITION_BOTTOM;
+import static android.view.DisplayCutout.BOUNDS_POSITION_LEFT;
+import static android.view.DisplayCutout.BOUNDS_POSITION_RIGHT;
+import static android.view.DisplayCutout.BOUNDS_POSITION_TOP;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY;
 
 import static com.android.systemui.ScreenDecorations.rectsToRegion;
-import static com.android.systemui.tuner.TunablePadding.FLAG_END;
-import static com.android.systemui.tuner.TunablePadding.FLAG_START;
 
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.reset;
@@ -35,29 +39,23 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.app.Fragment;
 import android.content.res.Configuration;
+import android.graphics.Insets;
 import android.graphics.Rect;
+import android.hardware.display.DisplayManager;
 import android.os.Handler;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 import android.view.Display;
-import android.view.View;
+import android.view.DisplayCutout;
 import android.view.WindowManager;
+import android.view.WindowMetrics;
 
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.R.dimen;
-import com.android.systemui.ScreenDecorations.TunablePaddingTagListener;
 import com.android.systemui.broadcast.BroadcastDispatcher;
-import com.android.systemui.fragments.FragmentHostManager;
-import com.android.systemui.fragments.FragmentService;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
-import com.android.systemui.statusbar.phone.StatusBar;
-import com.android.systemui.statusbar.phone.StatusBarWindowView;
-import com.android.systemui.tuner.TunablePadding;
-import com.android.systemui.tuner.TunablePadding.TunablePaddingService;
 import com.android.systemui.tuner.TunerService;
 
 import org.junit.Before;
@@ -68,28 +66,22 @@
 
 import java.util.Collections;
 
-import dagger.Lazy;
-
 @RunWithLooper
 @RunWith(AndroidTestingRunner.class)
 @SmallTest
 public class ScreenDecorationsTest extends SysuiTestCase {
 
+    private static final Rect ZERO_RECT = new Rect();
+
     private TestableLooper mTestableLooper;
     private ScreenDecorations mScreenDecorations;
-    @Mock private StatusBar mStatusBar;
     private WindowManager mWindowManager;
-    private FragmentService mFragmentService;
-    private FragmentHostManager mFragmentHostManager;
-    private NotificationShadeWindowView mView;
-    private StatusBarWindowView mStatusBarWindowView;
-    private TunablePaddingService mTunablePaddingService;
+    private DisplayManager mDisplayManager;
     private Handler mMainHandler;
     @Mock
     private TunerService mTunerService;
     @Mock
     private BroadcastDispatcher mBroadcastDispatcher;
-    @Mock private Lazy<StatusBar> mStatusBarLazy;
 
     @Before
     public void setup() {
@@ -97,25 +89,20 @@
 
         mTestableLooper = TestableLooper.get(this);
         mMainHandler = new Handler(mTestableLooper.getLooper());
-        mTunablePaddingService = mDependency.injectMockDependency(TunablePaddingService.class);
-        mFragmentService = mDependency.injectMockDependency(FragmentService.class);
 
         mWindowManager = mock(WindowManager.class);
-        mView = spy(new NotificationShadeWindowView(mContext, null));
-        mStatusBarWindowView = spy(new StatusBarWindowView(mContext, null));
-        when(mStatusBarLazy.get()).thenReturn(mStatusBar);
-        when(mStatusBar.getNotificationShadeWindowView()).thenReturn(mView);
-        when(mStatusBar.getStatusBarWindow()).thenReturn(mStatusBarWindowView);
-
-        Display display = mContext.getSystemService(WindowManager.class).getDefaultDisplay();
-        when(mWindowManager.getDefaultDisplay()).thenReturn(display);
+        WindowMetrics metrics = mContext.getSystemService(WindowManager.class)
+                .getMaximumWindowMetrics();
+        when(mWindowManager.getMaximumWindowMetrics()).thenReturn(metrics);
         mContext.addMockSystemService(WindowManager.class, mWindowManager);
 
-        mFragmentHostManager = mock(FragmentHostManager.class);
-        when(mFragmentService.getFragmentHostManager(any())).thenReturn(mFragmentHostManager);
+        mDisplayManager = mock(DisplayManager.class);
+        Display display = mContext.getSystemService(DisplayManager.class)
+                .getDisplay(DEFAULT_DISPLAY);
+        when(mDisplayManager.getDisplay(anyInt())).thenReturn(display);
+        mContext.addMockSystemService(DisplayManager.class, mDisplayManager);
 
-
-        mScreenDecorations = new ScreenDecorations(mContext, mStatusBarLazy, mMainHandler,
+        mScreenDecorations = spy(new ScreenDecorations(mContext, mMainHandler,
                 mBroadcastDispatcher, mTunerService) {
             @Override
             public void start() {
@@ -139,7 +126,7 @@
                 super.onTuningChanged(key, newValue);
                 mTestableLooper.processAllMessages();
             }
-        };
+        });
         reset(mTunerService);
     }
 
@@ -156,17 +143,18 @@
         mContext.getOrCreateTestableResources()
                 .addOverride(dimen.rounded_corner_content_padding, 0);
 
+        // no cutout
+        doReturn(null).when(mScreenDecorations).getCutout();
+
         mScreenDecorations.start();
         // No views added.
         verify(mWindowManager, never()).addView(any(), any());
-        // No Fragments watched.
-        verify(mFragmentHostManager, never()).addTagListener(any(), any());
         // No Tuners tuned.
         verify(mTunerService, never()).addTunable(any(), any());
     }
 
     @Test
-    public void testRounding() {
+    public void testRounding_NoCutout() {
         mContext.getOrCreateTestableResources().addOverride(
                 com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, false);
         mContext.getOrCreateTestableResources().addOverride(
@@ -174,30 +162,232 @@
         mContext.getOrCreateTestableResources()
                 .addOverride(dimen.rounded_corner_content_padding, 20);
 
-        mScreenDecorations.start();
-        // Add 2 windows for rounded corners (top and bottom).
-        verify(mWindowManager, times(2)).addView(any(), any());
+        // no cutout
+        doReturn(null).when(mScreenDecorations).getCutout();
 
-        // Add 2 tag listeners for each of the fragments that are needed.
-        verify(mFragmentHostManager, times(2)).addTagListener(any(), any());
+        mScreenDecorations.start();
+
+        // Top and bottom windows are created for rounded corners.
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP]), any());
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM]), any());
+
+        // Left and right window should be null.
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_LEFT]);
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_RIGHT]);
+
         // One tunable.
         verify(mTunerService, times(1)).addTunable(any(), any());
-        // One TunablePadding.
-        verify(mTunablePaddingService, times(1)).add(any(), anyString(), anyInt(), anyInt());
     }
 
     @Test
-    public void testCutout() {
+    public void testNoRounding_CutoutShortEdge() {
         mContext.getOrCreateTestableResources().addOverride(
                 com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, true);
         mContext.getOrCreateTestableResources().addOverride(
                 com.android.internal.R.dimen.rounded_corner_radius, 0);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius_top, 0);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius_bottom, 0);
         mContext.getOrCreateTestableResources()
                 .addOverride(dimen.rounded_corner_content_padding, 0);
 
+        // top cutout
+        doReturn(new DisplayCutout(
+                        Insets.of(0, 10, 0, 0),
+                        ZERO_RECT,
+                        new Rect(9, 0, 10, 1),
+                        ZERO_RECT,
+                        ZERO_RECT,
+                        Insets.NONE)).when(mScreenDecorations).getCutout();
+
         mScreenDecorations.start();
-        // Add 2 windows for rounded corners (top and bottom).
-        verify(mWindowManager, times(2)).addView(any(), any());
+        // Top window is created for top cutout.
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP]), any());
+        // Bottom window should be null.
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM]);
+        // Left window should be null.
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_LEFT]);
+        // Right window should be null.
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_RIGHT]);
+    }
+
+    @Test
+    public void testNoRounding_CutoutLongEdge() {
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, true);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius, 0);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius_top, 0);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius_bottom, 0);
+        mContext.getOrCreateTestableResources()
+                .addOverride(dimen.rounded_corner_content_padding, 0);
+
+        // left cutout
+        doReturn(new DisplayCutout(
+                Insets.of(0, 10, 0, 0),
+                new Rect(0, 200, 1, 210),
+                ZERO_RECT,
+                ZERO_RECT,
+                ZERO_RECT,
+                Insets.NONE)).when(mScreenDecorations).getCutout();
+
+        mScreenDecorations.start();
+        // Left window is created for left cutout.
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_LEFT]), any());
+        // Bottom window should be null.
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM]);
+        // Top window should be null.
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP]);
+        // Right window should be null.
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_RIGHT]);
+    }
+
+    @Test
+    public void testRounding_CutoutShortEdge() {
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, true);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius, 20);
+        mContext.getOrCreateTestableResources()
+                .addOverride(dimen.rounded_corner_content_padding, 20);
+
+        // top cutout
+        doReturn(new DisplayCutout(
+                Insets.of(0, 10, 0, 0),
+                ZERO_RECT,
+                new Rect(9, 0, 10, 1),
+                ZERO_RECT,
+                ZERO_RECT,
+                Insets.NONE)).when(mScreenDecorations).getCutout();
+
+        mScreenDecorations.start();
+        // Top window is created for rouned corner and top cutout.
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP]), any());
+        // Bottom window is created for rouned corner.
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM]), any());
+        // Left window should be null.
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_LEFT]);
+        // Right window should be null.
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_RIGHT]);
+    }
+
+    @Test
+    public void testRounding_CutoutLongEdge() {
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, true);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius, 20);
+        mContext.getOrCreateTestableResources()
+                .addOverride(dimen.rounded_corner_content_padding, 20);
+
+        // left cutout
+        doReturn(new DisplayCutout(
+                Insets.of(0, 10, 0, 0),
+                new Rect(0, 200, 1, 210),
+                ZERO_RECT,
+                ZERO_RECT,
+                ZERO_RECT,
+                Insets.NONE)).when(mScreenDecorations).getCutout();
+
+        mScreenDecorations.start();
+        // Left window is created for rouned corner and left cutout.
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_LEFT]), any());
+        // Right window is created for rouned corner.
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_RIGHT]), any());
+        // Top window should be null.
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP]);
+        // Bottom window should be null.
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM]);
+    }
+
+    @Test
+    public void testRounding_CutoutShortAndLongEdge() {
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, true);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius, 20);
+        mContext.getOrCreateTestableResources()
+                .addOverride(dimen.rounded_corner_content_padding, 20);
+
+        // top and left cutout
+        doReturn(new DisplayCutout(
+                Insets.of(0, 10, 0, 0),
+                new Rect(0, 200, 1, 210),
+                new Rect(9, 0, 10, 1),
+                ZERO_RECT,
+                ZERO_RECT,
+                Insets.NONE)).when(mScreenDecorations).getCutout();
+
+        mScreenDecorations.start();
+        // Top window is created for rouned corner and top cutout.
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP]), any());
+        // Bottom window is created for rouned corner.
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM]), any());
+        // Left window is created for left cutout.
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_LEFT]), any());
+        // Right window should be null.
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_RIGHT]);
+    }
+
+    @Test
+    public void testNoRounding_SwitchFrom_ShortEdgeCutout_To_LongCutout() {
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, true);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius, 0);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius_top, 0);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius_bottom, 0);
+        mContext.getOrCreateTestableResources()
+                .addOverride(dimen.rounded_corner_content_padding, 0);
+
+        // Set to short edge cutout(top).
+        doReturn(new DisplayCutout(
+                Insets.of(0, 10, 0, 0),
+                ZERO_RECT,
+                new Rect(9, 0, 10, 1),
+                ZERO_RECT,
+                ZERO_RECT,
+                Insets.NONE)).when(mScreenDecorations).getCutout();
+
+        mScreenDecorations.start();
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP]), any());
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_RIGHT]);
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM]);
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_LEFT]);
+
+        // Switch to long edge cutout(left).
+        // left cutout
+        doReturn(new DisplayCutout(
+                Insets.of(0, 10, 0, 0),
+                new Rect(0, 200, 1, 210),
+                ZERO_RECT,
+                ZERO_RECT,
+                ZERO_RECT,
+                Insets.NONE)).when(mScreenDecorations).getCutout();
+
+        mScreenDecorations.onConfigurationChanged(new Configuration());
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_LEFT]), any());
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_RIGHT]);
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM]);
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP]);
     }
 
     @Test
@@ -206,50 +396,45 @@
                 com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, false);
         mContext.getOrCreateTestableResources().addOverride(
                 com.android.internal.R.dimen.rounded_corner_radius, 0);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius_top, 0);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.dimen.rounded_corner_radius_bottom, 0);
         mContext.getOrCreateTestableResources()
                 .addOverride(dimen.rounded_corner_content_padding, 0);
 
+        // top cutout
+        doReturn(new DisplayCutout(
+                Insets.of(0, 10, 0, 0),
+                ZERO_RECT,
+                new Rect(9, 0, 10, 1),
+                ZERO_RECT,
+                ZERO_RECT,
+                Insets.NONE)).when(mScreenDecorations).getCutout();
+
         mScreenDecorations.start();
+        assertNull(mScreenDecorations.mOverlays);
 
         mContext.getOrCreateTestableResources().addOverride(
                 com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, true);
         mScreenDecorations.onConfigurationChanged(new Configuration());
 
-        // Add 2 windows for rounded corners (top and bottom).
-        verify(mWindowManager, times(2)).addView(any(), any());
+        // Only top windows should be added.
+        verify(mWindowManager, times(1))
+                .addView(eq(mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP]), any());
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM]);
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_LEFT]);
+        assertNull(mScreenDecorations.mOverlays[BOUNDS_POSITION_RIGHT]);
     }
 
     @Test
     public void hasRoundedCornerOverlayFlagSet() {
-        assertThat(mScreenDecorations.getWindowLayoutParams().privateFlags
+        assertThat(mScreenDecorations.getWindowLayoutParams(1).privateFlags
                         & PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY,
                 is(PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY));
     }
 
     @Test
-    public void testPaddingTagListener() {
-        TunablePaddingTagListener tagListener = new TunablePaddingTagListener(14, 5);
-        View v = mock(View.class);
-        View child = mock(View.class);
-        Fragment f = mock(Fragment.class);
-        TunablePadding padding = mock(TunablePadding.class);
-
-        when(mTunablePaddingService.add(any(), anyString(), anyInt(), anyInt()))
-                .thenReturn(padding);
-        when(f.getView()).thenReturn(v);
-        when(v.findViewById(5)).thenReturn(child);
-
-        // Trigger callback and verify we get a TunablePadding created.
-        tagListener.onFragmentViewCreated(null, f);
-        verify(mTunablePaddingService).add(eq(child), eq(ScreenDecorations.PADDING), eq(14),
-                eq(FLAG_START | FLAG_END));
-
-        // Call again and verify destroy is called.
-        tagListener.onFragmentViewCreated(null, f);
-        verify(padding).destroy();
-    }
-
-    @Test
     public void testUpdateRoundedCorners() {
         mContext.getOrCreateTestableResources().addOverride(
                 com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, false);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
index c85d600..7ac5443 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
@@ -25,6 +25,7 @@
 import android.os.ParcelFileDescriptor;
 import android.testing.DexmakerShareClassLoaderRule;
 import android.testing.LeakCheck;
+import android.testing.TestableLooper;
 import android.util.Log;
 
 import androidx.test.InstrumentationRegistry;
@@ -32,7 +33,6 @@
 import com.android.keyguard.KeyguardUpdateMonitor;
 import com.android.systemui.classifier.FalsingManagerFake;
 import com.android.systemui.plugins.FalsingManager;
-import com.android.systemui.util.Assert;
 
 import org.junit.After;
 import org.junit.Before;
@@ -86,11 +86,24 @@
     public void SysuiTeardown() {
         InstrumentationRegistry.registerInstance(mRealInstrumentation,
                 InstrumentationRegistry.getArguments());
-        // Reset the assert's main looper.
-        Assert.sMainLooper = Looper.getMainLooper();
+        // Reset the assert's testable looper to null.
+        disallowTestableLooperAsMainThread();
         SystemUIFactory.cleanup();
     }
 
+    /**
+     * Tests are run on the TestableLooper; however, there are parts of SystemUI that assert that
+     * the code is run from the main looper. Therefore, we allow the TestableLooper to pass these
+     * assertions since in a test, the TestableLooper is essentially the MainLooper.
+     */
+    protected void allowTestableLooperAsMainThread() {
+        com.android.systemui.util.Assert.setTestableLooper(TestableLooper.get(this).getLooper());
+    }
+
+    protected void disallowTestableLooperAsMainThread() {
+        com.android.systemui.util.Assert.setTestableLooper(null);
+    }
+
     protected LeakCheck getLeakCheck() {
         return null;
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MirrorWindowControlTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MirrorWindowControlTest.java
new file mode 100644
index 0000000..fff7e4a
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MirrorWindowControlTest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.accessibility;
+
+import static android.view.WindowManager.LayoutParams;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.graphics.Point;
+import android.os.IBinder;
+import android.testing.AndroidTestingRunner;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+public class MirrorWindowControlTest extends SysuiTestCase {
+
+    @Mock WindowManager mWindowManager;
+    @Mock IBinder mIBinder;
+    View mView;
+    int mViewWidth;
+    int mViewHeight;
+
+    StubMirrorWindowControl mStubMirrorWindowControl;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        mView = new View(getContext());
+        mViewWidth = 10;
+        mViewHeight = 20;
+        getContext().addMockSystemService(Context.WINDOW_SERVICE, mWindowManager);
+        doAnswer(invocation -> {
+            View view = invocation.getArgument(0);
+            LayoutParams lp = invocation.getArgument(1);
+            view.setLayoutParams(lp);
+            return null;
+        }).when(mWindowManager).addView(any(View.class), any(LayoutParams.class));
+
+        mStubMirrorWindowControl = new StubMirrorWindowControl(getContext(), mView, mViewWidth,
+                mViewHeight);
+    }
+
+    @Test
+    public void showControl_createViewAndAddView() {
+        mStubMirrorWindowControl.showControl(mIBinder);
+
+        assertTrue(mStubMirrorWindowControl.mInvokeOnCreateView);
+        ArgumentCaptor<ViewGroup.LayoutParams> lpCaptor = ArgumentCaptor.forClass(
+                ViewGroup.LayoutParams.class);
+        verify(mWindowManager).addView(any(), lpCaptor.capture());
+        assertTrue(lpCaptor.getValue().width == mViewWidth);
+        assertTrue(lpCaptor.getValue().height == mViewHeight);
+    }
+
+    @Test
+    public void destroyControl_removeView() {
+        mStubMirrorWindowControl.showControl(mIBinder);
+        ArgumentCaptor<View> captor = ArgumentCaptor.forClass(View.class);
+        verify(mWindowManager).addView(captor.capture(), any(LayoutParams.class));
+
+        mStubMirrorWindowControl.destroyControl();
+
+        verify(mWindowManager).removeView(eq(captor.getValue()));
+    }
+
+    @Test
+    public void move_offsetIsCorrect() {
+        ArgumentCaptor<ViewGroup.LayoutParams> lpCaptor = ArgumentCaptor.forClass(
+                ViewGroup.LayoutParams.class);
+        mStubMirrorWindowControl.showControl(mIBinder);
+        verify(mWindowManager).addView(any(), lpCaptor.capture());
+        LayoutParams lp = (LayoutParams) lpCaptor.getValue();
+        Point startPosition = new Point(lp.x, lp.y);
+
+        mStubMirrorWindowControl.move(-10, -20);
+
+        verify(mWindowManager).updateViewLayout(eq(mView), lpCaptor.capture());
+        assertTrue(lpCaptor.getAllValues().size() == 2);
+        lp = (LayoutParams) lpCaptor.getValue();
+        Point currentPosition = new Point(lp.x, lp.y);
+        assertEquals(-10, currentPosition.x - startPosition.x);
+        assertEquals(-20, currentPosition.y - startPosition.y);
+    }
+
+    private static class StubMirrorWindowControl extends MirrorWindowControl {
+        private final int mWidth;
+        private final int mHeight;
+        private final View mView;
+
+        boolean mInvokeOnCreateView = false;
+
+        StubMirrorWindowControl(Context context, View view, int width, int height) {
+            super(context);
+            mView = view;
+            mWidth = width;
+            mHeight = height;
+        }
+
+        @Override
+        public String getWindowTitle() {
+            return "StubMirrorWindowControl";
+        }
+
+        @Override
+        View onCreateView(LayoutInflater inflater, Point viewSize) {
+            mInvokeOnCreateView = true;
+            viewSize.x = mWidth;
+            viewSize.y = mHeight;
+            return mView;
+        }
+
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
new file mode 100644
index 0000000..08a6172
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
@@ -0,0 +1,89 @@
+/*
+ * 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.accessibility;
+
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.verify;
+
+import android.app.Instrumentation;
+import android.os.IBinder;
+import android.testing.AndroidTestingRunner;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+
+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;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+public class WindowMagnificationControllerTest extends SysuiTestCase {
+
+    @Mock
+    MirrorWindowControl mMirrorWindowControl;
+    private WindowMagnificationController mWindowMagnificationController;
+    private Instrumentation mInstrumentation;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mInstrumentation = InstrumentationRegistry.getInstrumentation();
+        mWindowMagnificationController = new WindowMagnificationController(getContext(),
+                mMirrorWindowControl);
+        verify(mMirrorWindowControl).setWindowDelegate(
+                any(MirrorWindowControl.MirrorWindowDelegate.class));
+    }
+
+    @After
+    public void tearDown() {
+        mInstrumentation.runOnMainSync(() -> {
+            mWindowMagnificationController.deleteWindowMagnification();
+        });
+        mInstrumentation.waitForIdleSync();
+    }
+
+    @Test
+    public void createWindowMagnification_showControl() {
+        mInstrumentation.runOnMainSync(() -> {
+            mWindowMagnificationController.createWindowMagnification();
+        });
+        mInstrumentation.waitForIdleSync();
+        verify(mMirrorWindowControl).showControl(any(IBinder.class));
+    }
+
+    @Test
+    public void deleteWindowMagnification_destroyControl() {
+        mInstrumentation.runOnMainSync(() -> {
+            mWindowMagnificationController.createWindowMagnification();
+        });
+        mInstrumentation.waitForIdleSync();
+
+        mInstrumentation.runOnMainSync(() -> {
+            mWindowMagnificationController.deleteWindowMagnification();
+        });
+        mInstrumentation.waitForIdleSync();
+
+        verify(mMirrorWindowControl).destroyControl();
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.java
index 486aac8..c6c7b87 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.java
@@ -178,6 +178,20 @@
     }
 
     @Test
+    public void testCredentialUI_disablesClickingOnBackground() {
+        // In the credential view, clicking on the background (to cancel authentication) is not
+        // valid. Thus, the listener should be null, and it should not be in the accessibility
+        // hierarchy.
+        initializeContainer(Authenticators.DEVICE_CREDENTIAL);
+
+        mAuthContainer.onAttachedToWindowInternal();
+
+        verify(mAuthContainer.mBackgroundView).setOnClickListener(eq(null));
+        verify(mAuthContainer.mBackgroundView).setImportantForAccessibility(
+                eq(View.IMPORTANT_FOR_ACCESSIBILITY_NO));
+    }
+
+    @Test
     public void testLayoutParams_hasSecureWindowFlag() {
         final IBinder windowToken = mock(IBinder.class);
         final WindowManager.LayoutParams layoutParams =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
index d7f0f50..5e4f971 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
@@ -20,8 +20,7 @@
 import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL;
 import static android.service.notification.NotificationListenerService.REASON_CANCEL;
 import static android.service.notification.NotificationListenerService.REASON_CANCEL_ALL;
-
-import static com.android.systemui.statusbar.notification.NotificationEntryManager.UNDEFINED_DISMISS_REASON;
+import static android.service.notification.NotificationListenerService.REASON_GROUP_SUMMARY_CANCELED;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -34,6 +33,7 @@
 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.mock;
 import static org.mockito.Mockito.never;
@@ -44,7 +44,6 @@
 import android.app.IActivityManager;
 import android.app.Notification;
 import android.app.PendingIntent;
-import android.content.Context;
 import android.content.res.Resources;
 import android.hardware.face.FaceManager;
 import android.service.notification.ZenModeConfig;
@@ -55,10 +54,12 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.colorextraction.ColorExtractor;
+import com.android.systemui.DumpController;
 import com.android.systemui.SystemUIFactory;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.colorextraction.SysuiColorExtractor;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.FeatureFlags;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationPresenter;
 import com.android.systemui.statusbar.NotificationRemoveInterceptor;
@@ -68,6 +69,7 @@
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.NotificationFilter;
 import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
+import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -81,8 +83,8 @@
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
-import com.android.systemui.statusbar.policy.RemoteInputUriController;
 import com.android.systemui.statusbar.policy.ZenModeController;
+import com.android.systemui.util.FloatingContentCoordinator;
 import com.android.systemui.util.InjectionInflationController;
 
 import org.junit.Before;
@@ -93,6 +95,13 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import java.util.List;
+
+/**
+ * Tests the NotificationEntryManager setup with BubbleController.
+ * The {@link NotifPipeline} setup with BubbleController is tested in
+ * {@link NewNotifPipelineBubbleControllerTest}.
+ */
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper(setAsMainLooper = true)
@@ -121,6 +130,8 @@
     private SysuiStatusBarStateController mStatusBarStateController;
     @Mock
     private KeyguardBypassController mKeyguardBypassController;
+    @Mock
+    private FloatingContentCoordinator mFloatingContentCoordinator;
 
     @Captor
     private ArgumentCaptor<NotificationEntryListener> mEntryListenerCaptor;
@@ -152,9 +163,13 @@
     @Mock
     private ShadeController mShadeController;
     @Mock
-    private RemoteInputUriController mRemoteInputUriController;
-    @Mock
     private NotificationRowComponent mNotificationRowComponent;
+    @Mock
+    private NotifPipeline mNotifPipeline;
+    @Mock
+    private FeatureFlags mFeatureFlagsOldPipeline;
+    @Mock
+    private DumpController mDumpController;
 
     private SuperStatusBarViewFactory mSuperStatusBarViewFactory;
     private BubbleData mBubbleData;
@@ -189,7 +204,9 @@
         mNotificationShadeWindowController = new NotificationShadeWindowController(mContext,
                 mWindowManager, mActivityManager, mDozeParameters, mStatusBarStateController,
                 mConfigurationController, mKeyguardBypassController, mColorExtractor,
-                mSuperStatusBarViewFactory);
+                mDumpController);
+        mNotificationShadeWindowController.setNotificationShadeView(
+                mSuperStatusBarViewFactory.getNotificationShadeWindowView());
         mNotificationShadeWindowController.attach();
 
         // Need notifications for bubbles
@@ -216,6 +233,7 @@
                 mock(HeadsUpManager.class),
                 mock(NotificationInterruptionStateProvider.HeadsUpSuppressor.class));
         mBubbleData = new BubbleData(mContext);
+        when(mFeatureFlagsOldPipeline.isNewNotifPipelineRenderingEnabled()).thenReturn(false);
         mBubbleController = new TestableBubbleController(mContext,
                 mNotificationShadeWindowController,
                 mStatusBarStateController,
@@ -227,7 +245,10 @@
                 mLockscreenUserManager,
                 mNotificationGroupManager,
                 mNotificationEntryManager,
-                mRemoteInputUriController);
+                mNotifPipeline,
+                mFeatureFlagsOldPipeline,
+                mDumpController,
+                mFloatingContentCoordinator);
         mBubbleController.setBubbleStateChangeListener(mBubbleStateChangeListener);
         mBubbleController.setExpandListener(mBubbleExpandListener);
 
@@ -265,7 +286,7 @@
         verify(mBubbleStateChangeListener).onHasBubblesChanged(true);
 
         mBubbleController.removeBubble(
-                mRow.getEntry().getKey(), BubbleController.DISMISS_USER_GESTURE);
+                mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE);
         assertFalse(mNotificationShadeWindowController.getBubblesShowing());
         assertNull(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()));
         verify(mNotificationEntryManager, times(2)).updateNotifications(anyString());
@@ -286,12 +307,12 @@
 
         // Now remove the bubble
         mBubbleController.removeBubble(
-                mRow.getEntry().getKey(), BubbleController.DISMISS_USER_GESTURE);
+                mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE);
 
         // Since the notif is dismissed, once the bubble is removed, performRemoveNotification gets
         // called to really remove the notif
         verify(mNotificationEntryManager, times(1)).performRemoveNotification(
-                mRow.getEntry().getSbn(), UNDEFINED_DISMISS_REASON);
+                eq(mRow.getEntry().getSbn()), anyInt());
         assertFalse(mBubbleController.hasBubbles());
     }
 
@@ -471,7 +492,7 @@
                 mRow2.getEntry()));
 
         // Dismiss currently expanded
-        mBubbleController.removeBubble(stackView.getExpandedBubbleView().getKey(),
+        mBubbleController.removeBubble(stackView.getExpandedBubble().getEntry(),
                 BubbleController.DISMISS_USER_GESTURE);
         verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow2.getEntry().getKey());
 
@@ -480,7 +501,7 @@
         verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getEntry().getKey());
 
         // Dismiss that one
-        mBubbleController.removeBubble(stackView.getExpandedBubbleView().getKey(),
+        mBubbleController.removeBubble(stackView.getExpandedBubble().getEntry(),
                 BubbleController.DISMISS_USER_GESTURE);
 
         // Make sure state changes and collapse happens
@@ -608,7 +629,7 @@
     @Test
     public void testDeleteIntent_removeBubble_aged() throws PendingIntent.CanceledException {
         mBubbleController.updateBubble(mRow.getEntry());
-        mBubbleController.removeBubble(mRow.getEntry().getKey(), BubbleController.DISMISS_AGED);
+        mBubbleController.removeBubble(mRow.getEntry(), BubbleController.DISMISS_AGED);
         verify(mDeleteIntent, never()).send();
     }
 
@@ -616,7 +637,7 @@
     public void testDeleteIntent_removeBubble_user() throws PendingIntent.CanceledException {
         mBubbleController.updateBubble(mRow.getEntry());
         mBubbleController.removeBubble(
-                mRow.getEntry().getKey(), BubbleController.DISMISS_USER_GESTURE);
+                mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE);
         verify(mDeleteIntent, times(1)).send();
     }
 
@@ -653,11 +674,22 @@
 
         // Cancels always remove so no need to intercept
         assertFalse(intercepted);
+    }
+
+    @Test
+    public void testRemoveBubble_entryListenerRemove() {
+        mEntryListener.onPendingEntryAdded(mRow.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        assertTrue(mBubbleController.hasBubbles());
+
+        // Removes the notification
+        mEntryListener.onEntryRemoved(mRow.getEntry(), null, false);
         assertFalse(mBubbleController.hasBubbles());
     }
 
     @Test
-    public void removeBubble_fails_clearAll()  {
+    public void removeBubble_clearAllIntercepted()  {
         mEntryListener.onPendingEntryAdded(mRow.getEntry());
         mBubbleController.updateBubble(mRow.getEntry());
 
@@ -673,14 +705,10 @@
         // Should update show in shade state
         assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
                 mRow.getEntry()));
-
-        verify(mNotificationEntryManager, never()).performRemoveNotification(
-                any(), anyInt());
-        assertTrue(mBubbleController.hasBubbles());
     }
 
     @Test
-    public void removeBubble_fails_userDismissNotif() {
+    public void removeBubble_userDismissNotifIntercepted() {
         mEntryListener.onPendingEntryAdded(mRow.getEntry());
         mBubbleController.updateBubble(mRow.getEntry());
 
@@ -696,10 +724,6 @@
         // Should update show in shade state
         assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
                 mRow.getEntry()));
-
-        verify(mNotificationEntryManager, never()).performRemoveNotification(
-                any(), anyInt());
-        assertTrue(mBubbleController.hasBubbles());
     }
 
     @Test
@@ -713,7 +737,7 @@
 
         // Dismiss the bubble
         mBubbleController.removeBubble(
-                mRow.getEntry().getKey(), BubbleController.DISMISS_USER_GESTURE);
+                mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE);
         assertFalse(mBubbleController.hasBubbles());
 
         // Dismiss the notification
@@ -771,42 +795,76 @@
                 mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()));
     }
 
-    static class TestableBubbleController extends BubbleController {
-        // Let's assume surfaces can be synchronized immediately.
-        TestableBubbleController(Context context,
-                NotificationShadeWindowController notificationShadeWindowController,
-                StatusBarStateController statusBarStateController,
-                ShadeController shadeController,
-                BubbleData data,
-                ConfigurationController configurationController,
-                NotificationInterruptionStateProvider interruptionStateProvider,
-                ZenModeController zenModeController,
-                NotificationLockscreenUserManager lockscreenUserManager,
-                NotificationGroupManager groupManager,
-                NotificationEntryManager entryManager,
-                RemoteInputUriController remoteInputUriController) {
-            super(context,
-                    notificationShadeWindowController, statusBarStateController, shadeController,
-                    data, Runnable::run, configurationController, interruptionStateProvider,
-                    zenModeController, lockscreenUserManager, groupManager, entryManager,
-                    remoteInputUriController);
-            setInflateSynchronously(true);
-        }
+    @Test
+    public void testBubbleSummaryDismissal_suppressesSummaryAndBubbleFromShade() throws Exception {
+        // GIVEN a group summary with a bubble child
+        ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(0);
+        ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
+        mEntryListener.onPendingEntryAdded(groupedBubble.getEntry());
+        groupSummary.addChildNotification(groupedBubble);
+        assertTrue(mBubbleData.hasBubbleWithKey(groupedBubble.getEntry().getKey()));
+
+        // WHEN the summary is dismissed
+        mBubbleController.handleDismissalInterception(groupSummary.getEntry());
+
+        // THEN the summary and bubbled child are suppressed from the shade
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                groupedBubble.getEntry()));
+        assertTrue(mBubbleData.isSummarySuppressed(groupSummary.getEntry().getSbn().getGroupKey()));
     }
 
-    static class TestableNotificationInterruptionStateProvider extends
-            NotificationInterruptionStateProvider {
+    @Test
+    public void testAppRemovesSummary_removesAllBubbleChildren() throws Exception {
+        // GIVEN a group summary with a bubble child
+        ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(0);
+        ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
+        mEntryListener.onPendingEntryAdded(groupedBubble.getEntry());
+        groupSummary.addChildNotification(groupedBubble);
+        assertTrue(mBubbleData.hasBubbleWithKey(groupedBubble.getEntry().getKey()));
 
-        TestableNotificationInterruptionStateProvider(Context context,
-                NotificationFilter filter, StatusBarStateController controller,
-                BatteryController batteryController) {
-            super(context, filter, controller, batteryController);
-            mUseHeadsUp = true;
-        }
+        // GIVEN the summary is dismissed
+        mBubbleController.handleDismissalInterception(groupSummary.getEntry());
+
+        // WHEN the summary is cancelled by the app
+        mEntryListener.onEntryRemoved(groupSummary.getEntry(), null, true);
+
+        // THEN the summary and its children are removed from bubble data
+        assertFalse(mBubbleData.hasBubbleWithKey(groupedBubble.getEntry().getKey()));
+        assertFalse(mBubbleData.isSummarySuppressed(
+                groupSummary.getEntry().getSbn().getGroupKey()));
+    }
+
+    @Test
+    public void testSummaryDismissal_marksBubblesHiddenFromShadeAndDismissesNonBubbledChildren()
+            throws Exception {
+        // GIVEN a group summary with two (non-bubble) children and one bubble child
+        ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(2);
+        ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
+        mEntryListener.onPendingEntryAdded(groupedBubble.getEntry());
+        groupSummary.addChildNotification(groupedBubble);
+
+        // WHEN the summary is dismissed
+        mBubbleController.handleDismissalInterception(groupSummary.getEntry());
+
+        // THEN only the NON-bubble children are dismissed
+        List<ExpandableNotificationRow> childrenRows = groupSummary.getNotificationChildren();
+        verify(mNotificationEntryManager, times(1)).performRemoveNotification(
+                childrenRows.get(0).getEntry().getSbn(), REASON_GROUP_SUMMARY_CANCELED);
+        verify(mNotificationEntryManager, times(1)).performRemoveNotification(
+                childrenRows.get(1).getEntry().getSbn(), REASON_GROUP_SUMMARY_CANCELED);
+        verify(mNotificationEntryManager, never()).performRemoveNotification(
+                eq(groupedBubble.getEntry().getSbn()), anyInt());
+
+        // THEN the bubble child is suppressed from the shade
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                groupedBubble.getEntry()));
+
+        // THEN the summary is removed from GroupManager
+        verify(mNotificationGroupManager, times(1)).onEntryRemoved(groupSummary.getEntry());
     }
 
     /**
-     * Sets the bubble metadata flags for this entry. These flags are normally set by
+     * Sets the bubble metadata flags for this entry. These ]flags are normally set by
      * NotificationManagerService when the notification is sent, however, these tests do not
      * go through that path so we set them explicitly when testing.
      */
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java
new file mode 100644
index 0000000..6677b80
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java
@@ -0,0 +1,811 @@
+/*
+ * 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.bubbles;
+
+import static android.app.Notification.FLAG_BUBBLE;
+import static android.service.notification.NotificationListenerService.REASON_GROUP_SUMMARY_CANCELED;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.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.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.IActivityManager;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.res.Resources;
+import android.hardware.face.FaceManager;
+import android.service.notification.ZenModeConfig;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.view.WindowManager;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.internal.colorextraction.ColorExtractor;
+import com.android.systemui.DumpController;
+import com.android.systemui.SystemUIFactory;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.colorextraction.SysuiColorExtractor;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.FeatureFlags;
+import com.android.systemui.statusbar.NotificationLockscreenUserManager;
+import com.android.systemui.statusbar.NotificationPresenter;
+import com.android.systemui.statusbar.SuperStatusBarViewFactory;
+import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.NotificationFilter;
+import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
+import com.android.systemui.statusbar.notification.collection.NotifPipeline;
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
+import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
+import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
+import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
+import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
+import com.android.systemui.statusbar.phone.DozeParameters;
+import com.android.systemui.statusbar.phone.KeyguardBypassController;
+import com.android.systemui.statusbar.phone.NotificationGroupManager;
+import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
+import com.android.systemui.statusbar.phone.ShadeController;
+import com.android.systemui.statusbar.policy.BatteryController;
+import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.HeadsUpManager;
+import com.android.systemui.statusbar.policy.ZenModeController;
+import com.android.systemui.util.FloatingContentCoordinator;
+import com.android.systemui.util.InjectionInflationController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.List;
+
+/**
+ * Tests the NotifPipeline setup with BubbleController.
+ * The NotificationEntryManager setup with BubbleController is tested in
+ * {@link BubbleControllerTest}.
+ */
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
+    @Mock
+    private NotificationEntryManager mNotificationEntryManager;
+    @Mock
+    private NotificationGroupManager mNotificationGroupManager;
+    @Mock
+    private BubbleController.NotifCallback mNotifCallback;
+    @Mock
+    private WindowManager mWindowManager;
+    @Mock
+    private IActivityManager mActivityManager;
+    @Mock
+    private DozeParameters mDozeParameters;
+    @Mock
+    private ConfigurationController mConfigurationController;
+    @Mock
+    private ZenModeController mZenModeController;
+    @Mock
+    private ZenModeConfig mZenModeConfig;
+    @Mock
+    private FaceManager mFaceManager;
+    @Mock
+    private NotificationLockscreenUserManager mLockscreenUserManager;
+    @Mock
+    private SysuiStatusBarStateController mStatusBarStateController;
+    @Mock
+    private KeyguardBypassController mKeyguardBypassController;
+    @Mock
+    private FloatingContentCoordinator mFloatingContentCoordinator;
+
+    @Captor
+    private ArgumentCaptor<NotifCollectionListener> mNotifListenerCaptor;
+
+    private TestableBubbleController mBubbleController;
+    private NotificationShadeWindowController mNotificationShadeWindowController;
+    private NotifCollectionListener mEntryListener;
+
+    private NotificationTestHelper mNotificationTestHelper;
+    private ExpandableNotificationRow mRow;
+    private ExpandableNotificationRow mRow2;
+    private ExpandableNotificationRow mNonBubbleNotifRow;
+
+    @Mock
+    private BubbleController.BubbleStateChangeListener mBubbleStateChangeListener;
+    @Mock
+    private BubbleController.BubbleExpandListener mBubbleExpandListener;
+    @Mock
+    private PendingIntent mDeleteIntent;
+    @Mock
+    private SysuiColorExtractor mColorExtractor;
+    @Mock
+    ColorExtractor.GradientColors mGradientColors;
+    @Mock
+    private Resources mResources;
+    @Mock
+    private ShadeController mShadeController;
+    @Mock
+    private NotificationRowComponent mNotificationRowComponent;
+    @Mock
+    private NotifPipeline mNotifPipeline;
+    @Mock
+    private FeatureFlags mFeatureFlagsNewPipeline;
+    @Mock
+    private DumpController mDumpController;
+
+    private SuperStatusBarViewFactory mSuperStatusBarViewFactory;
+    private BubbleData mBubbleData;
+
+    private TestableLooper mTestableLooper;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+
+        mTestableLooper = TestableLooper.get(this);
+
+        mContext.addMockSystemService(FaceManager.class, mFaceManager);
+        when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);
+
+        mSuperStatusBarViewFactory = new SuperStatusBarViewFactory(mContext,
+                new InjectionInflationController(SystemUIFactory.getInstance().getRootComponent()),
+                new NotificationRowComponent.Builder() {
+                    @Override
+                    public NotificationRowComponent.Builder activatableNotificationView(
+                            ActivatableNotificationView view) {
+                        return this;
+                    }
+
+                    @Override
+                    public NotificationRowComponent build() {
+                        return mNotificationRowComponent;
+                    }
+                });
+
+        // Bubbles get added to status bar window view
+        mNotificationShadeWindowController = new NotificationShadeWindowController(mContext,
+                mWindowManager, mActivityManager, mDozeParameters, mStatusBarStateController,
+                mConfigurationController, mKeyguardBypassController, mColorExtractor,
+                mDumpController);
+        mNotificationShadeWindowController.setNotificationShadeView(
+                mSuperStatusBarViewFactory.getNotificationShadeWindowView());
+        mNotificationShadeWindowController.attach();
+
+        // Need notifications for bubbles
+        mNotificationTestHelper = new NotificationTestHelper(mContext, mDependency);
+        mRow = mNotificationTestHelper.createBubble(mDeleteIntent);
+        mRow2 = mNotificationTestHelper.createBubble(mDeleteIntent);
+        mNonBubbleNotifRow = mNotificationTestHelper.createRow();
+
+        mZenModeConfig.suppressedVisualEffects = 0;
+        when(mZenModeController.getConfig()).thenReturn(mZenModeConfig);
+
+        TestableNotificationInterruptionStateProvider interruptionStateProvider =
+                new TestableNotificationInterruptionStateProvider(mContext,
+                        mock(NotificationFilter.class),
+                        mock(StatusBarStateController.class),
+                        mock(BatteryController.class));
+        interruptionStateProvider.setUpWithPresenter(
+                mock(NotificationPresenter.class),
+                mock(HeadsUpManager.class),
+                mock(NotificationInterruptionStateProvider.HeadsUpSuppressor.class));
+        mBubbleData = new BubbleData(mContext);
+        when(mFeatureFlagsNewPipeline.isNewNotifPipelineRenderingEnabled()).thenReturn(true);
+        mBubbleController = new TestableBubbleController(mContext,
+                mNotificationShadeWindowController,
+                mStatusBarStateController,
+                mShadeController,
+                mBubbleData,
+                mConfigurationController,
+                interruptionStateProvider,
+                mZenModeController,
+                mLockscreenUserManager,
+                mNotificationGroupManager,
+                mNotificationEntryManager,
+                mNotifPipeline,
+                mFeatureFlagsNewPipeline,
+                mDumpController,
+                mFloatingContentCoordinator);
+        mBubbleController.addNotifCallback(mNotifCallback);
+        mBubbleController.setBubbleStateChangeListener(mBubbleStateChangeListener);
+        mBubbleController.setExpandListener(mBubbleExpandListener);
+
+        // Get a reference to the BubbleController's entry listener
+        verify(mNotifPipeline, atLeastOnce())
+                .addCollectionListener(mNotifListenerCaptor.capture());
+        mEntryListener = mNotifListenerCaptor.getValue();
+    }
+
+    @Test
+    public void testAddBubble() {
+        mBubbleController.updateBubble(mRow.getEntry());
+        assertTrue(mBubbleController.hasBubbles());
+
+        verify(mBubbleStateChangeListener).onHasBubblesChanged(true);
+    }
+
+    @Test
+    public void testHasBubbles() {
+        assertFalse(mBubbleController.hasBubbles());
+        mBubbleController.updateBubble(mRow.getEntry());
+        assertTrue(mBubbleController.hasBubbles());
+    }
+
+    @Test
+    public void testRemoveBubble() {
+        mBubbleController.updateBubble(mRow.getEntry());
+        assertNotNull(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()));
+        assertTrue(mBubbleController.hasBubbles());
+        verify(mNotifCallback, times(1)).invalidateNotifications(anyString());
+        verify(mBubbleStateChangeListener).onHasBubblesChanged(true);
+
+        mBubbleController.removeBubble(mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE);
+        assertFalse(mNotificationShadeWindowController.getBubblesShowing());
+        assertNull(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()));
+        verify(mNotifCallback, times(2)).invalidateNotifications(anyString());
+        verify(mBubbleStateChangeListener).onHasBubblesChanged(false);
+    }
+
+    @Test
+    public void testRemoveBubble_withDismissedNotif() {
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        assertTrue(mBubbleController.hasBubbles());
+        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(mRow.getEntry()));
+
+        // Make it look like dismissed notif
+        mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()).setSuppressNotification(true);
+
+        // Now remove the bubble
+        mBubbleController.removeBubble(mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE);
+
+        // Since the notif is dismissed, once the bubble is removed, removeNotification gets
+        // called to really remove the notif
+        verify(mNotifCallback, times(1)).removeNotification(eq(mRow.getEntry()), anyInt());
+        assertFalse(mBubbleController.hasBubbles());
+    }
+
+    @Test
+    public void testDismissStack() {
+        mBubbleController.updateBubble(mRow.getEntry());
+        verify(mNotifCallback, times(1)).invalidateNotifications(anyString());
+        assertNotNull(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()));
+        mBubbleController.updateBubble(mRow2.getEntry());
+        verify(mNotifCallback,  times(2)).invalidateNotifications(anyString());
+        assertNotNull(mBubbleData.getBubbleWithKey(mRow2.getEntry().getKey()));
+        assertTrue(mBubbleController.hasBubbles());
+
+        mBubbleController.dismissStack(BubbleController.DISMISS_USER_GESTURE);
+        assertFalse(mNotificationShadeWindowController.getBubblesShowing());
+        verify(mNotifCallback, times(3)).invalidateNotifications(anyString());
+        assertNull(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()));
+        assertNull(mBubbleData.getBubbleWithKey(mRow2.getEntry().getKey()));
+    }
+
+    @Test
+    public void testExpandCollapseStack() {
+        assertFalse(mBubbleController.isStackExpanded());
+
+        // Mark it as a bubble and add it explicitly
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        // We should have bubbles & their notifs should not be suppressed
+        assertTrue(mBubbleController.hasBubbles());
+        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+        assertFalse(mNotificationShadeWindowController.getBubbleExpanded());
+
+        // Expand the stack
+        BubbleStackView stackView = mBubbleController.getStackView();
+        mBubbleController.expandStack();
+        assertTrue(mBubbleController.isStackExpanded());
+        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getEntry().getKey());
+        assertTrue(mNotificationShadeWindowController.getBubbleExpanded());
+
+        // Make sure the notif is suppressed
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(mRow.getEntry()));
+
+        // Collapse
+        mBubbleController.collapseStack();
+        verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey());
+        assertFalse(mBubbleController.isStackExpanded());
+        assertFalse(mNotificationShadeWindowController.getBubbleExpanded());
+    }
+
+    @Test
+    public void testCollapseAfterChangingExpandedBubble() {
+        // Mark it as a bubble and add it explicitly
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        mEntryListener.onEntryAdded(mRow2.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+        mBubbleController.updateBubble(mRow2.getEntry());
+
+        // We should have bubbles & their notifs should not be suppressed
+        assertTrue(mBubbleController.hasBubbles());
+        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow2.getEntry()));
+
+        // Expand
+        BubbleStackView stackView = mBubbleController.getStackView();
+        mBubbleController.expandStack();
+        assertTrue(mBubbleController.isStackExpanded());
+        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow2.getEntry().getKey());
+
+        // Last added is the one that is expanded
+        assertEquals(mRow2.getEntry(), mBubbleData.getSelectedBubble().getEntry());
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(mRow2.getEntry()));
+
+        // Switch which bubble is expanded
+        mBubbleController.selectBubble(mRow.getEntry().getKey());
+        mBubbleData.setExpanded(true);
+        assertEquals(mRow.getEntry(), stackView.getExpandedBubble().getEntry());
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+
+        // collapse for previous bubble
+        verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow2.getEntry().getKey());
+        // expand for selected bubble
+        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getEntry().getKey());
+
+        // Collapse
+        mBubbleController.collapseStack();
+        assertFalse(mBubbleController.isStackExpanded());
+    }
+
+    @Test
+    public void testExpansionRemovesShowInShadeAndDot() {
+        // Mark it as a bubble and add it explicitly
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        // We should have bubbles & their notifs should not be suppressed
+        assertTrue(mBubbleController.hasBubbles());
+        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(mRow.getEntry()));
+
+        mTestableLooper.processAllMessages();
+        assertTrue(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()).showDot());
+
+        // Expand
+        mBubbleController.expandStack();
+        assertTrue(mBubbleController.isStackExpanded());
+        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getEntry().getKey());
+
+        // Notif is suppressed after expansion
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+        // Notif shouldn't show dot after expansion
+        assertFalse(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()).showDot());
+    }
+
+    @Test
+    public void testUpdateWhileExpanded_DoesntChangeShowInShadeAndDot() {
+        // Mark it as a bubble and add it explicitly
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        // We should have bubbles & their notifs should not be suppressed
+        assertTrue(mBubbleController.hasBubbles());
+        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+
+        mTestableLooper.processAllMessages();
+        assertTrue(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()).showDot());
+
+        // Expand
+        mBubbleController.expandStack();
+        assertTrue(mBubbleController.isStackExpanded());
+        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getEntry().getKey());
+
+        // Notif is suppressed after expansion
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+        // Notif shouldn't show dot after expansion
+        assertFalse(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()).showDot());
+
+        // Send update
+        mEntryListener.onEntryUpdated(mRow.getEntry());
+
+        // Nothing should have changed
+        // Notif is suppressed after expansion
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+        // Notif shouldn't show dot after expansion
+        assertFalse(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()).showDot());
+    }
+
+    @Test
+    public void testRemoveLastExpandedCollapses() {
+        // Mark it as a bubble and add it explicitly
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        mEntryListener.onEntryAdded(mRow2.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+        mBubbleController.updateBubble(mRow2.getEntry());
+        verify(mBubbleStateChangeListener).onHasBubblesChanged(true);
+
+        // Expand
+        BubbleStackView stackView = mBubbleController.getStackView();
+        mBubbleController.expandStack();
+
+        assertTrue(mBubbleController.isStackExpanded());
+        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow2.getEntry().getKey());
+
+        // Last added is the one that is expanded
+        assertEquals(mRow2.getEntry(), stackView.getExpandedBubble().getEntry());
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow2.getEntry()));
+
+        // Dismiss currently expanded
+        mBubbleController.removeBubble(stackView.getExpandedBubble().getEntry(),
+                BubbleController.DISMISS_USER_GESTURE);
+        verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow2.getEntry().getKey());
+
+        // Make sure first bubble is selected
+        assertEquals(mRow.getEntry(), stackView.getExpandedBubble().getEntry());
+        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getEntry().getKey());
+
+        // Dismiss that one
+        mBubbleController.removeBubble(stackView.getExpandedBubble().getEntry(),
+                BubbleController.DISMISS_USER_GESTURE);
+
+        // Make sure state changes and collapse happens
+        verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey());
+        verify(mBubbleStateChangeListener).onHasBubblesChanged(false);
+        assertFalse(mBubbleController.hasBubbles());
+    }
+
+    @Test
+    public void testAutoExpand_fails_noFlag() {
+        assertFalse(mBubbleController.isStackExpanded());
+        setMetadataFlags(mRow.getEntry(),
+                Notification.BubbleMetadata.FLAG_AUTO_EXPAND_BUBBLE, false /* enableFlag */);
+
+        // Add the auto expand bubble
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        // Expansion shouldn't change
+        verify(mBubbleExpandListener, never()).onBubbleExpandChanged(false /* expanded */,
+                mRow.getEntry().getKey());
+        assertFalse(mBubbleController.isStackExpanded());
+
+        // # of bubbles should change
+        verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);
+    }
+
+    @Test
+    public void testAutoExpand_succeeds_withFlag() {
+        setMetadataFlags(mRow.getEntry(),
+                Notification.BubbleMetadata.FLAG_AUTO_EXPAND_BUBBLE, true /* enableFlag */);
+
+        // Add the auto expand bubble
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        // Expansion should change
+        verify(mBubbleExpandListener).onBubbleExpandChanged(true /* expanded */,
+                mRow.getEntry().getKey());
+        assertTrue(mBubbleController.isStackExpanded());
+
+        // # of bubbles should change
+        verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);
+    }
+
+    @Test
+    public void testSuppressNotif_onInitialNotif() {
+        setMetadataFlags(mRow.getEntry(),
+                Notification.BubbleMetadata.FLAG_SUPPRESS_NOTIFICATION, true /* enableFlag */);
+
+        // Add the suppress notif bubble
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        // Notif should be suppressed because we were foreground
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+        // Dot + flyout is hidden because notif is suppressed
+        assertFalse(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()).showDot());
+        assertFalse(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()).showFlyout());
+
+        // # of bubbles should change
+        verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);
+    }
+
+    @Test
+    public void testSuppressNotif_onUpdateNotif() {
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        // Should not be suppressed
+        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+        // Should show dot
+        assertTrue(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()).showDot());
+
+        // Update to suppress notif
+        setMetadataFlags(mRow.getEntry(),
+                Notification.BubbleMetadata.FLAG_SUPPRESS_NOTIFICATION, true /* enableFlag */);
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        // Notif should be suppressed
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+        // Dot + flyout is hidden because notif is suppressed
+        assertFalse(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()).showDot());
+        assertFalse(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()).showFlyout());
+
+        // # of bubbles should change
+        verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */);
+    }
+
+    @Test
+    public void testMarkNewNotificationAsShowInShade() {
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+
+        mTestableLooper.processAllMessages();
+        assertTrue(mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()).showDot());
+    }
+
+    @Test
+    public void testAddNotif_notBubble() {
+        mEntryListener.onEntryAdded(mNonBubbleNotifRow.getEntry());
+        mEntryListener.onEntryUpdated(mNonBubbleNotifRow.getEntry());
+
+        verify(mBubbleStateChangeListener, never()).onHasBubblesChanged(anyBoolean());
+        assertThat(mBubbleController.hasBubbles()).isFalse();
+    }
+
+    @Test
+    public void testDeleteIntent_removeBubble_aged() throws PendingIntent.CanceledException {
+        mBubbleController.updateBubble(mRow.getEntry());
+        mBubbleController.removeBubble(mRow.getEntry(), BubbleController.DISMISS_AGED);
+        verify(mDeleteIntent, never()).send();
+    }
+
+    @Test
+    public void testDeleteIntent_removeBubble_user() throws PendingIntent.CanceledException {
+        mBubbleController.updateBubble(mRow.getEntry());
+        mBubbleController.removeBubble(
+                mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE);
+        verify(mDeleteIntent, times(1)).send();
+    }
+
+    @Test
+    public void testDeleteIntent_dismissStack() throws PendingIntent.CanceledException {
+        mBubbleController.updateBubble(mRow.getEntry());
+        mBubbleController.updateBubble(mRow2.getEntry());
+        mBubbleController.dismissStack(BubbleController.DISMISS_USER_GESTURE);
+        verify(mDeleteIntent, times(2)).send();
+    }
+
+    @Test
+    public void testRemoveBubble_noLongerBubbleAfterUpdate()
+            throws PendingIntent.CanceledException {
+        mBubbleController.updateBubble(mRow.getEntry());
+        assertTrue(mBubbleController.hasBubbles());
+
+        mRow.getEntry().getSbn().getNotification().flags &= ~FLAG_BUBBLE;
+        mEntryListener.onEntryUpdated(mRow.getEntry());
+
+        assertFalse(mBubbleController.hasBubbles());
+        verify(mDeleteIntent, never()).send();
+    }
+
+    @Test
+    public void testRemoveBubble_entryListenerRemove() {
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        assertTrue(mBubbleController.hasBubbles());
+
+        // Removes the notification
+        mEntryListener.onEntryRemoved(mRow.getEntry(), 0);
+        assertFalse(mBubbleController.hasBubbles());
+    }
+
+    @Test
+    public void removeBubble_intercepted()  {
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        assertTrue(mBubbleController.hasBubbles());
+        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+
+        boolean intercepted = mBubbleController.handleDismissalInterception(mRow.getEntry());
+
+        // Intercept!
+        assertTrue(intercepted);
+        // Should update show in shade state
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(mRow.getEntry()));
+    }
+
+    @Test
+    public void removeBubble_succeeds_userDismissBubble_userDimissNotif() {
+        mEntryListener.onEntryAdded(mRow.getEntry());
+        mBubbleController.updateBubble(mRow.getEntry());
+
+        assertTrue(mBubbleController.hasBubbles());
+        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+
+        // Dismiss the bubble
+        mBubbleController.removeBubble(
+                mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE);
+        assertFalse(mBubbleController.hasBubbles());
+
+        // Dismiss the notification
+        boolean intercepted = mBubbleController.handleDismissalInterception(mRow.getEntry());
+
+        // It's no longer a bubble so we shouldn't intercept
+        assertFalse(intercepted);
+    }
+
+    @Test
+    public void testNotifyShadeSuppressionChange_notificationDismiss() {
+        BubbleController.NotificationSuppressionChangedListener listener =
+                mock(BubbleController.NotificationSuppressionChangedListener.class);
+        mBubbleData.setSuppressionChangedListener(listener);
+
+        mEntryListener.onEntryAdded(mRow.getEntry());
+
+        assertTrue(mBubbleController.hasBubbles());
+        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+
+        mBubbleController.handleDismissalInterception(mRow.getEntry());
+
+        // Should update show in shade state
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+
+        // Should notify delegate that shade state changed
+        verify(listener).onBubbleNotificationSuppressionChange(
+                mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()));
+    }
+
+    @Test
+    public void testNotifyShadeSuppressionChange_bubbleExpanded() {
+        BubbleController.NotificationSuppressionChangedListener listener =
+                mock(BubbleController.NotificationSuppressionChangedListener.class);
+        mBubbleData.setSuppressionChangedListener(listener);
+
+        mEntryListener.onEntryAdded(mRow.getEntry());
+
+        assertTrue(mBubbleController.hasBubbles());
+        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+
+        mBubbleData.setExpanded(true);
+
+        // Once a bubble is expanded the notif is suppressed
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                mRow.getEntry()));
+
+        // Should notify delegate that shade state changed
+        verify(listener).onBubbleNotificationSuppressionChange(
+                mBubbleData.getBubbleWithKey(mRow.getEntry().getKey()));
+    }
+
+    @Test
+    public void testBubbleSummaryDismissal_suppressesSummaryAndBubbleFromShade() throws Exception {
+        // GIVEN a group summary with a bubble child
+        ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(0);
+        ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
+        mEntryListener.onEntryAdded(groupedBubble.getEntry());
+        groupSummary.addChildNotification(groupedBubble);
+        assertTrue(mBubbleData.hasBubbleWithKey(groupedBubble.getEntry().getKey()));
+
+        // WHEN the summary is dismissed
+        mBubbleController.handleDismissalInterception(groupSummary.getEntry());
+
+        // THEN the summary and bubbled child are suppressed from the shade
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                groupedBubble.getEntry()));
+        assertTrue(mBubbleData.isSummarySuppressed(groupSummary.getEntry().getSbn().getGroupKey()));
+    }
+
+    @Test
+    public void testAppRemovesSummary_removesAllBubbleChildren() throws Exception {
+        // GIVEN a group summary with a bubble child
+        ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(0);
+        ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
+        mEntryListener.onEntryAdded(groupedBubble.getEntry());
+        groupSummary.addChildNotification(groupedBubble);
+        assertTrue(mBubbleData.hasBubbleWithKey(groupedBubble.getEntry().getKey()));
+
+        // GIVEN the summary is dismissed
+        mBubbleController.handleDismissalInterception(groupSummary.getEntry());
+
+        // WHEN the summary is cancelled by the app
+        mEntryListener.onEntryRemoved(groupSummary.getEntry(), 0);
+
+        // THEN the summary and its children are removed from bubble data
+        assertFalse(mBubbleData.hasBubbleWithKey(groupedBubble.getEntry().getKey()));
+        assertFalse(mBubbleData.isSummarySuppressed(
+                groupSummary.getEntry().getSbn().getGroupKey()));
+    }
+
+    @Test
+    public void testSummaryDismissalMarksBubblesHiddenFromShadeAndDismissesNonBubbledChildren()
+            throws Exception {
+        // GIVEN a group summary with two (non-bubble) children and one bubble child
+        ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(2);
+        ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
+        mEntryListener.onEntryAdded(groupedBubble.getEntry());
+        groupSummary.addChildNotification(groupedBubble);
+
+        // WHEN the summary is dismissed
+        mBubbleController.handleDismissalInterception(groupSummary.getEntry());
+
+        // THEN only the NON-bubble children are dismissed
+        List<ExpandableNotificationRow> childrenRows = groupSummary.getNotificationChildren();
+        verify(mNotifCallback, times(1)).removeNotification(
+                childrenRows.get(0).getEntry(), REASON_GROUP_SUMMARY_CANCELED);
+        verify(mNotifCallback, times(1)).removeNotification(
+                childrenRows.get(1).getEntry(), REASON_GROUP_SUMMARY_CANCELED);
+        verify(mNotifCallback, never()).removeNotification(eq(groupedBubble.getEntry()), anyInt());
+
+        // THEN the bubble child still exists as a bubble and is suppressed from the shade
+        assertTrue(mBubbleData.hasBubbleWithKey(groupedBubble.getEntry().getKey()));
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                groupedBubble.getEntry()));
+
+        // THEN the summary is also suppressed from the shade
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                groupSummary.getEntry()));
+    }
+
+    /**
+     * Sets the bubble metadata flags for this entry. These flags are normally set by
+     * NotificationManagerService when the notification is sent, however, these tests do not
+     * go through that path so we set them explicitly when testing.
+     */
+    private void setMetadataFlags(NotificationEntry entry, int flag, boolean enableFlag) {
+        Notification.BubbleMetadata bubbleMetadata =
+                entry.getSbn().getNotification().getBubbleMetadata();
+        int flags = bubbleMetadata.getFlags();
+        if (enableFlag) {
+            flags |= flag;
+        } else {
+            flags &= ~flag;
+        }
+        bubbleMetadata.setFlags(flags);
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/TestableBubbleController.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/TestableBubbleController.java
new file mode 100644
index 0000000..f9849f4
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/TestableBubbleController.java
@@ -0,0 +1,63 @@
+/*
+ * 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.bubbles;
+
+import android.content.Context;
+
+import com.android.systemui.DumpController;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.FeatureFlags;
+import com.android.systemui.statusbar.NotificationLockscreenUserManager;
+import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
+import com.android.systemui.statusbar.notification.collection.NotifPipeline;
+import com.android.systemui.statusbar.phone.NotificationGroupManager;
+import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
+import com.android.systemui.statusbar.phone.ShadeController;
+import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.ZenModeController;
+import com.android.systemui.util.FloatingContentCoordinator;
+
+/**
+ * Testable BubbleController subclass that immediately synchronizes surfaces.
+ */
+public class TestableBubbleController extends BubbleController {
+
+    // Let's assume surfaces can be synchronized immediately.
+    TestableBubbleController(Context context,
+            NotificationShadeWindowController notificationShadeWindowController,
+            StatusBarStateController statusBarStateController,
+            ShadeController shadeController,
+            BubbleData data,
+            ConfigurationController configurationController,
+            NotificationInterruptionStateProvider interruptionStateProvider,
+            ZenModeController zenModeController,
+            NotificationLockscreenUserManager lockscreenUserManager,
+            NotificationGroupManager groupManager,
+            NotificationEntryManager entryManager,
+            NotifPipeline notifPipeline,
+            FeatureFlags featureFlags,
+            DumpController dumpController,
+            FloatingContentCoordinator floatingContentCoordinator) {
+        super(context,
+                notificationShadeWindowController, statusBarStateController, shadeController,
+                data, Runnable::run, configurationController, interruptionStateProvider,
+                zenModeController, lockscreenUserManager, groupManager, entryManager,
+                notifPipeline, featureFlags, dumpController, floatingContentCoordinator);
+        setInflateSynchronously(true);
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/TestableNotificationInterruptionStateProvider.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/TestableNotificationInterruptionStateProvider.java
new file mode 100644
index 0000000..5d192b2
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/TestableNotificationInterruptionStateProvider.java
@@ -0,0 +1,35 @@
+/*
+ * 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.bubbles;
+
+import android.content.Context;
+
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.notification.NotificationFilter;
+import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
+import com.android.systemui.statusbar.policy.BatteryController;
+
+public class TestableNotificationInterruptionStateProvider
+        extends NotificationInterruptionStateProvider {
+
+    TestableNotificationInterruptionStateProvider(Context context,
+            NotificationFilter filter, StatusBarStateController controller,
+            BatteryController batteryController) {
+        super(context, filter, controller, batteryController);
+        mUseHeadsUp = true;
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/StackAnimationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/StackAnimationControllerTest.java
index d79128c..9cc0349 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/StackAnimationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/StackAnimationControllerTest.java
@@ -18,6 +18,10 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
+import static org.mockito.ArgumentMatchers.any;
+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 android.graphics.PointF;
@@ -30,13 +34,14 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.R;
+import com.android.systemui.util.FloatingContentCoordinator;
 
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.Spy;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -45,8 +50,10 @@
 @RunWith(AndroidTestingRunner.class)
 public class StackAnimationControllerTest extends PhysicsAnimationLayoutTestCase {
 
-    @Spy
-    private TestableStackController mStackController = new TestableStackController();
+    @Mock
+    private FloatingContentCoordinator mFloatingContentCoordinator;
+
+    private TestableStackController mStackController;
 
     private int mStackOffset;
     private Runnable mCheckStartPosSet;
@@ -54,6 +61,7 @@
     @Before
     public void setUp() throws Exception {
         super.setUp();
+        mStackController = spy(new TestableStackController(mFloatingContentCoordinator));
         mLayout.setActiveController(mStackController);
         addOneMoreThanBubbleLimitBubbles();
         mStackOffset = mLayout.getResources().getDimensionPixelSize(R.dimen.bubble_stack_offset);
@@ -288,6 +296,21 @@
         assertEquals(30, mStackController.getStackPosition().y, 1f);
     }
 
+    @Test
+    public void testFloatingCoordinator() {
+        // We should have called onContentAdded only once while adding all of the bubbles in
+        // setup().
+        verify(mFloatingContentCoordinator, times(1)).onContentAdded(any());
+        verify(mFloatingContentCoordinator, never()).onContentRemoved(any());
+
+        // Remove all views and verify that we called onContentRemoved only once.
+        while (mLayout.getChildCount() > 0) {
+            mLayout.removeView(mLayout.getChildAt(0));
+        }
+
+        verify(mFloatingContentCoordinator, times(1)).onContentRemoved(any());
+    }
+
     /**
      * Checks every child view to make sure it's stacked at the given coordinates, off to the left
      * or right side depending on offset multiplier.
@@ -328,6 +351,11 @@
      * Testable version of the stack controller that dispatches its animations on the main thread.
      */
     private class TestableStackController extends StackAnimationController {
+        TestableStackController(
+                FloatingContentCoordinator floatingContentCoordinator) {
+            super(floatingContentCoordinator);
+        }
+
         @Override
         protected void flingThenSpringFirstBubbleWithStackFollowing(
                 DynamicAnimation.ViewProperty property, float vel, float friction,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java
index 25efd32..7fb711f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java
@@ -28,6 +28,7 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.systemui.DumpController;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.classifier.brightline.BrightLineFalsingManager;
 import com.android.systemui.dock.DockManager;
@@ -53,6 +54,8 @@
     PluginManager mPluginManager;
     @Mock(stubOnly = true)
     ProximitySensor mProximitySensor;
+    @Mock(stubOnly = true)
+    private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
     private FalsingManagerProxy mProxy;
     private DeviceConfigProxy mDeviceConfig;
     private DisplayMetrics mDisplayMetrics = new DisplayMetrics();
@@ -63,7 +66,6 @@
     @Before
     public void setup() {
         MockitoAnnotations.initMocks(this);
-        mDependency.injectMockDependency(KeyguardUpdateMonitor.class);
         mDeviceConfig = new DeviceConfigProxyFake();
         mDeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
                 BRIGHTLINE_FALSING_MANAGER_ENABLED, "false", false);
@@ -79,7 +81,8 @@
     @Test
     public void test_brightLineFalsingManagerDisabled() {
         mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mDisplayMetrics,
-                mProximitySensor, mDeviceConfig, mDockManager, mUiBgExecutor);
+                mProximitySensor, mDeviceConfig, mDockManager, mKeyguardUpdateMonitor,
+                new DumpController(), mUiBgExecutor);
         assertThat(mProxy.getInternalFalsingManager(), instanceOf(FalsingManagerImpl.class));
     }
 
@@ -89,14 +92,16 @@
                 BRIGHTLINE_FALSING_MANAGER_ENABLED, "true", false);
         mExecutor.runAllReady();
         mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mDisplayMetrics,
-                mProximitySensor, mDeviceConfig, mDockManager, mUiBgExecutor);
+                mProximitySensor, mDeviceConfig, mDockManager, mKeyguardUpdateMonitor,
+                new DumpController(), mUiBgExecutor);
         assertThat(mProxy.getInternalFalsingManager(), instanceOf(BrightLineFalsingManager.class));
     }
 
     @Test
     public void test_brightLineFalsingManagerToggled() throws InterruptedException {
         mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mDisplayMetrics,
-                mProximitySensor, mDeviceConfig, mDockManager, mUiBgExecutor);
+                mProximitySensor, mDeviceConfig, mDockManager, mKeyguardUpdateMonitor,
+                new DumpController(), mUiBgExecutor);
         assertThat(mProxy.getInternalFalsingManager(), instanceOf(FalsingManagerImpl.class));
 
         mDeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java
new file mode 100644
index 0000000..0aaa3b6
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java
@@ -0,0 +1,101 @@
+/*
+ * 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.classifier.brightline;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
+
+import android.test.suitebuilder.annotation.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.util.DisplayMetrics;
+
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.dock.DockManager;
+import com.android.systemui.dock.DockManagerFake;
+import com.android.systemui.util.DeviceConfigProxy;
+import com.android.systemui.util.DeviceConfigProxyFake;
+import com.android.systemui.util.sensors.ProximitySensor;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+public class BrightLineFalsingManagerTest extends SysuiTestCase {
+
+
+    @Mock
+    private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+    @Mock
+    private ProximitySensor mProximitySensor;
+
+    private BrightLineFalsingManager mFalsingManager;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        DisplayMetrics dm = new DisplayMetrics();
+        dm.xdpi = 100;
+        dm.ydpi = 100;
+        dm.widthPixels = 100;
+        dm.heightPixels = 100;
+        FalsingDataProvider falsingDataProvider = new FalsingDataProvider(dm);
+        DeviceConfigProxy deviceConfigProxy = new DeviceConfigProxyFake();
+        DockManager dockManager = new DockManagerFake();
+        mFalsingManager = new BrightLineFalsingManager(falsingDataProvider,
+                mKeyguardUpdateMonitor, mProximitySensor, deviceConfigProxy, dockManager);
+    }
+
+    @Test
+    public void testRegisterSensor() {
+        mFalsingManager.onScreenTurningOn();
+        verify(mProximitySensor).register(any(ProximitySensor.ProximitySensorListener.class));
+    }
+
+    @Test
+    public void testUnregisterSensor() {
+        mFalsingManager.onScreenTurningOn();
+        reset(mProximitySensor);
+        mFalsingManager.onScreenOff();
+        verify(mProximitySensor).unregister(any(ProximitySensor.ProximitySensorListener.class));
+    }
+
+    @Test
+    public void testUnregisterSensor_QS() {
+        mFalsingManager.onScreenTurningOn();
+        reset(mProximitySensor);
+        mFalsingManager.setQsExpanded(true);
+        verify(mProximitySensor).unregister(any(ProximitySensor.ProximitySensorListener.class));
+        mFalsingManager.setQsExpanded(false);
+        verify(mProximitySensor).register(any(ProximitySensor.ProximitySensorListener.class));
+    }
+
+    @Test
+    public void testUnregisterSensor_Bouncer() {
+        mFalsingManager.onScreenTurningOn();
+        reset(mProximitySensor);
+        mFalsingManager.onBouncerShown();
+        verify(mProximitySensor).unregister(any(ProximitySensor.ProximitySensorListener.class));
+        mFalsingManager.onBouncerHidden();
+        verify(mProximitySensor).register(any(ProximitySensor.ProximitySensorListener.class));
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/DistanceClassifierTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/DistanceClassifierTest.java
index 44454d9..e5ab9be 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/DistanceClassifierTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/DistanceClassifierTest.java
@@ -60,10 +60,10 @@
         mClassifier.onTouchEvent(appendDownEvent(1, 1));
         assertThat(mClassifier.isFalseTouch(), is(true));
 
-        mClassifier.onTouchEvent(appendMoveEvent(1, 2));
+        mClassifier.onTouchEvent(appendMoveEvent(1, 40));
         assertThat(mClassifier.isFalseTouch(), is(true));
 
-        mClassifier.onTouchEvent(appendUpEvent(1, 40));
+        mClassifier.onTouchEvent(appendUpEvent(1, 80));
         assertThat(mClassifier.isFalseTouch(), is(false));
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsBindingControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsBindingControllerImplTest.kt
index 89c1636..02bfc19e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsBindingControllerImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsBindingControllerImplTest.kt
@@ -45,7 +45,7 @@
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
-class ControlsBindingControllerTest : SysuiTestCase() {
+class ControlsBindingControllerImplTest : SysuiTestCase() {
 
     companion object {
         fun <T> any(): T = Mockito.any<T>()
@@ -86,12 +86,16 @@
 
     @Test
     fun testBindAndLoad() {
-        val callback: (List<Control>) -> Unit = {}
+        val callback = object : ControlsBindingController.LoadCallback {
+            override fun error(message: String) {}
+
+            override fun accept(t: List<Control>) {}
+        }
         controller.bindAndLoad(TEST_COMPONENT_NAME_1, callback)
 
         assertEquals(1, providers.size)
         val provider = providers.first()
-        verify(provider).maybeBindAndLoad(callback)
+        verify(provider).maybeBindAndLoad(any())
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt
index e3bcdc8..e5ec2dd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt
@@ -39,6 +39,7 @@
 import com.android.systemui.util.time.FakeSystemClock
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotEquals
 import org.junit.Assert.assertTrue
 import org.junit.Before
 import org.junit.Test
@@ -55,6 +56,7 @@
 import org.mockito.Mockito.verify
 import org.mockito.MockitoAnnotations
 import java.util.Optional
+import java.util.function.Consumer
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -78,7 +80,8 @@
     @Captor
     private lateinit var controlInfoListCaptor: ArgumentCaptor<List<ControlInfo>>
     @Captor
-    private lateinit var controlLoadCallbackCaptor: ArgumentCaptor<(List<Control>) -> Unit>
+    private lateinit var controlLoadCallbackCaptor:
+            ArgumentCaptor<ControlsBindingController.LoadCallback>
     @Captor
     private lateinit var broadcastReceiverCaptor: ArgumentCaptor<BroadcastReceiver>
 
@@ -225,13 +228,13 @@
         val newControlInfo = TEST_CONTROL_INFO.copy(controlTitle = TEST_CONTROL_TITLE_2)
         val control = builderFromInfo(newControlInfo).build()
 
-        controller.loadForComponent(TEST_COMPONENT) {}
+        controller.loadForComponent(TEST_COMPONENT, Consumer {})
 
         reset(persistenceWrapper)
         verify(bindingController).bindAndLoad(eq(TEST_COMPONENT),
                 capture(controlLoadCallbackCaptor))
 
-        controlLoadCallbackCaptor.value.invoke(listOf(control))
+        controlLoadCallbackCaptor.value.accept(listOf(control))
 
         verify(persistenceWrapper).storeFavorites(listOf(newControlInfo))
     }
@@ -293,17 +296,22 @@
         var loaded = false
         val control = builderFromInfo(TEST_CONTROL_INFO).build()
 
-        controller.loadForComponent(TEST_COMPONENT) {
+        controller.loadForComponent(TEST_COMPONENT, Consumer { data ->
+            val controls = data.allControls
+            val favorites = data.favoritesIds
             loaded = true
-            assertEquals(1, it.size)
-            val controlStatus = it[0]
+            assertEquals(1, controls.size)
+            val controlStatus = controls[0]
             assertEquals(ControlStatus(control, false), controlStatus)
-        }
+
+            assertTrue(favorites.isEmpty())
+            assertFalse(data.errorOnLoad)
+        })
 
         verify(bindingController).bindAndLoad(eq(TEST_COMPONENT),
                 capture(controlLoadCallbackCaptor))
 
-        controlLoadCallbackCaptor.value.invoke(listOf(control))
+        controlLoadCallbackCaptor.value.accept(listOf(control))
 
         assertTrue(loaded)
     }
@@ -315,20 +323,26 @@
         val control2 = builderFromInfo(TEST_CONTROL_INFO_2).build()
         controller.changeFavoriteStatus(TEST_CONTROL_INFO, true)
 
-        controller.loadForComponent(TEST_COMPONENT) {
+        controller.loadForComponent(TEST_COMPONENT, Consumer { data ->
+            val controls = data.allControls
+            val favorites = data.favoritesIds
             loaded = true
-            assertEquals(2, it.size)
-            val controlStatus = it.first { it.control.controlId == TEST_CONTROL_ID }
+            assertEquals(2, controls.size)
+            val controlStatus = controls.first { it.control.controlId == TEST_CONTROL_ID }
             assertEquals(ControlStatus(control, true), controlStatus)
 
-            val controlStatus2 = it.first { it.control.controlId == TEST_CONTROL_ID_2 }
+            val controlStatus2 = controls.first { it.control.controlId == TEST_CONTROL_ID_2 }
             assertEquals(ControlStatus(control2, false), controlStatus2)
-        }
+
+            assertEquals(1, favorites.size)
+            assertEquals(TEST_CONTROL_ID, favorites[0])
+            assertFalse(data.errorOnLoad)
+        })
 
         verify(bindingController).bindAndLoad(eq(TEST_COMPONENT),
                 capture(controlLoadCallbackCaptor))
 
-        controlLoadCallbackCaptor.value.invoke(listOf(control, control2))
+        controlLoadCallbackCaptor.value.accept(listOf(control, control2))
 
         assertTrue(loaded)
     }
@@ -338,19 +352,53 @@
         var loaded = false
         controller.changeFavoriteStatus(TEST_CONTROL_INFO, true)
 
-        controller.loadForComponent(TEST_COMPONENT) {
+        controller.loadForComponent(TEST_COMPONENT, Consumer { data ->
+            val controls = data.allControls
+            val favorites = data.favoritesIds
             loaded = true
-            assertEquals(1, it.size)
-            val controlStatus = it[0]
+            assertEquals(1, controls.size)
+            val controlStatus = controls[0]
             assertEquals(TEST_CONTROL_ID, controlStatus.control.controlId)
             assertTrue(controlStatus.favorite)
             assertTrue(controlStatus.removed)
-        }
+
+            assertEquals(1, favorites.size)
+            assertEquals(TEST_CONTROL_ID, favorites[0])
+            assertFalse(data.errorOnLoad)
+        })
 
         verify(bindingController).bindAndLoad(eq(TEST_COMPONENT),
                 capture(controlLoadCallbackCaptor))
 
-        controlLoadCallbackCaptor.value.invoke(emptyList())
+        controlLoadCallbackCaptor.value.accept(emptyList())
+
+        assertTrue(loaded)
+    }
+
+    @Test
+    fun testErrorOnLoad_notRemoved() {
+        var loaded = false
+        controller.changeFavoriteStatus(TEST_CONTROL_INFO, true)
+
+        controller.loadForComponent(TEST_COMPONENT, Consumer { data ->
+            val controls = data.allControls
+            val favorites = data.favoritesIds
+            loaded = true
+            assertEquals(1, controls.size)
+            val controlStatus = controls[0]
+            assertEquals(TEST_CONTROL_ID, controlStatus.control.controlId)
+            assertTrue(controlStatus.favorite)
+            assertFalse(controlStatus.removed)
+
+            assertEquals(1, favorites.size)
+            assertEquals(TEST_CONTROL_ID, favorites[0])
+            assertTrue(data.errorOnLoad)
+        })
+
+        verify(bindingController).bindAndLoad(eq(TEST_COMPONENT),
+                capture(controlLoadCallbackCaptor))
+
+        controlLoadCallbackCaptor.value.error("")
 
         assertTrue(loaded)
     }
@@ -361,12 +409,12 @@
         val newControlInfo = TEST_CONTROL_INFO.copy(controlTitle = TEST_CONTROL_TITLE_2)
         val control = builderFromInfo(newControlInfo).build()
 
-        controller.loadForComponent(TEST_COMPONENT) {}
+        controller.loadForComponent(TEST_COMPONENT, Consumer {})
 
         verify(bindingController).bindAndLoad(eq(TEST_COMPONENT),
                 capture(controlLoadCallbackCaptor))
 
-        controlLoadCallbackCaptor.value.invoke(listOf(control))
+        controlLoadCallbackCaptor.value.accept(listOf(control))
 
         val favorites = controller.getFavoriteControls()
         assertEquals(1, favorites.size)
@@ -483,4 +531,81 @@
         assertEquals(1, controller.countFavoritesForComponent(TEST_COMPONENT))
         assertEquals(1, controller.countFavoritesForComponent(TEST_COMPONENT_2))
     }
+
+    @Test
+    fun testGetFavoritesForComponent() {
+        controller.changeFavoriteStatus(TEST_CONTROL_INFO, true)
+        assertEquals(listOf(TEST_CONTROL_INFO), controller.getFavoritesForComponent(TEST_COMPONENT))
+    }
+
+    @Test
+    fun testGetFavoritesForComponent_otherComponent() {
+        controller.changeFavoriteStatus(TEST_CONTROL_INFO_2, true)
+        assertTrue(controller.getFavoritesForComponent(TEST_COMPONENT).isEmpty())
+    }
+
+    @Test
+    fun testGetFavoritesForComponent_multipleInOrder() {
+        val controlInfo = ControlInfo(TEST_COMPONENT, "id", "title", 0)
+
+        controller.changeFavoriteStatus(TEST_CONTROL_INFO, true)
+        controller.changeFavoriteStatus(controlInfo, true)
+
+        assertEquals(listOf(TEST_CONTROL_INFO, controlInfo),
+            controller.getFavoritesForComponent(TEST_COMPONENT))
+
+        controller.clearFavorites()
+
+        controller.changeFavoriteStatus(controlInfo, true)
+        controller.changeFavoriteStatus(TEST_CONTROL_INFO, true)
+
+        assertEquals(listOf(controlInfo, TEST_CONTROL_INFO),
+            controller.getFavoritesForComponent(TEST_COMPONENT))
+    }
+
+    @Test
+    fun testReplaceFavoritesForComponent_noFavorites() {
+        controller.replaceFavoritesForComponent(TEST_COMPONENT, listOf(TEST_CONTROL_INFO))
+
+        assertEquals(1, controller.countFavoritesForComponent(TEST_COMPONENT))
+        assertEquals(listOf(TEST_CONTROL_INFO), controller.getFavoritesForComponent(TEST_COMPONENT))
+    }
+
+    @Test
+    fun testReplaceFavoritesForComponent_differentComponentsAreFilteredOut() {
+        controller.replaceFavoritesForComponent(TEST_COMPONENT,
+            listOf(TEST_CONTROL_INFO, TEST_CONTROL_INFO_2))
+
+        assertEquals(1, controller.countFavoritesForComponent(TEST_COMPONENT))
+        assertEquals(listOf(TEST_CONTROL_INFO), controller.getFavoritesForComponent(TEST_COMPONENT))
+    }
+
+    @Test
+    fun testReplaceFavoritesForComponent_oldFavoritesRemoved() {
+        val controlInfo = ControlInfo(TEST_COMPONENT, "id", "title", 0)
+        assertNotEquals(TEST_CONTROL_INFO, controlInfo)
+
+        controller.changeFavoriteStatus(controlInfo, true)
+        controller.replaceFavoritesForComponent(TEST_COMPONENT, listOf(TEST_CONTROL_INFO))
+
+        assertEquals(1, controller.countFavoritesForComponent(TEST_COMPONENT))
+        assertEquals(listOf(TEST_CONTROL_INFO), controller.getFavoritesForComponent(TEST_COMPONENT))
+    }
+
+    @Test
+    fun testReplaceFavoritesForComponent_favoritesInOrder() {
+        val controlInfo = ControlInfo(TEST_COMPONENT, "id", "title", 0)
+
+        val listOrder1 = listOf(TEST_CONTROL_INFO, controlInfo)
+        controller.replaceFavoritesForComponent(TEST_COMPONENT, listOrder1)
+
+        assertEquals(2, controller.countFavoritesForComponent(TEST_COMPONENT))
+        assertEquals(listOrder1, controller.getFavoritesForComponent(TEST_COMPONENT))
+
+        val listOrder2 = listOf(controlInfo, TEST_CONTROL_INFO)
+        controller.replaceFavoritesForComponent(TEST_COMPONENT, listOrder2)
+
+        assertEquals(2, controller.countFavoritesForComponent(TEST_COMPONENT))
+        assertEquals(listOrder2, controller.getFavoritesForComponent(TEST_COMPONENT))
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManagerTest.kt
index 40566dc..a3e59e5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManagerTest.kt
@@ -18,9 +18,7 @@
 
 import android.content.ComponentName
 import android.os.UserHandle
-import android.service.controls.Control
 import android.service.controls.IControlsActionCallback
-import android.service.controls.IControlsLoadCallback
 import android.service.controls.IControlsProvider
 import android.service.controls.IControlsSubscriber
 import android.service.controls.actions.ControlAction
@@ -28,19 +26,19 @@
 import android.testing.AndroidTestingRunner
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
-import com.android.systemui.util.concurrency.DelayableExecutor
 import com.android.systemui.util.concurrency.FakeExecutor
 import com.android.systemui.util.time.FakeSystemClock
 import org.junit.After
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
-import org.junit.Assert.assertNull
 import org.junit.Assert.assertTrue
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.ArgumentCaptor
 import org.mockito.ArgumentMatchers
+import org.mockito.ArgumentMatchers.any
+import org.mockito.ArgumentMatchers.anyString
 import org.mockito.ArgumentMatchers.eq
 import org.mockito.Captor
 import org.mockito.Mock
@@ -53,20 +51,20 @@
 class ControlsProviderLifecycleManagerTest : SysuiTestCase() {
 
     @Mock
-    private lateinit var actionCallback: IControlsActionCallback.Stub
+    private lateinit var actionCallbackService: IControlsActionCallback.Stub
     @Mock
-    private lateinit var loadCallback: IControlsLoadCallback.Stub
-    @Mock
-    private lateinit var subscriber: IControlsSubscriber.Stub
+    private lateinit var subscriberService: IControlsSubscriber.Stub
     @Mock
     private lateinit var service: IControlsProvider.Stub
+    @Mock
+    private lateinit var loadCallback: ControlsBindingController.LoadCallback
 
     @Captor
     private lateinit var wrapperCaptor: ArgumentCaptor<ControlActionWrapper>
 
     private val componentName = ComponentName("test.pkg", "test.cls")
     private lateinit var manager: ControlsProviderLifecycleManager
-    private lateinit var executor: DelayableExecutor
+    private lateinit var executor: FakeExecutor
 
     companion object {
         fun <T> capture(argumentCaptor: ArgumentCaptor<T>): T = argumentCaptor.capture()
@@ -84,9 +82,8 @@
         manager = ControlsProviderLifecycleManager(
                 context,
                 executor,
-                loadCallback,
-                actionCallback,
-                subscriber,
+                actionCallbackService,
+                subscriberService,
                 UserHandle.of(0),
                 componentName
         )
@@ -112,22 +109,29 @@
 
     @Test
     fun testMaybeBindAndLoad() {
-        val callback: (List<Control>) -> Unit = {}
-        manager.maybeBindAndLoad(callback)
+        manager.maybeBindAndLoad(subscriberService)
 
-        verify(service).load(loadCallback)
+        verify(service).load(subscriberService)
 
         assertTrue(mContext.isBound(componentName))
-        assertEquals(callback, manager.lastLoadCallback)
     }
 
     @Test
     fun testMaybeUnbind_bindingAndCallback() {
-        manager.maybeBindAndLoad {}
+        manager.maybeBindAndLoad(subscriberService)
 
         manager.unbindService()
         assertFalse(mContext.isBound(componentName))
-        assertNull(manager.lastLoadCallback)
+    }
+
+    @Test
+    fun testMaybeBindAndLoad_timeout() {
+        manager.maybeBindAndLoad(subscriberService)
+
+        executor.advanceClockToLast()
+        executor.runAllReady()
+
+        verify(subscriberService).onError(any(), anyString())
     }
 
     @Test
@@ -136,7 +140,7 @@
         manager.maybeBindAndSubscribe(list)
 
         assertTrue(mContext.isBound(componentName))
-        verify(service).subscribe(list, subscriber)
+        verify(service).subscribe(list, subscriberService)
     }
 
     @Test
@@ -147,7 +151,7 @@
 
         assertTrue(mContext.isBound(componentName))
         verify(service).action(eq(controlId), capture(wrapperCaptor),
-                eq(actionCallback))
+                eq(actionCallbackService))
         assertEquals(action, wrapperCaptor.getValue().getWrappedAction())
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ServiceWrapperTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ServiceWrapperTest.kt
index 9e7ce06..cd82844 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ServiceWrapperTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ServiceWrapperTest.kt
@@ -18,7 +18,6 @@
 
 import android.os.RemoteException
 import android.service.controls.IControlsActionCallback
-import android.service.controls.IControlsLoadCallback
 import android.service.controls.IControlsProvider
 import android.service.controls.IControlsSubscriber
 import android.service.controls.IControlsSubscription
@@ -56,9 +55,6 @@
     private lateinit var subscriber: IControlsSubscriber
 
     @Mock
-    private lateinit var loadCallback: IControlsLoadCallback
-
-    @Mock
     private lateinit var actionCallback: IControlsActionCallback
 
     @Captor
@@ -81,16 +77,16 @@
 
     @Test
     fun testLoad_happyPath() {
-        val result = wrapper.load(loadCallback)
+        val result = wrapper.load(subscriber)
 
         assertTrue(result)
-        verify(service).load(loadCallback)
+        verify(service).load(subscriber)
     }
 
     @Test
     fun testLoad_error() {
         `when`(service.load(any())).thenThrow(exception)
-        val result = wrapper.load(loadCallback)
+        val result = wrapper.load(subscriber)
 
         assertFalse(result)
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/FavoriteModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/FavoriteModelTest.kt
new file mode 100644
index 0000000..9ffc29e
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/FavoriteModelTest.kt
@@ -0,0 +1,198 @@
+/*
+ * 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.controls.management
+
+import android.app.PendingIntent
+import android.service.controls.Control
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.controls.ControlStatus
+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.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+import org.mockito.Mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.MockitoAnnotations
+
+open class FavoriteModelTest : SysuiTestCase() {
+
+    @Mock
+    lateinit var pendingIntent: PendingIntent
+    @Mock
+    lateinit var allAdapter: ControlAdapter
+    @Mock
+    lateinit var favoritesAdapter: ControlAdapter
+
+    val idPrefix = "controlId"
+    val favoritesIndices = listOf(7, 3, 1, 9)
+    val favoritesList = favoritesIndices.map { "controlId$it" }
+    lateinit var controls: List<ControlStatus>
+
+    lateinit var model: FavoriteModel
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+
+        // controlId0 --> zone = 0
+        // controlId1 --> zone = 1, favorite
+        // controlId2 --> zone = 2
+        // controlId3 --> zone = 0, favorite
+        // controlId4 --> zone = 1
+        // controlId5 --> zone = 2
+        // controlId6 --> zone = 0
+        // controlId7 --> zone = 1, favorite
+        // controlId8 --> zone = 2
+        // controlId9 --> zone = 0, favorite
+        controls = (0..9).map {
+            ControlStatus(
+                    Control.StatelessBuilder("$idPrefix$it", pendingIntent)
+                            .setZone((it % 3).toString())
+                            .build(),
+                    it in favoritesIndices
+            )
+        }
+
+        model = FavoriteModel(controls, favoritesList, favoritesAdapter, allAdapter)
+    }
+}
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class FavoriteModelNonParametrizedTests : FavoriteModelTest() {
+    @Test
+    fun testAll() {
+        // Zones are sorted alphabetically
+        val expected = listOf(
+                ZoneNameWrapper("0"),
+                ControlWrapper(controls[0]),
+                ControlWrapper(controls[3]),
+                ControlWrapper(controls[6]),
+                ControlWrapper(controls[9]),
+                ZoneNameWrapper("1"),
+                ControlWrapper(controls[1]),
+                ControlWrapper(controls[4]),
+                ControlWrapper(controls[7]),
+                ZoneNameWrapper("2"),
+                ControlWrapper(controls[2]),
+                ControlWrapper(controls[5]),
+                ControlWrapper(controls[8])
+        )
+        assertEquals(expected, model.all)
+    }
+
+    @Test
+    fun testFavoritesInOrder() {
+        val expected = favoritesIndices.map { ControlWrapper(controls[it]) }
+        assertEquals(expected, model.favorites)
+    }
+
+    @Test
+    fun testChangeFavoriteStatus_addFavorite() {
+        val controlToAdd = 6
+        model.changeFavoriteStatus("$idPrefix$controlToAdd", true)
+
+        val pair = model.all.findControl(controlToAdd)
+        pair?.let {
+            assertTrue(it.second.favorite)
+            assertEquals(it.second, model.favorites.last().controlStatus)
+            verify(favoritesAdapter).notifyItemInserted(model.favorites.size - 1)
+            verify(allAdapter).notifyItemChanged(it.first)
+            verifyNoMoreInteractions(favoritesAdapter, allAdapter)
+        } ?: run {
+            fail("control not found")
+        }
+    }
+
+    @Test
+    fun testChangeFavoriteStatus_removeFavorite() {
+        val controlToRemove = 3
+        model.changeFavoriteStatus("$idPrefix$controlToRemove", false)
+
+        val pair = model.all.findControl(controlToRemove)
+        pair?.let {
+            assertFalse(it.second.favorite)
+            assertTrue(model.favorites.none {
+                it.controlStatus.control.controlId == "$idPrefix$controlToRemove"
+            })
+            verify(favoritesAdapter).notifyItemRemoved(favoritesIndices.indexOf(controlToRemove))
+            verify(allAdapter).notifyItemChanged(it.first)
+            verifyNoMoreInteractions(favoritesAdapter, allAdapter)
+        } ?: run {
+            fail("control not found")
+        }
+    }
+
+    @Test
+    fun testChangeFavoriteStatus_sameStatus() {
+        model.changeFavoriteStatus("${idPrefix}7", true)
+        model.changeFavoriteStatus("${idPrefix}6", false)
+
+        val expected = favoritesIndices.map { ControlWrapper(controls[it]) }
+        assertEquals(expected, model.favorites)
+
+        verifyNoMoreInteractions(favoritesAdapter, allAdapter)
+    }
+
+    private fun List<ElementWrapper>.findControl(controlIndex: Int): Pair<Int, ControlStatus>? {
+        val index = indexOfFirst {
+            it is ControlWrapper &&
+                it.controlStatus.control.controlId == "$idPrefix$controlIndex"
+        }
+        return if (index == -1) null else index to (get(index) as ControlWrapper).controlStatus
+    }
+}
+
+@SmallTest
+@RunWith(Parameterized::class)
+class FavoriteModelParameterizedTest(val from: Int, val to: Int) : FavoriteModelTest() {
+
+    companion object {
+        @JvmStatic
+        @Parameterized.Parameters(name = "{0} -> {1}")
+        fun data(): Collection<Array<Int>> {
+            return (0..3).flatMap { from ->
+                (0..3).map { to ->
+                    arrayOf(from, to)
+                }
+            }.filterNot { it[0] == it[1] }
+        }
+    }
+
+    @Test
+    fun testMoveItem() {
+        val originalFavorites = model.favorites.toList()
+        val originalFavoritesIds =
+                model.favorites.map { it.controlStatus.control.controlId }.toSet()
+        model.onMoveItem(from, to)
+        assertEquals(originalFavorites[from], model.favorites[to])
+        // Check that we still have the same favorites
+        assertEquals(originalFavoritesIds,
+                model.favorites.map { it.controlStatus.control.controlId }.toSet())
+
+        verify(favoritesAdapter).notifyItemMoved(from, to)
+
+        verifyNoMoreInteractions(allAdapter, favoritesAdapter)
+    }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
index 399f723f..9117ea8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
@@ -173,6 +173,21 @@
     }
 
     @Test
+    public void testPulsing_withoutLightSensor_setsAoDDimmingScrimTransparent() throws Exception {
+        mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
+                null /* sensor */, mBroadcastDispatcher, mDozeHost, null /* handler */,
+                DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY,
+                true /* debuggable */);
+        mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
+        mScreen.transitionTo(INITIALIZED, DOZE);
+        reset(mDozeHost);
+
+        mScreen.transitionTo(DOZE, DOZE_REQUEST_PULSE);
+
+        verify(mDozeHost).setAodDimmingScrim(eq(0f));
+    }
+
+    @Test
     public void testDockedAod_usesLightSensor() {
         mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
         mScreen.transitionTo(INITIALIZED, DOZE_AOD_DOCKED);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/glwallpaper/EglHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/glwallpaper/EglHelperTest.java
index a5722e2..4b47093 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/glwallpaper/EglHelperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/glwallpaper/EglHelperTest.java
@@ -16,52 +16,116 @@
 
 package com.android.systemui.glwallpaper;
 
-import static org.junit.Assert.*;
-import static org.mockito.Mockito.RETURNS_DEFAULTS;
-import static org.mockito.Mockito.mock;
+import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.atMost;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.graphics.PixelFormat;
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
+import android.view.Surface;
+import android.view.SurfaceControl;
 import android.view.SurfaceHolder;
+import android.view.SurfaceSession;
 
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
 
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper
 public class EglHelperTest extends SysuiTestCase {
 
-    @Mock
+    @Spy
     private EglHelper mEglHelper;
+
     @Mock
     private SurfaceHolder mSurfaceHolder;
 
     @Before
     public void setUp() throws Exception {
-        mEglHelper = mock(EglHelper.class, RETURNS_DEFAULTS);
-        mSurfaceHolder = mock(SurfaceHolder.class, RETURNS_DEFAULTS);
+        MockitoAnnotations.initMocks(this);
+        prepareSurface();
+    }
+
+    @After
+    public void tearDown() {
+        mSurfaceHolder.getSurface().destroy();
+        mSurfaceHolder = null;
+    }
+
+    private void prepareSurface() {
+        final SurfaceSession session = new SurfaceSession();
+        final SurfaceControl control = new SurfaceControl.Builder(session)
+                .setName("Test")
+                .setBufferSize(100, 100)
+                .setFormat(PixelFormat.RGB_888)
+                .build();
+        final Surface surface = new Surface();
+        surface.copyFrom(control);
+        when(mSurfaceHolder.getSurface()).thenReturn(surface);
+        assertThat(mSurfaceHolder.getSurface()).isNotNull();
+        assertThat(mSurfaceHolder.getSurface().isValid()).isTrue();
     }
 
     @Test
     public void testInit_finish() {
         mEglHelper.init(mSurfaceHolder, false /* wideColorGamut */);
+        assertThat(mEglHelper.hasEglDisplay()).isTrue();
+        assertThat(mEglHelper.hasEglContext()).isTrue();
+        assertThat(mEglHelper.hasEglSurface()).isTrue();
+        verify(mEglHelper).askCreatingEglWindowSurface(
+                any(SurfaceHolder.class), eq(null), anyInt());
+
+        mEglHelper.finish();
+        assertThat(mEglHelper.hasEglSurface()).isFalse();
+        assertThat(mEglHelper.hasEglContext()).isFalse();
+        assertThat(mEglHelper.hasEglDisplay()).isFalse();
+    }
+
+    @Test
+    public void testInit_finish_wide_gamut() {
+        // In EglHelper, EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT = 0x3490;
+        doReturn(0x3490).when(mEglHelper).getWcgCapability();
+        // In EglHelper, KHR_GL_COLOR_SPACE = "EGL_KHR_gl_colorspace";
+        doReturn(true).when(mEglHelper).checkExtensionCapability("EGL_KHR_gl_colorspace");
+        ArgumentCaptor<int[]> ac = ArgumentCaptor.forClass(int[].class);
+        // {EGL_GL_COLORSPACE_KHR, EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT, EGL_NONE}
+        final int[] expectedArgument = new int[] {0x309D, 0x3490, 0x3038};
+
+        mEglHelper.init(mSurfaceHolder, true /* wideColorGamut */);
+        verify(mEglHelper)
+                .askCreatingEglWindowSurface(any(SurfaceHolder.class), ac.capture(), anyInt());
+        assertThat(ac.getValue()).isNotNull();
+        assertThat(ac.getValue()).isEqualTo(expectedArgument);
         mEglHelper.finish();
     }
 
     @Test
     public void testFinish_shouldNotCrash() {
-        assertFalse(mEglHelper.hasEglDisplay());
-        assertFalse(mEglHelper.hasEglSurface());
-        assertFalse(mEglHelper.hasEglContext());
+        mEglHelper.terminateEglDisplay();
+        assertThat(mEglHelper.hasEglDisplay()).isFalse();
+        assertThat(mEglHelper.hasEglSurface()).isFalse();
+        assertThat(mEglHelper.hasEglContext()).isFalse();
 
         mEglHelper.finish();
+        verify(mEglHelper, never()).destroyEglContext();
+        verify(mEglHelper, never()).destroyEglSurface();
+        verify(mEglHelper, atMost(1)).terminateEglDisplay();
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/glwallpaper/ImageWallpaperRendererTest.java b/packages/SystemUI/tests/src/com/android/systemui/glwallpaper/ImageWallpaperRendererTest.java
new file mode 100644
index 0000000..d881fd5
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/glwallpaper/ImageWallpaperRendererTest.java
@@ -0,0 +1,106 @@
+/*
+ * 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.glwallpaper;
+
+import static com.android.systemui.glwallpaper.GLWallpaperRenderer.SurfaceProxy;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.app.WallpaperManager;
+import android.app.WallpaperManager.ColorManagementProxy;
+import android.graphics.Bitmap;
+import android.graphics.ColorSpace;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+public class ImageWallpaperRendererTest extends SysuiTestCase {
+
+    private WallpaperManager mWpmSpy;
+    private SurfaceProxy mSurfaceProxy;
+
+    @Before
+    public void setUp() throws Exception {
+        final WallpaperManager wpm = mContext.getSystemService(WallpaperManager.class);
+        mWpmSpy = spy(wpm);
+        mContext.addMockSystemService(WallpaperManager.class, mWpmSpy);
+
+        mSurfaceProxy = new SurfaceProxy() {
+            @Override
+            public void requestRender() {
+                // NO-op
+            }
+
+            @Override
+            public void preRender() {
+                // No-op
+            }
+
+            @Override
+            public void postRender() {
+                // No-op
+            }
+        };
+    }
+
+    @Test
+    public void testWcgContent() throws IOException {
+        final Bitmap srgbBitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
+        final Bitmap p3Bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888,
+                false /* hasAlpha */, ColorSpace.get(ColorSpace.Named.DISPLAY_P3));
+
+        final ColorManagementProxy proxy = new ColorManagementProxy(mContext);
+        final ColorManagementProxy cmProxySpy = spy(proxy);
+        final Set<ColorSpace> supportedWideGamuts = new HashSet<>();
+        supportedWideGamuts.add(ColorSpace.get(ColorSpace.Named.DISPLAY_P3));
+
+        try {
+            doReturn(true).when(mWpmSpy).shouldEnableWideColorGamut();
+            doReturn(cmProxySpy).when(mWpmSpy).getColorManagementProxy();
+            doReturn(supportedWideGamuts).when(cmProxySpy).getSupportedColorSpaces();
+
+            mWpmSpy.setBitmap(p3Bitmap);
+            ImageWallpaperRenderer rendererP3 = new ImageWallpaperRenderer(mContext, mSurfaceProxy);
+            assertThat(rendererP3.isWcgContent()).isTrue();
+
+            mWpmSpy.setBitmap(srgbBitmap);
+            ImageWallpaperRenderer renderer = new ImageWallpaperRenderer(mContext, mSurfaceProxy);
+            assertThat(renderer.isWcgContent()).isFalse();
+        } finally {
+            srgbBitmap.recycle();
+            p3Bitmap.recycle();
+        }
+    }
+
+}
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 acc30d9..9a707caa 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
@@ -18,24 +18,30 @@
 
 import static android.view.WindowManagerPolicyConstants.OFF_BECAUSE_OF_USER;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.app.admin.DevicePolicyManager;
+import android.app.trust.TrustManager;
+import android.os.PowerManager;
+import android.os.PowerManager.WakeLock;
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.widget.LockPatternUtils;
 import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.systemui.DumpController;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.classifier.FalsingManagerFake;
-import com.android.systemui.plugins.FalsingManager;
 import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
 import com.android.systemui.util.concurrency.FakeExecutor;
@@ -60,6 +66,9 @@
     private @Mock NotificationShadeWindowController mNotificationShadeWindowController;
     private @Mock BroadcastDispatcher mBroadcastDispatcher;
     private @Mock DismissCallbackRegistry mDismissCallbackRegistry;
+    private @Mock DumpController mDumpController;
+    private @Mock PowerManager mPowerManager;
+    private @Mock TrustManager mTrustManager;
     private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
 
     private FalsingManagerFake mFalsingManager;
@@ -69,24 +78,33 @@
         MockitoAnnotations.initMocks(this);
         mFalsingManager = new FalsingManagerFake();
 
-        mDependency.injectTestDependency(FalsingManager.class, mFalsingManager);
-        mDependency.injectTestDependency(KeyguardUpdateMonitor.class, mUpdateMonitor);
-
         when(mLockPatternUtils.getDevicePolicyManager()).thenReturn(mDevicePolicyManager);
+        when(mPowerManager.newWakeLock(anyInt(), any())).thenReturn(mock(WakeLock.class));
 
-        TestableLooper.get(this).runWithLooper(() -> {
-            mViewMediator = new KeyguardViewMediator(
-                    mContext, mFalsingManager, mLockPatternUtils, mBroadcastDispatcher,
-                    mNotificationShadeWindowController, () -> mStatusBarKeyguardViewManager,
-                    mDismissCallbackRegistry, mUiBgExecutor);
-        });
+        mViewMediator = new KeyguardViewMediator(
+                mContext, mFalsingManager, mLockPatternUtils, mBroadcastDispatcher,
+                mNotificationShadeWindowController, () -> mStatusBarKeyguardViewManager,
+                mDismissCallbackRegistry, mUpdateMonitor, mDumpController, mUiBgExecutor,
+                mPowerManager, mTrustManager);
+        mViewMediator.start();
     }
 
     @Test
     public void testOnGoingToSleep_UpdatesKeyguardGoingAway() {
-        mViewMediator.start();
         mViewMediator.onStartedGoingToSleep(OFF_BECAUSE_OF_USER);
         verify(mUpdateMonitor).setKeyguardGoingAway(false);
         verify(mNotificationShadeWindowController, never()).setKeyguardGoingAway(anyBoolean());
     }
+
+    @Test
+    public void testRegisterDumpable() {
+        verify(mDumpController).registerDumpable(eq(mViewMediator));
+        verify(mNotificationShadeWindowController, never()).setKeyguardGoingAway(anyBoolean());
+    }
+
+    @Test
+    public void testKeyguardGone_notGoingaway() {
+        mViewMediator.mViewMediatorCallback.keyguardGone();
+        verify(mNotificationShadeWindowController).setKeyguardGoingAway(eq(false));
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java
index d26ae6a..3439fe5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java
@@ -119,6 +119,7 @@
         doReturn(code).when(mIActivityTaskManager).startActivityAsUser(
                 eq((IApplicationThread) null),
                 eq((String) null),
+                eq((String) null),
                 any(Intent.class),
                 eq((String) null),
                 eq((IBinder) null),
@@ -134,6 +135,7 @@
         verify(mIActivityTaskManager).startActivityAsUser(
                 eq((IApplicationThread) null),
                 eq((String) null),
+                eq((String) null),
                 any(Intent.class),
                 eq((String) null),
                 eq((IBinder) null),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/log/RichEventTest.java b/packages/SystemUI/tests/src/com/android/systemui/log/RichEventTest.java
deleted file mode 100644
index 4a90bb9..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/log/RichEventTest.java
+++ /dev/null
@@ -1,69 +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.log;
-
-import static junit.framework.Assert.assertEquals;
-
-import android.testing.AndroidTestingRunner;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.systemui.SysuiTestCase;
-
-import junit.framework.Assert;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-public class RichEventTest extends SysuiTestCase {
-
-    private static final int TOTAL_EVENT_TYPES = 1;
-
-    @Test
-    public void testCreateRichEvent_invalidType() {
-        try {
-            // indexing for events starts at 0, so TOTAL_EVENT_TYPES is an invalid type
-            new TestableRichEvent(Event.DEBUG, TOTAL_EVENT_TYPES, "msg");
-        } catch (IllegalArgumentException e) {
-            // expected
-            return;
-        }
-
-        Assert.fail("Expected an invalidArgumentException since the event type was invalid.");
-    }
-
-    @Test
-    public void testCreateRichEvent() {
-        final int eventType = 0;
-        RichEvent e = new TestableRichEvent(Event.DEBUG, eventType, "msg");
-        assertEquals(e.getType(), eventType);
-    }
-
-    class TestableRichEvent extends RichEvent {
-        TestableRichEvent(int logLevel, int type, String reason) {
-            init(logLevel, type, reason);
-        }
-
-        @Override
-        public String[] getEventLabels() {
-            return new String[]{"ACTION_NAME"};
-        }
-    }
-
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/log/SysuiLogTest.java b/packages/SystemUI/tests/src/com/android/systemui/log/SysuiLogTest.java
deleted file mode 100644
index e7b317e..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/log/SysuiLogTest.java
+++ /dev/null
@@ -1,111 +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.log;
-
-import static junit.framework.Assert.assertEquals;
-
-import android.testing.AndroidTestingRunner;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.systemui.DumpController;
-import com.android.systemui.SysuiTestCase;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-public class SysuiLogTest extends SysuiTestCase {
-    private static final String TEST_ID = "TestLogger";
-    private static final String TEST_MSG = "msg";
-    private static final int MAX_LOGS = 5;
-
-    @Mock
-    private DumpController mDumpController;
-    private SysuiLog<Event> mSysuiLog;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-    }
-
-    @Test
-    public void testLogDisabled_noLogsWritten() {
-        mSysuiLog = new TestSysuiLog(mDumpController, TEST_ID, MAX_LOGS, false);
-        assertEquals(null, mSysuiLog.mTimeline);
-
-        mSysuiLog.log(createEvent(TEST_MSG));
-        assertEquals(null, mSysuiLog.mTimeline);
-    }
-
-    @Test
-    public void testLogEnabled_logWritten() {
-        mSysuiLog = new TestSysuiLog(mDumpController, TEST_ID, MAX_LOGS, true);
-        assertEquals(0, mSysuiLog.mTimeline.size());
-
-        mSysuiLog.log(createEvent(TEST_MSG));
-        assertEquals(1, mSysuiLog.mTimeline.size());
-    }
-
-    @Test
-    public void testMaxLogs() {
-        mSysuiLog = new TestSysuiLog(mDumpController, TEST_ID, MAX_LOGS, true);
-        assertEquals(mSysuiLog.mTimeline.size(), 0);
-
-        for (int i = 0; i < MAX_LOGS + 1; i++) {
-            mSysuiLog.log(createEvent(TEST_MSG + i));
-        }
-
-        assertEquals(MAX_LOGS, mSysuiLog.mTimeline.size());
-
-        // check the first message (msg0) was replaced with msg1:
-        assertEquals(TEST_MSG + "1", mSysuiLog.mTimeline.getFirst().getMessage());
-    }
-
-    @Test
-    public void testRecycleLogs() {
-        // GIVEN a SysuiLog with one log
-        mSysuiLog = new TestSysuiLog(mDumpController, TEST_ID, MAX_LOGS, true);
-        Event e = createEvent(TEST_MSG); // msg
-        mSysuiLog.log(e); // Logs: [msg]
-
-        Event recycledEvent = null;
-        // WHEN we add MAX_LOGS after the first log
-        for (int i = 0; i < MAX_LOGS; i++) {
-            recycledEvent = mSysuiLog.log(createEvent(TEST_MSG + i));
-        }
-        // Logs: [msg1, msg2, msg3, msg4]
-
-        // THEN we see the recycledEvent is e
-        assertEquals(e, recycledEvent);
-    }
-
-    private Event createEvent(String msg) {
-        return new Event().init(msg);
-    }
-
-    public class TestSysuiLog extends SysuiLog<Event> {
-        protected TestSysuiLog(DumpController dumpController, String id, int maxLogs,
-                boolean enabled) {
-            super(dumpController, id, maxLogs, enabled, false);
-        }
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSCarrierGroupControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSCarrierGroupControllerTest.java
deleted file mode 100644
index 1bfe1b1..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSCarrierGroupControllerTest.java
+++ /dev/null
@@ -1,222 +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.qs;
-
-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.Handler;
-import android.telephony.SubscriptionManager;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-import android.view.View;
-import android.widget.TextView;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.keyguard.CarrierTextController;
-import com.android.systemui.plugins.ActivityStarter;
-import com.android.systemui.statusbar.policy.NetworkController;
-import com.android.systemui.utils.leaks.LeakCheckedTest;
-import com.android.systemui.utils.os.FakeHandler;
-
-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 org.mockito.stubbing.Answer;
-
-@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper
-@SmallTest
-public class QSCarrierGroupControllerTest extends LeakCheckedTest {
-
-    private QSCarrierGroupController mQSCarrierGroupController;
-    private NetworkController.SignalCallback mSignalCallback;
-    private CarrierTextController.CarrierTextCallback mCallback;
-    @Mock
-    private QSCarrierGroup mQSCarrierGroup;
-    @Mock
-    private ActivityStarter mActivityStarter;
-    @Mock
-    private NetworkController mNetworkController;
-    @Mock
-    private CarrierTextController.Builder mCarrierTextControllerBuilder;
-    @Mock
-    private CarrierTextController mCarrierTextController;
-    private TestableLooper mTestableLooper;
-
-    @Before
-    public void setup() throws Exception {
-        MockitoAnnotations.initMocks(this);
-        injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
-        mTestableLooper = TestableLooper.get(this);
-        Handler handler = new FakeHandler(TestableLooper.get(this).getLooper());
-
-        when(mNetworkController.hasVoiceCallingFeature()).thenReturn(true);
-        doAnswer(invocation -> mSignalCallback = invocation.getArgument(0))
-                .when(mNetworkController)
-                .addCallback(any(NetworkController.SignalCallback.class));
-
-        when(mCarrierTextControllerBuilder.setShowAirplaneMode(anyBoolean()))
-                .thenReturn(mCarrierTextControllerBuilder);
-        when(mCarrierTextControllerBuilder.setShowMissingSim(anyBoolean()))
-                .thenReturn(mCarrierTextControllerBuilder);
-        when(mCarrierTextControllerBuilder.build()).thenReturn(mCarrierTextController);
-
-        doAnswer(invocation -> mCallback = invocation.getArgument(0))
-                .when(mCarrierTextController)
-                .setListening(any(CarrierTextController.CarrierTextCallback.class));
-
-        when(mQSCarrierGroup.getNoSimTextView()).thenReturn(new TextView(mContext));
-        when(mQSCarrierGroup.getCarrier1View()).thenReturn(mock(QSCarrier.class));
-        when(mQSCarrierGroup.getCarrier2View()).thenReturn(mock(QSCarrier.class));
-        when(mQSCarrierGroup.getCarrier3View()).thenReturn(mock(QSCarrier.class));
-        when(mQSCarrierGroup.getCarrierDivider1()).thenReturn(new View(mContext));
-        when(mQSCarrierGroup.getCarrierDivider2()).thenReturn(new View(mContext));
-
-        mQSCarrierGroupController = new QSCarrierGroupController.Builder(
-                mActivityStarter, handler, TestableLooper.get(this).getLooper(),
-                mNetworkController, mCarrierTextControllerBuilder)
-                .setQSCarrierGroup(mQSCarrierGroup)
-                .build();
-
-        mQSCarrierGroupController.setListening(true);
-    }
-
-    @Test // throws no Exception
-    public void testUpdateCarrierText_sameLengths() {
-        QSCarrierGroupController spiedCarrierGroupController =
-                Mockito.spy(mQSCarrierGroupController);
-        when(spiedCarrierGroupController.getSlotIndex(anyInt())).thenAnswer(
-                (Answer<Integer>) invocationOnMock -> invocationOnMock.getArgument(0));
-
-        // listOfCarriers length 1, subscriptionIds length 1, anySims false
-        CarrierTextController.CarrierTextCallbackInfo
-                c1 = new CarrierTextController.CarrierTextCallbackInfo(
-                "",
-                new CharSequence[]{""},
-                false,
-                new int[]{0});
-        mCallback.updateCarrierInfo(c1);
-
-        // listOfCarriers length 1, subscriptionIds length 1, anySims true
-        CarrierTextController.CarrierTextCallbackInfo
-                c2 = new CarrierTextController.CarrierTextCallbackInfo(
-                "",
-                new CharSequence[]{""},
-                true,
-                new int[]{0});
-        mCallback.updateCarrierInfo(c2);
-
-        // listOfCarriers length 2, subscriptionIds length 2, anySims false
-        CarrierTextController.CarrierTextCallbackInfo
-                c3 = new CarrierTextController.CarrierTextCallbackInfo(
-                "",
-                new CharSequence[]{"", ""},
-                false,
-                new int[]{0, 1});
-        mCallback.updateCarrierInfo(c3);
-
-        // listOfCarriers length 2, subscriptionIds length 2, anySims true
-        CarrierTextController.CarrierTextCallbackInfo
-                c4 = new CarrierTextController.CarrierTextCallbackInfo(
-                "",
-                new CharSequence[]{"", ""},
-                true,
-                new int[]{0, 1});
-        mCallback.updateCarrierInfo(c4);
-
-        mTestableLooper.processAllMessages();
-    }
-
-    @Test // throws no Exception
-    public void testUpdateCarrierText_differentLength() {
-        QSCarrierGroupController spiedCarrierGroupController =
-                Mockito.spy(mQSCarrierGroupController);
-        when(spiedCarrierGroupController.getSlotIndex(anyInt())).thenAnswer(
-                (Answer<Integer>) invocationOnMock -> invocationOnMock.getArgument(0));
-
-        // listOfCarriers length 2, subscriptionIds length 1, anySims false
-        CarrierTextController.CarrierTextCallbackInfo
-                c1 = new CarrierTextController.CarrierTextCallbackInfo(
-                "",
-                new CharSequence[]{"", ""},
-                false,
-                new int[]{0});
-        mCallback.updateCarrierInfo(c1);
-
-        // listOfCarriers length 2, subscriptionIds length 1, anySims true
-        CarrierTextController.CarrierTextCallbackInfo
-                c2 = new CarrierTextController.CarrierTextCallbackInfo(
-                "",
-                new CharSequence[]{"", ""},
-                true,
-                new int[]{0});
-        mCallback.updateCarrierInfo(c2);
-
-        // listOfCarriers length 1, subscriptionIds length 2, anySims false
-        CarrierTextController.CarrierTextCallbackInfo
-                c3 = new CarrierTextController.CarrierTextCallbackInfo(
-                "",
-                new CharSequence[]{""},
-                false,
-                new int[]{0, 1});
-        mCallback.updateCarrierInfo(c3);
-
-        // listOfCarriers length 1, subscriptionIds length 2, anySims true
-        CarrierTextController.CarrierTextCallbackInfo
-                c4 = new CarrierTextController.CarrierTextCallbackInfo(
-                "",
-                new CharSequence[]{""},
-                true,
-                new int[]{0, 1});
-        mCallback.updateCarrierInfo(c4);
-        mTestableLooper.processAllMessages();
-    }
-
-    @Test // throws no Exception
-    public void testUpdateCarrierText_invalidSim() {
-        QSCarrierGroupController spiedCarrierGroupController =
-                Mockito.spy(mQSCarrierGroupController);
-        when(spiedCarrierGroupController.getSlotIndex(anyInt())).thenReturn(
-                SubscriptionManager.INVALID_SIM_SLOT_INDEX);
-
-        CarrierTextController.CarrierTextCallbackInfo
-                c4 = new CarrierTextController.CarrierTextCallbackInfo(
-                "",
-                new CharSequence[]{"", ""},
-                true,
-                new int[]{0, 1});
-        mCallback.updateCarrierInfo(c4);
-        mTestableLooper.processAllMessages();
-    }
-
-    @Test // throws no Exception
-    public void testSetMobileDataIndicators_invalidSim() {
-        mSignalCallback.setMobileDataIndicators(
-                mock(NetworkController.IconState.class),
-                mock(NetworkController.IconState.class),
-                0, 0, true, true, "", "", true, 0, true);
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
index b7e9f07..d668458 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
@@ -42,6 +42,7 @@
 import com.android.systemui.SysuiBaseFragmentTest;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSFactoryImpl;
 import com.android.systemui.shared.plugins.PluginManager;
 import com.android.systemui.statusbar.CommandQueue;
@@ -104,7 +105,8 @@
                 mock(QSFactoryImpl.class), new Handler(), Looper.myLooper(),
                 mock(PluginManager.class), mock(TunerService.class),
                 () -> mock(AutoTileManager.class), mock(DumpController.class),
-                mock(BroadcastDispatcher.class), Optional.of(mock(StatusBar.class)));
+                mock(BroadcastDispatcher.class), Optional.of(mock(StatusBar.class)),
+                mock(QSLogger.class));
         qs.setHost(host);
 
         qs.setListening(true);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java
index 38cdee4..b126d36 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java
@@ -35,9 +35,12 @@
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.systemui.DumpController;
 import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.plugins.qs.QSTileView;
 import com.android.systemui.qs.customize.QSCustomizer;
+import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 
 import org.junit.Before;
@@ -65,6 +68,12 @@
     private QSCustomizer mCustomizer;
     @Mock
     private QSTileImpl dndTile;
+    @Mock
+    private BroadcastDispatcher mBroadcastDispatcher;
+    @Mock
+    private DumpController mDumpController;
+    @Mock
+    private QSLogger mQSLogger;
     private ViewGroup mParentView;
     @Mock
     private QSDetail.Callback mCallback;
@@ -78,7 +87,8 @@
         mTestableLooper = TestableLooper.get(this);
         mTestableLooper.runWithLooper(() -> {
             mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);
-            mQsPanel = new QSPanel(mContext, null);
+            mQsPanel = new QSPanel(mContext, null, mDumpController, mBroadcastDispatcher,
+                    mQSLogger);
             // Provides a parent with non-zero size for QSPanel
             mParentView = new FrameLayout(mContext);
             mParentView.addView(mQsPanel);
@@ -97,8 +107,10 @@
     public void testSetExpanded_Metrics() {
         mQsPanel.setExpanded(true);
         verify(mMetricsLogger).visibility(eq(MetricsEvent.QS_PANEL), eq(true));
+        verify(mQSLogger).logPanelExpanded(true, mQsPanel.getDumpableTag());
         mQsPanel.setExpanded(false);
         verify(mMetricsLogger).visibility(eq(MetricsEvent.QS_PANEL), eq(false));
+        verify(mQSLogger).logPanelExpanded(false, mQsPanel.getDumpableTag());
     }
 
     @Test
@@ -110,6 +122,14 @@
         verify(mCallback).onShowingDetail(any(), anyInt(), anyInt());
     }
 
+    @Test
+    public void setListening() {
+        when(dndTile.getTileSpec()).thenReturn("dnd");
+
+        mQsPanel.setListening(true);
+        verify(mQSLogger).logAllTilesChangeListening(true, mQsPanel.getDumpableTag(), "dnd");
+    }
+
 /*    @Test
     public void testOpenDetailsWithNullParameter_NoException() {
         mTestableLooper.processAllMessages();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
index 34111e2..d0c32ce 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
@@ -23,6 +23,7 @@
 
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.app.ActivityManager;
@@ -45,6 +46,7 @@
 import com.android.systemui.plugins.qs.QSFactory;
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.qs.external.CustomTile;
+import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSFactoryImpl;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.shared.plugins.PluginManager;
@@ -95,6 +97,8 @@
     @Mock
     private StatusBar mStatusBar;
     @Mock
+    private QSLogger mQSLogger;
+    @Mock
     private CustomTile mCustomTile;
 
     private Handler mHandler;
@@ -108,7 +112,7 @@
         mHandler = new Handler(mLooper.getLooper());
         mQSTileHost = new TestQSTileHost(mContext, mIconController, mDefaultFactory, mHandler,
                 mLooper.getLooper(), mPluginManager, mTunerService, mAutoTiles, mDumpController,
-                mBroadcastDispatcher, mStatusBar);
+                mBroadcastDispatcher, mStatusBar, mQSLogger);
         setUpTileFactory();
         Settings.Secure.putStringForUser(mContext.getContentResolver(), QSTileHost.TILES_SETTING,
                 "", ActivityManager.getCurrentUser());
@@ -187,6 +191,7 @@
         assertEquals(1, mQSTileHost.getTiles().size());
         QSTile element = CollectionUtils.firstOrNull(mQSTileHost.getTiles());
         assertTrue(element instanceof TestTile1);
+        verify(mQSLogger).logTileAdded("spec1");
     }
 
     @Test
@@ -200,6 +205,9 @@
         QSTile[] elements = mQSTileHost.getTiles().toArray(new QSTile[0]);
         assertTrue(elements[0] instanceof TestTile1);
         assertTrue(elements[1] instanceof TestTile2);
+
+        verify(mQSLogger).logTileAdded("spec1");
+        verify(mQSLogger).logTileAdded("spec2");
     }
 
     @Test
@@ -210,6 +218,8 @@
         mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "default");
         assertEquals(1, mQSTileHost.getTiles().size());
         assertEquals(mCustomTile, CollectionUtils.firstOrNull(mQSTileHost.getTiles()));
+
+        verify(mQSLogger).logTileAdded(CUSTOM_TILE_SPEC);
     }
 
     private static class TestQSTileHost extends QSTileHost {
@@ -217,10 +227,10 @@
                 QSFactoryImpl defaultFactory, Handler mainHandler, Looper bgLooper,
                 PluginManager pluginManager, TunerService tunerService,
                 Provider<AutoTileManager> autoTiles, DumpController dumpController,
-                BroadcastDispatcher broadcastDispatcher, StatusBar statusBar) {
+                BroadcastDispatcher broadcastDispatcher, StatusBar statusBar, QSLogger qsLogger) {
             super(context, iconController, defaultFactory, mainHandler, bgLooper, pluginManager,
                     tunerService, autoTiles, dumpController, broadcastDispatcher,
-                    Optional.of(statusBar));
+                    Optional.of(statusBar), qsLogger);
         }
 
         @Override
@@ -280,9 +290,6 @@
         }
 
         @Override
-        protected void handleSetListening(boolean listening) {}
-
-        @Override
         public CharSequence getTileLabel() {
             return null;
         }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/CellSignalStateTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/CellSignalStateTest.kt
new file mode 100644
index 0000000..75be74b
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/CellSignalStateTest.kt
@@ -0,0 +1,48 @@
+/*
+ * 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.qs.carrier
+
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import org.junit.Assert.assertNotSame
+import org.junit.Assert.assertSame
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class CellSignalStateTest : SysuiTestCase() {
+
+    @Test
+    fun testChangeVisibility_sameObject() {
+        val c = CellSignalState()
+
+        val other = c.changeVisibility(c.visible)
+
+        assertSame(c, other)
+    }
+
+    @Test
+    fun testChangeVisibility_otherObject() {
+        val c = CellSignalState()
+
+        val other = c.changeVisibility(!c.visible)
+
+        assertNotSame(c, other)
+    }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java
new file mode 100644
index 0000000..fa02231
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs.carrier;
+
+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.Handler;
+import android.telephony.SubscriptionManager;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.keyguard.CarrierTextController;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.statusbar.policy.NetworkController;
+import com.android.systemui.utils.leaks.LeakCheckedTest;
+import com.android.systemui.utils.os.FakeHandler;
+
+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 org.mockito.stubbing.Answer;
+
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+@SmallTest
+public class QSCarrierGroupControllerTest extends LeakCheckedTest {
+
+    private QSCarrierGroupController mQSCarrierGroupController;
+    private NetworkController.SignalCallback mSignalCallback;
+    private CarrierTextController.CarrierTextCallback mCallback;
+    @Mock
+    private QSCarrierGroup mQSCarrierGroup;
+    @Mock
+    private ActivityStarter mActivityStarter;
+    @Mock
+    private NetworkController mNetworkController;
+    @Mock
+    private CarrierTextController.Builder mCarrierTextControllerBuilder;
+    @Mock
+    private CarrierTextController mCarrierTextController;
+    private TestableLooper mTestableLooper;
+
+    @Before
+    public void setup() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
+        mTestableLooper = TestableLooper.get(this);
+        Handler handler = new FakeHandler(TestableLooper.get(this).getLooper());
+
+        when(mNetworkController.hasVoiceCallingFeature()).thenReturn(true);
+        doAnswer(invocation -> mSignalCallback = invocation.getArgument(0))
+                .when(mNetworkController)
+                .addCallback(any(NetworkController.SignalCallback.class));
+
+        when(mCarrierTextControllerBuilder.setShowAirplaneMode(anyBoolean()))
+                .thenReturn(mCarrierTextControllerBuilder);
+        when(mCarrierTextControllerBuilder.setShowMissingSim(anyBoolean()))
+                .thenReturn(mCarrierTextControllerBuilder);
+        when(mCarrierTextControllerBuilder.build()).thenReturn(mCarrierTextController);
+
+        doAnswer(invocation -> mCallback = invocation.getArgument(0))
+                .when(mCarrierTextController)
+                .setListening(any(CarrierTextController.CarrierTextCallback.class));
+
+        when(mQSCarrierGroup.getNoSimTextView()).thenReturn(new TextView(mContext));
+        when(mQSCarrierGroup.getCarrier1View()).thenReturn(mock(QSCarrier.class));
+        when(mQSCarrierGroup.getCarrier2View()).thenReturn(mock(QSCarrier.class));
+        when(mQSCarrierGroup.getCarrier3View()).thenReturn(mock(QSCarrier.class));
+        when(mQSCarrierGroup.getCarrierDivider1()).thenReturn(new View(mContext));
+        when(mQSCarrierGroup.getCarrierDivider2()).thenReturn(new View(mContext));
+
+        mQSCarrierGroupController = new QSCarrierGroupController.Builder(
+                mActivityStarter, handler, TestableLooper.get(this).getLooper(),
+                mNetworkController, mCarrierTextControllerBuilder)
+                .setQSCarrierGroup(mQSCarrierGroup)
+                .build();
+
+        mQSCarrierGroupController.setListening(true);
+    }
+
+    @Test // throws no Exception
+    public void testUpdateCarrierText_sameLengths() {
+        QSCarrierGroupController spiedCarrierGroupController =
+                Mockito.spy(mQSCarrierGroupController);
+        when(spiedCarrierGroupController.getSlotIndex(anyInt())).thenAnswer(
+                (Answer<Integer>) invocationOnMock -> invocationOnMock.getArgument(0));
+
+        // listOfCarriers length 1, subscriptionIds length 1, anySims false
+        CarrierTextController.CarrierTextCallbackInfo
+                c1 = new CarrierTextController.CarrierTextCallbackInfo(
+                "",
+                new CharSequence[]{""},
+                false,
+                new int[]{0});
+        mCallback.updateCarrierInfo(c1);
+
+        // listOfCarriers length 1, subscriptionIds length 1, anySims true
+        CarrierTextController.CarrierTextCallbackInfo
+                c2 = new CarrierTextController.CarrierTextCallbackInfo(
+                "",
+                new CharSequence[]{""},
+                true,
+                new int[]{0});
+        mCallback.updateCarrierInfo(c2);
+
+        // listOfCarriers length 2, subscriptionIds length 2, anySims false
+        CarrierTextController.CarrierTextCallbackInfo
+                c3 = new CarrierTextController.CarrierTextCallbackInfo(
+                "",
+                new CharSequence[]{"", ""},
+                false,
+                new int[]{0, 1});
+        mCallback.updateCarrierInfo(c3);
+
+        // listOfCarriers length 2, subscriptionIds length 2, anySims true
+        CarrierTextController.CarrierTextCallbackInfo
+                c4 = new CarrierTextController.CarrierTextCallbackInfo(
+                "",
+                new CharSequence[]{"", ""},
+                true,
+                new int[]{0, 1});
+        mCallback.updateCarrierInfo(c4);
+
+        mTestableLooper.processAllMessages();
+    }
+
+    @Test // throws no Exception
+    public void testUpdateCarrierText_differentLength() {
+        QSCarrierGroupController spiedCarrierGroupController =
+                Mockito.spy(mQSCarrierGroupController);
+        when(spiedCarrierGroupController.getSlotIndex(anyInt())).thenAnswer(
+                (Answer<Integer>) invocationOnMock -> invocationOnMock.getArgument(0));
+
+        // listOfCarriers length 2, subscriptionIds length 1, anySims false
+        CarrierTextController.CarrierTextCallbackInfo
+                c1 = new CarrierTextController.CarrierTextCallbackInfo(
+                "",
+                new CharSequence[]{"", ""},
+                false,
+                new int[]{0});
+        mCallback.updateCarrierInfo(c1);
+
+        // listOfCarriers length 2, subscriptionIds length 1, anySims true
+        CarrierTextController.CarrierTextCallbackInfo
+                c2 = new CarrierTextController.CarrierTextCallbackInfo(
+                "",
+                new CharSequence[]{"", ""},
+                true,
+                new int[]{0});
+        mCallback.updateCarrierInfo(c2);
+
+        // listOfCarriers length 1, subscriptionIds length 2, anySims false
+        CarrierTextController.CarrierTextCallbackInfo
+                c3 = new CarrierTextController.CarrierTextCallbackInfo(
+                "",
+                new CharSequence[]{""},
+                false,
+                new int[]{0, 1});
+        mCallback.updateCarrierInfo(c3);
+
+        // listOfCarriers length 1, subscriptionIds length 2, anySims true
+        CarrierTextController.CarrierTextCallbackInfo
+                c4 = new CarrierTextController.CarrierTextCallbackInfo(
+                "",
+                new CharSequence[]{""},
+                true,
+                new int[]{0, 1});
+        mCallback.updateCarrierInfo(c4);
+        mTestableLooper.processAllMessages();
+    }
+
+    @Test // throws no Exception
+    public void testUpdateCarrierText_invalidSim() {
+        QSCarrierGroupController spiedCarrierGroupController =
+                Mockito.spy(mQSCarrierGroupController);
+        when(spiedCarrierGroupController.getSlotIndex(anyInt())).thenReturn(
+                SubscriptionManager.INVALID_SIM_SLOT_INDEX);
+
+        CarrierTextController.CarrierTextCallbackInfo
+                c4 = new CarrierTextController.CarrierTextCallbackInfo(
+                "",
+                new CharSequence[]{"", ""},
+                true,
+                new int[]{0, 1});
+        mCallback.updateCarrierInfo(c4);
+        mTestableLooper.processAllMessages();
+    }
+
+    @Test // throws no Exception
+    public void testSetMobileDataIndicators_invalidSim() {
+        mSignalCallback.setMobileDataIndicators(
+                mock(NetworkController.IconState.class),
+                mock(NetworkController.IconState.class),
+                0, 0, true, true, "", "", "", true, 0, true);
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierTest.java
new file mode 100644
index 0000000..022dc84
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierTest.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs.carrier;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.view.LayoutInflater;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+@SmallTest
+public class QSCarrierTest extends SysuiTestCase {
+
+    private QSCarrier mQSCarrier;
+    private TestableLooper mTestableLooper;
+
+    @Before
+    public void setUp() throws Exception {
+        mTestableLooper = TestableLooper.get(this);
+        LayoutInflater inflater = LayoutInflater.from(mContext);
+        mTestableLooper.runWithLooper(() ->
+                mQSCarrier = (QSCarrier) inflater.inflate(R.layout.qs_carrier, null));
+    }
+
+    @Test
+    public void testUpdateState_first() {
+        CellSignalState c = new CellSignalState(true, 0, "", "", false);
+
+        assertTrue(mQSCarrier.updateState(c));
+    }
+
+    @Test
+    public void testUpdateState_same() {
+        CellSignalState c = new CellSignalState(true, 0, "", "", false);
+
+        assertTrue(mQSCarrier.updateState(c));
+        assertFalse(mQSCarrier.updateState(c));
+    }
+
+    @Test
+    public void testUpdateState_changed() {
+        CellSignalState c = new CellSignalState(true, 0, "", "", false);
+
+        assertTrue(mQSCarrier.updateState(c));
+
+        CellSignalState other = c.changeVisibility(false);
+
+        assertTrue(mQSCarrier.updateState(other));
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt
index 4becd52..9fe2569 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt
@@ -88,8 +88,8 @@
     }
 
     @Test
-    fun testBooleanTileHasBooleanState() {
-        `when`(mTileServiceManager.isBooleanTile).thenReturn(true)
+    fun testToggleableTileHasBooleanState() {
+        `when`(mTileServiceManager.isToggleableTile).thenReturn(true)
         customTile = CustomTile.create(mTileHost, TILE_SPEC)
 
         assertTrue(customTile.state is QSTile.BooleanState)
@@ -104,7 +104,7 @@
 
     @Test
     fun testValueUpdatedInBooleanTile() {
-        `when`(mTileServiceManager.isBooleanTile).thenReturn(true)
+        `when`(mTileServiceManager.isToggleableTile).thenReturn(true)
         customTile = CustomTile.create(mTileHost, TILE_SPEC)
         customTile.qsTile.icon = mock(Icon::class.java)
         `when`(customTile.qsTile.icon.loadDrawable(any(Context::class.java)))
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java
index 9e5e582..42fd288 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java
@@ -105,7 +105,7 @@
             defaultServiceInfo = new ServiceInfo();
             defaultServiceInfo.metaData = new Bundle();
             defaultServiceInfo.metaData.putBoolean(TileService.META_DATA_ACTIVE_TILE, true);
-            defaultServiceInfo.metaData.putBoolean(TileService.META_DATA_BOOLEAN_TILE, true);
+            defaultServiceInfo.metaData.putBoolean(TileService.META_DATA_TOGGLEABLE_TILE, true);
         }
         when(mMockPackageManagerAdapter.getServiceInfo(any(), anyInt(), anyInt()))
                 .thenReturn(defaultServiceInfo);
@@ -244,7 +244,7 @@
     }
 
     @Test
-    public void testBooleanTile() throws Exception {
-        assertTrue(mStateManager.isBooleanTile());
+    public void testToggleableTile() throws Exception {
+        assertTrue(mStateManager.isToggleableTile());
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
index 2737b19..ab6b304 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
@@ -34,6 +34,7 @@
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.qs.QSTileHost;
+import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSFactoryImpl;
 import com.android.systemui.shared.plugins.PluginManager;
 import com.android.systemui.statusbar.phone.AutoTileManager;
@@ -78,6 +79,8 @@
     private DumpController mDumpController;
     @Mock
     private StatusBar mStatusBar;
+    @Mock
+    private QSLogger mQSLogger;
 
     @Before
     public void setUp() throws Exception {
@@ -94,7 +97,8 @@
                 () -> mAutoTileManager,
                 mDumpController,
                 mBroadcastDispatcher,
-                Optional.of(mStatusBar));
+                Optional.of(mStatusBar),
+                mQSLogger);
         mTileService = new TestTileServices(host, Looper.getMainLooper(), mBroadcastDispatcher);
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
index 6bd24b9..4fada33 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
@@ -25,6 +25,7 @@
 import static org.junit.Assert.assertEquals;
 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.Matchers.argThat;
 import static org.mockito.Mockito.clearInvocations;
@@ -38,6 +39,7 @@
 
 import android.content.Intent;
 import android.metrics.LogMaker;
+import android.service.quicksettings.Tile;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
@@ -52,6 +54,7 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
 import com.android.systemui.qs.QSTileHost;
+import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.statusbar.StatusBarState;
 
 import org.junit.Before;
@@ -61,6 +64,7 @@
 import org.mockito.ArgumentCaptor;
 import org.mockito.ArgumentMatcher;
 import org.mockito.Captor;
+import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
 @RunWith(AndroidTestingRunner.class)
@@ -69,6 +73,11 @@
 public class QSTileImplTest extends SysuiTestCase {
 
     public static final int POSITION = 14;
+    private static final String SPEC = "spec";
+
+    @Mock
+    private QSLogger mQsLogger;
+
     private TestableLooper mTestableLooper;
     private TileImpl mTile;
     private QSTileHost mHost;
@@ -81,7 +90,6 @@
     @Before
     public void setup() throws Exception {
         MockitoAnnotations.initMocks(this);
-        String spec = "spec";
         mTestableLooper = TestableLooper.get(this);
         mDependency.injectTestDependency(Dependency.BG_LOOPER, mTestableLooper.getLooper());
         mDependency.injectMockDependency(ActivityStarter.class);
@@ -89,12 +97,13 @@
         mStatusBarStateController =
             mDependency.injectMockDependency(StatusBarStateController.class);
         mHost = mock(QSTileHost.class);
-        when(mHost.indexOf(spec)).thenReturn(POSITION);
+        when(mHost.indexOf(SPEC)).thenReturn(POSITION);
         when(mHost.getContext()).thenReturn(mContext.getBaseContext());
+        when(mHost.getQSLogger()).thenReturn(mQsLogger);
 
         mTile = spy(new TileImpl(mHost));
         mTile.mHandler = mTile.new H(mTestableLooper.getLooper());
-        mTile.setTileSpec(spec);
+        mTile.setTileSpec(SPEC);
     }
 
     @Test
@@ -104,6 +113,14 @@
     }
 
     @Test
+    public void testClick_log() {
+        when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE);
+
+        mTile.click();
+        verify(mQsLogger).logTileClick(SPEC, StatusBarState.SHADE, Tile.STATE_ACTIVE);
+    }
+
+    @Test
     public void testClick_Metrics_Status_Bar_Status() {
         when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE);
         mTile.click();
@@ -119,6 +136,14 @@
     }
 
     @Test
+    public void testSecondaryClick_log() {
+        when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE);
+
+        mTile.secondaryClick();
+        verify(mQsLogger).logTileSecondaryClick(SPEC, StatusBarState.SHADE, Tile.STATE_ACTIVE);
+    }
+
+    @Test
     public void testSecondaryClick_Metrics_Status_Bar_Status() {
         when(mStatusBarStateController.getState()).thenReturn(StatusBarState.KEYGUARD);
         mTile.secondaryClick();
@@ -133,6 +158,15 @@
         verify(mMetricsLogger).write(argThat(new TileLogMatcher(ACTION_QS_LONG_PRESS)));
     }
 
+
+    @Test
+    public void testLongClick_log() {
+        when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE);
+
+        mTile.longClick();
+        verify(mQsLogger).logTileLongClick(SPEC, StatusBarState.SHADE, Tile.STATE_ACTIVE);
+    }
+
     @Test
     public void testLongClick_Metrics_Status_Bar_Status() {
         when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE_LOCKED);
@@ -200,6 +234,21 @@
         verify(mTile, never()).handleStale();
     }
 
+    @Test
+    public void testHandleDestroy_log() {
+        mTile.handleDestroy();
+        verify(mQsLogger).logTileDestroyed(eq(SPEC), anyString());
+    }
+
+    @Test
+    public void testListening_log() {
+        mTile.handleSetListening(true);
+        verify(mQsLogger).logTileChangeListening(SPEC, true);
+
+        mTile.handleSetListening(false);
+        verify(mQsLogger).logTileChangeListening(SPEC, false);
+    }
+
     private class TileLogMatcher implements ArgumentMatcher<LogMaker> {
 
         private final int mCategory;
@@ -236,6 +285,7 @@
     private static class TileImpl extends QSTileImpl<QSTile.BooleanState> {
         protected TileImpl(QSHost host) {
             super(host);
+            getState().state = Tile.STATE_ACTIVE;
         }
 
         @Override
@@ -264,11 +314,6 @@
         }
 
         @Override
-        protected void handleSetListening(boolean listening) {
-
-        }
-
-        @Override
         public CharSequence getTileLabel() {
             return null;
         }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java
new file mode 100644
index 0000000..e8e98b4
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java
@@ -0,0 +1,136 @@
+/*
+ * 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.qs.tiles;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.service.quicksettings.Tile;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.Dependency;
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.qs.QSTileHost;
+import com.android.systemui.screenrecord.RecordingController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+@SmallTest
+public class ScreenRecordTileTest extends SysuiTestCase {
+
+    @Mock
+    private RecordingController mController;
+    @Mock
+    private QSTileHost mHost;
+
+    private TestableLooper mTestableLooper;
+    private ScreenRecordTile mTile;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+
+        mTestableLooper = TestableLooper.get(this);
+        mDependency.injectTestDependency(Dependency.BG_LOOPER, mTestableLooper.getLooper());
+        mController = mDependency.injectMockDependency(RecordingController.class);
+
+        when(mHost.getContext()).thenReturn(mContext);
+
+        mTile = new ScreenRecordTile(mHost, mController);
+    }
+
+    // Test that the tile is inactive and labeled correctly when the controller is neither starting
+    // or recording, and that clicking on the tile in this state brings up the record prompt
+    @Test
+    public void testNotActive() {
+        when(mController.isStarting()).thenReturn(false);
+        when(mController.isRecording()).thenReturn(false);
+
+        mTile.refreshState();
+        mTestableLooper.processAllMessages();
+
+        assertEquals(Tile.STATE_INACTIVE, mTile.getState().state);
+        assertTrue(mTile.getState().secondaryLabel.toString().equals(
+                mContext.getString(R.string.quick_settings_screen_record_start)));
+
+        mTile.handleClick();
+        verify(mController, times(1)).launchRecordPrompt();
+    }
+
+    // Test that the tile is active and labeled correctly when the controller is starting
+    @Test
+    public void testIsStarting() {
+        when(mController.isStarting()).thenReturn(true);
+        when(mController.isRecording()).thenReturn(false);
+
+        mTile.refreshState();
+        mTestableLooper.processAllMessages();
+
+        assertEquals(Tile.STATE_ACTIVE, mTile.getState().state);
+        assertTrue(mTile.getState().secondaryLabel.toString().endsWith("..."));
+    }
+
+    // Test that the tile cancels countdown if it is clicked when the controller is starting
+    @Test
+    public void testCancelRecording() {
+        when(mController.isStarting()).thenReturn(true);
+        when(mController.isRecording()).thenReturn(false);
+
+        mTile.handleClick();
+
+        verify(mController, times(1)).cancelCountdown();
+    }
+
+    // Test that the tile is active and labeled correctly when the controller is recording
+    @Test
+    public void testIsRecording() {
+        when(mController.isStarting()).thenReturn(false);
+        when(mController.isRecording()).thenReturn(true);
+
+        mTile.refreshState();
+        mTestableLooper.processAllMessages();
+
+        assertEquals(Tile.STATE_ACTIVE, mTile.getState().state);
+        assertTrue(mTile.getState().secondaryLabel.toString().equals(
+                mContext.getString(R.string.quick_settings_screen_record_stop)));
+    }
+
+    // Test that the tile stops the recording if it is clicked when the controller is recording
+    @Test
+    public void testStopRecording() {
+        when(mController.isStarting()).thenReturn(false);
+        when(mController.isRecording()).thenReturn(true);
+
+        mTile.handleClick();
+
+        verify(mController, times(1)).stopRecording();
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingControllerTest.java
new file mode 100644
index 0000000..b877c7f
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingControllerTest.java
@@ -0,0 +1,124 @@
+/*
+ * 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.screenrecord;
+
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Mockito.verify;
+
+import android.app.PendingIntent;
+import android.os.Looper;
+import android.testing.AndroidTestingRunner;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+/**
+ * Tests for exception handling and  bitmap configuration in adding smart actions to Screenshot
+ * Notification.
+ */
+public class RecordingControllerTest extends SysuiTestCase {
+
+    @Mock
+    RecordingController.RecordingStateChangeCallback mCallback;
+
+    RecordingController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mController = new RecordingController(mContext);
+        mController.addCallback(mCallback);
+    }
+
+    // Test that when a countdown in progress is cancelled, the controller goes from starting to not
+    // starting, and notifies listeners.
+    @Test
+    public void testCancelCountdown() {
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+        }
+
+        mController.startCountdown(100, 10, null, null);
+
+        assertTrue(mController.isStarting());
+        assertFalse(mController.isRecording());
+
+        mController.cancelCountdown();
+
+        assertFalse(mController.isStarting());
+        assertFalse(mController.isRecording());
+
+        verify(mCallback).onCountdownEnd();
+    }
+
+    // Test that when recording is started, the start intent is sent and listeners are notified.
+    @Test
+    public void testStartRecording() throws PendingIntent.CanceledException {
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+        }
+
+        PendingIntent startIntent = Mockito.mock(PendingIntent.class);
+        mController.startCountdown(0, 0, startIntent, null);
+
+        verify(mCallback).onCountdownEnd();
+        verify(startIntent).send();
+    }
+
+    // Test that when recording is stopped, the stop intent is sent and listeners are notified.
+    @Test
+    public void testStopRecording() throws PendingIntent.CanceledException {
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+        }
+
+        PendingIntent startIntent = Mockito.mock(PendingIntent.class);
+        PendingIntent stopIntent = Mockito.mock(PendingIntent.class);
+
+        mController.startCountdown(0, 0, startIntent, stopIntent);
+        mController.stopRecording();
+
+        assertFalse(mController.isStarting());
+        assertFalse(mController.isRecording());
+        verify(stopIntent).send();
+        verify(mCallback).onRecordingEnd();
+    }
+
+    // Test that updating the controller state works and notifies listeners.
+    @Test
+    public void testUpdateState() {
+        mController.updateState(true);
+        assertTrue(mController.isRecording());
+        verify(mCallback).onRecordingStart();
+
+        mController.updateState(false);
+        assertFalse(mController.isRecording());
+        verify(mCallback).onRecordingEnd();
+    }
+}
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 0a3bc6d..1d4b4be 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
@@ -53,8 +53,8 @@
 import com.android.internal.app.IBatteryStats;
 import com.android.internal.widget.LockPatternUtils;
 import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.keyguard.KeyguardUpdateMonitor.BatteryStatus;
 import com.android.settingslib.Utils;
+import com.android.settingslib.fuelgauge.BatteryStatus;
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.dock.DockManager;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/MediaArtworkProcessorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/MediaArtworkProcessorTest.kt
index 72e6df2..a27c085 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/MediaArtworkProcessorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/MediaArtworkProcessorTest.kt
@@ -16,15 +16,14 @@
 
 package com.android.systemui.statusbar
 
-import com.google.common.truth.Truth.assertThat
-
 import android.graphics.Bitmap
 import android.graphics.Canvas
 import android.graphics.Color
-import android.graphics.Point
 import android.testing.AndroidTestingRunner
+import android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
+import com.google.common.truth.Truth.assertThat
 import org.junit.After
 import org.junit.Before
 import org.junit.Test
@@ -32,6 +31,7 @@
 
 private const val WIDTH = 200
 private const val HEIGHT = 200
+private const val WINDOW_TYPE = TYPE_NOTIFICATION_SHADE
 
 @RunWith(AndroidTestingRunner::class)
 @SmallTest
@@ -46,10 +46,10 @@
     fun setUp() {
         processor = MediaArtworkProcessor()
 
-        val point = Point()
-        context.display.getSize(point)
-        screenWidth = point.x
-        screenHeight = point.y
+        val size = processor.getWindowSize(context, WINDOW_TYPE)
+
+        screenWidth = size.width
+        screenHeight = size.height
     }
 
     @After
@@ -63,7 +63,7 @@
         val artwork = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_8888)
         Canvas(artwork).drawColor(Color.BLUE)
         // WHEN the background is created from the artwork
-        val background = processor.processArtwork(context, artwork)!!
+        val background = processor.processArtwork(context, artwork, WINDOW_TYPE)!!
         // THEN the background has the size of the screen that has been downsamples
         assertThat(background.height).isLessThan(screenHeight)
         assertThat(background.width).isLessThan(screenWidth)
@@ -76,8 +76,8 @@
         val artwork = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_8888)
         Canvas(artwork).drawColor(Color.BLUE)
         // WHEN the background is processed twice
-        val background1 = processor.processArtwork(context, artwork)!!
-        val background2 = processor.processArtwork(context, artwork)!!
+        val background1 = processor.processArtwork(context, artwork, WINDOW_TYPE)!!
+        val background2 = processor.processArtwork(context, artwork, WINDOW_TYPE)!!
         // THEN the two bitmaps are the same
         // Note: This is currently broken and trying to use caching causes issues
         assertThat(background1).isNotSameAs(background2)
@@ -89,7 +89,7 @@
         val artwork = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ALPHA_8)
         Canvas(artwork).drawColor(Color.BLUE)
         // WHEN the background is created from the artwork
-        val background = processor.processArtwork(context, artwork)!!
+        val background = processor.processArtwork(context, artwork, WINDOW_TYPE)!!
         // THEN the background has Config ARGB_8888
         assertThat(background.config).isEqualTo(Bitmap.Config.ARGB_8888)
     }
@@ -102,7 +102,7 @@
         // AND the artwork is recycled
         artwork.recycle()
         // WHEN the background is created from the artwork
-        val background = processor.processArtwork(context, artwork)
+        val background = processor.processArtwork(context, artwork, WINDOW_TYPE)
         // THEN the processed bitmap is null
         assertThat(background).isNull()
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java
index 6d83ac3..644ed3d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java
@@ -85,7 +85,7 @@
                 Dependency.get(NotificationLockscreenUserManager.class);
         NotificationViewHierarchyManager viewHierarchyManager =
                 Dependency.get(NotificationViewHierarchyManager.class);
-        entryManager.setUpWithPresenter(mPresenter, mListContainer, mHeadsUpManager);
+        entryManager.setUpWithPresenter(mPresenter);
         entryManager.addNotificationEntryListener(mEntryListener);
         gutsManager.setUpWithPresenter(mPresenter, mListContainer,
                 mCheckSaveListener, mOnSettingsClickListener);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java
index 60163f2..8e87e0a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java
@@ -54,7 +54,6 @@
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
 import com.android.systemui.statusbar.phone.NotificationGroupManager;
-import com.android.systemui.util.Assert;
 
 import com.google.android.collect.Lists;
 
@@ -90,7 +89,7 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mTestableLooper = TestableLooper.get(this);
-        Assert.sMainLooper = mTestableLooper.getLooper();
+        allowTestableLooperAsMainThread();
         mHandler = Handler.createAsync(mTestableLooper.getLooper());
 
         mDependency.injectTestDependency(NotificationEntryManager.class, mEntryManager);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SbnBuilder.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SbnBuilder.java
index 2605402..62f406f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SbnBuilder.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SbnBuilder.java
@@ -140,6 +140,11 @@
         return this;
     }
 
+    public SbnBuilder setFlag(Context context, int mask, boolean value) {
+        modifyNotification(context).setFlag(mask, value);
+        return this;
+    }
+
     public Notification.Builder modifyNotification(Context context) {
         if (mNotification != null) {
             mNotificationBuilder = new Notification.Builder(context, mNotification);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/AboveShelfObserverTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/AboveShelfObserverTest.java
index 9d667a9..0a38f16 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/AboveShelfObserverTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/AboveShelfObserverTest.java
@@ -21,7 +21,6 @@
 
 import android.test.suitebuilder.annotation.SmallTest;
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 import android.widget.FrameLayout;
 
@@ -46,7 +45,7 @@
 
     @Before
     public void setUp() throws Exception {
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         mNotificationTestHelper = new NotificationTestHelper(getContext(), mDependency);
         mHostLayout = new FrameLayout(getContext());
         mObserver = new AboveShelfObserver(mHostLayout);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
index b51581f..98f12ce 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
@@ -52,7 +52,6 @@
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 import android.util.ArraySet;
-import android.widget.FrameLayout;
 
 import androidx.annotation.NonNull;
 import androidx.test.filters.SmallTest;
@@ -61,46 +60,30 @@
 import com.android.systemui.Dependency;
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.FeatureFlags;
 import com.android.systemui.statusbar.NotificationLifetimeExtender;
-import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationMediaManager;
 import com.android.systemui.statusbar.NotificationPresenter;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.NotificationRemoveInterceptor;
 import com.android.systemui.statusbar.RankingBuilder;
-import com.android.systemui.statusbar.RemoteInputController;
 import com.android.systemui.statusbar.SmartReplyController;
-import com.android.systemui.statusbar.StatusBarIconView;
 import com.android.systemui.statusbar.notification.NotificationEntryManager.KeyguardEnvironment;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
 import com.android.systemui.statusbar.notification.collection.NotificationRankingManager;
-import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
+import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
 import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
-import com.android.systemui.statusbar.notification.logging.NotifLog;
-import com.android.systemui.statusbar.notification.logging.NotificationLogger;
 import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationViewController;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
-import com.android.systemui.statusbar.notification.row.NotifBindPipeline;
-import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
-import com.android.systemui.statusbar.notification.row.RowContentBindParams;
-import com.android.systemui.statusbar.notification.row.RowContentBindStage;
+import com.android.systemui.statusbar.notification.row.NotificationEntryManagerInflationTest;
 import com.android.systemui.statusbar.notification.row.RowInflaterTask;
-import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
-import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
-import com.android.systemui.statusbar.phone.KeyguardBypassController;
 import com.android.systemui.statusbar.phone.NotificationGroupManager;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
-import com.android.systemui.util.Assert;
 import com.android.systemui.util.leak.LeakDetector;
 
-import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
@@ -112,9 +95,12 @@
 import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
 
+/**
+ * Unit tests for {@link NotificationEntryManager}. This test will not test any interactions with
+ * inflation. Instead, for functional inflation tests, see
+ * {@link NotificationEntryManagerInflationTest}.
+ */
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper()
@@ -125,31 +111,24 @@
     @Mock private NotificationPresenter mPresenter;
     @Mock private KeyguardEnvironment mEnvironment;
     @Mock private ExpandableNotificationRow mRow;
-    @Mock private NotificationListContainer mListContainer;
     @Mock private NotificationEntryListener mEntryListener;
     @Mock private NotificationRemoveInterceptor mRemoveInterceptor;
-    @Mock private NotificationRowBinderImpl.BindRowCallback mBindCallback;
     @Mock private HeadsUpManager mHeadsUpManager;
     @Mock private RankingMap mRankingMap;
-    @Mock private RemoteInputController mRemoteInputController;
-    @Mock private NotificationInterruptionStateProvider mNotificationInterruptionStateProvider;
-    @Mock private NotificationLockscreenUserManager mLockscreenUserManager;
     @Mock private NotificationGroupManager mGroupManager;
-    @Mock private NotificationGutsManager mGutsManager;
     @Mock private NotificationRemoteInputManager mRemoteInputManager;
     @Mock private DeviceProvisionedController mDeviceProvisionedController;
     @Mock private RowInflaterTask mAsyncInflationTask;
-    @Mock private NotifLog mNotifLog;
+    @Mock private NotificationEntryManagerLogger mLogger;
     @Mock private FeatureFlags mFeatureFlags;
     @Mock private LeakDetector mLeakDetector;
-    @Mock private ActivatableNotificationViewController mActivatableNotificationViewController;
-    @Mock private NotificationRowComponent.Builder mNotificationRowComponentBuilder;
+    @Mock private NotificationMediaManager mNotificationMediaManager;
+    @Mock private NotificationRowBinder mNotificationRowBinder;
 
     private int mId;
     private NotificationEntry mEntry;
     private StatusBarNotification mSbn;
-    private TestableNotificationEntryManager mEntryManager;
-    private CountDownLatch mCountDownLatch;
+    private NotificationEntryManager mEntryManager;
 
     private void setUserSentiment(String key, int sentiment) {
         doAnswer(invocationOnMock -> {
@@ -192,171 +171,78 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mDependency.injectMockDependency(SmartReplyController.class);
-        mDependency.injectMockDependency(NotificationMediaManager.class);
 
-        mCountDownLatch = new CountDownLatch(1);
-
-        Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         mDependency.injectTestDependency(Dependency.MAIN_HANDLER,
                 Handler.createAsync(TestableLooper.get(this).getLooper()));
-        when(mRemoteInputManager.getController()).thenReturn(mRemoteInputController);
-        when(mListContainer.getViewParentForNotification(any())).thenReturn(
-                new FrameLayout(mContext));
 
         mEntry = createNotification();
         mSbn = mEntry.getSbn();
 
-        mEntry.expandedIcon = mock(StatusBarIconView.class);
-
-        when(mNotificationRowComponentBuilder.activatableNotificationView(any()))
-                .thenReturn(mNotificationRowComponentBuilder);
-        when(mNotificationRowComponentBuilder.build()).thenReturn(
-                () -> mActivatableNotificationViewController);
-
-        RowContentBindStage bindStage = mock(RowContentBindStage.class);
-        when(bindStage.getStageParams(any())).thenReturn(new RowContentBindParams());
-
-        NotificationRowBinderImpl notificationRowBinder =
-                new NotificationRowBinderImpl(mContext,
-                        mRemoteInputManager,
-                        mLockscreenUserManager,
-                        mock(NotifBindPipeline.class),
-                        bindStage,
-                        true, /* allowLongPress */
-                        mock(KeyguardBypassController.class),
-                        mock(StatusBarStateController.class),
-                        mGroupManager,
-                        mGutsManager,
-                        mNotificationInterruptionStateProvider,
-                        () -> new RowInflaterTask(mNotificationRowComponentBuilder),
-                        mock(NotificationLogger.class));
-
         when(mFeatureFlags.isNewNotifPipelineEnabled()).thenReturn(false);
         when(mFeatureFlags.isNewNotifPipelineRenderingEnabled()).thenReturn(false);
-        mEntryManager = new TestableNotificationEntryManager(
-                mNotifLog,
+        mEntryManager = new NotificationEntryManager(
+                mLogger,
                 mGroupManager,
                 new NotificationRankingManager(
-                        () -> mock(NotificationMediaManager.class),
+                        () -> mNotificationMediaManager,
                         mGroupManager,
                         mHeadsUpManager,
                         mock(NotificationFilter.class),
-                        mNotifLog,
+                        mLogger,
                         mock(NotificationSectionsFeatureManager.class),
                         mock(PeopleNotificationIdentifier.class),
                         mock(HighPriorityProvider.class)),
                 mEnvironment,
                 mFeatureFlags,
-                () -> notificationRowBinder,
+                () -> mNotificationRowBinder,
                 () -> mRemoteInputManager,
                 mLeakDetector,
                 mock(ForegroundServiceDismissalFeatureController.class)
         );
-        mEntryManager.setUpWithPresenter(mPresenter, mListContainer, mHeadsUpManager);
+        mEntryManager.setUpWithPresenter(mPresenter);
         mEntryManager.addNotificationEntryListener(mEntryListener);
         mEntryManager.addNotificationRemoveInterceptor(mRemoveInterceptor);
 
-        notificationRowBinder.setUpWithPresenter(
-                mPresenter, mListContainer, mHeadsUpManager, mBindCallback);
-        notificationRowBinder.setInflationCallback(mEntryManager);
-        notificationRowBinder.setNotificationClicker(mock(NotificationClicker.class));
-
-        setUserSentiment(
-                mEntry.getKey(), Ranking.USER_SENTIMENT_NEUTRAL);
+        setUserSentiment(mSbn.getKey(), Ranking.USER_SENTIMENT_NEUTRAL);
     }
 
-    @After
-    public void tearDown() {
-        // CLEAN UP inflation tasks so they don't callback in a future test
-        mEntry.abortTask();
-    }
-
-    // TODO: These tests are closer to functional tests and we should move them to their own file.
-    // and also strip some of the verifies that make the test too complex
     @Test
-    @Ignore
-    public void testAddNotification() throws Exception {
-        TestableLooper.get(this).processAllMessages();
-
-        doAnswer(invocation -> {
-            mCountDownLatch.countDown();
-            return null;
-        }).when(mBindCallback).onBindRow(any(), any(), any(), any());
-
-        // Post on main thread, otherwise we will be stuck waiting here for the inflation finished
-        // callback forever, since it won't execute until the tests ends.
+    public void testAddNotification_setsUserSentiment() {
         mEntryManager.addNotification(mSbn, mRankingMap);
-        TestableLooper.get(this).processMessages(1);
-        assertTrue(mCountDownLatch.await(10, TimeUnit.SECONDS));
-        assertTrue(mEntryManager.getCountDownLatch().await(10, TimeUnit.SECONDS));
 
-        // Check that no inflation error occurred.
-        verify(mEntryListener, never()).onInflationError(any(), any());
-
-        // Row inflation:
         ArgumentCaptor<NotificationEntry> entryCaptor = ArgumentCaptor.forClass(
                 NotificationEntry.class);
-        verify(mBindCallback).onBindRow(entryCaptor.capture(), any(), eq(mSbn), any());
+        verify(mEntryListener).onPendingEntryAdded(entryCaptor.capture());
         NotificationEntry entry = entryCaptor.getValue();
-        verify(mRemoteInputManager).bindRow(entry.getRow());
 
-        // Row content inflation:
-        verify(mEntryListener).onNotificationAdded(entry);
-        verify(mPresenter).updateNotificationViews();
-
-        assertEquals(mEntryManager.getActiveNotificationUnfiltered(mSbn.getKey()), entry);
-        assertNotNull(entry.getRow());
-        assertEquals(mEntry.getUserSentiment(),
-                Ranking.USER_SENTIMENT_NEUTRAL);
+        assertEquals(entry.getUserSentiment(), Ranking.USER_SENTIMENT_NEUTRAL);
     }
 
     @Test
-    @Ignore
-    public void testUpdateNotification() throws Exception {
-        TestableLooper.get(this).processAllMessages();
-
+    public void testUpdateNotification_updatesUserSentiment() {
         mEntryManager.addActiveNotificationForTest(mEntry);
-
         setUserSentiment(
                 mEntry.getKey(), Ranking.USER_SENTIMENT_NEGATIVE);
 
         mEntryManager.updateNotification(mSbn, mRankingMap);
-        TestableLooper.get(this).processMessages(1);
-        // Wait for content update.
-        assertTrue(mEntryManager.getCountDownLatch().await(10, TimeUnit.SECONDS));
 
-        verify(mEntryListener, never()).onInflationError(any(), any());
-
-        verify(mEntryListener).onPreEntryUpdated(mEntry);
-        verify(mPresenter).updateNotificationViews();
-        verify(mEntryListener).onPostEntryUpdated(mEntry);
-
-        assertNotNull(mEntry.getRow());
-        assertEquals(Ranking.USER_SENTIMENT_NEGATIVE,
-                mEntry.getUserSentiment());
+        assertEquals(Ranking.USER_SENTIMENT_NEGATIVE, mEntry.getUserSentiment());
     }
 
     @Test
-    @Ignore
     public void testUpdateNotification_prePostEntryOrder() throws Exception {
         TestableLooper.get(this).processAllMessages();
 
         mEntryManager.addActiveNotificationForTest(mEntry);
 
         mEntryManager.updateNotification(mSbn, mRankingMap);
-        TestableLooper.get(this).processMessages(1);
-        // Wait for content update.
-        assertTrue(mEntryManager.getCountDownLatch().await(10, TimeUnit.SECONDS));
-
-        verify(mEntryListener, never()).onInflationError(any(), any());
 
         // Ensure that update callbacks happen in correct order
         InOrder order = inOrder(mEntryListener, mPresenter, mEntryListener);
         order.verify(mEntryListener).onPreEntryUpdated(mEntry);
         order.verify(mPresenter).updateNotificationViews();
         order.verify(mEntryListener).onPostEntryUpdated(mEntry);
-
-        assertNotNull(mEntry.getRow());
     }
 
     @Test
@@ -366,8 +252,6 @@
 
         mEntryManager.removeNotification(mSbn.getKey(), mRankingMap, UNDEFINED_DISMISS_REASON);
 
-        verify(mEntryListener, never()).onInflationError(any(), any());
-
         verify(mPresenter).updateNotificationViews();
         verify(mEntryListener).onEntryRemoved(
                 eq(mEntry), any(), eq(false) /* removedByUser */);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationFilterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationFilterTest.java
index 1116a33..97e0a31 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationFilterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationFilterTest.java
@@ -32,7 +32,6 @@
 import android.os.Bundle;
 import android.service.notification.StatusBarNotification;
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 
 import androidx.test.annotation.UiThreadTest;
@@ -79,7 +78,7 @@
 
     @Before
     public void setUp() throws Exception {
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         MockitoAnnotations.initMocks(this);
         when(mMockStatusBarNotification.getUid()).thenReturn(UID_NORMAL);
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/TestableNotificationEntryManager.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/TestableNotificationEntryManager.kt
index a9f9db6..d522f90 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/TestableNotificationEntryManager.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/TestableNotificationEntryManager.kt
@@ -22,19 +22,15 @@
 import com.android.systemui.statusbar.notification.collection.NotificationEntry
 import com.android.systemui.statusbar.notification.collection.NotificationRankingManager
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder
-import com.android.systemui.statusbar.notification.logging.NotifLog
-import com.android.systemui.statusbar.notification.stack.NotificationListContainer
-import com.android.systemui.statusbar.phone.HeadsUpManagerPhone
 import com.android.systemui.statusbar.phone.NotificationGroupManager
 import com.android.systemui.util.leak.LeakDetector
-
 import java.util.concurrent.CountDownLatch
 
 /**
  * Enable some test capabilities for NEM without making everything public on the base class
  */
 class TestableNotificationEntryManager(
-    log: NotifLog,
+    logger: NotificationEntryManagerLogger,
     gm: NotificationGroupManager,
     rm: NotificationRankingManager,
     ke: KeyguardEnvironment,
@@ -43,7 +39,7 @@
     notificationRemoteInputManagerLazy: dagger.Lazy<NotificationRemoteInputManager>,
     leakDetector: LeakDetector,
     fgsFeatureController: ForegroundServiceDismissalFeatureController
-) : NotificationEntryManager(log, gm, rm, ke, ff, rb,
+) : NotificationEntryManager(logger, gm, rm, ke, ff, rb,
         notificationRemoteInputManagerLazy, leakDetector, fgsFeatureController) {
 
     public var countDownLatch: CountDownLatch = CountDownLatch(1)
@@ -54,11 +50,9 @@
     }
 
     fun setUpForTest(
-        presenter: NotificationPresenter?,
-        listContainer: NotificationListContainer?,
-        headsUpManager: HeadsUpManagerPhone?
+        presenter: NotificationPresenter?
     ) {
-        super.setUpWithPresenter(presenter, listContainer, headsUpManager)
+        super.setUpWithPresenter(presenter)
     }
 
     fun setActiveNotificationList(activeList: List<NotificationEntry>) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotifCollectionTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotifCollectionTest.java
index 7c94ed2..605b59e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotifCollectionTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotifCollectionTest.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.statusbar.notification.collection;
 
+import static android.app.Notification.FLAG_NO_CLEAR;
 import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL;
 import static android.service.notification.NotificationListenerService.REASON_CANCEL;
 import static android.service.notification.NotificationListenerService.REASON_CLICK;
@@ -33,6 +34,7 @@
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.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.clearInvocations;
@@ -45,12 +47,16 @@
 import static java.util.Objects.requireNonNull;
 
 import android.annotation.Nullable;
+import android.app.Notification;
 import android.os.RemoteException;
 import android.service.notification.NotificationListenerService.Ranking;
+import android.service.notification.NotificationListenerService.RankingMap;
+import android.service.notification.StatusBarNotification;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 import android.util.ArrayMap;
 import android.util.ArraySet;
+import android.util.Pair;
 
 import androidx.test.filters.SmallTest;
 
@@ -69,8 +75,8 @@
 import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionLogger;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifDismissInterceptor;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
-import com.android.systemui.util.Assert;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -103,6 +109,13 @@
     @Spy private RecordingLifetimeExtender mExtender2 = new RecordingLifetimeExtender("Extender2");
     @Spy private RecordingLifetimeExtender mExtender3 = new RecordingLifetimeExtender("Extender3");
 
+    @Spy private RecordingDismissInterceptor mInterceptor1 = new RecordingDismissInterceptor(
+            "Interceptor1");
+    @Spy private RecordingDismissInterceptor mInterceptor2 = new RecordingDismissInterceptor(
+            "Interceptor2");
+    @Spy private RecordingDismissInterceptor mInterceptor3 = new RecordingDismissInterceptor(
+            "Interceptor3");
+
     @Captor private ArgumentCaptor<BatchableNotificationHandler> mListenerCaptor;
     @Captor private ArgumentCaptor<NotificationEntry> mEntryCaptor;
     @Captor private ArgumentCaptor<Collection<NotificationEntry>> mBuildListCaptor;
@@ -115,7 +128,7 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
 
         when(mFeatureFlags.isNewNotifPipelineRenderingEnabled()).thenReturn(true);
         when(mFeatureFlags.isNewNotifPipelineEnabled()).thenReturn(true);
@@ -410,13 +423,16 @@
     public void testDismissingLifetimeExtendedSummaryDoesNotDismissChildren() {
         // GIVEN A notif group with one summary and two children
         mCollection.addNotificationLifetimeExtender(mExtender1);
-        NotifEvent notif1 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 1, "myTag")
-                .setGroup(mContext, GROUP_1)
-                .setGroupSummary(mContext, true));
-        NotifEvent notif2 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 2, "myTag")
-                .setGroup(mContext, GROUP_1));
-        NotifEvent notif3 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 3, "myTag")
-                .setGroup(mContext, GROUP_1));
+        CollectionEvent notif1 = postNotif(
+                buildNotif(TEST_PACKAGE, 1, "myTag")
+                        .setGroup(mContext, GROUP_1)
+                        .setGroupSummary(mContext, true));
+        CollectionEvent notif2 = postNotif(
+                buildNotif(TEST_PACKAGE, 2, "myTag")
+                        .setGroup(mContext, GROUP_1));
+        CollectionEvent notif3 = postNotif(
+                buildNotif(TEST_PACKAGE, 3, "myTag")
+                        .setGroup(mContext, GROUP_1));
 
         NotificationEntry entry1 = mCollectionListener.getEntry(notif1.key);
         NotificationEntry entry2 = mCollectionListener.getEntry(notif2.key);
@@ -441,6 +457,156 @@
         assertEquals(NOT_DISMISSED, entry3.getDismissState());
     }
 
+    @Test
+    public void testDismissNotificationCallsDismissInterceptors() throws RemoteException {
+        // GIVEN a collection with notifications with multiple dismiss interceptors
+        mInterceptor1.shouldInterceptDismissal = true;
+        mInterceptor2.shouldInterceptDismissal = true;
+        mInterceptor3.shouldInterceptDismissal = false;
+        mCollection.addNotificationDismissInterceptor(mInterceptor1);
+        mCollection.addNotificationDismissInterceptor(mInterceptor2);
+        mCollection.addNotificationDismissInterceptor(mInterceptor3);
+
+        NotifEvent notif = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47, "myTag"));
+        NotificationEntry entry = mCollectionListener.getEntry(notif.key);
+
+        // WHEN a notification is manually dismissed
+        DismissedByUserStats stats = defaultStats(entry);
+        mCollection.dismissNotification(entry, stats);
+
+        // THEN all interceptors get checked
+        verify(mInterceptor1).shouldInterceptDismissal(entry);
+        verify(mInterceptor2).shouldInterceptDismissal(entry);
+        verify(mInterceptor3).shouldInterceptDismissal(entry);
+        assertEquals(List.of(mInterceptor1, mInterceptor2), entry.mDismissInterceptors);
+
+        // THEN we never send the dismissal to system server
+        verify(mStatusBarService, never()).onNotificationClear(
+                notif.sbn.getPackageName(),
+                notif.sbn.getTag(),
+                47,
+                notif.sbn.getUser().getIdentifier(),
+                notif.sbn.getKey(),
+                stats.dismissalSurface,
+                stats.dismissalSentiment,
+                stats.notificationVisibility);
+    }
+
+    @Test
+    public void testDismissInterceptorsCanceledWhenNotifIsUpdated() throws RemoteException {
+        // GIVEN a few lifetime extenders and a couple notifications
+        mCollection.addNotificationDismissInterceptor(mInterceptor1);
+        mCollection.addNotificationDismissInterceptor(mInterceptor2);
+
+        mInterceptor1.shouldInterceptDismissal = true;
+        mInterceptor2.shouldInterceptDismissal = true;
+
+        NotifEvent notif = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47));
+        NotificationEntry entry = mCollectionListener.getEntry(notif.key);
+
+        // WHEN a notification is manually dismissed and intercepted
+        DismissedByUserStats stats = defaultStats(entry);
+        mCollection.dismissNotification(entry, stats);
+        assertEquals(List.of(mInterceptor1, mInterceptor2), entry.mDismissInterceptors);
+        clearInvocations(mInterceptor1, mInterceptor2);
+
+        // WHEN the notification is reposted
+        mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47));
+
+        // THEN all of the active dismissal interceptors are canceled
+        verify(mInterceptor1).cancelDismissInterception(entry);
+        verify(mInterceptor2).cancelDismissInterception(entry);
+        assertEquals(List.of(), entry.mDismissInterceptors);
+
+        // THEN the notification is never sent to system server to dismiss
+        verify(mStatusBarService, never()).onNotificationClear(
+                eq(notif.sbn.getPackageName()),
+                eq(notif.sbn.getTag()),
+                eq(47),
+                eq(notif.sbn.getUser().getIdentifier()),
+                eq(notif.sbn.getKey()),
+                anyInt(),
+                anyInt(),
+                eq(stats.notificationVisibility));
+    }
+
+    @Test
+    public void testEndingAllDismissInterceptorsSendsDismiss() throws RemoteException {
+        // GIVEN a collection with notifications a dismiss interceptor
+        mInterceptor1.shouldInterceptDismissal = true;
+        mCollection.addNotificationDismissInterceptor(mInterceptor1);
+
+        NotifEvent notif = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47, "myTag"));
+        NotificationEntry entry = mCollectionListener.getEntry(notif.key);
+
+        // GIVEN a notification is manually dismissed
+        DismissedByUserStats stats = defaultStats(entry);
+        mCollection.dismissNotification(entry, stats);
+
+        // WHEN all interceptors end their interception dismissal
+        mInterceptor1.shouldInterceptDismissal = false;
+        mInterceptor1.onEndInterceptionCallback.onEndDismissInterception(mInterceptor1, entry,
+                stats);
+
+        // THEN we send the dismissal to system server
+        verify(mStatusBarService).onNotificationClear(
+                eq(notif.sbn.getPackageName()),
+                eq(notif.sbn.getTag()),
+                eq(47),
+                eq(notif.sbn.getUser().getIdentifier()),
+                eq(notif.sbn.getKey()),
+                anyInt(),
+                anyInt(),
+                eq(stats.notificationVisibility));
+    }
+
+    @Test
+    public void testEndDismissInterceptionUpdatesDismissInterceptors() throws RemoteException {
+        // GIVEN a collection with notifications with multiple dismiss interceptors
+        mInterceptor1.shouldInterceptDismissal = true;
+        mInterceptor2.shouldInterceptDismissal = true;
+        mInterceptor3.shouldInterceptDismissal = false;
+        mCollection.addNotificationDismissInterceptor(mInterceptor1);
+        mCollection.addNotificationDismissInterceptor(mInterceptor2);
+        mCollection.addNotificationDismissInterceptor(mInterceptor3);
+
+        NotifEvent notif = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47, "myTag"));
+        NotificationEntry entry = mCollectionListener.getEntry(notif.key);
+
+        // GIVEN a notification is manually dismissed
+        mCollection.dismissNotification(entry, defaultStats(entry));
+
+       // WHEN an interceptor ends its interception
+        mInterceptor1.shouldInterceptDismissal = false;
+        mInterceptor1.onEndInterceptionCallback.onEndDismissInterception(mInterceptor1, entry,
+                defaultStats(entry));
+
+        // THEN all interceptors get checked
+        verify(mInterceptor1).shouldInterceptDismissal(entry);
+        verify(mInterceptor2).shouldInterceptDismissal(entry);
+        verify(mInterceptor3).shouldInterceptDismissal(entry);
+
+        // THEN mInterceptor2 is the only dismiss interceptor
+        assertEquals(List.of(mInterceptor2), entry.mDismissInterceptors);
+    }
+
+
+    @Test(expected = IllegalStateException.class)
+    public void testEndingDismissalOfNonInterceptedThrows() throws RemoteException {
+        // GIVEN a collection with notifications with a dismiss interceptor that hasn't been called
+        mInterceptor1.shouldInterceptDismissal = false;
+        mCollection.addNotificationDismissInterceptor(mInterceptor1);
+
+        NotifEvent notif = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47, "myTag"));
+        NotificationEntry entry = mCollectionListener.getEntry(notif.key);
+
+        // WHEN we try to end the dismissal of an interceptor that didn't intercept the notif
+        mInterceptor1.onEndInterceptionCallback.onEndDismissInterception(mInterceptor1, entry,
+                defaultStats(entry));
+
+        // THEN an exception is thrown
+    }
+
     @Test(expected = IllegalStateException.class)
     public void testDismissingNonExistentNotificationThrows() {
         // GIVEN a collection that originally had three notifs, but where one was dismissed
@@ -459,11 +625,11 @@
     @Test
     public void testGroupChildrenAreDismissedLocallyWhenSummaryIsDismissed() {
         // GIVEN a collection with two grouped notifs in it
-        NotifEvent notif0 = mNoMan.postNotif(
+        CollectionEvent notif0 = postNotif(
                 buildNotif(TEST_PACKAGE, 0)
                         .setGroup(mContext, GROUP_1)
                         .setGroupSummary(mContext, true));
-        NotifEvent notif1 = mNoMan.postNotif(
+        CollectionEvent notif1 = postNotif(
                 buildNotif(TEST_PACKAGE, 1)
                         .setGroup(mContext, GROUP_1));
         NotificationEntry entry0 = mCollectionListener.getEntry(notif0.key);
@@ -480,11 +646,11 @@
     @Test
     public void testUpdatingDismissedSummaryBringsChildrenBack() {
         // GIVEN a collection with two grouped notifs in it
-        NotifEvent notif0 = mNoMan.postNotif(
+        CollectionEvent notif0 = postNotif(
                 buildNotif(TEST_PACKAGE, 0)
                         .setGroup(mContext, GROUP_1)
                         .setGroupSummary(mContext, true));
-        NotifEvent notif1 = mNoMan.postNotif(
+        CollectionEvent notif1 = postNotif(
                 buildNotif(TEST_PACKAGE, 1)
                         .setGroup(mContext, GROUP_1));
         NotificationEntry entry0 = mCollectionListener.getEntry(notif0.key);
@@ -503,14 +669,14 @@
     @Test
     public void testDismissedChildrenAreNotResetByParentUpdate() {
         // GIVEN a collection with three grouped notifs in it
-        NotifEvent notif0 = mNoMan.postNotif(
+        CollectionEvent notif0 = postNotif(
                 buildNotif(TEST_PACKAGE, 0)
                         .setGroup(mContext, GROUP_1)
                         .setGroupSummary(mContext, true));
-        NotifEvent notif1 = mNoMan.postNotif(
+        CollectionEvent notif1 = postNotif(
                 buildNotif(TEST_PACKAGE, 1)
                         .setGroup(mContext, GROUP_1));
-        NotifEvent notif2 = mNoMan.postNotif(
+        CollectionEvent notif2 = postNotif(
                 buildNotif(TEST_PACKAGE, 2)
                         .setGroup(mContext, GROUP_1));
         NotificationEntry entry0 = mCollectionListener.getEntry(notif0.key);
@@ -532,11 +698,11 @@
     @Test
     public void testUpdatingGroupKeyOfDismissedSummaryBringsChildrenBack() {
         // GIVEN a collection with two grouped notifs in it
-        NotifEvent notif0 = mNoMan.postNotif(
+        CollectionEvent notif0 = postNotif(
                 buildNotif(TEST_PACKAGE, 0)
                         .setOverrideGroupKey(GROUP_1)
                         .setGroupSummary(mContext, true));
-        NotifEvent notif1 = mNoMan.postNotif(
+        CollectionEvent notif1 = postNotif(
                 buildNotif(TEST_PACKAGE, 1)
                         .setOverrideGroupKey(GROUP_1));
         NotificationEntry entry0 = mCollectionListener.getEntry(notif0.key);
@@ -560,6 +726,78 @@
     }
 
     @Test
+    public void testDismissingSummaryDoesNotDismissForegroundServiceChildren() {
+        // GIVEN a collection with three grouped notifs in it
+        CollectionEvent notif0 = postNotif(
+                buildNotif(TEST_PACKAGE, 0)
+                        .setGroup(mContext, GROUP_1)
+                        .setGroupSummary(mContext, true));
+        CollectionEvent notif1 = postNotif(
+                buildNotif(TEST_PACKAGE, 1)
+                        .setGroup(mContext, GROUP_1)
+                        .setFlag(mContext, Notification.FLAG_FOREGROUND_SERVICE, true));
+        CollectionEvent notif2 = postNotif(
+                buildNotif(TEST_PACKAGE, 2)
+                        .setGroup(mContext, GROUP_1));
+
+        // WHEN the summary is dismissed
+        mCollection.dismissNotification(notif0.entry, defaultStats(notif0.entry));
+
+        // THEN the foreground service child is not dismissed
+        assertEquals(DISMISSED, notif0.entry.getDismissState());
+        assertEquals(NOT_DISMISSED, notif1.entry.getDismissState());
+        assertEquals(PARENT_DISMISSED, notif2.entry.getDismissState());
+    }
+
+    @Test
+    public void testDismissingSummaryDoesNotDismissBubbledChildren() {
+        // GIVEN a collection with three grouped notifs in it
+        CollectionEvent notif0 = postNotif(
+                buildNotif(TEST_PACKAGE, 0)
+                        .setGroup(mContext, GROUP_1)
+                        .setGroupSummary(mContext, true));
+        CollectionEvent notif1 = postNotif(
+                buildNotif(TEST_PACKAGE, 1)
+                        .setGroup(mContext, GROUP_1)
+                        .setFlag(mContext, Notification.FLAG_BUBBLE, true));
+        CollectionEvent notif2 = postNotif(
+                buildNotif(TEST_PACKAGE, 2)
+                        .setGroup(mContext, GROUP_1));
+
+        // WHEN the summary is dismissed
+        mCollection.dismissNotification(notif0.entry, defaultStats(notif0.entry));
+
+        // THEN the bubbled child is not dismissed
+        assertEquals(DISMISSED, notif0.entry.getDismissState());
+        assertEquals(NOT_DISMISSED, notif1.entry.getDismissState());
+        assertEquals(PARENT_DISMISSED, notif2.entry.getDismissState());
+    }
+
+    @Test
+    public void testDismissingSummaryDoesNotDismissDuplicateSummaries() {
+        // GIVEN a group with a two summaries
+        CollectionEvent notif0 = postNotif(
+                buildNotif(TEST_PACKAGE, 0)
+                        .setGroup(mContext, GROUP_1)
+                        .setGroupSummary(mContext, true));
+        CollectionEvent notif1 = postNotif(
+                buildNotif(TEST_PACKAGE, 1)
+                        .setGroup(mContext, GROUP_1)
+                        .setGroupSummary(mContext, true));
+        CollectionEvent notif2 = postNotif(
+                buildNotif(TEST_PACKAGE, 2)
+                        .setGroup(mContext, GROUP_1));
+
+        // WHEN the first summary is dismissed
+        mCollection.dismissNotification(notif0.entry, defaultStats(notif0.entry));
+
+        // THEN the second summary is not auto-dismissed (but the child is)
+        assertEquals(DISMISSED, notif0.entry.getDismissState());
+        assertEquals(NOT_DISMISSED, notif1.entry.getDismissState());
+        assertEquals(PARENT_DISMISSED, notif2.entry.getDismissState());
+    }
+
+    @Test
     public void testLifetimeExtendersAreQueriedWhenNotifRemoved() {
         // GIVEN a couple notifications and a few lifetime extenders
         mExtender1.shouldExtendLifetime = true;
@@ -806,6 +1044,213 @@
         assertEquals(REASON_NOT_CANCELED, entry0.mCancellationReason);
     }
 
+    @Test
+    public void testDismissNotificationsRebuildsOnce() {
+        // GIVEN a collection with a couple notifications
+        NotifEvent notif1 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47, "myTag"));
+        NotifEvent notif2 = mNoMan.postNotif(buildNotif(TEST_PACKAGE2, 88, "barTag"));
+        NotificationEntry entry1 = mCollectionListener.getEntry(notif1.key);
+        NotificationEntry entry2 = mCollectionListener.getEntry(notif2.key);
+        clearInvocations(mBuildListener);
+
+        // WHEN both notifications are manually dismissed together
+        mCollection.dismissNotifications(
+                List.of(new Pair(entry1, defaultStats(entry1)),
+                        new Pair(entry2, defaultStats(entry2))));
+
+        // THEN build list is only called one time
+        verify(mBuildListener).onBuildList(any(Collection.class));
+    }
+
+    @Test
+    public void testDismissNotificationsSentToSystemServer() throws RemoteException {
+        // GIVEN a collection with a couple notifications
+        NotifEvent notif1 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47, "myTag"));
+        NotifEvent notif2 = mNoMan.postNotif(buildNotif(TEST_PACKAGE2, 88, "barTag"));
+        NotificationEntry entry1 = mCollectionListener.getEntry(notif1.key);
+        NotificationEntry entry2 = mCollectionListener.getEntry(notif2.key);
+
+        // WHEN both notifications are manually dismissed together
+        DismissedByUserStats stats1 = defaultStats(entry1);
+        DismissedByUserStats stats2 = defaultStats(entry2);
+        mCollection.dismissNotifications(
+                List.of(new Pair(entry1, defaultStats(entry1)),
+                        new Pair(entry2, defaultStats(entry2))));
+
+        // THEN we send the dismissals to system server
+        verify(mStatusBarService).onNotificationClear(
+                notif1.sbn.getPackageName(),
+                notif1.sbn.getTag(),
+                47,
+                notif1.sbn.getUser().getIdentifier(),
+                notif1.sbn.getKey(),
+                stats1.dismissalSurface,
+                stats1.dismissalSentiment,
+                stats1.notificationVisibility);
+
+        verify(mStatusBarService).onNotificationClear(
+                notif2.sbn.getPackageName(),
+                notif2.sbn.getTag(),
+                88,
+                notif2.sbn.getUser().getIdentifier(),
+                notif2.sbn.getKey(),
+                stats2.dismissalSurface,
+                stats2.dismissalSentiment,
+                stats2.notificationVisibility);
+    }
+
+    @Test
+    public void testDismissNotificationsMarkedAsDismissed() {
+        // GIVEN a collection with a couple notifications
+        NotifEvent notif1 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47, "myTag"));
+        NotifEvent notif2 = mNoMan.postNotif(buildNotif(TEST_PACKAGE2, 88, "barTag"));
+        NotificationEntry entry1 = mCollectionListener.getEntry(notif1.key);
+        NotificationEntry entry2 = mCollectionListener.getEntry(notif2.key);
+
+        // WHEN both notifications are manually dismissed together
+        mCollection.dismissNotifications(
+                List.of(new Pair(entry1, defaultStats(entry1)),
+                        new Pair(entry2, defaultStats(entry2))));
+
+        // THEN the entries are marked as dismissed
+        assertEquals(DISMISSED, entry1.getDismissState());
+        assertEquals(DISMISSED, entry2.getDismissState());
+    }
+
+    @Test
+    public void testDismissNotificationssCallsDismissInterceptors() {
+        // GIVEN a collection with notifications with multiple dismiss interceptors
+        mInterceptor1.shouldInterceptDismissal = true;
+        mInterceptor2.shouldInterceptDismissal = true;
+        mInterceptor3.shouldInterceptDismissal = false;
+        mCollection.addNotificationDismissInterceptor(mInterceptor1);
+        mCollection.addNotificationDismissInterceptor(mInterceptor2);
+        mCollection.addNotificationDismissInterceptor(mInterceptor3);
+
+        NotifEvent notif1 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47, "myTag"));
+        NotifEvent notif2 = mNoMan.postNotif(buildNotif(TEST_PACKAGE2, 88, "barTag"));
+        NotificationEntry entry1 = mCollectionListener.getEntry(notif1.key);
+        NotificationEntry entry2 = mCollectionListener.getEntry(notif2.key);
+
+        // WHEN both notifications are manually dismissed together
+        mCollection.dismissNotifications(
+                List.of(new Pair(entry1, defaultStats(entry1)),
+                        new Pair(entry2, defaultStats(entry2))));
+
+        // THEN all interceptors get checked
+        verify(mInterceptor1).shouldInterceptDismissal(entry1);
+        verify(mInterceptor2).shouldInterceptDismissal(entry1);
+        verify(mInterceptor3).shouldInterceptDismissal(entry1);
+        verify(mInterceptor1).shouldInterceptDismissal(entry2);
+        verify(mInterceptor2).shouldInterceptDismissal(entry2);
+        verify(mInterceptor3).shouldInterceptDismissal(entry2);
+
+        assertEquals(List.of(mInterceptor1, mInterceptor2), entry1.mDismissInterceptors);
+        assertEquals(List.of(mInterceptor1, mInterceptor2), entry2.mDismissInterceptors);
+    }
+
+    @Test
+    public void testDismissAllNotificationsCallsRebuildOnce() {
+        // GIVEN a collection with a couple notifications
+        NotifEvent notif1 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47, "myTag"));
+        NotifEvent notif2 = mNoMan.postNotif(buildNotif(TEST_PACKAGE2, 88, "barTag"));
+        NotificationEntry entry1 = mCollectionListener.getEntry(notif1.key);
+        NotificationEntry entry2 = mCollectionListener.getEntry(notif2.key);
+        clearInvocations(mBuildListener);
+
+        // WHEN all notifications are dismissed for the user who posted both notifs
+        mCollection.dismissAllNotifications(entry1.getSbn().getUser().getIdentifier());
+
+        // THEN build list is only called one time
+        verify(mBuildListener).onBuildList(any(Collection.class));
+    }
+
+    @Test
+    public void testDismissAllNotificationsSentToSystemServer() throws RemoteException {
+        // GIVEN a collection with a couple notifications
+        NotifEvent notif1 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47, "myTag"));
+        NotifEvent notif2 = mNoMan.postNotif(buildNotif(TEST_PACKAGE2, 88, "barTag"));
+        NotificationEntry entry1 = mCollectionListener.getEntry(notif1.key);
+        NotificationEntry entry2 = mCollectionListener.getEntry(notif2.key);
+
+        // WHEN all notifications are dismissed for the user who posted both notifs
+        mCollection.dismissAllNotifications(entry1.getSbn().getUser().getIdentifier());
+
+        // THEN we send the dismissal to system server
+        verify(mStatusBarService).onClearAllNotifications(
+                entry1.getSbn().getUser().getIdentifier());
+    }
+
+    @Test
+    public void testDismissAllNotificationsMarkedAsDismissed() {
+        // GIVEN a collection with a couple notifications
+        NotifEvent notif1 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47, "myTag"));
+        NotifEvent notif2 = mNoMan.postNotif(buildNotif(TEST_PACKAGE2, 88, "barTag"));
+        NotificationEntry entry1 = mCollectionListener.getEntry(notif1.key);
+        NotificationEntry entry2 = mCollectionListener.getEntry(notif2.key);
+
+        // WHEN all notifications are dismissed for the user who posted both notifs
+        mCollection.dismissAllNotifications(entry1.getSbn().getUser().getIdentifier());
+
+        // THEN the entries are marked as dismissed
+        assertEquals(DISMISSED, entry1.getDismissState());
+        assertEquals(DISMISSED, entry2.getDismissState());
+    }
+
+    @Test
+    public void testDismissAllNotificationsDoesNotMarkDismissedUnclearableNotifs() {
+        // GIVEN a collection with one unclearable notification and one clearable notification
+        NotificationEntryBuilder notifEntryBuilder = buildNotif(TEST_PACKAGE, 47, "myTag");
+        notifEntryBuilder.modifyNotification(mContext)
+                .setFlag(FLAG_NO_CLEAR, true);
+        NotifEvent unclearabeNotif = mNoMan.postNotif(notifEntryBuilder);
+        NotifEvent notif2 = mNoMan.postNotif(buildNotif(TEST_PACKAGE2, 88, "barTag"));
+        NotificationEntry unclearableEntry = mCollectionListener.getEntry(unclearabeNotif.key);
+        NotificationEntry entry2 = mCollectionListener.getEntry(notif2.key);
+
+        // WHEN all notifications are dismissed for the user who posted both notifs
+        mCollection.dismissAllNotifications(unclearableEntry.getSbn().getUser().getIdentifier());
+
+        // THEN only the clearable entry is marked as dismissed
+        assertEquals(NOT_DISMISSED, unclearableEntry.getDismissState());
+        assertEquals(DISMISSED, entry2.getDismissState());
+    }
+
+    @Test
+    public void testDismissAllNotificationsCallsDismissInterceptorsOnlyOnUnclearableNotifs() {
+        // GIVEN a collection with multiple dismiss interceptors
+        mInterceptor1.shouldInterceptDismissal = true;
+        mInterceptor2.shouldInterceptDismissal = true;
+        mInterceptor3.shouldInterceptDismissal = false;
+        mCollection.addNotificationDismissInterceptor(mInterceptor1);
+        mCollection.addNotificationDismissInterceptor(mInterceptor2);
+        mCollection.addNotificationDismissInterceptor(mInterceptor3);
+
+        // GIVEN a collection with one unclearable and one clearable notification
+        NotifEvent unclearableNotif = mNoMan.postNotif(
+                buildNotif(TEST_PACKAGE, 47, "myTag")
+                        .setFlag(mContext, FLAG_NO_CLEAR, true));
+        NotificationEntry unclearable = mCollectionListener.getEntry(unclearableNotif.key);
+        NotifEvent clearableNotif = mNoMan.postNotif(
+                buildNotif(TEST_PACKAGE, 88, "myTag")
+                        .setFlag(mContext, FLAG_NO_CLEAR, false));
+        NotificationEntry clearable = mCollectionListener.getEntry(clearableNotif.key);
+
+        // WHEN all notifications are dismissed for the user who posted the notif
+        mCollection.dismissAllNotifications(clearable.getSbn().getUser().getIdentifier());
+
+        // THEN all interceptors get checked for the unclearable notification
+        verify(mInterceptor1).shouldInterceptDismissal(unclearable);
+        verify(mInterceptor2).shouldInterceptDismissal(unclearable);
+        verify(mInterceptor3).shouldInterceptDismissal(unclearable);
+        assertEquals(List.of(mInterceptor1, mInterceptor2), unclearable.mDismissInterceptors);
+
+        // THEN no interceptors get checked for the clearable notification
+        verify(mInterceptor1, never()).shouldInterceptDismissal(clearable);
+        verify(mInterceptor2, never()).shouldInterceptDismissal(clearable);
+        verify(mInterceptor3, never()).shouldInterceptDismissal(clearable);
+    }
+
     private static NotificationEntryBuilder buildNotif(String pkg, int id, String tag) {
         return new NotificationEntryBuilder()
                 .setPkg(pkg)
@@ -826,6 +1271,13 @@
                 NotificationVisibility.obtain(entry.getKey(), 7, 2, true));
     }
 
+    public CollectionEvent postNotif(NotificationEntryBuilder builder) {
+        clearInvocations(mCollectionListener);
+        NotifEvent rawEvent = mNoMan.postNotif(builder);
+        verify(mCollectionListener).onEntryAdded(mEntryCaptor.capture());
+        return new CollectionEvent(rawEvent, requireNonNull(mEntryCaptor.getValue()));
+    }
+
     private static class RecordingCollectionListener implements NotifCollectionListener {
         private final Map<String, NotificationEntry> mLastSeenEntries = new ArrayMap<>();
 
@@ -840,6 +1292,7 @@
 
         @Override
         public void onEntryUpdated(NotificationEntry entry) {
+            mLastSeenEntries.put(entry.getKey(), entry);
         }
 
         @Override
@@ -894,6 +1347,56 @@
         }
     }
 
+    private static class RecordingDismissInterceptor implements NotifDismissInterceptor {
+        private final String mName;
+
+        public @Nullable OnEndDismissInterception onEndInterceptionCallback;
+        public boolean shouldInterceptDismissal = false;
+
+        private RecordingDismissInterceptor(String name) {
+            mName = name;
+        }
+
+        @Override
+        public String getName() {
+            return mName;
+        }
+
+        @Override
+        public void setCallback(OnEndDismissInterception callback) {
+            this.onEndInterceptionCallback = callback;
+        }
+
+        @Override
+        public boolean shouldInterceptDismissal(NotificationEntry entry) {
+            return shouldInterceptDismissal;
+        }
+
+        @Override
+        public void cancelDismissInterception(NotificationEntry entry) {
+        }
+    }
+
+    /**
+     * Wrapper around {@link NotifEvent} that adds the NotificationEntry that the collection under
+     * test creates.
+     */
+    private static class CollectionEvent {
+        public final String key;
+        public final StatusBarNotification sbn;
+        public final Ranking ranking;
+        public final RankingMap rankingMap;
+        public final NotificationEntry entry;
+
+        private CollectionEvent(NotifEvent rawEvent, NotificationEntry entry) {
+            this.key = rawEvent.key;
+            this.sbn = rawEvent.sbn;
+            this.ranking = rawEvent.ranking;
+            this.rankingMap = rawEvent.rankingMap;
+            this.entry = entry;
+        }
+    }
+
     private static final String TEST_PACKAGE = "com.android.test.collection";
     private static final String TEST_PACKAGE2 = "com.android.test.collection2";
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java
index 300ec18..d2bb011 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java
@@ -162,6 +162,11 @@
         return this;
     }
 
+    public NotificationEntryBuilder setFlag(Context context, int mask, boolean value) {
+        mSbnBuilder.setFlag(context, mask, value);
+        return this;
+    }
+
     /* Delegated to RankingBuilder */
 
     public NotificationEntryBuilder setRank(int rank) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManagerTest.kt
index 7ab4846..8e330c6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManagerTest.kt
@@ -27,10 +27,10 @@
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.statusbar.NotificationEntryHelper.modifyRanking
 import com.android.systemui.statusbar.NotificationMediaManager
+import com.android.systemui.statusbar.notification.NotificationEntryManagerLogger
 import com.android.systemui.statusbar.notification.NotificationFilter
 import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
 import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider
-import com.android.systemui.statusbar.notification.logging.NotifLog
 import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier
 import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager.BUCKET_ALERTING
 import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager.BUCKET_SILENT
@@ -62,7 +62,7 @@
                 mock(NotificationGroupManager::class.java),
                 mock(HeadsUpManager::class.java),
                 mock(NotificationFilter::class.java),
-                mock(NotifLog::class.java),
+                mock(NotificationEntryManagerLogger::class.java),
                 mock(NotificationSectionsFeatureManager::class.java),
                 personNotificationIdentifier,
                 HighPriorityProvider(personNotificationIdentifier)
@@ -145,6 +145,47 @@
     }
 
     @Test
+    fun testSort_importantPeople() {
+        val aN = Notification.Builder(mContext, "test")
+                .setStyle(Notification.MessagingStyle(""))
+                .build()
+        val aC = NotificationChannel("test", "", IMPORTANCE_DEFAULT)
+        aC.setConversationId("parent", "convo")
+        val a = NotificationEntryBuilder()
+                .setImportance(IMPORTANCE_HIGH)
+                .setPkg("pkg")
+                .setOpPkg("pkg")
+                .setTag("tag")
+                .setNotification(aN)
+                .setChannel(aC)
+                .setUser(mContext.getUser())
+                .setOverrideGroupKey("")
+                .build()
+
+        val bN = Notification.Builder(mContext, "test")
+                .setStyle(Notification.MessagingStyle(""))
+                .build()
+        val bC = NotificationChannel("test", "", IMPORTANCE_DEFAULT)
+        bC.setConversationId("parent", "convo")
+        bC.setImportantConversation(true)
+        val b = NotificationEntryBuilder()
+                .setImportance(IMPORTANCE_HIGH)
+                .setPkg("pkg2")
+                .setOpPkg("pkg2")
+                .setTag("tag")
+                .setNotification(bN)
+                .setChannel(bC)
+                .setUser(mContext.getUser())
+                .setOverrideGroupKey("")
+                .build()
+
+
+        assertEquals(
+                listOf(b, a),
+                rankingManager.updateRanking(null, listOf(a, b), "test"))
+    }
+
+    @Test
     fun testSort_properlySetsAlertingBucket() {
         val notif = Notification.Builder(mContext, "test") .build()
 
@@ -189,7 +230,7 @@
         groupManager: NotificationGroupManager,
         headsUpManager: HeadsUpManager,
         filter: NotificationFilter,
-        notifLog: NotifLog,
+        logger: NotificationEntryManagerLogger,
         sectionsFeatureManager: NotificationSectionsFeatureManager,
         peopleNotificationIdentifier: PeopleNotificationIdentifier,
         highPriorityProvider: HighPriorityProvider
@@ -198,7 +239,7 @@
         groupManager,
         headsUpManager,
         filter,
-        notifLog,
+        logger,
         sectionsFeatureManager,
         peopleNotificationIdentifier,
         highPriorityProvider
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java
index 27ca18c..e570ab8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java
@@ -51,7 +51,6 @@
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter;
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSection;
 import com.android.systemui.statusbar.notification.collection.notifcollection.CollectionReadyForBuildListener;
-import com.android.systemui.util.Assert;
 import com.android.systemui.util.time.FakeSystemClock;
 
 import org.junit.Before;
@@ -101,7 +100,7 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
 
         mListBuilder = new ShadeListBuilder(mSystemClock, mLogger, mock(DumpController.class));
         mListBuilder.setOnRenderListListener(mOnRenderListListener);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/ForegroundCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/ForegroundCoordinatorTest.java
index eb1af7c..67b1aad 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/ForegroundCoordinatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/ForegroundCoordinatorTest.java
@@ -44,7 +44,6 @@
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
-import com.android.systemui.util.Assert;
 import com.android.systemui.util.concurrency.FakeExecutor;
 import com.android.systemui.util.time.FakeSystemClock;
 
@@ -84,7 +83,7 @@
     @Before
     public void setup() {
         MockitoAnnotations.initMocks(this);
-        Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
 
         mForegroundCoordinator =
                 new ForegroundCoordinator(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java
new file mode 100644
index 0000000..61a4fbe
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.collection.coordinator;
+
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.os.RemoteException;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.internal.statusbar.IStatusBarService;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl;
+import com.android.systemui.statusbar.notification.collection.NotifPipeline;
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
+import com.android.systemui.statusbar.notification.row.NotifInflationErrorManager;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.List;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+public class PreparationCoordinatorTest extends SysuiTestCase {
+    private static final String TEST_MESSAGE = "TEST_MESSAGE";
+
+    private PreparationCoordinator mCoordinator;
+    private NotifFilter mInflationErrorFilter;
+    private NotifInflationErrorManager mErrorManager;
+    private NotificationEntry mEntry;
+    private Exception mInflationError;
+
+    @Mock
+    private NotifPipeline mNotifPipeline;
+    @Mock private IStatusBarService mService;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mEntry = new NotificationEntryBuilder().build();
+        mInflationError = new Exception(TEST_MESSAGE);
+        mErrorManager = new NotifInflationErrorManager();
+
+        mCoordinator = new PreparationCoordinator(
+                mock(PreparationCoordinatorLogger.class),
+                mock(NotifInflaterImpl.class),
+                mErrorManager,
+                mService);
+
+        ArgumentCaptor<NotifFilter> filterCaptor = ArgumentCaptor.forClass(NotifFilter.class);
+        mCoordinator.attach(mNotifPipeline);
+        verify(mNotifPipeline, times(2)).addPreRenderFilter(filterCaptor.capture());
+        List<NotifFilter> filters = filterCaptor.getAllValues();
+        mInflationErrorFilter = filters.get(0);
+    }
+
+    @Test
+    public void testErrorLogsToService() throws RemoteException {
+        // WHEN an entry has an inflation error.
+        mErrorManager.setInflationError(mEntry, mInflationError);
+
+        // THEN we log to status bar service.
+        verify(mService).onNotificationError(
+                eq(mEntry.getSbn().getPackageName()),
+                eq(mEntry.getSbn().getTag()),
+                eq(mEntry.getSbn().getId()),
+                eq(mEntry.getSbn().getUid()),
+                eq(mEntry.getSbn().getInitialPid()),
+                eq(mInflationError.getMessage()),
+                eq(mEntry.getSbn().getUserId()));
+    }
+
+    @Test
+    public void testFiltersOutErroredNotifications() {
+        // WHEN an entry has an inflation error.
+        mErrorManager.setInflationError(mEntry, mInflationError);
+
+        // THEN we filter it from the notification list.
+        assertTrue(mInflationErrorFilter.shouldFilterOut(mEntry, 0));
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
index d8cf6ed..e960185 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
@@ -39,7 +39,6 @@
 import android.app.AppOpsManager;
 import android.app.NotificationChannel;
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 import android.util.ArraySet;
 import android.view.NotificationHeaderView;
@@ -79,7 +78,7 @@
 
     @Before
     public void setUp() throws Exception {
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         mNotificationTestHelper = new NotificationTestHelper(mContext, mDependency);
         mGroupRow = mNotificationTestHelper.createGroup();
         mGroupRow.setHeadsUpAnimatingAwayListener(
@@ -194,9 +193,8 @@
     @Test
     public void testClickSound() throws Exception {
         assertTrue("Should play sounds by default.", mGroupRow.isSoundEffectsEnabled());
-        StatusBarStateController mock = mock(StatusBarStateController.class);
+        StatusBarStateController mock = mNotificationTestHelper.getStatusBarStateController();
         when(mock.isDozing()).thenReturn(true);
-        mGroupRow.setStatusBarStateController(mock);
         mGroupRow.setSecureStateProvider(()-> false);
         assertFalse("Shouldn't play sounds when dark and trusted.",
                 mGroupRow.isSoundEffectsEnabled());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotifBindPipelineTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotifBindPipelineTest.java
index 8f9f65d..6408f7a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotifBindPipelineTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotifBindPipelineTest.java
@@ -28,9 +28,9 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
-import com.android.systemui.statusbar.notification.NotificationEntryListener;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
 import com.android.systemui.statusbar.notification.row.NotifBindPipeline.BindCallback;
 
 import org.junit.Before;
@@ -57,17 +57,17 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        NotificationEntryManager entryManager = mock(NotificationEntryManager.class);
+        CommonNotifCollection collection = mock(CommonNotifCollection.class);
 
-        mBindPipeline = new NotifBindPipeline(entryManager);
+        mBindPipeline = new NotifBindPipeline(collection, mock(NotifBindPipelineLogger.class));
         mBindPipeline.setStage(mStage);
 
-        ArgumentCaptor<NotificationEntryListener> entryListenerCaptor =
-                ArgumentCaptor.forClass(NotificationEntryListener.class);
-        verify(entryManager).addNotificationEntryListener(entryListenerCaptor.capture());
-        NotificationEntryListener entryListener = entryListenerCaptor.getValue();
+        ArgumentCaptor<NotifCollectionListener> collectionListenerCaptor =
+                ArgumentCaptor.forClass(NotifCollectionListener.class);
+        verify(collection).addCollectionListener(collectionListenerCaptor.capture());
+        NotifCollectionListener listener = collectionListenerCaptor.getValue();
 
-        entryListener.onPendingEntryAdded(mEntry);
+        listener.onEntryInit(mEntry);
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationBlockingHelperManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationBlockingHelperManagerTest.java
index 1dfe7bc..481bac2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationBlockingHelperManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationBlockingHelperManagerTest.java
@@ -28,6 +28,7 @@
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
@@ -43,11 +44,11 @@
 import androidx.test.filters.FlakyTest;
 import androidx.test.filters.SmallTest;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.bubbles.BubbleController;
 import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.util.Assert;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -73,7 +74,7 @@
 
     @Before
     public void setUp() {
-        Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         MockitoAnnotations.initMocks(this);
         mDependency.injectMockDependency(BubbleController.class);
         when(mGutsManager.openGuts(
@@ -83,13 +84,12 @@
                 any(NotificationMenuRowPlugin.MenuItem.class)))
                 .thenReturn(true);
         when(mMenuRow.getLongpressMenuItem(any(Context.class))).thenReturn(mMenuItem);
-        mDependency.injectTestDependency(NotificationGutsManager.class, mGutsManager);
-        mDependency.injectTestDependency(NotificationEntryManager.class, mEntryManager);
         mDependency.injectMockDependency(BubbleController.class);
 
         mHelper = new NotificationTestHelper(mContext, mDependency);
 
-        mBlockingHelperManager = new NotificationBlockingHelperManager(mContext);
+        mBlockingHelperManager = new NotificationBlockingHelperManager(
+                mContext, mGutsManager, mEntryManager, mock(MetricsLogger.class));
         // By default, have the shade visible/expanded.
         mBlockingHelperManager.setNotificationShadeExpanded(1f);
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentInflaterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentInflaterTest.java
index 8a42e5f..149a95a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentInflaterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentInflaterTest.java
@@ -50,10 +50,12 @@
 
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
+import com.android.systemui.statusbar.SmartReplyController;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.BindParams;
 import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationCallback;
 import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
+import com.android.systemui.statusbar.policy.SmartReplyConstants;
 import com.android.systemui.tests.R;
 
 import org.junit.Assert;
@@ -92,9 +94,14 @@
         ExpandableNotificationRow row = new NotificationTestHelper(mContext, mDependency).createRow(
                 mBuilder.build());
         mRow = spy(row);
+
+        final SmartReplyConstants smartReplyConstants = mock(SmartReplyConstants.class);
+        final SmartReplyController smartReplyController = mock(SmartReplyController.class);
         mNotificationInflater = new NotificationContentInflater(
                 mCache,
-                mock(NotificationRemoteInputManager.class));
+                mock(NotificationRemoteInputManager.class),
+                () -> smartReplyConstants,
+                () -> smartReplyController);
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java
index f080d67..138ea39 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java
@@ -21,6 +21,8 @@
 import static android.app.NotificationManager.IMPORTANCE_HIGH;
 import static android.app.NotificationManager.IMPORTANCE_LOW;
 import static android.print.PrintManager.PRINT_SPOOLER_PACKAGE_NAME;
+import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
+import static android.provider.Settings.Secure.BUBBLE_IMPORTANT_CONVERSATIONS;
 import static android.view.View.GONE;
 import static android.view.View.VISIBLE;
 
@@ -51,21 +53,23 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ShortcutInfo;
 import android.content.pm.ShortcutManager;
-import android.graphics.drawable.Drawable;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Icon;
 import android.os.UserHandle;
+import android.provider.Settings;
 import android.service.notification.StatusBarNotification;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.widget.Button;
 import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.android.internal.logging.MetricsLogger;
+import com.android.settingslib.notification.ConversationIconFactory;
 import com.android.systemui.Dependency;
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
@@ -75,6 +79,7 @@
 import com.android.systemui.statusbar.notification.VisualStabilityManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
+import com.android.systemui.statusbar.phone.ShadeController;
 
 import org.junit.Before;
 import org.junit.Rule;
@@ -111,7 +116,8 @@
     private NotificationEntry mBubbleEntry;
     @Mock
     private ShortcutInfo mShortcutInfo;
-    private Drawable mImage;
+    @Mock
+    private Bitmap mImage;
 
     @Rule
     public MockitoRule mockito = MockitoJUnit.rule();
@@ -131,6 +137,10 @@
     private ShortcutManager mShortcutManager;
     @Mock
     private NotificationGuts mNotificationGuts;
+    @Mock
+    private ShadeController mShadeController;
+    @Mock
+    private ConversationIconFactory mIconFactory;
 
     @Before
     public void setUp() throws Exception {
@@ -139,12 +149,12 @@
         mDependency.injectTestDependency(Dependency.BG_LOOPER, mTestableLooper.getLooper());
         mDependency.injectTestDependency(MetricsLogger.class, mMetricsLogger);
         mDependency.injectTestDependency(BubbleController.class, mBubbleController);
+        mDependency.injectTestDependency(ShadeController.class, mShadeController);
         // Inflate the layout
         final LayoutInflater layoutInflater = LayoutInflater.from(mContext);
         mNotificationInfo = (NotificationConversationInfo) layoutInflater.inflate(
                 R.layout.notification_conversation_info,
                 null);
-        mNotificationInfo.mShowHomeScreen = true;
         mNotificationInfo.setGutsParent(mNotificationGuts);
         doAnswer((Answer<Object>) invocation -> {
             mNotificationInfo.handleCloseControls(true, false);
@@ -173,9 +183,8 @@
         when(mShortcutInfo.getShortLabel()).thenReturn("Convo name");
         List<ShortcutInfo> shortcuts = Arrays.asList(mShortcutInfo);
         when(mLauncherApps.getShortcuts(any(), any())).thenReturn(shortcuts);
-        mImage = mContext.getDrawable(R.drawable.ic_star);
-        when(mLauncherApps.getShortcutBadgedIconDrawable(eq(mShortcutInfo),
-                anyInt())).thenReturn(mImage);
+        when(mIconFactory.getConversationBitmap(any(ShortcutInfo.class), anyString(), anyInt()))
+                .thenReturn(mImage);
 
         mNotificationChannel = new NotificationChannel(
                 TEST_CHANNEL, TEST_CHANNEL_NAME, IMPORTANCE_LOW);
@@ -221,9 +230,10 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
         final ImageView view = mNotificationInfo.findViewById(R.id.conversation_icon);
-        assertEquals(mImage, view.getDrawable());
+        assertEquals(mImage, ((BitmapDrawable) view.getDrawable()).getBitmap());
     }
 
     @Test
@@ -241,6 +251,7 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
         final TextView textView = mNotificationInfo.findViewById(R.id.pkg_name);
         assertTrue(textView.getText().toString().contains("App Name"));
@@ -287,6 +298,7 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
         final TextView textView = mNotificationInfo.findViewById(R.id.group_name);
         assertTrue(textView.getText().toString().contains(group.getName()));
@@ -309,6 +321,7 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
         final TextView textView = mNotificationInfo.findViewById(R.id.group_name);
         assertEquals(VISIBLE, mNotificationInfo.findViewById(R.id.header).getVisibility());
@@ -330,11 +343,10 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
         final TextView nameView = mNotificationInfo.findViewById(R.id.delegate_name);
         assertEquals(GONE, nameView.getVisibility());
-        final TextView dividerView = mNotificationInfo.findViewById(R.id.pkg_divider);
-        assertEquals(GONE, dividerView.getVisibility());
     }
 
     @Test
@@ -360,12 +372,11 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
         final TextView nameView = mNotificationInfo.findViewById(R.id.delegate_name);
         assertEquals(VISIBLE, nameView.getVisibility());
         assertTrue(nameView.getText().toString().contains("Proxied"));
-        final TextView dividerView = mNotificationInfo.findViewById(R.id.pkg_divider);
-        assertEquals(VISIBLE, dividerView.getVisibility());
     }
 
     @Test
@@ -386,6 +397,7 @@
                 },
                 null,
                 null,
+                mIconFactory,
                 true);
 
         final View settingsButton = mNotificationInfo.findViewById(R.id.info);
@@ -408,6 +420,7 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
         final View settingsButton = mNotificationInfo.findViewById(R.id.info);
         assertTrue(settingsButton.getVisibility() != View.VISIBLE);
@@ -431,6 +444,7 @@
                 },
                 null,
                 null,
+                mIconFactory,
                 false);
         final View settingsButton = mNotificationInfo.findViewById(R.id.info);
         assertTrue(settingsButton.getVisibility() != View.VISIBLE);
@@ -438,6 +452,7 @@
 
     @Test
     public void testBindNotification_bubbleActionVisibleWhenCanBubble()  {
+        Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 1);
         mNotificationInfo.bindNotification(
                 mShortcutManager,
                 mLauncherApps,
@@ -450,6 +465,7 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
 
         View bubbleView = mNotificationInfo.findViewById(R.id.bubble);
@@ -457,7 +473,8 @@
     }
 
     @Test
-    public void testBindNotification_bubbleActionVisibleWhenCannotBubble()  {
+    public void testBindNotification_bubbleAction_noBubbleMetadata()  {
+        Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 1);
         mNotificationInfo.bindNotification(
                 mShortcutManager,
                 mLauncherApps,
@@ -470,6 +487,29 @@
                 null,
                 null,
                 null,
+                mIconFactory,
+                true);
+
+        View bubbleView = mNotificationInfo.findViewById(R.id.bubble);
+        assertEquals(View.GONE, bubbleView.getVisibility());
+    }
+
+    @Test
+    public void testBindNotification_bubbleActionGloballyOff()  {
+        Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 0);
+        mNotificationInfo.bindNotification(
+                mShortcutManager,
+                mLauncherApps,
+                mMockPackageManager,
+                mMockINotificationManager,
+                mVisualStabilityManager,
+                TEST_PACKAGE_NAME,
+                mNotificationChannel,
+                mBubbleEntry,
+                null,
+                null,
+                null,
+                mIconFactory,
                 true);
 
         View bubbleView = mNotificationInfo.findViewById(R.id.bubble);
@@ -492,9 +532,9 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
 
-
         // Promote it
         mNotificationInfo.findViewById(R.id.home).performClick();
         mTestableLooper.processAllMessages();
@@ -502,6 +542,7 @@
         verify(mShortcutManager, times(1)).requestPinShortcut(mShortcutInfo, null);
         verify(mMockINotificationManager, never()).updateNotificationChannelForPackage(
                 anyString(), anyInt(), any());
+        verify(mShadeController).animateCollapsePanels();
     }
 
     @Test
@@ -522,9 +563,9 @@
                 (View v, int hours) -> {
                     latch.countDown();
                 },
+                mIconFactory,
                 true);
 
-
         // Promote it
         mNotificationInfo.findViewById(R.id.snooze).performClick();
         mTestableLooper.processAllMessages();
@@ -536,6 +577,7 @@
 
     @Test
     public void testBubble_promotesBubble() throws Exception {
+        Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 1);
         mNotificationChannel.setAllowBubbles(false);
         mConversationChannel.setAllowBubbles(false);
 
@@ -551,6 +593,7 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
 
         assertFalse(mBubbleEntry.isBubble());
@@ -569,6 +612,7 @@
 
     @Test
     public void testBubble_demotesBubble() throws Exception {
+        Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 1);
         mBubbleEntry.getSbn().getNotification().flags |= FLAG_BUBBLE;
 
         mNotificationInfo.bindNotification(
@@ -583,6 +627,7 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
 
         assertTrue(mBubbleEntry.isBubble());
@@ -601,6 +646,7 @@
 
     @Test
     public void testBubble_noChannelChange() throws Exception {
+        Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 1);
         mNotificationInfo.bindNotification(
                 mShortcutManager,
                 mLauncherApps,
@@ -613,6 +659,7 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
 
         assertFalse(mBubbleEntry.isBubble());
@@ -628,7 +675,11 @@
     }
 
     @Test
-    public void testFavorite_favorite() throws Exception {
+    public void testFavorite_favorite_noBubble() throws Exception {
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                BUBBLE_IMPORTANT_CONVERSATIONS, 0);
+        mNotificationChannel.setAllowBubbles(false);
+        mConversationChannel.setAllowBubbles(false);
         mNotificationInfo.bindNotification(
                 mShortcutManager,
                 mLauncherApps,
@@ -641,12 +692,12 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
 
-
-        Button fave = mNotificationInfo.findViewById(R.id.fave);
-        assertEquals(mContext.getString(R.string.notification_conversation_favorite),
-                fave.getText().toString());
+        ImageButton fave = mNotificationInfo.findViewById(R.id.fave);
+        assertEquals(mContext.getString(R.string.notification_conversation_unfavorite),
+                fave.getContentDescription().toString());
 
         fave.performClick();
         mTestableLooper.processAllMessages();
@@ -656,6 +707,44 @@
         verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage(
                 anyString(), anyInt(), captor.capture());
         assertTrue(captor.getValue().isImportantConversation());
+        assertFalse(captor.getValue().canBubble());
+        verify(mBubbleController, never()).onUserCreatedBubbleFromNotification(mEntry);
+    }
+
+    @Test
+    public void testFavorite_favorite_bubble() throws Exception {
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                BUBBLE_IMPORTANT_CONVERSATIONS, 1);
+        mNotificationChannel.setAllowBubbles(false);
+        mConversationChannel.setAllowBubbles(false);
+        mNotificationInfo.bindNotification(
+                mShortcutManager,
+                mLauncherApps,
+                mMockPackageManager,
+                mMockINotificationManager,
+                mVisualStabilityManager,
+                TEST_PACKAGE_NAME,
+                mNotificationChannel,
+                mEntry,
+                null,
+                null,
+                null,
+                mIconFactory,
+                true);
+
+        ImageButton fave = mNotificationInfo.findViewById(R.id.fave);
+        assertEquals(mContext.getString(R.string.notification_conversation_unfavorite),
+                fave.getContentDescription().toString());
+
+        fave.performClick();
+        mTestableLooper.processAllMessages();
+
+        ArgumentCaptor<NotificationChannel> captor =
+                ArgumentCaptor.forClass(NotificationChannel.class);
+        verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage(
+                anyString(), anyInt(), captor.capture());
+        assertTrue(captor.getValue().isImportantConversation());
+        assertTrue(captor.getValue().canBubble());
     }
 
     @Test
@@ -675,11 +764,12 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
 
-        Button fave = mNotificationInfo.findViewById(R.id.fave);
-        assertEquals(mContext.getString(R.string.notification_conversation_unfavorite),
-                fave.getText().toString());
+        ImageButton fave = mNotificationInfo.findViewById(R.id.fave);
+        assertEquals(mContext.getString(R.string.notification_conversation_favorite),
+                fave.getContentDescription().toString());
 
         fave.performClick();
         mTestableLooper.processAllMessages();
@@ -692,34 +782,6 @@
     }
 
     @Test
-    public void testDemote() throws Exception {
-        mNotificationInfo.bindNotification(
-                mShortcutManager,
-                mLauncherApps,
-                mMockPackageManager,
-                mMockINotificationManager,
-                mVisualStabilityManager,
-                TEST_PACKAGE_NAME,
-                mNotificationChannel,
-                mEntry,
-                null,
-                null,
-                null,
-                true);
-
-
-        ImageButton demote = mNotificationInfo.findViewById(R.id.demote);
-        demote.performClick();
-        mTestableLooper.processAllMessages();
-
-        ArgumentCaptor<NotificationChannel> captor =
-                ArgumentCaptor.forClass(NotificationChannel.class);
-        verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage(
-                anyString(), anyInt(), captor.capture());
-        assertTrue(captor.getValue().isDemoted());
-    }
-
-    @Test
     public void testMute_mute() throws Exception {
         mNotificationChannel.setImportance(IMPORTANCE_DEFAULT);
         mConversationChannel.setImportance(IMPORTANCE_DEFAULT);
@@ -736,11 +798,12 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
 
-        Button mute = mNotificationInfo.findViewById(R.id.mute);
-        assertEquals(mContext.getString(R.string.notification_conversation_mute),
-                mute.getText().toString());
+        ImageButton mute = mNotificationInfo.findViewById(R.id.mute);
+        assertEquals(mContext.getString(R.string.notification_conversation_unmute),
+                mute.getContentDescription().toString());
 
         mute.performClick();
         mTestableLooper.processAllMessages();
@@ -771,12 +834,12 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
 
-
-        Button mute = mNotificationInfo.findViewById(R.id.mute);
-        assertEquals(mContext.getString(R.string.notification_conversation_unmute),
-                mute.getText().toString());
+        ImageButton mute = mNotificationInfo.findViewById(R.id.mute);
+        assertEquals(mContext.getString(R.string.notification_conversation_mute),
+                mute.getContentDescription().toString());
 
         mute.performClick();
         mTestableLooper.processAllMessages();
@@ -802,7 +865,9 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
+
         verify(mMockINotificationManager, times(1)).createConversationNotificationChannelForPackage(
                 anyString(), anyInt(), anyString(), any(), eq(CONVERSATION_ID));
     }
@@ -822,7 +887,9 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
+
         verify(mMockINotificationManager, never()).createConversationNotificationChannelForPackage(
                 anyString(), anyInt(), anyString(), any(), eq(CONVERSATION_ID));
     }
@@ -843,6 +910,7 @@
                 null,
                 null,
                 null,
+                mIconFactory,
                 true);
 
         mNotificationInfo.findViewById(R.id.mute).performClick();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java
new file mode 100644
index 0000000..ac40808
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java
@@ -0,0 +1,385 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row;
+
+import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
+
+import static junit.framework.Assert.assertNotNull;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.Notification;
+import android.os.Handler;
+import android.service.notification.NotificationListenerService;
+import android.service.notification.NotificationListenerService.Ranking;
+import android.service.notification.StatusBarNotification;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.internal.util.NotificationMessagingUtil;
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.plugins.FalsingManager;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shared.plugins.PluginManager;
+import com.android.systemui.statusbar.FeatureFlags;
+import com.android.systemui.statusbar.NotificationLockscreenUserManager;
+import com.android.systemui.statusbar.NotificationMediaManager;
+import com.android.systemui.statusbar.NotificationPresenter;
+import com.android.systemui.statusbar.NotificationRemoteInputManager;
+import com.android.systemui.statusbar.SbnBuilder;
+import com.android.systemui.statusbar.SmartReplyController;
+import com.android.systemui.statusbar.notification.ForegroundServiceDismissalFeatureController;
+import com.android.systemui.statusbar.notification.NotificationClicker;
+import com.android.systemui.statusbar.notification.NotificationEntryListener;
+import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.NotificationEntryManagerLogger;
+import com.android.systemui.statusbar.notification.NotificationFilter;
+import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
+import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager;
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.NotificationRankingManager;
+import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
+import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
+import com.android.systemui.statusbar.notification.logging.NotificationLogger;
+import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
+import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
+import com.android.systemui.statusbar.notification.row.dagger.ExpandableNotificationRowComponent;
+import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
+import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
+import com.android.systemui.statusbar.phone.KeyguardBypassController;
+import com.android.systemui.statusbar.phone.NotificationGroupManager;
+import com.android.systemui.statusbar.policy.HeadsUpManager;
+import com.android.systemui.statusbar.policy.SmartReplyConstants;
+import com.android.systemui.util.leak.LeakDetector;
+import com.android.systemui.util.time.FakeSystemClock;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.mockito.stubbing.Answer;
+
+/**
+ * Functional tests for notification inflation from {@link NotificationEntryManager}.
+ */
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+public class NotificationEntryManagerInflationTest extends SysuiTestCase {
+
+    private static final String TEST_TITLE = "Title";
+    private static final String TEST_TEXT = "Text";
+    private static final long TIMEOUT_TIME = 10000;
+    private static final Runnable TIMEOUT_RUNNABLE = () -> {
+        throw new RuntimeException("Timed out waiting to inflate");
+    };
+
+    @Mock private NotificationPresenter mPresenter;
+    @Mock private NotificationEntryManager.KeyguardEnvironment mEnvironment;
+    @Mock private NotificationListContainer mListContainer;
+    @Mock private NotificationEntryListener mEntryListener;
+    @Mock private NotificationRowBinderImpl.BindRowCallback mBindCallback;
+    @Mock private HeadsUpManager mHeadsUpManager;
+    @Mock private NotificationInterruptionStateProvider mNotificationInterruptionStateProvider;
+    @Mock private NotificationLockscreenUserManager mLockscreenUserManager;
+    @Mock private NotificationGutsManager mGutsManager;
+    @Mock private NotificationRemoteInputManager mRemoteInputManager;
+    @Mock private NotificationMediaManager mNotificationMediaManager;
+    @Mock private ExpandableNotificationRowComponent.Builder
+            mExpandableNotificationRowComponentBuilder;
+    @Mock private ExpandableNotificationRowComponent mExpandableNotificationRowComponent;
+    @Mock private FalsingManager mFalsingManager;
+    @Mock private KeyguardBypassController mKeyguardBypassController;
+    @Mock private StatusBarStateController mStatusBarStateController;
+
+    @Mock private NotificationGroupManager mGroupManager;
+    @Mock private FeatureFlags mFeatureFlags;
+    @Mock private LeakDetector mLeakDetector;
+
+    @Mock private ActivatableNotificationViewController mActivatableNotificationViewController;
+    @Mock private NotificationRowComponent.Builder mNotificationRowComponentBuilder;
+
+    private StatusBarNotification mSbn;
+    private NotificationListenerService.RankingMap mRankingMap;
+    private NotificationEntryManager mEntryManager;
+    private NotificationRowBinderImpl mRowBinder;
+    private Handler mHandler;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mDependency.injectMockDependency(SmartReplyController.class);
+
+        mHandler = Handler.createAsync(TestableLooper.get(this).getLooper());
+
+        Notification notification = new Notification.Builder(mContext)
+                .setSmallIcon(R.drawable.ic_person)
+                .setContentTitle(TEST_TITLE)
+                .setContentText(TEST_TEXT)
+                .build();
+        mSbn = new SbnBuilder()
+                .setNotification(notification)
+                .build();
+
+        when(mFeatureFlags.isNewNotifPipelineEnabled()).thenReturn(false);
+        when(mFeatureFlags.isNewNotifPipelineRenderingEnabled()).thenReturn(false);
+
+        mEntryManager = new NotificationEntryManager(
+                mock(NotificationEntryManagerLogger.class),
+                mGroupManager,
+                new NotificationRankingManager(
+                        () -> mock(NotificationMediaManager.class),
+                        mGroupManager,
+                        mHeadsUpManager,
+                        mock(NotificationFilter.class),
+                        mock(NotificationEntryManagerLogger.class),
+                        mock(NotificationSectionsFeatureManager.class),
+                        mock(PeopleNotificationIdentifier.class),
+                        mock(HighPriorityProvider.class)),
+                mEnvironment,
+                mFeatureFlags,
+                () -> mRowBinder,
+                () -> mRemoteInputManager,
+                mLeakDetector,
+                mock(ForegroundServiceDismissalFeatureController.class)
+        );
+
+        NotifRemoteViewCache cache = new NotifRemoteViewCacheImpl(mEntryManager);
+        NotifBindPipeline pipeline = new NotifBindPipeline(
+                mEntryManager,
+                mock(NotifBindPipelineLogger.class));
+        NotificationContentInflater binder = new NotificationContentInflater(
+                cache,
+                mRemoteInputManager,
+                () -> mock(SmartReplyConstants.class),
+                () -> mock(SmartReplyController.class));
+        RowContentBindStage stage = new RowContentBindStage(
+                binder,
+                mock(NotifInflationErrorManager.class),
+                mock(RowContentBindStageLogger.class));
+        pipeline.setStage(stage);
+
+        ArgumentCaptor<ExpandableNotificationRow> viewCaptor =
+                ArgumentCaptor.forClass(ExpandableNotificationRow.class);
+        when(mExpandableNotificationRowComponentBuilder
+                .expandableNotificationRow(viewCaptor.capture()))
+                .thenReturn(mExpandableNotificationRowComponentBuilder);
+        when(mExpandableNotificationRowComponentBuilder
+                .notificationEntry(any()))
+                .thenReturn(mExpandableNotificationRowComponentBuilder);
+        when(mExpandableNotificationRowComponentBuilder
+                .onDismissRunnable(any()))
+                .thenReturn(mExpandableNotificationRowComponentBuilder);
+        when(mExpandableNotificationRowComponentBuilder
+                .inflationCallback(any()))
+                .thenReturn(mExpandableNotificationRowComponentBuilder);
+        when(mExpandableNotificationRowComponentBuilder
+                .rowContentBindStage(any()))
+                .thenReturn(mExpandableNotificationRowComponentBuilder);
+        when(mExpandableNotificationRowComponentBuilder
+                .onExpandClickListener(any()))
+                .thenReturn(mExpandableNotificationRowComponentBuilder);
+
+        when(mExpandableNotificationRowComponentBuilder.build())
+                .thenReturn(mExpandableNotificationRowComponent);
+        when(mExpandableNotificationRowComponent.getExpandableNotificationRowController())
+                .thenAnswer((Answer<ExpandableNotificationRowController>) invocation ->
+                        new ExpandableNotificationRowController(
+                                viewCaptor.getValue(),
+                                mock(ActivatableNotificationViewController.class),
+                                mNotificationMediaManager,
+                                mock(PluginManager.class),
+                                new FakeSystemClock(),
+                                "FOOBAR", "FOOBAR",
+                                mKeyguardBypassController,
+                                mGroupManager,
+                                stage,
+                                mock(NotificationLogger.class),
+                                mHeadsUpManager,
+                                mPresenter,
+                                mStatusBarStateController,
+                                mEntryManager,
+                                mGutsManager,
+                                true,
+                                null,
+                                mFalsingManager
+                        ));
+
+        when(mNotificationRowComponentBuilder.activatableNotificationView(any()))
+                .thenReturn(mNotificationRowComponentBuilder);
+        when(mNotificationRowComponentBuilder.build()).thenReturn(
+                () -> mActivatableNotificationViewController);
+
+        mRowBinder = new NotificationRowBinderImpl(
+                mContext,
+                new NotificationMessagingUtil(mContext),
+                mRemoteInputManager,
+                mLockscreenUserManager,
+                pipeline,
+                stage,
+                true, /* allowLongPress */
+                mock(KeyguardBypassController.class),
+                mock(StatusBarStateController.class),
+                mGroupManager,
+                mGutsManager,
+                mNotificationInterruptionStateProvider,
+                RowInflaterTask::new,
+                mExpandableNotificationRowComponentBuilder);
+
+        mEntryManager.setUpWithPresenter(mPresenter);
+        mEntryManager.addNotificationEntryListener(mEntryListener);
+
+        mRowBinder.setUpWithPresenter(mPresenter, mListContainer, mBindCallback);
+        mRowBinder.setInflationCallback(mEntryManager);
+        mRowBinder.setNotificationClicker(mock(NotificationClicker.class));
+
+        Ranking ranking = new Ranking();
+        ranking.populate(
+                mSbn.getKey(),
+                0,
+                false,
+                0,
+                0,
+                IMPORTANCE_DEFAULT,
+                null,
+                null,
+                null,
+                null,
+                null,
+                true,
+                Ranking.USER_SENTIMENT_NEUTRAL,
+                false,
+                -1,
+                false,
+                null,
+                null,
+                false,
+                false,
+                false);
+        mRankingMap = new NotificationListenerService.RankingMap(new Ranking[] {ranking});
+
+        TestableLooper.get(this).processAllMessages();
+    }
+
+    @After
+    public void cleanUp() {
+        // Don't leave anything on main thread
+        TestableLooper.get(this).processAllMessages();
+    }
+
+    @Test
+    public void testAddNotification() {
+        // WHEN a notification is added
+        mEntryManager.addNotification(mSbn, mRankingMap);
+        ArgumentCaptor<NotificationEntry> entryCaptor = ArgumentCaptor.forClass(
+                NotificationEntry.class);
+        verify(mEntryListener).onPendingEntryAdded(entryCaptor.capture());
+        NotificationEntry entry = entryCaptor.getValue();
+
+        // Wait for inflation
+        // row inflation, system notification, remote views, contracted view
+        waitForMessages(4);
+
+        // THEN the notification has its row inflated
+        assertNotNull(entry.getRow());
+        assertNotNull(entry.getRow().getPrivateLayout().getContractedChild());
+
+        // THEN inflation callbacks are called
+        verify(mBindCallback).onBindRow(eq(entry), any(), eq(mSbn), any());
+        verify(mEntryListener, never()).onInflationError(any(), any());
+        verify(mEntryListener).onEntryInflated(entry);
+        verify(mEntryListener).onNotificationAdded(entry);
+
+        // THEN the notification is active
+        assertNotNull(mEntryManager.getActiveNotificationUnfiltered(mSbn.getKey()));
+
+        // THEN we update the presenter
+        verify(mPresenter).updateNotificationViews();
+    }
+
+    @Test
+    public void testUpdateNotification() {
+        // GIVEN a notification already added
+        mEntryManager.addNotification(mSbn, mRankingMap);
+        ArgumentCaptor<NotificationEntry> entryCaptor = ArgumentCaptor.forClass(
+                NotificationEntry.class);
+        verify(mEntryListener).onPendingEntryAdded(entryCaptor.capture());
+        NotificationEntry entry = entryCaptor.getValue();
+        waitForMessages(4);
+
+        Mockito.reset(mEntryListener);
+        Mockito.reset(mPresenter);
+
+        // WHEN the notification is updated
+        mEntryManager.updateNotification(mSbn, mRankingMap);
+
+        // Wait for inflation
+        // remote views, contracted view
+        waitForMessages(2);
+
+        // THEN the notification has its row and inflated
+        assertNotNull(entry.getRow());
+
+        // THEN inflation callbacks are called
+        verify(mEntryListener, never()).onInflationError(any(), any());
+        verify(mEntryListener).onEntryReinflated(entry);
+
+        // THEN we update the presenter
+        verify(mPresenter).updateNotificationViews();
+    }
+
+    /**
+     * Wait for a certain number of messages to finish before continuing, timing out if they never
+     * occur.
+     *
+     * As part of the inflation pipeline, the main thread is forced to deal with several callbacks
+     * due to the nature of the API used (generally because they're {@link android.os.AsyncTask}
+     * callbacks). In order, these are
+     *
+     * 1) Callback after row inflation. See {@link RowInflaterTask}.
+     * 2) Callback checking if row is system notification. See
+     *    {@link ExpandableNotificationRow#setEntry}
+     * 3) Callback after remote views are created. See
+     *    {@link NotificationContentInflater.AsyncInflationTask}.
+     * 4-6) Callback after each content view is inflated/rebound from remote view. See
+     *      {@link NotificationContentInflater#applyRemoteView} and {@link InflationFlag}.
+     *
+     * Depending on the test, only some of these will be necessary. For example, generally, not
+     * every content view is inflated or the row may not be inflated if one already exists.
+     *
+     * Currently, the burden is on the developer to figure these out until we have a much more
+     * test-friendly way of executing inflation logic (i.e. pass in an executor).
+     */
+    private void waitForMessages(int numMessages) {
+        mHandler.postDelayed(TIMEOUT_RUNNABLE, TIMEOUT_TIME);
+        TestableLooper.get(this).processMessages(numMessages);
+        mHandler.removeCallbacks(TIMEOUT_RUNNABLE);
+    }
+
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
index bbb6723..54c0bde 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
@@ -74,7 +74,6 @@
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
 import com.android.systemui.statusbar.phone.StatusBar;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
-import com.android.systemui.util.Assert;
 
 import org.junit.Before;
 import org.junit.Ignore;
@@ -118,7 +117,7 @@
     @Before
     public void setUp() {
         mTestableLooper = TestableLooper.get(this);
-        Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         mDependency.injectTestDependency(DeviceProvisionedController.class,
                 mDeviceProvisionedController);
         mDependency.injectTestDependency(MetricsLogger.class, mMetricsLogger);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInlineImageResolverTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInlineImageResolverTest.java
new file mode 100644
index 0000000..7f48cd1
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInlineImageResolverTest.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertSame;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.net.Uri;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.IOException;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class NotificationInlineImageResolverTest extends SysuiTestCase {
+
+    NotificationInlineImageResolver mResolver;
+    Bitmap mBitmap;
+    BitmapDrawable mBitmapDrawable;
+    Uri mUri;
+
+    @Before
+    public void setup() {
+        mResolver = spy(new NotificationInlineImageResolver(mContext, null));
+        mBitmap = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888);
+        mBitmapDrawable = new BitmapDrawable(mContext.getResources(), mBitmap);
+        mUri = mock(Uri.class);
+    }
+
+    @Test
+    public void refreshMaxImageSizes() {
+        assertNotEquals("Starts different height", mResolver.mMaxImageHeight, 20);
+        assertNotEquals("Starts different width", mResolver.mMaxImageWidth, 15);
+
+        doReturn(20).when(mResolver).getMaxImageHeight();
+        doReturn(15).when(mResolver).getMaxImageWidth();
+
+        mResolver.updateMaxImageSizes();
+
+        assertEquals("Height matches new config", mResolver.mMaxImageHeight, 20);
+        assertEquals("Width matches new config", mResolver.mMaxImageWidth, 15);
+    }
+
+    @Test
+    public void resolveImage_sizeTooBig() throws IOException {
+        doReturn(mBitmapDrawable).when(mResolver).resolveImageInternal(mUri);
+        mResolver.mMaxImageHeight = 5;
+        mResolver.mMaxImageWidth = 5;
+
+        // original bitmap size is 10x10
+        BitmapDrawable resolved = (BitmapDrawable) mResolver.resolveImage(mUri);
+        Bitmap resolvedBitmap = resolved.getBitmap();
+        assertEquals("Bitmap width reduced", 5, resolvedBitmap.getWidth());
+        assertEquals("Bitmap height reduced", 5, resolvedBitmap.getHeight());
+        assertNotSame("Bitmap replaced", resolvedBitmap, mBitmap);
+    }
+
+    @Test
+    public void resolveImage_sizeOK() throws IOException {
+        doReturn(mBitmapDrawable).when(mResolver).resolveImageInternal(mUri);
+        mResolver.mMaxImageWidth = 15;
+        mResolver.mMaxImageHeight = 15;
+
+        // original bitmap size is 10x10
+        BitmapDrawable resolved = (BitmapDrawable) mResolver.resolveImage(mUri);
+        Bitmap resolvedBitmap = resolved.getBitmap();
+        assertEquals("Bitmap width unchanged", 10, resolvedBitmap.getWidth());
+        assertEquals("Bitmap height unchanged", 10, resolvedBitmap.getHeight());
+        assertSame("Bitmap not replaced", resolvedBitmap, mBitmap);
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java
index 3d9832d..5a89fc4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java
@@ -41,25 +41,27 @@
 import android.view.LayoutInflater;
 import android.widget.RemoteViews;
 
-import com.android.internal.statusbar.IStatusBarService;
 import com.android.systemui.TestableDependency;
 import com.android.systemui.bubbles.BubbleController;
 import com.android.systemui.bubbles.BubblesTestActivity;
+import com.android.systemui.plugins.FalsingManager;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.NotificationMediaManager;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.SmartReplyController;
-import com.android.systemui.statusbar.notification.NotificationEntryListener;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow.ExpansionLogger;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow.OnExpandClickListener;
 import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
+import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
 import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
 import com.android.systemui.statusbar.phone.NotificationGroupManager;
 import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
+import com.android.systemui.statusbar.policy.SmartReplyConstants;
 import com.android.systemui.tests.R;
 
 import org.mockito.ArgumentCaptor;
@@ -89,38 +91,41 @@
     private ExpandableNotificationRow mRow;
     private HeadsUpManagerPhone mHeadsUpManager;
     private final NotifBindPipeline mBindPipeline;
-    private final NotificationEntryListener mBindPipelineEntryListener;
+    private final NotifCollectionListener mBindPipelineEntryListener;
     private final RowContentBindStage mBindStage;
+    private StatusBarStateController mStatusBarStateController;
 
     public NotificationTestHelper(Context context, TestableDependency dependency) {
         mContext = context;
         dependency.injectMockDependency(NotificationMediaManager.class);
         dependency.injectMockDependency(BubbleController.class);
         dependency.injectMockDependency(NotificationShadeWindowController.class);
-        dependency.injectMockDependency(SmartReplyController.class);
-        StatusBarStateController stateController = mock(StatusBarStateController.class);
-        mGroupManager = new NotificationGroupManager(stateController);
-        mHeadsUpManager = new HeadsUpManagerPhone(mContext, stateController,
-                mock(KeyguardBypassController.class));
-        mHeadsUpManager.setUp(null, mGroupManager, null, null);
+        mStatusBarStateController = mock(StatusBarStateController.class);
+        mGroupManager = new NotificationGroupManager(mStatusBarStateController);
+        mHeadsUpManager = new HeadsUpManagerPhone(mContext, mStatusBarStateController,
+                mock(KeyguardBypassController.class), mock(NotificationGroupManager.class),
+                mock(ConfigurationControllerImpl.class));
         mGroupManager.setHeadsUpManager(mHeadsUpManager);
 
-
         NotificationContentInflater contentBinder = new NotificationContentInflater(
                 mock(NotifRemoteViewCache.class),
-                mock(NotificationRemoteInputManager.class));
+                mock(NotificationRemoteInputManager.class),
+                () -> mock(SmartReplyConstants.class),
+                () -> mock(SmartReplyController.class));
         contentBinder.setInflateSynchronously(true);
-        mBindStage = new RowContentBindStage(contentBinder, mock(IStatusBarService.class));
+        mBindStage = new RowContentBindStage(contentBinder,
+                mock(NotifInflationErrorManager.class),
+                mock(RowContentBindStageLogger.class));
 
-        NotificationEntryManager entryManager = mock(NotificationEntryManager.class);
+        CommonNotifCollection collection = mock(CommonNotifCollection.class);
 
-        mBindPipeline = new NotifBindPipeline(entryManager);
+        mBindPipeline = new NotifBindPipeline(collection, mock(NotifBindPipelineLogger.class));
         mBindPipeline.setStage(mBindStage);
 
-        ArgumentCaptor<NotificationEntryListener> entryListenerCaptor =
-                ArgumentCaptor.forClass(NotificationEntryListener.class);
-        verify(entryManager).addNotificationEntryListener(entryListenerCaptor.capture());
-        mBindPipelineEntryListener = entryListenerCaptor.getValue();
+        ArgumentCaptor<NotifCollectionListener> collectionListenerCaptor =
+                ArgumentCaptor.forClass(NotifCollectionListener.class);
+        verify(collection).addCollectionListener(collectionListenerCaptor.capture());
+        mBindPipelineEntryListener = collectionListenerCaptor.getValue();
     }
 
     /**
@@ -199,9 +204,17 @@
     /**
      * Returns an {@link ExpandableNotificationRow} that should be shown as a bubble.
      */
+    public ExpandableNotificationRow createBubbleInGroup()
+            throws Exception {
+        return createBubble(makeBubbleMetadata(null), PKG, true);
+    }
+
+    /**
+     * Returns an {@link ExpandableNotificationRow} that should be shown as a bubble.
+     */
     public ExpandableNotificationRow createBubble()
             throws Exception {
-        return createBubble(makeBubbleMetadata(null), PKG);
+        return createBubble(makeBubbleMetadata(null), PKG, false);
     }
 
     /**
@@ -211,7 +224,7 @@
      */
     public ExpandableNotificationRow createBubble(@Nullable PendingIntent deleteIntent)
             throws Exception {
-        return createBubble(makeBubbleMetadata(deleteIntent), PKG);
+        return createBubble(makeBubbleMetadata(deleteIntent), PKG, false);
     }
 
     /**
@@ -221,8 +234,14 @@
      */
     public ExpandableNotificationRow createBubble(BubbleMetadata bubbleMetadata, String pkg)
             throws Exception {
+        return createBubble(bubbleMetadata, pkg, false);
+    }
+
+    private ExpandableNotificationRow createBubble(BubbleMetadata bubbleMetadata, String pkg,
+            boolean inGroup)
+            throws Exception {
         Notification n = createNotification(false /* isGroupSummary */,
-                null /* groupKey */, bubbleMetadata);
+                inGroup ? GROUP_KEY : null /* groupKey */, bubbleMetadata);
         n.flags |= FLAG_BUBBLE;
         ExpandableNotificationRow row = generateRow(n, pkg, UID, USER_HANDLE,
                 0 /* extraInflationFlags */, IMPORTANCE_HIGH);
@@ -307,6 +326,10 @@
         return notificationBuilder.build();
     }
 
+    public StatusBarStateController getStatusBarStateController() {
+        return mStatusBarStateController;
+    }
+
     private ExpandableNotificationRow generateRow(
             Notification notification,
             String pkg,
@@ -357,7 +380,7 @@
         entry.createIcons(mContext, entry.getSbn());
         row.setEntry(entry);
 
-        mBindPipelineEntryListener.onPendingEntryAdded(entry);
+        mBindPipelineEntryListener.onEntryInit(entry);
         mBindPipeline.manageRow(entry, row);
 
         row.initialize(
@@ -368,7 +391,11 @@
                 mGroupManager,
                 mHeadsUpManager,
                 mBindStage,
-                mock(OnExpandClickListener.class));
+                mock(OnExpandClickListener.class),
+                mock(NotificationMediaManager.class),
+                mock(ExpandableNotificationRow.OnAppOpsClickListener.class),
+                mock(FalsingManager.class),
+                mStatusBarStateController);
         row.setAboveShelfChangedListener(aboveShelf -> { });
         mBindStage.getStageParams(entry).requireContentViews(extraInflationFlags);
         inflateAndWait(entry, mBindStage);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/RowContentBindStageTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/RowContentBindStageTest.java
index 66aa5e1..0f2482c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/RowContentBindStageTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/RowContentBindStageTest.java
@@ -34,7 +34,6 @@
 
 import androidx.test.filters.SmallTest;
 
-import com.android.internal.statusbar.IStatusBarService;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.BindParams;
@@ -61,13 +60,15 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
-        mRowContentBindStage = new RowContentBindStage(mBinder,
-                mock(IStatusBarService.class));
+        mRowContentBindStage = new RowContentBindStage(
+                mBinder,
+                mock(NotifInflationErrorManager.class),
+                mock(RowContentBindStageLogger.class));
         mRowContentBindStage.createStageParams(mEntry);
     }
 
     @Test
-    public void testSetShouldContentViewsBeBound_bindsContent() {
+    public void testRequireContentViews() {
         // WHEN inflation flags are set and pipeline is invalidated.
         final int flags = FLAG_CONTENT_VIEW_CONTRACTED | FLAG_CONTENT_VIEW_EXPANDED;
         RowContentBindParams params = mRowContentBindStage.getStageParams(mEntry);
@@ -85,7 +86,7 @@
     }
 
     @Test
-    public void testSetShouldContentViewsBeBound_unbindsContent() {
+    public void testFreeContentViews() {
         // GIVEN a view with all content bound.
         RowContentBindParams params = mRowContentBindStage.getStageParams(mEntry);
         params.requireContentViews(FLAG_CONTENT_VIEW_ALL);
@@ -100,6 +101,28 @@
     }
 
     @Test
+    public void testRebindAllContentViews() {
+        // GIVEN a view with content bound.
+        RowContentBindParams params = mRowContentBindStage.getStageParams(mEntry);
+        final int flags = FLAG_CONTENT_VIEW_CONTRACTED | FLAG_CONTENT_VIEW_EXPANDED;
+        params.requireContentViews(flags);
+        params.clearDirtyContentViews();
+
+        // WHEN we request rebind and stage executed.
+        params.rebindAllContentViews();
+        mRowContentBindStage.executeStage(mEntry, mRow, (en) -> { });
+
+        // THEN binder binds inflation flags.
+        verify(mBinder).bindContent(
+                eq(mEntry),
+                any(),
+                eq(flags),
+                any(),
+                anyBoolean(),
+                any());
+    }
+
+    @Test
     public void testSetUseLowPriority() {
         // GIVEN a view with all content bound.
         RowContentBindParams params = mRowContentBindStage.getStageParams(mEntry);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCustomViewWrapperTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCustomViewWrapperTest.java
index 0790cb7..b661b28 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCustomViewWrapperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCustomViewWrapperTest.java
@@ -17,7 +17,6 @@
 package com.android.systemui.statusbar.notification.row.wrapper;
 
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 import android.view.View;
 import android.widget.RemoteViews;
@@ -43,7 +42,7 @@
 
     @Before
     public void setUp() throws Exception {
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         mRow = new NotificationTestHelper(mContext, mDependency).createRow();
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapperTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapperTest.java
index 038eff7..69e4f22 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapperTest.java
@@ -26,7 +26,6 @@
 import android.media.session.MediaSession;
 import android.media.session.PlaybackState;
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 import android.view.View;
 import android.widget.RemoteViews;
@@ -64,7 +63,7 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
 
         mDependency.injectTestDependency(MetricsLogger.class, mMetricsLogger);
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapperTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapperTest.java
index 9567f33..830e8d9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapperTest.java
@@ -20,7 +20,6 @@
 
 import android.content.Context;
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 import android.view.View;
 import android.widget.LinearLayout;
@@ -31,7 +30,6 @@
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
 import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
-import com.android.systemui.util.Assert;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -48,7 +46,7 @@
 
     @Before
     public void setup() throws Exception {
-        Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         mView = mock(View.class);
         mRow = new NotificationTestHelper(getContext(), mDependency).createRow();
         mNotificationViewWrapper = new TestableNotificationViewWrapper(mContext, mView, mRow);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java
index 1773175..a2029c7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java
@@ -17,7 +17,6 @@
 package com.android.systemui.statusbar.notification.stack;
 
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 import android.view.NotificationHeaderView;
 import android.view.View;
@@ -44,7 +43,7 @@
 
     @Before
     public void setUp() throws Exception {
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         mNotificationTestHelper = new NotificationTestHelper(mContext, mDependency);
         mGroup = mNotificationTestHelper.createGroup();
         mChildrenContainer = mGroup.getChildrenContainer();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java
index e84f14a..ba2b946 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java
@@ -24,13 +24,11 @@
 import static org.mockito.Mockito.when;
 
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -59,8 +57,6 @@
     private ExpandableNotificationRow mFirst;
     private ExpandableNotificationRow mSecond;
     @Mock
-    private StatusBarStateController mStatusBarStateController;
-    @Mock
     private KeyguardBypassController mBypassController;
 
     @Before
@@ -69,7 +65,7 @@
         mRoundnessManager = new NotificationRoundnessManager(
                 mBypassController,
                 new NotificationSectionsFeatureManager(new DeviceConfigProxy(), mContext));
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         NotificationTestHelper testHelper = new NotificationTestHelper(getContext(), mDependency);
         mFirst = testHelper.createRow();
         mFirst.setHeadsUpAnimatingAwayListener(animatingAway
@@ -150,13 +146,12 @@
                 createSection(mFirst, mSecond),
                 createSection(null, null)
         });
-        ExpandableNotificationRow row = new NotificationTestHelper(getContext(), mDependency)
-                .createRow();
+        NotificationTestHelper testHelper = new NotificationTestHelper(getContext(), mDependency);
+        ExpandableNotificationRow row = testHelper.createRow();
         NotificationEntry entry = mock(NotificationEntry.class);
         when(entry.getRow()).thenReturn(row);
 
-        when(mStatusBarStateController.isDozing()).thenReturn(true);
-        row.setStatusBarStateController(mStatusBarStateController);
+        when(testHelper.getStatusBarStateController().isDozing()).thenReturn(true);
         row.setHeadsUp(true);
         mRoundnessManager.onHeadsUpStateChanged(entry, true);
         Assert.assertEquals(1f, row.getCurrentBottomRoundness(), 0.0f);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
index 70d76f0..0cb6585 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
@@ -65,16 +65,18 @@
 import com.android.systemui.statusbar.notification.DynamicPrivacyController;
 import com.android.systemui.statusbar.notification.ForegroundServiceDismissalFeatureController;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.NotificationEntryManagerLogger;
 import com.android.systemui.statusbar.notification.NotificationFilter;
 import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager;
 import com.android.systemui.statusbar.notification.TestableNotificationEntryManager;
 import com.android.systemui.statusbar.notification.VisualStabilityManager;
+import com.android.systemui.statusbar.notification.collection.NotifCollection;
+import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
 import com.android.systemui.statusbar.notification.collection.NotificationRankingManager;
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
 import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
-import com.android.systemui.statusbar.notification.logging.NotifLog;
 import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
 import com.android.systemui.statusbar.notification.row.FooterView;
@@ -133,6 +135,7 @@
     @Mock private NotificationSectionsManager mNotificationSectionsManager;
     @Mock private NotificationSection mNotificationSection;
     @Mock private NotificationLockscreenUserManager mLockscreenUserManager;
+    @Mock private FeatureFlags mFeatureFlags;
     private UserChangedListener mUserChangedListener;
     private TestableNotificationEntryManager mEntryManager;
     private int mOriginalInterruptionModelSetting;
@@ -141,7 +144,7 @@
     @Before
     @UiThreadTest
     public void setUp() throws Exception {
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
 
         mOriginalInterruptionModelSetting = Settings.Secure.getInt(mContext.getContentResolver(),
                 NOTIFICATION_NEW_INTERRUPTION_MODEL, 0);
@@ -163,14 +166,14 @@
         ArgumentCaptor<UserChangedListener> userChangedCaptor = ArgumentCaptor
                 .forClass(UserChangedListener.class);
         mEntryManager = new TestableNotificationEntryManager(
-                mock(NotifLog.class),
+                mock(NotificationEntryManagerLogger.class),
                 mock(NotificationGroupManager.class),
                 new NotificationRankingManager(
                         () -> mock(NotificationMediaManager.class),
                         mGroupManager,
                         mHeadsUpManager,
                         mock(NotificationFilter.class),
-                        mock(NotifLog.class),
+                        mock(NotificationEntryManagerLogger.class),
                         mock(NotificationSectionsFeatureManager.class),
                         mock(PeopleNotificationIdentifier.class),
                         mock(HighPriorityProvider.class)
@@ -182,9 +185,8 @@
                 mock(LeakDetector.class),
                 mock(ForegroundServiceDismissalFeatureController.class)
         );
-        mDependency.injectTestDependency(NotificationEntryManager.class, mEntryManager);
-        mEntryManager.setUpForTest(mock(NotificationPresenter.class), null, mHeadsUpManager);
-
+        mEntryManager.setUpForTest(mock(NotificationPresenter.class));
+        when(mFeatureFlags.isNewNotifPipelineRenderingEnabled()).thenReturn(false);
 
         NotificationShelf notificationShelf = mock(NotificationShelf.class);
         when(mNotificationSectionsManager.createSectionsForBuckets()).thenReturn(
@@ -208,7 +210,11 @@
                 mZenModeController,
                 mNotificationSectionsManager,
                 mock(ForegroundServiceSectionController.class),
-                mock(ForegroundServiceDismissalFeatureController.class)
+                mock(ForegroundServiceDismissalFeatureController.class),
+                mFeatureFlags,
+                mock(NotifPipeline.class),
+                mEntryManager,
+                mock(NotifCollection.class)
         );
         verify(mLockscreenUserManager).addUserChangedListener(userChangedCaptor.capture());
         mUserChangedListener = userChangedCaptor.getValue();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
index f71d0fc..a74657e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
@@ -23,7 +23,6 @@
 import static org.mockito.Mockito.when;
 
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
 import android.view.View;
 import android.widget.TextView;
@@ -69,7 +68,7 @@
 
     @Before
     public void setUp() throws Exception {
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         NotificationTestHelper testHelper = new NotificationTestHelper(getContext(), mDependency);
         mFirst = testHelper.createRow();
         mDependency.injectTestDependency(DarkIconDispatcher.class, mDarkIconDispatcher);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java
index 50d8bf0b0..6d642ec 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java
@@ -62,16 +62,21 @@
     @Mock private StatusBar mBar;
     @Mock private StatusBarStateController mStatusBarStateController;
     @Mock private KeyguardBypassController mBypassController;
+    @Mock private ConfigurationControllerImpl mConfigurationController;
     private boolean mLivesPastNormalTime;
 
     private final class TestableHeadsUpManagerPhone extends HeadsUpManagerPhone {
-        TestableHeadsUpManagerPhone(Context context, View notificationShadeWindowView,
-                NotificationGroupManager groupManager, StatusBar bar,
+        TestableHeadsUpManagerPhone(
+                Context context,
+                NotificationGroupManager groupManager,
                 VisualStabilityManager vsManager,
                 StatusBarStateController statusBarStateController,
-                KeyguardBypassController keyguardBypassController) {
-            super(context, statusBarStateController, keyguardBypassController);
-            setUp(notificationShadeWindowView, groupManager, bar, vsManager);
+                KeyguardBypassController keyguardBypassController,
+                ConfigurationController configurationController
+        ) {
+            super(context, statusBarStateController, keyguardBypassController,
+                    groupManager, configurationController);
+            setup(vsManager);
             mMinimumDisplayTime = TEST_MINIMUM_DISPLAY_TIME;
             mAutoDismissNotificationDecay = TEST_AUTO_DISMISS_TIME;
         }
@@ -91,8 +96,8 @@
         mDependency.injectMockDependency(BubbleController.class);
         mDependency.injectMockDependency(NotificationShadeWindowController.class);
         mDependency.injectMockDependency(ConfigurationController.class);
-        mHeadsUpManager = new TestableHeadsUpManagerPhone(mContext, mNotificationShadeWindowView,
-                mGroupManager, mBar, mVSManager, mStatusBarStateController, mBypassController);
+        mHeadsUpManager = new TestableHeadsUpManagerPhone(mContext, mGroupManager, mVSManager,
+                mStatusBarStateController, mBypassController, mConfigurationController);
         super.setUp();
         mHeadsUpManager.mHandler = mTestHandler;
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
index 67b8e07..35971bd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
@@ -96,7 +96,7 @@
 
     @Before
     public void setup() {
-        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         MockitoAnnotations.initMocks(this);
         mDependency.injectTestDependency(KeyguardUpdateMonitor.class, mKeyguardUpdateMonitor);
         mDependency.injectTestDependency(KeyguardSecurityModel.class, mKeyguardSecurityModel);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
index 5fb7159..13bf38c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
@@ -138,6 +138,8 @@
     @Mock
     private NotificationEntryManager mNotificationEntryManager;
     @Mock
+    private StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
+    @Mock
     private KeyguardStateController mKeyguardStateController;
     @Mock
     private DozeLog mDozeLog;
@@ -221,7 +223,7 @@
                 mDozeParameters, mCommandQueue, mVibratorHelper,
                 mLatencyTracker, mPowerManager, mAccessibilityManager, 0, mUpdateMonitor,
                 mMetricsLogger, mActivityManager, mZenModeController, mConfigurationController,
-                mFlingAnimationUtilsBuilder);
+                mFlingAnimationUtilsBuilder, mStatusBarTouchableRegionManager);
         mNotificationPanelViewController.initDependencies(mStatusBar, mGroupManager,
                 mNotificationShelf, mNotificationAreaController, mScrimController);
         mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerTest.java
index 40d3395..2782f3d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerTest.java
@@ -32,9 +32,9 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.colorextraction.ColorExtractor;
+import com.android.systemui.DumpController;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.colorextraction.SysuiColorExtractor;
-import com.android.systemui.statusbar.SuperStatusBarViewFactory;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 
@@ -52,14 +52,14 @@
 
     @Mock private WindowManager mWindowManager;
     @Mock private DozeParameters mDozeParameters;
-    @Mock private NotificationShadeWindowView mStatusBarView;
+    @Mock private NotificationShadeWindowView mNotificationShadeWindowView;
     @Mock private IActivityManager mActivityManager;
     @Mock private SysuiStatusBarStateController mStatusBarStateController;
     @Mock private ConfigurationController mConfigurationController;
     @Mock private KeyguardBypassController mKeyguardBypassController;
     @Mock private SysuiColorExtractor mColorExtractor;
     @Mock ColorExtractor.GradientColors mGradientColors;
-    @Mock private SuperStatusBarViewFactory mSuperStatusBarViewFactory;
+    @Mock private DumpController mDumpController;
 
     private NotificationShadeWindowController mNotificationShadeWindowController;
 
@@ -68,13 +68,12 @@
         MockitoAnnotations.initMocks(this);
         when(mDozeParameters.getAlwaysOn()).thenReturn(true);
         when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);
-        when(mSuperStatusBarViewFactory.getNotificationShadeWindowView())
-                .thenReturn(mStatusBarView);
 
         mNotificationShadeWindowController = new NotificationShadeWindowController(mContext,
                 mWindowManager, mActivityManager, mDozeParameters, mStatusBarStateController,
                 mConfigurationController, mKeyguardBypassController, mColorExtractor,
-                mSuperStatusBarViewFactory);
+                mDumpController);
+        mNotificationShadeWindowController.setNotificationShadeView(mNotificationShadeWindowView);
 
         mNotificationShadeWindowController.attach();
     }
@@ -104,7 +103,7 @@
 
     @Test
     public void testAdd_updatesVisibilityFlags() {
-        verify(mStatusBarView).setSystemUiVisibility(anyInt());
+        verify(mNotificationShadeWindowView).setSystemUiVisibility(anyInt());
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java
index 8936a2d..e917c93 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java
@@ -38,7 +38,7 @@
 import com.android.systemui.statusbar.DragDownHelper;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.PulseExpansionHandler;
-import com.android.systemui.statusbar.StatusBarWindowBlurController;
+import com.android.systemui.statusbar.NotificationShadeWindowBlurController;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.notification.DynamicPrivacyController;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
@@ -80,7 +80,7 @@
     @Mock private DockManager mDockManager;
     @Mock private NotificationPanelViewController mNotificationPanelViewController;
     @Mock private NotificationStackScrollLayout mNotificationStackScrollLayout;
-    @Mock private StatusBarWindowBlurController mStatusBarWindowBlurController;
+    @Mock private NotificationShadeWindowBlurController mNotificationShadeWindowBlurController;
 
     @Before
     public void setUp() {
@@ -114,7 +114,7 @@
                 new CommandQueue(mContext),
                 mShadeController,
                 mDockManager,
-                mStatusBarWindowBlurController,
+                mNotificationShadeWindowBlurController,
                 mView,
                 mNotificationPanelViewController);
         mController.setupExpandedStatusBar();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
index 008a349..2e6fbe7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
@@ -521,10 +521,10 @@
         Assert.assertEquals(ScrimController.TRANSPARENT,
                 mScrimInFront.getViewAlpha(), 0.0f);
         // Back scrim should be visible
-        Assert.assertEquals(ScrimController.GRADIENT_SCRIM_ALPHA_BUSY,
+        Assert.assertEquals(ScrimController.BUSY_SCRIM_ALPHA,
                 mScrimBehind.getViewAlpha(), 0.0f);
         // Bubble scrim should be visible
-        Assert.assertEquals(ScrimController.GRADIENT_SCRIM_ALPHA_BUSY,
+        Assert.assertEquals(ScrimController.BUSY_SCRIM_ALPHA,
                 mScrimBehind.getViewAlpha(), 0.0f);
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
index 5027610..1e4df27 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
@@ -58,6 +58,7 @@
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.FeatureFlags;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationPresenter;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
@@ -67,6 +68,8 @@
 import com.android.systemui.statusbar.notification.NotificationActivityStarter;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
+import com.android.systemui.statusbar.notification.collection.NotifCollection;
+import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
 import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
@@ -114,6 +117,12 @@
     private BubbleController mBubbleController;
     @Mock
     private ShadeControllerImpl mShadeController;
+    @Mock
+    private FeatureFlags mFeatureFlags;
+    @Mock
+    private NotifPipeline mNotifPipeline;
+    @Mock
+    private NotifCollection mNotifCollection;
 
     @Mock
     private ActivityIntentHelper mActivityIntentHelper;
@@ -162,6 +171,7 @@
         mActiveNotifications.add(mBubbleNotificationRow.getEntry());
         when(mEntryManager.getVisibleNotifications()).thenReturn(mActiveNotifications);
         when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE);
+        when(mFeatureFlags.isNewNotifPipelineRenderingEnabled()).thenReturn(false);
 
         mNotificationActivityStarter = (new StatusBarNotificationActivityStarter.Builder(
                 getContext(), mock(CommandQueue.class), () -> mAssistManager,
@@ -175,11 +185,12 @@
                 mKeyguardStateController,
                 mock(NotificationInterruptionStateProvider.class), mock(MetricsLogger.class),
                 mock(LockPatternUtils.class), mHandler, mHandler, mUiBgExecutor,
-                mActivityIntentHelper, mBubbleController, mShadeController))
+                mActivityIntentHelper, mBubbleController, mShadeController, mFeatureFlags,
+                mNotifPipeline, mNotifCollection)
                 .setStatusBar(mStatusBar)
                 .setNotificationPanelViewController(mock(NotificationPanelViewController.class))
                 .setNotificationPresenter(mock(NotificationPresenter.class))
-                .setActivityLaunchAnimator(mock(ActivityLaunchAnimator.class))
+                .setActivityLaunchAnimator(mock(ActivityLaunchAnimator.class)))
         .build();
 
         // set up dismissKeyguardThenExecute to synchronously invoke the OnDismissAction arg
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
index db17a6e..d81b8c2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
@@ -50,6 +50,7 @@
 import android.os.Binder;
 import android.os.Handler;
 import android.os.IPowerManager;
+import android.os.IThermalService;
 import android.os.Looper;
 import android.os.PowerManager;
 import android.os.RemoteException;
@@ -236,6 +237,7 @@
     @Mock private LightsOutNotifController mLightsOutNotifController;
     @Mock private ViewMediatorCallback mViewMediatorCallback;
     @Mock private DismissCallbackRegistry mDismissCallbackRegistry;
+    @Mock private StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
     @Mock private ScreenPinningRequest mScreenPinningRequest;
     @Mock private LockscreenLockIconController mLockscreenLockIconController;
     @Mock private StatusBarNotificationActivityStarter.Builder
@@ -255,7 +257,8 @@
         mDependency.injectTestDependency(NotificationFilter.class, mNotificationFilter);
 
         IPowerManager powerManagerService = mock(IPowerManager.class);
-        mPowerManager = new PowerManager(mContext, powerManagerService,
+        IThermalService thermalService = mock(IThermalService.class);
+        mPowerManager = new PowerManager(mContext, powerManagerService, thermalService,
                 Handler.createAsync(Looper.myLooper()));
 
         mNotificationInterruptionStateProvider =
@@ -397,7 +400,8 @@
                 mKeyguardDismissUtil,
                 mExtensionController,
                 mUserInfoControllerImpl,
-                mDismissCallbackRegistry);
+                mDismissCallbackRegistry,
+                mStatusBarTouchableRegionManager);
 
         when(mNotificationShadeWindowView.findViewById(R.id.lock_icon_container)).thenReturn(
                 mLockIconContainer);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java
index 85f6033..18e7840 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java
@@ -115,15 +115,16 @@
         IconState qs = new IconState(true, 1, "");
         boolean in = true;
         boolean out = true;
-        String typeDescription = "Test 1";
-        String description = "Test 2";
+        CharSequence typeDescription = "Test 1";
+        CharSequence typeDescriptionHtml = "<b>Test 1</b>";
+        CharSequence description = "Test 2";
         int type = TelephonyIcons.ICON_1X;
         int qsType = TelephonyIcons.ICON_1X;
         boolean wide = true;
         int subId = 5;
         boolean roaming = true;
         mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, typeDescription,
-                description, wide, subId, roaming);
+                typeDescriptionHtml, description, wide, subId, roaming);
         waitForCallbacks();
 
         ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class);
@@ -132,14 +133,16 @@
         ArgumentCaptor<Integer> qsTypeIconArg = ArgumentCaptor.forClass(Integer.class);
         ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
         ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
-        ArgumentCaptor<String> typeContentArg = ArgumentCaptor.forClass(String.class);
-        ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class);
+        ArgumentCaptor<CharSequence> typeContentArg = ArgumentCaptor.forClass(CharSequence.class);
+        ArgumentCaptor<CharSequence> typeContentHtmlArg =
+                ArgumentCaptor.forClass(CharSequence.class);
+        ArgumentCaptor<CharSequence> descArg = ArgumentCaptor.forClass(CharSequence.class);
         ArgumentCaptor<Boolean> wideArg = ArgumentCaptor.forClass(Boolean.class);
         ArgumentCaptor<Integer> subIdArg = ArgumentCaptor.forClass(Integer.class);
         Mockito.verify(mSignalCallback).setMobileDataIndicators(statusArg.capture(),
                 qsArg.capture(), typeIconArg.capture(), qsTypeIconArg.capture(), inArg.capture(),
-                outArg.capture(), typeContentArg.capture(), descArg.capture(), wideArg.capture(),
-                subIdArg.capture(), eq(roaming));
+                outArg.capture(), typeContentArg.capture(), typeContentHtmlArg.capture(),
+                descArg.capture(), wideArg.capture(), subIdArg.capture(), eq(roaming));
         assertEquals(status, statusArg.getValue());
         assertEquals(qs, qsArg.getValue());
         assertEquals(type, (int) typeIconArg.getValue());
@@ -147,6 +150,7 @@
         assertEquals(in, (boolean) inArg.getValue());
         assertEquals(out, (boolean) outArg.getValue());
         assertEquals(typeDescription, typeContentArg.getValue());
+        assertEquals(typeDescriptionHtml, typeContentHtmlArg.getValue());
         assertEquals(description, descArg.getValue());
         assertEquals(wide, (boolean) wideArg.getValue());
         assertEquals(subId, (int) subIdArg.getValue());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java
index 631c580..cd91f22 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java
@@ -16,6 +16,8 @@
 
 package com.android.systemui.statusbar.policy;
 
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
@@ -24,10 +26,12 @@
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
-import android.net.ConnectivityManager;
+import android.net.TetheringManager;
 import android.net.wifi.WifiManager;
 import android.os.Handler;
+import android.os.UserManager;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 
@@ -38,11 +42,14 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.mockito.invocation.InvocationOnMock;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.concurrent.Executor;
 
 @SmallTest
@@ -51,13 +58,19 @@
 public class HotspotControllerImplTest extends SysuiTestCase {
 
     @Mock
-    private ConnectivityManager mConnectivityManager;
+    private TetheringManager mTetheringManager;
     @Mock
     private WifiManager mWifiManager;
     @Mock
+    private UserManager mUserManager;
+    @Mock
     private HotspotController.Callback mCallback1;
     @Mock
     private HotspotController.Callback mCallback2;
+    @Mock
+    private TetheringManager.TetheringInterfaceRegexps mTetheringInterfaceRegexps;
+    @Captor
+    private ArgumentCaptor<TetheringManager.TetheringEventCallback> mTetheringCallbackCaptor;
     private HotspotControllerImpl mController;
     private TestableLooper mLooper;
 
@@ -66,8 +79,13 @@
         MockitoAnnotations.initMocks(this);
         mLooper = TestableLooper.get(this);
 
-        mContext.addMockSystemService(ConnectivityManager.class, mConnectivityManager);
         mContext.addMockSystemService(WifiManager.class, mWifiManager);
+        mContext.addMockSystemService(TetheringManager.class, mTetheringManager);
+        mContext.addMockSystemService(UserManager.class, mUserManager);
+
+        when(mUserManager.isUserAdmin(anyInt())).thenReturn(true);
+        when(mTetheringInterfaceRegexps.getTetherableWifiRegexs()).thenReturn(
+                Collections.singletonList("test"));
 
         doAnswer((InvocationOnMock invocation) -> {
             ((WifiManager.SoftApCallback) invocation.getArgument(1))
@@ -76,7 +94,11 @@
         }).when(mWifiManager).registerSoftApCallback(any(Executor.class),
                 any(WifiManager.SoftApCallback.class));
 
-        mController = new HotspotControllerImpl(mContext, new Handler(mLooper.getLooper()));
+        Handler handler = new Handler(mLooper.getLooper());
+
+        mController = new HotspotControllerImpl(mContext, handler, handler);
+        verify(mTetheringManager)
+                .registerTetheringEventCallback(any(), mTetheringCallbackCaptor.capture());
     }
 
     @Test
@@ -117,4 +139,28 @@
         verify(mWifiManager, never()).unregisterSoftApCallback(any());
     }
 
+    @Test
+    public void testDefault_hotspotNotSupported() {
+        assertFalse(mController.isHotspotSupported());
+    }
+
+    @Test
+    public void testHotspotSupported_rightConditions() {
+        mTetheringCallbackCaptor.getValue().onTetheringSupported(true);
+        mTetheringCallbackCaptor.getValue()
+                .onTetherableInterfaceRegexpsChanged(mTetheringInterfaceRegexps);
+
+        assertTrue(mController.isHotspotSupported());
+    }
+
+    @Test
+    public void testHotspotSupported_callbackCalledOnChange() {
+        mController.addCallback(mCallback1);
+        mTetheringCallbackCaptor.getValue().onTetheringSupported(true);
+        mTetheringCallbackCaptor.getValue()
+                .onTetherableInterfaceRegexpsChanged(mTetheringInterfaceRegexps);
+
+        verify(mCallback1).onHotspotAvailabilityChanged(true);
+    }
+
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
index 294d546..a0d551c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
@@ -45,6 +45,7 @@
 import android.provider.Settings.Global;
 import android.telephony.CdmaEriInformation;
 import android.telephony.CellSignalStrength;
+import android.telephony.DisplayInfo;
 import android.telephony.NetworkRegistrationInfo;
 import android.telephony.PhoneStateListener;
 import android.telephony.ServiceState;
@@ -96,6 +97,7 @@
     protected PhoneStateListener mPhoneStateListener;
     protected SignalStrength mSignalStrength;
     protected ServiceState mServiceState;
+    protected DisplayInfo mDisplayInfo;
     protected NetworkRegistrationInfo mFakeRegInfo;
     protected ConnectivityManager mMockCm;
     protected WifiManager mMockWm;
@@ -159,6 +161,7 @@
 
         mSignalStrength = mock(SignalStrength.class);
         mServiceState = mock(ServiceState.class);
+        mDisplayInfo = mock(DisplayInfo.class);
 
         mFakeRegInfo = new NetworkRegistrationInfo.Builder()
                 .setTransportType(TRANSPORT_TYPE_WWAN)
@@ -167,6 +170,9 @@
                 .build();
         doReturn(mFakeRegInfo).when(mServiceState)
                 .getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN);
+        doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mDisplayInfo).getNetworkType();
+        doReturn(DisplayInfo.OVERRIDE_NETWORK_TYPE_NONE).when(mDisplayInfo)
+                .getOverrideNetworkType();
 
         mEriInformation = new CdmaEriInformation(CdmaEriInformation.ERI_OFF,
                 CdmaEriInformation.ERI_ICON_MODE_NORMAL);
@@ -260,33 +266,6 @@
             NetworkCapabilities.TRANSPORT_CELLULAR, true, true);
     }
 
-    public void setupDefaultNr5GIconConfiguration() {
-        NetworkControllerImpl.Config.add5GIconMapping("connected_mmwave:5g_plus", mConfig);
-        NetworkControllerImpl.Config.add5GIconMapping("connected:5g", mConfig);
-    }
-
-    public void setupNr5GIconConfigurationForNotRestrictedRrcCon() {
-        NetworkControllerImpl.Config.add5GIconMapping("connected_mmwave:5g_plus", mConfig);
-        NetworkControllerImpl.Config.add5GIconMapping("connected:5g_plus", mConfig);
-        NetworkControllerImpl.Config.add5GIconMapping("not_restricted_rrc_con:5g", mConfig);
-    }
-
-    public void setupNr5GIconConfigurationForNotRestrictedRrcIdle() {
-        NetworkControllerImpl.Config.add5GIconMapping("connected_mmwave:5g_plus", mConfig);
-        NetworkControllerImpl.Config.add5GIconMapping("connected:5g_plus", mConfig);
-        NetworkControllerImpl.Config.add5GIconMapping("not_restricted_rrc_idle:5g", mConfig);
-    }
-
-    public void setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds() {
-        final int enableDisplayGraceTimeSec = 30;
-        NetworkControllerImpl.Config.setDisplayGraceTime(enableDisplayGraceTimeSec, mConfig);
-    }
-
-    public void setupDefaultNr5GIconDisplayGracePeriodTime_disabled() {
-        final int disableDisplayGraceTimeSec = 0;
-        NetworkControllerImpl.Config.setDisplayGraceTime(disableDisplayGraceTimeSec, mConfig);
-    }
-
     public void setConnectivityViaBroadcast(
         int networkType, boolean validated, boolean isConnected) {
         setConnectivityCommon(networkType, validated, isConnected);
@@ -369,6 +348,7 @@
     protected void updateServiceState() {
         Log.d(TAG, "Sending Service State: " + mServiceState);
         mPhoneStateListener.onServiceStateChanged(mServiceState);
+        mPhoneStateListener.onDisplayInfoChanged(mDisplayInfo);
     }
 
     public void updateCallState(int state) {
@@ -384,6 +364,7 @@
                 .build();
         when(mServiceState.getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN))
                 .thenReturn(fakeRegInfo);
+        when(mDisplayInfo.getNetworkType()).thenReturn(dataNetType);
         mPhoneStateListener.onDataConnectionStateChanged(dataState, dataNetType);
     }
 
@@ -413,7 +394,8 @@
                     iconArg.capture(),
                     anyInt(),
                     typeIconArg.capture(), dataInArg.capture(), dataOutArg.capture(),
-                    anyString(), anyString(), anyBoolean(), anyInt(), anyBoolean());
+                    any(CharSequence.class), any(CharSequence.class), any(CharSequence.class),
+                    anyBoolean(), anyInt(), anyBoolean());
         IconState iconState = iconArg.getValue();
         int state = SignalDrawable.getState(icon, CellSignalStrength.getNumSignalStrengthLevels(),
                 false);
@@ -445,8 +427,9 @@
                 iconArg.capture(),
                 any(),
                 typeIconArg.capture(),
-                anyInt(), anyBoolean(), anyBoolean(), anyString(), anyString(), anyBoolean(),
-                anyInt(), eq(roaming));
+                anyInt(), anyBoolean(), anyBoolean(),
+                any(CharSequence.class), any(CharSequence.class), any(CharSequence.class),
+                anyBoolean(), anyInt(), eq(roaming));
         IconState iconState = iconArg.getValue();
 
         int state = icon == -1 ? 0
@@ -468,19 +451,23 @@
             boolean cutOut) {
         verifyLastMobileDataIndicators(
                 visible, icon, typeIcon, qsVisible, qsIcon, qsTypeIcon, dataIn, dataOut, cutOut,
-                null);
+                null, null);
     }
 
     protected void verifyLastMobileDataIndicators(boolean visible, int icon, int typeIcon,
             boolean qsVisible, int qsIcon, int qsTypeIcon, boolean dataIn, boolean dataOut,
-            boolean cutOut, String typeContentDescription) {
+            boolean cutOut, CharSequence typeContentDescription,
+            CharSequence typeContentDescriptionHtml) {
         ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
         ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
         ArgumentCaptor<IconState> qsIconArg = ArgumentCaptor.forClass(IconState.class);
         ArgumentCaptor<Integer> qsTypeIconArg = ArgumentCaptor.forClass(Integer.class);
         ArgumentCaptor<Boolean> dataInArg = ArgumentCaptor.forClass(Boolean.class);
         ArgumentCaptor<Boolean> dataOutArg = ArgumentCaptor.forClass(Boolean.class);
-        ArgumentCaptor<String> typeContentDescriptionArg = ArgumentCaptor.forClass(String.class);
+        ArgumentCaptor<CharSequence> typeContentDescriptionArg =
+                ArgumentCaptor.forClass(CharSequence.class);
+        ArgumentCaptor<CharSequence> typeContentDescriptionHtmlArg =
+                ArgumentCaptor.forClass(CharSequence.class);
 
         Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setMobileDataIndicators(
                 iconArg.capture(),
@@ -490,6 +477,7 @@
                 dataInArg.capture(),
                 dataOutArg.capture(),
                 typeContentDescriptionArg.capture(),
+                typeContentDescriptionHtmlArg.capture(),
                 anyString(), anyBoolean(), anyInt(), anyBoolean());
 
         IconState iconState = iconArg.getValue();
@@ -516,6 +504,10 @@
             assertEquals("Type content description", typeContentDescription,
                     typeContentDescriptionArg.getValue());
         }
+        if (typeContentDescriptionHtml != null) { // Only check if it was provided
+            assertEquals("Type content description (html)", typeContentDescriptionHtml,
+                    typeContentDescriptionHtmlArg.getValue());
+        }
     }
 
     protected void assertNetworkNameEquals(String expected) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
index 1eb5939..3eb0c44 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
@@ -3,17 +3,13 @@
 import static android.telephony.AccessNetworkConstants.TRANSPORT_TYPE_WWAN;
 import static android.telephony.NetworkRegistrationInfo.DOMAIN_PS;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.anyInt;
-import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import android.net.NetworkCapabilities;
 import android.os.Looper;
 import android.telephony.NetworkRegistrationInfo;
-import android.telephony.ServiceState;
 import android.telephony.TelephonyManager;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.testing.AndroidTestingRunner;
@@ -24,7 +20,6 @@
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Mockito;
 
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
@@ -132,7 +127,7 @@
         // Verify that a SignalDrawable with a cut out is used to display data disabled.
         verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
                 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
-                false, true, NO_DATA_STRING);
+                false, true, NO_DATA_STRING, NO_DATA_STRING);
     }
 
     @Test
@@ -146,7 +141,7 @@
         // Verify that a SignalDrawable with a cut out is used to display data disabled.
         verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
                 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
-                false, true, NO_DATA_STRING);
+                false, true, NO_DATA_STRING, NO_DATA_STRING);
     }
 
     @Test
@@ -161,7 +156,7 @@
         // Verify that a SignalDrawable with a cut out is used to display data disabled.
         verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
                 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
-                false, false, NOT_DEFAULT_DATA_STRING);
+                false, false, NOT_DEFAULT_DATA_STRING, NOT_DEFAULT_DATA_STRING);
     }
 
     @Test
@@ -176,255 +171,7 @@
         // Verify that a SignalDrawable with a cut out is used to display data disabled.
         verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
                 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
-                false, false, NOT_DEFAULT_DATA_STRING);
-    }
-
-    @Test
-    public void testNr5GIcon_NrNotRestrictedRrcCon_show5GIcon() {
-        setupNr5GIconConfigurationForNotRestrictedRrcCon();
-        setupDefaultSignal();
-        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        updateDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT);
-        ServiceState ss = Mockito.mock(ServiceState.class);
-        setNrState(ss, NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED);
-        mPhoneStateListener.onServiceStateChanged(ss);
-
-        verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, TelephonyIcons.ICON_5G,
-                true, DEFAULT_QS_SIGNAL_STRENGTH, TelephonyIcons.ICON_5G, true, true);
-    }
-
-    @Test
-    public void testNr5GIcon_NrNotRestrictedRrcIdle_show5GIcon() {
-        setupNr5GIconConfigurationForNotRestrictedRrcIdle();
-        setupDefaultSignal();
-        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        updateDataActivity(TelephonyManager.DATA_ACTIVITY_DORMANT);
-        ServiceState ss = Mockito.mock(ServiceState.class);
-        setNrState(ss, NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED);
-        mPhoneStateListener.onServiceStateChanged(ss);
-
-        verifyDataIndicators(TelephonyIcons.ICON_5G);
-    }
-
-    @Test
-    public void testNr5GIcon_NrConnectedWithoutMMWave_show5GIcon() {
-        setupDefaultNr5GIconConfiguration();
-        setupDefaultSignal();
-        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        ServiceState ss = Mockito.mock(ServiceState.class);
-        setNrState(ss, NetworkRegistrationInfo.NR_STATE_CONNECTED);
-        doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
-        mPhoneStateListener.onServiceStateChanged(ss);
-
-        verifyDataIndicators(TelephonyIcons.ICON_5G);
-    }
-
-    @Test
-    public void testNr5GIcon_NrConnectedWithMMWave_show5GPlusIcon() {
-        setupDefaultNr5GIconConfiguration();
-        setupDefaultSignal();
-        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        ServiceState ss = Mockito.mock(ServiceState.class);
-        setNrState(ss, NetworkRegistrationInfo.NR_STATE_CONNECTED);
-        doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(ss).getNrFrequencyRange();
-        mPhoneStateListener.onServiceStateChanged(ss);
-
-        verifyDataIndicators(TelephonyIcons.ICON_5G_PLUS);
-    }
-
-    @Test
-    public void testNr5GIcon_NrRestricted_showLteIcon() {
-        setupDefaultNr5GIconConfiguration();
-        setupDefaultSignal();
-        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        ServiceState ss = Mockito.mock(ServiceState.class);
-        setNrState(ss, NetworkRegistrationInfo.NR_STATE_RESTRICTED);
-        mPhoneStateListener.onServiceStateChanged(mServiceState);
-
-        verifyDataIndicators(TelephonyIcons.ICON_LTE);
-    }
-
-    @Test
-    public void testNr5GIcon_displayGracePeriodTime_enabled() {
-        setupDefaultNr5GIconConfiguration();
-        setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
-        setupDefaultSignal();
-        mNetworkController.handleConfigurationChanged();
-        mPhoneStateListener.onServiceStateChanged(mServiceState);
-
-        ServiceState ss = Mockito.mock(ServiceState.class);
-        // While nrIconDisplayGracePeriodMs > 0 & is Nr5G, mIsShowingIconGracefully should be true
-        setNrState(ss, NetworkRegistrationInfo.NR_STATE_CONNECTED);
-        doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        mPhoneStateListener.onServiceStateChanged(ss);
-
-        assertTrue(mConfig.nrIconDisplayGracePeriodMs > 0);
-        assertTrue(mMobileSignalController.mIsShowingIconGracefully);
-    }
-
-    @Test
-    public void testNr5GIcon_displayGracePeriodTime_disabled() {
-        setupDefaultNr5GIconConfiguration();
-        setupDefaultNr5GIconDisplayGracePeriodTime_disabled();
-        setupDefaultSignal();
-
-        assertTrue(mConfig.nrIconDisplayGracePeriodMs == 0);
-
-        // While nrIconDisplayGracePeriodMs <= 0, mIsShowingIconGracefully should be false
-        setNrState(mServiceState, NetworkRegistrationInfo.NR_STATE_CONNECTED);
-        doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(mServiceState).getNrFrequencyRange();
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-
-        assertFalse(mMobileSignalController.mIsShowingIconGracefully);
-    }
-
-    @Test
-    public void testNr5GIcon_enableDisplayGracePeriodTime_showIconGracefully() {
-        setupDefaultNr5GIconConfiguration();
-        setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
-        setupDefaultSignal();
-        mNetworkController.handleConfigurationChanged();
-        mPhoneStateListener.onServiceStateChanged(mServiceState);
-
-        ServiceState ss = Mockito.mock(ServiceState.class);
-        setNrState(ss, NetworkRegistrationInfo.NR_STATE_CONNECTED);
-        doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        mPhoneStateListener.onServiceStateChanged(ss);
-
-        verifyDataIndicators(TelephonyIcons.ICON_5G);
-
-        // Enabled timer Nr5G switch to None Nr5G, showing 5G icon gracefully
-        ServiceState ssLte = Mockito.mock(ServiceState.class);
-        setNrState(ssLte, NetworkRegistrationInfo.NR_STATE_NONE);
-        doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(ssLte).getNrFrequencyRange();
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        mPhoneStateListener.onServiceStateChanged(ssLte);
-
-        verifyDataIndicators(TelephonyIcons.ICON_5G);
-    }
-
-    @Test
-    public void testNr5GIcon_disableDisplayGracePeriodTime_showLatestIconImmediately() {
-        setupDefaultNr5GIconConfiguration();
-        setupDefaultNr5GIconDisplayGracePeriodTime_disabled();
-        setupDefaultSignal();
-        mNetworkController.handleConfigurationChanged();
-
-        setNrState(mServiceState, NetworkRegistrationInfo.NR_STATE_CONNECTED);
-        doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(mServiceState).getNrFrequencyRange();
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-
-        verifyDataIndicators(TelephonyIcons.ICON_5G);
-
-        setNrState(mServiceState, NetworkRegistrationInfo.NR_STATE_NONE);
-        doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(mServiceState).getNrFrequencyRange();
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-
-        verifyDataIndicators(TelephonyIcons.ICON_LTE);
-    }
-
-    @Test
-    public void testNr5GIcon_resetDisplayGracePeriodTime_whenDataDisconnected() {
-        setupDefaultNr5GIconConfiguration();
-        setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
-        setupDefaultSignal();
-        mNetworkController.handleConfigurationChanged();
-        setNrState(mServiceState, NetworkRegistrationInfo.NR_STATE_CONNECTED);
-        doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(mServiceState).getNrFrequencyRange();
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-
-        verifyDataIndicators(TelephonyIcons.ICON_5G);
-
-        // Disabled timer, when out of service, reset timer to display latest state
-        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        setNrState(mServiceState, NetworkRegistrationInfo.NR_STATE_NONE);
-        doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(mServiceState).getNrFrequencyRange();
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_DISCONNECTED,
-                TelephonyManager.NETWORK_TYPE_UMTS);
-
-        verifyDataIndicators(0);
-    }
-
-    @Test
-    public void testNr5GIcon_enableDisplayGracePeriodTime_show5G_switching_5GPlus() {
-        setupDefaultNr5GIconConfiguration();
-        setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
-        setupDefaultSignal();
-        mNetworkController.handleConfigurationChanged();
-        mPhoneStateListener.onServiceStateChanged(mServiceState);
-
-        ServiceState ss5G = Mockito.mock(ServiceState.class);
-        setNrState(ss5G, NetworkRegistrationInfo.NR_STATE_CONNECTED);
-        doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss5G).getNrFrequencyRange();
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        mPhoneStateListener.onServiceStateChanged(ss5G);
-
-        verifyDataIndicators(TelephonyIcons.ICON_5G);
-
-        // When timeout enabled, 5G/5G+ switching should be updated immediately
-        ServiceState ss5GPlus = Mockito.mock(ServiceState.class);
-        setNrState(ss5GPlus, NetworkRegistrationInfo.NR_STATE_CONNECTED);
-        doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(ss5GPlus).getNrFrequencyRange();
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        mPhoneStateListener.onServiceStateChanged(ss5GPlus);
-
-        verifyDataIndicators(TelephonyIcons.ICON_5G_PLUS);
-    }
-
-    @Test
-    public void testNr5GIcon_carrierDisabledDisplayGracePeriodTime_shouldUpdateIconImmediately() {
-        setupDefaultNr5GIconConfiguration();
-        setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
-        setupDefaultSignal();
-        mNetworkController.handleConfigurationChanged();
-        mPhoneStateListener.onServiceStateChanged(mServiceState);
-
-        ServiceState ss = Mockito.mock(ServiceState.class);
-        setNrState(ss, NetworkRegistrationInfo.NR_STATE_CONNECTED);
-        doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        mPhoneStateListener.onServiceStateChanged(ss);
-
-        verifyDataIndicators(TelephonyIcons.ICON_5G);
-
-        // State from NR_5G to NONE NR_5G with timeout, should show previous 5G icon
-        setNrState(ss, NetworkRegistrationInfo.NR_STATE_NONE);
-        doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(ss).getNrFrequencyRange();
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-        mPhoneStateListener.onServiceStateChanged(ss);
-
-        verifyDataIndicators(TelephonyIcons.ICON_5G);
-
-        // Update nrIconDisplayGracePeriodMs to 0
-        setupDefaultNr5GIconDisplayGracePeriodTime_disabled();
-        mNetworkController.handleConfigurationChanged();
-
-        // State from NR_5G to NONE NR_STATE_RESTRICTED, showing corresponding icon
-        setNrState(ss, NetworkRegistrationInfo.NR_STATE_RESTRICTED);
-        mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
-                TelephonyManager.NETWORK_TYPE_LTE);
-
-        assertTrue(mConfig.nrIconDisplayGracePeriodMs == 0);
-        verifyDataIndicators(TelephonyIcons.ICON_LTE);
+                false, false, NOT_DEFAULT_DATA_STRING, NOT_DEFAULT_DATA_STRING);
     }
 
     @Test
@@ -488,6 +235,7 @@
                 .build();
         when(mServiceState.getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN))
                 .thenReturn(fakeRegInfo);
+        when(mDisplayInfo.getNetworkType()).thenReturn(TelephonyManager.NETWORK_TYPE_HSPA);
         updateServiceState();
         verifyDataIndicators(TelephonyIcons.ICON_H);
     }
@@ -523,10 +271,4 @@
                 true, DEFAULT_QS_SIGNAL_STRENGTH, dataIcon, false,
                 false);
     }
-
-    private void setNrState(ServiceState ss, int nrState) {
-        mFakeRegInfo.setNrState(nrState);
-        doReturn(mFakeRegInfo).when(ss)
-                .getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN);
-    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
index f52c8c1..b922f06 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
@@ -369,8 +369,8 @@
         mNetworkController.onReceive(mContext, intent);
 
         String defaultNetworkName = mMobileSignalController
-            .getStringIfExists(
-                com.android.internal.R.string.lockscreen_carrier_default);
+                .getTextIfExists(
+                com.android.internal.R.string.lockscreen_carrier_default).toString();
         assertNetworkNameEquals(defaultNetworkName);
     }
 
@@ -383,8 +383,8 @@
 
         mNetworkController.onReceive(mContext, intent);
 
-        String defaultNetworkName = mMobileSignalController.getStringIfExists(
-                com.android.internal.R.string.lockscreen_carrier_default);
+        String defaultNetworkName = mMobileSignalController.getTextIfExists(
+                com.android.internal.R.string.lockscreen_carrier_default).toString();
         assertNetworkNameEquals(defaultNetworkName);
     }
 
@@ -401,8 +401,8 @@
         mNetworkController.onReceive(mContext, intent);
 
         assertNetworkNameEquals(plmn
-                + mMobileSignalController.getStringIfExists(
-                        R.string.status_bar_network_name_separator)
+                + mMobileSignalController.getTextIfExists(
+                        R.string.status_bar_network_name_separator).toString()
                 + spn);
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
index df62254..86add98 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
@@ -43,7 +43,6 @@
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
 import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
 import com.android.systemui.statusbar.phone.LightBarController;
-import com.android.systemui.util.Assert;
 
 import org.junit.After;
 import org.junit.Before;
@@ -74,7 +73,7 @@
 
     @Before
     public void setUp() throws Exception {
-        Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         MockitoAnnotations.initMocks(this);
 
         mDependency.injectTestDependency(RemoteInputQuickSettingsDisabler.class,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/toast/ToastUITest.java b/packages/SystemUI/tests/src/com/android/systemui/toast/ToastUITest.java
new file mode 100644
index 0000000..d58f2c9
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/toast/ToastUITest.java
@@ -0,0 +1,207 @@
+/*
+ * 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.toast;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.INotificationManager;
+import android.app.ITransientNotificationCallback;
+import android.os.Binder;
+import android.testing.AndroidTestingRunner;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.internal.R;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.CommandQueue;
+
+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(AndroidTestingRunner.class)
+public class ToastUITest extends SysuiTestCase {
+    private static final String PACKAGE_NAME_1 = "com.example1.test";
+    private static final Binder TOKEN_1 = new Binder();
+    private static final Binder WINDOW_TOKEN_1 = new Binder();
+    private static final String PACKAGE_NAME_2 = "com.example2.test";
+    private static final Binder TOKEN_2 = new Binder();
+    private static final Binder WINDOW_TOKEN_2 = new Binder();
+    private static final String TEXT = "Hello World";
+    private static final int MESSAGE_RES_ID = R.id.message;
+
+    @Mock private CommandQueue mCommandQueue;
+    @Mock private WindowManager mWindowManager;
+    @Mock private INotificationManager mNotificationManager;
+    @Mock private AccessibilityManager mAccessibilityManager;
+    @Mock private ITransientNotificationCallback mCallback;
+    @Captor private ArgumentCaptor<View> mViewCaptor;
+    @Captor private ArgumentCaptor<ViewGroup.LayoutParams> mParamsCaptor;
+    private ToastUI mToastUI;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        mToastUI = new ToastUI(mContext, mCommandQueue, mWindowManager, mNotificationManager,
+                mAccessibilityManager);
+    }
+
+    @Test
+    public void testStart_addToastUIAsCallbackToCommandQueue() throws Exception {
+        mToastUI.start();
+
+        verify(mCommandQueue).addCallback(mToastUI);
+    }
+
+    @Test
+    public void testShowToast_addsCorrectViewToWindowManager() throws Exception {
+        mToastUI.showToast(PACKAGE_NAME_1, TOKEN_1, TEXT, WINDOW_TOKEN_1, Toast.LENGTH_LONG, null);
+
+        verify(mWindowManager).addView(mViewCaptor.capture(), any());
+        View view = mViewCaptor.getValue();
+        assertThat(((TextView) view.findViewById(MESSAGE_RES_ID)).getText()).isEqualTo(TEXT);
+    }
+
+    @Test
+    public void testShowToast_addsViewWithCorrectLayoutParamsToWindowManager() throws Exception {
+        mToastUI.showToast(PACKAGE_NAME_1, TOKEN_1, TEXT, WINDOW_TOKEN_1, Toast.LENGTH_LONG, null);
+
+        verify(mWindowManager).addView(any(), mParamsCaptor.capture());
+        ViewGroup.LayoutParams params = mParamsCaptor.getValue();
+        assertThat(params).isInstanceOf(WindowManager.LayoutParams.class);
+        WindowManager.LayoutParams windowParams = (WindowManager.LayoutParams) params;
+        assertThat(windowParams.packageName).isEqualTo(mContext.getPackageName());
+        assertThat(windowParams.getTitle()).isEqualTo("Toast");
+        assertThat(windowParams.token).isEqualTo(WINDOW_TOKEN_1);
+    }
+
+    @Test
+    public void testShowToast_callsCallback() throws Exception {
+        mToastUI.showToast(PACKAGE_NAME_1, TOKEN_1, TEXT, WINDOW_TOKEN_1, Toast.LENGTH_LONG,
+                mCallback);
+
+        verify(mCallback).onToastShown();
+    }
+
+    @Test
+    public void testShowToast_sendsAccessibilityEvent() throws Exception {
+        when(mAccessibilityManager.isEnabled()).thenReturn(true);
+
+        mToastUI.showToast(PACKAGE_NAME_1, TOKEN_1, TEXT, WINDOW_TOKEN_1, Toast.LENGTH_LONG, null);
+
+        ArgumentCaptor<AccessibilityEvent> eventCaptor = ArgumentCaptor.forClass(
+                AccessibilityEvent.class);
+        verify(mAccessibilityManager).sendAccessibilityEvent(eventCaptor.capture());
+        AccessibilityEvent event = eventCaptor.getValue();
+        assertThat(event.getEventType()).isEqualTo(
+                AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED);
+        assertThat(event.getClassName()).isEqualTo(Toast.class.getName());
+        assertThat(event.getPackageName()).isEqualTo(PACKAGE_NAME_1);
+    }
+
+    @Test
+    public void testHideToast_removesView() throws Exception {
+        mToastUI.showToast(PACKAGE_NAME_1, TOKEN_1, TEXT, WINDOW_TOKEN_1, Toast.LENGTH_LONG,
+                mCallback);
+        View view = verifyWmAddViewAndAttachToParent();
+
+        mToastUI.hideToast(PACKAGE_NAME_1, TOKEN_1);
+
+        verify(mWindowManager).removeViewImmediate(view);
+    }
+
+    @Test
+    public void testHideToast_finishesToken() throws Exception {
+        mToastUI.showToast(PACKAGE_NAME_1, TOKEN_1, TEXT, WINDOW_TOKEN_1, Toast.LENGTH_LONG,
+                mCallback);
+
+        mToastUI.hideToast(PACKAGE_NAME_1, TOKEN_1);
+
+        verify(mNotificationManager).finishToken(PACKAGE_NAME_1, WINDOW_TOKEN_1);
+    }
+
+    @Test
+    public void testHideToast_callsCallback() throws Exception {
+        mToastUI.showToast(PACKAGE_NAME_1, TOKEN_1, TEXT, WINDOW_TOKEN_1, Toast.LENGTH_LONG,
+                mCallback);
+
+        mToastUI.hideToast(PACKAGE_NAME_1, TOKEN_1);
+
+        verify(mCallback).onToastHidden();
+    }
+
+    @Test
+    public void testHideToast_whenNotCurrentToastToken_doesNotHideToast() throws Exception {
+        mToastUI.showToast(PACKAGE_NAME_1, TOKEN_1, TEXT, WINDOW_TOKEN_1, Toast.LENGTH_LONG,
+                mCallback);
+
+        mToastUI.hideToast(PACKAGE_NAME_1, TOKEN_2);
+
+        verify(mCallback, never()).onToastHidden();
+    }
+
+    @Test
+    public void testHideToast_whenNotCurrentToastPackage_doesNotHideToast() throws Exception {
+        mToastUI.showToast(PACKAGE_NAME_1, TOKEN_1, TEXT, WINDOW_TOKEN_1, Toast.LENGTH_LONG,
+                mCallback);
+
+        mToastUI.hideToast(PACKAGE_NAME_2, TOKEN_1);
+
+        verify(mCallback, never()).onToastHidden();
+    }
+
+    @Test
+    public void testShowToast_afterShowToast_hidesCurrentToast() throws Exception {
+        mToastUI.showToast(PACKAGE_NAME_1, TOKEN_1, TEXT, WINDOW_TOKEN_1, Toast.LENGTH_LONG,
+                mCallback);
+        View view = verifyWmAddViewAndAttachToParent();
+
+        mToastUI.showToast(PACKAGE_NAME_2, TOKEN_2, TEXT, WINDOW_TOKEN_2, Toast.LENGTH_LONG, null);
+
+        verify(mWindowManager).removeViewImmediate(view);
+        verify(mNotificationManager).finishToken(PACKAGE_NAME_1, WINDOW_TOKEN_1);
+        verify(mCallback).onToastHidden();
+    }
+
+    private View verifyWmAddViewAndAttachToParent() {
+        ArgumentCaptor<View> viewCaptor = ArgumentCaptor.forClass(View.class);
+        verify(mWindowManager).addView(viewCaptor.capture(), any());
+        View view = viewCaptor.getValue();
+        // Simulate attaching to view hierarchy
+        ViewGroup parent = new FrameLayout(mContext);
+        parent.addView(view);
+        return view;
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java
index 20dcbb7..1ff9548 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java
@@ -21,14 +21,12 @@
 import static org.mockito.Mockito.verify;
 
 import android.animation.Animator;
-import android.os.Looper;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
-import com.android.systemui.util.Assert;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -45,7 +43,7 @@
 
     @Before
     public void setup() {
-        Assert.sMainLooper = TestableLooper.get(this).getLooper();
+        allowTestableLooperAsMainThread();
         MockitoAnnotations.initMocks(this);
         KeepAwakeAnimationListener.sWakeLock = mWakeLock;
         mKeepAwakeAnimationListener = new KeepAwakeAnimationListener(getContext());
@@ -63,7 +61,10 @@
 
     @Test(expected = IllegalStateException.class)
     public void initThrows_onNonMainThread() {
-        Assert.sMainLooper = Looper.getMainLooper();
+        disallowTestableLooperAsMainThread();
+
+        // we are creating the KeepAwakeAnimationListener from the TestableLooper, not the main
+        // looper, so we expect an IllegalStateException:
         new KeepAwakeAnimationListener(getContext());
     }
 }
diff --git a/packages/Tethering/Android.bp b/packages/Tethering/Android.bp
index cf2b1f06..3111ab7 100644
--- a/packages/Tethering/Android.bp
+++ b/packages/Tethering/Android.bp
@@ -16,7 +16,9 @@
 
 java_defaults {
     name: "TetheringAndroidLibraryDefaults",
-    sdk_version: "system_current",
+    // TODO (b/146757305): change to module API once available
+    // TODO (b/148190005): change to module-libs-api-stubs-current once it is ready.
+    sdk_version: "core_platform",
     srcs: [
         "src/**/*.java",
         ":framework-tethering-shared-srcs",
@@ -28,12 +30,20 @@
         "netd_aidl_interface-unstable-java",
         "netlink-client",
         "networkstack-aidl-interfaces-unstable-java",
+        "android.hardware.tetheroffload.config-V1.0-java",
         "android.hardware.tetheroffload.control-V1.0-java",
         "net-utils-framework-common",
     ],
     libs: [
+        // Order matters: framework-tethering needs to be before the system stubs, otherwise
+        // hidden fields in the framework-tethering classes (which are also used to generate stubs)
+        // will not be found.
         "framework-tethering",
+        "android_system_stubs_current",
+        "framework-res",
         "unsupportedappusage",
+        "android_system_stubs_current",
+        "framework-res",
     ],
     plugins: ["java_api_finder"],
     manifest: "AndroidManifestBase.xml",
@@ -48,26 +58,26 @@
 // Due to b/143733063, APK can't access a jni lib that is in APEX (but not in the APK).
 cc_library {
     name: "libtetherutilsjni",
+    sdk_version: "current",
     srcs: [
         "jni/android_net_util_TetheringUtils.cpp",
     ],
     shared_libs: [
-        "libcgrouprc",
-        "libnativehelper_compat_libc++",
-        "libvndksupport",
-    ],
-    static_libs: [
-        "android.hardware.tetheroffload.config@1.0",
         "liblog",
-        "libbase",
-        "libbinderthreadstate",
-        "libcutils",
-        "libhidlbase",
-        "libjsoncpp",
-        "libprocessgroup",
-        "libutils",
+        "libnativehelper_compat_libc++",
     ],
 
+    // We cannot use plain "libc++" here to link libc++ dynamically because it results in:
+    //   java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found
+    // even if "libc++" is added into jni_libs below. Adding "libc++_shared" into jni_libs doesn't
+    // build because soong complains of:
+    //   module Tethering missing dependencies: libc++_shared
+    //
+    // So, link libc++ statically. This means that we also need to ensure that all the C++ libraries
+    // we depend on do not dynamically link libc++. This is currently the case, because liblog is
+    // C-only and libnativehelper_compat_libc also uses stl: "c++_static".
+    stl: "c++_static",
+
     cflags: [
         "-Wall",
         "-Werror",
@@ -81,21 +91,27 @@
 // Common defaults for compiling the actual APK.
 java_defaults {
     name: "TetheringAppDefaults",
-    sdk_version: "system_current",
+    // TODO (b/146757305): change to module API once available
+    // TODO (b/148190005): change to module-libs-api-stubs-current once it is ready.
+    sdk_version: "core_platform",
     privileged: true,
     // Build system doesn't track transitive dependeicies for jni_libs, list all the dependencies
     // explicitly.
     jni_libs: [
-        "libcgrouprc",
+        "liblog",
         "libnativehelper_compat_libc++",
-        "libvndksupport",
         "libtetherutilsjni",
     ],
     resource_dirs: [
         "res",
     ],
     libs: [
+        // Order matters: framework-tethering needs to be before the system stubs, otherwise
+        // hidden fields in the framework-tethering classes (which are also used to generate stubs)
+        // will not be found.
         "framework-tethering",
+        "android_system_stubs_current",
+        "framework-res",
     ],
     jarjar_rules: "jarjar-rules.txt",
     optimize: {
diff --git a/packages/Tethering/TEST_MAPPING b/packages/Tethering/TEST_MAPPING
new file mode 100644
index 0000000..73254cd
--- /dev/null
+++ b/packages/Tethering/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "postsubmit": [
+    {
+      "name": "TetheringTests"
+    }
+  ]
+}
diff --git a/packages/Tethering/common/TetheringLib/Android.bp b/packages/Tethering/common/TetheringLib/Android.bp
index e0adb34d..cb0de7a 100644
--- a/packages/Tethering/common/TetheringLib/Android.bp
+++ b/packages/Tethering/common/TetheringLib/Android.bp
@@ -41,12 +41,12 @@
 
 java_library {
     name: "framework-tethering",
-    sdk_version: "system_current",
+    // TODO (b/146757305): change to module_app_current once available
+    sdk_version: "core_platform",
     srcs: [
         "src/android/net/TetheredClient.java",
         "src/android/net/TetheringManager.java",
         "src/android/net/TetheringConstants.java",
-        ":framework-tethering-annotations",
     ],
     static_libs: [
         "tethering-aidl-interfaces-java",
@@ -55,20 +55,38 @@
     installable: true,
 
     libs: [
+        "framework-annotations-lib",
         "android_system_stubs_current",
     ],
 
     hostdex: true, // for hiddenapi check
-    visibility: [
-        "//frameworks/base/packages/Tethering:__subpackages__",
-        //TODO(b/147200698) remove below lines when the platform is built with stubs
-        "//frameworks/base",
-        "//frameworks/base/services",
-        "//frameworks/base/services/core",
-    ],
+    visibility: ["//frameworks/base/packages/Tethering:__subpackages__"],
     apex_available: ["com.android.tethering"],
 }
 
+droidstubs {
+    name: "framework-tethering-stubs-sources",
+    defaults: ["framework-module-stubs-defaults-module_libs_api"],
+    srcs: [
+        "src/android/net/TetheredClient.java",
+        "src/android/net/TetheringManager.java",
+        "src/android/net/TetheringConstants.java",
+    ],
+    libs: [
+        "tethering-aidl-interfaces-java",
+        "framework-all",
+    ],
+    sdk_version: "core_platform",
+}
+
+java_library {
+    name: "framework-tethering-stubs",
+    srcs: [":framework-tethering-stubs-sources"],
+    libs: ["framework-all"],
+    static_libs: ["tethering-aidl-interfaces-java"],
+    sdk_version: "core_platform",
+}
+
 filegroup {
     name: "framework-tethering-srcs",
     srcs: [
diff --git a/packages/Tethering/common/TetheringLib/jarjar-rules.txt b/packages/Tethering/common/TetheringLib/jarjar-rules.txt
index 1403bba..e459fad 100644
--- a/packages/Tethering/common/TetheringLib/jarjar-rules.txt
+++ b/packages/Tethering/common/TetheringLib/jarjar-rules.txt
@@ -1,2 +1 @@
-rule android.annotation.** com.android.networkstack.tethering.annotation.@1
-rule com.android.internal.annotations.** com.android.networkstack.tethering.annotation.@1
\ No newline at end of file
+# jarjar rules for the bootclasspath tethering framework library here
\ No newline at end of file
diff --git a/packages/Tethering/common/TetheringLib/src/android/net/ITetheringConnector.aidl b/packages/Tethering/common/TetheringLib/src/android/net/ITetheringConnector.aidl
index 5febe73..8be7964 100644
--- a/packages/Tethering/common/TetheringLib/src/android/net/ITetheringConnector.aidl
+++ b/packages/Tethering/common/TetheringLib/src/android/net/ITetheringConnector.aidl
@@ -1,16 +1,16 @@
-/**
- * Copyright (c) 2019, The Android Open Source Project
+/*
+ * Copyright (C) 2020 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *     http://www.apache.org/licenses/LICENSE-2.0
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing perNmissions and
+ * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package android.net;
diff --git a/packages/Tethering/common/TetheringLib/src/android/net/ITetheringEventCallback.aidl b/packages/Tethering/common/TetheringLib/src/android/net/ITetheringEventCallback.aidl
index 28a810d..a554193 100644
--- a/packages/Tethering/common/TetheringLib/src/android/net/ITetheringEventCallback.aidl
+++ b/packages/Tethering/common/TetheringLib/src/android/net/ITetheringEventCallback.aidl
@@ -17,6 +17,7 @@
 package android.net;
 
 import android.net.Network;
+import android.net.TetheredClient;
 import android.net.TetheringConfigurationParcel;
 import android.net.TetheringCallbackStartedParcel;
 import android.net.TetherStatesParcel;
@@ -33,4 +34,5 @@
     void onUpstreamChanged(in Network network);
     void onConfigurationChanged(in TetheringConfigurationParcel config);
     void onTetherStatesChanged(in TetherStatesParcel states);
+    void onTetherClientsChanged(in List<TetheredClient> clients);
 }
diff --git a/packages/Tethering/common/TetheringLib/src/android/net/TetheredClient.java b/packages/Tethering/common/TetheringLib/src/android/net/TetheredClient.java
index 6514688..8b8b9e5 100644
--- a/packages/Tethering/common/TetheringLib/src/android/net/TetheredClient.java
+++ b/packages/Tethering/common/TetheringLib/src/android/net/TetheredClient.java
@@ -16,6 +16,8 @@
 
 package android.net;
 
+import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
+
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
@@ -25,7 +27,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Objects;
 
@@ -34,6 +36,7 @@
  * @hide
  */
 @SystemApi
+@SystemApi(client = MODULE_LIBRARIES)
 @TestApi
 public final class TetheredClient implements Parcelable {
     @NonNull
@@ -83,7 +86,7 @@
      * @hide
      */
     public TetheredClient addAddresses(@NonNull TetheredClient other) {
-        final HashSet<AddressInfo> newAddresses = new HashSet<>(
+        final LinkedHashSet<AddressInfo> newAddresses = new LinkedHashSet<>(
                 mAddresses.size() + other.mAddresses.size());
         newAddresses.addAll(mAddresses);
         newAddresses.addAll(other.mAddresses);
@@ -188,6 +191,15 @@
                 return new AddressInfo[size];
             }
         };
+
+        @NonNull
+        @Override
+        public String toString() {
+            return "AddressInfo {"
+                    + mAddress
+                    + (mHostname != null ? ", hostname " + mHostname : "")
+                    + "}";
+        }
     }
 
     @Override
@@ -209,4 +221,13 @@
             return new TetheredClient[size];
         }
     };
+
+    @NonNull
+    @Override
+    public String toString() {
+        return "TetheredClient {hwAddr " + mMacAddress
+                + ", addresses " + mAddresses
+                + ", tetheringType " + mTetheringType
+                + "}";
+    }
 }
diff --git a/packages/Tethering/common/TetheringLib/src/android/net/TetheringCallbackStartedParcel.aidl b/packages/Tethering/common/TetheringLib/src/android/net/TetheringCallbackStartedParcel.aidl
index 14ee2d3..c064aa4 100644
--- a/packages/Tethering/common/TetheringLib/src/android/net/TetheringCallbackStartedParcel.aidl
+++ b/packages/Tethering/common/TetheringLib/src/android/net/TetheringCallbackStartedParcel.aidl
@@ -17,6 +17,7 @@
 package android.net;
 
 import android.net.Network;
+import android.net.TetheredClient;
 import android.net.TetheringConfigurationParcel;
 import android.net.TetherStatesParcel;
 
@@ -29,4 +30,5 @@
     Network upstreamNetwork;
     TetheringConfigurationParcel config;
     TetherStatesParcel states;
+    List<TetheredClient> tetheredClients;
 }
\ No newline at end of file
diff --git a/packages/Tethering/common/TetheringLib/src/android/net/TetheringConstants.java b/packages/Tethering/common/TetheringLib/src/android/net/TetheringConstants.java
index 00cf98e..df87ac9 100644
--- a/packages/Tethering/common/TetheringLib/src/android/net/TetheringConstants.java
+++ b/packages/Tethering/common/TetheringLib/src/android/net/TetheringConstants.java
@@ -16,6 +16,9 @@
 
 package android.net;
 
+import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
+
+import android.annotation.SystemApi;
 import android.os.ResultReceiver;
 
 /**
@@ -28,39 +31,30 @@
  * symbols from framework-tethering even when they are in a non-hidden class.
  * @hide
  */
+@SystemApi(client = MODULE_LIBRARIES)
 public class TetheringConstants {
     /**
      * Extra used for communicating with the TetherService. Includes the type of tethering to
      * enable if any.
-     *
-     * {@hide}
      */
     public static final String EXTRA_ADD_TETHER_TYPE = "extraAddTetherType";
     /**
      * Extra used for communicating with the TetherService. Includes the type of tethering for
      * which to cancel provisioning.
-     *
-     * {@hide}
      */
     public static final String EXTRA_REM_TETHER_TYPE = "extraRemTetherType";
     /**
      * Extra used for communicating with the TetherService. True to schedule a recheck of tether
      * provisioning.
-     *
-     * {@hide}
      */
     public static final String EXTRA_SET_ALARM = "extraSetAlarm";
     /**
      * Tells the TetherService to run a provision check now.
-     *
-     * {@hide}
      */
     public static final String EXTRA_RUN_PROVISION = "extraRunProvision";
     /**
      * Extra used for communicating with the TetherService. Contains the {@link ResultReceiver}
      * which will receive provisioning results. Can be left empty.
-     *
-     * {@hide}
      */
     public static final String EXTRA_PROVISION_CALLBACK = "extraProvisionCallback";
 }
diff --git a/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java b/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java
index 53a358f..fd9f713 100644
--- a/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java
+++ b/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java
@@ -15,6 +15,8 @@
  */
 package android.net;
 
+import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
+
 import android.Manifest;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -50,6 +52,7 @@
  * @hide
  */
 @SystemApi
+@SystemApi(client = MODULE_LIBRARIES)
 @TestApi
 public class TetheringManager {
     private static final String TAG = TetheringManager.class.getSimpleName();
@@ -177,6 +180,7 @@
      *                          service is not connected.
      * {@hide}
      */
+    @SystemApi(client = MODULE_LIBRARIES)
     public TetheringManager(@NonNull final Context context,
             @NonNull Supplier<IBinder> connectorSupplier) {
         mContext = context;
@@ -208,7 +212,7 @@
         new Thread(() -> {
             while (true) {
                 try {
-                    Thread.sleep(200);
+                    Thread.sleep(CONNECTOR_POLL_INTERVAL_MILLIS);
                 } catch (InterruptedException e) {
                     // Not much to do here, the system needs to wait for the connector
                 }
@@ -371,6 +375,9 @@
             mTetherStatesParcel = states;
         }
 
+        @Override
+        public void onTetherClientsChanged(List<TetheredClient> clients) { }
+
         public void waitForStarted() {
             mWaitForCallback.block(DEFAULT_TIMEOUT_MS);
             throwIfPermissionFailure(mError);
@@ -395,6 +402,7 @@
      * {@hide}
      */
     @Deprecated
+    @SystemApi(client = MODULE_LIBRARIES)
     public int tether(@NonNull final String iface) {
         final String callerPkg = mContext.getOpPackageName();
         Log.i(TAG, "tether caller:" + callerPkg);
@@ -418,6 +426,7 @@
      * {@hide}
      */
     @Deprecated
+    @SystemApi(client = MODULE_LIBRARIES)
     public int untether(@NonNull final String iface) {
         final String callerPkg = mContext.getOpPackageName();
         Log.i(TAG, "untether caller:" + callerPkg);
@@ -444,6 +453,7 @@
      * {@hide}
      */
     @Deprecated
+    @SystemApi(client = MODULE_LIBRARIES)
     public int setUsbTethering(final boolean enable) {
         final String callerPkg = mContext.getOpPackageName();
         Log.i(TAG, "setUsbTethering caller:" + callerPkg);
@@ -702,6 +712,7 @@
      * {@hide}
      */
     // TODO: improve the usage of ResultReceiver, b/145096122
+    @SystemApi(client = MODULE_LIBRARIES)
     public void requestLatestTetheringEntitlementResult(final int type,
             @NonNull final ResultReceiver receiver, final boolean showEntitlementUi) {
         final String callerPkg = mContext.getOpPackageName();
@@ -913,6 +924,7 @@
                         sendRegexpsChanged(parcel.config);
                         maybeSendTetherableIfacesChangedCallback(parcel.states);
                         maybeSendTetheredIfacesChangedCallback(parcel.states);
+                        callback.onClientsChanged(parcel.tetheredClients);
                     });
                 }
 
@@ -943,6 +955,11 @@
                         maybeSendTetheredIfacesChangedCallback(states);
                     });
                 }
+
+                @Override
+                public void onTetherClientsChanged(final List<TetheredClient> clients) {
+                    executor.execute(() -> callback.onClientsChanged(clients));
+                }
             };
             getConnector(c -> c.registerTetheringEventCallback(remoteCallback, callerPkg));
             mTetheringEventCallbacks.put(callback, remoteCallback);
@@ -982,6 +999,7 @@
      *               interface
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
     public int getLastTetherError(@NonNull final String iface) {
         mCallback.waitForStarted();
         if (mTetherStatesParcel == null) return TETHER_ERROR_NO_ERROR;
@@ -1004,6 +1022,7 @@
      *        what interfaces are considered tetherable usb interfaces.
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
     public @NonNull String[] getTetherableUsbRegexs() {
         mCallback.waitForStarted();
         return mTetheringConfiguration.tetherableUsbRegexs;
@@ -1018,6 +1037,7 @@
      *        what interfaces are considered tetherable wifi interfaces.
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
     public @NonNull String[] getTetherableWifiRegexs() {
         mCallback.waitForStarted();
         return mTetheringConfiguration.tetherableWifiRegexs;
@@ -1032,6 +1052,7 @@
      *        what interfaces are considered tetherable bluetooth interfaces.
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
     public @NonNull String[] getTetherableBluetoothRegexs() {
         mCallback.waitForStarted();
         return mTetheringConfiguration.tetherableBluetoothRegexs;
@@ -1044,6 +1065,7 @@
      * @return an array of 0 or more Strings of tetherable interface names.
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
     public @NonNull String[] getTetherableIfaces() {
         mCallback.waitForStarted();
         if (mTetherStatesParcel == null) return new String[0];
@@ -1057,6 +1079,7 @@
      * @return an array of 0 or more String of currently tethered interface names.
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
     public @NonNull String[] getTetheredIfaces() {
         mCallback.waitForStarted();
         if (mTetherStatesParcel == null) return new String[0];
@@ -1076,6 +1099,7 @@
      *        which failed to tether.
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
     public @NonNull String[] getTetheringErroredIfaces() {
         mCallback.waitForStarted();
         if (mTetherStatesParcel == null) return new String[0];
@@ -1103,6 +1127,7 @@
      * @return a boolean - {@code true} indicating Tethering is supported.
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
     public boolean isTetheringSupported() {
         final String callerPkg = mContext.getOpPackageName();
 
diff --git a/packages/Tethering/jni/android_net_util_TetheringUtils.cpp b/packages/Tethering/jni/android_net_util_TetheringUtils.cpp
index 1cf8f98..54934406 100644
--- a/packages/Tethering/jni/android_net_util_TetheringUtils.cpp
+++ b/packages/Tethering/jni/android_net_util_TetheringUtils.cpp
@@ -16,123 +16,18 @@
 
 #include <errno.h>
 #include <error.h>
-#include <hidl/HidlSupport.h>
 #include <jni.h>
 #include <nativehelper/JNIHelp.h>
 #include <nativehelper/ScopedUtfChars.h>
-#include <linux/netfilter/nfnetlink.h>
-#include <linux/netlink.h>
 #include <net/if.h>
 #include <netinet/icmp6.h>
 #include <sys/socket.h>
-#include <android-base/unique_fd.h>
-#include <android/hardware/tetheroffload/config/1.0/IOffloadConfig.h>
 
 #define LOG_TAG "TetheringUtils"
-#include <utils/Log.h>
+#include <android/log.h>
 
 namespace android {
 
-using hardware::hidl_handle;
-using hardware::hidl_string;
-using hardware::tetheroffload::config::V1_0::IOffloadConfig;
-
-namespace {
-
-inline const sockaddr * asSockaddr(const sockaddr_nl *nladdr) {
-    return reinterpret_cast<const sockaddr *>(nladdr);
-}
-
-int conntrackSocket(unsigned groups) {
-    base::unique_fd s(socket(AF_NETLINK, SOCK_DGRAM, NETLINK_NETFILTER));
-    if (s.get() < 0) return -errno;
-
-    const struct sockaddr_nl bind_addr = {
-        .nl_family = AF_NETLINK,
-        .nl_pad = 0,
-        .nl_pid = 0,
-        .nl_groups = groups,
-    };
-    if (bind(s.get(), asSockaddr(&bind_addr), sizeof(bind_addr)) != 0) {
-        return -errno;
-    }
-
-    const struct sockaddr_nl kernel_addr = {
-        .nl_family = AF_NETLINK,
-        .nl_pad = 0,
-        .nl_pid = 0,
-        .nl_groups = groups,
-    };
-    if (connect(s.get(), asSockaddr(&kernel_addr), sizeof(kernel_addr)) != 0) {
-        return -errno;
-    }
-
-    return s.release();
-}
-
-// Return a hidl_handle that owns the file descriptor owned by fd, and will
-// auto-close it (otherwise there would be double-close problems).
-//
-// Rely upon the compiler to eliminate the constexprs used for clarity.
-hidl_handle handleFromFileDescriptor(base::unique_fd fd) {
-    hidl_handle h;
-
-    static constexpr int kNumFds = 1;
-    static constexpr int kNumInts = 0;
-    native_handle_t *nh = native_handle_create(kNumFds, kNumInts);
-    nh->data[0] = fd.release();
-
-    static constexpr bool kTakeOwnership = true;
-    h.setTo(nh, kTakeOwnership);
-
-    return h;
-}
-
-}  // namespace
-
-static jboolean android_net_util_configOffload(
-        JNIEnv* /* env */) {
-    sp<IOffloadConfig> configInterface = IOffloadConfig::getService();
-    if (configInterface.get() == nullptr) {
-        ALOGD("Could not find IOffloadConfig service.");
-        return false;
-    }
-
-    // Per the IConfigOffload definition:
-    //
-    // fd1   A file descriptor bound to the following netlink groups
-    //       (NF_NETLINK_CONNTRACK_NEW | NF_NETLINK_CONNTRACK_DESTROY).
-    //
-    // fd2   A file descriptor bound to the following netlink groups
-    //       (NF_NETLINK_CONNTRACK_UPDATE | NF_NETLINK_CONNTRACK_DESTROY).
-    base::unique_fd
-            fd1(conntrackSocket(NF_NETLINK_CONNTRACK_NEW | NF_NETLINK_CONNTRACK_DESTROY)),
-            fd2(conntrackSocket(NF_NETLINK_CONNTRACK_UPDATE | NF_NETLINK_CONNTRACK_DESTROY));
-    if (fd1.get() < 0 || fd2.get() < 0) {
-        ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno));
-        return false;
-    }
-
-    hidl_handle h1(handleFromFileDescriptor(std::move(fd1))),
-                h2(handleFromFileDescriptor(std::move(fd2)));
-
-    bool rval(false);
-    hidl_string msg;
-    const auto status = configInterface->setHandles(h1, h2,
-            [&rval, &msg](bool success, const hidl_string& errMsg) {
-                rval = success;
-                msg = errMsg;
-            });
-    if (!status.isOk() || !rval) {
-        ALOGE("IOffloadConfig::setHandles() error: '%s' / '%s'",
-              status.description().c_str(), msg.c_str());
-        // If status is somehow not ok, make sure rval captures this too.
-        rval = false;
-    }
-
-    return rval;
-}
-
 static void android_net_util_setupRaSocket(JNIEnv *env, jobject clazz, jobject javaFd,
         jint ifIndex)
 {
@@ -229,7 +124,6 @@
  */
 static const JNINativeMethod gMethods[] = {
     /* name, signature, funcPtr */
-    { "configOffload", "()Z", (void*) android_net_util_configOffload },
     { "setupRaSocket", "(Ljava/io/FileDescriptor;I)V", (void*) android_net_util_setupRaSocket },
 };
 
@@ -242,7 +136,7 @@
 extern "C" jint JNI_OnLoad(JavaVM* vm, void*) {
     JNIEnv *env;
     if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
-        ALOGE("ERROR: GetEnv failed");
+        __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: GetEnv failed");
         return JNI_ERR;
     }
 
diff --git a/packages/Tethering/src/android/net/ip/IpServer.java b/packages/Tethering/src/android/net/ip/IpServer.java
index f39e7af..3acc766 100644
--- a/packages/Tethering/src/android/net/ip/IpServer.java
+++ b/packages/Tethering/src/android/net/ip/IpServer.java
@@ -19,6 +19,7 @@
 import static android.net.InetAddresses.parseNumericAddress;
 import static android.net.RouteInfo.RTN_UNICAST;
 import static android.net.dhcp.IDhcpServer.STATUS_SUCCESS;
+import static android.net.shared.Inet4AddressUtils.intToInet4AddressHTH;
 import static android.net.util.NetworkConstants.FF;
 import static android.net.util.NetworkConstants.RFC7421_PREFIX_LENGTH;
 import static android.net.util.NetworkConstants.asByte;
@@ -29,18 +30,24 @@
 import android.net.IpPrefix;
 import android.net.LinkAddress;
 import android.net.LinkProperties;
+import android.net.MacAddress;
 import android.net.RouteInfo;
+import android.net.TetheredClient;
 import android.net.TetheringManager;
+import android.net.dhcp.DhcpLeaseParcelable;
 import android.net.dhcp.DhcpServerCallbacks;
 import android.net.dhcp.DhcpServingParamsParcel;
 import android.net.dhcp.DhcpServingParamsParcelExt;
+import android.net.dhcp.IDhcpLeaseCallbacks;
 import android.net.dhcp.IDhcpServer;
+import android.net.ip.IpNeighborMonitor.NeighborEvent;
 import android.net.ip.RouterAdvertisementDaemon.RaParams;
 import android.net.shared.NetdUtils;
 import android.net.shared.RouteUtils;
 import android.net.util.InterfaceParams;
 import android.net.util.InterfaceSet;
 import android.net.util.SharedLog;
+import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
 import android.os.RemoteException;
@@ -48,16 +55,24 @@
 import android.util.Log;
 import android.util.SparseArray;
 
+import androidx.annotation.NonNull;
+
 import com.android.internal.util.MessageUtils;
 import com.android.internal.util.State;
 import com.android.internal.util.StateMachine;
 
+import java.io.IOException;
 import java.net.Inet4Address;
 import java.net.Inet6Address;
 import java.net.InetAddress;
+import java.net.NetworkInterface;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Objects;
 import java.util.Random;
 import java.util.Set;
@@ -130,10 +145,21 @@
          * @param newLp the new LinkProperties to report
          */
         public void updateLinkProperties(IpServer who, LinkProperties newLp) { }
+
+        /**
+         * Notify that the DHCP leases changed in one of the IpServers.
+         */
+        public void dhcpLeasesChanged() { }
     }
 
     /** Capture IpServer dependencies, for injection. */
     public abstract static class Dependencies {
+        /** Create an IpNeighborMonitor to be used by this IpServer */
+        public IpNeighborMonitor getIpNeighborMonitor(Handler handler, SharedLog log,
+                IpNeighborMonitor.NeighborEventConsumer consumer) {
+            return new IpNeighborMonitor(handler, log, consumer);
+        }
+
         /** Create a RouterAdvertisementDaemon instance to be used by IpServer.*/
         public RouterAdvertisementDaemon getRouterAdvertisementDaemon(InterfaceParams ifParams) {
             return new RouterAdvertisementDaemon(ifParams);
@@ -144,6 +170,15 @@
             return InterfaceParams.getByName(ifName);
         }
 
+        /** Get |ifName|'s interface index. */
+        public int getIfindex(String ifName) {
+            try {
+                return NetworkInterface.getByName(ifName).getIndex();
+            } catch (IOException | NullPointerException e) {
+                Log.e(TAG, "Can't determine interface index for interface " + ifName);
+                return 0;
+            }
+        }
         /** Create a DhcpServer instance to be used by IpServer. */
         public abstract void makeDhcpServer(String ifName, DhcpServingParamsParcel params,
                 DhcpServerCallbacks cb);
@@ -169,6 +204,8 @@
     public static final int CMD_TETHER_CONNECTION_CHANGED   = BASE_IPSERVER + 9;
     // new IPv6 tethering parameters need to be processed
     public static final int CMD_IPV6_TETHER_UPDATE          = BASE_IPSERVER + 10;
+    // new neighbor cache entry on our interface
+    public static final int CMD_NEIGHBOR_EVENT              = BASE_IPSERVER + 11;
 
     private final State mInitialState;
     private final State mLocalHotspotState;
@@ -205,6 +242,42 @@
     private IDhcpServer mDhcpServer;
     private RaParams mLastRaParams;
     private LinkAddress mIpv4Address;
+    @NonNull
+    private List<TetheredClient> mDhcpLeases = Collections.emptyList();
+
+    private int mLastIPv6UpstreamIfindex = 0;
+
+    private class MyNeighborEventConsumer implements IpNeighborMonitor.NeighborEventConsumer {
+        public void accept(NeighborEvent e) {
+            sendMessage(CMD_NEIGHBOR_EVENT, e);
+        }
+    }
+
+    static class Ipv6ForwardingRule {
+        public final int upstreamIfindex;
+        public final int downstreamIfindex;
+        public final Inet6Address address;
+        public final MacAddress srcMac;
+        public final MacAddress dstMac;
+
+        Ipv6ForwardingRule(int upstreamIfindex, int downstreamIfIndex, Inet6Address address,
+                MacAddress srcMac, MacAddress dstMac) {
+            this.upstreamIfindex = upstreamIfindex;
+            this.downstreamIfindex = downstreamIfIndex;
+            this.address = address;
+            this.srcMac = srcMac;
+            this.dstMac = dstMac;
+        }
+
+        public Ipv6ForwardingRule onNewUpstream(int newUpstreamIfindex) {
+            return new Ipv6ForwardingRule(newUpstreamIfindex, downstreamIfindex, address, srcMac,
+                    dstMac);
+        }
+    }
+    private final LinkedHashMap<Inet6Address, Ipv6ForwardingRule> mIpv6ForwardingRules =
+            new LinkedHashMap<>();
+
+    private final IpNeighborMonitor mIpNeighborMonitor;
 
     public IpServer(
             String ifaceName, Looper looper, int interfaceType, SharedLog log,
@@ -223,6 +296,12 @@
         mLastError = TetheringManager.TETHER_ERROR_NO_ERROR;
         mServingMode = STATE_AVAILABLE;
 
+        mIpNeighborMonitor = mDeps.getIpNeighborMonitor(getHandler(), mLog,
+                new MyNeighborEventConsumer());
+        if (!mIpNeighborMonitor.start()) {
+            mLog.e("Failed to create IpNeighborMonitor on " + mIfaceName);
+        }
+
         mInitialState = new InitialState();
         mLocalHotspotState = new LocalHotspotState();
         mTetheredState = new TetheredState();
@@ -262,6 +341,14 @@
         return new LinkProperties(mLinkProperties);
     }
 
+    /**
+     * Get the latest list of DHCP leases that was reported. Must be called on the IpServer looper
+     * thread.
+     */
+    public List<TetheredClient> getAllLeases() {
+        return Collections.unmodifiableList(mDhcpLeases);
+    }
+
     /** Stop this IpServer. After this is called this IpServer should not be used any more. */
     public void stop() {
         sendMessage(CMD_INTERFACE_DOWN);
@@ -334,7 +421,7 @@
 
                 mDhcpServer = server;
                 try {
-                    mDhcpServer.start(new OnHandlerStatusCallback() {
+                    mDhcpServer.startWithCallbacks(new OnHandlerStatusCallback() {
                         @Override
                         public void callback(int startStatusCode) {
                             if (startStatusCode != STATUS_SUCCESS) {
@@ -342,7 +429,7 @@
                                 handleError();
                             }
                         }
-                    });
+                    }, new DhcpLeaseCallback());
                 } catch (RemoteException e) {
                     throw new IllegalStateException(e);
                 }
@@ -355,6 +442,48 @@
         }
     }
 
+    private class DhcpLeaseCallback extends IDhcpLeaseCallbacks.Stub {
+        @Override
+        public void onLeasesChanged(List<DhcpLeaseParcelable> leaseParcelables) {
+            final ArrayList<TetheredClient> leases = new ArrayList<>();
+            for (DhcpLeaseParcelable lease : leaseParcelables) {
+                final LinkAddress address = new LinkAddress(
+                        intToInet4AddressHTH(lease.netAddr), lease.prefixLength);
+
+                final MacAddress macAddress;
+                try {
+                    macAddress = MacAddress.fromBytes(lease.hwAddr);
+                } catch (IllegalArgumentException e) {
+                    Log.wtf(TAG, "Invalid address received from DhcpServer: "
+                            + Arrays.toString(lease.hwAddr));
+                    return;
+                }
+
+                final TetheredClient.AddressInfo addressInfo = new TetheredClient.AddressInfo(
+                        address, lease.hostname, lease.expTime);
+                leases.add(new TetheredClient(
+                        macAddress,
+                        Collections.singletonList(addressInfo),
+                        mInterfaceType));
+            }
+
+            getHandler().post(() -> {
+                mDhcpLeases = leases;
+                mCallback.dhcpLeasesChanged();
+            });
+        }
+
+        @Override
+        public int getInterfaceVersion() {
+            return this.VERSION;
+        }
+
+        @Override
+        public String getInterfaceHash() throws RemoteException {
+            return this.HASH;
+        }
+    }
+
     private boolean startDhcp(Inet4Address addr, int prefixLen) {
         if (mUsingLegacyDhcp) {
             return true;
@@ -388,6 +517,8 @@
                             mLastError = TetheringManager.TETHER_ERROR_DHCPSERVER_ERROR;
                             // Not much more we can do here
                         }
+                        mDhcpLeases.clear();
+                        getHandler().post(mCallback::dhcpLeasesChanged);
                     }
                 });
                 mDhcpServer = null;
@@ -538,13 +669,21 @@
         }
 
         RaParams params = null;
+        int upstreamIfindex = 0;
 
         if (v6only != null) {
+            final String upstreamIface = v6only.getInterfaceName();
+
             params = new RaParams();
-            params.mtu = v6only.getMtu();
+            // We advertise an mtu lower by 16, which is the closest multiple of 8 >= 14,
+            // the ethernet header size.  This makes kernel ebpf tethering offload happy.
+            // This hack should be reverted once we have the kernel fixed up.
+            // Note: this will automatically clamp to at least 1280 (ipv6 minimum mtu)
+            // see RouterAdvertisementDaemon.java putMtu()
+            params.mtu = v6only.getMtu() - 16;
             params.hasDefaultRoute = v6only.hasIpv6DefaultRoute();
 
-            if (params.hasDefaultRoute) params.hopLimit = getHopLimit(v6only.getInterfaceName());
+            if (params.hasDefaultRoute) params.hopLimit = getHopLimit(upstreamIface);
 
             for (LinkAddress linkAddr : v6only.getLinkAddresses()) {
                 if (linkAddr.getPrefixLength() != RFC7421_PREFIX_LENGTH) continue;
@@ -558,12 +697,18 @@
                     params.dnses.add(dnsServer);
                 }
             }
+
+            upstreamIfindex = mDeps.getIfindex(upstreamIface);
         }
+
         // If v6only is null, we pass in null to setRaParams(), which handles
         // deprecation of any existing RA data.
 
         setRaParams(params);
         mLastIPv6LinkProperties = v6only;
+
+        updateIpv6ForwardingRules(mLastIPv6UpstreamIfindex, upstreamIfindex, null);
+        mLastIPv6UpstreamIfindex = upstreamIfindex;
     }
 
     private void configureLocalIPv6Routes(
@@ -658,6 +803,73 @@
         }
     }
 
+    private void addIpv6ForwardingRule(Ipv6ForwardingRule rule) {
+        try {
+            mNetd.tetherRuleAddDownstreamIpv6(mInterfaceParams.index, rule.upstreamIfindex,
+                    rule.address.getAddress(),  mInterfaceParams.macAddr.toByteArray(),
+                    rule.dstMac.toByteArray());
+            mIpv6ForwardingRules.put(rule.address, rule);
+        } catch (RemoteException | ServiceSpecificException e) {
+            Log.e(TAG, "Could not add IPv6 downstream rule: " + e);
+        }
+    }
+
+    private void removeIpv6ForwardingRule(Ipv6ForwardingRule rule, boolean removeFromMap) {
+        try {
+            mNetd.tetherRuleRemoveDownstreamIpv6(rule.upstreamIfindex, rule.address.getAddress());
+            if (removeFromMap) {
+                mIpv6ForwardingRules.remove(rule.address);
+            }
+        } catch (RemoteException | ServiceSpecificException e) {
+            Log.e(TAG, "Could not remove IPv6 downstream rule: " + e);
+        }
+    }
+
+    // Convenience method to replace a rule with the same rule on a new upstream interface.
+    // Allows replacing the rules in one iteration pass without ConcurrentModificationExceptions.
+    // Relies on the fact that rules are in a map indexed by IP address.
+    private void updateIpv6ForwardingRule(Ipv6ForwardingRule rule, int newIfindex) {
+        addIpv6ForwardingRule(rule.onNewUpstream(newIfindex));
+        removeIpv6ForwardingRule(rule, false /*removeFromMap*/);
+    }
+
+    // Handles all updates to IPv6 forwarding rules. These can currently change only if the upstream
+    // changes or if a neighbor event is received.
+    private void updateIpv6ForwardingRules(int prevUpstreamIfindex, int upstreamIfindex,
+            NeighborEvent e) {
+        // If the upstream interface has changed, remove all rules and re-add them with the new
+        // upstream interface.
+        if (prevUpstreamIfindex != upstreamIfindex) {
+            for (Ipv6ForwardingRule rule : mIpv6ForwardingRules.values()) {
+                updateIpv6ForwardingRule(rule, upstreamIfindex);
+            }
+        }
+
+        // If we're here to process a NeighborEvent, do so now.
+        if (e == null) return;
+        if (!(e.ip instanceof Inet6Address) || e.ip.isMulticastAddress()
+                || e.ip.isLoopbackAddress() || e.ip.isLinkLocalAddress()) {
+            return;
+        }
+
+        Ipv6ForwardingRule rule = new Ipv6ForwardingRule(mLastIPv6UpstreamIfindex,
+                mInterfaceParams.index, (Inet6Address) e.ip, mInterfaceParams.macAddr,
+                e.macAddr);
+        if (e.isValid()) {
+            addIpv6ForwardingRule(rule);
+        } else {
+            removeIpv6ForwardingRule(rule, true /*removeFromMap*/);
+        }
+    }
+
+    private void handleNeighborEvent(NeighborEvent e) {
+        if (mInterfaceParams != null
+                && mInterfaceParams.index == e.ifindex
+                && mInterfaceParams.hasMacAddress) {
+            updateIpv6ForwardingRules(mLastIPv6UpstreamIfindex, mLastIPv6UpstreamIfindex, e);
+        }
+    }
+
     private byte getHopLimit(String upstreamIface) {
         try {
             int upstreamHopLimit = Integer.parseUnsignedInt(
@@ -756,7 +968,7 @@
                 final IpPrefix ipv4Prefix = new IpPrefix(mIpv4Address.getAddress(),
                         mIpv4Address.getPrefixLength());
                 NetdUtils.tetherInterface(mNetd, mIfaceName, ipv4Prefix);
-            } catch (RemoteException | ServiceSpecificException e) {
+            } catch (RemoteException | ServiceSpecificException | IllegalStateException e) {
                 mLog.e("Error Tethering: " + e);
                 mLastError = TetheringManager.TETHER_ERROR_TETHER_IFACE_ERROR;
                 return;
@@ -945,6 +1157,9 @@
                         }
                     }
                     break;
+                case CMD_NEIGHBOR_EVENT:
+                    handleNeighborEvent((NeighborEvent) message.obj);
+                    break;
                 default:
                     return false;
             }
diff --git a/packages/Tethering/src/android/net/util/TetheringUtils.java b/packages/Tethering/src/android/net/util/TetheringUtils.java
index fa543bd..5a6d5c1 100644
--- a/packages/Tethering/src/android/net/util/TetheringUtils.java
+++ b/packages/Tethering/src/android/net/util/TetheringUtils.java
@@ -24,14 +24,6 @@
  * {@hide}
  */
 public class TetheringUtils {
-
-    /**
-     * Offload management process need to know conntrack rules to support NAT, but it may not have
-     * permission to create netlink netfilter sockets. Create two netlink netfilter sockets and
-     * share them with offload management process.
-     */
-    public static native boolean configOffload();
-
     /**
      * Configures a socket for receiving ICMPv6 router solicitations and sending advertisements.
      * @param fd the socket's {@link FileDescriptor}.
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/ConnectedClientsTracker.java b/packages/Tethering/src/com/android/server/connectivity/tethering/ConnectedClientsTracker.java
new file mode 100644
index 0000000..cdd1a5d
--- /dev/null
+++ b/packages/Tethering/src/com/android/server/connectivity/tethering/ConnectedClientsTracker.java
@@ -0,0 +1,183 @@
+/*
+ * 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.connectivity.tethering;
+
+import static android.net.TetheringManager.TETHERING_WIFI;
+
+import android.net.MacAddress;
+import android.net.TetheredClient;
+import android.net.TetheredClient.AddressInfo;
+import android.net.ip.IpServer;
+import android.net.wifi.WifiClient;
+import android.os.SystemClock;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
+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.Set;
+
+/**
+ * Tracker for clients connected to downstreams.
+ *
+ * <p>This class is not thread safe, it is intended to be used only from the tethering handler
+ * thread.
+ */
+public class ConnectedClientsTracker {
+    private final Clock mClock;
+
+    @NonNull
+    private List<WifiClient> mLastWifiClients = Collections.emptyList();
+    @NonNull
+    private List<TetheredClient> mLastTetheredClients = Collections.emptyList();
+
+    @VisibleForTesting
+    static class Clock {
+        public long elapsedRealtime() {
+            return SystemClock.elapsedRealtime();
+        }
+    }
+
+    public ConnectedClientsTracker() {
+        this(new Clock());
+    }
+
+    @VisibleForTesting
+    ConnectedClientsTracker(Clock clock) {
+        mClock = clock;
+    }
+
+    /**
+     * Update the tracker with new connected clients.
+     *
+     * <p>The new list can be obtained through {@link #getLastTetheredClients()}.
+     * @param ipServers The IpServers used to assign addresses to clients.
+     * @param wifiClients The list of L2-connected WiFi clients. Null for no change since last
+     *                    update.
+     * @return True if the list of clients changed since the last calculation.
+     */
+    public boolean updateConnectedClients(
+            Iterable<IpServer> ipServers, @Nullable List<WifiClient> wifiClients) {
+        final long now = mClock.elapsedRealtime();
+
+        if (wifiClients != null) {
+            mLastWifiClients = wifiClients;
+        }
+        final Set<MacAddress> wifiClientMacs = getClientMacs(mLastWifiClients);
+
+        // Build the list of non-expired leases from all IpServers, grouped by mac address
+        final Map<MacAddress, TetheredClient> clientsMap = new HashMap<>();
+        for (IpServer server : ipServers) {
+            for (TetheredClient client : server.getAllLeases()) {
+                if (client.getTetheringType() == TETHERING_WIFI
+                        && !wifiClientMacs.contains(client.getMacAddress())) {
+                    // Skip leases of WiFi clients that are not (or no longer) L2-connected
+                    continue;
+                }
+                final TetheredClient prunedClient = pruneExpired(client, now);
+                if (prunedClient == null) continue; // All addresses expired
+
+                addLease(clientsMap, prunedClient);
+            }
+        }
+
+        // TODO: add IPv6 addresses from netlink
+
+        // Add connected WiFi clients that do not have any known address
+        for (MacAddress client : wifiClientMacs) {
+            if (clientsMap.containsKey(client)) continue;
+            clientsMap.put(client, new TetheredClient(
+                    client, Collections.emptyList() /* addresses */, TETHERING_WIFI));
+        }
+
+        final HashSet<TetheredClient> clients = new HashSet<>(clientsMap.values());
+        final boolean clientsChanged = clients.size() != mLastTetheredClients.size()
+                || !clients.containsAll(mLastTetheredClients);
+        mLastTetheredClients = Collections.unmodifiableList(new ArrayList<>(clients));
+        return clientsChanged;
+    }
+
+    private static void addLease(Map<MacAddress, TetheredClient> clientsMap, TetheredClient lease) {
+        final TetheredClient aggregateClient = clientsMap.getOrDefault(
+                lease.getMacAddress(), lease);
+        if (aggregateClient == lease) {
+            // This is the first lease with this mac address
+            clientsMap.put(lease.getMacAddress(), lease);
+            return;
+        }
+
+        // Only add the address info; this assumes that the tethering type is the same when the mac
+        // address is the same. If a client is connected through different tethering types with the
+        // same mac address, connected clients callbacks will report all of its addresses under only
+        // one of these tethering types. This keeps the API simple considering that such a scenario
+        // would really be a rare edge case.
+        clientsMap.put(lease.getMacAddress(), aggregateClient.addAddresses(lease));
+    }
+
+    /**
+     * Get the last list of tethered clients, as calculated in {@link #updateConnectedClients}.
+     *
+     * <p>The returned list is immutable.
+     */
+    @NonNull
+    public List<TetheredClient> getLastTetheredClients() {
+        return mLastTetheredClients;
+    }
+
+    private static boolean hasExpiredAddress(List<AddressInfo> addresses, long now) {
+        for (AddressInfo info : addresses) {
+            if (info.getExpirationTime() <= now) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Nullable
+    private static TetheredClient pruneExpired(TetheredClient client, long now) {
+        final List<AddressInfo> addresses = client.getAddresses();
+        if (addresses.size() == 0) return null;
+        if (!hasExpiredAddress(addresses, now)) return client;
+
+        final ArrayList<AddressInfo> newAddrs = new ArrayList<>(addresses.size() - 1);
+        for (AddressInfo info : addresses) {
+            if (info.getExpirationTime() > now) {
+                newAddrs.add(info);
+            }
+        }
+
+        if (newAddrs.size() == 0) {
+            return null;
+        }
+        return new TetheredClient(client.getMacAddress(), newAddrs, client.getTetheringType());
+    }
+
+    @NonNull
+    private static Set<MacAddress> getClientMacs(@NonNull List<WifiClient> clients) {
+        final Set<MacAddress> macs = new HashSet<>(clients.size());
+        for (WifiClient c : clients) {
+            macs.add(c.getMacAddress());
+        }
+        return macs;
+    }
+}
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/OffloadHardwareInterface.java b/packages/Tethering/src/com/android/server/connectivity/tethering/OffloadHardwareInterface.java
index 90b9d3f..b545717 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/OffloadHardwareInterface.java
+++ b/packages/Tethering/src/com/android/server/connectivity/tethering/OffloadHardwareInterface.java
@@ -18,19 +18,28 @@
 
 import static android.net.util.TetheringUtils.uint16;
 
+import android.hardware.tetheroffload.config.V1_0.IOffloadConfig;
 import android.hardware.tetheroffload.control.V1_0.IOffloadControl;
 import android.hardware.tetheroffload.control.V1_0.ITetheringOffloadCallback;
 import android.hardware.tetheroffload.control.V1_0.NatTimeoutUpdate;
 import android.hardware.tetheroffload.control.V1_0.NetworkProtocol;
 import android.hardware.tetheroffload.control.V1_0.OffloadCallbackEvent;
+import android.net.netlink.NetlinkSocket;
 import android.net.util.SharedLog;
-import android.net.util.TetheringUtils;
+import android.net.util.SocketUtils;
 import android.os.Handler;
+import android.os.NativeHandle;
 import android.os.RemoteException;
+import android.system.ErrnoException;
+import android.system.Os;
 import android.system.OsConstants;
 
 import com.android.internal.annotations.VisibleForTesting;
 
+import java.io.FileDescriptor;
+import java.io.IOException;
+import java.net.SocketAddress;
+import java.net.SocketException;
 import java.util.ArrayList;
 
 
@@ -49,6 +58,10 @@
     private static final String NO_INTERFACE_NAME = "";
     private static final String NO_IPV4_ADDRESS = "";
     private static final String NO_IPV4_GATEWAY = "";
+    // Reference kernel/uapi/linux/netfilter/nfnetlink_compat.h
+    private static final int NF_NETLINK_CONNTRACK_NEW = 1;
+    private static final int NF_NETLINK_CONNTRACK_UPDATE = 2;
+    private static final int NF_NETLINK_CONNTRACK_DESTROY = 4;
 
     private final Handler mHandler;
     private final SharedLog mLog;
@@ -121,9 +134,103 @@
         return DEFAULT_TETHER_OFFLOAD_DISABLED;
     }
 
-    /** Configure offload management process. */
+    /**
+     * Offload management process need to know conntrack rules to support NAT, but it may not have
+     * permission to create netlink netfilter sockets. Create two netlink netfilter sockets and
+     * share them with offload management process.
+     */
     public boolean initOffloadConfig() {
-        return TetheringUtils.configOffload();
+        IOffloadConfig offloadConfig;
+        try {
+            offloadConfig = IOffloadConfig.getService();
+        } catch (RemoteException e) {
+            mLog.e("getIOffloadConfig error " + e);
+            return false;
+        }
+        if (offloadConfig == null) {
+            mLog.e("Could not find IOffloadConfig service");
+            return false;
+        }
+        // Per the IConfigOffload definition:
+        //
+        // h1    provides a file descriptor bound to the following netlink groups
+        //       (NF_NETLINK_CONNTRACK_NEW | NF_NETLINK_CONNTRACK_DESTROY).
+        //
+        // h2    provides a file descriptor bound to the following netlink groups
+        //       (NF_NETLINK_CONNTRACK_UPDATE | NF_NETLINK_CONNTRACK_DESTROY).
+        final NativeHandle h1 = createConntrackSocket(
+                NF_NETLINK_CONNTRACK_NEW | NF_NETLINK_CONNTRACK_DESTROY);
+        if (h1 == null) return false;
+
+        final NativeHandle h2 = createConntrackSocket(
+                NF_NETLINK_CONNTRACK_UPDATE | NF_NETLINK_CONNTRACK_DESTROY);
+        if (h2 == null) {
+            closeFdInNativeHandle(h1);
+            return false;
+        }
+
+        final CbResults results = new CbResults();
+        try {
+            offloadConfig.setHandles(h1, h2,
+                    (boolean success, String errMsg) -> {
+                        results.mSuccess = success;
+                        results.mErrMsg = errMsg;
+                    });
+        } catch (RemoteException e) {
+            record("initOffloadConfig, setHandles fail", e);
+            return false;
+        }
+        // Explicitly close FDs.
+        closeFdInNativeHandle(h1);
+        closeFdInNativeHandle(h2);
+
+        record("initOffloadConfig, setHandles results:", results);
+        return results.mSuccess;
+    }
+
+    private void closeFdInNativeHandle(final NativeHandle h) {
+        try {
+            h.close();
+        } catch (IOException | IllegalStateException e) {
+            // IllegalStateException means fd is already closed, do nothing here.
+            // Also nothing we can do if IOException.
+        }
+    }
+
+    private NativeHandle createConntrackSocket(final int groups) {
+        FileDescriptor fd;
+        try {
+            fd = NetlinkSocket.forProto(OsConstants.NETLINK_NETFILTER);
+        } catch (ErrnoException e) {
+            mLog.e("Unable to create conntrack socket " + e);
+            return null;
+        }
+
+        final SocketAddress sockAddr = SocketUtils.makeNetlinkSocketAddress(0, groups);
+        try {
+            Os.bind(fd, sockAddr);
+        } catch (ErrnoException | SocketException e) {
+            mLog.e("Unable to bind conntrack socket for groups " + groups + " error: " + e);
+            try {
+                SocketUtils.closeSocket(fd);
+            } catch (IOException ie) {
+                // Nothing we can do here
+            }
+            return null;
+        }
+        try {
+            Os.connect(fd, sockAddr);
+        } catch (ErrnoException | SocketException e) {
+            mLog.e("connect to kernel fail for groups " + groups + " error: " + e);
+            try {
+                SocketUtils.closeSocket(fd);
+            } catch (IOException ie) {
+                // Nothing we can do here
+            }
+            return null;
+        }
+
+        return new NativeHandle(fd, true);
     }
 
     /** Initialize the tethering offload HAL. */
diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/Tethering.java b/packages/Tethering/src/com/android/server/connectivity/tethering/Tethering.java
index 39c402b..6261def 100644
--- a/packages/Tethering/src/com/android/server/connectivity/tethering/Tethering.java
+++ b/packages/Tethering/src/com/android/server/connectivity/tethering/Tethering.java
@@ -24,6 +24,7 @@
 import static android.net.ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED;
 import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
 import static android.net.ConnectivityManager.EXTRA_NETWORK_INFO;
+import static android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK;
 import static android.net.TetheringManager.ACTION_TETHER_STATE_CHANGED;
 import static android.net.TetheringManager.EXTRA_ACTIVE_LOCAL_ONLY;
 import static android.net.TetheringManager.EXTRA_ACTIVE_TETHER;
@@ -79,6 +80,7 @@
 import android.net.Network;
 import android.net.NetworkInfo;
 import android.net.TetherStatesParcel;
+import android.net.TetheredClient;
 import android.net.TetheringCallbackStartedParcel;
 import android.net.TetheringConfigurationParcel;
 import android.net.TetheringRequestParcel;
@@ -89,6 +91,7 @@
 import android.net.util.PrefixUtils;
 import android.net.util.SharedLog;
 import android.net.util.VersionedBroadcastListener;
+import android.net.wifi.WifiClient;
 import android.net.wifi.WifiManager;
 import android.net.wifi.p2p.WifiP2pGroup;
 import android.net.wifi.p2p.WifiP2pInfo;
@@ -128,8 +131,10 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashSet;
+import java.util.Collections;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.Executor;
 import java.util.concurrent.RejectedExecutionException;
@@ -145,6 +150,10 @@
     private static final boolean DBG = false;
     private static final boolean VDBG = false;
 
+    // TODO: add the below permissions to @SystemApi
+    private static final String PERMISSION_NETWORK_SETTINGS = "android.permission.NETWORK_SETTINGS";
+    private static final String PERMISSION_NETWORK_STACK = "android.permission.NETWORK_STACK";
+
     private static final Class[] sMessageClasses = {
             Tethering.class, TetherMasterSM.class, IpServer.class
     };
@@ -176,6 +185,17 @@
         }
     }
 
+    /**
+     * Cookie added when registering {@link android.net.TetheringManager.TetheringEventCallback}.
+     */
+    private static class CallbackCookie {
+        public final boolean hasListClientsPermission;
+
+        private CallbackCookie(boolean hasListClientsPermission) {
+            this.hasListClientsPermission = hasListClientsPermission;
+        }
+    }
+
     private final SharedLog mLog = new SharedLog(TAG);
     private final RemoteCallbackList<ITetheringEventCallback> mTetheringEventCallbacks =
             new RemoteCallbackList<>();
@@ -191,7 +211,8 @@
     private final UpstreamNetworkMonitor mUpstreamNetworkMonitor;
     // TODO: Figure out how to merge this and other downstream-tracking objects
     // into a single coherent structure.
-    private final HashSet<IpServer> mForwardedDownstreams;
+    // Use LinkedHashSet for predictable ordering order for ConnectedClientsTracker.
+    private final LinkedHashSet<IpServer> mForwardedDownstreams;
     private final VersionedBroadcastListener mCarrierConfigChange;
     private final TetheringDependencies mDeps;
     private final EntitlementManager mEntitlementMgr;
@@ -200,6 +221,7 @@
     private final NetdCallback mNetdCallback;
     private final UserRestrictionActionListener mTetheringRestriction;
     private final ActiveDataSubIdListener mActiveDataSubIdListener;
+    private final ConnectedClientsTracker mConnectedClientsTracker;
     private int mActiveDataSubId = INVALID_SUBSCRIPTION_ID;
     // All the usage of mTetheringEventCallback should run in the same thread.
     private ITetheringEventCallback mTetheringEventCallback = null;
@@ -234,6 +256,7 @@
         mPublicSync = new Object();
 
         mTetherStates = new ArrayMap<>();
+        mConnectedClientsTracker = new ConnectedClientsTracker();
 
         mTetherMasterSM = new TetherMasterSM("TetherMaster", mLooper, deps);
         mTetherMasterSM.start();
@@ -246,7 +269,7 @@
                 statsManager, mLog);
         mUpstreamNetworkMonitor = mDeps.getUpstreamNetworkMonitor(mContext, mTetherMasterSM, mLog,
                 TetherMasterSM.EVENT_UPSTREAM_CALLBACK);
-        mForwardedDownstreams = new HashSet<>();
+        mForwardedDownstreams = new LinkedHashSet<>();
 
         IntentFilter filter = new IntentFilter();
         filter.addAction(ACTION_CARRIER_CONFIG_CHANGED);
@@ -291,6 +314,9 @@
 
         startStateMachineUpdaters(mHandler);
         startTrackDefaultNetwork();
+        getWifiManager().registerSoftApCallback(
+                mHandler::post /* executor */,
+                new TetheringSoftApCallback());
     }
 
     private void startStateMachineUpdaters(Handler handler) {
@@ -385,6 +411,24 @@
         }
     }
 
+    private class TetheringSoftApCallback implements WifiManager.SoftApCallback {
+        // TODO: Remove onStateChanged override when this method has default on
+        // WifiManager#SoftApCallback interface.
+        // Wifi listener for state change of the soft AP
+        @Override
+        public void onStateChanged(final int state, final int failureReason) {
+            // Nothing
+        }
+
+        // Called by wifi when the number of soft AP clients changed.
+        @Override
+        public void onConnectedClientsChanged(final List<WifiClient> clients) {
+            if (mConnectedClientsTracker.updateConnectedClients(mForwardedDownstreams, clients)) {
+                reportTetherClientsChanged(mConnectedClientsTracker.getLastTetheredClients());
+            }
+        }
+    }
+
     void interfaceStatusChanged(String iface, boolean up) {
         // Never called directly: only called from interfaceLinkStateChanged.
         // See NetlinkHandler.cpp: notifyInterfaceChanged.
@@ -1938,13 +1982,21 @@
 
     /** Register tethering event callback */
     void registerTetheringEventCallback(ITetheringEventCallback callback) {
+        final boolean hasListPermission =
+                hasCallingPermission(PERMISSION_NETWORK_SETTINGS)
+                        || hasCallingPermission(PERMISSION_MAINLINE_NETWORK_STACK)
+                        || hasCallingPermission(PERMISSION_NETWORK_STACK);
         mHandler.post(() -> {
-            mTetheringEventCallbacks.register(callback);
+            mTetheringEventCallbacks.register(callback, new CallbackCookie(hasListPermission));
             final TetheringCallbackStartedParcel parcel = new TetheringCallbackStartedParcel();
             parcel.tetheringSupported = mDeps.isTetheringSupported();
             parcel.upstreamNetwork = mTetherUpstream;
             parcel.config = mConfig.toStableParcelable();
-            parcel.states = mTetherStatesParcel;
+            parcel.states =
+                    mTetherStatesParcel != null ? mTetherStatesParcel : emptyTetherStatesParcel();
+            parcel.tetheredClients = hasListPermission
+                    ? mConnectedClientsTracker.getLastTetheredClients()
+                    : Collections.emptyList();
             try {
                 callback.onCallbackStarted(parcel);
             } catch (RemoteException e) {
@@ -1953,6 +2005,21 @@
         });
     }
 
+    private TetherStatesParcel emptyTetherStatesParcel() {
+        final TetherStatesParcel parcel = new TetherStatesParcel();
+        parcel.availableList = new String[0];
+        parcel.tetheredList = new String[0];
+        parcel.localOnlyList = new String[0];
+        parcel.erroredIfaceList = new String[0];
+        parcel.lastErrorList = new int[0];
+
+        return parcel;
+    }
+
+    private boolean hasCallingPermission(@NonNull String permission) {
+        return mContext.checkCallingPermission(permission) == PERMISSION_GRANTED;
+    }
+
     /** Unregister tethering event callback */
     void unregisterTetheringEventCallback(ITetheringEventCallback callback) {
         mHandler.post(() -> {
@@ -2006,6 +2073,24 @@
         }
     }
 
+    private void reportTetherClientsChanged(List<TetheredClient> clients) {
+        final int length = mTetheringEventCallbacks.beginBroadcast();
+        try {
+            for (int i = 0; i < length; i++) {
+                try {
+                    final CallbackCookie cookie =
+                            (CallbackCookie) mTetheringEventCallbacks.getBroadcastCookie(i);
+                    if (!cookie.hasListClientsPermission) continue;
+                    mTetheringEventCallbacks.getBroadcastItem(i).onTetherClientsChanged(clients);
+                } catch (RemoteException e) {
+                    // Not really very much to do here.
+                }
+            }
+        } finally {
+            mTetheringEventCallbacks.finishBroadcast();
+        }
+    }
+
     void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter writer, @Nullable String[] args) {
         // Binder.java closes the resource for us.
         @SuppressWarnings("resource")
@@ -2097,6 +2182,14 @@
             public void updateLinkProperties(IpServer who, LinkProperties newLp) {
                 notifyLinkPropertiesChanged(who, newLp);
             }
+
+            @Override
+            public void dhcpLeasesChanged() {
+                if (mConnectedClientsTracker.updateConnectedClients(
+                        mForwardedDownstreams, null /* wifiClients */)) {
+                    reportTetherClientsChanged(mConnectedClientsTracker.getLastTetheredClients());
+                }
+            }
         };
     }
 
diff --git a/packages/Tethering/tests/unit/Android.bp b/packages/Tethering/tests/unit/Android.bp
index 13174c5..c6905ec 100644
--- a/packages/Tethering/tests/unit/Android.bp
+++ b/packages/Tethering/tests/unit/Android.bp
@@ -34,7 +34,15 @@
         "TetheringApiCurrentLib",
         "testables",
     ],
+    // TODO(b/147200698) change sdk_version to module-current and
+    // remove framework-minus-apex, ext, and framework-res
+    sdk_version: "core_platform",
     libs: [
+        "framework-minus-apex",
+        "ext",
+        "framework-res",
+        "framework-wifi-stubs",
+        "framework-telephony-stubs",
         "android.test.runner",
         "android.test.base",
         "android.test.mock",
diff --git a/packages/Tethering/tests/unit/src/android/net/TetheredClientTest.kt b/packages/Tethering/tests/unit/src/android/net/TetheredClientTest.kt
index 83c19ec..d85389a 100644
--- a/packages/Tethering/tests/unit/src/android/net/TetheredClientTest.kt
+++ b/packages/Tethering/tests/unit/src/android/net/TetheredClientTest.kt
@@ -75,7 +75,7 @@
         assertNotEquals(makeTestClient(), TetheredClient(
                 TEST_MACADDR,
                 listOf(TEST_ADDRINFO1, TEST_ADDRINFO2),
-                TETHERING_BLUETOOTH))
+                TETHERING_USB))
     }
 
     @Test
diff --git a/packages/Tethering/tests/unit/src/android/net/ip/IpServerTest.java b/packages/Tethering/tests/unit/src/android/net/ip/IpServerTest.java
index f29ad78..33b3558 100644
--- a/packages/Tethering/tests/unit/src/android/net/ip/IpServerTest.java
+++ b/packages/Tethering/tests/unit/src/android/net/ip/IpServerTest.java
@@ -29,6 +29,11 @@
 import static android.net.ip.IpServer.STATE_LOCAL_ONLY;
 import static android.net.ip.IpServer.STATE_TETHERED;
 import static android.net.ip.IpServer.STATE_UNAVAILABLE;
+import static android.net.netlink.NetlinkConstants.RTM_DELNEIGH;
+import static android.net.netlink.NetlinkConstants.RTM_NEWNEIGH;
+import static android.net.netlink.StructNdMsg.NUD_FAILED;
+import static android.net.netlink.StructNdMsg.NUD_REACHABLE;
+import static android.net.netlink.StructNdMsg.NUD_STALE;
 import static android.net.shared.Inet4AddressUtils.intToInet4AddressHTH;
 
 import static org.junit.Assert.assertEquals;
@@ -41,6 +46,7 @@
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.never;
@@ -52,6 +58,7 @@
 import static org.mockito.Mockito.when;
 
 import android.net.INetd;
+import android.net.InetAddresses;
 import android.net.InterfaceConfigurationParcel;
 import android.net.IpPrefix;
 import android.net.LinkAddress;
@@ -61,6 +68,8 @@
 import android.net.dhcp.DhcpServingParamsParcel;
 import android.net.dhcp.IDhcpServer;
 import android.net.dhcp.IDhcpServerCallbacks;
+import android.net.ip.IpNeighborMonitor.NeighborEvent;
+import android.net.ip.IpNeighborMonitor.NeighborEventConsumer;
 import android.net.util.InterfaceParams;
 import android.net.util.InterfaceSet;
 import android.net.util.SharedLog;
@@ -81,6 +90,7 @@
 import org.mockito.MockitoAnnotations;
 
 import java.net.Inet4Address;
+import java.net.InetAddress;
 
 @RunWith(AndroidJUnit4.class)
 @SmallTest
@@ -88,6 +98,8 @@
     private static final String IFACE_NAME = "testnet1";
     private static final String UPSTREAM_IFACE = "upstream0";
     private static final String UPSTREAM_IFACE2 = "upstream1";
+    private static final int UPSTREAM_IFINDEX = 101;
+    private static final int UPSTREAM_IFINDEX2 = 102;
     private static final String BLUETOOTH_IFACE_ADDR = "192.168.42.1";
     private static final int BLUETOOTH_DHCP_PREFIX_LENGTH = 24;
     private static final int DHCP_LEASE_TIME_SECS = 3600;
@@ -102,6 +114,7 @@
     @Mock private SharedLog mSharedLog;
     @Mock private IDhcpServer mDhcpServer;
     @Mock private RouterAdvertisementDaemon mRaDaemon;
+    @Mock private IpNeighborMonitor mIpNeighborMonitor;
     @Mock private IpServer.Dependencies mDependencies;
 
     @Captor private ArgumentCaptor<DhcpServingParamsParcel> mDhcpParamsCaptor;
@@ -111,6 +124,7 @@
             ArgumentCaptor.forClass(LinkProperties.class);
     private IpServer mIpServer;
     private InterfaceConfigurationParcel mInterfaceConfiguration;
+    private NeighborEventConsumer mNeighborEventConsumer;
 
     private void initStateMachine(int interfaceType) throws Exception {
         initStateMachine(interfaceType, false /* usingLegacyDhcp */);
@@ -130,16 +144,28 @@
         }).when(mDependencies).makeDhcpServer(any(), mDhcpParamsCaptor.capture(), any());
         when(mDependencies.getRouterAdvertisementDaemon(any())).thenReturn(mRaDaemon);
         when(mDependencies.getInterfaceParams(IFACE_NAME)).thenReturn(TEST_IFACE_PARAMS);
+
+        when(mDependencies.getIfindex(eq(UPSTREAM_IFACE))).thenReturn(UPSTREAM_IFINDEX);
+        when(mDependencies.getIfindex(eq(UPSTREAM_IFACE2))).thenReturn(UPSTREAM_IFINDEX2);
+
         mInterfaceConfiguration = new InterfaceConfigurationParcel();
         mInterfaceConfiguration.flags = new String[0];
         if (interfaceType == TETHERING_BLUETOOTH) {
             mInterfaceConfiguration.ipv4Addr = BLUETOOTH_IFACE_ADDR;
             mInterfaceConfiguration.prefixLength = BLUETOOTH_DHCP_PREFIX_LENGTH;
         }
+
+        ArgumentCaptor<NeighborEventConsumer> neighborCaptor =
+                ArgumentCaptor.forClass(NeighborEventConsumer.class);
+        doReturn(mIpNeighborMonitor).when(mDependencies).getIpNeighborMonitor(any(), any(),
+                neighborCaptor.capture());
+
         mIpServer = new IpServer(
                 IFACE_NAME, mLooper.getLooper(), interfaceType, mSharedLog, mNetd,
                 mCallback, usingLegacyDhcp, mDependencies);
         mIpServer.start();
+        mNeighborEventConsumer = neighborCaptor.getValue();
+
         // Starting the state machine always puts us in a consistent state and notifies
         // the rest of the world that we've changed from an unknown to available state.
         mLooper.dispatchAll();
@@ -158,7 +184,9 @@
         initStateMachine(interfaceType, usingLegacyDhcp);
         dispatchCommand(IpServer.CMD_TETHER_REQUESTED, STATE_TETHERED);
         if (upstreamIface != null) {
-            dispatchTetherConnectionChanged(upstreamIface);
+            LinkProperties lp = new LinkProperties();
+            lp.setInterfaceName(upstreamIface);
+            dispatchTetherConnectionChanged(upstreamIface, lp);
         }
         reset(mNetd, mCallback);
     }
@@ -170,6 +198,8 @@
 
     @Test
     public void startsOutAvailable() {
+        when(mDependencies.getIpNeighborMonitor(any(), any(), any()))
+                .thenReturn(mIpNeighborMonitor);
         mIpServer = new IpServer(IFACE_NAME, mLooper.getLooper(), TETHERING_BLUETOOTH, mSharedLog,
                 mNetd, mCallback, false /* usingLegacyDhcp */, mDependencies);
         mIpServer.start();
@@ -467,9 +497,93 @@
         verify(mDependencies, never()).makeDhcpServer(any(), any(), any());
     }
 
+    private InetAddress addr(String addr) throws Exception {
+        return InetAddresses.parseNumericAddress(addr);
+    }
+
+    private void recvNewNeigh(int ifindex, InetAddress addr, short nudState, MacAddress mac) {
+        mNeighborEventConsumer.accept(new NeighborEvent(0, RTM_NEWNEIGH, ifindex, addr,
+                nudState, mac));
+        mLooper.dispatchAll();
+    }
+
+    private void recvDelNeigh(int ifindex, InetAddress addr, short nudState, MacAddress mac) {
+        mNeighborEventConsumer.accept(new NeighborEvent(0, RTM_DELNEIGH, ifindex, addr,
+                nudState, mac));
+        mLooper.dispatchAll();
+    }
+
+    @Test
+    public void addRemoveipv6ForwardingRules() throws Exception {
+        initTetheredStateMachine(TETHERING_WIFI, UPSTREAM_IFACE, false /* usingLegacyDhcp */);
+
+        final int myIfindex = TEST_IFACE_PARAMS.index;
+        final int notMyIfindex = myIfindex - 1;
+
+        final MacAddress myMac = TEST_IFACE_PARAMS.macAddr;
+        final InetAddress neighA = InetAddresses.parseNumericAddress("2001:db8::1");
+        final InetAddress neighB = InetAddresses.parseNumericAddress("2001:db8::2");
+        final InetAddress neighLL = InetAddresses.parseNumericAddress("fe80::1");
+        final InetAddress neighMC = InetAddresses.parseNumericAddress("ff02::1234");
+        final MacAddress macA = MacAddress.fromString("00:00:00:00:00:0a");
+        final MacAddress macB = MacAddress.fromString("11:22:33:00:00:0b");
+
+        reset(mNetd);
+
+        // Events on other interfaces are ignored.
+        recvNewNeigh(notMyIfindex, neighA, NUD_REACHABLE, macA);
+        verifyNoMoreInteractions(mNetd);
+
+        // Events on this interface are received and sent to netd.
+        recvNewNeigh(myIfindex, neighA, NUD_REACHABLE, macA);
+        verify(mNetd).tetherRuleAddDownstreamIpv6(eq(myIfindex), eq(UPSTREAM_IFINDEX),
+                eq(neighA.getAddress()), eq(myMac.toByteArray()), eq(macA.toByteArray()));
+        reset(mNetd);
+
+        recvNewNeigh(myIfindex, neighB, NUD_REACHABLE, macB);
+        verify(mNetd).tetherRuleAddDownstreamIpv6(eq(myIfindex), eq(UPSTREAM_IFINDEX),
+                eq(neighB.getAddress()), eq(myMac.toByteArray()), eq(macB.toByteArray()));
+        reset(mNetd);
+
+        // Link-local and multicast neighbors are ignored.
+        recvNewNeigh(notMyIfindex, neighLL, NUD_REACHABLE, macA);
+        verifyNoMoreInteractions(mNetd);
+        recvNewNeigh(notMyIfindex, neighMC, NUD_REACHABLE, macA);
+        verifyNoMoreInteractions(mNetd);
+
+        // A neighbor that is no longer valid causes the rule to be removed.
+        recvNewNeigh(myIfindex, neighA, NUD_FAILED, macA);
+        verify(mNetd).tetherRuleRemoveDownstreamIpv6(eq(UPSTREAM_IFINDEX), eq(neighA.getAddress()));
+        reset(mNetd);
+
+        // A neighbor that is deleted causes the rule to be removed.
+        recvDelNeigh(myIfindex, neighB, NUD_STALE, macB);
+        verify(mNetd).tetherRuleRemoveDownstreamIpv6(eq(UPSTREAM_IFINDEX), eq(neighB.getAddress()));
+        reset(mNetd);
+
+        // Upstream changes result in deleting and re-adding the rules.
+        recvNewNeigh(myIfindex, neighA, NUD_REACHABLE, macA);
+        recvNewNeigh(myIfindex, neighB, NUD_REACHABLE, macB);
+        reset(mNetd);
+
+        InOrder inOrder = inOrder(mNetd);
+        LinkProperties lp = new LinkProperties();
+        lp.setInterfaceName(UPSTREAM_IFACE2);
+        dispatchTetherConnectionChanged(UPSTREAM_IFACE2, lp);
+        inOrder.verify(mNetd).tetherRuleAddDownstreamIpv6(eq(myIfindex), eq(UPSTREAM_IFINDEX2),
+                eq(neighA.getAddress()), eq(myMac.toByteArray()), eq(macA.toByteArray()));
+        inOrder.verify(mNetd).tetherRuleRemoveDownstreamIpv6(eq(UPSTREAM_IFINDEX),
+                    eq(neighA.getAddress()));
+        inOrder.verify(mNetd).tetherRuleAddDownstreamIpv6(eq(myIfindex), eq(UPSTREAM_IFINDEX2),
+                eq(neighB.getAddress()), eq(myMac.toByteArray()), eq(macB.toByteArray()));
+        inOrder.verify(mNetd).tetherRuleRemoveDownstreamIpv6(eq(UPSTREAM_IFINDEX),
+                eq(neighB.getAddress()));
+    }
+
     private void assertDhcpStarted(IpPrefix expectedPrefix) throws Exception {
         verify(mDependencies, times(1)).makeDhcpServer(eq(IFACE_NAME), any(), any());
-        verify(mDhcpServer, timeout(MAKE_DHCPSERVER_TIMEOUT_MS).times(1)).start(any());
+        verify(mDhcpServer, timeout(MAKE_DHCPSERVER_TIMEOUT_MS).times(1)).startWithCallbacks(
+                any(), any());
         final DhcpServingParamsParcel params = mDhcpParamsCaptor.getValue();
         // Last address byte is random
         assertTrue(expectedPrefix.contains(intToInet4AddressHTH(params.serverAddr)));
@@ -507,13 +621,21 @@
      *
      * @see #dispatchCommand(int)
      * @param upstreamIface String name of upstream interface (or null)
+     * @param v6lp IPv6 LinkProperties of the upstream interface, or null for an IPv4-only upstream.
      */
-    private void dispatchTetherConnectionChanged(String upstreamIface) {
+    private void dispatchTetherConnectionChanged(String upstreamIface, LinkProperties v6lp) {
         mIpServer.sendMessage(IpServer.CMD_TETHER_CONNECTION_CHANGED,
                 new InterfaceSet(upstreamIface));
+        if (v6lp != null) {
+            mIpServer.sendMessage(IpServer.CMD_IPV6_TETHER_UPDATE, v6lp);
+        }
         mLooper.dispatchAll();
     }
 
+    private void dispatchTetherConnectionChanged(String upstreamIface) {
+        dispatchTetherConnectionChanged(upstreamIface, null);
+    }
+
     private void assertIPv4AddressAndDirectlyConnectedRoute(LinkProperties lp) {
         // Find the first IPv4 LinkAddress.
         LinkAddress addr4 = null;
diff --git a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/ConnectedClientsTrackerTest.kt b/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/ConnectedClientsTrackerTest.kt
new file mode 100644
index 0000000..56f3e21
--- /dev/null
+++ b/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/ConnectedClientsTrackerTest.kt
@@ -0,0 +1,157 @@
+/*
+ * 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.connectivity.tethering
+
+import android.net.LinkAddress
+import android.net.MacAddress
+import android.net.TetheredClient
+import android.net.TetheredClient.AddressInfo
+import android.net.TetheringManager.TETHERING_USB
+import android.net.TetheringManager.TETHERING_WIFI
+import android.net.ip.IpServer
+import android.net.wifi.WifiClient
+import androidx.test.filters.SmallTest
+import androidx.test.runner.AndroidJUnit4
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.mock
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class ConnectedClientsTrackerTest {
+
+    private val server1 = mock(IpServer::class.java)
+    private val server2 = mock(IpServer::class.java)
+    private val servers = listOf(server1, server2)
+
+    private val clock = TestClock(1324L)
+
+    private val client1Addr = MacAddress.fromString("01:23:45:67:89:0A")
+    private val client1 = TetheredClient(client1Addr, listOf(
+            AddressInfo(LinkAddress("192.168.43.44/32"), null /* hostname */, clock.time + 20)),
+            TETHERING_WIFI)
+    private val wifiClient1 = makeWifiClient(client1Addr)
+    private val client2Addr = MacAddress.fromString("02:34:56:78:90:AB")
+    private val client2Exp30AddrInfo = AddressInfo(
+            LinkAddress("192.168.43.45/32"), "my_hostname", clock.time + 30)
+    private val client2 = TetheredClient(client2Addr, listOf(
+            client2Exp30AddrInfo,
+            AddressInfo(LinkAddress("2001:db8:12::34/72"), "other_hostname", clock.time + 10)),
+            TETHERING_WIFI)
+    private val wifiClient2 = makeWifiClient(client2Addr)
+    private val client3Addr = MacAddress.fromString("03:45:67:89:0A:BC")
+    private val client3 = TetheredClient(client3Addr,
+            listOf(AddressInfo(LinkAddress("2001:db8:34::34/72"), "other_other_hostname",
+                    clock.time + 10)),
+            TETHERING_USB)
+
+    @Test
+    fun testUpdateConnectedClients() {
+        doReturn(emptyList<TetheredClient>()).`when`(server1).allLeases
+        doReturn(emptyList<TetheredClient>()).`when`(server2).allLeases
+
+        val tracker = ConnectedClientsTracker(clock)
+        assertFalse(tracker.updateConnectedClients(servers, null))
+
+        // Obtain a lease for client 1
+        doReturn(listOf(client1)).`when`(server1).allLeases
+        assertSameClients(listOf(client1), assertNewClients(tracker, servers, listOf(wifiClient1)))
+
+        // Client 2 L2-connected, no lease yet
+        val client2WithoutAddr = TetheredClient(client2Addr, emptyList(), TETHERING_WIFI)
+        assertSameClients(listOf(client1, client2WithoutAddr),
+                assertNewClients(tracker, servers, listOf(wifiClient1, wifiClient2)))
+
+        // Client 2 lease obtained
+        doReturn(listOf(client1, client2)).`when`(server1).allLeases
+        assertSameClients(listOf(client1, client2), assertNewClients(tracker, servers, null))
+
+        // Client 3 lease obtained
+        doReturn(listOf(client3)).`when`(server2).allLeases
+        assertSameClients(listOf(client1, client2, client3),
+                assertNewClients(tracker, servers, null))
+
+        // Client 2 L2-disconnected
+        assertSameClients(listOf(client1, client3),
+                assertNewClients(tracker, servers, listOf(wifiClient1)))
+
+        // Client 1 L2-disconnected
+        assertSameClients(listOf(client3), assertNewClients(tracker, servers, emptyList()))
+
+        // Client 1 comes back
+        assertSameClients(listOf(client1, client3),
+                assertNewClients(tracker, servers, listOf(wifiClient1)))
+
+        // Leases lost, client 1 still L2-connected
+        doReturn(emptyList<TetheredClient>()).`when`(server1).allLeases
+        doReturn(emptyList<TetheredClient>()).`when`(server2).allLeases
+        assertSameClients(listOf(TetheredClient(client1Addr, emptyList(), TETHERING_WIFI)),
+                assertNewClients(tracker, servers, null))
+    }
+
+    @Test
+    fun testUpdateConnectedClients_LeaseExpiration() {
+        val tracker = ConnectedClientsTracker(clock)
+        doReturn(listOf(client1, client2)).`when`(server1).allLeases
+        doReturn(listOf(client3)).`when`(server2).allLeases
+        assertSameClients(listOf(client1, client2, client3), assertNewClients(
+                tracker, servers, listOf(wifiClient1, wifiClient2)))
+
+        clock.time += 20
+        // Client 3 has no remaining lease: removed
+        val expectedClients = listOf(
+                // Client 1 has no remaining lease but is L2-connected
+                TetheredClient(client1Addr, emptyList(), TETHERING_WIFI),
+                // Client 2 has some expired leases
+                TetheredClient(
+                        client2Addr,
+                        // Only the "t + 30" address is left, the "t + 10" address expired
+                        listOf(client2Exp30AddrInfo),
+                        TETHERING_WIFI))
+        assertSameClients(expectedClients, assertNewClients(tracker, servers, null))
+    }
+
+    private fun assertNewClients(
+        tracker: ConnectedClientsTracker,
+        ipServers: Iterable<IpServer>,
+        wifiClients: List<WifiClient>?
+    ): List<TetheredClient> {
+        assertTrue(tracker.updateConnectedClients(ipServers, wifiClients))
+        return tracker.lastTetheredClients
+    }
+
+    private fun assertSameClients(expected: List<TetheredClient>, actual: List<TetheredClient>) {
+        val expectedSet = HashSet(expected)
+        assertEquals(expected.size, expectedSet.size)
+        assertEquals(expectedSet, HashSet(actual))
+    }
+
+    private fun makeWifiClient(macAddr: MacAddress): WifiClient {
+        // Use a mock WifiClient as the constructor is not part of the WiFi module exported API.
+        return mock(WifiClient::class.java).apply { doReturn(macAddr).`when`(this).macAddress }
+    }
+
+    private class TestClock(var time: Long) : ConnectedClientsTracker.Clock() {
+        override fun elapsedRealtime(): Long {
+            return time
+        }
+    }
+}
\ No newline at end of file
diff --git a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringTest.java b/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringTest.java
index 4710287..f2074bd 100644
--- a/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringTest.java
+++ b/packages/Tethering/tests/unit/src/com/android/server/connectivity/tethering/TetheringTest.java
@@ -88,12 +88,14 @@
 import android.net.NetworkRequest;
 import android.net.RouteInfo;
 import android.net.TetherStatesParcel;
+import android.net.TetheredClient;
 import android.net.TetheringCallbackStartedParcel;
 import android.net.TetheringConfigurationParcel;
 import android.net.TetheringRequestParcel;
 import android.net.dhcp.DhcpServerCallbacks;
 import android.net.dhcp.DhcpServingParamsParcel;
 import android.net.dhcp.IDhcpServer;
+import android.net.ip.IpNeighborMonitor;
 import android.net.ip.IpServer;
 import android.net.ip.RouterAdvertisementDaemon;
 import android.net.util.InterfaceParams;
@@ -127,6 +129,7 @@
 import com.android.internal.util.test.BroadcastInterceptingContext;
 import com.android.internal.util.test.FakeSettingsProvider;
 import com.android.networkstack.tethering.R;
+import com.android.testutils.MiscAssertsKt;
 
 import org.junit.After;
 import org.junit.Before;
@@ -141,6 +144,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.List;
 import java.util.Vector;
 
 @RunWith(AndroidJUnit4.class)
@@ -170,6 +174,7 @@
     @Mock private UpstreamNetworkMonitor mUpstreamNetworkMonitor;
     @Mock private IPv6TetheringCoordinator mIPv6TetheringCoordinator;
     @Mock private RouterAdvertisementDaemon mRouterAdvertisementDaemon;
+    @Mock private IpNeighborMonitor mIpNeighborMonitor;
     @Mock private IDhcpServer mDhcpServer;
     @Mock private INetd mNetd;
     @Mock private UserManager mUserManager;
@@ -275,6 +280,11 @@
                 }
             }).run();
         }
+
+        public IpNeighborMonitor getIpNeighborMonitor(Handler h, SharedLog l,
+                IpNeighborMonitor.NeighborEventConsumer c) {
+            return mIpNeighborMonitor;
+        }
     }
 
     private class MockTetheringConfiguration extends TetheringConfiguration {
@@ -469,6 +479,7 @@
                 ArgumentCaptor.forClass(PhoneStateListener.class);
         verify(mTelephonyManager).listen(phoneListenerCaptor.capture(),
                 eq(PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE));
+        verify(mWifiManager).registerSoftApCallback(any(), any());
         mPhoneStateListener = phoneListenerCaptor.getValue();
     }
 
@@ -727,7 +738,8 @@
 
         sendIPv6TetherUpdates(upstreamState);
         verify(mRouterAdvertisementDaemon, never()).buildNewRa(any(), notNull());
-        verify(mDhcpServer, timeout(DHCPSERVER_START_TIMEOUT_MS).times(1)).start(any());
+        verify(mDhcpServer, timeout(DHCPSERVER_START_TIMEOUT_MS).times(1)).startWithCallbacks(
+                any(), any());
     }
 
     @Test
@@ -763,7 +775,8 @@
         verify(mNetd, times(1)).tetherAddForward(TEST_USB_IFNAME, TEST_MOBILE_IFNAME);
         verify(mNetd, times(1)).ipfwdAddInterfaceForward(TEST_USB_IFNAME, TEST_MOBILE_IFNAME);
         verify(mRouterAdvertisementDaemon, times(1)).start();
-        verify(mDhcpServer, timeout(DHCPSERVER_START_TIMEOUT_MS).times(1)).start(any());
+        verify(mDhcpServer, timeout(DHCPSERVER_START_TIMEOUT_MS).times(1)).startWithCallbacks(
+                any(), any());
 
         sendIPv6TetherUpdates(upstreamState);
         verify(mRouterAdvertisementDaemon, times(1)).buildNewRa(any(), notNull());
@@ -777,7 +790,8 @@
 
         verify(mNetd, times(1)).tetherAddForward(TEST_USB_IFNAME, TEST_XLAT_MOBILE_IFNAME);
         verify(mNetd, times(1)).tetherAddForward(TEST_USB_IFNAME, TEST_MOBILE_IFNAME);
-        verify(mDhcpServer, timeout(DHCPSERVER_START_TIMEOUT_MS).times(1)).start(any());
+        verify(mDhcpServer, timeout(DHCPSERVER_START_TIMEOUT_MS).times(1)).startWithCallbacks(
+                any(), any());
         verify(mNetd, times(1)).ipfwdAddInterfaceForward(TEST_USB_IFNAME, TEST_XLAT_MOBILE_IFNAME);
         verify(mNetd, times(1)).ipfwdAddInterfaceForward(TEST_USB_IFNAME, TEST_MOBILE_IFNAME);
 
@@ -793,7 +807,8 @@
         runUsbTethering(upstreamState);
 
         verify(mNetd, times(1)).tetherAddForward(TEST_USB_IFNAME, TEST_MOBILE_IFNAME);
-        verify(mDhcpServer, timeout(DHCPSERVER_START_TIMEOUT_MS).times(1)).start(any());
+        verify(mDhcpServer, timeout(DHCPSERVER_START_TIMEOUT_MS).times(1)).startWithCallbacks(
+                any(), any());
         verify(mNetd, times(1)).ipfwdAddInterfaceForward(TEST_USB_IFNAME, TEST_MOBILE_IFNAME);
 
         // Then 464xlat comes up
@@ -816,7 +831,8 @@
         verify(mNetd, times(1)).tetherAddForward(TEST_USB_IFNAME, TEST_MOBILE_IFNAME);
         verify(mNetd, times(1)).ipfwdAddInterfaceForward(TEST_USB_IFNAME, TEST_MOBILE_IFNAME);
         // DHCP not restarted on downstream (still times(1))
-        verify(mDhcpServer, timeout(DHCPSERVER_START_TIMEOUT_MS).times(1)).start(any());
+        verify(mDhcpServer, timeout(DHCPSERVER_START_TIMEOUT_MS).times(1)).startWithCallbacks(
+                any(), any());
     }
 
     @Test
@@ -846,7 +862,8 @@
     public void workingNcmTethering() throws Exception {
         runNcmTethering();
 
-        verify(mDhcpServer, timeout(DHCPSERVER_START_TIMEOUT_MS).times(1)).start(any());
+        verify(mDhcpServer, timeout(DHCPSERVER_START_TIMEOUT_MS).times(1)).startWithCallbacks(
+                any(), any());
     }
 
     @Test
@@ -1170,6 +1187,11 @@
         }
 
         @Override
+        public void onTetherClientsChanged(List<TetheredClient> clients) {
+            // TODO: check this
+        }
+
+        @Override
         public void onCallbackStarted(TetheringCallbackStartedParcel parcel) {
             mActualUpstreams.add(parcel.upstreamNetwork);
             mTetheringConfigs.add(parcel.config);
@@ -1220,6 +1242,16 @@
         }
     }
 
+    private void assertTetherStatesNotNullButEmpty(final TetherStatesParcel parcel) {
+        assertFalse(parcel == null);
+        assertEquals(0, parcel.availableList.length);
+        assertEquals(0, parcel.tetheredList.length);
+        assertEquals(0, parcel.localOnlyList.length);
+        assertEquals(0, parcel.erroredIfaceList.length);
+        assertEquals(0, parcel.lastErrorList.length);
+        MiscAssertsKt.assertFieldCountEquals(5, TetherStatesParcel.class);
+    }
+
     @Test
     public void testRegisterTetheringEventCallback() throws Exception {
         TestTetheringEventCallback callback = new TestTetheringEventCallback();
@@ -1232,7 +1264,7 @@
         callback.expectConfigurationChanged(
                 mTethering.getTetheringConfiguration().toStableParcelable());
         TetherStatesParcel tetherState = callback.pollTetherStatesChanged();
-        assertEquals(tetherState, null);
+        assertTetherStatesNotNullButEmpty(tetherState);
         // 2. Enable wifi tethering.
         UpstreamNetworkState upstreamState = buildMobileDualStackUpstreamState();
         when(mUpstreamNetworkMonitor.getCurrentPreferredUpstream()).thenReturn(upstreamState);
diff --git a/packages/WAPPushManager/Android.bp b/packages/WAPPushManager/Android.bp
index cd804b2..083dac9 100644
--- a/packages/WAPPushManager/Android.bp
+++ b/packages/WAPPushManager/Android.bp
@@ -4,6 +4,7 @@
     name: "WAPPushManager",
     srcs: ["src/**/*.java"],
     platform_apis: true,
+    libs: ["telephony-common"],
     static_libs: ["android-common"],
     optimize: {
         proguard_flags_files: ["proguard.flags"],
diff --git a/packages/overlays/Android.mk b/packages/overlays/Android.mk
index fc7709c..dcdb80b 100644
--- a/packages/overlays/Android.mk
+++ b/packages/overlays/Android.mk
@@ -28,6 +28,7 @@
 	DisplayCutoutEmulationDoubleOverlay \
         DisplayCutoutEmulationHoleOverlay \
 	DisplayCutoutEmulationTallOverlay \
+	DisplayCutoutEmulationWaterfallOverlay \
 	FontNotoSerifSourceOverlay \
 	IconPackCircularAndroidOverlay \
 	IconPackCircularLauncherOverlay \
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-af/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-af/strings.xml
new file mode 100644
index 0000000..74d3ba0
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-af/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Pons gaatjie-uitsnede"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-am/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-am/strings.xml
new file mode 100644
index 0000000..eaf453d
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-am/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"የመብሻ ቀዳዳ ቁራጭ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ar/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ar/strings.xml
new file mode 100644
index 0000000..442758e
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ar/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"‏صورة مقطوعة Punch Hole"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-as/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-as/strings.xml
new file mode 100644
index 0000000..774800b
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-as/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Holeৰ কাটআউট"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-az/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-az/strings.xml
new file mode 100644
index 0000000..90b31f2
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-az/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Dəlik kəsimi"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..97d544c
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Izrezana slika u obliku rupe"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-be/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-be/strings.xml
new file mode 100644
index 0000000..6788b35
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-be/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Круглы выраз для камеры"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-bg/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-bg/strings.xml
new file mode 100644
index 0000000..b268b31
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-bg/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Прорез във формата на дупка"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-bn/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-bn/strings.xml
new file mode 100644
index 0000000..3e9c962
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-bn/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"পাঞ্চ হোল কাট-আউট"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-bs/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-bs/strings.xml
new file mode 100644
index 0000000..953cafe
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-bs/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Urez za rupicu"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ca/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ca/strings.xml
new file mode 100644
index 0000000..c4b1b4b
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ca/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Retall de perforadora"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-cs/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-cs/strings.xml
new file mode 100644
index 0000000..19ad7aa
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-cs/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Výřez pomocí děrovačky"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-da/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-da/strings.xml
new file mode 100644
index 0000000..26ada67
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-da/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Udskåret hul"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-de/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-de/strings.xml
new file mode 100644
index 0000000..d84bbe2
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-de/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Ausschnitt für Punch-Hole-Display"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-el/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-el/strings.xml
new file mode 100644
index 0000000..e18a0a8
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-el/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Εγκοπή οθόνης"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rAU/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..9db960f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rAU/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch hole cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..9db960f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rCA/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch hole cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rGB/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..9db960f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rGB/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch hole cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rIN/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..9db960f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rIN/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch hole cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rXC/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..e1a6de2
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-en-rXC/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎Punch Hole cutout‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-es-rUS/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..7483f84
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-es-rUS/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Corte de perforadora"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-es/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-es/strings.xml
new file mode 100644
index 0000000..fcca337
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-es/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Recorte redondo"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-et/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-et/strings.xml
new file mode 100644
index 0000000..910a88c
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-et/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Kaameraava ekraanil"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-eu/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-eu/strings.xml
new file mode 100644
index 0000000..d1f538b
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-eu/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Zulotxo biribil moduko mozketa"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-fa/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-fa/strings.xml
new file mode 100644
index 0000000..cf3ec24
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-fa/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"‏برش Punch Hole"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-fi/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-fi/strings.xml
new file mode 100644
index 0000000..39d5ec7
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-fi/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Hole ‑lovi"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-fr-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..8927901
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-fr-rCA/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Trou de poinçon"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-fr/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-fr/strings.xml
new file mode 100644
index 0000000..c848339
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-fr/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Encoche en forme de poinçon"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-gl/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-gl/strings.xml
new file mode 100644
index 0000000..fcca337
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-gl/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Recorte redondo"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-gu/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-gu/strings.xml
new file mode 100644
index 0000000..b7a5450
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-gu/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"પંચ હોલ કટઆઉટ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-hi/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-hi/strings.xml
new file mode 100644
index 0000000..096cfc9
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-hi/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"पंच होल कटआउट"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-hr/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-hr/strings.xml
new file mode 100644
index 0000000..953cafe
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-hr/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Urez za rupicu"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-hu/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-hu/strings.xml
new file mode 100644
index 0000000..605484f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-hu/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Hole kameralyuk"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-hy/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-hy/strings.xml
new file mode 100644
index 0000000..d8c3991
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-hy/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Hole կտրվածք"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-in/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-in/strings.xml
new file mode 100644
index 0000000..288d1ac
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-in/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Potongan Lubang Kertas"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-is/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-is/strings.xml
new file mode 100644
index 0000000..aca8eae
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-is/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Útskorið gat"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-it/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-it/strings.xml
new file mode 100644
index 0000000..6fd93cb
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-it/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Ritaglio per hole punch"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-iw/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-iw/strings.xml
new file mode 100644
index 0000000..8e5e58b
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-iw/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"מגרעת ניקוב"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ja/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ja/strings.xml
new file mode 100644
index 0000000..567004d
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ja/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"パンチホールのカットアウト"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ka/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ka/strings.xml
new file mode 100644
index 0000000..6a79b00
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ka/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Hole ამოჭრა"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-kk/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-kk/strings.xml
new file mode 100644
index 0000000..46d12e6
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-kk/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Hole саңылауы"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-km/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-km/strings.xml
new file mode 100644
index 0000000..e93840e
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-km/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"រន្ធចោះ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-kn/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-kn/strings.xml
new file mode 100644
index 0000000..b7b61f7
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-kn/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"ಪಂಚ್ ಹೋಲ್ ಕಟ್‌ಔಟ್"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ko/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ko/strings.xml
new file mode 100644
index 0000000..cb188bf
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ko/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"펀치홀 컷아웃"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ky/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ky/strings.xml
new file mode 100644
index 0000000..5bf95bf
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ky/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Муштап тешүү кесиндиси"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-lo/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-lo/strings.xml
new file mode 100644
index 0000000..c541ec82
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-lo/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"ການຕັດຮອຍບາກ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-lt/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-lt/strings.xml
new file mode 100644
index 0000000..9546599
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-lt/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Perforuotos angos išpjova"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-lv/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-lv/strings.xml
new file mode 100644
index 0000000..8974b41
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-lv/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Caurumotāja izgriezums"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-mk/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-mk/strings.xml
new file mode 100644
index 0000000..3f6d2f8
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-mk/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Отвор Punch Hole"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ml/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ml/strings.xml
new file mode 100644
index 0000000..6855972
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ml/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Hole കട്ടൗട്ട്"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-mn/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-mn/strings.xml
new file mode 100644
index 0000000..032ee5e
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-mn/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Дэлгэцийн нүх таслах"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-mr/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-mr/strings.xml
new file mode 100644
index 0000000..096cfc9
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-mr/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"पंच होल कटआउट"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ms/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ms/strings.xml
new file mode 100644
index 0000000..0e52c4f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ms/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Keratan Punch Hole"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-my/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-my/strings.xml
new file mode 100644
index 0000000..93205a2
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-my/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"အပေါက်ဖောက်ရန် နေရာ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-nb/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-nb/strings.xml
new file mode 100644
index 0000000..fd22623
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-nb/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Hole-utklipp"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ne/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ne/strings.xml
new file mode 100644
index 0000000..0fe66ae
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ne/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Hole सम्बन्धी कटआउट"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-nl/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-nl/strings.xml
new file mode 100644
index 0000000..4e947cb
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-nl/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Hole-cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-or/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-or/strings.xml
new file mode 100644
index 0000000..f68f437
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-or/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"ପଞ୍ଚ ହୋଲ୍ କଟଆଉଟ୍"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pa/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pa/strings.xml
new file mode 100644
index 0000000..a0f9e6d
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pa/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"ਪੰਚ ਛੇਕ ਕੱਟਆਊਟ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pl/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pl/strings.xml
new file mode 100644
index 0000000..feb551f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pl/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Wycięcie na wyświetlaczu"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000..d033c34
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pt-rBR/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Recorte da câmera embutida"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..eeefd7e
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pt-rPT/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Recorte no ecrã"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pt/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pt/strings.xml
new file mode 100644
index 0000000..d033c34
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-pt/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Recorte da câmera embutida"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ro/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ro/strings.xml
new file mode 100644
index 0000000..17b1c70
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ro/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Decupaj Punch Hole"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ru/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ru/strings.xml
new file mode 100644
index 0000000..7afd7ea
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ru/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Вырез Punch Hole"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-si/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-si/strings.xml
new file mode 100644
index 0000000..819f3b7
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-si/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"සිදුරු වහරුව සිදුරු කරන්න"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sk/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sk/strings.xml
new file mode 100644
index 0000000..04ab124
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sk/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Výrez Punch Hole"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sl/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sl/strings.xml
new file mode 100644
index 0000000..6a224cef
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sl/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Zareza Punch Hole"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sq/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sq/strings.xml
new file mode 100644
index 0000000..6f5e96f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sq/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Prerja e vrimës së kamerës"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sr/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sr/strings.xml
new file mode 100644
index 0000000..411ab7a
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sr/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Изрезана слика у облику рупе"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sv/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sv/strings.xml
new file mode 100644
index 0000000..e87a759
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sv/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Kamerahål"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sw/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sw/strings.xml
new file mode 100644
index 0000000..658bba1
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-sw/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Mkato wa Punch Hole"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-te/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-te/strings.xml
new file mode 100644
index 0000000..60d3a87
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-te/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"పంచ్ హోల్ కట్అవుట్"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-th/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-th/strings.xml
new file mode 100644
index 0000000..270492b
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-th/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"คัตเอาท์แบบเจาะรู"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-tl/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-tl/strings.xml
new file mode 100644
index 0000000..e7ec332
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-tl/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Hole cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-tr/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-tr/strings.xml
new file mode 100644
index 0000000..7b45f0c
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-tr/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Delgeç Deliği kesimi"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-uk/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-uk/strings.xml
new file mode 100644
index 0000000..dff9131
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-uk/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Круглий виріз"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ur/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ur/strings.xml
new file mode 100644
index 0000000..0068410
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-ur/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"پنچ ہول کٹ آؤٹ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-uz/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-uz/strings.xml
new file mode 100644
index 0000000..add9ca0
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-uz/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Hole kesimi"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-vi/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-vi/strings.xml
new file mode 100644
index 0000000..b47fb25
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-vi/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Vết cắt trên Punch Hole"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-zh-rCN/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..a3b1c6a
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-zh-rCN/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"打孔屏"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..f2878b6
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-zh-rHK/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Punch Hole 凹口"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..8c7287e
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-zh-rTW/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"「鑽孔」設計凹口"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-zu/strings.xml b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-zu/strings.xml
new file mode 100644
index 0000000..24bace5
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationHoleOverlay/res/values-zu/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="7305489596221077240">"Bhoboza Imbobo ngokusika"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/Android.mk b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/Android.mk
new file mode 100644
index 0000000..b6b6dd1
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/Android.mk
@@ -0,0 +1,14 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_RRO_THEME := DisplayCutoutEmulationWaterfall
+
+
+LOCAL_PRODUCT_MODULE := true
+
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+LOCAL_PACKAGE_NAME := DisplayCutoutEmulationWaterfallOverlay
+LOCAL_SDK_VERSION := current
+
+include $(BUILD_RRO_PACKAGE)
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/AndroidManifest.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/AndroidManifest.xml
new file mode 100644
index 0000000..2d5bb14
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/AndroidManifest.xml
@@ -0,0 +1,26 @@
+<!--
+  ~ 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.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.internal.display.cutout.emulation.waterfall"
+        android:versionCode="1"
+        android:versionName="1.0">
+    <overlay android:targetPackage="android"
+        android:category="com.android.internal.display_cutout_emulation"
+        android:priority="1"/>
+
+    <application android:label="@string/display_cutout_emulation_overlay" android:hasCode="false"/>
+</manifest>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-af/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-af/strings.xml
new file mode 100644
index 0000000..c03d839
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-af/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Watervaluitsnede"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-am/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-am/strings.xml
new file mode 100644
index 0000000..05ff27d
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-am/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"የፏፏቴ ቁራጭ ምስል"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-as/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-as/strings.xml
new file mode 100644
index 0000000..4e5164e
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-as/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"জলপ্ৰপাতৰ কাটআউট"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-az/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-az/strings.xml
new file mode 100644
index 0000000..c862bee
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-az/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Şəlalə formalı kəsim"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..4cb324c
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Izrezani slap"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-be/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-be/strings.xml
new file mode 100644
index 0000000..aa9efb1
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-be/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Выраз для перацякальнага экрана"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-bg/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-bg/strings.xml
new file mode 100644
index 0000000..b08218e
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-bg/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Прорез във формата на водопад"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-bs/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-bs/strings.xml
new file mode 100644
index 0000000..c9cff08
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-bs/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Urez vodopada"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ca/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ca/strings.xml
new file mode 100644
index 0000000..ce34d7c
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ca/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Retall de cascada"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-cs/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-cs/strings.xml
new file mode 100644
index 0000000..bee3b94
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-cs/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Kaskádovitý výřez"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-da/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-da/strings.xml
new file mode 100644
index 0000000..38601bf
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-da/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Vandfaldshak"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-de/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-de/strings.xml
new file mode 100644
index 0000000..adcd11c
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-de/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Aussparung für Wasserfall-Display"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-el/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-el/strings.xml
new file mode 100644
index 0000000..bab506f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-el/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Εγκοπή waterfall"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rAU/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..baaa626
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rAU/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Waterfall cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..baaa626
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rCA/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Waterfall cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rGB/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..baaa626
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rGB/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Waterfall cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rIN/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..baaa626
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rIN/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Waterfall cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rXC/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..699ce08
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-en-rXC/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‏‎Waterfall cutout‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-es-rUS/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..07177b7
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-es-rUS/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Corte de cascada"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-es/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-es/strings.xml
new file mode 100644
index 0000000..7f76d3f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-es/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Recorte de cascada"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-et/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-et/strings.xml
new file mode 100644
index 0000000..7f532bfb
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-et/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Joa väljalõige"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-fa/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-fa/strings.xml
new file mode 100644
index 0000000..dd216bb
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-fa/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"لبه آبشاری"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-fi/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-fi/strings.xml
new file mode 100644
index 0000000..edb2e1d
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-fi/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Vesiputouslovi"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-fr/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-fr/strings.xml
new file mode 100644
index 0000000..7232c33
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-fr/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Encoche en cascade"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-gl/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-gl/strings.xml
new file mode 100644
index 0000000..1c98600
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-gl/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Recorte da fervenza"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-hr/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-hr/strings.xml
new file mode 100644
index 0000000..4cb324c
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-hr/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Izrezani slap"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-hu/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-hu/strings.xml
new file mode 100644
index 0000000..190fd1a
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-hu/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Waterfall kialakítás"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-hy/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-hy/strings.xml
new file mode 100644
index 0000000..d684f23
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-hy/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Ջրվեժի տեսքով կտրվածք"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-in/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-in/strings.xml
new file mode 100644
index 0000000..f0c3177
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-in/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Potongan waterfall"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-is/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-is/strings.xml
new file mode 100644
index 0000000..f93a7bd
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-is/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Útklipptur foss"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-it/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-it/strings.xml
new file mode 100644
index 0000000..dde9914
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-it/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Ritaglio a cascata"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-iw/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-iw/strings.xml
new file mode 100644
index 0000000..f71a879
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-iw/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"מגרעת מפל"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ja/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ja/strings.xml
new file mode 100644
index 0000000..354ce59
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ja/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"ウォーターフォールのカットアウト"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ka/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ka/strings.xml
new file mode 100644
index 0000000..e0bb4dd8
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ka/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"ჩანჩქერის ამოჭრა"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-km/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-km/strings.xml
new file mode 100644
index 0000000..8d2f887
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-km/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"អេក្រង់​គ្មានគែម"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-kn/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-kn/strings.xml
new file mode 100644
index 0000000..2420f9a
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-kn/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"ವಾಟರ್‌ಫಾಲ್ ಕಟ್‌ಔಟ್"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ko/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ko/strings.xml
new file mode 100644
index 0000000..4665412
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ko/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"폭포 컷아웃"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-land/config.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-land/config.xml
new file mode 100644
index 0000000..df2f3d1
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-land/config.xml
@@ -0,0 +1,22 @@
+<!--
+  ~ 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>
+    <!-- Can't link to other dimensions here, but this should be status_bar_height_landscape -->
+    <dimen name="quick_qs_offset_height">48dp</dimen>
+    <!-- Total height of QQS in landscape; quick_qs_offset_height + 128 -->
+    <dimen name="quick_qs_total_height">176dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-lo/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-lo/strings.xml
new file mode 100644
index 0000000..520bbeb
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-lo/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"ຮອຍບາກແບບນ້ຳຕົກຕາດ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-lt/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-lt/strings.xml
new file mode 100644
index 0000000..950fef7
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-lt/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Nuoseklioji išpjova"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-lv/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-lv/strings.xml
new file mode 100644
index 0000000..dc1560b
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-lv/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Ūdenskrituma izgriezums"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-mk/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-mk/strings.xml
new file mode 100644
index 0000000..f39584b
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-mk/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Исечок во вид на водопад"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-mn/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-mn/strings.xml
new file mode 100644
index 0000000..520c96d1
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-mn/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Хүрхрээ таслах"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-mr/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-mr/strings.xml
new file mode 100644
index 0000000..e62ca9e
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-mr/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"वॉटरफॉल कटआउट"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ms/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ms/strings.xml
new file mode 100644
index 0000000..3ac553f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ms/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Keratan Waterfall"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-my/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-my/strings.xml
new file mode 100644
index 0000000..2476168
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-my/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"ရေတံခွန်ပုံ ဖြတ်ညှပ်ပြသမှု"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-nb/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-nb/strings.xml
new file mode 100644
index 0000000..beb7b12
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-nb/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Fossutklipp"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ne/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ne/strings.xml
new file mode 100644
index 0000000..61653c3
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ne/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"झरनाको कटआउट"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-nl/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-nl/strings.xml
new file mode 100644
index 0000000..a778407
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-nl/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Waterfall-cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-or/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-or/strings.xml
new file mode 100644
index 0000000..3558cc5
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-or/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"ୱାଟରଫଲ୍ କଟଆଉଟ୍"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pa/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pa/strings.xml
new file mode 100644
index 0000000..d599161
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pa/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"ਝਰਨਾ ਕੱਟਆਊਟ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pl/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pl/strings.xml
new file mode 100644
index 0000000..11141dc
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pl/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Wycięcie kaskadowe"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000..f80fcad
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pt-rBR/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Recorte de cascata"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..4100995
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pt-rPT/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Recorte no ecrã"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pt/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pt/strings.xml
new file mode 100644
index 0000000..f80fcad
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-pt/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Recorte de cascata"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ro/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ro/strings.xml
new file mode 100644
index 0000000..e162781
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ro/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Decupaj cascadă"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ru/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ru/strings.xml
new file mode 100644
index 0000000..6d9c92f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ru/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Вырез на экране Waterfall"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-si/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-si/strings.xml
new file mode 100644
index 0000000..df2d03d
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-si/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"දිය ඇල්ලේ පසුබිම ඉවත් කිරීම"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sk/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sk/strings.xml
new file mode 100644
index 0000000..646392b
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sk/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Výrez kaskády"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sl/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sl/strings.xml
new file mode 100644
index 0000000..12561be
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sl/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Slapasta zareza"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sq/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sq/strings.xml
new file mode 100644
index 0000000..0b81da8
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sq/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Prerje ujëvare"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sr/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sr/strings.xml
new file mode 100644
index 0000000..24e3828
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sr/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Изрезани слап"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sv/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sv/strings.xml
new file mode 100644
index 0000000..dfb9fef
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sv/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Vattenfall med skärmutskärning"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sw/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sw/strings.xml
new file mode 100644
index 0000000..8bfc2aa
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-sw/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Mkato wa maporomoko ya maji"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-te/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-te/strings.xml
new file mode 100644
index 0000000..bc6f1e5
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-te/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"వాటర్ ఫాల్ కట్అవుట్"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-th/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-th/strings.xml
new file mode 100644
index 0000000..6c39a7f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-th/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"คัตเอาท์ Waterfall"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-tl/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-tl/strings.xml
new file mode 100644
index 0000000..8f8d166
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-tl/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Waterfall na cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-tr/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-tr/strings.xml
new file mode 100644
index 0000000..ccbc67a
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-tr/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Şelale kesimi"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-uk/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-uk/strings.xml
new file mode 100644
index 0000000..7e6beaf
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-uk/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Виріз вигнутого екрана"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ur/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ur/strings.xml
new file mode 100644
index 0000000..c40ebc4
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-ur/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"واٹر فال کٹ آؤٹ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-uz/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-uz/strings.xml
new file mode 100644
index 0000000..24ba1b1
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-uz/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Shaffof belgi kesimi"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-vi/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-vi/strings.xml
new file mode 100644
index 0000000..2fff027
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-vi/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Vết cắt trên thác nước"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-zh-rCN/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..37dde31
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-zh-rCN/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"瀑布刘海屏"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..109b61c
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-zh-rHK/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"瀑布裁剪圖片"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..109b61c
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-zh-rTW/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"瀑布裁剪圖片"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-zu/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-zu/strings.xml
new file mode 100644
index 0000000..513ff3d
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values-zu/strings.xml
@@ -0,0 +1,21 @@
+<?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="display_cutout_emulation_overlay" msgid="3523556473422419323">"Ukusikwa kwempophoma"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values/config.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values/config.xml
new file mode 100644
index 0000000..6f692c8
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values/config.xml
@@ -0,0 +1,35 @@
+<!--
+  ~ 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+    <!-- Height of the status bar in portrait. The height should be
+         Max((status bar content height + waterfall top size), top cutout size) -->
+    <dimen name="status_bar_height_portrait">28dp</dimen>
+    <!-- Max((28 + 20), 0) = 48 -->
+    <dimen name="status_bar_height_landscape">48dp</dimen>
+    <!-- Height of area above QQS where battery/time go (equal to status bar height if > 48dp) -->
+    <dimen name="quick_qs_offset_height">28dp</dimen>
+    <!-- Total height of QQS (quick_qs_offset_height + 128) -->
+    <dimen name="quick_qs_total_height">156dp</dimen>
+
+    <dimen name="waterfall_display_left_edge_size">20dp</dimen>
+    <dimen name="waterfall_display_top_edge_size">0dp</dimen>
+    <dimen name="waterfall_display_right_edge_size">20dp</dimen>
+    <dimen name="waterfall_display_bottom_edge_size">0dp</dimen>
+</resources>
+
+
diff --git a/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values/strings.xml b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values/strings.xml
new file mode 100644
index 0000000..ed073d0
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationWaterfallOverlay/res/values/strings.xml
@@ -0,0 +1,21 @@
+<?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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+    <string name="display_cutout_emulation_overlay">Waterfall cutout</string>
+
+</resources>
\ No newline at end of file
diff --git a/packages/services/PacProcessor/jni/Android.bp b/packages/services/PacProcessor/jni/Android.bp
index ab21a76..0e7e101 100644
--- a/packages/services/PacProcessor/jni/Android.bp
+++ b/packages/services/PacProcessor/jni/Android.bp
@@ -38,6 +38,6 @@
         "-Wunreachable-code",
     ],
     sanitize: {
-        cfi: true,
+       cfi: true,
     },
 }
diff --git a/packages/services/PacProcessor/src/com/android/pacprocessor/LibpacInterface.java b/packages/services/PacProcessor/src/com/android/pacprocessor/LibpacInterface.java
new file mode 100644
index 0000000..103ef781
--- /dev/null
+++ b/packages/services/PacProcessor/src/com/android/pacprocessor/LibpacInterface.java
@@ -0,0 +1,34 @@
+/*
+ * 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 com.android.pacprocessor;
+
+/**
+ * Common interface for both Android's and WebView's implementation of PAC processor.
+ *
+ * @hide
+ */
+interface LibpacInterface {
+    default boolean startPacSupport() {
+        return true;
+    }
+
+    default boolean stopPacSupport() {
+        return true;
+    }
+
+    boolean setCurrentProxyScript(String script);
+    String makeProxyRequest(String url, String host);
+}
diff --git a/packages/services/PacProcessor/src/com/android/pacprocessor/PacNative.java b/packages/services/PacProcessor/src/com/android/pacprocessor/PacNative.java
index c67fe9f..9c0cfc2 100644
--- a/packages/services/PacProcessor/src/com/android/pacprocessor/PacNative.java
+++ b/packages/services/PacProcessor/src/com/android/pacprocessor/PacNative.java
@@ -20,9 +20,11 @@
 /**
  * @hide
  */
-public class PacNative {
+public class PacNative implements LibpacInterface {
     private static final String TAG = "PacProxy";
 
+    private static final PacNative sInstance = new PacNative();
+
     private String mCurrentPac;
 
     private boolean mIsActive;
@@ -39,38 +41,46 @@
         System.loadLibrary("jni_pacprocessor");
     }
 
-    PacNative() {
+    private PacNative() {
 
     }
 
+    public static PacNative getInstance() {
+        return sInstance;
+    }
+
+    @Override
     public synchronized boolean startPacSupport() {
         if (createV8ParserNativeLocked()) {
             Log.e(TAG, "Unable to Create v8 Proxy Parser.");
-            return true;
+            return false;
         }
         mIsActive = true;
-        return false;
+        return true;
     }
 
+    @Override
     public synchronized boolean stopPacSupport() {
         if (mIsActive) {
             if (destroyV8ParserNativeLocked()) {
                 Log.e(TAG, "Unable to Destroy v8 Proxy Parser.");
-                return true;
+                return false;
             }
             mIsActive = false;
         }
-        return false;
+        return true;
     }
 
+    @Override
     public synchronized boolean setCurrentProxyScript(String script) {
         if (setProxyScriptNativeLocked(script)) {
             Log.e(TAG, "Unable to parse proxy script.");
-            return true;
+            return false;
         }
-        return false;
+        return true;
     }
 
+    @Override
     public synchronized String makeProxyRequest(String url, String host) {
         String ret = makeProxyRequestNativeLocked(url, host);
         if ((ret == null) || (ret.length() == 0)) {
diff --git a/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java b/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java
index 74391eb..7aea721 100644
--- a/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java
+++ b/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java
@@ -17,6 +17,7 @@
 
 import android.app.Service;
 import android.content.Intent;
+import android.content.res.Resources;
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.Process;
@@ -30,45 +31,33 @@
 
 public class PacService extends Service {
     private static final String TAG = "PacService";
+    private static final boolean sUseWebViewPacProcessor = Resources.getSystem().getBoolean(
+            com.android.internal.R.bool.config_useWebViewPacProcessor);
 
-    private PacNative mPacNative;
-    private ProxyServiceStub mStub;
+    private final LibpacInterface mLibpac = sUseWebViewPacProcessor
+            ? PacWebView.getInstance()
+            : PacNative.getInstance();
+
+    private ProxyServiceStub mStub = new ProxyServiceStub();
 
     @Override
     public void onCreate() {
         super.onCreate();
-        if (mPacNative == null) {
-            mPacNative = new PacNative();
-            mStub = new ProxyServiceStub(mPacNative);
-        }
+        mLibpac.startPacSupport();
     }
 
     @Override
     public void onDestroy() {
+        mLibpac.stopPacSupport();
         super.onDestroy();
-        if (mPacNative != null) {
-            mPacNative.stopPacSupport();
-            mPacNative = null;
-            mStub = null;
-        }
     }
 
     @Override
     public IBinder onBind(Intent intent) {
-        if (mPacNative == null) {
-            mPacNative = new PacNative();
-            mStub = new ProxyServiceStub(mPacNative);
-        }
         return mStub;
     }
 
-    private static class ProxyServiceStub extends IProxyService.Stub {
-        private final PacNative mPacNative;
-
-        public ProxyServiceStub(PacNative pacNative) {
-            mPacNative = pacNative;
-        }
-
+    private class ProxyServiceStub extends IProxyService.Stub {
         @Override
         public String resolvePacFile(String host, String url) throws RemoteException {
             try {
@@ -85,7 +74,7 @@
                         throw new IllegalArgumentException("Invalid host was passed");
                     }
                 }
-                return mPacNative.makeProxyRequest(url, host);
+                return mLibpac.makeProxyRequest(url, host);
             } catch (MalformedURLException e) {
                 throw new IllegalArgumentException("Invalid URL was passed");
             }
@@ -97,25 +86,17 @@
                 Log.e(TAG, "Only system user is allowed to call setPacFile");
                 throw new SecurityException();
             }
-            mPacNative.setCurrentProxyScript(script);
+            mLibpac.setCurrentProxyScript(script);
         }
 
         @Override
         public void startPacSystem() throws RemoteException {
-            if (Binder.getCallingUid() != Process.SYSTEM_UID) {
-                Log.e(TAG, "Only system user is allowed to call startPacSystem");
-                throw new SecurityException();
-            }
-            mPacNative.startPacSupport();
+            //TODO: remove
         }
 
         @Override
         public void stopPacSystem() throws RemoteException {
-            if (Binder.getCallingUid() != Process.SYSTEM_UID) {
-                Log.e(TAG, "Only system user is allowed to call stopPacSystem");
-                throw new SecurityException();
-            }
-            mPacNative.stopPacSupport();
+            //TODO: remove
         }
     }
 }
diff --git a/packages/services/PacProcessor/src/com/android/pacprocessor/PacWebView.java b/packages/services/PacProcessor/src/com/android/pacprocessor/PacWebView.java
new file mode 100644
index 0000000..4dd00f1
--- /dev/null
+++ b/packages/services/PacProcessor/src/com/android/pacprocessor/PacWebView.java
@@ -0,0 +1,48 @@
+/*
+ * 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.pacprocessor;
+
+import android.util.Log;
+import android.webkit.PacProcessor;
+
+/**
+ * @hide
+ */
+public class PacWebView implements LibpacInterface {
+    private static final String TAG = "PacWebView";
+
+    private static final PacWebView sInstance = new PacWebView();
+    private PacProcessor mProcessor = PacProcessor.getInstance();
+
+    public static PacWebView getInstance() {
+        return sInstance;
+    }
+
+    @Override
+    public synchronized boolean setCurrentProxyScript(String script) {
+        if (!mProcessor.setProxyScript(script)) {
+            Log.e(TAG, "Unable to parse proxy script.");
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public synchronized String makeProxyRequest(String url, String host) {
+        return mProcessor.findProxyForUrl(url);
+    }
+}
diff --git a/proto/src/system_messages.proto b/proto/src/system_messages.proto
index 54b4201..eda3fb9 100644
--- a/proto/src/system_messages.proto
+++ b/proto/src/system_messages.proto
@@ -244,6 +244,14 @@
     // Package: android
     NOTE_SOFTAP_AUTO_DISABLED = 58;
 
+    // Notify the user that their admin has changed location settings.
+    // Package: android
+    NOTE_LOCATION_CHANGED = 59;
+
+    // Notify user that a SIM is required to connect to Wifi network
+    // Package: android
+    NOTE_ID_WIFI_SIM_REQUIRED = 60;
+
     // ADD_NEW_IDS_ABOVE_THIS_LINE
     // Legacy IDs with arbitrary values appear below
     // Legacy IDs existed as stable non-conflicting constants prior to the O release
diff --git a/services/Android.bp b/services/Android.bp
index 28c8aee..c77e75d 100644
--- a/services/Android.bp
+++ b/services/Android.bp
@@ -30,6 +30,7 @@
         ":services.usb-sources",
         ":services.voiceinteraction-sources",
         ":service-permission-sources",
+        ":service-statsd-sources",
     ],
     visibility: ["//visibility:private"],
 }
@@ -75,7 +76,7 @@
 
     libs: [
         "android.hidl.manager-V1.0-java",
-        "framework-tethering"
+        "framework-tethering-stubs",
     ],
 
     plugins: [
@@ -126,6 +127,16 @@
             api_file: "api/current.txt",
             removed_api_file: "api/removed.txt",
         },
+        last_released: {
+            api_file: ":last-released-system-server-api",
+            removed_api_file: "api/removed.txt",
+            baseline_file: ":system-server-api-incompatibilities-with-last-released"
+        },
+        api_lint: {
+            enabled: true,
+            new_since: ":last-released-system-server-api",
+            baseline_file: "api/lint-baseline.txt",
+        },
     },
 }
 
diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
index a5877cc..0a527d4 100644
--- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
+++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
@@ -16,6 +16,9 @@
 
 package com.android.server.accessibility;
 
+import static android.accessibilityservice.AccessibilityService.KEY_ACCESSIBILITY_SCREENSHOT_COLORSPACE;
+import static android.accessibilityservice.AccessibilityService.KEY_ACCESSIBILITY_SCREENSHOT_HARDWAREBUFFER;
+import static android.accessibilityservice.AccessibilityService.KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP;
 import static android.accessibilityservice.AccessibilityServiceInfo.DEFAULT;
 import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
 import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS;
@@ -36,10 +39,12 @@
 import android.content.ServiceConnection;
 import android.content.pm.PackageManager;
 import android.content.pm.ParceledListSlice;
-import android.graphics.Bitmap;
+import android.graphics.GraphicBuffer;
+import android.graphics.ParcelableColorSpace;
 import android.graphics.Point;
 import android.graphics.Rect;
 import android.graphics.Region;
+import android.hardware.HardwareBuffer;
 import android.hardware.display.DisplayManager;
 import android.hardware.display.DisplayManagerGlobal;
 import android.os.Binder;
@@ -50,6 +55,7 @@
 import android.os.Looper;
 import android.os.Message;
 import android.os.PowerManager;
+import android.os.RemoteCallback;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemClock;
@@ -71,6 +77,7 @@
 import com.android.internal.compat.IPlatformCompat;
 import com.android.internal.os.SomeArgs;
 import com.android.internal.util.DumpUtils;
+import com.android.internal.util.function.pooled.PooledLambda;
 import com.android.server.LocalServices;
 import com.android.server.accessibility.AccessibilityWindowManager.RemoteAccessibilityConnection;
 import com.android.server.wm.ActivityTaskManagerInternal;
@@ -106,6 +113,8 @@
     private final PowerManager mPowerManager;
     private final IPlatformCompat mIPlatformCompat;
 
+    private final Handler mMainHandler;
+
     // Handler for scheduling method invocations on the main thread.
     public final InvocationHandler mInvocationHandler;
 
@@ -221,6 +230,10 @@
         /* This is exactly PendingIntent.getActivity, separated out for testability */
         PendingIntent getPendingIntentActivity(Context context, int requestCode, Intent intent,
                 int flags);
+
+        void setGestureDetectionPassthroughRegion(int displayId, Region region);
+
+        void setTouchExplorationPassthroughRegion(int displayId, Region region);
     }
 
     public AbstractAccessibilityServiceConnection(Context context, ComponentName componentName,
@@ -238,6 +251,7 @@
         mSecurityPolicy = securityPolicy;
         mSystemActionPerformer = systemActionPerfomer;
         mSystemSupport = systemSupport;
+        mMainHandler = mainHandler;
         mInvocationHandler = new InvocationHandler(mainHandler.getLooper());
         mA11yWindowManager = a11yWindowManager;
         mDisplayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
@@ -959,52 +973,74 @@
         mInvocationHandler.setSoftKeyboardCallbackEnabled(enabled);
     }
 
-    @Nullable
     @Override
-    public Bitmap takeScreenshot(int displayId) {
+    public void takeScreenshot(int displayId, RemoteCallback callback) {
         synchronized (mLock) {
             if (!hasRightsToCurrentUserLocked()) {
-                return null;
+                sendScreenshotResult(true, null, callback);
+                return;
             }
 
             if (!mSecurityPolicy.canTakeScreenshotLocked(this)) {
-                return null;
+                sendScreenshotResult(true, null, callback);
+                throw new SecurityException("Services don't have the capability of taking"
+                        + " the screenshot.");
             }
         }
 
         if (!mSecurityPolicy.checkAccessibilityAccess(this)) {
-            return null;
+            sendScreenshotResult(true, null, callback);
+            return;
         }
 
         final Display display = DisplayManagerGlobal.getInstance()
                 .getRealDisplay(displayId);
         if (display == null) {
-            return null;
+            sendScreenshotResult(true, null, callback);
+            return;
         }
-        final Point displaySize = new Point();
-        display.getRealSize(displaySize);
 
-        final int rotation = display.getRotation();
-        Bitmap screenShot = null;
+        sendScreenshotResult(false, display, callback);
+    }
 
+    private void sendScreenshotResult(boolean noResult, Display display, RemoteCallback callback) {
+        final boolean noScreenshot = noResult;
         final long identity = Binder.clearCallingIdentity();
         try {
-            final Rect crop = new Rect(0, 0, displaySize.x, displaySize.y);
-            // TODO (b/145893483): calling new API with the display as a parameter
-            // when surface control supported.
-            screenShot = SurfaceControl.screenshot(crop, displaySize.x, displaySize.y,
-                    rotation);
-            if (screenShot != null) {
-                // Optimization for telling the bitmap that all of the pixels are known to be
-                // opaque (false). This is meant as a drawing hint, as in some cases a bitmap
-                // that is known to be opaque can take a faster drawing case than one that may
-                // have non-opaque per-pixel alpha values.
-                screenShot.setHasAlpha(false);
-            }
+            mMainHandler.post(PooledLambda.obtainRunnable((nonArg) -> {
+                if (noScreenshot) {
+                    callback.sendResult(null);
+                    return;
+                }
+                final Point displaySize = new Point();
+                // TODO (b/145893483): calling new API with the display as a parameter
+                // when surface control supported.
+                final IBinder token = SurfaceControl.getInternalDisplayToken();
+                final Rect crop = new Rect(0, 0, displaySize.x, displaySize.y);
+                final int rotation = display.getRotation();
+                display.getRealSize(displaySize);
+
+                final SurfaceControl.ScreenshotGraphicBuffer screenshotBuffer =
+                        SurfaceControl.screenshotToBufferWithSecureLayersUnsafe(token, crop,
+                                displaySize.x, displaySize.y, false,
+                                rotation);
+                final GraphicBuffer graphicBuffer = screenshotBuffer.getGraphicBuffer();
+                final HardwareBuffer hardwareBuffer =
+                        HardwareBuffer.createFromGraphicBuffer(graphicBuffer);
+                final ParcelableColorSpace colorSpace =
+                        new ParcelableColorSpace(screenshotBuffer.getColorSpace());
+
+                // Send back the result.
+                final Bundle payload = new Bundle();
+                payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT_HARDWAREBUFFER,
+                        hardwareBuffer);
+                payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT_COLORSPACE, colorSpace);
+                payload.putLong(KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP, SystemClock.uptimeMillis());
+                callback.sendResult(payload);
+            }, null).recycleOnUse());
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
-        return screenShot;
     }
 
     @Override
@@ -1100,8 +1136,7 @@
     @Override
     public int getWindowIdForLeashToken(@NonNull IBinder token) {
         synchronized (mLock) {
-            // TODO: Add a method to lookup window ID by given leash token.
-            return -1;
+            return mA11yWindowManager.getWindowIdLocked(token);
         }
     }
 
@@ -1705,4 +1740,14 @@
     public boolean isMultiFingerGesturesEnabled() {
         return mRequestMultiFingerGestures;
     }
+
+    @Override
+    public void setGestureDetectionPassthroughRegion(int displayId, Region region) {
+        mSystemSupport.setGestureDetectionPassthroughRegion(displayId, region);
+    }
+
+    @Override
+    public void setTouchExplorationPassthroughRegion(int displayId, Region region) {
+        mSystemSupport.setTouchExplorationPassthroughRegion(displayId, region);
+    }
 }
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
index efddd86..020f225 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
@@ -17,6 +17,7 @@
 package com.android.server.accessibility;
 
 import android.content.Context;
+import android.graphics.Region;
 import android.os.PowerManager;
 import android.util.Slog;
 import android.util.SparseArray;
@@ -726,4 +727,16 @@
             return shouldProcess;
         }
     }
+
+    public void setGestureDetectionPassthroughRegion(int displayId, Region region) {
+        if (region != null && mTouchExplorer.contains(displayId)) {
+            mTouchExplorer.get(displayId).setGestureDetectionPassthroughRegion(region);
+        }
+    }
+
+    public void setTouchExplorationPassthroughRegion(int displayId, Region region) {
+        if (region != null && mTouchExplorer.contains(displayId)) {
+            mTouchExplorer.get(displayId).setTouchExplorationPassthroughRegion(region);
+        }
+    }
 }
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 7b495ce..60c3d78 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -761,11 +761,11 @@
     }
 
     @Override
-    public int addAccessibilityInteractionConnection(IWindow windowToken,
+    public int addAccessibilityInteractionConnection(IWindow windowToken, IBinder leashToken,
             IAccessibilityInteractionConnection connection, String packageName,
             int userId) throws RemoteException {
         return mA11yWindowManager.addAccessibilityInteractionConnection(
-                windowToken, connection, packageName, userId);
+                windowToken, leashToken, connection, packageName, userId);
     }
 
     @Override
@@ -2050,6 +2050,10 @@
             return;
         }
 
+        if (mMagnificationController != null) {
+            mMagnificationController.setUserId(userState.mUserId);
+        }
+
         if (mUiAutomationManager.suppressingAccessibilityServicesLocked()
                 && mMagnificationController != null) {
             mMagnificationController.unregisterAll();
@@ -2643,6 +2647,20 @@
     }
 
     @Override
+    public void associateEmbeddedHierarchy(@NonNull IBinder host, @NonNull IBinder embedded) {
+        synchronized (mLock) {
+            mA11yWindowManager.associateEmbeddedHierarchyLocked(host, embedded);
+        }
+    }
+
+    @Override
+    public void disassociateEmbeddedHierarchy(@NonNull IBinder token) {
+        synchronized (mLock) {
+            mA11yWindowManager.disassociateEmbeddedHierarchyLocked(token);
+        }
+    }
+
+    @Override
     public void dump(FileDescriptor fd, final PrintWriter pw, String[] args) {
         if (!DumpUtils.checkDumpPermission(mContext, LOG_TAG, pw)) return;
         synchronized (mLock) {
@@ -2861,11 +2879,8 @@
         @Override
         public void onDisplayRemoved(int displayId) {
             synchronized (mLock) {
-                for (int i = 0; i < mDisplaysList.size(); i++) {
-                    if (mDisplaysList.get(i).getDisplayId() == displayId) {
-                        mDisplaysList.remove(i);
-                        break;
-                    }
+                if (!removeDisplayFromList(displayId)) {
+                    return;
                 }
                 if (mInputFilter != null) {
                     mInputFilter.onDisplayChanged();
@@ -2885,6 +2900,17 @@
             mA11yWindowManager.stopTrackingWindows(displayId);
         }
 
+        @GuardedBy("mLock")
+        private boolean removeDisplayFromList(int displayId) {
+            for (int i = 0; i < mDisplaysList.size(); i++) {
+                if (mDisplaysList.get(i).getDisplayId() == displayId) {
+                    mDisplaysList.remove(i);
+                    return true;
+                }
+            }
+            return false;
+        }
+
         @Override
         public void onDisplayChanged(int displayId) {
             /* do nothing */
@@ -2896,8 +2922,8 @@
             }
             // Private virtual displays are created by the ap and is not allowed to access by other
             // aps. We assume we could ignore them.
-            if ((display.getType() == Display.TYPE_VIRTUAL
-                    && (display.getFlags() & Display.FLAG_PRIVATE) != 0)) {
+            if (display.getType() == Display.TYPE_VIRTUAL
+                    && (display.getFlags() & Display.FLAG_PRIVATE) != 0) {
                 return false;
             }
             return true;
@@ -3040,4 +3066,40 @@
             }
         }
     }
+
+    @Override
+    public void setGestureDetectionPassthroughRegion(int displayId, Region region) {
+        mMainHandler.sendMessage(
+                obtainMessage(
+                        AccessibilityManagerService::setGestureDetectionPassthroughRegionInternal,
+                        this,
+                        displayId,
+                        region));
+    }
+
+    @Override
+    public void setTouchExplorationPassthroughRegion(int displayId, Region region) {
+        mMainHandler.sendMessage(
+                obtainMessage(
+                        AccessibilityManagerService::setTouchExplorationPassthroughRegionInternal,
+                        this,
+                        displayId,
+                        region));
+    }
+
+    private void setTouchExplorationPassthroughRegionInternal(int displayId, Region region) {
+        synchronized (mLock) {
+            if (mHasInputFilter && mInputFilter != null) {
+                mInputFilter.setTouchExplorationPassthroughRegion(displayId, region);
+            }
+        }
+    }
+
+    private void setGestureDetectionPassthroughRegionInternal(int displayId, Region region) {
+        synchronized (mLock) {
+            if (mHasInputFilter && mInputFilter != null) {
+                mInputFilter.setGestureDetectionPassthroughRegion(displayId, region);
+            }
+        }
+    }
 }
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java b/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java
index 96e345e..d98e31e 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java
@@ -443,8 +443,8 @@
                 return false;
             }
         }
-        // TODO: Check parent windowId if the giving windowId is from embedded view hierarchy.
-        if (windowId == mAccessibilityWindowManager.getActiveWindowId(userId)) {
+        if (mAccessibilityWindowManager.resolveParentWindowIdLocked(windowId)
+                == mAccessibilityWindowManager.getActiveWindowId(userId)) {
             return true;
         }
         return mAccessibilityWindowManager.findA11yWindowInfoByIdLocked(windowId) != null;
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java
index 25911a7..edb4445 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java
@@ -16,8 +16,6 @@
 
 package com.android.server.accessibility;
 
-import static android.accessibilityservice.AccessibilityService.KEY_ACCESSIBILITY_SCREENSHOT;
-
 import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
 
 import android.Manifest;
@@ -27,20 +25,16 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ParceledListSlice;
-import android.graphics.Bitmap;
 import android.os.Binder;
-import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Process;
-import android.os.RemoteCallback;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.Slog;
 import android.view.Display;
 
-import com.android.internal.util.function.pooled.PooledLambda;
 import com.android.server.inputmethod.InputMethodManagerInternal;
 import com.android.server.wm.ActivityTaskManagerInternal;
 import com.android.server.wm.WindowManagerInternal;
@@ -393,15 +387,4 @@
             }
         }
     }
-
-    @Override
-    public void takeScreenshotWithCallback(int displayId, RemoteCallback callback) {
-        mMainHandler.post(PooledLambda.obtainRunnable((nonArg) -> {
-            final Bitmap screenshot = super.takeScreenshot(displayId);
-            // Send back the result.
-            final Bundle payload = new Bundle();
-            payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT, screenshot);
-            callback.sendResult(payload);
-        }, null).recycleOnUse());
-    }
 }
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java
index a6041e0..446e882 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java
@@ -31,6 +31,7 @@
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.text.TextUtils;
+import android.util.ArrayMap;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.view.Display;
@@ -42,6 +43,7 @@
 import android.view.accessibility.AccessibilityWindowInfo;
 import android.view.accessibility.IAccessibilityInteractionConnection;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.server.accessibility.AccessibilitySecurityPolicy.AccessibilityUserManager;
 import com.android.server.wm.WindowManagerInternal;
 
@@ -100,6 +102,19 @@
             new SparseArray<>();
 
     /**
+     * Map of host view and embedded hierarchy, mapping from leash token of its ViewRootImpl.
+     * The key is the token from embedded hierarchy, and the value is the token from its host.
+     */
+    private final ArrayMap<IBinder, IBinder> mHostEmbeddedMap = new ArrayMap<>();
+
+    /**
+     * Map of window id and view hierarchy.
+     * The key is the window id when the ViewRootImpl register to accessibility, and the value is
+     * its leash token.
+     */
+    private final SparseArray<IBinder> mWindowIdMap = new SparseArray<>();
+
+    /**
      * This class implements {@link WindowManagerInternal.WindowsForAccessibilityCallback} to
      * receive {@link WindowInfo}s from window manager when there's an accessibility change in
      * window and holds window lists information per display.
@@ -767,7 +782,9 @@
     /**
      * Wrapper of accessibility interaction connection for window.
      */
-    final class RemoteAccessibilityConnection implements IBinder.DeathRecipient {
+    // In order to avoid using DexmakerShareClassLoaderRule, make this class visible for testing.
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    public final class RemoteAccessibilityConnection implements IBinder.DeathRecipient {
         private final int mUid;
         private final String mPackageName;
         private final int mWindowId;
@@ -913,19 +930,21 @@
      * Adds accessibility interaction connection according to given window token, package name and
      * window token.
      *
-     * @param windowToken The window token of accessibility interaction connection
+     * @param window The window token of accessibility interaction connection
+     * @param leashToken The leash token of accessibility interaction connection
      * @param connection The accessibility interaction connection
      * @param packageName The package name
      * @param userId The userId
      * @return The windowId of added connection
      * @throws RemoteException
      */
-    public int addAccessibilityInteractionConnection(@NonNull IWindow windowToken,
-            @NonNull IAccessibilityInteractionConnection connection, @NonNull String packageName,
-            int userId) throws RemoteException {
+    public int addAccessibilityInteractionConnection(@NonNull IWindow window,
+            @NonNull IBinder leashToken, @NonNull IAccessibilityInteractionConnection connection,
+            @NonNull String packageName, int userId) throws RemoteException {
         final int windowId;
         boolean shouldComputeWindows = false;
-        final int displayId = mWindowManagerInternal.getDisplayIdForWindow(windowToken.asBinder());
+        final IBinder token = window.asBinder();
+        final int displayId = mWindowManagerInternal.getDisplayIdForWindow(token);
         synchronized (mLock) {
             // We treat calls from a profile as if made by its parent as profiles
             // share the accessibility state of the parent. The call below
@@ -947,35 +966,33 @@
                         windowId, connection, packageName, resolvedUid, UserHandle.USER_ALL);
                 wrapper.linkToDeath();
                 mGlobalInteractionConnections.put(windowId, wrapper);
-                mGlobalWindowTokens.put(windowId, windowToken.asBinder());
+                mGlobalWindowTokens.put(windowId, token);
                 if (DEBUG) {
                     Slog.i(LOG_TAG, "Added global connection for pid:" + Binder.getCallingPid()
-                            + " with windowId: " + windowId + " and  token: "
-                            + windowToken.asBinder());
+                            + " with windowId: " + windowId + " and token: " + token);
                 }
             } else {
                 RemoteAccessibilityConnection wrapper = new RemoteAccessibilityConnection(
                         windowId, connection, packageName, resolvedUid, resolvedUserId);
                 wrapper.linkToDeath();
                 getInteractionConnectionsForUserLocked(resolvedUserId).put(windowId, wrapper);
-                getWindowTokensForUserLocked(resolvedUserId).put(windowId, windowToken.asBinder());
+                getWindowTokensForUserLocked(resolvedUserId).put(windowId, token);
                 if (DEBUG) {
                     Slog.i(LOG_TAG, "Added user connection for pid:" + Binder.getCallingPid()
-                            + " with windowId: " + windowId
-                            + " and  token: " + windowToken.asBinder());
+                            + " with windowId: " + windowId + " and  token: " + token);
                 }
             }
 
             if (isTrackingWindowsLocked(displayId)) {
                 shouldComputeWindows = true;
             }
+            registerIdLocked(leashToken, windowId);
         }
         if (shouldComputeWindows) {
             mWindowManagerInternal.computeWindowsForAccessibility(displayId);
         }
 
-        mWindowManagerInternal.setAccessibilityIdToSurfaceMetadata(
-                windowToken.asBinder(), windowId);
+        mWindowManagerInternal.setAccessibilityIdToSurfaceMetadata(token, windowId);
         return windowId;
     }
 
@@ -1098,6 +1115,7 @@
      * Invoked when accessibility interaction connection of window is removed.
      *
      * @param windowId Removed windowId
+     * @param binder Removed window token
      */
     private void onAccessibilityInteractionConnectionRemovedLocked(
             int windowId, @Nullable IBinder binder) {
@@ -1110,6 +1128,7 @@
             mWindowManagerInternal.setAccessibilityIdToSurfaceMetadata(
                     binder, AccessibilityWindowInfo.UNDEFINED_WINDOW_ID);
         }
+        unregisterIdLocked(windowId);
     }
 
     /**
@@ -1132,7 +1151,7 @@
      * Returns the userId that owns the given window token, {@link UserHandle#USER_NULL}
      * if not found.
      *
-     * @param windowToken The winodw token
+     * @param windowToken The window token
      * @return The userId
      */
     public int getWindowOwnerUserId(@NonNull IBinder windowToken) {
@@ -1161,6 +1180,50 @@
     }
 
     /**
+     * Establish the relationship between the host and the embedded view hierarchy.
+     *
+     * @param host The token of host hierarchy
+     * @param embedded The token of the embedded hierarchy
+     */
+    public void associateEmbeddedHierarchyLocked(@NonNull IBinder host, @NonNull IBinder embedded) {
+        // Use embedded window as key, since one host window may have multiple embedded windows.
+        associateLocked(embedded, host);
+    }
+
+    /**
+     * Clear the relationship by given token.
+     *
+     * @param token The token
+     */
+    public void disassociateEmbeddedHierarchyLocked(@NonNull IBinder token) {
+        disassociateLocked(token);
+    }
+
+    /**
+     * Gets the parent windowId of the window according to the specified windowId.
+     *
+     * @param windowId The windowId to check
+     * @return The windowId of the parent window, or self if no parent exists
+     */
+    public int resolveParentWindowIdLocked(int windowId) {
+        final IBinder token = getTokenLocked(windowId);
+        if (token == null) {
+            return windowId;
+        }
+        final IBinder resolvedToken = resolveTopParentTokenLocked(token);
+        final int resolvedWindowId = getWindowIdLocked(resolvedToken);
+        return resolvedWindowId != -1 ? resolvedWindowId : windowId;
+    }
+
+    private IBinder resolveTopParentTokenLocked(IBinder token) {
+        final IBinder hostToken = getHostTokenLocked(token);
+        if (hostToken == null) {
+            return token;
+        }
+        return resolveTopParentTokenLocked(hostToken);
+    }
+
+    /**
      * Computes partial interactive region of given windowId.
      *
      * @param windowId The windowId
@@ -1357,6 +1420,7 @@
      */
     @Nullable
     public AccessibilityWindowInfo findA11yWindowInfoByIdLocked(int windowId) {
+        windowId = resolveParentWindowIdLocked(windowId);
         final DisplayWindowsObserver observer = getDisplayWindowObserverByWindowIdLocked(windowId);
         if (observer != null) {
             return observer.findA11yWindowInfoByIdLocked(windowId);
@@ -1584,6 +1648,88 @@
     }
 
     /**
+     * Associate the token of the embedded view hierarchy to the host view hierarchy.
+     *
+     * @param embedded The leash token from the view root of embedded hierarchy
+     * @param host The leash token from the view root of host hierarchy
+     */
+    void associateLocked(IBinder embedded, IBinder host) {
+        mHostEmbeddedMap.put(embedded, host);
+    }
+
+    /**
+     * Clear the relationship of given token.
+     *
+     * @param token The leash token
+     */
+    void disassociateLocked(IBinder token) {
+        mHostEmbeddedMap.remove(token);
+        for (int i = mHostEmbeddedMap.size() - 1; i >= 0; i--) {
+            if (mHostEmbeddedMap.valueAt(i).equals(token)) {
+                mHostEmbeddedMap.removeAt(i);
+            }
+        }
+    }
+
+    /**
+     * Register the leash token with its windowId.
+     *
+     * @param token The token.
+     * @param windowId The windowID.
+     */
+    void registerIdLocked(IBinder token, int windowId) {
+        mWindowIdMap.put(windowId, token);
+    }
+
+    /**
+     * Unregister the windowId and also disassociate its token.
+     *
+     * @param windowId The windowID
+     */
+    void unregisterIdLocked(int windowId) {
+        final IBinder token = mWindowIdMap.get(windowId);
+        if (token == null) {
+            return;
+        }
+        disassociateLocked(token);
+        mWindowIdMap.remove(windowId);
+    }
+
+    /**
+     * Get the leash token by given windowID.
+     *
+     * @param windowId The windowID.
+     * @return The token, or {@code NULL} if this windowID doesn't exist
+     */
+    IBinder getTokenLocked(int windowId) {
+        return mWindowIdMap.get(windowId);
+    }
+
+    /**
+     * Get the windowId by given leash token.
+     *
+     * @param token The token
+     * @return The windowID, or -1 if the token doesn't exist
+     */
+    int getWindowIdLocked(IBinder token) {
+        final int index = mWindowIdMap.indexOfValue(token);
+        if (index == -1) {
+            return index;
+        }
+        return mWindowIdMap.keyAt(index);
+    }
+
+    /**
+     * Get the leash token of the host hierarchy by given token.
+     *
+     * @param token The token
+     * @return The token of host hierarchy, or {@code NULL} if no host exists
+     */
+    IBinder getHostTokenLocked(IBinder token) {
+        return mHostEmbeddedMap.get(token);
+    }
+
+    /**
      * Dumps all {@link AccessibilityWindowInfo}s here.
      */
     public void dump(FileDescriptor fd, final PrintWriter pw, String[] args) {
diff --git a/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java b/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java
index 11dcfef..ef8d524 100644
--- a/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java
+++ b/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java
@@ -193,7 +193,8 @@
     /**
      * This method returns the list of available system actions.
      */
-    List<AccessibilityAction> getSystemActions() {
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    public List<AccessibilityAction> getSystemActions() {
         List<AccessibilityAction> systemActions = new ArrayList<>();
         synchronized (mSystemActionLock) {
             for (Map.Entry<Integer, RemoteAction> entry : mRegisteredSystemActions.entrySet()) {
diff --git a/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java b/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java
index 5d9af26..d1c3a02 100644
--- a/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java
+++ b/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java
@@ -328,6 +328,6 @@
         public void onFingerprintGesture(int gesture) {}
 
         @Override
-        public void takeScreenshotWithCallback(int displayId, RemoteCallback callback) {}
+        public void takeScreenshot(int displayId, RemoteCallback callback) {}
     }
 }
diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/GestureManifold.java b/services/accessibility/java/com/android/server/accessibility/gestures/GestureManifold.java
index 5d170d3..a3b5a3e 100644
--- a/services/accessibility/java/com/android/server/accessibility/gestures/GestureManifold.java
+++ b/services/accessibility/java/com/android/server/accessibility/gestures/GestureManifold.java
@@ -17,6 +17,7 @@
 package com.android.server.accessibility.gestures;
 
 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_DOUBLE_TAP;
+import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD;
 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SINGLE_TAP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SWIPE_DOWN;
 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SWIPE_LEFT;
@@ -24,12 +25,21 @@
 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SWIPE_UP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_TRIPLE_TAP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_DOUBLE_TAP;
+import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SINGLE_TAP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SWIPE_DOWN;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SWIPE_LEFT;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SWIPE_RIGHT;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SWIPE_UP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_TRIPLE_TAP;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_DOUBLE_TAP;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SINGLE_TAP;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SWIPE_DOWN;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SWIPE_LEFT;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SWIPE_RIGHT;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SWIPE_UP;
+import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_TRIPLE_TAP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_DOUBLE_TAP;
 import static android.accessibilityservice.AccessibilityService.GESTURE_DOUBLE_TAP_AND_HOLD;
 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN;
@@ -125,6 +135,9 @@
         mMultiFingerGestures.add(
                 new MultiFingerMultiTap(mContext, 2, 2, GESTURE_2_FINGER_DOUBLE_TAP, this));
         mMultiFingerGestures.add(
+                new MultiFingerMultiTapAndHold(
+                        mContext, 2, 2, GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD, this));
+        mMultiFingerGestures.add(
                 new MultiFingerMultiTap(mContext, 2, 3, GESTURE_2_FINGER_TRIPLE_TAP, this));
         // Three-finger taps.
         mMultiFingerGestures.add(
@@ -132,7 +145,20 @@
         mMultiFingerGestures.add(
                 new MultiFingerMultiTap(mContext, 3, 2, GESTURE_3_FINGER_DOUBLE_TAP, this));
         mMultiFingerGestures.add(
+                new MultiFingerMultiTapAndHold(
+                        mContext, 3, 2, GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD, this));
+        mMultiFingerGestures.add(
                 new MultiFingerMultiTap(mContext, 3, 3, GESTURE_3_FINGER_TRIPLE_TAP, this));
+        // Four-finger taps.
+        mMultiFingerGestures.add(
+                new MultiFingerMultiTap(mContext, 4, 1, GESTURE_4_FINGER_SINGLE_TAP, this));
+        mMultiFingerGestures.add(
+                new MultiFingerMultiTap(mContext, 4, 2, GESTURE_4_FINGER_DOUBLE_TAP, this));
+        mMultiFingerGestures.add(
+                new MultiFingerMultiTapAndHold(
+                        mContext, 4, 2, GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD, this));
+        mMultiFingerGestures.add(
+                new MultiFingerMultiTap(mContext, 4, 3, GESTURE_4_FINGER_TRIPLE_TAP, this));
         // Two-finger swipes.
         mMultiFingerGestures.add(
                 new MultiFingerSwipe(context, 2, DOWN, GESTURE_2_FINGER_SWIPE_DOWN, this));
@@ -151,6 +177,15 @@
                 new MultiFingerSwipe(context, 3, RIGHT, GESTURE_3_FINGER_SWIPE_RIGHT, this));
         mMultiFingerGestures.add(
                 new MultiFingerSwipe(context, 3, UP, GESTURE_3_FINGER_SWIPE_UP, this));
+        // Four-finger swipes.
+        mMultiFingerGestures.add(
+                new MultiFingerSwipe(context, 4, DOWN, GESTURE_4_FINGER_SWIPE_DOWN, this));
+        mMultiFingerGestures.add(
+                new MultiFingerSwipe(context, 4, LEFT, GESTURE_4_FINGER_SWIPE_LEFT, this));
+        mMultiFingerGestures.add(
+                new MultiFingerSwipe(context, 4, RIGHT, GESTURE_4_FINGER_SWIPE_RIGHT, this));
+        mMultiFingerGestures.add(
+                new MultiFingerSwipe(context, 4, UP, GESTURE_4_FINGER_SWIPE_UP, this));
     }
 
     /**
diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerMultiTap.java b/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerMultiTap.java
index 20def61..e5340f1 100644
--- a/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerMultiTap.java
+++ b/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerMultiTap.java
@@ -42,10 +42,10 @@
     // The acceptable distance the pointer can move and still count as a tap.
     private int mTouchSlop;
     // A tap counts when target number of fingers are down and up once.
-    private int mCompletedTapCount;
+    protected int mCompletedTapCount;
     // A flag set to true when target number of fingers have touched down at once before.
     // Used to indicate what next finger action should be. Down when false and lift when true.
-    private boolean mIsTargetFingerCountReached = false;
+    protected boolean mIsTargetFingerCountReached = false;
     // Store initial down points for slop checking and update when next down if is inside slop.
     private PointF[] mBases;
     // The points in bases that already have slop checked when onDown or onPointerDown.
@@ -56,7 +56,11 @@
      * @throws IllegalArgumentException if <code>fingers<code/> is less than 2
      *                                  or <code>taps<code/> is not positive.
      */
-    MultiFingerMultiTap(Context context, int fingers, int taps, int gestureId,
+    MultiFingerMultiTap(
+            Context context,
+            int fingers,
+            int taps,
+            int gestureId,
             GestureMatcher.StateChangeListener listener) {
         super(gestureId, new Handler(context.getMainLooper()), listener);
         Preconditions.checkArgument(fingers >= 2);
@@ -117,8 +121,7 @@
         cancelAfterDoubleTapTimeout(event, rawEvent, policyFlags);
 
         final PointF nearest = findNearestPoint(rawEvent, mTouchSlop, false);
-        if ((getState() == STATE_GESTURE_STARTED || getState() == STATE_CLEAR)
-                && null != nearest) {
+        if ((getState() == STATE_GESTURE_STARTED || getState() == STATE_CLEAR) && null != nearest) {
             // Increase current tap count when the user have all fingers lifted
             // within the tap timeout since the target number of fingers are down.
             if (mIsTargetFingerCountReached) {
@@ -169,8 +172,7 @@
         } else {
             nearest = findNearestPoint(rawEvent, mDoubleTapSlop, true);
         }
-        if ((getState() == STATE_GESTURE_STARTED || getState() == STATE_CLEAR)
-                && nearest != null) {
+        if ((getState() == STATE_GESTURE_STARTED || getState() == STATE_CLEAR) && nearest != null) {
             // The user have all fingers down within the tap timeout since first finger down,
             // setting the timeout for fingers to be lifted.
             if (currentFingerCount == mTargetFingerCount) {
@@ -227,11 +229,11 @@
     }
 
     /**
-     * Find the nearest location to the given event in the bases.
-     * If no one found, it could be not inside {@code slop}, filtered or empty bases.
-     * When {@code filterMatched} is true, if the location of given event matches one of the points
-     * in {@link #mExcludedPointsForDownSlopChecked} it would be ignored. Otherwise, the location
-     * will be added to {@link #mExcludedPointsForDownSlopChecked}.
+     * Find the nearest location to the given event in the bases. If no one found, it could be not
+     * inside {@code slop}, filtered or empty bases. When {@code filterMatched} is true, if the
+     * location of given event matches one of the points in {@link
+     * #mExcludedPointsForDownSlopChecked} it would be ignored. Otherwise, the location will be
+     * added to {@link #mExcludedPointsForDownSlopChecked}.
      *
      * @param event to find nearest point in bases.
      * @param slop to check to the given location of the event.
diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerMultiTapAndHold.java b/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerMultiTapAndHold.java
new file mode 100644
index 0000000..7824fd9
--- /dev/null
+++ b/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerMultiTapAndHold.java
@@ -0,0 +1,71 @@
+/*
+ * 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.accessibility.gestures;
+
+import android.content.Context;
+import android.view.MotionEvent;
+
+/**
+ * This class matches gestures of the form multi-finger multi-tap and hold. The number of fingers
+ * and taps for each instance is specified in the constructor.
+ */
+class MultiFingerMultiTapAndHold extends MultiFingerMultiTap {
+
+    MultiFingerMultiTapAndHold(
+            Context context,
+            int fingers,
+            int taps,
+            int gestureId,
+            GestureMatcher.StateChangeListener listener) {
+        super(context, fingers, taps, gestureId, listener);
+    }
+
+    @Override
+    protected void onPointerDown(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
+        super.onPointerDown(event, rawEvent, policyFlags);
+        if (mIsTargetFingerCountReached && mCompletedTapCount + 1 == mTargetTapCount) {
+            completeAfterLongPressTimeout(event, rawEvent, policyFlags);
+        }
+    }
+
+    @Override
+    protected void onUp(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
+        if (mCompletedTapCount + 1 == mTargetFingerCount) {
+            // Calling super.onUp  would complete the multi-tap version of this.
+            cancelGesture(event, rawEvent, policyFlags);
+        } else {
+            super.onUp(event, rawEvent, policyFlags);
+            cancelAfterDoubleTapTimeout(event, rawEvent, policyFlags);
+        }
+    }
+
+    @Override
+    public String getGestureName() {
+        final StringBuilder builder = new StringBuilder();
+        builder.append(mTargetFingerCount).append("-Finger ");
+        if (mTargetTapCount == 1) {
+            builder.append("Single");
+        } else if (mTargetTapCount == 2) {
+            builder.append("Double");
+        } else if (mTargetTapCount == 3) {
+            builder.append("Triple");
+        } else if (mTargetTapCount > 3) {
+            builder.append(mTargetTapCount);
+        }
+        return builder.append(" Tap and hold").toString();
+    }
+}
diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerSwipe.java b/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerSwipe.java
index 8249239..a14584a 100644
--- a/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerSwipe.java
+++ b/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerSwipe.java
@@ -139,7 +139,7 @@
         final int actionIndex = getActionIndex(rawEvent);
         final int pointerId = rawEvent.getPointerId(actionIndex);
         int pointerIndex = rawEvent.getPointerCount() - 1;
-        if (pointerId < 0 || pointerId > rawEvent.getPointerCount() - 1) {
+        if (pointerId < 0) {
             // Nonsensical pointer id.
             cancelGesture(event, rawEvent, policyFlags);
             return;
@@ -185,7 +185,7 @@
         }
         final int actionIndex = getActionIndex(rawEvent);
         final int pointerId = rawEvent.getPointerId(actionIndex);
-        if (pointerId < 0 || pointerId > rawEvent.getPointerCount() - 1) {
+        if (pointerId < 0) {
             // Nonsensical pointer id.
             cancelGesture(event, rawEvent, policyFlags);
             return;
@@ -224,7 +224,7 @@
         mCurrentFingerCount -= 1;
         final int actionIndex = getActionIndex(event);
         final int pointerId = event.getPointerId(actionIndex);
-        if (pointerId < 0 || pointerId > rawEvent.getPointerCount() - 1) {
+        if (pointerId < 0) {
             // Nonsensical pointer id.
             cancelGesture(event, rawEvent, policyFlags);
             return;
@@ -250,11 +250,29 @@
 
     @Override
     protected void onMove(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
-        for (int pointerIndex = 0; pointerIndex < rawEvent.getPointerCount(); ++pointerIndex) {
+        for (int pointerIndex = 0; pointerIndex < mTargetFingerCount; ++pointerIndex) {
+            if (mPointerIds[pointerIndex] == INVALID_POINTER_ID) {
+                // Fingers have started to move before the required number of fingers are down.
+                // However, they can still move less than the touch slop and still be considered
+                // touching, not moving.
+                // So we just ignore fingers that haven't been assigned a pointer id and process
+                // those who have.
+                continue;
+            }
             if (DEBUG) {
                 Slog.d(getGestureName(), "Processing move on finger " + pointerIndex);
             }
             int index = rawEvent.findPointerIndex(mPointerIds[pointerIndex]);
+            if (index < 0) {
+                // This finger is not present in this event. It could have gone up just before this
+                // movement.
+                if (DEBUG) {
+                    Slog.d(
+                            getGestureName(),
+                            "Finger " + pointerIndex + " not found in this event. skipping.");
+                }
+                continue;
+            }
             final float x = rawEvent.getX(index);
             final float y = rawEvent.getY(index);
             if (x < 0f || y < 0f) {
diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java
index 2cc11c5..61c6ef5 100644
--- a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java
+++ b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java
@@ -23,6 +23,7 @@
 import android.accessibilityservice.AccessibilityGestureEvent;
 import android.content.Context;
 import android.graphics.Point;
+import android.graphics.Region;
 import android.os.Handler;
 import android.util.Slog;
 import android.view.InputDevice;
@@ -120,6 +121,8 @@
     // Context in which this explorer operates.
     private final Context mContext;
 
+    private Region mGestureDetectionPassthroughRegion;
+    private Region mTouchExplorationPassthroughRegion;
 
 /**
      * Creates a new instance.
@@ -165,6 +168,8 @@
         } else {
             mGestureDetector = detector;
         }
+        mGestureDetectionPassthroughRegion = new Region();
+        mTouchExplorationPassthroughRegion = new Region();
     }
 
     @Override
@@ -230,10 +235,11 @@
         }
 
         mState.onReceivedMotionEvent(rawEvent);
-
-        if (mGestureDetector.onMotionEvent(event, rawEvent, policyFlags)) {
-            // Event was handled by the gesture detector.
-            return;
+        if (shouldPerformGestureDetection(event)) {
+            if (mGestureDetector.onMotionEvent(event, rawEvent, policyFlags)) {
+                // Event was handled by the gesture detector.
+                return;
+            }
         }
 
         if (event.getActionMasked() == MotionEvent.ACTION_CANCEL) {
@@ -418,6 +424,21 @@
             mSendTouchExplorationEndDelayed.forceSendAndRemove();
             mSendTouchInteractionEndDelayed.forceSendAndRemove();
             mDispatcher.sendAccessibilityEvent(AccessibilityEvent.TYPE_TOUCH_INTERACTION_START);
+            if (mTouchExplorationPassthroughRegion.contains(
+                    (int) event.getX(), (int) event.getY())) {
+                // The touch exploration passthrough overrides the gesture detection passthrough in
+                // the event they overlap.
+                // Pass this entire gesture through to the system as-is.
+                mState.startDelegating();
+                event = MotionEvent.obtainNoHistory(event);
+                mDispatcher.sendMotionEvent(
+                        event, event.getAction(), rawEvent, ALL_POINTER_ID_BITS, policyFlags);
+                mSendHoverEnterAndMoveDelayed.cancel();
+            } else if (mGestureDetectionPassthroughRegion.contains(
+                    (int) event.getX(), (int) event.getY())) {
+                // Jump straight to touch exploration.
+                mSendHoverEnterAndMoveDelayed.forceSendAndRemove();
+            }
         } else {
             // Avoid duplicated TYPE_TOUCH_INTERACTION_START event when 2nd tap of double tap.
             mSendTouchInteractionEndDelayed.cancel();
@@ -909,6 +930,29 @@
         mGestureDetector.setMultiFingerGesturesEnabled(enabled);
     }
 
+    public void setGestureDetectionPassthroughRegion(Region region) {
+        mGestureDetectionPassthroughRegion = region;
+    }
+
+    public void setTouchExplorationPassthroughRegion(Region region) {
+        mTouchExplorationPassthroughRegion = region;
+    }
+
+    private boolean shouldPerformGestureDetection(MotionEvent event) {
+        if (mState.isDelegating()) {
+            return false;
+        }
+        if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
+            final int x = (int) event.getX();
+            final int y = (int) event.getY();
+            if (mTouchExplorationPassthroughRegion.contains(x, y)
+                    || mGestureDetectionPassthroughRegion.contains(x, y)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
     /**
      * Class for delayed exiting from gesture detecting mode.
      */
@@ -1135,5 +1179,4 @@
                 + ", mTempPoint: " + mTempPoint
                 + " }";
     }
-
 }
diff --git a/services/api/lint-baseline.txt b/services/api/lint-baseline.txt
new file mode 100644
index 0000000..0b8658c
--- /dev/null
+++ b/services/api/lint-baseline.txt
@@ -0,0 +1,35 @@
+// Baseline format: 1.0
+InternalClasses: com.android.permission.persistence.RuntimePermissionsPersistence:
+    Internal classes must not be exposed
+InternalClasses: com.android.permission.persistence.RuntimePermissionsState:
+    Internal classes must not be exposed
+InternalClasses: com.android.permission.persistence.RuntimePermissionsState.PermissionState:
+    Internal classes must not be exposed
+InternalClasses: com.android.role.persistence.RolesPersistence:
+    Internal classes must not be exposed
+InternalClasses: com.android.role.persistence.RolesState:
+    Internal classes must not be exposed
+InternalClasses: com.android.server.SystemService:
+    Internal classes must not be exposed
+InternalClasses: com.android.server.SystemService.TargetUser:
+    Internal classes must not be exposed
+
+
+ProtectedMember: com.android.server.SystemService#publishBinderService(String, android.os.IBinder):
+    Protected methods not allowed; must be public: method com.android.server.SystemService.publishBinderService(String,android.os.IBinder)}
+ProtectedMember: com.android.server.SystemService#publishBinderService(String, android.os.IBinder, boolean):
+    Protected methods not allowed; must be public: method com.android.server.SystemService.publishBinderService(String,android.os.IBinder,boolean)}
+
+
+UserHandleName: com.android.permission.persistence.RuntimePermissionsPersistence#delete(android.os.UserHandle):
+    Method taking UserHandle should be named `doFooAsUser` or `queryFooForUser`, was `delete`
+UserHandleName: com.android.permission.persistence.RuntimePermissionsPersistence#read(android.os.UserHandle):
+    Method taking UserHandle should be named `doFooAsUser` or `queryFooForUser`, was `read`
+UserHandleName: com.android.permission.persistence.RuntimePermissionsPersistence#write(com.android.permission.persistence.RuntimePermissionsState, android.os.UserHandle):
+    Method taking UserHandle should be named `doFooAsUser` or `queryFooForUser`, was `write`
+UserHandleName: com.android.role.persistence.RolesPersistence#delete(android.os.UserHandle):
+    Method taking UserHandle should be named `doFooAsUser` or `queryFooForUser`, was `delete`
+UserHandleName: com.android.role.persistence.RolesPersistence#read(android.os.UserHandle):
+    Method taking UserHandle should be named `doFooAsUser` or `queryFooForUser`, was `read`
+UserHandleName: com.android.role.persistence.RolesPersistence#write(com.android.role.persistence.RolesState, android.os.UserHandle):
+    Method taking UserHandle should be named `doFooAsUser` or `queryFooForUser`, was `write`
diff --git a/services/appprediction/java/com/android/server/appprediction/AppPredictionManagerService.java b/services/appprediction/java/com/android/server/appprediction/AppPredictionManagerService.java
index 5844f98..1c4db12 100644
--- a/services/appprediction/java/com/android/server/appprediction/AppPredictionManagerService.java
+++ b/services/appprediction/java/com/android/server/appprediction/AppPredictionManagerService.java
@@ -18,12 +18,14 @@
 
 import static android.Manifest.permission.MANAGE_APP_PREDICTIONS;
 import static android.Manifest.permission.PACKAGE_USAGE_STATS;
+import static android.app.ActivityManagerInternal.ALLOW_NON_FULL;
 import static android.content.Context.APP_PREDICTION_SERVICE;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.UserIdInt;
+import android.app.ActivityManagerInternal;
 import android.app.prediction.AppPredictionContext;
 import android.app.prediction.AppPredictionSessionId;
 import android.app.prediction.AppTargetEvent;
@@ -34,7 +36,6 @@
 import android.os.Binder;
 import android.os.ResultReceiver;
 import android.os.ShellCallback;
-import android.os.UserHandle;
 import android.util.Slog;
 
 import com.android.server.LocalServices;
@@ -108,21 +109,21 @@
         @Override
         public void createPredictionSession(@NonNull AppPredictionContext context,
                 @NonNull AppPredictionSessionId sessionId) {
-            runForUserLocked("createPredictionSession",
+            runForUserLocked("createPredictionSession", sessionId,
                     (service) -> service.onCreatePredictionSessionLocked(context, sessionId));
         }
 
         @Override
         public void notifyAppTargetEvent(@NonNull AppPredictionSessionId sessionId,
                 @NonNull AppTargetEvent event) {
-            runForUserLocked("notifyAppTargetEvent",
+            runForUserLocked("notifyAppTargetEvent", sessionId,
                     (service) -> service.notifyAppTargetEventLocked(sessionId, event));
         }
 
         @Override
         public void notifyLaunchLocationShown(@NonNull AppPredictionSessionId sessionId,
                 @NonNull String launchLocation, @NonNull ParceledListSlice targetIds) {
-            runForUserLocked("notifyLaunchLocationShown", (service) ->
+            runForUserLocked("notifyLaunchLocationShown", sessionId, (service) ->
                     service.notifyLaunchLocationShownLocked(sessionId, launchLocation, targetIds));
         }
 
@@ -130,32 +131,32 @@
         public void sortAppTargets(@NonNull AppPredictionSessionId sessionId,
                 @NonNull ParceledListSlice targets,
                 IPredictionCallback callback) {
-            runForUserLocked("sortAppTargets",
+            runForUserLocked("sortAppTargets", sessionId,
                     (service) -> service.sortAppTargetsLocked(sessionId, targets, callback));
         }
 
         @Override
         public void registerPredictionUpdates(@NonNull AppPredictionSessionId sessionId,
                 @NonNull IPredictionCallback callback) {
-            runForUserLocked("registerPredictionUpdates",
+            runForUserLocked("registerPredictionUpdates", sessionId,
                     (service) -> service.registerPredictionUpdatesLocked(sessionId, callback));
         }
 
         public void unregisterPredictionUpdates(@NonNull AppPredictionSessionId sessionId,
                 @NonNull IPredictionCallback callback) {
-            runForUserLocked("unregisterPredictionUpdates",
+            runForUserLocked("unregisterPredictionUpdates", sessionId,
                     (service) -> service.unregisterPredictionUpdatesLocked(sessionId, callback));
         }
 
         @Override
         public void requestPredictionUpdate(@NonNull AppPredictionSessionId sessionId) {
-            runForUserLocked("requestPredictionUpdate",
+            runForUserLocked("requestPredictionUpdate", sessionId,
                     (service) -> service.requestPredictionUpdateLocked(sessionId));
         }
 
         @Override
         public void onDestroyPredictionSession(@NonNull AppPredictionSessionId sessionId) {
-            runForUserLocked("onDestroyPredictionSession",
+            runForUserLocked("onDestroyPredictionSession", sessionId,
                     (service) -> service.onDestroyPredictionSessionLocked(sessionId));
         }
 
@@ -167,9 +168,12 @@
                     .exec(this, in, out, err, args, callback, resultReceiver);
         }
 
-        private void runForUserLocked(@NonNull String func,
-                @NonNull Consumer<AppPredictionPerUserService> c) {
-            final int userId = UserHandle.getCallingUserId();
+        private void runForUserLocked(@NonNull final String func,
+                @NonNull final AppPredictionSessionId sessionId,
+                @NonNull final Consumer<AppPredictionPerUserService> c) {
+            ActivityManagerInternal am = LocalServices.getService(ActivityManagerInternal.class);
+            final int userId = am.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
+                    sessionId.getUserId(), false, ALLOW_NON_FULL, null, null);
 
             Context ctx = getContext();
             if (!(ctx.checkCallingPermission(PACKAGE_USAGE_STATS) == PERMISSION_GRANTED
diff --git a/services/appprediction/java/com/android/server/appprediction/AppPredictionPerUserService.java b/services/appprediction/java/com/android/server/appprediction/AppPredictionPerUserService.java
index 48d976b..0b3899d 100644
--- a/services/appprediction/java/com/android/server/appprediction/AppPredictionPerUserService.java
+++ b/services/appprediction/java/com/android/server/appprediction/AppPredictionPerUserService.java
@@ -16,6 +16,8 @@
 
 package com.android.server.appprediction;
 
+import static android.provider.DeviceConfig.NAMESPACE_SYSTEMUI;
+
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.AppGlobals;
@@ -30,16 +32,18 @@
 import android.content.pm.ServiceInfo;
 import android.os.RemoteCallbackList;
 import android.os.RemoteException;
+import android.provider.DeviceConfig;
 import android.service.appprediction.AppPredictionService;
+import android.service.appprediction.IPredictionService;
 import android.util.ArrayMap;
-import android.util.ArraySet;
 import android.util.Slog;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.infra.AbstractRemoteService;
+import com.android.server.LocalServices;
 import com.android.server.infra.AbstractPerUserSystemService;
+import com.android.server.people.PeopleServiceInternal;
 
-import java.util.Map;
-import java.util.Set;
 import java.util.function.Consumer;
 
 /**
@@ -50,14 +54,12 @@
              implements RemoteAppPredictionService.RemoteAppPredictionServiceCallbacks {
 
     private static final String TAG = AppPredictionPerUserService.class.getSimpleName();
+    private static final String PREDICT_USING_PEOPLE_SERVICE_PREFIX =
+            "predict_using_people_service_";
 
-    /**
-     * A lookup of remote services in respect to their {@link ComponentName}.
-     */
-    @NonNull
+    @Nullable
     @GuardedBy("mLock")
-    private final ArrayMap<ComponentName, RemoteAppPredictionService> mRemoteServices =
-            new ArrayMap<>();
+    private RemoteAppPredictionService mRemoteService;
 
     /**
      * When {@code true}, remote service died but service state is kept so it's restored after
@@ -99,7 +101,7 @@
         if (enabledChanged) {
             if (!isEnabledLocked()) {
                 // Clear the remote service for the next call
-                mRemoteServices.clear();
+                mRemoteService = null;
             }
         }
         return enabledChanged;
@@ -113,12 +115,14 @@
             @NonNull AppPredictionSessionId sessionId) {
         if (!mSessionInfos.containsKey(sessionId)) {
             mSessionInfos.put(sessionId, new AppPredictionSessionInfo(sessionId, context,
-                    resolveComponentName(context), this::removeAppPredictionSessionInfo));
+                    DeviceConfig.getBoolean(NAMESPACE_SYSTEMUI,
+                            PREDICT_USING_PEOPLE_SERVICE_PREFIX + context.getUiSurface(), false),
+                    this::removeAppPredictionSessionInfo));
         }
-        final RemoteAppPredictionService service = getRemoteServiceLocked(
-                getComponentName(sessionId));
-        if (service != null) {
-            service.onCreatePredictionSession(context, sessionId);
+        final boolean serviceExists = resolveService(sessionId, s ->
+                s.onCreatePredictionSession(context, sessionId));
+        if (!serviceExists) {
+            mSessionInfos.remove(sessionId);
         }
     }
 
@@ -128,11 +132,7 @@
     @GuardedBy("mLock")
     public void notifyAppTargetEventLocked(@NonNull AppPredictionSessionId sessionId,
             @NonNull AppTargetEvent event) {
-        final RemoteAppPredictionService service = getRemoteServiceLocked(
-                getComponentName(sessionId));
-        if (service != null) {
-            service.notifyAppTargetEvent(sessionId, event);
-        }
+        resolveService(sessionId, s -> s.notifyAppTargetEvent(sessionId, event));
     }
 
     /**
@@ -141,11 +141,8 @@
     @GuardedBy("mLock")
     public void notifyLaunchLocationShownLocked(@NonNull AppPredictionSessionId sessionId,
             @NonNull String launchLocation, @NonNull ParceledListSlice targetIds) {
-        final RemoteAppPredictionService service = getRemoteServiceLocked(
-                getComponentName(sessionId));
-        if (service != null) {
-            service.notifyLaunchLocationShown(sessionId, launchLocation, targetIds);
-        }
+        resolveService(sessionId, s ->
+                s.notifyLaunchLocationShown(sessionId, launchLocation, targetIds));
     }
 
     /**
@@ -154,11 +151,7 @@
     @GuardedBy("mLock")
     public void sortAppTargetsLocked(@NonNull AppPredictionSessionId sessionId,
             @NonNull ParceledListSlice targets, @NonNull IPredictionCallback callback) {
-        final RemoteAppPredictionService service = getRemoteServiceLocked(
-                getComponentName(sessionId));
-        if (service != null) {
-            service.sortAppTargets(sessionId, targets, callback);
-        }
+        resolveService(sessionId, s -> s.sortAppTargets(sessionId, targets, callback));
     }
 
     /**
@@ -167,15 +160,11 @@
     @GuardedBy("mLock")
     public void registerPredictionUpdatesLocked(@NonNull AppPredictionSessionId sessionId,
             @NonNull IPredictionCallback callback) {
-        final RemoteAppPredictionService service = getRemoteServiceLocked(
-                getComponentName(sessionId));
-        if (service != null) {
-            service.registerPredictionUpdates(sessionId, callback);
-
-            AppPredictionSessionInfo sessionInfo = mSessionInfos.get(sessionId);
-            if (sessionInfo != null) {
-                sessionInfo.addCallbackLocked(callback);
-            }
+        final boolean serviceExists = resolveService(sessionId, s ->
+                s.registerPredictionUpdates(sessionId, callback));
+        final AppPredictionSessionInfo sessionInfo = mSessionInfos.get(sessionId);
+        if (serviceExists && sessionInfo != null) {
+            sessionInfo.addCallbackLocked(callback);
         }
     }
 
@@ -185,15 +174,11 @@
     @GuardedBy("mLock")
     public void unregisterPredictionUpdatesLocked(@NonNull AppPredictionSessionId sessionId,
             @NonNull IPredictionCallback callback) {
-        final RemoteAppPredictionService service = getRemoteServiceLocked(
-                getComponentName(sessionId));
-        if (service != null) {
-            service.unregisterPredictionUpdates(sessionId, callback);
-
-            AppPredictionSessionInfo sessionInfo = mSessionInfos.get(sessionId);
-            if (sessionInfo != null) {
-                sessionInfo.removeCallbackLocked(callback);
-            }
+        final boolean serviceExists = resolveService(sessionId, s ->
+                s.unregisterPredictionUpdates(sessionId, callback));
+        final AppPredictionSessionInfo sessionInfo = mSessionInfos.get(sessionId);
+        if (serviceExists && sessionInfo != null) {
+            sessionInfo.removeCallbackLocked(callback);
         }
     }
 
@@ -202,11 +187,7 @@
      */
     @GuardedBy("mLock")
     public void requestPredictionUpdateLocked(@NonNull AppPredictionSessionId sessionId) {
-        final RemoteAppPredictionService service = getRemoteServiceLocked(
-                getComponentName(sessionId));
-        if (service != null) {
-            service.requestPredictionUpdate(sessionId);
-        }
+        resolveService(sessionId, s -> s.requestPredictionUpdate(sessionId));
     }
 
     /**
@@ -214,15 +195,11 @@
      */
     @GuardedBy("mLock")
     public void onDestroyPredictionSessionLocked(@NonNull AppPredictionSessionId sessionId) {
-        final RemoteAppPredictionService service = getRemoteServiceLocked(
-                getComponentName(sessionId));
-        if (service != null) {
-            service.onDestroyPredictionSession(sessionId);
-
-            AppPredictionSessionInfo sessionInfo = mSessionInfos.get(sessionId);
-            if (sessionInfo != null) {
-                sessionInfo.destroy();
-            }
+        final boolean serviceExists = resolveService(sessionId, s ->
+                s.onDestroyPredictionSession(sessionId));
+        final AppPredictionSessionInfo sessionInfo = mSessionInfos.get(sessionId);
+        if (serviceExists && sessionInfo != null) {
+            sessionInfo.destroy();
         }
     }
 
@@ -243,7 +220,7 @@
             synchronized (mLock) {
                 if (mZombie) {
                     // Sanity check - shouldn't happen
-                    if (mRemoteServices.isEmpty()) {
+                    if (mRemoteService == null) {
                         Slog.w(TAG, "Cannot resurrect sessions because remote service is null");
                         return;
                     }
@@ -280,30 +257,22 @@
     }
 
     private void destroyAndRebindRemoteService() {
-        if (mRemoteServices.isEmpty()) {
+        if (mRemoteService == null) {
             return;
         }
 
         if (isDebug()) {
             Slog.d(TAG, "Destroying the old remote service.");
         }
-        final Set<Map.Entry<ComponentName, RemoteAppPredictionService>> services =
-                new ArraySet<>(mRemoteServices.entrySet());
-        mRemoteServices.clear();
-        services.stream().forEach(entry -> destroyAndRebindRemoteService(
-                entry.getKey(), entry.getValue()));
-    }
+        mRemoteService.destroy();
+        mRemoteService = null;
 
-    private void destroyAndRebindRemoteService(
-            @NonNull final ComponentName component,
-            @NonNull final RemoteAppPredictionService service) {
-        service.destroy();
-        final RemoteAppPredictionService newService = getRemoteServiceLocked(component);
-        if (newService != null) {
+        mRemoteService = getRemoteServiceLocked();
+        if (mRemoteService != null) {
             if (isDebug()) {
                 Slog.d(TAG, "Rebinding to the new remote service.");
             }
-            newService.reconnect();
+            mRemoteService.reconnect();
         }
     }
 
@@ -314,7 +283,7 @@
     private void resurrectSessionsLocked() {
         final int numSessions = mSessionInfos.size();
         if (isDebug()) {
-            Slog.d(TAG, "Resurrecting remote service (" + mRemoteServices + ") on "
+            Slog.d(TAG, "Resurrecting remote service (" + mRemoteService + ") on "
                     + numSessions + " sessions.");
         }
 
@@ -332,37 +301,52 @@
         }
     }
 
+    @GuardedBy("mLock")
     @Nullable
-    private ComponentName resolveComponentName(@NonNull final AppPredictionContext context) {
-        // TODO: add logic to determine serviceName based on context
-        final String serviceName = getComponentNameLocked();
-        if (serviceName == null) {
-            if (mMaster.verbose) {
-                Slog.v(TAG, "getRemoteServiceLocked(): not set, context = " + context);
+    protected boolean resolveService(@NonNull final AppPredictionSessionId sessionId,
+            @NonNull final AbstractRemoteService.AsyncRequest<IPredictionService> cb) {
+        final AppPredictionSessionInfo sessionInfo = mSessionInfos.get(sessionId);
+        if (sessionInfo == null) return false;
+        if (sessionInfo.mUsesPeopleService) {
+            final IPredictionService service =
+                    LocalServices.getService(PeopleServiceInternal.class);
+            if (service != null) {
+                try {
+                    cb.run(service);
+                } catch (RemoteException e) {
+                    // Shouldn't happen.
+                    Slog.w(TAG, "Failed to invoke service:" + service, e);
+                }
             }
-            return null;
+            return service != null;
+        } else {
+            final RemoteAppPredictionService service = getRemoteServiceLocked();
+            if (service != null) {
+                service.scheduleOnResolvedService(cb);
+            }
+            return service != null;
         }
-        return ComponentName.unflattenFromString(serviceName);
-    }
-
-    @Nullable
-    private ComponentName getComponentName(@NonNull final AppPredictionSessionId sessionId) {
-        AppPredictionSessionInfo sessionInfo = mSessionInfos.get(sessionId);
-        return sessionInfo == null ? null : sessionInfo.mComponentName;
     }
 
     @GuardedBy("mLock")
     @Nullable
-    private RemoteAppPredictionService getRemoteServiceLocked(
-            @Nullable final ComponentName serviceComponent) {
-        if (serviceComponent == null) return null;
-        if (!mRemoteServices.containsKey(serviceComponent)) {
-            mRemoteServices.put(serviceComponent, new RemoteAppPredictionService(getContext(),
+    private RemoteAppPredictionService getRemoteServiceLocked() {
+        if (mRemoteService == null) {
+            final String serviceName = getComponentNameLocked();
+            if (serviceName == null) {
+                if (mMaster.verbose) {
+                    Slog.v(TAG, "getRemoteServiceLocked(): not set");
+                }
+                return null;
+            }
+            ComponentName serviceComponent = ComponentName.unflattenFromString(serviceName);
+
+            mRemoteService = new RemoteAppPredictionService(getContext(),
                     AppPredictionService.SERVICE_INTERFACE, serviceComponent, mUserId, this,
-                    mMaster.isBindInstantServiceAllowed(), mMaster.verbose));
+                    mMaster.isBindInstantServiceAllowed(), mMaster.verbose);
         }
 
-        return mRemoteServices.get(serviceComponent);
+        return mRemoteService;
     }
 
     private static final class AppPredictionSessionInfo {
@@ -372,8 +356,7 @@
         private final AppPredictionSessionId mSessionId;
         @NonNull
         private final AppPredictionContext mPredictionContext;
-        @Nullable
-        private final ComponentName mComponentName;
+        private final boolean mUsesPeopleService;
         @NonNull
         private final Consumer<AppPredictionSessionId> mRemoveSessionInfoAction;
 
@@ -394,14 +377,14 @@
         AppPredictionSessionInfo(
                 @NonNull final AppPredictionSessionId id,
                 @NonNull final AppPredictionContext predictionContext,
-                @Nullable final ComponentName componentName,
+                final boolean usesPeopleService,
                 @NonNull final Consumer<AppPredictionSessionId> removeSessionInfoAction) {
             if (DEBUG) {
                 Slog.d(TAG, "Creating AppPredictionSessionInfo for session Id=" + id);
             }
             mSessionId = id;
             mPredictionContext = predictionContext;
-            mComponentName = componentName;
+            mUsesPeopleService = usesPeopleService;
             mRemoveSessionInfoAction = removeSessionInfoAction;
         }
 
@@ -433,8 +416,8 @@
         void resurrectSessionLocked(AppPredictionPerUserService service) {
             int callbackCount = mCallbacks.getRegisteredCallbackCount();
             if (DEBUG) {
-                Slog.d(TAG, "Resurrecting remote service (" + service.getRemoteServiceLocked(
-                        mComponentName) + ") for session Id=" + mSessionId + " and "
+                Slog.d(TAG, "Resurrecting remote service (" + service.getRemoteServiceLocked()
+                        + ") for session Id=" + mSessionId + " and "
                         + callbackCount + " callbacks.");
             }
             service.onCreatePredictionSessionLocked(mPredictionContext, mSessionId);
diff --git a/services/appprediction/java/com/android/server/appprediction/RemoteAppPredictionService.java b/services/appprediction/java/com/android/server/appprediction/RemoteAppPredictionService.java
index 04e0e7f..ceb1caf 100644
--- a/services/appprediction/java/com/android/server/appprediction/RemoteAppPredictionService.java
+++ b/services/appprediction/java/com/android/server/appprediction/RemoteAppPredictionService.java
@@ -16,13 +16,8 @@
 package com.android.server.appprediction;
 
 import android.annotation.NonNull;
-import android.app.prediction.AppPredictionContext;
-import android.app.prediction.AppPredictionSessionId;
-import android.app.prediction.AppTargetEvent;
-import android.app.prediction.IPredictionCallback;
 import android.content.ComponentName;
 import android.content.Context;
-import android.content.pm.ParceledListSlice;
 import android.os.IBinder;
 import android.service.appprediction.IPredictionService;
 import android.text.format.DateUtils;
@@ -71,70 +66,6 @@
     }
 
     /**
-     * Notifies the service of a new prediction session.
-     */
-    public void onCreatePredictionSession(@NonNull AppPredictionContext context,
-            @NonNull AppPredictionSessionId sessionId) {
-        scheduleAsyncRequest((s) -> s.onCreatePredictionSession(context, sessionId));
-    }
-
-    /**
-     * Records an app target event to the service.
-     */
-    public void notifyAppTargetEvent(@NonNull AppPredictionSessionId sessionId,
-            @NonNull AppTargetEvent event) {
-        scheduleAsyncRequest((s) -> s.notifyAppTargetEvent(sessionId, event));
-    }
-
-    /**
-     * Records when a launch location is shown.
-     */
-    public void notifyLaunchLocationShown(@NonNull AppPredictionSessionId sessionId,
-            @NonNull String launchLocation, @NonNull ParceledListSlice targetIds) {
-        scheduleAsyncRequest((s)
-                -> s.notifyLaunchLocationShown(sessionId, launchLocation, targetIds));
-    }
-
-    /**
-     * Requests the service to sort a list of apps or shortcuts.
-     */
-    public void sortAppTargets(@NonNull AppPredictionSessionId sessionId,
-            @NonNull ParceledListSlice targets, @NonNull IPredictionCallback callback) {
-        scheduleAsyncRequest((s) -> s.sortAppTargets(sessionId, targets, callback));
-    }
-
-
-    /**
-     * Registers a callback for continuous updates of predicted apps or shortcuts.
-     */
-    public void registerPredictionUpdates(@NonNull AppPredictionSessionId sessionId,
-            @NonNull IPredictionCallback callback) {
-        scheduleAsyncRequest((s) -> s.registerPredictionUpdates(sessionId, callback));
-    }
-
-    /**
-     * Unregisters a callback for continuous updates of predicted apps or shortcuts.
-     */
-    public void unregisterPredictionUpdates(@NonNull AppPredictionSessionId sessionId,
-            @NonNull IPredictionCallback callback) {
-        scheduleAsyncRequest((s) -> s.unregisterPredictionUpdates(sessionId, callback));
-    }
-
-    /**
-     * Requests a new set of predicted apps or shortcuts.
-     */
-    public void requestPredictionUpdate(@NonNull AppPredictionSessionId sessionId) {
-        scheduleAsyncRequest((s) -> s.requestPredictionUpdate(sessionId));
-    }
-
-    /**
-     * Notifies the service of the end of an existing prediction session.
-     */
-    public void onDestroyPredictionSession(@NonNull AppPredictionSessionId sessionId) {
-        scheduleAsyncRequest((s) -> s.onDestroyPredictionSession(sessionId));
-    }
-
-    /**
      * Schedules a request to bind to the remote service.
      */
     public void reconnect() {
@@ -142,6 +73,13 @@
     }
 
     /**
+     * Schedule async request on remote service.
+     */
+    public void scheduleOnResolvedService(@NonNull AsyncRequest<IPredictionService> request) {
+        scheduleAsyncRequest(request);
+    }
+
+    /**
      * Failure callback
      */
     public interface RemoteAppPredictionServiceCallbacks
diff --git a/services/art-profile b/services/art-profile
index 73a4208..1f53ebd 100644
--- a/services/art-profile
+++ b/services/art-profile
@@ -1,9 +1,25 @@
+PLandroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;-><init>(JJ)V
+PLandroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;->getTotalUsageLimit()J
+PLandroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;->getUsageRemaining()J
 HSPLandroid/app/usage/UsageStatsManagerInternal;-><init>()V
 PLandroid/content/pm/PackageManagerInternal$PackageListObserver;->onPackageChanged(Ljava/lang/String;I)V
 HSPLandroid/content/pm/PackageManagerInternal;-><init>()V
+HPLandroid/hardware/audio/common/V2_0/AudioChannelMask;->toString(I)Ljava/lang/String;
+HPLandroid/hardware/audio/common/V2_0/AudioConfig;-><init>()V
+HPLandroid/hardware/audio/common/V2_0/AudioConfig;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/audio/common/V2_0/AudioConfig;->toString()Ljava/lang/String;
+HPLandroid/hardware/audio/common/V2_0/AudioFormat;->toString(I)Ljava/lang/String;
+HPLandroid/hardware/audio/common/V2_0/AudioOffloadInfo;-><init>()V
+HPLandroid/hardware/audio/common/V2_0/AudioOffloadInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/audio/common/V2_0/AudioOffloadInfo;->toString()Ljava/lang/String;
+HPLandroid/hardware/audio/common/V2_0/AudioStreamType;->toString(I)Ljava/lang/String;
+HPLandroid/hardware/audio/common/V2_0/AudioUsage;->toString(I)Ljava/lang/String;
+HSPLandroid/hardware/audio/common/V2_0/Uuid;-><init>()V
+HSPLandroid/hardware/audio/common/V2_0/Uuid;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/audio/common/V2_0/Uuid;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
 HSPLandroid/hardware/authsecret/V1_0/IAuthSecret$Proxy;-><init>(Landroid/os/IHwBinder;)V
 HSPLandroid/hardware/authsecret/V1_0/IAuthSecret$Proxy;->interfaceChain()Ljava/util/ArrayList;
-PLandroid/hardware/authsecret/V1_0/IAuthSecret$Proxy;->primaryUserCredential(Ljava/util/ArrayList;)V
+HPLandroid/hardware/authsecret/V1_0/IAuthSecret$Proxy;->primaryUserCredential(Ljava/util/ArrayList;)V
 HSPLandroid/hardware/authsecret/V1_0/IAuthSecret;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/authsecret/V1_0/IAuthSecret;
 HSPLandroid/hardware/authsecret/V1_0/IAuthSecret;->getService()Landroid/hardware/authsecret/V1_0/IAuthSecret;
 HSPLandroid/hardware/authsecret/V1_0/IAuthSecret;->getService(Ljava/lang/String;)Landroid/hardware/authsecret/V1_0/IAuthSecret;
@@ -11,23 +27,50 @@
 HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->asBinder()Landroid/os/IHwBinder;
 HPLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->authenticate(J)I
 HPLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->cancel()I
-PLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->enumerate()I
+PLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->debug(Landroid/os/NativeHandle;Ljava/util/ArrayList;)V
+PLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->enroll(Ljava/util/ArrayList;ILjava/util/ArrayList;)I
+HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->enumerate()I
 PLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->generateChallenge(I)Landroid/hardware/biometrics/face/V1_0/OptionalUint64;
 HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->getAuthenticatorId()Landroid/hardware/biometrics/face/V1_0/OptionalUint64;
+PLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->getFeature(II)Landroid/hardware/biometrics/face/V1_0/OptionalBool;
 HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->remove(I)I
 PLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->resetLockout(Ljava/util/ArrayList;)I
 PLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->revokeChallenge()I
 HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->setActiveUser(ILjava/lang/String;)I
 HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->setCallback(Landroid/hardware/biometrics/face/V1_0/IBiometricsFaceClientCallback;)Landroid/hardware/biometrics/face/V1_0/OptionalUint64;
+PLandroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;->setFeature(IZLjava/util/ArrayList;I)I
 HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFace;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
 HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFace;->getService()Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
 HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFace;->getService(Ljava/lang/String;)Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
 HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFaceClientCallback$Stub;-><init>()V
 HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFaceClientCallback$Stub;->asBinder()Landroid/os/IHwBinder;
 HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFaceClientCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+PLandroid/hardware/biometrics/face/V1_0/OptionalBool;-><init>()V
+PLandroid/hardware/biometrics/face/V1_0/OptionalBool;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/biometrics/face/V1_0/OptionalBool;->readFromParcel(Landroid/os/HwParcel;)V
 HSPLandroid/hardware/biometrics/face/V1_0/OptionalUint64;-><init>()V
 HSPLandroid/hardware/biometrics/face/V1_0/OptionalUint64;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
 HSPLandroid/hardware/biometrics/face/V1_0/OptionalUint64;->readFromParcel(Landroid/os/HwParcel;)V
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;-><init>(Landroid/os/IHwBinder;)V
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->authenticate(JI)I
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->cancel()I
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->enroll([BII)I
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->enumerate()I
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->getAuthenticatorId()J
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->postEnroll()I
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->preEnroll()J
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->remove(II)I
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->setActiveGroup(ILjava/lang/String;)I
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->setNotify(Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;)J
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->getService()Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->getService(Ljava/lang/String;)Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback$Stub;-><init>()V
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback$Stub;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
 HSPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs$Proxy;-><init>(Landroid/os/IHwBinder;)V
 HSPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs$Proxy;->hasHDRDisplay()Landroid/hardware/configstore/V1_0/OptionalBool;
 HSPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs$Proxy;->hasWideColorDisplay()Landroid/hardware/configstore/V1_0/OptionalBool;
@@ -48,10 +91,12 @@
 HSPLandroid/hardware/health/V2_0/IHealth$Proxy;-><init>(Landroid/os/IHwBinder;)V
 HSPLandroid/hardware/health/V2_0/IHealth$Proxy;->asBinder()Landroid/os/IHwBinder;
 HSPLandroid/hardware/health/V2_0/IHealth$Proxy;->equals(Ljava/lang/Object;)Z
-PLandroid/hardware/health/V2_0/IHealth$Proxy;->getCapacity(Landroid/hardware/health/V2_0/IHealth$getCapacityCallback;)V
-PLandroid/hardware/health/V2_0/IHealth$Proxy;->getChargeCounter(Landroid/hardware/health/V2_0/IHealth$getChargeCounterCallback;)V
-PLandroid/hardware/health/V2_0/IHealth$Proxy;->getCurrentAverage(Landroid/hardware/health/V2_0/IHealth$getCurrentAverageCallback;)V
-PLandroid/hardware/health/V2_0/IHealth$Proxy;->getEnergyCounter(Landroid/hardware/health/V2_0/IHealth$getEnergyCounterCallback;)V
+HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getCapacity(Landroid/hardware/health/V2_0/IHealth$getCapacityCallback;)V
+HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getChargeCounter(Landroid/hardware/health/V2_0/IHealth$getChargeCounterCallback;)V
+HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getCurrentAverage(Landroid/hardware/health/V2_0/IHealth$getCurrentAverageCallback;)V
+HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getCurrentNow(Landroid/hardware/health/V2_0/IHealth$getCurrentNowCallback;)V
+HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getEnergyCounter(Landroid/hardware/health/V2_0/IHealth$getEnergyCounterCallback;)V
+HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getHealthInfo(Landroid/hardware/health/V2_0/IHealth$getHealthInfoCallback;)V
 HSPLandroid/hardware/health/V2_0/IHealth$Proxy;->interfaceChain()Ljava/util/ArrayList;
 HSPLandroid/hardware/health/V2_0/IHealth$Proxy;->registerCallback(Landroid/hardware/health/V2_0/IHealthInfoCallback;)I
 HSPLandroid/hardware/health/V2_0/IHealth$Proxy;->update()I
@@ -59,17 +104,92 @@
 HSPLandroid/hardware/health/V2_0/IHealth;->getService(Ljava/lang/String;Z)Landroid/hardware/health/V2_0/IHealth;
 HSPLandroid/hardware/health/V2_0/IHealthInfoCallback$Stub;-><init>()V
 HSPLandroid/hardware/health/V2_0/IHealthInfoCallback$Stub;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/health/V2_0/IHealthInfoCallback$Stub;->interfaceChain()Ljava/util/ArrayList;
 HSPLandroid/hardware/health/V2_0/IHealthInfoCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
 HSPLandroid/hardware/health/V2_0/StorageAttribute;-><init>()V
 HSPLandroid/hardware/health/V2_0/StorageAttribute;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
 HSPLandroid/hardware/health/V2_0/StorageInfo;-><init>()V
 HSPLandroid/hardware/health/V2_0/StorageInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/light/HwLight$1;-><init>()V
+HSPLandroid/hardware/light/HwLight;-><clinit>()V
+HSPLandroid/hardware/light/HwLight;-><init>()V
+HSPLandroid/hardware/light/ILights$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/light/ILights;
 HSPLandroid/hardware/oemlock/V1_0/IOemLock$Proxy;-><init>(Landroid/os/IHwBinder;)V
 HSPLandroid/hardware/oemlock/V1_0/IOemLock$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/oemlock/V1_0/IOemLock$Proxy;->isOemUnlockAllowedByCarrier(Landroid/hardware/oemlock/V1_0/IOemLock$isOemUnlockAllowedByCarrierCallback;)V
+PLandroid/hardware/oemlock/V1_0/IOemLock$Proxy;->isOemUnlockAllowedByDevice(Landroid/hardware/oemlock/V1_0/IOemLock$isOemUnlockAllowedByDeviceCallback;)V
+PLandroid/hardware/oemlock/V1_0/IOemLock$Proxy;->setOemUnlockAllowedByCarrier(ZLjava/util/ArrayList;)I
 HSPLandroid/hardware/oemlock/V1_0/IOemLock;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/oemlock/V1_0/IOemLock;
 HSPLandroid/hardware/oemlock/V1_0/IOemLock;->getService()Landroid/hardware/oemlock/V1_0/IOemLock;
 HSPLandroid/hardware/oemlock/V1_0/IOemLock;->getService(Ljava/lang/String;)Landroid/hardware/oemlock/V1_0/IOemLock;
+HSPLandroid/hardware/rebootescrow/IRebootEscrow$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/hardware/rebootescrow/IRebootEscrow$Stub$Proxy;->retrieveKey()[B
+HSPLandroid/hardware/rebootescrow/IRebootEscrow$Stub$Proxy;->storeKey([B)V
+HSPLandroid/hardware/rebootescrow/IRebootEscrow$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/rebootescrow/IRebootEscrow;
+PLandroid/hardware/soundtrigger/V2_0/ConfidenceLevel;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_0/ConfidenceLevel;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/soundtrigger/V2_0/ConfidenceLevel;->toString()Ljava/lang/String;
+PLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Phrase;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Phrase;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;-><init>()V
+HSPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;->readFromParcel(Landroid/os/HwParcel;)V
+HSPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Proxy;-><init>(Landroid/os/IHwBinder;)V
+HSPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Proxy;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Proxy;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$RecognitionConfig;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$RecognitionConfig;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$SoundModel;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$SoundModel;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;
+HSPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;->getService(Ljava/lang/String;Z)Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;
+HSPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;->getService(Z)Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHwCallback$RecognitionEvent;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHwCallback$RecognitionEvent;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHwCallback$RecognitionEvent;->toString()Ljava/lang/String;
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHwCallback$RecognitionStatus;->toString(I)Ljava/lang/String;
+HPLandroid/hardware/soundtrigger/V2_0/PhraseRecognitionExtra;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_0/PhraseRecognitionExtra;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/soundtrigger/V2_0/PhraseRecognitionExtra;->toString()Ljava/lang/String;
+HPLandroid/hardware/soundtrigger/V2_0/PhraseRecognitionExtra;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+HPLandroid/hardware/soundtrigger/V2_0/SoundModelType;->toString(I)Ljava/lang/String;
+PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;->writeToParcel(Landroid/os/HwParcel;)V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$RecognitionConfig;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$RecognitionConfig;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$RecognitionConfig;->writeToParcel(Landroid/os/HwParcel;)V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;-><init>()V
+PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;->writeToParcel(Landroid/os/HwParcel;)V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;->readFromParcel(Landroid/os/HwParcel;)V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;->toString()Ljava/lang/String;
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$RecognitionEvent;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$RecognitionEvent;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$RecognitionEvent;->readFromParcel(Landroid/os/HwParcel;)V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$RecognitionEvent;->toString()Ljava/lang/String;
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$Stub;-><init>()V
+PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$Stub;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+HSPLandroid/hardware/soundtrigger/V2_2/ISoundTriggerHw$Proxy;-><init>(Landroid/os/IHwBinder;)V
+HPLandroid/hardware/soundtrigger/V2_2/ISoundTriggerHw$Proxy;->getModelState(I)I
+HSPLandroid/hardware/soundtrigger/V2_2/ISoundTriggerHw$Proxy;->getProperties(Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$getPropertiesCallback;)V
+HSPLandroid/hardware/soundtrigger/V2_2/ISoundTriggerHw$Proxy;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/soundtrigger/V2_2/ISoundTriggerHw$Proxy;->loadPhraseSoundModel_2_1(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback;ILandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$loadPhraseSoundModel_2_1Callback;)V
+HPLandroid/hardware/soundtrigger/V2_2/ISoundTriggerHw$Proxy;->loadSoundModel_2_1(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback;ILandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$loadSoundModel_2_1Callback;)V
+HPLandroid/hardware/soundtrigger/V2_2/ISoundTriggerHw$Proxy;->startRecognition_2_1(ILandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$RecognitionConfig;Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback;I)I
+HPLandroid/hardware/soundtrigger/V2_2/ISoundTriggerHw$Proxy;->stopRecognition(I)I
+HPLandroid/hardware/soundtrigger/V2_2/ISoundTriggerHw$Proxy;->unloadSoundModel(I)I
+HSPLandroid/hardware/soundtrigger/V2_2/ISoundTriggerHw;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/soundtrigger/V2_2/ISoundTriggerHw;
+HSPLandroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$Proxy;-><init>(Landroid/os/IHwBinder;)V
+HSPLandroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$Proxy;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/soundtrigger/V2_3/ISoundTriggerHw;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/soundtrigger/V2_3/ISoundTriggerHw;
+HSPLandroid/hardware/soundtrigger/V2_3/Properties;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_3/RecognitionConfig;-><init>()V
 HSPLandroid/hardware/usb/V1_0/IUsb$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/usb/V1_0/IUsb$Proxy;->asBinder()Landroid/os/IHwBinder;
 HSPLandroid/hardware/usb/V1_0/IUsb$Proxy;->interfaceChain()Ljava/util/ArrayList;
 HSPLandroid/hardware/usb/V1_0/IUsb$Proxy;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
 HSPLandroid/hardware/usb/V1_0/IUsb$Proxy;->queryPortStatus()V
@@ -81,6 +201,12 @@
 HSPLandroid/hardware/usb/V1_0/PortStatus;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
 HSPLandroid/hardware/usb/V1_1/PortStatus_1_1;-><init>()V
 HSPLandroid/hardware/usb/V1_1/PortStatus_1_1;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/usb/V1_1/PortStatus_1_1;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
+PLandroid/hardware/usb/V1_2/IUsb$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/usb/V1_2/IUsb$Proxy;->enableContaminantPresenceDetection(Ljava/lang/String;Z)V
+PLandroid/hardware/usb/V1_2/IUsb$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/usb/V1_2/IUsb;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/usb/V1_2/IUsb;
+PLandroid/hardware/usb/V1_2/IUsb;->castFrom(Landroid/os/IHwInterface;)Landroid/hardware/usb/V1_2/IUsb;
 HSPLandroid/hardware/usb/V1_2/IUsbCallback$Stub;-><init>()V
 HSPLandroid/hardware/usb/V1_2/IUsbCallback$Stub;->asBinder()Landroid/os/IHwBinder;
 HSPLandroid/hardware/usb/V1_2/IUsbCallback$Stub;->interfaceChain()Ljava/util/ArrayList;
@@ -91,16 +217,17 @@
 HSPLandroid/hardware/weaver/V1_0/IWeaver$Proxy;-><init>(Landroid/os/IHwBinder;)V
 HSPLandroid/hardware/weaver/V1_0/IWeaver$Proxy;->getConfig(Landroid/hardware/weaver/V1_0/IWeaver$getConfigCallback;)V
 HSPLandroid/hardware/weaver/V1_0/IWeaver$Proxy;->interfaceChain()Ljava/util/ArrayList;
-PLandroid/hardware/weaver/V1_0/IWeaver$Proxy;->read(ILjava/util/ArrayList;Landroid/hardware/weaver/V1_0/IWeaver$readCallback;)V
+HPLandroid/hardware/weaver/V1_0/IWeaver$Proxy;->read(ILjava/util/ArrayList;Landroid/hardware/weaver/V1_0/IWeaver$readCallback;)V
+PLandroid/hardware/weaver/V1_0/IWeaver$Proxy;->write(ILjava/util/ArrayList;Ljava/util/ArrayList;)I
 HSPLandroid/hardware/weaver/V1_0/IWeaver;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/weaver/V1_0/IWeaver;
 HSPLandroid/hardware/weaver/V1_0/IWeaver;->getService()Landroid/hardware/weaver/V1_0/IWeaver;
 HSPLandroid/hardware/weaver/V1_0/IWeaver;->getService(Ljava/lang/String;)Landroid/hardware/weaver/V1_0/IWeaver;
 HSPLandroid/hardware/weaver/V1_0/WeaverConfig;-><init>()V
 HSPLandroid/hardware/weaver/V1_0/WeaverConfig;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
 HSPLandroid/hardware/weaver/V1_0/WeaverConfig;->readFromParcel(Landroid/os/HwParcel;)V
-PLandroid/hardware/weaver/V1_0/WeaverReadResponse;-><init>()V
-PLandroid/hardware/weaver/V1_0/WeaverReadResponse;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-PLandroid/hardware/weaver/V1_0/WeaverReadResponse;->readFromParcel(Landroid/os/HwParcel;)V
+HPLandroid/hardware/weaver/V1_0/WeaverReadResponse;-><init>()V
+HPLandroid/hardware/weaver/V1_0/WeaverReadResponse;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/weaver/V1_0/WeaverReadResponse;->readFromParcel(Landroid/os/HwParcel;)V
 HSPLandroid/hidl/manager/V1_0/IServiceManager$InstanceDebugInfo;-><init>()V
 HSPLandroid/hidl/manager/V1_0/IServiceManager$InstanceDebugInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
 HSPLandroid/hidl/manager/V1_0/IServiceManager$InstanceDebugInfo;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
@@ -126,22 +253,22 @@
 HSPLandroid/hidl/manager/V1_2/IServiceManager;->asInterface(Landroid/os/IHwBinder;)Landroid/hidl/manager/V1_2/IServiceManager;
 HSPLandroid/hidl/manager/V1_2/IServiceManager;->getService()Landroid/hidl/manager/V1_2/IServiceManager;
 HSPLandroid/hidl/manager/V1_2/IServiceManager;->getService(Ljava/lang/String;)Landroid/hidl/manager/V1_2/IServiceManager;
-PLandroid/net/-$$Lambda$IpMemoryStore$LPW97BoNSL4rh_RVPiAHfCbmGHU;-><init>(Ljava/util/function/Consumer;)V
+HPLandroid/net/-$$Lambda$IpMemoryStore$LPW97BoNSL4rh_RVPiAHfCbmGHU;-><init>(Ljava/util/function/Consumer;)V
 PLandroid/net/-$$Lambda$IpMemoryStore$LPW97BoNSL4rh_RVPiAHfCbmGHU;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/net/-$$Lambda$IpMemoryStore$pFctTFAvh_Nxb_aTb0gjNsixGeM;-><init>(Ljava/util/function/Consumer;)V
+HPLandroid/net/-$$Lambda$IpMemoryStore$pFctTFAvh_Nxb_aTb0gjNsixGeM;-><init>(Ljava/util/function/Consumer;)V
 PLandroid/net/-$$Lambda$IpMemoryStore$pFctTFAvh_Nxb_aTb0gjNsixGeM;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroid/net/-$$Lambda$IpMemoryStoreClient$284VFgqq7BBkkwVNFLIrF3c59Es;-><init>(Landroid/net/IIpMemoryStore;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/OnBlobRetrievedListener;)V
+HPLandroid/net/-$$Lambda$IpMemoryStoreClient$284VFgqq7BBkkwVNFLIrF3c59Es;-><init>(Landroid/net/IIpMemoryStore;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/OnBlobRetrievedListener;)V
 PLandroid/net/-$$Lambda$IpMemoryStoreClient$284VFgqq7BBkkwVNFLIrF3c59Es;->run()V
-PLandroid/net/-$$Lambda$IpMemoryStoreClient$3VeddAdCuqfXquVC2DlGvI3eVPM;-><init>(Landroid/net/IpMemoryStoreClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/OnBlobRetrievedListener;)V
+HPLandroid/net/-$$Lambda$IpMemoryStoreClient$3VeddAdCuqfXquVC2DlGvI3eVPM;-><init>(Landroid/net/IpMemoryStoreClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/OnBlobRetrievedListener;)V
 PLandroid/net/-$$Lambda$IpMemoryStoreClient$3VeddAdCuqfXquVC2DlGvI3eVPM;->accept(Ljava/lang/Object;)V
-PLandroid/net/-$$Lambda$IpMemoryStoreClient$4eqT-tDGA25PNMyU_1yqQCF2gOo;-><init>(Landroid/net/IIpMemoryStore;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/Blob;Landroid/net/ipmemorystore/OnStatusListener;)V
+HPLandroid/net/-$$Lambda$IpMemoryStoreClient$4eqT-tDGA25PNMyU_1yqQCF2gOo;-><init>(Landroid/net/IIpMemoryStore;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/Blob;Landroid/net/ipmemorystore/OnStatusListener;)V
 PLandroid/net/-$$Lambda$IpMemoryStoreClient$4eqT-tDGA25PNMyU_1yqQCF2gOo;->run()V
-PLandroid/net/-$$Lambda$IpMemoryStoreClient$OI4Zw2djhZoG0D4IE2ujC0Iv6G4;-><init>(Landroid/net/IpMemoryStoreClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/Blob;Landroid/net/ipmemorystore/OnStatusListener;)V
+HPLandroid/net/-$$Lambda$IpMemoryStoreClient$OI4Zw2djhZoG0D4IE2ujC0Iv6G4;-><init>(Landroid/net/IpMemoryStoreClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/Blob;Landroid/net/ipmemorystore/OnStatusListener;)V
 PLandroid/net/-$$Lambda$IpMemoryStoreClient$OI4Zw2djhZoG0D4IE2ujC0Iv6G4;->accept(Ljava/lang/Object;)V
-PLandroid/net/-$$Lambda$NetworkStackClient$8Y7GJyozK7_xixdmgfHS4QSif-A;-><init>(Landroid/net/Network;Ljava/lang/String;Landroid/net/INetworkMonitorCallbacks;)V
-PLandroid/net/-$$Lambda$NetworkStackClient$8Y7GJyozK7_xixdmgfHS4QSif-A;->onNetworkStackConnected(Landroid/net/INetworkStackConnector;)V
+HPLandroid/net/-$$Lambda$NetworkStackClient$8Y7GJyozK7_xixdmgfHS4QSif-A;-><init>(Landroid/net/Network;Ljava/lang/String;Landroid/net/INetworkMonitorCallbacks;)V
+HPLandroid/net/-$$Lambda$NetworkStackClient$8Y7GJyozK7_xixdmgfHS4QSif-A;->onNetworkStackConnected(Landroid/net/INetworkStackConnector;)V
 HSPLandroid/net/-$$Lambda$NetworkStackClient$EsrnifYD8E-HxTwVQsf45HJKvtM;-><init>(Ljava/lang/String;Landroid/net/ip/IIpClientCallbacks;)V
-PLandroid/net/-$$Lambda$NetworkStackClient$EsrnifYD8E-HxTwVQsf45HJKvtM;->onNetworkStackConnected(Landroid/net/INetworkStackConnector;)V
+HSPLandroid/net/-$$Lambda$NetworkStackClient$EsrnifYD8E-HxTwVQsf45HJKvtM;->onNetworkStackConnected(Landroid/net/INetworkStackConnector;)V
 PLandroid/net/-$$Lambda$NetworkStackClient$qInwLPrclXOFvKSYRjcCaCSeEhw;-><init>(Landroid/net/IIpMemoryStoreCallbacks;)V
 PLandroid/net/-$$Lambda$NetworkStackClient$qInwLPrclXOFvKSYRjcCaCSeEhw;->onNetworkStackConnected(Landroid/net/INetworkStackConnector;)V
 HSPLandroid/net/ConnectivityModuleConnector$DependenciesImpl;-><init>()V
@@ -149,93 +276,114 @@
 HSPLandroid/net/ConnectivityModuleConnector$DependenciesImpl;->getModuleServiceIntent(Landroid/content/pm/PackageManager;Ljava/lang/String;Ljava/lang/String;Z)Landroid/content/Intent;
 HSPLandroid/net/ConnectivityModuleConnector$ModuleServiceConnection;-><init>(Landroid/net/ConnectivityModuleConnector;Ljava/lang/String;Landroid/net/ConnectivityModuleConnector$ModuleServiceCallback;)V
 HSPLandroid/net/ConnectivityModuleConnector$ModuleServiceConnection;-><init>(Landroid/net/ConnectivityModuleConnector;Ljava/lang/String;Landroid/net/ConnectivityModuleConnector$ModuleServiceCallback;Landroid/net/ConnectivityModuleConnector$1;)V
-PLandroid/net/ConnectivityModuleConnector$ModuleServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HSPLandroid/net/ConnectivityModuleConnector$ModuleServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 HSPLandroid/net/ConnectivityModuleConnector;-><clinit>()V
 HSPLandroid/net/ConnectivityModuleConnector;-><init>()V
 HSPLandroid/net/ConnectivityModuleConnector;-><init>(Landroid/net/ConnectivityModuleConnector$Dependencies;)V
 HSPLandroid/net/ConnectivityModuleConnector;->access$100(Landroid/content/pm/PackageManager;Landroid/content/ComponentName;Ljava/lang/String;)V
-PLandroid/net/ConnectivityModuleConnector;->access$300(Landroid/net/ConnectivityModuleConnector;Ljava/lang/String;)V
+HSPLandroid/net/ConnectivityModuleConnector;->access$300(Landroid/net/ConnectivityModuleConnector;Ljava/lang/String;)V
 HSPLandroid/net/ConnectivityModuleConnector;->checkModuleServicePermission(Landroid/content/pm/PackageManager;Landroid/content/ComponentName;Ljava/lang/String;)V
+PLandroid/net/ConnectivityModuleConnector;->dump(Ljava/io/PrintWriter;)V
 HSPLandroid/net/ConnectivityModuleConnector;->getInstance()Landroid/net/ConnectivityModuleConnector;
 HSPLandroid/net/ConnectivityModuleConnector;->init(Landroid/content/Context;)V
 HSPLandroid/net/ConnectivityModuleConnector;->log(Ljava/lang/String;)V
-PLandroid/net/ConnectivityModuleConnector;->logi(Ljava/lang/String;)V
+HSPLandroid/net/ConnectivityModuleConnector;->logi(Ljava/lang/String;)V
 HSPLandroid/net/ConnectivityModuleConnector;->registerHealthListener(Landroid/net/ConnectivityModuleConnector$ConnectivityModuleHealthListener;)V
 HSPLandroid/net/ConnectivityModuleConnector;->startModuleService(Ljava/lang/String;Ljava/lang/String;Landroid/net/ConnectivityModuleConnector$ModuleServiceCallback;)V
-PLandroid/net/DhcpResultsParcelable$1;-><init>()V
+HSPLandroid/net/DhcpResultsParcelable$1;-><init>()V
 PLandroid/net/DhcpResultsParcelable$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/DhcpResultsParcelable;
 PLandroid/net/DhcpResultsParcelable$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLandroid/net/DhcpResultsParcelable;-><clinit>()V
-HPLandroid/net/DhcpResultsParcelable;-><init>()V
-PLandroid/net/DhcpResultsParcelable;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/net/DhcpResultsParcelable;-><clinit>()V
+HSPLandroid/net/DhcpResultsParcelable;-><init>()V
+HPLandroid/net/DhcpResultsParcelable;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/net/IDnsResolver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/IDnsResolver$Stub$Proxy;->createNetworkCache(I)V
-PLandroid/net/IDnsResolver$Stub$Proxy;->destroyNetworkCache(I)V
+HPLandroid/net/IDnsResolver$Stub$Proxy;->createNetworkCache(I)V
+HPLandroid/net/IDnsResolver$Stub$Proxy;->destroyNetworkCache(I)V
 HPLandroid/net/IDnsResolver$Stub$Proxy;->setResolverConfiguration(Landroid/net/ResolverParamsParcel;)V
-PLandroid/net/IDnsResolver$Stub$Proxy;->startPrefix64Discovery(I)V
-PLandroid/net/IDnsResolver$Stub$Proxy;->stopPrefix64Discovery(I)V
+HPLandroid/net/IDnsResolver$Stub$Proxy;->startPrefix64Discovery(I)V
+HPLandroid/net/IDnsResolver$Stub$Proxy;->stopPrefix64Discovery(I)V
 HSPLandroid/net/IDnsResolver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IDnsResolver;
 PLandroid/net/IIpMemoryStore$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/IIpMemoryStore$Stub$Proxy;->retrieveBlob(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/IOnBlobRetrievedListener;)V
-PLandroid/net/IIpMemoryStore$Stub$Proxy;->storeBlob(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/Blob;Landroid/net/ipmemorystore/IOnStatusListener;)V
+HPLandroid/net/IIpMemoryStore$Stub$Proxy;->retrieveBlob(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/IOnBlobRetrievedListener;)V
+HPLandroid/net/IIpMemoryStore$Stub$Proxy;->storeBlob(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/Blob;Landroid/net/ipmemorystore/IOnStatusListener;)V
 PLandroid/net/IIpMemoryStore$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IIpMemoryStore;
 PLandroid/net/IIpMemoryStoreCallbacks$Stub;-><init>()V
 PLandroid/net/IIpMemoryStoreCallbacks$Stub;->asBinder()Landroid/os/IBinder;
 PLandroid/net/IIpMemoryStoreCallbacks$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/net/INetd$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/INetd$Stub$Proxy;->bandwidthAddNiceApp(I)V
-PLandroid/net/INetd$Stub$Proxy;->bandwidthRemoveInterfaceQuota(Ljava/lang/String;)V
+HSPLandroid/net/INetd$Stub$Proxy;->bandwidthAddNaughtyApp(I)V
+HPLandroid/net/INetd$Stub$Proxy;->bandwidthAddNiceApp(I)V
+PLandroid/net/INetd$Stub$Proxy;->bandwidthEnableDataSaver(Z)Z
+HPLandroid/net/INetd$Stub$Proxy;->bandwidthRemoveInterfaceQuota(Ljava/lang/String;)V
+HPLandroid/net/INetd$Stub$Proxy;->bandwidthRemoveNaughtyApp(I)V
+HPLandroid/net/INetd$Stub$Proxy;->bandwidthRemoveNiceApp(I)V
 HSPLandroid/net/INetd$Stub$Proxy;->bandwidthSetGlobalAlert(J)V
-PLandroid/net/INetd$Stub$Proxy;->bandwidthSetInterfaceQuota(Ljava/lang/String;J)V
+HPLandroid/net/INetd$Stub$Proxy;->bandwidthSetInterfaceQuota(Ljava/lang/String;J)V
+HPLandroid/net/INetd$Stub$Proxy;->clatdStart(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/net/INetd$Stub$Proxy;->clatdStop(Ljava/lang/String;)V
+PLandroid/net/INetd$Stub$Proxy;->firewallAddUidInterfaceRules(Ljava/lang/String;[I)V
 HSPLandroid/net/INetd$Stub$Proxy;->firewallEnableChildChain(IZ)V
+PLandroid/net/INetd$Stub$Proxy;->firewallRemoveUidInterfaceRules([I)V
 HSPLandroid/net/INetd$Stub$Proxy;->firewallReplaceUidChain(Ljava/lang/String;Z[I)Z
 HSPLandroid/net/INetd$Stub$Proxy;->firewallSetFirewallType(I)V
-HPLandroid/net/INetd$Stub$Proxy;->firewallSetUidRule(III)V
-PLandroid/net/INetd$Stub$Proxy;->idletimerAddInterface(Ljava/lang/String;ILjava/lang/String;)V
-PLandroid/net/INetd$Stub$Proxy;->idletimerRemoveInterface(Ljava/lang/String;ILjava/lang/String;)V
+HSPLandroid/net/INetd$Stub$Proxy;->firewallSetUidRule(III)V
+HPLandroid/net/INetd$Stub$Proxy;->idletimerAddInterface(Ljava/lang/String;ILjava/lang/String;)V
+HPLandroid/net/INetd$Stub$Proxy;->idletimerRemoveInterface(Ljava/lang/String;ILjava/lang/String;)V
 HSPLandroid/net/INetd$Stub$Proxy;->interfaceGetCfg(Ljava/lang/String;)Landroid/net/InterfaceConfigurationParcel;
 HSPLandroid/net/INetd$Stub$Proxy;->interfaceGetList()[Ljava/lang/String;
+PLandroid/net/INetd$Stub$Proxy;->interfaceSetCfg(Landroid/net/InterfaceConfigurationParcel;)V
+HPLandroid/net/INetd$Stub$Proxy;->interfaceSetMtu(Ljava/lang/String;I)V
 HSPLandroid/net/INetd$Stub$Proxy;->isAlive()Z
-PLandroid/net/INetd$Stub$Proxy;->networkAddInterface(ILjava/lang/String;)V
-PLandroid/net/INetd$Stub$Proxy;->networkAddRoute(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/net/INetd$Stub$Proxy;->networkClearPermissionForUser([I)V
-PLandroid/net/INetd$Stub$Proxy;->networkCreatePhysical(II)V
-PLandroid/net/INetd$Stub$Proxy;->networkDestroy(I)V
-PLandroid/net/INetd$Stub$Proxy;->networkRemoveRoute(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/net/INetd$Stub$Proxy;->networkSetDefault(I)V
+HPLandroid/net/INetd$Stub$Proxy;->networkAddInterface(ILjava/lang/String;)V
+HPLandroid/net/INetd$Stub$Proxy;->networkAddLegacyRoute(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+HPLandroid/net/INetd$Stub$Proxy;->networkAddRoute(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/net/INetd$Stub$Proxy;->networkAddUidRanges(I[Landroid/net/UidRangeParcel;)V
+HPLandroid/net/INetd$Stub$Proxy;->networkClearPermissionForUser([I)V
+HPLandroid/net/INetd$Stub$Proxy;->networkCreatePhysical(II)V
+HPLandroid/net/INetd$Stub$Proxy;->networkCreateVpn(IZ)V
+HPLandroid/net/INetd$Stub$Proxy;->networkDestroy(I)V
+HPLandroid/net/INetd$Stub$Proxy;->networkRemoveInterface(ILjava/lang/String;)V
+HPLandroid/net/INetd$Stub$Proxy;->networkRemoveRoute(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/net/INetd$Stub$Proxy;->networkRemoveUidRanges(I[Landroid/net/UidRangeParcel;)V
+HPLandroid/net/INetd$Stub$Proxy;->networkSetDefault(I)V
+HPLandroid/net/INetd$Stub$Proxy;->networkSetPermissionForNetwork(II)V
 HSPLandroid/net/INetd$Stub$Proxy;->networkSetPermissionForUser(I[I)V
+PLandroid/net/INetd$Stub$Proxy;->networkSetProtectAllow(I)V
+PLandroid/net/INetd$Stub$Proxy;->networkSetProtectDeny(I)V
 HSPLandroid/net/INetd$Stub$Proxy;->registerUnsolicitedEventListener(Landroid/net/INetdUnsolicitedEventListener;)V
-PLandroid/net/INetd$Stub$Proxy;->setTcpRWmemorySize(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/net/INetd$Stub$Proxy;->setTcpRWmemorySize(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/net/INetd$Stub$Proxy;->socketDestroy([Landroid/net/UidRangeParcel;[I)V
+PLandroid/net/INetd$Stub$Proxy;->strictUidCleartextPenalty(II)V
 HSPLandroid/net/INetd$Stub$Proxy;->tetherGetStats()[Landroid/net/TetherStatsParcel;
 HSPLandroid/net/INetd$Stub$Proxy;->trafficSetNetPermForUids(I[I)V
 HSPLandroid/net/INetd$Stub$Proxy;->trafficSwapActiveStatsMap()V
-PLandroid/net/INetd$Stub$Proxy;->wakeupAddInterface(Ljava/lang/String;Ljava/lang/String;II)V
-PLandroid/net/INetd$Stub$Proxy;->wakeupDelInterface(Ljava/lang/String;Ljava/lang/String;II)V
+HPLandroid/net/INetd$Stub$Proxy;->wakeupAddInterface(Ljava/lang/String;Ljava/lang/String;II)V
+HPLandroid/net/INetd$Stub$Proxy;->wakeupDelInterface(Ljava/lang/String;Ljava/lang/String;II)V
 HSPLandroid/net/INetd$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetd;
 HSPLandroid/net/INetdUnsolicitedEventListener$Stub;-><init>()V
 HSPLandroid/net/INetdUnsolicitedEventListener$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/net/INetdUnsolicitedEventListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 PLandroid/net/INetworkMonitor$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/INetworkMonitor$Stub$Proxy;->forceReevaluation(I)V
+HPLandroid/net/INetworkMonitor$Stub$Proxy;->forceReevaluation(I)V
 PLandroid/net/INetworkMonitor$Stub$Proxy;->launchCaptivePortalApp()V
 PLandroid/net/INetworkMonitor$Stub$Proxy;->notifyCaptivePortalAppFinished(I)V
 HPLandroid/net/INetworkMonitor$Stub$Proxy;->notifyDnsResponse(I)V
 HPLandroid/net/INetworkMonitor$Stub$Proxy;->notifyLinkPropertiesChanged(Landroid/net/LinkProperties;)V
 HPLandroid/net/INetworkMonitor$Stub$Proxy;->notifyNetworkCapabilitiesChanged(Landroid/net/NetworkCapabilities;)V
-PLandroid/net/INetworkMonitor$Stub$Proxy;->notifyNetworkConnected(Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;)V
-PLandroid/net/INetworkMonitor$Stub$Proxy;->notifyNetworkDisconnected()V
-PLandroid/net/INetworkMonitor$Stub$Proxy;->notifyPrivateDnsChanged(Landroid/net/PrivateDnsConfigParcel;)V
-PLandroid/net/INetworkMonitor$Stub$Proxy;->start()V
+HPLandroid/net/INetworkMonitor$Stub$Proxy;->notifyNetworkConnected(Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;)V
+HPLandroid/net/INetworkMonitor$Stub$Proxy;->notifyNetworkDisconnected()V
+HPLandroid/net/INetworkMonitor$Stub$Proxy;->notifyPrivateDnsChanged(Landroid/net/PrivateDnsConfigParcel;)V
+PLandroid/net/INetworkMonitor$Stub$Proxy;->setAcceptPartialConnectivity()V
+HPLandroid/net/INetworkMonitor$Stub$Proxy;->start()V
 PLandroid/net/INetworkMonitor$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkMonitor;
-PLandroid/net/INetworkMonitorCallbacks$Stub;-><init>()V
+HPLandroid/net/INetworkMonitorCallbacks$Stub;-><init>()V
 PLandroid/net/INetworkMonitorCallbacks$Stub;->asBinder()Landroid/os/IBinder;
 HPLandroid/net/INetworkMonitorCallbacks$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/net/INetworkStackConnector$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/net/INetworkStackConnector$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 PLandroid/net/INetworkStackConnector$Stub$Proxy;->fetchIpMemoryStore(Landroid/net/IIpMemoryStoreCallbacks;)V
-PLandroid/net/INetworkStackConnector$Stub$Proxy;->makeIpClient(Ljava/lang/String;Landroid/net/ip/IIpClientCallbacks;)V
-PLandroid/net/INetworkStackConnector$Stub$Proxy;->makeNetworkMonitor(Landroid/net/Network;Ljava/lang/String;Landroid/net/INetworkMonitorCallbacks;)V
-PLandroid/net/INetworkStackConnector$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkStackConnector;
+HSPLandroid/net/INetworkStackConnector$Stub$Proxy;->makeIpClient(Ljava/lang/String;Landroid/net/ip/IIpClientCallbacks;)V
+HPLandroid/net/INetworkStackConnector$Stub$Proxy;->makeNetworkMonitor(Landroid/net/Network;Ljava/lang/String;Landroid/net/INetworkMonitorCallbacks;)V
+HSPLandroid/net/INetworkStackConnector$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkStackConnector;
 PLandroid/net/ITetherInternalCallback$Stub;-><init>()V
 PLandroid/net/ITetherInternalCallback$Stub;->asBinder()Landroid/os/IBinder;
 PLandroid/net/ITetherInternalCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
@@ -248,6 +396,7 @@
 HSPLandroid/net/InterfaceConfigurationParcel;-><clinit>()V
 HSPLandroid/net/InterfaceConfigurationParcel;-><init>()V
 HSPLandroid/net/InterfaceConfigurationParcel;->readFromParcel(Landroid/os/Parcel;)V
+PLandroid/net/InterfaceConfigurationParcel;->writeToParcel(Landroid/os/Parcel;I)V
 PLandroid/net/IpMemoryStore$1;-><init>(Landroid/net/IpMemoryStore;)V
 PLandroid/net/IpMemoryStore$1;->getInterfaceVersion()I
 PLandroid/net/IpMemoryStore$1;->onIpMemoryStoreFetched(Landroid/net/IIpMemoryStore;)V
@@ -265,58 +414,68 @@
 PLandroid/net/IpMemoryStoreClient;->ignoringRemoteException(Ljava/lang/String;Landroid/net/IpMemoryStoreClient$ThrowingRunnable;)V
 PLandroid/net/IpMemoryStoreClient;->lambda$retrieveBlob$15(Landroid/net/IIpMemoryStore;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/OnBlobRetrievedListener;)V
 PLandroid/net/IpMemoryStoreClient;->lambda$retrieveBlob$16$IpMemoryStoreClient(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/OnBlobRetrievedListener;Landroid/net/IIpMemoryStore;)V
-PLandroid/net/IpMemoryStoreClient;->lambda$storeBlob$3(Landroid/net/IIpMemoryStore;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/Blob;Landroid/net/ipmemorystore/OnStatusListener;)V
+HPLandroid/net/IpMemoryStoreClient;->lambda$storeBlob$3(Landroid/net/IIpMemoryStore;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/Blob;Landroid/net/ipmemorystore/OnStatusListener;)V
 PLandroid/net/IpMemoryStoreClient;->lambda$storeBlob$4$IpMemoryStoreClient(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/Blob;Landroid/net/ipmemorystore/OnStatusListener;Landroid/net/IIpMemoryStore;)V
 PLandroid/net/IpMemoryStoreClient;->retrieveBlob(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/OnBlobRetrievedListener;)V
 PLandroid/net/IpMemoryStoreClient;->storeBlob(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/Blob;Landroid/net/ipmemorystore/OnStatusListener;)V
-PLandroid/net/NetworkMonitorManager;-><init>(Landroid/net/INetworkMonitor;)V
-PLandroid/net/NetworkMonitorManager;-><init>(Landroid/net/INetworkMonitor;Ljava/lang/String;)V
+PLandroid/net/NattKeepalivePacketDataParcelable$1;-><init>()V
+PLandroid/net/NattKeepalivePacketDataParcelable;-><clinit>()V
+PLandroid/net/NattKeepalivePacketDataParcelable;-><init>()V
+HPLandroid/net/NattKeepalivePacketDataParcelable;->writeToParcel(Landroid/os/Parcel;I)V
+PLandroid/net/NetworkFactory;->getProvider()Landroid/net/NetworkProvider;
+HPLandroid/net/NetworkMonitorManager;-><init>(Landroid/net/INetworkMonitor;)V
+HPLandroid/net/NetworkMonitorManager;-><init>(Landroid/net/INetworkMonitor;Ljava/lang/String;)V
 HPLandroid/net/NetworkMonitorManager;->forceReevaluation(I)Z
 PLandroid/net/NetworkMonitorManager;->launchCaptivePortalApp()Z
 PLandroid/net/NetworkMonitorManager;->notifyCaptivePortalAppFinished(I)Z
 HPLandroid/net/NetworkMonitorManager;->notifyDnsResponse(I)Z
 HPLandroid/net/NetworkMonitorManager;->notifyLinkPropertiesChanged(Landroid/net/LinkProperties;)Z
 HPLandroid/net/NetworkMonitorManager;->notifyNetworkCapabilitiesChanged(Landroid/net/NetworkCapabilities;)Z
-PLandroid/net/NetworkMonitorManager;->notifyNetworkConnected(Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;)Z
-PLandroid/net/NetworkMonitorManager;->notifyNetworkDisconnected()Z
-PLandroid/net/NetworkMonitorManager;->notifyPrivateDnsChanged(Landroid/net/PrivateDnsConfigParcel;)Z
+HPLandroid/net/NetworkMonitorManager;->notifyNetworkConnected(Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;)Z
+HPLandroid/net/NetworkMonitorManager;->notifyNetworkDisconnected()Z
+HPLandroid/net/NetworkMonitorManager;->notifyPrivateDnsChanged(Landroid/net/PrivateDnsConfigParcel;)Z
+PLandroid/net/NetworkMonitorManager;->setAcceptPartialConnectivity()Z
 HSPLandroid/net/NetworkStackClient$DependenciesImpl;-><init>()V
 HSPLandroid/net/NetworkStackClient$DependenciesImpl;-><init>(Landroid/net/NetworkStackClient$1;)V
-PLandroid/net/NetworkStackClient$DependenciesImpl;->addToServiceManager(Landroid/os/IBinder;)V
+HSPLandroid/net/NetworkStackClient$DependenciesImpl;->addToServiceManager(Landroid/os/IBinder;)V
 HSPLandroid/net/NetworkStackClient$DependenciesImpl;->checkCallerUid()V
 HSPLandroid/net/NetworkStackClient$DependenciesImpl;->getConnectivityModuleConnector()Landroid/net/ConnectivityModuleConnector;
 HSPLandroid/net/NetworkStackClient$NetworkStackConnection;-><init>(Landroid/net/NetworkStackClient;)V
 HSPLandroid/net/NetworkStackClient$NetworkStackConnection;-><init>(Landroid/net/NetworkStackClient;Landroid/net/NetworkStackClient$1;)V
-PLandroid/net/NetworkStackClient$NetworkStackConnection;->onModuleServiceConnected(Landroid/os/IBinder;)V
+HSPLandroid/net/NetworkStackClient$NetworkStackConnection;->onModuleServiceConnected(Landroid/os/IBinder;)V
 HSPLandroid/net/NetworkStackClient;-><clinit>()V
 HSPLandroid/net/NetworkStackClient;-><init>()V
 HSPLandroid/net/NetworkStackClient;-><init>(Landroid/net/NetworkStackClient$Dependencies;)V
-PLandroid/net/NetworkStackClient;->access$100(Landroid/net/NetworkStackClient;Ljava/lang/String;)V
-PLandroid/net/NetworkStackClient;->access$200(Landroid/net/NetworkStackClient;Landroid/os/IBinder;)V
+HSPLandroid/net/NetworkStackClient;->access$100(Landroid/net/NetworkStackClient;Ljava/lang/String;)V
+HSPLandroid/net/NetworkStackClient;->access$200(Landroid/net/NetworkStackClient;Landroid/os/IBinder;)V
 PLandroid/net/NetworkStackClient;->dump(Ljava/io/PrintWriter;)V
 PLandroid/net/NetworkStackClient;->fetchIpMemoryStore(Landroid/net/IIpMemoryStoreCallbacks;)V
 HSPLandroid/net/NetworkStackClient;->getInstance()Landroid/net/NetworkStackClient;
 HSPLandroid/net/NetworkStackClient;->init()V
 PLandroid/net/NetworkStackClient;->lambda$fetchIpMemoryStore$3(Landroid/net/IIpMemoryStoreCallbacks;Landroid/net/INetworkStackConnector;)V
-PLandroid/net/NetworkStackClient;->lambda$makeIpClient$1(Ljava/lang/String;Landroid/net/ip/IIpClientCallbacks;Landroid/net/INetworkStackConnector;)V
-PLandroid/net/NetworkStackClient;->lambda$makeNetworkMonitor$2(Landroid/net/Network;Ljava/lang/String;Landroid/net/INetworkMonitorCallbacks;Landroid/net/INetworkStackConnector;)V
+HSPLandroid/net/NetworkStackClient;->lambda$makeIpClient$1(Ljava/lang/String;Landroid/net/ip/IIpClientCallbacks;Landroid/net/INetworkStackConnector;)V
+HPLandroid/net/NetworkStackClient;->lambda$makeNetworkMonitor$2(Landroid/net/Network;Ljava/lang/String;Landroid/net/INetworkMonitorCallbacks;Landroid/net/INetworkStackConnector;)V
 HSPLandroid/net/NetworkStackClient;->log(Ljava/lang/String;)V
-PLandroid/net/NetworkStackClient;->logi(Ljava/lang/String;)V
+HSPLandroid/net/NetworkStackClient;->logi(Ljava/lang/String;)V
 HSPLandroid/net/NetworkStackClient;->makeIpClient(Ljava/lang/String;Landroid/net/ip/IIpClientCallbacks;)V
-PLandroid/net/NetworkStackClient;->registerNetworkStackService(Landroid/os/IBinder;)V
+HPLandroid/net/NetworkStackClient;->makeNetworkMonitor(Landroid/net/Network;Ljava/lang/String;Landroid/net/INetworkMonitorCallbacks;)V
+HSPLandroid/net/NetworkStackClient;->registerNetworkStackService(Landroid/os/IBinder;)V
 HSPLandroid/net/NetworkStackClient;->requestConnector(Landroid/net/NetworkStackClient$NetworkStackCallback;)V
 HSPLandroid/net/NetworkStackClient;->start()V
 PLandroid/net/PrivateDnsConfigParcel$1;-><init>()V
+PLandroid/net/PrivateDnsConfigParcel$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/PrivateDnsConfigParcel;
+PLandroid/net/PrivateDnsConfigParcel$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 PLandroid/net/PrivateDnsConfigParcel;-><clinit>()V
 PLandroid/net/PrivateDnsConfigParcel;-><init>()V
-PLandroid/net/PrivateDnsConfigParcel;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/PrivateDnsConfigParcel;->readFromParcel(Landroid/os/Parcel;)V
+HPLandroid/net/PrivateDnsConfigParcel;->writeToParcel(Landroid/os/Parcel;I)V
 PLandroid/net/ProvisioningConfigurationParcelable$1;-><init>()V
 PLandroid/net/ProvisioningConfigurationParcelable;-><clinit>()V
 PLandroid/net/ProvisioningConfigurationParcelable;-><init>()V
-PLandroid/net/ProvisioningConfigurationParcelable;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/ProvisioningConfigurationParcelable;->writeToParcel(Landroid/os/Parcel;I)V
 PLandroid/net/ResolverParamsParcel$1;-><init>()V
 PLandroid/net/ResolverParamsParcel;-><clinit>()V
-PLandroid/net/ResolverParamsParcel;-><init>()V
+HPLandroid/net/ResolverParamsParcel;-><init>()V
 HPLandroid/net/ResolverParamsParcel;->writeToParcel(Landroid/os/Parcel;I)V
 PLandroid/net/TetherStatesParcel$1;-><init>()V
 PLandroid/net/TetherStatesParcel$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/TetherStatesParcel;
@@ -325,9 +484,13 @@
 PLandroid/net/TetherStatesParcel;-><init>()V
 PLandroid/net/TetherStatesParcel;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/net/TetherStatsParcel$1;-><init>()V
+HPLandroid/net/TetherStatsParcel$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/TetherStatsParcel;
+HPLandroid/net/TetherStatsParcel$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/net/TetherStatsParcel$1;->newArray(I)[Landroid/net/TetherStatsParcel;
 HSPLandroid/net/TetherStatsParcel$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/net/TetherStatsParcel;-><clinit>()V
+HPLandroid/net/TetherStatsParcel;-><init>()V
+HPLandroid/net/TetherStatsParcel;->readFromParcel(Landroid/os/Parcel;)V
 PLandroid/net/TetheringConfigurationParcel$1;-><init>()V
 PLandroid/net/TetheringConfigurationParcel$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/TetheringConfigurationParcel;
 PLandroid/net/TetheringConfigurationParcel$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -361,88 +524,127 @@
 HSPLandroid/net/TetheringManager;->start()V
 PLandroid/net/UidRangeParcel$1;-><init>()V
 PLandroid/net/UidRangeParcel;-><clinit>()V
-PLandroid/net/UidRangeParcel;-><init>()V
+HPLandroid/net/UidRangeParcel;-><init>()V
 HPLandroid/net/UidRangeParcel;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/ip/IIpClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/ip/IIpClient$Stub$Proxy;->completedPreDhcpAction()V
-PLandroid/net/ip/IIpClient$Stub$Proxy;->confirmConfiguration()V
-PLandroid/net/ip/IIpClient$Stub$Proxy;->setHttpProxy(Landroid/net/ProxyInfo;)V
+HSPLandroid/net/ip/IIpClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/net/ip/IIpClient$Stub$Proxy;->addNattKeepalivePacketFilter(ILandroid/net/NattKeepalivePacketDataParcelable;)V
+HPLandroid/net/ip/IIpClient$Stub$Proxy;->completedPreDhcpAction()V
+HPLandroid/net/ip/IIpClient$Stub$Proxy;->confirmConfiguration()V
+PLandroid/net/ip/IIpClient$Stub$Proxy;->readPacketFilterComplete([B)V
+HPLandroid/net/ip/IIpClient$Stub$Proxy;->removeKeepalivePacketFilter(I)V
+HPLandroid/net/ip/IIpClient$Stub$Proxy;->setHttpProxy(Landroid/net/ProxyInfo;)V
 HPLandroid/net/ip/IIpClient$Stub$Proxy;->setL2KeyAndGroupHint(Ljava/lang/String;Ljava/lang/String;)V
-PLandroid/net/ip/IIpClient$Stub$Proxy;->setMulticastFilter(Z)V
-PLandroid/net/ip/IIpClient$Stub$Proxy;->setTcpBufferSizes(Ljava/lang/String;)V
+HSPLandroid/net/ip/IIpClient$Stub$Proxy;->setMulticastFilter(Z)V
+HPLandroid/net/ip/IIpClient$Stub$Proxy;->setTcpBufferSizes(Ljava/lang/String;)V
 PLandroid/net/ip/IIpClient$Stub$Proxy;->shutdown()V
-PLandroid/net/ip/IIpClient$Stub$Proxy;->startProvisioning(Landroid/net/ProvisioningConfigurationParcelable;)V
-PLandroid/net/ip/IIpClient$Stub$Proxy;->stop()V
-PLandroid/net/ip/IIpClient$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/ip/IIpClient;
+HPLandroid/net/ip/IIpClient$Stub$Proxy;->startProvisioning(Landroid/net/ProvisioningConfigurationParcelable;)V
+HPLandroid/net/ip/IIpClient$Stub$Proxy;->stop()V
+HSPLandroid/net/ip/IIpClient$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/ip/IIpClient;
 HSPLandroid/net/ip/IIpClientCallbacks$Stub;-><init>()V
-PLandroid/net/ip/IIpClientCallbacks$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/net/ip/IIpClientCallbacks$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/net/ip/IIpClientCallbacks$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/net/ip/IIpClientCallbacks$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/net/ip/IpClientCallbacks;-><init>()V
-PLandroid/net/ip/IpClientManager;-><init>(Landroid/net/ip/IIpClient;Ljava/lang/String;)V
+PLandroid/net/ip/IpClientCallbacks;->onNewDhcpResults(Landroid/net/DhcpResults;)V
+PLandroid/net/ip/IpClientCallbacks;->onNewDhcpResults(Landroid/net/DhcpResultsParcelable;)V
+PLandroid/net/ip/IpClientCallbacks;->setFallbackMulticastFilter(Z)V
+PLandroid/net/ip/IpClientCallbacks;->setNeighborDiscoveryOffload(Z)V
+HSPLandroid/net/ip/IpClientManager;-><init>(Landroid/net/ip/IIpClient;Ljava/lang/String;)V
+HPLandroid/net/ip/IpClientManager;->addKeepalivePacketFilter(ILandroid/net/NattKeepalivePacketData;)Z
 HPLandroid/net/ip/IpClientManager;->completedPreDhcpAction()Z
-PLandroid/net/ip/IpClientManager;->confirmConfiguration()Z
+HPLandroid/net/ip/IpClientManager;->confirmConfiguration()Z
+PLandroid/net/ip/IpClientManager;->readPacketFilterComplete([B)Z
+HPLandroid/net/ip/IpClientManager;->removeKeepalivePacketFilter(I)Z
 PLandroid/net/ip/IpClientManager;->setHttpProxy(Landroid/net/ProxyInfo;)Z
 HPLandroid/net/ip/IpClientManager;->setL2KeyAndGroupHint(Ljava/lang/String;Ljava/lang/String;)Z
-PLandroid/net/ip/IpClientManager;->setMulticastFilter(Z)Z
+HSPLandroid/net/ip/IpClientManager;->setMulticastFilter(Z)Z
 PLandroid/net/ip/IpClientManager;->setTcpBufferSizes(Ljava/lang/String;)Z
 PLandroid/net/ip/IpClientManager;->shutdown()Z
-PLandroid/net/ip/IpClientManager;->startProvisioning(Landroid/net/shared/ProvisioningConfiguration;)Z
-PLandroid/net/ip/IpClientManager;->stop()Z
+HPLandroid/net/ip/IpClientManager;->startProvisioning(Landroid/net/shared/ProvisioningConfiguration;)Z
+HPLandroid/net/ip/IpClientManager;->stop()Z
 HSPLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;-><init>(Landroid/net/ip/IpClientCallbacks;)V
-PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->getInterfaceVersion()I
-PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->onIpClientCreated(Landroid/net/ip/IIpClient;)V
+HSPLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->getInterfaceVersion()I
+PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->installPacketFilter([B)V
+HSPLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->onIpClientCreated(Landroid/net/ip/IIpClient;)V
+PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->onLinkPropertiesChange(Landroid/net/LinkProperties;)V
+PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->onNewDhcpResults(Landroid/net/DhcpResultsParcelable;)V
+PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->onPostDhcpAction()V
+PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->onPreDhcpAction()V
+PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->onProvisioningFailure(Landroid/net/LinkProperties;)V
+PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->onProvisioningSuccess(Landroid/net/LinkProperties;)V
+PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->onQuit()V
+PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->onReachabilityLost(Ljava/lang/String;)V
+PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->setFallbackMulticastFilter(Z)V
+PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->setNeighborDiscoveryOffload(Z)V
+PLandroid/net/ip/IpClientUtil$IpClientCallbacksProxy;->startReadPacketFilter()V
 HSPLandroid/net/ip/IpClientUtil;->makeIpClient(Landroid/content/Context;Ljava/lang/String;Landroid/net/ip/IpClientCallbacks;)V
 PLandroid/net/ipmemorystore/Blob$1;-><init>()V
 PLandroid/net/ipmemorystore/Blob$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/ipmemorystore/Blob;
 PLandroid/net/ipmemorystore/Blob$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 PLandroid/net/ipmemorystore/Blob;-><clinit>()V
-PLandroid/net/ipmemorystore/Blob;-><init>()V
+HPLandroid/net/ipmemorystore/Blob;-><init>()V
 HPLandroid/net/ipmemorystore/Blob;->readFromParcel(Landroid/os/Parcel;)V
 HPLandroid/net/ipmemorystore/Blob;->writeToParcel(Landroid/os/Parcel;I)V
-PLandroid/net/ipmemorystore/IOnBlobRetrievedListener$Stub;-><init>()V
+HPLandroid/net/ipmemorystore/IOnBlobRetrievedListener$Stub;-><init>()V
 PLandroid/net/ipmemorystore/IOnBlobRetrievedListener$Stub;->asBinder()Landroid/os/IBinder;
 HPLandroid/net/ipmemorystore/IOnBlobRetrievedListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLandroid/net/ipmemorystore/IOnStatusListener$Stub;-><init>()V
-PLandroid/net/ipmemorystore/IOnStatusListener$Stub;->asBinder()Landroid/os/IBinder;
-PLandroid/net/ipmemorystore/IOnStatusListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/net/ipmemorystore/IOnStatusListener$Stub;-><init>()V
+HPLandroid/net/ipmemorystore/IOnStatusListener$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/net/ipmemorystore/IOnStatusListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 PLandroid/net/ipmemorystore/OnBlobRetrievedListener$1;-><init>(Landroid/net/ipmemorystore/OnBlobRetrievedListener;)V
 PLandroid/net/ipmemorystore/OnBlobRetrievedListener$1;->onBlobRetrieved(Landroid/net/ipmemorystore/StatusParcelable;Ljava/lang/String;Ljava/lang/String;Landroid/net/ipmemorystore/Blob;)V
 PLandroid/net/ipmemorystore/OnBlobRetrievedListener;->toAIDL(Landroid/net/ipmemorystore/OnBlobRetrievedListener;)Landroid/net/ipmemorystore/IOnBlobRetrievedListener;
 PLandroid/net/ipmemorystore/OnStatusListener$1;-><init>(Landroid/net/ipmemorystore/OnStatusListener;)V
 PLandroid/net/ipmemorystore/OnStatusListener$1;->onComplete(Landroid/net/ipmemorystore/StatusParcelable;)V
 PLandroid/net/ipmemorystore/OnStatusListener;->toAIDL(Landroid/net/ipmemorystore/OnStatusListener;)Landroid/net/ipmemorystore/IOnStatusListener;
-PLandroid/net/ipmemorystore/Status;-><init>(I)V
+HPLandroid/net/ipmemorystore/Status;-><init>(I)V
 PLandroid/net/ipmemorystore/Status;-><init>(Landroid/net/ipmemorystore/StatusParcelable;)V
 PLandroid/net/ipmemorystore/Status;->isSuccess()Z
 PLandroid/net/ipmemorystore/StatusParcelable$1;-><init>()V
-PLandroid/net/ipmemorystore/StatusParcelable$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/ipmemorystore/StatusParcelable;
+HPLandroid/net/ipmemorystore/StatusParcelable$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/ipmemorystore/StatusParcelable;
 PLandroid/net/ipmemorystore/StatusParcelable$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 PLandroid/net/ipmemorystore/StatusParcelable;-><clinit>()V
-PLandroid/net/ipmemorystore/StatusParcelable;-><init>()V
+HPLandroid/net/ipmemorystore/StatusParcelable;-><init>()V
 HPLandroid/net/ipmemorystore/StatusParcelable;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/net/metrics/INetdEventListener$Stub;-><init>()V
 HPLandroid/net/metrics/INetdEventListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 PLandroid/net/shared/-$$Lambda$OsobWheG5dMvEj_cOJtueqUBqBI;-><clinit>()V
 PLandroid/net/shared/-$$Lambda$OsobWheG5dMvEj_cOJtueqUBqBI;-><init>()V
+PLandroid/net/shared/-$$Lambda$SYWvjOUPlAZ_O2Z6yfFU9np1858;-><clinit>()V
+PLandroid/net/shared/-$$Lambda$SYWvjOUPlAZ_O2Z6yfFU9np1858;-><init>()V
+PLandroid/net/shared/-$$Lambda$SYWvjOUPlAZ_O2Z6yfFU9np1858;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLandroid/net/shared/InitialConfiguration;-><clinit>()V
 PLandroid/net/shared/InitialConfiguration;->copy(Landroid/net/shared/InitialConfiguration;)Landroid/net/shared/InitialConfiguration;
-PLandroid/net/shared/IpConfigurationParcelableUtil;->fromStableParcelable(Landroid/net/DhcpResultsParcelable;)Landroid/net/DhcpResults;
-PLandroid/net/shared/IpConfigurationParcelableUtil;->unparcelAddress(Ljava/lang/String;)Ljava/net/InetAddress;
-PLandroid/net/shared/NetworkMonitorUtils;->isPrivateDnsValidationRequired(Landroid/net/NetworkCapabilities;)Z
-PLandroid/net/shared/ParcelableUtil;->toParcelableArray(Ljava/util/Collection;Ljava/util/function/Function;Ljava/lang/Class;)[Ljava/lang/Object;
+HPLandroid/net/shared/IpConfigurationParcelableUtil;->fromStableParcelable(Landroid/net/DhcpResultsParcelable;)Landroid/net/DhcpResults;
+HPLandroid/net/shared/IpConfigurationParcelableUtil;->unparcelAddress(Ljava/lang/String;)Ljava/net/InetAddress;
+HPLandroid/net/shared/NetworkMonitorUtils;->isPrivateDnsValidationRequired(Landroid/net/NetworkCapabilities;)Z
+HPLandroid/net/shared/ParcelableUtil;->fromParcelableArray([Ljava/lang/Object;Ljava/util/function/Function;)Ljava/util/ArrayList;
+HPLandroid/net/shared/ParcelableUtil;->toParcelableArray(Ljava/util/Collection;Ljava/util/function/Function;Ljava/lang/Class;)[Ljava/lang/Object;
 HSPLandroid/net/shared/PrivateDnsConfig;-><init>()V
+PLandroid/net/shared/PrivateDnsConfig;-><init>(Ljava/lang/String;[Ljava/net/InetAddress;)V
 HSPLandroid/net/shared/PrivateDnsConfig;-><init>(Z)V
-PLandroid/net/shared/PrivateDnsConfig;->inStrictMode()Z
-PLandroid/net/shared/PrivateDnsConfig;->toString()Ljava/lang/String;
+PLandroid/net/shared/PrivateDnsConfig;->fromParcel(Landroid/net/PrivateDnsConfigParcel;)Landroid/net/shared/PrivateDnsConfig;
+HPLandroid/net/shared/PrivateDnsConfig;->inStrictMode()Z
+PLandroid/net/shared/PrivateDnsConfig;->toParcel()Landroid/net/PrivateDnsConfigParcel;
+HPLandroid/net/shared/PrivateDnsConfig;->toString()Ljava/lang/String;
 PLandroid/net/shared/ProvisioningConfiguration$Builder;-><init>()V
 PLandroid/net/shared/ProvisioningConfiguration$Builder;->build()Landroid/net/shared/ProvisioningConfiguration;
 PLandroid/net/shared/ProvisioningConfiguration$Builder;->withApfCapabilities(Landroid/net/apf/ApfCapabilities;)Landroid/net/shared/ProvisioningConfiguration$Builder;
 PLandroid/net/shared/ProvisioningConfiguration$Builder;->withDisplayName(Ljava/lang/String;)Landroid/net/shared/ProvisioningConfiguration$Builder;
 PLandroid/net/shared/ProvisioningConfiguration$Builder;->withNetwork(Landroid/net/Network;)Landroid/net/shared/ProvisioningConfiguration$Builder;
 PLandroid/net/shared/ProvisioningConfiguration$Builder;->withPreDhcpAction()Landroid/net/shared/ProvisioningConfiguration$Builder;
+PLandroid/net/shared/ProvisioningConfiguration$Builder;->withProvisioningTimeoutMs(I)Landroid/net/shared/ProvisioningConfiguration$Builder;
 PLandroid/net/shared/ProvisioningConfiguration;-><init>()V
 PLandroid/net/shared/ProvisioningConfiguration;-><init>(Landroid/net/shared/ProvisioningConfiguration;)V
 PLandroid/net/shared/ProvisioningConfiguration;->toStableParcelable()Landroid/net/ProvisioningConfigurationParcelable;
+PLandroid/net/shared/RouteUtils$1;-><clinit>()V
+PLandroid/net/shared/RouteUtils$ModifyOperation;-><clinit>()V
+PLandroid/net/shared/RouteUtils$ModifyOperation;-><init>(Ljava/lang/String;I)V
+PLandroid/net/shared/RouteUtils$ModifyOperation;->values()[Landroid/net/shared/RouteUtils$ModifyOperation;
+HPLandroid/net/shared/RouteUtils;->findNextHop(Landroid/net/RouteInfo;)Ljava/lang/String;
+HPLandroid/net/shared/RouteUtils;->modifyRoute(Landroid/net/INetd;Landroid/net/shared/RouteUtils$ModifyOperation;ILandroid/net/RouteInfo;)V
+PLandroid/net/util/InterfaceParams;->getByName(Ljava/lang/String;)Landroid/net/util/InterfaceParams;
+PLandroid/net/util/InterfaceParams;->getNetworkInterfaceByName(Ljava/lang/String;)Ljava/net/NetworkInterface;
+HPLandroid/net/util/KeepalivePacketDataUtil;->toStableParcelable(Landroid/net/NattKeepalivePacketData;)Landroid/net/NattKeepalivePacketDataParcelable;
 HSPLandroid/net/util/NetdService;-><clinit>()V
 HSPLandroid/net/util/NetdService;->get()Landroid/net/INetd;
 HSPLandroid/net/util/NetdService;->get(J)Landroid/net/INetd;
@@ -453,15 +655,16 @@
 HSPLandroid/net/util/SharedLog;-><init>(Landroid/util/LocalLog;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/net/util/SharedLog;-><init>(Ljava/lang/String;)V
 PLandroid/net/util/SharedLog;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLandroid/net/util/SharedLog;->i(Ljava/lang/String;)V
+HSPLandroid/net/util/SharedLog;->i(Ljava/lang/String;)V
 HSPLandroid/net/util/SharedLog;->isRootLogInstance()Z
 HSPLandroid/net/util/SharedLog;->log(Ljava/lang/String;)V
 HSPLandroid/net/util/SharedLog;->logLine(Landroid/net/util/SharedLog$Category;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/net/util/SharedLog;->record(Landroid/net/util/SharedLog$Category;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/os/BatteryStatsInternal;-><init>()V
 HSPLandroid/os/IIdmap2$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/os/IIdmap2$Stub$Proxy;->createIdmap(Ljava/lang/String;Ljava/lang/String;IZI)Ljava/lang/String;
+HSPLandroid/os/IIdmap2$Stub$Proxy;->createIdmap(Ljava/lang/String;Ljava/lang/String;IZI)Ljava/lang/String;
 HSPLandroid/os/IIdmap2$Stub$Proxy;->getIdmapPath(Ljava/lang/String;I)Ljava/lang/String;
+PLandroid/os/IIdmap2$Stub$Proxy;->removeIdmap(Ljava/lang/String;I)Z
 HSPLandroid/os/IIdmap2$Stub$Proxy;->verifyIdmap(Ljava/lang/String;IZI)Z
 HSPLandroid/os/IIdmap2$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IIdmap2;
 HSPLandroid/os/UserManagerInternal;-><init>()V
@@ -469,89 +672,142 @@
 HSPLcom/android/server/-$$Lambda$1xUIIN0BU8izGcnYWT-VzczLBFU;-><init>()V
 HSPLcom/android/server/-$$Lambda$1xUIIN0BU8izGcnYWT-VzczLBFU;->get(Lcom/android/server/NsdService$NativeCallbackReceiver;)Lcom/android/server/NsdService$DaemonConnection;
 PLcom/android/server/-$$Lambda$AlarmManagerService$2$Eo-D98J-N9R2METkD-12gPs320c;-><init>(Lcom/android/server/AlarmManagerService$2;Landroid/app/IAlarmCompleteListener;)V
-PLcom/android/server/-$$Lambda$AlarmManagerService$2$Eo-D98J-N9R2METkD-12gPs320c;->run()V
+HPLcom/android/server/-$$Lambda$AlarmManagerService$2$Eo-D98J-N9R2METkD-12gPs320c;->run()V
+HPLcom/android/server/-$$Lambda$AlarmManagerService$3$jIkPWjqS66vG6aFVQoHxR2w4HPE;-><init>(Lcom/android/server/AlarmManagerService$3;Landroid/app/IAlarmCompleteListener;)V
+HPLcom/android/server/-$$Lambda$AlarmManagerService$3$jIkPWjqS66vG6aFVQoHxR2w4HPE;->run()V
 HPLcom/android/server/-$$Lambda$AlarmManagerService$Batch$Xltkj5RTKUMuFVeuavpuY7-Ogzc;-><init>(Lcom/android/server/AlarmManagerService$Alarm;)V
 PLcom/android/server/-$$Lambda$AlarmManagerService$Batch$Xltkj5RTKUMuFVeuavpuY7-Ogzc;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/-$$Lambda$AlarmManagerService$ZVedZIeWdB3G6AGM0_-9P_GEO24;-><init>(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
 HSPLcom/android/server/-$$Lambda$AlarmManagerService$ZVedZIeWdB3G6AGM0_-9P_GEO24;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/-$$Lambda$AlarmManagerService$gKXZ864LsHRTGbnNeLAgHKL2YPk;-><init>(Lcom/android/server/AlarmManagerService;)V
-PLcom/android/server/-$$Lambda$AlarmManagerService$gKXZ864LsHRTGbnNeLAgHKL2YPk;->run()V
+HPLcom/android/server/-$$Lambda$AlarmManagerService$gKXZ864LsHRTGbnNeLAgHKL2YPk;->run()V
+HSPLcom/android/server/-$$Lambda$AlarmManagerService$nSJw2tKfoL3YIrKDtszoL44jcSM;-><init>(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/-$$Lambda$AlarmManagerService$nSJw2tKfoL3YIrKDtszoL44jcSM;->test(Ljava/lang/Object;)Z
+PLcom/android/server/-$$Lambda$AlarmManagerService$nhEd_CDoc7mzdNLRwGUhwl9TaGk;-><init>(I)V
+PLcom/android/server/-$$Lambda$AlarmManagerService$nhEd_CDoc7mzdNLRwGUhwl9TaGk;->test(Ljava/lang/Object;)Z
+PLcom/android/server/-$$Lambda$AlarmManagerService$qehVSjTLWvtJYPGgKh2mkJ6ePnk;-><init>(I)V
+HPLcom/android/server/-$$Lambda$AlarmManagerService$qehVSjTLWvtJYPGgKh2mkJ6ePnk;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/-$$Lambda$AppStateTracker$zzioY8jvEm-1GnJ13CUiQGauPEE;-><init>(Lcom/android/server/AppStateTracker;)V
+PLcom/android/server/-$$Lambda$AppStateTracker$zzioY8jvEm-1GnJ13CUiQGauPEE;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/-$$Lambda$BatteryService$2x73lvpB0jctMSVP4qb9sHAqRPw;-><init>(Landroid/content/Intent;)V
-PLcom/android/server/-$$Lambda$BatteryService$2x73lvpB0jctMSVP4qb9sHAqRPw;->run()V
+HSPLcom/android/server/-$$Lambda$BatteryService$2x73lvpB0jctMSVP4qb9sHAqRPw;->run()V
 HPLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$7Y-B9O7NDYgUY9hQvFzC2FQ2V5w;-><init>(Landroid/util/MutableInt;Landroid/os/BatteryProperty;)V
-PLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$7Y-B9O7NDYgUY9hQvFzC2FQ2V5w;->onValues(II)V
+HPLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$7Y-B9O7NDYgUY9hQvFzC2FQ2V5w;->onValues(II)V
 HPLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$9z3zqgxtPzBN8Qoni5nHVb0m8EY;-><init>(Landroid/util/MutableInt;Landroid/os/BatteryProperty;)V
-PLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$9z3zqgxtPzBN8Qoni5nHVb0m8EY;->onValues(IJ)V
+HPLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$9z3zqgxtPzBN8Qoni5nHVb0m8EY;->onValues(IJ)V
 HPLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$DM4ow6LC--JYWBfhHp2f1JW8nww;-><init>(Landroid/util/MutableInt;Landroid/os/BatteryProperty;)V
-PLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$DM4ow6LC--JYWBfhHp2f1JW8nww;->onValues(II)V
+HPLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$DM4ow6LC--JYWBfhHp2f1JW8nww;->onValues(II)V
+HPLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$JTQ79fl14NyImudsJhx-Mp1dJI8;-><init>(Landroid/util/MutableInt;Landroid/os/BatteryProperty;)V
+PLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$JTQ79fl14NyImudsJhx-Mp1dJI8;->onValues(II)V
 HPLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$KZAu97wwr_7_MI0awCjQTzdIuAI;-><init>(Landroid/util/MutableInt;Landroid/os/BatteryProperty;)V
-PLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$KZAu97wwr_7_MI0awCjQTzdIuAI;->onValues(II)V
+HPLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$KZAu97wwr_7_MI0awCjQTzdIuAI;->onValues(II)V
 HSPLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$muNPoFqxU6pF6un7sF70iW4-Fus;-><init>(Lcom/android/server/BatteryService$BatteryPropertiesRegistrar;)V
 HSPLcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$muNPoFqxU6pF6un7sF70iW4-Fus;->run()V
 HSPLcom/android/server/-$$Lambda$BatteryService$D1kwd7L7yyqN5niz3KWkTepVmUk;-><init>(Lcom/android/server/BatteryService;)V
-PLcom/android/server/-$$Lambda$BatteryService$D1kwd7L7yyqN5niz3KWkTepVmUk;->run()V
+HSPLcom/android/server/-$$Lambda$BatteryService$D1kwd7L7yyqN5niz3KWkTepVmUk;->run()V
+HPLcom/android/server/-$$Lambda$ConnectivityService$3$_itgrpHpWu3QvA9Wb0gtsEYJWZY;-><init>(Lcom/android/server/ConnectivityService$3;IZLjava/lang/String;I)V
+HPLcom/android/server/-$$Lambda$ConnectivityService$3$_itgrpHpWu3QvA9Wb0gtsEYJWZY;->run()V
+HSPLcom/android/server/-$$Lambda$ConnectivityService$HGNmLJFn9hb5C4M_qIm2DAASfeY;-><init>(Lcom/android/server/ConnectivityService;Landroid/os/Messenger;)V
+PLcom/android/server/-$$Lambda$ConnectivityService$HGNmLJFn9hb5C4M_qIm2DAASfeY;->binderDied()V
 PLcom/android/server/-$$Lambda$ConnectivityService$OIhIcUZjeJ-ci4rP6veezE8o67U;-><init>(Lcom/android/server/ConnectivityService;Landroid/net/Network;)V
 PLcom/android/server/-$$Lambda$ConnectivityService$OIhIcUZjeJ-ci4rP6veezE8o67U;->run()V
 HSPLcom/android/server/-$$Lambda$ConnectivityService$SFqiR4Pfksb1C7csMC3uNxCllR8;-><init>(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/-$$Lambda$ConnectivityService$SFqiR4Pfksb1C7csMC3uNxCllR8;->run()V
 PLcom/android/server/-$$Lambda$ConnectivityService$_NU7EIcPVS-uF_gWH_NWN_gBL4w;-><clinit>()V
 PLcom/android/server/-$$Lambda$ConnectivityService$_NU7EIcPVS-uF_gWH_NWN_gBL4w;-><init>()V
+PLcom/android/server/-$$Lambda$ConnectivityService$_NU7EIcPVS-uF_gWH_NWN_gBL4w;->applyAsInt(Ljava/lang/Object;)I
 PLcom/android/server/-$$Lambda$ConnectivityService$iOdlQdHoQM14teTS-EPRH-RRL3k;-><clinit>()V
 PLcom/android/server/-$$Lambda$ConnectivityService$iOdlQdHoQM14teTS-EPRH-RRL3k;-><init>()V
-PLcom/android/server/-$$Lambda$ConnectivityService$iOdlQdHoQM14teTS-EPRH-RRL3k;->applyAsInt(Ljava/lang/Object;)I
+HPLcom/android/server/-$$Lambda$ConnectivityService$iOdlQdHoQM14teTS-EPRH-RRL3k;->applyAsInt(Ljava/lang/Object;)I
+HPLcom/android/server/-$$Lambda$ConnectivityService$uvmt4yGRo-ufWZED19neBxJaTNk;-><init>(Lcom/android/server/ConnectivityService;)V
+HPLcom/android/server/-$$Lambda$ConnectivityService$uvmt4yGRo-ufWZED19neBxJaTNk;->run()V
 PLcom/android/server/-$$Lambda$ConnectivityService$vGRhfNpFTw0hellWUlmBolfzRy8;-><init>(Lcom/android/server/ConnectivityService;Landroid/content/Intent;)V
 PLcom/android/server/-$$Lambda$ConnectivityService$vGRhfNpFTw0hellWUlmBolfzRy8;->runOrThrow()V
 HSPLcom/android/server/-$$Lambda$ContextHubSystemService$q-5gSEKm3he-4vIHcay4DLtf85E;-><init>(Lcom/android/server/ContextHubSystemService;Landroid/content/Context;)V
 HSPLcom/android/server/-$$Lambda$ContextHubSystemService$q-5gSEKm3he-4vIHcay4DLtf85E;->run()V
-PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$6YGiVtgCnlJ0hMIeX5TzlFUaNrY;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
-PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$MJhpX-SveTcXQEYQTQa3k6RpjzU;-><init>(Ljava/util/function/Consumer;)V
-PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$MJhpX-SveTcXQEYQTQa3k6RpjzU;->onResult(Landroid/os/Bundle;)V
-PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$NCzfilqDrFIbp6BuyCJrDsdAk5I;-><init>(Lcom/android/server/ExplicitHealthCheckController;Ljava/util/List;Ljava/util/Set;)V
-PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$NCzfilqDrFIbp6BuyCJrDsdAk5I;->accept(Ljava/lang/Object;)V
-PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$_PgTaUvckhKQczm_86P6Mowec48;-><init>(Ljava/util/function/Consumer;)V
-PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$_PgTaUvckhKQczm_86P6Mowec48;->onResult(Landroid/os/Bundle;)V
-PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$fE2pZ6ZhwFEJPuOl0ochqPnSmyI;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
-PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$ucIBQc_IW2iYt6j4dngAncLT6nQ;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
-PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$x4g41SYVR_nHQxV-RQY6VIfh1zs;-><init>(Lcom/android/server/ExplicitHealthCheckController;Ljava/util/Set;)V
-PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$x4g41SYVR_nHQxV-RQY6VIfh1zs;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/-$$Lambda$CountryDetectorService$ESi5ICoEixGJHWdY67G_J38VrJI;-><init>(Lcom/android/server/CountryDetectorService;)V
+HSPLcom/android/server/-$$Lambda$CountryDetectorService$ESi5ICoEixGJHWdY67G_J38VrJI;->run()V
+HPLcom/android/server/-$$Lambda$CountryDetectorService$UdoYpHRrhGb-PF6QTwQ4SluOe20;-><init>(Lcom/android/server/CountryDetectorService;Landroid/location/CountryListener;)V
+HPLcom/android/server/-$$Lambda$CountryDetectorService$UdoYpHRrhGb-PF6QTwQ4SluOe20;->run()V
+HSPLcom/android/server/-$$Lambda$CountryDetectorService$YZWlE4qqoDuiwnkSrasi91p2-Tk;-><init>(Lcom/android/server/CountryDetectorService;)V
+PLcom/android/server/-$$Lambda$CountryDetectorService$YZWlE4qqoDuiwnkSrasi91p2-Tk;->onCountryDetected(Landroid/location/Country;)V
+PLcom/android/server/-$$Lambda$CountryDetectorService$fFSTHORponDwFf2wlaJLUdUhirQ;-><init>(Lcom/android/server/CountryDetectorService;Landroid/location/Country;)V
+PLcom/android/server/-$$Lambda$CountryDetectorService$fFSTHORponDwFf2wlaJLUdUhirQ;->run()V
+HSPLcom/android/server/-$$Lambda$ExplicitHealthCheckController$6YGiVtgCnlJ0hMIeX5TzlFUaNrY;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
+PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$6YGiVtgCnlJ0hMIeX5TzlFUaNrY;->onResult(Landroid/os/Bundle;)V
+HSPLcom/android/server/-$$Lambda$ExplicitHealthCheckController$MJhpX-SveTcXQEYQTQa3k6RpjzU;-><init>(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/-$$Lambda$ExplicitHealthCheckController$MJhpX-SveTcXQEYQTQa3k6RpjzU;->onResult(Landroid/os/Bundle;)V
+HSPLcom/android/server/-$$Lambda$ExplicitHealthCheckController$NCzfilqDrFIbp6BuyCJrDsdAk5I;-><init>(Lcom/android/server/ExplicitHealthCheckController;Ljava/util/List;Ljava/util/Set;)V
+HSPLcom/android/server/-$$Lambda$ExplicitHealthCheckController$NCzfilqDrFIbp6BuyCJrDsdAk5I;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/-$$Lambda$ExplicitHealthCheckController$_PgTaUvckhKQczm_86P6Mowec48;-><init>(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/-$$Lambda$ExplicitHealthCheckController$_PgTaUvckhKQczm_86P6Mowec48;->onResult(Landroid/os/Bundle;)V
+HSPLcom/android/server/-$$Lambda$ExplicitHealthCheckController$fE2pZ6ZhwFEJPuOl0ochqPnSmyI;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
+PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$fE2pZ6ZhwFEJPuOl0ochqPnSmyI;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/-$$Lambda$ExplicitHealthCheckController$ucIBQc_IW2iYt6j4dngAncLT6nQ;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
+PLcom/android/server/-$$Lambda$ExplicitHealthCheckController$ucIBQc_IW2iYt6j4dngAncLT6nQ;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/-$$Lambda$ExplicitHealthCheckController$x4g41SYVR_nHQxV-RQY6VIfh1zs;-><init>(Lcom/android/server/ExplicitHealthCheckController;Ljava/util/Set;)V
+HSPLcom/android/server/-$$Lambda$ExplicitHealthCheckController$x4g41SYVR_nHQxV-RQY6VIfh1zs;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/-$$Lambda$GnssManagerService$a17GVVAgEci0VYD4EMvKwuPLhdQ;-><init>(Lcom/android/server/GnssManagerService;)V
-HPLcom/android/server/-$$Lambda$GnssManagerService$a17GVVAgEci0VYD4EMvKwuPLhdQ;->onUidImportance(II)V
-PLcom/android/server/-$$Lambda$GnssManagerService$mZAgy7PA5q3tB1aq7tHsX4xM14E;-><init>(Lcom/android/server/GnssManagerService;II)V
-HPLcom/android/server/-$$Lambda$GnssManagerService$mZAgy7PA5q3tB1aq7tHsX4xM14E;->run()V
-PLcom/android/server/-$$Lambda$GraphicsStatsService$2EDVu98hsJvSwNgKvijVLSR3IrQ;-><init>(Lcom/android/server/GraphicsStatsService;)V
+HSPLcom/android/server/-$$Lambda$GnssManagerService$a17GVVAgEci0VYD4EMvKwuPLhdQ;->onUidImportance(II)V
+HSPLcom/android/server/-$$Lambda$GnssManagerService$mZAgy7PA5q3tB1aq7tHsX4xM14E;-><init>(Lcom/android/server/GnssManagerService;II)V
+HSPLcom/android/server/-$$Lambda$GnssManagerService$mZAgy7PA5q3tB1aq7tHsX4xM14E;->run()V
+HSPLcom/android/server/-$$Lambda$GraphicsStatsService$2EDVu98hsJvSwNgKvijVLSR3IrQ;-><init>(Lcom/android/server/GraphicsStatsService;)V
 PLcom/android/server/-$$Lambda$GraphicsStatsService$2EDVu98hsJvSwNgKvijVLSR3IrQ;->onAlarm()V
-PLcom/android/server/-$$Lambda$HALkbmbB2IPr_wdFkPjiIWCzJsY;-><clinit>()V
-PLcom/android/server/-$$Lambda$HALkbmbB2IPr_wdFkPjiIWCzJsY;-><init>()V
+HSPLcom/android/server/-$$Lambda$HALkbmbB2IPr_wdFkPjiIWCzJsY;-><clinit>()V
+HSPLcom/android/server/-$$Lambda$HALkbmbB2IPr_wdFkPjiIWCzJsY;-><init>()V
 HSPLcom/android/server/-$$Lambda$IpSecService$AnqunmSwm_yQvDDEPg-gokhVs5M;-><clinit>()V
 HSPLcom/android/server/-$$Lambda$IpSecService$AnqunmSwm_yQvDDEPg-gokhVs5M;-><init>()V
-PLcom/android/server/-$$Lambda$LocationManagerService$1$HAAnoF9DI9FvCHK_geH89--2z2I;-><init>(Lcom/android/server/LocationManagerService$1;)V
-PLcom/android/server/-$$Lambda$LocationManagerService$1$HAAnoF9DI9FvCHK_geH89--2z2I;->run()V
+HSPLcom/android/server/-$$Lambda$LocationManagerService$1$HAAnoF9DI9FvCHK_geH89--2z2I;-><init>(Lcom/android/server/LocationManagerService$1;)V
+HSPLcom/android/server/-$$Lambda$LocationManagerService$1$HAAnoF9DI9FvCHK_geH89--2z2I;->run()V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$56u_uxjuANYKBEJg0XAb0TfpovM;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/-$$Lambda$LocationManagerService$56u_uxjuANYKBEJg0XAb0TfpovM;->onSettingChanged()V
+HSPLcom/android/server/-$$Lambda$LocationManagerService$6axYIgaetwnztBT8L9-07FzvA1k;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/-$$Lambda$LocationManagerService$6axYIgaetwnztBT8L9-07FzvA1k;->accept(Ljava/lang/Object;)V
+PLcom/android/server/-$$Lambda$LocationManagerService$7UVIPM1Ndi2blDc1rAeJdqMBvh8;-><init>(Lcom/android/server/LocationManagerService;Landroid/location/ILocationListener;Ljava/lang/String;)V
+PLcom/android/server/-$$Lambda$LocationManagerService$7UVIPM1Ndi2blDc1rAeJdqMBvh8;->onCancel()V
+PLcom/android/server/-$$Lambda$LocationManagerService$9-Bb7czX4njtJ272aPH91IsacAY;-><init>(Lcom/android/server/LocationManagerService;Landroid/location/ILocationListener;Ljava/lang/String;)V
+PLcom/android/server/-$$Lambda$LocationManagerService$9-Bb7czX4njtJ272aPH91IsacAY;->onCancel()V
+HSPLcom/android/server/-$$Lambda$LocationManagerService$AgevX9G4cx2TbNzr7MYT3YPtASs;-><init>(Lcom/android/server/LocationManagerService;)V
+HSPLcom/android/server/-$$Lambda$LocationManagerService$AgevX9G4cx2TbNzr7MYT3YPtASs;->onAppForegroundChanged(IZ)V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$BQNQ1vKVv2dgsjR1d4p8xU8o1us;-><init>(Lcom/android/server/LocationManagerService;)V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$BQNQ1vKVv2dgsjR1d4p8xU8o1us;->onUidImportance(II)V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$BY2uqgE48i0Shvo1FGLa9toRxBA;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/-$$Lambda$LocationManagerService$BY2uqgE48i0Shvo1FGLa9toRxBA;->onSettingChanged()V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$DJ4kMod0tVB-vqSawrWCXTCoPAM;-><init>(Lcom/android/server/LocationManagerService;)V
+HSPLcom/android/server/-$$Lambda$LocationManagerService$EWYAKDMwH-ZXy5A8J9erCTIUqKY;-><init>(Lcom/android/server/LocationManagerService;)V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$GnHas6J3gXGjXx6KfNuV_GzNl9w;-><init>(Lcom/android/server/LocationManagerService;)V
-PLcom/android/server/-$$Lambda$LocationManagerService$GnHas6J3gXGjXx6KfNuV_GzNl9w;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/-$$Lambda$LocationManagerService$GnHas6J3gXGjXx6KfNuV_GzNl9w;->getPackages(I)[Ljava/lang/String;
 HSPLcom/android/server/-$$Lambda$LocationManagerService$HZIPtgYCt4b4zdEJtC8qjcHStVE;-><init>(Lcom/android/server/LocationManagerService;)V
-PLcom/android/server/-$$Lambda$LocationManagerService$HZIPtgYCt4b4zdEJtC8qjcHStVE;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/-$$Lambda$LocationManagerService$HZIPtgYCt4b4zdEJtC8qjcHStVE;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/-$$Lambda$LocationManagerService$KXKNxpIZDrysWhFilQxLdYekB3M;-><init>(Lcom/android/server/LocationManagerService;)V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$LocationProviderManager$neXVKsR0MS1O6DaHXSdf3TVC-rc;-><init>(Lcom/android/server/LocationManagerService$LocationProviderManager;Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$LocationProviderManager$neXVKsR0MS1O6DaHXSdf3TVC-rc;->run()V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$Nht7c6P7I1-MJqXp4qiS_HUIjzY;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/-$$Lambda$LocationManagerService$Nht7c6P7I1-MJqXp4qiS_HUIjzY;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/-$$Lambda$LocationManagerService$QVf9Y4g7BmVBQBlkUO5oHLmMW2o;-><init>(Lcom/android/server/LocationManagerService;)V
 HPLcom/android/server/-$$Lambda$LocationManagerService$QVf9Y4g7BmVBQBlkUO5oHLmMW2o;->run()V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$V3FRncuMEn-4R6Dd2zsTs4m0dWM;-><init>(Lcom/android/server/LocationManagerService;II)V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$V3FRncuMEn-4R6Dd2zsTs4m0dWM;->run()V
+PLcom/android/server/-$$Lambda$LocationManagerService$XWulT08IueAbw1NBjxLvw-T5cfc;-><init>(Lcom/android/server/LocationManagerService;Landroid/os/PowerSaveState;)V
+PLcom/android/server/-$$Lambda$LocationManagerService$XWulT08IueAbw1NBjxLvw-T5cfc;->run()V
+HSPLcom/android/server/-$$Lambda$LocationManagerService$cH8JMN3scBU_51q5WfUtASFQZJ0;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/-$$Lambda$LocationManagerService$dMJ6CgaZhEyiV2592-lxxrexZAQ;-><init>(Lcom/android/server/LocationManagerService;Landroid/os/PowerSaveState;)V
+PLcom/android/server/-$$Lambda$LocationManagerService$dMJ6CgaZhEyiV2592-lxxrexZAQ;->run()V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$es-cu7rp_R0xbJzDRj4qpZNL7vc;-><init>(Lcom/android/server/LocationManagerService;)V
-PLcom/android/server/-$$Lambda$LocationManagerService$es-cu7rp_R0xbJzDRj4qpZNL7vc;->onPermissionsChanged(I)V
+HPLcom/android/server/-$$Lambda$LocationManagerService$es-cu7rp_R0xbJzDRj4qpZNL7vc;->onPermissionsChanged(I)V
+HSPLcom/android/server/-$$Lambda$LocationManagerService$fWSrYiKaBfOFmdeiwC9Lx7S68B4;-><init>(Lcom/android/server/LocationManagerService;)V
+HSPLcom/android/server/-$$Lambda$LocationManagerService$nxs_FejUjcjw2UUIeDY3TYTRJs4;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/-$$Lambda$LocationManagerService$nxs_FejUjcjw2UUIeDY3TYTRJs4;->onSettingChanged()V
+HSPLcom/android/server/-$$Lambda$LocationManagerService$oIimlThgbbmKRAN80H4tpnruGtk;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/-$$Lambda$LocationManagerService$oIimlThgbbmKRAN80H4tpnruGtk;->onSettingChanged(I)V
 HSPLcom/android/server/-$$Lambda$LocationManagerService$qbZh8GXCTpZ1wNP3qw1VXZxlKQg;-><init>(Lcom/android/server/LocationManagerService;)V
-PLcom/android/server/-$$Lambda$LocationManagerService$qbZh8GXCTpZ1wNP3qw1VXZxlKQg;->onSettingChanged(I)V
+HSPLcom/android/server/-$$Lambda$LocationManagerService$qbZh8GXCTpZ1wNP3qw1VXZxlKQg;->onSettingChanged(I)V
 PLcom/android/server/-$$Lambda$LooperStatsService$Byo6QAxZpVXDCMtjrcYJc6YLAks;-><clinit>()V
 PLcom/android/server/-$$Lambda$LooperStatsService$Byo6QAxZpVXDCMtjrcYJc6YLAks;-><init>()V
-PLcom/android/server/-$$Lambda$LooperStatsService$Byo6QAxZpVXDCMtjrcYJc6YLAks;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/-$$Lambda$LooperStatsService$Byo6QAxZpVXDCMtjrcYJc6YLAks;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/-$$Lambda$LooperStatsService$Vzysuo2tO86qjfcWeh1Rdb47NQQ;-><clinit>()V
 PLcom/android/server/-$$Lambda$LooperStatsService$Vzysuo2tO86qjfcWeh1Rdb47NQQ;-><init>()V
-PLcom/android/server/-$$Lambda$LooperStatsService$Vzysuo2tO86qjfcWeh1Rdb47NQQ;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/-$$Lambda$LooperStatsService$Vzysuo2tO86qjfcWeh1Rdb47NQQ;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/-$$Lambda$LooperStatsService$XjYmSR91xdWG1Xgt-Gj9GBZZbjk;-><clinit>()V
 PLcom/android/server/-$$Lambda$LooperStatsService$XjYmSR91xdWG1Xgt-Gj9GBZZbjk;-><init>()V
 PLcom/android/server/-$$Lambda$LooperStatsService$XjYmSR91xdWG1Xgt-Gj9GBZZbjk;->apply(Ljava/lang/Object;)Ljava/lang/Object;
@@ -562,8 +818,8 @@
 PLcom/android/server/-$$Lambda$NetworkManagementService$15DusjG2gzn5UASV-lMS3BUUn9c;->run()V
 HPLcom/android/server/-$$Lambda$NetworkManagementService$D43p3Tqq7B3qaMs9AGb_3j0KZd0;-><init>(IZJ)V
 HPLcom/android/server/-$$Lambda$NetworkManagementService$D43p3Tqq7B3qaMs9AGb_3j0KZd0;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
-PLcom/android/server/-$$Lambda$NetworkManagementService$FsR_UD5xfj4hgrwGdX74wq881Bk;-><init>(Ljava/lang/String;)V
-PLcom/android/server/-$$Lambda$NetworkManagementService$FsR_UD5xfj4hgrwGdX74wq881Bk;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
+HPLcom/android/server/-$$Lambda$NetworkManagementService$FsR_UD5xfj4hgrwGdX74wq881Bk;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/-$$Lambda$NetworkManagementService$FsR_UD5xfj4hgrwGdX74wq881Bk;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$JKmkb4AIm_PPzQp1XOHOgPPRswo;-><init>(Landroid/net/RouteInfo;)V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$JKmkb4AIm_PPzQp1XOHOgPPRswo;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
 HPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$0xWa9DGxTnoGVHppsM-nng2PygE;-><init>(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;IZJI)V
@@ -571,27 +827,27 @@
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$KpFpi2qBs2OPscTclZ3JRRr-G-g;-><init>(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;Landroid/net/LinkAddress;)V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$KpFpi2qBs2OPscTclZ3JRRr-G-g;->run()V
 HPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$L7i_Z-ii6zMptHCt2_Igy3iBvKk;-><init>(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$L7i_Z-ii6zMptHCt2_Igy3iBvKk;->run()V
+HPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$L7i_Z-ii6zMptHCt2_Igy3iBvKk;->run()V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$QjjL0oku3yfQh6xuCG2xu7lWiSM;-><init>(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;ZLandroid/net/RouteInfo;)V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$QjjL0oku3yfQh6xuCG2xu7lWiSM;->run()V
 PLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$h2iz-IbnHpQ97mlJ7G62W2mmanw;-><init>(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;)V
-PLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$h2iz-IbnHpQ97mlJ7G62W2mmanw;->run()V
-HPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$hh3pIkVnnzeRGeDRAOOmVvc6VxE;-><init>(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;J[Ljava/lang/String;)V
-PLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$hh3pIkVnnzeRGeDRAOOmVvc6VxE;->run()V
+HPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$h2iz-IbnHpQ97mlJ7G62W2mmanw;->run()V
+HSPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$hh3pIkVnnzeRGeDRAOOmVvc6VxE;-><init>(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;J[Ljava/lang/String;)V
+HSPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$hh3pIkVnnzeRGeDRAOOmVvc6VxE;->run()V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$ne4qDQiQuX7-WNuF8Q_c7HnWnG0;-><init>(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;)V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$ne4qDQiQuX7-WNuF8Q_c7HnWnG0;->run()V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$pOV71EYm5PphEVG1PGQnV_c6XiA;-><init>(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;Z)V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$pOV71EYm5PphEVG1PGQnV_c6XiA;->run()V
-HPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$praKgcnQG9FTHNMGfCVPTVY8mK8;-><init>(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;Landroid/net/LinkAddress;)V
-PLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$praKgcnQG9FTHNMGfCVPTVY8mK8;->run()V
-HPLcom/android/server/-$$Lambda$NetworkManagementService$RVCc8O9RWjyrynN9cyM7inAv-fk;-><init>(Ljava/lang/String;J[Ljava/lang/String;)V
-PLcom/android/server/-$$Lambda$NetworkManagementService$RVCc8O9RWjyrynN9cyM7inAv-fk;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
-PLcom/android/server/-$$Lambda$NetworkManagementService$VhSl9D6THA_3jE0unleMmkHavJ0;-><init>(Landroid/net/RouteInfo;)V
-PLcom/android/server/-$$Lambda$NetworkManagementService$VhSl9D6THA_3jE0unleMmkHavJ0;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
+HSPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$praKgcnQG9FTHNMGfCVPTVY8mK8;-><init>(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;Landroid/net/LinkAddress;)V
+HSPLcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$praKgcnQG9FTHNMGfCVPTVY8mK8;->run()V
+HSPLcom/android/server/-$$Lambda$NetworkManagementService$RVCc8O9RWjyrynN9cyM7inAv-fk;-><init>(Ljava/lang/String;J[Ljava/lang/String;)V
+HSPLcom/android/server/-$$Lambda$NetworkManagementService$RVCc8O9RWjyrynN9cyM7inAv-fk;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
+HSPLcom/android/server/-$$Lambda$NetworkManagementService$VhSl9D6THA_3jE0unleMmkHavJ0;-><init>(Landroid/net/RouteInfo;)V
+HSPLcom/android/server/-$$Lambda$NetworkManagementService$VhSl9D6THA_3jE0unleMmkHavJ0;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
 PLcom/android/server/-$$Lambda$NetworkManagementService$YKgmK-4MuJjN-VLuMBhmJy1eWj4;-><init>(Lcom/android/server/NetworkManagementService;I)V
 PLcom/android/server/-$$Lambda$NetworkManagementService$YKgmK-4MuJjN-VLuMBhmJy1eWj4;->run()V
-HPLcom/android/server/-$$Lambda$NetworkManagementService$Yw12yNgo43yul34SibAKDtttAK8;-><init>(Ljava/lang/String;Landroid/net/LinkAddress;)V
-HPLcom/android/server/-$$Lambda$NetworkManagementService$Yw12yNgo43yul34SibAKDtttAK8;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
+HSPLcom/android/server/-$$Lambda$NetworkManagementService$Yw12yNgo43yul34SibAKDtttAK8;-><init>(Ljava/lang/String;Landroid/net/LinkAddress;)V
+HSPLcom/android/server/-$$Lambda$NetworkManagementService$Yw12yNgo43yul34SibAKDtttAK8;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$_L953cbquVj0BMBP1MZlSTm0Umg;-><init>(Ljava/lang/String;Z)V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$_L953cbquVj0BMBP1MZlSTm0Umg;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$hs6djmKbGd8sG4u1TMglrogNP_s;-><init>(Ljava/lang/String;Landroid/net/LinkAddress;)V
@@ -599,24 +855,30 @@
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$vX8dVVYxxv3YT9jQuN34bgGgRa8;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/-$$Lambda$NetworkManagementService$vX8dVVYxxv3YT9jQuN34bgGgRa8;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
 HPLcom/android/server/-$$Lambda$NetworkManagementService$xer7k2RLU4mODjrkZqaX89S9gD8;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/-$$Lambda$NetworkManagementService$xer7k2RLU4mODjrkZqaX89S9gD8;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
+HPLcom/android/server/-$$Lambda$NetworkManagementService$xer7k2RLU4mODjrkZqaX89S9gD8;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
 HSPLcom/android/server/-$$Lambda$NetworkScoreService$vwytA23Qz3U83FJaKiA52aJ1mts;-><init>(Lcom/android/server/NetworkScoreService;)V
-PLcom/android/server/-$$Lambda$NetworkScoreService$vwytA23Qz3U83FJaKiA52aJ1mts;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/-$$Lambda$NetworkScoreService$vwytA23Qz3U83FJaKiA52aJ1mts;->getPackages(I)[Ljava/lang/String;
 HSPLcom/android/server/-$$Lambda$PackageWatchdog$07YAng9lcuyRJuBYy9Jk3p2pWVY;-><init>(Lcom/android/server/PackageWatchdog;)V
-PLcom/android/server/-$$Lambda$PackageWatchdog$07YAng9lcuyRJuBYy9Jk3p2pWVY;->run()V
+HSPLcom/android/server/-$$Lambda$PackageWatchdog$07YAng9lcuyRJuBYy9Jk3p2pWVY;->run()V
 HSPLcom/android/server/-$$Lambda$PackageWatchdog$9whbrgN2UsbVDUUSdkrctYqoh5M;-><init>(Lcom/android/server/PackageWatchdog;)V
 PLcom/android/server/-$$Lambda$PackageWatchdog$9whbrgN2UsbVDUUSdkrctYqoh5M;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/-$$Lambda$PackageWatchdog$CQuOnXthwwBaxcS5WoAlJJAz8Tk;-><init>(Lcom/android/server/PackageWatchdog;)V
-PLcom/android/server/-$$Lambda$PackageWatchdog$CQuOnXthwwBaxcS5WoAlJJAz8Tk;->run()V
+HSPLcom/android/server/-$$Lambda$PackageWatchdog$CQuOnXthwwBaxcS5WoAlJJAz8Tk;->run()V
 HSPLcom/android/server/-$$Lambda$PackageWatchdog$Q0WI2EJpRFO1jF_7_YDaj1eGHas;-><init>(Lcom/android/server/PackageWatchdog;)V
 HSPLcom/android/server/-$$Lambda$PackageWatchdog$Q0WI2EJpRFO1jF_7_YDaj1eGHas;->run()V
-PLcom/android/server/-$$Lambda$PackageWatchdog$hFdPWF73rahpzi1hJ-d9hNfUNrY;-><init>(Lcom/android/server/PackageWatchdog;ILjava/util/List;)V
-PLcom/android/server/-$$Lambda$PackageWatchdog$hFdPWF73rahpzi1hJ-d9hNfUNrY;->run()V
+PLcom/android/server/-$$Lambda$PackageWatchdog$VAW1s9zLN90OWS2gosDw9xdVjr8;-><init>(Lcom/android/server/PackageWatchdog;)V
+PLcom/android/server/-$$Lambda$PackageWatchdog$VAW1s9zLN90OWS2gosDw9xdVjr8;->run()V
+HPLcom/android/server/-$$Lambda$PackageWatchdog$hFdPWF73rahpzi1hJ-d9hNfUNrY;-><init>(Lcom/android/server/PackageWatchdog;ILjava/util/List;)V
+HPLcom/android/server/-$$Lambda$PackageWatchdog$hFdPWF73rahpzi1hJ-d9hNfUNrY;->run()V
+PLcom/android/server/-$$Lambda$PackageWatchdog$ib8X74W4PjX4xo1uv-QgOpcuf4o;-><init>(Lcom/android/server/PackageWatchdog;)V
+PLcom/android/server/-$$Lambda$PackageWatchdog$ib8X74W4PjX4xo1uv-QgOpcuf4o;->run()V
 HSPLcom/android/server/-$$Lambda$PackageWatchdog$nOS9OaZO4hPsSe0I8skPT1UgQoo;-><init>(Lcom/android/server/PackageWatchdog;)V
+PLcom/android/server/-$$Lambda$PackageWatchdog$nOS9OaZO4hPsSe0I8skPT1UgQoo;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/-$$Lambda$PackageWatchdog$oAoA92I4TtJeqztFu3XBOLEs7gE;-><init>(Lcom/android/server/PackageWatchdog;)V
 HSPLcom/android/server/-$$Lambda$PackageWatchdog$uFI2R7Ip9Bh1wQPJqJ5H5A0soVU;-><init>(Lcom/android/server/PackageWatchdog;)V
-PLcom/android/server/-$$Lambda$PackageWatchdog$uFI2R7Ip9Bh1wQPJqJ5H5A0soVU;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/-$$Lambda$PackageWatchdog$uFI2R7Ip9Bh1wQPJqJ5H5A0soVU;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/-$$Lambda$PackageWatchdog$vRKcIrucEj03dz6ypRVINZtns1s;-><init>(Lcom/android/server/PackageWatchdog;)V
+PLcom/android/server/-$$Lambda$PackageWatchdog$vRKcIrucEj03dz6ypRVINZtns1s;->run()V
 HSPLcom/android/server/-$$Lambda$PersistentDataBlockService$EZl9OYaT2eNL7kfSr2nKUBjxidk;-><init>(Lcom/android/server/PersistentDataBlockService;)V
 HSPLcom/android/server/-$$Lambda$PersistentDataBlockService$EZl9OYaT2eNL7kfSr2nKUBjxidk;->run()V
 HSPLcom/android/server/-$$Lambda$PinnerService$3$3Ta6TX4Jq9YbpUYE5Y0r8Xt8rBw;-><clinit>()V
@@ -638,19 +900,40 @@
 HSPLcom/android/server/-$$Lambda$QTLvklqCTz22VSzZPEWJs-o0bv4;-><clinit>()V
 HSPLcom/android/server/-$$Lambda$QTLvklqCTz22VSzZPEWJs-o0bv4;-><init>()V
 PLcom/android/server/-$$Lambda$QTLvklqCTz22VSzZPEWJs-o0bv4;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/-$$Lambda$RescueParty$M16YDzk6heHIMmIiCwHVSe9Y_o8;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/-$$Lambda$RescueParty$M16YDzk6heHIMmIiCwHVSe9Y_o8;->onResult(Landroid/os/Bundle;)V
 HSPLcom/android/server/-$$Lambda$ServiceWatcher$IP3HV4ye72eH3YxzGb9dMfcGWPE;-><init>(Lcom/android/server/ServiceWatcher;)V
 HSPLcom/android/server/-$$Lambda$ServiceWatcher$IP3HV4ye72eH3YxzGb9dMfcGWPE;->run()V
-HPLcom/android/server/-$$Lambda$ServiceWatcher$gVk2fFkq2-aamIua2kIpukAFtf8;-><init>(Lcom/android/server/ServiceWatcher;Lcom/android/server/ServiceWatcher$BinderRunner;)V
-PLcom/android/server/-$$Lambda$ServiceWatcher$gVk2fFkq2-aamIua2kIpukAFtf8;->run()V
+PLcom/android/server/-$$Lambda$ServiceWatcher$IkMTqqToHuGjKO5Yss6Ka6-7ato;-><init>(Lcom/android/server/ServiceWatcher;)V
+PLcom/android/server/-$$Lambda$ServiceWatcher$IkMTqqToHuGjKO5Yss6Ka6-7ato;->binderDied()V
+HSPLcom/android/server/-$$Lambda$ServiceWatcher$K66HPJls7ga1t3t859fKACfAgZc;-><init>(Lcom/android/server/ServiceWatcher;)V
+HSPLcom/android/server/-$$Lambda$ServiceWatcher$K66HPJls7ga1t3t859fKACfAgZc;->run()V
+HPLcom/android/server/-$$Lambda$ServiceWatcher$b1z9OeL-1VpQ_8p47qz7nMNUpsE;-><init>(Lcom/android/server/ServiceWatcher;Ljava/lang/Object;Lcom/android/server/ServiceWatcher$BlockingBinderRunner;)V
+PLcom/android/server/-$$Lambda$ServiceWatcher$b1z9OeL-1VpQ_8p47qz7nMNUpsE;->call()Ljava/lang/Object;
+HSPLcom/android/server/-$$Lambda$ServiceWatcher$gVk2fFkq2-aamIua2kIpukAFtf8;-><init>(Lcom/android/server/ServiceWatcher;Lcom/android/server/ServiceWatcher$BinderRunner;)V
+HSPLcom/android/server/-$$Lambda$ServiceWatcher$gVk2fFkq2-aamIua2kIpukAFtf8;->run()V
+HPLcom/android/server/-$$Lambda$ServiceWatcher$kpBQqFYVia3SVpOH46tF4fNydw0;-><init>(Lcom/android/server/ServiceWatcher;Lcom/android/server/ServiceWatcher$BinderRunner;)V
+HPLcom/android/server/-$$Lambda$ServiceWatcher$kpBQqFYVia3SVpOH46tF4fNydw0;->run()V
 PLcom/android/server/-$$Lambda$ServiceWatcher$uCZpuTwrOz-CS9PQS2NY1ZXaU8U;-><init>(Lcom/android/server/ServiceWatcher;Landroid/content/ComponentName;)V
 PLcom/android/server/-$$Lambda$ServiceWatcher$uCZpuTwrOz-CS9PQS2NY1ZXaU8U;->run()V
-PLcom/android/server/-$$Lambda$ServiceWatcher$uru7j1zD-GiN8rndFZ3KWaTrxYo;-><init>(Lcom/android/server/ServiceWatcher;Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/server/-$$Lambda$ServiceWatcher$uru7j1zD-GiN8rndFZ3KWaTrxYo;->run()V
+HSPLcom/android/server/-$$Lambda$ServiceWatcher$uru7j1zD-GiN8rndFZ3KWaTrxYo;-><init>(Lcom/android/server/ServiceWatcher;Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HSPLcom/android/server/-$$Lambda$ServiceWatcher$uru7j1zD-GiN8rndFZ3KWaTrxYo;->run()V
+PLcom/android/server/-$$Lambda$ServiceWatcher$x-WpgD2R0YjDE53WHPzWKGSSc4I;-><init>(Lcom/android/server/ServiceWatcher;Ljava/lang/Object;Lcom/android/server/ServiceWatcher$BlockingBinderRunner;)V
+PLcom/android/server/-$$Lambda$ServiceWatcher$x-WpgD2R0YjDE53WHPzWKGSSc4I;->call()Ljava/lang/Object;
+PLcom/android/server/-$$Lambda$StorageManagerService$iQEwQayMYzs9Ew4L6Gk7kRIO9wM;-><init>(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/-$$Lambda$StorageManagerService$iQEwQayMYzs9Ew4L6Gk7kRIO9wM;->run()V
 HSPLcom/android/server/-$$Lambda$StorageManagerService$js3bHvdd2Mf8gztNxvL27JoT034;-><init>(Lcom/android/server/StorageManagerService;)V
 PLcom/android/server/-$$Lambda$StorageManagerService$js3bHvdd2Mf8gztNxvL27JoT034;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
+HSPLcom/android/server/-$$Lambda$SystemServer$5qLn3pqt3aoGcHIU3L45PwnW0vI;-><init>(Lcom/android/server/SystemServer;Lcom/android/server/utils/TimingsTraceAndSlog;Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;ZLcom/android/server/ConnectivityService;Lcom/android/server/NetworkManagementService;Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/IpSecService;Lcom/android/server/net/NetworkStatsService;Lcom/android/server/CountryDetectorService;Lcom/android/server/NetworkTimeUpdateService;Lcom/android/server/input/InputManagerService;Lcom/android/server/TelephonyRegistry;Lcom/android/server/media/MediaRouterService;Lcom/android/server/MmsServiceBroker;)V
+HSPLcom/android/server/-$$Lambda$SystemServer$5qLn3pqt3aoGcHIU3L45PwnW0vI;->run()V
+HSPLcom/android/server/-$$Lambda$SystemServer$72PvntN28skIthlRYR9w5EhsdX8;-><init>(Lcom/android/server/SystemServer;)V
+HSPLcom/android/server/-$$Lambda$SystemServer$72PvntN28skIthlRYR9w5EhsdX8;->run()V
 HSPLcom/android/server/-$$Lambda$SystemServer$NlJmG18aPrQduhRqASIdcn7G0z8;-><clinit>()V
 HSPLcom/android/server/-$$Lambda$SystemServer$NlJmG18aPrQduhRqASIdcn7G0z8;-><init>()V
 HSPLcom/android/server/-$$Lambda$SystemServer$NlJmG18aPrQduhRqASIdcn7G0z8;->run()V
+HSPLcom/android/server/-$$Lambda$SystemServer$RfxLu1RawR4j0S9lEwPzwtODxaE;-><clinit>()V
+HSPLcom/android/server/-$$Lambda$SystemServer$RfxLu1RawR4j0S9lEwPzwtODxaE;-><init>()V
+HSPLcom/android/server/-$$Lambda$SystemServer$RfxLu1RawR4j0S9lEwPzwtODxaE;->onModuleServiceConnected(Landroid/os/IBinder;)V
 HSPLcom/android/server/-$$Lambda$SystemServer$TEbRm_G0ejorrajBEvke8XmHuQU;-><init>(Lcom/android/server/SystemServer;Lcom/android/server/utils/TimingsTraceAndSlog;Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;ZLcom/android/server/ConnectivityService;Lcom/android/server/NetworkManagementService;Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/IpSecService;Lcom/android/server/net/NetworkStatsService;Lcom/android/server/CountryDetectorService;Lcom/android/server/NetworkTimeUpdateService;Lcom/android/server/input/InputManagerService;Lcom/android/server/TelephonyRegistry;Lcom/android/server/media/MediaRouterService;Lcom/android/server/MmsServiceBroker;)V
 HSPLcom/android/server/-$$Lambda$SystemServer$TEbRm_G0ejorrajBEvke8XmHuQU;->run()V
 HSPLcom/android/server/-$$Lambda$SystemServer$UyrPns7R814g-ZEylCbDKhe8It4;-><clinit>()V
@@ -661,89 +944,145 @@
 HSPLcom/android/server/-$$Lambda$SystemServer$VBGb9VpEls6bUcVBPwYLtX7qDTs;->run()V
 HSPLcom/android/server/-$$Lambda$SystemServer$Y1gEdKr_Hb7K7cbTDAo_WOJ-SYI;-><init>(Lcom/android/server/SystemServer;)V
 HSPLcom/android/server/-$$Lambda$SystemServer$Y1gEdKr_Hb7K7cbTDAo_WOJ-SYI;->run()V
+HSPLcom/android/server/-$$Lambda$SystemServer$c50amMOcae1K0NdkHHoWNGvSMJQ;-><init>(Lcom/android/server/SystemServer;Lcom/android/server/utils/TimingsTraceAndSlog;Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;ZLcom/android/server/ConnectivityService;Lcom/android/server/NetworkManagementService;Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/IpSecService;Lcom/android/server/net/NetworkStatsService;Lcom/android/server/CountryDetectorService;Lcom/android/server/NetworkTimeUpdateService;Lcom/android/server/input/InputManagerService;Lcom/android/server/TelephonyRegistry;Lcom/android/server/media/MediaRouterService;Lcom/android/server/MmsServiceBroker;)V
+HSPLcom/android/server/-$$Lambda$SystemServer$c50amMOcae1K0NdkHHoWNGvSMJQ;->run()V
+PLcom/android/server/-$$Lambda$SystemServer$zn6ji6g70a_qrK5QZEPCaarZSik;-><clinit>()V
+PLcom/android/server/-$$Lambda$SystemServer$zn6ji6g70a_qrK5QZEPCaarZSik;-><init>()V
+PLcom/android/server/-$$Lambda$SystemServer$zn6ji6g70a_qrK5QZEPCaarZSik;->onModuleServiceConnected(Landroid/os/IBinder;)V
 HSPLcom/android/server/-$$Lambda$SystemServerInitThreadPool$o2_GLo0lnkotYmRdTfg66UETEwQ;-><init>(Lcom/android/server/SystemServerInitThreadPool;Ljava/lang/String;Ljava/lang/Runnable;)V
 HSPLcom/android/server/-$$Lambda$SystemServerInitThreadPool$o2_GLo0lnkotYmRdTfg66UETEwQ;->run()V
+PLcom/android/server/-$$Lambda$TelephonyRegistry$1bce8MzlZGgWfCoSiX5udUvFDQ0;-><init>(Lcom/android/server/TelephonyRegistry;)V
+PLcom/android/server/-$$Lambda$TelephonyRegistry$1bce8MzlZGgWfCoSiX5udUvFDQ0;->test(I)Z
+HPLcom/android/server/-$$Lambda$TelephonyRegistry$ANYH01Imb6dMua6cgKvMEl4kD3I;-><init>(Lcom/android/server/TelephonyRegistry;Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)V
+HPLcom/android/server/-$$Lambda$TelephonyRegistry$ANYH01Imb6dMua6cgKvMEl4kD3I;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/-$$Lambda$TelephonyRegistry$KwKYEFoKdijV5jZbDqX1IUV4CzY;-><init>(Lcom/android/server/TelephonyRegistry;Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)V
+HPLcom/android/server/-$$Lambda$TelephonyRegistry$KwKYEFoKdijV5jZbDqX1IUV4CzY;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/-$$Lambda$UiModeManagerService$10$s3H4QPM2YRtAd9qa2Ja54k7yJO0;-><init>(Ljava/lang/String;)V
+PLcom/android/server/-$$Lambda$UiModeManagerService$10$s3H4QPM2YRtAd9qa2Ja54k7yJO0;->test(Ljava/lang/Object;)Z
+PLcom/android/server/-$$Lambda$UiModeManagerService$9$ytrifY2iawCLCBtYLrmL70q1UhI;-><init>(Ljava/lang/String;)V
+PLcom/android/server/-$$Lambda$UiModeManagerService$9$ytrifY2iawCLCBtYLrmL70q1UhI;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/-$$Lambda$UiModeManagerService$AwUHdh7CYhroUMaGm35a4uvZcnY;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/-$$Lambda$UiModeManagerService$AwUHdh7CYhroUMaGm35a4uvZcnY;->onAlarm()V
+HSPLcom/android/server/-$$Lambda$UiModeManagerService$bGpxq9ta5GBYtiUBAOy4iNtThus;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/-$$Lambda$UiModeManagerService$bGpxq9ta5GBYtiUBAOy4iNtThus;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/-$$Lambda$UiModeManagerService$vYS4_RzjAavNRF50rrGN0tXI5JM;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/-$$Lambda$UiModeManagerService$vYS4_RzjAavNRF50rrGN0tXI5JM;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/-$$Lambda$UiModeManagerService$vuGxqIEDBezs_Xyz-NAh0Bonp5g;-><init>(Lcom/android/server/UiModeManagerService;)V
 HSPLcom/android/server/-$$Lambda$UiModeManagerService$vuGxqIEDBezs_Xyz-NAh0Bonp5g;->run()V
+HSPLcom/android/server/-$$Lambda$UiModeManagerService$wttJpnJnECgc-2ud4hu2A5dSOPg;-><init>(Lcom/android/server/UiModeManagerService;)V
+HSPLcom/android/server/-$$Lambda$UiModeManagerService$wttJpnJnECgc-2ud4hu2A5dSOPg;->run()V
 HSPLcom/android/server/-$$Lambda$YWiwiKm_Qgqb55C6tTuq_n2JzdY;-><clinit>()V
 HSPLcom/android/server/-$$Lambda$YWiwiKm_Qgqb55C6tTuq_n2JzdY;-><init>()V
 HSPLcom/android/server/-$$Lambda$YWiwiKm_Qgqb55C6tTuq_n2JzdY;->run()V
-PLcom/android/server/-$$Lambda$hu439-4T6QBT8QyZnspMtXqICWs;-><clinit>()V
-PLcom/android/server/-$$Lambda$hu439-4T6QBT8QyZnspMtXqICWs;-><init>()V
-PLcom/android/server/-$$Lambda$hu439-4T6QBT8QyZnspMtXqICWs;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/-$$Lambda$htemI6hNv3kq1UVGrXpRlPIVXRU;-><clinit>()V
+PLcom/android/server/-$$Lambda$htemI6hNv3kq1UVGrXpRlPIVXRU;-><init>()V
+PLcom/android/server/-$$Lambda$htemI6hNv3kq1UVGrXpRlPIVXRU;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/-$$Lambda$hu439-4T6QBT8QyZnspMtXqICWs;-><clinit>()V
+HSPLcom/android/server/-$$Lambda$hu439-4T6QBT8QyZnspMtXqICWs;-><init>()V
+HPLcom/android/server/-$$Lambda$hu439-4T6QBT8QyZnspMtXqICWs;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/-$$Lambda$jMDA_C1bkT6orVkYqrEdgiGSDI0;-><init>(Lcom/android/server/GnssManagerService;)V
-PLcom/android/server/-$$Lambda$qoNbXUvSu3yuTPVXPUfZW_HDrTQ;-><clinit>()V
-PLcom/android/server/-$$Lambda$qoNbXUvSu3yuTPVXPUfZW_HDrTQ;-><init>()V
+PLcom/android/server/-$$Lambda$jMDA_C1bkT6orVkYqrEdgiGSDI0;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/-$$Lambda$qoNbXUvSu3yuTPVXPUfZW_HDrTQ;-><clinit>()V
+HSPLcom/android/server/-$$Lambda$qoNbXUvSu3yuTPVXPUfZW_HDrTQ;-><init>()V
 PLcom/android/server/-$$Lambda$qoNbXUvSu3yuTPVXPUfZW_HDrTQ;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/-$$Lambda$u6uWKONNslLDvDcMfFfe2etQmKg;-><clinit>()V
 HSPLcom/android/server/-$$Lambda$u6uWKONNslLDvDcMfFfe2etQmKg;-><init>()V
+HPLcom/android/server/-$$Lambda$u6uWKONNslLDvDcMfFfe2etQmKg;->uptimeMillis()J
 HSPLcom/android/server/AlarmManagerService$1;-><init>(Lcom/android/server/AlarmManagerService;)V
 HPLcom/android/server/AlarmManagerService$1;->compare(Lcom/android/server/AlarmManagerService$Alarm;Lcom/android/server/AlarmManagerService$Alarm;)I
 HPLcom/android/server/AlarmManagerService$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/AlarmManagerService$2;-><init>(Lcom/android/server/AlarmManagerService;)V
-PLcom/android/server/AlarmManagerService$2;->doAlarm(Landroid/app/IAlarmCompleteListener;)V
-PLcom/android/server/AlarmManagerService$2;->lambda$doAlarm$0$AlarmManagerService$2(Landroid/app/IAlarmCompleteListener;)V
+HPLcom/android/server/AlarmManagerService$2;->binderDied(Landroid/os/IBinder;)V
+HPLcom/android/server/AlarmManagerService$2;->doAlarm(Landroid/app/IAlarmCompleteListener;)V
+HPLcom/android/server/AlarmManagerService$2;->lambda$doAlarm$0$AlarmManagerService$2(Landroid/app/IAlarmCompleteListener;)V
 HSPLcom/android/server/AlarmManagerService$3;-><init>(Lcom/android/server/AlarmManagerService;)V
 HSPLcom/android/server/AlarmManagerService$3;->currentNetworkTimeMillis()J
+HPLcom/android/server/AlarmManagerService$3;->doAlarm(Landroid/app/IAlarmCompleteListener;)V
 PLcom/android/server/AlarmManagerService$3;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/AlarmManagerService$3;->getNextAlarmClock(I)Landroid/app/AlarmManager$AlarmClockInfo;
 PLcom/android/server/AlarmManagerService$3;->getNextWakeFromIdleTime()J
+HPLcom/android/server/AlarmManagerService$3;->lambda$doAlarm$0$AlarmManagerService$3(Landroid/app/IAlarmCompleteListener;)V
 HSPLcom/android/server/AlarmManagerService$3;->remove(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
 HSPLcom/android/server/AlarmManagerService$3;->set(Ljava/lang/String;IJJJILandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;Landroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;)V
-PLcom/android/server/AlarmManagerService$4;-><init>(Lcom/android/server/AlarmManagerService;)V
-PLcom/android/server/AlarmManagerService$4;->compare(Lcom/android/server/AlarmManagerService$FilterStats;Lcom/android/server/AlarmManagerService$FilterStats;)I
-PLcom/android/server/AlarmManagerService$4;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/AlarmManagerService$3;->setTime(J)Z
+PLcom/android/server/AlarmManagerService$3;->setTimeZone(Ljava/lang/String;)V
+HSPLcom/android/server/AlarmManagerService$4;-><init>(Lcom/android/server/AlarmManagerService;)V
+HPLcom/android/server/AlarmManagerService$4;->compare(Lcom/android/server/AlarmManagerService$FilterStats;Lcom/android/server/AlarmManagerService$FilterStats;)I
+HPLcom/android/server/AlarmManagerService$4;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLcom/android/server/AlarmManagerService$4;->currentNetworkTimeMillis()J
+PLcom/android/server/AlarmManagerService$4;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/AlarmManagerService$4;->getNextAlarmClock(I)Landroid/app/AlarmManager$AlarmClockInfo;
+PLcom/android/server/AlarmManagerService$4;->getNextWakeFromIdleTime()J
+HSPLcom/android/server/AlarmManagerService$4;->remove(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
+HSPLcom/android/server/AlarmManagerService$4;->set(Ljava/lang/String;IJJJILandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;Landroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;)V
+PLcom/android/server/AlarmManagerService$4;->setTime(J)Z
+PLcom/android/server/AlarmManagerService$4;->setTimeZone(Ljava/lang/String;)V
 PLcom/android/server/AlarmManagerService$5;-><init>(Lcom/android/server/AlarmManagerService;)V
-PLcom/android/server/AlarmManagerService$5;->compare(Lcom/android/server/AlarmManagerService$FilterStats;Lcom/android/server/AlarmManagerService$FilterStats;)I
-PLcom/android/server/AlarmManagerService$5;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/AlarmManagerService$5;->compare(Lcom/android/server/AlarmManagerService$FilterStats;Lcom/android/server/AlarmManagerService$FilterStats;)I
+HPLcom/android/server/AlarmManagerService$5;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/AlarmManagerService$6;-><init>(Lcom/android/server/AlarmManagerService;)V
+HPLcom/android/server/AlarmManagerService$6;->compare(Lcom/android/server/AlarmManagerService$FilterStats;Lcom/android/server/AlarmManagerService$FilterStats;)I
+HPLcom/android/server/AlarmManagerService$6;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/AlarmManagerService$6;->onUidForeground(IZ)V
 HSPLcom/android/server/AlarmManagerService$6;->unblockAlarmsForUid(I)V
+PLcom/android/server/AlarmManagerService$6;->unblockAllUnrestrictedAlarms()V
+HSPLcom/android/server/AlarmManagerService$7;-><init>(Lcom/android/server/AlarmManagerService;)V
+HSPLcom/android/server/AlarmManagerService$7;->onUidForeground(IZ)V
+HSPLcom/android/server/AlarmManagerService$7;->unblockAlarmsForUid(I)V
+HSPLcom/android/server/AlarmManagerService$7;->unblockAllUnrestrictedAlarms()V
 HSPLcom/android/server/AlarmManagerService$Alarm;-><init>(IJJJJJLandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;Landroid/os/WorkSource;ILandroid/app/AlarmManager$AlarmClockInfo;ILjava/lang/String;)V
-PLcom/android/server/AlarmManagerService$Alarm;->dump(Ljava/io/PrintWriter;Ljava/lang/String;JJLjava/text/SimpleDateFormat;)V
+HPLcom/android/server/AlarmManagerService$Alarm;->dump(Ljava/io/PrintWriter;Ljava/lang/String;JJLjava/text/SimpleDateFormat;)V
 HPLcom/android/server/AlarmManagerService$Alarm;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JJJ)V
 HSPLcom/android/server/AlarmManagerService$Alarm;->makeTag(Landroid/app/PendingIntent;Ljava/lang/String;I)Ljava/lang/String;
 HSPLcom/android/server/AlarmManagerService$Alarm;->matches(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)Z
-PLcom/android/server/AlarmManagerService$Alarm;->toString()Ljava/lang/String;
+HPLcom/android/server/AlarmManagerService$Alarm;->matches(Ljava/lang/String;)Z
+HPLcom/android/server/AlarmManagerService$Alarm;->toString()Ljava/lang/String;
 HSPLcom/android/server/AlarmManagerService$AlarmHandler;-><init>(Lcom/android/server/AlarmManagerService;)V
-HPLcom/android/server/AlarmManagerService$AlarmHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/AlarmManagerService$AlarmHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/AlarmManagerService$AlarmThread;-><init>(Lcom/android/server/AlarmManagerService;)V
 HSPLcom/android/server/AlarmManagerService$AlarmThread;->run()V
 HSPLcom/android/server/AlarmManagerService$AppStandbyTracker;-><init>(Lcom/android/server/AlarmManagerService;)V
 HSPLcom/android/server/AlarmManagerService$AppStandbyTracker;-><init>(Lcom/android/server/AlarmManagerService;Lcom/android/server/AlarmManagerService$1;)V
-PLcom/android/server/AlarmManagerService$AppStandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
+HSPLcom/android/server/AlarmManagerService$AppStandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
 HSPLcom/android/server/AlarmManagerService$AppWakeupHistory;-><init>(J)V
-PLcom/android/server/AlarmManagerService$AppWakeupHistory;->dump(Lcom/android/internal/util/IndentingPrintWriter;J)V
+HPLcom/android/server/AlarmManagerService$AppWakeupHistory;->dump(Lcom/android/internal/util/IndentingPrintWriter;J)V
 PLcom/android/server/AlarmManagerService$AppWakeupHistory;->dump(Ljava/io/PrintWriter;Ljava/lang/String;J)V
 HPLcom/android/server/AlarmManagerService$AppWakeupHistory;->getLastWakeupForPackage(Ljava/lang/String;II)J
-PLcom/android/server/AlarmManagerService$AppWakeupHistory;->getTotalWakeupsInWindow(Ljava/lang/String;I)I
+HPLcom/android/server/AlarmManagerService$AppWakeupHistory;->getNthLastWakeupForPackage(Ljava/lang/String;II)J
+HPLcom/android/server/AlarmManagerService$AppWakeupHistory;->getTotalWakeupsInWindow(Ljava/lang/String;I)I
 HPLcom/android/server/AlarmManagerService$AppWakeupHistory;->recordAlarmForPackage(Ljava/lang/String;IJ)V
-PLcom/android/server/AlarmManagerService$AppWakeupHistory;->snapToWindow(Landroid/util/LongArrayQueue;)V
+PLcom/android/server/AlarmManagerService$AppWakeupHistory;->removeForPackage(Ljava/lang/String;I)V
+PLcom/android/server/AlarmManagerService$AppWakeupHistory;->removeForUser(I)V
+HPLcom/android/server/AlarmManagerService$AppWakeupHistory;->snapToWindow(Landroid/util/LongArrayQueue;)V
 HSPLcom/android/server/AlarmManagerService$Batch;-><init>(Lcom/android/server/AlarmManagerService;Lcom/android/server/AlarmManagerService$Alarm;)V
 HSPLcom/android/server/AlarmManagerService$Batch;->add(Lcom/android/server/AlarmManagerService$Alarm;)Z
 HSPLcom/android/server/AlarmManagerService$Batch;->canHold(JJ)Z
 HPLcom/android/server/AlarmManagerService$Batch;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JJJ)V
-HPLcom/android/server/AlarmManagerService$Batch;->get(I)Lcom/android/server/AlarmManagerService$Alarm;
+HSPLcom/android/server/AlarmManagerService$Batch;->get(I)Lcom/android/server/AlarmManagerService$Alarm;
+HPLcom/android/server/AlarmManagerService$Batch;->hasPackage(Ljava/lang/String;)Z
 HSPLcom/android/server/AlarmManagerService$Batch;->hasWakeups()Z
+PLcom/android/server/AlarmManagerService$Batch;->lambda$remove$0(Lcom/android/server/AlarmManagerService$Alarm;Lcom/android/server/AlarmManagerService$Alarm;)Z
+PLcom/android/server/AlarmManagerService$Batch;->remove(Lcom/android/server/AlarmManagerService$Alarm;)Z
 HSPLcom/android/server/AlarmManagerService$Batch;->remove(Ljava/util/function/Predicate;Z)Z
 HSPLcom/android/server/AlarmManagerService$Batch;->size()I
-PLcom/android/server/AlarmManagerService$Batch;->toString()Ljava/lang/String;
+HPLcom/android/server/AlarmManagerService$Batch;->toString()Ljava/lang/String;
 HSPLcom/android/server/AlarmManagerService$BatchTimeOrder;-><init>()V
 HSPLcom/android/server/AlarmManagerService$BatchTimeOrder;->compare(Lcom/android/server/AlarmManagerService$Batch;Lcom/android/server/AlarmManagerService$Batch;)I
 HSPLcom/android/server/AlarmManagerService$BatchTimeOrder;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/AlarmManagerService$BroadcastStats;-><init>(ILjava/lang/String;)V
 HPLcom/android/server/AlarmManagerService$BroadcastStats;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/AlarmManagerService$BroadcastStats;->toString()Ljava/lang/String;
 HSPLcom/android/server/AlarmManagerService$ChargingReceiver;-><init>(Lcom/android/server/AlarmManagerService;)V
-PLcom/android/server/AlarmManagerService$ChargingReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/AlarmManagerService$ChargingReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/AlarmManagerService$ClockReceiver;-><init>(Lcom/android/server/AlarmManagerService;)V
 PLcom/android/server/AlarmManagerService$ClockReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/AlarmManagerService$ClockReceiver;->scheduleDateChangedEvent()V
 HSPLcom/android/server/AlarmManagerService$ClockReceiver;->scheduleTimeTickEvent()V
 HSPLcom/android/server/AlarmManagerService$Constants;-><init>(Lcom/android/server/AlarmManagerService;Landroid/os/Handler;)V
-PLcom/android/server/AlarmManagerService$Constants;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/AlarmManagerService$Constants;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/AlarmManagerService$Constants;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/AlarmManagerService$Constants;->dumpProto(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/AlarmManagerService$Constants;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/AlarmManagerService$Constants;->start(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/AlarmManagerService$Constants;->updateAllowWhileIdleWhitelistDurationLocked()V
 HSPLcom/android/server/AlarmManagerService$Constants;->updateConstants()V
@@ -756,10 +1095,13 @@
 HPLcom/android/server/AlarmManagerService$DeliveryTracker;->removeLocked(Landroid/os/IBinder;)Lcom/android/server/AlarmManagerService$InFlight;
 HPLcom/android/server/AlarmManagerService$DeliveryTracker;->updateStatsLocked(Lcom/android/server/AlarmManagerService$InFlight;)V
 HPLcom/android/server/AlarmManagerService$DeliveryTracker;->updateTrackingLocked(Lcom/android/server/AlarmManagerService$InFlight;)V
-PLcom/android/server/AlarmManagerService$FilterStats;-><init>(Lcom/android/server/AlarmManagerService$BroadcastStats;Ljava/lang/String;)V
+HPLcom/android/server/AlarmManagerService$FilterStats;-><init>(Lcom/android/server/AlarmManagerService$BroadcastStats;Ljava/lang/String;)V
 HPLcom/android/server/AlarmManagerService$FilterStats;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/AlarmManagerService$FilterStats;->toString()Ljava/lang/String;
 HPLcom/android/server/AlarmManagerService$InFlight;-><init>(Lcom/android/server/AlarmManagerService;Lcom/android/server/AlarmManagerService$Alarm;J)V
+PLcom/android/server/AlarmManagerService$InFlight;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/AlarmManagerService$InFlight;->isBroadcast()Z
+HPLcom/android/server/AlarmManagerService$InFlight;->toString()Ljava/lang/String;
 HSPLcom/android/server/AlarmManagerService$IncreasingTimeOrder;-><init>()V
 HSPLcom/android/server/AlarmManagerService$IncreasingTimeOrder;->compare(Lcom/android/server/AlarmManagerService$Alarm;Lcom/android/server/AlarmManagerService$Alarm;)I
 HSPLcom/android/server/AlarmManagerService$IncreasingTimeOrder;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
@@ -773,105 +1115,132 @@
 HSPLcom/android/server/AlarmManagerService$Injector;->init()V
 HSPLcom/android/server/AlarmManagerService$Injector;->isAlarmDriverPresent()Z
 HSPLcom/android/server/AlarmManagerService$Injector;->setAlarm(IJ)V
+HSPLcom/android/server/AlarmManagerService$Injector;->setKernelTime(J)V
 HSPLcom/android/server/AlarmManagerService$Injector;->setKernelTimezone(I)V
 HSPLcom/android/server/AlarmManagerService$Injector;->waitForAlarm()I
 HSPLcom/android/server/AlarmManagerService$InteractiveStateReceiver;-><init>(Lcom/android/server/AlarmManagerService;)V
-PLcom/android/server/AlarmManagerService$InteractiveStateReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/AlarmManagerService$InteractiveStateReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/AlarmManagerService$LocalService;-><init>(Lcom/android/server/AlarmManagerService;)V
 HSPLcom/android/server/AlarmManagerService$LocalService;-><init>(Lcom/android/server/AlarmManagerService;Lcom/android/server/AlarmManagerService$1;)V
-PLcom/android/server/AlarmManagerService$LocalService;->isIdling()Z
+HSPLcom/android/server/AlarmManagerService$LocalService;->isIdling()Z
 HSPLcom/android/server/AlarmManagerService$LocalService;->registerInFlightListener(Lcom/android/server/AlarmManagerInternal$InFlightListener;)V
-PLcom/android/server/AlarmManagerService$LocalService;->remove(Landroid/app/PendingIntent;)V
+HPLcom/android/server/AlarmManagerService$LocalService;->remove(Landroid/app/PendingIntent;)V
+PLcom/android/server/AlarmManagerService$LocalService;->removeAlarmsForUid(I)V
 PLcom/android/server/AlarmManagerService$PriorityClass;-><init>(Lcom/android/server/AlarmManagerService;)V
 HSPLcom/android/server/AlarmManagerService$UidObserver;-><init>(Lcom/android/server/AlarmManagerService;)V
 HSPLcom/android/server/AlarmManagerService$UidObserver;->onUidActive(I)V
 HSPLcom/android/server/AlarmManagerService$UidObserver;->onUidGone(IZ)V
 HSPLcom/android/server/AlarmManagerService$UidObserver;->onUidIdle(IZ)V
 HSPLcom/android/server/AlarmManagerService$UninstallReceiver;-><init>(Lcom/android/server/AlarmManagerService;)V
-PLcom/android/server/AlarmManagerService$UninstallReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/AlarmManagerService$UninstallReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/AlarmManagerService;-><clinit>()V
 HSPLcom/android/server/AlarmManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/AlarmManagerService;-><init>(Landroid/content/Context;Lcom/android/server/AlarmManagerService$Injector;)V
 HSPLcom/android/server/AlarmManagerService;->access$002(Lcom/android/server/AlarmManagerService;J)J
 HSPLcom/android/server/AlarmManagerService;->access$100(Lcom/android/server/AlarmManagerService;)Lcom/android/server/AlarmManagerService$Injector;
-PLcom/android/server/AlarmManagerService;->access$1000(Lcom/android/server/AlarmManagerService;)Z
+HSPLcom/android/server/AlarmManagerService;->access$1000(Lcom/android/server/AlarmManagerService;)Z
 HSPLcom/android/server/AlarmManagerService;->access$1100(Lcom/android/server/AlarmManagerService;)Ljava/util/ArrayList;
 HPLcom/android/server/AlarmManagerService;->access$1200(Lcom/android/server/AlarmManagerService;)Lcom/android/server/AppStateTracker;
 HSPLcom/android/server/AlarmManagerService;->access$1400()J
 HSPLcom/android/server/AlarmManagerService;->access$1500(J)I
 HSPLcom/android/server/AlarmManagerService;->access$1600(JIJJ)I
+PLcom/android/server/AlarmManagerService;->access$1700(JI)J
 HSPLcom/android/server/AlarmManagerService;->access$1800(JI)I
-PLcom/android/server/AlarmManagerService;->access$200(Lcom/android/server/AlarmManagerService;II)V
-HPLcom/android/server/AlarmManagerService;->access$2102(Lcom/android/server/AlarmManagerService;J)J
-HPLcom/android/server/AlarmManagerService;->access$2202(Lcom/android/server/AlarmManagerService;J)J
-HPLcom/android/server/AlarmManagerService;->access$2300(Lcom/android/server/AlarmManagerService;)V
+HSPLcom/android/server/AlarmManagerService;->access$1900(JJ)I
+HSPLcom/android/server/AlarmManagerService;->access$200(Lcom/android/server/AlarmManagerService;II)V
+HSPLcom/android/server/AlarmManagerService;->access$2102(Lcom/android/server/AlarmManagerService;J)J
+HSPLcom/android/server/AlarmManagerService;->access$2202(Lcom/android/server/AlarmManagerService;J)J
+HSPLcom/android/server/AlarmManagerService;->access$2300(Lcom/android/server/AlarmManagerService;)V
 HPLcom/android/server/AlarmManagerService;->access$2400(Lcom/android/server/AlarmManagerService;Lcom/android/server/AlarmManagerService$Alarm;)Z
+PLcom/android/server/AlarmManagerService;->access$2500(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/AlarmManagerService;->access$2602(Lcom/android/server/AlarmManagerService;Z)Z
 HSPLcom/android/server/AlarmManagerService;->access$2702(Lcom/android/server/AlarmManagerService;J)J
-PLcom/android/server/AlarmManagerService;->access$2800(Lcom/android/server/AlarmManagerService;I)V
-PLcom/android/server/AlarmManagerService;->access$2908(Lcom/android/server/AlarmManagerService;)I
-PLcom/android/server/AlarmManagerService;->access$3008(Lcom/android/server/AlarmManagerService;)I
-PLcom/android/server/AlarmManagerService;->access$3100(Lcom/android/server/AlarmManagerService$Alarm;)I
+HPLcom/android/server/AlarmManagerService;->access$2800(Lcom/android/server/AlarmManagerService;I)V
+HPLcom/android/server/AlarmManagerService;->access$2908(Lcom/android/server/AlarmManagerService;)I
+HPLcom/android/server/AlarmManagerService;->access$3008(Lcom/android/server/AlarmManagerService;)I
+PLcom/android/server/AlarmManagerService;->access$302(Lcom/android/server/AlarmManagerService;Z)Z
+HPLcom/android/server/AlarmManagerService;->access$3100(Lcom/android/server/AlarmManagerService$Alarm;)I
 PLcom/android/server/AlarmManagerService;->access$3208(Lcom/android/server/AlarmManagerService;)I
 PLcom/android/server/AlarmManagerService;->access$3300(Lcom/android/server/AlarmManagerService;)Landroid/content/Intent;
-PLcom/android/server/AlarmManagerService;->access$3408(Lcom/android/server/AlarmManagerService;)I
-PLcom/android/server/AlarmManagerService;->access$3700(Lcom/android/server/AlarmManagerService;I)V
-PLcom/android/server/AlarmManagerService;->access$500(Lcom/android/server/AlarmManagerService;Landroid/app/PendingIntent;)Lcom/android/server/AlarmManagerService$BroadcastStats;
-PLcom/android/server/AlarmManagerService;->access$600(Lcom/android/server/AlarmManagerService;ILjava/lang/String;)Lcom/android/server/AlarmManagerService$BroadcastStats;
+HPLcom/android/server/AlarmManagerService;->access$3408(Lcom/android/server/AlarmManagerService;)I
+PLcom/android/server/AlarmManagerService;->access$3500(Lcom/android/server/AlarmManagerService;)[J
+PLcom/android/server/AlarmManagerService;->access$3600(Lcom/android/server/AlarmManagerService;)I
+PLcom/android/server/AlarmManagerService;->access$3602(Lcom/android/server/AlarmManagerService;I)I
+PLcom/android/server/AlarmManagerService;->access$3608(Lcom/android/server/AlarmManagerService;)I
+HPLcom/android/server/AlarmManagerService;->access$3700(Lcom/android/server/AlarmManagerService;I)V
+HSPLcom/android/server/AlarmManagerService;->access$402(Lcom/android/server/AlarmManagerService;J)J
+HPLcom/android/server/AlarmManagerService;->access$500(Lcom/android/server/AlarmManagerService;Landroid/app/PendingIntent;)Lcom/android/server/AlarmManagerService$BroadcastStats;
+HPLcom/android/server/AlarmManagerService;->access$600(Lcom/android/server/AlarmManagerService;ILjava/lang/String;)Lcom/android/server/AlarmManagerService$BroadcastStats;
+PLcom/android/server/AlarmManagerService;->access$702(Lcom/android/server/AlarmManagerService;J)J
 HSPLcom/android/server/AlarmManagerService;->addBatchLocked(Ljava/util/ArrayList;Lcom/android/server/AlarmManagerService$Batch;)Z
 HSPLcom/android/server/AlarmManagerService;->adjustDeliveryTimeBasedOnBucketLocked(Lcom/android/server/AlarmManagerService$Alarm;)Z
 HSPLcom/android/server/AlarmManagerService;->attemptCoalesceLocked(JJ)I
-HPLcom/android/server/AlarmManagerService;->calculateDeliveryPriorities(Ljava/util/ArrayList;)V
-HPLcom/android/server/AlarmManagerService;->checkAllowNonWakeupDelayLocked(J)Z
+HSPLcom/android/server/AlarmManagerService;->calculateDeliveryPriorities(Ljava/util/ArrayList;)V
+HSPLcom/android/server/AlarmManagerService;->checkAllowNonWakeupDelayLocked(J)Z
 HSPLcom/android/server/AlarmManagerService;->clampPositive(J)J
 HSPLcom/android/server/AlarmManagerService;->convertToElapsed(JI)J
-PLcom/android/server/AlarmManagerService;->currentNonWakeupFuzzLocked(J)J
-HPLcom/android/server/AlarmManagerService;->decrementAlarmCount(II)V
-HPLcom/android/server/AlarmManagerService;->deliverAlarmsLocked(Ljava/util/ArrayList;J)V
-PLcom/android/server/AlarmManagerService;->dumpAlarmList(Ljava/io/PrintWriter;Ljava/util/ArrayList;Ljava/lang/String;JJLjava/text/SimpleDateFormat;)V
-PLcom/android/server/AlarmManagerService;->dumpImpl(Ljava/io/PrintWriter;)V
-PLcom/android/server/AlarmManagerService;->dumpProto(Ljava/io/FileDescriptor;)V
+HPLcom/android/server/AlarmManagerService;->currentNonWakeupFuzzLocked(J)J
+HSPLcom/android/server/AlarmManagerService;->decrementAlarmCount(II)V
+HSPLcom/android/server/AlarmManagerService;->deliverAlarmsLocked(Ljava/util/ArrayList;J)V
+HPLcom/android/server/AlarmManagerService;->deliverPendingBackgroundAlarmsLocked(Ljava/util/ArrayList;J)V
+HPLcom/android/server/AlarmManagerService;->dumpAlarmList(Ljava/io/PrintWriter;Ljava/util/ArrayList;Ljava/lang/String;JJLjava/text/SimpleDateFormat;)V
+HPLcom/android/server/AlarmManagerService;->dumpImpl(Ljava/io/PrintWriter;)V
+HPLcom/android/server/AlarmManagerService;->dumpProto(Ljava/io/FileDescriptor;)V
+HSPLcom/android/server/AlarmManagerService;->findAllUnrestrictedPendingBackgroundAlarmsLockedInner(Landroid/util/SparseArray;Ljava/util/ArrayList;Ljava/util/function/Predicate;)V
 HSPLcom/android/server/AlarmManagerService;->findFirstWakeupBatchLocked()Lcom/android/server/AlarmManagerService$Batch;
 PLcom/android/server/AlarmManagerService;->formatNextAlarm(Landroid/content/Context;Landroid/app/AlarmManager$AlarmClockInfo;I)Ljava/lang/String;
-PLcom/android/server/AlarmManagerService;->getAlarmAttributionUid(Lcom/android/server/AlarmManagerService$Alarm;)I
-PLcom/android/server/AlarmManagerService;->getAlarmCount(Ljava/util/ArrayList;)I
+PLcom/android/server/AlarmManagerService;->fuzzForDuration(J)I
+HPLcom/android/server/AlarmManagerService;->getAlarmAttributionUid(Lcom/android/server/AlarmManagerService$Alarm;)I
+HSPLcom/android/server/AlarmManagerService;->getAlarmCount(Ljava/util/ArrayList;)I
 HSPLcom/android/server/AlarmManagerService;->getNextAlarmClockImpl(I)Landroid/app/AlarmManager$AlarmClockInfo;
 PLcom/android/server/AlarmManagerService;->getNextWakeFromIdleTimeImpl()J
-PLcom/android/server/AlarmManagerService;->getQuotaForBucketLocked(I)I
+HPLcom/android/server/AlarmManagerService;->getQuotaForBucketLocked(I)I
 HPLcom/android/server/AlarmManagerService;->getStatsLocked(ILjava/lang/String;)Lcom/android/server/AlarmManagerService$BroadcastStats;
-PLcom/android/server/AlarmManagerService;->getStatsLocked(Landroid/app/PendingIntent;)Lcom/android/server/AlarmManagerService$BroadcastStats;
-PLcom/android/server/AlarmManagerService;->getWhileIdleMinIntervalLocked(I)J
-HPLcom/android/server/AlarmManagerService;->haveAlarmsTimeTickAlarm(Ljava/util/ArrayList;)Z
-PLcom/android/server/AlarmManagerService;->haveBatchesTimeTickAlarm(Ljava/util/ArrayList;)Z
+HPLcom/android/server/AlarmManagerService;->getStatsLocked(Landroid/app/PendingIntent;)Lcom/android/server/AlarmManagerService$BroadcastStats;
+HPLcom/android/server/AlarmManagerService;->getWhileIdleMinIntervalLocked(I)J
+HSPLcom/android/server/AlarmManagerService;->haveAlarmsTimeTickAlarm(Ljava/util/ArrayList;)Z
+HSPLcom/android/server/AlarmManagerService;->haveBatchesTimeTickAlarm(Ljava/util/ArrayList;)Z
 HSPLcom/android/server/AlarmManagerService;->incrementAlarmCount(I)V
 HSPLcom/android/server/AlarmManagerService;->insertAndBatchAlarmLocked(Lcom/android/server/AlarmManagerService$Alarm;)V
-PLcom/android/server/AlarmManagerService;->interactiveStateChangedLocked(Z)V
+HPLcom/android/server/AlarmManagerService;->interactiveStateChangedLocked(Z)V
 HPLcom/android/server/AlarmManagerService;->isBackgroundRestricted(Lcom/android/server/AlarmManagerService$Alarm;)Z
 HSPLcom/android/server/AlarmManagerService;->isExemptFromAppStandby(Lcom/android/server/AlarmManagerService$Alarm;)Z
-PLcom/android/server/AlarmManagerService;->isIdlingImpl()Z
+HSPLcom/android/server/AlarmManagerService;->isIdlingImpl()Z
+PLcom/android/server/AlarmManagerService;->labelForType(I)Ljava/lang/String;
+HPLcom/android/server/AlarmManagerService;->lambda$interactiveStateChangedLocked$5$AlarmManagerService()V
+PLcom/android/server/AlarmManagerService;->lambda$nSJw2tKfoL3YIrKDtszoL44jcSM(Lcom/android/server/AlarmManagerService;Lcom/android/server/AlarmManagerService$Alarm;)Z
 HSPLcom/android/server/AlarmManagerService;->lambda$removeLocked$0(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;Lcom/android/server/AlarmManagerService$Alarm;)Z
+PLcom/android/server/AlarmManagerService;->lambda$removeLocked$1(ILcom/android/server/AlarmManagerService$Alarm;)Z
+PLcom/android/server/AlarmManagerService;->lambda$removeUserLocked$4(ILcom/android/server/AlarmManagerService$Alarm;)Z
+HPLcom/android/server/AlarmManagerService;->lookForPackageLocked(Ljava/lang/String;)Z
 HSPLcom/android/server/AlarmManagerService;->maxTriggerTime(JJJ)J
-PLcom/android/server/AlarmManagerService;->notifyBroadcastAlarmCompleteLocked(I)V
-PLcom/android/server/AlarmManagerService;->notifyBroadcastAlarmPendingLocked(I)V
+HPLcom/android/server/AlarmManagerService;->notifyBroadcastAlarmCompleteLocked(I)V
+HPLcom/android/server/AlarmManagerService;->notifyBroadcastAlarmPendingLocked(I)V
 HSPLcom/android/server/AlarmManagerService;->onBootPhase(I)V
 HSPLcom/android/server/AlarmManagerService;->onStart()V
-HPLcom/android/server/AlarmManagerService;->reAddAlarmLocked(Lcom/android/server/AlarmManagerService$Alarm;JZ)V
-PLcom/android/server/AlarmManagerService;->rebatchAllAlarms()V
-HPLcom/android/server/AlarmManagerService;->rebatchAllAlarmsLocked(Z)V
-PLcom/android/server/AlarmManagerService;->removeImpl(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
+HSPLcom/android/server/AlarmManagerService;->reAddAlarmLocked(Lcom/android/server/AlarmManagerService$Alarm;JZ)V
+HSPLcom/android/server/AlarmManagerService;->rebatchAllAlarms()V
+HSPLcom/android/server/AlarmManagerService;->rebatchAllAlarmsLocked(Z)V
+HSPLcom/android/server/AlarmManagerService;->removeImpl(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
+HPLcom/android/server/AlarmManagerService;->removeLocked(I)V
 HSPLcom/android/server/AlarmManagerService;->removeLocked(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
-HPLcom/android/server/AlarmManagerService;->reorderAlarmsBasedOnStandbyBuckets(Landroid/util/ArraySet;)Z
+HPLcom/android/server/AlarmManagerService;->removeUserLocked(I)V
+HSPLcom/android/server/AlarmManagerService;->reorderAlarmsBasedOnStandbyBuckets(Landroid/util/ArraySet;)Z
 HSPLcom/android/server/AlarmManagerService;->rescheduleKernelAlarmsLocked()V
 HPLcom/android/server/AlarmManagerService;->restorePendingWhileIdleAlarmsLocked()V
-PLcom/android/server/AlarmManagerService;->sendNextAlarmClockChanged()V
+HSPLcom/android/server/AlarmManagerService;->sendAllUnrestrictedPendingBackgroundAlarmsLocked()V
+HPLcom/android/server/AlarmManagerService;->sendNextAlarmClockChanged()V
 HSPLcom/android/server/AlarmManagerService;->sendPendingBackgroundAlarmsLocked(ILjava/lang/String;)V
 HSPLcom/android/server/AlarmManagerService;->setImpl(IJJJLandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;ILandroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;ILjava/lang/String;)V
 HSPLcom/android/server/AlarmManagerService;->setImplLocked(IJJJJJLandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;IZLandroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;ILjava/lang/String;)V
 HSPLcom/android/server/AlarmManagerService;->setImplLocked(Lcom/android/server/AlarmManagerService$Alarm;ZZ)V
 HSPLcom/android/server/AlarmManagerService;->setLocked(IJ)V
+PLcom/android/server/AlarmManagerService;->setTimeImpl(J)Z
 HSPLcom/android/server/AlarmManagerService;->setTimeZoneImpl(Ljava/lang/String;)V
 HPLcom/android/server/AlarmManagerService;->setWakelockWorkSource(Landroid/os/WorkSource;ILjava/lang/String;Z)V
-HPLcom/android/server/AlarmManagerService;->triggerAlarmsLocked(Ljava/util/ArrayList;J)Z
+HSPLcom/android/server/AlarmManagerService;->triggerAlarmsLocked(Ljava/util/ArrayList;J)Z
 HSPLcom/android/server/AlarmManagerService;->updateNextAlarmClockLocked()V
+PLcom/android/server/AlarmManagerService;->updateNextAlarmInfoForUserLocked(ILandroid/app/AlarmManager$AlarmClockInfo;)V
 HSPLcom/android/server/AnimationThread;-><init>()V
 HSPLcom/android/server/AnimationThread;->ensureThreadLocked()V
 HSPLcom/android/server/AnimationThread;->get()Lcom/android/server/AnimationThread;
@@ -886,12 +1255,17 @@
 HSPLcom/android/server/AppStateTracker$Listener;->access$1000(Lcom/android/server/AppStateTracker$Listener;Lcom/android/server/AppStateTracker;I)V
 HSPLcom/android/server/AppStateTracker$Listener;->access$1100(Lcom/android/server/AppStateTracker$Listener;Lcom/android/server/AppStateTracker;I)V
 PLcom/android/server/AppStateTracker$Listener;->access$1500(Lcom/android/server/AppStateTracker$Listener;Lcom/android/server/AppStateTracker;)V
+HSPLcom/android/server/AppStateTracker$Listener;->access$1600(Lcom/android/server/AppStateTracker$Listener;Lcom/android/server/AppStateTracker;)V
+PLcom/android/server/AppStateTracker$Listener;->access$1700(Lcom/android/server/AppStateTracker$Listener;Lcom/android/server/AppStateTracker;)V
+HSPLcom/android/server/AppStateTracker$Listener;->onExemptChanged(Lcom/android/server/AppStateTracker;)V
+PLcom/android/server/AppStateTracker$Listener;->onForceAllAppsStandbyChanged(Lcom/android/server/AppStateTracker;)V
 PLcom/android/server/AppStateTracker$Listener;->onTempPowerSaveWhitelistChanged(Lcom/android/server/AppStateTracker;)V
 HSPLcom/android/server/AppStateTracker$Listener;->onUidActiveStateChanged(Lcom/android/server/AppStateTracker;I)V
 HSPLcom/android/server/AppStateTracker$Listener;->onUidForeground(IZ)V
 HSPLcom/android/server/AppStateTracker$Listener;->onUidForegroundStateChanged(Lcom/android/server/AppStateTracker;I)V
 HSPLcom/android/server/AppStateTracker$Listener;->unblockAlarmsForUid(I)V
-PLcom/android/server/AppStateTracker$Listener;->updateAllJobs()V
+HSPLcom/android/server/AppStateTracker$Listener;->unblockAllUnrestrictedAlarms()V
+HSPLcom/android/server/AppStateTracker$Listener;->updateAllJobs()V
 HSPLcom/android/server/AppStateTracker$Listener;->updateJobsForUid(IZ)V
 HSPLcom/android/server/AppStateTracker$MyHandler;-><init>(Lcom/android/server/AppStateTracker;Landroid/os/Looper;)V
 HSPLcom/android/server/AppStateTracker$MyHandler;->handleMessage(Landroid/os/Message;)V
@@ -900,7 +1274,9 @@
 HSPLcom/android/server/AppStateTracker$MyHandler;->handleUidIdle(IZ)V
 HSPLcom/android/server/AppStateTracker$MyHandler;->handleUidStateChanged(II)V
 HSPLcom/android/server/AppStateTracker$MyHandler;->notifyAllWhitelistChanged()V
-PLcom/android/server/AppStateTracker$MyHandler;->notifyTempWhitelistChanged()V
+HSPLcom/android/server/AppStateTracker$MyHandler;->notifyExemptChanged()V
+PLcom/android/server/AppStateTracker$MyHandler;->notifyForceAllAppsStandbyChanged()V
+HPLcom/android/server/AppStateTracker$MyHandler;->notifyTempWhitelistChanged()V
 HSPLcom/android/server/AppStateTracker$MyHandler;->notifyUidActiveStateChanged(I)V
 HSPLcom/android/server/AppStateTracker$MyHandler;->notifyUidForegroundStateChanged(I)V
 HSPLcom/android/server/AppStateTracker$MyHandler;->onUidActive(I)V
@@ -910,9 +1286,9 @@
 HSPLcom/android/server/AppStateTracker$MyHandler;->removeUid(IZ)V
 HSPLcom/android/server/AppStateTracker$MyReceiver;-><init>(Lcom/android/server/AppStateTracker;)V
 HSPLcom/android/server/AppStateTracker$MyReceiver;-><init>(Lcom/android/server/AppStateTracker;Lcom/android/server/AppStateTracker$1;)V
-PLcom/android/server/AppStateTracker$MyReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/AppStateTracker$MyReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/AppStateTracker$StandbyTracker;-><init>(Lcom/android/server/AppStateTracker;)V
-PLcom/android/server/AppStateTracker$StandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
+HSPLcom/android/server/AppStateTracker$StandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
 HSPLcom/android/server/AppStateTracker$UidObserver;-><init>(Lcom/android/server/AppStateTracker;)V
 HSPLcom/android/server/AppStateTracker$UidObserver;-><init>(Lcom/android/server/AppStateTracker;Lcom/android/server/AppStateTracker$1;)V
 HSPLcom/android/server/AppStateTracker$UidObserver;->onUidActive(I)V
@@ -925,20 +1301,22 @@
 HSPLcom/android/server/AppStateTracker;->access$1800(Landroid/util/SparseBooleanArray;IZ)Z
 HSPLcom/android/server/AppStateTracker;->access$1900(Landroid/util/SparseBooleanArray;I)Z
 HSPLcom/android/server/AppStateTracker;->access$200(Lcom/android/server/AppStateTracker;)Lcom/android/server/AppStateTracker$MyHandler;
-PLcom/android/server/AppStateTracker;->access$300(Lcom/android/server/AppStateTracker;)V
-PLcom/android/server/AppStateTracker;->access$700(Lcom/android/server/AppStateTracker;)Landroid/util/SparseSetArray;
+HSPLcom/android/server/AppStateTracker;->access$300(Lcom/android/server/AppStateTracker;)V
+HSPLcom/android/server/AppStateTracker;->access$700(Lcom/android/server/AppStateTracker;)Landroid/util/SparseSetArray;
 HSPLcom/android/server/AppStateTracker;->access$800(Lcom/android/server/AppStateTracker;)Lcom/android/internal/util/StatLogger;
 HSPLcom/android/server/AppStateTracker;->access$900(Lcom/android/server/AppStateTracker;)[Lcom/android/server/AppStateTracker$Listener;
 HSPLcom/android/server/AppStateTracker;->addListener(Lcom/android/server/AppStateTracker$Listener;)V
 HSPLcom/android/server/AppStateTracker;->addUidToArray(Landroid/util/SparseBooleanArray;I)Z
-PLcom/android/server/AppStateTracker;->areAlarmsRestricted(ILjava/lang/String;Z)Z
+HPLcom/android/server/AppStateTracker;->areAlarmsRestricted(ILjava/lang/String;Z)Z
 HSPLcom/android/server/AppStateTracker;->areJobsRestricted(ILjava/lang/String;Z)Z
+PLcom/android/server/AppStateTracker;->cleanUpArrayForUser(Landroid/util/SparseBooleanArray;I)V
 HSPLcom/android/server/AppStateTracker;->cloneListeners()[Lcom/android/server/AppStateTracker$Listener;
-PLcom/android/server/AppStateTracker;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/AppStateTracker;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/AppStateTracker;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/AppStateTracker;->dumpProto(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/AppStateTracker;->dumpUids(Ljava/io/PrintWriter;Landroid/util/SparseBooleanArray;)V
+HPLcom/android/server/AppStateTracker;->dumpProto(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/AppStateTracker;->dumpUids(Ljava/io/PrintWriter;Landroid/util/SparseBooleanArray;)V
 HSPLcom/android/server/AppStateTracker;->findForcedAppStandbyUidPackageIndexLocked(ILjava/lang/String;)I
+PLcom/android/server/AppStateTracker;->handleUserRemoved(I)V
 HSPLcom/android/server/AppStateTracker;->injectActivityManagerInternal()Landroid/app/ActivityManagerInternal;
 HSPLcom/android/server/AppStateTracker;->injectAppOpsManager()Landroid/app/AppOpsManager;
 HSPLcom/android/server/AppStateTracker;->injectAppStandbyInternal()Lcom/android/server/usage/AppStandbyInternal;
@@ -947,42 +1325,56 @@
 HSPLcom/android/server/AppStateTracker;->injectIAppOpsService()Lcom/android/internal/app/IAppOpsService;
 HSPLcom/android/server/AppStateTracker;->injectPowerManagerInternal()Landroid/os/PowerManagerInternal;
 HSPLcom/android/server/AppStateTracker;->isAnyAppIdUnwhitelisted([I[I)Z
-PLcom/android/server/AppStateTracker;->isForceAllAppsStandbyEnabled()Z
+HPLcom/android/server/AppStateTracker;->isForceAllAppsStandbyEnabled()Z
 HSPLcom/android/server/AppStateTracker;->isRestricted(ILjava/lang/String;ZZ)Z
-PLcom/android/server/AppStateTracker;->isRunAnyInBackgroundAppOpsAllowed(ILjava/lang/String;)Z
+HPLcom/android/server/AppStateTracker;->isRunAnyInBackgroundAppOpsAllowed(ILjava/lang/String;)Z
 HSPLcom/android/server/AppStateTracker;->isRunAnyRestrictedLocked(ILjava/lang/String;)Z
+PLcom/android/server/AppStateTracker;->isSmallBatteryDevice()Z
 HSPLcom/android/server/AppStateTracker;->isUidActive(I)Z
-PLcom/android/server/AppStateTracker;->isUidActiveSynced(I)Z
+HPLcom/android/server/AppStateTracker;->isUidActiveSynced(I)Z
 HSPLcom/android/server/AppStateTracker;->isUidInForeground(I)Z
 HPLcom/android/server/AppStateTracker;->isUidPowerSaveUserWhitelisted(I)Z
 HPLcom/android/server/AppStateTracker;->isUidPowerSaveWhitelisted(I)Z
-PLcom/android/server/AppStateTracker;->isUidTempPowerSaveWhitelisted(I)Z
+HPLcom/android/server/AppStateTracker;->isUidTempPowerSaveWhitelisted(I)Z
+PLcom/android/server/AppStateTracker;->lambda$onSystemServicesReady$0$AppStateTracker(Landroid/os/PowerSaveState;)V
 HSPLcom/android/server/AppStateTracker;->onSystemServicesReady()V
 HSPLcom/android/server/AppStateTracker;->refreshForcedAppStandbyUidPackagesLocked()V
 HSPLcom/android/server/AppStateTracker;->removeUidFromArray(Landroid/util/SparseBooleanArray;IZ)Z
 HSPLcom/android/server/AppStateTracker;->setPowerSaveWhitelistAppIds([I[I[I)V
 HSPLcom/android/server/AppStateTracker;->toggleForceAllAppsStandbyLocked(Z)V
 HSPLcom/android/server/AppStateTracker;->updateForceAllAppStandbyState()V
-PLcom/android/server/AttributeCache$Entry;-><init>(Landroid/content/Context;Landroid/content/res/TypedArray;)V
-PLcom/android/server/AttributeCache$Package;-><init>(Landroid/content/Context;)V
-PLcom/android/server/AttributeCache$Package;->access$000(Lcom/android/server/AttributeCache$Package;)Landroid/util/SparseArray;
+HSPLcom/android/server/AttributeCache$Entry;-><init>(Landroid/content/Context;Landroid/content/res/TypedArray;)V
+PLcom/android/server/AttributeCache$Entry;->recycle()V
+HSPLcom/android/server/AttributeCache$Package;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/AttributeCache$Package;->access$000(Lcom/android/server/AttributeCache$Package;)Landroid/util/SparseArray;
 HSPLcom/android/server/AttributeCache;-><clinit>()V
 HSPLcom/android/server/AttributeCache;-><init>(Landroid/content/Context;)V
-PLcom/android/server/AttributeCache;->get(Ljava/lang/String;I[II)Lcom/android/server/AttributeCache$Entry;
+HSPLcom/android/server/AttributeCache;->get(Ljava/lang/String;I[II)Lcom/android/server/AttributeCache$Entry;
 HSPLcom/android/server/AttributeCache;->init(Landroid/content/Context;)V
 HSPLcom/android/server/AttributeCache;->instance()Lcom/android/server/AttributeCache;
 PLcom/android/server/AttributeCache;->removePackage(Ljava/lang/String;)V
 HSPLcom/android/server/AttributeCache;->updateConfiguration(Landroid/content/res/Configuration;)V
+PLcom/android/server/BatteryService$10;-><init>(Lcom/android/server/BatteryService;Landroid/content/Intent;)V
+PLcom/android/server/BatteryService$10;->run()V
 HSPLcom/android/server/BatteryService$2;-><init>(Lcom/android/server/BatteryService;Landroid/os/Handler;)V
 HSPLcom/android/server/BatteryService$3;-><init>(Lcom/android/server/BatteryService;)V
 HSPLcom/android/server/BatteryService$4;-><init>(Lcom/android/server/BatteryService;)V
+PLcom/android/server/BatteryService$5;-><init>(Lcom/android/server/BatteryService;)V
+PLcom/android/server/BatteryService$5;->run()V
 PLcom/android/server/BatteryService$7;-><init>(Lcom/android/server/BatteryService;Landroid/content/Intent;)V
 PLcom/android/server/BatteryService$7;->run()V
 HSPLcom/android/server/BatteryService$8;-><init>(Lcom/android/server/BatteryService;Landroid/content/Intent;)V
-PLcom/android/server/BatteryService$8;->run()V
+HSPLcom/android/server/BatteryService$8;->run()V
+PLcom/android/server/BatteryService$9;-><init>(Lcom/android/server/BatteryService;Landroid/content/Intent;)V
+PLcom/android/server/BatteryService$9;->run()V
 HSPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;-><init>(Lcom/android/server/BatteryService;)V
 HSPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;-><init>(Lcom/android/server/BatteryService;Lcom/android/server/BatteryService$1;)V
 HPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->getProperty(ILandroid/os/BatteryProperty;)I
+HPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->lambda$getProperty$0(Landroid/util/MutableInt;Landroid/os/BatteryProperty;II)V
+PLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->lambda$getProperty$1(Landroid/util/MutableInt;Landroid/os/BatteryProperty;II)V
+HPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->lambda$getProperty$2(Landroid/util/MutableInt;Landroid/os/BatteryProperty;II)V
+HPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->lambda$getProperty$3(Landroid/util/MutableInt;Landroid/os/BatteryProperty;II)V
+HPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->lambda$getProperty$5(Landroid/util/MutableInt;Landroid/os/BatteryProperty;IJ)V
 HSPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->lambda$scheduleUpdate$6$BatteryService$BatteryPropertiesRegistrar()V
 HSPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->scheduleUpdate()V
 HSPLcom/android/server/BatteryService$BinderService;-><init>(Lcom/android/server/BatteryService;)V
@@ -992,6 +1384,8 @@
 HSPLcom/android/server/BatteryService$HealthHalCallback;-><init>(Lcom/android/server/BatteryService;Lcom/android/server/BatteryService$1;)V
 HSPLcom/android/server/BatteryService$HealthHalCallback;->healthInfoChanged(Landroid/hardware/health/V2_0/HealthInfo;)V
 HSPLcom/android/server/BatteryService$HealthHalCallback;->onRegistration(Landroid/hardware/health/V2_0/IHealth;Landroid/hardware/health/V2_0/IHealth;Ljava/lang/String;)V
+HSPLcom/android/server/BatteryService$HealthServiceWrapper$1;-><init>(Lcom/android/server/BatteryService$HealthServiceWrapper;)V
+HSPLcom/android/server/BatteryService$HealthServiceWrapper$2;-><init>(Lcom/android/server/BatteryService$HealthServiceWrapper;)V
 HSPLcom/android/server/BatteryService$HealthServiceWrapper$IHealthSupplier;->get(Ljava/lang/String;)Landroid/hardware/health/V2_0/IHealth;
 HSPLcom/android/server/BatteryService$HealthServiceWrapper$IServiceManagerSupplier;->get()Landroid/hidl/manager/V1_0/IServiceManager;
 HSPLcom/android/server/BatteryService$HealthServiceWrapper$Notification$1;-><init>(Lcom/android/server/BatteryService$HealthServiceWrapper$Notification;)V
@@ -1007,44 +1401,55 @@
 HSPLcom/android/server/BatteryService$HealthServiceWrapper;->access$2600(Lcom/android/server/BatteryService$HealthServiceWrapper;)Landroid/os/HandlerThread;
 HSPLcom/android/server/BatteryService$HealthServiceWrapper;->getHandlerThread()Landroid/os/HandlerThread;
 HSPLcom/android/server/BatteryService$HealthServiceWrapper;->getLastService()Landroid/hardware/health/V2_0/IHealth;
+HSPLcom/android/server/BatteryService$HealthServiceWrapper;->init()V
 HSPLcom/android/server/BatteryService$HealthServiceWrapper;->init(Lcom/android/server/BatteryService$HealthServiceWrapper$Callback;Lcom/android/server/BatteryService$HealthServiceWrapper$IServiceManagerSupplier;Lcom/android/server/BatteryService$HealthServiceWrapper$IHealthSupplier;)V
 HSPLcom/android/server/BatteryService$Led;-><init>(Lcom/android/server/BatteryService;Landroid/content/Context;Lcom/android/server/lights/LightsManager;)V
 HSPLcom/android/server/BatteryService$Led;->updateLightsLocked()V
 HSPLcom/android/server/BatteryService$LocalService;-><init>(Lcom/android/server/BatteryService;)V
 HSPLcom/android/server/BatteryService$LocalService;-><init>(Lcom/android/server/BatteryService;Lcom/android/server/BatteryService$1;)V
-PLcom/android/server/BatteryService$LocalService;->getBatteryChargeCounter()I
+HSPLcom/android/server/BatteryService$LocalService;->getBatteryChargeCounter()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$LocalService;->isPowered(I)Z
+PLcom/android/server/BatteryService$Shell;-><init>(Lcom/android/server/BatteryService;)V
+PLcom/android/server/BatteryService$Shell;->onCommand(Ljava/lang/String;)I
 HSPLcom/android/server/BatteryService;-><clinit>()V
 HSPLcom/android/server/BatteryService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/BatteryService;->access$000(Lcom/android/server/BatteryService;)Ljava/lang/Object;
 HSPLcom/android/server/BatteryService;->access$1000(Lcom/android/server/BatteryService;)I
 HSPLcom/android/server/BatteryService;->access$1100(Lcom/android/server/BatteryService;Landroid/hardware/health/V2_0/HealthInfo;)V
 HSPLcom/android/server/BatteryService;->access$1200(Ljava/lang/String;)V
+PLcom/android/server/BatteryService;->access$1300()Ljava/lang/String;
 HSPLcom/android/server/BatteryService;->access$1400()V
+PLcom/android/server/BatteryService;->access$1500(Lcom/android/server/BatteryService;Ljava/io/FileDescriptor;)V
+PLcom/android/server/BatteryService;->access$1600(Lcom/android/server/BatteryService;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/BatteryService;->access$1700(Lcom/android/server/BatteryService;)Lcom/android/server/BatteryService$HealthServiceWrapper;
 HSPLcom/android/server/BatteryService;->access$1800(Lcom/android/server/BatteryService;I)Z
 HSPLcom/android/server/BatteryService;->access$1900(Lcom/android/server/BatteryService;)I
 HSPLcom/android/server/BatteryService;->access$2000(Lcom/android/server/BatteryService;)Z
-PLcom/android/server/BatteryService;->access$800(Lcom/android/server/BatteryService;)Landroid/content/Context;
+PLcom/android/server/BatteryService;->access$700(Lcom/android/server/BatteryService;)Landroid/app/ActivityManagerInternal;
+HSPLcom/android/server/BatteryService;->access$800(Lcom/android/server/BatteryService;)Landroid/content/Context;
 HSPLcom/android/server/BatteryService;->access$900(Lcom/android/server/BatteryService;)Landroid/hardware/health/V1_0/HealthInfo;
+PLcom/android/server/BatteryService;->copy(Landroid/hardware/health/V1_0/HealthInfo;Landroid/hardware/health/V1_0/HealthInfo;)V
 PLcom/android/server/BatteryService;->dumpInternal(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/BatteryService;->dumpProto(Ljava/io/FileDescriptor;)V
 HSPLcom/android/server/BatteryService;->getIconLocked(I)I
 HSPLcom/android/server/BatteryService;->isPoweredLocked(I)Z
-PLcom/android/server/BatteryService;->lambda$D1kwd7L7yyqN5niz3KWkTepVmUk(Lcom/android/server/BatteryService;)V
-PLcom/android/server/BatteryService;->lambda$sendBatteryChangedIntentLocked$0(Landroid/content/Intent;)V
+HSPLcom/android/server/BatteryService;->lambda$D1kwd7L7yyqN5niz3KWkTepVmUk(Lcom/android/server/BatteryService;)V
+HSPLcom/android/server/BatteryService;->lambda$sendBatteryChangedIntentLocked$0(Landroid/content/Intent;)V
 PLcom/android/server/BatteryService;->logBatteryStatsLocked()V
 PLcom/android/server/BatteryService;->logOutlierLocked(J)V
 HSPLcom/android/server/BatteryService;->onBootPhase(I)V
+PLcom/android/server/BatteryService;->onShellCommand(Lcom/android/server/BatteryService$Shell;Ljava/lang/String;)I
 HSPLcom/android/server/BatteryService;->onStart()V
+PLcom/android/server/BatteryService;->parseOptions(Lcom/android/server/BatteryService$Shell;)I
+PLcom/android/server/BatteryService;->processValuesFromShellLocked(Ljava/io/PrintWriter;I)V
 HSPLcom/android/server/BatteryService;->processValuesLocked(Z)V
 HSPLcom/android/server/BatteryService;->registerHealthCallback()V
 HSPLcom/android/server/BatteryService;->sendBatteryChangedIntentLocked()V
 HSPLcom/android/server/BatteryService;->sendBatteryLevelChangedIntentLocked()V
-PLcom/android/server/BatteryService;->sendEnqueuedBatteryLevelChangedEvents()V
+HSPLcom/android/server/BatteryService;->sendEnqueuedBatteryLevelChangedEvents()V
 HSPLcom/android/server/BatteryService;->shouldSendBatteryLowLocked()Z
 HSPLcom/android/server/BatteryService;->shouldShutdownLocked()Z
 HSPLcom/android/server/BatteryService;->shutdownIfNoPowerLocked()V
@@ -1066,113 +1471,208 @@
 HSPLcom/android/server/BinderCallsStatsService$LifeCycle;->onStart()V
 HSPLcom/android/server/BinderCallsStatsService$SettingsObserver;-><init>(Landroid/content/Context;Lcom/android/internal/os/BinderCallsStats;Lcom/android/server/BinderCallsStatsService$AuthorizedWorkSourceProvider;)V
 HSPLcom/android/server/BinderCallsStatsService$SettingsObserver;->onChange()V
+PLcom/android/server/BinderCallsStatsService$SettingsObserver;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/BinderCallsStatsService;-><init>(Lcom/android/internal/os/BinderCallsStats;Lcom/android/server/BinderCallsStatsService$AuthorizedWorkSourceProvider;)V
 PLcom/android/server/BinderCallsStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/BinderCallsStatsService;->systemReady(Landroid/content/Context;)V
+HSPLcom/android/server/BluetoothAirplaneModeListener$1;-><init>(Lcom/android/server/BluetoothAirplaneModeListener;Landroid/os/Handler;)V
+PLcom/android/server/BluetoothAirplaneModeListener$1;->onChange(Z)V
+HSPLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper$1;-><init>(Lcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;)V
+PLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper$1;->onServiceConnected(ILandroid/bluetooth/BluetoothProfile;)V
+PLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper$1;->onServiceDisconnected(I)V
+HSPLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;-><init>(Landroid/content/Context;)V
+PLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;->access$102(Lcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;Landroid/bluetooth/BluetoothA2dp;)Landroid/bluetooth/BluetoothA2dp;
+PLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;->access$202(Lcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;Landroid/bluetooth/BluetoothHearingAid;)Landroid/bluetooth/BluetoothHearingAid;
+HSPLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;->getSettingsInt(Ljava/lang/String;)I
+PLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;->isA2dpConnected()Z
+PLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;->isA2dpOrHearingAidConnected()Z
+PLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;->isAirplaneModeOn()Z
+PLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;->isBluetoothOn()Z
+PLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;->isHearingAidConnected()Z
+PLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;->onAirplaneModeChanged(Lcom/android/server/BluetoothManagerService;)V
+PLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;->setSettingsInt(Ljava/lang/String;I)V
+PLcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;->showToastMessage()V
+HSPLcom/android/server/BluetoothAirplaneModeListener$BluetoothAirplaneModeHandler;-><init>(Lcom/android/server/BluetoothAirplaneModeListener;Landroid/os/Looper;)V
+PLcom/android/server/BluetoothAirplaneModeListener$BluetoothAirplaneModeHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/BluetoothAirplaneModeListener;-><init>(Lcom/android/server/BluetoothManagerService;Landroid/os/Looper;Landroid/content/Context;)V
+PLcom/android/server/BluetoothAirplaneModeListener;->access$000(Lcom/android/server/BluetoothAirplaneModeListener;)Lcom/android/server/BluetoothAirplaneModeListener$BluetoothAirplaneModeHandler;
+PLcom/android/server/BluetoothAirplaneModeListener;->handleAirplaneModeChange()V
+PLcom/android/server/BluetoothAirplaneModeListener;->shouldPopToast()Z
+PLcom/android/server/BluetoothAirplaneModeListener;->shouldSkipAirplaneModeChange()Z
+HSPLcom/android/server/BluetoothAirplaneModeListener;->start(Lcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;)V
 HSPLcom/android/server/BluetoothManagerService$1;-><init>(Lcom/android/server/BluetoothManagerService;)V
-PLcom/android/server/BluetoothManagerService$1;->onBluetoothStateChange(II)V
+HSPLcom/android/server/BluetoothManagerService$1;->onBluetoothStateChange(II)V
 HSPLcom/android/server/BluetoothManagerService$2;-><init>(Lcom/android/server/BluetoothManagerService;)V
-PLcom/android/server/BluetoothManagerService$2;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/BluetoothManagerService$2;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/BluetoothManagerService$3;-><init>(Lcom/android/server/BluetoothManagerService;)V
 HSPLcom/android/server/BluetoothManagerService$3;-><init>(Lcom/android/server/BluetoothManagerService;Landroid/os/Handler;)V
 PLcom/android/server/BluetoothManagerService$3;->onChange(Z)V
+PLcom/android/server/BluetoothManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/BluetoothManagerService$4;-><init>(Lcom/android/server/BluetoothManagerService;)V
-PLcom/android/server/BluetoothManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/BluetoothManagerService$4;-><init>(Lcom/android/server/BluetoothManagerService;Landroid/os/Handler;)V
+PLcom/android/server/BluetoothManagerService$4;->onChange(Z)V
+HSPLcom/android/server/BluetoothManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/BluetoothManagerService$5;-><init>(Lcom/android/server/BluetoothManagerService;Landroid/os/Handler;)V
-PLcom/android/server/BluetoothManagerService$ActiveLog;-><init>(Lcom/android/server/BluetoothManagerService;ILjava/lang/String;ZJ)V
+HSPLcom/android/server/BluetoothManagerService$ActiveLog;-><init>(Lcom/android/server/BluetoothManagerService;ILjava/lang/String;ZJ)V
 PLcom/android/server/BluetoothManagerService$ActiveLog;->toString()Ljava/lang/String;
 HSPLcom/android/server/BluetoothManagerService$BluetoothHandler;-><init>(Lcom/android/server/BluetoothManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/BluetoothManagerService$BluetoothHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/BluetoothManagerService$BluetoothServiceConnection;-><init>(Lcom/android/server/BluetoothManagerService;)V
 HSPLcom/android/server/BluetoothManagerService$BluetoothServiceConnection;-><init>(Lcom/android/server/BluetoothManagerService;Lcom/android/server/BluetoothManagerService$1;)V
-PLcom/android/server/BluetoothManagerService$BluetoothServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HSPLcom/android/server/BluetoothManagerService$BluetoothServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/BluetoothManagerService$BluetoothServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/BluetoothManagerService$ClientDeathRecipient;-><init>(Lcom/android/server/BluetoothManagerService;Ljava/lang/String;)V
 PLcom/android/server/BluetoothManagerService$ClientDeathRecipient;->binderDied()V
 PLcom/android/server/BluetoothManagerService$ClientDeathRecipient;->getPackageName()Ljava/lang/String;
-PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;-><init>(Lcom/android/server/BluetoothManagerService;Landroid/content/Intent;)V
-PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->access$2000(Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;)Z
+HSPLcom/android/server/BluetoothManagerService$ProfileServiceConnections;-><init>(Lcom/android/server/BluetoothManagerService;Landroid/content/Intent;)V
+HSPLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->access$1300(Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;)Z
+PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->access$1400(Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;Landroid/bluetooth/IBluetoothProfileServiceConnection;)V
+PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->access$1500(Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;)Z
+HSPLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->access$2000(Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;)Z
 PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->access$2100(Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;Landroid/bluetooth/IBluetoothProfileServiceConnection;)V
 PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->access$2200(Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;)Z
-PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->access$3500(Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;Landroid/bluetooth/IBluetoothProfileServiceConnection;)V
-PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->addProxy(Landroid/bluetooth/IBluetoothProfileServiceConnection;)V
-PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->bindService()Z
+PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->access$3300(Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;Landroid/bluetooth/IBluetoothProfileServiceConnection;)V
+HPLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->access$3500(Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;Landroid/bluetooth/IBluetoothProfileServiceConnection;)V
+HPLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->addProxy(Landroid/bluetooth/IBluetoothProfileServiceConnection;)V
+HSPLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->bindService()Z
+PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->binderDied()V
 PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->isEmpty()Z
 PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->removeProxy(Landroid/bluetooth/IBluetoothProfileServiceConnection;)V
 HSPLcom/android/server/BluetoothManagerService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/BluetoothManagerService;->access$1000(Lcom/android/server/BluetoothManagerService;)Landroid/bluetooth/IBluetooth;
-PLcom/android/server/BluetoothManagerService;->access$1002(Lcom/android/server/BluetoothManagerService;Landroid/bluetooth/IBluetooth;)Landroid/bluetooth/IBluetooth;
-PLcom/android/server/BluetoothManagerService;->access$1300(Lcom/android/server/BluetoothManagerService;)Z
-PLcom/android/server/BluetoothManagerService;->access$1302(Lcom/android/server/BluetoothManagerService;Z)Z
-PLcom/android/server/BluetoothManagerService;->access$1700(Lcom/android/server/BluetoothManagerService;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/BluetoothManagerService;->access$200(Lcom/android/server/BluetoothManagerService;)Lcom/android/server/BluetoothManagerService$BluetoothHandler;
+PLcom/android/server/BluetoothManagerService;->access$000(J)Ljava/lang/CharSequence;
+PLcom/android/server/BluetoothManagerService;->access$100(I)Ljava/lang/String;
+HSPLcom/android/server/BluetoothManagerService;->access$1000(Lcom/android/server/BluetoothManagerService;)Landroid/bluetooth/IBluetooth;
+HSPLcom/android/server/BluetoothManagerService;->access$1000(Lcom/android/server/BluetoothManagerService;)Ljava/util/concurrent/locks/ReentrantReadWriteLock;
+HSPLcom/android/server/BluetoothManagerService;->access$1002(Lcom/android/server/BluetoothManagerService;Landroid/bluetooth/IBluetooth;)Landroid/bluetooth/IBluetooth;
+HSPLcom/android/server/BluetoothManagerService;->access$1100(Lcom/android/server/BluetoothManagerService;)Landroid/bluetooth/IBluetooth;
+PLcom/android/server/BluetoothManagerService;->access$1100(Lcom/android/server/BluetoothManagerService;)V
+PLcom/android/server/BluetoothManagerService;->access$1102(Lcom/android/server/BluetoothManagerService;Landroid/bluetooth/IBluetooth;)Landroid/bluetooth/IBluetooth;
+PLcom/android/server/BluetoothManagerService;->access$1200(Lcom/android/server/BluetoothManagerService;ILjava/lang/String;Z)V
+HSPLcom/android/server/BluetoothManagerService;->access$1300(Lcom/android/server/BluetoothManagerService;)Z
+HSPLcom/android/server/BluetoothManagerService;->access$1302(Lcom/android/server/BluetoothManagerService;Z)Z
+PLcom/android/server/BluetoothManagerService;->access$1400(Lcom/android/server/BluetoothManagerService;)Z
+PLcom/android/server/BluetoothManagerService;->access$1402(Lcom/android/server/BluetoothManagerService;Z)Z
+PLcom/android/server/BluetoothManagerService;->access$1500(Lcom/android/server/BluetoothManagerService;)Z
+PLcom/android/server/BluetoothManagerService;->access$1600(Lcom/android/server/BluetoothManagerService;ZILjava/lang/String;)V
+HSPLcom/android/server/BluetoothManagerService;->access$1700(Lcom/android/server/BluetoothManagerService;)Z
+HSPLcom/android/server/BluetoothManagerService;->access$1700(Lcom/android/server/BluetoothManagerService;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/BluetoothManagerService;->access$1702(Lcom/android/server/BluetoothManagerService;Z)Z
+PLcom/android/server/BluetoothManagerService;->access$1800(Lcom/android/server/BluetoothManagerService;)Ljava/util/Map;
+PLcom/android/server/BluetoothManagerService;->access$1900(Lcom/android/server/BluetoothManagerService;)Z
+PLcom/android/server/BluetoothManagerService;->access$1902(Lcom/android/server/BluetoothManagerService;Z)Z
+HSPLcom/android/server/BluetoothManagerService;->access$200(Lcom/android/server/BluetoothManagerService;)Lcom/android/server/BluetoothManagerService$BluetoothHandler;
+PLcom/android/server/BluetoothManagerService;->access$2100(Lcom/android/server/BluetoothManagerService;I)V
+HSPLcom/android/server/BluetoothManagerService;->access$2200(Lcom/android/server/BluetoothManagerService;)Z
+HSPLcom/android/server/BluetoothManagerService;->access$2202(Lcom/android/server/BluetoothManagerService;Z)Z
+HSPLcom/android/server/BluetoothManagerService;->access$2300(Lcom/android/server/BluetoothManagerService;Z)V
+PLcom/android/server/BluetoothManagerService;->access$2400(Lcom/android/server/BluetoothManagerService;ZZ)Z
+PLcom/android/server/BluetoothManagerService;->access$2500(Lcom/android/server/BluetoothManagerService;)I
 PLcom/android/server/BluetoothManagerService;->access$2500(Lcom/android/server/BluetoothManagerService;)Z
-PLcom/android/server/BluetoothManagerService;->access$2502(Lcom/android/server/BluetoothManagerService;Z)Z
-PLcom/android/server/BluetoothManagerService;->access$2700(Lcom/android/server/BluetoothManagerService;)Z
-PLcom/android/server/BluetoothManagerService;->access$2702(Lcom/android/server/BluetoothManagerService;Z)Z
-PLcom/android/server/BluetoothManagerService;->access$2800(Lcom/android/server/BluetoothManagerService;Z)V
+HSPLcom/android/server/BluetoothManagerService;->access$2502(Lcom/android/server/BluetoothManagerService;Z)Z
+PLcom/android/server/BluetoothManagerService;->access$2600(Lcom/android/server/BluetoothManagerService;)V
+HSPLcom/android/server/BluetoothManagerService;->access$2700(Lcom/android/server/BluetoothManagerService;)Z
+HSPLcom/android/server/BluetoothManagerService;->access$2702(Lcom/android/server/BluetoothManagerService;Z)Z
+HSPLcom/android/server/BluetoothManagerService;->access$2800(Lcom/android/server/BluetoothManagerService;Z)V
 PLcom/android/server/BluetoothManagerService;->access$2900(Lcom/android/server/BluetoothManagerService;ZZ)Z
 PLcom/android/server/BluetoothManagerService;->access$300(Lcom/android/server/BluetoothManagerService;IZ)V
+PLcom/android/server/BluetoothManagerService;->access$3000(Lcom/android/server/BluetoothManagerService;)I
+HSPLcom/android/server/BluetoothManagerService;->access$3000(Lcom/android/server/BluetoothManagerService;)Landroid/os/RemoteCallbackList;
+HSPLcom/android/server/BluetoothManagerService;->access$3100(Lcom/android/server/BluetoothManagerService;)Landroid/os/RemoteCallbackList;
 PLcom/android/server/BluetoothManagerService;->access$3100(Lcom/android/server/BluetoothManagerService;)V
 HSPLcom/android/server/BluetoothManagerService;->access$3200(Lcom/android/server/BluetoothManagerService;)Landroid/os/RemoteCallbackList;
+PLcom/android/server/BluetoothManagerService;->access$3200(Lcom/android/server/BluetoothManagerService;)Ljava/util/Map;
 HSPLcom/android/server/BluetoothManagerService;->access$3300(Lcom/android/server/BluetoothManagerService;)Landroid/os/RemoteCallbackList;
 PLcom/android/server/BluetoothManagerService;->access$3400(Lcom/android/server/BluetoothManagerService;)Ljava/util/Map;
+PLcom/android/server/BluetoothManagerService;->access$3402(Lcom/android/server/BluetoothManagerService;Landroid/bluetooth/IBluetoothGatt;)Landroid/bluetooth/IBluetoothGatt;
+PLcom/android/server/BluetoothManagerService;->access$3500(Lcom/android/server/BluetoothManagerService;)V
 PLcom/android/server/BluetoothManagerService;->access$3602(Lcom/android/server/BluetoothManagerService;Landroid/bluetooth/IBluetoothGatt;)Landroid/bluetooth/IBluetoothGatt;
+PLcom/android/server/BluetoothManagerService;->access$3602(Lcom/android/server/BluetoothManagerService;Landroid/os/IBinder;)Landroid/os/IBinder;
 PLcom/android/server/BluetoothManagerService;->access$3700(Lcom/android/server/BluetoothManagerService;)V
-PLcom/android/server/BluetoothManagerService;->access$3802(Lcom/android/server/BluetoothManagerService;Landroid/os/IBinder;)Landroid/os/IBinder;
-PLcom/android/server/BluetoothManagerService;->access$3900(Lcom/android/server/BluetoothManagerService;)Z
-PLcom/android/server/BluetoothManagerService;->access$4000(Lcom/android/server/BluetoothManagerService;)Landroid/bluetooth/IBluetoothCallback;
-PLcom/android/server/BluetoothManagerService;->access$4100(Lcom/android/server/BluetoothManagerService;)V
-PLcom/android/server/BluetoothManagerService;->access$4202(Lcom/android/server/BluetoothManagerService;I)I
-PLcom/android/server/BluetoothManagerService;->access$4300(Lcom/android/server/BluetoothManagerService;II)V
+PLcom/android/server/BluetoothManagerService;->access$3700(Lcom/android/server/BluetoothManagerService;)Z
+PLcom/android/server/BluetoothManagerService;->access$3800(Lcom/android/server/BluetoothManagerService;)Landroid/bluetooth/IBluetoothCallback;
+HSPLcom/android/server/BluetoothManagerService;->access$3802(Lcom/android/server/BluetoothManagerService;Landroid/os/IBinder;)Landroid/os/IBinder;
+PLcom/android/server/BluetoothManagerService;->access$3900(Lcom/android/server/BluetoothManagerService;)V
+HSPLcom/android/server/BluetoothManagerService;->access$3900(Lcom/android/server/BluetoothManagerService;)Z
+PLcom/android/server/BluetoothManagerService;->access$400(Lcom/android/server/BluetoothManagerService;)Landroid/content/Context;
+HSPLcom/android/server/BluetoothManagerService;->access$4000(Lcom/android/server/BluetoothManagerService;)Landroid/bluetooth/IBluetoothCallback;
+PLcom/android/server/BluetoothManagerService;->access$4002(Lcom/android/server/BluetoothManagerService;I)I
+HSPLcom/android/server/BluetoothManagerService;->access$4100(Lcom/android/server/BluetoothManagerService;)V
+PLcom/android/server/BluetoothManagerService;->access$4100(Lcom/android/server/BluetoothManagerService;II)V
+PLcom/android/server/BluetoothManagerService;->access$4200(Lcom/android/server/BluetoothManagerService;)I
+HSPLcom/android/server/BluetoothManagerService;->access$4202(Lcom/android/server/BluetoothManagerService;I)I
+PLcom/android/server/BluetoothManagerService;->access$4300(Lcom/android/server/BluetoothManagerService;)I
+HSPLcom/android/server/BluetoothManagerService;->access$4300(Lcom/android/server/BluetoothManagerService;II)V
+PLcom/android/server/BluetoothManagerService;->access$4302(Lcom/android/server/BluetoothManagerService;I)I
+PLcom/android/server/BluetoothManagerService;->access$4308(Lcom/android/server/BluetoothManagerService;)I
 PLcom/android/server/BluetoothManagerService;->access$4500(Lcom/android/server/BluetoothManagerService;)I
+PLcom/android/server/BluetoothManagerService;->access$4502(Lcom/android/server/BluetoothManagerService;I)I
+PLcom/android/server/BluetoothManagerService;->access$4508(Lcom/android/server/BluetoothManagerService;)I
+PLcom/android/server/BluetoothManagerService;->access$4600(Lcom/android/server/BluetoothManagerService;)V
+PLcom/android/server/BluetoothManagerService;->access$4700(Lcom/android/server/BluetoothManagerService;)V
+PLcom/android/server/BluetoothManagerService;->access$500(Lcom/android/server/BluetoothManagerService;ILjava/lang/String;)V
+PLcom/android/server/BluetoothManagerService;->access$600(Lcom/android/server/BluetoothManagerService;)Z
+PLcom/android/server/BluetoothManagerService;->access$600(Lcom/android/server/BluetoothManagerService;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/BluetoothManagerService;->access$700(Lcom/android/server/BluetoothManagerService;)Ljava/util/Map;
+PLcom/android/server/BluetoothManagerService;->access$700(Lcom/android/server/BluetoothManagerService;)Z
 PLcom/android/server/BluetoothManagerService;->access$800(Lcom/android/server/BluetoothManagerService;I)V
-PLcom/android/server/BluetoothManagerService;->access$900(Lcom/android/server/BluetoothManagerService;)Ljava/util/concurrent/locks/ReentrantReadWriteLock;
-PLcom/android/server/BluetoothManagerService;->addActiveLog(ILjava/lang/String;Z)V
+HSPLcom/android/server/BluetoothManagerService;->access$900(Lcom/android/server/BluetoothManagerService;)Ljava/util/concurrent/locks/ReentrantReadWriteLock;
+HSPLcom/android/server/BluetoothManagerService;->addActiveLog(ILjava/lang/String;Z)V
+PLcom/android/server/BluetoothManagerService;->addCrashLog()V
 HSPLcom/android/server/BluetoothManagerService;->bindBluetoothProfileService(ILandroid/bluetooth/IBluetoothProfileServiceConnection;)Z
-PLcom/android/server/BluetoothManagerService;->bluetoothStateChangeHandler(II)V
-PLcom/android/server/BluetoothManagerService;->checkIfCallerIsForegroundUser()Z
-PLcom/android/server/BluetoothManagerService;->checkPackage(ILjava/lang/String;)V
+HSPLcom/android/server/BluetoothManagerService;->bluetoothStateChangeHandler(II)V
+HPLcom/android/server/BluetoothManagerService;->checkIfCallerIsForegroundUser()Z
+HPLcom/android/server/BluetoothManagerService;->checkPackage(ILjava/lang/String;)V
+PLcom/android/server/BluetoothManagerService;->clearBleApps()V
 PLcom/android/server/BluetoothManagerService;->continueFromBleOnState()V
 PLcom/android/server/BluetoothManagerService;->disable(Ljava/lang/String;Z)Z
 PLcom/android/server/BluetoothManagerService;->disableBleScanMode()V
-PLcom/android/server/BluetoothManagerService;->doBind(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z
-PLcom/android/server/BluetoothManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/BluetoothManagerService;->doBind(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z
+HPLcom/android/server/BluetoothManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/BluetoothManagerService;->enable(Ljava/lang/String;)Z
-PLcom/android/server/BluetoothManagerService;->getAddress()Ljava/lang/String;
-PLcom/android/server/BluetoothManagerService;->getBluetoothGatt()Landroid/bluetooth/IBluetoothGatt;
+PLcom/android/server/BluetoothManagerService;->enableNoAutoConnect(Ljava/lang/String;)Z
+HPLcom/android/server/BluetoothManagerService;->getAddress()Ljava/lang/String;
+HPLcom/android/server/BluetoothManagerService;->getBluetoothGatt()Landroid/bluetooth/IBluetoothGatt;
 PLcom/android/server/BluetoothManagerService;->getEnableDisableReasonString(I)Ljava/lang/String;
-PLcom/android/server/BluetoothManagerService;->getName()Ljava/lang/String;
+HPLcom/android/server/BluetoothManagerService;->getName()Ljava/lang/String;
+PLcom/android/server/BluetoothManagerService;->getServiceRestartMs()I
 PLcom/android/server/BluetoothManagerService;->getState()I
-PLcom/android/server/BluetoothManagerService;->getSystemConfigEnabledProfilesForPackage(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/server/BluetoothManagerService;->getSystemConfigEnabledProfilesForPackage(Ljava/lang/String;)Ljava/util/List;
 PLcom/android/server/BluetoothManagerService;->handleDisable()V
-PLcom/android/server/BluetoothManagerService;->handleEnable(Z)V
+HSPLcom/android/server/BluetoothManagerService;->handleEnable(Z)V
 HSPLcom/android/server/BluetoothManagerService;->handleOnBootPhase()V
 PLcom/android/server/BluetoothManagerService;->handleOnUnlockUser(I)V
+HPLcom/android/server/BluetoothManagerService;->isAirplaneModeOn()Z
 PLcom/android/server/BluetoothManagerService;->isBleAppPresent()Z
-PLcom/android/server/BluetoothManagerService;->isBleScanAlwaysAvailable()Z
+HPLcom/android/server/BluetoothManagerService;->isBleScanAlwaysAvailable()Z
 HSPLcom/android/server/BluetoothManagerService;->isBluetoothDisallowed()Z
 HSPLcom/android/server/BluetoothManagerService;->isBluetoothPersistedStateOn()Z
-PLcom/android/server/BluetoothManagerService;->isBluetoothPersistedStateOnBluetooth()Z
+PLcom/android/server/BluetoothManagerService;->isBluetoothPersistedStateOnAirplane()Z
+HSPLcom/android/server/BluetoothManagerService;->isBluetoothPersistedStateOnBluetooth()Z
+PLcom/android/server/BluetoothManagerService;->isEnabled()Z
 HSPLcom/android/server/BluetoothManagerService;->isHearingAidProfileSupported()Z
 HSPLcom/android/server/BluetoothManagerService;->isNameAndAddressSet()Z
 HSPLcom/android/server/BluetoothManagerService;->loadStoredNameAndAddress()V
+PLcom/android/server/BluetoothManagerService;->onAirplaneModeChanged()V
 PLcom/android/server/BluetoothManagerService;->persistBluetoothSetting(I)V
 HSPLcom/android/server/BluetoothManagerService;->registerAdapter(Landroid/bluetooth/IBluetoothManagerCallback;)Landroid/bluetooth/IBluetooth;
 HSPLcom/android/server/BluetoothManagerService;->registerForBleScanModeChange()V
 HSPLcom/android/server/BluetoothManagerService;->registerStateChangeCallback(Landroid/bluetooth/IBluetoothStateChangeCallback;)V
-PLcom/android/server/BluetoothManagerService;->sendBleStateChanged(II)V
+HSPLcom/android/server/BluetoothManagerService;->sendBleStateChanged(II)V
 PLcom/android/server/BluetoothManagerService;->sendBluetoothServiceDownCallback()V
-PLcom/android/server/BluetoothManagerService;->sendBluetoothServiceUpCallback()V
+HSPLcom/android/server/BluetoothManagerService;->sendBluetoothServiceUpCallback()V
 PLcom/android/server/BluetoothManagerService;->sendBluetoothStateCallback(Z)V
 PLcom/android/server/BluetoothManagerService;->sendBrEdrDownCallback()V
-PLcom/android/server/BluetoothManagerService;->sendEnableMsg(ZILjava/lang/String;)V
-PLcom/android/server/BluetoothManagerService;->storeNameAndAddress(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/BluetoothManagerService;->sendDisableMsg(ILjava/lang/String;)V
+HSPLcom/android/server/BluetoothManagerService;->sendEnableMsg(ZILjava/lang/String;)V
+HSPLcom/android/server/BluetoothManagerService;->storeNameAndAddress(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/BluetoothManagerService;->supportBluetoothPersistedState()Z
+PLcom/android/server/BluetoothManagerService;->timeToLog(J)Ljava/lang/CharSequence;
 PLcom/android/server/BluetoothManagerService;->unbindAndFinish()V
 PLcom/android/server/BluetoothManagerService;->unbindBluetoothProfileService(ILandroid/bluetooth/IBluetoothProfileServiceConnection;)V
-PLcom/android/server/BluetoothManagerService;->unregisterStateChangeCallback(Landroid/bluetooth/IBluetoothStateChangeCallback;)V
-PLcom/android/server/BluetoothManagerService;->updateBleAppCount(Landroid/os/IBinder;ZLjava/lang/String;)I
+HPLcom/android/server/BluetoothManagerService;->unregisterStateChangeCallback(Landroid/bluetooth/IBluetoothStateChangeCallback;)V
+HPLcom/android/server/BluetoothManagerService;->updateBleAppCount(Landroid/os/IBinder;ZLjava/lang/String;)I
 PLcom/android/server/BluetoothManagerService;->updateOppLauncherComponentState(IZ)V
 PLcom/android/server/BluetoothManagerService;->waitForOnOff(ZZ)Z
 HSPLcom/android/server/BluetoothService;-><init>(Landroid/content/Context;)V
@@ -1181,282 +1681,554 @@
 HSPLcom/android/server/BluetoothService;->onStart()V
 PLcom/android/server/BluetoothService;->onUnlockUser(I)V
 HSPLcom/android/server/CachedDeviceStateService$1;-><init>(Lcom/android/server/CachedDeviceStateService;)V
-PLcom/android/server/CachedDeviceStateService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/CachedDeviceStateService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/CachedDeviceStateService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/CachedDeviceStateService;->access$000(Lcom/android/server/CachedDeviceStateService;)Lcom/android/internal/os/CachedDeviceState;
+HSPLcom/android/server/CachedDeviceStateService;->access$000(Lcom/android/server/CachedDeviceStateService;)Lcom/android/internal/os/CachedDeviceState;
 HSPLcom/android/server/CachedDeviceStateService;->onBootPhase(I)V
 HSPLcom/android/server/CachedDeviceStateService;->onStart()V
 HSPLcom/android/server/CachedDeviceStateService;->queryIsCharging()Z
 HSPLcom/android/server/CachedDeviceStateService;->queryScreenInteractive(Landroid/content/Context;)Z
+PLcom/android/server/CertBlacklister$BlacklistObserver$1;-><init>(Lcom/android/server/CertBlacklister$BlacklistObserver;Ljava/lang/String;)V
+PLcom/android/server/CertBlacklister$BlacklistObserver$1;->run()V
 HSPLcom/android/server/CertBlacklister$BlacklistObserver;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentResolver;)V
+PLcom/android/server/CertBlacklister$BlacklistObserver;->access$000(Lcom/android/server/CertBlacklister$BlacklistObserver;)Ljava/io/File;
+PLcom/android/server/CertBlacklister$BlacklistObserver;->access$100(Lcom/android/server/CertBlacklister$BlacklistObserver;)Ljava/lang/String;
+PLcom/android/server/CertBlacklister$BlacklistObserver;->getValue()Ljava/lang/String;
+PLcom/android/server/CertBlacklister$BlacklistObserver;->onChange(Z)V
+PLcom/android/server/CertBlacklister$BlacklistObserver;->writeBlacklist()V
 HSPLcom/android/server/CertBlacklister;-><clinit>()V
 HSPLcom/android/server/CertBlacklister;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/CertBlacklister;->buildPubkeyObserver(Landroid/content/ContentResolver;)Lcom/android/server/CertBlacklister$BlacklistObserver;
 HSPLcom/android/server/CertBlacklister;->buildSerialObserver(Landroid/content/ContentResolver;)Lcom/android/server/CertBlacklister$BlacklistObserver;
 HSPLcom/android/server/CertBlacklister;->registerObservers(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/ConnectivityService$1;-><init>(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService$1;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/ConnectivityService$1;->dumpHigh(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/ConnectivityService$1;->dumpNormal(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 HSPLcom/android/server/ConnectivityService$2;-><init>(Lcom/android/server/ConnectivityService;)V
 HPLcom/android/server/ConnectivityService$2;->interfaceClassDataActivityChanged(Ljava/lang/String;ZJ)V
 HSPLcom/android/server/ConnectivityService$3;-><init>(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService$3;->lambda$onNat64PrefixEvent$0$ConnectivityService$3(IZLjava/lang/String;I)V
 HPLcom/android/server/ConnectivityService$3;->onDnsEvent(IIILjava/lang/String;[Ljava/lang/String;IJI)V
-PLcom/android/server/ConnectivityService$3;->onPrivateDnsValidationEvent(ILjava/lang/String;Ljava/lang/String;Z)V
+HPLcom/android/server/ConnectivityService$3;->onNat64PrefixEvent(IZLjava/lang/String;I)V
+HPLcom/android/server/ConnectivityService$3;->onPrivateDnsValidationEvent(ILjava/lang/String;Ljava/lang/String;Z)V
 HSPLcom/android/server/ConnectivityService$4;-><init>(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService$4;->onRestrictBackgroundChanged(Z)V
 HSPLcom/android/server/ConnectivityService$4;->onUidRulesChanged(II)V
 HSPLcom/android/server/ConnectivityService$5;-><init>(Lcom/android/server/ConnectivityService;)V
-HPLcom/android/server/ConnectivityService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/ConnectivityService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/ConnectivityService$6;-><init>(Lcom/android/server/ConnectivityService;)V
 PLcom/android/server/ConnectivityService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/ConnectivityService$7;-><clinit>()V
 PLcom/android/server/ConnectivityService$CaptivePortalImpl;-><init>(Lcom/android/server/ConnectivityService;Landroid/net/Network;)V
 PLcom/android/server/ConnectivityService$CaptivePortalImpl;-><init>(Lcom/android/server/ConnectivityService;Landroid/net/Network;Lcom/android/server/ConnectivityService$1;)V
+PLcom/android/server/ConnectivityService$CaptivePortalImpl;->appRequest(I)V
 PLcom/android/server/ConnectivityService$CaptivePortalImpl;->appResponse(I)V
+PLcom/android/server/ConnectivityService$CaptivePortalImpl;->getNetworkMonitorManager(Landroid/net/Network;)Landroid/net/NetworkMonitorManager;
 PLcom/android/server/ConnectivityService$CaptivePortalImpl;->logEvent(ILjava/lang/String;)V
+HSPLcom/android/server/ConnectivityService$ConnectivityDiagnosticsHandler;-><init>(Lcom/android/server/ConnectivityService;Landroid/os/Looper;)V
+HSPLcom/android/server/ConnectivityService$ConnectivityDiagnosticsHandler;-><init>(Lcom/android/server/ConnectivityService;Landroid/os/Looper;Lcom/android/server/ConnectivityService$1;)V
+PLcom/android/server/ConnectivityService$ConnectivityDiagnosticsHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/ConnectivityService$ConnectivityReportEvent;-><init>(JLcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService$ConnectivityReportEvent;-><init>(JLcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/ConnectivityService$1;)V
+PLcom/android/server/ConnectivityService$ConnectivityReportEvent;->access$8100(Lcom/android/server/ConnectivityService$ConnectivityReportEvent;)Lcom/android/server/connectivity/NetworkAgentInfo;
+PLcom/android/server/ConnectivityService$ConnectivityReportEvent;->access$8200(Lcom/android/server/ConnectivityService$ConnectivityReportEvent;)J
 HSPLcom/android/server/ConnectivityService$Dependencies;-><init>()V
 PLcom/android/server/ConnectivityService$Dependencies;->getBatteryStatsService()Lcom/android/internal/app/IBatteryStats;
 HSPLcom/android/server/ConnectivityService$Dependencies;->getIpConnectivityMetrics()Landroid/net/IIpConnectivityMetrics;
 PLcom/android/server/ConnectivityService$Dependencies;->getMetricsLogger()Lcom/android/server/connectivity/IpConnectivityMetrics$Logger;
+HPLcom/android/server/ConnectivityService$Dependencies;->getNetworkStack()Landroid/net/NetworkStackClient;
 HSPLcom/android/server/ConnectivityService$Dependencies;->getSystemProperties()Lcom/android/server/connectivity/MockableSystemProperties;
 HSPLcom/android/server/ConnectivityService$Dependencies;->getTetheringManager()Landroid/net/TetheringManager;
 HSPLcom/android/server/ConnectivityService$Dependencies;->makeHandlerThread()Landroid/os/HandlerThread;
 HSPLcom/android/server/ConnectivityService$Dependencies;->makeMultinetworkPolicyTracker(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/Runnable;)Landroid/net/util/MultinetworkPolicyTracker;
 HSPLcom/android/server/ConnectivityService$Dependencies;->makeNetIdManager()Lcom/android/server/NetIdManager;
 HSPLcom/android/server/ConnectivityService$Dependencies;->makeProxyTracker(Landroid/content/Context;Landroid/os/Handler;)Lcom/android/server/connectivity/ProxyTracker;
+HPLcom/android/server/ConnectivityService$Dependencies;->queryUserAccess(II)Z
 HSPLcom/android/server/ConnectivityService$InternalHandler;-><init>(Lcom/android/server/ConnectivityService;Landroid/os/Looper;)V
 HSPLcom/android/server/ConnectivityService$InternalHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/ConnectivityService$LegacyTypeTracker;-><init>(Lcom/android/server/ConnectivityService;)V
-PLcom/android/server/ConnectivityService$LegacyTypeTracker;->add(ILcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService$LegacyTypeTracker;->add(ILcom/android/server/connectivity/NetworkAgentInfo;)V
 HSPLcom/android/server/ConnectivityService$LegacyTypeTracker;->addSupportedType(I)V
-PLcom/android/server/ConnectivityService$LegacyTypeTracker;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/ConnectivityService$LegacyTypeTracker;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 HPLcom/android/server/ConnectivityService$LegacyTypeTracker;->getNetworkForType(I)Lcom/android/server/connectivity/NetworkAgentInfo;
-PLcom/android/server/ConnectivityService$LegacyTypeTracker;->isTypeSupported(I)Z
-PLcom/android/server/ConnectivityService$LegacyTypeTracker;->maybeLogBroadcast(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkInfo$DetailedState;IZ)V
-PLcom/android/server/ConnectivityService$LegacyTypeTracker;->remove(ILcom/android/server/connectivity/NetworkAgentInfo;Z)V
+HSPLcom/android/server/ConnectivityService$LegacyTypeTracker;->isTypeSupported(I)Z
+HPLcom/android/server/ConnectivityService$LegacyTypeTracker;->maybeLogBroadcast(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkInfo$DetailedState;IZ)V
+PLcom/android/server/ConnectivityService$LegacyTypeTracker;->naiToString(Lcom/android/server/connectivity/NetworkAgentInfo;)Ljava/lang/String;
+HPLcom/android/server/ConnectivityService$LegacyTypeTracker;->remove(ILcom/android/server/connectivity/NetworkAgentInfo;Z)V
+HPLcom/android/server/ConnectivityService$LegacyTypeTracker;->remove(Lcom/android/server/connectivity/NetworkAgentInfo;Z)V
+HPLcom/android/server/ConnectivityService$LegacyTypeTracker;->update(Lcom/android/server/connectivity/NetworkAgentInfo;)V
 HSPLcom/android/server/ConnectivityService$NetworkFactoryInfo;-><init>(Ljava/lang/String;Landroid/os/Messenger;Lcom/android/internal/util/AsyncChannel;I)V
-PLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;-><init>(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;-><init>(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/ConnectivityService$1;)V
+HSPLcom/android/server/ConnectivityService$NetworkFactoryInfo;-><init>(Ljava/lang/String;Landroid/os/Messenger;Lcom/android/internal/util/AsyncChannel;ILandroid/os/IBinder$DeathRecipient;)V
+PLcom/android/server/ConnectivityService$NetworkFactoryInfo;->cancelRequest(Landroid/net/NetworkRequest;)V
+HSPLcom/android/server/ConnectivityService$NetworkFactoryInfo;->completeConnection()V
+HSPLcom/android/server/ConnectivityService$NetworkFactoryInfo;->connect(Landroid/content/Context;Landroid/os/Handler;)V
+HSPLcom/android/server/ConnectivityService$NetworkFactoryInfo;->isLegacyNetworkFactory()Z
+HSPLcom/android/server/ConnectivityService$NetworkFactoryInfo;->requestNetwork(Landroid/net/NetworkRequest;II)V
+HSPLcom/android/server/ConnectivityService$NetworkFactoryInfo;->sendMessageToNetworkProvider(IIILjava/lang/Object;)V
+HPLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;-><init>(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;-><init>(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/ConnectivityService$1;)V
 PLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;->getInterfaceVersion()I
-PLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;->hideProvisioningNotification()V
-PLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;->notifyNetworkTested(ILjava/lang/String;)V
+HPLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;->hideProvisioningNotification()V
+PLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;->notifyDataStallSuspected(JILandroid/os/PersistableBundle;)V
+HPLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;->notifyNetworkTested(ILjava/lang/String;)V
+PLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;->notifyNetworkTestedWithExtras(ILjava/lang/String;JLandroid/os/PersistableBundle;)V
+PLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;->notifyPrivateDnsConfigResolved(Landroid/net/PrivateDnsConfigParcel;)V
 HPLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;->notifyProbeStatusChanged(II)V
-PLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;->onNetworkMonitorCreated(Landroid/net/INetworkMonitor;)V
+HPLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;->onNetworkMonitorCreated(Landroid/net/INetworkMonitor;)V
 PLcom/android/server/ConnectivityService$NetworkMonitorCallbacks;->showProvisioningNotification(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/ConnectivityService$NetworkProviderInfo;-><init>(Ljava/lang/String;Landroid/os/Messenger;Lcom/android/internal/util/AsyncChannel;ILandroid/os/IBinder$DeathRecipient;)V
+HPLcom/android/server/ConnectivityService$NetworkProviderInfo;->cancelRequest(Landroid/net/NetworkRequest;)V
+HSPLcom/android/server/ConnectivityService$NetworkProviderInfo;->connect(Landroid/content/Context;Landroid/os/Handler;)V
+HSPLcom/android/server/ConnectivityService$NetworkProviderInfo;->isLegacyNetworkFactory()Z
+HSPLcom/android/server/ConnectivityService$NetworkProviderInfo;->requestNetwork(Landroid/net/NetworkRequest;II)V
+HSPLcom/android/server/ConnectivityService$NetworkProviderInfo;->sendMessageToNetworkProvider(IIILjava/lang/Object;)V
+HPLcom/android/server/ConnectivityService$NetworkReassignment$NetworkBgStatePair;-><init>(Lcom/android/server/connectivity/NetworkAgentInfo;Z)V
+HPLcom/android/server/ConnectivityService$NetworkReassignment$RequestReassignment;-><init>(Lcom/android/server/ConnectivityService$NetworkRequestInfo;Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HSPLcom/android/server/ConnectivityService$NetworkReassignment;-><init>()V
+HSPLcom/android/server/ConnectivityService$NetworkReassignment;-><init>(Lcom/android/server/ConnectivityService$1;)V
+HSPLcom/android/server/ConnectivityService$NetworkReassignment;->access$6600(Lcom/android/server/ConnectivityService$NetworkReassignment;Lcom/android/server/ConnectivityService$NetworkRequestInfo;)Lcom/android/server/ConnectivityService$NetworkReassignment$RequestReassignment;
+PLcom/android/server/ConnectivityService$NetworkReassignment;->access$7200(Lcom/android/server/ConnectivityService$NetworkReassignment;Lcom/android/server/ConnectivityService$NetworkRequestInfo;)Lcom/android/server/ConnectivityService$NetworkReassignment$RequestReassignment;
+HPLcom/android/server/ConnectivityService$NetworkReassignment;->addRematchedNetwork(Lcom/android/server/ConnectivityService$NetworkReassignment$NetworkBgStatePair;)V
+HPLcom/android/server/ConnectivityService$NetworkReassignment;->addRequestReassignment(Lcom/android/server/ConnectivityService$NetworkReassignment$RequestReassignment;)V
+HSPLcom/android/server/ConnectivityService$NetworkReassignment;->getReassignment(Lcom/android/server/ConnectivityService$NetworkRequestInfo;)Lcom/android/server/ConnectivityService$NetworkReassignment$RequestReassignment;
+HSPLcom/android/server/ConnectivityService$NetworkReassignment;->getRematchedNetworks()Ljava/lang/Iterable;
+HSPLcom/android/server/ConnectivityService$NetworkReassignment;->getRequestReassignments()Ljava/lang/Iterable;
+PLcom/android/server/ConnectivityService$NetworkRequestInfo;-><init>(Lcom/android/server/ConnectivityService;Landroid/net/NetworkRequest;Landroid/app/PendingIntent;)V
 HSPLcom/android/server/ConnectivityService$NetworkRequestInfo;-><init>(Lcom/android/server/ConnectivityService;Landroid/os/Messenger;Landroid/net/NetworkRequest;Landroid/os/IBinder;)V
-PLcom/android/server/ConnectivityService$NetworkRequestInfo;->binderDied()V
+HPLcom/android/server/ConnectivityService$NetworkRequestInfo;->binderDied()V
 HSPLcom/android/server/ConnectivityService$NetworkRequestInfo;->enforceRequestCountLimit()V
 HSPLcom/android/server/ConnectivityService$NetworkRequestInfo;->toString()Ljava/lang/String;
-PLcom/android/server/ConnectivityService$NetworkRequestInfo;->unlinkDeathRecipient()V
+HPLcom/android/server/ConnectivityService$NetworkRequestInfo;->unlinkDeathRecipient()V
 HSPLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;-><init>(Lcom/android/server/ConnectivityService;Landroid/os/Looper;)V
+PLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->getCaptivePortalMode()I
 HSPLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->handleNetworkTested(Lcom/android/server/connectivity/NetworkAgentInfo;ILjava/lang/String;)V
 HSPLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->maybeHandleAsyncChannelMessage(Landroid/os/Message;)Z
 HSPLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->maybeHandleNetworkAgentInfoMessage(Landroid/os/Message;)Z
 HSPLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->maybeHandleNetworkAgentMessage(Landroid/os/Message;)V
 HSPLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->maybeHandleNetworkFactoryMessage(Landroid/os/Message;)Z
 HSPLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->maybeHandleNetworkMonitorMessage(Landroid/os/Message;)Z
+PLcom/android/server/ConnectivityService$NetworkTestedResults;-><init>(IIJLjava/lang/String;)V
+PLcom/android/server/ConnectivityService$NetworkTestedResults;-><init>(IIJLjava/lang/String;Lcom/android/server/ConnectivityService$1;)V
+PLcom/android/server/ConnectivityService$NetworkTestedResults;->access$2100(Lcom/android/server/ConnectivityService$NetworkTestedResults;)I
+PLcom/android/server/ConnectivityService$NetworkTestedResults;->access$2200(Lcom/android/server/ConnectivityService$NetworkTestedResults;)I
+PLcom/android/server/ConnectivityService$NetworkTestedResults;->access$2300(Lcom/android/server/ConnectivityService$NetworkTestedResults;)Ljava/lang/String;
+PLcom/android/server/ConnectivityService$NetworkTestedResults;->access$2400(Lcom/android/server/ConnectivityService$NetworkTestedResults;)J
 HSPLcom/android/server/ConnectivityService$SettingsObserver;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/ConnectivityService$SettingsObserver;->observe(Landroid/net/Uri;I)V
+PLcom/android/server/ConnectivityService$SettingsObserver;->onChange(ZLandroid/net/Uri;)V
 PLcom/android/server/ConnectivityService$UnneededFor;-><clinit>()V
 PLcom/android/server/ConnectivityService$UnneededFor;-><init>(Ljava/lang/String;I)V
 PLcom/android/server/ConnectivityService$UnneededFor;->values()[Lcom/android/server/ConnectivityService$UnneededFor;
 HSPLcom/android/server/ConnectivityService;-><clinit>()V
 HSPLcom/android/server/ConnectivityService;-><init>(Landroid/content/Context;Landroid/os/INetworkManagementService;Landroid/net/INetworkStatsService;Landroid/net/INetworkPolicyManager;)V
 HSPLcom/android/server/ConnectivityService;-><init>(Landroid/content/Context;Landroid/os/INetworkManagementService;Landroid/net/INetworkStatsService;Landroid/net/INetworkPolicyManager;Landroid/net/IDnsResolver;Landroid/net/metrics/IpConnectivityLog;Landroid/net/INetd;Lcom/android/server/ConnectivityService$Dependencies;)V
+HPLcom/android/server/ConnectivityService;->access$000(Ljava/lang/String;)V
+PLcom/android/server/ConnectivityService;->access$100(Lcom/android/server/ConnectivityService;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 HSPLcom/android/server/ConnectivityService;->access$1000(Lcom/android/server/ConnectivityService;)Ljava/util/HashMap;
+HPLcom/android/server/ConnectivityService;->access$1000(Lcom/android/server/ConnectivityService;Landroid/os/Message;)V
+HSPLcom/android/server/ConnectivityService;->access$1100()Z
+PLcom/android/server/ConnectivityService;->access$1100(Lcom/android/server/ConnectivityService;Landroid/os/Message;)V
 HSPLcom/android/server/ConnectivityService;->access$1200()Z
+HPLcom/android/server/ConnectivityService;->access$1400(Lcom/android/server/ConnectivityService;ILcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkCapabilities;)V
+HPLcom/android/server/ConnectivityService;->access$1500(Lcom/android/server/ConnectivityService;ILcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkCapabilities;)V
+HPLcom/android/server/ConnectivityService;->access$1500(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkInfo;)V
+HPLcom/android/server/ConnectivityService;->access$1600(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkInfo;)V
+HPLcom/android/server/ConnectivityService;->access$1600(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkScore;)V
+HPLcom/android/server/ConnectivityService;->access$1700(I)Z
+PLcom/android/server/ConnectivityService;->access$1700(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkScore;)V
 PLcom/android/server/ConnectivityService;->access$1800(I)Z
+PLcom/android/server/ConnectivityService;->access$1800(Lcom/android/server/ConnectivityService;)Lcom/android/server/connectivity/KeepaliveTracker;
+PLcom/android/server/ConnectivityService;->access$1900(Lcom/android/server/ConnectivityService;)Lcom/android/server/connectivity/KeepaliveTracker;
+PLcom/android/server/ConnectivityService;->access$1900(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/connectivity/NetworkNotificationManager$NotificationType;)V
 HPLcom/android/server/ConnectivityService;->access$200(Lcom/android/server/ConnectivityService;IZJ)V
+PLcom/android/server/ConnectivityService;->access$2000(Lcom/android/server/ConnectivityService;)Lcom/android/server/ConnectivityService$Dependencies;
+PLcom/android/server/ConnectivityService;->access$2000(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/connectivity/NetworkNotificationManager$NotificationType;)V
+PLcom/android/server/ConnectivityService;->access$2100(Lcom/android/server/ConnectivityService;)Lcom/android/server/ConnectivityService$Dependencies;
+PLcom/android/server/ConnectivityService;->access$2100(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->access$2200(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->access$2300(Lcom/android/server/ConnectivityService;)Lcom/android/server/connectivity/NetworkNotificationManager;
+PLcom/android/server/ConnectivityService;->access$2300(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->access$2400(Lcom/android/server/ConnectivityService;)Lcom/android/server/connectivity/NetworkNotificationManager;
+PLcom/android/server/ConnectivityService;->access$2400(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->access$2500(Lcom/android/server/ConnectivityService;Landroid/net/Network;)V
+PLcom/android/server/ConnectivityService;->access$2500(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->access$2600(Lcom/android/server/ConnectivityService;Landroid/net/Network;)V
+PLcom/android/server/ConnectivityService;->access$2600(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->access$2700(Lcom/android/server/ConnectivityService;)Lcom/android/server/connectivity/NetworkNotificationManager;
+PLcom/android/server/ConnectivityService;->access$2700(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->access$2800(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/shared/PrivateDnsConfig;)V
+PLcom/android/server/ConnectivityService;->access$2900(Lcom/android/server/ConnectivityService;)Landroid/content/Context;
+PLcom/android/server/ConnectivityService;->access$2900(Lcom/android/server/ConnectivityService;)Lcom/android/server/ConnectivityService$Dependencies;
 HSPLcom/android/server/ConnectivityService;->access$300(Lcom/android/server/ConnectivityService;)Lcom/android/server/ConnectivityService$InternalHandler;
+HPLcom/android/server/ConnectivityService;->access$300(Lcom/android/server/ConnectivityService;IZJ)V
+PLcom/android/server/ConnectivityService;->access$3000(Lcom/android/server/ConnectivityService;)Landroid/content/Context;
+PLcom/android/server/ConnectivityService;->access$3000(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->access$3000(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;I)Z
+PLcom/android/server/ConnectivityService;->access$3100(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->access$3100(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;I)Z
+HPLcom/android/server/ConnectivityService;->access$3200(Lcom/android/server/ConnectivityService;)Lcom/android/server/ConnectivityService$NetworkStateTrackerHandler;
+HPLcom/android/server/ConnectivityService;->access$3200(Lcom/android/server/ConnectivityService;Landroid/net/NetworkRequest;IZ)V
+PLcom/android/server/ConnectivityService;->access$3200(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->access$3300(Lcom/android/server/ConnectivityService;)Lcom/android/server/ConnectivityService$NetworkStateTrackerHandler;
+PLcom/android/server/ConnectivityService;->access$3300(Lcom/android/server/ConnectivityService;Landroid/net/Network;)V
 PLcom/android/server/ConnectivityService;->access$3300(Lcom/android/server/ConnectivityService;Landroid/net/NetworkRequest;IZ)V
 PLcom/android/server/ConnectivityService;->access$3400(Lcom/android/server/ConnectivityService;)Lcom/android/server/ConnectivityService$NetworkStateTrackerHandler;
+PLcom/android/server/ConnectivityService;->access$3400(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService;->access$3500(Lcom/android/server/ConnectivityService;)Landroid/content/Context;
+PLcom/android/server/ConnectivityService;->access$3500(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService;->access$3500(Lcom/android/server/ConnectivityService;I)V
+PLcom/android/server/ConnectivityService;->access$3600(Lcom/android/server/ConnectivityService;I)V
+PLcom/android/server/ConnectivityService;->access$3600(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;I)Z
+HSPLcom/android/server/ConnectivityService;->access$3700(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkProviderInfo;)V
+PLcom/android/server/ConnectivityService;->access$3700(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->access$3800(Lcom/android/server/ConnectivityService;Landroid/os/Messenger;)V
+HSPLcom/android/server/ConnectivityService;->access$3800(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkFactoryInfo;)V
+HSPLcom/android/server/ConnectivityService;->access$3800(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkProviderInfo;)V
+PLcom/android/server/ConnectivityService;->access$3900(Lcom/android/server/ConnectivityService;)Lcom/android/server/ConnectivityService$NetworkStateTrackerHandler;
+PLcom/android/server/ConnectivityService;->access$3900(Lcom/android/server/ConnectivityService;Landroid/os/Messenger;)V
 HSPLcom/android/server/ConnectivityService;->access$3900(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkFactoryInfo;)V
+HPLcom/android/server/ConnectivityService;->access$3900(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/INetworkMonitor;)V
+PLcom/android/server/ConnectivityService;->access$400(Lcom/android/server/ConnectivityService;)Lcom/android/server/ConnectivityService$InternalHandler;
+HSPLcom/android/server/ConnectivityService;->access$4000(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
+PLcom/android/server/ConnectivityService;->access$4000(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/INetworkMonitor;)V
+PLcom/android/server/ConnectivityService;->access$4100(Lcom/android/server/ConnectivityService;Landroid/os/Message;)V
+HSPLcom/android/server/ConnectivityService;->access$4100(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
+PLcom/android/server/ConnectivityService;->access$4200(Lcom/android/server/ConnectivityService;I)V
+PLcom/android/server/ConnectivityService;->access$4200(Lcom/android/server/ConnectivityService;Landroid/os/Message;)V
 HSPLcom/android/server/ConnectivityService;->access$4200(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
+PLcom/android/server/ConnectivityService;->access$4300(Lcom/android/server/ConnectivityService;Landroid/app/PendingIntent;I)V
+PLcom/android/server/ConnectivityService;->access$4300(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
+PLcom/android/server/ConnectivityService;->access$4400(Lcom/android/server/ConnectivityService;Landroid/app/PendingIntent;I)V
+HPLcom/android/server/ConnectivityService;->access$4400(Lcom/android/server/ConnectivityService;Landroid/net/NetworkRequest;IZ)V
+PLcom/android/server/ConnectivityService;->access$4400(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkProviderInfo;)V
+HPLcom/android/server/ConnectivityService;->access$4500(Lcom/android/server/ConnectivityService;Landroid/net/NetworkRequest;IZ)V
+PLcom/android/server/ConnectivityService;->access$4500(Lcom/android/server/ConnectivityService;Landroid/os/Messenger;)V
+PLcom/android/server/ConnectivityService;->access$4600(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/INetworkMonitor;)V
+PLcom/android/server/ConnectivityService;->access$4700(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
+HSPLcom/android/server/ConnectivityService;->access$4800(Lcom/android/server/ConnectivityService;)V
 HSPLcom/android/server/ConnectivityService;->access$4900(Lcom/android/server/ConnectivityService;)V
+HPLcom/android/server/ConnectivityService;->access$4900(Lcom/android/server/ConnectivityService;Landroid/net/Network;IZ)V
+PLcom/android/server/ConnectivityService;->access$4900(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
 HPLcom/android/server/ConnectivityService;->access$500(Lcom/android/server/ConnectivityService;I)Lcom/android/server/connectivity/NetworkAgentInfo;
-PLcom/android/server/ConnectivityService;->access$5000(Lcom/android/server/ConnectivityService;Landroid/net/Network;IZ)V
+HPLcom/android/server/ConnectivityService;->access$5000(Lcom/android/server/ConnectivityService;Landroid/net/Network;IZ)V
+PLcom/android/server/ConnectivityService;->access$5100(Lcom/android/server/ConnectivityService;Landroid/net/NetworkRequest;IZ)V
+HPLcom/android/server/ConnectivityService;->access$5100(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationUpdate;)V
+HSPLcom/android/server/ConnectivityService;->access$5200(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService;->access$5200(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationUpdate;)V
 PLcom/android/server/ConnectivityService;->access$5300(Lcom/android/server/ConnectivityService;)V
+HSPLcom/android/server/ConnectivityService;->access$5300(Lcom/android/server/ConnectivityService;I)V
 PLcom/android/server/ConnectivityService;->access$5400(Lcom/android/server/ConnectivityService;I)V
+PLcom/android/server/ConnectivityService;->access$5500(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService;->access$5500(Lcom/android/server/ConnectivityService;I)V
+PLcom/android/server/ConnectivityService;->access$5600(Lcom/android/server/ConnectivityService;I)V
+PLcom/android/server/ConnectivityService;->access$5600(Lcom/android/server/ConnectivityService;Landroid/net/Network;IZ)V
+PLcom/android/server/ConnectivityService;->access$5700(Lcom/android/server/ConnectivityService;I)V
 PLcom/android/server/ConnectivityService;->access$5800(Lcom/android/server/ConnectivityService;I)V
+PLcom/android/server/ConnectivityService;->access$5800(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationUpdate;)V
+PLcom/android/server/ConnectivityService;->access$5800(Lcom/android/server/ConnectivityService;Ljava/lang/String;I)V
+PLcom/android/server/ConnectivityService;->access$5900(Lcom/android/server/ConnectivityService;)V
 PLcom/android/server/ConnectivityService;->access$5900(Lcom/android/server/ConnectivityService;Ljava/lang/String;I)V
-PLcom/android/server/ConnectivityService;->access$600(Lcom/android/server/ConnectivityService;)Landroid/net/NetworkRequest;
+HPLcom/android/server/ConnectivityService;->access$600(Lcom/android/server/ConnectivityService;)Landroid/net/NetworkRequest;
+HPLcom/android/server/ConnectivityService;->access$600(Lcom/android/server/ConnectivityService;I)Lcom/android/server/connectivity/NetworkAgentInfo;
+PLcom/android/server/ConnectivityService;->access$6000(Lcom/android/server/ConnectivityService;I)V
 PLcom/android/server/ConnectivityService;->access$6000(Lcom/android/server/ConnectivityService;Ljava/lang/String;I)V
+PLcom/android/server/ConnectivityService;->access$6000(Lcom/android/server/ConnectivityService;Ljava/lang/String;IZ)V
+HSPLcom/android/server/ConnectivityService;->access$6100(Lcom/android/server/ConnectivityService;Landroid/net/NetworkRequest;)V
 PLcom/android/server/ConnectivityService;->access$6100(Lcom/android/server/ConnectivityService;Ljava/lang/String;IZ)V
+HSPLcom/android/server/ConnectivityService;->access$6200(Lcom/android/server/ConnectivityService;)Landroid/util/SparseIntArray;
 HSPLcom/android/server/ConnectivityService;->access$6200(Lcom/android/server/ConnectivityService;Landroid/net/NetworkRequest;)V
 HSPLcom/android/server/ConnectivityService;->access$6300(Lcom/android/server/ConnectivityService;)Landroid/util/SparseIntArray;
+PLcom/android/server/ConnectivityService;->access$6400(Lcom/android/server/ConnectivityService;I)V
+PLcom/android/server/ConnectivityService;->access$6500(Lcom/android/server/ConnectivityService;Ljava/lang/String;I)V
+PLcom/android/server/ConnectivityService;->access$6600(Lcom/android/server/ConnectivityService;Ljava/lang/String;I)V
+PLcom/android/server/ConnectivityService;->access$6700(Lcom/android/server/ConnectivityService;Ljava/lang/String;IZ)V
+PLcom/android/server/ConnectivityService;->access$6800(Lcom/android/server/ConnectivityService;Landroid/net/NetworkRequest;)V
+PLcom/android/server/ConnectivityService;->access$6900(Lcom/android/server/ConnectivityService;)Landroid/util/SparseIntArray;
+HPLcom/android/server/ConnectivityService;->access$700(Lcom/android/server/ConnectivityService;)Landroid/net/NetworkRequest;
+PLcom/android/server/ConnectivityService;->access$700(Lcom/android/server/ConnectivityService;IZLjava/lang/String;I)V
+PLcom/android/server/ConnectivityService;->access$7600(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$ConnectivityReportEvent;Landroid/os/PersistableBundle;)V
+PLcom/android/server/ConnectivityService;->access$7700(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;JILandroid/os/PersistableBundle;)V
+PLcom/android/server/ConnectivityService;->access$7800(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Z)V
+PLcom/android/server/ConnectivityService;->access$800(Lcom/android/server/ConnectivityService;IZLjava/lang/String;I)V
+HSPLcom/android/server/ConnectivityService;->access$800(Lcom/android/server/ConnectivityService;Landroid/os/Message;)V
+HSPLcom/android/server/ConnectivityService;->access$900(Lcom/android/server/ConnectivityService;)Ljava/util/HashMap;
 HSPLcom/android/server/ConnectivityService;->access$900(Lcom/android/server/ConnectivityService;Landroid/os/Message;)V
+HPLcom/android/server/ConnectivityService;->addLegacyRouteToHost(Landroid/net/LinkProperties;Ljava/net/InetAddress;II)Z
 HPLcom/android/server/ConnectivityService;->addNetworkToLegacyTypeTracker(Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/ConnectivityService;->avoidBadWifi()Z
+PLcom/android/server/ConnectivityService;->applyBackgroundChangeForRematch(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->avoidBadWifi()Z
 HPLcom/android/server/ConnectivityService;->callCallbackForRequest(Lcom/android/server/ConnectivityService$NetworkRequestInfo;Lcom/android/server/connectivity/NetworkAgentInfo;II)V
+PLcom/android/server/ConnectivityService;->checkAnyPermissionOf(II[Ljava/lang/String;)Z
 HSPLcom/android/server/ConnectivityService;->checkAnyPermissionOf([Ljava/lang/String;)Z
+PLcom/android/server/ConnectivityService;->checkNetworkSignalStrengthWakeupPermission(II)Z
+HPLcom/android/server/ConnectivityService;->checkNetworkStackPermission()Z
 HSPLcom/android/server/ConnectivityService;->checkSettingsPermission()Z
+HPLcom/android/server/ConnectivityService;->checkSettingsPermission(II)Z
+HPLcom/android/server/ConnectivityService;->computeInitialReassignment()Lcom/android/server/ConnectivityService$NetworkReassignment;
 HPLcom/android/server/ConnectivityService;->computeRequestReassignmentForNetwork(Lcom/android/server/connectivity/NetworkAgentInfo;)Landroid/util/ArrayMap;
 HSPLcom/android/server/ConnectivityService;->createDefaultInternetRequestForTransport(ILandroid/net/NetworkRequest$Type;)Landroid/net/NetworkRequest;
 HSPLcom/android/server/ConnectivityService;->createDefaultNetworkCapabilitiesForUid(I)Landroid/net/NetworkCapabilities;
-PLcom/android/server/ConnectivityService;->createNativeNetwork(Lcom/android/server/connectivity/NetworkAgentInfo;)Z
-PLcom/android/server/ConnectivityService;->createVpnInfo(Lcom/android/server/connectivity/Vpn;)Lcom/android/internal/net/VpnInfo;
-PLcom/android/server/ConnectivityService;->destroyNativeNetwork(Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/ConnectivityService;->disconnectAndDestroyNetwork(Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/ConnectivityService;->doDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
+HPLcom/android/server/ConnectivityService;->createNativeNetwork(Lcom/android/server/connectivity/NetworkAgentInfo;)Z
+HPLcom/android/server/ConnectivityService;->createVpnInfo(Lcom/android/server/connectivity/Vpn;)Lcom/android/internal/net/VpnInfo;
+HPLcom/android/server/ConnectivityService;->decrementNetworkRequestPerUidCount(Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
+HPLcom/android/server/ConnectivityService;->destroyNativeNetwork(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->disallowedBecauseSystemCaller()Z
+HPLcom/android/server/ConnectivityService;->disconnectAndDestroyNetwork(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->doDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/ConnectivityService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/ConnectivityService;->dumpAvoidBadWifiSettings(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/ConnectivityService;->dumpNetworkDiagnostics(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/ConnectivityService;->dumpNetworks(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/ConnectivityService;->dumpNetworkRequests(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/ConnectivityService;->dumpNetworks(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/ConnectivityService;->encodeBool(Z)I
 HSPLcom/android/server/ConnectivityService;->enforceAccessPermission()V
-PLcom/android/server/ConnectivityService;->enforceAnyPermissionOf([Ljava/lang/String;)V
-PLcom/android/server/ConnectivityService;->enforceChangePermission()V
+PLcom/android/server/ConnectivityService;->enforceAirplaneModePermission()V
+HPLcom/android/server/ConnectivityService;->enforceAnyPermissionOf([Ljava/lang/String;)V
+HSPLcom/android/server/ConnectivityService;->enforceChangePermission()V
+HPLcom/android/server/ConnectivityService;->enforceConnectivityRestrictedNetworksPermission()V
 PLcom/android/server/ConnectivityService;->enforceControlAlwaysOnVpnPermission()V
-PLcom/android/server/ConnectivityService;->enforceCrossUserPermission(I)V
-PLcom/android/server/ConnectivityService;->enforceInternetPermission()V
-PLcom/android/server/ConnectivityService;->enforceMeteredApnPolicy(Landroid/net/NetworkCapabilities;)V
+HPLcom/android/server/ConnectivityService;->enforceCrossUserPermission(I)V
+HPLcom/android/server/ConnectivityService;->enforceInternetPermission()V
+PLcom/android/server/ConnectivityService;->enforceKeepalivePermission()V
+HSPLcom/android/server/ConnectivityService;->enforceMeteredApnPolicy(Landroid/net/NetworkCapabilities;)V
 HSPLcom/android/server/ConnectivityService;->enforceNetworkFactoryPermission()V
-PLcom/android/server/ConnectivityService;->enforceNetworkRequestPermissions(Landroid/net/NetworkCapabilities;)V
+HSPLcom/android/server/ConnectivityService;->enforceNetworkRequestPermissions(Landroid/net/NetworkCapabilities;)V
 PLcom/android/server/ConnectivityService;->enforceNetworkStackOrSettingsPermission()V
+PLcom/android/server/ConnectivityService;->enforceNetworkStackSettingsOrSetup()V
+PLcom/android/server/ConnectivityService;->enforceSettingsPermission()V
 PLcom/android/server/ConnectivityService;->enforceTetherAccessPermission()V
 HSPLcom/android/server/ConnectivityService;->ensureNetworkRequestHasType(Landroid/net/NetworkRequest;)V
-PLcom/android/server/ConnectivityService;->ensureNetworkTransitionWakelock(Ljava/lang/String;)V
+HPLcom/android/server/ConnectivityService;->ensureNetworkTransitionWakelock(Ljava/lang/String;)V
 HSPLcom/android/server/ConnectivityService;->ensureRequestableCapabilities(Landroid/net/NetworkCapabilities;)V
 HSPLcom/android/server/ConnectivityService;->ensureRunningOnConnectivityServiceThread()V
 HSPLcom/android/server/ConnectivityService;->ensureSufficientPermissionsForRequest(Landroid/net/NetworkCapabilities;II)V
 HSPLcom/android/server/ConnectivityService;->ensureValid(Landroid/net/NetworkCapabilities;)V
 HSPLcom/android/server/ConnectivityService;->ensureValidNetworkSpecifier(Landroid/net/NetworkCapabilities;)V
+PLcom/android/server/ConnectivityService;->establishVpn(Lcom/android/internal/net/VpnConfig;)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/ConnectivityService;->eventName(I)Ljava/lang/String;
 HSPLcom/android/server/ConnectivityService;->filterNetworkStateForUid(Landroid/net/NetworkState;IZ)V
-PLcom/android/server/ConnectivityService;->getActiveLinkProperties()Landroid/net/LinkProperties;
+HPLcom/android/server/ConnectivityService;->findExistingNetworkRequestInfo(Landroid/app/PendingIntent;)Lcom/android/server/ConnectivityService$NetworkRequestInfo;
+HPLcom/android/server/ConnectivityService;->getActiveLinkProperties()Landroid/net/LinkProperties;
 HPLcom/android/server/ConnectivityService;->getActiveNetwork()Landroid/net/Network;
 HSPLcom/android/server/ConnectivityService;->getActiveNetworkForUid(IZ)Landroid/net/Network;
 HSPLcom/android/server/ConnectivityService;->getActiveNetworkForUidInternal(IZ)Landroid/net/Network;
 HSPLcom/android/server/ConnectivityService;->getActiveNetworkInfo()Landroid/net/NetworkInfo;
-PLcom/android/server/ConnectivityService;->getAllNetworkInfo()[Landroid/net/NetworkInfo;
-PLcom/android/server/ConnectivityService;->getAllNetworkState()[Landroid/net/NetworkState;
+HPLcom/android/server/ConnectivityService;->getAllNetworkInfo()[Landroid/net/NetworkInfo;
+HPLcom/android/server/ConnectivityService;->getAllNetworkState()[Landroid/net/NetworkState;
 HPLcom/android/server/ConnectivityService;->getAllNetworks()[Landroid/net/Network;
-PLcom/android/server/ConnectivityService;->getAllVpnInfo()[Lcom/android/internal/net/VpnInfo;
-PLcom/android/server/ConnectivityService;->getAlwaysOnVpnPackage(I)Ljava/lang/String;
+HPLcom/android/server/ConnectivityService;->getAllVpnInfo()[Lcom/android/internal/net/VpnInfo;
+HPLcom/android/server/ConnectivityService;->getAlwaysOnVpnPackage(I)Ljava/lang/String;
 HSPLcom/android/server/ConnectivityService;->getDefaultNetwork()Lcom/android/server/connectivity/NetworkAgentInfo;
-PLcom/android/server/ConnectivityService;->getDefaultNetworkCapabilitiesForUser(I)[Landroid/net/NetworkCapabilities;
-PLcom/android/server/ConnectivityService;->getDefaultNetworks()[Landroid/net/Network;
+HPLcom/android/server/ConnectivityService;->getDefaultNetworkCapabilitiesForUser(I)[Landroid/net/NetworkCapabilities;
+HPLcom/android/server/ConnectivityService;->getDefaultNetworks()[Landroid/net/Network;
 PLcom/android/server/ConnectivityService;->getDefaultRequest()Landroid/net/NetworkRequest;
 HSPLcom/android/server/ConnectivityService;->getDnsResolver()Landroid/net/IDnsResolver;
 HPLcom/android/server/ConnectivityService;->getFilteredNetworkState(II)Landroid/net/NetworkState;
-PLcom/android/server/ConnectivityService;->getLinkProperties(Landroid/net/Network;)Landroid/net/LinkProperties;
+PLcom/android/server/ConnectivityService;->getGlobalProxy()Landroid/net/ProxyInfo;
+PLcom/android/server/ConnectivityService;->getLegacyVpnInfo(I)Lcom/android/internal/net/LegacyVpnInfo;
+HPLcom/android/server/ConnectivityService;->getLinkProperties(Landroid/net/Network;)Landroid/net/LinkProperties;
 HPLcom/android/server/ConnectivityService;->getLinkProperties(Lcom/android/server/connectivity/NetworkAgentInfo;)Landroid/net/LinkProperties;
 HPLcom/android/server/ConnectivityService;->getLinkPropertiesProxyInfo(Landroid/net/Network;)Landroid/net/ProxyInfo;
+PLcom/android/server/ConnectivityService;->getMatchingPermissionedCallbacks(Lcom/android/server/connectivity/NetworkAgentInfo;)Ljava/util/List;
+PLcom/android/server/ConnectivityService;->getMultipathPreference(Landroid/net/Network;)I
+PLcom/android/server/ConnectivityService;->getNetwork(Lcom/android/server/connectivity/NetworkAgentInfo;)Landroid/net/Network;
 HPLcom/android/server/ConnectivityService;->getNetworkAgentInfoForNetId(I)Lcom/android/server/connectivity/NetworkAgentInfo;
 HSPLcom/android/server/ConnectivityService;->getNetworkAgentInfoForNetwork(Landroid/net/Network;)Lcom/android/server/connectivity/NetworkAgentInfo;
 HSPLcom/android/server/ConnectivityService;->getNetworkCapabilities(Landroid/net/Network;)Landroid/net/NetworkCapabilities;
 HSPLcom/android/server/ConnectivityService;->getNetworkCapabilitiesInternal(Lcom/android/server/connectivity/NetworkAgentInfo;)Landroid/net/NetworkCapabilities;
 HPLcom/android/server/ConnectivityService;->getNetworkInfo(I)Landroid/net/NetworkInfo;
 HSPLcom/android/server/ConnectivityService;->getNetworkInfoForUid(Landroid/net/Network;IZ)Landroid/net/NetworkInfo;
-PLcom/android/server/ConnectivityService;->getNetworkPermission(Landroid/net/NetworkCapabilities;)I
-PLcom/android/server/ConnectivityService;->getNriForAppRequest(Landroid/net/NetworkRequest;ILjava/lang/String;)Lcom/android/server/ConnectivityService$NetworkRequestInfo;
+HPLcom/android/server/ConnectivityService;->getNetworkPermission(Landroid/net/NetworkCapabilities;)I
+HPLcom/android/server/ConnectivityService;->getNriForAppRequest(Landroid/net/NetworkRequest;ILjava/lang/String;)Lcom/android/server/ConnectivityService$NetworkRequestInfo;
 HSPLcom/android/server/ConnectivityService;->getProxyForNetwork(Landroid/net/Network;)Landroid/net/ProxyInfo;
-PLcom/android/server/ConnectivityService;->getSignalStrengthThresholds(Lcom/android/server/connectivity/NetworkAgentInfo;)Ljava/util/ArrayList;
+HPLcom/android/server/ConnectivityService;->getSignalStrengthThresholds(Lcom/android/server/connectivity/NetworkAgentInfo;)Ljava/util/ArrayList;
 PLcom/android/server/ConnectivityService;->getTetherableBluetoothRegexs()[Ljava/lang/String;
+PLcom/android/server/ConnectivityService;->getTetherableIfaces()[Ljava/lang/String;
 PLcom/android/server/ConnectivityService;->getTetherableUsbRegexs()[Ljava/lang/String;
 PLcom/android/server/ConnectivityService;->getTetherableWifiRegexs()[Ljava/lang/String;
 PLcom/android/server/ConnectivityService;->getTetheredIfaces()[Ljava/lang/String;
 HSPLcom/android/server/ConnectivityService;->getUnfilteredActiveNetworkState(I)Landroid/net/NetworkState;
-PLcom/android/server/ConnectivityService;->getVpnConfig(I)Lcom/android/internal/net/VpnConfig;
+HPLcom/android/server/ConnectivityService;->getVpnConfig(I)Lcom/android/internal/net/VpnConfig;
 HSPLcom/android/server/ConnectivityService;->getVpnUnderlyingNetworks(I)[Landroid/net/Network;
 HSPLcom/android/server/ConnectivityService;->handleAlwaysOnNetworkRequest(Landroid/net/NetworkRequest;Ljava/lang/String;Z)V
-PLcom/android/server/ConnectivityService;->handleAsyncChannelDisconnected(Landroid/os/Message;)V
+PLcom/android/server/ConnectivityService;->handleApplyDefaultProxy(Landroid/net/ProxyInfo;)V
+HPLcom/android/server/ConnectivityService;->handleAsyncChannelDisconnected(Landroid/os/Message;)V
 HSPLcom/android/server/ConnectivityService;->handleAsyncChannelHalfConnect(Landroid/os/Message;)V
 HSPLcom/android/server/ConnectivityService;->handleConfigureAlwaysOnNetworks()V
-PLcom/android/server/ConnectivityService;->handleNetworkUnvalidated(Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/ConnectivityService;->handlePromptUnvalidated(Landroid/net/Network;)V
-PLcom/android/server/ConnectivityService;->handleRegisterNetworkAgent(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/INetworkMonitor;)V
+PLcom/android/server/ConnectivityService;->handleDataStallSuspected(Lcom/android/server/connectivity/NetworkAgentInfo;JILandroid/os/PersistableBundle;)V
+PLcom/android/server/ConnectivityService;->handleFreshlyValidatedNetwork(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->handleLingerComplete(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->handleNat64PrefixEvent(IZLjava/lang/String;I)V
+PLcom/android/server/ConnectivityService;->handleNetworkConnectivityReported(Lcom/android/server/connectivity/NetworkAgentInfo;Z)V
+PLcom/android/server/ConnectivityService;->handleNetworkTestedWithExtras(Lcom/android/server/ConnectivityService$ConnectivityReportEvent;Landroid/os/PersistableBundle;)V
+HPLcom/android/server/ConnectivityService;->handleNetworkUnvalidated(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->handlePerNetworkPrivateDnsConfig(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/shared/PrivateDnsConfig;)V
+HPLcom/android/server/ConnectivityService;->handlePrivateDnsValidationUpdate(Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationUpdate;)V
+HPLcom/android/server/ConnectivityService;->handlePromptUnvalidated(Landroid/net/Network;)V
+HPLcom/android/server/ConnectivityService;->handleRegisterNetworkAgent(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/INetworkMonitor;)V
 HSPLcom/android/server/ConnectivityService;->handleRegisterNetworkFactory(Lcom/android/server/ConnectivityService$NetworkFactoryInfo;)V
+HSPLcom/android/server/ConnectivityService;->handleRegisterNetworkProvider(Lcom/android/server/ConnectivityService$NetworkProviderInfo;)V
 HSPLcom/android/server/ConnectivityService;->handleRegisterNetworkRequest(Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
-PLcom/android/server/ConnectivityService;->handleReleaseNetworkRequest(Landroid/net/NetworkRequest;IZ)V
-PLcom/android/server/ConnectivityService;->handleReleaseNetworkTransitionWakelock(I)V
+PLcom/android/server/ConnectivityService;->handleRegisterNetworkRequestWithIntent(Landroid/os/Message;)V
+HPLcom/android/server/ConnectivityService;->handleReleaseNetworkRequest(Landroid/net/NetworkRequest;IZ)V
+PLcom/android/server/ConnectivityService;->handleReleaseNetworkRequestWithIntent(Landroid/app/PendingIntent;I)V
+HPLcom/android/server/ConnectivityService;->handleReleaseNetworkTransitionWakelock(I)V
 HPLcom/android/server/ConnectivityService;->handleRemoveNetworkRequest(Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
 HPLcom/android/server/ConnectivityService;->handleReportNetworkConnectivity(Landroid/net/Network;IZ)V
+PLcom/android/server/ConnectivityService;->handleRestrictBackgroundChanged(Z)V
+PLcom/android/server/ConnectivityService;->handleSetAcceptUnvalidated(Landroid/net/Network;ZZ)V
+HPLcom/android/server/ConnectivityService;->handleTimedOutNetworkRequest(Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
 HSPLcom/android/server/ConnectivityService;->handleUidRulesChanged(II)V
-PLcom/android/server/ConnectivityService;->handleUpdateLinkProperties(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/LinkProperties;)V
+PLcom/android/server/ConnectivityService;->handleUnregisterNetworkFactory(Landroid/os/Messenger;)V
+HPLcom/android/server/ConnectivityService;->handleUnregisterNetworkProvider(Landroid/os/Messenger;)V
+HPLcom/android/server/ConnectivityService;->handleUpdateLinkProperties(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/LinkProperties;)V
 HSPLcom/android/server/ConnectivityService;->hasWifiNetworkListenPermission(Landroid/net/NetworkCapabilities;)Z
 HPLcom/android/server/ConnectivityService;->isActiveNetworkMetered()Z
+PLcom/android/server/ConnectivityService;->isAlwaysOnVpnPackageSupported(ILjava/lang/String;)Z
+HPLcom/android/server/ConnectivityService;->isDefaultNetwork(Lcom/android/server/connectivity/NetworkAgentInfo;)Z
 PLcom/android/server/ConnectivityService;->isDefaultRequest(Lcom/android/server/ConnectivityService$NetworkRequestInfo;)Z
-PLcom/android/server/ConnectivityService;->isNetworkSupported(I)Z
+PLcom/android/server/ConnectivityService;->isLiveNetworkAgent(Lcom/android/server/connectivity/NetworkAgentInfo;I)Z
+HSPLcom/android/server/ConnectivityService;->isNetworkSupported(I)Z
 HPLcom/android/server/ConnectivityService;->isNetworkWithLinkPropertiesBlocked(Landroid/net/LinkProperties;IZ)Z
-PLcom/android/server/ConnectivityService;->isSystem(I)Z
+HSPLcom/android/server/ConnectivityService;->isSystem(I)Z
 PLcom/android/server/ConnectivityService;->isTetheringSupported()Z
 PLcom/android/server/ConnectivityService;->isTetheringSupported(Ljava/lang/String;)Z
 HPLcom/android/server/ConnectivityService;->isUidNetworkingWithVpnBlocked(IIZZ)Z
+PLcom/android/server/ConnectivityService;->lambda$networksSortedById$1(Lcom/android/server/connectivity/NetworkAgentInfo;)I
+PLcom/android/server/ConnectivityService;->lambda$new$0$ConnectivityService()V
+PLcom/android/server/ConnectivityService;->lambda$registerNetworkProvider$5$ConnectivityService(Landroid/os/Messenger;)V
+HPLcom/android/server/ConnectivityService;->lambda$requestsSortedById$2(Lcom/android/server/ConnectivityService$NetworkRequestInfo;)I
+HPLcom/android/server/ConnectivityService;->lambda$setUnderlyingNetworksForVpn$7$ConnectivityService()V
 PLcom/android/server/ConnectivityService;->lambda$startCaptivePortalApp$3$ConnectivityService(Landroid/net/Network;)V
+PLcom/android/server/ConnectivityService;->lambda$startCaptivePortalAppInternal$4$ConnectivityService(Landroid/content/Intent;)V
+HPLcom/android/server/ConnectivityService;->linkPropertiesRestrictedForCallerPermissions(Landroid/net/LinkProperties;II)Landroid/net/LinkProperties;
 HSPLcom/android/server/ConnectivityService;->listenForNetwork(Landroid/net/NetworkCapabilities;Landroid/os/Messenger;Landroid/os/IBinder;)Landroid/net/NetworkRequest;
 HSPLcom/android/server/ConnectivityService;->log(Ljava/lang/String;)V
+PLcom/android/server/ConnectivityService;->logNetworkEvent(Lcom/android/server/connectivity/NetworkAgentInfo;I)V
 PLcom/android/server/ConnectivityService;->loge(Ljava/lang/String;)V
-PLcom/android/server/ConnectivityService;->makeDefault(Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/ConnectivityService;->makeGeneralIntent(Landroid/net/NetworkInfo;Ljava/lang/String;)Landroid/content/Intent;
+HPLcom/android/server/ConnectivityService;->makeDefault(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->makeGeneralIntent(Landroid/net/NetworkInfo;Ljava/lang/String;)Landroid/content/Intent;
 HSPLcom/android/server/ConnectivityService;->maybeLogBlockedNetworkInfo(Landroid/net/NetworkInfo;I)V
 HPLcom/android/server/ConnectivityService;->maybeLogBlockedStatusChanged(Lcom/android/server/ConnectivityService$NetworkRequestInfo;Landroid/net/Network;Z)V
-PLcom/android/server/ConnectivityService;->maybeNotifyNetworkBlocked(Lcom/android/server/connectivity/NetworkAgentInfo;ZZZZ)V
+HPLcom/android/server/ConnectivityService;->maybeNotifyNetworkBlocked(Lcom/android/server/connectivity/NetworkAgentInfo;ZZZZ)V
 HSPLcom/android/server/ConnectivityService;->maybeNotifyNetworkBlockedForNewUidRules(II)V
-PLcom/android/server/ConnectivityService;->mixInCapabilities(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkCapabilities;)Landroid/net/NetworkCapabilities;
+HPLcom/android/server/ConnectivityService;->maybeSanitizeLocationInfoForCaller(Landroid/net/NetworkCapabilities;I)V
+HPLcom/android/server/ConnectivityService;->mixInCapabilities(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkCapabilities;)Landroid/net/NetworkCapabilities;
+HPLcom/android/server/ConnectivityService;->mixInInfo(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkInfo;)Landroid/net/NetworkInfo;
 HPLcom/android/server/ConnectivityService;->networkCapabilitiesRestrictedForCallerPermissions(Landroid/net/NetworkCapabilities;II)Landroid/net/NetworkCapabilities;
+PLcom/android/server/ConnectivityService;->networkRequiresPrivateDnsValidation(Lcom/android/server/connectivity/NetworkAgentInfo;)Z
+PLcom/android/server/ConnectivityService;->networksSortedById()[Lcom/android/server/connectivity/NetworkAgentInfo;
+HSPLcom/android/server/ConnectivityService;->nextNetworkProviderId()I
 HSPLcom/android/server/ConnectivityService;->nextNetworkRequestId()I
-PLcom/android/server/ConnectivityService;->notifyIfacesChangedForNetworkStats()V
-PLcom/android/server/ConnectivityService;->notifyLockdownVpn(Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/ConnectivityService;->notifyNetworkAvailable(Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
+HPLcom/android/server/ConnectivityService;->notifyIfacesChangedForNetworkStats()V
+HPLcom/android/server/ConnectivityService;->notifyLockdownVpn(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->notifyNetworkAvailable(Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
+HPLcom/android/server/ConnectivityService;->notifyNetworkCallbacks(Lcom/android/server/connectivity/NetworkAgentInfo;I)V
 HPLcom/android/server/ConnectivityService;->notifyNetworkCallbacks(Lcom/android/server/connectivity/NetworkAgentInfo;II)V
-PLcom/android/server/ConnectivityService;->onPackageAdded(Ljava/lang/String;I)V
-PLcom/android/server/ConnectivityService;->onPackageRemoved(Ljava/lang/String;IZ)V
+HPLcom/android/server/ConnectivityService;->onPackageAdded(Ljava/lang/String;I)V
+HPLcom/android/server/ConnectivityService;->onPackageRemoved(Ljava/lang/String;IZ)V
 PLcom/android/server/ConnectivityService;->onPackageReplaced(Ljava/lang/String;I)V
-PLcom/android/server/ConnectivityService;->onUserStart(I)V
+PLcom/android/server/ConnectivityService;->onSendFinished(Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/ConnectivityService;->onUserAdded(I)V
+PLcom/android/server/ConnectivityService;->onUserRemoved(I)V
+HSPLcom/android/server/ConnectivityService;->onUserStart(I)V
+PLcom/android/server/ConnectivityService;->onUserStop(I)V
 PLcom/android/server/ConnectivityService;->onUserUnlocked(I)V
+PLcom/android/server/ConnectivityService;->pendingRequestForNetwork(Landroid/net/NetworkCapabilities;Landroid/app/PendingIntent;)Landroid/net/NetworkRequest;
+HPLcom/android/server/ConnectivityService;->prepareVpn(Ljava/lang/String;Ljava/lang/String;I)Z
+HPLcom/android/server/ConnectivityService;->processListenRequests(Lcom/android/server/connectivity/NetworkAgentInfo;)V
 HPLcom/android/server/ConnectivityService;->processNewlyLostListenRequests(Lcom/android/server/connectivity/NetworkAgentInfo;)V
 HPLcom/android/server/ConnectivityService;->processNewlySatisfiedListenRequests(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->putParcelable(Landroid/os/Bundle;Landroid/os/Parcelable;)V
 HSPLcom/android/server/ConnectivityService;->registerNetdEventCallback()V
-PLcom/android/server/ConnectivityService;->registerNetworkAgent(Landroid/os/Messenger;Landroid/net/NetworkInfo;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;ILandroid/net/NetworkMisc;I)I
+HPLcom/android/server/ConnectivityService;->registerNetworkAgent(Landroid/os/Messenger;Landroid/net/NetworkInfo;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;ILandroid/net/NetworkAgentConfig;I)Landroid/net/Network;
+HPLcom/android/server/ConnectivityService;->registerNetworkAgent(Landroid/os/Messenger;Landroid/net/NetworkInfo;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;ILandroid/net/NetworkMisc;I)I
+HPLcom/android/server/ConnectivityService;->registerNetworkAgent(Landroid/os/Messenger;Landroid/net/NetworkInfo;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;Landroid/net/NetworkScore;Landroid/net/NetworkAgentConfig;I)Landroid/net/Network;
 HSPLcom/android/server/ConnectivityService;->registerNetworkFactory(Landroid/os/Messenger;Ljava/lang/String;)I
+HSPLcom/android/server/ConnectivityService;->registerNetworkProvider(Landroid/os/Messenger;Ljava/lang/String;)I
 HSPLcom/android/server/ConnectivityService;->registerPrivateDnsSettingsCallbacks()V
 HSPLcom/android/server/ConnectivityService;->registerSettingsCallbacks()V
-PLcom/android/server/ConnectivityService;->releaseNetworkRequest(Landroid/net/NetworkRequest;)V
+HPLcom/android/server/ConnectivityService;->releaseNetworkRequest(Landroid/net/NetworkRequest;)V
+PLcom/android/server/ConnectivityService;->releasePendingNetworkRequest(Landroid/app/PendingIntent;)V
+PLcom/android/server/ConnectivityService;->releasePendingNetworkRequestWithDelay(Landroid/app/PendingIntent;)V
 HSPLcom/android/server/ConnectivityService;->rematchAllNetworksAndRequests()V
+PLcom/android/server/ConnectivityService;->rematchForAvoidBadWifiUpdate()V
+HPLcom/android/server/ConnectivityService;->rematchNetworkAndRequests(Lcom/android/server/ConnectivityService$NetworkReassignment;Lcom/android/server/connectivity/NetworkAgentInfo;J)V
 HPLcom/android/server/ConnectivityService;->rematchNetworkAndRequests(Lcom/android/server/connectivity/NetworkAgentInfo;J)V
 PLcom/android/server/ConnectivityService;->removeDataActivityTracking(Lcom/android/server/connectivity/NetworkAgentInfo;)V
 HPLcom/android/server/ConnectivityService;->reportNetworkConnectivity(Landroid/net/Network;Z)V
 HSPLcom/android/server/ConnectivityService;->requestNetwork(Landroid/net/NetworkCapabilities;Landroid/os/Messenger;ILandroid/os/IBinder;I)Landroid/net/NetworkRequest;
+HPLcom/android/server/ConnectivityService;->requestRouteToHostAddress(I[B)Z
+PLcom/android/server/ConnectivityService;->requestsSortedById()[Lcom/android/server/ConnectivityService$NetworkRequestInfo;
 HPLcom/android/server/ConnectivityService;->requiresVpnIsolation(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;)Z
 HSPLcom/android/server/ConnectivityService;->restrictBackgroundRequestForCaller(Landroid/net/NetworkCapabilities;)V
 HSPLcom/android/server/ConnectivityService;->restrictRequestUidsForCaller(Landroid/net/NetworkCapabilities;)V
-PLcom/android/server/ConnectivityService;->scheduleReleaseNetworkTransitionWakelock()V
-PLcom/android/server/ConnectivityService;->scheduleUnvalidatedPrompt(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->scheduleReleaseNetworkTransitionWakelock()V
+HPLcom/android/server/ConnectivityService;->scheduleUnvalidatedPrompt(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HSPLcom/android/server/ConnectivityService;->sendAllRequestsToFactory(Lcom/android/server/ConnectivityService$NetworkFactoryInfo;)V
+HSPLcom/android/server/ConnectivityService;->sendAllRequestsToProvider(Lcom/android/server/ConnectivityService$NetworkProviderInfo;)V
+HPLcom/android/server/ConnectivityService;->sendConnectedBroadcast(Landroid/net/NetworkInfo;)V
 HPLcom/android/server/ConnectivityService;->sendDataActivityBroadcast(IZJ)V
-PLcom/android/server/ConnectivityService;->sendLegacyNetworkBroadcast(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkInfo$DetailedState;I)V
-PLcom/android/server/ConnectivityService;->sendStickyBroadcast(Landroid/content/Intent;)V
+HPLcom/android/server/ConnectivityService;->sendGeneralBroadcast(Landroid/net/NetworkInfo;Ljava/lang/String;)V
+PLcom/android/server/ConnectivityService;->sendInetConditionBroadcast(Landroid/net/NetworkInfo;)V
+PLcom/android/server/ConnectivityService;->sendIntent(Landroid/app/PendingIntent;Landroid/content/Intent;)V
+HPLcom/android/server/ConnectivityService;->sendLegacyNetworkBroadcast(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkInfo$DetailedState;I)V
+PLcom/android/server/ConnectivityService;->sendPendingIntentForRequest(Lcom/android/server/ConnectivityService$NetworkRequestInfo;Lcom/android/server/connectivity/NetworkAgentInfo;I)V
+HPLcom/android/server/ConnectivityService;->sendStickyBroadcast(Landroid/content/Intent;)V
 HSPLcom/android/server/ConnectivityService;->sendUpdatedScoreToFactories(Landroid/net/NetworkRequest;Lcom/android/server/connectivity/NetworkAgentInfo;)V
 HPLcom/android/server/ConnectivityService;->sendUpdatedScoreToFactories(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->setAcceptUnvalidated(Landroid/net/Network;ZZ)V
 PLcom/android/server/ConnectivityService;->setAirplaneMode(Z)V
+PLcom/android/server/ConnectivityService;->setAlwaysOnVpnPackage(ILjava/lang/String;ZLjava/util/List;)Z
+PLcom/android/server/ConnectivityService;->setGlobalProxy(Landroid/net/ProxyInfo;)V
 HSPLcom/android/server/ConnectivityService;->setLockdownTracker(Lcom/android/server/net/LockdownVpnTracker;)V
-PLcom/android/server/ConnectivityService;->setupDataActivityTracking(Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/ConnectivityService;->shouldAvoidBadWifi()Z
+HPLcom/android/server/ConnectivityService;->setProvisioningNotificationVisible(ZILjava/lang/String;)V
+HPLcom/android/server/ConnectivityService;->setUnderlyingNetworksForVpn([Landroid/net/Network;)Z
+PLcom/android/server/ConnectivityService;->setVpnPackageAuthorization(Ljava/lang/String;II)V
+PLcom/android/server/ConnectivityService;->setVpnPackageAuthorization(Ljava/lang/String;IZ)V
+HPLcom/android/server/ConnectivityService;->setupDataActivityTracking(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->shouldAvoidBadWifi()Z
 PLcom/android/server/ConnectivityService;->shouldPromptUnvalidated(Lcom/android/server/connectivity/NetworkAgentInfo;)Z
 PLcom/android/server/ConnectivityService;->showNetworkNotification(Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/connectivity/NetworkNotificationManager$NotificationType;)V
 PLcom/android/server/ConnectivityService;->startAlwaysOnVpn(I)Z
 PLcom/android/server/ConnectivityService;->startCaptivePortalApp(Landroid/net/Network;)V
 PLcom/android/server/ConnectivityService;->startCaptivePortalAppInternal(Landroid/net/Network;Landroid/os/Bundle;)V
+PLcom/android/server/ConnectivityService;->startLegacyVpn(Lcom/android/internal/net/VpnProfile;)V
+HPLcom/android/server/ConnectivityService;->startNattKeepalive(Landroid/net/Network;ILandroid/net/ISocketKeepaliveCallback;Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/ConnectivityService;->startNattKeepaliveWithFd(Landroid/net/Network;Ljava/io/FileDescriptor;IILandroid/net/ISocketKeepaliveCallback;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/ConnectivityService;->stopKeepalive(Landroid/net/Network;I)V
 HSPLcom/android/server/ConnectivityService;->systemReady()V
+HPLcom/android/server/ConnectivityService;->teardownUnneededNetwork(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->throwIfLockdownEnabled()V
 HSPLcom/android/server/ConnectivityService;->toBool(I)Z
 HPLcom/android/server/ConnectivityService;->unneeded(Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/ConnectivityService$UnneededFor;)Z
-PLcom/android/server/ConnectivityService;->updateAllVpnsCapabilities()V
-PLcom/android/server/ConnectivityService;->updateCapabilities(ILcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkCapabilities;)V
+HPLcom/android/server/ConnectivityService;->unregisterNetworkProvider(Landroid/os/Messenger;)V
+HPLcom/android/server/ConnectivityService;->updateAllVpnsCapabilities()V
+HPLcom/android/server/ConnectivityService;->updateCapabilities(ILcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkCapabilities;)V
 PLcom/android/server/ConnectivityService;->updateDataActivityTracking(Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/ConnectivityService;->updateDnses(Landroid/net/LinkProperties;Landroid/net/LinkProperties;I)V
-PLcom/android/server/ConnectivityService;->updateInetCondition(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->updateDnses(Landroid/net/LinkProperties;Landroid/net/LinkProperties;I)V
+HPLcom/android/server/ConnectivityService;->updateInetCondition(Lcom/android/server/connectivity/NetworkAgentInfo;)V
 HPLcom/android/server/ConnectivityService;->updateInterfaces(Landroid/net/LinkProperties;Landroid/net/LinkProperties;ILandroid/net/NetworkCapabilities;I)V
 HSPLcom/android/server/ConnectivityService;->updateLegacyTypeTrackerAndVpnLockdownForRematch(Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/connectivity/NetworkAgentInfo;[Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/ConnectivityService;->updateLingerState(Lcom/android/server/connectivity/NetworkAgentInfo;J)V
-PLcom/android/server/ConnectivityService;->updateLinkProperties(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/LinkProperties;Landroid/net/LinkProperties;)V
+HPLcom/android/server/ConnectivityService;->updateLingerState(Lcom/android/server/connectivity/NetworkAgentInfo;J)V
+HPLcom/android/server/ConnectivityService;->updateLinkProperties(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/LinkProperties;Landroid/net/LinkProperties;)V
 HSPLcom/android/server/ConnectivityService;->updateLockdownVpn()Z
-PLcom/android/server/ConnectivityService;->updateMtu(Landroid/net/LinkProperties;Landroid/net/LinkProperties;)V
-PLcom/android/server/ConnectivityService;->updateNetworkInfo(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkInfo;)V
-PLcom/android/server/ConnectivityService;->updateNetworkScore(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkScore;)V
-PLcom/android/server/ConnectivityService;->updateRoutes(Landroid/net/LinkProperties;Landroid/net/LinkProperties;I)Z
-PLcom/android/server/ConnectivityService;->updateSignalStrengthThresholds(Lcom/android/server/connectivity/NetworkAgentInfo;Ljava/lang/String;Landroid/net/NetworkRequest;)V
-PLcom/android/server/ConnectivityService;->updateTcpBufferSizes(Ljava/lang/String;)V
-PLcom/android/server/ConnectivityService;->updateUids(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;)V
+HPLcom/android/server/ConnectivityService;->updateMtu(Landroid/net/LinkProperties;Landroid/net/LinkProperties;)V
+HPLcom/android/server/ConnectivityService;->updateNetworkInfo(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkInfo;)V
+HPLcom/android/server/ConnectivityService;->updateNetworkPermissions(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkCapabilities;)V
+HPLcom/android/server/ConnectivityService;->updateNetworkScore(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkScore;)V
+PLcom/android/server/ConnectivityService;->updatePrivateDns(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/shared/PrivateDnsConfig;)V
+HPLcom/android/server/ConnectivityService;->updateProxy(Landroid/net/LinkProperties;Landroid/net/LinkProperties;)V
+HPLcom/android/server/ConnectivityService;->updateRoutes(Landroid/net/LinkProperties;Landroid/net/LinkProperties;I)Z
+HPLcom/android/server/ConnectivityService;->updateSignalStrengthThresholds(Lcom/android/server/connectivity/NetworkAgentInfo;Ljava/lang/String;Landroid/net/NetworkRequest;)V
+HPLcom/android/server/ConnectivityService;->updateTcpBufferSizes(Ljava/lang/String;)V
+HPLcom/android/server/ConnectivityService;->updateUids(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;)V
+HPLcom/android/server/ConnectivityService;->updateVpnCapabilities(Lcom/android/server/connectivity/Vpn;Landroid/net/NetworkCapabilities;)V
 HPLcom/android/server/ConnectivityService;->updateVpnFiltering(Landroid/net/LinkProperties;Landroid/net/LinkProperties;Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/ConnectivityService;->wakeupModifyInterface(Ljava/lang/String;Landroid/net/NetworkCapabilities;Z)V
+HPLcom/android/server/ConnectivityService;->updateWakeOnLan(Landroid/net/LinkProperties;)V
+HPLcom/android/server/ConnectivityService;->wakeupModifyInterface(Ljava/lang/String;Landroid/net/NetworkCapabilities;Z)V
 HSPLcom/android/server/ConsumerIrService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/ContextHubSystemService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/ContextHubSystemService;->lambda$new$0$ContextHubSystemService(Landroid/content/Context;)V
@@ -1465,26 +2237,36 @@
 PLcom/android/server/CountryDetectorService$1;-><init>(Lcom/android/server/CountryDetectorService;)V
 PLcom/android/server/CountryDetectorService$2;-><init>(Lcom/android/server/CountryDetectorService;Landroid/location/CountryListener;)V
 PLcom/android/server/CountryDetectorService$2;->run()V
-PLcom/android/server/CountryDetectorService$Receiver;-><init>(Lcom/android/server/CountryDetectorService;Landroid/location/ICountryListener;)V
+HPLcom/android/server/CountryDetectorService$Receiver;-><init>(Lcom/android/server/CountryDetectorService;Landroid/location/ICountryListener;)V
 PLcom/android/server/CountryDetectorService$Receiver;->binderDied()V
+PLcom/android/server/CountryDetectorService$Receiver;->getListener()Landroid/location/ICountryListener;
 HSPLcom/android/server/CountryDetectorService;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/CountryDetectorService;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+PLcom/android/server/CountryDetectorService;->access$000(Lcom/android/server/CountryDetectorService;Landroid/os/IBinder;)V
 PLcom/android/server/CountryDetectorService;->addCountryListener(Landroid/location/ICountryListener;)V
-PLcom/android/server/CountryDetectorService;->addListener(Landroid/location/ICountryListener;)V
-PLcom/android/server/CountryDetectorService;->detectCountry()Landroid/location/Country;
+HPLcom/android/server/CountryDetectorService;->addListener(Landroid/location/ICountryListener;)V
+HPLcom/android/server/CountryDetectorService;->detectCountry()Landroid/location/Country;
 PLcom/android/server/CountryDetectorService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/CountryDetectorService;->initialize()V
-PLcom/android/server/CountryDetectorService;->removeListener(Landroid/os/IBinder;)V
+HSPLcom/android/server/CountryDetectorService;->initialize()V
+PLcom/android/server/CountryDetectorService;->lambda$initialize$1$CountryDetectorService(Landroid/location/Country;)V
+PLcom/android/server/CountryDetectorService;->lambda$initialize$2$CountryDetectorService(Landroid/location/Country;)V
+HPLcom/android/server/CountryDetectorService;->lambda$setCountryListener$3$CountryDetectorService(Landroid/location/CountryListener;)V
+HSPLcom/android/server/CountryDetectorService;->lambda$systemRunning$0$CountryDetectorService()V
+HSPLcom/android/server/CountryDetectorService;->loadCustomCountryDetectorIfAvailable(Ljava/lang/String;)Lcom/android/server/location/CountryDetectorBase;
+PLcom/android/server/CountryDetectorService;->notifyReceivers(Landroid/location/Country;)V
+HPLcom/android/server/CountryDetectorService;->removeListener(Landroid/os/IBinder;)V
 PLcom/android/server/CountryDetectorService;->run()V
 PLcom/android/server/CountryDetectorService;->setCountryListener(Landroid/location/CountryListener;)V
 HSPLcom/android/server/CountryDetectorService;->systemRunning()V
 HSPLcom/android/server/DiskStatsService;-><init>(Landroid/content/Context;)V
 HPLcom/android/server/DiskStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/DiskStatsService;->getRecentPerf()I
-PLcom/android/server/DiskStatsService;->reportCachedValues(Ljava/io/PrintWriter;)V
-PLcom/android/server/DiskStatsService;->reportCachedValuesProto(Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/server/DiskStatsService;->reportDiskWriteSpeed(Ljava/io/PrintWriter;)V
+PLcom/android/server/DiskStatsService;->hasOption([Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/DiskStatsService;->reportCachedValues(Ljava/io/PrintWriter;)V
+HPLcom/android/server/DiskStatsService;->reportCachedValuesProto(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/DiskStatsService;->reportDiskWriteSpeed(Ljava/io/PrintWriter;)V
 PLcom/android/server/DiskStatsService;->reportDiskWriteSpeedProto(Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/server/DiskStatsService;->reportFreeSpace(Ljava/io/File;Ljava/lang/String;Ljava/io/PrintWriter;Landroid/util/proto/ProtoOutputStream;I)V
+HPLcom/android/server/DiskStatsService;->reportFreeSpace(Ljava/io/File;Ljava/lang/String;Ljava/io/PrintWriter;Landroid/util/proto/ProtoOutputStream;I)V
 HSPLcom/android/server/DisplayThread;-><init>()V
 HSPLcom/android/server/DisplayThread;->ensureThreadLocked()V
 HSPLcom/android/server/DisplayThread;->get()Lcom/android/server/DisplayThread;
@@ -1495,24 +2277,29 @@
 HSPLcom/android/server/DockObserver$BinderService;-><init>(Lcom/android/server/DockObserver;Lcom/android/server/DockObserver$1;)V
 PLcom/android/server/DockObserver$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/DockObserver;-><init>(Landroid/content/Context;)V
+PLcom/android/server/DockObserver;->access$300(Lcom/android/server/DockObserver;)Ljava/lang/Object;
+PLcom/android/server/DockObserver;->access$500(Lcom/android/server/DockObserver;)Z
+PLcom/android/server/DockObserver;->access$600(Lcom/android/server/DockObserver;)I
+PLcom/android/server/DockObserver;->access$700(Lcom/android/server/DockObserver;)I
+PLcom/android/server/DockObserver;->access$800(Lcom/android/server/DockObserver;)I
 HSPLcom/android/server/DockObserver;->init()V
 HSPLcom/android/server/DockObserver;->onBootPhase(I)V
 HSPLcom/android/server/DockObserver;->onStart()V
-PLcom/android/server/DropBoxManagerService$1$1;-><init>(Lcom/android/server/DropBoxManagerService$1;)V
-PLcom/android/server/DropBoxManagerService$1$1;->run()V
+HSPLcom/android/server/DropBoxManagerService$1$1;-><init>(Lcom/android/server/DropBoxManagerService$1;)V
+HSPLcom/android/server/DropBoxManagerService$1$1;->run()V
 HSPLcom/android/server/DropBoxManagerService$1;-><init>(Lcom/android/server/DropBoxManagerService;)V
-PLcom/android/server/DropBoxManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/DropBoxManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/DropBoxManagerService$2;-><init>(Lcom/android/server/DropBoxManagerService;)V
 HSPLcom/android/server/DropBoxManagerService$2;->add(Landroid/os/DropBoxManager$Entry;)V
 PLcom/android/server/DropBoxManagerService$2;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HPLcom/android/server/DropBoxManagerService$2;->getNextEntry(Ljava/lang/String;JLjava/lang/String;)Landroid/os/DropBoxManager$Entry;
 HSPLcom/android/server/DropBoxManagerService$2;->isTagEnabled(Ljava/lang/String;)Z
 HSPLcom/android/server/DropBoxManagerService$3;-><init>(Lcom/android/server/DropBoxManagerService;Landroid/os/Handler;)V
-HPLcom/android/server/DropBoxManagerService$3;->onChange(Z)V
+HSPLcom/android/server/DropBoxManagerService$3;->onChange(Z)V
 HSPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;-><init>(Lcom/android/server/DropBoxManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;->createIntent(Ljava/lang/String;J)Landroid/content/Intent;
 HSPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;->handleMessage(Landroid/os/Message;)V
-HPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;->maybeDeferBroadcast(Ljava/lang/String;J)V
+HSPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;->maybeDeferBroadcast(Ljava/lang/String;J)V
 HSPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;->prepareAndSendBroadcast(Landroid/content/Intent;)V
 HSPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;->sendBroadcast(Ljava/lang/String;J)V
 HSPLcom/android/server/DropBoxManagerService$EntryFile;-><init>(J)V
@@ -1532,16 +2319,16 @@
 HSPLcom/android/server/DropBoxManagerService$FileList;->compareTo(Ljava/lang/Object;)I
 HSPLcom/android/server/DropBoxManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/DropBoxManagerService;-><init>(Landroid/content/Context;Ljava/io/File;Landroid/os/Looper;)V
-PLcom/android/server/DropBoxManagerService;->access$002(Lcom/android/server/DropBoxManagerService;J)J
-PLcom/android/server/DropBoxManagerService;->access$100(Lcom/android/server/DropBoxManagerService;)V
-PLcom/android/server/DropBoxManagerService;->access$1000(Lcom/android/server/DropBoxManagerService;)Landroid/content/BroadcastReceiver;
-PLcom/android/server/DropBoxManagerService;->access$200(Lcom/android/server/DropBoxManagerService;)J
+HSPLcom/android/server/DropBoxManagerService;->access$002(Lcom/android/server/DropBoxManagerService;J)J
+HSPLcom/android/server/DropBoxManagerService;->access$100(Lcom/android/server/DropBoxManagerService;)V
+HSPLcom/android/server/DropBoxManagerService;->access$1000(Lcom/android/server/DropBoxManagerService;)Landroid/content/BroadcastReceiver;
+HSPLcom/android/server/DropBoxManagerService;->access$200(Lcom/android/server/DropBoxManagerService;)J
 HSPLcom/android/server/DropBoxManagerService;->access$800(Lcom/android/server/DropBoxManagerService;)Z
-PLcom/android/server/DropBoxManagerService;->access$900(Lcom/android/server/DropBoxManagerService;)J
+HSPLcom/android/server/DropBoxManagerService;->access$900(Lcom/android/server/DropBoxManagerService;)J
 HSPLcom/android/server/DropBoxManagerService;->add(Landroid/os/DropBoxManager$Entry;)V
 HPLcom/android/server/DropBoxManagerService;->checkPermission(ILjava/lang/String;)Z
 HSPLcom/android/server/DropBoxManagerService;->createEntry(Ljava/io/File;Ljava/lang/String;I)J
-PLcom/android/server/DropBoxManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/DropBoxManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HPLcom/android/server/DropBoxManagerService;->dumpProtoLocked(Ljava/io/FileDescriptor;Ljava/util/ArrayList;)V
 HSPLcom/android/server/DropBoxManagerService;->enrollEntry(Lcom/android/server/DropBoxManagerService$EntryFile;)V
 HSPLcom/android/server/DropBoxManagerService;->getLowPriorityResourceConfigs()V
@@ -1554,8 +2341,11 @@
 HSPLcom/android/server/DropBoxManagerService;->trimToFit()J
 HSPLcom/android/server/DynamicSystemService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/DynamicSystemService;->binderDied()V
+PLcom/android/server/DynamicSystemService;->checkPermission()V
+PLcom/android/server/DynamicSystemService;->connect(Landroid/os/IBinder$DeathRecipient;)Landroid/gsi/IGsiService;
 PLcom/android/server/DynamicSystemService;->getGsiService()Landroid/gsi/IGsiService;
 PLcom/android/server/DynamicSystemService;->isInUse()Z
+PLcom/android/server/DynamicSystemService;->isInstalled()Z
 HSPLcom/android/server/EntropyMixer$1;-><init>(Lcom/android/server/EntropyMixer;Landroid/os/Looper;)V
 PLcom/android/server/EntropyMixer$1;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/EntropyMixer$2;-><init>(Lcom/android/server/EntropyMixer;)V
@@ -1563,61 +2353,75 @@
 HSPLcom/android/server/EntropyMixer;-><clinit>()V
 HSPLcom/android/server/EntropyMixer;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/EntropyMixer;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/EntropyMixer;->access$000(Lcom/android/server/EntropyMixer;)V
+PLcom/android/server/EntropyMixer;->access$100(Lcom/android/server/EntropyMixer;)V
+PLcom/android/server/EntropyMixer;->access$200(Lcom/android/server/EntropyMixer;)V
 HSPLcom/android/server/EntropyMixer;->addDeviceSpecificEntropy()V
 HSPLcom/android/server/EntropyMixer;->addHwRandomEntropy()V
 HSPLcom/android/server/EntropyMixer;->getSystemDir()Ljava/lang/String;
 HSPLcom/android/server/EntropyMixer;->loadInitialEntropy()V
 HSPLcom/android/server/EntropyMixer;->scheduleEntropyWriter()V
 HSPLcom/android/server/EntropyMixer;->writeEntropy()V
-PLcom/android/server/EventLogTags;->writeBatterySavingStats(IIIJIIJII)V
+HPLcom/android/server/EventLogTags;->writeBatterySaverMode(IIIIILjava/lang/String;I)V
+PLcom/android/server/EventLogTags;->writeBatterySaverSetting(I)V
+HPLcom/android/server/EventLogTags;->writeBatterySavingStats(IIIJIIJII)V
 HPLcom/android/server/EventLogTags;->writeDeviceIdle(ILjava/lang/String;)V
 HPLcom/android/server/EventLogTags;->writeDeviceIdleLight(ILjava/lang/String;)V
-PLcom/android/server/EventLogTags;->writeDeviceIdleLightStep()V
-PLcom/android/server/EventLogTags;->writeDeviceIdleOffComplete()V
-PLcom/android/server/EventLogTags;->writeDeviceIdleOffStart(Ljava/lang/String;)V
+HPLcom/android/server/EventLogTags;->writeDeviceIdleLightStep()V
+HPLcom/android/server/EventLogTags;->writeDeviceIdleOffComplete()V
+PLcom/android/server/EventLogTags;->writeDeviceIdleOffPhase(Ljava/lang/String;)V
+HPLcom/android/server/EventLogTags;->writeDeviceIdleOffStart(Ljava/lang/String;)V
 PLcom/android/server/EventLogTags;->writeDeviceIdleOnComplete()V
+PLcom/android/server/EventLogTags;->writeDeviceIdleOnPhase(Ljava/lang/String;)V
 PLcom/android/server/EventLogTags;->writeDeviceIdleOnStart()V
 PLcom/android/server/EventLogTags;->writeDeviceIdleStep()V
 PLcom/android/server/EventLogTags;->writeDeviceIdleWakeFromIdle(ILjava/lang/String;)V
-PLcom/android/server/EventLogTags;->writeNetstatsMobileSample(JJJJJJJJJJJJJ)V
-PLcom/android/server/EventLogTags;->writeNetstatsWifiSample(JJJJJJJJJJJJJ)V
+HPLcom/android/server/EventLogTags;->writeNetstatsMobileSample(JJJJJJJJJJJJJ)V
+HPLcom/android/server/EventLogTags;->writeNetstatsWifiSample(JJJJJJJJJJJJJ)V
 PLcom/android/server/EventLogTags;->writeNotificationActionClicked(Ljava/lang/String;IIIIII)V
-PLcom/android/server/EventLogTags;->writeNotificationAlert(Ljava/lang/String;III)V
-PLcom/android/server/EventLogTags;->writeNotificationCancel(IILjava/lang/String;ILjava/lang/String;IIIILjava/lang/String;)V
-PLcom/android/server/EventLogTags;->writeNotificationCancelAll(IILjava/lang/String;IIIILjava/lang/String;)V
-PLcom/android/server/EventLogTags;->writeNotificationCanceled(Ljava/lang/String;IIIIIILjava/lang/String;)V
-PLcom/android/server/EventLogTags;->writeNotificationClicked(Ljava/lang/String;IIIII)V
-PLcom/android/server/EventLogTags;->writeNotificationEnqueue(IILjava/lang/String;ILjava/lang/String;ILjava/lang/String;I)V
-PLcom/android/server/EventLogTags;->writeNotificationPanelHidden()V
-PLcom/android/server/EventLogTags;->writeNotificationPanelRevealed(I)V
-PLcom/android/server/EventLogTags;->writeNotificationVisibility(Ljava/lang/String;IIIII)V
+HSPLcom/android/server/EventLogTags;->writeNotificationAlert(Ljava/lang/String;III)V
+PLcom/android/server/EventLogTags;->writeNotificationAutogrouped(Ljava/lang/String;)V
+HPLcom/android/server/EventLogTags;->writeNotificationCancel(IILjava/lang/String;ILjava/lang/String;IIIILjava/lang/String;)V
+HSPLcom/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;->writeNotificationClicked(Ljava/lang/String;IIIII)V
+HSPLcom/android/server/EventLogTags;->writeNotificationEnqueue(IILjava/lang/String;ILjava/lang/String;ILjava/lang/String;I)V
+HPLcom/android/server/EventLogTags;->writeNotificationPanelHidden()V
+HPLcom/android/server/EventLogTags;->writeNotificationPanelRevealed(I)V
+HPLcom/android/server/EventLogTags;->writeNotificationVisibility(Ljava/lang/String;IIIII)V
 HSPLcom/android/server/EventLogTags;->writePmCriticalInfo(Ljava/lang/String;)V
-PLcom/android/server/EventLogTags;->writePowerScreenState(IIJII)V
+HPLcom/android/server/EventLogTags;->writePowerScreenState(IIJII)V
 PLcom/android/server/EventLogTags;->writePowerSleepRequested(I)V
+HSPLcom/android/server/EventLogTags;->writeRescueNote(IIJ)V
 HSPLcom/android/server/EventLogTags;->writeStorageState(Ljava/lang/String;IIJJ)V
 HSPLcom/android/server/EventLogTags;->writeStreamDevicesChanged(III)V
 PLcom/android/server/EventLogTags;->writeUserActivityTimeoutOverride(J)V
-PLcom/android/server/EventLogTags;->writeVolumeChanged(IIIILjava/lang/String;)V
-PLcom/android/server/ExplicitHealthCheckController$1;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
-PLcom/android/server/ExplicitHealthCheckController$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/EventLogTags;->writeVolumeChanged(IIIILjava/lang/String;)V
+HSPLcom/android/server/ExplicitHealthCheckController$1;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
+HSPLcom/android/server/ExplicitHealthCheckController$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 HSPLcom/android/server/ExplicitHealthCheckController;-><init>(Landroid/content/Context;)V
-PLcom/android/server/ExplicitHealthCheckController;->access$000(Lcom/android/server/ExplicitHealthCheckController;Landroid/os/IBinder;)V
-PLcom/android/server/ExplicitHealthCheckController;->actOnDifference(Ljava/util/Collection;Ljava/util/Collection;Ljava/util/function/Consumer;)V
-PLcom/android/server/ExplicitHealthCheckController;->bindService()V
-PLcom/android/server/ExplicitHealthCheckController;->getRequestedPackages(Ljava/util/function/Consumer;)V
-PLcom/android/server/ExplicitHealthCheckController;->getServiceComponentNameLocked()Landroid/content/ComponentName;
-PLcom/android/server/ExplicitHealthCheckController;->getServiceInfoLocked()Landroid/content/pm/ServiceInfo;
-PLcom/android/server/ExplicitHealthCheckController;->getSupportedPackages(Ljava/util/function/Consumer;)V
-PLcom/android/server/ExplicitHealthCheckController;->initState(Landroid/os/IBinder;)V
-PLcom/android/server/ExplicitHealthCheckController;->lambda$getRequestedPackages$5(Ljava/util/function/Consumer;Landroid/os/Bundle;)V
-PLcom/android/server/ExplicitHealthCheckController;->lambda$getSupportedPackages$4(Ljava/util/function/Consumer;Landroid/os/Bundle;)V
-PLcom/android/server/ExplicitHealthCheckController;->lambda$syncRequests$2$ExplicitHealthCheckController(Ljava/util/List;Ljava/util/Set;Ljava/util/List;)V
-PLcom/android/server/ExplicitHealthCheckController;->lambda$syncRequests$3$ExplicitHealthCheckController(Ljava/util/Set;Ljava/util/List;)V
-PLcom/android/server/ExplicitHealthCheckController;->prepareServiceLocked(Ljava/lang/String;)Z
+HSPLcom/android/server/ExplicitHealthCheckController;->access$000(Lcom/android/server/ExplicitHealthCheckController;Landroid/os/IBinder;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->actOnDifference(Ljava/util/Collection;Ljava/util/Collection;Ljava/util/function/Consumer;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->bindService()V
+PLcom/android/server/ExplicitHealthCheckController;->cancel(Ljava/lang/String;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->getRequestedPackages(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->getServiceComponentNameLocked()Landroid/content/ComponentName;
+HSPLcom/android/server/ExplicitHealthCheckController;->getServiceInfoLocked()Landroid/content/pm/ServiceInfo;
+HSPLcom/android/server/ExplicitHealthCheckController;->getSupportedPackages(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->initState(Landroid/os/IBinder;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->lambda$getRequestedPackages$5(Ljava/util/function/Consumer;Landroid/os/Bundle;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->lambda$getSupportedPackages$4(Ljava/util/function/Consumer;Landroid/os/Bundle;)V
+PLcom/android/server/ExplicitHealthCheckController;->lambda$initState$6$ExplicitHealthCheckController(Landroid/os/Bundle;)V
+PLcom/android/server/ExplicitHealthCheckController;->lambda$syncRequests$0$ExplicitHealthCheckController(Ljava/lang/String;)V
+PLcom/android/server/ExplicitHealthCheckController;->lambda$syncRequests$1$ExplicitHealthCheckController(Ljava/lang/String;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->lambda$syncRequests$2$ExplicitHealthCheckController(Ljava/util/List;Ljava/util/Set;Ljava/util/List;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->lambda$syncRequests$3$ExplicitHealthCheckController(Ljava/util/Set;Ljava/util/List;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->prepareServiceLocked(Ljava/lang/String;)Z
+HPLcom/android/server/ExplicitHealthCheckController;->request(Ljava/lang/String;)V
 HSPLcom/android/server/ExplicitHealthCheckController;->setCallbacks(Ljava/util/function/Consumer;Ljava/util/function/Consumer;Ljava/lang/Runnable;)V
 HSPLcom/android/server/ExplicitHealthCheckController;->setEnabled(Z)V
-PLcom/android/server/ExplicitHealthCheckController;->syncRequests(Ljava/util/Set;)V
-PLcom/android/server/ExplicitHealthCheckController;->unbindService()V
+HSPLcom/android/server/ExplicitHealthCheckController;->syncRequests(Ljava/util/Set;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->unbindService()V
 HSPLcom/android/server/ExtconStateObserver;-><init>()V
 HSPLcom/android/server/ExtconUEventObserver$ExtconInfo;->getExtconInfos(Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/ExtconUEventObserver;-><init>()V
@@ -1629,7 +2433,7 @@
 HSPLcom/android/server/FgThread;->getExecutor()Ljava/util/concurrent/Executor;
 HSPLcom/android/server/FgThread;->getHandler()Landroid/os/Handler;
 HSPLcom/android/server/GestureLauncherService$1;-><init>(Lcom/android/server/GestureLauncherService;)V
-PLcom/android/server/GestureLauncherService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/GestureLauncherService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/GestureLauncherService$2;-><init>(Lcom/android/server/GestureLauncherService;Landroid/os/Handler;)V
 HSPLcom/android/server/GestureLauncherService$CameraLiftTriggerEventListener;-><init>(Lcom/android/server/GestureLauncherService;)V
 HSPLcom/android/server/GestureLauncherService$CameraLiftTriggerEventListener;-><init>(Lcom/android/server/GestureLauncherService;Lcom/android/server/GestureLauncherService$1;)V
@@ -1637,13 +2441,13 @@
 HSPLcom/android/server/GestureLauncherService$GestureEventListener;-><init>(Lcom/android/server/GestureLauncherService;Lcom/android/server/GestureLauncherService$1;)V
 HSPLcom/android/server/GestureLauncherService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/GestureLauncherService;-><init>(Landroid/content/Context;Lcom/android/internal/logging/MetricsLogger;)V
-PLcom/android/server/GestureLauncherService;->access$202(Lcom/android/server/GestureLauncherService;I)I
-PLcom/android/server/GestureLauncherService;->access$300(Lcom/android/server/GestureLauncherService;)Landroid/database/ContentObserver;
-PLcom/android/server/GestureLauncherService;->access$400(Lcom/android/server/GestureLauncherService;)Landroid/content/Context;
-PLcom/android/server/GestureLauncherService;->access$500(Lcom/android/server/GestureLauncherService;)V
-PLcom/android/server/GestureLauncherService;->access$600(Lcom/android/server/GestureLauncherService;)V
-PLcom/android/server/GestureLauncherService;->handleCameraGesture(ZI)Z
-PLcom/android/server/GestureLauncherService;->interceptPowerKeyDown(Landroid/view/KeyEvent;ZLandroid/util/MutableBoolean;)Z
+HSPLcom/android/server/GestureLauncherService;->access$202(Lcom/android/server/GestureLauncherService;I)I
+HSPLcom/android/server/GestureLauncherService;->access$300(Lcom/android/server/GestureLauncherService;)Landroid/database/ContentObserver;
+HSPLcom/android/server/GestureLauncherService;->access$400(Lcom/android/server/GestureLauncherService;)Landroid/content/Context;
+HSPLcom/android/server/GestureLauncherService;->access$500(Lcom/android/server/GestureLauncherService;)V
+HSPLcom/android/server/GestureLauncherService;->access$600(Lcom/android/server/GestureLauncherService;)V
+HPLcom/android/server/GestureLauncherService;->handleCameraGesture(ZI)Z
+HPLcom/android/server/GestureLauncherService;->interceptPowerKeyDown(Landroid/view/KeyEvent;ZLandroid/util/MutableBoolean;)Z
 HSPLcom/android/server/GestureLauncherService;->isCameraDoubleTapPowerEnabled(Landroid/content/res/Resources;)Z
 HSPLcom/android/server/GestureLauncherService;->isCameraDoubleTapPowerSettingEnabled(Landroid/content/Context;I)Z
 HSPLcom/android/server/GestureLauncherService;->isCameraLaunchEnabled(Landroid/content/res/Resources;)Z
@@ -1661,60 +2465,69 @@
 HSPLcom/android/server/GnssManagerService;-><clinit>()V
 HSPLcom/android/server/GnssManagerService;-><init>(Lcom/android/server/LocationManagerService;Landroid/content/Context;Lcom/android/server/location/AbstractLocationProvider$LocationProviderManager;Lcom/android/server/location/LocationUsageLogger;)V
 HSPLcom/android/server/GnssManagerService;-><init>(Lcom/android/server/LocationManagerService;Landroid/content/Context;Lcom/android/server/location/GnssLocationProvider;Lcom/android/server/location/LocationUsageLogger;)V
-PLcom/android/server/GnssManagerService;->addGnssDataListenerLocked(Landroid/os/IInterface;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/location/RemoteListenerHelper;Landroid/util/ArrayMap;Ljava/util/function/Consumer;)Z
+HSPLcom/android/server/GnssManagerService;-><init>(Lcom/android/server/LocationManagerService;Landroid/content/Context;Lcom/android/server/location/LocationUsageLogger;)V
+HPLcom/android/server/GnssManagerService;->addGnssDataListenerLocked(Landroid/os/IInterface;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/location/RemoteListenerHelper;Landroid/util/ArrayMap;Ljava/util/function/Consumer;)Z
 PLcom/android/server/GnssManagerService;->addGnssMeasurementsListener(Landroid/location/IGnssMeasurementsListener;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/GnssManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/GnssManagerService;->getGnssCapabilities(Ljava/lang/String;)J
 HSPLcom/android/server/GnssManagerService;->getGnssLocationProvider()Lcom/android/server/location/GnssLocationProvider;
 HSPLcom/android/server/GnssManagerService;->getGpsGeofenceProxy()Landroid/location/IGpsGeofenceHardware;
-PLcom/android/server/GnssManagerService;->hasGnssPermissions(Ljava/lang/String;)Z
+HPLcom/android/server/GnssManagerService;->hasGnssPermissions(Ljava/lang/String;)Z
 HSPLcom/android/server/GnssManagerService;->isGnssSupported()Z
-PLcom/android/server/GnssManagerService;->lambda$registerUidListener$1$GnssManagerService(II)V
-PLcom/android/server/GnssManagerService;->lambda$registerUidListener$2$GnssManagerService(II)V
-HPLcom/android/server/GnssManagerService;->onForegroundChanged(IZ)V
+HSPLcom/android/server/GnssManagerService;->lambda$registerUidListener$1$GnssManagerService(II)V
+HSPLcom/android/server/GnssManagerService;->lambda$registerUidListener$2$GnssManagerService(II)V
+HSPLcom/android/server/GnssManagerService;->onForegroundChanged(IZ)V
 PLcom/android/server/GnssManagerService;->registerGnssStatusCallback(Landroid/location/IGnssStatusListener;Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/GnssManagerService;->registerUidListener()V
-PLcom/android/server/GnssManagerService;->removeGnssDataListener(Landroid/os/IInterface;Lcom/android/server/location/RemoteListenerHelper;Landroid/util/ArrayMap;)V
+HPLcom/android/server/GnssManagerService;->removeGnssDataListener(Landroid/os/IInterface;Lcom/android/server/location/RemoteListenerHelper;Landroid/util/ArrayMap;)V
 PLcom/android/server/GnssManagerService;->removeGnssMeasurementsListener(Landroid/location/IGnssMeasurementsListener;)V
 PLcom/android/server/GnssManagerService;->unregisterGnssStatusCallback(Landroid/location/IGnssStatusListener;)V
-HPLcom/android/server/GnssManagerService;->updateListenersOnForegroundChangedLocked(Landroid/util/ArrayMap;Lcom/android/server/location/RemoteListenerHelper;Ljava/util/function/Function;IZ)V
+HSPLcom/android/server/GnssManagerService;->updateListenersOnForegroundChangedLocked(Landroid/util/ArrayMap;Lcom/android/server/location/RemoteListenerHelper;Ljava/util/function/Function;IZ)V
 HSPLcom/android/server/GraphicsStatsService$1;-><init>(Lcom/android/server/GraphicsStatsService;)V
 PLcom/android/server/GraphicsStatsService$1;->handleMessage(Landroid/os/Message;)Z
-PLcom/android/server/GraphicsStatsService$ActiveBuffer;-><init>(Lcom/android/server/GraphicsStatsService;Landroid/view/IGraphicsStatsCallback;IILjava/lang/String;J)V
+HSPLcom/android/server/GraphicsStatsService$ActiveBuffer;-><init>(Lcom/android/server/GraphicsStatsService;Landroid/view/IGraphicsStatsCallback;IILjava/lang/String;J)V
 PLcom/android/server/GraphicsStatsService$ActiveBuffer;->binderDied()V
-PLcom/android/server/GraphicsStatsService$BufferInfo;-><init>(Lcom/android/server/GraphicsStatsService;Ljava/lang/String;JJ)V
-PLcom/android/server/GraphicsStatsService$HistoricalBuffer;-><init>(Lcom/android/server/GraphicsStatsService;Lcom/android/server/GraphicsStatsService$ActiveBuffer;)V
+PLcom/android/server/GraphicsStatsService$ActiveBuffer;->closeAllBuffers()V
+HSPLcom/android/server/GraphicsStatsService$BufferInfo;-><init>(Lcom/android/server/GraphicsStatsService;Ljava/lang/String;JJ)V
+HPLcom/android/server/GraphicsStatsService$HistoricalBuffer;-><init>(Lcom/android/server/GraphicsStatsService;Lcom/android/server/GraphicsStatsService$ActiveBuffer;)V
 HSPLcom/android/server/GraphicsStatsService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/GraphicsStatsService;->access$200(Lcom/android/server/GraphicsStatsService;)I
-PLcom/android/server/GraphicsStatsService;->access$300(Lcom/android/server/GraphicsStatsService;)[B
-PLcom/android/server/GraphicsStatsService;->addToSaveQueue(Lcom/android/server/GraphicsStatsService$ActiveBuffer;)V
+PLcom/android/server/GraphicsStatsService;->access$000(Lcom/android/server/GraphicsStatsService;Lcom/android/server/GraphicsStatsService$HistoricalBuffer;)V
+PLcom/android/server/GraphicsStatsService;->access$100(Lcom/android/server/GraphicsStatsService;)V
+HSPLcom/android/server/GraphicsStatsService;->access$200(Lcom/android/server/GraphicsStatsService;)I
+HSPLcom/android/server/GraphicsStatsService;->access$300(Lcom/android/server/GraphicsStatsService;)[B
+PLcom/android/server/GraphicsStatsService;->access$400(Lcom/android/server/GraphicsStatsService;Lcom/android/server/GraphicsStatsService$ActiveBuffer;)V
+HPLcom/android/server/GraphicsStatsService;->addToSaveQueue(Lcom/android/server/GraphicsStatsService$ActiveBuffer;)V
 PLcom/android/server/GraphicsStatsService;->deleteOldBuffers()V
-PLcom/android/server/GraphicsStatsService;->deleteRecursiveLocked(Ljava/io/File;)V
+HPLcom/android/server/GraphicsStatsService;->deleteRecursiveLocked(Ljava/io/File;)V
 PLcom/android/server/GraphicsStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/GraphicsStatsService;->dumpActiveLocked(JLjava/util/ArrayList;)Ljava/util/HashSet;
-PLcom/android/server/GraphicsStatsService;->dumpHistoricalLocked(JLjava/util/HashSet;)V
-PLcom/android/server/GraphicsStatsService;->fetchActiveBuffersLocked(Landroid/view/IGraphicsStatsCallback;IILjava/lang/String;J)Lcom/android/server/GraphicsStatsService$ActiveBuffer;
-PLcom/android/server/GraphicsStatsService;->getPfd(Landroid/os/MemoryFile;)Landroid/os/ParcelFileDescriptor;
-PLcom/android/server/GraphicsStatsService;->normalizeDate(J)Ljava/util/Calendar;
+HPLcom/android/server/GraphicsStatsService;->dumpActiveLocked(JLjava/util/ArrayList;)Ljava/util/HashSet;
+HPLcom/android/server/GraphicsStatsService;->dumpHistoricalLocked(JLjava/util/HashSet;)V
+HSPLcom/android/server/GraphicsStatsService;->fetchActiveBuffersLocked(Landroid/view/IGraphicsStatsCallback;IILjava/lang/String;J)Lcom/android/server/GraphicsStatsService$ActiveBuffer;
+HSPLcom/android/server/GraphicsStatsService;->getPfd(Landroid/os/MemoryFile;)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/GraphicsStatsService;->lambda$2EDVu98hsJvSwNgKvijVLSR3IrQ(Lcom/android/server/GraphicsStatsService;)V
+HSPLcom/android/server/GraphicsStatsService;->normalizeDate(J)Ljava/util/Calendar;
 PLcom/android/server/GraphicsStatsService;->onAlarm()V
-PLcom/android/server/GraphicsStatsService;->pathForApp(Lcom/android/server/GraphicsStatsService$BufferInfo;)Ljava/io/File;
+HPLcom/android/server/GraphicsStatsService;->pathForApp(Lcom/android/server/GraphicsStatsService$BufferInfo;)Ljava/io/File;
 PLcom/android/server/GraphicsStatsService;->processDied(Lcom/android/server/GraphicsStatsService$ActiveBuffer;)V
-PLcom/android/server/GraphicsStatsService;->requestBufferForProcess(Ljava/lang/String;Landroid/view/IGraphicsStatsCallback;)Landroid/os/ParcelFileDescriptor;
-PLcom/android/server/GraphicsStatsService;->requestBufferForProcessLocked(Landroid/view/IGraphicsStatsCallback;IILjava/lang/String;J)Landroid/os/ParcelFileDescriptor;
-PLcom/android/server/GraphicsStatsService;->saveBuffer(Lcom/android/server/GraphicsStatsService$HistoricalBuffer;)V
-PLcom/android/server/GraphicsStatsService;->scheduleRotateLocked()V
+HSPLcom/android/server/GraphicsStatsService;->requestBufferForProcess(Ljava/lang/String;Landroid/view/IGraphicsStatsCallback;)Landroid/os/ParcelFileDescriptor;
+HSPLcom/android/server/GraphicsStatsService;->requestBufferForProcessLocked(Landroid/view/IGraphicsStatsCallback;IILjava/lang/String;J)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/GraphicsStatsService;->saveBuffer(Lcom/android/server/GraphicsStatsService$HistoricalBuffer;)V
+HSPLcom/android/server/GraphicsStatsService;->scheduleRotateLocked()V
 HSPLcom/android/server/HardwarePropertiesManagerService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/HardwarePropertiesManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/HardwarePropertiesManagerService;->dumpTempValues(Ljava/lang/String;Ljava/io/PrintWriter;ILjava/lang/String;)V
-PLcom/android/server/HardwarePropertiesManagerService;->enforceHardwarePropertiesRetrievalAllowed(Ljava/lang/String;)V
+PLcom/android/server/HardwarePropertiesManagerService;->dumpTempValues(Ljava/lang/String;Ljava/io/PrintWriter;ILjava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/HardwarePropertiesManagerService;->enforceHardwarePropertiesRetrievalAllowed(Ljava/lang/String;)V
+PLcom/android/server/HardwarePropertiesManagerService;->getCallingPackageName()Ljava/lang/String;
 PLcom/android/server/HardwarePropertiesManagerService;->getCpuUsages(Ljava/lang/String;)[Landroid/os/CpuUsageInfo;
 PLcom/android/server/HardwarePropertiesManagerService;->getDeviceTemperatures(Ljava/lang/String;II)[F
 PLcom/android/server/HardwarePropertiesManagerService;->getFanSpeeds(Ljava/lang/String;)[F
 HSPLcom/android/server/IntentResolver$1;-><init>()V
 HSPLcom/android/server/IntentResolver$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/IntentResolver$IteratorWrapper;-><init>(Lcom/android/server/IntentResolver;Ljava/util/Iterator;)V
-PLcom/android/server/IntentResolver$IteratorWrapper;->hasNext()Z
-PLcom/android/server/IntentResolver$IteratorWrapper;->next()Landroid/content/IntentFilter;
-PLcom/android/server/IntentResolver$IteratorWrapper;->next()Ljava/lang/Object;
+HPLcom/android/server/IntentResolver$IteratorWrapper;->hasNext()Z
+HPLcom/android/server/IntentResolver$IteratorWrapper;->next()Landroid/content/IntentFilter;
+HPLcom/android/server/IntentResolver$IteratorWrapper;->next()Ljava/lang/Object;
 HSPLcom/android/server/IntentResolver;-><clinit>()V
 HSPLcom/android/server/IntentResolver;-><init>()V
 HSPLcom/android/server/IntentResolver;->addFilter(Landroid/content/IntentFilter;)V
@@ -1722,9 +2535,9 @@
 HSPLcom/android/server/IntentResolver;->allowFilterResult(Landroid/content/IntentFilter;Ljava/util/List;)Z
 HSPLcom/android/server/IntentResolver;->buildResolveList(Landroid/content/Intent;Landroid/util/FastImmutableArraySet;ZZLjava/lang/String;Ljava/lang/String;[Landroid/content/IntentFilter;Ljava/util/List;I)V
 HSPLcom/android/server/IntentResolver;->collectFilters([Landroid/content/IntentFilter;Landroid/content/IntentFilter;)Ljava/util/ArrayList;
-PLcom/android/server/IntentResolver;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Z
+HPLcom/android/server/IntentResolver;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Z
 PLcom/android/server/IntentResolver;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/IntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/content/IntentFilter;)V
+HPLcom/android/server/IntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/content/IntentFilter;)V
 HPLcom/android/server/IntentResolver;->dumpMap(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/util/ArrayMap;Ljava/lang/String;ZZ)Z
 HSPLcom/android/server/IntentResolver;->filterEquals(Landroid/content/IntentFilter;Landroid/content/IntentFilter;)Z
 PLcom/android/server/IntentResolver;->filterIterator()Ljava/util/Iterator;
@@ -1738,12 +2551,12 @@
 HSPLcom/android/server/IntentResolver;->queryIntentFromList(Landroid/content/Intent;Ljava/lang/String;ZLjava/util/ArrayList;I)Ljava/util/List;
 HSPLcom/android/server/IntentResolver;->register_intent_filter(Landroid/content/IntentFilter;Ljava/util/Iterator;Landroid/util/ArrayMap;Ljava/lang/String;)I
 HSPLcom/android/server/IntentResolver;->register_mime_types(Landroid/content/IntentFilter;Ljava/lang/String;)I
-PLcom/android/server/IntentResolver;->removeFilter(Landroid/content/IntentFilter;)V
-HPLcom/android/server/IntentResolver;->removeFilterInternal(Landroid/content/IntentFilter;)V
-HPLcom/android/server/IntentResolver;->remove_all_objects(Landroid/util/ArrayMap;Ljava/lang/String;Ljava/lang/Object;)V
+HSPLcom/android/server/IntentResolver;->removeFilter(Landroid/content/IntentFilter;)V
+HSPLcom/android/server/IntentResolver;->removeFilterInternal(Landroid/content/IntentFilter;)V
+HSPLcom/android/server/IntentResolver;->remove_all_objects(Landroid/util/ArrayMap;Ljava/lang/String;Ljava/lang/Object;)V
 HSPLcom/android/server/IntentResolver;->sortResults(Ljava/util/List;)V
-HPLcom/android/server/IntentResolver;->unregister_intent_filter(Landroid/content/IntentFilter;Ljava/util/Iterator;Landroid/util/ArrayMap;Ljava/lang/String;)I
-HPLcom/android/server/IntentResolver;->unregister_mime_types(Landroid/content/IntentFilter;Ljava/lang/String;)I
+HSPLcom/android/server/IntentResolver;->unregister_intent_filter(Landroid/content/IntentFilter;Ljava/util/Iterator;Landroid/util/ArrayMap;Ljava/lang/String;)I
+HSPLcom/android/server/IntentResolver;->unregister_mime_types(Landroid/content/IntentFilter;Ljava/lang/String;)I
 HPLcom/android/server/IntentResolver;->writeProtoMap(Landroid/util/proto/ProtoOutputStream;JLandroid/util/ArrayMap;)V
 HSPLcom/android/server/IoThread;-><init>()V
 HSPLcom/android/server/IoThread;->ensureThreadLocked()V
@@ -1766,8 +2579,8 @@
 HSPLcom/android/server/IpSecService;->isNetdAlive()Z
 HSPLcom/android/server/IpSecService;->systemReady()V
 HSPLcom/android/server/LocationManagerService$1;-><init>(Lcom/android/server/LocationManagerService;)V
-PLcom/android/server/LocationManagerService$1;->lambda$onOpChanged$0$LocationManagerService$1()V
-PLcom/android/server/LocationManagerService$1;->onOpChanged(ILjava/lang/String;)V
+HSPLcom/android/server/LocationManagerService$1;->lambda$onOpChanged$0$LocationManagerService$1()V
+HSPLcom/android/server/LocationManagerService$1;->onOpChanged(ILjava/lang/String;)V
 HSPLcom/android/server/LocationManagerService$2;-><init>(Lcom/android/server/LocationManagerService;)V
 PLcom/android/server/LocationManagerService$2;->onPackageDisappeared(Ljava/lang/String;I)V
 HSPLcom/android/server/LocationManagerService$3;-><init>(Lcom/android/server/LocationManagerService;)V
@@ -1775,138 +2588,273 @@
 HSPLcom/android/server/LocationManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/LocationManagerService$Lifecycle;->onBootPhase(I)V
 HSPLcom/android/server/LocationManagerService$Lifecycle;->onStart()V
+HSPLcom/android/server/LocationManagerService$LocalService;-><init>(Lcom/android/server/LocationManagerService;)V
+HSPLcom/android/server/LocationManagerService$LocalService;-><init>(Lcom/android/server/LocationManagerService;Lcom/android/server/LocationManagerService$1;)V
+HPLcom/android/server/LocationManagerService$LocalService;->isProviderPackage(Ljava/lang/String;)Z
 HSPLcom/android/server/LocationManagerService$LocationProviderManager;-><init>(Lcom/android/server/LocationManagerService;Ljava/lang/String;)V
 HSPLcom/android/server/LocationManagerService$LocationProviderManager;-><init>(Lcom/android/server/LocationManagerService;Ljava/lang/String;Lcom/android/server/LocationManagerService$1;)V
 HSPLcom/android/server/LocationManagerService$LocationProviderManager;->attachLocked(Lcom/android/server/location/AbstractLocationProvider;)V
+PLcom/android/server/LocationManagerService$LocationProviderManager;->dump(Ljava/io/FileDescriptor;Lcom/android/internal/util/IndentingPrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/LocationManagerService$LocationProviderManager;->dumpLocked(Ljava/io/FileDescriptor;Lcom/android/internal/util/IndentingPrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/LocationManagerService$LocationProviderManager;->getName()Ljava/lang/String;
+HPLcom/android/server/LocationManagerService$LocationProviderManager;->getPackages()Ljava/util/Set;
+PLcom/android/server/LocationManagerService$LocationProviderManager;->getPackagesLocked()Ljava/util/List;
+PLcom/android/server/LocationManagerService$LocationProviderManager;->getProperties()Lcom/android/internal/location/ProviderProperties;
 PLcom/android/server/LocationManagerService$LocationProviderManager;->getPropertiesLocked()Lcom/android/internal/location/ProviderProperties;
+HSPLcom/android/server/LocationManagerService$LocationProviderManager;->isEnabled()Z
+HSPLcom/android/server/LocationManagerService$LocationProviderManager;->isEnabled(I)Z
 PLcom/android/server/LocationManagerService$LocationProviderManager;->isMock()Z
 HPLcom/android/server/LocationManagerService$LocationProviderManager;->isPassiveLocked()Z
+HSPLcom/android/server/LocationManagerService$LocationProviderManager;->isUseable()Z
+HSPLcom/android/server/LocationManagerService$LocationProviderManager;->isUseable(I)Z
 HSPLcom/android/server/LocationManagerService$LocationProviderManager;->isUseableLocked()Z
 HSPLcom/android/server/LocationManagerService$LocationProviderManager;->isUseableLocked(I)Z
 HSPLcom/android/server/LocationManagerService$LocationProviderManager;->lambda$setRequest$0$LocationManagerService$LocationProviderManager(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+HSPLcom/android/server/LocationManagerService$LocationProviderManager;->onEnabledChangedLocked(I)V
 HPLcom/android/server/LocationManagerService$LocationProviderManager;->onReportLocation(Landroid/location/Location;)V
 HSPLcom/android/server/LocationManagerService$LocationProviderManager;->onSetEnabled(Z)V
 HSPLcom/android/server/LocationManagerService$LocationProviderManager;->onSetProperties(Lcom/android/internal/location/ProviderProperties;)V
+HSPLcom/android/server/LocationManagerService$LocationProviderManager;->onStateChanged(Lcom/android/server/location/AbstractLocationProvider$State;Lcom/android/server/location/AbstractLocationProvider$State;)V
 HSPLcom/android/server/LocationManagerService$LocationProviderManager;->onUseableChangedLocked(I)V
+PLcom/android/server/LocationManagerService$LocationProviderManager;->sendExtraCommand(IILjava/lang/String;Landroid/os/Bundle;)V
+HSPLcom/android/server/LocationManagerService$LocationProviderManager;->setRealProvider(Lcom/android/server/location/AbstractLocationProvider;)V
+HSPLcom/android/server/LocationManagerService$LocationProviderManager;->setRequest(Lcom/android/internal/location/ProviderRequest;)V
 HSPLcom/android/server/LocationManagerService$LocationProviderManager;->setRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+HSPLcom/android/server/LocationManagerService$PassiveLocationProviderManager;-><init>(Lcom/android/server/LocationManagerService;)V
+HSPLcom/android/server/LocationManagerService$PassiveLocationProviderManager;-><init>(Lcom/android/server/LocationManagerService;Lcom/android/server/LocationManagerService$1;)V
+HSPLcom/android/server/LocationManagerService$PassiveLocationProviderManager;->setRealProvider(Lcom/android/server/location/AbstractLocationProvider;)V
+HPLcom/android/server/LocationManagerService$PassiveLocationProviderManager;->updateLocation(Landroid/location/Location;)V
 HSPLcom/android/server/LocationManagerService$Receiver;-><init>(Lcom/android/server/LocationManagerService;Landroid/location/ILocationListener;Landroid/app/PendingIntent;IILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;ZLjava/lang/String;)V
 HSPLcom/android/server/LocationManagerService$Receiver;-><init>(Lcom/android/server/LocationManagerService;Landroid/location/ILocationListener;Landroid/app/PendingIntent;IILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;ZLjava/lang/String;Lcom/android/server/LocationManagerService$1;)V
+HPLcom/android/server/LocationManagerService$Receiver;->access$2800(Lcom/android/server/LocationManagerService$Receiver;)V
+HPLcom/android/server/LocationManagerService$Receiver;->access$2900(Lcom/android/server/LocationManagerService$Receiver;)V
+PLcom/android/server/LocationManagerService$Receiver;->access$2900(Lcom/android/server/LocationManagerService$Receiver;Ljava/lang/String;Z)Z
+HSPLcom/android/server/LocationManagerService$Receiver;->access$3000(Lcom/android/server/LocationManagerService$Receiver;)I
+PLcom/android/server/LocationManagerService$Receiver;->access$3000(Lcom/android/server/LocationManagerService$Receiver;Ljava/lang/String;Z)Z
+HSPLcom/android/server/LocationManagerService$Receiver;->access$3100(Lcom/android/server/LocationManagerService$Receiver;)I
+PLcom/android/server/LocationManagerService$Receiver;->access$3100(Lcom/android/server/LocationManagerService$Receiver;)V
 PLcom/android/server/LocationManagerService$Receiver;->access$3200(Lcom/android/server/LocationManagerService$Receiver;Ljava/lang/String;Z)Z
 HSPLcom/android/server/LocationManagerService$Receiver;->access$3300(Lcom/android/server/LocationManagerService$Receiver;)I
+PLcom/android/server/LocationManagerService$Receiver;->access$3900(Lcom/android/server/LocationManagerService$Receiver;)Ljava/lang/Object;
+PLcom/android/server/LocationManagerService$Receiver;->access$4000(Lcom/android/server/LocationManagerService$Receiver;)Ljava/lang/Object;
 PLcom/android/server/LocationManagerService$Receiver;->binderDied()V
 HPLcom/android/server/LocationManagerService$Receiver;->callLocationChangedLocked(Landroid/location/Location;)Z
-PLcom/android/server/LocationManagerService$Receiver;->callProviderEnabledLocked(Ljava/lang/String;Z)Z
+HPLcom/android/server/LocationManagerService$Receiver;->callProviderEnabledLocked(Ljava/lang/String;Z)Z
 PLcom/android/server/LocationManagerService$Receiver;->callRemovedLocked()V
-PLcom/android/server/LocationManagerService$Receiver;->clearPendingBroadcastsLocked()V
+HPLcom/android/server/LocationManagerService$Receiver;->clearPendingBroadcastsLocked()V
 HPLcom/android/server/LocationManagerService$Receiver;->decrementPendingBroadcastsLocked()V
+PLcom/android/server/LocationManagerService$Receiver;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/server/LocationManagerService$Receiver;->getListener()Landroid/location/ILocationListener;
 HPLcom/android/server/LocationManagerService$Receiver;->incrementPendingBroadcastsLocked()V
-PLcom/android/server/LocationManagerService$Receiver;->toString()Ljava/lang/String;
+PLcom/android/server/LocationManagerService$Receiver;->isListener()Z
+PLcom/android/server/LocationManagerService$Receiver;->isPendingIntent()Z
+HPLcom/android/server/LocationManagerService$Receiver;->onSendFinished(Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/LocationManagerService$Receiver;->toString()Ljava/lang/String;
 HSPLcom/android/server/LocationManagerService$Receiver;->updateMonitoring(Z)V
-PLcom/android/server/LocationManagerService$Receiver;->updateMonitoring(ZZI)Z
+HPLcom/android/server/LocationManagerService$Receiver;->updateMonitoring(ZZI)Z
 HSPLcom/android/server/LocationManagerService$UpdateRecord;-><init>(Lcom/android/server/LocationManagerService;Ljava/lang/String;Landroid/location/LocationRequest;Lcom/android/server/LocationManagerService$Receiver;)V
 HSPLcom/android/server/LocationManagerService$UpdateRecord;-><init>(Lcom/android/server/LocationManagerService;Ljava/lang/String;Landroid/location/LocationRequest;Lcom/android/server/LocationManagerService$Receiver;Lcom/android/server/LocationManagerService$1;)V
 HSPLcom/android/server/LocationManagerService$UpdateRecord;->access$1000(Lcom/android/server/LocationManagerService$UpdateRecord;)Lcom/android/server/LocationManagerService$Receiver;
-PLcom/android/server/LocationManagerService$UpdateRecord;->access$1100(Lcom/android/server/LocationManagerService$UpdateRecord;)Z
+HSPLcom/android/server/LocationManagerService$UpdateRecord;->access$1000(Lcom/android/server/LocationManagerService$UpdateRecord;)Z
+HSPLcom/android/server/LocationManagerService$UpdateRecord;->access$1100(Lcom/android/server/LocationManagerService$UpdateRecord;)Z
+PLcom/android/server/LocationManagerService$UpdateRecord;->access$1100(Lcom/android/server/LocationManagerService$UpdateRecord;Z)V
+PLcom/android/server/LocationManagerService$UpdateRecord;->access$1200(Lcom/android/server/LocationManagerService$UpdateRecord;Z)V
+HSPLcom/android/server/LocationManagerService$UpdateRecord;->access$3100(Lcom/android/server/LocationManagerService$UpdateRecord;)Landroid/location/LocationRequest;
+HSPLcom/android/server/LocationManagerService$UpdateRecord;->access$3200(Lcom/android/server/LocationManagerService$UpdateRecord;)Landroid/location/LocationRequest;
 HSPLcom/android/server/LocationManagerService$UpdateRecord;->access$3400(Lcom/android/server/LocationManagerService$UpdateRecord;)Landroid/location/LocationRequest;
+PLcom/android/server/LocationManagerService$UpdateRecord;->access$3800(Lcom/android/server/LocationManagerService$UpdateRecord;Z)V
+PLcom/android/server/LocationManagerService$UpdateRecord;->access$3900(Lcom/android/server/LocationManagerService$UpdateRecord;Z)V
+HPLcom/android/server/LocationManagerService$UpdateRecord;->access$4000(Lcom/android/server/LocationManagerService$UpdateRecord;)J
+HPLcom/android/server/LocationManagerService$UpdateRecord;->access$4100(Lcom/android/server/LocationManagerService$UpdateRecord;)J
+HPLcom/android/server/LocationManagerService$UpdateRecord;->access$4100(Lcom/android/server/LocationManagerService$UpdateRecord;)Landroid/location/Location;
 PLcom/android/server/LocationManagerService$UpdateRecord;->access$4100(Lcom/android/server/LocationManagerService$UpdateRecord;Z)V
+PLcom/android/server/LocationManagerService$UpdateRecord;->access$4102(Lcom/android/server/LocationManagerService$UpdateRecord;Landroid/location/Location;)Landroid/location/Location;
+HPLcom/android/server/LocationManagerService$UpdateRecord;->access$4200(Lcom/android/server/LocationManagerService$UpdateRecord;)Landroid/location/Location;
+HPLcom/android/server/LocationManagerService$UpdateRecord;->access$4202(Lcom/android/server/LocationManagerService$UpdateRecord;Landroid/location/Location;)Landroid/location/Location;
 HPLcom/android/server/LocationManagerService$UpdateRecord;->access$4300(Lcom/android/server/LocationManagerService$UpdateRecord;)J
 HPLcom/android/server/LocationManagerService$UpdateRecord;->access$4400(Lcom/android/server/LocationManagerService$UpdateRecord;)Landroid/location/Location;
 PLcom/android/server/LocationManagerService$UpdateRecord;->access$4402(Lcom/android/server/LocationManagerService$UpdateRecord;Landroid/location/Location;)Landroid/location/Location;
-PLcom/android/server/LocationManagerService$UpdateRecord;->disposeLocked(Z)V
-PLcom/android/server/LocationManagerService$UpdateRecord;->toString()Ljava/lang/String;
+HSPLcom/android/server/LocationManagerService$UpdateRecord;->access$900(Lcom/android/server/LocationManagerService$UpdateRecord;)Lcom/android/server/LocationManagerService$Receiver;
+HPLcom/android/server/LocationManagerService$UpdateRecord;->disposeLocked(Z)V
+HPLcom/android/server/LocationManagerService$UpdateRecord;->toString()Ljava/lang/String;
+PLcom/android/server/LocationManagerService$UpdateRecord;->updateForeground(Z)V
 HSPLcom/android/server/LocationManagerService;-><clinit>()V
 HSPLcom/android/server/LocationManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/LocationManagerService;-><init>(Landroid/content/Context;Lcom/android/server/LocationManagerService$1;)V
 HSPLcom/android/server/LocationManagerService;->access$100(Lcom/android/server/LocationManagerService;)V
+HSPLcom/android/server/LocationManagerService;->access$1300(Lcom/android/server/LocationManagerService;)Landroid/content/Context;
 HSPLcom/android/server/LocationManagerService;->access$1400(Lcom/android/server/LocationManagerService;)Landroid/content/Context;
+HPLcom/android/server/LocationManagerService;->access$1400(Lcom/android/server/LocationManagerService;Landroid/location/Location;Lcom/android/server/LocationManagerService$LocationProviderManager;)V
 HSPLcom/android/server/LocationManagerService;->access$1500(Lcom/android/server/LocationManagerService;)I
+HPLcom/android/server/LocationManagerService;->access$1500(Lcom/android/server/LocationManagerService;Landroid/location/Location;Lcom/android/server/LocationManagerService$LocationProviderManager;)V
 PLcom/android/server/LocationManagerService;->access$1600(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/PassiveProvider;
+HSPLcom/android/server/LocationManagerService;->access$1600(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/UserInfoHelper;
+HSPLcom/android/server/LocationManagerService;->access$1600(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/UserInfoStore;
+HSPLcom/android/server/LocationManagerService;->access$1700(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/LocationSettingsStore;
+HSPLcom/android/server/LocationManagerService;->access$1700(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/SettingsHelper;
+HSPLcom/android/server/LocationManagerService;->access$1700(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/UserInfoStore;
 HPLcom/android/server/LocationManagerService;->access$1700(Lcom/android/server/LocationManagerService;Landroid/location/Location;Lcom/android/server/LocationManagerService$LocationProviderManager;)V
+HSPLcom/android/server/LocationManagerService;->access$1800(Lcom/android/server/LocationManagerService;)Landroid/content/Context;
+HSPLcom/android/server/LocationManagerService;->access$1800(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/LocationSettingsStore;
+PLcom/android/server/LocationManagerService;->access$1800(Lcom/android/server/LocationManagerService;)Ljava/util/HashMap;
+PLcom/android/server/LocationManagerService;->access$1900(Lcom/android/server/LocationManagerService;)Ljava/util/HashMap;
 PLcom/android/server/LocationManagerService;->access$1900(Lcom/android/server/LocationManagerService;Ljava/lang/String;)Lcom/android/server/LocationManagerService$LocationProviderManager;
 HSPLcom/android/server/LocationManagerService;->access$200(Lcom/android/server/LocationManagerService;)V
 HSPLcom/android/server/LocationManagerService;->access$2000(Lcom/android/server/LocationManagerService;)Ljava/util/ArrayList;
+PLcom/android/server/LocationManagerService;->access$2000(Lcom/android/server/LocationManagerService;)Ljava/util/HashMap;
+HSPLcom/android/server/LocationManagerService;->access$2000(Lcom/android/server/LocationManagerService;Lcom/android/server/LocationManagerService$LocationProviderManager;)V
 HSPLcom/android/server/LocationManagerService;->access$2100(Lcom/android/server/LocationManagerService;I)Z
+HSPLcom/android/server/LocationManagerService;->access$2100(Lcom/android/server/LocationManagerService;II)I
+HSPLcom/android/server/LocationManagerService;->access$2100(Lcom/android/server/LocationManagerService;Lcom/android/server/LocationManagerService$LocationProviderManager;)V
+HSPLcom/android/server/LocationManagerService;->access$2200(Lcom/android/server/LocationManagerService;)Landroid/os/PowerManager;
 PLcom/android/server/LocationManagerService;->access$2200(Lcom/android/server/LocationManagerService;)Ljava/util/HashMap;
+HSPLcom/android/server/LocationManagerService;->access$2200(Lcom/android/server/LocationManagerService;II)I
+HSPLcom/android/server/LocationManagerService;->access$2300(Lcom/android/server/LocationManagerService;)Landroid/os/PowerManager;
 PLcom/android/server/LocationManagerService;->access$2300(Lcom/android/server/LocationManagerService;)Ljava/util/HashMap;
+HPLcom/android/server/LocationManagerService;->access$2300(Lcom/android/server/LocationManagerService;Ljava/lang/String;)Lcom/android/server/LocationManagerService$LocationProviderManager;
 HSPLcom/android/server/LocationManagerService;->access$2400(Lcom/android/server/LocationManagerService;Lcom/android/server/LocationManagerService$LocationProviderManager;)V
+HPLcom/android/server/LocationManagerService;->access$2400(Lcom/android/server/LocationManagerService;Lcom/android/server/LocationManagerService$UpdateRecord;)Z
+HPLcom/android/server/LocationManagerService;->access$2400(Lcom/android/server/LocationManagerService;Ljava/lang/String;)Lcom/android/server/LocationManagerService$LocationProviderManager;
+PLcom/android/server/LocationManagerService;->access$2500(Lcom/android/server/LocationManagerService;)Landroid/app/AppOpsManager;
 HSPLcom/android/server/LocationManagerService;->access$2500(Lcom/android/server/LocationManagerService;II)I
+PLcom/android/server/LocationManagerService;->access$2500(Lcom/android/server/LocationManagerService;Lcom/android/server/LocationManagerService$UpdateRecord;)Z
+PLcom/android/server/LocationManagerService;->access$2600(Lcom/android/server/LocationManagerService;)Landroid/app/AppOpsManager;
 HSPLcom/android/server/LocationManagerService;->access$2600(Lcom/android/server/LocationManagerService;)Landroid/os/PowerManager;
+PLcom/android/server/LocationManagerService;->access$2600(Lcom/android/server/LocationManagerService;I)Ljava/lang/String;
+PLcom/android/server/LocationManagerService;->access$2700(Lcom/android/server/LocationManagerService;I)Ljava/lang/String;
+PLcom/android/server/LocationManagerService;->access$2700(Lcom/android/server/LocationManagerService;Lcom/android/server/LocationManagerService$Receiver;)V
+PLcom/android/server/LocationManagerService;->access$2700(Lcom/android/server/LocationManagerService;Lcom/android/server/LocationManagerService$UpdateRecord;)Z
 PLcom/android/server/LocationManagerService;->access$2800(Lcom/android/server/LocationManagerService;)Landroid/app/AppOpsManager;
+PLcom/android/server/LocationManagerService;->access$2800(Lcom/android/server/LocationManagerService;Lcom/android/server/LocationManagerService$Receiver;)V
 HSPLcom/android/server/LocationManagerService;->access$300(Lcom/android/server/LocationManagerService;)Landroid/os/Handler;
+HSPLcom/android/server/LocationManagerService;->access$300(Lcom/android/server/LocationManagerService;)V
+HSPLcom/android/server/LocationManagerService;->access$3200(Lcom/android/server/LocationManagerService;)Landroid/app/ActivityManager;
+HSPLcom/android/server/LocationManagerService;->access$3300(Lcom/android/server/LocationManagerService;)Landroid/app/ActivityManager;
+HSPLcom/android/server/LocationManagerService;->access$3300(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/AppForegroundHelper;
+HSPLcom/android/server/LocationManagerService;->access$3300(Lcom/android/server/LocationManagerService;)Ljava/util/HashMap;
+HSPLcom/android/server/LocationManagerService;->access$3400(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/LocationRequestStatistics;
+HSPLcom/android/server/LocationManagerService;->access$3400(Lcom/android/server/LocationManagerService;)Ljava/util/HashMap;
 HSPLcom/android/server/LocationManagerService;->access$3500(Lcom/android/server/LocationManagerService;)Landroid/app/ActivityManager;
+HSPLcom/android/server/LocationManagerService;->access$3500(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/LocationRequestStatistics;
+PLcom/android/server/LocationManagerService;->access$3500(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/LocationUsageLogger;
+PLcom/android/server/LocationManagerService;->access$3600(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/LocationUsageLogger;
 HSPLcom/android/server/LocationManagerService;->access$3600(Lcom/android/server/LocationManagerService;)Ljava/util/HashMap;
 HSPLcom/android/server/LocationManagerService;->access$3700(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/LocationRequestStatistics;
+HSPLcom/android/server/LocationManagerService;->access$400(Lcom/android/server/LocationManagerService;)Landroid/os/Handler;
 HSPLcom/android/server/LocationManagerService;->access$400(Lcom/android/server/LocationManagerService;)Ljava/lang/Object;
-PLcom/android/server/LocationManagerService;->access$500(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/LocationManagerService;->access$4300(Lcom/android/server/LocationManagerService;)Ljava/util/concurrent/CopyOnWriteArrayList;
+HSPLcom/android/server/LocationManagerService;->access$500(Lcom/android/server/LocationManagerService;)Landroid/os/Handler;
+HSPLcom/android/server/LocationManagerService;->access$500(Lcom/android/server/LocationManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/LocationManagerService;->access$500(Lcom/android/server/LocationManagerService;)V
+HSPLcom/android/server/LocationManagerService;->access$600(Lcom/android/server/LocationManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/LocationManagerService;->access$600(Lcom/android/server/LocationManagerService;)V
 PLcom/android/server/LocationManagerService;->access$600(Lcom/android/server/LocationManagerService;Ljava/lang/String;)V
+HSPLcom/android/server/LocationManagerService;->access$700(Lcom/android/server/LocationManagerService;)V
 PLcom/android/server/LocationManagerService;->access$700(Lcom/android/server/LocationManagerService;I)V
+PLcom/android/server/LocationManagerService;->access$700(Lcom/android/server/LocationManagerService;Ljava/lang/String;)V
+HPLcom/android/server/LocationManagerService;->access$800(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/LocationManagerService;->access$800(Lcom/android/server/LocationManagerService;Ljava/lang/String;)V
 PLcom/android/server/LocationManagerService;->access$900(Lcom/android/server/LocationManagerService;)V
 PLcom/android/server/LocationManagerService;->addGnssMeasurementsListener(Landroid/location/IGnssMeasurementsListener;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/LocationManagerService;->addProviderLocked(Lcom/android/server/LocationManagerService$LocationProviderManager;)V
 HSPLcom/android/server/LocationManagerService;->applyRequirementsLocked(Lcom/android/server/LocationManagerService$LocationProviderManager;)V
 HSPLcom/android/server/LocationManagerService;->applyRequirementsLocked(Ljava/lang/String;)V
+HSPLcom/android/server/LocationManagerService;->checkCallingOrSelfLocationPermission()Z
 HSPLcom/android/server/LocationManagerService;->checkLocationAccess(IILjava/lang/String;I)Z
 HSPLcom/android/server/LocationManagerService;->checkPackageName(Ljava/lang/String;)V
+PLcom/android/server/LocationManagerService;->checkResolutionLevelIsSufficientForGeofenceUse(I)V
 HSPLcom/android/server/LocationManagerService;->checkResolutionLevelIsSufficientForProviderUseLocked(ILjava/lang/String;)V
 HSPLcom/android/server/LocationManagerService;->createSanitizedRequest(Landroid/location/LocationRequest;IZ)Landroid/location/LocationRequest;
-PLcom/android/server/LocationManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/LocationManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/LocationManagerService;->enforceCallingOrSelfLocationPermission()V
+HSPLcom/android/server/LocationManagerService;->enforceCallingOrSelfPackageName(Ljava/lang/String;)V
 HSPLcom/android/server/LocationManagerService;->ensureFallbackFusedProviderPresentLocked([Ljava/lang/String;)V
-PLcom/android/server/LocationManagerService;->geocoderIsPresent()Z
-PLcom/android/server/LocationManagerService;->getAllProviders()Ljava/util/List;
+HPLcom/android/server/LocationManagerService;->geocoderIsPresent()Z
+HPLcom/android/server/LocationManagerService;->getAllProviders()Ljava/util/List;
 HSPLcom/android/server/LocationManagerService;->getAllowedResolutionLevel(II)I
+HPLcom/android/server/LocationManagerService;->getBestProvider(Landroid/location/Criteria;Z)Ljava/lang/String;
 HSPLcom/android/server/LocationManagerService;->getCallerAllowedResolutionLevel()I
-PLcom/android/server/LocationManagerService;->getExtraLocationControllerPackage()Ljava/lang/String;
+PLcom/android/server/LocationManagerService;->getCurrentLocation(Landroid/location/LocationRequest;Landroid/os/ICancellationSignal;Landroid/location/ILocationListener;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/LocationManagerService;->getExtraLocationControllerPackage()Ljava/lang/String;
+HPLcom/android/server/LocationManagerService;->getFromLocation(DDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String;
+PLcom/android/server/LocationManagerService;->getFromLocationName(Ljava/lang/String;DDDDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String;
+PLcom/android/server/LocationManagerService;->getGnssCapabilities(Ljava/lang/String;)J
 HPLcom/android/server/LocationManagerService;->getLastLocation(Landroid/location/LocationRequest;Ljava/lang/String;Ljava/lang/String;)Landroid/location/Location;
 HSPLcom/android/server/LocationManagerService;->getLocationProviderLocked(Ljava/lang/String;)Lcom/android/server/LocationManagerService$LocationProviderManager;
+HSPLcom/android/server/LocationManagerService;->getLocationProviderManager(Ljava/lang/String;)Lcom/android/server/LocationManagerService$LocationProviderManager;
 HSPLcom/android/server/LocationManagerService;->getMinimumResolutionLevelForProviderUseLocked(Ljava/lang/String;)I
-PLcom/android/server/LocationManagerService;->getProviderProperties(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;
-PLcom/android/server/LocationManagerService;->getProviders(Landroid/location/Criteria;Z)Ljava/util/List;
+HPLcom/android/server/LocationManagerService;->getProviderProperties(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;
+HPLcom/android/server/LocationManagerService;->getProviders(Landroid/location/Criteria;Z)Ljava/util/List;
+PLcom/android/server/LocationManagerService;->getReceiverLocked(Landroid/app/PendingIntent;IILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;ZLjava/lang/String;)Lcom/android/server/LocationManagerService$Receiver;
 HSPLcom/android/server/LocationManagerService;->getReceiverLocked(Landroid/location/ILocationListener;IILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;ZLjava/lang/String;)Lcom/android/server/LocationManagerService$Receiver;
+PLcom/android/server/LocationManagerService;->getResolutionPermission(I)Ljava/lang/String;
 HPLcom/android/server/LocationManagerService;->handleLocationChangedLocked(Landroid/location/Location;Lcom/android/server/LocationManagerService$LocationProviderManager;)V
 HSPLcom/android/server/LocationManagerService;->initializeProvidersLocked()V
+PLcom/android/server/LocationManagerService;->injectGnssMeasurementCorrections(Landroid/location/GnssMeasurementCorrections;Ljava/lang/String;)V
 HSPLcom/android/server/LocationManagerService;->isCurrentProfileLocked(I)Z
 PLcom/android/server/LocationManagerService;->isExtraLocationControllerPackageEnabled()Z
 HSPLcom/android/server/LocationManagerService;->isLocationEnabledForUser(I)Z
 HSPLcom/android/server/LocationManagerService;->isProviderEnabledForUser(Ljava/lang/String;I)Z
 HPLcom/android/server/LocationManagerService;->isProviderPackage(Ljava/lang/String;)Z
-PLcom/android/server/LocationManagerService;->isSettingsExemptLocked(Lcom/android/server/LocationManagerService$UpdateRecord;)Z
+HPLcom/android/server/LocationManagerService;->isSettingsExempt(Lcom/android/server/LocationManagerService$UpdateRecord;)Z
+HPLcom/android/server/LocationManagerService;->isSettingsExemptLocked(Lcom/android/server/LocationManagerService$UpdateRecord;)Z
+HSPLcom/android/server/LocationManagerService;->isThrottlingExempt(Lcom/android/server/location/CallerIdentity;)Z
 HSPLcom/android/server/LocationManagerService;->isThrottlingExemptLocked(Lcom/android/server/location/CallerIdentity;)Z
-PLcom/android/server/LocationManagerService;->isValidWorkSource(Landroid/os/WorkSource;)Z
-PLcom/android/server/LocationManagerService;->lambda$new$0$LocationManagerService(I)[Ljava/lang/String;
-PLcom/android/server/LocationManagerService;->lambda$new$1$LocationManagerService(I)[Ljava/lang/String;
+HPLcom/android/server/LocationManagerService;->isValidWorkSource(Landroid/os/WorkSource;)Z
+HSPLcom/android/server/LocationManagerService;->lambda$AgevX9G4cx2TbNzr7MYT3YPtASs(Lcom/android/server/LocationManagerService;IZ)V
+PLcom/android/server/LocationManagerService;->lambda$getCurrentLocation$13$LocationManagerService(Landroid/location/ILocationListener;Ljava/lang/String;)V
+PLcom/android/server/LocationManagerService;->lambda$getCurrentLocation$6$LocationManagerService(Landroid/location/ILocationListener;Ljava/lang/String;)V
+HSPLcom/android/server/LocationManagerService;->lambda$new$0$LocationManagerService(I)[Ljava/lang/String;
+HSPLcom/android/server/LocationManagerService;->lambda$new$1$LocationManagerService(I)[Ljava/lang/String;
+PLcom/android/server/LocationManagerService;->lambda$nxs_FejUjcjw2UUIeDY3TYTRJs4(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/LocationManagerService;->lambda$oIimlThgbbmKRAN80H4tpnruGtk(Lcom/android/server/LocationManagerService;I)V
+PLcom/android/server/LocationManagerService;->lambda$onSystemReady$11$LocationManagerService()V
 HPLcom/android/server/LocationManagerService;->lambda$onSystemReady$2$LocationManagerService()V
 HPLcom/android/server/LocationManagerService;->lambda$onSystemReady$3$LocationManagerService(I)V
 HSPLcom/android/server/LocationManagerService;->lambda$onSystemReady$4$LocationManagerService(II)V
+PLcom/android/server/LocationManagerService;->lambda$onSystemReady$4$LocationManagerService(Landroid/os/PowerSaveState;)V
 HSPLcom/android/server/LocationManagerService;->lambda$onSystemReady$5$LocationManagerService(II)V
-PLcom/android/server/LocationManagerService;->lambda$onSystemReady$8$LocationManagerService(I)V
+PLcom/android/server/LocationManagerService;->lambda$onSystemReady$5$LocationManagerService(Landroid/os/PowerSaveState;)V
+PLcom/android/server/LocationManagerService;->lambda$onSystemReady$6$LocationManagerService(Landroid/os/PowerSaveState;)V
+PLcom/android/server/LocationManagerService;->lambda$onSystemReady$7$LocationManagerService(Landroid/os/PowerSaveState;)V
+HSPLcom/android/server/LocationManagerService;->lambda$onSystemReady$8$LocationManagerService(I)V
+PLcom/android/server/LocationManagerService;->lambda$onSystemReady$9$LocationManagerService()V
 HPLcom/android/server/LocationManagerService;->locationCallbackFinished(Landroid/location/ILocationListener;)V
-PLcom/android/server/LocationManagerService;->onAppOpChangedLocked()V
-PLcom/android/server/LocationManagerService;->onLocationModeChangedLocked(I)V
-PLcom/android/server/LocationManagerService;->onPackageDisappearedLocked(Ljava/lang/String;)V
+HSPLcom/android/server/LocationManagerService;->onAppForegroundChanged(IZ)V
+HSPLcom/android/server/LocationManagerService;->onAppOpChangedLocked()V
+PLcom/android/server/LocationManagerService;->onBackgroundThrottleIntervalChangedLocked()V
+PLcom/android/server/LocationManagerService;->onBatterySaverModeChangedLocked(I)V
+PLcom/android/server/LocationManagerService;->onIgnoreSettingsWhitelistChanged()V
+PLcom/android/server/LocationManagerService;->onIgnoreSettingsWhitelistChangedLocked()V
+HPLcom/android/server/LocationManagerService;->onLocationModeChanged(I)V
+HSPLcom/android/server/LocationManagerService;->onLocationModeChangedLocked(I)V
+HPLcom/android/server/LocationManagerService;->onPackageDisappearedLocked(Ljava/lang/String;)V
 HPLcom/android/server/LocationManagerService;->onPermissionsChangedLocked()V
-PLcom/android/server/LocationManagerService;->onScreenStateChangedLocked()V
+HPLcom/android/server/LocationManagerService;->onScreenStateChangedLocked()V
 HSPLcom/android/server/LocationManagerService;->onSystemReady()V
 HSPLcom/android/server/LocationManagerService;->onSystemThirdPartyAppsCanStart()V
 HSPLcom/android/server/LocationManagerService;->onUidImportanceChangedLocked(II)V
+HSPLcom/android/server/LocationManagerService;->onUserChanged(II)V
 HSPLcom/android/server/LocationManagerService;->onUserChangedLocked(I)V
+HSPLcom/android/server/LocationManagerService;->onUserChangedLocked(II)V
 HSPLcom/android/server/LocationManagerService;->onUserProfilesChangedLocked()V
 PLcom/android/server/LocationManagerService;->registerGnssStatusCallback(Landroid/location/IGnssStatusListener;Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/LocationManagerService;->removeGnssMeasurementsListener(Landroid/location/IGnssMeasurementsListener;)V
-PLcom/android/server/LocationManagerService;->removeUpdates(Landroid/location/ILocationListener;Landroid/app/PendingIntent;Ljava/lang/String;)V
-PLcom/android/server/LocationManagerService;->removeUpdatesLocked(Lcom/android/server/LocationManagerService$Receiver;)V
+HPLcom/android/server/LocationManagerService;->removeUpdates(Landroid/location/ILocationListener;Landroid/app/PendingIntent;Ljava/lang/String;)V
+HPLcom/android/server/LocationManagerService;->removeUpdatesLocked(Lcom/android/server/LocationManagerService$Receiver;)V
 HPLcom/android/server/LocationManagerService;->reportLocationAccessNoThrow(IILjava/lang/String;Ljava/lang/String;ILjava/lang/String;)Z
+PLcom/android/server/LocationManagerService;->requestGeofence(Landroid/location/LocationRequest;Landroid/location/Geofence;Landroid/app/PendingIntent;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/LocationManagerService;->requestLocationUpdates(Landroid/location/LocationRequest;Landroid/location/ILocationListener;Landroid/app/PendingIntent;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/LocationManagerService;->requestLocationUpdatesLocked(Landroid/location/LocationRequest;Lcom/android/server/LocationManagerService$Receiver;ILjava/lang/String;)V
 HSPLcom/android/server/LocationManagerService;->resolutionLevelToOp(I)I
 PLcom/android/server/LocationManagerService;->resolutionLevelToOpStr(I)Ljava/lang/String;
+PLcom/android/server/LocationManagerService;->sendExtraCommand(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Z
 PLcom/android/server/LocationManagerService;->setExtraLocationControllerPackage(Ljava/lang/String;)V
 HPLcom/android/server/LocationManagerService;->setExtraLocationControllerPackageEnabled(Z)V
 HPLcom/android/server/LocationManagerService;->shouldBroadcastSafeLocked(Landroid/location/Location;Landroid/location/Location;Lcom/android/server/LocationManagerService$UpdateRecord;J)Z
 PLcom/android/server/LocationManagerService;->unregisterGnssStatusCallback(Landroid/location/IGnssStatusListener;)V
-PLcom/android/server/LocationManagerService;->updateLastLocationLocked(Landroid/location/Location;Ljava/lang/String;)V
+HPLcom/android/server/LocationManagerService;->updateLastLocationLocked(Landroid/location/Location;Ljava/lang/String;)V
+HSPLcom/android/server/LocationManagerService;->updateProviderEnabledLocked(Lcom/android/server/LocationManagerService$LocationProviderManager;)V
 HSPLcom/android/server/LocationManagerService;->updateProviderUseableLocked(Lcom/android/server/LocationManagerService$LocationProviderManager;)V
 PLcom/android/server/LocationManagerServiceUtils$LinkedListener;-><init>(Ljava/lang/Object;Ljava/lang/String;Lcom/android/server/location/CallerIdentity;Ljava/util/function/Consumer;)V
 PLcom/android/server/LocationManagerServiceUtils$LinkedListener;->binderDied()V
@@ -1914,10 +2862,11 @@
 PLcom/android/server/LocationManagerServiceUtils$LinkedListenerBase;->getCallerIdentity()Lcom/android/server/location/CallerIdentity;
 HSPLcom/android/server/LocationManagerServiceUtils$LinkedListenerBase;->linkToListenerDeathNotificationLocked(Landroid/os/IBinder;)Z
 PLcom/android/server/LocationManagerServiceUtils$LinkedListenerBase;->toString()Ljava/lang/String;
+PLcom/android/server/LocationManagerServiceUtils$LinkedListenerBase;->unlinkFromListenerDeathNotificationLocked(Landroid/os/IBinder;)V
 HPLcom/android/server/LocationManagerServiceUtils$LinkedListenerBase;->unlinkFromListenerDeathNotificationLocked(Landroid/os/IBinder;)Z
 HSPLcom/android/server/LocationManagerServiceUtils;-><clinit>()V
 PLcom/android/server/LocationManagerServiceUtils;->access$000()Z
-PLcom/android/server/LocationManagerServiceUtils;->getPackageImportance(Ljava/lang/String;Landroid/content/Context;)I
+HPLcom/android/server/LocationManagerServiceUtils;->getPackageImportance(Ljava/lang/String;Landroid/content/Context;)I
 HSPLcom/android/server/LocationManagerServiceUtils;->isImportanceForeground(I)Z
 HSPLcom/android/server/LockGuard$LockInfo;-><init>()V
 HSPLcom/android/server/LockGuard$LockInfo;-><init>(Lcom/android/server/LockGuard$1;)V
@@ -1933,43 +2882,98 @@
 HSPLcom/android/server/LooperStatsService$Lifecycle;->onBootPhase(I)V
 HSPLcom/android/server/LooperStatsService$Lifecycle;->onStart()V
 HSPLcom/android/server/LooperStatsService$SettingsObserver;-><init>(Lcom/android/server/LooperStatsService;)V
+PLcom/android/server/LooperStatsService$SettingsObserver;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/LooperStatsService;-><init>(Landroid/content/Context;Lcom/android/internal/os/LooperStats;)V
 HSPLcom/android/server/LooperStatsService;-><init>(Landroid/content/Context;Lcom/android/internal/os/LooperStats;Lcom/android/server/LooperStatsService$1;)V
 HSPLcom/android/server/LooperStatsService;->access$200(Lcom/android/server/LooperStatsService;)V
-PLcom/android/server/LooperStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/LooperStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/LooperStatsService;->initFromSettings()V
+HPLcom/android/server/LooperStatsService;->lambda$dump$0(Lcom/android/internal/os/LooperStats$ExportedEntry;)Ljava/lang/Integer;
+PLcom/android/server/LooperStatsService;->lambda$dump$1(Lcom/android/internal/os/LooperStats$ExportedEntry;)Ljava/lang/String;
+PLcom/android/server/LooperStatsService;->lambda$dump$2(Lcom/android/internal/os/LooperStats$ExportedEntry;)Ljava/lang/String;
+PLcom/android/server/LooperStatsService;->lambda$dump$3(Lcom/android/internal/os/LooperStats$ExportedEntry;)Ljava/lang/String;
 HSPLcom/android/server/LooperStatsService;->setEnabled(Z)V
 HSPLcom/android/server/LooperStatsService;->setSamplingInterval(I)V
 HSPLcom/android/server/LooperStatsService;->setTrackScreenInteractive(Z)V
 HSPLcom/android/server/MmsServiceBroker$1;-><init>(Lcom/android/server/MmsServiceBroker;)V
+PLcom/android/server/MmsServiceBroker$1;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/MmsServiceBroker$2;-><init>(Lcom/android/server/MmsServiceBroker;)V
+PLcom/android/server/MmsServiceBroker$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/MmsServiceBroker$2;->onServiceDisconnected(Landroid/content/ComponentName;)V
 HSPLcom/android/server/MmsServiceBroker$3;-><init>(Lcom/android/server/MmsServiceBroker;)V
 HSPLcom/android/server/MmsServiceBroker$BinderService;-><init>(Lcom/android/server/MmsServiceBroker;)V
 HSPLcom/android/server/MmsServiceBroker$BinderService;-><init>(Lcom/android/server/MmsServiceBroker;Lcom/android/server/MmsServiceBroker$1;)V
+HPLcom/android/server/MmsServiceBroker$BinderService;->adjustUriForUserAndGrantPermission(Landroid/net/Uri;Ljava/lang/String;II)Landroid/net/Uri;
+PLcom/android/server/MmsServiceBroker$BinderService;->downloadMessage(ILjava/lang/String;Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;Landroid/app/PendingIntent;)V
+PLcom/android/server/MmsServiceBroker$BinderService;->downloadMessage(ILjava/lang/String;Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;Landroid/app/PendingIntent;J)V
+HPLcom/android/server/MmsServiceBroker$BinderService;->sendMessage(ILjava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/PendingIntent;)V
+PLcom/android/server/MmsServiceBroker$BinderService;->sendMessage(ILjava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/PendingIntent;J)V
 HSPLcom/android/server/MmsServiceBroker;-><clinit>()V
 HSPLcom/android/server/MmsServiceBroker;-><init>(Landroid/content/Context;)V
+PLcom/android/server/MmsServiceBroker;->access$000(Lcom/android/server/MmsServiceBroker;)V
+PLcom/android/server/MmsServiceBroker;->access$102(Lcom/android/server/MmsServiceBroker;Lcom/android/internal/telephony/IMms;)Lcom/android/internal/telephony/IMms;
+PLcom/android/server/MmsServiceBroker;->access$1100(Lcom/android/server/MmsServiceBroker;I)I
+PLcom/android/server/MmsServiceBroker;->access$200(Lcom/android/server/MmsServiceBroker;)Landroid/os/Handler;
+PLcom/android/server/MmsServiceBroker;->access$300(Lcom/android/server/MmsServiceBroker;)Landroid/content/Context;
+PLcom/android/server/MmsServiceBroker;->access$500(Lcom/android/server/MmsServiceBroker;)Landroid/app/AppOpsManager;
+PLcom/android/server/MmsServiceBroker;->access$600(Lcom/android/server/MmsServiceBroker;)Lcom/android/internal/telephony/IMms;
+PLcom/android/server/MmsServiceBroker;->getAppOpsManager()Landroid/app/AppOpsManager;
+PLcom/android/server/MmsServiceBroker;->getOrConnectService()Lcom/android/internal/telephony/IMms;
+PLcom/android/server/MmsServiceBroker;->getPhoneIdFromSubId(I)I
+PLcom/android/server/MmsServiceBroker;->getServiceGuarded()Lcom/android/internal/telephony/IMms;
 HSPLcom/android/server/MmsServiceBroker;->onStart()V
-PLcom/android/server/MmsServiceBroker;->systemRunning()V
+HSPLcom/android/server/MmsServiceBroker;->systemRunning()V
+PLcom/android/server/MmsServiceBroker;->tryConnecting()V
 PLcom/android/server/MountServiceIdler$1;-><init>(Lcom/android/server/MountServiceIdler;)V
-PLcom/android/server/MountServiceIdler$1;->run()V
+HPLcom/android/server/MountServiceIdler$1;->run()V
 HSPLcom/android/server/MountServiceIdler;-><clinit>()V
 PLcom/android/server/MountServiceIdler;-><init>()V
+PLcom/android/server/MountServiceIdler;->access$000(Lcom/android/server/MountServiceIdler;)Ljava/lang/Runnable;
+PLcom/android/server/MountServiceIdler;->access$100(Lcom/android/server/MountServiceIdler;)Z
+PLcom/android/server/MountServiceIdler;->access$102(Lcom/android/server/MountServiceIdler;Z)Z
+PLcom/android/server/MountServiceIdler;->access$200(Lcom/android/server/MountServiceIdler;)Landroid/app/job/JobParameters;
 HSPLcom/android/server/MountServiceIdler;->offsetFromTodayMidnight(II)Ljava/util/Calendar;
-PLcom/android/server/MountServiceIdler;->onStartJob(Landroid/app/job/JobParameters;)Z
+HPLcom/android/server/MountServiceIdler;->onStartJob(Landroid/app/job/JobParameters;)Z
 PLcom/android/server/MountServiceIdler;->onStopJob(Landroid/app/job/JobParameters;)Z
 HSPLcom/android/server/MountServiceIdler;->scheduleIdlePass(Landroid/content/Context;)V
+PLcom/android/server/NativeDaemonConnector$NativeDaemonFailureException;-><init>(Ljava/lang/String;Lcom/android/server/NativeDaemonEvent;)V
+PLcom/android/server/NativeDaemonConnector$ResponseQueue$PendingCmd;-><init>(ILjava/lang/String;)V
 HSPLcom/android/server/NativeDaemonConnector$ResponseQueue;-><init>(I)V
+PLcom/android/server/NativeDaemonConnector$ResponseQueue;->add(ILcom/android/server/NativeDaemonEvent;)V
+PLcom/android/server/NativeDaemonConnector$ResponseQueue;->remove(IJLjava/lang/String;)Lcom/android/server/NativeDaemonEvent;
 HSPLcom/android/server/NativeDaemonConnector;-><init>(Lcom/android/server/INativeDaemonConnectorCallbacks;Ljava/lang/String;ILjava/lang/String;ILandroid/os/PowerManager$WakeLock;)V
 HSPLcom/android/server/NativeDaemonConnector;-><init>(Lcom/android/server/INativeDaemonConnectorCallbacks;Ljava/lang/String;ILjava/lang/String;ILandroid/os/PowerManager$WakeLock;Landroid/os/Looper;)V
+HPLcom/android/server/NativeDaemonConnector;->appendEscaped(Ljava/lang/StringBuilder;Ljava/lang/String;)V
 HSPLcom/android/server/NativeDaemonConnector;->determineSocketAddress()Landroid/net/LocalSocketAddress;
+PLcom/android/server/NativeDaemonConnector;->execute(JLjava/lang/String;[Ljava/lang/Object;)Lcom/android/server/NativeDaemonEvent;
+PLcom/android/server/NativeDaemonConnector;->execute(Ljava/lang/String;[Ljava/lang/Object;)Lcom/android/server/NativeDaemonEvent;
+HPLcom/android/server/NativeDaemonConnector;->executeForList(JLjava/lang/String;[Ljava/lang/Object;)[Lcom/android/server/NativeDaemonEvent;
+PLcom/android/server/NativeDaemonConnector;->handleMessage(Landroid/os/Message;)Z
 HSPLcom/android/server/NativeDaemonConnector;->isShuttingDown()Z
 HSPLcom/android/server/NativeDaemonConnector;->listenToSocket()V
+PLcom/android/server/NativeDaemonConnector;->log(Ljava/lang/String;)V
+HPLcom/android/server/NativeDaemonConnector;->makeCommand(Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;ILjava/lang/String;[Ljava/lang/Object;)V
 HSPLcom/android/server/NativeDaemonConnector;->run()V
+PLcom/android/server/NativeDaemonConnector;->uptimeMillisInt()I
+PLcom/android/server/NativeDaemonConnectorException;-><init>(Ljava/lang/String;Lcom/android/server/NativeDaemonEvent;)V
+PLcom/android/server/NativeDaemonConnectorException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+PLcom/android/server/NativeDaemonEvent;-><init>(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/io/FileDescriptor;)V
+PLcom/android/server/NativeDaemonEvent;->getCmdNumber()I
+PLcom/android/server/NativeDaemonEvent;->getCode()I
+PLcom/android/server/NativeDaemonEvent;->getRawEvent()Ljava/lang/String;
+PLcom/android/server/NativeDaemonEvent;->isClassClientError()Z
+PLcom/android/server/NativeDaemonEvent;->isClassContinue()Z
+PLcom/android/server/NativeDaemonEvent;->isClassServerError()Z
+PLcom/android/server/NativeDaemonEvent;->isClassUnsolicited()Z
+PLcom/android/server/NativeDaemonEvent;->isClassUnsolicited(I)Z
+PLcom/android/server/NativeDaemonEvent;->parseRawEvent(Ljava/lang/String;[Ljava/io/FileDescriptor;)Lcom/android/server/NativeDaemonEvent;
+PLcom/android/server/NativeDaemonEvent;->toString()Ljava/lang/String;
+HPLcom/android/server/NativeDaemonEvent;->unescapeArgs(Ljava/lang/String;)[Ljava/lang/String;
 HSPLcom/android/server/NetIdManager;-><init>()V
 HSPLcom/android/server/NetIdManager;-><init>(I)V
-PLcom/android/server/NetIdManager;->getNextAvailableNetIdLocked(ILandroid/util/SparseBooleanArray;)I
-PLcom/android/server/NetIdManager;->releaseNetId(I)V
-PLcom/android/server/NetIdManager;->reserveNetId()I
+HPLcom/android/server/NetIdManager;->getNextAvailableNetIdLocked(ILandroid/util/SparseBooleanArray;)I
+HPLcom/android/server/NetIdManager;->releaseNetId(I)V
+HPLcom/android/server/NetIdManager;->reserveNetId()I
 HSPLcom/android/server/NetworkManagementInternal;-><init>()V
 PLcom/android/server/NetworkManagementService$IdleTimerParams;-><init>(II)V
 HSPLcom/android/server/NetworkManagementService$LocalService;-><init>(Lcom/android/server/NetworkManagementService;)V
@@ -1977,21 +2981,26 @@
 HSPLcom/android/server/NetworkManagementService$NetdTetheringStatsProvider;-><init>(Lcom/android/server/NetworkManagementService;)V
 HSPLcom/android/server/NetworkManagementService$NetdTetheringStatsProvider;-><init>(Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService$1;)V
 HSPLcom/android/server/NetworkManagementService$NetdTetheringStatsProvider;->getTetherStats(I)Landroid/net/NetworkStats;
-PLcom/android/server/NetworkManagementService$NetdTetheringStatsProvider;->setInterfaceQuota(Ljava/lang/String;J)V
+HPLcom/android/server/NetworkManagementService$NetdTetheringStatsProvider;->setInterfaceQuota(Ljava/lang/String;J)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;-><init>(Lcom/android/server/NetworkManagementService;)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;-><init>(Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService$1;)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->lambda$onInterfaceAdded$5$NetworkManagementService$NetdUnsolicitedEventListener(Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->lambda$onInterfaceAddressRemoved$4$NetworkManagementService$NetdUnsolicitedEventListener(Ljava/lang/String;Landroid/net/LinkAddress;)V
+HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->lambda$onInterfaceAddressUpdated$3$NetworkManagementService$NetdUnsolicitedEventListener(Ljava/lang/String;Landroid/net/LinkAddress;)V
+HPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->lambda$onInterfaceClassActivityChanged$0$NetworkManagementService$NetdUnsolicitedEventListener(IZJI)V
+HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->lambda$onInterfaceDnsServerInfo$2$NetworkManagementService$NetdUnsolicitedEventListener(Ljava/lang/String;J[Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->lambda$onInterfaceLinkStateChanged$8$NetworkManagementService$NetdUnsolicitedEventListener(Ljava/lang/String;Z)V
+PLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->lambda$onInterfaceRemoved$6$NetworkManagementService$NetdUnsolicitedEventListener(Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->lambda$onQuotaLimitReached$1$NetworkManagementService$NetdUnsolicitedEventListener(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->lambda$onRouteChanged$9$NetworkManagementService$NetdUnsolicitedEventListener(ZLandroid/net/RouteInfo;)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->onInterfaceAdded(Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->onInterfaceAddressRemoved(Ljava/lang/String;Ljava/lang/String;II)V
-PLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->onInterfaceAddressUpdated(Ljava/lang/String;Ljava/lang/String;II)V
+HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->onInterfaceAddressUpdated(Ljava/lang/String;Ljava/lang/String;II)V
 HPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->onInterfaceClassActivityChanged(ZIJI)V
-PLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->onInterfaceDnsServerInfo(Ljava/lang/String;J[Ljava/lang/String;)V
+HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->onInterfaceDnsServerInfo(Ljava/lang/String;J[Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->onInterfaceLinkStateChanged(Ljava/lang/String;Z)V
 PLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->onInterfaceRemoved(Ljava/lang/String;)V
-PLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->onQuotaLimitReached(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->onQuotaLimitReached(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->onRouteChanged(ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService$SystemServices;-><init>()V
 HSPLcom/android/server/NetworkManagementService$SystemServices;->getNetd()Landroid/net/INetd;
@@ -1999,89 +3008,126 @@
 HSPLcom/android/server/NetworkManagementService$SystemServices;->registerLocalService(Lcom/android/server/NetworkManagementInternal;)V
 HSPLcom/android/server/NetworkManagementService;-><clinit>()V
 HSPLcom/android/server/NetworkManagementService;-><init>(Landroid/content/Context;Lcom/android/server/NetworkManagementService$SystemServices;)V
+HSPLcom/android/server/NetworkManagementService;->access$1000(Lcom/android/server/NetworkManagementService;Ljava/lang/String;J[Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->access$1100(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/NetworkManagementService;->access$1200(Lcom/android/server/NetworkManagementService;IZJIZ)V
 HSPLcom/android/server/NetworkManagementService;->access$1300(Lcom/android/server/NetworkManagementService;)Landroid/net/INetd;
 HSPLcom/android/server/NetworkManagementService;->access$1400(Lcom/android/server/NetworkManagementService;I)Z
 HSPLcom/android/server/NetworkManagementService;->access$200(Lcom/android/server/NetworkManagementService;)Landroid/os/Handler;
 HSPLcom/android/server/NetworkManagementService;->access$300(Lcom/android/server/NetworkManagementService;ZLandroid/net/RouteInfo;)V
 HSPLcom/android/server/NetworkManagementService;->access$400(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Z)V
+PLcom/android/server/NetworkManagementService;->access$600(Lcom/android/server/NetworkManagementService;Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService;->access$700(Lcom/android/server/NetworkManagementService;Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService;->access$800(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Landroid/net/LinkAddress;)V
-PLcom/android/server/NetworkManagementService;->addIdleTimer(Ljava/lang/String;II)V
+HSPLcom/android/server/NetworkManagementService;->access$900(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Landroid/net/LinkAddress;)V
+HPLcom/android/server/NetworkManagementService;->addIdleTimer(Ljava/lang/String;II)V
 PLcom/android/server/NetworkManagementService;->addInterfaceToNetwork(Ljava/lang/String;I)V
-PLcom/android/server/NetworkManagementService;->addRoute(ILandroid/net/RouteInfo;)V
+HPLcom/android/server/NetworkManagementService;->addLegacyRouteForNetId(ILandroid/net/RouteInfo;I)V
+HPLcom/android/server/NetworkManagementService;->addRoute(ILandroid/net/RouteInfo;)V
+PLcom/android/server/NetworkManagementService;->addVpnUidRanges(I[Landroid/net/UidRange;)V
+PLcom/android/server/NetworkManagementService;->allowProtect(I)V
+PLcom/android/server/NetworkManagementService;->applyUidCleartextNetworkPolicy(II)V
 HSPLcom/android/server/NetworkManagementService;->closeSocketsForFirewallChainLocked(ILjava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService;->connectNativeNetdService()V
 HSPLcom/android/server/NetworkManagementService;->create(Landroid/content/Context;)Lcom/android/server/NetworkManagementService;
 HSPLcom/android/server/NetworkManagementService;->create(Landroid/content/Context;Lcom/android/server/NetworkManagementService$SystemServices;)Lcom/android/server/NetworkManagementService;
-PLcom/android/server/NetworkManagementService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/NetworkManagementService;->dumpUidFirewallRule(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/SparseIntArray;)V
+PLcom/android/server/NetworkManagementService;->denyProtect(I)V
+HPLcom/android/server/NetworkManagementService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/NetworkManagementService;->dumpUidFirewallRule(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/SparseIntArray;)V
 PLcom/android/server/NetworkManagementService;->dumpUidRuleOnQuotaLocked(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/SparseBooleanArray;)V
 HSPLcom/android/server/NetworkManagementService;->enforceSystemUid()V
+PLcom/android/server/NetworkManagementService;->fromStableParcel(Landroid/net/InterfaceConfigurationParcel;)Landroid/net/InterfaceConfiguration;
 HSPLcom/android/server/NetworkManagementService;->getBatteryStats()Lcom/android/internal/app/IBatteryStats;
 HSPLcom/android/server/NetworkManagementService;->getFirewallChainName(I)Ljava/lang/String;
 HSPLcom/android/server/NetworkManagementService;->getFirewallChainState(I)Z
 HSPLcom/android/server/NetworkManagementService;->getFirewallRuleName(II)Ljava/lang/String;
-PLcom/android/server/NetworkManagementService;->getFirewallRuleType(II)I
+HSPLcom/android/server/NetworkManagementService;->getFirewallRuleType(II)I
 HSPLcom/android/server/NetworkManagementService;->getFirewallType(I)I
+PLcom/android/server/NetworkManagementService;->getInterfaceConfig(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;
 HSPLcom/android/server/NetworkManagementService;->getNetworkStatsTethering(I)Landroid/net/NetworkStats;
 HSPLcom/android/server/NetworkManagementService;->getUidFirewallRulesLR(I)Landroid/util/SparseIntArray;
 HSPLcom/android/server/NetworkManagementService;->invokeForAllObservers(Lcom/android/server/NetworkManagementService$NetworkManagementEventCallback;)V
 HSPLcom/android/server/NetworkManagementService;->isBandwidthControlEnabled()Z
 HPLcom/android/server/NetworkManagementService;->isNetworkActive()Z
 HSPLcom/android/server/NetworkManagementService;->isNetworkRestrictedInternal(I)Z
+PLcom/android/server/NetworkManagementService;->lambda$addIdleTimer$12$NetworkManagementService(I)V
 HSPLcom/android/server/NetworkManagementService;->lambda$notifyAddressRemoved$8(Ljava/lang/String;Landroid/net/LinkAddress;Landroid/net/INetworkManagementEventObserver;)V
+HSPLcom/android/server/NetworkManagementService;->lambda$notifyAddressUpdated$7(Ljava/lang/String;Landroid/net/LinkAddress;Landroid/net/INetworkManagementEventObserver;)V
 HSPLcom/android/server/NetworkManagementService;->lambda$notifyInterfaceAdded$2(Ljava/lang/String;Landroid/net/INetworkManagementEventObserver;)V
+HPLcom/android/server/NetworkManagementService;->lambda$notifyInterfaceClassActivity$5(IZJLandroid/net/INetworkManagementEventObserver;)V
+HSPLcom/android/server/NetworkManagementService;->lambda$notifyInterfaceDnsServerInfo$9(Ljava/lang/String;J[Ljava/lang/String;Landroid/net/INetworkManagementEventObserver;)V
 HSPLcom/android/server/NetworkManagementService;->lambda$notifyInterfaceLinkStateChanged$1(Ljava/lang/String;ZLandroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/NetworkManagementService;->lambda$notifyInterfaceRemoved$3(Ljava/lang/String;Landroid/net/INetworkManagementEventObserver;)V
+HPLcom/android/server/NetworkManagementService;->lambda$notifyLimitReached$4(Ljava/lang/String;Ljava/lang/String;Landroid/net/INetworkManagementEventObserver;)V
+HSPLcom/android/server/NetworkManagementService;->lambda$notifyRouteChange$10(Landroid/net/RouteInfo;Landroid/net/INetworkManagementEventObserver;)V
 HSPLcom/android/server/NetworkManagementService;->lambda$notifyRouteChange$11(Landroid/net/RouteInfo;Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/NetworkManagementService;->lambda$removeIdleTimer$13$NetworkManagementService(Lcom/android/server/NetworkManagementService$IdleTimerParams;)V
 HSPLcom/android/server/NetworkManagementService;->listInterfaces()[Ljava/lang/String;
-PLcom/android/server/NetworkManagementService;->modifyInterfaceInNetwork(ZILjava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->makeUidRangeParcel(II)Landroid/net/UidRangeParcel;
+HPLcom/android/server/NetworkManagementService;->modifyInterfaceInNetwork(ZILjava/lang/String;)V
 PLcom/android/server/NetworkManagementService;->modifyRoute(ZILandroid/net/RouteInfo;)V
 HSPLcom/android/server/NetworkManagementService;->notifyAddressRemoved(Ljava/lang/String;Landroid/net/LinkAddress;)V
+HSPLcom/android/server/NetworkManagementService;->notifyAddressUpdated(Ljava/lang/String;Landroid/net/LinkAddress;)V
 HSPLcom/android/server/NetworkManagementService;->notifyInterfaceAdded(Ljava/lang/String;)V
 HPLcom/android/server/NetworkManagementService;->notifyInterfaceClassActivity(IZJIZ)V
+HSPLcom/android/server/NetworkManagementService;->notifyInterfaceDnsServerInfo(Ljava/lang/String;J[Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService;->notifyInterfaceLinkStateChanged(Ljava/lang/String;Z)V
+HPLcom/android/server/NetworkManagementService;->notifyInterfaceRemoved(Ljava/lang/String;)V
+HPLcom/android/server/NetworkManagementService;->notifyLimitReached(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService;->notifyRouteChange(ZLandroid/net/RouteInfo;)V
 HSPLcom/android/server/NetworkManagementService;->prepareNativeDaemon()V
 PLcom/android/server/NetworkManagementService;->registerNetworkActivityListener(Landroid/os/INetworkActivityListener;)V
 HSPLcom/android/server/NetworkManagementService;->registerObserver(Landroid/net/INetworkManagementEventObserver;)V
-PLcom/android/server/NetworkManagementService;->registerTetheringStatsProvider(Landroid/net/ITetheringStatsProvider;Ljava/lang/String;)V
-PLcom/android/server/NetworkManagementService;->removeIdleTimer(Ljava/lang/String;)V
-PLcom/android/server/NetworkManagementService;->removeInterfaceQuota(Ljava/lang/String;)V
+HSPLcom/android/server/NetworkManagementService;->registerTetheringStatsProvider(Landroid/net/ITetheringStatsProvider;Ljava/lang/String;)V
+HPLcom/android/server/NetworkManagementService;->removeIdleTimer(Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->removeInterfaceFromNetwork(Ljava/lang/String;I)V
+HPLcom/android/server/NetworkManagementService;->removeInterfaceQuota(Ljava/lang/String;)V
 PLcom/android/server/NetworkManagementService;->removeRoute(ILandroid/net/RouteInfo;)V
+PLcom/android/server/NetworkManagementService;->removeVpnUidRanges(I[Landroid/net/UidRange;)V
 HPLcom/android/server/NetworkManagementService;->reportNetworkActive()V
 HSPLcom/android/server/NetworkManagementService;->setDataSaverModeEnabled(Z)Z
 PLcom/android/server/NetworkManagementService;->setDefaultNetId(I)V
 HSPLcom/android/server/NetworkManagementService;->setFirewallChainEnabled(IZ)V
 HSPLcom/android/server/NetworkManagementService;->setFirewallChainState(IZ)V
 HSPLcom/android/server/NetworkManagementService;->setFirewallEnabled(Z)V
-HPLcom/android/server/NetworkManagementService;->setFirewallUidRule(III)V
-HPLcom/android/server/NetworkManagementService;->setFirewallUidRuleLocked(III)V
+HSPLcom/android/server/NetworkManagementService;->setFirewallUidRule(III)V
+HSPLcom/android/server/NetworkManagementService;->setFirewallUidRuleLocked(III)V
 HSPLcom/android/server/NetworkManagementService;->setFirewallUidRules(I[I[I)V
 HSPLcom/android/server/NetworkManagementService;->setGlobalAlert(J)V
-PLcom/android/server/NetworkManagementService;->setInterfaceQuota(Ljava/lang/String;J)V
+PLcom/android/server/NetworkManagementService;->setInterfaceConfig(Ljava/lang/String;Landroid/net/InterfaceConfiguration;)V
+HPLcom/android/server/NetworkManagementService;->setInterfaceQuota(Ljava/lang/String;J)V
+PLcom/android/server/NetworkManagementService;->setInterfaceUp(Ljava/lang/String;)V
+HPLcom/android/server/NetworkManagementService;->setMtu(Ljava/lang/String;I)V
+HPLcom/android/server/NetworkManagementService;->setNetworkPermission(II)V
 HSPLcom/android/server/NetworkManagementService;->setUidCleartextNetworkPolicy(II)V
+HSPLcom/android/server/NetworkManagementService;->setUidMeteredNetworkBlacklist(IZ)V
 HPLcom/android/server/NetworkManagementService;->setUidMeteredNetworkWhitelist(IZ)V
-HPLcom/android/server/NetworkManagementService;->setUidOnMeteredNetworkList(IZZ)V
+HSPLcom/android/server/NetworkManagementService;->setUidOnMeteredNetworkList(IZZ)V
 HSPLcom/android/server/NetworkManagementService;->syncFirewallChainLocked(ILjava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService;->systemReady()V
-PLcom/android/server/NetworkManagementService;->unregisterObserver(Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/NetworkManagementService;->tetherLimitReached(Landroid/net/ITetheringStatsProvider;)V
+PLcom/android/server/NetworkManagementService;->toStableParcel(Landroid/net/InterfaceConfiguration;Ljava/lang/String;)Landroid/net/InterfaceConfigurationParcel;
+PLcom/android/server/NetworkManagementService;->toStableParcels([Landroid/net/UidRange;)[Landroid/net/UidRangeParcel;
+PLcom/android/server/NetworkManagementService;->unregisterNetworkActivityListener(Landroid/os/INetworkActivityListener;)V
+HPLcom/android/server/NetworkManagementService;->unregisterObserver(Landroid/net/INetworkManagementEventObserver;)V
 HSPLcom/android/server/NetworkManagementService;->updateFirewallUidRuleLocked(III)Z
 HSPLcom/android/server/NetworkScoreService$1;-><init>(Lcom/android/server/NetworkScoreService;)V
 PLcom/android/server/NetworkScoreService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/NetworkScoreService$2;-><init>(Lcom/android/server/NetworkScoreService;)V
-PLcom/android/server/NetworkScoreService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/NetworkScoreService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/NetworkScoreService$3;-><init>(Lcom/android/server/NetworkScoreService;Landroid/os/Handler;)V
-PLcom/android/server/NetworkScoreService$4;-><init>(Lcom/android/server/NetworkScoreService;)V
-PLcom/android/server/NetworkScoreService$4;->accept(Landroid/net/INetworkScoreCache;Ljava/lang/Object;)V
-PLcom/android/server/NetworkScoreService$4;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/NetworkScoreService$CurrentNetworkScoreCacheFilter;-><init>(Ljava/util/function/Supplier;)V
+PLcom/android/server/NetworkScoreService$3;->onChange(ZLandroid/net/Uri;I)V
+HSPLcom/android/server/NetworkScoreService$4;-><init>(Lcom/android/server/NetworkScoreService;)V
+HSPLcom/android/server/NetworkScoreService$4;->accept(Landroid/net/INetworkScoreCache;Ljava/lang/Object;)V
+HSPLcom/android/server/NetworkScoreService$4;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/NetworkScoreService$CurrentNetworkScoreCacheFilter;-><init>(Ljava/util/function/Supplier;)V
 PLcom/android/server/NetworkScoreService$CurrentNetworkScoreCacheFilter;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/NetworkScoreService$CurrentNetworkScoreCacheFilter;->apply(Ljava/util/List;)Ljava/util/List;
+HPLcom/android/server/NetworkScoreService$CurrentNetworkScoreCacheFilter;->apply(Ljava/util/List;)Ljava/util/List;
 HSPLcom/android/server/NetworkScoreService$DispatchingContentObserver;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/NetworkScoreService$DispatchingContentObserver;->observe(Landroid/net/Uri;I)V
-PLcom/android/server/NetworkScoreService$DispatchingContentObserver;->onChange(ZLandroid/net/Uri;)V
+HSPLcom/android/server/NetworkScoreService$DispatchingContentObserver;->onChange(ZLandroid/net/Uri;)V
 PLcom/android/server/NetworkScoreService$FilteringCacheUpdatingConsumer;-><init>(Landroid/content/Context;Ljava/util/List;ILjava/util/function/UnaryOperator;Ljava/util/function/UnaryOperator;)V
-PLcom/android/server/NetworkScoreService$FilteringCacheUpdatingConsumer;->accept(Landroid/net/INetworkScoreCache;Ljava/lang/Object;)V
+HPLcom/android/server/NetworkScoreService$FilteringCacheUpdatingConsumer;->accept(Landroid/net/INetworkScoreCache;Ljava/lang/Object;)V
 PLcom/android/server/NetworkScoreService$FilteringCacheUpdatingConsumer;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/NetworkScoreService$FilteringCacheUpdatingConsumer;->create(Landroid/content/Context;Ljava/util/List;I)Lcom/android/server/NetworkScoreService$FilteringCacheUpdatingConsumer;
 PLcom/android/server/NetworkScoreService$FilteringCacheUpdatingConsumer;->filterScores(Ljava/util/List;I)Ljava/util/List;
@@ -2090,18 +3136,20 @@
 HSPLcom/android/server/NetworkScoreService$Lifecycle;->onStart()V
 PLcom/android/server/NetworkScoreService$NetworkScorerPackageMonitor;-><init>(Lcom/android/server/NetworkScoreService;Ljava/lang/String;)V
 PLcom/android/server/NetworkScoreService$NetworkScorerPackageMonitor;-><init>(Lcom/android/server/NetworkScoreService;Ljava/lang/String;Lcom/android/server/NetworkScoreService$1;)V
-PLcom/android/server/NetworkScoreService$NetworkScorerPackageMonitor;->evaluateBinding(Ljava/lang/String;Z)V
+HPLcom/android/server/NetworkScoreService$NetworkScorerPackageMonitor;->evaluateBinding(Ljava/lang/String;Z)V
+PLcom/android/server/NetworkScoreService$NetworkScorerPackageMonitor;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
 PLcom/android/server/NetworkScoreService$NetworkScorerPackageMonitor;->onPackageAdded(Ljava/lang/String;I)V
-PLcom/android/server/NetworkScoreService$NetworkScorerPackageMonitor;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/NetworkScoreService$NetworkScorerPackageMonitor;->onPackageModified(Ljava/lang/String;)V
+PLcom/android/server/NetworkScoreService$NetworkScorerPackageMonitor;->onPackageRemoved(Ljava/lang/String;I)V
 PLcom/android/server/NetworkScoreService$NetworkScorerPackageMonitor;->onPackageUpdateFinished(Ljava/lang/String;I)V
-PLcom/android/server/NetworkScoreService$ScanResultsScoreCacheFilter;-><init>(Ljava/util/function/Supplier;)V
+HPLcom/android/server/NetworkScoreService$ScanResultsScoreCacheFilter;-><init>(Ljava/util/function/Supplier;)V
 PLcom/android/server/NetworkScoreService$ScanResultsScoreCacheFilter;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/NetworkScoreService$ScanResultsScoreCacheFilter;->apply(Ljava/util/List;)Ljava/util/List;
+HPLcom/android/server/NetworkScoreService$ScanResultsScoreCacheFilter;->apply(Ljava/util/List;)Ljava/util/List;
 PLcom/android/server/NetworkScoreService$ScanResultsSupplier;-><init>(Landroid/content/Context;)V
 PLcom/android/server/NetworkScoreService$ScanResultsSupplier;->get()Ljava/lang/Object;
 PLcom/android/server/NetworkScoreService$ScanResultsSupplier;->get()Ljava/util/List;
 PLcom/android/server/NetworkScoreService$ScoringServiceConnection;-><init>(Landroid/net/NetworkScorerAppData;)V
-PLcom/android/server/NetworkScoreService$ScoringServiceConnection;->bind(Landroid/content/Context;)V
+HPLcom/android/server/NetworkScoreService$ScoringServiceConnection;->bind(Landroid/content/Context;)V
 PLcom/android/server/NetworkScoreService$ScoringServiceConnection;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/NetworkScoreService$ScoringServiceConnection;->getAppData()Landroid/net/NetworkScorerAppData;
 HPLcom/android/server/NetworkScoreService$ScoringServiceConnection;->getPackageName()Ljava/lang/String;
@@ -2110,116 +3158,235 @@
 PLcom/android/server/NetworkScoreService$ScoringServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/NetworkScoreService$ScoringServiceConnection;->unbind(Landroid/content/Context;)V
 HSPLcom/android/server/NetworkScoreService$ServiceHandler;-><init>(Lcom/android/server/NetworkScoreService;Landroid/os/Looper;)V
-PLcom/android/server/NetworkScoreService$ServiceHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/NetworkScoreService$WifiInfoSupplier;-><init>(Landroid/content/Context;)V
-PLcom/android/server/NetworkScoreService$WifiInfoSupplier;->get()Landroid/net/wifi/WifiInfo;
+HSPLcom/android/server/NetworkScoreService$ServiceHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/NetworkScoreService$WifiInfoSupplier;-><init>(Landroid/content/Context;)V
+HPLcom/android/server/NetworkScoreService$WifiInfoSupplier;->get()Landroid/net/wifi/WifiInfo;
 PLcom/android/server/NetworkScoreService$WifiInfoSupplier;->get()Ljava/lang/Object;
 HSPLcom/android/server/NetworkScoreService;-><clinit>()V
 HSPLcom/android/server/NetworkScoreService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/NetworkScoreService;-><init>(Landroid/content/Context;Lcom/android/server/NetworkScorerAppManager;Ljava/util/function/Function;Landroid/os/Looper;)V
-PLcom/android/server/NetworkScoreService;->access$000()Z
-PLcom/android/server/NetworkScoreService;->access$100(Lcom/android/server/NetworkScoreService;)V
-PLcom/android/server/NetworkScoreService;->bindToScoringServiceIfNeeded()V
-PLcom/android/server/NetworkScoreService;->bindToScoringServiceIfNeeded(Landroid/net/NetworkScorerAppData;)V
-PLcom/android/server/NetworkScoreService;->clearInternal()V
+HSPLcom/android/server/NetworkScoreService;->access$000()Z
+HSPLcom/android/server/NetworkScoreService;->access$100(Lcom/android/server/NetworkScoreService;)V
+PLcom/android/server/NetworkScoreService;->access$200(Lcom/android/server/NetworkScoreService;)Lcom/android/server/NetworkScorerAppManager;
+PLcom/android/server/NetworkScoreService;->access$300(Lcom/android/server/NetworkScoreService;)V
+PLcom/android/server/NetworkScoreService;->access$400(Lcom/android/server/NetworkScoreService;Landroid/net/NetworkScorerAppData;)V
+PLcom/android/server/NetworkScoreService;->access$500(Lcom/android/server/NetworkScoreService;)Landroid/content/Context;
+HSPLcom/android/server/NetworkScoreService;->bindToScoringServiceIfNeeded()V
+HSPLcom/android/server/NetworkScoreService;->bindToScoringServiceIfNeeded(Landroid/net/NetworkScorerAppData;)V
+HSPLcom/android/server/NetworkScoreService;->clearInternal()V
+PLcom/android/server/NetworkScoreService;->clearScores()Z
 PLcom/android/server/NetworkScoreService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/NetworkScoreService;->enforceSystemOnly()V
 HSPLcom/android/server/NetworkScoreService;->enforceSystemOrHasScoreNetworks()V
+PLcom/android/server/NetworkScoreService;->enforceSystemOrIsActiveScorer(I)V
 PLcom/android/server/NetworkScoreService;->getActiveScorer()Landroid/net/NetworkScorerAppData;
 HSPLcom/android/server/NetworkScoreService;->getActiveScorerPackage()Ljava/lang/String;
-PLcom/android/server/NetworkScoreService;->getRecommendationProvider()Landroid/net/INetworkRecommendationProvider;
-PLcom/android/server/NetworkScoreService;->getScoreCacheLists()Ljava/util/Collection;
-PLcom/android/server/NetworkScoreService;->isCallerActiveScorer(I)Z
-PLcom/android/server/NetworkScoreService;->lambda$new$0$NetworkScoreService(I)[Ljava/lang/String;
+PLcom/android/server/NetworkScoreService;->getAllValidScorers()Ljava/util/List;
+HPLcom/android/server/NetworkScoreService;->getRecommendationProvider()Landroid/net/INetworkRecommendationProvider;
+HSPLcom/android/server/NetworkScoreService;->getScoreCacheLists()Ljava/util/Collection;
+HPLcom/android/server/NetworkScoreService;->isCallerActiveScorer(I)Z
+HSPLcom/android/server/NetworkScoreService;->lambda$new$0$NetworkScoreService(I)[Ljava/lang/String;
 PLcom/android/server/NetworkScoreService;->onUserUnlocked(I)V
-PLcom/android/server/NetworkScoreService;->refreshBinding()V
+HSPLcom/android/server/NetworkScoreService;->refreshBinding()V
 HSPLcom/android/server/NetworkScoreService;->registerNetworkScoreCache(ILandroid/net/INetworkScoreCache;I)V
-PLcom/android/server/NetworkScoreService;->registerPackageMonitorIfNeeded()V
+HSPLcom/android/server/NetworkScoreService;->registerPackageMonitorIfNeeded()V
 HSPLcom/android/server/NetworkScoreService;->registerRecommendationSettingsObserver()V
-PLcom/android/server/NetworkScoreService;->requestScores([Landroid/net/NetworkKey;)Z
-PLcom/android/server/NetworkScoreService;->sendCacheUpdateCallback(Ljava/util/function/BiConsumer;Ljava/util/Collection;)V
+HPLcom/android/server/NetworkScoreService;->requestScores([Landroid/net/NetworkKey;)Z
+HSPLcom/android/server/NetworkScoreService;->sendCacheUpdateCallback(Ljava/util/function/BiConsumer;Ljava/util/Collection;)V
 HSPLcom/android/server/NetworkScoreService;->systemReady()V
 PLcom/android/server/NetworkScoreService;->systemRunning()V
-PLcom/android/server/NetworkScoreService;->unbindFromScoringServiceIfNeeded()V
+HSPLcom/android/server/NetworkScoreService;->unbindFromScoringServiceIfNeeded()V
 PLcom/android/server/NetworkScoreService;->unregisterNetworkScoreCache(ILandroid/net/INetworkScoreCache;)V
-PLcom/android/server/NetworkScoreService;->updateScores([Landroid/net/ScoredNetwork;)Z
+HPLcom/android/server/NetworkScoreService;->updateScores([Landroid/net/ScoredNetwork;)Z
 HSPLcom/android/server/NetworkScorerAppManager$SettingsFacade;-><init>()V
-PLcom/android/server/NetworkScorerAppManager$SettingsFacade;->getInt(Landroid/content/Context;Ljava/lang/String;I)I
-PLcom/android/server/NetworkScorerAppManager$SettingsFacade;->getSecureInt(Landroid/content/Context;Ljava/lang/String;I)I
-PLcom/android/server/NetworkScorerAppManager$SettingsFacade;->getString(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/NetworkScorerAppManager$SettingsFacade;->putInt(Landroid/content/Context;Ljava/lang/String;I)Z
+HSPLcom/android/server/NetworkScorerAppManager$SettingsFacade;->getInt(Landroid/content/Context;Ljava/lang/String;I)I
+HPLcom/android/server/NetworkScorerAppManager$SettingsFacade;->getSecureInt(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$SettingsFacade;->putInt(Landroid/content/Context;Ljava/lang/String;I)Z
 HSPLcom/android/server/NetworkScorerAppManager;-><clinit>()V
 HSPLcom/android/server/NetworkScorerAppManager;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/NetworkScorerAppManager;-><init>(Landroid/content/Context;Lcom/android/server/NetworkScorerAppManager$SettingsFacade;)V
 PLcom/android/server/NetworkScorerAppManager;->canAccessLocation(ILjava/lang/String;)Z
-PLcom/android/server/NetworkScorerAppManager;->findUseOpenWifiNetworksActivity(Landroid/content/pm/ServiceInfo;)Landroid/content/ComponentName;
-PLcom/android/server/NetworkScorerAppManager;->getActiveScorer()Landroid/net/NetworkScorerAppData;
-PLcom/android/server/NetworkScorerAppManager;->getAllValidScorers()Ljava/util/List;
-PLcom/android/server/NetworkScorerAppManager;->getDefaultPackageSetting()Ljava/lang/String;
-PLcom/android/server/NetworkScorerAppManager;->getNetworkAvailableNotificationChannelId(Landroid/content/pm/ServiceInfo;)Ljava/lang/String;
-PLcom/android/server/NetworkScorerAppManager;->getNetworkRecommendationsEnabledSetting()I
-PLcom/android/server/NetworkScorerAppManager;->getNetworkRecommendationsPackage()Ljava/lang/String;
-PLcom/android/server/NetworkScorerAppManager;->getRecommendationServiceLabel(Landroid/content/pm/ServiceInfo;Landroid/content/pm/PackageManager;)Ljava/lang/String;
-PLcom/android/server/NetworkScorerAppManager;->getScorer(Ljava/lang/String;)Landroid/net/NetworkScorerAppData;
+HPLcom/android/server/NetworkScorerAppManager;->findUseOpenWifiNetworksActivity(Landroid/content/pm/ServiceInfo;)Landroid/content/ComponentName;
+HSPLcom/android/server/NetworkScorerAppManager;->getActiveScorer()Landroid/net/NetworkScorerAppData;
+HSPLcom/android/server/NetworkScorerAppManager;->getAllValidScorers()Ljava/util/List;
+HSPLcom/android/server/NetworkScorerAppManager;->getDefaultPackageSetting()Ljava/lang/String;
+HPLcom/android/server/NetworkScorerAppManager;->getNetworkAvailableNotificationChannelId(Landroid/content/pm/ServiceInfo;)Ljava/lang/String;
+HSPLcom/android/server/NetworkScorerAppManager;->getNetworkRecommendationsEnabledSetting()I
+HSPLcom/android/server/NetworkScorerAppManager;->getNetworkRecommendationsPackage()Ljava/lang/String;
+HPLcom/android/server/NetworkScorerAppManager;->getRecommendationServiceLabel(Landroid/content/pm/ServiceInfo;Landroid/content/pm/PackageManager;)Ljava/lang/String;
+HSPLcom/android/server/NetworkScorerAppManager;->getScorer(Ljava/lang/String;)Landroid/net/NetworkScorerAppData;
 PLcom/android/server/NetworkScorerAppManager;->hasPermissions(ILjava/lang/String;)Z
-PLcom/android/server/NetworkScorerAppManager;->hasScoreNetworksPermission(Ljava/lang/String;)Z
+HPLcom/android/server/NetworkScorerAppManager;->hasScoreNetworksPermission(Ljava/lang/String;)Z
 PLcom/android/server/NetworkScorerAppManager;->isLocationModeEnabled()Z
-PLcom/android/server/NetworkScorerAppManager;->migrateNetworkScorerAppSettingIfNeeded()V
-PLcom/android/server/NetworkScorerAppManager;->setNetworkRecommendationsEnabledSetting(I)V
-PLcom/android/server/NetworkScorerAppManager;->updateState()V
+HSPLcom/android/server/NetworkScorerAppManager;->migrateNetworkScorerAppSettingIfNeeded()V
+HSPLcom/android/server/NetworkScorerAppManager;->setNetworkRecommendationsEnabledSetting(I)V
+HSPLcom/android/server/NetworkScorerAppManager;->updateState()V
+HSPLcom/android/server/NetworkTimeUpdateService$1;-><init>(Lcom/android/server/NetworkTimeUpdateService;)V
+PLcom/android/server/NetworkTimeUpdateService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/NetworkTimeUpdateService$AutoTimeSettingObserver;-><init>(Landroid/content/Context;Landroid/os/Handler;I)V
+PLcom/android/server/NetworkTimeUpdateService$AutoTimeSettingObserver;->isAutomaticTimeEnabled()Z
+HSPLcom/android/server/NetworkTimeUpdateService$AutoTimeSettingObserver;->observe()V
+PLcom/android/server/NetworkTimeUpdateService$AutoTimeSettingObserver;->onChange(Z)V
+HSPLcom/android/server/NetworkTimeUpdateService$MyHandler;-><init>(Lcom/android/server/NetworkTimeUpdateService;Landroid/os/Looper;)V
+PLcom/android/server/NetworkTimeUpdateService$MyHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;-><init>(Lcom/android/server/NetworkTimeUpdateService;)V
+HSPLcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;-><init>(Lcom/android/server/NetworkTimeUpdateService;Lcom/android/server/NetworkTimeUpdateService$1;)V
+PLcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;->onAvailable(Landroid/net/Network;)V
+PLcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;->onLost(Landroid/net/Network;)V
+HSPLcom/android/server/NetworkTimeUpdateService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/NetworkTimeUpdateService;->access$100(Lcom/android/server/NetworkTimeUpdateService;)Landroid/os/Handler;
+PLcom/android/server/NetworkTimeUpdateService;->access$200(Lcom/android/server/NetworkTimeUpdateService;I)V
+PLcom/android/server/NetworkTimeUpdateService;->access$300(Lcom/android/server/NetworkTimeUpdateService;)Landroid/net/Network;
+PLcom/android/server/NetworkTimeUpdateService;->access$302(Lcom/android/server/NetworkTimeUpdateService;Landroid/net/Network;)Landroid/net/Network;
+PLcom/android/server/NetworkTimeUpdateService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/NetworkTimeUpdateService;->onPollNetworkTime(I)V
+HPLcom/android/server/NetworkTimeUpdateService;->onPollNetworkTimeUnderWakeLock(I)V
+HSPLcom/android/server/NetworkTimeUpdateService;->registerForAlarms()V
+PLcom/android/server/NetworkTimeUpdateService;->resetAlarm(J)V
+HSPLcom/android/server/NetworkTimeUpdateService;->systemRunning()V
 HSPLcom/android/server/NetworkTimeUpdateServiceImpl$1;-><init>(Lcom/android/server/NetworkTimeUpdateServiceImpl;)V
 PLcom/android/server/NetworkTimeUpdateServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/NetworkTimeUpdateServiceImpl$2;-><init>(Lcom/android/server/NetworkTimeUpdateServiceImpl;)V
+HSPLcom/android/server/NetworkTimeUpdateServiceImpl$AutoTimeSettingObserver;-><init>(Landroid/content/Context;Landroid/os/Handler;I)V
+PLcom/android/server/NetworkTimeUpdateServiceImpl$AutoTimeSettingObserver;->isAutomaticTimeEnabled()Z
+HSPLcom/android/server/NetworkTimeUpdateServiceImpl$AutoTimeSettingObserver;->observe()V
+PLcom/android/server/NetworkTimeUpdateServiceImpl$AutoTimeSettingObserver;->onChange(Z)V
 HSPLcom/android/server/NetworkTimeUpdateServiceImpl$MyHandler;-><init>(Lcom/android/server/NetworkTimeUpdateServiceImpl;Landroid/os/Looper;)V
 PLcom/android/server/NetworkTimeUpdateServiceImpl$MyHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/NetworkTimeUpdateServiceImpl$NetworkTimeUpdateCallback;-><init>(Lcom/android/server/NetworkTimeUpdateServiceImpl;)V
 HSPLcom/android/server/NetworkTimeUpdateServiceImpl$NetworkTimeUpdateCallback;-><init>(Lcom/android/server/NetworkTimeUpdateServiceImpl;Lcom/android/server/NetworkTimeUpdateServiceImpl$1;)V
-PLcom/android/server/NetworkTimeUpdateServiceImpl$NetworkTimeUpdateCallback;->onAvailable(Landroid/net/Network;)V
+HPLcom/android/server/NetworkTimeUpdateServiceImpl$NetworkTimeUpdateCallback;->onAvailable(Landroid/net/Network;)V
 PLcom/android/server/NetworkTimeUpdateServiceImpl$NetworkTimeUpdateCallback;->onLost(Landroid/net/Network;)V
 HSPLcom/android/server/NetworkTimeUpdateServiceImpl$SettingsObserver;-><init>(Landroid/os/Handler;I)V
 HSPLcom/android/server/NetworkTimeUpdateServiceImpl$SettingsObserver;->observe(Landroid/content/Context;)V
 HSPLcom/android/server/NetworkTimeUpdateServiceImpl;-><init>(Landroid/content/Context;)V
 PLcom/android/server/NetworkTimeUpdateServiceImpl;->access$100(Lcom/android/server/NetworkTimeUpdateServiceImpl;)Landroid/os/Handler;
+PLcom/android/server/NetworkTimeUpdateServiceImpl;->access$200(Lcom/android/server/NetworkTimeUpdateServiceImpl;I)V
+PLcom/android/server/NetworkTimeUpdateServiceImpl;->access$300(Lcom/android/server/NetworkTimeUpdateServiceImpl;)Landroid/net/Network;
 PLcom/android/server/NetworkTimeUpdateServiceImpl;->access$300(Lcom/android/server/NetworkTimeUpdateServiceImpl;I)V
+PLcom/android/server/NetworkTimeUpdateServiceImpl;->access$302(Lcom/android/server/NetworkTimeUpdateServiceImpl;Landroid/net/Network;)Landroid/net/Network;
 PLcom/android/server/NetworkTimeUpdateServiceImpl;->access$400(Lcom/android/server/NetworkTimeUpdateServiceImpl;)Landroid/net/Network;
 PLcom/android/server/NetworkTimeUpdateServiceImpl;->access$402(Lcom/android/server/NetworkTimeUpdateServiceImpl;Landroid/net/Network;)Landroid/net/Network;
 PLcom/android/server/NetworkTimeUpdateServiceImpl;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/NetworkTimeUpdateServiceImpl;->getNitzAge()J
 PLcom/android/server/NetworkTimeUpdateServiceImpl;->isAutomaticTimeRequested()Z
-PLcom/android/server/NetworkTimeUpdateServiceImpl;->onPollNetworkTime(I)V
-PLcom/android/server/NetworkTimeUpdateServiceImpl;->onPollNetworkTimeUnderWakeLock(I)V
+HPLcom/android/server/NetworkTimeUpdateServiceImpl;->onPollNetworkTime(I)V
+HPLcom/android/server/NetworkTimeUpdateServiceImpl;->onPollNetworkTimeUnderWakeLock(I)V
 HSPLcom/android/server/NetworkTimeUpdateServiceImpl;->registerForAlarms()V
 HSPLcom/android/server/NetworkTimeUpdateServiceImpl;->registerForTelephonyIntents()V
 PLcom/android/server/NetworkTimeUpdateServiceImpl;->resetAlarm(J)V
 HSPLcom/android/server/NetworkTimeUpdateServiceImpl;->systemRunning()V
 PLcom/android/server/NetworkTimeUpdateServiceImpl;->updateSystemClock(I)V
+HPLcom/android/server/NsdService$ClientInfo;-><init>(Lcom/android/server/NsdService;Lcom/android/internal/util/AsyncChannel;Landroid/os/Messenger;)V
+PLcom/android/server/NsdService$ClientInfo;-><init>(Lcom/android/server/NsdService;Lcom/android/internal/util/AsyncChannel;Landroid/os/Messenger;Lcom/android/server/NsdService$1;)V
+PLcom/android/server/NsdService$ClientInfo;->access$1100(Lcom/android/server/NsdService$ClientInfo;)Landroid/util/SparseIntArray;
+PLcom/android/server/NsdService$ClientInfo;->access$1200(Lcom/android/server/NsdService$ClientInfo;)Landroid/util/SparseIntArray;
+PLcom/android/server/NsdService$ClientInfo;->access$2200(Lcom/android/server/NsdService$ClientInfo;)Landroid/net/nsd/NsdServiceInfo;
+PLcom/android/server/NsdService$ClientInfo;->access$2202(Lcom/android/server/NsdService$ClientInfo;Landroid/net/nsd/NsdServiceInfo;)Landroid/net/nsd/NsdServiceInfo;
+PLcom/android/server/NsdService$ClientInfo;->access$2400(Lcom/android/server/NsdService$ClientInfo;I)I
+PLcom/android/server/NsdService$ClientInfo;->access$2500(Lcom/android/server/NsdService$ClientInfo;)Lcom/android/internal/util/AsyncChannel;
+PLcom/android/server/NsdService$ClientInfo;->access$500(Lcom/android/server/NsdService$ClientInfo;)V
+PLcom/android/server/NsdService$ClientInfo;->expungeAllRequests()V
+PLcom/android/server/NsdService$ClientInfo;->getClientId(I)I
+PLcom/android/server/NsdService$ClientInfo;->toString()Ljava/lang/String;
 HSPLcom/android/server/NsdService$DaemonConnection;-><init>(Lcom/android/server/NsdService$NativeCallbackReceiver;)V
+PLcom/android/server/NsdService$DaemonConnection;->execute([Ljava/lang/Object;)Z
+PLcom/android/server/NsdService$DaemonConnection;->start()V
+PLcom/android/server/NsdService$DaemonConnection;->stop()V
 HSPLcom/android/server/NsdService$NativeCallbackReceiver;-><init>(Lcom/android/server/NsdService;)V
 HSPLcom/android/server/NsdService$NativeCallbackReceiver;->awaitConnection()V
+PLcom/android/server/NsdService$NativeCallbackReceiver;->onCheckHoldWakeLock(I)Z
 HSPLcom/android/server/NsdService$NativeCallbackReceiver;->onDaemonConnected()V
+PLcom/android/server/NsdService$NativeCallbackReceiver;->onEvent(ILjava/lang/String;[Ljava/lang/String;)Z
+PLcom/android/server/NsdService$NativeEvent;-><init>(Lcom/android/server/NsdService;ILjava/lang/String;[Ljava/lang/String;)V
+PLcom/android/server/NsdService$NativeResponseCode;-><clinit>()V
+PLcom/android/server/NsdService$NativeResponseCode;->nameOf(I)Ljava/lang/String;
 HSPLcom/android/server/NsdService$NsdSettings$1;-><init>(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/NsdService$NsdSettings$1;->isEnabled()Z
 HSPLcom/android/server/NsdService$NsdSettings$1;->registerContentObserver(Landroid/net/Uri;Landroid/database/ContentObserver;)V
 HSPLcom/android/server/NsdService$NsdSettings;->makeDefault(Landroid/content/Context;)Lcom/android/server/NsdService$NsdSettings;
 HSPLcom/android/server/NsdService$NsdStateMachine$1;-><init>(Lcom/android/server/NsdService$NsdStateMachine;Landroid/os/Handler;)V
 HSPLcom/android/server/NsdService$NsdStateMachine$DefaultState;-><init>(Lcom/android/server/NsdService$NsdStateMachine;)V
+HPLcom/android/server/NsdService$NsdStateMachine$DefaultState;->processMessage(Landroid/os/Message;)Z
 HSPLcom/android/server/NsdService$NsdStateMachine$DisabledState;-><init>(Lcom/android/server/NsdService$NsdStateMachine;)V
 HSPLcom/android/server/NsdService$NsdStateMachine$EnabledState;-><init>(Lcom/android/server/NsdService$NsdStateMachine;)V
 HSPLcom/android/server/NsdService$NsdStateMachine$EnabledState;->enter()V
+HPLcom/android/server/NsdService$NsdStateMachine$EnabledState;->handleNativeEvent(ILjava/lang/String;[Ljava/lang/String;)Z
+PLcom/android/server/NsdService$NsdStateMachine$EnabledState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/NsdService$NsdStateMachine$EnabledState;->removeRequestMap(IILcom/android/server/NsdService$ClientInfo;)V
+PLcom/android/server/NsdService$NsdStateMachine$EnabledState;->requestLimitReached(Lcom/android/server/NsdService$ClientInfo;)Z
+PLcom/android/server/NsdService$NsdStateMachine$EnabledState;->storeRequestMap(IILcom/android/server/NsdService$ClientInfo;I)V
 HSPLcom/android/server/NsdService$NsdStateMachine;-><init>(Lcom/android/server/NsdService;Ljava/lang/String;Landroid/os/Handler;)V
+PLcom/android/server/NsdService$NsdStateMachine;->getWhatToString(I)Ljava/lang/String;
 HSPLcom/android/server/NsdService$NsdStateMachine;->registerForNsdSetting()V
 HSPLcom/android/server/NsdService;-><init>(Landroid/content/Context;Lcom/android/server/NsdService$NsdSettings;Landroid/os/Handler;Lcom/android/server/NsdService$DaemonConnectionSupplier;)V
 HSPLcom/android/server/NsdService;->access$000(Lcom/android/server/NsdService;)Z
+PLcom/android/server/NsdService;->access$1300(Lcom/android/server/NsdService;)Landroid/util/SparseArray;
+PLcom/android/server/NsdService;->access$1500(Lcom/android/server/NsdService;)I
+PLcom/android/server/NsdService;->access$1600(Lcom/android/server/NsdService;ILjava/lang/String;)Z
+PLcom/android/server/NsdService;->access$1700(Lcom/android/server/NsdService;Landroid/os/Message;ILjava/lang/Object;)V
+PLcom/android/server/NsdService;->access$1800(Lcom/android/server/NsdService;I)Z
+PLcom/android/server/NsdService;->access$1900(Lcom/android/server/NsdService;Landroid/os/Message;I)V
 HSPLcom/android/server/NsdService;->access$200(Lcom/android/server/NsdService;)Lcom/android/server/NsdService$NsdSettings;
+PLcom/android/server/NsdService;->access$2300(Lcom/android/server/NsdService;ILandroid/net/nsd/NsdServiceInfo;)Z
+PLcom/android/server/NsdService;->access$2600(Lcom/android/server/NsdService;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/NsdService;->access$2700(Lcom/android/server/NsdService;I)Z
+PLcom/android/server/NsdService;->access$2800(Lcom/android/server/NsdService;ILjava/lang/String;)Z
+PLcom/android/server/NsdService;->access$2900(Lcom/android/server/NsdService;I)Z
+PLcom/android/server/NsdService;->access$3000(Lcom/android/server/NsdService;)Lcom/android/server/NsdService$NsdStateMachine;
 HSPLcom/android/server/NsdService;->access$400(Lcom/android/server/NsdService;)Ljava/util/HashMap;
+PLcom/android/server/NsdService;->access$600(Lcom/android/server/NsdService;)Lcom/android/server/NsdService$DaemonConnection;
+PLcom/android/server/NsdService;->access$700(Lcom/android/server/NsdService;)Landroid/content/Context;
 HSPLcom/android/server/NsdService;->access$900(Lcom/android/server/NsdService;Z)V
 HSPLcom/android/server/NsdService;->create(Landroid/content/Context;)Lcom/android/server/NsdService;
+PLcom/android/server/NsdService;->discoverServices(ILjava/lang/String;)Z
 PLcom/android/server/NsdService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/NsdService;->getAddrInfo(ILjava/lang/String;)Z
+PLcom/android/server/NsdService;->getMessenger()Landroid/os/Messenger;
+PLcom/android/server/NsdService;->getUniqueId()I
 HSPLcom/android/server/NsdService;->isNsdEnabled()Z
+PLcom/android/server/NsdService;->obtainMessage(Landroid/os/Message;)Landroid/os/Message;
+PLcom/android/server/NsdService;->replyToMessage(Landroid/os/Message;I)V
+PLcom/android/server/NsdService;->replyToMessage(Landroid/os/Message;ILjava/lang/Object;)V
+PLcom/android/server/NsdService;->resolveService(ILandroid/net/nsd/NsdServiceInfo;)Z
 HSPLcom/android/server/NsdService;->sendNsdStateChangeBroadcast(Z)V
+PLcom/android/server/NsdService;->stopGetAddrInfo(I)Z
+PLcom/android/server/NsdService;->stopResolveService(I)Z
+PLcom/android/server/NsdService;->stopServiceDiscovery(I)Z
+HPLcom/android/server/NsdService;->unescape(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/PackageWatchdog$BootThreshold;-><init>(IJ)V
+HSPLcom/android/server/PackageWatchdog$BootThreshold;->getCount()I
+HSPLcom/android/server/PackageWatchdog$BootThreshold;->getStart()J
+HSPLcom/android/server/PackageWatchdog$BootThreshold;->incrementAndTest()Z
+HSPLcom/android/server/PackageWatchdog$BootThreshold;->setCount(I)V
+HSPLcom/android/server/PackageWatchdog$BootThreshold;->setStart(J)V
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;-><init>(Lcom/android/server/PackageWatchdog;Landroid/content/pm/VersionedPackage;JJZ)V
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;-><init>(Lcom/android/server/PackageWatchdog;Landroid/content/pm/VersionedPackage;JJZLcom/android/server/PackageWatchdog$1;)V
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->access$000(Lcom/android/server/PackageWatchdog$MonitoredPackage;)Ljava/lang/String;
+PLcom/android/server/PackageWatchdog$MonitoredPackage;->access$300(Lcom/android/server/PackageWatchdog$MonitoredPackage;)Landroid/util/LongArrayQueue;
+PLcom/android/server/PackageWatchdog$MonitoredPackage;->access$400(Lcom/android/server/PackageWatchdog$MonitoredPackage;)J
+PLcom/android/server/PackageWatchdog$MonitoredPackage;->access$500(Lcom/android/server/PackageWatchdog$MonitoredPackage;)J
+PLcom/android/server/PackageWatchdog$MonitoredPackage;->access$600(Lcom/android/server/PackageWatchdog$MonitoredPackage;)I
+PLcom/android/server/PackageWatchdog$MonitoredPackage;->access$700(Lcom/android/server/PackageWatchdog$MonitoredPackage;I)Ljava/lang/String;
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->getHealthCheckStateLocked()I
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->getName()Ljava/lang/String;
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->getShortestScheduleDurationMsLocked()J
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->handleElapsedTimeLocked(J)I
+PLcom/android/server/PackageWatchdog$MonitoredPackage;->isExpiredLocked()Z
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->isPendingHealthChecksLocked()Z
+PLcom/android/server/PackageWatchdog$MonitoredPackage;->onFailureLocked()Z
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->setHealthCheckActiveLocked(J)I
+PLcom/android/server/PackageWatchdog$MonitoredPackage;->toPositive(J)J
+PLcom/android/server/PackageWatchdog$MonitoredPackage;->toString(I)Ljava/lang/String;
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->tryPassHealthCheckLocked()I
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->updateHealthCheckStateLocked()I
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->writeLocked(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/PackageWatchdog$ObserverInternal;-><init>(Ljava/lang/String;Ljava/util/List;)V
-PLcom/android/server/PackageWatchdog$ObserverInternal;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/PackageWatchdog$ObserverInternal;->onPackageFailureLocked(Ljava/lang/String;)Z
+PLcom/android/server/PackageWatchdog$ObserverInternal;->access$100(Lcom/android/server/PackageWatchdog$ObserverInternal;J)Ljava/util/Set;
+HPLcom/android/server/PackageWatchdog$ObserverInternal;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/PackageWatchdog$ObserverInternal;->onPackageFailureLocked(Ljava/lang/String;)Z
+HPLcom/android/server/PackageWatchdog$ObserverInternal;->prunePackagesLocked(J)Ljava/util/Set;
 HSPLcom/android/server/PackageWatchdog$ObserverInternal;->read(Lorg/xmlpull/v1/XmlPullParser;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(Lorg/xmlpull/v1/XmlSerializer;)Z
@@ -2227,52 +3394,84 @@
 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
+PLcom/android/server/PackageWatchdog;->access$1000(Lcom/android/server/PackageWatchdog;)I
+PLcom/android/server/PackageWatchdog;->access$1100(Lcom/android/server/PackageWatchdog;)I
+PLcom/android/server/PackageWatchdog;->access$200()Lcom/android/server/PackageWatchdog;
+PLcom/android/server/PackageWatchdog;->access$900(Lcom/android/server/PackageWatchdog;)Lcom/android/server/PackageWatchdog$SystemClock;
+PLcom/android/server/PackageWatchdog;->checkAndMitigateNativeCrashes()V
 PLcom/android/server/PackageWatchdog;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/PackageWatchdog;->getInstance(Landroid/content/Context;)Lcom/android/server/PackageWatchdog;
 HSPLcom/android/server/PackageWatchdog;->getNextStateSyncMillisLocked()J
-PLcom/android/server/PackageWatchdog;->getPackagesPendingHealthChecksLocked()Ljava/util/Set;
-PLcom/android/server/PackageWatchdog;->lambda$CQuOnXthwwBaxcS5WoAlJJAz8Tk(Lcom/android/server/PackageWatchdog;)V
+HSPLcom/android/server/PackageWatchdog;->getPackagesPendingHealthChecksLocked()Ljava/util/Set;
+HSPLcom/android/server/PackageWatchdog;->getVersionedPackage(Ljava/lang/String;)Landroid/content/pm/VersionedPackage;
+HSPLcom/android/server/PackageWatchdog;->lambda$CQuOnXthwwBaxcS5WoAlJJAz8Tk(Lcom/android/server/PackageWatchdog;)V
 HSPLcom/android/server/PackageWatchdog;->lambda$Q0WI2EJpRFO1jF_7_YDaj1eGHas(Lcom/android/server/PackageWatchdog;)Z
-PLcom/android/server/PackageWatchdog;->lambda$onPackageFailure$3$PackageWatchdog(ILjava/util/List;)V
-PLcom/android/server/PackageWatchdog;->lambda$onPackagesReady$1$PackageWatchdog(Ljava/util/List;)V
-PLcom/android/server/PackageWatchdog;->lambda$onPackagesReady$2$PackageWatchdog()V
+PLcom/android/server/PackageWatchdog;->lambda$checkAndMitigateNativeCrashes$4$PackageWatchdog()V
+HPLcom/android/server/PackageWatchdog;->lambda$onPackageFailure$3$PackageWatchdog(ILjava/util/List;)V
+PLcom/android/server/PackageWatchdog;->lambda$onPackagesReady$0$PackageWatchdog(Ljava/lang/String;)V
+HSPLcom/android/server/PackageWatchdog;->lambda$onPackagesReady$1$PackageWatchdog(Ljava/util/List;)V
+HSPLcom/android/server/PackageWatchdog;->lambda$onPackagesReady$2$PackageWatchdog()V
+PLcom/android/server/PackageWatchdog;->lambda$scheduleCheckAndMitigateNativeCrashes$5$PackageWatchdog()V
 PLcom/android/server/PackageWatchdog;->lambda$setPropertyChangedListenerLocked$7$PackageWatchdog(Landroid/provider/DeviceConfig$Properties;)V
+PLcom/android/server/PackageWatchdog;->lambda$vRKcIrucEj03dz6ypRVINZtns1s(Lcom/android/server/PackageWatchdog;)V
 HSPLcom/android/server/PackageWatchdog;->loadFromFile()V
+HSPLcom/android/server/PackageWatchdog;->newMonitoredPackage(Ljava/lang/String;JJZ)Lcom/android/server/PackageWatchdog$MonitoredPackage;
+PLcom/android/server/PackageWatchdog;->newMonitoredPackage(Ljava/lang/String;JZ)Lcom/android/server/PackageWatchdog$MonitoredPackage;
+HSPLcom/android/server/PackageWatchdog;->noteBoot()V
+HPLcom/android/server/PackageWatchdog;->onHealthCheckPassed(Ljava/lang/String;)V
 PLcom/android/server/PackageWatchdog;->onPackageFailure(Ljava/util/List;I)V
 HSPLcom/android/server/PackageWatchdog;->onPackagesReady()V
-PLcom/android/server/PackageWatchdog;->onSupportedPackages(Ljava/util/List;)V
+HSPLcom/android/server/PackageWatchdog;->onSupportedPackages(Ljava/util/List;)V
 HSPLcom/android/server/PackageWatchdog;->pruneObserversLocked()V
 HSPLcom/android/server/PackageWatchdog;->registerConnectivityModuleHealthListener()V
 HSPLcom/android/server/PackageWatchdog;->registerHealthObserver(Lcom/android/server/PackageWatchdog$PackageHealthObserver;)V
 HSPLcom/android/server/PackageWatchdog;->saveToFile()Z
 HSPLcom/android/server/PackageWatchdog;->saveToFileAsync()V
+PLcom/android/server/PackageWatchdog;->scheduleCheckAndMitigateNativeCrashes()V
 HSPLcom/android/server/PackageWatchdog;->scheduleNextSyncStateLocked()V
 HSPLcom/android/server/PackageWatchdog;->setExplicitHealthCheckEnabled(Z)V
 HSPLcom/android/server/PackageWatchdog;->setPropertyChangedListenerLocked()V
-PLcom/android/server/PackageWatchdog;->syncRequests()V
+HPLcom/android/server/PackageWatchdog;->startObservingHealth(Lcom/android/server/PackageWatchdog$PackageHealthObserver;Ljava/util/List;J)V
+HSPLcom/android/server/PackageWatchdog;->syncRequests()V
 HSPLcom/android/server/PackageWatchdog;->syncRequestsAsync()V
 HSPLcom/android/server/PackageWatchdog;->syncState(Ljava/lang/String;)V
+PLcom/android/server/PackageWatchdog;->syncStateWithScheduledReason()V
 HSPLcom/android/server/PackageWatchdog;->updateConfigs()V
+PLcom/android/server/PackageWatchdog;->writeNow()V
+HPLcom/android/server/PendingIntentUtils;->createDontSendToRestrictedAppsBundle(Landroid/os/Bundle;)Landroid/os/Bundle;
 HSPLcom/android/server/PersistentDataBlockService$1;-><init>(Lcom/android/server/PersistentDataBlockService;)V
-PLcom/android/server/PersistentDataBlockService$1;->getFlashLockState()I
+HPLcom/android/server/PersistentDataBlockService$1;->getFlashLockState()I
 PLcom/android/server/PersistentDataBlockService$1;->getMaximumDataBlockSize()J
-PLcom/android/server/PersistentDataBlockService$1;->read()[B
-PLcom/android/server/PersistentDataBlockService$1;->write([B)I
+HPLcom/android/server/PersistentDataBlockService$1;->read()[B
+HPLcom/android/server/PersistentDataBlockService$1;->write([B)I
 HSPLcom/android/server/PersistentDataBlockService$2;-><init>(Lcom/android/server/PersistentDataBlockService;)V
+PLcom/android/server/PersistentDataBlockService$2;->forceOemUnlockEnabled(Z)V
 HSPLcom/android/server/PersistentDataBlockService$2;->getTestHarnessModeData()[B
 HSPLcom/android/server/PersistentDataBlockService$2;->readInternal(JI)[B
+PLcom/android/server/PersistentDataBlockService$2;->setFrpCredentialHandle([B)V
+PLcom/android/server/PersistentDataBlockService$2;->writeDataBuffer(JLjava/nio/ByteBuffer;)V
+PLcom/android/server/PersistentDataBlockService$2;->writeInternal([BJI)V
 HSPLcom/android/server/PersistentDataBlockService;-><clinit>()V
 HSPLcom/android/server/PersistentDataBlockService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/PersistentDataBlockService;->access$000(Lcom/android/server/PersistentDataBlockService;I)V
+PLcom/android/server/PersistentDataBlockService;->access$100(Lcom/android/server/PersistentDataBlockService;)J
+PLcom/android/server/PersistentDataBlockService;->access$1300(Lcom/android/server/PersistentDataBlockService;Z)V
+PLcom/android/server/PersistentDataBlockService;->access$1400(Lcom/android/server/PersistentDataBlockService;)V
+PLcom/android/server/PersistentDataBlockService;->access$1800(Lcom/android/server/PersistentDataBlockService;)J
 HSPLcom/android/server/PersistentDataBlockService;->access$1900(Lcom/android/server/PersistentDataBlockService;)J
 HSPLcom/android/server/PersistentDataBlockService;->access$200(Lcom/android/server/PersistentDataBlockService;)Ljava/lang/String;
 HSPLcom/android/server/PersistentDataBlockService;->access$400(Lcom/android/server/PersistentDataBlockService;)Ljava/lang/Object;
+PLcom/android/server/PersistentDataBlockService;->access$500(Lcom/android/server/PersistentDataBlockService;)Z
+PLcom/android/server/PersistentDataBlockService;->access$600(Lcom/android/server/PersistentDataBlockService;)Z
 HSPLcom/android/server/PersistentDataBlockService;->access$700(Lcom/android/server/PersistentDataBlockService;)Z
 PLcom/android/server/PersistentDataBlockService;->access$800(Lcom/android/server/PersistentDataBlockService;Ljava/io/DataInputStream;)I
 HSPLcom/android/server/PersistentDataBlockService;->computeAndWriteDigestLocked()Z
 HSPLcom/android/server/PersistentDataBlockService;->computeDigestLocked([B)[B
+PLcom/android/server/PersistentDataBlockService;->doGetMaximumDataBlockSize()J
 HSPLcom/android/server/PersistentDataBlockService;->doGetOemUnlockEnabled()Z
 HSPLcom/android/server/PersistentDataBlockService;->doSetOemUnlockEnabledLocked(Z)V
 HSPLcom/android/server/PersistentDataBlockService;->enforceChecksumValidity()Z
+HPLcom/android/server/PersistentDataBlockService;->enforceOemUnlockReadPermission()V
 PLcom/android/server/PersistentDataBlockService;->enforceUid(I)V
 HSPLcom/android/server/PersistentDataBlockService;->formatIfOemUnlockEnabled()V
 HSPLcom/android/server/PersistentDataBlockService;->formatPartitionLocked(Z)V
@@ -2287,6 +3486,7 @@
 HSPLcom/android/server/PinnerService$1;-><init>(Lcom/android/server/PinnerService;)V
 PLcom/android/server/PinnerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/PinnerService$2;-><init>(Lcom/android/server/PinnerService;Landroid/os/Handler;Landroid/net/Uri;)V
+PLcom/android/server/PinnerService$2;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/PinnerService$3;-><init>(Lcom/android/server/PinnerService;)V
 HSPLcom/android/server/PinnerService$3;->lambda$onUidActive$1(Ljava/lang/Object;I)V
 HSPLcom/android/server/PinnerService$3;->lambda$onUidGone$0(Ljava/lang/Object;I)V
@@ -2300,6 +3500,8 @@
 HSPLcom/android/server/PinnerService$PinRangeSource;-><init>(Lcom/android/server/PinnerService$1;)V
 HSPLcom/android/server/PinnerService$PinRangeSourceStatic;-><init>(II)V
 HSPLcom/android/server/PinnerService$PinRangeSourceStatic;->read(Lcom/android/server/PinnerService$PinRange;)Z
+HSPLcom/android/server/PinnerService$PinRangeSourceStream;-><init>(Ljava/io/InputStream;)V
+HSPLcom/android/server/PinnerService$PinRangeSourceStream;->read(Lcom/android/server/PinnerService$PinRange;)Z
 HSPLcom/android/server/PinnerService$PinnedApp;-><init>(Lcom/android/server/PinnerService;Landroid/content/pm/ApplicationInfo;)V
 HSPLcom/android/server/PinnerService$PinnedApp;-><init>(Lcom/android/server/PinnerService;Landroid/content/pm/ApplicationInfo;Lcom/android/server/PinnerService$1;)V
 HSPLcom/android/server/PinnerService$PinnedFile;-><init>(JILjava/lang/String;I)V
@@ -2309,22 +3511,31 @@
 HSPLcom/android/server/PinnerService$PinnerHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/PinnerService;-><clinit>()V
 HSPLcom/android/server/PinnerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/PinnerService;->access$100(Lcom/android/server/PinnerService;IIZ)V
+PLcom/android/server/PinnerService;->access$1000(Lcom/android/server/PinnerService;I)Ljava/lang/String;
+PLcom/android/server/PinnerService;->access$1100(Lcom/android/server/PinnerService;)Landroid/util/ArrayMap;
 HSPLcom/android/server/PinnerService;->access$1200(JJ)V
 HSPLcom/android/server/PinnerService;->access$1300(Lcom/android/server/PinnerService;)Landroid/app/ActivityManagerInternal;
 HSPLcom/android/server/PinnerService;->access$1400(Lcom/android/server/PinnerService;)V
 HSPLcom/android/server/PinnerService;->access$200(Lcom/android/server/PinnerService;)Lcom/android/server/PinnerService$PinnerHandler;
 HSPLcom/android/server/PinnerService;->access$300(Lcom/android/server/PinnerService;I)V
 HSPLcom/android/server/PinnerService;->access$400(Lcom/android/server/PinnerService;I)V
+PLcom/android/server/PinnerService;->access$700(Lcom/android/server/PinnerService;)Landroid/content/Context;
+PLcom/android/server/PinnerService;->access$800(Lcom/android/server/PinnerService;)Ljava/util/ArrayList;
+PLcom/android/server/PinnerService;->access$900(Lcom/android/server/PinnerService;)Landroid/util/ArrayMap;
 HSPLcom/android/server/PinnerService;->clamp(III)I
 HSPLcom/android/server/PinnerService;->getApplicationInfoForIntent(Landroid/content/Intent;IZ)Landroid/content/pm/ApplicationInfo;
+HSPLcom/android/server/PinnerService;->getCameraInfo(I)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/PinnerService;->getHomeInfo(I)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/PinnerService;->getInfoForKey(II)Landroid/content/pm/ApplicationInfo;
+PLcom/android/server/PinnerService;->getNameForKey(I)Ljava/lang/String;
 HSPLcom/android/server/PinnerService;->getSizeLimitForKey(I)I
 HSPLcom/android/server/PinnerService;->getUidForKey(I)I
 HSPLcom/android/server/PinnerService;->handlePinOnStart()V
 HSPLcom/android/server/PinnerService;->handleUidActive(I)V
 HSPLcom/android/server/PinnerService;->handleUidGone(I)V
 HSPLcom/android/server/PinnerService;->isResolverActivity(Landroid/content/pm/ActivityInfo;)Z
+PLcom/android/server/PinnerService;->lambda$6bekYOn4YXi0x7vYNWO40QyA-s8(Lcom/android/server/PinnerService;IIZ)V
 HSPLcom/android/server/PinnerService;->lambda$GeEX-8XoHeV0LEszxat7jOSlrs4(Lcom/android/server/PinnerService;I)V
 HSPLcom/android/server/PinnerService;->maybeOpenPinMetaInZip(Ljava/util/zip/ZipFile;Ljava/lang/String;)Ljava/io/InputStream;
 HSPLcom/android/server/PinnerService;->maybeOpenZip(Ljava/lang/String;)Ljava/util/zip/ZipFile;
@@ -2341,12 +3552,14 @@
 HSPLcom/android/server/PinnerService;->safeClose(Ljava/io/Closeable;)V
 HSPLcom/android/server/PinnerService;->safeClose(Ljava/io/FileDescriptor;)V
 HSPLcom/android/server/PinnerService;->safeMunmap(JJ)V
+PLcom/android/server/PinnerService;->sendPinAppMessage(IIZ)V
 HSPLcom/android/server/PinnerService;->sendPinAppsMessage(I)V
 HSPLcom/android/server/PinnerService;->unpinApp(I)V
-PLcom/android/server/PinnerService;->update(Landroid/util/ArraySet;Z)V
+HPLcom/android/server/PinnerService;->update(Landroid/util/ArraySet;Z)V
 HSPLcom/android/server/PinnerService;->updateActiveState(IZ)V
 HSPLcom/android/server/PruneInstantAppsJobService;-><clinit>()V
 PLcom/android/server/PruneInstantAppsJobService;-><init>()V
+PLcom/android/server/PruneInstantAppsJobService;->lambda$onStartJob$0$PruneInstantAppsJobService(Landroid/app/job/JobParameters;)V
 PLcom/android/server/PruneInstantAppsJobService;->onStartJob(Landroid/app/job/JobParameters;)Z
 PLcom/android/server/PruneInstantAppsJobService;->onStopJob(Landroid/app/job/JobParameters;)Z
 HSPLcom/android/server/PruneInstantAppsJobService;->schedule(Landroid/content/Context;)V
@@ -2358,71 +3571,142 @@
 HSPLcom/android/server/RandomBlock;->toFile(Ljava/lang/String;Z)V
 HSPLcom/android/server/RandomBlock;->truncateIfPossible(Ljava/io/RandomAccessFile;)V
 HSPLcom/android/server/RescueParty$BootThreshold;-><init>()V
+HSPLcom/android/server/RescueParty$BootThreshold;->getCount()I
+HSPLcom/android/server/RescueParty$BootThreshold;->getStart()J
+HSPLcom/android/server/RescueParty$BootThreshold;->setCount(I)V
+HSPLcom/android/server/RescueParty$BootThreshold;->setStart(J)V
+HSPLcom/android/server/RescueParty$RescuePartyObserver;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/RescueParty$RescuePartyObserver;->access$000(Lcom/android/server/RescueParty$RescuePartyObserver;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/RescueParty$RescuePartyObserver;->access$100(Lcom/android/server/RescueParty$RescuePartyObserver;Ljava/lang/String;)Ljava/util/Set;
+PLcom/android/server/RescueParty$RescuePartyObserver;->execute(Landroid/content/pm/VersionedPackage;I)Z
+HPLcom/android/server/RescueParty$RescuePartyObserver;->getCallingPackagesSet(Ljava/lang/String;)Ljava/util/Set;
+HSPLcom/android/server/RescueParty$RescuePartyObserver;->getInstance(Landroid/content/Context;)Lcom/android/server/RescueParty$RescuePartyObserver;
+HSPLcom/android/server/RescueParty$RescuePartyObserver;->getName()Ljava/lang/String;
+PLcom/android/server/RescueParty$RescuePartyObserver;->isPersistent()Z
+HPLcom/android/server/RescueParty$RescuePartyObserver;->mayObservePackage(Ljava/lang/String;)Z
+PLcom/android/server/RescueParty$RescuePartyObserver;->onHealthCheckFailed(Landroid/content/pm/VersionedPackage;I)I
+HSPLcom/android/server/RescueParty$RescuePartyObserver;->recordDeviceConfigAccess(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/RescueParty$Threshold;-><init>(IIJ)V
+HSPLcom/android/server/RescueParty$Threshold;->incrementAndTest()Z
 HSPLcom/android/server/RescueParty;-><clinit>()V
+PLcom/android/server/RescueParty;->access$300()I
+PLcom/android/server/RescueParty;->access$400(I)I
+PLcom/android/server/RescueParty;->access$500()Z
 HSPLcom/android/server/RescueParty;->executeRescueLevel(Landroid/content/Context;)V
+HSPLcom/android/server/RescueParty;->executeRescueLevel(Landroid/content/Context;Ljava/lang/String;)V
+HSPLcom/android/server/RescueParty;->getElapsedRealtime()J
+PLcom/android/server/RescueParty;->getNextRescueLevel()I
+HSPLcom/android/server/RescueParty;->handleMonitorCallback(Landroid/content/Context;Landroid/os/Bundle;)V
 HSPLcom/android/server/RescueParty;->handleNativeRescuePartyResets()V
 HSPLcom/android/server/RescueParty;->isDisabled()Z
 HSPLcom/android/server/RescueParty;->isUsbActive()Z
+HSPLcom/android/server/RescueParty;->lambda$onSettingsProviderPublished$0(Landroid/content/Context;Landroid/os/Bundle;)V
+PLcom/android/server/RescueParty;->mapRescueLevelToUserImpact(I)I
 HSPLcom/android/server/RescueParty;->noteBoot(Landroid/content/Context;)V
 HSPLcom/android/server/RescueParty;->onSettingsProviderPublished(Landroid/content/Context;)V
+HSPLcom/android/server/RescueParty;->registerHealthObserver(Landroid/content/Context;)V
+HPLcom/android/server/RescueParty;->startObservingPackages(Landroid/content/Context;Ljava/lang/String;)V
 HSPLcom/android/server/RuntimeService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/RuntimeService;->addDistroVersionDebugInfo(Ljava/lang/String;Ljava/lang/String;Llibcore/util/DebugInfo;)V
+PLcom/android/server/RuntimeService;->addTimeZoneApkDebugInfo(Llibcore/util/DebugInfo;)V
 PLcom/android/server/RuntimeService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/RuntimeService;->hasOption([Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/RuntimeService;->reportTimeZoneInfo(Llibcore/util/DebugInfo;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/SensorNotificationService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/SensorNotificationService;->onBootPhase(I)V
 PLcom/android/server/SensorNotificationService;->onLocationChanged(Landroid/location/Location;)V
+PLcom/android/server/SensorNotificationService;->onProviderDisabled(Ljava/lang/String;)V
+PLcom/android/server/SensorNotificationService;->onProviderEnabled(Ljava/lang/String;)V
 HSPLcom/android/server/SensorNotificationService;->onStart()V
+PLcom/android/server/SensorNotificationService;->useMockedLocation()Z
 HSPLcom/android/server/SensorPrivacyService$DeathRecipient;-><init>(Lcom/android/server/SensorPrivacyService;Landroid/hardware/ISensorPrivacyListener;)V
+PLcom/android/server/SensorPrivacyService$DeathRecipient;->binderDied()V
+PLcom/android/server/SensorPrivacyService$DeathRecipient;->destroy()V
 HSPLcom/android/server/SensorPrivacyService$SensorPrivacyHandler;-><init>(Lcom/android/server/SensorPrivacyService;Landroid/os/Looper;Landroid/content/Context;)V
 HSPLcom/android/server/SensorPrivacyService$SensorPrivacyHandler;->addListener(Landroid/hardware/ISensorPrivacyListener;)V
+PLcom/android/server/SensorPrivacyService$SensorPrivacyHandler;->removeListener(Landroid/hardware/ISensorPrivacyListener;)V
 HSPLcom/android/server/SensorPrivacyService$SensorPrivacyServiceImpl;-><init>(Lcom/android/server/SensorPrivacyService;Landroid/content/Context;)V
 HSPLcom/android/server/SensorPrivacyService$SensorPrivacyServiceImpl;->addSensorPrivacyListener(Landroid/hardware/ISensorPrivacyListener;)V
 HSPLcom/android/server/SensorPrivacyService$SensorPrivacyServiceImpl;->isSensorPrivacyEnabled()Z
 HSPLcom/android/server/SensorPrivacyService$SensorPrivacyServiceImpl;->readPersistedSensorPrivacyEnabledLocked()Z
+PLcom/android/server/SensorPrivacyService$SensorPrivacyServiceImpl;->removeSensorPrivacyListener(Landroid/hardware/ISensorPrivacyListener;)V
 HSPLcom/android/server/SensorPrivacyService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/SensorPrivacyService;->access$000(Lcom/android/server/SensorPrivacyService;)Lcom/android/server/SensorPrivacyService$SensorPrivacyServiceImpl;
 HSPLcom/android/server/SensorPrivacyService;->onStart()V
 HSPLcom/android/server/SerialService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/ServiceThread;-><init>(Ljava/lang/String;IZ)V
 HSPLcom/android/server/ServiceThread;->run()V
 HSPLcom/android/server/ServiceWatcher$1;-><init>(Lcom/android/server/ServiceWatcher;)V
-PLcom/android/server/ServiceWatcher$1;->onPackageAdded(Ljava/lang/String;I)V
-PLcom/android/server/ServiceWatcher$1;->onPackageChanged(Ljava/lang/String;I[Ljava/lang/String;)Z
-PLcom/android/server/ServiceWatcher$1;->onPackageUpdateFinished(Ljava/lang/String;I)V
+HPLcom/android/server/ServiceWatcher$1;->onPackageAdded(Ljava/lang/String;I)V
+HPLcom/android/server/ServiceWatcher$1;->onPackageChanged(Ljava/lang/String;I[Ljava/lang/String;)Z
+HPLcom/android/server/ServiceWatcher$1;->onPackageRemoved(Ljava/lang/String;I)V
+HPLcom/android/server/ServiceWatcher$1;->onPackageUpdateFinished(Ljava/lang/String;I)V
 HSPLcom/android/server/ServiceWatcher$2;-><init>(Lcom/android/server/ServiceWatcher;)V
-PLcom/android/server/ServiceWatcher$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/ServiceWatcher$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/ServiceWatcher$ServiceInfo;-><clinit>()V
+HSPLcom/android/server/ServiceWatcher$ServiceInfo;-><init>(ILandroid/content/ComponentName;I)V
+HSPLcom/android/server/ServiceWatcher$ServiceInfo;-><init>(Landroid/content/pm/ResolveInfo;I)V
+HSPLcom/android/server/ServiceWatcher$ServiceInfo;-><init>(Landroid/content/pm/ResolveInfo;ILcom/android/server/ServiceWatcher$1;)V
+HSPLcom/android/server/ServiceWatcher$ServiceInfo;->compareTo(Lcom/android/server/ServiceWatcher$ServiceInfo;)I
+HSPLcom/android/server/ServiceWatcher$ServiceInfo;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/ServiceWatcher$ServiceInfo;->toString()Ljava/lang/String;
+HSPLcom/android/server/ServiceWatcher;-><clinit>()V
+HSPLcom/android/server/ServiceWatcher;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/String;Lcom/android/server/ServiceWatcher$BinderRunner;Ljava/lang/Runnable;II)V
 HSPLcom/android/server/ServiceWatcher;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;IIILandroid/os/Handler;)V
-PLcom/android/server/ServiceWatcher;->access$000(Lcom/android/server/ServiceWatcher;Z)V
+HPLcom/android/server/ServiceWatcher;->access$000(Lcom/android/server/ServiceWatcher;Ljava/lang/String;)V
+HSPLcom/android/server/ServiceWatcher;->access$000(Lcom/android/server/ServiceWatcher;Z)V
 PLcom/android/server/ServiceWatcher;->access$100(Lcom/android/server/ServiceWatcher;)I
-PLcom/android/server/ServiceWatcher;->access$102(Lcom/android/server/ServiceWatcher;I)I
+HSPLcom/android/server/ServiceWatcher;->access$100(Lcom/android/server/ServiceWatcher;I)V
+HSPLcom/android/server/ServiceWatcher;->access$102(Lcom/android/server/ServiceWatcher;I)I
+PLcom/android/server/ServiceWatcher;->access$200(Lcom/android/server/ServiceWatcher;I)V
 HSPLcom/android/server/ServiceWatcher;->bind(Landroid/content/ComponentName;II)V
 HSPLcom/android/server/ServiceWatcher;->bindBestPackage(Z)V
-PLcom/android/server/ServiceWatcher;->getCurrentPackageName()Ljava/lang/String;
+PLcom/android/server/ServiceWatcher;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/ServiceWatcher;->getBoundService()Lcom/android/server/ServiceWatcher$ServiceInfo;
+HSPLcom/android/server/ServiceWatcher;->getCurrentPackageName()Ljava/lang/String;
+PLcom/android/server/ServiceWatcher;->getLogPrefix()Ljava/lang/String;
 HSPLcom/android/server/ServiceWatcher;->getSignatureSets(Landroid/content/Context;[Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLcom/android/server/ServiceWatcher;->isServiceMissing()Z
 HSPLcom/android/server/ServiceWatcher;->isSignatureMatch([Landroid/content/pm/Signature;Ljava/util/List;)Z
-PLcom/android/server/ServiceWatcher;->lambda$onServiceConnected$3$ServiceWatcher(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/server/ServiceWatcher;->lambda$runOnBinder$1$ServiceWatcher(Lcom/android/server/ServiceWatcher$BinderRunner;)V
+PLcom/android/server/ServiceWatcher;->lambda$onServiceConnected$1$ServiceWatcher()V
+HSPLcom/android/server/ServiceWatcher;->lambda$onServiceConnected$3$ServiceWatcher(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/ServiceWatcher;->lambda$onServiceDisconnected$4$ServiceWatcher(Landroid/content/ComponentName;)V
+HSPLcom/android/server/ServiceWatcher;->lambda$register$0$ServiceWatcher()V
+HSPLcom/android/server/ServiceWatcher;->lambda$runOnBinder$1$ServiceWatcher(Lcom/android/server/ServiceWatcher$BinderRunner;)V
+PLcom/android/server/ServiceWatcher;->lambda$runOnBinder$2$ServiceWatcher(Lcom/android/server/ServiceWatcher$BinderRunner;)V
+PLcom/android/server/ServiceWatcher;->lambda$runOnBinderBlocking$2$ServiceWatcher(Ljava/lang/Object;Lcom/android/server/ServiceWatcher$BlockingBinderRunner;)Ljava/lang/Object;
+PLcom/android/server/ServiceWatcher;->lambda$runOnBinderBlocking$3$ServiceWatcher(Ljava/lang/Object;Lcom/android/server/ServiceWatcher$BlockingBinderRunner;)Ljava/lang/Object;
 HSPLcom/android/server/ServiceWatcher;->lambda$start$0$ServiceWatcher()V
+HSPLcom/android/server/ServiceWatcher;->onBestServiceChanged(Z)V
 PLcom/android/server/ServiceWatcher;->onBind()V
-PLcom/android/server/ServiceWatcher;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/server/ServiceWatcher;->onServiceDisconnected(Landroid/content/ComponentName;)V
+HPLcom/android/server/ServiceWatcher;->onBindingDied(Landroid/content/ComponentName;)V
+HPLcom/android/server/ServiceWatcher;->onPackageChanged(Ljava/lang/String;)V
+HSPLcom/android/server/ServiceWatcher;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/ServiceWatcher;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/ServiceWatcher;->onUnbind()V
-HPLcom/android/server/ServiceWatcher;->runOnBinder(Lcom/android/server/ServiceWatcher$BinderRunner;)V
-HPLcom/android/server/ServiceWatcher;->runOnHandler(Ljava/lang/Runnable;)V
+HSPLcom/android/server/ServiceWatcher;->onUserSwitched(I)V
+PLcom/android/server/ServiceWatcher;->onUserUnlocked(I)V
+HSPLcom/android/server/ServiceWatcher;->rebind(Lcom/android/server/ServiceWatcher$ServiceInfo;)V
+HSPLcom/android/server/ServiceWatcher;->register()Z
+HSPLcom/android/server/ServiceWatcher;->runOnBinder(Lcom/android/server/ServiceWatcher$BinderRunner;)V
+PLcom/android/server/ServiceWatcher;->runOnBinderBlocking(Lcom/android/server/ServiceWatcher$BlockingBinderRunner;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/ServiceWatcher;->runOnHandler(Ljava/lang/Runnable;)V
+HPLcom/android/server/ServiceWatcher;->runOnHandlerBlocking(Ljava/util/concurrent/Callable;)Ljava/lang/Object;
 HSPLcom/android/server/ServiceWatcher;->start()Z
 PLcom/android/server/ServiceWatcher;->toString()Ljava/lang/String;
 HSPLcom/android/server/ServiceWatcher;->unbind()V
 PLcom/android/server/StorageManagerService$10;-><init>(Lcom/android/server/StorageManagerService;Ljava/lang/Runnable;)V
-PLcom/android/server/StorageManagerService$10;->onFinished(ILandroid/os/PersistableBundle;)V
+HPLcom/android/server/StorageManagerService$10;->onFinished(ILandroid/os/PersistableBundle;)V
 PLcom/android/server/StorageManagerService$11;-><init>(Lcom/android/server/StorageManagerService;Ljava/lang/Runnable;)V
 PLcom/android/server/StorageManagerService$11;->onFinished(ILandroid/os/PersistableBundle;)V
 HSPLcom/android/server/StorageManagerService$13;-><init>(Lcom/android/server/StorageManagerService;)V
 PLcom/android/server/StorageManagerService$13;->opChanged(IILjava/lang/String;)V
 HSPLcom/android/server/StorageManagerService$1;-><init>(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/StorageManagerService$2;-><init>(Lcom/android/server/StorageManagerService;Landroid/os/Handler;)V
+PLcom/android/server/StorageManagerService$2;->onChange(Z)V
 HSPLcom/android/server/StorageManagerService$3;-><init>(Lcom/android/server/StorageManagerService;Landroid/os/Handler;)V
+PLcom/android/server/StorageManagerService$3;->onChange(Z)V
 HSPLcom/android/server/StorageManagerService$4;-><init>(Lcom/android/server/StorageManagerService;)V
 PLcom/android/server/StorageManagerService$4;->onVolumeCreated(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/StorageManagerService$4;->onVolumeDestroyed(Ljava/lang/String;)V
@@ -2431,25 +3715,31 @@
 PLcom/android/server/StorageManagerService$4;->onVolumeStateChanged(Ljava/lang/String;I)V
 HSPLcom/android/server/StorageManagerService$5;-><init>(Lcom/android/server/StorageManagerService;)V
 HSPLcom/android/server/StorageManagerService$6;-><init>(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService$6;->binderDied()V
 PLcom/android/server/StorageManagerService$7;-><init>(Lcom/android/server/StorageManagerService;Landroid/os/storage/VolumeInfo;)V
+PLcom/android/server/StorageManagerService$7;->onVolumeChecking(Ljava/io/FileDescriptor;Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/StorageManagerService$9;-><init>(Lcom/android/server/StorageManagerService;Landroid/os/IVoldTaskListener;)V
 HSPLcom/android/server/StorageManagerService$9;->onFinished(ILandroid/os/PersistableBundle;)V
 HSPLcom/android/server/StorageManagerService$9;->onStatus(ILandroid/os/PersistableBundle;)V
-PLcom/android/server/StorageManagerService$AppFuseMountScope;-><init>(Lcom/android/server/StorageManagerService;II)V
-PLcom/android/server/StorageManagerService$AppFuseMountScope;->close()V
-PLcom/android/server/StorageManagerService$AppFuseMountScope;->open()Landroid/os/ParcelFileDescriptor;
-PLcom/android/server/StorageManagerService$AppFuseMountScope;->openFile(III)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/StorageManagerService$AppFuseMountScope;-><init>(Lcom/android/server/StorageManagerService;II)V
+HPLcom/android/server/StorageManagerService$AppFuseMountScope;->close()V
+HPLcom/android/server/StorageManagerService$AppFuseMountScope;->open()Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/StorageManagerService$AppFuseMountScope;->openFile(III)Landroid/os/ParcelFileDescriptor;
 HSPLcom/android/server/StorageManagerService$Callbacks;-><init>(Landroid/os/Looper;)V
 PLcom/android/server/StorageManagerService$Callbacks;->access$2700(Lcom/android/server/StorageManagerService$Callbacks;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/StorageManagerService$Callbacks;->access$3700(Lcom/android/server/StorageManagerService$Callbacks;Landroid/os/storage/VolumeInfo;II)V
+PLcom/android/server/StorageManagerService$Callbacks;->access$3800(Lcom/android/server/StorageManagerService$Callbacks;Landroid/os/storage/VolumeInfo;II)V
 PLcom/android/server/StorageManagerService$Callbacks;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/StorageManagerService$Callbacks;->invokeCallback(Landroid/os/storage/IStorageEventListener;ILcom/android/internal/os/SomeArgs;)V
 PLcom/android/server/StorageManagerService$Callbacks;->notifyStorageStateChanged(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/StorageManagerService$Callbacks;->notifyVolumeStateChanged(Landroid/os/storage/VolumeInfo;II)V
 HSPLcom/android/server/StorageManagerService$Callbacks;->register(Landroid/os/storage/IStorageEventListener;)V
+PLcom/android/server/StorageManagerService$Callbacks;->unregister(Landroid/os/storage/IStorageEventListener;)V
 HSPLcom/android/server/StorageManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/StorageManagerService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/StorageManagerService$Lifecycle;->onCleanupUser(I)V
 HSPLcom/android/server/StorageManagerService$Lifecycle;->onStart()V
+PLcom/android/server/StorageManagerService$Lifecycle;->onStopUser(I)V
 PLcom/android/server/StorageManagerService$Lifecycle;->onUnlockUser(I)V
 HSPLcom/android/server/StorageManagerService$ObbActionHandler;-><init>(Lcom/android/server/StorageManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;-><init>(Lcom/android/server/StorageManagerService;)V
@@ -2457,8 +3747,8 @@
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->addExternalStoragePolicy(Landroid/os/storage/StorageManagerInternal$ExternalStorageMountPolicy;)V
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->getExternalStorageMountMode(ILjava/lang/String;)I
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->hasExternalStorage(ILjava/lang/String;)Z
-HPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->onAppOpsChanged(IILjava/lang/String;I)V
-PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->onExternalStoragePolicyChanged(ILjava/lang/String;)V
+HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->onAppOpsChanged(IILjava/lang/String;I)V
+HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->onExternalStoragePolicyChanged(ILjava/lang/String;)V
 PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->onReset(Landroid/os/IVold;)V
 HSPLcom/android/server/StorageManagerService$StorageManagerServiceHandler;-><init>(Lcom/android/server/StorageManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/StorageManagerService$StorageManagerServiceHandler;->handleMessage(Landroid/os/Message;)V
@@ -2473,43 +3763,67 @@
 HSPLcom/android/server/StorageManagerService;->access$1300(Lcom/android/server/StorageManagerService;)J
 HSPLcom/android/server/StorageManagerService;->access$1302(Lcom/android/server/StorageManagerService;J)J
 HSPLcom/android/server/StorageManagerService;->access$1400(Lcom/android/server/StorageManagerService;)Ljava/io/File;
+PLcom/android/server/StorageManagerService;->access$1500(Lcom/android/server/StorageManagerService;)Landroid/os/IVold;
+PLcom/android/server/StorageManagerService;->access$1502(Lcom/android/server/StorageManagerService;Landroid/os/IVold;)Landroid/os/IVold;
 PLcom/android/server/StorageManagerService;->access$1600(Lcom/android/server/StorageManagerService;Landroid/os/storage/VolumeInfo;)Z
 PLcom/android/server/StorageManagerService;->access$1700(Lcom/android/server/StorageManagerService;Landroid/os/storage/VolumeInfo;)V
 HSPLcom/android/server/StorageManagerService;->access$1900(Lcom/android/server/StorageManagerService;)Landroid/content/Context;
 HSPLcom/android/server/StorageManagerService;->access$200(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService;->access$2100(Lcom/android/server/StorageManagerService;)V
 PLcom/android/server/StorageManagerService;->access$2200(Lcom/android/server/StorageManagerService;I)V
 PLcom/android/server/StorageManagerService;->access$2300(Lcom/android/server/StorageManagerService;)Landroid/util/ArrayMap;
+PLcom/android/server/StorageManagerService;->access$2400(Lcom/android/server/StorageManagerService;)Landroid/os/Handler;
+PLcom/android/server/StorageManagerService;->access$2500(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService;->access$2600(Lcom/android/server/StorageManagerService;)V
 HSPLcom/android/server/StorageManagerService;->access$2800(Lcom/android/server/StorageManagerService;)Ljava/lang/Object;
 PLcom/android/server/StorageManagerService;->access$2900(Lcom/android/server/StorageManagerService;)Landroid/util/ArrayMap;
 PLcom/android/server/StorageManagerService;->access$300(Lcom/android/server/StorageManagerService;)V
 PLcom/android/server/StorageManagerService;->access$3300(Lcom/android/server/StorageManagerService;Landroid/os/storage/VolumeInfo;)V
 PLcom/android/server/StorageManagerService;->access$3400(Lcom/android/server/StorageManagerService;Landroid/os/storage/VolumeInfo;II)V
+PLcom/android/server/StorageManagerService;->access$3600(Lcom/android/server/StorageManagerService;)Lcom/android/server/storage/StorageSessionController;
+PLcom/android/server/StorageManagerService;->access$4100(Lcom/android/server/StorageManagerService;)V
 HSPLcom/android/server/StorageManagerService;->access$4100(Lcom/android/server/StorageManagerService;Landroid/os/IVoldTaskListener;ILandroid/os/PersistableBundle;)V
 HSPLcom/android/server/StorageManagerService;->access$4200(Lcom/android/server/StorageManagerService;Landroid/os/IVoldTaskListener;ILandroid/os/PersistableBundle;)V
+HSPLcom/android/server/StorageManagerService;->access$4300(Lcom/android/server/StorageManagerService;Landroid/os/IVoldTaskListener;ILandroid/os/PersistableBundle;)V
 HSPLcom/android/server/StorageManagerService;->access$4300(Lcom/android/server/StorageManagerService;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/StorageManagerService;->access$4400(Lcom/android/server/StorageManagerService;Ljava/lang/String;)Landroid/os/storage/VolumeRecord;
+HSPLcom/android/server/StorageManagerService;->access$4400(Lcom/android/server/StorageManagerService;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/StorageManagerService;->access$4500(Lcom/android/server/StorageManagerService;Ljava/lang/String;)Landroid/os/storage/VolumeRecord;
 HSPLcom/android/server/StorageManagerService;->access$4900()Z
 PLcom/android/server/StorageManagerService;->access$500(Lcom/android/server/StorageManagerService;I)V
+HSPLcom/android/server/StorageManagerService;->access$5000()Z
 HSPLcom/android/server/StorageManagerService;->access$5000(Lcom/android/server/StorageManagerService;ILjava/lang/String;)I
 PLcom/android/server/StorageManagerService;->access$5100(Lcom/android/server/StorageManagerService;II)V
+HSPLcom/android/server/StorageManagerService;->access$5100(Lcom/android/server/StorageManagerService;ILjava/lang/String;)I
+HSPLcom/android/server/StorageManagerService;->access$5200(Lcom/android/server/StorageManagerService;II)V
+PLcom/android/server/StorageManagerService;->access$600(Lcom/android/server/StorageManagerService;I)V
+PLcom/android/server/StorageManagerService;->access$6000(Lcom/android/server/StorageManagerService;)Z
+PLcom/android/server/StorageManagerService;->access$700(Lcom/android/server/StorageManagerService;I)V
 HSPLcom/android/server/StorageManagerService;->addInternalVolumeLocked()V
-PLcom/android/server/StorageManagerService;->adjustAllocateFlags(IILjava/lang/String;)I
-PLcom/android/server/StorageManagerService;->allocateBytes(Ljava/lang/String;JILjava/lang/String;)V
+PLcom/android/server/StorageManagerService;->addUserKeyAuth(II[B[B)V
+HPLcom/android/server/StorageManagerService;->adjustAllocateFlags(IILjava/lang/String;)I
+HPLcom/android/server/StorageManagerService;->allocateBytes(Ljava/lang/String;JILjava/lang/String;)V
 PLcom/android/server/StorageManagerService;->bootCompleted()V
+PLcom/android/server/StorageManagerService;->changeEncryptionPassword(ILjava/lang/String;)I
 PLcom/android/server/StorageManagerService;->clearPassword()V
+PLcom/android/server/StorageManagerService;->clearUserKeyAuth(II[B[B)V
 PLcom/android/server/StorageManagerService;->commitChanges()V
 PLcom/android/server/StorageManagerService;->completeUnlockUser(I)V
 HSPLcom/android/server/StorageManagerService;->connectStoraged()V
 HSPLcom/android/server/StorageManagerService;->connectVold()V
 HSPLcom/android/server/StorageManagerService;->copyLocaleFromMountService()V
+PLcom/android/server/StorageManagerService;->createUserKey(IIZ)V
+PLcom/android/server/StorageManagerService;->destroyUserKey(I)V
+PLcom/android/server/StorageManagerService;->destroyUserStorage(Ljava/lang/String;II)V
 HSPLcom/android/server/StorageManagerService;->dispatchOnFinished(Landroid/os/IVoldTaskListener;ILandroid/os/PersistableBundle;)V
 HSPLcom/android/server/StorageManagerService;->dispatchOnStatus(Landroid/os/IVoldTaskListener;ILandroid/os/PersistableBundle;)V
-PLcom/android/server/StorageManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/StorageManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/StorageManagerService;->encodeBytes([B)Ljava/lang/String;
 HSPLcom/android/server/StorageManagerService;->enforcePermission(Ljava/lang/String;)V
 HSPLcom/android/server/StorageManagerService;->findRecordForPath(Ljava/lang/String;)Landroid/os/storage/VolumeRecord;
+PLcom/android/server/StorageManagerService;->fixateNewestUserKeyAuth(I)V
 HSPLcom/android/server/StorageManagerService;->fstrim(ILandroid/os/IVoldTaskListener;)V
-PLcom/android/server/StorageManagerService;->getAllocatableBytes(Ljava/lang/String;ILjava/lang/String;)J
+HPLcom/android/server/StorageManagerService;->getAllocatableBytes(Ljava/lang/String;ILjava/lang/String;)J
 PLcom/android/server/StorageManagerService;->getCacheQuotaBytes(Ljava/lang/String;I)J
 PLcom/android/server/StorageManagerService;->getCacheSizeBytes(Ljava/lang/String;I)J
 HSPLcom/android/server/StorageManagerService;->getDefaultPrimaryStorageUuid()Ljava/lang/String;
@@ -2527,43 +3841,57 @@
 HSPLcom/android/server/StorageManagerService;->handleSystemReady()V
 HSPLcom/android/server/StorageManagerService;->initIfBootedAndConnected()V
 PLcom/android/server/StorageManagerService;->isBroadcastWorthy(Landroid/os/storage/VolumeInfo;)Z
+PLcom/android/server/StorageManagerService;->isConvertibleToFBE()Z
 PLcom/android/server/StorageManagerService;->isMountDisallowed(Landroid/os/storage/VolumeInfo;)Z
 HSPLcom/android/server/StorageManagerService;->isSystemUnlocked(I)Z
 HSPLcom/android/server/StorageManagerService;->isUserKeyUnlocked(I)Z
 PLcom/android/server/StorageManagerService;->killMediaProvider(Ljava/util/List;)V
+PLcom/android/server/StorageManagerService;->lambda$connectVold$2$StorageManagerService()V
 PLcom/android/server/StorageManagerService;->lambda$handleSystemReady$0$StorageManagerService(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/StorageManagerService;->lastMaintenance()J
+PLcom/android/server/StorageManagerService;->lockUserKey(I)V
 PLcom/android/server/StorageManagerService;->maybeLogMediaMount(Landroid/os/storage/VolumeInfo;I)V
-PLcom/android/server/StorageManagerService;->mkdirs(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/StorageManagerService;->monitor()V
+HPLcom/android/server/StorageManagerService;->mkdirs(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/StorageManagerService;->monitor()V
 PLcom/android/server/StorageManagerService;->mount(Landroid/os/storage/VolumeInfo;)V
-PLcom/android/server/StorageManagerService;->mountProxyFileDescriptorBridge()Lcom/android/internal/os/AppFuseMount;
+HPLcom/android/server/StorageManagerService;->mountProxyFileDescriptorBridge()Lcom/android/internal/os/AppFuseMount;
 HSPLcom/android/server/StorageManagerService;->needsCheckpoint()Z
-PLcom/android/server/StorageManagerService;->onAwakeStateChanged(Z)V
+HPLcom/android/server/StorageManagerService;->onAwakeStateChanged(Z)V
+PLcom/android/server/StorageManagerService;->onCleanupUser(I)V
 HSPLcom/android/server/StorageManagerService;->onDaemonConnected()V
-PLcom/android/server/StorageManagerService;->onKeyguardStateChanged(Z)V
+HPLcom/android/server/StorageManagerService;->onKeyguardStateChanged(Z)V
+PLcom/android/server/StorageManagerService;->onStopUser(I)V
 PLcom/android/server/StorageManagerService;->onUnlockUser(I)V
 PLcom/android/server/StorageManagerService;->onVolumeCreatedLocked(Landroid/os/storage/VolumeInfo;)V
 PLcom/android/server/StorageManagerService;->onVolumeStateChangedLocked(Landroid/os/storage/VolumeInfo;II)V
-PLcom/android/server/StorageManagerService;->openProxyFileDescriptor(III)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/StorageManagerService;->openProxyFileDescriptor(III)Landroid/os/ParcelFileDescriptor;
 PLcom/android/server/StorageManagerService;->prepareUserStorage(Ljava/lang/String;III)V
 HSPLcom/android/server/StorageManagerService;->readSettingsLocked()V
+HSPLcom/android/server/StorageManagerService;->readVolumeRecord(Lorg/xmlpull/v1/XmlPullParser;)Landroid/os/storage/VolumeRecord;
 PLcom/android/server/StorageManagerService;->refreshFuseSettings()V
 HSPLcom/android/server/StorageManagerService;->refreshIsolatedStorageSettings()V
 HSPLcom/android/server/StorageManagerService;->refreshZramSettings()V
 HSPLcom/android/server/StorageManagerService;->registerListener(Landroid/os/storage/IStorageEventListener;)V
-PLcom/android/server/StorageManagerService;->remountUidExternalStorage(II)V
+HSPLcom/android/server/StorageManagerService;->remountUidExternalStorage(II)V
 HSPLcom/android/server/StorageManagerService;->resetIfBootedAndConnected()V
 PLcom/android/server/StorageManagerService;->runIdleMaint(Ljava/lang/Runnable;)V
 HSPLcom/android/server/StorageManagerService;->runIdleMaintenance(Ljava/lang/Runnable;)V
 HSPLcom/android/server/StorageManagerService;->runMaintenance()V
 HSPLcom/android/server/StorageManagerService;->scrubPath(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/StorageManagerService;->servicesReady()V
+PLcom/android/server/StorageManagerService;->setField(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/StorageManagerService;->start()V
+PLcom/android/server/StorageManagerService;->startCheckpoint(I)V
 PLcom/android/server/StorageManagerService;->supportsBlockCheckpoint()Z
+PLcom/android/server/StorageManagerService;->supportsCheckpoint()Z
 HSPLcom/android/server/StorageManagerService;->systemReady()V
 PLcom/android/server/StorageManagerService;->unlockUserKey(II[B[B)V
+PLcom/android/server/StorageManagerService;->unmountObb(Ljava/lang/String;ZLandroid/os/storage/IObbActionListener;I)V
+PLcom/android/server/StorageManagerService;->unregisterListener(Landroid/os/storage/IStorageEventListener;)V
 PLcom/android/server/StorageManagerService;->updateFusePropFromSettings()V
+HSPLcom/android/server/SystemConfigService$1;-><init>(Lcom/android/server/SystemConfigService;)V
+HSPLcom/android/server/SystemConfigService;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/SystemConfigService;->onStart()V
 HSPLcom/android/server/SystemServer;-><init>()V
 HSPLcom/android/server/SystemServer;->createSystemContext()V
 HSPLcom/android/server/SystemServer;->deviceHasConfigString(Landroid/content/Context;I)Z
@@ -2572,7 +3900,12 @@
 HSPLcom/android/server/SystemServer;->lambda$startOtherServices$1()V
 HSPLcom/android/server/SystemServer;->lambda$startOtherServices$2()V
 HSPLcom/android/server/SystemServer;->lambda$startOtherServices$3$SystemServer()V
+HSPLcom/android/server/SystemServer;->lambda$startOtherServices$4$SystemServer()V
 HSPLcom/android/server/SystemServer;->lambda$startOtherServices$4$SystemServer(Lcom/android/server/utils/TimingsTraceAndSlog;Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;ZLcom/android/server/ConnectivityService;Lcom/android/server/NetworkManagementService;Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/IpSecService;Lcom/android/server/net/NetworkStatsService;Lcom/android/server/CountryDetectorService;Lcom/android/server/NetworkTimeUpdateService;Lcom/android/server/input/InputManagerService;Lcom/android/server/TelephonyRegistry;Lcom/android/server/media/MediaRouterService;Lcom/android/server/MmsServiceBroker;)V
+HSPLcom/android/server/SystemServer;->lambda$startOtherServices$4(Landroid/os/IBinder;)V
+HSPLcom/android/server/SystemServer;->lambda$startOtherServices$5$SystemServer(Lcom/android/server/utils/TimingsTraceAndSlog;Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;ZLcom/android/server/ConnectivityService;Lcom/android/server/NetworkManagementService;Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/IpSecService;Lcom/android/server/net/NetworkStatsService;Lcom/android/server/CountryDetectorService;Lcom/android/server/NetworkTimeUpdateService;Lcom/android/server/input/InputManagerService;Lcom/android/server/TelephonyRegistry;Lcom/android/server/media/MediaRouterService;Lcom/android/server/MmsServiceBroker;)V
+PLcom/android/server/SystemServer;->lambda$startOtherServices$5(Landroid/os/IBinder;)V
+HSPLcom/android/server/SystemServer;->lambda$startOtherServices$6$SystemServer(Lcom/android/server/utils/TimingsTraceAndSlog;Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;ZLcom/android/server/ConnectivityService;Lcom/android/server/NetworkManagementService;Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/IpSecService;Lcom/android/server/net/NetworkStatsService;Lcom/android/server/CountryDetectorService;Lcom/android/server/NetworkTimeUpdateService;Lcom/android/server/input/InputManagerService;Lcom/android/server/TelephonyRegistry;Lcom/android/server/media/MediaRouterService;Lcom/android/server/MmsServiceBroker;)V
 HSPLcom/android/server/SystemServer;->main([Ljava/lang/String;)V
 HSPLcom/android/server/SystemServer;->performPendingShutdown()V
 HSPLcom/android/server/SystemServer;->run()V
@@ -2586,36 +3919,51 @@
 HSPLcom/android/server/SystemServerInitThreadPool;-><clinit>()V
 HSPLcom/android/server/SystemServerInitThreadPool;-><init>()V
 HSPLcom/android/server/SystemServerInitThreadPool;->lambda$submitTask$0$SystemServerInitThreadPool(Ljava/lang/String;Ljava/lang/Runnable;)V
-PLcom/android/server/SystemServerInitThreadPool;->shutdown()V
+HSPLcom/android/server/SystemServerInitThreadPool;->shutdown()V
 HSPLcom/android/server/SystemServerInitThreadPool;->start()V
 HSPLcom/android/server/SystemServerInitThreadPool;->submit(Ljava/lang/Runnable;Ljava/lang/String;)Ljava/util/concurrent/Future;
 HSPLcom/android/server/SystemServerInitThreadPool;->submitTask(Ljava/lang/Runnable;Ljava/lang/String;)Ljava/util/concurrent/Future;
+HSPLcom/android/server/SystemService$TargetUser;-><init>(Landroid/content/pm/UserInfo;)V
+PLcom/android/server/SystemService$TargetUser;->getUserHandle()Landroid/os/UserHandle;
+PLcom/android/server/SystemService$TargetUser;->getUserIdentifier()I
+HSPLcom/android/server/SystemService$TargetUser;->getUserInfo()Landroid/content/pm/UserInfo;
 HSPLcom/android/server/SystemService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/SystemService;->dumpSupportedUsers(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/SystemService;->getBinderService(Ljava/lang/String;)Landroid/os/IBinder;
 HSPLcom/android/server/SystemService;->getContext()Landroid/content/Context;
 HSPLcom/android/server/SystemService;->getLocalService(Ljava/lang/Class;)Ljava/lang/Object;
 HSPLcom/android/server/SystemService;->getManager()Lcom/android/server/SystemServiceManager;
+PLcom/android/server/SystemService;->getUiContext()Landroid/content/Context;
 HSPLcom/android/server/SystemService;->isSafeMode()Z
 HSPLcom/android/server/SystemService;->isSupported(Landroid/content/pm/UserInfo;)Z
+HSPLcom/android/server/SystemService;->isSupportedUser(Lcom/android/server/SystemService$TargetUser;)Z
 HSPLcom/android/server/SystemService;->onBootPhase(I)V
-PLcom/android/server/SystemService;->onStartUser(I)V
-PLcom/android/server/SystemService;->onStartUser(Landroid/content/pm/UserInfo;)V
+HPLcom/android/server/SystemService;->onCleanupUser(I)V
+HSPLcom/android/server/SystemService;->onStartUser(I)V
+HSPLcom/android/server/SystemService;->onStartUser(Landroid/content/pm/UserInfo;)V
+HSPLcom/android/server/SystemService;->onStartUser(Lcom/android/server/SystemService$TargetUser;)V
+PLcom/android/server/SystemService;->onStopUser(I)V
+PLcom/android/server/SystemService;->onStopUser(Landroid/content/pm/UserInfo;)V
+PLcom/android/server/SystemService;->onStopUser(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/SystemService;->onUnlockUser(I)V
-PLcom/android/server/SystemService;->onUnlockUser(Landroid/content/pm/UserInfo;)V
+HPLcom/android/server/SystemService;->onUnlockUser(Landroid/content/pm/UserInfo;)V
+HPLcom/android/server/SystemService;->onUnlockUser(Lcom/android/server/SystemService$TargetUser;)V
 HSPLcom/android/server/SystemService;->publishBinderService(Ljava/lang/String;Landroid/os/IBinder;)V
 HSPLcom/android/server/SystemService;->publishBinderService(Ljava/lang/String;Landroid/os/IBinder;Z)V
 HSPLcom/android/server/SystemService;->publishBinderService(Ljava/lang/String;Landroid/os/IBinder;ZI)V
 HSPLcom/android/server/SystemService;->publishLocalService(Ljava/lang/Class;Ljava/lang/Object;)V
 HSPLcom/android/server/SystemServiceManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/SystemServiceManager;->cleanupUser(I)V
 HSPLcom/android/server/SystemServiceManager;->ensureSystemDir()Ljava/io/File;
 PLcom/android/server/SystemServiceManager;->getRuntimeStartElapsedTime()J
 PLcom/android/server/SystemServiceManager;->getRuntimeStartUptime()J
-PLcom/android/server/SystemServiceManager;->getUserInfo(I)Landroid/content/pm/UserInfo;
+HSPLcom/android/server/SystemServiceManager;->getUserInfo(I)Landroid/content/pm/UserInfo;
 HSPLcom/android/server/SystemServiceManager;->isBootCompleted()Z
 HSPLcom/android/server/SystemServiceManager;->isRuntimeRestarted()Z
 HSPLcom/android/server/SystemServiceManager;->isSafeMode()Z
-PLcom/android/server/SystemServiceManager;->onUser(Lcom/android/server/utils/TimingsTraceAndSlog;Ljava/lang/String;I)V
-HPLcom/android/server/SystemServiceManager;->onUser(Lcom/android/server/utils/TimingsTraceAndSlog;Ljava/lang/String;II)V
+HSPLcom/android/server/SystemServiceManager;->loadClassFromLoader(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Class;
+HSPLcom/android/server/SystemServiceManager;->onUser(Lcom/android/server/utils/TimingsTraceAndSlog;Ljava/lang/String;I)V
+HSPLcom/android/server/SystemServiceManager;->onUser(Lcom/android/server/utils/TimingsTraceAndSlog;Ljava/lang/String;II)V
 PLcom/android/server/SystemServiceManager;->onUser(Ljava/lang/String;I)V
 HSPLcom/android/server/SystemServiceManager;->preSystemReady()V
 HSPLcom/android/server/SystemServiceManager;->setSafeMode(Z)V
@@ -2624,7 +3972,9 @@
 HSPLcom/android/server/SystemServiceManager;->startService(Lcom/android/server/SystemService;)V
 HSPLcom/android/server/SystemServiceManager;->startService(Ljava/lang/Class;)Lcom/android/server/SystemService;
 HSPLcom/android/server/SystemServiceManager;->startService(Ljava/lang/String;)Lcom/android/server/SystemService;
-PLcom/android/server/SystemServiceManager;->startUser(Lcom/android/server/utils/TimingsTraceAndSlog;I)V
+HSPLcom/android/server/SystemServiceManager;->startServiceFromJar(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/SystemService;
+HSPLcom/android/server/SystemServiceManager;->startUser(Lcom/android/server/utils/TimingsTraceAndSlog;I)V
+PLcom/android/server/SystemServiceManager;->stopUser(I)V
 PLcom/android/server/SystemServiceManager;->unlockUser(I)V
 HSPLcom/android/server/SystemServiceManager;->warnIfTooLong(JLcom/android/server/SystemService;Ljava/lang/String;)V
 HSPLcom/android/server/SystemUpdateManagerService;-><init>(Landroid/content/Context;)V
@@ -2632,64 +3982,114 @@
 HSPLcom/android/server/SystemUpdateManagerService;->loadSystemUpdateInfoLocked()Landroid/os/Bundle;
 HSPLcom/android/server/SystemUpdateManagerService;->readInfoFileLocked(Lorg/xmlpull/v1/XmlPullParser;)Landroid/os/PersistableBundle;
 HSPLcom/android/server/SystemUpdateManagerService;->removeInfoFileAndGetDefaultInfoBundleLocked()Landroid/os/Bundle;
-PLcom/android/server/SystemUpdateManagerService;->retrieveSystemUpdateInfo()Landroid/os/Bundle;
+HPLcom/android/server/SystemUpdateManagerService;->retrieveSystemUpdateInfo()Landroid/os/Bundle;
 PLcom/android/server/SystemUpdateManagerService;->saveSystemUpdateInfoLocked(Landroid/os/PersistableBundle;I)V
 PLcom/android/server/SystemUpdateManagerService;->updateSystemUpdateInfo(Landroid/os/PersistableBundle;)V
 PLcom/android/server/SystemUpdateManagerService;->writeInfoFileLocked(Landroid/os/PersistableBundle;)Z
 HSPLcom/android/server/TelephonyRegistry$1;-><init>(Lcom/android/server/TelephonyRegistry;)V
-PLcom/android/server/TelephonyRegistry$1;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/TelephonyRegistry$1;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/TelephonyRegistry$2;-><init>(Lcom/android/server/TelephonyRegistry;)V
-PLcom/android/server/TelephonyRegistry$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/TelephonyRegistry$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/TelephonyRegistry$3;-><clinit>()V
 HSPLcom/android/server/TelephonyRegistry$Record;-><init>()V
 HSPLcom/android/server/TelephonyRegistry$Record;-><init>(Lcom/android/server/TelephonyRegistry$1;)V
+HPLcom/android/server/TelephonyRegistry$Record;->canReadCallLog()Z
+PLcom/android/server/TelephonyRegistry$Record;->matchOnOpportunisticSubscriptionsChangedListener()Z
 PLcom/android/server/TelephonyRegistry$Record;->matchOnSubscriptionsChangedListener()Z
-PLcom/android/server/TelephonyRegistry$Record;->matchPhoneStateListenerEvent(I)Z
-PLcom/android/server/TelephonyRegistry$Record;->toString()Ljava/lang/String;
+HPLcom/android/server/TelephonyRegistry$Record;->matchPhoneStateListenerEvent(I)Z
+HPLcom/android/server/TelephonyRegistry$Record;->toString()Ljava/lang/String;
 HSPLcom/android/server/TelephonyRegistry$TelephonyRegistryDeathRecipient;-><init>(Lcom/android/server/TelephonyRegistry;Landroid/os/IBinder;)V
-PLcom/android/server/TelephonyRegistry$TelephonyRegistryDeathRecipient;->binderDied()V
+HPLcom/android/server/TelephonyRegistry$TelephonyRegistryDeathRecipient;->binderDied()V
+HSPLcom/android/server/TelephonyRegistry;-><clinit>()V
 HSPLcom/android/server/TelephonyRegistry;-><init>(Landroid/content/Context;)V
-PLcom/android/server/TelephonyRegistry;->access$000(Lcom/android/server/TelephonyRegistry;)Landroid/telephony/TelephonyManager;
+HSPLcom/android/server/TelephonyRegistry;->access$000(Lcom/android/server/TelephonyRegistry;)Landroid/telephony/TelephonyManager;
 PLcom/android/server/TelephonyRegistry;->access$100(Lcom/android/server/TelephonyRegistry;)[Landroid/os/Bundle;
+HSPLcom/android/server/TelephonyRegistry;->access$100(Lcom/android/server/TelephonyRegistry;)[Landroid/telephony/CellIdentity;
+PLcom/android/server/TelephonyRegistry;->access$1000(Lcom/android/server/TelephonyRegistry;I)I
 PLcom/android/server/TelephonyRegistry;->access$1000(Lcom/android/server/TelephonyRegistry;I)Z
-PLcom/android/server/TelephonyRegistry;->access$900(Lcom/android/server/TelephonyRegistry;)Landroid/os/Handler;
+PLcom/android/server/TelephonyRegistry;->access$1100(Lcom/android/server/TelephonyRegistry;I)Z
+PLcom/android/server/TelephonyRegistry;->access$1200(Lcom/android/server/TelephonyRegistry;)V
+PLcom/android/server/TelephonyRegistry;->access$200(Lcom/android/server/TelephonyRegistry;)Ljava/util/ArrayList;
+PLcom/android/server/TelephonyRegistry;->access$300(Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry$Record;I)V
+PLcom/android/server/TelephonyRegistry;->access$400(Lcom/android/server/TelephonyRegistry;)V
+PLcom/android/server/TelephonyRegistry;->access$500(Lcom/android/server/TelephonyRegistry;)I
+PLcom/android/server/TelephonyRegistry;->access$502(Lcom/android/server/TelephonyRegistry;I)I
+PLcom/android/server/TelephonyRegistry;->access$600(Lcom/android/server/TelephonyRegistry;)I
+PLcom/android/server/TelephonyRegistry;->access$602(Lcom/android/server/TelephonyRegistry;I)I
+PLcom/android/server/TelephonyRegistry;->access$700(Lcom/android/server/TelephonyRegistry;)Landroid/util/LocalLog;
+HPLcom/android/server/TelephonyRegistry;->access$800(Lcom/android/server/TelephonyRegistry;Landroid/os/IBinder;)V
+HSPLcom/android/server/TelephonyRegistry;->access$900(Lcom/android/server/TelephonyRegistry;)Landroid/os/Handler;
 HSPLcom/android/server/TelephonyRegistry;->add(Landroid/os/IBinder;)Lcom/android/server/TelephonyRegistry$Record;
-PLcom/android/server/TelephonyRegistry;->addOnOpportunisticSubscriptionsChangedListener(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
+HPLcom/android/server/TelephonyRegistry;->addOnOpportunisticSubscriptionsChangedListener(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
 HSPLcom/android/server/TelephonyRegistry;->addOnSubscriptionsChangedListener(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
+HPLcom/android/server/TelephonyRegistry;->broadcastCallStateChanged(ILjava/lang/String;II)V
+HPLcom/android/server/TelephonyRegistry;->broadcastDataConnectionStateChanged(ILjava/lang/String;II)V
+PLcom/android/server/TelephonyRegistry;->broadcastDataConnectionStateChanged(ILjava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/TelephonyRegistry;->broadcastDataConnectionStateChanged(IZLjava/lang/String;Ljava/lang/String;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;ZI)V
-PLcom/android/server/TelephonyRegistry;->broadcastServiceStateChanged(Landroid/telephony/ServiceState;II)V
-PLcom/android/server/TelephonyRegistry;->broadcastSignalStrengthChanged(Landroid/telephony/SignalStrength;II)V
+HPLcom/android/server/TelephonyRegistry;->broadcastServiceStateChanged(Landroid/telephony/ServiceState;II)V
+HPLcom/android/server/TelephonyRegistry;->broadcastSignalStrengthChanged(Landroid/telephony/SignalStrength;II)V
+PLcom/android/server/TelephonyRegistry;->callStateToString(I)Ljava/lang/String;
+HPLcom/android/server/TelephonyRegistry;->checkCoarseLocationAccess(Lcom/android/server/TelephonyRegistry$Record;I)Z
+HPLcom/android/server/TelephonyRegistry;->checkFineLocationAccess(Lcom/android/server/TelephonyRegistry$Record;I)Z
 HSPLcom/android/server/TelephonyRegistry;->checkListenerPermission(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/server/TelephonyRegistry;->checkNotifyPermission()Z
-PLcom/android/server/TelephonyRegistry;->checkNotifyPermission(Ljava/lang/String;)Z
+HSPLcom/android/server/TelephonyRegistry;->checkNotifyPermission()Z
+HSPLcom/android/server/TelephonyRegistry;->checkNotifyPermission(Ljava/lang/String;)Z
+HPLcom/android/server/TelephonyRegistry;->checkPossibleMissNotify(Lcom/android/server/TelephonyRegistry$Record;I)V
 HSPLcom/android/server/TelephonyRegistry;->createCallQuality()Landroid/telephony/CallQuality;
-PLcom/android/server/TelephonyRegistry;->dataStateToString(I)Ljava/lang/String;
-PLcom/android/server/TelephonyRegistry;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/TelephonyRegistry;->getNetworkTypeName(I)Ljava/lang/String;
+HSPLcom/android/server/TelephonyRegistry;->createPreciseCallState()Landroid/telephony/PreciseCallState;
+HPLcom/android/server/TelephonyRegistry;->dataStateToString(I)Ljava/lang/String;
+HPLcom/android/server/TelephonyRegistry;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/TelephonyRegistry;->fillInSignalStrengthNotifierBundle(Landroid/telephony/SignalStrength;Landroid/os/Bundle;)V
+HPLcom/android/server/TelephonyRegistry;->getApnTypesStringFromBitmask(I)Ljava/lang/String;
+PLcom/android/server/TelephonyRegistry;->getCallIncomingNumber(Lcom/android/server/TelephonyRegistry$Record;I)Ljava/lang/String;
+HPLcom/android/server/TelephonyRegistry;->getNetworkTypeName(I)Ljava/lang/String;
+HSPLcom/android/server/TelephonyRegistry;->getPhoneIdFromSubId(I)I
 HSPLcom/android/server/TelephonyRegistry;->getTelephonyManager()Landroid/telephony/TelephonyManager;
-PLcom/android/server/TelephonyRegistry;->handleRemoveListLocked()V
+HSPLcom/android/server/TelephonyRegistry;->handleRemoveListLocked()V
 PLcom/android/server/TelephonyRegistry;->idMatch(III)Z
+HPLcom/android/server/TelephonyRegistry;->lambda$checkCoarseLocationAccess$2$TelephonyRegistry(Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)Ljava/lang/Boolean;
+HPLcom/android/server/TelephonyRegistry;->lambda$checkFineLocationAccess$1$TelephonyRegistry(Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)Ljava/lang/Boolean;
+PLcom/android/server/TelephonyRegistry;->lambda$notifyCarrierNetworkChange$0$TelephonyRegistry(I)Z
 HSPLcom/android/server/TelephonyRegistry;->listen(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;IZI)V
 HSPLcom/android/server/TelephonyRegistry;->listenForSubscriber(ILjava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;IZ)V
 HSPLcom/android/server/TelephonyRegistry;->log(Ljava/lang/String;)V
-PLcom/android/server/TelephonyRegistry;->notifyActiveDataSubIdChanged(I)V
-PLcom/android/server/TelephonyRegistry;->notifyCellInfoForSubscriber(ILjava/util/List;)V
+HPLcom/android/server/TelephonyRegistry;->notifyActiveDataSubIdChanged(I)V
+HPLcom/android/server/TelephonyRegistry;->notifyCallForwardingChangedForSubscriber(IZ)V
+HPLcom/android/server/TelephonyRegistry;->notifyCallQualityChanged(Landroid/telephony/CallQuality;III)V
+HPLcom/android/server/TelephonyRegistry;->notifyCallState(IIILjava/lang/String;)V
+HPLcom/android/server/TelephonyRegistry;->notifyCallStateForAllSubs(ILjava/lang/String;)V
+HPLcom/android/server/TelephonyRegistry;->notifyCarrierNetworkChange(Z)V
+HPLcom/android/server/TelephonyRegistry;->notifyCellInfoForSubscriber(ILjava/util/List;)V
 PLcom/android/server/TelephonyRegistry;->notifyCellLocationForSubscriber(ILandroid/os/Bundle;)V
-PLcom/android/server/TelephonyRegistry;->notifyDataActivityForSubscriber(II)V
+HSPLcom/android/server/TelephonyRegistry;->notifyCellLocationForSubscriber(ILandroid/telephony/CellIdentity;)V
+HPLcom/android/server/TelephonyRegistry;->notifyDataActivityForSubscriber(II)V
+HPLcom/android/server/TelephonyRegistry;->notifyDataConnectionFailedForSubscriber(III)V
+HPLcom/android/server/TelephonyRegistry;->notifyDataConnectionForSubscriber(IIILandroid/telephony/PreciseDataConnectionState;)V
 HPLcom/android/server/TelephonyRegistry;->notifyDataConnectionForSubscriber(IIIZLjava/lang/String;Ljava/lang/String;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;IZ)V
+HPLcom/android/server/TelephonyRegistry;->notifyDataConnectionForSubscriber(IILjava/lang/String;Landroid/telephony/PreciseDataConnectionState;)V
+HPLcom/android/server/TelephonyRegistry;->notifyDisconnectCause(IIII)V
 HPLcom/android/server/TelephonyRegistry;->notifyEmergencyNumberList(II)V
+HPLcom/android/server/TelephonyRegistry;->notifyImsDisconnectCause(ILandroid/telephony/ims/ImsReasonInfo;)V
+HPLcom/android/server/TelephonyRegistry;->notifyMessageWaitingChangedForPhoneId(IIZ)V
+HPLcom/android/server/TelephonyRegistry;->notifyOpportunisticSubscriptionInfoChanged()V
 PLcom/android/server/TelephonyRegistry;->notifyOtaspChanged(II)V
-PLcom/android/server/TelephonyRegistry;->notifyPhoneCapabilityChanged(Landroid/telephony/PhoneCapability;)V
+HPLcom/android/server/TelephonyRegistry;->notifyPhoneCapabilityChanged(Landroid/telephony/PhoneCapability;)V
 HPLcom/android/server/TelephonyRegistry;->notifyPreciseCallState(IIIII)V
+HPLcom/android/server/TelephonyRegistry;->notifyPreciseDataConnectionFailed(IIILjava/lang/String;I)V
 HPLcom/android/server/TelephonyRegistry;->notifyRadioPowerStateChanged(III)V
-PLcom/android/server/TelephonyRegistry;->notifyServiceStateForPhoneId(IILandroid/telephony/ServiceState;)V
+HPLcom/android/server/TelephonyRegistry;->notifyServiceStateForPhoneId(IILandroid/telephony/ServiceState;)V
 HPLcom/android/server/TelephonyRegistry;->notifySignalStrengthForPhoneId(IILandroid/telephony/SignalStrength;)V
-PLcom/android/server/TelephonyRegistry;->notifySimActivationStateChangedForPhoneId(IIII)V
-PLcom/android/server/TelephonyRegistry;->notifySubscriptionInfoChanged()V
+HPLcom/android/server/TelephonyRegistry;->notifySimActivationStateChangedForPhoneId(IIII)V
+HPLcom/android/server/TelephonyRegistry;->notifySrvccStateChanged(II)V
+HPLcom/android/server/TelephonyRegistry;->notifySubscriptionInfoChanged()V
+HPLcom/android/server/TelephonyRegistry;->notifyUserMobileDataStateChangedForPhoneId(IIZ)V
+PLcom/android/server/TelephonyRegistry;->onMultiSimConfigChanged()V
 HPLcom/android/server/TelephonyRegistry;->remove(Landroid/os/IBinder;)V
-PLcom/android/server/TelephonyRegistry;->removeOnSubscriptionsChangedListener(Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
-PLcom/android/server/TelephonyRegistry;->systemRunning()V
-PLcom/android/server/TelephonyRegistry;->validatePhoneId(I)Z
+HPLcom/android/server/TelephonyRegistry;->removeOnSubscriptionsChangedListener(Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
+HSPLcom/android/server/TelephonyRegistry;->systemRunning()V
+HPLcom/android/server/TelephonyRegistry;->updateReportSignalStrengthDecision(I)V
+HPLcom/android/server/TelephonyRegistry;->validateEventsAndUserLocked(Lcom/android/server/TelephonyRegistry$Record;I)Z
+HSPLcom/android/server/TelephonyRegistry;->validatePhoneId(I)Z
 HSPLcom/android/server/ThreadPriorityBooster$1;-><init>(Lcom/android/server/ThreadPriorityBooster;)V
 HSPLcom/android/server/ThreadPriorityBooster$1;->initialValue()Lcom/android/server/ThreadPriorityBooster$PriorityState;
 HSPLcom/android/server/ThreadPriorityBooster$1;->initialValue()Ljava/lang/Object;
@@ -2698,48 +4098,138 @@
 HSPLcom/android/server/ThreadPriorityBooster;-><init>(II)V
 HSPLcom/android/server/ThreadPriorityBooster;->boost()V
 HSPLcom/android/server/ThreadPriorityBooster;->reset()V
-PLcom/android/server/ThreadPriorityBooster;->setBoostToPriority(I)V
+HSPLcom/android/server/ThreadPriorityBooster;->setBoostToPriority(I)V
 HSPLcom/android/server/UiModeManagerInternal;-><init>()V
+HSPLcom/android/server/UiModeManagerService$10;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService$10;->disableCarModeByCallingPackage(ILjava/lang/String;)V
+PLcom/android/server/UiModeManagerService$10;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/UiModeManagerService$10;->enableCarMode(IILjava/lang/String;)V
+HSPLcom/android/server/UiModeManagerService$10;->getCurrentModeType()I
+PLcom/android/server/UiModeManagerService$10;->getCustomNightModeEnd()J
+PLcom/android/server/UiModeManagerService$10;->getCustomNightModeStart()J
+HPLcom/android/server/UiModeManagerService$10;->getNightMode()I
+PLcom/android/server/UiModeManagerService$10;->isNightModeLocked()Z
+PLcom/android/server/UiModeManagerService$10;->isUiModeLocked()Z
+PLcom/android/server/UiModeManagerService$10;->lambda$disableCarModeByCallingPackage$0(Ljava/lang/String;Ljava/util/Map$Entry;)Z
+PLcom/android/server/UiModeManagerService$10;->setCustomNightModeEnd(J)V
+PLcom/android/server/UiModeManagerService$10;->setCustomNightModeStart(J)V
+PLcom/android/server/UiModeManagerService$10;->setNightMode(I)V
+PLcom/android/server/UiModeManagerService$10;->setNightModeActivated(Z)Z
 HSPLcom/android/server/UiModeManagerService$1;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/UiModeManagerService$2;-><init>(Lcom/android/server/UiModeManagerService;)V
 HSPLcom/android/server/UiModeManagerService$3;-><init>(Lcom/android/server/UiModeManagerService;)V
-PLcom/android/server/UiModeManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/UiModeManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/UiModeManagerService$4;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService$4;->onTwilightStateChanged(Lcom/android/server/twilight/TwilightState;)V
 HSPLcom/android/server/UiModeManagerService$5;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/UiModeManagerService$6;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/UiModeManagerService$7;-><init>(Lcom/android/server/UiModeManagerService;)V
 HSPLcom/android/server/UiModeManagerService$7;-><init>(Lcom/android/server/UiModeManagerService;Landroid/os/Handler;)V
 HSPLcom/android/server/UiModeManagerService$8;-><init>(Lcom/android/server/UiModeManagerService;Landroid/os/Handler;)V
+PLcom/android/server/UiModeManagerService$8;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/UiModeManagerService$9;-><init>(Lcom/android/server/UiModeManagerService;)V
+HSPLcom/android/server/UiModeManagerService$9;-><init>(Lcom/android/server/UiModeManagerService;Landroid/os/Handler;)V
+HPLcom/android/server/UiModeManagerService$9;->disableCarModeByCallingPackage(ILjava/lang/String;)V
 PLcom/android/server/UiModeManagerService$9;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/UiModeManagerService$9;->enableCarMode(IILjava/lang/String;)V
 HSPLcom/android/server/UiModeManagerService$9;->getCurrentModeType()I
-PLcom/android/server/UiModeManagerService$9;->getNightMode()I
+HPLcom/android/server/UiModeManagerService$9;->getNightMode()I
 PLcom/android/server/UiModeManagerService$9;->isNightModeLocked()Z
+PLcom/android/server/UiModeManagerService$9;->isUiModeLocked()Z
+PLcom/android/server/UiModeManagerService$9;->lambda$disableCarModeByCallingPackage$0(Ljava/lang/String;Ljava/util/Map$Entry;)Z
+PLcom/android/server/UiModeManagerService$9;->onChange(ZLandroid/net/Uri;)V
 PLcom/android/server/UiModeManagerService$9;->setNightMode(I)V
+PLcom/android/server/UiModeManagerService$9;->setNightModeActivated(Z)Z
 HSPLcom/android/server/UiModeManagerService$LocalService;-><init>(Lcom/android/server/UiModeManagerService;)V
 PLcom/android/server/UiModeManagerService$LocalService;->isNightMode()Z
 PLcom/android/server/UiModeManagerService$Shell;->access$2200(I)Ljava/lang/String;
+PLcom/android/server/UiModeManagerService$Shell;->access$2300(I)Ljava/lang/String;
+PLcom/android/server/UiModeManagerService$Shell;->access$2900(I)Ljava/lang/String;
 PLcom/android/server/UiModeManagerService$Shell;->nightModeToStr(I)Ljava/lang/String;
 HSPLcom/android/server/UiModeManagerService$UserSwitchedReceiver;-><init>(Lcom/android/server/UiModeManagerService;)V
 HSPLcom/android/server/UiModeManagerService$UserSwitchedReceiver;-><init>(Lcom/android/server/UiModeManagerService;Lcom/android/server/UiModeManagerService$1;)V
-PLcom/android/server/UiModeManagerService$UserSwitchedReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/UiModeManagerService$UserSwitchedReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/UiModeManagerService;-><clinit>()V
 HSPLcom/android/server/UiModeManagerService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/UiModeManagerService;->access$1100(Lcom/android/server/UiModeManagerService;Landroid/content/Context;Landroid/content/res/Resources;I)Z
+PLcom/android/server/UiModeManagerService;->access$000(Lcom/android/server/UiModeManagerService;Ljava/lang/String;II)V
+PLcom/android/server/UiModeManagerService;->access$1000(Lcom/android/server/UiModeManagerService;)Z
+HSPLcom/android/server/UiModeManagerService;->access$1100(Lcom/android/server/UiModeManagerService;Landroid/content/Context;Landroid/content/res/Resources;I)Z
+HSPLcom/android/server/UiModeManagerService;->access$1200(Lcom/android/server/UiModeManagerService;Landroid/content/Context;Landroid/content/res/Resources;I)Z
 PLcom/android/server/UiModeManagerService;->access$1300()Ljava/lang/String;
+PLcom/android/server/UiModeManagerService;->access$1400()Ljava/lang/String;
+PLcom/android/server/UiModeManagerService;->access$1400(Lcom/android/server/UiModeManagerService;)Ljava/util/Map;
+PLcom/android/server/UiModeManagerService;->access$1500(Lcom/android/server/UiModeManagerService;)Ljava/util/Map;
+PLcom/android/server/UiModeManagerService;->access$1502(Lcom/android/server/UiModeManagerService;I)I
+PLcom/android/server/UiModeManagerService;->access$1600(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService;->access$1600(Lcom/android/server/UiModeManagerService;)Z
+PLcom/android/server/UiModeManagerService;->access$1700(Lcom/android/server/UiModeManagerService;I)V
+PLcom/android/server/UiModeManagerService;->access$1702(Lcom/android/server/UiModeManagerService;I)I
 PLcom/android/server/UiModeManagerService;->access$1800(Lcom/android/server/UiModeManagerService;)Z
-PLcom/android/server/UiModeManagerService;->access$202(Lcom/android/server/UiModeManagerService;Z)Z
+PLcom/android/server/UiModeManagerService;->access$1900(Lcom/android/server/UiModeManagerService;)Z
+PLcom/android/server/UiModeManagerService;->access$1900(Lcom/android/server/UiModeManagerService;I)V
+PLcom/android/server/UiModeManagerService;->access$2000(Lcom/android/server/UiModeManagerService;)Z
+HSPLcom/android/server/UiModeManagerService;->access$202(Lcom/android/server/UiModeManagerService;Z)Z
+PLcom/android/server/UiModeManagerService;->access$2100(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService;->access$2100(Lcom/android/server/UiModeManagerService;)Z
+PLcom/android/server/UiModeManagerService;->access$2200(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService;->access$2200(Lcom/android/server/UiModeManagerService;)Z
+PLcom/android/server/UiModeManagerService;->access$2400(Lcom/android/server/UiModeManagerService;)Landroid/content/res/Configuration;
+PLcom/android/server/UiModeManagerService;->access$2400(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService;->access$2500(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService;->access$2600(Lcom/android/server/UiModeManagerService;)Ljava/time/LocalTime;
+PLcom/android/server/UiModeManagerService;->access$2602(Lcom/android/server/UiModeManagerService;Ljava/time/LocalTime;)Ljava/time/LocalTime;
+PLcom/android/server/UiModeManagerService;->access$2700(Lcom/android/server/UiModeManagerService;I)V
+PLcom/android/server/UiModeManagerService;->access$2800(Lcom/android/server/UiModeManagerService;)Ljava/time/LocalTime;
+PLcom/android/server/UiModeManagerService;->access$2802(Lcom/android/server/UiModeManagerService;Ljava/time/LocalTime;)Ljava/time/LocalTime;
 PLcom/android/server/UiModeManagerService;->access$300(Lcom/android/server/UiModeManagerService;)I
+PLcom/android/server/UiModeManagerService;->access$3000(Lcom/android/server/UiModeManagerService;)Landroid/content/res/Configuration;
+PLcom/android/server/UiModeManagerService;->access$302(Lcom/android/server/UiModeManagerService;I)I
+PLcom/android/server/UiModeManagerService;->access$400(Lcom/android/server/UiModeManagerService;)Z
+PLcom/android/server/UiModeManagerService;->access$500(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService;->access$600(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService;->access$700(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService;->access$900(Lcom/android/server/UiModeManagerService;)Z
+HPLcom/android/server/UiModeManagerService;->adjustStatusBarCarModeLocked()V
 HSPLcom/android/server/UiModeManagerService;->applyConfigurationExternallyLocked()V
-PLcom/android/server/UiModeManagerService;->dumpImpl(Ljava/io/PrintWriter;)V
+PLcom/android/server/UiModeManagerService;->buildHomeIntent(Ljava/lang/String;)Landroid/content/Intent;
+PLcom/android/server/UiModeManagerService;->cancelCustomAlarm()V
+HPLcom/android/server/UiModeManagerService;->computeCustomNightMode()Z
+HPLcom/android/server/UiModeManagerService;->disableCarMode(IILjava/lang/String;)V
+HPLcom/android/server/UiModeManagerService;->dumpImpl(Ljava/io/PrintWriter;)V
+PLcom/android/server/UiModeManagerService;->enableCarMode(ILjava/lang/String;)V
+HSPLcom/android/server/UiModeManagerService;->getComputedUiModeConfiguration(I)I
+HPLcom/android/server/UiModeManagerService;->getDateTimeAfter(Ljava/time/LocalTime;Ljava/time/LocalDateTime;)Ljava/time/LocalDateTime;
+PLcom/android/server/UiModeManagerService;->isCarModeEnabled()Z
 HSPLcom/android/server/UiModeManagerService;->isDeskDockState(I)Z
+PLcom/android/server/UiModeManagerService;->lambda$new$0$UiModeManagerService()V
+PLcom/android/server/UiModeManagerService;->lambda$onStart$0$UiModeManagerService(Landroid/os/PowerSaveState;)V
 HSPLcom/android/server/UiModeManagerService;->lambda$onStart$1$UiModeManagerService()V
+PLcom/android/server/UiModeManagerService;->lambda$onStart$1$UiModeManagerService(Landroid/os/PowerSaveState;)V
+HSPLcom/android/server/UiModeManagerService;->lambda$onStart$2$UiModeManagerService()V
+PLcom/android/server/UiModeManagerService;->notifyCarModeDisabled(ILjava/lang/String;)V
+PLcom/android/server/UiModeManagerService;->notifyCarModeEnabled(ILjava/lang/String;)V
 HSPLcom/android/server/UiModeManagerService;->onBootPhase(I)V
+PLcom/android/server/UiModeManagerService;->onCustomTimeUpdated(I)V
 HSPLcom/android/server/UiModeManagerService;->onStart()V
+PLcom/android/server/UiModeManagerService;->persistNightMode(I)V
+PLcom/android/server/UiModeManagerService;->registerScreenOffEvent()V
+HPLcom/android/server/UiModeManagerService;->registerTimeChangeEvent()V
 HSPLcom/android/server/UiModeManagerService;->registerVrStateListener()V
+HPLcom/android/server/UiModeManagerService;->scheduleNextCustomTimeListener()V
 HSPLcom/android/server/UiModeManagerService;->sendConfigurationAndStartDreamOrDockAppLocked(Ljava/lang/String;)V
+PLcom/android/server/UiModeManagerService;->setCarModeLocked(ZIILjava/lang/String;)V
 HSPLcom/android/server/UiModeManagerService;->setupWizardCompleteForCurrentUser()Z
+PLcom/android/server/UiModeManagerService;->shouldApplyAutomaticChangesImmediately()Z
+PLcom/android/server/UiModeManagerService;->unregisterScreenOffEvent()V
+HSPLcom/android/server/UiModeManagerService;->unregisterTimeChangeEvent()V
+PLcom/android/server/UiModeManagerService;->updateAfterBroadcastLocked(Ljava/lang/String;II)V
 HSPLcom/android/server/UiModeManagerService;->updateComputedNightModeLocked()V
+HSPLcom/android/server/UiModeManagerService;->updateComputedNightModeLocked(Z)V
 HSPLcom/android/server/UiModeManagerService;->updateConfigurationLocked()V
+PLcom/android/server/UiModeManagerService;->updateCustomTimeLocked()V
 HSPLcom/android/server/UiModeManagerService;->updateLocked(II)V
 HSPLcom/android/server/UiModeManagerService;->updateNightModeFromSettings(Landroid/content/Context;Landroid/content/res/Resources;I)Z
 HSPLcom/android/server/UiModeManagerService;->verifySetupWizardCompleted()V
@@ -2749,39 +4239,58 @@
 HSPLcom/android/server/UiThread;->getHandler()Landroid/os/Handler;
 HSPLcom/android/server/UiThread;->run()V
 HSPLcom/android/server/UpdateLockService$LockWatcher;-><init>(Lcom/android/server/UpdateLockService;Landroid/os/Handler;Ljava/lang/String;)V
+PLcom/android/server/UpdateLockService$LockWatcher;->acquired()V
+PLcom/android/server/UpdateLockService$LockWatcher;->released()V
 HSPLcom/android/server/UpdateLockService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/UpdateLockService;->acquireUpdateLock(Landroid/os/IBinder;Ljava/lang/String;)V
 PLcom/android/server/UpdateLockService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/UpdateLockService;->makeTag(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/UpdateLockService;->releaseUpdateLock(Landroid/os/IBinder;)V
 HSPLcom/android/server/UpdateLockService;->sendLockChangedBroadcast(Z)V
 HSPLcom/android/server/VibratorService$1;-><init>(Lcom/android/server/VibratorService;)V
 HSPLcom/android/server/VibratorService$1;->onUidGone(IZ)V
 HSPLcom/android/server/VibratorService$1;->onUidStateChanged(IIJI)V
 HSPLcom/android/server/VibratorService$2;-><init>(Lcom/android/server/VibratorService;)V
+PLcom/android/server/VibratorService$2;->getServiceType()I
+PLcom/android/server/VibratorService$2;->onLowPowerModeChanged(Landroid/os/PowerSaveState;)V
 HSPLcom/android/server/VibratorService$3;-><init>(Lcom/android/server/VibratorService;)V
-PLcom/android/server/VibratorService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/VibratorService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/VibratorService$4;-><init>(Lcom/android/server/VibratorService;)V
-PLcom/android/server/VibratorService$4;->run()V
+HPLcom/android/server/VibratorService$4;->run()V
 HSPLcom/android/server/VibratorService$5;-><init>(Lcom/android/server/VibratorService;)V
-PLcom/android/server/VibratorService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/VibratorService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/VibratorService$ExternalVibratorService$ExternalVibrationDeathRecipient;-><init>(Lcom/android/server/VibratorService$ExternalVibratorService;)V
+PLcom/android/server/VibratorService$ExternalVibratorService$ExternalVibrationDeathRecipient;-><init>(Lcom/android/server/VibratorService$ExternalVibratorService;Lcom/android/server/VibratorService$1;)V
 HSPLcom/android/server/VibratorService$ExternalVibratorService;-><init>(Lcom/android/server/VibratorService;)V
+PLcom/android/server/VibratorService$ExternalVibratorService;->onExternalVibrationStart(Landroid/os/ExternalVibration;)I
+PLcom/android/server/VibratorService$ExternalVibratorService;->onExternalVibrationStop(Landroid/os/ExternalVibration;)V
 HSPLcom/android/server/VibratorService$ScaleLevel;-><init>(F)V
 HSPLcom/android/server/VibratorService$ScaleLevel;-><init>(FI)V
 HSPLcom/android/server/VibratorService$SettingsObserver;-><init>(Lcom/android/server/VibratorService;Landroid/os/Handler;)V
+PLcom/android/server/VibratorService$SettingsObserver;->onChange(Z)V
 PLcom/android/server/VibratorService$VibrateThread;-><init>(Lcom/android/server/VibratorService;Landroid/os/VibrationEffect$Waveform;ILandroid/media/AudioAttributes;)V
-PLcom/android/server/VibratorService$VibrateThread;->cancel()V
-PLcom/android/server/VibratorService$VibrateThread;->delayLocked(J)J
-PLcom/android/server/VibratorService$VibrateThread;->getTotalOnDuration([J[III)J
-PLcom/android/server/VibratorService$VibrateThread;->playWaveform()Z
-PLcom/android/server/VibratorService$VibrateThread;->run()V
+HPLcom/android/server/VibratorService$VibrateThread;-><init>(Lcom/android/server/VibratorService;Landroid/os/VibrationEffect$Waveform;ILandroid/os/VibrationAttributes;)V
+HPLcom/android/server/VibratorService$VibrateThread;->cancel()V
+HPLcom/android/server/VibratorService$VibrateThread;->delayLocked(J)J
+HPLcom/android/server/VibratorService$VibrateThread;->getTotalOnDuration([J[III)J
+HPLcom/android/server/VibratorService$VibrateThread;->playWaveform()Z
+HPLcom/android/server/VibratorService$VibrateThread;->run()V
 PLcom/android/server/VibratorService$Vibration;-><init>(Lcom/android/server/VibratorService;Landroid/os/IBinder;Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;ILjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/VibratorService$Vibration;-><init>(Lcom/android/server/VibratorService;Landroid/os/IBinder;Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;ILjava/lang/String;Ljava/lang/String;Lcom/android/server/VibratorService$1;)V
-PLcom/android/server/VibratorService$Vibration;->isAlarm()Z
-PLcom/android/server/VibratorService$Vibration;->isHapticFeedback()Z
-PLcom/android/server/VibratorService$Vibration;->isNotification()Z
-PLcom/android/server/VibratorService$Vibration;->isRingtone()Z
-PLcom/android/server/VibratorService$Vibration;->onComplete()V
-PLcom/android/server/VibratorService$Vibration;->toInfo()Lcom/android/server/VibratorService$VibrationInfo;
+HPLcom/android/server/VibratorService$Vibration;-><init>(Lcom/android/server/VibratorService;Landroid/os/IBinder;Landroid/os/VibrationEffect;Landroid/os/VibrationAttributes;ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/VibratorService$Vibration;-><init>(Lcom/android/server/VibratorService;Landroid/os/IBinder;Landroid/os/VibrationEffect;Landroid/os/VibrationAttributes;ILjava/lang/String;Ljava/lang/String;Lcom/android/server/VibratorService$1;)V
+PLcom/android/server/VibratorService$Vibration;->binderDied()V
+PLcom/android/server/VibratorService$Vibration;->hasTimeoutLongerThan(J)Z
+HPLcom/android/server/VibratorService$Vibration;->isAlarm()Z
+PLcom/android/server/VibratorService$Vibration;->isFromSystem()Z
+HPLcom/android/server/VibratorService$Vibration;->isHapticFeedback()Z
+HPLcom/android/server/VibratorService$Vibration;->isNotification()Z
+HPLcom/android/server/VibratorService$Vibration;->isRingtone()Z
+HPLcom/android/server/VibratorService$Vibration;->onComplete()V
+HPLcom/android/server/VibratorService$Vibration;->toInfo()Lcom/android/server/VibratorService$VibrationInfo;
 PLcom/android/server/VibratorService$VibrationInfo;-><init>(JLandroid/os/VibrationEffect;Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;ILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/VibratorService$VibrationInfo;->toString()Ljava/lang/String;
+HPLcom/android/server/VibratorService$VibrationInfo;-><init>(JLandroid/os/VibrationEffect;Landroid/os/VibrationEffect;Landroid/os/VibrationAttributes;ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/VibratorService$VibrationInfo;->toString()Ljava/lang/String;
 PLcom/android/server/VibratorService$VibratorShellCommand$CommonOptions;-><init>(Lcom/android/server/VibratorService$VibratorShellCommand;)V
 PLcom/android/server/VibratorService$VibratorShellCommand$CommonOptions;-><init>(Lcom/android/server/VibratorService$VibratorShellCommand;Lcom/android/server/VibratorService$1;)V
 PLcom/android/server/VibratorService$VibratorShellCommand$CommonOptions;->check(Ljava/lang/String;)V
@@ -2789,70 +4298,109 @@
 PLcom/android/server/VibratorService$VibratorShellCommand;-><init>(Lcom/android/server/VibratorService;Landroid/os/IBinder;Lcom/android/server/VibratorService$1;)V
 PLcom/android/server/VibratorService$VibratorShellCommand;->checkDoNotDisturb(Lcom/android/server/VibratorService$VibratorShellCommand$CommonOptions;)Z
 PLcom/android/server/VibratorService$VibratorShellCommand;->createAudioAttributes(Lcom/android/server/VibratorService$VibratorShellCommand$CommonOptions;)Landroid/media/AudioAttributes;
+PLcom/android/server/VibratorService$VibratorShellCommand;->createVibrationAttributes(Lcom/android/server/VibratorService$VibratorShellCommand$CommonOptions;)Landroid/os/VibrationAttributes;
 PLcom/android/server/VibratorService$VibratorShellCommand;->onCommand(Ljava/lang/String;)I
 PLcom/android/server/VibratorService$VibratorShellCommand;->runVibrate()I
 HSPLcom/android/server/VibratorService;-><clinit>()V
 HSPLcom/android/server/VibratorService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/VibratorService;->access$000(Lcom/android/server/VibratorService;)Landroid/util/SparseArray;
-PLcom/android/server/VibratorService;->access$100(Lcom/android/server/VibratorService;)Ljava/lang/Object;
+HPLcom/android/server/VibratorService;->access$100(Lcom/android/server/VibratorService;)Ljava/lang/Object;
 PLcom/android/server/VibratorService;->access$1000(Lcom/android/server/VibratorService;)Landroid/os/WorkSource;
 PLcom/android/server/VibratorService;->access$1100(Lcom/android/server/VibratorService;)Landroid/os/PowerManager$WakeLock;
-PLcom/android/server/VibratorService;->access$200(Lcom/android/server/VibratorService;)Lcom/android/server/VibratorService$Vibration;
-PLcom/android/server/VibratorService;->access$300(Lcom/android/server/VibratorService;)V
+PLcom/android/server/VibratorService;->access$1100(Lcom/android/server/VibratorService;)Landroid/os/WorkSource;
+PLcom/android/server/VibratorService;->access$1200(Lcom/android/server/VibratorService;)Landroid/os/PowerManager$WakeLock;
+HPLcom/android/server/VibratorService;->access$1300(Lcom/android/server/VibratorService;JIILandroid/os/VibrationAttributes;)V
+HPLcom/android/server/VibratorService;->access$1400(Lcom/android/server/VibratorService;I)V
+PLcom/android/server/VibratorService;->access$1500(Lcom/android/server/VibratorService;)Lcom/android/server/VibratorService$VibrateThread;
+PLcom/android/server/VibratorService;->access$1700(Lcom/android/server/VibratorService;)Z
+PLcom/android/server/VibratorService;->access$1800(Lcom/android/server/VibratorService;)Landroid/os/ExternalVibration;
+PLcom/android/server/VibratorService;->access$1802(Lcom/android/server/VibratorService;Landroid/os/ExternalVibration;)Landroid/os/ExternalVibration;
+PLcom/android/server/VibratorService;->access$1900(Lcom/android/server/VibratorService;Z)V
+HPLcom/android/server/VibratorService;->access$200(Lcom/android/server/VibratorService;)Lcom/android/server/VibratorService$Vibration;
+PLcom/android/server/VibratorService;->access$2100(Lcom/android/server/VibratorService;)Ljava/util/LinkedList;
+PLcom/android/server/VibratorService;->access$2200(Lcom/android/server/VibratorService;)I
+PLcom/android/server/VibratorService;->access$2300(Lcom/android/server/VibratorService;)Landroid/os/Vibrator;
+PLcom/android/server/VibratorService;->access$2400(Lcom/android/server/VibratorService;)I
+PLcom/android/server/VibratorService;->access$2700(Lcom/android/server/VibratorService;)Landroid/content/Context;
+HPLcom/android/server/VibratorService;->access$300(Lcom/android/server/VibratorService;)V
 PLcom/android/server/VibratorService;->access$400(I)Z
-PLcom/android/server/VibratorService;->access$500(I)Z
-PLcom/android/server/VibratorService;->access$600(I)Z
+HPLcom/android/server/VibratorService;->access$500(I)Z
+HPLcom/android/server/VibratorService;->access$600(I)Z
 PLcom/android/server/VibratorService;->access$700(I)Z
+PLcom/android/server/VibratorService;->access$800(Lcom/android/server/VibratorService;)Ljava/lang/String;
 PLcom/android/server/VibratorService;->access$800(Lcom/android/server/VibratorService;)V
-PLcom/android/server/VibratorService;->addToPreviousVibrationsLocked(Lcom/android/server/VibratorService$Vibration;)V
-PLcom/android/server/VibratorService;->applyVibrationIntensityScalingLocked(Lcom/android/server/VibratorService$Vibration;I)V
-PLcom/android/server/VibratorService;->cancelVibrate(Landroid/os/IBinder;)V
+HSPLcom/android/server/VibratorService;->access$900(Lcom/android/server/VibratorService;)V
+HPLcom/android/server/VibratorService;->addToPreviousVibrationsLocked(Lcom/android/server/VibratorService$Vibration;)V
+HPLcom/android/server/VibratorService;->applyVibrationIntensityScalingLocked(Lcom/android/server/VibratorService$Vibration;I)V
+HSPLcom/android/server/VibratorService;->asList([I)Ljava/util/List;
+HPLcom/android/server/VibratorService;->cancelVibrate(Landroid/os/IBinder;)V
 HSPLcom/android/server/VibratorService;->createEffectFromResource(I)Landroid/os/VibrationEffect;
 HSPLcom/android/server/VibratorService;->createEffectFromTimings([J)Landroid/os/VibrationEffect;
-PLcom/android/server/VibratorService;->doCancelVibrateLocked()V
+HPLcom/android/server/VibratorService;->doCancelVibrateLocked()V
 HSPLcom/android/server/VibratorService;->doVibratorExists()Z
-PLcom/android/server/VibratorService;->doVibratorOff()V
+HPLcom/android/server/VibratorService;->doVibratorOff()V
 HPLcom/android/server/VibratorService;->doVibratorOn(JIILandroid/media/AudioAttributes;)V
-PLcom/android/server/VibratorService;->doVibratorPrebakedEffectLocked(Lcom/android/server/VibratorService$Vibration;)J
-PLcom/android/server/VibratorService;->doVibratorSetAmplitude(I)V
-PLcom/android/server/VibratorService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/VibratorService;->getAppOpMode(Lcom/android/server/VibratorService$Vibration;)I
-PLcom/android/server/VibratorService;->getCurrentIntensityLocked(Lcom/android/server/VibratorService$Vibration;)I
+HPLcom/android/server/VibratorService;->doVibratorOn(JIILandroid/os/VibrationAttributes;)V
+HPLcom/android/server/VibratorService;->doVibratorPrebakedEffectLocked(Lcom/android/server/VibratorService$Vibration;)J
+HPLcom/android/server/VibratorService;->doVibratorSetAmplitude(I)V
+HPLcom/android/server/VibratorService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/VibratorService;->dumpInternal(Ljava/io/PrintWriter;)V
+HPLcom/android/server/VibratorService;->fixupVibrationAttributes(Landroid/os/VibrationAttributes;)Landroid/os/VibrationAttributes;
+HPLcom/android/server/VibratorService;->getAppOpMode(Lcom/android/server/VibratorService$Vibration;)I
+HPLcom/android/server/VibratorService;->getCurrentIntensityLocked(Lcom/android/server/VibratorService$Vibration;)I
+PLcom/android/server/VibratorService;->getFallbackEffect(I)Landroid/os/VibrationEffect;
 HSPLcom/android/server/VibratorService;->getLongIntArray(Landroid/content/res/Resources;I)[J
-PLcom/android/server/VibratorService;->hasPermission(Ljava/lang/String;)Z
+PLcom/android/server/VibratorService;->hasCapability(J)Z
+HPLcom/android/server/VibratorService;->hasPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/VibratorService;->hasVibrator()Z
-PLcom/android/server/VibratorService;->intensityToEffectStrength(I)I
+HPLcom/android/server/VibratorService;->intensityToEffectStrength(I)I
 PLcom/android/server/VibratorService;->isAlarm(I)Z
 PLcom/android/server/VibratorService;->isAllowedToVibrateLocked(Lcom/android/server/VibratorService$Vibration;)Z
 PLcom/android/server/VibratorService;->isHapticFeedback(I)Z
-PLcom/android/server/VibratorService;->isNotification(I)Z
-PLcom/android/server/VibratorService;->isRepeatingVibration(Landroid/os/VibrationEffect;)Z
-PLcom/android/server/VibratorService;->isRingtone(I)Z
-PLcom/android/server/VibratorService;->linkVibration(Lcom/android/server/VibratorService$Vibration;)V
-PLcom/android/server/VibratorService;->noteVibratorOffLocked()V
-PLcom/android/server/VibratorService;->noteVibratorOnLocked(IJ)V
+HPLcom/android/server/VibratorService;->isNotification(I)Z
+HPLcom/android/server/VibratorService;->isRepeatingVibration(Landroid/os/VibrationEffect;)Z
+HPLcom/android/server/VibratorService;->isRingtone(I)Z
+HPLcom/android/server/VibratorService;->linkVibration(Lcom/android/server/VibratorService$Vibration;)V
+HPLcom/android/server/VibratorService;->noteVibratorOffLocked()V
+HPLcom/android/server/VibratorService;->noteVibratorOnLocked(IJ)V
 PLcom/android/server/VibratorService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
-PLcom/android/server/VibratorService;->onVibrationFinished()V
-PLcom/android/server/VibratorService;->reportFinishVibrationLocked()V
+HPLcom/android/server/VibratorService;->onVibrationFinished()V
+HPLcom/android/server/VibratorService;->reportFinishVibrationLocked()V
+PLcom/android/server/VibratorService;->setAlwaysOnEffect(ILandroid/os/VibrationEffect;Landroid/media/AudioAttributes;)Z
+PLcom/android/server/VibratorService;->setAlwaysOnEffect(ILandroid/os/VibrationEffect;Landroid/os/VibrationAttributes;)Z
+PLcom/android/server/VibratorService;->setAlwaysOnEffect(ILjava/lang/String;ILandroid/os/VibrationEffect;Landroid/os/VibrationAttributes;)Z
+PLcom/android/server/VibratorService;->setVibratorUnderExternalControl(Z)V
 PLcom/android/server/VibratorService;->shouldBypassDnd(Landroid/media/AudioAttributes;)Z
-PLcom/android/server/VibratorService;->startVibrationInnerLocked(Lcom/android/server/VibratorService$Vibration;)V
-PLcom/android/server/VibratorService;->startVibrationLocked(Lcom/android/server/VibratorService$Vibration;)V
+HPLcom/android/server/VibratorService;->shouldBypassDnd(Landroid/os/VibrationAttributes;)Z
+HPLcom/android/server/VibratorService;->shouldVibrate(Lcom/android/server/VibratorService$Vibration;I)Z
+PLcom/android/server/VibratorService;->shouldVibrateForRingtone()Z
+HPLcom/android/server/VibratorService;->startVibrationInnerLocked(Lcom/android/server/VibratorService$Vibration;)V
+HPLcom/android/server/VibratorService;->startVibrationLocked(Lcom/android/server/VibratorService$Vibration;)V
 HSPLcom/android/server/VibratorService;->systemReady()V
 PLcom/android/server/VibratorService;->unlinkVibration(Lcom/android/server/VibratorService$Vibration;)V
+HSPLcom/android/server/VibratorService;->updateAlwaysOnLocked()V
+PLcom/android/server/VibratorService;->updateAlwaysOnLocked(ILandroid/os/VibrationEffect;Landroid/media/AudioAttributes;)V
+HPLcom/android/server/VibratorService;->updateAlwaysOnLocked(ILandroid/os/VibrationEffect;Landroid/os/VibrationAttributes;)V
+PLcom/android/server/VibratorService;->updateAlwaysOnLocked(ILcom/android/server/VibratorService$Vibration;)V
 HSPLcom/android/server/VibratorService;->updateInputDeviceVibratorsLocked()Z
 HSPLcom/android/server/VibratorService;->updateLowPowerModeLocked()Z
 HSPLcom/android/server/VibratorService;->updateVibrationIntensityLocked()V
 HSPLcom/android/server/VibratorService;->updateVibrators()V
-PLcom/android/server/VibratorService;->verifyIncomingUid(I)V
-PLcom/android/server/VibratorService;->verifyVibrationEffect(Landroid/os/VibrationEffect;)Z
+HPLcom/android/server/VibratorService;->verifyIncomingUid(I)V
+HPLcom/android/server/VibratorService;->verifyVibrationEffect(Landroid/os/VibrationEffect;)Z
 PLcom/android/server/VibratorService;->vibrate(ILjava/lang/String;Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;Ljava/lang/String;Landroid/os/IBinder;)V
+HPLcom/android/server/VibratorService;->vibrate(ILjava/lang/String;Landroid/os/VibrationEffect;Landroid/os/VibrationAttributes;Ljava/lang/String;Landroid/os/IBinder;)V
+PLcom/android/server/Watchdog$1;-><init>(Lcom/android/server/Watchdog;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)V
+PLcom/android/server/Watchdog$1;->run()V
 HSPLcom/android/server/Watchdog$BinderThreadMonitor;-><init>()V
 HSPLcom/android/server/Watchdog$BinderThreadMonitor;-><init>(Lcom/android/server/Watchdog$1;)V
 HSPLcom/android/server/Watchdog$BinderThreadMonitor;->monitor()V
 HSPLcom/android/server/Watchdog$HandlerChecker;-><init>(Lcom/android/server/Watchdog;Landroid/os/Handler;Ljava/lang/String;J)V
 HSPLcom/android/server/Watchdog$HandlerChecker;->addMonitorLocked(Lcom/android/server/Watchdog$Monitor;)V
+PLcom/android/server/Watchdog$HandlerChecker;->describeBlockedStateLocked()Ljava/lang/String;
 HPLcom/android/server/Watchdog$HandlerChecker;->getCompletionStateLocked()I
 HSPLcom/android/server/Watchdog$HandlerChecker;->getThread()Ljava/lang/Thread;
+PLcom/android/server/Watchdog$HandlerChecker;->isOverdueLocked()Z
 HSPLcom/android/server/Watchdog$HandlerChecker;->pauseLocked(Ljava/lang/String;)V
 HSPLcom/android/server/Watchdog$HandlerChecker;->resumeLocked(Ljava/lang/String;)V
 HSPLcom/android/server/Watchdog$HandlerChecker;->run()V
@@ -2866,7 +4414,10 @@
 HSPLcom/android/server/Watchdog;->addMonitor(Lcom/android/server/Watchdog$Monitor;)V
 HSPLcom/android/server/Watchdog;->addThread(Landroid/os/Handler;)V
 HSPLcom/android/server/Watchdog;->addThread(Landroid/os/Handler;J)V
+PLcom/android/server/Watchdog;->describeCheckersLocked(Ljava/util/List;)Ljava/lang/String;
+PLcom/android/server/Watchdog;->doSysRq(C)V
 HPLcom/android/server/Watchdog;->evaluateCheckerCompletionLocked()I
+PLcom/android/server/Watchdog;->getBlockedCheckersLocked()Ljava/util/ArrayList;
 HSPLcom/android/server/Watchdog;->getInstance()Lcom/android/server/Watchdog;
 HPLcom/android/server/Watchdog;->getInterestingHalPids()Ljava/util/ArrayList;
 PLcom/android/server/Watchdog;->getInterestingNativePids()Ljava/util/ArrayList;
@@ -2875,11 +4426,12 @@
 HSPLcom/android/server/Watchdog;->processStarted(Ljava/lang/String;I)V
 HSPLcom/android/server/Watchdog;->resumeWatchingCurrentThread(Ljava/lang/String;)V
 HSPLcom/android/server/Watchdog;->run()V
+PLcom/android/server/Watchdog;->setActivityController(Landroid/app/IActivityController;)V
 HSPLcom/android/server/WiredAccessoryManager$1;-><init>(Lcom/android/server/WiredAccessoryManager;Landroid/os/Looper;Landroid/os/Handler$Callback;Z)V
-PLcom/android/server/WiredAccessoryManager$1;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/WiredAccessoryManager$1;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;-><init>(Lcom/android/server/WiredAccessoryManager;)V
-PLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;->access$000(Lcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;)V
-PLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;->init()V
+HSPLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;->access$000(Lcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;)V
+HSPLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;->init()V
 HSPLcom/android/server/WiredAccessoryManager$WiredAccessoryObserver$UEventInfo;-><init>(Lcom/android/server/WiredAccessoryManager$WiredAccessoryObserver;Ljava/lang/String;III)V
 HSPLcom/android/server/WiredAccessoryManager$WiredAccessoryObserver$UEventInfo;->checkSwitchExists()Z
 HSPLcom/android/server/WiredAccessoryManager$WiredAccessoryObserver$UEventInfo;->getSwitchStatePath()Ljava/lang/String;
@@ -2887,16 +4439,20 @@
 HSPLcom/android/server/WiredAccessoryManager$WiredAccessoryObserver;->makeObservedUEventList()Ljava/util/List;
 HSPLcom/android/server/WiredAccessoryManager;-><clinit>()V
 HSPLcom/android/server/WiredAccessoryManager;-><init>(Landroid/content/Context;Lcom/android/server/input/InputManagerService;)V
-PLcom/android/server/WiredAccessoryManager;->access$200(Lcom/android/server/WiredAccessoryManager;)Landroid/os/PowerManager$WakeLock;
-PLcom/android/server/WiredAccessoryManager;->access$300(Lcom/android/server/WiredAccessoryManager;)V
+HSPLcom/android/server/WiredAccessoryManager;->access$200(Lcom/android/server/WiredAccessoryManager;)Landroid/os/PowerManager$WakeLock;
+HSPLcom/android/server/WiredAccessoryManager;->access$300(Lcom/android/server/WiredAccessoryManager;)V
 HSPLcom/android/server/WiredAccessoryManager;->access$500()Ljava/lang/String;
 HSPLcom/android/server/WiredAccessoryManager;->access$600(Lcom/android/server/WiredAccessoryManager;)Z
-PLcom/android/server/WiredAccessoryManager;->onSystemReady()V
-PLcom/android/server/WiredAccessoryManager;->systemReady()V
+PLcom/android/server/WiredAccessoryManager;->notifyWiredAccessoryChanged(JII)V
+HSPLcom/android/server/WiredAccessoryManager;->onSystemReady()V
+HSPLcom/android/server/WiredAccessoryManager;->systemReady()V
+PLcom/android/server/WiredAccessoryManager;->updateLocked(Ljava/lang/String;I)V
 PLcom/android/server/ZramWriteback$1;-><init>(Lcom/android/server/ZramWriteback;Ljava/lang/String;Landroid/app/job/JobParameters;)V
 PLcom/android/server/ZramWriteback$1;->run()V
 HSPLcom/android/server/ZramWriteback;-><clinit>()V
 PLcom/android/server/ZramWriteback;-><init>()V
+PLcom/android/server/ZramWriteback;->access$000(Lcom/android/server/ZramWriteback;)V
+PLcom/android/server/ZramWriteback;->access$100(Landroid/content/Context;)V
 PLcom/android/server/ZramWriteback;->flushIdlePages()V
 PLcom/android/server/ZramWriteback;->getWrittenPageCount()I
 PLcom/android/server/ZramWriteback;->isWritebackEnabled()Z
@@ -2906,235 +4462,916 @@
 PLcom/android/server/ZramWriteback;->onStopJob(Landroid/app/job/JobParameters;)Z
 PLcom/android/server/ZramWriteback;->schedNextWriteback(Landroid/content/Context;)V
 HSPLcom/android/server/ZramWriteback;->scheduleZramWriteback(Landroid/content/Context;)V
+PLcom/android/server/accessibility/-$$Lambda$AbiCM6mjSOPpIPMT9CFGL4UAcKY;-><clinit>()V
+PLcom/android/server/accessibility/-$$Lambda$AbiCM6mjSOPpIPMT9CFGL4UAcKY;-><init>()V
+PLcom/android/server/accessibility/-$$Lambda$AbiCM6mjSOPpIPMT9CFGL4UAcKY;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$1$49HMbWlhAK8DBFFzhu5wH_-EQaM;-><init>(Ljava/lang/String;)V
 PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$1$J4pGG-UiTxhxH1VLNWBa7KLTh48;-><init>(Ljava/lang/String;)V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$4A2E7YnYuU3-mDj4eBvmxi8PEpA;-><clinit>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$4A2E7YnYuU3-mDj4eBvmxi8PEpA;-><init>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$4X8DTUSf9fNVgqvhoZcnlny0VlE;-><init>(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$4X8DTUSf9fNVgqvhoZcnlny0VlE;->test(Ljava/lang/Object;)Z
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$5vwr6qV-eqdCr73CeDmVnsJlZHM;-><clinit>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$5vwr6qV-eqdCr73CeDmVnsJlZHM;-><init>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$5vwr6qV-eqdCr73CeDmVnsJlZHM;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$4A2E7YnYuU3-mDj4eBvmxi8PEpA;-><clinit>()V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$4A2E7YnYuU3-mDj4eBvmxi8PEpA;-><init>()V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$4A2E7YnYuU3-mDj4eBvmxi8PEpA;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$4X8DTUSf9fNVgqvhoZcnlny0VlE;-><init>(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$4X8DTUSf9fNVgqvhoZcnlny0VlE;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$5vwr6qV-eqdCr73CeDmVnsJlZHM;-><clinit>()V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$5vwr6qV-eqdCr73CeDmVnsJlZHM;-><init>()V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$5vwr6qV-eqdCr73CeDmVnsJlZHM;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$BB160fzAC7iBy5jJ5MWjuD3DeD8;-><clinit>()V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$BB160fzAC7iBy5jJ5MWjuD3DeD8;-><init>()V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$BX2CMQr5jU9WhPYx7Aaae4zgxf4;-><clinit>()V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$BX2CMQr5jU9WhPYx7Aaae4zgxf4;-><init>()V
+HPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$BX2CMQr5jU9WhPYx7Aaae4zgxf4;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$Gu-W_dQ2mWyy8l4tm19TzFxGbeM;-><clinit>()V
 PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$Gu-W_dQ2mWyy8l4tm19TzFxGbeM;-><init>()V
 PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$Gu-W_dQ2mWyy8l4tm19TzFxGbeM;->accept(Ljava/lang/Object;)V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$LBcFUTzQoOf533NwD2ZIwFqFJYg;-><clinit>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$LBcFUTzQoOf533NwD2ZIwFqFJYg;-><init>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$NCeV24lEcO5W6ZZr1GqGK-ylU9g;-><clinit>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$NCeV24lEcO5W6ZZr1GqGK-ylU9g;-><init>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$NCeV24lEcO5W6ZZr1GqGK-ylU9g;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$PPQodQ1oFD7RLj5c4axXJBoCbR8;-><init>(J)V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$PPQodQ1oFD7RLj5c4axXJBoCbR8;->acceptOrThrow(Ljava/lang/Object;)V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$he8-7PL6YxfY9L7x0CLg6DATNxg;-><clinit>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$he8-7PL6YxfY9L7x0CLg6DATNxg;-><init>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$heq1MRdQjg8BGWFbpV3PEpnDVcg;-><clinit>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$heq1MRdQjg8BGWFbpV3PEpnDVcg;-><init>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$heq1MRdQjg8BGWFbpV3PEpnDVcg;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$ifdWn5KwwehtrFVplnBr1oDsgh8;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$ifdWn5KwwehtrFVplnBr1oDsgh8;->acceptOrThrow(Ljava/lang/Object;)V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$luI_C3QiJWsM08i8m3lx484SyyY;-><clinit>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$luI_C3QiJWsM08i8m3lx484SyyY;-><init>()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$luI_C3QiJWsM08i8m3lx484SyyY;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$mu7O1RAujG8e8HXPylcZ6hd_kNU;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$mu7O1RAujG8e8HXPylcZ6hd_kNU;->run()V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$vOsKAMFlSRp8W9N5pJiqJ7ToRQA;-><init>(I)V
-PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$vOsKAMFlSRp8W9N5pJiqJ7ToRQA;->acceptOrThrow(Ljava/lang/Object;)V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$INvzqadejxj-XxBJAa177LZwIDQ;-><init>(Lcom/android/server/accessibility/AccessibilityUserState;)V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$INvzqadejxj-XxBJAa177LZwIDQ;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$LBcFUTzQoOf533NwD2ZIwFqFJYg;-><clinit>()V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$LBcFUTzQoOf533NwD2ZIwFqFJYg;-><init>()V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$LBcFUTzQoOf533NwD2ZIwFqFJYg;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$NCeV24lEcO5W6ZZr1GqGK-ylU9g;-><clinit>()V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$NCeV24lEcO5W6ZZr1GqGK-ylU9g;-><init>()V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$NCeV24lEcO5W6ZZr1GqGK-ylU9g;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$PPQodQ1oFD7RLj5c4axXJBoCbR8;-><init>(J)V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$PPQodQ1oFD7RLj5c4axXJBoCbR8;->acceptOrThrow(Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$ZdgJH-YGWmUCqtsR2uYpejEExzw;-><init>(Ljava/lang/String;Lcom/android/server/accessibility/AccessibilityUserState;Ljava/util/Set;Ljava/util/Set;)V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$ZdgJH-YGWmUCqtsR2uYpejEExzw;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$he8-7PL6YxfY9L7x0CLg6DATNxg;-><clinit>()V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$he8-7PL6YxfY9L7x0CLg6DATNxg;-><init>()V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$he8-7PL6YxfY9L7x0CLg6DATNxg;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$heq1MRdQjg8BGWFbpV3PEpnDVcg;-><clinit>()V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$heq1MRdQjg8BGWFbpV3PEpnDVcg;-><init>()V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$heq1MRdQjg8BGWFbpV3PEpnDVcg;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$iCLwAtq-px2o256DhoyM-0_S-Uc;-><init>(Ljava/lang/String;Lcom/android/server/accessibility/AccessibilityUserState;)V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$iCLwAtq-px2o256DhoyM-0_S-Uc;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$ifdWn5KwwehtrFVplnBr1oDsgh8;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$ifdWn5KwwehtrFVplnBr1oDsgh8;->acceptOrThrow(Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$luI_C3QiJWsM08i8m3lx484SyyY;-><clinit>()V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$luI_C3QiJWsM08i8m3lx484SyyY;-><init>()V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$luI_C3QiJWsM08i8m3lx484SyyY;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$mu7O1RAujG8e8HXPylcZ6hd_kNU;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$mu7O1RAujG8e8HXPylcZ6hd_kNU;->run()V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$vOsKAMFlSRp8W9N5pJiqJ7ToRQA;-><init>(I)V
+HSPLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$vOsKAMFlSRp8W9N5pJiqJ7ToRQA;->acceptOrThrow(Ljava/lang/Object;)V
 PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$zXJtauhUptSkQJSF-M55-grAVbo;-><clinit>()V
 PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$zXJtauhUptSkQJSF-M55-grAVbo;-><init>()V
 PLcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$zXJtauhUptSkQJSF-M55-grAVbo;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityServiceConnection$ASP9bmSvpeD7ZE_uJ8sm-9hCwiU;-><clinit>()V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityServiceConnection$ASP9bmSvpeD7ZE_uJ8sm-9hCwiU;-><init>()V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityServiceConnection$ASP9bmSvpeD7ZE_uJ8sm-9hCwiU;->accept(Ljava/lang/Object;)V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityWindowManager$Ky3Q5Gg_NEaXwBlFb7wxyjIUci0;-><clinit>()V
+PLcom/android/server/accessibility/-$$Lambda$AccessibilityWindowManager$Ky3Q5Gg_NEaXwBlFb7wxyjIUci0;-><init>()V
+HPLcom/android/server/accessibility/-$$Lambda$AccessibilityWindowManager$Ky3Q5Gg_NEaXwBlFb7wxyjIUci0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/accessibility/-$$Lambda$CXn5BYHEDMuDgWNKCgknaVOAyJ8;-><clinit>()V
+PLcom/android/server/accessibility/-$$Lambda$CXn5BYHEDMuDgWNKCgknaVOAyJ8;-><init>()V
+PLcom/android/server/accessibility/-$$Lambda$CXn5BYHEDMuDgWNKCgknaVOAyJ8;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/accessibility/-$$Lambda$MagnificationController$UxSkaR2uzdX0ekJv4Wtodc8tuMY;-><clinit>()V
+PLcom/android/server/accessibility/-$$Lambda$MagnificationController$UxSkaR2uzdX0ekJv4Wtodc8tuMY;-><init>()V
+PLcom/android/server/accessibility/-$$Lambda$MagnificationController$UxSkaR2uzdX0ekJv4Wtodc8tuMY;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/accessibility/-$$Lambda$SP6uGJNthzczgi990Xl2SJhDOMs;-><clinit>()V
+PLcom/android/server/accessibility/-$$Lambda$SP6uGJNthzczgi990Xl2SJhDOMs;-><init>()V
+HPLcom/android/server/accessibility/-$$Lambda$SP6uGJNthzczgi990Xl2SJhDOMs;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/accessibility/-$$Lambda$UiAutomationManager$UiAutomationService$z2oxrodQt4ZxyzsfB6p_GYgwxqk;-><init>(Lcom/android/server/accessibility/UiAutomationManager$UiAutomationService;)V
+PLcom/android/server/accessibility/-$$Lambda$UiAutomationManager$UiAutomationService$z2oxrodQt4ZxyzsfB6p_GYgwxqk;->run()V
+PLcom/android/server/accessibility/-$$Lambda$X8i00nfnUx_qUoIgZixkfu6ddSY;-><clinit>()V
+PLcom/android/server/accessibility/-$$Lambda$X8i00nfnUx_qUoIgZixkfu6ddSY;-><init>()V
+HPLcom/android/server/accessibility/-$$Lambda$X8i00nfnUx_qUoIgZixkfu6ddSY;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$1;-><init>(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Landroid/os/Looper;)V
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$1;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$InvocationHandler;-><init>(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Landroid/os/Looper;)V
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$InvocationHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$InvocationHandler;->isMagnificationCallbackEnabled(I)Z
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$InvocationHandler;->notifyAccessibilityButtonAvailabilityChangedLocked(Z)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$InvocationHandler;->notifyAccessibilityButtonClickedLocked(I)V
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$InvocationHandler;->notifyMagnificationChangedLocked(ILandroid/graphics/Region;FFF)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$InvocationHandler;->setMagnificationCallbackEnabled(IZ)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;-><init>(Landroid/content/Context;Landroid/content/ComponentName;Landroid/accessibilityservice/AccessibilityServiceInfo;ILandroid/os/Handler;Ljava/lang/Object;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$SystemSupport;Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/accessibility/SystemActionPerformer;Lcom/android/server/accessibility/AccessibilityWindowManager;)V
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->access$000(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;ILandroid/view/accessibility/AccessibilityEvent;Z)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->access$100(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Landroid/accessibilityservice/AccessibilityGestureEvent;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->access$200(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->access$300(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;ILandroid/graphics/Region;FFF)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->access$500(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;I)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->access$600(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Z)V
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->canReceiveEventsLocked()Z
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->ensureWindowsAvailableTimedLocked(I)V
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->findAccessibilityNodeInfoByAccessibilityId(IJILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IJLandroid/os/Bundle;)[Ljava/lang/String;
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->findAccessibilityNodeInfosByViewId(IJLjava/lang/String;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)[Ljava/lang/String;
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->findFocus(IJIILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)[Ljava/lang/String;
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getCapabilities()I
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getComponentName()Landroid/content/ComponentName;
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getMagnificationRegion(I)Landroid/graphics/Region;
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getMagnificationScale(I)F
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getRelevantEventTypes()I
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getServiceInterfaceSafely()Landroid/accessibilityservice/IAccessibilityServiceClient;
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getWindow(I)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getWindows()Landroid/view/accessibility/AccessibilityWindowInfo$WindowListSparseArray;
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getWindowsByDisplayLocked(I)Ljava/util/List;
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->isConnectedLocked()Z
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->isMagnificationCallbackEnabled(I)Z
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->isMultiFingerGesturesEnabled()Z
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->isServiceHandlesDoubleTapEnabled()Z
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyAccessibilityButtonAvailabilityChangedInternal(Z)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyAccessibilityButtonAvailabilityChangedLocked(Z)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyAccessibilityButtonClickedInternal(I)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyAccessibilityButtonClickedLocked(I)V
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyAccessibilityEventInternal(ILandroid/view/accessibility/AccessibilityEvent;Z)V
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyClearAccessibilityCacheInternal()V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyClearAccessibilityNodeInfoCache()V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyGesture(Landroid/accessibilityservice/AccessibilityGestureEvent;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyGestureInternal(Landroid/accessibilityservice/AccessibilityGestureEvent;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyMagnificationChangedInternal(ILandroid/graphics/Region;FFF)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyMagnificationChangedLocked(ILandroid/graphics/Region;FFF)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->onAdded()V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->onDisplayAdded(I)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->onDisplayRemoved(I)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->onKeyEvent(Landroid/view/KeyEvent;I)Z
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->onRemoved()V
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->performAccessibilityAction(IJILandroid/os/Bundle;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)Z
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->performAccessibilityActionInternal(IIJILandroid/os/Bundle;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IJ)Z
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->registerMagnificationIfNeeded(ILcom/android/server/accessibility/MagnificationController;)Z
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->replaceCallbackIfNeeded(Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIIJ)Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->resetLocked()V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->resolveAccessibilityWindowIdForFindFocusLocked(II)I
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->resolveAccessibilityWindowIdLocked(I)I
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setDynamicallyConfigurableProperties(Landroid/accessibilityservice/AccessibilityServiceInfo;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setMagnificationCallbackEnabled(IZ)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setMagnificationScaleAndCenter(IFFFZ)Z
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setOnKeyEventResult(ZI)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setServiceInfo(Landroid/accessibilityservice/AccessibilityServiceInfo;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->supportsFlagForNotImportantViews(Landroid/accessibilityservice/AccessibilityServiceInfo;)Z
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->wantsEventLocked(Landroid/view/accessibility/AccessibilityEvent;)Z
+PLcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;-><init>()V
+PLcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;->inputSourceValid()Z
+PLcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;->reset()V
+HPLcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;->shouldProcessScroll()Z
+PLcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;->updateInputSource(I)Z
+PLcom/android/server/accessibility/AccessibilityInputFilter$KeyboardEventStreamState;-><init>()V
+PLcom/android/server/accessibility/AccessibilityInputFilter$KeyboardEventStreamState;->inputSourceValid()Z
+PLcom/android/server/accessibility/AccessibilityInputFilter$KeyboardEventStreamState;->reset()V
+PLcom/android/server/accessibility/AccessibilityInputFilter$KeyboardEventStreamState;->shouldProcessKeyEvent(Landroid/view/KeyEvent;)Z
+PLcom/android/server/accessibility/AccessibilityInputFilter$KeyboardEventStreamState;->updateInputSource(I)Z
+PLcom/android/server/accessibility/AccessibilityInputFilter$TouchScreenEventStreamState;-><init>()V
+PLcom/android/server/accessibility/AccessibilityInputFilter$TouchScreenEventStreamState;->reset()V
+HPLcom/android/server/accessibility/AccessibilityInputFilter$TouchScreenEventStreamState;->shouldProcessMotionEvent(Landroid/view/MotionEvent;)Z
+PLcom/android/server/accessibility/AccessibilityInputFilter;-><clinit>()V
+PLcom/android/server/accessibility/AccessibilityInputFilter;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService;)V
+PLcom/android/server/accessibility/AccessibilityInputFilter;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/util/SparseArray;)V
+PLcom/android/server/accessibility/AccessibilityInputFilter;->addFirstEventHandler(ILcom/android/server/accessibility/EventStreamTransformation;)V
+PLcom/android/server/accessibility/AccessibilityInputFilter;->clearEvents(I)V
+HPLcom/android/server/accessibility/AccessibilityInputFilter;->clearEventsForAllEventHandlers(I)V
+PLcom/android/server/accessibility/AccessibilityInputFilter;->disableFeatures()V
+PLcom/android/server/accessibility/AccessibilityInputFilter;->enableFeatures()V
+HPLcom/android/server/accessibility/AccessibilityInputFilter;->getEventStreamState(Landroid/view/InputEvent;)Lcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;
+HPLcom/android/server/accessibility/AccessibilityInputFilter;->handleMotionEvent(Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/AccessibilityInputFilter;->isDisplayIdValid(I)Z
+HPLcom/android/server/accessibility/AccessibilityInputFilter;->notifyAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+PLcom/android/server/accessibility/AccessibilityInputFilter;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLcom/android/server/accessibility/AccessibilityInputFilter;->onInputEvent(Landroid/view/InputEvent;I)V
+PLcom/android/server/accessibility/AccessibilityInputFilter;->onInstalled()V
+PLcom/android/server/accessibility/AccessibilityInputFilter;->onKeyEvent(Landroid/view/KeyEvent;I)V
+HPLcom/android/server/accessibility/AccessibilityInputFilter;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/AccessibilityInputFilter;->onUninstalled()V
+PLcom/android/server/accessibility/AccessibilityInputFilter;->processKeyEvent(Lcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;Landroid/view/KeyEvent;I)V
+HPLcom/android/server/accessibility/AccessibilityInputFilter;->processMotionEvent(Lcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/AccessibilityInputFilter;->resetStreamState()V
+PLcom/android/server/accessibility/AccessibilityInputFilter;->setUserAndEnabledFeatures(II)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$1;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$1;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$1;->onPackageRemoved(Ljava/lang/String;I)V
 PLcom/android/server/accessibility/AccessibilityManagerService$1;->onPackageUpdateFinished(Ljava/lang/String;I)V
-PLcom/android/server/accessibility/AccessibilityManagerService$1;->onSomePackagesChanged()V
+HPLcom/android/server/accessibility/AccessibilityManagerService$1;->onSomePackagesChanged()V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$2;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;)V
-PLcom/android/server/accessibility/AccessibilityManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityContentObserver;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/os/Handler;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityContentObserver;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityContentObserver;->register(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService$MainHandler;)V
-PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->getValidDisplayList()Ljava/util/ArrayList;
+HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->getValidDisplayList()Ljava/util/ArrayList;
 HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->initializeDisplayList()V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->isValidDisplay(Landroid/view/Display;)Z
-PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->onDisplayChanged(I)V
+PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->onDisplayAdded(I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->onDisplayChanged(I)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->onDisplayRemoved(I)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$Client;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/view/accessibility/IAccessibilityManagerClient;ILcom/android/server/accessibility/AccessibilityUserState;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$Client;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/view/accessibility/IAccessibilityManagerClient;ILcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$1;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge$1;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;Lcom/android/server/accessibility/AccessibilityUserState;Landroid/content/Context;Landroid/content/ComponentName;Landroid/accessibilityservice/AccessibilityServiceInfo;ILandroid/os/Handler;Ljava/lang/Object;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$SystemSupport;Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/accessibility/SystemActionPerformer;Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/accessibility/AccessibilityManagerService;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge$1;->supportsFlagForNotImportantViews(Landroid/accessibilityservice/AccessibilityServiceInfo;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;->getAccessibilityFocusNotLocked()Landroid/view/accessibility/AccessibilityNodeInfo;
+PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;->getAccessibilityFocusNotLocked(I)Landroid/view/accessibility/AccessibilityNodeInfo;
+PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;->performActionOnAccessibilityFocusedItemNotLocked(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)Z
 HSPLcom/android/server/accessibility/AccessibilityManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$Lifecycle;->onBootPhase(I)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$Lifecycle;->onStart()V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$MainHandler;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/os/Looper;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$MainHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService;-><clinit>()V
 HSPLcom/android/server/accessibility/AccessibilityManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->access$000(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->access$100(Lcom/android/server/accessibility/AccessibilityManagerService;)Ljava/lang/Object;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$1000(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$1200(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/content/Context;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$1300(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityInputFilter;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$1300(Lcom/android/server/accessibility/AccessibilityManagerService;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$1400(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityInputFilter;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$1508()I
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$1600(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityManagerService$MainHandler;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$1700(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilitySecurityPolicy;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$1800(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/wm/WindowManagerInternal;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$1900(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityWindowManager;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$1900(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/SystemActionPerformer;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$200(Lcom/android/server/accessibility/AccessibilityManagerService;)I
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$2000(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityWindowManager;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$2100(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/wm/ActivityTaskManagerInternal;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$2200(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$2300(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/MagnificationController;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$2300(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->access$2400(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/content/pm/PackageManager;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$2400(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/MagnificationController;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->access$2500(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/content/pm/PackageManager;
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->access$2500(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)I
-PLcom/android/server/accessibility/AccessibilityManagerService;->access$700(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->access$800(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->access$2600(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)I
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$2700(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$300(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityUserState;
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$3000(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$3300(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$400(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$500(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$600(Lcom/android/server/accessibility/AccessibilityManagerService;I)Lcom/android/server/accessibility/AccessibilityUserState;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->access$700(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$700(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->access$800(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->access$900(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->addAccessibilityInteractionConnection(Landroid/view/IWindow;Landroid/view/accessibility/IAccessibilityInteractionConnection;Ljava/lang/String;I)I
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->addClient(Landroid/view/accessibility/IAccessibilityManagerClient;I)J
 PLcom/android/server/accessibility/AccessibilityManagerService;->announceNewUserIfNeeded()V
-PLcom/android/server/accessibility/AccessibilityManagerService;->broadcastToClients(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/util/function/Consumer;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->broadcastToClients(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/util/function/Consumer;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->canRequestAndRequestsTouchExplorationLocked(Lcom/android/server/accessibility/AccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityUserState;)Z
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->computeRelevantEventTypesLocked(Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)I
 PLcom/android/server/accessibility/AccessibilityManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->getAccessibilityShortcutTargets(I)Ljava/util/List;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->getAccessibilityShortcutTargetsInternal(I)Ljava/util/List;
+PLcom/android/server/accessibility/AccessibilityManagerService;->getActiveWindowId()I
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getClientStateLocked(Lcom/android/server/accessibility/AccessibilityUserState;)I
+HPLcom/android/server/accessibility/AccessibilityManagerService;->getCompatibleMagnificationSpecLocked(I)Landroid/view/MagnificationSpec;
 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;
-PLcom/android/server/accessibility/AccessibilityManagerService;->getInstalledAccessibilityServiceList(I)Ljava/util/List;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->getInstalledAccessibilityServiceList(I)Ljava/util/List;
+PLcom/android/server/accessibility/AccessibilityManagerService;->getInteractionBridge()Lcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;
+PLcom/android/server/accessibility/AccessibilityManagerService;->getKeyEventDispatcher()Lcom/android/server/accessibility/KeyEventDispatcher;
+PLcom/android/server/accessibility/AccessibilityManagerService;->getMagnificationController()Lcom/android/server/accessibility/MagnificationController;
+PLcom/android/server/accessibility/AccessibilityManagerService;->getPendingIntentActivity(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getRecommendedTimeoutMillis()J
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getRecommendedTimeoutMillisLocked(Lcom/android/server/accessibility/AccessibilityUserState;)J
-PLcom/android/server/accessibility/AccessibilityManagerService;->getUserState(I)Lcom/android/server/accessibility/AccessibilityUserState;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getUserState(I)Lcom/android/server/accessibility/AccessibilityUserState;
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getUserStateLocked(I)Lcom/android/server/accessibility/AccessibilityUserState;
-PLcom/android/server/accessibility/AccessibilityManagerService;->getValidDisplayList()Ljava/util/ArrayList;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getValidDisplayList()Ljava/util/ArrayList;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->init()V
+PLcom/android/server/accessibility/AccessibilityManagerService;->interrupt(I)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->isAccessibilityButtonShown()Z
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->isClientInPackageWhitelist(Landroid/accessibilityservice/AccessibilityServiceInfo;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)Z
-PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$5vwr6qV-eqdCr73CeDmVnsJlZHM(Lcom/android/server/accessibility/AccessibilityManagerService;II)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$5vwr6qV-eqdCr73CeDmVnsJlZHM(Lcom/android/server/accessibility/AccessibilityManagerService;II)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$BX2CMQr5jU9WhPYx7Aaae4zgxf4(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/view/accessibility/AccessibilityEvent;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$Gu-W_dQ2mWyy8l4tm19TzFxGbeM(Lcom/android/server/accessibility/AccessibilityManagerService;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$NCeV24lEcO5W6ZZr1GqGK-ylU9g(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$heq1MRdQjg8BGWFbpV3PEpnDVcg(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/os/RemoteCallbackList;J)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$luI_C3QiJWsM08i8m3lx484SyyY(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$notifyClientsOfServicesStateChange$6(JLandroid/view/accessibility/IAccessibilityManagerClient;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$sendStateToClients$5(ILandroid/view/accessibility/IAccessibilityManagerClient;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateAccessibilityShortcutKeyTargetsLocked$9(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateRelevantEventsLocked$0$AccessibilityManagerService(Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateRelevantEventsLocked$1$AccessibilityManagerService(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$NCeV24lEcO5W6ZZr1GqGK-ylU9g(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$heq1MRdQjg8BGWFbpV3PEpnDVcg(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/os/RemoteCallbackList;J)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$luI_C3QiJWsM08i8m3lx484SyyY(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$migrateAccessibilityButtonSettingsIfNecessaryLocked$13(Ljava/lang/String;Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$migrateAccessibilityButtonSettingsIfNecessaryLocked$14(Ljava/lang/String;Lcom/android/server/accessibility/AccessibilityUserState;Ljava/util/Set;Ljava/util/Set;Landroid/content/ComponentName;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$notifyClientsOfServicesStateChange$6(JLandroid/view/accessibility/IAccessibilityManagerClient;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$readAccessibilityButtonSettingsLocked$8(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$readAccessibilityShortcutKeySettingLocked$7(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$readComponentNamesFromSettingLocked$2(Ljava/lang/String;)Landroid/content/ComponentName;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$sendStateToClients$5(ILandroid/view/accessibility/IAccessibilityManagerClient;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateAccessibilityButtonTargetsLocked$11(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateAccessibilityShortcutKeyTargetsLocked$9(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateRelevantEventsLocked$0$AccessibilityManagerService(Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateRelevantEventsLocked$1$AccessibilityManagerService(Lcom/android/server/accessibility/AccessibilityUserState;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$zXJtauhUptSkQJSF-M55-grAVbo(Lcom/android/server/accessibility/AccessibilityManagerService;II)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->migrateAccessibilityButtonSettingsIfNecessaryLocked(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->notifyAccessibilityButtonClicked(I)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->notifyAccessibilityButtonClickedLocked(I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->notifyAccessibilityButtonVisibilityChanged(Z)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->notifyAccessibilityButtonVisibilityChangedLocked(Z)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->notifyClientsOfServicesStateChange(Landroid/os/RemoteCallbackList;J)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->notifyAccessibilityServicesDelayedLocked(Landroid/view/accessibility/AccessibilityEvent;Z)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->notifyClearAccessibilityCacheLocked()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->notifyClientsOfServicesStateChange(Landroid/os/RemoteCallbackList;J)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->notifyGestureLocked(Landroid/accessibilityservice/AccessibilityGestureEvent;Z)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->notifyKeyEvent(Landroid/view/KeyEvent;I)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService;->notifyMagnificationChanged(ILandroid/graphics/Region;FFF)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->notifyMagnificationChangedLocked(ILandroid/graphics/Region;FFF)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->notifySystemActionsChangedLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->onBootPhase(I)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->onUserStateChangedLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readAccessibilityButtonSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readAccessibilityShortcutKeySettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-PLcom/android/server/accessibility/AccessibilityManagerService;->readAutoclickEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readColonDelimitedSettingToSet(Ljava/lang/String;ILjava/util/Set;Ljava/util/function/Function;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readColonDelimitedStringToSet(Ljava/lang/String;Ljava/util/Set;ZLjava/util/function/Function;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->readComponentNamesFromSettingLocked(Ljava/lang/String;ILjava/util/Set;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->readConfigurationForUserStateLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readEnabledAccessibilityServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-PLcom/android/server/accessibility/AccessibilityManagerService;->readHighTextContrastEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readInstalledAccessibilityServiceLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-PLcom/android/server/accessibility/AccessibilityManagerService;->readInstalledAccessibilityShortcutLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readMagnificationEnabledSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-PLcom/android/server/accessibility/AccessibilityManagerService;->readTouchExplorationEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readTouchExplorationGrantedAccessibilityServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readUserRecommendedUiTimeoutSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->onClientChangeLocked(Z)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->onGesture(Landroid/accessibilityservice/AccessibilityGestureEvent;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->onServiceInfoChangedLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->onSystemActionsChanged()V
+PLcom/android/server/accessibility/AccessibilityManagerService;->onTouchInteractionEnd()V
+PLcom/android/server/accessibility/AccessibilityManagerService;->onTouchInteractionStart()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->onUserStateChangedLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->performActionOnAccessibilityFocusedItem(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->persistColonDelimitedSetToSettingLocked(Ljava/lang/String;ILjava/util/Set;Ljava/util/function/Function;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->persistComponentNamesToSettingLocked(Ljava/lang/String;Ljava/util/Set;I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readAccessibilityButtonSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readAccessibilityShortcutKeySettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readAutoclickEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readColonDelimitedSettingToSet(Ljava/lang/String;ILjava/util/Set;Ljava/util/function/Function;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readColonDelimitedStringToSet(Ljava/lang/String;Ljava/util/Set;ZLjava/util/function/Function;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readComponentNamesFromSettingLocked(Ljava/lang/String;ILjava/util/Set;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readConfigurationForUserStateLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readEnabledAccessibilityServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readHighTextContrastEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readInstalledAccessibilityServiceLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readInstalledAccessibilityShortcutLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readMagnificationEnabledSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readTouchExplorationEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readTouchExplorationGrantedAccessibilityServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readUserRecommendedUiTimeoutSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->registerBroadcastReceivers()V
-PLcom/android/server/accessibility/AccessibilityManagerService;->scheduleNotifyClientsOfServicesStateChangeLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateClientsIfNeededLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateFingerprintGestureHandling(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateInputFilter(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->sendServicesStateChanged(Landroid/os/RemoteCallbackList;J)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->sendStateToAllClients(II)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->sendStateToClients(II)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->sendStateToClients(ILandroid/os/RemoteCallbackList;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->registerSystemAction(Landroid/app/RemoteAction;I)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->registerUiTestAutomationService(Landroid/os/IBinder;Landroid/accessibilityservice/IAccessibilityServiceClient;Landroid/accessibilityservice/AccessibilityServiceInfo;I)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->removeAccessibilityInteractionConnection(Landroid/view/IWindow;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->removeUser(I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleNotifyClientsOfServicesStateChangeLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateClientsIfNeededLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateFingerprintGestureHandling(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateInputFilter(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->sendAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;I)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->sendAccessibilityEventForCurrentUserLocked(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->sendAccessibilityEventLocked(Landroid/view/accessibility/AccessibilityEvent;I)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->sendAccessibilityEventToInputFilter(Landroid/view/accessibility/AccessibilityEvent;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->sendFingerprintGesture(I)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->sendServicesStateChanged(Landroid/os/RemoteCallbackList;J)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->sendStateToAllClients(II)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->sendStateToClients(II)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->sendStateToClients(ILandroid/os/RemoteCallbackList;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->setMotionEventInjectors(Landroid/util/SparseArray;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->setPictureInPictureActionReplacingConnection(Landroid/view/accessibility/IAccessibilityInteractionConnection;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->switchUser(I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->switchUser(I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->unlockUser(I)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityButtonTargetsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityShortcutKeyTargetsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->updateFilterKeyEventsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->updateFingerprintGestureHandling(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->updateInputFilter(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateLegacyCapabilitiesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->updateMagnificationLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->updatePerformGesturesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->updateRecommendedUiTimeoutLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->updateRelevantEventsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->updateTouchExplorationLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateWindowsForAccessibilityCallbackLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->userHasListeningMagnificationServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;I)Z
-PLcom/android/server/accessibility/AccessibilityManagerService;->userHasMagnificationServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->unregisterUiTestAutomationService(Landroid/accessibilityservice/IAccessibilityServiceClient;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityButtonTargetsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityShortcutKeyTargetsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateFilterKeyEventsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateFingerprintGestureHandling(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateInputFilter(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateLegacyCapabilitiesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateMagnificationLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updatePerformGesturesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateRecommendedUiTimeoutLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateRelevantEventsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateTouchExplorationLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateWindowsForAccessibilityCallbackLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->userHasListeningMagnificationServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;I)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->userHasMagnificationServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;-><clinit>()V
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilitySecurityPolicy$AccessibilityUserManager;)V
-HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canRegisterService(Landroid/content/pm/ServiceInfo;)Z
+PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canCaptureFingerprintGestures(Lcom/android/server/accessibility/AccessibilityServiceConnection;)Z
+PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canControlMagnification(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)Z
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canDispatchAccessibilityEventLocked(ILandroid/view/accessibility/AccessibilityEvent;)Z
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canGetAccessibilityNodeInfoLocked(ILcom/android/server/accessibility/AbstractAccessibilityServiceConnection;I)Z
+HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canRegisterService(Landroid/content/pm/ServiceInfo;)Z
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canRetrieveWindowContentLocked(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)Z
+PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canRetrieveWindowsLocked(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)Z
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->checkAccessibilityAccess(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)Z
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->computeValidReportedPackages(Ljava/lang/String;I)[Ljava/lang/String;
+PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->enforceCallerIsRecentsOrHasPermission(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->enforceCallingOrSelfPermission(Ljava/lang/String;)V
 PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->hasPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->isCallerInteractingAcrossUsers(I)Z
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->isRetrievalAllowingWindowLocked(II)Z
+PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->isShellAllowedToRetrieveWindowLocked(II)Z
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->isValidPackageForUid(Ljava/lang/String;I)Z
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->resolveCallingUserIdEnforcingPermissionsLocked(I)I
-PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->resolveProfileParentLocked(I)I
+HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->resolveProfileParentLocked(I)I
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->resolveValidReportedPackageLocked(Ljava/lang/CharSequence;II)Ljava/lang/String;
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->setAccessibilityWindowManager(Lcom/android/server/accessibility/AccessibilityWindowManager;)V
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->setAppWidgetManager(Landroid/appwidget/AppWidgetManagerInternal;)V
+PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->updateEventSourceLocked(Landroid/view/accessibility/AccessibilityEvent;)V
+PLcom/android/server/accessibility/AccessibilityServiceConnection;-><init>(Lcom/android/server/accessibility/AccessibilityUserState;Landroid/content/Context;Landroid/content/ComponentName;Landroid/accessibilityservice/AccessibilityServiceInfo;ILandroid/os/Handler;Ljava/lang/Object;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$SystemSupport;Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/accessibility/SystemActionPerformer;Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/wm/ActivityTaskManagerInternal;)V
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->bindLocked()V
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->binderDied()V
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->canRetrieveInteractiveWindowsLocked()Z
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->disableSelf()V
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;
+HPLcom/android/server/accessibility/AccessibilityServiceConnection;->hasRightsToCurrentUserLocked()Z
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->initializeService()V
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->isAccessibilityButtonAvailable()Z
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->isAccessibilityButtonAvailableLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->isCapturingFingerprintGestures()Z
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->lambda$ASP9bmSvpeD7ZE_uJ8sm-9hCwiU(Lcom/android/server/accessibility/AccessibilityServiceConnection;)V
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->unbindLocked()V
 HSPLcom/android/server/accessibility/AccessibilityUserState;-><clinit>()V
 HSPLcom/android/server/accessibility/AccessibilityUserState;-><init>(ILandroid/content/Context;Lcom/android/server/accessibility/AccessibilityUserState$ServiceInfoChangeListener;)V
-PLcom/android/server/accessibility/AccessibilityUserState;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/accessibility/AccessibilityUserState;->getBindInstantServiceAllowedLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->getBindingServicesLocked()Ljava/util/Set;
+PLcom/android/server/accessibility/AccessibilityUserState;->addServiceLocked(Lcom/android/server/accessibility/AccessibilityServiceConnection;)V
+HPLcom/android/server/accessibility/AccessibilityUserState;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getBindInstantServiceAllowedLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getBindingServicesLocked()Ljava/util/Set;
 HSPLcom/android/server/accessibility/AccessibilityUserState;->getClientStateLocked(Z)I
-PLcom/android/server/accessibility/AccessibilityUserState;->getCrashedServicesLocked()Ljava/util/Set;
-HPLcom/android/server/accessibility/AccessibilityUserState;->getInstalledServiceInfoLocked(Landroid/content/ComponentName;)Landroid/accessibilityservice/AccessibilityServiceInfo;
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getCrashedServicesLocked()Ljava/util/Set;
+PLcom/android/server/accessibility/AccessibilityUserState;->getEnabledServicesLocked()Ljava/util/Set;
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getInstalledServiceInfoLocked(Landroid/content/ComponentName;)Landroid/accessibilityservice/AccessibilityServiceInfo;
 HSPLcom/android/server/accessibility/AccessibilityUserState;->getInteractiveUiTimeoutLocked()I
-PLcom/android/server/accessibility/AccessibilityUserState;->getLastSentClientStateLocked()I
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getLastSentClientStateLocked()I
 HSPLcom/android/server/accessibility/AccessibilityUserState;->getNonInteractiveUiTimeoutLocked()I
-PLcom/android/server/accessibility/AccessibilityUserState;->getShortcutTargetsLocked(I)Landroid/util/ArraySet;
-PLcom/android/server/accessibility/AccessibilityUserState;->getUserInteractiveUiTimeoutLocked()I
-PLcom/android/server/accessibility/AccessibilityUserState;->getUserNonInteractiveUiTimeoutLocked()I
-PLcom/android/server/accessibility/AccessibilityUserState;->isAutoclickEnabledLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isDisplayMagnificationEnabledLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isFilterKeyEventsEnabledLocked()Z
+PLcom/android/server/accessibility/AccessibilityUserState;->getServiceAssignedToAccessibilityButtonLocked()Landroid/content/ComponentName;
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getShortcutTargetsLocked(I)Landroid/util/ArraySet;
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getUserInteractiveUiTimeoutLocked()I
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getUserNonInteractiveUiTimeoutLocked()I
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isAutoclickEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isDisplayMagnificationEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isFilterKeyEventsEnabledLocked()Z
 HSPLcom/android/server/accessibility/AccessibilityUserState;->isHandlingAccessibilityEventsLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isNavBarMagnificationEnabledLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isPerformGesturesEnabledLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isShortcutKeyMagnificationEnabledLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isShortcutTargetInstalledLocked(Ljava/lang/String;)Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isTextHighContrastEnabledLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isTouchExplorationEnabledLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->onSwitchToAnotherUserLocked()V
-PLcom/android/server/accessibility/AccessibilityUserState;->setFilterKeyEventsEnabledLocked(Z)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setInteractiveUiTimeoutLocked(I)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setLastSentClientStateLocked(I)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setNonInteractiveUiTimeoutLocked(I)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setPerformGesturesEnabledLocked(Z)V
-PLcom/android/server/accessibility/AccessibilityUserState;->unbindAllServicesLocked()V
-PLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;-><init>(Lcom/android/server/accessibility/AccessibilityWindowManager;ILandroid/view/accessibility/IAccessibilityInteractionConnection;Ljava/lang/String;II)V
-PLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;->linkToDeath()V
+PLcom/android/server/accessibility/AccessibilityUserState;->isMultiFingerGesturesEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isNavBarMagnificationEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isPerformGesturesEnabledLocked()Z
+PLcom/android/server/accessibility/AccessibilityUserState;->isServiceHandlesDoubleTapEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isShortcutKeyMagnificationEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isShortcutMagnificationEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isShortcutTargetInstalledLocked(Ljava/lang/String;)Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isTextHighContrastEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isTouchExplorationEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->onSwitchToAnotherUserLocked()V
+PLcom/android/server/accessibility/AccessibilityUserState;->removeServiceLocked(Lcom/android/server/accessibility/AccessibilityServiceConnection;)V
+PLcom/android/server/accessibility/AccessibilityUserState;->serviceDisconnectedLocked(Lcom/android/server/accessibility/AccessibilityServiceConnection;)V
+PLcom/android/server/accessibility/AccessibilityUserState;->setDisplayMagnificationEnabledLocked(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setFilterKeyEventsEnabledLocked(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setInteractiveUiTimeoutLocked(I)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setLastSentClientStateLocked(I)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setMultiFingerGesturesLocked(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setNonInteractiveUiTimeoutLocked(I)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setPerformGesturesEnabledLocked(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setServiceHandlesDoubleTapLocked(Z)V
+PLcom/android/server/accessibility/AccessibilityUserState;->setTouchExplorationEnabledLocked(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->unbindAllServicesLocked()V
+PLcom/android/server/accessibility/AccessibilityUserState;->updateCrashedServicesIfNeededLocked()V
+PLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;-><init>(Lcom/android/server/accessibility/AccessibilityWindowManager;I)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->access$1300(Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;)I
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->cacheWindows(Ljava/util/List;)V
+PLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->clearWindowsLocked()V
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->computePartialInteractiveRegionForWindowLocked(ILandroid/graphics/Region;)Z
+PLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->dumpLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->findA11yWindowInfoByIdLocked(I)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->findWindowInfoByIdLocked(I)Landroid/view/WindowInfo;
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->getTypeForWindowManagerWindowType(I)I
+PLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->getWatchOutsideTouchWindowIdLocked(I)Ljava/util/List;
+PLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->getWindowListLocked()Ljava/util/List;
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->isTrackingWindowsLocked()Z
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->onWindowsForAccessibilityChanged(ZILandroid/os/IBinder;Ljava/util/List;)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->populateReportedWindowLocked(ILandroid/view/WindowInfo;)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->sendEventsForChangedWindowsLocked(Ljava/util/List;Landroid/util/SparseArray;)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->setAccessibilityFocusedWindowLocked(I)V
+PLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->setActiveWindowLocked(I)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->shouldUpdateWindowsLocked(ZLjava/util/List;)Z
+PLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->startTrackingWindowsLocked()Z
+PLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->stopTrackingWindowsLocked()V
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->updateWindowsLocked(ILjava/util/List;)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->windowChangedNoLayer(Landroid/view/WindowInfo;Landroid/view/WindowInfo;)Z
+HPLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;-><init>(Lcom/android/server/accessibility/AccessibilityWindowManager;ILandroid/view/accessibility/IAccessibilityInteractionConnection;Ljava/lang/String;II)V
+PLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;->binderDied()V
+PLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;->getPackageName()Ljava/lang/String;
+PLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;->getRemote()Landroid/view/accessibility/IAccessibilityInteractionConnection;
+PLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;->getUid()I
+HPLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;->linkToDeath()V
 PLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;->unlinkToDeath()V
 HSPLcom/android/server/accessibility/AccessibilityWindowManager;-><init>(Ljava/lang/Object;Landroid/os/Handler;Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/accessibility/AccessibilityWindowManager$AccessibilityEventSender;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy$AccessibilityUserManager;)V
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$000(Lcom/android/server/accessibility/AccessibilityWindowManager;)Lcom/android/server/wm/WindowManagerInternal;
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$100(Lcom/android/server/accessibility/AccessibilityWindowManager;)Lcom/android/server/accessibility/AccessibilityWindowManager$AccessibilityEventSender;
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$1000(Lcom/android/server/accessibility/AccessibilityWindowManager;)I
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$1100(Lcom/android/server/accessibility/AccessibilityWindowManager;I)V
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$1200(Lcom/android/server/accessibility/AccessibilityWindowManager;II)V
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$200(Lcom/android/server/accessibility/AccessibilityWindowManager;)I
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$202(Lcom/android/server/accessibility/AccessibilityWindowManager;I)I
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$300(Lcom/android/server/accessibility/AccessibilityWindowManager;)Ljava/lang/Object;
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$400(Lcom/android/server/accessibility/AccessibilityWindowManager;)I
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$402(Lcom/android/server/accessibility/AccessibilityWindowManager;I)I
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$500(Lcom/android/server/accessibility/AccessibilityWindowManager;)Landroid/os/IBinder;
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$502(Lcom/android/server/accessibility/AccessibilityWindowManager;Landroid/os/IBinder;)Landroid/os/IBinder;
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$600(Lcom/android/server/accessibility/AccessibilityWindowManager;)Lcom/android/server/accessibility/AccessibilitySecurityPolicy$AccessibilityUserManager;
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$700(Lcom/android/server/accessibility/AccessibilityWindowManager;)I
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$702(Lcom/android/server/accessibility/AccessibilityWindowManager;I)I
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$802(Lcom/android/server/accessibility/AccessibilityWindowManager;I)I
+PLcom/android/server/accessibility/AccessibilityWindowManager;->access$900(Lcom/android/server/accessibility/AccessibilityWindowManager;)Z
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->addAccessibilityInteractionConnection(Landroid/view/IWindow;Landroid/view/accessibility/IAccessibilityInteractionConnection;Ljava/lang/String;I)I
+PLcom/android/server/accessibility/AccessibilityWindowManager;->clearAccessibilityFocusLocked(I)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->clearAccessibilityFocusMainThread(II)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->computePartialInteractiveRegionForWindowLocked(ILandroid/graphics/Region;)Z
+PLcom/android/server/accessibility/AccessibilityWindowManager;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->findA11yWindowInfoByIdLocked(I)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->findFocusedWindowId(I)I
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->findWindowIdLocked(ILandroid/os/IBinder;)I
+PLcom/android/server/accessibility/AccessibilityWindowManager;->findWindowInfoByIdLocked(I)Landroid/view/WindowInfo;
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->getActiveWindowId(I)I
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->getConnectionLocked(II)Lcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->getDisplayIdByUserIdAndWindowIdLocked(II)I
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->getDisplayListLocked()Ljava/util/ArrayList;
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->getDisplayWindowObserverByWindowIdLocked(I)Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;
+PLcom/android/server/accessibility/AccessibilityWindowManager;->getFocusedWindowId(I)I
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->getInteractionConnectionsForUserLocked(I)Landroid/util/SparseArray;
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->getPictureInPictureActionReplacingConnection()Lcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->getWindowListLocked(I)Ljava/util/List;
+PLcom/android/server/accessibility/AccessibilityWindowManager;->getWindowOwnerUserId(Landroid/os/IBinder;)I
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->getWindowTokenForUserAndWindowIdLocked(II)Landroid/os/IBinder;
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->getWindowTokensForUserLocked(I)Landroid/util/SparseArray;
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->isTrackingWindowsLocked()Z
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->isTrackingWindowsLocked(I)Z
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->isValidUserForInteractionConnectionsLocked(I)Z
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->isValidUserForWindowTokensLocked(I)Z
+PLcom/android/server/accessibility/AccessibilityWindowManager;->lambda$Ky3Q5Gg_NEaXwBlFb7wxyjIUci0(Lcom/android/server/accessibility/AccessibilityWindowManager;II)V
+PLcom/android/server/accessibility/AccessibilityWindowManager;->notifyOutsideTouch(II)V
+PLcom/android/server/accessibility/AccessibilityWindowManager;->onAccessibilityInteractionConnectionRemovedLocked(ILandroid/os/IBinder;)V
+PLcom/android/server/accessibility/AccessibilityWindowManager;->onTouchInteractionEnd()V
+PLcom/android/server/accessibility/AccessibilityWindowManager;->onTouchInteractionStart()V
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->removeAccessibilityInteractionConnection(Landroid/view/IWindow;)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->removeAccessibilityInteractionConnectionInternalLocked(Landroid/os/IBinder;Landroid/util/SparseArray;Landroid/util/SparseArray;)I
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->removeAccessibilityInteractionConnectionLocked(II)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->setAccessibilityFocusedWindowLocked(I)V
+PLcom/android/server/accessibility/AccessibilityWindowManager;->setActiveWindowLocked(I)V
 PLcom/android/server/accessibility/AccessibilityWindowManager;->setPictureInPictureActionReplacingConnection(Landroid/view/accessibility/IAccessibilityInteractionConnection;)V
-PLcom/android/server/accessibility/AccessibilityWindowManager;->stopTrackingWindows(I)V
+PLcom/android/server/accessibility/AccessibilityWindowManager;->startTrackingWindows(I)V
+HSPLcom/android/server/accessibility/AccessibilityWindowManager;->stopTrackingWindows(I)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->updateActiveAndAccessibilityFocusedWindowLocked(IIJII)V
+PLcom/android/server/accessibility/ActionReplacingCallback;-><init>(Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;Landroid/view/accessibility/IAccessibilityInteractionConnection;IIJ)V
+PLcom/android/server/accessibility/ActionReplacingCallback;->recycleReplaceActionNodesLocked()V
+PLcom/android/server/accessibility/ActionReplacingCallback;->replaceActionsOnInfoLocked(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+PLcom/android/server/accessibility/ActionReplacingCallback;->replaceInfosActionsAndCallService()V
+PLcom/android/server/accessibility/ActionReplacingCallback;->setFindAccessibilityNodeInfosResult(Ljava/util/List;I)V
+PLcom/android/server/accessibility/BaseEventStreamTransformation;-><init>()V
+HPLcom/android/server/accessibility/BaseEventStreamTransformation;->getNext()Lcom/android/server/accessibility/EventStreamTransformation;
+PLcom/android/server/accessibility/BaseEventStreamTransformation;->setNext(Lcom/android/server/accessibility/EventStreamTransformation;)V
+PLcom/android/server/accessibility/EventStreamTransformation;->clearEvents(I)V
+HPLcom/android/server/accessibility/EventStreamTransformation;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+PLcom/android/server/accessibility/EventStreamTransformation;->onDestroy()V
+PLcom/android/server/accessibility/EventStreamTransformation;->onKeyEvent(Landroid/view/KeyEvent;I)V
+HPLcom/android/server/accessibility/EventStreamTransformation;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DelegatingState;-><init>(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler;)V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DelegatingState;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;-><init>(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler;Landroid/content/Context;)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->afterMultiTapTimeoutTransitionToDelegatingState()V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->cacheDelayedMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->clear()V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->clearDelayedMotionEvents()V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->handleMessage(Landroid/os/Message;)Z
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->isFingerDown()Z
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->isMultiTapTriggered(I)Z
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->isTapOutOfDistanceSlop()Z
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->removePendingDelayedMessages()V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->sendDelayedMotionEvents()V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->setShortcutTriggered(Z)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->tapCount()I
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->timeBetween(Landroid/view/MotionEvent;Landroid/view/MotionEvent;)J
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->timeOf(Landroid/view/MotionEvent;)J
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$DetectingState;->transitionToDelegatingStateAndClear()V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;-><clinit>()V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;-><init>()V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;->access$600(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;)Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;->access$602(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;)Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;->clear()V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;->countOf(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;I)I
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;->initialize(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;->obtain(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;->obtainInternal()Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$MotionEventInfo;->recycle()V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$PanningScalingState;-><init>(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler;Landroid/content/Context;)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$PanningScalingState;->access$000(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$PanningScalingState;)Landroid/view/GestureDetector;
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$PanningScalingState;->access$100(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$PanningScalingState;)Landroid/view/ScaleGestureDetector;
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$PanningScalingState;->clear()V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$PanningScalingState;->onScaleBegin(Landroid/view/ScaleGestureDetector;)Z
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$PanningScalingState;->onScroll(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$ScreenStateReceiver;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler;)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$ScreenStateReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$ScreenStateReceiver;->register()V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$ScreenStateReceiver;->unregister()V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$ViewportDraggingState;-><init>(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler;)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler$ViewportDraggingState;->clear()V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/MagnificationController;ZZI)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->access$200(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler;Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$State;)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->access$300(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler;)I
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->access$500(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler;Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->access$700(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler;Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$State;Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->access$900(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->clearAndTransitionToStateDetecting()V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->clearEvents(I)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->dispatchTransformedEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->handleEventWith(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$State;Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->onDestroy()V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->onMotionEventInternal(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->recycleAndNullify(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;
+PLcom/android/server/accessibility/FullScreenMagnificationGestureHandler;->transitionTo(Lcom/android/server/accessibility/FullScreenMagnificationGestureHandler$State;)V
+PLcom/android/server/accessibility/KeyEventDispatcher$PendingKeyEvent;-><init>()V
+PLcom/android/server/accessibility/KeyEventDispatcher$PendingKeyEvent;-><init>(Lcom/android/server/accessibility/KeyEventDispatcher$1;)V
+PLcom/android/server/accessibility/KeyEventDispatcher;-><init>(Landroid/os/Handler;ILjava/lang/Object;Landroid/os/PowerManager;)V
+PLcom/android/server/accessibility/KeyEventDispatcher;->flush(Lcom/android/server/accessibility/KeyEventDispatcher$KeyEventFilter;)V
+PLcom/android/server/accessibility/KeyEventDispatcher;->notifyKeyEventLocked(Landroid/view/KeyEvent;ILjava/util/List;)Z
+PLcom/android/server/accessibility/KeyEventDispatcher;->obtainPendingEventLocked(Landroid/view/KeyEvent;I)Lcom/android/server/accessibility/KeyEventDispatcher$PendingKeyEvent;
+PLcom/android/server/accessibility/KeyEventDispatcher;->removeEventFromListLocked(Ljava/util/List;I)Lcom/android/server/accessibility/KeyEventDispatcher$PendingKeyEvent;
+PLcom/android/server/accessibility/KeyEventDispatcher;->removeReferenceToPendingEventLocked(Lcom/android/server/accessibility/KeyEventDispatcher$PendingKeyEvent;)Z
+PLcom/android/server/accessibility/KeyEventDispatcher;->setOnKeyEventResult(Lcom/android/server/accessibility/KeyEventDispatcher$KeyEventFilter;ZI)V
+PLcom/android/server/accessibility/KeyboardInterceptor$KeyEventHolder;-><clinit>()V
+PLcom/android/server/accessibility/KeyboardInterceptor$KeyEventHolder;-><init>()V
+PLcom/android/server/accessibility/KeyboardInterceptor$KeyEventHolder;->obtain(Landroid/view/KeyEvent;IJ)Lcom/android/server/accessibility/KeyboardInterceptor$KeyEventHolder;
+PLcom/android/server/accessibility/KeyboardInterceptor$KeyEventHolder;->recycle()V
+PLcom/android/server/accessibility/KeyboardInterceptor;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/policy/WindowManagerPolicy;)V
+PLcom/android/server/accessibility/KeyboardInterceptor;->addEventToQueue(Landroid/view/KeyEvent;IJ)V
+PLcom/android/server/accessibility/KeyboardInterceptor;->getEventDelay(Landroid/view/KeyEvent;I)J
+PLcom/android/server/accessibility/KeyboardInterceptor;->handleMessage(Landroid/os/Message;)Z
+PLcom/android/server/accessibility/KeyboardInterceptor;->onKeyEvent(Landroid/view/KeyEvent;I)V
+PLcom/android/server/accessibility/KeyboardInterceptor;->processQueuedEvents()V
+PLcom/android/server/accessibility/KeyboardInterceptor;->scheduleProcessQueuedEvents()V
+PLcom/android/server/accessibility/MagnificationController$ControllerContext;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/wm/WindowManagerInternal;Landroid/os/Handler;J)V
+PLcom/android/server/accessibility/MagnificationController$ControllerContext;->getAms()Lcom/android/server/accessibility/AccessibilityManagerService;
+PLcom/android/server/accessibility/MagnificationController$ControllerContext;->getAnimationDuration()J
+PLcom/android/server/accessibility/MagnificationController$ControllerContext;->getContext()Landroid/content/Context;
+PLcom/android/server/accessibility/MagnificationController$ControllerContext;->getHandler()Landroid/os/Handler;
+PLcom/android/server/accessibility/MagnificationController$ControllerContext;->getWindowManager()Lcom/android/server/wm/WindowManagerInternal;
+PLcom/android/server/accessibility/MagnificationController$ControllerContext;->newValueAnimator()Landroid/animation/ValueAnimator;
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;-><init>(Lcom/android/server/accessibility/MagnificationController;I)V
+HPLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->getCenterX()F
+HPLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->getCenterY()F
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->getMagnificationRegion(Landroid/graphics/Region;)V
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->getMaxOffsetXLocked()F
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->getMaxOffsetYLocked()F
+HPLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->getMinOffsetXLocked()F
+HPLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->getMinOffsetYLocked()F
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->getOffsetX()F
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->getOffsetY()F
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->getScale()F
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->isMagnifying()Z
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->isRegistered()Z
+HPLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->magnificationRegionContains(FF)Z
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->onMagnificationChangedLocked()V
+HPLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->onMagnificationRegionChanged(Landroid/graphics/Region;)V
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->onRotationChanged(I)V
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->register()Z
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->sendSpecToAnimation(Landroid/view/MagnificationSpec;Z)V
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->setScaleAndCenter(FFFZI)Z
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->unregister(Z)V
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->updateCurrentSpecWithOffsetsLocked(FF)Z
+HPLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->updateMagnificationRegion(Landroid/graphics/Region;)V
+PLcom/android/server/accessibility/MagnificationController$DisplayMagnification;->updateMagnificationSpecLocked(FFF)Z
+PLcom/android/server/accessibility/MagnificationController$ScreenStateObserver;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/MagnificationController;)V
+PLcom/android/server/accessibility/MagnificationController$ScreenStateObserver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/accessibility/MagnificationController$ScreenStateObserver;->registerIfNecessary()V
+PLcom/android/server/accessibility/MagnificationController$ScreenStateObserver;->unregister()V
+PLcom/android/server/accessibility/MagnificationController$SpecAnimationBridge;-><init>(Lcom/android/server/accessibility/MagnificationController$ControllerContext;Ljava/lang/Object;I)V
+PLcom/android/server/accessibility/MagnificationController$SpecAnimationBridge;-><init>(Lcom/android/server/accessibility/MagnificationController$ControllerContext;Ljava/lang/Object;ILcom/android/server/accessibility/MagnificationController$1;)V
+PLcom/android/server/accessibility/MagnificationController$SpecAnimationBridge;->setEnabled(Z)V
+PLcom/android/server/accessibility/MagnificationController$SpecAnimationBridge;->updateSentSpecMainThread(Landroid/view/MagnificationSpec;Z)V
+PLcom/android/server/accessibility/MagnificationController;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService;Ljava/lang/Object;)V
+PLcom/android/server/accessibility/MagnificationController;-><init>(Lcom/android/server/accessibility/MagnificationController$ControllerContext;Ljava/lang/Object;)V
+PLcom/android/server/accessibility/MagnificationController;->access$000(Lcom/android/server/accessibility/MagnificationController;)Lcom/android/server/accessibility/MagnificationController$ControllerContext;
+PLcom/android/server/accessibility/MagnificationController;->access$100(Lcom/android/server/accessibility/MagnificationController;)Ljava/lang/Object;
+PLcom/android/server/accessibility/MagnificationController;->access$300(Lcom/android/server/accessibility/MagnificationController;IZ)V
+PLcom/android/server/accessibility/MagnificationController;->access$500(Lcom/android/server/accessibility/MagnificationController;)J
+PLcom/android/server/accessibility/MagnificationController;->access$600(Lcom/android/server/accessibility/MagnificationController;)V
+PLcom/android/server/accessibility/MagnificationController;->getMagnificationRegion(ILandroid/graphics/Region;)V
+PLcom/android/server/accessibility/MagnificationController;->getScale(I)F
+HPLcom/android/server/accessibility/MagnificationController;->isMagnifying(I)Z
+PLcom/android/server/accessibility/MagnificationController;->isRegistered(I)Z
+PLcom/android/server/accessibility/MagnificationController;->lambda$UxSkaR2uzdX0ekJv4Wtodc8tuMY(Lcom/android/server/accessibility/MagnificationController;Z)V
+HPLcom/android/server/accessibility/MagnificationController;->magnificationRegionContains(IFF)Z
+PLcom/android/server/accessibility/MagnificationController;->onScreenTurnedOff()V
+PLcom/android/server/accessibility/MagnificationController;->register(I)V
+PLcom/android/server/accessibility/MagnificationController;->resetAllIfNeeded(I)V
+PLcom/android/server/accessibility/MagnificationController;->resetAllIfNeeded(Z)V
+PLcom/android/server/accessibility/MagnificationController;->resetIfNeeded(II)Z
+PLcom/android/server/accessibility/MagnificationController;->resetIfNeeded(IZ)Z
+PLcom/android/server/accessibility/MagnificationController;->setScaleAndCenter(IFFFZI)Z
+PLcom/android/server/accessibility/MagnificationController;->setUserId(I)V
+PLcom/android/server/accessibility/MagnificationController;->unregister(I)V
+PLcom/android/server/accessibility/MagnificationController;->unregisterCallbackLocked(IZ)V
+PLcom/android/server/accessibility/MagnificationController;->unregisterLocked(IZ)V
 HSPLcom/android/server/accessibility/SystemActionPerformer;-><init>(Landroid/content/Context;Lcom/android/server/wm/WindowManagerInternal;)V
 HSPLcom/android/server/accessibility/SystemActionPerformer;-><init>(Landroid/content/Context;Lcom/android/server/wm/WindowManagerInternal;Ljava/util/function/Supplier;Lcom/android/server/accessibility/SystemActionPerformer$SystemActionsChangedListener;)V
+PLcom/android/server/accessibility/SystemActionPerformer;->registerSystemAction(ILandroid/app/RemoteAction;)V
 HSPLcom/android/server/accessibility/UiAutomationManager$1;-><init>(Lcom/android/server/accessibility/UiAutomationManager;)V
+PLcom/android/server/accessibility/UiAutomationManager$UiAutomationService;-><init>(Lcom/android/server/accessibility/UiAutomationManager;Landroid/content/Context;Landroid/accessibilityservice/AccessibilityServiceInfo;ILandroid/os/Handler;Ljava/lang/Object;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$SystemSupport;Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/accessibility/SystemActionPerformer;Lcom/android/server/accessibility/AccessibilityWindowManager;)V
+PLcom/android/server/accessibility/UiAutomationManager$UiAutomationService;->connectServiceUnknownThread()V
+PLcom/android/server/accessibility/UiAutomationManager$UiAutomationService;->hasRightsToCurrentUserLocked()Z
+PLcom/android/server/accessibility/UiAutomationManager$UiAutomationService;->lambda$connectServiceUnknownThread$0$UiAutomationManager$UiAutomationService()V
+PLcom/android/server/accessibility/UiAutomationManager$UiAutomationService;->supportsFlagForNotImportantViews(Landroid/accessibilityservice/AccessibilityServiceInfo;)Z
 HSPLcom/android/server/accessibility/UiAutomationManager;-><clinit>()V
 HSPLcom/android/server/accessibility/UiAutomationManager;-><init>(Ljava/lang/Object;)V
-PLcom/android/server/accessibility/UiAutomationManager;->canRetrieveInteractiveWindowsLocked()Z
+PLcom/android/server/accessibility/UiAutomationManager;->access$200()Landroid/content/ComponentName;
+HSPLcom/android/server/accessibility/UiAutomationManager;->canRetrieveInteractiveWindowsLocked()Z
+PLcom/android/server/accessibility/UiAutomationManager;->destroyUiAutomationService()V
+PLcom/android/server/accessibility/UiAutomationManager;->getRelevantEventTypes()I
 HSPLcom/android/server/accessibility/UiAutomationManager;->getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;
-PLcom/android/server/accessibility/UiAutomationManager;->isTouchExplorationEnabledLocked()Z
+HSPLcom/android/server/accessibility/UiAutomationManager;->isTouchExplorationEnabledLocked()Z
 HSPLcom/android/server/accessibility/UiAutomationManager;->isUiAutomationRunningLocked()Z
+PLcom/android/server/accessibility/UiAutomationManager;->registerUiTestAutomationServiceLocked(Landroid/os/IBinder;Landroid/accessibilityservice/IAccessibilityServiceClient;Landroid/content/Context;Landroid/accessibilityservice/AccessibilityServiceInfo;ILandroid/os/Handler;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$SystemSupport;Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/accessibility/SystemActionPerformer;Lcom/android/server/accessibility/AccessibilityWindowManager;I)V
+PLcom/android/server/accessibility/UiAutomationManager;->sendAccessibilityEventLocked(Landroid/view/accessibility/AccessibilityEvent;)V
 HSPLcom/android/server/accessibility/UiAutomationManager;->suppressingAccessibilityServicesLocked()Z
+PLcom/android/server/accessibility/UiAutomationManager;->unregisterUiTestAutomationServiceLocked(Landroid/accessibilityservice/IAccessibilityServiceClient;)V
+PLcom/android/server/accessibility/gestures/EventDispatcher;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/EventStreamTransformation;Lcom/android/server/accessibility/gestures/TouchState;)V
+PLcom/android/server/accessibility/gestures/EventDispatcher;->getLastInjectedDownEventTime()J
+PLcom/android/server/accessibility/gestures/EventDispatcher;->getLastInjectedHoverEvent()Landroid/view/MotionEvent;
+PLcom/android/server/accessibility/gestures/EventDispatcher;->sendAccessibilityEvent(I)V
+HPLcom/android/server/accessibility/gestures/EventDispatcher;->sendMotionEvent(Landroid/view/MotionEvent;ILandroid/view/MotionEvent;II)V
+PLcom/android/server/accessibility/gestures/EventDispatcher;->setReceiver(Lcom/android/server/accessibility/EventStreamTransformation;)V
+HPLcom/android/server/accessibility/gestures/EventDispatcher;->updateState(Landroid/view/MotionEvent;)V
+PLcom/android/server/accessibility/gestures/GestureManifold;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/gestures/GestureManifold$Listener;Lcom/android/server/accessibility/gestures/TouchState;)V
+HPLcom/android/server/accessibility/gestures/GestureManifold;->clear()V
+PLcom/android/server/accessibility/gestures/GestureManifold;->onGestureCompleted(I)V
+HPLcom/android/server/accessibility/gestures/GestureManifold;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)Z
+HPLcom/android/server/accessibility/gestures/GestureManifold;->onStateChanged(IILandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/GestureMatcher$DelayedTransition;-><init>(Lcom/android/server/accessibility/gestures/GestureMatcher;)V
+HPLcom/android/server/accessibility/gestures/GestureMatcher$DelayedTransition;->cancel()V
+HPLcom/android/server/accessibility/gestures/GestureMatcher$DelayedTransition;->post(IJLandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/GestureMatcher$DelayedTransition;->run()V
+PLcom/android/server/accessibility/gestures/GestureMatcher;-><init>(ILandroid/os/Handler;Lcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
+HPLcom/android/server/accessibility/gestures/GestureMatcher;->access$000(Lcom/android/server/accessibility/gestures/GestureMatcher;)Landroid/os/Handler;
+PLcom/android/server/accessibility/gestures/GestureMatcher;->access$100(Lcom/android/server/accessibility/gestures/GestureMatcher;ILandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/GestureMatcher;->cancelAfter(JLandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/GestureMatcher;->cancelAfterDoubleTapTimeout(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/GestureMatcher;->cancelAfterTapTimeout(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/GestureMatcher;->cancelGesture(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/GestureMatcher;->cancelPendingTransitions()V
+HPLcom/android/server/accessibility/gestures/GestureMatcher;->clear()V
+PLcom/android/server/accessibility/gestures/GestureMatcher;->completeAfter(JLandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/GestureMatcher;->completeAfterLongPressTimeout(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/GestureMatcher;->completeGesture(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/GestureMatcher;->getState()I
+PLcom/android/server/accessibility/gestures/GestureMatcher;->onDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/GestureMatcher;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)I
+PLcom/android/server/accessibility/gestures/GestureMatcher;->onUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/GestureMatcher;->setState(ILandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/GestureMatcher;->startGesture(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/GestureUtils;->distance(Landroid/view/MotionEvent;Landroid/view/MotionEvent;)D
+PLcom/android/server/accessibility/gestures/GestureUtils;->isTimedOut(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)Z
+PLcom/android/server/accessibility/gestures/MultiTap;-><init>(Landroid/content/Context;IILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
+PLcom/android/server/accessibility/gestures/MultiTap;->clear()V
+HPLcom/android/server/accessibility/gestures/MultiTap;->isInsideSlop(Landroid/view/MotionEvent;I)Z
+HPLcom/android/server/accessibility/gestures/MultiTap;->onDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/MultiTap;->onMove(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/MultiTap;->onUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/MultiTapAndHold;-><init>(Landroid/content/Context;IILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
+PLcom/android/server/accessibility/gestures/MultiTapAndHold;->onDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/MultiTapAndHold;->onUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/SecondFingerMultiTap;-><init>(Landroid/content/Context;IILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
+PLcom/android/server/accessibility/gestures/SecondFingerMultiTap;->clear()V
+PLcom/android/server/accessibility/gestures/SecondFingerMultiTap;->onMove(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/Swipe;-><init>(Landroid/content/Context;IIILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
+PLcom/android/server/accessibility/gestures/Swipe;-><init>(Landroid/content/Context;IILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
+PLcom/android/server/accessibility/gestures/Swipe;-><init>(Landroid/content/Context;[IILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
+HPLcom/android/server/accessibility/gestures/Swipe;->cancelAfterDelay(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/Swipe;->clear()V
+HPLcom/android/server/accessibility/gestures/Swipe;->onDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/Swipe;->onMove(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/Swipe;->onUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/Swipe;->recognizeGesture(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/Swipe;->recognizeGesturePath(Landroid/view/MotionEvent;Landroid/view/MotionEvent;ILjava/util/ArrayList;)V
+PLcom/android/server/accessibility/gestures/Swipe;->toDirection(FF)I
+PLcom/android/server/accessibility/gestures/TouchExplorer$ExitGestureDetectionModeDelayed;-><init>(Lcom/android/server/accessibility/gestures/TouchExplorer;)V
+PLcom/android/server/accessibility/gestures/TouchExplorer$ExitGestureDetectionModeDelayed;-><init>(Lcom/android/server/accessibility/gestures/TouchExplorer;Lcom/android/server/accessibility/gestures/TouchExplorer$1;)V
+PLcom/android/server/accessibility/gestures/TouchExplorer$ExitGestureDetectionModeDelayed;->cancel()V
+PLcom/android/server/accessibility/gestures/TouchExplorer$ExitGestureDetectionModeDelayed;->post()V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;-><init>(Lcom/android/server/accessibility/gestures/TouchExplorer;II)V
+HPLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;->cancel()V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;->forceSendAndRemove()V
+HPLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;->isPending()Z
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;->post()V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;->run()V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;-><init>(Lcom/android/server/accessibility/gestures/TouchExplorer;)V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->access$100(Lcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;)Z
+HPLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->addEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;)V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->cancel()V
+HPLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->clear()V
+HPLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->isPending()Z
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->post(Landroid/view/MotionEvent;Landroid/view/MotionEvent;II)V
+HPLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->run()V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;-><init>(Lcom/android/server/accessibility/gestures/TouchExplorer;)V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;->cancel()V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;->clear()V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;->isPending()Z
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;->post(Landroid/view/MotionEvent;Landroid/view/MotionEvent;II)V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;->run()V
+PLcom/android/server/accessibility/gestures/TouchExplorer;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService;)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/gestures/GestureManifold;)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->access$200(Lcom/android/server/accessibility/gestures/TouchExplorer;)Landroid/os/Handler;
+PLcom/android/server/accessibility/gestures/TouchExplorer;->access$300(Lcom/android/server/accessibility/gestures/TouchExplorer;)Lcom/android/server/accessibility/gestures/EventDispatcher;
+PLcom/android/server/accessibility/gestures/TouchExplorer;->access$500(Lcom/android/server/accessibility/gestures/TouchExplorer;)I
+PLcom/android/server/accessibility/gestures/TouchExplorer;->access$600(Lcom/android/server/accessibility/gestures/TouchExplorer;)Lcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;
+PLcom/android/server/accessibility/gestures/TouchExplorer;->access$700(Lcom/android/server/accessibility/gestures/TouchExplorer;)Lcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;
+PLcom/android/server/accessibility/gestures/TouchExplorer;->clear()V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->clearEvents(I)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->endGestureDetection(Z)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->handleActionDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/TouchExplorer;->handleActionMoveStateTouchExploring(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->handleActionMoveStateTouchInteracting(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->handleActionUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->handleMotionEventStateClear(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->handleMotionEventStateTouchExploring(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/TouchExplorer;->handleMotionEventStateTouchInteracting(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/TouchExplorer;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->onDestroy()V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->onDoubleTap()Z
+PLcom/android/server/accessibility/gestures/TouchExplorer;->onGestureCancelled(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)Z
+PLcom/android/server/accessibility/gestures/TouchExplorer;->onGestureCompleted(Landroid/accessibilityservice/AccessibilityGestureEvent;)Z
+PLcom/android/server/accessibility/gestures/TouchExplorer;->onGestureStarted()Z
+HPLcom/android/server/accessibility/gestures/TouchExplorer;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->sendHoverExitAndTouchExplorationGestureEndIfNeeded(I)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->sendTouchExplorationGestureStartAndHoverEnterIfNeeded(I)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->setNext(Lcom/android/server/accessibility/EventStreamTransformation;)V
+HPLcom/android/server/accessibility/gestures/TouchState$PointerDownInfo;-><init>(Lcom/android/server/accessibility/gestures/TouchState;)V
+PLcom/android/server/accessibility/gestures/TouchState$PointerDownInfo;->clear()V
+PLcom/android/server/accessibility/gestures/TouchState$PointerDownInfo;->set(FFJ)V
+PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;-><init>(Lcom/android/server/accessibility/gestures/TouchState;)V
+HPLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->clear()V
+PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->getPrimaryPointerId()I
+PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->handleReceivedPointerDown(ILandroid/view/MotionEvent;)V
+PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->handleReceivedPointerUp(ILandroid/view/MotionEvent;)V
+HPLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->onMotionEvent(Landroid/view/MotionEvent;)V
+PLcom/android/server/accessibility/gestures/TouchState;-><init>()V
+PLcom/android/server/accessibility/gestures/TouchState;->clear()V
+PLcom/android/server/accessibility/gestures/TouchState;->getLastReceivedEvent()Landroid/view/MotionEvent;
+PLcom/android/server/accessibility/gestures/TouchState;->getReceivedPointerTracker()Lcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;
+PLcom/android/server/accessibility/gestures/TouchState;->isClear()Z
+PLcom/android/server/accessibility/gestures/TouchState;->isDelegating()Z
+PLcom/android/server/accessibility/gestures/TouchState;->isDragging()Z
+PLcom/android/server/accessibility/gestures/TouchState;->isGestureDetecting()Z
+PLcom/android/server/accessibility/gestures/TouchState;->isTouchExploring()Z
+PLcom/android/server/accessibility/gestures/TouchState;->isTouchInteracting()Z
+PLcom/android/server/accessibility/gestures/TouchState;->onInjectedAccessibilityEvent(I)V
+HPLcom/android/server/accessibility/gestures/TouchState;->onReceivedMotionEvent(Landroid/view/MotionEvent;)V
+PLcom/android/server/accessibility/gestures/TouchState;->setState(I)V
+PLcom/android/server/accessibility/gestures/TouchState;->startGestureDetecting()V
+PLcom/android/server/accessibility/gestures/TouchState;->startTouchExploring()V
+PLcom/android/server/accessibility/gestures/TouchState;->startTouchInteracting()V
+PLcom/android/server/accessibility/magnification/MagnificationGestureHandler;-><init>()V
 HSPLcom/android/server/accounts/-$$Lambda$AccountManagerService$c6GExIY3Vh2fORdBziuAPJbExac;-><init>(Lcom/android/server/accounts/AccountManagerService;)V
-PLcom/android/server/accounts/-$$Lambda$AccountManagerService$c6GExIY3Vh2fORdBziuAPJbExac;->onPermissionsChanged(I)V
+HSPLcom/android/server/accounts/-$$Lambda$AccountManagerService$c6GExIY3Vh2fORdBziuAPJbExac;->onPermissionsChanged(I)V
+PLcom/android/server/accounts/-$$Lambda$AccountManagerService$lqbNdAUKUSipmpqby9oIO8JlNTQ;-><init>(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/Account;I)V
+PLcom/android/server/accounts/-$$Lambda$AccountManagerService$lqbNdAUKUSipmpqby9oIO8JlNTQ;->run()V
+PLcom/android/server/accounts/-$$Lambda$AccountManagerService$nCdu9dc3c8qBwJIwS0ZQk2waXfY;-><init>(Landroid/accounts/AccountManagerInternal$OnAppPermissionChangeListener;Landroid/accounts/Account;I)V
+PLcom/android/server/accounts/-$$Lambda$AccountManagerService$nCdu9dc3c8qBwJIwS0ZQk2waXfY;->run()V
 PLcom/android/server/accounts/-$$Lambda$AccountManagerService$ncg6hlXg7I0Ee1EZqbXw8fQH9bY;-><init>(Lcom/android/server/accounts/AccountManagerService;I)V
 PLcom/android/server/accounts/-$$Lambda$AccountManagerService$ncg6hlXg7I0Ee1EZqbXw8fQH9bY;->run()V
 HSPLcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;-><init>()V
 HSPLcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;-><init>(Lcom/android/server/accounts/AccountAuthenticatorCache$1;)V
 HSPLcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/accounts/AuthenticatorDescription;
 HSPLcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Ljava/lang/Object;
+HPLcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;->writeAsXml(Landroid/accounts/AuthenticatorDescription;Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;->writeAsXml(Ljava/lang/Object;Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/accounts/AccountAuthenticatorCache;-><clinit>()V
 HSPLcom/android/server/accounts/AccountAuthenticatorCache;-><init>(Landroid/content/Context;)V
-PLcom/android/server/accounts/AccountAuthenticatorCache;->getServiceInfo(Landroid/accounts/AuthenticatorDescription;I)Landroid/content/pm/RegisteredServicesCache$ServiceInfo;
+HPLcom/android/server/accounts/AccountAuthenticatorCache;->getServiceInfo(Landroid/accounts/AuthenticatorDescription;I)Landroid/content/pm/RegisteredServicesCache$ServiceInfo;
 HSPLcom/android/server/accounts/AccountAuthenticatorCache;->parseServiceAttributes(Landroid/content/res/Resources;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/accounts/AuthenticatorDescription;
 HSPLcom/android/server/accounts/AccountAuthenticatorCache;->parseServiceAttributes(Landroid/content/res/Resources;Ljava/lang/String;Landroid/util/AttributeSet;)Ljava/lang/Object;
 PLcom/android/server/accounts/AccountManagerBackupHelper;-><init>(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/AccountManagerInternal;)V
-PLcom/android/server/accounts/AccountManagerBackupHelper;->backupAccountAccessPermissions(I)[B
+HPLcom/android/server/accounts/AccountManagerBackupHelper;->backupAccountAccessPermissions(I)[B
+PLcom/android/server/accounts/AccountManagerService$1$1;-><init>(Lcom/android/server/accounts/AccountManagerService$1;Ljava/lang/String;)V
+PLcom/android/server/accounts/AccountManagerService$1$1;->run()V
+PLcom/android/server/accounts/AccountManagerService$10;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZZLjava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/String;)V
+PLcom/android/server/accounts/AccountManagerService$10;->run()V
+PLcom/android/server/accounts/AccountManagerService$14;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZZLandroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/accounts/AccountManagerService$14;->run()V
+PLcom/android/server/accounts/AccountManagerService$18;-><init>(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/Account;ILjava/lang/String;Landroid/os/RemoteCallback;)V
 HSPLcom/android/server/accounts/AccountManagerService$1;-><init>(Lcom/android/server/accounts/AccountManagerService;)V
 PLcom/android/server/accounts/AccountManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/accounts/AccountManagerService$1LogRecordTask;-><init>(Lcom/android/server/accounts/AccountManagerService;Ljava/lang/String;Ljava/lang/String;JLcom/android/server/accounts/AccountManagerService$UserAccounts;IJ)V
+PLcom/android/server/accounts/AccountManagerService$1LogRecordTask;->run()V
 HSPLcom/android/server/accounts/AccountManagerService$2;-><init>(Lcom/android/server/accounts/AccountManagerService;)V
+PLcom/android/server/accounts/AccountManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/accounts/AccountManagerService$3;-><init>(Lcom/android/server/accounts/AccountManagerService;)V
 PLcom/android/server/accounts/AccountManagerService$3;->onPackageAdded(Ljava/lang/String;I)V
 PLcom/android/server/accounts/AccountManagerService$3;->onPackageUpdateFinished(Ljava/lang/String;I)V
 HSPLcom/android/server/accounts/AccountManagerService$4;-><init>(Lcom/android/server/accounts/AccountManagerService;)V
-PLcom/android/server/accounts/AccountManagerService$4;->onOpChanged(ILjava/lang/String;)V
-PLcom/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;ZZIZLjava/lang/String;[BLcom/android/server/accounts/AccountManagerService$UserAccounts;)V
-PLcom/android/server/accounts/AccountManagerService$8;->onResult(Landroid/os/Bundle;)V
-PLcom/android/server/accounts/AccountManagerService$8;->run()V
+HSPLcom/android/server/accounts/AccountManagerService$4;->onOpChanged(ILjava/lang/String;)V
+PLcom/android/server/accounts/AccountManagerService$5;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZLandroid/accounts/Account;Landroid/accounts/IAccountManagerResponse;Lcom/android/server/accounts/AccountManagerService$UserAccounts;I)V
+PLcom/android/server/accounts/AccountManagerService$5;->onResult(Landroid/os/Bundle;)V
+PLcom/android/server/accounts/AccountManagerService$5;->run()V
+PLcom/android/server/accounts/AccountManagerService$6;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZLandroid/accounts/Account;ILandroid/os/Bundle;)V
+PLcom/android/server/accounts/AccountManagerService$6;->onResult(Landroid/os/Bundle;)V
+PLcom/android/server/accounts/AccountManagerService$6;->run()V
+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;ZZIZLjava/lang/String;[BLcom/android/server/accounts/AccountManagerService$UserAccounts;)V
+HPLcom/android/server/accounts/AccountManagerService$8;->onResult(Landroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService$8;->run()V
+PLcom/android/server/accounts/AccountManagerService$8;->toDebugString(J)Ljava/lang/String;
+PLcom/android/server/accounts/AccountManagerService$9;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZZLjava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/String;)V
+PLcom/android/server/accounts/AccountManagerService$9;->run()V
 HSPLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;-><init>(Lcom/android/server/accounts/AccountManagerService;)V
 HSPLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$1;)V
 HSPLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;->addOnAppPermissionChangeListener(Landroid/accounts/AccountManagerInternal$OnAppPermissionChangeListener;)V
 PLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;->backupAccountAccessPermissions(I)[B
-PLcom/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
-PLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->checkAccount()V
-PLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->onResult(Landroid/os/Bundle;)V
-PLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->run()V
-PLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->sendResult()V
+PLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;->hasAccountAccess(Landroid/accounts/Account;I)Z
+PLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;->requestAccountAccess(Landroid/accounts/Account;Ljava/lang/String;ILandroid/os/RemoteCallback;)V
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;[Ljava/lang/String;ILjava/lang/String;Z)V
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->checkAccount()V
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->onResult(Landroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->run()V
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->sendResult()V
+PLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->toDebugString(J)Ljava/lang/String;
 HSPLcom/android/server/accounts/AccountManagerService$Injector;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/accounts/AccountManagerService$Injector;->addLocalService(Landroid/accounts/AccountManagerInternal;)V
 HSPLcom/android/server/accounts/AccountManagerService$Injector;->getAccountAuthenticatorCache()Lcom/android/server/accounts/IAccountAuthenticatorCache;
@@ -3142,75 +5379,134 @@
 HSPLcom/android/server/accounts/AccountManagerService$Injector;->getContext()Landroid/content/Context;
 HSPLcom/android/server/accounts/AccountManagerService$Injector;->getDeDatabaseName(I)Ljava/lang/String;
 HSPLcom/android/server/accounts/AccountManagerService$Injector;->getMessageHandlerLooper()Landroid/os/Looper;
-PLcom/android/server/accounts/AccountManagerService$Injector;->getNotificationManager()Landroid/app/INotificationManager;
+HSPLcom/android/server/accounts/AccountManagerService$Injector;->getNotificationManager()Landroid/app/INotificationManager;
 HSPLcom/android/server/accounts/AccountManagerService$Injector;->getPreNDatabaseName(I)Ljava/lang/String;
 HSPLcom/android/server/accounts/AccountManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/accounts/AccountManagerService$Lifecycle;->onStart()V
+PLcom/android/server/accounts/AccountManagerService$Lifecycle;->onStopUser(I)V
 PLcom/android/server/accounts/AccountManagerService$Lifecycle;->onUnlockUser(I)V
 HSPLcom/android/server/accounts/AccountManagerService$MessageHandler;-><init>(Lcom/android/server/accounts/AccountManagerService;Landroid/os/Looper;)V
-PLcom/android/server/accounts/AccountManagerService$NotificationId;-><init>(Ljava/lang/String;I)V
-HPLcom/android/server/accounts/AccountManagerService$NotificationId;->access$3600(Lcom/android/server/accounts/AccountManagerService$NotificationId;)I
-PLcom/android/server/accounts/AccountManagerService$Session;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;Z)V
-PLcom/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
-PLcom/android/server/accounts/AccountManagerService$Session;->bind()V
-PLcom/android/server/accounts/AccountManagerService$Session;->bindToAuthenticator(Ljava/lang/String;)Z
+HSPLcom/android/server/accounts/AccountManagerService$NotificationId;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/server/accounts/AccountManagerService$NotificationId;->access$3600(Lcom/android/server/accounts/AccountManagerService$NotificationId;)I
+PLcom/android/server/accounts/AccountManagerService$RemoveAccountSession;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Z)V
+PLcom/android/server/accounts/AccountManagerService$RemoveAccountSession;->onResult(Landroid/os/Bundle;)V
+PLcom/android/server/accounts/AccountManagerService$RemoveAccountSession;->run()V
+HPLcom/android/server/accounts/AccountManagerService$Session;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;Z)V
+HPLcom/android/server/accounts/AccountManagerService$Session;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZZ)V
+HPLcom/android/server/accounts/AccountManagerService$Session;->bind()V
+HPLcom/android/server/accounts/AccountManagerService$Session;->bindToAuthenticator(Ljava/lang/String;)Z
 PLcom/android/server/accounts/AccountManagerService$Session;->binderDied()V
-PLcom/android/server/accounts/AccountManagerService$Session;->cancelTimeout()V
-PLcom/android/server/accounts/AccountManagerService$Session;->close()V
-PLcom/android/server/accounts/AccountManagerService$Session;->getResponseAndClose()Landroid/accounts/IAccountManagerResponse;
+HPLcom/android/server/accounts/AccountManagerService$Session;->cancelTimeout()V
+HPLcom/android/server/accounts/AccountManagerService$Session;->checkKeyIntent(ILandroid/content/Intent;)Z
+HPLcom/android/server/accounts/AccountManagerService$Session;->close()V
+HPLcom/android/server/accounts/AccountManagerService$Session;->getResponseAndClose()Landroid/accounts/IAccountManagerResponse;
+HPLcom/android/server/accounts/AccountManagerService$Session;->isExportedSystemActivity(Landroid/content/pm/ActivityInfo;)Z
 PLcom/android/server/accounts/AccountManagerService$Session;->onError(ILjava/lang/String;)V
-PLcom/android/server/accounts/AccountManagerService$Session;->onResult(Landroid/os/Bundle;)V
-PLcom/android/server/accounts/AccountManagerService$Session;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/accounts/AccountManagerService$Session;->onRequestContinued()V
+HPLcom/android/server/accounts/AccountManagerService$Session;->onResult(Landroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService$Session;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/accounts/AccountManagerService$Session;->onServiceDisconnected(Landroid/content/ComponentName;)V
+PLcom/android/server/accounts/AccountManagerService$Session;->toDebugString()Ljava/lang/String;
+PLcom/android/server/accounts/AccountManagerService$Session;->toDebugString(J)Ljava/lang/String;
 HPLcom/android/server/accounts/AccountManagerService$Session;->unbind()V
 HPLcom/android/server/accounts/AccountManagerService$TestFeaturesSession;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;[Ljava/lang/String;)V
-PLcom/android/server/accounts/AccountManagerService$TestFeaturesSession;->onResult(Landroid/os/Bundle;)V
-PLcom/android/server/accounts/AccountManagerService$TestFeaturesSession;->run()V
+HPLcom/android/server/accounts/AccountManagerService$TestFeaturesSession;->onResult(Landroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService$TestFeaturesSession;->run()V
+PLcom/android/server/accounts/AccountManagerService$TestFeaturesSession;->toDebugString(J)Ljava/lang/String;
 HSPLcom/android/server/accounts/AccountManagerService$UserAccounts;-><init>(Landroid/content/Context;ILjava/io/File;Ljava/io/File;)V
 PLcom/android/server/accounts/AccountManagerService$UserAccounts;->access$1000(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
-HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->access$1600(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/HashMap;
+HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->access$1100(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
+HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->access$1200(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
+PLcom/android/server/accounts/AccountManagerService$UserAccounts;->access$1300(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Lcom/android/server/accounts/TokenCache;
+PLcom/android/server/accounts/AccountManagerService$UserAccounts;->access$1400(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/HashMap;
+HSPLcom/android/server/accounts/AccountManagerService$UserAccounts;->access$1600(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/HashMap;
+HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->access$2200(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/HashMap;
 HSPLcom/android/server/accounts/AccountManagerService$UserAccounts;->access$800(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)I
 HSPLcom/android/server/accounts/AccountManagerService$UserAccounts;->access$900(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
 HSPLcom/android/server/accounts/AccountManagerService;-><clinit>()V
 HSPLcom/android/server/accounts/AccountManagerService;-><init>(Lcom/android/server/accounts/AccountManagerService$Injector;)V
+PLcom/android/server/accounts/AccountManagerService;->access$000(Lcom/android/server/accounts/AccountManagerService;I)V
+PLcom/android/server/accounts/AccountManagerService;->access$100(Lcom/android/server/accounts/AccountManagerService;)V
+PLcom/android/server/accounts/AccountManagerService;->access$1500(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/IAccountManagerResponse;Landroid/os/Bundle;Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;I)V
+PLcom/android/server/accounts/AccountManagerService;->access$1700(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;I)Z
+PLcom/android/server/accounts/AccountManagerService;->access$1900(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/accounts/AccountManagerService;->access$200(Lcom/android/server/accounts/AccountManagerService;Ljava/lang/String;)V
+PLcom/android/server/accounts/AccountManagerService;->access$2000(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;[BLjava/lang/String;Ljava/lang/String;J)V
+PLcom/android/server/accounts/AccountManagerService;->access$2100(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/CharSequence;Landroid/content/Intent;Ljava/lang/String;I)V
+HPLcom/android/server/accounts/AccountManagerService;->access$2800(Lcom/android/server/accounts/AccountManagerService;)Ljava/util/LinkedHashMap;
+PLcom/android/server/accounts/AccountManagerService;->access$2900(Lcom/android/server/accounts/AccountManagerService;Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/accounts/AccountManagerService;->access$3100(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Lcom/android/server/accounts/AccountManagerService$NotificationId;
+HPLcom/android/server/accounts/AccountManagerService;->access$3200(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$NotificationId;Landroid/os/UserHandle;)V
+HPLcom/android/server/accounts/AccountManagerService;->access$3300(Lcom/android/server/accounts/AccountManagerService;)Lcom/android/server/accounts/IAccountAuthenticatorCache;
+HPLcom/android/server/accounts/AccountManagerService;->access$3400(Lcom/android/server/accounts/AccountManagerService;I)Z
+PLcom/android/server/accounts/AccountManagerService;->access$3500(Lcom/android/server/accounts/AccountManagerService;)Ljava/text/SimpleDateFormat;
+PLcom/android/server/accounts/AccountManagerService;->access$3700(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/lang/Integer;
+PLcom/android/server/accounts/AccountManagerService;->access$3800(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/Account;Ljava/lang/String;ILandroid/os/RemoteCallback;)Landroid/content/Intent;
+PLcom/android/server/accounts/AccountManagerService;->access$3900(Lcom/android/server/accounts/AccountManagerService;)Landroid/util/SparseArray;
+PLcom/android/server/accounts/AccountManagerService;->access$400(Lcom/android/server/accounts/AccountManagerService;IZ)V
 HSPLcom/android/server/accounts/AccountManagerService;->access$4000(Lcom/android/server/accounts/AccountManagerService;)Ljava/util/concurrent/CopyOnWriteArrayList;
-PLcom/android/server/accounts/AccountManagerService;->access$500(Lcom/android/server/accounts/AccountManagerService;)Landroid/content/pm/PackageManager;
-PLcom/android/server/accounts/AccountManagerService;->access$600(Lcom/android/server/accounts/AccountManagerService;)Landroid/app/AppOpsManager;
-PLcom/android/server/accounts/AccountManagerService;->access$700(Lcom/android/server/accounts/AccountManagerService;Ljava/lang/String;IZ)V
+PLcom/android/server/accounts/AccountManagerService;->access$4100(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/Account;Ljava/lang/String;I)Z
+HSPLcom/android/server/accounts/AccountManagerService;->access$500(Lcom/android/server/accounts/AccountManagerService;)Landroid/content/pm/PackageManager;
+HSPLcom/android/server/accounts/AccountManagerService;->access$600(Lcom/android/server/accounts/AccountManagerService;)Landroid/app/AppOpsManager;
+HSPLcom/android/server/accounts/AccountManagerService;->access$700(Lcom/android/server/accounts/AccountManagerService;Ljava/lang/String;IZ)V
 HPLcom/android/server/accounts/AccountManagerService;->accountExistsCache(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Z
-HPLcom/android/server/accounts/AccountManagerService;->accountTypeManagesContacts(Ljava/lang/String;I)Z
+HSPLcom/android/server/accounts/AccountManagerService;->accountTypeManagesContacts(Ljava/lang/String;I)Z
+PLcom/android/server/accounts/AccountManagerService;->addAccount(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;ZLandroid/os/Bundle;)V
+PLcom/android/server/accounts/AccountManagerService;->addAccountAsUser(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;ZLandroid/os/Bundle;I)V
+PLcom/android/server/accounts/AccountManagerService;->addAccountExplicitly(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Z
+PLcom/android/server/accounts/AccountManagerService;->addAccountExplicitlyWithVisibility(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Ljava/util/Map;)Z
+PLcom/android/server/accounts/AccountManagerService;->addAccountInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;ILjava/util/Map;)Z
+PLcom/android/server/accounts/AccountManagerService;->addAccountToLinkedRestrictedUsers(Landroid/accounts/Account;I)V
 HPLcom/android/server/accounts/AccountManagerService;->calculatePackageSignatureDigest(Ljava/lang/String;)[B
-HPLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(Landroid/accounts/Account;ILjava/lang/String;Z)V
-PLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(Ljava/lang/String;IZ)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
-PLcom/android/server/accounts/AccountManagerService;->checkReadAccountsPermitted(ILjava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/accounts/AccountManagerService;->checkReadContactsPermission(Ljava/lang/String;I)Z
-PLcom/android/server/accounts/AccountManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/accounts/AccountManagerService;->dumpUser(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
+PLcom/android/server/accounts/AccountManagerService;->canHaveProfile(I)Z
+PLcom/android/server/accounts/AccountManagerService;->canUserModifyAccounts(II)Z
+PLcom/android/server/accounts/AccountManagerService;->canUserModifyAccountsForType(ILjava/lang/String;I)Z
+HPLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(IZ)V
+HSPLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(Landroid/accounts/Account;ILjava/lang/String;Z)V
+HPLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(Landroid/accounts/Account;IZ)V
+HSPLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(Ljava/lang/String;IZ)V
+HPLcom/android/server/accounts/AccountManagerService;->cancelNotification(Lcom/android/server/accounts/AccountManagerService$NotificationId;Landroid/os/UserHandle;)V
+HSPLcom/android/server/accounts/AccountManagerService;->cancelNotification(Lcom/android/server/accounts/AccountManagerService$NotificationId;Ljava/lang/String;Landroid/os/UserHandle;)V
+HPLcom/android/server/accounts/AccountManagerService;->checkGetAccountsPermission(Ljava/lang/String;I)Z
+HSPLcom/android/server/accounts/AccountManagerService;->checkPackageSignature(Ljava/lang/String;II)I
+HPLcom/android/server/accounts/AccountManagerService;->checkReadAccountsPermitted(ILjava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/server/accounts/AccountManagerService;->checkReadContactsPermission(Ljava/lang/String;I)Z
+PLcom/android/server/accounts/AccountManagerService;->clearPassword(Landroid/accounts/Account;)V
+PLcom/android/server/accounts/AccountManagerService;->completeCloningAccount(Landroid/accounts/IAccountManagerResponse;Landroid/os/Bundle;Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;I)V
+PLcom/android/server/accounts/AccountManagerService;->copyAccountToUser(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;II)V
+PLcom/android/server/accounts/AccountManagerService;->createNoCredentialsPermissionNotification(Landroid/accounts/Account;Landroid/content/Intent;Ljava/lang/String;I)V
+PLcom/android/server/accounts/AccountManagerService;->doNotification(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/CharSequence;Landroid/content/Intent;Ljava/lang/String;I)V
+HPLcom/android/server/accounts/AccountManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/accounts/AccountManagerService;->dumpUser(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 HSPLcom/android/server/accounts/AccountManagerService;->filterAccounts(Lcom/android/server/accounts/AccountManagerService$UserAccounts;[Landroid/accounts/Account;ILjava/lang/String;Z)[Landroid/accounts/Account;
 HSPLcom/android/server/accounts/AccountManagerService;->filterSharedAccounts(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/util/Map;ILjava/lang/String;)Ljava/util/Map;
+HPLcom/android/server/accounts/AccountManagerService;->getAccountRemovedReceivers(Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/List;
 PLcom/android/server/accounts/AccountManagerService;->getAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;)I
-HPLcom/android/server/accounts/AccountManagerService;->getAccountVisibilityFromCache(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)I
+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;
-PLcom/android/server/accounts/AccountManagerService;->getAccounts(Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;
-PLcom/android/server/accounts/AccountManagerService;->getAccounts([I)[Landroid/accounts/AccountAndUser;
+HPLcom/android/server/accounts/AccountManagerService;->getAccounts(Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;
+HPLcom/android/server/accounts/AccountManagerService;->getAccounts([I)[Landroid/accounts/AccountAndUser;
+PLcom/android/server/accounts/AccountManagerService;->getAccountsAndVisibilityForPackage(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Map;
+PLcom/android/server/accounts/AccountManagerService;->getAccountsAndVisibilityForPackage(Ljava/lang/String;Ljava/util/List;Ljava/lang/Integer;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
 HSPLcom/android/server/accounts/AccountManagerService;->getAccountsAsUser(Ljava/lang/String;ILjava/lang/String;)[Landroid/accounts/Account;
 HSPLcom/android/server/accounts/AccountManagerService;->getAccountsAsUserForPackage(Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;Z)[Landroid/accounts/Account;
-PLcom/android/server/accounts/AccountManagerService;->getAccountsByFeatures(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
+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;
 HSPLcom/android/server/accounts/AccountManagerService;->getAccountsInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;ILjava/lang/String;Ljava/util/List;Z)[Landroid/accounts/Account;
 PLcom/android/server/accounts/AccountManagerService;->getAllAccounts()[Landroid/accounts/AccountAndUser;
-PLcom/android/server/accounts/AccountManagerService;->getAuthToken(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;ZZLandroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService;->getAuthToken(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;ZZLandroid/os/Bundle;)V
 HSPLcom/android/server/accounts/AccountManagerService;->getAuthenticatorTypeAndUIDForUser(Lcom/android/server/accounts/IAccountAuthenticatorCache;I)Ljava/util/HashMap;
-PLcom/android/server/accounts/AccountManagerService;->getAuthenticatorTypes(I)[Landroid/accounts/AuthenticatorDescription;
+HPLcom/android/server/accounts/AccountManagerService;->getAuthenticatorTypes(I)[Landroid/accounts/AuthenticatorDescription;
 HPLcom/android/server/accounts/AccountManagerService;->getAuthenticatorTypesInternal(I)[Landroid/accounts/AuthenticatorDescription;
-PLcom/android/server/accounts/AccountManagerService;->getCredentialPermissionNotificationId(Landroid/accounts/Account;Ljava/lang/String;I)Lcom/android/server/accounts/AccountManagerService$NotificationId;
+PLcom/android/server/accounts/AccountManagerService;->getContextForUser(Landroid/os/UserHandle;)Landroid/content/Context;
+HSPLcom/android/server/accounts/AccountManagerService;->getCredentialPermissionNotificationId(Landroid/accounts/Account;Ljava/lang/String;I)Lcom/android/server/accounts/AccountManagerService$NotificationId;
 HPLcom/android/server/accounts/AccountManagerService;->getPackageNameForUid(I)Ljava/lang/String;
-HPLcom/android/server/accounts/AccountManagerService;->getPackagesAndVisibilityForAccountLocked(Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
-PLcom/android/server/accounts/AccountManagerService;->getPassword(Landroid/accounts/Account;)Ljava/lang/String;
-PLcom/android/server/accounts/AccountManagerService;->getPreviousName(Landroid/accounts/Account;)Ljava/lang/String;
+PLcom/android/server/accounts/AccountManagerService;->getPackagesAndVisibilityForAccount(Landroid/accounts/Account;)Ljava/util/Map;
+HSPLcom/android/server/accounts/AccountManagerService;->getPackagesAndVisibilityForAccountLocked(Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
+HPLcom/android/server/accounts/AccountManagerService;->getPassword(Landroid/accounts/Account;)Ljava/lang/String;
+HPLcom/android/server/accounts/AccountManagerService;->getPreviousName(Landroid/accounts/Account;)Ljava/lang/String;
+HPLcom/android/server/accounts/AccountManagerService;->getRequestingPackages(Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
 PLcom/android/server/accounts/AccountManagerService;->getRunningAccounts()[Landroid/accounts/AccountAndUser;
 PLcom/android/server/accounts/AccountManagerService;->getSharedAccountsAsUser(I)[Landroid/accounts/Account;
 HPLcom/android/server/accounts/AccountManagerService;->getSigninRequiredNotificationId(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Lcom/android/server/accounts/AccountManagerService$NotificationId;
@@ -3218,164 +5514,336 @@
 HSPLcom/android/server/accounts/AccountManagerService;->getTypesForCaller(IIZ)Ljava/util/List;
 HSPLcom/android/server/accounts/AccountManagerService;->getTypesManagedByCaller(II)Ljava/util/List;
 HSPLcom/android/server/accounts/AccountManagerService;->getTypesVisibleToCaller(IILjava/lang/String;)Ljava/util/List;
+HSPLcom/android/server/accounts/AccountManagerService;->getUidsOfInstalledOrUpdatedPackagesAsUser(I)Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/accounts/AccountManagerService;->getUserAccounts(I)Lcom/android/server/accounts/AccountManagerService$UserAccounts;
+PLcom/android/server/accounts/AccountManagerService;->getUserAccountsForCaller()Lcom/android/server/accounts/AccountManagerService$UserAccounts;
 HSPLcom/android/server/accounts/AccountManagerService;->getUserAccountsNotChecked(I)Lcom/android/server/accounts/AccountManagerService$UserAccounts;
 HPLcom/android/server/accounts/AccountManagerService;->getUserData(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/accounts/AccountManagerService;->getUserManager()Landroid/os/UserManager;
+PLcom/android/server/accounts/AccountManagerService;->grantAppPermission(Landroid/accounts/Account;Ljava/lang/String;I)V
 PLcom/android/server/accounts/AccountManagerService;->handleIncomingUser(I)I
-HPLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;I)Z
-PLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/UserHandle;)Z
-PLcom/android/server/accounts/AccountManagerService;->hasExplicitlyGrantedPermission(Landroid/accounts/Account;Ljava/lang/String;I)Z
-PLcom/android/server/accounts/AccountManagerService;->hasFeatures(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;[Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/accounts/AccountManagerService;->invalidateAuthToken(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/accounts/AccountManagerService;->invalidateAuthTokenLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
-PLcom/android/server/accounts/AccountManagerService;->isAccountManagedByCaller(Ljava/lang/String;II)Z
+HSPLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;I)Z
+HSPLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/UserHandle;)Z
+HSPLcom/android/server/accounts/AccountManagerService;->hasExplicitlyGrantedPermission(Landroid/accounts/Account;Ljava/lang/String;I)Z
+HPLcom/android/server/accounts/AccountManagerService;->hasFeatures(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;[Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/accounts/AccountManagerService;->insertAccountIntoCacheLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Landroid/accounts/Account;
+PLcom/android/server/accounts/AccountManagerService;->installNotification(Lcom/android/server/accounts/AccountManagerService$NotificationId;Landroid/app/Notification;Ljava/lang/String;I)V
+HPLcom/android/server/accounts/AccountManagerService;->invalidateAuthToken(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/accounts/AccountManagerService;->invalidateAuthTokenLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/server/accounts/AccountManagerService;->isAccountManagedByCaller(Ljava/lang/String;II)Z
+PLcom/android/server/accounts/AccountManagerService;->isAccountPresentForCaller(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/accounts/AccountManagerService;->isAccountVisibleToCaller(Ljava/lang/String;IILjava/lang/String;)Z
+HPLcom/android/server/accounts/AccountManagerService;->isCrossUser(II)Z
 HSPLcom/android/server/accounts/AccountManagerService;->isLocalUnlockedUser(I)Z
-HPLcom/android/server/accounts/AccountManagerService;->isPermittedForPackage(Ljava/lang/String;I[Ljava/lang/String;)Z
-HPLcom/android/server/accounts/AccountManagerService;->isPreOApplication(Ljava/lang/String;)Z
-HPLcom/android/server/accounts/AccountManagerService;->isPrivileged(I)Z
-PLcom/android/server/accounts/AccountManagerService;->isProfileOwner(I)Z
-PLcom/android/server/accounts/AccountManagerService;->lambda$new$0$AccountManagerService(I)V
+HSPLcom/android/server/accounts/AccountManagerService;->isPermittedForPackage(Ljava/lang/String;I[Ljava/lang/String;)Z
+HSPLcom/android/server/accounts/AccountManagerService;->isPreOApplication(Ljava/lang/String;)Z
+HSPLcom/android/server/accounts/AccountManagerService;->isPrivileged(I)Z
+HSPLcom/android/server/accounts/AccountManagerService;->isProfileOwner(I)Z
+PLcom/android/server/accounts/AccountManagerService;->isSpecialPackageKey(Ljava/lang/String;)Z
+PLcom/android/server/accounts/AccountManagerService;->isSystemUid(I)Z
+PLcom/android/server/accounts/AccountManagerService;->isVisible(I)Z
+PLcom/android/server/accounts/AccountManagerService;->lambda$grantAppPermission$3(Landroid/accounts/AccountManagerInternal$OnAppPermissionChangeListener;Landroid/accounts/Account;I)V
+HSPLcom/android/server/accounts/AccountManagerService;->lambda$new$0$AccountManagerService(I)V
 PLcom/android/server/accounts/AccountManagerService;->lambda$onUnlockUser$1$AccountManagerService(I)V
+PLcom/android/server/accounts/AccountManagerService;->lambda$removeAccountInternal$2$AccountManagerService(Landroid/accounts/Account;I)V
+PLcom/android/server/accounts/AccountManagerService;->logRecord(Ljava/lang/String;Ljava/lang/String;JLcom/android/server/accounts/AccountManagerService$UserAccounts;)V
+PLcom/android/server/accounts/AccountManagerService;->logRecord(Ljava/lang/String;Ljava/lang/String;JLcom/android/server/accounts/AccountManagerService$UserAccounts;I)V
+PLcom/android/server/accounts/AccountManagerService;->logRecordWithUid(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/accounts/AccountManagerService;->newGrantCredentialsPermissionIntent(Landroid/accounts/Account;Ljava/lang/String;ILandroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;Z)Landroid/content/Intent;
+PLcom/android/server/accounts/AccountManagerService;->newRequestAccountAccessIntent(Landroid/accounts/Account;Ljava/lang/String;ILandroid/os/RemoteCallback;)Landroid/content/Intent;
+PLcom/android/server/accounts/AccountManagerService;->notifyPackage(Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V
 HPLcom/android/server/accounts/AccountManagerService;->onAccountAccessed(Ljava/lang/String;)V
-PLcom/android/server/accounts/AccountManagerService;->onResult(Landroid/accounts/IAccountManagerResponse;Landroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService;->onResult(Landroid/accounts/IAccountManagerResponse;Landroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService;->onServiceChanged(Landroid/accounts/AuthenticatorDescription;IZ)V
+PLcom/android/server/accounts/AccountManagerService;->onServiceChanged(Ljava/lang/Object;IZ)V
 HPLcom/android/server/accounts/AccountManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 PLcom/android/server/accounts/AccountManagerService;->onUnlockUser(I)V
+PLcom/android/server/accounts/AccountManagerService;->packageExistsForUser(Ljava/lang/String;I)Z
 HPLcom/android/server/accounts/AccountManagerService;->peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/server/accounts/AccountManagerService;->permissionIsGranted(Landroid/accounts/Account;Ljava/lang/String;II)Z
+HSPLcom/android/server/accounts/AccountManagerService;->permissionIsGranted(Landroid/accounts/Account;Ljava/lang/String;II)Z
 HSPLcom/android/server/accounts/AccountManagerService;->purgeOldGrants(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V
+HPLcom/android/server/accounts/AccountManagerService;->purgeOldGrantsAll()V
+PLcom/android/server/accounts/AccountManagerService;->purgeUserData(I)V
 HPLcom/android/server/accounts/AccountManagerService;->readAuthTokenInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/accounts/AccountManagerService;->readCachedTokenInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;[B)Ljava/lang/String;
-PLcom/android/server/accounts/AccountManagerService;->readPasswordInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Ljava/lang/String;
-PLcom/android/server/accounts/AccountManagerService;->readPreviousNameInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Ljava/lang/String;
+HPLcom/android/server/accounts/AccountManagerService;->readCachedTokenInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;[B)Ljava/lang/String;
+HPLcom/android/server/accounts/AccountManagerService;->readPasswordInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Ljava/lang/String;
+HPLcom/android/server/accounts/AccountManagerService;->readPreviousNameInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Ljava/lang/String;
 HPLcom/android/server/accounts/AccountManagerService;->readUserDataInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/accounts/AccountManagerService;->registerAccountListener([Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/accounts/AccountManagerService;->registerAccountListener([Ljava/lang/String;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V
+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
+PLcom/android/server/accounts/AccountManagerService;->removeAccount(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Z)V
+HPLcom/android/server/accounts/AccountManagerService;->removeAccountAsUser(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;ZI)V
+PLcom/android/server/accounts/AccountManagerService;->removeAccountExplicitly(Landroid/accounts/Account;)Z
+PLcom/android/server/accounts/AccountManagerService;->removeAccountFromCacheLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)V
+HPLcom/android/server/accounts/AccountManagerService;->removeAccountInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;I)Z
+HPLcom/android/server/accounts/AccountManagerService;->removeVisibilityValuesForPackage(Ljava/lang/String;)V
 HSPLcom/android/server/accounts/AccountManagerService;->resolveAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/lang/Integer;
-PLcom/android/server/accounts/AccountManagerService;->saveAuthTokenToDatabase(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/server/accounts/AccountManagerService;->saveCachedToken(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;[BLjava/lang/String;Ljava/lang/String;J)V
-PLcom/android/server/accounts/AccountManagerService;->setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/accounts/AccountManagerService;->saveAuthTokenToDatabase(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/accounts/AccountManagerService;->saveCachedToken(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;[BLjava/lang/String;Ljava/lang/String;J)V
+PLcom/android/server/accounts/AccountManagerService;->scanArgs([Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/accounts/AccountManagerService;->sendAccountRemovedBroadcast(Landroid/accounts/Account;Ljava/lang/String;I)V
+PLcom/android/server/accounts/AccountManagerService;->sendAccountsChangedBroadcast(I)V
+PLcom/android/server/accounts/AccountManagerService;->sendNotificationAccountUpdated(Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V
+PLcom/android/server/accounts/AccountManagerService;->setAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;I)Z
+HPLcom/android/server/accounts/AccountManagerService;->setAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;IZLcom/android/server/accounts/AccountManagerService$UserAccounts;)Z
+HPLcom/android/server/accounts/AccountManagerService;->setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/accounts/AccountManagerService;->setPassword(Landroid/accounts/Account;Ljava/lang/String;)V
+PLcom/android/server/accounts/AccountManagerService;->setPasswordInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;I)V
 HPLcom/android/server/accounts/AccountManagerService;->setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/accounts/AccountManagerService;->setUserdataInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/accounts/AccountManagerService;->shouldNotifyPackageOnAccountRemoval(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Z
 PLcom/android/server/accounts/AccountManagerService;->syncDeCeAccountsLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V
 PLcom/android/server/accounts/AccountManagerService;->syncSharedAccounts(I)V
+PLcom/android/server/accounts/AccountManagerService;->unregisterAccountListener([Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/accounts/AccountManagerService;->unregisterAccountListener([Ljava/lang/String;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V
+PLcom/android/server/accounts/AccountManagerService;->updateAccountVisibilityLocked(Landroid/accounts/Account;Ljava/lang/String;ILcom/android/server/accounts/AccountManagerService$UserAccounts;)Z
+PLcom/android/server/accounts/AccountManagerService;->updateAppPermission(Landroid/accounts/Account;Ljava/lang/String;IZ)V
+PLcom/android/server/accounts/AccountManagerService;->updateCredentials(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;ZLandroid/os/Bundle;)V
 PLcom/android/server/accounts/AccountManagerService;->validateAccounts(I)V
 HSPLcom/android/server/accounts/AccountManagerService;->validateAccountsInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Z)V
-PLcom/android/server/accounts/AccountManagerService;->writeAuthTokenIntoCacheLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/accounts/AccountManagerService;->writeAuthTokenIntoCacheLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/accounts/AccountManagerService;->writeUserDataIntoCacheLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/accounts/AccountsDb$CeDatabaseHelper;-><init>(Landroid/content/Context;Ljava/lang/String;)V
 PLcom/android/server/accounts/AccountsDb$CeDatabaseHelper;->create(Landroid/content/Context;Ljava/io/File;Ljava/io/File;)Lcom/android/server/accounts/AccountsDb$CeDatabaseHelper;
+PLcom/android/server/accounts/AccountsDb$CeDatabaseHelper;->createAccountsDeletionTrigger(Landroid/database/sqlite/SQLiteDatabase;)V
+PLcom/android/server/accounts/AccountsDb$CeDatabaseHelper;->onCreate(Landroid/database/sqlite/SQLiteDatabase;)V
 PLcom/android/server/accounts/AccountsDb$CeDatabaseHelper;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V
 HSPLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;-><init>(Landroid/content/Context;ILjava/lang/String;)V
 HSPLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;-><init>(Landroid/content/Context;ILjava/lang/String;Lcom/android/server/accounts/AccountsDb$1;)V
 HSPLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->access$700(Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;)Z
 PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->access$702(Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;Z)Z
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->createAccountsDeletionTrigger(Landroid/database/sqlite/SQLiteDatabase;)V
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->createAccountsDeletionVisibilityCleanupTrigger(Landroid/database/sqlite/SQLiteDatabase;)V
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->createAccountsVisibilityTable(Landroid/database/sqlite/SQLiteDatabase;)V
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->createDebugTable(Landroid/database/sqlite/SQLiteDatabase;)V
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->createGrantsTable(Landroid/database/sqlite/SQLiteDatabase;)V
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->createSharedAccountsTable(Landroid/database/sqlite/SQLiteDatabase;)V
 HPLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->getReadableDatabaseUserIsUnlocked()Landroid/database/sqlite/SQLiteDatabase;
 HPLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->getWritableDatabaseUserIsUnlocked()Landroid/database/sqlite/SQLiteDatabase;
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->onCreate(Landroid/database/sqlite/SQLiteDatabase;)V
 HSPLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V
 HSPLcom/android/server/accounts/AccountsDb;-><clinit>()V
 HSPLcom/android/server/accounts/AccountsDb;-><init>(Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;Landroid/content/Context;Ljava/io/File;)V
+PLcom/android/server/accounts/AccountsDb;->access$000()Ljava/lang/String;
+PLcom/android/server/accounts/AccountsDb;->access$200()Ljava/lang/String;
+PLcom/android/server/accounts/AccountsDb;->access$300()Ljava/lang/String;
+PLcom/android/server/accounts/AccountsDb;->access$400()Ljava/lang/String;
+PLcom/android/server/accounts/AccountsDb;->access$500()Ljava/lang/String;
+PLcom/android/server/accounts/AccountsDb;->access$600()Ljava/lang/String;
 PLcom/android/server/accounts/AccountsDb;->attachCeDatabase(Ljava/io/File;)V
+HPLcom/android/server/accounts/AccountsDb;->beginTransaction()V
+PLcom/android/server/accounts/AccountsDb;->calculateDebugTableInsertionPoint()J
+PLcom/android/server/accounts/AccountsDb;->close()V
+PLcom/android/server/accounts/AccountsDb;->closeDebugStatement()V
+PLcom/android/server/accounts/AccountsDb;->compileSqlStatementForLogging()Landroid/database/sqlite/SQLiteStatement;
 HSPLcom/android/server/accounts/AccountsDb;->create(Landroid/content/Context;ILjava/io/File;Ljava/io/File;)Lcom/android/server/accounts/AccountsDb;
-PLcom/android/server/accounts/AccountsDb;->dumpDeAccountsTable(Ljava/io/PrintWriter;)V
-PLcom/android/server/accounts/AccountsDb;->dumpDebugTable(Ljava/io/PrintWriter;)V
-PLcom/android/server/accounts/AccountsDb;->findAccountPasswordByNameAndType(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/accounts/AccountsDb;->findAllAccountGrants()Ljava/util/List;
+PLcom/android/server/accounts/AccountsDb;->deleteAccountVisibilityForPackage(Ljava/lang/String;)Z
+HPLcom/android/server/accounts/AccountsDb;->deleteAuthToken(Ljava/lang/String;)Z
+PLcom/android/server/accounts/AccountsDb;->deleteAuthTokensByAccountId(J)Z
+HPLcom/android/server/accounts/AccountsDb;->deleteAuthtokensByAccountIdAndType(JLjava/lang/String;)Z
+PLcom/android/server/accounts/AccountsDb;->deleteCeAccount(J)Z
+PLcom/android/server/accounts/AccountsDb;->deleteDeAccount(J)Z
+PLcom/android/server/accounts/AccountsDb;->deleteGrantsByUid(I)Z
+HPLcom/android/server/accounts/AccountsDb;->deleteMetaByAuthTypeAndUid(Ljava/lang/String;I)Z
+HPLcom/android/server/accounts/AccountsDb;->dumpDeAccountsTable(Ljava/io/PrintWriter;)V
+HPLcom/android/server/accounts/AccountsDb;->dumpDebugTable(Ljava/io/PrintWriter;)V
+HPLcom/android/server/accounts/AccountsDb;->endTransaction()V
+HPLcom/android/server/accounts/AccountsDb;->findAccountPasswordByNameAndType(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/accounts/AccountsDb;->findAllAccountGrants()Ljava/util/List;
 HSPLcom/android/server/accounts/AccountsDb;->findAllDeAccounts()Ljava/util/Map;
 HSPLcom/android/server/accounts/AccountsDb;->findAllUidGrants()Ljava/util/List;
 HSPLcom/android/server/accounts/AccountsDb;->findAllVisibilityValues()Ljava/util/Map;
 HPLcom/android/server/accounts/AccountsDb;->findAuthTokensByAccount(Landroid/accounts/Account;)Ljava/util/Map;
+PLcom/android/server/accounts/AccountsDb;->findAuthtokenForAllAccounts(Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
+PLcom/android/server/accounts/AccountsDb;->findCeAccountId(Landroid/accounts/Account;)J
 PLcom/android/server/accounts/AccountsDb;->findCeAccountsNotInDe()Ljava/util/List;
 HPLcom/android/server/accounts/AccountsDb;->findDeAccountId(Landroid/accounts/Account;)J
 PLcom/android/server/accounts/AccountsDb;->findDeAccountPreviousName(Landroid/accounts/Account;)Ljava/lang/String;
 HPLcom/android/server/accounts/AccountsDb;->findExtrasIdByAccountId(JLjava/lang/String;)J
-PLcom/android/server/accounts/AccountsDb;->findMatchingGrantsCountAnyToken(ILandroid/accounts/Account;)J
+HSPLcom/android/server/accounts/AccountsDb;->findMatchingGrantsCountAnyToken(ILandroid/accounts/Account;)J
 HSPLcom/android/server/accounts/AccountsDb;->findMetaAuthUid()Ljava/util/Map;
 HPLcom/android/server/accounts/AccountsDb;->findUserExtrasForAccount(Landroid/accounts/Account;)Ljava/util/Map;
 PLcom/android/server/accounts/AccountsDb;->getSharedAccounts()Ljava/util/List;
-PLcom/android/server/accounts/AccountsDb;->insertAuthToken(JLjava/lang/String;Ljava/lang/String;)J
-PLcom/android/server/accounts/AccountsDb;->insertExtra(JLjava/lang/String;Ljava/lang/String;)J
+PLcom/android/server/accounts/AccountsDb;->getStatementForLogging()Landroid/database/sqlite/SQLiteStatement;
+HPLcom/android/server/accounts/AccountsDb;->insertAuthToken(JLjava/lang/String;Ljava/lang/String;)J
+PLcom/android/server/accounts/AccountsDb;->insertCeAccount(Landroid/accounts/Account;Ljava/lang/String;)J
+PLcom/android/server/accounts/AccountsDb;->insertDeAccount(Landroid/accounts/Account;J)J
+HPLcom/android/server/accounts/AccountsDb;->insertExtra(JLjava/lang/String;Ljava/lang/String;)J
+PLcom/android/server/accounts/AccountsDb;->insertGrant(JLjava/lang/String;I)J
+HPLcom/android/server/accounts/AccountsDb;->insertOrReplaceMetaAuthTypeAndUid(Ljava/lang/String;I)J
 HSPLcom/android/server/accounts/AccountsDb;->isCeDatabaseAttached()Z
+PLcom/android/server/accounts/AccountsDb;->reserveDebugDbInsertionPoint()J
+PLcom/android/server/accounts/AccountsDb;->setAccountVisibility(JLjava/lang/String;I)Z
+HPLcom/android/server/accounts/AccountsDb;->setTransactionSuccessful()V
+PLcom/android/server/accounts/AccountsDb;->updateCeAccountPassword(JLjava/lang/String;)I
 HPLcom/android/server/accounts/AccountsDb;->updateExtra(JLjava/lang/String;)Z
 HPLcom/android/server/accounts/TokenCache$Key;-><init>(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;[B)V
 HPLcom/android/server/accounts/TokenCache$Key;->equals(Ljava/lang/Object;)Z
 HPLcom/android/server/accounts/TokenCache$Key;->hashCode()I
 HPLcom/android/server/accounts/TokenCache$TokenLruCache$Evictor;-><init>(Lcom/android/server/accounts/TokenCache$TokenLruCache;)V
-PLcom/android/server/accounts/TokenCache$TokenLruCache$Evictor;->add(Lcom/android/server/accounts/TokenCache$Key;)V
-PLcom/android/server/accounts/TokenCache$TokenLruCache$Evictor;->evict()V
+HPLcom/android/server/accounts/TokenCache$TokenLruCache$Evictor;->add(Lcom/android/server/accounts/TokenCache$Key;)V
+HPLcom/android/server/accounts/TokenCache$TokenLruCache$Evictor;->evict()V
 HSPLcom/android/server/accounts/TokenCache$TokenLruCache;-><init>()V
+HPLcom/android/server/accounts/TokenCache$TokenLruCache;->entryRemoved(ZLcom/android/server/accounts/TokenCache$Key;Lcom/android/server/accounts/TokenCache$Value;Lcom/android/server/accounts/TokenCache$Value;)V
 PLcom/android/server/accounts/TokenCache$TokenLruCache;->entryRemoved(ZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/accounts/TokenCache$TokenLruCache;->putToken(Lcom/android/server/accounts/TokenCache$Key;Lcom/android/server/accounts/TokenCache$Value;)V
-PLcom/android/server/accounts/TokenCache$TokenLruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/accounts/TokenCache$TokenLruCache;->evict(Landroid/accounts/Account;)V
+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$TokenLruCache;->sizeOf(Lcom/android/server/accounts/TokenCache$Key;Lcom/android/server/accounts/TokenCache$Value;)I
+HPLcom/android/server/accounts/TokenCache$TokenLruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I
 HPLcom/android/server/accounts/TokenCache$Value;-><init>(Ljava/lang/String;J)V
 HSPLcom/android/server/accounts/TokenCache;-><init>()V
-PLcom/android/server/accounts/TokenCache;->get(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;[B)Ljava/lang/String;
+HPLcom/android/server/accounts/TokenCache;->get(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;[B)Ljava/lang/String;
+HPLcom/android/server/accounts/TokenCache;->put(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[BJ)V
+PLcom/android/server/accounts/TokenCache;->remove(Landroid/accounts/Account;)V
+PLcom/android/server/accounts/TokenCache;->remove(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler$1;-><init>(Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;Landroid/os/Handler;)V
 HSPLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;-><init>(Lcom/android/server/adb/AdbDebuggingManager;Landroid/os/Looper;)V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->cancelJobToUpdateAdbKeyStore()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->logAdbConnectionChanged(Ljava/lang/String;IZ)V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->registerForAuthTimeChanges()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->scheduleJobToUpdateAdbKeyStore()J
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;-><init>(Lcom/android/server/adb/AdbDebuggingManager;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->closeSocketLocked()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->listenToSocket()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->openSocketLocked()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->run()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->sendResponse(Ljava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->stopListening()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;-><init>(Lcom/android/server/adb/AdbDebuggingManager;)V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->addUserKeysToKeyStore()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->deleteKeyStore()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->filterOutOldKeys()Z
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->getAllowedConnectionTime()J
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->getKeyMap()Ljava/util/Map;
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->getLastConnectionTime(Ljava/lang/String;)J
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->getNextExpirationTime()J
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->getSystemKeysFromFile(Ljava/lang/String;)Ljava/util/Set;
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->init()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->initKeyFile()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->isEmpty()Z
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->persistKeyStore()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->setLastConnectionTime(Ljava/lang/String;J)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->setLastConnectionTime(Ljava/lang/String;JZ)V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->updateKeyStore()V
 HSPLcom/android/server/adb/AdbDebuggingManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/adb/AdbDebuggingManager;->access$000(Lcom/android/server/adb/AdbDebuggingManager;)Landroid/os/Handler;
 PLcom/android/server/adb/AdbDebuggingManager;->access$100(Lcom/android/server/adb/AdbDebuggingManager;)Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;
+PLcom/android/server/adb/AdbDebuggingManager;->access$1000(Lcom/android/server/adb/AdbDebuggingManager;)V
 PLcom/android/server/adb/AdbDebuggingManager;->access$102(Lcom/android/server/adb/AdbDebuggingManager;Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;)Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;
+PLcom/android/server/adb/AdbDebuggingManager;->access$1100(Lcom/android/server/adb/AdbDebuggingManager;Ljava/lang/String;)V
 PLcom/android/server/adb/AdbDebuggingManager;->access$200(Lcom/android/server/adb/AdbDebuggingManager;)Z
 PLcom/android/server/adb/AdbDebuggingManager;->access$202(Lcom/android/server/adb/AdbDebuggingManager;Z)Z
+PLcom/android/server/adb/AdbDebuggingManager;->access$300(Lcom/android/server/adb/AdbDebuggingManager;)Ljava/util/List;
+PLcom/android/server/adb/AdbDebuggingManager;->access$400(Lcom/android/server/adb/AdbDebuggingManager;)V
+PLcom/android/server/adb/AdbDebuggingManager;->access$500(Lcom/android/server/adb/AdbDebuggingManager;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/adb/AdbDebuggingManager;->access$600(Lcom/android/server/adb/AdbDebuggingManager;)Ljava/lang/String;
+PLcom/android/server/adb/AdbDebuggingManager;->access$602(Lcom/android/server/adb/AdbDebuggingManager;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/adb/AdbDebuggingManager;->access$700(Lcom/android/server/adb/AdbDebuggingManager;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/adb/AdbDebuggingManager;->access$800(Lcom/android/server/adb/AdbDebuggingManager;)Landroid/content/Context;
+PLcom/android/server/adb/AdbDebuggingManager;->access$900(Lcom/android/server/adb/AdbDebuggingManager;Ljava/lang/Iterable;)V
+PLcom/android/server/adb/AdbDebuggingManager;->allowDebugging(ZLjava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager;->clearDebuggingKeys()V
+PLcom/android/server/adb/AdbDebuggingManager;->createConfirmationIntent(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;
+PLcom/android/server/adb/AdbDebuggingManager;->deleteKeyFile()V
+PLcom/android/server/adb/AdbDebuggingManager;->denyDebugging()V
 PLcom/android/server/adb/AdbDebuggingManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 PLcom/android/server/adb/AdbDebuggingManager;->getAdbFile(Ljava/lang/String;)Ljava/io/File;
 PLcom/android/server/adb/AdbDebuggingManager;->getAdbTempKeysFile()Ljava/io/File;
+PLcom/android/server/adb/AdbDebuggingManager;->getFingerprints(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/adb/AdbDebuggingManager;->getUserKeyFile()Ljava/io/File;
+PLcom/android/server/adb/AdbDebuggingManager;->sendPersistKeyStoreMessage()V
 PLcom/android/server/adb/AdbDebuggingManager;->setAdbEnabled(Z)V
+PLcom/android/server/adb/AdbDebuggingManager;->startConfirmation(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager;->startConfirmationActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/adb/AdbDebuggingManager;->writeKey(Ljava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager;->writeKeys(Ljava/lang/Iterable;)V
 HSPLcom/android/server/adb/AdbService$AdbHandler;-><init>(Lcom/android/server/adb/AdbService;Landroid/os/Looper;)V
 HSPLcom/android/server/adb/AdbService$AdbHandler;->containsFunction(Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/server/adb/AdbService$AdbHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/adb/AdbService$AdbHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/adb/AdbService$AdbHandler;->sendMessage(IZ)V
 HSPLcom/android/server/adb/AdbService$AdbManagerInternalImpl;-><init>(Lcom/android/server/adb/AdbService;)V
 HSPLcom/android/server/adb/AdbService$AdbManagerInternalImpl;-><init>(Lcom/android/server/adb/AdbService;Lcom/android/server/adb/AdbService$1;)V
-PLcom/android/server/adb/AdbService$AdbManagerInternalImpl;->isAdbEnabled()Z
+HSPLcom/android/server/adb/AdbService$AdbManagerInternalImpl;->isAdbEnabled()Z
 HSPLcom/android/server/adb/AdbService$AdbManagerInternalImpl;->registerTransport(Landroid/debug/IAdbTransport;)V
 HSPLcom/android/server/adb/AdbService$AdbSettingsObserver;-><init>(Lcom/android/server/adb/AdbService;)V
+HSPLcom/android/server/adb/AdbService$AdbSettingsObserver;->onChange(Z)V
 HSPLcom/android/server/adb/AdbService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/adb/AdbService$Lifecycle;->onBootPhase(I)V
 HSPLcom/android/server/adb/AdbService$Lifecycle;->onStart()V
 HSPLcom/android/server/adb/AdbService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/adb/AdbService;-><init>(Landroid/content/Context;Lcom/android/server/adb/AdbService$1;)V
 HSPLcom/android/server/adb/AdbService;->access$100(Lcom/android/server/adb/AdbService;)Landroid/util/ArrayMap;
-PLcom/android/server/adb/AdbService;->access$200(Lcom/android/server/adb/AdbService;)Z
+HSPLcom/android/server/adb/AdbService;->access$200(Lcom/android/server/adb/AdbService;)Z
 HSPLcom/android/server/adb/AdbService;->access$202(Lcom/android/server/adb/AdbService;Z)Z
 PLcom/android/server/adb/AdbService;->access$300(Lcom/android/server/adb/AdbService;)Lcom/android/server/adb/AdbDebuggingManager;
 HSPLcom/android/server/adb/AdbService;->access$400(Lcom/android/server/adb/AdbService;)Landroid/content/ContentResolver;
+HSPLcom/android/server/adb/AdbService;->access$500(Lcom/android/server/adb/AdbService;Z)V
+HSPLcom/android/server/adb/AdbService;->access$600(Lcom/android/server/adb/AdbService;)Lcom/android/server/adb/AdbService$AdbHandler;
+PLcom/android/server/adb/AdbService;->allowDebugging(ZLjava/lang/String;)V
 PLcom/android/server/adb/AdbService;->bootCompleted()V
+PLcom/android/server/adb/AdbService;->clearDebuggingKeys()V
+PLcom/android/server/adb/AdbService;->denyDebugging()V
 PLcom/android/server/adb/AdbService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/adb/AdbService;->setAdbEnabled(Z)V
 HSPLcom/android/server/adb/AdbService;->systemReady()V
+PLcom/android/server/am/-$$Lambda$5hokEl5hcign5FXeGZdl53qh2zg;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/am/-$$Lambda$5hokEl5hcign5FXeGZdl53qh2zg;->run()V
+PLcom/android/server/am/-$$Lambda$8usf6utdff9V7wtRbjhmjrLif-w;-><clinit>()V
+PLcom/android/server/am/-$$Lambda$8usf6utdff9V7wtRbjhmjrLif-w;-><init>()V
+PLcom/android/server/am/-$$Lambda$8usf6utdff9V7wtRbjhmjrLif-w;->accept(Ljava/lang/Object;)V
+PLcom/android/server/am/-$$Lambda$ActiveServices$0WENDXD5vmtSS6wlQjMNWJNWoHA;-><init>(Lcom/android/server/am/ActiveServices;Ljava/lang/String;)V
+PLcom/android/server/am/-$$Lambda$ActiveServices$0WENDXD5vmtSS6wlQjMNWJNWoHA;->run()V
 HSPLcom/android/server/am/-$$Lambda$ActivityManagerService$2afaFERxNQEnSdevJxY5plp1fS4;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/-$$Lambda$ActivityManagerService$5$BegFiGFfKLYS7VRmiWluczgOC5k;-><clinit>()V
 PLcom/android/server/am/-$$Lambda$ActivityManagerService$5$BegFiGFfKLYS7VRmiWluczgOC5k;-><init>()V
 HPLcom/android/server/am/-$$Lambda$ActivityManagerService$5$BegFiGFfKLYS7VRmiWluczgOC5k;->needed(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+PLcom/android/server/am/-$$Lambda$ActivityManagerService$Fbs0C_KjUpE0imxFftpdBfeTJpg;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;ILandroid/os/RemoteCallback;)V
+PLcom/android/server/am/-$$Lambda$ActivityManagerService$Fbs0C_KjUpE0imxFftpdBfeTJpg;->onResult(Landroid/os/Bundle;)V
+PLcom/android/server/am/-$$Lambda$ActivityManagerService$LocalService$4G_pzvRw9NHuN5SCKHrZRQVBK5M;-><init>(Lcom/android/server/am/ActivityManagerService$LocalService;Lcom/android/server/wm/ActivityServiceConnectionsHolder;)V
+PLcom/android/server/am/-$$Lambda$ActivityManagerService$LocalService$4G_pzvRw9NHuN5SCKHrZRQVBK5M;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/am/-$$Lambda$ActivityManagerService$Z3G4KWA2tlTOhqhFtAvVby1SjyQ;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/-$$Lambda$ActivityManagerService$Z3G4KWA2tlTOhqhFtAvVby1SjyQ;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/am/-$$Lambda$ActivityManagerService$dLQ66dH4nIti4hweaVJTGHj2tMU;-><clinit>()V
 HSPLcom/android/server/am/-$$Lambda$ActivityManagerService$dLQ66dH4nIti4hweaVJTGHj2tMU;-><init>()V
 HSPLcom/android/server/am/-$$Lambda$ActivityManagerService$dLQ66dH4nIti4hweaVJTGHj2tMU;->needed(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
-PLcom/android/server/am/-$$Lambda$ActivityManagerService$edxAPEC3muKzJql6X4RKsKcgmvo;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+HSPLcom/android/server/am/-$$Lambda$ActivityManagerService$eFxS8Z-_MXzP9a8ro45rBMHy3bk;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/-$$Lambda$ActivityManagerService$eFxS8Z-_MXzP9a8ro45rBMHy3bk;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/am/-$$Lambda$ActivityManagerService$edxAPEC3muKzJql6X4RKsKcgmvo;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/-$$Lambda$ActivityManagerService$edxAPEC3muKzJql6X4RKsKcgmvo;->onLimitReached(I)V
+PLcom/android/server/am/-$$Lambda$ActivityManagerService$fS1-94oynjazWAe2OWfx5p-HXUQ;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/-$$Lambda$ActivityManagerService$qLjSm9VDxOdlZwBZT-qc8uDXM_o;-><clinit>()V
+PLcom/android/server/am/-$$Lambda$ActivityManagerService$qLjSm9VDxOdlZwBZT-qc8uDXM_o;-><init>()V
+HPLcom/android/server/am/-$$Lambda$ActivityManagerService$qLjSm9VDxOdlZwBZT-qc8uDXM_o;->needed(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+HSPLcom/android/server/am/-$$Lambda$ActivityManagerService$sgcouPmrltwdDp2DCHkd89xkLZ4;-><init>(Landroid/os/DropBoxManager;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/am/-$$Lambda$ActivityManagerService$sgcouPmrltwdDp2DCHkd89xkLZ4;->run()V
 HSPLcom/android/server/am/-$$Lambda$ActivityManagerService$w5jCshLsk1jfv4UDTmEfq_HU0OQ;-><init>(Landroid/os/DropBoxManager;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/-$$Lambda$ActivityManagerService$w5jCshLsk1jfv4UDTmEfq_HU0OQ;->run()V
-PLcom/android/server/am/-$$Lambda$AppErrors$Ziph9zXnTzhEV6frMYJe_IEvvfY;-><init>(Lcom/android/server/am/AppErrors;Landroid/app/ApplicationErrorReport$CrashInfo;Ljava/lang/String;ILcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$MJXTdtPzBwRCdTjCDCE77VXPHBk;-><init>(Landroid/os/SynchronousResultReceiver;)V
-HPLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$MJXTdtPzBwRCdTjCDCE77VXPHBk;->onWifiActivityEnergyInfo(Landroid/os/connectivity/WifiActivityEnergyInfo;)V
+PLcom/android/server/am/-$$Lambda$AppErrors$1aFX_-j-MSc0clpKk9XdlBZz9lU;-><init>(Lcom/android/server/am/AppErrors;Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/-$$Lambda$AppErrors$1aFX_-j-MSc0clpKk9XdlBZz9lU;->run()V
+HPLcom/android/server/am/-$$Lambda$AppErrors$Ziph9zXnTzhEV6frMYJe_IEvvfY;-><init>(Lcom/android/server/am/AppErrors;Landroid/app/ApplicationErrorReport$CrashInfo;Ljava/lang/String;ILcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/am/-$$Lambda$AppExitInfoTracker$-wbGBZV07-3wEpce4OUXCzlzxWg;-><init>(Landroid/util/proto/ProtoOutputStream;)V
+PLcom/android/server/am/-$$Lambda$AppExitInfoTracker$-wbGBZV07-3wEpce4OUXCzlzxWg;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/am/-$$Lambda$AppExitInfoTracker$8RmxBGb9aEc0feL90j1NR9guFlc;-><init>(Lcom/android/server/am/AppExitInfoTracker;ILjava/util/ArrayList;ILjava/lang/Integer;Ljava/lang/Integer;)V
+HSPLcom/android/server/am/-$$Lambda$AppExitInfoTracker$8RmxBGb9aEc0feL90j1NR9guFlc;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/am/-$$Lambda$AppExitInfoTracker$AppExitInfoContainer$UGYjMlfjNQLNoNs9jB0lra88GDI;-><clinit>()V
+PLcom/android/server/am/-$$Lambda$AppExitInfoTracker$AppExitInfoContainer$UGYjMlfjNQLNoNs9jB0lra88GDI;-><init>()V
+HPLcom/android/server/am/-$$Lambda$AppExitInfoTracker$AppExitInfoContainer$UGYjMlfjNQLNoNs9jB0lra88GDI;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/am/-$$Lambda$AppExitInfoTracker$AppExitInfoContainer$UJh7jNVpjR6lqMYBGte4jdTlSE0;-><clinit>()V
+PLcom/android/server/am/-$$Lambda$AppExitInfoTracker$AppExitInfoContainer$UJh7jNVpjR6lqMYBGte4jdTlSE0;-><init>()V
+PLcom/android/server/am/-$$Lambda$AppExitInfoTracker$M7pmR3pU58DetrzQsI3M2-go5XU;-><init>(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/am/-$$Lambda$AppExitInfoTracker$M7pmR3pU58DetrzQsI3M2-go5XU;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/am/-$$Lambda$AppExitInfoTracker$UhdolDh03szrz0tHY4ggJ2c_9IQ;-><init>(I)V
+PLcom/android/server/am/-$$Lambda$AppExitInfoTracker$UhdolDh03szrz0tHY4ggJ2c_9IQ;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/am/-$$Lambda$AppExitInfoTracker$Yc6vluAEWPBi2TSflPrFu351ztU;-><init>(Lcom/android/server/am/AppExitInfoTracker;)V
+HSPLcom/android/server/am/-$$Lambda$AppExitInfoTracker$Yc6vluAEWPBi2TSflPrFu351ztU;->run()V
+HPLcom/android/server/am/-$$Lambda$AppExitInfoTracker$e3RqpmVvDTV44W327x1Bbxd4Iqc;-><init>(Lcom/android/server/am/AppExitInfoTracker;ILjava/util/ArrayList;ILjava/lang/Integer;Ljava/lang/Integer;)V
+HPLcom/android/server/am/-$$Lambda$AppExitInfoTracker$e3RqpmVvDTV44W327x1Bbxd4Iqc;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/am/-$$Lambda$AppExitInfoTracker$ykvdMbwZILd9oyb6cyIe3GfomwU;-><init>(Lcom/android/server/am/AppExitInfoTracker;Ljava/io/PrintWriter;Landroid/icu/text/SimpleDateFormat;)V
+PLcom/android/server/am/-$$Lambda$AppExitInfoTracker$ykvdMbwZILd9oyb6cyIe3GfomwU;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$MJXTdtPzBwRCdTjCDCE77VXPHBk;-><init>(Landroid/os/SynchronousResultReceiver;)V
+HSPLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$MJXTdtPzBwRCdTjCDCE77VXPHBk;->onWifiActivityEnergyInfo(Landroid/os/connectivity/WifiActivityEnergyInfo;)V
 HSPLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$ML8sXrbYk0MflPvsY2cfCYlcU0w;-><clinit>()V
 HSPLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$ML8sXrbYk0MflPvsY2cfCYlcU0w;-><init>()V
 HSPLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$ML8sXrbYk0MflPvsY2cfCYlcU0w;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
@@ -3385,37 +5853,63 @@
 HSPLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$ddVY5lmqswnSjXppAxPTOHbuzzQ;->run()V
 HSPLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$r3x3xYmhrLG8kgeNVPXl5EILHwU;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
 HSPLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$r3x3xYmhrLG8kgeNVPXl5EILHwU;->run()V
-PLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$xR3yCbbVfCo3oq_xPiH7j5l5uac;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
+HSPLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$xR3yCbbVfCo3oq_xPiH7j5l5uac;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
+PLcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$xR3yCbbVfCo3oq_xPiH7j5l5uac;->run()V
 HSPLcom/android/server/am/-$$Lambda$BatteryStatsService$ZxbqtJ7ozYmzYFkkNV3m_QRd0Sk;-><init>(Lcom/android/server/am/BatteryStatsService;IIIIIIII)V
 HSPLcom/android/server/am/-$$Lambda$BatteryStatsService$ZxbqtJ7ozYmzYFkkNV3m_QRd0Sk;->run()V
 HSPLcom/android/server/am/-$$Lambda$BatteryStatsService$rRONgIFHr4sujxPESRmo9P5RJ6w;-><init>(Lcom/android/server/am/BatteryStatsService;IIIIIIII)V
 HSPLcom/android/server/am/-$$Lambda$BatteryStatsService$rRONgIFHr4sujxPESRmo9P5RJ6w;->run()V
-PLcom/android/server/am/-$$Lambda$BroadcastQueue$-Rc4kAs41vmqWweLcJR0YLxZ0dM;-><init>(Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;)V
-PLcom/android/server/am/-$$Lambda$BroadcastQueue$-Rc4kAs41vmqWweLcJR0YLxZ0dM;->run()V
+HPLcom/android/server/am/-$$Lambda$BroadcastQueue$-Rc4kAs41vmqWweLcJR0YLxZ0dM;-><init>(Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;)V
+HPLcom/android/server/am/-$$Lambda$BroadcastQueue$-Rc4kAs41vmqWweLcJR0YLxZ0dM;->run()V
+HSPLcom/android/server/am/-$$Lambda$CoreSettingsObserver$IEGGdL9JzvkvDo5ePJ2OAMEVAVs;-><init>(Lcom/android/server/am/CoreSettingsObserver;)V
+PLcom/android/server/am/-$$Lambda$CoreSettingsObserver$IEGGdL9JzvkvDo5ePJ2OAMEVAVs;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
+PLcom/android/server/am/-$$Lambda$F5A5p7evh-7maWNW7K80NbTRjbM;-><init>(Lcom/android/server/am/AppExitInfoTracker;)V
+PLcom/android/server/am/-$$Lambda$F5A5p7evh-7maWNW7K80NbTRjbM;->run()V
 PLcom/android/server/am/-$$Lambda$HKoBBTwYfMTyX1rzuzxIXu0s2cc;-><clinit>()V
 PLcom/android/server/am/-$$Lambda$HKoBBTwYfMTyX1rzuzxIXu0s2cc;-><init>()V
-PLcom/android/server/am/-$$Lambda$HKoBBTwYfMTyX1rzuzxIXu0s2cc;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/am/-$$Lambda$HKoBBTwYfMTyX1rzuzxIXu0s2cc;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/am/-$$Lambda$OomAdjProfiler$oLbVP84ACmxo_1QlnwlSuhi91W4;-><clinit>()V
 HSPLcom/android/server/am/-$$Lambda$OomAdjProfiler$oLbVP84ACmxo_1QlnwlSuhi91W4;-><init>()V
 HSPLcom/android/server/am/-$$Lambda$OomAdjProfiler$oLbVP84ACmxo_1QlnwlSuhi91W4;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/am/-$$Lambda$OomAdjuster$OVkqAAacT5-taN3pgDzyZj3Ymvk;-><clinit>()V
 HSPLcom/android/server/am/-$$Lambda$OomAdjuster$OVkqAAacT5-taN3pgDzyZj3Ymvk;-><init>()V
-HPLcom/android/server/am/-$$Lambda$OomAdjuster$OVkqAAacT5-taN3pgDzyZj3Ymvk;->handleMessage(Landroid/os/Message;)Z
-PLcom/android/server/am/-$$Lambda$PendingIntentRecord$hlEHdgdG_SS5n3v7IRr7e6QZgLQ;-><clinit>()V
-PLcom/android/server/am/-$$Lambda$PendingIntentRecord$hlEHdgdG_SS5n3v7IRr7e6QZgLQ;-><init>()V
-HPLcom/android/server/am/-$$Lambda$PendingIntentRecord$hlEHdgdG_SS5n3v7IRr7e6QZgLQ;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/am/-$$Lambda$OomAdjuster$OVkqAAacT5-taN3pgDzyZj3Ymvk;->handleMessage(Landroid/os/Message;)Z
+PLcom/android/server/am/-$$Lambda$PendingIntentController$pDmmJDvS20vSAAXh9qdzbN0P8N0;-><clinit>()V
+PLcom/android/server/am/-$$Lambda$PendingIntentController$pDmmJDvS20vSAAXh9qdzbN0P8N0;-><init>()V
+PLcom/android/server/am/-$$Lambda$PendingIntentController$pDmmJDvS20vSAAXh9qdzbN0P8N0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/am/-$$Lambda$PendingIntentController$sPmaborOkBSSEP2wiimxXw-eYDQ;-><clinit>()V
+PLcom/android/server/am/-$$Lambda$PendingIntentController$sPmaborOkBSSEP2wiimxXw-eYDQ;-><init>()V
+PLcom/android/server/am/-$$Lambda$PendingIntentController$sPmaborOkBSSEP2wiimxXw-eYDQ;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/am/-$$Lambda$PendingIntentRecord$hlEHdgdG_SS5n3v7IRr7e6QZgLQ;-><clinit>()V
+HSPLcom/android/server/am/-$$Lambda$PendingIntentRecord$hlEHdgdG_SS5n3v7IRr7e6QZgLQ;-><init>()V
+HSPLcom/android/server/am/-$$Lambda$PendingIntentRecord$hlEHdgdG_SS5n3v7IRr7e6QZgLQ;->accept(Ljava/lang/Object;)V
 PLcom/android/server/am/-$$Lambda$PersistentConnection$rkvbuN0FQdQUv1hqSwDvmwwh6Uk;-><init>(Lcom/android/server/am/PersistentConnection;)V
 PLcom/android/server/am/-$$Lambda$PersistentConnection$rkvbuN0FQdQUv1hqSwDvmwwh6Uk;->run()V
 PLcom/android/server/am/-$$Lambda$PersistentConnection$xTW-hnA2hSnEFuF87mUe85RYnfE;-><init>(Lcom/android/server/am/PersistentConnection;)V
+PLcom/android/server/am/-$$Lambda$PersistentConnection$xTW-hnA2hSnEFuF87mUe85RYnfE;->run()V
+HSPLcom/android/server/am/-$$Lambda$ProcessList$hjUwwFAIhoht4KRKnKeUve_Kcto;-><init>(Lcom/android/server/am/ProcessList;)V
+HSPLcom/android/server/am/-$$Lambda$ProcessList$hjUwwFAIhoht4KRKnKeUve_Kcto;->onFileDescriptorEvents(Ljava/io/FileDescriptor;I)I
 HSPLcom/android/server/am/-$$Lambda$ProcessList$vtq7LF5jIHO4t5NE03c8g7BT7Jc;-><init>(Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;[IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
 HSPLcom/android/server/am/-$$Lambda$ProcessList$vtq7LF5jIHO4t5NE03c8g7BT7Jc;->run()V
-PLcom/android/server/am/-$$Lambda$ProcessRecord$1qn6-pj5yWgiSnKANZpVz3gwd30;-><init>(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/-$$Lambda$ProcessRecord$1qn6-pj5yWgiSnKANZpVz3gwd30;-><init>(Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/-$$Lambda$ProcessRecord$2DImTokd0AWNTECl3WgBxJkOOqs;-><init>(Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/-$$Lambda$ProcessRecord$Cb3MKja7_iTlaFQrvQTzPvLyoT8;-><init>(Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/-$$Lambda$ProcessRecord$ErrorDialogController$Pxxn90rYyxqzAxLE-3U2iU5qX6M;-><init>(Lcom/android/server/am/ProcessRecord$ErrorDialogController;)V
+PLcom/android/server/am/-$$Lambda$ProcessRecord$ErrorDialogController$Pxxn90rYyxqzAxLE-3U2iU5qX6M;->run()V
+PLcom/android/server/am/-$$Lambda$ProcessRecord$ErrorDialogController$W-AQD6Azm5daJOusD9r1R26WGBo;-><init>(Lcom/android/server/am/ProcessRecord$ErrorDialogController;)V
+PLcom/android/server/am/-$$Lambda$ProcessRecord$ErrorDialogController$W-AQD6Azm5daJOusD9r1R26WGBo;->run()V
+PLcom/android/server/am/-$$Lambda$ProcessRecord$ErrorDialogController$pOUTBc6k6s3-ZuZYLsjopLU9JWw;-><init>(Lcom/android/server/am/ProcessRecord$ErrorDialogController;)V
+PLcom/android/server/am/-$$Lambda$ProcessRecord$ErrorDialogController$pOUTBc6k6s3-ZuZYLsjopLU9JWw;->run()V
 PLcom/android/server/am/-$$Lambda$ServiceRecord$LibDrdWU9t_vgStZ6swd0FNzHXc;-><init>(Lcom/android/server/am/ServiceRecord;)V
 PLcom/android/server/am/-$$Lambda$ServiceRecord$LibDrdWU9t_vgStZ6swd0FNzHXc;->run()V
 HSPLcom/android/server/am/-$$Lambda$SettingsToPropertiesMapper$oP9A7vTPRZcZgLdy43KKEveF4zQ;-><init>(Lcom/android/server/am/SettingsToPropertiesMapper;)V
 PLcom/android/server/am/-$$Lambda$SettingsToPropertiesMapper$oP9A7vTPRZcZgLdy43KKEveF4zQ;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
+PLcom/android/server/am/-$$Lambda$UserController$2SW3yysxmLLBBPZQ1P-qHVFL46g;-><init>(Lcom/android/server/am/UserController;ILjava/util/List;)V
+PLcom/android/server/am/-$$Lambda$UserController$2SW3yysxmLLBBPZQ1P-qHVFL46g;->run()V
+PLcom/android/server/am/-$$Lambda$UserController$4$7fssIH82Tl96VpliLXcseb8VbZ8;-><init>(Lcom/android/server/am/UserController$4;ILcom/android/server/am/UserState;Z)V
+PLcom/android/server/am/-$$Lambda$UserController$4$7fssIH82Tl96VpliLXcseb8VbZ8;->run()V
+PLcom/android/server/am/-$$Lambda$UserController$4$P3Sj7pxBXLC7k_puCIIki2uVgGE;-><init>(Lcom/android/server/am/UserController$4;ILcom/android/server/am/UserState;)V
+PLcom/android/server/am/-$$Lambda$UserController$4$P3Sj7pxBXLC7k_puCIIki2uVgGE;->run()V
 PLcom/android/server/am/-$$Lambda$UserController$G0WJmqt4X_QG30fRlvXobn18mrE;-><init>(Lcom/android/server/am/UserController;)V
 PLcom/android/server/am/-$$Lambda$UserController$G0WJmqt4X_QG30fRlvXobn18mrE;->run()V
 PLcom/android/server/am/-$$Lambda$UserController$I0p0bKjuvsSPLZB71mKQFfdUjZ4;-><init>(Lcom/android/server/am/UserController;Landroid/content/Intent;III)V
@@ -3424,20 +5918,37 @@
 PLcom/android/server/am/-$$Lambda$UserController$Injector$MYTLl7MOQKjyMJknWdxPeBLoPCc;->run()V
 PLcom/android/server/am/-$$Lambda$UserController$K71HFCIuD0iCwrDTKYnIUDyAeWg;-><init>(Lcom/android/server/am/UserController;Lcom/android/server/am/UserState;)V
 PLcom/android/server/am/-$$Lambda$UserController$K71HFCIuD0iCwrDTKYnIUDyAeWg;->run()V
+PLcom/android/server/am/-$$Lambda$UserController$TdNZVHdOPNd598N3S_XTdc7pt7o;-><init>(Lcom/android/server/am/UserController;ILcom/android/server/am/UserState;Z)V
+PLcom/android/server/am/-$$Lambda$UserController$TdNZVHdOPNd598N3S_XTdc7pt7o;->run()V
+PLcom/android/server/am/-$$Lambda$UserController$WUEqPFGA7TEsxb4dlgZAmMu5O-s;-><init>(Lcom/android/server/am/UserController;IILjava/util/ArrayList;)V
+PLcom/android/server/am/-$$Lambda$UserController$WUEqPFGA7TEsxb4dlgZAmMu5O-s;->run()V
 PLcom/android/server/am/-$$Lambda$UserController$avTAix2Aub5zSKSBBofMYY2qXyk;-><init>(Lcom/android/server/am/UserController;I)V
 PLcom/android/server/am/-$$Lambda$UserController$avTAix2Aub5zSKSBBofMYY2qXyk;->run()V
+PLcom/android/server/am/-$$Lambda$UserController$fU2mcMYCcCOsyUuGHKIUB-nSo1Y;-><init>(Lcom/android/server/am/UserController;ILcom/android/server/am/UserState;)V
+PLcom/android/server/am/-$$Lambda$UserController$fU2mcMYCcCOsyUuGHKIUB-nSo1Y;->run()V
 PLcom/android/server/am/-$$Lambda$UserController$stQk1028ON105v_u-VMykVjcxLk;-><init>(Lcom/android/server/am/UserController;ILcom/android/server/am/UserState;)V
 PLcom/android/server/am/-$$Lambda$UserController$stQk1028ON105v_u-VMykVjcxLk;->run()V
 PLcom/android/server/am/-$$Lambda$Y_KRxxoOXfy-YceuDG7WHd46Y_I;-><clinit>()V
 PLcom/android/server/am/-$$Lambda$Y_KRxxoOXfy-YceuDG7WHd46Y_I;-><init>()V
-PLcom/android/server/am/-$$Lambda$Y_KRxxoOXfy-YceuDG7WHd46Y_I;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/am/-$$Lambda$Y_KRxxoOXfy-YceuDG7WHd46Y_I;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/am/-$$Lambda$gATL8uvTPRd405IfefK1RL9bNqA;-><init>(Landroid/hardware/display/DisplayManagerInternal;)V
-PLcom/android/server/am/-$$Lambda$gATL8uvTPRd405IfefK1RL9bNqA;->run()V
+HSPLcom/android/server/am/-$$Lambda$gATL8uvTPRd405IfefK1RL9bNqA;->run()V
+HSPLcom/android/server/am/-$$Lambda$nvO8eEA3_tju6oGhhJ2BoQfYghg;-><init>(Lcom/android/server/am/AppExitInfoTracker;)V
+PLcom/android/server/am/-$$Lambda$nvO8eEA3_tju6oGhhJ2BoQfYghg;->run()V
+PLcom/android/server/am/-$$Lambda$uR36okKz1QISfNZZ4VonU8JRVDE;-><clinit>()V
+PLcom/android/server/am/-$$Lambda$uR36okKz1QISfNZZ4VonU8JRVDE;-><init>()V
+PLcom/android/server/am/-$$Lambda$uR36okKz1QISfNZZ4VonU8JRVDE;->accept(Ljava/lang/Object;)V
+PLcom/android/server/am/-$$Lambda$wajKhQOjpilT0K4j-1sLOJKYftw;-><clinit>()V
+PLcom/android/server/am/-$$Lambda$wajKhQOjpilT0K4j-1sLOJKYftw;-><init>()V
+PLcom/android/server/am/-$$Lambda$wajKhQOjpilT0K4j-1sLOJKYftw;->accept(Ljava/lang/Object;)V
 PLcom/android/server/am/-$$Lambda$yk1Ms9fVlF6PvprMwF2rru-dw4Q;-><clinit>()V
 PLcom/android/server/am/-$$Lambda$yk1Ms9fVlF6PvprMwF2rru-dw4Q;-><init>()V
 HPLcom/android/server/am/-$$Lambda$yk1Ms9fVlF6PvprMwF2rru-dw4Q;->applyAsLong(Ljava/lang/Object;)J
+PLcom/android/server/am/ActiveInstrumentation;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActiveInstrumentation;->removeProcess(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActiveServices$1;-><init>(Lcom/android/server/am/ActiveServices;)V
-PLcom/android/server/am/ActiveServices$ActiveForegroundApp;-><init>()V
+PLcom/android/server/am/ActiveServices$1;->run()V
+HPLcom/android/server/am/ActiveServices$ActiveForegroundApp;-><init>()V
 HSPLcom/android/server/am/ActiveServices$ForcedStandbyListener;-><init>(Lcom/android/server/am/ActiveServices;)V
 HSPLcom/android/server/am/ActiveServices$ServiceDumper;-><init>(Lcom/android/server/am/ActiveServices;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
 HSPLcom/android/server/am/ActiveServices$ServiceDumper;->dumpHeaderLocked()V
@@ -3449,130 +5960,174 @@
 HSPLcom/android/server/am/ActiveServices$ServiceLookupResult;-><init>(Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ServiceRecord;Ljava/lang/String;)V
 HSPLcom/android/server/am/ActiveServices$ServiceMap;-><init>(Lcom/android/server/am/ActiveServices;Landroid/os/Looper;I)V
 HSPLcom/android/server/am/ActiveServices$ServiceMap;->ensureNotStartingBackgroundLocked(Lcom/android/server/am/ServiceRecord;)V
-PLcom/android/server/am/ActiveServices$ServiceMap;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/am/ActiveServices$ServiceMap;->handleMessage(Landroid/os/Message;)V
 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$1;)V
-PLcom/android/server/am/ActiveServices$ServiceRestarter;->run()V
+HPLcom/android/server/am/ActiveServices$ServiceRestarter;->run()V
 HSPLcom/android/server/am/ActiveServices$ServiceRestarter;->setService(Lcom/android/server/am/ServiceRecord;)V
 HSPLcom/android/server/am/ActiveServices;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActiveServices;->access$200(Lcom/android/server/am/ActiveServices;I)Lcom/android/server/am/ActiveServices$ServiceMap;
-HPLcom/android/server/am/ActiveServices;->appRestrictedAnyInBackground(ILjava/lang/String;)Z
+HSPLcom/android/server/am/ActiveServices;->appIsTopLocked(I)Z
+HSPLcom/android/server/am/ActiveServices;->appRestrictedAnyInBackground(ILjava/lang/String;)Z
 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;ILjava/lang/String;Ljava/lang/String;I)I
-PLcom/android/server/am/ActiveServices;->bringDownDisabledPackageServicesLocked(Ljava/lang/String;Ljava/util/Set;IZZ)Z
-PLcom/android/server/am/ActiveServices;->bringDownServiceIfNeededLocked(Lcom/android/server/am/ServiceRecord;ZZ)V
-HPLcom/android/server/am/ActiveServices;->bringDownServiceLocked(Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices;->bringDownDisabledPackageServicesLocked(Ljava/lang/String;Ljava/util/Set;IZZ)Z
+HSPLcom/android/server/am/ActiveServices;->bringDownServiceIfNeededLocked(Lcom/android/server/am/ServiceRecord;ZZ)V
+HSPLcom/android/server/am/ActiveServices;->bringDownServiceLocked(Lcom/android/server/am/ServiceRecord;)V
 HSPLcom/android/server/am/ActiveServices;->bringUpServiceLocked(Lcom/android/server/am/ServiceRecord;IZZZ)Ljava/lang/String;
 HSPLcom/android/server/am/ActiveServices;->bumpServiceExecutingLocked(Lcom/android/server/am/ServiceRecord;ZLjava/lang/String;)V
-HPLcom/android/server/am/ActiveServices;->cancelForegroundNotificationLocked(Lcom/android/server/am/ServiceRecord;)V
+HSPLcom/android/server/am/ActiveServices;->cancelForegroundNotificationLocked(Lcom/android/server/am/ServiceRecord;)V
 HPLcom/android/server/am/ActiveServices;->cleanUpServices(ILandroid/content/ComponentName;Landroid/content/Intent;)V
-PLcom/android/server/am/ActiveServices;->clearRestartingIfNeededLocked(Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices;->clearRestartingIfNeededLocked(Lcom/android/server/am/ServiceRecord;)V
 HPLcom/android/server/am/ActiveServices;->collectPackageServicesLocked(Ljava/lang/String;Ljava/util/Set;ZZLandroid/util/ArrayMap;)Z
-PLcom/android/server/am/ActiveServices;->decActiveForegroundAppLocked(Lcom/android/server/am/ActiveServices$ServiceMap;Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices;->decActiveForegroundAppLocked(Lcom/android/server/am/ActiveServices$ServiceMap;Lcom/android/server/am/ServiceRecord;)V
 HPLcom/android/server/am/ActiveServices;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/am/ActiveServices;->dumpService(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;IZ)Z
-PLcom/android/server/am/ActiveServices;->dumpService(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Lcom/android/server/am/ServiceRecord;[Ljava/lang/String;Z)V
-PLcom/android/server/am/ActiveServices;->findServiceLocked(Landroid/content/ComponentName;Landroid/os/IBinder;I)Lcom/android/server/am/ServiceRecord;
-PLcom/android/server/am/ActiveServices;->forceStopPackageLocked(Ljava/lang/String;I)V
-PLcom/android/server/am/ActiveServices;->foregroundAppShownEnoughLocked(Lcom/android/server/am/ActiveServices$ActiveForegroundApp;J)Z
-PLcom/android/server/am/ActiveServices;->foregroundServiceProcStateChangedLocked(Lcom/android/server/am/UidRecord;)V
+HPLcom/android/server/am/ActiveServices;->dumpService(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;IZ)Z
+HPLcom/android/server/am/ActiveServices;->dumpService(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Lcom/android/server/am/ServiceRecord;[Ljava/lang/String;Z)V
+HPLcom/android/server/am/ActiveServices;->findServiceLocked(Landroid/content/ComponentName;Landroid/os/IBinder;I)Lcom/android/server/am/ServiceRecord;
+HPLcom/android/server/am/ActiveServices;->forceStopPackageLocked(Ljava/lang/String;I)V
+HPLcom/android/server/am/ActiveServices;->foregroundAppShownEnoughLocked(Lcom/android/server/am/ActiveServices$ActiveForegroundApp;J)Z
+HPLcom/android/server/am/ActiveServices;->foregroundServiceProcStateChangedLocked(Lcom/android/server/am/UidRecord;)V
+HSPLcom/android/server/am/ActiveServices;->getAllowMode(Landroid/content/Intent;Ljava/lang/String;)I
 HPLcom/android/server/am/ActiveServices;->getRunningServiceInfoLocked(IIIZZ)Ljava/util/List;
-PLcom/android/server/am/ActiveServices;->getServiceByNameLocked(Landroid/content/ComponentName;I)Lcom/android/server/am/ServiceRecord;
+HPLcom/android/server/am/ActiveServices;->getServiceByNameLocked(Landroid/content/ComponentName;I)Lcom/android/server/am/ServiceRecord;
 HSPLcom/android/server/am/ActiveServices;->getServiceMapLocked(I)Lcom/android/server/am/ActiveServices$ServiceMap;
 PLcom/android/server/am/ActiveServices;->getServicesLocked(I)Landroid/util/ArrayMap;
-PLcom/android/server/am/ActiveServices;->hasBackgroundServicesLocked(I)Z
+HPLcom/android/server/am/ActiveServices;->hasBackgroundServicesLocked(I)Z
 HSPLcom/android/server/am/ActiveServices;->isServiceNeededLocked(Lcom/android/server/am/ServiceRecord;ZZ)Z
+PLcom/android/server/am/ActiveServices;->killMisbehavingService(Lcom/android/server/am/ServiceRecord;IILjava/lang/String;)V
 HSPLcom/android/server/am/ActiveServices;->killServicesLocked(Lcom/android/server/am/ProcessRecord;Z)V
+PLcom/android/server/am/ActiveServices;->lambda$showWhileInUsePermissionInFgsBlockedToastLocked$0$ActiveServices(Ljava/lang/String;)V
 HPLcom/android/server/am/ActiveServices;->makeRunningServiceInfoLocked(Lcom/android/server/am/ServiceRecord;)Landroid/app/ActivityManager$RunningServiceInfo;
 HSPLcom/android/server/am/ActiveServices;->newServiceDumperLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)Lcom/android/server/am/ActiveServices$ServiceDumper;
-PLcom/android/server/am/ActiveServices;->performServiceRestartLocked(Lcom/android/server/am/ServiceRecord;)V
+PLcom/android/server/am/ActiveServices;->peekServiceLocked(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;)Landroid/os/IBinder;
+HPLcom/android/server/am/ActiveServices;->performServiceRestartLocked(Lcom/android/server/am/ServiceRecord;)V
+PLcom/android/server/am/ActiveServices;->processStartTimedOutLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActiveServices;->publishServiceLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;Landroid/os/IBinder;)V
 HSPLcom/android/server/am/ActiveServices;->realStartServiceLocked(Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ProcessRecord;Z)V
-HPLcom/android/server/am/ActiveServices;->removeConnectionLocked(Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ProcessRecord;Lcom/android/server/wm/ActivityServiceConnectionsHolder;)V
+HSPLcom/android/server/am/ActiveServices;->removeConnectionLocked(Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ProcessRecord;Lcom/android/server/wm/ActivityServiceConnectionsHolder;)V
 HSPLcom/android/server/am/ActiveServices;->requestServiceBindingLocked(Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/IntentBindRecord;ZZ)Z
 HSPLcom/android/server/am/ActiveServices;->requestServiceBindingsLocked(Lcom/android/server/am/ServiceRecord;Z)V
 HSPLcom/android/server/am/ActiveServices;->requestStartTargetPermissionsReviewIfNeededLocked(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;ILandroid/content/Intent;ZI)Z
-PLcom/android/server/am/ActiveServices;->requestUpdateActiveForegroundAppsLocked(Lcom/android/server/am/ActiveServices$ServiceMap;J)V
+HPLcom/android/server/am/ActiveServices;->requestUpdateActiveForegroundAppsLocked(Lcom/android/server/am/ActiveServices$ServiceMap;J)V
 HSPLcom/android/server/am/ActiveServices;->retrieveServiceLocked(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIZZZZ)Lcom/android/server/am/ActiveServices$ServiceLookupResult;
-PLcom/android/server/am/ActiveServices;->scheduleServiceForegroundTransitionTimeoutLocked(Lcom/android/server/am/ServiceRecord;)V
-PLcom/android/server/am/ActiveServices;->scheduleServiceRestartLocked(Lcom/android/server/am/ServiceRecord;Z)Z
+HPLcom/android/server/am/ActiveServices;->scheduleServiceForegroundTransitionTimeoutLocked(Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices;->scheduleServiceRestartLocked(Lcom/android/server/am/ServiceRecord;Z)Z
 HSPLcom/android/server/am/ActiveServices;->scheduleServiceTimeoutLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActiveServices;->sendServiceArgsLocked(Lcom/android/server/am/ServiceRecord;ZZ)V
 HSPLcom/android/server/am/ActiveServices;->serviceDoneExecutingLocked(Lcom/android/server/am/ServiceRecord;III)V
 HSPLcom/android/server/am/ActiveServices;->serviceDoneExecutingLocked(Lcom/android/server/am/ServiceRecord;ZZ)V
-PLcom/android/server/am/ActiveServices;->serviceProcessGoneLocked(Lcom/android/server/am/ServiceRecord;)V
-PLcom/android/server/am/ActiveServices;->serviceTimeout(Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/ActiveServices;->setServiceForegroundInnerLocked(Lcom/android/server/am/ServiceRecord;ILandroid/app/Notification;II)V
-PLcom/android/server/am/ActiveServices;->setServiceForegroundLocked(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;II)V
+PLcom/android/server/am/ActiveServices;->serviceForegroundCrash(Lcom/android/server/am/ProcessRecord;Ljava/lang/CharSequence;)V
+HPLcom/android/server/am/ActiveServices;->serviceForegroundTimeout(Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices;->serviceProcessGoneLocked(Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices;->serviceTimeout(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActiveServices;->setServiceForegroundInnerLocked(Lcom/android/server/am/ServiceRecord;ILandroid/app/Notification;II)V
+HPLcom/android/server/am/ActiveServices;->setServiceForegroundLocked(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;II)V
+HSPLcom/android/server/am/ActiveServices;->shouldAllowWhileInUsePermissionInFgsLocked(Ljava/lang/String;ILandroid/content/Intent;Lcom/android/server/am/ServiceRecord;Z)Z
+HPLcom/android/server/am/ActiveServices;->showWhileInUseDebugToastLocked(III)V
+PLcom/android/server/am/ActiveServices;->showWhileInUsePermissionInFgsBlockedToastLocked(Ljava/lang/String;)V
 HSPLcom/android/server/am/ActiveServices;->startServiceInnerLocked(Lcom/android/server/am/ActiveServices$ServiceMap;Landroid/content/Intent;Lcom/android/server/am/ServiceRecord;ZZ)Landroid/content/ComponentName;
 HSPLcom/android/server/am/ActiveServices;->startServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IIZLjava/lang/String;I)Landroid/content/ComponentName;
 HSPLcom/android/server/am/ActiveServices;->startServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IIZLjava/lang/String;IZ)Landroid/content/ComponentName;
+HPLcom/android/server/am/ActiveServices;->stopAllForegroundServicesLocked(ILjava/lang/String;)V
 HSPLcom/android/server/am/ActiveServices;->stopInBackgroundLocked(I)V
-PLcom/android/server/am/ActiveServices;->stopServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;I)I
-PLcom/android/server/am/ActiveServices;->stopServiceLocked(Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices;->stopServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;I)I
+HPLcom/android/server/am/ActiveServices;->stopServiceLocked(Lcom/android/server/am/ServiceRecord;)V
 HPLcom/android/server/am/ActiveServices;->stopServiceTokenLocked(Landroid/content/ComponentName;Landroid/os/IBinder;I)Z
 HSPLcom/android/server/am/ActiveServices;->systemServicesReady()V
-PLcom/android/server/am/ActiveServices;->unbindFinishedLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;Z)V
-HPLcom/android/server/am/ActiveServices;->unbindServiceLocked(Landroid/app/IServiceConnection;)Z
+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
 HSPLcom/android/server/am/ActiveServices;->unscheduleServiceRestartLocked(Lcom/android/server/am/ServiceRecord;IZ)Z
-PLcom/android/server/am/ActiveServices;->updateForegroundApps(Lcom/android/server/am/ActiveServices$ServiceMap;)V
-PLcom/android/server/am/ActiveServices;->updateScreenStateLocked(Z)V
+HPLcom/android/server/am/ActiveServices;->updateForegroundApps(Lcom/android/server/am/ActiveServices$ServiceMap;)V
+HPLcom/android/server/am/ActiveServices;->updateScreenStateLocked(Z)V
 HPLcom/android/server/am/ActiveServices;->updateServiceApplicationInfoLocked(Landroid/content/pm/ApplicationInfo;)V
 HSPLcom/android/server/am/ActiveServices;->updateServiceClientActivitiesLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ConnectionRecord;Z)Z
 HSPLcom/android/server/am/ActiveServices;->updateServiceConnectionActivitiesLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActiveServices;->updateServiceForegroundLocked(Lcom/android/server/am/ProcessRecord;Z)V
-HPLcom/android/server/am/ActiveServices;->updateWhitelistManagerLocked(Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ActiveServices;->updateServiceGroupLocked(Landroid/app/IServiceConnection;II)V
+HSPLcom/android/server/am/ActiveServices;->updateWhitelistManagerLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActiveUids;-><init>(Lcom/android/server/am/ActivityManagerService;Z)V
 HSPLcom/android/server/am/ActiveUids;->clear()V
 HSPLcom/android/server/am/ActiveUids;->get(I)Lcom/android/server/am/UidRecord;
+HPLcom/android/server/am/ActiveUids;->keyAt(I)I
 HSPLcom/android/server/am/ActiveUids;->put(ILcom/android/server/am/UidRecord;)V
 HSPLcom/android/server/am/ActiveUids;->remove(I)V
 HSPLcom/android/server/am/ActiveUids;->size()I
 HSPLcom/android/server/am/ActiveUids;->valueAt(I)Lcom/android/server/am/UidRecord;
 HSPLcom/android/server/am/ActivityManagerConstants$1;-><init>(Lcom/android/server/am/ActivityManagerConstants;)V
-PLcom/android/server/am/ActivityManagerConstants$1;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
+HSPLcom/android/server/am/ActivityManagerConstants$1;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/am/ActivityManagerConstants;-><clinit>()V
 HSPLcom/android/server/am/ActivityManagerConstants;-><init>(Landroid/content/Context;Lcom/android/server/am/ActivityManagerService;Landroid/os/Handler;)V
-PLcom/android/server/am/ActivityManagerConstants;->access$000(Lcom/android/server/am/ActivityManagerConstants;)V
+HSPLcom/android/server/am/ActivityManagerConstants;->access$000(Lcom/android/server/am/ActivityManagerConstants;)V
+PLcom/android/server/am/ActivityManagerConstants;->access$100(Lcom/android/server/am/ActivityManagerConstants;)V
 HSPLcom/android/server/am/ActivityManagerConstants;->computeEmptyProcessLimit(I)I
-PLcom/android/server/am/ActivityManagerConstants;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/am/ActivityManagerConstants;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/am/ActivityManagerConstants;->getOverrideMaxCachedProcesses()I
+HSPLcom/android/server/am/ActivityManagerConstants;->loadDeviceConfigConstants()V
+PLcom/android/server/am/ActivityManagerConstants;->onChange(ZLandroid/net/Uri;)V
+PLcom/android/server/am/ActivityManagerConstants;->setOverrideMaxCachedProcesses(I)V
 HSPLcom/android/server/am/ActivityManagerConstants;->start(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/am/ActivityManagerConstants;->updateActivityStartsLoggingEnabled()V
 HSPLcom/android/server/am/ActivityManagerConstants;->updateBackgroundActivityStarts()V
+HSPLcom/android/server/am/ActivityManagerConstants;->updateBackgroundFgsStartsRestriction()V
 HSPLcom/android/server/am/ActivityManagerConstants;->updateConstants()V
+HSPLcom/android/server/am/ActivityManagerConstants;->updateForceRestrictedBackgroundCheck()V
+HSPLcom/android/server/am/ActivityManagerConstants;->updateForegroundServiceStartsLoggingEnabled()V
+HSPLcom/android/server/am/ActivityManagerConstants;->updateImperceptibleKillExemptions()V
 HSPLcom/android/server/am/ActivityManagerConstants;->updateMaxCachedProcesses()V
 HSPLcom/android/server/am/ActivityManagerConstants;->updateOomAdjUpdatePolicy()V
 PLcom/android/server/am/ActivityManagerService$10;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+HPLcom/android/server/am/ActivityManagerService$10;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/am/ActivityManagerService$11;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService$11;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
-PLcom/android/server/am/ActivityManagerService$12;-><init>(Lcom/android/server/am/ActivityManagerService;ILandroid/os/IBinder;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService$12;-><init>(Lcom/android/server/am/ActivityManagerService;ILandroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService$13;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ActivityManagerService$13;->run()V
 PLcom/android/server/am/ActivityManagerService$14;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/am/ActivityManagerService$15;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/am/ActivityManagerService$15;->run()V
 PLcom/android/server/am/ActivityManagerService$17;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService$17;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
+HSPLcom/android/server/am/ActivityManagerService$18;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+HSPLcom/android/server/am/ActivityManagerService$18;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 PLcom/android/server/am/ActivityManagerService$19;-><init>(Lcom/android/server/am/ActivityManagerService;IILandroid/os/IBinder;Ljava/lang/String;Landroid/app/ApplicationErrorReport$ParcelableCrashInfo;)V
+PLcom/android/server/am/ActivityManagerService$19;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Handler;Landroid/content/Context;)V
+PLcom/android/server/am/ActivityManagerService$19;->onChange(Z)V
 PLcom/android/server/am/ActivityManagerService$19;->run()V
 HSPLcom/android/server/am/ActivityManagerService$1;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService$1;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/am/ActivityManagerService$1;->dumpCritical(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/am/ActivityManagerService$1;->dumpNormal(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
+HSPLcom/android/server/am/ActivityManagerService$20;-><init>(Lcom/android/server/am/ActivityManagerService;IILandroid/os/IBinder;Ljava/lang/String;Landroid/app/ApplicationErrorReport$ParcelableCrashInfo;)V
 HSPLcom/android/server/am/ActivityManagerService$20;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;Ljava/lang/String;Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/io/File;Landroid/app/ApplicationErrorReport$CrashInfo;Landroid/os/DropBoxManager;)V
 HSPLcom/android/server/am/ActivityManagerService$20;->run()V
 HSPLcom/android/server/am/ActivityManagerService$21;-><init>()V
+HSPLcom/android/server/am/ActivityManagerService$21;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;Ljava/lang/String;Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/io/File;Landroid/app/ApplicationErrorReport$CrashInfo;Landroid/os/DropBoxManager;)V
 HSPLcom/android/server/am/ActivityManagerService$21;->compare(Landroid/util/Pair;Landroid/util/Pair;)I
 HSPLcom/android/server/am/ActivityManagerService$21;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLcom/android/server/am/ActivityManagerService$21;->run()V
+PLcom/android/server/am/ActivityManagerService$22;-><init>()V
 PLcom/android/server/am/ActivityManagerService$22;-><init>(Z)V
+HPLcom/android/server/am/ActivityManagerService$22;->compare(Landroid/util/Pair;Landroid/util/Pair;)I
 PLcom/android/server/am/ActivityManagerService$22;->compare(Lcom/android/server/am/ActivityManagerService$MemItem;Lcom/android/server/am/ActivityManagerService$MemItem;)I
 HPLcom/android/server/am/ActivityManagerService$22;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/am/ActivityManagerService$23;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActivityManagerService$23;-><init>(Z)V
+HPLcom/android/server/am/ActivityManagerService$23;->compare(Lcom/android/server/am/ActivityManagerService$MemItem;Lcom/android/server/am/ActivityManagerService$MemItem;)I
 HSPLcom/android/server/am/ActivityManagerService$23;->compare(Lcom/android/server/am/ProcessMemInfo;Lcom/android/server/am/ProcessMemInfo;)I
 HSPLcom/android/server/am/ActivityManagerService$23;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/am/ActivityManagerService$24;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+HPLcom/android/server/am/ActivityManagerService$24;->compare(Lcom/android/server/am/ProcessMemInfo;Lcom/android/server/am/ProcessMemInfo;)I
+HPLcom/android/server/am/ActivityManagerService$24;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/am/ActivityManagerService$25;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ActivityManagerService$25;->run()V
 HSPLcom/android/server/am/ActivityManagerService$2;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService$2;->onActivityLaunchCancelled([B)V
-PLcom/android/server/am/ActivityManagerService$2;->onActivityLaunchFinished([BJ)V
-PLcom/android/server/am/ActivityManagerService$2;->onActivityLaunched([BI)V
-PLcom/android/server/am/ActivityManagerService$2;->onIntentFailed()V
-PLcom/android/server/am/ActivityManagerService$2;->onIntentStarted(Landroid/content/Intent;J)V
+HPLcom/android/server/am/ActivityManagerService$2;->onActivityLaunchFinished([BJ)V
+HSPLcom/android/server/am/ActivityManagerService$2;->onActivityLaunched([BI)V
+HPLcom/android/server/am/ActivityManagerService$2;->onIntentFailed()V
+HSPLcom/android/server/am/ActivityManagerService$2;->onIntentStarted(Landroid/content/Intent;J)V
 PLcom/android/server/am/ActivityManagerService$2;->onReportFullyDrawn([BJ)V
 HSPLcom/android/server/am/ActivityManagerService$3;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService$3;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
@@ -3580,17 +6135,21 @@
 HSPLcom/android/server/am/ActivityManagerService$4;->allowFilterResult(Landroid/content/IntentFilter;Ljava/util/List;)Z
 HSPLcom/android/server/am/ActivityManagerService$4;->allowFilterResult(Lcom/android/server/am/BroadcastFilter;Ljava/util/List;)Z
 HPLcom/android/server/am/ActivityManagerService$4;->isPackageForFilter(Ljava/lang/String;Landroid/content/IntentFilter;)Z
-PLcom/android/server/am/ActivityManagerService$4;->isPackageForFilter(Ljava/lang/String;Lcom/android/server/am/BroadcastFilter;)Z
+HPLcom/android/server/am/ActivityManagerService$4;->isPackageForFilter(Ljava/lang/String;Lcom/android/server/am/BroadcastFilter;)Z
 HSPLcom/android/server/am/ActivityManagerService$4;->newArray(I)[Landroid/content/IntentFilter;
 HSPLcom/android/server/am/ActivityManagerService$4;->newArray(I)[Lcom/android/server/am/BroadcastFilter;
 HSPLcom/android/server/am/ActivityManagerService$4;->newResult(Landroid/content/IntentFilter;II)Ljava/lang/Object;
 HSPLcom/android/server/am/ActivityManagerService$4;->newResult(Lcom/android/server/am/BroadcastFilter;II)Lcom/android/server/am/BroadcastFilter;
 HSPLcom/android/server/am/ActivityManagerService$5;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Looper;)V
 HPLcom/android/server/am/ActivityManagerService$5;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/am/ActivityManagerService$5;->lambda$handleMessage$0(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+HPLcom/android/server/am/ActivityManagerService$5;->lambda$handleMessage$0(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
 HSPLcom/android/server/am/ActivityManagerService$6;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService$7;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService$7;->run()V
+PLcom/android/server/am/ActivityManagerService$8;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/pm/ApplicationInfo;IZIILandroid/content/pm/IPackageDataObserver;)V
+PLcom/android/server/am/ActivityManagerService$8;->onRemoveCompleted(Ljava/lang/String;Z)V
+PLcom/android/server/am/ActivityManagerService$9;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ActivityManagerService$9;->run()V
 HSPLcom/android/server/am/ActivityManagerService$AppDeathRecipient;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;ILandroid/app/IApplicationThread;)V
 HSPLcom/android/server/am/ActivityManagerService$AppDeathRecipient;->binderDied()V
 HSPLcom/android/server/am/ActivityManagerService$CpuBinder$1;-><init>(Lcom/android/server/am/ActivityManagerService$CpuBinder;)V
@@ -3601,87 +6160,109 @@
 PLcom/android/server/am/ActivityManagerService$DbBinder;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService$DevelopmentSettingsObserver;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService$DevelopmentSettingsObserver;->onChange()V
+PLcom/android/server/am/ActivityManagerService$DevelopmentSettingsObserver;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/am/ActivityManagerService$GraphicsBinder;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService$GraphicsBinder;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService$HiddenApiSettings;-><init>(Landroid/os/Handler;Landroid/content/Context;)V
 HSPLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->getPolicy()I
 HSPLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->getValidEnforcementPolicy(Ljava/lang/String;)I
 HSPLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->isDisabled()Z
+PLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->onChange(Z)V
 PLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->registerObserver()V
 HSPLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->update()V
-PLcom/android/server/am/ActivityManagerService$ImportanceToken;-><init>(Lcom/android/server/am/ActivityManagerService;ILandroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService$Identity;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/IBinder;II)V
+HPLcom/android/server/am/ActivityManagerService$ImportanceToken;-><init>(Lcom/android/server/am/ActivityManagerService;ILandroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService$ImportanceToken;->toString()Ljava/lang/String;
 HSPLcom/android/server/am/ActivityManagerService$Injector;-><init>(Landroid/content/Context;)V
-PLcom/android/server/am/ActivityManagerService$Injector;->ensureHasNetworkManagementInternal()Z
+HSPLcom/android/server/am/ActivityManagerService$Injector;->ensureHasNetworkManagementInternal()Z
 HSPLcom/android/server/am/ActivityManagerService$Injector;->getAppOpsService(Ljava/io/File;Landroid/os/Handler;)Lcom/android/server/appop/AppOpsService;
+HSPLcom/android/server/am/ActivityManagerService$Injector;->getProcessList(Lcom/android/server/am/ActivityManagerService;)Lcom/android/server/am/ProcessList;
 HSPLcom/android/server/am/ActivityManagerService$Injector;->getUiHandler(Lcom/android/server/am/ActivityManagerService;)Landroid/os/Handler;
 HSPLcom/android/server/am/ActivityManagerService$Injector;->isNetworkRestrictedForUid(I)Z
 HSPLcom/android/server/am/ActivityManagerService$IntentFirewallInterface;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService$IntentFirewallInterface;->getAMSLock()Ljava/lang/Object;
 HSPLcom/android/server/am/ActivityManagerService$ItemMatcher;-><init>()V
+PLcom/android/server/am/ActivityManagerService$ItemMatcher;->build(Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService$ItemMatcher;->build([Ljava/lang/String;I)I
 HSPLcom/android/server/am/ActivityManagerService$ItemMatcher;->match(Ljava/lang/Object;Landroid/content/ComponentName;)Z
 HSPLcom/android/server/am/ActivityManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/am/ActivityManagerService$Lifecycle;->getService()Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/am/ActivityManagerService$Lifecycle;->onCleanupUser(I)V
 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
-PLcom/android/server/am/ActivityManagerService$LocalService;->broadcastCloseSystemDialogs(Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->broadcastCloseSystemDialogs(Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->broadcastGlobalConfigurationChanged(IZ)V
 HPLcom/android/server/am/ActivityManagerService$LocalService;->broadcastIntentInPackage(Ljava/lang/String;IIILandroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;Ljava/lang/String;Landroid/os/Bundle;ZZIZ)I
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->checkContentProviderAccess(Ljava/lang/String;I)Ljava/lang/String;
-PLcom/android/server/am/ActivityManagerService$LocalService;->cleanUpServices(ILandroid/content/ComponentName;Landroid/content/Intent;)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->cleanUpServices(ILandroid/content/ComponentName;Landroid/content/Intent;)V
 PLcom/android/server/am/ActivityManagerService$LocalService;->clearPendingBackup(I)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->clearPendingIntentAllowBgActivityStarts(Landroid/content/IIntentSender;Landroid/os/IBinder;)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->clearPendingIntentAllowBgActivityStarts(Landroid/content/IIntentSender;Landroid/os/IBinder;)V
+PLcom/android/server/am/ActivityManagerService$LocalService;->disconnectActivityFromServices(Ljava/lang/Object;)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->disconnectActivityFromServices(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/am/ActivityManagerService$LocalService;->ensureNotSpecialUser(I)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->finishBooting()V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->finishBooting()V
 PLcom/android/server/am/ActivityManagerService$LocalService;->getActivityInfoForUser(Landroid/content/pm/ActivityInfo;I)Landroid/content/pm/ActivityInfo;
 PLcom/android/server/am/ActivityManagerService$LocalService;->getActivityPresentationInfo(Landroid/os/IBinder;)Landroid/content/pm/ActivityPresentationInfo;
-PLcom/android/server/am/ActivityManagerService$LocalService;->getCurrentProfileIds()[I
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->getCurrentProfileIds()[I
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->getCurrentUserId()I
 HPLcom/android/server/am/ActivityManagerService$LocalService;->getMemoryStateForProcesses()Ljava/util/List;
 PLcom/android/server/am/ActivityManagerService$LocalService;->getTaskIdForActivity(Landroid/os/IBinder;Z)I
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->getUidProcessState(I)I
-PLcom/android/server/am/ActivityManagerService$LocalService;->handleIncomingUser(IIIZILjava/lang/String;Ljava/lang/String;)I
-PLcom/android/server/am/ActivityManagerService$LocalService;->hasStartedUserState(I)Z
-HPLcom/android/server/am/ActivityManagerService$LocalService;->isAppBad(Landroid/content/pm/ApplicationInfo;)Z
-PLcom/android/server/am/ActivityManagerService$LocalService;->isAppForeground(I)Z
-PLcom/android/server/am/ActivityManagerService$LocalService;->isBooted()Z
-PLcom/android/server/am/ActivityManagerService$LocalService;->isBooting()Z
+HPLcom/android/server/am/ActivityManagerService$LocalService;->handleIncomingUser(IIIZILjava/lang/String;Ljava/lang/String;)I
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->hasStartedUserState(I)Z
+PLcom/android/server/am/ActivityManagerService$LocalService;->inputDispatchingTimedOut(IZLjava/lang/String;)J
+PLcom/android/server/am/ActivityManagerService$LocalService;->inputDispatchingTimedOut(Ljava/lang/Object;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Ljava/lang/Object;ZLjava/lang/String;)Z
+PLcom/android/server/am/ActivityManagerService$LocalService;->isActivityStartsLoggingEnabled()Z
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->isAppBad(Landroid/content/pm/ApplicationInfo;)Z
+HPLcom/android/server/am/ActivityManagerService$LocalService;->isAppForeground(I)Z
+PLcom/android/server/am/ActivityManagerService$LocalService;->isBackgroundActivityStartsEnabled()Z
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->isBooted()Z
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->isBooting()Z
 HPLcom/android/server/am/ActivityManagerService$LocalService;->isCurrentProfile(I)Z
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isRuntimeRestarted()Z
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isSplitConfigurationChange(I)Z
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isSystemReady()Z
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isUidActive(I)Z
-HPLcom/android/server/am/ActivityManagerService$LocalService;->isUserRunning(II)Z
+PLcom/android/server/am/ActivityManagerService$LocalService;->isUidCurrentlyInstrumented(I)Z
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->isUserRunning(II)Z
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->killAllBackgroundProcessesExcept(II)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->killProcessesForRemovedTask(Ljava/util/ArrayList;)V
-HPLcom/android/server/am/ActivityManagerService$LocalService;->notifyNetworkPolicyRulesUpdated(IJ)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->onWakefulnessChanged(I)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->killForegroundAppsForUser(I)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->killProcessesForRemovedTask(Ljava/util/ArrayList;)V
+PLcom/android/server/am/ActivityManagerService$LocalService;->lambda$disconnectActivityFromServices$1$ActivityManagerService$LocalService(Lcom/android/server/wm/ActivityServiceConnectionsHolder;Ljava/lang/Object;)V
+PLcom/android/server/am/ActivityManagerService$LocalService;->monitor()V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->notifyNetworkPolicyRulesUpdated(IJ)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->onWakefulnessChanged(I)V
+PLcom/android/server/am/ActivityManagerService$LocalService;->prepareForPossibleShutdown()V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->registerProcessObserver(Landroid/app/IProcessObserver;)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->reportCurKeyguardUsageEvent(Z)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->scheduleAppGcs()V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->reportCurKeyguardUsageEvent(Z)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->scheduleAppGcs()V
 PLcom/android/server/am/ActivityManagerService$LocalService;->sendForegroundProfileChanged(I)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->setBooted(Z)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->setBooting(Z)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->setBooted(Z)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->setBooting(Z)V
+PLcom/android/server/am/ActivityManagerService$LocalService;->setDebugFlagsForStartingActivity(Landroid/content/pm/ActivityInfo;ILandroid/app/ProfilerInfo;Ljava/lang/Object;)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->setDeviceIdleWhitelist([I[I)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->setHasOverlayUi(IZ)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->setHasOverlayUi(IZ)V
 HPLcom/android/server/am/ActivityManagerService$LocalService;->setPendingIntentAllowBgActivityStarts(Landroid/content/IIntentSender;Landroid/os/IBinder;I)V
 HPLcom/android/server/am/ActivityManagerService$LocalService;->setPendingIntentWhitelistDuration(Landroid/content/IIntentSender;Landroid/os/IBinder;J)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->shouldConfirmCredentials(I)Z
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->setSwitchingFromSystemUserMessage(Ljava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->setSwitchingToSystemUserMessage(Ljava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->shouldConfirmCredentials(I)Z
+PLcom/android/server/am/ActivityManagerService$LocalService;->showWhileInUseDebugToast(III)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->startIsolatedProcess(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Runnable;)Z
-PLcom/android/server/am/ActivityManagerService$LocalService;->startProcess(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;ZZLjava/lang/String;Landroid/content/ComponentName;)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->startProcess(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;ZZLjava/lang/String;Landroid/content/ComponentName;)V
 HPLcom/android/server/am/ActivityManagerService$LocalService;->startServiceInPackage(ILandroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;IZ)Landroid/content/ComponentName;
-PLcom/android/server/am/ActivityManagerService$LocalService;->tempWhitelistForPendingIntent(IIIJLjava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->trimApplications()V
-PLcom/android/server/am/ActivityManagerService$LocalService;->updateActivityUsageStats(Landroid/content/ComponentName;IILandroid/os/IBinder;Landroid/content/ComponentName;)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->updateBatteryStats(Landroid/content/ComponentName;IIZ)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->updateCpuStats()V
-PLcom/android/server/am/ActivityManagerService$LocalService;->updateDeviceIdleTempWhitelist([IIZ)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->updateForegroundTimeIfOnBattery(Ljava/lang/String;IJ)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->updateOomAdj()V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->tempWhitelistForPendingIntent(IIIJLjava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->trimApplications()V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->updateActivityUsageStats(Landroid/content/ComponentName;IILandroid/os/IBinder;Landroid/content/ComponentName;)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->updateBatteryStats(Landroid/content/ComponentName;IIZ)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->updateCpuStats()V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->updateDeviceIdleTempWhitelist([IIZ)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->updateForegroundTimeIfOnBattery(Ljava/lang/String;IJ)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->updateOomAdj()V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->updateOomLevelsForDisplay(I)V
 HSPLcom/android/server/am/ActivityManagerService$MainHandler$1;-><init>(Lcom/android/server/am/ActivityManagerService$MainHandler;Ljava/util/ArrayList;)V
 HSPLcom/android/server/am/ActivityManagerService$MainHandler$1;->run()V
@@ -3691,36 +6272,46 @@
 PLcom/android/server/am/ActivityManagerService$MemBinder$1;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/am/ActivityManagerService$MemBinder$1;->dumpHigh(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 HSPLcom/android/server/am/ActivityManagerService$MemBinder;-><init>(Lcom/android/server/am/ActivityManagerService;)V
-PLcom/android/server/am/ActivityManagerService$MemBinder;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService$MemItem;-><init>(Ljava/lang/String;Ljava/lang/String;JJJI)V
+HPLcom/android/server/am/ActivityManagerService$MemBinder;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService$MemItem;-><init>(Ljava/lang/String;Ljava/lang/String;JJJI)V
 HPLcom/android/server/am/ActivityManagerService$MemItem;-><init>(Ljava/lang/String;Ljava/lang/String;JJJIZ)V
 PLcom/android/server/am/ActivityManagerService$MemoryUsageDumpOptions;-><init>()V
 PLcom/android/server/am/ActivityManagerService$MemoryUsageDumpOptions;-><init>(Lcom/android/server/am/ActivityManagerService$1;)V
 HSPLcom/android/server/am/ActivityManagerService$PackageAssociationInfo;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;Landroid/util/ArraySet;Z)V
+PLcom/android/server/am/ActivityManagerService$PackageAssociationInfo;->getAllowedPackageAssociations()Landroid/util/ArraySet;
+PLcom/android/server/am/ActivityManagerService$PackageAssociationInfo;->isDebuggable()Z
 HPLcom/android/server/am/ActivityManagerService$PackageAssociationInfo;->isPackageAssociationAllowed(Ljava/lang/String;)Z
+PLcom/android/server/am/ActivityManagerService$PackageAssociationInfo;->setDebuggable(Z)V
 HPLcom/android/server/am/ActivityManagerService$PendingTempWhitelist;-><init>(IJLjava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService$PermissionController;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService$PermissionController;->checkPermission(Ljava/lang/String;II)Z
-PLcom/android/server/am/ActivityManagerService$PermissionController;->getPackagesForUid(I)[Ljava/lang/String;
+HSPLcom/android/server/am/ActivityManagerService$PermissionController;->getPackagesForUid(I)[Ljava/lang/String;
 HSPLcom/android/server/am/ActivityManagerService$PermissionController;->isRuntimePermission(Ljava/lang/String;)Z
 PLcom/android/server/am/ActivityManagerService$PermissionController;->noteOp(Ljava/lang/String;ILjava/lang/String;)I
+HSPLcom/android/server/am/ActivityManagerService$PidMap;-><init>()V
 HSPLcom/android/server/am/ActivityManagerService$PidMap;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+HSPLcom/android/server/am/ActivityManagerService$PidMap;->doAddInternal(Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ActivityManagerService$PidMap;->doRemoveIfNoThreadInternal(Lcom/android/server/am/ProcessRecord;)Z
+HSPLcom/android/server/am/ActivityManagerService$PidMap;->doRemoveInternal(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/ActivityManagerService$PidMap;->get(I)Lcom/android/server/am/ProcessRecord;
 HPLcom/android/server/am/ActivityManagerService$PidMap;->indexOfKey(I)I
-PLcom/android/server/am/ActivityManagerService$PidMap;->keyAt(I)I
+HPLcom/android/server/am/ActivityManagerService$PidMap;->keyAt(I)I
 HSPLcom/android/server/am/ActivityManagerService$PidMap;->put(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService$PidMap;->remove(Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ActivityManagerService$PidMap;->removeIfNoThread(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/ActivityManagerService$PidMap;->size()I
 HSPLcom/android/server/am/ActivityManagerService$PidMap;->valueAt(I)Lcom/android/server/am/ProcessRecord;
-PLcom/android/server/am/ActivityManagerService$ProcStatsRunnable;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessStatsService;)V
-PLcom/android/server/am/ActivityManagerService$ProcStatsRunnable;->run()V
-PLcom/android/server/am/ActivityManagerService$ProcessChangeItem;-><init>()V
+HPLcom/android/server/am/ActivityManagerService$ProcStatsRunnable;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessStatsService;)V
+HPLcom/android/server/am/ActivityManagerService$ProcStatsRunnable;->run()V
+HSPLcom/android/server/am/ActivityManagerService$ProcessChangeItem;-><init>()V
 HSPLcom/android/server/am/ActivityManagerService$ProcessInfoService;-><init>(Lcom/android/server/am/ActivityManagerService;)V
-PLcom/android/server/am/ActivityManagerService$ProcessInfoService;->getProcessStatesAndOomScoresFromPids([I[I[I)V
+HPLcom/android/server/am/ActivityManagerService$ProcessInfoService;->getProcessStatesAndOomScoresFromPids([I[I[I)V
 HSPLcom/android/server/am/ActivityManagerService$ProfileData;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService$ProfileData;->getProfileApp()Ljava/lang/String;
 HSPLcom/android/server/am/ActivityManagerService$ProfileData;->getProfileProc()Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ActivityManagerService$ProfileData;->getProfilerInfo()Landroid/app/ProfilerInfo;
+PLcom/android/server/am/ActivityManagerService$RecordPssRunnable;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;Landroid/net/Uri;Landroid/content/ContentResolver;)V
+PLcom/android/server/am/ActivityManagerService$RecordPssRunnable;->run()V
 HSPLcom/android/server/am/ActivityManagerService$UiHandler;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService$UiHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/am/ActivityManagerService$UidObserverRegistration;-><clinit>()V
@@ -3728,41 +6319,54 @@
 HPLcom/android/server/am/ActivityManagerService$UidObserverRegistration;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/am/ActivityManagerService;-><clinit>()V
 HSPLcom/android/server/am/ActivityManagerService;-><init>(Landroid/content/Context;Lcom/android/server/wm/ActivityTaskManagerService;)V
-PLcom/android/server/am/ActivityManagerService;->access$100(Lcom/android/server/am/ActivityManagerService;)J
+PLcom/android/server/am/ActivityManagerService;->access$000(Lcom/android/server/am/ActivityManagerService;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
+HSPLcom/android/server/am/ActivityManagerService;->access$100(Lcom/android/server/am/ActivityManagerService;)J
 HSPLcom/android/server/am/ActivityManagerService;->access$1000(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService;->access$102(Lcom/android/server/am/ActivityManagerService;J)J
 HSPLcom/android/server/am/ActivityManagerService;->access$1100(Lcom/android/server/am/ActivityManagerService;)V
-PLcom/android/server/am/ActivityManagerService;->access$1700(Lcom/android/server/am/ActivityManagerService;Landroid/content/pm/ApplicationInfo;)Z
+PLcom/android/server/am/ActivityManagerService;->access$1200(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;I)V
+PLcom/android/server/am/ActivityManagerService;->access$1300(Lcom/android/server/am/ActivityManagerService;Landroid/content/Context;)Z
+HPLcom/android/server/am/ActivityManagerService;->access$1600(Lcom/android/server/am/ActivityManagerService;I)Z
+HSPLcom/android/server/am/ActivityManagerService;->access$1700(Lcom/android/server/am/ActivityManagerService;Landroid/content/pm/ApplicationInfo;)Z
 PLcom/android/server/am/ActivityManagerService;->access$1800(Lcom/android/server/am/ActivityManagerService;I)V
-PLcom/android/server/am/ActivityManagerService;->access$200(Lcom/android/server/am/ActivityManagerService;)V
+HSPLcom/android/server/am/ActivityManagerService;->access$200(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService;->access$300(Lcom/android/server/am/ActivityManagerService;II)V
+PLcom/android/server/am/ActivityManagerService;->access$400(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/ActivityManagerService;->access$500(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/ActivityManagerService;->addAppLocked(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ZLjava/lang/String;)Lcom/android/server/am/ProcessRecord;
-PLcom/android/server/am/ActivityManagerService;->addAppLocked(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ZZZLjava/lang/String;)Lcom/android/server/am/ProcessRecord;
-PLcom/android/server/am/ActivityManagerService;->addAppLocked(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ZZZZLjava/lang/String;)Lcom/android/server/am/ProcessRecord;
+PLcom/android/server/am/ActivityManagerService;->access$702(Lcom/android/server/am/ActivityManagerService;Z)Z
+HSPLcom/android/server/am/ActivityManagerService;->addAppLocked(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ZLjava/lang/String;)Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ActivityManagerService;->addAppLocked(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ZZZLjava/lang/String;)Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ActivityManagerService;->addAppLocked(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ZZZZLjava/lang/String;)Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ActivityManagerService;->addBackgroundCheckViolationLocked(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->addBroadcastStatLocked(Ljava/lang/String;Ljava/lang/String;IIJ)V
 HSPLcom/android/server/am/ActivityManagerService;->addErrorToDropBox(Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Landroid/app/ApplicationErrorReport$CrashInfo;)V
 HSPLcom/android/server/am/ActivityManagerService;->addPackageDependency(Ljava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->addPidLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService;->addProcessToGcListLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService;->addServiceToMap(Landroid/util/ArrayMap;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->appDiedLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService;->appDiedLocked(Lcom/android/server/am/ProcessRecord;ILandroid/app/IApplicationThread;Z)V
+HSPLcom/android/server/am/ActivityManagerService;->appDiedLocked(Lcom/android/server/am/ProcessRecord;ILandroid/app/IApplicationThread;ZLjava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->appDiedLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->appNotRespondingViaProvider(Landroid/os/IBinder;)V
 HSPLcom/android/server/am/ActivityManagerService;->appRestrictedInBackgroundLocked(ILjava/lang/String;I)I
-PLcom/android/server/am/ActivityManagerService;->appServicesRestrictedInBackgroundLocked(ILjava/lang/String;I)I
+HSPLcom/android/server/am/ActivityManagerService;->appServicesRestrictedInBackgroundLocked(ILjava/lang/String;I)I
 HSPLcom/android/server/am/ActivityManagerService;->appendBasicMemEntry(Ljava/lang/StringBuilder;IIJJLjava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->appendDropBoxProcessHeaders(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/StringBuilder;)V
 HSPLcom/android/server/am/ActivityManagerService;->appendMemBucket(Ljava/lang/StringBuilder;JLjava/lang/String;Z)V
 HSPLcom/android/server/am/ActivityManagerService;->appendMemInfo(Ljava/lang/StringBuilder;Lcom/android/server/am/ProcessMemInfo;)V
+PLcom/android/server/am/ActivityManagerService;->attachAgent(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->attachApplication(Landroid/app/IApplicationThread;J)V
 HSPLcom/android/server/am/ActivityManagerService;->attachApplicationLocked(Landroid/app/IApplicationThread;IIJ)Z
 PLcom/android/server/am/ActivityManagerService;->backgroundServicesFinishedLocked(I)V
-PLcom/android/server/am/ActivityManagerService;->backupAgentCreated(Ljava/lang/String;Landroid/os/IBinder;I)V
+HPLcom/android/server/am/ActivityManagerService;->backupAgentCreated(Ljava/lang/String;Landroid/os/IBinder;I)V
 HSPLcom/android/server/am/ActivityManagerService;->batteryNeedsCpuUpdate()V
 HSPLcom/android/server/am/ActivityManagerService;->batteryPowerChanged(Z)V
 HSPLcom/android/server/am/ActivityManagerService;->batterySendBroadcast(Landroid/content/Intent;)V
 HSPLcom/android/server/am/ActivityManagerService;->batteryStatsReset()V
-PLcom/android/server/am/ActivityManagerService;->bindBackupAgent(Ljava/lang/String;II)Z
+HPLcom/android/server/am/ActivityManagerService;->bindBackupAgent(Ljava/lang/String;II)Z
 HSPLcom/android/server/am/ActivityManagerService;->bindIsolatedService(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;ILjava/lang/String;Ljava/lang/String;I)I
+PLcom/android/server/am/ActivityManagerService;->bindService(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;ILjava/lang/String;I)I
 HSPLcom/android/server/am/ActivityManagerService;->boostPriorityForLockedSection()V
 PLcom/android/server/am/ActivityManagerService;->bootAnimationComplete()V
 HSPLcom/android/server/am/ActivityManagerService;->broadcastIntent(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZI)I
@@ -3770,8 +6374,8 @@
 HSPLcom/android/server/am/ActivityManagerService;->broadcastIntentLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZIIIII)I
 HSPLcom/android/server/am/ActivityManagerService;->broadcastIntentLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZIIIIIZ)I
 HSPLcom/android/server/am/ActivityManagerService;->broadcastQueueForIntent(Landroid/content/Intent;)Lcom/android/server/am/BroadcastQueue;
-PLcom/android/server/am/ActivityManagerService;->canClearIdentity(III)Z
-PLcom/android/server/am/ActivityManagerService;->canGcNowLocked()Z
+HPLcom/android/server/am/ActivityManagerService;->canClearIdentity(III)Z
+HPLcom/android/server/am/ActivityManagerService;->canGcNowLocked()Z
 HPLcom/android/server/am/ActivityManagerService;->cancelIntentSender(Landroid/content/IIntentSender;)V
 HSPLcom/android/server/am/ActivityManagerService;->checkAppInLaunchingProvidersLocked(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/ActivityManagerService;->checkBroadcastFromSystem(Landroid/content/Intent;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;IZLjava/util/List;)V
@@ -3787,40 +6391,49 @@
 HPLcom/android/server/am/ActivityManagerService;->checkUriPermission(Landroid/net/Uri;IIIILandroid/os/IBinder;)I
 HSPLcom/android/server/am/ActivityManagerService;->cleanUpApplicationRecordLocked(Lcom/android/server/am/ProcessRecord;ZZIZ)Z
 HSPLcom/android/server/am/ActivityManagerService;->cleanupAppInLaunchingProvidersLocked(Lcom/android/server/am/ProcessRecord;Z)Z
-PLcom/android/server/am/ActivityManagerService;->cleanupDisabledPackageComponentsLocked(Ljava/lang/String;I[Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->cleanupDisabledPackageComponentsLocked(Ljava/lang/String;I[Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->clearApplicationUserData(Ljava/lang/String;ZLandroid/content/pm/IPackageDataObserver;I)Z
+PLcom/android/server/am/ActivityManagerService;->clearBroadcastQueueForUserLocked(I)Z
 PLcom/android/server/am/ActivityManagerService;->clearPendingBackup(I)V
-PLcom/android/server/am/ActivityManagerService;->closeSystemDialogs(Ljava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->collectProcesses(Ljava/io/PrintWriter;IZ[Ljava/lang/String;)Ljava/util/ArrayList;
+HPLcom/android/server/am/ActivityManagerService;->closeSystemDialogs(Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->collectProcesses(Ljava/io/PrintWriter;IZ[Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLcom/android/server/am/ActivityManagerService;->collectReceiverComponents(Landroid/content/Intent;Ljava/lang/String;I[I)Ljava/util/List;
 HSPLcom/android/server/am/ActivityManagerService;->compatibilityInfoForPackage(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/CompatibilityInfo;
+PLcom/android/server/am/ActivityManagerService;->crashApplication(IILjava/lang/String;ILjava/lang/String;Z)V
 PLcom/android/server/am/ActivityManagerService;->createAnrDumpFile(Ljava/io/File;)Ljava/io/File;
 HPLcom/android/server/am/ActivityManagerService;->decProviderCountLocked(Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderRecord;Landroid/os/IBinder;Z)Z
+PLcom/android/server/am/ActivityManagerService;->demoteSystemServerRenderThread(I)V
 HSPLcom/android/server/am/ActivityManagerService;->dispatchProcessDied(II)V
-HPLcom/android/server/am/ActivityManagerService;->dispatchProcessesChanged()V
+HSPLcom/android/server/am/ActivityManagerService;->dispatchProcessesChanged()V
 HSPLcom/android/server/am/ActivityManagerService;->dispatchUidsChanged()V
 HSPLcom/android/server/am/ActivityManagerService;->dispatchUidsChangedForObserver(Landroid/app/IUidObserver;Lcom/android/server/am/ActivityManagerService$UidObserverRegistration;I)V
-PLcom/android/server/am/ActivityManagerService;->doDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
+HPLcom/android/server/am/ActivityManagerService;->doDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 HSPLcom/android/server/am/ActivityManagerService;->doLowMemReportIfNeededLocked(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActivityManagerService;->doStopUidLocked(ILcom/android/server/am/UidRecord;)V
 PLcom/android/server/am/ActivityManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->dumpAllowedAssociationsLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->dumpAllowedAssociationsLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
 HPLcom/android/server/am/ActivityManagerService;->dumpApplicationMemoryUsage(Ljava/io/FileDescriptor;Lcom/android/server/am/ActivityManagerService$MemoryUsageDumpOptions;[Ljava/lang/String;ZLjava/util/ArrayList;)V
 HPLcom/android/server/am/ActivityManagerService;->dumpApplicationMemoryUsage(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/am/ActivityManagerService$MemoryUsageDumpOptions;[Ljava/lang/String;ZLjava/util/ArrayList;Ljava/io/PrintWriter;)V
-PLcom/android/server/am/ActivityManagerService;->dumpApplicationMemoryUsage(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;ZLjava/io/PrintWriter;Z)V
-PLcom/android/server/am/ActivityManagerService;->dumpApplicationMemoryUsageHeader(Ljava/io/PrintWriter;JJZZ)V
+HPLcom/android/server/am/ActivityManagerService;->dumpApplicationMemoryUsage(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;ZLjava/io/PrintWriter;Z)V
+HPLcom/android/server/am/ActivityManagerService;->dumpApplicationMemoryUsageHeader(Ljava/io/PrintWriter;JJZZ)V
 PLcom/android/server/am/ActivityManagerService;->dumpBinderProxies(Ljava/io/PrintWriter;I)V
-PLcom/android/server/am/ActivityManagerService;->dumpBinderProxiesCounts(Ljava/io/PrintWriter;Ljava/lang/String;)Z
-PLcom/android/server/am/ActivityManagerService;->dumpBroadcastStatsCheckinLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->dumpBinderProxiesCounts(Ljava/io/PrintWriter;Ljava/lang/String;)Z
+HPLcom/android/server/am/ActivityManagerService;->dumpBinderProxyInterfaceCounts(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->dumpBroadcastStatsCheckinLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
 PLcom/android/server/am/ActivityManagerService;->dumpBroadcastStatsLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->dumpBroadcastsLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->dumpDbInfo(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->dumpEverything(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;ZZI)V
-PLcom/android/server/am/ActivityManagerService;->dumpGraphicsHardwareUsage(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->dumpBroadcastsLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->dumpDbInfo(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->dumpEverything(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;ZZI)V
+HPLcom/android/server/am/ActivityManagerService;->dumpGraphicsHardwareUsage(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->dumpHeap(Ljava/lang/String;IZZZLjava/lang/String;Landroid/os/ParcelFileDescriptor;Landroid/os/RemoteCallback;)Z
+PLcom/android/server/am/ActivityManagerService;->dumpHeapFinished(Ljava/lang/String;)V
 HPLcom/android/server/am/ActivityManagerService;->dumpJavaTracesTombstoned(ILjava/lang/String;J)J
 PLcom/android/server/am/ActivityManagerService;->dumpLmkLocked(Ljava/io/PrintWriter;)Z
-PLcom/android/server/am/ActivityManagerService;->dumpLruEntryLocked(Ljava/io/PrintWriter;ILcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/ActivityManagerService;->dumpLruLocked(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->dumpLruEntryLocked(Ljava/io/PrintWriter;ILcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActivityManagerService;->dumpLruLocked(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/am/ActivityManagerService;->dumpMemItems(Landroid/util/proto/ProtoOutputStream;JLjava/lang/String;Ljava/util/ArrayList;ZZZ)V
 HPLcom/android/server/am/ActivityManagerService;->dumpMemItems(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;ZZZZ)V
+PLcom/android/server/am/ActivityManagerService;->dumpPermissionsLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->dumpProcessList(Ljava/io/PrintWriter;Lcom/android/server/am/ActivityManagerService;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLcom/android/server/am/ActivityManagerService;->dumpProcessOomList(Ljava/io/PrintWriter;Lcom/android/server/am/ActivityManagerService;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;)Z
 HSPLcom/android/server/am/ActivityManagerService;->dumpProcessesLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;I)V
@@ -3828,245 +6441,321 @@
 PLcom/android/server/am/ActivityManagerService;->dumpProvider(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;IZ)Z
 PLcom/android/server/am/ActivityManagerService;->dumpProviderProto(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;)Z
 PLcom/android/server/am/ActivityManagerService;->dumpProvidersLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->dumpStackTraces(Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V
-PLcom/android/server/am/ActivityManagerService;->dumpStackTraces(Ljava/util/ArrayList;Lcom/android/internal/os/ProcessCpuTracker;Landroid/util/SparseArray;Ljava/util/ArrayList;)Ljava/io/File;
+HPLcom/android/server/am/ActivityManagerService;->dumpStackTraces(Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V
+HPLcom/android/server/am/ActivityManagerService;->dumpStackTraces(Ljava/util/ArrayList;Lcom/android/internal/os/ProcessCpuTracker;Landroid/util/SparseArray;Ljava/util/ArrayList;)Ljava/io/File;
 HSPLcom/android/server/am/ActivityManagerService;->dumpUids(Ljava/io/PrintWriter;Ljava/lang/String;ILcom/android/server/am/ActiveUids;Ljava/lang/String;Z)Z
+PLcom/android/server/am/ActivityManagerService;->dumpUsersLocked(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/am/ActivityManagerService;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->enforceNotIsolatedCaller(Ljava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->enforcePermission(Ljava/lang/String;IILjava/lang/String;)V
-HPLcom/android/server/am/ActivityManagerService;->enqueueProcessChangeItemLocked(II)Lcom/android/server/am/ActivityManagerService$ProcessChangeItem;
+HPLcom/android/server/am/ActivityManagerService;->enforcePermission(Ljava/lang/String;IILjava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->enforceWriteSettingsPermission(Ljava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->enqueueProcessChangeItemLocked(II)Lcom/android/server/am/ActivityManagerService$ProcessChangeItem;
 HSPLcom/android/server/am/ActivityManagerService;->enqueueUidChangeLocked(Lcom/android/server/am/UidRecord;II)V
 HSPLcom/android/server/am/ActivityManagerService;->ensureAllowedAssociations()V
-PLcom/android/server/am/ActivityManagerService;->ensureBootCompleted()V
+HPLcom/android/server/am/ActivityManagerService;->ensureBootCompleted()V
 HSPLcom/android/server/am/ActivityManagerService;->findAppProcess(Landroid/os/IBinder;Ljava/lang/String;)Lcom/android/server/am/ProcessRecord;
-PLcom/android/server/am/ActivityManagerService;->finishBooting()V
-HPLcom/android/server/am/ActivityManagerService;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V
-PLcom/android/server/am/ActivityManagerService;->forceStopPackageLocked(Ljava/lang/String;IZZZZZILjava/lang/String;)Z
+PLcom/android/server/am/ActivityManagerService;->findProcessLocked(Ljava/lang/String;ILjava/lang/String;)Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ActivityManagerService;->finishBooting()V
+HPLcom/android/server/am/ActivityManagerService;->finishForceStopPackageLocked(Ljava/lang/String;I)V
+HPLcom/android/server/am/ActivityManagerService;->finishInstrumentation(Landroid/app/IApplicationThread;ILandroid/os/Bundle;)V
+PLcom/android/server/am/ActivityManagerService;->finishInstrumentationLocked(Lcom/android/server/am/ProcessRecord;ILandroid/os/Bundle;)V
+HSPLcom/android/server/am/ActivityManagerService;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V
+PLcom/android/server/am/ActivityManagerService;->forceStopAppZygoteLocked(Ljava/lang/String;II)V
+HPLcom/android/server/am/ActivityManagerService;->forceStopPackage(Ljava/lang/String;I)V
+PLcom/android/server/am/ActivityManagerService;->forceStopPackageLocked(Ljava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->forceStopPackageLocked(Ljava/lang/String;IZZZZZILjava/lang/String;)Z
 HSPLcom/android/server/am/ActivityManagerService;->generateApplicationProvidersLocked(Lcom/android/server/am/ProcessRecord;)Ljava/util/List;
+PLcom/android/server/am/ActivityManagerService;->getActivityInfoForUser(Landroid/content/pm/ActivityInfo;I)Landroid/content/pm/ActivityInfo;
 PLcom/android/server/am/ActivityManagerService;->getAppId(Ljava/lang/String;)I
-HPLcom/android/server/am/ActivityManagerService;->getAppInfoForUser(Landroid/content/pm/ApplicationInfo;I)Landroid/content/pm/ApplicationInfo;
+HSPLcom/android/server/am/ActivityManagerService;->getAppInfoForUser(Landroid/content/pm/ApplicationInfo;I)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/am/ActivityManagerService;->getAppOpsService()Lcom/android/internal/app/IAppOpsService;
 HSPLcom/android/server/am/ActivityManagerService;->getAppStartModeLocked(ILjava/lang/String;IIZZZ)I
 HSPLcom/android/server/am/ActivityManagerService;->getBackgroundLaunchBroadcasts()Landroid/util/ArraySet;
+PLcom/android/server/am/ActivityManagerService;->getBugreportWhitelistedPackages()Ljava/util/List;
 HSPLcom/android/server/am/ActivityManagerService;->getCommonServicesLocked(Z)Landroid/util/ArrayMap;
 PLcom/android/server/am/ActivityManagerService;->getConfiguration()Landroid/content/res/Configuration;
 HSPLcom/android/server/am/ActivityManagerService;->getContentProvider(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;IZ)Landroid/app/ContentProviderHolder;
-PLcom/android/server/am/ActivityManagerService;->getContentProviderExternalUnchecked(Ljava/lang/String;Landroid/os/IBinder;ILjava/lang/String;I)Landroid/app/ContentProviderHolder;
+HPLcom/android/server/am/ActivityManagerService;->getContentProviderExternalUnchecked(Ljava/lang/String;Landroid/os/IBinder;ILjava/lang/String;I)Landroid/app/ContentProviderHolder;
 HSPLcom/android/server/am/ActivityManagerService;->getContentProviderImpl(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;ZI)Landroid/app/ContentProviderHolder;
 HSPLcom/android/server/am/ActivityManagerService;->getCurrentUser()Landroid/content/pm/UserInfo;
-PLcom/android/server/am/ActivityManagerService;->getIntentForIntentSender(Landroid/content/IIntentSender;)Landroid/content/Intent;
+HPLcom/android/server/am/ActivityManagerService;->getIntentForIntentSender(Landroid/content/IIntentSender;)Landroid/content/Intent;
 HSPLcom/android/server/am/ActivityManagerService;->getIntentSender(ILjava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;I)Landroid/content/IIntentSender;
 HSPLcom/android/server/am/ActivityManagerService;->getKsmInfo()[J
+PLcom/android/server/am/ActivityManagerService;->getLaunchedFromPackage(Landroid/os/IBinder;)Ljava/lang/String;
+PLcom/android/server/am/ActivityManagerService;->getLaunchedFromUid(Landroid/os/IBinder;)I
 PLcom/android/server/am/ActivityManagerService;->getLowRamTimeSinceIdle(J)J
 HSPLcom/android/server/am/ActivityManagerService;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V
-HPLcom/android/server/am/ActivityManagerService;->getMemoryTrimLevel()I
-PLcom/android/server/am/ActivityManagerService;->getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V
+HSPLcom/android/server/am/ActivityManagerService;->getMemoryTrimLevel()I
+HPLcom/android/server/am/ActivityManagerService;->getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V
 HSPLcom/android/server/am/ActivityManagerService;->getPackageForIntentSender(Landroid/content/IIntentSender;)Ljava/lang/String;
 HSPLcom/android/server/am/ActivityManagerService;->getPackageManagerInternalLocked()Landroid/content/pm/PackageManagerInternal;
 HSPLcom/android/server/am/ActivityManagerService;->getPackageProcessState(Ljava/lang/String;Ljava/lang/String;)I
-PLcom/android/server/am/ActivityManagerService;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
+PLcom/android/server/am/ActivityManagerService;->getPermissionManagerInternalLocked()Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
+PLcom/android/server/am/ActivityManagerService;->getProcessLimit()I
+HPLcom/android/server/am/ActivityManagerService;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
 PLcom/android/server/am/ActivityManagerService;->getProcessNames()Lcom/android/internal/app/ProcessMap;
 HSPLcom/android/server/am/ActivityManagerService;->getProcessRecordLocked(Ljava/lang/String;IZ)Lcom/android/server/am/ProcessRecord;
-PLcom/android/server/am/ActivityManagerService;->getProcessStatesAndOomScoresForPIDs([I[I[I)V
+HPLcom/android/server/am/ActivityManagerService;->getProcessStatesAndOomScoresForPIDs([I[I[I)V
 HPLcom/android/server/am/ActivityManagerService;->getProcessesInErrorState()Ljava/util/List;
-PLcom/android/server/am/ActivityManagerService;->getProviderInfoLocked(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
+HPLcom/android/server/am/ActivityManagerService;->getProviderInfoLocked(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
 HPLcom/android/server/am/ActivityManagerService;->getProviderMimeType(Landroid/net/Uri;I)Ljava/lang/String;
+HPLcom/android/server/am/ActivityManagerService;->getProviderMimeTypeAsync(Landroid/net/Uri;ILandroid/os/RemoteCallback;)V
 HSPLcom/android/server/am/ActivityManagerService;->getRecordForAppLocked(Landroid/app/IApplicationThread;)Lcom/android/server/am/ProcessRecord;
 HPLcom/android/server/am/ActivityManagerService;->getRunningAppProcesses()Ljava/util/List;
-PLcom/android/server/am/ActivityManagerService;->getRunningUserIds()[I
-PLcom/android/server/am/ActivityManagerService;->getServices(II)Ljava/util/List;
+HSPLcom/android/server/am/ActivityManagerService;->getRunningUserIds()[I
+HPLcom/android/server/am/ActivityManagerService;->getServices(II)Ljava/util/List;
 HSPLcom/android/server/am/ActivityManagerService;->getTagForIntentSender(Landroid/content/IIntentSender;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/am/ActivityManagerService;->getTagForIntentSenderLocked(Lcom/android/server/am/PendingIntentRecord;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/am/ActivityManagerService;->getTasks(I)Ljava/util/List;
+PLcom/android/server/am/ActivityManagerService;->getTaskForActivity(Landroid/os/IBinder;Z)I
+HPLcom/android/server/am/ActivityManagerService;->getTasks(I)Ljava/util/List;
 HSPLcom/android/server/am/ActivityManagerService;->getTopAppLocked()Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ActivityManagerService;->getUidForIntentSender(Landroid/content/IIntentSender;)I
-PLcom/android/server/am/ActivityManagerService;->getUidFromIntent(Landroid/content/Intent;)I
-PLcom/android/server/am/ActivityManagerService;->getUidProcessState(ILjava/lang/String;)I
+HPLcom/android/server/am/ActivityManagerService;->getUidFromIntent(Landroid/content/Intent;)I
+HSPLcom/android/server/am/ActivityManagerService;->getUidProcessState(ILjava/lang/String;)I
 HSPLcom/android/server/am/ActivityManagerService;->getUidState(I)I
 HSPLcom/android/server/am/ActivityManagerService;->grantImplicitAccess(ILandroid/content/Intent;II)V
-PLcom/android/server/am/ActivityManagerService;->grantUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
+HPLcom/android/server/am/ActivityManagerService;->grantUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
 HSPLcom/android/server/am/ActivityManagerService;->handleAppDiedLocked(Lcom/android/server/am/ProcessRecord;ZZ)V
-PLcom/android/server/am/ActivityManagerService;->handleApplicationCrash(Landroid/os/IBinder;Landroid/app/ApplicationErrorReport$ParcelableCrashInfo;)V
-PLcom/android/server/am/ActivityManagerService;->handleApplicationCrashInner(Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Landroid/app/ApplicationErrorReport$CrashInfo;)V
+HPLcom/android/server/am/ActivityManagerService;->handleApplicationCrash(Landroid/os/IBinder;Landroid/app/ApplicationErrorReport$ParcelableCrashInfo;)V
+HPLcom/android/server/am/ActivityManagerService;->handleApplicationCrashInner(Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Landroid/app/ApplicationErrorReport$CrashInfo;)V
 HSPLcom/android/server/am/ActivityManagerService;->handleApplicationStrictModeViolation(Landroid/os/IBinder;ILandroid/os/StrictMode$ViolationInfo;)V
-PLcom/android/server/am/ActivityManagerService;->handleApplicationWtf(Landroid/os/IBinder;Ljava/lang/String;ZLandroid/app/ApplicationErrorReport$ParcelableCrashInfo;)Z
-PLcom/android/server/am/ActivityManagerService;->handleApplicationWtfInner(IILandroid/os/IBinder;Ljava/lang/String;Landroid/app/ApplicationErrorReport$CrashInfo;)Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ActivityManagerService;->handleApplicationWtf(Landroid/os/IBinder;Ljava/lang/String;ZLandroid/app/ApplicationErrorReport$ParcelableCrashInfo;)Z
+HPLcom/android/server/am/ActivityManagerService;->handleApplicationWtf(Landroid/os/IBinder;Ljava/lang/String;ZLandroid/app/ApplicationErrorReport$ParcelableCrashInfo;I)Z
+HSPLcom/android/server/am/ActivityManagerService;->handleApplicationWtfInner(IILandroid/os/IBinder;Ljava/lang/String;Landroid/app/ApplicationErrorReport$CrashInfo;)Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ActivityManagerService;->handleIncomingUser(IIIZZLjava/lang/String;Ljava/lang/String;)I
 HSPLcom/android/server/am/ActivityManagerService;->hasUsageStatsPermission(Ljava/lang/String;)Z
-PLcom/android/server/am/ActivityManagerService;->idleUids()V
+HPLcom/android/server/am/ActivityManagerService;->idleUids()V
 HSPLcom/android/server/am/ActivityManagerService;->incProviderCountLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ContentProviderRecord;Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Z)Lcom/android/server/am/ContentProviderConnection;
 HSPLcom/android/server/am/ActivityManagerService;->initPowerManagement()V
-PLcom/android/server/am/ActivityManagerService;->installEncryptionUnawareProviders(I)V
+PLcom/android/server/am/ActivityManagerService;->inputDispatchingTimedOut(IZLjava/lang/String;)J
+PLcom/android/server/am/ActivityManagerService;->inputDispatchingTimedOut(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Lcom/android/server/wm/WindowProcessController;ZLjava/lang/String;)Z
+HPLcom/android/server/am/ActivityManagerService;->installEncryptionUnawareProviders(I)V
 HSPLcom/android/server/am/ActivityManagerService;->installSystemProviders()V
 HSPLcom/android/server/am/ActivityManagerService;->isAllowedWhileBooting(Landroid/content/pm/ApplicationInfo;)Z
-HPLcom/android/server/am/ActivityManagerService;->isAppBad(Landroid/content/pm/ApplicationInfo;)Z
-PLcom/android/server/am/ActivityManagerService;->isAppForeground(I)Z
+HSPLcom/android/server/am/ActivityManagerService;->isAppBad(Landroid/content/pm/ApplicationInfo;)Z
+HPLcom/android/server/am/ActivityManagerService;->isAppForeground(I)Z
 HSPLcom/android/server/am/ActivityManagerService;->isAppStartModeDisabled(ILjava/lang/String;)Z
-PLcom/android/server/am/ActivityManagerService;->isBackgroundRestricted(Ljava/lang/String;)Z
+HPLcom/android/server/am/ActivityManagerService;->isBackgroundRestricted(Ljava/lang/String;)Z
+HPLcom/android/server/am/ActivityManagerService;->isBackgroundRestrictedNoCheck(ILjava/lang/String;)Z
+PLcom/android/server/am/ActivityManagerService;->isCallerShell()Z
 HSPLcom/android/server/am/ActivityManagerService;->isDeviceProvisioned(Landroid/content/Context;)Z
+PLcom/android/server/am/ActivityManagerService;->isInRestrictedBucket(ILjava/lang/String;J)Z
 HSPLcom/android/server/am/ActivityManagerService;->isInstantApp(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;I)Z
 HPLcom/android/server/am/ActivityManagerService;->isIntentSenderABroadcast(Landroid/content/IIntentSender;)Z
 HPLcom/android/server/am/ActivityManagerService;->isIntentSenderAForegroundService(Landroid/content/IIntentSender;)Z
 HPLcom/android/server/am/ActivityManagerService;->isIntentSenderAnActivity(Landroid/content/IIntentSender;)Z
-HPLcom/android/server/am/ActivityManagerService;->isOnDeviceIdleWhitelistLocked(IZ)Z
+PLcom/android/server/am/ActivityManagerService;->isIntentSenderTargetedToPackage(Landroid/content/IIntentSender;)Z
+HSPLcom/android/server/am/ActivityManagerService;->isOnDeviceIdleWhitelistLocked(IZ)Z
 HSPLcom/android/server/am/ActivityManagerService;->isOnOffloadQueue(I)Z
 HSPLcom/android/server/am/ActivityManagerService;->isPendingBroadcastProcessLocked(I)Z
 HSPLcom/android/server/am/ActivityManagerService;->isProcessAliveLocked(Lcom/android/server/am/ProcessRecord;)Z
-HPLcom/android/server/am/ActivityManagerService;->isReceivingBroadcastLocked(Lcom/android/server/am/ProcessRecord;Landroid/util/ArraySet;)Z
+HSPLcom/android/server/am/ActivityManagerService;->isReceivingBroadcastLocked(Lcom/android/server/am/ProcessRecord;Landroid/util/ArraySet;)Z
 HSPLcom/android/server/am/ActivityManagerService;->isSingleton(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;I)Z
-HPLcom/android/server/am/ActivityManagerService;->isUidActive(ILjava/lang/String;)Z
+HSPLcom/android/server/am/ActivityManagerService;->isUidActive(ILjava/lang/String;)Z
 HSPLcom/android/server/am/ActivityManagerService;->isUidActiveLocked(I)Z
-PLcom/android/server/am/ActivityManagerService;->isUserAMonkey()Z
+HPLcom/android/server/am/ActivityManagerService;->isUserAMonkey()Z
 HSPLcom/android/server/am/ActivityManagerService;->isUserRunning(II)Z
-PLcom/android/server/am/ActivityManagerService;->isValidSingletonCall(II)Z
+HSPLcom/android/server/am/ActivityManagerService;->isValidSingletonCall(II)Z
 HSPLcom/android/server/am/ActivityManagerService;->killAllBackgroundProcessesExcept(II)V
+PLcom/android/server/am/ActivityManagerService;->killAppAtUsersRequest(Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/ActivityManagerService;->killAppAtUsersRequest(Lcom/android/server/am/ProcessRecord;Landroid/app/Dialog;)V
-PLcom/android/server/am/ActivityManagerService;->killApplication(Ljava/lang/String;IILjava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->killApplicationProcess(Ljava/lang/String;I)V
+HPLcom/android/server/am/ActivityManagerService;->killApplication(Ljava/lang/String;IILjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->killApplicationProcess(Ljava/lang/String;I)V
+PLcom/android/server/am/ActivityManagerService;->killBackgroundProcesses(Ljava/lang/String;I)V
+HPLcom/android/server/am/ActivityManagerService;->killUid(IILjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->lambda$getProviderMimeTypeAsync$1$ActivityManagerService(Ljava/lang/String;ILandroid/os/RemoteCallback;Landroid/os/Bundle;)V
 HSPLcom/android/server/am/ActivityManagerService;->lambda$logStrictModeViolationToDropBox$3(Landroid/os/DropBoxManager;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->lambda$logStrictModeViolationToDropBox$4(Landroid/os/DropBoxManager;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->lambda$reportMemUsage$4(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+HPLcom/android/server/am/ActivityManagerService;->lambda$reportMemUsage$5(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+PLcom/android/server/am/ActivityManagerService;->lambda$systemReady$1$ActivityManagerService(Landroid/os/PowerSaveState;)V
+PLcom/android/server/am/ActivityManagerService;->lambda$systemReady$2$ActivityManagerService(I)V
+PLcom/android/server/am/ActivityManagerService;->lambda$systemReady$2$ActivityManagerService(Landroid/os/PowerSaveState;)V
+PLcom/android/server/am/ActivityManagerService;->launchBugReportHandlerApp()Z
 HSPLcom/android/server/am/ActivityManagerService;->logStrictModeViolationToDropBox(Lcom/android/server/am/ProcessRecord;Landroid/os/StrictMode$ViolationInfo;)V
-PLcom/android/server/am/ActivityManagerService;->maybePruneOldTraces(Ljava/io/File;)V
+PLcom/android/server/am/ActivityManagerService;->makeHeapDumpUri(Ljava/lang/String;)Landroid/net/Uri;
+HPLcom/android/server/am/ActivityManagerService;->maybePruneOldTraces(Ljava/io/File;)V
 HSPLcom/android/server/am/ActivityManagerService;->maybeUpdateProviderUsageStatsLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->monitor()V
+HPLcom/android/server/am/ActivityManagerService;->monitor()V
 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
 HPLcom/android/server/am/ActivityManagerService;->noteWakeupAlarm(Landroid/content/IIntentSender;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->notifyLockedProfile(I)V
 HSPLcom/android/server/am/ActivityManagerService;->notifyPackageUse(Ljava/lang/String;I)V
 HSPLcom/android/server/am/ActivityManagerService;->onCoreSettingsChange(Landroid/os/Bundle;)V
 PLcom/android/server/am/ActivityManagerService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
 HSPLcom/android/server/am/ActivityManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/server/am/ActivityManagerService;->onWakefulnessChanged(I)V
-PLcom/android/server/am/ActivityManagerService;->performAppGcLocked(Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/ActivityManagerService;->performAppGcsIfAppropriateLocked()V
-PLcom/android/server/am/ActivityManagerService;->performAppGcsLocked()V
-PLcom/android/server/am/ActivityManagerService;->performIdleMaintenance()V
+HPLcom/android/server/am/ActivityManagerService;->onWakefulnessChanged(I)V
+HPLcom/android/server/am/ActivityManagerService;->openContentUri(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/am/ActivityManagerService;->peekService(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;)Landroid/os/IBinder;
+HPLcom/android/server/am/ActivityManagerService;->performAppGcLocked(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActivityManagerService;->performAppGcsIfAppropriateLocked()V
+HPLcom/android/server/am/ActivityManagerService;->performAppGcsLocked()V
+HPLcom/android/server/am/ActivityManagerService;->performIdleMaintenance()V
+PLcom/android/server/am/ActivityManagerService;->prepareForPossibleShutdown()V
 HSPLcom/android/server/am/ActivityManagerService;->processClass(Lcom/android/server/am/ProcessRecord;)Ljava/lang/String;
-PLcom/android/server/am/ActivityManagerService;->processContentProviderPublishTimedOutLocked(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActivityManagerService;->processContentProviderPublishTimedOutLocked(Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ActivityManagerService;->processStartTimedOutLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V
 HSPLcom/android/server/am/ActivityManagerService;->publishService(Landroid/os/IBinder;Landroid/content/Intent;Landroid/os/IBinder;)V
-PLcom/android/server/am/ActivityManagerService;->pushTempWhitelist()V
+HPLcom/android/server/am/ActivityManagerService;->pushTempWhitelist()V
 HPLcom/android/server/am/ActivityManagerService;->recordPssSampleLocked(Lcom/android/server/am/ProcessRecord;IJJJJIJJ)V
 HPLcom/android/server/am/ActivityManagerService;->refContentProvider(Landroid/os/IBinder;II)Z
-PLcom/android/server/am/ActivityManagerService;->registerIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V
+HPLcom/android/server/am/ActivityManagerService;->registerIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V
 HSPLcom/android/server/am/ActivityManagerService;->registerProcessObserver(Landroid/app/IProcessObserver;)V
 HSPLcom/android/server/am/ActivityManagerService;->registerReceiver(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;
 PLcom/android/server/am/ActivityManagerService;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V
 HSPLcom/android/server/am/ActivityManagerService;->registerUidObserver(Landroid/app/IUidObserver;IILjava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->registerUserSwitchObserver(Landroid/app/IUserSwitchObserver;Ljava/lang/String;)V
 HPLcom/android/server/am/ActivityManagerService;->removeContentProvider(Landroid/os/IBinder;Z)V
-PLcom/android/server/am/ActivityManagerService;->removeContentProviderExternalUnchecked(Ljava/lang/String;Landroid/os/IBinder;I)V
+HPLcom/android/server/am/ActivityManagerService;->removeContentProviderExternalUnchecked(Ljava/lang/String;Landroid/os/IBinder;I)V
 HPLcom/android/server/am/ActivityManagerService;->removeDyingProviderLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ContentProviderRecord;Z)Z
 HSPLcom/android/server/am/ActivityManagerService;->removeLruProcessLocked(Lcom/android/server/am/ProcessRecord;)V
-HPLcom/android/server/am/ActivityManagerService;->removeReceiverLocked(Lcom/android/server/am/ReceiverList;)V
+PLcom/android/server/am/ActivityManagerService;->removePidIfNoThread(Lcom/android/server/am/ProcessRecord;)Z
+HSPLcom/android/server/am/ActivityManagerService;->removePidLocked(Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/ActivityManagerService;->removeReceiverLocked(Lcom/android/server/am/ReceiverList;)V
 HSPLcom/android/server/am/ActivityManagerService;->reportCurWakefulnessUsageEventLocked()V
 HSPLcom/android/server/am/ActivityManagerService;->reportGlobalUsageEventLocked(I)V
-PLcom/android/server/am/ActivityManagerService;->reportLmkKillAtOrBelow(Ljava/io/PrintWriter;I)Z
+HPLcom/android/server/am/ActivityManagerService;->reportLmkKillAtOrBelow(Ljava/io/PrintWriter;I)Z
 HSPLcom/android/server/am/ActivityManagerService;->reportMemUsage(Ljava/util/ArrayList;)V
 HSPLcom/android/server/am/ActivityManagerService;->reportUidInfoMessageLocked(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/am/ActivityManagerService;->requestBugReportWithDescription(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/am/ActivityManagerService;->requestFullBugReport()V
+PLcom/android/server/am/ActivityManagerService;->requestInteractiveBugReport()V
 PLcom/android/server/am/ActivityManagerService;->requestInteractiveBugReportWithDescription(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->requestPssAllProcsLocked(JZZ)V
 HPLcom/android/server/am/ActivityManagerService;->requestPssLocked(Lcom/android/server/am/ProcessRecord;I)Z
-PLcom/android/server/am/ActivityManagerService;->requestTargetProviderPermissionsReviewIfNeededLocked(Landroid/content/pm/ProviderInfo;Lcom/android/server/am/ProcessRecord;I)Z
+HPLcom/android/server/am/ActivityManagerService;->requestTargetProviderPermissionsReviewIfNeededLocked(Landroid/content/pm/ProviderInfo;Lcom/android/server/am/ProcessRecord;I)Z
+PLcom/android/server/am/ActivityManagerService;->requestTelephonyBugReport(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/am/ActivityManagerService;->requireAllowedAssociationsLocked(Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->resetPriorityAfterLockedSection()V
-PLcom/android/server/am/ActivityManagerService;->resumeAppSwitches()V
+HPLcom/android/server/am/ActivityManagerService;->resumeAppSwitches()V
 HSPLcom/android/server/am/ActivityManagerService;->retrieveSettings()V
-PLcom/android/server/am/ActivityManagerService;->revokeUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
+HPLcom/android/server/am/ActivityManagerService;->revokeUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
 HSPLcom/android/server/am/ActivityManagerService;->rotateBroadcastStatsIfNeededLocked()V
 HSPLcom/android/server/am/ActivityManagerService;->scheduleAppGcsLocked()V
 HSPLcom/android/server/am/ActivityManagerService;->scheduleApplicationInfoChanged(Ljava/util/List;I)V
 HPLcom/android/server/am/ActivityManagerService;->sendIntentSender(Landroid/content/IIntentSender;Landroid/os/IBinder;ILandroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)I
-PLcom/android/server/am/ActivityManagerService;->sendPackageBroadcastLocked(I[Ljava/lang/String;I)V
-HPLcom/android/server/am/ActivityManagerService;->sendPendingBroadcastsLocked(Lcom/android/server/am/ProcessRecord;)Z
+HPLcom/android/server/am/ActivityManagerService;->sendPackageBroadcastLocked(I[Ljava/lang/String;I)V
+HSPLcom/android/server/am/ActivityManagerService;->sendPendingBroadcastsLocked(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/ActivityManagerService;->serviceDoneExecuting(Landroid/os/IBinder;III)V
-PLcom/android/server/am/ActivityManagerService;->setAppIdTempWhitelistStateLocked(IZ)V
+PLcom/android/server/am/ActivityManagerService;->setActivityController(Landroid/app/IActivityController;Z)V
+PLcom/android/server/am/ActivityManagerService;->setAlwaysFinish(Z)V
+HPLcom/android/server/am/ActivityManagerService;->setAppIdTempWhitelistStateLocked(IZ)V
 HSPLcom/android/server/am/ActivityManagerService;->setContentCaptureManager(Lcom/android/server/contentcapture/ContentCaptureManagerInternal;)V
-PLcom/android/server/am/ActivityManagerService;->setHasTopUi(Z)V
+PLcom/android/server/am/ActivityManagerService;->setDebugApp(Ljava/lang/String;ZZ)V
+HPLcom/android/server/am/ActivityManagerService;->setDumpHeapDebugLimit(Ljava/lang/String;IJLjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->setHasTopUi(Z)V
 HSPLcom/android/server/am/ActivityManagerService;->setInstaller(Lcom/android/server/pm/Installer;)V
-PLcom/android/server/am/ActivityManagerService;->setProcessImportant(Landroid/os/IBinder;IZLjava/lang/String;)V
-HPLcom/android/server/am/ActivityManagerService;->setProcessTrackerStateLocked(Lcom/android/server/am/ProcessRecord;IJ)V
-PLcom/android/server/am/ActivityManagerService;->setRenderThread(I)V
-PLcom/android/server/am/ActivityManagerService;->setServiceForeground(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;II)V
+HPLcom/android/server/am/ActivityManagerService;->setProcessImportant(Landroid/os/IBinder;IZLjava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->setProcessLimit(I)V
+HSPLcom/android/server/am/ActivityManagerService;->setProcessTrackerStateLocked(Lcom/android/server/am/ProcessRecord;IJ)V
+HSPLcom/android/server/am/ActivityManagerService;->setRenderThread(I)V
+HPLcom/android/server/am/ActivityManagerService;->setServiceForeground(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;II)V
 HSPLcom/android/server/am/ActivityManagerService;->setSystemProcess()V
 HSPLcom/android/server/am/ActivityManagerService;->setSystemServiceManager(Lcom/android/server/SystemServiceManager;)V
 PLcom/android/server/am/ActivityManagerService;->setUidTempWhitelistStateLocked(IZ)V
 HSPLcom/android/server/am/ActivityManagerService;->setUsageStatsManager(Landroid/app/usage/UsageStatsManagerInternal;)V
 HSPLcom/android/server/am/ActivityManagerService;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/am/ActivityManagerService;->showConsoleNotificationIfActive()V
+HPLcom/android/server/am/ActivityManagerService;->showWaitingForDebugger(Landroid/app/IApplicationThread;Z)V
+PLcom/android/server/am/ActivityManagerService;->shutdown(I)Z
 HSPLcom/android/server/am/ActivityManagerService;->skipCurrentReceiverLocked(Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ActivityManagerService;->skipPendingBroadcastLocked(I)V
 PLcom/android/server/am/ActivityManagerService;->sortMemItems(Ljava/util/List;Z)V
 HSPLcom/android/server/am/ActivityManagerService;->sortProcessOomList(Ljava/util/List;Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLcom/android/server/am/ActivityManagerService;->start()V
+PLcom/android/server/am/ActivityManagerService;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;I)I
 HSPLcom/android/server/am/ActivityManagerService;->startAssociationLocked(ILjava/lang/String;IIJLandroid/content/ComponentName;Ljava/lang/String;)Lcom/android/server/am/ActivityManagerService$Association;
 HSPLcom/android/server/am/ActivityManagerService;->startBroadcastObservers()V
+PLcom/android/server/am/ActivityManagerService;->startHeapDumpLocked(Lcom/android/server/am/ProcessRecord;Z)V
+HPLcom/android/server/am/ActivityManagerService;->startInstrumentation(Landroid/content/ComponentName;Ljava/lang/String;ILandroid/os/Bundle;Landroid/app/IInstrumentationWatcher;Landroid/app/IUiAutomationConnection;ILjava/lang/String;)Z
 HSPLcom/android/server/am/ActivityManagerService;->startIsolatedProcess(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Runnable;)Z
 HSPLcom/android/server/am/ActivityManagerService;->startObservingNativeCrashes()V
-PLcom/android/server/am/ActivityManagerService;->startPersistentApps(I)V
+HSPLcom/android/server/am/ActivityManagerService;->startPersistentApps(I)V
 HSPLcom/android/server/am/ActivityManagerService;->startProcessLocked(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;ZILcom/android/server/am/HostingRecord;ZZZ)Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ActivityManagerService;->startService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;I)Landroid/content/ComponentName;
-HPLcom/android/server/am/ActivityManagerService;->stopAssociationLocked(ILjava/lang/String;IJLandroid/content/ComponentName;Ljava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->stopService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;I)I
+PLcom/android/server/am/ActivityManagerService;->startUserInBackground(I)Z
+PLcom/android/server/am/ActivityManagerService;->startUserInBackgroundWithListener(ILandroid/os/IProgressListener;)Z
+PLcom/android/server/am/ActivityManagerService;->stopAppSwitches()V
+HSPLcom/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;I)I
 HPLcom/android/server/am/ActivityManagerService;->stopServiceToken(Landroid/content/ComponentName;Landroid/os/IBinder;I)Z
+PLcom/android/server/am/ActivityManagerService;->stopUser(IZLandroid/app/IStopUserCallback;)I
 HSPLcom/android/server/am/ActivityManagerService;->stringifyKBSize(J)Ljava/lang/String;
 HSPLcom/android/server/am/ActivityManagerService;->stringifySize(JI)Ljava/lang/String;
 HSPLcom/android/server/am/ActivityManagerService;->systemReady(Ljava/lang/Runnable;Lcom/android/server/utils/TimingsTraceAndSlog;)V
-PLcom/android/server/am/ActivityManagerService;->tempWhitelistForPendingIntentLocked(IIIJLjava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->tempWhitelistUidLocked(IJLjava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->trimApplications(Ljava/lang/String;)V
-HPLcom/android/server/am/ActivityManagerService;->trimApplicationsLocked(Ljava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->uidOnBackgroundWhitelist(I)Z
-PLcom/android/server/am/ActivityManagerService;->unbindBackupAgent(Landroid/content/pm/ApplicationInfo;)V
-PLcom/android/server/am/ActivityManagerService;->unbindFinished(Landroid/os/IBinder;Landroid/content/Intent;Z)V
-HPLcom/android/server/am/ActivityManagerService;->unbindService(Landroid/app/IServiceConnection;)Z
+HPLcom/android/server/am/ActivityManagerService;->tempWhitelistForPendingIntentLocked(IIIJLjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->tempWhitelistUidLocked(IJLjava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->trimApplications(Ljava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->trimApplicationsLocked(Ljava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->uidOnBackgroundWhitelist(I)Z
+HPLcom/android/server/am/ActivityManagerService;->unbindBackupAgent(Landroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/am/ActivityManagerService;->unbindFinished(Landroid/os/IBinder;Landroid/content/Intent;Z)V
+HSPLcom/android/server/am/ActivityManagerService;->unbindService(Landroid/app/IServiceConnection;)Z
+HPLcom/android/server/am/ActivityManagerService;->unbroadcastIntent(Landroid/app/IApplicationThread;Landroid/content/Intent;I)V
 PLcom/android/server/am/ActivityManagerService;->unlockUser(I[B[BLandroid/os/IProgressListener;)Z
-PLcom/android/server/am/ActivityManagerService;->unregisterIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V
-HPLcom/android/server/am/ActivityManagerService;->unregisterReceiver(Landroid/content/IIntentReceiver;)V
-PLcom/android/server/am/ActivityManagerService;->unregisterUidObserver(Landroid/app/IUidObserver;)V
-PLcom/android/server/am/ActivityManagerService;->unstableProviderDied(Landroid/os/IBinder;)V
-PLcom/android/server/am/ActivityManagerService;->updateActivityUsageStats(Landroid/content/ComponentName;IILandroid/os/IBinder;Landroid/content/ComponentName;)V
+HPLcom/android/server/am/ActivityManagerService;->unregisterIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V
+HSPLcom/android/server/am/ActivityManagerService;->unregisterReceiver(Landroid/content/IIntentReceiver;)V
+PLcom/android/server/am/ActivityManagerService;->unregisterTaskStackListener(Landroid/app/ITaskStackListener;)V
+HPLcom/android/server/am/ActivityManagerService;->unregisterUidObserver(Landroid/app/IUidObserver;)V
+HPLcom/android/server/am/ActivityManagerService;->unregisterUserSwitchObserver(Landroid/app/IUserSwitchObserver;)V
+HPLcom/android/server/am/ActivityManagerService;->unstableProviderDied(Landroid/os/IBinder;)V
+HSPLcom/android/server/am/ActivityManagerService;->updateActivityUsageStats(Landroid/content/ComponentName;IILandroid/os/IBinder;Landroid/content/ComponentName;)V
 HSPLcom/android/server/am/ActivityManagerService;->updateApplicationInfoLocked(Ljava/util/List;I)V
-PLcom/android/server/am/ActivityManagerService;->updateAssociationForApp(Landroid/content/pm/ApplicationInfo;)V
-PLcom/android/server/am/ActivityManagerService;->updateBatteryStats(Landroid/content/ComponentName;IIZ)V
+HPLcom/android/server/am/ActivityManagerService;->updateAssociationForApp(Landroid/content/pm/ApplicationInfo;)V
+HSPLcom/android/server/am/ActivityManagerService;->updateBatteryStats(Landroid/content/ComponentName;IIZ)V
+PLcom/android/server/am/ActivityManagerService;->updateConfiguration(Landroid/content/res/Configuration;)Z
 HSPLcom/android/server/am/ActivityManagerService;->updateCpuStats()V
 HSPLcom/android/server/am/ActivityManagerService;->updateCpuStatsNow()V
+HSPLcom/android/server/am/ActivityManagerService;->updateDeviceOwner(Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->updateForceBackgroundCheck(Z)V
-PLcom/android/server/am/ActivityManagerService;->updateForegroundServiceUsageStats(Landroid/content/ComponentName;IZ)V
+HPLcom/android/server/am/ActivityManagerService;->updateForegroundServiceUsageStats(Landroid/content/ComponentName;IZ)V
 HSPLcom/android/server/am/ActivityManagerService;->updateLockTaskPackages(I[Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->updateLowMemStateLocked(III)Z
 HSPLcom/android/server/am/ActivityManagerService;->updateLruProcessLocked(Lcom/android/server/am/ProcessRecord;ZLcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ActivityManagerService;->updateMccMncConfiguration(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/am/ActivityManagerService;->updateOomAdjLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->updateOomAdjLocked(Lcom/android/server/am/ProcessRecord;ZLjava/lang/String;)Z
 HSPLcom/android/server/am/ActivityManagerService;->updateOomAdjLocked(Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->updatePersistentConfiguration(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/am/ActivityManagerService;->updateProcessForegroundLocked(Lcom/android/server/am/ProcessRecord;ZIZ)V
+PLcom/android/server/am/ActivityManagerService;->updateServiceGroup(Landroid/app/IServiceConnection;II)V
+PLcom/android/server/am/ActivityManagerService;->updateSystemUiContext()V
 HSPLcom/android/server/am/ActivityManagerService;->validateAssociationAllowedLocked(Ljava/lang/String;ILjava/lang/String;I)Z
 HSPLcom/android/server/am/ActivityManagerService;->verifyBroadcastLocked(Landroid/content/Intent;)Landroid/content/Intent;
-PLcom/android/server/am/ActivityManagerService;->waitForNetworkStateUpdate(J)V
+HPLcom/android/server/am/ActivityManagerService;->waitForNetworkStateUpdate(J)V
 HSPLcom/android/server/am/ActivityManagerService;->watchDeviceProvisioning(Landroid/content/Context;)V
-PLcom/android/server/am/ActivityManagerService;->writeBroadcastsToProtoLocked(Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/server/am/ActivityManagerService;->writeProcessOomListToProto(Landroid/util/proto/ProtoOutputStream;JLcom/android/server/am/ActivityManagerService;Ljava/util/List;ZLjava/lang/String;)Z
-PLcom/android/server/am/ActivityManagerService;->writeProcessesToGcToProto(Landroid/util/proto/ProtoOutputStream;JLjava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->writeProcessesToProtoLocked(Landroid/util/proto/ProtoOutputStream;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->writeBroadcastsToProtoLocked(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/am/ActivityManagerService;->writeProcessOomListToProto(Landroid/util/proto/ProtoOutputStream;JLcom/android/server/am/ActivityManagerService;Ljava/util/List;ZLjava/lang/String;)Z
+HPLcom/android/server/am/ActivityManagerService;->writeProcessesToGcToProto(Landroid/util/proto/ProtoOutputStream;JLjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->writeProcessesToProtoLocked(Landroid/util/proto/ProtoOutputStream;Ljava/lang/String;)V
 PLcom/android/server/am/ActivityManagerShellCommand$1;-><init>(Lcom/android/server/am/ActivityManagerShellCommand;)V
 PLcom/android/server/am/ActivityManagerShellCommand$1;->handleOption(Ljava/lang/String;Landroid/os/ShellCommand;)Z
+PLcom/android/server/am/ActivityManagerShellCommand$2;-><init>(Lcom/android/server/am/ActivityManagerShellCommand;Ljava/util/concurrent/CountDownLatch;)V
+PLcom/android/server/am/ActivityManagerShellCommand$2;->onResult(Landroid/os/Bundle;)V
 PLcom/android/server/am/ActivityManagerShellCommand$IntentReceiver;-><init>(Ljava/io/PrintWriter;)V
 PLcom/android/server/am/ActivityManagerShellCommand$IntentReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 PLcom/android/server/am/ActivityManagerShellCommand$IntentReceiver;->waitForFinish()V
 PLcom/android/server/am/ActivityManagerShellCommand;-><clinit>()V
 PLcom/android/server/am/ActivityManagerShellCommand;-><init>(Lcom/android/server/am/ActivityManagerService;Z)V
+PLcom/android/server/am/ActivityManagerShellCommand;->access$076(Lcom/android/server/am/ActivityManagerShellCommand;I)I
 PLcom/android/server/am/ActivityManagerShellCommand;->access$1002(Lcom/android/server/am/ActivityManagerShellCommand;I)I
 PLcom/android/server/am/ActivityManagerShellCommand;->access$1102(Lcom/android/server/am/ActivityManagerShellCommand;Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/am/ActivityManagerShellCommand;->makeIntent(I)Landroid/content/Intent;
 PLcom/android/server/am/ActivityManagerShellCommand;->onCommand(Ljava/lang/String;)I
+PLcom/android/server/am/ActivityManagerShellCommand;->runAttachAgent(Ljava/io/PrintWriter;)I
+PLcom/android/server/am/ActivityManagerShellCommand;->runDumpHeap(Ljava/io/PrintWriter;)I
+PLcom/android/server/am/ActivityManagerShellCommand;->runForceStop(Ljava/io/PrintWriter;)I
 PLcom/android/server/am/ActivityManagerShellCommand;->runSendBroadcast(Ljava/io/PrintWriter;)I
+PLcom/android/server/am/ActivityManagerShellCommand;->runStartActivity(Ljava/io/PrintWriter;)I
 HSPLcom/android/server/am/AppBindRecord;-><init>(Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/IntentBindRecord;Lcom/android/server/am/ProcessRecord;)V
 HPLcom/android/server/am/AppBindRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/am/AppBindRecord;->dumpInIntentBind(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/am/AppBindRecord;->toString()Ljava/lang/String;
+HPLcom/android/server/am/AppBindRecord;->toString()Ljava/lang/String;
 HSPLcom/android/server/am/AppCompactor$1;-><init>(Lcom/android/server/am/AppCompactor;)V
-PLcom/android/server/am/AppCompactor$1;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
+HPLcom/android/server/am/AppCompactor$1;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/am/AppCompactor$2;-><init>(Lcom/android/server/am/AppCompactor;)V
 HPLcom/android/server/am/AppCompactor$2;->removeEldestEntry(Ljava/util/Map$Entry;)Z
 HPLcom/android/server/am/AppCompactor$LastCompactionStats;-><init>([J)V
@@ -4094,15 +6783,15 @@
 PLcom/android/server/am/AppCompactor;->access$800(Lcom/android/server/am/AppCompactor;)Lcom/android/server/am/AppCompactor$PropertyChangedCallbackForTest;
 HSPLcom/android/server/am/AppCompactor;->compactActionIntToString(I)Ljava/lang/String;
 PLcom/android/server/am/AppCompactor;->compactAllSystem()V
-PLcom/android/server/am/AppCompactor;->compactAppBfgs(Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/AppCompactor;->compactAppFull(Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/AppCompactor;->compactAppPersistent(Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/AppCompactor;->compactAppSome(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/AppCompactor;->compactAppBfgs(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/AppCompactor;->compactAppFull(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/AppCompactor;->compactAppPersistent(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/AppCompactor;->compactAppSome(Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/AppCompactor;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/am/AppCompactor;->init()V
 HSPLcom/android/server/am/AppCompactor;->parseProcStateThrottle(Ljava/lang/String;)Z
-PLcom/android/server/am/AppCompactor;->shouldCompactBFGS(Lcom/android/server/am/ProcessRecord;J)Z
-PLcom/android/server/am/AppCompactor;->shouldCompactPersistent(Lcom/android/server/am/ProcessRecord;J)Z
+HPLcom/android/server/am/AppCompactor;->shouldCompactBFGS(Lcom/android/server/am/ProcessRecord;J)Z
+HPLcom/android/server/am/AppCompactor;->shouldCompactPersistent(Lcom/android/server/am/ProcessRecord;J)Z
 HSPLcom/android/server/am/AppCompactor;->updateCompactionActions()V
 HSPLcom/android/server/am/AppCompactor;->updateCompactionThrottles()V
 HSPLcom/android/server/am/AppCompactor;->updateFullDeltaRssThrottle()V
@@ -4111,51 +6800,162 @@
 HSPLcom/android/server/am/AppCompactor;->updateStatsdSampleRate()V
 HSPLcom/android/server/am/AppCompactor;->updateUseCompaction()V
 HSPLcom/android/server/am/AppCompactor;->useCompaction()Z
+PLcom/android/server/am/AppErrorDialog$1;-><init>(Lcom/android/server/am/AppErrorDialog;)V
+PLcom/android/server/am/AppErrorDialog$1;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/am/AppErrorDialog$2;-><init>(Lcom/android/server/am/AppErrorDialog;)V
+PLcom/android/server/am/AppErrorDialog$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/am/AppErrorDialog$Data;-><init>()V
 PLcom/android/server/am/AppErrorDialog;-><clinit>()V
+PLcom/android/server/am/AppErrorDialog;-><init>(Landroid/content/Context;Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/AppErrorDialog$Data;)V
+PLcom/android/server/am/AppErrorDialog;->access$000(Lcom/android/server/am/AppErrorDialog;I)V
+PLcom/android/server/am/AppErrorDialog;->dismiss()V
+PLcom/android/server/am/AppErrorDialog;->onClick(Landroid/view/View;)V
+PLcom/android/server/am/AppErrorDialog;->onCreate(Landroid/os/Bundle;)V
+PLcom/android/server/am/AppErrorDialog;->onStart()V
+PLcom/android/server/am/AppErrorDialog;->onStop()V
+PLcom/android/server/am/AppErrorDialog;->setResult(I)V
 PLcom/android/server/am/AppErrorResult;-><init>()V
-PLcom/android/server/am/AppErrorResult;->get()I
-PLcom/android/server/am/AppErrorResult;->set(I)V
+HPLcom/android/server/am/AppErrorResult;->get()I
+HPLcom/android/server/am/AppErrorResult;->set(I)V
+PLcom/android/server/am/AppErrors$BadProcessInfo;-><init>(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/AppErrors;-><init>(Landroid/content/Context;Lcom/android/server/am/ActivityManagerService;Lcom/android/server/PackageWatchdog;)V
-PLcom/android/server/am/AppErrors;->crashApplication(Lcom/android/server/am/ProcessRecord;Landroid/app/ApplicationErrorReport$CrashInfo;)V
-PLcom/android/server/am/AppErrors;->crashApplicationInner(Lcom/android/server/am/ProcessRecord;Landroid/app/ApplicationErrorReport$CrashInfo;II)V
+PLcom/android/server/am/AppErrors;->clearBadProcessLocked(Landroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/am/AppErrors;->crashApplication(Lcom/android/server/am/ProcessRecord;Landroid/app/ApplicationErrorReport$CrashInfo;)V
+HPLcom/android/server/am/AppErrors;->crashApplicationInner(Lcom/android/server/am/ProcessRecord;Landroid/app/ApplicationErrorReport$CrashInfo;II)V
+PLcom/android/server/am/AppErrors;->createAppErrorIntentLocked(Lcom/android/server/am/ProcessRecord;JLandroid/app/ApplicationErrorReport$CrashInfo;)Landroid/content/Intent;
+PLcom/android/server/am/AppErrors;->createAppErrorReportLocked(Lcom/android/server/am/ProcessRecord;JLandroid/app/ApplicationErrorReport$CrashInfo;)Landroid/app/ApplicationErrorReport;
 PLcom/android/server/am/AppErrors;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JLjava/lang/String;)V
 HSPLcom/android/server/am/AppErrors;->dumpLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZLjava/lang/String;)Z
 PLcom/android/server/am/AppErrors;->generateProcessError(Lcom/android/server/am/ProcessRecord;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/ActivityManager$ProcessErrorStateInfo;
 PLcom/android/server/am/AppErrors;->handleAppCrashInActivityController(Lcom/android/server/am/ProcessRecord;Landroid/app/ApplicationErrorReport$CrashInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JII)Z
-PLcom/android/server/am/AppErrors;->handleAppCrashLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/am/AppErrorDialog$Data;)Z
+HPLcom/android/server/am/AppErrors;->handleAppCrashLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/am/AppErrorDialog$Data;)Z
 PLcom/android/server/am/AppErrors;->handleShowAnrUi(Landroid/os/Message;)V
-PLcom/android/server/am/AppErrors;->handleShowAppErrorUi(Landroid/os/Message;)V
+HPLcom/android/server/am/AppErrors;->handleShowAppErrorUi(Landroid/os/Message;)V
 HSPLcom/android/server/am/AppErrors;->isBadProcessLocked(Landroid/content/pm/ApplicationInfo;)Z
+PLcom/android/server/am/AppErrors;->killAppAtUserRequestLocked(Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/AppErrors;->killAppAtUserRequestLocked(Lcom/android/server/am/ProcessRecord;Landroid/app/Dialog;)V
+PLcom/android/server/am/AppErrors;->killAppImmediateLocked(Lcom/android/server/am/ProcessRecord;IILjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/am/AppErrors;->killAppImmediateLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/am/AppErrors;->lambda$scheduleAppCrashLocked$0$AppErrors(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/AppErrors;->loadAppsNotReportingCrashesFromConfigLocked(Ljava/lang/String;)V
-PLcom/android/server/am/AppErrors;->makeAppCrashingLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/am/AppErrorDialog$Data;)Z
+HPLcom/android/server/am/AppErrors;->makeAppCrashingLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/am/AppErrorDialog$Data;)Z
 HSPLcom/android/server/am/AppErrors;->resetProcessCrashTimeLocked(Landroid/content/pm/ApplicationInfo;)V
-PLcom/android/server/am/AppErrors;->resetProcessCrashTimeLocked(ZII)V
+HPLcom/android/server/am/AppErrors;->resetProcessCrashTimeLocked(ZII)V
+HPLcom/android/server/am/AppErrors;->scheduleAppCrashLocked(IILjava/lang/String;ILjava/lang/String;Z)V
+HSPLcom/android/server/am/AppExitInfoTracker$1;-><init>(Lcom/android/server/am/AppExitInfoTracker;)V
+PLcom/android/server/am/AppExitInfoTracker$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/am/AppExitInfoTracker$2;-><init>(Lcom/android/server/am/AppExitInfoTracker;)V
+HPLcom/android/server/am/AppExitInfoTracker$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;-><init>(Lcom/android/server/am/AppExitInfoTracker;I)V
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->access$002(Lcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;I)I
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->addExitInfoLocked(Landroid/app/ApplicationExitInfo;)V
+HPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/icu/text/SimpleDateFormat;)V
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->getExitInfoLocked(IILjava/util/ArrayList;)V
+HPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->lambda$dumpLocked$2(Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;)I
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->readFromProto(Landroid/util/proto/ProtoInputStream;J)I
+HPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->writeToProto(Landroid/util/proto/ProtoOutputStream;J)V
+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;->add(IILjava/lang/Object;)V
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoExternalSource;->onProcDied(IILjava/lang/Integer;)V
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoExternalSource;->remove(II)Landroid/util/Pair;
+HPLcom/android/server/am/AppExitInfoTracker$AppExitInfoExternalSource;->removeByUid(IZ)V
+PLcom/android/server/am/AppExitInfoTracker$AppExitInfoExternalSource;->removeByUserId(I)V
+HSPLcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;-><init>(Lcom/android/server/am/AppExitInfoTracker;)V
+HSPLcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;->addIsolatedUid(II)V
+HPLcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;->getUidByIsolatedUid(I)Ljava/lang/Integer;
+HPLcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;->removeAppUid(IZ)V
+PLcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;->removeAppUidLocked(I)V
+PLcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;->removeByUserId(I)V
+HSPLcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;->removeIsolatedUid(I)I
+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;-><clinit>()V
+HSPLcom/android/server/am/AppExitInfoTracker;-><init>()V
+HSPLcom/android/server/am/AppExitInfoTracker;->access$100(Lcom/android/server/am/AppExitInfoTracker;)Ljava/lang/Object;
+HSPLcom/android/server/am/AppExitInfoTracker;->access$200(Lcom/android/server/am/AppExitInfoTracker;)Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/AppExitInfoTracker;->access$300(J)Z
+HSPLcom/android/server/am/AppExitInfoTracker;->access$400(Lcom/android/server/am/AppExitInfoTracker;IILjava/lang/Integer;Ljava/lang/Integer;)Z
+HSPLcom/android/server/am/AppExitInfoTracker;->addExitInfoInner(Ljava/lang/String;ILandroid/app/ApplicationExitInfo;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->addExitInfoLocked(Landroid/app/ApplicationExitInfo;)Landroid/app/ApplicationExitInfo;
+PLcom/android/server/am/AppExitInfoTracker;->dumpHistoryProcessExitInfo(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/am/AppExitInfoTracker;->dumpHistoryProcessExitInfoLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Landroid/util/SparseArray;Landroid/icu/text/SimpleDateFormat;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->forEachPackage(Ljava/util/function/BiFunction;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->getExitInfo(Ljava/lang/String;II)Landroid/app/ApplicationExitInfo;
+HSPLcom/android/server/am/AppExitInfoTracker;->getExitInfo(Ljava/lang/String;IIILjava/util/ArrayList;)V
+HPLcom/android/server/am/AppExitInfoTracker;->handleNoteAppKillLocked(Landroid/app/ApplicationExitInfo;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->handleNoteProcessDiedLocked(Landroid/app/ApplicationExitInfo;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->handleZygoteSigChld(III)V
+HSPLcom/android/server/am/AppExitInfoTracker;->init(Lcom/android/server/am/ActivityManagerService;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->init(Lcom/android/server/am/ActivityManagerService;Landroid/os/Looper;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->isFresh(J)Z
+HPLcom/android/server/am/AppExitInfoTracker;->lambda$dumpHistoryProcessExitInfo$6$AppExitInfoTracker(Ljava/io/PrintWriter;Landroid/icu/text/SimpleDateFormat;Ljava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;
+HSPLcom/android/server/am/AppExitInfoTracker;->lambda$onSystemReady$0$AppExitInfoTracker()V
+HPLcom/android/server/am/AppExitInfoTracker;->lambda$persistProcessExitInfo$4(Landroid/util/proto/ProtoOutputStream;Ljava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;
+HPLcom/android/server/am/AppExitInfoTracker;->lambda$persistProcessExitInfo$5(Landroid/util/proto/ProtoOutputStream;Ljava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;
+HPLcom/android/server/am/AppExitInfoTracker;->lambda$removeByUserId$7(ILjava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;
+HPLcom/android/server/am/AppExitInfoTracker;->lambda$updateExitInfoIfNecessary$1$AppExitInfoTracker(ILjava/util/ArrayList;ILjava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;
+HSPLcom/android/server/am/AppExitInfoTracker;->lambda$updateExitInfoIfNecessary$2$AppExitInfoTracker(ILjava/util/ArrayList;ILjava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;
+HSPLcom/android/server/am/AppExitInfoTracker;->loadExistingProcessExitInfo()V
+HSPLcom/android/server/am/AppExitInfoTracker;->loadPackagesFromProto(Landroid/util/proto/ProtoInputStream;J)V
+HSPLcom/android/server/am/AppExitInfoTracker;->obtainRawRecordLocked(Lcom/android/server/am/ProcessRecord;)Landroid/app/ApplicationExitInfo;
+HPLcom/android/server/am/AppExitInfoTracker;->onPackageRemoved(Ljava/lang/String;IZ)V
+HSPLcom/android/server/am/AppExitInfoTracker;->onSystemReady()V
+PLcom/android/server/am/AppExitInfoTracker;->onUserRemoved(I)V
+HPLcom/android/server/am/AppExitInfoTracker;->persistProcessExitInfo()V
+HSPLcom/android/server/am/AppExitInfoTracker;->recycleRawRecordLocked(Landroid/app/ApplicationExitInfo;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->registerForPackageRemoval()V
+HSPLcom/android/server/am/AppExitInfoTracker;->registerForUserRemoval()V
+PLcom/android/server/am/AppExitInfoTracker;->removeByUserId(I)V
+HPLcom/android/server/am/AppExitInfoTracker;->removePackage(Ljava/lang/String;I)V
+HSPLcom/android/server/am/AppExitInfoTracker;->scheduleChildProcDied(III)V
+HSPLcom/android/server/am/AppExitInfoTracker;->scheduleNoteAppKill(Lcom/android/server/am/ProcessRecord;IILjava/lang/String;)V
+HPLcom/android/server/am/AppExitInfoTracker;->scheduleNoteLmkdProcKilled(II)V
+HSPLcom/android/server/am/AppExitInfoTracker;->scheduleNoteProcessDiedLocked(Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->schedulePersistProcessExitInfo(Z)V
+HSPLcom/android/server/am/AppExitInfoTracker;->updateExistingExitInfoRecordLocked(Landroid/app/ApplicationExitInfo;Ljava/lang/Integer;Ljava/lang/Integer;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->updateExitInfoIfNecessary(IILjava/lang/Integer;Ljava/lang/Integer;)Z
+PLcom/android/server/am/AppNotRespondingDialog$1;-><init>(Lcom/android/server/am/AppNotRespondingDialog;)V
+PLcom/android/server/am/AppNotRespondingDialog$1;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/am/AppNotRespondingDialog$Data;-><init>(Lcom/android/server/am/ProcessRecord;Landroid/content/pm/ApplicationInfo;Z)V
+PLcom/android/server/am/AppNotRespondingDialog;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/Context;Lcom/android/server/am/AppNotRespondingDialog$Data;)V
+PLcom/android/server/am/AppNotRespondingDialog;->access$000(Lcom/android/server/am/AppNotRespondingDialog;)Lcom/android/server/am/ProcessRecord;
+PLcom/android/server/am/AppNotRespondingDialog;->access$100(Lcom/android/server/am/AppNotRespondingDialog;)Lcom/android/server/am/ActivityManagerService;
+PLcom/android/server/am/AppNotRespondingDialog;->onClick(Landroid/view/View;)V
+PLcom/android/server/am/AppNotRespondingDialog;->onCreate(Landroid/os/Bundle;)V
+PLcom/android/server/am/AppWaitingForDebuggerDialog$1;-><init>(Lcom/android/server/am/AppWaitingForDebuggerDialog;)V
+PLcom/android/server/am/AppWaitingForDebuggerDialog;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/Context;Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/AppWaitingForDebuggerDialog;->onStop()V
 PLcom/android/server/am/AssistDataRequester$AssistDataRequesterCallbacks;->onAssistRequestCompleted()V
 PLcom/android/server/am/AssistDataRequester;-><init>(Landroid/content/Context;Landroid/view/IWindowManager;Landroid/app/AppOpsManager;Lcom/android/server/am/AssistDataRequester$AssistDataRequesterCallbacks;Ljava/lang/Object;II)V
 PLcom/android/server/am/AssistDataRequester;->cancel()V
 PLcom/android/server/am/AssistDataRequester;->dispatchAssistDataReceived(Landroid/os/Bundle;)V
 PLcom/android/server/am/AssistDataRequester;->dispatchAssistScreenshotReceived(Landroid/graphics/Bitmap;)V
 PLcom/android/server/am/AssistDataRequester;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/am/AssistDataRequester;->flushPendingAssistData()V
+HPLcom/android/server/am/AssistDataRequester;->flushPendingAssistData()V
 PLcom/android/server/am/AssistDataRequester;->getPendingDataCount()I
 PLcom/android/server/am/AssistDataRequester;->getPendingScreenshotCount()I
 PLcom/android/server/am/AssistDataRequester;->onHandleAssistData(Landroid/os/Bundle;)V
 PLcom/android/server/am/AssistDataRequester;->onHandleAssistScreenshot(Landroid/graphics/Bitmap;)V
 PLcom/android/server/am/AssistDataRequester;->processPendingAssistData()V
 PLcom/android/server/am/AssistDataRequester;->requestAssistData(Ljava/util/List;ZZZZILjava/lang/String;)V
-PLcom/android/server/am/AssistDataRequester;->requestData(Ljava/util/List;ZZZZZILjava/lang/String;)V
+HPLcom/android/server/am/AssistDataRequester;->requestData(Ljava/util/List;ZZZZZILjava/lang/String;)V
 PLcom/android/server/am/AssistDataRequester;->tryDispatchRequestComplete()V
 HPLcom/android/server/am/BackupRecord;-><init>(Landroid/content/pm/ApplicationInfo;II)V
+PLcom/android/server/am/BackupRecord;->toString()Ljava/lang/String;
+PLcom/android/server/am/BaseErrorDialog$1;-><init>(Lcom/android/server/am/BaseErrorDialog;)V
+PLcom/android/server/am/BaseErrorDialog$1;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/am/BaseErrorDialog;-><init>(Landroid/content/Context;)V
+PLcom/android/server/am/BaseErrorDialog;->access$002(Lcom/android/server/am/BaseErrorDialog;Z)Z
+PLcom/android/server/am/BaseErrorDialog;->access$100(Lcom/android/server/am/BaseErrorDialog;Z)V
+PLcom/android/server/am/BaseErrorDialog;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+PLcom/android/server/am/BaseErrorDialog;->onStart()V
+PLcom/android/server/am/BaseErrorDialog;->setEnabled(Z)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker$1;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker$1;->run()V
 HSPLcom/android/server/am/BatteryExternalStatsWorker$2;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker$2;->run()V
-PLcom/android/server/am/BatteryExternalStatsWorker$3;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
-HPLcom/android/server/am/BatteryExternalStatsWorker$3;->execute(Ljava/lang/Runnable;)V
+HSPLcom/android/server/am/BatteryExternalStatsWorker$3;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
+HSPLcom/android/server/am/BatteryExternalStatsWorker$3;->execute(Ljava/lang/Runnable;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;-><init>(Landroid/content/Context;Lcom/android/internal/os/BatteryStatsImpl;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->access$000(Lcom/android/server/am/BatteryExternalStatsWorker;)I
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->access$002(Lcom/android/server/am/BatteryExternalStatsWorker;I)I
@@ -4175,29 +6975,31 @@
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->awaitControllerInfo(Landroid/os/SynchronousResultReceiver;)Landroid/os/Parcelable;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->cancelCpuSyncDueToWakelockChange()V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->cancelSyncDueToBatteryLevelChangeLocked()V
-HPLcom/android/server/am/BatteryExternalStatsWorker;->extractDeltaLocked(Landroid/os/connectivity/WifiActivityEnergyInfo;)Landroid/os/connectivity/WifiActivityEnergyInfo;
-PLcom/android/server/am/BatteryExternalStatsWorker;->getLastCollectionTimeStamp()J
+HSPLcom/android/server/am/BatteryExternalStatsWorker;->extractDeltaLocked(Landroid/os/connectivity/WifiActivityEnergyInfo;)Landroid/os/connectivity/WifiActivityEnergyInfo;
+HPLcom/android/server/am/BatteryExternalStatsWorker;->getLastCollectionTimeStamp()J
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->lambda$new$0(Ljava/lang/Runnable;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->lambda$new$1(Ljava/lang/Runnable;)Ljava/lang/Thread;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->lambda$scheduleCpuSyncDueToWakelockChange$2$BatteryExternalStatsWorker()V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->lambda$scheduleCpuSyncDueToWakelockChange$3$BatteryExternalStatsWorker()V
-HPLcom/android/server/am/BatteryExternalStatsWorker;->lambda$updateExternalStatsLocked$5(Landroid/os/SynchronousResultReceiver;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
+PLcom/android/server/am/BatteryExternalStatsWorker;->lambda$scheduleSyncDueToBatteryLevelChange$4$BatteryExternalStatsWorker()V
+HSPLcom/android/server/am/BatteryExternalStatsWorker;->lambda$updateExternalStatsLocked$5(Landroid/os/SynchronousResultReceiver;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleCpuSyncDueToRemovedUid(I)Ljava/util/concurrent/Future;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleCpuSyncDueToScreenStateChange(ZZ)Ljava/util/concurrent/Future;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleCpuSyncDueToWakelockChange(J)Ljava/util/concurrent/Future;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleDelayedSyncLocked(Ljava/util/concurrent/Future;Ljava/lang/Runnable;J)Ljava/util/concurrent/Future;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleRunnable(Ljava/lang/Runnable;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSync(Ljava/lang/String;I)Ljava/util/concurrent/Future;
-PLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSyncDueToBatteryLevelChange(J)Ljava/util/concurrent/Future;
+HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSyncDueToBatteryLevelChange(J)Ljava/util/concurrent/Future;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSyncLocked(Ljava/lang/String;I)Ljava/util/concurrent/Future;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleWrite()Ljava/util/concurrent/Future;
+PLcom/android/server/am/BatteryExternalStatsWorker;->shutdown()V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->updateExternalStatsLocked(Ljava/lang/String;IZZZ)V
 HSPLcom/android/server/am/BatteryStatsService$1;-><init>(Lcom/android/server/am/BatteryStatsService;)V
 HSPLcom/android/server/am/BatteryStatsService$1;->getUserIds()[I
 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$1;)V
-PLcom/android/server/am/BatteryStatsService$LocalService;->getMobileIfaces()[Ljava/lang/String;
-PLcom/android/server/am/BatteryStatsService$LocalService;->getWifiIfaces()[Ljava/lang/String;
+HPLcom/android/server/am/BatteryStatsService$LocalService;->getMobileIfaces()[Ljava/lang/String;
+HPLcom/android/server/am/BatteryStatsService$LocalService;->getWifiIfaces()[Ljava/lang/String;
 PLcom/android/server/am/BatteryStatsService$LocalService;->noteJobsDeferred(IIJ)V
 HSPLcom/android/server/am/BatteryStatsService$WakeupReasonThread;-><init>(Lcom/android/server/am/BatteryStatsService;)V
 HSPLcom/android/server/am/BatteryStatsService$WakeupReasonThread;->run()V
@@ -4206,99 +7008,117 @@
 HSPLcom/android/server/am/BatteryStatsService;->access$100(Ljava/nio/ByteBuffer;)I
 HSPLcom/android/server/am/BatteryStatsService;->addIsolatedUid(II)V
 PLcom/android/server/am/BatteryStatsService;->awaitUninterruptibly(Ljava/util/concurrent/Future;)V
-PLcom/android/server/am/BatteryStatsService;->computeChargeTimeRemaining()J
-PLcom/android/server/am/BatteryStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/am/BatteryStatsService;->dumpHelp(Ljava/io/PrintWriter;)V
+HPLcom/android/server/am/BatteryStatsService;->computeChargeTimeRemaining()J
+HPLcom/android/server/am/BatteryStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/am/BatteryStatsService;->dumpHelp(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/am/BatteryStatsService;->enforceCallingPermission()V
 HSPLcom/android/server/am/BatteryStatsService;->fillLowPowerStats(Lcom/android/internal/os/RpmStats;)V
 HSPLcom/android/server/am/BatteryStatsService;->fillRailDataStats(Lcom/android/internal/os/RailStats;)V
 HSPLcom/android/server/am/BatteryStatsService;->getActiveStatistics()Lcom/android/internal/os/BatteryStatsImpl;
-PLcom/android/server/am/BatteryStatsService;->getCellularBatteryStats()Landroid/os/connectivity/CellularBatteryStats;
-PLcom/android/server/am/BatteryStatsService;->getGpsBatteryStats()Landroid/os/connectivity/GpsBatteryStats;
-PLcom/android/server/am/BatteryStatsService;->getHealthStatsForUidLocked(I)Landroid/os/health/HealthStatsParceler;
+HPLcom/android/server/am/BatteryStatsService;->getCellularBatteryStats()Landroid/os/connectivity/CellularBatteryStats;
+HPLcom/android/server/am/BatteryStatsService;->getGpsBatteryStats()Landroid/os/connectivity/GpsBatteryStats;
+HPLcom/android/server/am/BatteryStatsService;->getHealthStatsForUidLocked(I)Landroid/os/health/HealthStatsParceler;
 HSPLcom/android/server/am/BatteryStatsService;->getPlatformLowPowerStats()Ljava/lang/String;
 HSPLcom/android/server/am/BatteryStatsService;->getService()Lcom/android/internal/app/IBatteryStats;
+PLcom/android/server/am/BatteryStatsService;->getServiceType()I
+PLcom/android/server/am/BatteryStatsService;->getStatistics()[B
 PLcom/android/server/am/BatteryStatsService;->getStatisticsStream()Landroid/os/ParcelFileDescriptor;
 HSPLcom/android/server/am/BatteryStatsService;->getSubsystemLowPowerStats()Ljava/lang/String;
-PLcom/android/server/am/BatteryStatsService;->getWifiBatteryStats()Landroid/os/connectivity/WifiBatteryStats;
+HPLcom/android/server/am/BatteryStatsService;->getWifiBatteryStats()Landroid/os/connectivity/WifiBatteryStats;
 HSPLcom/android/server/am/BatteryStatsService;->initPowerManagement()V
-PLcom/android/server/am/BatteryStatsService;->isCharging()Z
+HPLcom/android/server/am/BatteryStatsService;->isCharging()Z
 PLcom/android/server/am/BatteryStatsService;->isOnBattery()Z
 HSPLcom/android/server/am/BatteryStatsService;->lambda$setBatteryState$0$BatteryStatsService(IIIIIIII)V
 HSPLcom/android/server/am/BatteryStatsService;->lambda$setBatteryState$1$BatteryStatsService(IIIIIIII)V
 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
-PLcom/android/server/am/BatteryStatsService;->noteBleScanResults(Landroid/os/WorkSource;I)V
-PLcom/android/server/am/BatteryStatsService;->noteBleScanStarted(Landroid/os/WorkSource;Z)V
-PLcom/android/server/am/BatteryStatsService;->noteBleScanStopped(Landroid/os/WorkSource;Z)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
-PLcom/android/server/am/BatteryStatsService;->noteConnectivityChanged(ILjava/lang/String;)V
-PLcom/android/server/am/BatteryStatsService;->noteDeviceIdleMode(ILjava/lang/String;I)V
-PLcom/android/server/am/BatteryStatsService;->noteEvent(ILjava/lang/String;I)V
-PLcom/android/server/am/BatteryStatsService;->noteFullWifiLockAcquiredFromSource(Landroid/os/WorkSource;)V
-PLcom/android/server/am/BatteryStatsService;->noteFullWifiLockReleasedFromSource(Landroid/os/WorkSource;)V
-PLcom/android/server/am/BatteryStatsService;->noteGpsChanged(Landroid/os/WorkSource;Landroid/os/WorkSource;)V
-PLcom/android/server/am/BatteryStatsService;->noteGpsSignalQuality(I)V
+HPLcom/android/server/am/BatteryStatsService;->noteConnectivityChanged(ILjava/lang/String;)V
+HPLcom/android/server/am/BatteryStatsService;->noteDeviceIdleMode(ILjava/lang/String;I)V
+HSPLcom/android/server/am/BatteryStatsService;->noteEvent(ILjava/lang/String;I)V
+PLcom/android/server/am/BatteryStatsService;->noteFlashlightOff(I)V
+PLcom/android/server/am/BatteryStatsService;->noteFlashlightOn(I)V
+HPLcom/android/server/am/BatteryStatsService;->noteFullWifiLockAcquiredFromSource(Landroid/os/WorkSource;)V
+HPLcom/android/server/am/BatteryStatsService;->noteFullWifiLockReleasedFromSource(Landroid/os/WorkSource;)V
+HPLcom/android/server/am/BatteryStatsService;->noteGpsChanged(Landroid/os/WorkSource;Landroid/os/WorkSource;)V
+HPLcom/android/server/am/BatteryStatsService;->noteGpsSignalQuality(I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteInteractive(Z)V
 HPLcom/android/server/am/BatteryStatsService;->noteJobFinish(Ljava/lang/String;IIII)V
 HPLcom/android/server/am/BatteryStatsService;->noteJobStart(Ljava/lang/String;III)V
-PLcom/android/server/am/BatteryStatsService;->noteJobsDeferred(IIJ)V
-PLcom/android/server/am/BatteryStatsService;->noteLongPartialWakelockFinish(Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/am/BatteryStatsService;->noteLongPartialWakelockFinishFromSource(Ljava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;)V
-PLcom/android/server/am/BatteryStatsService;->noteLongPartialWakelockStart(Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/am/BatteryStatsService;->noteLongPartialWakelockStartFromSource(Ljava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;)V
-PLcom/android/server/am/BatteryStatsService;->noteNetworkInterfaceType(Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteJobsDeferred(IIJ)V
+HPLcom/android/server/am/BatteryStatsService;->noteLongPartialWakelockFinish(Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteLongPartialWakelockFinishFromSource(Ljava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;)V
+HPLcom/android/server/am/BatteryStatsService;->noteLongPartialWakelockStart(Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteLongPartialWakelockStartFromSource(Ljava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;)V
+HPLcom/android/server/am/BatteryStatsService;->noteMobileRadioPowerState(IJI)V
+HPLcom/android/server/am/BatteryStatsService;->noteNetworkInterfaceType(Ljava/lang/String;I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteNetworkStatsEnabled()V
-PLcom/android/server/am/BatteryStatsService;->notePackageInstalled(Ljava/lang/String;J)V
-PLcom/android/server/am/BatteryStatsService;->notePhoneSignalStrength(Landroid/telephony/SignalStrength;)V
-PLcom/android/server/am/BatteryStatsService;->notePhoneState(I)V
+HPLcom/android/server/am/BatteryStatsService;->notePackageInstalled(Ljava/lang/String;J)V
+HPLcom/android/server/am/BatteryStatsService;->notePackageUninstalled(Ljava/lang/String;)V
+HPLcom/android/server/am/BatteryStatsService;->notePhoneDataConnectionState(IZI)V
+PLcom/android/server/am/BatteryStatsService;->notePhoneOff()V
+PLcom/android/server/am/BatteryStatsService;->notePhoneOn()V
+HPLcom/android/server/am/BatteryStatsService;->notePhoneSignalStrength(Landroid/telephony/SignalStrength;)V
+HPLcom/android/server/am/BatteryStatsService;->notePhoneState(I)V
 PLcom/android/server/am/BatteryStatsService;->noteProcessAnr(Ljava/lang/String;I)V
-PLcom/android/server/am/BatteryStatsService;->noteProcessCrash(Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteProcessCrash(Ljava/lang/String;I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteProcessFinish(Ljava/lang/String;I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteProcessStart(Ljava/lang/String;I)V
-PLcom/android/server/am/BatteryStatsService;->noteResetBleScan()V
+PLcom/android/server/am/BatteryStatsService;->noteResetAudio()V
+HSPLcom/android/server/am/BatteryStatsService;->noteResetBleScan()V
+PLcom/android/server/am/BatteryStatsService;->noteResetCamera()V
+PLcom/android/server/am/BatteryStatsService;->noteResetFlashlight()V
 HSPLcom/android/server/am/BatteryStatsService;->noteScreenBrightness(I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteScreenState(I)V
-PLcom/android/server/am/BatteryStatsService;->noteStartAudio(I)V
-PLcom/android/server/am/BatteryStatsService;->noteStartCamera(I)V
+HPLcom/android/server/am/BatteryStatsService;->noteStartAudio(I)V
+HPLcom/android/server/am/BatteryStatsService;->noteStartCamera(I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteStartSensor(II)V
-PLcom/android/server/am/BatteryStatsService;->noteStartVideo(I)V
+HPLcom/android/server/am/BatteryStatsService;->noteStartVideo(I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteStartWakelock(IILjava/lang/String;Ljava/lang/String;IZ)V
-HPLcom/android/server/am/BatteryStatsService;->noteStartWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZ)V
-PLcom/android/server/am/BatteryStatsService;->noteStopAudio(I)V
-PLcom/android/server/am/BatteryStatsService;->noteStopCamera(I)V
-HPLcom/android/server/am/BatteryStatsService;->noteStopSensor(II)V
-PLcom/android/server/am/BatteryStatsService;->noteStopVideo(I)V
+HSPLcom/android/server/am/BatteryStatsService;->noteStartWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZ)V
+HPLcom/android/server/am/BatteryStatsService;->noteStopAudio(I)V
+HPLcom/android/server/am/BatteryStatsService;->noteStopCamera(I)V
+HSPLcom/android/server/am/BatteryStatsService;->noteStopSensor(II)V
+HPLcom/android/server/am/BatteryStatsService;->noteStopVideo(I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteStopWakelock(IILjava/lang/String;Ljava/lang/String;I)V
-HPLcom/android/server/am/BatteryStatsService;->noteStopWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/am/BatteryStatsService;->noteSyncFinish(Ljava/lang/String;I)V
-PLcom/android/server/am/BatteryStatsService;->noteSyncStart(Ljava/lang/String;I)V
+HSPLcom/android/server/am/BatteryStatsService;->noteStopWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteSyncFinish(Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteSyncStart(Ljava/lang/String;I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteUidProcessState(II)V
-HPLcom/android/server/am/BatteryStatsService;->noteUserActivity(II)V
-PLcom/android/server/am/BatteryStatsService;->noteVibratorOff(I)V
-PLcom/android/server/am/BatteryStatsService;->noteVibratorOn(IJ)V
-PLcom/android/server/am/BatteryStatsService;->noteWakeUp(Ljava/lang/String;I)V
+HSPLcom/android/server/am/BatteryStatsService;->noteUserActivity(II)V
+HPLcom/android/server/am/BatteryStatsService;->noteVibratorOff(I)V
+HPLcom/android/server/am/BatteryStatsService;->noteVibratorOn(IJ)V
+HPLcom/android/server/am/BatteryStatsService;->noteWakeUp(Ljava/lang/String;I)V
 HPLcom/android/server/am/BatteryStatsService;->noteWakupAlarm(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;)V
 PLcom/android/server/am/BatteryStatsService;->noteWifiMulticastDisabled(I)V
 PLcom/android/server/am/BatteryStatsService;->noteWifiMulticastEnabled(I)V
 PLcom/android/server/am/BatteryStatsService;->noteWifiOff()V
 HSPLcom/android/server/am/BatteryStatsService;->noteWifiOn()V
 HPLcom/android/server/am/BatteryStatsService;->noteWifiRadioPowerState(IJI)V
-PLcom/android/server/am/BatteryStatsService;->noteWifiRssiChanged(I)V
-PLcom/android/server/am/BatteryStatsService;->noteWifiScanStartedFromSource(Landroid/os/WorkSource;)V
-PLcom/android/server/am/BatteryStatsService;->noteWifiScanStoppedFromSource(Landroid/os/WorkSource;)V
+HPLcom/android/server/am/BatteryStatsService;->noteWifiRssiChanged(I)V
+HPLcom/android/server/am/BatteryStatsService;->noteWifiScanStartedFromSource(Landroid/os/WorkSource;)V
+HPLcom/android/server/am/BatteryStatsService;->noteWifiScanStoppedFromSource(Landroid/os/WorkSource;)V
 PLcom/android/server/am/BatteryStatsService;->noteWifiState(ILjava/lang/String;)V
-PLcom/android/server/am/BatteryStatsService;->noteWifiSupplicantStateChanged(IZ)V
+HPLcom/android/server/am/BatteryStatsService;->noteWifiSupplicantStateChanged(IZ)V
+PLcom/android/server/am/BatteryStatsService;->onCleanupUser(I)V
+PLcom/android/server/am/BatteryStatsService;->onLowPowerModeChanged(Landroid/os/PowerSaveState;)V
 HSPLcom/android/server/am/BatteryStatsService;->publish()V
 HSPLcom/android/server/am/BatteryStatsService;->removeIsolatedUid(II)V
+PLcom/android/server/am/BatteryStatsService;->removeUid(I)V
 HSPLcom/android/server/am/BatteryStatsService;->scheduleWriteToDisk()V
 HSPLcom/android/server/am/BatteryStatsService;->setBatteryState(IIIIIIII)V
-PLcom/android/server/am/BatteryStatsService;->syncStats(Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->setChargingStateUpdateDelayMillis(I)Z
+HPLcom/android/server/am/BatteryStatsService;->shouldCollectExternalStats()Z
+PLcom/android/server/am/BatteryStatsService;->shutdown()V
+HPLcom/android/server/am/BatteryStatsService;->syncStats(Ljava/lang/String;I)V
 HSPLcom/android/server/am/BatteryStatsService;->systemServicesReady()V
-PLcom/android/server/am/BatteryStatsService;->takeUidSnapshot(I)Landroid/os/health/HealthStatsParceler;
+HPLcom/android/server/am/BatteryStatsService;->takeUidSnapshot(I)Landroid/os/health/HealthStatsParceler;
 HSPLcom/android/server/am/BroadcastConstants$SettingsObserver;-><init>(Lcom/android/server/am/BroadcastConstants;Landroid/os/Handler;)V
 HSPLcom/android/server/am/BroadcastConstants;-><init>(Ljava/lang/String;)V
-PLcom/android/server/am/BroadcastConstants;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/am/BroadcastConstants;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/am/BroadcastConstants;->startObserving(Landroid/os/Handler;Landroid/content/ContentResolver;)V
 HSPLcom/android/server/am/BroadcastConstants;->updateConstants()V
 HSPLcom/android/server/am/BroadcastDispatcher$1;-><init>(Lcom/android/server/am/BroadcastDispatcher;)V
@@ -4306,91 +7126,113 @@
 HPLcom/android/server/am/BroadcastDispatcher$1;->broadcastAlarmPending(I)V
 HSPLcom/android/server/am/BroadcastDispatcher$2;-><init>(Lcom/android/server/am/BroadcastDispatcher;)V
 PLcom/android/server/am/BroadcastDispatcher$2;->run()V
-PLcom/android/server/am/BroadcastDispatcher$Deferrals;-><init>(IJJI)V
-PLcom/android/server/am/BroadcastDispatcher$Deferrals;->add(Lcom/android/server/am/BroadcastRecord;)V
-PLcom/android/server/am/BroadcastDispatcher$Deferrals;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/am/BroadcastDispatcher$Deferrals;->size()I
+HPLcom/android/server/am/BroadcastDispatcher$Deferrals;-><init>(IJJI)V
+HPLcom/android/server/am/BroadcastDispatcher$Deferrals;->add(Lcom/android/server/am/BroadcastRecord;)V
+HPLcom/android/server/am/BroadcastDispatcher$Deferrals;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/am/BroadcastDispatcher$Deferrals;->dumpLocked(Lcom/android/server/am/BroadcastDispatcher$Dumper;)V
+HPLcom/android/server/am/BroadcastDispatcher$Deferrals;->size()I
+PLcom/android/server/am/BroadcastDispatcher$Dumper;-><init>(Lcom/android/server/am/BroadcastDispatcher;Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/text/SimpleDateFormat;)V
+PLcom/android/server/am/BroadcastDispatcher$Dumper;->didPrint()Z
+HPLcom/android/server/am/BroadcastDispatcher$Dumper;->dump(Lcom/android/server/am/BroadcastRecord;)V
+PLcom/android/server/am/BroadcastDispatcher$Dumper;->setHeading(Ljava/lang/String;)V
+PLcom/android/server/am/BroadcastDispatcher$Dumper;->setLabel(Ljava/lang/String;)V
 HSPLcom/android/server/am/BroadcastDispatcher;-><init>(Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastConstants;Landroid/os/Handler;Ljava/lang/Object;)V
-PLcom/android/server/am/BroadcastDispatcher;->access$000(Lcom/android/server/am/BroadcastDispatcher;)Ljava/lang/Object;
-PLcom/android/server/am/BroadcastDispatcher;->access$100(Lcom/android/server/am/BroadcastDispatcher;)Ljava/util/ArrayList;
-PLcom/android/server/am/BroadcastDispatcher;->access$200(Lcom/android/server/am/BroadcastDispatcher;)Ljava/util/ArrayList;
-PLcom/android/server/am/BroadcastDispatcher;->addDeferredBroadcast(ILcom/android/server/am/BroadcastRecord;)V
-PLcom/android/server/am/BroadcastDispatcher;->cleanupBroadcastListDisabledReceiversLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/Set;IZ)Z
-PLcom/android/server/am/BroadcastDispatcher;->cleanupDeferralsListDisabledReceiversLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/Set;IZ)Z
-PLcom/android/server/am/BroadcastDispatcher;->cleanupDisabledPackageReceiversLocked(Ljava/lang/String;Ljava/util/Set;IZ)Z
-PLcom/android/server/am/BroadcastDispatcher;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/am/BroadcastDispatcher;->access$000(Lcom/android/server/am/BroadcastDispatcher;)Ljava/lang/Object;
+HPLcom/android/server/am/BroadcastDispatcher;->access$100(Lcom/android/server/am/BroadcastDispatcher;)Ljava/util/ArrayList;
+HPLcom/android/server/am/BroadcastDispatcher;->access$200(Lcom/android/server/am/BroadcastDispatcher;)Ljava/util/ArrayList;
+PLcom/android/server/am/BroadcastDispatcher;->access$300(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastDispatcher$Deferrals;)V
+PLcom/android/server/am/BroadcastDispatcher;->access$400(Lcom/android/server/am/BroadcastDispatcher;)Lcom/android/server/am/BroadcastQueue;
+PLcom/android/server/am/BroadcastDispatcher;->access$502(Lcom/android/server/am/BroadcastDispatcher;Z)Z
+HPLcom/android/server/am/BroadcastDispatcher;->addDeferredBroadcast(ILcom/android/server/am/BroadcastRecord;)V
+PLcom/android/server/am/BroadcastDispatcher;->calculateDeferral(J)J
+HPLcom/android/server/am/BroadcastDispatcher;->cleanupBroadcastListDisabledReceiversLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/Set;IZ)Z
+HPLcom/android/server/am/BroadcastDispatcher;->cleanupDeferralsListDisabledReceiversLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/Set;IZ)Z
+HPLcom/android/server/am/BroadcastDispatcher;->cleanupDisabledPackageReceiversLocked(Ljava/lang/String;Ljava/util/Set;IZ)Z
+HPLcom/android/server/am/BroadcastDispatcher;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/am/BroadcastDispatcher;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/text/SimpleDateFormat;)Z
 HSPLcom/android/server/am/BroadcastDispatcher;->enqueueOrderedBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)V
 HSPLcom/android/server/am/BroadcastDispatcher;->findUidLocked(I)Lcom/android/server/am/BroadcastDispatcher$Deferrals;
 HSPLcom/android/server/am/BroadcastDispatcher;->findUidLocked(ILjava/util/ArrayList;)Lcom/android/server/am/BroadcastDispatcher$Deferrals;
 HSPLcom/android/server/am/BroadcastDispatcher;->getActiveBroadcastLocked()Lcom/android/server/am/BroadcastRecord;
 HSPLcom/android/server/am/BroadcastDispatcher;->getNextBroadcastLocked(J)Lcom/android/server/am/BroadcastRecord;
-PLcom/android/server/am/BroadcastDispatcher;->isDeferralsListEmpty(Ljava/util/ArrayList;)Z
+HPLcom/android/server/am/BroadcastDispatcher;->insertLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastDispatcher$Deferrals;)V
+HPLcom/android/server/am/BroadcastDispatcher;->isDeferralsListEmpty(Ljava/util/ArrayList;)Z
 HSPLcom/android/server/am/BroadcastDispatcher;->isDeferringLocked(I)Z
-PLcom/android/server/am/BroadcastDispatcher;->isEmpty()Z
-PLcom/android/server/am/BroadcastDispatcher;->pendingInDeferralsList(Ljava/util/ArrayList;)I
+HPLcom/android/server/am/BroadcastDispatcher;->isEmpty()Z
+HPLcom/android/server/am/BroadcastDispatcher;->pendingInDeferralsList(Ljava/util/ArrayList;)I
+PLcom/android/server/am/BroadcastDispatcher;->popLocked(Ljava/util/ArrayList;)Lcom/android/server/am/BroadcastRecord;
+HPLcom/android/server/am/BroadcastDispatcher;->removeDeferral(Lcom/android/server/am/BroadcastDispatcher$Deferrals;)Z
+HPLcom/android/server/am/BroadcastDispatcher;->replaceBroadcastLocked(Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;)Lcom/android/server/am/BroadcastRecord;
 HPLcom/android/server/am/BroadcastDispatcher;->replaceBroadcastLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;)Lcom/android/server/am/BroadcastRecord;
+HPLcom/android/server/am/BroadcastDispatcher;->replaceDeferredBroadcastLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;)Lcom/android/server/am/BroadcastRecord;
 HSPLcom/android/server/am/BroadcastDispatcher;->retireBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)V
 HSPLcom/android/server/am/BroadcastDispatcher;->scheduleDeferralCheckLocked(Z)V
 HSPLcom/android/server/am/BroadcastDispatcher;->start()V
-PLcom/android/server/am/BroadcastDispatcher;->startDeferring(I)V
+HPLcom/android/server/am/BroadcastDispatcher;->startDeferring(I)V
 HSPLcom/android/server/am/BroadcastFilter;-><init>(Landroid/content/IntentFilter;Lcom/android/server/am/ReceiverList;Ljava/lang/String;Ljava/lang/String;IIZZ)V
+PLcom/android/server/am/BroadcastFilter;->dumpBrief(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/am/BroadcastFilter;->dumpBroadcastFilterState(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/am/BroadcastFilter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/am/BroadcastFilter;->dumpInReceiverList(Ljava/io/PrintWriter;Landroid/util/Printer;Ljava/lang/String;)V
 HPLcom/android/server/am/BroadcastFilter;->toString()Ljava/lang/String;
 PLcom/android/server/am/BroadcastQueue$AppNotResponding;-><init>(Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)V
-PLcom/android/server/am/BroadcastQueue$AppNotResponding;->run()V
+HPLcom/android/server/am/BroadcastQueue$AppNotResponding;->run()V
 HSPLcom/android/server/am/BroadcastQueue$BroadcastHandler;-><init>(Lcom/android/server/am/BroadcastQueue;Landroid/os/Looper;)V
 HSPLcom/android/server/am/BroadcastQueue$BroadcastHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/am/BroadcastQueue;-><clinit>()V
 HSPLcom/android/server/am/BroadcastQueue;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Handler;Ljava/lang/String;Lcom/android/server/am/BroadcastConstants;Z)V
 HSPLcom/android/server/am/BroadcastQueue;->addBroadcastToHistoryLocked(Lcom/android/server/am/BroadcastRecord;)V
 HPLcom/android/server/am/BroadcastQueue;->backgroundServicesFinishedLocked(I)V
-PLcom/android/server/am/BroadcastQueue;->broadcastTimeoutLocked(Z)V
+HPLcom/android/server/am/BroadcastQueue;->broadcastTimeoutLocked(Z)V
 HSPLcom/android/server/am/BroadcastQueue;->cancelBroadcastTimeoutLocked()V
-PLcom/android/server/am/BroadcastQueue;->cleanupDisabledPackageReceiversLocked(Ljava/lang/String;Ljava/util/Set;IZ)Z
-HPLcom/android/server/am/BroadcastQueue;->createBroadcastTraceTitle(Lcom/android/server/am/BroadcastRecord;I)Ljava/lang/String;
+HPLcom/android/server/am/BroadcastQueue;->cleanupDisabledPackageReceiversLocked(Ljava/lang/String;Ljava/util/Set;IZ)Z
+HSPLcom/android/server/am/BroadcastQueue;->createBroadcastTraceTitle(Lcom/android/server/am/BroadcastRecord;I)Ljava/lang/String;
 HSPLcom/android/server/am/BroadcastQueue;->deliverToRegisteredReceiverLocked(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastFilter;ZI)V
 HPLcom/android/server/am/BroadcastQueue;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/am/BroadcastQueue;->dumpLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;Z)Z
+HPLcom/android/server/am/BroadcastQueue;->dumpLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;Z)Z
 HSPLcom/android/server/am/BroadcastQueue;->enqueueBroadcastHelper(Lcom/android/server/am/BroadcastRecord;)V
 HSPLcom/android/server/am/BroadcastQueue;->enqueueOrderedBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)V
 HSPLcom/android/server/am/BroadcastQueue;->enqueueParallelBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)V
-HPLcom/android/server/am/BroadcastQueue;->finishReceiverLocked(Lcom/android/server/am/BroadcastRecord;ILjava/lang/String;Landroid/os/Bundle;ZZ)Z
-PLcom/android/server/am/BroadcastQueue;->getMatchingOrderedReceiver(Landroid/os/IBinder;)Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastQueue;->finishReceiverLocked(Lcom/android/server/am/BroadcastRecord;ILjava/lang/String;Landroid/os/Bundle;ZZ)Z
+HSPLcom/android/server/am/BroadcastQueue;->getMatchingOrderedReceiver(Landroid/os/IBinder;)Lcom/android/server/am/BroadcastRecord;
 HSPLcom/android/server/am/BroadcastQueue;->isPendingBroadcastProcessLocked(I)Z
 HSPLcom/android/server/am/BroadcastQueue;->isSignaturePerm([Ljava/lang/String;)Z
-PLcom/android/server/am/BroadcastQueue;->lambda$postActivityStartTokenRemoval$0$BroadcastQueue(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;)V
-PLcom/android/server/am/BroadcastQueue;->logBroadcastReceiverDiscardLocked(Lcom/android/server/am/BroadcastRecord;)V
+HPLcom/android/server/am/BroadcastQueue;->lambda$postActivityStartTokenRemoval$0$BroadcastQueue(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;)V
+HPLcom/android/server/am/BroadcastQueue;->logBroadcastReceiverDiscardLocked(Lcom/android/server/am/BroadcastRecord;)V
 HSPLcom/android/server/am/BroadcastQueue;->maybeAddAllowBackgroundActivityStartsToken(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;)V
 PLcom/android/server/am/BroadcastQueue;->nextSplitTokenLocked()I
 HSPLcom/android/server/am/BroadcastQueue;->performReceiveLocked(Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 HPLcom/android/server/am/BroadcastQueue;->postActivityStartTokenRemoval(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;)V
-HPLcom/android/server/am/BroadcastQueue;->processCurBroadcastLocked(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/ProcessRecord;Z)V
+HSPLcom/android/server/am/BroadcastQueue;->processCurBroadcastLocked(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/ProcessRecord;Z)V
 HSPLcom/android/server/am/BroadcastQueue;->processNextBroadcast(Z)V
 HSPLcom/android/server/am/BroadcastQueue;->processNextBroadcastLocked(ZZ)V
 HSPLcom/android/server/am/BroadcastQueue;->replaceBroadcastLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;)Lcom/android/server/am/BroadcastRecord;
-PLcom/android/server/am/BroadcastQueue;->replaceOrderedBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)Lcom/android/server/am/BroadcastRecord;
+HPLcom/android/server/am/BroadcastQueue;->replaceOrderedBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)Lcom/android/server/am/BroadcastRecord;
 HSPLcom/android/server/am/BroadcastQueue;->replaceParallelBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)Lcom/android/server/am/BroadcastRecord;
 HSPLcom/android/server/am/BroadcastQueue;->requestStartTargetPermissionsReviewIfNeededLocked(Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;I)Z
 HSPLcom/android/server/am/BroadcastQueue;->ringAdvance(III)I
 HSPLcom/android/server/am/BroadcastQueue;->scheduleBroadcastsLocked()V
-PLcom/android/server/am/BroadcastQueue;->scheduleTempWhitelistLocked(IJLcom/android/server/am/BroadcastRecord;)V
-PLcom/android/server/am/BroadcastQueue;->sendPendingBroadcastsLocked(Lcom/android/server/am/ProcessRecord;)Z
+HPLcom/android/server/am/BroadcastQueue;->scheduleTempWhitelistLocked(IJLcom/android/server/am/BroadcastRecord;)V
+HSPLcom/android/server/am/BroadcastQueue;->sendPendingBroadcastsLocked(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/BroadcastQueue;->setBroadcastTimeoutLocked(J)V
 HSPLcom/android/server/am/BroadcastQueue;->skipCurrentReceiverLocked(Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/BroadcastQueue;->skipReceiverLocked(Lcom/android/server/am/BroadcastRecord;)V
+PLcom/android/server/am/BroadcastQueue;->skipPendingBroadcastLocked(I)V
+HPLcom/android/server/am/BroadcastQueue;->skipReceiverLocked(Lcom/android/server/am/BroadcastRecord;)V
 HSPLcom/android/server/am/BroadcastQueue;->start(Landroid/content/ContentResolver;)V
+PLcom/android/server/am/BroadcastQueue;->toString()Ljava/lang/String;
 HSPLcom/android/server/am/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;IIZLjava/lang/String;[Ljava/lang/String;ILandroid/app/BroadcastOptions;Ljava/util/List;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;ZZZIZZ)V
-HPLcom/android/server/am/BroadcastRecord;-><init>(Lcom/android/server/am/BroadcastRecord;Landroid/content/Intent;)V
+HSPLcom/android/server/am/BroadcastRecord;-><init>(Lcom/android/server/am/BroadcastRecord;Landroid/content/Intent;)V
 HPLcom/android/server/am/BroadcastRecord;->cleanupDisabledPackageReceiversLocked(Ljava/lang/String;Ljava/util/Set;IZ)Z
-PLcom/android/server/am/BroadcastRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/text/SimpleDateFormat;)V
-PLcom/android/server/am/BroadcastRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/am/BroadcastRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/text/SimpleDateFormat;)V
+HPLcom/android/server/am/BroadcastRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/am/BroadcastRecord;->getReceiverUid(Ljava/lang/Object;)I
 HSPLcom/android/server/am/BroadcastRecord;->maybeStripForHistory()Lcom/android/server/am/BroadcastRecord;
-PLcom/android/server/am/BroadcastRecord;->splitRecipientsLocked(II)Lcom/android/server/am/BroadcastRecord;
-PLcom/android/server/am/BroadcastRecord;->toString()Ljava/lang/String;
+HPLcom/android/server/am/BroadcastRecord;->splitRecipientsLocked(II)Lcom/android/server/am/BroadcastRecord;
+HPLcom/android/server/am/BroadcastRecord;->toString()Ljava/lang/String;
 HSPLcom/android/server/am/BroadcastStats$1;-><init>()V
-PLcom/android/server/am/BroadcastStats$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/am/BroadcastStats$1;->compare(Lcom/android/server/am/BroadcastStats$ActionEntry;Lcom/android/server/am/BroadcastStats$ActionEntry;)I
+HPLcom/android/server/am/BroadcastStats$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/am/BroadcastStats$ActionEntry;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/am/BroadcastStats$PackageEntry;-><init>()V
 HSPLcom/android/server/am/BroadcastStats$ViolationEntry;-><init>()V
@@ -4399,94 +7241,183 @@
 HSPLcom/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
 HPLcom/android/server/am/BroadcastStats;->dumpCheckinStats(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/am/BroadcastStats;->dumpStats(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/am/BroadcastStats;->dumpStats(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/am/BugReportHandlerUtil;->getBugReportHandlerAppReceivers(Landroid/content/Context;Ljava/lang/String;I)Ljava/util/List;
+PLcom/android/server/am/BugReportHandlerUtil;->getCustomBugReportHandlerApp(Landroid/content/Context;)Ljava/lang/String;
+PLcom/android/server/am/BugReportHandlerUtil;->getCustomBugReportHandlerUser(Landroid/content/Context;)I
+PLcom/android/server/am/BugReportHandlerUtil;->getDefaultBugReportHandlerApp(Landroid/content/Context;)Ljava/lang/String;
+PLcom/android/server/am/BugReportHandlerUtil;->isBugReportHandlerEnabled(Landroid/content/Context;)Z
+PLcom/android/server/am/BugReportHandlerUtil;->isBugreportWhitelistedApp(Ljava/lang/String;)Z
+PLcom/android/server/am/BugReportHandlerUtil;->isShellApp(Ljava/lang/String;)Z
+PLcom/android/server/am/BugReportHandlerUtil;->isValidBugReportHandlerApp(Ljava/lang/String;)Z
+PLcom/android/server/am/BugReportHandlerUtil;->launchBugReportHandlerApp(Landroid/content/Context;)Z
+HSPLcom/android/server/am/CachedAppOptimizer$1;-><init>(Lcom/android/server/am/CachedAppOptimizer;)V
+HPLcom/android/server/am/CachedAppOptimizer$1;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
+HSPLcom/android/server/am/CachedAppOptimizer$2;-><init>(Lcom/android/server/am/CachedAppOptimizer;)V
+HPLcom/android/server/am/CachedAppOptimizer$2;->removeEldestEntry(Ljava/util/Map$Entry;)Z
+HPLcom/android/server/am/CachedAppOptimizer$LastCompactionStats;-><init>([J)V
+HPLcom/android/server/am/CachedAppOptimizer$LastCompactionStats;->getRssAfterCompaction()[J
+HSPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;-><init>(Lcom/android/server/am/CachedAppOptimizer;)V
+HSPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;-><init>(Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer$1;)V
+HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/am/CachedAppOptimizer;-><clinit>()V
+HSPLcom/android/server/am/CachedAppOptimizer;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/CachedAppOptimizer;->access$000(Lcom/android/server/am/CachedAppOptimizer;)Ljava/lang/Object;
+PLcom/android/server/am/CachedAppOptimizer;->access$100(Lcom/android/server/am/CachedAppOptimizer;)V
+HPLcom/android/server/am/CachedAppOptimizer;->access$1000(Lcom/android/server/am/CachedAppOptimizer;)Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/CachedAppOptimizer;->access$1100(Lcom/android/server/am/CachedAppOptimizer;)Ljava/util/ArrayList;
+HPLcom/android/server/am/CachedAppOptimizer;->access$1200(Lcom/android/server/am/CachedAppOptimizer;)Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/CachedAppOptimizer;->access$1200(Lcom/android/server/am/CachedAppOptimizer;)Ljava/util/Map;
+HPLcom/android/server/am/CachedAppOptimizer;->access$1300(Lcom/android/server/am/CachedAppOptimizer;)Ljava/util/ArrayList;
+HPLcom/android/server/am/CachedAppOptimizer;->access$1308(Lcom/android/server/am/CachedAppOptimizer;)I
+HPLcom/android/server/am/CachedAppOptimizer;->access$1400(Lcom/android/server/am/CachedAppOptimizer;)Ljava/util/Map;
+HPLcom/android/server/am/CachedAppOptimizer;->access$1408(Lcom/android/server/am/CachedAppOptimizer;)I
+HPLcom/android/server/am/CachedAppOptimizer;->access$1508(Lcom/android/server/am/CachedAppOptimizer;)I
+HPLcom/android/server/am/CachedAppOptimizer;->access$1608(Lcom/android/server/am/CachedAppOptimizer;)I
+HPLcom/android/server/am/CachedAppOptimizer;->access$1700(Lcom/android/server/am/CachedAppOptimizer;)Ljava/util/Random;
+HPLcom/android/server/am/CachedAppOptimizer;->access$1708(Lcom/android/server/am/CachedAppOptimizer;)I
+HPLcom/android/server/am/CachedAppOptimizer;->access$1800(Lcom/android/server/am/CachedAppOptimizer;)V
+HPLcom/android/server/am/CachedAppOptimizer;->access$1808(Lcom/android/server/am/CachedAppOptimizer;)I
+HPLcom/android/server/am/CachedAppOptimizer;->access$1900(Lcom/android/server/am/CachedAppOptimizer;)Ljava/util/Random;
+HPLcom/android/server/am/CachedAppOptimizer;->access$2000(Lcom/android/server/am/CachedAppOptimizer;)V
+PLcom/android/server/am/CachedAppOptimizer;->access$400(Lcom/android/server/am/CachedAppOptimizer;)V
+PLcom/android/server/am/CachedAppOptimizer;->access$500(Lcom/android/server/am/CachedAppOptimizer;)V
+PLcom/android/server/am/CachedAppOptimizer;->access$600(Lcom/android/server/am/CachedAppOptimizer;)V
+PLcom/android/server/am/CachedAppOptimizer;->access$700(Lcom/android/server/am/CachedAppOptimizer;)V
+PLcom/android/server/am/CachedAppOptimizer;->access$800(Lcom/android/server/am/CachedAppOptimizer;)Lcom/android/server/am/CachedAppOptimizer$PropertyChangedCallbackForTest;
+PLcom/android/server/am/CachedAppOptimizer;->access$800(Lcom/android/server/am/CachedAppOptimizer;)V
+PLcom/android/server/am/CachedAppOptimizer;->access$900(Lcom/android/server/am/CachedAppOptimizer;)Lcom/android/server/am/CachedAppOptimizer$PropertyChangedCallbackForTest;
+HSPLcom/android/server/am/CachedAppOptimizer;->compactActionIntToString(I)Ljava/lang/String;
+PLcom/android/server/am/CachedAppOptimizer;->compactAllSystem()V
+HPLcom/android/server/am/CachedAppOptimizer;->compactAppBfgs(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/CachedAppOptimizer;->compactAppFull(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/CachedAppOptimizer;->compactAppPersistent(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/CachedAppOptimizer;->compactAppSome(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/CachedAppOptimizer;->dump(Ljava/io/PrintWriter;)V
+HSPLcom/android/server/am/CachedAppOptimizer;->init()V
+HSPLcom/android/server/am/CachedAppOptimizer;->parseProcStateThrottle(Ljava/lang/String;)Z
+HPLcom/android/server/am/CachedAppOptimizer;->shouldCompactBFGS(Lcom/android/server/am/ProcessRecord;J)Z
+HPLcom/android/server/am/CachedAppOptimizer;->shouldCompactPersistent(Lcom/android/server/am/ProcessRecord;J)Z
+HSPLcom/android/server/am/CachedAppOptimizer;->updateCompactStatsdSampleRate()V
+HSPLcom/android/server/am/CachedAppOptimizer;->updateCompactionActions()V
+HSPLcom/android/server/am/CachedAppOptimizer;->updateCompactionThrottles()V
+HSPLcom/android/server/am/CachedAppOptimizer;->updateFreezerStatsdSampleRate()V
+HSPLcom/android/server/am/CachedAppOptimizer;->updateFullDeltaRssThrottle()V
+HSPLcom/android/server/am/CachedAppOptimizer;->updateFullRssThrottle()V
+HSPLcom/android/server/am/CachedAppOptimizer;->updateProcStateThrottle()V
+HSPLcom/android/server/am/CachedAppOptimizer;->updateStatsdSampleRate()V
+HSPLcom/android/server/am/CachedAppOptimizer;->updateUseCompaction()V
+HSPLcom/android/server/am/CachedAppOptimizer;->updateUseFreezer()V
+HSPLcom/android/server/am/CachedAppOptimizer;->useCompaction()Z
+HSPLcom/android/server/am/CachedAppOptimizer;->useFreezer()Z
 HSPLcom/android/server/am/ConnectionRecord;-><clinit>()V
 HSPLcom/android/server/am/ConnectionRecord;-><init>(Lcom/android/server/am/AppBindRecord;Lcom/android/server/wm/ActivityServiceConnectionsHolder;Landroid/app/IServiceConnection;IILandroid/app/PendingIntent;ILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/am/ConnectionRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/am/ConnectionRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/am/ConnectionRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLcom/android/server/am/ConnectionRecord;->hasFlag(I)Z
+HSPLcom/android/server/am/ConnectionRecord;->hasFlag(I)Z
 HPLcom/android/server/am/ConnectionRecord;->notHasFlag(I)Z
 HSPLcom/android/server/am/ConnectionRecord;->startAssociationIfNeeded()V
-PLcom/android/server/am/ConnectionRecord;->stopAssociation()V
+HSPLcom/android/server/am/ConnectionRecord;->stopAssociation()V
 HSPLcom/android/server/am/ConnectionRecord;->toString()Ljava/lang/String;
-HPLcom/android/server/am/ConnectionRecord;->trackProcState(IIJ)V
+HSPLcom/android/server/am/ConnectionRecord;->trackProcState(IIJ)V
 HSPLcom/android/server/am/ContentProviderConnection;-><init>(Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)V
 HSPLcom/android/server/am/ContentProviderConnection;->startAssociationIfNeeded()V
-PLcom/android/server/am/ContentProviderConnection;->stopAssociation()V
-PLcom/android/server/am/ContentProviderConnection;->toClientString(Ljava/lang/StringBuilder;)V
-PLcom/android/server/am/ContentProviderConnection;->toShortString()Ljava/lang/String;
+HPLcom/android/server/am/ContentProviderConnection;->stopAssociation()V
+PLcom/android/server/am/ContentProviderConnection;->toClientString()Ljava/lang/String;
+HPLcom/android/server/am/ContentProviderConnection;->toClientString(Ljava/lang/StringBuilder;)V
+HPLcom/android/server/am/ContentProviderConnection;->toShortString()Ljava/lang/String;
+HPLcom/android/server/am/ContentProviderConnection;->toShortString(Ljava/lang/StringBuilder;)V
+PLcom/android/server/am/ContentProviderConnection;->toString()Ljava/lang/String;
 HPLcom/android/server/am/ContentProviderConnection;->trackProcState(IIJ)V
 HSPLcom/android/server/am/ContentProviderRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/pm/ProviderInfo;Landroid/content/pm/ApplicationInfo;Landroid/content/ComponentName;Z)V
-PLcom/android/server/am/ContentProviderRecord;->addExternalProcessHandleLocked(Landroid/os/IBinder;ILjava/lang/String;)V
+HPLcom/android/server/am/ContentProviderRecord;-><init>(Lcom/android/server/am/ContentProviderRecord;)V
+HPLcom/android/server/am/ContentProviderRecord;->addExternalProcessHandleLocked(Landroid/os/IBinder;ILjava/lang/String;)V
 HSPLcom/android/server/am/ContentProviderRecord;->canRunHere(Lcom/android/server/am/ProcessRecord;)Z
-PLcom/android/server/am/ContentProviderRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-PLcom/android/server/am/ContentProviderRecord;->getComponentName()Landroid/content/ComponentName;
-HPLcom/android/server/am/ContentProviderRecord;->hasExternalProcessHandles()Z
+HPLcom/android/server/am/ContentProviderRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HPLcom/android/server/am/ContentProviderRecord;->getComponentName()Landroid/content/ComponentName;
+PLcom/android/server/am/ContentProviderRecord;->hasConnectionOrHandle()Z
+HSPLcom/android/server/am/ContentProviderRecord;->hasExternalProcessHandles()Z
 HSPLcom/android/server/am/ContentProviderRecord;->newHolder(Lcom/android/server/am/ContentProviderConnection;)Landroid/app/ContentProviderHolder;
-PLcom/android/server/am/ContentProviderRecord;->removeExternalProcessHandleLocked(Landroid/os/IBinder;)Z
+HPLcom/android/server/am/ContentProviderRecord;->removeExternalProcessHandleLocked(Landroid/os/IBinder;)Z
 HSPLcom/android/server/am/ContentProviderRecord;->setProcess(Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/ContentProviderRecord;->toShortString()Ljava/lang/String;
-PLcom/android/server/am/ContentProviderRecord;->toString()Ljava/lang/String;
+HPLcom/android/server/am/ContentProviderRecord;->toShortString()Ljava/lang/String;
+HPLcom/android/server/am/ContentProviderRecord;->toString()Ljava/lang/String;
+HSPLcom/android/server/am/CoreSettingsObserver$DeviceConfigEntry;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;)V
 HSPLcom/android/server/am/CoreSettingsObserver;-><clinit>()V
 HSPLcom/android/server/am/CoreSettingsObserver;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/CoreSettingsObserver;->beginObserveCoreSettings()V
 HSPLcom/android/server/am/CoreSettingsObserver;->getCoreSettingsLocked()Landroid/os/Bundle;
+PLcom/android/server/am/CoreSettingsObserver;->lambda$beginObserveCoreSettings$0$CoreSettingsObserver(Landroid/provider/DeviceConfig$Properties;)V
+PLcom/android/server/am/CoreSettingsObserver;->onChange(Z)V
 HSPLcom/android/server/am/CoreSettingsObserver;->populateSettings(Landroid/os/Bundle;Ljava/util/Map;)V
+HSPLcom/android/server/am/CoreSettingsObserver;->populateSettingsFromDeviceConfig()V
 HSPLcom/android/server/am/CoreSettingsObserver;->sendCoreSettings()V
-PLcom/android/server/am/EventLogTags;->writeAmCrash(IILjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/am/EventLogTags;->writeAmDropProcess(I)V
+HPLcom/android/server/am/EventLogTags;->writeAmCrash(IILjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/am/EventLogTags;->writeAmDropProcess(I)V
 HSPLcom/android/server/am/EventLogTags;->writeAmLowMemory(I)V
-PLcom/android/server/am/EventLogTags;->writeAmMemFactor(II)V
-PLcom/android/server/am/EventLogTags;->writeAmMeminfo(JJJJJ)V
+HSPLcom/android/server/am/EventLogTags;->writeAmMemFactor(II)V
+HPLcom/android/server/am/EventLogTags;->writeAmMeminfo(JJJJJ)V
+PLcom/android/server/am/EventLogTags;->writeAmPreBoot(ILjava/lang/String;)V
 HSPLcom/android/server/am/EventLogTags;->writeAmProcBound(IILjava/lang/String;)V
 HSPLcom/android/server/am/EventLogTags;->writeAmProcDied(IILjava/lang/String;II)V
+PLcom/android/server/am/EventLogTags;->writeAmProcessStartTimeout(IIILjava/lang/String;)V
+PLcom/android/server/am/EventLogTags;->writeAmProviderLostProcess(ILjava/lang/String;ILjava/lang/String;)V
 HPLcom/android/server/am/EventLogTags;->writeAmPss(IILjava/lang/String;JJJJIIJ)V
+PLcom/android/server/am/EventLogTags;->writeAmStopIdleService(ILjava/lang/String;)V
 HSPLcom/android/server/am/EventLogTags;->writeAmUidActive(I)V
+PLcom/android/server/am/EventLogTags;->writeAmUidIdle(I)V
 HSPLcom/android/server/am/EventLogTags;->writeAmUidRunning(I)V
 HSPLcom/android/server/am/EventLogTags;->writeAmUidStopped(I)V
 PLcom/android/server/am/EventLogTags;->writeAmUserStateChanged(II)V
-HPLcom/android/server/am/EventLogTags;->writeAmWtf(IILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/am/EventLogTags;->writeAmWtf(IILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/EventLogTags;->writeBootProgressAmsReady(J)V
-PLcom/android/server/am/EventLogTags;->writeBootProgressEnableScreen(J)V
+HSPLcom/android/server/am/EventLogTags;->writeBootProgressEnableScreen(J)V
 HSPLcom/android/server/am/EventLogTags;->writeConfigurationChanged(I)V
 HPLcom/android/server/am/HealthStatsBatteryStatsWriter;-><init>()V
 HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->addTimer(Landroid/os/health/HealthStatsWriter;ILandroid/os/BatteryStats$Timer;)V
 HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->addTimers(Landroid/os/health/HealthStatsWriter;ILjava/lang/String;Landroid/os/BatteryStats$Timer;)V
-PLcom/android/server/am/HealthStatsBatteryStatsWriter;->writePid(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Pid;)V
-PLcom/android/server/am/HealthStatsBatteryStatsWriter;->writePkg(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Pkg;)V
-PLcom/android/server/am/HealthStatsBatteryStatsWriter;->writeProc(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Proc;)V
-PLcom/android/server/am/HealthStatsBatteryStatsWriter;->writeServ(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Pkg$Serv;)V
+HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writePid(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Pid;)V
+HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writePkg(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Pkg;)V
+HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writeProc(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Proc;)V
+HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writeServ(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Pkg$Serv;)V
 HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writeUid(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats;Landroid/os/BatteryStats$Uid;)V
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;)V
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;I)V
-PLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Z)V
-PLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Z)V
+HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IZ)V
+HPLcom/android/server/am/HostingRecord;->byAppZygote(Landroid/content/ComponentName;Ljava/lang/String;I)Lcom/android/server/am/HostingRecord;
+HPLcom/android/server/am/HostingRecord;->byWebviewZygote(Landroid/content/ComponentName;)Lcom/android/server/am/HostingRecord;
 PLcom/android/server/am/HostingRecord;->getDefiningPackageName()Ljava/lang/String;
-PLcom/android/server/am/HostingRecord;->getDefiningUid()I
+HSPLcom/android/server/am/HostingRecord;->getDefiningUid()I
 HSPLcom/android/server/am/HostingRecord;->getName()Ljava/lang/String;
 HSPLcom/android/server/am/HostingRecord;->getType()Ljava/lang/String;
 HSPLcom/android/server/am/HostingRecord;->isTopApp()Z
 HSPLcom/android/server/am/HostingRecord;->usesAppZygote()Z
 HSPLcom/android/server/am/HostingRecord;->usesWebviewZygote()Z
+PLcom/android/server/am/InstrumentationReporter$MyThread;-><init>(Lcom/android/server/am/InstrumentationReporter;)V
+PLcom/android/server/am/InstrumentationReporter$MyThread;->run()V
+PLcom/android/server/am/InstrumentationReporter$Report;-><init>(Lcom/android/server/am/InstrumentationReporter;ILandroid/app/IInstrumentationWatcher;Landroid/content/ComponentName;ILandroid/os/Bundle;)V
 HSPLcom/android/server/am/InstrumentationReporter;-><init>()V
+PLcom/android/server/am/InstrumentationReporter;->report(Lcom/android/server/am/InstrumentationReporter$Report;)V
+PLcom/android/server/am/InstrumentationReporter;->reportFinished(Landroid/app/IInstrumentationWatcher;Landroid/content/ComponentName;ILandroid/os/Bundle;)V
 HSPLcom/android/server/am/IntentBindRecord;-><init>(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent$FilterComparison;)V
 HSPLcom/android/server/am/IntentBindRecord;->collectFlags()I
 HPLcom/android/server/am/IntentBindRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/am/IntentBindRecord;->dumpInService(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/am/LmkdConnection$1;-><init>(Lcom/android/server/am/LmkdConnection;)V
-PLcom/android/server/am/LmkdConnection$1;->onFileDescriptorEvents(Ljava/io/FileDescriptor;I)I
+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
-PLcom/android/server/am/LmkdConnection;->access$000(Lcom/android/server/am/LmkdConnection;Ljava/io/FileDescriptor;I)I
+HPLcom/android/server/am/LmkdConnection;->access$000(Lcom/android/server/am/LmkdConnection;Ljava/io/FileDescriptor;I)I
 HSPLcom/android/server/am/LmkdConnection;->connect()Z
 HSPLcom/android/server/am/LmkdConnection;->exchange(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Z
-PLcom/android/server/am/LmkdConnection;->fileDescriptorEventHandler(Ljava/io/FileDescriptor;I)I
+HPLcom/android/server/am/LmkdConnection;->fileDescriptorEventHandler(Ljava/io/FileDescriptor;I)I
 HSPLcom/android/server/am/LmkdConnection;->isConnected()Z
 HSPLcom/android/server/am/LmkdConnection;->openSocket()Landroid/net/LocalSocket;
-PLcom/android/server/am/LmkdConnection;->processIncomingData()V
-PLcom/android/server/am/LmkdConnection;->read(Ljava/nio/ByteBuffer;)I
+HPLcom/android/server/am/LmkdConnection;->processIncomingData()V
+HPLcom/android/server/am/LmkdConnection;->read(Ljava/nio/ByteBuffer;)I
 HSPLcom/android/server/am/LmkdConnection;->waitForConnection(J)Z
 HSPLcom/android/server/am/LmkdConnection;->write(Ljava/nio/ByteBuffer;)Z
 HSPLcom/android/server/am/LowMemDetector$LowMemThread;-><init>(Lcom/android/server/am/LowMemDetector;)V
@@ -4494,21 +7425,24 @@
 HSPLcom/android/server/am/LowMemDetector$LowMemThread;->run()V
 HSPLcom/android/server/am/LowMemDetector;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/LowMemDetector;->access$100(Lcom/android/server/am/LowMemDetector;)I
-PLcom/android/server/am/LowMemDetector;->access$300(Lcom/android/server/am/LowMemDetector;)Ljava/lang/Object;
-PLcom/android/server/am/LowMemDetector;->access$402(Lcom/android/server/am/LowMemDetector;I)I
+HSPLcom/android/server/am/LowMemDetector;->access$300(Lcom/android/server/am/LowMemDetector;)Ljava/lang/Object;
+HSPLcom/android/server/am/LowMemDetector;->access$402(Lcom/android/server/am/LowMemDetector;I)I
 HSPLcom/android/server/am/LowMemDetector;->getMemFactor()I
 HSPLcom/android/server/am/LowMemDetector;->isAvailable()Z
 HPLcom/android/server/am/MemoryStatUtil$MemoryStat;-><init>()V
 HSPLcom/android/server/am/MemoryStatUtil;-><clinit>()V
 HSPLcom/android/server/am/MemoryStatUtil;->hasMemcg()Z
-PLcom/android/server/am/MemoryStatUtil;->parseMemoryStatFromProcfs(Ljava/lang/String;)Lcom/android/server/am/MemoryStatUtil$MemoryStat;
-PLcom/android/server/am/MemoryStatUtil;->readFileContents(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/am/MemoryStatUtil;->parseMemoryStatFromProcfs(Ljava/lang/String;)Lcom/android/server/am/MemoryStatUtil$MemoryStat;
+HPLcom/android/server/am/MemoryStatUtil;->readFileContents(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/am/MemoryStatUtil;->readMemoryStatFromFilesystem(II)Lcom/android/server/am/MemoryStatUtil$MemoryStat;
+HPLcom/android/server/am/MemoryStatUtil;->readMemoryStatFromProcfs(I)Lcom/android/server/am/MemoryStatUtil$MemoryStat;
 PLcom/android/server/am/NativeCrashListener$NativeCrashReporter;-><init>(Lcom/android/server/am/NativeCrashListener;Lcom/android/server/am/ProcessRecord;ILjava/lang/String;)V
 PLcom/android/server/am/NativeCrashListener$NativeCrashReporter;->run()V
 HSPLcom/android/server/am/NativeCrashListener;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/NativeCrashListener;->consumeNativeCrashData(Ljava/io/FileDescriptor;)V
+PLcom/android/server/am/NativeCrashListener;->readExactly(Ljava/io/FileDescriptor;[BII)I
 HSPLcom/android/server/am/NativeCrashListener;->run()V
+PLcom/android/server/am/NativeCrashListener;->unpackInt([BI)I
 HSPLcom/android/server/am/OomAdjProfiler$CpuTimes;-><init>(Lcom/android/server/am/OomAdjProfiler;)V
 HSPLcom/android/server/am/OomAdjProfiler$CpuTimes;-><init>(Lcom/android/server/am/OomAdjProfiler;Lcom/android/server/am/OomAdjProfiler$1;)V
 HSPLcom/android/server/am/OomAdjProfiler$CpuTimes;->addCpuTimeMs(JZZ)V
@@ -4522,37 +7456,40 @@
 HSPLcom/android/server/am/OomAdjProfiler;->batteryPowerChanged(Z)V
 PLcom/android/server/am/OomAdjProfiler;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/am/OomAdjProfiler;->lambda$oLbVP84ACmxo_1QlnwlSuhi91W4(Lcom/android/server/am/OomAdjProfiler;ZZZ)V
-PLcom/android/server/am/OomAdjProfiler;->onWakefulnessChanged(I)V
+HPLcom/android/server/am/OomAdjProfiler;->onWakefulnessChanged(I)V
 HSPLcom/android/server/am/OomAdjProfiler;->oomAdjEnded()V
 HSPLcom/android/server/am/OomAdjProfiler;->oomAdjStarted()V
 HSPLcom/android/server/am/OomAdjProfiler;->reset()V
 HSPLcom/android/server/am/OomAdjProfiler;->scheduleSystemServerCpuTimeUpdate()V
 HSPLcom/android/server/am/OomAdjProfiler;->updateSystemServerCpuTime(ZZZ)V
 HSPLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;-><init>(Lcom/android/server/am/OomAdjuster;)V
-PLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;->initialize(Lcom/android/server/am/ProcessRecord;IZIIIII)V
+HPLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;->initialize(Lcom/android/server/am/ProcessRecord;IZIIIII)V
 HPLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;->onOtherActivity()V
-PLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;->onPausedActivity()V
-PLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;->onStoppingActivity(Z)V
-PLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;->onVisibleActivity()V
+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;-><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;->applyOomAdjLocked(Lcom/android/server/am/ProcessRecord;ZJJ)Z
 HSPLcom/android/server/am/OomAdjuster;->assignCachedAdjIfNecessary(Ljava/util/ArrayList;)V
 HSPLcom/android/server/am/OomAdjuster;->computeOomAdjLocked(Lcom/android/server/am/ProcessRecord;ILcom/android/server/am/ProcessRecord;ZJZZ)Z
 HSPLcom/android/server/am/OomAdjuster;->createAdjusterThread()Lcom/android/server/ServiceThread;
+PLcom/android/server/am/OomAdjuster;->dumpAppCompactorSettings(Ljava/io/PrintWriter;)V
+PLcom/android/server/am/OomAdjuster;->dumpCachedAppOptimizerSettings(Ljava/io/PrintWriter;)V
 PLcom/android/server/am/OomAdjuster;->dumpProcCountsLocked(Ljava/io/PrintWriter;)V
 PLcom/android/server/am/OomAdjuster;->dumpProcessListVariablesLocked(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/am/OomAdjuster;->dumpSequenceNumbersLocked(Ljava/io/PrintWriter;)V
 HPLcom/android/server/am/OomAdjuster;->idleUidsLocked()V
 HSPLcom/android/server/am/OomAdjuster;->initSettings()V
-HPLcom/android/server/am/OomAdjuster;->lambda$new$0(Landroid/os/Message;)Z
-PLcom/android/server/am/OomAdjuster;->maybeUpdateLastTopTime(Lcom/android/server/am/ProcessRecord;J)V
+HSPLcom/android/server/am/OomAdjuster;->lambda$new$0(Landroid/os/Message;)Z
+HSPLcom/android/server/am/OomAdjuster;->maybeUpdateLastTopTime(Lcom/android/server/am/ProcessRecord;J)V
 HSPLcom/android/server/am/OomAdjuster;->maybeUpdateUsageStatsLocked(Lcom/android/server/am/ProcessRecord;J)V
 HPLcom/android/server/am/OomAdjuster;->setAppIdTempWhitelistStateLocked(IZ)V
 HSPLcom/android/server/am/OomAdjuster;->setAttachingSchedGroupLocked(Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/OomAdjuster;->setUidTempWhitelistStateLocked(IZ)V
-HPLcom/android/server/am/OomAdjuster;->shouldSkipDueToCycle(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;IIZ)Z
+HPLcom/android/server/am/OomAdjuster;->setUidTempWhitelistStateLocked(IZ)V
+HSPLcom/android/server/am/OomAdjuster;->shouldSkipDueToCycle(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;IIZ)Z
 HSPLcom/android/server/am/OomAdjuster;->updateAndTrimProcessLocked(JJJLcom/android/server/am/ActiveUids;)Z
+HSPLcom/android/server/am/OomAdjuster;->updateAppFreezeStateLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/OomAdjuster;->updateAppUidRecLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/OomAdjuster;->updateOomAdjLocked(Lcom/android/server/am/ProcessRecord;ILcom/android/server/am/ProcessRecord;ZJ)Z
 HSPLcom/android/server/am/OomAdjuster;->updateOomAdjLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)Z
@@ -4563,36 +7500,42 @@
 HSPLcom/android/server/am/PendingIntentController;-><init>(Landroid/os/Looper;Lcom/android/server/am/UserController;)V
 HPLcom/android/server/am/PendingIntentController;->cancelIntentSender(Landroid/content/IIntentSender;)V
 HPLcom/android/server/am/PendingIntentController;->cancelIntentSender(Lcom/android/server/am/PendingIntentRecord;Z)V
-PLcom/android/server/am/PendingIntentController;->dumpPendingIntents(Ljava/io/PrintWriter;ZLjava/lang/String;)V
+PLcom/android/server/am/PendingIntentController;->clearPendingResultForActivity(Landroid/os/IBinder;Ljava/lang/ref/WeakReference;)V
+HPLcom/android/server/am/PendingIntentController;->dumpPendingIntents(Ljava/io/PrintWriter;ZLjava/lang/String;)V
 HSPLcom/android/server/am/PendingIntentController;->getIntentSender(ILjava/lang/String;IILandroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;)Lcom/android/server/am/PendingIntentRecord;
+HPLcom/android/server/am/PendingIntentController;->handlePendingIntentCancelled(Landroid/os/RemoteCallbackList;)V
+PLcom/android/server/am/PendingIntentController;->lambda$pDmmJDvS20vSAAXh9qdzbN0P8N0(Lcom/android/server/am/PendingIntentController;Landroid/os/RemoteCallbackList;)V
+PLcom/android/server/am/PendingIntentController;->lambda$sPmaborOkBSSEP2wiimxXw-eYDQ(Lcom/android/server/am/PendingIntentController;Landroid/os/IBinder;Ljava/lang/ref/WeakReference;)V
 HPLcom/android/server/am/PendingIntentController;->makeIntentSenderCanceled(Lcom/android/server/am/PendingIntentRecord;)V
 HSPLcom/android/server/am/PendingIntentController;->onActivityManagerInternalAdded()V
-PLcom/android/server/am/PendingIntentController;->registerIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V
+HPLcom/android/server/am/PendingIntentController;->registerIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V
+HPLcom/android/server/am/PendingIntentController;->removePendingIntentsForPackage(Ljava/lang/String;IIZ)Z
 HPLcom/android/server/am/PendingIntentController;->setPendingIntentWhitelistDuration(Landroid/content/IIntentSender;Landroid/os/IBinder;J)V
 HPLcom/android/server/am/PendingIntentController;->unregisterIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V
 HSPLcom/android/server/am/PendingIntentRecord$Key;-><init>(ILjava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILcom/android/server/wm/SafeActivityOptions;I)V
 HSPLcom/android/server/am/PendingIntentRecord$Key;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/server/am/PendingIntentRecord$Key;->hashCode()I
-PLcom/android/server/am/PendingIntentRecord$Key;->typeName()Ljava/lang/String;
+HPLcom/android/server/am/PendingIntentRecord$Key;->typeName()Ljava/lang/String;
 HSPLcom/android/server/am/PendingIntentRecord;-><init>(Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentRecord$Key;I)V
-PLcom/android/server/am/PendingIntentRecord;->clearAllowBgActivityStarts(Landroid/os/IBinder;)V
-HPLcom/android/server/am/PendingIntentRecord;->completeFinalize()V
-PLcom/android/server/am/PendingIntentRecord;->detachCancelListenersLocked()Landroid/os/RemoteCallbackList;
-PLcom/android/server/am/PendingIntentRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/am/PendingIntentRecord;->finalize()V
-PLcom/android/server/am/PendingIntentRecord;->lambda$hlEHdgdG_SS5n3v7IRr7e6QZgLQ(Lcom/android/server/am/PendingIntentRecord;)V
+HPLcom/android/server/am/PendingIntentRecord;->clearAllowBgActivityStarts(Landroid/os/IBinder;)V
+HSPLcom/android/server/am/PendingIntentRecord;->completeFinalize()V
+HPLcom/android/server/am/PendingIntentRecord;->detachCancelListenersLocked()Landroid/os/RemoteCallbackList;
+HPLcom/android/server/am/PendingIntentRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/am/PendingIntentRecord;->finalize()V
+HSPLcom/android/server/am/PendingIntentRecord;->lambda$hlEHdgdG_SS5n3v7IRr7e6QZgLQ(Lcom/android/server/am/PendingIntentRecord;)V
+HPLcom/android/server/am/PendingIntentRecord;->registerCancelListenerLocked(Lcom/android/internal/os/IResultReceiver;)V
 HPLcom/android/server/am/PendingIntentRecord;->sendInner(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;)I
-PLcom/android/server/am/PendingIntentRecord;->sendWithResult(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)I
-PLcom/android/server/am/PendingIntentRecord;->setAllowBgActivityStarts(Landroid/os/IBinder;I)V
+HPLcom/android/server/am/PendingIntentRecord;->sendWithResult(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)I
+HPLcom/android/server/am/PendingIntentRecord;->setAllowBgActivityStarts(Landroid/os/IBinder;I)V
 HPLcom/android/server/am/PendingIntentRecord;->setWhitelistDurationLocked(Landroid/os/IBinder;J)V
 HPLcom/android/server/am/PendingIntentRecord;->toString()Ljava/lang/String;
 HPLcom/android/server/am/PendingIntentRecord;->unregisterCancelListenerLocked(Lcom/android/internal/os/IResultReceiver;)V
 HSPLcom/android/server/am/PendingTempWhitelists;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/PendingTempWhitelists;->indexOfKey(I)I
-PLcom/android/server/am/PendingTempWhitelists;->put(ILcom/android/server/am/ActivityManagerService$PendingTempWhitelist;)V
-PLcom/android/server/am/PendingTempWhitelists;->removeAt(I)V
-PLcom/android/server/am/PendingTempWhitelists;->size()I
-PLcom/android/server/am/PendingTempWhitelists;->valueAt(I)Lcom/android/server/am/ActivityManagerService$PendingTempWhitelist;
+HPLcom/android/server/am/PendingTempWhitelists;->put(ILcom/android/server/am/ActivityManagerService$PendingTempWhitelist;)V
+HPLcom/android/server/am/PendingTempWhitelists;->removeAt(I)V
+HPLcom/android/server/am/PendingTempWhitelists;->size()I
+HPLcom/android/server/am/PendingTempWhitelists;->valueAt(I)Lcom/android/server/am/ActivityManagerService$PendingTempWhitelist;
 PLcom/android/server/am/PersistentConnection$1;-><init>(Lcom/android/server/am/PersistentConnection;)V
 PLcom/android/server/am/PersistentConnection$1;->onBindingDied(Landroid/content/ComponentName;)V
 PLcom/android/server/am/PersistentConnection$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
@@ -4612,12 +7555,14 @@
 PLcom/android/server/am/PersistentConnection;->access$802(Lcom/android/server/am/PersistentConnection;Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/am/PersistentConnection;->access$900(Lcom/android/server/am/PersistentConnection;)V
 PLcom/android/server/am/PersistentConnection;->bind()V
+PLcom/android/server/am/PersistentConnection;->bindForBackoff()V
 PLcom/android/server/am/PersistentConnection;->bindInnerLocked(Z)V
 PLcom/android/server/am/PersistentConnection;->cleanUpConnectionLocked()V
 PLcom/android/server/am/PersistentConnection;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/am/PersistentConnection;->injectPostAtTime(Ljava/lang/Runnable;J)V
 PLcom/android/server/am/PersistentConnection;->injectRemoveCallbacks(Ljava/lang/Runnable;)V
 PLcom/android/server/am/PersistentConnection;->injectUptimeMillis()J
+PLcom/android/server/am/PersistentConnection;->lambda$new$0$PersistentConnection()V
 PLcom/android/server/am/PersistentConnection;->lambda$rkvbuN0FQdQUv1hqSwDvmwwh6Uk(Lcom/android/server/am/PersistentConnection;)V
 PLcom/android/server/am/PersistentConnection;->resetBackoffLocked()V
 PLcom/android/server/am/PersistentConnection;->scheduleRebindLocked()V
@@ -4635,86 +7580,108 @@
 PLcom/android/server/am/PreBootBroadcaster;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 PLcom/android/server/am/PreBootBroadcaster;->sendNext()V
 HSPLcom/android/server/am/ProcessList$1;-><init>(Lcom/android/server/am/ProcessList;)V
-PLcom/android/server/am/ProcessList$1;->handleUnsolicitedMessage(Ljava/nio/ByteBuffer;I)Z
-PLcom/android/server/am/ProcessList$1;->isReplyExpected(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)Z
+HPLcom/android/server/am/ProcessList$1;->handleUnsolicitedMessage(Ljava/nio/ByteBuffer;I)Z
+HPLcom/android/server/am/ProcessList$1;->isReplyExpected(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)Z
 HSPLcom/android/server/am/ProcessList$1;->onConnect(Ljava/io/OutputStream;)Z
+HSPLcom/android/server/am/ProcessList$ImperceptibleKillRunner$H;-><init>(Lcom/android/server/am/ProcessList$ImperceptibleKillRunner;Landroid/os/Looper;)V
+HSPLcom/android/server/am/ProcessList$ImperceptibleKillRunner;-><init>(Lcom/android/server/am/ProcessList;Landroid/os/Looper;)V
 HSPLcom/android/server/am/ProcessList$IsolatedUidRange;-><init>(Lcom/android/server/am/ProcessList;II)V
-PLcom/android/server/am/ProcessList$IsolatedUidRange;->allocateIsolatedUidLocked(I)I
+HPLcom/android/server/am/ProcessList$IsolatedUidRange;->allocateIsolatedUidLocked(I)I
 HSPLcom/android/server/am/ProcessList$IsolatedUidRange;->freeIsolatedUidLocked(I)V
 HSPLcom/android/server/am/ProcessList$IsolatedUidRangeAllocator;-><init>(Lcom/android/server/am/ProcessList;III)V
-PLcom/android/server/am/ProcessList$IsolatedUidRangeAllocator;->freeUidRangeLocked(Landroid/content/pm/ApplicationInfo;)V
-PLcom/android/server/am/ProcessList$IsolatedUidRangeAllocator;->getIsolatedUidRangeLocked(Ljava/lang/String;I)Lcom/android/server/am/ProcessList$IsolatedUidRange;
-PLcom/android/server/am/ProcessList$IsolatedUidRangeAllocator;->getOrCreateIsolatedUidRangeLocked(Ljava/lang/String;I)Lcom/android/server/am/ProcessList$IsolatedUidRange;
+HPLcom/android/server/am/ProcessList$IsolatedUidRangeAllocator;->freeUidRangeLocked(Landroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/am/ProcessList$IsolatedUidRangeAllocator;->getIsolatedUidRangeLocked(Ljava/lang/String;I)Lcom/android/server/am/ProcessList$IsolatedUidRange;
+HPLcom/android/server/am/ProcessList$IsolatedUidRangeAllocator;->getOrCreateIsolatedUidRangeLocked(Ljava/lang/String;I)Lcom/android/server/am/ProcessList$IsolatedUidRange;
 HSPLcom/android/server/am/ProcessList$KillHandler;-><init>(Lcom/android/server/am/ProcessList;Landroid/os/Looper;)V
 HSPLcom/android/server/am/ProcessList$KillHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/am/ProcessList$MyProcessMap;-><init>(Lcom/android/server/am/ProcessList;)V
 HSPLcom/android/server/am/ProcessList$MyProcessMap;->put(Ljava/lang/String;ILcom/android/server/am/ProcessRecord;)Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ProcessList$MyProcessMap;->remove(Ljava/lang/String;I)Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ProcessList$ProcStateMemTracker;-><init>()V
-PLcom/android/server/am/ProcessList$ProcStateMemTracker;->dumpLine(Ljava/io/PrintWriter;)V
+HPLcom/android/server/am/ProcessList$ProcStateMemTracker;->dumpLine(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/am/ProcessList;-><clinit>()V
 HSPLcom/android/server/am/ProcessList;-><init>()V
 HSPLcom/android/server/am/ProcessList;->abortNextPssTime(Lcom/android/server/am/ProcessList$ProcStateMemTracker;)V
 HSPLcom/android/server/am/ProcessList;->access$000()Lcom/android/server/am/LmkdConnection;
+PLcom/android/server/am/ProcessList;->access$100(Lcom/android/server/am/ProcessList;II)V
 HSPLcom/android/server/am/ProcessList;->addProcessNameLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ProcessList;->appendRamKb(Ljava/lang/StringBuilder;J)V
 HSPLcom/android/server/am/ProcessList;->applyDisplaySize(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/am/ProcessList;->buildOomTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZ)Ljava/lang/String;
 HSPLcom/android/server/am/ProcessList;->checkSlow(JLjava/lang/String;)V
 HPLcom/android/server/am/ProcessList;->clearAllDnsCacheLocked()V
-PLcom/android/server/am/ProcessList;->collectProcessesLocked(IZ[Ljava/lang/String;)Ljava/util/ArrayList;
+HPLcom/android/server/am/ProcessList;->collectProcessesLocked(IZ[Ljava/lang/String;)Ljava/util/ArrayList;
 HPLcom/android/server/am/ProcessList;->commitNextPssTime(Lcom/android/server/am/ProcessList$ProcStateMemTracker;)V
+HSPLcom/android/server/am/ProcessList;->computeGidsForProcess(II[I)[I
 HSPLcom/android/server/am/ProcessList;->computeNextPssTime(ILcom/android/server/am/ProcessList$ProcStateMemTracker;ZZJ)J
 HPLcom/android/server/am/ProcessList;->createAppZygoteForProcessIfNeeded(Lcom/android/server/am/ProcessRecord;)Landroid/os/AppZygote;
+HSPLcom/android/server/am/ProcessList;->createSystemServerSocketForZygote()Landroid/net/LocalSocket;
+HPLcom/android/server/am/ProcessList;->doStopUidForIdleUidsLocked()V
 HSPLcom/android/server/am/ProcessList;->dumpLruListHeaderLocked(Ljava/io/PrintWriter;)V
 HPLcom/android/server/am/ProcessList;->fillInProcMemInfoLocked(Lcom/android/server/am/ProcessRecord;Landroid/app/ActivityManager$RunningAppProcessInfo;I)V
-HPLcom/android/server/am/ProcessList;->findAppProcessLocked(Landroid/os/IBinder;Ljava/lang/String;)Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ProcessList;->findAppProcessLocked(Landroid/os/IBinder;Ljava/lang/String;)Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ProcessList;->getBlockStateForUid(Lcom/android/server/am/UidRecord;)I
-PLcom/android/server/am/ProcessList;->getCachedRestoreThresholdKb()J
+HSPLcom/android/server/am/ProcessList;->getCachedRestoreThresholdKb()J
 HSPLcom/android/server/am/ProcessList;->getLRURecordForAppLocked(Landroid/app/IApplicationThread;)Lcom/android/server/am/ProcessRecord;
-PLcom/android/server/am/ProcessList;->getLmkdKillCount(II)Ljava/lang/Integer;
+HPLcom/android/server/am/ProcessList;->getLmkdKillCount(II)Ljava/lang/Integer;
 HSPLcom/android/server/am/ProcessList;->getLruSizeLocked()I
 HSPLcom/android/server/am/ProcessList;->getMemLevel(I)J
 HSPLcom/android/server/am/ProcessList;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V
+PLcom/android/server/am/ProcessList;->getOrCreateIsolatedUidRangeLocked(Landroid/content/pm/ApplicationInfo;Lcom/android/server/am/HostingRecord;)Lcom/android/server/am/ProcessList$IsolatedUidRange;
+HSPLcom/android/server/am/ProcessList;->getPackageAppDataInfoMap(Landroid/content/pm/PackageManagerInternal;[Ljava/lang/String;I)Ljava/util/Map;
 HSPLcom/android/server/am/ProcessList;->getProcessRecordLocked(Ljava/lang/String;IZ)Lcom/android/server/am/ProcessRecord;
 HPLcom/android/server/am/ProcessList;->getRunningAppProcessesLocked(ZIZII)Ljava/util/List;
 HSPLcom/android/server/am/ProcessList;->getUidProcStateLocked(I)I
 HSPLcom/android/server/am/ProcessList;->getUidRecordLocked(I)Lcom/android/server/am/UidRecord;
-PLcom/android/server/am/ProcessList;->handleLmkdProcKilled(II)V
+HPLcom/android/server/am/ProcessList;->handleLmkdProcKilled(II)V
+HSPLcom/android/server/am/ProcessList;->handleProcessStart(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;[IIILjava/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;->handleZygoteMessages(Ljava/io/FileDescriptor;I)I
 HSPLcom/android/server/am/ProcessList;->haveBackgroundProcessLocked()Z
 HSPLcom/android/server/am/ProcessList;->incrementProcStateSeqAndNotifyAppsLocked(Lcom/android/server/am/ActiveUids;)V
 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;
 HPLcom/android/server/am/ProcessList;->isProcessAliveLiteLocked(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/ProcessList;->killAllBackgroundProcessesExceptLocked(II)V
-PLcom/android/server/am/ProcessList;->killAppZygoteIfNeededLocked(Landroid/os/AppZygote;)V
+HPLcom/android/server/am/ProcessList;->killAppZygoteIfNeededLocked(Landroid/os/AppZygote;)V
+HPLcom/android/server/am/ProcessList;->killAppZygoteIfNeededLocked(Landroid/os/AppZygote;Z)V
+HPLcom/android/server/am/ProcessList;->killAppZygotesLocked(Ljava/lang/String;IIZ)V
+HPLcom/android/server/am/ProcessList;->killPackageProcessesLocked(Ljava/lang/String;IIILjava/lang/String;)Z
 HPLcom/android/server/am/ProcessList;->killPackageProcessesLocked(Ljava/lang/String;IIIZZZZZLjava/lang/String;)Z
 HPLcom/android/server/am/ProcessList;->killProcAndWaitIfNecessaryLocked(Lcom/android/server/am/ProcessRecord;ZZLjava/lang/String;J)V
 HSPLcom/android/server/am/ProcessList;->killProcessGroup(II)V
+HSPLcom/android/server/am/ProcessList;->lambda$hjUwwFAIhoht4KRKnKeUve_Kcto(Lcom/android/server/am/ProcessList;Ljava/io/FileDescriptor;I)I
 HSPLcom/android/server/am/ProcessList;->lambda$startProcessLocked$0$ProcessList(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;[IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
 HSPLcom/android/server/am/ProcessList;->makeOomAdjString(IZ)Ljava/lang/String;
-PLcom/android/server/am/ProcessList;->makeProcStateProtoEnum(I)I
+HPLcom/android/server/am/ProcessList;->makeProcStateProtoEnum(I)I
 HSPLcom/android/server/am/ProcessList;->makeProcStateString(I)Ljava/lang/String;
+HPLcom/android/server/am/ProcessList;->minTimeFromStateChange(Z)J
 HSPLcom/android/server/am/ProcessList;->newProcessRecordLocked(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ZILcom/android/server/am/HostingRecord;)Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ProcessList;->noteAppKill(Lcom/android/server/am/ProcessRecord;IILjava/lang/String;)V
+HSPLcom/android/server/am/ProcessList;->noteProcessDiedLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ProcessList;->onLmkdConnect(Ljava/io/OutputStream;)Z
-PLcom/android/server/am/ProcessList;->procStateToImportance(IILandroid/app/ActivityManager$RunningAppProcessInfo;I)I
-HPLcom/android/server/am/ProcessList;->procStatesDifferForMem(II)Z
+HSPLcom/android/server/am/ProcessList;->onSystemReady()V
+HPLcom/android/server/am/ProcessList;->procStateToImportance(IILandroid/app/ActivityManager$RunningAppProcessInfo;I)I
+HSPLcom/android/server/am/ProcessList;->procStatesDifferForMem(II)Z
 HSPLcom/android/server/am/ProcessList;->remove(I)V
 HSPLcom/android/server/am/ProcessList;->removeLruProcessLocked(Lcom/android/server/am/ProcessRecord;)V
 HPLcom/android/server/am/ProcessList;->removeProcessFromAppZygoteLocked(Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/ProcessList;->removeProcessLocked(Lcom/android/server/am/ProcessRecord;ZZLjava/lang/String;)Z
+HPLcom/android/server/am/ProcessList;->removeProcessLocked(Lcom/android/server/am/ProcessRecord;ZZLjava/lang/String;)Z
+HPLcom/android/server/am/ProcessList;->removeProcessLocked(Lcom/android/server/am/ProcessRecord;ZZLjava/lang/String;I)Z
 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;
 HPLcom/android/server/am/ProcessList;->sendPackageBroadcastLocked(I[Ljava/lang/String;I)V
+HPLcom/android/server/am/ProcessList;->setAllHttpProxy()V
 HSPLcom/android/server/am/ProcessList;->setOomAdj(III)V
+HSPLcom/android/server/am/ProcessList;->shouldIsolateAppData(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/ProcessList;->startProcess(Lcom/android/server/am/HostingRecord;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;I[IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)Landroid/os/Process$ProcessStartResult;
 HSPLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/HostingRecord;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;I[IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)Z
 PLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/HostingRecord;)V
 HSPLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/HostingRecord;Ljava/lang/String;)Z
 HSPLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/HostingRecord;ZZZLjava/lang/String;)Z
 HSPLcom/android/server/am/ProcessList;->startProcessLocked(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;ZILcom/android/server/am/HostingRecord;ZZIZLjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/Runnable;)Lcom/android/server/am/ProcessRecord;
+PLcom/android/server/am/ProcessList;->updateAllTimePrefsLocked(I)V
 HSPLcom/android/server/am/ProcessList;->updateApplicationInfoLocked(Ljava/util/List;IZ)V
 HSPLcom/android/server/am/ProcessList;->updateClientActivitiesOrdering(Lcom/android/server/am/ProcessRecord;III)V
 HSPLcom/android/server/am/ProcessList;->updateCoreSettingsLocked(Landroid/os/Bundle;)V
@@ -4723,7 +7690,26 @@
 HSPLcom/android/server/am/ProcessList;->updateOomLevels(IIZ)V
 HSPLcom/android/server/am/ProcessList;->writeLmkd(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Z
 HSPLcom/android/server/am/ProcessMemInfo;-><init>(Ljava/lang/String;IIILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/am/ProcessRecord$ErrorDialogController;-><init>(Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/ProcessRecord$ErrorDialogController;->clearAllErrorDialogs()V
+HSPLcom/android/server/am/ProcessRecord$ErrorDialogController;->clearAnrDialogs()V
+HSPLcom/android/server/am/ProcessRecord$ErrorDialogController;->clearCrashDialogs()V
+HSPLcom/android/server/am/ProcessRecord$ErrorDialogController;->clearCrashDialogs(Z)V
+HSPLcom/android/server/am/ProcessRecord$ErrorDialogController;->clearViolationDialogs()V
+HSPLcom/android/server/am/ProcessRecord$ErrorDialogController;->clearWaitingDialog()V
+PLcom/android/server/am/ProcessRecord$ErrorDialogController;->forAllDialogs(Ljava/util/List;Ljava/util/function/Consumer;)V
+PLcom/android/server/am/ProcessRecord$ErrorDialogController;->getDisplayContexts(Z)Ljava/util/List;
+HPLcom/android/server/am/ProcessRecord$ErrorDialogController;->hasAnrDialogs()Z
+HPLcom/android/server/am/ProcessRecord$ErrorDialogController;->hasCrashDialogs()Z
+PLcom/android/server/am/ProcessRecord$ErrorDialogController;->hasDebugWaitingDialog()Z
+PLcom/android/server/am/ProcessRecord$ErrorDialogController;->lambda$showAnrDialogs$1$ProcessRecord$ErrorDialogController()V
+PLcom/android/server/am/ProcessRecord$ErrorDialogController;->lambda$showCrashDialogs$0$ProcessRecord$ErrorDialogController()V
+PLcom/android/server/am/ProcessRecord$ErrorDialogController;->lambda$showDebugWaitingDialogs$3$ProcessRecord$ErrorDialogController()V
+PLcom/android/server/am/ProcessRecord$ErrorDialogController;->showAnrDialogs(Lcom/android/server/am/AppNotRespondingDialog$Data;)V
+PLcom/android/server/am/ProcessRecord$ErrorDialogController;->showCrashDialogs(Lcom/android/server/am/AppErrorDialog$Data;)V
+PLcom/android/server/am/ProcessRecord$ErrorDialogController;->showDebugWaitingDialogs()V
 HSPLcom/android/server/am/ProcessRecord$PackageList;-><init>(Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ProcessRecord$PackageList;->clear()V
 HSPLcom/android/server/am/ProcessRecord$PackageList;->containsKey(Ljava/lang/Object;)Z
 HSPLcom/android/server/am/ProcessRecord$PackageList;->get(Ljava/lang/String;)Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;
 HSPLcom/android/server/am/ProcessRecord$PackageList;->keyAt(I)Ljava/lang/String;
@@ -4732,67 +7718,83 @@
 HSPLcom/android/server/am/ProcessRecord$PackageList;->valueAt(I)Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;
 HSPLcom/android/server/am/ProcessRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;I)V
 HSPLcom/android/server/am/ProcessRecord;->access$000(Lcom/android/server/am/ProcessRecord;)Lcom/android/server/wm/WindowProcessController;
-PLcom/android/server/am/ProcessRecord;->addAllowBackgroundActivityStartsToken(Landroid/os/Binder;)V
+PLcom/android/server/am/ProcessRecord;->access$300(Lcom/android/server/am/ProcessRecord;)Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/ProcessRecord;->addAllowBackgroundActivityStartsToken(Landroid/os/Binder;)V
 HSPLcom/android/server/am/ProcessRecord;->addBoundClientUid(I)V
 HSPLcom/android/server/am/ProcessRecord;->addBoundClientUidsOfNewService(Lcom/android/server/am/ServiceRecord;)V
 HSPLcom/android/server/am/ProcessRecord;->addPackage(Ljava/lang/String;JLcom/android/server/am/ProcessStatsService;)Z
-PLcom/android/server/am/ProcessRecord;->appNotResponding(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Lcom/android/server/wm/WindowProcessController;ZLjava/lang/String;)V
+PLcom/android/server/am/ProcessRecord;->appDied()V
+PLcom/android/server/am/ProcessRecord;->appDied(Ljava/lang/String;)V
+HPLcom/android/server/am/ProcessRecord;->appNotResponding(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Lcom/android/server/wm/WindowProcessController;ZLjava/lang/String;)V
 HSPLcom/android/server/am/ProcessRecord;->clearBoundClientUids()V
 HPLcom/android/server/am/ProcessRecord;->computeOomAdjFromActivitiesIfNecessary(Lcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;IZIIIII)V
-PLcom/android/server/am/ProcessRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/am/ProcessRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/am/ProcessRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/am/ProcessRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/am/ProcessRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
 HSPLcom/android/server/am/ProcessRecord;->forceProcessStateUpTo(I)V
 HSPLcom/android/server/am/ProcessRecord;->getActiveInstrumentation()Lcom/android/server/am/ActiveInstrumentation;
-HPLcom/android/server/am/ProcessRecord;->getCachedHasActivities()Z
-HPLcom/android/server/am/ProcessRecord;->getCachedHasRecentTasks()Z
+HSPLcom/android/server/am/ProcessRecord;->getCachedHasActivities()Z
+HSPLcom/android/server/am/ProcessRecord;->getCachedHasRecentTasks()Z
 HSPLcom/android/server/am/ProcessRecord;->getCachedHasVisibleActivities()Z
-HPLcom/android/server/am/ProcessRecord;->getCachedIsHeavyWeight()Z
-HPLcom/android/server/am/ProcessRecord;->getCachedIsHomeProcess()Z
-HPLcom/android/server/am/ProcessRecord;->getCachedIsPreviousProcess()Z
-HPLcom/android/server/am/ProcessRecord;->getCachedIsReceivingBroadcast(Landroid/util/ArraySet;)Z
-PLcom/android/server/am/ProcessRecord;->getCpuTime()J
+HSPLcom/android/server/am/ProcessRecord;->getCachedIsHeavyWeight()Z
+HSPLcom/android/server/am/ProcessRecord;->getCachedIsHomeProcess()Z
+HSPLcom/android/server/am/ProcessRecord;->getCachedIsPreviousProcess()Z
+HSPLcom/android/server/am/ProcessRecord;->getCachedIsReceivingBroadcast(Landroid/util/ArraySet;)Z
+HSPLcom/android/server/am/ProcessRecord;->getCpuTime()J
 HSPLcom/android/server/am/ProcessRecord;->getCurProcState()I
 HSPLcom/android/server/am/ProcessRecord;->getCurRawAdj()I
-HPLcom/android/server/am/ProcessRecord;->getCurRawProcState()I
+HSPLcom/android/server/am/ProcessRecord;->getCurRawProcState()I
 HSPLcom/android/server/am/ProcessRecord;->getCurrentSchedulingGroup()I
+HSPLcom/android/server/am/ProcessRecord;->getDialogController()Lcom/android/server/am/ProcessRecord$ErrorDialogController;
 HSPLcom/android/server/am/ProcessRecord;->getFgInteractionTime()J
 HSPLcom/android/server/am/ProcessRecord;->getForegroundServiceTypes()I
+PLcom/android/server/am/ProcessRecord;->getInputDispatchingTimeout()J
 HSPLcom/android/server/am/ProcessRecord;->getInteractionEventTime()J
-PLcom/android/server/am/ProcessRecord;->getLruProcessList()Ljava/util/List;
+HPLcom/android/server/am/ProcessRecord;->getLruProcessList()Ljava/util/List;
 HSPLcom/android/server/am/ProcessRecord;->getPackageList()[Ljava/lang/String;
-PLcom/android/server/am/ProcessRecord;->getPackageListWithVersionCode()Ljava/util/List;
+HPLcom/android/server/am/ProcessRecord;->getPackageListWithVersionCode()Ljava/util/List;
 PLcom/android/server/am/ProcessRecord;->getProcessClassEnum()I
 HSPLcom/android/server/am/ProcessRecord;->getReportedProcState()I
-PLcom/android/server/am/ProcessRecord;->getSetAdjWithServices()I
+HPLcom/android/server/am/ProcessRecord;->getSetAdjWithServices()I
+PLcom/android/server/am/ProcessRecord;->getShowBackground()Z
+PLcom/android/server/am/ProcessRecord;->getWhenUnimportant()J
 HSPLcom/android/server/am/ProcessRecord;->getWindowProcessController()Lcom/android/server/wm/WindowProcessController;
 HSPLcom/android/server/am/ProcessRecord;->hasActivities()Z
 HSPLcom/android/server/am/ProcessRecord;->hasActivitiesOrRecentTasks()Z
 HSPLcom/android/server/am/ProcessRecord;->hasClientActivities()Z
 HSPLcom/android/server/am/ProcessRecord;->hasForegroundActivities()Z
 HSPLcom/android/server/am/ProcessRecord;->hasForegroundServices()Z
-HPLcom/android/server/am/ProcessRecord;->hasLocationForegroundServices()Z
-HPLcom/android/server/am/ProcessRecord;->hasOverlayUi()Z
+HSPLcom/android/server/am/ProcessRecord;->hasLocationForegroundServices()Z
+HSPLcom/android/server/am/ProcessRecord;->hasOverlayUi()Z
 HSPLcom/android/server/am/ProcessRecord;->hasPendingUiClean()Z
+PLcom/android/server/am/ProcessRecord;->hasRecentTasks()Z
 HSPLcom/android/server/am/ProcessRecord;->hasTopUi()Z
+HSPLcom/android/server/am/ProcessRecord;->isCached()Z
 HSPLcom/android/server/am/ProcessRecord;->isCrashing()Z
+PLcom/android/server/am/ProcessRecord;->isDebugging()Z
 PLcom/android/server/am/ProcessRecord;->isInterestingForBackgroundTraces()Z
-PLcom/android/server/am/ProcessRecord;->isInterestingToUserLocked()Z
-PLcom/android/server/am/ProcessRecord;->isNotResponding()Z
+HPLcom/android/server/am/ProcessRecord;->isInterestingToUserLocked()Z
+PLcom/android/server/am/ProcessRecord;->isMonitorCpuUsage()Z
+HPLcom/android/server/am/ProcessRecord;->isNotResponding()Z
 HSPLcom/android/server/am/ProcessRecord;->isPersistent()Z
 HSPLcom/android/server/am/ProcessRecord;->isRemoved()Z
 PLcom/android/server/am/ProcessRecord;->isSilentAnr()Z
-PLcom/android/server/am/ProcessRecord;->isUsingWrapper()Z
+HSPLcom/android/server/am/ProcessRecord;->isUsingWrapper()Z
+HPLcom/android/server/am/ProcessRecord;->kill(Ljava/lang/String;IIZ)V
+PLcom/android/server/am/ProcessRecord;->kill(Ljava/lang/String;IZ)V
 HPLcom/android/server/am/ProcessRecord;->kill(Ljava/lang/String;Z)V
 HSPLcom/android/server/am/ProcessRecord;->makeActive(Landroid/app/IApplicationThread;Lcom/android/server/am/ProcessStatsService;)V
 HSPLcom/android/server/am/ProcessRecord;->makeAdjReason()Ljava/lang/String;
 PLcom/android/server/am/ProcessRecord;->makeAppNotRespondingLocked(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/ProcessRecord;->makeInactive(Lcom/android/server/am/ProcessStatsService;)V
-HPLcom/android/server/am/ProcessRecord;->modifyRawOomAdj(I)I
-PLcom/android/server/am/ProcessRecord;->onStartActivity(IZLjava/lang/String;J)V
+HSPLcom/android/server/am/ProcessRecord;->modifyRawOomAdj(I)I
+HSPLcom/android/server/am/ProcessRecord;->onStartActivity(IZLjava/lang/String;J)V
 HSPLcom/android/server/am/ProcessRecord;->removeAllowBackgroundActivityStartsToken(Landroid/os/Binder;)V
 HSPLcom/android/server/am/ProcessRecord;->resetCachedInfo()V
 HSPLcom/android/server/am/ProcessRecord;->resetPackageList(Lcom/android/server/am/ProcessStatsService;)V
+HPLcom/android/server/am/ProcessRecord;->scheduleCrash(Ljava/lang/String;)V
+PLcom/android/server/am/ProcessRecord;->setActiveInstrumentation(Lcom/android/server/am/ActiveInstrumentation;)V
+HSPLcom/android/server/am/ProcessRecord;->setCached(Z)V
 HSPLcom/android/server/am/ProcessRecord;->setCrashing(Z)V
 HSPLcom/android/server/am/ProcessRecord;->setCurProcState(I)V
 HSPLcom/android/server/am/ProcessRecord;->setCurRawAdj(I)V
@@ -4802,16 +7804,19 @@
 HSPLcom/android/server/am/ProcessRecord;->setFgInteractionTime(J)V
 HSPLcom/android/server/am/ProcessRecord;->setHasClientActivities(Z)V
 HSPLcom/android/server/am/ProcessRecord;->setHasForegroundActivities(Z)V
+PLcom/android/server/am/ProcessRecord;->setHasForegroundServices(ZI)V
+PLcom/android/server/am/ProcessRecord;->setHasOverlayUi(Z)V
 PLcom/android/server/am/ProcessRecord;->setHasTopUi(Z)V
 HSPLcom/android/server/am/ProcessRecord;->setInteractionEventTime(J)V
 HSPLcom/android/server/am/ProcessRecord;->setNotResponding(Z)V
-HPLcom/android/server/am/ProcessRecord;->setPendingUiClean(Z)V
-PLcom/android/server/am/ProcessRecord;->setPendingUiCleanAndForceProcessStateUpTo(I)V
+HSPLcom/android/server/am/ProcessRecord;->setPendingUiClean(Z)V
+HPLcom/android/server/am/ProcessRecord;->setPendingUiCleanAndForceProcessStateUpTo(I)V
 HSPLcom/android/server/am/ProcessRecord;->setPersistent(Z)V
 HSPLcom/android/server/am/ProcessRecord;->setPid(I)V
+PLcom/android/server/am/ProcessRecord;->setReportedForegroundServiceTypes(I)V
 HSPLcom/android/server/am/ProcessRecord;->setReportedProcState(I)V
 HSPLcom/android/server/am/ProcessRecord;->setRequiredAbi(Ljava/lang/String;)V
-PLcom/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;J)V
 HSPLcom/android/server/am/ProcessRecord;->setUsingWrapper(Z)V
 HPLcom/android/server/am/ProcessRecord;->setWhenUnimportant(J)V
@@ -4821,48 +7826,53 @@
 HSPLcom/android/server/am/ProcessRecord;->toString()Ljava/lang/String;
 HSPLcom/android/server/am/ProcessRecord;->unlinkDeathRecipient()V
 HSPLcom/android/server/am/ProcessRecord;->updateBoundClientUids()V
-PLcom/android/server/am/ProcessRecord;->updateProcessInfo(ZZZ)V
-PLcom/android/server/am/ProcessRecord;->updateServiceConnectionActivities()V
+PLcom/android/server/am/ProcessRecord;->updateHasAboveClientLocked()V
+HSPLcom/android/server/am/ProcessRecord;->updateProcessInfo(ZZZ)V
+HSPLcom/android/server/am/ProcessRecord;->updateServiceConnectionActivities()V
 HSPLcom/android/server/am/ProcessStatsService$1;-><init>(Lcom/android/server/am/ProcessStatsService;)V
 HPLcom/android/server/am/ProcessStatsService$1;->run()V
-PLcom/android/server/am/ProcessStatsService$2;-><init>(Lcom/android/server/am/ProcessStatsService;J)V
+HPLcom/android/server/am/ProcessStatsService$2;-><init>(Lcom/android/server/am/ProcessStatsService;J)V
 PLcom/android/server/am/ProcessStatsService$2;->run()V
 PLcom/android/server/am/ProcessStatsService$4;-><init>(Lcom/android/server/am/ProcessStatsService;Ljava/lang/String;[Landroid/os/ParcelFileDescriptor;[B)V
 PLcom/android/server/am/ProcessStatsService$4;->run()V
 HSPLcom/android/server/am/ProcessStatsService;-><clinit>()V
 HSPLcom/android/server/am/ProcessStatsService;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/io/File;)V
-PLcom/android/server/am/ProcessStatsService;->addSysMemUsageLocked(JJJJJ)V
-PLcom/android/server/am/ProcessStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/am/ProcessStatsService;->addSysMemUsageLocked(JJJJJ)V
+HPLcom/android/server/am/ProcessStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/am/ProcessStatsService;->dumpAggregatedStats(Landroid/util/proto/ProtoOutputStream;JIJ)V
 PLcom/android/server/am/ProcessStatsService;->dumpAggregatedStats(Ljava/io/PrintWriter;JJLjava/lang/String;ZZZZZI)V
-PLcom/android/server/am/ProcessStatsService;->dumpInner(Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/am/ProcessStatsService;->dumpInner(Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/am/ProcessStatsService;->dumpProto(Ljava/io/FileDescriptor;)V
-PLcom/android/server/am/ProcessStatsService;->getCommittedFiles(IZZ)Ljava/util/ArrayList;
+HPLcom/android/server/am/ProcessStatsService;->getCommittedFiles(IZZ)Ljava/util/ArrayList;
 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;->getServiceStateLocked(Ljava/lang/String;IJLjava/lang/String;Ljava/lang/String;)Lcom/android/internal/app/procstats/ServiceState;
-PLcom/android/server/am/ProcessStatsService;->getStatsOverTime(J)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/am/ProcessStatsService;->getStatsOverTime(J)Landroid/os/ParcelFileDescriptor;
 HSPLcom/android/server/am/ProcessStatsService;->isMemFactorLowered()Z
-PLcom/android/server/am/ProcessStatsService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/server/am/ProcessStatsService;->performWriteState(J)V
+HPLcom/android/server/am/ProcessStatsService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/am/ProcessStatsService;->performWriteState(J)V
 PLcom/android/server/am/ProcessStatsService;->readLocked(Lcom/android/internal/app/procstats/ProcessStats;Landroid/util/AtomicFile;)Z
 HSPLcom/android/server/am/ProcessStatsService;->setMemFactorLocked(IZJ)Z
 HSPLcom/android/server/am/ProcessStatsService;->shouldWriteNowLocked(J)Z
-PLcom/android/server/am/ProcessStatsService;->trimHistoricStatesWriteLocked()V
+PLcom/android/server/am/ProcessStatsService;->shutdownLocked()V
+HPLcom/android/server/am/ProcessStatsService;->trimHistoricStatesWriteLocked()V
 HSPLcom/android/server/am/ProcessStatsService;->updateFile()V
 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
-PLcom/android/server/am/ProcessStatsService;->writeStateLocked(ZZ)V
+PLcom/android/server/am/ProcessStatsService;->writeStateAsyncLocked()V
+PLcom/android/server/am/ProcessStatsService;->writeStateLocked(Z)V
+HPLcom/android/server/am/ProcessStatsService;->writeStateLocked(ZZ)V
+PLcom/android/server/am/ProcessStatsService;->writeStateSyncLocked()V
 HSPLcom/android/server/am/ProviderMap;-><init>(Lcom/android/server/am/ActivityManagerService;)V
-PLcom/android/server/am/ProviderMap;->collectPackageProvidersLocked(Ljava/lang/String;Ljava/util/Set;ZZILjava/util/ArrayList;)Z
+HPLcom/android/server/am/ProviderMap;->collectPackageProvidersLocked(Ljava/lang/String;Ljava/util/Set;ZZILjava/util/ArrayList;)Z
 HPLcom/android/server/am/ProviderMap;->collectPackageProvidersLocked(Ljava/lang/String;Ljava/util/Set;ZZLjava/util/HashMap;Ljava/util/ArrayList;)Z
-PLcom/android/server/am/ProviderMap;->dumpProvider(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;IZ)Z
-PLcom/android/server/am/ProviderMap;->dumpProvider(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Lcom/android/server/am/ContentProviderRecord;[Ljava/lang/String;Z)V
+HPLcom/android/server/am/ProviderMap;->dumpProvider(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;IZ)Z
+HPLcom/android/server/am/ProviderMap;->dumpProvider(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Lcom/android/server/am/ContentProviderRecord;[Ljava/lang/String;Z)V
 PLcom/android/server/am/ProviderMap;->dumpProviderProto(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;)Z
-PLcom/android/server/am/ProviderMap;->dumpProvidersByClassLocked(Ljava/io/PrintWriter;ZLjava/lang/String;Ljava/lang/String;ZLjava/util/HashMap;)Z
-PLcom/android/server/am/ProviderMap;->dumpProvidersByNameLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;ZLjava/util/HashMap;)Z
+HPLcom/android/server/am/ProviderMap;->dumpProvidersByClassLocked(Ljava/io/PrintWriter;ZLjava/lang/String;Ljava/lang/String;ZLjava/util/HashMap;)Z
+HPLcom/android/server/am/ProviderMap;->dumpProvidersByNameLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;ZLjava/util/HashMap;)Z
 PLcom/android/server/am/ProviderMap;->dumpProvidersLocked(Ljava/io/PrintWriter;ZLjava/lang/String;)Z
-PLcom/android/server/am/ProviderMap;->dumpToTransferPipe(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Lcom/android/server/am/ContentProviderRecord;[Ljava/lang/String;)V
+HPLcom/android/server/am/ProviderMap;->dumpToTransferPipe(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Lcom/android/server/am/ContentProviderRecord;[Ljava/lang/String;)V
 HSPLcom/android/server/am/ProviderMap;->getProviderByClass(Landroid/content/ComponentName;I)Lcom/android/server/am/ContentProviderRecord;
 HSPLcom/android/server/am/ProviderMap;->getProviderByName(Ljava/lang/String;I)Lcom/android/server/am/ContentProviderRecord;
 HSPLcom/android/server/am/ProviderMap;->getProvidersByClass(I)Ljava/util/HashMap;
@@ -4873,54 +7883,63 @@
 HPLcom/android/server/am/ProviderMap;->removeProviderByClass(Landroid/content/ComponentName;I)V
 HPLcom/android/server/am/ProviderMap;->removeProviderByName(Ljava/lang/String;I)V
 HSPLcom/android/server/am/ReceiverList;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;IIILandroid/content/IIntentReceiver;)V
+PLcom/android/server/am/ReceiverList;->binderDied()V
 HSPLcom/android/server/am/ReceiverList;->containsFilter(Landroid/content/IntentFilter;)Z
 HPLcom/android/server/am/ReceiverList;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/am/ReceiverList;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/am/ReceiverList;->dumpLocal(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/am/ReceiverList;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/am/ReceiverList;->dumpLocal(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/am/ReceiverList;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/server/am/ReceiverList;->hashCode()I
 HPLcom/android/server/am/ReceiverList;->toString()Ljava/lang/String;
-PLcom/android/server/am/ServiceRecord$1;-><init>(Lcom/android/server/am/ServiceRecord;Landroid/app/Notification;Ljava/lang/String;IIILcom/android/server/am/ServiceRecord;)V
-PLcom/android/server/am/ServiceRecord$1;->run()V
-PLcom/android/server/am/ServiceRecord$2;-><init>(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;III)V
-PLcom/android/server/am/ServiceRecord$2;->run()V
+HPLcom/android/server/am/ServiceRecord$1;-><init>(Lcom/android/server/am/ServiceRecord;Landroid/app/Notification;Ljava/lang/String;IIILcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ServiceRecord$1;->run()V
+HPLcom/android/server/am/ServiceRecord$2;-><init>(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;III)V
+HPLcom/android/server/am/ServiceRecord$2;->run()V
 PLcom/android/server/am/ServiceRecord$3;-><init>(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;II)V
 PLcom/android/server/am/ServiceRecord$3;->run()V
 HSPLcom/android/server/am/ServiceRecord$StartItem;-><init>(Lcom/android/server/am/ServiceRecord;ZILandroid/content/Intent;Lcom/android/server/uri/NeededUriGrants;I)V
+HPLcom/android/server/am/ServiceRecord$StartItem;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JJ)V
 PLcom/android/server/am/ServiceRecord$StartItem;->removeUriPermissionsLocked()V
+PLcom/android/server/am/ServiceRecord$StartItem;->toString()Ljava/lang/String;
 HSPLcom/android/server/am/ServiceRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;Landroid/content/ComponentName;Landroid/content/ComponentName;Ljava/lang/String;ILandroid/content/Intent$FilterComparison;Landroid/content/pm/ServiceInfo;ZLjava/lang/Runnable;)V
 HSPLcom/android/server/am/ServiceRecord;->addConnection(Landroid/os/IBinder;Lcom/android/server/am/ConnectionRecord;)V
-PLcom/android/server/am/ServiceRecord;->cancelNotification()V
-PLcom/android/server/am/ServiceRecord;->clearDeliveredStartsLocked()V
+PLcom/android/server/am/ServiceRecord;->canStopIfKilled(Z)Z
+HPLcom/android/server/am/ServiceRecord;->cancelNotification()V
+HSPLcom/android/server/am/ServiceRecord;->clearDeliveredStartsLocked()V
 HSPLcom/android/server/am/ServiceRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/am/ServiceRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/am/ServiceRecord;->dumpStartList(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/util/List;J)V
-HPLcom/android/server/am/ServiceRecord;->findDeliveredStart(IZZ)Lcom/android/server/am/ServiceRecord$StartItem;
+HPLcom/android/server/am/ServiceRecord;->dumpStartList(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/util/List;J)V
+HSPLcom/android/server/am/ServiceRecord;->findDeliveredStart(IZZ)Lcom/android/server/am/ServiceRecord$StartItem;
+PLcom/android/server/am/ServiceRecord;->forceClearTracker()V
 HSPLcom/android/server/am/ServiceRecord;->getComponentName()Landroid/content/ComponentName;
 HSPLcom/android/server/am/ServiceRecord;->getConnections()Landroid/util/ArrayMap;
-PLcom/android/server/am/ServiceRecord;->getLastStartId()I
+HSPLcom/android/server/am/ServiceRecord;->getLastStartId()I
 HSPLcom/android/server/am/ServiceRecord;->getTracker()Lcom/android/internal/app/procstats/ServiceState;
 HSPLcom/android/server/am/ServiceRecord;->hasAutoCreateConnections()Z
 PLcom/android/server/am/ServiceRecord;->lambda$whitelistBgActivityStartsOnServiceStart$0$ServiceRecord()V
 HSPLcom/android/server/am/ServiceRecord;->makeNextStartId()I
-PLcom/android/server/am/ServiceRecord;->makeRestarting(IJ)V
+HPLcom/android/server/am/ServiceRecord;->makeRestarting(IJ)V
 HSPLcom/android/server/am/ServiceRecord;->postNotification()V
-PLcom/android/server/am/ServiceRecord;->removeConnection(Landroid/os/IBinder;)V
-PLcom/android/server/am/ServiceRecord;->resetRestartCounter()V
+HSPLcom/android/server/am/ServiceRecord;->removeConnection(Landroid/os/IBinder;)V
+HSPLcom/android/server/am/ServiceRecord;->resetRestartCounter()V
 HSPLcom/android/server/am/ServiceRecord;->retrieveAppBindingLocked(Landroid/content/Intent;Lcom/android/server/am/ProcessRecord;)Lcom/android/server/am/AppBindRecord;
-PLcom/android/server/am/ServiceRecord;->setHasBindingWhitelistingBgActivityStarts(Z)V
+HPLcom/android/server/am/ServiceRecord;->setHasBindingWhitelistingBgActivityStarts(Z)V
 PLcom/android/server/am/ServiceRecord;->setHasStartedWhitelistingBgActivityStarts(Z)V
 HSPLcom/android/server/am/ServiceRecord;->setProcess(Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ServiceRecord;->stripForegroundServiceFlagFromNotification()V
 HSPLcom/android/server/am/ServiceRecord;->toString()Ljava/lang/String;
-PLcom/android/server/am/ServiceRecord;->updateHasBindingWhitelistingBgActivityStarts()V
-PLcom/android/server/am/ServiceRecord;->updateParentProcessBgActivityStartsWhitelistingToken()V
+HPLcom/android/server/am/ServiceRecord;->updateHasBindingWhitelistingBgActivityStarts()V
+HPLcom/android/server/am/ServiceRecord;->updateParentProcessBgActivityStartsWhitelistingToken()V
 PLcom/android/server/am/ServiceRecord;->updateWhitelistManager()V
 PLcom/android/server/am/ServiceRecord;->whitelistBgActivityStartsOnServiceStart()V
 HSPLcom/android/server/am/SettingsToPropertiesMapper$1;-><init>(Lcom/android/server/am/SettingsToPropertiesMapper;Landroid/os/Handler;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/SettingsToPropertiesMapper;-><clinit>()V
 HSPLcom/android/server/am/SettingsToPropertiesMapper;-><init>(Landroid/content/ContentResolver;[Ljava/lang/String;[Ljava/lang/String;)V
+PLcom/android/server/am/SettingsToPropertiesMapper;->getResetFlagsFileContent()Ljava/lang/String;
+PLcom/android/server/am/SettingsToPropertiesMapper;->getResetNativeCategories()[Ljava/lang/String;
 HSPLcom/android/server/am/SettingsToPropertiesMapper;->isNativeFlagsResetPerformed()Z
-PLcom/android/server/am/SettingsToPropertiesMapper;->lambda$updatePropertiesFromSettings$0$SettingsToPropertiesMapper(Landroid/provider/DeviceConfig$Properties;)V
+HPLcom/android/server/am/SettingsToPropertiesMapper;->lambda$updatePropertiesFromSettings$0$SettingsToPropertiesMapper(Landroid/provider/DeviceConfig$Properties;)V
+PLcom/android/server/am/SettingsToPropertiesMapper;->log(Ljava/lang/String;)V
 HSPLcom/android/server/am/SettingsToPropertiesMapper;->makePropertyName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/am/SettingsToPropertiesMapper;->setProperty(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/SettingsToPropertiesMapper;->start(Landroid/content/ContentResolver;)Lcom/android/server/am/SettingsToPropertiesMapper;
@@ -4936,19 +7955,35 @@
 HSPLcom/android/server/am/UidRecord;->toString()Ljava/lang/String;
 HSPLcom/android/server/am/UidRecord;->updateHasInternetPermission()V
 HSPLcom/android/server/am/UidRecord;->updateLastDispatchedProcStateSeq(I)V
+PLcom/android/server/am/UserController$1;-><init>(Lcom/android/server/am/UserController;Landroid/content/pm/UserInfo;)V
+PLcom/android/server/am/UserController$1;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 PLcom/android/server/am/UserController$2;-><init>(Lcom/android/server/am/UserController;I)V
 PLcom/android/server/am/UserController$2;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
+PLcom/android/server/am/UserController$4;-><init>(Lcom/android/server/am/UserController;ILcom/android/server/am/UserState;)V
+PLcom/android/server/am/UserController$4;-><init>(Lcom/android/server/am/UserController;ILcom/android/server/am/UserState;Z)V
+PLcom/android/server/am/UserController$4;->lambda$performReceive$0$UserController$4(ILcom/android/server/am/UserState;)V
+PLcom/android/server/am/UserController$4;->lambda$performReceive$0$UserController$4(ILcom/android/server/am/UserState;Z)V
+PLcom/android/server/am/UserController$4;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
+PLcom/android/server/am/UserController$5$1;-><init>(Lcom/android/server/am/UserController$5;)V
+PLcom/android/server/am/UserController$5$1;->run()V
+PLcom/android/server/am/UserController$5;-><init>(Lcom/android/server/am/UserController;Lcom/android/server/am/UserState;)V
+PLcom/android/server/am/UserController$5;-><init>(Lcom/android/server/am/UserController;Lcom/android/server/am/UserState;Z)V
+PLcom/android/server/am/UserController$5;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 PLcom/android/server/am/UserController$6;-><init>(Lcom/android/server/am/UserController;)V
 PLcom/android/server/am/UserController$6;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 PLcom/android/server/am/UserController$Injector$1;-><init>(Lcom/android/server/am/UserController$Injector;Lcom/android/server/am/ActivityManagerService;ILcom/android/internal/util/ProgressReporter;ZLjava/lang/Runnable;)V
 PLcom/android/server/am/UserController$Injector$1;->onFinished()V
 HSPLcom/android/server/am/UserController$Injector;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/UserController$Injector;->activityManagerForceStopPackage(ILjava/lang/String;)V
+PLcom/android/server/am/UserController$Injector;->activityManagerOnUserStopped(I)V
 PLcom/android/server/am/UserController$Injector;->batteryStatsServiceNoteEvent(ILjava/lang/String;I)V
-PLcom/android/server/am/UserController$Injector;->broadcastIntent(Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZIIIII)I
+HSPLcom/android/server/am/UserController$Injector;->broadcastIntent(Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZIIIII)I
 HSPLcom/android/server/am/UserController$Injector;->checkCallingPermission(Ljava/lang/String;)I
-HPLcom/android/server/am/UserController$Injector;->checkComponentPermission(Ljava/lang/String;IIIZ)I
+HSPLcom/android/server/am/UserController$Injector;->checkComponentPermission(Ljava/lang/String;IIIZ)I
+PLcom/android/server/am/UserController$Injector;->clearBroadcastQueueForUser(I)V
 HSPLcom/android/server/am/UserController$Injector;->getContext()Landroid/content/Context;
 HSPLcom/android/server/am/UserController$Injector;->getHandler(Landroid/os/Handler$Callback;)Landroid/os/Handler;
+PLcom/android/server/am/UserController$Injector;->getKeyguardManager()Landroid/app/KeyguardManager;
 HSPLcom/android/server/am/UserController$Injector;->getLockPatternUtils()Lcom/android/internal/widget/LockPatternUtils;
 PLcom/android/server/am/UserController$Injector;->getStorageManager()Landroid/os/storage/IStorageManager;
 PLcom/android/server/am/UserController$Injector;->getSystemServiceManager()Lcom/android/server/SystemServiceManager;
@@ -4957,15 +7992,17 @@
 PLcom/android/server/am/UserController$Injector;->getUserManagerInternal()Landroid/os/UserManagerInternal;
 PLcom/android/server/am/UserController$Injector;->getWindowManager()Lcom/android/server/wm/WindowManagerService;
 PLcom/android/server/am/UserController$Injector;->installEncryptionUnawareProviders(I)V
-HPLcom/android/server/am/UserController$Injector;->isCallerRecents(I)Z
+HSPLcom/android/server/am/UserController$Injector;->isCallerRecents(I)Z
 PLcom/android/server/am/UserController$Injector;->isFirstBootOrUpgrade()Z
 PLcom/android/server/am/UserController$Injector;->isRuntimeRestarted()Z
 PLcom/android/server/am/UserController$Injector;->lambda$startUserWidgets$0(Landroid/appwidget/AppWidgetManagerInternal;I)V
 PLcom/android/server/am/UserController$Injector;->loadUserRecents(I)V
 HSPLcom/android/server/am/UserController$Injector;->reportCurWakefulnessUsageEvent()V
 PLcom/android/server/am/UserController$Injector;->sendPreBootBroadcast(IZLjava/lang/Runnable;)V
+PLcom/android/server/am/UserController$Injector;->stackSupervisorRemoveUser(I)V
 PLcom/android/server/am/UserController$Injector;->startPersistentApps(I)V
 PLcom/android/server/am/UserController$Injector;->startUserWidgets(I)V
+PLcom/android/server/am/UserController$Injector;->systemServiceManagerCleanupUser(I)V
 HSPLcom/android/server/am/UserController$UserProgressListener;-><init>()V
 HSPLcom/android/server/am/UserController$UserProgressListener;-><init>(Lcom/android/server/am/UserController$1;)V
 PLcom/android/server/am/UserController$UserProgressListener;->onFinished(ILandroid/os/Bundle;)V
@@ -4973,64 +8010,102 @@
 PLcom/android/server/am/UserController$UserProgressListener;->onStarted(ILandroid/os/Bundle;)V
 HSPLcom/android/server/am/UserController;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/UserController;-><init>(Lcom/android/server/am/UserController$Injector;)V
+PLcom/android/server/am/UserController;->access$100(Lcom/android/server/am/UserController;)Lcom/android/server/am/UserController$Injector;
+PLcom/android/server/am/UserController;->access$200(Lcom/android/server/am/UserController;)Landroid/os/Handler;
+HPLcom/android/server/am/UserController;->canInteractWithAcrossProfilesPermission(IZII)Z
+HPLcom/android/server/am/UserController;->canInteractWithAcrossProfilesPermission(IZIILjava/lang/String;)Z
 HSPLcom/android/server/am/UserController;->checkCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/am/UserController;->dispatchForegroundProfileChanged(I)V
+HPLcom/android/server/am/UserController;->dispatchForegroundProfileChanged(I)V
 PLcom/android/server/am/UserController;->dispatchLockedBootComplete(I)V
-PLcom/android/server/am/UserController;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/am/UserController;->dispatchUserLocking(ILjava/util/List;)V
+HPLcom/android/server/am/UserController;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/am/UserController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/am/UserController;->enforceShellRestriction(Ljava/lang/String;I)V
 HSPLcom/android/server/am/UserController;->ensureNotSpecialUser(I)V
 HSPLcom/android/server/am/UserController;->exists(I)Z
+PLcom/android/server/am/UserController;->expandUserId(I)[I
 PLcom/android/server/am/UserController;->finishUserBoot(Lcom/android/server/am/UserState;)V
 PLcom/android/server/am/UserController;->finishUserBoot(Lcom/android/server/am/UserState;Landroid/content/IIntentReceiver;)V
+PLcom/android/server/am/UserController;->finishUserStopped(Lcom/android/server/am/UserState;)V
+PLcom/android/server/am/UserController;->finishUserStopped(Lcom/android/server/am/UserState;Z)V
+PLcom/android/server/am/UserController;->finishUserStopping(ILcom/android/server/am/UserState;)V
+PLcom/android/server/am/UserController;->finishUserStopping(ILcom/android/server/am/UserState;Z)V
 PLcom/android/server/am/UserController;->finishUserUnlocked(Lcom/android/server/am/UserState;)V
 PLcom/android/server/am/UserController;->finishUserUnlockedCompleted(Lcom/android/server/am/UserState;)V
-PLcom/android/server/am/UserController;->finishUserUnlocking(Lcom/android/server/am/UserState;)Z
+HPLcom/android/server/am/UserController;->finishUserUnlocking(Lcom/android/server/am/UserState;)Z
+PLcom/android/server/am/UserController;->forceStopUser(ILjava/lang/String;)V
+PLcom/android/server/am/UserController;->getCurrentOrTargetUserId()I
+PLcom/android/server/am/UserController;->getCurrentOrTargetUserIdLU()I
 HSPLcom/android/server/am/UserController;->getCurrentProfileIds()[I
 HSPLcom/android/server/am/UserController;->getCurrentUser()Landroid/content/pm/UserInfo;
 HSPLcom/android/server/am/UserController;->getCurrentUserId()I
+PLcom/android/server/am/UserController;->getMaxRunningUsers()I
 HSPLcom/android/server/am/UserController;->getStartedUserArray()[I
 HSPLcom/android/server/am/UserController;->getStartedUserState(I)Lcom/android/server/am/UserState;
 HSPLcom/android/server/am/UserController;->getUserInfo(I)Landroid/content/pm/UserInfo;
 HSPLcom/android/server/am/UserController;->getUsers()[I
+PLcom/android/server/am/UserController;->getUsersToStopLU(I)[I
 HSPLcom/android/server/am/UserController;->handleIncomingUser(IIIZILjava/lang/String;Ljava/lang/String;)I
 PLcom/android/server/am/UserController;->handleMessage(Landroid/os/Message;)Z
 HSPLcom/android/server/am/UserController;->hasStartedUserState(I)Z
+PLcom/android/server/am/UserController;->hasUserRestriction(Ljava/lang/String;I)Z
 HPLcom/android/server/am/UserController;->isCurrentProfile(I)Z
+PLcom/android/server/am/UserController;->isCurrentUserLU(I)Z
 HSPLcom/android/server/am/UserController;->isSameProfileGroup(II)Z
 HSPLcom/android/server/am/UserController;->isUserOrItsParentRunning(I)Z
 HSPLcom/android/server/am/UserController;->isUserRunning(II)Z
+PLcom/android/server/am/UserController;->lambda$dispatchUserLocking$6$UserController(ILjava/util/List;)V
+PLcom/android/server/am/UserController;->lambda$finishUserStopped$6$UserController(IILjava/util/ArrayList;)V
+PLcom/android/server/am/UserController;->lambda$finishUserUnlocked$2$UserController(Lcom/android/server/am/UserState;)V
 PLcom/android/server/am/UserController;->lambda$finishUserUnlockedCompleted$3$UserController(Landroid/content/Intent;III)V
 PLcom/android/server/am/UserController;->lambda$finishUserUnlocking$1$UserController(ILcom/android/server/am/UserState;)V
 PLcom/android/server/am/UserController;->lambda$handleMessage$9$UserController(I)V
 PLcom/android/server/am/UserController;->lambda$scheduleStartProfiles$7$UserController()V
+PLcom/android/server/am/UserController;->lambda$stopSingleUserLU$5$UserController(ILcom/android/server/am/UserState;)V
+PLcom/android/server/am/UserController;->lambda$stopSingleUserLU$5$UserController(ILcom/android/server/am/UserState;Z)V
 PLcom/android/server/am/UserController;->maybeUnlockUser(I)Z
 PLcom/android/server/am/UserController;->notifyFinished(ILandroid/os/IProgressListener;)V
 HSPLcom/android/server/am/UserController;->onSystemReady()V
 HSPLcom/android/server/am/UserController;->registerUserSwitchObserver(Landroid/app/IUserSwitchObserver;Ljava/lang/String;)V
 PLcom/android/server/am/UserController;->scheduleStartProfiles()V
 PLcom/android/server/am/UserController;->sendBootCompleted(Landroid/content/IIntentReceiver;)V
-PLcom/android/server/am/UserController;->sendUserSwitchBroadcasts(II)V
-PLcom/android/server/am/UserController;->shouldConfirmCredentials(I)Z
+HPLcom/android/server/am/UserController;->sendForegroundProfileChanged(I)V
+HSPLcom/android/server/am/UserController;->sendUserSwitchBroadcasts(II)V
+HSPLcom/android/server/am/UserController;->setInitialConfig(ZIZ)V
+HSPLcom/android/server/am/UserController;->setSwitchingFromSystemUserMessage(Ljava/lang/String;)V
+HSPLcom/android/server/am/UserController;->setSwitchingToSystemUserMessage(Ljava/lang/String;)V
+HSPLcom/android/server/am/UserController;->shouldConfirmCredentials(I)Z
 PLcom/android/server/am/UserController;->startProfiles()V
 PLcom/android/server/am/UserController;->startUser(IZ)Z
 PLcom/android/server/am/UserController;->startUser(IZLandroid/os/IProgressListener;)Z
 PLcom/android/server/am/UserController;->startUserInternal(IZLandroid/os/IProgressListener;Lcom/android/server/utils/TimingsTraceAndSlog;)Z
-PLcom/android/server/am/UserController;->unlockUser(I[B[BLandroid/os/IProgressListener;)Z
-PLcom/android/server/am/UserController;->unlockUserCleared(I[B[BLandroid/os/IProgressListener;)Z
+PLcom/android/server/am/UserController;->stopSingleUserLU(ILandroid/app/IStopUserCallback;Lcom/android/server/am/UserState$KeyEvictedCallback;)V
+PLcom/android/server/am/UserController;->stopSingleUserLU(IZLandroid/app/IStopUserCallback;Lcom/android/server/am/UserState$KeyEvictedCallback;)V
+PLcom/android/server/am/UserController;->stopUser(IZLandroid/app/IStopUserCallback;Lcom/android/server/am/UserState$KeyEvictedCallback;)I
+PLcom/android/server/am/UserController;->stopUser(IZZLandroid/app/IStopUserCallback;Lcom/android/server/am/UserState$KeyEvictedCallback;)I
+PLcom/android/server/am/UserController;->stopUsersLU(IZLandroid/app/IStopUserCallback;Lcom/android/server/am/UserState$KeyEvictedCallback;)I
+PLcom/android/server/am/UserController;->stopUsersLU(IZZLandroid/app/IStopUserCallback;Lcom/android/server/am/UserState$KeyEvictedCallback;)I
+HPLcom/android/server/am/UserController;->unlockUser(I[B[BLandroid/os/IProgressListener;)Z
+HPLcom/android/server/am/UserController;->unlockUserCleared(I[B[BLandroid/os/IProgressListener;)Z
+HPLcom/android/server/am/UserController;->unregisterUserSwitchObserver(Landroid/app/IUserSwitchObserver;)V
 HSPLcom/android/server/am/UserController;->unsafeConvertIncomingUser(I)I
 HSPLcom/android/server/am/UserController;->updateCurrentProfileIds()V
 HSPLcom/android/server/am/UserController;->updateStartedUserArrayLU()V
+PLcom/android/server/am/UserController;->updateUserToLockLU(I)I
+PLcom/android/server/am/UserController;->updateUserToLockLU(IZ)I
 HSPLcom/android/server/am/UserState;-><init>(Landroid/os/UserHandle;)V
 PLcom/android/server/am/UserState;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/am/UserState;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/am/UserState;->setState(I)V
+HPLcom/android/server/am/UserState;->setState(I)V
 PLcom/android/server/am/UserState;->setState(II)Z
 PLcom/android/server/am/UserState;->stateToProtoEnum(I)I
-PLcom/android/server/am/UserState;->stateToString(I)Ljava/lang/String;
+HPLcom/android/server/am/UserState;->stateToString(I)Ljava/lang/String;
 PLcom/android/server/appbinding/-$$Lambda$AppBindingService$C9KbqX5cmsR3luJhFKt2Gpj0uLc;-><init>(Ljava/io/PrintWriter;)V
 PLcom/android/server/appbinding/-$$Lambda$AppBindingService$C9KbqX5cmsR3luJhFKt2Gpj0uLc;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/appbinding/-$$Lambda$AppBindingService$D_3boeCn8eAANOp2ZDk6OC2rNaI;-><init>(Lcom/android/server/appbinding/AppBindingService;)V
 PLcom/android/server/appbinding/-$$Lambda$AppBindingService$D_3boeCn8eAANOp2ZDk6OC2rNaI;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/appbinding/-$$Lambda$AppBindingService$_RrDLXlhUGfI3nzAdSavPUgy7uo;-><init>(I)V
+PLcom/android/server/appbinding/-$$Lambda$AppBindingService$_RrDLXlhUGfI3nzAdSavPUgy7uo;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/appbinding/-$$Lambda$xkEFYM78dwFMyAjWJXkB7AxgA2c;-><clinit>()V
 HSPLcom/android/server/appbinding/-$$Lambda$xkEFYM78dwFMyAjWJXkB7AxgA2c;-><init>()V
 HSPLcom/android/server/appbinding/-$$Lambda$xkEFYM78dwFMyAjWJXkB7AxgA2c;->accept(Ljava/lang/Object;)V
@@ -5039,7 +8114,12 @@
 HSPLcom/android/server/appbinding/AppBindingConstants;->initializeFromString(Ljava/lang/String;)Lcom/android/server/appbinding/AppBindingConstants;
 HSPLcom/android/server/appbinding/AppBindingService$1;-><init>(Lcom/android/server/appbinding/AppBindingService;Landroid/os/Handler;)V
 HSPLcom/android/server/appbinding/AppBindingService$2;-><init>(Lcom/android/server/appbinding/AppBindingService;)V
-PLcom/android/server/appbinding/AppBindingService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/appbinding/AppBindingService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/appbinding/AppBindingService$AppServiceConnection;-><init>(Landroid/content/Context;ILcom/android/server/appbinding/AppBindingConstants;Landroid/os/Handler;Lcom/android/server/appbinding/finders/AppServiceFinder;Landroid/content/ComponentName;)V
+PLcom/android/server/appbinding/AppBindingService$AppServiceConnection;->asInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
+PLcom/android/server/appbinding/AppBindingService$AppServiceConnection;->asInterface(Landroid/os/IBinder;)Ljava/lang/Object;
+PLcom/android/server/appbinding/AppBindingService$AppServiceConnection;->getBindFlags()I
+PLcom/android/server/appbinding/AppBindingService$AppServiceConnection;->getFinder()Lcom/android/server/appbinding/finders/AppServiceFinder;
 HSPLcom/android/server/appbinding/AppBindingService$Injector;-><init>()V
 HSPLcom/android/server/appbinding/AppBindingService$Injector;->getGlobalSettingString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/appbinding/AppBindingService$Injector;->getIPackageManager()Landroid/content/pm/IPackageManager;
@@ -5047,79 +8127,114 @@
 HSPLcom/android/server/appbinding/AppBindingService$Lifecycle;-><init>(Landroid/content/Context;Lcom/android/server/appbinding/AppBindingService$Injector;)V
 HSPLcom/android/server/appbinding/AppBindingService$Lifecycle;->onBootPhase(I)V
 HSPLcom/android/server/appbinding/AppBindingService$Lifecycle;->onStart()V
-PLcom/android/server/appbinding/AppBindingService$Lifecycle;->onStartUser(I)V
+HSPLcom/android/server/appbinding/AppBindingService$Lifecycle;->onStartUser(I)V
+PLcom/android/server/appbinding/AppBindingService$Lifecycle;->onStopUser(I)V
 PLcom/android/server/appbinding/AppBindingService$Lifecycle;->onUnlockUser(I)V
 HSPLcom/android/server/appbinding/AppBindingService;-><init>(Lcom/android/server/appbinding/AppBindingService$Injector;Landroid/content/Context;)V
 HSPLcom/android/server/appbinding/AppBindingService;-><init>(Lcom/android/server/appbinding/AppBindingService$Injector;Landroid/content/Context;Lcom/android/server/appbinding/AppBindingService$1;)V
 HSPLcom/android/server/appbinding/AppBindingService;->access$100(Lcom/android/server/appbinding/AppBindingService;I)V
-PLcom/android/server/appbinding/AppBindingService;->access$200(Lcom/android/server/appbinding/AppBindingService;I)V
+HSPLcom/android/server/appbinding/AppBindingService;->access$200(Lcom/android/server/appbinding/AppBindingService;I)V
 PLcom/android/server/appbinding/AppBindingService;->access$300(Lcom/android/server/appbinding/AppBindingService;I)V
-PLcom/android/server/appbinding/AppBindingService;->bindServicesLocked(ILcom/android/server/appbinding/finders/AppServiceFinder;Ljava/lang/String;)V
+PLcom/android/server/appbinding/AppBindingService;->access$400(Lcom/android/server/appbinding/AppBindingService;I)V
+PLcom/android/server/appbinding/AppBindingService;->access$600(Lcom/android/server/appbinding/AppBindingService;I)V
+PLcom/android/server/appbinding/AppBindingService;->access$700(Lcom/android/server/appbinding/AppBindingService;Ljava/lang/String;I)V
+HSPLcom/android/server/appbinding/AppBindingService;->bindServicesLocked(ILcom/android/server/appbinding/finders/AppServiceFinder;Ljava/lang/String;)V
 PLcom/android/server/appbinding/AppBindingService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/appbinding/AppBindingService;->findConnectionLock(ILcom/android/server/appbinding/finders/AppServiceFinder;)Lcom/android/server/appbinding/AppBindingService$AppServiceConnection;
+HSPLcom/android/server/appbinding/AppBindingService;->findConnectionLock(ILcom/android/server/appbinding/finders/AppServiceFinder;)Lcom/android/server/appbinding/AppBindingService$AppServiceConnection;
 PLcom/android/server/appbinding/AppBindingService;->findFinderLocked(ILjava/lang/String;)Lcom/android/server/appbinding/finders/AppServiceFinder;
 HSPLcom/android/server/appbinding/AppBindingService;->forAllAppsLocked(Ljava/util/function/Consumer;)V
 PLcom/android/server/appbinding/AppBindingService;->handlePackageAddedReplacing(Ljava/lang/String;I)V
 PLcom/android/server/appbinding/AppBindingService;->lambda$D_3boeCn8eAANOp2ZDk6OC2rNaI(Lcom/android/server/appbinding/AppBindingService;Lcom/android/server/appbinding/finders/AppServiceFinder;I)V
 PLcom/android/server/appbinding/AppBindingService;->lambda$dump$1(Ljava/io/PrintWriter;Lcom/android/server/appbinding/finders/AppServiceFinder;)V
-PLcom/android/server/appbinding/AppBindingService;->onAppChanged(Lcom/android/server/appbinding/finders/AppServiceFinder;I)V
+PLcom/android/server/appbinding/AppBindingService;->lambda$onUserRemoved$0(ILcom/android/server/appbinding/finders/AppServiceFinder;)V
+HPLcom/android/server/appbinding/AppBindingService;->onAppChanged(Lcom/android/server/appbinding/finders/AppServiceFinder;I)V
 HSPLcom/android/server/appbinding/AppBindingService;->onBootPhase(I)V
 HSPLcom/android/server/appbinding/AppBindingService;->onPhaseActivityManagerReady()V
 HSPLcom/android/server/appbinding/AppBindingService;->onPhaseThirdPartyAppsCanStart()V
-PLcom/android/server/appbinding/AppBindingService;->onStartUser(I)V
+HSPLcom/android/server/appbinding/AppBindingService;->onStartUser(I)V
+PLcom/android/server/appbinding/AppBindingService;->onStopUser(I)V
 PLcom/android/server/appbinding/AppBindingService;->onUnlockUser(I)V
+PLcom/android/server/appbinding/AppBindingService;->onUserRemoved(I)V
 HSPLcom/android/server/appbinding/AppBindingService;->rebindAllLocked(Ljava/lang/String;)V
 HSPLcom/android/server/appbinding/AppBindingService;->refreshConstants()V
 PLcom/android/server/appbinding/AppBindingService;->unbindServicesLocked(ILcom/android/server/appbinding/finders/AppServiceFinder;Ljava/lang/String;)V
-PLcom/android/server/appbinding/AppBindingUtils;->findService(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/Class;Landroid/content/pm/IPackageManager;Ljava/lang/StringBuilder;)Landroid/content/pm/ServiceInfo;
+HSPLcom/android/server/appbinding/AppBindingUtils;->findService(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/Class;Landroid/content/pm/IPackageManager;Ljava/lang/StringBuilder;)Landroid/content/pm/ServiceInfo;
 HSPLcom/android/server/appbinding/finders/-$$Lambda$CarrierMessagingClientServiceFinder$HEVyQ3IEZ8Eseze74Vyp3NHEREg;-><init>(Lcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;)V
 PLcom/android/server/appbinding/finders/-$$Lambda$CarrierMessagingClientServiceFinder$HEVyQ3IEZ8Eseze74Vyp3NHEREg;->onRoleHoldersChanged(Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLcom/android/server/appbinding/finders/AppServiceFinder;-><init>(Landroid/content/Context;Ljava/util/function/BiConsumer;Landroid/os/Handler;)V
 PLcom/android/server/appbinding/finders/AppServiceFinder;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/appbinding/finders/AppServiceFinder;->findService(ILandroid/content/pm/IPackageManager;Lcom/android/server/appbinding/AppBindingConstants;)Landroid/content/pm/ServiceInfo;
+HSPLcom/android/server/appbinding/finders/AppServiceFinder;->findService(ILandroid/content/pm/IPackageManager;Lcom/android/server/appbinding/AppBindingConstants;)Landroid/content/pm/ServiceInfo;
+PLcom/android/server/appbinding/finders/AppServiceFinder;->onUserRemoved(I)V
 HSPLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;-><init>(Landroid/content/Context;Ljava/util/function/BiConsumer;Landroid/os/Handler;)V
+PLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->asInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
+PLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->asInterface(Landroid/os/IBinder;)Landroid/service/carrier/ICarrierMessagingClientService;
 PLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->getAppDescription()Ljava/lang/String;
-PLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->getServiceAction()Ljava/lang/String;
-PLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->getServiceClass()Ljava/lang/Class;
-PLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->getServicePermission()Ljava/lang/String;
-PLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->getTargetPackage(I)Ljava/lang/String;
-PLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->isEnabled(Lcom/android/server/appbinding/AppBindingConstants;)Z
-PLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->lambda$new$0$CarrierMessagingClientServiceFinder(Ljava/lang/String;Landroid/os/UserHandle;)V
+PLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->getBindFlags(Lcom/android/server/appbinding/AppBindingConstants;)I
+HSPLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->getServiceAction()Ljava/lang/String;
+HSPLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->getServiceClass()Ljava/lang/Class;
+HSPLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->getServicePermission()Ljava/lang/String;
+HSPLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->getTargetPackage(I)Ljava/lang/String;
+HSPLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->isEnabled(Lcom/android/server/appbinding/AppBindingConstants;)Z
+HPLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->lambda$new$0$CarrierMessagingClientServiceFinder(Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->startMonitoring()V
+PLcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;->validateService(Landroid/content/pm/ServiceInfo;)Ljava/lang/String;
+PLcom/android/server/appop/-$$Lambda$6fg-14Ev2L834_Mi1dl7XNuM-aI;-><clinit>()V
+PLcom/android/server/appop/-$$Lambda$6fg-14Ev2L834_Mi1dl7XNuM-aI;-><init>()V
+PLcom/android/server/appop/-$$Lambda$6fg-14Ev2L834_Mi1dl7XNuM-aI;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/appop/-$$Lambda$9PbhNRcJKpFejdnfSDhPa_VHrMY;-><clinit>()V
+PLcom/android/server/appop/-$$Lambda$9PbhNRcJKpFejdnfSDhPa_VHrMY;-><init>()V
+PLcom/android/server/appop/-$$Lambda$9PbhNRcJKpFejdnfSDhPa_VHrMY;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/appop/-$$Lambda$AppOpsService$AfBLuTvVESlqN91IyRX84hMV5nE;-><clinit>()V
 PLcom/android/server/appop/-$$Lambda$AppOpsService$AfBLuTvVESlqN91IyRX84hMV5nE;-><init>()V
 HPLcom/android/server/appop/-$$Lambda$AppOpsService$AfBLuTvVESlqN91IyRX84hMV5nE;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/appop/-$$Lambda$AppOpsService$FYLTtxqrHmv8Y5UdZ9ybXKsSJhs;-><clinit>()V
-PLcom/android/server/appop/-$$Lambda$AppOpsService$FYLTtxqrHmv8Y5UdZ9ybXKsSJhs;-><init>()V
-HPLcom/android/server/appop/-$$Lambda$AppOpsService$FYLTtxqrHmv8Y5UdZ9ybXKsSJhs;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/appop/-$$Lambda$AppOpsService$FYLTtxqrHmv8Y5UdZ9ybXKsSJhs;-><clinit>()V
+HSPLcom/android/server/appop/-$$Lambda$AppOpsService$FYLTtxqrHmv8Y5UdZ9ybXKsSJhs;-><init>()V
+HSPLcom/android/server/appop/-$$Lambda$AppOpsService$FYLTtxqrHmv8Y5UdZ9ybXKsSJhs;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/appop/-$$Lambda$AppOpsService$FeatureOp$MYCtEUxKOBmIqr2Vx8cxdcUBE8E;-><clinit>()V
+HSPLcom/android/server/appop/-$$Lambda$AppOpsService$FeatureOp$MYCtEUxKOBmIqr2Vx8cxdcUBE8E;-><init>()V
+PLcom/android/server/appop/-$$Lambda$AppOpsService$FeatureOp$MYCtEUxKOBmIqr2Vx8cxdcUBE8E;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/appop/-$$Lambda$AppOpsService$GUeKjlbzT65s86vaxy5gvOajuhw;-><clinit>()V
 HSPLcom/android/server/appop/-$$Lambda$AppOpsService$GUeKjlbzT65s86vaxy5gvOajuhw;-><init>()V
 HSPLcom/android/server/appop/-$$Lambda$AppOpsService$GUeKjlbzT65s86vaxy5gvOajuhw;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/appop/-$$Lambda$AppOpsService$JHjaGTUaQHugMX7TLydyaTrbPFw;-><init>(Landroid/os/RemoteCallback;)V
+PLcom/android/server/appop/-$$Lambda$AppOpsService$JHjaGTUaQHugMX7TLydyaTrbPFw;->run()V
 PLcom/android/server/appop/-$$Lambda$AppOpsService$ac4Ra3Yhj0OQzvkaL2dLbsuLAmQ;-><clinit>()V
 PLcom/android/server/appop/-$$Lambda$AppOpsService$ac4Ra3Yhj0OQzvkaL2dLbsuLAmQ;-><init>()V
-PLcom/android/server/appop/-$$Lambda$AppOpsService$ac4Ra3Yhj0OQzvkaL2dLbsuLAmQ;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/appop/-$$Lambda$AppOpsService$ac4Ra3Yhj0OQzvkaL2dLbsuLAmQ;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/appop/-$$Lambda$AppOpsService$zN6prp9KCBI96qJ_QVmqGh-kpB8;-><init>(Lcom/android/server/appop/AppOpsService;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/appop/-$$Lambda$AppOpsService$zN6prp9KCBI96qJ_QVmqGh-kpB8;->run()V
 PLcom/android/server/appop/-$$Lambda$HistoricalRegistry$dJrtb4M71TzV6sx9vPEImQG_akU;-><clinit>()V
 PLcom/android/server/appop/-$$Lambda$HistoricalRegistry$dJrtb4M71TzV6sx9vPEImQG_akU;-><init>()V
-PLcom/android/server/appop/-$$Lambda$HistoricalRegistry$dJrtb4M71TzV6sx9vPEImQG_akU;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/appop/-$$Lambda$HistoricalRegistry$dJrtb4M71TzV6sx9vPEImQG_akU;->accept(Ljava/lang/Object;)V
 PLcom/android/server/appop/AppOpsService$1$1;-><init>(Lcom/android/server/appop/AppOpsService$1;)V
 PLcom/android/server/appop/AppOpsService$1$1;->doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/appop/AppOpsService$1$1;->doInBackground([Ljava/lang/Void;)Ljava/lang/Void;
 HSPLcom/android/server/appop/AppOpsService$1;-><init>(Lcom/android/server/appop/AppOpsService;)V
 PLcom/android/server/appop/AppOpsService$1;->run()V
 HSPLcom/android/server/appop/AppOpsService$2;-><init>(Lcom/android/server/appop/AppOpsService;)V
-HPLcom/android/server/appop/AppOpsService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/appop/AppOpsService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/appop/AppOpsService$3;-><init>(Lcom/android/server/appop/AppOpsService;)V
-PLcom/android/server/appop/AppOpsService$ActiveCallback;-><init>(Lcom/android/server/appop/AppOpsService;Lcom/android/internal/app/IAppOpsActiveCallback;III)V
+PLcom/android/server/appop/AppOpsService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/appop/AppOpsService$4;-><init>(Lcom/android/server/appop/AppOpsService;)V
+PLcom/android/server/appop/AppOpsService$4;->getPackageTrustedToInstallApps(Ljava/lang/String;I)I
+HPLcom/android/server/appop/AppOpsService$ActiveCallback;-><init>(Lcom/android/server/appop/AppOpsService;Lcom/android/internal/app/IAppOpsActiveCallback;III)V
 PLcom/android/server/appop/AppOpsService$ActiveCallback;->binderDied()V
+PLcom/android/server/appop/AppOpsService$ActiveCallback;->destroy()V
 PLcom/android/server/appop/AppOpsService$ActiveCallback;->toString()Ljava/lang/String;
 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$1;)V
 HSPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->setDeviceAndProfileOwners(Landroid/util/SparseIntArray;)V
-PLcom/android/server/appop/AppOpsService$ClientRestrictionState;-><init>(Lcom/android/server/appop/AppOpsService;Landroid/os/IBinder;)V
-PLcom/android/server/appop/AppOpsService$ClientRestrictionState;->destroy()V
+PLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->setModeIgnoringCallback(IILjava/lang/String;ILcom/android/internal/app/IAppOpsCallback;)V
+PLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->setUidModeIgnoringCallback(IIILcom/android/internal/app/IAppOpsCallback;)V
+PLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->updateAppWidgetVisibility(Landroid/util/SparseArray;Z)V
+PLcom/android/server/appop/AppOpsService$ChangeRec;-><init>(IILjava/lang/String;)V
+HSPLcom/android/server/appop/AppOpsService$ClientRestrictionState;-><init>(Lcom/android/server/appop/AppOpsService;Landroid/os/IBinder;)V
+HSPLcom/android/server/appop/AppOpsService$ClientRestrictionState;->destroy()V
 HPLcom/android/server/appop/AppOpsService$ClientRestrictionState;->hasRestriction(ILjava/lang/String;I)Z
-PLcom/android/server/appop/AppOpsService$ClientRestrictionState;->isDefault()Z
-PLcom/android/server/appop/AppOpsService$ClientRestrictionState;->setRestriction(IZ[Ljava/lang/String;I)Z
+HSPLcom/android/server/appop/AppOpsService$ClientRestrictionState;->isDefault()Z
+HPLcom/android/server/appop/AppOpsService$ClientRestrictionState;->isDefault([Z)Z
+PLcom/android/server/appop/AppOpsService$ClientRestrictionState;->removeUser(I)V
+HSPLcom/android/server/appop/AppOpsService$ClientRestrictionState;->setRestriction(IZ[Ljava/lang/String;I)Z
 HSPLcom/android/server/appop/AppOpsService$ClientState;-><init>(Lcom/android/server/appop/AppOpsService;Landroid/os/IBinder;)V
 PLcom/android/server/appop/AppOpsService$ClientState;->binderDied()V
 PLcom/android/server/appop/AppOpsService$ClientState;->toString()Ljava/lang/String;
@@ -5128,87 +8243,171 @@
 HSPLcom/android/server/appop/AppOpsService$Constants;->startMonitoring(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/appop/AppOpsService$Constants;->updateConstants()V
 HSPLcom/android/server/appop/AppOpsService$FeatureOp;-><init>(Lcom/android/server/appop/AppOpsService$Op;)V
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;-><init>(Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService$Op;)V
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;-><init>(Lcom/android/server/appop/AppOpsService;Ljava/lang/String;Lcom/android/server/appop/AppOpsService$Op;)V
+HPLcom/android/server/appop/AppOpsService$FeatureOp;->access$1200(Lcom/android/server/appop/AppOpsService$FeatureOp;)Landroid/util/ArrayMap;
+HPLcom/android/server/appop/AppOpsService$FeatureOp;->access$1300(Lcom/android/server/appop/AppOpsService$FeatureOp;)Landroid/util/ArrayMap;
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;->accessed(ILjava/lang/String;Ljava/lang/String;II)V
 HSPLcom/android/server/appop/AppOpsService$FeatureOp;->accessed(JILjava/lang/String;Ljava/lang/String;II)V
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;->accessed(JJILjava/lang/String;Ljava/lang/String;II)V
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;->add(Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;)Landroid/util/LongSparseArray;
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;->add(Lcom/android/server/appop/AppOpsService$FeatureOp;)V
 PLcom/android/server/appop/AppOpsService$FeatureOp;->continuing(JII)V
 PLcom/android/server/appop/AppOpsService$FeatureOp;->createFeatureEntryBuilderLocked()Landroid/app/AppOpsManager$OpFeatureEntry$Builder;
+HPLcom/android/server/appop/AppOpsService$FeatureOp;->createFeatureEntryLocked()Landroid/app/AppOpsManager$OpFeatureEntry;
+HPLcom/android/server/appop/AppOpsService$FeatureOp;->deepClone(Landroid/util/LongSparseArray;)Landroid/util/LongSparseArray;
 HSPLcom/android/server/appop/AppOpsService$FeatureOp;->finished(JJII)V
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;->finished(Landroid/os/IBinder;)V
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;->finished(Landroid/os/IBinder;Z)V
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;->isRunning()Z
+PLcom/android/server/appop/AppOpsService$FeatureOp;->lambda$started$0(Lcom/android/server/appop/AppOpsService$FeatureOp;Landroid/os/IBinder;)V
+PLcom/android/server/appop/AppOpsService$FeatureOp;->onClientDeath(Landroid/os/IBinder;)V
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;->onUidStateChanged(I)V
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;->rejected(II)V
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;->rejected(JII)V
 HSPLcom/android/server/appop/AppOpsService$FeatureOp;->rejected(JILjava/lang/String;Ljava/lang/String;II)V
 HSPLcom/android/server/appop/AppOpsService$FeatureOp;->running(JJII)V
 HSPLcom/android/server/appop/AppOpsService$FeatureOp;->started(JII)V
+HSPLcom/android/server/appop/AppOpsService$FeatureOp;->started(Landroid/os/IBinder;I)V
+HPLcom/android/server/appop/AppOpsService$FeatureOp;->started(Landroid/os/IBinder;IZ)V
 HSPLcom/android/server/appop/AppOpsService$FeatureOp;->updateAccessTimeAndDuration(JJII)V
 HSPLcom/android/server/appop/AppOpsService$FeatureOp;->updateProxyState(JILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;-><init>(JJLandroid/os/IBinder;Ljava/lang/Runnable;I)V
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;-><init>(JJLandroid/os/IBinder;Ljava/lang/Runnable;ILcom/android/server/appop/AppOpsService$1;)V
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->access$600(Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;)I
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->access$700(Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;)I
+PLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->binderDied()V
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->finish()V
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->getClientId()Landroid/os/IBinder;
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->getStartElapsedTime()J
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->getStartTime()J
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->getUidState()I
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->reinit(JJLandroid/os/IBinder;Ljava/lang/Runnable;I)V
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEventPool;-><init>(Lcom/android/server/appop/AppOpsService;)V
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEventPool;->acquire(JJLandroid/os/IBinder;Ljava/lang/Runnable;I)Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;
 HSPLcom/android/server/appop/AppOpsService$ModeCallback;-><init>(Lcom/android/server/appop/AppOpsService;Lcom/android/internal/app/IAppOpsCallback;IIII)V
-PLcom/android/server/appop/AppOpsService$ModeCallback;->binderDied()V
+HPLcom/android/server/appop/AppOpsService$ModeCallback;->binderDied()V
 HSPLcom/android/server/appop/AppOpsService$ModeCallback;->isWatchingUid(I)Z
-PLcom/android/server/appop/AppOpsService$ModeCallback;->toString()Ljava/lang/String;
+HPLcom/android/server/appop/AppOpsService$ModeCallback;->toString()Ljava/lang/String;
+PLcom/android/server/appop/AppOpsService$ModeCallback;->unlinkToDeath()V
 PLcom/android/server/appop/AppOpsService$NotedCallback;-><init>(Lcom/android/server/appop/AppOpsService;Lcom/android/internal/app/IAppOpsNotedCallback;III)V
+PLcom/android/server/appop/AppOpsService$NotedCallback;->binderDied()V
+PLcom/android/server/appop/AppOpsService$NotedCallback;->destroy()V
 PLcom/android/server/appop/AppOpsService$NotedCallback;->toString()Ljava/lang/String;
 HSPLcom/android/server/appop/AppOpsService$Op;-><init>(Lcom/android/server/appop/AppOpsService$UidState;Ljava/lang/String;I)V
+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;->access$100(Lcom/android/server/appop/AppOpsService$Op;)I
+HSPLcom/android/server/appop/AppOpsService$Op;->access$1000(Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;Ljava/lang/String;)Lcom/android/server/appop/AppOpsService$FeatureOp;
 HSPLcom/android/server/appop/AppOpsService$Op;->access$102(Lcom/android/server/appop/AppOpsService$Op;I)I
+HSPLcom/android/server/appop/AppOpsService$Op;->access$200(Lcom/android/server/appop/AppOpsService$Op;)I
+HSPLcom/android/server/appop/AppOpsService$Op;->access$202(Lcom/android/server/appop/AppOpsService$Op;I)I
 HSPLcom/android/server/appop/AppOpsService$Op;->access$500(Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;Ljava/lang/String;)Lcom/android/server/appop/AppOpsService$FeatureOp;
-HPLcom/android/server/appop/AppOpsService$Op;->createEntryLocked()Landroid/app/AppOpsManager$OpEntry;
+HSPLcom/android/server/appop/AppOpsService$Op;->access$900(Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;Ljava/lang/String;)Lcom/android/server/appop/AppOpsService$FeatureOp;
+HSPLcom/android/server/appop/AppOpsService$Op;->createEntryLocked()Landroid/app/AppOpsManager$OpEntry;
 HPLcom/android/server/appop/AppOpsService$Op;->createSingleFeatureEntryLocked(Ljava/lang/String;)Landroid/app/AppOpsManager$OpEntry;
 HSPLcom/android/server/appop/AppOpsService$Op;->evalMode()I
 HSPLcom/android/server/appop/AppOpsService$Op;->getOrCreateFeature(Lcom/android/server/appop/AppOpsService$Op;Ljava/lang/String;)Lcom/android/server/appop/AppOpsService$FeatureOp;
+HSPLcom/android/server/appop/AppOpsService$Op;->isRunning()Z
+HSPLcom/android/server/appop/AppOpsService$OpEventProxyInfoPool;-><init>(Lcom/android/server/appop/AppOpsService;)V
+HSPLcom/android/server/appop/AppOpsService$OpEventProxyInfoPool;->acquire(ILjava/lang/String;Ljava/lang/String;)Landroid/app/AppOpsManager$OpEventProxyInfo;
 HSPLcom/android/server/appop/AppOpsService$Ops;-><init>(Ljava/lang/String;Lcom/android/server/appop/AppOpsService$UidState;Z)V
 HSPLcom/android/server/appop/AppOpsService$UidState;-><init>(I)V
+HSPLcom/android/server/appop/AppOpsService$UidState;-><init>(Lcom/android/server/appop/AppOpsService;I)V
 HSPLcom/android/server/appop/AppOpsService$UidState;->clear()V
 HSPLcom/android/server/appop/AppOpsService$UidState;->evalForegroundOps(Landroid/util/SparseArray;)V
 HSPLcom/android/server/appop/AppOpsService$UidState;->evalForegroundWatchers(ILandroid/util/SparseArray;Landroid/util/SparseBooleanArray;)V
 HSPLcom/android/server/appop/AppOpsService$UidState;->evalMode(II)I
 HSPLcom/android/server/appop/AppOpsService$UidState;->isDefault()Z
+HSPLcom/android/server/appop/AppOpsService$UidState;->maybeShowWhileInUseDebugToast(II)V
 HSPLcom/android/server/appop/AppOpsService;-><clinit>()V
 HSPLcom/android/server/appop/AppOpsService;-><init>(Ljava/io/File;Landroid/os/Handler;)V
+PLcom/android/server/appop/AppOpsService;->access$1000()[I
+PLcom/android/server/appop/AppOpsService;->access$1100()[I
+PLcom/android/server/appop/AppOpsService;->access$1100(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;IILjava/lang/String;)V
+PLcom/android/server/appop/AppOpsService;->access$1200(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;IILjava/lang/String;)V
+PLcom/android/server/appop/AppOpsService;->access$1900(Lcom/android/server/appop/AppOpsService;Landroid/util/SparseArray;Z)V
+PLcom/android/server/appop/AppOpsService;->access$2000(Lcom/android/server/appop/AppOpsService;IIILcom/android/internal/app/IAppOpsCallback;)V
+PLcom/android/server/appop/AppOpsService;->access$2100(Lcom/android/server/appop/AppOpsService;IILjava/lang/String;ILcom/android/internal/app/IAppOpsCallback;)V
 PLcom/android/server/appop/AppOpsService;->access$300()[I
+PLcom/android/server/appop/AppOpsService;->access$300(Lcom/android/server/appop/AppOpsService;)Landroid/app/ActivityManagerInternal;
+HSPLcom/android/server/appop/AppOpsService;->access$300(Lcom/android/server/appop/AppOpsService;)Lcom/android/server/appop/AppOpsService$OpEventProxyInfoPool;
+HSPLcom/android/server/appop/AppOpsService;->access$400(Lcom/android/server/appop/AppOpsService;)Lcom/android/server/appop/AppOpsService$OpEventProxyInfoPool;
+HSPLcom/android/server/appop/AppOpsService;->access$400(Lcom/android/server/appop/AppOpsService;IILjava/lang/String;Z)V
 HPLcom/android/server/appop/AppOpsService;->access$400(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;IILjava/lang/String;)V
+HSPLcom/android/server/appop/AppOpsService;->access$500(Lcom/android/server/appop/AppOpsService;)Lcom/android/server/appop/AppOpsService$InProgressStartOpEventPool;
+HSPLcom/android/server/appop/AppOpsService;->access$500(Lcom/android/server/appop/AppOpsService;IILjava/lang/String;Z)V
+HSPLcom/android/server/appop/AppOpsService;->access$600(Lcom/android/server/appop/AppOpsService;)Lcom/android/server/appop/AppOpsService$InProgressStartOpEventPool;
+PLcom/android/server/appop/AppOpsService;->access$700(Lcom/android/server/appop/AppOpsService$FeatureOp;Landroid/os/IBinder;)V
+PLcom/android/server/appop/AppOpsService;->access$800(Lcom/android/server/appop/AppOpsService$FeatureOp;Landroid/os/IBinder;)V
+HSPLcom/android/server/appop/AppOpsService;->access$800(Lcom/android/server/appop/AppOpsService;)V
+HSPLcom/android/server/appop/AppOpsService;->access$900(Lcom/android/server/appop/AppOpsService;)V
+PLcom/android/server/appop/AppOpsService;->addCallbacks(Ljava/util/HashMap;IILjava/lang/String;Landroid/util/ArraySet;)Ljava/util/HashMap;
 HPLcom/android/server/appop/AppOpsService;->checkAudioOperation(IIILjava/lang/String;)I
-PLcom/android/server/appop/AppOpsService;->checkAudioOperationImpl(IIILjava/lang/String;)I
+HPLcom/android/server/appop/AppOpsService;->checkAudioOperationImpl(IIILjava/lang/String;)I
 HSPLcom/android/server/appop/AppOpsService;->checkOperation(IILjava/lang/String;)I
-HPLcom/android/server/appop/AppOpsService;->checkOperationImpl(IILjava/lang/String;Z)I
+HSPLcom/android/server/appop/AppOpsService;->checkOperationImpl(IILjava/lang/String;Z)I
 HSPLcom/android/server/appop/AppOpsService;->checkOperationInternal(IILjava/lang/String;Z)I
 HSPLcom/android/server/appop/AppOpsService;->checkOperationRaw(IILjava/lang/String;)I
 HSPLcom/android/server/appop/AppOpsService;->checkOperationUnchecked(IILjava/lang/String;Z)I
 HSPLcom/android/server/appop/AppOpsService;->checkPackage(ILjava/lang/String;)I
-PLcom/android/server/appop/AppOpsService;->checkSystemUid(Ljava/lang/String;)V
+HSPLcom/android/server/appop/AppOpsService;->checkSystemUid(Ljava/lang/String;)V
+HPLcom/android/server/appop/AppOpsService;->collectAsyncNotedOp(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->collectOps(Lcom/android/server/appop/AppOpsService$Ops;[I)Ljava/util/ArrayList;
 HSPLcom/android/server/appop/AppOpsService;->commitUidPendingStateLocked(Lcom/android/server/appop/AppOpsService$UidState;)V
-PLcom/android/server/appop/AppOpsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/appop/AppOpsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HPLcom/android/server/appop/AppOpsService;->dumpStatesLocked(Ljava/io/PrintWriter;JLcom/android/server/appop/AppOpsService$Op;JLjava/text/SimpleDateFormat;Ljava/util/Date;Ljava/lang/String;)V
 HPLcom/android/server/appop/AppOpsService;->dumpStatesLocked(Ljava/io/PrintWriter;JLcom/android/server/appop/AppOpsService$Op;Ljava/lang/String;JLjava/text/SimpleDateFormat;Ljava/util/Date;Ljava/lang/String;)V
+HPLcom/android/server/appop/AppOpsService;->dumpStatesLocked(Ljava/io/PrintWriter;Ljava/lang/String;IJLcom/android/server/appop/AppOpsService$Op;JLjava/text/SimpleDateFormat;Ljava/util/Date;Ljava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->enforceManageAppOpsModes(III)V
+HPLcom/android/server/appop/AppOpsService;->ensureHistoricalOpRequestIsValid(ILjava/lang/String;Ljava/lang/String;Ljava/util/List;IJJI)V
 HSPLcom/android/server/appop/AppOpsService;->evalAllForegroundOpsLocked()V
 HSPLcom/android/server/appop/AppOpsService;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->finishOperationLocked(Lcom/android/server/appop/AppOpsService$Op;Ljava/lang/String;Z)V
-PLcom/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;
+HPLcom/android/server/appop/AppOpsService;->getHistoricalOps(ILjava/lang/String;Ljava/lang/String;Ljava/util/List;IJJILandroid/os/RemoteCallback;)V
 PLcom/android/server/appop/AppOpsService;->getHistoricalOps(ILjava/lang/String;Ljava/util/List;JJILandroid/os/RemoteCallback;)V
-HPLcom/android/server/appop/AppOpsService;->getOpEntryForResult(Lcom/android/server/appop/AppOpsService$Op;J)Landroid/app/AppOpsManager$OpEntry;
+HSPLcom/android/server/appop/AppOpsService;->getOpEntryForResult(Lcom/android/server/appop/AppOpsService$Op;J)Landroid/app/AppOpsManager$OpEntry;
+HSPLcom/android/server/appop/AppOpsService;->getOpLocked(IILjava/lang/String;Ljava/lang/String;ZZ)Lcom/android/server/appop/AppOpsService$Op;
 HSPLcom/android/server/appop/AppOpsService;->getOpLocked(IILjava/lang/String;ZZ)Lcom/android/server/appop/AppOpsService$Op;
+HSPLcom/android/server/appop/AppOpsService;->getOpLocked(Lcom/android/server/appop/AppOpsService$Ops;IIZ)Lcom/android/server/appop/AppOpsService$Op;
 HSPLcom/android/server/appop/AppOpsService;->getOpLocked(Lcom/android/server/appop/AppOpsService$Ops;IZ)Lcom/android/server/appop/AppOpsService$Op;
-PLcom/android/server/appop/AppOpsService;->getOpsForPackage(ILjava/lang/String;[I)Ljava/util/List;
+HPLcom/android/server/appop/AppOpsService;->getOpsForPackage(ILjava/lang/String;[I)Ljava/util/List;
+HSPLcom/android/server/appop/AppOpsService;->getOpsRawLocked(ILjava/lang/String;Ljava/lang/String;ZZ)Lcom/android/server/appop/AppOpsService$Ops;
 HSPLcom/android/server/appop/AppOpsService;->getOpsRawLocked(ILjava/lang/String;ZZ)Lcom/android/server/appop/AppOpsService$Ops;
+HSPLcom/android/server/appop/AppOpsService;->getOpsRawNoVerifyLocked(ILjava/lang/String;Ljava/lang/String;ZZ)Lcom/android/server/appop/AppOpsService$Ops;
 HSPLcom/android/server/appop/AppOpsService;->getOpsRawNoVerifyLocked(ILjava/lang/String;ZZ)Lcom/android/server/appop/AppOpsService$Ops;
 HSPLcom/android/server/appop/AppOpsService;->getPackagesForOps([I)Ljava/util/List;
 HSPLcom/android/server/appop/AppOpsService;->getPackagesForUid(I)[Ljava/lang/String;
+HPLcom/android/server/appop/AppOpsService;->getSwitchOpToOps()Landroid/util/SparseArray;
 HSPLcom/android/server/appop/AppOpsService;->getToken(Landroid/os/IBinder;)Landroid/os/IBinder;
 HSPLcom/android/server/appop/AppOpsService;->getUidStateLocked(IZ)Lcom/android/server/appop/AppOpsService$UidState;
-HPLcom/android/server/appop/AppOpsService;->isOpRestrictedDueToSuspend(ILjava/lang/String;I)Z
+HSPLcom/android/server/appop/AppOpsService;->isOpRestrictedDueToSuspend(ILjava/lang/String;I)Z
+HSPLcom/android/server/appop/AppOpsService;->isOpRestrictedLocked(IILjava/lang/String;Ljava/lang/String;Z)Z
 HSPLcom/android/server/appop/AppOpsService;->isOpRestrictedLocked(IILjava/lang/String;Z)Z
 HPLcom/android/server/appop/AppOpsService;->isOperationActive(IILjava/lang/String;)Z
-PLcom/android/server/appop/AppOpsService;->lambda$AfBLuTvVESlqN91IyRX84hMV5nE(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;IILjava/lang/String;I)V
-PLcom/android/server/appop/AppOpsService;->lambda$FYLTtxqrHmv8Y5UdZ9ybXKsSJhs(Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService$ModeCallback;IILjava/lang/String;)V
+HPLcom/android/server/appop/AppOpsService;->lambda$AfBLuTvVESlqN91IyRX84hMV5nE(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;IILjava/lang/String;I)V
+HSPLcom/android/server/appop/AppOpsService;->lambda$FYLTtxqrHmv8Y5UdZ9ybXKsSJhs(Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService$ModeCallback;IILjava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->lambda$GUeKjlbzT65s86vaxy5gvOajuhw(Lcom/android/server/appop/AppOpsService;II)V
+HPLcom/android/server/appop/AppOpsService;->lambda$ac4Ra3Yhj0OQzvkaL2dLbsuLAmQ(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;IILjava/lang/String;Z)V
+PLcom/android/server/appop/AppOpsService;->lambda$getHistoricalOps$1(Landroid/os/RemoteCallback;)V
+HSPLcom/android/server/appop/AppOpsService;->lambda$systemReady$0$AppOpsService(Ljava/lang/String;Ljava/lang/String;I)V
 HPLcom/android/server/appop/AppOpsService;->noteAsyncOp(Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->noteOperation(IILjava/lang/String;Ljava/lang/String;)I
+HSPLcom/android/server/appop/AppOpsService;->noteOperation(IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;)I
 HSPLcom/android/server/appop/AppOpsService;->noteOperationImpl(IILjava/lang/String;Ljava/lang/String;)I
+HSPLcom/android/server/appop/AppOpsService;->noteOperationImpl(IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;)I
 HSPLcom/android/server/appop/AppOpsService;->noteOperationUnchecked(IILjava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)I
+HSPLcom/android/server/appop/AppOpsService;->noteOperationUnchecked(IILjava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;IZLjava/lang/String;)I
 HPLcom/android/server/appop/AppOpsService;->noteProxyOperation(IILjava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)I
-PLcom/android/server/appop/AppOpsService;->notifyOpActiveChanged(Landroid/util/ArraySet;IILjava/lang/String;Z)V
+HPLcom/android/server/appop/AppOpsService;->noteProxyOperation(IILjava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;)I
+HPLcom/android/server/appop/AppOpsService;->notifyOpActiveChanged(Landroid/util/ArraySet;IILjava/lang/String;Z)V
 HPLcom/android/server/appop/AppOpsService;->notifyOpChanged(Landroid/util/ArraySet;IILjava/lang/String;)V
-HPLcom/android/server/appop/AppOpsService;->notifyOpChanged(Lcom/android/server/appop/AppOpsService$ModeCallback;IILjava/lang/String;)V
-HPLcom/android/server/appop/AppOpsService;->notifyOpChangedSync(IILjava/lang/String;I)V
+HSPLcom/android/server/appop/AppOpsService;->notifyOpChanged(Lcom/android/server/appop/AppOpsService$ModeCallback;IILjava/lang/String;)V
+HSPLcom/android/server/appop/AppOpsService;->notifyOpChangedSync(IILjava/lang/String;I)V
 HPLcom/android/server/appop/AppOpsService;->notifyOpChecked(Landroid/util/ArraySet;IILjava/lang/String;I)V
 HSPLcom/android/server/appop/AppOpsService;->notifyWatchersOfChange(II)V
+PLcom/android/server/appop/AppOpsService;->onClientDeath(Lcom/android/server/appop/AppOpsService$FeatureOp;Landroid/os/IBinder;)V
+HPLcom/android/server/appop/AppOpsService;->packageRemoved(ILjava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->permissionToOpCode(Ljava/lang/String;)I
 HSPLcom/android/server/appop/AppOpsService;->publish(Landroid/content/Context;)V
 HSPLcom/android/server/appop/AppOpsService;->readFeatureOp(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/appop/AppOpsService$Op;Ljava/lang/String;)V
@@ -5217,31 +8416,44 @@
 HSPLcom/android/server/appop/AppOpsService;->readState()V
 HSPLcom/android/server/appop/AppOpsService;->readUid(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->readUidOps(Lorg/xmlpull/v1/XmlPullParser;)V
+HPLcom/android/server/appop/AppOpsService;->removeUidsForUserLocked(I)V
+PLcom/android/server/appop/AppOpsService;->removeUser(I)V
+HPLcom/android/server/appop/AppOpsService;->resetAllModes(ILjava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->resolvePackageName(ILjava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/appop/AppOpsService;->resolveUid(Ljava/lang/String;)I
 HSPLcom/android/server/appop/AppOpsService;->scheduleFastWriteLocked()V
 HSPLcom/android/server/appop/AppOpsService;->scheduleOpActiveChangedIfNeededLocked(IILjava/lang/String;Z)V
 HSPLcom/android/server/appop/AppOpsService;->scheduleOpNotedIfNeededLocked(IILjava/lang/String;I)V
-PLcom/android/server/appop/AppOpsService;->scheduleWriteLocked()V
+HSPLcom/android/server/appop/AppOpsService;->scheduleWriteLocked()V
+PLcom/android/server/appop/AppOpsService;->setAppOpsServiceDelegate(Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;)V
 HSPLcom/android/server/appop/AppOpsService;->setAudioRestriction(IIII[Ljava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->setCameraAudioRestriction(I)V
-PLcom/android/server/appop/AppOpsService;->setMode(IILjava/lang/String;I)V
-HPLcom/android/server/appop/AppOpsService;->setUidMode(III)V
-PLcom/android/server/appop/AppOpsService;->setUserRestrictionNoCheck(IZLandroid/os/IBinder;I[Ljava/lang/String;)V
-PLcom/android/server/appop/AppOpsService;->setUserRestrictions(Landroid/os/Bundle;Landroid/os/IBinder;I)V
+HPLcom/android/server/appop/AppOpsService;->setMode(IILjava/lang/String;I)V
+PLcom/android/server/appop/AppOpsService;->setMode(IILjava/lang/String;ILcom/android/internal/app/IAppOpsCallback;)V
+HSPLcom/android/server/appop/AppOpsService;->setUidMode(III)V
+HPLcom/android/server/appop/AppOpsService;->setUidMode(IIILcom/android/internal/app/IAppOpsCallback;)V
+HPLcom/android/server/appop/AppOpsService;->setUserRestriction(IZLandroid/os/IBinder;I[Ljava/lang/String;)V
+HSPLcom/android/server/appop/AppOpsService;->setUserRestrictionNoCheck(IZLandroid/os/IBinder;I[Ljava/lang/String;)V
+HSPLcom/android/server/appop/AppOpsService;->setUserRestrictions(Landroid/os/Bundle;Landroid/os/IBinder;I)V
 HSPLcom/android/server/appop/AppOpsService;->shouldCollectNotes(I)Z
+PLcom/android/server/appop/AppOpsService;->shutdown()V
 HSPLcom/android/server/appop/AppOpsService;->startOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;Z)I
-PLcom/android/server/appop/AppOpsService;->startWatchingActive([ILcom/android/internal/app/IAppOpsActiveCallback;)V
+HSPLcom/android/server/appop/AppOpsService;->startOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;ZZLjava/lang/String;)I
+HPLcom/android/server/appop/AppOpsService;->startWatchingActive([ILcom/android/internal/app/IAppOpsActiveCallback;)V
 HSPLcom/android/server/appop/AppOpsService;->startWatchingMode(ILjava/lang/String;Lcom/android/internal/app/IAppOpsCallback;)V
 HSPLcom/android/server/appop/AppOpsService;->startWatchingModeWithFlags(ILjava/lang/String;ILcom/android/internal/app/IAppOpsCallback;)V
 PLcom/android/server/appop/AppOpsService;->startWatchingNoted([ILcom/android/internal/app/IAppOpsNotedCallback;)V
-PLcom/android/server/appop/AppOpsService;->stopWatchingActive(Lcom/android/internal/app/IAppOpsActiveCallback;)V
+HPLcom/android/server/appop/AppOpsService;->stopWatchingActive(Lcom/android/internal/app/IAppOpsActiveCallback;)V
 HPLcom/android/server/appop/AppOpsService;->stopWatchingMode(Lcom/android/internal/app/IAppOpsCallback;)V
+PLcom/android/server/appop/AppOpsService;->stopWatchingNoted(Lcom/android/internal/app/IAppOpsNotedCallback;)V
 HSPLcom/android/server/appop/AppOpsService;->systemReady()V
-HPLcom/android/server/appop/AppOpsService;->updatePermissionRevokedCompat(III)V
+HPLcom/android/server/appop/AppOpsService;->uidRemoved(I)V
+HPLcom/android/server/appop/AppOpsService;->updateAppWidgetVisibility(Landroid/util/SparseArray;Z)V
+HSPLcom/android/server/appop/AppOpsService;->updatePermissionRevokedCompat(III)V
 HSPLcom/android/server/appop/AppOpsService;->updateUidProcState(III)V
 HSPLcom/android/server/appop/AppOpsService;->upgradeLocked(I)V
 HSPLcom/android/server/appop/AppOpsService;->verifyAndGetIsPrivileged(ILjava/lang/String;)Z
+HSPLcom/android/server/appop/AppOpsService;->verifyAndGetIsPrivileged(ILjava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/appop/AppOpsService;->verifyIncomingOp(I)V
 HSPLcom/android/server/appop/AppOpsService;->verifyIncomingUid(I)V
 HPLcom/android/server/appop/AppOpsService;->writeState()V
@@ -5258,24 +8470,42 @@
 HSPLcom/android/server/appop/HistoricalRegistry$1;-><init>(Lcom/android/server/appop/HistoricalRegistry;Landroid/os/Handler;Landroid/content/ContentResolver;)V
 HSPLcom/android/server/appop/HistoricalRegistry$Persistence;-><clinit>()V
 HSPLcom/android/server/appop/HistoricalRegistry$Persistence;-><init>(JJ)V
+PLcom/android/server/appop/HistoricalRegistry$Persistence;->access$100(Lcom/android/server/appop/HistoricalRegistry$Persistence;Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI)V
 PLcom/android/server/appop/HistoricalRegistry$Persistence;->access$100(Lcom/android/server/appop/HistoricalRegistry$Persistence;Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;[Ljava/lang/String;JJI)V
 PLcom/android/server/appop/HistoricalRegistry$Persistence;->clearHistoryDLocked()V
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->clearHistoryDLocked(ILjava/lang/String;)V
+PLcom/android/server/appop/HistoricalRegistry$Persistence;->collectHistoricalOpsBaseDLocked(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI)Ljava/util/LinkedList;
 PLcom/android/server/appop/HistoricalRegistry$Persistence;->collectHistoricalOpsBaseDLocked(ILjava/lang/String;[Ljava/lang/String;JJI)Ljava/util/LinkedList;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->collectHistoricalOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI)V
 PLcom/android/server/appop/HistoricalRegistry$Persistence;->collectHistoricalOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;[Ljava/lang/String;JJI)V
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->collectHistoricalOpsRecursiveDLocked(Ljava/io/File;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI[JLjava/util/LinkedList;ILjava/util/Set;)Ljava/util/LinkedList;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->collectHistoricalOpsRecursiveDLocked(Ljava/io/File;ILjava/lang/String;[Ljava/lang/String;JJI[JLjava/util/LinkedList;ILjava/util/Set;)Ljava/util/LinkedList;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->computeGlobalIntervalBeginMillis(I)J
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->generateFile(Ljava/io/File;I)Ljava/io/File;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->getHistoricalFileNames(Ljava/io/File;)Ljava/util/Set;
 HSPLcom/android/server/appop/HistoricalRegistry$Persistence;->getLastPersistTimeMillisDLocked()J
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->handlePersistHistoricalOpsRecursiveDLocked(Ljava/io/File;Ljava/io/File;Ljava/util/List;Ljava/util/Set;I)V
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->normalizeSnapshotForSlotDuration(Ljava/util/List;J)V
-PLcom/android/server/appop/HistoricalRegistry$Persistence;->persistHistoricalOpsDLocked(Ljava/util/List;)V
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->persistHistoricalOpsDLocked(Ljava/util/List;)V
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalFeatureOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalOpDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalOpDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Lorg/xmlpull/v1/XmlPullParser;[Ljava/lang/String;ID)Landroid/app/AppOpsManager$HistoricalOps;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalOpsLocked(Ljava/io/File;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI[J)Ljava/util/List;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalOpsLocked(Ljava/io/File;ILjava/lang/String;[Ljava/lang/String;JJI[J)Ljava/util/List;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalOpsLocked(Ljava/io/File;JJILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI[JILjava/util/Set;)Ljava/util/List;
 PLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalOpsLocked(Ljava/io/File;JJILjava/lang/String;[Ljava/lang/String;JJI[JILjava/util/Set;)Ljava/util/List;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalPackageOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalPackageOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[Ljava/lang/String;ID)Landroid/app/AppOpsManager$HistoricalOps;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalUidOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;Lorg/xmlpull/v1/XmlPullParser;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalUidOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;Lorg/xmlpull/v1/XmlPullParser;ILjava/lang/String;[Ljava/lang/String;ID)Landroid/app/AppOpsManager$HistoricalOps;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoryDLocked()Ljava/util/List;
+PLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoryRawDLocked()Ljava/util/List;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readStateDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;ILorg/xmlpull/v1/XmlPullParser;ID)Landroid/app/AppOpsManager$HistoricalOps;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readStateDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Ljava/lang/String;ILorg/xmlpull/v1/XmlPullParser;ID)Landroid/app/AppOpsManager$HistoricalOps;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readeHistoricalOpsDLocked(Lorg/xmlpull/v1/XmlPullParser;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI[J)Landroid/app/AppOpsManager$HistoricalOps;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readeHistoricalOpsDLocked(Lorg/xmlpull/v1/XmlPullParser;ILjava/lang/String;[Ljava/lang/String;JJI[J)Landroid/app/AppOpsManager$HistoricalOps;
+PLcom/android/server/appop/HistoricalRegistry$Persistence;->spliceFromEnd(Landroid/app/AppOpsManager$HistoricalOps;D)Landroid/app/AppOpsManager$HistoricalOps;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalFeatureOpsDLocked(Landroid/app/AppOpsManager$HistoricalFeatureOps;Lorg/xmlpull/v1/XmlSerializer;)V
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalOpDLocked(Landroid/app/AppOpsManager$HistoricalOp;Lorg/xmlpull/v1/XmlSerializer;)V
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalOpDLocked(Landroid/app/AppOpsManager$HistoricalOps;Lorg/xmlpull/v1/XmlSerializer;)V
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalOpsDLocked(Ljava/util/List;JLjava/io/File;)V
@@ -5285,19 +8515,29 @@
 HSPLcom/android/server/appop/HistoricalRegistry;-><clinit>()V
 HSPLcom/android/server/appop/HistoricalRegistry;-><init>(Ljava/lang/Object;)V
 PLcom/android/server/appop/HistoricalRegistry;->clearHistory()V
+PLcom/android/server/appop/HistoricalRegistry;->clearHistory(ILjava/lang/String;)V
 PLcom/android/server/appop/HistoricalRegistry;->clearHistoryOnDiskDLocked()V
+HPLcom/android/server/appop/HistoricalRegistry;->getHistoricalOps(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJILandroid/os/RemoteCallback;)V
 PLcom/android/server/appop/HistoricalRegistry;->getHistoricalOps(ILjava/lang/String;[Ljava/lang/String;JJILandroid/os/RemoteCallback;)V
 HSPLcom/android/server/appop/HistoricalRegistry;->getUpdatedPendingHistoricalOpsMLocked(J)Landroid/app/AppOpsManager$HistoricalOps;
 HSPLcom/android/server/appop/HistoricalRegistry;->increaseOpAccessDuration(IILjava/lang/String;IIJ)V
+HSPLcom/android/server/appop/HistoricalRegistry;->increaseOpAccessDuration(IILjava/lang/String;Ljava/lang/String;IIJ)V
 HSPLcom/android/server/appop/HistoricalRegistry;->incrementOpAccessedCount(IILjava/lang/String;II)V
+HSPLcom/android/server/appop/HistoricalRegistry;->incrementOpAccessedCount(IILjava/lang/String;Ljava/lang/String;II)V
 HSPLcom/android/server/appop/HistoricalRegistry;->incrementOpRejected(IILjava/lang/String;II)V
+HSPLcom/android/server/appop/HistoricalRegistry;->incrementOpRejected(IILjava/lang/String;Ljava/lang/String;II)V
 PLcom/android/server/appop/HistoricalRegistry;->isApiEnabled()Z
 HSPLcom/android/server/appop/HistoricalRegistry;->isPersistenceInitializedMLocked()Z
+PLcom/android/server/appop/HistoricalRegistry;->lambda$dJrtb4M71TzV6sx9vPEImQG_akU(Lcom/android/server/appop/HistoricalRegistry;)V
 PLcom/android/server/appop/HistoricalRegistry;->offsetHistory(J)V
-PLcom/android/server/appop/HistoricalRegistry;->persistPendingHistory()V
-PLcom/android/server/appop/HistoricalRegistry;->persistPendingHistory(Ljava/util/List;)V
+HPLcom/android/server/appop/HistoricalRegistry;->persistPendingHistory()V
+HPLcom/android/server/appop/HistoricalRegistry;->persistPendingHistory(Ljava/util/List;)V
+PLcom/android/server/appop/HistoricalRegistry;->resampleHistoryOnDiskInMemoryDMLocked(J)V
+PLcom/android/server/appop/HistoricalRegistry;->schedulePersistHistoricalOpsMLocked(Landroid/app/AppOpsManager$HistoricalOps;)V
 HSPLcom/android/server/appop/HistoricalRegistry;->systemReady(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/appop/HistoricalRegistry;->updateParametersFromSetting(Landroid/content/ContentResolver;)V
+PLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$3-HMCieo6-UZfG43p_6ip1hrL0k;-><init>(Landroid/app/prediction/AppPredictionSessionId;Landroid/content/pm/ParceledListSlice;Landroid/app/prediction/IPredictionCallback;)V
+PLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$3-HMCieo6-UZfG43p_6ip1hrL0k;->accept(Ljava/lang/Object;)V
 PLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$40EK4qcr-rG55ENTthOaXAXWDA4;-><init>(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
 PLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$40EK4qcr-rG55ENTthOaXAXWDA4;->accept(Ljava/lang/Object;)V
 PLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$4yDhFef-19aMlJ-Y7O6RdjSAvnk;-><init>(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;)V
@@ -5308,16 +8548,24 @@
 PLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$gV-NT40YbIbIqIJKiNGjlZGVJjc;->accept(Ljava/lang/Object;)V
 PLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$s2vrDOHz5x1TW_6jMihxp1iCAvg;-><init>(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
 PLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$s2vrDOHz5x1TW_6jMihxp1iCAvg;->accept(Ljava/lang/Object;)V
-PLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$vSY20eQq5y5FXrxhhqOTcEmezTs;-><init>(Landroid/app/prediction/AppPredictionSessionId;)V
+HPLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$vSY20eQq5y5FXrxhhqOTcEmezTs;-><init>(Landroid/app/prediction/AppPredictionSessionId;)V
 PLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$vSY20eQq5y5FXrxhhqOTcEmezTs;->accept(Ljava/lang/Object;)V
+PLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$vWB3PdxOOvPr7p0_NmoqXeH8Ros;-><init>(Landroid/app/prediction/AppPredictionSessionId;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
+PLcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$vWB3PdxOOvPr7p0_NmoqXeH8Ros;->accept(Ljava/lang/Object;)V
+PLcom/android/server/appprediction/-$$Lambda$AppPredictionPerUserService$AppPredictionSessionInfo$LQ7iu1YPVHeNHnTTNfaw5e_68Z4;-><init>(Lcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
+PLcom/android/server/appprediction/-$$Lambda$AppPredictionPerUserService$AppPredictionSessionInfo$LQ7iu1YPVHeNHnTTNfaw5e_68Z4;->accept(Ljava/lang/Object;)V
 PLcom/android/server/appprediction/-$$Lambda$AppPredictionPerUserService$ot809pjFOVEJ6shAJalMZ9_QhCo;-><init>(Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 PLcom/android/server/appprediction/-$$Lambda$AppPredictionPerUserService$ot809pjFOVEJ6shAJalMZ9_QhCo;->accept(Ljava/lang/Object;)V
-PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$9DCowUTEF8fYuBlWGxOmP5hTAWA;-><init>(Landroid/app/prediction/AppPredictionSessionId;)V
-PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$9DCowUTEF8fYuBlWGxOmP5hTAWA;->run(Landroid/os/IInterface;)V
+PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$2EyTj40DnIRaUJU1GBU3r9jPAJg;-><init>(Landroid/app/prediction/AppPredictionSessionId;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
+PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$2EyTj40DnIRaUJU1GBU3r9jPAJg;->run(Landroid/os/IInterface;)V
+HPLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$9DCowUTEF8fYuBlWGxOmP5hTAWA;-><init>(Landroid/app/prediction/AppPredictionSessionId;)V
+HPLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$9DCowUTEF8fYuBlWGxOmP5hTAWA;->run(Landroid/os/IInterface;)V
 PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$Ikwq62LQ8mos7hCBmykUhqvUq2Y;-><init>(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;)V
 PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$Ikwq62LQ8mos7hCBmykUhqvUq2Y;->run(Landroid/os/IInterface;)V
 PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$UaZoW5Y9AD8L3ktnyw-25jtnxhA;-><init>(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
 PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$UaZoW5Y9AD8L3ktnyw-25jtnxhA;->run(Landroid/os/IInterface;)V
+PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$V2_zSuJJPrke_XrPl6iB-Ekw1Z4;-><init>(Landroid/app/prediction/AppPredictionSessionId;Landroid/content/pm/ParceledListSlice;Landroid/app/prediction/IPredictionCallback;)V
+PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$V2_zSuJJPrke_XrPl6iB-Ekw1Z4;->run(Landroid/os/IInterface;)V
 PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$dsYLGE9YRnrxNNkC1jG8ymCUr5Q;-><init>(Landroid/app/prediction/AppPredictionSessionId;)V
 PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$dsYLGE9YRnrxNNkC1jG8ymCUr5Q;->run(Landroid/os/IInterface;)V
 PLcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$qroIh2ewx0BLP-J9XIAX2CaX8J4;-><init>(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;)V
@@ -5327,169 +8575,360 @@
 HSPLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;-><init>(Lcom/android/server/appprediction/AppPredictionManagerService;)V
 HSPLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;-><init>(Lcom/android/server/appprediction/AppPredictionManagerService;Lcom/android/server/appprediction/AppPredictionManagerService$1;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->createPredictionSession(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;)V
+PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$createPredictionSession$0(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
+PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$notifyAppTargetEvent$1(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
+PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$notifyLaunchLocationShown$2(Landroid/app/prediction/AppPredictionSessionId;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$onDestroyPredictionSession$7(Landroid/app/prediction/AppPredictionSessionId;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
+PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$registerPredictionUpdates$4(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
+PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$requestPredictionUpdate$6(Landroid/app/prediction/AppPredictionSessionId;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
+PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$sortAppTargets$3(Landroid/app/prediction/AppPredictionSessionId;Landroid/content/pm/ParceledListSlice;Landroid/app/prediction/IPredictionCallback;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$unregisterPredictionUpdates$5(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->notifyAppTargetEvent(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;)V
+PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->notifyLaunchLocationShown(Landroid/app/prediction/AppPredictionSessionId;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->onDestroyPredictionSession(Landroid/app/prediction/AppPredictionSessionId;)V
+PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->registerPredictionUpdates(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
-PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->requestPredictionUpdate(Landroid/app/prediction/AppPredictionSessionId;)V
-PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->runForUserLocked(Ljava/lang/String;Ljava/util/function/Consumer;)V
+HPLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->requestPredictionUpdate(Landroid/app/prediction/AppPredictionSessionId;)V
+HPLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->runForUserLocked(Ljava/lang/String;Ljava/util/function/Consumer;)V
+PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->sortAppTargets(Landroid/app/prediction/AppPredictionSessionId;Landroid/content/pm/ParceledListSlice;Landroid/app/prediction/IPredictionCallback;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->unregisterPredictionUpdates(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
 HSPLcom/android/server/appprediction/AppPredictionManagerService;-><clinit>()V
 HSPLcom/android/server/appprediction/AppPredictionManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/appprediction/AppPredictionManagerService;->access$100(Lcom/android/server/appprediction/AppPredictionManagerService;)Lcom/android/server/infra/ServiceNameResolver;
+PLcom/android/server/appprediction/AppPredictionManagerService;->access$200(Lcom/android/server/appprediction/AppPredictionManagerService;)Lcom/android/server/wm/ActivityTaskManagerInternal;
+PLcom/android/server/appprediction/AppPredictionManagerService;->access$300()Ljava/lang/String;
+PLcom/android/server/appprediction/AppPredictionManagerService;->access$400(Lcom/android/server/appprediction/AppPredictionManagerService;)Ljava/lang/Object;
+HPLcom/android/server/appprediction/AppPredictionManagerService;->access$500(Lcom/android/server/appprediction/AppPredictionManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/appprediction/AppPredictionManagerService;->enforceCallingPermissionForManagement()V
+PLcom/android/server/appprediction/AppPredictionManagerService;->getMaximumTemporaryServiceDurationMs()I
 PLcom/android/server/appprediction/AppPredictionManagerService;->newServiceLocked(IZ)Lcom/android/server/appprediction/AppPredictionPerUserService;
 PLcom/android/server/appprediction/AppPredictionManagerService;->newServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/appprediction/AppPredictionManagerService;->onServicePackageRestartedLocked(I)V
 PLcom/android/server/appprediction/AppPredictionManagerService;->onServicePackageUpdatedLocked(I)V
 HSPLcom/android/server/appprediction/AppPredictionManagerService;->onStart()V
+PLcom/android/server/appprediction/AppPredictionManagerServiceShellCommand;-><clinit>()V
+PLcom/android/server/appprediction/AppPredictionManagerServiceShellCommand;-><init>(Lcom/android/server/appprediction/AppPredictionManagerService;)V
+PLcom/android/server/appprediction/AppPredictionManagerServiceShellCommand;->onCommand(Ljava/lang/String;)I
 PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo$1;-><init>(Lcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo$1;->onCallbackDied(Landroid/app/prediction/IPredictionCallback;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo$1;->onCallbackDied(Landroid/os/IInterface;)V
+PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;-><init>(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppPredictionContext;Landroid/content/ComponentName;Ljava/util/function/Consumer;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;-><init>(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppPredictionContext;Ljava/util/function/Consumer;)V
+PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;->access$000(Lcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;)Landroid/content/ComponentName;
 PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;->access$000(Lcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;)Landroid/os/RemoteCallbackList;
+PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;->access$100(Lcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;)Landroid/os/RemoteCallbackList;
 PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;->addCallbackLocked(Landroid/app/prediction/IPredictionCallback;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;->destroy()V
+PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;->lambda$resurrectSessionLocked$0$AppPredictionPerUserService$AppPredictionSessionInfo(Lcom/android/server/appprediction/AppPredictionPerUserService;Landroid/app/prediction/IPredictionCallback;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;->removeCallbackLocked(Landroid/app/prediction/IPredictionCallback;)V
+PLcom/android/server/appprediction/AppPredictionPerUserService$AppPredictionSessionInfo;->resurrectSessionLocked(Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;-><clinit>()V
 PLcom/android/server/appprediction/AppPredictionPerUserService;-><init>(Lcom/android/server/appprediction/AppPredictionManagerService;Ljava/lang/Object;I)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->destroyAndRebindRemoteService()V
-PLcom/android/server/appprediction/AppPredictionPerUserService;->getRemoteServiceLocked()Lcom/android/server/appprediction/RemoteAppPredictionService;
+HPLcom/android/server/appprediction/AppPredictionPerUserService;->getComponentName(Landroid/app/prediction/AppPredictionSessionId;)Landroid/content/ComponentName;
+HPLcom/android/server/appprediction/AppPredictionPerUserService;->getRemoteServiceLocked()Lcom/android/server/appprediction/RemoteAppPredictionService;
+HPLcom/android/server/appprediction/AppPredictionPerUserService;->getRemoteServiceLocked(Landroid/content/ComponentName;)Lcom/android/server/appprediction/RemoteAppPredictionService;
 PLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$ot809pjFOVEJ6shAJalMZ9_QhCo(Lcom/android/server/appprediction/AppPredictionPerUserService;Landroid/app/prediction/AppPredictionSessionId;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->newServiceInfoLocked(Landroid/content/ComponentName;)Landroid/content/pm/ServiceInfo;
 PLcom/android/server/appprediction/AppPredictionPerUserService;->notifyAppTargetEventLocked(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;)V
+PLcom/android/server/appprediction/AppPredictionPerUserService;->notifyLaunchLocationShownLocked(Landroid/app/prediction/AppPredictionSessionId;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->onConnectedStateChanged(Z)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->onCreatePredictionSessionLocked(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->onDestroyPredictionSessionLocked(Landroid/app/prediction/AppPredictionSessionId;)V
+PLcom/android/server/appprediction/AppPredictionPerUserService;->onPackageRestartedLocked()V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->onPackageUpdatedLocked()V
+PLcom/android/server/appprediction/AppPredictionPerUserService;->onServiceDied(Lcom/android/server/appprediction/RemoteAppPredictionService;)V
+PLcom/android/server/appprediction/AppPredictionPerUserService;->onServiceDied(Ljava/lang/Object;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->registerPredictionUpdatesLocked(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->removeAppPredictionSessionInfo(Landroid/app/prediction/AppPredictionSessionId;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->requestPredictionUpdateLocked(Landroid/app/prediction/AppPredictionSessionId;)V
+PLcom/android/server/appprediction/AppPredictionPerUserService;->resolveComponentName(Landroid/app/prediction/AppPredictionContext;)Landroid/content/ComponentName;
+PLcom/android/server/appprediction/AppPredictionPerUserService;->resurrectSessionsLocked()V
+PLcom/android/server/appprediction/AppPredictionPerUserService;->sortAppTargetsLocked(Landroid/app/prediction/AppPredictionSessionId;Landroid/content/pm/ParceledListSlice;Landroid/app/prediction/IPredictionCallback;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->unregisterPredictionUpdatesLocked(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->updateLocked(Z)Z
 PLcom/android/server/appprediction/RemoteAppPredictionService;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/content/ComponentName;ILcom/android/server/appprediction/RemoteAppPredictionService$RemoteAppPredictionServiceCallbacks;ZZ)V
 PLcom/android/server/appprediction/RemoteAppPredictionService;->getServiceInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
 PLcom/android/server/appprediction/RemoteAppPredictionService;->getServiceInterface(Landroid/os/IBinder;)Landroid/service/appprediction/IPredictionService;
-PLcom/android/server/appprediction/RemoteAppPredictionService;->getTimeoutIdleBindMillis()J
+HPLcom/android/server/appprediction/RemoteAppPredictionService;->getTimeoutIdleBindMillis()J
 PLcom/android/server/appprediction/RemoteAppPredictionService;->handleOnConnectedStateChanged(Z)V
 PLcom/android/server/appprediction/RemoteAppPredictionService;->lambda$notifyAppTargetEvent$1(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;Landroid/service/appprediction/IPredictionService;)V
+PLcom/android/server/appprediction/RemoteAppPredictionService;->lambda$notifyLaunchLocationShown$2(Landroid/app/prediction/AppPredictionSessionId;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;Landroid/service/appprediction/IPredictionService;)V
 PLcom/android/server/appprediction/RemoteAppPredictionService;->lambda$onCreatePredictionSession$0(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;Landroid/service/appprediction/IPredictionService;)V
 PLcom/android/server/appprediction/RemoteAppPredictionService;->lambda$onDestroyPredictionSession$7(Landroid/app/prediction/AppPredictionSessionId;Landroid/service/appprediction/IPredictionService;)V
 PLcom/android/server/appprediction/RemoteAppPredictionService;->lambda$registerPredictionUpdates$4(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;Landroid/service/appprediction/IPredictionService;)V
 PLcom/android/server/appprediction/RemoteAppPredictionService;->lambda$requestPredictionUpdate$6(Landroid/app/prediction/AppPredictionSessionId;Landroid/service/appprediction/IPredictionService;)V
+PLcom/android/server/appprediction/RemoteAppPredictionService;->lambda$sortAppTargets$3(Landroid/app/prediction/AppPredictionSessionId;Landroid/content/pm/ParceledListSlice;Landroid/app/prediction/IPredictionCallback;Landroid/service/appprediction/IPredictionService;)V
 PLcom/android/server/appprediction/RemoteAppPredictionService;->lambda$unregisterPredictionUpdates$5(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;Landroid/service/appprediction/IPredictionService;)V
 PLcom/android/server/appprediction/RemoteAppPredictionService;->notifyAppTargetEvent(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;)V
+PLcom/android/server/appprediction/RemoteAppPredictionService;->notifyLaunchLocationShown(Landroid/app/prediction/AppPredictionSessionId;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
 PLcom/android/server/appprediction/RemoteAppPredictionService;->onCreatePredictionSession(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;)V
 PLcom/android/server/appprediction/RemoteAppPredictionService;->onDestroyPredictionSession(Landroid/app/prediction/AppPredictionSessionId;)V
+PLcom/android/server/appprediction/RemoteAppPredictionService;->reconnect()V
 PLcom/android/server/appprediction/RemoteAppPredictionService;->registerPredictionUpdates(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
-PLcom/android/server/appprediction/RemoteAppPredictionService;->requestPredictionUpdate(Landroid/app/prediction/AppPredictionSessionId;)V
+HPLcom/android/server/appprediction/RemoteAppPredictionService;->requestPredictionUpdate(Landroid/app/prediction/AppPredictionSessionId;)V
+PLcom/android/server/appprediction/RemoteAppPredictionService;->sortAppTargets(Landroid/app/prediction/AppPredictionSessionId;Landroid/content/pm/ParceledListSlice;Landroid/app/prediction/IPredictionCallback;)V
 PLcom/android/server/appprediction/RemoteAppPredictionService;->unregisterPredictionUpdates(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
+PLcom/android/server/appwidget/-$$Lambda$AppWidgetServiceImpl$7z3EwuT55saMxTVomcNfb1VOVL0;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;JLandroid/app/PendingIntent;)V
+PLcom/android/server/appwidget/-$$Lambda$AppWidgetServiceImpl$7z3EwuT55saMxTVomcNfb1VOVL0;->run()V
+PLcom/android/server/appwidget/-$$Lambda$AppWidgetServiceImpl$TEG8Dmf_tnBoLQ8rTg9_1sFaVu8;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;Landroid/app/PendingIntent;)V
+PLcom/android/server/appwidget/-$$Lambda$AppWidgetServiceImpl$TEG8Dmf_tnBoLQ8rTg9_1sFaVu8;->run()V
 HSPLcom/android/server/appwidget/AppWidgetService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/appwidget/AppWidgetService;->onBootPhase(I)V
 HSPLcom/android/server/appwidget/AppWidgetService;->onStart()V
+PLcom/android/server/appwidget/AppWidgetService;->onStopUser(I)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl$1;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/appwidget/AppWidgetServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$2;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;Landroid/content/Intent;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl$AppWidgetManagerLocal;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl$AppWidgetManagerLocal;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl$1;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$AppWidgetManagerLocal;->getHostedWidgetPackages(I)Landroid/util/ArraySet;
 PLcom/android/server/appwidget/AppWidgetServiceImpl$AppWidgetManagerLocal;->unlockUser(I)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl$1;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->getWidgetState(Ljava/lang/String;I)[B
-PLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->packageNeedsWidgetBackupLocked(Ljava/lang/String;I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->getWidgetState(Ljava/lang/String;I)[B
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->isProviderAndHostInUser(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->packageNeedsWidgetBackupLocked(Ljava/lang/String;I)Z
 PLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->restoreFinished(I)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl$CallbackHandler;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;Landroid/os/Looper;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl$CallbackHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl$Host;-><init>()V
-PLcom/android/server/appwidget/AppWidgetServiceImpl$Host;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl$1;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl$Host;->getUserId()I
-PLcom/android/server/appwidget/AppWidgetServiceImpl$HostId;-><init>(IILjava/lang/String;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl$HostId;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$CallbackHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$Host;-><init>()V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$Host;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl$1;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Host;->access$3600(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Ljava/lang/String;I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$Host;->getPendingUpdatesForId(ILandroid/util/LongSparseArray;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$Host;->getUserId()I
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$Host;->getWidgetUids()Landroid/util/SparseArray;
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Host;->hostsPackageForUser(Ljava/lang/String;I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$Host;->isInPackageForUser(Ljava/lang/String;I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$HostId;-><init>(IILjava/lang/String;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$HostId;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$HostId;->toString()Ljava/lang/String;
+PLcom/android/server/appwidget/AppWidgetServiceImpl$LoadedWidgetState;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;II)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;-><init>()V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl$1;)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;->getUserId()I
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;->hostedByPackageForUser(Ljava/lang/String;I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;->isInPackageForUser(Ljava/lang/String;I)Z
 PLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;->isMaskedLocked()Z
 PLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;->setMaskedByLockedProfileLocked(Z)Z
 PLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;->setMaskedByQuietProfileLocked(Z)Z
 PLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;->setMaskedBySuspendedPackageLocked(Z)Z
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;->shouldBePersisted()Z
-PLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;-><init>(ILandroid/content/ComponentName;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;-><init>(ILandroid/content/ComponentName;)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;-><init>(ILandroid/content/ComponentName;Lcom/android/server/appwidget/AppWidgetServiceImpl$1;)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;->equals(Ljava/lang/Object;)Z
-PLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;->hashCode()I
-PLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;->toString()Ljava/lang/String;
-PLcom/android/server/appwidget/AppWidgetServiceImpl$SaveStateRunnable;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;I)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl$SaveStateRunnable;->run()V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;->hashCode()I
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;->toString()Ljava/lang/String;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SaveStateRunnable;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;I)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SaveStateRunnable;->run()V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl$1;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->enforceCallFromPackage(Ljava/lang/String;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->getEnabledGroupProfileIds(I)[I
-PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->getGroupParent(I)I
-PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->getProfileParent(I)I
-PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isCallerInstantAppLocked()Z
-PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isInstantAppLocked(Ljava/lang/String;I)Z
-PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isProfileEnabled(I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->canAccessAppWidget(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;ILjava/lang/String;)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->enforceCallFromPackage(Ljava/lang/String;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->enforceModifyAppWidgetBindPermissions(Ljava/lang/String;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->enforceServiceExistsAndRequiresBindRemoteViewsPermission(Landroid/content/ComponentName;I)V
+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
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->hasCallerBindPermissionOrBindWhiteListedLocked(Ljava/lang/String;)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isCallerInstantAppLocked()Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isEnabledGroupProfile(I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isHostAccessingProvider(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;ILjava/lang/String;)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isHostInPackageForUid(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;ILjava/lang/String;)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isInstantAppLocked(Ljava/lang/String;I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isParentOrProfile(II)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isProfileEnabled(I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isProviderInCallerOrInProfileAndWhitelListed(Ljava/lang/String;I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isProviderInPackageForUid(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;ILjava/lang/String;)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isProviderWhiteListed(Ljava/lang/String;I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Widget;-><init>()V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Widget;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl$1;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Widget;->access$1000(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Widget;->access$900(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;Landroid/widget/RemoteViews;)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Widget;->clearMaskedViewsLocked()Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$Widget;->getEffectiveViewsLocked()Landroid/widget/RemoteViews;
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Widget;->replaceWithMaskedViewsLocked(Landroid/widget/RemoteViews;)Z
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;-><clinit>()V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;-><init>(Landroid/content/Context;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$000()Z
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$100(Lcom/android/server/appwidget/AppWidgetServiceImpl;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$2100(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Landroid/os/UserManager;
+HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->access$000()Z
+HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->access$100(Lcom/android/server/appwidget/AppWidgetServiceImpl;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$1400(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Landroid/content/Context;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$1600(Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;ILandroid/widget/RemoteViews;J)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$1700(Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;ILandroid/appwidget/AppWidgetProviderInfo;J)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$1800(Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;IJ)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$1900(Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->access$200(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Ljava/lang/Object;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$2000(Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;IIJ)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->access$2100(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Landroid/os/UserManager;
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$2200(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Landroid/content/pm/IPackageManager;
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$2300(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Landroid/app/AppOpsManager;
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$2800(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->addProviderLocked(Landroid/content/pm/ResolveInfo;)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$2700(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Landroid/app/admin/DevicePolicyManagerInternal;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->access$2800(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$2900(Landroid/widget/RemoteViews;)Landroid/widget/RemoteViews;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$300(Lcom/android/server/appwidget/AppWidgetServiceImpl;I)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->access$3000(Lcom/android/server/appwidget/AppWidgetServiceImpl;IZ)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->access$3100(Lcom/android/server/appwidget/AppWidgetServiceImpl;I)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->access$3200(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Ljava/util/ArrayList;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$3300(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Ljava/util/ArrayList;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$3400(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$3500(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Ljava/util/ArrayList;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$3700(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$3800(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->access$400(Lcom/android/server/appwidget/AppWidgetServiceImpl;Landroid/content/Intent;I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->access$500(Lcom/android/server/appwidget/AppWidgetServiceImpl;Landroid/content/Intent;ZI)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->addProviderLocked(Landroid/content/pm/ResolveInfo;)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->addWidgetLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->allocateAppWidgetId(Ljava/lang/String;I)I
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->bindAppWidgetId(Ljava/lang/String;IILandroid/content/ComponentName;Landroid/os/Bundle;)Z
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->bindLoadedWidgetsLocked(Ljava/util/List;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->bindRemoteViewsService(Ljava/lang/String;ILandroid/content/Intent;Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/IServiceConnection;I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->cancelBroadcastsLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;)V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->clearProvidersAndHostsTagsLocked()V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->cloneIfLocalBinder(Landroid/appwidget/AppWidgetProviderInfo;)Landroid/appwidget/AppWidgetProviderInfo;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->cloneIfLocalBinder(Landroid/os/Bundle;)Landroid/os/Bundle;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->cloneIfLocalBinder(Landroid/widget/RemoteViews;)Landroid/widget/RemoteViews;
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->computeMaximumWidgetBitmapMemory()V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->createAppWidgetConfigIntentSender(Ljava/lang/String;II)Landroid/content/IntentSender;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->createMaskedWidgetBitmap(Ljava/lang/String;I)Landroid/graphics/Bitmap;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->createMaskedWidgetRemoteViews(Landroid/graphics/Bitmap;ZLandroid/app/PendingIntent;)Landroid/widget/RemoteViews;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->decrementAppWidgetServiceRefCount(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->deleteAppWidgetId(Ljava/lang/String;I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->deleteAppWidgetLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->deleteHost(Ljava/lang/String;I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->deleteHostLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->deleteProviderLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->deleteWidgetsLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->destroyRemoteViewsService(Landroid/content/Intent;Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->dumpInternal(Ljava/io/PrintWriter;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->dumpProvider(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;ILjava/io/PrintWriter;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->ensureGroupStateLoadedLocked(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->dumpHost(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;ILjava/io/PrintWriter;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->dumpInternal(Ljava/io/PrintWriter;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->dumpProvider(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;ILjava/io/PrintWriter;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->dumpWidget(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;ILjava/io/PrintWriter;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->ensureGroupStateLoadedLocked(I)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->ensureGroupStateLoadedLocked(IZ)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->findHostByTag(I)Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->findProviderByTag(I)Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getAppWidgetIds(Landroid/content/ComponentName;)[I
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->getInstalledProvidersForProfile(IILjava/lang/String;)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->getSavedStateFile(I)Landroid/util/AtomicFile;
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->getStateFile(I)Ljava/io/File;
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->getUidForPackage(Ljava/lang/String;I)I
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->getWidgetState(Ljava/lang/String;I)[B
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->getAppWidgetIdsForHost(Ljava/lang/String;I)[I
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getAppWidgetInfo(Ljava/lang/String;I)Landroid/appwidget/AppWidgetProviderInfo;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getAppWidgetOptions(Ljava/lang/String;I)Landroid/os/Bundle;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getAppWidgetViews(Ljava/lang/String;I)Landroid/widget/RemoteViews;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->getCanonicalPackageName(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getInstalledProvidersForProfile(IILjava/lang/String;)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->getProviderInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getSavedStateFile(I)Landroid/util/AtomicFile;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getStateFile(I)Ljava/io/File;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getUidForPackage(Ljava/lang/String;I)I
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getWidgetIds(Ljava/util/ArrayList;)[I
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getWidgetState(Ljava/lang/String;I)[B
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->handleNotifyAppWidgetRemoved(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;IJ)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->handleNotifyAppWidgetViewDataChanged(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;IIJ)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->handleNotifyProviderChanged(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;ILandroid/appwidget/AppWidgetProviderInfo;J)V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->handleNotifyProvidersChanged(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->handleUserUnlocked(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->handleNotifyUpdateAppWidget(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;ILandroid/widget/RemoteViews;J)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->handleUserUnlocked(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->hasBindAppWidgetPermission(Ljava/lang/String;I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->incrementAndGetAppWidgetIdLocked(I)I
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->incrementAppWidgetServiceRefCount(ILandroid/util/Pair;)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->isBoundWidgetPackage(Ljava/lang/String;I)Z
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->isProfileWithLockedParent(I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->isLocalBinder()Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->isProfileWithLockedParent(I)Z
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->isProfileWithUnlockedParent(I)Z
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->isUserRunningAndUnlocked(I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->isRequestPinAppWidgetSupported()Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->isUserRunningAndUnlocked(I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->lambda$cancelBroadcastsLocked$0$AppWidgetServiceImpl(Landroid/app/PendingIntent;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->lambda$registerForBroadcastsLocked$1$AppWidgetServiceImpl(JLandroid/app/PendingIntent;)V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->loadGroupStateLocked([I)V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->loadGroupWidgetProvidersLocked([I)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->lookupHostLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$HostId;)Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->lookupOrAddHostLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$HostId;)Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->lookupHostLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$HostId;)Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->lookupOrAddHostLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$HostId;)Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->lookupProviderLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;)Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->lookupWidgetLocked(IILjava/lang/String;)Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->maskWidgetsViewsLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->onConfigurationChanged()V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->notifyAppWidgetViewDataChanged(Ljava/lang/String;[II)V
+HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->onConfigurationChanged()V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->onCrossProfileWidgetProvidersChanged(ILjava/util/List;)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->onPackageBroadcastReceived(Landroid/content/Intent;I)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->onPackageBroadcastReceived(Landroid/content/Intent;I)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->onStart()V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->parseAppWidgetProviderInfo(Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;Landroid/content/pm/ActivityInfo;Ljava/lang/String;)Landroid/appwidget/AppWidgetProviderInfo;
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->parseProviderInfoXml(Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;Landroid/content/pm/ResolveInfo;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;)Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->onUserStopped(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->onWidgetProviderAddedOrChangedLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->onWidgetRemovedLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->parseAppWidgetProviderInfo(Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;Landroid/content/pm/ActivityInfo;Ljava/lang/String;)Landroid/appwidget/AppWidgetProviderInfo;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->parseProviderInfoXml(Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;Landroid/content/pm/ResolveInfo;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;)Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->partiallyUpdateAppWidgetIds(Ljava/lang/String;[ILandroid/widget/RemoteViews;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->peekNextAppWidgetIdLocked(I)I
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->performUpgradeLocked(I)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->pruneHostLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->pruneHostLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->queryIntentReceivers(Landroid/content/Intent;I)Ljava/util/List;
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->readProfileStateFromFileLocked(Ljava/io/FileInputStream;ILjava/util/List;)I
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->registerBroadcastReceiver()V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->registerForBroadcastsLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;[I)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->registerOnCrossProfileProvidersChangedListener()V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->reloadWidgetsMaskedState(I)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->reloadWidgetsMaskedState(I)V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->reloadWidgetsMaskedStateForGroup(I)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->removeHostsAndProvidersForPackageLocked(Ljava/lang/String;I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->removeProvidersForPackageLocked(Ljava/lang/String;I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->removeWidgetLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->removeWidgetsForPackageLocked(Ljava/lang/String;II)V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->resolveHostUidLocked(Ljava/lang/String;I)V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->restoreFinished(I)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->saveStateLocked(I)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->scheduleNotifyGroupHostsForProvidersChangedLocked(I)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->serializeHost(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->saveGroupStateAsync(I)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->saveStateLocked(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->scheduleNotifyAppWidgetRemovedLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->scheduleNotifyAppWidgetViewDataChanged(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;I)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->scheduleNotifyGroupHostsForProvidersChangedLocked(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->scheduleNotifyProviderChangedLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->scheduleNotifyUpdateAppWidgetLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;Landroid/widget/RemoteViews;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->sendDeletedIntentLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->sendDisabledIntentLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->sendEnableIntentLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->sendOptionsChangedIntentLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->sendUpdateIntentLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;[I)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->serializeAppWidget(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->serializeHost(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->serializeProvider(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->setMinAppWidgetIdLocked(II)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->setSafeMode(Z)V
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->startListening(Lcom/android/internal/appwidget/IAppWidgetHost;Ljava/lang/String;I[I)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->stopListening(Ljava/lang/String;I)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->startListening(Lcom/android/internal/appwidget/IAppWidgetHost;Ljava/lang/String;I[I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->stopListening(Ljava/lang/String;I)V
+HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->systemServicesReady()V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->tagProvidersAndHosts()V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->unmaskWidgetsViewsLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->updateAppOpsLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Z)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->updateAppWidgetIds(Ljava/lang/String;[ILandroid/widget/RemoteViews;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->updateAppWidgetIds(Ljava/lang/String;[ILandroid/widget/RemoteViews;Z)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->updateAppWidgetInstanceLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;Landroid/widget/RemoteViews;Z)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->updateAppWidgetOptions(Ljava/lang/String;ILandroid/os/Bundle;)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->updateAppWidgetProvider(Landroid/content/ComponentName;Landroid/widget/RemoteViews;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->updateAppWidgetProviderInfo(Landroid/content/ComponentName;Ljava/lang/String;)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->updateProvidersForPackageLocked(Ljava/lang/String;ILjava/util/Set;)Z
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->updateWidgetPackageSuspensionMaskedState(Landroid/content/Intent;ZI)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->writeProfileStateToFileLocked(Ljava/io/FileOutputStream;I)Z
+PLcom/android/server/attention/-$$Lambda$AttentionManagerService$2UthIuCIdjigpPv1U5Dxw_fo4nY;-><init>(Lcom/android/server/attention/AttentionManagerService;Lcom/android/server/attention/AttentionManagerService$UserState;)V
+PLcom/android/server/attention/-$$Lambda$AttentionManagerService$2UthIuCIdjigpPv1U5Dxw_fo4nY;->run()V
+PLcom/android/server/attention/-$$Lambda$AttentionManagerService$UserState$2cc0P7pJchsigKpbEq7IoxYFsSM;-><init>(Lcom/android/server/attention/AttentionManagerService$UserState;)V
+PLcom/android/server/attention/-$$Lambda$AttentionManagerService$UserState$2cc0P7pJchsigKpbEq7IoxYFsSM;->run()V
+PLcom/android/server/attention/AttentionManagerService$1;-><init>(Lcom/android/server/attention/AttentionManagerService;Lcom/android/server/attention/AttentionManagerService$UserState;Landroid/attention/AttentionManagerInternal$AttentionCallbackInternal;)V
+PLcom/android/server/attention/AttentionManagerService$1;->onFailure(I)V
+PLcom/android/server/attention/AttentionManagerService$1;->onSuccess(IJ)V
+PLcom/android/server/attention/AttentionManagerService$AttentionCheck;-><init>(Landroid/attention/AttentionManagerInternal$AttentionCallbackInternal;Landroid/service/attention/IAttentionCallback;)V
+PLcom/android/server/attention/AttentionManagerService$AttentionCheck;->access$1100(Lcom/android/server/attention/AttentionManagerService$AttentionCheck;)Landroid/attention/AttentionManagerInternal$AttentionCallbackInternal;
+PLcom/android/server/attention/AttentionManagerService$AttentionCheck;->access$700(Lcom/android/server/attention/AttentionManagerService$AttentionCheck;)Z
+PLcom/android/server/attention/AttentionManagerService$AttentionCheck;->access$702(Lcom/android/server/attention/AttentionManagerService$AttentionCheck;Z)Z
+PLcom/android/server/attention/AttentionManagerService$AttentionCheck;->access$800(Lcom/android/server/attention/AttentionManagerService$AttentionCheck;)Z
+PLcom/android/server/attention/AttentionManagerService$AttentionCheck;->access$802(Lcom/android/server/attention/AttentionManagerService$AttentionCheck;Z)Z
+PLcom/android/server/attention/AttentionManagerService$AttentionCheck;->access$900(Lcom/android/server/attention/AttentionManagerService$AttentionCheck;)Landroid/service/attention/IAttentionCallback;
+PLcom/android/server/attention/AttentionManagerService$AttentionCheckCache;-><init>(JIJ)V
+PLcom/android/server/attention/AttentionManagerService$AttentionCheckCache;->access$400(Lcom/android/server/attention/AttentionManagerService$AttentionCheckCache;)J
+PLcom/android/server/attention/AttentionManagerService$AttentionCheckCache;->access$500(Lcom/android/server/attention/AttentionManagerService$AttentionCheckCache;)I
+PLcom/android/server/attention/AttentionManagerService$AttentionCheckCache;->access$600(Lcom/android/server/attention/AttentionManagerService$AttentionCheckCache;)J
+PLcom/android/server/attention/AttentionManagerService$AttentionCheckCacheBuffer;-><init>()V
+PLcom/android/server/attention/AttentionManagerService$AttentionCheckCacheBuffer;->add(Lcom/android/server/attention/AttentionManagerService$AttentionCheckCache;)V
+PLcom/android/server/attention/AttentionManagerService$AttentionCheckCacheBuffer;->getLast()Lcom/android/server/attention/AttentionManagerService$AttentionCheckCache;
 HSPLcom/android/server/attention/AttentionManagerService$AttentionHandler;-><init>(Lcom/android/server/attention/AttentionManagerService;)V
+PLcom/android/server/attention/AttentionManagerService$AttentionHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/attention/AttentionManagerService$AttentionManagerServiceShellCommand$TestableAttentionCallbackInternal;-><init>(Lcom/android/server/attention/AttentionManagerService$AttentionManagerServiceShellCommand;)V
 HSPLcom/android/server/attention/AttentionManagerService$AttentionManagerServiceShellCommand;-><init>(Lcom/android/server/attention/AttentionManagerService;)V
 HSPLcom/android/server/attention/AttentionManagerService$AttentionManagerServiceShellCommand;-><init>(Lcom/android/server/attention/AttentionManagerService;Lcom/android/server/attention/AttentionManagerService$1;)V
@@ -5498,29 +8937,59 @@
 PLcom/android/server/attention/AttentionManagerService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/attention/AttentionManagerService$LocalService;-><init>(Lcom/android/server/attention/AttentionManagerService;)V
 HSPLcom/android/server/attention/AttentionManagerService$LocalService;-><init>(Lcom/android/server/attention/AttentionManagerService;Lcom/android/server/attention/AttentionManagerService$1;)V
-PLcom/android/server/attention/AttentionManagerService$LocalService;->isAttentionServiceSupported()Z
+PLcom/android/server/attention/AttentionManagerService$LocalService;->cancelAttentionCheck(Landroid/attention/AttentionManagerInternal$AttentionCallbackInternal;)V
+PLcom/android/server/attention/AttentionManagerService$LocalService;->checkAttention(JLandroid/attention/AttentionManagerInternal$AttentionCallbackInternal;)Z
+HPLcom/android/server/attention/AttentionManagerService$LocalService;->isAttentionServiceSupported()Z
 HSPLcom/android/server/attention/AttentionManagerService$ScreenStateReceiver;-><init>(Lcom/android/server/attention/AttentionManagerService;)V
 HSPLcom/android/server/attention/AttentionManagerService$ScreenStateReceiver;-><init>(Lcom/android/server/attention/AttentionManagerService;Lcom/android/server/attention/AttentionManagerService$1;)V
 HPLcom/android/server/attention/AttentionManagerService$ScreenStateReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/attention/AttentionManagerService$UserState$AttentionServiceConnection;-><init>(Lcom/android/server/attention/AttentionManagerService$UserState;)V
+PLcom/android/server/attention/AttentionManagerService$UserState$AttentionServiceConnection;-><init>(Lcom/android/server/attention/AttentionManagerService$UserState;Lcom/android/server/attention/AttentionManagerService$1;)V
+PLcom/android/server/attention/AttentionManagerService$UserState$AttentionServiceConnection;->cleanupService()V
+PLcom/android/server/attention/AttentionManagerService$UserState$AttentionServiceConnection;->init(Landroid/service/attention/IAttentionService;)V
+PLcom/android/server/attention/AttentionManagerService$UserState$AttentionServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/attention/AttentionManagerService$UserState;-><init>(ILandroid/content/Context;Ljava/lang/Object;Landroid/os/Handler;Landroid/content/ComponentName;)V
+PLcom/android/server/attention/AttentionManagerService$UserState;->access$1600(Lcom/android/server/attention/AttentionManagerService$UserState;)Ljava/lang/Object;
+PLcom/android/server/attention/AttentionManagerService$UserState;->access$1702(Lcom/android/server/attention/AttentionManagerService$UserState;Z)Z
+PLcom/android/server/attention/AttentionManagerService$UserState;->access$1800(Lcom/android/server/attention/AttentionManagerService$UserState;)V
+PLcom/android/server/attention/AttentionManagerService$UserState;->access$2100(Lcom/android/server/attention/AttentionManagerService$UserState;)Lcom/android/server/attention/AttentionManagerService$UserState$AttentionServiceConnection;
+PLcom/android/server/attention/AttentionManagerService$UserState;->access$2200(Lcom/android/server/attention/AttentionManagerService$UserState;)I
+PLcom/android/server/attention/AttentionManagerService$UserState;->access$300(Lcom/android/server/attention/AttentionManagerService$UserState;)V
+PLcom/android/server/attention/AttentionManagerService$UserState;->bindLocked()V
+PLcom/android/server/attention/AttentionManagerService$UserState;->handlePendingCallbackLocked()V
+PLcom/android/server/attention/AttentionManagerService$UserState;->lambda$bindLocked$0$AttentionManagerService$UserState()V
 HSPLcom/android/server/attention/AttentionManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/attention/AttentionManagerService;-><init>(Landroid/content/Context;Landroid/os/PowerManager;Ljava/lang/Object;Lcom/android/server/attention/AttentionManagerService$AttentionHandler;)V
+PLcom/android/server/attention/AttentionManagerService;->access$1000(Lcom/android/server/attention/AttentionManagerService;)Ljava/lang/Object;
 PLcom/android/server/attention/AttentionManagerService;->access$1300(Lcom/android/server/attention/AttentionManagerService;)Z
+PLcom/android/server/attention/AttentionManagerService;->access$1900(Lcom/android/server/attention/AttentionManagerService;)Landroid/util/SparseArray;
 PLcom/android/server/attention/AttentionManagerService;->access$2000(Lcom/android/server/attention/AttentionManagerService;Lcom/android/server/attention/AttentionManagerService$UserState;)V
 PLcom/android/server/attention/AttentionManagerService;->access$2400(Lcom/android/server/attention/AttentionManagerService;)Landroid/content/Context;
 PLcom/android/server/attention/AttentionManagerService;->access$2700(Lcom/android/server/attention/AttentionManagerService;Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/attention/AttentionManagerService;->cancel(Lcom/android/server/attention/AttentionManagerService$UserState;)V
+PLcom/android/server/attention/AttentionManagerService;->cancelAfterTimeoutLocked(J)V
 PLcom/android/server/attention/AttentionManagerService;->cancelAndUnbindLocked(Lcom/android/server/attention/AttentionManagerService$UserState;)V
+PLcom/android/server/attention/AttentionManagerService;->cancelAttentionCheck(Landroid/attention/AttentionManagerInternal$AttentionCallbackInternal;)V
+PLcom/android/server/attention/AttentionManagerService;->checkAttention(JLandroid/attention/AttentionManagerInternal$AttentionCallbackInternal;)Z
+PLcom/android/server/attention/AttentionManagerService;->createAttentionCheck(Landroid/attention/AttentionManagerInternal$AttentionCallbackInternal;Lcom/android/server/attention/AttentionManagerService$UserState;)Lcom/android/server/attention/AttentionManagerService$AttentionCheck;
 PLcom/android/server/attention/AttentionManagerService;->dumpInternal(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/attention/AttentionManagerService;->freeIfInactiveLocked()V
+PLcom/android/server/attention/AttentionManagerService;->getOrCreateCurrentUserStateLocked()Lcom/android/server/attention/AttentionManagerService$UserState;
+PLcom/android/server/attention/AttentionManagerService;->getOrCreateUserStateLocked(I)Lcom/android/server/attention/AttentionManagerService$UserState;
 HSPLcom/android/server/attention/AttentionManagerService;->getServiceConfigPackage(Landroid/content/Context;)Ljava/lang/String;
-PLcom/android/server/attention/AttentionManagerService;->isAttentionServiceSupported()Z
+PLcom/android/server/attention/AttentionManagerService;->getStaleAfterMillis()J
+HPLcom/android/server/attention/AttentionManagerService;->isAttentionServiceSupported()Z
 PLcom/android/server/attention/AttentionManagerService;->isServiceAvailable()Z
 HSPLcom/android/server/attention/AttentionManagerService;->isServiceConfigured(Landroid/content/Context;)Z
-PLcom/android/server/attention/AttentionManagerService;->isServiceEnabled()Z
+HPLcom/android/server/attention/AttentionManagerService;->isServiceEnabled()Z
+PLcom/android/server/attention/AttentionManagerService;->lambda$cancelAndUnbindLocked$0$AttentionManagerService(Lcom/android/server/attention/AttentionManagerService$UserState;)V
 HSPLcom/android/server/attention/AttentionManagerService;->onBootPhase(I)V
 HSPLcom/android/server/attention/AttentionManagerService;->onStart()V
 PLcom/android/server/attention/AttentionManagerService;->peekCurrentUserStateLocked()Lcom/android/server/attention/AttentionManagerService$UserState;
-PLcom/android/server/attention/AttentionManagerService;->peekUserStateLocked(I)Lcom/android/server/attention/AttentionManagerService$UserState;
+HPLcom/android/server/attention/AttentionManagerService;->peekUserStateLocked(I)Lcom/android/server/attention/AttentionManagerService$UserState;
 PLcom/android/server/attention/AttentionManagerService;->resolveAttentionService(Landroid/content/Context;)Landroid/content/ComponentName;
 PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$2HRlO1Fuzgf97A2Y249yqOtNAlc;-><init>(Landroid/util/ArraySet;)V
+PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$2HRlO1Fuzgf97A2Y249yqOtNAlc;->accept(Ljava/lang/Object;)V
 PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$7CtpUHI2aS8Sdar40vc2ScvU1zA;-><init>(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$7CtpUHI2aS8Sdar40vc2ScvU1zA;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$A06w_GDNkrLVK3IhlqiuSJkZdos;-><init>(Lcom/android/server/audio/AudioDeviceInventory;)V
@@ -5529,10 +8998,13 @@
 PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$Jg62meZgoWI_a0zxOvpWdJWRPfI;-><init>(Lcom/android/server/audio/AudioDeviceInventory;I)V
 PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$Jg62meZgoWI_a0zxOvpWdJWRPfI;->accept(Ljava/lang/Object;)V
 PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$Kq15BolmuFXaWWabjDNQiScRxjo;-><init>(Landroid/util/ArraySet;)V
+PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$Kq15BolmuFXaWWabjDNQiScRxjo;->accept(Ljava/lang/Object;)V
 PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$Nads7_S1eD53QDofbK9CuYO9Fok;-><init>(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$OBWGV1RNEso-eo8dzWjaFhEjC0A;-><init>(Lcom/android/server/audio/AudioDeviceInventory;)V
 PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$YxgcWZ4jspoxzltUgvW9l8k40io;-><init>(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$YxgcWZ4jspoxzltUgvW9l8k40io;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$_CdHBhvBDErZWSm39GafCXJiOqQ;-><init>(Lcom/android/server/audio/AudioDeviceInventory;)V
+PLcom/android/server/audio/-$$Lambda$AudioDeviceInventory$_CdHBhvBDErZWSm39GafCXJiOqQ;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/audio/-$$Lambda$UV1wDVoVlbcxpr8zevj_aMFtUGw;-><clinit>()V
 HSPLcom/android/server/audio/-$$Lambda$UV1wDVoVlbcxpr8zevj_aMFtUGw;-><init>()V
 HSPLcom/android/server/audio/-$$Lambda$UV1wDVoVlbcxpr8zevj_aMFtUGw;->applyAsInt(Ljava/lang/Object;)I
@@ -5541,127 +9013,183 @@
 HSPLcom/android/server/audio/AudioDeviceBroker$BrokerHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/audio/AudioDeviceBroker$BrokerThread;-><init>(Lcom/android/server/audio/AudioDeviceBroker;)V
 HSPLcom/android/server/audio/AudioDeviceBroker$BrokerThread;->run()V
-PLcom/android/server/audio/AudioDeviceBroker$BtDeviceConnectionInfo;-><init>(Landroid/bluetooth/BluetoothDevice;IIZI)V
+HPLcom/android/server/audio/AudioDeviceBroker$BtDeviceConnectionInfo;-><init>(Landroid/bluetooth/BluetoothDevice;IIZI)V
 HSPLcom/android/server/audio/AudioDeviceBroker;-><clinit>()V
 HSPLcom/android/server/audio/AudioDeviceBroker;-><init>(Landroid/content/Context;Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->access$002(Lcom/android/server/audio/AudioDeviceBroker;Lcom/android/server/audio/AudioDeviceBroker$BrokerHandler;)Lcom/android/server/audio/AudioDeviceBroker$BrokerHandler;
 HSPLcom/android/server/audio/AudioDeviceBroker;->access$200(Lcom/android/server/audio/AudioDeviceBroker;)Ljava/lang/Object;
-PLcom/android/server/audio/AudioDeviceBroker;->access$300(Lcom/android/server/audio/AudioDeviceBroker;)Lcom/android/server/audio/AudioDeviceInventory;
+HPLcom/android/server/audio/AudioDeviceBroker;->access$300(Lcom/android/server/audio/AudioDeviceBroker;)Lcom/android/server/audio/AudioDeviceInventory;
 HSPLcom/android/server/audio/AudioDeviceBroker;->access$400(Lcom/android/server/audio/AudioDeviceBroker;)Lcom/android/server/audio/BtHelper;
 HSPLcom/android/server/audio/AudioDeviceBroker;->access$500(Lcom/android/server/audio/AudioDeviceBroker;IILjava/lang/String;)V
+PLcom/android/server/audio/AudioDeviceBroker;->access$700(Lcom/android/server/audio/AudioDeviceBroker;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->access$800(I)Z
-PLcom/android/server/audio/AudioDeviceBroker;->access$900(Lcom/android/server/audio/AudioDeviceBroker;)Landroid/os/PowerManager$WakeLock;
+HPLcom/android/server/audio/AudioDeviceBroker;->access$900(Lcom/android/server/audio/AudioDeviceBroker;)Landroid/os/PowerManager$WakeLock;
+PLcom/android/server/audio/AudioDeviceBroker;->checkMusicActive(ILjava/lang/String;)V
 PLcom/android/server/audio/AudioDeviceBroker;->disconnectAllBluetoothProfiles()V
 PLcom/android/server/audio/AudioDeviceBroker;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/audio/AudioDeviceBroker;->getA2dpCodec(Landroid/bluetooth/BluetoothDevice;)I
+PLcom/android/server/audio/AudioDeviceBroker;->getBluetoothA2dpEnabled()Z
+PLcom/android/server/audio/AudioDeviceBroker;->getContentResolver()Landroid/content/ContentResolver;
 HSPLcom/android/server/audio/AudioDeviceBroker;->getContext()Landroid/content/Context;
 PLcom/android/server/audio/AudioDeviceBroker;->getCurAudioRoutes()Landroid/media/AudioRoutesInfo;
+PLcom/android/server/audio/AudioDeviceBroker;->getDeviceForStream(I)I
+PLcom/android/server/audio/AudioDeviceBroker;->getModeOwnerPid()I
 PLcom/android/server/audio/AudioDeviceBroker;->handleCancelFailureToConnectToBtHeadsetService()V
-PLcom/android/server/audio/AudioDeviceBroker;->handleDeviceConnection(ZILjava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/audio/AudioDeviceBroker;->handleDeviceConnection(ZILjava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/audio/AudioDeviceBroker;->handleFailureToConnectToBtHeadsetService(I)V
+PLcom/android/server/audio/AudioDeviceBroker;->hasAudioFocusUsers()Z
+PLcom/android/server/audio/AudioDeviceBroker;->hasMediaDynamicPolicy()Z
 PLcom/android/server/audio/AudioDeviceBroker;->hasScheduledA2dpSinkConnectionState(Landroid/bluetooth/BluetoothDevice;)Z
 HSPLcom/android/server/audio/AudioDeviceBroker;->init()V
 HSPLcom/android/server/audio/AudioDeviceBroker;->isAvrcpAbsoluteVolumeSupported()Z
-PLcom/android/server/audio/AudioDeviceBroker;->isBluetoothA2dpOn()Z
+HPLcom/android/server/audio/AudioDeviceBroker;->isBluetoothA2dpOn()Z
 HSPLcom/android/server/audio/AudioDeviceBroker;->isBluetoothScoOnForApp()Z
+PLcom/android/server/audio/AudioDeviceBroker;->isInCommunication()Z
 HSPLcom/android/server/audio/AudioDeviceBroker;->isMessageHandledUnderWakelock(I)Z
-PLcom/android/server/audio/AudioDeviceBroker;->isSpeakerphoneOn()Z
+HPLcom/android/server/audio/AudioDeviceBroker;->isSpeakerphoneOn()Z
+PLcom/android/server/audio/AudioDeviceBroker;->onAudioServerDied()V
+PLcom/android/server/audio/AudioDeviceBroker;->onSendBecomingNoisyIntent()V
 HSPLcom/android/server/audio/AudioDeviceBroker;->onSetForceUse(IILjava/lang/String;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->onSystemReady()V
+PLcom/android/server/audio/AudioDeviceBroker;->postA2dpSinkConnection(ILcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;I)V
+PLcom/android/server/audio/AudioDeviceBroker;->postA2dpSourceConnection(ILcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;I)V
+PLcom/android/server/audio/AudioDeviceBroker;->postAccessoryPlugMediaUnmute(I)V
+PLcom/android/server/audio/AudioDeviceBroker;->postBluetoothA2dpDeviceConfigChange(Landroid/bluetooth/BluetoothDevice;)V
+PLcom/android/server/audio/AudioDeviceBroker;->postBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent(Landroid/bluetooth/BluetoothDevice;IIZI)V
+PLcom/android/server/audio/AudioDeviceBroker;->postBroadcastBecomingNoisy()V
 HSPLcom/android/server/audio/AudioDeviceBroker;->postBroadcastScoConnectionState(I)V
 PLcom/android/server/audio/AudioDeviceBroker;->postBtA2dpProfileConnected(Landroid/bluetooth/BluetoothA2dp;)V
 PLcom/android/server/audio/AudioDeviceBroker;->postBtHearingAidProfileConnected(Landroid/bluetooth/BluetoothHearingAid;)V
 PLcom/android/server/audio/AudioDeviceBroker;->postBtHeasetProfileConnected(Landroid/bluetooth/BluetoothHeadset;)V
-PLcom/android/server/audio/AudioDeviceBroker;->postSetAvrcpAbsoluteVolumeIndex(I)V
-PLcom/android/server/audio/AudioDeviceBroker;->receiveBtEvent(Landroid/content/Intent;)V
-PLcom/android/server/audio/AudioDeviceBroker;->sendBroadcastToAll(Landroid/content/Intent;)V
+PLcom/android/server/audio/AudioDeviceBroker;->postDisconnectA2dp()V
+PLcom/android/server/audio/AudioDeviceBroker;->postDisconnectA2dpSink()V
+PLcom/android/server/audio/AudioDeviceBroker;->postDisconnectBluetoothSco(I)V
+PLcom/android/server/audio/AudioDeviceBroker;->postDisconnectHeadset()V
+PLcom/android/server/audio/AudioDeviceBroker;->postDisconnectHearingAid()V
+PLcom/android/server/audio/AudioDeviceBroker;->postObserveDevicesForAllStreams()V
+PLcom/android/server/audio/AudioDeviceBroker;->postReportNewRoutes()V
+HPLcom/android/server/audio/AudioDeviceBroker;->postSetAvrcpAbsoluteVolumeIndex(I)V
+PLcom/android/server/audio/AudioDeviceBroker;->postSetVolumeIndexOnDevice(IIILjava/lang/String;)V
+PLcom/android/server/audio/AudioDeviceBroker;->postSetWiredDeviceConnectionState(Lcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;I)V
+HPLcom/android/server/audio/AudioDeviceBroker;->receiveBtEvent(Landroid/content/Intent;)V
+PLcom/android/server/audio/AudioDeviceBroker;->removeAllA2dpConnectionEvents(Landroid/bluetooth/BluetoothDevice;)V
+HPLcom/android/server/audio/AudioDeviceBroker;->sendBroadcastToAll(Landroid/content/Intent;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->sendIILMsg(IIIILjava/lang/Object;I)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->sendIILMsgNoDelay(IIIILjava/lang/Object;)V
 PLcom/android/server/audio/AudioDeviceBroker;->sendILMsg(IIILjava/lang/Object;I)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->sendIMsgNoDelay(III)V
-PLcom/android/server/audio/AudioDeviceBroker;->sendLMsgNoDelay(IILjava/lang/Object;)V
+PLcom/android/server/audio/AudioDeviceBroker;->sendLMsg(IILjava/lang/Object;I)V
+HPLcom/android/server/audio/AudioDeviceBroker;->sendLMsgNoDelay(IILjava/lang/Object;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->sendMsg(III)V
+HPLcom/android/server/audio/AudioDeviceBroker;->sendMsgNoDelay(II)V
 PLcom/android/server/audio/AudioDeviceBroker;->setA2dpTimeout(Ljava/lang/String;II)V
-PLcom/android/server/audio/AudioDeviceBroker;->setAvrcpAbsoluteVolumeSupported(Z)V
-PLcom/android/server/audio/AudioDeviceBroker;->setBluetoothA2dpOnInt(ZLjava/lang/String;)V
-PLcom/android/server/audio/AudioDeviceBroker;->setBluetoothA2dpOn_Async(ZLjava/lang/String;)V
+HPLcom/android/server/audio/AudioDeviceBroker;->setAvrcpAbsoluteVolumeSupported(Z)V
+HPLcom/android/server/audio/AudioDeviceBroker;->setBluetoothA2dpOnInt(ZLjava/lang/String;)V
+HPLcom/android/server/audio/AudioDeviceBroker;->setBluetoothA2dpOn_Async(ZLjava/lang/String;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->setBluetoothScoOn(ZLjava/lang/String;)V
+PLcom/android/server/audio/AudioDeviceBroker;->setBluetoothScoOnByApp(Z)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->setForceUse_Async(IILjava/lang/String;)V
+PLcom/android/server/audio/AudioDeviceBroker;->setSpeakerphoneOn(ZLjava/lang/String;)Z
+PLcom/android/server/audio/AudioDeviceBroker;->setWiredDeviceConnectionState(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->setupMessaging(Landroid/content/Context;)V
+PLcom/android/server/audio/AudioDeviceBroker;->startBluetoothScoForClient_Sync(Landroid/os/IBinder;ILjava/lang/String;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo;
+HPLcom/android/server/audio/AudioDeviceBroker;->stopBluetoothScoForClient_Sync(Landroid/os/IBinder;Ljava/lang/String;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->waitForBrokerHandlerCreation()V
 PLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;-><init>(ILjava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;->access$000(ILjava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;->access$000(ILjava/lang/String;)Ljava/lang/String;
 PLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;->getKey()Ljava/lang/String;
-PLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;->makeDeviceListKey(ILjava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;->makeDeviceListKey(ILjava/lang/String;)Ljava/lang/String;
 PLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;->toString()Ljava/lang/String;
+PLcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;-><init>(Lcom/android/server/audio/AudioDeviceInventory;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/audio/AudioDeviceInventory;-><clinit>()V
 HSPLcom/android/server/audio/AudioDeviceInventory;-><init>(Lcom/android/server/audio/AudioDeviceBroker;)V
-PLcom/android/server/audio/AudioDeviceInventory;->checkSendBecomingNoisyIntentInt(III)I
+HPLcom/android/server/audio/AudioDeviceInventory;->checkSendBecomingNoisyIntentInt(III)I
 PLcom/android/server/audio/AudioDeviceInventory;->disconnectA2dp()V
 PLcom/android/server/audio/AudioDeviceInventory;->disconnectA2dpSink()V
 PLcom/android/server/audio/AudioDeviceInventory;->disconnectHearingAid()V
 PLcom/android/server/audio/AudioDeviceInventory;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/audio/AudioDeviceInventory;->handleDeviceConnection(ZILjava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/audio/AudioDeviceInventory;->getCurAudioRoutes()Landroid/media/AudioRoutesInfo;
+HPLcom/android/server/audio/AudioDeviceInventory;->handleDeviceConnection(ZILjava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/audio/AudioDeviceInventory;->isCurrentDeviceConnected()Z
 PLcom/android/server/audio/AudioDeviceInventory;->lambda$disconnectA2dp$4(Landroid/util/ArraySet;Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)V
 PLcom/android/server/audio/AudioDeviceInventory;->lambda$disconnectA2dp$5$AudioDeviceInventory(ILjava/lang/String;)V
+PLcom/android/server/audio/AudioDeviceInventory;->lambda$disconnectA2dpSink$6(Landroid/util/ArraySet;Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)V
+PLcom/android/server/audio/AudioDeviceInventory;->lambda$disconnectHearingAid$8(Landroid/util/ArraySet;Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)V
 PLcom/android/server/audio/AudioDeviceInventory;->lambda$dump$1(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)V
 PLcom/android/server/audio/AudioDeviceInventory;->lambda$dump$2(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;)V
-PLcom/android/server/audio/AudioDeviceInventory;->makeA2dpDeviceAvailable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/audio/AudioDeviceInventory;->lambda$isCurrentDeviceConnected$10$AudioDeviceInventory(Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)Z
+HPLcom/android/server/audio/AudioDeviceInventory;->makeA2dpDeviceAvailable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/audio/AudioDeviceInventory;->makeA2dpDeviceUnavailableLater(Ljava/lang/String;I)V
-PLcom/android/server/audio/AudioDeviceInventory;->makeA2dpDeviceUnavailableNow(Ljava/lang/String;I)V
-PLcom/android/server/audio/AudioDeviceInventory;->onBluetoothA2dpActiveDeviceChange(Lcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;I)V
+HPLcom/android/server/audio/AudioDeviceInventory;->makeA2dpDeviceUnavailableNow(Ljava/lang/String;I)V
+PLcom/android/server/audio/AudioDeviceInventory;->makeA2dpSrcAvailable(Ljava/lang/String;)V
+HPLcom/android/server/audio/AudioDeviceInventory;->onBluetoothA2dpActiveDeviceChange(Lcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;I)V
 PLcom/android/server/audio/AudioDeviceInventory;->onMakeA2dpDeviceUnavailableNow(Ljava/lang/String;I)V
-PLcom/android/server/audio/AudioDeviceInventory;->onReportNewRoutes()V
-PLcom/android/server/audio/AudioDeviceInventory;->onSetA2dpSinkConnectionState(Lcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;I)V
-PLcom/android/server/audio/AudioDeviceInventory;->setBluetoothA2dpDeviceConnectionState(Landroid/bluetooth/BluetoothDevice;IIZII)V
-PLcom/android/server/audio/AudioDeviceInventory;->setCurrentAudioRouteNameIfPossible(Ljava/lang/String;)V
+HPLcom/android/server/audio/AudioDeviceInventory;->onReportNewRoutes()V
+PLcom/android/server/audio/AudioDeviceInventory;->onRestoreDevices()V
+HPLcom/android/server/audio/AudioDeviceInventory;->onSetA2dpSinkConnectionState(Lcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;I)V
+PLcom/android/server/audio/AudioDeviceInventory;->onSetA2dpSourceConnectionState(Lcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;I)V
+PLcom/android/server/audio/AudioDeviceInventory;->onSetWiredDeviceConnectionState(Lcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;)V
+PLcom/android/server/audio/AudioDeviceInventory;->sendDeviceConnectionIntent(IILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/audio/AudioDeviceInventory;->setBluetoothA2dpDeviceConnectionState(Landroid/bluetooth/BluetoothDevice;IIZII)V
+HPLcom/android/server/audio/AudioDeviceInventory;->setCurrentAudioRouteNameIfPossible(Ljava/lang/String;)V
+PLcom/android/server/audio/AudioDeviceInventory;->setWiredDeviceConnectionState(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLcom/android/server/audio/AudioDeviceInventory;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo;
+PLcom/android/server/audio/AudioDeviceInventory;->updateAudioRoutes(II)V
 HSPLcom/android/server/audio/AudioEventLogger$Event;-><clinit>()V
 HSPLcom/android/server/audio/AudioEventLogger$Event;-><init>()V
-PLcom/android/server/audio/AudioEventLogger$Event;->printLog(Ljava/lang/String;)Lcom/android/server/audio/AudioEventLogger$Event;
-PLcom/android/server/audio/AudioEventLogger$Event;->toString()Ljava/lang/String;
+HPLcom/android/server/audio/AudioEventLogger$Event;->printLog(Ljava/lang/String;)Lcom/android/server/audio/AudioEventLogger$Event;
+HPLcom/android/server/audio/AudioEventLogger$Event;->toString()Ljava/lang/String;
 HSPLcom/android/server/audio/AudioEventLogger$StringEvent;-><init>(Ljava/lang/String;)V
 PLcom/android/server/audio/AudioEventLogger$StringEvent;->eventToString()Ljava/lang/String;
 HSPLcom/android/server/audio/AudioEventLogger;-><init>(ILjava/lang/String;)V
-PLcom/android/server/audio/AudioEventLogger;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/audio/AudioEventLogger;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/audio/AudioEventLogger;->log(Lcom/android/server/audio/AudioEventLogger$Event;)V
 HSPLcom/android/server/audio/AudioService$1;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$1;->onError(I)V
 HSPLcom/android/server/audio/AudioService$2;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$3;-><init>(Lcom/android/server/audio/AudioService;)V
 PLcom/android/server/audio/AudioService$4;-><init>(Lcom/android/server/audio/AudioService;Landroid/media/IVolumeController;)V
+PLcom/android/server/audio/AudioService$4;->binderDied()V
 HSPLcom/android/server/audio/AudioService$5;-><init>(Lcom/android/server/audio/AudioService;)V
 PLcom/android/server/audio/AudioService$AsdProxy;-><init>(Lcom/android/server/audio/AudioService;Landroid/media/IAudioServerStateDispatcher;)V
+PLcom/android/server/audio/AudioService$AsdProxy;->callback()Landroid/media/IAudioServerStateDispatcher;
 HSPLcom/android/server/audio/AudioService$AudioHandler;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$AudioHandler;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$1;)V
 HSPLcom/android/server/audio/AudioService$AudioHandler;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/audio/AudioService$AudioHandler;->onPersistSafeVolumeState(I)V
-PLcom/android/server/audio/AudioService$AudioHandler;->persistVolume(Lcom/android/server/audio/AudioService$VolumeStreamState;I)V
+PLcom/android/server/audio/AudioService$AudioHandler;->persistRingerMode(I)V
+HPLcom/android/server/audio/AudioService$AudioHandler;->persistVolume(Lcom/android/server/audio/AudioService$VolumeStreamState;I)V
 HSPLcom/android/server/audio/AudioService$AudioHandler;->setAllVolumes(Lcom/android/server/audio/AudioService$VolumeStreamState;)V
 PLcom/android/server/audio/AudioService$AudioPolicyProxy;-><init>(Lcom/android/server/audio/AudioService;Landroid/media/audiopolicy/AudioPolicyConfig;Landroid/media/audiopolicy/IAudioPolicyCallback;ZZZZLandroid/media/projection/IMediaProjection;)V
+PLcom/android/server/audio/AudioService$AudioPolicyProxy;->addMixes(Ljava/util/ArrayList;)I
+PLcom/android/server/audio/AudioService$AudioPolicyProxy;->binderDied()V
 PLcom/android/server/audio/AudioService$AudioPolicyProxy;->connectMixes()I
 PLcom/android/server/audio/AudioService$AudioPolicyProxy;->getRegistrationId()Ljava/lang/String;
+PLcom/android/server/audio/AudioService$AudioPolicyProxy;->hasMixAffectingUsage(II)Z
 PLcom/android/server/audio/AudioService$AudioPolicyProxy;->release()V
+PLcom/android/server/audio/AudioService$AudioPolicyProxy;->toLogFriendlyString()Ljava/lang/String;
 HSPLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$1;)V
-PLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/audio/AudioService$AudioServiceInternal;-><init>(Lcom/android/server/audio/AudioService;)V
 PLcom/android/server/audio/AudioService$AudioServiceInternal;->adjustSuggestedStreamVolumeForUid(IIILjava/lang/String;I)V
 HSPLcom/android/server/audio/AudioService$AudioServiceInternal;->getRingerModeInternal()I
-PLcom/android/server/audio/AudioService$AudioServiceInternal;->setAccessibilityServiceUids(Landroid/util/IntArray;)V
+HSPLcom/android/server/audio/AudioService$AudioServiceInternal;->setAccessibilityServiceUids(Landroid/util/IntArray;)V
 HSPLcom/android/server/audio/AudioService$AudioServiceInternal;->setRingerModeDelegate(Landroid/media/AudioManagerInternal$RingerModeDelegate;)V
 HSPLcom/android/server/audio/AudioService$AudioServiceInternal;->setRingerModeInternal(ILjava/lang/String;)V
+PLcom/android/server/audio/AudioService$AudioServiceInternal;->silenceRingerModeInternal(Ljava/lang/String;)V
 HSPLcom/android/server/audio/AudioService$AudioServiceInternal;->updateRingerModeAffectedStreamsInternal()V
 HSPLcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$1;)V
-PLcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
 HSPLcom/android/server/audio/AudioService$AudioSystemThread;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$AudioSystemThread;->run()V
-PLcom/android/server/audio/AudioService$DeviceVolumeUpdate;-><init>(IIILjava/lang/String;)V
+HPLcom/android/server/audio/AudioService$DeviceVolumeUpdate;-><init>(IIILjava/lang/String;)V
 PLcom/android/server/audio/AudioService$DeviceVolumeUpdate;->getVolumeIndex()I
 PLcom/android/server/audio/AudioService$DeviceVolumeUpdate;->hasVolumeIndex()Z
-PLcom/android/server/audio/AudioService$ForceControlStreamClient;-><init>(Lcom/android/server/audio/AudioService;Landroid/os/IBinder;)V
+HPLcom/android/server/audio/AudioService$ForceControlStreamClient;-><init>(Lcom/android/server/audio/AudioService;Landroid/os/IBinder;)V
+PLcom/android/server/audio/AudioService$ForceControlStreamClient;->getBinder()Landroid/os/IBinder;
 PLcom/android/server/audio/AudioService$ForceControlStreamClient;->release()V
 HSPLcom/android/server/audio/AudioService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/audio/AudioService$Lifecycle;->onBootPhase(I)V
@@ -5669,203 +9197,273 @@
 HSPLcom/android/server/audio/AudioService$MyHdmiControlStatusChangeListenerCallback;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$MyHdmiControlStatusChangeListenerCallback;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$1;)V
 PLcom/android/server/audio/AudioService$RmtSbmxFullVolDeathHandler;-><init>(Lcom/android/server/audio/AudioService;Landroid/os/IBinder;)V
+PLcom/android/server/audio/AudioService$RmtSbmxFullVolDeathHandler;->binderDied()V
 PLcom/android/server/audio/AudioService$RmtSbmxFullVolDeathHandler;->forget()V
 PLcom/android/server/audio/AudioService$RmtSbmxFullVolDeathHandler;->isHandlerFor(Landroid/os/IBinder;)Z
 HSPLcom/android/server/audio/AudioService$RoleObserver;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$RoleObserver;->getAssistantRoleHolder()Ljava/lang/String;
 PLcom/android/server/audio/AudioService$RoleObserver;->onRoleHoldersChanged(Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLcom/android/server/audio/AudioService$RoleObserver;->register()V
+PLcom/android/server/audio/AudioService$SetModeDeathHandler;-><init>(Lcom/android/server/audio/AudioService;Landroid/os/IBinder;I)V
+PLcom/android/server/audio/AudioService$SetModeDeathHandler;->binderDied()V
+PLcom/android/server/audio/AudioService$SetModeDeathHandler;->getBinder()Landroid/os/IBinder;
+PLcom/android/server/audio/AudioService$SetModeDeathHandler;->getMode()I
+PLcom/android/server/audio/AudioService$SetModeDeathHandler;->getPid()I
+PLcom/android/server/audio/AudioService$SetModeDeathHandler;->setMode(I)V
 HSPLcom/android/server/audio/AudioService$SettingsObserver;-><init>(Lcom/android/server/audio/AudioService;)V
-PLcom/android/server/audio/AudioService$SettingsObserver;->onChange(Z)V
-PLcom/android/server/audio/AudioService$SettingsObserver;->updateEncodedSurroundOutput()V
+HSPLcom/android/server/audio/AudioService$SettingsObserver;->onChange(Z)V
+HSPLcom/android/server/audio/AudioService$SettingsObserver;->updateEncodedSurroundOutput()V
 HSPLcom/android/server/audio/AudioService$VolumeController;-><init>()V
 PLcom/android/server/audio/AudioService$VolumeController;->asBinder()Landroid/os/IBinder;
-PLcom/android/server/audio/AudioService$VolumeController;->binder(Landroid/media/IVolumeController;)Landroid/os/IBinder;
-PLcom/android/server/audio/AudioService$VolumeController;->isSameBinder(Landroid/media/IVolumeController;)Z
+HPLcom/android/server/audio/AudioService$VolumeController;->binder(Landroid/media/IVolumeController;)Landroid/os/IBinder;
+HPLcom/android/server/audio/AudioService$VolumeController;->isSameBinder(Landroid/media/IVolumeController;)Z
 HSPLcom/android/server/audio/AudioService$VolumeController;->loadSettings(Landroid/content/ContentResolver;)V
 PLcom/android/server/audio/AudioService$VolumeController;->postDismiss()V
-PLcom/android/server/audio/AudioService$VolumeController;->postVolumeChanged(II)V
+PLcom/android/server/audio/AudioService$VolumeController;->postDisplaySafeVolumeWarning(I)V
+HPLcom/android/server/audio/AudioService$VolumeController;->postVolumeChanged(II)V
+PLcom/android/server/audio/AudioService$VolumeController;->setA11yMode(I)V
 PLcom/android/server/audio/AudioService$VolumeController;->setController(Landroid/media/IVolumeController;)V
-PLcom/android/server/audio/AudioService$VolumeController;->setLayoutDirection(I)V
+HSPLcom/android/server/audio/AudioService$VolumeController;->setLayoutDirection(I)V
 PLcom/android/server/audio/AudioService$VolumeController;->setVisible(Z)V
-PLcom/android/server/audio/AudioService$VolumeController;->suppressAdjustment(IIZ)Z
+HPLcom/android/server/audio/AudioService$VolumeController;->suppressAdjustment(IIZ)Z
 PLcom/android/server/audio/AudioService$VolumeController;->toString()Ljava/lang/String;
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;-><init>(Lcom/android/server/audio/AudioService;Ljava/lang/String;I)V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;-><init>(Lcom/android/server/audio/AudioService;Ljava/lang/String;ILcom/android/server/audio/AudioService$1;)V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->access$1000(Lcom/android/server/audio/AudioService$VolumeStreamState;)Z
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->access$1100(Lcom/android/server/audio/AudioService$VolumeStreamState;)I
+PLcom/android/server/audio/AudioService$VolumeStreamState;->access$1300(Lcom/android/server/audio/AudioService$VolumeStreamState;Ljava/io/PrintWriter;)V
+PLcom/android/server/audio/AudioService$VolumeStreamState;->access$1402(Lcom/android/server/audio/AudioService$VolumeStreamState;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/audio/AudioService$VolumeStreamState;->access$1900(Lcom/android/server/audio/AudioService$VolumeStreamState;)Landroid/util/SparseIntArray;
+PLcom/android/server/audio/AudioService$VolumeStreamState;->access$3500(Lcom/android/server/audio/AudioService$VolumeStreamState;)Z
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->access$800(Lcom/android/server/audio/AudioService$VolumeStreamState;)I
-PLcom/android/server/audio/AudioService$VolumeStreamState;->adjustIndex(IILjava/lang/String;)Z
+PLcom/android/server/audio/AudioService$VolumeStreamState;->access$900(Lcom/android/server/audio/AudioService$VolumeStreamState;)I
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->adjustIndex(IILjava/lang/String;)Z
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->applyAllVolumes()V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->applyDeviceVolume_syncVSS(IZ)V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->checkFixedVolumeDevices()V
-PLcom/android/server/audio/AudioService$VolumeStreamState;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/audio/AudioService$VolumeStreamState;->getAbsoluteVolumeIndex(I)I
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->getAbsoluteVolumeIndex(I)I
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getIndex(I)I
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getMaxIndex()I
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getMinIndex()I
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getSettingNameForDevice(I)Ljava/lang/String;
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getStreamType()I
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getValidIndex(I)I
-PLcom/android/server/audio/AudioService$VolumeStreamState;->hasIndexForDevice(I)Z
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->hasIndexForDevice(I)Z
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->hasValidSettingsName()Z
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->mute(Z)Z
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->observeDevicesForStream_syncVSS(Z)I
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->readSettings()V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->setAllIndexes(Lcom/android/server/audio/AudioService$VolumeStreamState;Ljava/lang/String;)V
+PLcom/android/server/audio/AudioService$VolumeStreamState;->setAllIndexesToMax()V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->setIndex(IILjava/lang/String;)Z
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->setStreamVolumeIndex(II)V
 HSPLcom/android/server/audio/AudioService;-><clinit>()V
 HSPLcom/android/server/audio/AudioService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/audio/AudioService;->abandonAudioFocus(Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Landroid/media/AudioAttributes;Ljava/lang/String;)I
+HPLcom/android/server/audio/AudioService;->abandonAudioFocus(Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Landroid/media/AudioAttributes;Ljava/lang/String;)I
+PLcom/android/server/audio/AudioService;->access$000(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/RecordingActivityMonitor;
 HSPLcom/android/server/audio/AudioService;->access$100(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/AudioService$AudioHandler;
 HSPLcom/android/server/audio/AudioService;->access$102(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$AudioHandler;)Lcom/android/server/audio/AudioService$AudioHandler;
 HSPLcom/android/server/audio/AudioService;->access$200(Landroid/os/Handler;IIIILjava/lang/Object;I)V
 HSPLcom/android/server/audio/AudioService;->access$2000(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/AudioDeviceBroker;
+PLcom/android/server/audio/AudioService;->access$2100(Lcom/android/server/audio/AudioService;ILandroid/os/IBinder;ILjava/lang/String;)I
 HSPLcom/android/server/audio/AudioService;->access$2300(Lcom/android/server/audio/AudioService;I)V
 HSPLcom/android/server/audio/AudioService;->access$2400(Lcom/android/server/audio/AudioService;Landroid/content/Intent;)V
 HSPLcom/android/server/audio/AudioService;->access$2500(Lcom/android/server/audio/AudioService;)Ljava/lang/Object;
 HSPLcom/android/server/audio/AudioService;->access$2600(Lcom/android/server/audio/AudioService;)Z
 HSPLcom/android/server/audio/AudioService;->access$2700(Lcom/android/server/audio/AudioService;)Z
 HSPLcom/android/server/audio/AudioService;->access$2800(Lcom/android/server/audio/AudioService;)Landroid/content/ContentResolver;
+PLcom/android/server/audio/AudioService;->access$2900(Lcom/android/server/audio/AudioService;)[F
 HSPLcom/android/server/audio/AudioService;->access$3000(Lcom/android/server/audio/AudioService;)[Lcom/android/server/audio/AudioService$VolumeStreamState;
 HSPLcom/android/server/audio/AudioService;->access$3100(Lcom/android/server/audio/AudioService;III)I
+PLcom/android/server/audio/AudioService;->access$3200(Lcom/android/server/audio/AudioService;I)I
+PLcom/android/server/audio/AudioService;->access$3400(Lcom/android/server/audio/AudioService;)Z
+PLcom/android/server/audio/AudioService;->access$3600(Lcom/android/server/audio/AudioService;Z)V
 HSPLcom/android/server/audio/AudioService;->access$3700(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/SoundEffectsHelper;
 HSPLcom/android/server/audio/AudioService;->access$3800(Lcom/android/server/audio/AudioService;)Z
-PLcom/android/server/audio/AudioService;->access$4200(Lcom/android/server/audio/AudioService;ZLjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->access$4100(Lcom/android/server/audio/AudioService;Ljava/lang/String;)V
+HSPLcom/android/server/audio/AudioService;->access$4200(Lcom/android/server/audio/AudioService;ZLjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->access$4300(Lcom/android/server/audio/AudioService;I)V
 HSPLcom/android/server/audio/AudioService;->access$4700(Lcom/android/server/audio/AudioService;)V
-PLcom/android/server/audio/AudioService;->access$5200(Lcom/android/server/audio/AudioService;)I
+PLcom/android/server/audio/AudioService;->access$4800(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$DeviceVolumeUpdate;)V
+PLcom/android/server/audio/AudioService;->access$4900(Lcom/android/server/audio/AudioService;)V
+HSPLcom/android/server/audio/AudioService;->access$5200(Lcom/android/server/audio/AudioService;)I
 HSPLcom/android/server/audio/AudioService;->access$5202(Lcom/android/server/audio/AudioService;I)I
 HSPLcom/android/server/audio/AudioService;->access$5302(Lcom/android/server/audio/AudioService;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/audio/AudioService;->access$5400(Lcom/android/server/audio/AudioService;)Z
-PLcom/android/server/audio/AudioService;->access$5500(Lcom/android/server/audio/AudioService;IZ)V
-PLcom/android/server/audio/AudioService;->access$5600(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
-PLcom/android/server/audio/AudioService;->access$5700(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
-PLcom/android/server/audio/AudioService;->access$5800(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
-PLcom/android/server/audio/AudioService;->access$5900(Lcom/android/server/audio/AudioService;)Z
-PLcom/android/server/audio/AudioService;->access$5902(Lcom/android/server/audio/AudioService;Z)Z
+HSPLcom/android/server/audio/AudioService;->access$5500(Lcom/android/server/audio/AudioService;IZ)V
+HSPLcom/android/server/audio/AudioService;->access$5600(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
+HSPLcom/android/server/audio/AudioService;->access$5700(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
+HSPLcom/android/server/audio/AudioService;->access$5800(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
+HSPLcom/android/server/audio/AudioService;->access$5900(Lcom/android/server/audio/AudioService;)Z
+HSPLcom/android/server/audio/AudioService;->access$5902(Lcom/android/server/audio/AudioService;Z)Z
 HSPLcom/android/server/audio/AudioService;->access$600(Lcom/android/server/audio/AudioService;)Landroid/content/Context;
-PLcom/android/server/audio/AudioService;->access$6000(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;Z)V
-PLcom/android/server/audio/AudioService;->access$6100(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
+HSPLcom/android/server/audio/AudioService;->access$6000(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;Z)V
+HSPLcom/android/server/audio/AudioService;->access$6100(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
 PLcom/android/server/audio/AudioService;->access$6400(Lcom/android/server/audio/AudioService;)Z
-PLcom/android/server/audio/AudioService;->access$6500(Lcom/android/server/audio/AudioService;Landroid/content/Context;)V
-PLcom/android/server/audio/AudioService;->access$6600(Lcom/android/server/audio/AudioService;)Z
-PLcom/android/server/audio/AudioService;->access$6602(Lcom/android/server/audio/AudioService;Z)Z
-PLcom/android/server/audio/AudioService;->access$6700(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/MediaFocusControl;
-PLcom/android/server/audio/AudioService;->access$6800(Lcom/android/server/audio/AudioService;Z)V
+HSPLcom/android/server/audio/AudioService;->access$6500(Lcom/android/server/audio/AudioService;Landroid/content/Context;)V
+HSPLcom/android/server/audio/AudioService;->access$6600(Lcom/android/server/audio/AudioService;)Z
+HSPLcom/android/server/audio/AudioService;->access$6602(Lcom/android/server/audio/AudioService;Z)Z
+HSPLcom/android/server/audio/AudioService;->access$6700(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/MediaFocusControl;
+HSPLcom/android/server/audio/AudioService;->access$6800(Lcom/android/server/audio/AudioService;Z)V
 HSPLcom/android/server/audio/AudioService;->access$700(Lcom/android/server/audio/AudioService;Z)V
+PLcom/android/server/audio/AudioService;->access$7000(Lcom/android/server/audio/AudioService;Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/audio/AudioService;->access$7800(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/AudioService$VolumeController;
 HSPLcom/android/server/audio/AudioService;->access$7900(Lcom/android/server/audio/AudioService;)Landroid/media/AudioManagerInternal$RingerModeDelegate;
 HSPLcom/android/server/audio/AudioService;->access$7902(Lcom/android/server/audio/AudioService;Landroid/media/AudioManagerInternal$RingerModeDelegate;)Landroid/media/AudioManagerInternal$RingerModeDelegate;
-PLcom/android/server/audio/AudioService;->access$8200(Lcom/android/server/audio/AudioService;)Ljava/lang/Object;
-PLcom/android/server/audio/AudioService;->access$8300(Lcom/android/server/audio/AudioService;)[I
-PLcom/android/server/audio/AudioService;->access$8302(Lcom/android/server/audio/AudioService;[I)[I
+HPLcom/android/server/audio/AudioService;->access$8000(Lcom/android/server/audio/AudioService;IIILjava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/audio/AudioService;->access$8200(Lcom/android/server/audio/AudioService;)Ljava/lang/Object;
+HSPLcom/android/server/audio/AudioService;->access$8300(Lcom/android/server/audio/AudioService;)[I
+HSPLcom/android/server/audio/AudioService;->access$8302(Lcom/android/server/audio/AudioService;[I)[I
 PLcom/android/server/audio/AudioService;->access$8408(Lcom/android/server/audio/AudioService;)I
-PLcom/android/server/audio/AudioService;->adjustStreamVolume(IIILjava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/audio/AudioService;->adjustSuggestedStreamVolume(IIILjava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/audio/AudioService;->avrcpSupportsAbsoluteVolume(Ljava/lang/String;Z)V
+PLcom/android/server/audio/AudioService;->access$8900(Lcom/android/server/audio/AudioService;)Ljava/util/HashMap;
+PLcom/android/server/audio/AudioService;->addMixForPolicy(Landroid/media/audiopolicy/AudioPolicyConfig;Landroid/media/audiopolicy/IAudioPolicyCallback;)I
+PLcom/android/server/audio/AudioService;->adjustStreamVolume(IIILjava/lang/String;)V
+HPLcom/android/server/audio/AudioService;->adjustStreamVolume(IIILjava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/audio/AudioService;->adjustSuggestedStreamVolume(IIILjava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/audio/AudioService;->avrcpSupportsAbsoluteVolume(Ljava/lang/String;Z)V
 HSPLcom/android/server/audio/AudioService;->broadcastMasterMuteStatus(Z)V
 HSPLcom/android/server/audio/AudioService;->broadcastRingerMode(Ljava/lang/String;I)V
 HSPLcom/android/server/audio/AudioService;->broadcastVibrateSetting(I)V
 PLcom/android/server/audio/AudioService;->callerHasPermission(Ljava/lang/String;)Z
+PLcom/android/server/audio/AudioService;->canChangeAccessibilityVolume()Z
 HSPLcom/android/server/audio/AudioService;->checkAllAliasStreamVolumes()V
 HSPLcom/android/server/audio/AudioService;->checkAllFixedVolumeDevices()V
-PLcom/android/server/audio/AudioService;->checkMonitorAudioServerStatePermission()V
+PLcom/android/server/audio/AudioService;->checkAllFixedVolumeDevices(I)V
+HPLcom/android/server/audio/AudioService;->checkAudioSettingsPermission(Ljava/lang/String;)Z
+HPLcom/android/server/audio/AudioService;->checkForRingerModeChange(IIIZLjava/lang/String;I)I
+HPLcom/android/server/audio/AudioService;->checkMonitorAudioServerStatePermission()V
+PLcom/android/server/audio/AudioService;->checkMusicActive(ILjava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->checkMuteAffectedStreams()V
-PLcom/android/server/audio/AudioService;->checkSafeMediaVolume(III)Z
+HPLcom/android/server/audio/AudioService;->checkSafeMediaVolume(III)Z
+PLcom/android/server/audio/AudioService;->checkUpdateForPolicy(Landroid/media/audiopolicy/IAudioPolicyCallback;Ljava/lang/String;)Lcom/android/server/audio/AudioService$AudioPolicyProxy;
 HSPLcom/android/server/audio/AudioService;->createAudioSystemThread()V
 HSPLcom/android/server/audio/AudioService;->createStreamStates()V
+PLcom/android/server/audio/AudioService;->disableRingtoneSync(I)V
+PLcom/android/server/audio/AudioService;->disableSafeMediaVolume(Ljava/lang/String;)V
 PLcom/android/server/audio/AudioService;->discardRmtSbmxFullVolDeathHandlerFor(Landroid/os/IBinder;)Z
-PLcom/android/server/audio/AudioService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/audio/AudioService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/audio/AudioService;->dumpAudioPolicies(Ljava/io/PrintWriter;)V
-PLcom/android/server/audio/AudioService;->dumpDeviceTypes(Ljava/util/Set;)Ljava/lang/String;
+HPLcom/android/server/audio/AudioService;->dumpDeviceTypes(Ljava/util/Set;)Ljava/lang/String;
 PLcom/android/server/audio/AudioService;->dumpRingerMode(Ljava/io/PrintWriter;)V
-PLcom/android/server/audio/AudioService;->dumpRingerModeStreams(Ljava/io/PrintWriter;Ljava/lang/String;I)V
-PLcom/android/server/audio/AudioService;->dumpStreamStates(Ljava/io/PrintWriter;)V
-PLcom/android/server/audio/AudioService;->enforceSafeMediaVolume(Ljava/lang/String;)V
+HPLcom/android/server/audio/AudioService;->dumpRingerModeStreams(Ljava/io/PrintWriter;Ljava/lang/String;I)V
+HPLcom/android/server/audio/AudioService;->dumpStreamStates(Ljava/io/PrintWriter;)V
+PLcom/android/server/audio/AudioService;->dumpSupportedSystemUsage(Ljava/io/PrintWriter;)V
+HPLcom/android/server/audio/AudioService;->enforceModifyAudioRoutingPermission()V
+HSPLcom/android/server/audio/AudioService;->enforceSafeMediaVolume(Ljava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->enforceVolumeController(Ljava/lang/String;)V
-PLcom/android/server/audio/AudioService;->ensureValidDirection(I)V
+HPLcom/android/server/audio/AudioService;->ensureValidDirection(I)V
 HSPLcom/android/server/audio/AudioService;->ensureValidRingerMode(I)V
 HSPLcom/android/server/audio/AudioService;->ensureValidStreamType(I)V
 PLcom/android/server/audio/AudioService;->forceFocusDuckingForAccessibility(Landroid/media/AudioAttributes;II)Z
-PLcom/android/server/audio/AudioService;->forceRemoteSubmixFullVolume(ZLandroid/os/IBinder;)V
-PLcom/android/server/audio/AudioService;->forceVolumeControlStream(ILandroid/os/IBinder;)V
-PLcom/android/server/audio/AudioService;->getActivePlaybackConfigurations()Ljava/util/List;
-PLcom/android/server/audio/AudioService;->getActiveRecordingConfigurations()Ljava/util/List;
-PLcom/android/server/audio/AudioService;->getActiveStreamType(I)I
+HPLcom/android/server/audio/AudioService;->forceRemoteSubmixFullVolume(ZLandroid/os/IBinder;)V
+HPLcom/android/server/audio/AudioService;->forceVolumeControlStream(ILandroid/os/IBinder;)V
+HPLcom/android/server/audio/AudioService;->getActivePlaybackConfigurations()Ljava/util/List;
+HPLcom/android/server/audio/AudioService;->getActiveRecordingConfigurations()Ljava/util/List;
+HPLcom/android/server/audio/AudioService;->getActiveStreamType(I)I
 HSPLcom/android/server/audio/AudioService;->getAudioHalPids()Ljava/util/Set;
-PLcom/android/server/audio/AudioService;->getCurrentAudioFocus()I
+PLcom/android/server/audio/AudioService;->getAudioProductStrategies()Ljava/util/List;
+PLcom/android/server/audio/AudioService;->getContentResolver()Landroid/content/ContentResolver;
+HSPLcom/android/server/audio/AudioService;->getCurrentAudioFocus()I
 HSPLcom/android/server/audio/AudioService;->getCurrentUserId()I
 HSPLcom/android/server/audio/AudioService;->getDeviceForStream(I)I
+HPLcom/android/server/audio/AudioService;->getDevicesForAttributes(Landroid/media/AudioAttributes;)Ljava/util/ArrayList;
+HPLcom/android/server/audio/AudioService;->getDevicesForAttributes(Landroid/media/AudioAttributes;)Ljava/util/List;
 HSPLcom/android/server/audio/AudioService;->getDevicesForStream(I)I
 HSPLcom/android/server/audio/AudioService;->getDevicesForStream(IZ)I
-PLcom/android/server/audio/AudioService;->getFocusRampTimeMs(ILandroid/media/AudioAttributes;)I
+HSPLcom/android/server/audio/AudioService;->getFocusRampTimeMs(ILandroid/media/AudioAttributes;)I
+PLcom/android/server/audio/AudioService;->getHearingAidStreamType(I)I
 HSPLcom/android/server/audio/AudioService;->getIndexRange(I)I
-PLcom/android/server/audio/AudioService;->getLastAudibleStreamVolume(I)I
+HPLcom/android/server/audio/AudioService;->getLastAudibleStreamVolume(I)I
 HSPLcom/android/server/audio/AudioService;->getMode()I
+PLcom/android/server/audio/AudioService;->getModeOwnerPid()I
 PLcom/android/server/audio/AudioService;->getNewRingerMode(III)I
 HSPLcom/android/server/audio/AudioService;->getRingerModeExternal()I
 HSPLcom/android/server/audio/AudioService;->getRingerModeInternal()I
-PLcom/android/server/audio/AudioService;->getRingtonePlayer()Landroid/media/IRingtonePlayer;
+HPLcom/android/server/audio/AudioService;->getRingtonePlayer()Landroid/media/IRingtonePlayer;
 HSPLcom/android/server/audio/AudioService;->getSafeUsbMediaVolumeIndex()I
-PLcom/android/server/audio/AudioService;->getStreamMaxVolume(I)I
-PLcom/android/server/audio/AudioService;->getStreamMinVolume(I)I
-PLcom/android/server/audio/AudioService;->getStreamVolume(I)I
-PLcom/android/server/audio/AudioService;->getUiSoundsStreamType()I
-PLcom/android/server/audio/AudioService;->getVibrateSetting(I)I
+HPLcom/android/server/audio/AudioService;->getStreamMaxVolume(I)I
+HPLcom/android/server/audio/AudioService;->getStreamMinVolume(I)I
+HSPLcom/android/server/audio/AudioService;->getStreamVolume(I)I
+HPLcom/android/server/audio/AudioService;->getUiSoundsStreamType()I
+HSPLcom/android/server/audio/AudioService;->getVibrateSetting(I)I
+HPLcom/android/server/audio/AudioService;->handleAudioEffectBroadcast(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/audio/AudioService;->handleBluetoothA2dpDeviceConfigChange(Landroid/bluetooth/BluetoothDevice;)V
-PLcom/android/server/audio/AudioService;->handleConfigurationChanged(Landroid/content/Context;)V
-PLcom/android/server/audio/AudioService;->hasMediaDynamicPolicy()Z
+HSPLcom/android/server/audio/AudioService;->handleConfigurationChanged(Landroid/content/Context;)V
+PLcom/android/server/audio/AudioService;->hasAudioFocusUsers()Z
+PLcom/android/server/audio/AudioService;->hasHapticChannels(Landroid/net/Uri;)Z
+HPLcom/android/server/audio/AudioService;->hasMediaDynamicPolicy()Z
+PLcom/android/server/audio/AudioService;->hasRmtSbmxFullVolDeathHandlerFor(Landroid/os/IBinder;)Z
 HSPLcom/android/server/audio/AudioService;->initA11yMonitoring()V
-PLcom/android/server/audio/AudioService;->isAndroidNPlus(Ljava/lang/String;)Z
-PLcom/android/server/audio/AudioService;->isAudioServerRunning()Z
-PLcom/android/server/audio/AudioService;->isBluetoothA2dpOn()Z
+PLcom/android/server/audio/AudioService;->isAlarm(I)Z
+HPLcom/android/server/audio/AudioService;->isAndroidNPlus(Ljava/lang/String;)Z
+HPLcom/android/server/audio/AudioService;->isAudioServerRunning()Z
+HPLcom/android/server/audio/AudioService;->isBluetoothA2dpOn()Z
 HSPLcom/android/server/audio/AudioService;->isBluetoothScoOn()Z
-PLcom/android/server/audio/AudioService;->isCameraSoundForced()Z
+HPLcom/android/server/audio/AudioService;->isCameraSoundForced()Z
 HSPLcom/android/server/audio/AudioService;->isInCommunication()Z
+PLcom/android/server/audio/AudioService;->isMedia(I)Z
 HSPLcom/android/server/audio/AudioService;->isMicrophoneMuted()Z
+PLcom/android/server/audio/AudioService;->isMuteAdjust(I)Z
+PLcom/android/server/audio/AudioService;->isNonVoiceCommunicationCaptureMix(Landroid/media/audiopolicy/AudioMix;)Z
+PLcom/android/server/audio/AudioService;->isNotificationOrRinger(I)Z
 HSPLcom/android/server/audio/AudioService;->isPlatformTelevision()Z
 PLcom/android/server/audio/AudioService;->isPolicyRegisterAllowed(Landroid/media/audiopolicy/AudioPolicyConfig;ZZLandroid/media/projection/IMediaProjection;)Z
-PLcom/android/server/audio/AudioService;->isSpeakerphoneOn()Z
-PLcom/android/server/audio/AudioService;->isStreamAffectedByMute(I)Z
+HPLcom/android/server/audio/AudioService;->isSpeakerphoneOn()Z
+HSPLcom/android/server/audio/AudioService;->isStreamAffectedByMute(I)Z
 HSPLcom/android/server/audio/AudioService;->isStreamAffectedByRingerMode(I)Z
-PLcom/android/server/audio/AudioService;->isStreamMute(I)Z
+HPLcom/android/server/audio/AudioService;->isStreamMute(I)Z
 HSPLcom/android/server/audio/AudioService;->isStreamMutedByRingerOrZenMode(I)Z
 HSPLcom/android/server/audio/AudioService;->isSystem(I)Z
+PLcom/android/server/audio/AudioService;->isValidAudioAttributesUsage(Landroid/media/AudioAttributes;)Z
 HSPLcom/android/server/audio/AudioService;->isValidRingerMode(I)Z
+PLcom/android/server/audio/AudioService;->isVoiceCommunicationPlaybackCaptureMix(Landroid/media/audiopolicy/AudioMix;)Z
+PLcom/android/server/audio/AudioService;->makeAlsaAddressString(II)Ljava/lang/String;
 PLcom/android/server/audio/AudioService;->maybeSendSystemAudioStatusCommand(Z)V
+PLcom/android/server/audio/AudioService;->maybeVibrate(Landroid/os/VibrationEffect;Ljava/lang/String;)Z
 HSPLcom/android/server/audio/AudioService;->muteRingerModeStreams()V
-PLcom/android/server/audio/AudioService;->notifyVolumeControllerVisible(Landroid/media/IVolumeController;Z)V
+HPLcom/android/server/audio/AudioService;->notifyVolumeControllerVisible(Landroid/media/IVolumeController;Z)V
 HSPLcom/android/server/audio/AudioService;->observeDevicesForStreams(I)V
-PLcom/android/server/audio/AudioService;->onAccessibilityServicesStateChanged(Landroid/view/accessibility/AccessibilityManager;)V
-PLcom/android/server/audio/AudioService;->onAccessoryPlugMediaUnmute(I)V
-PLcom/android/server/audio/AudioService;->onConfigureSafeVolume(ZLjava/lang/String;)V
+HSPLcom/android/server/audio/AudioService;->onAccessibilityServicesStateChanged(Landroid/view/accessibility/AccessibilityManager;)V
+HPLcom/android/server/audio/AudioService;->onAccessoryPlugMediaUnmute(I)V
+PLcom/android/server/audio/AudioService;->onAudioServerDied()V
+HPLcom/android/server/audio/AudioService;->onCheckMusicActive(Ljava/lang/String;)V
+HSPLcom/android/server/audio/AudioService;->onConfigureSafeVolume(ZLjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->onDispatchAudioServerStateChange(Z)V
 HSPLcom/android/server/audio/AudioService;->onIndicateSystemReady()V
+PLcom/android/server/audio/AudioService;->onObserveDevicesForAllStreams()V
 PLcom/android/server/audio/AudioService;->onSetStreamVolume(IIIILjava/lang/String;)V
-PLcom/android/server/audio/AudioService;->onSetVolumeIndexOnDevice(Lcom/android/server/audio/AudioService$DeviceVolumeUpdate;)V
+HPLcom/android/server/audio/AudioService;->onSetVolumeIndexOnDevice(Lcom/android/server/audio/AudioService$DeviceVolumeUpdate;)V
 HSPLcom/android/server/audio/AudioService;->onSystemReady()V
+PLcom/android/server/audio/AudioService;->onTouchExplorationStateChanged(Z)V
 HSPLcom/android/server/audio/AudioService;->onUpdateRingerModeServiceInt()V
-PLcom/android/server/audio/AudioService;->playSoundEffect(I)V
-PLcom/android/server/audio/AudioService;->playSoundEffectVolume(IF)V
-PLcom/android/server/audio/AudioService;->playerAttributes(ILandroid/media/AudioAttributes;)V
-PLcom/android/server/audio/AudioService;->playerEvent(II)V
+HPLcom/android/server/audio/AudioService;->playSoundEffect(I)V
+HPLcom/android/server/audio/AudioService;->playSoundEffectVolume(IF)V
+HPLcom/android/server/audio/AudioService;->playerAttributes(ILandroid/media/AudioAttributes;)V
+HPLcom/android/server/audio/AudioService;->playerEvent(II)V
+PLcom/android/server/audio/AudioService;->postAccessoryPlugMediaUnmute(I)V
+PLcom/android/server/audio/AudioService;->postObserveDevicesForAllStreams()V
+PLcom/android/server/audio/AudioService;->postSetVolumeIndexOnDevice(IIILjava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->postUpdateRingerModeServiceInt()V
 HSPLcom/android/server/audio/AudioService;->readAndSetLowRamDevice()V
-PLcom/android/server/audio/AudioService;->readAudioSettings(Z)V
+HSPLcom/android/server/audio/AudioService;->readAudioSettings(Z)V
 HSPLcom/android/server/audio/AudioService;->readCameraSoundForced()Z
 HSPLcom/android/server/audio/AudioService;->readDockAudioSettings(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/audio/AudioService;->readPersistedSettings()V
 HSPLcom/android/server/audio/AudioService;->readUserRestrictions()V
-PLcom/android/server/audio/AudioService;->recorderEvent(II)V
+HPLcom/android/server/audio/AudioService;->recorderEvent(II)V
 PLcom/android/server/audio/AudioService;->registerAudioPolicy(Landroid/media/audiopolicy/AudioPolicyConfig;Landroid/media/audiopolicy/IAudioPolicyCallback;ZZZZLandroid/media/projection/IMediaProjection;)Ljava/lang/String;
 PLcom/android/server/audio/AudioService;->registerAudioServerStateDispatcher(Landroid/media/IAudioServerStateDispatcher;)V
 HSPLcom/android/server/audio/AudioService;->registerPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;)V
 PLcom/android/server/audio/AudioService;->registerRecordingCallback(Landroid/media/IRecordingConfigDispatcher;)V
-PLcom/android/server/audio/AudioService;->releasePlayer(I)V
-PLcom/android/server/audio/AudioService;->releaseRecorder(I)V
-PLcom/android/server/audio/AudioService;->requestAudioFocus(Landroid/media/AudioAttributes;ILandroid/os/IBinder;Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Ljava/lang/String;ILandroid/media/audiopolicy/IAudioPolicyCallback;I)I
+HPLcom/android/server/audio/AudioService;->releasePlayer(I)V
+HPLcom/android/server/audio/AudioService;->releaseRecorder(I)V
+HPLcom/android/server/audio/AudioService;->requestAudioFocus(Landroid/media/AudioAttributes;ILandroid/os/IBinder;Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Ljava/lang/String;ILandroid/media/audiopolicy/IAudioPolicyCallback;I)I
 HSPLcom/android/server/audio/AudioService;->rescaleIndex(III)I
-PLcom/android/server/audio/AudioService;->rescaleStep(III)I
-PLcom/android/server/audio/AudioService;->safeMediaVolumeIndex(I)I
+HPLcom/android/server/audio/AudioService;->rescaleStep(III)I
+HSPLcom/android/server/audio/AudioService;->safeMediaVolumeIndex(I)I
+PLcom/android/server/audio/AudioService;->safeMediaVolumeStateToString(I)Ljava/lang/String;
+PLcom/android/server/audio/AudioService;->saveMusicActiveMs()V
 HSPLcom/android/server/audio/AudioService;->scheduleLoadSoundEffects()V
 HSPLcom/android/server/audio/AudioService;->sendBroadcastToAll(Landroid/content/Intent;)V
 HSPLcom/android/server/audio/AudioService;->sendEnabledSurroundFormats(Landroid/content/ContentResolver;Z)V
@@ -5874,154 +9472,267 @@
 HSPLcom/android/server/audio/AudioService;->sendMsg(Landroid/os/Handler;IIIILjava/lang/Object;I)V
 HSPLcom/android/server/audio/AudioService;->sendStickyBroadcastToAll(Landroid/content/Intent;)V
 HPLcom/android/server/audio/AudioService;->sendVolumeUpdate(IIIII)V
-PLcom/android/server/audio/AudioService;->setBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent(Landroid/bluetooth/BluetoothDevice;IIZI)V
-PLcom/android/server/audio/AudioService;->setBluetoothA2dpOn(Z)V
-PLcom/android/server/audio/AudioService;->setDeviceVolume(Lcom/android/server/audio/AudioService$VolumeStreamState;I)V
+PLcom/android/server/audio/AudioService;->setAllowedCapturePolicy(I)I
+HPLcom/android/server/audio/AudioService;->setBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent(Landroid/bluetooth/BluetoothDevice;IIZI)V
+HPLcom/android/server/audio/AudioService;->setBluetoothA2dpOn(Z)V
+HPLcom/android/server/audio/AudioService;->setBluetoothScoOn(Z)V
+HPLcom/android/server/audio/AudioService;->setDeviceVolume(Lcom/android/server/audio/AudioService$VolumeStreamState;I)V
 HSPLcom/android/server/audio/AudioService;->setMicMuteFromSwitchInput()V
+PLcom/android/server/audio/AudioService;->setMicrophoneMute(ZLjava/lang/String;I)V
 HSPLcom/android/server/audio/AudioService;->setMicrophoneMuteNoCallerCheck(I)V
+HPLcom/android/server/audio/AudioService;->setMode(ILandroid/os/IBinder;Ljava/lang/String;)V
+HPLcom/android/server/audio/AudioService;->setModeInt(ILandroid/os/IBinder;ILjava/lang/String;)I
 HSPLcom/android/server/audio/AudioService;->setRingerMode(ILjava/lang/String;Z)V
 HSPLcom/android/server/audio/AudioService;->setRingerModeExt(I)V
+PLcom/android/server/audio/AudioService;->setRingerModeExternal(ILjava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->setRingerModeInt(IZ)V
 HSPLcom/android/server/audio/AudioService;->setRingerModeInternal(ILjava/lang/String;)V
 PLcom/android/server/audio/AudioService;->setRingtonePlayer(Landroid/media/IRingtonePlayer;)V
-PLcom/android/server/audio/AudioService;->setStreamVolume(IIILjava/lang/String;)V
-PLcom/android/server/audio/AudioService;->setStreamVolume(IIILjava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/audio/AudioService;->setStreamVolumeInt(IIIZLjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->setSafeMediaVolumeEnabled(ZLjava/lang/String;)V
+HPLcom/android/server/audio/AudioService;->setSpeakerphoneOn(Z)V
+HPLcom/android/server/audio/AudioService;->setStreamVolume(IIILjava/lang/String;)V
+HPLcom/android/server/audio/AudioService;->setStreamVolume(IIILjava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/audio/AudioService;->setStreamVolumeInt(IIIZLjava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->setSystemAudioMute(Z)V
-PLcom/android/server/audio/AudioService;->setSystemAudioVolume(IIII)V
+HPLcom/android/server/audio/AudioService;->setSystemAudioVolume(IIII)V
 PLcom/android/server/audio/AudioService;->setVolumeController(Landroid/media/IVolumeController;)V
 PLcom/android/server/audio/AudioService;->setVolumePolicy(Landroid/media/VolumePolicy;)V
+PLcom/android/server/audio/AudioService;->setWiredDeviceConnectionState(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->shouldZenMuteStream(I)Z
+PLcom/android/server/audio/AudioService;->silenceRingerModeInternal(Ljava/lang/String;)V
+PLcom/android/server/audio/AudioService;->startBluetoothSco(Landroid/os/IBinder;I)V
+PLcom/android/server/audio/AudioService;->startBluetoothScoInt(Landroid/os/IBinder;ILjava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo;
+HPLcom/android/server/audio/AudioService;->stopBluetoothSco(Landroid/os/IBinder;)V
 HSPLcom/android/server/audio/AudioService;->systemReady()V
 HSPLcom/android/server/audio/AudioService;->trackPlayer(Landroid/media/PlayerBase$PlayerIdCard;)I
-PLcom/android/server/audio/AudioService;->trackRecorder(Landroid/os/IBinder;)I
+HPLcom/android/server/audio/AudioService;->trackRecorder(Landroid/os/IBinder;)I
+PLcom/android/server/audio/AudioService;->unloadSoundEffects()V
+PLcom/android/server/audio/AudioService;->unregisterAudioPolicy(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
 PLcom/android/server/audio/AudioService;->unregisterAudioPolicyAsync(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
 PLcom/android/server/audio/AudioService;->unregisterAudioPolicyInt(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
+PLcom/android/server/audio/AudioService;->unregisterAudioServerStateDispatcher(Landroid/media/IAudioServerStateDispatcher;)V
 PLcom/android/server/audio/AudioService;->unregisterPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;)V
 PLcom/android/server/audio/AudioService;->unregisterRecordingCallback(Landroid/media/IRecordingConfigDispatcher;)V
 HSPLcom/android/server/audio/AudioService;->updateA11yVolumeAlias(Z)V
+PLcom/android/server/audio/AudioService;->updateAbsVolumeMultiModeDevices(II)V
 HSPLcom/android/server/audio/AudioService;->updateAssistantUId(Z)V
 HSPLcom/android/server/audio/AudioService;->updateAudioHalPids()V
 HSPLcom/android/server/audio/AudioService;->updateDefaultStreamOverrideDelay(Z)V
 HSPLcom/android/server/audio/AudioService;->updateDefaultVolumes()V
-PLcom/android/server/audio/AudioService;->updateFlagsForTvPlatform(I)I
+HPLcom/android/server/audio/AudioService;->updateFlagsForTvPlatform(I)I
 HSPLcom/android/server/audio/AudioService;->updateMasterBalance(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/audio/AudioService;->updateMasterMono(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/audio/AudioService;->updateRingerAndZenModeAffectedStreams()Z
 HSPLcom/android/server/audio/AudioService;->updateRttEanbled(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/audio/AudioService;->updateStreamVolumeAlias(ZLjava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->updateZenModeAffectedStreams()Z
-PLcom/android/server/audio/AudioService;->volumeAdjustmentAllowedByDnd(II)Z
+HSPLcom/android/server/audio/AudioService;->validateAudioAttributesUsage(Landroid/media/AudioAttributes;)V
+HPLcom/android/server/audio/AudioService;->volumeAdjustmentAllowedByDnd(II)Z
 HSPLcom/android/server/audio/AudioService;->waitForAudioHandlerCreation()V
+HPLcom/android/server/audio/AudioService;->wasStreamActiveRecently(II)Z
+PLcom/android/server/audio/AudioService;->wouldToggleZenMode(I)Z
 HSPLcom/android/server/audio/AudioServiceEvents$ForceUseEvent;-><init>(IILjava/lang/String;)V
-PLcom/android/server/audio/AudioServiceEvents$ForceUseEvent;->eventToString()Ljava/lang/String;
-PLcom/android/server/audio/AudioServiceEvents$VolumeEvent;-><init>(II)V
-PLcom/android/server/audio/AudioServiceEvents$VolumeEvent;-><init>(IIIILjava/lang/String;)V
-PLcom/android/server/audio/AudioServiceEvents$VolumeEvent;->eventToString()Ljava/lang/String;
+HPLcom/android/server/audio/AudioServiceEvents$ForceUseEvent;->eventToString()Ljava/lang/String;
+PLcom/android/server/audio/AudioServiceEvents$PhoneStateEvent;-><init>(Ljava/lang/String;IIII)V
+HPLcom/android/server/audio/AudioServiceEvents$PhoneStateEvent;->eventToString()Ljava/lang/String;
+HPLcom/android/server/audio/AudioServiceEvents$VolumeEvent;-><init>(II)V
+HPLcom/android/server/audio/AudioServiceEvents$VolumeEvent;-><init>(IIIILjava/lang/String;)V
+HPLcom/android/server/audio/AudioServiceEvents$VolumeEvent;->eventToString()Ljava/lang/String;
+PLcom/android/server/audio/AudioServiceEvents$WiredDevConnectEvent;-><init>(Lcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;)V
+PLcom/android/server/audio/AudioServiceEvents$WiredDevConnectEvent;->eventToString()Ljava/lang/String;
+HSPLcom/android/server/audio/AudioSystemAdapter;-><init>()V
+HSPLcom/android/server/audio/AudioSystemAdapter;->getDefaultAdapter()Lcom/android/server/audio/AudioSystemAdapter;
+PLcom/android/server/audio/AudioSystemAdapter;->handleDeviceConfigChange(ILjava/lang/String;Ljava/lang/String;I)I
+HPLcom/android/server/audio/AudioSystemAdapter;->setDeviceConnectionState(IILjava/lang/String;Ljava/lang/String;I)I
+PLcom/android/server/audio/AudioSystemAdapter;->setParameters(Ljava/lang/String;)I
 HSPLcom/android/server/audio/BtHelper$1;-><init>(Lcom/android/server/audio/BtHelper;)V
 PLcom/android/server/audio/BtHelper$1;->onServiceConnected(ILandroid/bluetooth/BluetoothProfile;)V
 PLcom/android/server/audio/BtHelper$1;->onServiceDisconnected(I)V
 PLcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;-><init>(Landroid/bluetooth/BluetoothDevice;)V
-PLcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;-><init>(Landroid/bluetooth/BluetoothDevice;II)V
+HPLcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;-><init>(Landroid/bluetooth/BluetoothDevice;II)V
 PLcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;->getBtDevice()Landroid/bluetooth/BluetoothDevice;
 PLcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;->getCodec()I
 PLcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;->getVolume()I
+PLcom/android/server/audio/BtHelper$ScoClient;-><init>(Lcom/android/server/audio/BtHelper;Landroid/os/IBinder;)V
+PLcom/android/server/audio/BtHelper$ScoClient;->clearCount(Z)V
+PLcom/android/server/audio/BtHelper$ScoClient;->decCount()V
+PLcom/android/server/audio/BtHelper$ScoClient;->getBinder()Landroid/os/IBinder;
+PLcom/android/server/audio/BtHelper$ScoClient;->getCount()I
+PLcom/android/server/audio/BtHelper$ScoClient;->getPid()I
+PLcom/android/server/audio/BtHelper$ScoClient;->incCount(I)V
+PLcom/android/server/audio/BtHelper$ScoClient;->requestScoState(II)Z
+PLcom/android/server/audio/BtHelper$ScoClient;->totalCount()I
 HSPLcom/android/server/audio/BtHelper;-><init>(Lcom/android/server/audio/AudioDeviceBroker;)V
 PLcom/android/server/audio/BtHelper;->a2dpDeviceEventToString(I)Ljava/lang/String;
 PLcom/android/server/audio/BtHelper;->access$000(Lcom/android/server/audio/BtHelper;)Lcom/android/server/audio/AudioDeviceBroker;
+PLcom/android/server/audio/BtHelper;->access$100(Lcom/android/server/audio/BtHelper;)Ljava/util/ArrayList;
+PLcom/android/server/audio/BtHelper;->access$1000(Landroid/bluetooth/BluetoothHeadset;Landroid/bluetooth/BluetoothDevice;I)Z
+PLcom/android/server/audio/BtHelper;->access$200(Lcom/android/server/audio/BtHelper;)V
+PLcom/android/server/audio/BtHelper;->access$300(Lcom/android/server/audio/BtHelper;I)V
+PLcom/android/server/audio/BtHelper;->access$400(Lcom/android/server/audio/BtHelper;)I
+PLcom/android/server/audio/BtHelper;->access$402(Lcom/android/server/audio/BtHelper;I)I
+PLcom/android/server/audio/BtHelper;->access$500(Lcom/android/server/audio/BtHelper;)I
+PLcom/android/server/audio/BtHelper;->access$502(Lcom/android/server/audio/BtHelper;I)I
+PLcom/android/server/audio/BtHelper;->access$600(Lcom/android/server/audio/BtHelper;)Landroid/bluetooth/BluetoothDevice;
+PLcom/android/server/audio/BtHelper;->access$700(Lcom/android/server/audio/BtHelper;)Landroid/bluetooth/BluetoothHeadset;
+PLcom/android/server/audio/BtHelper;->access$900(Landroid/bluetooth/BluetoothHeadset;Landroid/bluetooth/BluetoothDevice;I)Z
 HSPLcom/android/server/audio/BtHelper;->broadcastScoConnectionState(I)V
 PLcom/android/server/audio/BtHelper;->checkScoAudioState()V
 HSPLcom/android/server/audio/BtHelper;->clearAllScoClients(IZ)V
+PLcom/android/server/audio/BtHelper;->connectBluetoothScoAudioHelper(Landroid/bluetooth/BluetoothHeadset;Landroid/bluetooth/BluetoothDevice;I)Z
 PLcom/android/server/audio/BtHelper;->disconnectAllBluetoothProfiles()V
+PLcom/android/server/audio/BtHelper;->disconnectBluetoothSco(I)V
+PLcom/android/server/audio/BtHelper;->disconnectBluetoothScoAudioHelper(Landroid/bluetooth/BluetoothHeadset;Landroid/bluetooth/BluetoothDevice;I)Z
 PLcom/android/server/audio/BtHelper;->disconnectHeadset()V
-PLcom/android/server/audio/BtHelper;->getA2dpCodec(Landroid/bluetooth/BluetoothDevice;)I
+HPLcom/android/server/audio/BtHelper;->getA2dpCodec(Landroid/bluetooth/BluetoothDevice;)I
 HSPLcom/android/server/audio/BtHelper;->getBluetoothHeadset()Z
-PLcom/android/server/audio/BtHelper;->handleBtScoActiveDeviceChange(Landroid/bluetooth/BluetoothDevice;Z)Z
+PLcom/android/server/audio/BtHelper;->getName(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;
+HPLcom/android/server/audio/BtHelper;->getScoClient(Landroid/os/IBinder;Z)Lcom/android/server/audio/BtHelper$ScoClient;
+HPLcom/android/server/audio/BtHelper;->handleBtScoActiveDeviceChange(Landroid/bluetooth/BluetoothDevice;Z)Z
 HSPLcom/android/server/audio/BtHelper;->isAvrcpAbsoluteVolumeSupported()Z
+PLcom/android/server/audio/BtHelper;->isBluetoothScoOn()Z
+PLcom/android/server/audio/BtHelper;->mapBluetoothCodecToAudioFormat(I)I
 PLcom/android/server/audio/BtHelper;->onA2dpProfileConnected(Landroid/bluetooth/BluetoothA2dp;)V
+PLcom/android/server/audio/BtHelper;->onAudioServerDiedRestoreA2dp()V
 HSPLcom/android/server/audio/BtHelper;->onBroadcastScoConnectionState(I)V
 PLcom/android/server/audio/BtHelper;->onHeadsetProfileConnected(Landroid/bluetooth/BluetoothHeadset;)V
 PLcom/android/server/audio/BtHelper;->onHearingAidProfileConnected(Landroid/bluetooth/BluetoothHearingAid;)V
 HSPLcom/android/server/audio/BtHelper;->onSystemReady()V
-PLcom/android/server/audio/BtHelper;->receiveBtEvent(Landroid/content/Intent;)V
+HPLcom/android/server/audio/BtHelper;->receiveBtEvent(Landroid/content/Intent;)V
 HSPLcom/android/server/audio/BtHelper;->resetBluetoothSco()V
 HSPLcom/android/server/audio/BtHelper;->sendStickyBroadcastToAll(Landroid/content/Intent;)V
-PLcom/android/server/audio/BtHelper;->setAvrcpAbsoluteVolumeIndex(I)V
-PLcom/android/server/audio/BtHelper;->setAvrcpAbsoluteVolumeSupported(Z)V
-PLcom/android/server/audio/BtHelper;->setBtScoActiveDevice(Landroid/bluetooth/BluetoothDevice;)V
-PLcom/android/server/audio/FocusRequester;-><init>(Landroid/media/AudioAttributes;IILandroid/media/IAudioFocusDispatcher;Landroid/os/IBinder;Ljava/lang/String;Lcom/android/server/audio/MediaFocusControl$AudioFocusDeathHandler;Ljava/lang/String;ILcom/android/server/audio/MediaFocusControl;I)V
-PLcom/android/server/audio/FocusRequester;->finalize()V
+HPLcom/android/server/audio/BtHelper;->setAvrcpAbsoluteVolumeIndex(I)V
+HPLcom/android/server/audio/BtHelper;->setAvrcpAbsoluteVolumeSupported(Z)V
+HPLcom/android/server/audio/BtHelper;->setBtScoActiveDevice(Landroid/bluetooth/BluetoothDevice;)V
+PLcom/android/server/audio/BtHelper;->startBluetoothScoForClient(Landroid/os/IBinder;ILjava/lang/String;)V
+HPLcom/android/server/audio/BtHelper;->stopBluetoothScoForClient(Landroid/os/IBinder;Ljava/lang/String;)V
+HPLcom/android/server/audio/FocusRequester;-><init>(Landroid/media/AudioAttributes;IILandroid/media/IAudioFocusDispatcher;Landroid/os/IBinder;Ljava/lang/String;Lcom/android/server/audio/MediaFocusControl$AudioFocusDeathHandler;Ljava/lang/String;ILcom/android/server/audio/MediaFocusControl;I)V
+PLcom/android/server/audio/FocusRequester;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/audio/FocusRequester;->finalize()V
+PLcom/android/server/audio/FocusRequester;->flagsToString(I)Ljava/lang/String;
+PLcom/android/server/audio/FocusRequester;->focusChangeToString(I)Ljava/lang/String;
+PLcom/android/server/audio/FocusRequester;->focusGainToString()Ljava/lang/String;
 PLcom/android/server/audio/FocusRequester;->focusLossForGainRequest(I)I
-PLcom/android/server/audio/FocusRequester;->frameworkHandleFocusLoss(ILcom/android/server/audio/FocusRequester;Z)Z
+PLcom/android/server/audio/FocusRequester;->focusLossToString()Ljava/lang/String;
+HPLcom/android/server/audio/FocusRequester;->frameworkHandleFocusLoss(ILcom/android/server/audio/FocusRequester;Z)Z
+PLcom/android/server/audio/FocusRequester;->getClientId()Ljava/lang/String;
 PLcom/android/server/audio/FocusRequester;->getClientUid()I
 PLcom/android/server/audio/FocusRequester;->getGainRequest()I
 PLcom/android/server/audio/FocusRequester;->getGrantFlags()I
-PLcom/android/server/audio/FocusRequester;->handleFocusGainFromRequest(I)V
+PLcom/android/server/audio/FocusRequester;->getSdkTarget()I
+PLcom/android/server/audio/FocusRequester;->handleFocusGain(I)V
+HPLcom/android/server/audio/FocusRequester;->handleFocusGainFromRequest(I)V
 PLcom/android/server/audio/FocusRequester;->handleFocusLoss(ILcom/android/server/audio/FocusRequester;Z)V
 PLcom/android/server/audio/FocusRequester;->handleFocusLossFromGain(ILcom/android/server/audio/FocusRequester;Z)Z
-PLcom/android/server/audio/FocusRequester;->hasSameClient(Ljava/lang/String;)Z
+PLcom/android/server/audio/FocusRequester;->hasSameBinder(Landroid/os/IBinder;)Z
+HPLcom/android/server/audio/FocusRequester;->hasSameClient(Ljava/lang/String;)Z
+PLcom/android/server/audio/FocusRequester;->hasSameUid(I)Z
 PLcom/android/server/audio/FocusRequester;->isLockedFocusOwner()Z
-PLcom/android/server/audio/FocusRequester;->release()V
-PLcom/android/server/audio/FocusRequester;->toAudioFocusInfo()Landroid/media/AudioFocusInfo;
-PLcom/android/server/audio/MediaFocusControl$AudioFocusDeathHandler;-><init>(Lcom/android/server/audio/MediaFocusControl;Landroid/os/IBinder;)V
+HPLcom/android/server/audio/FocusRequester;->release()V
+HPLcom/android/server/audio/FocusRequester;->toAudioFocusInfo()Landroid/media/AudioFocusInfo;
+PLcom/android/server/audio/MediaFocusControl$1;-><init>(Lcom/android/server/audio/MediaFocusControl;Landroid/media/audiopolicy/IAudioPolicyCallback;)V
+PLcom/android/server/audio/MediaFocusControl$1;->run()V
+PLcom/android/server/audio/MediaFocusControl$2;-><init>(Lcom/android/server/audio/MediaFocusControl;Z)V
+PLcom/android/server/audio/MediaFocusControl$2;->run()V
+HPLcom/android/server/audio/MediaFocusControl$AudioFocusDeathHandler;-><init>(Lcom/android/server/audio/MediaFocusControl;Landroid/os/IBinder;)V
+PLcom/android/server/audio/MediaFocusControl$AudioFocusDeathHandler;->binderDied()V
 HSPLcom/android/server/audio/MediaFocusControl;-><clinit>()V
 HSPLcom/android/server/audio/MediaFocusControl;-><init>(Landroid/content/Context;Lcom/android/server/audio/PlayerFocusEnforcer;)V
-PLcom/android/server/audio/MediaFocusControl;->abandonAudioFocus(Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Landroid/media/AudioAttributes;Ljava/lang/String;)I
-PLcom/android/server/audio/MediaFocusControl;->canReassignAudioFocus()Z
-PLcom/android/server/audio/MediaFocusControl;->discardAudioFocusOwner()V
+HPLcom/android/server/audio/MediaFocusControl;->abandonAudioFocus(Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Landroid/media/AudioAttributes;Ljava/lang/String;)I
+PLcom/android/server/audio/MediaFocusControl;->access$000()Ljava/lang/Object;
+PLcom/android/server/audio/MediaFocusControl;->access$100(Lcom/android/server/audio/MediaFocusControl;)Landroid/media/audiopolicy/IAudioPolicyCallback;
+PLcom/android/server/audio/MediaFocusControl;->access$300(Lcom/android/server/audio/MediaFocusControl;Landroid/os/IBinder;)V
+PLcom/android/server/audio/MediaFocusControl;->access$400(Lcom/android/server/audio/MediaFocusControl;)Ljava/util/Stack;
+PLcom/android/server/audio/MediaFocusControl;->access$500(Lcom/android/server/audio/MediaFocusControl;)Z
+PLcom/android/server/audio/MediaFocusControl;->access$600()[I
+PLcom/android/server/audio/MediaFocusControl;->access$700(Lcom/android/server/audio/MediaFocusControl;)Lcom/android/server/audio/PlayerFocusEnforcer;
+PLcom/android/server/audio/MediaFocusControl;->addFocusFollower(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
+HPLcom/android/server/audio/MediaFocusControl;->canReassignAudioFocus()Z
+HSPLcom/android/server/audio/MediaFocusControl;->discardAudioFocusOwner()V
+PLcom/android/server/audio/MediaFocusControl;->duckPlayers(Lcom/android/server/audio/FocusRequester;Lcom/android/server/audio/FocusRequester;Z)Z
 PLcom/android/server/audio/MediaFocusControl;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/audio/MediaFocusControl;->dumpFocusStack(Ljava/io/PrintWriter;)V
-PLcom/android/server/audio/MediaFocusControl;->getCurrentAudioFocus()I
+HSPLcom/android/server/audio/MediaFocusControl;->getCurrentAudioFocus()I
 HSPLcom/android/server/audio/MediaFocusControl;->getFocusRampTimeMs(ILandroid/media/AudioAttributes;)I
 PLcom/android/server/audio/MediaFocusControl;->hasAudioFocusUsers()Z
-PLcom/android/server/audio/MediaFocusControl;->notifyExtPolicyFocusGrant_syncAf(Landroid/media/AudioFocusInfo;I)V
-PLcom/android/server/audio/MediaFocusControl;->notifyExtPolicyFocusLoss_syncAf(Landroid/media/AudioFocusInfo;Z)V
-PLcom/android/server/audio/MediaFocusControl;->propagateFocusLossFromGain_syncAf(ILcom/android/server/audio/FocusRequester;Z)V
-PLcom/android/server/audio/MediaFocusControl;->removeFocusStackEntry(Ljava/lang/String;ZZ)V
-PLcom/android/server/audio/MediaFocusControl;->requestAudioFocus(Landroid/media/AudioAttributes;ILandroid/os/IBinder;Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Ljava/lang/String;IIZ)I
-PLcom/android/server/audio/PlaybackActivityMonitor$AudioAttrEvent;-><init>(ILandroid/media/AudioAttributes;)V
+PLcom/android/server/audio/MediaFocusControl;->isLockedFocusOwner(Lcom/android/server/audio/FocusRequester;)Z
+PLcom/android/server/audio/MediaFocusControl;->mustNotifyFocusOwnerOnDuck()Z
+PLcom/android/server/audio/MediaFocusControl;->noFocusForSuspendedApp(Ljava/lang/String;I)V
+PLcom/android/server/audio/MediaFocusControl;->notifyExtPolicyCurrentFocusAsync(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
+HPLcom/android/server/audio/MediaFocusControl;->notifyExtPolicyFocusGrant_syncAf(Landroid/media/AudioFocusInfo;I)V
+HPLcom/android/server/audio/MediaFocusControl;->notifyExtPolicyFocusLoss_syncAf(Landroid/media/AudioFocusInfo;Z)V
+HPLcom/android/server/audio/MediaFocusControl;->notifyTopOfAudioFocusStack()V
+HPLcom/android/server/audio/MediaFocusControl;->propagateFocusLossFromGain_syncAf(ILcom/android/server/audio/FocusRequester;Z)V
+PLcom/android/server/audio/MediaFocusControl;->pushBelowLockedFocusOwners(Lcom/android/server/audio/FocusRequester;)I
+PLcom/android/server/audio/MediaFocusControl;->removeFocusFollower(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
+HPLcom/android/server/audio/MediaFocusControl;->removeFocusStackEntry(Ljava/lang/String;ZZ)V
+PLcom/android/server/audio/MediaFocusControl;->removeFocusStackEntryOnDeath(Landroid/os/IBinder;)V
+HPLcom/android/server/audio/MediaFocusControl;->requestAudioFocus(Landroid/media/AudioAttributes;ILandroid/os/IBinder;Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Ljava/lang/String;IIZ)I
+PLcom/android/server/audio/MediaFocusControl;->runAudioCheckerForRingOrCallAsync(Z)V
+PLcom/android/server/audio/MediaFocusControl;->unduckPlayers(Lcom/android/server/audio/FocusRequester;)V
+HPLcom/android/server/audio/PlaybackActivityMonitor$AudioAttrEvent;-><init>(ILandroid/media/AudioAttributes;)V
 PLcom/android/server/audio/PlaybackActivityMonitor$AudioAttrEvent;->eventToString()Ljava/lang/String;
+PLcom/android/server/audio/PlaybackActivityMonitor$DuckEvent;-><init>(Landroid/media/AudioPlaybackConfiguration;Z)V
+HPLcom/android/server/audio/PlaybackActivityMonitor$DuckEvent;->eventToString()Ljava/lang/String;
+PLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager$DuckedApp;-><init>(I)V
+HPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager$DuckedApp;->addDuck(Landroid/media/AudioPlaybackConfiguration;Z)V
+PLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager$DuckedApp;->removeReleased(Landroid/media/AudioPlaybackConfiguration;)V
+HPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager$DuckedApp;->removeUnduckAll(Ljava/util/HashMap;)V
 HSPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;-><init>()V
 HSPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;-><init>(Lcom/android/server/audio/PlaybackActivityMonitor$1;)V
-PLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->checkDuck(Landroid/media/AudioPlaybackConfiguration;)V
+HPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->checkDuck(Landroid/media/AudioPlaybackConfiguration;)V
+HPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->duckUid(ILjava/util/ArrayList;)V
 PLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->removeReleased(Landroid/media/AudioPlaybackConfiguration;)V
-PLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->unduckUid(ILjava/util/HashMap;)V
+HPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->removeReleased(Landroid/media/AudioPlaybackConfiguration;)V
+HPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->unduckUid(ILjava/util/HashMap;)V
 HSPLcom/android/server/audio/PlaybackActivityMonitor$NewPlayerEvent;-><init>(Landroid/media/AudioPlaybackConfiguration;)V
-PLcom/android/server/audio/PlaybackActivityMonitor$NewPlayerEvent;->eventToString()Ljava/lang/String;
+HPLcom/android/server/audio/PlaybackActivityMonitor$NewPlayerEvent;->eventToString()Ljava/lang/String;
 HSPLcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;-><init>(Landroid/media/IPlaybackConfigDispatcher;Z)V
 PLcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;->binderDied()V
 HSPLcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;->init()Z
+PLcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;->release()V
 HPLcom/android/server/audio/PlaybackActivityMonitor$PlayerEvent;-><init>(II)V
-PLcom/android/server/audio/PlaybackActivityMonitor$PlayerEvent;->eventToString()Ljava/lang/String;
+HPLcom/android/server/audio/PlaybackActivityMonitor$PlayerEvent;->eventToString()Ljava/lang/String;
 HSPLcom/android/server/audio/PlaybackActivityMonitor;-><clinit>()V
 HSPLcom/android/server/audio/PlaybackActivityMonitor;-><init>(Landroid/content/Context;I)V
-PLcom/android/server/audio/PlaybackActivityMonitor;->anonymizeForPublicConsumption(Ljava/util/List;)Ljava/util/ArrayList;
-PLcom/android/server/audio/PlaybackActivityMonitor;->checkConfigurationCaller(ILandroid/media/AudioPlaybackConfiguration;I)Z
-PLcom/android/server/audio/PlaybackActivityMonitor;->checkVolumeForPrivilegedAlarm(Landroid/media/AudioPlaybackConfiguration;I)V
+PLcom/android/server/audio/PlaybackActivityMonitor;->access$100()Lcom/android/server/audio/AudioEventLogger;
+PLcom/android/server/audio/PlaybackActivityMonitor;->access$200()Landroid/media/VolumeShaper$Configuration;
+PLcom/android/server/audio/PlaybackActivityMonitor;->access$300()Landroid/media/VolumeShaper$Operation;
+PLcom/android/server/audio/PlaybackActivityMonitor;->access$400()Landroid/media/VolumeShaper$Operation;
+PLcom/android/server/audio/PlaybackActivityMonitor;->access$500()Landroid/media/VolumeShaper$Configuration;
+HPLcom/android/server/audio/PlaybackActivityMonitor;->anonymizeForPublicConsumption(Ljava/util/List;)Ljava/util/ArrayList;
+HPLcom/android/server/audio/PlaybackActivityMonitor;->checkConfigurationCaller(ILandroid/media/AudioPlaybackConfiguration;I)Z
+HPLcom/android/server/audio/PlaybackActivityMonitor;->checkVolumeForPrivilegedAlarm(Landroid/media/AudioPlaybackConfiguration;I)V
 HPLcom/android/server/audio/PlaybackActivityMonitor;->dispatchPlaybackChange(Z)V
-PLcom/android/server/audio/PlaybackActivityMonitor;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/audio/PlaybackActivityMonitor;->getActivePlaybackConfigurations(Z)Ljava/util/List;
-PLcom/android/server/audio/PlaybackActivityMonitor;->playerAttributes(ILandroid/media/AudioAttributes;I)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->duckPlayers(Lcom/android/server/audio/FocusRequester;Lcom/android/server/audio/FocusRequester;Z)Z
+HPLcom/android/server/audio/PlaybackActivityMonitor;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->getActivePlaybackConfigurations(Z)Ljava/util/List;
+HPLcom/android/server/audio/PlaybackActivityMonitor;->mutePlayersForCall([I)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->playerAttributes(ILandroid/media/AudioAttributes;I)V
 PLcom/android/server/audio/PlaybackActivityMonitor;->playerDeath(I)V
-PLcom/android/server/audio/PlaybackActivityMonitor;->playerEvent(III)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->playerEvent(III)V
 HSPLcom/android/server/audio/PlaybackActivityMonitor;->registerPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;Z)V
-PLcom/android/server/audio/PlaybackActivityMonitor;->releasePlayer(II)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->releasePlayer(II)V
+PLcom/android/server/audio/PlaybackActivityMonitor;->setAllowedCapturePolicy(II)V
 HSPLcom/android/server/audio/PlaybackActivityMonitor;->trackPlayer(Landroid/media/PlayerBase$PlayerIdCard;)I
 PLcom/android/server/audio/PlaybackActivityMonitor;->unduckPlayers(Lcom/android/server/audio/FocusRequester;)V
-PLcom/android/server/audio/PlaybackActivityMonitor;->unregisterPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->unmutePlayersForCall()V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->unregisterPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;)V
+PLcom/android/server/audio/PlaybackActivityMonitor;->updateAllowedCapturePolicy(Landroid/media/AudioPlaybackConfiguration;I)V
 PLcom/android/server/audio/RecordingActivityMonitor$RecMonitorClient;-><init>(Landroid/media/IRecordingConfigDispatcher;Z)V
 PLcom/android/server/audio/RecordingActivityMonitor$RecMonitorClient;->binderDied()V
 PLcom/android/server/audio/RecordingActivityMonitor$RecMonitorClient;->init()Z
 PLcom/android/server/audio/RecordingActivityMonitor$RecMonitorClient;->release()V
-PLcom/android/server/audio/RecordingActivityMonitor$RecorderDeathHandler;-><init>(ILandroid/os/IBinder;)V
-PLcom/android/server/audio/RecordingActivityMonitor$RecorderDeathHandler;->init()Z
-PLcom/android/server/audio/RecordingActivityMonitor$RecorderDeathHandler;->release()V
-PLcom/android/server/audio/RecordingActivityMonitor$RecordingEvent;-><init>(IILandroid/media/AudioRecordingConfiguration;)V
-PLcom/android/server/audio/RecordingActivityMonitor$RecordingEvent;->eventToString()Ljava/lang/String;
-PLcom/android/server/audio/RecordingActivityMonitor$RecordingEvent;->recordEventToString(I)Ljava/lang/String;
-PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;-><init>(ILcom/android/server/audio/RecordingActivityMonitor$RecorderDeathHandler;)V
+HPLcom/android/server/audio/RecordingActivityMonitor$RecorderDeathHandler;-><init>(ILandroid/os/IBinder;)V
+PLcom/android/server/audio/RecordingActivityMonitor$RecorderDeathHandler;->binderDied()V
+HPLcom/android/server/audio/RecordingActivityMonitor$RecorderDeathHandler;->init()Z
+HPLcom/android/server/audio/RecordingActivityMonitor$RecorderDeathHandler;->release()V
+HPLcom/android/server/audio/RecordingActivityMonitor$RecordingEvent;-><init>(IILandroid/media/AudioRecordingConfiguration;)V
+HPLcom/android/server/audio/RecordingActivityMonitor$RecordingEvent;->eventToString()Ljava/lang/String;
+HPLcom/android/server/audio/RecordingActivityMonitor$RecordingEvent;->recordEventToString(I)Ljava/lang/String;
+HPLcom/android/server/audio/RecordingActivityMonitor$RecordingState;-><init>(ILcom/android/server/audio/RecordingActivityMonitor$RecorderDeathHandler;)V
+PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->getConfig()Landroid/media/AudioRecordingConfiguration;
 PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->getRiid()I
 PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->hasDeathHandler()Z
@@ -6031,33 +9742,36 @@
 PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->setConfig(Landroid/media/AudioRecordingConfiguration;)Z
 HSPLcom/android/server/audio/RecordingActivityMonitor;-><clinit>()V
 HSPLcom/android/server/audio/RecordingActivityMonitor;-><init>(Landroid/content/Context;)V
-PLcom/android/server/audio/RecordingActivityMonitor;->anonymizeForPublicConsumption(Ljava/util/List;)Ljava/util/ArrayList;
-PLcom/android/server/audio/RecordingActivityMonitor;->createRecordingConfiguration(III[IIZI[Landroid/media/audiofx/AudioEffect$Descriptor;[Landroid/media/audiofx/AudioEffect$Descriptor;)Landroid/media/AudioRecordingConfiguration;
-PLcom/android/server/audio/RecordingActivityMonitor;->dispatchCallbacks(Ljava/util/List;)V
+HPLcom/android/server/audio/RecordingActivityMonitor;->anonymizeForPublicConsumption(Ljava/util/List;)Ljava/util/ArrayList;
+HPLcom/android/server/audio/RecordingActivityMonitor;->createRecordingConfiguration(III[IIZI[Landroid/media/audiofx/AudioEffect$Descriptor;[Landroid/media/audiofx/AudioEffect$Descriptor;)Landroid/media/AudioRecordingConfiguration;
+HPLcom/android/server/audio/RecordingActivityMonitor;->dispatchCallbacks(Ljava/util/List;)V
 PLcom/android/server/audio/RecordingActivityMonitor;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/audio/RecordingActivityMonitor;->findStateByRiid(I)I
-PLcom/android/server/audio/RecordingActivityMonitor;->getActiveRecordingConfigurations(Z)Ljava/util/List;
+HPLcom/android/server/audio/RecordingActivityMonitor;->findStateByRiid(I)I
+HPLcom/android/server/audio/RecordingActivityMonitor;->getActiveRecordingConfigurations(Z)Ljava/util/List;
 HSPLcom/android/server/audio/RecordingActivityMonitor;->initMonitor()V
-PLcom/android/server/audio/RecordingActivityMonitor;->onRecordingConfigurationChanged(IIIIIIZ[I[Landroid/media/audiofx/AudioEffect$Descriptor;[Landroid/media/audiofx/AudioEffect$Descriptor;ILjava/lang/String;)V
-PLcom/android/server/audio/RecordingActivityMonitor;->recorderEvent(II)V
+PLcom/android/server/audio/RecordingActivityMonitor;->onAudioServerDied()V
+HPLcom/android/server/audio/RecordingActivityMonitor;->onRecordingConfigurationChanged(IIIIIIZ[I[Landroid/media/audiofx/AudioEffect$Descriptor;[Landroid/media/audiofx/AudioEffect$Descriptor;ILjava/lang/String;)V
+HPLcom/android/server/audio/RecordingActivityMonitor;->recorderEvent(II)V
 PLcom/android/server/audio/RecordingActivityMonitor;->registerRecordingCallback(Landroid/media/IRecordingConfigDispatcher;Z)V
-PLcom/android/server/audio/RecordingActivityMonitor;->releaseRecorder(I)V
-PLcom/android/server/audio/RecordingActivityMonitor;->trackRecorder(Landroid/os/IBinder;)I
-PLcom/android/server/audio/RecordingActivityMonitor;->unregisterRecordingCallback(Landroid/media/IRecordingConfigDispatcher;)V
-PLcom/android/server/audio/RecordingActivityMonitor;->updateSnapshot(IILandroid/media/AudioRecordingConfiguration;)Ljava/util/List;
+HPLcom/android/server/audio/RecordingActivityMonitor;->releaseRecorder(I)V
+HPLcom/android/server/audio/RecordingActivityMonitor;->trackRecorder(Landroid/os/IBinder;)I
+HPLcom/android/server/audio/RecordingActivityMonitor;->unregisterRecordingCallback(Landroid/media/IRecordingConfigDispatcher;)V
+HPLcom/android/server/audio/RecordingActivityMonitor;->updateSnapshot(IILandroid/media/AudioRecordingConfiguration;)Ljava/util/List;
 HSPLcom/android/server/audio/RotationHelper$AudioDisplayListener;-><init>()V
+PLcom/android/server/audio/RotationHelper$AudioDisplayListener;->onDisplayAdded(I)V
 HSPLcom/android/server/audio/RotationHelper$AudioDisplayListener;->onDisplayChanged(I)V
+PLcom/android/server/audio/RotationHelper$AudioDisplayListener;->onDisplayRemoved(I)V
 HSPLcom/android/server/audio/RotationHelper;-><clinit>()V
-PLcom/android/server/audio/RotationHelper;->disable()V
+HPLcom/android/server/audio/RotationHelper;->disable()V
 HSPLcom/android/server/audio/RotationHelper;->enable()V
 HSPLcom/android/server/audio/RotationHelper;->init(Landroid/content/Context;Landroid/os/Handler;)V
-PLcom/android/server/audio/RotationHelper;->publishRotation(I)V
+HPLcom/android/server/audio/RotationHelper;->publishRotation(I)V
 HSPLcom/android/server/audio/RotationHelper;->updateOrientation()V
 HSPLcom/android/server/audio/SoundEffectsHelper$1;-><init>(Lcom/android/server/audio/SoundEffectsHelper;)V
 HSPLcom/android/server/audio/SoundEffectsHelper$1;->run(Z)V
 HSPLcom/android/server/audio/SoundEffectsHelper$Resource;-><init>(Ljava/lang/String;)V
-PLcom/android/server/audio/SoundEffectsHelper$SfxHandler$1;-><init>(Lcom/android/server/audio/SoundEffectsHelper$SfxHandler;Landroid/os/Message;)V
-PLcom/android/server/audio/SoundEffectsHelper$SfxHandler$1;->run(Z)V
+HPLcom/android/server/audio/SoundEffectsHelper$SfxHandler$1;-><init>(Lcom/android/server/audio/SoundEffectsHelper$SfxHandler;Landroid/os/Message;)V
+HPLcom/android/server/audio/SoundEffectsHelper$SfxHandler$1;->run(Z)V
 HSPLcom/android/server/audio/SoundEffectsHelper$SfxHandler;-><init>(Lcom/android/server/audio/SoundEffectsHelper;)V
 HSPLcom/android/server/audio/SoundEffectsHelper$SfxHandler;-><init>(Lcom/android/server/audio/SoundEffectsHelper;Lcom/android/server/audio/SoundEffectsHelper$1;)V
 HSPLcom/android/server/audio/SoundEffectsHelper$SfxHandler;->handleMessage(Landroid/os/Message;)V
@@ -6083,9 +9797,12 @@
 HSPLcom/android/server/audio/SoundEffectsHelper;->loadTouchSoundAssets()V
 HSPLcom/android/server/audio/SoundEffectsHelper;->logEvent(Ljava/lang/String;)V
 HSPLcom/android/server/audio/SoundEffectsHelper;->onLoadSoundEffects(Lcom/android/server/audio/SoundEffectsHelper$OnEffectsLoadCompleteHandler;)V
-PLcom/android/server/audio/SoundEffectsHelper;->onPlaySoundEffect(II)V
+HPLcom/android/server/audio/SoundEffectsHelper;->onPlaySoundEffect(II)V
+PLcom/android/server/audio/SoundEffectsHelper;->onUnloadSoundEffects()V
+PLcom/android/server/audio/SoundEffectsHelper;->playSoundEffect(II)V
 HSPLcom/android/server/audio/SoundEffectsHelper;->sendMsg(IIILjava/lang/Object;I)V
 HSPLcom/android/server/audio/SoundEffectsHelper;->startWorker()V
+PLcom/android/server/audio/SoundEffectsHelper;->unloadSoundEffects()V
 PLcom/android/server/autofill/-$$Lambda$AutofillManagerService$1$1-WNu3tTkxodB_LsZ7dGIlvrPN0;-><clinit>()V
 PLcom/android/server/autofill/-$$Lambda$AutofillManagerService$1$1-WNu3tTkxodB_LsZ7dGIlvrPN0;-><init>()V
 PLcom/android/server/autofill/-$$Lambda$AutofillManagerService$1$1-WNu3tTkxodB_LsZ7dGIlvrPN0;->visit(Ljava/lang/Object;)V
@@ -6095,62 +9812,106 @@
 PLcom/android/server/autofill/-$$Lambda$FieldClassificationStrategy$NQQgQ63vxhPkiwOWrnwRyuYSHTM;-><clinit>()V
 PLcom/android/server/autofill/-$$Lambda$FieldClassificationStrategy$NQQgQ63vxhPkiwOWrnwRyuYSHTM;-><init>()V
 PLcom/android/server/autofill/-$$Lambda$FieldClassificationStrategy$NQQgQ63vxhPkiwOWrnwRyuYSHTM;->get(Landroid/content/res/Resources;I)Ljava/lang/Object;
+PLcom/android/server/autofill/-$$Lambda$FieldClassificationStrategy$cXTbqmCb6-V5mVc5dTOipqK5X_E;-><init>(Landroid/os/RemoteCallback;Ljava/util/List;[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
+PLcom/android/server/autofill/-$$Lambda$FieldClassificationStrategy$cXTbqmCb6-V5mVc5dTOipqK5X_E;->run(Landroid/service/autofill/IAutofillFieldClassificationService;)V
 PLcom/android/server/autofill/-$$Lambda$FieldClassificationStrategy$vGIL1YGX_9ksoSV74T7gO4fkEBE;-><clinit>()V
 PLcom/android/server/autofill/-$$Lambda$FieldClassificationStrategy$vGIL1YGX_9ksoSV74T7gO4fkEBE;-><init>()V
 PLcom/android/server/autofill/-$$Lambda$FieldClassificationStrategy$vGIL1YGX_9ksoSV74T7gO4fkEBE;->get(Landroid/content/res/Resources;I)Ljava/lang/Object;
+PLcom/android/server/autofill/-$$Lambda$Helper$laLKWmsGqkFIaRXW5rR6_s66Vsw;-><init>([Ljava/lang/String;)V
+PLcom/android/server/autofill/-$$Lambda$Helper$laLKWmsGqkFIaRXW5rR6_s66Vsw;->matches(Landroid/app/assist/AssistStructure$ViewNode;)Z
+PLcom/android/server/autofill/-$$Lambda$Helper$nK3g_oXXf8NGajcUf0W5JsQzf3w;-><init>(Landroid/view/autofill/AutofillId;)V
+PLcom/android/server/autofill/-$$Lambda$Helper$nK3g_oXXf8NGajcUf0W5JsQzf3w;->matches(Landroid/app/assist/AssistStructure$ViewNode;)Z
 PLcom/android/server/autofill/-$$Lambda$Q-iZrXrDBZAnj-gnbNOhH00i8uU;-><clinit>()V
 PLcom/android/server/autofill/-$$Lambda$Q-iZrXrDBZAnj-gnbNOhH00i8uU;-><init>()V
-PLcom/android/server/autofill/-$$Lambda$Q-iZrXrDBZAnj-gnbNOhH00i8uU;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/autofill/-$$Lambda$Q-iZrXrDBZAnj-gnbNOhH00i8uU;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$W6vVk8kBkoWieb1Jw-BucQNBDsM;-><clinit>()V
+PLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$W6vVk8kBkoWieb1Jw-BucQNBDsM;-><init>()V
+PLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$W6vVk8kBkoWieb1Jw-BucQNBDsM;->runNoResult(Ljava/lang/Object;)V
 PLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$qEoykSLvIU1PeokaPDuPOb0M5U0;-><clinit>()V
 PLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$qEoykSLvIU1PeokaPDuPOb0M5U0;-><init>()V
 PLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$qEoykSLvIU1PeokaPDuPOb0M5U0;->runNoResult(Ljava/lang/Object;)V
+HPLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$v9CqZP_PIroMsV929WlHTKMHOHM;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService;Landroid/view/autofill/IAutoFillManagerClient;IILandroid/content/ComponentName;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;JLandroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;Ljava/util/concurrent/atomic/AtomicReference;)V
+HPLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$v9CqZP_PIroMsV929WlHTKMHOHM;->run(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$yudIvtYKB9W2eb_t3RT2S1y3KiI;-><init>(Landroid/os/ICancellationSignal;)V
 PLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$yudIvtYKB9W2eb_t3RT2S1y3KiI;->run()V
 PLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$z12itmuXxuVLV0rq4Wi5vlNsa0k;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService;Landroid/view/autofill/IAutoFillManagerClient;IILandroid/content/ComponentName;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;JLjava/util/concurrent/atomic/AtomicReference;)V
 PLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$z12itmuXxuVLV0rq4Wi5vlNsa0k;->run(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$zt04rV6kTquQwdDYqT9tjLbRn14;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService;Ljava/util/concurrent/atomic/AtomicReference;Landroid/content/ComponentName;I)V
-PLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$zt04rV6kTquQwdDYqT9tjLbRn14;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$zt04rV6kTquQwdDYqT9tjLbRn14;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService;Ljava/util/concurrent/atomic/AtomicReference;Landroid/content/ComponentName;I)V
+HPLcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$zt04rV6kTquQwdDYqT9tjLbRn14;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/autofill/-$$Lambda$RemoteFillService$KkKWdeiLv0uNTtyjP9VumTTYr-A;-><init>(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/SaveRequest;)V
+PLcom/android/server/autofill/-$$Lambda$RemoteFillService$KkKWdeiLv0uNTtyjP9VumTTYr-A;->run(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/autofill/-$$Lambda$RemoteFillService$MaYOnIAubd8qKbTq0eWkOchXAJk;-><init>(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;)V
-PLcom/android/server/autofill/-$$Lambda$RemoteFillService$MaYOnIAubd8qKbTq0eWkOchXAJk;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/autofill/-$$Lambda$RemoteFillService$RkgpxnfvOIHus8aiIIO_Tqgio1E;-><init>(Lcom/android/server/autofill/RemoteFillService;Ljava/lang/Throwable;Landroid/service/autofill/FillRequest;Landroid/service/autofill/FillResponse;Ljava/util/concurrent/atomic/AtomicReference;)V
-PLcom/android/server/autofill/-$$Lambda$RemoteFillService$RkgpxnfvOIHus8aiIIO_Tqgio1E;->run()V
+HPLcom/android/server/autofill/-$$Lambda$RemoteFillService$MaYOnIAubd8qKbTq0eWkOchXAJk;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/autofill/-$$Lambda$RemoteFillService$RkgpxnfvOIHus8aiIIO_Tqgio1E;-><init>(Lcom/android/server/autofill/RemoteFillService;Ljava/lang/Throwable;Landroid/service/autofill/FillRequest;Landroid/service/autofill/FillResponse;Ljava/util/concurrent/atomic/AtomicReference;)V
+HPLcom/android/server/autofill/-$$Lambda$RemoteFillService$RkgpxnfvOIHus8aiIIO_Tqgio1E;->run()V
 PLcom/android/server/autofill/-$$Lambda$RemoteFillService$V3RTZXH5ru6fNYPwjZcEmEQQ9-4;-><init>(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;)V
-PLcom/android/server/autofill/-$$Lambda$RemoteFillService$V3RTZXH5ru6fNYPwjZcEmEQQ9-4;->run(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/autofill/-$$Lambda$Session$eVloK5PeyeuPZn1G52SC-fXIsjk;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService;)V
+HPLcom/android/server/autofill/-$$Lambda$RemoteFillService$V3RTZXH5ru6fNYPwjZcEmEQQ9-4;->run(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/autofill/-$$Lambda$RemoteFillService$adrL6UDQX3d0e-QQL11h9TWJcM4;-><init>(Lcom/android/server/autofill/RemoteFillService;Ljava/lang/Throwable;Landroid/content/IntentSender;)V
+PLcom/android/server/autofill/-$$Lambda$RemoteFillService$adrL6UDQX3d0e-QQL11h9TWJcM4;->run()V
+PLcom/android/server/autofill/-$$Lambda$RemoteFillService$lQ9Txb0D49A09bfomYmOPhXTXRE;-><init>(Lcom/android/server/autofill/RemoteFillService;)V
+PLcom/android/server/autofill/-$$Lambda$RemoteFillService$lQ9Txb0D49A09bfomYmOPhXTXRE;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/autofill/-$$Lambda$Session$Fs9zdJwELk-9rAM3RiY6AyBKswI;-><clinit>()V
+PLcom/android/server/autofill/-$$Lambda$Session$Fs9zdJwELk-9rAM3RiY6AyBKswI;-><init>()V
+PLcom/android/server/autofill/-$$Lambda$Session$Fs9zdJwELk-9rAM3RiY6AyBKswI;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/autofill/-$$Lambda$Session$LM4xf4dbxH_NTutQzBkaQNxKbV0;-><clinit>()V
+PLcom/android/server/autofill/-$$Lambda$Session$LM4xf4dbxH_NTutQzBkaQNxKbV0;-><init>()V
+PLcom/android/server/autofill/-$$Lambda$Session$LM4xf4dbxH_NTutQzBkaQNxKbV0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/autofill/-$$Lambda$Session$NtvZwhlT1c4eLjg2qI6EER2oCtY;-><clinit>()V
+PLcom/android/server/autofill/-$$Lambda$Session$NtvZwhlT1c4eLjg2qI6EER2oCtY;-><init>()V
+PLcom/android/server/autofill/-$$Lambda$Session$NtvZwhlT1c4eLjg2qI6EER2oCtY;->accept(Ljava/lang/Object;)V
+PLcom/android/server/autofill/-$$Lambda$Session$cYu1t6lYVopApYW-vct82-7slZk;-><clinit>()V
+PLcom/android/server/autofill/-$$Lambda$Session$cYu1t6lYVopApYW-vct82-7slZk;-><init>()V
+PLcom/android/server/autofill/-$$Lambda$Session$cYu1t6lYVopApYW-vct82-7slZk;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/autofill/-$$Lambda$Session$eVloK5PeyeuPZn1G52SC-fXIsjk;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService;)V
 PLcom/android/server/autofill/-$$Lambda$Session$eVloK5PeyeuPZn1G52SC-fXIsjk;->run()V
 PLcom/android/server/autofill/-$$Lambda$Session$v6ZVyksJuHdWgJ1F8aoa_1LJWPo;-><clinit>()V
 PLcom/android/server/autofill/-$$Lambda$Session$v6ZVyksJuHdWgJ1F8aoa_1LJWPo;-><init>()V
 PLcom/android/server/autofill/-$$Lambda$Session$v6ZVyksJuHdWgJ1F8aoa_1LJWPo;->accept(Ljava/lang/Object;)V
-PLcom/android/server/autofill/-$$Lambda$Session$xw4trZ-LA7gCvZvpKJ93vf377ak;-><init>(Lcom/android/server/autofill/Session;)V
+PLcom/android/server/autofill/-$$Lambda$Session$vkywy7qU2iLN6RFRCSM48kEqmbQ;-><init>(Lcom/android/server/autofill/Session;I[Landroid/view/autofill/AutofillId;[Ljava/lang/String;[Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;)V
+PLcom/android/server/autofill/-$$Lambda$Session$vkywy7qU2iLN6RFRCSM48kEqmbQ;->onResult(Landroid/os/Bundle;)V
+HPLcom/android/server/autofill/-$$Lambda$Session$xw4trZ-LA7gCvZvpKJ93vf377ak;-><init>(Lcom/android/server/autofill/Session;)V
 PLcom/android/server/autofill/-$$Lambda$Session$xw4trZ-LA7gCvZvpKJ93vf377ak;->binderDied()V
+PLcom/android/server/autofill/-$$Lambda$Z6K-VL097A8ARGd4URY-lOvvM48;-><clinit>()V
+PLcom/android/server/autofill/-$$Lambda$Z6K-VL097A8ARGd4URY-lOvvM48;-><init>()V
+PLcom/android/server/autofill/-$$Lambda$Z6K-VL097A8ARGd4URY-lOvvM48;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/autofill/-$$Lambda$knR7oLyPSG_CoFAxBA_nqSw3JBo;-><clinit>()V
+PLcom/android/server/autofill/-$$Lambda$knR7oLyPSG_CoFAxBA_nqSw3JBo;-><init>()V
+PLcom/android/server/autofill/-$$Lambda$knR7oLyPSG_CoFAxBA_nqSw3JBo;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/autofill/-$$Lambda$sdnPz1IsKKVKSEXwI7z4h2-SxiM;-><clinit>()V
 PLcom/android/server/autofill/-$$Lambda$sdnPz1IsKKVKSEXwI7z4h2-SxiM;-><init>()V
 PLcom/android/server/autofill/-$$Lambda$sdnPz1IsKKVKSEXwI7z4h2-SxiM;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/autofill/AutofillManagerService$1;-><init>(Lcom/android/server/autofill/AutofillManagerService;)V
-PLcom/android/server/autofill/AutofillManagerService$1;->lambda$onReceive$0(Lcom/android/server/autofill/AutofillManagerServiceImpl;)V
-PLcom/android/server/autofill/AutofillManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/autofill/AutofillManagerService$1;->lambda$onReceive$0(Lcom/android/server/autofill/AutofillManagerServiceImpl;)V
+HPLcom/android/server/autofill/AutofillManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/autofill/AutofillManagerService$AugmentedAutofillState;-><init>()V
 HSPLcom/android/server/autofill/AutofillManagerService$AugmentedAutofillState;->access$400(Lcom/android/server/autofill/AutofillManagerService$AugmentedAutofillState;ILjava/lang/String;Z)V
 PLcom/android/server/autofill/AutofillManagerService$AugmentedAutofillState;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/autofill/AutofillManagerService$AugmentedAutofillState;->injectAugmentedAutofillInfo(Landroid/content/AutofillOptions;ILjava/lang/String;)V
-PLcom/android/server/autofill/AutofillManagerService$AugmentedAutofillState;->isWhitelisted(ILandroid/content/ComponentName;)Z
+HPLcom/android/server/autofill/AutofillManagerService$AugmentedAutofillState;->isWhitelisted(ILandroid/content/ComponentName;)Z
 HSPLcom/android/server/autofill/AutofillManagerService$AugmentedAutofillState;->setServiceInfo(ILjava/lang/String;Z)V
 HSPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;-><init>(Lcom/android/server/autofill/AutofillManagerService;)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->addClient(Landroid/view/autofill/IAutoFillManagerClient;Landroid/content/ComponentName;ILcom/android/internal/os/IResultReceiver;)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->cancelSession(II)V
+PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->disableOwnedAutofillServices(I)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->finishSession(II)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->getAutofillServiceComponentName(Lcom/android/internal/os/IResultReceiver;)V
-PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->getFillEventHistory(Lcom/android/internal/os/IResultReceiver;)V
+HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->getFillEventHistory(Lcom/android/internal/os/IResultReceiver;)V
+HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->isServiceEnabled(ILjava/lang/String;Lcom/android/internal/os/IResultReceiver;)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->isServiceSupported(ILcom/android/internal/os/IResultReceiver;)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->removeClient(Landroid/view/autofill/IAutoFillManagerClient;I)V
+PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->restoreSession(ILandroid/os/IBinder;Landroid/os/IBinder;Lcom/android/internal/os/IResultReceiver;)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->setAugmentedAutofillWhitelist(Ljava/util/List;Ljava/util/List;Lcom/android/internal/os/IResultReceiver;)V
-PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->setHasCallback(IIZ)V
+PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->setAuthenticationResult(Landroid/os/Bundle;III)V
+HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->setHasCallback(IIZ)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->setUserData(Landroid/service/autofill/UserData;)V
-PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->startSession(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;IZILandroid/content/ComponentName;ZLcom/android/internal/os/IResultReceiver;)V
-PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->updateSession(ILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;III)V
+HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->startSession(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;IZILandroid/content/ComponentName;ZLcom/android/internal/os/IResultReceiver;)V
+HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->updateSession(ILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;III)V
 HSPLcom/android/server/autofill/AutofillManagerService$AutofillCompatState;-><init>()V
+PLcom/android/server/autofill/AutofillManagerService$AutofillCompatState;->access$7200(Lcom/android/server/autofill/AutofillManagerService$AutofillCompatState;Ljava/lang/String;Ljava/io/PrintWriter;)V
+PLcom/android/server/autofill/AutofillManagerService$AutofillCompatState;->addCompatibilityModeRequest(Ljava/lang/String;J[Ljava/lang/String;I)V
 PLcom/android/server/autofill/AutofillManagerService$AutofillCompatState;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+PLcom/android/server/autofill/AutofillManagerService$AutofillCompatState;->getUrlBarResourceIds(Ljava/lang/String;I)[Ljava/lang/String;
 HSPLcom/android/server/autofill/AutofillManagerService$AutofillCompatState;->isCompatibilityModeRequested(Ljava/lang/String;JI)Z
 PLcom/android/server/autofill/AutofillManagerService$AutofillCompatState;->removeCompatibilityModeRequests(I)V
 HSPLcom/android/server/autofill/AutofillManagerService$AutofillCompatState;->reset(I)V
@@ -6159,229 +9920,603 @@
 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
 PLcom/android/server/autofill/AutofillManagerService$LocalService;->isAugmentedAutofillServiceForUser(II)Z
-PLcom/android/server/autofill/AutofillManagerService$LocalService;->onBackKeyPressed()V
+HPLcom/android/server/autofill/AutofillManagerService$LocalService;->onBackKeyPressed()V
+PLcom/android/server/autofill/AutofillManagerService$PackageCompatState;-><init>(J[Ljava/lang/String;)V
+PLcom/android/server/autofill/AutofillManagerService$PackageCompatState;->access$1200(Lcom/android/server/autofill/AutofillManagerService$PackageCompatState;)J
+PLcom/android/server/autofill/AutofillManagerService$PackageCompatState;->access$1300(Lcom/android/server/autofill/AutofillManagerService$PackageCompatState;)[Ljava/lang/String;
+PLcom/android/server/autofill/AutofillManagerService$PackageCompatState;->toString()Ljava/lang/String;
 HSPLcom/android/server/autofill/AutofillManagerService;-><clinit>()V
 HSPLcom/android/server/autofill/AutofillManagerService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/autofill/AutofillManagerService;->access$100(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/autofill/AutofillManagerService;->access$1000(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/autofill/AutofillManagerService;->access$1100(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
-PLcom/android/server/autofill/AutofillManagerService;->access$1600(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/internal/os/IResultReceiver;I)V
-PLcom/android/server/autofill/AutofillManagerService;->access$200(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/server/infra/AbstractMasterSystemService$Visitor;)V
-PLcom/android/server/autofill/AutofillManagerService;->access$2300(Lcom/android/server/autofill/AutofillManagerService;)Landroid/app/ActivityManagerInternal;
-PLcom/android/server/autofill/AutofillManagerService;->access$2400(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
-PLcom/android/server/autofill/AutofillManagerService;->access$2500(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
-PLcom/android/server/autofill/AutofillManagerService;->access$2600(Lcom/android/server/autofill/AutofillManagerService;)Z
-PLcom/android/server/autofill/AutofillManagerService;->access$2700(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/internal/os/IResultReceiver;II)V
+PLcom/android/server/autofill/AutofillManagerService;->access$1400(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->access$1500(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+HPLcom/android/server/autofill/AutofillManagerService;->access$1600(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/internal/os/IResultReceiver;I)V
+PLcom/android/server/autofill/AutofillManagerService;->access$1700(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->access$1800(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/autofill/AutofillManagerService;->access$1900(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+HPLcom/android/server/autofill/AutofillManagerService;->access$200(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/server/infra/AbstractMasterSystemService$Visitor;)V
+PLcom/android/server/autofill/AutofillManagerService;->access$2000(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/autofill/AutofillManagerService;->access$2100(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+HPLcom/android/server/autofill/AutofillManagerService;->access$2200(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+HPLcom/android/server/autofill/AutofillManagerService;->access$2300(Lcom/android/server/autofill/AutofillManagerService;)Landroid/app/ActivityManagerInternal;
+HPLcom/android/server/autofill/AutofillManagerService;->access$2400(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+HPLcom/android/server/autofill/AutofillManagerService;->access$2500(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+HPLcom/android/server/autofill/AutofillManagerService;->access$2600(Lcom/android/server/autofill/AutofillManagerService;)Z
+HPLcom/android/server/autofill/AutofillManagerService;->access$2700(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/internal/os/IResultReceiver;II)V
+PLcom/android/server/autofill/AutofillManagerService;->access$2800(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->access$2900(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/autofill/AutofillManagerService;->access$300(Lcom/android/server/autofill/AutofillManagerService;)Lcom/android/server/autofill/ui/AutoFillUI;
 PLcom/android/server/autofill/AutofillManagerService;->access$3000(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/internal/os/IResultReceiver;Landroid/os/Parcelable;)V
+PLcom/android/server/autofill/AutofillManagerService;->access$3600(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->access$3700(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/autofill/AutofillManagerService;->access$4000(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/internal/os/IResultReceiver;Z)V
 PLcom/android/server/autofill/AutofillManagerService;->access$4300(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
 PLcom/android/server/autofill/AutofillManagerService;->access$4400(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/autofill/AutofillManagerService;->access$4800(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
 PLcom/android/server/autofill/AutofillManagerService;->access$4900(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/autofill/AutofillManagerService;->access$500(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->access$5000(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->access$5100(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/autofill/AutofillManagerService;->access$5200(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+HPLcom/android/server/autofill/AutofillManagerService;->access$5300(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/autofill/AutofillManagerService;->access$5600(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->access$5700(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/autofill/AutofillManagerService;->access$5800(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->access$5900(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+HPLcom/android/server/autofill/AutofillManagerService;->access$600(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/autofill/AutofillManagerService;->access$6000(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->access$6100(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/autofill/AutofillManagerService;->access$6200(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->access$6300(Lcom/android/server/autofill/AutofillManagerService;I)Z
+PLcom/android/server/autofill/AutofillManagerService;->access$6400(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+HPLcom/android/server/autofill/AutofillManagerService;->access$6500(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/autofill/AutofillManagerService;->access$6800(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->access$6900(Lcom/android/server/autofill/AutofillManagerService;Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/autofill/AutofillManagerService;->access$700(Lcom/android/server/autofill/AutofillManagerService;)Lcom/android/server/autofill/AutofillManagerService$AutofillCompatState;
+PLcom/android/server/autofill/AutofillManagerService;->access$7000()I
+PLcom/android/server/autofill/AutofillManagerService;->access$7100()I
+PLcom/android/server/autofill/AutofillManagerService;->access$7300(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/String;
+PLcom/android/server/autofill/AutofillManagerService;->access$7400(Lcom/android/server/autofill/AutofillManagerService;)I
+PLcom/android/server/autofill/AutofillManagerService;->access$7500(Lcom/android/server/autofill/AutofillManagerService;)Landroid/util/LocalLog;
+PLcom/android/server/autofill/AutofillManagerService;->access$7600(Lcom/android/server/autofill/AutofillManagerService;)Landroid/util/LocalLog;
+PLcom/android/server/autofill/AutofillManagerService;->access$7700(Lcom/android/server/autofill/AutofillManagerService;)Landroid/util/LocalLog;
 PLcom/android/server/autofill/AutofillManagerService;->access$800(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
 PLcom/android/server/autofill/AutofillManagerService;->access$900(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 HSPLcom/android/server/autofill/AutofillManagerService;->addCompatibilityModeRequestsLocked(Lcom/android/server/autofill/AutofillManagerServiceImpl;I)V
+PLcom/android/server/autofill/AutofillManagerService;->getPartitionMaxCount()I
 HSPLcom/android/server/autofill/AutofillManagerService;->getServiceSettingsProperty()Ljava/lang/String;
+PLcom/android/server/autofill/AutofillManagerService;->getSupportedSmartSuggestionModesLocked()I
+PLcom/android/server/autofill/AutofillManagerService;->getVisibleDatasetsMaxCount()I
+PLcom/android/server/autofill/AutofillManagerService;->getWhitelistedCompatModePackages()Ljava/util/Map;
+HPLcom/android/server/autofill/AutofillManagerService;->getWhitelistedCompatModePackages(Ljava/lang/String;)Ljava/util/Map;
+PLcom/android/server/autofill/AutofillManagerService;->getWhitelistedCompatModePackagesFromSettings()Ljava/lang/String;
 PLcom/android/server/autofill/AutofillManagerService;->isInstantServiceAllowed()Z
 HSPLcom/android/server/autofill/AutofillManagerService;->isSupported(Landroid/content/pm/UserInfo;)Z
+HSPLcom/android/server/autofill/AutofillManagerService;->isSupportedUser(Lcom/android/server/SystemService$TargetUser;)Z
 PLcom/android/server/autofill/AutofillManagerService;->lambda$new$0$AutofillManagerService(Landroid/provider/DeviceConfig$Properties;)V
+HPLcom/android/server/autofill/AutofillManagerService;->logRequestLocked(Ljava/lang/String;)V
 HSPLcom/android/server/autofill/AutofillManagerService;->newServiceLocked(IZ)Lcom/android/server/autofill/AutofillManagerServiceImpl;
 HSPLcom/android/server/autofill/AutofillManagerService;->newServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/autofill/AutofillManagerService;->onDeviceConfigChange(Ljava/util/Set;)V
 HSPLcom/android/server/autofill/AutofillManagerService;->onServiceEnabledLocked(Lcom/android/server/autofill/AutofillManagerServiceImpl;I)V
 HSPLcom/android/server/autofill/AutofillManagerService;->onServiceEnabledLocked(Lcom/android/server/infra/AbstractPerUserSystemService;I)V
+PLcom/android/server/autofill/AutofillManagerService;->onServiceRemoved(Lcom/android/server/autofill/AutofillManagerServiceImpl;I)V
 PLcom/android/server/autofill/AutofillManagerService;->onServiceRemoved(Lcom/android/server/infra/AbstractPerUserSystemService;I)V
+PLcom/android/server/autofill/AutofillManagerService;->onSettingsChanged(ILjava/lang/String;)V
 HSPLcom/android/server/autofill/AutofillManagerService;->onStart()V
 HSPLcom/android/server/autofill/AutofillManagerService;->registerForExtraSettingsChanges(Landroid/content/ContentResolver;Landroid/database/ContentObserver;)V
-PLcom/android/server/autofill/AutofillManagerService;->send(Lcom/android/internal/os/IResultReceiver;I)V
+HPLcom/android/server/autofill/AutofillManagerService;->send(Lcom/android/internal/os/IResultReceiver;I)V
 PLcom/android/server/autofill/AutofillManagerService;->send(Lcom/android/internal/os/IResultReceiver;II)V
 PLcom/android/server/autofill/AutofillManagerService;->send(Lcom/android/internal/os/IResultReceiver;Landroid/os/Bundle;)V
 PLcom/android/server/autofill/AutofillManagerService;->send(Lcom/android/internal/os/IResultReceiver;Landroid/os/Parcelable;)V
+HPLcom/android/server/autofill/AutofillManagerService;->send(Lcom/android/internal/os/IResultReceiver;Z)V
 HSPLcom/android/server/autofill/AutofillManagerService;->setDeviceConfigProperties()V
 HSPLcom/android/server/autofill/AutofillManagerService;->setLogLevelFromSettings()V
 HSPLcom/android/server/autofill/AutofillManagerService;->setLoggingLevelsLocked(ZZ)V
 HSPLcom/android/server/autofill/AutofillManagerService;->setMaxPartitionsFromSettings()V
 HSPLcom/android/server/autofill/AutofillManagerService;->setMaxVisibleDatasetsFromSettings()V
 PLcom/android/server/autofill/AutofillManagerServiceImpl$1;-><init>(Lcom/android/server/autofill/AutofillManagerServiceImpl;)V
-PLcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask;-><init>(Lcom/android/server/autofill/AutofillManagerServiceImpl;)V
-PLcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask;-><init>(Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/AutofillManagerServiceImpl$1;)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl$1;->resetLastResponse()V
+HPLcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask;-><init>(Lcom/android/server/autofill/AutofillManagerServiceImpl;)V
+HPLcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask;-><init>(Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/AutofillManagerServiceImpl$1;)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask;->doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask;->doInBackground([Ljava/lang/Void;)Ljava/lang/Void;
+HPLcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask;->doInBackground([Ljava/lang/Void;)Ljava/lang/Void;
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;-><clinit>()V
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;-><init>(Lcom/android/server/autofill/AutofillManagerService;Ljava/lang/Object;Landroid/util/LocalLog;Landroid/util/LocalLog;ILcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/AutofillManagerService$AutofillCompatState;Z)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->access$200(Lcom/android/server/autofill/AutofillManagerServiceImpl;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->access$300(Lcom/android/server/autofill/AutofillManagerServiceImpl;)Landroid/util/SparseArray;
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->access$400(Lcom/android/server/autofill/AutofillManagerServiceImpl;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->access$500(Lcom/android/server/autofill/AutofillManagerServiceImpl;)Landroid/util/SparseArray;
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->access$600(Lcom/android/server/autofill/AutofillManagerServiceImpl;)Ljava/lang/Object;
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->addClientLocked(Landroid/view/autofill/IAutoFillManagerClient;Landroid/content/ComponentName;)I
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->assertCallerLocked(Landroid/content/ComponentName;Z)V
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->assertCallerLocked(Landroid/content/ComponentName;Z)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->cancelSessionLocked(II)V
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->createSessionByTokenLocked(Landroid/os/IBinder;IILandroid/os/IBinder;ZLandroid/content/ComponentName;ZZZI)Lcom/android/server/autofill/Session;
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->destroyFinishedSessionsLocked()V
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->createSessionByTokenLocked(Landroid/os/IBinder;IILandroid/os/IBinder;ZLandroid/content/ComponentName;ZZZI)Lcom/android/server/autofill/Session;
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->destroyFinishedSessionsLocked()V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->destroyLocked()V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->destroySessionsForAugmentedAutofillOnlyLocked()V
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->destroySessionsLocked()V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->disableAutofillForApp(Ljava/lang/String;JIZ)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->disableOwnedAutofillServicesLocked(I)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->dumpLocked(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->finishSessionLocked(II)V
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->getAppDisabledActivitiesLocked(Ljava/lang/String;)Landroid/util/ArrayMap;
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->getAppDisabledExpirationLocked(Ljava/lang/String;)J
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->getAugmentedAutofillServiceUidLocked()I
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->getCompatibilityPackagesLocked()Landroid/util/ArrayMap;
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->getFieldClassificationStrategy()Lcom/android/server/autofill/FieldClassificationStrategy;
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->getFillEventHistory(I)Landroid/service/autofill/FillEventHistory;
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->getPreviousSessionsLocked(Lcom/android/server/autofill/Session;)Ljava/util/ArrayList;
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->getPreviousSessionsLocked(Lcom/android/server/autofill/Session;)Ljava/util/ArrayList;
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->getRemoteAugmentedAutofillServiceLocked()Lcom/android/server/autofill/RemoteAugmentedAutofillService;
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->getSupportedSmartSuggestionModesLocked()I
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->getUrlBarResourceIdsForCompatMode(Ljava/lang/String;)[Ljava/lang/String;
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->getUserData()Landroid/service/autofill/UserData;
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->handlePackageUpdateLocked(Ljava/lang/String;)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->handleSessionSave(Lcom/android/server/autofill/Session;)V
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->isAugmentedAutofillServiceAvailableLocked()Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->isAugmentedAutofillServiceForUserLocked(I)Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->isAutofillDisabledLocked(Landroid/content/ComponentName;)Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->isCalledByAugmentedAutofillServiceLocked(Ljava/lang/String;I)Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->isCalledByServiceLocked(Ljava/lang/String;I)Z
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->isFieldClassificationEnabledLocked()Z
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->isInlineSuggestionsEnabled()Z
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->isValidEventLocked(Ljava/lang/String;I)Z
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->isWhitelistedForAugmentedAutofillLocked(Landroid/content/ComponentName;)Z
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->logContextCommittedLocked(ILandroid/os/Bundle;Ljava/util/ArrayList;Landroid/util/ArraySet;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Landroid/content/ComponentName;Z)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->logDatasetAuthenticationSelected(Ljava/lang/String;ILandroid/os/Bundle;)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->logDatasetSelected(Ljava/lang/String;ILandroid/os/Bundle;)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->logDatasetShown(ILandroid/os/Bundle;)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->logSaveShown(ILandroid/os/Bundle;)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->newServiceInfoLocked(Landroid/content/ComponentName;)Landroid/content/pm/ServiceInfo;
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->onBackKeyPressed()V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->pruneAbandonedSessionsLocked()V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->removeClientLocked(Landroid/view/autofill/IAutoFillManagerClient;)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->removeSessionLocked(I)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->resetAugmentedAutofillWhitelistLocked()V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->resetExtServiceLocked()V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->resetLastAugmentedAutofillResponse()V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->resetLastResponse()V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->restoreSession(IILandroid/os/IBinder;Landroid/os/IBinder;)Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->sendStateToClients(Z)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->setAugmentedAutofillWhitelistLocked(Ljava/util/List;Ljava/util/List;I)Z
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->setHasCallback(IIZ)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->setAuthenticationResultLocked(Landroid/os/Bundle;III)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->setAuthenticationSelected(ILandroid/os/Bundle;)V
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->setHasCallback(IIZ)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->setLastResponse(ILandroid/service/autofill/FillResponse;)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->setUserData(ILandroid/service/autofill/UserData;)V
-PLcom/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;->startSessionLocked(Landroid/os/IBinder;IILandroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;ZLandroid/content/ComponentName;ZZI)J
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->updateLocked(Z)Z
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->updateRemoteAugmentedAutofillService()V
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->updateSessionLocked(IILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;II)Z
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->updateSessionLocked(IILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;II)Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->whitelistForAugmentedAutofillPackages(Ljava/util/List;Ljava/util/List;)V
+PLcom/android/server/autofill/FieldClassificationStrategy$1;-><init>(Lcom/android/server/autofill/FieldClassificationStrategy;)V
+PLcom/android/server/autofill/FieldClassificationStrategy$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 HSPLcom/android/server/autofill/FieldClassificationStrategy;-><init>(Landroid/content/Context;I)V
+PLcom/android/server/autofill/FieldClassificationStrategy;->access$000(Lcom/android/server/autofill/FieldClassificationStrategy;)Ljava/lang/Object;
+PLcom/android/server/autofill/FieldClassificationStrategy;->access$100(Lcom/android/server/autofill/FieldClassificationStrategy;)Landroid/service/autofill/IAutofillFieldClassificationService;
+PLcom/android/server/autofill/FieldClassificationStrategy;->access$102(Lcom/android/server/autofill/FieldClassificationStrategy;Landroid/service/autofill/IAutofillFieldClassificationService;)Landroid/service/autofill/IAutofillFieldClassificationService;
+PLcom/android/server/autofill/FieldClassificationStrategy;->access$200(Lcom/android/server/autofill/FieldClassificationStrategy;)Ljava/util/ArrayList;
+PLcom/android/server/autofill/FieldClassificationStrategy;->access$202(Lcom/android/server/autofill/FieldClassificationStrategy;Ljava/util/ArrayList;)Ljava/util/ArrayList;
+PLcom/android/server/autofill/FieldClassificationStrategy;->calculateScores(Landroid/os/RemoteCallback;Ljava/util/List;[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
+PLcom/android/server/autofill/FieldClassificationStrategy;->connectAndRun(Lcom/android/server/autofill/FieldClassificationStrategy$Command;)V
 PLcom/android/server/autofill/FieldClassificationStrategy;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+PLcom/android/server/autofill/FieldClassificationStrategy;->getAvailableAlgorithms()[Ljava/lang/String;
+PLcom/android/server/autofill/FieldClassificationStrategy;->getDefaultAlgorithm()Ljava/lang/String;
 PLcom/android/server/autofill/FieldClassificationStrategy;->getMetadataValue(Ljava/lang/String;Lcom/android/server/autofill/FieldClassificationStrategy$MetadataParser;)Ljava/lang/Object;
 PLcom/android/server/autofill/FieldClassificationStrategy;->getServiceComponentName()Landroid/content/ComponentName;
-PLcom/android/server/autofill/FieldClassificationStrategy;->getServiceInfo()Landroid/content/pm/ServiceInfo;
+HPLcom/android/server/autofill/FieldClassificationStrategy;->getServiceInfo()Landroid/content/pm/ServiceInfo;
+PLcom/android/server/autofill/FieldClassificationStrategy;->lambda$calculateScores$2(Landroid/os/RemoteCallback;Ljava/util/List;[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/util/ArrayMap;Landroid/util/ArrayMap;Landroid/service/autofill/IAutofillFieldClassificationService;)V
+PLcom/android/server/autofill/FieldClassificationStrategy;->lambda$getAvailableAlgorithms$0(Landroid/content/res/Resources;I)[Ljava/lang/String;
+PLcom/android/server/autofill/FieldClassificationStrategy;->lambda$getDefaultAlgorithm$1(Landroid/content/res/Resources;I)Ljava/lang/String;
 PLcom/android/server/autofill/FieldClassificationStrategy;->reset()V
 HSPLcom/android/server/autofill/Helper;-><clinit>()V
 HPLcom/android/server/autofill/Helper;->addAutofillableIds(Landroid/app/assist/AssistStructure$ViewNode;Ljava/util/ArrayList;Z)V
+HPLcom/android/server/autofill/Helper;->findViewNode(Landroid/app/assist/AssistStructure;Lcom/android/server/autofill/Helper$ViewNodeFilter;)Landroid/app/assist/AssistStructure$ViewNode;
+PLcom/android/server/autofill/Helper;->findViewNodeByAutofillId(Landroid/app/assist/AssistStructure;Landroid/view/autofill/AutofillId;)Landroid/app/assist/AssistStructure$ViewNode;
+HPLcom/android/server/autofill/Helper;->getAutofillIds(Landroid/app/assist/AssistStructure;Z)Ljava/util/ArrayList;
+PLcom/android/server/autofill/Helper;->getFields(Landroid/service/autofill/Dataset;)Landroid/util/ArrayMap;
 PLcom/android/server/autofill/Helper;->getNumericValue(Landroid/metrics/LogMaker;I)I
-PLcom/android/server/autofill/Helper;->newLogMaker(ILandroid/content/ComponentName;Ljava/lang/String;IZ)Landroid/metrics/LogMaker;
-PLcom/android/server/autofill/Helper;->newLogMaker(ILjava/lang/String;IZ)Landroid/metrics/LogMaker;
+HPLcom/android/server/autofill/Helper;->lambda$findViewNodeByAutofillId$0(Landroid/view/autofill/AutofillId;Landroid/app/assist/AssistStructure$ViewNode;)Z
+HPLcom/android/server/autofill/Helper;->lambda$sanitizeUrlBar$1([Ljava/lang/String;Landroid/app/assist/AssistStructure$ViewNode;)Z
+HPLcom/android/server/autofill/Helper;->newLogMaker(ILandroid/content/ComponentName;Ljava/lang/String;IZ)Landroid/metrics/LogMaker;
+HPLcom/android/server/autofill/Helper;->newLogMaker(ILjava/lang/String;IZ)Landroid/metrics/LogMaker;
+PLcom/android/server/autofill/Helper;->newLogMaker(ILjava/lang/String;Ljava/lang/String;IZ)Landroid/metrics/LogMaker;
+PLcom/android/server/autofill/Helper;->sanitizeUrlBar(Landroid/app/assist/AssistStructure;[Ljava/lang/String;)Landroid/app/assist/AssistStructure$ViewNode;
+PLcom/android/server/autofill/Helper;->toArray(Landroid/util/ArraySet;)[Landroid/view/autofill/AutofillId;
 PLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService$1;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;->cancel()V
-PLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;->isCompleted()Z
-PLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;->onCancellable(Landroid/os/ICancellationSignal;)V
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;->isCompleted()Z
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;->onCancellable(Landroid/os/ICancellationSignal;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;->onSuccess()V
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;->onSuccess([Landroid/service/autofill/Dataset;)V
+PLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;->onSuccess([Landroid/service/autofill/Dataset;Landroid/os/Bundle;)V
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService$1;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService;Landroid/service/autofill/augmented/IAugmentedAutofillService;IILandroid/content/ComponentName;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;JLandroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;Landroid/view/autofill/IAutoFillManagerClient;Lcom/android/internal/infra/AndroidFuture;Ljava/util/concurrent/atomic/AtomicReference;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService$1;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService;Landroid/service/autofill/augmented/IAugmentedAutofillService;IILandroid/content/ComponentName;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;JLcom/android/internal/infra/AndroidFuture;Ljava/util/concurrent/atomic/AtomicReference;)V
-PLcom/android/server/autofill/RemoteAugmentedAutofillService$1;->send(ILandroid/os/Bundle;)V
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService$1;->send(ILandroid/os/Bundle;)V
 HSPLcom/android/server/autofill/RemoteAugmentedAutofillService;-><clinit>()V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;-><init>(Landroid/content/Context;Landroid/content/ComponentName;ILcom/android/server/autofill/RemoteAugmentedAutofillService$RemoteAugmentedAutofillServiceCallbacks;ZZII)V
+PLcom/android/server/autofill/RemoteAugmentedAutofillService;->access$000(Lcom/android/server/autofill/RemoteAugmentedAutofillService;)Lcom/android/server/autofill/RemoteAugmentedAutofillService$RemoteAugmentedAutofillServiceCallbacks;
+PLcom/android/server/autofill/RemoteAugmentedAutofillService;->access$000(Lcom/android/server/autofill/RemoteAugmentedAutofillService;I[Landroid/service/autofill/Dataset;Landroid/view/autofill/AutofillId;Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;Landroid/view/autofill/IAutoFillManagerClient;)V
+PLcom/android/server/autofill/RemoteAugmentedAutofillService;->access$000(Lcom/android/server/autofill/RemoteAugmentedAutofillService;I[Landroid/service/autofill/Dataset;Landroid/view/autofill/AutofillId;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;Landroid/view/autofill/IAutoFillManagerClient;)V
+PLcom/android/server/autofill/RemoteAugmentedAutofillService;->access$100(Lcom/android/server/autofill/RemoteAugmentedAutofillService;I[Landroid/service/autofill/Dataset;Landroid/view/autofill/AutofillId;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;Landroid/view/autofill/IAutoFillManagerClient;Landroid/os/Bundle;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->dispatchCancellation(Landroid/os/ICancellationSignal;)V
-PLcom/android/server/autofill/RemoteAugmentedAutofillService;->getAutoDisconnectTimeoutMs()J
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService;->getAutoDisconnectTimeoutMs()J
+PLcom/android/server/autofill/RemoteAugmentedAutofillService;->getComponentName()Landroid/content/ComponentName;
 HSPLcom/android/server/autofill/RemoteAugmentedAutofillService;->getComponentName(Ljava/lang/String;IZ)Landroid/util/Pair;
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$dispatchCancellation$2(Landroid/os/ICancellationSignal;)V
-PLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$onDestroyAutofillWindowsRequest$3(Landroid/service/autofill/augmented/IAugmentedAutofillService;)V
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$onDestroyAutofillWindowsRequest$3(Landroid/service/autofill/augmented/IAugmentedAutofillService;)V
+PLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$onDestroyAutofillWindowsRequest$4(Landroid/service/autofill/augmented/IAugmentedAutofillService;)V
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$onRequestAutofillLocked$0$RemoteAugmentedAutofillService(Landroid/view/autofill/IAutoFillManagerClient;IILandroid/content/ComponentName;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;JLandroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/augmented/IAugmentedAutofillService;)Ljava/util/concurrent/CompletableFuture;
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$onRequestAutofillLocked$0$RemoteAugmentedAutofillService(Landroid/view/autofill/IAutoFillManagerClient;IILandroid/content/ComponentName;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;JLjava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/augmented/IAugmentedAutofillService;)Ljava/util/concurrent/CompletableFuture;
-PLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$onRequestAutofillLocked$1$RemoteAugmentedAutofillService(Ljava/util/concurrent/atomic/AtomicReference;Landroid/content/ComponentName;ILjava/lang/Void;Ljava/lang/Throwable;)V
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$onRequestAutofillLocked$1$RemoteAugmentedAutofillService(Ljava/util/concurrent/atomic/AtomicReference;Landroid/content/ComponentName;ILjava/lang/Void;Ljava/lang/Throwable;)V
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService;->maybeHandleInlineSuggestions(I[Landroid/service/autofill/Dataset;Landroid/view/autofill/AutofillId;Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;Landroid/view/autofill/IAutoFillManagerClient;)V
+PLcom/android/server/autofill/RemoteAugmentedAutofillService;->maybeHandleInlineSuggestions(I[Landroid/service/autofill/Dataset;Landroid/view/autofill/AutofillId;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;Landroid/view/autofill/IAutoFillManagerClient;)V
+PLcom/android/server/autofill/RemoteAugmentedAutofillService;->maybeRequestShowInlineSuggestions(I[Landroid/service/autofill/Dataset;Landroid/view/autofill/AutofillId;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;Landroid/view/autofill/IAutoFillManagerClient;Landroid/os/Bundle;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->onDestroyAutofillWindowsRequest()V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->onRequestAutofillLocked(ILandroid/view/autofill/IAutoFillManagerClient;ILandroid/content/ComponentName;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;)V
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService;->onRequestAutofillLocked(ILandroid/view/autofill/IAutoFillManagerClient;ILandroid/content/ComponentName;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->onServiceConnectionStatusChanged(Landroid/os/IInterface;Z)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->onServiceConnectionStatusChanged(Landroid/service/autofill/augmented/IAugmentedAutofillService;Z)V
-PLcom/android/server/autofill/RemoteFillService$1;-><init>(Lcom/android/server/autofill/RemoteFillService;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/CompletableFuture;)V
-PLcom/android/server/autofill/RemoteFillService$1;->onCancellable(Landroid/os/ICancellationSignal;)V
-PLcom/android/server/autofill/RemoteFillService$1;->onSuccess(Landroid/service/autofill/FillResponse;)V
+PLcom/android/server/autofill/RemoteAugmentedAutofillService;->toString()Ljava/lang/String;
+HPLcom/android/server/autofill/RemoteFillService$1;-><init>(Lcom/android/server/autofill/RemoteFillService;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/CompletableFuture;)V
+HPLcom/android/server/autofill/RemoteFillService$1;->onCancellable(Landroid/os/ICancellationSignal;)V
+HPLcom/android/server/autofill/RemoteFillService$1;->onSuccess(Landroid/service/autofill/FillResponse;)V
+PLcom/android/server/autofill/RemoteFillService$2;-><init>(Lcom/android/server/autofill/RemoteFillService;Ljava/util/concurrent/CompletableFuture;)V
+PLcom/android/server/autofill/RemoteFillService$2;->onSuccess(Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/RemoteFillService;-><init>(Landroid/content/Context;Landroid/content/ComponentName;ILcom/android/server/autofill/RemoteFillService$FillServiceCallbacks;Z)V
-PLcom/android/server/autofill/RemoteFillService;->addLast(Lcom/android/internal/infra/ServiceConnector$Job;)V
-PLcom/android/server/autofill/RemoteFillService;->addLast(Ljava/lang/Object;)V
+PLcom/android/server/autofill/RemoteFillService;->access$000(Lcom/android/server/autofill/RemoteFillService;Landroid/os/ICancellationSignal;)V
+HPLcom/android/server/autofill/RemoteFillService;->addLast(Lcom/android/internal/infra/ServiceConnector$Job;)V
+HPLcom/android/server/autofill/RemoteFillService;->addLast(Ljava/lang/Object;)V
 PLcom/android/server/autofill/RemoteFillService;->cancelCurrentRequest()I
-PLcom/android/server/autofill/RemoteFillService;->destroy()V
+HPLcom/android/server/autofill/RemoteFillService;->destroy()V
 PLcom/android/server/autofill/RemoteFillService;->dispatchCancellationSignal(Landroid/os/ICancellationSignal;)V
-PLcom/android/server/autofill/RemoteFillService;->getAutoDisconnectTimeoutMs()J
-PLcom/android/server/autofill/RemoteFillService;->lambda$onFillRequest$0$RemoteFillService(Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/IAutoFillService;)Ljava/util/concurrent/CompletableFuture;
-PLcom/android/server/autofill/RemoteFillService;->lambda$onFillRequest$1$RemoteFillService(Ljava/lang/Throwable;Landroid/service/autofill/FillRequest;Landroid/service/autofill/FillResponse;Ljava/util/concurrent/atomic/AtomicReference;)V
-PLcom/android/server/autofill/RemoteFillService;->lambda$onFillRequest$2$RemoteFillService(Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/FillResponse;Ljava/lang/Throwable;)V
-PLcom/android/server/autofill/RemoteFillService;->onFillRequest(Landroid/service/autofill/FillRequest;)V
-PLcom/android/server/autofill/RemoteFillService;->onServiceConnectionStatusChanged(Landroid/os/IInterface;Z)V
-PLcom/android/server/autofill/RemoteFillService;->onServiceConnectionStatusChanged(Landroid/service/autofill/IAutoFillService;Z)V
+HPLcom/android/server/autofill/RemoteFillService;->getAutoDisconnectTimeoutMs()J
+HPLcom/android/server/autofill/RemoteFillService;->lambda$onFillRequest$0$RemoteFillService(Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/IAutoFillService;)Ljava/util/concurrent/CompletableFuture;
+HPLcom/android/server/autofill/RemoteFillService;->lambda$onFillRequest$1$RemoteFillService(Ljava/lang/Throwable;Landroid/service/autofill/FillRequest;Landroid/service/autofill/FillResponse;Ljava/util/concurrent/atomic/AtomicReference;)V
+HPLcom/android/server/autofill/RemoteFillService;->lambda$onFillRequest$2$RemoteFillService(Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/FillResponse;Ljava/lang/Throwable;)V
+PLcom/android/server/autofill/RemoteFillService;->lambda$onSaveRequest$3$RemoteFillService(Landroid/service/autofill/SaveRequest;Landroid/service/autofill/IAutoFillService;)Ljava/util/concurrent/CompletableFuture;
+PLcom/android/server/autofill/RemoteFillService;->lambda$onSaveRequest$4$RemoteFillService(Ljava/lang/Throwable;Landroid/content/IntentSender;)V
+PLcom/android/server/autofill/RemoteFillService;->lambda$onSaveRequest$5$RemoteFillService(Landroid/content/IntentSender;Ljava/lang/Throwable;)V
+HPLcom/android/server/autofill/RemoteFillService;->onFillRequest(Landroid/service/autofill/FillRequest;)V
+PLcom/android/server/autofill/RemoteFillService;->onSaveRequest(Landroid/service/autofill/SaveRequest;)V
+HPLcom/android/server/autofill/RemoteFillService;->onServiceConnectionStatusChanged(Landroid/os/IInterface;Z)V
+HPLcom/android/server/autofill/RemoteFillService;->onServiceConnectionStatusChanged(Landroid/service/autofill/IAutoFillService;Z)V
+HSPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getServiceComponentName(Landroid/content/Context;)Landroid/content/ComponentName;
+HSPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getServiceComponentName(Landroid/content/Context;I)Landroid/content/ComponentName;
+HSPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getServiceInfo(Landroid/content/Context;)Landroid/content/pm/ServiceInfo;
+HSPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getServiceInfo(Landroid/content/Context;I)Landroid/content/pm/ServiceInfo;
 PLcom/android/server/autofill/Session$1;-><init>(Lcom/android/server/autofill/Session;)V
-PLcom/android/server/autofill/Session$1;->onHandleAssistData(Landroid/os/Bundle;)V
+HPLcom/android/server/autofill/Session$1;->onHandleAssistData(Landroid/os/Bundle;)V
 PLcom/android/server/autofill/Session;-><clinit>()V
 PLcom/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;ZZZI)V
-PLcom/android/server/autofill/Session;->access$000(Lcom/android/server/autofill/Session;)Lcom/android/server/autofill/RemoteFillService;
-PLcom/android/server/autofill/Session;->access$1000(Lcom/android/server/autofill/Session;)Ljava/util/ArrayList;
-PLcom/android/server/autofill/Session;->access$1002(Lcom/android/server/autofill/Session;Ljava/util/ArrayList;)Ljava/util/ArrayList;
-PLcom/android/server/autofill/Session;->access$1100(Lcom/android/server/autofill/Session;)V
-PLcom/android/server/autofill/Session;->access$1200(Lcom/android/server/autofill/Session;Landroid/service/autofill/FillContext;I)V
-PLcom/android/server/autofill/Session;->access$1300(Lcom/android/server/autofill/Session;Z)Ljava/util/ArrayList;
+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;->access$000(Lcom/android/server/autofill/Session;)Lcom/android/server/autofill/RemoteFillService;
+HPLcom/android/server/autofill/Session;->access$1000(Lcom/android/server/autofill/Session;)Ljava/util/ArrayList;
+HPLcom/android/server/autofill/Session;->access$1002(Lcom/android/server/autofill/Session;Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HPLcom/android/server/autofill/Session;->access$1100(Lcom/android/server/autofill/Session;)V
+HPLcom/android/server/autofill/Session;->access$1200(Lcom/android/server/autofill/Session;Landroid/service/autofill/FillContext;I)V
+HPLcom/android/server/autofill/Session;->access$1300(Lcom/android/server/autofill/Session;Z)Ljava/util/ArrayList;
 PLcom/android/server/autofill/Session;->access$1400(Lcom/android/server/autofill/Session;)Landroid/os/Bundle;
-PLcom/android/server/autofill/Session;->access$300(Lcom/android/server/autofill/Session;)Landroid/view/autofill/AutofillId;
-PLcom/android/server/autofill/Session;->access$400(Lcom/android/server/autofill/Session;)Ljava/lang/Object;
-PLcom/android/server/autofill/Session;->access$500(Lcom/android/server/autofill/Session;)Z
+PLcom/android/server/autofill/Session;->access$1400(Lcom/android/server/autofill/Session;)Landroid/view/inputmethod/InlineSuggestionsRequest;
+HPLcom/android/server/autofill/Session;->access$1400(Lcom/android/server/autofill/Session;)Lcom/android/server/autofill/Session$InlineSuggestionsRequestCallbackImpl;
+PLcom/android/server/autofill/Session;->access$1500(Lcom/android/server/autofill/Session;)Landroid/os/Bundle;
+HPLcom/android/server/autofill/Session;->access$1600(Lcom/android/server/autofill/Session;)Landroid/os/Bundle;
+HPLcom/android/server/autofill/Session;->access$300(Lcom/android/server/autofill/Session;)Landroid/view/autofill/AutofillId;
+HPLcom/android/server/autofill/Session;->access$400(Lcom/android/server/autofill/Session;)Ljava/lang/Object;
+HPLcom/android/server/autofill/Session;->access$500(Lcom/android/server/autofill/Session;)Z
+PLcom/android/server/autofill/Session;->access$600(Lcom/android/server/autofill/Session;)Landroid/content/ComponentName;
+PLcom/android/server/autofill/Session;->access$700(Lcom/android/server/autofill/Session;)Lcom/android/server/autofill/AutofillManagerServiceImpl;
+PLcom/android/server/autofill/Session;->access$800(Lcom/android/server/autofill/Session;)Landroid/app/assist/AssistStructure$ViewNode;
+PLcom/android/server/autofill/Session;->access$802(Lcom/android/server/autofill/Session;Landroid/app/assist/AssistStructure$ViewNode;)Landroid/app/assist/AssistStructure$ViewNode;
+PLcom/android/server/autofill/Session;->access$900(Lcom/android/server/autofill/Session;)Landroid/util/ArrayMap;
+PLcom/android/server/autofill/Session;->addTaggedDataToRequestLogLocked(IILjava/lang/Object;)V
+PLcom/android/server/autofill/Session;->authenticate(IILandroid/content/IntentSender;Landroid/os/Bundle;)V
+PLcom/android/server/autofill/Session;->autoFill(IILandroid/service/autofill/Dataset;Z)V
+PLcom/android/server/autofill/Session;->autoFillApp(Landroid/service/autofill/Dataset;)V
+PLcom/android/server/autofill/Session;->callSaveLocked()V
 PLcom/android/server/autofill/Session;->cancelAugmentedAutofillLocked()V
 PLcom/android/server/autofill/Session;->cancelCurrentRequestLocked()V
+PLcom/android/server/autofill/Session;->cancelSave()V
+PLcom/android/server/autofill/Session;->createAuthFillInIntentLocked(ILandroid/os/Bundle;)Landroid/content/Intent;
+PLcom/android/server/autofill/Session;->createOrUpdateViewStateLocked(Landroid/view/autofill/AutofillId;ILandroid/view/autofill/AutofillValue;)Lcom/android/server/autofill/ViewState;
+PLcom/android/server/autofill/Session;->createSanitizers(Landroid/service/autofill/SaveInfo;)Landroid/util/ArrayMap;
 HPLcom/android/server/autofill/Session;->destroyAugmentedAutofillWindowsLocked()V
-PLcom/android/server/autofill/Session;->destroyLocked()Lcom/android/server/autofill/RemoteFillService;
-PLcom/android/server/autofill/Session;->dumpLocked(Ljava/lang/String;Ljava/io/PrintWriter;)V
+HPLcom/android/server/autofill/Session;->destroyLocked()Lcom/android/server/autofill/RemoteFillService;
+PLcom/android/server/autofill/Session;->doStartIntentSender(Landroid/content/IntentSender;Landroid/content/Intent;)V
+HPLcom/android/server/autofill/Session;->dumpLocked(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/autofill/Session;->dumpNumericValue(Ljava/io/PrintWriter;Landroid/metrics/LogMaker;Ljava/lang/String;I)V
 PLcom/android/server/autofill/Session;->dumpRequestLog(Ljava/io/PrintWriter;Landroid/metrics/LogMaker;)V
-PLcom/android/server/autofill/Session;->fillContextWithAllowedValuesLocked(Landroid/service/autofill/FillContext;I)V
-PLcom/android/server/autofill/Session;->getActivityTokenLocked()Landroid/os/IBinder;
-PLcom/android/server/autofill/Session;->getFillContextByRequestIdLocked(I)Landroid/service/autofill/FillContext;
-PLcom/android/server/autofill/Session;->getIdsOfAllViewStatesLocked()[Landroid/view/autofill/AutofillId;
-PLcom/android/server/autofill/Session;->getLastResponseLocked(Ljava/lang/String;)Landroid/service/autofill/FillResponse;
-PLcom/android/server/autofill/Session;->getUiForShowing()Lcom/android/server/autofill/ui/AutoFillUI;
+PLcom/android/server/autofill/Session;->fill(IILandroid/service/autofill/Dataset;)V
+HPLcom/android/server/autofill/Session;->fillContextWithAllowedValuesLocked(Landroid/service/autofill/FillContext;I)V
+PLcom/android/server/autofill/Session;->findByAutofillId(Landroid/view/autofill/AutofillId;)Ljava/lang/String;
+PLcom/android/server/autofill/Session;->findValueFromThisSessionOnlyLocked(Landroid/view/autofill/AutofillId;)Landroid/view/autofill/AutofillValue;
+PLcom/android/server/autofill/Session;->findValueLocked(Landroid/view/autofill/AutofillId;)Landroid/view/autofill/AutofillValue;
+PLcom/android/server/autofill/Session;->forceRemoveSelfLocked()V
+PLcom/android/server/autofill/Session;->forceRemoveSelfLocked(I)V
+HPLcom/android/server/autofill/Session;->getActivityTokenLocked()Landroid/os/IBinder;
+PLcom/android/server/autofill/Session;->getClient()Landroid/view/autofill/IAutoFillManagerClient;
+HPLcom/android/server/autofill/Session;->getFillContextByRequestIdLocked(I)Landroid/service/autofill/FillContext;
+HPLcom/android/server/autofill/Session;->getIdsOfAllViewStatesLocked()[Landroid/view/autofill/AutofillId;
+PLcom/android/server/autofill/Session;->getInlineSuggestionsRequest()Landroid/view/inputmethod/InlineSuggestionsRequest;
+PLcom/android/server/autofill/Session;->getInlineSuggestionsResponseCallback()Lcom/android/internal/view/IInlineSuggestionsResponseCallback;
+HPLcom/android/server/autofill/Session;->getLastResponseIndexLocked()I
+HPLcom/android/server/autofill/Session;->getLastResponseLocked(Ljava/lang/String;)Landroid/service/autofill/FillResponse;
+PLcom/android/server/autofill/Session;->getSanitizedValue(Landroid/util/ArrayMap;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;)Landroid/view/autofill/AutofillValue;
+PLcom/android/server/autofill/Session;->getSaveInfoFlagsLocked()I
+PLcom/android/server/autofill/Session;->getSaveInfoLocked()Landroid/service/autofill/SaveInfo;
+HPLcom/android/server/autofill/Session;->getUiForShowing()Lcom/android/server/autofill/ui/AutoFillUI;
+PLcom/android/server/autofill/Session;->getValueFromContextsLocked(Landroid/view/autofill/AutofillId;)Landroid/view/autofill/AutofillValue;
 PLcom/android/server/autofill/Session;->handleLogContextCommitted()V
-PLcom/android/server/autofill/Session;->hideAugmentedAutofillLocked(Lcom/android/server/autofill/ViewState;)V
-PLcom/android/server/autofill/Session;->isIgnoredLocked(Landroid/view/autofill/AutofillId;)Z
-PLcom/android/server/autofill/Session;->isSaveUiPendingLocked()Z
+HPLcom/android/server/autofill/Session;->hideAugmentedAutofillLocked(Lcom/android/server/autofill/ViewState;)V
+HPLcom/android/server/autofill/Session;->isIgnoredLocked(Landroid/view/autofill/AutofillId;)Z
+PLcom/android/server/autofill/Session;->isInlineSuggestionsEnabled()Z
+HPLcom/android/server/autofill/Session;->isSaveUiPendingLocked()Z
 HPLcom/android/server/autofill/Session;->isSavingLocked()Z
+PLcom/android/server/autofill/Session;->lambda$Fs9zdJwELk-9rAM3RiY6AyBKswI(Lcom/android/server/autofill/Session;Landroid/content/IntentSender;Landroid/content/Intent;)V
+PLcom/android/server/autofill/Session;->lambda$LM4xf4dbxH_NTutQzBkaQNxKbV0(Lcom/android/server/autofill/Session;ILandroid/content/IntentSender;Landroid/content/Intent;)V
+PLcom/android/server/autofill/Session;->lambda$NtvZwhlT1c4eLjg2qI6EER2oCtY(Lcom/android/server/autofill/Session;)V
+PLcom/android/server/autofill/Session;->lambda$cYu1t6lYVopApYW-vct82-7slZk(Lcom/android/server/autofill/Session;)V
+HPLcom/android/server/autofill/Session;->lambda$logFieldClassificationScore$1$Session(I[Landroid/view/autofill/AutofillId;[Ljava/lang/String;[Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Landroid/os/Bundle;)V
 PLcom/android/server/autofill/Session;->lambda$setClientLocked$0$Session()V
 PLcom/android/server/autofill/Session;->lambda$triggerAugmentedAutofillLocked$2(Lcom/android/server/autofill/RemoteAugmentedAutofillService;)V
 PLcom/android/server/autofill/Session;->lambda$v6ZVyksJuHdWgJ1F8aoa_1LJWPo(Lcom/android/server/autofill/Session;)V
+PLcom/android/server/autofill/Session;->logAuthenticationStatusLocked(II)V
 PLcom/android/server/autofill/Session;->logContextCommitted()V
+PLcom/android/server/autofill/Session;->logContextCommitted(Ljava/util/ArrayList;Ljava/util/ArrayList;)V
+HPLcom/android/server/autofill/Session;->logContextCommittedLocked(Ljava/util/ArrayList;Ljava/util/ArrayList;)V
+PLcom/android/server/autofill/Session;->logFieldClassificationScore(Lcom/android/server/autofill/FieldClassificationStrategy;Landroid/service/autofill/FieldClassificationUserData;)V
+PLcom/android/server/autofill/Session;->logSaveShown()V
+HPLcom/android/server/autofill/Session;->maybeRequestInlineSuggestionsRequestThenFillLocked(Lcom/android/server/autofill/ViewState;II)V
 PLcom/android/server/autofill/Session;->mergePreviousSessionLocked(Z)Ljava/util/ArrayList;
 PLcom/android/server/autofill/Session;->newLogMaker(I)Landroid/metrics/LogMaker;
-PLcom/android/server/autofill/Session;->newLogMaker(ILjava/lang/String;)Landroid/metrics/LogMaker;
-PLcom/android/server/autofill/Session;->onFillRequestSuccess(ILandroid/service/autofill/FillResponse;Ljava/lang/String;I)V
+HPLcom/android/server/autofill/Session;->newLogMaker(ILjava/lang/String;)Landroid/metrics/LogMaker;
+PLcom/android/server/autofill/Session;->notifyDisableAutofillToClient(JLandroid/content/ComponentName;)V
+PLcom/android/server/autofill/Session;->notifyUnavailableToClient(ILjava/util/ArrayList;)V
+PLcom/android/server/autofill/Session;->onFillReady(Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;)V
+PLcom/android/server/autofill/Session;->onFillRequestFailure(ILjava/lang/CharSequence;)V
+PLcom/android/server/autofill/Session;->onFillRequestFailureOrTimeout(IZLjava/lang/CharSequence;)V
+HPLcom/android/server/autofill/Session;->onFillRequestSuccess(ILandroid/service/autofill/FillResponse;Ljava/lang/String;I)V
+PLcom/android/server/autofill/Session;->onFillRequestTimeout(I)V
+PLcom/android/server/autofill/Session;->onSaveRequestSuccess(Ljava/lang/String;Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/Session;->processNullResponseLocked(II)V
+PLcom/android/server/autofill/Session;->processResponseLocked(Landroid/service/autofill/FillResponse;Landroid/os/Bundle;I)V
+PLcom/android/server/autofill/Session;->removeSelf()V
 PLcom/android/server/autofill/Session;->removeSelfLocked()V
-PLcom/android/server/autofill/Session;->requestNewFillResponseLocked(Lcom/android/server/autofill/ViewState;II)V
-PLcom/android/server/autofill/Session;->requestNewFillResponseOnViewEnteredIfNecessaryLocked(Landroid/view/autofill/AutofillId;Lcom/android/server/autofill/ViewState;I)V
+PLcom/android/server/autofill/Session;->replaceResponseLocked(Landroid/service/autofill/FillResponse;Landroid/service/autofill/FillResponse;Landroid/os/Bundle;)V
+PLcom/android/server/autofill/Session;->requestHideFillUi(Landroid/view/autofill/AutofillId;)V
+HPLcom/android/server/autofill/Session;->requestNewFillResponseLocked(Lcom/android/server/autofill/ViewState;II)V
+HPLcom/android/server/autofill/Session;->requestNewFillResponseOnViewEnteredIfNecessaryLocked(Landroid/view/autofill/AutofillId;Lcom/android/server/autofill/ViewState;I)V
+HPLcom/android/server/autofill/Session;->requestNewFillResponseOnViewEnteredIfNecessaryLocked(Landroid/view/autofill/AutofillId;Lcom/android/server/autofill/ViewState;I)Z
+PLcom/android/server/autofill/Session;->requestShowFillUi(Landroid/view/autofill/AutofillId;IILandroid/view/autofill/IAutofillWindowPresenter;)V
+PLcom/android/server/autofill/Session;->save()V
+PLcom/android/server/autofill/Session;->setAuthenticationResultLocked(Landroid/os/Bundle;I)V
 PLcom/android/server/autofill/Session;->setClientLocked(Landroid/os/IBinder;)V
 PLcom/android/server/autofill/Session;->setHasCallbackLocked(Z)V
+PLcom/android/server/autofill/Session;->setViewStatesLocked(Landroid/service/autofill/FillResponse;IZ)V
+HPLcom/android/server/autofill/Session;->setViewStatesLocked(Landroid/service/autofill/FillResponse;Landroid/service/autofill/Dataset;IZ)V
 PLcom/android/server/autofill/Session;->shouldStartNewPartitionLocked(Landroid/view/autofill/AutofillId;)Z
 PLcom/android/server/autofill/Session;->showSaveLocked()Z
-PLcom/android/server/autofill/Session;->triggerAugmentedAutofillLocked()Ljava/lang/Runnable;
+PLcom/android/server/autofill/Session;->startAuthentication(ILandroid/content/IntentSender;Landroid/content/Intent;)V
+PLcom/android/server/autofill/Session;->startIntentSender(Landroid/content/IntentSender;Landroid/content/Intent;)V
+PLcom/android/server/autofill/Session;->startIntentSenderAndFinishSession(Landroid/content/IntentSender;)V
+PLcom/android/server/autofill/Session;->switchActivity(Landroid/os/IBinder;Landroid/os/IBinder;)V
+HPLcom/android/server/autofill/Session;->triggerAugmentedAutofillLocked()Ljava/lang/Runnable;
 PLcom/android/server/autofill/Session;->unlinkClientVultureLocked()V
-PLcom/android/server/autofill/Session;->updateLocked(Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;II)V
-PLcom/android/server/autofill/ViewState;-><init>(Landroid/view/autofill/AutofillId;Lcom/android/server/autofill/ViewState$Listener;I)V
-PLcom/android/server/autofill/ViewState;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/autofill/ViewState;->getAutofilledValue()Landroid/view/autofill/AutofillValue;
-PLcom/android/server/autofill/ViewState;->getCurrentValue()Landroid/view/autofill/AutofillValue;
+HPLcom/android/server/autofill/Session;->updateLocked(Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;II)V
+PLcom/android/server/autofill/Session;->updateTrackedIdsLocked()V
+PLcom/android/server/autofill/Session;->updateValuesForSaveLocked()V
+PLcom/android/server/autofill/Session;->writeLog(I)V
+PLcom/android/server/autofill/Session;->wtf(Ljava/lang/Exception;Ljava/lang/String;[Ljava/lang/Object;)V
+HPLcom/android/server/autofill/ViewState;-><init>(Landroid/view/autofill/AutofillId;Lcom/android/server/autofill/ViewState$Listener;I)V
+HPLcom/android/server/autofill/ViewState;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+HPLcom/android/server/autofill/ViewState;->getAutofilledValue()Landroid/view/autofill/AutofillValue;
+HPLcom/android/server/autofill/ViewState;->getCurrentValue()Landroid/view/autofill/AutofillValue;
+PLcom/android/server/autofill/ViewState;->getDatasetId()Ljava/lang/String;
+PLcom/android/server/autofill/ViewState;->getSanitizedValue()Landroid/view/autofill/AutofillValue;
 PLcom/android/server/autofill/ViewState;->getState()I
-PLcom/android/server/autofill/ViewState;->getStateAsString()Ljava/lang/String;
-PLcom/android/server/autofill/ViewState;->getStateAsString(I)Ljava/lang/String;
+HPLcom/android/server/autofill/ViewState;->getStateAsString()Ljava/lang/String;
+HPLcom/android/server/autofill/ViewState;->getStateAsString(I)Ljava/lang/String;
+PLcom/android/server/autofill/ViewState;->getVirtualBounds()Landroid/graphics/Rect;
 PLcom/android/server/autofill/ViewState;->maybeCallOnFillReady(I)V
 PLcom/android/server/autofill/ViewState;->resetState(I)V
-PLcom/android/server/autofill/ViewState;->setCurrentValue(Landroid/view/autofill/AutofillValue;)V
-PLcom/android/server/autofill/ViewState;->setState(I)V
-PLcom/android/server/autofill/ViewState;->update(Landroid/view/autofill/AutofillValue;Landroid/graphics/Rect;I)V
-PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$56AC3ykfo4h_e2LSjdkJ3XQn370;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
-PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$56AC3ykfo4h_e2LSjdkJ3XQn370;->run()V
-PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$LjywPhTUqjU0ZUlG1crxBg8qhRA;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Ljava/lang/String;)V
-PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$LjywPhTUqjU0ZUlG1crxBg8qhRA;->run()V
-PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$VF2EbGE70QNyGDbklN9Uz5xHqyQ;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ViewState;->setAutofilledValue(Landroid/view/autofill/AutofillValue;)V
+HPLcom/android/server/autofill/ViewState;->setCurrentValue(Landroid/view/autofill/AutofillValue;)V
+PLcom/android/server/autofill/ViewState;->setDatasetId(Ljava/lang/String;)V
+PLcom/android/server/autofill/ViewState;->setResponse(Landroid/service/autofill/FillResponse;)V
+PLcom/android/server/autofill/ViewState;->setSanitizedValue(Landroid/view/autofill/AutofillValue;)V
+HPLcom/android/server/autofill/ViewState;->setState(I)V
+PLcom/android/server/autofill/ViewState;->toString()Ljava/lang/String;
+HPLcom/android/server/autofill/ViewState;->update(Landroid/view/autofill/AutofillValue;Landroid/graphics/Rect;I)V
+HPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$56AC3ykfo4h_e2LSjdkJ3XQn370;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$56AC3ykfo4h_e2LSjdkJ3XQn370;->run()V
+PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$DTy4Jc0XMA0Y3HhlZbnbed3GpWs;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Landroid/metrics/LogMaker;)V
+PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$DTy4Jc0XMA0Y3HhlZbnbed3GpWs;->run()V
+PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$H0BWucCEHDp2_3FUpZ9-CLDtxYQ;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Landroid/metrics/LogMaker;)V
+PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$H0BWucCEHDp2_3FUpZ9-CLDtxYQ;->run()V
+HSPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$HTgNHXKclzwJgKbCz3IEvPsgvvQ;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/PendingUi;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Z)V
+HSPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$HTgNHXKclzwJgKbCz3IEvPsgvvQ;->run()V
+HPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$LjywPhTUqjU0ZUlG1crxBg8qhRA;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Ljava/lang/String;)V
+HPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$LjywPhTUqjU0ZUlG1crxBg8qhRA;->run()V
+HPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$N1Kl8ql4a5Um06QDzh6Q59ZwYO4;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$N1Kl8ql4a5Um06QDzh6Q59ZwYO4;->run()V
+PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$S44U_U0PT4w7o-A7hRXjwt9pKXg;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Lcom/android/server/autofill/ui/PendingUi;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/content/ComponentName;Landroid/service/autofill/SaveInfo;Landroid/service/autofill/ValueFinder;Landroid/metrics/LogMaker;ZZ)V
+PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$S44U_U0PT4w7o-A7hRXjwt9pKXg;->run()V
+HPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$VF2EbGE70QNyGDbklN9Uz5xHqyQ;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$VF2EbGE70QNyGDbklN9Uz5xHqyQ;->run()V
 HSPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$XWhvh2-Jd9NLMoEos-e8RkZdQaI;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/PendingUi;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Z)V
 HSPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$XWhvh2-Jd9NLMoEos-e8RkZdQaI;->run()V
-PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$Z-Di7CGd-L0nOI4i7_RO1FYbhgU;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
-PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$Z-Di7CGd-L0nOI4i7_RO1FYbhgU;->run()V
-PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$i7qTc5vqiej5Psbl-bIkD7js-Ao;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$Z-Di7CGd-L0nOI4i7_RO1FYbhgU;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$Z-Di7CGd-L0nOI4i7_RO1FYbhgU;->run()V
+PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$_6s4RnleY3q9wMVHqQks_jl2KOA;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Lcom/android/server/autofill/ui/PendingUi;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/content/ComponentName;Landroid/service/autofill/SaveInfo;Landroid/service/autofill/ValueFinder;Landroid/metrics/LogMaker;ZZ)V
+PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$_6s4RnleY3q9wMVHqQks_jl2KOA;->run()V
+HPLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$i7qTc5vqiej5Psbl-bIkD7js-Ao;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$i7qTc5vqiej5Psbl-bIkD7js-Ao;->run()V
+PLcom/android/server/autofill/ui/-$$Lambda$E4J-3bUcyqJNd4ZlExSBhwy8Tx4;-><init>(Lcom/android/server/autofill/ui/FillUi$AnchoredWindow;)V
+PLcom/android/server/autofill/ui/-$$Lambda$E4J-3bUcyqJNd4ZlExSBhwy8Tx4;->run()V
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$2mij2xTFFWU6jS7_ER9Z-DufU90;-><init>(Lcom/android/server/autofill/ui/FillUi;I)V
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$2mij2xTFFWU6jS7_ER9Z-DufU90;->onFilterComplete(I)V
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$6jFaWS-2Oix04tyCKVhIK-exOKg;-><clinit>()V
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$6jFaWS-2Oix04tyCKVhIK-exOKg;-><init>()V
+HPLcom/android/server/autofill/ui/-$$Lambda$FillUi$AutofillWindowPresenter$N4xQe2B0oe5MBiqZlsy3Lb7vZTg;-><init>(Lcom/android/server/autofill/ui/FillUi$AutofillWindowPresenter;Landroid/view/WindowManager$LayoutParams;)V
+HPLcom/android/server/autofill/ui/-$$Lambda$FillUi$AutofillWindowPresenter$N4xQe2B0oe5MBiqZlsy3Lb7vZTg;->run()V
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$FY016gv4LQ5AA6yOkKTH3EM5zaM;-><init>(Lcom/android/server/autofill/ui/FillUi;)V
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$FY016gv4LQ5AA6yOkKTH3EM5zaM;->onUnhandledKeyEvent(Landroid/view/View;Landroid/view/KeyEvent;)Z
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$ItemsAdapter$1$8s9zobTvKJVJjInaObtlx2flLMc;-><init>(Ljava/lang/CharSequence;)V
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$ItemsAdapter$1$8s9zobTvKJVJjInaObtlx2flLMc;->test(Ljava/lang/Object;)Z
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$QXIyKJs3cMApGd5ifauQkxdpdqk;-><init>(Lcom/android/server/autofill/ui/FillUi;)V
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$QXIyKJs3cMApGd5ifauQkxdpdqk;->onClickHandler(Landroid/view/View;Landroid/app/PendingIntent;Landroid/widget/RemoteViews$RemoteResponse;)Z
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$TUHYXtyYjvn8kBKxh1vyXjC9x84;-><init>(Lcom/android/server/autofill/ui/FillUi;)V
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$TUHYXtyYjvn8kBKxh1vyXjC9x84;->onItemClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)V
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$h0jT24YuSGGDnoZ6Tf22n1QRkO8;-><init>(Lcom/android/server/autofill/ui/FillUi;Landroid/service/autofill/FillResponse;)V
+PLcom/android/server/autofill/ui/-$$Lambda$FillUi$h0jT24YuSGGDnoZ6Tf22n1QRkO8;->onClick(Landroid/view/View;)V
+PLcom/android/server/autofill/ui/-$$Lambda$SaveUi$9E3wVcFykoYBpXtez_dJMd6U_Nw;-><init>(Lcom/android/server/autofill/ui/SaveUi;)V
+PLcom/android/server/autofill/ui/-$$Lambda$SaveUi$E9O26NP1L_DDYBfaO7fQ0hhPAx8;-><init>(Lcom/android/server/autofill/ui/SaveUi;Landroid/service/autofill/SaveInfo;)V
+PLcom/android/server/autofill/ui/-$$Lambda$SaveUi$E9O26NP1L_DDYBfaO7fQ0hhPAx8;->onClick(Landroid/view/View;)V
+PLcom/android/server/autofill/ui/-$$Lambda$SaveUi$MHTJI4CEYKh8w8RM-t9zG_19Jjc;-><init>(Ljava/util/List;)V
+PLcom/android/server/autofill/ui/-$$Lambda$SaveUi$MHTJI4CEYKh8w8RM-t9zG_19Jjc;->test(Ljava/lang/Object;)Z
+PLcom/android/server/autofill/ui/-$$Lambda$SaveUi$b3z89RdKv6skukyM-l67uIcvlf0;-><init>(Lcom/android/server/autofill/ui/SaveUi;)V
+PLcom/android/server/autofill/ui/-$$Lambda$SaveUi$b3z89RdKv6skukyM-l67uIcvlf0;->onClick(Landroid/view/View;)V
+PLcom/android/server/autofill/ui/-$$Lambda$SaveUi$ckPlzqJfB_ohleAkb5RXKU7mFY8;-><init>(Lcom/android/server/autofill/ui/SaveUi;)V
+PLcom/android/server/autofill/ui/-$$Lambda$SaveUi$ckPlzqJfB_ohleAkb5RXKU7mFY8;->onDismiss(Landroid/content/DialogInterface;)V
+PLcom/android/server/autofill/ui/AutoFillUI$1;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Landroid/metrics/LogMaker;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;)V
+PLcom/android/server/autofill/ui/AutoFillUI$1;->onDatasetPicked(Landroid/service/autofill/Dataset;)V
+PLcom/android/server/autofill/ui/AutoFillUI$1;->onDestroy()V
+PLcom/android/server/autofill/ui/AutoFillUI$1;->onResponsePicked(Landroid/service/autofill/FillResponse;)V
+PLcom/android/server/autofill/ui/AutoFillUI$1;->requestHideFillUi()V
+PLcom/android/server/autofill/ui/AutoFillUI$1;->requestShowFillUi(IILandroid/view/autofill/IAutofillWindowPresenter;)V
+PLcom/android/server/autofill/ui/AutoFillUI$1;->startIntentSender(Landroid/content/IntentSender;)V
+PLcom/android/server/autofill/ui/AutoFillUI$2;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Landroid/metrics/LogMaker;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Lcom/android/server/autofill/ui/PendingUi;)V
+PLcom/android/server/autofill/ui/AutoFillUI$2;->onCancel(Landroid/content/IntentSender;)V
+PLcom/android/server/autofill/ui/AutoFillUI$2;->onDestroy()V
+PLcom/android/server/autofill/ui/AutoFillUI$2;->onSave()V
 HSPLcom/android/server/autofill/ui/AutoFillUI;-><init>(Landroid/content/Context;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->access$000(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)Lcom/android/server/autofill/ui/PendingUi;
+PLcom/android/server/autofill/ui/AutoFillUI;->access$100(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/PendingUi;Z)V
+PLcom/android/server/autofill/ui/AutoFillUI;->access$200(Lcom/android/server/autofill/ui/AutoFillUI;)Landroid/content/Context;
+PLcom/android/server/autofill/ui/AutoFillUI;->access$300(Lcom/android/server/autofill/ui/AutoFillUI;)Lcom/android/internal/logging/MetricsLogger;
+PLcom/android/server/autofill/ui/AutoFillUI;->access$400(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Z)V
+PLcom/android/server/autofill/ui/AutoFillUI;->access$500(Lcom/android/server/autofill/ui/AutoFillUI;)Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;
+PLcom/android/server/autofill/ui/AutoFillUI;->clearCallback(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 HSPLcom/android/server/autofill/ui/AutoFillUI;->destroyAll(Lcom/android/server/autofill/ui/PendingUi;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Z)V
 HSPLcom/android/server/autofill/ui/AutoFillUI;->destroyAllUiThread(Lcom/android/server/autofill/ui/PendingUi;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Z)V
 HSPLcom/android/server/autofill/ui/AutoFillUI;->destroySaveUiUiThread(Lcom/android/server/autofill/ui/PendingUi;Z)V
 PLcom/android/server/autofill/ui/AutoFillUI;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/autofill/ui/AutoFillUI;->hideAll(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
-PLcom/android/server/autofill/ui/AutoFillUI;->hideAllUiThread(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HPLcom/android/server/autofill/ui/AutoFillUI;->filterFillUi(Ljava/lang/String;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HPLcom/android/server/autofill/ui/AutoFillUI;->hideAll(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HPLcom/android/server/autofill/ui/AutoFillUI;->hideAllUiThread(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->hideFillUi(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 HSPLcom/android/server/autofill/ui/AutoFillUI;->hideFillUiUiThread(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Z)V
 PLcom/android/server/autofill/ui/AutoFillUI;->hideSaveUiUiThread(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)Lcom/android/server/autofill/ui/PendingUi;
+PLcom/android/server/autofill/ui/AutoFillUI;->isSaveUiShowing()Z
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$clearCallback$1$AutoFillUI(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HSPLcom/android/server/autofill/ui/AutoFillUI;->lambda$destroyAll$11$AutoFillUI(Lcom/android/server/autofill/ui/PendingUi;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Z)V
 HSPLcom/android/server/autofill/ui/AutoFillUI;->lambda$destroyAll$9$AutoFillUI(Lcom/android/server/autofill/ui/PendingUi;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Z)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$filterFillUi$4$AutoFillUI(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Ljava/lang/String;)V
+HPLcom/android/server/autofill/ui/AutoFillUI;->lambda$hideAll$10$AutoFillUI(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->lambda$hideAll$8$AutoFillUI(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$hideFillUi$3$AutoFillUI(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$setCallback$0$AutoFillUI(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$showFillUi$5$AutoFillUI(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Landroid/metrics/LogMaker;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$showFillUi$7$AutoFillUI(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Landroid/metrics/LogMaker;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$showSaveUi$6$AutoFillUI(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Lcom/android/server/autofill/ui/PendingUi;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/content/ComponentName;Landroid/service/autofill/SaveInfo;Landroid/service/autofill/ValueFinder;Landroid/metrics/LogMaker;ZZ)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$showSaveUi$8$AutoFillUI(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Lcom/android/server/autofill/ui/PendingUi;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/content/ComponentName;Landroid/service/autofill/SaveInfo;Landroid/service/autofill/ValueFinder;Landroid/metrics/LogMaker;ZZ)V
+HPLcom/android/server/autofill/ui/AutoFillUI;->setCallback(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->showFillUi(Landroid/view/autofill/AutofillId;Landroid/service/autofill/FillResponse;Ljava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;IZ)V
+PLcom/android/server/autofill/ui/AutoFillUI;->showSaveUi(Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/service/autofill/SaveInfo;Landroid/service/autofill/ValueFinder;Landroid/content/ComponentName;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Lcom/android/server/autofill/ui/PendingUi;ZZ)V
+PLcom/android/server/autofill/ui/CustomScrollView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+PLcom/android/server/autofill/ui/CustomScrollView;->calculateDimensions()V
+PLcom/android/server/autofill/ui/CustomScrollView;->onMeasure(II)V
+PLcom/android/server/autofill/ui/FillUi$AnchoredWindow;-><init>(Lcom/android/server/autofill/ui/FillUi;Landroid/view/View;Lcom/android/server/autofill/ui/OverlayControl;)V
+PLcom/android/server/autofill/ui/FillUi$AnchoredWindow;->hide()V
+PLcom/android/server/autofill/ui/FillUi$AnchoredWindow;->hide(Z)V
+PLcom/android/server/autofill/ui/FillUi$AnchoredWindow;->show(Landroid/view/WindowManager$LayoutParams;)V
+PLcom/android/server/autofill/ui/FillUi$AnnounceFilterResult;-><init>(Lcom/android/server/autofill/ui/FillUi;)V
+PLcom/android/server/autofill/ui/FillUi$AnnounceFilterResult;-><init>(Lcom/android/server/autofill/ui/FillUi;Lcom/android/server/autofill/ui/FillUi$1;)V
+PLcom/android/server/autofill/ui/FillUi$AnnounceFilterResult;->post()V
+PLcom/android/server/autofill/ui/FillUi$AnnounceFilterResult;->remove()V
+PLcom/android/server/autofill/ui/FillUi$AnnounceFilterResult;->run()V
+PLcom/android/server/autofill/ui/FillUi$AutofillWindowPresenter;-><init>(Lcom/android/server/autofill/ui/FillUi;)V
+PLcom/android/server/autofill/ui/FillUi$AutofillWindowPresenter;-><init>(Lcom/android/server/autofill/ui/FillUi;Lcom/android/server/autofill/ui/FillUi$1;)V
+PLcom/android/server/autofill/ui/FillUi$AutofillWindowPresenter;->hide(Landroid/graphics/Rect;)V
+PLcom/android/server/autofill/ui/FillUi$AutofillWindowPresenter;->lambda$show$0$FillUi$AutofillWindowPresenter(Landroid/view/WindowManager$LayoutParams;)V
+PLcom/android/server/autofill/ui/FillUi$AutofillWindowPresenter;->show(Landroid/view/WindowManager$LayoutParams;Landroid/graphics/Rect;ZI)V
+PLcom/android/server/autofill/ui/FillUi$ItemsAdapter$1;-><init>(Lcom/android/server/autofill/ui/FillUi$ItemsAdapter;)V
+PLcom/android/server/autofill/ui/FillUi$ItemsAdapter$1;->lambda$performFiltering$0(Ljava/lang/CharSequence;Lcom/android/server/autofill/ui/FillUi$ViewItem;)Z
+HPLcom/android/server/autofill/ui/FillUi$ItemsAdapter$1;->performFiltering(Ljava/lang/CharSequence;)Landroid/widget/Filter$FilterResults;
+HPLcom/android/server/autofill/ui/FillUi$ItemsAdapter$1;->publishResults(Ljava/lang/CharSequence;Landroid/widget/Filter$FilterResults;)V
+PLcom/android/server/autofill/ui/FillUi$ItemsAdapter;-><init>(Lcom/android/server/autofill/ui/FillUi;Ljava/util/List;)V
+PLcom/android/server/autofill/ui/FillUi$ItemsAdapter;->access$700(Lcom/android/server/autofill/ui/FillUi$ItemsAdapter;)Ljava/util/List;
+PLcom/android/server/autofill/ui/FillUi$ItemsAdapter;->access$800(Lcom/android/server/autofill/ui/FillUi$ItemsAdapter;)Ljava/util/List;
+HPLcom/android/server/autofill/ui/FillUi$ItemsAdapter;->getCount()I
+PLcom/android/server/autofill/ui/FillUi$ItemsAdapter;->getFilter()Landroid/widget/Filter;
+PLcom/android/server/autofill/ui/FillUi$ItemsAdapter;->getItem(I)Lcom/android/server/autofill/ui/FillUi$ViewItem;
+PLcom/android/server/autofill/ui/FillUi$ItemsAdapter;->getItemId(I)J
+PLcom/android/server/autofill/ui/FillUi$ItemsAdapter;->getView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;
+PLcom/android/server/autofill/ui/FillUi$ViewItem;-><init>(Landroid/service/autofill/Dataset;Ljava/util/regex/Pattern;ZLjava/lang/String;Landroid/view/View;)V
+HPLcom/android/server/autofill/ui/FillUi$ViewItem;->matches(Ljava/lang/CharSequence;)Z
+PLcom/android/server/autofill/ui/FillUi;-><clinit>()V
+PLcom/android/server/autofill/ui/FillUi;-><init>(Landroid/content/Context;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;Lcom/android/server/autofill/ui/OverlayControl;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;ZLcom/android/server/autofill/ui/FillUi$Callback;)V
+PLcom/android/server/autofill/ui/FillUi;->access$100(Lcom/android/server/autofill/ui/FillUi;)Lcom/android/server/autofill/ui/FillUi$AnchoredWindow;
+PLcom/android/server/autofill/ui/FillUi;->access$1000(Lcom/android/server/autofill/ui/FillUi;)Landroid/widget/ListView;
+PLcom/android/server/autofill/ui/FillUi;->access$1100(Lcom/android/server/autofill/ui/FillUi;)Landroid/content/Context;
+PLcom/android/server/autofill/ui/FillUi;->access$900(Lcom/android/server/autofill/ui/FillUi;)V
+PLcom/android/server/autofill/ui/FillUi;->announceSearchResultIfNeeded()V
+PLcom/android/server/autofill/ui/FillUi;->applyCancelAction(Landroid/view/View;[I)V
+PLcom/android/server/autofill/ui/FillUi;->applyNewFilterText()V
+PLcom/android/server/autofill/ui/FillUi;->destroy(Z)V
+PLcom/android/server/autofill/ui/FillUi;->isFullScreen(Landroid/content/Context;)Z
+HPLcom/android/server/autofill/ui/FillUi;->lambda$applyNewFilterText$6$FillUi(II)V
+PLcom/android/server/autofill/ui/FillUi;->lambda$new$0$FillUi(Landroid/view/View;Landroid/view/KeyEvent;)Z
+PLcom/android/server/autofill/ui/FillUi;->lambda$new$1$FillUi(Landroid/view/View;Landroid/app/PendingIntent;Landroid/widget/RemoteViews$RemoteResponse;)Z
+PLcom/android/server/autofill/ui/FillUi;->lambda$new$2$FillUi(Landroid/service/autofill/FillResponse;Landroid/view/View;)V
+PLcom/android/server/autofill/ui/FillUi;->lambda$new$3$FillUi(Landroid/widget/AdapterView;Landroid/view/View;IJ)V
+PLcom/android/server/autofill/ui/FillUi;->newClickBlocker()Landroid/widget/RemoteViews$OnClickHandler;
+PLcom/android/server/autofill/ui/FillUi;->requestShowFillUi()V
+PLcom/android/server/autofill/ui/FillUi;->resolveMaxWindowSize(Landroid/content/Context;Landroid/graphics/Point;)V
+PLcom/android/server/autofill/ui/FillUi;->setFilterText(Ljava/lang/String;)V
+PLcom/android/server/autofill/ui/FillUi;->throwIfDestroyed()V
+PLcom/android/server/autofill/ui/FillUi;->updateContentSize()Z
+PLcom/android/server/autofill/ui/FillUi;->updateHeight(Landroid/view/View;Landroid/graphics/Point;)Z
+PLcom/android/server/autofill/ui/FillUi;->updateWidth(Landroid/view/View;Landroid/graphics/Point;)Z
 HSPLcom/android/server/autofill/ui/OverlayControl;-><init>(Landroid/content/Context;)V
+PLcom/android/server/autofill/ui/OverlayControl;->hideOverlays()V
+PLcom/android/server/autofill/ui/OverlayControl;->setOverlayAllowed(Z)V
+PLcom/android/server/autofill/ui/OverlayControl;->showOverlays()V
+PLcom/android/server/autofill/ui/PendingUi;-><init>(Landroid/os/IBinder;ILandroid/view/autofill/IAutoFillManagerClient;)V
+PLcom/android/server/autofill/ui/PendingUi;->getState()I
+PLcom/android/server/autofill/ui/PendingUi;->toString()Ljava/lang/String;
+PLcom/android/server/autofill/ui/SaveUi$1;-><init>(Lcom/android/server/autofill/ui/SaveUi;Landroid/content/Context;I)V
+PLcom/android/server/autofill/ui/SaveUi$OneActionThenDestroyListener;-><init>(Lcom/android/server/autofill/ui/SaveUi;Lcom/android/server/autofill/ui/SaveUi$OnSaveListener;)V
+PLcom/android/server/autofill/ui/SaveUi$OneActionThenDestroyListener;->onCancel(Landroid/content/IntentSender;)V
+PLcom/android/server/autofill/ui/SaveUi$OneActionThenDestroyListener;->onDestroy()V
+PLcom/android/server/autofill/ui/SaveUi$OneActionThenDestroyListener;->onSave()V
+PLcom/android/server/autofill/ui/SaveUi;-><init>(Landroid/content/Context;Lcom/android/server/autofill/ui/PendingUi;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/content/ComponentName;Landroid/service/autofill/SaveInfo;Landroid/service/autofill/ValueFinder;Lcom/android/server/autofill/ui/OverlayControl;Lcom/android/server/autofill/ui/SaveUi$OnSaveListener;ZZZ)V
+PLcom/android/server/autofill/ui/SaveUi;->applyCustomDescription(Landroid/content/Context;Landroid/view/View;Landroid/service/autofill/ValueFinder;Landroid/service/autofill/SaveInfo;)Z
+PLcom/android/server/autofill/ui/SaveUi;->applyMovementMethodIfNeed(Landroid/widget/TextView;)V
+PLcom/android/server/autofill/ui/SaveUi;->applyTextViewStyle(Landroid/view/View;)V
+PLcom/android/server/autofill/ui/SaveUi;->destroy()V
+PLcom/android/server/autofill/ui/SaveUi;->hide()Lcom/android/server/autofill/ui/PendingUi;
+PLcom/android/server/autofill/ui/SaveUi;->isShowing()Z
+PLcom/android/server/autofill/ui/SaveUi;->lambda$applyTextViewStyle$5(Ljava/util/List;Landroid/view/View;)Z
+PLcom/android/server/autofill/ui/SaveUi;->lambda$new$0$SaveUi(Landroid/service/autofill/SaveInfo;Landroid/view/View;)V
+PLcom/android/server/autofill/ui/SaveUi;->lambda$new$1$SaveUi(Landroid/view/View;)V
+PLcom/android/server/autofill/ui/SaveUi;->lambda$new$2$SaveUi(Landroid/content/DialogInterface;)V
+PLcom/android/server/autofill/ui/SaveUi;->newLogMaker(I)Landroid/metrics/LogMaker;
+PLcom/android/server/autofill/ui/SaveUi;->newLogMaker(II)Landroid/metrics/LogMaker;
+PLcom/android/server/autofill/ui/SaveUi;->setServiceIcon(Landroid/content/Context;Landroid/view/View;Landroid/graphics/drawable/Drawable;)V
+PLcom/android/server/autofill/ui/SaveUi;->show()V
+PLcom/android/server/autofill/ui/SaveUi;->throwIfDestroyed()V
+PLcom/android/server/autofill/ui/SaveUi;->writeLog(I)V
 HPLcom/android/server/backup/-$$Lambda$-xfpm33S8Jqv3KpU_-llxhj8ZPI;-><init>(Ljava/util/Set;)V
-PLcom/android/server/backup/-$$Lambda$-xfpm33S8Jqv3KpU_-llxhj8ZPI;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/backup/-$$Lambda$-xfpm33S8Jqv3KpU_-llxhj8ZPI;->test(Ljava/lang/Object;)Z
+PLcom/android/server/backup/-$$Lambda$BackupManagerService$1$wNR2kL0jG0FP7rVncyt3YJRw1RI;-><init>(Lcom/android/server/backup/BackupManagerService$1;I)V
+PLcom/android/server/backup/-$$Lambda$BackupManagerService$1$wNR2kL0jG0FP7rVncyt3YJRw1RI;->run()V
 PLcom/android/server/backup/-$$Lambda$BackupManagerService$6P4GQiH-FZ5t_w1XVcGR55OdSL4;-><init>(Lcom/android/server/backup/BackupManagerService;I)V
 PLcom/android/server/backup/-$$Lambda$BackupManagerService$6P4GQiH-FZ5t_w1XVcGR55OdSL4;->run()V
+PLcom/android/server/backup/-$$Lambda$BackupManagerService$PzvNLQ5gp1PWnFQ6Pxc6Lw6ubKU;-><init>(Lcom/android/server/backup/BackupManagerService;I)V
+PLcom/android/server/backup/-$$Lambda$BackupManagerService$PzvNLQ5gp1PWnFQ6Pxc6Lw6ubKU;->run()V
 PLcom/android/server/backup/-$$Lambda$TransportManager$4ND1hZMerK5gHU67okq6DZjKDQw;-><clinit>()V
 PLcom/android/server/backup/-$$Lambda$TransportManager$4ND1hZMerK5gHU67okq6DZjKDQw;-><init>()V
 PLcom/android/server/backup/-$$Lambda$TransportManager$4ND1hZMerK5gHU67okq6DZjKDQw;->test(Ljava/lang/Object;)Z
@@ -6391,99 +10526,131 @@
 PLcom/android/server/backup/-$$Lambda$TransportManager$Z9ckpFUW2V4jkdHnyXIEiLuAoBc;-><clinit>()V
 PLcom/android/server/backup/-$$Lambda$TransportManager$Z9ckpFUW2V4jkdHnyXIEiLuAoBc;-><init>()V
 HPLcom/android/server/backup/-$$Lambda$TransportManager$_dxJobf45tWiMkaNlKY-z26kB2Q;-><init>(Ljava/lang/String;)V
-PLcom/android/server/backup/-$$Lambda$TransportManager$_dxJobf45tWiMkaNlKY-z26kB2Q;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/backup/-$$Lambda$TransportManager$_dxJobf45tWiMkaNlKY-z26kB2Q;->test(Ljava/lang/Object;)Z
 PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$2$9w65wn45YYtTkXbyQZdj_7K5LSs;-><init>(Lcom/android/server/backup/UserBackupManagerService$2;Ljava/lang/String;)V
 PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$2$9w65wn45YYtTkXbyQZdj_7K5LSs;->run()V
 PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$2$ICUfBQAK1UQkmGSsPDmR00etFBk;-><init>(Lcom/android/server/backup/UserBackupManagerService$2;Ljava/lang/String;)V
 PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$2$ICUfBQAK1UQkmGSsPDmR00etFBk;->run()V
-PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$2$VpHOYQHCWBG618oharjEXEDr57U;-><init>(Lcom/android/server/backup/UserBackupManagerService$2;Ljava/lang/String;[Ljava/lang/String;)V
-PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$2$VpHOYQHCWBG618oharjEXEDr57U;->run()V
+HPLcom/android/server/backup/-$$Lambda$UserBackupManagerService$2$VpHOYQHCWBG618oharjEXEDr57U;-><init>(Lcom/android/server/backup/UserBackupManagerService$2;Ljava/lang/String;[Ljava/lang/String;)V
+HPLcom/android/server/backup/-$$Lambda$UserBackupManagerService$2$VpHOYQHCWBG618oharjEXEDr57U;->run()V
 PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$9cuIH_XloqtNByp_6hXeGaVars8;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
 PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$9cuIH_XloqtNByp_6hXeGaVars8;->onTransportRegistered(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$TB8LUl0TwUK9CmmdepXioEU4Qxg;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/transport/TransportClient;)V
 PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$TB8LUl0TwUK9CmmdepXioEU4Qxg;->onFinished(Ljava/lang/String;)V
-PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$W51Aw9Pu9AOsFVYQgIZy31INmwI;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
-PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$W51Aw9Pu9AOsFVYQgIZy31INmwI;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/backup/-$$Lambda$UserBackupManagerService$W51Aw9Pu9AOsFVYQgIZy31INmwI;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
+HPLcom/android/server/backup/-$$Lambda$UserBackupManagerService$W51Aw9Pu9AOsFVYQgIZy31INmwI;->accept(Ljava/lang/Object;)V
 PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$_gNqJq9Ygtc0ZVwYhCSDKCUKrKY;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
 PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$_gNqJq9Ygtc0ZVwYhCSDKCUKrKY;->run()V
+PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$pLslHGi1wuuGrjS32QbMlDjlGbM;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
+PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$pLslHGi1wuuGrjS32QbMlDjlGbM;->onFinished(Ljava/lang/String;)V
 HPLcom/android/server/backup/-$$Lambda$UserBackupManagerService$sAYsrY5C5zAl7EgKgwo188kx6JE;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/transport/TransportClient;)V
 PLcom/android/server/backup/-$$Lambda$UserBackupManagerService$sAYsrY5C5zAl7EgKgwo188kx6JE;->onFinished(Ljava/lang/String;)V
 PLcom/android/server/backup/-$$Lambda$pM_c5tVAGDtxjxLF_ONtACWWq6Q;-><init>(Lcom/android/server/backup/TransportManager;)V
 PLcom/android/server/backup/-$$Lambda$pM_c5tVAGDtxjxLF_ONtACWWq6Q;->run()V
 PLcom/android/server/backup/BackupAgentTimeoutParameters;-><init>(Landroid/os/Handler;Landroid/content/ContentResolver;)V
 PLcom/android/server/backup/BackupAgentTimeoutParameters;->getFullBackupAgentTimeoutMillis()J
-PLcom/android/server/backup/BackupAgentTimeoutParameters;->getKvBackupAgentTimeoutMillis()J
+HPLcom/android/server/backup/BackupAgentTimeoutParameters;->getKvBackupAgentTimeoutMillis()J
 PLcom/android/server/backup/BackupAgentTimeoutParameters;->getQuotaExceededTimeoutMillis()J
+PLcom/android/server/backup/BackupAgentTimeoutParameters;->getRestoreAgentFinishedTimeoutMillis()J
+PLcom/android/server/backup/BackupAgentTimeoutParameters;->getRestoreAgentTimeoutMillis()J
 PLcom/android/server/backup/BackupAgentTimeoutParameters;->getSettingValue(Landroid/content/ContentResolver;)Ljava/lang/String;
 PLcom/android/server/backup/BackupAgentTimeoutParameters;->update(Landroid/util/KeyValueListParser;)V
 PLcom/android/server/backup/BackupManagerConstants;-><init>(Landroid/os/Handler;Landroid/content/ContentResolver;)V
-PLcom/android/server/backup/BackupManagerConstants;->getBackupFinishedNotificationReceivers()[Ljava/lang/String;
-PLcom/android/server/backup/BackupManagerConstants;->getFullBackupIntervalMilliseconds()J
-PLcom/android/server/backup/BackupManagerConstants;->getFullBackupRequireCharging()Z
-PLcom/android/server/backup/BackupManagerConstants;->getFullBackupRequiredNetworkType()I
+HPLcom/android/server/backup/BackupManagerConstants;->getBackupFinishedNotificationReceivers()[Ljava/lang/String;
+HPLcom/android/server/backup/BackupManagerConstants;->getFullBackupIntervalMilliseconds()J
+HPLcom/android/server/backup/BackupManagerConstants;->getFullBackupRequireCharging()Z
+HPLcom/android/server/backup/BackupManagerConstants;->getFullBackupRequiredNetworkType()I
 PLcom/android/server/backup/BackupManagerConstants;->getKeyValueBackupFuzzMilliseconds()J
-PLcom/android/server/backup/BackupManagerConstants;->getKeyValueBackupIntervalMilliseconds()J
+HPLcom/android/server/backup/BackupManagerConstants;->getKeyValueBackupIntervalMilliseconds()J
 PLcom/android/server/backup/BackupManagerConstants;->getKeyValueBackupRequireCharging()Z
 PLcom/android/server/backup/BackupManagerConstants;->getKeyValueBackupRequiredNetworkType()I
 PLcom/android/server/backup/BackupManagerConstants;->getSettingValue(Landroid/content/ContentResolver;)Ljava/lang/String;
 PLcom/android/server/backup/BackupManagerConstants;->update(Landroid/util/KeyValueListParser;)V
 HSPLcom/android/server/backup/BackupManagerService$1;-><init>(Lcom/android/server/backup/BackupManagerService;)V
+PLcom/android/server/backup/BackupManagerService$1;->lambda$onReceive$0$BackupManagerService$1(I)V
+PLcom/android/server/backup/BackupManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/backup/BackupManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/backup/BackupManagerService$Lifecycle;-><init>(Landroid/content/Context;Lcom/android/server/backup/BackupManagerService;)V
 HSPLcom/android/server/backup/BackupManagerService$Lifecycle;->onStart()V
+PLcom/android/server/backup/BackupManagerService$Lifecycle;->onStopUser(I)V
 PLcom/android/server/backup/BackupManagerService$Lifecycle;->onUnlockUser(I)V
 HSPLcom/android/server/backup/BackupManagerService$Lifecycle;->publishService(Ljava/lang/String;Landroid/os/IBinder;)V
 HSPLcom/android/server/backup/BackupManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/backup/BackupManagerService;-><init>(Landroid/content/Context;Landroid/util/SparseArray;)V
+PLcom/android/server/backup/BackupManagerService;->access$000(Lcom/android/server/backup/BackupManagerService;)Landroid/os/Handler;
+PLcom/android/server/backup/BackupManagerService;->access$100(Lcom/android/server/backup/BackupManagerService;I)V
 PLcom/android/server/backup/BackupManagerService;->activateBackupForUserLocked(I)V
 PLcom/android/server/backup/BackupManagerService;->agentConnected(ILjava/lang/String;Landroid/os/IBinder;)V
 HPLcom/android/server/backup/BackupManagerService;->agentConnectedForUser(ILjava/lang/String;Landroid/os/IBinder;)V
+PLcom/android/server/backup/BackupManagerService;->agentDisconnected(ILjava/lang/String;)V
+PLcom/android/server/backup/BackupManagerService;->agentDisconnectedForUser(ILjava/lang/String;)V
+PLcom/android/server/backup/BackupManagerService;->backupNow()V
+PLcom/android/server/backup/BackupManagerService;->backupNow(I)V
+PLcom/android/server/backup/BackupManagerService;->backupNowForUser(I)V
+HPLcom/android/server/backup/BackupManagerService;->beginFullBackup(ILcom/android/server/backup/FullBackupJob;)Z
 PLcom/android/server/backup/BackupManagerService;->binderGetCallingUid()I
 HSPLcom/android/server/backup/BackupManagerService;->binderGetCallingUserId()I
 HPLcom/android/server/backup/BackupManagerService;->createFile(Ljava/io/File;)V
-PLcom/android/server/backup/BackupManagerService;->dataChanged(ILjava/lang/String;)V
+HPLcom/android/server/backup/BackupManagerService;->dataChanged(ILjava/lang/String;)V
 HSPLcom/android/server/backup/BackupManagerService;->dataChanged(Ljava/lang/String;)V
 HSPLcom/android/server/backup/BackupManagerService;->dataChangedForUser(ILjava/lang/String;)V
+PLcom/android/server/backup/BackupManagerService;->deactivateBackupForUserLocked(I)V
+PLcom/android/server/backup/BackupManagerService;->deleteFile(Ljava/io/File;)V
 PLcom/android/server/backup/BackupManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/backup/BackupManagerService;->enforceCallingPermissionOnUserId(ILjava/lang/String;)V
+PLcom/android/server/backup/BackupManagerService;->dumpWithoutCheckingPermission(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/backup/BackupManagerService;->endFullBackup(I)V
+HPLcom/android/server/backup/BackupManagerService;->enforceCallingPermissionOnUserId(ILjava/lang/String;)V
 PLcom/android/server/backup/BackupManagerService;->enforcePermissionsOnUser(I)V
 PLcom/android/server/backup/BackupManagerService;->getActivatedFileForNonSystemUser(I)Ljava/io/File;
+PLcom/android/server/backup/BackupManagerService;->getAvailableRestoreToken(ILjava/lang/String;)J
+PLcom/android/server/backup/BackupManagerService;->getAvailableRestoreTokenForUser(ILjava/lang/String;)J
 HPLcom/android/server/backup/BackupManagerService;->getCurrentTransport()Ljava/lang/String;
-PLcom/android/server/backup/BackupManagerService;->getCurrentTransport(I)Ljava/lang/String;
+HPLcom/android/server/backup/BackupManagerService;->getCurrentTransport(I)Ljava/lang/String;
 HPLcom/android/server/backup/BackupManagerService;->getCurrentTransportForUser(I)Ljava/lang/String;
 PLcom/android/server/backup/BackupManagerService;->getDataManagementIntent(ILjava/lang/String;)Landroid/content/Intent;
 PLcom/android/server/backup/BackupManagerService;->getDataManagementIntent(Ljava/lang/String;)Landroid/content/Intent;
 PLcom/android/server/backup/BackupManagerService;->getDataManagementIntentForUser(ILjava/lang/String;)Landroid/content/Intent;
+HPLcom/android/server/backup/BackupManagerService;->getInstance()Lcom/android/server/backup/BackupManagerService;
 PLcom/android/server/backup/BackupManagerService;->getRememberActivatedFileForNonSystemUser(I)Ljava/io/File;
 HPLcom/android/server/backup/BackupManagerService;->getServiceForUserIfCallerHasPermission(ILjava/lang/String;)Lcom/android/server/backup/UserBackupManagerService;
-PLcom/android/server/backup/BackupManagerService;->getSuppressFileForSystemUser()Ljava/io/File;
+HPLcom/android/server/backup/BackupManagerService;->getSuppressFileForSystemUser()Ljava/io/File;
 PLcom/android/server/backup/BackupManagerService;->getUserManager()Landroid/os/UserManager;
-PLcom/android/server/backup/BackupManagerService;->isAppEligibleForBackup(ILjava/lang/String;)Z
+PLcom/android/server/backup/BackupManagerService;->hasBackupPassword()Z
+HPLcom/android/server/backup/BackupManagerService;->isAppEligibleForBackup(ILjava/lang/String;)Z
 HPLcom/android/server/backup/BackupManagerService;->isAppEligibleForBackupForUser(ILjava/lang/String;)Z
-PLcom/android/server/backup/BackupManagerService;->isBackupActivatedForUser(I)Z
+HPLcom/android/server/backup/BackupManagerService;->isBackupActivatedForUser(I)Z
 HSPLcom/android/server/backup/BackupManagerService;->isBackupDisabled()Z
-PLcom/android/server/backup/BackupManagerService;->isBackupEnabled()Z
-PLcom/android/server/backup/BackupManagerService;->isBackupEnabled(I)Z
-PLcom/android/server/backup/BackupManagerService;->isBackupEnabledForUser(I)Z
+HPLcom/android/server/backup/BackupManagerService;->isBackupEnabled()Z
+HPLcom/android/server/backup/BackupManagerService;->isBackupEnabled(I)Z
+HPLcom/android/server/backup/BackupManagerService;->isBackupEnabledForUser(I)Z
 PLcom/android/server/backup/BackupManagerService;->isBackupServiceActive(I)Z
 HSPLcom/android/server/backup/BackupManagerService;->isUserReadyForBackup(I)Z
+PLcom/android/server/backup/BackupManagerService;->lambda$onStopUser$1$BackupManagerService(I)V
 PLcom/android/server/backup/BackupManagerService;->lambda$onUnlockUser$0$BackupManagerService(I)V
 PLcom/android/server/backup/BackupManagerService;->listAllTransports()[Ljava/lang/String;
 PLcom/android/server/backup/BackupManagerService;->listAllTransports(I)[Ljava/lang/String;
 PLcom/android/server/backup/BackupManagerService;->listAllTransportsForUser(I)[Ljava/lang/String;
+PLcom/android/server/backup/BackupManagerService;->onRemovedNonSystemUser(I)V
+PLcom/android/server/backup/BackupManagerService;->onStopUser(I)V
 PLcom/android/server/backup/BackupManagerService;->onUnlockUser(I)V
 PLcom/android/server/backup/BackupManagerService;->opComplete(IIJ)V
 HPLcom/android/server/backup/BackupManagerService;->opCompleteForUser(IIJ)V
 PLcom/android/server/backup/BackupManagerService;->postToHandler(Ljava/lang/Runnable;)V
-PLcom/android/server/backup/BackupManagerService;->requestBackup(I[Ljava/lang/String;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;I)I
+HPLcom/android/server/backup/BackupManagerService;->requestBackup(I[Ljava/lang/String;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;I)I
 HPLcom/android/server/backup/BackupManagerService;->requestBackup([Ljava/lang/String;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;I)I
 HPLcom/android/server/backup/BackupManagerService;->requestBackupForUser(I[Ljava/lang/String;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;I)I
 PLcom/android/server/backup/BackupManagerService;->restoreAtInstall(ILjava/lang/String;I)V
 PLcom/android/server/backup/BackupManagerService;->restoreAtInstallForUser(ILjava/lang/String;I)V
+PLcom/android/server/backup/BackupManagerService;->selectBackupTransport(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/backup/BackupManagerService;->selectBackupTransportForUser(ILjava/lang/String;)Ljava/lang/String;
+PLcom/android/server/backup/BackupManagerService;->setBackupEnabled(IZ)V
+PLcom/android/server/backup/BackupManagerService;->setBackupEnabled(Z)V
+PLcom/android/server/backup/BackupManagerService;->setBackupEnabledForUser(IZ)V
 HPLcom/android/server/backup/BackupManagerService;->setBackupServiceActive(IZ)V
-PLcom/android/server/backup/BackupManagerService;->startServiceForUser(I)V
+HPLcom/android/server/backup/BackupManagerService;->startServiceForUser(I)V
 PLcom/android/server/backup/BackupManagerService;->startServiceForUser(ILcom/android/server/backup/UserBackupManagerService;)V
-PLcom/android/server/backup/BackupManagerService;->updateTransportAttributes(ILandroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V
+PLcom/android/server/backup/BackupManagerService;->stopServiceForUser(I)V
+HPLcom/android/server/backup/BackupManagerService;->updateTransportAttributes(ILandroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V
 HPLcom/android/server/backup/BackupManagerService;->updateTransportAttributesForUser(ILandroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V
 PLcom/android/server/backup/BackupPasswordManager$PasswordHashFileCodec;-><init>()V
 PLcom/android/server/backup/BackupPasswordManager$PasswordHashFileCodec;-><init>(Lcom/android/server/backup/BackupPasswordManager$1;)V
@@ -6493,25 +10660,28 @@
 PLcom/android/server/backup/BackupPasswordManager;->getPasswordHashFile()Ljava/io/File;
 PLcom/android/server/backup/BackupPasswordManager;->getPasswordHashFileCodec()Lcom/android/server/backup/utils/DataStreamFileCodec;
 PLcom/android/server/backup/BackupPasswordManager;->getPasswordVersionFileCodec()Lcom/android/server/backup/utils/DataStreamFileCodec;
+PLcom/android/server/backup/BackupPasswordManager;->hasBackupPassword()Z
 PLcom/android/server/backup/BackupPasswordManager;->loadStateFromFilesystem()V
-PLcom/android/server/backup/BackupUtils;->hashSignature(Landroid/content/pm/Signature;)[B
-PLcom/android/server/backup/BackupUtils;->hashSignature([B)[B
+HPLcom/android/server/backup/BackupUtils;->hashSignature(Landroid/content/pm/Signature;)[B
+HPLcom/android/server/backup/BackupUtils;->hashSignature([B)[B
 HPLcom/android/server/backup/BackupUtils;->hashSignatureArray([Landroid/content/pm/Signature;)Ljava/util/ArrayList;
-PLcom/android/server/backup/BackupUtils;->signaturesMatch(Ljava/util/ArrayList;Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageManagerInternal;)Z
-PLcom/android/server/backup/DataChangedJournal;-><init>(Ljava/io/File;)V
+HPLcom/android/server/backup/BackupUtils;->signaturesMatch(Ljava/util/ArrayList;Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageManagerInternal;)Z
+HPLcom/android/server/backup/DataChangedJournal;-><init>(Ljava/io/File;)V
 PLcom/android/server/backup/DataChangedJournal;->addPackage(Ljava/lang/String;)V
 PLcom/android/server/backup/DataChangedJournal;->delete()Z
-PLcom/android/server/backup/DataChangedJournal;->equals(Ljava/lang/Object;)Z
-PLcom/android/server/backup/DataChangedJournal;->forEach(Ljava/util/function/Consumer;)V
-PLcom/android/server/backup/DataChangedJournal;->listJournals(Ljava/io/File;)Ljava/util/ArrayList;
+HPLcom/android/server/backup/DataChangedJournal;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/backup/DataChangedJournal;->forEach(Ljava/util/function/Consumer;)V
+HPLcom/android/server/backup/DataChangedJournal;->listJournals(Ljava/io/File;)Ljava/util/ArrayList;
 PLcom/android/server/backup/DataChangedJournal;->newJournal(Ljava/io/File;)Lcom/android/server/backup/DataChangedJournal;
+PLcom/android/server/backup/FileMetadata;-><init>()V
 PLcom/android/server/backup/FullBackupJob;-><clinit>()V
-PLcom/android/server/backup/FullBackupJob;-><init>()V
-PLcom/android/server/backup/FullBackupJob;->finishBackupPass(I)V
-PLcom/android/server/backup/FullBackupJob;->getJobIdForUserId(I)I
-PLcom/android/server/backup/FullBackupJob;->onStartJob(Landroid/app/job/JobParameters;)Z
+HPLcom/android/server/backup/FullBackupJob;-><init>()V
+PLcom/android/server/backup/FullBackupJob;->cancel(ILandroid/content/Context;)V
+HPLcom/android/server/backup/FullBackupJob;->finishBackupPass(I)V
+HPLcom/android/server/backup/FullBackupJob;->getJobIdForUserId(I)I
+HPLcom/android/server/backup/FullBackupJob;->onStartJob(Landroid/app/job/JobParameters;)Z
 PLcom/android/server/backup/FullBackupJob;->onStopJob(Landroid/app/job/JobParameters;)Z
-PLcom/android/server/backup/FullBackupJob;->schedule(ILandroid/content/Context;JLcom/android/server/backup/BackupManagerConstants;)V
+HPLcom/android/server/backup/FullBackupJob;->schedule(ILandroid/content/Context;JLcom/android/server/backup/BackupManagerConstants;)V
 PLcom/android/server/backup/JobIdManager;->getJobIdForUserId(III)I
 PLcom/android/server/backup/KeyValueBackupJob;-><clinit>()V
 PLcom/android/server/backup/KeyValueBackupJob;-><init>()V
@@ -6522,26 +10692,45 @@
 PLcom/android/server/backup/KeyValueBackupJob;->onStartJob(Landroid/app/job/JobParameters;)Z
 HPLcom/android/server/backup/KeyValueBackupJob;->schedule(ILandroid/content/Context;JLcom/android/server/backup/BackupManagerConstants;)V
 HPLcom/android/server/backup/KeyValueBackupJob;->schedule(ILandroid/content/Context;Lcom/android/server/backup/BackupManagerConstants;)V
+PLcom/android/server/backup/PackageManagerBackupAgent$AncestralVersion1RestoreDataConsumer;-><init>(Lcom/android/server/backup/PackageManagerBackupAgent;)V
+PLcom/android/server/backup/PackageManagerBackupAgent$AncestralVersion1RestoreDataConsumer;-><init>(Lcom/android/server/backup/PackageManagerBackupAgent;Lcom/android/server/backup/PackageManagerBackupAgent$1;)V
+HPLcom/android/server/backup/PackageManagerBackupAgent$AncestralVersion1RestoreDataConsumer;->consumeRestoreData(Landroid/app/backup/BackupDataInput;)V
 HPLcom/android/server/backup/PackageManagerBackupAgent$Metadata;-><init>(Lcom/android/server/backup/PackageManagerBackupAgent;JLjava/util/ArrayList;)V
-PLcom/android/server/backup/PackageManagerBackupAgent;-><init>(Landroid/content/pm/PackageManager;I)V
+HPLcom/android/server/backup/PackageManagerBackupAgent;-><init>(Landroid/content/pm/PackageManager;I)V
 PLcom/android/server/backup/PackageManagerBackupAgent;-><init>(Landroid/content/pm/PackageManager;Ljava/util/List;I)V
-PLcom/android/server/backup/PackageManagerBackupAgent;->evaluateStorablePackages()V
-PLcom/android/server/backup/PackageManagerBackupAgent;->getPreferredHomeComponent()Landroid/content/ComponentName;
+PLcom/android/server/backup/PackageManagerBackupAgent;->access$1002(Lcom/android/server/backup/PackageManagerBackupAgent;Ljava/util/HashMap;)Ljava/util/HashMap;
+PLcom/android/server/backup/PackageManagerBackupAgent;->access$202(Lcom/android/server/backup/PackageManagerBackupAgent;I)I
+PLcom/android/server/backup/PackageManagerBackupAgent;->access$302(Lcom/android/server/backup/PackageManagerBackupAgent;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/backup/PackageManagerBackupAgent;->access$402(Lcom/android/server/backup/PackageManagerBackupAgent;Z)Z
+PLcom/android/server/backup/PackageManagerBackupAgent;->access$502(Lcom/android/server/backup/PackageManagerBackupAgent;Landroid/content/ComponentName;)Landroid/content/ComponentName;
+PLcom/android/server/backup/PackageManagerBackupAgent;->access$602(Lcom/android/server/backup/PackageManagerBackupAgent;J)J
+PLcom/android/server/backup/PackageManagerBackupAgent;->access$702(Lcom/android/server/backup/PackageManagerBackupAgent;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/backup/PackageManagerBackupAgent;->access$802(Lcom/android/server/backup/PackageManagerBackupAgent;Ljava/util/ArrayList;)Ljava/util/ArrayList;
+PLcom/android/server/backup/PackageManagerBackupAgent;->access$900(Ljava/io/DataInputStream;)Ljava/util/ArrayList;
+HPLcom/android/server/backup/PackageManagerBackupAgent;->evaluateStorablePackages()V
+PLcom/android/server/backup/PackageManagerBackupAgent;->getAncestralRecordVersionValue(Landroid/app/backup/BackupDataInput;)I
+HPLcom/android/server/backup/PackageManagerBackupAgent;->getPreferredHomeComponent()Landroid/content/ComponentName;
+PLcom/android/server/backup/PackageManagerBackupAgent;->getRestoreDataConsumer(I)Lcom/android/server/backup/PackageManagerBackupAgent$RestoreDataConsumer;
+PLcom/android/server/backup/PackageManagerBackupAgent;->getRestoredMetadata(Ljava/lang/String;)Lcom/android/server/backup/PackageManagerBackupAgent$Metadata;
 HPLcom/android/server/backup/PackageManagerBackupAgent;->getStorableApplications(Landroid/content/pm/PackageManager;I)Ljava/util/List;
 PLcom/android/server/backup/PackageManagerBackupAgent;->hasMetadata()Z
 PLcom/android/server/backup/PackageManagerBackupAgent;->init(Landroid/content/pm/PackageManager;Ljava/util/List;I)V
 HPLcom/android/server/backup/PackageManagerBackupAgent;->onBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V
+PLcom/android/server/backup/PackageManagerBackupAgent;->onRestore(Landroid/app/backup/BackupDataInput;ILandroid/os/ParcelFileDescriptor;)V
 HPLcom/android/server/backup/PackageManagerBackupAgent;->parseStateFile(Landroid/os/ParcelFileDescriptor;)V
-PLcom/android/server/backup/PackageManagerBackupAgent;->readSignatureHashArray(Ljava/io/DataInputStream;)Ljava/util/ArrayList;
+HPLcom/android/server/backup/PackageManagerBackupAgent;->readSignatureHashArray(Ljava/io/DataInputStream;)Ljava/util/ArrayList;
 HPLcom/android/server/backup/PackageManagerBackupAgent;->writeEntity(Landroid/app/backup/BackupDataOutput;Ljava/lang/String;[B)V
 HPLcom/android/server/backup/PackageManagerBackupAgent;->writeSignatureHashArray(Ljava/io/DataOutputStream;Ljava/util/ArrayList;)V
 HPLcom/android/server/backup/PackageManagerBackupAgent;->writeStateFile(Ljava/util/List;Landroid/content/ComponentName;JLjava/util/ArrayList;Landroid/os/ParcelFileDescriptor;)V
+PLcom/android/server/backup/PeopleBackupHelper;-><clinit>()V
+PLcom/android/server/backup/PeopleBackupHelper;-><init>(I)V
+PLcom/android/server/backup/PeopleBackupHelper;->getBackupPayload(Ljava/lang/String;)[B
 PLcom/android/server/backup/ProcessedPackagesJournal;-><init>(Ljava/io/File;)V
-PLcom/android/server/backup/ProcessedPackagesJournal;->addPackage(Ljava/lang/String;)V
+HPLcom/android/server/backup/ProcessedPackagesJournal;->addPackage(Ljava/lang/String;)V
 PLcom/android/server/backup/ProcessedPackagesJournal;->getPackagesCopy()Ljava/util/Set;
 PLcom/android/server/backup/ProcessedPackagesJournal;->hasBeenProcessed(Ljava/lang/String;)Z
 PLcom/android/server/backup/ProcessedPackagesJournal;->init()V
-PLcom/android/server/backup/ProcessedPackagesJournal;->loadFromDisk()V
+HPLcom/android/server/backup/ProcessedPackagesJournal;->loadFromDisk()V
 PLcom/android/server/backup/ProcessedPackagesJournal;->reset()V
 PLcom/android/server/backup/SystemBackupAgent;-><clinit>()V
 PLcom/android/server/backup/SystemBackupAgent;-><init>()V
@@ -6550,18 +10739,18 @@
 PLcom/android/server/backup/TransportManager$TransportDescription;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V
 PLcom/android/server/backup/TransportManager$TransportDescription;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;Lcom/android/server/backup/TransportManager$1;)V
 HPLcom/android/server/backup/TransportManager$TransportDescription;->access$000(Lcom/android/server/backup/TransportManager$TransportDescription;)Ljava/lang/String;
-PLcom/android/server/backup/TransportManager$TransportDescription;->access$002(Lcom/android/server/backup/TransportManager$TransportDescription;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/backup/TransportManager$TransportDescription;->access$100(Lcom/android/server/backup/TransportManager$TransportDescription;)Ljava/lang/String;
+HPLcom/android/server/backup/TransportManager$TransportDescription;->access$002(Lcom/android/server/backup/TransportManager$TransportDescription;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/backup/TransportManager$TransportDescription;->access$100(Lcom/android/server/backup/TransportManager$TransportDescription;)Ljava/lang/String;
 PLcom/android/server/backup/TransportManager$TransportDescription;->access$200(Lcom/android/server/backup/TransportManager$TransportDescription;)Landroid/content/Intent;
-PLcom/android/server/backup/TransportManager$TransportDescription;->access$202(Lcom/android/server/backup/TransportManager$TransportDescription;Landroid/content/Intent;)Landroid/content/Intent;
+HPLcom/android/server/backup/TransportManager$TransportDescription;->access$202(Lcom/android/server/backup/TransportManager$TransportDescription;Landroid/content/Intent;)Landroid/content/Intent;
 PLcom/android/server/backup/TransportManager$TransportDescription;->access$300(Lcom/android/server/backup/TransportManager$TransportDescription;)Ljava/lang/String;
-PLcom/android/server/backup/TransportManager$TransportDescription;->access$302(Lcom/android/server/backup/TransportManager$TransportDescription;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/backup/TransportManager$TransportDescription;->access$302(Lcom/android/server/backup/TransportManager$TransportDescription;Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/backup/TransportManager$TransportDescription;->access$400(Lcom/android/server/backup/TransportManager$TransportDescription;)Landroid/content/Intent;
-PLcom/android/server/backup/TransportManager$TransportDescription;->access$402(Lcom/android/server/backup/TransportManager$TransportDescription;Landroid/content/Intent;)Landroid/content/Intent;
-PLcom/android/server/backup/TransportManager$TransportDescription;->access$502(Lcom/android/server/backup/TransportManager$TransportDescription;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HPLcom/android/server/backup/TransportManager$TransportDescription;->access$402(Lcom/android/server/backup/TransportManager$TransportDescription;Landroid/content/Intent;)Landroid/content/Intent;
+HPLcom/android/server/backup/TransportManager$TransportDescription;->access$502(Lcom/android/server/backup/TransportManager$TransportDescription;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 PLcom/android/server/backup/TransportManager;-><init>(ILandroid/content/Context;Ljava/util/Set;Ljava/lang/String;)V
 PLcom/android/server/backup/TransportManager;->checkCanUseTransport()V
-PLcom/android/server/backup/TransportManager;->disposeOfTransportClient(Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;)V
+HPLcom/android/server/backup/TransportManager;->disposeOfTransportClient(Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;)V
 PLcom/android/server/backup/TransportManager;->dumpTransportClients(Ljava/io/PrintWriter;)V
 PLcom/android/server/backup/TransportManager;->fromPackageFilter(Ljava/lang/String;)Ljava/util/function/Predicate;
 PLcom/android/server/backup/TransportManager;->getCurrentTransportClient(Ljava/lang/String;)Lcom/android/server/backup/transport/TransportClient;
@@ -6570,32 +10759,32 @@
 HPLcom/android/server/backup/TransportManager;->getRegisteredTransportComponentLocked(Ljava/lang/String;)Landroid/content/ComponentName;
 HPLcom/android/server/backup/TransportManager;->getRegisteredTransportDescriptionLocked(Ljava/lang/String;)Lcom/android/server/backup/TransportManager$TransportDescription;
 PLcom/android/server/backup/TransportManager;->getRegisteredTransportDescriptionOrThrowLocked(Landroid/content/ComponentName;)Lcom/android/server/backup/TransportManager$TransportDescription;
-PLcom/android/server/backup/TransportManager;->getRegisteredTransportDescriptionOrThrowLocked(Ljava/lang/String;)Lcom/android/server/backup/TransportManager$TransportDescription;
+HPLcom/android/server/backup/TransportManager;->getRegisteredTransportDescriptionOrThrowLocked(Ljava/lang/String;)Lcom/android/server/backup/TransportManager$TransportDescription;
 HPLcom/android/server/backup/TransportManager;->getRegisteredTransportEntryLocked(Ljava/lang/String;)Ljava/util/Map$Entry;
 PLcom/android/server/backup/TransportManager;->getRegisteredTransportNames()[Ljava/lang/String;
 PLcom/android/server/backup/TransportManager;->getTransportClient(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/backup/transport/TransportClient;
-PLcom/android/server/backup/TransportManager;->getTransportClientOrThrow(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/backup/transport/TransportClient;
+HPLcom/android/server/backup/TransportManager;->getTransportClientOrThrow(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/backup/transport/TransportClient;
 PLcom/android/server/backup/TransportManager;->getTransportConfigurationIntent(Ljava/lang/String;)Landroid/content/Intent;
 PLcom/android/server/backup/TransportManager;->getTransportCurrentDestinationString(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/backup/TransportManager;->getTransportDataManagementIntent(Ljava/lang/String;)Landroid/content/Intent;
 PLcom/android/server/backup/TransportManager;->getTransportDirName(Landroid/content/ComponentName;)Ljava/lang/String;
-PLcom/android/server/backup/TransportManager;->getTransportDirName(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/backup/TransportManager;->getTransportDirName(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/backup/TransportManager;->getTransportWhitelist()Ljava/util/Set;
-PLcom/android/server/backup/TransportManager;->isTransportRegistered(Ljava/lang/String;)Z
+HPLcom/android/server/backup/TransportManager;->isTransportRegistered(Ljava/lang/String;)Z
 PLcom/android/server/backup/TransportManager;->isTransportTrusted(Landroid/content/ComponentName;)Z
-PLcom/android/server/backup/TransportManager;->lambda$fromPackageFilter$3(Ljava/lang/String;Landroid/content/ComponentName;)Z
+HPLcom/android/server/backup/TransportManager;->lambda$fromPackageFilter$3(Ljava/lang/String;Landroid/content/ComponentName;)Z
 PLcom/android/server/backup/TransportManager;->lambda$onPackageAdded$1(Landroid/content/ComponentName;)Z
 PLcom/android/server/backup/TransportManager;->lambda$registerTransports$2(Landroid/content/ComponentName;)Z
 PLcom/android/server/backup/TransportManager;->onPackageAdded(Ljava/lang/String;)V
-PLcom/android/server/backup/TransportManager;->onPackageChanged(Ljava/lang/String;[Ljava/lang/String;)V
-PLcom/android/server/backup/TransportManager;->onPackageRemoved(Ljava/lang/String;)V
+HPLcom/android/server/backup/TransportManager;->onPackageChanged(Ljava/lang/String;[Ljava/lang/String;)V
+HPLcom/android/server/backup/TransportManager;->onPackageRemoved(Ljava/lang/String;)V
 PLcom/android/server/backup/TransportManager;->registerTransport(Landroid/content/ComponentName;)I
 PLcom/android/server/backup/TransportManager;->registerTransport(Landroid/content/ComponentName;Lcom/android/internal/backup/IBackupTransport;)V
 PLcom/android/server/backup/TransportManager;->registerTransports()V
-PLcom/android/server/backup/TransportManager;->registerTransportsForIntent(Landroid/content/Intent;Ljava/util/function/Predicate;)V
-PLcom/android/server/backup/TransportManager;->registerTransportsFromPackage(Ljava/lang/String;Ljava/util/function/Predicate;)V
+HPLcom/android/server/backup/TransportManager;->registerTransportsForIntent(Landroid/content/Intent;Ljava/util/function/Predicate;)V
+HPLcom/android/server/backup/TransportManager;->registerTransportsFromPackage(Ljava/lang/String;Ljava/util/function/Predicate;)V
 PLcom/android/server/backup/TransportManager;->setOnTransportRegisteredListener(Lcom/android/server/backup/transport/OnTransportRegisteredListener;)V
-PLcom/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/TransportManager;->updateTransportAttributes(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V
 PLcom/android/server/backup/UsageStatsBackupHelper;-><init>(Landroid/content/Context;)V
 PLcom/android/server/backup/UsageStatsBackupHelper;->getBackupPayload(Ljava/lang/String;)[B
 PLcom/android/server/backup/UserBackupManagerFilePersistedSettings;->readBackupEnableState(I)Z
@@ -6603,31 +10792,35 @@
 PLcom/android/server/backup/UserBackupManagerFilePersistedSettings;->writeBackupEnableState(IZ)V
 PLcom/android/server/backup/UserBackupManagerFilePersistedSettings;->writeBackupEnableState(Ljava/io/File;Z)V
 PLcom/android/server/backup/UserBackupManagerFiles;->getBaseDir(I)Ljava/io/File;
-PLcom/android/server/backup/UserBackupManagerFiles;->getBaseStateDir(I)Ljava/io/File;
+HPLcom/android/server/backup/UserBackupManagerFiles;->getBaseStateDir(I)Ljava/io/File;
 PLcom/android/server/backup/UserBackupManagerFiles;->getDataDir(I)Ljava/io/File;
 HPLcom/android/server/backup/UserBackupManagerFiles;->getStateDirInSystemDir(I)Ljava/io/File;
 PLcom/android/server/backup/UserBackupManagerFiles;->getStateFileInSystemDir(Ljava/lang/String;I)Ljava/io/File;
 PLcom/android/server/backup/UserBackupManagerService$1;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
 HPLcom/android/server/backup/UserBackupManagerService$1;->run()V
 PLcom/android/server/backup/UserBackupManagerService$2;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
-PLcom/android/server/backup/UserBackupManagerService$2;->lambda$onReceive$0$UserBackupManagerService$2(Ljava/lang/String;[Ljava/lang/String;)V
+HPLcom/android/server/backup/UserBackupManagerService$2;->lambda$onReceive$0$UserBackupManagerService$2(Ljava/lang/String;[Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupManagerService$2;->lambda$onReceive$1$UserBackupManagerService$2(Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupManagerService$2;->lambda$onReceive$2$UserBackupManagerService$2(Ljava/lang/String;)V
-PLcom/android/server/backup/UserBackupManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/backup/UserBackupManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/backup/UserBackupManagerService$3;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
+PLcom/android/server/backup/UserBackupManagerService$3;->run()V
 HPLcom/android/server/backup/UserBackupManagerService$4;-><init>(Lcom/android/server/backup/UserBackupManagerService;Ljava/lang/String;Ljava/util/HashSet;)V
 HPLcom/android/server/backup/UserBackupManagerService$4;->run()V
 PLcom/android/server/backup/UserBackupManagerService$BackupWakeLock;-><init>(Landroid/os/PowerManager$WakeLock;)V
-PLcom/android/server/backup/UserBackupManagerService$BackupWakeLock;->access$000(Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;)Landroid/os/PowerManager$WakeLock;
+HPLcom/android/server/backup/UserBackupManagerService$BackupWakeLock;->access$000(Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;)Landroid/os/PowerManager$WakeLock;
 HPLcom/android/server/backup/UserBackupManagerService$BackupWakeLock;->acquire()V
+PLcom/android/server/backup/UserBackupManagerService$BackupWakeLock;->quit()V
 HPLcom/android/server/backup/UserBackupManagerService$BackupWakeLock;->release()V
 PLcom/android/server/backup/UserBackupManagerService;-><init>(ILandroid/content/Context;Lcom/android/server/backup/BackupManagerService;Landroid/os/HandlerThread;Ljava/io/File;Ljava/io/File;Lcom/android/server/backup/TransportManager;)V
-PLcom/android/server/backup/UserBackupManagerService;->access$100(Lcom/android/server/backup/UserBackupManagerService;)Ljava/lang/Object;
+HPLcom/android/server/backup/UserBackupManagerService;->access$100(Lcom/android/server/backup/UserBackupManagerService;)Ljava/lang/Object;
 PLcom/android/server/backup/UserBackupManagerService;->access$1000(Lcom/android/server/backup/UserBackupManagerService;Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupManagerService;->access$1100(Lcom/android/server/backup/UserBackupManagerService;)V
 PLcom/android/server/backup/UserBackupManagerService;->access$1200(Lcom/android/server/backup/UserBackupManagerService;)Lcom/android/server/backup/TransportManager;
+PLcom/android/server/backup/UserBackupManagerService;->access$1300(Lcom/android/server/backup/UserBackupManagerService;)Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;
 HPLcom/android/server/backup/UserBackupManagerService;->access$1400(Lcom/android/server/backup/UserBackupManagerService;Ljava/lang/String;Ljava/util/HashSet;)V
 HPLcom/android/server/backup/UserBackupManagerService;->access$200(Lcom/android/server/backup/UserBackupManagerService;)Ljava/util/ArrayList;
-PLcom/android/server/backup/UserBackupManagerService;->access$300(Lcom/android/server/backup/UserBackupManagerService;)Ljava/io/File;
+HPLcom/android/server/backup/UserBackupManagerService;->access$300(Lcom/android/server/backup/UserBackupManagerService;)Ljava/io/File;
 PLcom/android/server/backup/UserBackupManagerService;->access$400(Lcom/android/server/backup/UserBackupManagerService;)Lcom/android/server/backup/internal/BackupHandler;
 PLcom/android/server/backup/UserBackupManagerService;->access$500(Lcom/android/server/backup/UserBackupManagerService;)Landroid/util/SparseArray;
 PLcom/android/server/backup/UserBackupManagerService;->access$600(Lcom/android/server/backup/UserBackupManagerService;[Ljava/lang/String;I)V
@@ -6636,35 +10829,42 @@
 PLcom/android/server/backup/UserBackupManagerService;->access$900(Lcom/android/server/backup/UserBackupManagerService;)Landroid/content/pm/PackageManager;
 PLcom/android/server/backup/UserBackupManagerService;->addPackageParticipantsLocked([Ljava/lang/String;)V
 HPLcom/android/server/backup/UserBackupManagerService;->addPackageParticipantsLockedInner(Ljava/lang/String;Ljava/util/List;)V
-PLcom/android/server/backup/UserBackupManagerService;->agentConnected(Ljava/lang/String;Landroid/os/IBinder;)V
+HPLcom/android/server/backup/UserBackupManagerService;->agentConnected(Ljava/lang/String;Landroid/os/IBinder;)V
+PLcom/android/server/backup/UserBackupManagerService;->agentDisconnected(Ljava/lang/String;)V
 HPLcom/android/server/backup/UserBackupManagerService;->allAgentPackages()Ljava/util/List;
-PLcom/android/server/backup/UserBackupManagerService;->backupNow()V
-PLcom/android/server/backup/UserBackupManagerService;->beginFullBackup(Lcom/android/server/backup/FullBackupJob;)Z
-PLcom/android/server/backup/UserBackupManagerService;->bindToAgentSynchronous(Landroid/content/pm/ApplicationInfo;I)Landroid/app/IBackupAgent;
+HPLcom/android/server/backup/UserBackupManagerService;->backupNow()V
+HPLcom/android/server/backup/UserBackupManagerService;->beginFullBackup(Lcom/android/server/backup/FullBackupJob;)Z
+HPLcom/android/server/backup/UserBackupManagerService;->bindToAgentSynchronous(Landroid/content/pm/ApplicationInfo;I)Landroid/app/IBackupAgent;
+PLcom/android/server/backup/UserBackupManagerService;->clearApplicationDataBeforeRestore(Ljava/lang/String;)V
+PLcom/android/server/backup/UserBackupManagerService;->clearApplicationDataSynchronous(Ljava/lang/String;ZZ)V
+PLcom/android/server/backup/UserBackupManagerService;->clearPendingInits()V
 PLcom/android/server/backup/UserBackupManagerService;->createAndInitializeService(ILandroid/content/Context;Lcom/android/server/backup/BackupManagerService;Landroid/os/HandlerThread;Ljava/io/File;Ljava/io/File;Lcom/android/server/backup/TransportManager;)Lcom/android/server/backup/UserBackupManagerService;
 PLcom/android/server/backup/UserBackupManagerService;->createAndInitializeService(ILandroid/content/Context;Lcom/android/server/backup/BackupManagerService;Ljava/util/Set;)Lcom/android/server/backup/UserBackupManagerService;
 HPLcom/android/server/backup/UserBackupManagerService;->dataChanged(Ljava/lang/String;)V
-PLcom/android/server/backup/UserBackupManagerService;->dataChangedImpl(Ljava/lang/String;)V
+HPLcom/android/server/backup/UserBackupManagerService;->dataChangedImpl(Ljava/lang/String;)V
 HPLcom/android/server/backup/UserBackupManagerService;->dataChangedImpl(Ljava/lang/String;Ljava/util/HashSet;)V
 HPLcom/android/server/backup/UserBackupManagerService;->dataChangedTargets(Ljava/lang/String;)Ljava/util/HashSet;
 HPLcom/android/server/backup/UserBackupManagerService;->dequeueFullBackupLocked(Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/backup/UserBackupManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
+HPLcom/android/server/backup/UserBackupManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
+PLcom/android/server/backup/UserBackupManagerService;->endFullBackup()V
 HPLcom/android/server/backup/UserBackupManagerService;->enqueueFullBackup(Ljava/lang/String;J)V
-PLcom/android/server/backup/UserBackupManagerService;->fullBackupAllowable(Ljava/lang/String;)Z
-PLcom/android/server/backup/UserBackupManagerService;->generateRandomIntegerToken()I
-PLcom/android/server/backup/UserBackupManagerService;->getActivityManager()Landroid/app/IActivityManager;
+HPLcom/android/server/backup/UserBackupManagerService;->fullBackupAllowable(Ljava/lang/String;)Z
+HPLcom/android/server/backup/UserBackupManagerService;->generateRandomIntegerToken()I
+HPLcom/android/server/backup/UserBackupManagerService;->getActivityManager()Landroid/app/IActivityManager;
 PLcom/android/server/backup/UserBackupManagerService;->getAgentTimeoutParameters()Lcom/android/server/backup/BackupAgentTimeoutParameters;
+PLcom/android/server/backup/UserBackupManagerService;->getAlarmManager()Landroid/app/AlarmManager;
 PLcom/android/server/backup/UserBackupManagerService;->getAvailableRestoreToken(Ljava/lang/String;)J
 PLcom/android/server/backup/UserBackupManagerService;->getBackupHandler()Landroid/os/Handler;
 PLcom/android/server/backup/UserBackupManagerService;->getBackupManagerBinder()Landroid/app/backup/IBackupManager;
 PLcom/android/server/backup/UserBackupManagerService;->getBaseStateDir()Ljava/io/File;
+PLcom/android/server/backup/UserBackupManagerService;->getClearDataLock()Ljava/lang/Object;
 PLcom/android/server/backup/UserBackupManagerService;->getConstants()Lcom/android/server/backup/BackupManagerConstants;
 PLcom/android/server/backup/UserBackupManagerService;->getContext()Landroid/content/Context;
 PLcom/android/server/backup/UserBackupManagerService;->getCurrentOpLock()Ljava/lang/Object;
 PLcom/android/server/backup/UserBackupManagerService;->getCurrentOperations()Landroid/util/SparseArray;
 PLcom/android/server/backup/UserBackupManagerService;->getCurrentToken()J
-PLcom/android/server/backup/UserBackupManagerService;->getCurrentTransport()Ljava/lang/String;
+HPLcom/android/server/backup/UserBackupManagerService;->getCurrentTransport()Ljava/lang/String;
 PLcom/android/server/backup/UserBackupManagerService;->getDataDir()Ljava/io/File;
 PLcom/android/server/backup/UserBackupManagerService;->getDataManagementIntent(Ljava/lang/String;)Landroid/content/Intent;
 PLcom/android/server/backup/UserBackupManagerService;->getExcludedRestoreKeys([Ljava/lang/String;)Ljava/util/Map;
@@ -6675,115 +10875,142 @@
 PLcom/android/server/backup/UserBackupManagerService;->getPendingBackups()Ljava/util/HashMap;
 PLcom/android/server/backup/UserBackupManagerService;->getPendingInits()Landroid/util/ArraySet;
 PLcom/android/server/backup/UserBackupManagerService;->getPendingRestores()Ljava/util/Queue;
-PLcom/android/server/backup/UserBackupManagerService;->getQueueLock()Ljava/lang/Object;
+HPLcom/android/server/backup/UserBackupManagerService;->getQueueLock()Ljava/lang/Object;
+PLcom/android/server/backup/UserBackupManagerService;->getRunInitIntent()Landroid/app/PendingIntent;
 PLcom/android/server/backup/UserBackupManagerService;->getSetupCompleteSettingForUser(Landroid/content/Context;I)Z
 PLcom/android/server/backup/UserBackupManagerService;->getTransportManager()Lcom/android/server/backup/TransportManager;
 PLcom/android/server/backup/UserBackupManagerService;->getUserId()I
 HPLcom/android/server/backup/UserBackupManagerService;->getWakelock()Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;
 PLcom/android/server/backup/UserBackupManagerService;->handleCancel(IZ)V
-PLcom/android/server/backup/UserBackupManagerService;->initPackageTracking()V
+PLcom/android/server/backup/UserBackupManagerService;->hasBackupPassword()Z
+HPLcom/android/server/backup/UserBackupManagerService;->initPackageTracking()V
 PLcom/android/server/backup/UserBackupManagerService;->initializeBackupEnableState()V
-PLcom/android/server/backup/UserBackupManagerService;->isAppEligibleForBackup(Ljava/lang/String;)Z
-PLcom/android/server/backup/UserBackupManagerService;->isBackupEnabled()Z
-PLcom/android/server/backup/UserBackupManagerService;->isBackupOperationInProgress()Z
+PLcom/android/server/backup/UserBackupManagerService;->initializeTransports([Ljava/lang/String;Landroid/app/backup/IBackupObserver;)V
+HPLcom/android/server/backup/UserBackupManagerService;->isAppEligibleForBackup(Ljava/lang/String;)Z
+HPLcom/android/server/backup/UserBackupManagerService;->isBackupEnabled()Z
+HPLcom/android/server/backup/UserBackupManagerService;->isBackupOperationInProgress()Z
 PLcom/android/server/backup/UserBackupManagerService;->isBackupRunning()Z
-PLcom/android/server/backup/UserBackupManagerService;->isEnabled()Z
+HPLcom/android/server/backup/UserBackupManagerService;->isEnabled()Z
 PLcom/android/server/backup/UserBackupManagerService;->isRestoreInProgress()Z
-PLcom/android/server/backup/UserBackupManagerService;->isSetupComplete()Z
+HPLcom/android/server/backup/UserBackupManagerService;->isSetupComplete()Z
 PLcom/android/server/backup/UserBackupManagerService;->lambda$9cuIH_XloqtNByp_6hXeGaVars8(Lcom/android/server/backup/UserBackupManagerService;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupManagerService;->lambda$_gNqJq9Ygtc0ZVwYhCSDKCUKrKY(Lcom/android/server/backup/UserBackupManagerService;)V
-PLcom/android/server/backup/UserBackupManagerService;->lambda$parseLeftoverJournals$0$UserBackupManagerService(Ljava/lang/String;)V
+PLcom/android/server/backup/UserBackupManagerService;->lambda$initializeTransports$2$UserBackupManagerService(Ljava/lang/String;)V
+HPLcom/android/server/backup/UserBackupManagerService;->lambda$parseLeftoverJournals$0$UserBackupManagerService(Ljava/lang/String;)V
+PLcom/android/server/backup/UserBackupManagerService;->lambda$requestBackup$1$UserBackupManagerService(Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupManagerService;->lambda$restoreAtInstall$6$UserBackupManagerService(Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupManagerService;->listAllTransports()[Ljava/lang/String;
-PLcom/android/server/backup/UserBackupManagerService;->logBackupComplete(Ljava/lang/String;)V
-PLcom/android/server/backup/UserBackupManagerService;->makeMetadataAgent()Landroid/app/backup/BackupAgent;
+HPLcom/android/server/backup/UserBackupManagerService;->logBackupComplete(Ljava/lang/String;)V
+HPLcom/android/server/backup/UserBackupManagerService;->makeMetadataAgent()Landroid/app/backup/BackupAgent;
 PLcom/android/server/backup/UserBackupManagerService;->makeMetadataAgent(Ljava/util/List;)Lcom/android/server/backup/PackageManagerBackupAgent;
 PLcom/android/server/backup/UserBackupManagerService;->onTransportRegistered(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/backup/UserBackupManagerService;->opComplete(IJ)V
-PLcom/android/server/backup/UserBackupManagerService;->parseLeftoverJournals()V
-PLcom/android/server/backup/UserBackupManagerService;->prepareOperationTimeout(IJLcom/android/server/backup/BackupRestoreTask;I)V
-PLcom/android/server/backup/UserBackupManagerService;->putOperation(ILcom/android/server/backup/internal/Operation;)V
-PLcom/android/server/backup/UserBackupManagerService;->readFullBackupSchedule()Ljava/util/ArrayList;
-PLcom/android/server/backup/UserBackupManagerService;->removeOperation(I)V
+HPLcom/android/server/backup/UserBackupManagerService;->opComplete(IJ)V
+HPLcom/android/server/backup/UserBackupManagerService;->parseLeftoverJournals()V
+HPLcom/android/server/backup/UserBackupManagerService;->prepareOperationTimeout(IJLcom/android/server/backup/BackupRestoreTask;I)V
+HPLcom/android/server/backup/UserBackupManagerService;->putOperation(ILcom/android/server/backup/internal/Operation;)V
+HPLcom/android/server/backup/UserBackupManagerService;->readFullBackupSchedule()Ljava/util/ArrayList;
+PLcom/android/server/backup/UserBackupManagerService;->recordInitPending(ZLjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/backup/UserBackupManagerService;->removeOperation(I)V
 PLcom/android/server/backup/UserBackupManagerService;->removePackageFromSetLocked(Ljava/util/HashSet;Ljava/lang/String;)V
-PLcom/android/server/backup/UserBackupManagerService;->removePackageParticipantsLocked([Ljava/lang/String;I)V
-PLcom/android/server/backup/UserBackupManagerService;->requestBackup([Ljava/lang/String;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;I)I
-PLcom/android/server/backup/UserBackupManagerService;->resetBackupState(Ljava/io/File;)V
-PLcom/android/server/backup/UserBackupManagerService;->restoreAtInstall(Ljava/lang/String;I)V
-PLcom/android/server/backup/UserBackupManagerService;->scheduleNextFullBackupJob(J)V
+HPLcom/android/server/backup/UserBackupManagerService;->removePackageParticipantsLocked([Ljava/lang/String;I)V
+HPLcom/android/server/backup/UserBackupManagerService;->requestBackup([Ljava/lang/String;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;I)I
+HPLcom/android/server/backup/UserBackupManagerService;->resetBackupState(Ljava/io/File;)V
+HPLcom/android/server/backup/UserBackupManagerService;->restoreAtInstall(Ljava/lang/String;I)V
+HPLcom/android/server/backup/UserBackupManagerService;->scheduleNextFullBackupJob(J)V
 PLcom/android/server/backup/UserBackupManagerService;->setBackupEnabled(Z)V
 PLcom/android/server/backup/UserBackupManagerService;->setBackupRunning(Z)V
+PLcom/android/server/backup/UserBackupManagerService;->setClearingData(Z)V
 PLcom/android/server/backup/UserBackupManagerService;->setCurrentToken(J)V
 PLcom/android/server/backup/UserBackupManagerService;->setJournal(Lcom/android/server/backup/DataChangedJournal;)V
 PLcom/android/server/backup/UserBackupManagerService;->setLastBackupPass(J)V
 PLcom/android/server/backup/UserBackupManagerService;->setRestoreInProgress(Z)V
-PLcom/android/server/backup/UserBackupManagerService;->setRunningFullBackupTask(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;)V
-PLcom/android/server/backup/UserBackupManagerService;->setWorkSource(Landroid/os/WorkSource;)V
-PLcom/android/server/backup/UserBackupManagerService;->tearDownAgentAndKill(Landroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/backup/UserBackupManagerService;->setRunningFullBackupTask(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;)V
+HPLcom/android/server/backup/UserBackupManagerService;->setWorkSource(Landroid/os/WorkSource;)V
+HPLcom/android/server/backup/UserBackupManagerService;->tearDownAgentAndKill(Landroid/content/pm/ApplicationInfo;)V
+PLcom/android/server/backup/UserBackupManagerService;->tearDownService()V
 PLcom/android/server/backup/UserBackupManagerService;->unbindAgent(Landroid/content/pm/ApplicationInfo;)V
-PLcom/android/server/backup/UserBackupManagerService;->updateTransportAttributes(ILandroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V
-PLcom/android/server/backup/UserBackupManagerService;->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;->updateTransportAttributes(ILandroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V
+HPLcom/android/server/backup/UserBackupManagerService;->updateTransportAttributes(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V
 PLcom/android/server/backup/UserBackupManagerService;->waitUntilOperationComplete(I)Z
 HPLcom/android/server/backup/UserBackupManagerService;->writeFullBackupScheduleAsync()V
-PLcom/android/server/backup/UserBackupManagerService;->writeRestoreTokens()V
+HPLcom/android/server/backup/UserBackupManagerService;->writeRestoreTokens()V
 PLcom/android/server/backup/UserBackupManagerService;->writeToJournalLocked(Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupPreferences;-><init>(Landroid/content/Context;Ljava/io/File;)V
 PLcom/android/server/backup/UserBackupPreferences;->getExcludedRestoreKeysForPackages([Ljava/lang/String;)Ljava/util/Map;
 PLcom/android/server/backup/fullbackup/-$$Lambda$PerformFullTransportBackupTask$SinglePackageBackupPreflight$hWbC3_rWMPrteAdbbM5aSW2SKD0;-><init>(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight;Landroid/app/IBackupAgent;J)V
 PLcom/android/server/backup/fullbackup/-$$Lambda$PerformFullTransportBackupTask$SinglePackageBackupPreflight$hWbC3_rWMPrteAdbbM5aSW2SKD0;->call(Ljava/lang/Object;)V
 HPLcom/android/server/backup/fullbackup/-$$Lambda$PerformFullTransportBackupTask$ymLoQLrsEpmGaMrcudrdAgsU1Zk;-><init>(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportClient;)V
-PLcom/android/server/backup/fullbackup/-$$Lambda$PerformFullTransportBackupTask$ymLoQLrsEpmGaMrcudrdAgsU1Zk;->onFinished(Ljava/lang/String;)V
+HPLcom/android/server/backup/fullbackup/-$$Lambda$PerformFullTransportBackupTask$ymLoQLrsEpmGaMrcudrdAgsU1Zk;->onFinished(Ljava/lang/String;)V
 PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;-><init>(Landroid/app/backup/FullBackupDataOutput;Landroid/content/pm/PackageManager;)V
-PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->backupManifest(Landroid/content/pm/PackageInfo;Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Z)V
+HPLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->backupManifest(Landroid/content/pm/PackageInfo;Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Z)V
 PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->backupManifest(Landroid/content/pm/PackageInfo;Ljava/io/File;Ljava/io/File;Z)V
-PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->getManifestBytes(Landroid/content/pm/PackageInfo;Z)[B
+PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->backupWidget(Landroid/content/pm/PackageInfo;Ljava/io/File;Ljava/io/File;[B)V
+HPLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->getManifestBytes(Landroid/content/pm/PackageInfo;Z)[B
+PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->getMetadataBytes(Ljava/lang/String;)[B
+PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->writeWidgetData(Ljava/io/DataOutputStream;[B)V
 PLcom/android/server/backup/fullbackup/FullBackupEngine$FullBackupRunner;-><init>(Lcom/android/server/backup/fullbackup/FullBackupEngine;Lcom/android/server/backup/UserBackupManagerService;Landroid/content/pm/PackageInfo;Landroid/app/IBackupAgent;Landroid/os/ParcelFileDescriptor;IZ)V
-PLcom/android/server/backup/fullbackup/FullBackupEngine$FullBackupRunner;->run()V
+HPLcom/android/server/backup/fullbackup/FullBackupEngine$FullBackupRunner;->run()V
 PLcom/android/server/backup/fullbackup/FullBackupEngine$FullBackupRunner;->shouldWriteApk(Landroid/content/pm/ApplicationInfo;ZZ)Z
-PLcom/android/server/backup/fullbackup/FullBackupEngine;-><init>(Lcom/android/server/backup/UserBackupManagerService;Ljava/io/OutputStream;Lcom/android/server/backup/fullbackup/FullBackupPreflight;Landroid/content/pm/PackageInfo;ZLcom/android/server/backup/BackupRestoreTask;JII)V
+HPLcom/android/server/backup/fullbackup/FullBackupEngine;-><init>(Lcom/android/server/backup/UserBackupManagerService;Ljava/io/OutputStream;Lcom/android/server/backup/fullbackup/FullBackupPreflight;Landroid/content/pm/PackageInfo;ZLcom/android/server/backup/BackupRestoreTask;JII)V
 PLcom/android/server/backup/fullbackup/FullBackupEngine;->access$000(Lcom/android/server/backup/fullbackup/FullBackupEngine;)Lcom/android/server/backup/UserBackupManagerService;
 PLcom/android/server/backup/fullbackup/FullBackupEngine;->access$100(Lcom/android/server/backup/fullbackup/FullBackupEngine;)I
 PLcom/android/server/backup/fullbackup/FullBackupEngine;->access$200(Lcom/android/server/backup/fullbackup/FullBackupEngine;)Lcom/android/server/backup/BackupAgentTimeoutParameters;
 PLcom/android/server/backup/fullbackup/FullBackupEngine;->access$300(Lcom/android/server/backup/fullbackup/FullBackupEngine;)Lcom/android/server/backup/BackupRestoreTask;
 PLcom/android/server/backup/fullbackup/FullBackupEngine;->access$400(Lcom/android/server/backup/fullbackup/FullBackupEngine;)J
-PLcom/android/server/backup/fullbackup/FullBackupEngine;->backupOnePackage()I
-PLcom/android/server/backup/fullbackup/FullBackupEngine;->initializeAgent()Z
+HPLcom/android/server/backup/fullbackup/FullBackupEngine;->backupOnePackage()I
+HPLcom/android/server/backup/fullbackup/FullBackupEngine;->initializeAgent()Z
 PLcom/android/server/backup/fullbackup/FullBackupEngine;->preflightCheck()I
 PLcom/android/server/backup/fullbackup/FullBackupEngine;->tearDown()V
 HPLcom/android/server/backup/fullbackup/FullBackupEntry;-><init>(Ljava/lang/String;J)V
 PLcom/android/server/backup/fullbackup/FullBackupEntry;->compareTo(Lcom/android/server/backup/fullbackup/FullBackupEntry;)I
 PLcom/android/server/backup/fullbackup/FullBackupEntry;->compareTo(Ljava/lang/Object;)I
 HPLcom/android/server/backup/fullbackup/FullBackupTask;-><init>(Landroid/app/backup/IFullBackupRestoreObserver;)V
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight;-><init>(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;Lcom/android/server/backup/transport/TransportClient;JII)V
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight;-><init>(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;Lcom/android/server/backup/transport/TransportClient;JII)V
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight;->getExpectedSizeOrErrorCode()J
+PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight;->handleCancel(Z)V
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight;->lambda$preflightFullBackup$0$PerformFullTransportBackupTask$SinglePackageBackupPreflight(Landroid/app/IBackupAgent;JLandroid/app/backup/IBackupCallback;)V
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight;->operationComplete(J)V
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight;->preflightFullBackup(Landroid/content/pm/PackageInfo;Landroid/app/IBackupAgent;)I
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;-><init>(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;Landroid/os/ParcelFileDescriptor;Landroid/content/pm/PackageInfo;Lcom/android/server/backup/transport/TransportClient;JII)V
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight;->operationComplete(J)V
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight;->preflightFullBackup(Landroid/content/pm/PackageInfo;Landroid/app/IBackupAgent;)I
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;-><init>(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;Landroid/os/ParcelFileDescriptor;Landroid/content/pm/PackageInfo;Lcom/android/server/backup/transport/TransportClient;JII)V
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->getBackupResultBlocking()I
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->getPreflightResultBlocking()J
+PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->handleCancel(Z)V
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->operationComplete(J)V
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->registerTask()V
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->run()V
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->unregisterTask()V
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/transport/TransportClient;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;Z)V
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->registerTask()V
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->run()V
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->unregisterTask()V
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/transport/TransportClient;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;Z)V
 HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->access$000(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;)Lcom/android/server/backup/BackupAgentTimeoutParameters;
 HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->access$100(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;)Lcom/android/server/backup/UserBackupManagerService;
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->cleanUpPipes([Landroid/os/ParcelFileDescriptor;)V
+PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->access$200(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;)Landroid/app/backup/IBackupManagerMonitor;
+PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->access$202(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;Landroid/app/backup/IBackupManagerMonitor;)Landroid/app/backup/IBackupManagerMonitor;
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->cleanUpPipes([Landroid/os/ParcelFileDescriptor;)V
+PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->handleCancel(Z)V
 HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->lambda$newWithCurrentTransport$0(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;)V
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->newWithCurrentTransport(Lcom/android/server/backup/UserBackupManagerService;Landroid/app/backup/IFullBackupRestoreObserver;[Ljava/lang/String;ZLcom/android/server/backup/FullBackupJob;Ljava/util/concurrent/CountDownLatch;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;ZLjava/lang/String;)Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->newWithCurrentTransport(Lcom/android/server/backup/UserBackupManagerService;Landroid/app/backup/IFullBackupRestoreObserver;[Ljava/lang/String;ZLcom/android/server/backup/FullBackupJob;Ljava/util/concurrent/CountDownLatch;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;ZLjava/lang/String;)Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;
 HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->registerTask()V
 HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->run()V
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->unregisterTask()V
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->unregisterTask()V
 PLcom/android/server/backup/internal/-$$Lambda$BackupHandler$TJcRazGYTaUxjeiX6mPLlipfZUI;-><init>(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportClient;)V
 PLcom/android/server/backup/internal/-$$Lambda$BackupHandler$TJcRazGYTaUxjeiX6mPLlipfZUI;->onFinished(Ljava/lang/String;)V
 PLcom/android/server/backup/internal/BackupHandler;-><init>(Lcom/android/server/backup/UserBackupManagerService;Landroid/os/HandlerThread;)V
-PLcom/android/server/backup/internal/BackupHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/backup/internal/BackupHandler;->dispatchMessage(Landroid/os/Message;)V
+HPLcom/android/server/backup/internal/BackupHandler;->dispatchMessageInternal(Landroid/os/Message;)V
+HPLcom/android/server/backup/internal/BackupHandler;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/backup/internal/BackupHandler;->lambda$handleMessage$0(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;)V
+PLcom/android/server/backup/internal/BackupHandler;->stop()V
+PLcom/android/server/backup/internal/ClearDataObserver;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
+PLcom/android/server/backup/internal/ClearDataObserver;->onRemoveCompleted(Ljava/lang/String;Z)V
 HPLcom/android/server/backup/internal/Operation;-><init>(ILcom/android/server/backup/BackupRestoreTask;I)V
+PLcom/android/server/backup/internal/PerformInitializeTask;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/TransportManager;[Ljava/lang/String;Landroid/app/backup/IBackupObserver;Lcom/android/server/backup/internal/OnTaskFinishedListener;Ljava/io/File;)V
+PLcom/android/server/backup/internal/PerformInitializeTask;-><init>(Lcom/android/server/backup/UserBackupManagerService;[Ljava/lang/String;Landroid/app/backup/IBackupObserver;Lcom/android/server/backup/internal/OnTaskFinishedListener;)V
+PLcom/android/server/backup/internal/PerformInitializeTask;->notifyFinished(I)V
+PLcom/android/server/backup/internal/PerformInitializeTask;->notifyResult(Ljava/lang/String;I)V
+PLcom/android/server/backup/internal/PerformInitializeTask;->run()V
 PLcom/android/server/backup/internal/RunBackupReceiver;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
 PLcom/android/server/backup/internal/RunBackupReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/backup/internal/RunInitializeReceiver;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
+PLcom/android/server/backup/internal/RunInitializeReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/backup/internal/SetupObserver;-><init>(Lcom/android/server/backup/UserBackupManagerService;Landroid/os/Handler;)V
 HPLcom/android/server/backup/keyvalue/-$$Lambda$KeyValueBackupTask$NN2H32cNizGxrUxqHgqPqGldNsA;-><init>(Lcom/android/server/backup/keyvalue/KeyValueBackupTask;Landroid/app/IBackupAgent;JI)V
 PLcom/android/server/backup/keyvalue/-$$Lambda$KeyValueBackupTask$NN2H32cNizGxrUxqHgqPqGldNsA;->call(Ljava/lang/Object;)V
@@ -6794,7 +11021,7 @@
 PLcom/android/server/backup/keyvalue/BackupException;-><init>()V
 PLcom/android/server/backup/keyvalue/BackupException;-><init>(Ljava/lang/Exception;)V
 HPLcom/android/server/backup/keyvalue/BackupRequest;-><init>(Ljava/lang/String;)V
-PLcom/android/server/backup/keyvalue/BackupRequest;->toString()Ljava/lang/String;
+HPLcom/android/server/backup/keyvalue/BackupRequest;->toString()Ljava/lang/String;
 HPLcom/android/server/backup/keyvalue/KeyValueBackupReporter;-><init>(Lcom/android/server/backup/UserBackupManagerService;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->getMonitor()Landroid/app/backup/IBackupManagerMonitor;
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->getObserver()Landroid/app/backup/IBackupObserver;
@@ -6802,62 +11029,78 @@
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onAgentError(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onAgentFilesReady(Ljava/io/File;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onAgentResultError(Landroid/content/pm/PackageInfo;)V
+PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onAgentTimedOut(Landroid/content/pm/PackageInfo;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onBackupFinished(I)V
+PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onCallAgentDoBackupError(Ljava/lang/String;ZLjava/lang/Exception;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onEmptyData(Landroid/content/pm/PackageInfo;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onExtractAgentData(Ljava/lang/String;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onExtractAgentData(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onExtractPmAgentDataError(Ljava/lang/Exception;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onInitializeTransport(Ljava/lang/String;)V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onNewThread(Ljava/lang/String;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onPackageBackupComplete(Ljava/lang/String;J)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onPackageBackupComplete(Ljava/lang/String;J)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onPackageBackupNonIncrementalRequired(Landroid/content/pm/PackageInfo;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onPackageBackupTransportError(Ljava/lang/String;Ljava/lang/Exception;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onPackageBackupTransportFailure(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onPackageNotEligibleForBackup(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onPackageStopped(Ljava/lang/String;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onQueueReady(Ljava/util/List;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onQueueReady(Ljava/util/List;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onRemoteCallReturned(Lcom/android/server/backup/remote/RemoteResult;Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onRevertTask()V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onSkipBackup()V
-PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onStartFullBackup(Ljava/util/List;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onStartPackageBackup(Ljava/lang/String;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onStartFullBackup(Ljava/util/List;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onStartPackageBackup(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTaskFinished()V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTransportInitialized(I)V
+PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTransportNotInitialized(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTransportPerformBackup(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTransportReady(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTransportRequestBackupTimeError(Ljava/lang/Exception;)V
+PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onWriteWidgetData(Z[B)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;-><clinit>()V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;Ljava/util/List;Lcom/android/server/backup/DataChangedJournal;Lcom/android/server/backup/keyvalue/KeyValueBackupReporter;Lcom/android/server/backup/internal/OnTaskFinishedListener;Ljava/util/List;ZZ)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->applyStateTransaction(I)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;Ljava/util/List;Lcom/android/server/backup/DataChangedJournal;Lcom/android/server/backup/keyvalue/KeyValueBackupReporter;Lcom/android/server/backup/internal/OnTaskFinishedListener;Ljava/util/List;ZZ)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->SHA1Checksum([B)Ljava/lang/String;
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->applyStateTransaction(I)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->backupPackage(Ljava/lang/String;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->backupPm()V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->backupPm()V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->bindAgent(Landroid/content/pm/PackageInfo;)Landroid/app/IBackupAgent;
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->checkAgentResult(Landroid/content/pm/PackageInfo;Lcom/android/server/backup/remote/RemoteResult;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->checkAgentResult(Landroid/content/pm/PackageInfo;Lcom/android/server/backup/remote/RemoteResult;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->checkBackupData(Landroid/content/pm/ApplicationInfo;Ljava/io/File;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->cleanUpAgent(I)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->cleanUpAgent(I)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->cleanUpAgentForError(Lcom/android/server/backup/keyvalue/BackupException;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->cleanUpAgentForTransportStatus(I)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->createFullBackupTask(Ljava/util/List;)Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->extractAgentData(Landroid/content/pm/PackageInfo;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->extractAgentData(Landroid/content/pm/PackageInfo;Landroid/app/IBackupAgent;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->extractPmAgentData(Landroid/content/pm/PackageInfo;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->finishTask(I)V
+PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->clearStatus(Ljava/lang/String;)V
+PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->clearStatus(Ljava/lang/String;Ljava/io/File;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->createFullBackupTask(Ljava/util/List;)Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;
+PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->deletePmStateFile()V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->extractAgentData(Landroid/content/pm/PackageInfo;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->extractAgentData(Landroid/content/pm/PackageInfo;Landroid/app/IBackupAgent;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->extractPmAgentData(Landroid/content/pm/PackageInfo;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->finishTask(I)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->getBackupFinishedStatus(ZI)I
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->getPackageForBackup(Ljava/lang/String;)Landroid/content/pm/PackageInfo;
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->getPackageForBackup(Ljava/lang/String;)Landroid/content/pm/PackageInfo;
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->getPerformBackupFlags(ZZ)I
+PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->getSucceedingPackages()[Ljava/lang/String;
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->getSuccessStateFileFor(Ljava/lang/String;)Ljava/io/File;
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->getTopLevelSuccessStateDirectory(Z)Ljava/io/File;
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->handleTransportStatus(ILjava/lang/String;J)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->informTransportOfUnchangedApps(Ljava/util/Set;)V
+PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->isEligibleForNoDataCall(Landroid/content/pm/PackageInfo;)Z
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->lambda$extractAgentData$0$KeyValueBackupTask(Landroid/app/IBackupAgent;JILandroid/app/backup/IBackupCallback;)V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->registerTask()V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->remoteCall(Lcom/android/server/backup/remote/RemoteCallable;JLjava/lang/String;)Lcom/android/server/backup/remote/RemoteResult;
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->revertTask()V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->run()V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->sendDataToTransport()I
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->revertTask()V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->run()V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->sendDataToTransport()I
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->sendDataToTransport(Landroid/content/pm/PackageInfo;)I
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->start(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;Ljava/util/List;Lcom/android/server/backup/DataChangedJournal;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;Lcom/android/server/backup/internal/OnTaskFinishedListener;Ljava/util/List;ZZ)Lcom/android/server/backup/keyvalue/KeyValueBackupTask;
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->startTask()V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->transportPerformBackup(Landroid/content/pm/PackageInfo;Ljava/io/File;Z)I
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->tryCloseFileDescriptor(Ljava/io/Closeable;Ljava/lang/String;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->sendNoDataChangedTo(Lcom/android/internal/backup/IBackupTransport;Landroid/content/pm/PackageInfo;I)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->setSuccessState(Ljava/lang/String;Z)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->start(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;Ljava/util/List;Lcom/android/server/backup/DataChangedJournal;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;Lcom/android/server/backup/internal/OnTaskFinishedListener;Ljava/util/List;ZZ)Lcom/android/server/backup/keyvalue/KeyValueBackupTask;
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->startTask()V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->transportPerformBackup(Landroid/content/pm/PackageInfo;Ljava/io/File;Z)I
+PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->triggerTransportInitializationLocked()V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->tryCloseFileDescriptor(Ljava/io/Closeable;Ljava/lang/String;)V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->unregisterTask()V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->writeWidgetPayloadIfAppropriate(Ljava/io/FileDescriptor;Ljava/lang/String;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->writeWidgetPayloadIfAppropriate(Ljava/io/FileDescriptor;Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/TaskException;-><init>(Ljava/lang/Exception;ZI)V
 PLcom/android/server/backup/keyvalue/TaskException;-><init>(ZI)V
 PLcom/android/server/backup/keyvalue/TaskException;->causedBy(Ljava/lang/Exception;)Lcom/android/server/backup/keyvalue/TaskException;
@@ -6870,64 +11113,111 @@
 PLcom/android/server/backup/params/RestoreParams;-><init>(Lcom/android/server/backup/transport/TransportClient;Landroid/app/backup/IRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;JLandroid/content/pm/PackageInfo;IZ[Ljava/lang/String;Lcom/android/server/backup/internal/OnTaskFinishedListener;Ljava/util/Map;)V
 PLcom/android/server/backup/params/RestoreParams;->createForRestoreAtInstall(Lcom/android/server/backup/transport/TransportClient;Landroid/app/backup/IRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;JLjava/lang/String;ILcom/android/server/backup/internal/OnTaskFinishedListener;Ljava/util/Map;)Lcom/android/server/backup/params/RestoreParams;
 HPLcom/android/server/backup/remote/-$$Lambda$RemoteCall$UZaEiTGjS9e2j04YYkGl3Y2ltU4;-><init>(Lcom/android/server/backup/remote/RemoteCall;)V
-PLcom/android/server/backup/remote/-$$Lambda$RemoteCall$UZaEiTGjS9e2j04YYkGl3Y2ltU4;->run()V
+HPLcom/android/server/backup/remote/-$$Lambda$RemoteCall$UZaEiTGjS9e2j04YYkGl3Y2ltU4;->run()V
 HPLcom/android/server/backup/remote/FutureBackupCallback;-><init>(Ljava/util/concurrent/CompletableFuture;)V
-PLcom/android/server/backup/remote/FutureBackupCallback;->operationComplete(J)V
+HPLcom/android/server/backup/remote/FutureBackupCallback;->operationComplete(J)V
 PLcom/android/server/backup/remote/RemoteCall;-><init>(Lcom/android/server/backup/remote/RemoteCallable;J)V
-PLcom/android/server/backup/remote/RemoteCall;-><init>(ZLcom/android/server/backup/remote/RemoteCallable;J)V
-PLcom/android/server/backup/remote/RemoteCall;->call()Lcom/android/server/backup/remote/RemoteResult;
+HPLcom/android/server/backup/remote/RemoteCall;-><init>(ZLcom/android/server/backup/remote/RemoteCallable;J)V
+HPLcom/android/server/backup/remote/RemoteCall;->call()Lcom/android/server/backup/remote/RemoteResult;
 PLcom/android/server/backup/remote/RemoteCall;->execute(Lcom/android/server/backup/remote/RemoteCallable;J)Lcom/android/server/backup/remote/RemoteResult;
 HPLcom/android/server/backup/remote/RemoteCall;->lambda$UZaEiTGjS9e2j04YYkGl3Y2ltU4(Lcom/android/server/backup/remote/RemoteCall;)V
 HPLcom/android/server/backup/remote/RemoteCall;->timeOut()V
 PLcom/android/server/backup/remote/RemoteResult;-><clinit>()V
-PLcom/android/server/backup/remote/RemoteResult;-><init>(IJ)V
+HPLcom/android/server/backup/remote/RemoteResult;-><init>(IJ)V
 PLcom/android/server/backup/remote/RemoteResult;->get()J
 PLcom/android/server/backup/remote/RemoteResult;->isPresent()Z
 HPLcom/android/server/backup/remote/RemoteResult;->of(J)Lcom/android/server/backup/remote/RemoteResult;
+PLcom/android/server/backup/restore/-$$Lambda$FullRestoreEngine$4tWYktC0BIhLX9UJcbVLlqtWGqU;-><clinit>()V
+PLcom/android/server/backup/restore/-$$Lambda$FullRestoreEngine$4tWYktC0BIhLX9UJcbVLlqtWGqU;-><init>()V
+PLcom/android/server/backup/restore/-$$Lambda$FullRestoreEngine$4tWYktC0BIhLX9UJcbVLlqtWGqU;->onBytesRead(J)V
+PLcom/android/server/backup/restore/FullRestoreEngine$1;-><clinit>()V
+PLcom/android/server/backup/restore/FullRestoreEngine;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/BackupRestoreTask;Landroid/app/backup/IFullBackupRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;Landroid/content/pm/PackageInfo;ZIZ)V
+PLcom/android/server/backup/restore/FullRestoreEngine;->getAgent()Landroid/app/IBackupAgent;
+PLcom/android/server/backup/restore/FullRestoreEngine;->getWidgetData()[B
+PLcom/android/server/backup/restore/FullRestoreEngine;->isCanonicalFilePath(Ljava/lang/String;)Z
+PLcom/android/server/backup/restore/FullRestoreEngine;->isRestorableFile(Lcom/android/server/backup/FileMetadata;)Z
+PLcom/android/server/backup/restore/FullRestoreEngine;->lambda$restoreOneFile$0(J)V
+HPLcom/android/server/backup/restore/FullRestoreEngine;->restoreOneFile(Ljava/io/InputStream;Z[BLandroid/content/pm/PackageInfo;ZILandroid/app/backup/IBackupManagerMonitor;)Z
+PLcom/android/server/backup/restore/FullRestoreEngine;->setUpPipes()V
+PLcom/android/server/backup/restore/FullRestoreEngine;->shouldForceClearAppDataOnFullRestore(Ljava/lang/String;)Z
+PLcom/android/server/backup/restore/FullRestoreEngine;->tearDownPipes()V
+PLcom/android/server/backup/restore/FullRestoreEngineThread;-><init>(Lcom/android/server/backup/restore/FullRestoreEngine;Landroid/os/ParcelFileDescriptor;)V
+PLcom/android/server/backup/restore/FullRestoreEngineThread;->run()V
+PLcom/android/server/backup/restore/FullRestoreEngineThread;->waitForResult()I
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask$1;-><clinit>()V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask$StreamFeederThread;-><init>(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;)V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask$StreamFeederThread;->operationComplete(J)V
+HPLcom/android/server/backup/restore/PerformUnifiedRestoreTask$StreamFeederThread;->run()V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/transport/TransportClient;Landroid/app/backup/IRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;JLandroid/content/pm/PackageInfo;IZ[Ljava/lang/String;Lcom/android/server/backup/internal/OnTaskFinishedListener;Ljava/util/Map;)V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->access$000(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;)Lcom/android/server/backup/UserBackupManagerService;
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->access$100(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;)Landroid/content/pm/PackageInfo;
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->access$200(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;)Landroid/app/backup/IBackupManagerMonitor;
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->access$300(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;)Lcom/android/server/backup/transport/TransportClient;
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->access$402(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;Z)Z
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->access$502(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;Landroid/app/IBackupAgent;)Landroid/app/IBackupAgent;
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->access$602(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;[B)[B
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->dispatchNextRestore()V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->execute()V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->executeNextState(Lcom/android/server/backup/restore/UnifiedRestoreState;)V
+HPLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->filterExcludedKeys(Ljava/lang/String;Landroid/app/backup/BackupDataInput;Landroid/app/backup/BackupDataOutput;)V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->finalizeRestore()V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->getExcludedKeysForPackage(Ljava/lang/String;)Ljava/util/Set;
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->initiateOneRestore(Landroid/content/pm/PackageInfo;J)V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->keyValueAgentCleanup()V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->operationComplete(J)V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->restoreFinished()V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->restoreFull()V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->restoreKeyValue()V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->sendOnRestorePackage(Ljava/lang/String;)V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->sendStartRestore(I)V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->shouldStageBackupData(Ljava/lang/String;)Z
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->startRestore()V
+PLcom/android/server/backup/restore/RestoreDeleteObserver;-><init>()V
+PLcom/android/server/backup/restore/RestoreEngine;-><init>()V
+PLcom/android/server/backup/restore/RestoreEngine;->getResult()I
+PLcom/android/server/backup/restore/RestoreEngine;->isRunning()Z
+PLcom/android/server/backup/restore/RestoreEngine;->setRunning(Z)V
+PLcom/android/server/backup/restore/RestoreEngine;->waitForResult()I
+PLcom/android/server/backup/restore/RestorePolicy;-><clinit>()V
+PLcom/android/server/backup/restore/RestorePolicy;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/backup/restore/RestorePolicy;->values()[Lcom/android/server/backup/restore/RestorePolicy;
 PLcom/android/server/backup/restore/UnifiedRestoreState;-><clinit>()V
 PLcom/android/server/backup/restore/UnifiedRestoreState;-><init>(Ljava/lang/String;I)V
 PLcom/android/server/backup/restore/UnifiedRestoreState;->values()[Lcom/android/server/backup/restore/UnifiedRestoreState;
 HPLcom/android/server/backup/transport/-$$Lambda$TransportClient$ciIUj0x0CRg93UETUpy2FB5aqCQ;-><init>(Lcom/android/server/backup/transport/TransportClient;Lcom/android/server/backup/transport/TransportConnectionListener;Lcom/android/internal/backup/IBackupTransport;)V
-PLcom/android/server/backup/transport/-$$Lambda$TransportClient$ciIUj0x0CRg93UETUpy2FB5aqCQ;->run()V
+HPLcom/android/server/backup/transport/-$$Lambda$TransportClient$ciIUj0x0CRg93UETUpy2FB5aqCQ;->run()V
 HPLcom/android/server/backup/transport/-$$Lambda$TransportClient$uc3fygwQjQIS_JT7mlt-yMBfJcE;-><init>(Ljava/util/concurrent/CompletableFuture;)V
 PLcom/android/server/backup/transport/-$$Lambda$TransportClient$uc3fygwQjQIS_JT7mlt-yMBfJcE;->onTransportConnectionResult(Lcom/android/internal/backup/IBackupTransport;Lcom/android/server/backup/transport/TransportClient;)V
 PLcom/android/server/backup/transport/-$$Lambda$TransportClientManager$3-d3ib7qD5oE9G-iWpfeoufnGXc;-><clinit>()V
 PLcom/android/server/backup/transport/-$$Lambda$TransportClientManager$3-d3ib7qD5oE9G-iWpfeoufnGXc;-><init>()V
 HPLcom/android/server/backup/transport/-$$Lambda$TransportClientManager$3-d3ib7qD5oE9G-iWpfeoufnGXc;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HPLcom/android/server/backup/transport/TransportClient$TransportConnection;-><init>(Landroid/content/Context;Lcom/android/server/backup/transport/TransportClient;)V
-PLcom/android/server/backup/transport/TransportClient$TransportConnection;-><init>(Landroid/content/Context;Lcom/android/server/backup/transport/TransportClient;Lcom/android/server/backup/transport/TransportClient$1;)V
+HPLcom/android/server/backup/transport/TransportClient$TransportConnection;-><init>(Landroid/content/Context;Lcom/android/server/backup/transport/TransportClient;Lcom/android/server/backup/transport/TransportClient$1;)V
 PLcom/android/server/backup/transport/TransportClient$TransportConnection;->onBindingDied(Landroid/content/ComponentName;)V
-PLcom/android/server/backup/transport/TransportClient$TransportConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/backup/transport/TransportClient$TransportConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/backup/transport/TransportClient$TransportConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
 HPLcom/android/server/backup/transport/TransportClient;-><init>(ILandroid/content/Context;Lcom/android/server/backup/transport/TransportStats;Landroid/content/Intent;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/backup/transport/TransportClient;-><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/TransportClient;-><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/TransportClient;->access$100(Lcom/android/server/backup/transport/TransportClient;Landroid/os/IBinder;)V
 PLcom/android/server/backup/transport/TransportClient;->access$200(Lcom/android/server/backup/transport/TransportClient;)V
 PLcom/android/server/backup/transport/TransportClient;->access$300(Lcom/android/server/backup/transport/TransportClient;)V
 HPLcom/android/server/backup/transport/TransportClient;->checkState(ZLjava/lang/String;)V
 HPLcom/android/server/backup/transport/TransportClient;->checkStateIntegrityLocked()V
 HPLcom/android/server/backup/transport/TransportClient;->connect(Ljava/lang/String;)Lcom/android/internal/backup/IBackupTransport;
-PLcom/android/server/backup/transport/TransportClient;->connectAsync(Lcom/android/server/backup/transport/TransportConnectionListener;Ljava/lang/String;)V
-PLcom/android/server/backup/transport/TransportClient;->connectOrThrow(Ljava/lang/String;)Lcom/android/internal/backup/IBackupTransport;
-PLcom/android/server/backup/transport/TransportClient;->finalize()V
+HPLcom/android/server/backup/transport/TransportClient;->connectAsync(Lcom/android/server/backup/transport/TransportConnectionListener;Ljava/lang/String;)V
+HPLcom/android/server/backup/transport/TransportClient;->connectOrThrow(Ljava/lang/String;)Lcom/android/internal/backup/IBackupTransport;
+HPLcom/android/server/backup/transport/TransportClient;->finalize()V
+PLcom/android/server/backup/transport/TransportClient;->getConnectedTransport(Ljava/lang/String;)Lcom/android/internal/backup/IBackupTransport;
 PLcom/android/server/backup/transport/TransportClient;->getTransportComponent()Landroid/content/ComponentName;
 HPLcom/android/server/backup/transport/TransportClient;->lambda$connect$0(Ljava/util/concurrent/CompletableFuture;Lcom/android/internal/backup/IBackupTransport;Lcom/android/server/backup/transport/TransportClient;)V
 PLcom/android/server/backup/transport/TransportClient;->lambda$notifyListener$1$TransportClient(Lcom/android/server/backup/transport/TransportConnectionListener;Lcom/android/internal/backup/IBackupTransport;)V
 HPLcom/android/server/backup/transport/TransportClient;->log(ILjava/lang/String;)V
 HPLcom/android/server/backup/transport/TransportClient;->log(ILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/backup/transport/TransportClient;->markAsDisposed()V
-PLcom/android/server/backup/transport/TransportClient;->notifyListener(Lcom/android/server/backup/transport/TransportConnectionListener;Lcom/android/internal/backup/IBackupTransport;Ljava/lang/String;)V
+HPLcom/android/server/backup/transport/TransportClient;->markAsDisposed()V
+HPLcom/android/server/backup/transport/TransportClient;->notifyListener(Lcom/android/server/backup/transport/TransportConnectionListener;Lcom/android/internal/backup/IBackupTransport;Ljava/lang/String;)V
 HPLcom/android/server/backup/transport/TransportClient;->notifyListenersAndClearLocked(Lcom/android/internal/backup/IBackupTransport;)V
 PLcom/android/server/backup/transport/TransportClient;->onBindingDied()V
-PLcom/android/server/backup/transport/TransportClient;->onServiceConnected(Landroid/os/IBinder;)V
+HPLcom/android/server/backup/transport/TransportClient;->onServiceConnected(Landroid/os/IBinder;)V
 PLcom/android/server/backup/transport/TransportClient;->onServiceDisconnected()V
 HPLcom/android/server/backup/transport/TransportClient;->onStateTransition(II)V
 HPLcom/android/server/backup/transport/TransportClient;->saveLogEntry(Ljava/lang/String;)V
@@ -6935,53 +11225,83 @@
 HPLcom/android/server/backup/transport/TransportClient;->stateToString(I)Ljava/lang/String;
 HPLcom/android/server/backup/transport/TransportClient;->toString()Ljava/lang/String;
 HPLcom/android/server/backup/transport/TransportClient;->transitionThroughState(III)I
-PLcom/android/server/backup/transport/TransportClient;->unbind(Ljava/lang/String;)V
+HPLcom/android/server/backup/transport/TransportClient;->unbind(Ljava/lang/String;)V
 PLcom/android/server/backup/transport/TransportClientManager;-><clinit>()V
 PLcom/android/server/backup/transport/TransportClientManager;-><init>(ILandroid/content/Context;Lcom/android/server/backup/transport/TransportStats;)V
 PLcom/android/server/backup/transport/TransportClientManager;-><init>(ILandroid/content/Context;Lcom/android/server/backup/transport/TransportStats;Ljava/util/function/Function;)V
-PLcom/android/server/backup/transport/TransportClientManager;->disposeOfTransportClient(Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;)V
+HPLcom/android/server/backup/transport/TransportClientManager;->disposeOfTransportClient(Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;)V
 PLcom/android/server/backup/transport/TransportClientManager;->dump(Ljava/io/PrintWriter;)V
 HPLcom/android/server/backup/transport/TransportClientManager;->getRealTransportIntent(Landroid/content/ComponentName;)Landroid/content/Intent;
-PLcom/android/server/backup/transport/TransportClientManager;->getTransportClient(Landroid/content/ComponentName;Landroid/os/Bundle;Ljava/lang/String;)Lcom/android/server/backup/transport/TransportClient;
+HPLcom/android/server/backup/transport/TransportClientManager;->getTransportClient(Landroid/content/ComponentName;Landroid/os/Bundle;Ljava/lang/String;)Lcom/android/server/backup/transport/TransportClient;
 PLcom/android/server/backup/transport/TransportClientManager;->getTransportClient(Landroid/content/ComponentName;Ljava/lang/String;)Lcom/android/server/backup/transport/TransportClient;
-PLcom/android/server/backup/transport/TransportClientManager;->getTransportClient(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;)Lcom/android/server/backup/transport/TransportClient;
+HPLcom/android/server/backup/transport/TransportClientManager;->getTransportClient(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;)Lcom/android/server/backup/transport/TransportClient;
 HPLcom/android/server/backup/transport/TransportClientManager;->lambda$3-d3ib7qD5oE9G-iWpfeoufnGXc(Landroid/content/ComponentName;)Landroid/content/Intent;
 PLcom/android/server/backup/transport/TransportNotAvailableException;-><init>()V
+HPLcom/android/server/backup/transport/TransportNotRegisteredException;-><init>(Ljava/lang/String;)V
 PLcom/android/server/backup/transport/TransportStats$Stats;-><init>()V
 HPLcom/android/server/backup/transport/TransportStats$Stats;->access$000(Lcom/android/server/backup/transport/TransportStats$Stats;J)V
-PLcom/android/server/backup/transport/TransportStats$Stats;->register(J)V
+HPLcom/android/server/backup/transport/TransportStats$Stats;->register(J)V
 PLcom/android/server/backup/transport/TransportStats;-><init>()V
-PLcom/android/server/backup/transport/TransportStats;->registerConnectionTime(Landroid/content/ComponentName;J)V
+HPLcom/android/server/backup/transport/TransportStats;->registerConnectionTime(Landroid/content/ComponentName;J)V
 HPLcom/android/server/backup/transport/TransportUtils;->formatMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HPLcom/android/server/backup/transport/TransportUtils;->log(ILjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/backup/utils/AppBackupUtils;-><clinit>()V
 HPLcom/android/server/backup/utils/AppBackupUtils;->appGetsFullBackup(Landroid/content/pm/PackageInfo;)Z
+HPLcom/android/server/backup/utils/AppBackupUtils;->appIsDisabled(Landroid/content/pm/ApplicationInfo;I)Z
 HPLcom/android/server/backup/utils/AppBackupUtils;->appIsDisabled(Landroid/content/pm/ApplicationInfo;Landroid/content/pm/PackageManagerInternal;I)Z
 HPLcom/android/server/backup/utils/AppBackupUtils;->appIsEligibleForBackup(Landroid/content/pm/ApplicationInfo;I)Z
 HPLcom/android/server/backup/utils/AppBackupUtils;->appIsEligibleForBackup(Landroid/content/pm/ApplicationInfo;Landroid/content/pm/PackageManagerInternal;I)Z
-PLcom/android/server/backup/utils/AppBackupUtils;->appIsRunningAndEligibleForBackupWithTransport(Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;Landroid/content/pm/PackageManager;I)Z
+PLcom/android/server/backup/utils/AppBackupUtils;->appIsKeyValueOnly(Landroid/content/pm/PackageInfo;)Z
+HPLcom/android/server/backup/utils/AppBackupUtils;->appIsRunningAndEligibleForBackupWithTransport(Lcom/android/server/backup/transport/TransportClient;Ljava/lang/String;Landroid/content/pm/PackageManager;I)Z
 HPLcom/android/server/backup/utils/AppBackupUtils;->appIsStopped(Landroid/content/pm/ApplicationInfo;)Z
-PLcom/android/server/backup/utils/BackupManagerMonitorUtils;->monitorEvent(Landroid/app/backup/IBackupManagerMonitor;ILandroid/content/pm/PackageInfo;ILandroid/os/Bundle;)Landroid/app/backup/IBackupManagerMonitor;
-PLcom/android/server/backup/utils/BackupManagerMonitorUtils;->putMonitoringExtra(Landroid/os/Bundle;Ljava/lang/String;J)Landroid/os/Bundle;
-PLcom/android/server/backup/utils/BackupObserverUtils;->sendBackupFinished(Landroid/app/backup/IBackupObserver;I)V
-PLcom/android/server/backup/utils/BackupObserverUtils;->sendBackupOnPackageResult(Landroid/app/backup/IBackupObserver;Ljava/lang/String;I)V
+PLcom/android/server/backup/utils/AppBackupUtils;->signaturesMatch([Landroid/content/pm/Signature;Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageManagerInternal;)Z
+HPLcom/android/server/backup/utils/BackupManagerMonitorUtils;->monitorEvent(Landroid/app/backup/IBackupManagerMonitor;ILandroid/content/pm/PackageInfo;ILandroid/os/Bundle;)Landroid/app/backup/IBackupManagerMonitor;
+HPLcom/android/server/backup/utils/BackupManagerMonitorUtils;->putMonitoringExtra(Landroid/os/Bundle;Ljava/lang/String;J)Landroid/os/Bundle;
+PLcom/android/server/backup/utils/BackupManagerMonitorUtils;->putMonitoringExtra(Landroid/os/Bundle;Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;
+PLcom/android/server/backup/utils/BackupManagerMonitorUtils;->putMonitoringExtra(Landroid/os/Bundle;Ljava/lang/String;Z)Landroid/os/Bundle;
+HPLcom/android/server/backup/utils/BackupObserverUtils;->sendBackupFinished(Landroid/app/backup/IBackupObserver;I)V
+HPLcom/android/server/backup/utils/BackupObserverUtils;->sendBackupOnPackageResult(Landroid/app/backup/IBackupObserver;Ljava/lang/String;I)V
 HPLcom/android/server/backup/utils/BackupObserverUtils;->sendBackupOnUpdate(Landroid/app/backup/IBackupObserver;Ljava/lang/String;Landroid/app/backup/BackupProgress;)V
 PLcom/android/server/backup/utils/DataStreamFileCodec;-><init>(Ljava/io/File;Lcom/android/server/backup/utils/DataStreamCodec;)V
 PLcom/android/server/backup/utils/DataStreamFileCodec;->deserialize()Ljava/lang/Object;
+PLcom/android/server/backup/utils/FullBackupRestoreObserverUtils;->sendOnRestorePackage(Landroid/app/backup/IFullBackupRestoreObserver;Ljava/lang/String;)Landroid/app/backup/IFullBackupRestoreObserver;
 HPLcom/android/server/backup/utils/FullBackupUtils;->routeSocketDataToOutput(Landroid/os/ParcelFileDescriptor;Ljava/io/OutputStream;)V
 PLcom/android/server/backup/utils/RandomAccessFileUtils;->getRandomAccessFile(Ljava/io/File;)Ljava/io/RandomAccessFile;
 PLcom/android/server/backup/utils/RandomAccessFileUtils;->writeBoolean(Ljava/io/File;Z)V
 HPLcom/android/server/backup/utils/SparseArrayUtils;->union(Landroid/util/SparseArray;)Ljava/util/HashSet;
+PLcom/android/server/backup/utils/TarBackupReader;-><init>(Ljava/io/InputStream;Lcom/android/server/backup/utils/BytesReadListener;Landroid/app/backup/IBackupManagerMonitor;)V
+PLcom/android/server/backup/utils/TarBackupReader;->chooseRestorePolicy(Landroid/content/pm/PackageManager;ZLcom/android/server/backup/FileMetadata;[Landroid/content/pm/Signature;Landroid/content/pm/PackageManagerInternal;I)Lcom/android/server/backup/restore/RestorePolicy;
+PLcom/android/server/backup/utils/TarBackupReader;->extractLine([BI[Ljava/lang/String;)I
+HPLcom/android/server/backup/utils/TarBackupReader;->extractRadix([BIII)J
+PLcom/android/server/backup/utils/TarBackupReader;->extractString([BII)Ljava/lang/String;
+PLcom/android/server/backup/utils/TarBackupReader;->readAppManifestAndReturnSignatures(Lcom/android/server/backup/FileMetadata;)[Landroid/content/pm/Signature;
+PLcom/android/server/backup/utils/TarBackupReader;->readExactly(Ljava/io/InputStream;[BII)I
+PLcom/android/server/backup/utils/TarBackupReader;->readPaxExtendedHeader(Lcom/android/server/backup/FileMetadata;)Z
+PLcom/android/server/backup/utils/TarBackupReader;->readTarHeader([B)Z
+HPLcom/android/server/backup/utils/TarBackupReader;->readTarHeaders()Lcom/android/server/backup/FileMetadata;
+PLcom/android/server/backup/utils/TarBackupReader;->skipTarPadding(J)V
+PLcom/android/server/biometrics/-$$Lambda$BiometricService$IIHhqSKogJZG56VmePRbTOf_5qo;-><init>(Lcom/android/server/biometrics/BiometricService;Landroid/os/Bundle;ILjava/lang/String;Landroid/os/IBinder;JLandroid/hardware/biometrics/IBiometricServiceReceiver;III)V
+PLcom/android/server/biometrics/-$$Lambda$BiometricService$IIHhqSKogJZG56VmePRbTOf_5qo;->run()V
+PLcom/android/server/biometrics/-$$Lambda$BiometricService$PWa3w6AT62ogdb7_LTOZ5QOYAk4;-><init>(Lcom/android/server/biometrics/BiometricService;Landroid/os/Bundle;ILjava/lang/String;Landroid/hardware/biometrics/IBiometricServiceReceiver;Landroid/os/IBinder;JIII)V
+PLcom/android/server/biometrics/-$$Lambda$BiometricService$PWa3w6AT62ogdb7_LTOZ5QOYAk4;->run()V
 HSPLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$5zE_f-JKSpUWsfwvdtw36YktZZ0;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;)V
-PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$5zE_f-JKSpUWsfwvdtw36YktZZ0;->run()V
+HSPLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$5zE_f-JKSpUWsfwvdtw36YktZZ0;->run()V
+PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$8-hCNL3jMZVMKItY0KyN7TBk6u8;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Lcom/android/server/biometrics/RemovalClient;)V
+PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$8-hCNL3jMZVMKItY0KyN7TBk6u8;->run()V
 HPLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$B1PDNz5plOtQUbeZgXMkI_dh_yQ;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Landroid/os/IBinder;Z)V
-PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$B1PDNz5plOtQUbeZgXMkI_dh_yQ;->run()V
-PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$VFT8WmkESkAnonaxJDq_GS_vB4E;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;JLcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;Ljava/lang/String;)V
-PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$VFT8WmkESkAnonaxJDq_GS_vB4E;->run()V
+HPLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$B1PDNz5plOtQUbeZgXMkI_dh_yQ;->run()V
+HPLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$VFT8WmkESkAnonaxJDq_GS_vB4E;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;JLcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;Ljava/lang/String;)V
+HPLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$VFT8WmkESkAnonaxJDq_GS_vB4E;->run()V
+PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$Zy4OXo3HMpNNxU1x5VMDe_5Q3vI;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Lcom/android/server/biometrics/BiometricServiceBase$EnrollClientImpl;)V
+PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$Zy4OXo3HMpNNxU1x5VMDe_5Q3vI;->run()V
+PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$iRNlDOJhMpMFOTQxuHjuZ0z5dlY;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;)V
+PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$iRNlDOJhMpMFOTQxuHjuZ0z5dlY;->run()V
 HSPLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$lM-Gght_XjLuQG2iY0xHchO8Xgk;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Lcom/android/server/biometrics/EnumerateClient;)V
-PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$lM-Gght_XjLuQG2iY0xHchO8Xgk;->run()V
+HSPLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$lM-Gght_XjLuQG2iY0xHchO8Xgk;->run()V
 PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$rf3hjPI_nf4EvVsQV7gFCF1-HpI;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;I)V
 PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$rf3hjPI_nf4EvVsQV7gFCF1-HpI;->run()V
+PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$yj0NG4umGnnyUerNM_EKxeka05A;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Landroid/os/IBinder;)V
+PLcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$yj0NG4umGnnyUerNM_EKxeka05A;->run()V
 HSPLcom/android/server/biometrics/AuthService$AuthServiceImpl;-><init>(Lcom/android/server/biometrics/AuthService;)V
 HSPLcom/android/server/biometrics/AuthService$AuthServiceImpl;-><init>(Lcom/android/server/biometrics/AuthService;Lcom/android/server/biometrics/AuthService$1;)V
 HPLcom/android/server/biometrics/AuthService$AuthServiceImpl;->canAuthenticate(Ljava/lang/String;II)I
@@ -7000,33 +11320,52 @@
 HSPLcom/android/server/biometrics/AuthService;->access$200(Lcom/android/server/biometrics/AuthService;)V
 HSPLcom/android/server/biometrics/AuthService;->access$300(Lcom/android/server/biometrics/AuthService;)Landroid/hardware/biometrics/IBiometricService;
 HSPLcom/android/server/biometrics/AuthService;->checkInternalPermission()V
-PLcom/android/server/biometrics/AuthService;->checkPermission()V
+HPLcom/android/server/biometrics/AuthService;->checkPermission()V
 HSPLcom/android/server/biometrics/AuthService;->onStart()V
 HSPLcom/android/server/biometrics/AuthService;->registerAuthenticator(Lcom/android/server/biometrics/SensorConfig;)V
-PLcom/android/server/biometrics/AuthenticationClient;-><init>(Landroid/content/Context;Lcom/android/server/biometrics/Constants;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;IIJZLjava/lang/String;IZ)V
+HPLcom/android/server/biometrics/AuthenticationClient;-><init>(Landroid/content/Context;Lcom/android/server/biometrics/Constants;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;IIJZLjava/lang/String;IZ)V
 PLcom/android/server/biometrics/AuthenticationClient;->binderDied()V
+PLcom/android/server/biometrics/AuthenticationClient;->getRequireConfirmation()Z
 PLcom/android/server/biometrics/AuthenticationClient;->getStartTimeMs()J
-PLcom/android/server/biometrics/AuthenticationClient;->isBiometricPrompt()Z
+HPLcom/android/server/biometrics/AuthenticationClient;->isBiometricPrompt()Z
 PLcom/android/server/biometrics/AuthenticationClient;->isCryptoOperation()Z
 HPLcom/android/server/biometrics/AuthenticationClient;->onAuthenticated(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;ZLjava/util/ArrayList;)Z
-PLcom/android/server/biometrics/AuthenticationClient;->onError(JII)Z
+HPLcom/android/server/biometrics/AuthenticationClient;->onError(JII)Z
 HPLcom/android/server/biometrics/AuthenticationClient;->start()I
 PLcom/android/server/biometrics/AuthenticationClient;->statsAction()I
 HPLcom/android/server/biometrics/AuthenticationClient;->stop(Z)I
 HSPLcom/android/server/biometrics/BiometricService$1;-><init>(Lcom/android/server/biometrics/BiometricService;Landroid/os/Looper;)V
+PLcom/android/server/biometrics/BiometricService$1;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/biometrics/BiometricService$2;-><init>(Lcom/android/server/biometrics/BiometricService;)V
+PLcom/android/server/biometrics/BiometricService$2;->onAcquired(ILjava/lang/String;)V
+PLcom/android/server/biometrics/BiometricService$2;->onAuthenticationFailed()V
+PLcom/android/server/biometrics/BiometricService$2;->onAuthenticationSucceeded(Z[B)V
+PLcom/android/server/biometrics/BiometricService$2;->onDeviceCredentialPressed()V
+PLcom/android/server/biometrics/BiometricService$2;->onDialogDismissed(I)V
+PLcom/android/server/biometrics/BiometricService$2;->onError(IIII)V
 HSPLcom/android/server/biometrics/BiometricService$3;-><init>(Lcom/android/server/biometrics/BiometricService;)V
+PLcom/android/server/biometrics/BiometricService$AuthSession;-><init>(Lcom/android/server/biometrics/BiometricService;Ljava/util/HashMap;Landroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricServiceReceiver;Ljava/lang/String;Landroid/os/Bundle;IIIIZ)V
+PLcom/android/server/biometrics/BiometricService$AuthSession;->access$1802(Lcom/android/server/biometrics/BiometricService$AuthSession;J)J
+PLcom/android/server/biometrics/BiometricService$AuthSession;->access$1900(Lcom/android/server/biometrics/BiometricService$AuthSession;)J
+PLcom/android/server/biometrics/BiometricService$AuthSession;->access$1902(Lcom/android/server/biometrics/BiometricService$AuthSession;J)J
+PLcom/android/server/biometrics/BiometricService$AuthSession;->containsCookie(I)Z
+PLcom/android/server/biometrics/BiometricService$AuthSession;->isAllowDeviceCredential()Z
+PLcom/android/server/biometrics/BiometricService$AuthSession;->isCrypto()Z
 HSPLcom/android/server/biometrics/BiometricService$AuthenticatorWrapper;-><init>(IIILandroid/hardware/biometrics/IBiometricAuthenticator;)V
 PLcom/android/server/biometrics/BiometricService$AuthenticatorWrapper;->getActualStrength()I
 HSPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;-><init>(Lcom/android/server/biometrics/BiometricService;)V
 HSPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;-><init>(Lcom/android/server/biometrics/BiometricService;Lcom/android/server/biometrics/BiometricService$1;)V
+PLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->authenticate(Landroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricServiceReceiver;Ljava/lang/String;Landroid/os/Bundle;)V
 HPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->canAuthenticate(Ljava/lang/String;II)I
-PLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->hasEnrolledBiometrics(ILjava/lang/String;)Z
+PLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->cancelAuthentication(Landroid/os/IBinder;Ljava/lang/String;)V
+HPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->hasEnrolledBiometrics(ILjava/lang/String;)Z
+PLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->onReadyForAuthentication(IZI)V
 HSPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->registerAuthenticator(IIILandroid/hardware/biometrics/IBiometricAuthenticator;)V
 HSPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->registerEnabledOnKeyguardCallback(Landroid/hardware/biometrics/IBiometricEnabledOnKeyguardCallback;)V
-PLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->resetLockout([B)V
-PLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->setActiveUser(I)V
+HPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->resetLockout([B)V
+HPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->setActiveUser(I)V
 HSPLcom/android/server/biometrics/BiometricService$EnabledOnKeyguardCallback;-><init>(Lcom/android/server/biometrics/BiometricService;Landroid/hardware/biometrics/IBiometricEnabledOnKeyguardCallback;)V
+PLcom/android/server/biometrics/BiometricService$EnabledOnKeyguardCallback;->binderDied()V
 HSPLcom/android/server/biometrics/BiometricService$Injector;-><init>()V
 HSPLcom/android/server/biometrics/BiometricService$Injector;->getActivityManagerService()Landroid/app/IActivityManager;
 HSPLcom/android/server/biometrics/BiometricService$Injector;->getBiometricStrengthController(Lcom/android/server/biometrics/BiometricService;)Lcom/android/server/biometrics/BiometricStrengthController;
@@ -7035,238 +11374,396 @@
 HSPLcom/android/server/biometrics/BiometricService$Injector;->getSettingObserver(Landroid/content/Context;Landroid/os/Handler;Ljava/util/List;)Lcom/android/server/biometrics/BiometricService$SettingObserver;
 HSPLcom/android/server/biometrics/BiometricService$Injector;->getStatusBarService()Lcom/android/internal/statusbar/IStatusBarService;
 HSPLcom/android/server/biometrics/BiometricService$Injector;->getTrustManager()Landroid/app/trust/ITrustManager;
+PLcom/android/server/biometrics/BiometricService$Injector;->isDebugEnabled(Landroid/content/Context;I)Z
 HSPLcom/android/server/biometrics/BiometricService$Injector;->publishBinderService(Lcom/android/server/biometrics/BiometricService;Landroid/hardware/biometrics/IBiometricService$Stub;)V
 HSPLcom/android/server/biometrics/BiometricService$SettingObserver;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/util/List;)V
-PLcom/android/server/biometrics/BiometricService$SettingObserver;->getFaceEnabledForApps(I)Z
+PLcom/android/server/biometrics/BiometricService$SettingObserver;->getFaceAlwaysRequireConfirmation(I)Z
+HPLcom/android/server/biometrics/BiometricService$SettingObserver;->getFaceEnabledForApps(I)Z
 HSPLcom/android/server/biometrics/BiometricService$SettingObserver;->getFaceEnabledOnKeyguard()Z
 HSPLcom/android/server/biometrics/BiometricService$SettingObserver;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/biometrics/BiometricService$SettingObserver;->updateContentObserver()V
 HSPLcom/android/server/biometrics/BiometricService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/biometrics/BiometricService;-><init>(Landroid/content/Context;Lcom/android/server/biometrics/BiometricService$Injector;)V
+PLcom/android/server/biometrics/BiometricService;->access$000(Lcom/android/server/biometrics/BiometricService;Z[B)V
+PLcom/android/server/biometrics/BiometricService;->access$100(Lcom/android/server/biometrics/BiometricService;)V
+PLcom/android/server/biometrics/BiometricService;->access$1000(Lcom/android/server/biometrics/BiometricService;)V
 HSPLcom/android/server/biometrics/BiometricService;->access$1100(Lcom/android/server/biometrics/BiometricService;)Ljava/util/List;
 HSPLcom/android/server/biometrics/BiometricService;->access$1200(Lcom/android/server/biometrics/BiometricService;)V
 PLcom/android/server/biometrics/BiometricService;->access$1300(Lcom/android/server/biometrics/BiometricService;)V
 PLcom/android/server/biometrics/BiometricService;->access$1400(Lcom/android/server/biometrics/BiometricService;ILandroid/os/Bundle;Ljava/lang/String;)Landroid/util/Pair;
+PLcom/android/server/biometrics/BiometricService;->access$1400(Lcom/android/server/biometrics/BiometricService;ILandroid/os/Bundle;Ljava/lang/String;Z)Landroid/util/Pair;
 HSPLcom/android/server/biometrics/BiometricService;->access$1500(Lcom/android/server/biometrics/BiometricService;)Lcom/android/server/biometrics/BiometricService$Injector;
 HSPLcom/android/server/biometrics/BiometricService;->access$1600(Lcom/android/server/biometrics/BiometricService;Ljava/lang/String;Landroid/os/IBinder;)V
+PLcom/android/server/biometrics/BiometricService;->access$200(Lcom/android/server/biometrics/BiometricService;IIII)V
+PLcom/android/server/biometrics/BiometricService;->access$300(Lcom/android/server/biometrics/BiometricService;ILjava/lang/String;)V
+PLcom/android/server/biometrics/BiometricService;->access$400(Lcom/android/server/biometrics/BiometricService;I)V
+PLcom/android/server/biometrics/BiometricService;->access$600(Lcom/android/server/biometrics/BiometricService;IZI)V
+PLcom/android/server/biometrics/BiometricService;->access$700(Lcom/android/server/biometrics/BiometricService;Landroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricServiceReceiver;Ljava/lang/String;Landroid/os/Bundle;III)V
+PLcom/android/server/biometrics/BiometricService;->access$800(Lcom/android/server/biometrics/BiometricService;Landroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/biometrics/BiometricService;->authenticateInternal(Landroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricServiceReceiver;Ljava/lang/String;Landroid/os/Bundle;IIII)V
+PLcom/android/server/biometrics/BiometricService;->cancelInternal(Landroid/os/IBinder;Ljava/lang/String;Z)V
 HPLcom/android/server/biometrics/BiometricService;->checkAndGetAuthenticators(ILandroid/os/Bundle;Ljava/lang/String;)Landroid/util/Pair;
+HPLcom/android/server/biometrics/BiometricService;->checkAndGetAuthenticators(ILandroid/os/Bundle;Ljava/lang/String;Z)Landroid/util/Pair;
 HSPLcom/android/server/biometrics/BiometricService;->checkInternalPermission()V
 PLcom/android/server/biometrics/BiometricService;->checkPermission()V
-PLcom/android/server/biometrics/BiometricService;->isEnabledForApp(II)Z
+PLcom/android/server/biometrics/BiometricService;->handleAuthenticate(Landroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricServiceReceiver;Ljava/lang/String;Landroid/os/Bundle;III)V
+PLcom/android/server/biometrics/BiometricService;->handleAuthenticationRejected()V
+PLcom/android/server/biometrics/BiometricService;->handleAuthenticationSucceeded(Z[B)V
+PLcom/android/server/biometrics/BiometricService;->handleCancelAuthentication(Landroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/biometrics/BiometricService;->handleOnAcquired(ILjava/lang/String;)V
+PLcom/android/server/biometrics/BiometricService;->handleOnDeviceCredentialPressed()V
+PLcom/android/server/biometrics/BiometricService;->handleOnDismissed(I)V
+PLcom/android/server/biometrics/BiometricService;->handleOnError(IIII)V
+PLcom/android/server/biometrics/BiometricService;->handleOnReadyForAuthentication(IZI)V
+HPLcom/android/server/biometrics/BiometricService;->isBiometricDisabledByDevicePolicy(II)Z
+HPLcom/android/server/biometrics/BiometricService;->isEnabledForApp(II)Z
+PLcom/android/server/biometrics/BiometricService;->lambda$handleAuthenticate$0$BiometricService(Landroid/os/Bundle;ILjava/lang/String;Landroid/hardware/biometrics/IBiometricServiceReceiver;Landroid/os/IBinder;JIII)V
+PLcom/android/server/biometrics/BiometricService;->lambda$handleAuthenticate$0$BiometricService(Landroid/os/Bundle;ILjava/lang/String;Landroid/os/IBinder;JLandroid/hardware/biometrics/IBiometricServiceReceiver;III)V
+PLcom/android/server/biometrics/BiometricService;->logDialogDismissed(I)V
+HPLcom/android/server/biometrics/BiometricService;->mapModalityToDevicePolicyType(I)I
 HSPLcom/android/server/biometrics/BiometricService;->onStart()V
+PLcom/android/server/biometrics/BiometricService;->statsModality()I
 HSPLcom/android/server/biometrics/BiometricServiceBase$1;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;)V
 HPLcom/android/server/biometrics/BiometricServiceBase$1;->run()V
 HSPLcom/android/server/biometrics/BiometricServiceBase$2;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;)V
 PLcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Landroid/content/Context;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;IIJZLjava/lang/String;IZ)V
 PLcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;->handleFailedAttempt()I
-PLcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;->onStart()V
-PLcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;->onStop()V
-PLcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;->statsClient()I
+PLcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;->notifyUserActivity()V
+HPLcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;->onStart()V
+HPLcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;->onStop()V
+HPLcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;->statsClient()I
+PLcom/android/server/biometrics/BiometricServiceBase$BiometricServiceListener;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Landroid/hardware/biometrics/IBiometricServiceReceiverInternal;)V
+PLcom/android/server/biometrics/BiometricServiceBase$BiometricServiceListener;->getWrapperReceiver()Landroid/hardware/biometrics/IBiometricServiceReceiverInternal;
+PLcom/android/server/biometrics/BiometricServiceBase$BiometricServiceListener;->onAuthenticationFailedInternal()V
+PLcom/android/server/biometrics/BiometricServiceBase$BiometricServiceListener;->onAuthenticationSucceededInternal(Z[B)V
 HSPLcom/android/server/biometrics/BiometricServiceBase$BiometricTaskStackListener;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;)V
 HSPLcom/android/server/biometrics/BiometricServiceBase$BiometricTaskStackListener;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Lcom/android/server/biometrics/BiometricServiceBase$1;)V
 HPLcom/android/server/biometrics/BiometricServiceBase$BiometricTaskStackListener;->onTaskStackChanged()V
+PLcom/android/server/biometrics/BiometricServiceBase$EnrollClientImpl;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Landroid/content/Context;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;II[BZLjava/lang/String;[II)V
+PLcom/android/server/biometrics/BiometricServiceBase$EnrollClientImpl;->notifyUserActivity()V
 HSPLcom/android/server/biometrics/BiometricServiceBase$H;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;)V
 HSPLcom/android/server/biometrics/BiometricServiceBase$InternalEnumerateClient;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Landroid/content/Context;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;IIZLjava/lang/String;Ljava/util/List;Lcom/android/server/biometrics/BiometricUtils;)V
-PLcom/android/server/biometrics/BiometricServiceBase$InternalEnumerateClient;->doTemplateCleanup()V
-PLcom/android/server/biometrics/BiometricServiceBase$InternalEnumerateClient;->getUnknownHALTemplates()Ljava/util/List;
-PLcom/android/server/biometrics/BiometricServiceBase$InternalEnumerateClient;->handleEnumeratedTemplate(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;)V
-PLcom/android/server/biometrics/BiometricServiceBase$InternalEnumerateClient;->onEnumerationResult(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)Z
-PLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor$1;-><init>(Lcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;)V
+HSPLcom/android/server/biometrics/BiometricServiceBase$InternalEnumerateClient;->doTemplateCleanup()V
+HSPLcom/android/server/biometrics/BiometricServiceBase$InternalEnumerateClient;->getUnknownHALTemplates()Ljava/util/List;
+HSPLcom/android/server/biometrics/BiometricServiceBase$InternalEnumerateClient;->handleEnumeratedTemplate(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;)V
+HSPLcom/android/server/biometrics/BiometricServiceBase$InternalEnumerateClient;->onEnumerationResult(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)Z
+HPLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor$1;-><init>(Lcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;)V
 PLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor$1;->sendResult(Landroid/os/Bundle;)V
-PLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor$2;-><init>(Lcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;)V
-PLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;)V
-PLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;->access$1200(Lcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;)V
-PLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;->releaseWakelock()V
-PLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;->sendLockoutReset()V
+HSPLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor$2;-><init>(Lcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;)V
+PLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor$2;->run()V
+HSPLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;)V
+HSPLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;->access$1200(Lcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;)V
+PLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;->binderDied()V
+HSPLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;->releaseWakelock()V
+HSPLcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;->sendLockoutReset()V
 PLcom/android/server/biometrics/BiometricServiceBase$PerformanceStats;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;)V
 HSPLcom/android/server/biometrics/BiometricServiceBase$ResetClientStateRunnable;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;)V
 HSPLcom/android/server/biometrics/BiometricServiceBase$ResetClientStateRunnable;-><init>(Lcom/android/server/biometrics/BiometricServiceBase;Lcom/android/server/biometrics/BiometricServiceBase$1;)V
+PLcom/android/server/biometrics/BiometricServiceBase$ResetClientStateRunnable;->run()V
 HSPLcom/android/server/biometrics/BiometricServiceBase;-><init>(Landroid/content/Context;)V
-PLcom/android/server/biometrics/BiometricServiceBase;->access$1100(Lcom/android/server/biometrics/BiometricServiceBase;)Landroid/os/PowerManager;
-PLcom/android/server/biometrics/BiometricServiceBase;->access$200(Lcom/android/server/biometrics/BiometricServiceBase;Ljava/lang/String;)Z
+PLcom/android/server/biometrics/BiometricServiceBase;->access$1000(Lcom/android/server/biometrics/BiometricServiceBase;Lcom/android/server/biometrics/ClientMonitor;Z)V
+HSPLcom/android/server/biometrics/BiometricServiceBase;->access$1100(Lcom/android/server/biometrics/BiometricServiceBase;)Landroid/os/PowerManager;
+PLcom/android/server/biometrics/BiometricServiceBase;->access$1300(Lcom/android/server/biometrics/BiometricServiceBase;Lcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;)V
+HPLcom/android/server/biometrics/BiometricServiceBase;->access$200(Lcom/android/server/biometrics/BiometricServiceBase;Ljava/lang/String;)Z
 PLcom/android/server/biometrics/BiometricServiceBase;->access$300(Lcom/android/server/biometrics/BiometricServiceBase;)Lcom/android/server/biometrics/BiometricServiceBase$BiometricTaskStackListener;
 PLcom/android/server/biometrics/BiometricServiceBase;->access$400(Lcom/android/server/biometrics/BiometricServiceBase;)Landroid/app/IActivityTaskManager;
-PLcom/android/server/biometrics/BiometricServiceBase;->access$700(Lcom/android/server/biometrics/BiometricServiceBase;)Lcom/android/server/biometrics/ClientMonitor;
-PLcom/android/server/biometrics/BiometricServiceBase;->access$800(Lcom/android/server/biometrics/BiometricServiceBase;)Ljava/lang/Runnable;
+PLcom/android/server/biometrics/BiometricServiceBase;->access$500(Lcom/android/server/biometrics/BiometricServiceBase;)V
+PLcom/android/server/biometrics/BiometricServiceBase;->access$600(Lcom/android/server/biometrics/BiometricServiceBase;)Lcom/android/server/biometrics/BiometricServiceBase$PerformanceStats;
+HPLcom/android/server/biometrics/BiometricServiceBase;->access$700(Lcom/android/server/biometrics/BiometricServiceBase;)Lcom/android/server/biometrics/ClientMonitor;
+PLcom/android/server/biometrics/BiometricServiceBase;->access$702(Lcom/android/server/biometrics/BiometricServiceBase;Lcom/android/server/biometrics/ClientMonitor;)Lcom/android/server/biometrics/ClientMonitor;
+HPLcom/android/server/biometrics/BiometricServiceBase;->access$800(Lcom/android/server/biometrics/BiometricServiceBase;)Ljava/lang/Runnable;
+PLcom/android/server/biometrics/BiometricServiceBase;->access$900(Lcom/android/server/biometrics/BiometricServiceBase;)Lcom/android/server/biometrics/ClientMonitor;
 HSPLcom/android/server/biometrics/BiometricServiceBase;->addLockoutResetCallback(Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;)V
-PLcom/android/server/biometrics/BiometricServiceBase;->authenticateInternal(Lcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;JLjava/lang/String;)V
-PLcom/android/server/biometrics/BiometricServiceBase;->authenticateInternal(Lcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;JLjava/lang/String;III)V
+HPLcom/android/server/biometrics/BiometricServiceBase;->authenticateInternal(Lcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;JLjava/lang/String;)V
+HPLcom/android/server/biometrics/BiometricServiceBase;->authenticateInternal(Lcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;JLjava/lang/String;III)V
 HSPLcom/android/server/biometrics/BiometricServiceBase;->canUseBiometric(Ljava/lang/String;ZIII)Z
-PLcom/android/server/biometrics/BiometricServiceBase;->cancelAuthenticationInternal(Landroid/os/IBinder;Ljava/lang/String;)V
-PLcom/android/server/biometrics/BiometricServiceBase;->cancelAuthenticationInternal(Landroid/os/IBinder;Ljava/lang/String;IIIZ)V
+HPLcom/android/server/biometrics/BiometricServiceBase;->cancelAuthenticationInternal(Landroid/os/IBinder;Ljava/lang/String;)V
+HPLcom/android/server/biometrics/BiometricServiceBase;->cancelAuthenticationInternal(Landroid/os/IBinder;Ljava/lang/String;IIIZ)V
+PLcom/android/server/biometrics/BiometricServiceBase;->cancelEnrollmentInternal(Landroid/os/IBinder;)V
 HSPLcom/android/server/biometrics/BiometricServiceBase;->checkPermission(Ljava/lang/String;)V
-PLcom/android/server/biometrics/BiometricServiceBase;->clearEnumerateState()V
+HSPLcom/android/server/biometrics/BiometricServiceBase;->clearEnumerateState()V
 HSPLcom/android/server/biometrics/BiometricServiceBase;->doTemplateCleanupForUser(I)V
+PLcom/android/server/biometrics/BiometricServiceBase;->enrollInternal(Lcom/android/server/biometrics/BiometricServiceBase$EnrollClientImpl;I)V
 HSPLcom/android/server/biometrics/BiometricServiceBase;->enumerateInternal(Lcom/android/server/biometrics/EnumerateClient;)V
 HSPLcom/android/server/biometrics/BiometricServiceBase;->enumerateUser(I)V
-PLcom/android/server/biometrics/BiometricServiceBase;->getAuthenticatorId(Ljava/lang/String;)J
-PLcom/android/server/biometrics/BiometricServiceBase;->getCurrentClient()Lcom/android/server/biometrics/ClientMonitor;
+HPLcom/android/server/biometrics/BiometricServiceBase;->getAuthenticatorId(Ljava/lang/String;)J
+HSPLcom/android/server/biometrics/BiometricServiceBase;->getCurrentClient()Lcom/android/server/biometrics/ClientMonitor;
 HSPLcom/android/server/biometrics/BiometricServiceBase;->getEffectiveUserId(I)I
 HSPLcom/android/server/biometrics/BiometricServiceBase;->getUserOrWorkProfileId(Ljava/lang/String;I)I
-PLcom/android/server/biometrics/BiometricServiceBase;->handleAcquired(JII)V
+HPLcom/android/server/biometrics/BiometricServiceBase;->handleAcquired(JII)V
 PLcom/android/server/biometrics/BiometricServiceBase;->handleAuthenticated(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;Ljava/util/ArrayList;)V
-PLcom/android/server/biometrics/BiometricServiceBase;->handleEnumerate(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
-PLcom/android/server/biometrics/BiometricServiceBase;->handleError(JII)V
+PLcom/android/server/biometrics/BiometricServiceBase;->handleEnrollResult(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+HSPLcom/android/server/biometrics/BiometricServiceBase;->handleEnumerate(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+HPLcom/android/server/biometrics/BiometricServiceBase;->handleError(JII)V
+PLcom/android/server/biometrics/BiometricServiceBase;->handleRemoved(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
 HSPLcom/android/server/biometrics/BiometricServiceBase;->hasPermission(Ljava/lang/String;)Z
-PLcom/android/server/biometrics/BiometricServiceBase;->isCurrentUserOrProfile(I)Z
+HPLcom/android/server/biometrics/BiometricServiceBase;->isCurrentUserOrProfile(I)Z
+PLcom/android/server/biometrics/BiometricServiceBase;->isForegroundActivity(II)Z
 HSPLcom/android/server/biometrics/BiometricServiceBase;->isKeyguard(Ljava/lang/String;)Z
 PLcom/android/server/biometrics/BiometricServiceBase;->isRestricted()Z
 HSPLcom/android/server/biometrics/BiometricServiceBase;->isWorkProfile(I)Z
-PLcom/android/server/biometrics/BiometricServiceBase;->lambda$addLockoutResetCallback$8$BiometricServiceBase(Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;)V
+HSPLcom/android/server/biometrics/BiometricServiceBase;->lambda$addLockoutResetCallback$8$BiometricServiceBase(Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;)V
 HPLcom/android/server/biometrics/BiometricServiceBase;->lambda$authenticateInternal$3$BiometricServiceBase(JLcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;Ljava/lang/String;)V
 HPLcom/android/server/biometrics/BiometricServiceBase;->lambda$cancelAuthenticationInternal$4$BiometricServiceBase(Landroid/os/IBinder;Z)V
-PLcom/android/server/biometrics/BiometricServiceBase;->lambda$enumerateInternal$7$BiometricServiceBase(Lcom/android/server/biometrics/EnumerateClient;)V
-PLcom/android/server/biometrics/BiometricServiceBase;->lambda$setActiveUserInternal$5$BiometricServiceBase(I)V
+PLcom/android/server/biometrics/BiometricServiceBase;->lambda$cancelEnrollmentInternal$2$BiometricServiceBase(Landroid/os/IBinder;)V
+PLcom/android/server/biometrics/BiometricServiceBase;->lambda$enrollInternal$1$BiometricServiceBase(Lcom/android/server/biometrics/BiometricServiceBase$EnrollClientImpl;)V
+HSPLcom/android/server/biometrics/BiometricServiceBase;->lambda$enumerateInternal$7$BiometricServiceBase(Lcom/android/server/biometrics/EnumerateClient;)V
+PLcom/android/server/biometrics/BiometricServiceBase;->lambda$removeInternal$6$BiometricServiceBase(Lcom/android/server/biometrics/RemovalClient;)V
+PLcom/android/server/biometrics/BiometricServiceBase;->lambda$serviceDied$0$BiometricServiceBase()V
+HPLcom/android/server/biometrics/BiometricServiceBase;->lambda$setActiveUserInternal$5$BiometricServiceBase(I)V
 HSPLcom/android/server/biometrics/BiometricServiceBase;->listenForUserSwitches()V
 HSPLcom/android/server/biometrics/BiometricServiceBase;->loadAuthenticatorIds()V
-PLcom/android/server/biometrics/BiometricServiceBase;->notifyLockoutResetMonitors()V
+HSPLcom/android/server/biometrics/BiometricServiceBase;->notifyLockoutResetMonitors()V
 HSPLcom/android/server/biometrics/BiometricServiceBase;->onStart()V
-PLcom/android/server/biometrics/BiometricServiceBase;->removeClient(Lcom/android/server/biometrics/ClientMonitor;)V
-PLcom/android/server/biometrics/BiometricServiceBase;->startAuthentication(Lcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;Ljava/lang/String;)V
-PLcom/android/server/biometrics/BiometricServiceBase;->startCleanupUnknownHALTemplates()V
-PLcom/android/server/biometrics/BiometricServiceBase;->startClient(Lcom/android/server/biometrics/ClientMonitor;Z)V
-PLcom/android/server/biometrics/BiometricServiceBase;->startCurrentClient(I)V
+HSPLcom/android/server/biometrics/BiometricServiceBase;->removeClient(Lcom/android/server/biometrics/ClientMonitor;)V
+PLcom/android/server/biometrics/BiometricServiceBase;->removeInternal(Lcom/android/server/biometrics/RemovalClient;)V
+PLcom/android/server/biometrics/BiometricServiceBase;->removeLockoutResetCallback(Lcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;)V
+PLcom/android/server/biometrics/BiometricServiceBase;->serviceDied(J)V
+PLcom/android/server/biometrics/BiometricServiceBase;->setActiveUserInternal(I)V
+HPLcom/android/server/biometrics/BiometricServiceBase;->startAuthentication(Lcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;Ljava/lang/String;)V
+HSPLcom/android/server/biometrics/BiometricServiceBase;->startCleanupUnknownHALTemplates()V
+HSPLcom/android/server/biometrics/BiometricServiceBase;->startClient(Lcom/android/server/biometrics/ClientMonitor;Z)V
+HSPLcom/android/server/biometrics/BiometricServiceBase;->startCurrentClient(I)V
+PLcom/android/server/biometrics/BiometricServiceBase;->userActivity()V
 HSPLcom/android/server/biometrics/BiometricStrengthController;-><clinit>()V
 HSPLcom/android/server/biometrics/BiometricStrengthController;-><init>(Lcom/android/server/biometrics/BiometricService;)V
 HSPLcom/android/server/biometrics/BiometricStrengthController;->getIdToStrengthMap()Ljava/util/Map;
 HSPLcom/android/server/biometrics/BiometricStrengthController;->startListening()V
 HSPLcom/android/server/biometrics/BiometricStrengthController;->updateStrengths()V
 HSPLcom/android/server/biometrics/BiometricUserState$1;-><init>(Lcom/android/server/biometrics/BiometricUserState;)V
+PLcom/android/server/biometrics/BiometricUserState$1;->run()V
 HSPLcom/android/server/biometrics/BiometricUserState;-><init>(Landroid/content/Context;I)V
+PLcom/android/server/biometrics/BiometricUserState;->addBiometric(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;)V
 HSPLcom/android/server/biometrics/BiometricUserState;->getBiometrics()Ljava/util/List;
 HSPLcom/android/server/biometrics/BiometricUserState;->getFileForUser(I)Ljava/io/File;
+PLcom/android/server/biometrics/BiometricUserState;->getUniqueName()Ljava/lang/String;
+PLcom/android/server/biometrics/BiometricUserState;->isUnique(Ljava/lang/String;)Z
 HSPLcom/android/server/biometrics/BiometricUserState;->parseStateLocked(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/biometrics/BiometricUserState;->readStateSyncLocked()V
+PLcom/android/server/biometrics/BiometricUserState;->removeBiometric(I)V
+PLcom/android/server/biometrics/BiometricUserState;->renameBiometric(ILjava/lang/CharSequence;)V
+PLcom/android/server/biometrics/BiometricUserState;->scheduleWriteStateLocked()V
 HSPLcom/android/server/biometrics/ClientMonitor;-><clinit>()V
 HSPLcom/android/server/biometrics/ClientMonitor;-><init>(Landroid/content/Context;Lcom/android/server/biometrics/Constants;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;IIZLjava/lang/String;I)V
+PLcom/android/server/biometrics/ClientMonitor;->binderDied()V
 HPLcom/android/server/biometrics/ClientMonitor;->blacklistContains(II)Z
-HPLcom/android/server/biometrics/ClientMonitor;->destroy()V
-PLcom/android/server/biometrics/ClientMonitor;->finalize()V
+HSPLcom/android/server/biometrics/ClientMonitor;->destroy()V
+HPLcom/android/server/biometrics/ClientMonitor;->finalize()V
+PLcom/android/server/biometrics/ClientMonitor;->getAcquireIgnorelist()[I
+PLcom/android/server/biometrics/ClientMonitor;->getAcquireVendorIgnorelist()[I
 PLcom/android/server/biometrics/ClientMonitor;->getContext()Landroid/content/Context;
-PLcom/android/server/biometrics/ClientMonitor;->getCookie()I
-PLcom/android/server/biometrics/ClientMonitor;->getDaemonWrapper()Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;
+HSPLcom/android/server/biometrics/ClientMonitor;->getCookie()I
+HSPLcom/android/server/biometrics/ClientMonitor;->getDaemonWrapper()Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;
 PLcom/android/server/biometrics/ClientMonitor;->getGroupId()I
 PLcom/android/server/biometrics/ClientMonitor;->getHalDeviceId()J
 PLcom/android/server/biometrics/ClientMonitor;->getIsRestricted()Z
 PLcom/android/server/biometrics/ClientMonitor;->getListener()Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;
 PLcom/android/server/biometrics/ClientMonitor;->getLogTag()Ljava/lang/String;
-PLcom/android/server/biometrics/ClientMonitor;->getOwnerString()Ljava/lang/String;
-PLcom/android/server/biometrics/ClientMonitor;->getTargetUserId()I
+HSPLcom/android/server/biometrics/ClientMonitor;->getOwnerString()Ljava/lang/String;
+HSPLcom/android/server/biometrics/ClientMonitor;->getTargetUserId()I
 PLcom/android/server/biometrics/ClientMonitor;->getToken()Landroid/os/IBinder;
+PLcom/android/server/biometrics/ClientMonitor;->isAlreadyDone()Z
 HPLcom/android/server/biometrics/ClientMonitor;->onAcquired(II)Z
 HPLcom/android/server/biometrics/ClientMonitor;->onError(JII)Z
 PLcom/android/server/biometrics/ClientMonitor;->vibrateError()V
 PLcom/android/server/biometrics/ClientMonitor;->vibrateSuccess()V
+PLcom/android/server/biometrics/EnrollClient;-><init>(Landroid/content/Context;Lcom/android/server/biometrics/Constants;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;II[BZLjava/lang/String;Lcom/android/server/biometrics/BiometricUtils;[II)V
+PLcom/android/server/biometrics/EnrollClient;->onEnrollResult(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)Z
+PLcom/android/server/biometrics/EnrollClient;->sendEnrollResult(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)Z
+PLcom/android/server/biometrics/EnrollClient;->start()I
+PLcom/android/server/biometrics/EnrollClient;->statsAction()I
 HSPLcom/android/server/biometrics/EnumerateClient;-><init>(Landroid/content/Context;Lcom/android/server/biometrics/Constants;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;IIZLjava/lang/String;)V
-PLcom/android/server/biometrics/EnumerateClient;->start()I
+HSPLcom/android/server/biometrics/EnumerateClient;->start()I
 HSPLcom/android/server/biometrics/LoggableMonitor;-><init>()V
+PLcom/android/server/biometrics/LoggableMonitor;->isCryptoOperation()Z
 HPLcom/android/server/biometrics/LoggableMonitor;->logOnAcquired(Landroid/content/Context;III)V
 HPLcom/android/server/biometrics/LoggableMonitor;->logOnAuthenticated(Landroid/content/Context;ZZIZ)V
+PLcom/android/server/biometrics/LoggableMonitor;->logOnEnrolled(IJZ)V
 HPLcom/android/server/biometrics/LoggableMonitor;->logOnError(Landroid/content/Context;III)V
+PLcom/android/server/biometrics/LoggableMonitor;->statsClient()I
+PLcom/android/server/biometrics/RemovalClient;-><init>(Landroid/content/Context;Lcom/android/server/biometrics/Constants;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;IIIZLjava/lang/String;Lcom/android/server/biometrics/BiometricUtils;)V
+PLcom/android/server/biometrics/RemovalClient;->onRemoved(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)Z
+PLcom/android/server/biometrics/RemovalClient;->sendRemoved(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)Z
+PLcom/android/server/biometrics/RemovalClient;->start()I
 HSPLcom/android/server/biometrics/SensorConfig;-><init>(Ljava/lang/String;)V
-PLcom/android/server/biometrics/Utils;->biometricConstantsToBiometricManager(I)I
+HPLcom/android/server/biometrics/Utils;->biometricConstantsToBiometricManager(I)I
+PLcom/android/server/biometrics/Utils;->combineAuthenticatorBundles(Landroid/os/Bundle;)V
+PLcom/android/server/biometrics/Utils;->getAuthenticationTypeForResult(I)I
 PLcom/android/server/biometrics/Utils;->getPublicBiometricStrength(I)I
-PLcom/android/server/biometrics/Utils;->getPublicBiometricStrength(Landroid/os/Bundle;)I
+HPLcom/android/server/biometrics/Utils;->getPublicBiometricStrength(Landroid/os/Bundle;)I
 PLcom/android/server/biometrics/Utils;->isAtLeastStrength(II)Z
 PLcom/android/server/biometrics/Utils;->isBiometricAllowed(Landroid/os/Bundle;)Z
 HPLcom/android/server/biometrics/Utils;->isDebugEnabled(Landroid/content/Context;I)Z
 PLcom/android/server/biometrics/Utils;->isDeviceCredentialAllowed(I)Z
 PLcom/android/server/biometrics/Utils;->isDeviceCredentialAllowed(Landroid/os/Bundle;)Z
-PLcom/android/server/biometrics/Utils;->isValidAuthenticatorConfig(I)Z
-PLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$7DzDQwoPfgYi40WuB8Xi0hA3qVQ;-><init>(Lcom/android/server/biometrics/face/FaceService$1;JII)V
+HPLcom/android/server/biometrics/Utils;->isValidAuthenticatorConfig(I)Z
+PLcom/android/server/biometrics/Utils;->isValidAuthenticatorConfig(Landroid/os/Bundle;)Z
+HPLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$7DzDQwoPfgYi40WuB8Xi0hA3qVQ;-><init>(Lcom/android/server/biometrics/face/FaceService$1;JII)V
 HPLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$7DzDQwoPfgYi40WuB8Xi0hA3qVQ;->run()V
-PLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$81olYJI06zsG8LvXV_gD76jaNyg;-><init>(Lcom/android/server/biometrics/face/FaceService$1;Ljava/util/ArrayList;J)V
-PLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$81olYJI06zsG8LvXV_gD76jaNyg;->run()V
+HSPLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$81olYJI06zsG8LvXV_gD76jaNyg;-><init>(Lcom/android/server/biometrics/face/FaceService$1;Ljava/util/ArrayList;J)V
+HSPLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$81olYJI06zsG8LvXV_gD76jaNyg;->run()V
+PLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$Dg7kqAVO92T8FbodjRCfn9vSkto;-><init>(Lcom/android/server/biometrics/face/FaceService$1;IIJI)V
+PLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$Dg7kqAVO92T8FbodjRCfn9vSkto;->run()V
 PLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$GcU4ZG1fdDLhKvSxuMwfPargEnI;-><init>(Lcom/android/server/biometrics/face/FaceService$1;IJLjava/util/ArrayList;)V
-PLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$GcU4ZG1fdDLhKvSxuMwfPargEnI;->run()V
+HPLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$GcU4ZG1fdDLhKvSxuMwfPargEnI;->run()V
 HSPLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$OiHHyHFXrIcrZYUfSsf-E2as1qE;-><init>(Lcom/android/server/biometrics/face/FaceService$1;J)V
-PLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$OiHHyHFXrIcrZYUfSsf-E2as1qE;->run()V
+HSPLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$OiHHyHFXrIcrZYUfSsf-E2as1qE;->run()V
+PLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$jaJb2y4UkoXOtV5wJimfIPNA_PM;-><init>(Lcom/android/server/biometrics/face/FaceService$1;Ljava/util/ArrayList;J)V
+PLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$jaJb2y4UkoXOtV5wJimfIPNA_PM;->run()V
 PLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$s3kBxUsmTmDZC9YLbT5yPR3KOWo;-><init>(Lcom/android/server/biometrics/face/FaceService$1;JII)V
-PLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$s3kBxUsmTmDZC9YLbT5yPR3KOWo;->run()V
+HPLcom/android/server/biometrics/face/-$$Lambda$FaceService$1$s3kBxUsmTmDZC9YLbT5yPR3KOWo;->run()V
 HSPLcom/android/server/biometrics/face/-$$Lambda$FaceService$A0dfsVDvPu3BDJsON7widXUriSs;-><init>(Lcom/android/server/biometrics/face/FaceService;)V
 HSPLcom/android/server/biometrics/face/-$$Lambda$FaceService$A0dfsVDvPu3BDJsON7widXUriSs;->run()V
+PLcom/android/server/biometrics/face/-$$Lambda$FaceService$FaceServiceWrapper$1ZJGnsaJl1du-I_XjU-JKzIy49Q;-><init>(Lcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;ILjava/lang/String;I[BZLandroid/hardware/face/IFaceServiceReceiver;)V
+PLcom/android/server/biometrics/face/-$$Lambda$FaceService$FaceServiceWrapper$1ZJGnsaJl1du-I_XjU-JKzIy49Q;->run()V
+PLcom/android/server/biometrics/face/-$$Lambda$FaceService$FaceServiceWrapper$6Efp5LtXdV1OgyOr4AaGf19hmLs;-><init>(Lcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;ILjava/lang/String;ILandroid/hardware/face/IFaceServiceReceiver;)V
+PLcom/android/server/biometrics/face/-$$Lambda$FaceService$FaceServiceWrapper$6Efp5LtXdV1OgyOr4AaGf19hmLs;->run()V
 PLcom/android/server/biometrics/face/-$$Lambda$FaceService$FaceServiceWrapper$kw0BBGgTrFveHiSJWRbNG8sygqA;-><init>(Lcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;[B)V
 PLcom/android/server/biometrics/face/-$$Lambda$FaceService$FaceServiceWrapper$kw0BBGgTrFveHiSJWRbNG8sygqA;->run()V
 PLcom/android/server/biometrics/face/-$$Lambda$FaceService$FaceServiceWrapper$oUY0TN9T4s4roMpe33Oc2nS7uzI;-><init>(Lcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;Landroid/os/IBinder;)V
 PLcom/android/server/biometrics/face/-$$Lambda$FaceService$FaceServiceWrapper$oUY0TN9T4s4roMpe33Oc2nS7uzI;->run()V
 HSPLcom/android/server/biometrics/face/-$$Lambda$FaceService$rveb67MoYJ0egfY6LL-l05KvUz8;-><init>(Lcom/android/server/biometrics/face/FaceService;)V
-PLcom/android/server/biometrics/face/-$$Lambda$FaceService$rveb67MoYJ0egfY6LL-l05KvUz8;->run()V
+HSPLcom/android/server/biometrics/face/-$$Lambda$FaceService$rveb67MoYJ0egfY6LL-l05KvUz8;->run()V
 HSPLcom/android/server/biometrics/face/FaceAuthenticator;-><init>(Landroid/hardware/face/IFaceService;)V
+PLcom/android/server/biometrics/face/FaceAuthenticator;->cancelAuthenticationFromService(Landroid/os/IBinder;Ljava/lang/String;IIIZ)V
 PLcom/android/server/biometrics/face/FaceAuthenticator;->hasEnrolledTemplates(ILjava/lang/String;)Z
 PLcom/android/server/biometrics/face/FaceAuthenticator;->isHardwareDetected(Ljava/lang/String;)Z
+PLcom/android/server/biometrics/face/FaceAuthenticator;->prepareForAuthentication(ZLandroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricServiceReceiverInternal;Ljava/lang/String;IIII)V
+PLcom/android/server/biometrics/face/FaceAuthenticator;->resetLockout([B)V
+PLcom/android/server/biometrics/face/FaceAuthenticator;->setActiveUser(I)V
+PLcom/android/server/biometrics/face/FaceAuthenticator;->startPreparedClient(I)V
 HSPLcom/android/server/biometrics/face/FaceConstants;-><init>()V
 PLcom/android/server/biometrics/face/FaceConstants;->acquireVendorCode()I
 PLcom/android/server/biometrics/face/FaceConstants;->actionBiometricAuth()I
+PLcom/android/server/biometrics/face/FaceConstants;->actionBiometricEnroll()I
 HPLcom/android/server/biometrics/face/FaceConstants;->logTag()Ljava/lang/String;
 PLcom/android/server/biometrics/face/FaceConstants;->tagAuthToken()Ljava/lang/String;
+PLcom/android/server/biometrics/face/FaceConstants;->tagHalDied()Ljava/lang/String;
 HSPLcom/android/server/biometrics/face/FaceService$1;-><init>(Lcom/android/server/biometrics/face/FaceService;)V
-PLcom/android/server/biometrics/face/FaceService$1;->lambda$onAcquired$1$FaceService$1(JII)V
+HPLcom/android/server/biometrics/face/FaceService$1;->lambda$onAcquired$1$FaceService$1(JII)V
 PLcom/android/server/biometrics/face/FaceService$1;->lambda$onAuthenticated$2$FaceService$1(IJLjava/util/ArrayList;)V
-PLcom/android/server/biometrics/face/FaceService$1;->lambda$onEnumerate$5$FaceService$1(Ljava/util/ArrayList;J)V
+PLcom/android/server/biometrics/face/FaceService$1;->lambda$onEnrollResult$0$FaceService$1(IIJI)V
+HSPLcom/android/server/biometrics/face/FaceService$1;->lambda$onEnumerate$5$FaceService$1(Ljava/util/ArrayList;J)V
 PLcom/android/server/biometrics/face/FaceService$1;->lambda$onError$3$FaceService$1(JII)V
-PLcom/android/server/biometrics/face/FaceService$1;->lambda$onLockoutChanged$6$FaceService$1(J)V
-PLcom/android/server/biometrics/face/FaceService$1;->onAcquired(JIII)V
+HSPLcom/android/server/biometrics/face/FaceService$1;->lambda$onLockoutChanged$6$FaceService$1(J)V
+PLcom/android/server/biometrics/face/FaceService$1;->lambda$onRemoved$4$FaceService$1(Ljava/util/ArrayList;J)V
+HPLcom/android/server/biometrics/face/FaceService$1;->onAcquired(JIII)V
 PLcom/android/server/biometrics/face/FaceService$1;->onAuthenticated(JIILjava/util/ArrayList;)V
-PLcom/android/server/biometrics/face/FaceService$1;->onEnumerate(JLjava/util/ArrayList;I)V
+HSPLcom/android/server/biometrics/face/FaceService$1;->onEnumerate(JLjava/util/ArrayList;I)V
 PLcom/android/server/biometrics/face/FaceService$1;->onError(JIII)V
 HSPLcom/android/server/biometrics/face/FaceService$1;->onLockoutChanged(J)V
 HSPLcom/android/server/biometrics/face/FaceService$2;-><init>(Lcom/android/server/biometrics/face/FaceService;)V
 PLcom/android/server/biometrics/face/FaceService$2;->authenticate(JI)I
 PLcom/android/server/biometrics/face/FaceService$2;->cancel()I
-PLcom/android/server/biometrics/face/FaceService$2;->enumerate()I
+PLcom/android/server/biometrics/face/FaceService$2;->enroll([BIILjava/util/ArrayList;)I
+HSPLcom/android/server/biometrics/face/FaceService$2;->enumerate()I
+PLcom/android/server/biometrics/face/FaceService$2;->remove(II)I
 HPLcom/android/server/biometrics/face/FaceService$2;->resetLockout([B)V
-PLcom/android/server/biometrics/face/FaceService$AuthenticationEvent;-><init>(JJZII)V
+HPLcom/android/server/biometrics/face/FaceService$AuthenticationEvent;-><init>(JJZII)V
+HPLcom/android/server/biometrics/face/FaceService$AuthenticationEvent;-><init>(JJZIII)V
 PLcom/android/server/biometrics/face/FaceService$AuthenticationEvent;->access$000(Lcom/android/server/biometrics/face/FaceService$AuthenticationEvent;)Z
 PLcom/android/server/biometrics/face/FaceService$AuthenticationEvent;->access$100(Lcom/android/server/biometrics/face/FaceService$AuthenticationEvent;)J
 PLcom/android/server/biometrics/face/FaceService$AuthenticationEvent;->access$200(Lcom/android/server/biometrics/face/FaceService$AuthenticationEvent;)I
 HPLcom/android/server/biometrics/face/FaceService$AuthenticationEvent;->toString(Landroid/content/Context;)Ljava/lang/String;
-PLcom/android/server/biometrics/face/FaceService$FaceAuthClient;-><init>(Lcom/android/server/biometrics/face/FaceService;Landroid/content/Context;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;IIJZLjava/lang/String;IZ)V
+PLcom/android/server/biometrics/face/FaceService$BiometricPromptServiceListenerImpl;-><init>(Lcom/android/server/biometrics/face/FaceService;Landroid/hardware/biometrics/IBiometricServiceReceiverInternal;)V
+PLcom/android/server/biometrics/face/FaceService$BiometricPromptServiceListenerImpl;->onAcquired(JII)V
+PLcom/android/server/biometrics/face/FaceService$BiometricPromptServiceListenerImpl;->onError(JIII)V
+HPLcom/android/server/biometrics/face/FaceService$FaceAuthClient;-><init>(Lcom/android/server/biometrics/face/FaceService;Landroid/content/Context;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;IIJZLjava/lang/String;IZ)V
 HPLcom/android/server/biometrics/face/FaceService$FaceAuthClient;->getAcquireIgnorelist()[I
 HPLcom/android/server/biometrics/face/FaceService$FaceAuthClient;->onAcquired(II)Z
-PLcom/android/server/biometrics/face/FaceService$FaceAuthClient;->onAuthenticated(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;ZLjava/util/ArrayList;)Z
+HPLcom/android/server/biometrics/face/FaceService$FaceAuthClient;->onAuthenticated(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;ZLjava/util/ArrayList;)Z
 HPLcom/android/server/biometrics/face/FaceService$FaceAuthClient;->onError(JII)Z
 PLcom/android/server/biometrics/face/FaceService$FaceAuthClient;->shouldFrameworkHandleLockout()Z
-PLcom/android/server/biometrics/face/FaceService$FaceAuthClient;->statsModality()I
+HPLcom/android/server/biometrics/face/FaceService$FaceAuthClient;->statsModality()I
 PLcom/android/server/biometrics/face/FaceService$FaceAuthClient;->wasUserDetected()Z
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper$1;-><init>(Lcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;Landroid/content/Context;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;II[BZLjava/lang/String;[II)V
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper$1;->getAcquireIgnorelist()[I
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper$1;->getAcquireVendorIgnorelist()[I
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper$1;->shouldVibrate()Z
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper$1;->statsModality()I
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper$2;-><init>(Lcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;Landroid/content/Context;Lcom/android/server/biometrics/Constants;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;IIIZLjava/lang/String;Lcom/android/server/biometrics/BiometricUtils;)V
 HSPLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;-><init>(Lcom/android/server/biometrics/face/FaceService;)V
 HSPLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;-><init>(Lcom/android/server/biometrics/face/FaceService;Lcom/android/server/biometrics/face/FaceService$1;)V
 HSPLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->addLockoutResetCallback(Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;)V
 HPLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->authenticate(Landroid/os/IBinder;JILandroid/hardware/face/IFaceServiceReceiver;ILjava/lang/String;)V
-PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->cancelAuthentication(Landroid/os/IBinder;Ljava/lang/String;)V
+HPLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->cancelAuthentication(Landroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->cancelAuthenticationFromService(Landroid/os/IBinder;Ljava/lang/String;IIIZ)V
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->cancelEnrollment(Landroid/os/IBinder;)V
 PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->enroll(ILandroid/os/IBinder;[BLandroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;[I)V
 PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->generateChallenge(Landroid/os/IBinder;)J
-PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->getAuthenticatorId(Ljava/lang/String;)J
+HPLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->getAuthenticatorId(Ljava/lang/String;)J
 HPLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->getEnrolledFaces(ILjava/lang/String;)Ljava/util/List;
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->getFeature(IILandroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->getFirstTemplateForUser(I)I
 HSPLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->hasEnrolledFaces(ILjava/lang/String;)Z
 HSPLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->isHardwareDetected(Ljava/lang/String;)Z
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->lambda$getFeature$3$FaceService$FaceServiceWrapper(ILjava/lang/String;ILandroid/hardware/face/IFaceServiceReceiver;)V
 PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->lambda$resetLockout$1$FaceService$FaceServiceWrapper([B)V
 PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->lambda$revokeChallenge$0$FaceService$FaceServiceWrapper(Landroid/os/IBinder;)V
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->lambda$setFeature$2$FaceService$FaceServiceWrapper(ILjava/lang/String;I[BZLandroid/hardware/face/IFaceServiceReceiver;)V
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->prepareForAuthentication(ZLandroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricServiceReceiverInternal;Ljava/lang/String;IIII)V
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->remove(Landroid/os/IBinder;IILandroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->resetLockout([B)V
 PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->revokeChallenge(Landroid/os/IBinder;)I
-PLcom/android/server/biometrics/face/FaceService$ServiceListenerImpl;-><init>(Lcom/android/server/biometrics/face/FaceService;Landroid/hardware/face/IFaceServiceReceiver;)V
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->setActiveUser(I)V
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->setFeature(IIZ[BLandroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;->startPreparedClient(I)V
+HPLcom/android/server/biometrics/face/FaceService$ServiceListenerImpl;-><init>(Lcom/android/server/biometrics/face/FaceService;Landroid/hardware/face/IFaceServiceReceiver;)V
 PLcom/android/server/biometrics/face/FaceService$ServiceListenerImpl;->onAcquired(JII)V
 PLcom/android/server/biometrics/face/FaceService$ServiceListenerImpl;->onAuthenticationFailed(J)V
 PLcom/android/server/biometrics/face/FaceService$ServiceListenerImpl;->onAuthenticationSucceeded(JLandroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
-PLcom/android/server/biometrics/face/FaceService$ServiceListenerImpl;->onError(JIII)V
+PLcom/android/server/biometrics/face/FaceService$ServiceListenerImpl;->onEnrollResult(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+HPLcom/android/server/biometrics/face/FaceService$ServiceListenerImpl;->onError(JIII)V
+PLcom/android/server/biometrics/face/FaceService$ServiceListenerImpl;->onRemoved(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
 HSPLcom/android/server/biometrics/face/FaceService$UsageStats;-><init>(Lcom/android/server/biometrics/face/FaceService;Landroid/content/Context;)V
 HPLcom/android/server/biometrics/face/FaceService$UsageStats;->addEvent(Lcom/android/server/biometrics/face/FaceService$AuthenticationEvent;)V
-PLcom/android/server/biometrics/face/FaceService$UsageStats;->print(Ljava/io/PrintWriter;)V
+HPLcom/android/server/biometrics/face/FaceService$UsageStats;->print(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/biometrics/face/FaceService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/biometrics/face/FaceService;->access$1000(Lcom/android/server/biometrics/face/FaceService;Landroid/os/IBinder;)J
 HPLcom/android/server/biometrics/face/FaceService;->access$10001(Lcom/android/server/biometrics/face/FaceService;JII)V
+PLcom/android/server/biometrics/face/FaceService;->access$10101(Lcom/android/server/biometrics/face/FaceService;Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+PLcom/android/server/biometrics/face/FaceService;->access$10200(Lcom/android/server/biometrics/face/FaceService;)Ljava/util/Map;
 PLcom/android/server/biometrics/face/FaceService;->access$1100(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
 PLcom/android/server/biometrics/face/FaceService;->access$1200(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+PLcom/android/server/biometrics/face/FaceService;->access$1300(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService;->access$1400(Lcom/android/server/biometrics/face/FaceService;)Z
 PLcom/android/server/biometrics/face/FaceService;->access$1500(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;
-PLcom/android/server/biometrics/face/FaceService;->access$2400(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
-PLcom/android/server/biometrics/face/FaceService;->access$2500(Lcom/android/server/biometrics/face/FaceService;)Z
+PLcom/android/server/biometrics/face/FaceService;->access$1600(Lcom/android/server/biometrics/face/FaceService;)J
+PLcom/android/server/biometrics/face/FaceService;->access$1700(Lcom/android/server/biometrics/face/FaceService;)I
+PLcom/android/server/biometrics/face/FaceService;->access$1800(Lcom/android/server/biometrics/face/FaceService;)[I
+PLcom/android/server/biometrics/face/FaceService;->access$1900(Lcom/android/server/biometrics/face/FaceService;)[I
+PLcom/android/server/biometrics/face/FaceService;->access$2000(Lcom/android/server/biometrics/face/FaceService;)I
+PLcom/android/server/biometrics/face/FaceService;->access$2100(Lcom/android/server/biometrics/face/FaceService;Lcom/android/server/biometrics/BiometricServiceBase$EnrollClientImpl;I)V
+PLcom/android/server/biometrics/face/FaceService;->access$2200(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService;->access$2300(Lcom/android/server/biometrics/face/FaceService;Landroid/os/IBinder;)V
+HPLcom/android/server/biometrics/face/FaceService;->access$2400(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
+HPLcom/android/server/biometrics/face/FaceService;->access$2500(Lcom/android/server/biometrics/face/FaceService;)Z
 PLcom/android/server/biometrics/face/FaceService;->access$2600(Lcom/android/server/biometrics/face/FaceService;)J
 PLcom/android/server/biometrics/face/FaceService;->access$2700(Lcom/android/server/biometrics/face/FaceService;)I
-PLcom/android/server/biometrics/face/FaceService;->access$2800(Lcom/android/server/biometrics/face/FaceService;Lcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;JLjava/lang/String;)V
+HPLcom/android/server/biometrics/face/FaceService;->access$2800(Lcom/android/server/biometrics/face/FaceService;Lcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;JLjava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService;->access$2900(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
 PLcom/android/server/biometrics/face/FaceService;->access$300(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/face/FaceService$UsageStats;
-PLcom/android/server/biometrics/face/FaceService;->access$3500(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
-PLcom/android/server/biometrics/face/FaceService;->access$3600(Lcom/android/server/biometrics/face/FaceService;Landroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService;->access$3000(Lcom/android/server/biometrics/face/FaceService;)J
+PLcom/android/server/biometrics/face/FaceService;->access$3100(Lcom/android/server/biometrics/face/FaceService;)I
+PLcom/android/server/biometrics/face/FaceService;->access$3200(Lcom/android/server/biometrics/face/FaceService;Lcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;JLjava/lang/String;III)V
+PLcom/android/server/biometrics/face/FaceService;->access$3300(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService;->access$3400(Lcom/android/server/biometrics/face/FaceService;I)V
+HPLcom/android/server/biometrics/face/FaceService;->access$3500(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
+HPLcom/android/server/biometrics/face/FaceService;->access$3600(Lcom/android/server/biometrics/face/FaceService;Landroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService;->access$3700(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService;->access$3800(Lcom/android/server/biometrics/face/FaceService;Landroid/os/IBinder;Ljava/lang/String;IIIZ)V
+PLcom/android/server/biometrics/face/FaceService;->access$3900(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService;->access$400(Lcom/android/server/biometrics/face/FaceService;)[I
+PLcom/android/server/biometrics/face/FaceService;->access$4000(Lcom/android/server/biometrics/face/FaceService;I)V
+PLcom/android/server/biometrics/face/FaceService;->access$4100(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService;->access$4200(Lcom/android/server/biometrics/face/FaceService;)Z
+PLcom/android/server/biometrics/face/FaceService;->access$4300(Lcom/android/server/biometrics/face/FaceService;)J
+PLcom/android/server/biometrics/face/FaceService;->access$4400(Lcom/android/server/biometrics/face/FaceService;Lcom/android/server/biometrics/RemovalClient;)V
 HSPLcom/android/server/biometrics/face/FaceService;->access$4900(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
-PLcom/android/server/biometrics/face/FaceService;->access$500(Lcom/android/server/biometrics/face/FaceService;)[I
+HPLcom/android/server/biometrics/face/FaceService;->access$500(Lcom/android/server/biometrics/face/FaceService;)[I
 HSPLcom/android/server/biometrics/face/FaceService;->access$5001(Lcom/android/server/biometrics/face/FaceService;Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;)V
+PLcom/android/server/biometrics/face/FaceService;->access$5100(Lcom/android/server/biometrics/face/FaceService;Ljava/io/FileDescriptor;[Ljava/lang/String;)V
 PLcom/android/server/biometrics/face/FaceService;->access$5200(Lcom/android/server/biometrics/face/FaceService;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/biometrics/face/FaceService;->access$5300(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
 HSPLcom/android/server/biometrics/face/FaceService;->access$5400(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;ZIII)Z
@@ -7276,156 +11773,481 @@
 PLcom/android/server/biometrics/face/FaceService;->access$6200(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;ZIII)Z
 HSPLcom/android/server/biometrics/face/FaceService;->access$6300(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
 HSPLcom/android/server/biometrics/face/FaceService;->access$6400(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;ZIII)Z
-PLcom/android/server/biometrics/face/FaceService;->access$6500(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)J
+HPLcom/android/server/biometrics/face/FaceService;->access$6500(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)J
+PLcom/android/server/biometrics/face/FaceService;->access$6600(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService;->access$6700(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+PLcom/android/server/biometrics/face/FaceService;->access$6800(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService;->access$6900(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+PLcom/android/server/biometrics/face/FaceService;->access$7000(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/face/FaceService;->access$7100(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+PLcom/android/server/biometrics/face/FaceService;->access$7300(Lcom/android/server/biometrics/face/FaceService;)Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
+PLcom/android/server/biometrics/face/FaceService;->access$7302(Lcom/android/server/biometrics/face/FaceService;Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;)Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
+PLcom/android/server/biometrics/face/FaceService;->access$7400(Lcom/android/server/biometrics/face/FaceService;)I
+PLcom/android/server/biometrics/face/FaceService;->access$7500(Lcom/android/server/biometrics/face/FaceService;)I
+PLcom/android/server/biometrics/face/FaceService;->access$7600(Lcom/android/server/biometrics/face/FaceService;)I
+PLcom/android/server/biometrics/face/FaceService;->access$7700(Lcom/android/server/biometrics/face/FaceService;)I
 PLcom/android/server/biometrics/face/FaceService;->access$7800(Lcom/android/server/biometrics/face/FaceService;)I
 PLcom/android/server/biometrics/face/FaceService;->access$7900(Lcom/android/server/biometrics/face/FaceService;)I
+PLcom/android/server/biometrics/face/FaceService;->access$800(Lcom/android/server/biometrics/face/FaceService;)Landroid/app/NotificationManager;
 PLcom/android/server/biometrics/face/FaceService;->access$8000(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/ClientMonitor;
 PLcom/android/server/biometrics/face/FaceService;->access$8100(Lcom/android/server/biometrics/face/FaceService;Landroid/os/IBinder;)I
 PLcom/android/server/biometrics/face/FaceService;->access$8202(Lcom/android/server/biometrics/face/FaceService;Z)Z
 PLcom/android/server/biometrics/face/FaceService;->access$8400(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
 PLcom/android/server/biometrics/face/FaceService;->access$8500(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
 PLcom/android/server/biometrics/face/FaceService;->access$8600(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
-PLcom/android/server/biometrics/face/FaceService;->access$8800(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+HSPLcom/android/server/biometrics/face/FaceService;->access$8800(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
 HSPLcom/android/server/biometrics/face/FaceService;->access$8902(Lcom/android/server/biometrics/face/FaceService;I)I
 PLcom/android/server/biometrics/face/FaceService;->access$900(Lcom/android/server/biometrics/face/FaceService;Ljava/lang/String;)V
 HSPLcom/android/server/biometrics/face/FaceService;->access$9000(Lcom/android/server/biometrics/face/FaceService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
-PLcom/android/server/biometrics/face/FaceService;->access$9100(Lcom/android/server/biometrics/face/FaceService;)V
-PLcom/android/server/biometrics/face/FaceService;->access$9201(Lcom/android/server/biometrics/face/FaceService;Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+HSPLcom/android/server/biometrics/face/FaceService;->access$9100(Lcom/android/server/biometrics/face/FaceService;)V
+HSPLcom/android/server/biometrics/face/FaceService;->access$9201(Lcom/android/server/biometrics/face/FaceService;Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+PLcom/android/server/biometrics/face/FaceService;->access$9301(Lcom/android/server/biometrics/face/FaceService;Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+PLcom/android/server/biometrics/face/FaceService;->access$9401(Lcom/android/server/biometrics/face/FaceService;Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
 PLcom/android/server/biometrics/face/FaceService;->access$9601(Lcom/android/server/biometrics/face/FaceService;JII)V
+PLcom/android/server/biometrics/face/FaceService;->access$9702(Lcom/android/server/biometrics/face/FaceService;J)J
+PLcom/android/server/biometrics/face/FaceService;->access$9802(Lcom/android/server/biometrics/face/FaceService;I)I
 PLcom/android/server/biometrics/face/FaceService;->access$9901(Lcom/android/server/biometrics/face/FaceService;Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;Ljava/util/ArrayList;)V
 PLcom/android/server/biometrics/face/FaceService;->checkAppOps(ILjava/lang/String;)Z
 HSPLcom/android/server/biometrics/face/FaceService;->checkUseBiometricPermission()V
+PLcom/android/server/biometrics/face/FaceService;->dumpHal(Ljava/io/FileDescriptor;[Ljava/lang/String;)V
 PLcom/android/server/biometrics/face/FaceService;->dumpInternal(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/biometrics/face/FaceService;->getBiometricUtils()Lcom/android/server/biometrics/BiometricUtils;
 HSPLcom/android/server/biometrics/face/FaceService;->getConstants()Lcom/android/server/biometrics/Constants;
 HSPLcom/android/server/biometrics/face/FaceService;->getDaemonWrapper()Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;
 HSPLcom/android/server/biometrics/face/FaceService;->getEnrolledTemplates(I)Ljava/util/List;
 HSPLcom/android/server/biometrics/face/FaceService;->getFaceDaemon()Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
-PLcom/android/server/biometrics/face/FaceService;->getHalDeviceId()J
+HSPLcom/android/server/biometrics/face/FaceService;->getHalDeviceId()J
 HPLcom/android/server/biometrics/face/FaceService;->getLockoutMode()I
 HSPLcom/android/server/biometrics/face/FaceService;->getManageBiometricPermission()Ljava/lang/String;
 HSPLcom/android/server/biometrics/face/FaceService;->getTag()Ljava/lang/String;
 HSPLcom/android/server/biometrics/face/FaceService;->hasEnrolledBiometrics(I)Z
+PLcom/android/server/biometrics/face/FaceService;->hasReachedEnrollmentLimit(I)Z
 HSPLcom/android/server/biometrics/face/FaceService;->lambda$onStart$0$FaceService()V
-PLcom/android/server/biometrics/face/FaceService;->lambda$rveb67MoYJ0egfY6LL-l05KvUz8(Lcom/android/server/biometrics/face/FaceService;)Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
-HPLcom/android/server/biometrics/face/FaceService;->notifyClientActiveCallbacks(Z)V
+HSPLcom/android/server/biometrics/face/FaceService;->lambda$rveb67MoYJ0egfY6LL-l05KvUz8(Lcom/android/server/biometrics/face/FaceService;)Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
+HSPLcom/android/server/biometrics/face/FaceService;->notifyClientActiveCallbacks(Z)V
 HSPLcom/android/server/biometrics/face/FaceService;->onStart()V
-HPLcom/android/server/biometrics/face/FaceService;->removeClient(Lcom/android/server/biometrics/ClientMonitor;)V
+HSPLcom/android/server/biometrics/face/FaceService;->removeClient(Lcom/android/server/biometrics/ClientMonitor;)V
+PLcom/android/server/biometrics/face/FaceService;->serviceDied(J)V
 PLcom/android/server/biometrics/face/FaceService;->startGenerateChallenge(Landroid/os/IBinder;)J
 PLcom/android/server/biometrics/face/FaceService;->startRevokeChallenge(Landroid/os/IBinder;)I
-PLcom/android/server/biometrics/face/FaceService;->statsModality()I
+HPLcom/android/server/biometrics/face/FaceService;->statsModality()I
 HSPLcom/android/server/biometrics/face/FaceService;->updateActiveGroup(ILjava/lang/String;)V
 HSPLcom/android/server/biometrics/face/FaceUserState;-><init>(Landroid/content/Context;I)V
+PLcom/android/server/biometrics/face/FaceUserState;->addBiometric(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;)V
+PLcom/android/server/biometrics/face/FaceUserState;->doWriteState()V
 HSPLcom/android/server/biometrics/face/FaceUserState;->getBiometricFile()Ljava/lang/String;
 HSPLcom/android/server/biometrics/face/FaceUserState;->getBiometricsTag()Ljava/lang/String;
 HSPLcom/android/server/biometrics/face/FaceUserState;->getCopy(Ljava/util/ArrayList;)Ljava/util/ArrayList;
+PLcom/android/server/biometrics/face/FaceUserState;->getNameTemplateResource()I
 HSPLcom/android/server/biometrics/face/FaceUserState;->parseBiometricsLocked(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/biometrics/face/FaceUtils;-><clinit>()V
 HSPLcom/android/server/biometrics/face/FaceUtils;-><init>()V
+PLcom/android/server/biometrics/face/FaceUtils;->addBiometricForUser(Landroid/content/Context;ILandroid/hardware/biometrics/BiometricAuthenticator$Identifier;)V
 HSPLcom/android/server/biometrics/face/FaceUtils;->getBiometricsForUser(Landroid/content/Context;I)Ljava/util/List;
 HSPLcom/android/server/biometrics/face/FaceUtils;->getInstance()Lcom/android/server/biometrics/face/FaceUtils;
 HSPLcom/android/server/biometrics/face/FaceUtils;->getStateForUser(Landroid/content/Context;I)Lcom/android/server/biometrics/face/FaceUserState;
+PLcom/android/server/biometrics/face/FaceUtils;->getUniqueName(Landroid/content/Context;I)Ljava/lang/CharSequence;
+PLcom/android/server/biometrics/face/FaceUtils;->removeBiometricForUser(Landroid/content/Context;II)V
+HSPLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$3I9ge5BoesXZUovbayCOCR754fc;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService$1;IIJI)V
+PLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$3I9ge5BoesXZUovbayCOCR754fc;->run()V
+PLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$7-RPI0PwwgOAZtsXq2j72pQWwMc;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService$1;IIJI)V
+PLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$7-RPI0PwwgOAZtsXq2j72pQWwMc;->run()V
+HPLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$7nMWCt41OE3k8ihjPNPqB0O8POU;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService$1;IIJLjava/util/ArrayList;)V
+PLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$7nMWCt41OE3k8ihjPNPqB0O8POU;->run()V
+PLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$BJntfNoFTejPmUJ_45WFIwis8Nw;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService$1;IIJI)V
+PLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$BJntfNoFTejPmUJ_45WFIwis8Nw;->run()V
+HPLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$N1Y2Zwqq-x5yDKQsDTj2KQ5q7g4;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService$1;JII)V
+PLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$N1Y2Zwqq-x5yDKQsDTj2KQ5q7g4;->run()V
+PLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$cO88ecWuvWIBecLAEccxr5yeJK4;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService$1;JII)V
+PLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$cO88ecWuvWIBecLAEccxr5yeJK4;->run()V
+HSPLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$YOMIOLvco2SvXVeJIulOSVKdX7A;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService;)V
+HSPLcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$YOMIOLvco2SvXVeJIulOSVKdX7A;->run()V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintAuthenticator;-><init>(Landroid/hardware/fingerprint/IFingerprintService;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintAuthenticator;->cancelAuthenticationFromService(Landroid/os/IBinder;Ljava/lang/String;IIIZ)V
+PLcom/android/server/biometrics/fingerprint/FingerprintAuthenticator;->hasEnrolledTemplates(ILjava/lang/String;)Z
+PLcom/android/server/biometrics/fingerprint/FingerprintAuthenticator;->isHardwareDetected(Ljava/lang/String;)Z
+PLcom/android/server/biometrics/fingerprint/FingerprintAuthenticator;->prepareForAuthentication(ZLandroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricServiceReceiverInternal;Ljava/lang/String;IIII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintAuthenticator;->resetLockout([B)V
+PLcom/android/server/biometrics/fingerprint/FingerprintAuthenticator;->setActiveUser(I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintAuthenticator;->startPreparedClient(I)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintConstants;-><init>()V
+PLcom/android/server/biometrics/fingerprint/FingerprintConstants;->acquireVendorCode()I
+PLcom/android/server/biometrics/fingerprint/FingerprintConstants;->actionBiometricAuth()I
+PLcom/android/server/biometrics/fingerprint/FingerprintConstants;->actionBiometricEnroll()I
+PLcom/android/server/biometrics/fingerprint/FingerprintConstants;->logTag()Ljava/lang/String;
+PLcom/android/server/biometrics/fingerprint/FingerprintConstants;->tagAuthToken()Ljava/lang/String;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService$1;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$1;->lambda$onAcquired$1$FingerprintService$1(JII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$1;->lambda$onAuthenticated$2$FingerprintService$1(IIJLjava/util/ArrayList;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$1;->lambda$onEnrollResult$0$FingerprintService$1(IIJI)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$1;->lambda$onEnumerate$5$FingerprintService$1(IIJI)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$1;->lambda$onError$3$FingerprintService$1(JII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$1;->lambda$onRemoved$4$FingerprintService$1(IIJI)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$1;->onAcquired(JII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$1;->onAuthenticated(JIILjava/util/ArrayList;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$1;->onEnrollResult(JIII)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService$1;->onEnumerate(JIII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$1;->onError(JII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$1;->onRemoved(JIII)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService$2;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$2;->authenticate(JI)I
+PLcom/android/server/biometrics/fingerprint/FingerprintService$2;->cancel()I
+PLcom/android/server/biometrics/fingerprint/FingerprintService$2;->enroll([BIILjava/util/ArrayList;)I
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService$2;->enumerate()I
+PLcom/android/server/biometrics/fingerprint/FingerprintService$2;->remove(II)I
+PLcom/android/server/biometrics/fingerprint/FingerprintService$BiometricPromptServiceListenerImpl;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService;Landroid/hardware/biometrics/IBiometricServiceReceiverInternal;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$BiometricPromptServiceListenerImpl;->onAcquired(JII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$BiometricPromptServiceListenerImpl;->onError(JIII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintAuthClient;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService;Landroid/content/Context;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;IIJZLjava/lang/String;IZ)V
+HPLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintAuthClient;->handleFailedAttempt()I
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintAuthClient;->isFingerprint()Z
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintAuthClient;->resetFailedAttempts()V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintAuthClient;->shouldFrameworkHandleLockout()Z
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintAuthClient;->statsModality()I
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper$1;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;Landroid/content/Context;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;II[BZLjava/lang/String;[II)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper$1;->shouldVibrate()Z
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper$1;->statsModality()I
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper$2;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;Landroid/content/Context;Lcom/android/server/biometrics/Constants;Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;JLandroid/os/IBinder;Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;IIIZLjava/lang/String;Lcom/android/server/biometrics/BiometricUtils;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper$4;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;IILjava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper$4;->run()V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService;)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService;Lcom/android/server/biometrics/fingerprint/FingerprintService$1;)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->addLockoutResetCallback(Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->authenticate(Landroid/os/IBinder;JILandroid/hardware/fingerprint/IFingerprintServiceReceiver;ILjava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->cancelAuthentication(Landroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->cancelAuthenticationFromService(Landroid/os/IBinder;Ljava/lang/String;IIIZ)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->cancelEnrollment(Landroid/os/IBinder;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->enroll(Landroid/os/IBinder;[BILandroid/hardware/fingerprint/IFingerprintServiceReceiver;ILjava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->getAuthenticatorId(Ljava/lang/String;)J
+HPLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->getEnrolledFingerprints(ILjava/lang/String;)Ljava/util/List;
+HPLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->hasEnrolledFingerprints(ILjava/lang/String;)Z
+HPLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->isHardwareDetected(Ljava/lang/String;)Z
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->postEnroll(Landroid/os/IBinder;)I
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->preEnroll(Landroid/os/IBinder;)J
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->prepareForAuthentication(Landroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricServiceReceiverInternal;Ljava/lang/String;IIII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->remove(Landroid/os/IBinder;IIILandroid/hardware/fingerprint/IFingerprintServiceReceiver;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->rename(IILjava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->resetTimeout([B)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->setActiveUser(I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;->startPreparedClient(I)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService$LockoutReceiver;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService;)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService$LockoutReceiver;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService;Lcom/android/server/biometrics/fingerprint/FingerprintService$1;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$LockoutReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService$ResetFailedAttemptsForUserRunnable;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService;)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService$ResetFailedAttemptsForUserRunnable;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService;Lcom/android/server/biometrics/fingerprint/FingerprintService$1;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$ResetFailedAttemptsForUserRunnable;->run()V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$ServiceListenerImpl;-><init>(Lcom/android/server/biometrics/fingerprint/FingerprintService;Landroid/hardware/fingerprint/IFingerprintServiceReceiver;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$ServiceListenerImpl;->onAcquired(JII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$ServiceListenerImpl;->onAuthenticationFailed(J)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$ServiceListenerImpl;->onAuthenticationSucceeded(JLandroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$ServiceListenerImpl;->onEnrollResult(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$ServiceListenerImpl;->onError(JIII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService$ServiceListenerImpl;->onRemoved(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$000(Lcom/android/server/biometrics/fingerprint/FingerprintService;ZI)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$100(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Landroid/util/SparseIntArray;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$1000(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$1100(Lcom/android/server/biometrics/fingerprint/FingerprintService;)J
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$1200(Lcom/android/server/biometrics/fingerprint/FingerprintService;)I
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$1300(Lcom/android/server/biometrics/fingerprint/FingerprintService;Lcom/android/server/biometrics/BiometricServiceBase$EnrollClientImpl;I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$1400(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$1500(Lcom/android/server/biometrics/fingerprint/FingerprintService;Landroid/os/IBinder;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$1600(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Z
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$1700(Lcom/android/server/biometrics/fingerprint/FingerprintService;)J
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$1800(Lcom/android/server/biometrics/fingerprint/FingerprintService;)I
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$1900(Lcom/android/server/biometrics/fingerprint/FingerprintService;Lcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;JLjava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$200(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Landroid/util/SparseBooleanArray;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$2000(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$2100(Lcom/android/server/biometrics/fingerprint/FingerprintService;)J
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$2200(Lcom/android/server/biometrics/fingerprint/FingerprintService;)I
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$2300(Lcom/android/server/biometrics/fingerprint/FingerprintService;Lcom/android/server/biometrics/BiometricServiceBase$AuthenticationClientImpl;JLjava/lang/String;III)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$2400(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$2500(Lcom/android/server/biometrics/fingerprint/FingerprintService;I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$2600(Lcom/android/server/biometrics/fingerprint/FingerprintService;Landroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$2900(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$300(Lcom/android/server/biometrics/fingerprint/FingerprintService;I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$3000(Lcom/android/server/biometrics/fingerprint/FingerprintService;I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$3100(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$3200(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Z
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$3300(Lcom/android/server/biometrics/fingerprint/FingerprintService;)J
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$3400(Lcom/android/server/biometrics/fingerprint/FingerprintService;Lcom/android/server/biometrics/RemovalClient;)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->access$3901(Lcom/android/server/biometrics/fingerprint/FingerprintService;Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$400(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$4000(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/io/FileDescriptor;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$4100(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/io/PrintWriter;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$4200(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;ZIII)Z
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->access$4300(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$4400(Lcom/android/server/biometrics/fingerprint/FingerprintService;)J
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$4500(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$4600(Lcom/android/server/biometrics/fingerprint/FingerprintService;I)Z
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$4700(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$4800(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;ZIII)Z
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$4900(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;ZIII)Z
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$500(Lcom/android/server/biometrics/fingerprint/FingerprintService;Landroid/os/IBinder;)J
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$5001(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;)J
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$5100(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$5200(Lcom/android/server/biometrics/fingerprint/FingerprintService;)I
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$5300(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$600(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$6200(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$6300(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$6400(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$6500(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$6600(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->access$6700(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Lcom/android/server/biometrics/BiometricServiceBase$H;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$6801(Lcom/android/server/biometrics/fingerprint/FingerprintService;Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$6900(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Lcom/android/server/biometrics/ClientMonitor;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$700(Lcom/android/server/biometrics/fingerprint/FingerprintService;Landroid/os/IBinder;)I
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$7001(Lcom/android/server/biometrics/fingerprint/FingerprintService;Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$7101(Lcom/android/server/biometrics/fingerprint/FingerprintService;JII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$7501(Lcom/android/server/biometrics/fingerprint/FingerprintService;Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;Ljava/util/ArrayList;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$7601(Lcom/android/server/biometrics/fingerprint/FingerprintService;JII)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$7701(Lcom/android/server/biometrics/fingerprint/FingerprintService;Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$800(Lcom/android/server/biometrics/fingerprint/FingerprintService;Ljava/lang/String;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->access$900(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Z
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->cancelLockoutResetForUser(I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->checkAppOps(ILjava/lang/String;)Z
+HPLcom/android/server/biometrics/fingerprint/FingerprintService;->checkUseBiometricPermission()V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->dumpInternal(Ljava/io/PrintWriter;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->dumpProto(Ljava/io/FileDescriptor;)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->getBiometricUtils()Lcom/android/server/biometrics/BiometricUtils;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->getConstants()Lcom/android/server/biometrics/Constants;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->getDaemonWrapper()Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->getEnrolledTemplates(I)Ljava/util/List;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->getFingerprintDaemon()Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->getHalDeviceId()J
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->getLockoutBroadcastPermission()Ljava/lang/String;
+HPLcom/android/server/biometrics/fingerprint/FingerprintService;->getLockoutMode()I
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->getLockoutResetIntent()Ljava/lang/String;
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->getLockoutResetIntentForUser(I)Landroid/app/PendingIntent;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->getManageBiometricPermission()Ljava/lang/String;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->getTag()Ljava/lang/String;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->hasEnrolledBiometrics(I)Z
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->hasReachedEnrollmentLimit(I)Z
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->lambda$YOMIOLvco2SvXVeJIulOSVKdX7A(Lcom/android/server/biometrics/fingerprint/FingerprintService;)Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->notifyClientActiveCallbacks(Z)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->onStart()V
+HPLcom/android/server/biometrics/fingerprint/FingerprintService;->resetFailedAttemptsForUser(ZI)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->scheduleLockoutResetForUser(I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->startPostEnroll(Landroid/os/IBinder;)I
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->startPreEnroll(Landroid/os/IBinder;)J
+PLcom/android/server/biometrics/fingerprint/FingerprintService;->statsModality()I
+HSPLcom/android/server/biometrics/fingerprint/FingerprintService;->updateActiveGroup(ILjava/lang/String;)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintUserState;-><init>(Landroid/content/Context;I)V
+PLcom/android/server/biometrics/fingerprint/FingerprintUserState;->addBiometric(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;)V
+PLcom/android/server/biometrics/fingerprint/FingerprintUserState;->doWriteState()V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintUserState;->getBiometricFile()Ljava/lang/String;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintUserState;->getBiometricsTag()Ljava/lang/String;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintUserState;->getCopy(Ljava/util/ArrayList;)Ljava/util/ArrayList;
+PLcom/android/server/biometrics/fingerprint/FingerprintUserState;->getNameTemplateResource()I
+HSPLcom/android/server/biometrics/fingerprint/FingerprintUserState;->parseBiometricsLocked(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintUtils;-><clinit>()V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintUtils;-><init>()V
+PLcom/android/server/biometrics/fingerprint/FingerprintUtils;->addBiometricForUser(Landroid/content/Context;ILandroid/hardware/biometrics/BiometricAuthenticator$Identifier;)V
+HSPLcom/android/server/biometrics/fingerprint/FingerprintUtils;->getBiometricsForUser(Landroid/content/Context;I)Ljava/util/List;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintUtils;->getInstance()Lcom/android/server/biometrics/fingerprint/FingerprintUtils;
+HSPLcom/android/server/biometrics/fingerprint/FingerprintUtils;->getStateForUser(Landroid/content/Context;I)Lcom/android/server/biometrics/fingerprint/FingerprintUserState;
+PLcom/android/server/biometrics/fingerprint/FingerprintUtils;->getUniqueName(Landroid/content/Context;I)Ljava/lang/CharSequence;
+PLcom/android/server/biometrics/fingerprint/FingerprintUtils;->removeBiometricForUser(Landroid/content/Context;II)V
+PLcom/android/server/biometrics/fingerprint/FingerprintUtils;->renameBiometricForUser(Landroid/content/Context;IILjava/lang/CharSequence;)V
 HSPLcom/android/server/camera/CameraServiceProxy$1;-><init>(Lcom/android/server/camera/CameraServiceProxy;)V
+PLcom/android/server/camera/CameraServiceProxy$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/camera/CameraServiceProxy$2;-><init>(Lcom/android/server/camera/CameraServiceProxy;)V
-PLcom/android/server/camera/CameraServiceProxy$2;->notifyCameraState(Ljava/lang/String;IILjava/lang/String;I)V
-PLcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;-><init>(ILjava/lang/String;I)V
+HPLcom/android/server/camera/CameraServiceProxy$2;->notifyCameraState(Ljava/lang/String;IILjava/lang/String;I)V
+PLcom/android/server/camera/CameraServiceProxy$2;->pingForUserUpdate()V
+HPLcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;-><init>(ILjava/lang/String;I)V
 PLcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;->getDuration()J
-PLcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;->markCompleted()V
+HPLcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;->markCompleted()V
 PLcom/android/server/camera/CameraServiceProxy$EventWriterTask;-><init>(Lcom/android/server/camera/CameraServiceProxy;Ljava/util/ArrayList;)V
 HPLcom/android/server/camera/CameraServiceProxy$EventWriterTask;->logCameraUsageEvent(Lcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;)V
 HPLcom/android/server/camera/CameraServiceProxy$EventWriterTask;->run()V
 HSPLcom/android/server/camera/CameraServiceProxy;-><clinit>()V
 HSPLcom/android/server/camera/CameraServiceProxy;-><init>(Landroid/content/Context;)V
+PLcom/android/server/camera/CameraServiceProxy;->access$000(Lcom/android/server/camera/CameraServiceProxy;)Ljava/lang/Object;
+PLcom/android/server/camera/CameraServiceProxy;->access$100(Lcom/android/server/camera/CameraServiceProxy;)Ljava/util/Set;
+PLcom/android/server/camera/CameraServiceProxy;->access$200(Lcom/android/server/camera/CameraServiceProxy;)I
+PLcom/android/server/camera/CameraServiceProxy;->access$300(Lcom/android/server/camera/CameraServiceProxy;I)V
+PLcom/android/server/camera/CameraServiceProxy;->access$400(Lcom/android/server/camera/CameraServiceProxy;I)V
 PLcom/android/server/camera/CameraServiceProxy;->access$500(I)Ljava/lang/String;
 PLcom/android/server/camera/CameraServiceProxy;->access$600(I)Ljava/lang/String;
-PLcom/android/server/camera/CameraServiceProxy;->access$700(Lcom/android/server/camera/CameraServiceProxy;Ljava/lang/String;IILjava/lang/String;I)V
+HPLcom/android/server/camera/CameraServiceProxy;->access$700(Lcom/android/server/camera/CameraServiceProxy;Ljava/lang/String;IILjava/lang/String;I)V
+PLcom/android/server/camera/CameraServiceProxy;->binderDied()V
 PLcom/android/server/camera/CameraServiceProxy;->cameraFacingToString(I)Ljava/lang/String;
 PLcom/android/server/camera/CameraServiceProxy;->cameraStateToString(I)Ljava/lang/String;
-PLcom/android/server/camera/CameraServiceProxy;->dumpUsageEvents()V
-PLcom/android/server/camera/CameraServiceProxy;->getEnabledUserHandles(I)Ljava/util/Set;
-PLcom/android/server/camera/CameraServiceProxy;->notifyCameraserverLocked(ILjava/util/Set;)Z
-PLcom/android/server/camera/CameraServiceProxy;->notifySwitchWithRetriesLocked(I)V
+HPLcom/android/server/camera/CameraServiceProxy;->dumpUsageEvents()V
+HSPLcom/android/server/camera/CameraServiceProxy;->getEnabledUserHandles(I)Ljava/util/Set;
+HSPLcom/android/server/camera/CameraServiceProxy;->notifyCameraserverLocked(ILjava/util/Set;)Z
+PLcom/android/server/camera/CameraServiceProxy;->notifyNfcService(Z)V
+PLcom/android/server/camera/CameraServiceProxy;->notifySwitchWithRetries(I)V
+HSPLcom/android/server/camera/CameraServiceProxy;->notifySwitchWithRetriesLocked(I)V
 HSPLcom/android/server/camera/CameraServiceProxy;->onStart()V
-PLcom/android/server/camera/CameraServiceProxy;->onStartUser(I)V
-PLcom/android/server/camera/CameraServiceProxy;->switchUserLocked(I)V
-PLcom/android/server/camera/CameraServiceProxy;->toArray(Ljava/util/Collection;)[I
-PLcom/android/server/camera/CameraServiceProxy;->updateActivityCount(Ljava/lang/String;IILjava/lang/String;I)V
+HSPLcom/android/server/camera/CameraServiceProxy;->onStartUser(I)V
+HSPLcom/android/server/camera/CameraServiceProxy;->switchUserLocked(I)V
+HSPLcom/android/server/camera/CameraServiceProxy;->toArray(Ljava/util/Collection;)[I
+HPLcom/android/server/camera/CameraServiceProxy;->updateActivityCount(Ljava/lang/String;IILjava/lang/String;I)V
 HSPLcom/android/server/camera/CameraStatsJobService;-><clinit>()V
 PLcom/android/server/camera/CameraStatsJobService;-><init>()V
 PLcom/android/server/camera/CameraStatsJobService;->onStartJob(Landroid/app/job/JobParameters;)Z
 HSPLcom/android/server/camera/CameraStatsJobService;->schedule(Landroid/content/Context;)V
 HSPLcom/android/server/clipboard/ClipboardService$ClipboardImpl;-><init>(Lcom/android/server/clipboard/ClipboardService;)V
 HSPLcom/android/server/clipboard/ClipboardService$ClipboardImpl;-><init>(Lcom/android/server/clipboard/ClipboardService;Lcom/android/server/clipboard/ClipboardService$1;)V
-PLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->addPrimaryClipChangedListener(Landroid/content/IOnPrimaryClipChangedListener;Ljava/lang/String;I)V
+HPLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->addPrimaryClipChangedListener(Landroid/content/IOnPrimaryClipChangedListener;Ljava/lang/String;I)V
 HPLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->getPrimaryClip(Ljava/lang/String;I)Landroid/content/ClipData;
-PLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->getPrimaryClipDescription(Ljava/lang/String;I)Landroid/content/ClipDescription;
-PLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->hasPrimaryClip(Ljava/lang/String;I)Z
-PLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->removePrimaryClipChangedListener(Landroid/content/IOnPrimaryClipChangedListener;Ljava/lang/String;I)V
+HPLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->getPrimaryClipDescription(Ljava/lang/String;I)Landroid/content/ClipDescription;
+PLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->hasClipboardText(Ljava/lang/String;I)Z
+HPLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->hasPrimaryClip(Ljava/lang/String;I)Z
+HPLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->removePrimaryClipChangedListener(Landroid/content/IOnPrimaryClipChangedListener;Ljava/lang/String;I)V
 PLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->setPrimaryClip(Landroid/content/ClipData;Ljava/lang/String;I)V
-PLcom/android/server/clipboard/ClipboardService$ListenerInfo;-><init>(Lcom/android/server/clipboard/ClipboardService;ILjava/lang/String;)V
+HPLcom/android/server/clipboard/ClipboardService$ListenerInfo;-><init>(Lcom/android/server/clipboard/ClipboardService;ILjava/lang/String;)V
 PLcom/android/server/clipboard/ClipboardService$PerUserClipboard;-><init>(Lcom/android/server/clipboard/ClipboardService;I)V
 HSPLcom/android/server/clipboard/ClipboardService;-><clinit>()V
 HSPLcom/android/server/clipboard/ClipboardService;-><init>(Landroid/content/Context;)V
 HPLcom/android/server/clipboard/ClipboardService;->access$100(Lcom/android/server/clipboard/ClipboardService;I)Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;
-PLcom/android/server/clipboard/ClipboardService;->access$300(Lcom/android/server/clipboard/ClipboardService;Ljava/lang/String;I)I
-PLcom/android/server/clipboard/ClipboardService;->access$400(Lcom/android/server/clipboard/ClipboardService;ILjava/lang/String;II)Z
+HPLcom/android/server/clipboard/ClipboardService;->access$300(Lcom/android/server/clipboard/ClipboardService;Ljava/lang/String;I)I
+HPLcom/android/server/clipboard/ClipboardService;->access$400(Lcom/android/server/clipboard/ClipboardService;ILjava/lang/String;II)Z
 PLcom/android/server/clipboard/ClipboardService;->access$500(Lcom/android/server/clipboard/ClipboardService;Landroid/content/ClipData;I)V
-PLcom/android/server/clipboard/ClipboardService;->access$600(Lcom/android/server/clipboard/ClipboardService;I)Z
+HPLcom/android/server/clipboard/ClipboardService;->access$600(Lcom/android/server/clipboard/ClipboardService;I)Z
 PLcom/android/server/clipboard/ClipboardService;->access$700(Lcom/android/server/clipboard/ClipboardService;ILjava/lang/String;)V
 PLcom/android/server/clipboard/ClipboardService;->access$800(Lcom/android/server/clipboard/ClipboardService;Ljava/lang/String;I)I
-PLcom/android/server/clipboard/ClipboardService;->addActiveOwnerLocked(ILjava/lang/String;)V
+HPLcom/android/server/clipboard/ClipboardService;->addActiveOwnerLocked(ILjava/lang/String;)V
 PLcom/android/server/clipboard/ClipboardService;->checkDataOwnerLocked(Landroid/content/ClipData;I)V
 PLcom/android/server/clipboard/ClipboardService;->checkItemOwnerLocked(Landroid/content/ClipData$Item;I)V
+PLcom/android/server/clipboard/ClipboardService;->checkUriOwnerLocked(Landroid/net/Uri;I)V
 HPLcom/android/server/clipboard/ClipboardService;->clipboardAccessAllowed(ILjava/lang/String;II)Z
-PLcom/android/server/clipboard/ClipboardService;->getClipboard(I)Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;
+HPLcom/android/server/clipboard/ClipboardService;->getClipboard(I)Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;
 HPLcom/android/server/clipboard/ClipboardService;->getIntendingUid(Ljava/lang/String;I)I
 HPLcom/android/server/clipboard/ClipboardService;->getIntendingUserId(Ljava/lang/String;I)I
 PLcom/android/server/clipboard/ClipboardService;->getRelatedProfiles(I)Ljava/util/List;
 PLcom/android/server/clipboard/ClipboardService;->grantItemLocked(Landroid/content/ClipData$Item;ILjava/lang/String;I)V
+PLcom/android/server/clipboard/ClipboardService;->grantUriLocked(Landroid/net/Uri;ILjava/lang/String;I)V
 PLcom/android/server/clipboard/ClipboardService;->hasRestriction(Ljava/lang/String;I)Z
 HPLcom/android/server/clipboard/ClipboardService;->isDeviceLocked(I)Z
 PLcom/android/server/clipboard/ClipboardService;->isInternalSysWindowAppWithWindowFocus(Ljava/lang/String;)Z
+PLcom/android/server/clipboard/ClipboardService;->onCleanupUser(I)V
 HSPLcom/android/server/clipboard/ClipboardService;->onStart()V
 PLcom/android/server/clipboard/ClipboardService;->revokeItemLocked(Landroid/content/ClipData$Item;I)V
+PLcom/android/server/clipboard/ClipboardService;->revokeUriLocked(Landroid/net/Uri;I)V
+PLcom/android/server/clipboard/ClipboardService;->revokeUris(Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;)V
 PLcom/android/server/clipboard/ClipboardService;->setPrimaryClipInternal(Landroid/content/ClipData;I)V
-PLcom/android/server/clipboard/ClipboardService;->setPrimaryClipInternal(Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;Landroid/content/ClipData;I)V
+HPLcom/android/server/clipboard/ClipboardService;->setPrimaryClipInternal(Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;Landroid/content/ClipData;I)V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$0VKz9ecFqvfFXzRrfaz-Pf5wW2s;-><clinit>()V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$0VKz9ecFqvfFXzRrfaz-Pf5wW2s;-><init>()V
+HPLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$0VKz9ecFqvfFXzRrfaz-Pf5wW2s;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$2$-LNsQ_6iDwt_SHib_WgAf70VWCI;-><init>(Ljava/lang/String;)V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$2$-LNsQ_6iDwt_SHib_WgAf70VWCI;->test(Ljava/lang/Object;)Z
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$2$dm_CTD4HzQO9qRu6lX0jCG6NMCM;-><init>(Ljava/lang/String;)V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$2$dm_CTD4HzQO9qRu6lX0jCG6NMCM;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$bdv3Vfadbb8b9nrSgkARO4oYOXU;-><clinit>()V
 PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$bdv3Vfadbb8b9nrSgkARO4oYOXU;-><init>()V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$m9NLTVY7N8yX_cTeQGMddCEpCU0;-><init>(Landroid/companion/AssociationRequest;Ljava/lang/String;Landroid/companion/IFindDeviceCallback;)V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$m9NLTVY7N8yX_cTeQGMddCEpCU0;->run(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$oYSpdTmzLHvD4Kqu1cDfzfZuvwo;-><init>(Lcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;Landroid/companion/IFindDeviceCallback;)V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$oYSpdTmzLHvD4Kqu1cDfzfZuvwo;->acceptOrThrow(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$yIqg4YLiQouxnVJakZERWIZnPYU;-><clinit>()V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$yIqg4YLiQouxnVJakZERWIZnPYU;-><init>()V
+HPLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$yIqg4YLiQouxnVJakZERWIZnPYU;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$_wqnNKMj0AXNyFu-i6lXk6tA3xs;-><init>(Ljava/util/Set;)V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$_wqnNKMj0AXNyFu-i6lXk6tA3xs;->accept(Ljava/lang/Object;)V
 PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$bh5xRJq9-CRJoXvmerYRNjK1xEQ;-><clinit>()V
 PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$bh5xRJq9-CRJoXvmerYRNjK1xEQ;-><init>()V
 PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$bh5xRJq9-CRJoXvmerYRNjK1xEQ;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$d_RLJQyt7Hah5vpYlYLeoWXxACU;-><init>(Lorg/xmlpull/v1/XmlSerializer;)V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$d_RLJQyt7Hah5vpYlYLeoWXxACU;->acceptOrThrow(Ljava/lang/Object;)V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$wG7upTzVFwCMCLI1zfTZW4dftak;-><init>(Landroid/companion/Association;)V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$wG7upTzVFwCMCLI1zfTZW4dftak;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$wnUkAY8uXyjMGM59-bNpzLLMJ1I;-><clinit>()V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$wnUkAY8uXyjMGM59-bNpzLLMJ1I;-><init>()V
+PLcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$wnUkAY8uXyjMGM59-bNpzLLMJ1I;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/companion/-$$Lambda$dmgYbfK3c1MAswkxujxbcRtjs9A;-><clinit>()V
+PLcom/android/server/companion/-$$Lambda$dmgYbfK3c1MAswkxujxbcRtjs9A;-><init>()V
+PLcom/android/server/companion/-$$Lambda$dmgYbfK3c1MAswkxujxbcRtjs9A;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/companion/CompanionDeviceManagerService$1;-><init>(Lcom/android/server/companion/CompanionDeviceManagerService;)V
+HSPLcom/android/server/companion/CompanionDeviceManagerService$1;-><init>(Lcom/android/server/companion/CompanionDeviceManagerService;Landroid/content/Intent;)V
+PLcom/android/server/companion/CompanionDeviceManagerService$1;->create(I)Lcom/android/internal/infra/ServiceConnector;
+PLcom/android/server/companion/CompanionDeviceManagerService$1;->create(I)Ljava/lang/Object;
 PLcom/android/server/companion/CompanionDeviceManagerService$1;->onPackageModified(Ljava/lang/String;)V
+HSPLcom/android/server/companion/CompanionDeviceManagerService$2;-><init>(Lcom/android/server/companion/CompanionDeviceManagerService;)V
+PLcom/android/server/companion/CompanionDeviceManagerService$2;->lambda$onPackageRemoved$0(Ljava/lang/String;Landroid/companion/Association;)Z
+PLcom/android/server/companion/CompanionDeviceManagerService$2;->lambda$onPackageRemoved$1(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;
+HPLcom/android/server/companion/CompanionDeviceManagerService$2;->onPackageModified(Ljava/lang/String;)V
+PLcom/android/server/companion/CompanionDeviceManagerService$2;->onPackageRemoved(Ljava/lang/String;I)V
 HSPLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;-><init>(Lcom/android/server/companion/CompanionDeviceManagerService;)V
-PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->checkCallerIsSystemOr(Ljava/lang/String;I)V
-PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->checkUsesFeature(Ljava/lang/String;I)V
-PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->getAssociations(Ljava/lang/String;I)Ljava/util/List;
-PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->associate(Landroid/companion/AssociationRequest;Landroid/companion/IFindDeviceCallback;Ljava/lang/String;)V
+PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->checkCallerIsSystemOr(Ljava/lang/String;)V
+HPLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->checkCallerIsSystemOr(Ljava/lang/String;I)V
+PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->checkCanCallNotificationApi(Ljava/lang/String;)V
+HPLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->checkUsesFeature(Ljava/lang/String;I)V
+HPLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->getAssociations(Ljava/lang/String;I)Ljava/util/List;
+PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->hasNotificationAccess(Landroid/content/ComponentName;)Z
+PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->lambda$associate$0(Landroid/companion/AssociationRequest;Ljava/lang/String;Landroid/companion/IFindDeviceCallback;Landroid/companion/ICompanionDeviceDiscoveryService;)Ljava/util/concurrent/CompletableFuture;
+PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->lambda$associate$1$CompanionDeviceManagerService$CompanionDeviceManagerImpl(Landroid/companion/IFindDeviceCallback;Landroid/companion/Association;Ljava/lang/Throwable;)V
+PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->lambda$getAssociations$2(Landroid/companion/Association;)Ljava/lang/String;
+HPLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->requestNotificationAccess(Landroid/content/ComponentName;)Landroid/app/PendingIntent;
+PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->stopScan(Landroid/companion/AssociationRequest;Landroid/companion/IFindDeviceCallback;Ljava/lang/String;)V
 HSPLcom/android/server/companion/CompanionDeviceManagerService;-><clinit>()V
 HSPLcom/android/server/companion/CompanionDeviceManagerService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/companion/CompanionDeviceManagerService;->getStorageFileForUser(I)Landroid/util/AtomicFile;
+PLcom/android/server/companion/CompanionDeviceManagerService;->access$000(Lcom/android/server/companion/CompanionDeviceManagerService;Ljava/util/function/Function;I)V
+HPLcom/android/server/companion/CompanionDeviceManagerService;->access$100(Lcom/android/server/companion/CompanionDeviceManagerService;ILjava/lang/String;)Ljava/util/Set;
+HPLcom/android/server/companion/CompanionDeviceManagerService;->access$1000()Z
+HPLcom/android/server/companion/CompanionDeviceManagerService;->access$1100(Lcom/android/server/companion/CompanionDeviceManagerService;)Lcom/android/internal/app/IAppOpsService;
+PLcom/android/server/companion/CompanionDeviceManagerService;->access$1200(Lcom/android/server/companion/CompanionDeviceManagerService;Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
+PLcom/android/server/companion/CompanionDeviceManagerService;->access$200(Lcom/android/server/companion/CompanionDeviceManagerService;Ljava/lang/String;I)V
+HPLcom/android/server/companion/CompanionDeviceManagerService;->access$300()I
+PLcom/android/server/companion/CompanionDeviceManagerService;->access$402(Lcom/android/server/companion/CompanionDeviceManagerService;Landroid/companion/IFindDeviceCallback;)Landroid/companion/IFindDeviceCallback;
+PLcom/android/server/companion/CompanionDeviceManagerService;->access$500(Lcom/android/server/companion/CompanionDeviceManagerService;)Landroid/companion/AssociationRequest;
+PLcom/android/server/companion/CompanionDeviceManagerService;->access$502(Lcom/android/server/companion/CompanionDeviceManagerService;Landroid/companion/AssociationRequest;)Landroid/companion/AssociationRequest;
+PLcom/android/server/companion/CompanionDeviceManagerService;->access$602(Lcom/android/server/companion/CompanionDeviceManagerService;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/companion/CompanionDeviceManagerService;->access$702(Lcom/android/server/companion/CompanionDeviceManagerService;Lcom/android/internal/infra/AndroidFuture;)Lcom/android/internal/infra/AndroidFuture;
+PLcom/android/server/companion/CompanionDeviceManagerService;->access$800(Lcom/android/server/companion/CompanionDeviceManagerService;)Lcom/android/internal/infra/PerUser;
+PLcom/android/server/companion/CompanionDeviceManagerService;->access$900(Lcom/android/server/companion/CompanionDeviceManagerService;)V
+PLcom/android/server/companion/CompanionDeviceManagerService;->addAssociation(Landroid/companion/Association;)V
+PLcom/android/server/companion/CompanionDeviceManagerService;->cleanup()V
+PLcom/android/server/companion/CompanionDeviceManagerService;->containsEither([Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
+HPLcom/android/server/companion/CompanionDeviceManagerService;->getCallingUserId()I
+HPLcom/android/server/companion/CompanionDeviceManagerService;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
+HPLcom/android/server/companion/CompanionDeviceManagerService;->getStorageFileForUser(I)Landroid/util/AtomicFile;
+HPLcom/android/server/companion/CompanionDeviceManagerService;->isCallerSystem()Z
+HPLcom/android/server/companion/CompanionDeviceManagerService;->lambda$getPackageInfo$1(Landroid/content/Context;Ljava/lang/String;Ljava/lang/Integer;)Landroid/content/pm/PackageInfo;
 PLcom/android/server/companion/CompanionDeviceManagerService;->lambda$getStorageFileForUser$5(Ljava/lang/Integer;)Landroid/util/AtomicFile;
+PLcom/android/server/companion/CompanionDeviceManagerService;->lambda$recordAssociation$2(Landroid/companion/Association;Ljava/util/Set;)Ljava/util/Set;
+PLcom/android/server/companion/CompanionDeviceManagerService;->lambda$updateAssociations$3(Lorg/xmlpull/v1/XmlSerializer;Landroid/companion/Association;)V
+PLcom/android/server/companion/CompanionDeviceManagerService;->lambda$updateAssociations$4(Ljava/util/Set;Ljava/io/FileOutputStream;)V
+PLcom/android/server/companion/CompanionDeviceManagerService;->lambda$wnUkAY8uXyjMGM59-bNpzLLMJ1I(Lcom/android/server/companion/CompanionDeviceManagerService;Landroid/content/pm/PackageInfo;)V
 HSPLcom/android/server/companion/CompanionDeviceManagerService;->onStart()V
 PLcom/android/server/companion/CompanionDeviceManagerService;->onUnlockUser(I)V
 PLcom/android/server/companion/CompanionDeviceManagerService;->readAllAssociations(I)Ljava/util/Set;
-PLcom/android/server/companion/CompanionDeviceManagerService;->readAllAssociations(ILjava/lang/String;)Ljava/util/Set;
+HPLcom/android/server/companion/CompanionDeviceManagerService;->readAllAssociations(ILjava/lang/String;)Ljava/util/Set;
+PLcom/android/server/companion/CompanionDeviceManagerService;->recordAssociation(Landroid/companion/Association;)V
 HSPLcom/android/server/companion/CompanionDeviceManagerService;->registerPackageMonitor()V
+PLcom/android/server/companion/CompanionDeviceManagerService;->unlinkToDeath(Landroid/os/IInterface;Landroid/os/IBinder$DeathRecipient;I)Landroid/os/IInterface;
+PLcom/android/server/companion/CompanionDeviceManagerService;->updateAssociations(Ljava/util/function/Function;)V
+PLcom/android/server/companion/CompanionDeviceManagerService;->updateAssociations(Ljava/util/function/Function;I)V
+PLcom/android/server/companion/CompanionDeviceManagerService;->updateSpecialAccessPermissionAsSystem(Landroid/content/pm/PackageInfo;)V
+PLcom/android/server/companion/CompanionDeviceManagerService;->updateSpecialAccessPermissionForAssociatedPackage(Ljava/lang/String;I)V
 HSPLcom/android/server/compat/CompatChange;-><init>(Lcom/android/server/compat/config/Change;)V
 HSPLcom/android/server/compat/CompatChange;->isEnabled(Landroid/content/pm/ApplicationInfo;)Z
 HSPLcom/android/server/compat/CompatChange;->registerListener(Lcom/android/server/compat/CompatChange$ChangeListener;)V
-PLcom/android/server/compat/CompatChange;->toString()Ljava/lang/String;
+HPLcom/android/server/compat/CompatChange;->toString()Ljava/lang/String;
 HSPLcom/android/server/compat/CompatConfig;-><clinit>()V
 HSPLcom/android/server/compat/CompatConfig;-><init>()V
+HSPLcom/android/server/compat/CompatConfig;-><init>(Lcom/android/internal/compat/AndroidBuildClassifier;Landroid/content/Context;)V
 HSPLcom/android/server/compat/CompatConfig;->addChange(Lcom/android/server/compat/CompatChange;)V
+HSPLcom/android/server/compat/CompatConfig;->create(Lcom/android/internal/compat/AndroidBuildClassifier;Landroid/content/Context;)Lcom/android/server/compat/CompatConfig;
 PLcom/android/server/compat/CompatConfig;->dumpConfig(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/compat/CompatConfig;->get()Lcom/android/server/compat/CompatConfig;
 HSPLcom/android/server/compat/CompatConfig;->getDisabledChanges(Landroid/content/pm/ApplicationInfo;)[J
 HSPLcom/android/server/compat/CompatConfig;->initConfigFromLib(Ljava/io/File;)Lcom/android/server/compat/CompatConfig;
+HSPLcom/android/server/compat/CompatConfig;->initConfigFromLib(Ljava/io/File;)V
 HSPLcom/android/server/compat/CompatConfig;->isChangeEnabled(JLandroid/content/pm/ApplicationInfo;)Z
 HSPLcom/android/server/compat/CompatConfig;->readConfig(Ljava/io/File;)V
 HSPLcom/android/server/compat/CompatConfig;->registerListener(JLcom/android/server/compat/CompatChange$ChangeListener;)Z
+HSPLcom/android/server/compat/OverrideValidatorImpl;-><init>(Lcom/android/internal/compat/AndroidBuildClassifier;Landroid/content/Context;Lcom/android/server/compat/CompatConfig;)V
 HSPLcom/android/server/compat/PlatformCompat;-><init>(Landroid/content/Context;)V
+PLcom/android/server/compat/PlatformCompat;->checkCompatChangeLogPermission()V
+HSPLcom/android/server/compat/PlatformCompat;->checkCompatChangeReadPermission()V
 PLcom/android/server/compat/PlatformCompat;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HPLcom/android/server/compat/PlatformCompat;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/compat/PlatformCompat;->getDisabledChanges(Landroid/content/pm/ApplicationInfo;)[J
@@ -7454,59 +12276,87 @@
 HSPLcom/android/server/compat/config/Config;->read(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/compat/config/Config;
 HSPLcom/android/server/compat/config/XmlParser;->read(Ljava/io/InputStream;)Lcom/android/server/compat/config/Config;
 HSPLcom/android/server/compat/config/XmlParser;->readText(Lorg/xmlpull/v1/XmlPullParser;)Ljava/lang/String;
-PLcom/android/server/connectivity/-$$Lambda$DnsManager$PrivateDnsValidationStatuses$_X4_M08nKysv-L4hDpqAsa4SBxI;-><init>(Landroid/net/LinkProperties;)V
-PLcom/android/server/connectivity/-$$Lambda$DnsManager$PrivateDnsValidationStatuses$_X4_M08nKysv-L4hDpqAsa4SBxI;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/connectivity/-$$Lambda$DnsManager$PrivateDnsValidationStatuses$_X4_M08nKysv-L4hDpqAsa4SBxI;-><init>(Landroid/net/LinkProperties;)V
+HPLcom/android/server/connectivity/-$$Lambda$DnsManager$PrivateDnsValidationStatuses$_X4_M08nKysv-L4hDpqAsa4SBxI;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/connectivity/-$$Lambda$DnsManager$Z_oEyRSp0wthIcVTcqKDoAJRe6Q;-><init>(Landroid/net/LinkProperties;)V
+HPLcom/android/server/connectivity/-$$Lambda$DnsManager$Z_oEyRSp0wthIcVTcqKDoAJRe6Q;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/connectivity/-$$Lambda$IpConnectivityMetrics$B0oR30xfeM300kIzUVaV_zUNLCg;-><clinit>()V
 HSPLcom/android/server/connectivity/-$$Lambda$IpConnectivityMetrics$B0oR30xfeM300kIzUVaV_zUNLCg;-><init>()V
 HSPLcom/android/server/connectivity/-$$Lambda$IpConnectivityMetrics$B0oR30xfeM300kIzUVaV_zUNLCg;->applyAsInt(Ljava/lang/Object;)I
-PLcom/android/server/connectivity/-$$Lambda$MultipathPolicyTracker$2$dvyDLfu9d6g2XoEdL3QMHx7ut6k;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker$2;)V
-PLcom/android/server/connectivity/-$$Lambda$MultipathPolicyTracker$2$dvyDLfu9d6g2XoEdL3QMHx7ut6k;->run()V
-PLcom/android/server/connectivity/AutodestructReference;-><init>(Ljava/lang/Object;)V
-PLcom/android/server/connectivity/AutodestructReference;->getAndDestroy()Ljava/lang/Object;
+HSPLcom/android/server/connectivity/-$$Lambda$IpConnectivityMetrics$S6t43cbsv7uQTbniMoTEFVB8Tfw;-><clinit>()V
+HSPLcom/android/server/connectivity/-$$Lambda$IpConnectivityMetrics$S6t43cbsv7uQTbniMoTEFVB8Tfw;-><init>()V
+HSPLcom/android/server/connectivity/-$$Lambda$IpConnectivityMetrics$S6t43cbsv7uQTbniMoTEFVB8Tfw;->applyAsInt(Ljava/lang/Object;)I
+HPLcom/android/server/connectivity/-$$Lambda$MultipathPolicyTracker$2$dvyDLfu9d6g2XoEdL3QMHx7ut6k;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker$2;)V
+HPLcom/android/server/connectivity/-$$Lambda$MultipathPolicyTracker$2$dvyDLfu9d6g2XoEdL3QMHx7ut6k;->run()V
+HPLcom/android/server/connectivity/-$$Lambda$Nat464Xlat$40jKHQd7R0zgcegyEyc9zPHKXVA;-><init>(Lcom/android/server/connectivity/Nat464Xlat;Ljava/lang/String;Z)V
+HPLcom/android/server/connectivity/-$$Lambda$Nat464Xlat$40jKHQd7R0zgcegyEyc9zPHKXVA;->run()V
+PLcom/android/server/connectivity/-$$Lambda$Nat464Xlat$PACHOP9HoYvr_jzHtIwFDy31Ud4;-><init>(Lcom/android/server/connectivity/Nat464Xlat;Ljava/lang/String;)V
+PLcom/android/server/connectivity/-$$Lambda$Nat464Xlat$PACHOP9HoYvr_jzHtIwFDy31Ud4;->run()V
+PLcom/android/server/connectivity/-$$Lambda$PermissionMonitor$h-GPsXXwaQ-Mfu5-dqCp_VIYNOM;-><init>(Lcom/android/server/connectivity/PermissionMonitor;)V
+HPLcom/android/server/connectivity/-$$Lambda$PermissionMonitor$h-GPsXXwaQ-Mfu5-dqCp_VIYNOM;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/connectivity/AutodestructReference;-><init>(Ljava/lang/Object;)V
+HPLcom/android/server/connectivity/AutodestructReference;->getAndDestroy()Ljava/lang/Object;
 HSPLcom/android/server/connectivity/DataConnectionStats$PhoneStateListenerImpl;-><init>(Lcom/android/server/connectivity/DataConnectionStats;Landroid/os/Looper;)V
+HPLcom/android/server/connectivity/DataConnectionStats$PhoneStateListenerImpl;->onDataActivity(I)V
+HPLcom/android/server/connectivity/DataConnectionStats$PhoneStateListenerImpl;->onDataConnectionStateChanged(II)V
+HPLcom/android/server/connectivity/DataConnectionStats$PhoneStateListenerImpl;->onServiceStateChanged(Landroid/telephony/ServiceState;)V
+HPLcom/android/server/connectivity/DataConnectionStats$PhoneStateListenerImpl;->onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V
 HSPLcom/android/server/connectivity/DataConnectionStats;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
-PLcom/android/server/connectivity/DataConnectionStats;->notePhoneDataConnectionState()V
-PLcom/android/server/connectivity/DataConnectionStats;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/connectivity/DataConnectionStats;->access$002(Lcom/android/server/connectivity/DataConnectionStats;Landroid/telephony/SignalStrength;)Landroid/telephony/SignalStrength;
+PLcom/android/server/connectivity/DataConnectionStats;->access$102(Lcom/android/server/connectivity/DataConnectionStats;Landroid/telephony/ServiceState;)Landroid/telephony/ServiceState;
+HPLcom/android/server/connectivity/DataConnectionStats;->access$200(Lcom/android/server/connectivity/DataConnectionStats;)V
+PLcom/android/server/connectivity/DataConnectionStats;->access$302(Lcom/android/server/connectivity/DataConnectionStats;I)I
+HPLcom/android/server/connectivity/DataConnectionStats;->hasService()Z
+PLcom/android/server/connectivity/DataConnectionStats;->isCdma()Z
+HPLcom/android/server/connectivity/DataConnectionStats;->notePhoneDataConnectionState()V
+HPLcom/android/server/connectivity/DataConnectionStats;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/connectivity/DataConnectionStats;->startMonitoring()V
 PLcom/android/server/connectivity/DataConnectionStats;->updateSimState(Landroid/content/Intent;)V
 HSPLcom/android/server/connectivity/DefaultNetworkMetrics;-><init>()V
-PLcom/android/server/connectivity/DefaultNetworkMetrics;->fillLinkInfo(Landroid/net/metrics/DefaultNetworkEvent;Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/connectivity/DefaultNetworkMetrics;->flushEvents(Ljava/util/List;)V
+HPLcom/android/server/connectivity/DefaultNetworkMetrics;->fillLinkInfo(Landroid/net/metrics/DefaultNetworkEvent;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/connectivity/DefaultNetworkMetrics;->flushEvents(Ljava/util/List;)V
 PLcom/android/server/connectivity/DefaultNetworkMetrics;->listEvents(Ljava/io/PrintWriter;)V
-PLcom/android/server/connectivity/DefaultNetworkMetrics;->logCurrentDefaultNetwork(JLcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/connectivity/DefaultNetworkMetrics;->listEventsAsProto()Ljava/util/List;
+PLcom/android/server/connectivity/DefaultNetworkMetrics;->listEventsAsProto(Ljava/util/List;)V
+HPLcom/android/server/connectivity/DefaultNetworkMetrics;->logCurrentDefaultNetwork(JLcom/android/server/connectivity/NetworkAgentInfo;)V
 PLcom/android/server/connectivity/DefaultNetworkMetrics;->logDefaultNetworkEvent(JLcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/connectivity/NetworkAgentInfo;)V
 PLcom/android/server/connectivity/DefaultNetworkMetrics;->logDefaultNetworkValidity(JZ)V
 HSPLcom/android/server/connectivity/DefaultNetworkMetrics;->newDefaultNetwork(JLcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/connectivity/DefaultNetworkMetrics;->printEvent(JLjava/io/PrintWriter;Landroid/net/metrics/DefaultNetworkEvent;)V
+HPLcom/android/server/connectivity/DefaultNetworkMetrics;->printEvent(JLjava/io/PrintWriter;Landroid/net/metrics/DefaultNetworkEvent;)V
+PLcom/android/server/connectivity/DefaultNetworkMetrics;->updateValidationTime(J)V
 PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses$ValidationStatus;-><clinit>()V
 PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses$ValidationStatus;-><init>(Ljava/lang/String;I)V
-PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;-><init>()V
-PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;-><init>(Lcom/android/server/connectivity/DnsManager$1;)V
-PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->access$000(Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;)Z
+HPLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;-><init>()V
+HPLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;-><init>(Lcom/android/server/connectivity/DnsManager$1;)V
+HPLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->access$000(Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;)Z
 PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->access$100(Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;Landroid/net/LinkProperties;)Landroid/net/LinkProperties;
-PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->access$200(Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationUpdate;)V
-PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->access$400(Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;[Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->access$200(Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationUpdate;)V
+HPLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->access$400(Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;[Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->fillInValidatedPrivateDns(Landroid/net/LinkProperties;)Landroid/net/LinkProperties;
 HPLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->hasValidatedServer()Z
-PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->lambda$fillInValidatedPrivateDns$0(Landroid/net/LinkProperties;Landroid/util/Pair;Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses$ValidationStatus;)V
-PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->updateStatus(Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationUpdate;)V
-PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->updateTrackedDnses([Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/connectivity/DnsManager$PrivateDnsValidationUpdate;-><init>(ILjava/net/InetAddress;Ljava/lang/String;Z)V
+HPLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->lambda$fillInValidatedPrivateDns$0(Landroid/net/LinkProperties;Landroid/util/Pair;Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses$ValidationStatus;)V
+HPLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->updateStatus(Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationUpdate;)V
+HPLcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;->updateTrackedDnses([Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/connectivity/DnsManager$PrivateDnsValidationUpdate;-><init>(ILjava/net/InetAddress;Ljava/lang/String;Z)V
 HSPLcom/android/server/connectivity/DnsManager;-><clinit>()V
 HSPLcom/android/server/connectivity/DnsManager;-><init>(Landroid/content/Context;Landroid/net/IDnsResolver;Lcom/android/server/connectivity/MockableSystemProperties;)V
-PLcom/android/server/connectivity/DnsManager;->flushVmDnsCache()V
-PLcom/android/server/connectivity/DnsManager;->getDomainStrings(Ljava/lang/String;)[Ljava/lang/String;
-PLcom/android/server/connectivity/DnsManager;->getIntSetting(Ljava/lang/String;I)I
-PLcom/android/server/connectivity/DnsManager;->getPrivateDnsConfig(Landroid/content/ContentResolver;)Landroid/net/shared/PrivateDnsConfig;
-PLcom/android/server/connectivity/DnsManager;->getPrivateDnsMode(Landroid/content/ContentResolver;)Ljava/lang/String;
+HPLcom/android/server/connectivity/DnsManager;->flushVmDnsCache()V
+HPLcom/android/server/connectivity/DnsManager;->getDomainStrings(Ljava/lang/String;)[Ljava/lang/String;
+HPLcom/android/server/connectivity/DnsManager;->getIntSetting(Ljava/lang/String;I)I
+PLcom/android/server/connectivity/DnsManager;->getPrivateDnsConfig()Landroid/net/shared/PrivateDnsConfig;
+HPLcom/android/server/connectivity/DnsManager;->getPrivateDnsConfig(Landroid/content/ContentResolver;)Landroid/net/shared/PrivateDnsConfig;
+HPLcom/android/server/connectivity/DnsManager;->getPrivateDnsMode(Landroid/content/ContentResolver;)Ljava/lang/String;
 HSPLcom/android/server/connectivity/DnsManager;->getPrivateDnsSettingsUris()[Landroid/net/Uri;
-PLcom/android/server/connectivity/DnsManager;->getStringSetting(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/connectivity/DnsManager;->setDefaultDnsSystemProperties(Ljava/util/Collection;)V
-PLcom/android/server/connectivity/DnsManager;->setDnsConfigurationForNetwork(ILandroid/net/LinkProperties;Z)V
-PLcom/android/server/connectivity/DnsManager;->setNetDnsProperty(ILjava/lang/String;)V
-PLcom/android/server/connectivity/DnsManager;->updateParametersSettings()V
-PLcom/android/server/connectivity/DnsManager;->updatePrivateDns(Landroid/net/Network;Landroid/net/shared/PrivateDnsConfig;)Landroid/net/shared/PrivateDnsConfig;
-PLcom/android/server/connectivity/DnsManager;->updatePrivateDnsStatus(ILandroid/net/LinkProperties;)V
+HPLcom/android/server/connectivity/DnsManager;->getStringSetting(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/connectivity/DnsManager;->lambda$setDnsConfigurationForNetwork$0(Landroid/net/LinkProperties;Ljava/net/InetAddress;)Z
+HPLcom/android/server/connectivity/DnsManager;->removeNetwork(Landroid/net/Network;)V
+HPLcom/android/server/connectivity/DnsManager;->setDefaultDnsSystemProperties(Ljava/util/Collection;)V
+HPLcom/android/server/connectivity/DnsManager;->setDnsConfigurationForNetwork(ILandroid/net/LinkProperties;Z)V
+HPLcom/android/server/connectivity/DnsManager;->setNetDnsProperty(ILjava/lang/String;)V
+HPLcom/android/server/connectivity/DnsManager;->updateParametersSettings()V
+HPLcom/android/server/connectivity/DnsManager;->updatePrivateDns(Landroid/net/Network;Landroid/net/shared/PrivateDnsConfig;)Landroid/net/shared/PrivateDnsConfig;
+HPLcom/android/server/connectivity/DnsManager;->updatePrivateDnsStatus(ILandroid/net/LinkProperties;)V
+HPLcom/android/server/connectivity/DnsManager;->updatePrivateDnsValidation(Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationUpdate;)V
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;-><clinit>()V
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->buildEvent(IJLjava/lang/String;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->bytesToInts([B)[I
@@ -7521,15 +12371,15 @@
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->setDhcpErrorEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/DhcpErrorEvent;)V
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->setEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/os/Parcelable;)Z
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->setIpManagerEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/IpManagerEvent;)V
-PLcom/android/server/connectivity/IpConnectivityEventBuilder;->setIpReachabilityEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/IpReachabilityEvent;)V
+HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->setIpReachabilityEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/IpReachabilityEvent;)V
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->setNetworkEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/NetworkEvent;)V
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->setRaEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/RaEvent;)V
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->setValidationProbeEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/ValidationProbeEvent;)V
-PLcom/android/server/connectivity/IpConnectivityEventBuilder;->toPairArray(Landroid/util/SparseIntArray;)[Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$Pair;
+HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->toPairArray(Landroid/util/SparseIntArray;)[Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$Pair;
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->toProto(Landroid/net/ConnectivityMetricsEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/IpConnectivityEventBuilder;->toProto(Landroid/net/metrics/ConnectStats;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
+HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->toProto(Landroid/net/metrics/ConnectStats;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->toProto(Landroid/net/metrics/DefaultNetworkEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
-PLcom/android/server/connectivity/IpConnectivityEventBuilder;->toProto(Landroid/net/metrics/DnsEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
+HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->toProto(Landroid/net/metrics/DnsEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->toProto(Landroid/net/metrics/WakeupStats;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->toProto(Ljava/util/List;)Ljava/util/List;
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->transportToLinkLayer(I)I
@@ -7537,7 +12387,9 @@
 HSPLcom/android/server/connectivity/IpConnectivityMetrics$Impl;-><init>(Lcom/android/server/connectivity/IpConnectivityMetrics;)V
 HSPLcom/android/server/connectivity/IpConnectivityMetrics$Impl;->addNetdEventCallback(ILandroid/net/INetdEventCallback;)Z
 PLcom/android/server/connectivity/IpConnectivityMetrics$Impl;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/connectivity/IpConnectivityMetrics$Impl;->enforceDumpPermission()V
 HSPLcom/android/server/connectivity/IpConnectivityMetrics$Impl;->enforceNetdEventListeningPermission()V
+PLcom/android/server/connectivity/IpConnectivityMetrics$Impl;->enforcePermission(Ljava/lang/String;)V
 HPLcom/android/server/connectivity/IpConnectivityMetrics$Impl;->logEvent(Landroid/net/ConnectivityMetricsEvent;)I
 HSPLcom/android/server/connectivity/IpConnectivityMetrics$LoggerImpl;-><init>(Lcom/android/server/connectivity/IpConnectivityMetrics;)V
 HSPLcom/android/server/connectivity/IpConnectivityMetrics$LoggerImpl;-><init>(Lcom/android/server/connectivity/IpConnectivityMetrics;Lcom/android/server/connectivity/IpConnectivityMetrics$1;)V
@@ -7545,112 +12397,269 @@
 HSPLcom/android/server/connectivity/IpConnectivityMetrics;-><clinit>()V
 HSPLcom/android/server/connectivity/IpConnectivityMetrics;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/connectivity/IpConnectivityMetrics;-><init>(Landroid/content/Context;Ljava/util/function/ToIntFunction;)V
-PLcom/android/server/connectivity/IpConnectivityMetrics;->access$100(Lcom/android/server/connectivity/IpConnectivityMetrics;Landroid/net/ConnectivityMetricsEvent;)I
+HPLcom/android/server/connectivity/IpConnectivityMetrics;->access$100(Lcom/android/server/connectivity/IpConnectivityMetrics;Landroid/net/ConnectivityMetricsEvent;)I
+PLcom/android/server/connectivity/IpConnectivityMetrics;->access$200(Lcom/android/server/connectivity/IpConnectivityMetrics;Ljava/io/PrintWriter;)V
+PLcom/android/server/connectivity/IpConnectivityMetrics;->access$400(Lcom/android/server/connectivity/IpConnectivityMetrics;Ljava/io/OutputStream;)V
+PLcom/android/server/connectivity/IpConnectivityMetrics;->access$400(Lcom/android/server/connectivity/IpConnectivityMetrics;Ljava/io/PrintWriter;)V
+PLcom/android/server/connectivity/IpConnectivityMetrics;->access$500(Lcom/android/server/connectivity/IpConnectivityMetrics;Ljava/io/PrintWriter;)V
 HPLcom/android/server/connectivity/IpConnectivityMetrics;->append(Landroid/net/ConnectivityMetricsEvent;)I
 HSPLcom/android/server/connectivity/IpConnectivityMetrics;->bufferCapacity()I
-PLcom/android/server/connectivity/IpConnectivityMetrics;->cmdList(Ljava/io/PrintWriter;)V
+PLcom/android/server/connectivity/IpConnectivityMetrics;->cmdFlush(Ljava/io/PrintWriter;)V
+HPLcom/android/server/connectivity/IpConnectivityMetrics;->cmdList(Ljava/io/PrintWriter;)V
+PLcom/android/server/connectivity/IpConnectivityMetrics;->cmdListAsBinaryProto(Ljava/io/OutputStream;)V
 PLcom/android/server/connectivity/IpConnectivityMetrics;->flushEncodedOutput()Ljava/lang/String;
 PLcom/android/server/connectivity/IpConnectivityMetrics;->getEvents()Ljava/util/List;
 HSPLcom/android/server/connectivity/IpConnectivityMetrics;->initBuffer()V
-PLcom/android/server/connectivity/IpConnectivityMetrics;->isRateLimited(Landroid/net/ConnectivityMetricsEvent;)Z
+HPLcom/android/server/connectivity/IpConnectivityMetrics;->isRateLimited(Landroid/net/ConnectivityMetricsEvent;)Z
 HSPLcom/android/server/connectivity/IpConnectivityMetrics;->lambda$static$0(Landroid/content/Context;)I
+HSPLcom/android/server/connectivity/IpConnectivityMetrics;->lambda$static$1(Landroid/content/Context;)I
+PLcom/android/server/connectivity/IpConnectivityMetrics;->listEventsAsProtos()Ljava/util/List;
 HSPLcom/android/server/connectivity/IpConnectivityMetrics;->makeRateLimitingBuckets()Landroid/util/ArrayMap;
 HSPLcom/android/server/connectivity/IpConnectivityMetrics;->onBootPhase(I)V
 HSPLcom/android/server/connectivity/IpConnectivityMetrics;->onStart()V
+HPLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;-><init>(Lcom/android/server/connectivity/KeepaliveTracker;Landroid/net/ISocketKeepaliveCallback;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/KeepalivePacketData;IILjava/io/FileDescriptor;)V
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->access$1000(Lcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;)Landroid/net/ISocketKeepaliveCallback;
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->access$700(Lcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;)I
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->access$800(Lcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;)I
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->access$900(Lcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;)I
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->access$902(Lcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;I)I
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->binderDied()V
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->checkInterval()I
+HPLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->checkLimit()I
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->checkNetworkConnected()I
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->checkPermission()I
+HPLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->checkSourceAddress()I
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->getNai()Lcom/android/server/connectivity/NetworkAgentInfo;
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->isValid()I
+HPLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->start(I)V
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->startedStateString(I)Ljava/lang/String;
+HPLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->stop(I)V
+HPLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->toString()Ljava/lang/String;
+PLcom/android/server/connectivity/KeepaliveTracker$KeepaliveInfo;->unlinkDeathRecipient()V
 HSPLcom/android/server/connectivity/KeepaliveTracker;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+PLcom/android/server/connectivity/KeepaliveTracker;->access$000(Lcom/android/server/connectivity/KeepaliveTracker;)Landroid/content/Context;
+PLcom/android/server/connectivity/KeepaliveTracker;->access$100(Lcom/android/server/connectivity/KeepaliveTracker;)Ljava/util/HashMap;
+PLcom/android/server/connectivity/KeepaliveTracker;->access$200(Lcom/android/server/connectivity/KeepaliveTracker;)[I
+HPLcom/android/server/connectivity/KeepaliveTracker;->cleanupStoppedKeepalive(Lcom/android/server/connectivity/NetworkAgentInfo;I)V
 PLcom/android/server/connectivity/KeepaliveTracker;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/connectivity/KeepaliveTracker;->handleCheckKeepalivesStillValid(Lcom/android/server/connectivity/NetworkAgentInfo;)V
-PLcom/android/server/connectivity/KeepaliveTracker;->handleStopAllKeepalives(Lcom/android/server/connectivity/NetworkAgentInfo;I)V
+HPLcom/android/server/connectivity/KeepaliveTracker;->findFirstFreeSlot(Lcom/android/server/connectivity/NetworkAgentInfo;)I
+HPLcom/android/server/connectivity/KeepaliveTracker;->handleCheckKeepalivesStillValid(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/connectivity/KeepaliveTracker;->handleEventSocketKeepalive(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/os/Message;)V
+PLcom/android/server/connectivity/KeepaliveTracker;->handleStartKeepalive(Landroid/os/Message;)V
+HPLcom/android/server/connectivity/KeepaliveTracker;->handleStopAllKeepalives(Lcom/android/server/connectivity/NetworkAgentInfo;I)V
+HPLcom/android/server/connectivity/KeepaliveTracker;->handleStopKeepalive(Lcom/android/server/connectivity/NetworkAgentInfo;II)V
+PLcom/android/server/connectivity/KeepaliveTracker;->isNattKeepaliveSocketValid(Ljava/io/FileDescriptor;I)Z
+PLcom/android/server/connectivity/KeepaliveTracker;->notifyErrorCallback(Landroid/net/ISocketKeepaliveCallback;I)V
+PLcom/android/server/connectivity/KeepaliveTracker;->startNattKeepalive(Lcom/android/server/connectivity/NetworkAgentInfo;Ljava/io/FileDescriptor;IILandroid/net/ISocketKeepaliveCallback;Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/connectivity/KeepaliveTracker;->startNattKeepalive(Lcom/android/server/connectivity/NetworkAgentInfo;Ljava/io/FileDescriptor;ILandroid/net/ISocketKeepaliveCallback;Ljava/lang/String;ILjava/lang/String;I)V
 HSPLcom/android/server/connectivity/LingerMonitor;-><clinit>()V
 HSPLcom/android/server/connectivity/LingerMonitor;-><init>(Landroid/content/Context;Lcom/android/server/connectivity/NetworkNotificationManager;IJ)V
-PLcom/android/server/connectivity/LingerMonitor;->getNotificationSource(Lcom/android/server/connectivity/NetworkAgentInfo;)I
+PLcom/android/server/connectivity/LingerMonitor;->everNotified(Lcom/android/server/connectivity/NetworkAgentInfo;)Z
+HPLcom/android/server/connectivity/LingerMonitor;->getNotificationSource(Lcom/android/server/connectivity/NetworkAgentInfo;)I
+PLcom/android/server/connectivity/LingerMonitor;->isNotificationEnabled(Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/connectivity/NetworkAgentInfo;)Z
 HSPLcom/android/server/connectivity/LingerMonitor;->makeTransportToNameMap()Ljava/util/HashMap;
+PLcom/android/server/connectivity/LingerMonitor;->maybeStopNotifying(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/connectivity/LingerMonitor;->noteDisconnect(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/connectivity/LingerMonitor;->noteLingerDefaultNetwork(Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/connectivity/NetworkAgentInfo;)V
 HSPLcom/android/server/connectivity/MockableSystemProperties;-><init>()V
 PLcom/android/server/connectivity/MockableSystemProperties;->get(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/connectivity/MockableSystemProperties;->getBoolean(Ljava/lang/String;Z)Z
 HSPLcom/android/server/connectivity/MockableSystemProperties;->getInt(Ljava/lang/String;I)I
-PLcom/android/server/connectivity/MockableSystemProperties;->set(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/connectivity/MockableSystemProperties;->set(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$1;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker;)V
+HPLcom/android/server/connectivity/MultipathPolicyTracker$1;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
+HPLcom/android/server/connectivity/MultipathPolicyTracker$1;->onLost(Landroid/net/Network;)V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$2;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker;)V
-PLcom/android/server/connectivity/MultipathPolicyTracker$2;->lambda$onMeteredIfacesChanged$0$MultipathPolicyTracker$2()V
-PLcom/android/server/connectivity/MultipathPolicyTracker$2;->onMeteredIfacesChanged([Ljava/lang/String;)V
+HPLcom/android/server/connectivity/MultipathPolicyTracker$2;->lambda$onMeteredIfacesChanged$0$MultipathPolicyTracker$2()V
+HPLcom/android/server/connectivity/MultipathPolicyTracker$2;->onMeteredIfacesChanged([Ljava/lang/String;)V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$ConfigChangeReceiver;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker;)V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$ConfigChangeReceiver;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker;Lcom/android/server/connectivity/MultipathPolicyTracker$1;)V
-PLcom/android/server/connectivity/MultipathPolicyTracker$ConfigChangeReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/connectivity/MultipathPolicyTracker$ConfigChangeReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$Dependencies;-><init>()V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$Dependencies;->getClock()Ljava/time/Clock;
+HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker$1;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;Lcom/android/server/connectivity/MultipathPolicyTracker;Landroid/net/Network;)V
+PLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker$1;->onThresholdReached(ILjava/lang/String;)V
+HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker;Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
+PLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->access$202(Lcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;J)J
+HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getDailyNonDefaultDataUsage()J
+PLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getMultipathBudget()J
+PLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getMultipathPreference()I
+HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getNetworkTotalBytes(JJ)J
+PLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getQuota()J
+HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getRemainingDailyBudget(JLandroid/util/Range;)J
+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;->haveMultipathBudget()Z
+HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->maybeUnregisterUsageCallback()V
+HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->registerUsageCallback(J)V
+HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->setNetworkCapabilities(Landroid/net/NetworkCapabilities;)V
+PLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->shutdown()V
+HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->updateMultipathBudget()V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$SettingsObserver;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker;Landroid/os/Handler;)V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker;-><clinit>()V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/connectivity/MultipathPolicyTracker$Dependencies;)V
-PLcom/android/server/connectivity/MultipathPolicyTracker;->access$1200(Lcom/android/server/connectivity/MultipathPolicyTracker;)V
-PLcom/android/server/connectivity/MultipathPolicyTracker;->access$900(Lcom/android/server/connectivity/MultipathPolicyTracker;)Landroid/os/Handler;
+PLcom/android/server/connectivity/MultipathPolicyTracker;->access$100(Lcom/android/server/connectivity/MultipathPolicyTracker;)Landroid/content/Context;
+PLcom/android/server/connectivity/MultipathPolicyTracker;->access$1000(Lcom/android/server/connectivity/MultipathPolicyTracker;)Landroid/app/usage/NetworkStatsManager;
+HPLcom/android/server/connectivity/MultipathPolicyTracker;->access$1100(Lcom/android/server/connectivity/MultipathPolicyTracker;)Ljava/util/concurrent/ConcurrentHashMap;
+HSPLcom/android/server/connectivity/MultipathPolicyTracker;->access$1200(Lcom/android/server/connectivity/MultipathPolicyTracker;)V
+HPLcom/android/server/connectivity/MultipathPolicyTracker;->access$300(Lcom/android/server/connectivity/MultipathPolicyTracker;)Ljava/time/Clock;
+PLcom/android/server/connectivity/MultipathPolicyTracker;->access$400()Ljava/lang/String;
+PLcom/android/server/connectivity/MultipathPolicyTracker;->access$500(Lcom/android/server/connectivity/MultipathPolicyTracker;)Landroid/net/NetworkPolicyManager;
+PLcom/android/server/connectivity/MultipathPolicyTracker;->access$600(Landroid/net/NetworkPolicy;J)J
+PLcom/android/server/connectivity/MultipathPolicyTracker;->access$700(Landroid/net/NetworkPolicy;J)J
+HPLcom/android/server/connectivity/MultipathPolicyTracker;->access$800(Lcom/android/server/connectivity/MultipathPolicyTracker;)J
+HPLcom/android/server/connectivity/MultipathPolicyTracker;->access$900(Lcom/android/server/connectivity/MultipathPolicyTracker;)Landroid/os/Handler;
 PLcom/android/server/connectivity/MultipathPolicyTracker;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/connectivity/MultipathPolicyTracker;->getActiveLimit(Landroid/net/NetworkPolicy;J)J
+PLcom/android/server/connectivity/MultipathPolicyTracker;->getActiveWarning(Landroid/net/NetworkPolicy;J)J
+HPLcom/android/server/connectivity/MultipathPolicyTracker;->getDefaultDailyMultipathQuotaBytes()J
+PLcom/android/server/connectivity/MultipathPolicyTracker;->getMultipathPreference(Landroid/net/Network;)Ljava/lang/Integer;
 HSPLcom/android/server/connectivity/MultipathPolicyTracker;->registerNetworkPolicyListener()V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker;->registerTrackMobileCallback()V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker;->start()V
-PLcom/android/server/connectivity/MultipathPolicyTracker;->updateAllMultipathBudgets()V
+HSPLcom/android/server/connectivity/MultipathPolicyTracker;->updateAllMultipathBudgets()V
 PLcom/android/server/connectivity/Nat464Xlat$State;-><clinit>()V
 PLcom/android/server/connectivity/Nat464Xlat$State;-><init>(Ljava/lang/String;I)V
 PLcom/android/server/connectivity/Nat464Xlat;-><clinit>()V
-PLcom/android/server/connectivity/Nat464Xlat;-><init>(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/INetd;Landroid/net/IDnsResolver;Landroid/os/INetworkManagementService;)V
-PLcom/android/server/connectivity/Nat464Xlat;->fixupLinkProperties(Landroid/net/LinkProperties;Landroid/net/LinkProperties;)V
+HPLcom/android/server/connectivity/Nat464Xlat;-><init>(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/INetd;Landroid/net/IDnsResolver;Landroid/os/INetworkManagementService;)V
+PLcom/android/server/connectivity/Nat464Xlat;->enterRunningState()V
+HPLcom/android/server/connectivity/Nat464Xlat;->enterStartingState(Ljava/lang/String;)V
+HPLcom/android/server/connectivity/Nat464Xlat;->fixupLinkProperties(Landroid/net/LinkProperties;Landroid/net/LinkProperties;)V
+PLcom/android/server/connectivity/Nat464Xlat;->getLinkAddress(Ljava/lang/String;)Landroid/net/LinkAddress;
 PLcom/android/server/connectivity/Nat464Xlat;->getNetId()I
-PLcom/android/server/connectivity/Nat464Xlat;->isPrefixDiscoveryStarted()Z
-PLcom/android/server/connectivity/Nat464Xlat;->isRunning()Z
-PLcom/android/server/connectivity/Nat464Xlat;->isStarted()Z
-PLcom/android/server/connectivity/Nat464Xlat;->leaveStartedState()V
-PLcom/android/server/connectivity/Nat464Xlat;->requiresClat(Lcom/android/server/connectivity/NetworkAgentInfo;)Z
-PLcom/android/server/connectivity/Nat464Xlat;->startPrefixDiscovery()V
-PLcom/android/server/connectivity/Nat464Xlat;->stop()V
-PLcom/android/server/connectivity/Nat464Xlat;->stopPrefixDiscovery()V
-PLcom/android/server/connectivity/Nat464Xlat;->toString()Ljava/lang/String;
-PLcom/android/server/connectivity/Nat464Xlat;->update()V
-PLcom/android/server/connectivity/NetdEventListenerService$NetworkMetricsSnapshot;-><init>()V
+HPLcom/android/server/connectivity/Nat464Xlat;->handleInterfaceLinkStateChanged(Ljava/lang/String;Z)V
+HPLcom/android/server/connectivity/Nat464Xlat;->handleInterfaceRemoved(Ljava/lang/String;)V
+HPLcom/android/server/connectivity/Nat464Xlat;->interfaceLinkStateChanged(Ljava/lang/String;Z)V
+PLcom/android/server/connectivity/Nat464Xlat;->interfaceRemoved(Ljava/lang/String;)V
+HPLcom/android/server/connectivity/Nat464Xlat;->isPrefixDiscoveryStarted()Z
+HPLcom/android/server/connectivity/Nat464Xlat;->isRunning()Z
+HPLcom/android/server/connectivity/Nat464Xlat;->isStarted()Z
+HPLcom/android/server/connectivity/Nat464Xlat;->isStarting()Z
+HPLcom/android/server/connectivity/Nat464Xlat;->lambda$interfaceLinkStateChanged$0$Nat464Xlat(Ljava/lang/String;Z)V
+PLcom/android/server/connectivity/Nat464Xlat;->lambda$interfaceRemoved$1$Nat464Xlat(Ljava/lang/String;)V
+HPLcom/android/server/connectivity/Nat464Xlat;->leaveStartedState()V
+PLcom/android/server/connectivity/Nat464Xlat;->makeLinkProperties(Landroid/net/LinkAddress;)Landroid/net/LinkProperties;
+HPLcom/android/server/connectivity/Nat464Xlat;->requiresClat(Lcom/android/server/connectivity/NetworkAgentInfo;)Z
+PLcom/android/server/connectivity/Nat464Xlat;->setNat64Prefix(Landroid/net/IpPrefix;)V
+HPLcom/android/server/connectivity/Nat464Xlat;->shouldStartClat(Lcom/android/server/connectivity/NetworkAgentInfo;)Z
+HPLcom/android/server/connectivity/Nat464Xlat;->start()V
+HPLcom/android/server/connectivity/Nat464Xlat;->startPrefixDiscovery()V
+HPLcom/android/server/connectivity/Nat464Xlat;->stop()V
+HPLcom/android/server/connectivity/Nat464Xlat;->stopPrefixDiscovery()V
+HPLcom/android/server/connectivity/Nat464Xlat;->toString()Ljava/lang/String;
+HPLcom/android/server/connectivity/Nat464Xlat;->update()V
+HPLcom/android/server/connectivity/NetdEventListenerService$NetworkMetricsSnapshot;-><init>()V
 HPLcom/android/server/connectivity/NetdEventListenerService$NetworkMetricsSnapshot;->collect(JLandroid/util/SparseArray;)Lcom/android/server/connectivity/NetdEventListenerService$NetworkMetricsSnapshot;
-PLcom/android/server/connectivity/NetdEventListenerService$NetworkMetricsSnapshot;->toString()Ljava/lang/String;
+HPLcom/android/server/connectivity/NetdEventListenerService$NetworkMetricsSnapshot;->toString()Ljava/lang/String;
 HSPLcom/android/server/connectivity/NetdEventListenerService;-><clinit>()V
 HSPLcom/android/server/connectivity/NetdEventListenerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/connectivity/NetdEventListenerService;-><init>(Landroid/net/ConnectivityManager;)V
 HSPLcom/android/server/connectivity/NetdEventListenerService;->addNetdEventCallback(ILandroid/net/INetdEventCallback;)Z
+HPLcom/android/server/connectivity/NetdEventListenerService;->addWakeupEvent(Landroid/net/metrics/WakeupEvent;)V
 HPLcom/android/server/connectivity/NetdEventListenerService;->collectPendingMetricsSnapshot(J)V
-PLcom/android/server/connectivity/NetdEventListenerService;->flushStatistics(Ljava/util/List;)V
-PLcom/android/server/connectivity/NetdEventListenerService;->getMetricsForNetwork(JI)Landroid/net/metrics/NetworkMetrics;
-PLcom/android/server/connectivity/NetdEventListenerService;->getTransports(I)J
+HPLcom/android/server/connectivity/NetdEventListenerService;->flushStatistics(Ljava/util/List;)V
+HPLcom/android/server/connectivity/NetdEventListenerService;->getMetricsForNetwork(JI)Landroid/net/metrics/NetworkMetrics;
+PLcom/android/server/connectivity/NetdEventListenerService;->getNetworkMetricsSnapshots()[Lcom/android/server/connectivity/NetdEventListenerService$NetworkMetricsSnapshot;
+HPLcom/android/server/connectivity/NetdEventListenerService;->getTransports(I)J
 HSPLcom/android/server/connectivity/NetdEventListenerService;->isValidCallerType(I)Z
-PLcom/android/server/connectivity/NetdEventListenerService;->list(Ljava/io/PrintWriter;)V
+HPLcom/android/server/connectivity/NetdEventListenerService;->list(Ljava/io/PrintWriter;)V
+PLcom/android/server/connectivity/NetdEventListenerService;->listAsProtos()Ljava/util/List;
+HPLcom/android/server/connectivity/NetdEventListenerService;->listAsProtos(Ljava/util/List;)V
 HPLcom/android/server/connectivity/NetdEventListenerService;->onConnectEvent(IIILjava/lang/String;II)V
 HPLcom/android/server/connectivity/NetdEventListenerService;->onDnsEvent(IIIILjava/lang/String;[Ljava/lang/String;II)V
-PLcom/android/server/connectivity/NetdEventListenerService;->onPrivateDnsValidationEvent(ILjava/lang/String;Ljava/lang/String;Z)V
+HPLcom/android/server/connectivity/NetdEventListenerService;->onNat64PrefixEvent(IZLjava/lang/String;I)V
+HPLcom/android/server/connectivity/NetdEventListenerService;->onPrivateDnsValidationEvent(ILjava/lang/String;Ljava/lang/String;Z)V
 HPLcom/android/server/connectivity/NetdEventListenerService;->onTcpSocketStatsEvent([I[I[I[I[I)V
-PLcom/android/server/connectivity/NetdEventListenerService;->onWakeupEvent(Ljava/lang/String;III[BLjava/lang/String;Ljava/lang/String;IIJ)V
+HPLcom/android/server/connectivity/NetdEventListenerService;->onWakeupEvent(Ljava/lang/String;III[BLjava/lang/String;Ljava/lang/String;IIJ)V
 PLcom/android/server/connectivity/NetdEventListenerService;->projectSnapshotTime(J)J
 PLcom/android/server/connectivity/NetworkAgentInfo$1;-><clinit>()V
+HPLcom/android/server/connectivity/NetworkAgentInfo$LingerTimer;-><init>(Landroid/net/NetworkRequest;J)V
+HPLcom/android/server/connectivity/NetworkAgentInfo$LingerTimer;->compareTo(Lcom/android/server/connectivity/NetworkAgentInfo$LingerTimer;)I
+HPLcom/android/server/connectivity/NetworkAgentInfo$LingerTimer;->compareTo(Ljava/lang/Object;)I
+PLcom/android/server/connectivity/NetworkAgentInfo$LingerTimer;->toString()Ljava/lang/String;
 HSPLcom/android/server/connectivity/NetworkAgentInfo;-><clinit>()V
-PLcom/android/server/connectivity/NetworkAgentInfo;-><init>(Landroid/os/Messenger;Lcom/android/internal/util/AsyncChannel;Landroid/net/Network;Landroid/net/NetworkInfo;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;Landroid/net/NetworkScore;Landroid/content/Context;Landroid/os/Handler;Landroid/net/NetworkMisc;Lcom/android/server/ConnectivityService;Landroid/net/INetd;Landroid/net/IDnsResolver;Landroid/os/INetworkManagementService;I)V
-PLcom/android/server/connectivity/NetworkAgentInfo;->addRequest(Landroid/net/NetworkRequest;)Z
+HPLcom/android/server/connectivity/NetworkAgentInfo;-><init>(Landroid/os/Messenger;Lcom/android/internal/util/AsyncChannel;Landroid/net/Network;Landroid/net/NetworkInfo;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;Landroid/net/NetworkScore;Landroid/content/Context;Landroid/os/Handler;Landroid/net/NetworkAgentConfig;Lcom/android/server/ConnectivityService;Landroid/net/INetd;Landroid/net/IDnsResolver;Landroid/os/INetworkManagementService;I)V
+HPLcom/android/server/connectivity/NetworkAgentInfo;-><init>(Landroid/os/Messenger;Lcom/android/internal/util/AsyncChannel;Landroid/net/Network;Landroid/net/NetworkInfo;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;Landroid/net/NetworkScore;Landroid/content/Context;Landroid/os/Handler;Landroid/net/NetworkMisc;Lcom/android/server/ConnectivityService;Landroid/net/INetd;Landroid/net/IDnsResolver;Landroid/os/INetworkManagementService;I)V
+HPLcom/android/server/connectivity/NetworkAgentInfo;->addRequest(Landroid/net/NetworkRequest;)Z
+PLcom/android/server/connectivity/NetworkAgentInfo;->clearLingerState()V
+HPLcom/android/server/connectivity/NetworkAgentInfo;->compareTo(Lcom/android/server/connectivity/NetworkAgentInfo;)I
+HPLcom/android/server/connectivity/NetworkAgentInfo;->compareTo(Ljava/lang/Object;)I
+PLcom/android/server/connectivity/NetworkAgentInfo;->connService()Lcom/android/server/ConnectivityService;
+PLcom/android/server/connectivity/NetworkAgentInfo;->dumpLingerTimers(Ljava/io/PrintWriter;)V
 HPLcom/android/server/connectivity/NetworkAgentInfo;->getAndSetNetworkCapabilities(Landroid/net/NetworkCapabilities;)Landroid/net/NetworkCapabilities;
-PLcom/android/server/connectivity/NetworkAgentInfo;->getCurrentScore()I
+HPLcom/android/server/connectivity/NetworkAgentInfo;->getCurrentScore()I
 HPLcom/android/server/connectivity/NetworkAgentInfo;->getCurrentScore(Z)I
+HPLcom/android/server/connectivity/NetworkAgentInfo;->getCurrentScoreAsValidated()I
+HPLcom/android/server/connectivity/NetworkAgentInfo;->getLingerExpiry()J
 HPLcom/android/server/connectivity/NetworkAgentInfo;->getNetworkState()Landroid/net/NetworkState;
-PLcom/android/server/connectivity/NetworkAgentInfo;->ignoreWifiUnvalidationPenalty()Z
-PLcom/android/server/connectivity/NetworkAgentInfo;->isBackgroundNetwork()Z
-PLcom/android/server/connectivity/NetworkAgentInfo;->isLingering()Z
-PLcom/android/server/connectivity/NetworkAgentInfo;->isSatisfyingRequest(I)Z
-PLcom/android/server/connectivity/NetworkAgentInfo;->isVPN()Z
-PLcom/android/server/connectivity/NetworkAgentInfo;->name()Ljava/lang/String;
+PLcom/android/server/connectivity/NetworkAgentInfo;->handler()Landroid/os/Handler;
+HPLcom/android/server/connectivity/NetworkAgentInfo;->ignoreWifiUnvalidationPenalty()Z
+HPLcom/android/server/connectivity/NetworkAgentInfo;->isBackgroundNetwork()Z
+HPLcom/android/server/connectivity/NetworkAgentInfo;->isLingering()Z
+HPLcom/android/server/connectivity/NetworkAgentInfo;->isSatisfyingRequest(I)Z
+HPLcom/android/server/connectivity/NetworkAgentInfo;->isSuspended()Z
+HPLcom/android/server/connectivity/NetworkAgentInfo;->isVPN()Z
+PLcom/android/server/connectivity/NetworkAgentInfo;->linger()V
+HPLcom/android/server/connectivity/NetworkAgentInfo;->lingerRequest(Landroid/net/NetworkRequest;JJ)V
+HPLcom/android/server/connectivity/NetworkAgentInfo;->name()Ljava/lang/String;
+HPLcom/android/server/connectivity/NetworkAgentInfo;->netAgentConfig()Landroid/net/NetworkAgentConfig;
 PLcom/android/server/connectivity/NetworkAgentInfo;->netMisc()Landroid/net/NetworkMisc;
 PLcom/android/server/connectivity/NetworkAgentInfo;->network()Landroid/net/Network;
-PLcom/android/server/connectivity/NetworkAgentInfo;->networkMonitor()Landroid/net/NetworkMonitorManager;
-PLcom/android/server/connectivity/NetworkAgentInfo;->numForegroundNetworkRequests()I
-PLcom/android/server/connectivity/NetworkAgentInfo;->numNetworkRequests()I
-PLcom/android/server/connectivity/NetworkAgentInfo;->requestAt(I)Landroid/net/NetworkRequest;
-PLcom/android/server/connectivity/NetworkAgentInfo;->satisfies(Landroid/net/NetworkRequest;)Z
+HPLcom/android/server/connectivity/NetworkAgentInfo;->networkMonitor()Landroid/net/NetworkMonitorManager;
+PLcom/android/server/connectivity/NetworkAgentInfo;->numBackgroundNetworkRequests()I
+HPLcom/android/server/connectivity/NetworkAgentInfo;->numForegroundNetworkRequests()I
+HPLcom/android/server/connectivity/NetworkAgentInfo;->numNetworkRequests()I
+HPLcom/android/server/connectivity/NetworkAgentInfo;->numRequestNetworkRequests()I
+HPLcom/android/server/connectivity/NetworkAgentInfo;->onNetworkMonitorCreated(Landroid/net/INetworkMonitor;)V
+HPLcom/android/server/connectivity/NetworkAgentInfo;->removeRequest(I)V
+HPLcom/android/server/connectivity/NetworkAgentInfo;->requestAt(I)Landroid/net/NetworkRequest;
+HPLcom/android/server/connectivity/NetworkAgentInfo;->satisfies(Landroid/net/NetworkRequest;)Z
+PLcom/android/server/connectivity/NetworkAgentInfo;->satisfiesImmutableCapabilitiesOf(Landroid/net/NetworkRequest;)Z
 PLcom/android/server/connectivity/NetworkAgentInfo;->setNetworkScore(Landroid/net/NetworkScore;)V
-PLcom/android/server/connectivity/NetworkAgentInfo;->toString()Ljava/lang/String;
-PLcom/android/server/connectivity/NetworkAgentInfo;->unlingerRequest(Landroid/net/NetworkRequest;)Z
-PLcom/android/server/connectivity/NetworkAgentInfo;->updateLingerTimer()V
+HPLcom/android/server/connectivity/NetworkAgentInfo;->toString()Ljava/lang/String;
+PLcom/android/server/connectivity/NetworkAgentInfo;->unlinger()V
+HPLcom/android/server/connectivity/NetworkAgentInfo;->unlingerRequest(Landroid/net/NetworkRequest;)Z
+HPLcom/android/server/connectivity/NetworkAgentInfo;->updateLingerTimer()V
 HPLcom/android/server/connectivity/NetworkAgentInfo;->updateRequestCounts(ZLandroid/net/NetworkRequest;)V
+PLcom/android/server/connectivity/NetworkDiagnostics$DnsResponseCode;-><clinit>()V
+PLcom/android/server/connectivity/NetworkDiagnostics$DnsResponseCode;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/connectivity/NetworkDiagnostics$DnsResponseCode;->values()[Lcom/android/server/connectivity/NetworkDiagnostics$DnsResponseCode;
+PLcom/android/server/connectivity/NetworkDiagnostics$DnsUdpCheck;-><init>(Lcom/android/server/connectivity/NetworkDiagnostics;Ljava/net/InetAddress;Lcom/android/server/connectivity/NetworkDiagnostics$Measurement;)V
+PLcom/android/server/connectivity/NetworkDiagnostics$DnsUdpCheck;->getDnsQueryPacket(Ljava/lang/String;)[B
+PLcom/android/server/connectivity/NetworkDiagnostics$DnsUdpCheck;->responseCodeStr(I)Ljava/lang/String;
+HPLcom/android/server/connectivity/NetworkDiagnostics$DnsUdpCheck;->run()V
+PLcom/android/server/connectivity/NetworkDiagnostics$IcmpCheck;-><init>(Lcom/android/server/connectivity/NetworkDiagnostics;Ljava/net/InetAddress;Lcom/android/server/connectivity/NetworkDiagnostics$Measurement;)V
+PLcom/android/server/connectivity/NetworkDiagnostics$IcmpCheck;-><init>(Lcom/android/server/connectivity/NetworkDiagnostics;Ljava/net/InetAddress;Ljava/net/InetAddress;Lcom/android/server/connectivity/NetworkDiagnostics$Measurement;)V
+HPLcom/android/server/connectivity/NetworkDiagnostics$IcmpCheck;->run()V
+PLcom/android/server/connectivity/NetworkDiagnostics$Measurement;-><init>(Lcom/android/server/connectivity/NetworkDiagnostics;)V
+PLcom/android/server/connectivity/NetworkDiagnostics$Measurement;->checkSucceeded()Z
+PLcom/android/server/connectivity/NetworkDiagnostics$Measurement;->maybeFixupTimes()V
+PLcom/android/server/connectivity/NetworkDiagnostics$Measurement;->recordFailure(Ljava/lang/String;)V
+PLcom/android/server/connectivity/NetworkDiagnostics$Measurement;->recordSuccess(Ljava/lang/String;)V
+HPLcom/android/server/connectivity/NetworkDiagnostics$Measurement;->toString()Ljava/lang/String;
+PLcom/android/server/connectivity/NetworkDiagnostics$SimpleSocketCheck;-><init>(Lcom/android/server/connectivity/NetworkDiagnostics;Ljava/net/InetAddress;Lcom/android/server/connectivity/NetworkDiagnostics$Measurement;)V
+PLcom/android/server/connectivity/NetworkDiagnostics$SimpleSocketCheck;-><init>(Lcom/android/server/connectivity/NetworkDiagnostics;Ljava/net/InetAddress;Ljava/net/InetAddress;Lcom/android/server/connectivity/NetworkDiagnostics$Measurement;)V
+PLcom/android/server/connectivity/NetworkDiagnostics$SimpleSocketCheck;->close()V
+PLcom/android/server/connectivity/NetworkDiagnostics$SimpleSocketCheck;->getSocketAddressString()Ljava/lang/String;
+PLcom/android/server/connectivity/NetworkDiagnostics$SimpleSocketCheck;->setupSocket(IIJJI)V
+PLcom/android/server/connectivity/NetworkDiagnostics;-><clinit>()V
+HPLcom/android/server/connectivity/NetworkDiagnostics;-><init>(Landroid/net/Network;Landroid/net/LinkProperties;J)V
+PLcom/android/server/connectivity/NetworkDiagnostics;->access$000(Lcom/android/server/connectivity/NetworkDiagnostics;)Ljava/util/concurrent/CountDownLatch;
+HPLcom/android/server/connectivity/NetworkDiagnostics;->access$100()J
+PLcom/android/server/connectivity/NetworkDiagnostics;->access$200(Lcom/android/server/connectivity/NetworkDiagnostics;)Ljava/lang/Integer;
+PLcom/android/server/connectivity/NetworkDiagnostics;->access$300(Lcom/android/server/connectivity/NetworkDiagnostics;)Landroid/net/Network;
+PLcom/android/server/connectivity/NetworkDiagnostics;->access$400(Lcom/android/server/connectivity/NetworkDiagnostics;)J
+HPLcom/android/server/connectivity/NetworkDiagnostics;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/connectivity/NetworkDiagnostics;->getInterfaceIndex(Ljava/lang/String;)Ljava/lang/Integer;
+HPLcom/android/server/connectivity/NetworkDiagnostics;->getMeasurements()Ljava/util/List;
+HPLcom/android/server/connectivity/NetworkDiagnostics;->now()J
+PLcom/android/server/connectivity/NetworkDiagnostics;->prepareDnsMeasurement(Ljava/net/InetAddress;)V
+PLcom/android/server/connectivity/NetworkDiagnostics;->prepareExplicitSourceIcmpMeasurements(Ljava/net/InetAddress;)V
+PLcom/android/server/connectivity/NetworkDiagnostics;->prepareIcmpMeasurement(Ljava/net/InetAddress;)V
+PLcom/android/server/connectivity/NetworkDiagnostics;->startMeasurements()V
+PLcom/android/server/connectivity/NetworkDiagnostics;->totalMeasurementCount()I
+PLcom/android/server/connectivity/NetworkDiagnostics;->waitForMeasurements()V
 PLcom/android/server/connectivity/NetworkNotificationManager$1;-><clinit>()V
 PLcom/android/server/connectivity/NetworkNotificationManager$NotificationType$Holder;-><clinit>()V
 PLcom/android/server/connectivity/NetworkNotificationManager$NotificationType$Holder;->access$000()Landroid/util/SparseArray;
@@ -7660,18 +12669,28 @@
 PLcom/android/server/connectivity/NetworkNotificationManager$NotificationType;->values()[Lcom/android/server/connectivity/NetworkNotificationManager$NotificationType;
 HSPLcom/android/server/connectivity/NetworkNotificationManager;-><clinit>()V
 HSPLcom/android/server/connectivity/NetworkNotificationManager;-><init>(Landroid/content/Context;Landroid/telephony/TelephonyManager;Landroid/app/NotificationManager;)V
-PLcom/android/server/connectivity/NetworkNotificationManager;->clearNotification(I)V
+PLcom/android/server/connectivity/NetworkNotificationManager;->approximateTransportType(Lcom/android/server/connectivity/NetworkAgentInfo;)I
+HPLcom/android/server/connectivity/NetworkNotificationManager;->clearNotification(I)V
+HPLcom/android/server/connectivity/NetworkNotificationManager;->clearNotification(ILcom/android/server/connectivity/NetworkNotificationManager$NotificationType;)V
+PLcom/android/server/connectivity/NetworkNotificationManager;->getFirstTransportType(Lcom/android/server/connectivity/NetworkAgentInfo;)I
+PLcom/android/server/connectivity/NetworkNotificationManager;->getIcon(ILcom/android/server/connectivity/NetworkNotificationManager$NotificationType;)I
 PLcom/android/server/connectivity/NetworkNotificationManager;->getTransportName(I)Ljava/lang/String;
+PLcom/android/server/connectivity/NetworkNotificationManager;->nameOf(I)Ljava/lang/String;
 PLcom/android/server/connectivity/NetworkNotificationManager;->priority(Lcom/android/server/connectivity/NetworkNotificationManager$NotificationType;)I
-PLcom/android/server/connectivity/NetworkNotificationManager;->showNotification(ILcom/android/server/connectivity/NetworkNotificationManager$NotificationType;Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/app/PendingIntent;Z)V
+PLcom/android/server/connectivity/NetworkNotificationManager;->setProvNotificationVisible(ZILjava/lang/String;)V
+HPLcom/android/server/connectivity/NetworkNotificationManager;->showNotification(ILcom/android/server/connectivity/NetworkNotificationManager$NotificationType;Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/app/PendingIntent;Z)V
+PLcom/android/server/connectivity/NetworkNotificationManager;->tagFor(I)Ljava/lang/String;
 HSPLcom/android/server/connectivity/PacManager$1;-><init>(Lcom/android/server/connectivity/PacManager;)V
 HSPLcom/android/server/connectivity/PacManager$PacRefreshIntentReceiver;-><init>(Lcom/android/server/connectivity/PacManager;)V
 HSPLcom/android/server/connectivity/PacManager;-><init>(Landroid/content/Context;Landroid/os/Handler;I)V
+PLcom/android/server/connectivity/PacManager;->getAlarmManager()Landroid/app/AlarmManager;
+PLcom/android/server/connectivity/PacManager;->setCurrentProxyScriptUrl(Landroid/net/ProxyInfo;)Z
 HSPLcom/android/server/connectivity/PermissionMonitor$PackageListObserver;-><init>(Lcom/android/server/connectivity/PermissionMonitor;)V
 HSPLcom/android/server/connectivity/PermissionMonitor$PackageListObserver;-><init>(Lcom/android/server/connectivity/PermissionMonitor;Lcom/android/server/connectivity/PermissionMonitor$1;)V
 PLcom/android/server/connectivity/PermissionMonitor$PackageListObserver;->getPermissionForUid(I)I
 PLcom/android/server/connectivity/PermissionMonitor$PackageListObserver;->onPackageAdded(Ljava/lang/String;I)V
 PLcom/android/server/connectivity/PermissionMonitor$PackageListObserver;->onPackageChanged(Ljava/lang/String;I)V
+PLcom/android/server/connectivity/PermissionMonitor$PackageListObserver;->onPackageRemoved(Ljava/lang/String;I)V
 HSPLcom/android/server/connectivity/PermissionMonitor;-><clinit>()V
 HSPLcom/android/server/connectivity/PermissionMonitor;-><init>(Landroid/content/Context;Landroid/net/INetd;)V
 PLcom/android/server/connectivity/PermissionMonitor;->access$000(Lcom/android/server/connectivity/PermissionMonitor;)Landroid/content/pm/PackageManager;
@@ -7686,65 +12705,154 @@
 HSPLcom/android/server/connectivity/PermissionMonitor;->hasRestrictedNetworkPermission(Landroid/content/pm/PackageInfo;)Z
 HSPLcom/android/server/connectivity/PermissionMonitor;->hasUseBackgroundNetworksPermission(I)Z
 PLcom/android/server/connectivity/PermissionMonitor;->highestPermissionForUid(Ljava/lang/Boolean;Ljava/lang/String;)Ljava/lang/Boolean;
+HPLcom/android/server/connectivity/PermissionMonitor;->intersectUids(Ljava/util/Set;Ljava/util/Set;)Ljava/util/Set;
 HSPLcom/android/server/connectivity/PermissionMonitor;->isVendorApp(Landroid/content/pm/ApplicationInfo;)Z
+HPLcom/android/server/connectivity/PermissionMonitor;->lambda$removeBypassingUids$0$PermissionMonitor(Ljava/lang/Integer;)Z
 HSPLcom/android/server/connectivity/PermissionMonitor;->log(Ljava/lang/String;)V
-PLcom/android/server/connectivity/PermissionMonitor;->onPackageAdded(Ljava/lang/String;I)V
-PLcom/android/server/connectivity/PermissionMonitor;->onPackageRemoved(I)V
-PLcom/android/server/connectivity/PermissionMonitor;->sendPackagePermissionsForUid(II)V
+PLcom/android/server/connectivity/PermissionMonitor;->loge(Ljava/lang/String;)V
+PLcom/android/server/connectivity/PermissionMonitor;->loge(Ljava/lang/String;Ljava/lang/Throwable;)V
+HPLcom/android/server/connectivity/PermissionMonitor;->onPackageAdded(Ljava/lang/String;I)V
+HPLcom/android/server/connectivity/PermissionMonitor;->onPackageRemoved(I)V
+PLcom/android/server/connectivity/PermissionMonitor;->onUserAdded(I)V
+PLcom/android/server/connectivity/PermissionMonitor;->onUserRemoved(I)V
+PLcom/android/server/connectivity/PermissionMonitor;->onVpnUidRangesAdded(Ljava/lang/String;Ljava/util/Set;I)V
+PLcom/android/server/connectivity/PermissionMonitor;->onVpnUidRangesRemoved(Ljava/lang/String;Ljava/util/Set;I)V
+PLcom/android/server/connectivity/PermissionMonitor;->removeBypassingUids(Ljava/util/Set;I)V
+HPLcom/android/server/connectivity/PermissionMonitor;->sendPackagePermissionsForUid(II)V
 HSPLcom/android/server/connectivity/PermissionMonitor;->sendPackagePermissionsToNetd(Landroid/util/SparseIntArray;)V
 HSPLcom/android/server/connectivity/PermissionMonitor;->startMonitoring()V
 HSPLcom/android/server/connectivity/PermissionMonitor;->toIntArray(Ljava/util/Collection;)[I
 HSPLcom/android/server/connectivity/PermissionMonitor;->update(Ljava/util/Set;Ljava/util/Map;Z)V
+PLcom/android/server/connectivity/PermissionMonitor;->updateVpnUids(Ljava/lang/String;Ljava/util/Set;Z)V
 HSPLcom/android/server/connectivity/ProxyTracker;-><clinit>()V
 HSPLcom/android/server/connectivity/ProxyTracker;-><init>(Landroid/content/Context;Landroid/os/Handler;I)V
-PLcom/android/server/connectivity/ProxyTracker;->canonicalizeProxyInfo(Landroid/net/ProxyInfo;)Landroid/net/ProxyInfo;
+HPLcom/android/server/connectivity/ProxyTracker;->canonicalizeProxyInfo(Landroid/net/ProxyInfo;)Landroid/net/ProxyInfo;
+PLcom/android/server/connectivity/ProxyTracker;->getDefaultProxy()Landroid/net/ProxyInfo;
 HSPLcom/android/server/connectivity/ProxyTracker;->getGlobalProxy()Landroid/net/ProxyInfo;
 HSPLcom/android/server/connectivity/ProxyTracker;->loadDeprecatedGlobalHttpProxy()V
 HSPLcom/android/server/connectivity/ProxyTracker;->loadGlobalProxy()V
-PLcom/android/server/connectivity/ProxyTracker;->proxyInfoEqual(Landroid/net/ProxyInfo;Landroid/net/ProxyInfo;)Z
-PLcom/android/server/connectivity/ProxyTracker;->setDefaultProxy(Landroid/net/ProxyInfo;)V
+HPLcom/android/server/connectivity/ProxyTracker;->proxyInfoEqual(Landroid/net/ProxyInfo;Landroid/net/ProxyInfo;)Z
+HPLcom/android/server/connectivity/ProxyTracker;->sendProxyBroadcast()V
+HPLcom/android/server/connectivity/ProxyTracker;->setDefaultProxy(Landroid/net/ProxyInfo;)V
+PLcom/android/server/connectivity/ProxyTracker;->setGlobalProxy(Landroid/net/ProxyInfo;)V
 HSPLcom/android/server/connectivity/TcpKeepaliveController;-><clinit>()V
 HSPLcom/android/server/connectivity/TcpKeepaliveController;-><init>(Landroid/os/Handler;)V
-PLcom/android/server/connectivity/Vpn$2;-><init>(Lcom/android/server/connectivity/Vpn;)V
-PLcom/android/server/connectivity/Vpn$2;->interfaceRemoved(Ljava/lang/String;)V
-PLcom/android/server/connectivity/Vpn$SystemServices;-><init>(Landroid/content/Context;)V
-PLcom/android/server/connectivity/Vpn$SystemServices;->settingsSecureGetIntForUser(Ljava/lang/String;II)I
-PLcom/android/server/connectivity/Vpn$SystemServices;->settingsSecureGetStringForUser(Ljava/lang/String;I)Ljava/lang/String;
-PLcom/android/server/connectivity/Vpn;-><clinit>()V
-PLcom/android/server/connectivity/Vpn;-><init>(Landroid/os/Looper;Landroid/content/Context;Landroid/os/INetworkManagementService;I)V
-PLcom/android/server/connectivity/Vpn;-><init>(Landroid/os/Looper;Landroid/content/Context;Landroid/os/INetworkManagementService;ILcom/android/server/connectivity/Vpn$SystemServices;)V
-HPLcom/android/server/connectivity/Vpn;->appliesToUid(I)Z
-PLcom/android/server/connectivity/Vpn;->doesPackageTargetAtLeastQ(Ljava/lang/String;)Z
+PLcom/android/server/connectivity/Vpn$1;-><init>(Lcom/android/server/connectivity/Vpn;Landroid/os/Looper;Landroid/content/Context;Ljava/lang/String;Landroid/net/NetworkInfo;Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;ILandroid/net/NetworkAgentConfig;I)V
+PLcom/android/server/connectivity/Vpn$1;-><init>(Lcom/android/server/connectivity/Vpn;Landroid/os/Looper;Landroid/content/Context;Ljava/lang/String;Landroid/net/NetworkInfo;Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;ILandroid/net/NetworkMisc;I)V
+PLcom/android/server/connectivity/Vpn$1;->unwanted()V
+HSPLcom/android/server/connectivity/Vpn$2;-><init>(Lcom/android/server/connectivity/Vpn;)V
+HPLcom/android/server/connectivity/Vpn$2;->interfaceRemoved(Ljava/lang/String;)V
+PLcom/android/server/connectivity/Vpn$Connection;-><init>(Lcom/android/server/connectivity/Vpn;)V
+PLcom/android/server/connectivity/Vpn$Connection;-><init>(Lcom/android/server/connectivity/Vpn;Lcom/android/server/connectivity/Vpn$1;)V
+PLcom/android/server/connectivity/Vpn$Connection;->access$000(Lcom/android/server/connectivity/Vpn$Connection;)Landroid/os/IBinder;
+PLcom/android/server/connectivity/Vpn$Connection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/connectivity/Vpn$Connection;->onServiceDisconnected(Landroid/content/ComponentName;)V
+PLcom/android/server/connectivity/Vpn$LegacyVpnRunner$1;-><init>(Lcom/android/server/connectivity/Vpn$LegacyVpnRunner;)V
+PLcom/android/server/connectivity/Vpn$LegacyVpnRunner$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/connectivity/Vpn$LegacyVpnRunner;-><init>(Lcom/android/server/connectivity/Vpn;Lcom/android/internal/net/VpnConfig;[Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/net/VpnProfile;)V
+PLcom/android/server/connectivity/Vpn$LegacyVpnRunner;->access$1000(Lcom/android/server/connectivity/Vpn$LegacyVpnRunner;)Ljava/util/concurrent/atomic/AtomicInteger;
+PLcom/android/server/connectivity/Vpn$LegacyVpnRunner;->bringup()V
+PLcom/android/server/connectivity/Vpn$LegacyVpnRunner;->checkInterruptAndDelay(Z)V
+PLcom/android/server/connectivity/Vpn$LegacyVpnRunner;->exit()V
+PLcom/android/server/connectivity/Vpn$LegacyVpnRunner;->run()V
+PLcom/android/server/connectivity/Vpn$LegacyVpnRunner;->waitForDaemonsToStop()V
+HSPLcom/android/server/connectivity/Vpn$SystemServices;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/connectivity/Vpn$SystemServices;->settingsSecureGetIntForUser(Ljava/lang/String;II)I
+HSPLcom/android/server/connectivity/Vpn$SystemServices;->settingsSecureGetStringForUser(Ljava/lang/String;I)Ljava/lang/String;
+PLcom/android/server/connectivity/Vpn$SystemServices;->settingsSecurePutIntForUser(Ljava/lang/String;II)V
+PLcom/android/server/connectivity/Vpn$SystemServices;->settingsSecurePutStringForUser(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/connectivity/Vpn;-><clinit>()V
+HSPLcom/android/server/connectivity/Vpn;-><init>(Landroid/os/Looper;Landroid/content/Context;Landroid/os/INetworkManagementService;I)V
+HSPLcom/android/server/connectivity/Vpn;-><init>(Landroid/os/Looper;Landroid/content/Context;Landroid/os/INetworkManagementService;ILcom/android/server/connectivity/Vpn$SystemServices;)V
+PLcom/android/server/connectivity/Vpn;->access$1300(Lcom/android/server/connectivity/Vpn;)V
+PLcom/android/server/connectivity/Vpn;->access$1400(Lcom/android/server/connectivity/Vpn;)V
+PLcom/android/server/connectivity/Vpn;->access$1500(Lcom/android/server/connectivity/Vpn;)Landroid/net/NetworkInfo;
+PLcom/android/server/connectivity/Vpn;->access$300(Lcom/android/server/connectivity/Vpn;)Ljava/lang/String;
+PLcom/android/server/connectivity/Vpn;->access$302(Lcom/android/server/connectivity/Vpn;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/connectivity/Vpn;->access$400(Lcom/android/server/connectivity/Vpn;Ljava/lang/String;)I
+PLcom/android/server/connectivity/Vpn;->access$502(Lcom/android/server/connectivity/Vpn;Landroid/app/PendingIntent;)Landroid/app/PendingIntent;
+PLcom/android/server/connectivity/Vpn;->access$600(Lcom/android/server/connectivity/Vpn;)Lcom/android/server/connectivity/Vpn$Connection;
+PLcom/android/server/connectivity/Vpn;->access$602(Lcom/android/server/connectivity/Vpn;Lcom/android/server/connectivity/Vpn$Connection;)Lcom/android/server/connectivity/Vpn$Connection;
+PLcom/android/server/connectivity/Vpn;->access$700(Lcom/android/server/connectivity/Vpn;)Landroid/content/Context;
+PLcom/android/server/connectivity/Vpn;->access$800(Lcom/android/server/connectivity/Vpn;)V
+PLcom/android/server/connectivity/Vpn;->access$900(Lcom/android/server/connectivity/Vpn;)Z
+HPLcom/android/server/connectivity/Vpn;->addUserToRanges(Ljava/util/Set;ILjava/util/List;Ljava/util/List;)V
+PLcom/android/server/connectivity/Vpn;->agentConnect()V
+PLcom/android/server/connectivity/Vpn;->agentDisconnect()V
+PLcom/android/server/connectivity/Vpn;->agentDisconnect(Landroid/net/NetworkAgent;)V
+HSPLcom/android/server/connectivity/Vpn;->appliesToUid(I)Z
+HPLcom/android/server/connectivity/Vpn;->applyUnderlyingCapabilities(Landroid/net/ConnectivityManager;[Landroid/net/Network;Landroid/net/NetworkCapabilities;Z)V
+PLcom/android/server/connectivity/Vpn;->canHaveRestrictedProfile(I)Z
+HPLcom/android/server/connectivity/Vpn;->createUserAndRestrictedProfilesRanges(ILjava/util/List;Ljava/util/List;)Ljava/util/Set;
+PLcom/android/server/connectivity/Vpn;->doesPackageHaveAppop(Landroid/content/Context;Ljava/lang/String;I)Z
+HSPLcom/android/server/connectivity/Vpn;->doesPackageTargetAtLeastQ(Ljava/lang/String;)Z
+HPLcom/android/server/connectivity/Vpn;->enforceControlPermission()V
 PLcom/android/server/connectivity/Vpn;->enforceControlPermissionOrInternalCaller()V
+PLcom/android/server/connectivity/Vpn;->enforceSettingsPermission()V
+HPLcom/android/server/connectivity/Vpn;->establish(Lcom/android/internal/net/VpnConfig;)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/connectivity/Vpn;->findIPv4DefaultRoute(Landroid/net/LinkProperties;)Landroid/net/RouteInfo;
 PLcom/android/server/connectivity/Vpn;->getAlwaysOnPackage()Ljava/lang/String;
-PLcom/android/server/connectivity/Vpn;->getAppUid(Ljava/lang/String;I)I
+HSPLcom/android/server/connectivity/Vpn;->getAppUid(Ljava/lang/String;I)I
+PLcom/android/server/connectivity/Vpn;->getAppsUids(Ljava/util/List;I)Ljava/util/SortedSet;
+PLcom/android/server/connectivity/Vpn;->getLegacyVpnInfo()Lcom/android/internal/net/LegacyVpnInfo;
+PLcom/android/server/connectivity/Vpn;->getLegacyVpnInfoPrivileged()Lcom/android/internal/net/LegacyVpnInfo;
 HPLcom/android/server/connectivity/Vpn;->getLockdown()Z
-PLcom/android/server/connectivity/Vpn;->getUnderlyingNetworks()[Landroid/net/Network;
-PLcom/android/server/connectivity/Vpn;->getVpnInfo()Lcom/android/internal/net/VpnInfo;
-PLcom/android/server/connectivity/Vpn;->isCurrentPreparedPackage(Ljava/lang/String;)Z
-PLcom/android/server/connectivity/Vpn;->isNullOrLegacyVpn(Ljava/lang/String;)Z
-PLcom/android/server/connectivity/Vpn;->isRunningLocked()Z
-PLcom/android/server/connectivity/Vpn;->loadAlwaysOnPackage()V
-PLcom/android/server/connectivity/Vpn;->setAllowOnlyVpnForUids(ZLjava/util/Collection;)Z
-PLcom/android/server/connectivity/Vpn;->setAlwaysOnPackageInternal(Ljava/lang/String;ZLjava/util/List;)Z
-PLcom/android/server/connectivity/Vpn;->setVpnForcedLocked(Z)V
+HPLcom/android/server/connectivity/Vpn;->getNetId()I
+HPLcom/android/server/connectivity/Vpn;->getUnderlyingNetworks()[Landroid/net/Network;
+HPLcom/android/server/connectivity/Vpn;->getVpnConfig()Lcom/android/internal/net/VpnConfig;
+HPLcom/android/server/connectivity/Vpn;->getVpnInfo()Lcom/android/internal/net/VpnInfo;
+PLcom/android/server/connectivity/Vpn;->isAlwaysOnPackageSupported(Ljava/lang/String;)Z
+HPLcom/android/server/connectivity/Vpn;->isCallerEstablishedOwnerLocked()Z
+HSPLcom/android/server/connectivity/Vpn;->isCurrentPreparedPackage(Ljava/lang/String;)Z
+HSPLcom/android/server/connectivity/Vpn;->isNullOrLegacyVpn(Ljava/lang/String;)Z
+HSPLcom/android/server/connectivity/Vpn;->isRunningLocked()Z
+PLcom/android/server/connectivity/Vpn;->isVpnPreConsented(Landroid/content/Context;Ljava/lang/String;I)Z
+PLcom/android/server/connectivity/Vpn;->isVpnServicePreConsented(Landroid/content/Context;Ljava/lang/String;)Z
+HPLcom/android/server/connectivity/Vpn;->isVpnUserPreConsented(Ljava/lang/String;)Z
+HSPLcom/android/server/connectivity/Vpn;->loadAlwaysOnPackage()V
+HPLcom/android/server/connectivity/Vpn;->makeLinkProperties()Landroid/net/LinkProperties;
+PLcom/android/server/connectivity/Vpn;->onUserAdded(I)V
+PLcom/android/server/connectivity/Vpn;->onUserRemoved(I)V
+PLcom/android/server/connectivity/Vpn;->onUserStopped()V
+PLcom/android/server/connectivity/Vpn;->prepare(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/connectivity/Vpn;->prepare(Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/connectivity/Vpn;->prepareInternal(Ljava/lang/String;)V
+PLcom/android/server/connectivity/Vpn;->prepareStatusIntent()V
+PLcom/android/server/connectivity/Vpn;->saveAlwaysOnPackage()V
+HSPLcom/android/server/connectivity/Vpn;->setAllowOnlyVpnForUids(ZLjava/util/Collection;)Z
+PLcom/android/server/connectivity/Vpn;->setAlwaysOnPackage(Ljava/lang/String;ZLjava/util/List;)Z
+HSPLcom/android/server/connectivity/Vpn;->setAlwaysOnPackageInternal(Ljava/lang/String;ZLjava/util/List;)Z
+PLcom/android/server/connectivity/Vpn;->setLockdown(Z)V
+PLcom/android/server/connectivity/Vpn;->setPackageAuthorization(Ljava/lang/String;I)Z
+PLcom/android/server/connectivity/Vpn;->setPackageAuthorization(Ljava/lang/String;Z)Z
+HPLcom/android/server/connectivity/Vpn;->setUnderlyingNetworks([Landroid/net/Network;)Z
+HSPLcom/android/server/connectivity/Vpn;->setVpnForcedLocked(Z)V
 PLcom/android/server/connectivity/Vpn;->startAlwaysOnVpn()Z
-PLcom/android/server/connectivity/Vpn;->updateAlwaysOnNotification(Landroid/net/NetworkInfo$DetailedState;)V
-PLcom/android/server/connectivity/Vpn;->updateCapabilities(Landroid/net/Network;)Landroid/net/NetworkCapabilities;
+PLcom/android/server/connectivity/Vpn;->startLegacyVpn(Lcom/android/internal/net/VpnConfig;[Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/net/VpnProfile;)V
+PLcom/android/server/connectivity/Vpn;->startLegacyVpn(Lcom/android/internal/net/VpnProfile;Landroid/security/KeyStore;Landroid/net/LinkProperties;)V
+PLcom/android/server/connectivity/Vpn;->startLegacyVpnPrivileged(Lcom/android/internal/net/VpnProfile;Landroid/security/KeyStore;Landroid/net/LinkProperties;)V
+PLcom/android/server/connectivity/Vpn;->stopLegacyVpnPrivileged()V
+HSPLcom/android/server/connectivity/Vpn;->updateAlwaysOnNotification(Landroid/net/NetworkInfo$DetailedState;)V
+HSPLcom/android/server/connectivity/Vpn;->updateCapabilities(Landroid/net/Network;)Landroid/net/NetworkCapabilities;
+HPLcom/android/server/connectivity/Vpn;->updateState(Landroid/net/NetworkInfo$DetailedState;Ljava/lang/String;)V
 HSPLcom/android/server/content/-$$Lambda$ContentService$5-BNVxd6JTWU9ogp3u-0kfiqgbI;-><init>(Lcom/android/server/content/ContentService;)V
-PLcom/android/server/content/-$$Lambda$ContentService$5-BNVxd6JTWU9ogp3u-0kfiqgbI;->getPackages(Ljava/lang/String;I)[Ljava/lang/String;
+HSPLcom/android/server/content/-$$Lambda$ContentService$5-BNVxd6JTWU9ogp3u-0kfiqgbI;->getPackages(Ljava/lang/String;I)[Ljava/lang/String;
+PLcom/android/server/content/-$$Lambda$SyncManager$4nklbtZn-JuPLOkU32f34xZoiug;-><init>(Lcom/android/server/content/SyncManager;I)V
+PLcom/android/server/content/-$$Lambda$SyncManager$4nklbtZn-JuPLOkU32f34xZoiug;->run()V
 HSPLcom/android/server/content/-$$Lambda$SyncManager$68MEyNkTh36YmYoFlURJoRa_-cY;-><clinit>()V
 HSPLcom/android/server/content/-$$Lambda$SyncManager$68MEyNkTh36YmYoFlURJoRa_-cY;-><init>()V
-PLcom/android/server/content/-$$Lambda$SyncManager$68MEyNkTh36YmYoFlURJoRa_-cY;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/content/-$$Lambda$SyncManager$68MEyNkTh36YmYoFlURJoRa_-cY;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/content/-$$Lambda$SyncManager$6y-gkGdDn-rSLmR9G8Pz_n9zy2A;-><init>(Lcom/android/server/content/SyncManager;I)V
 PLcom/android/server/content/-$$Lambda$SyncManager$6y-gkGdDn-rSLmR9G8Pz_n9zy2A;->run()V
-PLcom/android/server/content/-$$Lambda$SyncManager$9EoLpTk5JrHZn9R-uS0lqCVrpRw;-><init>(Ljava/lang/StringBuilder;Lcom/android/server/content/SyncManager$PrintTable;)V
-PLcom/android/server/content/-$$Lambda$SyncManager$9EoLpTk5JrHZn9R-uS0lqCVrpRw;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/content/-$$Lambda$SyncManager$CjX_2uO4O4xJPQnKzeqvGwd87Dc;-><init>(Lcom/android/server/content/SyncManager;I)V
-PLcom/android/server/content/-$$Lambda$SyncManager$CjX_2uO4O4xJPQnKzeqvGwd87Dc;->run()V
-PLcom/android/server/content/-$$Lambda$SyncManager$EMXCZP9LDjgUTYbLsEoVu9Ccntw;-><init>(Lcom/android/server/content/SyncManager;)V
-PLcom/android/server/content/-$$Lambda$SyncManager$EMXCZP9LDjgUTYbLsEoVu9Ccntw;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/content/-$$Lambda$SyncManager$9EoLpTk5JrHZn9R-uS0lqCVrpRw;-><init>(Ljava/lang/StringBuilder;Lcom/android/server/content/SyncManager$PrintTable;)V
+HPLcom/android/server/content/-$$Lambda$SyncManager$9EoLpTk5JrHZn9R-uS0lqCVrpRw;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/content/-$$Lambda$SyncManager$BRG-YMU-C9QC6JWVXAvsoEZC6Zc;-><init>(Lcom/android/server/content/SyncManager;Landroid/accounts/AccountAndUser;IILjava/lang/String;Landroid/os/Bundle;IJIIILjava/lang/String;)V
+HSPLcom/android/server/content/-$$Lambda$SyncManager$CjX_2uO4O4xJPQnKzeqvGwd87Dc;-><init>(Lcom/android/server/content/SyncManager;I)V
+HSPLcom/android/server/content/-$$Lambda$SyncManager$CjX_2uO4O4xJPQnKzeqvGwd87Dc;->run()V
+HPLcom/android/server/content/-$$Lambda$SyncManager$EMXCZP9LDjgUTYbLsEoVu9Ccntw;-><init>(Lcom/android/server/content/SyncManager;)V
+HPLcom/android/server/content/-$$Lambda$SyncManager$EMXCZP9LDjgUTYbLsEoVu9Ccntw;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/content/-$$Lambda$SyncManager$HhiSFjEoPA_Hnv3xYZGfwkalc68;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/-$$Lambda$SyncManager$HhiSFjEoPA_Hnv3xYZGfwkalc68;->onAppPermissionChanged(Landroid/accounts/Account;I)V
 PLcom/android/server/content/-$$Lambda$SyncManager$XKEiBZ17uDgUCTwf_kh9_pH7usQ;-><init>(Lcom/android/server/content/SyncManager;Landroid/accounts/AccountAndUser;ILjava/lang/String;Landroid/os/Bundle;IJIIILjava/lang/String;)V
 PLcom/android/server/content/-$$Lambda$SyncManager$XKEiBZ17uDgUCTwf_kh9_pH7usQ;->onReady()V
 PLcom/android/server/content/-$$Lambda$SyncManager$ag0YGuZ1oL06fytmNlyErbNyYcw;-><clinit>()V
@@ -7752,31 +12860,33 @@
 PLcom/android/server/content/-$$Lambda$SyncManager$ag0YGuZ1oL06fytmNlyErbNyYcw;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/content/-$$Lambda$SyncManager$bVs0A6OYdmGkOiq_lbp5MiBwelw;-><clinit>()V
 HSPLcom/android/server/content/-$$Lambda$SyncManager$bVs0A6OYdmGkOiq_lbp5MiBwelw;-><init>()V
-PLcom/android/server/content/-$$Lambda$SyncManager$bVs0A6OYdmGkOiq_lbp5MiBwelw;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/content/-$$Lambda$SyncManager$bVs0A6OYdmGkOiq_lbp5MiBwelw;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/content/-$$Lambda$SyncManager$pdoEVnuSkmOrvULQ9M7Ic-lU5vw;-><clinit>()V
 PLcom/android/server/content/-$$Lambda$SyncManager$pdoEVnuSkmOrvULQ9M7Ic-lU5vw;-><init>()V
 PLcom/android/server/content/-$$Lambda$SyncManager$pdoEVnuSkmOrvULQ9M7Ic-lU5vw;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/content/-$$Lambda$SyncManager$rDUHWai3SU0BXk1TE0bLDap9gVc;-><clinit>()V
 PLcom/android/server/content/-$$Lambda$SyncManager$rDUHWai3SU0BXk1TE0bLDap9gVc;-><init>()V
 PLcom/android/server/content/-$$Lambda$SyncManager$rDUHWai3SU0BXk1TE0bLDap9gVc;->test(Ljava/lang/Object;)Z
-PLcom/android/server/content/-$$Lambda$SyncManager$zZUXjd-GLFQgHtMQ3vq0EWHvir8;-><init>(Landroid/content/Context;Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
+HPLcom/android/server/content/-$$Lambda$SyncManager$zZUXjd-GLFQgHtMQ3vq0EWHvir8;-><init>(Landroid/content/Context;Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
 PLcom/android/server/content/-$$Lambda$SyncManager$zZUXjd-GLFQgHtMQ3vq0EWHvir8;->run()V
 HSPLcom/android/server/content/-$$Lambda$SyncManagerConstants$qo5ldQVp10jCUY9aavBZDKP2k6Q;-><init>(Lcom/android/server/content/SyncManagerConstants;)V
 HSPLcom/android/server/content/-$$Lambda$SyncManagerConstants$qo5ldQVp10jCUY9aavBZDKP2k6Q;->run()V
 HSPLcom/android/server/content/ContentService$1;-><init>(Lcom/android/server/content/ContentService;)V
-PLcom/android/server/content/ContentService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/content/ContentService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/content/ContentService$2;-><init>(Lcom/android/server/content/ContentService;Landroid/util/SparseIntArray;)V
-PLcom/android/server/content/ContentService$2;->compare(Ljava/lang/Integer;Ljava/lang/Integer;)I
-PLcom/android/server/content/ContentService$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/content/ContentService$2;->compare(Ljava/lang/Integer;Ljava/lang/Integer;)I
+HPLcom/android/server/content/ContentService$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/content/ContentService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/content/ContentService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/content/ContentService$Lifecycle;->onCleanupUser(I)V
 HSPLcom/android/server/content/ContentService$Lifecycle;->onStart()V
-PLcom/android/server/content/ContentService$Lifecycle;->onStartUser(I)V
+HSPLcom/android/server/content/ContentService$Lifecycle;->onStartUser(I)V
+PLcom/android/server/content/ContentService$Lifecycle;->onStopUser(I)V
 PLcom/android/server/content/ContentService$Lifecycle;->onUnlockUser(I)V
-PLcom/android/server/content/ContentService$ObserverCall;-><init>(Landroid/database/IContentObserver;ZLandroid/net/Uri;II)V
-HPLcom/android/server/content/ContentService$ObserverCall;->run()V
+HSPLcom/android/server/content/ContentService$ObserverCall;-><init>(Landroid/database/IContentObserver;ZLandroid/net/Uri;II)V
+HSPLcom/android/server/content/ContentService$ObserverCall;->run()V
 HSPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;-><init>(Lcom/android/server/content/ContentService$ObserverNode;Landroid/database/IContentObserver;ZLjava/lang/Object;IIILandroid/net/Uri;)V
-PLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;->access$400(Lcom/android/server/content/ContentService$ObserverNode$ObserverEntry;)I
+HSPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;->access$400(Lcom/android/server/content/ContentService$ObserverNode$ObserverEntry;)I
 HPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;->binderDied()V
 HPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;->dumpLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/util/SparseIntArray;)V
 HSPLcom/android/server/content/ContentService$ObserverNode;-><init>(Ljava/lang/String;)V
@@ -7785,31 +12895,34 @@
 HSPLcom/android/server/content/ContentService$ObserverNode;->collectMyObserversLocked(Landroid/net/Uri;ZLandroid/database/IContentObserver;ZIILjava/util/ArrayList;)V
 HSPLcom/android/server/content/ContentService$ObserverNode;->collectObserversLocked(Landroid/net/Uri;ILandroid/database/IContentObserver;ZIILjava/util/ArrayList;)V
 HSPLcom/android/server/content/ContentService$ObserverNode;->countUriSegments(Landroid/net/Uri;)I
-PLcom/android/server/content/ContentService$ObserverNode;->dumpLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[ILandroid/util/SparseIntArray;)V
+HPLcom/android/server/content/ContentService$ObserverNode;->dumpLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[ILandroid/util/SparseIntArray;)V
 HSPLcom/android/server/content/ContentService$ObserverNode;->getUriSegment(Landroid/net/Uri;I)Ljava/lang/String;
-HPLcom/android/server/content/ContentService$ObserverNode;->removeObserverLocked(Landroid/database/IContentObserver;)Z
+HSPLcom/android/server/content/ContentService$ObserverNode;->removeObserverLocked(Landroid/database/IContentObserver;)Z
 HSPLcom/android/server/content/ContentService;-><clinit>()V
 HSPLcom/android/server/content/ContentService;-><init>(Landroid/content/Context;Z)V
+HSPLcom/android/server/content/ContentService;->access$000(Lcom/android/server/content/ContentService;)Landroid/util/SparseArray;
+HPLcom/android/server/content/ContentService;->access$100(Lcom/android/server/content/ContentService;ILjava/lang/String;Landroid/net/Uri;)V
 HSPLcom/android/server/content/ContentService;->access$200()Lcom/android/internal/os/BinderDeathDispatcher;
-PLcom/android/server/content/ContentService;->addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V
-PLcom/android/server/content/ContentService;->addStatusChangeListener(ILandroid/content/ISyncStatusObserver;)V
+HPLcom/android/server/content/ContentService;->addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V
+HPLcom/android/server/content/ContentService;->addStatusChangeListener(ILandroid/content/ISyncStatusObserver;)V
 PLcom/android/server/content/ContentService;->cancelSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)V
-PLcom/android/server/content/ContentService;->cancelSyncAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;I)V
-PLcom/android/server/content/ContentService;->checkUriPermission(Landroid/net/Uri;IIII)I
-PLcom/android/server/content/ContentService;->clampPeriod(J)J
-PLcom/android/server/content/ContentService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/content/ContentService;->cancelSyncAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;I)V
+HPLcom/android/server/content/ContentService;->checkUriPermission(Landroid/net/Uri;IIII)I
+HPLcom/android/server/content/ContentService;->clampPeriod(J)J
+HPLcom/android/server/content/ContentService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/content/ContentService;->enforceCrossUserPermission(ILjava/lang/String;)V
-PLcom/android/server/content/ContentService;->findOrCreateCacheLocked(ILjava/lang/String;)Landroid/util/ArrayMap;
-PLcom/android/server/content/ContentService;->getCache(Ljava/lang/String;Landroid/net/Uri;I)Landroid/os/Bundle;
-PLcom/android/server/content/ContentService;->getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I
-PLcom/android/server/content/ContentService;->getIsSyncableAsUser(Landroid/accounts/Account;Ljava/lang/String;I)I
+HPLcom/android/server/content/ContentService;->enforceNonFullCrossUserPermission(ILjava/lang/String;)V
+HPLcom/android/server/content/ContentService;->findOrCreateCacheLocked(ILjava/lang/String;)Landroid/util/ArrayMap;
+HPLcom/android/server/content/ContentService;->getCache(Ljava/lang/String;Landroid/net/Uri;I)Landroid/os/Bundle;
+HPLcom/android/server/content/ContentService;->getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I
+HPLcom/android/server/content/ContentService;->getIsSyncableAsUser(Landroid/accounts/Account;Ljava/lang/String;I)I
 HPLcom/android/server/content/ContentService;->getMasterSyncAutomatically()Z
 HPLcom/android/server/content/ContentService;->getMasterSyncAutomaticallyAsUser(I)Z
-PLcom/android/server/content/ContentService;->getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Ljava/util/List;
+HPLcom/android/server/content/ContentService;->getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Ljava/util/List;
 HSPLcom/android/server/content/ContentService;->getProviderPackageName(Landroid/net/Uri;I)Ljava/lang/String;
 HSPLcom/android/server/content/ContentService;->getSyncAdapterPackagesForAuthorityAsUser(Ljava/lang/String;I)[Ljava/lang/String;
-PLcom/android/server/content/ContentService;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType;
-PLcom/android/server/content/ContentService;->getSyncAdapterTypesAsUser(I)[Landroid/content/SyncAdapterType;
+HPLcom/android/server/content/ContentService;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType;
+HPLcom/android/server/content/ContentService;->getSyncAdapterTypesAsUser(I)[Landroid/content/SyncAdapterType;
 HPLcom/android/server/content/ContentService;->getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z
 HPLcom/android/server/content/ContentService;->getSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;I)Z
 HSPLcom/android/server/content/ContentService;->getSyncExemptionAndCleanUpExtrasForCaller(ILandroid/os/Bundle;)I
@@ -7817,38 +12930,43 @@
 HSPLcom/android/server/content/ContentService;->getSyncManager()Lcom/android/server/content/SyncManager;
 HSPLcom/android/server/content/ContentService;->handleIncomingUser(Landroid/net/Uri;IIIZI)I
 HSPLcom/android/server/content/ContentService;->invalidateCacheLocked(ILjava/lang/String;Landroid/net/Uri;)V
-PLcom/android/server/content/ContentService;->isSyncActive(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Z
-PLcom/android/server/content/ContentService;->isSyncPendingAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;I)Z
-PLcom/android/server/content/ContentService;->lambda$new$0$ContentService(Ljava/lang/String;I)[Ljava/lang/String;
+HPLcom/android/server/content/ContentService;->isSyncActive(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Z
+HPLcom/android/server/content/ContentService;->isSyncPendingAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;I)Z
+HSPLcom/android/server/content/ContentService;->lambda$new$0$ContentService(Ljava/lang/String;I)[Ljava/lang/String;
+PLcom/android/server/content/ContentService;->normalizeSyncable(I)I
 HSPLcom/android/server/content/ContentService;->notifyChange(Landroid/net/Uri;Landroid/database/IContentObserver;ZIIILjava/lang/String;)V
 HSPLcom/android/server/content/ContentService;->notifyChange([Landroid/net/Uri;Landroid/database/IContentObserver;ZIIILjava/lang/String;)V
 HSPLcom/android/server/content/ContentService;->onBootPhase(I)V
-PLcom/android/server/content/ContentService;->onStartUser(I)V
+PLcom/android/server/content/ContentService;->onDbCorruption(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/content/ContentService;->onStartUser(I)V
+PLcom/android/server/content/ContentService;->onStopUser(I)V
 PLcom/android/server/content/ContentService;->onUnlockUser(I)V
-PLcom/android/server/content/ContentService;->putCache(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;I)V
+HPLcom/android/server/content/ContentService;->putCache(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;I)V
 HSPLcom/android/server/content/ContentService;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/IContentObserver;II)V
-PLcom/android/server/content/ContentService;->removePeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
-PLcom/android/server/content/ContentService;->setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V
-PLcom/android/server/content/ContentService;->setIsSyncableAsUser(Landroid/accounts/Account;Ljava/lang/String;II)V
-PLcom/android/server/content/ContentService;->setSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;ZI)V
+HPLcom/android/server/content/ContentService;->removePeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/content/ContentService;->removeStatusChangeListener(Landroid/content/ISyncStatusObserver;)V
+HPLcom/android/server/content/ContentService;->setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V
+HPLcom/android/server/content/ContentService;->setIsSyncableAsUser(Landroid/accounts/Account;Ljava/lang/String;II)V
+PLcom/android/server/content/ContentService;->setMasterSyncAutomaticallyAsUser(ZI)V
+HPLcom/android/server/content/ContentService;->setSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;ZI)V
 PLcom/android/server/content/ContentService;->sync(Landroid/content/SyncRequest;Ljava/lang/String;)V
-PLcom/android/server/content/ContentService;->syncAsUser(Landroid/content/SyncRequest;ILjava/lang/String;)V
-HPLcom/android/server/content/ContentService;->unregisterContentObserver(Landroid/database/IContentObserver;)V
-PLcom/android/server/content/ContentService;->validateExtras(ILandroid/os/Bundle;)V
+HPLcom/android/server/content/ContentService;->syncAsUser(Landroid/content/SyncRequest;ILjava/lang/String;)V
+HSPLcom/android/server/content/ContentService;->unregisterContentObserver(Landroid/database/IContentObserver;)V
+HPLcom/android/server/content/ContentService;->validateExtras(ILandroid/os/Bundle;)V
 PLcom/android/server/content/SyncAdapterStateFetcher;-><init>()V
-PLcom/android/server/content/SyncAdapterStateFetcher;->getStandbyBucket(ILjava/lang/String;)I
-PLcom/android/server/content/SyncAdapterStateFetcher;->isAppActive(I)Z
+HPLcom/android/server/content/SyncAdapterStateFetcher;->getStandbyBucket(ILjava/lang/String;)I
+HPLcom/android/server/content/SyncAdapterStateFetcher;->isAppActive(I)Z
 PLcom/android/server/content/SyncJobService;-><clinit>()V
-PLcom/android/server/content/SyncJobService;-><init>()V
+HPLcom/android/server/content/SyncJobService;-><init>()V
 HPLcom/android/server/content/SyncJobService;->callJobFinished(IZLjava/lang/String;)V
-PLcom/android/server/content/SyncJobService;->callJobFinishedInner(IZLjava/lang/String;)V
-PLcom/android/server/content/SyncJobService;->getInstance()Lcom/android/server/content/SyncJobService;
-PLcom/android/server/content/SyncJobService;->isReady()Z
-PLcom/android/server/content/SyncJobService;->jobParametersToString(Landroid/app/job/JobParameters;)Ljava/lang/String;
-PLcom/android/server/content/SyncJobService;->markSyncStarted(I)V
-PLcom/android/server/content/SyncJobService;->onStartJob(Landroid/app/job/JobParameters;)Z
-PLcom/android/server/content/SyncJobService;->onStopJob(Landroid/app/job/JobParameters;)Z
-PLcom/android/server/content/SyncJobService;->updateInstance()V
+HPLcom/android/server/content/SyncJobService;->callJobFinishedInner(IZLjava/lang/String;)V
+HPLcom/android/server/content/SyncJobService;->getInstance()Lcom/android/server/content/SyncJobService;
+HPLcom/android/server/content/SyncJobService;->isReady()Z
+HPLcom/android/server/content/SyncJobService;->jobParametersToString(Landroid/app/job/JobParameters;)Ljava/lang/String;
+HPLcom/android/server/content/SyncJobService;->markSyncStarted(I)V
+HPLcom/android/server/content/SyncJobService;->onStartJob(Landroid/app/job/JobParameters;)Z
+HPLcom/android/server/content/SyncJobService;->onStopJob(Landroid/app/job/JobParameters;)Z
+HPLcom/android/server/content/SyncJobService;->updateInstance()V
 HSPLcom/android/server/content/SyncLogger$RotatingFileLogger$MyHandler;-><init>(Lcom/android/server/content/SyncLogger$RotatingFileLogger;Landroid/os/Looper;)V
 HSPLcom/android/server/content/SyncLogger$RotatingFileLogger$MyHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/content/SyncLogger$RotatingFileLogger$MyHandler;->log(J[Ljava/lang/Object;)V
@@ -7856,32 +12974,42 @@
 HSPLcom/android/server/content/SyncLogger$RotatingFileLogger;-><init>()V
 HSPLcom/android/server/content/SyncLogger$RotatingFileLogger;->closeCurrentLogLocked()V
 PLcom/android/server/content/SyncLogger$RotatingFileLogger;->dumpAll(Ljava/io/PrintWriter;)V
-PLcom/android/server/content/SyncLogger$RotatingFileLogger;->dumpFile(Ljava/io/PrintWriter;Ljava/io/File;)V
+HPLcom/android/server/content/SyncLogger$RotatingFileLogger;->dumpFile(Ljava/io/PrintWriter;Ljava/io/File;)V
 HSPLcom/android/server/content/SyncLogger$RotatingFileLogger;->enabled()Z
-PLcom/android/server/content/SyncLogger$RotatingFileLogger;->jobParametersToString(Landroid/app/job/JobParameters;)Ljava/lang/String;
+HPLcom/android/server/content/SyncLogger$RotatingFileLogger;->jobParametersToString(Landroid/app/job/JobParameters;)Ljava/lang/String;
 HSPLcom/android/server/content/SyncLogger$RotatingFileLogger;->log([Ljava/lang/Object;)V
 HSPLcom/android/server/content/SyncLogger$RotatingFileLogger;->logInner(J[Ljava/lang/Object;)V
 HSPLcom/android/server/content/SyncLogger$RotatingFileLogger;->openLogLocked(J)V
-PLcom/android/server/content/SyncLogger$RotatingFileLogger;->purgeOldLogs()V
+HPLcom/android/server/content/SyncLogger$RotatingFileLogger;->purgeOldLogs()V
 HSPLcom/android/server/content/SyncLogger;-><init>()V
 HSPLcom/android/server/content/SyncLogger;->getInstance()Lcom/android/server/content/SyncLogger;
+PLcom/android/server/content/SyncLogger;->logSafe(Landroid/accounts/Account;)Ljava/lang/String;
+PLcom/android/server/content/SyncLogger;->logSafe(Lcom/android/server/content/SyncManager$ActiveSyncContext;)Ljava/lang/String;
 PLcom/android/server/content/SyncLogger;->logSafe(Lcom/android/server/content/SyncOperation;)Ljava/lang/String;
+PLcom/android/server/content/SyncLogger;->logSafe(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Ljava/lang/String;
 HSPLcom/android/server/content/SyncManager$10;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$10;->onAuthorityRemoved(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
 HSPLcom/android/server/content/SyncManager$11;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$11;->onServiceChanged(Landroid/content/SyncAdapterType;IZ)V
+PLcom/android/server/content/SyncManager$11;->onServiceChanged(Ljava/lang/Object;IZ)V
+PLcom/android/server/content/SyncManager$12;-><init>(Lcom/android/server/content/SyncManager;Landroid/os/Handler;Landroid/content/ContentResolver;)V
+PLcom/android/server/content/SyncManager$12;->onChange(Z)V
 PLcom/android/server/content/SyncManager$13;-><init>(Lcom/android/server/content/SyncManager;)V
-PLcom/android/server/content/SyncManager$13;->compare(Landroid/content/pm/RegisteredServicesCache$ServiceInfo;Landroid/content/pm/RegisteredServicesCache$ServiceInfo;)I
-PLcom/android/server/content/SyncManager$13;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/content/SyncManager$13;->compare(Landroid/content/pm/RegisteredServicesCache$ServiceInfo;Landroid/content/pm/RegisteredServicesCache$ServiceInfo;)I
+HPLcom/android/server/content/SyncManager$13;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/content/SyncManager$14;-><init>(Lcom/android/server/content/SyncManager;)V
-PLcom/android/server/content/SyncManager$14;->compare(Lcom/android/server/content/SyncManager$AuthoritySyncStats;Lcom/android/server/content/SyncManager$AuthoritySyncStats;)I
-PLcom/android/server/content/SyncManager$14;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLcom/android/server/content/SyncManager$15;-><init>(Lcom/android/server/content/SyncManager;)V
+HPLcom/android/server/content/SyncManager$14;->compare(Lcom/android/server/content/SyncManager$AuthoritySyncStats;Lcom/android/server/content/SyncManager$AuthoritySyncStats;)I
+HPLcom/android/server/content/SyncManager$14;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/content/SyncManager$15;-><init>(Lcom/android/server/content/SyncManager;)V
 PLcom/android/server/content/SyncManager$15;->compare(Lcom/android/server/content/SyncManager$AccountSyncStats;Lcom/android/server/content/SyncManager$AccountSyncStats;)I
 PLcom/android/server/content/SyncManager$15;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/content/SyncManager$1;-><init>(Lcom/android/server/content/SyncManager;)V
 HSPLcom/android/server/content/SyncManager$2;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/content/SyncManager$3;-><init>(Lcom/android/server/content/SyncManager;)V
-PLcom/android/server/content/SyncManager$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/content/SyncManager$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/content/SyncManager$4;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/content/SyncManager$5;-><init>(Lcom/android/server/content/SyncManager;)V
 PLcom/android/server/content/SyncManager$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/content/SyncManager$6;-><init>(Lcom/android/server/content/SyncManager;)V
@@ -7889,57 +13017,64 @@
 PLcom/android/server/content/SyncManager$7;-><init>(Lcom/android/server/content/SyncManager;)V
 HPLcom/android/server/content/SyncManager$7;->run()V
 HSPLcom/android/server/content/SyncManager$8;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$8;->onSyncRequest(Lcom/android/server/content/SyncStorageEngine$EndPoint;ILandroid/os/Bundle;III)V
 HSPLcom/android/server/content/SyncManager$9;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$9;->onPeriodicSyncAdded(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;JJ)V
 PLcom/android/server/content/SyncManager$AccountSyncStats;-><init>(Ljava/lang/String;)V
 PLcom/android/server/content/SyncManager$AccountSyncStats;-><init>(Ljava/lang/String;Lcom/android/server/content/SyncManager$1;)V
-PLcom/android/server/content/SyncManager$ActiveSyncContext;-><init>(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncOperation;JI)V
-PLcom/android/server/content/SyncManager$ActiveSyncContext;->bindToSyncAdapter(Landroid/content/ComponentName;I)Z
-PLcom/android/server/content/SyncManager$ActiveSyncContext;->close()V
-PLcom/android/server/content/SyncManager$ActiveSyncContext;->onFinished(Landroid/content/SyncResult;)V
-PLcom/android/server/content/SyncManager$ActiveSyncContext;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/content/SyncManager$ActiveSyncContext;-><init>(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncOperation;JI)V
+HPLcom/android/server/content/SyncManager$ActiveSyncContext;->bindToSyncAdapter(Landroid/content/ComponentName;I)Z
+PLcom/android/server/content/SyncManager$ActiveSyncContext;->binderDied()V
+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
 PLcom/android/server/content/SyncManager$ActiveSyncContext;->onServiceDisconnected(Landroid/content/ComponentName;)V
+PLcom/android/server/content/SyncManager$ActiveSyncContext;->toSafeString()Ljava/lang/String;
 HPLcom/android/server/content/SyncManager$ActiveSyncContext;->toString()Ljava/lang/String;
 HPLcom/android/server/content/SyncManager$ActiveSyncContext;->toString(Ljava/lang/StringBuilder;Z)V
 PLcom/android/server/content/SyncManager$AuthoritySyncStats;-><init>(Ljava/lang/String;)V
 PLcom/android/server/content/SyncManager$AuthoritySyncStats;-><init>(Ljava/lang/String;Lcom/android/server/content/SyncManager$1;)V
-PLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck$1;-><init>(Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
+HPLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck$1;-><init>(Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
 PLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck$1;->onUnsyncableAccountDone(Z)V
-PLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;-><init>(Landroid/content/pm/RegisteredServicesCache$ServiceInfo;Lcom/android/server/content/SyncManager$OnReadyCallback;)V
-PLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;->access$2400(Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
+HPLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;-><init>(Landroid/content/pm/RegisteredServicesCache$ServiceInfo;Lcom/android/server/content/SyncManager$OnReadyCallback;)V
+HPLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;->access$2400(Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
 PLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;->onReady()V
 PLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/content/SyncManager$PrintTable;-><init>(I)V
-PLcom/android/server/content/SyncManager$PrintTable;->getNumRows()I
-PLcom/android/server/content/SyncManager$PrintTable;->printRow(Ljava/io/PrintWriter;[Ljava/lang/String;[Ljava/lang/Object;)V
+HPLcom/android/server/content/SyncManager$PrintTable;->getNumRows()I
+HPLcom/android/server/content/SyncManager$PrintTable;->printRow(Ljava/io/PrintWriter;[Ljava/lang/String;[Ljava/lang/Object;)V
 HPLcom/android/server/content/SyncManager$PrintTable;->set(II[Ljava/lang/Object;)V
 HPLcom/android/server/content/SyncManager$PrintTable;->writeTo(Ljava/io/PrintWriter;)V
 HPLcom/android/server/content/SyncManager$ScheduleSyncMessagePayload;-><init>(Lcom/android/server/content/SyncOperation;J)V
 HPLcom/android/server/content/SyncManager$ServiceConnectionData;-><init>(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/os/IBinder;)V
 HPLcom/android/server/content/SyncManager$SyncFinishedOrCancelledMessagePayload;-><init>(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/content/SyncResult;)V
 HSPLcom/android/server/content/SyncManager$SyncHandler;-><init>(Lcom/android/server/content/SyncManager;Landroid/os/Looper;)V
-PLcom/android/server/content/SyncManager$SyncHandler;->access$1800(Lcom/android/server/content/SyncManager$SyncHandler;Lcom/android/server/content/SyncOperation;)Landroid/os/PowerManager$WakeLock;
-PLcom/android/server/content/SyncManager$SyncHandler;->cancelActiveSyncH(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
-PLcom/android/server/content/SyncManager$SyncHandler;->closeActiveSyncContext(Lcom/android/server/content/SyncManager$ActiveSyncContext;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->access$1800(Lcom/android/server/content/SyncManager$SyncHandler;Lcom/android/server/content/SyncOperation;)Landroid/os/PowerManager$WakeLock;
+HPLcom/android/server/content/SyncManager$SyncHandler;->cancelActiveSyncH(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->closeActiveSyncContext(Lcom/android/server/content/SyncManager$ActiveSyncContext;)V
 HPLcom/android/server/content/SyncManager$SyncHandler;->computeSyncOpState(Lcom/android/server/content/SyncOperation;)I
+PLcom/android/server/content/SyncManager$SyncHandler;->deferActiveSyncH(Lcom/android/server/content/SyncManager$ActiveSyncContext;Ljava/lang/String;)V
 PLcom/android/server/content/SyncManager$SyncHandler;->deferStoppedSyncH(Lcom/android/server/content/SyncOperation;J)V
-PLcom/android/server/content/SyncManager$SyncHandler;->deferSyncH(Lcom/android/server/content/SyncOperation;JLjava/lang/String;)V
-PLcom/android/server/content/SyncManager$SyncHandler;->dispatchSyncOperation(Lcom/android/server/content/SyncOperation;)Z
-PLcom/android/server/content/SyncManager$SyncHandler;->findActiveSyncContextH(I)Lcom/android/server/content/SyncManager$ActiveSyncContext;
-PLcom/android/server/content/SyncManager$SyncHandler;->getSyncWakeLock(Lcom/android/server/content/SyncOperation;)Landroid/os/PowerManager$WakeLock;
+HPLcom/android/server/content/SyncManager$SyncHandler;->deferSyncH(Lcom/android/server/content/SyncOperation;JLjava/lang/String;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->dispatchSyncOperation(Lcom/android/server/content/SyncOperation;)Z
+HPLcom/android/server/content/SyncManager$SyncHandler;->findActiveSyncContextH(I)Lcom/android/server/content/SyncManager$ActiveSyncContext;
+HPLcom/android/server/content/SyncManager$SyncHandler;->getSyncWakeLock(Lcom/android/server/content/SyncOperation;)Landroid/os/PowerManager$WakeLock;
 HPLcom/android/server/content/SyncManager$SyncHandler;->handleMessage(Landroid/os/Message;)V
 HPLcom/android/server/content/SyncManager$SyncHandler;->handleSyncMessage(Landroid/os/Message;)V
-PLcom/android/server/content/SyncManager$SyncHandler;->insertStartSyncEvent(Lcom/android/server/content/SyncOperation;)J
+HPLcom/android/server/content/SyncManager$SyncHandler;->insertStartSyncEvent(Lcom/android/server/content/SyncOperation;)J
 PLcom/android/server/content/SyncManager$SyncHandler;->isSyncNotUsingNetworkH(Lcom/android/server/content/SyncManager$ActiveSyncContext;)Z
-PLcom/android/server/content/SyncManager$SyncHandler;->maybeUpdateSyncPeriodH(Lcom/android/server/content/SyncOperation;JJ)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->maybeUpdateSyncPeriodH(Lcom/android/server/content/SyncOperation;JJ)V
 HPLcom/android/server/content/SyncManager$SyncHandler;->removePeriodicSyncH(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->removePeriodicSyncInternalH(Lcom/android/server/content/SyncOperation;Ljava/lang/String;)V
 HPLcom/android/server/content/SyncManager$SyncHandler;->reschedulePeriodicSyncH(Lcom/android/server/content/SyncOperation;)V
-PLcom/android/server/content/SyncManager$SyncHandler;->runBoundToAdapterH(Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/os/IBinder;)V
-PLcom/android/server/content/SyncManager$SyncHandler;->runSyncFinishedOrCanceledH(Landroid/content/SyncResult;Lcom/android/server/content/SyncManager$ActiveSyncContext;)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
-PLcom/android/server/content/SyncManager$SyncHandler;->stopSyncEvent(JLcom/android/server/content/SyncOperation;Ljava/lang/String;IIJ)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->stopSyncEvent(JLcom/android/server/content/SyncOperation;Ljava/lang/String;IIJ)V
 PLcom/android/server/content/SyncManager$SyncHandler;->syncResultToErrorNumber(Landroid/content/SyncResult;)I
 HPLcom/android/server/content/SyncManager$SyncHandler;->updateOrAddPeriodicSyncH(Lcom/android/server/content/SyncStorageEngine$EndPoint;JJLandroid/os/Bundle;)V
-PLcom/android/server/content/SyncManager$SyncHandler;->updateRunningAccountsH(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->updateRunningAccountsH(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
 HSPLcom/android/server/content/SyncManager$SyncTimeTracker;-><init>(Lcom/android/server/content/SyncManager;)V
 HSPLcom/android/server/content/SyncManager$SyncTimeTracker;-><init>(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$1;)V
 PLcom/android/server/content/SyncManager$SyncTimeTracker;->timeSpentSyncing()J
@@ -7949,112 +13084,142 @@
 HSPLcom/android/server/content/SyncManager;-><init>(Landroid/content/Context;Z)V
 PLcom/android/server/content/SyncManager;->access$000(Lcom/android/server/content/SyncManager;)Z
 PLcom/android/server/content/SyncManager;->access$1000(Lcom/android/server/content/SyncManager;I)V
-PLcom/android/server/content/SyncManager;->access$1200(Lcom/android/server/content/SyncManager;)Ljava/util/List;
-PLcom/android/server/content/SyncManager;->access$1300(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncOperation;Ljava/lang/String;)V
-PLcom/android/server/content/SyncManager;->access$1700(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncManager$SyncHandler;
-PLcom/android/server/content/SyncManager;->access$2000(Lcom/android/server/content/SyncManager;)Landroid/content/Context;
+PLcom/android/server/content/SyncManager;->access$1100(Lcom/android/server/content/SyncManager;I)V
+HPLcom/android/server/content/SyncManager;->access$1200(Lcom/android/server/content/SyncManager;)Ljava/util/List;
+HPLcom/android/server/content/SyncManager;->access$1300(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncOperation;Ljava/lang/String;)V
+PLcom/android/server/content/SyncManager;->access$1400(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
+PLcom/android/server/content/SyncManager;->access$1500(Lcom/android/server/content/SyncManager;)Z
+PLcom/android/server/content/SyncManager;->access$1576(Lcom/android/server/content/SyncManager;I)Z
+PLcom/android/server/content/SyncManager;->access$1600(Lcom/android/server/content/SyncManager;)Z
+HPLcom/android/server/content/SyncManager;->access$1700(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncManager$SyncHandler;
+PLcom/android/server/content/SyncManager;->access$1900(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/content/SyncResult;)V
+PLcom/android/server/content/SyncManager;->access$200(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
+HPLcom/android/server/content/SyncManager;->access$2000(Lcom/android/server/content/SyncManager;)Landroid/content/Context;
 PLcom/android/server/content/SyncManager;->access$2100(Lcom/android/server/content/SyncManager;)Lcom/android/internal/app/IBatteryStats;
-PLcom/android/server/content/SyncManager;->access$2600(Lcom/android/server/content/SyncManager;)Landroid/os/PowerManager$WakeLock;
-PLcom/android/server/content/SyncManager;->access$2700(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncOperation;J)V
+HPLcom/android/server/content/SyncManager;->access$2600(Lcom/android/server/content/SyncManager;)Landroid/os/PowerManager$WakeLock;
+HPLcom/android/server/content/SyncManager;->access$2700(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncOperation;J)V
 PLcom/android/server/content/SyncManager;->access$2800(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
+HPLcom/android/server/content/SyncManager;->access$2900(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$ActiveSyncContext;)Z
 PLcom/android/server/content/SyncManager;->access$300(Lcom/android/server/content/SyncManager;)Z
-PLcom/android/server/content/SyncManager;->access$3000(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$ActiveSyncContext;)V
-PLcom/android/server/content/SyncManager;->access$302(Lcom/android/server/content/SyncManager;Z)Z
+HPLcom/android/server/content/SyncManager;->access$3000(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$ActiveSyncContext;)V
+HPLcom/android/server/content/SyncManager;->access$302(Lcom/android/server/content/SyncManager;Z)Z
 PLcom/android/server/content/SyncManager;->access$3100(Lcom/android/server/content/SyncManager;)Landroid/os/PowerManager;
-PLcom/android/server/content/SyncManager;->access$3300(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
+PLcom/android/server/content/SyncManager;->access$3200(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;)Z
+HPLcom/android/server/content/SyncManager;->access$3300(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
 PLcom/android/server/content/SyncManager;->access$3400(Lcom/android/server/content/SyncManager;)[Landroid/accounts/AccountAndUser;
 PLcom/android/server/content/SyncManager;->access$3402(Lcom/android/server/content/SyncManager;[Landroid/accounts/AccountAndUser;)[Landroid/accounts/AccountAndUser;
 PLcom/android/server/content/SyncManager;->access$3500(Lcom/android/server/content/SyncManager;)V
-PLcom/android/server/content/SyncManager;->access$3600(Lcom/android/server/content/SyncManager;[Landroid/accounts/AccountAndUser;Landroid/accounts/Account;I)Z
+HPLcom/android/server/content/SyncManager;->access$3600(Lcom/android/server/content/SyncManager;[Landroid/accounts/AccountAndUser;Landroid/accounts/Account;I)Z
 PLcom/android/server/content/SyncManager;->access$3700(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncOperation;)V
-PLcom/android/server/content/SyncManager;->access$3800(Lcom/android/server/content/SyncManager;)V
-PLcom/android/server/content/SyncManager;->access$400(Lcom/android/server/content/SyncManager;)Z
-PLcom/android/server/content/SyncManager;->access$4200(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
+HPLcom/android/server/content/SyncManager;->access$3800(Lcom/android/server/content/SyncManager;)V
+HPLcom/android/server/content/SyncManager;->access$400(Lcom/android/server/content/SyncManager;)Z
+PLcom/android/server/content/SyncManager;->access$4100(Lcom/android/server/content/SyncManager;I)J
+HPLcom/android/server/content/SyncManager;->access$4200(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
 PLcom/android/server/content/SyncManager;->access$4300(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncManagerConstants;
 PLcom/android/server/content/SyncManager;->access$4400(Lcom/android/server/content/SyncManager;Landroid/content/SyncResult;Lcom/android/server/content/SyncOperation;)V
 PLcom/android/server/content/SyncManager;->access$4500(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncOperation;J)V
-PLcom/android/server/content/SyncManager;->access$4600(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;J)V
-PLcom/android/server/content/SyncManager;->access$4700(Lcom/android/server/content/SyncManager;)Landroid/app/NotificationManager;
+HPLcom/android/server/content/SyncManager;->access$4600(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;J)V
+HPLcom/android/server/content/SyncManager;->access$4700(Lcom/android/server/content/SyncManager;)Landroid/app/NotificationManager;
 PLcom/android/server/content/SyncManager;->access$500(Lcom/android/server/content/SyncManager;Ljava/lang/String;)V
-PLcom/android/server/content/SyncManager;->access$700(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncLogger;
-PLcom/android/server/content/SyncManager;->access$800(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncStorageEngine;
-PLcom/android/server/content/SyncManager;->canAccessAccount(Landroid/accounts/Account;Ljava/lang/String;I)Z
-PLcom/android/server/content/SyncManager;->cancelJob(Lcom/android/server/content/SyncOperation;Ljava/lang/String;)V
+PLcom/android/server/content/SyncManager;->access$600(Lcom/android/server/content/SyncManager;)Ljava/lang/String;
+HPLcom/android/server/content/SyncManager;->access$700(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncLogger;
+HPLcom/android/server/content/SyncManager;->access$800(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncStorageEngine;
+PLcom/android/server/content/SyncManager;->access$900(Lcom/android/server/content/SyncManager;I)V
+HPLcom/android/server/content/SyncManager;->canAccessAccount(Landroid/accounts/Account;Ljava/lang/String;I)Z
+PLcom/android/server/content/SyncManager;->cancelActiveSync(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
+HPLcom/android/server/content/SyncManager;->cancelJob(Lcom/android/server/content/SyncOperation;Ljava/lang/String;)V
 PLcom/android/server/content/SyncManager;->cleanupJobs()V
 PLcom/android/server/content/SyncManager;->clearAllBackoffs(Ljava/lang/String;)V
-PLcom/android/server/content/SyncManager;->clearBackoffSetting(Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
-PLcom/android/server/content/SyncManager;->clearScheduledSyncOperations(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
+HPLcom/android/server/content/SyncManager;->clearBackoffSetting(Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
+HPLcom/android/server/content/SyncManager;->clearScheduledSyncOperations(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
 HPLcom/android/server/content/SyncManager;->computeSyncable(Landroid/accounts/Account;ILjava/lang/String;Z)I
-PLcom/android/server/content/SyncManager;->containsAccountAndUser([Landroid/accounts/AccountAndUser;Landroid/accounts/Account;I)Z
+HPLcom/android/server/content/SyncManager;->containsAccountAndUser([Landroid/accounts/AccountAndUser;Landroid/accounts/Account;I)Z
+HPLcom/android/server/content/SyncManager;->countIf(Ljava/util/Collection;Ljava/util/function/Predicate;)I
 PLcom/android/server/content/SyncManager;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Z)V
-PLcom/android/server/content/SyncManager;->dumpDayStatistic(Ljava/io/PrintWriter;Lcom/android/server/content/SyncStorageEngine$DayStats;)V
-PLcom/android/server/content/SyncManager;->dumpDayStatistics(Ljava/io/PrintWriter;)V
-PLcom/android/server/content/SyncManager;->dumpPendingSyncs(Ljava/io/PrintWriter;Lcom/android/server/content/SyncAdapterStateFetcher;)V
-PLcom/android/server/content/SyncManager;->dumpPeriodicSyncs(Ljava/io/PrintWriter;Lcom/android/server/content/SyncAdapterStateFetcher;)V
-PLcom/android/server/content/SyncManager;->dumpRecentHistory(Ljava/io/PrintWriter;)V
-PLcom/android/server/content/SyncManager;->dumpSyncAdapters(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/content/SyncManager;->dumpDayStatistic(Ljava/io/PrintWriter;Lcom/android/server/content/SyncStorageEngine$DayStats;)V
+HPLcom/android/server/content/SyncManager;->dumpDayStatistics(Ljava/io/PrintWriter;)V
+HPLcom/android/server/content/SyncManager;->dumpPendingSyncs(Ljava/io/PrintWriter;Lcom/android/server/content/SyncAdapterStateFetcher;)V
+HPLcom/android/server/content/SyncManager;->dumpPeriodicSyncs(Ljava/io/PrintWriter;Lcom/android/server/content/SyncAdapterStateFetcher;)V
+HPLcom/android/server/content/SyncManager;->dumpRecentHistory(Ljava/io/PrintWriter;)V
+HPLcom/android/server/content/SyncManager;->dumpSyncAdapters(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/content/SyncManager;->dumpSyncHistory(Ljava/io/PrintWriter;)V
-PLcom/android/server/content/SyncManager;->dumpSyncState(Ljava/io/PrintWriter;Lcom/android/server/content/SyncAdapterStateFetcher;)V
+HPLcom/android/server/content/SyncManager;->dumpSyncState(Ljava/io/PrintWriter;Lcom/android/server/content/SyncAdapterStateFetcher;)V
+HPLcom/android/server/content/SyncManager;->dumpTimeSec(Ljava/io/PrintWriter;J)V
 HPLcom/android/server/content/SyncManager;->formatDurationHMS(Ljava/lang/StringBuilder;J)Ljava/lang/StringBuilder;
-PLcom/android/server/content/SyncManager;->formatTime(J)Ljava/lang/String;
-PLcom/android/server/content/SyncManager;->getAdapterBindIntent(Landroid/content/Context;Landroid/content/ComponentName;I)Landroid/content/Intent;
+HPLcom/android/server/content/SyncManager;->formatTime(J)Ljava/lang/String;
+HPLcom/android/server/content/SyncManager;->getAdapterBindIntent(Landroid/content/Context;Landroid/content/ComponentName;I)Landroid/content/Intent;
 HPLcom/android/server/content/SyncManager;->getAllPendingSyncs()Ljava/util/List;
 PLcom/android/server/content/SyncManager;->getAllUsers()Ljava/util/List;
 HPLcom/android/server/content/SyncManager;->getConnectivityManager()Landroid/net/ConnectivityManager;
 HPLcom/android/server/content/SyncManager;->getInstance()Lcom/android/server/content/SyncManager;
 HPLcom/android/server/content/SyncManager;->getIsSyncable(Landroid/accounts/Account;ILjava/lang/String;)I
-PLcom/android/server/content/SyncManager;->getJobScheduler()Landroid/app/job/JobScheduler;
+HPLcom/android/server/content/SyncManager;->getJobScheduler()Landroid/app/job/JobScheduler;
 PLcom/android/server/content/SyncManager;->getJobStats()Ljava/lang/String;
-PLcom/android/server/content/SyncManager;->getPeriodicSyncs(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Ljava/util/List;
+HPLcom/android/server/content/SyncManager;->getPeriodicSyncs(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Ljava/util/List;
 HSPLcom/android/server/content/SyncManager;->getSyncAdapterPackagesForAuthorityAsUser(Ljava/lang/String;I)[Ljava/lang/String;
 HPLcom/android/server/content/SyncManager;->getSyncAdapterTypes(I)[Landroid/content/SyncAdapterType;
-PLcom/android/server/content/SyncManager;->getSyncStorageEngine()Lcom/android/server/content/SyncStorageEngine;
-PLcom/android/server/content/SyncManager;->getTotalBytesTransferredByUid(I)J
+HPLcom/android/server/content/SyncManager;->getSyncStorageEngine()Lcom/android/server/content/SyncStorageEngine;
+HPLcom/android/server/content/SyncManager;->getTotalBytesTransferredByUid(I)J
 PLcom/android/server/content/SyncManager;->getUnusedJobIdH()I
-PLcom/android/server/content/SyncManager;->increaseBackoffSetting(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
-PLcom/android/server/content/SyncManager;->isAdapterDelayed(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Z
+HPLcom/android/server/content/SyncManager;->increaseBackoffSetting(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
+HPLcom/android/server/content/SyncManager;->isAdapterDelayed(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Z
 HSPLcom/android/server/content/SyncManager;->isDeviceProvisioned()Z
 HPLcom/android/server/content/SyncManager;->isJobIdInUseLockedH(ILjava/util/List;)Z
-PLcom/android/server/content/SyncManager;->isUserUnlocked(I)Z
+HPLcom/android/server/content/SyncManager;->isSyncStillActiveH(Lcom/android/server/content/SyncManager$ActiveSyncContext;)Z
+HPLcom/android/server/content/SyncManager;->isUserUnlocked(I)Z
 PLcom/android/server/content/SyncManager;->jitterize(JJ)J
+PLcom/android/server/content/SyncManager;->lambda$EMXCZP9LDjgUTYbLsEoVu9Ccntw(Lcom/android/server/content/SyncManager;I)Ljava/lang/String;
 PLcom/android/server/content/SyncManager;->lambda$dumpPendingSyncs$8(Lcom/android/server/content/SyncOperation;)Z
 PLcom/android/server/content/SyncManager;->lambda$dumpPeriodicSyncs$9(Lcom/android/server/content/SyncOperation;)Z
-PLcom/android/server/content/SyncManager;->lambda$dumpSyncState$10(Ljava/lang/StringBuilder;Lcom/android/server/content/SyncManager$PrintTable;Ljava/lang/String;Landroid/content/SyncStatusInfo$Stats;Ljava/util/function/Function;Ljava/lang/Integer;)V
-PLcom/android/server/content/SyncManager;->lambda$onStartUser$1$SyncManager(I)V
+HPLcom/android/server/content/SyncManager;->lambda$dumpSyncState$10(Ljava/lang/StringBuilder;Lcom/android/server/content/SyncManager$PrintTable;Ljava/lang/String;Landroid/content/SyncStatusInfo$Stats;Ljava/util/function/Function;Ljava/lang/Integer;)V
+HPLcom/android/server/content/SyncManager;->lambda$dumpSyncState$11(Ljava/lang/Integer;)Ljava/lang/String;
+PLcom/android/server/content/SyncManager;->lambda$new$0$SyncManager(Landroid/accounts/Account;I)V
+HSPLcom/android/server/content/SyncManager;->lambda$onStartUser$1$SyncManager(I)V
+PLcom/android/server/content/SyncManager;->lambda$onStopUser$3$SyncManager(I)V
 PLcom/android/server/content/SyncManager;->lambda$onUnlockUser$2$SyncManager(I)V
 PLcom/android/server/content/SyncManager;->lambda$scheduleSync$5$SyncManager(Landroid/accounts/AccountAndUser;ILjava/lang/String;Landroid/os/Bundle;IJIIILjava/lang/String;)V
 PLcom/android/server/content/SyncManager;->lambda$sendOnUnsyncableAccount$12(Landroid/content/Context;Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
-PLcom/android/server/content/SyncManager;->lambda$static$6(Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;)I
-PLcom/android/server/content/SyncManager;->maybeRescheduleSync(Landroid/content/SyncResult;Lcom/android/server/content/SyncOperation;)V
+HPLcom/android/server/content/SyncManager;->lambda$static$6(Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;)I
+HPLcom/android/server/content/SyncManager;->lambda$static$7(Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;)I
+HPLcom/android/server/content/SyncManager;->maybeRescheduleSync(Landroid/content/SyncResult;Lcom/android/server/content/SyncOperation;)V
 HSPLcom/android/server/content/SyncManager;->onBootPhase(I)V
-PLcom/android/server/content/SyncManager;->onStartUser(I)V
+HSPLcom/android/server/content/SyncManager;->onStartUser(I)V
+PLcom/android/server/content/SyncManager;->onStopUser(I)V
 PLcom/android/server/content/SyncManager;->onUnlockUser(I)V
+PLcom/android/server/content/SyncManager;->onUserRemoved(I)V
+PLcom/android/server/content/SyncManager;->onUserStopped(I)V
 PLcom/android/server/content/SyncManager;->onUserUnlocked(I)V
-PLcom/android/server/content/SyncManager;->postMonitorSyncProgressMessage(Lcom/android/server/content/SyncManager$ActiveSyncContext;)V
-PLcom/android/server/content/SyncManager;->postScheduleSyncMessage(Lcom/android/server/content/SyncOperation;J)V
-PLcom/android/server/content/SyncManager;->printTwoDigitNumber(Ljava/lang/StringBuilder;JCZ)Z
-PLcom/android/server/content/SyncManager;->readDataConnectionState()Z
+HPLcom/android/server/content/SyncManager;->postMonitorSyncProgressMessage(Lcom/android/server/content/SyncManager$ActiveSyncContext;)V
+HPLcom/android/server/content/SyncManager;->postScheduleSyncMessage(Lcom/android/server/content/SyncOperation;J)V
+HPLcom/android/server/content/SyncManager;->printTwoDigitNumber(Ljava/lang/StringBuilder;JCZ)Z
+HPLcom/android/server/content/SyncManager;->readDataConnectionState()Z
 PLcom/android/server/content/SyncManager;->readyToSync(I)Z
+HPLcom/android/server/content/SyncManager;->removePeriodicSync(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
 PLcom/android/server/content/SyncManager;->removeStaleAccounts()V
+HPLcom/android/server/content/SyncManager;->removeSyncsForAuthority(Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
 HPLcom/android/server/content/SyncManager;->rescheduleSyncs(Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
 HSPLcom/android/server/content/SyncManager;->scheduleLocalSync(Landroid/accounts/Account;IILjava/lang/String;IIILjava/lang/String;)V
-PLcom/android/server/content/SyncManager;->scheduleSync(Landroid/accounts/Account;IILjava/lang/String;Landroid/os/Bundle;IIIILjava/lang/String;)V
+HPLcom/android/server/content/SyncManager;->scheduleSync(Landroid/accounts/Account;IILjava/lang/String;Landroid/os/Bundle;IIIILjava/lang/String;)V
 HSPLcom/android/server/content/SyncManager;->scheduleSync(Landroid/accounts/Account;IILjava/lang/String;Landroid/os/Bundle;IJZIIILjava/lang/String;)V
+PLcom/android/server/content/SyncManager;->scheduleSyncOperationH(Lcom/android/server/content/SyncOperation;)V
 HPLcom/android/server/content/SyncManager;->scheduleSyncOperationH(Lcom/android/server/content/SyncOperation;J)V
-PLcom/android/server/content/SyncManager;->sendCancelSyncsMessage(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
-PLcom/android/server/content/SyncManager;->sendMessage(Landroid/os/Message;)V
-PLcom/android/server/content/SyncManager;->sendOnUnsyncableAccount(Landroid/content/Context;Landroid/content/pm/RegisteredServicesCache$ServiceInfo;ILcom/android/server/content/SyncManager$OnReadyCallback;)V
-PLcom/android/server/content/SyncManager;->sendSyncFinishedOrCanceledMessage(Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/content/SyncResult;)V
+HPLcom/android/server/content/SyncManager;->sendCancelSyncsMessage(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
+HPLcom/android/server/content/SyncManager;->sendMessage(Landroid/os/Message;)V
+HPLcom/android/server/content/SyncManager;->sendOnUnsyncableAccount(Landroid/content/Context;Landroid/content/pm/RegisteredServicesCache$ServiceInfo;ILcom/android/server/content/SyncManager$OnReadyCallback;)V
+HPLcom/android/server/content/SyncManager;->sendSyncFinishedOrCanceledMessage(Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/content/SyncResult;)V
 HPLcom/android/server/content/SyncManager;->setAuthorityPendingState(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
-PLcom/android/server/content/SyncManager;->setDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;J)V
-PLcom/android/server/content/SyncManager;->syncExtrasEquals(Landroid/os/Bundle;Landroid/os/Bundle;Z)Z
+HPLcom/android/server/content/SyncManager;->setDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;J)V
+HPLcom/android/server/content/SyncManager;->syncExtrasEquals(Landroid/os/Bundle;Landroid/os/Bundle;Z)Z
+HPLcom/android/server/content/SyncManager;->updateOrAddPeriodicSync(Lcom/android/server/content/SyncStorageEngine$EndPoint;JJLandroid/os/Bundle;)V
 PLcom/android/server/content/SyncManager;->updateRunningAccounts(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
 HPLcom/android/server/content/SyncManager;->verifyJobScheduler()V
+PLcom/android/server/content/SyncManager;->wasPackageEverLaunched(Ljava/lang/String;I)Z
 HSPLcom/android/server/content/SyncManager;->whiteListExistingSyncAdaptersIfNeeded()V
+HPLcom/android/server/content/SyncManager;->zeroToEmpty(I)Ljava/lang/String;
 HSPLcom/android/server/content/SyncManagerConstants;-><init>(Landroid/content/Context;)V
 PLcom/android/server/content/SyncManagerConstants;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/content/SyncManagerConstants;->getInitialSyncRetryTimeInSeconds()I
-PLcom/android/server/content/SyncManagerConstants;->getKeyExemptionTempWhitelistDurationInSeconds()I
+HPLcom/android/server/content/SyncManagerConstants;->getKeyExemptionTempWhitelistDurationInSeconds()I
 PLcom/android/server/content/SyncManagerConstants;->getMaxRetriesWithAppStandbyExemption()I
 PLcom/android/server/content/SyncManagerConstants;->getMaxSyncRetryTimeInSeconds()I
 PLcom/android/server/content/SyncManagerConstants;->getRetryTimeIncreaseFactor()F
@@ -8062,7 +13227,8 @@
 HSPLcom/android/server/content/SyncManagerConstants;->refresh()V
 HSPLcom/android/server/content/SyncManagerConstants;->start()V
 PLcom/android/server/content/SyncOperation;-><clinit>()V
-PLcom/android/server/content/SyncOperation;-><init>(Landroid/accounts/Account;IILjava/lang/String;IILjava/lang/String;Landroid/os/Bundle;ZI)V
+HPLcom/android/server/content/SyncOperation;-><init>(Landroid/accounts/Account;IILjava/lang/String;IILjava/lang/String;Landroid/os/Bundle;ZI)V
+PLcom/android/server/content/SyncOperation;-><init>(Lcom/android/server/content/SyncOperation;JJ)V
 HPLcom/android/server/content/SyncOperation;-><init>(Lcom/android/server/content/SyncStorageEngine$EndPoint;ILjava/lang/String;IILandroid/os/Bundle;ZI)V
 HPLcom/android/server/content/SyncOperation;-><init>(Lcom/android/server/content/SyncStorageEngine$EndPoint;ILjava/lang/String;IILandroid/os/Bundle;ZZIJJI)V
 PLcom/android/server/content/SyncOperation;->createOneTimeSyncOperation()Lcom/android/server/content/SyncOperation;
@@ -8072,16 +13238,16 @@
 PLcom/android/server/content/SyncOperation;->findPriority()I
 PLcom/android/server/content/SyncOperation;->ignoreBackoff()Z
 PLcom/android/server/content/SyncOperation;->isAppStandbyExempted()Z
-PLcom/android/server/content/SyncOperation;->isConflict(Lcom/android/server/content/SyncOperation;)Z
+HPLcom/android/server/content/SyncOperation;->isConflict(Lcom/android/server/content/SyncOperation;)Z
 PLcom/android/server/content/SyncOperation;->isDerivedFromFailedPeriodicSync()Z
-PLcom/android/server/content/SyncOperation;->isExpedited()Z
-PLcom/android/server/content/SyncOperation;->isIgnoreSettings()Z
-PLcom/android/server/content/SyncOperation;->isInitialization()Z
+HPLcom/android/server/content/SyncOperation;->isExpedited()Z
+HPLcom/android/server/content/SyncOperation;->isIgnoreSettings()Z
+HPLcom/android/server/content/SyncOperation;->isInitialization()Z
 PLcom/android/server/content/SyncOperation;->isNotAllowedOnMetered()Z
 HPLcom/android/server/content/SyncOperation;->matchesPeriodicOperation(Lcom/android/server/content/SyncOperation;)Z
 HPLcom/android/server/content/SyncOperation;->maybeCreateFromJobExtras(Landroid/os/PersistableBundle;)Lcom/android/server/content/SyncOperation;
 HPLcom/android/server/content/SyncOperation;->reasonToString(Landroid/content/pm/PackageManager;I)Ljava/lang/String;
-PLcom/android/server/content/SyncOperation;->toEventLog(I)[Ljava/lang/Object;
+HPLcom/android/server/content/SyncOperation;->toEventLog(I)[Ljava/lang/Object;
 HPLcom/android/server/content/SyncOperation;->toJobInfoExtras()Landroid/os/PersistableBundle;
 HPLcom/android/server/content/SyncOperation;->toKey()Ljava/lang/String;
 PLcom/android/server/content/SyncOperation;->toSafeString()Ljava/lang/String;
@@ -8091,7 +13257,7 @@
 HSPLcom/android/server/content/SyncStorageEngine$AccountAuthorityValidator;->isAccountValid(Landroid/accounts/Account;I)Z
 HSPLcom/android/server/content/SyncStorageEngine$AccountAuthorityValidator;->isAuthorityValid(Ljava/lang/String;I)Z
 HSPLcom/android/server/content/SyncStorageEngine$AccountInfo;-><init>(Landroid/accounts/AccountAndUser;)V
-PLcom/android/server/content/SyncStorageEngine$AuthorityInfo;-><init>(Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;)V
+HPLcom/android/server/content/SyncStorageEngine$AuthorityInfo;-><init>(Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;)V
 HSPLcom/android/server/content/SyncStorageEngine$AuthorityInfo;-><init>(Lcom/android/server/content/SyncStorageEngine$EndPoint;I)V
 HSPLcom/android/server/content/SyncStorageEngine$AuthorityInfo;->defaultInitialisation()V
 HSPLcom/android/server/content/SyncStorageEngine$AuthorityInfo;->toString()Ljava/lang/String;
@@ -8099,44 +13265,48 @@
 HSPLcom/android/server/content/SyncStorageEngine$EndPoint;-><clinit>()V
 HSPLcom/android/server/content/SyncStorageEngine$EndPoint;-><init>(Landroid/accounts/Account;Ljava/lang/String;I)V
 HPLcom/android/server/content/SyncStorageEngine$EndPoint;->matchesSpec(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Z
+PLcom/android/server/content/SyncStorageEngine$EndPoint;->toSafeString()Ljava/lang/String;
 HSPLcom/android/server/content/SyncStorageEngine$EndPoint;->toString()Ljava/lang/String;
 HSPLcom/android/server/content/SyncStorageEngine$MyHandler;-><init>(Lcom/android/server/content/SyncStorageEngine;Landroid/os/Looper;)V
-PLcom/android/server/content/SyncStorageEngine$MyHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/content/SyncStorageEngine$MyHandler;->handleMessage(Landroid/os/Message;)V
 HPLcom/android/server/content/SyncStorageEngine$SyncHistoryItem;-><init>()V
 HSPLcom/android/server/content/SyncStorageEngine;-><clinit>()V
 HSPLcom/android/server/content/SyncStorageEngine;-><init>(Landroid/content/Context;Ljava/io/File;Landroid/os/Looper;)V
 HSPLcom/android/server/content/SyncStorageEngine;->access$000()Lcom/android/server/content/SyncStorageEngine$PeriodicSyncAddedListener;
-PLcom/android/server/content/SyncStorageEngine;->addActiveSync(Lcom/android/server/content/SyncManager$ActiveSyncContext;)Landroid/content/SyncInfo;
+HPLcom/android/server/content/SyncStorageEngine;->addActiveSync(Lcom/android/server/content/SyncManager$ActiveSyncContext;)Landroid/content/SyncInfo;
 HPLcom/android/server/content/SyncStorageEngine;->addStatusChangeListener(IILandroid/content/ISyncStatusObserver;)V
-PLcom/android/server/content/SyncStorageEngine;->clearAllBackoffsLocked()V
+PLcom/android/server/content/SyncStorageEngine;->calculateDefaultFlexTime(J)J
+HPLcom/android/server/content/SyncStorageEngine;->clearAllBackoffsLocked()V
 HSPLcom/android/server/content/SyncStorageEngine;->createAuthorityLocked(Lcom/android/server/content/SyncStorageEngine$EndPoint;IZ)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;
-PLcom/android/server/content/SyncStorageEngine;->getAuthority(I)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;
+HPLcom/android/server/content/SyncStorageEngine;->createCopyPairOfAuthorityWithSyncStatusLocked(Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;)Landroid/util/Pair;
+HPLcom/android/server/content/SyncStorageEngine;->getAuthority(I)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;
 HPLcom/android/server/content/SyncStorageEngine;->getAuthorityLocked(Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;
 HPLcom/android/server/content/SyncStorageEngine;->getBackoff(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Landroid/util/Pair;
-PLcom/android/server/content/SyncStorageEngine;->getCopyOfAuthorityWithSyncStatus(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Landroid/util/Pair;
-PLcom/android/server/content/SyncStorageEngine;->getCurrentDayLocked()I
-PLcom/android/server/content/SyncStorageEngine;->getCurrentSyncs(I)Ljava/util/List;
-PLcom/android/server/content/SyncStorageEngine;->getCurrentSyncsLocked(I)Ljava/util/List;
+HPLcom/android/server/content/SyncStorageEngine;->getCopyOfAuthorityWithSyncStatus(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Landroid/util/Pair;
+HPLcom/android/server/content/SyncStorageEngine;->getCurrentDayLocked()I
+HPLcom/android/server/content/SyncStorageEngine;->getCurrentSyncs(I)Ljava/util/List;
+HPLcom/android/server/content/SyncStorageEngine;->getCurrentSyncsLocked(I)Ljava/util/List;
 PLcom/android/server/content/SyncStorageEngine;->getDayStatistics()[Lcom/android/server/content/SyncStorageEngine$DayStats;
-PLcom/android/server/content/SyncStorageEngine;->getDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;)J
+HPLcom/android/server/content/SyncStorageEngine;->getDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;)J
 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;
-PLcom/android/server/content/SyncStorageEngine;->getOrCreateSyncStatusLocked(I)Landroid/content/SyncStatusInfo;
+HPLcom/android/server/content/SyncStorageEngine;->getOrCreateSyncStatusLocked(I)Landroid/content/SyncStatusInfo;
 HSPLcom/android/server/content/SyncStorageEngine;->getSingleton()Lcom/android/server/content/SyncStorageEngine;
 HPLcom/android/server/content/SyncStorageEngine;->getSyncAutomatically(Landroid/accounts/Account;ILjava/lang/String;)Z
-PLcom/android/server/content/SyncStorageEngine;->getSyncHistory()Ljava/util/ArrayList;
+HPLcom/android/server/content/SyncStorageEngine;->getSyncHistory()Ljava/util/ArrayList;
 HSPLcom/android/server/content/SyncStorageEngine;->init(Landroid/content/Context;Landroid/os/Looper;)V
-PLcom/android/server/content/SyncStorageEngine;->insertStartSyncEvent(Lcom/android/server/content/SyncOperation;J)J
+HPLcom/android/server/content/SyncStorageEngine;->insertStartSyncEvent(Lcom/android/server/content/SyncOperation;J)J
 PLcom/android/server/content/SyncStorageEngine;->isClockValid()Z
-PLcom/android/server/content/SyncStorageEngine;->isSyncActive(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Z
-PLcom/android/server/content/SyncStorageEngine;->isSyncPending(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Z
-PLcom/android/server/content/SyncStorageEngine;->markPending(Lcom/android/server/content/SyncStorageEngine$EndPoint;Z)V
+HPLcom/android/server/content/SyncStorageEngine;->isSyncActive(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Z
+HPLcom/android/server/content/SyncStorageEngine;->isSyncPending(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Z
+HPLcom/android/server/content/SyncStorageEngine;->markPending(Lcom/android/server/content/SyncStorageEngine$EndPoint;Z)V
 HSPLcom/android/server/content/SyncStorageEngine;->maybeDeleteLegacyPendingInfoLocked(Ljava/io/File;)V
 HSPLcom/android/server/content/SyncStorageEngine;->maybeMigrateSettingsForRenamedAuthorities()Z
 HSPLcom/android/server/content/SyncStorageEngine;->parseAuthority(Lorg/xmlpull/v1/XmlPullParser;ILcom/android/server/content/SyncStorageEngine$AccountAuthorityValidator;)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;
 HSPLcom/android/server/content/SyncStorageEngine;->parseLastEventInfoLocked(Landroid/util/proto/ProtoInputStream;)Landroid/util/Pair;
 HSPLcom/android/server/content/SyncStorageEngine;->parseListenForTickles(Lorg/xmlpull/v1/XmlPullParser;)V
+PLcom/android/server/content/SyncStorageEngine;->queueBackup()V
 HSPLcom/android/server/content/SyncStorageEngine;->readAccountInfoLocked()V
 HSPLcom/android/server/content/SyncStorageEngine;->readDayStatsLocked(Ljava/io/InputStream;)V
 HSPLcom/android/server/content/SyncStorageEngine;->readIndividualDayStatsLocked(Landroid/util/proto/ProtoInputStream;)Lcom/android/server/content/SyncStorageEngine$DayStats;
@@ -8145,52 +13315,64 @@
 HSPLcom/android/server/content/SyncStorageEngine;->readStatusLocked()V
 HSPLcom/android/server/content/SyncStorageEngine;->readSyncStatusInfoLocked(Landroid/util/proto/ProtoInputStream;)Landroid/content/SyncStatusInfo;
 HSPLcom/android/server/content/SyncStorageEngine;->readSyncStatusStatsLocked(Landroid/util/proto/ProtoInputStream;Landroid/content/SyncStatusInfo$Stats;)V
-PLcom/android/server/content/SyncStorageEngine;->removeActiveSync(Landroid/content/SyncInfo;I)V
-PLcom/android/server/content/SyncStorageEngine;->removeStaleAccounts([Landroid/accounts/Account;I)V
-PLcom/android/server/content/SyncStorageEngine;->reportActiveChange(I)V
+HPLcom/android/server/content/SyncStorageEngine;->removeActiveSync(Landroid/content/SyncInfo;I)V
+HPLcom/android/server/content/SyncStorageEngine;->removeStaleAccounts([Landroid/accounts/Account;I)V
+PLcom/android/server/content/SyncStorageEngine;->removeStatusChangeListener(Landroid/content/ISyncStatusObserver;)V
+HPLcom/android/server/content/SyncStorageEngine;->reportActiveChange(I)V
 HPLcom/android/server/content/SyncStorageEngine;->reportChange(II)V
-PLcom/android/server/content/SyncStorageEngine;->resetTodayStats(Z)V
-PLcom/android/server/content/SyncStorageEngine;->setBackoff(Lcom/android/server/content/SyncStorageEngine$EndPoint;JJ)V
+PLcom/android/server/content/SyncStorageEngine;->requestSync(Landroid/accounts/Account;IILjava/lang/String;Landroid/os/Bundle;III)V
+PLcom/android/server/content/SyncStorageEngine;->requestSync(Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;ILandroid/os/Bundle;III)V
+HPLcom/android/server/content/SyncStorageEngine;->resetTodayStats(Z)V
+HPLcom/android/server/content/SyncStorageEngine;->setBackoff(Lcom/android/server/content/SyncStorageEngine$EndPoint;JJ)V
 PLcom/android/server/content/SyncStorageEngine;->setClockValid()V
-PLcom/android/server/content/SyncStorageEngine;->setDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;J)V
+HPLcom/android/server/content/SyncStorageEngine;->setDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;J)V
+HPLcom/android/server/content/SyncStorageEngine;->setIsSyncable(Landroid/accounts/Account;ILjava/lang/String;III)V
+PLcom/android/server/content/SyncStorageEngine;->setMasterSyncAutomatically(ZIIII)V
 HSPLcom/android/server/content/SyncStorageEngine;->setOnAuthorityRemovedListener(Lcom/android/server/content/SyncStorageEngine$OnAuthorityRemovedListener;)V
 HSPLcom/android/server/content/SyncStorageEngine;->setOnSyncRequestListener(Lcom/android/server/content/SyncStorageEngine$OnSyncRequestListener;)V
 HSPLcom/android/server/content/SyncStorageEngine;->setPeriodicSyncAddedListener(Lcom/android/server/content/SyncStorageEngine$PeriodicSyncAddedListener;)V
-PLcom/android/server/content/SyncStorageEngine;->setSyncAutomatically(Landroid/accounts/Account;ILjava/lang/String;ZIII)V
-PLcom/android/server/content/SyncStorageEngine;->setSyncableStateForEndPoint(Lcom/android/server/content/SyncStorageEngine$EndPoint;III)V
+HPLcom/android/server/content/SyncStorageEngine;->setSyncAutomatically(Landroid/accounts/Account;ILjava/lang/String;ZIII)V
+HPLcom/android/server/content/SyncStorageEngine;->setSyncableStateForEndPoint(Lcom/android/server/content/SyncStorageEngine$EndPoint;III)V
 HSPLcom/android/server/content/SyncStorageEngine;->shouldGrantSyncAdaptersAccountAccess()Z
 HPLcom/android/server/content/SyncStorageEngine;->stopSyncEvent(JJLjava/lang/String;JJI)V
 HSPLcom/android/server/content/SyncStorageEngine;->upgradeStatisticsIfNeededLocked()V
 HSPLcom/android/server/content/SyncStorageEngine;->upgradeStatusIfNeededLocked()V
+HPLcom/android/server/content/SyncStorageEngine;->writeAccountInfoLocked()V
+PLcom/android/server/content/SyncStorageEngine;->writeAllState()V
 HPLcom/android/server/content/SyncStorageEngine;->writeDayStatsLocked(Ljava/io/OutputStream;)V
-PLcom/android/server/content/SyncStorageEngine;->writeStatisticsLocked()V
+HPLcom/android/server/content/SyncStorageEngine;->writeStatisticsLocked()V
 HPLcom/android/server/content/SyncStorageEngine;->writeStatusInfoLocked(Ljava/io/OutputStream;)V
-PLcom/android/server/content/SyncStorageEngine;->writeStatusLocked()V
+HPLcom/android/server/content/SyncStorageEngine;->writeStatusLocked()V
 HPLcom/android/server/content/SyncStorageEngine;->writeStatusStatsLocked(Landroid/util/proto/ProtoOutputStream;Landroid/content/SyncStatusInfo$Stats;)V
 HSPLcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$4nadnpI0ImgQseJYN0WTE4IJ4s4;-><init>(Lcom/android/server/contentcapture/ContentCaptureManagerService;)V
 PLcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$4nadnpI0ImgQseJYN0WTE4IJ4s4;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
-PLcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$ContentCaptureManagerServiceStub$6vI15KqJwo_ruaAABrGMvkwVRt4;-><init>(Lcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;)V
+HPLcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$ContentCaptureManagerServiceStub$6vI15KqJwo_ruaAABrGMvkwVRt4;-><init>(Lcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;)V
 PLcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$ContentCaptureManagerServiceStub$6vI15KqJwo_ruaAABrGMvkwVRt4;->run()V
 PLcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$ContentCaptureManagerServiceStub$Qe-DhsP4OR9GyoofNgVlcOk-1so;-><init>(Lcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;Ljava/lang/String;)V
 PLcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$ContentCaptureManagerServiceStub$Qe-DhsP4OR9GyoofNgVlcOk-1so;->run()V
 PLcom/android/server/contentcapture/-$$Lambda$ContentCaptureServerSession$PKv4-aNj3xMYOeCpzUQZDD2iG0o;-><init>(Lcom/android/server/contentcapture/ContentCaptureServerSession;)V
-PLcom/android/server/contentcapture/-$$Lambda$ContentCaptureServerSession$PKv4-aNj3xMYOeCpzUQZDD2iG0o;->binderDied()V
+HPLcom/android/server/contentcapture/-$$Lambda$ContentCaptureServerSession$PKv4-aNj3xMYOeCpzUQZDD2iG0o;->binderDied()V
+HPLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$12wkbjo54EUwTPFKOuEn42KWKFg;-><init>(Landroid/service/contentcapture/ActivityEvent;)V
+HPLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$12wkbjo54EUwTPFKOuEn42KWKFg;->run(Landroid/os/IInterface;)V
 PLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$PMsA3CmwChlM0Qy__Uy6Yr5CFzk;-><init>(Landroid/view/contentcapture/ContentCaptureContext;IILcom/android/internal/os/IResultReceiver;I)V
-PLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$PMsA3CmwChlM0Qy__Uy6Yr5CFzk;->run(Landroid/os/IInterface;)V
-PLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$QbbzaxOFnxJI34vQptxzLE9Vvog;-><init>(I)V
-PLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$QbbzaxOFnxJI34vQptxzLE9Vvog;->run(Landroid/os/IInterface;)V
+HPLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$PMsA3CmwChlM0Qy__Uy6Yr5CFzk;->run(Landroid/os/IInterface;)V
+HPLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$QbbzaxOFnxJI34vQptxzLE9Vvog;-><init>(I)V
+HPLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$QbbzaxOFnxJI34vQptxzLE9Vvog;->run(Landroid/os/IInterface;)V
+PLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$haMfPWsaVUWwKcAPgM3AadAkvOQ;-><init>(Landroid/view/contentcapture/DataRemovalRequest;)V
+PLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$haMfPWsaVUWwKcAPgM3AadAkvOQ;->run(Landroid/os/IInterface;)V
 HPLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$yRaGuMutdbjMq9h32e3TC2_1a_A;-><init>(Landroid/service/contentcapture/ActivityEvent;)V
-PLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$yRaGuMutdbjMq9h32e3TC2_1a_A;->run(Landroid/os/IInterface;)V
+HPLcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$yRaGuMutdbjMq9h32e3TC2_1a_A;->run(Landroid/os/IInterface;)V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerInternal;-><init>()V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;-><init>(Lcom/android/server/contentcapture/ContentCaptureManagerService;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->finishSession(I)V
+HPLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->finishSession(I)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->getContentCaptureConditions(Ljava/lang/String;Lcom/android/internal/os/IResultReceiver;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->getServiceComponentName(Lcom/android/internal/os/IResultReceiver;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->getServiceSettingsActivity(Lcom/android/internal/os/IResultReceiver;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->lambda$getContentCaptureConditions$2$ContentCaptureManagerService$ContentCaptureManagerServiceStub(Ljava/lang/String;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->lambda$getServiceSettingsActivity$1$ContentCaptureManagerService$ContentCaptureManagerServiceStub()V
-PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->startSession(Landroid/os/IBinder;Landroid/content/ComponentName;IILcom/android/internal/os/IResultReceiver;)V
+PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->removeData(Landroid/view/contentcapture/DataRemovalRequest;)V
+HPLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->startSession(Landroid/os/IBinder;Landroid/content/ComponentName;IILcom/android/internal/os/IResultReceiver;)V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService$GlobalContentCaptureOptions;-><init>(Lcom/android/server/contentcapture/ContentCaptureManagerService;)V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService$GlobalContentCaptureOptions;->access$100(Lcom/android/server/contentcapture/ContentCaptureManagerService$GlobalContentCaptureOptions;ILjava/lang/String;Z)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService$GlobalContentCaptureOptions;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
@@ -8200,36 +13382,65 @@
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;-><init>(Lcom/android/server/contentcapture/ContentCaptureManagerService;Lcom/android/server/contentcapture/ContentCaptureManagerService$1;)V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;->getOptionsForPackage(ILjava/lang/String;)Landroid/content/ContentCaptureOptions;
 PLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;->isContentCaptureServiceForUser(II)Z
-PLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;->notifyActivityEvent(ILandroid/content/ComponentName;I)V
+HSPLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;->notifyActivityEvent(ILandroid/content/ComponentName;I)V
+HSPLcom/android/server/contentcapture/ContentCaptureManagerService;-><clinit>()V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1000(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1100()Ljava/lang/String;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1200(Lcom/android/server/contentcapture/ContentCaptureManagerService;Ljava/lang/String;)V
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1300(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1400(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1600(Lcom/android/server/contentcapture/ContentCaptureManagerService;Lcom/android/internal/os/IResultReceiver;Ljava/lang/Runnable;)Z
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$200(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Landroid/app/ActivityManagerInternal;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2000(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2000(Lcom/android/server/contentcapture/ContentCaptureManagerService;Lcom/android/internal/os/IResultReceiver;Ljava/lang/Runnable;)Z
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2100(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2100(Lcom/android/server/contentcapture/ContentCaptureManagerService;Lcom/android/internal/os/IResultReceiver;Ljava/lang/Runnable;)Z
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2300(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2400(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2500(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2600(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/String;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2600(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2700(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2700(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/String;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2800(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2800(Lcom/android/server/contentcapture/ContentCaptureManagerService;Ljava/lang/String;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2900(Lcom/android/server/contentcapture/ContentCaptureManagerService;Ljava/lang/String;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$300(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
-PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$3500(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
-PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$3600(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$3000(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$3100(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$3100(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$3200(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$3400(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$3500(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$3500(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$3600(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$3600(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$3700(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$400(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$4000(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+HPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$4100(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$500(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Z
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$700(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$800(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$900(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->dumpLocked(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/contentcapture/ContentCaptureManagerService;->enforceCallingPermissionForManagement()V
+HPLcom/android/server/contentcapture/ContentCaptureManagerService;->enforceCallingPermissionForManagement()V
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->getAmInternal()Landroid/app/ActivityManagerInternal;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->isDefaultServiceLocked(I)Z
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->isDisabledBySettingsLocked(I)Z
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->isDisabledLocked(I)Z
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->isEnabledBySettings(I)Z
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->isSupported(Landroid/content/pm/UserInfo;)Z
+HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->isSupportedUser(Lcom/android/server/SystemService$TargetUser;)Z
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->lambda$new$0$ContentCaptureManagerService(Landroid/provider/DeviceConfig$Properties;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->newServiceLocked(IZ)Lcom/android/server/contentcapture/ContentCapturePerUserService;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->newServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->onDeviceConfigChange(Landroid/provider/DeviceConfig$Properties;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->onServicePackageUpdatedLocked(I)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->onServicePackageUpdatingLocked(I)V
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->onServiceRemoved(Lcom/android/server/contentcapture/ContentCapturePerUserService;I)V
+PLcom/android/server/contentcapture/ContentCaptureManagerService;->onServiceRemoved(Lcom/android/server/infra/AbstractPerUserSystemService;I)V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->onStart()V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->registerForExtraSettingsChanges(Landroid/content/ContentResolver;Landroid/database/ContentObserver;)V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->setDeviceConfigProperties()V
@@ -8239,9 +13450,9 @@
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->throwsSecurityException(Lcom/android/internal/os/IResultReceiver;Ljava/lang/Runnable;)Z
 PLcom/android/server/contentcapture/ContentCaptureMetricsLogger;->writeServiceEvent(ILandroid/content/ComponentName;)V
 PLcom/android/server/contentcapture/ContentCaptureMetricsLogger;->writeServiceEvent(ILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/contentcapture/ContentCaptureMetricsLogger;->writeSessionEvent(IIILandroid/content/ComponentName;Landroid/content/ComponentName;Z)V
+HPLcom/android/server/contentcapture/ContentCaptureMetricsLogger;->writeSessionEvent(IIILandroid/content/ComponentName;Landroid/content/ComponentName;Z)V
 HPLcom/android/server/contentcapture/ContentCaptureMetricsLogger;->writeSessionFlush(ILandroid/content/ComponentName;Landroid/content/ComponentName;Landroid/service/contentcapture/FlushMetrics;Landroid/content/ContentCaptureOptions;I)V
-PLcom/android/server/contentcapture/ContentCaptureMetricsLogger;->writeSetWhitelistEvent(Landroid/content/ComponentName;Ljava/util/List;Ljava/util/List;)V
+HPLcom/android/server/contentcapture/ContentCaptureMetricsLogger;->writeSetWhitelistEvent(Landroid/content/ComponentName;Ljava/util/List;Ljava/util/List;)V
 PLcom/android/server/contentcapture/ContentCapturePerUserService$ContentCaptureServiceRemoteCallback;-><init>(Lcom/android/server/contentcapture/ContentCapturePerUserService;)V
 PLcom/android/server/contentcapture/ContentCapturePerUserService$ContentCaptureServiceRemoteCallback;-><init>(Lcom/android/server/contentcapture/ContentCapturePerUserService;Lcom/android/server/contentcapture/ContentCapturePerUserService$1;)V
 PLcom/android/server/contentcapture/ContentCapturePerUserService$ContentCaptureServiceRemoteCallback;->setContentCaptureWhitelist(Ljava/util/List;Ljava/util/List;)V
@@ -8249,85 +13460,411 @@
 PLcom/android/server/contentcapture/ContentCapturePerUserService;-><clinit>()V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;-><init>(Lcom/android/server/contentcapture/ContentCaptureManagerService;Ljava/lang/Object;ZI)V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$100(Lcom/android/server/contentcapture/ContentCapturePerUserService;)Lcom/android/server/infra/AbstractMasterSystemService;
+PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$1000(Lcom/android/server/contentcapture/ContentCapturePerUserService;)Ljava/lang/Object;
+PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$1100(Lcom/android/server/contentcapture/ContentCapturePerUserService;)Lcom/android/server/infra/AbstractMasterSystemService;
+PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$200()Ljava/lang/String;
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$400(Lcom/android/server/contentcapture/ContentCapturePerUserService;)I
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$500(Lcom/android/server/contentcapture/ContentCapturePerUserService;)Lcom/android/server/infra/AbstractMasterSystemService;
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$600(Lcom/android/server/contentcapture/ContentCapturePerUserService;)Landroid/util/SparseArray;
+PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$700(Lcom/android/server/contentcapture/ContentCapturePerUserService;)I
+PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$800(Lcom/android/server/contentcapture/ContentCapturePerUserService;)Lcom/android/server/infra/AbstractMasterSystemService;
+PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$900(Lcom/android/server/contentcapture/ContentCapturePerUserService;)Lcom/android/server/infra/AbstractMasterSystemService;
+PLcom/android/server/contentcapture/ContentCapturePerUserService;->assertCallerLocked(Ljava/lang/String;)V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->destroyLocked()V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->destroySessionsLocked()V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->dumpLocked(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/contentcapture/ContentCapturePerUserService;->finishSessionLocked(I)V
+HPLcom/android/server/contentcapture/ContentCapturePerUserService;->finishSessionLocked(I)V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->getContentCaptureConditionsLocked(Ljava/lang/String;)Landroid/util/ArraySet;
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->getServiceSettingsActivityLocked()Landroid/content/ComponentName;
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->isContentCaptureServiceForUserLocked(I)Z
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->newServiceInfoLocked(Landroid/content/ComponentName;)Landroid/content/pm/ServiceInfo;
-PLcom/android/server/contentcapture/ContentCapturePerUserService;->onActivityEventLocked(Landroid/content/ComponentName;I)V
+HPLcom/android/server/contentcapture/ContentCapturePerUserService;->onActivityEventLocked(Landroid/content/ComponentName;I)V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->onConnected()V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->onPackageUpdatedLocked()V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->onPackageUpdatingLocked()V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->onServiceDied(Lcom/android/server/contentcapture/RemoteContentCaptureService;)V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->onServiceDied(Ljava/lang/Object;)V
-PLcom/android/server/contentcapture/ContentCapturePerUserService;->removeSessionLocked(I)V
+PLcom/android/server/contentcapture/ContentCapturePerUserService;->removeDataLocked(Landroid/view/contentcapture/DataRemovalRequest;)V
+HPLcom/android/server/contentcapture/ContentCapturePerUserService;->removeSessionLocked(I)V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->resetContentCaptureWhitelistLocked()V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->resurrectSessionsLocked()V
-PLcom/android/server/contentcapture/ContentCapturePerUserService;->startSessionLocked(Landroid/os/IBinder;Landroid/content/pm/ActivityPresentationInfo;IIILcom/android/internal/os/IResultReceiver;)V
+HPLcom/android/server/contentcapture/ContentCapturePerUserService;->startSessionLocked(Landroid/os/IBinder;Landroid/content/pm/ActivityPresentationInfo;IIILcom/android/internal/os/IResultReceiver;)V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->updateLocked(Z)Z
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->updateRemoteServiceLocked(Z)V
 PLcom/android/server/contentcapture/ContentCaptureServerSession;-><clinit>()V
-PLcom/android/server/contentcapture/ContentCaptureServerSession;-><init>(Ljava/lang/Object;Landroid/os/IBinder;Lcom/android/server/contentcapture/ContentCapturePerUserService;Landroid/content/ComponentName;Lcom/android/internal/os/IResultReceiver;IIIII)V
+HPLcom/android/server/contentcapture/ContentCaptureServerSession;-><init>(Ljava/lang/Object;Landroid/os/IBinder;Lcom/android/server/contentcapture/ContentCapturePerUserService;Landroid/content/ComponentName;Lcom/android/internal/os/IResultReceiver;IIIII)V
 PLcom/android/server/contentcapture/ContentCaptureServerSession;->destroyLocked(Z)V
 PLcom/android/server/contentcapture/ContentCaptureServerSession;->dumpLocked(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/contentcapture/ContentCaptureServerSession;->lambda$new$0$ContentCaptureServerSession()V
 PLcom/android/server/contentcapture/ContentCaptureServerSession;->notifySessionStartedLocked(Lcom/android/internal/os/IResultReceiver;)V
-PLcom/android/server/contentcapture/ContentCaptureServerSession;->onClientDeath()V
+HPLcom/android/server/contentcapture/ContentCaptureServerSession;->onClientDeath()V
+PLcom/android/server/contentcapture/ContentCaptureServerSession;->pauseLocked()V
 PLcom/android/server/contentcapture/ContentCaptureServerSession;->removeSelfLocked(Z)V
+PLcom/android/server/contentcapture/ContentCaptureServerSession;->resurrectLocked()V
+PLcom/android/server/contentcapture/ContentCaptureServerSession;->setContentCaptureEnabledLocked(Z)V
+PLcom/android/server/contentcapture/ContentCaptureServerSession;->toString()Ljava/lang/String;
 PLcom/android/server/contentcapture/RemoteContentCaptureService;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/content/ComponentName;Landroid/service/contentcapture/IContentCaptureServiceCallback;ILcom/android/server/contentcapture/ContentCapturePerUserService;ZZI)V
 PLcom/android/server/contentcapture/RemoteContentCaptureService;->ensureBoundLocked()V
 PLcom/android/server/contentcapture/RemoteContentCaptureService;->getServiceInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
 PLcom/android/server/contentcapture/RemoteContentCaptureService;->getServiceInterface(Landroid/os/IBinder;)Landroid/service/contentcapture/IContentCaptureService;
-PLcom/android/server/contentcapture/RemoteContentCaptureService;->getTimeoutIdleBindMillis()J
+HPLcom/android/server/contentcapture/RemoteContentCaptureService;->getTimeoutIdleBindMillis()J
 PLcom/android/server/contentcapture/RemoteContentCaptureService;->handleOnConnectedStateChanged(Z)V
 HPLcom/android/server/contentcapture/RemoteContentCaptureService;->lambda$onActivityLifecycleEvent$4(Landroid/service/contentcapture/ActivityEvent;Landroid/service/contentcapture/IContentCaptureService;)V
-PLcom/android/server/contentcapture/RemoteContentCaptureService;->lambda$onSessionFinished$1(ILandroid/service/contentcapture/IContentCaptureService;)V
-PLcom/android/server/contentcapture/RemoteContentCaptureService;->lambda$onSessionStarted$0(Landroid/view/contentcapture/ContentCaptureContext;IILcom/android/internal/os/IResultReceiver;ILandroid/service/contentcapture/IContentCaptureService;)V
+HPLcom/android/server/contentcapture/RemoteContentCaptureService;->lambda$onActivityLifecycleEvent$5(Landroid/service/contentcapture/ActivityEvent;Landroid/service/contentcapture/IContentCaptureService;)V
+PLcom/android/server/contentcapture/RemoteContentCaptureService;->lambda$onDataRemovalRequest$3(Landroid/view/contentcapture/DataRemovalRequest;Landroid/service/contentcapture/IContentCaptureService;)V
+HPLcom/android/server/contentcapture/RemoteContentCaptureService;->lambda$onSessionFinished$1(ILandroid/service/contentcapture/IContentCaptureService;)V
+HPLcom/android/server/contentcapture/RemoteContentCaptureService;->lambda$onSessionStarted$0(Landroid/view/contentcapture/ContentCaptureContext;IILcom/android/internal/os/IResultReceiver;ILandroid/service/contentcapture/IContentCaptureService;)V
 HPLcom/android/server/contentcapture/RemoteContentCaptureService;->onActivityLifecycleEvent(Landroid/service/contentcapture/ActivityEvent;)V
-PLcom/android/server/contentcapture/RemoteContentCaptureService;->onSessionFinished(I)V
-PLcom/android/server/contentcapture/RemoteContentCaptureService;->onSessionStarted(Landroid/view/contentcapture/ContentCaptureContext;IILcom/android/internal/os/IResultReceiver;I)V
+PLcom/android/server/contentcapture/RemoteContentCaptureService;->onDataRemovalRequest(Landroid/view/contentcapture/DataRemovalRequest;)V
+HPLcom/android/server/contentcapture/RemoteContentCaptureService;->onSessionFinished(I)V
+HPLcom/android/server/contentcapture/RemoteContentCaptureService;->onSessionStarted(Landroid/view/contentcapture/ContentCaptureContext;IILcom/android/internal/os/IResultReceiver;I)V
+HPLcom/android/server/contentsuggestions/-$$Lambda$RemoteContentSuggestionsService$Enqw46SYVKFK9F2xX4qUcIu5_3I;-><init>(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/contentsuggestions/-$$Lambda$RemoteContentSuggestionsService$Enqw46SYVKFK9F2xX4qUcIu5_3I;->run(Landroid/os/IInterface;)V
+HPLcom/android/server/contentsuggestions/-$$Lambda$RemoteContentSuggestionsService$VKh1DoMPNSPjPfnVGdsInmxuqzc;-><init>(ILandroid/graphics/GraphicBuffer;ILandroid/os/Bundle;)V
+HPLcom/android/server/contentsuggestions/-$$Lambda$RemoteContentSuggestionsService$VKh1DoMPNSPjPfnVGdsInmxuqzc;->run(Landroid/os/IInterface;)V
+PLcom/android/server/contentsuggestions/-$$Lambda$RemoteContentSuggestionsService$eoGnQ2MDLLnW1UBX6wxNE1VBLAk;-><init>(Landroid/app/contentsuggestions/ClassificationsRequest;Landroid/app/contentsuggestions/IClassificationsCallback;)V
+PLcom/android/server/contentsuggestions/-$$Lambda$RemoteContentSuggestionsService$eoGnQ2MDLLnW1UBX6wxNE1VBLAk;->run(Landroid/os/IInterface;)V
+HPLcom/android/server/contentsuggestions/-$$Lambda$RemoteContentSuggestionsService$yUTbcaYlZCYTmagCkNJ3i2VCkY4;-><init>(Landroid/app/contentsuggestions/SelectionsRequest;Landroid/app/contentsuggestions/ISelectionsCallback;)V
+HPLcom/android/server/contentsuggestions/-$$Lambda$RemoteContentSuggestionsService$yUTbcaYlZCYTmagCkNJ3i2VCkY4;->run(Landroid/os/IInterface;)V
 HSPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService$ContentSuggestionsManagerStub;-><init>(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;)V
 HSPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService$ContentSuggestionsManagerStub;-><init>(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService$1;)V
+HPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService$ContentSuggestionsManagerStub;->classifyContentSelections(ILandroid/app/contentsuggestions/ClassificationsRequest;Landroid/app/contentsuggestions/IClassificationsCallback;)V
+HPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService$ContentSuggestionsManagerStub;->notifyInteraction(ILjava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService$ContentSuggestionsManagerStub;->provideContextImage(IILandroid/os/Bundle;)V
+HPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService$ContentSuggestionsManagerStub;->suggestContentSelections(ILandroid/app/contentsuggestions/SelectionsRequest;Landroid/app/contentsuggestions/ISelectionsCallback;)V
 HSPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;-><clinit>()V
 HSPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->newServiceLocked(IZ)Lcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;
-PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->newServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
+HPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$100(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;ILjava/lang/String;)V
+PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$1000(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;)Ljava/lang/Object;
+HPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$1100(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$200(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;)Ljava/lang/Object;
+PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$300(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$400(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;)Ljava/lang/Object;
+HPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$500(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$600(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;)Ljava/lang/Object;
+HPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$700(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$800(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;)Ljava/lang/Object;
+PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$900(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+HPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->enforceCaller(ILjava/lang/String;)V
+HSPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->newServiceLocked(IZ)Lcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;
+HSPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->newServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
 HSPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->onStart()V
-PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;-><clinit>()V
-PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;-><init>(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;Ljava/lang/Object;I)V
+PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService$1;-><init>(Lcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;)V
+PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService$1;->onServiceDied(Lcom/android/server/contentsuggestions/RemoteContentSuggestionsService;)V
+PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService$1;->onServiceDied(Ljava/lang/Object;)V
+HSPLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;-><clinit>()V
+HSPLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;-><init>(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;Ljava/lang/Object;I)V
+PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->access$000()Ljava/lang/String;
+PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->access$100(Lcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;)V
+PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->classifyContentSelectionsLocked(Landroid/app/contentsuggestions/ClassificationsRequest;Landroid/app/contentsuggestions/IClassificationsCallback;)V
+HPLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->ensureRemoteServiceLocked()Lcom/android/server/contentsuggestions/RemoteContentSuggestionsService;
 PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->newServiceInfoLocked(Landroid/content/ComponentName;)Landroid/content/pm/ServiceInfo;
-PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->updateLocked(Z)Z
-PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->updateRemoteServiceLocked()V
+PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->notifyInteractionLocked(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->provideContextImageLocked(ILandroid/os/Bundle;)V
+PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->suggestContentSelectionsLocked(Landroid/app/contentsuggestions/SelectionsRequest;Landroid/app/contentsuggestions/ISelectionsCallback;)V
+HSPLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->updateLocked(Z)Z
+HSPLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->updateRemoteServiceLocked()V
+PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;-><init>(Landroid/content/Context;Landroid/content/ComponentName;ILcom/android/server/contentsuggestions/RemoteContentSuggestionsService$Callbacks;ZZ)V
+PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->classifyContentSelections(Landroid/app/contentsuggestions/ClassificationsRequest;Landroid/app/contentsuggestions/IClassificationsCallback;)V
+PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->getServiceInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
+PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->getServiceInterface(Landroid/os/IBinder;)Landroid/service/contentsuggestions/IContentSuggestionsService;
+PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->getTimeoutIdleBindMillis()J
+PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->lambda$classifyContentSelections$2(Landroid/app/contentsuggestions/ClassificationsRequest;Landroid/app/contentsuggestions/IClassificationsCallback;Landroid/service/contentsuggestions/IContentSuggestionsService;)V
+HPLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->lambda$notifyInteraction$3(Ljava/lang/String;Landroid/os/Bundle;Landroid/service/contentsuggestions/IContentSuggestionsService;)V
+HPLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->lambda$provideContextImage$0(ILandroid/graphics/GraphicBuffer;ILandroid/os/Bundle;Landroid/service/contentsuggestions/IContentSuggestionsService;)V
+HPLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->lambda$suggestContentSelections$1(Landroid/app/contentsuggestions/SelectionsRequest;Landroid/app/contentsuggestions/ISelectionsCallback;Landroid/service/contentsuggestions/IContentSuggestionsService;)V
+HPLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->notifyInteraction(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->provideContextImage(ILandroid/graphics/GraphicBuffer;ILandroid/os/Bundle;)V
+HPLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->suggestContentSelections(Landroid/app/contentsuggestions/SelectionsRequest;Landroid/app/contentsuggestions/ISelectionsCallback;)V
 HSPLcom/android/server/coverage/CoverageService;-><clinit>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$-JG0-dzlHzXDx_I_iTsqSE_Bv5E;-><init>(ZLandroid/os/RemoteCallback;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$-JG0-dzlHzXDx_I_iTsqSE_Bv5E;->accept(Ljava/lang/Object;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$-SLM70h2SesShbP-O5yYa1PYZVw;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$-SLM70h2SesShbP-O5yYa1PYZVw;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$0YdFTQIxrgxkEfzJdhGZzP5z4eM;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$0YdFTQIxrgxkEfzJdhGZzP5z4eM;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$0xOTapp1kSvojAdqJGdavUtvjqU;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$0xOTapp1kSvojAdqJGdavUtvjqU;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$19j1Aw89Idv-1enlT4bK5AugL5A;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$19j1Aw89Idv-1enlT4bK5AugL5A;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1_463wML1lyyuhNEcH6YQZBNupk;-><init>(ZLandroid/os/RemoteCallback;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1_463wML1lyyuhNEcH6YQZBNupk;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1iJrvtbb8D-HC5dcMcu7FeZ0bls;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;IZ)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1iJrvtbb8D-HC5dcMcu7FeZ0bls;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1sOJuLKtNOd9FkSCbRQ10fuHN1Q;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1sOJuLKtNOd9FkSCbRQ10fuHN1Q;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$2CZYBzY0RjTtlQvIxYBzaiQE2iI;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$2CZYBzY0RjTtlQvIxYBzaiQE2iI;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$2dnwZdGuTZnM6wwcm6xROcqfwb0;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$2dnwZdGuTZnM6wwcm6xROcqfwb0;->runOrThrow()V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$3L30HmY-8WRZNE3mKrX3xDa7_k8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$3L30HmY-8WRZNE3mKrX3xDa7_k8;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$3ci-C-bvTQXBAy8k6mmH8aTckko;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$3ci-C-bvTQXBAy8k6mmH8aTckko;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$5-nWFGyr7IsWb84Z7EeOMY-GKY4;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/net/ProxyInfo;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$5-nWFGyr7IsWb84Z7EeOMY-GKY4;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$5Xy1SW6FmfM4-7F8ZHPEFhBAJjs;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$5Xy1SW6FmfM4-7F8ZHPEFhBAJjs;->runOrThrow()V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$6E7MK8TbNUybt8S9CwAdfdcn2x0;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$6E7MK8TbNUybt8S9CwAdfdcn2x0;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$7Cpvth9RknvcbwQxadY3QRMYuFU;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$7Cpvth9RknvcbwQxadY3QRMYuFU;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$7uNrpVR2JSemRG4moJeAWa1SmL4;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/CharSequence;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$7uNrpVR2JSemRG4moJeAWa1SmL4;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$8XUqgbgdUcEUgLSotmYa65MlJU4;-><clinit>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$8XUqgbgdUcEUgLSotmYa65MlJU4;-><init>()V
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$8nvbMteplUbtaSMuw4DWJ-MQa4g;-><clinit>()V
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$8nvbMteplUbtaSMuw4DWJ-MQa4g;-><init>()V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$8qCcR6mM8qspH7fQ8IbJXDcl-oE;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$8qCcR6mM8qspH7fQ8IbJXDcl-oE;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$9BBesRjvUOb0HylcboB6iBXa9rA;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$9BBesRjvUOb0HylcboB6iBXa9rA;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$9H-OtiTr0pLXuE1px0lLrHWW2gg;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$9H-OtiTr0pLXuE1px0lLrHWW2gg;->getOrThrow()Ljava/lang/Object;
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$BYd2ftVebU2Ktj6tr-DFfrGE5TE;-><clinit>()V
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$BYd2ftVebU2Ktj6tr-DFfrGE5TE;-><init>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CAHsZjsjfTBjSCaXhAqawAZQxAs;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;Landroid/content/ComponentName;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CAHsZjsjfTBjSCaXhAqawAZQxAs;->runOrThrow()V
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CClEW-CtZQRadOocoqGh0wiKhG4;-><clinit>()V
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CClEW-CtZQRadOocoqGh0wiKhG4;-><init>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CiK-O2Bv367FPc0wKJTNYLXtCuE;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CiK-O2Bv367FPc0wKJTNYLXtCuE;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Cv-dtXpkqSOvZN0Wu3TuYoNTmmU;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/net/ProxyInfo;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Cv-dtXpkqSOvZN0Wu3TuYoNTmmU;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CxwsOCiBBPip8s6Ob2djUNKClVQ;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;IZLandroid/app/admin/DeviceAdminInfo;Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;Landroid/os/Bundle;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CxwsOCiBBPip8s6Ob2djUNKClVQ;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$D4ztnD6BT25lWG-r4PUjRzNR1zs;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$D4ztnD6BT25lWG-r4PUjRzNR1zs;->runOrThrow()V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$E3l49EGA6UCGqdaOZqz6OFNlTrc;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$E3l49EGA6UCGqdaOZqz6OFNlTrc;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$E9awYavFY3fUvYuziaFPn187V2A;-><init>(ZLandroid/os/RemoteCallback;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$E9awYavFY3fUvYuziaFPn187V2A;->accept(Ljava/lang/Object;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$EmW1vJQsSAWrjreihtc0C_PUzE8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$EmW1vJQsSAWrjreihtc0C_PUzE8;->runOrThrow()V
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$GdvC4eub6BtkkX5BnHuPR5Ob0ag;-><clinit>()V
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$GdvC4eub6BtkkX5BnHuPR5Ob0ag;-><init>()V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$GrJ2yAyrcr8_uJK0BCe9i4AcIYc;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$GrJ2yAyrcr8_uJK0BCe9i4AcIYc;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Hv-tQz9yG7UQN-NW0Pun2vUKT00;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;IZ)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Hv-tQz9yG7UQN-NW0Pun2vUKT00;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$IFjmfnHIk0cwZ4cu_jTHWTsMxfc;-><init>(ZLandroid/os/RemoteCallback;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$IFjmfnHIk0cwZ4cu_jTHWTsMxfc;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$IMrqSPgnQFlD9AquL6PEMeRT48A;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$IMrqSPgnQFlD9AquL6PEMeRT48A;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$IiTDvO4lH6i6MSEHWCEcAk85DDE;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$IiTDvO4lH6i6MSEHWCEcAk85DDE;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$J1D7mGzV3_Pe5CkN4SOHvBx0GQM;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;ZI)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$J1D7mGzV3_Pe5CkN4SOHvBx0GQM;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$JEgkZ2GnVgvzJnS1uvLsrUt2pUs;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$JEgkZ2GnVgvzJnS1uvLsrUt2pUs;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Jn1h0KwAOFO-2SLpickAr7b6UEI;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Jn1h0KwAOFO-2SLpickAr7b6UEI;->runOrThrow()V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$KVBXyPBBtnY04KgNMY8kTUc8TDM;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$KVBXyPBBtnY04KgNMY8kTUc8TDM;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Kt954vcIuhnBMcd-u6lDaLOaZfM;-><clinit>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Kt954vcIuhnBMcd-u6lDaLOaZfM;-><init>()V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Kxt959fEmzAZCuTvdZLLr4ydBwg;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;Landroid/content/ComponentName;Ljava/lang/String;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Kxt959fEmzAZCuTvdZLLr4ydBwg;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$L0UrX9eXuPfnxY8pUss60yr6d3E;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I[B)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$L0UrX9eXuPfnxY8pUss60yr6d3E;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$L1BjBKCM4PsL1cN_5wbAOuBRIk8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$L1BjBKCM4PsL1cN_5wbAOuBRIk8;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$L3XzC2X57y8_uXrsW81Qk8KXQTA;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/CharSequence;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$L3XzC2X57y8_uXrsW81Qk8KXQTA;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$LocalService$YxQa4ZcUPWKs76meOLw1c_tn1OU;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$LocalService$YxQa4ZcUPWKs76meOLw1c_tn1OU;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$LoqX5KbgPsZw5lbWDX6YUnchwpU;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$LoqX5KbgPsZw5lbWDX6YUnchwpU;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MTDdFPtPQJRYX737yGn0OzoNDCQ;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MTDdFPtPQJRYX737yGn0OzoNDCQ;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MX3M3eTWWoV82PMImp1skv1Wm-I;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MX3M3eTWWoV82PMImp1skv1Wm-I;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MviNnPMxpWJ3R18v9L0iG_mI4as;-><clinit>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MviNnPMxpWJ3R18v9L0iG_mI4as;-><init>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$NV9-XJEdh3iVV_1FcyzVTLRWMMs;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$NV9-XJEdh3iVV_1FcyzVTLRWMMs;->runOrThrow()V
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$NzTaj70nEECGXhr52RbDyXK_fPU;-><clinit>()V
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$NzTaj70nEECGXhr52RbDyXK_fPU;-><init>()V
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$O6O5T5aoG6MmH8aAAGYNwYhbtw8;-><clinit>()V
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$O6O5T5aoG6MmH8aAAGYNwYhbtw8;-><init>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$O7VBr2X2LTCZ2rClZ_UwgB-Qoa0;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;IILjava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$O7VBr2X2LTCZ2rClZ_UwgB-Qoa0;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Ohf5PJQmXjsarWisPAuPB8WECX8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Ohf5PJQmXjsarWisPAuPB8WECX8;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$PQxvRo4LWlTe_I8RQ-J5BqZxYGY;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$PQxvRo4LWlTe_I8RQ-J5BqZxYGY;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$PbWvUymvyMNlDpwaJHqqjloqHY0;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$PbWvUymvyMNlDpwaJHqqjloqHY0;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$QSZZ_1yoXc0KadPc27uY1ijTXpM;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/UserHandle;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$QSZZ_1yoXc0KadPc27uY1ijTXpM;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$R7jNGUHgN9uG5tT_PuItt7Vn00g;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$R7jNGUHgN9uG5tT_PuItt7Vn00g;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$RaSE9sEzDuKpHnuwL4Ihn963J7g;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;Landroid/content/ComponentName;Ljava/lang/String;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$RaSE9sEzDuKpHnuwL4Ihn963J7g;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$RgCXuyEFWhEba2UFAFFocJYLNYo;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$RgCXuyEFWhEba2UFAFFocJYLNYo;->runOrThrow()V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Rt85y5wEY0DRLvRJ6XnzxsSF1eo;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Rt85y5wEY0DRLvRJ6XnzxsSF1eo;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$T-DYGQoYs3p1_NgKsVcKRX8fTnA;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$T-DYGQoYs3p1_NgKsVcKRX8fTnA;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$T4eSwgayOKOYwmmjCYnPFwO28Pw;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$T4eSwgayOKOYwmmjCYnPFwO28Pw;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$T7SRZQOZqOGELBG7YRAkVmxuJh4;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/UserHandle;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$T7SRZQOZqOGELBG7YRAkVmxuJh4;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Tvjb8n7J2l26EpnkgMIAbjrhdu8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Tvjb8n7J2l26EpnkgMIAbjrhdu8;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$UPnhCNO69TKnF1hSXENMzK_2NSQ;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$UPnhCNO69TKnF1hSXENMzK_2NSQ;->runOrThrow()V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$UZoVWdpJJZwABGNhZWHbxPIvMO4;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$UZoVWdpJJZwABGNhZWHbxPIvMO4;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$VDIwg4X1iKAqFvQldV7uz3FQETk;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ZILandroid/content/Context;J)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$VDIwg4X1iKAqFvQldV7uz3FQETk;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$WtqYUfe7dJqIftHU4nTlehWlM1o;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$WtqYUfe7dJqIftHU4nTlehWlM1o;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$X8P9YSbXKt6AGKQrPiFxyDc-HJQ;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$X8P9YSbXKt6AGKQrPiFxyDc-HJQ;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$X8ssNAYCaueT78i6KH-xMYuutXA;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$X8ssNAYCaueT78i6KH-xMYuutXA;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Yha2g5948Y6-99_Zk6qnSQ08xaY;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Yha2g5948Y6-99_Zk6qnSQ08xaY;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZKo9wKXbn_FqsEHI_sFpmbOwKZE;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZKo9wKXbn_FqsEHI_sFpmbOwKZE;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZQ4kE3IfWore2zFzZG1Za8zcO2k;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZQ4kE3IfWore2zFzZG1Za8zcO2k;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZX_ASbhDe3h4tTo7Tg94QibI20o;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;IIZLandroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZX_ASbhDe3h4tTo7Tg94QibI20o;->runOrThrow()V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZnmDaAarGwYrOpGdw8hNrUXv7Zk;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZnmDaAarGwYrOpGdw8hNrUXv7Zk;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZpoQff3M1J7SHl-aNOO7YrgHMIw;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/UserHandle;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZpoQff3M1J7SHl-aNOO7YrgHMIw;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZyL5RaozhKx4pFmCb-n3LlH5zy8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZyL5RaozhKx4pFmCb-n3LlH5zy8;->run()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$_4WJ5_9h8DV0lHhL1rEl8TaHdxA;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$_4WJ5_9h8DV0lHhL1rEl8TaHdxA;->getOrThrow()Ljava/lang/Object;
 HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$_Nw-YGl5ncBg-LJs8W81WNW6xoU;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$_Nw-YGl5ncBg-LJs8W81WNW6xoU;->run()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$__SFQBw4-nPdRkwUAOWlzeEXEDg;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$__SFQBw4-nPdRkwUAOWlzeEXEDg;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$a2r02nyCVCgFWzutUK0956l0CYQ;-><clinit>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$a2r02nyCVCgFWzutUK0956l0CYQ;-><init>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$a30NURDJ7zRXLs68n_gcBSzFE40;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$a30NURDJ7zRXLs68n_gcBSzFE40;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$aC4EXkkAMAWYv8qwbTvE24Kub28;-><clinit>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$aC4EXkkAMAWYv8qwbTvE24Kub28;-><init>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$aVGoq4gaY333M9B5L3o4c3HvuCM;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$aVGoq4gaY333M9B5L3o4c3HvuCM;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$cF-dIKd2XSk01iZ99bPAGkzvRQ8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/CharSequence;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$cF-dIKd2XSk01iZ99bPAGkzvRQ8;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$cRGrwg6rL1QILp8DpjsAVKsyR7U;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;IZ)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$cRGrwg6rL1QILp8DpjsAVKsyR7U;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$d08rPNL3sI-Hx7ZpnR_dxsBLZmk;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$d08rPNL3sI-Hx7ZpnR_dxsBLZmk;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$dhmKG9Egag2TPEwukGPiev6dT70;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$dhmKG9Egag2TPEwukGPiev6dT70;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$e2DzcGWRwnNdKo6blzNAob0HsSw;-><init>(ZLandroid/os/RemoteCallback;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$e2DzcGWRwnNdKo6blzNAob0HsSw;->accept(Ljava/lang/Object;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$e7c2huGjk3obVFka43jMbcJT0E8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$e7c2huGjk3obVFka43jMbcJT0E8;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$eKrWywCP77ljwUZh-R1c8aoFHh4;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$eKrWywCP77ljwUZh-R1c8aoFHh4;->runOrThrow()V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$eZw4tgcZRgP2OCEUG4UMwL1KdZI;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$eZw4tgcZRgP2OCEUG4UMwL1KdZI;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$fU0Evn2qWpzcawqc8Qu9d2hCcoA;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$fU0Evn2qWpzcawqc8Qu9d2hCcoA;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$frL8-y9KUDCjvP_ukJ0uoU1Mk5k;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$frL8-y9KUDCjvP_ukJ0uoU1Mk5k;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$fzxODltoSAVybDWkw84u878Ddso;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$fzxODltoSAVybDWkw84u878Ddso;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$g3pjxXrKbnPToHF_egmYdr2f8-M;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;Landroid/os/UserHandle;Landroid/os/IBinder;Z)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$g3pjxXrKbnPToHF_egmYdr2f8-M;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$gbbZuAsRK_vXaCroy1gj9r0-V4o;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$gbbZuAsRK_vXaCroy1gj9r0-V4o;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$hWg24ME7nlaYglkgmkHI7VvIfWk;-><init>(ZLandroid/os/RemoteCallback;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$hWg24ME7nlaYglkgmkHI7VvIfWk;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$hX2NEWgF6rTNkdyJ6G_rvoL6TR0;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$hX2NEWgF6rTNkdyJ6G_rvoL6TR0;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$iojPtiJXnnFJDsa0P-LGE6gfikU;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$iojPtiJXnnFJDsa0P-LGE6gfikU;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$jDU7UhnyXuItN3e_DVSz6WUa7Qc;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$jDU7UhnyXuItN3e_DVSz6WUa7Qc;->runOrThrow()V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ja_JdZk-BJUe5rbQuU_LxLblBfM;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ja_JdZk-BJUe5rbQuU_LxLblBfM;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$jgsUvRSr_6U0Lrv4PXbJtZQe_Mk;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/UserHandle;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$jgsUvRSr_6U0Lrv4PXbJtZQe_Mk;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$l1-j9XdvuDdp7fQsY_n_Pv6CP3A;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$l1-j9XdvuDdp7fQsY_n_Pv6CP3A;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$lG9keASbSI5H2nDJOOi-80s_LvI;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$lG9keASbSI5H2nDJOOi-80s_LvI;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$lmsiKzZN5DKHTzgWChWAyGfrxwk;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$lmsiKzZN5DKHTzgWChWAyGfrxwk;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$m2h-vVM6u7Yweb_QNLSUAbWduj8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$m2h-vVM6u7Yweb_QNLSUAbWduj8;->runOrThrow()V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$mF6fAm3fr7FHqqfmNeO86iULgao;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;I)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$mF6fAm3fr7FHqqfmNeO86iULgao;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$mkMQ9WtInWWL27eiU6IDs8Sol8Q;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$mkMQ9WtInWWL27eiU6IDs8Sol8Q;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$nBM3fQ_95BD262BpQ3v_i1LTo9o;-><clinit>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$nBM3fQ_95BD262BpQ3v_i1LTo9o;-><init>()V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$p6M2CJuZlA3Rm0CLLTJMm5qd9vU;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;IZ)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$p6M2CJuZlA3Rm0CLLTJMm5qd9vU;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$peeHTd988oQjHrGFppwrwfdKZU4;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$peeHTd988oQjHrGFppwrwfdKZU4;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$qLdZ0ebI9-VES2qOXxipAqDsLtg;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/net/ProxyInfo;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$qLdZ0ebI9-VES2qOXxipAqDsLtg;->runOrThrow()V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$qViz9I1AJUZv2wUBqL57ZuJyV6w;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$qViz9I1AJUZv2wUBqL57ZuJyV6w;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$qfNjMPDGLybg6rkwexpw8dZrM-8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$qfNjMPDGLybg6rkwexpw8dZrM-8;->runOrThrow()V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$tAgDO0b7hXUD7MGkHfgPTDV4o6g;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$tAgDO0b7hXUD7MGkHfgPTDV4o6g;->getOrThrow()Ljava/lang/Object;
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$tN28Me5AH2pjgYHvPnMAsCjK_NU;-><clinit>()V
 PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$tN28Me5AH2pjgYHvPnMAsCjK_NU;-><init>()V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$tWth7tXYQXpYp5Hzb8E7OMe1xQU;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$tWth7tXYQXpYp5Hzb8E7OMe1xQU;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$uBbMjDj76ovvi3SNe9WwB6bL1bg;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)V
+HPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$uBbMjDj76ovvi3SNe9WwB6bL1bg;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$uD3EtO2DK71MscaG7ykh6GMewyM;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$uD3EtO2DK71MscaG7ykh6GMewyM;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$uSnwuwX0qdERvQ94-2ib1BPYhnQ;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$uSnwuwX0qdERvQ94-2ib1BPYhnQ;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ubKPRWVtvdZzQDW6CDEvggHJXRc;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ubKPRWVtvdZzQDW6CDEvggHJXRc;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ufUhKIuf-ai14oI_NezHS9qCjh0;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;Landroid/content/ComponentName;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ufUhKIuf-ai14oI_NezHS9qCjh0;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$v4runHJLxiL3Ks01Uqv-LIy69tA;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;Landroid/content/ComponentName;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$v4runHJLxiL3Ks01Uqv-LIy69tA;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$vR-RWtti8ewEGuhsA0IoU86GAmo;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$vR-RWtti8ewEGuhsA0IoU86GAmo;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$vsNaZOHvF-kWqLDfhyiTAaRLpQU;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$vsNaZOHvF-kWqLDfhyiTAaRLpQU;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$wdjKJZZQbwUvNkCxj7a-RCOB9p8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/UserHandle;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$wdjKJZZQbwUvNkCxj7a-RCOB9p8;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$wynHOghqUtl8CTB8Lp1BnOlWruI;-><clinit>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$wynHOghqUtl8CTB8Lp1BnOlWruI;-><init>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$wynHOghqUtl8CTB8Lp1BnOlWruI;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xJ8-hwvSE1cq8C5FtgXnoW_zBZU;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xJ8-hwvSE1cq8C5FtgXnoW_zBZU;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xNEzeKxioITjjXluv5fVIH4Ral4;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xNEzeKxioITjjXluv5fVIH4Ral4;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$x_XvH7NWMAoRsaUgVX92Cmco4J0;-><clinit>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$x_XvH7NWMAoRsaUgVX92Cmco4J0;-><init>()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xabPm_Q5O8A0hxC5Xhkk4DoTmp8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xabPm_Q5O8A0hxC5Xhkk4DoTmp8;->runOrThrow()V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ylqQ-0_BWKf5SNKi5IEZksGSyuU;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+PLcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ylqQ-0_BWKf5SNKi5IEZksGSyuU;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/-$$Lambda$NetworkLoggingHandler$VKC_fB9Ws13yQKJ8zNkiF3Wp0Jk;-><init>(Lcom/android/server/devicepolicy/NetworkLoggingHandler;J)V
+PLcom/android/server/devicepolicy/-$$Lambda$NetworkLoggingHandler$VKC_fB9Ws13yQKJ8zNkiF3Wp0Jk;->run()V
+PLcom/android/server/devicepolicy/-$$Lambda$SecurityLogMonitor$y5Q3dMmmJ8bk5nBh8WR2MUroKrI;-><clinit>()V
+PLcom/android/server/devicepolicy/-$$Lambda$SecurityLogMonitor$y5Q3dMmmJ8bk5nBh8WR2MUroKrI;-><init>()V
+HPLcom/android/server/devicepolicy/-$$Lambda$SecurityLogMonitor$y5Q3dMmmJ8bk5nBh8WR2MUroKrI;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/devicepolicy/BaseIDevicePolicyManager;-><init>()V
 HSPLcom/android/server/devicepolicy/CertificateMonitor$1;-><init>(Lcom/android/server/devicepolicy/CertificateMonitor;)V
-PLcom/android/server/devicepolicy/CertificateMonitor$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/devicepolicy/CertificateMonitor$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/devicepolicy/CertificateMonitor;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Landroid/os/Handler;)V
-PLcom/android/server/devicepolicy/CertificateMonitor;->access$000(Lcom/android/server/devicepolicy/CertificateMonitor;Landroid/os/UserHandle;)V
+HSPLcom/android/server/devicepolicy/CertificateMonitor;->access$000(Lcom/android/server/devicepolicy/CertificateMonitor;Landroid/os/UserHandle;)V
 PLcom/android/server/devicepolicy/CertificateMonitor;->getInstalledCaCertificates(Landroid/os/UserHandle;)Ljava/util/List;
-PLcom/android/server/devicepolicy/CertificateMonitor;->updateInstalledCertificates(Landroid/os/UserHandle;)V
+HSPLcom/android/server/devicepolicy/CertificateMonitor;->updateInstalledCertificates(Landroid/os/UserHandle;)V
+HSPLcom/android/server/devicepolicy/CryptoTestHelper;->runAndLogSelfTest()V
 PLcom/android/server/devicepolicy/DeviceAdminServiceController$DevicePolicyServiceConnection;-><init>(Lcom/android/server/devicepolicy/DeviceAdminServiceController;ILandroid/content/ComponentName;)V
 PLcom/android/server/devicepolicy/DeviceAdminServiceController$DevicePolicyServiceConnection;->asInterface(Landroid/os/IBinder;)Landroid/app/admin/IDeviceAdminService;
 PLcom/android/server/devicepolicy/DeviceAdminServiceController$DevicePolicyServiceConnection;->asInterface(Landroid/os/IBinder;)Ljava/lang/Object;
@@ -8335,15 +13872,17 @@
 HSPLcom/android/server/devicepolicy/DeviceAdminServiceController;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyConstants;)V
 PLcom/android/server/devicepolicy/DeviceAdminServiceController;->access$000(Lcom/android/server/devicepolicy/DeviceAdminServiceController;)Landroid/os/Handler;
 PLcom/android/server/devicepolicy/DeviceAdminServiceController;->access$100(Lcom/android/server/devicepolicy/DeviceAdminServiceController;)Lcom/android/server/devicepolicy/DevicePolicyConstants;
-PLcom/android/server/devicepolicy/DeviceAdminServiceController;->debug(Ljava/lang/String;[Ljava/lang/Object;)V
-PLcom/android/server/devicepolicy/DeviceAdminServiceController;->disconnectServiceOnUserLocked(ILjava/lang/String;)V
+HSPLcom/android/server/devicepolicy/DeviceAdminServiceController;->debug(Ljava/lang/String;[Ljava/lang/Object;)V
+HSPLcom/android/server/devicepolicy/DeviceAdminServiceController;->disconnectServiceOnUserLocked(ILjava/lang/String;)V
 PLcom/android/server/devicepolicy/DeviceAdminServiceController;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/devicepolicy/DeviceAdminServiceController;->findService(Ljava/lang/String;I)Landroid/content/pm/ServiceInfo;
-PLcom/android/server/devicepolicy/DeviceAdminServiceController;->startServiceForOwner(Ljava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/server/devicepolicy/DeviceAdminServiceController;->findService(Ljava/lang/String;I)Landroid/content/pm/ServiceInfo;
+HSPLcom/android/server/devicepolicy/DeviceAdminServiceController;->startServiceForOwner(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/DeviceAdminServiceController;->stopServiceForOwner(ILjava/lang/String;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyCacheImpl;-><init>()V
 PLcom/android/server/devicepolicy/DevicePolicyCacheImpl;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/devicepolicy/DevicePolicyCacheImpl;->getPasswordQuality(I)I
-PLcom/android/server/devicepolicy/DevicePolicyCacheImpl;->getScreenCaptureDisabled(I)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyCacheImpl;->getPasswordQuality(I)I
+HSPLcom/android/server/devicepolicy/DevicePolicyCacheImpl;->getScreenCaptureDisabled(I)Z
+PLcom/android/server/devicepolicy/DevicePolicyCacheImpl;->onUserRemoved(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyCacheImpl;->setPasswordQuality(II)V
 HSPLcom/android/server/devicepolicy/DevicePolicyCacheImpl;->setScreenCaptureDisabled(IZ)V
 HSPLcom/android/server/devicepolicy/DevicePolicyConstants;-><init>(Ljava/lang/String;)V
@@ -8355,119 +13894,216 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$4$1;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService$4;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$4$1;->run()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$4;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$4;->sendDeviceOwnerUserCommand(Ljava/lang/String;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$4;->sendDeviceOwnerUserCommand(Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$5;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$6;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/os/IBinder;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$8;->run()V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$8;->run()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;-><clinit>()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;-><init>(Landroid/app/admin/DeviceAdminInfo;Z)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->ensureUserRestrictions()Landroid/os/Bundle;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->getParentActiveAdmin()Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->getUid()I
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->getUserHandle()Landroid/os/UserHandle;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->hasParentActiveAdmin()Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->hasUserRestrictions()Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->readAttributeValues(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Ljava/util/Collection;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;Z)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->readPackageList(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/util/List;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->writeAttributeValuesToXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/lang/String;Ljava/util/Collection;)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->writeAttributeValueToXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->writeAttributeValueToXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;J)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->writeAttributeValueToXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Z)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->writeAttributeValuesToXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/lang/String;Ljava/util/Collection;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->writePackageListToXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/util/List;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->writeTextToXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyConstantsObserver;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/os/Handler;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyConstantsObserver;->register()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;-><init>(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderClearCallingIdentity()J
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderGetCallingPid()I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderGetCallingPid()I
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderGetCallingUid()I
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderGetCallingUserHandle()Landroid/os/UserHandle;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderGetCallingUserHandle()Landroid/os/UserHandle;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderIsCallingUidMyUid()Z
 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;->environmentGetUserSystemDirectory(I)Ljava/io/File;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getActivityManagerInternal()Landroid/app/ActivityManagerInternal;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getActivityTaskManagerInternal()Lcom/android/server/wm/ActivityTaskManagerInternal;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getAlarmManager()Landroid/app/AlarmManager;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getConnectivityManager()Landroid/net/ConnectivityManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getDevicePolicyFilePathForSystemUser()Ljava/lang/String;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getIActivityManager()Landroid/app/IActivityManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getIActivityTaskManager()Landroid/app/IActivityTaskManager;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getIBackupManager()Landroid/app/backup/IBackupManager;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getIIpConnectivityMetrics()Landroid/net/IIpConnectivityMetrics;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getIPackageManager()Landroid/content/pm/IPackageManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getIPermissionManager()Landroid/permission/IPermissionManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getIPlatformCompat()Lcom/android/internal/compat/IPlatformCompat;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getIWindowManager()Landroid/view/IWindowManager;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getIWindowManager()Landroid/view/IWindowManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getLockSettingsInternal()Lcom/android/internal/widget/LockSettingsInternal;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getMyLooper()Landroid/os/Looper;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getNetworkPolicyManagerInternal()Lcom/android/server/net/NetworkPolicyManagerInternal;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getNotificationManager()Landroid/app/NotificationManager;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getNotificationManager()Landroid/app/NotificationManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getPackageManager()Landroid/content/pm/PackageManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getPackageManagerInternal()Landroid/content/pm/PackageManagerInternal;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getPermissionControllerManager(Landroid/os/UserHandle;)Landroid/permission/PermissionControllerManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getPowerManagerInternal()Landroid/os/PowerManagerInternal;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getTelephonyManager()Landroid/telephony/TelephonyManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getUsageStatsManagerInternal()Landroid/app/usage/UsageStatsManagerInternal;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getUserManager()Landroid/os/UserManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getUserManagerInternal()Landroid/os/UserManagerInternal;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getWifiManager()Landroid/net/wifi/WifiManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->hasFeature()Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->hasUserSetupCompleted(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->isBuildDebuggable()Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->keyChainBindAsUser(Landroid/os/UserHandle;)Landroid/security/KeyChain$KeyChainConnection;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->newLockPatternUtils()Lcom/android/internal/widget/LockPatternUtils;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->newOwners()Lcom/android/server/devicepolicy/Owners;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->newTransferOwnershipMetadataManager()Lcom/android/server/devicepolicy/TransferOwnershipMetadataManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->postOnSystemServerInitThreadPool(Ljava/lang/Runnable;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->runCryptoSelfTest()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->securityLogGetLoggingEnabledProperty()Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->securityLogIsLoggingEnabled()Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->settingsGlobalGetInt(Ljava/lang/String;I)I
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->settingsGlobalGetString(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->settingsGlobalPutInt(Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->settingsGlobalPutString(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->settingsSecureGetIntForUser(Ljava/lang/String;II)I
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->storageManagerIsFileBasedEncryptionEnabled()Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->settingsSecurePutIntForUser(Ljava/lang/String;II)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->settingsSecurePutStringForUser(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->storageManagerIsFileBasedEncryptionEnabled()Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->systemPropertiesGet(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->systemPropertiesGet(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->systemPropertiesGetLong(Ljava/lang/String;J)J
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->systemPropertiesSet(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->userHandleGetCallingUserId()I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->userManagerIsSplitSystemUser()Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;->onBootPhase(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;->onStart()V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;->onStartUser(I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;->onStartUser(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;->onStopUser(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;->onUnlockUser(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->access$2100(Lcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;ILjava/util/List;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->access$2300(Lcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;ILjava/util/List;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->addOnCrossProfileWidgetProvidersChangeListener(Landroid/app/admin/DevicePolicyManagerInternal$OnCrossProfileWidgetProvidersChangeListener;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->canSilentlyInstallPackage(Ljava/lang/String;I)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getCrossProfileWidgetProviders(I)Ljava/util/List;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getDevicePolicyCache()Landroid/app/admin/DevicePolicyCache;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getCrossProfileWidgetProviders(I)Ljava/util/List;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getDevicePolicyCache()Landroid/app/admin/DevicePolicyCache;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getDeviceStateCache()Landroid/app/admin/DeviceStateCache;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveAdminWithPolicy(II)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->notifyCrossProfileProvidersChanged(ILjava/util/List;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveAdminWithPolicy(II)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isUserAffiliatedWithDevice(I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->lambda$reportSeparateProfileChallengeChanged$0$DevicePolicyManagerService$LocalService(I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->notifyCrossProfileProvidersChanged(ILjava/util/List;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->reportSeparateProfileChallengeChanged(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$RestrictionsListener;-><init>(Landroid/content/Context;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$RestrictionsListener;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$RestrictionsListener;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$SetupContentObserver;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/os/Handler;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$SetupContentObserver;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$SetupContentObserver;->register()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;-><clinit>()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1400(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1500(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$2800(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;II)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1000(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1100(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1200(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1300(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1400(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1500(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1600(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1700(Lcom/android/server/devicepolicy/DevicePolicyManagerService;IZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1700(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1900(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$1900(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$2000(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$2300(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$2400(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$2500(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$2600(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;II)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$2800(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$2800(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;II)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$2900(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Lcom/android/server/devicepolicy/DevicePolicyCacheImpl;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$3000(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Lcom/android/server/devicepolicy/DeviceStateCacheImpl;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$3100(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Lcom/android/server/devicepolicy/DevicePolicyCacheImpl;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$3100(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$3200(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Lcom/android/server/devicepolicy/DeviceStateCacheImpl;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$3200(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$3300(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Lcom/android/server/devicepolicy/DevicePolicyCacheImpl;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$3400(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Lcom/android/server/devicepolicy/DeviceStateCacheImpl;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$3500(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/IBinder;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$3700(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/IBinder;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$600(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$700(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$800(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->access$900(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->addCrossProfileIntentFilter(Landroid/content/ComponentName;Landroid/content/IntentFilter;I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->addCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->addCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->addOrRemoveDisableCameraRestriction(Landroid/os/Bundle;I)Landroid/os/Bundle;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->addOrRemoveDisableCameraRestriction(Landroid/os/Bundle;Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;)Landroid/os/Bundle;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->applyPersonalAppsSuspension(IZ)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->areAllUsersAffiliatedWithDeviceLocked()Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->canProfileOwnerAccessDeviceIds(I)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->canUserBindToDeviceOwnerLocked(I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->canUserBindToDeviceOwnerLocked(I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->canUserUseLockTaskLocked(I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkActiveAdminPrecondition(Landroid/content/ComponentName;Landroid/app/admin/DeviceAdminInfo;Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkDeviceIdentifierAccess(Ljava/lang/String;II)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkPackagesInPermittedListOrSystem(Ljava/util/List;Ljava/util/List;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkDeviceOwnerProvisioningPreCondition(I)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkDeviceOwnerProvisioningPreConditionLocked(Landroid/content/ComponentName;IZZ)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkManagedProfileProvisioningPreCondition(Ljava/lang/String;I)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkPackageSuspensionOnBoot()V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkPackagesInPermittedListOrSystem(Ljava/util/List;Ljava/util/List;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkProvisioningPreCondition(Ljava/lang/String;Ljava/lang/String;)I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkProvisioningPreConditionSkipPermission(Ljava/lang/String;Ljava/lang/String;)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkUserProvisioningStateTransition(II)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->choosePrivateKeyAlias(ILandroid/net/Uri;Ljava/lang/String;Landroid/os/IBinder;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->cleanUpOldUsers()V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->clearCrossProfileIntentFilters(Landroid/content/ComponentName;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->doesPackageMatchUid(Ljava/lang/String;I)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->clearPersonalAppsSuspendedNotification()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->createAdminSupportIntent(Ljava/lang/String;)Landroid/content/Intent;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->discardDeviceWideLogsLocked()V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->doesPackageMatchUid(Ljava/lang/String;I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->dumpDevicePolicyData(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->dumpDevicePolicyData(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enableIfNecessary(Ljava/lang/String;I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enableSystemApp(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCallerCanRequestDeviceIdAttestation(Landroid/content/ComponentName;Ljava/lang/String;I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCanCallLockTaskLocked(Landroid/content/ComponentName;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCanManageCaCerts(Landroid/content/ComponentName;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCanManageDeviceAdmin()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCanManageProfileAndDeviceOwners()V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCanManageScope(Landroid/content/ComponentName;Ljava/lang/String;ILjava/lang/String;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCanManageScopeOrCheckPermission(Landroid/content/ComponentName;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCrossUsersPermission(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCanSetProfileOwnerLocked(Landroid/content/ComponentName;IZ)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCrossUsersPermission(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceDeviceOwner(Landroid/content/ComponentName;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceDeviceOwnerOrManageUsers()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceDeviceOwnerOrProfileOwnerOnOrganizationOwnedDevice(Landroid/content/ComponentName;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceFullCrossUsersPermission(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceManageUsers()V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceManagedProfile(ILjava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceProfileOrDeviceOwner(Landroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceIndividualAttestationSupportedIfRequested([I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceManageUsers()V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceManagedProfile(ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceNotManagedProfile(ILjava/lang/String;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceProfileOrDeviceOwner(Landroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceProfileOwnerOrFullCrossUsersPermission(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceProfileOwnerOrSystemUser()V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceSystemCaller(Ljava/lang/String;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceSystemUserOrPermission(Ljava/lang/String;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceSystemUserOrPermissionIfCrossUser(ILjava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureCallerIdentityMatchesIfNotSystem(Ljava/lang/String;II)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureCallerPackage(Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceUserUnlocked(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceUserUnlocked(IZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureAllUsersAffiliated()V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureCallerIdentityMatchesIfNotSystem(Ljava/lang/String;II)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureCallerPackage(Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureDeviceOwnerAndAllUsersAffiliated(Landroid/content/ComponentName;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureDeviceOwnerUserStarted()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureLocked()V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureMinimumQuality(ILcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;ILjava/lang/String;)V
@@ -8476,185 +14112,436 @@
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->findOwnerComponentIfNecessaryLocked()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->generateKeyPair(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/security/keystore/ParcelableKeyGenParameterSpec;ILandroid/security/keymaster/KeymasterCertificateChain;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAcceptedCaCertificates(Landroid/os/UserHandle;)Ljava/util/Set;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAccountTypesWithManagementDisabledAsUser(I)[Ljava/lang/String;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminForCallerLocked(Landroid/content/ComponentName;I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAccessibilityManagerForUser(I)Landroid/view/accessibility/AccessibilityManager;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAccountTypesWithManagementDisabledAsUser(I)[Ljava/lang/String;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminForCallerLocked(Landroid/content/ComponentName;I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminForCallerLocked(Landroid/content/ComponentName;IZ)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminForUidLocked(Landroid/content/ComponentName;I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminOrCheckPermissionForCallerLocked(Landroid/content/ComponentName;ILjava/lang/String;)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminOrCheckPermissionForCallerLocked(Landroid/content/ComponentName;IZLjava/lang/String;)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminPackagesLocked(I)Ljava/util/Set;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminUncheckedLocked(Landroid/content/ComponentName;I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminUncheckedLocked(Landroid/content/ComponentName;IZ)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminWithPolicyForUidLocked(Landroid/content/ComponentName;II)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdmins(I)Ljava/util/List;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminUncheckedLocked(Landroid/content/ComponentName;IZ)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminWithPolicyForUidLocked(Landroid/content/ComponentName;II)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdmins(I)Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminsForAffectedUser(IZ)Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminsForLockscreenPoliciesLocked(IZ)Ljava/util/List;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAdminWithMinimumFailedPasswordsForWipeLocked(IZ)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAlwaysOnVpnPackage(Landroid/content/ComponentName;)Ljava/lang/String;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getBindDeviceAdminTargetUsers(Landroid/content/ComponentName;)Ljava/util/List;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getApplicationLabel(Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getBindDeviceAdminTargetUsers(Landroid/content/ComponentName;)Ljava/util/List;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getBluetoothContactSharingDisabledForUser(I)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCameraDisabled(Landroid/content/ComponentName;IZ)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCameraDisabled(Landroid/content/ComponentName;IZZ)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCredentialOwner(IZ)I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCredentialOwner(IZ)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCrossProfileCalendarPackagesForUser(I)Ljava/util/List;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCrossProfileCallerIdDisabledForUser(I)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCrossProfileContactsSearchDisabledForUser(I)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCrossProfileWidgetProviders(Landroid/content/ComponentName;)Ljava/util/List;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCurrentFailedPasswordAttempts(IZ)I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCurrentFailedPasswordAttempts(IZ)I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDelegatePackagesInternalLocked(Ljava/lang/String;I)Ljava/util/List;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerAdminLocked()Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerComponent(Z)Landroid/content/ComponentName;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerOrganizationName()Ljava/lang/CharSequence;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerUserId()I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerOrganizationName()Ljava/lang/CharSequence;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerRemoteBugreportUri()Ljava/lang/String;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerUserId()I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDisallowedSystemApps(Landroid/content/ComponentName;ILjava/lang/String;)Ljava/util/List;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getEncryptionStatus()I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getEncryptionStatus()I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getEncryptionStatusName(I)Ljava/lang/String;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getIntentFilterActions(Landroid/content/IntentFilter;)[Ljava/lang/String;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getKeepUninstalledPackagesLocked()Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)I
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getLockObject()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getManagedUserId(I)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;IZ)I
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMaximumTimeToLock(Landroid/content/ComponentName;IZ)J
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMaximumTimeToLock(Landroid/content/ComponentName;IZ)J
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMaximumTimeToLockPolicyFromAdmins(Ljava/util/List;)J
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMeteredDisabledPackagesLocked(I)Ljava/util/Set;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getOrganizationNameForUser(I)Ljava/lang/CharSequence;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMinimumStrongAuthTimeoutMs()J
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getOrganizationNameForUser(I)Ljava/lang/CharSequence;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getOwnerComponent(I)Landroid/content/ComponentName;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordExpirationLocked(Landroid/content/ComponentName;IZ)J
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordExpirationTimeout(Landroid/content/ComponentName;IZ)J
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getOwnerInstalledCaCerts(Landroid/os/UserHandle;)Landroid/content/pm/StringParceledListSlice;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordComplexity(Z)I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordExpirationLocked(Landroid/content/ComponentName;IZ)J
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordExpirationTimeout(Landroid/content/ComponentName;IZ)J
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordHistoryLength(Landroid/content/ComponentName;IZ)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordMinimumLength(Landroid/content/ComponentName;IZ)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordMinimumLetters(Landroid/content/ComponentName;IZ)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordMinimumLowerCase(Landroid/content/ComponentName;IZ)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordMinimumMetrics(I)Landroid/app/admin/PasswordMetrics;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordMinimumMetrics(IZ)Landroid/app/admin/PasswordMetrics;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordMinimumNonLetter(Landroid/content/ComponentName;IZ)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordMinimumNumeric(Landroid/content/ComponentName;IZ)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordMinimumSymbols(Landroid/content/ComponentName;IZ)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordMinimumUpperCase(Landroid/content/ComponentName;IZ)I
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPasswordQuality(Landroid/content/ComponentName;IZ)I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPendingSystemUpdate(Landroid/content/ComponentName;)Landroid/app/admin/SystemUpdateInfo;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPermissionPolicy(Landroid/content/ComponentName;)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPermittedAccessibilityServicesForUser(I)Ljava/util/List;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPermittedInputMethodsForCurrentUser()Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPolicyFileDirectory(I)Ljava/io/File;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPowerManagerInternal()Landroid/os/PowerManagerInternal;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwner(I)Landroid/content/ComponentName;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerAdminLocked(I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerAsUser(I)Landroid/content/ComponentName;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerName(I)Ljava/lang/String;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerOfOrganizationOwnedDeviceLocked(I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileParentId(I)I
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getRequiredStrongAuthTimeout(Landroid/content/ComponentName;IZ)J
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getRequiredStrongAuthTimeout(Landroid/content/ComponentName;IZ)J
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getRestrictionsProvider(I)Landroid/content/ComponentName;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getScreenCaptureDisabled(Landroid/content/ComponentName;I)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getStorageEncryptionStatus(Ljava/lang/String;I)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getShortSupportMessageForUser(Landroid/content/ComponentName;I)Ljava/lang/CharSequence;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getStorageEncryptionStatus(Ljava/lang/String;I)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getStrictestPasswordRequirement(Landroid/content/ComponentName;IZLjava/util/function/Function;I)I
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getTargetSdk(Ljava/lang/String;I)I
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserData(I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserDataUnchecked(I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserInfo(I)Landroid/content/pm/UserInfo;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handlePackagesChanged(Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserProvisioningState()I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserProvisioningState(I)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getWifiMacAddress(Landroid/content/ComponentName;)Ljava/lang/String;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->handlePackagesChanged(Ljava/lang/String;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handlePasswordExpirationNotification(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleStartUser(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleStopUser(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleUnlockUser(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasDeviceOwner()Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasGrantedPolicy(Landroid/content/ComponentName;II)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasDeviceOwner()Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasFeatureManagedUsers()Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasGrantedPolicy(Landroid/content/ComponentName;II)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasIncompatibleAccountsOrNonAdbNoLock(ILandroid/content/ComponentName;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasProfileOwner(I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasUserSetupCompleted(I)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isActiveAdminWithPolicyForUserLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;II)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isActivePasswordSufficient(IZ)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isActivePasswordSufficient(IZ)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isActivePasswordSufficientForUserLocked(ZLandroid/app/admin/PasswordMetrics;IZ)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isAdminActive(Landroid/content/ComponentName;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isAdb()Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isAdminActive(Landroid/content/ComponentName;I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Z)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCallerDelegate(Ljava/lang/String;ILjava/lang/String;)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCallerWithSystemUid()Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCurrentInputMethodSetByOwner()Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCurrentUserDemo()Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDeviceOwner(Landroid/content/ComponentName;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDeviceOwner(Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDeviceOwnerPackage(Ljava/lang/String;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDeviceProvisioned()Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isEncryptionSupported()Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isLimitPasswordAllowed(Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;I)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isLockTaskPermitted(Ljava/lang/String;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isLockTaskPermitted(Ljava/lang/String;)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isLogoutEnabled()Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isManagedProfile(I)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isManagedProfile(Landroid/content/ComponentName;)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNetworkLoggingEnabled(Landroid/content/ComponentName;Ljava/lang/String;)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNetworkLoggingEnabledInternalLocked()Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isManagedProfile(Landroid/content/ComponentName;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isMeteredDataDisabledPackageForUser(Landroid/content/ComponentName;Ljava/lang/String;I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNetworkLoggingEnabled(Landroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNetworkLoggingEnabledInternalLocked()Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNotificationListenerServicePermitted(Ljava/lang/String;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isPackageInstalledForUser(Ljava/lang/String;I)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isPackageSuspended(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isPackageTestOnly(Ljava/lang/String;I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isPasswordSufficientForUserWithoutCheckpointLocked(Landroid/app/admin/PasswordMetrics;IZ)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileActivePasswordSufficientForParent(I)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwner(Landroid/content/ComponentName;I)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwnerOfOrganizationOwnedDevice(Landroid/content/ComponentName;I)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isRemovedPackage(Ljava/lang/String;Ljava/lang/String;I)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSeparateProfileChallengeAllowed(I)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwnerOfOrganizationOwnedDevice(I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwnerOfOrganizationOwnedDevice(Landroid/content/ComponentName;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwnerOfOrganizationOwnedDevice(Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwnerPackage(Ljava/lang/String;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProvisioningAllowed(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isRemovedPackage(Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isRemovingAdmin(Landroid/content/ComponentName;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isResetPasswordTokenActive(Landroid/content/ComponentName;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isRuntimePermission(Ljava/lang/String;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSecondaryLockscreenEnabled(I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSecurityLoggingEnabled(Landroid/content/ComponentName;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSeparateProfileChallengeAllowed(I)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSeparateProfileChallengeEnabled(I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSystemApp(Landroid/content/pm/IPackageManager;Ljava/lang/String;I)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUserAffiliatedWithDeviceLocked(I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUninstallInQueue(Ljava/lang/String;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUserAffiliatedWithDeviceLocked(I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUsingUnifiedPassword(Landroid/content/ComponentName;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$areAllUsersAffiliatedWithDeviceLocked$71$DevicePolicyManagerService()Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$areAllUsersAffiliatedWithDeviceLocked$72$DevicePolicyManagerService()Ljava/lang/Boolean;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$areAllUsersAffiliatedWithDeviceLocked$74$DevicePolicyManagerService()Ljava/lang/Boolean;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$areAllUsersAffiliatedWithDeviceLocked$80$DevicePolicyManagerService()Ljava/lang/Boolean;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$areAllUsersAffiliatedWithDeviceLocked$81$DevicePolicyManagerService()Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$areAllUsersAffiliatedWithDeviceLocked$82$DevicePolicyManagerService()Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$choosePrivateKeyAlias$23$DevicePolicyManagerService(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/os/IBinder;Z)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$clearPersonalAppsSuspendedNotification$104$DevicePolicyManagerService()V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$clearPersonalAppsSuspendedNotification$105$DevicePolicyManagerService()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$clearPersonalAppsSuspendedNotification$106$DevicePolicyManagerService()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$ensureMinimumQuality$9$DevicePolicyManagerService(Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;IILjava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getAlwaysOnVpnPackage$25$DevicePolicyManagerService(I)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getAlwaysOnVpnPackage$26$DevicePolicyManagerService(I)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getApplicationLabel$47$DevicePolicyManagerService(ILjava/lang/String;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getApplicationRestrictions$53$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/os/Bundle;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getApplicationRestrictions$54$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/os/Bundle;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getApplicationRestrictions$55$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/os/Bundle;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getApplicationRestrictions$56$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/os/Bundle;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getApplicationRestrictions$57$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/os/Bundle;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getBindDeviceAdminTargetUsers$72$DevicePolicyManagerService(Landroid/content/ComponentName;I)Ljava/util/ArrayList;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getBindDeviceAdminTargetUsers$73$DevicePolicyManagerService(Landroid/content/ComponentName;I)Ljava/util/ArrayList;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getBindDeviceAdminTargetUsers$74$DevicePolicyManagerService(Landroid/content/ComponentName;I)Ljava/util/ArrayList;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getBindDeviceAdminTargetUsers$76$DevicePolicyManagerService(Landroid/content/ComponentName;I)Ljava/util/ArrayList;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getBindDeviceAdminTargetUsers$82$DevicePolicyManagerService(Landroid/content/ComponentName;I)Ljava/util/ArrayList;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getBindDeviceAdminTargetUsers$83$DevicePolicyManagerService(Landroid/content/ComponentName;I)Ljava/util/ArrayList;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getBindDeviceAdminTargetUsers$84$DevicePolicyManagerService(Landroid/content/ComponentName;I)Ljava/util/ArrayList;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getCredentialOwner$47$DevicePolicyManagerService(IZ)Ljava/lang/Integer;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getCredentialOwner$48$DevicePolicyManagerService(IZ)Ljava/lang/Integer;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getCredentialOwner$49$DevicePolicyManagerService(IZ)Ljava/lang/Integer;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getCredentialOwner$50$DevicePolicyManagerService(IZ)Ljava/lang/Integer;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPasswordHistoryLength$10(Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;)Ljava/lang/Integer;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPermissionGrantState$65$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)Ljava/lang/Integer;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPermissionGrantState$66$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)Ljava/lang/Integer;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPermissionGrantState$67$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)Ljava/lang/Integer;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPermissionGrantState$69$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)Ljava/lang/Integer;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPermissionGrantState$75$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)Ljava/lang/Integer;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPermissionGrantState$76$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)Ljava/lang/Integer;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPermissionGrantState$77$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageManager;)Ljava/lang/Integer;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getProfileOwnerOfOrganizationOwnedDeviceLocked$44$DevicePolicyManagerService(I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getProfileOwnerOfOrganizationOwnedDeviceLocked$45$DevicePolicyManagerService(I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getProfileOwnerOfOrganizationOwnedDeviceLocked$46$DevicePolicyManagerService(I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getProfileParentId$46$DevicePolicyManagerService(I)Ljava/lang/Integer;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getProfileParentId$47$DevicePolicyManagerService(I)Ljava/lang/Integer;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getProfileParentId$48$DevicePolicyManagerService(I)Ljava/lang/Integer;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getProfileParentId$49$DevicePolicyManagerService(I)Ljava/lang/Integer;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getUserDataUnchecked$0$DevicePolicyManagerService(I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getUserInfo$17$DevicePolicyManagerService(I)Landroid/content/pm/UserInfo;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getUserInfo$18$DevicePolicyManagerService(I)Landroid/content/pm/UserInfo;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getWifiMacAddress$67$DevicePolicyManagerService(Landroid/content/ComponentName;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getWifiMacAddress$68$DevicePolicyManagerService(Landroid/content/ComponentName;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getWifiMacAddress$70$DevicePolicyManagerService(Landroid/content/ComponentName;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getWifiMacAddress$76$DevicePolicyManagerService(Landroid/content/ComponentName;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getWifiMacAddress$77$DevicePolicyManagerService(Landroid/content/ComponentName;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getWifiMacAddress$78$DevicePolicyManagerService(Landroid/content/ComponentName;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isApplicationHidden$59$DevicePolicyManagerService(Ljava/lang/String;I)Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isApplicationHidden$60$DevicePolicyManagerService(Ljava/lang/String;I)Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isResetPasswordTokenActive$80$DevicePolicyManagerService(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isResetPasswordTokenActive$81$DevicePolicyManagerService(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isResetPasswordTokenActive$83$DevicePolicyManagerService(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isResetPasswordTokenActive$89$DevicePolicyManagerService(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isResetPasswordTokenActive$90$DevicePolicyManagerService(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isResetPasswordTokenActive$91$DevicePolicyManagerService(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)Ljava/lang/Boolean;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isSeparateProfileChallengeEnabled$8$DevicePolicyManagerService(I)Ljava/lang/Boolean;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$loadAdminDataAsync$0$DevicePolicyManagerService()V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$loadAdminDataAsync$4$DevicePolicyManagerService()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$maybeClearLockTaskPolicyLocked$62$DevicePolicyManagerService()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$notifyPendingSystemUpdate$64$DevicePolicyManagerService(Landroid/content/Intent;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$notifyPendingSystemUpdate$65$DevicePolicyManagerService(Landroid/content/Intent;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$notifyPendingSystemUpdate$67$DevicePolicyManagerService(Landroid/content/Intent;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$notifyPendingSystemUpdate$73$DevicePolicyManagerService(Landroid/content/Intent;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$notifyPendingSystemUpdate$74$DevicePolicyManagerService(Landroid/content/Intent;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$removeActiveAdmin$6$DevicePolicyManagerService(Landroid/content/ComponentName;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$reportSuccessfulPasswordAttempt$30$DevicePolicyManagerService(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$reportSuccessfulPasswordAttempt$31$DevicePolicyManagerService(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$sendChangedNotification$2$DevicePolicyManagerService(Landroid/content/Intent;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setActiveAdmin$3$DevicePolicyManagerService(Landroid/content/ComponentName;IZLandroid/app/admin/DeviceAdminInfo;Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;Landroid/os/Bundle;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setApplicationHidden$58$DevicePolicyManagerService(Ljava/lang/String;ZI)Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setApplicationRestrictions$49$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;Landroid/content/ComponentName;Ljava/lang/String;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setApplicationRestrictions$50$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;Landroid/content/ComponentName;Ljava/lang/String;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setApplicationRestrictions$51$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;Landroid/content/ComponentName;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setApplicationRestrictions$52$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;Landroid/content/ComponentName;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setApplicationRestrictions$53$DevicePolicyManagerService(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;Landroid/content/ComponentName;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setDeviceOwnerLockScreenInfo$41$DevicePolicyManagerService(Ljava/lang/CharSequence;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setDeviceOwnerLockScreenInfo$42$DevicePolicyManagerService(Ljava/lang/CharSequence;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setDeviceOwnerLockScreenInfo$43$DevicePolicyManagerService(Ljava/lang/CharSequence;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setExpirationAlarmCheckLocked$1$DevicePolicyManagerService(ZILandroid/content/Context;J)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setGlobalSetting$57$DevicePolicyManagerService(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setGlobalSetting$58$DevicePolicyManagerService(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setGlobalSetting$62$DevicePolicyManagerService(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setGlobalSetting$63$DevicePolicyManagerService(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setGlobalSetting$64$DevicePolicyManagerService(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setNetworkLoggingActiveInternal$75$DevicePolicyManagerService(Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setNetworkLoggingActiveInternal$76$DevicePolicyManagerService(Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setNetworkLoggingActiveInternal$78$DevicePolicyManagerService(Z)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setNetworkLoggingActiveInternal$84$DevicePolicyManagerService(Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setNetworkLoggingActiveInternal$85$DevicePolicyManagerService(Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setNetworkLoggingActiveInternal$86$DevicePolicyManagerService(Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setPasswordQuality$7$DevicePolicyManagerService(Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;IIZLandroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setPermissionGrantState$65(ZLandroid/os/RemoteCallback;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Boolean;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setPermissionGrantState$66(ZLandroid/os/RemoteCallback;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Boolean;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setPermissionGrantState$68(ZLandroid/os/RemoteCallback;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Boolean;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setPermissionGrantState$74(ZLandroid/os/RemoteCallback;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Boolean;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setPermissionGrantState$75(ZLandroid/os/RemoteCallback;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Boolean;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setPermissionGrantState$76(ZLandroid/os/RemoteCallback;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Boolean;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setProfileEnabled$42$DevicePolicyManagerService(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setProfileEnabled$43$DevicePolicyManagerService(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setProfileOwner$39$DevicePolicyManagerService(ILcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setProfileOwner$40$DevicePolicyManagerService(ILcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setRecommendedGlobalProxy$32$DevicePolicyManagerService(Landroid/net/ProxyInfo;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setRecommendedGlobalProxy$33$DevicePolicyManagerService(Landroid/net/ProxyInfo;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setRecommendedGlobalProxy$34$DevicePolicyManagerService(Landroid/net/ProxyInfo;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setResetPasswordToken$88$DevicePolicyManagerService(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I[B)Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setSecureSetting$62$DevicePolicyManagerService(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setSecureSetting$63$DevicePolicyManagerService(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setSecureSetting$65$DevicePolicyManagerService(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setSecureSetting$70$DevicePolicyManagerService(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setSecureSetting$71$DevicePolicyManagerService(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setSecureSetting$72$DevicePolicyManagerService(Ljava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$updateMaximumTimeToLockLocked$19$DevicePolicyManagerService(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$updateMaximumTimeToLockLocked$20$DevicePolicyManagerService(I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$updateProfileLockTimeoutLocked$20$DevicePolicyManagerService(ILcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$updateProfileLockTimeoutLocked$21$DevicePolicyManagerService(ILcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->loadAdminDataAsync()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->loadConstants()Lcom/android/server/devicepolicy/DevicePolicyConstants;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->loadOwners()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->loadSettingsLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->logIfVerbose(Ljava/lang/String;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->makeJournaledFile(I)Lcom/android/internal/util/JournaledFile;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeClearLockTaskPolicyLocked()V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeLogPasswordComplexitySet(Landroid/content/ComponentName;IZLandroid/app/admin/PasswordPolicy;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeLogStart()V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeSendAdminEnabledBroadcastLocked(I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeMigrateToProfileOnOrganizationOwnedDeviceLocked()V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybePauseDeviceWideLoggingLocked()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeResumeDeviceWideLoggingLocked()V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeSendAdminEnabledBroadcastLocked(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeSetDefaultDeviceOwnerUserRestrictionsLocked()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeSetDefaultProfileOwnerUserRestrictions()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeSetDefaultRestrictionsForAdminLocked(ILcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;Ljava/util/Set;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeStartSecurityLogMonitorOnActivityManagerReady()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeUpdatePersonalAppsSuspendedNotification(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->migrateUserRestrictionsIfNecessaryLocked()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->notifyLockTaskModeChanged(ZLjava/lang/String;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->notifyPendingSystemUpdate(Landroid/app/admin/SystemUpdateInfo;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->onInstalledCertificatesChanged(Landroid/os/UserHandle;Ljava/util/Collection;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->onLockSettingsReady()V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->packageHasActiveAdmins(Ljava/lang/String;I)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->passwordQualityInvocationOrderCheckEnabled(Ljava/lang/String;I)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->pushActiveAdminPackages()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->pushActiveAdminPackagesLocked(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->pushAllMeteredRestrictedPackages()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->pushMeteredDisabledPackagesLocked(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->pushUserRestrictions(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->recordSecurityLogRetrievalTime()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->removeActiveAdmin(Landroid/content/ComponentName;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->removeActiveAdminLocked(Landroid/content/ComponentName;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->removeAdminArtifacts(Landroid/content/ComponentName;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->removeCaApprovalsIfNeeded(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->removeCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->removePackageIfRequired(Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->removeUserData(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->reportFailedBiometricAttempt(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->reportFailedPasswordAttempt(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->reportKeyguardDismissed(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->reportKeyguardSecured(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->reportSuccessfulBiometricAttempt(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->reportSuccessfulPasswordAttempt(I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->reportKeyguardDismissed(I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->reportKeyguardSecured(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->reportPasswordChanged(I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->reportSuccessfulBiometricAttempt(I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->reportSuccessfulPasswordAttempt(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->resetGlobalProxyLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->resetInactivePasswordRequirementsIfRPlus(ILcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->resolveDelegateReceiver(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/ComponentName;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->retrieveNetworkLogs(Landroid/content/ComponentName;Ljava/lang/String;J)Ljava/util/List;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->retrieveSecurityLogs(Landroid/content/ComponentName;)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->revertTransferOwnershipIfNecessaryLocked()V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->saveSettingsLocked(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;Ljava/lang/String;Landroid/os/Bundle;Landroid/content/BroadcastReceiver;Z)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->saveGlobalProxyLocked(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->saveSettingsLocked(I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->saveUserRestrictionsLocked(IZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendActiveAdminCommand(Ljava/lang/String;Landroid/os/Bundle;ILandroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandForLockscreenPoliciesLocked(Ljava/lang/String;II)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;Ljava/lang/String;Landroid/content/BroadcastReceiver;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;Ljava/lang/String;Landroid/os/Bundle;Landroid/content/BroadcastReceiver;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;Ljava/lang/String;Landroid/os/Bundle;Landroid/content/BroadcastReceiver;Z)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandLocked(Ljava/lang/String;IILandroid/os/Bundle;)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendChangedNotification(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setAutoTimeRequired(Landroid/content/ComponentName;Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandToSelfAndProfilesLocked(Ljava/lang/String;IILandroid/os/Bundle;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendChangedNotification(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendDelegationChangedBroadcast(Ljava/lang/String;Ljava/util/ArrayList;I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendDeviceOwnerCommand(Ljava/lang/String;Landroid/os/Bundle;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendNetworkLoggingNotificationLocked()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendOwnerChangedBroadcast(Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendPrivateKeyAliasResponse(Ljava/lang/String;Landroid/os/IBinder;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setAccountManagementDisabled(Landroid/content/ComponentName;Ljava/lang/String;Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setActiveAdmin(Landroid/content/ComponentName;ZI)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setActiveAdmin(Landroid/content/ComponentName;ZILandroid/os/Bundle;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setAffiliationIds(Landroid/content/ComponentName;Ljava/util/List;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;ZZ)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setAutoTimeRequired(Landroid/content/ComponentName;Z)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setBackupServiceEnabled(Landroid/content/ComponentName;Z)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setBluetoothContactSharingDisabled(Landroid/content/ComponentName;Z)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setCameraDisabled(Landroid/content/ComponentName;ZZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setCertInstallerPackage(Landroid/content/ComponentName;Ljava/lang/String;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setCrossProfileCallerIdDisabled(Landroid/content/ComponentName;Z)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setDelegatedScopePreO(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setDeviceOwnerLockScreenInfo(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setDeviceOwnerSystemPropertyLocked()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setEncryptionRequested(Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setEndUserSessionMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setExpirationAlarmCheckLocked(Landroid/content/Context;IZ)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLongSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setGlobalSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setKeepUninstalledPackages(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setKeyPairCertificate(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;[B[BZ)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLockTaskFeatures(Landroid/content/ComponentName;I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLockTaskFeaturesLocked(II)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLockTaskPackages(Landroid/content/ComponentName;[Ljava/lang/String;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLockTaskPackagesLocked(ILjava/util/List;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLogoutEnabled(Landroid/content/ComponentName;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLongSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setMasterVolumeMuted(Landroid/content/ComponentName;Z)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;IZ)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setMaximumTimeToLock(Landroid/content/ComponentName;JZ)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;IZ)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setMaximumTimeToLock(Landroid/content/ComponentName;JZ)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setNetworkLoggingActiveInternal(Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setNetworkLoggingEnabled(Landroid/content/ComponentName;Ljava/lang/String;Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setOrganizationColor(Landroid/content/ComponentName;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setOrganizationColorForUser(II)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setOrganizationName(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordExpirationTimeout(Landroid/content/ComponentName;JZ)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordHistoryLength(Landroid/content/ComponentName;IZ)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordMinimumLength(Landroid/content/ComponentName;IZ)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordHistoryLength(Landroid/content/ComponentName;IZ)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordMinimumLength(Landroid/content/ComponentName;IZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordMinimumLetters(Landroid/content/ComponentName;IZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordMinimumLowerCase(Landroid/content/ComponentName;IZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordMinimumNonLetter(Landroid/content/ComponentName;IZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordMinimumNumeric(Landroid/content/ComponentName;IZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordMinimumSymbols(Landroid/content/ComponentName;IZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordMinimumUpperCase(Landroid/content/ComponentName;IZ)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordQuality(Landroid/content/ComponentName;IZ)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermissionPolicy(Landroid/content/ComponentName;Ljava/lang/String;I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermittedAccessibilityServices(Landroid/content/ComponentName;Ljava/util/List;)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermittedInputMethods(Landroid/content/ComponentName;Ljava/util/List;)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setRequiredStrongAuthTimeout(Landroid/content/ComponentName;JZ)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setScreenCaptureDisabled(Landroid/content/ComponentName;Z)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setShortSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordQuality(Landroid/content/ComponentName;IZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/os/RemoteCallback;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermissionPolicy(Landroid/content/ComponentName;Ljava/lang/String;I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermittedAccessibilityServices(Landroid/content/ComponentName;Ljava/util/List;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermittedInputMethods(Landroid/content/ComponentName;Ljava/util/List;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setProfileEnabled(Landroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setProfileOwner(Landroid/content/ComponentName;Ljava/lang/String;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setRecommendedGlobalProxy(Landroid/content/ComponentName;Landroid/net/ProxyInfo;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setRequiredStrongAuthTimeout(Landroid/content/ComponentName;JZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setResetPasswordToken(Landroid/content/ComponentName;[B)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setRestrictionsProvider(Landroid/content/ComponentName;Landroid/content/ComponentName;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setScreenCaptureDisabled(Landroid/content/ComponentName;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setSecureSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setSecurityLoggingEnabled(Landroid/content/ComponentName;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setShortSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setStatusBarDisabled(Landroid/content/ComponentName;Z)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setStorageEncryption(Landroid/content/ComponentName;Z)I
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setUserProvisioningState(II)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;ZZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->shouldCheckIfDelegatePackageIsInstalled(Ljava/lang/String;ILjava/util/List;)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->shouldOverwritePoliciesFromXml(Landroid/content/ComponentName;I)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->startOwnerService(ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->startUninstallIntent(Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->stopOwnerService(ILjava/lang/String;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->systemReady(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->toggleBackupServiceActive(IZ)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->translateIdAttestationFlags(I)[I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->translateIdAttestationFlags(I)[I
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateDeviceOwnerLocked()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateLockTaskFeaturesLocked(II)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateLockTaskPackagesLocked(Ljava/util/List;I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateMaximumTimeToLockLocked(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePasswordExpirationsLocked(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePasswordQualityCacheForUserGroup(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePasswordValidityCheckpointLocked(IZ)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePersonalAppSuspension(IZ)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateProfileLockTimeoutLocked(I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateProfileOffAlarm(J)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateProfileOffDeadlineLocked(ILcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;Z)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateProtectedPackagesLocked(Ljava/util/List;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateScreenCaptureDisabled(IZ)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateSystemUpdateFreezePeriodsRecord(Z)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateUserSetupCompleteAndPaired()V
@@ -8664,12 +14551,44 @@
 PLcom/android/server/devicepolicy/DeviceStateCacheImpl;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/devicepolicy/DeviceStateCacheImpl;->isDeviceProvisioned()Z
 HSPLcom/android/server/devicepolicy/DeviceStateCacheImpl;->setDeviceProvisioned(Z)V
+HSPLcom/android/server/devicepolicy/NetworkLogger$1;-><init>(Lcom/android/server/devicepolicy/NetworkLogger;)V
+HPLcom/android/server/devicepolicy/NetworkLogger$1;->onConnectEvent(Ljava/lang/String;IJI)V
+HPLcom/android/server/devicepolicy/NetworkLogger$1;->onDnsEvent(IIILjava/lang/String;[Ljava/lang/String;IJI)V
+HPLcom/android/server/devicepolicy/NetworkLogger$1;->sendNetworkEvent(Landroid/app/admin/NetworkEvent;)V
+HSPLcom/android/server/devicepolicy/NetworkLogger;-><clinit>()V
+HSPLcom/android/server/devicepolicy/NetworkLogger;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/pm/PackageManagerInternal;)V
+HPLcom/android/server/devicepolicy/NetworkLogger;->access$000(Lcom/android/server/devicepolicy/NetworkLogger;)Ljava/util/concurrent/atomic/AtomicBoolean;
+HPLcom/android/server/devicepolicy/NetworkLogger;->access$100(Lcom/android/server/devicepolicy/NetworkLogger;)Landroid/content/pm/PackageManagerInternal;
+HPLcom/android/server/devicepolicy/NetworkLogger;->access$200(Lcom/android/server/devicepolicy/NetworkLogger;)Lcom/android/server/devicepolicy/NetworkLoggingHandler;
+HSPLcom/android/server/devicepolicy/NetworkLogger;->checkIpConnectivityMetricsService()Z
+PLcom/android/server/devicepolicy/NetworkLogger;->retrieveLogs(J)Ljava/util/List;
+HSPLcom/android/server/devicepolicy/NetworkLogger;->startNetworkLogging()Z
+HSPLcom/android/server/devicepolicy/NetworkLoggingHandler$1;-><init>(Lcom/android/server/devicepolicy/NetworkLoggingHandler;)V
+HPLcom/android/server/devicepolicy/NetworkLoggingHandler$1;->onAlarm()V
+HSPLcom/android/server/devicepolicy/NetworkLoggingHandler;-><clinit>()V
+HSPLcom/android/server/devicepolicy/NetworkLoggingHandler;-><init>(Landroid/os/Looper;Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/NetworkLoggingHandler;-><init>(Landroid/os/Looper;Lcom/android/server/devicepolicy/DevicePolicyManagerService;J)V
+PLcom/android/server/devicepolicy/NetworkLoggingHandler;->access$000()Ljava/lang/String;
+PLcom/android/server/devicepolicy/NetworkLoggingHandler;->access$100(Lcom/android/server/devicepolicy/NetworkLoggingHandler;)Ljava/util/ArrayList;
+PLcom/android/server/devicepolicy/NetworkLoggingHandler;->access$200(Lcom/android/server/devicepolicy/NetworkLoggingHandler;)Landroid/os/Bundle;
+PLcom/android/server/devicepolicy/NetworkLoggingHandler;->access$300(Lcom/android/server/devicepolicy/NetworkLoggingHandler;Landroid/os/Bundle;)V
+HPLcom/android/server/devicepolicy/NetworkLoggingHandler;->buildDeviceOwnerMessageLocked()Landroid/os/Bundle;
+HPLcom/android/server/devicepolicy/NetworkLoggingHandler;->finalizeBatchAndBuildDeviceOwnerMessageLocked()Landroid/os/Bundle;
+HPLcom/android/server/devicepolicy/NetworkLoggingHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/devicepolicy/NetworkLoggingHandler;->lambda$retrieveFullLogBatch$0$NetworkLoggingHandler(J)V
+HPLcom/android/server/devicepolicy/NetworkLoggingHandler;->notifyDeviceOwner(Landroid/os/Bundle;)V
+PLcom/android/server/devicepolicy/NetworkLoggingHandler;->retrieveFullLogBatch(J)Ljava/util/List;
+HSPLcom/android/server/devicepolicy/NetworkLoggingHandler;->scheduleBatchFinalization()V
 HSPLcom/android/server/devicepolicy/OverlayPackagesProvider$DefaultInjector;-><init>()V
 HSPLcom/android/server/devicepolicy/OverlayPackagesProvider$DefaultInjector;-><init>(Lcom/android/server/devicepolicy/OverlayPackagesProvider$1;)V
+PLcom/android/server/devicepolicy/OverlayPackagesProvider$DefaultInjector;->getInputMethodListAsUser(I)Ljava/util/List;
 HSPLcom/android/server/devicepolicy/OverlayPackagesProvider;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/devicepolicy/OverlayPackagesProvider;-><init>(Landroid/content/Context;Lcom/android/server/devicepolicy/OverlayPackagesProvider$Injector;)V
+PLcom/android/server/devicepolicy/OverlayPackagesProvider;->getDisallowedApps(Ljava/lang/String;)Ljava/util/Set;
 PLcom/android/server/devicepolicy/OverlayPackagesProvider;->getDisallowedAppsSet(Ljava/lang/String;)Ljava/util/Set;
-PLcom/android/server/devicepolicy/OverlayPackagesProvider;->getLaunchableApps(I)Ljava/util/Set;
+HPLcom/android/server/devicepolicy/OverlayPackagesProvider;->getLaunchableApps(I)Ljava/util/Set;
+PLcom/android/server/devicepolicy/OverlayPackagesProvider;->getNonRequiredApps(Landroid/content/ComponentName;ILjava/lang/String;)Ljava/util/Set;
+PLcom/android/server/devicepolicy/OverlayPackagesProvider;->getRequiredApps(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Set;
 PLcom/android/server/devicepolicy/OverlayPackagesProvider;->getRequiredAppsSet(Ljava/lang/String;)Ljava/util/Set;
 PLcom/android/server/devicepolicy/OverlayPackagesProvider;->getSystemInputMethods(I)Ljava/util/Set;
 PLcom/android/server/devicepolicy/OverlayPackagesProvider;->getVendorDisallowedAppsSet(Ljava/lang/String;)Ljava/util/Set;
@@ -8687,20 +14606,28 @@
 HSPLcom/android/server/devicepolicy/Owners$OwnerInfo;-><init>(Ljava/lang/String;Landroid/content/ComponentName;ZLjava/lang/String;Ljava/lang/String;Z)V
 PLcom/android/server/devicepolicy/Owners$OwnerInfo;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/devicepolicy/Owners$OwnerInfo;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/devicepolicy/Owners$OwnerInfo;
+PLcom/android/server/devicepolicy/Owners$OwnerInfo;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;)V
 HSPLcom/android/server/devicepolicy/Owners$ProfileOwnerReadWriter;-><init>(Lcom/android/server/devicepolicy/Owners;I)V
 HSPLcom/android/server/devicepolicy/Owners$ProfileOwnerReadWriter;->readInner(Lorg/xmlpull/v1/XmlPullParser;ILjava/lang/String;)Z
+PLcom/android/server/devicepolicy/Owners$ProfileOwnerReadWriter;->shouldWrite()Z
+PLcom/android/server/devicepolicy/Owners$ProfileOwnerReadWriter;->writeInner(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/devicepolicy/Owners;-><init>(Landroid/os/UserManager;Landroid/os/UserManagerInternal;Landroid/content/pm/PackageManagerInternal;Lcom/android/server/wm/ActivityTaskManagerInternal;)V
 HSPLcom/android/server/devicepolicy/Owners;-><init>(Landroid/os/UserManager;Landroid/os/UserManagerInternal;Landroid/content/pm/PackageManagerInternal;Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/devicepolicy/Owners$Injector;)V
 PLcom/android/server/devicepolicy/Owners;->access$000(Lcom/android/server/devicepolicy/Owners;)Lcom/android/server/devicepolicy/Owners$OwnerInfo;
+HSPLcom/android/server/devicepolicy/Owners;->access$002(Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners$OwnerInfo;)Lcom/android/server/devicepolicy/Owners$OwnerInfo;
 PLcom/android/server/devicepolicy/Owners;->access$100(Lcom/android/server/devicepolicy/Owners;)Landroid/app/admin/SystemUpdatePolicy;
 PLcom/android/server/devicepolicy/Owners;->access$200(Lcom/android/server/devicepolicy/Owners;)Landroid/app/admin/SystemUpdateInfo;
 HSPLcom/android/server/devicepolicy/Owners;->access$202(Lcom/android/server/devicepolicy/Owners;Landroid/app/admin/SystemUpdateInfo;)Landroid/app/admin/SystemUpdateInfo;
+PLcom/android/server/devicepolicy/Owners;->access$300(Lcom/android/server/devicepolicy/Owners;)I
+HSPLcom/android/server/devicepolicy/Owners;->access$302(Lcom/android/server/devicepolicy/Owners;I)I
 PLcom/android/server/devicepolicy/Owners;->access$400(Lcom/android/server/devicepolicy/Owners;)Ljava/time/LocalDate;
 PLcom/android/server/devicepolicy/Owners;->access$500(Lcom/android/server/devicepolicy/Owners;)Ljava/time/LocalDate;
 HSPLcom/android/server/devicepolicy/Owners;->access$600(Lcom/android/server/devicepolicy/Owners;)Landroid/util/ArrayMap;
 PLcom/android/server/devicepolicy/Owners;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerComponent()Landroid/content/ComponentName;
 HSPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerFile()Ljava/io/File;
+PLcom/android/server/devicepolicy/Owners;->getDeviceOwnerPackageName()Ljava/lang/String;
+PLcom/android/server/devicepolicy/Owners;->getDeviceOwnerRemoteBugreportUri()Ljava/lang/String;
 HSPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerUserId()I
 HSPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerUserRestrictionsNeedsMigration()Z
 HSPLcom/android/server/devicepolicy/Owners;->getLegacyConfigFile()Ljava/io/File;
@@ -8708,7 +14635,8 @@
 HSPLcom/android/server/devicepolicy/Owners;->getProfileOwnerFile(I)Ljava/io/File;
 HSPLcom/android/server/devicepolicy/Owners;->getProfileOwnerKeys()Ljava/util/Set;
 HSPLcom/android/server/devicepolicy/Owners;->getProfileOwnerUserRestrictionsNeedsMigration(I)Z
-PLcom/android/server/devicepolicy/Owners;->getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;
+PLcom/android/server/devicepolicy/Owners;->getSystemUpdateInfo()Landroid/app/admin/SystemUpdateInfo;
+HPLcom/android/server/devicepolicy/Owners;->getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;
 HSPLcom/android/server/devicepolicy/Owners;->hasDeviceOwner()Z
 HSPLcom/android/server/devicepolicy/Owners;->hasProfileOwner(I)Z
 HSPLcom/android/server/devicepolicy/Owners;->isDeviceOwnerUserId(I)Z
@@ -8718,11 +14646,26 @@
 HSPLcom/android/server/devicepolicy/Owners;->pushToAppOpsLocked()V
 HSPLcom/android/server/devicepolicy/Owners;->pushToPackageManagerLocked()V
 HSPLcom/android/server/devicepolicy/Owners;->readLegacyOwnerFileLocked(Ljava/io/File;)Z
+PLcom/android/server/devicepolicy/Owners;->removeProfileOwner(I)V
 PLcom/android/server/devicepolicy/Owners;->saveSystemUpdateInfo(Landroid/app/admin/SystemUpdateInfo;)Z
+PLcom/android/server/devicepolicy/Owners;->setProfileOwner(Landroid/content/ComponentName;Ljava/lang/String;I)V
 HSPLcom/android/server/devicepolicy/Owners;->systemReady()V
+PLcom/android/server/devicepolicy/Owners;->writeProfileOwner(I)V
 HSPLcom/android/server/devicepolicy/SecurityLogMonitor;-><clinit>()V
 HSPLcom/android/server/devicepolicy/SecurityLogMonitor;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 HSPLcom/android/server/devicepolicy/SecurityLogMonitor;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;J)V
+HPLcom/android/server/devicepolicy/SecurityLogMonitor;->assignLogId(Landroid/app/admin/SecurityLog$SecurityEvent;)V
+HPLcom/android/server/devicepolicy/SecurityLogMonitor;->checkCriticalLevel()V
+PLcom/android/server/devicepolicy/SecurityLogMonitor;->discardLogs()V
+HPLcom/android/server/devicepolicy/SecurityLogMonitor;->getNextBatch(Ljava/util/ArrayList;)V
+HPLcom/android/server/devicepolicy/SecurityLogMonitor;->lambda$getNextBatch$0(Landroid/app/admin/SecurityLog$SecurityEvent;Landroid/app/admin/SecurityLog$SecurityEvent;)I
+HPLcom/android/server/devicepolicy/SecurityLogMonitor;->mergeBatchLocked(Ljava/util/ArrayList;)V
+HPLcom/android/server/devicepolicy/SecurityLogMonitor;->notifyDeviceOwnerIfNeeded(Z)V
+PLcom/android/server/devicepolicy/SecurityLogMonitor;->pause()V
+PLcom/android/server/devicepolicy/SecurityLogMonitor;->retrieveLogs()Ljava/util/List;
+HSPLcom/android/server/devicepolicy/SecurityLogMonitor;->run()V
+HPLcom/android/server/devicepolicy/SecurityLogMonitor;->saveLastEvents(Ljava/util/ArrayList;)V
+HSPLcom/android/server/devicepolicy/SecurityLogMonitor;->start()V
 HSPLcom/android/server/devicepolicy/TransferOwnershipMetadataManager$Injector;-><init>()V
 HSPLcom/android/server/devicepolicy/TransferOwnershipMetadataManager$Injector;->getOwnerTransferMetadataDir()Ljava/io/File;
 HSPLcom/android/server/devicepolicy/TransferOwnershipMetadataManager;-><clinit>()V
@@ -8735,19 +14678,35 @@
 PLcom/android/server/display/-$$Lambda$BrightnessTracker$_S_g5htVKYYPRPZzYSZzGdy7hM0;->run()V
 PLcom/android/server/display/-$$Lambda$BrightnessTracker$fmx2Mcw7OCEtRi9DwxxGQgA74fg;-><init>(Lcom/android/server/display/BrightnessTracker;)V
 PLcom/android/server/display/-$$Lambda$BrightnessTracker$fmx2Mcw7OCEtRi9DwxxGQgA74fg;->run()V
+HSPLcom/android/server/display/-$$Lambda$DisplayAdapter$cOPGY8nGfp02WlhPeZ6ntLAXxvU;-><init>(Lcom/android/server/display/DisplayAdapter;Lcom/android/server/display/DisplayDevice;I)V
+HSPLcom/android/server/display/-$$Lambda$DisplayAdapter$cOPGY8nGfp02WlhPeZ6ntLAXxvU;->run()V
+HSPLcom/android/server/display/-$$Lambda$DisplayAdapter$wRUuY3ELxjWqttjwkmhWSLcgkIA;-><init>(Lcom/android/server/display/DisplayAdapter;)V
+HSPLcom/android/server/display/-$$Lambda$DisplayAdapter$wRUuY3ELxjWqttjwkmhWSLcgkIA;->run()V
+HSPLcom/android/server/display/-$$Lambda$LocalDisplayAdapter$LocalDisplayDevice$6tpawjjBXhlj4GSsJjStLZrwDUQ;-><clinit>()V
+HSPLcom/android/server/display/-$$Lambda$LocalDisplayAdapter$LocalDisplayDevice$6tpawjjBXhlj4GSsJjStLZrwDUQ;-><init>()V
+HSPLcom/android/server/display/-$$Lambda$LocalDisplayAdapter$LocalDisplayDevice$6tpawjjBXhlj4GSsJjStLZrwDUQ;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/display/-$$Lambda$LocalDisplayAdapter$LocalDisplayDevice$S4bSIp6drytTEiae37oiY_7m6ng;-><clinit>()V
+HSPLcom/android/server/display/-$$Lambda$LocalDisplayAdapter$LocalDisplayDevice$S4bSIp6drytTEiae37oiY_7m6ng;-><init>()V
+HSPLcom/android/server/display/-$$Lambda$LocalDisplayAdapter$LocalDisplayDevice$S4bSIp6drytTEiae37oiY_7m6ng;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/display/-$$Lambda$LocalDisplayAdapter$LocalDisplayDevice$iXCIox7NAT3NknToX9AEwGueQjs;-><clinit>()V
+HSPLcom/android/server/display/-$$Lambda$LocalDisplayAdapter$LocalDisplayDevice$iXCIox7NAT3NknToX9AEwGueQjs;-><init>()V
+HSPLcom/android/server/display/-$$Lambda$LocalDisplayAdapter$LocalDisplayDevice$iXCIox7NAT3NknToX9AEwGueQjs;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/display/-$$Lambda$VirtualDisplayAdapter$PFyqe-aYIEBicSVtuy5lL_bT8B0;-><clinit>()V
 HSPLcom/android/server/display/-$$Lambda$VirtualDisplayAdapter$PFyqe-aYIEBicSVtuy5lL_bT8B0;-><init>()V
+PLcom/android/server/display/-$$Lambda$VirtualDisplayAdapter$PFyqe-aYIEBicSVtuy5lL_bT8B0;->createDisplay(Ljava/lang/String;Z)Landroid/os/IBinder;
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;-><init>(Lcom/android/server/display/AmbientBrightnessStatsTracker;)V
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->getOrCreateDayStats(Ljava/util/Deque;Ljava/time/LocalDate;)Landroid/hardware/display/AmbientBrightnessDayStats;
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->getOrCreateUserStats(Ljava/util/Map;I)Ljava/util/Deque;
+PLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->getUserStats(I)Ljava/util/ArrayList;
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->log(ILjava/time/LocalDate;FF)V
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->readFromXML(Ljava/io/InputStream;)V
-PLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->toString()Ljava/lang/String;
-PLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->writeToXML(Ljava/io/OutputStream;)V
+HPLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->toString()Ljava/lang/String;
+HPLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->writeToXML(Ljava/io/OutputStream;)V
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Injector;-><init>()V
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Injector;->elapsedRealtimeMillis()J
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Injector;->getLocalDate()Ljava/time/LocalDate;
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Injector;->getUserId(Landroid/os/UserManager;I)I
+PLcom/android/server/display/AmbientBrightnessStatsTracker$Injector;->getUserSerialNumber(Landroid/os/UserManager;I)I
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Timer;-><init>(Lcom/android/server/display/AmbientBrightnessStatsTracker$Clock;)V
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Timer;->isRunning()Z
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Timer;->reset()V
@@ -8763,123 +14722,155 @@
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker;->lambda$new$0$AmbientBrightnessStatsTracker()J
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker;->readStats(Ljava/io/InputStream;)V
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker;->start()V
-PLcom/android/server/display/AmbientBrightnessStatsTracker;->stop()V
+HPLcom/android/server/display/AmbientBrightnessStatsTracker;->stop()V
 PLcom/android/server/display/AmbientBrightnessStatsTracker;->writeStats(Ljava/io/OutputStream;)V
-PLcom/android/server/display/AutomaticBrightnessController$1;-><init>(Lcom/android/server/display/AutomaticBrightnessController;)V
+HPLcom/android/server/display/AutomaticBrightnessController$1;-><init>(Lcom/android/server/display/AutomaticBrightnessController;)V
 HPLcom/android/server/display/AutomaticBrightnessController$1;->run()V
 HSPLcom/android/server/display/AutomaticBrightnessController$2;-><init>(Lcom/android/server/display/AutomaticBrightnessController;)V
-PLcom/android/server/display/AutomaticBrightnessController$2;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
+HPLcom/android/server/display/AutomaticBrightnessController$2;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
 HPLcom/android/server/display/AutomaticBrightnessController$2;->onSensorChanged(Landroid/hardware/SensorEvent;)V
 HSPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;-><init>(JI)V
 PLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->clear()V
-PLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->getLux(I)F
-PLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->getTime(I)J
-PLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->offsetOf(I)I
+HPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->getLux(I)F
+HPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->getTime(I)J
+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
-PLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->size()I
+HPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->size()I
 PLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->toString()Ljava/lang/String;
 HSPLcom/android/server/display/AutomaticBrightnessController$AutomaticBrightnessHandler;-><init>(Lcom/android/server/display/AutomaticBrightnessController;Landroid/os/Looper;)V
 HPLcom/android/server/display/AutomaticBrightnessController$AutomaticBrightnessHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/display/AutomaticBrightnessController$Injector;-><init>()V
-PLcom/android/server/display/AutomaticBrightnessController$Injector;->getBackgroundThreadHandler()Landroid/os/Handler;
+HPLcom/android/server/display/AutomaticBrightnessController$Injector;->getBackgroundThreadHandler()Landroid/os/Handler;
 HSPLcom/android/server/display/AutomaticBrightnessController$TaskStackListenerImpl;-><init>(Lcom/android/server/display/AutomaticBrightnessController;)V
 HPLcom/android/server/display/AutomaticBrightnessController$TaskStackListenerImpl;->onTaskStackChanged()V
 HSPLcom/android/server/display/AutomaticBrightnessController;-><init>(Lcom/android/server/display/AutomaticBrightnessController$Callbacks;Landroid/os/Looper;Landroid/hardware/SensorManager;Landroid/hardware/Sensor;Lcom/android/server/display/BrightnessMappingStrategy;IIIFIIJJZLcom/android/server/display/HysteresisLevels;Lcom/android/server/display/HysteresisLevels;JLandroid/content/pm/PackageManager;)V
+HSPLcom/android/server/display/AutomaticBrightnessController;-><init>(Lcom/android/server/display/AutomaticBrightnessController$Callbacks;Landroid/os/Looper;Landroid/hardware/SensorManager;Landroid/hardware/Sensor;Lcom/android/server/display/BrightnessMappingStrategy;IIIFIIJJZLcom/android/server/display/HysteresisLevels;Lcom/android/server/display/HysteresisLevels;Landroid/content/pm/PackageManager;)V
 HSPLcom/android/server/display/AutomaticBrightnessController;-><init>(Lcom/android/server/display/AutomaticBrightnessController$Injector;Lcom/android/server/display/AutomaticBrightnessController$Callbacks;Landroid/os/Looper;Landroid/hardware/SensorManager;Landroid/hardware/Sensor;Lcom/android/server/display/BrightnessMappingStrategy;IIIFIIJJZLcom/android/server/display/HysteresisLevels;Lcom/android/server/display/HysteresisLevels;JLandroid/content/pm/PackageManager;)V
-PLcom/android/server/display/AutomaticBrightnessController;->access$000(Lcom/android/server/display/AutomaticBrightnessController;)Landroid/app/IActivityTaskManager;
-PLcom/android/server/display/AutomaticBrightnessController;->access$100(Lcom/android/server/display/AutomaticBrightnessController;)Ljava/lang/String;
+HSPLcom/android/server/display/AutomaticBrightnessController;-><init>(Lcom/android/server/display/AutomaticBrightnessController$Injector;Lcom/android/server/display/AutomaticBrightnessController$Callbacks;Landroid/os/Looper;Landroid/hardware/SensorManager;Landroid/hardware/Sensor;Lcom/android/server/display/BrightnessMappingStrategy;IIIFIIJJZLcom/android/server/display/HysteresisLevels;Lcom/android/server/display/HysteresisLevels;Landroid/content/pm/PackageManager;)V
+HPLcom/android/server/display/AutomaticBrightnessController;->access$000(Lcom/android/server/display/AutomaticBrightnessController;)Landroid/app/IActivityTaskManager;
+HPLcom/android/server/display/AutomaticBrightnessController;->access$100(Lcom/android/server/display/AutomaticBrightnessController;)Ljava/lang/String;
 PLcom/android/server/display/AutomaticBrightnessController;->access$1000(Lcom/android/server/display/AutomaticBrightnessController;)V
-PLcom/android/server/display/AutomaticBrightnessController;->access$1100(Lcom/android/server/display/AutomaticBrightnessController;)Z
-PLcom/android/server/display/AutomaticBrightnessController;->access$1200(Lcom/android/server/display/AutomaticBrightnessController;JF)V
+HPLcom/android/server/display/AutomaticBrightnessController;->access$1100(Lcom/android/server/display/AutomaticBrightnessController;)Z
+HPLcom/android/server/display/AutomaticBrightnessController;->access$1200(Lcom/android/server/display/AutomaticBrightnessController;JF)V
 PLcom/android/server/display/AutomaticBrightnessController;->access$202(Lcom/android/server/display/AutomaticBrightnessController;Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/display/AutomaticBrightnessController;->access$302(Lcom/android/server/display/AutomaticBrightnessController;I)I
 PLcom/android/server/display/AutomaticBrightnessController;->access$400(Lcom/android/server/display/AutomaticBrightnessController;)Landroid/content/pm/PackageManager;
-PLcom/android/server/display/AutomaticBrightnessController;->access$500(Lcom/android/server/display/AutomaticBrightnessController;)Lcom/android/server/display/AutomaticBrightnessController$AutomaticBrightnessHandler;
-PLcom/android/server/display/AutomaticBrightnessController;->access$600(Lcom/android/server/display/AutomaticBrightnessController;)V
-PLcom/android/server/display/AutomaticBrightnessController;->access$900(Lcom/android/server/display/AutomaticBrightnessController;)V
-PLcom/android/server/display/AutomaticBrightnessController;->adjustLightSensorRate(I)V
-PLcom/android/server/display/AutomaticBrightnessController;->applyLightSensorMeasurement(JF)V
+HPLcom/android/server/display/AutomaticBrightnessController;->access$500(Lcom/android/server/display/AutomaticBrightnessController;)Lcom/android/server/display/AutomaticBrightnessController$AutomaticBrightnessHandler;
+HPLcom/android/server/display/AutomaticBrightnessController;->access$600(Lcom/android/server/display/AutomaticBrightnessController;)V
+PLcom/android/server/display/AutomaticBrightnessController;->access$700(Lcom/android/server/display/AutomaticBrightnessController;)V
+PLcom/android/server/display/AutomaticBrightnessController;->access$800(Lcom/android/server/display/AutomaticBrightnessController;)V
+HPLcom/android/server/display/AutomaticBrightnessController;->access$900(Lcom/android/server/display/AutomaticBrightnessController;)V
+HPLcom/android/server/display/AutomaticBrightnessController;->adjustLightSensorRate(I)V
+HPLcom/android/server/display/AutomaticBrightnessController;->applyLightSensorMeasurement(JF)V
 HPLcom/android/server/display/AutomaticBrightnessController;->calculateAmbientLux(JJ)F
-PLcom/android/server/display/AutomaticBrightnessController;->calculateWeight(JJ)F
-PLcom/android/server/display/AutomaticBrightnessController;->clampScreenBrightness(F)F
+HPLcom/android/server/display/AutomaticBrightnessController;->calculateWeight(JJ)F
+HPLcom/android/server/display/AutomaticBrightnessController;->clampScreenBrightness(F)F
+PLcom/android/server/display/AutomaticBrightnessController;->collectBrightnessAdjustmentSample()V
 HSPLcom/android/server/display/AutomaticBrightnessController;->configure(ZLandroid/hardware/display/BrightnessConfiguration;FZFZI)V
-PLcom/android/server/display/AutomaticBrightnessController;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/display/AutomaticBrightnessController;->getAutomaticScreenBrightness()I
-PLcom/android/server/display/AutomaticBrightnessController;->getAutomaticScreenBrightnessAdjustment()F
+HPLcom/android/server/display/AutomaticBrightnessController;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/AutomaticBrightnessController;->getAutomaticScreenBrightness()I
+HPLcom/android/server/display/AutomaticBrightnessController;->getAutomaticScreenBrightnessAdjustment()F
+PLcom/android/server/display/AutomaticBrightnessController;->getDefaultConfig()Landroid/hardware/display/BrightnessConfiguration;
 HPLcom/android/server/display/AutomaticBrightnessController;->handleLightSensorEvent(JF)V
 HSPLcom/android/server/display/AutomaticBrightnessController;->hasUserDataPoints()Z
-PLcom/android/server/display/AutomaticBrightnessController;->isDefaultConfig()Z
+PLcom/android/server/display/AutomaticBrightnessController;->hasValidAmbientLux()Z
+PLcom/android/server/display/AutomaticBrightnessController;->invalidateShortTermModel()V
+HPLcom/android/server/display/AutomaticBrightnessController;->isDefaultConfig()Z
 HSPLcom/android/server/display/AutomaticBrightnessController;->isInteractivePolicy(I)Z
 HPLcom/android/server/display/AutomaticBrightnessController;->nextAmbientLightBrighteningTransition(J)J
 HPLcom/android/server/display/AutomaticBrightnessController;->nextAmbientLightDarkeningTransition(J)J
-PLcom/android/server/display/AutomaticBrightnessController;->registerForegroundAppUpdater()V
+PLcom/android/server/display/AutomaticBrightnessController;->prepareBrightnessAdjustmentSample()V
+HPLcom/android/server/display/AutomaticBrightnessController;->registerForegroundAppUpdater()V
 HSPLcom/android/server/display/AutomaticBrightnessController;->resetShortTermModel()V
-PLcom/android/server/display/AutomaticBrightnessController;->setAmbientLux(F)V
+HPLcom/android/server/display/AutomaticBrightnessController;->setAmbientLux(F)V
 HSPLcom/android/server/display/AutomaticBrightnessController;->setBrightnessConfiguration(Landroid/hardware/display/BrightnessConfiguration;)Z
 HSPLcom/android/server/display/AutomaticBrightnessController;->setDisplayPolicy(I)Z
 HSPLcom/android/server/display/AutomaticBrightnessController;->setLightSensorEnabled(Z)Z
-PLcom/android/server/display/AutomaticBrightnessController;->unregisterForegroundAppUpdater()V
-PLcom/android/server/display/AutomaticBrightnessController;->updateAmbientLux()V
+PLcom/android/server/display/AutomaticBrightnessController;->setScreenBrightnessByUser(F)Z
+HPLcom/android/server/display/AutomaticBrightnessController;->unregisterForegroundAppUpdater()V
+HPLcom/android/server/display/AutomaticBrightnessController;->updateAmbientLux()V
 HPLcom/android/server/display/AutomaticBrightnessController;->updateAmbientLux(J)V
 HSPLcom/android/server/display/AutomaticBrightnessController;->updateAutoBrightness(ZZ)V
-PLcom/android/server/display/AutomaticBrightnessController;->updateForegroundApp()V
-PLcom/android/server/display/AutomaticBrightnessController;->updateForegroundAppSync()V
-PLcom/android/server/display/AutomaticBrightnessController;->weightIntegral(J)F
+HPLcom/android/server/display/AutomaticBrightnessController;->updateForegroundApp()V
+HPLcom/android/server/display/AutomaticBrightnessController;->updateForegroundAppSync()V
+HPLcom/android/server/display/AutomaticBrightnessController;->weightIntegral(J)F
 PLcom/android/server/display/BrightnessIdleJob;-><init>()V
+PLcom/android/server/display/BrightnessIdleJob;->cancelJob(Landroid/content/Context;)V
 PLcom/android/server/display/BrightnessIdleJob;->onStartJob(Landroid/app/job/JobParameters;)Z
 HSPLcom/android/server/display/BrightnessIdleJob;->scheduleJob(Landroid/content/Context;)V
 HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;-><init>(Landroid/hardware/display/BrightnessConfiguration;[F[IF)V
+PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->addUserDataPoint(FF)V
 HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->clearUserDataPoints()V
 HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->computeSpline()V
 HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->convertToNits(I)F
-PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->correctBrightness(FLjava/lang/String;I)F
-PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->getAutoBrightnessAdjustment()F
-PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->getBrightness(FLjava/lang/String;I)F
+HPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->correctBrightness(FLjava/lang/String;I)F
+HPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->getAutoBrightnessAdjustment()F
+HPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->getBrightness(FLjava/lang/String;I)F
+PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->getBrightnessConfiguration()Landroid/hardware/display/BrightnessConfiguration;
+PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->getDefaultConfig()Landroid/hardware/display/BrightnessConfiguration;
+PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->getShortTermModelTimeout()J
+PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->getUnadjustedBrightness(F)F
 HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->hasUserDataPoints()Z
-PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->isDefaultConfig()Z
+HPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->isDefaultConfig()Z
 HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->setBrightnessConfiguration(Landroid/hardware/display/BrightnessConfiguration;)Z
 HSPLcom/android/server/display/BrightnessMappingStrategy;-><clinit>()V
 HSPLcom/android/server/display/BrightnessMappingStrategy;-><init>()V
 HSPLcom/android/server/display/BrightnessMappingStrategy;->create(Landroid/content/res/Resources;)Lcom/android/server/display/BrightnessMappingStrategy;
+PLcom/android/server/display/BrightnessMappingStrategy;->findInsertionPoint([FF)I
 HSPLcom/android/server/display/BrightnessMappingStrategy;->getAdjustedCurve([F[FFFFF)Landroid/util/Pair;
 HSPLcom/android/server/display/BrightnessMappingStrategy;->getFloatArray(Landroid/content/res/TypedArray;)[F
 HSPLcom/android/server/display/BrightnessMappingStrategy;->getLuxLevels([I)[F
+PLcom/android/server/display/BrightnessMappingStrategy;->inferAutoBrightnessAdjustment(FFF)F
+PLcom/android/server/display/BrightnessMappingStrategy;->insertControlPoint([F[FFF)Landroid/util/Pair;
 HSPLcom/android/server/display/BrightnessMappingStrategy;->isValidMapping([F[F)Z
 HSPLcom/android/server/display/BrightnessMappingStrategy;->isValidMapping([F[I)Z
 HSPLcom/android/server/display/BrightnessMappingStrategy;->normalizeAbsoluteBrightness(I)F
-PLcom/android/server/display/BrightnessTracker$BrightnessChangeValues;-><init>(FFZZJ)V
+PLcom/android/server/display/BrightnessMappingStrategy;->permissibleRatio(FF)F
+PLcom/android/server/display/BrightnessMappingStrategy;->shouldResetShortTermModel(FF)Z
+PLcom/android/server/display/BrightnessMappingStrategy;->smoothCurve([F[FI)V
+HPLcom/android/server/display/BrightnessTracker$BrightnessChangeValues;-><init>(FFZZJ)V
 HSPLcom/android/server/display/BrightnessTracker$Injector;-><init>()V
+PLcom/android/server/display/BrightnessTracker$Injector;->cancelIdleJob(Landroid/content/Context;)V
 HSPLcom/android/server/display/BrightnessTracker$Injector;->currentTimeMillis()J
 HSPLcom/android/server/display/BrightnessTracker$Injector;->elapsedRealtimeNanos()J
 HSPLcom/android/server/display/BrightnessTracker$Injector;->getBackgroundHandler()Landroid/os/Handler;
 HSPLcom/android/server/display/BrightnessTracker$Injector;->getFile(Ljava/lang/String;)Landroid/util/AtomicFile;
+PLcom/android/server/display/BrightnessTracker$Injector;->getFocusedStack()Landroid/app/ActivityManager$StackInfo;
+PLcom/android/server/display/BrightnessTracker$Injector;->getNightDisplayColorTemperature(Landroid/content/Context;)I
+PLcom/android/server/display/BrightnessTracker$Injector;->getProfileIds(Landroid/os/UserManager;I)[I
 HSPLcom/android/server/display/BrightnessTracker$Injector;->getUserId(Landroid/os/UserManager;I)I
+PLcom/android/server/display/BrightnessTracker$Injector;->getUserSerialNumber(Landroid/os/UserManager;I)I
 HSPLcom/android/server/display/BrightnessTracker$Injector;->isBrightnessModeAutomatic(Landroid/content/ContentResolver;)Z
 HSPLcom/android/server/display/BrightnessTracker$Injector;->isInteractive(Landroid/content/Context;)Z
+PLcom/android/server/display/BrightnessTracker$Injector;->isNightDisplayActivated(Landroid/content/Context;)Z
 HSPLcom/android/server/display/BrightnessTracker$Injector;->registerBrightnessModeObserver(Landroid/content/ContentResolver;Landroid/database/ContentObserver;)V
 HSPLcom/android/server/display/BrightnessTracker$Injector;->registerReceiver(Landroid/content/Context;Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)V
 HSPLcom/android/server/display/BrightnessTracker$Injector;->registerSensorListener(Landroid/content/Context;Landroid/hardware/SensorEventListener;Landroid/os/Handler;)V
 HSPLcom/android/server/display/BrightnessTracker$Injector;->scheduleIdleJob(Landroid/content/Context;)V
-PLcom/android/server/display/BrightnessTracker$Injector;->unregisterSensorListener(Landroid/content/Context;Landroid/hardware/SensorEventListener;)V
+PLcom/android/server/display/BrightnessTracker$Injector;->unregisterBrightnessModeObserver(Landroid/content/Context;Landroid/database/ContentObserver;)V
+PLcom/android/server/display/BrightnessTracker$Injector;->unregisterReceiver(Landroid/content/Context;Landroid/content/BroadcastReceiver;)V
+HPLcom/android/server/display/BrightnessTracker$Injector;->unregisterSensorListener(Landroid/content/Context;Landroid/hardware/SensorEventListener;)V
 HSPLcom/android/server/display/BrightnessTracker$LightData;-><init>()V
 HSPLcom/android/server/display/BrightnessTracker$LightData;-><init>(Lcom/android/server/display/BrightnessTracker$1;)V
 HSPLcom/android/server/display/BrightnessTracker$Receiver;-><init>(Lcom/android/server/display/BrightnessTracker;)V
 HSPLcom/android/server/display/BrightnessTracker$Receiver;-><init>(Lcom/android/server/display/BrightnessTracker;Lcom/android/server/display/BrightnessTracker$1;)V
-PLcom/android/server/display/BrightnessTracker$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/display/BrightnessTracker$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/display/BrightnessTracker$SensorListener;-><init>(Lcom/android/server/display/BrightnessTracker;)V
 HSPLcom/android/server/display/BrightnessTracker$SensorListener;-><init>(Lcom/android/server/display/BrightnessTracker;Lcom/android/server/display/BrightnessTracker$1;)V
 HSPLcom/android/server/display/BrightnessTracker$SensorListener;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
 HSPLcom/android/server/display/BrightnessTracker$SensorListener;->onSensorChanged(Landroid/hardware/SensorEvent;)V
 HSPLcom/android/server/display/BrightnessTracker$SettingsObserver;-><init>(Lcom/android/server/display/BrightnessTracker;Landroid/os/Handler;)V
+PLcom/android/server/display/BrightnessTracker$SettingsObserver;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/display/BrightnessTracker$TrackerHandler;-><init>(Lcom/android/server/display/BrightnessTracker;Landroid/os/Looper;)V
 HSPLcom/android/server/display/BrightnessTracker$TrackerHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/display/BrightnessTracker;-><clinit>()V
 HSPLcom/android/server/display/BrightnessTracker;-><init>(Landroid/content/Context;Lcom/android/server/display/BrightnessTracker$Injector;)V
-PLcom/android/server/display/BrightnessTracker;->access$1100(Lcom/android/server/display/BrightnessTracker;II)V
+PLcom/android/server/display/BrightnessTracker;->access$1000(Lcom/android/server/display/BrightnessTracker;)V
+HSPLcom/android/server/display/BrightnessTracker;->access$1100(Lcom/android/server/display/BrightnessTracker;II)V
 HSPLcom/android/server/display/BrightnessTracker;->access$1200(Lcom/android/server/display/BrightnessTracker;F)V
-PLcom/android/server/display/BrightnessTracker;->access$1300(Lcom/android/server/display/BrightnessTracker;FZFZZJ)V
+HPLcom/android/server/display/BrightnessTracker;->access$1300(Lcom/android/server/display/BrightnessTracker;FZFZZJ)V
 PLcom/android/server/display/BrightnessTracker;->access$1400(Lcom/android/server/display/BrightnessTracker;)V
 PLcom/android/server/display/BrightnessTracker;->access$1500(Lcom/android/server/display/BrightnessTracker;)V
 PLcom/android/server/display/BrightnessTracker;->access$1600(Lcom/android/server/display/BrightnessTracker;)V
@@ -8889,58 +14880,66 @@
 HSPLcom/android/server/display/BrightnessTracker;->access$1900(Lcom/android/server/display/BrightnessTracker;)Z
 HSPLcom/android/server/display/BrightnessTracker;->access$400(Lcom/android/server/display/BrightnessTracker;Landroid/hardware/SensorEvent;)V
 HSPLcom/android/server/display/BrightnessTracker;->access$500(Lcom/android/server/display/BrightnessTracker;Landroid/hardware/SensorEvent;)V
+PLcom/android/server/display/BrightnessTracker;->access$700(Lcom/android/server/display/BrightnessTracker;)Landroid/content/ContentResolver;
+PLcom/android/server/display/BrightnessTracker;->access$800(Lcom/android/server/display/BrightnessTracker;)Lcom/android/server/display/BrightnessTracker$Injector;
 PLcom/android/server/display/BrightnessTracker;->access$900(Lcom/android/server/display/BrightnessTracker;)Landroid/os/Handler;
 HSPLcom/android/server/display/BrightnessTracker;->backgroundStart(F)V
-PLcom/android/server/display/BrightnessTracker;->batteryLevelChanged(II)V
+HSPLcom/android/server/display/BrightnessTracker;->batteryLevelChanged(II)V
 PLcom/android/server/display/BrightnessTracker;->disableColorSampling()V
-PLcom/android/server/display/BrightnessTracker;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/BrightnessTracker;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/display/BrightnessTracker;->dumpLocal(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/BrightnessTracker;->enableColorSampling()V
-PLcom/android/server/display/BrightnessTracker;->getEvents(IZ)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/display/BrightnessTracker;->handleBrightnessChanged(FZFZZJ)V
-PLcom/android/server/display/BrightnessTracker;->notifyBrightnessChanged(FZFZZ)V
+PLcom/android/server/display/BrightnessTracker;->getAmbientBrightnessStats(I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/display/BrightnessTracker;->getEvents(IZ)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/display/BrightnessTracker;->handleBrightnessChanged(FZFZZJ)V
+PLcom/android/server/display/BrightnessTracker;->lambda$dump$1$BrightnessTracker(Ljava/io/PrintWriter;)V
+PLcom/android/server/display/BrightnessTracker;->lambda$scheduleWriteBrightnessTrackerState$0$BrightnessTracker()V
+HPLcom/android/server/display/BrightnessTracker;->notifyBrightnessChanged(FZFZZ)V
+PLcom/android/server/display/BrightnessTracker;->persistBrightnessTrackerState()V
 HSPLcom/android/server/display/BrightnessTracker;->readAmbientBrightnessStats()V
 HSPLcom/android/server/display/BrightnessTracker;->readEvents()V
 HSPLcom/android/server/display/BrightnessTracker;->readEventsLocked(Ljava/io/InputStream;)V
 HSPLcom/android/server/display/BrightnessTracker;->recordAmbientBrightnessStats(Landroid/hardware/SensorEvent;)V
 HSPLcom/android/server/display/BrightnessTracker;->recordSensorEvent(Landroid/hardware/SensorEvent;)V
+PLcom/android/server/display/BrightnessTracker;->scheduleWriteBrightnessTrackerState()V
 HSPLcom/android/server/display/BrightnessTracker;->setBrightnessConfiguration(Landroid/hardware/display/BrightnessConfiguration;)V
 HSPLcom/android/server/display/BrightnessTracker;->start(F)V
 HSPLcom/android/server/display/BrightnessTracker;->startSensorListener()V
+PLcom/android/server/display/BrightnessTracker;->stop()V
 PLcom/android/server/display/BrightnessTracker;->stopSensorListener()V
 PLcom/android/server/display/BrightnessTracker;->writeAmbientBrightnessStats()V
 PLcom/android/server/display/BrightnessTracker;->writeEvents()V
-PLcom/android/server/display/BrightnessTracker;->writeEventsLocked(Ljava/io/OutputStream;)V
-PLcom/android/server/display/ColorFade$NaturalSurfaceLayout;-><init>(Landroid/hardware/display/DisplayManagerInternal;ILandroid/view/SurfaceControl;)V
+HPLcom/android/server/display/BrightnessTracker;->writeEventsLocked(Ljava/io/OutputStream;)V
+HPLcom/android/server/display/ColorFade$NaturalSurfaceLayout;-><init>(Landroid/hardware/display/DisplayManagerInternal;ILandroid/view/SurfaceControl;)V
 PLcom/android/server/display/ColorFade$NaturalSurfaceLayout;->dispose()V
-PLcom/android/server/display/ColorFade$NaturalSurfaceLayout;->onDisplayTransaction(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/display/ColorFade$NaturalSurfaceLayout;->onDisplayTransaction(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/display/ColorFade;-><init>(I)V
-PLcom/android/server/display/ColorFade;->attachEglContext()Z
-PLcom/android/server/display/ColorFade;->captureScreenshotTextureAndSetViewport()Z
-PLcom/android/server/display/ColorFade;->checkGlErrors(Ljava/lang/String;)Z
+HPLcom/android/server/display/ColorFade;->attachEglContext()Z
+HPLcom/android/server/display/ColorFade;->captureScreenshotTextureAndSetViewport()Z
+HPLcom/android/server/display/ColorFade;->checkGlErrors(Ljava/lang/String;)Z
 HPLcom/android/server/display/ColorFade;->checkGlErrors(Ljava/lang/String;Z)Z
 PLcom/android/server/display/ColorFade;->createEglContext()Z
-PLcom/android/server/display/ColorFade;->createEglSurface()Z
+HPLcom/android/server/display/ColorFade;->createEglSurface()Z
 HSPLcom/android/server/display/ColorFade;->createNativeFloatBuffer(I)Ljava/nio/FloatBuffer;
-PLcom/android/server/display/ColorFade;->createSurface()Z
-PLcom/android/server/display/ColorFade;->destroyEglSurface()V
-PLcom/android/server/display/ColorFade;->destroyGLBuffers()V
-PLcom/android/server/display/ColorFade;->destroyGLShaders()V
-PLcom/android/server/display/ColorFade;->destroyScreenshotTexture()V
-PLcom/android/server/display/ColorFade;->destroySurface()V
-PLcom/android/server/display/ColorFade;->detachEglContext()V
+HPLcom/android/server/display/ColorFade;->createSurface()Z
+HPLcom/android/server/display/ColorFade;->destroyEglSurface()V
+HPLcom/android/server/display/ColorFade;->destroyGLBuffers()V
+HPLcom/android/server/display/ColorFade;->destroyGLShaders()V
+HPLcom/android/server/display/ColorFade;->destroyScreenshotTexture()V
+HPLcom/android/server/display/ColorFade;->destroySurface()V
+HPLcom/android/server/display/ColorFade;->detachEglContext()V
 HSPLcom/android/server/display/ColorFade;->dismiss()V
-PLcom/android/server/display/ColorFade;->dismissResources()V
+HPLcom/android/server/display/ColorFade;->dismissResources()V
 HPLcom/android/server/display/ColorFade;->draw(F)Z
 HPLcom/android/server/display/ColorFade;->drawFaded(FF)V
-PLcom/android/server/display/ColorFade;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/display/ColorFade;->initGLBuffers()Z
-PLcom/android/server/display/ColorFade;->initGLShaders(Landroid/content/Context;)Z
-PLcom/android/server/display/ColorFade;->loadShader(Landroid/content/Context;II)I
-PLcom/android/server/display/ColorFade;->ortho(FFFFFF)V
-PLcom/android/server/display/ColorFade;->prepare(Landroid/content/Context;I)Z
-PLcom/android/server/display/ColorFade;->readFile(Landroid/content/Context;I)Ljava/lang/String;
-PLcom/android/server/display/ColorFade;->setQuad(Ljava/nio/FloatBuffer;FFFF)V
+HPLcom/android/server/display/ColorFade;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/ColorFade;->initGLBuffers()Z
+HPLcom/android/server/display/ColorFade;->initGLShaders(Landroid/content/Context;)Z
+HPLcom/android/server/display/ColorFade;->loadShader(Landroid/content/Context;II)I
+HPLcom/android/server/display/ColorFade;->ortho(FFFFFF)V
+HPLcom/android/server/display/ColorFade;->prepare(Landroid/content/Context;I)Z
+HPLcom/android/server/display/ColorFade;->readFile(Landroid/content/Context;I)Ljava/lang/String;
+HPLcom/android/server/display/ColorFade;->setQuad(Ljava/nio/FloatBuffer;FFFF)V
 HPLcom/android/server/display/ColorFade;->showSurface(F)Z
 HSPLcom/android/server/display/DisplayAdapter$1;-><init>(Lcom/android/server/display/DisplayAdapter;Lcom/android/server/display/DisplayDevice;I)V
 HSPLcom/android/server/display/DisplayAdapter$1;->run()V
@@ -8953,18 +14952,34 @@
 PLcom/android/server/display/DisplayAdapter;->dumpLocked(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayAdapter;->getContext()Landroid/content/Context;
 HSPLcom/android/server/display/DisplayAdapter;->getHandler()Landroid/os/Handler;
+PLcom/android/server/display/DisplayAdapter;->getName()Ljava/lang/String;
 HSPLcom/android/server/display/DisplayAdapter;->getSyncRoot()Lcom/android/server/display/DisplayManagerService$SyncRoot;
+HSPLcom/android/server/display/DisplayAdapter;->lambda$sendDisplayDeviceEventLocked$0$DisplayAdapter(Lcom/android/server/display/DisplayDevice;I)V
+HSPLcom/android/server/display/DisplayAdapter;->lambda$sendTraversalRequestLocked$1$DisplayAdapter()V
 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/DisplayDevice;-><init>(Lcom/android/server/display/DisplayAdapter;Landroid/os/IBinder;Ljava/lang/String;)V
-PLcom/android/server/display/DisplayDevice;->dumpLocked(Ljava/io/PrintWriter;)V
+PLcom/android/server/display/DisplayDevice;->applyPendingDisplayDeviceInfoChangesLocked()V
+HPLcom/android/server/display/DisplayDevice;->dumpLocked(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayDevice;->getDisplayTokenLocked()Landroid/os/IBinder;
+PLcom/android/server/display/DisplayDevice;->getNameLocked()Ljava/lang/String;
 HSPLcom/android/server/display/DisplayDevice;->getUniqueId()Ljava/lang/String;
 HSPLcom/android/server/display/DisplayDevice;->performTraversalLocked(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/display/DisplayDevice;->populateViewportLocked(Landroid/hardware/display/DisplayViewport;)V
+HPLcom/android/server/display/DisplayDevice;->setAutoLowLatencyModeLocked(Z)V
+HPLcom/android/server/display/DisplayDevice;->setDesiredDisplayModeSpecsLocked(Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;)V
+HPLcom/android/server/display/DisplayDevice;->setGameContentTypeLocked(Z)V
 HSPLcom/android/server/display/DisplayDevice;->setLayerStackLocked(Landroid/view/SurfaceControl$Transaction;I)V
 HSPLcom/android/server/display/DisplayDevice;->setProjectionLocked(Landroid/view/SurfaceControl$Transaction;ILandroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/display/DisplayDevice;->setRequestedColorModeLocked(I)V
+PLcom/android/server/display/DisplayDevice;->setSurfaceLocked(Landroid/view/SurfaceControl$Transaction;Landroid/view/Surface;)V
+HSPLcom/android/server/display/DisplayDeviceConfig;-><init>()V
+HSPLcom/android/server/display/DisplayDeviceConfig;->create(J)Lcom/android/server/display/DisplayDeviceConfig;
+HSPLcom/android/server/display/DisplayDeviceConfig;->getBrightness()[F
+HSPLcom/android/server/display/DisplayDeviceConfig;->getNits()[F
+HSPLcom/android/server/display/DisplayDeviceConfig;->initFromFile(Ljava/io/File;)V
+HSPLcom/android/server/display/DisplayDeviceConfig;->loadBrightnessMap(Lcom/android/server/display/config/DisplayConfiguration;)V
 HSPLcom/android/server/display/DisplayDeviceInfo;-><init>()V
 HSPLcom/android/server/display/DisplayDeviceInfo;->diff(Lcom/android/server/display/DisplayDeviceInfo;)I
 HSPLcom/android/server/display/DisplayDeviceInfo;->equals(Lcom/android/server/display/DisplayDeviceInfo;)Z
@@ -8975,21 +14990,36 @@
 HSPLcom/android/server/display/DisplayManagerService$AllowedDisplayModeObserver;-><init>(Lcom/android/server/display/DisplayManagerService;)V
 HSPLcom/android/server/display/DisplayManagerService$AllowedDisplayModeObserver;->onAllowedDisplayModesChanged()V
 HSPLcom/android/server/display/DisplayManagerService$BinderService;-><init>(Lcom/android/server/display/DisplayManagerService;)V
+PLcom/android/server/display/DisplayManagerService$BinderService;->canProjectSecureVideo(Landroid/media/projection/IMediaProjection;)Z
+PLcom/android/server/display/DisplayManagerService$BinderService;->canProjectVideo(Landroid/media/projection/IMediaProjection;)Z
+PLcom/android/server/display/DisplayManagerService$BinderService;->checkCallingPermission(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/display/DisplayManagerService$BinderService;->createVirtualDisplay(Landroid/hardware/display/IVirtualDisplayCallback;Landroid/media/projection/IMediaProjection;Ljava/lang/String;Ljava/lang/String;IIILandroid/view/Surface;ILjava/lang/String;)I
 PLcom/android/server/display/DisplayManagerService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/display/DisplayManagerService$BinderService;->getAmbientBrightnessStats()Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/display/DisplayManagerService$BinderService;->getBrightnessEvents(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/display/DisplayManagerService$BinderService;->getDefaultBrightnessConfiguration()Landroid/hardware/display/BrightnessConfiguration;
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->getDisplayIds()[I
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->getDisplayInfo(I)Landroid/view/DisplayInfo;
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->getPreferredWideGamutColorSpaceId()I
-PLcom/android/server/display/DisplayManagerService$BinderService;->getStableDisplaySize()Landroid/graphics/Point;
+HPLcom/android/server/display/DisplayManagerService$BinderService;->getStableDisplaySize()Landroid/graphics/Point;
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
+HPLcom/android/server/display/DisplayManagerService$BinderService;->isUidPresentOnDisplay(II)Z
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->registerCallback(Landroid/hardware/display/IDisplayManagerCallback;)V
+PLcom/android/server/display/DisplayManagerService$BinderService;->releaseVirtualDisplay(Landroid/hardware/display/IVirtualDisplayCallback;)V
+PLcom/android/server/display/DisplayManagerService$BinderService;->requestColorMode(II)V
+PLcom/android/server/display/DisplayManagerService$BinderService;->resizeVirtualDisplay(Landroid/hardware/display/IVirtualDisplayCallback;III)V
 PLcom/android/server/display/DisplayManagerService$BinderService;->setBrightnessConfigurationForUser(Landroid/hardware/display/BrightnessConfiguration;ILjava/lang/String;)V
-PLcom/android/server/display/DisplayManagerService$BinderService;->setTemporaryBrightness(I)V
+HPLcom/android/server/display/DisplayManagerService$BinderService;->setTemporaryBrightness(I)V
+HPLcom/android/server/display/DisplayManagerService$BinderService;->setVirtualDisplayState(Landroid/hardware/display/IVirtualDisplayCallback;Z)V
+HPLcom/android/server/display/DisplayManagerService$BinderService;->setVirtualDisplaySurface(Landroid/hardware/display/IVirtualDisplayCallback;Landroid/view/Surface;)V
+PLcom/android/server/display/DisplayManagerService$BinderService;->startWifiDisplayScan()V
+PLcom/android/server/display/DisplayManagerService$BinderService;->stopWifiDisplayScan()V
 PLcom/android/server/display/DisplayManagerService$BinderService;->validatePackageName(ILjava/lang/String;)Z
 HSPLcom/android/server/display/DisplayManagerService$CallbackRecord;-><init>(Lcom/android/server/display/DisplayManagerService;ILandroid/hardware/display/IDisplayManagerCallback;)V
 HPLcom/android/server/display/DisplayManagerService$CallbackRecord;->binderDied()V
 HSPLcom/android/server/display/DisplayManagerService$CallbackRecord;->notifyDisplayEventAsync(II)V
+HSPLcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver;-><init>(Lcom/android/server/display/DisplayManagerService;)V
+HSPLcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver;->onDesiredDisplayModeSpecsChanged()V
 HSPLcom/android/server/display/DisplayManagerService$DisplayAdapterListener;-><init>(Lcom/android/server/display/DisplayManagerService;)V
 HSPLcom/android/server/display/DisplayManagerService$DisplayAdapterListener;-><init>(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService$1;)V
 HSPLcom/android/server/display/DisplayManagerService$DisplayAdapterListener;->onDisplayDeviceEvent(Lcom/android/server/display/DisplayDevice;I)V
@@ -9006,59 +15036,121 @@
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->getDisplayInfo(I)Landroid/view/DisplayInfo;
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->getNonOverrideDisplayInfo(ILandroid/view/DisplayInfo;)V
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->initPowerManagement(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;Landroid/os/Handler;Landroid/hardware/SensorManager;)V
-PLcom/android/server/display/DisplayManagerService$LocalService;->isProximitySensorAvailable()Z
-PLcom/android/server/display/DisplayManagerService$LocalService;->onOverlayChanged()V
+HSPLcom/android/server/display/DisplayManagerService$LocalService;->isProximitySensorAvailable()Z
+HSPLcom/android/server/display/DisplayManagerService$LocalService;->onOverlayChanged()V
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->performTraversal(Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/display/DisplayManagerService$LocalService;->persistBrightnessTrackerState()V
 PLcom/android/server/display/DisplayManagerService$LocalService;->registerDisplayTransactionListener(Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->requestPowerState(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Z)Z
-PLcom/android/server/display/DisplayManagerService$LocalService;->screenshot(I)Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;
+HPLcom/android/server/display/DisplayManagerService$LocalService;->screenshot(I)Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayAccessUIDs(Landroid/util/SparseArray;)V
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayInfoOverrideFromWindowManager(ILandroid/view/DisplayInfo;)V
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayProperties(IZFIZ)V
+HSPLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayProperties(IZFIZZ)V
 PLcom/android/server/display/DisplayManagerService$LocalService;->unregisterDisplayTransactionListener(Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
+HSPLcom/android/server/display/DisplayManagerService$SettingsObserver;-><init>(Lcom/android/server/display/DisplayManagerService;)V
 HSPLcom/android/server/display/DisplayManagerService$SyncRoot;-><init>()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;->access$1000(Lcom/android/server/display/DisplayManagerService;)Ljava/util/ArrayList;
 HSPLcom/android/server/display/DisplayManagerService;->access$1000(Lcom/android/server/display/DisplayManagerService;)V
+HSPLcom/android/server/display/DisplayManagerService;->access$1100(Lcom/android/server/display/DisplayManagerService;)Ljava/util/ArrayList;
 HSPLcom/android/server/display/DisplayManagerService;->access$1100(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayDevice;)V
+HSPLcom/android/server/display/DisplayManagerService;->access$1200(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/input/InputManagerInternal;
 HSPLcom/android/server/display/DisplayManagerService;->access$1200(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayDevice;)V
+HSPLcom/android/server/display/DisplayManagerService;->access$1300(Lcom/android/server/display/DisplayManagerService;)V
+PLcom/android/server/display/DisplayManagerService;->access$1300(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayDevice;)V
+HSPLcom/android/server/display/DisplayManagerService;->access$1400(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayDevice;)V
 HSPLcom/android/server/display/DisplayManagerService;->access$1400(Lcom/android/server/display/DisplayManagerService;Z)V
+HSPLcom/android/server/display/DisplayManagerService;->access$1500(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayDevice;)V
+HPLcom/android/server/display/DisplayManagerService;->access$1500(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService$CallbackRecord;)V
 HSPLcom/android/server/display/DisplayManagerService;->access$1600(Lcom/android/server/display/DisplayManagerService;II)Landroid/view/DisplayInfo;
+PLcom/android/server/display/DisplayManagerService;->access$1600(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayDevice;)V
 HSPLcom/android/server/display/DisplayManagerService;->access$1700(Lcom/android/server/display/DisplayManagerService;I)[I
+HSPLcom/android/server/display/DisplayManagerService;->access$1700(Lcom/android/server/display/DisplayManagerService;Z)V
+PLcom/android/server/display/DisplayManagerService;->access$1800(Lcom/android/server/display/DisplayManagerService;II)Z
+HPLcom/android/server/display/DisplayManagerService;->access$1800(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService$CallbackRecord;)V
+PLcom/android/server/display/DisplayManagerService;->access$1900(Lcom/android/server/display/DisplayManagerService;)Landroid/graphics/Point;
+HSPLcom/android/server/display/DisplayManagerService;->access$1900(Lcom/android/server/display/DisplayManagerService;II)Landroid/view/DisplayInfo;
+HSPLcom/android/server/display/DisplayManagerService;->access$200(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayManagerService$DisplayManagerHandler;
 HSPLcom/android/server/display/DisplayManagerService;->access$200(Lcom/android/server/display/DisplayManagerService;)V
+HSPLcom/android/server/display/DisplayManagerService;->access$2000(Lcom/android/server/display/DisplayManagerService;I)[I
 HSPLcom/android/server/display/DisplayManagerService;->access$2000(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/display/IDisplayManagerCallback;I)V
 HSPLcom/android/server/display/DisplayManagerService;->access$2100(Lcom/android/server/display/DisplayManagerService;)Landroid/content/Context;
+PLcom/android/server/display/DisplayManagerService;->access$2100(Lcom/android/server/display/DisplayManagerService;II)Z
+PLcom/android/server/display/DisplayManagerService;->access$2200(Lcom/android/server/display/DisplayManagerService;)Landroid/graphics/Point;
+HSPLcom/android/server/display/DisplayManagerService;->access$2300(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/display/IDisplayManagerCallback;I)V
+PLcom/android/server/display/DisplayManagerService;->access$2400(Lcom/android/server/display/DisplayManagerService;I)V
+PLcom/android/server/display/DisplayManagerService;->access$2500(Lcom/android/server/display/DisplayManagerService;I)V
+HSPLcom/android/server/display/DisplayManagerService;->access$300(Lcom/android/server/display/DisplayManagerService;)Landroid/content/Context;
 HSPLcom/android/server/display/DisplayManagerService;->access$300(Lcom/android/server/display/DisplayManagerService;)V
 HSPLcom/android/server/display/DisplayManagerService;->access$3000(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/display/WifiDisplayStatus;
+PLcom/android/server/display/DisplayManagerService;->access$3100(Lcom/android/server/display/DisplayManagerService;II)V
+HSPLcom/android/server/display/DisplayManagerService;->access$3200(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/display/WifiDisplayStatus;
+PLcom/android/server/display/DisplayManagerService;->access$3300(Lcom/android/server/display/DisplayManagerService;II)V
+PLcom/android/server/display/DisplayManagerService;->access$3300(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/display/IVirtualDisplayCallback;Landroid/media/projection/IMediaProjection;ILjava/lang/String;Ljava/lang/String;IIILandroid/view/Surface;ILjava/lang/String;)I
+PLcom/android/server/display/DisplayManagerService;->access$3400(Lcom/android/server/display/DisplayManagerService;)Landroid/media/projection/IMediaProjectionManager;
+PLcom/android/server/display/DisplayManagerService;->access$3500(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/display/IVirtualDisplayCallback;Landroid/media/projection/IMediaProjection;ILjava/lang/String;Ljava/lang/String;IIILandroid/view/Surface;ILjava/lang/String;)I
+PLcom/android/server/display/DisplayManagerService;->access$3500(Lcom/android/server/display/DisplayManagerService;Landroid/os/IBinder;Landroid/view/Surface;)V
+PLcom/android/server/display/DisplayManagerService;->access$3600(Lcom/android/server/display/DisplayManagerService;Landroid/os/IBinder;)V
+PLcom/android/server/display/DisplayManagerService;->access$3600(Lcom/android/server/display/DisplayManagerService;Landroid/os/IBinder;III)V
+PLcom/android/server/display/DisplayManagerService;->access$3700(Lcom/android/server/display/DisplayManagerService;Landroid/os/IBinder;Landroid/view/Surface;)V
+PLcom/android/server/display/DisplayManagerService;->access$3700(Lcom/android/server/display/DisplayManagerService;Landroid/os/IBinder;Z)V
+PLcom/android/server/display/DisplayManagerService;->access$3800(Lcom/android/server/display/DisplayManagerService;Landroid/os/IBinder;)V
+PLcom/android/server/display/DisplayManagerService;->access$3800(Lcom/android/server/display/DisplayManagerService;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayManagerService;->access$3900(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayPowerController;
+PLcom/android/server/display/DisplayManagerService;->access$3900(Lcom/android/server/display/DisplayManagerService;Landroid/os/IBinder;Z)V
 HSPLcom/android/server/display/DisplayManagerService;->access$3902(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayPowerController;)Lcom/android/server/display/DisplayPowerController;
 HSPLcom/android/server/display/DisplayManagerService;->access$400(Lcom/android/server/display/DisplayManagerService;II)V
+PLcom/android/server/display/DisplayManagerService;->access$4000(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/display/BrightnessConfiguration;ILjava/lang/String;)V
+PLcom/android/server/display/DisplayManagerService;->access$4000(Lcom/android/server/display/DisplayManagerService;Ljava/io/PrintWriter;)V
+HSPLcom/android/server/display/DisplayManagerService;->access$4100(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayPowerController;
+HSPLcom/android/server/display/DisplayManagerService;->access$4102(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayPowerController;)Lcom/android/server/display/DisplayPowerController;
+PLcom/android/server/display/DisplayManagerService;->access$4200(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/display/BrightnessConfiguration;ILjava/lang/String;)V
 HSPLcom/android/server/display/DisplayManagerService;->access$4300(Lcom/android/server/display/DisplayManagerService;II)V
 HSPLcom/android/server/display/DisplayManagerService;->access$4402(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/SensorManager;)Landroid/hardware/SensorManager;
 HSPLcom/android/server/display/DisplayManagerService;->access$4500(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayManagerService$DisplayManagerHandler;
 PLcom/android/server/display/DisplayManagerService;->access$4600(Lcom/android/server/display/DisplayManagerService;I)Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;
+HSPLcom/android/server/display/DisplayManagerService;->access$4600(Lcom/android/server/display/DisplayManagerService;II)V
 PLcom/android/server/display/DisplayManagerService;->access$4700(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
+HSPLcom/android/server/display/DisplayManagerService;->access$4702(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/SensorManager;)Landroid/hardware/SensorManager;
+PLcom/android/server/display/DisplayManagerService;->access$4800(Lcom/android/server/display/DisplayManagerService;I)Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;
+PLcom/android/server/display/DisplayManagerService;->access$4800(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
 HSPLcom/android/server/display/DisplayManagerService;->access$4900(Lcom/android/server/display/DisplayManagerService;ILandroid/view/DisplayInfo;)V
+PLcom/android/server/display/DisplayManagerService;->access$4900(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
 HSPLcom/android/server/display/DisplayManagerService;->access$500(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/wm/WindowManagerInternal;
+HSPLcom/android/server/display/DisplayManagerService;->access$500(Lcom/android/server/display/DisplayManagerService;)V
 HSPLcom/android/server/display/DisplayManagerService;->access$5000(Lcom/android/server/display/DisplayManagerService;ILandroid/view/DisplayInfo;)V
+PLcom/android/server/display/DisplayManagerService;->access$5000(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
+HSPLcom/android/server/display/DisplayManagerService;->access$5100(Lcom/android/server/display/DisplayManagerService;ILandroid/view/DisplayInfo;)V
 HSPLcom/android/server/display/DisplayManagerService;->access$5100(Lcom/android/server/display/DisplayManagerService;IZFIZ)V
+HSPLcom/android/server/display/DisplayManagerService;->access$5100(Lcom/android/server/display/DisplayManagerService;IZFIZZ)V
+HSPLcom/android/server/display/DisplayManagerService;->access$5200(Lcom/android/server/display/DisplayManagerService;ILandroid/view/DisplayInfo;)V
+HSPLcom/android/server/display/DisplayManagerService;->access$5300(Lcom/android/server/display/DisplayManagerService;IZFIZZ)V
 HSPLcom/android/server/display/DisplayManagerService;->access$5400(Lcom/android/server/display/DisplayManagerService;Landroid/util/SparseArray;)V
-PLcom/android/server/display/DisplayManagerService;->access$5500(Lcom/android/server/display/DisplayManagerService;)Ljava/util/ArrayList;
+HSPLcom/android/server/display/DisplayManagerService;->access$5500(Lcom/android/server/display/DisplayManagerService;)Ljava/util/ArrayList;
 HSPLcom/android/server/display/DisplayManagerService;->access$5600(Lcom/android/server/display/DisplayManagerService;)V
+HSPLcom/android/server/display/DisplayManagerService;->access$5600(Lcom/android/server/display/DisplayManagerService;Landroid/util/SparseArray;)V
+HSPLcom/android/server/display/DisplayManagerService;->access$5700(Lcom/android/server/display/DisplayManagerService;)Ljava/util/ArrayList;
+HSPLcom/android/server/display/DisplayManagerService;->access$5800(Lcom/android/server/display/DisplayManagerService;)V
 HSPLcom/android/server/display/DisplayManagerService;->access$600(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayManagerService$SyncRoot;
+HSPLcom/android/server/display/DisplayManagerService;->access$600(Lcom/android/server/display/DisplayManagerService;)V
 HSPLcom/android/server/display/DisplayManagerService;->access$700(Lcom/android/server/display/DisplayManagerService;)Ljava/util/ArrayList;
+HSPLcom/android/server/display/DisplayManagerService;->access$700(Lcom/android/server/display/DisplayManagerService;II)V
+HSPLcom/android/server/display/DisplayManagerService;->access$800(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/wm/WindowManagerInternal;
 HSPLcom/android/server/display/DisplayManagerService;->access$800(Lcom/android/server/display/DisplayManagerService;)Ljava/util/ArrayList;
 HSPLcom/android/server/display/DisplayManagerService;->access$900(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/input/InputManagerInternal;
+HSPLcom/android/server/display/DisplayManagerService;->access$900(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayManagerService$SyncRoot;
 HSPLcom/android/server/display/DisplayManagerService;->addLogicalDisplayLocked(Lcom/android/server/display/DisplayDevice;)Lcom/android/server/display/LogicalDisplay;
-PLcom/android/server/display/DisplayManagerService;->applyGlobalDisplayStateLocked(Ljava/util/List;)V
+HPLcom/android/server/display/DisplayManagerService;->applyGlobalDisplayStateLocked(Ljava/util/List;)V
 HSPLcom/android/server/display/DisplayManagerService;->assignDisplayIdLocked(Z)I
 HSPLcom/android/server/display/DisplayManagerService;->assignLayerStackLocked(I)I
 HSPLcom/android/server/display/DisplayManagerService;->clearViewportsLocked()V
 HSPLcom/android/server/display/DisplayManagerService;->configureColorModeLocked(Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/DisplayDevice;)V
 HSPLcom/android/server/display/DisplayManagerService;->configureDisplayLocked(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/display/DisplayDevice;)V
+PLcom/android/server/display/DisplayManagerService;->createVirtualDisplayInternal(Landroid/hardware/display/IVirtualDisplayCallback;Landroid/media/projection/IMediaProjection;ILjava/lang/String;Ljava/lang/String;IIILandroid/view/Surface;ILjava/lang/String;)I
 HSPLcom/android/server/display/DisplayManagerService;->deliverDisplayEvent(II)V
-PLcom/android/server/display/DisplayManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/DisplayManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayManagerService;->findLogicalDisplayForDeviceLocked(Lcom/android/server/display/DisplayDevice;)Lcom/android/server/display/LogicalDisplay;
 HSPLcom/android/server/display/DisplayManagerService;->getDisplayIdsInternal(I)[I
 HSPLcom/android/server/display/DisplayManagerService;->getDisplayInfoInternal(II)Landroid/view/DisplayInfo;
@@ -9066,20 +15158,25 @@
 HSPLcom/android/server/display/DisplayManagerService;->getFloatArray(Landroid/content/res/TypedArray;)[F
 HSPLcom/android/server/display/DisplayManagerService;->getNonOverrideDisplayInfoInternal(ILandroid/view/DisplayInfo;)V
 HSPLcom/android/server/display/DisplayManagerService;->getPreferredWideGamutColorSpaceIdInternal()I
-PLcom/android/server/display/DisplayManagerService;->getStableDisplaySizeInternal()Landroid/graphics/Point;
+PLcom/android/server/display/DisplayManagerService;->getProjectionService()Landroid/media/projection/IMediaProjectionManager;
+HPLcom/android/server/display/DisplayManagerService;->getStableDisplaySizeInternal()Landroid/graphics/Point;
 HSPLcom/android/server/display/DisplayManagerService;->getUserManager()Landroid/os/UserManager;
 HSPLcom/android/server/display/DisplayManagerService;->getViewportLocked(ILjava/lang/String;)Landroid/hardware/display/DisplayViewport;
 HSPLcom/android/server/display/DisplayManagerService;->getWifiDisplayStatusInternal()Landroid/hardware/display/WifiDisplayStatus;
 HSPLcom/android/server/display/DisplayManagerService;->handleDisplayDeviceAdded(Lcom/android/server/display/DisplayDevice;)V
 HSPLcom/android/server/display/DisplayManagerService;->handleDisplayDeviceAddedLocked(Lcom/android/server/display/DisplayDevice;)V
 HSPLcom/android/server/display/DisplayManagerService;->handleDisplayDeviceChanged(Lcom/android/server/display/DisplayDevice;)V
+PLcom/android/server/display/DisplayManagerService;->handleDisplayDeviceRemoved(Lcom/android/server/display/DisplayDevice;)V
+HPLcom/android/server/display/DisplayManagerService;->handleDisplayDeviceRemovedLocked(Lcom/android/server/display/DisplayDevice;)V
 HSPLcom/android/server/display/DisplayManagerService;->handleLogicalDisplayChanged(ILcom/android/server/display/LogicalDisplay;)V
-PLcom/android/server/display/DisplayManagerService;->isBrightnessConfigurationTooDark(Landroid/hardware/display/BrightnessConfiguration;)Z
+HPLcom/android/server/display/DisplayManagerService;->isBrightnessConfigurationTooDark(Landroid/hardware/display/BrightnessConfiguration;)Z
+HPLcom/android/server/display/DisplayManagerService;->isUidPresentOnDisplayInternal(II)Z
 HSPLcom/android/server/display/DisplayManagerService;->loadBrightnessConfiguration()V
 HSPLcom/android/server/display/DisplayManagerService;->loadStableDisplayValuesLocked()V
 HSPLcom/android/server/display/DisplayManagerService;->onAllowedDisplayModesChangedInternal()V
 HSPLcom/android/server/display/DisplayManagerService;->onBootPhase(I)V
 HPLcom/android/server/display/DisplayManagerService;->onCallbackDied(Lcom/android/server/display/DisplayManagerService$CallbackRecord;)V
+HSPLcom/android/server/display/DisplayManagerService;->onDesiredDisplayModeSpecsChangedInternal()V
 HSPLcom/android/server/display/DisplayManagerService;->onStart()V
 HSPLcom/android/server/display/DisplayManagerService;->performTraversalInternal(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/display/DisplayManagerService;->performTraversalLocked(Landroid/view/SurfaceControl$Transaction;)V
@@ -9093,20 +15190,32 @@
 PLcom/android/server/display/DisplayManagerService;->registerDisplayTransactionListenerInternal(Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
 HSPLcom/android/server/display/DisplayManagerService;->registerOverlayDisplayAdapterLocked()V
 HSPLcom/android/server/display/DisplayManagerService;->registerWifiDisplayAdapterLocked()V
+PLcom/android/server/display/DisplayManagerService;->releaseVirtualDisplayInternal(Landroid/os/IBinder;)V
+PLcom/android/server/display/DisplayManagerService;->requestColorModeInternal(II)V
 HSPLcom/android/server/display/DisplayManagerService;->requestGlobalDisplayStateInternal(II)V
+PLcom/android/server/display/DisplayManagerService;->resizeVirtualDisplayInternal(Landroid/os/IBinder;III)V
 HSPLcom/android/server/display/DisplayManagerService;->scheduleTraversalLocked(Z)V
-PLcom/android/server/display/DisplayManagerService;->screenshotInternal(I)Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;
+HPLcom/android/server/display/DisplayManagerService;->screenshotInternal(I)Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;
 HSPLcom/android/server/display/DisplayManagerService;->sendDisplayEventLocked(II)V
 PLcom/android/server/display/DisplayManagerService;->setBrightnessConfigurationForUserInternal(Landroid/hardware/display/BrightnessConfiguration;ILjava/lang/String;)V
 HSPLcom/android/server/display/DisplayManagerService;->setDisplayAccessUIDsInternal(Landroid/util/SparseArray;)V
 HSPLcom/android/server/display/DisplayManagerService;->setDisplayInfoOverrideFromWindowManagerInternal(ILandroid/view/DisplayInfo;)V
 HSPLcom/android/server/display/DisplayManagerService;->setDisplayPropertiesInternal(IZFIZ)V
+HSPLcom/android/server/display/DisplayManagerService;->setDisplayPropertiesInternal(IZFIZZ)V
+PLcom/android/server/display/DisplayManagerService;->setVirtualDisplayStateInternal(Landroid/os/IBinder;Z)V
+PLcom/android/server/display/DisplayManagerService;->setVirtualDisplaySurfaceInternal(Landroid/os/IBinder;Landroid/view/Surface;)V
 HSPLcom/android/server/display/DisplayManagerService;->setupSchedulerPolicies()V
 HSPLcom/android/server/display/DisplayManagerService;->shouldRegisterNonEssentialDisplayAdaptersLocked()Z
+PLcom/android/server/display/DisplayManagerService;->startWifiDisplayScanInternal(I)V
+PLcom/android/server/display/DisplayManagerService;->startWifiDisplayScanLocked(Lcom/android/server/display/DisplayManagerService$CallbackRecord;)V
+PLcom/android/server/display/DisplayManagerService;->stopWifiDisplayScanInternal(I)V
 HPLcom/android/server/display/DisplayManagerService;->stopWifiDisplayScanLocked(Lcom/android/server/display/DisplayManagerService$CallbackRecord;)V
 HSPLcom/android/server/display/DisplayManagerService;->systemReady(ZZ)V
+PLcom/android/server/display/DisplayManagerService;->unregisterDisplayTransactionListenerInternal(Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
 HSPLcom/android/server/display/DisplayManagerService;->updateDisplayStateLocked(Lcom/android/server/display/DisplayDevice;)Ljava/lang/Runnable;
 HSPLcom/android/server/display/DisplayManagerService;->updateLogicalDisplaysLocked()Z
+HSPLcom/android/server/display/DisplayManagerService;->updateSettingsLocked()V
+PLcom/android/server/display/DisplayManagerService;->validateBrightnessConfiguration(Landroid/hardware/display/BrightnessConfiguration;)V
 HSPLcom/android/server/display/DisplayManagerService;->windowManagerAndInputReady()V
 HSPLcom/android/server/display/DisplayModeDirector$AppRequestObserver;-><init>(Lcom/android/server/display/DisplayModeDirector;)V
 PLcom/android/server/display/DisplayModeDirector$AppRequestObserver;->dumpLocked(Ljava/io/PrintWriter;)V
@@ -9117,15 +15226,16 @@
 HPLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener$1;->run()V
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;-><init>(Lcom/android/server/display/DisplayModeDirector$BrightnessObserver;)V
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;-><init>(Lcom/android/server/display/DisplayModeDirector$BrightnessObserver;Lcom/android/server/display/DisplayModeDirector$1;)V
-PLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->access$1500(Lcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;J)V
+HPLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->access$1500(Lcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;J)V
 PLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->access$1600(Lcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;)F
-PLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->access$1700(Lcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;FF)Z
+HPLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->access$1700(Lcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;FF)Z
 PLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->access$1800(Lcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;)Ljava/lang/Runnable;
+PLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->dumpLocked(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->isDifferentZone(FF)Z
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->onSensorChanged(Landroid/hardware/SensorEvent;)V
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->processSensorData(J)V
-PLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->removeCallbacks()V
+HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->removeCallbacks()V
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver;-><init>(Lcom/android/server/display/DisplayModeDirector;Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver;->access$1100(Lcom/android/server/display/DisplayModeDirector$BrightnessObserver;)F
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver;->access$1102(Lcom/android/server/display/DisplayModeDirector$BrightnessObserver;F)F
@@ -9139,6 +15249,7 @@
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver;->observe(Landroid/hardware/SensorManager;)V
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver;->onBrightnessChangedLocked()V
 HPLcom/android/server/display/DisplayModeDirector$BrightnessObserver;->onChange(ZLandroid/net/Uri;I)V
+PLcom/android/server/display/DisplayModeDirector$BrightnessObserver;->onDeviceConfigRefreshRateInZoneChanged(I)V
 PLcom/android/server/display/DisplayModeDirector$BrightnessObserver;->onDeviceConfigThresholdsChanged([I[I)V
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver;->onDisplayChanged(I)V
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver;->onLowPowerModeEnabledLocked(Z)V
@@ -9147,6 +15258,11 @@
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver;->restartObserver()V
 HSPLcom/android/server/display/DisplayModeDirector$BrightnessObserver;->updateSensorStatus()V
 HSPLcom/android/server/display/DisplayModeDirector$DesiredDisplayConfigSpecs;-><init>(ILcom/android/server/display/DisplayModeDirector$RefreshRateRange;[I)V
+HSPLcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;-><init>()V
+HSPLcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;-><init>(ILcom/android/server/display/DisplayModeDirector$RefreshRateRange;)V
+HSPLcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;->copyFrom(Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;)V
+HSPLcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;->toString()Ljava/lang/String;
 HSPLcom/android/server/display/DisplayModeDirector$DeviceConfigDisplaySettings;-><init>(Lcom/android/server/display/DisplayModeDirector;)V
 HSPLcom/android/server/display/DisplayModeDirector$DeviceConfigDisplaySettings;->getAmbientThresholds()[I
 HSPLcom/android/server/display/DisplayModeDirector$DeviceConfigDisplaySettings;->getBrightnessThresholds()[I
@@ -9159,11 +15275,17 @@
 HSPLcom/android/server/display/DisplayModeDirector$DisplayModeDirectorHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/display/DisplayModeDirector$DisplayObserver;-><init>(Lcom/android/server/display/DisplayModeDirector;Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/display/DisplayModeDirector$DisplayObserver;->observe()V
+PLcom/android/server/display/DisplayModeDirector$DisplayObserver;->onDisplayAdded(I)V
 HSPLcom/android/server/display/DisplayModeDirector$DisplayObserver;->onDisplayChanged(I)V
+PLcom/android/server/display/DisplayModeDirector$DisplayObserver;->onDisplayRemoved(I)V
 HSPLcom/android/server/display/DisplayModeDirector$DisplayObserver;->updateDisplayModes(I)V
+HSPLcom/android/server/display/DisplayModeDirector$RefreshRateRange;-><init>()V
 HSPLcom/android/server/display/DisplayModeDirector$RefreshRateRange;-><init>(FF)V
+HSPLcom/android/server/display/DisplayModeDirector$RefreshRateRange;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/server/display/DisplayModeDirector$SettingsObserver;-><init>(Lcom/android/server/display/DisplayModeDirector;Landroid/content/Context;Landroid/os/Handler;)V
+PLcom/android/server/display/DisplayModeDirector$SettingsObserver;->dumpLocked(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayModeDirector$SettingsObserver;->observe()V
+PLcom/android/server/display/DisplayModeDirector$SettingsObserver;->onChange(ZLandroid/net/Uri;I)V
 PLcom/android/server/display/DisplayModeDirector$SettingsObserver;->onDeviceConfigDefaultPeakRefreshRateChanged(Ljava/lang/Float;)V
 HSPLcom/android/server/display/DisplayModeDirector$SettingsObserver;->updateLowPowerModeSettingLocked()V
 HSPLcom/android/server/display/DisplayModeDirector$SettingsObserver;->updateRefreshRateSettingLocked()V
@@ -9174,22 +15296,27 @@
 PLcom/android/server/display/DisplayModeDirector$Vote;->toString()Ljava/lang/String;
 HSPLcom/android/server/display/DisplayModeDirector;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/display/DisplayModeDirector;->access$000(Lcom/android/server/display/DisplayModeDirector;)Lcom/android/server/display/DisplayModeDirector$BrightnessObserver;
+PLcom/android/server/display/DisplayModeDirector;->access$100(Lcom/android/server/display/DisplayModeDirector;)Lcom/android/server/display/DisplayModeDirector$SettingsObserver;
 HSPLcom/android/server/display/DisplayModeDirector;->access$1000(Lcom/android/server/display/DisplayModeDirector;)Lcom/android/server/display/DisplayModeDirector$DisplayModeDirectorHandler;
 HSPLcom/android/server/display/DisplayModeDirector;->access$1900(Lcom/android/server/display/DisplayModeDirector;)Landroid/content/Context;
 HSPLcom/android/server/display/DisplayModeDirector;->access$200(Lcom/android/server/display/DisplayModeDirector;)Lcom/android/server/display/DisplayModeDirector$DeviceConfigDisplaySettings;
 HSPLcom/android/server/display/DisplayModeDirector;->access$300(Lcom/android/server/display/DisplayModeDirector;)Ljava/lang/Object;
 HSPLcom/android/server/display/DisplayModeDirector;->access$400(Lcom/android/server/display/DisplayModeDirector;ILcom/android/server/display/DisplayModeDirector$Vote;)V
-PLcom/android/server/display/DisplayModeDirector;->access$500(Lcom/android/server/display/DisplayModeDirector;IILcom/android/server/display/DisplayModeDirector$Vote;)V
+HPLcom/android/server/display/DisplayModeDirector;->access$500(Lcom/android/server/display/DisplayModeDirector;IILcom/android/server/display/DisplayModeDirector$Vote;)V
 HSPLcom/android/server/display/DisplayModeDirector;->access$600(Lcom/android/server/display/DisplayModeDirector;)Landroid/util/SparseArray;
 HSPLcom/android/server/display/DisplayModeDirector;->access$700(Lcom/android/server/display/DisplayModeDirector;)Landroid/util/SparseArray;
-PLcom/android/server/display/DisplayModeDirector;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/display/DisplayModeDirector;->access$800(Lcom/android/server/display/DisplayModeDirector;)V
+HPLcom/android/server/display/DisplayModeDirector;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayModeDirector;->filterModes([Landroid/view/Display$Mode;IIFF)[I
 HSPLcom/android/server/display/DisplayModeDirector;->getAllowedModes(I)[I
 HSPLcom/android/server/display/DisplayModeDirector;->getAppRequestObserver()Lcom/android/server/display/DisplayModeDirector$AppRequestObserver;
 HSPLcom/android/server/display/DisplayModeDirector;->getDesiredDisplayConfigSpecs(I)Lcom/android/server/display/DisplayModeDirector$DesiredDisplayConfigSpecs;
+HSPLcom/android/server/display/DisplayModeDirector;->getDesiredDisplayModeSpecs(I)Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;
 HSPLcom/android/server/display/DisplayModeDirector;->getOrCreateVotesByDisplay(I)Landroid/util/SparseArray;
 HSPLcom/android/server/display/DisplayModeDirector;->getVotesLocked(I)Landroid/util/SparseArray;
 HSPLcom/android/server/display/DisplayModeDirector;->notifyAllowedModesChangedLocked()V
+HSPLcom/android/server/display/DisplayModeDirector;->notifyDesiredDisplayModeSpecsChangedLocked()V
+HSPLcom/android/server/display/DisplayModeDirector;->setDesiredDisplayModeSpecsListener(Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecsListener;)V
 HSPLcom/android/server/display/DisplayModeDirector;->setDisplayModeListener(Lcom/android/server/display/DisplayModeDirector$DisplayModeListener;)V
 HSPLcom/android/server/display/DisplayModeDirector;->start(Landroid/hardware/SensorManager;)V
 HSPLcom/android/server/display/DisplayModeDirector;->updateVoteLocked(IILcom/android/server/display/DisplayModeDirector$Vote;)V
@@ -9204,10 +15331,14 @@
 HSPLcom/android/server/display/DisplayPowerController$4;-><init>(Lcom/android/server/display/DisplayPowerController;)V
 HSPLcom/android/server/display/DisplayPowerController$4;->run()V
 HSPLcom/android/server/display/DisplayPowerController$5;-><init>(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController$5;->run()V
 HSPLcom/android/server/display/DisplayPowerController$6;-><init>(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController$6;->run()V
 PLcom/android/server/display/DisplayPowerController$7;-><init>(Lcom/android/server/display/DisplayPowerController;Ljava/io/PrintWriter;)V
 PLcom/android/server/display/DisplayPowerController$7;->run()V
 HSPLcom/android/server/display/DisplayPowerController$8;-><init>(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController$8;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
+HPLcom/android/server/display/DisplayPowerController$8;->onSensorChanged(Landroid/hardware/SensorEvent;)V
 HSPLcom/android/server/display/DisplayPowerController$BrightnessReason;-><init>(Lcom/android/server/display/DisplayPowerController;)V
 HSPLcom/android/server/display/DisplayPowerController$BrightnessReason;-><init>(Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayPowerController$1;)V
 PLcom/android/server/display/DisplayPowerController$BrightnessReason;->addModifier(I)V
@@ -9220,62 +15351,85 @@
 HSPLcom/android/server/display/DisplayPowerController$BrightnessReason;->toString(I)Ljava/lang/String;
 HSPLcom/android/server/display/DisplayPowerController$DisplayControllerHandler;-><init>(Lcom/android/server/display/DisplayPowerController;Landroid/os/Looper;)V
 HSPLcom/android/server/display/DisplayPowerController$DisplayControllerHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/display/DisplayPowerController$ScreenOffUnblocker;-><init>(Lcom/android/server/display/DisplayPowerController;)V
-PLcom/android/server/display/DisplayPowerController$ScreenOffUnblocker;-><init>(Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayPowerController$1;)V
-PLcom/android/server/display/DisplayPowerController$ScreenOffUnblocker;->onScreenOff()V
-PLcom/android/server/display/DisplayPowerController$ScreenOnUnblocker;-><init>(Lcom/android/server/display/DisplayPowerController;)V
-PLcom/android/server/display/DisplayPowerController$ScreenOnUnblocker;-><init>(Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayPowerController$1;)V
-PLcom/android/server/display/DisplayPowerController$ScreenOnUnblocker;->onScreenOn()V
+HPLcom/android/server/display/DisplayPowerController$ScreenOffUnblocker;-><init>(Lcom/android/server/display/DisplayPowerController;)V
+HPLcom/android/server/display/DisplayPowerController$ScreenOffUnblocker;-><init>(Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayPowerController$1;)V
+HPLcom/android/server/display/DisplayPowerController$ScreenOffUnblocker;->onScreenOff()V
+HPLcom/android/server/display/DisplayPowerController$ScreenOnUnblocker;-><init>(Lcom/android/server/display/DisplayPowerController;)V
+HPLcom/android/server/display/DisplayPowerController$ScreenOnUnblocker;-><init>(Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayPowerController$1;)V
+HPLcom/android/server/display/DisplayPowerController$ScreenOnUnblocker;->onScreenOn()V
 HSPLcom/android/server/display/DisplayPowerController$SettingsObserver;-><init>(Lcom/android/server/display/DisplayPowerController;Landroid/os/Handler;)V
-PLcom/android/server/display/DisplayPowerController$SettingsObserver;->onChange(ZLandroid/net/Uri;)V
+HPLcom/android/server/display/DisplayPowerController$SettingsObserver;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/display/DisplayPowerController;-><clinit>()V
 HSPLcom/android/server/display/DisplayPowerController;-><init>(Landroid/content/Context;Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;Landroid/os/Handler;Landroid/hardware/SensorManager;Lcom/android/server/display/DisplayBlanker;)V
 HSPLcom/android/server/display/DisplayPowerController;->access$100(Lcom/android/server/display/DisplayPowerController;)V
 PLcom/android/server/display/DisplayPowerController;->access$1000(Lcom/android/server/display/DisplayPowerController;)Lcom/android/server/display/DisplayPowerController$ScreenOffUnblocker;
 HSPLcom/android/server/display/DisplayPowerController;->access$1202(Lcom/android/server/display/DisplayPowerController;Landroid/hardware/display/BrightnessConfiguration;)Landroid/hardware/display/BrightnessConfiguration;
-PLcom/android/server/display/DisplayPowerController;->access$1800(Lcom/android/server/display/DisplayPowerController;Z)V
+PLcom/android/server/display/DisplayPowerController;->access$1302(Lcom/android/server/display/DisplayPowerController;I)I
+PLcom/android/server/display/DisplayPowerController;->access$1500(Lcom/android/server/display/DisplayPowerController;)Z
+PLcom/android/server/display/DisplayPowerController;->access$1600(Lcom/android/server/display/DisplayPowerController;)F
+PLcom/android/server/display/DisplayPowerController;->access$1700(Lcom/android/server/display/DisplayPowerController;JZ)V
+HPLcom/android/server/display/DisplayPowerController;->access$1800(Lcom/android/server/display/DisplayPowerController;Z)V
 PLcom/android/server/display/DisplayPowerController;->access$1900(Lcom/android/server/display/DisplayPowerController;)Lcom/android/server/display/DisplayPowerController$DisplayControllerHandler;
 HSPLcom/android/server/display/DisplayPowerController;->access$400(Lcom/android/server/display/DisplayPowerController;)Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;
+PLcom/android/server/display/DisplayPowerController;->access$500(Lcom/android/server/display/DisplayPowerController;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayPowerController;->access$600(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController;->access$700(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController;->access$800(Lcom/android/server/display/DisplayPowerController;)Lcom/android/server/display/DisplayPowerController$ScreenOnUnblocker;
+PLcom/android/server/display/DisplayPowerController;->access$900(Lcom/android/server/display/DisplayPowerController;)V
 HSPLcom/android/server/display/DisplayPowerController;->animateScreenBrightness(II)V
 HSPLcom/android/server/display/DisplayPowerController;->animateScreenStateChange(IZ)V
-PLcom/android/server/display/DisplayPowerController;->blockScreenOff()V
-PLcom/android/server/display/DisplayPowerController;->blockScreenOn()V
+HPLcom/android/server/display/DisplayPowerController;->blockScreenOff()V
+HPLcom/android/server/display/DisplayPowerController;->blockScreenOn()V
 HSPLcom/android/server/display/DisplayPowerController;->clampAbsoluteBrightness(I)I
 HSPLcom/android/server/display/DisplayPowerController;->clampAutoBrightnessAdjustment(F)F
-PLcom/android/server/display/DisplayPowerController;->clampScreenBrightness(I)I
+HPLcom/android/server/display/DisplayPowerController;->clampScreenBrightness(I)I
 HSPLcom/android/server/display/DisplayPowerController;->clampScreenBrightnessForVr(I)I
+PLcom/android/server/display/DisplayPowerController;->clearPendingProximityDebounceTime()V
 HSPLcom/android/server/display/DisplayPowerController;->convertToNits(I)F
-PLcom/android/server/display/DisplayPowerController;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/display/DisplayPowerController;->dumpLocal(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/DisplayPowerController;->debounceProximitySensor()V
+HPLcom/android/server/display/DisplayPowerController;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/DisplayPowerController;->dumpLocal(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayPowerController;->findDisplayLightSensor(Ljava/lang/String;)Landroid/hardware/Sensor;
+PLcom/android/server/display/DisplayPowerController;->getAmbientBrightnessStats(I)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/display/DisplayPowerController;->getAutoBrightnessAdjustmentSetting()F
+PLcom/android/server/display/DisplayPowerController;->getBrightnessEvents(IZ)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/display/DisplayPowerController;->getDefaultBrightnessConfiguration()Landroid/hardware/display/BrightnessConfiguration;
 HSPLcom/android/server/display/DisplayPowerController;->getScreenBrightnessForVrSetting()I
 HSPLcom/android/server/display/DisplayPowerController;->getScreenBrightnessSetting()I
-PLcom/android/server/display/DisplayPowerController;->handleSettingsChange(Z)V
+HPLcom/android/server/display/DisplayPowerController;->handleProximitySensorEvent(JZ)V
+HPLcom/android/server/display/DisplayPowerController;->handleSettingsChange(Z)V
 HSPLcom/android/server/display/DisplayPowerController;->initialize()V
-PLcom/android/server/display/DisplayPowerController;->isProximitySensorAvailable()Z
+HSPLcom/android/server/display/DisplayPowerController;->isProximitySensorAvailable()Z
 HPLcom/android/server/display/DisplayPowerController;->logDisplayPolicyChanged(I)V
 HSPLcom/android/server/display/DisplayPowerController;->notifyBrightnessChanged(IZZ)V
-PLcom/android/server/display/DisplayPowerController;->putScreenBrightnessSetting(I)V
+PLcom/android/server/display/DisplayPowerController;->persistBrightnessTrackerState()V
+PLcom/android/server/display/DisplayPowerController;->proximityToString(I)Ljava/lang/String;
+PLcom/android/server/display/DisplayPowerController;->putAutoBrightnessAdjustmentSetting(F)V
+HPLcom/android/server/display/DisplayPowerController;->putScreenBrightnessSetting(I)V
+PLcom/android/server/display/DisplayPowerController;->reportedToPolicyToString(I)Ljava/lang/String;
 HSPLcom/android/server/display/DisplayPowerController;->requestPowerState(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Z)Z
+PLcom/android/server/display/DisplayPowerController;->sendOnProximityNegativeWithWakelock()V
+PLcom/android/server/display/DisplayPowerController;->sendOnProximityPositiveWithWakelock()V
 HSPLcom/android/server/display/DisplayPowerController;->sendOnStateChangedWithWakelock()V
 HSPLcom/android/server/display/DisplayPowerController;->sendUpdatePowerState()V
 HSPLcom/android/server/display/DisplayPowerController;->sendUpdatePowerStateLocked()V
 HSPLcom/android/server/display/DisplayPowerController;->setBrightnessConfiguration(Landroid/hardware/display/BrightnessConfiguration;)V
+PLcom/android/server/display/DisplayPowerController;->setPendingProximityDebounceTime(J)V
 HSPLcom/android/server/display/DisplayPowerController;->setProximitySensorEnabled(Z)V
 HSPLcom/android/server/display/DisplayPowerController;->setReportedScreenState(I)V
 HSPLcom/android/server/display/DisplayPowerController;->setScreenState(I)Z
 HSPLcom/android/server/display/DisplayPowerController;->setScreenState(IZ)Z
-PLcom/android/server/display/DisplayPowerController;->unblockScreenOff()V
+HPLcom/android/server/display/DisplayPowerController;->setTemporaryBrightness(I)V
+PLcom/android/server/display/DisplayPowerController;->skipRampStateToString(I)Ljava/lang/String;
+HPLcom/android/server/display/DisplayPowerController;->unblockScreenOff()V
 HSPLcom/android/server/display/DisplayPowerController;->unblockScreenOn()V
 HSPLcom/android/server/display/DisplayPowerController;->updateAutoBrightnessAdjustment()Z
-PLcom/android/server/display/DisplayPowerController;->updateBrightness()V
+HPLcom/android/server/display/DisplayPowerController;->updateBrightness()V
 HSPLcom/android/server/display/DisplayPowerController;->updatePowerState()V
 HSPLcom/android/server/display/DisplayPowerController;->updateUserSetScreenBrightness()Z
 PLcom/android/server/display/DisplayPowerController;->updateWhiteBalance()V
 HSPLcom/android/server/display/DisplayPowerState$1;-><init>(Ljava/lang/String;)V
-PLcom/android/server/display/DisplayPowerState$1;->setValue(Lcom/android/server/display/DisplayPowerState;F)V
+HPLcom/android/server/display/DisplayPowerState$1;->setValue(Lcom/android/server/display/DisplayPowerState;F)V
 HPLcom/android/server/display/DisplayPowerState$1;->setValue(Ljava/lang/Object;F)V
 HSPLcom/android/server/display/DisplayPowerState$2;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/display/DisplayPowerState$2;->setValue(Lcom/android/server/display/DisplayPowerState;I)V
@@ -9285,16 +15439,16 @@
 HSPLcom/android/server/display/DisplayPowerState$4;-><init>(Lcom/android/server/display/DisplayPowerState;)V
 HPLcom/android/server/display/DisplayPowerState$4;->run()V
 HSPLcom/android/server/display/DisplayPowerState$PhotonicModulator;-><init>(Lcom/android/server/display/DisplayPowerState;)V
-PLcom/android/server/display/DisplayPowerState$PhotonicModulator;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/DisplayPowerState$PhotonicModulator;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayPowerState$PhotonicModulator;->run()V
 HSPLcom/android/server/display/DisplayPowerState$PhotonicModulator;->setState(II)Z
 HSPLcom/android/server/display/DisplayPowerState;-><clinit>()V
 HSPLcom/android/server/display/DisplayPowerState;-><init>(Lcom/android/server/display/DisplayBlanker;Lcom/android/server/display/ColorFade;)V
 HSPLcom/android/server/display/DisplayPowerState;->access$002(Lcom/android/server/display/DisplayPowerState;Z)Z
 HSPLcom/android/server/display/DisplayPowerState;->access$100(Lcom/android/server/display/DisplayPowerState;)I
-PLcom/android/server/display/DisplayPowerState;->access$1000(Lcom/android/server/display/DisplayPowerState;)Lcom/android/server/display/ColorFade;
-PLcom/android/server/display/DisplayPowerState;->access$1100()Ljava/lang/String;
-PLcom/android/server/display/DisplayPowerState;->access$1202(Lcom/android/server/display/DisplayPowerState;Z)Z
+HPLcom/android/server/display/DisplayPowerState;->access$1000(Lcom/android/server/display/DisplayPowerState;)Lcom/android/server/display/ColorFade;
+HPLcom/android/server/display/DisplayPowerState;->access$1100()Ljava/lang/String;
+HPLcom/android/server/display/DisplayPowerState;->access$1202(Lcom/android/server/display/DisplayPowerState;Z)Z
 HSPLcom/android/server/display/DisplayPowerState;->access$1300(Lcom/android/server/display/DisplayPowerState;)V
 HSPLcom/android/server/display/DisplayPowerState;->access$1400(Lcom/android/server/display/DisplayPowerState;)Lcom/android/server/display/DisplayBlanker;
 HSPLcom/android/server/display/DisplayPowerState;->access$200(Lcom/android/server/display/DisplayPowerState;)F
@@ -9303,53 +15457,76 @@
 HSPLcom/android/server/display/DisplayPowerState;->access$500()Z
 HSPLcom/android/server/display/DisplayPowerState;->access$602(Lcom/android/server/display/DisplayPowerState;Z)Z
 HSPLcom/android/server/display/DisplayPowerState;->access$700(Lcom/android/server/display/DisplayPowerState;)V
-PLcom/android/server/display/DisplayPowerState;->access$802(Lcom/android/server/display/DisplayPowerState;Z)Z
-PLcom/android/server/display/DisplayPowerState;->access$900(Lcom/android/server/display/DisplayPowerState;)Z
+HPLcom/android/server/display/DisplayPowerState;->access$802(Lcom/android/server/display/DisplayPowerState;Z)Z
+HPLcom/android/server/display/DisplayPowerState;->access$900(Lcom/android/server/display/DisplayPowerState;)Z
 HSPLcom/android/server/display/DisplayPowerState;->dismissColorFade()V
 PLcom/android/server/display/DisplayPowerState;->dismissColorFadeResources()V
-PLcom/android/server/display/DisplayPowerState;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/DisplayPowerState;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayPowerState;->getColorFadeLevel()F
 HSPLcom/android/server/display/DisplayPowerState;->getScreenBrightness()I
 HSPLcom/android/server/display/DisplayPowerState;->getScreenState()I
 HSPLcom/android/server/display/DisplayPowerState;->invokeCleanListenerIfNeeded()V
 HSPLcom/android/server/display/DisplayPowerState;->postScreenUpdateThreadSafe()V
 PLcom/android/server/display/DisplayPowerState;->prepareColorFade(Landroid/content/Context;I)Z
-PLcom/android/server/display/DisplayPowerState;->scheduleColorFadeDraw()V
+HPLcom/android/server/display/DisplayPowerState;->scheduleColorFadeDraw()V
 HSPLcom/android/server/display/DisplayPowerState;->scheduleScreenUpdate()V
 HSPLcom/android/server/display/DisplayPowerState;->setColorFadeLevel(F)V
 HSPLcom/android/server/display/DisplayPowerState;->setScreenBrightness(I)V
-PLcom/android/server/display/DisplayPowerState;->setScreenState(I)V
+HPLcom/android/server/display/DisplayPowerState;->setScreenState(I)V
 HSPLcom/android/server/display/DisplayPowerState;->waitUntilClean(Ljava/lang/Runnable;)Z
 HSPLcom/android/server/display/HysteresisLevels;-><init>([I[I[I)V
-PLcom/android/server/display/HysteresisLevels;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/HysteresisLevels;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/display/HysteresisLevels;->getBrighteningThreshold(F)F
 PLcom/android/server/display/HysteresisLevels;->getDarkeningThreshold(F)F
-PLcom/android/server/display/HysteresisLevels;->getReferenceLevel(F[F)F
+HPLcom/android/server/display/HysteresisLevels;->getReferenceLevel(F[F)F
 HSPLcom/android/server/display/HysteresisLevels;->setArrayFormat([IF)[F
+HSPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;-><init>(Landroid/view/SurfaceControl$DisplayConfig;)V
 HSPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;-><init>(Landroid/view/SurfaceControl$PhysicalDisplayInfo;)V
+HSPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;->hasMatchingMode(Landroid/view/SurfaceControl$DisplayConfig;)Z
 HSPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;->hasMatchingMode(Landroid/view/SurfaceControl$PhysicalDisplayInfo;)Z
 PLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;->toString()Ljava/lang/String;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;-><init>(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;IIZIJLandroid/os/IBinder;)V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->displayBrightnessToHalBrightness(I)F
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->run()V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->setDisplayBrightness(I)V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->setDisplayState(I)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$DisplayInfo;[Landroid/view/SurfaceControl$DisplayConfig;ILandroid/view/SurfaceControl$DesiredDisplayConfigSpecs;[IILandroid/view/Display$HdrCapabilities;Z)V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;-><init>(Lcom/android/server/display/LocalDisplayAdapter;Landroid/os/IBinder;JLandroid/view/SurfaceControl$DisplayInfo;[Landroid/view/SurfaceControl$DisplayConfig;ILandroid/view/SurfaceControl$DesiredDisplayConfigSpecs;[IIZ)V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;-><init>(Lcom/android/server/display/LocalDisplayAdapter;Landroid/os/IBinder;J[Landroid/view/SurfaceControl$PhysicalDisplayInfo;ILandroid/view/SurfaceControl$DesiredDisplayConfigSpecs;[IIZ)V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;-><init>(Lcom/android/server/display/LocalDisplayAdapter;Landroid/os/IBinder;J[Landroid/view/SurfaceControl$PhysicalDisplayInfo;I[I[IIZ)V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->access$000(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;)Lcom/android/server/lights/Light;
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->access$000(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;)Lcom/android/server/lights/LogicalLight;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->access$100(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;)Z
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->access$300(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;)Z
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->access$400(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;)Landroid/util/Spline;
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->access$500(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;)Landroid/util/Spline;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->applyPendingDisplayDeviceInfoChangesLocked()V
-PLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->dumpLocked(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->dumpLocked(Ljava/io/PrintWriter;)V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findDisplayConfigIdLocked(I)I
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findDisplayInfoIndexLocked(I)I
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findDisplayModeRecord(Landroid/view/SurfaceControl$DisplayConfig;)Lcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findDisplayModeRecord(Landroid/view/SurfaceControl$PhysicalDisplayInfo;)Lcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findMatchingModeIdLocked(I)I
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getDisplayDeviceInfoLocked()Lcom/android/server/display/DisplayDeviceInfo;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getDisplayModes(Landroid/util/SparseArray;)[Landroid/view/Display$Mode;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->hasStableUniqueId()Z
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->lambda$6tpawjjBXhlj4GSsJjStLZrwDUQ(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;Landroid/os/IBinder;I)V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->lambda$S4bSIp6drytTEiae37oiY_7m6ng(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;)V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->lambda$iXCIox7NAT3NknToX9AEwGueQjs(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;Landroid/os/IBinder;Landroid/view/SurfaceControl$DesiredDisplayConfigSpecs;)V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->loadDisplayConfigurationBrightnessMapping()V
+PLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->onActiveDisplayConfigChangedLocked(I)V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->onActivePhysicalDisplayModeChangedLocked(I)V
-PLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->onOverlayChangedLocked()V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->onOverlayChangedLocked()V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->requestColorModeAsync(Landroid/os/IBinder;I)V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->requestColorModeLocked(I)V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->requestColorModeLocked(I)Z
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->requestDisplayStateLocked(II)Ljava/lang/Runnable;
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->setAutoLowLatencyModeLocked(Z)V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->setDesiredDisplayConfigSpecs(IFF[I)V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->setDesiredDisplayModeSpecsAsync(Landroid/os/IBinder;Landroid/view/SurfaceControl$DesiredDisplayConfigSpecs;)V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->setDesiredDisplayModeSpecsLocked(Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;)V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->setGameContentTypeLocked(Z)V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->setRequestedColorModeLocked(I)V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updateActiveModeLocked(I)Z
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updateAllowedModesInternalLocked([I)Z
@@ -9358,33 +15535,43 @@
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updateDesiredDisplayConfigSpecs(IFF)V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updateDesiredDisplayConfigSpecsInternalLocked(IFF)Z
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updateDeviceInfoLocked()V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updateDisplayConfigsLocked([Landroid/view/SurfaceControl$DisplayConfig;ILandroid/view/SurfaceControl$DesiredDisplayConfigSpecs;)Z
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updateDisplayConfigsLocked([Landroid/view/SurfaceControl$DisplayConfig;ILandroid/view/SurfaceControl$DesiredDisplayConfigSpecs;[II)Z
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updateDisplayProperties([Landroid/view/SurfaceControl$DisplayConfig;ILandroid/view/SurfaceControl$DesiredDisplayConfigSpecs;[IILandroid/view/Display$HdrCapabilities;)Z
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updateHdrCapabilitiesLocked(Landroid/view/Display$HdrCapabilities;)Z
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updatePhysicalDisplayInfoLocked([Landroid/view/SurfaceControl$PhysicalDisplayInfo;ILandroid/view/SurfaceControl$DesiredDisplayConfigSpecs;[II)Z
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updatePhysicalDisplayInfoLocked([Landroid/view/SurfaceControl$PhysicalDisplayInfo;I[I[II)Z
 HSPLcom/android/server/display/LocalDisplayAdapter$PhysicalDisplayEventReceiver;-><init>(Lcom/android/server/display/LocalDisplayAdapter;Landroid/os/Looper;)V
 HSPLcom/android/server/display/LocalDisplayAdapter$PhysicalDisplayEventReceiver;->onConfigChanged(JJI)V
 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
 HSPLcom/android/server/display/LocalDisplayAdapter;->access$500(Lcom/android/server/display/LocalDisplayAdapter;)Landroid/util/LongSparseArray;
+HSPLcom/android/server/display/LocalDisplayAdapter;->access$800(Lcom/android/server/display/LocalDisplayAdapter;)Landroid/util/LongSparseArray;
 HSPLcom/android/server/display/LocalDisplayAdapter;->getOverlayContext()Landroid/content/Context;
 HSPLcom/android/server/display/LocalDisplayAdapter;->getPowerModeForState(I)I
 HSPLcom/android/server/display/LocalDisplayAdapter;->registerLocked()V
 HSPLcom/android/server/display/LocalDisplayAdapter;->tryConnectDisplayLocked(J)V
 HSPLcom/android/server/display/LogicalDisplay;-><init>(IILcom/android/server/display/DisplayDevice;)V
 HSPLcom/android/server/display/LogicalDisplay;->configureDisplayLocked(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/display/DisplayDevice;Z)V
-PLcom/android/server/display/LogicalDisplay;->dumpLocked(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/LogicalDisplay;->dumpLocked(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/LogicalDisplay;->getAllowedDisplayModesLocked()[I
+HSPLcom/android/server/display/LogicalDisplay;->getDesiredDisplayModeSpecsLocked()Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;
 HSPLcom/android/server/display/LogicalDisplay;->getDisplayIdLocked()I
 HSPLcom/android/server/display/LogicalDisplay;->getDisplayInfoLocked()Landroid/view/DisplayInfo;
 HSPLcom/android/server/display/LogicalDisplay;->getInsets()Landroid/graphics/Rect;
 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;->getPrimaryDisplayDeviceLocked()Lcom/android/server/display/DisplayDevice;
+PLcom/android/server/display/LogicalDisplay;->getRequestedColorModeLocked()I
 HSPLcom/android/server/display/LogicalDisplay;->hasContentLocked()Z
 HSPLcom/android/server/display/LogicalDisplay;->isValidLocked()Z
 HSPLcom/android/server/display/LogicalDisplay;->setAllowedDisplayModesLocked([I)V
+HSPLcom/android/server/display/LogicalDisplay;->setDesiredDisplayModeSpecsLocked(Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;)V
 HSPLcom/android/server/display/LogicalDisplay;->setDisplayInfoOverrideFromWindowManagerLocked(Landroid/view/DisplayInfo;)Z
-PLcom/android/server/display/LogicalDisplay;->setHasContentLocked(Z)V
+HSPLcom/android/server/display/LogicalDisplay;->setHasContentLocked(Z)V
 HSPLcom/android/server/display/LogicalDisplay;->setRequestedColorModeLocked(I)V
 HSPLcom/android/server/display/LogicalDisplay;->updateLocked(Ljava/util/List;)V
 HSPLcom/android/server/display/OverlayDisplayAdapter$1$1;-><init>(Lcom/android/server/display/OverlayDisplayAdapter$1;Landroid/os/Handler;)V
+PLcom/android/server/display/OverlayDisplayAdapter$1$1;->onChange(Z)V
 HSPLcom/android/server/display/OverlayDisplayAdapter$1;-><init>(Lcom/android/server/display/OverlayDisplayAdapter;)V
 HSPLcom/android/server/display/OverlayDisplayAdapter$1;->run()V
 HSPLcom/android/server/display/OverlayDisplayAdapter;-><clinit>()V
@@ -9395,12 +15582,21 @@
 HSPLcom/android/server/display/OverlayDisplayAdapter;->updateOverlayDisplayDevices()V
 HSPLcom/android/server/display/OverlayDisplayAdapter;->updateOverlayDisplayDevicesLocked()V
 HSPLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;-><init>()V
-PLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;->access$200(Lcom/android/server/display/PersistentDataStore$BrightnessConfigurations;Landroid/hardware/display/BrightnessConfiguration;ILjava/lang/String;)Z
+HPLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;->getBrightnessConfiguration(I)Landroid/hardware/display/BrightnessConfiguration;
 HSPLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
+PLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
 PLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;->setBrightnessConfigurationForUser(Landroid/hardware/display/BrightnessConfiguration;ILjava/lang/String;)Z
+HSPLcom/android/server/display/PersistentDataStore$DisplayState;-><init>()V
+HSPLcom/android/server/display/PersistentDataStore$DisplayState;-><init>(Lcom/android/server/display/PersistentDataStore$1;)V
+HSPLcom/android/server/display/PersistentDataStore$DisplayState;->getColorMode()I
+HSPLcom/android/server/display/PersistentDataStore$DisplayState;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLcom/android/server/display/PersistentDataStore$DisplayState;->setColorMode(I)Z
 HSPLcom/android/server/display/PersistentDataStore$Injector;-><init>()V
+PLcom/android/server/display/PersistentDataStore$Injector;->finishWrite(Ljava/io/OutputStream;Z)V
 HSPLcom/android/server/display/PersistentDataStore$Injector;->openRead()Ljava/io/InputStream;
+PLcom/android/server/display/PersistentDataStore$Injector;->startWrite()Ljava/io/OutputStream;
 HSPLcom/android/server/display/PersistentDataStore$StableDeviceValues;-><init>()V
 HSPLcom/android/server/display/PersistentDataStore$StableDeviceValues;-><init>(Lcom/android/server/display/PersistentDataStore$1;)V
 HSPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->access$100(Lcom/android/server/display/PersistentDataStore$StableDeviceValues;)Landroid/graphics/Point;
@@ -9408,6 +15604,7 @@
 HSPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->getDisplaySize()Landroid/graphics/Point;
 HSPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->loadIntValue(Lorg/xmlpull/v1/XmlPullParser;)I
+PLcom/android/server/display/PersistentDataStore$StableDeviceValues;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)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;->clearState()V
@@ -9421,6 +15618,12 @@
 HSPLcom/android/server/display/PersistentDataStore;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/display/PersistentDataStore;->loadIfNeeded()V
 HSPLcom/android/server/display/PersistentDataStore;->loadRememberedWifiDisplaysFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
+PLcom/android/server/display/PersistentDataStore;->save()V
+HSPLcom/android/server/display/PersistentDataStore;->saveIfNeeded()V
+PLcom/android/server/display/PersistentDataStore;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+PLcom/android/server/display/PersistentDataStore;->setBrightnessConfigurationForUser(Landroid/hardware/display/BrightnessConfiguration;ILjava/lang/String;)V
+HSPLcom/android/server/display/PersistentDataStore;->setColorMode(Lcom/android/server/display/DisplayDevice;I)Z
+PLcom/android/server/display/PersistentDataStore;->setDirty()V
 HSPLcom/android/server/display/RampAnimator$1;-><init>(Lcom/android/server/display/RampAnimator;)V
 HPLcom/android/server/display/RampAnimator$1;->run()V
 HSPLcom/android/server/display/RampAnimator;-><init>(Ljava/lang/Object;Landroid/util/IntProperty;)V
@@ -9430,56 +15633,101 @@
 PLcom/android/server/display/RampAnimator;->access$102(Lcom/android/server/display/RampAnimator;J)J
 PLcom/android/server/display/RampAnimator;->access$200(Lcom/android/server/display/RampAnimator;)F
 PLcom/android/server/display/RampAnimator;->access$202(Lcom/android/server/display/RampAnimator;F)F
-PLcom/android/server/display/RampAnimator;->access$300(Lcom/android/server/display/RampAnimator;)I
+HPLcom/android/server/display/RampAnimator;->access$300(Lcom/android/server/display/RampAnimator;)I
 PLcom/android/server/display/RampAnimator;->access$400(Lcom/android/server/display/RampAnimator;)I
-PLcom/android/server/display/RampAnimator;->access$500(Lcom/android/server/display/RampAnimator;)I
+HPLcom/android/server/display/RampAnimator;->access$500(Lcom/android/server/display/RampAnimator;)I
 PLcom/android/server/display/RampAnimator;->access$502(Lcom/android/server/display/RampAnimator;I)I
 PLcom/android/server/display/RampAnimator;->access$600(Lcom/android/server/display/RampAnimator;)Ljava/lang/Object;
 PLcom/android/server/display/RampAnimator;->access$700(Lcom/android/server/display/RampAnimator;)Landroid/util/IntProperty;
 PLcom/android/server/display/RampAnimator;->access$800(Lcom/android/server/display/RampAnimator;)V
 PLcom/android/server/display/RampAnimator;->access$902(Lcom/android/server/display/RampAnimator;Z)Z
 HSPLcom/android/server/display/RampAnimator;->animateTo(II)Z
+PLcom/android/server/display/RampAnimator;->cancelAnimationCallback()V
 HSPLcom/android/server/display/RampAnimator;->isAnimating()Z
-PLcom/android/server/display/RampAnimator;->postAnimationCallback()V
+HPLcom/android/server/display/RampAnimator;->postAnimationCallback()V
 HSPLcom/android/server/display/RampAnimator;->setListener(Lcom/android/server/display/RampAnimator$Listener;)V
+PLcom/android/server/display/VirtualDisplayAdapter$Callback;-><init>(Landroid/hardware/display/IVirtualDisplayCallback;Landroid/os/Handler;)V
+PLcom/android/server/display/VirtualDisplayAdapter$Callback;->dispatchDisplayPaused()V
+PLcom/android/server/display/VirtualDisplayAdapter$Callback;->dispatchDisplayResumed()V
+PLcom/android/server/display/VirtualDisplayAdapter$Callback;->dispatchDisplayStopped()V
+PLcom/android/server/display/VirtualDisplayAdapter$Callback;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/display/VirtualDisplayAdapter$MediaProjectionCallback;-><init>(Lcom/android/server/display/VirtualDisplayAdapter;Landroid/os/IBinder;)V
+PLcom/android/server/display/VirtualDisplayAdapter$MediaProjectionCallback;->onStop()V
+PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;-><init>(Lcom/android/server/display/VirtualDisplayAdapter;Landroid/os/IBinder;Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;IIILandroid/view/Surface;ILcom/android/server/display/VirtualDisplayAdapter$Callback;Ljava/lang/String;I)V
+PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->access$000(Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;)I
+PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->binderDied()V
+HPLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->destroyLocked(Z)V
+PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->dumpLocked(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->getDisplayDeviceInfoLocked()Lcom/android/server/display/DisplayDeviceInfo;
+PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->hasStableUniqueId()Z
+HPLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->performTraversalLocked(Landroid/view/SurfaceControl$Transaction;)V
+PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->requestDisplayStateLocked(II)Ljava/lang/Runnable;
+PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->resizeLocked(III)V
+PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->setDisplayState(Z)V
+PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->setSurfaceLocked(Landroid/view/Surface;)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
+PLcom/android/server/display/VirtualDisplayAdapter;->access$100(Lcom/android/server/display/VirtualDisplayAdapter;Landroid/os/IBinder;)V
+PLcom/android/server/display/VirtualDisplayAdapter;->access$200(Lcom/android/server/display/VirtualDisplayAdapter;Landroid/os/IBinder;)V
+HPLcom/android/server/display/VirtualDisplayAdapter;->createVirtualDisplayLocked(Landroid/hardware/display/IVirtualDisplayCallback;Landroid/media/projection/IMediaProjection;ILjava/lang/String;Ljava/lang/String;IIILandroid/view/Surface;ILjava/lang/String;)Lcom/android/server/display/DisplayDevice;
 PLcom/android/server/display/VirtualDisplayAdapter;->dumpLocked(Ljava/io/PrintWriter;)V
+HPLcom/android/server/display/VirtualDisplayAdapter;->getNextUniqueIndex(Ljava/lang/String;)I
+PLcom/android/server/display/VirtualDisplayAdapter;->handleBinderDiedLocked(Landroid/os/IBinder;)V
+PLcom/android/server/display/VirtualDisplayAdapter;->handleMediaProjectionStoppedLocked(Landroid/os/IBinder;)V
+PLcom/android/server/display/VirtualDisplayAdapter;->lambda$new$0(Ljava/lang/String;Z)Landroid/os/IBinder;
 HSPLcom/android/server/display/VirtualDisplayAdapter;->registerLocked()V
-PLcom/android/server/display/color/-$$Lambda$ColorDisplayService$3e7BuPerYILI5JPZm17hU11tDtY;-><init>(Lcom/android/server/display/color/DisplayTransformManager;Lcom/android/server/display/color/TintController;)V
+PLcom/android/server/display/VirtualDisplayAdapter;->releaseVirtualDisplayLocked(Landroid/os/IBinder;)Lcom/android/server/display/DisplayDevice;
+PLcom/android/server/display/VirtualDisplayAdapter;->resizeVirtualDisplayLocked(Landroid/os/IBinder;III)V
+PLcom/android/server/display/VirtualDisplayAdapter;->setVirtualDisplayStateLocked(Landroid/os/IBinder;Z)V
+PLcom/android/server/display/VirtualDisplayAdapter;->setVirtualDisplaySurfaceLocked(Landroid/os/IBinder;Landroid/view/Surface;)V
+HPLcom/android/server/display/color/-$$Lambda$ColorDisplayService$3e7BuPerYILI5JPZm17hU11tDtY;-><init>(Lcom/android/server/display/color/DisplayTransformManager;Lcom/android/server/display/color/TintController;)V
 HPLcom/android/server/display/color/-$$Lambda$ColorDisplayService$3e7BuPerYILI5JPZm17hU11tDtY;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
-PLcom/android/server/display/color/AppSaturationController$SaturationController;-><init>()V
-PLcom/android/server/display/color/AppSaturationController$SaturationController;-><init>(Lcom/android/server/display/color/AppSaturationController$1;)V
-PLcom/android/server/display/color/AppSaturationController$SaturationController;->access$000(Lcom/android/server/display/color/AppSaturationController$SaturationController;Ljava/lang/ref/WeakReference;)Z
-PLcom/android/server/display/color/AppSaturationController$SaturationController;->addColorTransformController(Ljava/lang/ref/WeakReference;)Z
-PLcom/android/server/display/color/AppSaturationController$SaturationController;->clearExpiredReferences()V
-PLcom/android/server/display/color/AppSaturationController$SaturationController;->dump(Ljava/io/PrintWriter;)V
+HSPLcom/android/server/display/color/AppSaturationController$SaturationController;-><init>()V
+HSPLcom/android/server/display/color/AppSaturationController$SaturationController;-><init>(Lcom/android/server/display/color/AppSaturationController$1;)V
+HSPLcom/android/server/display/color/AppSaturationController$SaturationController;->access$000(Lcom/android/server/display/color/AppSaturationController$SaturationController;Ljava/lang/ref/WeakReference;)Z
+PLcom/android/server/display/color/AppSaturationController$SaturationController;->access$100(Lcom/android/server/display/color/AppSaturationController$SaturationController;I)Z
+PLcom/android/server/display/color/AppSaturationController$SaturationController;->access$200(Lcom/android/server/display/color/AppSaturationController$SaturationController;Ljava/io/PrintWriter;)V
+HSPLcom/android/server/display/color/AppSaturationController$SaturationController;->addColorTransformController(Ljava/lang/ref/WeakReference;)Z
+HSPLcom/android/server/display/color/AppSaturationController$SaturationController;->clearExpiredReferences()V
+HPLcom/android/server/display/color/AppSaturationController$SaturationController;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/display/color/AppSaturationController$SaturationController;->setSaturationLevel(I)Z
+PLcom/android/server/display/color/AppSaturationController$SaturationController;->updateState()Z
 HSPLcom/android/server/display/color/AppSaturationController;-><clinit>()V
 HSPLcom/android/server/display/color/AppSaturationController;-><init>()V
-PLcom/android/server/display/color/AppSaturationController;->addColorTransformController(Ljava/lang/String;ILjava/lang/ref/WeakReference;)Z
-PLcom/android/server/display/color/AppSaturationController;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/display/color/AppSaturationController;->getOrCreateSaturationControllerLocked(Landroid/util/SparseArray;I)Lcom/android/server/display/color/AppSaturationController$SaturationController;
-PLcom/android/server/display/color/AppSaturationController;->getOrCreateUserIdMapLocked(Ljava/lang/String;)Landroid/util/SparseArray;
-PLcom/android/server/display/color/AppSaturationController;->getSaturationControllerLocked(Ljava/lang/String;I)Lcom/android/server/display/color/AppSaturationController$SaturationController;
+HSPLcom/android/server/display/color/AppSaturationController;->addColorTransformController(Ljava/lang/String;ILjava/lang/ref/WeakReference;)Z
+PLcom/android/server/display/color/AppSaturationController;->computeGrayscaleTransformMatrix(F[F)V
+HPLcom/android/server/display/color/AppSaturationController;->dump(Ljava/io/PrintWriter;)V
+HSPLcom/android/server/display/color/AppSaturationController;->getOrCreateSaturationControllerLocked(Landroid/util/SparseArray;I)Lcom/android/server/display/color/AppSaturationController$SaturationController;
+HSPLcom/android/server/display/color/AppSaturationController;->getOrCreateUserIdMapLocked(Ljava/lang/String;)Landroid/util/SparseArray;
+HSPLcom/android/server/display/color/AppSaturationController;->getSaturationControllerLocked(Ljava/lang/String;I)Lcom/android/server/display/color/AppSaturationController$SaturationController;
 PLcom/android/server/display/color/AppSaturationController;->setSaturationLevel(Ljava/lang/String;II)Z
+PLcom/android/server/display/color/ColorDisplayService$1;-><init>(Lcom/android/server/display/color/ColorDisplayService;Landroid/os/Handler;Landroid/content/ContentResolver;)V
+PLcom/android/server/display/color/ColorDisplayService$1;->onChange(ZLandroid/net/Uri;)V
 PLcom/android/server/display/color/ColorDisplayService$2;-><init>(Lcom/android/server/display/color/ColorDisplayService;Landroid/os/Handler;)V
 PLcom/android/server/display/color/ColorDisplayService$2;->onChange(ZLandroid/net/Uri;)V
-PLcom/android/server/display/color/ColorDisplayService$3;-><init>(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/TintController;[FLcom/android/server/display/color/DisplayTransformManager;)V
-PLcom/android/server/display/color/ColorDisplayService$3;->onAnimationCancel(Landroid/animation/Animator;)V
-PLcom/android/server/display/color/ColorDisplayService$3;->onAnimationEnd(Landroid/animation/Animator;)V
+HPLcom/android/server/display/color/ColorDisplayService$3;-><init>(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/TintController;[FLcom/android/server/display/color/DisplayTransformManager;)V
+HPLcom/android/server/display/color/ColorDisplayService$3;->onAnimationCancel(Landroid/animation/Animator;)V
+HPLcom/android/server/display/color/ColorDisplayService$3;->onAnimationEnd(Landroid/animation/Animator;)V
 HSPLcom/android/server/display/color/ColorDisplayService$BinderService;-><init>(Lcom/android/server/display/color/ColorDisplayService;)V
 PLcom/android/server/display/color/ColorDisplayService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayAutoMode()I
-PLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayAutoModeRaw()I
+PLcom/android/server/display/color/ColorDisplayService$BinderService;->getColorMode()I
+HPLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayAutoMode()I
+HPLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayAutoModeRaw()I
 PLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayColorTemperature()I
-PLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayCustomEndTime()Landroid/hardware/display/Time;
-PLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayCustomStartTime()Landroid/hardware/display/Time;
-PLcom/android/server/display/color/ColorDisplayService$BinderService;->isDeviceColorManaged()Z
-PLcom/android/server/display/color/ColorDisplayService$BinderService;->isNightDisplayActivated()Z
-PLcom/android/server/display/color/ColorDisplayService$BinderService;->setAppSaturationLevel(Ljava/lang/String;I)Z
-PLcom/android/server/display/color/ColorDisplayService$BinderService;->setSaturationLevel(I)Z
+HPLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayCustomEndTime()Landroid/hardware/display/Time;
+HPLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayCustomStartTime()Landroid/hardware/display/Time;
+HPLcom/android/server/display/color/ColorDisplayService$BinderService;->isDeviceColorManaged()Z
+PLcom/android/server/display/color/ColorDisplayService$BinderService;->isDisplayWhiteBalanceEnabled()Z
+HPLcom/android/server/display/color/ColorDisplayService$BinderService;->isNightDisplayActivated()Z
+HPLcom/android/server/display/color/ColorDisplayService$BinderService;->setAppSaturationLevel(Ljava/lang/String;I)Z
+PLcom/android/server/display/color/ColorDisplayService$BinderService;->setColorMode(I)V
+PLcom/android/server/display/color/ColorDisplayService$BinderService;->setDisplayWhiteBalanceEnabled(Z)Z
+PLcom/android/server/display/color/ColorDisplayService$BinderService;->setNightDisplayActivated(Z)Z
+PLcom/android/server/display/color/ColorDisplayService$BinderService;->setNightDisplayAutoMode(I)Z
+PLcom/android/server/display/color/ColorDisplayService$BinderService;->setNightDisplayColorTemperature(I)Z
+HPLcom/android/server/display/color/ColorDisplayService$BinderService;->setSaturationLevel(I)Z
 HSPLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;-><init>(Lcom/android/server/display/color/ColorDisplayService;)V
-PLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;->attachColorTransformController(Ljava/lang/String;ILjava/lang/ref/WeakReference;)Z
+HSPLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;->attachColorTransformController(Ljava/lang/String;ILjava/lang/ref/WeakReference;)Z
 HSPLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;->isDisplayWhiteBalanceEnabled()Z
 HPLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;->resetDisplayWhiteBalanceColorTemperature()Z
 HPLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;->setDisplayWhiteBalanceColorTemperature(I)Z
@@ -9487,10 +15735,11 @@
 HSPLcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;-><init>()V
 HSPLcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;-><init>(Lcom/android/server/display/color/ColorDisplayService$1;)V
 HPLcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;->evaluate(F[F[F)[F
+HPLcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;->evaluate(F[F[F)[F
 PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode$1;-><init>(Lcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;Lcom/android/server/display/color/ColorDisplayService;)V
 PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;-><init>(Lcom/android/server/display/color/ColorDisplayService;)V
+PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;->access$2100(Lcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;)V
 PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;->onActivated(Z)V
 PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;->onAlarm()V
 PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;->onStart()V
@@ -9501,66 +15750,93 @@
 HSPLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;-><init>(Lcom/android/server/display/color/ColorDisplayService;)V
 HSPLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;-><init>(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/ColorDisplayService$1;)V
 PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->clampNightDisplayColorTemperature(I)I
+PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->getColorTemperature()I
 PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->getColorTemperatureSetting()I
 PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->getLevel()I
 PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->getMatrix()[F
 PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->isActivatedSetting()Z
 PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->isAvailable(Landroid/content/Context;)Z
 PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->onActivated(Z)V
+PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->onColorTemperatureChanged(I)V
 PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->setActivated(Ljava/lang/Boolean;)V
 PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->setActivated(Ljava/lang/Boolean;Ljava/time/LocalDateTime;)V
+PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->setColorTemperature(I)Z
 PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->setMatrix(I)V
 PLcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;->setUp(Landroid/content/Context;Z)V
 HSPLcom/android/server/display/color/ColorDisplayService$TintHandler;-><init>(Lcom/android/server/display/color/ColorDisplayService;Landroid/os/Looper;)V
 HSPLcom/android/server/display/color/ColorDisplayService$TintHandler;-><init>(Lcom/android/server/display/color/ColorDisplayService;Landroid/os/Looper;Lcom/android/server/display/color/ColorDisplayService$1;)V
-PLcom/android/server/display/color/ColorDisplayService$TintHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;-><init>()V
+HSPLcom/android/server/display/color/ColorDisplayService$TintHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;-><init>()V
 PLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;->getMax()[F
 PLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;->getMin()[F
 HPLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;->ofMatrix(Lcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;[Ljava/lang/Object;)Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;
 HPLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;->updateMinMaxComponents()V
+PLcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;-><init>(Lcom/android/server/display/color/ColorDisplayService;)V
+PLcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;->onActivated(Z)V
+PLcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;->onStart()V
+PLcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;->onTwilightStateChanged(Lcom/android/server/twilight/TwilightState;)V
+PLcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;->updateActivated(Lcom/android/server/twilight/TwilightState;)V
 HSPLcom/android/server/display/color/ColorDisplayService;-><clinit>()V
 HSPLcom/android/server/display/color/ColorDisplayService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/display/color/ColorDisplayService;->access$1100(Lcom/android/server/display/color/ColorDisplayService;)Landroid/hardware/display/Time;
+PLcom/android/server/display/color/ColorDisplayService;->access$1000(Lcom/android/server/display/color/ColorDisplayService;I)V
+HPLcom/android/server/display/color/ColorDisplayService;->access$1100(Lcom/android/server/display/color/ColorDisplayService;)Landroid/hardware/display/Time;
 PLcom/android/server/display/color/ColorDisplayService;->access$1300(Lcom/android/server/display/color/ColorDisplayService;)Landroid/hardware/display/Time;
+PLcom/android/server/display/color/ColorDisplayService;->access$1500(Lcom/android/server/display/color/ColorDisplayService;)I
+PLcom/android/server/display/color/ColorDisplayService;->access$1600(Lcom/android/server/display/color/ColorDisplayService;I)V
 PLcom/android/server/display/color/ColorDisplayService;->access$2200(Lcom/android/server/display/color/ColorDisplayService;)Ljava/time/LocalDateTime;
+PLcom/android/server/display/color/ColorDisplayService;->access$2300(Lcom/android/server/display/color/ColorDisplayService;Ljava/lang/Class;)Ljava/lang/Object;
 PLcom/android/server/display/color/ColorDisplayService;->access$2400(Lcom/android/server/display/color/ColorDisplayService;)Landroid/os/Handler;
 PLcom/android/server/display/color/ColorDisplayService;->access$2500(Lcom/android/server/display/color/ColorDisplayService;)Lcom/android/server/display/color/ColorDisplayService$NightDisplayAutoMode;
 HSPLcom/android/server/display/color/ColorDisplayService;->access$2602(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/ColorDisplayService$DisplayWhiteBalanceListener;)Lcom/android/server/display/color/ColorDisplayService$DisplayWhiteBalanceListener;
 HSPLcom/android/server/display/color/ColorDisplayService;->access$2700(Lcom/android/server/display/color/ColorDisplayService;)Z
-PLcom/android/server/display/color/ColorDisplayService;->access$2800(Lcom/android/server/display/color/ColorDisplayService;)Lcom/android/server/display/color/AppSaturationController;
+HSPLcom/android/server/display/color/ColorDisplayService;->access$2800(Lcom/android/server/display/color/ColorDisplayService;)Lcom/android/server/display/color/AppSaturationController;
 PLcom/android/server/display/color/ColorDisplayService;->access$2900(Lcom/android/server/display/color/ColorDisplayService;)Lcom/android/server/display/color/TintController;
 PLcom/android/server/display/color/ColorDisplayService;->access$300(Lcom/android/server/display/color/ColorDisplayService;)I
-PLcom/android/server/display/color/ColorDisplayService;->access$3000(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/TintController;Z)V
+HPLcom/android/server/display/color/ColorDisplayService;->access$3000(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/TintController;Z)V
+PLcom/android/server/display/color/ColorDisplayService;->access$3100(Lcom/android/server/display/color/ColorDisplayService;I)V
+PLcom/android/server/display/color/ColorDisplayService;->access$3200(Lcom/android/server/display/color/ColorDisplayService;)Z
+PLcom/android/server/display/color/ColorDisplayService;->access$3300(Lcom/android/server/display/color/ColorDisplayService;Ljava/lang/String;I)Z
+PLcom/android/server/display/color/ColorDisplayService;->access$3500(Lcom/android/server/display/color/ColorDisplayService;I)Z
+PLcom/android/server/display/color/ColorDisplayService;->access$3600(Lcom/android/server/display/color/ColorDisplayService;)I
+PLcom/android/server/display/color/ColorDisplayService;->access$3900(Lcom/android/server/display/color/ColorDisplayService;Z)Z
+PLcom/android/server/display/color/ColorDisplayService;->access$400(Landroid/content/ContentResolver;I)Z
+PLcom/android/server/display/color/ColorDisplayService;->access$4000(Lcom/android/server/display/color/ColorDisplayService;Ljava/io/PrintWriter;)V
 PLcom/android/server/display/color/ColorDisplayService;->access$700(Lcom/android/server/display/color/ColorDisplayService;)V
 PLcom/android/server/display/color/ColorDisplayService;->access$800(Lcom/android/server/display/color/ColorDisplayService;)Lcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;
 PLcom/android/server/display/color/ColorDisplayService;->access$900(Lcom/android/server/display/color/ColorDisplayService;)I
-PLcom/android/server/display/color/ColorDisplayService;->applyTint(Lcom/android/server/display/color/TintController;Z)V
+HPLcom/android/server/display/color/ColorDisplayService;->applyTint(Lcom/android/server/display/color/TintController;Z)V
 PLcom/android/server/display/color/ColorDisplayService;->dumpInternal(Ljava/io/PrintWriter;)V
 PLcom/android/server/display/color/ColorDisplayService;->getColorModeInternal()I
 PLcom/android/server/display/color/ColorDisplayService;->getCompositionColorSpace(I)I
+PLcom/android/server/display/color/ColorDisplayService;->getCurrentColorModeFromSystemProperties()I
 PLcom/android/server/display/color/ColorDisplayService;->getDateTimeAfter(Ljava/time/LocalTime;Ljava/time/LocalDateTime;)Ljava/time/LocalDateTime;
 PLcom/android/server/display/color/ColorDisplayService;->getDateTimeBefore(Ljava/time/LocalTime;Ljava/time/LocalDateTime;)Ljava/time/LocalDateTime;
-PLcom/android/server/display/color/ColorDisplayService;->getNightDisplayAutoModeInternal()I
-PLcom/android/server/display/color/ColorDisplayService;->getNightDisplayAutoModeRawInternal()I
-PLcom/android/server/display/color/ColorDisplayService;->getNightDisplayCustomEndTimeInternal()Landroid/hardware/display/Time;
-PLcom/android/server/display/color/ColorDisplayService;->getNightDisplayCustomStartTimeInternal()Landroid/hardware/display/Time;
+HPLcom/android/server/display/color/ColorDisplayService;->getNightDisplayAutoModeInternal()I
+HPLcom/android/server/display/color/ColorDisplayService;->getNightDisplayAutoModeRawInternal()I
+HPLcom/android/server/display/color/ColorDisplayService;->getNightDisplayCustomEndTimeInternal()Landroid/hardware/display/Time;
+HPLcom/android/server/display/color/ColorDisplayService;->getNightDisplayCustomStartTimeInternal()Landroid/hardware/display/Time;
 PLcom/android/server/display/color/ColorDisplayService;->getNightDisplayLastActivatedTimeSetting()Ljava/time/LocalDateTime;
 PLcom/android/server/display/color/ColorDisplayService;->isAccessibilityEnabled()Z
 PLcom/android/server/display/color/ColorDisplayService;->isAccessiblityDaltonizerEnabled()Z
 PLcom/android/server/display/color/ColorDisplayService;->isAccessiblityInversionEnabled()Z
 PLcom/android/server/display/color/ColorDisplayService;->isColorModeAvailable(I)Z
+PLcom/android/server/display/color/ColorDisplayService;->isDeviceColorManagedInternal()Z
 HSPLcom/android/server/display/color/ColorDisplayService;->isDisplayWhiteBalanceSettingEnabled()Z
-PLcom/android/server/display/color/ColorDisplayService;->isUserSetupCompleted(Landroid/content/ContentResolver;I)Z
-PLcom/android/server/display/color/ColorDisplayService;->lambda$applyTint$0(Lcom/android/server/display/color/DisplayTransformManager;Lcom/android/server/display/color/TintController;Landroid/animation/ValueAnimator;)V
+HSPLcom/android/server/display/color/ColorDisplayService;->isUserSetupCompleted(Landroid/content/ContentResolver;I)Z
+HPLcom/android/server/display/color/ColorDisplayService;->lambda$applyTint$0(Lcom/android/server/display/color/DisplayTransformManager;Lcom/android/server/display/color/TintController;Landroid/animation/ValueAnimator;)V
 PLcom/android/server/display/color/ColorDisplayService;->onAccessibilityDaltonizerChanged()V
 PLcom/android/server/display/color/ColorDisplayService;->onAccessibilityInversionChanged()V
 HSPLcom/android/server/display/color/ColorDisplayService;->onBootPhase(I)V
 PLcom/android/server/display/color/ColorDisplayService;->onDisplayColorModeChanged(I)V
 PLcom/android/server/display/color/ColorDisplayService;->onNightDisplayAutoModeChanged(I)V
 HSPLcom/android/server/display/color/ColorDisplayService;->onStart()V
-PLcom/android/server/display/color/ColorDisplayService;->onStartUser(I)V
-PLcom/android/server/display/color/ColorDisplayService;->onUserChanged(I)V
+HSPLcom/android/server/display/color/ColorDisplayService;->onStartUser(I)V
+PLcom/android/server/display/color/ColorDisplayService;->onStopUser(I)V
+HSPLcom/android/server/display/color/ColorDisplayService;->onUserChanged(I)V
+PLcom/android/server/display/color/ColorDisplayService;->setAppSaturationLevelInternal(Ljava/lang/String;I)Z
+PLcom/android/server/display/color/ColorDisplayService;->setColorModeInternal(I)V
+PLcom/android/server/display/color/ColorDisplayService;->setDisplayWhiteBalanceSettingEnabled(Z)Z
+PLcom/android/server/display/color/ColorDisplayService;->setNightDisplayAutoModeInternal(I)Z
 PLcom/android/server/display/color/ColorDisplayService;->setUp()V
 PLcom/android/server/display/color/ColorDisplayService;->setUpDisplayCompositionColorSpaces(Landroid/content/res/Resources;)V
 PLcom/android/server/display/color/ColorDisplayService;->updateDisplayWhiteBalanceStatus()V
@@ -9569,8 +15845,8 @@
 HPLcom/android/server/display/color/DisplayTransformManager;->applyColorMatrix([F)V
 PLcom/android/server/display/color/DisplayTransformManager;->applySaturation(F)V
 HPLcom/android/server/display/color/DisplayTransformManager;->computeColorMatrixLocked()[F
-PLcom/android/server/display/color/DisplayTransformManager;->getColorMatrix(I)[F
-PLcom/android/server/display/color/DisplayTransformManager;->isDeviceColorManaged()Z
+HPLcom/android/server/display/color/DisplayTransformManager;->getColorMatrix(I)[F
+HPLcom/android/server/display/color/DisplayTransformManager;->isDeviceColorManaged()Z
 PLcom/android/server/display/color/DisplayTransformManager;->needsLinearColorMatrix()Z
 PLcom/android/server/display/color/DisplayTransformManager;->needsLinearColorMatrix(I)Z
 HPLcom/android/server/display/color/DisplayTransformManager;->setColorMatrix(I[F)V
@@ -9584,16 +15860,16 @@
 HPLcom/android/server/display/color/DisplayWhiteBalanceTintController;->getLevel()I
 PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->getMatrix()[F
 PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->isAvailable(Landroid/content/Context;)Z
-PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->isColorMatrixCoeffValid(F)Z
+HPLcom/android/server/display/color/DisplayWhiteBalanceTintController;->isColorMatrixCoeffValid(F)Z
 PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->isColorMatrixValid([F)Z
 PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->makeRgbColorSpaceFromXYZ([F[F)Landroid/graphics/ColorSpace$Rgb;
 HPLcom/android/server/display/color/DisplayWhiteBalanceTintController;->setMatrix(I)V
 PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->setUp(Landroid/content/Context;Z)V
 HSPLcom/android/server/display/color/GlobalSaturationTintController;-><init>()V
-PLcom/android/server/display/color/GlobalSaturationTintController;->getLevel()I
+HPLcom/android/server/display/color/GlobalSaturationTintController;->getLevel()I
 PLcom/android/server/display/color/GlobalSaturationTintController;->getMatrix()[F
 PLcom/android/server/display/color/GlobalSaturationTintController;->isAvailable(Landroid/content/Context;)Z
-PLcom/android/server/display/color/GlobalSaturationTintController;->setMatrix(I)V
+HPLcom/android/server/display/color/GlobalSaturationTintController;->setMatrix(I)V
 HSPLcom/android/server/display/color/TintController;-><init>()V
 PLcom/android/server/display/color/TintController;->cancelAnimator()V
 HSPLcom/android/server/display/color/TintController;->isActivated()Z
@@ -9601,6 +15877,22 @@
 HPLcom/android/server/display/color/TintController;->matrixToString([FI)Ljava/lang/String;
 PLcom/android/server/display/color/TintController;->setActivated(Ljava/lang/Boolean;)V
 PLcom/android/server/display/color/TintController;->setAnimator(Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;)V
+HSPLcom/android/server/display/config/DisplayConfiguration;-><init>()V
+HSPLcom/android/server/display/config/DisplayConfiguration;->getScreenBrightnessMap()Lcom/android/server/display/config/NitsMap;
+HSPLcom/android/server/display/config/DisplayConfiguration;->read(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/display/config/DisplayConfiguration;
+HSPLcom/android/server/display/config/DisplayConfiguration;->setScreenBrightnessMap(Lcom/android/server/display/config/NitsMap;)V
+HSPLcom/android/server/display/config/NitsMap;-><init>()V
+HSPLcom/android/server/display/config/NitsMap;->getHighBrightnessStart()Ljava/math/BigDecimal;
+HSPLcom/android/server/display/config/NitsMap;->getPoint()Ljava/util/List;
+HSPLcom/android/server/display/config/NitsMap;->read(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/display/config/NitsMap;
+HSPLcom/android/server/display/config/Point;-><init>()V
+HSPLcom/android/server/display/config/Point;->getNits()Ljava/math/BigDecimal;
+HSPLcom/android/server/display/config/Point;->getValue()Ljava/math/BigDecimal;
+HSPLcom/android/server/display/config/Point;->read(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/display/config/Point;
+HSPLcom/android/server/display/config/Point;->setNits(Ljava/math/BigDecimal;)V
+HSPLcom/android/server/display/config/Point;->setValue(Ljava/math/BigDecimal;)V
+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/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;-><init>(Ljava/lang/String;IF)V
 HSPLcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;->antiderivative(F)F
 HSPLcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;->calculateIntegral(FF)F
@@ -9636,10 +15928,10 @@
 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
-PLcom/android/server/display/utils/RollingBuffer;->toString()Ljava/lang/String;
+HPLcom/android/server/display/utils/RollingBuffer;->toString()Ljava/lang/String;
 HSPLcom/android/server/display/utils/RollingBuffer;->truncate(J)V
 HSPLcom/android/server/display/whitebalance/AmbientSensor$1;-><init>(Lcom/android/server/display/whitebalance/AmbientSensor;)V
-PLcom/android/server/display/whitebalance/AmbientSensor$1;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
+HPLcom/android/server/display/whitebalance/AmbientSensor$1;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
 HPLcom/android/server/display/whitebalance/AmbientSensor$1;->onSensorChanged(Landroid/hardware/SensorEvent;)V
 HSPLcom/android/server/display/whitebalance/AmbientSensor$AmbientBrightnessSensor;-><init>(Landroid/os/Handler;Landroid/hardware/SensorManager;I)V
 PLcom/android/server/display/whitebalance/AmbientSensor$AmbientBrightnessSensor;->dump(Ljava/io/PrintWriter;)V
@@ -9650,20 +15942,20 @@
 HSPLcom/android/server/display/whitebalance/AmbientSensor$AmbientColorTemperatureSensor;->setCallbacks(Lcom/android/server/display/whitebalance/AmbientSensor$AmbientColorTemperatureSensor$Callbacks;)Z
 HPLcom/android/server/display/whitebalance/AmbientSensor$AmbientColorTemperatureSensor;->update(F)V
 HSPLcom/android/server/display/whitebalance/AmbientSensor;-><init>(Ljava/lang/String;Landroid/os/Handler;Landroid/hardware/SensorManager;I)V
-PLcom/android/server/display/whitebalance/AmbientSensor;->access$000(Lcom/android/server/display/whitebalance/AmbientSensor;F)V
+HPLcom/android/server/display/whitebalance/AmbientSensor;->access$000(Lcom/android/server/display/whitebalance/AmbientSensor;F)V
 PLcom/android/server/display/whitebalance/AmbientSensor;->disable()Z
 PLcom/android/server/display/whitebalance/AmbientSensor;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/display/whitebalance/AmbientSensor;->enable()Z
 HPLcom/android/server/display/whitebalance/AmbientSensor;->handleNewEvent(F)V
-PLcom/android/server/display/whitebalance/AmbientSensor;->setEnabled(Z)Z
-PLcom/android/server/display/whitebalance/AmbientSensor;->startListening()V
-PLcom/android/server/display/whitebalance/AmbientSensor;->stopListening()V
+HPLcom/android/server/display/whitebalance/AmbientSensor;->setEnabled(Z)Z
+HPLcom/android/server/display/whitebalance/AmbientSensor;->startListening()V
+HPLcom/android/server/display/whitebalance/AmbientSensor;->stopListening()V
 HSPLcom/android/server/display/whitebalance/AmbientSensor;->validateArguments(Landroid/os/Handler;Landroid/hardware/SensorManager;I)V
 HSPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;-><init>(Lcom/android/server/display/whitebalance/AmbientSensor$AmbientBrightnessSensor;Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/whitebalance/AmbientSensor$AmbientColorTemperatureSensor;Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/whitebalance/DisplayWhiteBalanceThrottler;[F[FF[F[FF[F[F)V
 HSPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->disable()Z
 PLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->enable()Z
-PLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->onAmbientBrightnessChanged(F)V
+HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->enable()Z
+HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->onAmbientBrightnessChanged(F)V
 HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->onAmbientColorTemperatureChanged(F)V
 HSPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->setCallbacks(Lcom/android/server/display/whitebalance/DisplayWhiteBalanceController$Callbacks;)Z
 HSPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->setEnabled(Z)Z
@@ -9699,131 +15991,189 @@
 HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceThrottler;->tooClose(F)Z
 HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceThrottler;->tooSoon(F)Z
 HSPLcom/android/server/display/whitebalance/DisplayWhiteBalanceThrottler;->validateArguments(FF[F[F[F)V
-PLcom/android/server/dreams/-$$Lambda$DreamManagerService$f7cEVKQvPKMm_Ir9dq0e6PSOkX8;-><init>(Lcom/android/server/dreams/DreamManagerService;Landroid/os/Binder;Landroid/content/ComponentName;ZZILandroid/os/PowerManager$WakeLock;)V
+HPLcom/android/server/dreams/-$$Lambda$DreamManagerService$f7cEVKQvPKMm_Ir9dq0e6PSOkX8;-><init>(Lcom/android/server/dreams/DreamManagerService;Landroid/os/Binder;Landroid/content/ComponentName;ZZILandroid/os/PowerManager$WakeLock;)V
 PLcom/android/server/dreams/-$$Lambda$DreamManagerService$f7cEVKQvPKMm_Ir9dq0e6PSOkX8;->run()V
-PLcom/android/server/dreams/-$$Lambda$gXC4nM2f5GMCBX0ED45DCQQjqv0;-><init>(Lcom/android/server/dreams/DreamController$DreamRecord;)V
-PLcom/android/server/dreams/-$$Lambda$gXC4nM2f5GMCBX0ED45DCQQjqv0;->run()V
+HPLcom/android/server/dreams/-$$Lambda$gXC4nM2f5GMCBX0ED45DCQQjqv0;-><init>(Lcom/android/server/dreams/DreamController$DreamRecord;)V
+HPLcom/android/server/dreams/-$$Lambda$gXC4nM2f5GMCBX0ED45DCQQjqv0;->run()V
 HSPLcom/android/server/dreams/DreamController$1;-><init>(Lcom/android/server/dreams/DreamController;)V
-PLcom/android/server/dreams/DreamController$1;->run()V
+HPLcom/android/server/dreams/DreamController$1;->run()V
 HSPLcom/android/server/dreams/DreamController$2;-><init>(Lcom/android/server/dreams/DreamController;)V
-PLcom/android/server/dreams/DreamController$3;-><init>(Lcom/android/server/dreams/DreamController;Lcom/android/server/dreams/DreamController$DreamRecord;)V
-PLcom/android/server/dreams/DreamController$3;->run()V
-PLcom/android/server/dreams/DreamController$DreamRecord$2;-><init>(Lcom/android/server/dreams/DreamController$DreamRecord;Landroid/os/IBinder;)V
-PLcom/android/server/dreams/DreamController$DreamRecord$2;->run()V
-PLcom/android/server/dreams/DreamController$DreamRecord$4;-><init>(Lcom/android/server/dreams/DreamController$DreamRecord;)V
-PLcom/android/server/dreams/DreamController$DreamRecord$4;->sendResult(Landroid/os/Bundle;)V
-PLcom/android/server/dreams/DreamController$DreamRecord;-><init>(Lcom/android/server/dreams/DreamController;Landroid/os/Binder;Landroid/content/ComponentName;ZZILandroid/os/PowerManager$WakeLock;)V
-PLcom/android/server/dreams/DreamController$DreamRecord;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/server/dreams/DreamController$DreamRecord;->releaseWakeLockIfNeeded()V
+PLcom/android/server/dreams/DreamController$2;->run()V
+HPLcom/android/server/dreams/DreamController$3;-><init>(Lcom/android/server/dreams/DreamController;Lcom/android/server/dreams/DreamController$DreamRecord;)V
+HPLcom/android/server/dreams/DreamController$3;->run()V
+PLcom/android/server/dreams/DreamController$DreamRecord$1;-><init>(Lcom/android/server/dreams/DreamController$DreamRecord;)V
+PLcom/android/server/dreams/DreamController$DreamRecord$1;->run()V
+HPLcom/android/server/dreams/DreamController$DreamRecord$2;-><init>(Lcom/android/server/dreams/DreamController$DreamRecord;Landroid/os/IBinder;)V
+HPLcom/android/server/dreams/DreamController$DreamRecord$2;->run()V
+PLcom/android/server/dreams/DreamController$DreamRecord$3;-><init>(Lcom/android/server/dreams/DreamController$DreamRecord;)V
+PLcom/android/server/dreams/DreamController$DreamRecord$3;->run()V
+HPLcom/android/server/dreams/DreamController$DreamRecord$4;-><init>(Lcom/android/server/dreams/DreamController$DreamRecord;)V
+HPLcom/android/server/dreams/DreamController$DreamRecord$4;->sendResult(Landroid/os/Bundle;)V
+HPLcom/android/server/dreams/DreamController$DreamRecord;-><init>(Lcom/android/server/dreams/DreamController;Landroid/os/Binder;Landroid/content/ComponentName;ZZILandroid/os/PowerManager$WakeLock;)V
+PLcom/android/server/dreams/DreamController$DreamRecord;->binderDied()V
+HPLcom/android/server/dreams/DreamController$DreamRecord;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/dreams/DreamController$DreamRecord;->onServiceDisconnected(Landroid/content/ComponentName;)V
+HPLcom/android/server/dreams/DreamController$DreamRecord;->releaseWakeLockIfNeeded()V
 HSPLcom/android/server/dreams/DreamController;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/dreams/DreamController$Listener;)V
 PLcom/android/server/dreams/DreamController;->access$000(Lcom/android/server/dreams/DreamController;)Lcom/android/server/dreams/DreamController$DreamRecord;
+PLcom/android/server/dreams/DreamController;->access$100(Lcom/android/server/dreams/DreamController;)Lcom/android/server/dreams/DreamController$Listener;
 PLcom/android/server/dreams/DreamController;->access$200(Lcom/android/server/dreams/DreamController;)Landroid/os/Handler;
 PLcom/android/server/dreams/DreamController;->access$300(Lcom/android/server/dreams/DreamController;Landroid/service/dreams/IDreamService;)V
-PLcom/android/server/dreams/DreamController;->attach(Landroid/service/dreams/IDreamService;)V
-PLcom/android/server/dreams/DreamController;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/dreams/DreamController;->startDream(Landroid/os/Binder;Landroid/content/ComponentName;ZZILandroid/os/PowerManager$WakeLock;)V
-PLcom/android/server/dreams/DreamController;->stopDream(Z)V
+HPLcom/android/server/dreams/DreamController;->attach(Landroid/service/dreams/IDreamService;)V
+HPLcom/android/server/dreams/DreamController;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/dreams/DreamController;->startDream(Landroid/os/Binder;Landroid/content/ComponentName;ZZILandroid/os/PowerManager$WakeLock;)V
+HPLcom/android/server/dreams/DreamController;->stopDream(Z)V
 HSPLcom/android/server/dreams/DreamManagerService$1;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
-PLcom/android/server/dreams/DreamManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/dreams/DreamManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/dreams/DreamManagerService$2;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
 PLcom/android/server/dreams/DreamManagerService$2;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/dreams/DreamManagerService$3;-><init>(Lcom/android/server/dreams/DreamManagerService;Z)V
-PLcom/android/server/dreams/DreamManagerService$3;->run()V
+HPLcom/android/server/dreams/DreamManagerService$3;->run()V
 HSPLcom/android/server/dreams/DreamManagerService$4;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
 PLcom/android/server/dreams/DreamManagerService$4;->onDreamStopped(Landroid/os/Binder;)V
 HSPLcom/android/server/dreams/DreamManagerService$5;-><init>(Lcom/android/server/dreams/DreamManagerService;Landroid/os/Handler;)V
+PLcom/android/server/dreams/DreamManagerService$5;->onChange(Z)V
 HSPLcom/android/server/dreams/DreamManagerService$6;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
 HPLcom/android/server/dreams/DreamManagerService$6;->run()V
 HSPLcom/android/server/dreams/DreamManagerService$BinderService;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
 HSPLcom/android/server/dreams/DreamManagerService$BinderService;-><init>(Lcom/android/server/dreams/DreamManagerService;Lcom/android/server/dreams/DreamManagerService$1;)V
-PLcom/android/server/dreams/DreamManagerService$BinderService;->awaken()V
+HPLcom/android/server/dreams/DreamManagerService$BinderService;->awaken()V
+PLcom/android/server/dreams/DreamManagerService$BinderService;->dream()V
 PLcom/android/server/dreams/DreamManagerService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/dreams/DreamManagerService$BinderService;->finishSelf(Landroid/os/IBinder;Z)V
+HPLcom/android/server/dreams/DreamManagerService$BinderService;->finishSelf(Landroid/os/IBinder;Z)V
 PLcom/android/server/dreams/DreamManagerService$BinderService;->forceAmbientDisplayEnabled(Z)V
 PLcom/android/server/dreams/DreamManagerService$BinderService;->getDefaultDreamComponent()Landroid/content/ComponentName;
-PLcom/android/server/dreams/DreamManagerService$BinderService;->getDreamComponents()[Landroid/content/ComponentName;
-PLcom/android/server/dreams/DreamManagerService$BinderService;->isDreaming()Z
-PLcom/android/server/dreams/DreamManagerService$BinderService;->startDozing(Landroid/os/IBinder;II)V
+HPLcom/android/server/dreams/DreamManagerService$BinderService;->getDreamComponents()[Landroid/content/ComponentName;
+HPLcom/android/server/dreams/DreamManagerService$BinderService;->isDreaming()Z
+PLcom/android/server/dreams/DreamManagerService$BinderService;->setDreamComponents([Landroid/content/ComponentName;)V
+HPLcom/android/server/dreams/DreamManagerService$BinderService;->startDozing(Landroid/os/IBinder;II)V
 HSPLcom/android/server/dreams/DreamManagerService$DreamHandler;-><init>(Lcom/android/server/dreams/DreamManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/dreams/DreamManagerService$LocalService;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
 HSPLcom/android/server/dreams/DreamManagerService$LocalService;-><init>(Lcom/android/server/dreams/DreamManagerService;Lcom/android/server/dreams/DreamManagerService$1;)V
 HSPLcom/android/server/dreams/DreamManagerService$LocalService;->isDreaming()Z
-PLcom/android/server/dreams/DreamManagerService$LocalService;->startDream(Z)V
-PLcom/android/server/dreams/DreamManagerService$LocalService;->stopDream(Z)V
+HPLcom/android/server/dreams/DreamManagerService$LocalService;->startDream(Z)V
+HPLcom/android/server/dreams/DreamManagerService$LocalService;->stopDream(Z)V
 HSPLcom/android/server/dreams/DreamManagerService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/dreams/DreamManagerService;->access$1000(Lcom/android/server/dreams/DreamManagerService;Ljava/lang/String;)V
+HPLcom/android/server/dreams/DreamManagerService;->access$1000(Lcom/android/server/dreams/DreamManagerService;Ljava/lang/String;)V
+PLcom/android/server/dreams/DreamManagerService;->access$1100(Lcom/android/server/dreams/DreamManagerService;I)[Landroid/content/ComponentName;
+PLcom/android/server/dreams/DreamManagerService;->access$1200(Lcom/android/server/dreams/DreamManagerService;I[Landroid/content/ComponentName;)V
+PLcom/android/server/dreams/DreamManagerService;->access$1300(Lcom/android/server/dreams/DreamManagerService;I)Landroid/content/ComponentName;
 HSPLcom/android/server/dreams/DreamManagerService;->access$1400(Lcom/android/server/dreams/DreamManagerService;)Z
+PLcom/android/server/dreams/DreamManagerService;->access$1500(Lcom/android/server/dreams/DreamManagerService;)V
+PLcom/android/server/dreams/DreamManagerService;->access$1700(Lcom/android/server/dreams/DreamManagerService;)V
+PLcom/android/server/dreams/DreamManagerService;->access$1800(Lcom/android/server/dreams/DreamManagerService;Landroid/os/IBinder;Z)V
 PLcom/android/server/dreams/DreamManagerService;->access$1900(Lcom/android/server/dreams/DreamManagerService;Landroid/os/IBinder;II)V
-PLcom/android/server/dreams/DreamManagerService;->access$200(Lcom/android/server/dreams/DreamManagerService;)V
+HSPLcom/android/server/dreams/DreamManagerService;->access$200(Lcom/android/server/dreams/DreamManagerService;)V
 PLcom/android/server/dreams/DreamManagerService;->access$2100(Lcom/android/server/dreams/DreamManagerService;Z)V
 PLcom/android/server/dreams/DreamManagerService;->access$2200(Lcom/android/server/dreams/DreamManagerService;Z)V
 PLcom/android/server/dreams/DreamManagerService;->access$2300(Lcom/android/server/dreams/DreamManagerService;Z)V
-PLcom/android/server/dreams/DreamManagerService;->access$2400(Lcom/android/server/dreams/DreamManagerService;)Landroid/content/ComponentName;
-PLcom/android/server/dreams/DreamManagerService;->access$2500(Lcom/android/server/dreams/DreamManagerService;)Z
-PLcom/android/server/dreams/DreamManagerService;->access$2600(Lcom/android/server/dreams/DreamManagerService;)Landroid/content/ComponentName;
-PLcom/android/server/dreams/DreamManagerService;->access$300(Lcom/android/server/dreams/DreamManagerService;)Ljava/lang/Object;
-PLcom/android/server/dreams/DreamManagerService;->access$400(Lcom/android/server/dreams/DreamManagerService;Z)V
-PLcom/android/server/dreams/DreamManagerService;->checkPermission(Ljava/lang/String;)V
+HPLcom/android/server/dreams/DreamManagerService;->access$2400(Lcom/android/server/dreams/DreamManagerService;)Landroid/content/ComponentName;
+HPLcom/android/server/dreams/DreamManagerService;->access$2500(Lcom/android/server/dreams/DreamManagerService;)Z
+HPLcom/android/server/dreams/DreamManagerService;->access$2600(Lcom/android/server/dreams/DreamManagerService;)Landroid/content/ComponentName;
+HSPLcom/android/server/dreams/DreamManagerService;->access$300(Lcom/android/server/dreams/DreamManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/dreams/DreamManagerService;->access$400(Lcom/android/server/dreams/DreamManagerService;Z)V
+PLcom/android/server/dreams/DreamManagerService;->access$500(Lcom/android/server/dreams/DreamManagerService;)Lcom/android/server/dreams/DreamController;
+PLcom/android/server/dreams/DreamManagerService;->access$600(Lcom/android/server/dreams/DreamManagerService;)Landroid/os/Binder;
+PLcom/android/server/dreams/DreamManagerService;->access$700(Lcom/android/server/dreams/DreamManagerService;)V
+PLcom/android/server/dreams/DreamManagerService;->access$800(Lcom/android/server/dreams/DreamManagerService;)Landroid/content/Context;
+PLcom/android/server/dreams/DreamManagerService;->access$900(Lcom/android/server/dreams/DreamManagerService;Ljava/io/PrintWriter;)V
+HPLcom/android/server/dreams/DreamManagerService;->checkPermission(Ljava/lang/String;)V
 PLcom/android/server/dreams/DreamManagerService;->chooseDreamForUser(ZI)Landroid/content/ComponentName;
-PLcom/android/server/dreams/DreamManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
+HPLcom/android/server/dreams/DreamManagerService;->cleanupDreamLocked()V
+PLcom/android/server/dreams/DreamManagerService;->componentsFromString(Ljava/lang/String;)[Landroid/content/ComponentName;
+PLcom/android/server/dreams/DreamManagerService;->componentsToString([Landroid/content/ComponentName;)Ljava/lang/String;
+HPLcom/android/server/dreams/DreamManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
 PLcom/android/server/dreams/DreamManagerService;->finishSelfInternal(Landroid/os/IBinder;Z)V
 PLcom/android/server/dreams/DreamManagerService;->forceAmbientDisplayEnabledInternal(Z)V
+PLcom/android/server/dreams/DreamManagerService;->getDefaultDreamComponentForUser(I)Landroid/content/ComponentName;
 HSPLcom/android/server/dreams/DreamManagerService;->getDozeComponent()Landroid/content/ComponentName;
 HSPLcom/android/server/dreams/DreamManagerService;->getDozeComponent(I)Landroid/content/ComponentName;
-PLcom/android/server/dreams/DreamManagerService;->getDreamComponentsForUser(I)[Landroid/content/ComponentName;
+HPLcom/android/server/dreams/DreamManagerService;->getDreamComponentsForUser(I)[Landroid/content/ComponentName;
 HSPLcom/android/server/dreams/DreamManagerService;->getServiceInfo(Landroid/content/ComponentName;)Landroid/content/pm/ServiceInfo;
 HSPLcom/android/server/dreams/DreamManagerService;->isDreamingInternal()Z
-PLcom/android/server/dreams/DreamManagerService;->lambda$startDreamLocked$0$DreamManagerService(Landroid/os/Binder;Landroid/content/ComponentName;ZZILandroid/os/PowerManager$WakeLock;)V
+HPLcom/android/server/dreams/DreamManagerService;->lambda$startDreamLocked$0$DreamManagerService(Landroid/os/Binder;Landroid/content/ComponentName;ZZILandroid/os/PowerManager$WakeLock;)V
 HSPLcom/android/server/dreams/DreamManagerService;->onBootPhase(I)V
 HSPLcom/android/server/dreams/DreamManagerService;->onStart()V
-PLcom/android/server/dreams/DreamManagerService;->startDozingInternal(Landroid/os/IBinder;II)V
-PLcom/android/server/dreams/DreamManagerService;->startDreamInternal(Z)V
-PLcom/android/server/dreams/DreamManagerService;->startDreamLocked(Landroid/content/ComponentName;ZZI)V
-PLcom/android/server/dreams/DreamManagerService;->stopDreamInternal(Z)V
-PLcom/android/server/dreams/DreamManagerService;->stopDreamLocked(Z)V
+HPLcom/android/server/dreams/DreamManagerService;->requestAwakenInternal()V
+PLcom/android/server/dreams/DreamManagerService;->requestDreamInternal()V
+PLcom/android/server/dreams/DreamManagerService;->setDreamComponentsForUser(I[Landroid/content/ComponentName;)V
+HPLcom/android/server/dreams/DreamManagerService;->startDozingInternal(Landroid/os/IBinder;II)V
+HPLcom/android/server/dreams/DreamManagerService;->startDreamInternal(Z)V
+HPLcom/android/server/dreams/DreamManagerService;->startDreamLocked(Landroid/content/ComponentName;ZZI)V
+HPLcom/android/server/dreams/DreamManagerService;->stopDreamInternal(Z)V
+HSPLcom/android/server/dreams/DreamManagerService;->stopDreamLocked(Z)V
 HSPLcom/android/server/dreams/DreamManagerService;->validateDream(Landroid/content/ComponentName;)Z
 HSPLcom/android/server/dreams/DreamManagerService;->writePulseGestureEnabled()V
 HSPLcom/android/server/emergency/EmergencyAffordanceService$1;-><init>(Lcom/android/server/emergency/EmergencyAffordanceService;)V
+PLcom/android/server/emergency/EmergencyAffordanceService$1;->onCellInfoChanged(Ljava/util/List;)V
+PLcom/android/server/emergency/EmergencyAffordanceService$1;->onCellLocationChanged(Landroid/telephony/CellLocation;)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService$2;-><init>(Lcom/android/server/emergency/EmergencyAffordanceService;)V
 PLcom/android/server/emergency/EmergencyAffordanceService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService$3;-><init>(Lcom/android/server/emergency/EmergencyAffordanceService;)V
-PLcom/android/server/emergency/EmergencyAffordanceService$3;->onSubscriptionsChanged()V
+HPLcom/android/server/emergency/EmergencyAffordanceService$3;->onSubscriptionsChanged()V
 HSPLcom/android/server/emergency/EmergencyAffordanceService$MyHandler;-><init>(Lcom/android/server/emergency/EmergencyAffordanceService;Landroid/os/Looper;)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService$MyHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/emergency/EmergencyAffordanceService;->access$000(Lcom/android/server/emergency/EmergencyAffordanceService;)Z
+PLcom/android/server/emergency/EmergencyAffordanceService;->access$100(Lcom/android/server/emergency/EmergencyAffordanceService;)V
+PLcom/android/server/emergency/EmergencyAffordanceService;->access$200(Lcom/android/server/emergency/EmergencyAffordanceService;)V
 PLcom/android/server/emergency/EmergencyAffordanceService;->access$300(Lcom/android/server/emergency/EmergencyAffordanceService;)Lcom/android/server/emergency/EmergencyAffordanceService$MyHandler;
 HSPLcom/android/server/emergency/EmergencyAffordanceService;->access$400(Lcom/android/server/emergency/EmergencyAffordanceService;)V
+PLcom/android/server/emergency/EmergencyAffordanceService;->access$500(Lcom/android/server/emergency/EmergencyAffordanceService;)Z
 PLcom/android/server/emergency/EmergencyAffordanceService;->access$600(Lcom/android/server/emergency/EmergencyAffordanceService;)Z
 HSPLcom/android/server/emergency/EmergencyAffordanceService;->handleInitializeState()V
 HSPLcom/android/server/emergency/EmergencyAffordanceService;->handleUpdateCellInfo()Z
 HSPLcom/android/server/emergency/EmergencyAffordanceService;->handleUpdateSimSubscriptionInfo()Z
+PLcom/android/server/emergency/EmergencyAffordanceService;->isEmergencyAffordanceNeeded()Z
+HPLcom/android/server/emergency/EmergencyAffordanceService;->mccRequiresEmergencyAffordance(I)Z
 HSPLcom/android/server/emergency/EmergencyAffordanceService;->onBootPhase(I)V
 PLcom/android/server/emergency/EmergencyAffordanceService;->onCellScanFinishedUnsuccessful()V
 HSPLcom/android/server/emergency/EmergencyAffordanceService;->onStart()V
+PLcom/android/server/emergency/EmergencyAffordanceService;->requestCellScan()V
 PLcom/android/server/emergency/EmergencyAffordanceService;->setNetworkNeedsEmergencyAffordance(Z)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService;->setSimNeedsEmergencyAffordance(Z)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService;->simNeededAffordanceBefore()Z
 HSPLcom/android/server/emergency/EmergencyAffordanceService;->startScanning()V
+PLcom/android/server/emergency/EmergencyAffordanceService;->stopScanning()V
 HSPLcom/android/server/emergency/EmergencyAffordanceService;->updateEmergencyAffordanceNeeded()V
 HSPLcom/android/server/firewall/AndFilter$1;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/firewall/AndFilter;-><clinit>()V
+HSPLcom/android/server/firewall/AndFilter;-><init>()V
 HSPLcom/android/server/firewall/CategoryFilter$1;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/firewall/CategoryFilter;-><clinit>()V
 HSPLcom/android/server/firewall/FilterFactory;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/firewall/FilterFactory;->getTagName()Ljava/lang/String;
+HSPLcom/android/server/firewall/FilterList;-><init>()V
+HSPLcom/android/server/firewall/FilterList;->readChild(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLcom/android/server/firewall/FilterList;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/firewall/FilterList;
 HSPLcom/android/server/firewall/IntentFirewall$FirewallHandler;-><init>(Lcom/android/server/firewall/IntentFirewall;Landroid/os/Looper;)V
+HSPLcom/android/server/firewall/IntentFirewall$FirewallIntentFilter;-><init>(Lcom/android/server/firewall/IntentFirewall$Rule;)V
+PLcom/android/server/firewall/IntentFirewall$FirewallIntentFilter;->access$200(Lcom/android/server/firewall/IntentFirewall$FirewallIntentFilter;)Lcom/android/server/firewall/IntentFirewall$Rule;
 HSPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;-><init>()V
 HSPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;-><init>(Lcom/android/server/firewall/IntentFirewall$1;)V
-PLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->queryByComponent(Landroid/content/ComponentName;Ljava/util/List;)V
+PLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->allowFilterResult(Landroid/content/IntentFilter;Ljava/util/List;)Z
+PLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->allowFilterResult(Lcom/android/server/firewall/IntentFirewall$FirewallIntentFilter;Ljava/util/List;)Z
+HSPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
+HSPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->newArray(I)[Lcom/android/server/firewall/IntentFirewall$FirewallIntentFilter;
+HSPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->queryByComponent(Landroid/content/ComponentName;Ljava/util/List;)V
 HSPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->sortResults(Ljava/util/List;)V
+HSPLcom/android/server/firewall/IntentFirewall$Rule;-><init>()V
+HSPLcom/android/server/firewall/IntentFirewall$Rule;-><init>(Lcom/android/server/firewall/IntentFirewall$1;)V
+HSPLcom/android/server/firewall/IntentFirewall$Rule;->getComponentFilterCount()I
+HSPLcom/android/server/firewall/IntentFirewall$Rule;->getIntentFilter(I)Lcom/android/server/firewall/IntentFirewall$FirewallIntentFilter;
+HSPLcom/android/server/firewall/IntentFirewall$Rule;->getIntentFilterCount()I
+HSPLcom/android/server/firewall/IntentFirewall$Rule;->readChild(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLcom/android/server/firewall/IntentFirewall$Rule;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/firewall/IntentFirewall$Rule;
 HSPLcom/android/server/firewall/IntentFirewall$RuleObserver;-><init>(Lcom/android/server/firewall/IntentFirewall;Ljava/io/File;)V
 HSPLcom/android/server/firewall/IntentFirewall;-><clinit>()V
 HSPLcom/android/server/firewall/IntentFirewall;-><init>(Lcom/android/server/firewall/IntentFirewall$AMSInterface;Landroid/os/Handler;)V
 HSPLcom/android/server/firewall/IntentFirewall;->checkBroadcast(Landroid/content/Intent;IILjava/lang/String;I)Z
 HSPLcom/android/server/firewall/IntentFirewall;->checkIntent(Lcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;Landroid/content/ComponentName;ILandroid/content/Intent;IILjava/lang/String;I)Z
 HSPLcom/android/server/firewall/IntentFirewall;->checkService(Landroid/content/ComponentName;Landroid/content/Intent;IILjava/lang/String;Landroid/content/pm/ApplicationInfo;)Z
-PLcom/android/server/firewall/IntentFirewall;->checkStartActivity(Landroid/content/Intent;IILjava/lang/String;Landroid/content/pm/ApplicationInfo;)Z
+HSPLcom/android/server/firewall/IntentFirewall;->checkStartActivity(Landroid/content/Intent;IILjava/lang/String;Landroid/content/pm/ApplicationInfo;)Z
 HSPLcom/android/server/firewall/IntentFirewall;->getRulesDir()Ljava/io/File;
+HSPLcom/android/server/firewall/IntentFirewall;->parseFilter(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/firewall/Filter;
+HSPLcom/android/server/firewall/IntentFirewall;->readRules(Ljava/io/File;[Lcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;)V
 HSPLcom/android/server/firewall/IntentFirewall;->readRulesDir(Ljava/io/File;)V
 HSPLcom/android/server/firewall/NotFilter$1;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/firewall/NotFilter;-><clinit>()V
@@ -9851,28 +16201,56 @@
 HSPLcom/android/server/firewall/StringFilter$7;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/firewall/StringFilter$8;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/firewall/StringFilter$9;-><init>(Ljava/lang/String;)V
+HSPLcom/android/server/firewall/StringFilter$EqualsFilter;-><init>(Lcom/android/server/firewall/StringFilter$ValueProvider;Ljava/lang/String;)V
 HSPLcom/android/server/firewall/StringFilter$ValueProvider;-><init>(Ljava/lang/String;)V
+HSPLcom/android/server/firewall/StringFilter$ValueProvider;->newFilter(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/firewall/Filter;
 HSPLcom/android/server/firewall/StringFilter;-><clinit>()V
+HSPLcom/android/server/firewall/StringFilter;-><init>(Lcom/android/server/firewall/StringFilter$ValueProvider;)V
+HSPLcom/android/server/firewall/StringFilter;-><init>(Lcom/android/server/firewall/StringFilter$ValueProvider;Lcom/android/server/firewall/StringFilter$1;)V
+HSPLcom/android/server/firewall/StringFilter;->getFilter(Lcom/android/server/firewall/StringFilter$ValueProvider;Lorg/xmlpull/v1/XmlPullParser;I)Lcom/android/server/firewall/StringFilter;
+HSPLcom/android/server/firewall/StringFilter;->readFromXml(Lcom/android/server/firewall/StringFilter$ValueProvider;Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/firewall/StringFilter;
+PLcom/android/server/gpu/GpuService$DeviceConfigListener;-><init>(Lcom/android/server/gpu/GpuService;)V
+PLcom/android/server/gpu/GpuService$DeviceConfigListener;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
+HSPLcom/android/server/gpu/GpuService$PackageReceiver;-><init>(Lcom/android/server/gpu/GpuService;)V
+HSPLcom/android/server/gpu/GpuService$PackageReceiver;-><init>(Lcom/android/server/gpu/GpuService;Lcom/android/server/gpu/GpuService$1;)V
+HPLcom/android/server/gpu/GpuService$PackageReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/gpu/GpuService$SettingsObserver;-><init>(Lcom/android/server/gpu/GpuService;)V
 HSPLcom/android/server/gpu/GpuService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/gpu/GpuService;->access$100(Lcom/android/server/gpu/GpuService;)Landroid/content/ContentResolver;
+PLcom/android/server/gpu/GpuService;->access$300(Lcom/android/server/gpu/GpuService;)V
+PLcom/android/server/gpu/GpuService;->access$400(Lcom/android/server/gpu/GpuService;)Landroid/content/Context;
+PLcom/android/server/gpu/GpuService;->access$500(Lcom/android/server/gpu/GpuService;)Ljava/lang/Object;
+PLcom/android/server/gpu/GpuService;->access$600(Lcom/android/server/gpu/GpuService;Ljava/lang/String;)V
+PLcom/android/server/gpu/GpuService;->access$700(Lcom/android/server/gpu/GpuService;)Ljava/lang/String;
+PLcom/android/server/gpu/GpuService;->assetToSettingsGlobal(Landroid/content/Context;Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;)V
+PLcom/android/server/gpu/GpuService;->fetchGameDriverPackageProperties()V
 HSPLcom/android/server/gpu/GpuService;->onBootPhase(I)V
 HSPLcom/android/server/gpu/GpuService;->onStart()V
+PLcom/android/server/gpu/GpuService;->parseBlacklists(Ljava/lang/String;)V
+PLcom/android/server/gpu/GpuService;->processBlacklists()V
+PLcom/android/server/gpu/GpuService;->setBlacklist()V
 PLcom/android/server/incident/-$$Lambda$PendingReports$42Ba6ZxAFxFmqtPlfnXNpuKHOXM;-><init>(Lcom/android/server/incident/PendingReports;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/os/IIncidentAuthListener;)V
 PLcom/android/server/incident/-$$Lambda$PendingReports$42Ba6ZxAFxFmqtPlfnXNpuKHOXM;->run()V
 PLcom/android/server/incident/-$$Lambda$PendingReports$B2hwzQpyMfhPG0Cw6n_Xz1SrHR0;-><init>(Lcom/android/server/incident/PendingReports;Landroid/os/IIncidentAuthListener;Landroid/content/ComponentName;I)V
+PLcom/android/server/incident/-$$Lambda$PendingReports$B2hwzQpyMfhPG0Cw6n_Xz1SrHR0;->binderDied()V
+PLcom/android/server/incident/-$$Lambda$PendingReports$h00dGfNWXgDmC4-YyxYy1CUoKw4;-><init>(Lcom/android/server/incident/PendingReports;Landroid/os/IIncidentAuthListener;)V
+PLcom/android/server/incident/-$$Lambda$PendingReports$h00dGfNWXgDmC4-YyxYy1CUoKw4;->run()V
 HSPLcom/android/server/incident/IncidentCompanionService$BinderService;-><init>(Lcom/android/server/incident/IncidentCompanionService;)V
 HSPLcom/android/server/incident/IncidentCompanionService$BinderService;-><init>(Lcom/android/server/incident/IncidentCompanionService;Lcom/android/server/incident/IncidentCompanionService$1;)V
+PLcom/android/server/incident/IncidentCompanionService$BinderService;->approveReport(Ljava/lang/String;)V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->authorizeReport(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/os/IIncidentAuthListener;)V
+PLcom/android/server/incident/IncidentCompanionService$BinderService;->cancelAuthorization(Landroid/os/IIncidentAuthListener;)V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->deleteIncidentReports(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->denyReport(Ljava/lang/String;)V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/incident/IncidentCompanionService$BinderService;->enforceAccessReportsPermissions(Ljava/lang/String;)V
+HPLcom/android/server/incident/IncidentCompanionService$BinderService;->enforceAccessReportsPermissions(Ljava/lang/String;)V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->enforceAuthorizePermission()V
-PLcom/android/server/incident/IncidentCompanionService$BinderService;->enforceCallerIsSameApp(Ljava/lang/String;)V
+HPLcom/android/server/incident/IncidentCompanionService$BinderService;->enforceCallerIsSameApp(Ljava/lang/String;)V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->enforceRequestAuthorizationPermission()V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->getIncidentReport(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/os/IncidentManager$IncidentReport;
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->getIncidentReportList(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->getPendingReports()Ljava/util/List;
-PLcom/android/server/incident/IncidentCompanionService$BinderService;->sendReportReadyBroadcast(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/incident/IncidentCompanionService$BinderService;->sendReportReadyBroadcast(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/incident/IncidentCompanionService;-><clinit>()V
 HSPLcom/android/server/incident/IncidentCompanionService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/incident/IncidentCompanionService;->access$000(Lcom/android/server/incident/IncidentCompanionService;)Lcom/android/server/incident/PendingReports;
@@ -9886,16 +16264,24 @@
 PLcom/android/server/incident/PendingReports$PendingReportRec;->getUri()Landroid/net/Uri;
 HSPLcom/android/server/incident/PendingReports;-><init>(Landroid/content/Context;)V
 PLcom/android/server/incident/PendingReports;->access$008(Lcom/android/server/incident/PendingReports;)I
+PLcom/android/server/incident/PendingReports;->approveReport(Ljava/lang/String;)V
 PLcom/android/server/incident/PendingReports;->authorizeReport(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/os/IIncidentAuthListener;)V
 PLcom/android/server/incident/PendingReports;->authorizeReportImpl(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/os/IIncidentAuthListener;)V
+PLcom/android/server/incident/PendingReports;->cancelAuthorization(Landroid/os/IIncidentAuthListener;)V
+PLcom/android/server/incident/PendingReports;->cancelReportImpl(Landroid/os/IIncidentAuthListener;)V
+PLcom/android/server/incident/PendingReports;->cancelReportImpl(Landroid/os/IIncidentAuthListener;Landroid/content/ComponentName;I)V
 PLcom/android/server/incident/PendingReports;->denyReport(Ljava/lang/String;)V
 PLcom/android/server/incident/PendingReports;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/incident/PendingReports;->findAndRemovePendingReportRecLocked(Ljava/lang/String;)Lcom/android/server/incident/PendingReports$PendingReportRec;
 PLcom/android/server/incident/PendingReports;->getAndValidateUser()I
 PLcom/android/server/incident/PendingReports;->getApproverComponent(I)Landroid/content/ComponentName;
 PLcom/android/server/incident/PendingReports;->getPendingReports()Ljava/util/List;
+PLcom/android/server/incident/PendingReports;->isPackageInUid(ILjava/lang/String;)Z
 PLcom/android/server/incident/PendingReports;->lambda$authorizeReport$0$PendingReports(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/os/IIncidentAuthListener;)V
+PLcom/android/server/incident/PendingReports;->lambda$authorizeReportImpl$2$PendingReports(Landroid/os/IIncidentAuthListener;Landroid/content/ComponentName;I)V
+PLcom/android/server/incident/PendingReports;->lambda$cancelAuthorization$1$PendingReports(Landroid/os/IIncidentAuthListener;)V
 PLcom/android/server/incident/PendingReports;->onBootCompleted()V
+PLcom/android/server/incident/PendingReports;->removePendingReportRecLocked(Landroid/os/IIncidentAuthListener;)V
 PLcom/android/server/incident/PendingReports;->sendBroadcast()V
 PLcom/android/server/incident/PendingReports;->sendBroadcast(Landroid/content/ComponentName;I)V
 HSPLcom/android/server/incident/RequestQueue$1;-><init>(Lcom/android/server/incident/RequestQueue;)V
@@ -9905,18 +16291,36 @@
 PLcom/android/server/incident/RequestQueue;->access$000(Lcom/android/server/incident/RequestQueue;)Ljava/util/ArrayList;
 PLcom/android/server/incident/RequestQueue;->enqueue(Landroid/os/IBinder;ZLjava/lang/Runnable;)V
 PLcom/android/server/incident/RequestQueue;->start()V
+HSPLcom/android/server/incremental/IncrementalManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/incremental/IncrementalManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/incremental/IncrementalManagerService;->start(Landroid/content/Context;)Lcom/android/server/incremental/IncrementalManagerService;
+PLcom/android/server/incremental/IncrementalManagerService;->systemReady()V
 HPLcom/android/server/infra/-$$Lambda$AbstractMasterSystemService$1$TLhe3_2yHs5UB69Y7lf2s7OxJCo;-><init>(Ljava/lang/String;)V
 PLcom/android/server/infra/-$$Lambda$AbstractMasterSystemService$1$TLhe3_2yHs5UB69Y7lf2s7OxJCo;->visit(Ljava/lang/Object;)V
 HSPLcom/android/server/infra/-$$Lambda$AbstractMasterSystemService$_fKw-VUP0pSfcMMlgRqoT4OPhxw;-><init>(Lcom/android/server/infra/AbstractMasterSystemService;Ljava/lang/String;)V
-PLcom/android/server/infra/-$$Lambda$AbstractMasterSystemService$_fKw-VUP0pSfcMMlgRqoT4OPhxw;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/infra/-$$Lambda$AbstractMasterSystemService$_fKw-VUP0pSfcMMlgRqoT4OPhxw;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
 HSPLcom/android/server/infra/-$$Lambda$AbstractMasterSystemService$su3lJpEVIbL-C7doP4eboTpqjxU;-><init>(Lcom/android/server/infra/AbstractMasterSystemService;)V
+PLcom/android/server/infra/-$$Lambda$AbstractMasterSystemService$su3lJpEVIbL-C7doP4eboTpqjxU;->onNameResolved(ILjava/lang/String;Z)V
 HSPLcom/android/server/infra/AbstractMasterSystemService$1;-><init>(Lcom/android/server/infra/AbstractMasterSystemService;)V
-PLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageUpdateFinished(Ljava/lang/String;I)V
-PLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageUpdateStarted(Ljava/lang/String;I)V
+HPLcom/android/server/infra/AbstractMasterSystemService$1;->getActiveServicePackageNameLocked()Ljava/lang/String;
+PLcom/android/server/infra/AbstractMasterSystemService$1;->handleActiveServiceRestartedLocked(Ljava/lang/String;I)V
+PLcom/android/server/infra/AbstractMasterSystemService$1;->handlePackageUpdateLocked(Ljava/lang/String;)V
+PLcom/android/server/infra/AbstractMasterSystemService$1;->lambda$handlePackageUpdateLocked$0(Ljava/lang/String;Lcom/android/server/infra/AbstractPerUserSystemService;)V
+HPLcom/android/server/infra/AbstractMasterSystemService$1;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+PLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageDataCleared(Ljava/lang/String;I)V
+HPLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageRemoved(Ljava/lang/String;I)V
+HPLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageUpdateFinished(Ljava/lang/String;I)V
+HPLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageUpdateStarted(Ljava/lang/String;I)V
 HSPLcom/android/server/infra/AbstractMasterSystemService$SettingsObserver;-><init>(Lcom/android/server/infra/AbstractMasterSystemService;Landroid/os/Handler;)V
+PLcom/android/server/infra/AbstractMasterSystemService$SettingsObserver;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/infra/AbstractMasterSystemService;-><init>(Landroid/content/Context;Lcom/android/server/infra/ServiceNameResolver;Ljava/lang/String;)V
 HSPLcom/android/server/infra/AbstractMasterSystemService;-><init>(Landroid/content/Context;Lcom/android/server/infra/ServiceNameResolver;Ljava/lang/String;I)V
-PLcom/android/server/infra/AbstractMasterSystemService;->assertCalledByPackageOwner(Ljava/lang/String;)V
+PLcom/android/server/infra/AbstractMasterSystemService;->access$000(Lcom/android/server/infra/AbstractMasterSystemService;)Landroid/util/SparseArray;
+PLcom/android/server/infra/AbstractMasterSystemService;->access$002(Lcom/android/server/infra/AbstractMasterSystemService;Landroid/util/SparseArray;)Landroid/util/SparseArray;
+PLcom/android/server/infra/AbstractMasterSystemService;->access$100(Lcom/android/server/infra/AbstractMasterSystemService;)Landroid/util/SparseArray;
+PLcom/android/server/infra/AbstractMasterSystemService;->access$200(Lcom/android/server/infra/AbstractMasterSystemService;)I
+HPLcom/android/server/infra/AbstractMasterSystemService;->assertCalledByPackageOwner(Ljava/lang/String;)V
 PLcom/android/server/infra/AbstractMasterSystemService;->dumpLocked(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/infra/AbstractMasterSystemService;->getServiceForUserLocked(I)Lcom/android/server/infra/AbstractPerUserSystemService;
 HSPLcom/android/server/infra/AbstractMasterSystemService;->getServiceSettingsProperty()Ljava/lang/String;
@@ -9924,26 +16328,37 @@
 HSPLcom/android/server/infra/AbstractMasterSystemService;->getUserManagerInternal()Landroid/os/UserManagerInternal;
 PLcom/android/server/infra/AbstractMasterSystemService;->isBindInstantServiceAllowed()Z
 HSPLcom/android/server/infra/AbstractMasterSystemService;->isDisabledLocked(I)Z
-PLcom/android/server/infra/AbstractMasterSystemService;->lambda$new$1$AbstractMasterSystemService(Ljava/lang/String;ILandroid/os/Bundle;Landroid/os/Bundle;)V
+PLcom/android/server/infra/AbstractMasterSystemService;->lambda$new$0$AbstractMasterSystemService(ILjava/lang/String;Z)V
+HSPLcom/android/server/infra/AbstractMasterSystemService;->lambda$new$1$AbstractMasterSystemService(Ljava/lang/String;ILandroid/os/Bundle;Landroid/os/Bundle;)V
 HSPLcom/android/server/infra/AbstractMasterSystemService;->onBootPhase(I)V
-PLcom/android/server/infra/AbstractMasterSystemService;->onServiceEnabledLocked(Lcom/android/server/infra/AbstractPerUserSystemService;I)V
+PLcom/android/server/infra/AbstractMasterSystemService;->onCleanupUser(I)V
+HSPLcom/android/server/infra/AbstractMasterSystemService;->onServiceEnabledLocked(Lcom/android/server/infra/AbstractPerUserSystemService;I)V
+PLcom/android/server/infra/AbstractMasterSystemService;->onServiceNameChanged(ILjava/lang/String;Z)V
+PLcom/android/server/infra/AbstractMasterSystemService;->onServicePackageRestartedLocked(I)V
 PLcom/android/server/infra/AbstractMasterSystemService;->onServicePackageUpdatedLocked(I)V
 PLcom/android/server/infra/AbstractMasterSystemService;->onServicePackageUpdatingLocked(I)V
-PLcom/android/server/infra/AbstractMasterSystemService;->onServiceRemoved(Lcom/android/server/infra/AbstractPerUserSystemService;I)V
+HSPLcom/android/server/infra/AbstractMasterSystemService;->onServiceRemoved(Lcom/android/server/infra/AbstractPerUserSystemService;I)V
 PLcom/android/server/infra/AbstractMasterSystemService;->onUnlockUser(I)V
 HSPLcom/android/server/infra/AbstractMasterSystemService;->peekServiceForUserLocked(I)Lcom/android/server/infra/AbstractPerUserSystemService;
 HSPLcom/android/server/infra/AbstractMasterSystemService;->registerForExtraSettingsChanges(Landroid/content/ContentResolver;Landroid/database/ContentObserver;)V
-PLcom/android/server/infra/AbstractMasterSystemService;->removeCachedServiceLocked(I)Lcom/android/server/infra/AbstractPerUserSystemService;
+HSPLcom/android/server/infra/AbstractMasterSystemService;->removeCachedServiceLocked(I)Lcom/android/server/infra/AbstractPerUserSystemService;
+PLcom/android/server/infra/AbstractMasterSystemService;->resetTemporaryService(I)V
+PLcom/android/server/infra/AbstractMasterSystemService;->setTemporaryService(ILjava/lang/String;I)V
 HSPLcom/android/server/infra/AbstractMasterSystemService;->startTrackingPackageChanges()V
 PLcom/android/server/infra/AbstractMasterSystemService;->updateCachedServiceLocked(I)V
-PLcom/android/server/infra/AbstractMasterSystemService;->updateCachedServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
-PLcom/android/server/infra/AbstractMasterSystemService;->visitServicesLocked(Lcom/android/server/infra/AbstractMasterSystemService$Visitor;)V
+HSPLcom/android/server/infra/AbstractMasterSystemService;->updateCachedServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
+HPLcom/android/server/infra/AbstractMasterSystemService;->visitServicesLocked(Lcom/android/server/infra/AbstractMasterSystemService$Visitor;)V
 HSPLcom/android/server/infra/AbstractPerUserSystemService;-><init>(Lcom/android/server/infra/AbstractMasterSystemService;Ljava/lang/Object;I)V
 PLcom/android/server/infra/AbstractPerUserSystemService;->dumpLocked(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/infra/AbstractPerUserSystemService;->getComponentNameLocked()Ljava/lang/String;
 HSPLcom/android/server/infra/AbstractPerUserSystemService;->getContext()Landroid/content/Context;
-PLcom/android/server/infra/AbstractPerUserSystemService;->getServiceComponentName()Landroid/content/ComponentName;
+PLcom/android/server/infra/AbstractPerUserSystemService;->getMaster()Lcom/android/server/infra/AbstractMasterSystemService;
+HPLcom/android/server/infra/AbstractPerUserSystemService;->getServiceComponentName()Landroid/content/ComponentName;
+PLcom/android/server/infra/AbstractPerUserSystemService;->getServiceIconLocked()Landroid/graphics/drawable/Drawable;
+PLcom/android/server/infra/AbstractPerUserSystemService;->getServiceLabelLocked()Ljava/lang/CharSequence;
+HPLcom/android/server/infra/AbstractPerUserSystemService;->getServicePackageName()Ljava/lang/String;
 PLcom/android/server/infra/AbstractPerUserSystemService;->getServiceUidLocked()I
+PLcom/android/server/infra/AbstractPerUserSystemService;->getTargedSdkLocked()I
 PLcom/android/server/infra/AbstractPerUserSystemService;->handlePackageUpdateLocked(Ljava/lang/String;)V
 PLcom/android/server/infra/AbstractPerUserSystemService;->isDebug()Z
 HSPLcom/android/server/infra/AbstractPerUserSystemService;->isDisabledByUserRestrictionsLocked()Z
@@ -9951,9 +16366,12 @@
 HSPLcom/android/server/infra/AbstractPerUserSystemService;->isSetupCompletedLocked()Z
 PLcom/android/server/infra/AbstractPerUserSystemService;->isTemporaryServiceSetLocked()Z
 PLcom/android/server/infra/AbstractPerUserSystemService;->isVerbose()Z
+PLcom/android/server/infra/AbstractPerUserSystemService;->removeSelfFromCacheLocked()V
+PLcom/android/server/infra/AbstractPerUserSystemService;->resetTemporaryServiceLocked()V
 HSPLcom/android/server/infra/AbstractPerUserSystemService;->updateIsSetupComplete(I)V
 HSPLcom/android/server/infra/AbstractPerUserSystemService;->updateLocked(Z)Z
 HSPLcom/android/server/infra/AbstractPerUserSystemService;->updateServiceInfoLocked()Landroid/content/ComponentName;
+PLcom/android/server/infra/FrameworkResourcesServiceNameResolver$1;-><init>(Lcom/android/server/infra/FrameworkResourcesServiceNameResolver;Landroid/os/Looper;Landroid/os/Handler$Callback;ZI)V
 HSPLcom/android/server/infra/FrameworkResourcesServiceNameResolver;-><clinit>()V
 HSPLcom/android/server/infra/FrameworkResourcesServiceNameResolver;-><init>(Landroid/content/Context;I)V
 PLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->dumpShort(Ljava/io/PrintWriter;)V
@@ -9961,159 +16379,214 @@
 HSPLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->getDefaultServiceName(I)Ljava/lang/String;
 HSPLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->getServiceName(I)Ljava/lang/String;
 HSPLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->isTemporary(I)Z
+PLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->notifyTemporaryServiceNameChangedLocked(ILjava/lang/String;Z)V
+PLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->resetTemporaryService(I)V
 HSPLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->setOnTemporaryServiceNameChangedCallback(Lcom/android/server/infra/ServiceNameResolver$NameResolverListener;)V
+PLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->setTemporaryService(ILjava/lang/String;I)V
 HSPLcom/android/server/infra/SecureSettingsServiceNameResolver;-><init>(Landroid/content/Context;Ljava/lang/String;)V
 PLcom/android/server/infra/SecureSettingsServiceNameResolver;->dumpShort(Ljava/io/PrintWriter;)V
 PLcom/android/server/infra/SecureSettingsServiceNameResolver;->dumpShort(Ljava/io/PrintWriter;I)V
 HSPLcom/android/server/infra/SecureSettingsServiceNameResolver;->getDefaultServiceName(I)Ljava/lang/String;
 HSPLcom/android/server/infra/ServiceNameResolver;->getServiceName(I)Ljava/lang/String;
 HSPLcom/android/server/infra/ServiceNameResolver;->setOnTemporaryServiceNameChangedCallback(Lcom/android/server/infra/ServiceNameResolver$NameResolverListener;)V
+HSPLcom/android/server/input/-$$Lambda$InputManagerService$P986LfJHWb-Wytu9J9I0HQIpodU;-><init>(Ljava/util/List;)V
+HSPLcom/android/server/input/-$$Lambda$InputManagerService$o1rqNjeoTO6WW7Ut-lKtY_eyNc8;-><init>(Ljava/util/List;)V
 HSPLcom/android/server/input/InputManagerService$10;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Handler;)V
+PLcom/android/server/input/InputManagerService$10;->onChange(Z)V
 HSPLcom/android/server/input/InputManagerService$11;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Handler;)V
 HSPLcom/android/server/input/InputManagerService$1;-><init>(Lcom/android/server/input/InputManagerService;)V
-PLcom/android/server/input/InputManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/input/InputManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/input/InputManagerService$2;-><init>(Lcom/android/server/input/InputManagerService;)V
-PLcom/android/server/input/InputManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-PLcom/android/server/input/InputManagerService$3;-><init>(Lcom/android/server/input/InputManagerService;)V
-PLcom/android/server/input/InputManagerService$5;-><init>(Lcom/android/server/input/InputManagerService;Ljava/util/HashSet;)V
-HPLcom/android/server/input/InputManagerService$5;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
+HPLcom/android/server/input/InputManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/input/InputManagerService$3;-><init>(Lcom/android/server/input/InputManagerService;)V
+PLcom/android/server/input/InputManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/input/InputManagerService$5;-><init>(Lcom/android/server/input/InputManagerService;Ljava/util/HashSet;)V
+HSPLcom/android/server/input/InputManagerService$5;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
 HSPLcom/android/server/input/InputManagerService$9;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Handler;)V
-PLcom/android/server/input/InputManagerService$InputDevicesChangedListenerRecord;-><init>(Lcom/android/server/input/InputManagerService;ILandroid/hardware/input/IInputDevicesChangedListener;)V
+HPLcom/android/server/input/InputManagerService$InputDevicesChangedListenerRecord;-><init>(Lcom/android/server/input/InputManagerService;ILandroid/hardware/input/IInputDevicesChangedListener;)V
 PLcom/android/server/input/InputManagerService$InputDevicesChangedListenerRecord;->binderDied()V
-PLcom/android/server/input/InputManagerService$InputDevicesChangedListenerRecord;->notifyInputDevicesChanged([I)V
+HPLcom/android/server/input/InputManagerService$InputDevicesChangedListenerRecord;->notifyInputDevicesChanged([I)V
+PLcom/android/server/input/InputManagerService$InputFilterHost;-><init>(Lcom/android/server/input/InputManagerService;)V
+PLcom/android/server/input/InputManagerService$InputFilterHost;-><init>(Lcom/android/server/input/InputManagerService;Lcom/android/server/input/InputManagerService$1;)V
+PLcom/android/server/input/InputManagerService$InputFilterHost;->disconnectLocked()V
+HPLcom/android/server/input/InputManagerService$InputFilterHost;->sendInputEvent(Landroid/view/InputEvent;I)V
 HSPLcom/android/server/input/InputManagerService$InputManagerHandler;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/input/InputManagerService$InputManagerHandler;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/input/InputManagerService$InputMonitorHost;-><init>(Lcom/android/server/input/InputManagerService;Landroid/view/InputChannel;)V
 PLcom/android/server/input/InputManagerService$InputMonitorHost;->dispose()V
-PLcom/android/server/input/InputManagerService$InputMonitorHost;->pilferPointers()V
-PLcom/android/server/input/InputManagerService$KeyboardLayoutDescriptor;->format(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/input/InputManagerService$InputMonitorHost;->pilferPointers()V
+HSPLcom/android/server/input/InputManagerService$KeyboardLayoutDescriptor;->format(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/input/InputManagerService$LocalService;-><init>(Lcom/android/server/input/InputManagerService;)V
 HSPLcom/android/server/input/InputManagerService$LocalService;-><init>(Lcom/android/server/input/InputManagerService;Lcom/android/server/input/InputManagerService$1;)V
 HSPLcom/android/server/input/InputManagerService$LocalService;->setDisplayViewports(Ljava/util/List;)V
 PLcom/android/server/input/InputManagerService$LocalService;->setInteractive(Z)V
 HSPLcom/android/server/input/InputManagerService$LocalService;->setPulseGestureEnabled(Z)V
 HSPLcom/android/server/input/InputManagerService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/input/InputManagerService;->access$100(Lcom/android/server/input/InputManagerService;)V
-PLcom/android/server/input/InputManagerService;->access$1100(JLandroid/os/IBinder;)V
+HSPLcom/android/server/input/InputManagerService;->access$100(Lcom/android/server/input/InputManagerService;)V
+HPLcom/android/server/input/InputManagerService;->access$1000(JLandroid/view/InputEvent;IIIII)I
+HPLcom/android/server/input/InputManagerService;->access$1100(JLandroid/os/IBinder;)V
 PLcom/android/server/input/InputManagerService;->access$1200(JLandroid/view/InputChannel;)V
+PLcom/android/server/input/InputManagerService;->access$1300(Lcom/android/server/input/InputManagerService;I)V
 HSPLcom/android/server/input/InputManagerService;->access$1500(Lcom/android/server/input/InputManagerService;Ljava/util/List;)V
-PLcom/android/server/input/InputManagerService;->access$1700(JZ)V
+HPLcom/android/server/input/InputManagerService;->access$1700(JZ)V
 HSPLcom/android/server/input/InputManagerService;->access$1900(Lcom/android/server/input/InputManagerService;)Ljava/io/File;
-PLcom/android/server/input/InputManagerService;->access$200(Lcom/android/server/input/InputManagerService;)V
+HSPLcom/android/server/input/InputManagerService;->access$200(Lcom/android/server/input/InputManagerService;)V
 HSPLcom/android/server/input/InputManagerService;->access$500(Lcom/android/server/input/InputManagerService;[Landroid/view/InputDevice;)V
-PLcom/android/server/input/InputManagerService;->access$900(Lcom/android/server/input/InputManagerService;)J
+HPLcom/android/server/input/InputManagerService;->access$900(Lcom/android/server/input/InputManagerService;)J
 HSPLcom/android/server/input/InputManagerService;->canDispatchToDisplay(II)Z
-PLcom/android/server/input/InputManagerService;->checkCallingPermission(Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/server/input/InputManagerService;->checkInjectEventsPermission(II)Z
+HPLcom/android/server/input/InputManagerService;->checkCallingPermission(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/input/InputManagerService;->checkInjectEventsPermission(II)Z
 HSPLcom/android/server/input/InputManagerService;->deliverInputDevicesChanged([Landroid/view/InputDevice;)V
+PLcom/android/server/input/InputManagerService;->dispatchUnhandledKey(Landroid/os/IBinder;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;
 PLcom/android/server/input/InputManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/input/InputManagerService;->getCurrentKeyboardLayoutForInputDevice(Landroid/hardware/input/InputDeviceIdentifier;)Ljava/lang/String;
+PLcom/android/server/input/InputManagerService;->dumpAssociations(Ljava/io/PrintWriter;)V
+HPLcom/android/server/input/InputManagerService;->filterInputEvent(Landroid/view/InputEvent;I)Z
+HSPLcom/android/server/input/InputManagerService;->flatten(Ljava/util/Map;)Ljava/util/List;
+HSPLcom/android/server/input/InputManagerService;->getContextForDisplay(I)Landroid/content/Context;
+HSPLcom/android/server/input/InputManagerService;->getCurrentKeyboardLayoutForInputDevice(Landroid/hardware/input/InputDeviceIdentifier;)Ljava/lang/String;
 HSPLcom/android/server/input/InputManagerService;->getDeviceAlias(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/input/InputManagerService;->getDoubleTapTimeout()I
 HSPLcom/android/server/input/InputManagerService;->getExcludedDeviceNames()[Ljava/lang/String;
 HSPLcom/android/server/input/InputManagerService;->getHoverTapSlop()I
 HSPLcom/android/server/input/InputManagerService;->getHoverTapTimeout()I
-PLcom/android/server/input/InputManagerService;->getInputDevice(I)Landroid/view/InputDevice;
-PLcom/android/server/input/InputManagerService;->getInputDeviceIds()[I
+HPLcom/android/server/input/InputManagerService;->getInputDevice(I)Landroid/view/InputDevice;
+HPLcom/android/server/input/InputManagerService;->getInputDeviceIds()[I
 HSPLcom/android/server/input/InputManagerService;->getInputDevices()[Landroid/view/InputDevice;
 HSPLcom/android/server/input/InputManagerService;->getInputPortAssociations()[Ljava/lang/String;
 HSPLcom/android/server/input/InputManagerService;->getKeyCodeState(III)I
 HSPLcom/android/server/input/InputManagerService;->getKeyRepeatDelay()I
 HSPLcom/android/server/input/InputManagerService;->getKeyRepeatTimeout()I
 HSPLcom/android/server/input/InputManagerService;->getKeyboardLayoutOverlay(Landroid/hardware/input/InputDeviceIdentifier;)[Ljava/lang/String;
-PLcom/android/server/input/InputManagerService;->getLayoutDescriptor(Landroid/hardware/input/InputDeviceIdentifier;)Ljava/lang/String;
-PLcom/android/server/input/InputManagerService;->getLocalesFromLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList;
+HSPLcom/android/server/input/InputManagerService;->getLayoutDescriptor(Landroid/hardware/input/InputDeviceIdentifier;)Ljava/lang/String;
+HSPLcom/android/server/input/InputManagerService;->getLocalesFromLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList;
 HSPLcom/android/server/input/InputManagerService;->getLongPressTimeout()I
 HSPLcom/android/server/input/InputManagerService;->getPointerDisplayId()I
+HSPLcom/android/server/input/InputManagerService;->getPointerIcon(I)Landroid/view/PointerIcon;
+HSPLcom/android/server/input/InputManagerService;->getPointerLayer()I
 HSPLcom/android/server/input/InputManagerService;->getPointerSpeedSetting()I
 HSPLcom/android/server/input/InputManagerService;->getScanCodeState(III)I
 HSPLcom/android/server/input/InputManagerService;->getShowTouchesSetting(I)I
 HSPLcom/android/server/input/InputManagerService;->getSwitchState(III)I
 HSPLcom/android/server/input/InputManagerService;->getTouchCalibrationForInputDevice(Ljava/lang/String;I)Landroid/hardware/input/TouchCalibration;
 HSPLcom/android/server/input/InputManagerService;->getVirtualKeyQuietTimeMillis()I
-PLcom/android/server/input/InputManagerService;->hasKeys(II[I[Z)Z
-PLcom/android/server/input/InputManagerService;->injectInputEvent(Landroid/view/InputEvent;I)Z
-PLcom/android/server/input/InputManagerService;->injectInputEventInternal(Landroid/view/InputEvent;I)Z
-PLcom/android/server/input/InputManagerService;->interceptKeyBeforeDispatching(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J
-PLcom/android/server/input/InputManagerService;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
-PLcom/android/server/input/InputManagerService;->interceptMotionBeforeQueueingNonInteractive(IJI)I
+HPLcom/android/server/input/InputManagerService;->hasKeys(II[I[Z)Z
+HPLcom/android/server/input/InputManagerService;->injectInputEvent(Landroid/view/InputEvent;I)Z
+HPLcom/android/server/input/InputManagerService;->injectInputEventInternal(Landroid/view/InputEvent;I)Z
+HPLcom/android/server/input/InputManagerService;->interceptKeyBeforeDispatching(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J
+HSPLcom/android/server/input/InputManagerService;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
+HPLcom/android/server/input/InputManagerService;->interceptMotionBeforeQueueingNonInteractive(IJI)I
 HSPLcom/android/server/input/InputManagerService;->isMicMuted()I
-PLcom/android/server/input/InputManagerService;->monitor()V
-PLcom/android/server/input/InputManagerService;->monitorGestureInput(Ljava/lang/String;I)Landroid/view/InputMonitor;
+HSPLcom/android/server/input/InputManagerService;->loadStaticInputPortAssociations()Ljava/util/Map;
+HPLcom/android/server/input/InputManagerService;->monitor()V
+HPLcom/android/server/input/InputManagerService;->monitorGestureInput(Ljava/lang/String;I)Landroid/view/InputMonitor;
 HSPLcom/android/server/input/InputManagerService;->monitorInput(Ljava/lang/String;I)Landroid/view/InputChannel;
+PLcom/android/server/input/InputManagerService;->notifyANR(Landroid/view/InputApplicationHandle;Landroid/os/IBinder;Ljava/lang/String;)J
 HSPLcom/android/server/input/InputManagerService;->notifyConfigurationChanged(J)V
-PLcom/android/server/input/InputManagerService;->notifyFocusChanged(Landroid/os/IBinder;Landroid/os/IBinder;)V
+HPLcom/android/server/input/InputManagerService;->notifyFocusChanged(Landroid/os/IBinder;Landroid/os/IBinder;)V
+PLcom/android/server/input/InputManagerService;->notifyInputChannelBroken(Landroid/os/IBinder;)V
 HSPLcom/android/server/input/InputManagerService;->notifyInputDevicesChanged([Landroid/view/InputDevice;)V
-PLcom/android/server/input/InputManagerService;->onInputDevicesChangedListenerDied(I)V
-PLcom/android/server/input/InputManagerService;->onPointerDownOutsideFocus(Landroid/os/IBinder;)V
+PLcom/android/server/input/InputManagerService;->notifySwitch(JII)V
+PLcom/android/server/input/InputManagerService;->onDisplayRemoved(I)V
+HPLcom/android/server/input/InputManagerService;->onInputDevicesChangedListenerDied(I)V
+HPLcom/android/server/input/InputManagerService;->onPointerDownOutsideFocus(Landroid/os/IBinder;)V
 HSPLcom/android/server/input/InputManagerService;->registerAccessibilityLargePointerSettingObserver()V
-PLcom/android/server/input/InputManagerService;->registerInputChannel(Landroid/view/InputChannel;)V
-PLcom/android/server/input/InputManagerService;->registerInputDevicesChangedListener(Landroid/hardware/input/IInputDevicesChangedListener;)V
+HSPLcom/android/server/input/InputManagerService;->registerInputChannel(Landroid/view/InputChannel;)V
+HPLcom/android/server/input/InputManagerService;->registerInputDevicesChangedListener(Landroid/hardware/input/IInputDevicesChangedListener;)V
 HSPLcom/android/server/input/InputManagerService;->registerPointerSpeedSettingObserver()V
 HSPLcom/android/server/input/InputManagerService;->registerShowTouchesSettingObserver()V
-PLcom/android/server/input/InputManagerService;->reloadDeviceAliases()V
-PLcom/android/server/input/InputManagerService;->reloadKeyboardLayouts()V
+HSPLcom/android/server/input/InputManagerService;->reloadDeviceAliases()V
+HSPLcom/android/server/input/InputManagerService;->reloadKeyboardLayouts()V
 HSPLcom/android/server/input/InputManagerService;->setDisplayViewportsInternal(Ljava/util/List;)V
-PLcom/android/server/input/InputManagerService;->setFocusedApplication(ILandroid/view/InputApplicationHandle;)V
+HSPLcom/android/server/input/InputManagerService;->setFocusedApplication(ILandroid/view/InputApplicationHandle;)V
 HSPLcom/android/server/input/InputManagerService;->setFocusedDisplay(I)V
 HSPLcom/android/server/input/InputManagerService;->setInTouchMode(Z)V
 PLcom/android/server/input/InputManagerService;->setInputDispatchMode(ZZ)V
+PLcom/android/server/input/InputManagerService;->setInputFilter(Landroid/view/IInputFilter;)V
 PLcom/android/server/input/InputManagerService;->setPointerIconType(I)V
 HSPLcom/android/server/input/InputManagerService;->setPointerSpeedUnchecked(I)V
-PLcom/android/server/input/InputManagerService;->setSystemUiVisibility(I)V
+HSPLcom/android/server/input/InputManagerService;->setSystemUiVisibility(I)V
 HSPLcom/android/server/input/InputManagerService;->setWindowManagerCallbacks(Lcom/android/server/input/InputManagerService$WindowManagerCallbacks;)V
 HSPLcom/android/server/input/InputManagerService;->setWiredAccessoryCallbacks(Lcom/android/server/input/InputManagerService$WiredAccessoryCallbacks;)V
 HSPLcom/android/server/input/InputManagerService;->start()V
 HSPLcom/android/server/input/InputManagerService;->systemRunning()V
-PLcom/android/server/input/InputManagerService;->unregisterInputChannel(Landroid/view/InputChannel;)V
+PLcom/android/server/input/InputManagerService;->transferTouchFocus(Landroid/view/InputChannel;Landroid/view/InputChannel;)Z
+HPLcom/android/server/input/InputManagerService;->unregisterInputChannel(Landroid/view/InputChannel;)V
 HSPLcom/android/server/input/InputManagerService;->updateAccessibilityLargePointerFromSettings()V
-PLcom/android/server/input/InputManagerService;->updateKeyboardLayouts()V
+HSPLcom/android/server/input/InputManagerService;->updateKeyboardLayouts()V
 HSPLcom/android/server/input/InputManagerService;->updatePointerSpeedFromSettings()V
 HSPLcom/android/server/input/InputManagerService;->updateShowTouchesFromSettings()V
-PLcom/android/server/input/InputManagerService;->visitAllKeyboardLayouts(Lcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;)V
-HPLcom/android/server/input/InputManagerService;->visitKeyboardLayoutsInPackage(Landroid/content/pm/PackageManager;Landroid/content/pm/ActivityInfo;Ljava/lang/String;ILcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;)V
+HSPLcom/android/server/input/InputManagerService;->visitAllKeyboardLayouts(Lcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;)V
+HSPLcom/android/server/input/InputManagerService;->visitKeyboardLayoutsInPackage(Landroid/content/pm/PackageManager;Landroid/content/pm/ActivityInfo;Ljava/lang/String;ILcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;)V
 HSPLcom/android/server/input/PersistentDataStore;-><init>()V
 HSPLcom/android/server/input/PersistentDataStore;->clearState()V
-PLcom/android/server/input/PersistentDataStore;->getCurrentKeyboardLayout(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/input/PersistentDataStore;->getCurrentKeyboardLayout(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/input/PersistentDataStore;->getInputDeviceState(Ljava/lang/String;Z)Lcom/android/server/input/PersistentDataStore$InputDeviceState;
 HSPLcom/android/server/input/PersistentDataStore;->getTouchCalibration(Ljava/lang/String;I)Landroid/hardware/input/TouchCalibration;
 HSPLcom/android/server/input/PersistentDataStore;->load()V
 HSPLcom/android/server/input/PersistentDataStore;->loadIfNeeded()V
-PLcom/android/server/input/PersistentDataStore;->removeUninstalledKeyboardLayouts(Ljava/util/Set;)Z
-PLcom/android/server/input/PersistentDataStore;->saveIfNeeded()V
+HSPLcom/android/server/input/PersistentDataStore;->removeUninstalledKeyboardLayouts(Ljava/util/Set;)Z
+HSPLcom/android/server/input/PersistentDataStore;->saveIfNeeded()V
+PLcom/android/server/inputmethod/-$$Lambda$InputMethodManagerService$MMyKF1SeotTOu5KNBltIfhafmb8;-><init>(Ljava/util/List;I)V
 HSPLcom/android/server/inputmethod/-$$Lambda$InputMethodManagerService$oxpSIwENeEjKtHbxqUXuaXD0Gn8;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;)V
+PLcom/android/server/inputmethod/-$$Lambda$InputMethodManagerService$oxpSIwENeEjKtHbxqUXuaXD0Gn8;->displayCanShowIme(I)Z
 HSPLcom/android/server/inputmethod/AdditionalSubtypeUtils;->getAdditionalSubtypeFile(Ljava/io/File;)Landroid/util/AtomicFile;
 HSPLcom/android/server/inputmethod/AdditionalSubtypeUtils;->getInputMethodDir(I)Ljava/io/File;
 HSPLcom/android/server/inputmethod/AdditionalSubtypeUtils;->load(Landroid/util/ArrayMap;I)V
 PLcom/android/server/inputmethod/AdditionalSubtypeUtils;->save(Landroid/util/ArrayMap;Landroid/util/ArrayMap;I)V
+PLcom/android/server/inputmethod/InputContentUriTokenHandler;-><init>(Landroid/net/Uri;ILjava/lang/String;II)V
+PLcom/android/server/inputmethod/InputContentUriTokenHandler;->doTakeLocked(Landroid/os/IBinder;)V
+PLcom/android/server/inputmethod/InputContentUriTokenHandler;->finalize()V
+PLcom/android/server/inputmethod/InputContentUriTokenHandler;->release()V
+PLcom/android/server/inputmethod/InputContentUriTokenHandler;->take()V
 HSPLcom/android/server/inputmethod/InputMethodManagerInternal$1;-><init>()V
 HSPLcom/android/server/inputmethod/InputMethodManagerInternal;-><clinit>()V
 HSPLcom/android/server/inputmethod/InputMethodManagerInternal;-><init>()V
+PLcom/android/server/inputmethod/InputMethodManagerInternal;->get()Lcom/android/server/inputmethod/InputMethodManagerInternal;
 HSPLcom/android/server/inputmethod/InputMethodManagerService$1;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$1;->onBindingDied(Landroid/content/ComponentName;)V
 PLcom/android/server/inputmethod/InputMethodManagerService$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$1;->onServiceDisconnected(Landroid/content/ComponentName;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$2;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;)V
-PLcom/android/server/inputmethod/InputMethodManagerService$ClientDeathRecipient;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/internal/view/IInputMethodClient;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$2;->executeMessage(Landroid/os/Message;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$3;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$3;->onCancel(Landroid/content/DialogInterface;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$4;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$5;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService$ImeSubtypeListAdapter;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$5;->onClick(Landroid/content/DialogInterface;I)V
+PLcom/android/server/inputmethod/InputMethodManagerService$ActivityViewInfo;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;Landroid/graphics/Matrix;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$ActivityViewInfo;->access$1300(Lcom/android/server/inputmethod/InputMethodManagerService$ActivityViewInfo;)Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;
+PLcom/android/server/inputmethod/InputMethodManagerService$ActivityViewInfo;->access$1400(Lcom/android/server/inputmethod/InputMethodManagerService$ActivityViewInfo;)Landroid/graphics/Matrix;
+HSPLcom/android/server/inputmethod/InputMethodManagerService$ClientDeathRecipient;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/internal/view/IInputMethodClient;)V
 PLcom/android/server/inputmethod/InputMethodManagerService$ClientDeathRecipient;->binderDied()V
-PLcom/android/server/inputmethod/InputMethodManagerService$ClientState;-><init>(Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;IIILcom/android/server/inputmethod/InputMethodManagerService$ClientDeathRecipient;)V
-PLcom/android/server/inputmethod/InputMethodManagerService$ClientState;->toString()Ljava/lang/String;
+HSPLcom/android/server/inputmethod/InputMethodManagerService$ClientState;-><init>(Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;IIILcom/android/server/inputmethod/InputMethodManagerService$ClientDeathRecipient;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$ClientState;->toString()Ljava/lang/String;
 PLcom/android/server/inputmethod/InputMethodManagerService$DebugFlag;-><clinit>()V
 PLcom/android/server/inputmethod/InputMethodManagerService$DebugFlag;-><init>(Ljava/lang/String;Z)V
-PLcom/android/server/inputmethod/InputMethodManagerService$DebugFlag;->value()Z
+HPLcom/android/server/inputmethod/InputMethodManagerService$DebugFlag;->value()Z
 PLcom/android/server/inputmethod/InputMethodManagerService$DebugFlags;-><clinit>()V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$HardKeyboardListener;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$HardKeyboardListener;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService$1;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$ImeSubtypeListAdapter;-><init>(Landroid/content/Context;ILjava/util/List;I)V
+PLcom/android/server/inputmethod/InputMethodManagerService$ImeSubtypeListAdapter;->getView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;
 HSPLcom/android/server/inputmethod/InputMethodManagerService$ImmsBroadcastReceiverForAllUsers;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$ImmsBroadcastReceiverForAllUsers;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService$1;)V
-PLcom/android/server/inputmethod/InputMethodManagerService$ImmsBroadcastReceiverForAllUsers;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$ImmsBroadcastReceiverForAllUsers;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$ImmsBroadcastReceiverForSystemUser;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$ImmsBroadcastReceiverForSystemUser;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService$1;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$ImmsBroadcastReceiverForSystemUser;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->createInputContentUriToken(Landroid/net/Uri;Ljava/lang/String;)Lcom/android/internal/inputmethod/IInputContentUriToken;
 PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->hideMySoftInput(I)V
 PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->notifyUserAction()V
-PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->reportFullscreenMode(Z)V
-PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->reportStartInput(Landroid/os/IBinder;)V
-PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->setImeWindowStatus(II)V
-PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->updateStatusIcon(Ljava/lang/String;I)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->reportFullscreenMode(Z)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->reportStartInput(Landroid/os/IBinder;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->setImeWindowStatus(II)V
+PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->setInputMethodAndSubtype(Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->shouldOfferSwitchingToNextInputMethod()Z
+PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->showMySoftInput(I)V
+PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->switchToNextInputMethod(Z)Z
+PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->switchToPreviousInputMethod()Z
+HPLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->updateStatusIcon(Ljava/lang/String;I)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$Lifecycle;->onBootPhase(I)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$Lifecycle;->onStart()V
@@ -10121,112 +16594,182 @@
 HSPLcom/android/server/inputmethod/InputMethodManagerService$LocalServiceImpl;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;)V
 PLcom/android/server/inputmethod/InputMethodManagerService$LocalServiceImpl;->getEnabledInputMethodListAsUser(I)Ljava/util/List;
 PLcom/android/server/inputmethod/InputMethodManagerService$LocalServiceImpl;->getInputMethodListAsUser(I)Ljava/util/List;
-PLcom/android/server/inputmethod/InputMethodManagerService$LocalServiceImpl;->hideCurrentInputMethod()V
-PLcom/android/server/inputmethod/InputMethodManagerService$LocalServiceImpl;->setInteractive(Z)V
-PLcom/android/server/inputmethod/InputMethodManagerService$MethodCallback;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/internal/view/IInputMethod;Landroid/view/InputChannel;)V
-PLcom/android/server/inputmethod/InputMethodManagerService$MethodCallback;->sessionCreated(Lcom/android/internal/view/IInputMethodSession;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$LocalServiceImpl;->hideCurrentInputMethod()V
+HPLcom/android/server/inputmethod/InputMethodManagerService$LocalServiceImpl;->setInteractive(Z)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$MethodCallback;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/internal/view/IInputMethod;Landroid/view/InputChannel;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$MethodCallback;->sessionCreated(Lcom/android/internal/view/IInputMethodSession;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->addKnownImePackageNameLocked(Ljava/lang/String;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->clearKnownImePackageNamesLocked()V
-PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onBeginPackageChanges()V
-PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onFinishPackageChanges()V
-PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onFinishPackageChangesInternal()V
-PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackageAppeared(Ljava/lang/String;I)V
-PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackageDisappeared(Ljava/lang/String;I)V
-PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->clearPackageChangeState()V
+PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->isChangingPackagesOfCurrentUserLocked()Z
+HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onBeginPackageChanges()V
+HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onFinishPackageChanges()V
+HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onFinishPackageChangesInternal()V
+PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackageAppeared(Ljava/lang/String;I)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackageDisappeared(Ljava/lang/String;I)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackageModified(Ljava/lang/String;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackagesSuspended([Ljava/lang/String;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackagesUnsuspended([Ljava/lang/String;)V
-PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->shouldRebuildInputMethodListLocked()Z
-PLcom/android/server/inputmethod/InputMethodManagerService$SessionState;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;Lcom/android/internal/view/IInputMethod;Lcom/android/internal/view/IInputMethodSession;Landroid/view/InputChannel;)V
-PLcom/android/server/inputmethod/InputMethodManagerService$SessionState;->toString()Ljava/lang/String;
+HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->shouldRebuildInputMethodListLocked()Z
+HPLcom/android/server/inputmethod/InputMethodManagerService$SessionState;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;Lcom/android/internal/view/IInputMethod;Lcom/android/internal/view/IInputMethodSession;Landroid/view/InputChannel;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$SessionState;->toString()Ljava/lang/String;
 HSPLcom/android/server/inputmethod/InputMethodManagerService$SettingsObserver;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/Handler;)V
+PLcom/android/server/inputmethod/InputMethodManagerService$SettingsObserver;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$SettingsObserver;->registerContentObserverLocked(I)V
 PLcom/android/server/inputmethod/InputMethodManagerService$SettingsObserver;->toString()Ljava/lang/String;
 PLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory$Entry;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;)V
-PLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory$Entry;->set(Lcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory$Entry;->set(Lcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory;-><init>()V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService$1;)V
 PLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory;->addEntry(Lcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;)V
-PLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory;->getEntrySize()I
 PLcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;-><clinit>()V
-PLcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;-><init>(ILandroid/os/IBinder;ILjava/lang/String;IZIILandroid/os/IBinder;Landroid/view/inputmethod/EditorInfo;II)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;-><init>(ILandroid/os/IBinder;ILjava/lang/String;IZIILandroid/os/IBinder;Landroid/view/inputmethod/EditorInfo;II)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$1500(Lcom/android/server/inputmethod/InputMethodManagerService;)[Landroid/view/inputmethod/InputMethodInfo;
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$1600(Lcom/android/server/inputmethod/InputMethodManagerService;)[I
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$1700(Lcom/android/server/inputmethod/InputMethodManagerService;I)Ljava/util/List;
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$1800(Lcom/android/server/inputmethod/InputMethodManagerService;I)Ljava/util/List;
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$2500(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;II)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->access$2500(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Landroid/os/IBinder;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$2600(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;II)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$2600(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Landroid/os/IBinder;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$2700(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;II)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$2700(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Landroid/net/Uri;Ljava/lang/String;)Lcom/android/internal/inputmethod/IInputContentUriToken;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->access$2700(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Landroid/os/IBinder;)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->access$2700(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Z)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->addClient(Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;I)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->attachNewInputLocked(IZ)Lcom/android/internal/view/InputBindResult;
-PLcom/android/server/inputmethod/InputMethodManagerService;->bindCurrentInputMethodServiceLocked(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$2800(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Landroid/net/Uri;Ljava/lang/String;)Lcom/android/internal/inputmethod/IInputContentUriToken;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->access$2800(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Landroid/os/IBinder;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$2800(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Z)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$2900(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Landroid/net/Uri;Ljava/lang/String;)Lcom/android/internal/inputmethod/IInputContentUriToken;
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$2900(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Z)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3000(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Z)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3100(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3200(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;I)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3300(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;I)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3300(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Ljava/lang/String;I)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3400(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;I)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->access$3400(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Ljava/lang/String;I)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3500(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;)Z
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3500(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Ljava/lang/String;I)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3600(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;)Z
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3600(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Z)Z
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3700(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3700(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;)Z
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3800(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3800(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;)Z
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$3900(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->access$400(Lcom/android/server/inputmethod/InputMethodManagerService;)Landroid/util/ArrayMap;
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->addClient(Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;I)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->attachNewInputLocked(IZ)Lcom/android/internal/view/InputBindResult;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->bindCurrentInputMethodServiceLocked(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->buildInputMethodListLocked(Z)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->calledFromValidUserLocked()Z
-PLcom/android/server/inputmethod/InputMethodManagerService;->calledWithValidTokenLocked(Landroid/os/IBinder;)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->calledFromValidUserLocked()Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->calledWithValidTokenLocked(Landroid/os/IBinder;)Z
+PLcom/android/server/inputmethod/InputMethodManagerService;->canShowInputMethodPickerLocked(Lcom/android/internal/view/IInputMethodClient;)Z
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->chooseNewDefaultIMELocked()Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->clearClientSessionLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->clearCurMethodLocked()V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->clearCurMethodLocked()V
 PLcom/android/server/inputmethod/InputMethodManagerService;->computeImeDisplayIdForTarget(ILcom/android/server/inputmethod/InputMethodManagerService$ImeDisplayValidator;)I
-PLcom/android/server/inputmethod/InputMethodManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->executeOrSendMessage(Landroid/os/IInterface;Landroid/os/Message;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->finishSessionLocked(Lcom/android/server/inputmethod/InputMethodManagerService$SessionState;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->getActivityViewToScreenMatrixLocked(II)Landroid/graphics/Matrix;
-PLcom/android/server/inputmethod/InputMethodManagerService;->getCurrentInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;
+PLcom/android/server/inputmethod/InputMethodManagerService;->createInputContentUriToken(Landroid/os/IBinder;Landroid/net/Uri;Ljava/lang/String;)Lcom/android/internal/inputmethod/IInputContentUriToken;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->executeOrSendMessage(Landroid/os/IInterface;Landroid/os/Message;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->finishSessionLocked(Lcom/android/server/inputmethod/InputMethodManagerService$SessionState;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getActivityViewToScreenMatrixLocked(II)Landroid/graphics/Matrix;
+PLcom/android/server/inputmethod/InputMethodManagerService;->getAppShowFlags()I
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getCurrentInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;
 HPLcom/android/server/inputmethod/InputMethodManagerService;->getCurrentInputMethodSubtypeLocked()Landroid/view/inputmethod/InputMethodSubtype;
-PLcom/android/server/inputmethod/InputMethodManagerService;->getEnabledInputMethodList(I)Ljava/util/List;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getEnabledInputMethodList(I)Ljava/util/List;
 PLcom/android/server/inputmethod/InputMethodManagerService;->getEnabledInputMethodListAsUser(I)Ljava/util/List;
-PLcom/android/server/inputmethod/InputMethodManagerService;->getEnabledInputMethodListLocked(I)Ljava/util/List;
-PLcom/android/server/inputmethod/InputMethodManagerService;->getEnabledInputMethodSubtypeList(Ljava/lang/String;Z)Ljava/util/List;
-PLcom/android/server/inputmethod/InputMethodManagerService;->getEnabledInputMethodSubtypeListLocked(Ljava/lang/String;ZI)Ljava/util/List;
-PLcom/android/server/inputmethod/InputMethodManagerService;->getInputMethodList(I)Ljava/util/List;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getEnabledInputMethodListLocked(I)Ljava/util/List;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getEnabledInputMethodSubtypeList(Ljava/lang/String;Z)Ljava/util/List;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getEnabledInputMethodSubtypeListLocked(Ljava/lang/String;ZI)Ljava/util/List;
+PLcom/android/server/inputmethod/InputMethodManagerService;->getImeShowFlags()I
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getInputMethodList(I)Ljava/util/List;
 PLcom/android/server/inputmethod/InputMethodManagerService;->getInputMethodListAsUser(I)Ljava/util/List;
 PLcom/android/server/inputmethod/InputMethodManagerService;->getInputMethodListLocked(I)Ljava/util/List;
-PLcom/android/server/inputmethod/InputMethodManagerService;->handleMessage(Landroid/os/Message;)Z
-PLcom/android/server/inputmethod/InputMethodManagerService;->handleSetInteractive(Z)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->hideCurrentInputLocked(ILandroid/os/ResultReceiver;)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->handleMessage(Landroid/os/Message;)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->handleSetInteractive(Z)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->hideCurrentInputLocked(ILandroid/os/ResultReceiver;)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->hideInputMethodMenu()V
-PLcom/android/server/inputmethod/InputMethodManagerService;->hideInputMethodMenuLocked()V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->hideInputMethodMenuLocked()V
 PLcom/android/server/inputmethod/InputMethodManagerService;->hideMySoftInput(Landroid/os/IBinder;I)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->hideSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
-PLcom/android/server/inputmethod/InputMethodManagerService;->isKeyguardLocked()Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->hideSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->isKeyguardLocked()Z
+PLcom/android/server/inputmethod/InputMethodManagerService;->isScreenLocked()Z
+PLcom/android/server/inputmethod/InputMethodManagerService;->lambda$new$0$InputMethodManagerService(I)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->notifyUserAction(Landroid/os/IBinder;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->onActionLocaleChanged()V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->onServiceDisconnected(Landroid/content/ComponentName;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->onSessionCreated(Lcom/android/internal/view/IInputMethod;Lcom/android/internal/view/IInputMethodSession;Landroid/view/InputChannel;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->onSessionCreated(Lcom/android/internal/view/IInputMethod;Lcom/android/internal/view/IInputMethodSession;Landroid/view/InputChannel;)V
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->onUnlockUser(I)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->queryInputMethodServicesInternal(Landroid/content/Context;ILandroid/util/ArrayMap;Landroid/util/ArrayMap;Ljava/util/ArrayList;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->removeClient(Lcom/android/internal/view/IInputMethodClient;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->reportFullscreenMode(Landroid/os/IBinder;Z)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->reportStartInput(Landroid/os/IBinder;Landroid/os/IBinder;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->requestClientSessionLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->setEnabledSessionInMainThread(Lcom/android/server/inputmethod/InputMethodManagerService$SessionState;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->setImeWindowStatus(Landroid/os/IBinder;II)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->removeClient(Lcom/android/internal/view/IInputMethodClient;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->reportActivityView(Lcom/android/internal/view/IInputMethodClient;I[F)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->reportFullscreenMode(Landroid/os/IBinder;Z)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->reportStartInput(Landroid/os/IBinder;Landroid/os/IBinder;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->requestClientSessionLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->resetCurrentMethodAndClient(I)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->resetDefaultImeLocked(Landroid/content/Context;)V
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->resetSelectedInputMethodAndSubtypeLocked(Ljava/lang/String;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->setAdditionalInputMethodSubtypes(Ljava/lang/String;[Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->setEnabledSessionInMainThread(Lcom/android/server/inputmethod/InputMethodManagerService$SessionState;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->setImeWindowStatus(Landroid/os/IBinder;II)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->setInputMethodAndSubtype(Landroid/os/IBinder;Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->setInputMethodEnabledLocked(Ljava/lang/String;Z)Z
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->setInputMethodLocked(Ljava/lang/String;I)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->setInputMethodWithSubtypeIdLocked(Landroid/os/IBinder;Ljava/lang/String;I)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->setSelectedInputMethodAndSubtypeLocked(Landroid/view/inputmethod/InputMethodInfo;IZ)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->shouldShowImeSwitcherLocked(I)Z
-PLcom/android/server/inputmethod/InputMethodManagerService;->showCurrentInputLocked(ILandroid/os/ResultReceiver;)Z
-PLcom/android/server/inputmethod/InputMethodManagerService;->showSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
-PLcom/android/server/inputmethod/InputMethodManagerService;->startInputOrWindowGainedFocus(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;II)Lcom/android/internal/view/InputBindResult;
-PLcom/android/server/inputmethod/InputMethodManagerService;->startInputOrWindowGainedFocusInternalLocked(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;III)Lcom/android/internal/view/InputBindResult;
-PLcom/android/server/inputmethod/InputMethodManagerService;->startInputUncheckedLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;Lcom/android/internal/view/IInputContext;ILandroid/view/inputmethod/EditorInfo;II)Lcom/android/internal/view/InputBindResult;
-PLcom/android/server/inputmethod/InputMethodManagerService;->switchUserLocked(I)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->shouldOfferSwitchingToNextInputMethod(Landroid/os/IBinder;)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->shouldShowImeSwitcherLocked(I)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->showCurrentInputLocked(ILandroid/os/ResultReceiver;)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->showCurrentInputLocked(Landroid/os/IBinder;ILandroid/os/ResultReceiver;)Z
+PLcom/android/server/inputmethod/InputMethodManagerService;->showInputMethodMenu(ZI)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->showInputMethodPickerFromClient(Lcom/android/internal/view/IInputMethodClient;I)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->showInputMethodPickerFromSystem(Lcom/android/internal/view/IInputMethodClient;II)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->showMySoftInput(Landroid/os/IBinder;I)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->showSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->showSoftInput(Lcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;ILandroid/os/ResultReceiver;)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputOrWindowGainedFocus(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;II)Lcom/android/internal/view/InputBindResult;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputOrWindowGainedFocusInternalLocked(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;III)Lcom/android/internal/view/InputBindResult;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputUncheckedLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;Lcom/android/internal/view/IInputContext;ILandroid/view/inputmethod/EditorInfo;II)Lcom/android/internal/view/InputBindResult;
+PLcom/android/server/inputmethod/InputMethodManagerService;->switchToNextInputMethod(Landroid/os/IBinder;Z)Z
+PLcom/android/server/inputmethod/InputMethodManagerService;->switchToPreviousInputMethod(Landroid/os/IBinder;)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->switchUserLocked(I)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->systemRunning(Lcom/android/server/statusbar/StatusBarManagerService;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->unbindCurrentClientLocked(I)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->unbindCurrentMethodLocked()V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->unbindCurrentMethodLocked()V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->updateCurrentProfileIds()V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->updateFromSettingsLocked(Z)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->updateInputMethodsFromSettingsLocked(Z)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->updateKeyboardFromSettingsLocked()V
-PLcom/android/server/inputmethod/InputMethodManagerService;->updateStatusIcon(Landroid/os/IBinder;Ljava/lang/String;I)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->updateStatusIcon(Landroid/os/IBinder;Ljava/lang/String;I)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->updateSystemUiLocked(II)V
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;-><init>(Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$StaticRotationList;)V
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;->createFrom(Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;Ljava/util/List;)Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;->dump(Landroid/util/Printer;)V
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;->filterImeSubtypeList(Ljava/util/List;Z)Ljava/util/List;
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;->getNextInputMethod(ZLandroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;->onUserActionLocked(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)V
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;-><clinit>()V
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;-><init>(Ljava/util/List;)V
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;-><init>(Ljava/util/List;Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$1;)V
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;->access$100(Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;)Ljava/util/List;
 PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;->dump(Landroid/util/Printer;Ljava/lang/String;)V
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;->getNextInputMethodLocked(ZLandroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;
 PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;->getUsageRank(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)I
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;->onUserAction(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)V
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;-><init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/view/inputmethod/InputMethodInfo;ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;->compareNullableCharSequences(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;->compareTo(Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;)I
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;->compareTo(Ljava/lang/Object;)I
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;->parseLanguageFromLocaleString(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;->toString()Ljava/lang/String;
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList;-><init>(Landroid/content/Context;Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;)V
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList;->getSortedInputMethodAndSubtypeList(ZZ)Ljava/util/List;
@@ -10235,14 +16778,29 @@
 PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$StaticRotationList;->dump(Landroid/util/Printer;Ljava/lang/String;)V
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;-><clinit>()V
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;-><init>(Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;Landroid/content/Context;)V
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;->access$000(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)I
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;->calculateSubtypeId(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)I
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;->createInstanceLocked(Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;Landroid/content/Context;)Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;->dump(Landroid/util/Printer;)V
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;->getNextInputMethodLocked(ZLandroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;->getSortedInputMethodAndSubtypeListLocked(ZZ)Ljava/util/List;
+PLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;->onUserActionLocked(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)V
 HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;->resetCircularListLocked(Landroid/content/Context;)V
 HSPLcom/android/server/inputmethod/InputMethodSystemProperty;-><clinit>()V
 HSPLcom/android/server/inputmethod/InputMethodSystemProperty;->getMultiClientImeComponentName()Landroid/content/ComponentName;
 HSPLcom/android/server/inputmethod/InputMethodUtils$1;-><init>()V
+PLcom/android/server/inputmethod/InputMethodUtils$1;->get(Landroid/view/inputmethod/InputMethodSubtype;)Ljava/util/Locale;
+PLcom/android/server/inputmethod/InputMethodUtils$1;->get(Ljava/lang/Object;)Ljava/util/Locale;
+PLcom/android/server/inputmethod/InputMethodUtils$InputMethodListBuilder;-><init>()V
+PLcom/android/server/inputmethod/InputMethodUtils$InputMethodListBuilder;-><init>(Lcom/android/server/inputmethod/InputMethodUtils$1;)V
+PLcom/android/server/inputmethod/InputMethodUtils$InputMethodListBuilder;->build()Ljava/util/ArrayList;
+PLcom/android/server/inputmethod/InputMethodUtils$InputMethodListBuilder;->fillAuxiliaryImes(Ljava/util/ArrayList;Landroid/content/Context;)Lcom/android/server/inputmethod/InputMethodUtils$InputMethodListBuilder;
+PLcom/android/server/inputmethod/InputMethodUtils$InputMethodListBuilder;->fillImes(Ljava/util/ArrayList;Landroid/content/Context;ZLjava/util/Locale;ZLjava/lang/String;)Lcom/android/server/inputmethod/InputMethodUtils$InputMethodListBuilder;
+PLcom/android/server/inputmethod/InputMethodUtils$InputMethodListBuilder;->isEmpty()Z
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;-><clinit>()V
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;-><init>(Landroid/content/res/Resources;Landroid/content/ContentResolver;Landroid/util/ArrayMap;IZ)V
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->addSubtypeToHistory(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->appendAndPutEnabledInputMethodLocked(Ljava/lang/String;Z)V
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->buildInputMethodsAndSubtypeList(Ljava/lang/String;Landroid/text/TextUtils$SimpleStringSplitter;Landroid/text/TextUtils$SimpleStringSplitter;)Ljava/util/List;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->createEnabledInputMethodListLocked(Ljava/util/List;)Ljava/util/ArrayList;
 PLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->dumpLocked(Landroid/util/Printer;Ljava/lang/String;)V
@@ -10253,16 +16811,21 @@
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodSubtypeListLocked(Landroid/view/inputmethod/InputMethodInfo;)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;->getEnabledSubtypeHashCodeForInputMethodAndSubtypeLocked(Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getInt(Ljava/lang/String;I)I
+PLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getLastInputMethodAndSubtypeLocked()Landroid/util/Pair;
+HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getLastSubtypeForInputMethodLocked(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getLastSubtypeForInputMethodLockedInternal(Ljava/lang/String;)Landroid/util/Pair;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getSelectedInputMethod()Ljava/lang/String;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getSelectedInputMethodSubtypeHashCode()I
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getSelectedInputMethodSubtypeId(Ljava/lang/String;)I
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getSubtypeHistoryStr()Ljava/lang/String;
-PLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->isCurrentProfile(I)Z
+HPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->isCurrentProfile(I)Z
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->isShowImeWithHardKeyboardEnabled()Z
 PLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->isSubtypeSelected()Z
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->loadInputMethodAndSubtypeHistoryLocked()Ljava/util/List;
+PLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->putEnabledInputMethodsStr(Ljava/lang/String;)V
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->putInt(Ljava/lang/String;I)V
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->putSelectedInputMethod(Ljava/lang/String;)V
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->putSelectedSubtype(I)V
@@ -10273,52 +16836,199 @@
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->setCurrentProfileIds([I)V
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->switchCurrentUser(IZ)V
 HSPLcom/android/server/inputmethod/InputMethodUtils;-><clinit>()V
+PLcom/android/server/inputmethod/InputMethodUtils;->access$000(Landroid/view/inputmethod/InputMethodInfo;Landroid/content/Context;ZLjava/util/Locale;ZLjava/lang/String;)Z
+PLcom/android/server/inputmethod/InputMethodUtils;->access$100(Landroid/view/inputmethod/InputMethodInfo;Landroid/content/Context;Z)Z
 HSPLcom/android/server/inputmethod/InputMethodUtils;->access$300()Ljava/lang/String;
 HSPLcom/android/server/inputmethod/InputMethodUtils;->canAddToLastInputMethod(Landroid/view/inputmethod/InputMethodSubtype;)Z
-PLcom/android/server/inputmethod/InputMethodUtils;->checkIfPackageBelongsToUid(Landroid/app/AppOpsManager;ILjava/lang/String;)Z
+HPLcom/android/server/inputmethod/InputMethodUtils;->checkIfPackageBelongsToUid(Landroid/app/AppOpsManager;ILjava/lang/String;)Z
+HSPLcom/android/server/inputmethod/InputMethodUtils;->containsSubtypeOf(Landroid/view/inputmethod/InputMethodInfo;Ljava/util/Locale;ZLjava/lang/String;)Z
+HPLcom/android/server/inputmethod/InputMethodUtils;->findLastResortApplicableSubtypeLocked(Landroid/content/res/Resources;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Z)Landroid/view/inputmethod/InputMethodSubtype;
+PLcom/android/server/inputmethod/InputMethodUtils;->getDefaultEnabledImes(Landroid/content/Context;Ljava/util/ArrayList;)Ljava/util/ArrayList;
+PLcom/android/server/inputmethod/InputMethodUtils;->getDefaultEnabledImes(Landroid/content/Context;Ljava/util/ArrayList;Z)Ljava/util/ArrayList;
+PLcom/android/server/inputmethod/InputMethodUtils;->getFallbackLocaleForDefaultIme(Ljava/util/ArrayList;Landroid/content/Context;)Ljava/util/Locale;
+HPLcom/android/server/inputmethod/InputMethodUtils;->getImeAndSubtypeDisplayName(Landroid/content/Context;Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)Ljava/lang/CharSequence;
 HSPLcom/android/server/inputmethod/InputMethodUtils;->getImplicitlyApplicableSubtypesLocked(Landroid/content/res/Resources;Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/ArrayList;
 HSPLcom/android/server/inputmethod/InputMethodUtils;->getImplicitlyApplicableSubtypesLockedImpl(Landroid/content/res/Resources;Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/ArrayList;
+HSPLcom/android/server/inputmethod/InputMethodUtils;->getLanguageFromLocaleString(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/inputmethod/InputMethodUtils;->getMinimumKeyboardSetWithSystemLocale(Ljava/util/ArrayList;Landroid/content/Context;Ljava/util/Locale;Ljava/util/Locale;)Lcom/android/server/inputmethod/InputMethodUtils$InputMethodListBuilder;
+HSPLcom/android/server/inputmethod/InputMethodUtils;->getMostApplicableDefaultIME(Ljava/util/List;)Landroid/view/inputmethod/InputMethodInfo;
 HSPLcom/android/server/inputmethod/InputMethodUtils;->getSubtypeIdFromHashCode(Landroid/view/inputmethod/InputMethodInfo;I)I
 HSPLcom/android/server/inputmethod/InputMethodUtils;->getSubtypes(Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/ArrayList;
-PLcom/android/server/inputmethod/InputMethodUtils;->resolveUserId(IILjava/io/PrintWriter;)[I
+PLcom/android/server/inputmethod/InputMethodUtils;->getSystemLocaleFromContext(Landroid/content/Context;)Ljava/util/Locale;
+PLcom/android/server/inputmethod/InputMethodUtils;->isSoftInputModeStateVisibleAllowed(II)Z
+PLcom/android/server/inputmethod/InputMethodUtils;->isSystemAuxilialyImeThatHasAutomaticSubtype(Landroid/view/inputmethod/InputMethodInfo;Landroid/content/Context;Z)Z
+PLcom/android/server/inputmethod/InputMethodUtils;->isSystemImeThatHasSubtypeOf(Landroid/view/inputmethod/InputMethodInfo;Landroid/content/Context;ZLjava/util/Locale;ZLjava/lang/String;)Z
+HPLcom/android/server/inputmethod/InputMethodUtils;->isValidSubtypeId(Landroid/view/inputmethod/InputMethodInfo;I)Z
+HPLcom/android/server/inputmethod/InputMethodUtils;->resolveUserId(IILjava/io/PrintWriter;)[I
+HSPLcom/android/server/inputmethod/InputMethodUtils;->setDisabledUntilUsed(Landroid/content/pm/IPackageManager;Ljava/lang/String;ILjava/lang/String;)V
 HSPLcom/android/server/inputmethod/InputMethodUtils;->setNonSelectedSystemImesDisabledUntilUsed(Landroid/content/pm/IPackageManager;Ljava/util/List;ILjava/lang/String;)V
+PLcom/android/server/inputmethod/LocaleUtils$ScoreEntry;-><init>([BI)V
+PLcom/android/server/inputmethod/LocaleUtils$ScoreEntry;->compare([B[B)I
+PLcom/android/server/inputmethod/LocaleUtils$ScoreEntry;->compareTo(Lcom/android/server/inputmethod/LocaleUtils$ScoreEntry;)I
+PLcom/android/server/inputmethod/LocaleUtils$ScoreEntry;->compareTo(Ljava/lang/Object;)I
+PLcom/android/server/inputmethod/LocaleUtils$ScoreEntry;->set([BI)V
+PLcom/android/server/inputmethod/LocaleUtils$ScoreEntry;->updateIfBetter([BI)V
+HPLcom/android/server/inputmethod/LocaleUtils;->calculateMatchingSubScore(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)B
+HPLcom/android/server/inputmethod/LocaleUtils;->filterByLanguage(Ljava/util/List;Lcom/android/server/inputmethod/LocaleUtils$LocaleExtractor;Landroid/os/LocaleList;Ljava/util/ArrayList;)V
+PLcom/android/server/integrity/-$$Lambda$AppIntegrityManagerServiceImpl$1$AQicMJqZVSufBnAD8HJ81gPtf7Y;-><init>(Lcom/android/server/integrity/AppIntegrityManagerServiceImpl$1;Landroid/content/Intent;)V
+PLcom/android/server/integrity/-$$Lambda$AppIntegrityManagerServiceImpl$1$AQicMJqZVSufBnAD8HJ81gPtf7Y;->run()V
+PLcom/android/server/integrity/-$$Lambda$AppIntegrityManagerServiceImpl$uoiTatxA4aGwrlfDx0m8FP_FtCo;-><init>(Ljava/lang/String;)V
+PLcom/android/server/integrity/-$$Lambda$AppIntegrityManagerServiceImpl$uoiTatxA4aGwrlfDx0m8FP_FtCo;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/integrity/AppIntegrityManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/integrity/AppIntegrityManagerService;->onStart()V
 HSPLcom/android/server/integrity/AppIntegrityManagerServiceImpl$1;-><init>(Lcom/android/server/integrity/AppIntegrityManagerServiceImpl;)V
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl$1;->lambda$onReceive$0$AppIntegrityManagerServiceImpl$1(Landroid/content/Intent;)V
+HPLcom/android/server/integrity/AppIntegrityManagerServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/integrity/AppIntegrityManagerServiceImpl;-><clinit>()V
 HSPLcom/android/server/integrity/AppIntegrityManagerServiceImpl;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/integrity/AppIntegrityManagerServiceImpl;-><init>(Landroid/content/Context;Landroid/content/pm/PackageManagerInternal;Lcom/android/server/integrity/engine/RuleEvaluationEngine;Lcom/android/server/integrity/IntegrityFileManager;Landroid/os/Handler;)V
+HSPLcom/android/server/integrity/AppIntegrityManagerServiceImpl;-><init>(Landroid/content/Context;Landroid/content/pm/PackageManagerInternal;Lcom/android/server/integrity/engine/RuleEvaluationEngine;Lcom/android/server/integrity/IntegrityFileManager;Landroid/os/Handler;Z)V
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->access$000(Lcom/android/server/integrity/AppIntegrityManagerServiceImpl;)Landroid/os/Handler;
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->access$100(Lcom/android/server/integrity/AppIntegrityManagerServiceImpl;Landroid/content/Intent;)V
+HSPLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->create(Landroid/content/Context;)Lcom/android/server/integrity/AppIntegrityManagerServiceImpl;
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->getAllowedInstallers(Landroid/content/pm/PackageInfo;)Ljava/util/Map;
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->getAllowedRuleProviders()Ljava/util/List;
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->getCertificateFingerprint(Landroid/content/pm/PackageInfo;)Ljava/lang/String;
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->getFingerprint(Landroid/content/pm/Signature;)Ljava/lang/String;
+HPLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->getInstallationPath(Landroid/net/Uri;)Ljava/io/File;
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->getInstallerCertificateFingerprint(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->getInstallerPackageName(Landroid/content/Intent;)Ljava/lang/String;
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->getLoggingResponse(Lcom/android/server/integrity/model/IntegrityCheckResult;)I
+HPLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->getMultiApkInfo(Ljava/io/File;)Landroid/content/pm/PackageInfo;
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->getPackageArchiveInfo(Landroid/net/Uri;)Landroid/content/pm/PackageInfo;
+HPLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->getPackageNameNormalized(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->getSignature(Landroid/content/pm/PackageInfo;)Landroid/content/pm/Signature;
+HPLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->handleIntegrityVerification(Landroid/content/Intent;)V
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->isCausedByAppCertRule(Lcom/android/server/integrity/model/IntegrityCheckResult;)Z
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->isCausedByInstallerRule(Lcom/android/server/integrity/model/IntegrityCheckResult;)Z
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->isRuleProvider(Ljava/lang/String;)Z
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->isSystemApp(Ljava/lang/String;)Z
+PLcom/android/server/integrity/AppIntegrityManagerServiceImpl;->lambda$isRuleProvider$1(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/server/integrity/IntegrityFileManager;-><clinit>()V
+HSPLcom/android/server/integrity/IntegrityFileManager;-><init>()V
+HSPLcom/android/server/integrity/IntegrityFileManager;-><init>(Lcom/android/server/integrity/parser/RuleParser;Lcom/android/server/integrity/serializer/RuleSerializer;Ljava/io/File;)V
+HSPLcom/android/server/integrity/IntegrityFileManager;->getInstance()Lcom/android/server/integrity/IntegrityFileManager;
+PLcom/android/server/integrity/IntegrityFileManager;->initialized()Z
+HSPLcom/android/server/integrity/IntegrityFileManager;->updateRuleIndexingController()V
+PLcom/android/server/integrity/engine/-$$Lambda$I1P1n5zkAf1R76LNtLXDmbu8DuM;-><init>(Ljava/util/List;)V
+PLcom/android/server/integrity/engine/-$$Lambda$RuleEvaluator$_b_bnHZ6Lv_0UPoz1qRhvn2moQI;-><clinit>()V
+PLcom/android/server/integrity/engine/-$$Lambda$RuleEvaluator$_b_bnHZ6Lv_0UPoz1qRhvn2moQI;-><init>()V
+PLcom/android/server/integrity/engine/-$$Lambda$RuleEvaluator$_yl214m5sWGIgjBG_8qMT_pIqSI;-><clinit>()V
+PLcom/android/server/integrity/engine/-$$Lambda$RuleEvaluator$_yl214m5sWGIgjBG_8qMT_pIqSI;-><init>()V
+PLcom/android/server/integrity/engine/-$$Lambda$RuleEvaluator$unAwA1sQfXbWYCFQp7qIaNkgC10;-><init>(Landroid/content/integrity/AppInstallMetadata;)V
+HSPLcom/android/server/integrity/engine/RuleEvaluationEngine;-><init>(Lcom/android/server/integrity/IntegrityFileManager;)V
+PLcom/android/server/integrity/engine/RuleEvaluationEngine;->allowedInstallersRule(Ljava/util/Map;)Ljava/util/Optional;
+PLcom/android/server/integrity/engine/RuleEvaluationEngine;->evaluate(Landroid/content/integrity/AppInstallMetadata;Ljava/util/Map;)Lcom/android/server/integrity/model/IntegrityCheckResult;
+HSPLcom/android/server/integrity/engine/RuleEvaluationEngine;->getRuleEvaluationEngine()Lcom/android/server/integrity/engine/RuleEvaluationEngine;
+PLcom/android/server/integrity/engine/RuleEvaluationEngine;->loadRules(Landroid/content/integrity/AppInstallMetadata;)Ljava/util/List;
+HPLcom/android/server/integrity/engine/RuleEvaluator;->evaluateRules(Ljava/util/List;Landroid/content/integrity/AppInstallMetadata;)Lcom/android/server/integrity/model/IntegrityCheckResult;
+PLcom/android/server/integrity/model/-$$Lambda$IntegrityCheckResult$Cdma_yQnvj3lcPg1ximae51_zEo;-><clinit>()V
+PLcom/android/server/integrity/model/-$$Lambda$IntegrityCheckResult$Cdma_yQnvj3lcPg1ximae51_zEo;-><init>()V
+PLcom/android/server/integrity/model/-$$Lambda$IntegrityCheckResult$uw4WN-XjK2pJvNXIEB_RL21qEcg;-><clinit>()V
+PLcom/android/server/integrity/model/-$$Lambda$IntegrityCheckResult$uw4WN-XjK2pJvNXIEB_RL21qEcg;-><init>()V
+PLcom/android/server/integrity/model/IntegrityCheckResult$Effect;-><clinit>()V
+PLcom/android/server/integrity/model/IntegrityCheckResult$Effect;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/integrity/model/IntegrityCheckResult;-><init>(Lcom/android/server/integrity/model/IntegrityCheckResult$Effect;Landroid/content/integrity/Rule;)V
+PLcom/android/server/integrity/model/IntegrityCheckResult;-><init>(Lcom/android/server/integrity/model/IntegrityCheckResult$Effect;Ljava/util/List;)V
+PLcom/android/server/integrity/model/IntegrityCheckResult;->allow()Lcom/android/server/integrity/model/IntegrityCheckResult;
+PLcom/android/server/integrity/model/IntegrityCheckResult;->getEffect()Lcom/android/server/integrity/model/IntegrityCheckResult$Effect;
+PLcom/android/server/integrity/model/IntegrityCheckResult;->getLoggingResponse()I
+PLcom/android/server/integrity/model/IntegrityCheckResult;->getMatchedRules()Ljava/util/List;
+PLcom/android/server/integrity/model/IntegrityCheckResult;->getRule()Landroid/content/integrity/Rule;
+PLcom/android/server/integrity/model/IntegrityCheckResult;->isCausedByAppCertRule()Z
+PLcom/android/server/integrity/model/IntegrityCheckResult;->isCausedByInstallerRule()Z
+HSPLcom/android/server/integrity/parser/RuleBinaryParser;-><clinit>()V
+HSPLcom/android/server/integrity/parser/RuleBinaryParser;-><init>()V
+HSPLcom/android/server/integrity/serializer/RuleBinarySerializer;-><init>()V
 HSPLcom/android/server/lights/Light;-><init>()V
 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$1;->getLight(I)Lcom/android/server/lights/Light;
+HSPLcom/android/server/lights/LightsService$1;->getLight(I)Lcom/android/server/lights/LogicalLight;
 HSPLcom/android/server/lights/LightsService$2;-><init>(Lcom/android/server/lights/LightsService;)V
 HSPLcom/android/server/lights/LightsService$LightImpl;-><init>(Lcom/android/server/lights/LightsService;Landroid/content/Context;I)V
 HSPLcom/android/server/lights/LightsService$LightImpl;-><init>(Lcom/android/server/lights/LightsService;Landroid/content/Context;ILcom/android/server/lights/LightsService$1;)V
+HSPLcom/android/server/lights/LightsService$LightImpl;-><init>(Lcom/android/server/lights/LightsService;Landroid/content/Context;Landroid/hardware/light/HwLight;)V
+HSPLcom/android/server/lights/LightsService$LightImpl;-><init>(Lcom/android/server/lights/LightsService;Landroid/content/Context;Landroid/hardware/light/HwLight;Lcom/android/server/lights/LightsService$1;)V
+HSPLcom/android/server/lights/LightsService$LightImpl;->setBrightness(FII)V
 HSPLcom/android/server/lights/LightsService$LightImpl;->setBrightness(I)V
 HSPLcom/android/server/lights/LightsService$LightImpl;->setBrightness(II)V
+HSPLcom/android/server/lights/LightsService$LightImpl;->setBrightnessFloat(F)V
 HSPLcom/android/server/lights/LightsService$LightImpl;->setColor(I)V
+HPLcom/android/server/lights/LightsService$LightImpl;->setFlashing(IIII)V
 HSPLcom/android/server/lights/LightsService$LightImpl;->setLightLocked(IIIII)V
+HSPLcom/android/server/lights/LightsService$LightImpl;->setLightUnchecked(IIIII)V
 HSPLcom/android/server/lights/LightsService$LightImpl;->shouldBeInLowPersistenceMode()Z
 HSPLcom/android/server/lights/LightsService$LightImpl;->turnOff()V
+HSPLcom/android/server/lights/LightsService$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$1;)V
 HSPLcom/android/server/lights/LightsService;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/lights/LightsService;-><init>(Landroid/content/Context;Landroid/hardware/light/ILights;Landroid/os/Looper;)V
+HSPLcom/android/server/lights/LightsService;->access$600(Lcom/android/server/lights/LightsService;)Landroid/hardware/light/ILights;
+HSPLcom/android/server/lights/LightsService;->access$900(Lcom/android/server/lights/LightsService;)[Lcom/android/server/lights/LightsService$LightImpl;
 HSPLcom/android/server/lights/LightsService;->onBootPhase(I)V
 HSPLcom/android/server/lights/LightsService;->onStart()V
+HSPLcom/android/server/lights/LightsService;->populateAvailableLights(Landroid/content/Context;)V
+HSPLcom/android/server/lights/LogicalLight;-><init>()V
 HSPLcom/android/server/location/-$$Lambda$5U-_NhZgxqnYDZhpyacq4qBxh8k;-><init>(Lcom/android/server/location/GnssSatelliteBlacklistHelper;)V
 HSPLcom/android/server/location/-$$Lambda$5U-_NhZgxqnYDZhpyacq4qBxh8k;->run()V
 PLcom/android/server/location/-$$Lambda$7zgzwOWgEFtr6DuyW9EYKot7bHU;-><init>(Lcom/android/server/location/NtpTimeHelper;)V
 PLcom/android/server/location/-$$Lambda$7zgzwOWgEFtr6DuyW9EYKot7bHU;->run()V
+PLcom/android/server/location/-$$Lambda$AbstractLocationProvider$3HtpTaeZPwUqdVjGVtj1KqJeRWw;-><init>(Lcom/android/server/location/AbstractLocationProvider;IILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/location/-$$Lambda$AbstractLocationProvider$3HtpTaeZPwUqdVjGVtj1KqJeRWw;->run()V
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$Cz0MzfhYL-KpWWW0XmxsZTNwnI0;-><init>(Ljava/util/Set;)V
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$Cz0MzfhYL-KpWWW0XmxsZTNwnI0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$FRdWEbu93JPBpviTG1AkogCflNc;-><init>(Lcom/android/server/location/AbstractLocationProvider;Lcom/android/internal/location/ProviderRequest;)V
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$FRdWEbu93JPBpviTG1AkogCflNc;->run()V
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$I29l5_Y-rKhaHygNa-fvF70mzA0;-><init>(Lcom/android/server/location/AbstractLocationProvider$State;)V
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$I29l5_Y-rKhaHygNa-fvF70mzA0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$diUZq3K1KUpjC4EqB0SQY_fHHGM;-><init>(Lcom/android/server/location/AbstractLocationProvider$Listener;)V
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$diUZq3K1KUpjC4EqB0SQY_fHHGM;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$kFGsZg9Hx50h6WYQeAMQABkRKNU;-><init>(Ljava/util/function/UnaryOperator;)V
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$kFGsZg9Hx50h6WYQeAMQABkRKNU;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$s_g7M1EFAxoisWC6LYYgN-hWTwc;-><init>(Z)V
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$s_g7M1EFAxoisWC6LYYgN-hWTwc;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$tT5Ydpt2Xk0BtGNe34XjfHM0Bks;-><init>(Z)V
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$tT5Ydpt2Xk0BtGNe34XjfHM0Bks;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$wZCGZbIMAspHRG64AcKlNjhWJEk;-><init>(Lcom/android/internal/location/ProviderProperties;)V
+HSPLcom/android/server/location/-$$Lambda$AbstractLocationProvider$wZCGZbIMAspHRG64AcKlNjhWJEk;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/location/-$$Lambda$ActivityRecognitionProxy$1$d2hvjp-Sk2zwb2N0mtEiubZ0jBE;-><init>(Lcom/android/server/location/ActivityRecognitionProxy;)V
 PLcom/android/server/location/-$$Lambda$ActivityRecognitionProxy$1$d2hvjp-Sk2zwb2N0mtEiubZ0jBE;->run(Landroid/os/IBinder;)V
-PLcom/android/server/location/-$$Lambda$ContextHubClientBroker$CFacmt7807NhDDkp6CgbkeGnMvQ;-><init>(Landroid/hardware/location/NanoAppMessage;)V
+HSPLcom/android/server/location/-$$Lambda$AppForegroundHelper$7asxY_maANt1D_AUTchqbCjktH0;-><init>(Lcom/android/server/location/AppForegroundHelper;IZ)V
+HSPLcom/android/server/location/-$$Lambda$AppForegroundHelper$7asxY_maANt1D_AUTchqbCjktH0;->run()V
+HSPLcom/android/server/location/-$$Lambda$AppForegroundHelper$gltDhiWDJwfMNZ8gJdumXZH8_Hg;-><init>(Lcom/android/server/location/AppForegroundHelper;)V
+HSPLcom/android/server/location/-$$Lambda$AppForegroundHelper$gltDhiWDJwfMNZ8gJdumXZH8_Hg;->onUidImportance(II)V
+HPLcom/android/server/location/-$$Lambda$ContextHubClientBroker$7Uwy0RpQUtRsDYbocrZ-WuXEVJQ;-><init>(Lcom/android/server/location/ContextHubClientBroker;J)V
+HPLcom/android/server/location/-$$Lambda$ContextHubClientBroker$CFacmt7807NhDDkp6CgbkeGnMvQ;-><init>(Landroid/hardware/location/NanoAppMessage;)V
 HPLcom/android/server/location/-$$Lambda$ContextHubClientBroker$CFacmt7807NhDDkp6CgbkeGnMvQ;->accept(Landroid/hardware/location/IContextHubClientCallback;)V
-PLcom/android/server/location/-$$Lambda$ContextHubClientBroker$P9IUEzaG4gP8jALe00of9jdlrGw;-><init>(Lcom/android/server/location/ContextHubClientBroker;Landroid/hardware/location/NanoAppMessage;)V
+HPLcom/android/server/location/-$$Lambda$ContextHubClientBroker$NOnZ9Z0Vw11snzPmdVOE1pPrZ_4;-><init>(Lcom/android/server/location/ContextHubClientBroker;J)V
+HPLcom/android/server/location/-$$Lambda$ContextHubClientBroker$P9IUEzaG4gP8jALe00of9jdlrGw;-><init>(Lcom/android/server/location/ContextHubClientBroker;Landroid/hardware/location/NanoAppMessage;)V
 HPLcom/android/server/location/-$$Lambda$ContextHubClientBroker$P9IUEzaG4gP8jALe00of9jdlrGw;->get()Ljava/lang/Object;
+HPLcom/android/server/location/-$$Lambda$ContextHubClientBroker$iBGtMeLZ6k5dYJZb_VEUfBBYh9s;-><init>(J)V
+PLcom/android/server/location/-$$Lambda$ContextHubClientBroker$iBGtMeLZ6k5dYJZb_VEUfBBYh9s;->accept(Landroid/hardware/location/IContextHubClientCallback;)V
+HPLcom/android/server/location/-$$Lambda$ContextHubClientBroker$ykmLCadaR6NcV4R42i4K8zw4AWs;-><init>(J)V
+PLcom/android/server/location/-$$Lambda$ContextHubClientBroker$ykmLCadaR6NcV4R42i4K8zw4AWs;->accept(Landroid/hardware/location/IContextHubClientCallback;)V
+PLcom/android/server/location/-$$Lambda$ContextHubClientManager$VPD5ebhe8Z67S8QKuTR4KzeshK8;-><init>(J)V
+PLcom/android/server/location/-$$Lambda$ContextHubClientManager$VPD5ebhe8Z67S8QKuTR4KzeshK8;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/location/-$$Lambda$ContextHubClientManager$f15OSYbsSONpkXn7GinnrBPeumw;-><init>(Landroid/hardware/location/NanoAppMessage;)V
 HPLcom/android/server/location/-$$Lambda$ContextHubClientManager$f15OSYbsSONpkXn7GinnrBPeumw;->accept(Ljava/lang/Object;)V
+PLcom/android/server/location/-$$Lambda$ContextHubClientManager$gN_vRogwyzr9qBjrQpKwwHzrFAo;-><init>(J)V
+PLcom/android/server/location/-$$Lambda$ContextHubClientManager$gN_vRogwyzr9qBjrQpKwwHzrFAo;->accept(Ljava/lang/Object;)V
+PLcom/android/server/location/-$$Lambda$ContextHubService$CF_XmCHU9Bf2P5yun6nYrbm6Fpk;-><init>(Landroid/util/proto/ProtoOutputStream;)V
+PLcom/android/server/location/-$$Lambda$ContextHubService$CF_XmCHU9Bf2P5yun6nYrbm6Fpk;->accept(Ljava/lang/Object;)V
 PLcom/android/server/location/-$$Lambda$ContextHubService$HPGvKluemttyVfAcSog-eXiJyHE;-><init>(Ljava/io/PrintWriter;)V
 PLcom/android/server/location/-$$Lambda$ContextHubService$HPGvKluemttyVfAcSog-eXiJyHE;->accept(Ljava/lang/Object;)V
 PLcom/android/server/location/-$$Lambda$ContextHubService$yrt4Ybb62ufyqsQQMJoTJ2JMw_4;-><init>(Landroid/hardware/location/NanoAppFilter;Ljava/util/ArrayList;)V
-PLcom/android/server/location/-$$Lambda$ContextHubService$yrt4Ybb62ufyqsQQMJoTJ2JMw_4;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/location/-$$Lambda$ContextHubService$yrt4Ybb62ufyqsQQMJoTJ2JMw_4;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/location/-$$Lambda$ContextHubTransactionManager$sHbjr4TaLEATkCX_yhD2L7ebuxE;-><init>(Lcom/android/server/location/ContextHubTransactionManager;Lcom/android/server/location/ContextHubServiceTransaction;)V
+HPLcom/android/server/location/-$$Lambda$GeocoderProxy$jfLn3HL2BzwsKdoI6ZZeFfEe10k;-><init>(DDILandroid/location/GeocoderParams;Ljava/util/List;)V
+PLcom/android/server/location/-$$Lambda$GeocoderProxy$jfLn3HL2BzwsKdoI6ZZeFfEe10k;->run(Landroid/os/IBinder;)Ljava/lang/Object;
+PLcom/android/server/location/-$$Lambda$GeocoderProxy$l4GRjTzjcqxZJILrVLX5qayXBE0;-><init>(Ljava/lang/String;DDDDILandroid/location/GeocoderParams;Ljava/util/List;)V
+PLcom/android/server/location/-$$Lambda$GeocoderProxy$l4GRjTzjcqxZJILrVLX5qayXBE0;->run(Landroid/os/IBinder;)Ljava/lang/Object;
+PLcom/android/server/location/-$$Lambda$GeofenceProxy$GeofenceProxyServiceConnection$zlbg9IPCIuzTl4MNd_aO2VH84CU;-><init>(Lcom/android/server/location/GeofenceProxy;)V
+PLcom/android/server/location/-$$Lambda$GeofenceProxy$GeofenceProxyServiceConnection$zlbg9IPCIuzTl4MNd_aO2VH84CU;->run(Landroid/os/IBinder;)V
+HSPLcom/android/server/location/-$$Lambda$GeofenceProxy$hIfaTtsg4NqVfDRkaCxUg6rx90I;-><init>(Lcom/android/server/location/GeofenceProxy;)V
+PLcom/android/server/location/-$$Lambda$GeofenceProxy$hIfaTtsg4NqVfDRkaCxUg6rx90I;->run(Landroid/os/IBinder;)V
 HSPLcom/android/server/location/-$$Lambda$GeofenceProxy$nfSKchjbT2ANT9GbYwyAcTjzBwQ;-><init>(Lcom/android/server/location/GeofenceProxy;)V
 PLcom/android/server/location/-$$Lambda$GeofenceProxy$nfSKchjbT2ANT9GbYwyAcTjzBwQ;->run(Landroid/os/IBinder;)V
 HSPLcom/android/server/location/-$$Lambda$GnssConfiguration$1$384RrX20Mx6OJsRiqsQcSxYdcZc;-><clinit>()V
@@ -10336,40 +17046,52 @@
 HSPLcom/android/server/location/-$$Lambda$GnssConfiguration$1$aaV8BigB_1Oil1H82EHUb0zvWPo;-><clinit>()V
 HSPLcom/android/server/location/-$$Lambda$GnssConfiguration$1$aaV8BigB_1Oil1H82EHUb0zvWPo;-><init>()V
 HSPLcom/android/server/location/-$$Lambda$GnssConfiguration$1$aaV8BigB_1Oil1H82EHUb0zvWPo;->set(I)Z
+HSPLcom/android/server/location/-$$Lambda$GnssConfiguration$1$rRu0NBMB8DgPt3DY5__6u_WNl7A;-><clinit>()V
+HSPLcom/android/server/location/-$$Lambda$GnssConfiguration$1$rRu0NBMB8DgPt3DY5__6u_WNl7A;-><init>()V
+HSPLcom/android/server/location/-$$Lambda$GnssConfiguration$1$rRu0NBMB8DgPt3DY5__6u_WNl7A;->set(I)Z
+HSPLcom/android/server/location/-$$Lambda$GnssConfiguration$1$sKzdHBM7V7DxdhcWx1u8hipJYFo;-><clinit>()V
+HSPLcom/android/server/location/-$$Lambda$GnssConfiguration$1$sKzdHBM7V7DxdhcWx1u8hipJYFo;-><init>()V
+HSPLcom/android/server/location/-$$Lambda$GnssConfiguration$1$sKzdHBM7V7DxdhcWx1u8hipJYFo;->set(I)Z
 PLcom/android/server/location/-$$Lambda$GnssLocationProvider$3-p6UujuU3pwMrR_jYW3uvQiXNM;-><init>(Lcom/android/server/location/GnssLocationProvider;ILandroid/location/Location;)V
 PLcom/android/server/location/-$$Lambda$GnssLocationProvider$3-p6UujuU3pwMrR_jYW3uvQiXNM;->run()V
 HSPLcom/android/server/location/-$$Lambda$GnssLocationProvider$Q6M8z_ZBiD7BNs3kvNmVrqoHSng;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
 PLcom/android/server/location/-$$Lambda$GnssLocationProvider$Q6M8z_ZBiD7BNs3kvNmVrqoHSng;->onNetworkAvailable()V
 HSPLcom/android/server/location/-$$Lambda$GnssLocationProvider$_xEBoJSNGaiPvO5kj-sfJB7tZYk;-><init>(Lcom/android/server/location/GnssLocationProvider;[I[I)V
 HSPLcom/android/server/location/-$$Lambda$GnssLocationProvider$_xEBoJSNGaiPvO5kj-sfJB7tZYk;->run()V
-PLcom/android/server/location/-$$Lambda$GnssLocationProvider$adAUsgD5mK9uoxw0KEjaMYtp_Ro;-><init>(Lcom/android/server/location/GnssLocationProvider;II)V
-PLcom/android/server/location/-$$Lambda$GnssLocationProvider$adAUsgD5mK9uoxw0KEjaMYtp_Ro;->run()V
+HPLcom/android/server/location/-$$Lambda$GnssLocationProvider$adAUsgD5mK9uoxw0KEjaMYtp_Ro;-><init>(Lcom/android/server/location/GnssLocationProvider;II)V
+HPLcom/android/server/location/-$$Lambda$GnssLocationProvider$adAUsgD5mK9uoxw0KEjaMYtp_Ro;->run()V
 HSPLcom/android/server/location/-$$Lambda$GnssLocationProvider$cSSwMZHkxTRwFeOp8gWaG_qGZ5A;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
 PLcom/android/server/location/-$$Lambda$GnssLocationProvider$cSSwMZHkxTRwFeOp8gWaG_qGZ5A;->onDeviceStationaryChanged(Z)V
 HSPLcom/android/server/location/-$$Lambda$GnssLocationProvider$ecDMZdWsEh2URVlhxaEdh1Ifjc8;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
 PLcom/android/server/location/-$$Lambda$GnssLocationProvider$ecDMZdWsEh2URVlhxaEdh1Ifjc8;->getGnssMetricsAsProtoString()Ljava/lang/String;
-PLcom/android/server/location/-$$Lambda$GnssLocationProvider$iKRZ4-bb3otAVYEgv859Z4uWXAo;-><init>(Lcom/android/server/location/GnssLocationProvider;ILandroid/location/Location;IJ)V
-PLcom/android/server/location/-$$Lambda$GnssLocationProvider$iKRZ4-bb3otAVYEgv859Z4uWXAo;->run()V
+HPLcom/android/server/location/-$$Lambda$GnssLocationProvider$iKRZ4-bb3otAVYEgv859Z4uWXAo;-><init>(Lcom/android/server/location/GnssLocationProvider;ILandroid/location/Location;IJ)V
+HPLcom/android/server/location/-$$Lambda$GnssLocationProvider$iKRZ4-bb3otAVYEgv859Z4uWXAo;->run()V
 HSPLcom/android/server/location/-$$Lambda$GnssLocationProvider$jmXMIeP-Oz1yyVRIDOicfl2ucfI;-><init>(Lcom/android/server/location/GnssLocationProvider;I)V
 HSPLcom/android/server/location/-$$Lambda$GnssLocationProvider$jmXMIeP-Oz1yyVRIDOicfl2ucfI;->run()V
 HPLcom/android/server/location/-$$Lambda$GnssLocationProvider$nZP4qF7PEET3HrkcVZAYhG3Bm0c;-><init>(Lcom/android/server/location/GnssLocationProvider;Landroid/location/GnssMeasurementsEvent;)V
 HPLcom/android/server/location/-$$Lambda$GnssLocationProvider$nZP4qF7PEET3HrkcVZAYhG3Bm0c;->run()V
-PLcom/android/server/location/-$$Lambda$GnssLocationProvider$rgfO__O6aj3JBohawF88T-AfsaY;-><init>(Lcom/android/server/location/GnssLocationProvider;II)V
-PLcom/android/server/location/-$$Lambda$GnssLocationProvider$rgfO__O6aj3JBohawF88T-AfsaY;->run()V
-PLcom/android/server/location/-$$Lambda$GnssLocationProvider$zDU-4stA5kbnbj2CmSK2PauyroM;-><init>(Lcom/android/server/location/GnssLocationProvider$LocationChangeListener;Ljava/lang/String;Landroid/location/LocationManager;)V
-PLcom/android/server/location/-$$Lambda$GnssLocationProvider$zDU-4stA5kbnbj2CmSK2PauyroM;->run()V
+HPLcom/android/server/location/-$$Lambda$GnssLocationProvider$rgfO__O6aj3JBohawF88T-AfsaY;-><init>(Lcom/android/server/location/GnssLocationProvider;II)V
+HPLcom/android/server/location/-$$Lambda$GnssLocationProvider$rgfO__O6aj3JBohawF88T-AfsaY;->run()V
+HPLcom/android/server/location/-$$Lambda$GnssLocationProvider$zDU-4stA5kbnbj2CmSK2PauyroM;-><init>(Lcom/android/server/location/GnssLocationProvider$LocationChangeListener;Ljava/lang/String;Landroid/location/LocationManager;)V
+HPLcom/android/server/location/-$$Lambda$GnssLocationProvider$zDU-4stA5kbnbj2CmSK2PauyroM;->run()V
 HPLcom/android/server/location/-$$Lambda$GnssMeasurementsProvider$Qlkb-fzzYggD17FlZmrylRJr2vE;-><init>(Lcom/android/server/location/GnssMeasurementsProvider;Landroid/location/GnssMeasurementsEvent;)V
-PLcom/android/server/location/-$$Lambda$GnssMeasurementsProvider$Qlkb-fzzYggD17FlZmrylRJr2vE;->execute(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
+HPLcom/android/server/location/-$$Lambda$GnssMeasurementsProvider$Qlkb-fzzYggD17FlZmrylRJr2vE;->execute(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
+PLcom/android/server/location/-$$Lambda$GnssNetworkConnectivityHandler$YEGTN3glQ7Hr1FK-xXGbC4KcmJY;-><init>(Lcom/android/server/location/GnssNetworkConnectivityHandler;)V
+PLcom/android/server/location/-$$Lambda$GnssNetworkConnectivityHandler$YEGTN3glQ7Hr1FK-xXGbC4KcmJY;->run()V
+HPLcom/android/server/location/-$$Lambda$GnssNetworkConnectivityHandler$aTyNcuGLHmJGtXKl9qoZpMmhfBY;-><init>(Lcom/android/server/location/GnssNetworkConnectivityHandler;Ljava/lang/Runnable;)V
+HPLcom/android/server/location/-$$Lambda$GnssNetworkConnectivityHandler$aTyNcuGLHmJGtXKl9qoZpMmhfBY;->run()V
+PLcom/android/server/location/-$$Lambda$GnssNetworkConnectivityHandler$axxNnxmo3KqgsSDot69yokC4KVE;-><init>(Lcom/android/server/location/GnssNetworkConnectivityHandler;I[B)V
+PLcom/android/server/location/-$$Lambda$GnssNetworkConnectivityHandler$axxNnxmo3KqgsSDot69yokC4KVE;->run()V
 PLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$0MNjUouf1HJVcFD10rzoJIkzCrw;-><init>(I)V
-PLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$0MNjUouf1HJVcFD10rzoJIkzCrw;->execute(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
+HPLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$0MNjUouf1HJVcFD10rzoJIkzCrw;->execute(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
 PLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$6s2HBSMgP5pXrugfCvtIf9QHndI;-><clinit>()V
 PLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$6s2HBSMgP5pXrugfCvtIf9QHndI;-><init>()V
-PLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$6s2HBSMgP5pXrugfCvtIf9QHndI;->execute(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
+HPLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$6s2HBSMgP5pXrugfCvtIf9QHndI;->execute(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
 HPLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$AtHI8E6PAjonHH1N0ZGabW0VF6c;-><init>(Lcom/android/server/location/GnssStatusListenerHelper;JLjava/lang/String;)V
 HPLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$AtHI8E6PAjonHH1N0ZGabW0VF6c;->execute(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
 PLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$H9Tg_OtCE9BSJiAQYs_ITHFpiHU;-><clinit>()V
 PLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$H9Tg_OtCE9BSJiAQYs_ITHFpiHU;-><init>()V
-PLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$H9Tg_OtCE9BSJiAQYs_ITHFpiHU;->execute(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
+HPLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$H9Tg_OtCE9BSJiAQYs_ITHFpiHU;->execute(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
 HPLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$WA8CUTRQeFIyZhMJFtziHItmYNA;-><init>(Lcom/android/server/location/GnssStatusListenerHelper;I[I[F[F[F[F[F)V
 HPLcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$WA8CUTRQeFIyZhMJFtziHItmYNA;->execute(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
 HSPLcom/android/server/location/-$$Lambda$GnssVisibilityControl$FLGfeDaxF8J3CE9m-TcOXh5j6ow;-><init>(Lcom/android/server/location/GnssVisibilityControl;)V
@@ -10379,10 +17101,25 @@
 HSPLcom/android/server/location/-$$Lambda$GnssVisibilityControl$YLPk0FuuEUrv7lfRNYvhNb6uKic;-><init>(Lcom/android/server/location/GnssVisibilityControl;Ljava/util/List;)V
 HSPLcom/android/server/location/-$$Lambda$GnssVisibilityControl$YLPk0FuuEUrv7lfRNYvhNb6uKic;->run()V
 HSPLcom/android/server/location/-$$Lambda$GnssVisibilityControl$cq648s0kLZajRjefd-RR_iUZoiQ;-><init>(Lcom/android/server/location/GnssVisibilityControl;)V
+HPLcom/android/server/location/-$$Lambda$GnssVisibilityControl$cq648s0kLZajRjefd-RR_iUZoiQ;->onPermissionsChanged(I)V
 HSPLcom/android/server/location/-$$Lambda$GnssVisibilityControl$ezKd0QctWKgyrEvPFQUXWNBxlNg;-><init>(Lcom/android/server/location/GnssVisibilityControl;Ljava/lang/Runnable;)V
 HSPLcom/android/server/location/-$$Lambda$GnssVisibilityControl$ezKd0QctWKgyrEvPFQUXWNBxlNg;->run()V
-PLcom/android/server/location/-$$Lambda$LocationProviderProxy$2$QT3uzVX4fLIc1b7F_cP9P1hzluA;-><init>(Lcom/android/server/location/LocationProviderProxy;)V
-PLcom/android/server/location/-$$Lambda$LocationProviderProxy$2$QT3uzVX4fLIc1b7F_cP9P1hzluA;->run(Landroid/os/IBinder;)V
+HPLcom/android/server/location/-$$Lambda$GnssVisibilityControl$nmfWkQtbYmj8KoGmFncGZnuzWS0;-><init>(Lcom/android/server/location/GnssVisibilityControl;I)V
+PLcom/android/server/location/-$$Lambda$GnssVisibilityControl$nmfWkQtbYmj8KoGmFncGZnuzWS0;->run()V
+PLcom/android/server/location/-$$Lambda$GnssVisibilityControl$rgPyvoFYNphS-9zV3fbeQCNLxa8;-><init>(Lcom/android/server/location/GnssVisibilityControl;Ljava/lang/String;BLjava/lang/String;BLjava/lang/String;BZZ)V
+PLcom/android/server/location/-$$Lambda$GnssVisibilityControl$rgPyvoFYNphS-9zV3fbeQCNLxa8;->run()V
+HSPLcom/android/server/location/-$$Lambda$HardwareActivityRecognitionProxy$Z7jbekKm-LTVAz47zPN0h1VYfjo;-><init>(Lcom/android/server/location/HardwareActivityRecognitionProxy;)V
+PLcom/android/server/location/-$$Lambda$HardwareActivityRecognitionProxy$Z7jbekKm-LTVAz47zPN0h1VYfjo;->run(Landroid/os/IBinder;)V
+HSPLcom/android/server/location/-$$Lambda$LocationProviderProxy$2$QT3uzVX4fLIc1b7F_cP9P1hzluA;-><init>(Lcom/android/server/location/LocationProviderProxy;)V
+HSPLcom/android/server/location/-$$Lambda$LocationProviderProxy$2$QT3uzVX4fLIc1b7F_cP9P1hzluA;->run(Landroid/os/IBinder;)V
+HSPLcom/android/server/location/-$$Lambda$LocationProviderProxy$26d2FFhpYis1Ws92o2khDXr7LzU;-><init>(Lcom/android/server/location/LocationProviderProxy;)V
+PLcom/android/server/location/-$$Lambda$LocationProviderProxy$26d2FFhpYis1Ws92o2khDXr7LzU;->run()V
+HSPLcom/android/server/location/-$$Lambda$LocationProviderProxy$3wGALcuMWaMkkBRL1d0LQ_QqoCk;-><init>(Lcom/android/server/location/LocationProviderProxy;)V
+HSPLcom/android/server/location/-$$Lambda$LocationProviderProxy$3wGALcuMWaMkkBRL1d0LQ_QqoCk;->run(Landroid/os/IBinder;)V
+HSPLcom/android/server/location/-$$Lambda$LocationProviderProxy$DolK0RPdYvNbDbCY51eoLe2SJLw;-><init>(Lcom/android/server/location/LocationProviderProxy;Lcom/android/internal/location/ProviderRequest;)V
+HPLcom/android/server/location/-$$Lambda$LocationProviderProxy$DolK0RPdYvNbDbCY51eoLe2SJLw;->run(Landroid/os/IBinder;)V
+HSPLcom/android/server/location/-$$Lambda$LocationProviderProxy$Uez3oEpu2OhUykPUhHZnDv6UWJI;-><init>(Lcom/android/internal/location/ProviderRequest;)V
+HPLcom/android/server/location/-$$Lambda$LocationProviderProxy$Uez3oEpu2OhUykPUhHZnDv6UWJI;->run(Landroid/os/IBinder;)V
 HPLcom/android/server/location/-$$Lambda$LocationProviderProxy$ogMhKVFSASoXJPyFn-xsjSkNpe0;-><init>(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
 HPLcom/android/server/location/-$$Lambda$LocationProviderProxy$ogMhKVFSASoXJPyFn-xsjSkNpe0;->run(Landroid/os/IBinder;)V
 HSPLcom/android/server/location/-$$Lambda$LocationSettingsStore$FSM6khNR8gXmFeTsAWvdXgk6aYY;-><clinit>()V
@@ -10395,13 +17132,61 @@
 PLcom/android/server/location/-$$Lambda$NtpTimeHelper$xPxgficKWFyuwUj60WMuiGEEjdg;->run()V
 PLcom/android/server/location/-$$Lambda$NtpTimeHelper$xWqlqJuq4jBJ5-xhFLCwEKGVB0k;-><init>(Lcom/android/server/location/NtpTimeHelper;)V
 PLcom/android/server/location/-$$Lambda$NtpTimeHelper$xWqlqJuq4jBJ5-xhFLCwEKGVB0k;->run()V
-PLcom/android/server/location/-$$Lambda$RemoteListenerHelper$0Rlnad83RE1JdiVK0ULOLm530JM;-><init>(Lcom/android/server/location/RemoteListenerHelper;)V
-PLcom/android/server/location/-$$Lambda$RemoteListenerHelper$0Rlnad83RE1JdiVK0ULOLm530JM;->run()V
+HPLcom/android/server/location/-$$Lambda$RemoteListenerHelper$0Rlnad83RE1JdiVK0ULOLm530JM;-><init>(Lcom/android/server/location/RemoteListenerHelper;)V
+HPLcom/android/server/location/-$$Lambda$RemoteListenerHelper$0Rlnad83RE1JdiVK0ULOLm530JM;->run()V
+HSPLcom/android/server/location/-$$Lambda$SettingsHelper$DVmNGa9ypltgL35WVwJuSTIxRS8;-><clinit>()V
+HSPLcom/android/server/location/-$$Lambda$SettingsHelper$DVmNGa9ypltgL35WVwJuSTIxRS8;-><init>()V
+PLcom/android/server/location/-$$Lambda$SettingsHelper$DVmNGa9ypltgL35WVwJuSTIxRS8;->get()Ljava/lang/Object;
+HSPLcom/android/server/location/-$$Lambda$SettingsHelper$Ez8giHaZAPYwS7zICeUtrlXPpBo;-><clinit>()V
+HSPLcom/android/server/location/-$$Lambda$SettingsHelper$Ez8giHaZAPYwS7zICeUtrlXPpBo;-><init>()V
+PLcom/android/server/location/-$$Lambda$SettingsHelper$Ez8giHaZAPYwS7zICeUtrlXPpBo;->get()Ljava/lang/Object;
+HSPLcom/android/server/location/-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo;-><clinit>()V
+HSPLcom/android/server/location/-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo;-><init>()V
+HSPLcom/android/server/location/-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo;->execute(Ljava/lang/Runnable;)V
+HSPLcom/android/server/location/AbstractLocationProvider$InternalState;-><init>(Lcom/android/server/location/AbstractLocationProvider$Listener;Lcom/android/server/location/AbstractLocationProvider$State;)V
+HSPLcom/android/server/location/AbstractLocationProvider$InternalState;-><init>(Lcom/android/server/location/AbstractLocationProvider$Listener;Lcom/android/server/location/AbstractLocationProvider$State;Lcom/android/server/location/AbstractLocationProvider$1;)V
+HSPLcom/android/server/location/AbstractLocationProvider$InternalState;->access$400(Lcom/android/server/location/AbstractLocationProvider$InternalState;Ljava/util/function/UnaryOperator;)Lcom/android/server/location/AbstractLocationProvider$InternalState;
+HSPLcom/android/server/location/AbstractLocationProvider$InternalState;->access$500(Lcom/android/server/location/AbstractLocationProvider$InternalState;Lcom/android/server/location/AbstractLocationProvider$State;)Lcom/android/server/location/AbstractLocationProvider$InternalState;
+HSPLcom/android/server/location/AbstractLocationProvider$InternalState;->access$600(Lcom/android/server/location/AbstractLocationProvider$InternalState;Lcom/android/server/location/AbstractLocationProvider$Listener;)Lcom/android/server/location/AbstractLocationProvider$InternalState;
+HSPLcom/android/server/location/AbstractLocationProvider$InternalState;->withListener(Lcom/android/server/location/AbstractLocationProvider$Listener;)Lcom/android/server/location/AbstractLocationProvider$InternalState;
+HSPLcom/android/server/location/AbstractLocationProvider$InternalState;->withState(Lcom/android/server/location/AbstractLocationProvider$State;)Lcom/android/server/location/AbstractLocationProvider$InternalState;
+HSPLcom/android/server/location/AbstractLocationProvider$InternalState;->withState(Ljava/util/function/UnaryOperator;)Lcom/android/server/location/AbstractLocationProvider$InternalState;
+HSPLcom/android/server/location/AbstractLocationProvider$State;-><clinit>()V
+HSPLcom/android/server/location/AbstractLocationProvider$State;-><init>(ZLcom/android/internal/location/ProviderProperties;Ljava/util/Set;)V
+HSPLcom/android/server/location/AbstractLocationProvider$State;->access$000(Lcom/android/server/location/AbstractLocationProvider$State;Ljava/util/Set;)Lcom/android/server/location/AbstractLocationProvider$State;
+HSPLcom/android/server/location/AbstractLocationProvider$State;->access$200(Lcom/android/server/location/AbstractLocationProvider$State;Lcom/android/internal/location/ProviderProperties;)Lcom/android/server/location/AbstractLocationProvider$State;
+HSPLcom/android/server/location/AbstractLocationProvider$State;->access$300(Lcom/android/server/location/AbstractLocationProvider$State;Z)Lcom/android/server/location/AbstractLocationProvider$State;
+HSPLcom/android/server/location/AbstractLocationProvider$State;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/server/location/AbstractLocationProvider$State;->withAllowed(Z)Lcom/android/server/location/AbstractLocationProvider$State;
+HSPLcom/android/server/location/AbstractLocationProvider$State;->withEnabled(Z)Lcom/android/server/location/AbstractLocationProvider$State;
+HSPLcom/android/server/location/AbstractLocationProvider$State;->withProperties(Lcom/android/internal/location/ProviderProperties;)Lcom/android/server/location/AbstractLocationProvider$State;
+HSPLcom/android/server/location/AbstractLocationProvider$State;->withProviderPackageNames(Ljava/util/Set;)Lcom/android/server/location/AbstractLocationProvider$State;
 HSPLcom/android/server/location/AbstractLocationProvider;-><init>(Landroid/content/Context;Lcom/android/server/location/AbstractLocationProvider$LocationProviderManager;)V
+HSPLcom/android/server/location/AbstractLocationProvider;-><init>(Landroid/content/Context;Ljava/util/concurrent/Executor;)V
+HSPLcom/android/server/location/AbstractLocationProvider;-><init>(Landroid/content/Context;Ljava/util/concurrent/Executor;Ljava/util/Set;)V
+HSPLcom/android/server/location/AbstractLocationProvider;-><init>(Ljava/util/concurrent/Executor;Landroid/content/Context;)V
+HSPLcom/android/server/location/AbstractLocationProvider;-><init>(Ljava/util/concurrent/Executor;Ljava/util/Set;)V
 PLcom/android/server/location/AbstractLocationProvider;->getProviderPackages()Ljava/util/List;
-PLcom/android/server/location/AbstractLocationProvider;->reportLocation(Landroid/location/Location;)V
+HSPLcom/android/server/location/AbstractLocationProvider;->getState()Lcom/android/server/location/AbstractLocationProvider$State;
+PLcom/android/server/location/AbstractLocationProvider;->lambda$sendExtraCommand$7$AbstractLocationProvider(IILjava/lang/String;Landroid/os/Bundle;)V
+HSPLcom/android/server/location/AbstractLocationProvider;->lambda$setAllowed$3(ZLcom/android/server/location/AbstractLocationProvider$State;)Lcom/android/server/location/AbstractLocationProvider$State;
+HSPLcom/android/server/location/AbstractLocationProvider;->lambda$setEnabled$3(ZLcom/android/server/location/AbstractLocationProvider$State;)Lcom/android/server/location/AbstractLocationProvider$State;
+HSPLcom/android/server/location/AbstractLocationProvider;->lambda$setListener$0(Lcom/android/server/location/AbstractLocationProvider$Listener;Lcom/android/server/location/AbstractLocationProvider$InternalState;)Lcom/android/server/location/AbstractLocationProvider$InternalState;
+HSPLcom/android/server/location/AbstractLocationProvider;->lambda$setPackageNames$5(Ljava/util/Set;Lcom/android/server/location/AbstractLocationProvider$State;)Lcom/android/server/location/AbstractLocationProvider$State;
+HSPLcom/android/server/location/AbstractLocationProvider;->lambda$setProperties$4(Lcom/android/internal/location/ProviderProperties;Lcom/android/server/location/AbstractLocationProvider$State;)Lcom/android/server/location/AbstractLocationProvider$State;
+HSPLcom/android/server/location/AbstractLocationProvider;->lambda$setRequest$6$AbstractLocationProvider(Lcom/android/internal/location/ProviderRequest;)V
+HSPLcom/android/server/location/AbstractLocationProvider;->lambda$setState$1(Lcom/android/server/location/AbstractLocationProvider$State;Lcom/android/server/location/AbstractLocationProvider$InternalState;)Lcom/android/server/location/AbstractLocationProvider$InternalState;
+HSPLcom/android/server/location/AbstractLocationProvider;->lambda$setState$2(Ljava/util/function/UnaryOperator;Lcom/android/server/location/AbstractLocationProvider$InternalState;)Lcom/android/server/location/AbstractLocationProvider$InternalState;
+HPLcom/android/server/location/AbstractLocationProvider;->reportLocation(Landroid/location/Location;)V
+PLcom/android/server/location/AbstractLocationProvider;->sendExtraCommand(IILjava/lang/String;Landroid/os/Bundle;)V
+HSPLcom/android/server/location/AbstractLocationProvider;->setAllowed(Z)V
 HSPLcom/android/server/location/AbstractLocationProvider;->setEnabled(Z)V
+HSPLcom/android/server/location/AbstractLocationProvider;->setListener(Lcom/android/server/location/AbstractLocationProvider$Listener;)Lcom/android/server/location/AbstractLocationProvider$State;
+HSPLcom/android/server/location/AbstractLocationProvider;->setPackageNames(Ljava/util/Set;)V
 HSPLcom/android/server/location/AbstractLocationProvider;->setProperties(Lcom/android/internal/location/ProviderProperties;)V
+HSPLcom/android/server/location/AbstractLocationProvider;->setRequest(Lcom/android/internal/location/ProviderRequest;)V
+HSPLcom/android/server/location/AbstractLocationProvider;->setState(Lcom/android/server/location/AbstractLocationProvider$State;)V
+HSPLcom/android/server/location/AbstractLocationProvider;->setState(Ljava/util/function/UnaryOperator;)V
 HSPLcom/android/server/location/ActivityRecognitionProxy$1;-><init>(Lcom/android/server/location/ActivityRecognitionProxy;Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;IIILandroid/os/Handler;)V
 PLcom/android/server/location/ActivityRecognitionProxy$1;->lambda$onBind$0(Lcom/android/server/location/ActivityRecognitionProxy;Landroid/os/IBinder;)V
 PLcom/android/server/location/ActivityRecognitionProxy$1;->onBind()V
@@ -10409,32 +17194,59 @@
 PLcom/android/server/location/ActivityRecognitionProxy;->access$000(Lcom/android/server/location/ActivityRecognitionProxy;Landroid/os/IBinder;)V
 HSPLcom/android/server/location/ActivityRecognitionProxy;->createAndBind(Landroid/content/Context;ZLandroid/hardware/location/ActivityRecognitionHardware;III)Lcom/android/server/location/ActivityRecognitionProxy;
 PLcom/android/server/location/ActivityRecognitionProxy;->initializeService(Landroid/os/IBinder;)V
+HSPLcom/android/server/location/AppForegroundHelper;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/location/AppForegroundHelper;->addListener(Lcom/android/server/location/AppForegroundHelper$AppForegroundListener;)V
+HSPLcom/android/server/location/AppForegroundHelper;->getImportance(I)I
+HSPLcom/android/server/location/AppForegroundHelper;->isAppForeground(I)Z
+HSPLcom/android/server/location/AppForegroundHelper;->isForeground(I)Z
+HSPLcom/android/server/location/AppForegroundHelper;->lambda$gltDhiWDJwfMNZ8gJdumXZH8_Hg(Lcom/android/server/location/AppForegroundHelper;II)V
+HSPLcom/android/server/location/AppForegroundHelper;->lambda$onAppForegroundChanged$0$AppForegroundHelper(IZ)V
+HSPLcom/android/server/location/AppForegroundHelper;->onAppForegroundChanged(II)V
+HSPLcom/android/server/location/AppForegroundHelper;->onSystemReady()V
 HSPLcom/android/server/location/CallerIdentity;-><init>(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/location/ComprehensiveCountryDetector$1;-><init>(Lcom/android/server/location/ComprehensiveCountryDetector;)V
-PLcom/android/server/location/ComprehensiveCountryDetector$2;-><init>(Lcom/android/server/location/ComprehensiveCountryDetector;Landroid/location/Country;Landroid/location/Country;ZZ)V
-PLcom/android/server/location/ComprehensiveCountryDetector$2;->run()V
+HSPLcom/android/server/location/ComprehensiveCountryDetector$1;-><init>(Lcom/android/server/location/ComprehensiveCountryDetector;)V
+PLcom/android/server/location/ComprehensiveCountryDetector$1;->onCountryDetected(Landroid/location/Country;)V
+HPLcom/android/server/location/ComprehensiveCountryDetector$2;-><init>(Lcom/android/server/location/ComprehensiveCountryDetector;Landroid/location/Country;Landroid/location/Country;ZZ)V
+HPLcom/android/server/location/ComprehensiveCountryDetector$2;->run()V
 PLcom/android/server/location/ComprehensiveCountryDetector$3;-><init>(Lcom/android/server/location/ComprehensiveCountryDetector;)V
+PLcom/android/server/location/ComprehensiveCountryDetector$3;->run()V
 PLcom/android/server/location/ComprehensiveCountryDetector$4;-><init>(Lcom/android/server/location/ComprehensiveCountryDetector;)V
-PLcom/android/server/location/ComprehensiveCountryDetector;-><init>(Landroid/content/Context;)V
+HPLcom/android/server/location/ComprehensiveCountryDetector$4;->onServiceStateChanged(Landroid/telephony/ServiceState;)V
+HSPLcom/android/server/location/ComprehensiveCountryDetector;-><init>(Landroid/content/Context;)V
+PLcom/android/server/location/ComprehensiveCountryDetector;->access$002(Lcom/android/server/location/ComprehensiveCountryDetector;Landroid/location/Country;)Landroid/location/Country;
+HPLcom/android/server/location/ComprehensiveCountryDetector;->access$100(Lcom/android/server/location/ComprehensiveCountryDetector;ZZ)Landroid/location/Country;
+PLcom/android/server/location/ComprehensiveCountryDetector;->access$200(Lcom/android/server/location/ComprehensiveCountryDetector;)V
+PLcom/android/server/location/ComprehensiveCountryDetector;->access$308(Lcom/android/server/location/ComprehensiveCountryDetector;)I
+PLcom/android/server/location/ComprehensiveCountryDetector;->access$408(Lcom/android/server/location/ComprehensiveCountryDetector;)I
+HPLcom/android/server/location/ComprehensiveCountryDetector;->access$500(Lcom/android/server/location/ComprehensiveCountryDetector;)Z
 PLcom/android/server/location/ComprehensiveCountryDetector;->addPhoneStateListener()V
-PLcom/android/server/location/ComprehensiveCountryDetector;->addToLogs(Landroid/location/Country;)V
-PLcom/android/server/location/ComprehensiveCountryDetector;->cancelLocationRefresh()V
+HPLcom/android/server/location/ComprehensiveCountryDetector;->addToLogs(Landroid/location/Country;)V
+HPLcom/android/server/location/ComprehensiveCountryDetector;->cancelLocationRefresh()V
+PLcom/android/server/location/ComprehensiveCountryDetector;->createLocationBasedCountryDetector()Lcom/android/server/location/CountryDetectorBase;
 PLcom/android/server/location/ComprehensiveCountryDetector;->detectCountry()Landroid/location/Country;
-PLcom/android/server/location/ComprehensiveCountryDetector;->detectCountry(ZZ)Landroid/location/Country;
-PLcom/android/server/location/ComprehensiveCountryDetector;->getCountry()Landroid/location/Country;
-PLcom/android/server/location/ComprehensiveCountryDetector;->getNetworkBasedCountry()Landroid/location/Country;
-PLcom/android/server/location/ComprehensiveCountryDetector;->isNetworkCountryCodeAvailable()Z
+HPLcom/android/server/location/ComprehensiveCountryDetector;->detectCountry(ZZ)Landroid/location/Country;
+HPLcom/android/server/location/ComprehensiveCountryDetector;->getCountry()Landroid/location/Country;
+PLcom/android/server/location/ComprehensiveCountryDetector;->getLastKnownLocationBasedCountry()Landroid/location/Country;
+PLcom/android/server/location/ComprehensiveCountryDetector;->getLocaleCountry()Landroid/location/Country;
+HPLcom/android/server/location/ComprehensiveCountryDetector;->getNetworkBasedCountry()Landroid/location/Country;
+PLcom/android/server/location/ComprehensiveCountryDetector;->getSimBasedCountry()Landroid/location/Country;
+PLcom/android/server/location/ComprehensiveCountryDetector;->isAirplaneModeOff()Z
+PLcom/android/server/location/ComprehensiveCountryDetector;->isGeoCoderImplemented()Z
+HPLcom/android/server/location/ComprehensiveCountryDetector;->isNetworkCountryCodeAvailable()Z
+HPLcom/android/server/location/ComprehensiveCountryDetector;->notifyIfCountryChanged(Landroid/location/Country;Landroid/location/Country;)V
 PLcom/android/server/location/ComprehensiveCountryDetector;->removePhoneStateListener()V
-PLcom/android/server/location/ComprehensiveCountryDetector;->runAfterDetection(Landroid/location/Country;Landroid/location/Country;ZZ)V
-PLcom/android/server/location/ComprehensiveCountryDetector;->runAfterDetectionAsync(Landroid/location/Country;Landroid/location/Country;ZZ)V
+HPLcom/android/server/location/ComprehensiveCountryDetector;->runAfterDetection(Landroid/location/Country;Landroid/location/Country;ZZ)V
+HPLcom/android/server/location/ComprehensiveCountryDetector;->runAfterDetectionAsync(Landroid/location/Country;Landroid/location/Country;ZZ)V
 PLcom/android/server/location/ComprehensiveCountryDetector;->scheduleLocationRefresh()V
 PLcom/android/server/location/ComprehensiveCountryDetector;->setCountryListener(Landroid/location/CountryListener;)V
-PLcom/android/server/location/ComprehensiveCountryDetector;->stopLocationBasedDetector()V
+PLcom/android/server/location/ComprehensiveCountryDetector;->startLocationBasedDetector(Landroid/location/CountryListener;)V
+HPLcom/android/server/location/ComprehensiveCountryDetector;->stopLocationBasedDetector()V
 HSPLcom/android/server/location/ContextHubClientBroker$PendingIntentRequest;-><init>(Lcom/android/server/location/ContextHubClientBroker;)V
 PLcom/android/server/location/ContextHubClientBroker$PendingIntentRequest;-><init>(Lcom/android/server/location/ContextHubClientBroker;Landroid/app/PendingIntent;J)V
+PLcom/android/server/location/ContextHubClientBroker$PendingIntentRequest;->clear()V
 PLcom/android/server/location/ContextHubClientBroker$PendingIntentRequest;->getNanoAppId()J
 PLcom/android/server/location/ContextHubClientBroker$PendingIntentRequest;->getPendingIntent()Landroid/app/PendingIntent;
-PLcom/android/server/location/ContextHubClientBroker$PendingIntentRequest;->hasPendingIntent()Z
+HPLcom/android/server/location/ContextHubClientBroker$PendingIntentRequest;->hasPendingIntent()Z
 HSPLcom/android/server/location/ContextHubClientBroker$PendingIntentRequest;->isValid()Z
 PLcom/android/server/location/ContextHubClientBroker;-><init>(Landroid/content/Context;Landroid/hardware/contexthub/V1_0/IContexthub;Lcom/android/server/location/ContextHubClientManager;Landroid/hardware/location/ContextHubInfo;SLandroid/app/PendingIntent;J)V
 HSPLcom/android/server/location/ContextHubClientBroker;-><init>(Landroid/content/Context;Landroid/hardware/contexthub/V1_0/IContexthub;Lcom/android/server/location/ContextHubClientManager;Landroid/hardware/location/ContextHubInfo;SLandroid/hardware/location/IContextHubClientCallback;)V
@@ -10444,148 +17256,239 @@
 HPLcom/android/server/location/ContextHubClientBroker;->createIntent(I)Landroid/content/Intent;
 HPLcom/android/server/location/ContextHubClientBroker;->createIntent(IJ)Landroid/content/Intent;
 HPLcom/android/server/location/ContextHubClientBroker;->doSendPendingIntent(Landroid/app/PendingIntent;Landroid/content/Intent;)V
+PLcom/android/server/location/ContextHubClientBroker;->dump(Landroid/util/proto/ProtoOutputStream;)V
 HSPLcom/android/server/location/ContextHubClientBroker;->getAttachedContextHubId()I
 HSPLcom/android/server/location/ContextHubClientBroker;->getHostEndPointId()S
 HPLcom/android/server/location/ContextHubClientBroker;->hasPendingIntent(Landroid/app/PendingIntent;J)Z
 HPLcom/android/server/location/ContextHubClientBroker;->invokeCallback(Lcom/android/server/location/ContextHubClientBroker$CallbackConsumer;)V
-PLcom/android/server/location/ContextHubClientBroker;->isRegistered()Z
-PLcom/android/server/location/ContextHubClientBroker;->lambda$sendMessageToClient$0(Landroid/hardware/location/NanoAppMessage;Landroid/hardware/location/IContextHubClientCallback;)V
+PLcom/android/server/location/ContextHubClientBroker;->isPendingIntentCancelled()Z
+HPLcom/android/server/location/ContextHubClientBroker;->isRegistered()Z
+PLcom/android/server/location/ContextHubClientBroker;->lambda$onNanoAppLoaded$2(JLandroid/hardware/location/IContextHubClientCallback;)V
+PLcom/android/server/location/ContextHubClientBroker;->lambda$onNanoAppUnloaded$4(JLandroid/hardware/location/IContextHubClientCallback;)V
+HPLcom/android/server/location/ContextHubClientBroker;->lambda$sendMessageToClient$0(Landroid/hardware/location/NanoAppMessage;Landroid/hardware/location/IContextHubClientCallback;)V
 HPLcom/android/server/location/ContextHubClientBroker;->lambda$sendMessageToClient$1$ContextHubClientBroker(Landroid/hardware/location/NanoAppMessage;)Landroid/content/Intent;
 PLcom/android/server/location/ContextHubClientBroker;->onClientExit()V
-PLcom/android/server/location/ContextHubClientBroker;->sendMessageToClient(Landroid/hardware/location/NanoAppMessage;)V
+PLcom/android/server/location/ContextHubClientBroker;->onNanoAppLoaded(J)V
+PLcom/android/server/location/ContextHubClientBroker;->onNanoAppUnloaded(J)V
+HPLcom/android/server/location/ContextHubClientBroker;->sendMessageToClient(Landroid/hardware/location/NanoAppMessage;)V
 HPLcom/android/server/location/ContextHubClientBroker;->sendMessageToNanoApp(Landroid/hardware/location/NanoAppMessage;)I
 HPLcom/android/server/location/ContextHubClientBroker;->sendPendingIntent(Ljava/util/function/Supplier;J)V
 HSPLcom/android/server/location/ContextHubClientBroker;->toString()Ljava/lang/String;
 HSPLcom/android/server/location/ContextHubClientManager$ConcurrentLinkedEvictingDeque;-><init>(Lcom/android/server/location/ContextHubClientManager;I)V
 HSPLcom/android/server/location/ContextHubClientManager$ConcurrentLinkedEvictingDeque;->add(Ljava/lang/Object;)Z
 HSPLcom/android/server/location/ContextHubClientManager$RegistrationRecord;-><init>(Lcom/android/server/location/ContextHubClientManager;Ljava/lang/String;I)V
-PLcom/android/server/location/ContextHubClientManager$RegistrationRecord;->toString()Ljava/lang/String;
+PLcom/android/server/location/ContextHubClientManager$RegistrationRecord;->dump(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/location/ContextHubClientManager$RegistrationRecord;->toString()Ljava/lang/String;
+HSPLcom/android/server/location/ContextHubClientManager;-><clinit>()V
 HSPLcom/android/server/location/ContextHubClientManager;-><init>(Landroid/content/Context;Landroid/hardware/contexthub/V1_0/IContexthub;)V
-PLcom/android/server/location/ContextHubClientManager;->broadcastMessage(ILandroid/hardware/location/NanoAppMessage;)V
+PLcom/android/server/location/ContextHubClientManager;->access$000()Ljava/text/DateFormat;
+HPLcom/android/server/location/ContextHubClientManager;->broadcastMessage(ILandroid/hardware/location/NanoAppMessage;)V
+PLcom/android/server/location/ContextHubClientManager;->dump(Landroid/util/proto/ProtoOutputStream;)V
 HPLcom/android/server/location/ContextHubClientManager;->forEachClientOfHub(ILjava/util/function/Consumer;)V
 HPLcom/android/server/location/ContextHubClientManager;->getClientBroker(ILandroid/app/PendingIntent;J)Lcom/android/server/location/ContextHubClientBroker;
 HSPLcom/android/server/location/ContextHubClientManager;->getHostEndPointId()S
-PLcom/android/server/location/ContextHubClientManager;->lambda$broadcastMessage$4(Landroid/hardware/location/NanoAppMessage;Lcom/android/server/location/ContextHubClientBroker;)V
+HPLcom/android/server/location/ContextHubClientManager;->lambda$broadcastMessage$4(Landroid/hardware/location/NanoAppMessage;Lcom/android/server/location/ContextHubClientBroker;)V
+PLcom/android/server/location/ContextHubClientManager;->lambda$onNanoAppLoaded$0(JLcom/android/server/location/ContextHubClientBroker;)V
+PLcom/android/server/location/ContextHubClientManager;->lambda$onNanoAppUnloaded$1(JLcom/android/server/location/ContextHubClientBroker;)V
 HPLcom/android/server/location/ContextHubClientManager;->onMessageFromNanoApp(ILandroid/hardware/contexthub/V1_0/ContextHubMsg;)V
+PLcom/android/server/location/ContextHubClientManager;->onNanoAppLoaded(IJ)V
+PLcom/android/server/location/ContextHubClientManager;->onNanoAppUnloaded(IJ)V
 HPLcom/android/server/location/ContextHubClientManager;->registerClient(Landroid/hardware/location/ContextHubInfo;Landroid/app/PendingIntent;J)Landroid/hardware/location/IContextHubClient;
 HSPLcom/android/server/location/ContextHubClientManager;->registerClient(Landroid/hardware/location/ContextHubInfo;Landroid/hardware/location/IContextHubClientCallback;)Landroid/hardware/location/IContextHubClient;
-PLcom/android/server/location/ContextHubClientManager;->toString()Ljava/lang/String;
-PLcom/android/server/location/ContextHubClientManager;->unregisterClient(S)V
+HPLcom/android/server/location/ContextHubClientManager;->toString()Ljava/lang/String;
+HPLcom/android/server/location/ContextHubClientManager;->unregisterClient(S)V
 HSPLcom/android/server/location/ContextHubService$1;-><init>(Lcom/android/server/location/ContextHubService;I)V
-PLcom/android/server/location/ContextHubService$1;->onMessageFromNanoApp(Landroid/hardware/location/NanoAppMessage;)V
+HPLcom/android/server/location/ContextHubService$1;->onMessageFromNanoApp(Landroid/hardware/location/NanoAppMessage;)V
+PLcom/android/server/location/ContextHubService$1;->onNanoAppLoaded(J)V
+PLcom/android/server/location/ContextHubService$1;->onNanoAppUnloaded(J)V
+PLcom/android/server/location/ContextHubService$2;-><init>(Lcom/android/server/location/ContextHubService;ILandroid/hardware/location/NanoAppBinary;)V
+PLcom/android/server/location/ContextHubService$2;->onTransactionComplete(I)V
+PLcom/android/server/location/ContextHubService$3;-><init>(Lcom/android/server/location/ContextHubService;I)V
+PLcom/android/server/location/ContextHubService$3;->onTransactionComplete(I)V
 HSPLcom/android/server/location/ContextHubService$4;-><init>(Lcom/android/server/location/ContextHubService;I)V
 HSPLcom/android/server/location/ContextHubService$4;->onQueryResponse(ILjava/util/List;)V
 HSPLcom/android/server/location/ContextHubService$ContextHubServiceCallback;-><init>(Lcom/android/server/location/ContextHubService;I)V
 HSPLcom/android/server/location/ContextHubService$ContextHubServiceCallback;->handleAppsInfo(Ljava/util/ArrayList;)V
-PLcom/android/server/location/ContextHubService$ContextHubServiceCallback;->handleClientMsg(Landroid/hardware/contexthub/V1_0/ContextHubMsg;)V
+HPLcom/android/server/location/ContextHubService$ContextHubServiceCallback;->handleClientMsg(Landroid/hardware/contexthub/V1_0/ContextHubMsg;)V
+PLcom/android/server/location/ContextHubService$ContextHubServiceCallback;->handleTxnResult(II)V
 HSPLcom/android/server/location/ContextHubService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/location/ContextHubService;->access$000(Lcom/android/server/location/ContextHubService;ILandroid/hardware/contexthub/V1_0/ContextHubMsg;)V
+HPLcom/android/server/location/ContextHubService;->access$000(Lcom/android/server/location/ContextHubService;ILandroid/hardware/contexthub/V1_0/ContextHubMsg;)V
+PLcom/android/server/location/ContextHubService;->access$100(Lcom/android/server/location/ContextHubService;III)V
 HSPLcom/android/server/location/ContextHubService;->access$400(Lcom/android/server/location/ContextHubService;ILjava/util/List;)V
 PLcom/android/server/location/ContextHubService;->access$500(Lcom/android/server/location/ContextHubService;)Lcom/android/server/location/NanoAppStateManager;
 HSPLcom/android/server/location/ContextHubService;->access$600(Lcom/android/server/location/ContextHubService;III[B)I
-PLcom/android/server/location/ContextHubService;->checkHalProxyAndContextHubId(ILandroid/hardware/location/IContextHubTransactionCallback;I)Z
-PLcom/android/server/location/ContextHubService;->checkPermissions()V
-PLcom/android/server/location/ContextHubService;->createClient(ILandroid/hardware/location/IContextHubClientCallback;)Landroid/hardware/location/IContextHubClient;
+PLcom/android/server/location/ContextHubService;->access$700(Lcom/android/server/location/ContextHubService;IILandroid/hardware/location/NanoAppBinary;)V
+PLcom/android/server/location/ContextHubService;->access$800(Lcom/android/server/location/ContextHubService;II)V
+HPLcom/android/server/location/ContextHubService;->checkHalProxyAndContextHubId(ILandroid/hardware/location/IContextHubTransactionCallback;I)Z
+HPLcom/android/server/location/ContextHubService;->checkPermissions()V
+HPLcom/android/server/location/ContextHubService;->createClient(ILandroid/hardware/location/IContextHubClientCallback;)Landroid/hardware/location/IContextHubClient;
 HSPLcom/android/server/location/ContextHubService;->createDefaultClientCallback(I)Landroid/hardware/location/IContextHubClientCallback;
+PLcom/android/server/location/ContextHubService;->createLoadTransactionCallback(ILandroid/hardware/location/NanoAppBinary;)Landroid/hardware/location/IContextHubTransactionCallback;
 HPLcom/android/server/location/ContextHubService;->createPendingIntentClient(ILandroid/app/PendingIntent;J)Landroid/hardware/location/IContextHubClient;
 HSPLcom/android/server/location/ContextHubService;->createQueryTransactionCallback(I)Landroid/hardware/location/IContextHubTransactionCallback;
+PLcom/android/server/location/ContextHubService;->createUnloadTransactionCallback(I)Landroid/hardware/location/IContextHubTransactionCallback;
+PLcom/android/server/location/ContextHubService;->dump(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/location/ContextHubService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/location/ContextHubService;->findNanoAppOnHub(ILandroid/hardware/location/NanoAppFilter;)[I
+HPLcom/android/server/location/ContextHubService;->findNanoAppOnHub(ILandroid/hardware/location/NanoAppFilter;)[I
 PLcom/android/server/location/ContextHubService;->getContextHubHandles()[I
 PLcom/android/server/location/ContextHubService;->getContextHubInfo(I)Landroid/hardware/location/ContextHubInfo;
 HSPLcom/android/server/location/ContextHubService;->getContextHubProxy()Landroid/hardware/contexthub/V1_0/IContexthub;
 PLcom/android/server/location/ContextHubService;->getContextHubs()Ljava/util/List;
-PLcom/android/server/location/ContextHubService;->getNanoAppInstanceInfo(I)Landroid/hardware/location/NanoAppInstanceInfo;
-PLcom/android/server/location/ContextHubService;->handleClientMessageCallback(ILandroid/hardware/contexthub/V1_0/ContextHubMsg;)V
+HPLcom/android/server/location/ContextHubService;->getNanoAppInstanceInfo(I)Landroid/hardware/location/NanoAppInstanceInfo;
+HPLcom/android/server/location/ContextHubService;->handleClientMessageCallback(ILandroid/hardware/contexthub/V1_0/ContextHubMsg;)V
+HPLcom/android/server/location/ContextHubService;->handleLoadResponseOldApi(IILandroid/hardware/location/NanoAppBinary;)V
 HSPLcom/android/server/location/ContextHubService;->handleQueryAppsCallback(ILjava/util/List;)V
-PLcom/android/server/location/ContextHubService;->isValidContextHubId(I)Z
-PLcom/android/server/location/ContextHubService;->lambda$findNanoAppOnHub$0(Landroid/hardware/location/NanoAppFilter;Ljava/util/ArrayList;Landroid/hardware/location/NanoAppInstanceInfo;)V
+PLcom/android/server/location/ContextHubService;->handleTransactionResultCallback(III)V
+PLcom/android/server/location/ContextHubService;->handleUnloadResponseOldApi(II)V
+HPLcom/android/server/location/ContextHubService;->isValidContextHubId(I)Z
+PLcom/android/server/location/ContextHubService;->lambda$dump$1(Ljava/io/PrintWriter;Landroid/hardware/location/NanoAppInstanceInfo;)V
+PLcom/android/server/location/ContextHubService;->lambda$dump$2(Landroid/util/proto/ProtoOutputStream;Landroid/hardware/location/ContextHubInfo;)V
+HPLcom/android/server/location/ContextHubService;->lambda$findNanoAppOnHub$0(Landroid/hardware/location/NanoAppFilter;Ljava/util/ArrayList;Landroid/hardware/location/NanoAppInstanceInfo;)V
+PLcom/android/server/location/ContextHubService;->loadNanoApp(ILandroid/hardware/location/NanoApp;)I
+PLcom/android/server/location/ContextHubService;->loadNanoAppOnHub(ILandroid/hardware/location/IContextHubTransactionCallback;Landroid/hardware/location/NanoAppBinary;)V
 HSPLcom/android/server/location/ContextHubService;->onMessageReceiptOldApi(III[B)I
-PLcom/android/server/location/ContextHubService;->queryNanoApps(ILandroid/hardware/location/IContextHubTransactionCallback;)V
+HPLcom/android/server/location/ContextHubService;->queryNanoApps(ILandroid/hardware/location/IContextHubTransactionCallback;)V
 HSPLcom/android/server/location/ContextHubService;->queryNanoAppsInternal(I)I
-PLcom/android/server/location/ContextHubService;->registerCallback(Landroid/hardware/location/IContextHubCallback;)I
-PLcom/android/server/location/ContextHubService;->sendMessage(IILandroid/hardware/location/ContextHubMessage;)I
+HPLcom/android/server/location/ContextHubService;->registerCallback(Landroid/hardware/location/IContextHubCallback;)I
+HPLcom/android/server/location/ContextHubService;->sendMessage(IILandroid/hardware/location/ContextHubMessage;)I
+PLcom/android/server/location/ContextHubService;->unloadNanoApp(I)I
+PLcom/android/server/location/ContextHubService;->unloadNanoAppFromHub(ILandroid/hardware/location/IContextHubTransactionCallback;J)V
 HSPLcom/android/server/location/ContextHubServiceTransaction;-><init>(II)V
 HSPLcom/android/server/location/ContextHubServiceTransaction;->getTimeout(Ljava/util/concurrent/TimeUnit;)J
+PLcom/android/server/location/ContextHubServiceTransaction;->getTransactionId()I
 HSPLcom/android/server/location/ContextHubServiceTransaction;->getTransactionType()I
 HSPLcom/android/server/location/ContextHubServiceTransaction;->setComplete()V
-PLcom/android/server/location/ContextHubServiceUtil;->checkPermissions(Landroid/content/Context;)V
+HPLcom/android/server/location/ContextHubServiceUtil;->checkPermissions(Landroid/content/Context;)V
 HPLcom/android/server/location/ContextHubServiceUtil;->copyToByteArrayList([BLjava/util/ArrayList;)V
 HSPLcom/android/server/location/ContextHubServiceUtil;->createContextHubInfoMap(Ljava/util/List;)Ljava/util/HashMap;
-PLcom/android/server/location/ContextHubServiceUtil;->createHidlContextHubMessage(SLandroid/hardware/location/NanoAppMessage;)Landroid/hardware/contexthub/V1_0/ContextHubMsg;
-PLcom/android/server/location/ContextHubServiceUtil;->createNanoAppMessage(Landroid/hardware/contexthub/V1_0/ContextHubMsg;)Landroid/hardware/location/NanoAppMessage;
+HPLcom/android/server/location/ContextHubServiceUtil;->createHidlContextHubMessage(SLandroid/hardware/location/NanoAppMessage;)Landroid/hardware/contexthub/V1_0/ContextHubMsg;
+HPLcom/android/server/location/ContextHubServiceUtil;->createHidlNanoAppBinary(Landroid/hardware/location/NanoAppBinary;)Landroid/hardware/contexthub/V1_0/NanoAppBinary;
+HPLcom/android/server/location/ContextHubServiceUtil;->createNanoAppMessage(Landroid/hardware/contexthub/V1_0/ContextHubMsg;)Landroid/hardware/location/NanoAppMessage;
 HSPLcom/android/server/location/ContextHubServiceUtil;->createNanoAppStateList(Ljava/util/List;)Ljava/util/List;
 HPLcom/android/server/location/ContextHubServiceUtil;->createPrimitiveByteArray(Ljava/util/ArrayList;)[B
-PLcom/android/server/location/ContextHubServiceUtil;->createPrimitiveIntArray(Ljava/util/Collection;)[I
-PLcom/android/server/location/ContextHubServiceUtil;->toTransactionResult(I)I
+HPLcom/android/server/location/ContextHubServiceUtil;->createPrimitiveIntArray(Ljava/util/Collection;)[I
+HPLcom/android/server/location/ContextHubServiceUtil;->toTransactionResult(I)I
+PLcom/android/server/location/ContextHubTransactionManager$1;-><init>(Lcom/android/server/location/ContextHubTransactionManager;IILandroid/hardware/location/NanoAppBinary;ILandroid/hardware/location/IContextHubTransactionCallback;)V
+PLcom/android/server/location/ContextHubTransactionManager$1;->onTransact()I
+PLcom/android/server/location/ContextHubTransactionManager$1;->onTransactionComplete(I)V
+PLcom/android/server/location/ContextHubTransactionManager$2;-><init>(Lcom/android/server/location/ContextHubTransactionManager;IIIJLandroid/hardware/location/IContextHubTransactionCallback;)V
+PLcom/android/server/location/ContextHubTransactionManager$2;->onTransact()I
+PLcom/android/server/location/ContextHubTransactionManager$2;->onTransactionComplete(I)V
 HSPLcom/android/server/location/ContextHubTransactionManager$5;-><init>(Lcom/android/server/location/ContextHubTransactionManager;IIILandroid/hardware/location/IContextHubTransactionCallback;)V
 HSPLcom/android/server/location/ContextHubTransactionManager$5;->onQueryResponse(ILjava/util/List;)V
 HSPLcom/android/server/location/ContextHubTransactionManager$5;->onTransact()I
 HSPLcom/android/server/location/ContextHubTransactionManager;-><init>(Landroid/hardware/contexthub/V1_0/IContexthub;Lcom/android/server/location/ContextHubClientManager;Lcom/android/server/location/NanoAppStateManager;)V
 HSPLcom/android/server/location/ContextHubTransactionManager;->access$000(Lcom/android/server/location/ContextHubTransactionManager;)Landroid/hardware/contexthub/V1_0/IContexthub;
+PLcom/android/server/location/ContextHubTransactionManager;->access$100(Lcom/android/server/location/ContextHubTransactionManager;)Lcom/android/server/location/NanoAppStateManager;
+PLcom/android/server/location/ContextHubTransactionManager;->access$200(Lcom/android/server/location/ContextHubTransactionManager;)Lcom/android/server/location/ContextHubClientManager;
 HSPLcom/android/server/location/ContextHubTransactionManager;->addTransaction(Lcom/android/server/location/ContextHubServiceTransaction;)V
+PLcom/android/server/location/ContextHubTransactionManager;->createLoadTransaction(ILandroid/hardware/location/NanoAppBinary;Landroid/hardware/location/IContextHubTransactionCallback;)Lcom/android/server/location/ContextHubServiceTransaction;
 HSPLcom/android/server/location/ContextHubTransactionManager;->createQueryTransaction(ILandroid/hardware/location/IContextHubTransactionCallback;)Lcom/android/server/location/ContextHubServiceTransaction;
+PLcom/android/server/location/ContextHubTransactionManager;->createUnloadTransaction(IJLandroid/hardware/location/IContextHubTransactionCallback;)Lcom/android/server/location/ContextHubServiceTransaction;
 HSPLcom/android/server/location/ContextHubTransactionManager;->onQueryResponse(Ljava/util/List;)V
+PLcom/android/server/location/ContextHubTransactionManager;->onTransactionResponse(II)V
 HSPLcom/android/server/location/ContextHubTransactionManager;->removeTransactionAndStartNext()V
 HSPLcom/android/server/location/ContextHubTransactionManager;->startNextTransaction()V
-PLcom/android/server/location/CountryDetectorBase;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/location/CountryDetectorBase;-><init>(Landroid/content/Context;)V
+PLcom/android/server/location/CountryDetectorBase;->notifyListener(Landroid/location/Country;)V
+PLcom/android/server/location/CountryDetectorBase;->setCountryListener(Landroid/location/CountryListener;)V
 HSPLcom/android/server/location/ExponentialBackOff;-><init>(JJ)V
+PLcom/android/server/location/ExponentialBackOff;->nextBackoffMillis()J
 PLcom/android/server/location/ExponentialBackOff;->reset()V
+HSPLcom/android/server/location/GeocoderProxy;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/location/GeocoderProxy;-><init>(Landroid/content/Context;III)V
 HSPLcom/android/server/location/GeocoderProxy;->bind()Z
 HSPLcom/android/server/location/GeocoderProxy;->createAndBind(Landroid/content/Context;III)Lcom/android/server/location/GeocoderProxy;
+HSPLcom/android/server/location/GeocoderProxy;->createAndRegister(Landroid/content/Context;)Lcom/android/server/location/GeocoderProxy;
+PLcom/android/server/location/GeocoderProxy;->getFromLocation(DDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String;
+PLcom/android/server/location/GeocoderProxy;->getFromLocationName(Ljava/lang/String;DDDDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String;
+HPLcom/android/server/location/GeocoderProxy;->lambda$getFromLocation$0(DDILandroid/location/GeocoderParams;Ljava/util/List;Landroid/os/IBinder;)Ljava/lang/String;
+PLcom/android/server/location/GeocoderProxy;->lambda$getFromLocationName$1(Ljava/lang/String;DDDDILandroid/location/GeocoderParams;Ljava/util/List;Landroid/os/IBinder;)Ljava/lang/String;
+HSPLcom/android/server/location/GeocoderProxy;->register()Z
 HSPLcom/android/server/location/GeofenceManager$GeofenceHandler;-><init>(Lcom/android/server/location/GeofenceManager;Landroid/os/Looper;)V
 HSPLcom/android/server/location/GeofenceManager$GeofenceHandler;-><init>(Lcom/android/server/location/GeofenceManager;Landroid/os/Looper;Lcom/android/server/location/GeofenceManager$1;)V
+PLcom/android/server/location/GeofenceManager$GeofenceHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/location/GeofenceManager;-><clinit>()V
 HSPLcom/android/server/location/GeofenceManager;-><init>(Landroid/content/Context;Lcom/android/server/location/LocationSettingsStore;)V
+HSPLcom/android/server/location/GeofenceManager;-><init>(Landroid/content/Context;Lcom/android/server/location/SettingsHelper;)V
+PLcom/android/server/location/GeofenceManager;->access$100(Lcom/android/server/location/GeofenceManager;)V
+PLcom/android/server/location/GeofenceManager;->addFence(Landroid/location/LocationRequest;Landroid/location/Geofence;Landroid/app/PendingIntent;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/location/GeofenceManager;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/location/GeofenceManager;->getFreshLocationLocked()Landroid/location/Location;
+PLcom/android/server/location/GeofenceManager;->onProviderDisabled(Ljava/lang/String;)V
+PLcom/android/server/location/GeofenceManager;->onProviderEnabled(Ljava/lang/String;)V
+PLcom/android/server/location/GeofenceManager;->removeExpiredFencesLocked()V
+PLcom/android/server/location/GeofenceManager;->scheduleUpdateFencesLocked()V
+PLcom/android/server/location/GeofenceManager;->updateFences()V
 HSPLcom/android/server/location/GeofenceProxy$1;-><init>(Lcom/android/server/location/GeofenceProxy;Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;IIILandroid/os/Handler;)V
 PLcom/android/server/location/GeofenceProxy$1;->onBind()V
 HSPLcom/android/server/location/GeofenceProxy$GeofenceProxyServiceConnection;-><init>(Lcom/android/server/location/GeofenceProxy;)V
 HSPLcom/android/server/location/GeofenceProxy$GeofenceProxyServiceConnection;-><init>(Lcom/android/server/location/GeofenceProxy;Lcom/android/server/location/GeofenceProxy$1;)V
-PLcom/android/server/location/GeofenceProxy$GeofenceProxyServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/location/GeofenceProxy$GeofenceProxyServiceConnection;->lambda$onServiceConnected$0(Lcom/android/server/location/GeofenceProxy;Landroid/os/IBinder;)V
+HSPLcom/android/server/location/GeofenceProxy$GeofenceProxyServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 HSPLcom/android/server/location/GeofenceProxy;-><init>(Landroid/content/Context;IIILandroid/location/IGpsGeofenceHardware;Landroid/location/IFusedGeofenceHardware;)V
-PLcom/android/server/location/GeofenceProxy;->access$000(Lcom/android/server/location/GeofenceProxy;)Lcom/android/server/ServiceWatcher$BinderRunner;
-PLcom/android/server/location/GeofenceProxy;->access$200(Lcom/android/server/location/GeofenceProxy;)Landroid/location/IGpsGeofenceHardware;
-PLcom/android/server/location/GeofenceProxy;->access$300(Lcom/android/server/location/GeofenceProxy;)Landroid/location/IFusedGeofenceHardware;
-PLcom/android/server/location/GeofenceProxy;->access$402(Lcom/android/server/location/GeofenceProxy;Landroid/hardware/location/IGeofenceHardware;)Landroid/hardware/location/IGeofenceHardware;
-PLcom/android/server/location/GeofenceProxy;->access$500(Lcom/android/server/location/GeofenceProxy;)Lcom/android/server/ServiceWatcher;
+HSPLcom/android/server/location/GeofenceProxy;-><init>(Landroid/content/Context;Landroid/location/IGpsGeofenceHardware;)V
+HSPLcom/android/server/location/GeofenceProxy;->access$000(Lcom/android/server/location/GeofenceProxy;)Lcom/android/server/ServiceWatcher$BinderRunner;
+PLcom/android/server/location/GeofenceProxy;->access$100(Lcom/android/server/location/GeofenceProxy;)Landroid/location/IGpsGeofenceHardware;
+HSPLcom/android/server/location/GeofenceProxy;->access$200(Lcom/android/server/location/GeofenceProxy;)Landroid/location/IGpsGeofenceHardware;
+PLcom/android/server/location/GeofenceProxy;->access$202(Lcom/android/server/location/GeofenceProxy;Landroid/hardware/location/IGeofenceHardware;)Landroid/hardware/location/IGeofenceHardware;
+HSPLcom/android/server/location/GeofenceProxy;->access$300(Lcom/android/server/location/GeofenceProxy;)Landroid/location/IFusedGeofenceHardware;
+PLcom/android/server/location/GeofenceProxy;->access$300(Lcom/android/server/location/GeofenceProxy;)Lcom/android/server/ServiceWatcher;
+PLcom/android/server/location/GeofenceProxy;->access$400(Lcom/android/server/location/GeofenceProxy;Landroid/os/IBinder;)V
+HSPLcom/android/server/location/GeofenceProxy;->access$402(Lcom/android/server/location/GeofenceProxy;Landroid/hardware/location/IGeofenceHardware;)Landroid/hardware/location/IGeofenceHardware;
+HSPLcom/android/server/location/GeofenceProxy;->access$500(Lcom/android/server/location/GeofenceProxy;)Lcom/android/server/ServiceWatcher;
 HSPLcom/android/server/location/GeofenceProxy;->bind()Z
 HSPLcom/android/server/location/GeofenceProxy;->createAndBind(Landroid/content/Context;IIILandroid/location/IGpsGeofenceHardware;Landroid/location/IFusedGeofenceHardware;)Lcom/android/server/location/GeofenceProxy;
+HSPLcom/android/server/location/GeofenceProxy;->createAndBind(Landroid/content/Context;Landroid/location/IGpsGeofenceHardware;)Lcom/android/server/location/GeofenceProxy;
+PLcom/android/server/location/GeofenceProxy;->lambda$hIfaTtsg4NqVfDRkaCxUg6rx90I(Lcom/android/server/location/GeofenceProxy;Landroid/os/IBinder;)V
 PLcom/android/server/location/GeofenceProxy;->lambda$new$0$GeofenceProxy(Landroid/os/IBinder;)V
+HSPLcom/android/server/location/GeofenceProxy;->register(Landroid/content/Context;)Z
+PLcom/android/server/location/GeofenceProxy;->updateGeofenceHardware(Landroid/os/IBinder;)V
+PLcom/android/server/location/GeofenceState;-><init>(Landroid/location/Geofence;JIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;)V
 HSPLcom/android/server/location/GnssBatchingProvider$GnssBatchingProviderNative;-><init>()V
+PLcom/android/server/location/GnssBatchingProvider$GnssBatchingProviderNative;->cleanupBatching()V
 HSPLcom/android/server/location/GnssBatchingProvider$GnssBatchingProviderNative;->initBatching()Z
+PLcom/android/server/location/GnssBatchingProvider$GnssBatchingProviderNative;->stopBatch()Z
 HSPLcom/android/server/location/GnssBatchingProvider;-><clinit>()V
 HSPLcom/android/server/location/GnssBatchingProvider;-><init>()V
 HSPLcom/android/server/location/GnssBatchingProvider;-><init>(Lcom/android/server/location/GnssBatchingProvider$GnssBatchingProviderNative;)V
+PLcom/android/server/location/GnssBatchingProvider;->access$300()Z
 HSPLcom/android/server/location/GnssBatchingProvider;->access$400()Z
+PLcom/android/server/location/GnssBatchingProvider;->access$500()V
 PLcom/android/server/location/GnssBatchingProvider;->disable()V
 HSPLcom/android/server/location/GnssBatchingProvider;->enable()V
 HSPLcom/android/server/location/GnssBatchingProvider;->resumeIfStarted()V
+PLcom/android/server/location/GnssBatchingProvider;->stop()Z
 HSPLcom/android/server/location/GnssCapabilitiesProvider;-><clinit>()V
 HSPLcom/android/server/location/GnssCapabilitiesProvider;-><init>()V
+PLcom/android/server/location/GnssCapabilitiesProvider;->getGnssCapabilities()J
 HSPLcom/android/server/location/GnssCapabilitiesProvider;->hasCapability(II)Z
 HSPLcom/android/server/location/GnssCapabilitiesProvider;->setTopHalCapabilities(I)V
 HSPLcom/android/server/location/GnssConfiguration$1;-><init>(Lcom/android/server/location/GnssConfiguration;Lcom/android/server/location/GnssConfiguration$HalInterfaceVersion;)V
 HSPLcom/android/server/location/GnssConfiguration$1;->lambda$new$0(I)Z
 HSPLcom/android/server/location/GnssConfiguration$1;->lambda$new$1(I)Z
+HSPLcom/android/server/location/GnssConfiguration$1;->lambda$new$2(I)Z
 HSPLcom/android/server/location/GnssConfiguration$1;->lambda$new$3(I)Z
 HSPLcom/android/server/location/GnssConfiguration$1;->lambda$new$4(I)Z
 HSPLcom/android/server/location/GnssConfiguration$1;->lambda$new$5(I)Z
+HSPLcom/android/server/location/GnssConfiguration$1;->lambda$new$6(I)Z
 HSPLcom/android/server/location/GnssConfiguration$HalInterfaceVersion;-><init>(II)V
 HSPLcom/android/server/location/GnssConfiguration;-><clinit>()V
 HSPLcom/android/server/location/GnssConfiguration;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/location/GnssConfiguration;->access$000(Lcom/android/server/location/GnssConfiguration$HalInterfaceVersion;)Z
 HSPLcom/android/server/location/GnssConfiguration;->access$100(Lcom/android/server/location/GnssConfiguration$HalInterfaceVersion;)Z
+HSPLcom/android/server/location/GnssConfiguration;->access$200(I)Z
 HSPLcom/android/server/location/GnssConfiguration;->access$300(I)Z
 HSPLcom/android/server/location/GnssConfiguration;->access$400(I)Z
 HSPLcom/android/server/location/GnssConfiguration;->access$500(I)Z
+HSPLcom/android/server/location/GnssConfiguration;->access$600(I)Z
 HSPLcom/android/server/location/GnssConfiguration;->access$700(I)Z
 HSPLcom/android/server/location/GnssConfiguration;->access$800(I)Z
 HSPLcom/android/server/location/GnssConfiguration;->getC2KHost()Ljava/lang/String;
 HSPLcom/android/server/location/GnssConfiguration;->getC2KPort(I)I
 HSPLcom/android/server/location/GnssConfiguration;->getEsExtensionSec()I
 HSPLcom/android/server/location/GnssConfiguration;->getIntConfig(Ljava/lang/String;I)I
+PLcom/android/server/location/GnssConfiguration;->getLppProfile()Ljava/lang/String;
 HSPLcom/android/server/location/GnssConfiguration;->getProxyApps()Ljava/util/List;
 HSPLcom/android/server/location/GnssConfiguration;->getRangeCheckedConfigEsExtensionSec()I
 HSPLcom/android/server/location/GnssConfiguration;->getSuplEs(I)I
@@ -10600,21 +17503,24 @@
 HSPLcom/android/server/location/GnssConfiguration;->logConfigurations()V
 HSPLcom/android/server/location/GnssConfiguration;->reloadGpsProperties()V
 HSPLcom/android/server/location/GnssConfiguration;->setSatelliteBlacklist([I[I)V
-PLcom/android/server/location/GnssGeofenceProvider$GeofenceEntry;-><init>()V
-PLcom/android/server/location/GnssGeofenceProvider$GeofenceEntry;-><init>(Lcom/android/server/location/GnssGeofenceProvider$1;)V
+HPLcom/android/server/location/GnssGeofenceProvider$GeofenceEntry;-><init>()V
+HPLcom/android/server/location/GnssGeofenceProvider$GeofenceEntry;-><init>(Lcom/android/server/location/GnssGeofenceProvider$1;)V
 HSPLcom/android/server/location/GnssGeofenceProvider$GnssGeofenceProviderNative;-><init>()V
-PLcom/android/server/location/GnssGeofenceProvider$GnssGeofenceProviderNative;->isGeofenceSupported()Z
+PLcom/android/server/location/GnssGeofenceProvider$GnssGeofenceProviderNative;->addGeofence(IDDDIIII)Z
+HSPLcom/android/server/location/GnssGeofenceProvider$GnssGeofenceProviderNative;->isGeofenceSupported()Z
+PLcom/android/server/location/GnssGeofenceProvider$GnssGeofenceProviderNative;->removeGeofence(I)Z
 HSPLcom/android/server/location/GnssGeofenceProvider;-><clinit>()V
 HSPLcom/android/server/location/GnssGeofenceProvider;-><init>()V
 HSPLcom/android/server/location/GnssGeofenceProvider;-><init>(Lcom/android/server/location/GnssGeofenceProvider$GnssGeofenceProviderNative;)V
-PLcom/android/server/location/GnssGeofenceProvider;->access$100()Z
-PLcom/android/server/location/GnssGeofenceProvider;->access$200(IDDDIIII)Z
-PLcom/android/server/location/GnssGeofenceProvider;->addCircularHardwareGeofence(IDDDIIII)Z
-PLcom/android/server/location/GnssGeofenceProvider;->isHardwareGeofenceSupported()Z
-PLcom/android/server/location/GnssGeofenceProvider;->removeHardwareGeofence(I)Z
+HSPLcom/android/server/location/GnssGeofenceProvider;->access$100()Z
+HPLcom/android/server/location/GnssGeofenceProvider;->access$200(IDDDIIII)Z
+HPLcom/android/server/location/GnssGeofenceProvider;->access$300(I)Z
+HPLcom/android/server/location/GnssGeofenceProvider;->addCircularHardwareGeofence(IDDDIIII)Z
+HSPLcom/android/server/location/GnssGeofenceProvider;->isHardwareGeofenceSupported()Z
+HPLcom/android/server/location/GnssGeofenceProvider;->removeHardwareGeofence(I)Z
 HSPLcom/android/server/location/GnssGeofenceProvider;->resumeIfStarted()V
 HSPLcom/android/server/location/GnssLocationProvider$1;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
-PLcom/android/server/location/GnssLocationProvider$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/location/GnssLocationProvider$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/location/GnssLocationProvider$2;-><init>(Lcom/android/server/location/GnssLocationProvider;Landroid/content/Context;Landroid/os/Handler;)V
 PLcom/android/server/location/GnssLocationProvider$2;->isAvailableInPlatform()Z
 PLcom/android/server/location/GnssLocationProvider$2;->isGpsEnabled()Z
@@ -10623,8 +17529,9 @@
 HSPLcom/android/server/location/GnssLocationProvider$4;-><init>(Lcom/android/server/location/GnssLocationProvider;Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/location/GnssLocationProvider$4;->isGpsEnabled()Z
 HSPLcom/android/server/location/GnssLocationProvider$5;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/location/GnssLocationProvider$6;-><init>(Lcom/android/server/location/GnssLocationProvider;Landroid/os/Handler;)V
-PLcom/android/server/location/GnssLocationProvider$6;->onChange(Z)V
+HSPLcom/android/server/location/GnssLocationProvider$6;->onChange(Z)V
 HSPLcom/android/server/location/GnssLocationProvider$7;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
 HSPLcom/android/server/location/GnssLocationProvider$8;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
 HSPLcom/android/server/location/GnssLocationProvider$FusedLocationListener;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
@@ -10633,19 +17540,22 @@
 HSPLcom/android/server/location/GnssLocationProvider$LocationChangeListener;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
 HSPLcom/android/server/location/GnssLocationProvider$LocationChangeListener;-><init>(Lcom/android/server/location/GnssLocationProvider;Lcom/android/server/location/GnssLocationProvider$1;)V
 PLcom/android/server/location/GnssLocationProvider$LocationChangeListener;->access$1206(Lcom/android/server/location/GnssLocationProvider$LocationChangeListener;)I
+PLcom/android/server/location/GnssLocationProvider$LocationChangeListener;->access$1208(Lcom/android/server/location/GnssLocationProvider$LocationChangeListener;)I
 PLcom/android/server/location/GnssLocationProvider$LocationChangeListener;->onProviderDisabled(Ljava/lang/String;)V
+PLcom/android/server/location/GnssLocationProvider$LocationChangeListener;->onProviderEnabled(Ljava/lang/String;)V
 HSPLcom/android/server/location/GnssLocationProvider$LocationExtras;-><init>()V
-PLcom/android/server/location/GnssLocationProvider$LocationExtras;->getBundle()Landroid/os/Bundle;
-PLcom/android/server/location/GnssLocationProvider$LocationExtras;->set(III)V
-PLcom/android/server/location/GnssLocationProvider$LocationExtras;->setBundle(Landroid/os/Bundle;)V
+HPLcom/android/server/location/GnssLocationProvider$LocationExtras;->getBundle()Landroid/os/Bundle;
+HPLcom/android/server/location/GnssLocationProvider$LocationExtras;->reset()V
+HPLcom/android/server/location/GnssLocationProvider$LocationExtras;->set(III)V
+HPLcom/android/server/location/GnssLocationProvider$LocationExtras;->setBundle(Landroid/os/Bundle;)V
 HSPLcom/android/server/location/GnssLocationProvider$NetworkLocationListener;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
 HSPLcom/android/server/location/GnssLocationProvider$NetworkLocationListener;-><init>(Lcom/android/server/location/GnssLocationProvider;Lcom/android/server/location/GnssLocationProvider$1;)V
-PLcom/android/server/location/GnssLocationProvider$NetworkLocationListener;->onLocationChanged(Landroid/location/Location;)V
+HPLcom/android/server/location/GnssLocationProvider$NetworkLocationListener;->onLocationChanged(Landroid/location/Location;)V
 HSPLcom/android/server/location/GnssLocationProvider$ProviderHandler;-><init>(Lcom/android/server/location/GnssLocationProvider;Landroid/os/Looper;)V
 HSPLcom/android/server/location/GnssLocationProvider$ProviderHandler;->handleInitialize()V
 HSPLcom/android/server/location/GnssLocationProvider$ProviderHandler;->handleMessage(Landroid/os/Message;)V
 HPLcom/android/server/location/GnssLocationProvider$SvStatusInfo;-><init>()V
-PLcom/android/server/location/GnssLocationProvider$SvStatusInfo;-><init>(Lcom/android/server/location/GnssLocationProvider$1;)V
+HPLcom/android/server/location/GnssLocationProvider$SvStatusInfo;-><init>(Lcom/android/server/location/GnssLocationProvider$1;)V
 HPLcom/android/server/location/GnssLocationProvider$SvStatusInfo;->access$1400(Lcom/android/server/location/GnssLocationProvider$SvStatusInfo;)I
 PLcom/android/server/location/GnssLocationProvider$SvStatusInfo;->access$1402(Lcom/android/server/location/GnssLocationProvider$SvStatusInfo;I)I
 HPLcom/android/server/location/GnssLocationProvider$SvStatusInfo;->access$1500(Lcom/android/server/location/GnssLocationProvider$SvStatusInfo;)[I
@@ -10661,26 +17571,43 @@
 HPLcom/android/server/location/GnssLocationProvider$SvStatusInfo;->access$2000(Lcom/android/server/location/GnssLocationProvider$SvStatusInfo;)[F
 PLcom/android/server/location/GnssLocationProvider$SvStatusInfo;->access$2002(Lcom/android/server/location/GnssLocationProvider$SvStatusInfo;[F)[F
 HSPLcom/android/server/location/GnssLocationProvider;-><clinit>()V
+HSPLcom/android/server/location/GnssLocationProvider;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/location/GnssLocationProvider;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/location/GnssLocationProvider;-><init>(Landroid/content/Context;Lcom/android/server/location/AbstractLocationProvider$LocationProviderManager;Landroid/os/Looper;)V
+PLcom/android/server/location/GnssLocationProvider;->access$1002(Lcom/android/server/location/GnssLocationProvider;Z)Z
 HSPLcom/android/server/location/GnssLocationProvider;->access$1100(Lcom/android/server/location/GnssLocationProvider;)V
 HSPLcom/android/server/location/GnssLocationProvider;->access$200()Z
 HSPLcom/android/server/location/GnssLocationProvider;->access$2500(Lcom/android/server/location/GnssLocationProvider;Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+PLcom/android/server/location/GnssLocationProvider;->access$2600(Lcom/android/server/location/GnssLocationProvider;)Lcom/android/server/location/NtpTimeHelper;
+PLcom/android/server/location/GnssLocationProvider;->access$2700(Lcom/android/server/location/GnssLocationProvider;ZZ)V
+HPLcom/android/server/location/GnssLocationProvider;->access$3000(Lcom/android/server/location/GnssLocationProvider;ZLandroid/location/Location;)V
+HPLcom/android/server/location/GnssLocationProvider;->access$3100(Lcom/android/server/location/GnssLocationProvider;Lcom/android/server/location/GnssLocationProvider$SvStatusInfo;)V
 PLcom/android/server/location/GnssLocationProvider;->access$3200(Lcom/android/server/location/GnssLocationProvider;)V
 HSPLcom/android/server/location/GnssLocationProvider;->access$3300(Lcom/android/server/location/GnssLocationProvider;)Landroid/os/PowerManager$WakeLock;
 HSPLcom/android/server/location/GnssLocationProvider;->access$3500(Lcom/android/server/location/GnssLocationProvider;Z)V
 HSPLcom/android/server/location/GnssLocationProvider;->access$3600()Z
 HSPLcom/android/server/location/GnssLocationProvider;->access$3702(Lcom/android/server/location/GnssLocationProvider;Lcom/android/server/location/GnssVisibilityControl;)Lcom/android/server/location/GnssVisibilityControl;
+HSPLcom/android/server/location/GnssLocationProvider;->access$3800(Lcom/android/server/location/GnssLocationProvider;)Landroid/content/Context;
 HSPLcom/android/server/location/GnssLocationProvider;->access$3800(Lcom/android/server/location/GnssLocationProvider;)Landroid/os/Looper;
+HSPLcom/android/server/location/GnssLocationProvider;->access$3900(Lcom/android/server/location/GnssLocationProvider;)Landroid/os/Looper;
 HSPLcom/android/server/location/GnssLocationProvider;->access$3900(Lcom/android/server/location/GnssLocationProvider;)Lcom/android/internal/location/GpsNetInitiatedHandler;
+HSPLcom/android/server/location/GnssLocationProvider;->access$4000(Lcom/android/server/location/GnssLocationProvider;)Lcom/android/internal/location/GpsNetInitiatedHandler;
 HSPLcom/android/server/location/GnssLocationProvider;->access$4000(Lcom/android/server/location/GnssLocationProvider;)V
 HSPLcom/android/server/location/GnssLocationProvider;->access$4100(Lcom/android/server/location/GnssLocationProvider;)Landroid/content/BroadcastReceiver;
+HSPLcom/android/server/location/GnssLocationProvider;->access$4100(Lcom/android/server/location/GnssLocationProvider;)V
+HSPLcom/android/server/location/GnssLocationProvider;->access$4200(Lcom/android/server/location/GnssLocationProvider;)Landroid/content/BroadcastReceiver;
 HSPLcom/android/server/location/GnssLocationProvider;->access$4200(Lcom/android/server/location/GnssLocationProvider;)Lcom/android/server/location/GnssNetworkConnectivityHandler;
+HSPLcom/android/server/location/GnssLocationProvider;->access$4300(Lcom/android/server/location/GnssLocationProvider;)Lcom/android/server/location/GnssNetworkConnectivityHandler;
+PLcom/android/server/location/GnssLocationProvider;->access$4400(Lcom/android/server/location/GnssLocationProvider;Landroid/location/Location;)V
+PLcom/android/server/location/GnssLocationProvider;->access$4500(Lcom/android/server/location/GnssLocationProvider;Landroid/location/Location;)V
+PLcom/android/server/location/GnssLocationProvider;->access$500(Lcom/android/server/location/GnssLocationProvider;)Landroid/os/PowerManager;
+PLcom/android/server/location/GnssLocationProvider;->access$600(Lcom/android/server/location/GnssLocationProvider;)Lcom/android/server/DeviceIdleInternal$StationaryListener;
 PLcom/android/server/location/GnssLocationProvider;->access$700(Lcom/android/server/location/GnssLocationProvider;)Landroid/os/Handler;
 PLcom/android/server/location/GnssLocationProvider;->access$800(Lcom/android/server/location/GnssLocationProvider;)V
 HSPLcom/android/server/location/GnssLocationProvider;->access$900(Lcom/android/server/location/GnssLocationProvider;)Z
 PLcom/android/server/location/GnssLocationProvider;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/location/GnssLocationProvider;->ensureInitialized()V
-PLcom/android/server/location/GnssLocationProvider;->getGeofenceStatus(I)I
+HPLcom/android/server/location/GnssLocationProvider;->getGeofenceStatus(I)I
 HSPLcom/android/server/location/GnssLocationProvider;->getGnssBatchingProvider()Lcom/android/server/location/GnssBatchingProvider;
 HSPLcom/android/server/location/GnssLocationProvider;->getGnssCapabilitiesProvider()Lcom/android/server/location/GnssCapabilitiesProvider;
 HSPLcom/android/server/location/GnssLocationProvider;->getGnssMeasurementCorrectionsProvider()Lcom/android/server/location/GnssMeasurementCorrectionsProvider;
@@ -10691,65 +17618,76 @@
 HSPLcom/android/server/location/GnssLocationProvider;->getGnssSystemInfoProvider()Lcom/android/server/location/GnssLocationProvider$GnssSystemInfoProvider;
 HSPLcom/android/server/location/GnssLocationProvider;->getGpsGeofenceProxy()Landroid/location/IGpsGeofenceHardware;
 HSPLcom/android/server/location/GnssLocationProvider;->getNetInitiatedListener()Landroid/location/INetInitiatedListener;
+PLcom/android/server/location/GnssLocationProvider;->getSuplMode(Z)I
 HPLcom/android/server/location/GnssLocationProvider;->handleDisable()V
 HSPLcom/android/server/location/GnssLocationProvider;->handleEnable()V
-PLcom/android/server/location/GnssLocationProvider;->handleReportLocation(ZLandroid/location/Location;)V
+HPLcom/android/server/location/GnssLocationProvider;->handleReportLocation(ZLandroid/location/Location;)V
 HPLcom/android/server/location/GnssLocationProvider;->handleReportSvStatus(Lcom/android/server/location/GnssLocationProvider$SvStatusInfo;)V
-PLcom/android/server/location/GnssLocationProvider;->handleRequestLocation(ZZ)V
+HPLcom/android/server/location/GnssLocationProvider;->handleRequestLocation(ZZ)V
 HSPLcom/android/server/location/GnssLocationProvider;->handleSetRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
 HSPLcom/android/server/location/GnssLocationProvider;->hasCapability(I)Z
 HPLcom/android/server/location/GnssLocationProvider;->injectLocation(Landroid/location/Location;)V
 PLcom/android/server/location/GnssLocationProvider;->injectTime(JJI)V
 HSPLcom/android/server/location/GnssLocationProvider;->isGpsEnabled()Z
+PLcom/android/server/location/GnssLocationProvider;->isRequestLocationRateLimited()Z
 HSPLcom/android/server/location/GnssLocationProvider;->isSupported()Z
 PLcom/android/server/location/GnssLocationProvider;->lambda$Q6M8z_ZBiD7BNs3kvNmVrqoHSng(Lcom/android/server/location/GnssLocationProvider;)V
 PLcom/android/server/location/GnssLocationProvider;->lambda$getGnssMetricsProvider$9$GnssLocationProvider()Ljava/lang/String;
 HPLcom/android/server/location/GnssLocationProvider;->lambda$handleRequestLocation$2(Lcom/android/server/location/GnssLocationProvider$LocationChangeListener;Ljava/lang/String;Landroid/location/LocationManager;)V
 PLcom/android/server/location/GnssLocationProvider;->lambda$new$0$GnssLocationProvider(Z)V
 HSPLcom/android/server/location/GnssLocationProvider;->lambda$onUpdateSatelliteBlacklist$1$GnssLocationProvider([I[I)V
-PLcom/android/server/location/GnssLocationProvider;->lambda$reportGeofenceAddStatus$12$GnssLocationProvider(II)V
-PLcom/android/server/location/GnssLocationProvider;->lambda$reportGeofenceRemoveStatus$13$GnssLocationProvider(II)V
+HPLcom/android/server/location/GnssLocationProvider;->lambda$reportGeofenceAddStatus$12$GnssLocationProvider(II)V
+HPLcom/android/server/location/GnssLocationProvider;->lambda$reportGeofenceRemoveStatus$13$GnssLocationProvider(II)V
 PLcom/android/server/location/GnssLocationProvider;->lambda$reportGeofenceStatus$11$GnssLocationProvider(ILandroid/location/Location;)V
-PLcom/android/server/location/GnssLocationProvider;->lambda$reportGeofenceTransition$10$GnssLocationProvider(ILandroid/location/Location;IJ)V
+HPLcom/android/server/location/GnssLocationProvider;->lambda$reportGeofenceTransition$10$GnssLocationProvider(ILandroid/location/Location;IJ)V
 HPLcom/android/server/location/GnssLocationProvider;->lambda$reportMeasurementData$4$GnssLocationProvider(Landroid/location/GnssMeasurementsEvent;)V
 HSPLcom/android/server/location/GnssLocationProvider;->lambda$setTopHalCapabilities$6$GnssLocationProvider(I)V
+PLcom/android/server/location/GnssLocationProvider;->onExtraCommand(IILjava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/location/GnssLocationProvider;->onNetworkAvailable()V
+HSPLcom/android/server/location/GnssLocationProvider;->onSetRequest(Lcom/android/internal/location/ProviderRequest;)V
 HSPLcom/android/server/location/GnssLocationProvider;->onSetRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
 HSPLcom/android/server/location/GnssLocationProvider;->onUpdateSatelliteBlacklist([I[I)V
 HSPLcom/android/server/location/GnssLocationProvider;->reloadGpsProperties()V
-PLcom/android/server/location/GnssLocationProvider;->reportGeofenceAddStatus(II)V
-PLcom/android/server/location/GnssLocationProvider;->reportGeofenceRemoveStatus(II)V
+HPLcom/android/server/location/GnssLocationProvider;->reportAGpsStatus(II[B)V
+HPLcom/android/server/location/GnssLocationProvider;->reportGeofenceAddStatus(II)V
+HPLcom/android/server/location/GnssLocationProvider;->reportGeofenceRemoveStatus(II)V
 PLcom/android/server/location/GnssLocationProvider;->reportGeofenceStatus(ILandroid/location/Location;)V
-PLcom/android/server/location/GnssLocationProvider;->reportGeofenceTransition(ILandroid/location/Location;IJ)V
-PLcom/android/server/location/GnssLocationProvider;->reportLocation(ZLandroid/location/Location;)V
-PLcom/android/server/location/GnssLocationProvider;->reportMeasurementData(Landroid/location/GnssMeasurementsEvent;)V
+HPLcom/android/server/location/GnssLocationProvider;->reportGeofenceTransition(ILandroid/location/Location;IJ)V
+HPLcom/android/server/location/GnssLocationProvider;->reportLocation(ZLandroid/location/Location;)V
+HPLcom/android/server/location/GnssLocationProvider;->reportMeasurementData(Landroid/location/GnssMeasurementsEvent;)V
+PLcom/android/server/location/GnssLocationProvider;->reportNfwNotification(Ljava/lang/String;BLjava/lang/String;BLjava/lang/String;BZZ)V
 HPLcom/android/server/location/GnssLocationProvider;->reportNmea(J)V
-PLcom/android/server/location/GnssLocationProvider;->reportStatus(I)V
+HPLcom/android/server/location/GnssLocationProvider;->reportStatus(I)V
 HPLcom/android/server/location/GnssLocationProvider;->reportSvStatus(I[I[F[F[F[F[F)V
-PLcom/android/server/location/GnssLocationProvider;->requestLocation(ZZ)V
+HPLcom/android/server/location/GnssLocationProvider;->requestLocation(ZZ)V
+PLcom/android/server/location/GnssLocationProvider;->requestUtcTime()V
 HSPLcom/android/server/location/GnssLocationProvider;->restartLocationRequest()V
 HSPLcom/android/server/location/GnssLocationProvider;->restartRequests()V
 HSPLcom/android/server/location/GnssLocationProvider;->sendMessage(IILjava/lang/Object;)V
 HSPLcom/android/server/location/GnssLocationProvider;->setGnssHardwareModelName(Ljava/lang/String;)V
 HSPLcom/android/server/location/GnssLocationProvider;->setGnssYearOfHardware(I)V
 HSPLcom/android/server/location/GnssLocationProvider;->setGpsEnabled(Z)V
-PLcom/android/server/location/GnssLocationProvider;->setPositionMode(IIIIIZ)Z
+HPLcom/android/server/location/GnssLocationProvider;->setPositionMode(IIIIIZ)Z
 HSPLcom/android/server/location/GnssLocationProvider;->setStarted(Z)V
 HSPLcom/android/server/location/GnssLocationProvider;->setSuplHostPort()V
 HSPLcom/android/server/location/GnssLocationProvider;->setTopHalCapabilities(I)V
 HSPLcom/android/server/location/GnssLocationProvider;->setupNativeGnssService(Z)V
-PLcom/android/server/location/GnssLocationProvider;->startNavigating()V
+HPLcom/android/server/location/GnssLocationProvider;->startNavigating()V
 HSPLcom/android/server/location/GnssLocationProvider;->stopNavigating()V
-PLcom/android/server/location/GnssLocationProvider;->subscriptionOrCarrierConfigChanged()V
+HPLcom/android/server/location/GnssLocationProvider;->subscriptionOrCarrierConfigChanged()V
 HSPLcom/android/server/location/GnssLocationProvider;->updateClientUids(Landroid/os/WorkSource;)V
 HSPLcom/android/server/location/GnssLocationProvider;->updateEnabled()V
-PLcom/android/server/location/GnssLocationProvider;->updateLowPowerMode()V
+HPLcom/android/server/location/GnssLocationProvider;->updateLowPowerMode()V
 HSPLcom/android/server/location/GnssLocationProvider;->updateRequirements()V
 HSPLcom/android/server/location/GnssMeasurementCorrectionsProvider$GnssMeasurementCorrectionsProviderNative;-><init>()V
 HSPLcom/android/server/location/GnssMeasurementCorrectionsProvider;-><init>(Landroid/os/Handler;)V
 HSPLcom/android/server/location/GnssMeasurementCorrectionsProvider;-><init>(Landroid/os/Handler;Lcom/android/server/location/GnssMeasurementCorrectionsProvider$GnssMeasurementCorrectionsProviderNative;)V
+PLcom/android/server/location/GnssMeasurementCorrectionsProvider;->injectGnssMeasurementCorrections(Landroid/location/GnssMeasurementCorrections;)V
+PLcom/android/server/location/GnssMeasurementCorrectionsProvider;->isCapabilitiesReceived()Z
 HSPLcom/android/server/location/GnssMeasurementsProvider$GnssMeasurementProviderNative;-><init>()V
 HSPLcom/android/server/location/GnssMeasurementsProvider$GnssMeasurementProviderNative;->isMeasurementSupported()Z
+PLcom/android/server/location/GnssMeasurementsProvider$GnssMeasurementProviderNative;->startMeasurementCollection(Z)Z
+PLcom/android/server/location/GnssMeasurementsProvider$GnssMeasurementProviderNative;->stopMeasurementCollection()Z
 PLcom/android/server/location/GnssMeasurementsProvider$StatusChangedOperation;-><init>(I)V
 PLcom/android/server/location/GnssMeasurementsProvider$StatusChangedOperation;->execute(Landroid/location/IGnssMeasurementsListener;Lcom/android/server/location/CallerIdentity;)V
 PLcom/android/server/location/GnssMeasurementsProvider$StatusChangedOperation;->execute(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
@@ -10757,11 +17695,14 @@
 HSPLcom/android/server/location/GnssMeasurementsProvider;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/location/GnssMeasurementsProvider;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/location/GnssMeasurementsProvider$GnssMeasurementProviderNative;)V
 HSPLcom/android/server/location/GnssMeasurementsProvider;->access$000()Z
+PLcom/android/server/location/GnssMeasurementsProvider;->access$100(Z)Z
+PLcom/android/server/location/GnssMeasurementsProvider;->access$200()Z
 PLcom/android/server/location/GnssMeasurementsProvider;->getHandlerOperation(I)Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;
 HSPLcom/android/server/location/GnssMeasurementsProvider;->isAvailableInPlatform()Z
+HPLcom/android/server/location/GnssMeasurementsProvider;->lambda$onMeasurementsAvailable$0$GnssMeasurementsProvider(Landroid/location/GnssMeasurementsEvent;Landroid/location/IGnssMeasurementsListener;Lcom/android/server/location/CallerIdentity;)V
 HSPLcom/android/server/location/GnssMeasurementsProvider;->onCapabilitiesUpdated(Z)V
 HSPLcom/android/server/location/GnssMeasurementsProvider;->onGpsEnabledChanged()V
-PLcom/android/server/location/GnssMeasurementsProvider;->onMeasurementsAvailable(Landroid/location/GnssMeasurementsEvent;)V
+HPLcom/android/server/location/GnssMeasurementsProvider;->onMeasurementsAvailable(Landroid/location/GnssMeasurementsEvent;)V
 PLcom/android/server/location/GnssMeasurementsProvider;->registerWithService()I
 HSPLcom/android/server/location/GnssMeasurementsProvider;->resumeIfStarted()V
 PLcom/android/server/location/GnssMeasurementsProvider;->unregisterFromService()V
@@ -10778,12 +17719,15 @@
 HSPLcom/android/server/location/GnssNavigationMessageProvider;->onGpsEnabledChanged()V
 HSPLcom/android/server/location/GnssNavigationMessageProvider;->resumeIfStarted()V
 HSPLcom/android/server/location/GnssNetworkConnectivityHandler$1;-><init>(Lcom/android/server/location/GnssNetworkConnectivityHandler;)V
-PLcom/android/server/location/GnssNetworkConnectivityHandler$1;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
-PLcom/android/server/location/GnssNetworkConnectivityHandler$1;->onLost(Landroid/net/Network;)V
+HPLcom/android/server/location/GnssNetworkConnectivityHandler$1;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
+HPLcom/android/server/location/GnssNetworkConnectivityHandler$1;->onLost(Landroid/net/Network;)V
 HSPLcom/android/server/location/GnssNetworkConnectivityHandler$2;-><init>(Lcom/android/server/location/GnssNetworkConnectivityHandler;)V
+PLcom/android/server/location/GnssNetworkConnectivityHandler$2;->onAvailable(Landroid/net/Network;)V
+PLcom/android/server/location/GnssNetworkConnectivityHandler$2;->onLost(Landroid/net/Network;)V
+PLcom/android/server/location/GnssNetworkConnectivityHandler$2;->onUnavailable()V
 PLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;-><init>()V
 PLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;-><init>(Lcom/android/server/location/GnssNetworkConnectivityHandler$1;)V
-PLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->access$000(Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;)Z
+HPLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->access$000(Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;)Z
 PLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->access$1000(Landroid/net/NetworkCapabilities;)S
 PLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->access$700(Lcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;)Ljava/lang/String;
 PLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->access$702(Lcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;Ljava/lang/String;)Ljava/lang/String;
@@ -10791,8 +17735,8 @@
 PLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->access$802(Lcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;I)I
 PLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->access$900(Lcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;)Landroid/net/NetworkCapabilities;
 PLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->access$902(Lcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;Landroid/net/NetworkCapabilities;)Landroid/net/NetworkCapabilities;
-PLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->getCapabilityFlags(Landroid/net/NetworkCapabilities;)S
-PLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->hasCapabilitiesChanged(Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;)Z
+HPLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->getCapabilityFlags(Landroid/net/NetworkCapabilities;)S
+HPLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->hasCapabilitiesChanged(Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;)Z
 HPLcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;->hasCapabilityChanged(Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;I)Z
 HSPLcom/android/server/location/GnssNetworkConnectivityHandler;-><clinit>()V
 HSPLcom/android/server/location/GnssNetworkConnectivityHandler;-><init>(Landroid/content/Context;Lcom/android/server/location/GnssNetworkConnectivityHandler$GnssNetworkListener;Landroid/os/Looper;)V
@@ -10800,94 +17744,219 @@
 PLcom/android/server/location/GnssNetworkConnectivityHandler;->access$200()Z
 PLcom/android/server/location/GnssNetworkConnectivityHandler;->access$300(Lcom/android/server/location/GnssNetworkConnectivityHandler;)Lcom/android/server/location/GnssNetworkConnectivityHandler$GnssNetworkListener;
 PLcom/android/server/location/GnssNetworkConnectivityHandler;->access$400(Lcom/android/server/location/GnssNetworkConnectivityHandler;Landroid/net/Network;ZLandroid/net/NetworkCapabilities;)V
+PLcom/android/server/location/GnssNetworkConnectivityHandler;->access$500(Lcom/android/server/location/GnssNetworkConnectivityHandler;Landroid/net/Network;)V
+PLcom/android/server/location/GnssNetworkConnectivityHandler;->access$600(Lcom/android/server/location/GnssNetworkConnectivityHandler;I)V
 PLcom/android/server/location/GnssNetworkConnectivityHandler;->agpsDataConnStateAsString()Ljava/lang/String;
 HSPLcom/android/server/location/GnssNetworkConnectivityHandler;->createNetworkConnectivityCallback()Landroid/net/ConnectivityManager$NetworkCallback;
 HSPLcom/android/server/location/GnssNetworkConnectivityHandler;->createSuplConnectivityCallback()Landroid/net/ConnectivityManager$NetworkCallback;
-PLcom/android/server/location/GnssNetworkConnectivityHandler;->handleUpdateNetworkState(Landroid/net/Network;ZLandroid/net/NetworkCapabilities;)V
+PLcom/android/server/location/GnssNetworkConnectivityHandler;->ensureInHandlerThread()V
+HPLcom/android/server/location/GnssNetworkConnectivityHandler;->getApnIpType(Ljava/lang/String;)I
+PLcom/android/server/location/GnssNetworkConnectivityHandler;->getNetworkCapability(I)I
+HPLcom/android/server/location/GnssNetworkConnectivityHandler;->handleReleaseSuplConnection(I)V
+HPLcom/android/server/location/GnssNetworkConnectivityHandler;->handleRequestSuplConnection(I[B)V
+PLcom/android/server/location/GnssNetworkConnectivityHandler;->handleSuplConnectionAvailable(Landroid/net/Network;)V
+HPLcom/android/server/location/GnssNetworkConnectivityHandler;->handleUpdateNetworkState(Landroid/net/Network;ZLandroid/net/NetworkCapabilities;)V
+PLcom/android/server/location/GnssNetworkConnectivityHandler;->lambda$onReportAGpsStatus$0$GnssNetworkConnectivityHandler(I[B)V
+PLcom/android/server/location/GnssNetworkConnectivityHandler;->lambda$onReportAGpsStatus$1$GnssNetworkConnectivityHandler()V
+HPLcom/android/server/location/GnssNetworkConnectivityHandler;->lambda$runEventAndReleaseWakeLock$2$GnssNetworkConnectivityHandler(Ljava/lang/Runnable;)V
+PLcom/android/server/location/GnssNetworkConnectivityHandler;->onReportAGpsStatus(II[B)V
 HSPLcom/android/server/location/GnssNetworkConnectivityHandler;->registerNetworkCallbacks()V
-PLcom/android/server/location/GnssNetworkConnectivityHandler;->updateTrackedNetworksState(ZLandroid/net/Network;Landroid/net/NetworkCapabilities;)Lcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;
-PLcom/android/server/location/GnssPositionMode;-><init>(IIIIIZ)V
-PLcom/android/server/location/GnssPositionMode;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/location/GnssNetworkConnectivityHandler;->runEventAndReleaseWakeLock(Ljava/lang/Runnable;)Ljava/lang/Runnable;
+HPLcom/android/server/location/GnssNetworkConnectivityHandler;->runOnHandler(Ljava/lang/Runnable;)V
+HPLcom/android/server/location/GnssNetworkConnectivityHandler;->setRouting()V
+PLcom/android/server/location/GnssNetworkConnectivityHandler;->translateToApnIpType(Ljava/lang/String;Ljava/lang/String;)I
+HPLcom/android/server/location/GnssNetworkConnectivityHandler;->updateTrackedNetworksState(ZLandroid/net/Network;Landroid/net/NetworkCapabilities;)Lcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;
+HPLcom/android/server/location/GnssPositionMode;-><init>(IIIIIZ)V
+HPLcom/android/server/location/GnssPositionMode;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/server/location/GnssSatelliteBlacklistHelper$1;-><init>(Lcom/android/server/location/GnssSatelliteBlacklistHelper;Landroid/os/Handler;)V
+PLcom/android/server/location/GnssSatelliteBlacklistHelper$1;->onChange(Z)V
 HSPLcom/android/server/location/GnssSatelliteBlacklistHelper;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/location/GnssSatelliteBlacklistHelper$GnssSatelliteBlacklistCallback;)V
 HSPLcom/android/server/location/GnssSatelliteBlacklistHelper;->parseSatelliteBlacklist(Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/location/GnssSatelliteBlacklistHelper;->updateSatelliteBlacklist()V
 HSPLcom/android/server/location/GnssStatusListenerHelper;-><clinit>()V
 HSPLcom/android/server/location/GnssStatusListenerHelper;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 PLcom/android/server/location/GnssStatusListenerHelper;->getHandlerOperation(I)Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;
-PLcom/android/server/location/GnssStatusListenerHelper;->lambda$onFirstFix$2(ILandroid/location/IGnssStatusListener;Lcom/android/server/location/CallerIdentity;)V
-PLcom/android/server/location/GnssStatusListenerHelper;->lambda$onStatusChanged$0(Landroid/location/IGnssStatusListener;Lcom/android/server/location/CallerIdentity;)V
-PLcom/android/server/location/GnssStatusListenerHelper;->lambda$onStatusChanged$1(Landroid/location/IGnssStatusListener;Lcom/android/server/location/CallerIdentity;)V
+HPLcom/android/server/location/GnssStatusListenerHelper;->lambda$onFirstFix$2(ILandroid/location/IGnssStatusListener;Lcom/android/server/location/CallerIdentity;)V
+HPLcom/android/server/location/GnssStatusListenerHelper;->lambda$onNmeaReceived$4$GnssStatusListenerHelper(JLjava/lang/String;Landroid/location/IGnssStatusListener;Lcom/android/server/location/CallerIdentity;)V
+HPLcom/android/server/location/GnssStatusListenerHelper;->lambda$onStatusChanged$0(Landroid/location/IGnssStatusListener;Lcom/android/server/location/CallerIdentity;)V
+HPLcom/android/server/location/GnssStatusListenerHelper;->lambda$onStatusChanged$1(Landroid/location/IGnssStatusListener;Lcom/android/server/location/CallerIdentity;)V
 HPLcom/android/server/location/GnssStatusListenerHelper;->lambda$onSvStatusChanged$3$GnssStatusListenerHelper(I[I[F[F[F[F[FLandroid/location/IGnssStatusListener;Lcom/android/server/location/CallerIdentity;)V
+PLcom/android/server/location/GnssStatusListenerHelper;->onFirstFix(I)V
+HPLcom/android/server/location/GnssStatusListenerHelper;->onNmeaReceived(JLjava/lang/String;)V
+HPLcom/android/server/location/GnssStatusListenerHelper;->onStatusChanged(Z)V
+HPLcom/android/server/location/GnssStatusListenerHelper;->onSvStatusChanged(I[I[F[F[F[F[F)V
 PLcom/android/server/location/GnssStatusListenerHelper;->registerWithService()I
 PLcom/android/server/location/GnssStatusListenerHelper;->unregisterFromService()V
 HSPLcom/android/server/location/GnssVisibilityControl$1;-><init>(Lcom/android/server/location/GnssVisibilityControl;)V
 HPLcom/android/server/location/GnssVisibilityControl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;-><init>(Ljava/lang/String;BLjava/lang/String;BLjava/lang/String;BZZ)V
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;-><init>(Ljava/lang/String;BLjava/lang/String;BLjava/lang/String;BZZLcom/android/server/location/GnssVisibilityControl$1;)V
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$1000(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)B
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$1100(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)Ljava/lang/String;
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$1200(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)B
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$1300(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)Ljava/lang/String;
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$1400(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)B
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$1500(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)Z
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$1600(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)Z
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$400(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)Z
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$500(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)Ljava/lang/String;
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$600(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)Z
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$700(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)Z
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$800(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)Z
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->access$900(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)Ljava/lang/String;
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->getResponseTypeAsString()Ljava/lang/String;
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->isEmergencyRequestNotification()Z
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->isLocationProvided()Z
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->isRequestAccepted()Z
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->isRequestAttributedToProxyApp()Z
+PLcom/android/server/location/GnssVisibilityControl$NfwNotification;->toString()Ljava/lang/String;
+PLcom/android/server/location/GnssVisibilityControl$ProxyAppState;-><init>(Z)V
+PLcom/android/server/location/GnssVisibilityControl$ProxyAppState;-><init>(ZLcom/android/server/location/GnssVisibilityControl$1;)V
+PLcom/android/server/location/GnssVisibilityControl$ProxyAppState;->access$100(Lcom/android/server/location/GnssVisibilityControl$ProxyAppState;)Z
+PLcom/android/server/location/GnssVisibilityControl$ProxyAppState;->access$300(Lcom/android/server/location/GnssVisibilityControl$ProxyAppState;)Z
 HSPLcom/android/server/location/GnssVisibilityControl;-><clinit>()V
 HSPLcom/android/server/location/GnssVisibilityControl;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/internal/location/GpsNetInitiatedHandler;)V
 PLcom/android/server/location/GnssVisibilityControl;->access$000(Lcom/android/server/location/GnssVisibilityControl;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/location/GnssVisibilityControl;->disableNfwLocationAccess()V
 HSPLcom/android/server/location/GnssVisibilityControl;->getLocationPermissionEnabledProxyApps()[Ljava/lang/String;
+HPLcom/android/server/location/GnssVisibilityControl;->getProxyAppInfo(Ljava/lang/String;)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/location/GnssVisibilityControl;->handleGpsEnabledChanged(Z)V
 HSPLcom/android/server/location/GnssVisibilityControl;->handleInitialize()V
+PLcom/android/server/location/GnssVisibilityControl;->handleNfwNotification(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)V
+HPLcom/android/server/location/GnssVisibilityControl;->handlePermissionsChanged(I)V
 HPLcom/android/server/location/GnssVisibilityControl;->handleProxyAppPackageUpdate(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/location/GnssVisibilityControl;->handleUpdateProxyApps(Ljava/util/List;)V
+PLcom/android/server/location/GnssVisibilityControl;->hasLocationPermission(Ljava/lang/String;)Z
+PLcom/android/server/location/GnssVisibilityControl;->isPermissionMismatched(Lcom/android/server/location/GnssVisibilityControl$ProxyAppState;Lcom/android/server/location/GnssVisibilityControl$NfwNotification;)Z
+PLcom/android/server/location/GnssVisibilityControl;->isProxyAppInstalled(Ljava/lang/String;)Z
 HSPLcom/android/server/location/GnssVisibilityControl;->isProxyAppListUpdated(Ljava/util/List;)Z
 HSPLcom/android/server/location/GnssVisibilityControl;->lambda$FLGfeDaxF8J3CE9m-TcOXh5j6ow(Lcom/android/server/location/GnssVisibilityControl;)V
+HPLcom/android/server/location/GnssVisibilityControl;->lambda$new$0$GnssVisibilityControl(I)V
+PLcom/android/server/location/GnssVisibilityControl;->lambda$new$1$GnssVisibilityControl(I)V
 HSPLcom/android/server/location/GnssVisibilityControl;->lambda$onConfigurationUpdated$4$GnssVisibilityControl(Ljava/util/List;)V
 HSPLcom/android/server/location/GnssVisibilityControl;->lambda$onGpsEnabledChanged$2$GnssVisibilityControl(Z)V
+PLcom/android/server/location/GnssVisibilityControl;->lambda$reportNfwNotification$3$GnssVisibilityControl(Ljava/lang/String;BLjava/lang/String;BLjava/lang/String;BZZ)V
 HSPLcom/android/server/location/GnssVisibilityControl;->lambda$runEventAndReleaseWakeLock$6$GnssVisibilityControl(Ljava/lang/Runnable;)V
 HSPLcom/android/server/location/GnssVisibilityControl;->listenForProxyAppsPackageUpdates()V
+PLcom/android/server/location/GnssVisibilityControl;->logEvent(Lcom/android/server/location/GnssVisibilityControl$NfwNotification;Z)V
 HSPLcom/android/server/location/GnssVisibilityControl;->onConfigurationUpdated(Lcom/android/server/location/GnssConfiguration;)V
 HSPLcom/android/server/location/GnssVisibilityControl;->onGpsEnabledChanged(Z)V
+PLcom/android/server/location/GnssVisibilityControl;->reportNfwNotification(Ljava/lang/String;BLjava/lang/String;BLjava/lang/String;BZZ)V
+PLcom/android/server/location/GnssVisibilityControl;->resetProxyAppsState()V
 HSPLcom/android/server/location/GnssVisibilityControl;->runEventAndReleaseWakeLock(Ljava/lang/Runnable;)Ljava/lang/Runnable;
 HSPLcom/android/server/location/GnssVisibilityControl;->runOnHandler(Ljava/lang/Runnable;)V
 HSPLcom/android/server/location/GnssVisibilityControl;->setNfwLocationAccessProxyAppsInGnssHal([Ljava/lang/String;)V
+PLcom/android/server/location/GnssVisibilityControl;->shouldEnableLocationPermissionInGnssHal(Ljava/lang/String;)Z
+PLcom/android/server/location/GnssVisibilityControl;->updateNfwLocationAccessProxyAppsInGnssHal()V
+HSPLcom/android/server/location/HardwareActivityRecognitionProxy;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/location/HardwareActivityRecognitionProxy;->createAndRegister(Landroid/content/Context;)Lcom/android/server/location/HardwareActivityRecognitionProxy;
+PLcom/android/server/location/HardwareActivityRecognitionProxy;->lambda$Z7jbekKm-LTVAz47zPN0h1VYfjo(Lcom/android/server/location/HardwareActivityRecognitionProxy;Landroid/os/IBinder;)V
+PLcom/android/server/location/HardwareActivityRecognitionProxy;->onBind(Landroid/os/IBinder;)V
+HSPLcom/android/server/location/HardwareActivityRecognitionProxy;->register()Z
+PLcom/android/server/location/LocationBasedCountryDetector$1;-><init>(Lcom/android/server/location/LocationBasedCountryDetector;)V
+PLcom/android/server/location/LocationBasedCountryDetector$1;->onLocationChanged(Landroid/location/Location;)V
+PLcom/android/server/location/LocationBasedCountryDetector$2;-><init>(Lcom/android/server/location/LocationBasedCountryDetector;)V
+PLcom/android/server/location/LocationBasedCountryDetector$2;->run()V
+PLcom/android/server/location/LocationBasedCountryDetector$3;-><init>(Lcom/android/server/location/LocationBasedCountryDetector;Landroid/location/Location;)V
+PLcom/android/server/location/LocationBasedCountryDetector$3;->run()V
+PLcom/android/server/location/LocationBasedCountryDetector;-><init>(Landroid/content/Context;)V
+PLcom/android/server/location/LocationBasedCountryDetector;->access$000(Lcom/android/server/location/LocationBasedCountryDetector;Landroid/location/Location;)V
+PLcom/android/server/location/LocationBasedCountryDetector;->detectCountry()Landroid/location/Country;
+PLcom/android/server/location/LocationBasedCountryDetector;->getCountryFromLocation(Landroid/location/Location;)Ljava/lang/String;
+PLcom/android/server/location/LocationBasedCountryDetector;->getEnabledProviders()Ljava/util/List;
+PLcom/android/server/location/LocationBasedCountryDetector;->getLastKnownLocation()Landroid/location/Location;
+PLcom/android/server/location/LocationBasedCountryDetector;->getQueryLocationTimeout()J
+PLcom/android/server/location/LocationBasedCountryDetector;->isAcceptableProvider(Ljava/lang/String;)Z
+PLcom/android/server/location/LocationBasedCountryDetector;->queryCountryCode(Landroid/location/Location;)V
+PLcom/android/server/location/LocationBasedCountryDetector;->registerListener(Ljava/lang/String;Landroid/location/LocationListener;)V
+PLcom/android/server/location/LocationBasedCountryDetector;->stop()V
+PLcom/android/server/location/LocationBasedCountryDetector;->unregisterListener(Landroid/location/LocationListener;)V
 HSPLcom/android/server/location/LocationFudger$1;-><init>(Lcom/android/server/location/LocationFudger;Landroid/os/Handler;)V
 HSPLcom/android/server/location/LocationFudger;-><clinit>()V
 HSPLcom/android/server/location/LocationFudger;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
-PLcom/android/server/location/LocationFudger;->createCoarseLocked(Landroid/location/Location;)Landroid/location/Location;
+PLcom/android/server/location/LocationFudger;->addCoarseLocationExtraLocked(Landroid/location/Location;)Landroid/location/Location;
+HPLcom/android/server/location/LocationFudger;->createCoarseLocked(Landroid/location/Location;)Landroid/location/Location;
 PLcom/android/server/location/LocationFudger;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/location/LocationFudger;->getOrCreate(Landroid/location/Location;)Landroid/location/Location;
+HPLcom/android/server/location/LocationFudger;->getOrCreate(Landroid/location/Location;)Landroid/location/Location;
 HSPLcom/android/server/location/LocationFudger;->loadCoarseAccuracy()F
+PLcom/android/server/location/LocationFudger;->metersToDegreesLatitude(D)D
+HPLcom/android/server/location/LocationFudger;->metersToDegreesLongitude(DD)D
 HSPLcom/android/server/location/LocationFudger;->nextOffsetLocked()D
 HSPLcom/android/server/location/LocationFudger;->setAccuracyInMetersLocked(F)V
-PLcom/android/server/location/LocationFudger;->updateRandomOffsetLocked()V
+HPLcom/android/server/location/LocationFudger;->updateRandomOffsetLocked()V
+PLcom/android/server/location/LocationFudger;->wrapLatitude(D)D
+PLcom/android/server/location/LocationFudger;->wrapLongitude(D)D
 HPLcom/android/server/location/LocationPermissionUtil;->doesCallerReportToAppOps(Landroid/content/Context;Lcom/android/server/location/CallerIdentity;)Z
 HPLcom/android/server/location/LocationPermissionUtil;->hasPermissionLocationHardware(Landroid/content/Context;Lcom/android/server/location/CallerIdentity;)Z
 HPLcom/android/server/location/LocationPermissionUtil;->hasPermissionUpdateAppOpsStats(Landroid/content/Context;Lcom/android/server/location/CallerIdentity;)Z
 HSPLcom/android/server/location/LocationProviderProxy$1;-><init>(Lcom/android/server/location/LocationProviderProxy;)V
-PLcom/android/server/location/LocationProviderProxy$1;->onReportLocation(Landroid/location/Location;)V
-PLcom/android/server/location/LocationProviderProxy$1;->onSetEnabled(Z)V
-PLcom/android/server/location/LocationProviderProxy$1;->onSetProperties(Lcom/android/internal/location/ProviderProperties;)V
+HPLcom/android/server/location/LocationProviderProxy$1;->onReportLocation(Landroid/location/Location;)V
+HSPLcom/android/server/location/LocationProviderProxy$1;->onSetAllowed(Z)V
+HSPLcom/android/server/location/LocationProviderProxy$1;->onSetEnabled(Z)V
+HSPLcom/android/server/location/LocationProviderProxy$1;->onSetProperties(Lcom/android/internal/location/ProviderProperties;)V
 HSPLcom/android/server/location/LocationProviderProxy$2;-><init>(Lcom/android/server/location/LocationProviderProxy;Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;IIILandroid/os/Handler;)V
-PLcom/android/server/location/LocationProviderProxy$2;->lambda$onBind$0(Lcom/android/server/location/LocationProviderProxy;Landroid/os/IBinder;)V
-PLcom/android/server/location/LocationProviderProxy$2;->onBind()V
+HSPLcom/android/server/location/LocationProviderProxy$2;->lambda$onBind$0(Lcom/android/server/location/LocationProviderProxy;Landroid/os/IBinder;)V
+HSPLcom/android/server/location/LocationProviderProxy$2;->onBind()V
 PLcom/android/server/location/LocationProviderProxy$2;->onUnbind()V
 HSPLcom/android/server/location/LocationProviderProxy;-><clinit>()V
+HSPLcom/android/server/location/LocationProviderProxy;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/String;III)V
 HSPLcom/android/server/location/LocationProviderProxy;-><init>(Landroid/content/Context;Lcom/android/server/location/AbstractLocationProvider$LocationProviderManager;Ljava/lang/String;III)V
+HSPLcom/android/server/location/LocationProviderProxy;-><init>(Landroid/content/Context;Ljava/lang/String;II)V
+HSPLcom/android/server/location/LocationProviderProxy;->access$100(Lcom/android/server/location/LocationProviderProxy;)Ljava/lang/Object;
+HSPLcom/android/server/location/LocationProviderProxy;->access$100(Lcom/android/server/location/LocationProviderProxy;Landroid/os/IBinder;)V
+PLcom/android/server/location/LocationProviderProxy;->access$200(Lcom/android/server/location/LocationProviderProxy;)Ljava/lang/Object;
+HSPLcom/android/server/location/LocationProviderProxy;->access$200(Lcom/android/server/location/LocationProviderProxy;)Z
 PLcom/android/server/location/LocationProviderProxy;->access$200(Lcom/android/server/location/LocationProviderProxy;Landroid/os/IBinder;)V
+PLcom/android/server/location/LocationProviderProxy;->access$300(Lcom/android/server/location/LocationProviderProxy;)Z
 HSPLcom/android/server/location/LocationProviderProxy;->bind()Z
 HSPLcom/android/server/location/LocationProviderProxy;->createAndBind(Landroid/content/Context;Lcom/android/server/location/AbstractLocationProvider$LocationProviderManager;Ljava/lang/String;III)Lcom/android/server/location/LocationProviderProxy;
+HSPLcom/android/server/location/LocationProviderProxy;->createAndBind(Landroid/content/Context;Ljava/lang/String;III)Lcom/android/server/location/LocationProviderProxy;
+HSPLcom/android/server/location/LocationProviderProxy;->createAndRegister(Landroid/content/Context;Ljava/lang/String;II)Lcom/android/server/location/LocationProviderProxy;
 PLcom/android/server/location/LocationProviderProxy;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/location/LocationProviderProxy;->getProviderPackages()Ljava/util/List;
-PLcom/android/server/location/LocationProviderProxy;->initializeService(Landroid/os/IBinder;)V
+HSPLcom/android/server/location/LocationProviderProxy;->initializeService(Landroid/os/IBinder;)V
+PLcom/android/server/location/LocationProviderProxy;->lambda$26d2FFhpYis1Ws92o2khDXr7LzU(Lcom/android/server/location/LocationProviderProxy;)V
+HSPLcom/android/server/location/LocationProviderProxy;->lambda$3wGALcuMWaMkkBRL1d0LQ_QqoCk(Lcom/android/server/location/LocationProviderProxy;Landroid/os/IBinder;)V
+HPLcom/android/server/location/LocationProviderProxy;->lambda$onSetRequest$0$LocationProviderProxy(Lcom/android/internal/location/ProviderRequest;Landroid/os/IBinder;)V
+HPLcom/android/server/location/LocationProviderProxy;->lambda$onSetRequest$0(Lcom/android/internal/location/ProviderRequest;Landroid/os/IBinder;)V
 HPLcom/android/server/location/LocationProviderProxy;->lambda$onSetRequest$0(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;Landroid/os/IBinder;)V
+HSPLcom/android/server/location/LocationProviderProxy;->onBind(Landroid/os/IBinder;)V
+HSPLcom/android/server/location/LocationProviderProxy;->onSetRequest(Lcom/android/internal/location/ProviderRequest;)V
 HPLcom/android/server/location/LocationProviderProxy;->onSetRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+PLcom/android/server/location/LocationProviderProxy;->onUnbind()V
+HSPLcom/android/server/location/LocationProviderProxy;->register()Z
 PLcom/android/server/location/LocationProviderProxy;->resetProviderPackages(Ljava/util/List;)V
 HSPLcom/android/server/location/LocationRequestStatistics$PackageProviderKey;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/location/LocationRequestStatistics$PackageProviderKey;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/location/LocationRequestStatistics$PackageProviderKey;->compareTo(Lcom/android/server/location/LocationRequestStatistics$PackageProviderKey;)I
+PLcom/android/server/location/LocationRequestStatistics$PackageProviderKey;->compareTo(Ljava/lang/Object;)I
+HPLcom/android/server/location/LocationRequestStatistics$PackageProviderKey;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/server/location/LocationRequestStatistics$PackageProviderKey;->hashCode()I
 HSPLcom/android/server/location/LocationRequestStatistics$PackageStatistics;-><init>()V
 HSPLcom/android/server/location/LocationRequestStatistics$PackageStatistics;-><init>(Lcom/android/server/location/LocationRequestStatistics$1;)V
 HSPLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->access$100(Lcom/android/server/location/LocationRequestStatistics$PackageStatistics;J)V
 HSPLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->access$200(Lcom/android/server/location/LocationRequestStatistics$PackageStatistics;Z)V
+PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->access$300(Lcom/android/server/location/LocationRequestStatistics$PackageStatistics;)V
+PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->getDurationMs()J
+PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->getForegroundDurationMs()J
+PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->getTimeSinceFirstRequestMs()J
+PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->getTimeSinceLastRequestStoppedMs()J
+PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->isActive()Z
 HSPLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->startRequesting(J)V
-PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->stopRequesting()V
-PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->toString()Ljava/lang/String;
+HPLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->stopRequesting()V
+HPLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->toString()Ljava/lang/String;
 HSPLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->updateForeground(Z)V
+HSPLcom/android/server/location/LocationRequestStatistics$RequestSummary;-><init>(Ljava/lang/String;Ljava/lang/String;J)V
+HPLcom/android/server/location/LocationRequestStatistics$RequestSummary;->dump(Lcom/android/internal/util/IndentingPrintWriter;J)V
+HSPLcom/android/server/location/LocationRequestStatistics$RequestSummaryLimitedHistory;-><init>()V
+HSPLcom/android/server/location/LocationRequestStatistics$RequestSummaryLimitedHistory;->addRequest(Ljava/lang/String;Ljava/lang/String;J)V
+HSPLcom/android/server/location/LocationRequestStatistics$RequestSummaryLimitedHistory;->addRequestSummary(Lcom/android/server/location/LocationRequestStatistics$RequestSummary;)V
+HPLcom/android/server/location/LocationRequestStatistics$RequestSummaryLimitedHistory;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/location/LocationRequestStatistics$RequestSummaryLimitedHistory;->removeRequest(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/location/LocationRequestStatistics;-><init>()V
 HSPLcom/android/server/location/LocationRequestStatistics;->startRequesting(Ljava/lang/String;Ljava/lang/String;JZ)V
+HPLcom/android/server/location/LocationRequestStatistics;->stopRequesting(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/location/LocationRequestStatistics;->updateForeground(Ljava/lang/String;Ljava/lang/String;Z)V
+PLcom/android/server/location/LocationSettingsStore$GlobalSettingChangedListener;->onSettingChanged(I)V
 HSPLcom/android/server/location/LocationSettingsStore$IntegerSecureSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Handler;)V
 HSPLcom/android/server/location/LocationSettingsStore$IntegerSecureSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Handler;Lcom/android/server/location/LocationSettingsStore$1;)V
 HSPLcom/android/server/location/LocationSettingsStore$IntegerSecureSetting;->access$400(Lcom/android/server/location/LocationSettingsStore$IntegerSecureSetting;)V
@@ -10900,8 +17969,8 @@
 HSPLcom/android/server/location/LocationSettingsStore$ObservingSetting;-><init>(Landroid/os/Handler;)V
 HSPLcom/android/server/location/LocationSettingsStore$ObservingSetting;-><init>(Landroid/os/Handler;Lcom/android/server/location/LocationSettingsStore$1;)V
 HSPLcom/android/server/location/LocationSettingsStore$ObservingSetting;->addListener(Lcom/android/server/location/LocationSettingsStore$UserSettingChangedListener;)V
-PLcom/android/server/location/LocationSettingsStore$ObservingSetting;->isRegistered()Z
-PLcom/android/server/location/LocationSettingsStore$ObservingSetting;->onChange(ZLandroid/net/Uri;I)V
+HPLcom/android/server/location/LocationSettingsStore$ObservingSetting;->isRegistered()Z
+HSPLcom/android/server/location/LocationSettingsStore$ObservingSetting;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/location/LocationSettingsStore$ObservingSetting;->register(Landroid/content/Context;Landroid/net/Uri;)V
 HSPLcom/android/server/location/LocationSettingsStore$StringListCachedSecureSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Handler;)V
 HSPLcom/android/server/location/LocationSettingsStore$StringListCachedSecureSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Handler;Lcom/android/server/location/LocationSettingsStore$1;)V
@@ -10910,6 +17979,8 @@
 HSPLcom/android/server/location/LocationSettingsStore$StringSetCachedGlobalSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/util/function/Supplier;Landroid/os/Handler;)V
 HSPLcom/android/server/location/LocationSettingsStore$StringSetCachedGlobalSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/util/function/Supplier;Landroid/os/Handler;Lcom/android/server/location/LocationSettingsStore$1;)V
 HPLcom/android/server/location/LocationSettingsStore$StringSetCachedGlobalSetting;->getValue()Ljava/util/Set;
+PLcom/android/server/location/LocationSettingsStore$StringSetCachedGlobalSetting;->invalidate()V
+PLcom/android/server/location/LocationSettingsStore$StringSetCachedGlobalSetting;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/location/LocationSettingsStore$StringSetCachedGlobalSetting;->register()V
 HSPLcom/android/server/location/LocationSettingsStore;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/location/LocationSettingsStore;->addOnBackgroundThrottleIntervalChangedListener(Lcom/android/server/location/LocationSettingsStore$GlobalSettingChangedListener;)V
@@ -10918,26 +17989,47 @@
 HSPLcom/android/server/location/LocationSettingsStore;->addOnLocationEnabledChangedListener(Lcom/android/server/location/LocationSettingsStore$UserSettingChangedListener;)V
 PLcom/android/server/location/LocationSettingsStore;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/location/LocationSettingsStore;->getBackgroundThrottleIntervalMs()J
-PLcom/android/server/location/LocationSettingsStore;->getMaxLastLocationAgeMs()J
+PLcom/android/server/location/LocationSettingsStore;->getBackgroundThrottlePackageWhitelist()Ljava/util/Set;
+PLcom/android/server/location/LocationSettingsStore;->getBackgroundThrottleProximityAlertIntervalMs()J
+HPLcom/android/server/location/LocationSettingsStore;->getMaxLastLocationAgeMs()J
 HSPLcom/android/server/location/LocationSettingsStore;->isLocationEnabled(I)Z
 HPLcom/android/server/location/LocationSettingsStore;->isLocationPackageBlacklisted(ILjava/lang/String;)Z
 PLcom/android/server/location/LocationSettingsStore;->lambda$new$0()Landroid/util/ArraySet;
 PLcom/android/server/location/LocationSettingsStore;->lambda$new$1()Landroid/util/ArraySet;
 HSPLcom/android/server/location/LocationSettingsStore;->onSystemReady()V
+HSPLcom/android/server/location/LocationSettingsStore;->setLocationProviderAllowed(Ljava/lang/String;ZI)V
 HSPLcom/android/server/location/LocationUsageLogger;-><init>()V
 HSPLcom/android/server/location/LocationUsageLogger;->bucketizeDistance(F)I
 HSPLcom/android/server/location/LocationUsageLogger;->bucketizeExpireIn(J)I
 HSPLcom/android/server/location/LocationUsageLogger;->bucketizeInterval(J)I
 HSPLcom/android/server/location/LocationUsageLogger;->bucketizeProvider(Ljava/lang/String;)I
+PLcom/android/server/location/LocationUsageLogger;->bucketizeRadius(F)I
 HSPLcom/android/server/location/LocationUsageLogger;->categorizeActivityImportance(I)I
 HSPLcom/android/server/location/LocationUsageLogger;->getCallbackType(IZZ)I
 HSPLcom/android/server/location/LocationUsageLogger;->hitApiUsageLogCap()Z
+PLcom/android/server/location/LocationUsageLogger;->logLocationApiUsage(IILjava/lang/String;)V
 HSPLcom/android/server/location/LocationUsageLogger;->logLocationApiUsage(IILjava/lang/String;Landroid/location/LocationRequest;ZZLandroid/location/Geofence;I)V
+HSPLcom/android/server/location/MockableLocationProvider$ListenerWrapper;-><init>(Lcom/android/server/location/MockableLocationProvider;Lcom/android/server/location/AbstractLocationProvider;)V
+HSPLcom/android/server/location/MockableLocationProvider$ListenerWrapper;-><init>(Lcom/android/server/location/MockableLocationProvider;Lcom/android/server/location/AbstractLocationProvider;Lcom/android/server/location/MockableLocationProvider$1;)V
+HPLcom/android/server/location/MockableLocationProvider$ListenerWrapper;->onReportLocation(Landroid/location/Location;)V
+HSPLcom/android/server/location/MockableLocationProvider$ListenerWrapper;->onStateChanged(Lcom/android/server/location/AbstractLocationProvider$State;Lcom/android/server/location/AbstractLocationProvider$State;)V
+HSPLcom/android/server/location/MockableLocationProvider;-><init>(Landroid/content/Context;Ljava/lang/Object;Lcom/android/server/location/AbstractLocationProvider$Listener;)V
+HSPLcom/android/server/location/MockableLocationProvider;-><init>(Ljava/lang/Object;Lcom/android/server/location/AbstractLocationProvider$Listener;)V
+HSPLcom/android/server/location/MockableLocationProvider;->access$100(Lcom/android/server/location/MockableLocationProvider;)Ljava/lang/Object;
+HSPLcom/android/server/location/MockableLocationProvider;->access$200(Lcom/android/server/location/MockableLocationProvider;)Lcom/android/server/location/AbstractLocationProvider;
+PLcom/android/server/location/MockableLocationProvider;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/location/MockableLocationProvider;->getProvider()Lcom/android/server/location/AbstractLocationProvider;
+HSPLcom/android/server/location/MockableLocationProvider;->getState()Lcom/android/server/location/AbstractLocationProvider$State;
+HSPLcom/android/server/location/MockableLocationProvider;->isMock()Z
+PLcom/android/server/location/MockableLocationProvider;->onExtraCommand(IILjava/lang/String;Landroid/os/Bundle;)V
+HSPLcom/android/server/location/MockableLocationProvider;->onSetRequest(Lcom/android/internal/location/ProviderRequest;)V
+HSPLcom/android/server/location/MockableLocationProvider;->setProviderLocked(Lcom/android/server/location/AbstractLocationProvider;)V
+HSPLcom/android/server/location/MockableLocationProvider;->setRealProvider(Lcom/android/server/location/AbstractLocationProvider;)V
 HSPLcom/android/server/location/NanoAppStateManager;-><init>()V
 HSPLcom/android/server/location/NanoAppStateManager;->addNanoAppInstance(IJI)V
-PLcom/android/server/location/NanoAppStateManager;->foreachNanoAppInstanceInfo(Ljava/util/function/Consumer;)V
+HPLcom/android/server/location/NanoAppStateManager;->foreachNanoAppInstanceInfo(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/location/NanoAppStateManager;->getNanoAppHandle(IJ)I
-PLcom/android/server/location/NanoAppStateManager;->getNanoAppInstanceInfo(I)Landroid/hardware/location/NanoAppInstanceInfo;
+HPLcom/android/server/location/NanoAppStateManager;->getNanoAppInstanceInfo(I)Landroid/hardware/location/NanoAppInstanceInfo;
 HSPLcom/android/server/location/NanoAppStateManager;->handleQueryAppEntry(IJI)V
 HSPLcom/android/server/location/NanoAppStateManager;->removeNanoAppInstance(IJ)V
 HSPLcom/android/server/location/NanoAppStateManager;->updateCache(ILjava/util/List;)V
@@ -10951,10 +18043,12 @@
 PLcom/android/server/location/NtpTimeHelper;->onNetworkAvailable()V
 PLcom/android/server/location/NtpTimeHelper;->retrieveAndInjectNtpTime()V
 HSPLcom/android/server/location/PassiveProvider;-><clinit>()V
+HSPLcom/android/server/location/PassiveProvider;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/location/PassiveProvider;-><init>(Landroid/content/Context;Lcom/android/server/location/AbstractLocationProvider$LocationProviderManager;)V
 PLcom/android/server/location/PassiveProvider;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/location/PassiveProvider;->onSetRequest(Lcom/android/internal/location/ProviderRequest;)V
 HSPLcom/android/server/location/PassiveProvider;->onSetRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
-PLcom/android/server/location/PassiveProvider;->updateLocation(Landroid/location/Location;)V
+HPLcom/android/server/location/PassiveProvider;->updateLocation(Landroid/location/Location;)V
 PLcom/android/server/location/RemoteListenerHelper$1;-><init>(Lcom/android/server/location/RemoteListenerHelper;)V
 PLcom/android/server/location/RemoteListenerHelper$1;->run()V
 HPLcom/android/server/location/RemoteListenerHelper$HandlerRunnable;-><init>(Lcom/android/server/location/RemoteListenerHelper;Lcom/android/server/location/RemoteListenerHelper$IdentifiedListener;Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;)V
@@ -10967,19 +18061,144 @@
 HSPLcom/android/server/location/RemoteListenerHelper;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/String;)V
 PLcom/android/server/location/RemoteListenerHelper;->access$200(Lcom/android/server/location/RemoteListenerHelper;)Z
 PLcom/android/server/location/RemoteListenerHelper;->access$202(Lcom/android/server/location/RemoteListenerHelper;Z)Z
-PLcom/android/server/location/RemoteListenerHelper;->addListener(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
+HPLcom/android/server/location/RemoteListenerHelper;->access$700(Lcom/android/server/location/RemoteListenerHelper;)Ljava/lang/String;
+HPLcom/android/server/location/RemoteListenerHelper;->addListener(Landroid/os/IInterface;Lcom/android/server/location/CallerIdentity;)V
 HSPLcom/android/server/location/RemoteListenerHelper;->calculateCurrentResultUnsafe()I
 HPLcom/android/server/location/RemoteListenerHelper;->foreach(Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;)V
 HSPLcom/android/server/location/RemoteListenerHelper;->foreachUnsafe(Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;)V
 HPLcom/android/server/location/RemoteListenerHelper;->hasPermission(Landroid/content/Context;Lcom/android/server/location/CallerIdentity;)Z
-PLcom/android/server/location/RemoteListenerHelper;->post(Lcom/android/server/location/RemoteListenerHelper$IdentifiedListener;Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;)V
-PLcom/android/server/location/RemoteListenerHelper;->removeListener(Landroid/os/IInterface;)V
+PLcom/android/server/location/RemoteListenerHelper;->isRegistered()Z
+PLcom/android/server/location/RemoteListenerHelper;->lambda$tryUnregister$0$RemoteListenerHelper()V
+HPLcom/android/server/location/RemoteListenerHelper;->post(Lcom/android/server/location/RemoteListenerHelper$IdentifiedListener;Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;)V
+HPLcom/android/server/location/RemoteListenerHelper;->removeListener(Landroid/os/IInterface;)V
 HSPLcom/android/server/location/RemoteListenerHelper;->setSupported(Z)V
 PLcom/android/server/location/RemoteListenerHelper;->tryRegister()V
+HPLcom/android/server/location/RemoteListenerHelper;->tryUnregister()V
 HSPLcom/android/server/location/RemoteListenerHelper;->tryUpdateRegistrationWithService()V
 HSPLcom/android/server/location/RemoteListenerHelper;->updateResult()V
+PLcom/android/server/location/SettingsHelper$GlobalSettingChangedListener;->onSettingChanged(I)V
+HSPLcom/android/server/location/SettingsHelper$IntegerSecureSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Handler;)V
+HSPLcom/android/server/location/SettingsHelper$IntegerSecureSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Handler;Lcom/android/server/location/SettingsHelper$1;)V
+HSPLcom/android/server/location/SettingsHelper$IntegerSecureSetting;->access$400(Lcom/android/server/location/SettingsHelper$IntegerSecureSetting;)V
+HSPLcom/android/server/location/SettingsHelper$IntegerSecureSetting;->getValueForUser(II)I
+HSPLcom/android/server/location/SettingsHelper$IntegerSecureSetting;->register()V
+HSPLcom/android/server/location/SettingsHelper$LongGlobalSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Handler;)V
+HSPLcom/android/server/location/SettingsHelper$LongGlobalSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Handler;Lcom/android/server/location/SettingsHelper$1;)V
+HSPLcom/android/server/location/SettingsHelper$LongGlobalSetting;->getValue(J)J
+HSPLcom/android/server/location/SettingsHelper$LongGlobalSetting;->register()V
+HSPLcom/android/server/location/SettingsHelper$ObservingSetting;-><init>(Landroid/os/Handler;)V
+HSPLcom/android/server/location/SettingsHelper$ObservingSetting;-><init>(Landroid/os/Handler;Lcom/android/server/location/SettingsHelper$1;)V
+HSPLcom/android/server/location/SettingsHelper$ObservingSetting;->addListener(Lcom/android/server/location/SettingsHelper$UserSettingChangedListener;)V
+HPLcom/android/server/location/SettingsHelper$ObservingSetting;->isRegistered()Z
+HPLcom/android/server/location/SettingsHelper$ObservingSetting;->onChange(ZLandroid/net/Uri;I)V
+HSPLcom/android/server/location/SettingsHelper$ObservingSetting;->register(Landroid/content/Context;Landroid/net/Uri;)V
+HSPLcom/android/server/location/SettingsHelper$StringListCachedSecureSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Handler;)V
+HSPLcom/android/server/location/SettingsHelper$StringListCachedSecureSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Handler;Lcom/android/server/location/SettingsHelper$1;)V
+HPLcom/android/server/location/SettingsHelper$StringListCachedSecureSetting;->getValueForUser(I)Ljava/util/List;
+HSPLcom/android/server/location/SettingsHelper$StringListCachedSecureSetting;->register()V
+HSPLcom/android/server/location/SettingsHelper$StringSetCachedGlobalSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/util/function/Supplier;Landroid/os/Handler;)V
+HSPLcom/android/server/location/SettingsHelper$StringSetCachedGlobalSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/util/function/Supplier;Landroid/os/Handler;Lcom/android/server/location/SettingsHelper$1;)V
+HPLcom/android/server/location/SettingsHelper$StringSetCachedGlobalSetting;->getValue()Ljava/util/Set;
+PLcom/android/server/location/SettingsHelper$StringSetCachedGlobalSetting;->invalidate()V
+PLcom/android/server/location/SettingsHelper$StringSetCachedGlobalSetting;->onChange(ZLandroid/net/Uri;I)V
+HSPLcom/android/server/location/SettingsHelper$StringSetCachedGlobalSetting;->register()V
+HSPLcom/android/server/location/SettingsHelper;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+HSPLcom/android/server/location/SettingsHelper;->addOnBackgroundThrottleIntervalChangedListener(Lcom/android/server/location/SettingsHelper$GlobalSettingChangedListener;)V
+HSPLcom/android/server/location/SettingsHelper;->addOnBackgroundThrottlePackageWhitelistChangedListener(Lcom/android/server/location/SettingsHelper$GlobalSettingChangedListener;)V
+HSPLcom/android/server/location/SettingsHelper;->addOnIgnoreSettingsPackageWhitelistChangedListener(Lcom/android/server/location/SettingsHelper$GlobalSettingChangedListener;)V
+HSPLcom/android/server/location/SettingsHelper;->addOnLocationEnabledChangedListener(Lcom/android/server/location/SettingsHelper$UserSettingChangedListener;)V
+PLcom/android/server/location/SettingsHelper;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/location/SettingsHelper;->getBackgroundThrottleIntervalMs()J
+HPLcom/android/server/location/SettingsHelper;->getBackgroundThrottlePackageWhitelist()Ljava/util/Set;
+HPLcom/android/server/location/SettingsHelper;->getMaxLastLocationAgeMs()J
+HSPLcom/android/server/location/SettingsHelper;->isLocationEnabled(I)Z
+HPLcom/android/server/location/SettingsHelper;->isLocationPackageBlacklisted(ILjava/lang/String;)Z
+PLcom/android/server/location/SettingsHelper;->lambda$new$0()Landroid/util/ArraySet;
+PLcom/android/server/location/SettingsHelper;->lambda$new$1()Landroid/util/ArraySet;
+HSPLcom/android/server/location/SettingsHelper;->onSystemReady()V
+HSPLcom/android/server/location/SettingsHelper;->setLocationProviderAllowed(Ljava/lang/String;ZI)V
+HSPLcom/android/server/location/UserInfoHelper$1;-><init>(Lcom/android/server/location/UserInfoHelper;)V
+PLcom/android/server/location/UserInfoHelper$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/location/UserInfoHelper;-><init>(Landroid/content/Context;)V
+PLcom/android/server/location/UserInfoHelper;->access$000(Lcom/android/server/location/UserInfoHelper;I)V
+PLcom/android/server/location/UserInfoHelper;->access$100(Lcom/android/server/location/UserInfoHelper;)V
+HSPLcom/android/server/location/UserInfoHelper;->addListener(Lcom/android/server/location/UserInfoHelper$UserChangedListener;)V
+PLcom/android/server/location/UserInfoHelper;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/location/UserInfoHelper;->getCurrentUserId()I
+HSPLcom/android/server/location/UserInfoHelper;->getParentUserId(I)I
+HSPLcom/android/server/location/UserInfoHelper;->getProfileUserIdsForParentUser(I)[I
+HSPLcom/android/server/location/UserInfoHelper;->isCurrentUserOrProfile(I)Z
+HSPLcom/android/server/location/UserInfoHelper;->onSystemReady()V
+PLcom/android/server/location/UserInfoHelper;->onUserChanged(I)V
+PLcom/android/server/location/UserInfoHelper;->onUserProfilesChanged()V
+HSPLcom/android/server/location/UserInfoStore$1;-><init>(Lcom/android/server/location/UserInfoStore;)V
+HSPLcom/android/server/location/UserInfoStore$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/location/UserInfoStore;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/location/UserInfoStore;->access$000(Lcom/android/server/location/UserInfoStore;I)V
+PLcom/android/server/location/UserInfoStore;->access$100(Lcom/android/server/location/UserInfoStore;)V
+HSPLcom/android/server/location/UserInfoStore;->addListener(Lcom/android/server/location/UserInfoStore$UserChangedListener;)V
+PLcom/android/server/location/UserInfoStore;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/location/UserInfoStore;->getCurrentUserId()I
+HSPLcom/android/server/location/UserInfoStore;->getParentUserId(I)I
+HSPLcom/android/server/location/UserInfoStore;->getProfileUserIdsForParentUser(I)[I
+HSPLcom/android/server/location/UserInfoStore;->isCurrentUserOrProfile(I)Z
+HSPLcom/android/server/location/UserInfoStore;->onSystemReady()V
+HSPLcom/android/server/location/UserInfoStore;->onUserChanged(I)V
+PLcom/android/server/location/UserInfoStore;->onUserProfilesChanged()V
+PLcom/android/server/location/gnss/-$$Lambda$FxAranobP2o6eVcPEOp8tzZYyLY;-><init>(Lcom/android/server/location/gnss/GnssManagerService;)V
+PLcom/android/server/location/gnss/-$$Lambda$FxAranobP2o6eVcPEOp8tzZYyLY;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/location/gnss/-$$Lambda$GnssManagerService$UdLm78gS4fBvCkzR5_od9MCx3_M;-><init>(Lcom/android/server/location/gnss/GnssManagerService;)V
+HSPLcom/android/server/location/gnss/-$$Lambda$GnssManagerService$UdLm78gS4fBvCkzR5_od9MCx3_M;->onUidImportance(II)V
+HSPLcom/android/server/location/gnss/-$$Lambda$GnssManagerService$Xb7pwmWy3YdCevK1MZL3c-zTOco;-><init>(Lcom/android/server/location/gnss/GnssManagerService;II)V
+HSPLcom/android/server/location/gnss/-$$Lambda$GnssManagerService$Xb7pwmWy3YdCevK1MZL3c-zTOco;->run()V
+HSPLcom/android/server/location/gnss/-$$Lambda$GnssManagerService$de6v4jWKxQDC9J4FdGGrfKg2phA;-><init>(Lcom/android/server/location/gnss/GnssManagerService;)V
+HSPLcom/android/server/location/gnss/-$$Lambda$GnssManagerService$de6v4jWKxQDC9J4FdGGrfKg2phA;->onAppForegroundChanged(IZ)V
+HSPLcom/android/server/location/gnss/-$$Lambda$HALkbmbB2IPr_wdFkPjiIWCzJsY;-><clinit>()V
+HSPLcom/android/server/location/gnss/-$$Lambda$HALkbmbB2IPr_wdFkPjiIWCzJsY;-><init>()V
+PLcom/android/server/location/gnss/-$$Lambda$WsssLeTVg_jaQ16K-SvqbRc0TV8;-><init>(Lcom/android/server/location/gnss/GnssManagerService;)V
+PLcom/android/server/location/gnss/-$$Lambda$WsssLeTVg_jaQ16K-SvqbRc0TV8;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/location/gnss/-$$Lambda$hu439-4T6QBT8QyZnspMtXqICWs;-><clinit>()V
+HSPLcom/android/server/location/gnss/-$$Lambda$hu439-4T6QBT8QyZnspMtXqICWs;-><init>()V
+HPLcom/android/server/location/gnss/-$$Lambda$hu439-4T6QBT8QyZnspMtXqICWs;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/location/gnss/-$$Lambda$qoNbXUvSu3yuTPVXPUfZW_HDrTQ;-><clinit>()V
+HSPLcom/android/server/location/gnss/-$$Lambda$qoNbXUvSu3yuTPVXPUfZW_HDrTQ;-><init>()V
+PLcom/android/server/location/gnss/-$$Lambda$qoNbXUvSu3yuTPVXPUfZW_HDrTQ;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/location/gnss/GnssManagerService;-><clinit>()V
+HSPLcom/android/server/location/gnss/GnssManagerService;-><init>(Landroid/content/Context;Lcom/android/server/location/SettingsHelper;Lcom/android/server/location/AppForegroundHelper;Lcom/android/server/location/LocationUsageLogger;)V
+HSPLcom/android/server/location/gnss/GnssManagerService;-><init>(Landroid/content/Context;Lcom/android/server/location/SettingsHelper;Lcom/android/server/location/AppForegroundHelper;Lcom/android/server/location/LocationUsageLogger;Lcom/android/server/location/GnssLocationProvider;)V
+HSPLcom/android/server/location/gnss/GnssManagerService;-><init>(Lcom/android/server/LocationManagerService;Landroid/content/Context;Lcom/android/server/location/GnssLocationProvider;Lcom/android/server/location/LocationUsageLogger;)V
+HSPLcom/android/server/location/gnss/GnssManagerService;-><init>(Lcom/android/server/LocationManagerService;Landroid/content/Context;Lcom/android/server/location/LocationUsageLogger;)V
+HPLcom/android/server/location/gnss/GnssManagerService;->addGnssDataListenerLocked(Landroid/os/IInterface;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/location/RemoteListenerHelper;Landroid/util/ArrayMap;Ljava/util/function/Consumer;)Z
+PLcom/android/server/location/gnss/GnssManagerService;->addGnssMeasurementsListener(Landroid/location/IGnssMeasurementsListener;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/location/gnss/GnssManagerService;->checkLocationAppOp(Ljava/lang/String;)Z
+PLcom/android/server/location/gnss/GnssManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/location/gnss/GnssManagerService;->getGnssCapabilities(Ljava/lang/String;)J
+HSPLcom/android/server/location/gnss/GnssManagerService;->getGnssLocationProvider()Lcom/android/server/location/GnssLocationProvider;
+HSPLcom/android/server/location/gnss/GnssManagerService;->getGpsGeofenceProxy()Landroid/location/IGpsGeofenceHardware;
+HPLcom/android/server/location/gnss/GnssManagerService;->hasGnssPermissions(Ljava/lang/String;)Z
+PLcom/android/server/location/gnss/GnssManagerService;->injectGnssMeasurementCorrections(Landroid/location/GnssMeasurementCorrections;Ljava/lang/String;)V
+HSPLcom/android/server/location/gnss/GnssManagerService;->isGnssSupported()Z
+HPLcom/android/server/location/gnss/GnssManagerService;->isThrottlingExempt(Lcom/android/server/location/CallerIdentity;)Z
+HSPLcom/android/server/location/gnss/GnssManagerService;->lambda$de6v4jWKxQDC9J4FdGGrfKg2phA(Lcom/android/server/location/gnss/GnssManagerService;IZ)V
+HSPLcom/android/server/location/gnss/GnssManagerService;->lambda$registerUidListener$1$GnssManagerService(II)V
+HSPLcom/android/server/location/gnss/GnssManagerService;->lambda$registerUidListener$2$GnssManagerService(II)V
+HSPLcom/android/server/location/gnss/GnssManagerService;->onAppForegroundChanged(IZ)V
+HSPLcom/android/server/location/gnss/GnssManagerService;->onForegroundChanged(IZ)V
+HSPLcom/android/server/location/gnss/GnssManagerService;->onSystemReady()V
+PLcom/android/server/location/gnss/GnssManagerService;->registerGnssStatusCallback(Landroid/location/IGnssStatusListener;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/server/location/gnss/GnssManagerService;->registerUidListener()V
+HPLcom/android/server/location/gnss/GnssManagerService;->removeGnssDataListener(Landroid/os/IInterface;Lcom/android/server/location/RemoteListenerHelper;Landroid/util/ArrayMap;)V
+PLcom/android/server/location/gnss/GnssManagerService;->removeGnssDataListenerLocked(Landroid/os/IInterface;Lcom/android/server/location/RemoteListenerHelper;Landroid/util/ArrayMap;)V
+PLcom/android/server/location/gnss/GnssManagerService;->removeGnssMeasurementsListener(Landroid/location/IGnssMeasurementsListener;)V
+PLcom/android/server/location/gnss/GnssManagerService;->unregisterGnssStatusCallback(Landroid/location/IGnssStatusListener;)V
+HSPLcom/android/server/location/gnss/GnssManagerService;->updateListenersOnForegroundChangedLocked(Landroid/util/ArrayMap;Lcom/android/server/location/RemoteListenerHelper;Ljava/util/function/Function;IZ)V
+HSPLcom/android/server/location/gnss/GnssManagerService;->updateListenersOnForegroundChangedLocked(Ljava/util/Map;Lcom/android/server/location/RemoteListenerHelper;Ljava/util/function/Function;IZ)V
 PLcom/android/server/locksettings/-$$Lambda$LockSettingsService$25VQEBWGuGqdc4Xjn9m8HXt9ZTI;-><init>(Lcom/android/server/locksettings/LockSettingsService;Ljava/util/ArrayList;I)V
 PLcom/android/server/locksettings/-$$Lambda$LockSettingsService$25VQEBWGuGqdc4Xjn9m8HXt9ZTI;->run()V
+PLcom/android/server/locksettings/-$$Lambda$LockSettingsService$6ZJNEvi0AXsP3F_UD8F01RaIg3M;-><init>(I)V
+PLcom/android/server/locksettings/-$$Lambda$LockSettingsService$6ZJNEvi0AXsP3F_UD8F01RaIg3M;->run()V
+PLcom/android/server/locksettings/-$$Lambda$LockSettingsService$uLUdo5pAFhnR0hn-L5FUgWTjl70;-><init>(Lcom/android/server/locksettings/LockSettingsService;I)V
+PLcom/android/server/locksettings/-$$Lambda$LockSettingsService$uLUdo5pAFhnR0hn-L5FUgWTjl70;->run()V
 HSPLcom/android/server/locksettings/-$$Lambda$SyntheticPasswordManager$WjMV-qfQ1YUbeAiLzyAhyepqPFI;-><init>(Lcom/android/server/locksettings/SyntheticPasswordManager;)V
 HSPLcom/android/server/locksettings/-$$Lambda$SyntheticPasswordManager$WjMV-qfQ1YUbeAiLzyAhyepqPFI;->onValues(ILandroid/hardware/weaver/V1_0/WeaverConfig;)V
 PLcom/android/server/locksettings/-$$Lambda$SyntheticPasswordManager$aWnbfYziDTrRrLqWFePMTj6-dy0;-><init>([Lcom/android/internal/widget/VerifyCredentialResponse;I)V
@@ -10987,13 +18206,14 @@
 PLcom/android/server/locksettings/LockSettingsService$1;-><init>(Lcom/android/server/locksettings/LockSettingsService;I)V
 PLcom/android/server/locksettings/LockSettingsService$1;->run()V
 HSPLcom/android/server/locksettings/LockSettingsService$2;-><init>(Lcom/android/server/locksettings/LockSettingsService;)V
-PLcom/android/server/locksettings/LockSettingsService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/locksettings/LockSettingsService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/locksettings/LockSettingsService$3;-><init>(Lcom/android/server/locksettings/LockSettingsService;Ljava/util/concurrent/CountDownLatch;)V
-PLcom/android/server/locksettings/LockSettingsService$3;->onFinished(ILandroid/os/Bundle;)V
+HPLcom/android/server/locksettings/LockSettingsService$3;->onFinished(ILandroid/os/Bundle;)V
 PLcom/android/server/locksettings/LockSettingsService$3;->onProgress(IILandroid/os/Bundle;)V
 PLcom/android/server/locksettings/LockSettingsService$3;->onStarted(ILandroid/os/Bundle;)V
 HSPLcom/android/server/locksettings/LockSettingsService$DeviceProvisionedObserver;-><init>(Lcom/android/server/locksettings/LockSettingsService;)V
 HSPLcom/android/server/locksettings/LockSettingsService$DeviceProvisionedObserver;->isProvisioned()Z
+PLcom/android/server/locksettings/LockSettingsService$DeviceProvisionedObserver;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/locksettings/LockSettingsService$DeviceProvisionedObserver;->onSystemReady()V
 HSPLcom/android/server/locksettings/LockSettingsService$DeviceProvisionedObserver;->updateRegistration()V
 HSPLcom/android/server/locksettings/LockSettingsService$GateKeeperDiedRecipient;-><init>(Lcom/android/server/locksettings/LockSettingsService;)V
@@ -11002,10 +18222,14 @@
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getActivityManager()Landroid/app/IActivityManager;
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getContext()Landroid/content/Context;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getDevicePolicyManager()Landroid/app/admin/DevicePolicyManager;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getDeviceStateCache()Landroid/app/admin/DeviceStateCache;
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getHandler(Lcom/android/server/ServiceThread;)Landroid/os/Handler;
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getKeyStore()Landroid/security/KeyStore;
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getLockPatternUtils()Lcom/android/internal/widget/LockPatternUtils;
+HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getManagedProfilePasswordCache()Lcom/android/server/locksettings/ManagedProfilePasswordCache;
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getNotificationManager()Landroid/app/NotificationManager;
+HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getRebootEscrowManager(Lcom/android/server/locksettings/RebootEscrowManager$Callbacks;Lcom/android/server/locksettings/LockSettingsStorage;)Lcom/android/server/locksettings/RebootEscrowManager;
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getRecoverableKeyStoreManager(Landroid/security/KeyStore;)Lcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getServiceThread()Lcom/android/server/ServiceThread;
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getStorage()Lcom/android/server/locksettings/LockSettingsStorage;
@@ -11014,16 +18238,27 @@
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getStrongAuthTracker()Lcom/android/server/locksettings/LockSettingsService$SynchronizedStrongAuthTracker;
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getSyntheticPasswordManager(Lcom/android/server/locksettings/LockSettingsStorage;)Lcom/android/server/locksettings/SyntheticPasswordManager;
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getUserManager()Landroid/os/UserManager;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getUserManagerInternal()Landroid/os/UserManagerInternal;
 PLcom/android/server/locksettings/LockSettingsService$Injector;->hasEnrolledBiometrics(I)Z
+PLcom/android/server/locksettings/LockSettingsService$Injector;->isGsiRunning()Z
 HSPLcom/android/server/locksettings/LockSettingsService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/locksettings/LockSettingsService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/locksettings/LockSettingsService$Lifecycle;->onCleanupUser(I)V
 HSPLcom/android/server/locksettings/LockSettingsService$Lifecycle;->onStart()V
-PLcom/android/server/locksettings/LockSettingsService$Lifecycle;->onStartUser(I)V
+HSPLcom/android/server/locksettings/LockSettingsService$Lifecycle;->onStartUser(I)V
 PLcom/android/server/locksettings/LockSettingsService$Lifecycle;->onUnlockUser(I)V
 HSPLcom/android/server/locksettings/LockSettingsService$LocalService;-><init>(Lcom/android/server/locksettings/LockSettingsService;)V
 HSPLcom/android/server/locksettings/LockSettingsService$LocalService;-><init>(Lcom/android/server/locksettings/LockSettingsService;Lcom/android/server/locksettings/LockSettingsService$1;)V
+PLcom/android/server/locksettings/LockSettingsService$LocalService;->addEscrowToken([BILcom/android/internal/widget/LockPatternUtils$EscrowTokenStateChangeCallback;)J
 HPLcom/android/server/locksettings/LockSettingsService$LocalService;->getUserPasswordMetrics(I)Landroid/app/admin/PasswordMetrics;
+PLcom/android/server/locksettings/LockSettingsService$LocalService;->isEscrowTokenActive(JI)Z
+PLcom/android/server/locksettings/LockSettingsService$LocalService;->prepareRebootEscrow()V
+HSPLcom/android/server/locksettings/LockSettingsService$LocalService;->setRebootEscrowListener(Lcom/android/internal/widget/RebootEscrowListener;)V
 PLcom/android/server/locksettings/LockSettingsService$PendingResetLockout;-><init>(Lcom/android/server/locksettings/LockSettingsService;I[B)V
+HSPLcom/android/server/locksettings/LockSettingsService$RebootEscrowCallbacks;-><init>(Lcom/android/server/locksettings/LockSettingsService;)V
+HSPLcom/android/server/locksettings/LockSettingsService$RebootEscrowCallbacks;-><init>(Lcom/android/server/locksettings/LockSettingsService;Lcom/android/server/locksettings/LockSettingsService$1;)V
+HSPLcom/android/server/locksettings/LockSettingsService$RebootEscrowCallbacks;->isUserSecure(I)Z
+PLcom/android/server/locksettings/LockSettingsService$RebootEscrowCallbacks;->onRebootEscrowRestored(B[BI)V
 HSPLcom/android/server/locksettings/LockSettingsService$SynchronizedStrongAuthTracker;-><init>(Landroid/content/Context;)V
 PLcom/android/server/locksettings/LockSettingsService$SynchronizedStrongAuthTracker;->getStrongAuthForUser(I)I
 PLcom/android/server/locksettings/LockSettingsService$SynchronizedStrongAuthTracker;->handleStrongAuthRequiredChanged(II)V
@@ -11033,79 +18268,142 @@
 HSPLcom/android/server/locksettings/LockSettingsService;-><init>(Lcom/android/server/locksettings/LockSettingsService$Injector;)V
 HSPLcom/android/server/locksettings/LockSettingsService;->access$000(Lcom/android/server/locksettings/LockSettingsService;)V
 HSPLcom/android/server/locksettings/LockSettingsService;->access$1000(Lcom/android/server/locksettings/LockSettingsService;)Landroid/content/Context;
+HSPLcom/android/server/locksettings/LockSettingsService;->access$1100(Lcom/android/server/locksettings/LockSettingsService;)Landroid/content/Context;
+PLcom/android/server/locksettings/LockSettingsService;->access$1200(Lcom/android/server/locksettings/LockSettingsService;[BILcom/android/internal/widget/LockPatternUtils$EscrowTokenStateChangeCallback;)J
+PLcom/android/server/locksettings/LockSettingsService;->access$1400(Lcom/android/server/locksettings/LockSettingsService;JI)Z
 PLcom/android/server/locksettings/LockSettingsService;->access$1700(Lcom/android/server/locksettings/LockSettingsService;I)Z
+HSPLcom/android/server/locksettings/LockSettingsService;->access$1800(Lcom/android/server/locksettings/LockSettingsService;)Lcom/android/server/locksettings/RebootEscrowManager;
+PLcom/android/server/locksettings/LockSettingsService;->access$1900(Lcom/android/server/locksettings/LockSettingsService;)Lcom/android/server/locksettings/LockSettingsStrongAuth;
 PLcom/android/server/locksettings/LockSettingsService;->access$200(Lcom/android/server/locksettings/LockSettingsService;I)V
+PLcom/android/server/locksettings/LockSettingsService;->access$2000(Lcom/android/server/locksettings/LockSettingsService;Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;IJLjava/util/ArrayList;I)V
 PLcom/android/server/locksettings/LockSettingsService;->access$300(Lcom/android/server/locksettings/LockSettingsService;I)V
+PLcom/android/server/locksettings/LockSettingsService;->access$400(Lcom/android/server/locksettings/LockSettingsService;I)V
 PLcom/android/server/locksettings/LockSettingsService;->access$400(Lcom/android/server/locksettings/LockSettingsService;Landroid/os/UserHandle;)V
 PLcom/android/server/locksettings/LockSettingsService;->access$500(Lcom/android/server/locksettings/LockSettingsService;)Landroid/os/UserManager;
+PLcom/android/server/locksettings/LockSettingsService;->access$500(Lcom/android/server/locksettings/LockSettingsService;Landroid/os/UserHandle;)V
+PLcom/android/server/locksettings/LockSettingsService;->access$600(Lcom/android/server/locksettings/LockSettingsService;)Landroid/os/UserManager;
 PLcom/android/server/locksettings/LockSettingsService;->access$600(Lcom/android/server/locksettings/LockSettingsService;I)Z
-PLcom/android/server/locksettings/LockSettingsService;->activateEscrowTokens(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)V
+HSPLcom/android/server/locksettings/LockSettingsService;->access$700(Lcom/android/server/locksettings/LockSettingsService;I)Z
+PLcom/android/server/locksettings/LockSettingsService;->access$800(Lcom/android/server/locksettings/LockSettingsService;I)V
+PLcom/android/server/locksettings/LockSettingsService;->access$900(Lcom/android/server/locksettings/LockSettingsService;IZ)V
+HPLcom/android/server/locksettings/LockSettingsService;->activateEscrowTokens(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)V
+PLcom/android/server/locksettings/LockSettingsService;->addEscrowToken([BILcom/android/internal/widget/LockPatternUtils$EscrowTokenStateChangeCallback;)J
+PLcom/android/server/locksettings/LockSettingsService;->addUserKeyAuth(I[B[B)V
+HPLcom/android/server/locksettings/LockSettingsService;->callToAuthSecretIfNeeded(ILcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;)V
 PLcom/android/server/locksettings/LockSettingsService;->checkCredential(Lcom/android/internal/widget/LockscreenCredential;ILcom/android/internal/widget/ICheckCredentialProgressCallback;)Lcom/android/internal/widget/VerifyCredentialResponse;
 HSPLcom/android/server/locksettings/LockSettingsService;->checkPasswordHavePermission(I)V
 HSPLcom/android/server/locksettings/LockSettingsService;->checkPasswordReadPermission(I)V
 HSPLcom/android/server/locksettings/LockSettingsService;->checkReadPermission(Ljava/lang/String;I)V
-PLcom/android/server/locksettings/LockSettingsService;->checkVoldPassword(I)Z
+HPLcom/android/server/locksettings/LockSettingsService;->checkVoldPassword(I)Z
 HSPLcom/android/server/locksettings/LockSettingsService;->checkWritePermission(I)V
 PLcom/android/server/locksettings/LockSettingsService;->cleanupDataForReusedUserIdIfNecessary(I)V
-PLcom/android/server/locksettings/LockSettingsService;->disableEscrowTokenOnNonManagedDevicesIfNeeded(I)V
+PLcom/android/server/locksettings/LockSettingsService;->clearUserKeyProtection(I)V
+PLcom/android/server/locksettings/LockSettingsService;->clearUserKeyProtection(I[B)V
+HPLcom/android/server/locksettings/LockSettingsService;->disableEscrowTokenOnNonManagedDevicesIfNeeded(I)V
 PLcom/android/server/locksettings/LockSettingsService;->doVerifyCredential(Lcom/android/internal/widget/LockscreenCredential;IJILcom/android/internal/widget/ICheckCredentialProgressCallback;)Lcom/android/internal/widget/VerifyCredentialResponse;
 PLcom/android/server/locksettings/LockSettingsService;->doVerifyCredential(Lcom/android/internal/widget/LockscreenCredential;IJILcom/android/internal/widget/ICheckCredentialProgressCallback;Ljava/util/ArrayList;)Lcom/android/internal/widget/VerifyCredentialResponse;
 PLcom/android/server/locksettings/LockSettingsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/locksettings/LockSettingsService;->ensureProfileKeystoreUnlocked(I)V
+PLcom/android/server/locksettings/LockSettingsService;->fixateNewestUserKeyAuth(I)V
+PLcom/android/server/locksettings/LockSettingsService;->gateKeeperClearSecureUserId(I)V
 PLcom/android/server/locksettings/LockSettingsService;->generateKey(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/locksettings/LockSettingsService;->generateRandomProfilePassword()Lcom/android/internal/widget/LockscreenCredential;
+HSPLcom/android/server/locksettings/LockSettingsService;->getAuthSecretHal()V
 HSPLcom/android/server/locksettings/LockSettingsService;->getBoolean(Ljava/lang/String;ZI)Z
 HSPLcom/android/server/locksettings/LockSettingsService;->getBooleanUnchecked(Ljava/lang/String;ZI)Z
 HSPLcom/android/server/locksettings/LockSettingsService;->getCredentialType(I)I
 HSPLcom/android/server/locksettings/LockSettingsService;->getCredentialTypeInternal(I)I
-PLcom/android/server/locksettings/LockSettingsService;->getDecryptedPasswordForTiedProfile(I)Lcom/android/internal/widget/LockscreenCredential;
+HPLcom/android/server/locksettings/LockSettingsService;->getDecryptedPasswordForTiedProfile(I)Lcom/android/internal/widget/LockscreenCredential;
 HSPLcom/android/server/locksettings/LockSettingsService;->getGateKeeperService()Landroid/service/gatekeeper/IGateKeeperService;
+PLcom/android/server/locksettings/LockSettingsService;->getHashFactor(Lcom/android/internal/widget/LockscreenCredential;I)[B
 PLcom/android/server/locksettings/LockSettingsService;->getIntUnchecked(Ljava/lang/String;II)I
-PLcom/android/server/locksettings/LockSettingsService;->getKey(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/locksettings/LockSettingsService;->getKey(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/locksettings/LockSettingsService;->getKeyChainSnapshot()Landroid/security/keystore/recovery/KeyChainSnapshot;
+HSPLcom/android/server/locksettings/LockSettingsService;->getKeyguardStoredQuality(I)I
 HSPLcom/android/server/locksettings/LockSettingsService;->getLong(Ljava/lang/String;JI)J
 HSPLcom/android/server/locksettings/LockSettingsService;->getLongUnchecked(Ljava/lang/String;JI)J
-PLcom/android/server/locksettings/LockSettingsService;->getProfilesWithSameLockScreen(I)Ljava/util/Set;
+HPLcom/android/server/locksettings/LockSettingsService;->getProfilesWithSameLockScreen(I)Ljava/util/Set;
 PLcom/android/server/locksettings/LockSettingsService;->getRecoverySecretTypes()[I
-PLcom/android/server/locksettings/LockSettingsService;->getRecoveryStatus()Ljava/util/Map;
+HPLcom/android/server/locksettings/LockSettingsService;->getRecoveryStatus()Ljava/util/Map;
 HSPLcom/android/server/locksettings/LockSettingsService;->getSeparateProfileChallengeEnabled(I)Z
 HSPLcom/android/server/locksettings/LockSettingsService;->getSeparateProfileChallengeEnabledInternal(I)Z
 HSPLcom/android/server/locksettings/LockSettingsService;->getString(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsService;->getStringUnchecked(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
 PLcom/android/server/locksettings/LockSettingsService;->getStrongAuthForUser(I)I
 HSPLcom/android/server/locksettings/LockSettingsService;->getSyntheticPasswordHandleLocked(I)J
-PLcom/android/server/locksettings/LockSettingsService;->getUserPasswordMetrics(I)Landroid/app/admin/PasswordMetrics;
+HPLcom/android/server/locksettings/LockSettingsService;->getUserPasswordMetrics(I)Landroid/app/admin/PasswordMetrics;
+PLcom/android/server/locksettings/LockSettingsService;->hasPendingEscrowToken(I)Z
+PLcom/android/server/locksettings/LockSettingsService;->hasSecureLockScreen()Z
+PLcom/android/server/locksettings/LockSettingsService;->hasUnifiedChallenge(I)Z
 PLcom/android/server/locksettings/LockSettingsService;->hideEncryptionNotification(Landroid/os/UserHandle;)V
 PLcom/android/server/locksettings/LockSettingsService;->initRecoveryServiceWithSigFile(Ljava/lang/String;[B[B)V
-PLcom/android/server/locksettings/LockSettingsService;->isManagedProfileWithSeparatedLock(I)Z
-PLcom/android/server/locksettings/LockSettingsService;->isManagedProfileWithUnifiedLock(I)Z
+PLcom/android/server/locksettings/LockSettingsService;->initializeSyntheticPasswordLocked([BLcom/android/internal/widget/LockscreenCredential;I)Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;
+PLcom/android/server/locksettings/LockSettingsService;->isEscrowTokenActive(JI)Z
+HPLcom/android/server/locksettings/LockSettingsService;->isManagedProfileWithSeparatedLock(I)Z
+HPLcom/android/server/locksettings/LockSettingsService;->isManagedProfileWithUnifiedLock(I)Z
 HSPLcom/android/server/locksettings/LockSettingsService;->isSyntheticPasswordBasedCredentialLocked(I)Z
 PLcom/android/server/locksettings/LockSettingsService;->isUserKeyUnlocked(I)Z
-PLcom/android/server/locksettings/LockSettingsService;->isUserSecure(I)Z
-PLcom/android/server/locksettings/LockSettingsService;->lambda$unlockUser$1$LockSettingsService(Ljava/util/ArrayList;I)V
-PLcom/android/server/locksettings/LockSettingsService;->maybeShowEncryptionNotificationForUser(I)V
+HSPLcom/android/server/locksettings/LockSettingsService;->isUserSecure(I)Z
+PLcom/android/server/locksettings/LockSettingsService;->lambda$notifyPasswordChanged$2$LockSettingsService(I)V
+PLcom/android/server/locksettings/LockSettingsService;->lambda$notifySeparateProfileChallengeChanged$0(I)V
+HPLcom/android/server/locksettings/LockSettingsService;->lambda$unlockUser$1$LockSettingsService(Ljava/util/ArrayList;I)V
+HSPLcom/android/server/locksettings/LockSettingsService;->maybeShowEncryptionNotificationForUser(I)V
 HSPLcom/android/server/locksettings/LockSettingsService;->migrateOldData()V
 HSPLcom/android/server/locksettings/LockSettingsService;->migrateOldDataAfterSystemReady()V
+PLcom/android/server/locksettings/LockSettingsService;->notifyPasswordChanged(I)V
+PLcom/android/server/locksettings/LockSettingsService;->notifySeparateProfileChallengeChanged(I)V
 PLcom/android/server/locksettings/LockSettingsService;->onAuthTokenKnownForUser(ILcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;)V
-PLcom/android/server/locksettings/LockSettingsService;->onStartUser(I)V
+PLcom/android/server/locksettings/LockSettingsService;->onCleanupUser(I)V
+HPLcom/android/server/locksettings/LockSettingsService;->onCredentialVerified(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;IJLjava/util/ArrayList;I)V
+HSPLcom/android/server/locksettings/LockSettingsService;->onStartUser(I)V
 PLcom/android/server/locksettings/LockSettingsService;->onUnlockUser(I)V
+HSPLcom/android/server/locksettings/LockSettingsService;->pinOrPasswordQualityToCredentialType(I)I
 HSPLcom/android/server/locksettings/LockSettingsService;->registerStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
-PLcom/android/server/locksettings/LockSettingsService;->sendCredentialsOnUnlockIfRequired(Lcom/android/internal/widget/LockscreenCredential;I)V
+PLcom/android/server/locksettings/LockSettingsService;->removeKey(Ljava/lang/String;)V
+PLcom/android/server/locksettings/LockSettingsService;->removeKeystoreProfileKey(I)V
+PLcom/android/server/locksettings/LockSettingsService;->removeUser(IZ)V
+PLcom/android/server/locksettings/LockSettingsService;->requireStrongAuth(II)V
+PLcom/android/server/locksettings/LockSettingsService;->sendCredentialsOnChangeIfRequired(Lcom/android/internal/widget/LockscreenCredential;IZ)V
+HPLcom/android/server/locksettings/LockSettingsService;->sendCredentialsOnUnlockIfRequired(Lcom/android/internal/widget/LockscreenCredential;I)V
+PLcom/android/server/locksettings/LockSettingsService;->setAuthlessUserKeyProtection(I[B)V
 PLcom/android/server/locksettings/LockSettingsService;->setBoolean(Ljava/lang/String;ZI)V
+PLcom/android/server/locksettings/LockSettingsService;->setDeviceUnlockedForUser(I)V
+PLcom/android/server/locksettings/LockSettingsService;->setIntUnchecked(Ljava/lang/String;II)V
+PLcom/android/server/locksettings/LockSettingsService;->setKeystorePassword([BI)V
+PLcom/android/server/locksettings/LockSettingsService;->setLockCredential(Lcom/android/internal/widget/LockscreenCredential;Lcom/android/internal/widget/LockscreenCredential;I)Z
+PLcom/android/server/locksettings/LockSettingsService;->setLockCredentialInternal(Lcom/android/internal/widget/LockscreenCredential;Lcom/android/internal/widget/LockscreenCredential;IZ)Z
+PLcom/android/server/locksettings/LockSettingsService;->setLockCredentialWithAuthTokenLocked(Lcom/android/internal/widget/LockscreenCredential;Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)J
+PLcom/android/server/locksettings/LockSettingsService;->setLong(Ljava/lang/String;JI)V
+PLcom/android/server/locksettings/LockSettingsService;->setLongUnchecked(Ljava/lang/String;JI)V
 PLcom/android/server/locksettings/LockSettingsService;->setRecoverySecretTypes([I)V
 PLcom/android/server/locksettings/LockSettingsService;->setRecoveryStatus(Ljava/lang/String;I)V
+PLcom/android/server/locksettings/LockSettingsService;->setSeparateProfileChallengeEnabled(IZLcom/android/internal/widget/LockscreenCredential;)V
+PLcom/android/server/locksettings/LockSettingsService;->setSeparateProfileChallengeEnabledLocked(IZLcom/android/internal/widget/LockscreenCredential;)V
 PLcom/android/server/locksettings/LockSettingsService;->setServerParams([B)V
 PLcom/android/server/locksettings/LockSettingsService;->setSnapshotCreatedPendingIntent(Landroid/app/PendingIntent;)V
+PLcom/android/server/locksettings/LockSettingsService;->setString(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/locksettings/LockSettingsService;->setStringUnchecked(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/locksettings/LockSettingsService;->setSyntheticPasswordHandleLocked(JI)V
 PLcom/android/server/locksettings/LockSettingsService;->setUserPasswordMetrics(Lcom/android/internal/widget/LockscreenCredential;I)V
+PLcom/android/server/locksettings/LockSettingsService;->shouldMigrateToSyntheticPasswordLocked(I)Z
+PLcom/android/server/locksettings/LockSettingsService;->showEncryptionNotification(Landroid/os/UserHandle;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V
+PLcom/android/server/locksettings/LockSettingsService;->showEncryptionNotificationForProfile(Landroid/os/UserHandle;)V
 HPLcom/android/server/locksettings/LockSettingsService;->spBasedDoVerifyCredential(Lcom/android/internal/widget/LockscreenCredential;IJILcom/android/internal/widget/ICheckCredentialProgressCallback;Ljava/util/ArrayList;)Lcom/android/internal/widget/VerifyCredentialResponse;
+PLcom/android/server/locksettings/LockSettingsService;->spBasedSetLockCredentialInternalLocked(Lcom/android/internal/widget/LockscreenCredential;Lcom/android/internal/widget/LockscreenCredential;IZ)Z
+PLcom/android/server/locksettings/LockSettingsService;->synchronizeUnifiedWorkChallengeForProfiles(ILjava/util/Map;)V
 HSPLcom/android/server/locksettings/LockSettingsService;->systemReady()V
 PLcom/android/server/locksettings/LockSettingsService;->tieManagedProfileLockIfNecessary(ILcom/android/internal/widget/LockscreenCredential;)V
-PLcom/android/server/locksettings/LockSettingsService;->tiedManagedProfileReadyToUnlock(Landroid/content/pm/UserInfo;)Z
+PLcom/android/server/locksettings/LockSettingsService;->tieProfileLockToParent(ILcom/android/internal/widget/LockscreenCredential;)V
+HPLcom/android/server/locksettings/LockSettingsService;->tiedManagedProfileReadyToUnlock(Landroid/content/pm/UserInfo;)Z
 PLcom/android/server/locksettings/LockSettingsService;->timestampToString(J)Ljava/lang/String;
+PLcom/android/server/locksettings/LockSettingsService;->tryDeriveAuthTokenForUnsecuredPrimaryUser(I)V
+PLcom/android/server/locksettings/LockSettingsService;->tryUnlockWithCachedUnifiedChallenge(I)Z
 PLcom/android/server/locksettings/LockSettingsService;->unlockChildProfile(IZIJLjava/util/ArrayList;)V
 PLcom/android/server/locksettings/LockSettingsService;->unlockKeystore([BI)V
-PLcom/android/server/locksettings/LockSettingsService;->unlockUser(I[B[BIJLjava/util/ArrayList;)V
-PLcom/android/server/locksettings/LockSettingsService;->userPresent(I)V
+HPLcom/android/server/locksettings/LockSettingsService;->unlockUser(I[B[BIJLjava/util/ArrayList;)V
+HPLcom/android/server/locksettings/LockSettingsService;->userPresent(I)V
+PLcom/android/server/locksettings/LockSettingsService;->verifyCredential(Lcom/android/internal/widget/LockscreenCredential;JI)Lcom/android/internal/widget/VerifyCredentialResponse;
+PLcom/android/server/locksettings/LockSettingsService;->verifyTiedProfileChallenge(Lcom/android/internal/widget/LockscreenCredential;JI)Lcom/android/internal/widget/VerifyCredentialResponse;
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;-><init>()V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;-><init>(Lcom/android/server/locksettings/LockSettingsStorage$1;)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;->equals(Ljava/lang/Object;)Z
@@ -11123,29 +18421,41 @@
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->peek(ILjava/lang/String;I)Ljava/lang/Object;
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->peekFile(Ljava/lang/String;)[B
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->peekKeyValue(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;->purgePath(Ljava/lang/String;)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->put(ILjava/lang/String;Ljava/lang/Object;I)V
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;->putFile(Ljava/lang/String;[B)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->putFileIfUnchanged(Ljava/lang/String;[BI)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->putIfUnchanged(ILjava/lang/String;Ljava/lang/Object;II)V
 PLcom/android/server/locksettings/LockSettingsStorage$Cache;->putKeyValue(Ljava/lang/String;Ljava/lang/String;I)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->putKeyValueIfUnchanged(Ljava/lang/String;Ljava/lang/Object;II)V
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;->removeUser(I)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->setFetched(I)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$CredentialHash;-><init>([BI)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$CredentialHash;->createEmptyHash()Lcom/android/server/locksettings/LockSettingsStorage$CredentialHash;
 HSPLcom/android/server/locksettings/LockSettingsStorage$DatabaseHelper;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$DatabaseHelper;->setCallback(Lcom/android/server/locksettings/LockSettingsStorage$Callback;)V
+PLcom/android/server/locksettings/LockSettingsStorage$PersistentData;-><clinit>()V
+PLcom/android/server/locksettings/LockSettingsStorage$PersistentData;-><init>(III[B)V
+PLcom/android/server/locksettings/LockSettingsStorage$PersistentData;->toBytes(III[B)[B
 HSPLcom/android/server/locksettings/LockSettingsStorage;-><clinit>()V
 HSPLcom/android/server/locksettings/LockSettingsStorage;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/locksettings/LockSettingsStorage;->access$400()Ljava/lang/Object;
-PLcom/android/server/locksettings/LockSettingsStorage;->deleteSyntheticPasswordState(IJLjava/lang/String;)V
+PLcom/android/server/locksettings/LockSettingsStorage;->deleteFile(Ljava/lang/String;)V
+HPLcom/android/server/locksettings/LockSettingsStorage;->deleteSyntheticPasswordState(IJLjava/lang/String;)V
 PLcom/android/server/locksettings/LockSettingsStorage;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/locksettings/LockSettingsStorage;->ensureSyntheticPasswordDirectoryForUser(I)V
+PLcom/android/server/locksettings/LockSettingsStorage;->fsyncDirectory(Ljava/io/File;)V
 PLcom/android/server/locksettings/LockSettingsStorage;->getChildProfileLockFile(I)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getLockCredentialFilePathForUser(ILjava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getLockPasswordFilename(I)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getLockPatternFilename(I)Ljava/lang/String;
+PLcom/android/server/locksettings/LockSettingsStorage;->getPersistentDataBlockManager()Lcom/android/server/PersistentDataBlockManagerInternal;
+HSPLcom/android/server/locksettings/LockSettingsStorage;->getRebootEscrowFile(I)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getSynthenticPasswordStateFilePathForUser(IJLjava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getSyntheticPasswordDirectoryForUser(I)Ljava/io/File;
 PLcom/android/server/locksettings/LockSettingsStorage;->hasChildProfileLock(I)Z
-PLcom/android/server/locksettings/LockSettingsStorage;->hasFile(Ljava/lang/String;)Z
+HSPLcom/android/server/locksettings/LockSettingsStorage;->hasFile(Ljava/lang/String;)Z
+HSPLcom/android/server/locksettings/LockSettingsStorage;->hasRebootEscrow(I)Z
 HSPLcom/android/server/locksettings/LockSettingsStorage;->listSyntheticPasswordHandlesForAllUsers(Ljava/lang/String;)Ljava/util/Map;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->listSyntheticPasswordHandlesForUser(Ljava/lang/String;I)Ljava/util/List;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->prefetchUser(I)V
@@ -11155,42 +18465,115 @@
 HSPLcom/android/server/locksettings/LockSettingsStorage;->readKeyValue(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->readPasswordHashIfExists(I)Lcom/android/server/locksettings/LockSettingsStorage$CredentialHash;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->readPatternHashIfExists(I)Lcom/android/server/locksettings/LockSettingsStorage$CredentialHash;
+PLcom/android/server/locksettings/LockSettingsStorage;->readRebootEscrow(I)[B
 HSPLcom/android/server/locksettings/LockSettingsStorage;->readSyntheticPasswordState(IJLjava/lang/String;)[B
+PLcom/android/server/locksettings/LockSettingsStorage;->removeChildProfileLock(I)V
+PLcom/android/server/locksettings/LockSettingsStorage;->removeRebootEscrow(I)V
+PLcom/android/server/locksettings/LockSettingsStorage;->removeUser(I)V
 HSPLcom/android/server/locksettings/LockSettingsStorage;->setDatabaseOnCreateCallback(Lcom/android/server/locksettings/LockSettingsStorage$Callback;)V
-PLcom/android/server/locksettings/LockSettingsStorage;->writeKeyValue(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/locksettings/LockSettingsStorage;->writeChildProfileLock(I[B)V
+PLcom/android/server/locksettings/LockSettingsStorage;->writeFile(Ljava/lang/String;[B)V
+HPLcom/android/server/locksettings/LockSettingsStorage;->writeKeyValue(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/locksettings/LockSettingsStorage;->writeKeyValue(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/locksettings/LockSettingsStorage;->writePersistentDataBlock(III[B)V
+PLcom/android/server/locksettings/LockSettingsStorage;->writeRebootEscrow(I[B)V
+PLcom/android/server/locksettings/LockSettingsStorage;->writeSyntheticPasswordState(IJLjava/lang/String;[B)V
 HSPLcom/android/server/locksettings/LockSettingsStrongAuth$1;-><init>(Lcom/android/server/locksettings/LockSettingsStrongAuth;)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth$1;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/locksettings/LockSettingsStrongAuth$1;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth$StrongAuthTimeoutAlarmListener;-><init>(Lcom/android/server/locksettings/LockSettingsStrongAuth;I)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth$StrongAuthTimeoutAlarmListener;->onAlarm()V
 HSPLcom/android/server/locksettings/LockSettingsStrongAuth;-><init>(Landroid/content/Context;)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->access$000(Lcom/android/server/locksettings/LockSettingsStrongAuth;Landroid/app/trust/IStrongAuthTracker;)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleAddStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleScheduleStrongAuthTimeout(I)V
+HSPLcom/android/server/locksettings/LockSettingsStrongAuth;->access$000(Lcom/android/server/locksettings/LockSettingsStrongAuth;Landroid/app/trust/IStrongAuthTracker;)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->access$200(Lcom/android/server/locksettings/LockSettingsStrongAuth;II)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->access$300(Lcom/android/server/locksettings/LockSettingsStrongAuth;I)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->access$400(Lcom/android/server/locksettings/LockSettingsStrongAuth;I)V
+HSPLcom/android/server/locksettings/LockSettingsStrongAuth;->handleAddStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleRemoveUser(I)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleRequireStrongAuth(II)V
+HPLcom/android/server/locksettings/LockSettingsStrongAuth;->handleRequireStrongAuthOneUser(II)V
+HPLcom/android/server/locksettings/LockSettingsStrongAuth;->handleScheduleStrongAuthTimeout(I)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->notifyStrongAuthTrackers(II)V
 HSPLcom/android/server/locksettings/LockSettingsStrongAuth;->registerStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->reportSuccessfulStrongAuthUnlock(I)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->removeUser(I)V
+HPLcom/android/server/locksettings/LockSettingsStrongAuth;->reportSuccessfulStrongAuthUnlock(I)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->reportUnlock(I)V
+HPLcom/android/server/locksettings/LockSettingsStrongAuth;->requireStrongAuth(II)V
+HSPLcom/android/server/locksettings/ManagedProfilePasswordCache;-><clinit>()V
+HSPLcom/android/server/locksettings/ManagedProfilePasswordCache;-><init>(Ljava/security/KeyStore;Landroid/os/UserManager;)V
+PLcom/android/server/locksettings/ManagedProfilePasswordCache;->getEncryptionKeyName(I)Ljava/lang/String;
+PLcom/android/server/locksettings/ManagedProfilePasswordCache;->retrievePassword(I)Lcom/android/internal/widget/LockscreenCredential;
+PLcom/android/server/locksettings/ManagedProfilePasswordCache;->storePassword(ILcom/android/internal/widget/LockscreenCredential;)V
 HSPLcom/android/server/locksettings/PasswordSlotManager;-><init>()V
+PLcom/android/server/locksettings/PasswordSlotManager;->ensureSlotMapLoaded()V
+PLcom/android/server/locksettings/PasswordSlotManager;->getGsiImageNumber()I
+PLcom/android/server/locksettings/PasswordSlotManager;->getMode()Ljava/lang/String;
+PLcom/android/server/locksettings/PasswordSlotManager;->getSlotMapDir()Ljava/lang/String;
+PLcom/android/server/locksettings/PasswordSlotManager;->getSlotMapFile()Ljava/io/File;
+PLcom/android/server/locksettings/PasswordSlotManager;->getUsedSlots()Ljava/util/Set;
+PLcom/android/server/locksettings/PasswordSlotManager;->loadSlotMap()Ljava/util/Map;
+PLcom/android/server/locksettings/PasswordSlotManager;->loadSlotMap(Ljava/io/InputStream;)Ljava/util/Map;
+PLcom/android/server/locksettings/PasswordSlotManager;->markSlotDeleted(I)V
+PLcom/android/server/locksettings/PasswordSlotManager;->markSlotInUse(I)V
 HSPLcom/android/server/locksettings/PasswordSlotManager;->refreshActiveSlots(Ljava/util/Set;)V
-PLcom/android/server/locksettings/SP800Derive;-><init>([B)V
-PLcom/android/server/locksettings/SP800Derive;->getMac()Ljavax/crypto/Mac;
+PLcom/android/server/locksettings/PasswordSlotManager;->saveSlotMap()V
+PLcom/android/server/locksettings/PasswordSlotManager;->saveSlotMap(Ljava/io/OutputStream;)V
+PLcom/android/server/locksettings/RebootEscrowData;-><init>(B[B[B[B[B)V
+PLcom/android/server/locksettings/RebootEscrowData;->fromEncryptedData(Ljavax/crypto/spec/SecretKeySpec;[B)Lcom/android/server/locksettings/RebootEscrowData;
+HSPLcom/android/server/locksettings/RebootEscrowData;->fromKeyBytes([B)Ljavax/crypto/spec/SecretKeySpec;
+PLcom/android/server/locksettings/RebootEscrowData;->fromSyntheticPassword(B[B)Lcom/android/server/locksettings/RebootEscrowData;
+PLcom/android/server/locksettings/RebootEscrowData;->getBlob()[B
+PLcom/android/server/locksettings/RebootEscrowData;->getSpVersion()B
+PLcom/android/server/locksettings/RebootEscrowData;->getSyntheticPassword()[B
+HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;->getRebootEscrow()Landroid/hardware/rebootescrow/IRebootEscrow;
+HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;->getUserManager()Landroid/os/UserManager;
+HSPLcom/android/server/locksettings/RebootEscrowManager;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/RebootEscrowManager$Callbacks;Lcom/android/server/locksettings/LockSettingsStorage;)V
+HSPLcom/android/server/locksettings/RebootEscrowManager;-><init>(Lcom/android/server/locksettings/RebootEscrowManager$Injector;Lcom/android/server/locksettings/RebootEscrowManager$Callbacks;Lcom/android/server/locksettings/LockSettingsStorage;)V
+PLcom/android/server/locksettings/RebootEscrowManager;->callToRebootEscrowIfNeeded(IB[B)V
+PLcom/android/server/locksettings/RebootEscrowManager;->clearRebootEscrowIfNeeded()V
+PLcom/android/server/locksettings/RebootEscrowManager;->getAndClearRebootEscrowKey()Ljavax/crypto/spec/SecretKeySpec;
+HSPLcom/android/server/locksettings/RebootEscrowManager;->loadRebootEscrowDataIfAvailable()V
+PLcom/android/server/locksettings/RebootEscrowManager;->prepareRebootEscrow()Z
+HSPLcom/android/server/locksettings/RebootEscrowManager;->restoreRebootEscrowForUser(ILjavax/crypto/spec/SecretKeySpec;)V
+PLcom/android/server/locksettings/RebootEscrowManager;->restoreRebootEscrowForUser(ILjavax/crypto/spec/SecretKeySpec;)Z
+HSPLcom/android/server/locksettings/RebootEscrowManager;->setRebootEscrowListener(Lcom/android/internal/widget/RebootEscrowListener;)V
+PLcom/android/server/locksettings/RebootEscrowManager;->setRebootEscrowReady(Z)V
+HPLcom/android/server/locksettings/SP800Derive;-><init>([B)V
+HPLcom/android/server/locksettings/SP800Derive;->getMac()Ljavax/crypto/Mac;
 HPLcom/android/server/locksettings/SP800Derive;->update32(Ljavax/crypto/Mac;I)V
-PLcom/android/server/locksettings/SP800Derive;->withContext([B[B)[B
+HPLcom/android/server/locksettings/SP800Derive;->withContext([B[B)[B
 PLcom/android/server/locksettings/SyntheticPasswordCrypto;-><clinit>()V
-PLcom/android/server/locksettings/SyntheticPasswordCrypto;->decrypt(Ljavax/crypto/SecretKey;[B)[B
-PLcom/android/server/locksettings/SyntheticPasswordCrypto;->decrypt([B[B[B)[B
+PLcom/android/server/locksettings/SyntheticPasswordCrypto;->createBlob(Ljava/lang/String;[B[BJ)[B
+HPLcom/android/server/locksettings/SyntheticPasswordCrypto;->decrypt(Ljavax/crypto/SecretKey;[B)[B
+HPLcom/android/server/locksettings/SyntheticPasswordCrypto;->decrypt([B[B[B)[B
 PLcom/android/server/locksettings/SyntheticPasswordCrypto;->decryptBlob(Ljava/lang/String;[B[B)[B
-PLcom/android/server/locksettings/SyntheticPasswordCrypto;->personalisedHash([B[[B)[B
+PLcom/android/server/locksettings/SyntheticPasswordCrypto;->destroyBlobKey(Ljava/lang/String;)V
+PLcom/android/server/locksettings/SyntheticPasswordCrypto;->encrypt(Ljavax/crypto/SecretKey;[B)[B
+PLcom/android/server/locksettings/SyntheticPasswordCrypto;->encrypt([B[B[B)[B
+HPLcom/android/server/locksettings/SyntheticPasswordCrypto;->personalisedHash([B[[B)[B
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationResult;-><init>()V
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;-><init>(B)V
+PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->access$1000(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;)[B
+PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->access$1100(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;)B
+PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->access$900(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;)[B
+PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->create()Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->deriveDiskEncryptionKey()[B
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->deriveGkPassword()[B
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->deriveKeyStorePassword()[B
-PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->derivePassword([B)[B
+HPLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->derivePassword([B)[B
+PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->derivePasswordHashFactor()[B
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->deriveVendorAuthSecret()[B
+PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->getEscrowSecret()[B
+PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->getSyntheticPassword()[B
+PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->getVersion()B
+PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->recreate([B[B)V
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->recreateDirectly([B)V
+PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->setEscrowData([B[B)V
 HSPLcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;-><init>()V
+PLcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;->create(I)Lcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;
 HSPLcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;->fromBytes([B)Lcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;
+PLcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;->toBytes()[B
+PLcom/android/server/locksettings/SyntheticPasswordManager$TokenData;-><init>()V
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;-><clinit>()V
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/LockSettingsStorage;Landroid/os/UserManager;Lcom/android/server/locksettings/PasswordSlotManager;)V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->access$000()[B
@@ -11198,52 +18581,96 @@
 PLcom/android/server/locksettings/SyntheticPasswordManager;->access$200([B)[B
 PLcom/android/server/locksettings/SyntheticPasswordManager;->access$300()[B
 PLcom/android/server/locksettings/SyntheticPasswordManager;->access$400()[B
-PLcom/android/server/locksettings/SyntheticPasswordManager;->bytesToHex([B)[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->access$500()[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->access$600()[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->access$700()[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->access$800()[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->activateTokenBasedSyntheticPassword(JLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)Z
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->bytesToHex([B)[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->clearSidForUser(I)V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->computePasswordToken(Lcom/android/internal/widget/LockscreenCredential;Lcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;)[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->createPasswordBasedSyntheticPassword(Landroid/service/gatekeeper/IGateKeeperService;Lcom/android/internal/widget/LockscreenCredential;Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)J
+PLcom/android/server/locksettings/SyntheticPasswordManager;->createSPBlob(Ljava/lang/String;[B[BJ)[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->createSyntheticPasswordBlob(JBLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;[BJI)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->createTokenBasedSyntheticPassword([BILcom/android/internal/widget/LockPatternUtils$EscrowTokenStateChangeCallback;)J
 PLcom/android/server/locksettings/SyntheticPasswordManager;->decryptSPBlob(Ljava/lang/String;[B[B)[B
-PLcom/android/server/locksettings/SyntheticPasswordManager;->fromByteArrayList(Ljava/util/ArrayList;)[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->destroyEscrowData(I)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->destroyPasswordBasedSyntheticPassword(JI)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->destroySPBlobKey(Ljava/lang/String;)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->destroyState(Ljava/lang/String;JI)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->destroySyntheticPassword(JI)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->destroyWeaverSlot(JI)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->existsHandle(JI)Z
+PLcom/android/server/locksettings/SyntheticPasswordManager;->fakeUid(I)I
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->fromByteArrayList(Ljava/util/ArrayList;)[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->generateHandle()J
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->getCredentialType(JI)I
-PLcom/android/server/locksettings/SyntheticPasswordManager;->getHandleName(J)Ljava/lang/String;
-PLcom/android/server/locksettings/SyntheticPasswordManager;->getPendingTokensForUser(I)Ljava/util/Set;
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->getHandleName(J)Ljava/lang/String;
+PLcom/android/server/locksettings/SyntheticPasswordManager;->getNextAvailableWeaverSlot()I
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->getPendingTokensForUser(I)Ljava/util/Set;
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->getUsedWeaverSlots()Ljava/util/Set;
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->getWeaverService()Landroid/hardware/weaver/V1_0/IWeaver;
+PLcom/android/server/locksettings/SyntheticPasswordManager;->hasEscrowData(I)Z
+PLcom/android/server/locksettings/SyntheticPasswordManager;->hasSidForUser(I)Z
+PLcom/android/server/locksettings/SyntheticPasswordManager;->hasState(Ljava/lang/String;JI)Z
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->initWeaverService()V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->isWeaverAvailable()Z
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->lambda$initWeaverService$0$SyntheticPasswordManager(ILandroid/hardware/weaver/V1_0/WeaverConfig;)V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->lambda$weaverVerify$1([Lcom/android/internal/widget/VerifyCredentialResponse;IILandroid/hardware/weaver/V1_0/WeaverReadResponse;)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->loadEscrowData(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)Z
+PLcom/android/server/locksettings/SyntheticPasswordManager;->loadSecdiscardable(JI)[B
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->loadState(Ljava/lang/String;JI)[B
 PLcom/android/server/locksettings/SyntheticPasswordManager;->loadSyntheticPasswordHandle(I)[B
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->loadWeaverSlot(JI)I
+PLcom/android/server/locksettings/SyntheticPasswordManager;->newSidForUser(Landroid/service/gatekeeper/IGateKeeperService;Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->newSyntheticPasswordAndSid(Landroid/service/gatekeeper/IGateKeeperService;[BLcom/android/internal/widget/LockscreenCredential;I)Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;
+PLcom/android/server/locksettings/SyntheticPasswordManager;->passwordTokenToGkInput([B)[B
 PLcom/android/server/locksettings/SyntheticPasswordManager;->passwordTokenToWeaverKey([B)[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->removeUser(I)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->saveEscrowData(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->saveSecdiscardable(J[BI)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->saveState(Ljava/lang/String;[BJI)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->saveSyntheticPasswordHandle([BI)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->saveWeaverSlot(IJI)V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->scrypt([B[BIIII)[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->secureRandom(I)[B
+PLcom/android/server/locksettings/SyntheticPasswordManager;->sidFromPasswordHandle([B)J
+PLcom/android/server/locksettings/SyntheticPasswordManager;->synchronizeWeaverFrpPassword(Lcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;III)V
 HPLcom/android/server/locksettings/SyntheticPasswordManager;->toByteArrayList([B)Ljava/util/ArrayList;
-PLcom/android/server/locksettings/SyntheticPasswordManager;->transformUnderWeaverSecret([B[B)[B
-PLcom/android/server/locksettings/SyntheticPasswordManager;->unwrapPasswordBasedSyntheticPassword(Landroid/service/gatekeeper/IGateKeeperService;JLcom/android/internal/widget/LockscreenCredential;ILcom/android/internal/widget/ICheckCredentialProgressCallback;)Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationResult;
+PLcom/android/server/locksettings/SyntheticPasswordManager;->transformUnderSecdiscardable([B[B)[B
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->transformUnderWeaverSecret([B[B)[B
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->unwrapPasswordBasedSyntheticPassword(Landroid/service/gatekeeper/IGateKeeperService;JLcom/android/internal/widget/LockscreenCredential;ILcom/android/internal/widget/ICheckCredentialProgressCallback;)Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationResult;
 PLcom/android/server/locksettings/SyntheticPasswordManager;->unwrapSyntheticPasswordBlob(JB[BJI)Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;
 PLcom/android/server/locksettings/SyntheticPasswordManager;->verifyChallenge(Landroid/service/gatekeeper/IGateKeeperService;Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;JI)Lcom/android/internal/widget/VerifyCredentialResponse;
+PLcom/android/server/locksettings/SyntheticPasswordManager;->weaverEnroll(I[B[B)[B
 PLcom/android/server/locksettings/SyntheticPasswordManager;->weaverVerify(I[B)Lcom/android/internal/widget/VerifyCredentialResponse;
 HSPLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;-><init>(Ljava/security/KeyStore;)V
+PLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;->containsAlias(Ljava/lang/String;)Z
+PLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;->deleteEntry(Ljava/lang/String;)V
 HSPLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;->getAndLoadAndroidKeyStore()Ljava/security/KeyStore;
+PLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;->getKey(Ljava/lang/String;[C)Ljava/security/Key;
 PLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;->setEntry(Ljava/lang/String;Ljava/security/KeyStore$Entry;Ljava/security/KeyStore$ProtectionParameter;)V
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;-><init>(Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;Lcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;II[BZLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;Lcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;Landroid/security/Scrypt;)V
-PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->createApplicationKeyEntries(Ljava/util/Map;Ljava/util/Map;)Ljava/util/List;
+HPLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->createApplicationKeyEntries(Ljava/util/Map;Ljava/util/Map;)Ljava/util/List;
+PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->generateAndStoreCounterId(I)J
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->generateRecoveryKey()Ljavax/crypto/SecretKey;
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->generateSalt()[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->getKeysToSync(I)Ljava/util/Map;
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->getSnapshotVersion(IZ)I
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->getUiFormat(I)I
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->hashCredentialsBySaltedSha256([B[B)[B
+PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->hashCredentialsByScrypt([B[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->isCustomLockScreen()Z
-PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->newInstance(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;Lcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;II[BZ)Lcom/android/server/locksettings/recoverablekeystore/KeySyncTask;
+HPLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->newInstance(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;Lcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;II[BZ)Lcom/android/server/locksettings/recoverablekeystore/KeySyncTask;
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->run()V
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->shouldCreateSnapshot(I)Z
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->shouldUseScryptToHashCredential()Z
-PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->syncKeys()V
+HPLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->syncKeys()V
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->syncKeysForAgent(I)V
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;-><clinit>()V
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->calculateThmKfHash([B)[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->concat([[B)[B
-PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->encryptKeysWithRecoveryKey(Ljavax/crypto/SecretKey;Ljava/util/Map;)Ljava/util/Map;
+HPLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->encryptKeysWithRecoveryKey(Ljavax/crypto/SecretKey;Ljava/util/Map;)Ljava/util/Map;
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->locallyEncryptRecoveryKey([BLjavax/crypto/SecretKey;)[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->packVaultParams(Ljava/security/PublicKey;JI[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->thmEncryptRecoveryKey(Ljava/security/PublicKey;[B[BLjavax/crypto/SecretKey;)[B
@@ -11256,6 +18683,8 @@
 HSPLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;-><clinit>()V
 HSPLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/KeyStoreProxy;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;)V
 PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->ensureDecryptionKeyIsValid(ILcom/android/server/locksettings/recoverablekeystore/PlatformDecryptionKey;)V
+PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->generateAesKey()Ljavax/crypto/SecretKey;
+PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->generateAndLoadKey(II)V
 HSPLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->getAndLoadAndroidKeyStore()Ljava/security/KeyStore;
 PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->getDecryptAlias(II)Ljava/lang/String;
 PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->getDecryptKey(I)Lcom/android/server/locksettings/recoverablekeystore/PlatformDecryptionKey;
@@ -11263,21 +18692,36 @@
 PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->getEncryptAlias(II)Ljava/lang/String;
 PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->getEncryptKey(I)Lcom/android/server/locksettings/recoverablekeystore/PlatformEncryptionKey;
 PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->getEncryptKeyInternal(I)Lcom/android/server/locksettings/recoverablekeystore/PlatformEncryptionKey;
+PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->getGateKeeperService()Landroid/service/gatekeeper/IGateKeeperService;
+PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->getGenerationId(I)I
 HSPLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->getInstance(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;)Lcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;
 PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->init(I)V
+PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->isDeviceLocked(I)Z
+PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->isKeyLoaded(II)Z
+PLcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;->setGenerationId(II)V
 HSPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyGenerator;-><init>(Ljavax/crypto/KeyGenerator;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyGenerator;->generateAndStoreKey(Lcom/android/server/locksettings/recoverablekeystore/PlatformEncryptionKey;IILjava/lang/String;[B)[B
 HSPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyGenerator;->newInstance(Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;)Lcom/android/server/locksettings/recoverablekeystore/RecoverableKeyGenerator;
 HSPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage;Ljava/util/concurrent/ExecutorService;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;Lcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;Lcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;Lcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;Lcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;Lcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;)V
-PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->checkRecoverKeyStorePermission()V
+HSPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage;Ljava/util/concurrent/ScheduledExecutorService;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;Lcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;Lcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;Lcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;Lcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;Lcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;)V
+HPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->checkRecoverKeyStorePermission()V
+PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->generateKey(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->generateKeyWithMetadata(Ljava/lang/String;[B)Ljava/lang/String;
+HPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->getAlias(IILjava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->getInstance(Landroid/content/Context;Landroid/security/KeyStore;)Lcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;
+HPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->getKey(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->getKeyChainSnapshot()Landroid/security/keystore/recovery/KeyChainSnapshot;
+PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->getRecoverySecretTypes()[I
+HPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->getRecoveryStatus()Ljava/util/Map;
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->initRecoveryService(Ljava/lang/String;[B)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->initRecoveryServiceWithSigFile(Ljava/lang/String;[B[B)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->lockScreenSecretAvailable(I[BI)V
+PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->lockScreenSecretChanged(I[BI)V
+PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->removeKey(Ljava/lang/String;)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->setRecoverySecretTypes([I)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->setRecoveryStatus(Ljava/lang/String;I)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->setServerParams([B)V
+PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->setSnapshotCreatedPendingIntent(Landroid/app/PendingIntent;)V
 HSPLcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;-><init>()V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;->recoverySnapshotAvailable(I)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;->setSnapshotListener(ILandroid/app/PendingIntent;)V
@@ -11287,7 +18731,7 @@
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;-><clinit>()V
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->aesGcmEncrypt(Ljavax/crypto/SecretKey;[B[B[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->aesGcmInternal(Lcom/android/server/locksettings/recoverablekeystore/SecureBox$AesGcmOperation;Ljavax/crypto/SecretKey;[B[B[B)[B
-PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->concat([[B)[B
+HPLcom/android/server/locksettings/recoverablekeystore/SecureBox;->concat([[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->dhComputeSecret(Ljava/security/PrivateKey;Ljava/security/PublicKey;)[B
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->emptyByteArrayIfNull([B)[B
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->encodePublicKey(Ljava/security/PublicKey;)[B
@@ -11296,7 +18740,10 @@
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->genRandomNonce()[B
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->hkdfDeriveKey([B[B[B)Ljavax/crypto/SecretKey;
 HSPLcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;-><init>()V
+PLcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;->getDefaultCertificateAliasIfEmpty(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;->getRootCertificate(Ljava/lang/String;)Ljava/security/cert/X509Certificate;
+PLcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;->isTestOnlyCertificateAlias(Ljava/lang/String;)Z
+PLcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;->isValidRootCertificateAlias(Ljava/lang/String;)Z
 PLcom/android/server/locksettings/recoverablekeystore/WrappedKey;-><init>([B[B[BII)V
 PLcom/android/server/locksettings/recoverablekeystore/WrappedKey;->fromSecretKey(Lcom/android/server/locksettings/recoverablekeystore/PlatformEncryptionKey;Ljavax/crypto/SecretKey;[B)Lcom/android/server/locksettings/recoverablekeystore/WrappedKey;
 PLcom/android/server/locksettings/recoverablekeystore/WrappedKey;->getKeyMaterial()[B
@@ -11304,43 +18751,45 @@
 PLcom/android/server/locksettings/recoverablekeystore/WrappedKey;->getNonce()[B
 PLcom/android/server/locksettings/recoverablekeystore/WrappedKey;->getPlatformKeyGenerationId()I
 PLcom/android/server/locksettings/recoverablekeystore/WrappedKey;->getRecoveryStatus()I
-PLcom/android/server/locksettings/recoverablekeystore/WrappedKey;->unwrapKeys(Lcom/android/server/locksettings/recoverablekeystore/PlatformDecryptionKey;Ljava/util/Map;)Ljava/util/Map;
+HPLcom/android/server/locksettings/recoverablekeystore/WrappedKey;->unwrapKeys(Lcom/android/server/locksettings/recoverablekeystore/PlatformDecryptionKey;Ljava/util/Map;)Ljava/util/Map;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->buildCertPath(Ljava/security/cert/PKIXParameters;)Ljava/security/cert/CertPath;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->buildPkixParams(Ljava/util/Date;Ljava/security/cert/X509Certificate;Ljava/util/List;Ljava/security/cert/X509Certificate;)Ljava/security/cert/PKIXParameters;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->decodeBase64(Ljava/lang/String;)[B
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->decodeCert(Ljava/io/InputStream;)Ljava/security/cert/X509Certificate;
-PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->decodeCert([B)Ljava/security/cert/X509Certificate;
-PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->getXmlDirectChildren(Lorg/w3c/dom/Element;Ljava/lang/String;)Ljava/util/List;
-PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->getXmlNodeContents(ILorg/w3c/dom/Element;[Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->decodeCert([B)Ljava/security/cert/X509Certificate;
+HPLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->getXmlDirectChildren(Lorg/w3c/dom/Element;Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->getXmlNodeContents(ILorg/w3c/dom/Element;[Ljava/lang/String;)Ljava/util/List;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->getXmlRootNode([B)Lorg/w3c/dom/Element;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->validateCert(Ljava/util/Date;Ljava/security/cert/X509Certificate;Ljava/util/List;Ljava/security/cert/X509Certificate;)Ljava/security/cert/CertPath;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->verifyRsaSha256Signature(Ljava/security/PublicKey;[B[B)V
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertXml;-><init>(JLjava/util/List;Ljava/util/List;)V
+PLcom/android/server/locksettings/recoverablekeystore/certificate/CertXml;->getEndpointCert(ILjava/util/Date;Ljava/security/cert/X509Certificate;)Ljava/security/cert/CertPath;
+PLcom/android/server/locksettings/recoverablekeystore/certificate/CertXml;->getRandomEndpointCert(Ljava/security/cert/X509Certificate;)Ljava/security/cert/CertPath;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertXml;->getSerial()J
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertXml;->parse([B)Lcom/android/server/locksettings/recoverablekeystore/certificate/CertXml;
-PLcom/android/server/locksettings/recoverablekeystore/certificate/CertXml;->parseEndpointCerts(Lorg/w3c/dom/Element;)Ljava/util/List;
-PLcom/android/server/locksettings/recoverablekeystore/certificate/CertXml;->parseIntermediateCerts(Lorg/w3c/dom/Element;)Ljava/util/List;
+HPLcom/android/server/locksettings/recoverablekeystore/certificate/CertXml;->parseEndpointCerts(Lorg/w3c/dom/Element;)Ljava/util/List;
+HPLcom/android/server/locksettings/recoverablekeystore/certificate/CertXml;->parseIntermediateCerts(Lorg/w3c/dom/Element;)Ljava/util/List;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertXml;->parseSerial(Lorg/w3c/dom/Element;)J
 PLcom/android/server/locksettings/recoverablekeystore/certificate/SigXml;-><init>(Ljava/util/List;Ljava/security/cert/X509Certificate;[B)V
 PLcom/android/server/locksettings/recoverablekeystore/certificate/SigXml;->parse([B)Lcom/android/server/locksettings/recoverablekeystore/certificate/SigXml;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/SigXml;->parseFileSignature(Lorg/w3c/dom/Element;)[B
-PLcom/android/server/locksettings/recoverablekeystore/certificate/SigXml;->parseIntermediateCerts(Lorg/w3c/dom/Element;)Ljava/util/List;
+HPLcom/android/server/locksettings/recoverablekeystore/certificate/SigXml;->parseIntermediateCerts(Lorg/w3c/dom/Element;)Ljava/util/List;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/SigXml;->parseSignerCert(Lorg/w3c/dom/Element;)Ljava/security/cert/X509Certificate;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/SigXml;->verifyFileSignature(Ljava/security/cert/X509Certificate;[B)V
 PLcom/android/server/locksettings/recoverablekeystore/certificate/SigXml;->verifyFileSignature(Ljava/security/cert/X509Certificate;[BLjava/util/Date;)V
 PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->deserialize(Ljava/io/InputStream;)Landroid/security/keystore/recovery/KeyChainSnapshot;
-PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->deserializeInternal(Ljava/io/InputStream;)Landroid/security/keystore/recovery/KeyChainSnapshot;
-PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readBlobTag(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)[B
+HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->deserializeInternal(Ljava/io/InputStream;)Landroid/security/keystore/recovery/KeyChainSnapshot;
+HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readBlobTag(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)[B
 PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readCertPathTag(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/security/cert/CertPath;
-PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readIntTag(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)I
-PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readKeyChainProtectionParams(Lorg/xmlpull/v1/XmlPullParser;)Landroid/security/keystore/recovery/KeyChainProtectionParams;
-PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readKeyChainProtectionParamsList(Lorg/xmlpull/v1/XmlPullParser;)Ljava/util/List;
-PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readKeyDerivationParams(Lorg/xmlpull/v1/XmlPullParser;)Landroid/security/keystore/recovery/KeyDerivationParams;
-PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readLongTag(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)J
-PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readStringTag(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readIntTag(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)I
+HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readKeyChainProtectionParams(Lorg/xmlpull/v1/XmlPullParser;)Landroid/security/keystore/recovery/KeyChainProtectionParams;
+HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readKeyChainProtectionParamsList(Lorg/xmlpull/v1/XmlPullParser;)Ljava/util/List;
+HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readKeyDerivationParams(Lorg/xmlpull/v1/XmlPullParser;)Landroid/security/keystore/recovery/KeyDerivationParams;
+HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readLongTag(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)J
+HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readStringTag(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/String;
 HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readText(Lorg/xmlpull/v1/XmlPullParser;)Ljava/lang/String;
-PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readWrappedApplicationKey(Lorg/xmlpull/v1/XmlPullParser;)Landroid/security/keystore/recovery/WrappedApplicationKey;
-PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readWrappedApplicationKeys(Lorg/xmlpull/v1/XmlPullParser;)Ljava/util/List;
+HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readWrappedApplicationKey(Lorg/xmlpull/v1/XmlPullParser;)Landroid/security/keystore/recovery/WrappedApplicationKey;
+HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readWrappedApplicationKeys(Lorg/xmlpull/v1/XmlPullParser;)Ljava/util/List;
 PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSchema;-><clinit>()V
 PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializer;->serialize(Landroid/security/keystore/recovery/KeyChainSnapshot;Ljava/io/OutputStream;)V
 PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializer;->writeApplicationKeyProperties(Lorg/xmlpull/v1/XmlSerializer;Landroid/security/keystore/recovery/WrappedApplicationKey;)V
@@ -11354,101 +18803,236 @@
 PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializer;->writePropertyTag(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializer;->writePropertyTag(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/security/cert/CertPath;)V
 PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializer;->writePropertyTag(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;[B)V
+PLcom/android/server/locksettings/recoverablekeystore/storage/-$$Lambda$RecoverableKeyStoreDb$knfkhmVPS_11tGWkGt87bH4xjYg;-><init>(Ljava/util/StringJoiner;)V
+PLcom/android/server/locksettings/recoverablekeystore/storage/-$$Lambda$RecoverableKeyStoreDb$knfkhmVPS_11tGWkGt87bH4xjYg;->accept(I)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;-><init>(Lcom/android/server/locksettings/recoverablekeystore/KeyStoreProxy;Landroid/security/KeyStore;)V
-PLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->getGrantAlias(IILjava/lang/String;)Ljava/lang/String;
+PLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->deleteEntry(IILjava/lang/String;)V
+HPLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->getGrantAlias(IILjava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->getInstance(Landroid/security/KeyStore;)Lcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;
+HPLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->getInternalAlias(IILjava/lang/String;)Ljava/lang/String;
 PLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->setSymmetricKeyEntry(IILjava/lang/String;[B)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager$1;-><init>(Lcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;Landroid/os/UserManager;Lcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->getInstance(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;Lcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;)Lcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;
-PLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->registerRecoveryAgent(II)V
+HPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->registerRecoveryAgent(II)V
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->removeAllKeysForRecoveryAgent(II)V
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->removeDataForUser(I)V
+PLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->storeUserSerialNumber(IJ)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->verifyKnownUsers()V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;-><init>(Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelper;)V
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->decodeCertPath([B)Ljava/security/cert/CertPath;
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->ensureRecoveryServiceMetadataEntryExists(II)V
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->ensureRootOfTrustEntryExists(IILjava/lang/String;)V
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->ensureUserMetadataEntryExists(I)V
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getActiveRootOfTrust(II)Ljava/lang/String;
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getAllKeys(III)Ljava/util/Map;
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getAllKeys(III)Ljava/util/Map;
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getBytes(IILjava/lang/String;)[B
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getBytes(IILjava/lang/String;Ljava/lang/String;)[B
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getLong(IILjava/lang/String;)Ljava/lang/Long;
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getCounterId(II)Ljava/lang/Long;
+HPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getLong(IILjava/lang/String;)Ljava/lang/Long;
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getLong(IILjava/lang/String;Ljava/lang/String;)Ljava/lang/Long;
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getPlatformKeyGenerationId(I)I
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getRecoveryAgents(I)Ljava/util/List;
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getRecoverySecretTypes(II)[I
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getPlatformKeyGenerationId(I)I
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getRecoveryAgents(I)Ljava/util/List;
+HPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getRecoverySecretTypes(II)[I
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getRecoveryServiceCertPath(IILjava/lang/String;)Ljava/security/cert/CertPath;
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getRecoveryServiceCertSerial(IILjava/lang/String;)Ljava/lang/Long;
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getServerParams(II)[B
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getShouldCreateSnapshot(II)Z
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getSnapshotVersion(II)Ljava/lang/Long;
 HPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getStatusForAllKeys(I)Ljava/util/Map;
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getUserSerialNumbers()Ljava/util/Map;
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->insertKey(IILjava/lang/String;Lcom/android/server/locksettings/recoverablekeystore/WrappedKey;)J
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->invalidateKeysForUser(I)V
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->lambda$setRecoverySecretTypes$0(Ljava/util/StringJoiner;I)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->newInstance(Landroid/content/Context;)Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeKey(ILjava/lang/String;)Z
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeUserFromAllTables(I)V
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeUserFromKeysTable(I)Z
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeUserFromRecoveryServiceMetadataTable(I)Z
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeUserFromRootOfTrustTable(I)Z
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeUserFromUserMetadataTable(I)Z
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setActiveRootOfTrust(IILjava/lang/String;)J
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setBytes(IILjava/lang/String;Ljava/lang/String;[B)J
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setBytes(IILjava/lang/String;[B)J
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setCounterId(IIJ)J
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setLong(IILjava/lang/String;J)J
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setRecoveryStatus(ILjava/lang/String;I)I
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setLong(IILjava/lang/String;Ljava/lang/String;J)J
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setPlatformKeyGenerationId(II)J
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setRecoverySecretTypes(II[I)J
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setRecoveryServiceCertPath(IILjava/lang/String;Ljava/security/cert/CertPath;)J
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setRecoveryServiceCertSerial(IILjava/lang/String;J)J
+HPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setRecoveryStatus(ILjava/lang/String;I)I
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setServerParams(II[B)J
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setShouldCreateSnapshot(IIZ)J
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setSnapshotVersion(IIJ)J
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setUserSerialNumber(IJ)J
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelper;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage;-><init>()V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;-><init>(Ljava/io/File;)V
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->get(I)Landroid/security/keystore/recovery/KeyChainSnapshot;
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->getSnapshotFile(I)Ljava/io/File;
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->getSnapshotFileName(I)Ljava/lang/String;
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->getStorageFolder()Ljava/io/File;
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->newInstance()Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->put(ILandroid/security/keystore/recovery/KeyChainSnapshot;)V
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->readFromDisk(I)Landroid/security/keystore/recovery/KeyChainSnapshot;
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->remove(I)V
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->writeToDisk(ILandroid/security/keystore/recovery/KeyChainSnapshot;)V
+PLcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$M94FQn7LGXpV3kApGJU9Bnp0RRk;-><clinit>()V
+PLcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$M94FQn7LGXpV3kApGJU9Bnp0RRk;-><init>()V
+PLcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$M94FQn7LGXpV3kApGJU9Bnp0RRk;->accept(Ljava/lang/Object;)V
+PLcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$QRE0IkqsUP_uX7kD-TOn1pE7uWc;-><clinit>()V
+PLcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$QRE0IkqsUP_uX7kD-TOn1pE7uWc;-><init>()V
+PLcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$QRE0IkqsUP_uX7kD-TOn1pE7uWc;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$UserHandler$2y9vqtJzX1LpgQmc7mf5RQXEtqk;-><clinit>()V
+PLcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$UserHandler$2y9vqtJzX1LpgQmc7mf5RQXEtqk;-><init>()V
+PLcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$UserHandler$2y9vqtJzX1LpgQmc7mf5RQXEtqk;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$UserHandler$pb5SX6gBlgZXLZp0t4uVjgjp3EE;-><clinit>()V
+PLcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$UserHandler$pb5SX6gBlgZXLZp0t4uVjgjp3EE;-><init>()V
+PLcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$UserHandler$pb5SX6gBlgZXLZp0t4uVjgjp3EE;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/media/-$$Lambda$MediaSessionService$za_9dlUSlnaiZw6eCdPVEZq0XLw;-><init>(Lcom/android/server/media/MediaSessionService;)V
-PLcom/android/server/media/-$$Lambda$MediaSessionService$za_9dlUSlnaiZw6eCdPVEZq0XLw;->onAudioPlayerActiveStateChanged(Landroid/media/AudioPlaybackConfiguration;Z)V
+HPLcom/android/server/media/-$$Lambda$MediaSessionService$za_9dlUSlnaiZw6eCdPVEZq0XLw;->onAudioPlayerActiveStateChanged(Landroid/media/AudioPlaybackConfiguration;Z)V
 HSPLcom/android/server/media/AudioPlayerStateMonitor$AudioManagerPlaybackListener;-><init>(Lcom/android/server/media/AudioPlayerStateMonitor;)V
 HSPLcom/android/server/media/AudioPlayerStateMonitor$AudioManagerPlaybackListener;-><init>(Lcom/android/server/media/AudioPlayerStateMonitor;Lcom/android/server/media/AudioPlayerStateMonitor$1;)V
 HPLcom/android/server/media/AudioPlayerStateMonitor$AudioManagerPlaybackListener;->onPlaybackConfigChanged(Ljava/util/List;)V
 HSPLcom/android/server/media/AudioPlayerStateMonitor$MessageHandler;-><init>(Landroid/os/Looper;Lcom/android/server/media/AudioPlayerStateMonitor$OnAudioPlayerActiveStateChangedListener;)V
-PLcom/android/server/media/AudioPlayerStateMonitor$MessageHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/media/AudioPlayerStateMonitor$MessageHandler;->sendAudioPlayerActiveStateChangedMessage(Landroid/media/AudioPlaybackConfiguration;Z)V
+HPLcom/android/server/media/AudioPlayerStateMonitor$MessageHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/media/AudioPlayerStateMonitor$MessageHandler;->sendAudioPlayerActiveStateChangedMessage(Landroid/media/AudioPlaybackConfiguration;Z)V
 HSPLcom/android/server/media/AudioPlayerStateMonitor;-><clinit>()V
 HSPLcom/android/server/media/AudioPlayerStateMonitor;-><init>(Landroid/content/Context;)V
 PLcom/android/server/media/AudioPlayerStateMonitor;->access$100(Lcom/android/server/media/AudioPlayerStateMonitor;)Ljava/lang/Object;
 PLcom/android/server/media/AudioPlayerStateMonitor;->access$200()Z
 PLcom/android/server/media/AudioPlayerStateMonitor;->access$400(Lcom/android/server/media/AudioPlayerStateMonitor;Landroid/media/AudioPlaybackConfiguration;Z)V
-PLcom/android/server/media/AudioPlayerStateMonitor;->cleanUpAudioPlaybackUids(I)V
+HPLcom/android/server/media/AudioPlayerStateMonitor;->cleanUpAudioPlaybackUids(I)V
 PLcom/android/server/media/AudioPlayerStateMonitor;->dump(Landroid/content/Context;Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/media/AudioPlayerStateMonitor;->getInstance(Landroid/content/Context;)Lcom/android/server/media/AudioPlayerStateMonitor;
-PLcom/android/server/media/AudioPlayerStateMonitor;->getSortedAudioPlaybackClientUids()Landroid/util/IntArray;
+HSPLcom/android/server/media/AudioPlayerStateMonitor;->getSortedAudioPlaybackClientUids()Landroid/util/IntArray;
 HSPLcom/android/server/media/AudioPlayerStateMonitor;->isPlaybackActive(I)Z
 HSPLcom/android/server/media/AudioPlayerStateMonitor;->registerListener(Lcom/android/server/media/AudioPlayerStateMonitor$OnAudioPlayerActiveStateChangedListener;Landroid/os/Handler;)V
-PLcom/android/server/media/AudioPlayerStateMonitor;->sendAudioPlayerActiveStateChangedMessageLocked(Landroid/media/AudioPlaybackConfiguration;Z)V
+HPLcom/android/server/media/AudioPlayerStateMonitor;->sendAudioPlayerActiveStateChangedMessageLocked(Landroid/media/AudioPlaybackConfiguration;Z)V
 HSPLcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;-><init>(Lcom/android/server/media/MediaResourceMonitorService;)V
-PLcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;->getPackageNamesFromPid(I)[Ljava/lang/String;
-PLcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;->notifyResourceGranted(II)V
+HPLcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;->getPackageNamesFromPid(I)[Ljava/lang/String;
+HPLcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;->notifyResourceGranted(II)V
 HSPLcom/android/server/media/MediaResourceMonitorService;-><clinit>()V
 HSPLcom/android/server/media/MediaResourceMonitorService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/media/MediaResourceMonitorService;->access$000()Z
 HSPLcom/android/server/media/MediaResourceMonitorService;->onStart()V
+PLcom/android/server/media/MediaRoute2Provider;-><init>(Landroid/content/ComponentName;)V
+PLcom/android/server/media/MediaRoute2Provider;->getProviderInfo()Landroid/media/MediaRoute2ProviderInfo;
+PLcom/android/server/media/MediaRoute2Provider;->getUniqueId()Ljava/lang/String;
+PLcom/android/server/media/MediaRoute2Provider;->setAndNotifyProviderState(Landroid/media/MediaRoute2ProviderInfo;Ljava/util/List;)V
+PLcom/android/server/media/MediaRoute2Provider;->setCallback(Lcom/android/server/media/MediaRoute2Provider$Callback;)V
+PLcom/android/server/media/MediaRoute2ProviderWatcher$1;-><init>(Lcom/android/server/media/MediaRoute2ProviderWatcher;)V
+PLcom/android/server/media/MediaRoute2ProviderWatcher$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/media/MediaRoute2ProviderWatcher$2;-><init>(Lcom/android/server/media/MediaRoute2ProviderWatcher;)V
+PLcom/android/server/media/MediaRoute2ProviderWatcher$2;->run()V
+PLcom/android/server/media/MediaRoute2ProviderWatcher;-><clinit>()V
+PLcom/android/server/media/MediaRoute2ProviderWatcher;-><init>(Landroid/content/Context;Lcom/android/server/media/MediaRoute2ProviderWatcher$Callback;Landroid/os/Handler;I)V
+PLcom/android/server/media/MediaRoute2ProviderWatcher;->access$000()Z
+PLcom/android/server/media/MediaRoute2ProviderWatcher;->access$100(Lcom/android/server/media/MediaRoute2ProviderWatcher;)V
+PLcom/android/server/media/MediaRoute2ProviderWatcher;->scanPackages()V
+PLcom/android/server/media/MediaRoute2ProviderWatcher;->start()V
+PLcom/android/server/media/MediaRouter2ServiceImpl$ManagerRecord;-><init>(Lcom/android/server/media/MediaRouter2ServiceImpl;Lcom/android/server/media/MediaRouter2ServiceImpl$UserRecord;Landroid/media/IMediaRouter2Manager;IILjava/lang/String;Z)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$ManagerRecord;->dispose()V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;-><init>(Lcom/android/server/media/MediaRouter2ServiceImpl;Lcom/android/server/media/MediaRouter2ServiceImpl$UserRecord;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->access$400(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->access$800(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Landroid/media/IMediaRouter2Manager;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getClients()Ljava/util/List;
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getManagers()Ljava/util/List;
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getProviderInfoIndex(Ljava/lang/String;)I
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->lambda$2y9vqtJzX1LpgQmc7mf5RQXEtqk(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Ljava/util/List;Ljava/util/List;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->lambda$pb5SX6gBlgZXLZp0t4uVjgjp3EE(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRoute2Provider;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesAddedToClients(Ljava/util/List;Ljava/util/List;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesAddedToManagers(Ljava/util/List;Ljava/util/List;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesChangedToClients(Ljava/util/List;Ljava/util/List;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesChangedToManagers(Ljava/util/List;Ljava/util/List;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesRemovedToClients(Ljava/util/List;Ljava/util/List;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesRemovedToManagers(Ljava/util/List;Ljava/util/List;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesToManager(Landroid/media/IMediaRouter2Manager;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onProviderStateChanged(Lcom/android/server/media/MediaRoute2Provider;)V
+HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onProviderStateChangedOnHandler(Lcom/android/server/media/MediaRoute2Provider;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->start()V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserRecord;-><init>(Lcom/android/server/media/MediaRouter2ServiceImpl;I)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl;-><clinit>()V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl;-><init>(Landroid/content/Context;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl;->switchUser()V
+PLcom/android/server/media/MediaRouter2ServiceImpl;->access$200(Lcom/android/server/media/MediaRouter2ServiceImpl;)Landroid/content/Context;
+PLcom/android/server/media/MediaRouter2ServiceImpl;->access$300(Lcom/android/server/media/MediaRouter2ServiceImpl;)Ljava/lang/Object;
+PLcom/android/server/media/MediaRouter2ServiceImpl;->disposeUserIfNeededLocked(Lcom/android/server/media/MediaRouter2ServiceImpl$UserRecord;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl;->getOrCreateUserRecordLocked(I)Lcom/android/server/media/MediaRouter2ServiceImpl$UserRecord;
+PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$getOrCreateUserRecordLocked$16(Ljava/lang/Object;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$registerManagerLocked$12(Ljava/lang/Object;Landroid/media/IMediaRouter2Manager;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl;->registerManager(Landroid/media/IMediaRouter2Manager;Ljava/lang/String;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl;->registerManagerLocked(Landroid/media/IMediaRouter2Manager;IILjava/lang/String;IZ)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl;->switchUser()V
+PLcom/android/server/media/MediaRouter2ServiceImpl;->unregisterManager(Landroid/media/IMediaRouter2Manager;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl;->unregisterManagerLocked(Landroid/media/IMediaRouter2Manager;Z)V
 HSPLcom/android/server/media/MediaRouterService$1$1;-><init>(Lcom/android/server/media/MediaRouterService$1;)V
-PLcom/android/server/media/MediaRouterService$1$1;->run()V
+HPLcom/android/server/media/MediaRouterService$1$1;->run()V
 HSPLcom/android/server/media/MediaRouterService$1;-><init>(Lcom/android/server/media/MediaRouterService;)V
-PLcom/android/server/media/MediaRouterService$1;->onAudioPlayerActiveStateChanged(Landroid/media/AudioPlaybackConfiguration;Z)V
+HPLcom/android/server/media/MediaRouterService$1;->onAudioPlayerActiveStateChanged(Landroid/media/AudioPlaybackConfiguration;Z)V
 HSPLcom/android/server/media/MediaRouterService$2;-><init>(Lcom/android/server/media/MediaRouterService;)V
-PLcom/android/server/media/MediaRouterService$2;->dispatchAudioRoutesChanged(Landroid/media/AudioRoutesInfo;)V
-PLcom/android/server/media/MediaRouterService$3;-><init>(Lcom/android/server/media/MediaRouterService;)V
-PLcom/android/server/media/MediaRouterService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/media/MediaRouterService$2;->dispatchAudioRoutesChanged(Landroid/media/AudioRoutesInfo;)V
+HSPLcom/android/server/media/MediaRouterService$3;-><init>(Lcom/android/server/media/MediaRouterService;)V
+HSPLcom/android/server/media/MediaRouterService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/media/MediaRouterService$ClientGroup;-><init>(Lcom/android/server/media/MediaRouterService;)V
 HSPLcom/android/server/media/MediaRouterService$ClientRecord;-><init>(Lcom/android/server/media/MediaRouterService;Lcom/android/server/media/MediaRouterService$UserRecord;Landroid/media/IMediaRouterClient;IILjava/lang/String;Z)V
-PLcom/android/server/media/MediaRouterService$ClientRecord;->binderDied()V
-PLcom/android/server/media/MediaRouterService$ClientRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/media/MediaRouterService$ClientRecord;->binderDied()V
+HPLcom/android/server/media/MediaRouterService$ClientRecord;->dispose()V
+HPLcom/android/server/media/MediaRouterService$ClientRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/media/MediaRouterService$ClientRecord;->getState()Landroid/media/MediaRouterClientState;
-PLcom/android/server/media/MediaRouterService$ClientRecord;->toString()Ljava/lang/String;
+HPLcom/android/server/media/MediaRouterService$ClientRecord;->toString()Ljava/lang/String;
 HSPLcom/android/server/media/MediaRouterService$MediaRouterServiceBroadcastReceiver;-><init>(Lcom/android/server/media/MediaRouterService;)V
-PLcom/android/server/media/MediaRouterService$MediaRouterServiceBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/media/MediaRouterService$MediaRouterServiceBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;-><init>(Lcom/android/server/media/RemoteDisplayProviderProxy;)V
-PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->appendClientState(Landroid/media/MediaRouterClientState;)V
+HPLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->appendClientState(Landroid/media/MediaRouterClientState;)V
+PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->assignRouteUniqueId(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->findRouteByDescriptorId(Ljava/lang/String;)I
+PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->findRouteByUniqueId(Ljava/lang/String;)Lcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;
+PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->getProvider()Lcom/android/server/media/RemoteDisplayProviderProxy;
 PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->toString()Ljava/lang/String;
-PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->updateDescriptor(Landroid/media/RemoteDisplayState;)Z
+HPLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->updateDescriptor(Landroid/media/RemoteDisplayState;)Z
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;-><init>(Lcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computeDescription(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)Ljava/lang/String;
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computeEnabled(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)Z
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computeName(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)Ljava/lang/String;
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computePlaybackStream(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)I
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computePlaybackType(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)I
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computePresentationDisplayId(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)I
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computeStatusCode(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)I
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computeSupportedTypes(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)I
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computeVolume(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)I
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computeVolumeHandling(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)I
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computeVolumeMax(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)I
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->getDescriptorId()Ljava/lang/String;
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->getInfo()Landroid/media/MediaRouterClientState$RouteInfo;
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->getProvider()Lcom/android/server/media/RemoteDisplayProviderProxy;
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->getStatus()I
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->getUniqueId()Ljava/lang/String;
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->isEnabled()Z
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->isValid()Z
+PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->toString()Ljava/lang/String;
+HPLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->updateDescriptor(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)Z
 HSPLcom/android/server/media/MediaRouterService$UserHandler;-><init>(Lcom/android/server/media/MediaRouterService;Lcom/android/server/media/MediaRouterService$UserRecord;)V
 PLcom/android/server/media/MediaRouterService$UserHandler;->addProvider(Lcom/android/server/media/RemoteDisplayProviderProxy;)V
-PLcom/android/server/media/MediaRouterService$UserHandler;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/media/MediaRouterService$UserHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/media/MediaRouterService$UserHandler;->start()V
-PLcom/android/server/media/MediaRouterService$UserHandler;->updateClientState()V
-PLcom/android/server/media/MediaRouterService$UserHandler;->updateDiscoveryRequest()V
-PLcom/android/server/media/MediaRouterService$UserHandler;->updateSelectedRoute(Ljava/lang/String;)V
+PLcom/android/server/media/MediaRouterService$UserHandler;->checkSelectedRouteState()V
+PLcom/android/server/media/MediaRouterService$UserHandler;->connectionTimedOut()V
+HPLcom/android/server/media/MediaRouterService$UserHandler;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/media/MediaRouterService$UserHandler;->findProviderRecord(Lcom/android/server/media/RemoteDisplayProviderProxy;)I
+PLcom/android/server/media/MediaRouterService$UserHandler;->findRouteRecord(Ljava/lang/String;)Lcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;
+PLcom/android/server/media/MediaRouterService$UserHandler;->getConnectionPhase(I)I
+HSPLcom/android/server/media/MediaRouterService$UserHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/media/MediaRouterService$UserHandler;->onDisplayStateChanged(Lcom/android/server/media/RemoteDisplayProviderProxy;Landroid/media/RemoteDisplayState;)V
+PLcom/android/server/media/MediaRouterService$UserHandler;->scheduleUpdateClientState()V
+PLcom/android/server/media/MediaRouterService$UserHandler;->selectRoute(Ljava/lang/String;)V
+HSPLcom/android/server/media/MediaRouterService$UserHandler;->start()V
+PLcom/android/server/media/MediaRouterService$UserHandler;->unselectRoute(Ljava/lang/String;)V
+PLcom/android/server/media/MediaRouterService$UserHandler;->unselectSelectedRoute()V
+HPLcom/android/server/media/MediaRouterService$UserHandler;->updateClientState()V
+PLcom/android/server/media/MediaRouterService$UserHandler;->updateConnectionTimeout(I)V
+HPLcom/android/server/media/MediaRouterService$UserHandler;->updateDiscoveryRequest()V
+PLcom/android/server/media/MediaRouterService$UserHandler;->updateProvider(Lcom/android/server/media/RemoteDisplayProviderProxy;Landroid/media/RemoteDisplayState;)V
+HPLcom/android/server/media/MediaRouterService$UserHandler;->updateSelectedRoute(Ljava/lang/String;)V
 PLcom/android/server/media/MediaRouterService$UserRecord$1;-><init>(Lcom/android/server/media/MediaRouterService$UserRecord;Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/media/MediaRouterService$UserRecord$1;->run()V
 HSPLcom/android/server/media/MediaRouterService$UserRecord;-><init>(Lcom/android/server/media/MediaRouterService;I)V
@@ -11459,284 +19043,725 @@
 PLcom/android/server/media/MediaRouterService$UserRecord;->toString()Ljava/lang/String;
 HSPLcom/android/server/media/MediaRouterService;-><clinit>()V
 HSPLcom/android/server/media/MediaRouterService;-><init>(Landroid/content/Context;)V
+HPLcom/android/server/media/MediaRouterService;->access$000(Lcom/android/server/media/MediaRouterService;)Landroid/util/IntArray;
+PLcom/android/server/media/MediaRouterService;->access$100(Lcom/android/server/media/MediaRouterService;)Landroid/util/IntArray;
+PLcom/android/server/media/MediaRouterService;->access$200(Lcom/android/server/media/MediaRouterService;)Landroid/os/Handler;
+PLcom/android/server/media/MediaRouterService;->access$300()Z
 PLcom/android/server/media/MediaRouterService;->access$400(Lcom/android/server/media/MediaRouterService;)Ljava/lang/Object;
 HSPLcom/android/server/media/MediaRouterService;->access$600(Lcom/android/server/media/MediaRouterService;)Landroid/content/Context;
-PLcom/android/server/media/MediaRouterService;->clientDied(Lcom/android/server/media/MediaRouterService$ClientRecord;)V
-PLcom/android/server/media/MediaRouterService;->disposeClientLocked(Lcom/android/server/media/MediaRouterService$ClientRecord;Z)V
-PLcom/android/server/media/MediaRouterService;->disposeUserIfNeededLocked(Lcom/android/server/media/MediaRouterService$UserRecord;)V
+HPLcom/android/server/media/MediaRouterService;->clientDied(Lcom/android/server/media/MediaRouterService$ClientRecord;)V
+HPLcom/android/server/media/MediaRouterService;->disposeClientLocked(Lcom/android/server/media/MediaRouterService$ClientRecord;Z)V
+HPLcom/android/server/media/MediaRouterService;->disposeUserIfNeededLocked(Lcom/android/server/media/MediaRouterService$UserRecord;)V
 PLcom/android/server/media/MediaRouterService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/media/MediaRouterService;->getState(Landroid/media/IMediaRouterClient;)Landroid/media/MediaRouterClientState;
 HSPLcom/android/server/media/MediaRouterService;->getStateLocked(Landroid/media/IMediaRouterClient;)Landroid/media/MediaRouterClientState;
 HSPLcom/android/server/media/MediaRouterService;->initializeClientLocked(Lcom/android/server/media/MediaRouterService$ClientRecord;)V
 HSPLcom/android/server/media/MediaRouterService;->initializeUserLocked(Lcom/android/server/media/MediaRouterService$UserRecord;)V
 HSPLcom/android/server/media/MediaRouterService;->isPlaybackActive(Landroid/media/IMediaRouterClient;)Z
-PLcom/android/server/media/MediaRouterService;->monitor()V
+HPLcom/android/server/media/MediaRouterService;->monitor()V
 HSPLcom/android/server/media/MediaRouterService;->registerClientAsUser(Landroid/media/IMediaRouterClient;Ljava/lang/String;I)V
-PLcom/android/server/media/MediaRouterService;->registerClientGroupId(Landroid/media/IMediaRouterClient;Ljava/lang/String;)V
-PLcom/android/server/media/MediaRouterService;->registerClientGroupIdLocked(Landroid/media/IMediaRouterClient;Ljava/lang/String;)V
+HPLcom/android/server/media/MediaRouterService;->registerClientGroupId(Landroid/media/IMediaRouterClient;Ljava/lang/String;)V
+HPLcom/android/server/media/MediaRouterService;->registerClientGroupIdLocked(Landroid/media/IMediaRouterClient;Ljava/lang/String;)V
 HSPLcom/android/server/media/MediaRouterService;->registerClientLocked(Landroid/media/IMediaRouterClient;IILjava/lang/String;IZ)V
-PLcom/android/server/media/MediaRouterService;->restoreBluetoothA2dp()V
-PLcom/android/server/media/MediaRouterService;->restoreRoute(I)V
+PLcom/android/server/media/MediaRouterService;->registerManager(Landroid/media/IMediaRouter2Manager;Ljava/lang/String;)V
+HPLcom/android/server/media/MediaRouterService;->restoreBluetoothA2dp()V
+HPLcom/android/server/media/MediaRouterService;->restoreRoute(I)V
 HSPLcom/android/server/media/MediaRouterService;->setDiscoveryRequest(Landroid/media/IMediaRouterClient;IZ)V
 HSPLcom/android/server/media/MediaRouterService;->setDiscoveryRequestLocked(Landroid/media/IMediaRouterClient;IZ)V
 HSPLcom/android/server/media/MediaRouterService;->setSelectedRoute(Landroid/media/IMediaRouterClient;Ljava/lang/String;Z)V
 HSPLcom/android/server/media/MediaRouterService;->setSelectedRouteLocked(Landroid/media/IMediaRouterClient;Ljava/lang/String;Z)V
-PLcom/android/server/media/MediaRouterService;->switchUser()V
-PLcom/android/server/media/MediaRouterService;->systemRunning()V
-PLcom/android/server/media/MediaRouterService;->unregisterClientLocked(Landroid/media/IMediaRouterClient;Z)V
+HSPLcom/android/server/media/MediaRouterService;->switchUser()V
+HSPLcom/android/server/media/MediaRouterService;->systemRunning()V
+HPLcom/android/server/media/MediaRouterService;->unregisterClientLocked(Landroid/media/IMediaRouterClient;Z)V
+PLcom/android/server/media/MediaRouterService;->unregisterManager(Landroid/media/IMediaRouter2Manager;)V
 HSPLcom/android/server/media/MediaRouterService;->validatePackageName(ILjava/lang/String;)Z
-PLcom/android/server/media/MediaSessionRecord$2;-><init>(Lcom/android/server/media/MediaSessionRecord;ZIIILjava/lang/String;II)V
-PLcom/android/server/media/MediaSessionRecord$2;->run()V
-PLcom/android/server/media/MediaSessionRecord$3;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
-PLcom/android/server/media/MediaSessionRecord$ControllerStub;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
+HPLcom/android/server/media/MediaSessionRecord$2;-><init>(Lcom/android/server/media/MediaSessionRecord;ZIIILjava/lang/String;II)V
+HPLcom/android/server/media/MediaSessionRecord$2;->run()V
+HSPLcom/android/server/media/MediaSessionRecord$3;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord$3;->run()V
+HSPLcom/android/server/media/MediaSessionRecord$ControllerStub;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->fastForward(Ljava/lang/String;)V
+HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->getExtras()Landroid/os/Bundle;
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->getFlags()J
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->getLaunchPendingIntent()Landroid/app/PendingIntent;
 HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->getMetadata()Landroid/media/MediaMetadata;
-PLcom/android/server/media/MediaSessionRecord$ControllerStub;->getPackageName()Ljava/lang/String;
+HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->getPackageName()Ljava/lang/String;
 HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->getPlaybackState()Landroid/media/session/PlaybackState;
 HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->getQueue()Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/media/MediaSessionRecord$ControllerStub;->getVolumeAttributes()Landroid/media/session/MediaController$PlaybackInfo;
-PLcom/android/server/media/MediaSessionRecord$ControllerStub;->registerCallback(Ljava/lang/String;Landroid/media/session/ISessionControllerCallback;)V
-PLcom/android/server/media/MediaSessionRecord$ControllerStub;->unregisterCallback(Landroid/media/session/ISessionControllerCallback;)V
-PLcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionControllerCallback;Ljava/lang/String;I)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->getQueueTitle()Ljava/lang/CharSequence;
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->getRatingType()I
+HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->getVolumeAttributes()Landroid/media/session/MediaController$PlaybackInfo;
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->next(Ljava/lang/String;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->pause(Ljava/lang/String;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->play(Ljava/lang/String;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->playFromMediaId(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->playFromUri(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->prepareFromUri(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->previous(Ljava/lang/String;)V
+HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->registerCallback(Ljava/lang/String;Landroid/media/session/ISessionControllerCallback;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->rewind(Ljava/lang/String;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->seekTo(Ljava/lang/String;J)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->sendCommand(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ResultReceiver;)V
+HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->sendCustomAction(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->sendMediaButton(Ljava/lang/String;Landroid/view/KeyEvent;)Z
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->setVolumeTo(Ljava/lang/String;Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->skipToQueueItem(Ljava/lang/String;J)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->stop(Ljava/lang/String;)V
+HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->unregisterCallback(Landroid/media/session/ISessionControllerCallback;)V
+HPLcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionControllerCallback;Ljava/lang/String;I)V
+PLcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;->access$300(Lcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;)Ljava/lang/String;
 HPLcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;->access$400(Lcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;)Landroid/media/session/ISessionControllerCallback;
-PLcom/android/server/media/MediaSessionRecord$MessageHandler;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/os/Looper;)V
-PLcom/android/server/media/MediaSessionRecord$MessageHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/media/MediaSessionRecord$MessageHandler;->post(I)V
-PLcom/android/server/media/MediaSessionRecord$MessageHandler;->post(ILjava/lang/Object;)V
-PLcom/android/server/media/MediaSessionRecord$SessionCb;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionCallback;)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;-><init>(Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord$1;)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;->destroySession()V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;->getController()Landroid/media/session/ISessionController;
-PLcom/android/server/media/MediaSessionRecord$SessionStub;->setActive(Z)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;->setExtras(Landroid/os/Bundle;)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;->setFlags(I)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;->setLaunchPendingIntent(Landroid/app/PendingIntent;)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;->setMediaButtonReceiver(Landroid/app/PendingIntent;)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;->setMetadata(Landroid/media/MediaMetadata;JLjava/lang/String;)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;->setPlaybackState(Landroid/media/session/PlaybackState;)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;->setPlaybackToLocal(Landroid/media/AudioAttributes;)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;->setQueue(Landroid/content/pm/ParceledListSlice;)V
+HSPLcom/android/server/media/MediaSessionRecord$MessageHandler;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/os/Looper;)V
+HSPLcom/android/server/media/MediaSessionRecord$MessageHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/media/MediaSessionRecord$MessageHandler;->post(I)V
+HSPLcom/android/server/media/MediaSessionRecord$MessageHandler;->post(ILjava/lang/Object;)V
+PLcom/android/server/media/MediaSessionRecord$MessageHandler;->post(ILjava/lang/Object;Landroid/os/Bundle;)V
+HSPLcom/android/server/media/MediaSessionRecord$SessionCb;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionCallback;)V
+HSPLcom/android/server/media/MediaSessionRecord$SessionCb;->access$100(Lcom/android/server/media/MediaSessionRecord$SessionCb;)Landroid/media/session/ISessionCallback;
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->adjustVolume(Ljava/lang/String;IIZI)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->createMediaButtonIntent(Landroid/view/KeyEvent;)Landroid/content/Intent;
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->fastForward(Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->next(Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->pause(Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->play(Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->playFromMediaId(Ljava/lang/String;IILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->playFromUri(Ljava/lang/String;IILandroid/net/Uri;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->prepareFromUri(Ljava/lang/String;IILandroid/net/Uri;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->previous(Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->rewind(Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->seekTo(Ljava/lang/String;IIJ)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->sendCommand(Ljava/lang/String;IILjava/lang/String;Landroid/os/Bundle;Landroid/os/ResultReceiver;)V
+HPLcom/android/server/media/MediaSessionRecord$SessionCb;->sendCustomAction(Ljava/lang/String;IILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->sendMediaButton(Ljava/lang/String;IIZLandroid/view/KeyEvent;)Z
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->sendMediaButton(Ljava/lang/String;IIZLandroid/view/KeyEvent;ILandroid/os/ResultReceiver;)Z
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->setVolumeTo(Ljava/lang/String;III)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->skipToTrack(Ljava/lang/String;IIJ)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->stop(Ljava/lang/String;II)V
+HSPLcom/android/server/media/MediaSessionRecord$SessionStub;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
+HSPLcom/android/server/media/MediaSessionRecord$SessionStub;-><init>(Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord$1;)V
+HPLcom/android/server/media/MediaSessionRecord$SessionStub;->destroySession()V
+HSPLcom/android/server/media/MediaSessionRecord$SessionStub;->getController()Landroid/media/session/ISessionController;
+PLcom/android/server/media/MediaSessionRecord$SessionStub;->sendEvent(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setActive(Z)V
+HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setCurrentVolume(I)V
+HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setExtras(Landroid/os/Bundle;)V
+HSPLcom/android/server/media/MediaSessionRecord$SessionStub;->setFlags(I)V
+HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setLaunchPendingIntent(Landroid/app/PendingIntent;)V
+HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setMediaButtonReceiver(Landroid/app/PendingIntent;)V
+HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setMetadata(Landroid/media/MediaMetadata;JLjava/lang/String;)V
+HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setPlaybackState(Landroid/media/session/PlaybackState;)V
+HSPLcom/android/server/media/MediaSessionRecord$SessionStub;->setPlaybackToLocal(Landroid/media/AudioAttributes;)V
+HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setPlaybackToRemote(II)V
+HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setPlaybackToRemote(IILjava/lang/String;)V
+HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setQueue(Landroid/content/pm/ParceledListSlice;)V
 PLcom/android/server/media/MediaSessionRecord$SessionStub;->setQueueTitle(Ljava/lang/CharSequence;)V
 PLcom/android/server/media/MediaSessionRecord$SessionStub;->setRatingType(I)V
-PLcom/android/server/media/MediaSessionRecord;-><clinit>()V
-HPLcom/android/server/media/MediaSessionRecord;-><init>(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;Lcom/android/server/media/MediaSessionService;Landroid/os/Looper;)V
-PLcom/android/server/media/MediaSessionRecord;->access$1000(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$ControllerStub;
-PLcom/android/server/media/MediaSessionRecord;->access$1202(Lcom/android/server/media/MediaSessionRecord;J)J
-PLcom/android/server/media/MediaSessionRecord;->access$1500(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/Object;
+HSPLcom/android/server/media/MediaSessionRecord;-><clinit>()V
+HSPLcom/android/server/media/MediaSessionRecord;-><init>(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;Lcom/android/server/media/MediaSessionService;Landroid/os/Looper;)V
+HPLcom/android/server/media/MediaSessionRecord;-><init>(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;Lcom/android/server/media/MediaSessionService;Landroid/os/Looper;I)V
+HSPLcom/android/server/media/MediaSessionRecord;->access$1000(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$ControllerStub;
+PLcom/android/server/media/MediaSessionRecord;->access$1102(Lcom/android/server/media/MediaSessionRecord;Z)Z
+PLcom/android/server/media/MediaSessionRecord;->access$1200(Lcom/android/server/media/MediaSessionRecord;)J
+HSPLcom/android/server/media/MediaSessionRecord;->access$1202(Lcom/android/server/media/MediaSessionRecord;J)J
+PLcom/android/server/media/MediaSessionRecord;->access$1300(Lcom/android/server/media/MediaSessionRecord;)I
+PLcom/android/server/media/MediaSessionRecord;->access$1302(Lcom/android/server/media/MediaSessionRecord;Landroid/app/PendingIntent;)Landroid/app/PendingIntent;
+PLcom/android/server/media/MediaSessionRecord;->access$1400(Lcom/android/server/media/MediaSessionRecord;)Landroid/app/PendingIntent;
+PLcom/android/server/media/MediaSessionRecord;->access$1402(Lcom/android/server/media/MediaSessionRecord;Landroid/app/PendingIntent;)Landroid/app/PendingIntent;
+PLcom/android/server/media/MediaSessionRecord;->access$1500(Lcom/android/server/media/MediaSessionRecord;)Landroid/app/PendingIntent;
+HSPLcom/android/server/media/MediaSessionRecord;->access$1500(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/Object;
+PLcom/android/server/media/MediaSessionRecord;->access$1502(Lcom/android/server/media/MediaSessionRecord;Landroid/app/PendingIntent;)Landroid/app/PendingIntent;
+HPLcom/android/server/media/MediaSessionRecord;->access$1600(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/MediaMetadata;
+HPLcom/android/server/media/MediaSessionRecord;->access$1600(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/Object;
+PLcom/android/server/media/MediaSessionRecord;->access$1602(Lcom/android/server/media/MediaSessionRecord;Landroid/media/MediaMetadata;)Landroid/media/MediaMetadata;
+HPLcom/android/server/media/MediaSessionRecord;->access$1700(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/MediaMetadata;
+PLcom/android/server/media/MediaSessionRecord;->access$1702(Lcom/android/server/media/MediaSessionRecord;J)J
+PLcom/android/server/media/MediaSessionRecord;->access$1702(Lcom/android/server/media/MediaSessionRecord;Landroid/media/MediaMetadata;)Landroid/media/MediaMetadata;
+PLcom/android/server/media/MediaSessionRecord;->access$1802(Lcom/android/server/media/MediaSessionRecord;J)J
+PLcom/android/server/media/MediaSessionRecord;->access$1802(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/media/MediaSessionRecord;->access$1900(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/PlaybackState;
+PLcom/android/server/media/MediaSessionRecord;->access$1902(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/PlaybackState;)Landroid/media/session/PlaybackState;
+PLcom/android/server/media/MediaSessionRecord;->access$1902(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/media/MediaSessionRecord;->access$200(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/AudioManagerInternal;
+PLcom/android/server/media/MediaSessionRecord;->access$2000()Ljava/util/List;
+PLcom/android/server/media/MediaSessionRecord;->access$2000(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/PlaybackState;
 PLcom/android/server/media/MediaSessionRecord;->access$2000(Lcom/android/server/media/MediaSessionRecord;)Ljava/util/List;
+PLcom/android/server/media/MediaSessionRecord;->access$2002(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/PlaybackState;)Landroid/media/session/PlaybackState;
 PLcom/android/server/media/MediaSessionRecord;->access$2002(Lcom/android/server/media/MediaSessionRecord;Ljava/util/List;)Ljava/util/List;
+PLcom/android/server/media/MediaSessionRecord;->access$2100()Ljava/util/List;
+PLcom/android/server/media/MediaSessionRecord;->access$2102(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+PLcom/android/server/media/MediaSessionRecord;->access$2200()Ljava/util/List;
+HPLcom/android/server/media/MediaSessionRecord;->access$2200(Lcom/android/server/media/MediaSessionRecord;)Ljava/util/List;
+PLcom/android/server/media/MediaSessionRecord;->access$2202(Lcom/android/server/media/MediaSessionRecord;Landroid/os/Bundle;)Landroid/os/Bundle;
+PLcom/android/server/media/MediaSessionRecord;->access$2202(Lcom/android/server/media/MediaSessionRecord;Ljava/util/List;)Ljava/util/List;
+PLcom/android/server/media/MediaSessionRecord;->access$2300(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/CharSequence;
+HPLcom/android/server/media/MediaSessionRecord;->access$2300(Lcom/android/server/media/MediaSessionRecord;)Ljava/util/List;
+PLcom/android/server/media/MediaSessionRecord;->access$2302(Lcom/android/server/media/MediaSessionRecord;I)I
+PLcom/android/server/media/MediaSessionRecord;->access$2302(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+PLcom/android/server/media/MediaSessionRecord;->access$2302(Lcom/android/server/media/MediaSessionRecord;Ljava/util/List;)Ljava/util/List;
 PLcom/android/server/media/MediaSessionRecord;->access$2400(Lcom/android/server/media/MediaSessionRecord;)I
+PLcom/android/server/media/MediaSessionRecord;->access$2400(Lcom/android/server/media/MediaSessionRecord;)Landroid/os/Bundle;
+PLcom/android/server/media/MediaSessionRecord;->access$2400(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/CharSequence;
 PLcom/android/server/media/MediaSessionRecord;->access$2402(Lcom/android/server/media/MediaSessionRecord;I)I
+PLcom/android/server/media/MediaSessionRecord;->access$2402(Lcom/android/server/media/MediaSessionRecord;Landroid/os/Bundle;)Landroid/os/Bundle;
+PLcom/android/server/media/MediaSessionRecord;->access$2402(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+PLcom/android/server/media/MediaSessionRecord;->access$2500(Lcom/android/server/media/MediaSessionRecord;)I
+PLcom/android/server/media/MediaSessionRecord;->access$2500(Lcom/android/server/media/MediaSessionRecord;)Landroid/os/Bundle;
+PLcom/android/server/media/MediaSessionRecord;->access$2502(Lcom/android/server/media/MediaSessionRecord;I)I
 PLcom/android/server/media/MediaSessionRecord;->access$2502(Lcom/android/server/media/MediaSessionRecord;Landroid/media/AudioAttributes;)Landroid/media/AudioAttributes;
-PLcom/android/server/media/MediaSessionRecord;->access$800(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionService;
-PLcom/android/server/media/MediaSessionRecord;->access$900(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$MessageHandler;
+PLcom/android/server/media/MediaSessionRecord;->access$2502(Lcom/android/server/media/MediaSessionRecord;Landroid/os/Bundle;)Landroid/os/Bundle;
+HSPLcom/android/server/media/MediaSessionRecord;->access$2600(Lcom/android/server/media/MediaSessionRecord;)I
+HSPLcom/android/server/media/MediaSessionRecord;->access$2602(Lcom/android/server/media/MediaSessionRecord;I)I
+PLcom/android/server/media/MediaSessionRecord;->access$2700(Lcom/android/server/media/MediaSessionRecord;)I
+PLcom/android/server/media/MediaSessionRecord;->access$2702(Lcom/android/server/media/MediaSessionRecord;I)I
+HSPLcom/android/server/media/MediaSessionRecord;->access$2702(Lcom/android/server/media/MediaSessionRecord;Landroid/media/AudioAttributes;)Landroid/media/AudioAttributes;
+PLcom/android/server/media/MediaSessionRecord;->access$2702(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/media/MediaSessionRecord;->access$2802(Lcom/android/server/media/MediaSessionRecord;I)I
+PLcom/android/server/media/MediaSessionRecord;->access$2802(Lcom/android/server/media/MediaSessionRecord;Landroid/media/AudioAttributes;)Landroid/media/AudioAttributes;
+PLcom/android/server/media/MediaSessionRecord;->access$2802(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/media/MediaSessionRecord;->access$2902(Lcom/android/server/media/MediaSessionRecord;I)I
+PLcom/android/server/media/MediaSessionRecord;->access$2902(Lcom/android/server/media/MediaSessionRecord;Landroid/media/AudioAttributes;)Landroid/media/AudioAttributes;
+PLcom/android/server/media/MediaSessionRecord;->access$3000(Lcom/android/server/media/MediaSessionRecord;)Landroid/content/Context;
+PLcom/android/server/media/MediaSessionRecord;->access$3000(Lcom/android/server/media/MediaSessionRecord;)Z
+PLcom/android/server/media/MediaSessionRecord;->access$3002(Lcom/android/server/media/MediaSessionRecord;I)I
+PLcom/android/server/media/MediaSessionRecord;->access$3100(Lcom/android/server/media/MediaSessionRecord;)Landroid/content/Context;
+PLcom/android/server/media/MediaSessionRecord;->access$3100(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$SessionCb;
+PLcom/android/server/media/MediaSessionRecord;->access$3100(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionControllerCallback;)I
+PLcom/android/server/media/MediaSessionRecord;->access$3102(Lcom/android/server/media/MediaSessionRecord;I)I
+PLcom/android/server/media/MediaSessionRecord;->access$3200(Lcom/android/server/media/MediaSessionRecord;)Landroid/content/Context;
+PLcom/android/server/media/MediaSessionRecord;->access$3200(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$SessionCb;
+PLcom/android/server/media/MediaSessionRecord;->access$3200(Lcom/android/server/media/MediaSessionRecord;)Ljava/util/ArrayList;
+PLcom/android/server/media/MediaSessionRecord;->access$3200(Lcom/android/server/media/MediaSessionRecord;)Z
+PLcom/android/server/media/MediaSessionRecord;->access$3300()Z
+PLcom/android/server/media/MediaSessionRecord;->access$3300(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$SessionCb;
+PLcom/android/server/media/MediaSessionRecord;->access$3300(Lcom/android/server/media/MediaSessionRecord;)Z
+PLcom/android/server/media/MediaSessionRecord;->access$3300(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionControllerCallback;)I
+PLcom/android/server/media/MediaSessionRecord;->access$3400(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/String;
+PLcom/android/server/media/MediaSessionRecord;->access$3400(Lcom/android/server/media/MediaSessionRecord;)Ljava/util/ArrayList;
+PLcom/android/server/media/MediaSessionRecord;->access$3400(Lcom/android/server/media/MediaSessionRecord;)Z
+HPLcom/android/server/media/MediaSessionRecord;->access$3400(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionControllerCallback;)I
+PLcom/android/server/media/MediaSessionRecord;->access$3500()Z
+PLcom/android/server/media/MediaSessionRecord;->access$3500(Lcom/android/server/media/MediaSessionRecord;)Ljava/util/ArrayList;
+HPLcom/android/server/media/MediaSessionRecord;->access$3500(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionControllerCallback;)I
+PLcom/android/server/media/MediaSessionRecord;->access$3600()Z
+PLcom/android/server/media/MediaSessionRecord;->access$3600(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/String;
+PLcom/android/server/media/MediaSessionRecord;->access$3600(Lcom/android/server/media/MediaSessionRecord;)Ljava/util/ArrayList;
+PLcom/android/server/media/MediaSessionRecord;->access$3700()Z
+PLcom/android/server/media/MediaSessionRecord;->access$3700(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/MediaController$PlaybackInfo;
+PLcom/android/server/media/MediaSessionRecord;->access$3700(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/String;
+HPLcom/android/server/media/MediaSessionRecord;->access$3800(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/String;
+PLcom/android/server/media/MediaSessionRecord;->access$3900(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/MediaController$PlaybackInfo;
+PLcom/android/server/media/MediaSessionRecord;->access$3900(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/PlaybackState;
+HPLcom/android/server/media/MediaSessionRecord;->access$4000(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/MediaController$PlaybackInfo;
+PLcom/android/server/media/MediaSessionRecord;->access$4000(Lcom/android/server/media/MediaSessionRecord;)V
+HPLcom/android/server/media/MediaSessionRecord;->access$4100(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/MediaController$PlaybackInfo;
+HPLcom/android/server/media/MediaSessionRecord;->access$4100(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/PlaybackState;
+PLcom/android/server/media/MediaSessionRecord;->access$4100(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord;->access$4100(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;Ljava/lang/String;IIII)V
+HPLcom/android/server/media/MediaSessionRecord;->access$4200(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/PlaybackState;
+HPLcom/android/server/media/MediaSessionRecord;->access$4200(Lcom/android/server/media/MediaSessionRecord;)V
+HPLcom/android/server/media/MediaSessionRecord;->access$4300(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/PlaybackState;
+HPLcom/android/server/media/MediaSessionRecord;->access$4300(Lcom/android/server/media/MediaSessionRecord;)V
+HPLcom/android/server/media/MediaSessionRecord;->access$4400(Lcom/android/server/media/MediaSessionRecord;)V
+HPLcom/android/server/media/MediaSessionRecord;->access$4500(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord;->access$4600(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord;->access$4700(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord;->access$4700(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionRecord;->access$4800(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord;->access$4800(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionRecord;->access$4900(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord;->access$4900(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionRecord;->access$500(Lcom/android/server/media/MediaSessionRecord;)I
+PLcom/android/server/media/MediaSessionRecord;->access$5000(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord;->access$502(Lcom/android/server/media/MediaSessionRecord;I)I
+PLcom/android/server/media/MediaSessionRecord;->access$600(Lcom/android/server/media/MediaSessionRecord;)I
+PLcom/android/server/media/MediaSessionRecord;->access$602(Lcom/android/server/media/MediaSessionRecord;I)I
+HPLcom/android/server/media/MediaSessionRecord;->access$700(Lcom/android/server/media/MediaSessionRecord;)V
+HSPLcom/android/server/media/MediaSessionRecord;->access$800(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionService;
+HSPLcom/android/server/media/MediaSessionRecord;->access$900(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$MessageHandler;
 PLcom/android/server/media/MediaSessionRecord;->adjustVolume(Ljava/lang/String;Ljava/lang/String;IILandroid/media/session/ISessionControllerCallback;ZIIZ)V
+HPLcom/android/server/media/MediaSessionRecord;->adjustVolume(Ljava/lang/String;Ljava/lang/String;IIZIIZ)V
 PLcom/android/server/media/MediaSessionRecord;->binderDied()V
-PLcom/android/server/media/MediaSessionRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/media/MediaSessionRecord;->checkPlaybackActiveState(Z)Z
+HPLcom/android/server/media/MediaSessionRecord;->close()V
+HPLcom/android/server/media/MediaSessionRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/media/MediaSessionRecord;->getCallback()Landroid/media/session/ISessionCallback;
-PLcom/android/server/media/MediaSessionRecord;->getControllerHolderIndexForCb(Landroid/media/session/ISessionControllerCallback;)I
+HPLcom/android/server/media/MediaSessionRecord;->getControllerHolderIndexForCb(Landroid/media/session/ISessionControllerCallback;)I
 PLcom/android/server/media/MediaSessionRecord;->getFlags()J
 PLcom/android/server/media/MediaSessionRecord;->getMediaButtonReceiver()Landroid/app/PendingIntent;
 PLcom/android/server/media/MediaSessionRecord;->getPackageName()Ljava/lang/String;
-PLcom/android/server/media/MediaSessionRecord;->getSessionBinder()Landroid/media/session/ISession;
+HSPLcom/android/server/media/MediaSessionRecord;->getSessionBinder()Landroid/media/session/ISession;
+HPLcom/android/server/media/MediaSessionRecord;->getSessionPolicies()I
 PLcom/android/server/media/MediaSessionRecord;->getSessionToken()Landroid/media/session/MediaSession$Token;
 HPLcom/android/server/media/MediaSessionRecord;->getStateWithUpdatedPosition()Landroid/media/session/PlaybackState;
-PLcom/android/server/media/MediaSessionRecord;->getUserId()I
-PLcom/android/server/media/MediaSessionRecord;->getVolumeAttributes()Landroid/media/session/MediaController$PlaybackInfo;
-PLcom/android/server/media/MediaSessionRecord;->isActive()Z
+HPLcom/android/server/media/MediaSessionRecord;->getUid()I
+HSPLcom/android/server/media/MediaSessionRecord;->getUserId()I
+HPLcom/android/server/media/MediaSessionRecord;->getVolumeAttributes()Landroid/media/session/MediaController$PlaybackInfo;
+HPLcom/android/server/media/MediaSessionRecord;->getVolumeStream(Landroid/media/AudioAttributes;)I
+HSPLcom/android/server/media/MediaSessionRecord;->isActive()Z
+PLcom/android/server/media/MediaSessionRecord;->isClosed()Z
+PLcom/android/server/media/MediaSessionRecord;->isPlaybackLocal()Z
+PLcom/android/server/media/MediaSessionRecord;->isPlaybackTypeLocal()Z
+PLcom/android/server/media/MediaSessionRecord;->isSystemPriority()Z
+HPLcom/android/server/media/MediaSessionRecord;->logCallbackException(Ljava/lang/String;Lcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;Ljava/lang/Exception;)V
 PLcom/android/server/media/MediaSessionRecord;->onDestroy()V
-PLcom/android/server/media/MediaSessionRecord;->postAdjustLocalVolume(IIILjava/lang/String;IIZZI)V
-PLcom/android/server/media/MediaSessionRecord;->pushExtrasUpdate()V
-PLcom/android/server/media/MediaSessionRecord;->pushMetadataUpdate()V
-PLcom/android/server/media/MediaSessionRecord;->pushPlaybackStateUpdate()V
+HPLcom/android/server/media/MediaSessionRecord;->postAdjustLocalVolume(IIILjava/lang/String;IIZZI)V
+PLcom/android/server/media/MediaSessionRecord;->pushEvent(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/media/MediaSessionRecord;->pushExtrasUpdate()V
+HPLcom/android/server/media/MediaSessionRecord;->pushMetadataUpdate()V
+HPLcom/android/server/media/MediaSessionRecord;->pushPlaybackStateUpdate()V
 PLcom/android/server/media/MediaSessionRecord;->pushQueueTitleUpdate()V
-PLcom/android/server/media/MediaSessionRecord;->pushQueueUpdate()V
-PLcom/android/server/media/MediaSessionRecord;->pushSessionDestroyed()V
-PLcom/android/server/media/MediaSessionRecord;->toString()Ljava/lang/String;
+HPLcom/android/server/media/MediaSessionRecord;->pushQueueUpdate()V
+HPLcom/android/server/media/MediaSessionRecord;->pushSessionDestroyed()V
+HPLcom/android/server/media/MediaSessionRecord;->pushVolumeUpdate()V
+PLcom/android/server/media/MediaSessionRecord;->sendMediaButton(Ljava/lang/String;IIZLandroid/view/KeyEvent;ILandroid/os/ResultReceiver;)Z
+PLcom/android/server/media/MediaSessionRecord;->setVolumeTo(Ljava/lang/String;Ljava/lang/String;IIII)V
+HSPLcom/android/server/media/MediaSessionRecord;->toString()Ljava/lang/String;
 PLcom/android/server/media/MediaSessionService$FullUserRecord$CallbackRecord;-><init>(Lcom/android/server/media/MediaSessionService$FullUserRecord;Landroid/media/session/ICallback;I)V
+PLcom/android/server/media/MediaSessionService$FullUserRecord$OnMediaKeyEventSessionChangedListenerRecord;-><init>(Lcom/android/server/media/MediaSessionService$FullUserRecord;Landroid/media/session/IOnMediaKeyEventSessionChangedListener;I)V
+PLcom/android/server/media/MediaSessionService$FullUserRecord$OnMediaKeyEventSessionChangedListenerRecord;->binderDied()V
 HSPLcom/android/server/media/MediaSessionService$FullUserRecord;-><init>(Lcom/android/server/media/MediaSessionService;I)V
-PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$300(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Lcom/android/server/media/MediaSessionStack;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$1700(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Ljava/util/HashMap;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$1800(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Ljava/util/HashMap;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$200(Lcom/android/server/media/MediaSessionService$FullUserRecord;)V
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$2800(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/media/session/IOnMediaKeyListener;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$2802(Lcom/android/server/media/MediaSessionService$FullUserRecord;Landroid/media/session/IOnMediaKeyListener;)Landroid/media/session/IOnMediaKeyListener;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$2900(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/media/session/IOnMediaKeyListener;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$2902(Lcom/android/server/media/MediaSessionService$FullUserRecord;Landroid/media/session/IOnMediaKeyListener;)Landroid/media/session/IOnMediaKeyListener;
+HSPLcom/android/server/media/MediaSessionService$FullUserRecord;->access$300(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Lcom/android/server/media/MediaSessionStack;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3000(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/media/session/IOnMediaKeyListener;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3100(Lcom/android/server/media/MediaSessionService$FullUserRecord;)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3102(Lcom/android/server/media/MediaSessionService$FullUserRecord;I)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3200(Lcom/android/server/media/MediaSessionService$FullUserRecord;)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3202(Lcom/android/server/media/MediaSessionService$FullUserRecord;I)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3300(Lcom/android/server/media/MediaSessionService$FullUserRecord;)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3302(Lcom/android/server/media/MediaSessionService$FullUserRecord;I)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3400(Lcom/android/server/media/MediaSessionService$FullUserRecord;)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3402(Lcom/android/server/media/MediaSessionService$FullUserRecord;I)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3500(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/view/KeyEvent;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3502(Lcom/android/server/media/MediaSessionService$FullUserRecord;Landroid/view/KeyEvent;)Landroid/view/KeyEvent;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3600(Lcom/android/server/media/MediaSessionService$FullUserRecord;)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3602(Lcom/android/server/media/MediaSessionService$FullUserRecord;I)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3700(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Z
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$3702(Lcom/android/server/media/MediaSessionService$FullUserRecord;Z)Z
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$400(Lcom/android/server/media/MediaSessionService$FullUserRecord;)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$4300(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Lcom/android/server/media/MediaSessionRecordImpl;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$4500(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/app/PendingIntent;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$4500(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Lcom/android/server/media/MediaSessionRecordImpl;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$4600(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/content/ComponentName;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$4600(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Lcom/android/server/media/MediaSessionRecordImpl;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$4700(Lcom/android/server/media/MediaSessionService$FullUserRecord;)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$4700(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/app/PendingIntent;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$4800(Lcom/android/server/media/MediaSessionService$FullUserRecord;)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$4800(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/content/ComponentName;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$4900(Lcom/android/server/media/MediaSessionService$FullUserRecord;)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$4900(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/app/PendingIntent;
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$500(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/media/session/IOnVolumeKeyLongPressListener;
-PLcom/android/server/media/MediaSessionService$FullUserRecord;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/media/MediaSessionService$FullUserRecord;->getComponentType(Landroid/content/ComponentName;)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$500(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/util/SparseIntArray;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$5000(Lcom/android/server/media/MediaSessionService$FullUserRecord;)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$5000(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/content/ComponentName;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$502(Lcom/android/server/media/MediaSessionService$FullUserRecord;Landroid/media/session/IOnVolumeKeyLongPressListener;)Landroid/media/session/IOnVolumeKeyLongPressListener;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$600(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/media/session/IOnVolumeKeyLongPressListener;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->access$602(Lcom/android/server/media/MediaSessionService$FullUserRecord;Landroid/media/session/IOnVolumeKeyLongPressListener;)Landroid/media/session/IOnVolumeKeyLongPressListener;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->addOnMediaKeyEventSessionChangedListenerLocked(Landroid/media/session/IOnMediaKeyEventSessionChangedListener;I)V
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->destroySessionsForUserLocked(I)V
+HPLcom/android/server/media/MediaSessionService$FullUserRecord;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/media/MediaSessionService$FullUserRecord;->getComponentType(Landroid/content/ComponentName;)I
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->getMediaButtonSessionLocked()Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->getMediaButtonSessionLocked()Lcom/android/server/media/MediaSessionRecordImpl;
 HPLcom/android/server/media/MediaSessionService$FullUserRecord;->onMediaButtonSessionChanged(Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;)V
+HPLcom/android/server/media/MediaSessionService$FullUserRecord;->onMediaButtonSessionChanged(Lcom/android/server/media/MediaSessionRecordImpl;Lcom/android/server/media/MediaSessionRecordImpl;)V
 HPLcom/android/server/media/MediaSessionService$FullUserRecord;->pushAddressedPlayerChangedLocked()V
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->pushAddressedPlayerChangedLocked(Landroid/media/session/ICallback;)V
+HPLcom/android/server/media/MediaSessionService$FullUserRecord;->pushAddressedPlayerChangedLocked(Landroid/media/session/IOnMediaKeyEventSessionChangedListener;)V
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->registerCallbackLocked(Landroid/media/session/ICallback;I)V
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->rememberMediaButtonReceiverLocked(Lcom/android/server/media/MediaSessionRecord;)V
+HPLcom/android/server/media/MediaSessionService$FullUserRecord;->rememberMediaButtonReceiverLocked(Lcom/android/server/media/MediaSessionRecordImpl;)V
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->removeOnMediaKeyEventSessionChangedListener(Landroid/media/session/IOnMediaKeyEventSessionChangedListener;)V
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->unregisterCallbackLocked(Landroid/media/session/ICallback;)V
 HSPLcom/android/server/media/MediaSessionService$MessageHandler;-><init>(Lcom/android/server/media/MediaSessionService;)V
-HPLcom/android/server/media/MediaSessionService$MessageHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/media/MediaSessionService$MessageHandler;->handleMessage(Landroid/os/Message;)V
 HPLcom/android/server/media/MediaSessionService$MessageHandler;->postSessionsChanged(I)V
+HSPLcom/android/server/media/MediaSessionService$MessageHandler;->postSessionsChanged(Lcom/android/server/media/MediaSessionRecordImpl;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$1;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Lcom/android/server/media/MediaSessionService$FullUserRecord;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$2;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Lcom/android/server/media/MediaSessionService$FullUserRecord;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$3;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;ZLjava/lang/String;IIIILjava/lang/String;)V
-PLcom/android/server/media/MediaSessionService$SessionManagerImpl$3;->run()V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl$3;->run()V
 HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl$4;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;)V
 HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Landroid/os/Handler;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->access$4400(Lcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;)I
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->access$4600(Lcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;)I
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->aquireWakeLockLocked()V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->onReceiveResult(ILandroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->onSendFinished(Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->releaseWakeLockLocked()V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$MediaKeyListenerResultReceiver;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Ljava/lang/String;IIZLandroid/view/KeyEvent;Z)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$MediaKeyListenerResultReceiver;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Ljava/lang/String;IIZLandroid/view/KeyEvent;ZLcom/android/server/media/MediaSessionService$1;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$MediaKeyListenerResultReceiver;->dispatchMediaKeyEvent()V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$MediaKeyListenerResultReceiver;->onReceiveResult(ILandroid/os/Bundle;)V
 HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl;-><init>(Lcom/android/server/media/MediaSessionService;)V
-PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->addSessionsListener(Landroid/media/session/IActiveSessionsListener;Landroid/content/ComponentName;I)V
-HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->createSession(Ljava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;I)Landroid/media/session/ISession;
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->access$5400(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;I)Z
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->access$5500(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Ljava/lang/String;IIZLandroid/view/KeyEvent;Z)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->addOnMediaKeyEventSessionChangedListener(Landroid/media/session/IOnMediaKeyEventSessionChangedListener;)V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->addSessionsListener(Landroid/media/session/IActiveSessionsListener;Landroid/content/ComponentName;I)V
+HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->createSession(Ljava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;I)Landroid/media/session/ISession;
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchAdjustVolume(Ljava/lang/String;Ljava/lang/String;III)V
 HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchAdjustVolumeLocked(Ljava/lang/String;Ljava/lang/String;IIZIII)V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchMediaKeyEvent(Ljava/lang/String;ZLandroid/view/KeyEvent;Z)V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchMediaKeyEventLocked(Ljava/lang/String;IIZLandroid/view/KeyEvent;Z)V
 HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchVolumeKeyEvent(Ljava/lang/String;Ljava/lang/String;ZLandroid/view/KeyEvent;IZ)V
-PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchVolumeKeyEventLocked(Ljava/lang/String;Ljava/lang/String;IIZLandroid/view/KeyEvent;IZ)V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchVolumeKeyEventLocked(Ljava/lang/String;Ljava/lang/String;IIZLandroid/view/KeyEvent;IZ)V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchVolumeKeyEventToSessionAsSystemService(Ljava/lang/String;Ljava/lang/String;Landroid/media/session/MediaSession$Token;Landroid/view/KeyEvent;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->getSessions(Landroid/content/ComponentName;I)Ljava/util/List;
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->handleVoiceKeyEventLocked(Ljava/lang/String;IIZLandroid/view/KeyEvent;Z)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->hasMediaControlPermission(II)Z
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->isGlobalPriorityActive()Z
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->isUserSetupComplete()Z
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->isValidLocalStreamType(I)Z
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->isVoiceKey(I)Z
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->registerCallback(Landroid/media/session/ICallback;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->registerRemoteVolumeController(Landroid/media/IRemoteVolumeController;)V
-PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->removeSessionsListener(Landroid/media/session/IActiveSessionsListener;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->removeOnMediaKeyEventSessionChangedListener(Landroid/media/session/IOnMediaKeyEventSessionChangedListener;)V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->removeSessionsListener(Landroid/media/session/IActiveSessionsListener;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->setOnMediaKeyListener(Landroid/media/session/IOnMediaKeyListener;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->setOnVolumeKeyLongPressListener(Landroid/media/session/IOnVolumeKeyLongPressListener;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->startVoiceInput(Z)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->unregisterCallback(Landroid/media/session/ICallback;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->unregisterRemoteVolumeController(Landroid/media/IRemoteVolumeController;)V
-PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->verifySessionsRequest(Landroid/content/ComponentName;III)I
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->verifySessionsRequest(Landroid/content/ComponentName;III)I
 PLcom/android/server/media/MediaSessionService$SessionsListenerRecord;-><init>(Lcom/android/server/media/MediaSessionService;Landroid/media/session/IActiveSessionsListener;Landroid/content/ComponentName;III)V
+PLcom/android/server/media/MediaSessionService$SessionsListenerRecord;->binderDied()V
 HSPLcom/android/server/media/MediaSessionService$SettingsObserver;-><init>(Lcom/android/server/media/MediaSessionService;)V
 HSPLcom/android/server/media/MediaSessionService$SettingsObserver;-><init>(Lcom/android/server/media/MediaSessionService;Lcom/android/server/media/MediaSessionService$1;)V
 HSPLcom/android/server/media/MediaSessionService$SettingsObserver;->access$100(Lcom/android/server/media/MediaSessionService$SettingsObserver;)V
 HSPLcom/android/server/media/MediaSessionService$SettingsObserver;->observe()V
+HSPLcom/android/server/media/MediaSessionService$SettingsObserver;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/media/MediaSessionService;-><clinit>()V
 HSPLcom/android/server/media/MediaSessionService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/media/MediaSessionService;->access$1000(Lcom/android/server/media/MediaSessionService;)Landroid/util/SparseIntArray;
 PLcom/android/server/media/MediaSessionService;->access$1000(Lcom/android/server/media/MediaSessionService;I)Ljava/lang/String;
 PLcom/android/server/media/MediaSessionService;->access$1100(Lcom/android/server/media/MediaSessionService;)Landroid/util/SparseArray;
+PLcom/android/server/media/MediaSessionService;->access$1100(Lcom/android/server/media/MediaSessionService;)Ljava/lang/Object;
+PLcom/android/server/media/MediaSessionService;->access$1100(Lcom/android/server/media/MediaSessionService;I)Ljava/lang/String;
+HSPLcom/android/server/media/MediaSessionService;->access$1200(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionService$MessageHandler;
 PLcom/android/server/media/MediaSessionService;->access$1200(Lcom/android/server/media/MediaSessionService;)Ljava/lang/Object;
+PLcom/android/server/media/MediaSessionService;->access$1300(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionService$FullUserRecord;
 HSPLcom/android/server/media/MediaSessionService;->access$1300(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionService$MessageHandler;
 PLcom/android/server/media/MediaSessionService;->access$1400(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionService$FullUserRecord;
+PLcom/android/server/media/MediaSessionService;->access$1400(Lcom/android/server/media/MediaSessionService;)Z
+PLcom/android/server/media/MediaSessionService;->access$1500(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionRecord;
 PLcom/android/server/media/MediaSessionService;->access$1500(Lcom/android/server/media/MediaSessionService;)Z
+PLcom/android/server/media/MediaSessionService;->access$1600(Lcom/android/server/media/MediaSessionService;)Landroid/content/Context;
 PLcom/android/server/media/MediaSessionService;->access$1600(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionRecord;
 PLcom/android/server/media/MediaSessionService;->access$1700(Lcom/android/server/media/MediaSessionService;)Landroid/content/Context;
 PLcom/android/server/media/MediaSessionService;->access$1900(Lcom/android/server/media/MediaSessionService;)Ljava/util/ArrayList;
-PLcom/android/server/media/MediaSessionService;->access$2200(Lcom/android/server/media/MediaSessionService;Ljava/lang/String;I)V
-PLcom/android/server/media/MediaSessionService;->access$2300(Lcom/android/server/media/MediaSessionService;IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService;->access$2000(Lcom/android/server/media/MediaSessionService;)Ljava/util/ArrayList;
+HSPLcom/android/server/media/MediaSessionService;->access$2100(Lcom/android/server/media/MediaSessionService;)V
+PLcom/android/server/media/MediaSessionService;->access$2200(Lcom/android/server/media/MediaSessionService;)V
+HSPLcom/android/server/media/MediaSessionService;->access$2200(Lcom/android/server/media/MediaSessionService;Ljava/lang/String;I)V
+HSPLcom/android/server/media/MediaSessionService;->access$2300(Lcom/android/server/media/MediaSessionService;IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService;->access$2300(Lcom/android/server/media/MediaSessionService;Ljava/lang/String;I)V
+PLcom/android/server/media/MediaSessionService;->access$2400(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/SessionPolicyProvider;
+PLcom/android/server/media/MediaSessionService;->access$2400(Lcom/android/server/media/MediaSessionService;I)Lcom/android/server/media/MediaSessionService$FullUserRecord;
 PLcom/android/server/media/MediaSessionService;->access$2400(Lcom/android/server/media/MediaSessionService;I)Ljava/util/List;
+PLcom/android/server/media/MediaSessionService;->access$2400(Lcom/android/server/media/MediaSessionService;IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService;->access$2500(Lcom/android/server/media/MediaSessionService;I)Lcom/android/server/media/MediaSessionService$FullUserRecord;
+HPLcom/android/server/media/MediaSessionService;->access$2500(Lcom/android/server/media/MediaSessionService;I)Ljava/util/List;
+PLcom/android/server/media/MediaSessionService;->access$2500(Lcom/android/server/media/MediaSessionService;IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;I)Lcom/android/server/media/MediaSessionRecord;
 PLcom/android/server/media/MediaSessionService;->access$2500(Lcom/android/server/media/MediaSessionService;Landroid/media/session/IActiveSessionsListener;)I
+PLcom/android/server/media/MediaSessionService;->access$2600(Lcom/android/server/media/MediaSessionService;I)Lcom/android/server/media/MediaSessionService$FullUserRecord;
+HPLcom/android/server/media/MediaSessionService;->access$2600(Lcom/android/server/media/MediaSessionService;I)Ljava/util/List;
+PLcom/android/server/media/MediaSessionService;->access$2600(Lcom/android/server/media/MediaSessionService;Landroid/media/session/IActiveSessionsListener;)I
+PLcom/android/server/media/MediaSessionService;->access$2700(Lcom/android/server/media/MediaSessionService;I)Ljava/util/List;
+HPLcom/android/server/media/MediaSessionService;->access$2700(Lcom/android/server/media/MediaSessionService;Landroid/media/session/IActiveSessionsListener;)I
+PLcom/android/server/media/MediaSessionService;->access$2800(Lcom/android/server/media/MediaSessionService;Landroid/media/session/IActiveSessionsListener;)I
 PLcom/android/server/media/MediaSessionService;->access$3000(Lcom/android/server/media/MediaSessionService;I)Lcom/android/server/media/MediaSessionService$FullUserRecord;
+PLcom/android/server/media/MediaSessionService;->access$3000(Lcom/android/server/media/MediaSessionService;Landroid/media/session/MediaSession$Token;)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService;->access$3100(Lcom/android/server/media/MediaSessionService;I)Lcom/android/server/media/MediaSessionService$FullUserRecord;
+PLcom/android/server/media/MediaSessionService;->access$3100(Lcom/android/server/media/MediaSessionService;Landroid/media/session/MediaSession$Token;)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService;->access$3200(Lcom/android/server/media/MediaSessionService;II)Z
+PLcom/android/server/media/MediaSessionService;->access$3200(Lcom/android/server/media/MediaSessionService;Landroid/media/session/MediaSession$Token;)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService;->access$3300(Lcom/android/server/media/MediaSessionService;II)Z
+PLcom/android/server/media/MediaSessionService;->access$3800(Lcom/android/server/media/MediaSessionService;)I
 PLcom/android/server/media/MediaSessionService;->access$3800(Lcom/android/server/media/MediaSessionService;Ljava/lang/String;II)V
 PLcom/android/server/media/MediaSessionService;->access$3900(Lcom/android/server/media/MediaSessionService;)Landroid/util/SparseArray;
-PLcom/android/server/media/MediaSessionService;->access$4000(Lcom/android/server/media/MediaSessionService;Landroid/content/ComponentName;III)V
+PLcom/android/server/media/MediaSessionService;->access$3900(Lcom/android/server/media/MediaSessionService;Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionService;->access$4000(Lcom/android/server/media/MediaSessionService;)Landroid/util/SparseArray;
+HPLcom/android/server/media/MediaSessionService;->access$4000(Lcom/android/server/media/MediaSessionService;Landroid/content/ComponentName;III)V
+PLcom/android/server/media/MediaSessionService;->access$4000(Lcom/android/server/media/MediaSessionService;Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionService;->access$4100(Lcom/android/server/media/MediaSessionService;)Landroid/util/SparseArray;
+PLcom/android/server/media/MediaSessionService;->access$4100(Lcom/android/server/media/MediaSessionService;Landroid/content/ComponentName;III)V
+PLcom/android/server/media/MediaSessionService;->access$4100(Lcom/android/server/media/MediaSessionService;Ljava/lang/String;II)V
 PLcom/android/server/media/MediaSessionService;->access$4200(Lcom/android/server/media/MediaSessionService;)Landroid/media/AudioManagerInternal;
-PLcom/android/server/media/MediaSessionService;->access$5500(Lcom/android/server/media/MediaSessionService;I)V
+PLcom/android/server/media/MediaSessionService;->access$4200(Lcom/android/server/media/MediaSessionService;)Landroid/util/SparseArray;
+HPLcom/android/server/media/MediaSessionService;->access$4200(Lcom/android/server/media/MediaSessionService;Landroid/content/ComponentName;III)V
+PLcom/android/server/media/MediaSessionService;->access$4300(Lcom/android/server/media/MediaSessionService;)Landroid/media/AudioManagerInternal;
+PLcom/android/server/media/MediaSessionService;->access$4300(Lcom/android/server/media/MediaSessionService;Landroid/content/ComponentName;III)V
+PLcom/android/server/media/MediaSessionService;->access$4400(Lcom/android/server/media/MediaSessionService;)Landroid/media/AudioManagerInternal;
+PLcom/android/server/media/MediaSessionService;->access$4500(Lcom/android/server/media/MediaSessionService;)Landroid/media/AudioManagerInternal;
+PLcom/android/server/media/MediaSessionService;->access$4700(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaKeyDispatcher;
+PLcom/android/server/media/MediaSessionService;->access$4900(Lcom/android/server/media/MediaSessionService;)Landroid/app/KeyguardManager;
+PLcom/android/server/media/MediaSessionService;->access$5000(Lcom/android/server/media/MediaSessionService;)Landroid/os/PowerManager$WakeLock;
+PLcom/android/server/media/MediaSessionService;->access$5100(Lcom/android/server/media/MediaSessionService;)Z
+PLcom/android/server/media/MediaSessionService;->access$5200(Lcom/android/server/media/MediaSessionService;)Landroid/os/PowerManager$WakeLock;
+PLcom/android/server/media/MediaSessionService;->access$5300(Lcom/android/server/media/MediaSessionService;)Z
+PLcom/android/server/media/MediaSessionService;->access$5500(Lcom/android/server/media/MediaSessionService;)Z
+HSPLcom/android/server/media/MediaSessionService;->access$5500(Lcom/android/server/media/MediaSessionService;I)V
+PLcom/android/server/media/MediaSessionService;->access$5600(Lcom/android/server/media/MediaSessionService;I)V
+HPLcom/android/server/media/MediaSessionService;->access$5700(Lcom/android/server/media/MediaSessionService;I)V
+HPLcom/android/server/media/MediaSessionService;->access$5900(Lcom/android/server/media/MediaSessionService;I)V
 HSPLcom/android/server/media/MediaSessionService;->access$600(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/AudioPlayerStateMonitor;
 HSPLcom/android/server/media/MediaSessionService;->access$700(Lcom/android/server/media/MediaSessionService;)Landroid/content/ContentResolver;
+HSPLcom/android/server/media/MediaSessionService;->access$700(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/AudioPlayerStateMonitor;
+HSPLcom/android/server/media/MediaSessionService;->access$800(Lcom/android/server/media/MediaSessionService;)Landroid/content/ContentResolver;
+PLcom/android/server/media/MediaSessionService;->access$800(Lcom/android/server/media/MediaSessionService;Lcom/android/server/media/MediaSessionRecordImpl;)V
 PLcom/android/server/media/MediaSessionService;->access$900(Lcom/android/server/media/MediaSessionService;)Landroid/util/SparseIntArray;
-PLcom/android/server/media/MediaSessionService;->createSessionInternal(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService;->access$900(Lcom/android/server/media/MediaSessionService;Lcom/android/server/media/MediaSessionRecordImpl;)V
+HSPLcom/android/server/media/MediaSessionService;->createSessionInternal(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;)Lcom/android/server/media/MediaSessionRecord;
+HPLcom/android/server/media/MediaSessionService;->createSessionInternal(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;I)Lcom/android/server/media/MediaSessionRecord;
 PLcom/android/server/media/MediaSessionService;->createSessionLocked(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;)Lcom/android/server/media/MediaSessionRecord;
 PLcom/android/server/media/MediaSessionService;->destroySession(Lcom/android/server/media/MediaSessionRecord;)V
 HPLcom/android/server/media/MediaSessionService;->destroySessionLocked(Lcom/android/server/media/MediaSessionRecord;)V
+HPLcom/android/server/media/MediaSessionService;->destroySessionLocked(Lcom/android/server/media/MediaSessionRecordImpl;)V
 HPLcom/android/server/media/MediaSessionService;->enforceMediaPermissions(Landroid/content/ComponentName;III)V
-PLcom/android/server/media/MediaSessionService;->enforcePackageName(Ljava/lang/String;I)V
-PLcom/android/server/media/MediaSessionService;->enforcePhoneStatePermission(II)V
+HSPLcom/android/server/media/MediaSessionService;->enforcePackageName(Ljava/lang/String;I)V
+HSPLcom/android/server/media/MediaSessionService;->enforcePhoneStatePermission(II)V
 PLcom/android/server/media/MediaSessionService;->enforceStatusBarServicePermission(Ljava/lang/String;II)V
-PLcom/android/server/media/MediaSessionService;->findIndexOfSessionsListenerLocked(Landroid/media/session/IActiveSessionsListener;)I
-HPLcom/android/server/media/MediaSessionService;->getActiveSessionsLocked(I)Ljava/util/List;
+HPLcom/android/server/media/MediaSessionService;->findIndexOfSessionsListenerLocked(Landroid/media/session/IActiveSessionsListener;)I
+HSPLcom/android/server/media/MediaSessionService;->getActiveSessionsLocked(I)Ljava/util/List;
 HSPLcom/android/server/media/MediaSessionService;->getAudioService()Landroid/media/IAudioService;
 PLcom/android/server/media/MediaSessionService;->getCallingPackageName(I)Ljava/lang/String;
-HPLcom/android/server/media/MediaSessionService;->getFullUserRecordLocked(I)Lcom/android/server/media/MediaSessionService$FullUserRecord;
+HSPLcom/android/server/media/MediaSessionService;->getFullUserRecordLocked(I)Lcom/android/server/media/MediaSessionService$FullUserRecord;
+PLcom/android/server/media/MediaSessionService;->getMediaSessionRecordLocked(Landroid/media/session/MediaSession$Token;)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService;->hasMediaControlPermission(II)Z
 HPLcom/android/server/media/MediaSessionService;->hasStatusBarServicePermission(II)Z
-HPLcom/android/server/media/MediaSessionService;->isGlobalPriorityActiveLocked()Z
+HPLcom/android/server/media/MediaSessionService;->isEnabledNotificationListener(Landroid/content/ComponentName;II)Z
+HSPLcom/android/server/media/MediaSessionService;->isGlobalPriorityActiveLocked()Z
 HPLcom/android/server/media/MediaSessionService;->lambda$onStart$0$MediaSessionService(Landroid/media/AudioPlaybackConfiguration;Z)V
-PLcom/android/server/media/MediaSessionService;->monitor()V
+HPLcom/android/server/media/MediaSessionService;->monitor()V
+PLcom/android/server/media/MediaSessionService;->notifyRemoteVolumeChanged(ILcom/android/server/media/MediaSessionRecord;)V
 PLcom/android/server/media/MediaSessionService;->onMediaButtonReceiverChanged(Lcom/android/server/media/MediaSessionRecord;)V
+HPLcom/android/server/media/MediaSessionService;->onMediaButtonReceiverChanged(Lcom/android/server/media/MediaSessionRecordImpl;)V
+HPLcom/android/server/media/MediaSessionService;->onSessionActiveStateChanged(Lcom/android/server/media/MediaSessionRecordImpl;)V
+HPLcom/android/server/media/MediaSessionService;->onSessionDied(Lcom/android/server/media/MediaSessionRecordImpl;)V
+HPLcom/android/server/media/MediaSessionService;->onSessionPlaybackStateChanged(Lcom/android/server/media/MediaSessionRecordImpl;Z)V
+HPLcom/android/server/media/MediaSessionService;->onSessionPlaybackTypeChanged(Lcom/android/server/media/MediaSessionRecord;)V
 HPLcom/android/server/media/MediaSessionService;->onSessionPlaystateChanged(Lcom/android/server/media/MediaSessionRecord;II)V
 HSPLcom/android/server/media/MediaSessionService;->onStart()V
-PLcom/android/server/media/MediaSessionService;->onStartUser(I)V
-HPLcom/android/server/media/MediaSessionService;->pushRemoteVolumeUpdateLocked(I)V
+HSPLcom/android/server/media/MediaSessionService;->onStartUser(I)V
+PLcom/android/server/media/MediaSessionService;->onStopUser(I)V
+HSPLcom/android/server/media/MediaSessionService;->pushRemoteVolumeUpdateLocked(I)V
+HSPLcom/android/server/media/MediaSessionService;->pushSession1Changed(I)V
 HPLcom/android/server/media/MediaSessionService;->pushSessionsChanged(I)V
 PLcom/android/server/media/MediaSessionService;->sessionDied(Lcom/android/server/media/MediaSessionRecord;)V
-PLcom/android/server/media/MediaSessionService;->setGlobalPrioritySession(Lcom/android/server/media/MediaSessionRecord;)V
+HSPLcom/android/server/media/MediaSessionService;->setGlobalPrioritySession(Lcom/android/server/media/MediaSessionRecord;)V
+HSPLcom/android/server/media/MediaSessionService;->updateActiveSessionListeners()V
 HPLcom/android/server/media/MediaSessionService;->updateSession(Lcom/android/server/media/MediaSessionRecord;)V
 HSPLcom/android/server/media/MediaSessionService;->updateUser()V
 HSPLcom/android/server/media/MediaSessionStack;-><clinit>()V
 HSPLcom/android/server/media/MediaSessionStack;-><init>(Lcom/android/server/media/AudioPlayerStateMonitor;Lcom/android/server/media/MediaSessionStack$OnMediaButtonSessionChangedListener;)V
 PLcom/android/server/media/MediaSessionStack;->addSession(Lcom/android/server/media/MediaSessionRecord;)V
-PLcom/android/server/media/MediaSessionStack;->clearCache(I)V
+HSPLcom/android/server/media/MediaSessionStack;->addSession(Lcom/android/server/media/MediaSessionRecordImpl;)V
+HSPLcom/android/server/media/MediaSessionStack;->clearCache(I)V
 PLcom/android/server/media/MediaSessionStack;->contains(Lcom/android/server/media/MediaSessionRecord;)Z
+HSPLcom/android/server/media/MediaSessionStack;->contains(Lcom/android/server/media/MediaSessionRecordImpl;)Z
+PLcom/android/server/media/MediaSessionStack;->containsState(I[I)Z
 PLcom/android/server/media/MediaSessionStack;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/media/MediaSessionStack;->findMediaButtonSession(I)Lcom/android/server/media/MediaSessionRecord;
+HPLcom/android/server/media/MediaSessionStack;->findMediaButtonSession(I)Lcom/android/server/media/MediaSessionRecordImpl;
 PLcom/android/server/media/MediaSessionStack;->getActiveSessions(I)Ljava/util/ArrayList;
+HSPLcom/android/server/media/MediaSessionStack;->getActiveSessions(I)Ljava/util/List;
 PLcom/android/server/media/MediaSessionStack;->getDefaultRemoteSession(I)Lcom/android/server/media/MediaSessionRecord;
+HSPLcom/android/server/media/MediaSessionStack;->getDefaultRemoteSession(I)Lcom/android/server/media/MediaSessionRecordImpl;
 PLcom/android/server/media/MediaSessionStack;->getDefaultVolumeSession()Lcom/android/server/media/MediaSessionRecord;
+HPLcom/android/server/media/MediaSessionStack;->getDefaultVolumeSession()Lcom/android/server/media/MediaSessionRecordImpl;
 PLcom/android/server/media/MediaSessionStack;->getMediaButtonSession()Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionStack;->getMediaButtonSession()Lcom/android/server/media/MediaSessionRecordImpl;
+HPLcom/android/server/media/MediaSessionStack;->getMediaSessionRecord(Landroid/media/session/MediaSession$Token;)Lcom/android/server/media/MediaSessionRecord;
 PLcom/android/server/media/MediaSessionStack;->getPriorityList(ZI)Ljava/util/ArrayList;
+HSPLcom/android/server/media/MediaSessionStack;->getPriorityList(ZI)Ljava/util/List;
+HPLcom/android/server/media/MediaSessionStack;->onPlaybackStateChanged(Lcom/android/server/media/MediaSessionRecordImpl;Z)V
 PLcom/android/server/media/MediaSessionStack;->onPlaystateChanged(Lcom/android/server/media/MediaSessionRecord;II)V
+PLcom/android/server/media/MediaSessionStack;->onSessionActiveStateChanged(Lcom/android/server/media/MediaSessionRecordImpl;)V
 PLcom/android/server/media/MediaSessionStack;->onSessionStateChange(Lcom/android/server/media/MediaSessionRecord;)V
 PLcom/android/server/media/MediaSessionStack;->removeSession(Lcom/android/server/media/MediaSessionRecord;)V
-PLcom/android/server/media/MediaSessionStack;->updateMediaButtonSessionIfNeeded()V
+HSPLcom/android/server/media/MediaSessionStack;->removeSession(Lcom/android/server/media/MediaSessionRecordImpl;)V
+PLcom/android/server/media/MediaSessionStack;->shouldUpdatePriority(II)Z
+PLcom/android/server/media/MediaSessionStack;->updateMediaButtonSession(Lcom/android/server/media/MediaSessionRecordImpl;)V
+HSPLcom/android/server/media/MediaSessionStack;->updateMediaButtonSessionIfNeeded()V
 PLcom/android/server/media/RemoteDisplayProviderProxy$1;-><init>(Lcom/android/server/media/RemoteDisplayProviderProxy;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy$1;->run()V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection$1;-><init>(Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection$1;->run()V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection$3;-><init>(Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;Landroid/media/RemoteDisplayState;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection$3;->run()V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection;-><init>(Lcom/android/server/media/RemoteDisplayProviderProxy;Landroid/media/IRemoteDisplayProvider;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection;->connect(Ljava/lang/String;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection;->disconnect(Ljava/lang/String;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection;->dispose()V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection;->postStateChanged(Landroid/media/RemoteDisplayState;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection;->register()Z
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection;->setDiscoveryMode(I)V
+PLcom/android/server/media/RemoteDisplayProviderProxy$ProviderCallback;-><init>(Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy$ProviderCallback;->dispose()V
+PLcom/android/server/media/RemoteDisplayProviderProxy$ProviderCallback;->onStateChanged(Landroid/media/RemoteDisplayState;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy;-><clinit>()V
 PLcom/android/server/media/RemoteDisplayProviderProxy;-><init>(Landroid/content/Context;Landroid/content/ComponentName;I)V
-PLcom/android/server/media/RemoteDisplayProviderProxy;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->access$002(Lcom/android/server/media/RemoteDisplayProviderProxy;Z)Z
+PLcom/android/server/media/RemoteDisplayProviderProxy;->access$100(Lcom/android/server/media/RemoteDisplayProviderProxy;)Lcom/android/server/media/RemoteDisplayProviderProxy$Callback;
+PLcom/android/server/media/RemoteDisplayProviderProxy;->access$200(Lcom/android/server/media/RemoteDisplayProviderProxy;)Landroid/media/RemoteDisplayState;
+PLcom/android/server/media/RemoteDisplayProviderProxy;->access$300(Lcom/android/server/media/RemoteDisplayProviderProxy;Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->access$400(Lcom/android/server/media/RemoteDisplayProviderProxy;)Landroid/os/Handler;
+PLcom/android/server/media/RemoteDisplayProviderProxy;->access$600(Lcom/android/server/media/RemoteDisplayProviderProxy;Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;Landroid/media/RemoteDisplayState;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->bind()V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->disconnect()V
+HPLcom/android/server/media/RemoteDisplayProviderProxy;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->getDisplayState()Landroid/media/RemoteDisplayState;
 PLcom/android/server/media/RemoteDisplayProviderProxy;->getFlattenedComponentName()Ljava/lang/String;
 HPLcom/android/server/media/RemoteDisplayProviderProxy;->hasComponentName(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/media/RemoteDisplayProviderProxy;->onConnectionReady(Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->onDisplayStateChanged(Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;Landroid/media/RemoteDisplayState;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->rebindIfDisconnected()V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->setCallback(Lcom/android/server/media/RemoteDisplayProviderProxy$Callback;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->setDiscoveryMode(I)V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->setDisplayState(Landroid/media/RemoteDisplayState;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->setSelectedDisplay(Ljava/lang/String;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->shouldBind()Z
-PLcom/android/server/media/RemoteDisplayProviderProxy;->start()V
+HPLcom/android/server/media/RemoteDisplayProviderProxy;->start()V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->unbind()V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->updateBinding()V
 HSPLcom/android/server/media/RemoteDisplayProviderWatcher$1;-><init>(Lcom/android/server/media/RemoteDisplayProviderWatcher;)V
-PLcom/android/server/media/RemoteDisplayProviderWatcher$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/media/RemoteDisplayProviderWatcher$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/media/RemoteDisplayProviderWatcher$2;-><init>(Lcom/android/server/media/RemoteDisplayProviderWatcher;)V
-PLcom/android/server/media/RemoteDisplayProviderWatcher$2;->run()V
+HSPLcom/android/server/media/RemoteDisplayProviderWatcher$2;->run()V
 HSPLcom/android/server/media/RemoteDisplayProviderWatcher;-><clinit>()V
 HSPLcom/android/server/media/RemoteDisplayProviderWatcher;-><init>(Landroid/content/Context;Lcom/android/server/media/RemoteDisplayProviderWatcher$Callback;Landroid/os/Handler;I)V
-PLcom/android/server/media/RemoteDisplayProviderWatcher;->access$100(Lcom/android/server/media/RemoteDisplayProviderWatcher;)V
+PLcom/android/server/media/RemoteDisplayProviderWatcher;->access$000()Z
+HSPLcom/android/server/media/RemoteDisplayProviderWatcher;->access$100(Lcom/android/server/media/RemoteDisplayProviderWatcher;)V
 PLcom/android/server/media/RemoteDisplayProviderWatcher;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/media/RemoteDisplayProviderWatcher;->scanPackages()V
-PLcom/android/server/media/RemoteDisplayProviderWatcher;->start()V
-PLcom/android/server/media/RemoteDisplayProviderWatcher;->verifyServiceTrusted(Landroid/content/pm/ServiceInfo;)Z
+HPLcom/android/server/media/RemoteDisplayProviderWatcher;->findProvider(Ljava/lang/String;Ljava/lang/String;)I
+HSPLcom/android/server/media/RemoteDisplayProviderWatcher;->scanPackages()V
+HSPLcom/android/server/media/RemoteDisplayProviderWatcher;->start()V
+HPLcom/android/server/media/RemoteDisplayProviderWatcher;->verifyServiceTrusted(Landroid/content/pm/ServiceInfo;)Z
+PLcom/android/server/media/SystemMediaRoute2Provider$1$1;-><init>(Lcom/android/server/media/SystemMediaRoute2Provider$1;Landroid/media/AudioRoutesInfo;)V
+PLcom/android/server/media/SystemMediaRoute2Provider$1$1;->run()V
+PLcom/android/server/media/SystemMediaRoute2Provider$1;-><init>(Lcom/android/server/media/SystemMediaRoute2Provider;)V
+PLcom/android/server/media/SystemMediaRoute2Provider$1;->dispatchAudioRoutesChanged(Landroid/media/AudioRoutesInfo;)V
+PLcom/android/server/media/SystemMediaRoute2Provider;-><clinit>()V
+PLcom/android/server/media/SystemMediaRoute2Provider;-><init>(Landroid/content/Context;Lcom/android/server/media/MediaRoute2Provider$Callback;)V
+PLcom/android/server/media/SystemMediaRoute2Provider;->access$000(Lcom/android/server/media/SystemMediaRoute2Provider;)Landroid/os/Handler;
+PLcom/android/server/media/SystemMediaRoute2Provider;->initializeRoutes()V
+PLcom/android/server/media/SystemMediaRoute2Provider;->publishRoutes()V
+PLcom/android/server/media/SystemMediaRoute2Provider;->updateAudioRoutes(Landroid/media/AudioRoutesInfo;)V
 HSPLcom/android/server/media/projection/MediaProjectionManagerService$1;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;)V
-PLcom/android/server/media/projection/MediaProjectionManagerService$1;->onForegroundActivitiesChanged(IIZ)V
-PLcom/android/server/media/projection/MediaProjectionManagerService$1;->onForegroundServicesChanged(III)V
+HSPLcom/android/server/media/projection/MediaProjectionManagerService$1;->onForegroundActivitiesChanged(IIZ)V
+HPLcom/android/server/media/projection/MediaProjectionManagerService$1;->onForegroundServicesChanged(III)V
 HSPLcom/android/server/media/projection/MediaProjectionManagerService$1;->onProcessDied(II)V
 PLcom/android/server/media/projection/MediaProjectionManagerService$2;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$2;->binderDied()V
 HSPLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;)V
 HSPLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;Lcom/android/server/media/projection/MediaProjectionManagerService$1;)V
 PLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;->addCallback(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;->checkPermission(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;->createProjection(ILjava/lang/String;IZ)Landroid/media/projection/IMediaProjection;
 PLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;->getActiveProjectionInfo()Landroid/media/projection/MediaProjectionInfo;
+PLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;->hasProjectionPermission(ILjava/lang/String;)Z
+PLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;->isValidMediaProjection(Landroid/media/projection/IMediaProjection;)Z
 HSPLcom/android/server/media/projection/MediaProjectionManagerService$CallbackDelegate;-><init>()V
+PLcom/android/server/media/projection/MediaProjectionManagerService$CallbackDelegate;->add(Landroid/media/projection/IMediaProjectionCallback;)V
 PLcom/android/server/media/projection/MediaProjectionManagerService$CallbackDelegate;->add(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$CallbackDelegate;->dispatchStart(Lcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$CallbackDelegate;->dispatchStop(Lcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$CallbackDelegate;->remove(Landroid/media/projection/IMediaProjectionCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$CallbackDelegate;->remove(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$ClientStopCallback;-><init>(Landroid/media/projection/IMediaProjectionCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$ClientStopCallback;->run()V
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection$1;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;Landroid/media/projection/IMediaProjectionCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;IILjava/lang/String;IZ)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->applyVirtualDisplayFlags(I)I
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->canProjectSecureVideo()Z
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->canProjectVideo()Z
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->getProjectionInfo()Landroid/media/projection/MediaProjectionInfo;
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->registerCallback(Landroid/media/projection/IMediaProjectionCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->requiresForegroundService()Z
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->start(Landroid/media/projection/IMediaProjectionCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->stop()V
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->unregisterCallback(Landroid/media/projection/IMediaProjectionCallback;)V
 HSPLcom/android/server/media/projection/MediaProjectionManagerService$MediaRouterCallback;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;)V
 HSPLcom/android/server/media/projection/MediaProjectionManagerService$MediaRouterCallback;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;Lcom/android/server/media/projection/MediaProjectionManagerService$1;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$WatcherStartCallback;-><init>(Landroid/media/projection/MediaProjectionInfo;Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$WatcherStartCallback;->run()V
+PLcom/android/server/media/projection/MediaProjectionManagerService$WatcherStopCallback;-><init>(Landroid/media/projection/MediaProjectionInfo;Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$WatcherStopCallback;->run()V
 HSPLcom/android/server/media/projection/MediaProjectionManagerService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/media/projection/MediaProjectionManagerService;->access$1000(Lcom/android/server/media/projection/MediaProjectionManagerService;Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->access$1100(Lcom/android/server/media/projection/MediaProjectionManagerService;Ljava/io/PrintWriter;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->access$1200(Lcom/android/server/media/projection/MediaProjectionManagerService;)Ljava/lang/Object;
+PLcom/android/server/media/projection/MediaProjectionManagerService;->access$1400(Lcom/android/server/media/projection/MediaProjectionManagerService;)Lcom/android/server/media/projection/MediaProjectionManagerService$CallbackDelegate;
+PLcom/android/server/media/projection/MediaProjectionManagerService;->access$1500(Lcom/android/server/media/projection/MediaProjectionManagerService;Lcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->access$1600(Lcom/android/server/media/projection/MediaProjectionManagerService;Lcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;)V
 PLcom/android/server/media/projection/MediaProjectionManagerService;->access$200(Lcom/android/server/media/projection/MediaProjectionManagerService;III)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->access$300(Lcom/android/server/media/projection/MediaProjectionManagerService;Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->access$400(Lcom/android/server/media/projection/MediaProjectionManagerService;)Landroid/app/AppOpsManager;
 PLcom/android/server/media/projection/MediaProjectionManagerService;->access$500(Lcom/android/server/media/projection/MediaProjectionManagerService;)Landroid/content/Context;
+PLcom/android/server/media/projection/MediaProjectionManagerService;->access$600(Lcom/android/server/media/projection/MediaProjectionManagerService;)Landroid/content/pm/PackageManager;
+PLcom/android/server/media/projection/MediaProjectionManagerService;->access$700(Lcom/android/server/media/projection/MediaProjectionManagerService;Landroid/os/IBinder;)Z
 PLcom/android/server/media/projection/MediaProjectionManagerService;->access$800(Lcom/android/server/media/projection/MediaProjectionManagerService;)Landroid/media/projection/MediaProjectionInfo;
 PLcom/android/server/media/projection/MediaProjectionManagerService;->addCallback(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->dispatchStart(Lcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->dispatchStop(Lcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;)V
 PLcom/android/server/media/projection/MediaProjectionManagerService;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/media/projection/MediaProjectionManagerService;->getActiveProjectionInfo()Landroid/media/projection/MediaProjectionInfo;
-PLcom/android/server/media/projection/MediaProjectionManagerService;->handleForegroundServicesChanged(III)V
+HPLcom/android/server/media/projection/MediaProjectionManagerService;->handleForegroundServicesChanged(III)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->isValidMediaProjection(Landroid/os/IBinder;)Z
 PLcom/android/server/media/projection/MediaProjectionManagerService;->linkDeathRecipientLocked(Landroid/media/projection/IMediaProjectionWatcherCallback;Landroid/os/IBinder$DeathRecipient;)V
-PLcom/android/server/media/projection/MediaProjectionManagerService;->monitor()V
+HPLcom/android/server/media/projection/MediaProjectionManagerService;->monitor()V
 HSPLcom/android/server/media/projection/MediaProjectionManagerService;->onStart()V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->removeCallback(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->startProjectionLocked(Lcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->stopProjectionLocked(Lcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->unlinkDeathRecipientLocked(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
 HSPLcom/android/server/midi/MidiService$1;-><init>(Lcom/android/server/midi/MidiService;)V
 PLcom/android/server/midi/MidiService$1;->onPackageAdded(Ljava/lang/String;I)V
-PLcom/android/server/midi/MidiService$1;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/midi/MidiService$1;->onPackageModified(Ljava/lang/String;)V
+PLcom/android/server/midi/MidiService$1;->onPackageRemoved(Ljava/lang/String;I)V
+PLcom/android/server/midi/MidiService$Device;-><init>(Lcom/android/server/midi/MidiService;Landroid/media/midi/IMidiDeviceServer;Landroid/media/midi/MidiDeviceInfo;Landroid/content/pm/ServiceInfo;I)V
+PLcom/android/server/midi/MidiService$Device;->getPackageName()Ljava/lang/String;
+PLcom/android/server/midi/MidiService$Device;->setDeviceServer(Landroid/media/midi/IMidiDeviceServer;)V
 HSPLcom/android/server/midi/MidiService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/midi/MidiService$Lifecycle;->onStart()V
 PLcom/android/server/midi/MidiService$Lifecycle;->onUnlockUser(I)V
 HSPLcom/android/server/midi/MidiService;-><clinit>()V
 HSPLcom/android/server/midi/MidiService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/midi/MidiService;->access$000(Lcom/android/server/midi/MidiService;)V
+HPLcom/android/server/midi/MidiService;->access$100(Lcom/android/server/midi/MidiService;Ljava/lang/String;)V
+PLcom/android/server/midi/MidiService;->access$200(Lcom/android/server/midi/MidiService;Ljava/lang/String;)V
+PLcom/android/server/midi/MidiService;->addDeviceLocked(III[Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/media/midi/IMidiDeviceServer;Landroid/content/pm/ServiceInfo;ZI)Landroid/media/midi/MidiDeviceInfo;
 HPLcom/android/server/midi/MidiService;->addPackageDeviceServer(Landroid/content/pm/ServiceInfo;)V
 HPLcom/android/server/midi/MidiService;->addPackageDeviceServers(Ljava/lang/String;)V
 PLcom/android/server/midi/MidiService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/midi/MidiService;->onUnlockUser()V
-PLcom/android/server/midi/MidiService;->removePackageDeviceServers(Ljava/lang/String;)V
+HPLcom/android/server/midi/MidiService;->removePackageDeviceServers(Ljava/lang/String;)V
 HSPLcom/android/server/net/-$$Lambda$NetworkPolicyManagerService$HDTUqowtgL-W_V0Kq6psXLWC9ws;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;Ljava/util/concurrent/CountDownLatch;)V
 HSPLcom/android/server/net/-$$Lambda$NetworkPolicyManagerService$HDTUqowtgL-W_V0Kq6psXLWC9ws;->run()V
+HSPLcom/android/server/net/-$$Lambda$NetworkStatsService$KVH4Y9nH53_gEfrhunDFp_O6ExY;-><init>(Lcom/android/server/net/NetworkStatsService;)V
+HPLcom/android/server/net/-$$Lambda$NetworkStatsService$KVH4Y9nH53_gEfrhunDFp_O6ExY;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/net/-$$Lambda$NetworkStatsService$NetworkStatsManagerInternalImpl$5TwpV7cRVx_8Ch3sTJ1XxcGYaFo;-><init>(Ljava/lang/String;J)V
+HPLcom/android/server/net/-$$Lambda$NetworkStatsService$NetworkStatsManagerInternalImpl$5TwpV7cRVx_8Ch3sTJ1XxcGYaFo;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/net/-$$Lambda$NetworkStatsService$rLCnfQluyJtbXZ2vSn6SQAdNPMc;-><init>(Landroid/net/NetworkStats;I)V
+HPLcom/android/server/net/-$$Lambda$NetworkStatsService$rLCnfQluyJtbXZ2vSn6SQAdNPMc;->accept(Ljava/lang/Object;)V
+PLcom/android/server/net/-$$Lambda$NetworkStatsService$xfTbcb80CcmFJlvul1xYQmewxlg;-><clinit>()V
+PLcom/android/server/net/-$$Lambda$NetworkStatsService$xfTbcb80CcmFJlvul1xYQmewxlg;-><init>()V
+HPLcom/android/server/net/-$$Lambda$NetworkStatsService$xfTbcb80CcmFJlvul1xYQmewxlg;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/net/DelayedDiskWrite;-><init>()V
 HSPLcom/android/server/net/IpConfigStore;-><init>()V
 HSPLcom/android/server/net/IpConfigStore;-><init>(Lcom/android/server/net/DelayedDiskWrite;)V
 HSPLcom/android/server/net/IpConfigStore;->loge(Ljava/lang/String;)V
 HSPLcom/android/server/net/IpConfigStore;->readIpConfigurations(Ljava/lang/String;)Landroid/util/ArrayMap;
 HSPLcom/android/server/net/LockdownVpnTracker;->isEnabled()Z
-PLcom/android/server/net/NetworkIdentitySet;-><init>()V
+HPLcom/android/server/net/NetworkIdentitySet;-><init>()V
 HSPLcom/android/server/net/NetworkIdentitySet;-><init>(Ljava/io/DataInputStream;)V
 HPLcom/android/server/net/NetworkIdentitySet;->areAllMembersOnDefaultNetwork()Z
 HPLcom/android/server/net/NetworkIdentitySet;->compareTo(Lcom/android/server/net/NetworkIdentitySet;)I
@@ -11744,176 +19769,282 @@
 HPLcom/android/server/net/NetworkIdentitySet;->isAnyMemberMetered()Z
 HPLcom/android/server/net/NetworkIdentitySet;->isAnyMemberRoaming()Z
 HSPLcom/android/server/net/NetworkIdentitySet;->readOptionalString(Ljava/io/DataInputStream;)Ljava/lang/String;
+HPLcom/android/server/net/NetworkIdentitySet;->writeOptionalString(Ljava/io/DataOutputStream;Ljava/lang/String;)V
 HPLcom/android/server/net/NetworkIdentitySet;->writeToStream(Ljava/io/DataOutputStream;)V
 HSPLcom/android/server/net/NetworkPolicyLogger$Data;-><init>()V
 HSPLcom/android/server/net/NetworkPolicyLogger$Data;->reset()V
 HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;-><clinit>()V
 HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;-><init>(I)V
-PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->appIdleStateChanged(IZ)V
-PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->appIdleWlChanged(IZ)V
+HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->appIdleStateChanged(IZ)V
+HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->appIdleWlChanged(IZ)V
+HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->deviceIdleModeEnabled(Z)V
 HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->event(Ljava/lang/String;)V
 HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->firewallChainEnabled(IZ)V
-PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->getContent(Lcom/android/server/net/NetworkPolicyLogger$Data;)Ljava/lang/String;
-PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->meterednessChanged(IZ)V
+HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->formatDate(J)Ljava/lang/String;
+HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->getContent(Lcom/android/server/net/NetworkPolicyLogger$Data;)Ljava/lang/String;
+HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->meterednessChanged(IZ)V
 HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->networkBlocked(II)V
-PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->reverseDump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->tempPowerSaveWlChanged(IZ)V
-PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->uidFirewallRuleChanged(III)V
-PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->uidStateChanged(IIJ)V
+PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->restrictBackgroundChanged(ZZ)V
+HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->reverseDump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->tempPowerSaveWlChanged(IZ)V
+HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->uidFirewallRuleChanged(III)V
+PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->uidPolicyChanged(III)V
+HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->uidStateChanged(IIJ)V
+PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->userRemoved(I)V
 HSPLcom/android/server/net/NetworkPolicyLogger;-><clinit>()V
 HSPLcom/android/server/net/NetworkPolicyLogger;-><init>()V
-PLcom/android/server/net/NetworkPolicyLogger;->appIdleStateChanged(IZ)V
+PLcom/android/server/net/NetworkPolicyLogger;->access$000(I)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->access$1000(III)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->access$1100(IZ)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->access$200(IZ)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->access$500(Z)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->access$600(IZ)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->access$700(IZ)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->access$900(IZ)Ljava/lang/String;
+HSPLcom/android/server/net/NetworkPolicyLogger;->appIdleStateChanged(IZ)V
 HPLcom/android/server/net/NetworkPolicyLogger;->appIdleWlChanged(IZ)V
-PLcom/android/server/net/NetworkPolicyLogger;->deviceIdleModeEnabled(Z)V
+HPLcom/android/server/net/NetworkPolicyLogger;->deviceIdleModeEnabled(Z)V
 PLcom/android/server/net/NetworkPolicyLogger;->dumpLogs(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/net/NetworkPolicyLogger;->firewallChainEnabled(IZ)V
 HSPLcom/android/server/net/NetworkPolicyLogger;->firewallRulesChanged(I[I[I)V
-PLcom/android/server/net/NetworkPolicyLogger;->getBlockedReason(I)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->getAppIdleChangedLog(IZ)Ljava/lang/String;
+HPLcom/android/server/net/NetworkPolicyLogger;->getAppIdleWlChangedLog(IZ)Ljava/lang/String;
+HPLcom/android/server/net/NetworkPolicyLogger;->getBlockedReason(I)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->getDeviceIdleModeEnabled(Z)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->getFirewallChainEnabledLog(IZ)Ljava/lang/String;
 HSPLcom/android/server/net/NetworkPolicyLogger;->getFirewallChainName(I)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->getFirewallRuleName(I)Ljava/lang/String;
+HPLcom/android/server/net/NetworkPolicyLogger;->getMeterednessChangedLog(IZ)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->getTempPowerSaveWlChangedLog(IZ)Ljava/lang/String;
+HPLcom/android/server/net/NetworkPolicyLogger;->getUidFirewallRuleChangedLog(III)Ljava/lang/String;
 HSPLcom/android/server/net/NetworkPolicyLogger;->meteredRestrictedPkgsChanged(Ljava/util/Set;)V
-PLcom/android/server/net/NetworkPolicyLogger;->meterednessChanged(IZ)V
+HPLcom/android/server/net/NetworkPolicyLogger;->meterednessChanged(IZ)V
 HPLcom/android/server/net/NetworkPolicyLogger;->networkBlocked(II)V
-PLcom/android/server/net/NetworkPolicyLogger;->tempPowerSaveWlChanged(IZ)V
-HPLcom/android/server/net/NetworkPolicyLogger;->uidFirewallRuleChanged(III)V
-HPLcom/android/server/net/NetworkPolicyLogger;->uidStateChanged(IIJ)V
+PLcom/android/server/net/NetworkPolicyLogger;->removingUserState(I)V
+PLcom/android/server/net/NetworkPolicyLogger;->restrictBackgroundChanged(ZZ)V
+HPLcom/android/server/net/NetworkPolicyLogger;->tempPowerSaveWlChanged(IZ)V
+HSPLcom/android/server/net/NetworkPolicyLogger;->uidFirewallRuleChanged(III)V
+PLcom/android/server/net/NetworkPolicyLogger;->uidPolicyChanged(III)V
+HSPLcom/android/server/net/NetworkPolicyLogger;->uidStateChanged(IIJ)V
 HSPLcom/android/server/net/NetworkPolicyManagerInternal;-><init>()V
+HPLcom/android/server/net/NetworkPolicyManagerInternal;->isUidNetworkingBlocked(IIZZ)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService$10;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$11;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$11;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$12;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
 PLcom/android/server/net/NetworkPolicyManagerService$12;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$13;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
-PLcom/android/server/net/NetworkPolicyManagerService$13;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
+HPLcom/android/server/net/NetworkPolicyManagerService$13;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$14;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
-PLcom/android/server/net/NetworkPolicyManagerService$14;->limitReached(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/net/NetworkPolicyManagerService$14;->limitReached(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$15;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
-PLcom/android/server/net/NetworkPolicyManagerService$15;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/net/NetworkPolicyManagerService$15;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$16;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
 PLcom/android/server/net/NetworkPolicyManagerService$16;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$17;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$17;->handleMessage(Landroid/os/Message;)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService$18;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
-HPLcom/android/server/net/NetworkPolicyManagerService$18;->handleMessage(Landroid/os/Message;)Z
+HSPLcom/android/server/net/NetworkPolicyManagerService$18;->handleMessage(Landroid/os/Message;)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService$1;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$1;->getServiceType()I
+PLcom/android/server/net/NetworkPolicyManagerService$1;->onLowPowerModeChanged(Landroid/os/PowerSaveState;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$2;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$2;->getServiceType()I
+PLcom/android/server/net/NetworkPolicyManagerService$2;->onLowPowerModeChanged(Landroid/os/PowerSaveState;)V
+HSPLcom/android/server/net/NetworkPolicyManagerService$3;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$3;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/os/Looper;)V
 PLcom/android/server/net/NetworkPolicyManagerService$3;->onSubscriptionsChanged()V
 HSPLcom/android/server/net/NetworkPolicyManagerService$4;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
-PLcom/android/server/net/NetworkPolicyManagerService$4;->onUidGone(IZ)V
-HPLcom/android/server/net/NetworkPolicyManagerService$4;->onUidStateChanged(IIJI)V
+HSPLcom/android/server/net/NetworkPolicyManagerService$4;->onUidGone(IZ)V
+HSPLcom/android/server/net/NetworkPolicyManagerService$4;->onUidStateChanged(IIJI)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$5;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$6;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
-PLcom/android/server/net/NetworkPolicyManagerService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/net/NetworkPolicyManagerService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$7;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$7;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$8;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$8;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$9;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
-PLcom/android/server/net/NetworkPolicyManagerService$9;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/net/NetworkPolicyManagerService$9;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService$1;)V
-HPLcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
+HSPLcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService$1;)V
+HPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->getSubscriptionOpportunisticQuota(Landroid/net/Network;I)J
+HPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->getSubscriptionPlan(Landroid/net/NetworkTemplate;)Landroid/telephony/SubscriptionPlan;
 HPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->isUidNetworkingBlocked(ILjava/lang/String;)Z
-PLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->isUidRestrictedOnMeteredNetworks(I)Z
+HPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->isUidRestrictedOnMeteredNetworks(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->onAdminDataAvailable()V
-PLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->onTempPowerSaveWhitelistChange(IZ)V
-PLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->setAppIdleWhitelist(IZ)V
+HPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->onTempPowerSaveWhitelistChange(IZ)V
+HPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->setAppIdleWhitelist(IZ)V
+PLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->setMeteredRestrictedPackages(Ljava/util/Set;I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->setMeteredRestrictedPackagesAsync(Ljava/util/Set;I)V
+HPLcom/android/server/net/NetworkPolicyManagerService$NotificationId;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/NetworkPolicy;I)V
+HPLcom/android/server/net/NetworkPolicyManagerService$NotificationId;->buildNotificationTag(Landroid/net/NetworkPolicy;I)Ljava/lang/String;
+HPLcom/android/server/net/NetworkPolicyManagerService$NotificationId;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/net/NetworkPolicyManagerService$NotificationId;->getId()I
+PLcom/android/server/net/NetworkPolicyManagerService$NotificationId;->getTag()Ljava/lang/String;
+HPLcom/android/server/net/NetworkPolicyManagerService$NotificationId;->hashCode()I
 HSPLcom/android/server/net/NetworkPolicyManagerService;-><clinit>()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;-><init>(Landroid/content/Context;Landroid/app/IActivityManager;Landroid/os/INetworkManagementService;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;-><init>(Landroid/content/Context;Landroid/app/IActivityManager;Landroid/os/INetworkManagementService;Landroid/content/pm/IPackageManager;Ljava/time/Clock;Ljava/io/File;Z)V
+PLcom/android/server/net/NetworkPolicyManagerService;->access$100()Z
+PLcom/android/server/net/NetworkPolicyManagerService;->access$1000(Lcom/android/server/net/NetworkPolicyManagerService;Z)V
 PLcom/android/server/net/NetworkPolicyManagerService;->access$1100(Lcom/android/server/net/NetworkPolicyManagerService;)V
-PLcom/android/server/net/NetworkPolicyManagerService;->access$1200(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/content/Context;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->access$1200(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/content/Context;
 PLcom/android/server/net/NetworkPolicyManagerService;->access$1300(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseBooleanArray;
-PLcom/android/server/net/NetworkPolicyManagerService;->access$1400(Landroid/util/SparseBooleanArray;ZLandroid/net/Network;)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->access$1400(Landroid/util/SparseBooleanArray;ZLandroid/net/Network;)Z
 PLcom/android/server/net/NetworkPolicyManagerService;->access$1500(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseBooleanArray;
-PLcom/android/server/net/NetworkPolicyManagerService;->access$1600(Lcom/android/server/net/NetworkPolicyManagerService;)Lcom/android/server/net/NetworkPolicyLogger;
-PLcom/android/server/net/NetworkPolicyManagerService;->access$2000(Lcom/android/server/net/NetworkPolicyManagerService;I)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->access$1600(Lcom/android/server/net/NetworkPolicyManagerService;)Lcom/android/server/net/NetworkPolicyLogger;
+PLcom/android/server/net/NetworkPolicyManagerService;->access$1700(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseArray;
+PLcom/android/server/net/NetworkPolicyManagerService;->access$1800(Lcom/android/server/net/NetworkPolicyManagerService;ILjava/lang/String;)Z
+PLcom/android/server/net/NetworkPolicyManagerService;->access$1900(Lcom/android/server/net/NetworkPolicyManagerService;ILjava/lang/String;)Z
+PLcom/android/server/net/NetworkPolicyManagerService;->access$200(Lcom/android/server/net/NetworkPolicyManagerService;)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->access$2000(Lcom/android/server/net/NetworkPolicyManagerService;I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->access$2100(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->access$2200(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;II)V
 PLcom/android/server/net/NetworkPolicyManagerService;->access$2300(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;[Ljava/lang/String;)V
-PLcom/android/server/net/NetworkPolicyManagerService;->access$2400(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/ArraySet;
+HPLcom/android/server/net/NetworkPolicyManagerService;->access$2400(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/ArraySet;
+PLcom/android/server/net/NetworkPolicyManagerService;->access$2400(Lcom/android/server/net/NetworkPolicyManagerService;)Lcom/android/server/net/NetworkStatsManagerInternal;
+HPLcom/android/server/net/NetworkPolicyManagerService;->access$2500(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/ArraySet;
 PLcom/android/server/net/NetworkPolicyManagerService;->access$2500(Lcom/android/server/net/NetworkPolicyManagerService;)Lcom/android/server/net/NetworkStatsManagerInternal;
+PLcom/android/server/net/NetworkPolicyManagerService;->access$2600(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;Z)V
+PLcom/android/server/net/NetworkPolicyManagerService;->access$2900(Lcom/android/server/net/NetworkPolicyManagerService;Ljava/lang/String;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->access$3000(Lcom/android/server/net/NetworkPolicyManagerService;Ljava/lang/String;J)V
+PLcom/android/server/net/NetworkPolicyManagerService;->access$3100(Lcom/android/server/net/NetworkPolicyManagerService;I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->access$3300(Lcom/android/server/net/NetworkPolicyManagerService;Ljava/util/Set;I)V
-PLcom/android/server/net/NetworkPolicyManagerService;->access$3700(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseBooleanArray;
-PLcom/android/server/net/NetworkPolicyManagerService;->access$3800(Lcom/android/server/net/NetworkPolicyManagerService;I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->access$3400(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/NetworkTemplate;Z)V
+PLcom/android/server/net/NetworkPolicyManagerService;->access$3500(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;I[Landroid/telephony/SubscriptionPlan;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->access$3600(II)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->access$3700(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseBooleanArray;
+HPLcom/android/server/net/NetworkPolicyManagerService;->access$3800(Lcom/android/server/net/NetworkPolicyManagerService;I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->access$3900(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/Network;)I
 PLcom/android/server/net/NetworkPolicyManagerService;->access$400(Lcom/android/server/net/NetworkPolicyManagerService;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->access$4000(Lcom/android/server/net/NetworkPolicyManagerService;I)Landroid/telephony/SubscriptionPlan;
+HPLcom/android/server/net/NetworkPolicyManagerService;->access$4100(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/NetworkTemplate;)I
 HSPLcom/android/server/net/NetworkPolicyManagerService;->access$4200(Lcom/android/server/net/NetworkPolicyManagerService;)Ljava/util/concurrent/CountDownLatch;
+PLcom/android/server/net/NetworkPolicyManagerService;->access$500()Z
+PLcom/android/server/net/NetworkPolicyManagerService;->access$600(Lcom/android/server/net/NetworkPolicyManagerService;I)V
+PLcom/android/server/net/NetworkPolicyManagerService;->access$700(Lcom/android/server/net/NetworkPolicyManagerService;I)V
+PLcom/android/server/net/NetworkPolicyManagerService;->access$800(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseArray;
+PLcom/android/server/net/NetworkPolicyManagerService;->access$900(Lcom/android/server/net/NetworkPolicyManagerService;I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->addDefaultRestrictBackgroundWhitelistUidsUL()Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->addDefaultRestrictBackgroundWhitelistUidsUL(I)Z
+PLcom/android/server/net/NetworkPolicyManagerService;->addNetworkPolicyAL(Landroid/net/NetworkPolicy;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->addUidPolicy(II)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->bindConnectivityManager(Landroid/net/IConnectivityManager;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->buildDefaultMobilePolicy(ILjava/lang/String;)Landroid/net/NetworkPolicy;
+HPLcom/android/server/net/NetworkPolicyManagerService;->buildSnoozeWarningIntent(Landroid/net/NetworkTemplate;)Landroid/content/Intent;
+HPLcom/android/server/net/NetworkPolicyManagerService;->buildViewDataUsageIntent(Landroid/content/res/Resources;Landroid/net/NetworkTemplate;)Landroid/content/Intent;
+PLcom/android/server/net/NetworkPolicyManagerService;->cancelNotification(Lcom/android/server/net/NetworkPolicyManagerService$NotificationId;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->checkAnyPermissionOf([Ljava/lang/String;)Z
-PLcom/android/server/net/NetworkPolicyManagerService;->collectIfaces(Landroid/util/ArraySet;Landroid/net/NetworkState;)V
-PLcom/android/server/net/NetworkPolicyManagerService;->defeatNullable([Landroid/net/NetworkState;)[Landroid/net/NetworkState;
-PLcom/android/server/net/NetworkPolicyManagerService;->dispatchMeteredIfacesChanged(Landroid/net/INetworkPolicyListener;[Ljava/lang/String;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->collectIfaces(Landroid/util/ArraySet;Landroid/net/NetworkState;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->collectKeys(Landroid/util/SparseIntArray;Landroid/util/SparseBooleanArray;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->defeatNullable([Landroid/net/NetworkState;)[Landroid/net/NetworkState;
+HPLcom/android/server/net/NetworkPolicyManagerService;->dispatchMeteredIfacesChanged(Landroid/net/INetworkPolicyListener;[Ljava/lang/String;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->dispatchRestrictBackgroundChanged(Landroid/net/INetworkPolicyListener;Z)V
 PLcom/android/server/net/NetworkPolicyManagerService;->dispatchSubscriptionPlansChanged(Landroid/net/INetworkPolicyListener;I[Landroid/telephony/SubscriptionPlan;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->dispatchUidPoliciesChanged(Landroid/net/INetworkPolicyListener;II)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->dispatchUidRulesChanged(Landroid/net/INetworkPolicyListener;II)V
-PLcom/android/server/net/NetworkPolicyManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->enableFirewallChainUL(IZ)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->enforceAnyPermissionOf([Ljava/lang/String;)V
-PLcom/android/server/net/NetworkPolicyManagerService;->enforceSubscriptionPlanAccess(IILjava/lang/String;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->enforceSubscriptionPlanAccess(IILjava/lang/String;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->enforceSubscriptionPlanValidity([Landroid/telephony/SubscriptionPlan;)V
-PLcom/android/server/net/NetworkPolicyManagerService;->ensureActiveMobilePolicyAL()V
+HPLcom/android/server/net/NetworkPolicyManagerService;->enqueueNotification(Landroid/net/NetworkPolicy;IJLandroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->ensureActiveMobilePolicyAL()V
+HPLcom/android/server/net/NetworkPolicyManagerService;->ensureActiveMobilePolicyAL(ILjava/lang/String;)Z
+HSPLcom/android/server/net/NetworkPolicyManagerService;->findRelevantSubIdNL(Landroid/net/NetworkTemplate;)I
+HPLcom/android/server/net/NetworkPolicyManagerService;->getBooleanDefeatingNullable(Landroid/os/PersistableBundle;Ljava/lang/String;Z)Z
+PLcom/android/server/net/NetworkPolicyManagerService;->getCycleDayFromCarrierConfig(Landroid/os/PersistableBundle;I)I
 HSPLcom/android/server/net/NetworkPolicyManagerService;->getDefaultClock()Ljava/time/Clock;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->getDefaultSystemDir()Ljava/io/File;
-PLcom/android/server/net/NetworkPolicyManagerService;->getNetworkPolicies(Ljava/lang/String;)[Landroid/net/NetworkPolicy;
-PLcom/android/server/net/NetworkPolicyManagerService;->getPrimarySubscriptionPlanLocked(I)Landroid/telephony/SubscriptionPlan;
-PLcom/android/server/net/NetworkPolicyManagerService;->getRestrictBackground()Z
-PLcom/android/server/net/NetworkPolicyManagerService;->getRestrictBackgroundByCaller()I
-PLcom/android/server/net/NetworkPolicyManagerService;->getSubIdLocked(Landroid/net/Network;)I
-PLcom/android/server/net/NetworkPolicyManagerService;->getUidPolicy(I)I
+PLcom/android/server/net/NetworkPolicyManagerService;->getLimitBytesFromCarrierConfig(Landroid/os/PersistableBundle;J)J
+HPLcom/android/server/net/NetworkPolicyManagerService;->getNetworkPolicies(Ljava/lang/String;)[Landroid/net/NetworkPolicy;
+HPLcom/android/server/net/NetworkPolicyManagerService;->getNetworkTotalBytes(Landroid/net/NetworkTemplate;JJ)J
+PLcom/android/server/net/NetworkPolicyManagerService;->getPlatformDefaultLimitBytes()J
+PLcom/android/server/net/NetworkPolicyManagerService;->getPlatformDefaultWarningBytes()J
+HPLcom/android/server/net/NetworkPolicyManagerService;->getPrimarySubscriptionPlanLocked(I)Landroid/telephony/SubscriptionPlan;
+HPLcom/android/server/net/NetworkPolicyManagerService;->getRestrictBackground()Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->getRestrictBackgroundByCaller()I
+HPLcom/android/server/net/NetworkPolicyManagerService;->getSubIdLocked(Landroid/net/Network;)I
+PLcom/android/server/net/NetworkPolicyManagerService;->getSubscriptionPlans(ILjava/lang/String;)[Landroid/telephony/SubscriptionPlan;
+PLcom/android/server/net/NetworkPolicyManagerService;->getSubscriptionPlansOwner(I)Ljava/lang/String;
+HPLcom/android/server/net/NetworkPolicyManagerService;->getTotalBytes(Landroid/net/NetworkTemplate;JJ)J
+HPLcom/android/server/net/NetworkPolicyManagerService;->getUidPolicy(I)I
+PLcom/android/server/net/NetworkPolicyManagerService;->getUidsWithPolicy(I)[I
+PLcom/android/server/net/NetworkPolicyManagerService;->getWarningBytesFromCarrierConfig(Landroid/os/PersistableBundle;J)J
+PLcom/android/server/net/NetworkPolicyManagerService;->handleNetworkPoliciesUpdateAL(Z)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->handleRestrictedPackagesChangeUL(Ljava/util/Set;Ljava/util/Set;)V
-HPLcom/android/server/net/NetworkPolicyManagerService;->handleUidChanged(IIJ)V
-PLcom/android/server/net/NetworkPolicyManagerService;->handleUidGone(I)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->handleUidChanged(IIJ)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->handleUidGone(I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->hasInternetPermissions(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->hasRule(II)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->initService(Ljava/util/concurrent/CountDownLatch;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isBandwidthControlEnabled()Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isRestrictedByAdminUL(I)Z
-PLcom/android/server/net/NetworkPolicyManagerService;->isSystem(I)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->isSystem(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidForegroundOnRestrictBackgroundUL(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidForegroundOnRestrictPowerUL(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidIdle(I)Z
 HPLcom/android/server/net/NetworkPolicyManagerService;->isUidNetworkingBlockedInternal(IIZZLcom/android/server/net/NetworkPolicyLogger;)Z
-PLcom/android/server/net/NetworkPolicyManagerService;->isUidStateForeground(I)Z
+HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidStateForeground(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidValidForBlacklistRules(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidValidForWhitelistRules(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isWhitelistedFromPowerSaveUL(IZ)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->lambda$networkScoreAndNetworkManagementServiceReady$0$NetworkPolicyManagerService(Ljava/util/concurrent/CountDownLatch;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->maybeUpdateMobilePolicyCycleAL(ILjava/lang/String;)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->networkScoreAndNetworkManagementServiceReady()Ljava/util/concurrent/CountDownLatch;
-PLcom/android/server/net/NetworkPolicyManagerService;->normalizePoliciesNL()V
-PLcom/android/server/net/NetworkPolicyManagerService;->normalizePoliciesNL([Landroid/net/NetworkPolicy;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->normalizePoliciesNL()V
+HPLcom/android/server/net/NetworkPolicyManagerService;->normalizePoliciesNL([Landroid/net/NetworkPolicy;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->notifyUnderLimitNL(Landroid/net/NetworkTemplate;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->onTetheringChanged(Ljava/lang/String;Z)V
-PLcom/android/server/net/NetworkPolicyManagerService;->parseSubId(Landroid/net/NetworkState;)I
+HPLcom/android/server/net/NetworkPolicyManagerService;->onUidDeletedUL(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->parseSubId(Landroid/net/NetworkState;)I
+PLcom/android/server/net/NetworkPolicyManagerService;->performSnooze(Landroid/net/NetworkTemplate;I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->readPolicyAL()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->registerListener(Landroid/net/INetworkPolicyListener;)V
-PLcom/android/server/net/NetworkPolicyManagerService;->removeInterfaceQuota(Ljava/lang/String;)V
-PLcom/android/server/net/NetworkPolicyManagerService;->removeInterfaceQuotaAsync(Ljava/lang/String;)V
-HPLcom/android/server/net/NetworkPolicyManagerService;->removeUidStateUL(I)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->removeInterfaceQuota(Ljava/lang/String;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->removeInterfaceQuotaAsync(Ljava/lang/String;)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->removeUidStateUL(I)Z
+PLcom/android/server/net/NetworkPolicyManagerService;->removeUserStateUL(IZ)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->resetUidFirewallRules(I)V
+PLcom/android/server/net/NetworkPolicyManagerService;->sendRestrictBackgroundChangedMsg()V
 HPLcom/android/server/net/NetworkPolicyManagerService;->setAppIdleWhitelist(IZ)V
-PLcom/android/server/net/NetworkPolicyManagerService;->setDeviceIdleMode(Z)V
-PLcom/android/server/net/NetworkPolicyManagerService;->setInterfaceQuota(Ljava/lang/String;J)V
-PLcom/android/server/net/NetworkPolicyManagerService;->setInterfaceQuotaAsync(Ljava/lang/String;J)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->setDeviceIdleMode(Z)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->setInterfaceQuota(Ljava/lang/String;J)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->setInterfaceQuotaAsync(Ljava/lang/String;J)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->setMeteredNetworkBlacklist(IZ)V
 HPLcom/android/server/net/NetworkPolicyManagerService;->setMeteredNetworkWhitelist(IZ)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->setMeteredRestrictedPackagesInternal(Ljava/util/Set;I)V
+PLcom/android/server/net/NetworkPolicyManagerService;->setNetworkPolicies([Landroid/net/NetworkPolicy;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->setNetworkTemplateEnabled(Landroid/net/NetworkTemplate;Z)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->setNetworkTemplateEnabledInner(Landroid/net/NetworkTemplate;Z)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->setRestrictBackgroundUL(Z)V
 PLcom/android/server/net/NetworkPolicyManagerService;->setSubscriptionPlans(I[Landroid/telephony/SubscriptionPlan;Ljava/lang/String;)V
-HPLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRule(III)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRule(III)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRulesUL(ILandroid/util/SparseIntArray;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRulesUL(ILandroid/util/SparseIntArray;I)V
+PLcom/android/server/net/NetworkPolicyManagerService;->setUidPolicyUncheckedUL(IIIZ)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->setUidPolicyUncheckedUL(IIZ)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->systemReady(Ljava/util/concurrent/CountDownLatch;)V
-PLcom/android/server/net/NetworkPolicyManagerService;->unregisterListener(Landroid/net/INetworkPolicyListener;)V
-PLcom/android/server/net/NetworkPolicyManagerService;->updateCapabilityChange(Landroid/util/SparseBooleanArray;ZLandroid/net/Network;)Z
-PLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkEnabledNL()V
-PLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkRulesNL()V
-HPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkStats(IZ)V
-PLcom/android/server/net/NetworkPolicyManagerService;->updateNetworksInternal()V
+HPLcom/android/server/net/NetworkPolicyManagerService;->unregisterListener(Landroid/net/INetworkPolicyListener;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateCapabilityChange(Landroid/util/SparseBooleanArray;ZLandroid/net/Network;)Z
+PLcom/android/server/net/NetworkPolicyManagerService;->updateDefaultMobilePolicyAL(ILandroid/net/NetworkPolicy;)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkEnabledNL()V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkRulesNL()V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkStats(IZ)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworksInternal()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateNotificationsNL()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updatePowerSaveWhitelistUL()V
-PLcom/android/server/net/NetworkPolicyManagerService;->updateRestrictBackgroundRulesOnUidStatusChangedUL(III)V
-HPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForAppIdleUL(I)V
-PLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForDeviceIdleUL(I)V
-PLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForRestrictPowerUL(I)V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateRestrictBackgroundByLowPowerModeUL(Landroid/os/PowerSaveState;)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRestrictBackgroundRulesOnUidStatusChangedUL(III)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRestrictionRulesForUidUL(I)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForAppIdleUL(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForDeviceIdleUL(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForRestrictPowerUL(I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForAllAppsUL(I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForAppIdleUL()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForDataUsageRestrictionsUL(I)V
@@ -11927,10 +20058,11 @@
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForRestrictBackgroundUL()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForRestrictPowerUL()V
 HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForTempWhitelistChangeUL(I)V
-PLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForWhitelistedPowerSaveUL(IZI)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForWhitelistedAppIds(Landroid/util/SparseIntArray;Landroid/util/SparseBooleanArray;I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForWhitelistedPowerSaveUL(IZI)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForWhitelistedPowerSaveUL(ZILandroid/util/SparseIntArray;)V
-PLcom/android/server/net/NetworkPolicyManagerService;->updateSubscriptions()V
-HPLcom/android/server/net/NetworkPolicyManagerService;->updateUidStateUL(II)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateSubscriptions()V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateUidStateUL(II)Z
 PLcom/android/server/net/NetworkPolicyManagerService;->upgradeWifiMeteredOverrideAL()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->waitForAdminData()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->writePolicyAL()V
@@ -11943,21 +20075,26 @@
 HSPLcom/android/server/net/NetworkStatsCollection$Key;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/server/net/NetworkStatsCollection$Key;->hashCode()I
 HSPLcom/android/server/net/NetworkStatsCollection;-><init>(J)V
+PLcom/android/server/net/NetworkStatsCollection;->clearDirty()V
 HPLcom/android/server/net/NetworkStatsCollection;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/net/NetworkStatsCollection;->dumpCheckin(Ljava/io/PrintWriter;JJ)V
-PLcom/android/server/net/NetworkStatsCollection;->dumpCheckin(Ljava/io/PrintWriter;JJLandroid/net/NetworkTemplate;Ljava/lang/String;)V
+HPLcom/android/server/net/NetworkStatsCollection;->dumpCheckin(Ljava/io/PrintWriter;JJLandroid/net/NetworkTemplate;Ljava/lang/String;)V
 HPLcom/android/server/net/NetworkStatsCollection;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/net/NetworkStatsCollection;->findOrCreateHistory(Lcom/android/server/net/NetworkIdentitySet;III)Landroid/net/NetworkStatsHistory;
 HPLcom/android/server/net/NetworkStatsCollection;->getHistory(Landroid/net/NetworkTemplate;Landroid/telephony/SubscriptionPlan;IIIIJJII)Landroid/net/NetworkStatsHistory;
+PLcom/android/server/net/NetworkStatsCollection;->getRelevantUids(I)[I
+HPLcom/android/server/net/NetworkStatsCollection;->getRelevantUids(II)[I
 PLcom/android/server/net/NetworkStatsCollection;->getSortedKeys()Ljava/util/ArrayList;
 HPLcom/android/server/net/NetworkStatsCollection;->getSummary(Landroid/net/NetworkTemplate;JJII)Landroid/net/NetworkStats;
-PLcom/android/server/net/NetworkStatsCollection;->getTotalBytes()J
+HPLcom/android/server/net/NetworkStatsCollection;->getTotalBytes()J
+HPLcom/android/server/net/NetworkStatsCollection;->isDirty()Z
 HSPLcom/android/server/net/NetworkStatsCollection;->noteRecordedHistory(JJJ)V
 HSPLcom/android/server/net/NetworkStatsCollection;->read(Ljava/io/DataInputStream;)V
 HSPLcom/android/server/net/NetworkStatsCollection;->read(Ljava/io/InputStream;)V
 HSPLcom/android/server/net/NetworkStatsCollection;->recordCollection(Lcom/android/server/net/NetworkStatsCollection;)V
 HPLcom/android/server/net/NetworkStatsCollection;->recordData(Lcom/android/server/net/NetworkIdentitySet;IIIJJLandroid/net/NetworkStats$Entry;)V
 HSPLcom/android/server/net/NetworkStatsCollection;->recordHistory(Lcom/android/server/net/NetworkStatsCollection$Key;Landroid/net/NetworkStatsHistory;)V
+HPLcom/android/server/net/NetworkStatsCollection;->removeUids([I)V
 HSPLcom/android/server/net/NetworkStatsCollection;->reset()V
 HPLcom/android/server/net/NetworkStatsCollection;->templateMatches(Landroid/net/NetworkTemplate;Lcom/android/server/net/NetworkIdentitySet;)Z
 HPLcom/android/server/net/NetworkStatsCollection;->write(Ljava/io/DataOutputStream;)V
@@ -11966,62 +20103,101 @@
 HSPLcom/android/server/net/NetworkStatsFactory;->adjustForTunAnd464Xlat(Landroid/net/NetworkStats;Landroid/net/NetworkStats;[Lcom/android/internal/net/VpnInfo;)Landroid/net/NetworkStats;
 HSPLcom/android/server/net/NetworkStatsFactory;->apply464xlatAdjustments(Landroid/net/NetworkStats;Landroid/net/NetworkStats;Z)V
 HPLcom/android/server/net/NetworkStatsFactory;->augmentWithStackedInterfaces([Ljava/lang/String;)[Ljava/lang/String;
+PLcom/android/server/net/NetworkStatsFactory;->noteStackedIface(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/net/NetworkStatsFactory;->readBpfNetworkStatsDev()Landroid/net/NetworkStats;
 HSPLcom/android/server/net/NetworkStatsFactory;->readNetworkStatsDetail(I[Ljava/lang/String;I)Landroid/net/NetworkStats;
 HSPLcom/android/server/net/NetworkStatsFactory;->readNetworkStatsSummaryDev()Landroid/net/NetworkStats;
 HSPLcom/android/server/net/NetworkStatsFactory;->readNetworkStatsSummaryXt()Landroid/net/NetworkStats;
 HSPLcom/android/server/net/NetworkStatsFactory;->requestSwapActiveStatsMapLocked()V
-PLcom/android/server/net/NetworkStatsFactory;->updateVpnInfos([Lcom/android/internal/net/VpnInfo;)V
+HPLcom/android/server/net/NetworkStatsFactory;->updateVpnInfos([Lcom/android/internal/net/VpnInfo;)V
 HSPLcom/android/server/net/NetworkStatsManagerInternal;-><init>()V
 HSPLcom/android/server/net/NetworkStatsObservers$1;-><init>(Lcom/android/server/net/NetworkStatsObservers;)V
 HSPLcom/android/server/net/NetworkStatsObservers$1;->handleMessage(Landroid/os/Message;)Z
+HPLcom/android/server/net/NetworkStatsObservers$NetworkUsageRequestInfo;-><init>(Lcom/android/server/net/NetworkStatsObservers;Landroid/net/DataUsageRequest;Landroid/os/Messenger;Landroid/os/IBinder;II)V
+HPLcom/android/server/net/NetworkStatsObservers$NetworkUsageRequestInfo;->checkStats()Z
+HPLcom/android/server/net/NetworkStatsObservers$NetworkUsageRequestInfo;->getTotalBytesForNetwork(Landroid/net/NetworkTemplate;)J
+HPLcom/android/server/net/NetworkStatsObservers$NetworkUsageRequestInfo;->recordSample(Lcom/android/server/net/NetworkStatsObservers$StatsContext;)V
+HPLcom/android/server/net/NetworkStatsObservers$RequestInfo;-><init>(Lcom/android/server/net/NetworkStatsObservers;Landroid/net/DataUsageRequest;Landroid/os/Messenger;Landroid/os/IBinder;II)V
+PLcom/android/server/net/NetworkStatsObservers$RequestInfo;->access$300(Lcom/android/server/net/NetworkStatsObservers$RequestInfo;)V
+HPLcom/android/server/net/NetworkStatsObservers$RequestInfo;->access$400(Lcom/android/server/net/NetworkStatsObservers$RequestInfo;I)V
+HPLcom/android/server/net/NetworkStatsObservers$RequestInfo;->access$500(Lcom/android/server/net/NetworkStatsObservers$RequestInfo;Lcom/android/server/net/NetworkStatsObservers$StatsContext;)V
+PLcom/android/server/net/NetworkStatsObservers$RequestInfo;->binderDied()V
+HPLcom/android/server/net/NetworkStatsObservers$RequestInfo;->callCallback(I)V
+PLcom/android/server/net/NetworkStatsObservers$RequestInfo;->resetRecorder()V
+HPLcom/android/server/net/NetworkStatsObservers$RequestInfo;->unlinkDeathRecipient()V
+HPLcom/android/server/net/NetworkStatsObservers$RequestInfo;->updateStats(Lcom/android/server/net/NetworkStatsObservers$StatsContext;)V
 HSPLcom/android/server/net/NetworkStatsObservers$StatsContext;-><init>(Landroid/net/NetworkStats;Landroid/net/NetworkStats;Landroid/util/ArrayMap;Landroid/util/ArrayMap;J)V
 HSPLcom/android/server/net/NetworkStatsObservers;-><init>()V
+PLcom/android/server/net/NetworkStatsObservers;->access$000(Lcom/android/server/net/NetworkStatsObservers;Lcom/android/server/net/NetworkStatsObservers$RequestInfo;)V
+PLcom/android/server/net/NetworkStatsObservers;->access$100(Lcom/android/server/net/NetworkStatsObservers;Landroid/net/DataUsageRequest;I)V
 HSPLcom/android/server/net/NetworkStatsObservers;->access$200(Lcom/android/server/net/NetworkStatsObservers;Lcom/android/server/net/NetworkStatsObservers$StatsContext;)V
+HPLcom/android/server/net/NetworkStatsObservers;->buildRequest(Landroid/net/DataUsageRequest;)Landroid/net/DataUsageRequest;
+HPLcom/android/server/net/NetworkStatsObservers;->buildRequestInfo(Landroid/net/DataUsageRequest;Landroid/os/Messenger;Landroid/os/IBinder;II)Lcom/android/server/net/NetworkStatsObservers$RequestInfo;
 HSPLcom/android/server/net/NetworkStatsObservers;->getHandler()Landroid/os/Handler;
 HSPLcom/android/server/net/NetworkStatsObservers;->getHandlerLooperLocked()Landroid/os/Looper;
+HPLcom/android/server/net/NetworkStatsObservers;->handleRegister(Lcom/android/server/net/NetworkStatsObservers$RequestInfo;)V
+HPLcom/android/server/net/NetworkStatsObservers;->handleUnregister(Landroid/net/DataUsageRequest;I)V
 HSPLcom/android/server/net/NetworkStatsObservers;->handleUpdateStats(Lcom/android/server/net/NetworkStatsObservers$StatsContext;)V
+HPLcom/android/server/net/NetworkStatsObservers;->register(Landroid/net/DataUsageRequest;Landroid/os/Messenger;Landroid/os/IBinder;II)Landroid/net/DataUsageRequest;
+HPLcom/android/server/net/NetworkStatsObservers;->unregister(Landroid/net/DataUsageRequest;I)V
 HSPLcom/android/server/net/NetworkStatsObservers;->updateStats(Landroid/net/NetworkStats;Landroid/net/NetworkStats;Landroid/util/ArrayMap;Landroid/util/ArrayMap;J)V
 HSPLcom/android/server/net/NetworkStatsRecorder$CombiningRewriter;-><init>(Lcom/android/server/net/NetworkStatsCollection;)V
-PLcom/android/server/net/NetworkStatsRecorder$CombiningRewriter;->read(Ljava/io/InputStream;)V
-PLcom/android/server/net/NetworkStatsRecorder$CombiningRewriter;->reset()V
-PLcom/android/server/net/NetworkStatsRecorder$CombiningRewriter;->shouldWrite()Z
-PLcom/android/server/net/NetworkStatsRecorder$CombiningRewriter;->write(Ljava/io/OutputStream;)V
+HPLcom/android/server/net/NetworkStatsRecorder$CombiningRewriter;->read(Ljava/io/InputStream;)V
+HPLcom/android/server/net/NetworkStatsRecorder$CombiningRewriter;->reset()V
+HPLcom/android/server/net/NetworkStatsRecorder$CombiningRewriter;->shouldWrite()Z
+HPLcom/android/server/net/NetworkStatsRecorder$CombiningRewriter;->write(Ljava/io/OutputStream;)V
+PLcom/android/server/net/NetworkStatsRecorder$RemoveUidRewriter;-><init>(J[I)V
+PLcom/android/server/net/NetworkStatsRecorder$RemoveUidRewriter;->read(Ljava/io/InputStream;)V
+PLcom/android/server/net/NetworkStatsRecorder$RemoveUidRewriter;->reset()V
+PLcom/android/server/net/NetworkStatsRecorder$RemoveUidRewriter;->shouldWrite()Z
+PLcom/android/server/net/NetworkStatsRecorder$RemoveUidRewriter;->write(Ljava/io/OutputStream;)V
+HPLcom/android/server/net/NetworkStatsRecorder;-><init>()V
 HSPLcom/android/server/net/NetworkStatsRecorder;-><init>(Lcom/android/internal/util/FileRotator;Landroid/net/NetworkStats$NonMonotonicObserver;Landroid/os/DropBoxManager;Ljava/lang/String;JZ)V
+PLcom/android/server/net/NetworkStatsRecorder;->dumpCheckin(Ljava/io/PrintWriter;JJ)V
 PLcom/android/server/net/NetworkStatsRecorder;->dumpDebugLocked(Landroid/util/proto/ProtoOutputStream;J)V
 PLcom/android/server/net/NetworkStatsRecorder;->dumpLocked(Lcom/android/internal/util/IndentingPrintWriter;Z)V
-PLcom/android/server/net/NetworkStatsRecorder;->forcePersistLocked(J)V
+HPLcom/android/server/net/NetworkStatsRecorder;->forcePersistLocked(J)V
 HSPLcom/android/server/net/NetworkStatsRecorder;->getOrLoadCompleteLocked()Lcom/android/server/net/NetworkStatsCollection;
 PLcom/android/server/net/NetworkStatsRecorder;->getOrLoadPartialLocked(JJ)Lcom/android/server/net/NetworkStatsCollection;
+PLcom/android/server/net/NetworkStatsRecorder;->getSinceBoot()Lcom/android/server/net/NetworkStatsCollection;
 HPLcom/android/server/net/NetworkStatsRecorder;->getTotalSinceBootLocked(Landroid/net/NetworkTemplate;)Landroid/net/NetworkStats$Entry;
 HSPLcom/android/server/net/NetworkStatsRecorder;->loadLocked(JJ)Lcom/android/server/net/NetworkStatsCollection;
-PLcom/android/server/net/NetworkStatsRecorder;->maybePersistLocked(J)V
+HPLcom/android/server/net/NetworkStatsRecorder;->maybePersistLocked(J)V
 HSPLcom/android/server/net/NetworkStatsRecorder;->recordSnapshotLocked(Landroid/net/NetworkStats;Ljava/util/Map;J)V
+HPLcom/android/server/net/NetworkStatsRecorder;->removeUidsLocked([I)V
 HSPLcom/android/server/net/NetworkStatsRecorder;->setPersistThreshold(J)V
 HPLcom/android/server/net/NetworkStatsService$1;-><init>(Lcom/android/server/net/NetworkStatsService;ILjava/lang/String;I)V
 HPLcom/android/server/net/NetworkStatsService$1;->close()V
 PLcom/android/server/net/NetworkStatsService$1;->getDeviceSummaryForNetwork(Landroid/net/NetworkTemplate;JJ)Landroid/net/NetworkStats;
+PLcom/android/server/net/NetworkStatsService$1;->getHistoryForNetwork(Landroid/net/NetworkTemplate;I)Landroid/net/NetworkStatsHistory;
+PLcom/android/server/net/NetworkStatsService$1;->getHistoryForUid(Landroid/net/NetworkTemplate;IIII)Landroid/net/NetworkStatsHistory;
 HPLcom/android/server/net/NetworkStatsService$1;->getHistoryIntervalForUid(Landroid/net/NetworkTemplate;IIIIJJ)Landroid/net/NetworkStatsHistory;
-PLcom/android/server/net/NetworkStatsService$1;->getSummaryForAllUid(Landroid/net/NetworkTemplate;JJZ)Landroid/net/NetworkStats;
-PLcom/android/server/net/NetworkStatsService$1;->getUidComplete()Lcom/android/server/net/NetworkStatsCollection;
+PLcom/android/server/net/NetworkStatsService$1;->getRelevantUids()[I
+HPLcom/android/server/net/NetworkStatsService$1;->getSummaryForAllUid(Landroid/net/NetworkTemplate;JJZ)Landroid/net/NetworkStats;
+HPLcom/android/server/net/NetworkStatsService$1;->getUidComplete()Lcom/android/server/net/NetworkStatsCollection;
 HPLcom/android/server/net/NetworkStatsService$1;->getUidTagComplete()Lcom/android/server/net/NetworkStatsCollection;
 HSPLcom/android/server/net/NetworkStatsService$2;-><init>(Lcom/android/server/net/NetworkStatsService;)V
-PLcom/android/server/net/NetworkStatsService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/net/NetworkStatsService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkStatsService$3;-><init>(Lcom/android/server/net/NetworkStatsService;)V
 PLcom/android/server/net/NetworkStatsService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkStatsService$4;-><init>(Lcom/android/server/net/NetworkStatsService;)V
+PLcom/android/server/net/NetworkStatsService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkStatsService$5;-><init>(Lcom/android/server/net/NetworkStatsService;)V
+PLcom/android/server/net/NetworkStatsService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkStatsService$6;-><init>(Lcom/android/server/net/NetworkStatsService;)V
+PLcom/android/server/net/NetworkStatsService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkStatsService$7;-><init>(Lcom/android/server/net/NetworkStatsService;)V
-PLcom/android/server/net/NetworkStatsService$7;->limitReached(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/net/NetworkStatsService$7;->limitReached(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;-><init>(Landroid/content/Context;)V
+HPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getAugmentEnabled()Z
 HSPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getDevConfig()Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
 HSPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getDevPersistBytes(J)J
 HSPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getGlobalAlertBytes(J)J
-PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getGlobalBoolean(Ljava/lang/String;Z)Z
+HPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getGlobalBoolean(Ljava/lang/String;Z)Z
 HSPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getGlobalLong(Ljava/lang/String;J)J
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getPollDelay()J
 HSPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getPollInterval()J
-PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getSampleEnabled()Z
+HPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getSampleEnabled()Z
 HSPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getUidConfig()Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
 HSPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getUidPersistBytes(J)J
 HSPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getUidTagConfig()Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
@@ -12030,69 +20206,114 @@
 HSPLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getXtPersistBytes(J)J
 HSPLcom/android/server/net/NetworkStatsService$DropBoxNonMonotonicObserver;-><init>(Lcom/android/server/net/NetworkStatsService;)V
 HSPLcom/android/server/net/NetworkStatsService$DropBoxNonMonotonicObserver;-><init>(Lcom/android/server/net/NetworkStatsService;Lcom/android/server/net/NetworkStatsService$1;)V
+PLcom/android/server/net/NetworkStatsService$DropBoxNonMonotonicObserver;->foundNonMonotonic(Landroid/net/NetworkStats;ILandroid/net/NetworkStats;ILjava/lang/Object;)V
+HPLcom/android/server/net/NetworkStatsService$DropBoxNonMonotonicObserver;->foundNonMonotonic(Landroid/net/NetworkStats;ILandroid/net/NetworkStats;ILjava/lang/String;)V
 HSPLcom/android/server/net/NetworkStatsService$HandlerCallback;-><init>(Lcom/android/server/net/NetworkStatsService;)V
-PLcom/android/server/net/NetworkStatsService$HandlerCallback;->handleMessage(Landroid/os/Message;)Z
+HPLcom/android/server/net/NetworkStatsService$HandlerCallback;->handleMessage(Landroid/os/Message;)Z
 HSPLcom/android/server/net/NetworkStatsService$NetworkStatsHandler;-><init>(Landroid/os/Looper;Landroid/os/Handler$Callback;)V
 HSPLcom/android/server/net/NetworkStatsService$NetworkStatsManagerInternalImpl;-><init>(Lcom/android/server/net/NetworkStatsService;)V
 HSPLcom/android/server/net/NetworkStatsService$NetworkStatsManagerInternalImpl;-><init>(Lcom/android/server/net/NetworkStatsService;Lcom/android/server/net/NetworkStatsService$1;)V
 PLcom/android/server/net/NetworkStatsService$NetworkStatsManagerInternalImpl;->advisePersistThreshold(J)V
-PLcom/android/server/net/NetworkStatsService$NetworkStatsManagerInternalImpl;->setUidForeground(IZ)V
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsManagerInternalImpl;->getNetworkTotalBytes(Landroid/net/NetworkTemplate;JJ)J
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsManagerInternalImpl;->lambda$setStatsProviderLimit$0(Ljava/lang/String;JLcom/android/server/net/NetworkStatsService$NetworkStatsProviderCallbackImpl;)V
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsManagerInternalImpl;->setStatsProviderLimit(Ljava/lang/String;J)V
+HSPLcom/android/server/net/NetworkStatsService$NetworkStatsManagerInternalImpl;->setUidForeground(IZ)V
+HSPLcom/android/server/net/NetworkStatsService$NetworkStatsProviderCallbackImpl;-><init>(Ljava/lang/String;Landroid/net/netstats/provider/INetworkStatsProvider;Landroid/net/INetworkManagementEventObserver;Landroid/os/RemoteCallbackList;)V
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsProviderCallbackImpl;->getCachedStats(I)Landroid/net/NetworkStats;
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsProviderCallbackImpl;->onStatsUpdated(ILandroid/net/NetworkStats;Landroid/net/NetworkStats;)V
 HSPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;-><init>(JJJ)V
 HSPLcom/android/server/net/NetworkStatsService;-><clinit>()V
 HSPLcom/android/server/net/NetworkStatsService;-><init>(Landroid/content/Context;Landroid/os/INetworkManagementService;Landroid/app/AlarmManager;Landroid/os/PowerManager$WakeLock;Ljava/time/Clock;Landroid/telephony/TelephonyManager;Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings;Lcom/android/server/net/NetworkStatsFactory;Lcom/android/server/net/NetworkStatsObservers;Ljava/io/File;Ljava/io/File;)V
+PLcom/android/server/net/NetworkStatsService;->access$1000(Lcom/android/server/net/NetworkStatsService;)Landroid/os/PowerManager$WakeLock;
+PLcom/android/server/net/NetworkStatsService;->access$1100(Lcom/android/server/net/NetworkStatsService;[I)V
+PLcom/android/server/net/NetworkStatsService;->access$1200(Lcom/android/server/net/NetworkStatsService;I)V
+PLcom/android/server/net/NetworkStatsService;->access$1300(Lcom/android/server/net/NetworkStatsService;)V
+PLcom/android/server/net/NetworkStatsService;->access$1400(Lcom/android/server/net/NetworkStatsService;)Landroid/content/Context;
+PLcom/android/server/net/NetworkStatsService;->access$1500(Lcom/android/server/net/NetworkStatsService;)Landroid/os/Handler;
+PLcom/android/server/net/NetworkStatsService;->access$1600(Lcom/android/server/net/NetworkStatsService;)Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings;
+PLcom/android/server/net/NetworkStatsService;->access$1600(Lcom/android/server/net/NetworkStatsService;Landroid/net/NetworkTemplate;JJ)J
+HPLcom/android/server/net/NetworkStatsService;->access$1700(Lcom/android/server/net/NetworkStatsService;Landroid/net/NetworkTemplate;JJ)J
 PLcom/android/server/net/NetworkStatsService;->access$1800(Lcom/android/server/net/NetworkStatsService;J)V
-PLcom/android/server/net/NetworkStatsService;->access$200(Lcom/android/server/net/NetworkStatsService;Ljava/lang/String;)I
-PLcom/android/server/net/NetworkStatsService;->access$800(Lcom/android/server/net/NetworkStatsService;I)V
-PLcom/android/server/net/NetworkStatsService;->advisePersistThreshold(J)V
+PLcom/android/server/net/NetworkStatsService;->access$1900(Lcom/android/server/net/NetworkStatsService;J)V
+HPLcom/android/server/net/NetworkStatsService;->access$200(Lcom/android/server/net/NetworkStatsService;Ljava/lang/String;)I
+HPLcom/android/server/net/NetworkStatsService;->access$2000(Lcom/android/server/net/NetworkStatsService;Lcom/android/server/net/NetworkStatsService$ThrowingConsumer;)V
+HPLcom/android/server/net/NetworkStatsService;->access$300(Lcom/android/server/net/NetworkStatsService;)Ljava/lang/Object;
+HPLcom/android/server/net/NetworkStatsService;->access$400(Lcom/android/server/net/NetworkStatsService;)Lcom/android/server/net/NetworkStatsRecorder;
+HPLcom/android/server/net/NetworkStatsService;->access$500(Lcom/android/server/net/NetworkStatsService;)Lcom/android/server/net/NetworkStatsRecorder;
+HPLcom/android/server/net/NetworkStatsService;->access$600(Lcom/android/server/net/NetworkStatsService;Landroid/net/NetworkTemplate;IJJII)Landroid/net/NetworkStats;
+PLcom/android/server/net/NetworkStatsService;->access$700(Lcom/android/server/net/NetworkStatsService;Landroid/net/NetworkTemplate;IIII)Landroid/net/NetworkStatsHistory;
+HPLcom/android/server/net/NetworkStatsService;->access$800(Lcom/android/server/net/NetworkStatsService;I)V
+HPLcom/android/server/net/NetworkStatsService;->access$900(Lcom/android/server/net/NetworkStatsService;)V
+HPLcom/android/server/net/NetworkStatsService;->advisePersistThreshold(J)V
+HPLcom/android/server/net/NetworkStatsService;->assertSystemReady()V
 HSPLcom/android/server/net/NetworkStatsService;->bootstrapStatsLocked()V
 HSPLcom/android/server/net/NetworkStatsService;->buildRecorder(Ljava/lang/String;Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;Z)Lcom/android/server/net/NetworkStatsRecorder;
 HPLcom/android/server/net/NetworkStatsService;->checkAccessLevel(Ljava/lang/String;)I
-PLcom/android/server/net/NetworkStatsService;->checkBpfStatsEnable()Z
+HPLcom/android/server/net/NetworkStatsService;->checkBpfStatsEnable()Z
 HSPLcom/android/server/net/NetworkStatsService;->create(Landroid/content/Context;Landroid/os/INetworkManagementService;)Lcom/android/server/net/NetworkStatsService;
-PLcom/android/server/net/NetworkStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/net/NetworkStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/net/NetworkStatsService;->dumpInterfaces(Landroid/util/proto/ProtoOutputStream;JLandroid/util/ArrayMap;)V
 PLcom/android/server/net/NetworkStatsService;->dumpProtoLocked(Ljava/io/FileDescriptor;)V
-PLcom/android/server/net/NetworkStatsService;->findOrCreateNetworkIdentitySet(Landroid/util/ArrayMap;Ljava/lang/Object;)Lcom/android/server/net/NetworkIdentitySet;
+HPLcom/android/server/net/NetworkStatsService;->findOrCreateNetworkIdentitySet(Landroid/util/ArrayMap;Ljava/lang/Object;)Lcom/android/server/net/NetworkIdentitySet;
+PLcom/android/server/net/NetworkStatsService;->forceUpdate()V
 HPLcom/android/server/net/NetworkStatsService;->forceUpdateIfaces([Landroid/net/Network;[Landroid/net/NetworkState;Ljava/lang/String;[Lcom/android/internal/net/VpnInfo;)V
 HSPLcom/android/server/net/NetworkStatsService;->getDefaultBaseDir()Ljava/io/File;
 HSPLcom/android/server/net/NetworkStatsService;->getDefaultClock()Ljava/time/Clock;
 HSPLcom/android/server/net/NetworkStatsService;->getDefaultSystemDir()Ljava/io/File;
 HPLcom/android/server/net/NetworkStatsService;->getDetailedUidStats([Ljava/lang/String;)Landroid/net/NetworkStats;
-PLcom/android/server/net/NetworkStatsService;->getIfaceStats(Ljava/lang/String;I)J
-PLcom/android/server/net/NetworkStatsService;->getMobileIfaces()[Ljava/lang/String;
+HPLcom/android/server/net/NetworkStatsService;->getIfaceStats(Ljava/lang/String;I)J
+HPLcom/android/server/net/NetworkStatsService;->getMobileIfaces()[Ljava/lang/String;
+HSPLcom/android/server/net/NetworkStatsService;->getNetworkStatsFromProviders(I)Landroid/net/NetworkStats;
 HSPLcom/android/server/net/NetworkStatsService;->getNetworkStatsTethering(I)Landroid/net/NetworkStats;
 HSPLcom/android/server/net/NetworkStatsService;->getNetworkStatsUidDetail([Ljava/lang/String;)Landroid/net/NetworkStats;
 HSPLcom/android/server/net/NetworkStatsService;->getNetworkStatsXt()Landroid/net/NetworkStats;
-PLcom/android/server/net/NetworkStatsService;->getTetherStats(Ljava/lang/String;I)J
-PLcom/android/server/net/NetworkStatsService;->getTotalStats(I)J
+HPLcom/android/server/net/NetworkStatsService;->getNetworkTotalBytes(Landroid/net/NetworkTemplate;JJ)J
+HPLcom/android/server/net/NetworkStatsService;->getTetherStats(Ljava/lang/String;I)J
+HPLcom/android/server/net/NetworkStatsService;->getTotalStats(I)J
 HPLcom/android/server/net/NetworkStatsService;->getUidStats(II)J
-PLcom/android/server/net/NetworkStatsService;->incrementOperationCount(III)V
-PLcom/android/server/net/NetworkStatsService;->internalGetHistoryForNetwork(Landroid/net/NetworkTemplate;IIII)Landroid/net/NetworkStatsHistory;
-PLcom/android/server/net/NetworkStatsService;->internalGetSummaryForNetwork(Landroid/net/NetworkTemplate;IJJII)Landroid/net/NetworkStats;
+HPLcom/android/server/net/NetworkStatsService;->incrementOperationCount(III)V
+HPLcom/android/server/net/NetworkStatsService;->internalGetHistoryForNetwork(Landroid/net/NetworkTemplate;IIII)Landroid/net/NetworkStatsHistory;
+HPLcom/android/server/net/NetworkStatsService;->internalGetSummaryForNetwork(Landroid/net/NetworkTemplate;IJJII)Landroid/net/NetworkStats;
+HSPLcom/android/server/net/NetworkStatsService;->invokeForAllStatsProviderCallbacks(Lcom/android/server/net/NetworkStatsService$ThrowingConsumer;)V
 HPLcom/android/server/net/NetworkStatsService;->isRateLimitedForPoll(I)Z
+HPLcom/android/server/net/NetworkStatsService;->lambda$getNetworkStatsFromProviders$2(Landroid/net/NetworkStats;ILcom/android/server/net/NetworkStatsService$NetworkStatsProviderCallbackImpl;)V
+HPLcom/android/server/net/NetworkStatsService;->lambda$performPollLocked$1(Lcom/android/server/net/NetworkStatsService$NetworkStatsProviderCallbackImpl;)V
+PLcom/android/server/net/NetworkStatsService;->lambda$registerGlobalAlert$0$NetworkStatsService(Lcom/android/server/net/NetworkStatsService$NetworkStatsProviderCallbackImpl;)V
 HSPLcom/android/server/net/NetworkStatsService;->maybeUpgradeLegacyStatsLocked()V
+PLcom/android/server/net/NetworkStatsService;->openSession()Landroid/net/INetworkStatsSession;
 HPLcom/android/server/net/NetworkStatsService;->openSessionForUsageStats(ILjava/lang/String;)Landroid/net/INetworkStatsSession;
 HPLcom/android/server/net/NetworkStatsService;->openSessionInternal(ILjava/lang/String;)Landroid/net/INetworkStatsSession;
-PLcom/android/server/net/NetworkStatsService;->performPoll(I)V
-PLcom/android/server/net/NetworkStatsService;->performPollLocked(I)V
-PLcom/android/server/net/NetworkStatsService;->performSampleLocked()V
+HPLcom/android/server/net/NetworkStatsService;->performPoll(I)V
+HPLcom/android/server/net/NetworkStatsService;->performPollLocked(I)V
+HPLcom/android/server/net/NetworkStatsService;->performSampleLocked()V
 HSPLcom/android/server/net/NetworkStatsService;->readNetworkStatsSummaryDev()Landroid/net/NetworkStats;
 HSPLcom/android/server/net/NetworkStatsService;->readNetworkStatsSummaryXt()Landroid/net/NetworkStats;
 HSPLcom/android/server/net/NetworkStatsService;->readNetworkStatsUidDetail(I[Ljava/lang/String;I)Landroid/net/NetworkStats;
 HSPLcom/android/server/net/NetworkStatsService;->recordSnapshotLocked(J)V
 HSPLcom/android/server/net/NetworkStatsService;->registerGlobalAlert()V
 HSPLcom/android/server/net/NetworkStatsService;->registerLocalService()V
-PLcom/android/server/net/NetworkStatsService;->resolveSubscriptionPlan(Landroid/net/NetworkTemplate;I)Landroid/telephony/SubscriptionPlan;
+HSPLcom/android/server/net/NetworkStatsService;->registerNetworkStatsProvider(Ljava/lang/String;Landroid/net/netstats/provider/INetworkStatsProvider;)Landroid/net/netstats/provider/INetworkStatsProviderCallback;
+HPLcom/android/server/net/NetworkStatsService;->registerUsageCallback(Ljava/lang/String;Landroid/net/DataUsageRequest;Landroid/os/Messenger;Landroid/os/IBinder;)Landroid/net/DataUsageRequest;
+PLcom/android/server/net/NetworkStatsService;->removeUidsLocked([I)V
+HPLcom/android/server/net/NetworkStatsService;->removeUserLocked(I)V
+HPLcom/android/server/net/NetworkStatsService;->resolveSubscriptionPlan(Landroid/net/NetworkTemplate;I)Landroid/telephony/SubscriptionPlan;
 HSPLcom/android/server/net/NetworkStatsService;->setHandler(Landroid/os/Handler;Landroid/os/Handler$Callback;)V
-HPLcom/android/server/net/NetworkStatsService;->setUidForeground(IZ)V
+HSPLcom/android/server/net/NetworkStatsService;->setUidForeground(IZ)V
+PLcom/android/server/net/NetworkStatsService;->shutdownLocked()V
 HSPLcom/android/server/net/NetworkStatsService;->systemReady()V
+HPLcom/android/server/net/NetworkStatsService;->unregisterUsageRequest(Landroid/net/DataUsageRequest;)V
 HPLcom/android/server/net/NetworkStatsService;->updateIfaces([Landroid/net/Network;[Landroid/net/NetworkState;Ljava/lang/String;)V
-PLcom/android/server/net/NetworkStatsService;->updateIfacesLocked([Landroid/net/Network;[Landroid/net/NetworkState;)V
+HPLcom/android/server/net/NetworkStatsService;->updateIfacesLocked([Landroid/net/Network;[Landroid/net/NetworkState;)V
 HSPLcom/android/server/net/NetworkStatsService;->updatePersistThresholdsLocked()V
 HSPLcom/android/server/net/watchlist/-$$Lambda$WatchlistLoggingHandler$GBD0dX6RhipHIkM0Z_B5jLlwfHQ;-><init>(Lcom/android/server/net/watchlist/WatchlistLoggingHandler;I)V
 HSPLcom/android/server/net/watchlist/-$$Lambda$WatchlistLoggingHandler$GBD0dX6RhipHIkM0Z_B5jLlwfHQ;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/net/watchlist/DigestUtils;->getSha256Hash(Ljava/io/File;)[B
 HSPLcom/android/server/net/watchlist/DigestUtils;->getSha256Hash(Ljava/io/InputStream;)[B
+HSPLcom/android/server/net/watchlist/HarmfulCrcs;-><init>(Ljava/util/List;)V
+HPLcom/android/server/net/watchlist/HarmfulCrcs;->contains(I)Z
+HPLcom/android/server/net/watchlist/HarmfulCrcs;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/net/watchlist/HarmfulDigests;-><init>(Ljava/util/List;)V
+HPLcom/android/server/net/watchlist/HarmfulDigests;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/net/watchlist/NetworkWatchlistService$1;-><init>(Lcom/android/server/net/watchlist/NetworkWatchlistService;)V
 HPLcom/android/server/net/watchlist/NetworkWatchlistService$1;->onConnectEvent(Ljava/lang/String;IJI)V
 HPLcom/android/server/net/watchlist/NetworkWatchlistService$1;->onDnsEvent(IIILjava/lang/String;[Ljava/lang/String;IJI)V
@@ -12103,7 +20324,7 @@
 HSPLcom/android/server/net/watchlist/NetworkWatchlistService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/net/watchlist/NetworkWatchlistService;->access$100(Lcom/android/server/net/watchlist/NetworkWatchlistService;)V
 HSPLcom/android/server/net/watchlist/NetworkWatchlistService;->access$200(Lcom/android/server/net/watchlist/NetworkWatchlistService;)V
-PLcom/android/server/net/watchlist/NetworkWatchlistService;->access$300(Lcom/android/server/net/watchlist/NetworkWatchlistService;)Z
+HPLcom/android/server/net/watchlist/NetworkWatchlistService;->access$300(Lcom/android/server/net/watchlist/NetworkWatchlistService;)Z
 PLcom/android/server/net/watchlist/NetworkWatchlistService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/net/watchlist/NetworkWatchlistService;->enforceWatchlistLoggingPermission()V
 HSPLcom/android/server/net/watchlist/NetworkWatchlistService;->init()V
@@ -12112,27 +20333,32 @@
 HSPLcom/android/server/net/watchlist/NetworkWatchlistService;->startWatchlistLogging()Z
 HSPLcom/android/server/net/watchlist/NetworkWatchlistService;->startWatchlistLoggingImpl()Z
 HPLcom/android/server/net/watchlist/PrivacyUtils;->createDpEncodedReportMap(Z[BLjava/util/List;Lcom/android/server/net/watchlist/WatchlistReportDbHelper$AggregatedResult;)Ljava/util/Map;
-PLcom/android/server/net/watchlist/PrivacyUtils;->createLongitudinalReportingConfig(Ljava/lang/String;)Landroid/privacy/internal/longitudinalreporting/LongitudinalReportingConfig;
+HPLcom/android/server/net/watchlist/PrivacyUtils;->createLongitudinalReportingConfig(Ljava/lang/String;)Landroid/privacy/internal/longitudinalreporting/LongitudinalReportingConfig;
 HPLcom/android/server/net/watchlist/PrivacyUtils;->createSecureDPEncoder([BLjava/lang/String;)Landroid/privacy/DifferentialPrivacyEncoder;
 PLcom/android/server/net/watchlist/ReportEncoder;->encodeWatchlistReport(Lcom/android/server/net/watchlist/WatchlistConfig;[BLjava/util/List;Lcom/android/server/net/watchlist/WatchlistReportDbHelper$AggregatedResult;)[B
-PLcom/android/server/net/watchlist/ReportEncoder;->serializeReport(Lcom/android/server/net/watchlist/WatchlistConfig;Ljava/util/Map;)[B
+HPLcom/android/server/net/watchlist/ReportEncoder;->serializeReport(Lcom/android/server/net/watchlist/WatchlistConfig;Ljava/util/Map;)[B
 HSPLcom/android/server/net/watchlist/ReportWatchlistJobService;-><clinit>()V
 PLcom/android/server/net/watchlist/ReportWatchlistJobService;-><init>()V
 PLcom/android/server/net/watchlist/ReportWatchlistJobService;->onStartJob(Landroid/app/job/JobParameters;)Z
+PLcom/android/server/net/watchlist/ReportWatchlistJobService;->onStopJob(Landroid/app/job/JobParameters;)Z
 HSPLcom/android/server/net/watchlist/ReportWatchlistJobService;->schedule(Landroid/content/Context;)V
+HSPLcom/android/server/net/watchlist/WatchlistConfig$CrcShaDigests;-><init>(Lcom/android/server/net/watchlist/HarmfulCrcs;Lcom/android/server/net/watchlist/HarmfulDigests;)V
 HSPLcom/android/server/net/watchlist/WatchlistConfig;-><clinit>()V
 HSPLcom/android/server/net/watchlist/WatchlistConfig;-><init>()V
 HSPLcom/android/server/net/watchlist/WatchlistConfig;-><init>(Ljava/io/File;)V
-PLcom/android/server/net/watchlist/WatchlistConfig;->containsDomain(Ljava/lang/String;)Z
-PLcom/android/server/net/watchlist/WatchlistConfig;->containsIp(Ljava/lang/String;)Z
+HPLcom/android/server/net/watchlist/WatchlistConfig;->containsDomain(Ljava/lang/String;)Z
+HPLcom/android/server/net/watchlist/WatchlistConfig;->containsIp(Ljava/lang/String;)Z
 PLcom/android/server/net/watchlist/WatchlistConfig;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/net/watchlist/WatchlistConfig;->getCrc32(Ljava/lang/String;)I
 HSPLcom/android/server/net/watchlist/WatchlistConfig;->getInstance()Lcom/android/server/net/watchlist/WatchlistConfig;
 PLcom/android/server/net/watchlist/WatchlistConfig;->getWatchlistConfigHash()[B
 PLcom/android/server/net/watchlist/WatchlistConfig;->isConfigSecure()Z
+HSPLcom/android/server/net/watchlist/WatchlistConfig;->parseHashes(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Ljava/util/List;)V
 HSPLcom/android/server/net/watchlist/WatchlistConfig;->reloadConfig()V
 HSPLcom/android/server/net/watchlist/WatchlistConfig;->removeTestModeConfig()V
 HSPLcom/android/server/net/watchlist/WatchlistLoggingHandler;-><clinit>()V
 HSPLcom/android/server/net/watchlist/WatchlistLoggingHandler;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
+PLcom/android/server/net/watchlist/WatchlistLoggingHandler;->addEncodedReportToDropBox([B)V
 HPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->asyncNetworkEvent(Ljava/lang/String;[Ljava/lang/String;I)V
 HSPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->getAllDigestsForReport(Lcom/android/server/net/watchlist/WatchlistReportDbHelper$AggregatedResult;)Ljava/util/List;
 HPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->getAllSubDomains(Ljava/lang/String;)[Ljava/lang/String;
@@ -12142,18 +20368,18 @@
 HSPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->getPrimaryUserId()I
 HSPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->handleMessage(Landroid/os/Message;)V
 HPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->handleNetworkEvent(Ljava/lang/String;[Ljava/lang/String;IJ)V
-PLcom/android/server/net/watchlist/WatchlistLoggingHandler;->isHostInWatchlist(Ljava/lang/String;)Z
-PLcom/android/server/net/watchlist/WatchlistLoggingHandler;->isIpInWatchlist(Ljava/lang/String;)Z
+HPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->isHostInWatchlist(Ljava/lang/String;)Z
+HPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->isIpInWatchlist(Ljava/lang/String;)Z
 HSPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->lambda$getDigestFromUid$0$WatchlistLoggingHandler(ILjava/lang/Integer;)[B
 HSPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->reportWatchlistIfNecessary()V
-PLcom/android/server/net/watchlist/WatchlistLoggingHandler;->searchAllSubDomainsInWatchlist(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/net/watchlist/WatchlistLoggingHandler;->searchIpInWatchlist([Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->searchAllSubDomainsInWatchlist(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->searchIpInWatchlist([Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->shouldReportNetworkWatchlist(J)Z
 HSPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->tryAggregateRecords(J)V
 HSPLcom/android/server/net/watchlist/WatchlistReportDbHelper$AggregatedResult;-><init>(Ljava/util/Set;Ljava/lang/String;Ljava/util/HashMap;)V
 HSPLcom/android/server/net/watchlist/WatchlistReportDbHelper;-><clinit>()V
 HSPLcom/android/server/net/watchlist/WatchlistReportDbHelper;-><init>(Landroid/content/Context;)V
-PLcom/android/server/net/watchlist/WatchlistReportDbHelper;->cleanup(J)Z
+HSPLcom/android/server/net/watchlist/WatchlistReportDbHelper;->cleanup(J)Z
 HSPLcom/android/server/net/watchlist/WatchlistReportDbHelper;->getAggregatedRecords(J)Lcom/android/server/net/watchlist/WatchlistReportDbHelper$AggregatedResult;
 HSPLcom/android/server/net/watchlist/WatchlistReportDbHelper;->getInstance(Landroid/content/Context;)Lcom/android/server/net/watchlist/WatchlistReportDbHelper;
 HSPLcom/android/server/net/watchlist/WatchlistReportDbHelper;->getSystemWatchlistDbFile()Ljava/io/File;
@@ -12165,78 +20391,118 @@
 HSPLcom/android/server/net/watchlist/WatchlistSettings;->getSystemWatchlistFile()Ljava/io/File;
 HSPLcom/android/server/net/watchlist/WatchlistSettings;->parseSecretKey(Lorg/xmlpull/v1/XmlPullParser;)[B
 HSPLcom/android/server/net/watchlist/WatchlistSettings;->reloadSettings()V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$10$BRIIoO5T43uig1Sv3P_yA2lc3LA;-><init>(Lcom/android/server/notification/NotificationManagerService$10;Ljava/lang/String;)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$10$BRIIoO5T43uig1Sv3P_yA2lc3LA;->run()V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$11$JotEN8cxCghuwRUNQKNwudTtDmM;-><init>(Lcom/android/server/notification/NotificationManagerService$11;Ljava/lang/String;)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$11$JotEN8cxCghuwRUNQKNwudTtDmM;->run()V
 PLcom/android/server/notification/-$$Lambda$NotificationManagerService$11$zVdn9N0ybkMxz8xM8Qa1AXowlic;-><init>(Lcom/android/server/notification/NotificationManagerService$11;Ljava/lang/String;II)V
 PLcom/android/server/notification/-$$Lambda$NotificationManagerService$11$zVdn9N0ybkMxz8xM8Qa1AXowlic;->run()V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$12$-k8J5tgk6UDzy6Im2nYiWZgVEDI;-><init>(Lcom/android/server/notification/NotificationManagerService$12;Ljava/lang/String;II)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$12$-k8J5tgk6UDzy6Im2nYiWZgVEDI;->run()V
 HSPLcom/android/server/notification/-$$Lambda$NotificationManagerService$12gEiRp5yhg_vLn2NsMtnAkm3GI;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 PLcom/android/server/notification/-$$Lambda$NotificationManagerService$12gEiRp5yhg_vLn2NsMtnAkm3GI;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
-PLcom/android/server/notification/-$$Lambda$NotificationManagerService$14$hWnH6mjUAxwVmpU3QRoPHh5_FyI;-><init>(II)V
+HSPLcom/android/server/notification/-$$Lambda$NotificationManagerService$14$hWnH6mjUAxwVmpU3QRoPHh5_FyI;-><init>(II)V
 HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$14$hWnH6mjUAxwVmpU3QRoPHh5_FyI;->apply(I)Z
-PLcom/android/server/notification/-$$Lambda$NotificationManagerService$1IFJYiXNBcQVsabIke0xY_TgCZI;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Landroid/os/VibrationEffect;)V
-PLcom/android/server/notification/-$$Lambda$NotificationManagerService$1IFJYiXNBcQVsabIke0xY_TgCZI;->run()V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$15$U436K_bi4RF3tuE3ATVdL4kLpsQ;-><init>(I)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$15$U436K_bi4RF3tuE3ATVdL4kLpsQ;->apply(I)Z
+HSPLcom/android/server/notification/-$$Lambda$NotificationManagerService$15$wXaTmmz_lG6grUqU8upk0686eXA;-><init>(II)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$15$wXaTmmz_lG6grUqU8upk0686eXA;->apply(I)Z
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$16$zTgrLv-fwhUBKBfo6G4cZaGAhWs;-><init>(I)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$16$zTgrLv-fwhUBKBfo6G4cZaGAhWs;->apply(I)Z
+HSPLcom/android/server/notification/-$$Lambda$NotificationManagerService$1IFJYiXNBcQVsabIke0xY_TgCZI;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Landroid/os/VibrationEffect;)V
+HSPLcom/android/server/notification/-$$Lambda$NotificationManagerService$1IFJYiXNBcQVsabIke0xY_TgCZI;->run()V
 PLcom/android/server/notification/-$$Lambda$NotificationManagerService$CancelNotificationRunnable$1i8BOFS2Ap_BvazcwqssFxW6U1U;-><clinit>()V
 PLcom/android/server/notification/-$$Lambda$NotificationManagerService$CancelNotificationRunnable$1i8BOFS2Ap_BvazcwqssFxW6U1U;-><init>()V
 PLcom/android/server/notification/-$$Lambda$NotificationManagerService$CancelNotificationRunnable$1i8BOFS2Ap_BvazcwqssFxW6U1U;->apply(I)Z
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$-pTtydmbKR53sVGAi5B-_cGeLDo;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;Ljava/lang/CharSequence;Z)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$-pTtydmbKR53sVGAi5B-_cGeLDo;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$2uJN0X0VDgKmWRoJqYsux0bhlYo;-><init>(Ljava/util/function/BiConsumer;Landroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$2uJN0X0VDgKmWRoJqYsux0bhlYo;->run()V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$3ktx5hfF9rabi25qaQLZ-YvqPO4;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;Ljava/lang/CharSequence;Z)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$3ktx5hfF9rabi25qaQLZ-YvqPO4;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$6E04T6AkRfKEIjCw7jopFAFGv30;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$6E04T6AkRfKEIjCw7jopFAFGv30;->run()V
 HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$FrOqX0VMAS0gs6vhrmVEabwpi2k;-><init>(Ljava/util/function/BiConsumer;Landroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
 HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$FrOqX0VMAS0gs6vhrmVEabwpi2k;->run()V
 PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$Rqv2CeOOOVMkVDRSXa6GcHvi5Vc;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;Landroid/app/Notification$Action;Z)V
 PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$Rqv2CeOOOVMkVDRSXa6GcHvi5Vc;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$S2EUT9RRW0P4hWLU4YD7mrnGPII;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;ZLcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$S2EUT9RRW0P4hWLU4YD7mrnGPII;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$fguXa8ZWUwjg4Css0w9IvLwqTno;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;Z)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$fguXa8ZWUwjg4Css0w9IvLwqTno;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$h7WPxGy6WExnaTHJZiTUqSURFAU;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;ZZ)V
 PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$h7WPxGy6WExnaTHJZiTUqSURFAU;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$hdUZ_hmwLutGkIKdq7dHKjQLP4E;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/util/ArrayList;)V
-PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$hdUZ_hmwLutGkIKdq7dHKjQLP4E;->run()V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$hdUZ_hmwLutGkIKdq7dHKjQLP4E;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/util/ArrayList;)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$hdUZ_hmwLutGkIKdq7dHKjQLP4E;->run()V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$j__6VKF3Ej58Ecwq9KDrcYMRydI;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$j__6VKF3Ej58Ecwq9KDrcYMRydI;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$ou_FTabXQDrMmZWvZYfT09jSrKI;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;ZZ)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$ou_FTabXQDrMmZWvZYfT09jSrKI;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$pzk58E_uhN8zWEPqtMQoUZpAM4k;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$pzk58E_uhN8zWEPqtMQoUZpAM4k;->run()V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$qNPzonSecZ4lX0Og0m8NERBS_UQ;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$qNPzonSecZ4lX0Og0m8NERBS_UQ;->run()V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$uDzVB3NwVCerv0Z5si1fGXZkZu4;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;Landroid/app/Notification$Action;Z)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$uDzVB3NwVCerv0Z5si1fGXZkZu4;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$xFD5w0lXKCfWgU2f03eJAOPQABs;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;ZLcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$xFD5w0lXKCfWgU2f03eJAOPQABs;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$3bretMyG2YyNFKU5plLQgmxuGr0;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$3bretMyG2YyNFKU5plLQgmxuGr0;->run()V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$3bretMyG2YyNFKU5plLQgmxuGr0;->run()V
 HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$Srt8NNqA1xJUAp_7nDU6CBZJm_0;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V
-PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$Srt8NNqA1xJUAp_7nDU6CBZJm_0;->run()V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$Srt8NNqA1xJUAp_7nDU6CBZJm_0;->run()V
 HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$T5BM1IF40aMGtqZZRr6BWGjzNxA;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
-PLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$T5BM1IF40aMGtqZZRr6BWGjzNxA;->run()V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$T5BM1IF40aMGtqZZRr6BWGjzNxA;->run()V
 HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$PostNotificationRunnable$9JuPmiaA-c5lGdegev6EaTigwWc;-><init>(Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;Lcom/android/server/notification/NotificationRecord;Landroid/service/notification/StatusBarNotification;)V
 HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$PostNotificationRunnable$9JuPmiaA-c5lGdegev6EaTigwWc;->run()V
 PLcom/android/server/notification/-$$Lambda$NotificationManagerService$msGTh8UV2euOI6xhjY-rx_tZTLM;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/content/pm/UserInfo;)V
 PLcom/android/server/notification/-$$Lambda$NotificationManagerService$msGTh8UV2euOI6xhjY-rx_tZTLM;->run()V
-PLcom/android/server/notification/-$$Lambda$NotificationManagerService$qSGWKI1fXQ1cTJ2fD072f_33txY;-><init>(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/CharSequence;)V
-PLcom/android/server/notification/-$$Lambda$NotificationManagerService$qSGWKI1fXQ1cTJ2fD072f_33txY;->runOrThrow()V
-HPLcom/android/server/notification/-$$Lambda$NotificationRecord$XgkrZGcjOHPHem34oE9qLGy3siA;-><init>(Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/-$$Lambda$NotificationRecord$XgkrZGcjOHPHem34oE9qLGy3siA;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$qSGWKI1fXQ1cTJ2fD072f_33txY;-><init>(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/CharSequence;)V
+HPLcom/android/server/notification/-$$Lambda$NotificationManagerService$qSGWKI1fXQ1cTJ2fD072f_33txY;->runOrThrow()V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$qbzDjihCkTumQH-EnAW4i5wobvM;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/content/pm/UserInfo;)V
+PLcom/android/server/notification/-$$Lambda$NotificationManagerService$qbzDjihCkTumQH-EnAW4i5wobvM;->run()V
+HSPLcom/android/server/notification/-$$Lambda$NotificationRecord$XgkrZGcjOHPHem34oE9qLGy3siA;-><init>(Lcom/android/server/notification/NotificationRecord;)V
+HSPLcom/android/server/notification/-$$Lambda$NotificationRecord$XgkrZGcjOHPHem34oE9qLGy3siA;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/notification/-$$Lambda$SnoozeHelper$333G5Hgba3G7RU9lYp0HmgKJBvA;-><init>(JLorg/xmlpull/v1/XmlSerializer;)V
+PLcom/android/server/notification/-$$Lambda$SnoozeHelper$333G5Hgba3G7RU9lYp0HmgKJBvA;->insert(Ljava/lang/Object;)V
 HSPLcom/android/server/notification/-$$Lambda$SnoozeHelper$uY_yjjODxoDQVadkBTGNFqh7pco;-><init>(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/notification/-$$Lambda$V4J7df5A6vhSIuw7Ym9xgkfahto;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 HSPLcom/android/server/notification/-$$Lambda$V4J7df5A6vhSIuw7Ym9xgkfahto;->test(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
-PLcom/android/server/notification/AlertRateLimiter;-><init>()V
-PLcom/android/server/notification/AlertRateLimiter;->shouldRateLimitAlert(J)Z
+HSPLcom/android/server/notification/AlertRateLimiter;-><init>()V
+HSPLcom/android/server/notification/AlertRateLimiter;->shouldRateLimitAlert(J)Z
 HSPLcom/android/server/notification/BadgeExtractor;-><init>()V
 HSPLcom/android/server/notification/BadgeExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/BadgeExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/BadgeExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
 HSPLcom/android/server/notification/BadgeExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/BadgeExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/BubbleExtractor;-><init>()V
 HSPLcom/android/server/notification/BubbleExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/BubbleExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/BubbleExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
 HSPLcom/android/server/notification/BubbleExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/BubbleExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/CalendarTracker$1;-><init>(Lcom/android/server/notification/CalendarTracker;Landroid/os/Handler;)V
-PLcom/android/server/notification/CalendarTracker$1;->onChange(ZLandroid/net/Uri;)V
-PLcom/android/server/notification/CalendarTracker$CheckEventResult;-><init>()V
+HPLcom/android/server/notification/CalendarTracker$1;->onChange(ZLandroid/net/Uri;)V
+HSPLcom/android/server/notification/CalendarTracker$CheckEventResult;-><init>()V
 HSPLcom/android/server/notification/CalendarTracker;-><clinit>()V
 HSPLcom/android/server/notification/CalendarTracker;-><init>(Landroid/content/Context;Landroid/content/Context;)V
-PLcom/android/server/notification/CalendarTracker;->checkEvent(Landroid/service/notification/ZenModeConfig$EventInfo;J)Lcom/android/server/notification/CalendarTracker$CheckEventResult;
+PLcom/android/server/notification/CalendarTracker;->access$000()Z
+PLcom/android/server/notification/CalendarTracker;->access$200(Lcom/android/server/notification/CalendarTracker;)Lcom/android/server/notification/CalendarTracker$Callback;
+HSPLcom/android/server/notification/CalendarTracker;->checkEvent(Landroid/service/notification/ZenModeConfig$EventInfo;J)Lcom/android/server/notification/CalendarTracker$CheckEventResult;
 PLcom/android/server/notification/CalendarTracker;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/notification/CalendarTracker;->getCalendarsWithAccess()Landroid/util/ArraySet;
-PLcom/android/server/notification/CalendarTracker;->meetsAttendee(Landroid/service/notification/ZenModeConfig$EventInfo;ILjava/lang/String;)Z
+HSPLcom/android/server/notification/CalendarTracker;->getCalendarsWithAccess()Landroid/util/ArraySet;
+HPLcom/android/server/notification/CalendarTracker;->meetsAttendee(Landroid/service/notification/ZenModeConfig$EventInfo;ILjava/lang/String;)Z
+PLcom/android/server/notification/CalendarTracker;->meetsReply(II)Z
 HSPLcom/android/server/notification/CalendarTracker;->setCallback(Lcom/android/server/notification/CalendarTracker$Callback;)V
-PLcom/android/server/notification/CalendarTracker;->setRegistered(Z)V
+HSPLcom/android/server/notification/CalendarTracker;->setRegistered(Z)V
 HSPLcom/android/server/notification/ConditionProviders$ConditionRecord;-><init>(Landroid/net/Uri;Landroid/content/ComponentName;)V
 HSPLcom/android/server/notification/ConditionProviders$ConditionRecord;-><init>(Landroid/net/Uri;Landroid/content/ComponentName;Lcom/android/server/notification/ConditionProviders$1;)V
 PLcom/android/server/notification/ConditionProviders$ConditionRecord;->toString()Ljava/lang/String;
 HSPLcom/android/server/notification/ConditionProviders;-><init>(Landroid/content/Context;Lcom/android/server/notification/ManagedServices$UserProfiles;Landroid/content/pm/IPackageManager;)V
 HSPLcom/android/server/notification/ConditionProviders;->addSystemProvider(Lcom/android/server/notification/SystemConditionProviderService;)V
 PLcom/android/server/notification/ConditionProviders;->asInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
-PLcom/android/server/notification/ConditionProviders;->checkServiceToken(Landroid/service/notification/IConditionProvider;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
+HSPLcom/android/server/notification/ConditionProviders;->checkServiceToken(Landroid/service/notification/IConditionProvider;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
 PLcom/android/server/notification/ConditionProviders;->dump(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 HSPLcom/android/server/notification/ConditionProviders;->ensureRecordExists(Landroid/content/ComponentName;Landroid/net/Uri;Landroid/service/notification/IConditionProvider;)V
-PLcom/android/server/notification/ConditionProviders;->findCondition(Landroid/content/ComponentName;Landroid/net/Uri;)Landroid/service/notification/Condition;
+HSPLcom/android/server/notification/ConditionProviders;->findCondition(Landroid/content/ComponentName;Landroid/net/Uri;)Landroid/service/notification/Condition;
 HSPLcom/android/server/notification/ConditionProviders;->findConditionProvider(Landroid/content/ComponentName;)Landroid/service/notification/IConditionProvider;
 HSPLcom/android/server/notification/ConditionProviders;->getConfig()Lcom/android/server/notification/ManagedServices$Config;
 HSPLcom/android/server/notification/ConditionProviders;->getRecordLocked(Landroid/net/Uri;Landroid/content/ComponentName;Z)Lcom/android/server/notification/ConditionProviders$ConditionRecord;
@@ -12244,51 +20510,67 @@
 HSPLcom/android/server/notification/ConditionProviders;->getSystemProviders()Ljava/lang/Iterable;
 HSPLcom/android/server/notification/ConditionProviders;->isSystemProviderEnabled(Ljava/lang/String;)Z
 PLcom/android/server/notification/ConditionProviders;->isValidEntry(Ljava/lang/String;I)Z
-PLcom/android/server/notification/ConditionProviders;->notifyConditions(Ljava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;[Landroid/service/notification/Condition;)V
+HSPLcom/android/server/notification/ConditionProviders;->notifyConditions(Ljava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;[Landroid/service/notification/Condition;)V
 HSPLcom/android/server/notification/ConditionProviders;->onBootPhaseAppsCanStart()V
-PLcom/android/server/notification/ConditionProviders;->onPackagesChanged(Z[Ljava/lang/String;[I)V
+HPLcom/android/server/notification/ConditionProviders;->onPackagesChanged(Z[Ljava/lang/String;[I)V
 HSPLcom/android/server/notification/ConditionProviders;->onServiceAdded(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
-PLcom/android/server/notification/ConditionProviders;->onServiceRemovedLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
-PLcom/android/server/notification/ConditionProviders;->onUserSwitched(I)V
-PLcom/android/server/notification/ConditionProviders;->provider(Lcom/android/server/notification/ConditionProviders$ConditionRecord;)Landroid/service/notification/IConditionProvider;
+HPLcom/android/server/notification/ConditionProviders;->onServiceRemovedLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+HSPLcom/android/server/notification/ConditionProviders;->onUserSwitched(I)V
+HSPLcom/android/server/notification/ConditionProviders;->provider(Lcom/android/server/notification/ConditionProviders$ConditionRecord;)Landroid/service/notification/IConditionProvider;
 HSPLcom/android/server/notification/ConditionProviders;->provider(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/IConditionProvider;
-PLcom/android/server/notification/ConditionProviders;->removeDuplicateConditions(Ljava/lang/String;[Landroid/service/notification/Condition;)[Landroid/service/notification/Condition;
+HSPLcom/android/server/notification/ConditionProviders;->removeDuplicateConditions(Ljava/lang/String;[Landroid/service/notification/Condition;)[Landroid/service/notification/Condition;
+PLcom/android/server/notification/ConditionProviders;->resetPackage(Ljava/lang/String;I)Z
 HSPLcom/android/server/notification/ConditionProviders;->safeSet([Ljava/lang/Object;)Landroid/util/ArraySet;
 HSPLcom/android/server/notification/ConditionProviders;->setCallback(Lcom/android/server/notification/ConditionProviders$Callback;)V
-PLcom/android/server/notification/ConditionProviders;->subscribeIfNecessary(Landroid/content/ComponentName;Landroid/net/Uri;)Z
-PLcom/android/server/notification/ConditionProviders;->subscribeLocked(Lcom/android/server/notification/ConditionProviders$ConditionRecord;)V
+HSPLcom/android/server/notification/ConditionProviders;->subscribeIfNecessary(Landroid/content/ComponentName;Landroid/net/Uri;)Z
+HSPLcom/android/server/notification/ConditionProviders;->subscribeLocked(Lcom/android/server/notification/ConditionProviders$ConditionRecord;)V
+PLcom/android/server/notification/ConditionProviders;->unsubscribeIfNecessary(Landroid/content/ComponentName;Landroid/net/Uri;)V
+PLcom/android/server/notification/ConditionProviders;->unsubscribeLocked(Lcom/android/server/notification/ConditionProviders$ConditionRecord;)V
 HSPLcom/android/server/notification/ConditionProviders;->writeDefaults(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/notification/CountdownConditionProvider$Receiver;-><init>(Lcom/android/server/notification/CountdownConditionProvider;)V
 HSPLcom/android/server/notification/CountdownConditionProvider$Receiver;-><init>(Lcom/android/server/notification/CountdownConditionProvider;Lcom/android/server/notification/CountdownConditionProvider$1;)V
+PLcom/android/server/notification/CountdownConditionProvider$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/CountdownConditionProvider;-><clinit>()V
 HSPLcom/android/server/notification/CountdownConditionProvider;-><init>()V
+PLcom/android/server/notification/CountdownConditionProvider;->access$100()Ljava/lang/String;
+PLcom/android/server/notification/CountdownConditionProvider;->access$200()Z
+PLcom/android/server/notification/CountdownConditionProvider;->access$300(JZI)Landroid/service/notification/Condition;
 HSPLcom/android/server/notification/CountdownConditionProvider;->asInterface()Landroid/service/notification/IConditionProvider;
 HSPLcom/android/server/notification/CountdownConditionProvider;->attachBase(Landroid/content/Context;)V
 PLcom/android/server/notification/CountdownConditionProvider;->dump(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 HSPLcom/android/server/notification/CountdownConditionProvider;->getComponent()Landroid/content/ComponentName;
 HSPLcom/android/server/notification/CountdownConditionProvider;->isValidConditionId(Landroid/net/Uri;)Z
+PLcom/android/server/notification/CountdownConditionProvider;->newCondition(JZI)Landroid/service/notification/Condition;
 HSPLcom/android/server/notification/CountdownConditionProvider;->onBootComplete()V
-PLcom/android/server/notification/CountdownConditionProvider;->onConnected()V
+HSPLcom/android/server/notification/CountdownConditionProvider;->onConnected()V
+PLcom/android/server/notification/CountdownConditionProvider;->onSubscribe(Landroid/net/Uri;)V
+PLcom/android/server/notification/CountdownConditionProvider;->onUnsubscribe(Landroid/net/Uri;)V
 PLcom/android/server/notification/CountdownConditionProvider;->tryParseDescription(Landroid/net/Uri;)Ljava/lang/String;
 HSPLcom/android/server/notification/CriticalNotificationExtractor;-><init>()V
 HSPLcom/android/server/notification/CriticalNotificationExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/CriticalNotificationExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/CriticalNotificationExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
 HSPLcom/android/server/notification/CriticalNotificationExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/CriticalNotificationExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/CriticalNotificationExtractor;->supportsCriticalNotifications(Landroid/content/Context;)Z
 HSPLcom/android/server/notification/EventConditionProvider$1;-><init>(Lcom/android/server/notification/EventConditionProvider;)V
+PLcom/android/server/notification/EventConditionProvider$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/EventConditionProvider$2;-><init>(Lcom/android/server/notification/EventConditionProvider;)V
-PLcom/android/server/notification/EventConditionProvider$2;->onChanged()V
+HPLcom/android/server/notification/EventConditionProvider$2;->onChanged()V
 HSPLcom/android/server/notification/EventConditionProvider$3;-><init>(Lcom/android/server/notification/EventConditionProvider;)V
 PLcom/android/server/notification/EventConditionProvider$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/EventConditionProvider$4;-><init>(Lcom/android/server/notification/EventConditionProvider;)V
 HSPLcom/android/server/notification/EventConditionProvider$4;->run()V
 HSPLcom/android/server/notification/EventConditionProvider;-><clinit>()V
 HSPLcom/android/server/notification/EventConditionProvider;-><init>()V
+PLcom/android/server/notification/EventConditionProvider;->access$000(Lcom/android/server/notification/EventConditionProvider;)V
+PLcom/android/server/notification/EventConditionProvider;->access$100()Z
+HPLcom/android/server/notification/EventConditionProvider;->access$200(Lcom/android/server/notification/EventConditionProvider;)Ljava/lang/Runnable;
+HPLcom/android/server/notification/EventConditionProvider;->access$300(Lcom/android/server/notification/EventConditionProvider;)Landroid/os/Handler;
+PLcom/android/server/notification/EventConditionProvider;->access$400(Lcom/android/server/notification/EventConditionProvider;)V
 HSPLcom/android/server/notification/EventConditionProvider;->access$500(Lcom/android/server/notification/EventConditionProvider;)V
 HSPLcom/android/server/notification/EventConditionProvider;->asInterface()Landroid/service/notification/IConditionProvider;
 HSPLcom/android/server/notification/EventConditionProvider;->attachBase(Landroid/content/Context;)V
-PLcom/android/server/notification/EventConditionProvider;->createCondition(Landroid/net/Uri;I)Landroid/service/notification/Condition;
+HSPLcom/android/server/notification/EventConditionProvider;->createCondition(Landroid/net/Uri;I)Landroid/service/notification/Condition;
 PLcom/android/server/notification/EventConditionProvider;->dump(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 HSPLcom/android/server/notification/EventConditionProvider;->evaluateSubscriptions()V
 HSPLcom/android/server/notification/EventConditionProvider;->evaluateSubscriptionsW()V
@@ -12296,8 +20578,8 @@
 HSPLcom/android/server/notification/EventConditionProvider;->getContextForUser(Landroid/content/Context;Landroid/os/UserHandle;)Landroid/content/Context;
 HSPLcom/android/server/notification/EventConditionProvider;->isValidConditionId(Landroid/net/Uri;)Z
 HSPLcom/android/server/notification/EventConditionProvider;->onBootComplete()V
-PLcom/android/server/notification/EventConditionProvider;->onConnected()V
-PLcom/android/server/notification/EventConditionProvider;->onSubscribe(Landroid/net/Uri;)V
+HSPLcom/android/server/notification/EventConditionProvider;->onConnected()V
+HSPLcom/android/server/notification/EventConditionProvider;->onSubscribe(Landroid/net/Uri;)V
 HSPLcom/android/server/notification/EventConditionProvider;->reloadTrackers()V
 HSPLcom/android/server/notification/EventConditionProvider;->rescheduleAlarm(JJ)V
 HSPLcom/android/server/notification/EventConditionProvider;->setRegistered(Z)V
@@ -12307,15 +20589,16 @@
 HSPLcom/android/server/notification/GroupHelper;-><clinit>()V
 HSPLcom/android/server/notification/GroupHelper;-><init>(ILcom/android/server/notification/GroupHelper$Callback;)V
 HPLcom/android/server/notification/GroupHelper;->addToOngoingGroupCount(Landroid/service/notification/StatusBarNotification;Z)V
-PLcom/android/server/notification/GroupHelper;->adjustNotificationBundling(Ljava/util/List;Z)V
+PLcom/android/server/notification/GroupHelper;->adjustAutogroupingSummary(ILjava/lang/String;Ljava/lang/String;Z)V
+HPLcom/android/server/notification/GroupHelper;->adjustNotificationBundling(Ljava/util/List;Z)V
 HPLcom/android/server/notification/GroupHelper;->generatePackageGroupKey(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/notification/GroupHelper;->maybeUngroup(Landroid/service/notification/StatusBarNotification;ZI)V
-PLcom/android/server/notification/GroupHelper;->onNotificationPosted(Landroid/service/notification/StatusBarNotification;Z)V
-PLcom/android/server/notification/GroupHelper;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;)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
+HPLcom/android/server/notification/GroupHelper;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;)V
 HPLcom/android/server/notification/GroupHelper;->onNotificationUpdated(Landroid/service/notification/StatusBarNotification;Z)V
 HSPLcom/android/server/notification/ImportanceExtractor;-><init>()V
 HSPLcom/android/server/notification/ImportanceExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/ImportanceExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/ImportanceExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
 HSPLcom/android/server/notification/ImportanceExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/ImportanceExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 PLcom/android/server/notification/ManagedServices$1$1;-><init>(Lcom/android/server/notification/ManagedServices$1;Landroid/content/ComponentName;)V
@@ -12323,42 +20606,48 @@
 HSPLcom/android/server/notification/ManagedServices$1;-><init>(Lcom/android/server/notification/ManagedServices;ILandroid/util/Pair;ZI)V
 PLcom/android/server/notification/ManagedServices$1;->onBindingDied(Landroid/content/ComponentName;)V
 PLcom/android/server/notification/ManagedServices$1;->onNullBinding(Landroid/content/ComponentName;)V
-PLcom/android/server/notification/ManagedServices$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HSPLcom/android/server/notification/ManagedServices$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/notification/ManagedServices$1;->onServiceDisconnected(Landroid/content/ComponentName;)V
 HSPLcom/android/server/notification/ManagedServices$Config;-><init>()V
 HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;-><init>(Lcom/android/server/notification/ManagedServices;Landroid/os/IInterface;Landroid/content/ComponentName;IZLandroid/content/ServiceConnection;I)V
 PLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->binderDied()V
 PLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JLcom/android/server/notification/ManagedServices;)V
-HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->enabledAndUserMatches(I)Z
+HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->enabledAndUserMatches(I)Z
 PLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->getOwner()Lcom/android/server/notification/ManagedServices;
-HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->hashCode()I
-PLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isEnabledForCurrentProfiles()Z
+HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->hashCode()I
+HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isEnabledForCurrentProfiles()Z
 PLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isGuest(Lcom/android/server/notification/ManagedServices;)Z
 HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isPermittedForProfile(I)Z
-PLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isSameUser(I)Z
-PLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->supportsProfiles()Z
+HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isSameUser(I)Z
+HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->supportsProfiles()Z
 HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->toString()Ljava/lang/String;
 HSPLcom/android/server/notification/ManagedServices$UserProfiles;-><init>()V
 HSPLcom/android/server/notification/ManagedServices$UserProfiles;->getCurrentProfileIds()Landroid/util/IntArray;
 HPLcom/android/server/notification/ManagedServices$UserProfiles;->isCurrentProfile(I)Z
-HPLcom/android/server/notification/ManagedServices$UserProfiles;->isManagedProfile(I)Z
+HSPLcom/android/server/notification/ManagedServices$UserProfiles;->isManagedProfile(I)Z
 HSPLcom/android/server/notification/ManagedServices$UserProfiles;->updateCache(Landroid/content/Context;)V
 HSPLcom/android/server/notification/ManagedServices;-><init>(Landroid/content/Context;Ljava/lang/Object;Lcom/android/server/notification/ManagedServices$UserProfiles;Landroid/content/pm/IPackageManager;)V
-PLcom/android/server/notification/ManagedServices;->access$000(Lcom/android/server/notification/ManagedServices;)Ljava/lang/String;
-PLcom/android/server/notification/ManagedServices;->access$100(Lcom/android/server/notification/ManagedServices;)Landroid/util/ArraySet;
-PLcom/android/server/notification/ManagedServices;->access$1000(Lcom/android/server/notification/ManagedServices;)Landroid/util/ArraySet;
-PLcom/android/server/notification/ManagedServices;->access$200(Lcom/android/server/notification/ManagedServices;Landroid/os/IInterface;Landroid/content/ComponentName;IZLandroid/content/ServiceConnection;I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
-PLcom/android/server/notification/ManagedServices;->access$300(Lcom/android/server/notification/ManagedServices;)Ljava/util/ArrayList;
-PLcom/android/server/notification/ManagedServices;->access$800(Lcom/android/server/notification/ManagedServices;)Lcom/android/server/notification/ManagedServices$UserProfiles;
+HSPLcom/android/server/notification/ManagedServices;->access$000(Lcom/android/server/notification/ManagedServices;)Ljava/lang/String;
+HSPLcom/android/server/notification/ManagedServices;->access$100(Lcom/android/server/notification/ManagedServices;)Landroid/util/ArraySet;
+HSPLcom/android/server/notification/ManagedServices;->access$1000(Lcom/android/server/notification/ManagedServices;)Landroid/util/ArraySet;
+HSPLcom/android/server/notification/ManagedServices;->access$200(Lcom/android/server/notification/ManagedServices;Landroid/os/IInterface;Landroid/content/ComponentName;IZLandroid/content/ServiceConnection;I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
+HSPLcom/android/server/notification/ManagedServices;->access$300(Lcom/android/server/notification/ManagedServices;)Ljava/util/ArrayList;
+PLcom/android/server/notification/ManagedServices;->access$400(Lcom/android/server/notification/ManagedServices;Landroid/content/ServiceConnection;Landroid/content/ComponentName;I)V
+PLcom/android/server/notification/ManagedServices;->access$500(Lcom/android/server/notification/ManagedServices;Landroid/content/ComponentName;I)V
+PLcom/android/server/notification/ManagedServices;->access$600(Lcom/android/server/notification/ManagedServices;)Landroid/os/Handler;
+PLcom/android/server/notification/ManagedServices;->access$700(Lcom/android/server/notification/ManagedServices;)Ljava/util/ArrayList;
+HPLcom/android/server/notification/ManagedServices;->access$800(Lcom/android/server/notification/ManagedServices;)Lcom/android/server/notification/ManagedServices$UserProfiles;
+PLcom/android/server/notification/ManagedServices;->access$900(Lcom/android/server/notification/ManagedServices;Landroid/os/IInterface;I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
 HSPLcom/android/server/notification/ManagedServices;->addApprovedList(Ljava/lang/String;IZ)V
 HSPLcom/android/server/notification/ManagedServices;->bindToServices(Landroid/util/SparseArray;)V
 HSPLcom/android/server/notification/ManagedServices;->checkNotNull(Landroid/os/IInterface;)V
 HSPLcom/android/server/notification/ManagedServices;->checkServiceTokenLocked(Landroid/os/IInterface;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
-PLcom/android/server/notification/ManagedServices;->dump(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
-PLcom/android/server/notification/ManagedServices;->dump(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+HPLcom/android/server/notification/ManagedServices;->dump(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+HPLcom/android/server/notification/ManagedServices;->dump(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 HSPLcom/android/server/notification/ManagedServices;->getAllowedComponents(I)Ljava/util/List;
 HSPLcom/android/server/notification/ManagedServices;->getAllowedComponents(Landroid/util/IntArray;)Landroid/util/SparseArray;
 HSPLcom/android/server/notification/ManagedServices;->getAllowedPackages()Ljava/util/Set;
+PLcom/android/server/notification/ManagedServices;->getAllowedPackages(I)Ljava/util/List;
 HSPLcom/android/server/notification/ManagedServices;->getApprovedValue(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/notification/ManagedServices;->getBindFlags()I
 HSPLcom/android/server/notification/ManagedServices;->getCaption()Ljava/lang/String;
@@ -12367,16 +20656,21 @@
 HSPLcom/android/server/notification/ManagedServices;->getRemovableConnectedServices()Ljava/util/Set;
 HSPLcom/android/server/notification/ManagedServices;->getServiceFromTokenLocked(Landroid/os/IInterface;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
 HSPLcom/android/server/notification/ManagedServices;->getServices()Ljava/util/List;
+PLcom/android/server/notification/ManagedServices;->hasMatchingServices(Ljava/lang/String;I)Z
 PLcom/android/server/notification/ManagedServices;->isComponentEnabledForCurrentProfiles(Landroid/content/ComponentName;)Z
+PLcom/android/server/notification/ManagedServices;->isComponentEnabledForPackage(Ljava/lang/String;)Z
+PLcom/android/server/notification/ManagedServices;->isDefaultComponentOrPackage(Ljava/lang/String;)Z
 HPLcom/android/server/notification/ManagedServices;->isPackageAllowed(Ljava/lang/String;I)Z
 HSPLcom/android/server/notification/ManagedServices;->isPackageOrComponentAllowed(Ljava/lang/String;I)Z
-PLcom/android/server/notification/ManagedServices;->isSameUser(Landroid/os/IInterface;I)Z
+HPLcom/android/server/notification/ManagedServices;->isSameUser(Landroid/os/IInterface;I)Z
+HPLcom/android/server/notification/ManagedServices;->isServiceTokenValidLocked(Landroid/os/IInterface;)Z
 PLcom/android/server/notification/ManagedServices;->isValidEntry(Ljava/lang/String;I)Z
 HSPLcom/android/server/notification/ManagedServices;->loadComponentNamesFromValues(Landroid/util/ArraySet;I)Landroid/util/ArraySet;
 HSPLcom/android/server/notification/ManagedServices;->newServiceInfo(Landroid/os/IInterface;Landroid/content/ComponentName;IZLandroid/content/ServiceConnection;I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
 HSPLcom/android/server/notification/ManagedServices;->onBootPhaseAppsCanStart()V
 HPLcom/android/server/notification/ManagedServices;->onPackagesChanged(Z[Ljava/lang/String;[I)V
-PLcom/android/server/notification/ManagedServices;->onUserSwitched(I)V
+PLcom/android/server/notification/ManagedServices;->onUserRemoved(I)V
+HSPLcom/android/server/notification/ManagedServices;->onUserSwitched(I)V
 PLcom/android/server/notification/ManagedServices;->onUserUnlocked(I)V
 HSPLcom/android/server/notification/ManagedServices;->populateComponentsToBind(Landroid/util/SparseArray;Landroid/util/IntArray;Landroid/util/SparseArray;)V
 HSPLcom/android/server/notification/ManagedServices;->populateComponentsToUnbind(ZLjava/util/Set;Landroid/util/SparseArray;Landroid/util/SparseArray;)V
@@ -12386,47 +20680,54 @@
 HSPLcom/android/server/notification/ManagedServices;->readExtraAttributes(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;I)V
 HSPLcom/android/server/notification/ManagedServices;->readXml(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/internal/util/function/TriPredicate;ZI)V
 HSPLcom/android/server/notification/ManagedServices;->rebindServices(ZI)V
-PLcom/android/server/notification/ManagedServices;->registerGuestService(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+HSPLcom/android/server/notification/ManagedServices;->registerGuestService(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
 HSPLcom/android/server/notification/ManagedServices;->registerService(Landroid/content/ComponentName;I)V
 HSPLcom/android/server/notification/ManagedServices;->registerService(Landroid/os/IInterface;Landroid/content/ComponentName;I)V
 HSPLcom/android/server/notification/ManagedServices;->registerServiceImpl(Landroid/os/IInterface;Landroid/content/ComponentName;I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
 HSPLcom/android/server/notification/ManagedServices;->registerServiceImpl(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
 HSPLcom/android/server/notification/ManagedServices;->registerServiceLocked(Landroid/content/ComponentName;I)V
 HSPLcom/android/server/notification/ManagedServices;->registerServiceLocked(Landroid/content/ComponentName;IZ)V
-PLcom/android/server/notification/ManagedServices;->removeServiceImpl(Landroid/os/IInterface;I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
+HPLcom/android/server/notification/ManagedServices;->removeServiceImpl(Landroid/os/IInterface;I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
 PLcom/android/server/notification/ManagedServices;->removeServiceLocked(I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
-PLcom/android/server/notification/ManagedServices;->setComponentState(Landroid/content/ComponentName;Z)V
+HPLcom/android/server/notification/ManagedServices;->removeUninstalledItemsFromApprovedLists(ILjava/lang/String;)Z
+PLcom/android/server/notification/ManagedServices;->resetComponents(Ljava/lang/String;I)Landroid/util/ArrayMap;
+HPLcom/android/server/notification/ManagedServices;->setComponentState(Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/notification/ManagedServices;->setPackageOrComponentEnabled(Ljava/lang/String;IZZ)V
-PLcom/android/server/notification/ManagedServices;->trimApprovedListsAccordingToInstalledServices(I)V
+HPLcom/android/server/notification/ManagedServices;->trimApprovedListsAccordingToInstalledServices(I)V
 HSPLcom/android/server/notification/ManagedServices;->unbindFromServices(Landroid/util/SparseArray;)V
 PLcom/android/server/notification/ManagedServices;->unbindService(Landroid/content/ServiceConnection;Landroid/content/ComponentName;I)V
 PLcom/android/server/notification/ManagedServices;->unregisterService(Landroid/content/ComponentName;I)V
 PLcom/android/server/notification/ManagedServices;->unregisterService(Landroid/os/IInterface;I)V
 PLcom/android/server/notification/ManagedServices;->unregisterServiceImpl(Landroid/os/IInterface;I)V
-PLcom/android/server/notification/ManagedServices;->unregisterServiceLocked(Landroid/content/ComponentName;I)V
+HPLcom/android/server/notification/ManagedServices;->unregisterServiceLocked(Landroid/content/ComponentName;I)V
 HSPLcom/android/server/notification/ManagedServices;->writeDefaults(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/notification/ManagedServices;->writeExtraAttributes(Lorg/xmlpull/v1/XmlSerializer;I)V
 HSPLcom/android/server/notification/ManagedServices;->writeExtraXmlTags(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/notification/ManagedServices;->writeXml(Lorg/xmlpull/v1/XmlSerializer;ZI)V
 HSPLcom/android/server/notification/NotificationAdjustmentExtractor;-><init>()V
 HSPLcom/android/server/notification/NotificationAdjustmentExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/NotificationAdjustmentExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/NotificationAdjustmentExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
 HSPLcom/android/server/notification/NotificationAdjustmentExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/NotificationAdjustmentExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/NotificationChannelExtractor;-><init>()V
 HSPLcom/android/server/notification/NotificationChannelExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/NotificationChannelExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/NotificationChannelExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
 HSPLcom/android/server/notification/NotificationChannelExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/NotificationChannelExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/NotificationComparator$1;-><init>(Lcom/android/server/notification/NotificationComparator;)V
+PLcom/android/server/notification/NotificationComparator$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/NotificationComparator;-><init>(Landroid/content/Context;)V
+PLcom/android/server/notification/NotificationComparator;->access$002(Lcom/android/server/notification/NotificationComparator;Ljava/lang/String;)Ljava/lang/String;
 HPLcom/android/server/notification/NotificationComparator;->compare(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)I
 HPLcom/android/server/notification/NotificationComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLcom/android/server/notification/NotificationComparator;->isImportantColorized(Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/NotificationComparator;->isImportantMessaging(Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/NotificationComparator;->isImportantOngoing(Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/NotificationComparator;->isImportantPeople(Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/NotificationComparator;->isOngoing(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/NotificationComparator;->isCall(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/NotificationComparator;->isDefaultPhoneApp(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationComparator;->isImportantColorized(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/NotificationComparator;->isImportantMessaging(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/NotificationComparator;->isImportantOngoing(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/NotificationComparator;->isImportantPeople(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/NotificationComparator;->isMediaNotification(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/NotificationComparator;->isOngoing(Lcom/android/server/notification/NotificationRecord;)Z
 HSPLcom/android/server/notification/NotificationHistoryManager$SettingsObserver;-><init>(Lcom/android/server/notification/NotificationHistoryManager;Landroid/os/Handler;)V
 HSPLcom/android/server/notification/NotificationHistoryManager$SettingsObserver;->observe()V
 HSPLcom/android/server/notification/NotificationHistoryManager$SettingsObserver;->update(Landroid/net/Uri;I)V
@@ -12435,146 +20736,373 @@
 HSPLcom/android/server/notification/NotificationHistoryManager;->access$000(Lcom/android/server/notification/NotificationHistoryManager;)Landroid/content/Context;
 HSPLcom/android/server/notification/NotificationHistoryManager;->access$100(Lcom/android/server/notification/NotificationHistoryManager;)Ljava/lang/Object;
 HSPLcom/android/server/notification/NotificationHistoryManager;->access$200(Lcom/android/server/notification/NotificationHistoryManager;)Landroid/os/UserManager;
-HPLcom/android/server/notification/NotificationHistoryManager;->addNotification(Landroid/app/NotificationHistory$HistoricalNotification;)V
+HSPLcom/android/server/notification/NotificationHistoryManager;->addNotification(Landroid/app/NotificationHistory$HistoricalNotification;)V
 HSPLcom/android/server/notification/NotificationHistoryManager;->getUserHistoryAndInitializeIfNeededLocked(I)Lcom/android/server/notification/NotificationHistoryDatabase;
 HSPLcom/android/server/notification/NotificationHistoryManager;->onBootPhaseAppsCanStart()V
 HSPLcom/android/server/notification/NotificationHistoryManager;->onHistoryEnabledChanged(IZ)V
+HPLcom/android/server/notification/NotificationHistoryManager;->onPackageRemoved(ILjava/lang/String;)V
+PLcom/android/server/notification/NotificationHistoryManager;->onUserRemoved(I)V
+PLcom/android/server/notification/NotificationHistoryManager;->onUserStopped(I)V
 PLcom/android/server/notification/NotificationHistoryManager;->onUserUnlocked(I)V
-PLcom/android/server/notification/NotificationIntrusivenessExtractor$1;-><init>(Lcom/android/server/notification/NotificationIntrusivenessExtractor;Ljava/lang/String;J)V
-PLcom/android/server/notification/NotificationIntrusivenessExtractor$1;->applyChangesLocked(Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/NotificationIntrusivenessExtractor$1;->work()V
+HSPLcom/android/server/notification/NotificationIntrusivenessExtractor$1;-><init>(Lcom/android/server/notification/NotificationIntrusivenessExtractor;Ljava/lang/String;J)V
+HPLcom/android/server/notification/NotificationIntrusivenessExtractor$1;->applyChangesLocked(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationIntrusivenessExtractor$1;->work()V
 HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;-><clinit>()V
 HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;-><init>()V
 HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/NotificationIntrusivenessExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
 HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
-PLcom/android/server/notification/NotificationManagerService$10$1;-><init>(Lcom/android/server/notification/NotificationManagerService$10;Ljava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;[Landroid/service/notification/Condition;)V
-PLcom/android/server/notification/NotificationManagerService$10$1;->run()V
+HSPLcom/android/server/notification/NotificationManagerService$10$1;-><init>(Lcom/android/server/notification/NotificationManagerService$10;Ljava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;[Landroid/service/notification/Condition;)V
+HSPLcom/android/server/notification/NotificationManagerService$10$1;->run()V
 HSPLcom/android/server/notification/NotificationManagerService$10;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+HPLcom/android/server/notification/NotificationManagerService$10;->addAutoGroup(Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$10;->addAutoGroupSummary(ILjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$10;->addAutomaticZenRule(Landroid/app/AutomaticZenRule;)Ljava/lang/String;
+PLcom/android/server/notification/NotificationManagerService$10;->applyAdjustmentFromAssistant(Landroid/service/notification/INotificationListener;Landroid/service/notification/Adjustment;)V
 HPLcom/android/server/notification/NotificationManagerService$10;->applyAdjustmentsFromAssistant(Landroid/service/notification/INotificationListener;Ljava/util/List;)V
 HPLcom/android/server/notification/NotificationManagerService$10;->applyEnqueuedAdjustmentFromAssistant(Landroid/service/notification/INotificationListener;Landroid/service/notification/Adjustment;)V
+PLcom/android/server/notification/NotificationManagerService$10;->areBubblesAllowed(Ljava/lang/String;)Z
+PLcom/android/server/notification/NotificationManagerService$10;->areBubblesAllowedForPackage(Ljava/lang/String;I)Z
 HPLcom/android/server/notification/NotificationManagerService$10;->areNotificationsEnabled(Ljava/lang/String;)Z
 HPLcom/android/server/notification/NotificationManagerService$10;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z
 HSPLcom/android/server/notification/NotificationManagerService$10;->canNotifyAsPackage(Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/notification/NotificationManagerService$10;->canShowBadge(Ljava/lang/String;I)Z
 PLcom/android/server/notification/NotificationManagerService$10;->cancelAllNotifications(Ljava/lang/String;I)V
-HPLcom/android/server/notification/NotificationManagerService$10;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V
-PLcom/android/server/notification/NotificationManagerService$10;->checkPackagePolicyAccess(Ljava/lang/String;)Z
-PLcom/android/server/notification/NotificationManagerService$10;->checkPolicyAccess(Ljava/lang/String;)Z
-PLcom/android/server/notification/NotificationManagerService$10;->createNotificationChannelGroups(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
+PLcom/android/server/notification/NotificationManagerService$10;->cancelNotificationFromListenerLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;IILjava/lang/String;Ljava/lang/String;II)V
+HSPLcom/android/server/notification/NotificationManagerService$10;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V
+PLcom/android/server/notification/NotificationManagerService$10;->cancelNotificationsFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService$10;->cancelToast(Ljava/lang/String;Landroid/app/ITransientNotification;)V
+HPLcom/android/server/notification/NotificationManagerService$10;->checkPackagePolicyAccess(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationManagerService$10;->checkPolicyAccess(Ljava/lang/String;)Z
+PLcom/android/server/notification/NotificationManagerService$10;->clearData(Ljava/lang/String;IZ)V
+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
+PLcom/android/server/notification/NotificationManagerService$10;->createNotificationChannelsForPackage(Ljava/lang/String;ILandroid/content/pm/ParceledListSlice;)V
 HSPLcom/android/server/notification/NotificationManagerService$10;->createNotificationChannelsImpl(Ljava/lang/String;ILandroid/content/pm/ParceledListSlice;)V
 HSPLcom/android/server/notification/NotificationManagerService$10;->deleteNotificationChannel(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService$10;->deleteNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$10;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$10;->enforcePolicyAccess(ILjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$10;->enforcePolicyAccess(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/notification/NotificationManagerService$10;->enforceSystemOrSystemUI(Ljava/lang/String;)V
 HPLcom/android/server/notification/NotificationManagerService$10;->enforceSystemOrSystemUIOrSamePackage(Ljava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationManagerService$10;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V
-PLcom/android/server/notification/NotificationManagerService$10;->enqueueTextToast(Ljava/lang/String;Landroid/app/ITransientNotification;II)V
-PLcom/android/server/notification/NotificationManagerService$10;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;IIZ)V
-PLcom/android/server/notification/NotificationManagerService$10;->finishToken(Ljava/lang/String;Landroid/app/ITransientNotification;)V
-PLcom/android/server/notification/NotificationManagerService$10;->getActiveNotificationsFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/notification/NotificationManagerService$10;->getAllowedNotificationAssistant()Landroid/content/ComponentName;
+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;->enqueueTextToast(Ljava/lang/String;Landroid/app/ITransientNotification;II)V
+PLcom/android/server/notification/NotificationManagerService$10;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;II)V
+HPLcom/android/server/notification/NotificationManagerService$10;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;IIZ)V
+HPLcom/android/server/notification/NotificationManagerService$10;->finishToken(Ljava/lang/String;Landroid/app/ITransientNotification;)V
+HPLcom/android/server/notification/NotificationManagerService$10;->getActiveNotificationsFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/notification/NotificationManagerService$10;->getAllowedAssistantAdjustments(Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/notification/NotificationManagerService$10;->getAllowedNotificationAssistant()Landroid/content/ComponentName;
 PLcom/android/server/notification/NotificationManagerService$10;->getAllowedNotificationAssistantForUser(I)Landroid/content/ComponentName;
 HPLcom/android/server/notification/NotificationManagerService$10;->getAppActiveNotifications(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/notification/NotificationManagerService$10;->getAppsBypassingDndCount(I)I
 PLcom/android/server/notification/NotificationManagerService$10;->getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;
 PLcom/android/server/notification/NotificationManagerService$10;->getBackupPayload(I)[B
+PLcom/android/server/notification/NotificationManagerService$10;->getBlockedAppCount(I)I
+PLcom/android/server/notification/NotificationManagerService$10;->getBlockedChannelCount(Ljava/lang/String;I)I
 HSPLcom/android/server/notification/NotificationManagerService$10;->getConsolidatedNotificationPolicy()Landroid/app/NotificationManager$Policy;
+HSPLcom/android/server/notification/NotificationManagerService$10;->getConversationNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;
+PLcom/android/server/notification/NotificationManagerService$10;->getDeletedChannelCount(Ljava/lang/String;I)I
 PLcom/android/server/notification/NotificationManagerService$10;->getEffectsSuppressor()Landroid/content/ComponentName;
+PLcom/android/server/notification/NotificationManagerService$10;->getEnabledNotificationListenerPackages()Ljava/util/List;
+HPLcom/android/server/notification/NotificationManagerService$10;->getHintsFromListener(Landroid/service/notification/INotificationListener;)I
+PLcom/android/server/notification/NotificationManagerService$10;->getInterruptionFilterFromListener(Landroid/service/notification/INotificationListener;)I
 HSPLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;
 HPLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannelGroup;
+PLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannelGroupForPackage(Ljava/lang/String;Ljava/lang/String;I)Landroid/app/NotificationChannelGroup;
 HPLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannelGroups(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannels(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/notification/NotificationManagerService$10;->getNotificationPolicy(Ljava/lang/String;)Landroid/app/NotificationManager$Policy;
+PLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannelGroupsForPackage(Ljava/lang/String;IZ)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;->getNotificationPolicy(Ljava/lang/String;)Landroid/app/NotificationManager$Policy;
+PLcom/android/server/notification/NotificationManagerService$10;->getNumNotificationChannelsForPackage(Ljava/lang/String;IZ)I
+PLcom/android/server/notification/NotificationManagerService$10;->getPackageImportance(Ljava/lang/String;)I
 PLcom/android/server/notification/NotificationManagerService$10;->getPrivateNotificationsAllowed()Z
 HSPLcom/android/server/notification/NotificationManagerService$10;->getZenMode()I
 HSPLcom/android/server/notification/NotificationManagerService$10;->getZenModeConfig()Landroid/service/notification/ZenModeConfig;
 PLcom/android/server/notification/NotificationManagerService$10;->getZenRules()Ljava/util/List;
-PLcom/android/server/notification/NotificationManagerService$10;->isNotificationPolicyAccessGranted(Ljava/lang/String;)Z
-PLcom/android/server/notification/NotificationManagerService$10;->isPackagePaused(Ljava/lang/String;)Z
-PLcom/android/server/notification/NotificationManagerService$10;->notifyConditions(Ljava/lang/String;Landroid/service/notification/IConditionProvider;[Landroid/service/notification/Condition;)V
+HPLcom/android/server/notification/NotificationManagerService$10;->isNotificationListenerAccessGranted(Landroid/content/ComponentName;)Z
+HPLcom/android/server/notification/NotificationManagerService$10;->isNotificationListenerAccessGrantedForUser(Landroid/content/ComponentName;I)Z
+HPLcom/android/server/notification/NotificationManagerService$10;->isNotificationPolicyAccessGranted(Ljava/lang/String;)Z
+PLcom/android/server/notification/NotificationManagerService$10;->isNotificationPolicyAccessGrantedForPackage(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationManagerService$10;->isPackagePaused(Ljava/lang/String;)Z
+PLcom/android/server/notification/NotificationManagerService$10;->lambda$enqueueToast$0$NotificationManagerService$10(Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$10;->matchesCallFilter(Landroid/os/Bundle;)Z
+HSPLcom/android/server/notification/NotificationManagerService$10;->notifyConditions(Ljava/lang/String;Landroid/service/notification/IConditionProvider;[Landroid/service/notification/Condition;)V
+PLcom/android/server/notification/NotificationManagerService$10;->onlyHasDefaultChannel(Ljava/lang/String;I)Z
 PLcom/android/server/notification/NotificationManagerService$10;->registerListener(Landroid/service/notification/INotificationListener;Landroid/content/ComponentName;I)V
+PLcom/android/server/notification/NotificationManagerService$10;->removeAutoGroup(Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService$10;->removeAutoGroupSummary(ILjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$10;->removeAutomaticZenRule(Ljava/lang/String;)Z
+PLcom/android/server/notification/NotificationManagerService$10;->removeAutomaticZenRules(Ljava/lang/String;)Z
 PLcom/android/server/notification/NotificationManagerService$10;->requestBindListener(Landroid/content/ComponentName;)V
 PLcom/android/server/notification/NotificationManagerService$10;->requestBindProvider(Landroid/content/ComponentName;)V
+PLcom/android/server/notification/NotificationManagerService$10;->requestHintsFromListener(Landroid/service/notification/INotificationListener;I)V
+PLcom/android/server/notification/NotificationManagerService$10;->requestInterruptionFilterFromListener(Landroid/service/notification/INotificationListener;I)V
 PLcom/android/server/notification/NotificationManagerService$10;->requestUnbindListener(Landroid/service/notification/INotificationListener;)V
 PLcom/android/server/notification/NotificationManagerService$10;->requestUnbindProvider(Landroid/service/notification/IConditionProvider;)V
 HPLcom/android/server/notification/NotificationManagerService$10;->sanitizeSbn(Ljava/lang/String;ILandroid/service/notification/StatusBarNotification;)Landroid/service/notification/StatusBarNotification;
+PLcom/android/server/notification/NotificationManagerService$10;->setAutomaticZenRuleState(Ljava/lang/String;Landroid/service/notification/Condition;)V
+PLcom/android/server/notification/NotificationManagerService$10;->setInterruptionFilter(Ljava/lang/String;I)V
+PLcom/android/server/notification/NotificationManagerService$10;->setNotificationListenerAccessGranted(Landroid/content/ComponentName;Z)V
+HSPLcom/android/server/notification/NotificationManagerService$10;->setNotificationListenerAccessGrantedForUser(Landroid/content/ComponentName;IZ)V
+PLcom/android/server/notification/NotificationManagerService$10;->setNotificationPolicy(Ljava/lang/String;Landroid/app/NotificationManager$Policy;)V
+HSPLcom/android/server/notification/NotificationManagerService$10;->setNotificationPolicyAccessGranted(Ljava/lang/String;Z)V
+HSPLcom/android/server/notification/NotificationManagerService$10;->setNotificationPolicyAccessGrantedForUser(Ljava/lang/String;IZ)V
+PLcom/android/server/notification/NotificationManagerService$10;->setNotificationsEnabledForPackage(Ljava/lang/String;IZ)V
 HPLcom/android/server/notification/NotificationManagerService$10;->setNotificationsShownFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$10;->setPrivateNotificationsAllowed(Z)V
 PLcom/android/server/notification/NotificationManagerService$10;->setZenMode(ILandroid/net/Uri;Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$10;->shouldHideSilentStatusIcons(Ljava/lang/String;)Z
 PLcom/android/server/notification/NotificationManagerService$10;->silenceNotificationSound()V
+PLcom/android/server/notification/NotificationManagerService$10;->snoozeNotificationUntilFromListener(Landroid/service/notification/INotificationListener;Ljava/lang/String;J)V
+HPLcom/android/server/notification/NotificationManagerService$10;->updateAutogroupSummary(Ljava/lang/String;Z)V
 PLcom/android/server/notification/NotificationManagerService$10;->updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;)Z
+PLcom/android/server/notification/NotificationManagerService$10;->updateNotificationChannelForPackage(Ljava/lang/String;ILandroid/app/NotificationChannel;)V
+HSPLcom/android/server/notification/NotificationManagerService$11$1;-><init>(Lcom/android/server/notification/NotificationManagerService$11;Ljava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;[Landroid/service/notification/Condition;)V
+HPLcom/android/server/notification/NotificationManagerService$11$1;->run()V
 HSPLcom/android/server/notification/NotificationManagerService$11;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$11;->addAutomaticZenRule(Landroid/app/AutomaticZenRule;)Ljava/lang/String;
+PLcom/android/server/notification/NotificationManagerService$11;->applyAdjustmentFromAssistant(Landroid/service/notification/INotificationListener;Landroid/service/notification/Adjustment;)V
+HPLcom/android/server/notification/NotificationManagerService$11;->applyAdjustmentsFromAssistant(Landroid/service/notification/INotificationListener;Ljava/util/List;)V
+HPLcom/android/server/notification/NotificationManagerService$11;->applyEnqueuedAdjustmentFromAssistant(Landroid/service/notification/INotificationListener;Landroid/service/notification/Adjustment;)V
+PLcom/android/server/notification/NotificationManagerService$11;->areBubblesAllowed(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationManagerService$11;->areBubblesAllowedForPackage(Ljava/lang/String;I)Z
+HPLcom/android/server/notification/NotificationManagerService$11;->areNotificationsEnabled(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationManagerService$11;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z
+HSPLcom/android/server/notification/NotificationManagerService$11;->canNotifyAsPackage(Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/notification/NotificationManagerService$11;->canShowBadge(Ljava/lang/String;I)Z
+HPLcom/android/server/notification/NotificationManagerService$11;->cancelAllNotifications(Ljava/lang/String;I)V
+PLcom/android/server/notification/NotificationManagerService$11;->cancelNotification(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;II)V
+PLcom/android/server/notification/NotificationManagerService$11;->cancelNotificationFromListenerLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;IILjava/lang/String;Ljava/lang/String;II)V
+HSPLcom/android/server/notification/NotificationManagerService$11;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V
+PLcom/android/server/notification/NotificationManagerService$11;->cancelNotificationsFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService$11;->cancelToast(Ljava/lang/String;Landroid/os/IBinder;)V
+HPLcom/android/server/notification/NotificationManagerService$11;->checkPackagePolicyAccess(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationManagerService$11;->checkPolicyAccess(Ljava/lang/String;)Z
+PLcom/android/server/notification/NotificationManagerService$11;->clearData(Ljava/lang/String;IZ)V
+PLcom/android/server/notification/NotificationManagerService$11;->createConversationNotificationChannelForPackage(Ljava/lang/String;ILjava/lang/String;Landroid/app/NotificationChannel;Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService$11;->createNotificationChannelGroups(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
+HSPLcom/android/server/notification/NotificationManagerService$11;->createNotificationChannels(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
+PLcom/android/server/notification/NotificationManagerService$11;->createNotificationChannelsForPackage(Ljava/lang/String;ILandroid/content/pm/ParceledListSlice;)V
+HSPLcom/android/server/notification/NotificationManagerService$11;->createNotificationChannelsImpl(Ljava/lang/String;ILandroid/content/pm/ParceledListSlice;)V
+HSPLcom/android/server/notification/NotificationManagerService$11;->deleteNotificationChannel(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService$11;->deleteNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$11;->disallowAssistantAdjustment(Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$11;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService$11;->enforcePolicyAccess(ILjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$11;->enforcePolicyAccess(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/notification/NotificationManagerService$11;->enforceSystemOrSystemUI(Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService$11;->enforceSystemOrSystemUIOrSamePackage(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService$11;->enqueueNotification(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;I)V
+HPLcom/android/server/notification/NotificationManagerService$11;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V
+PLcom/android/server/notification/NotificationManagerService$11;->enqueueTextToast(Ljava/lang/String;Landroid/os/IBinder;Landroid/app/ITransientNotification;II)V
+HPLcom/android/server/notification/NotificationManagerService$11;->enqueueTextToast(Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/CharSequence;IILandroid/app/ITransientNotificationCallback;)V
+PLcom/android/server/notification/NotificationManagerService$11;->enqueueToast(Ljava/lang/String;Landroid/os/IBinder;Landroid/app/ITransientNotification;II)V
+HPLcom/android/server/notification/NotificationManagerService$11;->enqueueToast(Ljava/lang/String;Landroid/os/IBinder;Landroid/app/ITransientNotification;IIZ)V
+HPLcom/android/server/notification/NotificationManagerService$11;->enqueueToast(Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/CharSequence;Landroid/app/ITransientNotification;IILandroid/app/ITransientNotificationCallback;)V
+HPLcom/android/server/notification/NotificationManagerService$11;->finishToken(Ljava/lang/String;Landroid/os/IBinder;)V
+PLcom/android/server/notification/NotificationManagerService$11;->getActiveNotifications(Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification;
+HPLcom/android/server/notification/NotificationManagerService$11;->getActiveNotificationsFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/notification/NotificationManagerService$11;->getAllowedAssistantAdjustments(Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/notification/NotificationManagerService$11;->getAllowedNotificationAssistant()Landroid/content/ComponentName;
+HPLcom/android/server/notification/NotificationManagerService$11;->getAllowedNotificationAssistantForUser(I)Landroid/content/ComponentName;
+HPLcom/android/server/notification/NotificationManagerService$11;->getAppActiveNotifications(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/notification/NotificationManagerService$11;->getAppsBypassingDndCount(I)I
+PLcom/android/server/notification/NotificationManagerService$11;->getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;
+PLcom/android/server/notification/NotificationManagerService$11;->getBackupPayload(I)[B
+PLcom/android/server/notification/NotificationManagerService$11;->getBlockedAppCount(I)I
+PLcom/android/server/notification/NotificationManagerService$11;->getBlockedChannelCount(Ljava/lang/String;I)I
+HSPLcom/android/server/notification/NotificationManagerService$11;->getConsolidatedNotificationPolicy()Landroid/app/NotificationManager$Policy;
+HSPLcom/android/server/notification/NotificationManagerService$11;->getConversationNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;)Landroid/app/NotificationChannel;
+PLcom/android/server/notification/NotificationManagerService$11;->getDeletedChannelCount(Ljava/lang/String;I)I
+HPLcom/android/server/notification/NotificationManagerService$11;->getEffectsSuppressor()Landroid/content/ComponentName;
+PLcom/android/server/notification/NotificationManagerService$11;->getEnabledNotificationListenerPackages()Ljava/util/List;
+PLcom/android/server/notification/NotificationManagerService$11;->getHintsFromListener(Landroid/service/notification/INotificationListener;)I
+PLcom/android/server/notification/NotificationManagerService$11;->getHistoricalNotifications(Ljava/lang/String;I)[Landroid/service/notification/StatusBarNotification;
+PLcom/android/server/notification/NotificationManagerService$11;->getInterruptionFilterFromListener(Landroid/service/notification/INotificationListener;)I
+PLcom/android/server/notification/NotificationManagerService$11;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;)Landroid/app/NotificationChannel;
+HSPLcom/android/server/notification/NotificationManagerService$11;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;
+PLcom/android/server/notification/NotificationManagerService$11;->getNotificationChannelForPackage(Ljava/lang/String;ILjava/lang/String;Z)Landroid/app/NotificationChannel;
+HPLcom/android/server/notification/NotificationManagerService$11;->getNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannelGroup;
+PLcom/android/server/notification/NotificationManagerService$11;->getNotificationChannelGroupForPackage(Ljava/lang/String;Ljava/lang/String;I)Landroid/app/NotificationChannelGroup;
+HPLcom/android/server/notification/NotificationManagerService$11;->getNotificationChannelGroups(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/notification/NotificationManagerService$11;->getNotificationChannelGroupsForPackage(Ljava/lang/String;IZ)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/notification/NotificationManagerService$11;->getNotificationChannels(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/notification/NotificationManagerService$11;->getNotificationPolicy(Ljava/lang/String;)Landroid/app/NotificationManager$Policy;
+HPLcom/android/server/notification/NotificationManagerService$11;->getNumNotificationChannelsForPackage(Ljava/lang/String;IZ)I
+PLcom/android/server/notification/NotificationManagerService$11;->getPackageImportance(Ljava/lang/String;)I
+PLcom/android/server/notification/NotificationManagerService$11;->getPrivateNotificationsAllowed()Z
+HSPLcom/android/server/notification/NotificationManagerService$11;->getZenMode()I
+HSPLcom/android/server/notification/NotificationManagerService$11;->getZenModeConfig()Landroid/service/notification/ZenModeConfig;
+PLcom/android/server/notification/NotificationManagerService$11;->getZenRules()Ljava/util/List;
+PLcom/android/server/notification/NotificationManagerService$11;->isNotificationListenerAccessGranted(Landroid/content/ComponentName;)Z
+HPLcom/android/server/notification/NotificationManagerService$11;->isNotificationListenerAccessGrantedForUser(Landroid/content/ComponentName;I)Z
+PLcom/android/server/notification/NotificationManagerService$11;->isNotificationPolicyAccessGranted(Ljava/lang/String;)Z
+PLcom/android/server/notification/NotificationManagerService$11;->isNotificationPolicyAccessGrantedForPackage(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationManagerService$11;->isPackagePaused(Ljava/lang/String;)Z
+PLcom/android/server/notification/NotificationManagerService$11;->lambda$enqueueToast$0$NotificationManagerService$11(Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$11;->lambda$removeForegroundServiceFlagFromNotification$0$NotificationManagerService$11(Ljava/lang/String;II)V
+PLcom/android/server/notification/NotificationManagerService$11;->matchesCallFilter(Landroid/os/Bundle;)Z
+HSPLcom/android/server/notification/NotificationManagerService$11;->notifyConditions(Ljava/lang/String;Landroid/service/notification/IConditionProvider;[Landroid/service/notification/Condition;)V
+PLcom/android/server/notification/NotificationManagerService$11;->onlyHasDefaultChannel(Ljava/lang/String;I)Z
+PLcom/android/server/notification/NotificationManagerService$11;->registerListener(Landroid/service/notification/INotificationListener;Landroid/content/ComponentName;I)V
+PLcom/android/server/notification/NotificationManagerService$11;->removeAutomaticZenRule(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationManagerService$11;->removeAutomaticZenRules(Ljava/lang/String;)Z
+PLcom/android/server/notification/NotificationManagerService$11;->removeForegroundServiceFlagFromNotification(Ljava/lang/String;II)V
+PLcom/android/server/notification/NotificationManagerService$11;->removeForegroundServiceFlagLocked(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationManagerService$11;->requestBindListener(Landroid/content/ComponentName;)V
+PLcom/android/server/notification/NotificationManagerService$11;->requestBindProvider(Landroid/content/ComponentName;)V
+HPLcom/android/server/notification/NotificationManagerService$11;->requestHintsFromListener(Landroid/service/notification/INotificationListener;I)V
+PLcom/android/server/notification/NotificationManagerService$11;->requestUnbindListener(Landroid/service/notification/INotificationListener;)V
+PLcom/android/server/notification/NotificationManagerService$11;->requestUnbindProvider(Landroid/service/notification/IConditionProvider;)V
+HPLcom/android/server/notification/NotificationManagerService$11;->sanitizeSbn(Ljava/lang/String;ILandroid/service/notification/StatusBarNotification;)Landroid/service/notification/StatusBarNotification;
+PLcom/android/server/notification/NotificationManagerService$11;->setInterruptionFilter(Ljava/lang/String;I)V
+PLcom/android/server/notification/NotificationManagerService$11;->setNotificationListenerAccessGranted(Landroid/content/ComponentName;Z)V
+HSPLcom/android/server/notification/NotificationManagerService$11;->setNotificationListenerAccessGrantedForUser(Landroid/content/ComponentName;IZ)V
+PLcom/android/server/notification/NotificationManagerService$11;->setNotificationPolicy(Ljava/lang/String;Landroid/app/NotificationManager$Policy;)V
+HSPLcom/android/server/notification/NotificationManagerService$11;->setNotificationPolicyAccessGranted(Ljava/lang/String;Z)V
+HSPLcom/android/server/notification/NotificationManagerService$11;->setNotificationPolicyAccessGrantedForUser(Ljava/lang/String;IZ)V
+PLcom/android/server/notification/NotificationManagerService$11;->setNotificationsEnabledForPackage(Ljava/lang/String;IZ)V
+HPLcom/android/server/notification/NotificationManagerService$11;->setNotificationsShownFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$11;->setPrivateNotificationsAllowed(Z)V
+PLcom/android/server/notification/NotificationManagerService$11;->setZenMode(ILandroid/net/Uri;Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$11;->shouldHideSilentStatusIcons(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationManagerService$11;->silenceNotificationSound()V
+PLcom/android/server/notification/NotificationManagerService$11;->snoozeNotificationUntilFromListener(Landroid/service/notification/INotificationListener;Ljava/lang/String;J)V
+PLcom/android/server/notification/NotificationManagerService$11;->unregisterListener(Landroid/service/notification/INotificationListener;I)V
+PLcom/android/server/notification/NotificationManagerService$11;->updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;)Z
+PLcom/android/server/notification/NotificationManagerService$11;->updateNotificationChannelForPackage(Ljava/lang/String;ILandroid/app/NotificationChannel;)V
+HSPLcom/android/server/notification/NotificationManagerService$12;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+HPLcom/android/server/notification/NotificationManagerService$12;->cancelNotification(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;II)V
+HPLcom/android/server/notification/NotificationManagerService$12;->enqueueNotification(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;I)V
+HPLcom/android/server/notification/NotificationManagerService$12;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;)Landroid/app/NotificationChannel;
+PLcom/android/server/notification/NotificationManagerService$12;->lambda$removeForegroundServiceFlagFromNotification$0$NotificationManagerService$12(Ljava/lang/String;II)V
+PLcom/android/server/notification/NotificationManagerService$12;->removeForegroundServiceFlagFromNotification(Ljava/lang/String;II)V
+PLcom/android/server/notification/NotificationManagerService$12;->removeForegroundServiceFlagLocked(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationManagerService$12;->run()V
+PLcom/android/server/notification/NotificationManagerService$13;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 HPLcom/android/server/notification/NotificationManagerService$13;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/NotificationManagerService$13;->run()V
+HPLcom/android/server/notification/NotificationManagerService$13;->run()V
 HSPLcom/android/server/notification/NotificationManagerService$14;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;IILjava/lang/String;IIIIZLjava/lang/String;)V
-PLcom/android/server/notification/NotificationManagerService$14;->run()V
+HPLcom/android/server/notification/NotificationManagerService$14;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationManagerService$14;->lambda$run$0(III)Z
+HSPLcom/android/server/notification/NotificationManagerService$14;->run()V
+PLcom/android/server/notification/NotificationManagerService$15;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;IIIIZ)V
+HSPLcom/android/server/notification/NotificationManagerService$15;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;IILjava/lang/String;IIIIZLjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$15;->lambda$run$0(II)Z
+PLcom/android/server/notification/NotificationManagerService$15;->lambda$run$0(III)Z
+HSPLcom/android/server/notification/NotificationManagerService$15;->run()V
 HSPLcom/android/server/notification/NotificationManagerService$16;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$16;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;IIIIZ)V
+PLcom/android/server/notification/NotificationManagerService$16;->lambda$run$0(II)Z
+PLcom/android/server/notification/NotificationManagerService$16;->run()V
+HSPLcom/android/server/notification/NotificationManagerService$17;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 HSPLcom/android/server/notification/NotificationManagerService$1;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
-PLcom/android/server/notification/NotificationManagerService$1;->clearEffects()V
+HPLcom/android/server/notification/NotificationManagerService$1;->clearEffects()V
 HPLcom/android/server/notification/NotificationManagerService$1;->clearInlineReplyUriPermissions(Ljava/lang/String;I)V
+PLcom/android/server/notification/NotificationManagerService$1;->onBubbleNotificationSuppressionChanged(Ljava/lang/String;Z)V
+PLcom/android/server/notification/NotificationManagerService$1;->onClearAll(III)V
 PLcom/android/server/notification/NotificationManagerService$1;->onNotificationActionClick(IILjava/lang/String;ILandroid/app/Notification$Action;Lcom/android/internal/statusbar/NotificationVisibility;Z)V
-PLcom/android/server/notification/NotificationManagerService$1;->onNotificationClear(IILjava/lang/String;Ljava/lang/String;IILjava/lang/String;IILcom/android/internal/statusbar/NotificationVisibility;)V
-PLcom/android/server/notification/NotificationManagerService$1;->onNotificationClick(IILjava/lang/String;Lcom/android/internal/statusbar/NotificationVisibility;)V
+PLcom/android/server/notification/NotificationManagerService$1;->onNotificationBubbleChanged(Ljava/lang/String;Z)V
+HPLcom/android/server/notification/NotificationManagerService$1;->onNotificationClear(IILjava/lang/String;Ljava/lang/String;IILjava/lang/String;IILcom/android/internal/statusbar/NotificationVisibility;)V
+HPLcom/android/server/notification/NotificationManagerService$1;->onNotificationClick(IILjava/lang/String;Lcom/android/internal/statusbar/NotificationVisibility;)V
+PLcom/android/server/notification/NotificationManagerService$1;->onNotificationDirectReplied(Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$1;->onNotificationError(IILjava/lang/String;Ljava/lang/String;IIILjava/lang/String;I)V
 HPLcom/android/server/notification/NotificationManagerService$1;->onNotificationExpansionChanged(Ljava/lang/String;ZZI)V
-PLcom/android/server/notification/NotificationManagerService$1;->onNotificationSmartSuggestionsAdded(Ljava/lang/String;IIZZ)V
+PLcom/android/server/notification/NotificationManagerService$1;->onNotificationSettingsViewed(Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$1;->onNotificationSmartReplySent(Ljava/lang/String;ILjava/lang/CharSequence;IZ)V
+HPLcom/android/server/notification/NotificationManagerService$1;->onNotificationSmartSuggestionsAdded(Ljava/lang/String;IIZZ)V
 HPLcom/android/server/notification/NotificationManagerService$1;->onNotificationVisibilityChanged([Lcom/android/internal/statusbar/NotificationVisibility;[Lcom/android/internal/statusbar/NotificationVisibility;)V
-PLcom/android/server/notification/NotificationManagerService$1;->onPanelHidden()V
-PLcom/android/server/notification/NotificationManagerService$1;->onPanelRevealed(ZI)V
+HPLcom/android/server/notification/NotificationManagerService$1;->onPanelHidden()V
+HPLcom/android/server/notification/NotificationManagerService$1;->onPanelRevealed(ZI)V
 PLcom/android/server/notification/NotificationManagerService$1;->onSetDisabled(I)V
 HSPLcom/android/server/notification/NotificationManagerService$2;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+HSPLcom/android/server/notification/NotificationManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/NotificationManagerService$3;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 HSPLcom/android/server/notification/NotificationManagerService$4;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
-PLcom/android/server/notification/NotificationManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/notification/NotificationManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/NotificationManagerService$5;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
-PLcom/android/server/notification/NotificationManagerService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/notification/NotificationManagerService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/NotificationManagerService$6;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
-PLcom/android/server/notification/NotificationManagerService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/notification/NotificationManagerService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/NotificationManagerService$7;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$7;->onAutomaticRuleStatusChanged(ILjava/lang/String;Ljava/lang/String;I)V
 HSPLcom/android/server/notification/NotificationManagerService$7;->onConfigChanged()V
 HSPLcom/android/server/notification/NotificationManagerService$7;->onPolicyChanged()V
 PLcom/android/server/notification/NotificationManagerService$7;->onZenModeChanged()V
 HSPLcom/android/server/notification/NotificationManagerService$8;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$8;->onAutomaticRuleStatusChanged(ILjava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/notification/NotificationManagerService$8;->onConfigChanged()V
+HSPLcom/android/server/notification/NotificationManagerService$8;->onPolicyChanged()V
+HSPLcom/android/server/notification/NotificationManagerService$8;->onZenModeChanged()V
+PLcom/android/server/notification/NotificationManagerService$8;->repost(ILcom/android/server/notification/NotificationRecord;)V
 HSPLcom/android/server/notification/NotificationManagerService$9;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 PLcom/android/server/notification/NotificationManagerService$9;->addAutoGroup(Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$9;->addAutoGroupSummary(ILjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$9;->removeAutoGroup(Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$9;->removeAutoGroupSummary(ILjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$9;->repost(ILcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/NotificationManagerService$9;->updateAutogroupSummary(Ljava/lang/String;Z)V
 HSPLcom/android/server/notification/NotificationManagerService$Archive;-><init>(I)V
+PLcom/android/server/notification/NotificationManagerService$Archive;->descendingIterator()Ljava/util/Iterator;
+PLcom/android/server/notification/NotificationManagerService$Archive;->getArray(I)[Landroid/service/notification/StatusBarNotification;
+HPLcom/android/server/notification/NotificationManagerService$Archive;->record(Landroid/service/notification/StatusBarNotification;)V
 PLcom/android/server/notification/NotificationManagerService$Archive;->toString()Ljava/lang/String;
-HPLcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;IILjava/lang/String;Ljava/lang/String;IIIZIIIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)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;)V
 PLcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;->lambda$run$0(I)Z
-HPLcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;->run()V
+HSPLcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;->run()V
 PLcom/android/server/notification/NotificationManagerService$DumpFilter;-><init>()V
 PLcom/android/server/notification/NotificationManagerService$DumpFilter;->matches(Landroid/content/ComponentName;)Z
 PLcom/android/server/notification/NotificationManagerService$DumpFilter;->matches(Landroid/service/notification/StatusBarNotification;)Z
 HPLcom/android/server/notification/NotificationManagerService$DumpFilter;->matches(Ljava/lang/String;)Z
 PLcom/android/server/notification/NotificationManagerService$DumpFilter;->parseFromArguments([Ljava/lang/String;)Lcom/android/server/notification/NotificationManagerService$DumpFilter;
-HPLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;ILcom/android/server/notification/NotificationRecord;Z)V
-PLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;->run()V
+HSPLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;ILcom/android/server/notification/NotificationRecord;Z)V
+HSPLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;->run()V
 HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/content/Context;Ljava/lang/Object;Lcom/android/server/notification/ManagedServices$UserProfiles;Landroid/content/pm/IPackageManager;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->access$7800(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->asInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->access$7900(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->access$8100(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationRecord;)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->asInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->disallowAdjustmentType(Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->dump(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->getAllowedAssistantAdjustments()Ljava/util/List;
 HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->getConfig()Lcom/android/server/notification/ManagedServices$Config;
 HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->getRequiredPermission()Ljava/lang/String;
 HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->hasUserSet(I)Z
-PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isAdjustmentAllowed(Ljava/lang/String;)Z
-PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isEnabled()Z
-PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isVerboseLogEnabled()Z
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isAdjustmentAllowed(Ljava/lang/String;)Z
+HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isEnabled()Z
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isVerboseLogEnabled()Z
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$disallowAdjustmentType$1$NotificationManagerService$NotificationAssistants(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$notifyAssistantActionClicked$10$NotificationManagerService$NotificationAssistants(Ljava/lang/String;Landroid/app/Notification$Action;ZLandroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$notifyAssistantActionClicked$7$NotificationManagerService$NotificationAssistants(Ljava/lang/String;Landroid/app/Notification$Action;ZLandroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$notifyAssistantExpansionChangedLocked$4$NotificationManagerService$NotificationAssistants(Ljava/lang/String;ZZLandroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$notifyAssistantExpansionChangedLocked$7$NotificationManagerService$NotificationAssistants(Ljava/lang/String;ZZLandroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$notifyAssistantLocked$12(Ljava/util/function/BiConsumer;Landroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$notifyAssistantLocked$9(Ljava/util/function/BiConsumer;Landroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$notifyAssistantNotificationDirectReplyLocked$8$NotificationManagerService$NotificationAssistants(Ljava/lang/String;Landroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$notifyAssistantSuggestedReplySent$6$NotificationManagerService$NotificationAssistants(Ljava/lang/String;Ljava/lang/CharSequence;ZLandroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$notifyAssistantSuggestedReplySent$9$NotificationManagerService$NotificationAssistants(Ljava/lang/String;Ljava/lang/CharSequence;ZLandroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$notifyAssistantVisibilityChangedLocked$6$NotificationManagerService$NotificationAssistants(Ljava/lang/String;ZLandroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$onNotificationEnqueuedLocked$3$NotificationManagerService$NotificationAssistants(ZLcom/android/server/notification/NotificationRecord;Landroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
-PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$onNotificationsSeenLocked$2$NotificationManagerService$NotificationAssistants(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/util/ArrayList;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$onNotificationEnqueuedLocked$5$NotificationManagerService$NotificationAssistants(ZLcom/android/server/notification/NotificationRecord;Landroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$onNotificationsSeenLocked$2$NotificationManagerService$NotificationAssistants(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/util/ArrayList;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$onPanelHidden$4$NotificationManagerService$NotificationAssistants(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$onPanelRevealed$3$NotificationManagerService$NotificationAssistants(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantActionClicked(Landroid/service/notification/StatusBarNotification;ILandroid/app/Notification$Action;Z)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantExpansionChangedLocked(Landroid/service/notification/StatusBarNotification;ZZ)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantLocked(Landroid/service/notification/StatusBarNotification;ZLjava/util/function/BiConsumer;)V
-PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifySeen(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/util/ArrayList;)V
-PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onNotificationEnqueuedLocked(Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onNotificationsSeenLocked(Ljava/util/ArrayList;)V
-PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onServiceAdded(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantNotificationDirectReplyLocked(Landroid/service/notification/StatusBarNotification;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantSuggestedReplySent(Landroid/service/notification/StatusBarNotification;Ljava/lang/CharSequence;Z)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantVisibilityChangedLocked(Landroid/service/notification/StatusBarNotification;Z)V
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyCapabilitiesChanged(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifySeen(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/util/ArrayList;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onNotificationEnqueuedLocked(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onNotificationsSeenLocked(Ljava/util/ArrayList;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onPanelHidden()V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onPanelRevealed(I)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onServiceAdded(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onServiceRemovedLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onUserUnlocked(I)V
 HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->readExtraAttributes(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;I)V
@@ -12584,46 +21112,75 @@
 HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->setUserSet(IZ)V
 HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->writeExtraAttributes(Lorg/xmlpull/v1/XmlSerializer;I)V
 HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->writeExtraXmlTags(Lorg/xmlpull/v1/XmlSerializer;)V
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$2;-><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$2;->run()V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners$2;-><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$2;->run()V
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$3;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners$3;->run()V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$3;->run()V
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$4;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/NotificationRankingUpdate;)V
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners$4;->run()V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$4;->run()V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners$5;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$5;->run()V
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners$6;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners$6;->run()V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$6;->run()V
 HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/content/pm/IPackageManager;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10000(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10000(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/NotificationRankingUpdate;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10000(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10100(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$9800(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10100(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/NotificationRankingUpdate;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10100(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10200(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10200(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;->access$10200(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10300(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/NotificationRankingUpdate;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10300(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10400(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10400(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/NotificationRankingUpdate;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10500(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$10600(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$9700(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$9800(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;->access$9800(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$9900(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/NotificationRankingUpdate;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$9900(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->access$9900(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->asInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->checkType(Landroid/os/IInterface;)Z
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getBindFlags()I
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->checkType(Landroid/os/IInterface;)Z
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getBindFlags()I
 HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getConfig()Lcom/android/server/notification/ManagedServices$Config;
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getOnNotificationPostedTrim(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)I
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getOnNotificationPostedTrim(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)I
 HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getRequiredPermission()Ljava/lang/String;
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->isListenerPackage(Ljava/lang/String;)Z
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyInterruptionFilterChanged(I)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->isListenerPackage(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyNotificationChannelChanged$2$NotificationManagerService$NotificationListeners(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyNotificationChannelGroupChanged$3$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;->lambda$notifyRemovedLocked$1$NotificationManagerService$NotificationListeners(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyHiddenLocked(Ljava/util/List;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyInterruptionFilterChanged(I)V
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyInterruptionFilterChanged(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyListenerHintsChanged(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyListenerHintsChangedLocked(I)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelChanged(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
 HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelChanged(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelGroupChanged(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPosted(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPostedLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPostedLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Z)V
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyRankingUpdate(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/NotificationRankingUpdate;)V
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyRankingUpdateLocked(Ljava/util/List;)V
-PLcom/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
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyRemovedLocked(Lcom/android/server/notification/NotificationRecord;ILandroid/service/notification/NotificationStats;)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
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelGroupChanged(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPosted(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPostedLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPostedLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Z)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyRankingUpdate(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/NotificationRankingUpdate;)V
+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
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyRemovedLocked(Lcom/android/server/notification/NotificationRecord;ILandroid/service/notification/NotificationStats;)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyUnhiddenLocked(Ljava/util/List;)V
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->onServiceAdded(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->onServiceAdded(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->onServiceRemovedLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
-HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$1;-><init>(Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;Landroid/service/notification/StatusBarNotification;)V
-PLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$1;->run()V
-HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V
-PLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->lambda$run$0$NotificationManagerService$PostNotificationRunnable(Lcom/android/server/notification/NotificationRecord;Landroid/service/notification/StatusBarNotification;)V
-PLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->run()V
+HSPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$1;-><init>(Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;Landroid/service/notification/StatusBarNotification;)V
+HSPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$1;->run()V
+HSPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->lambda$run$0$NotificationManagerService$PostNotificationRunnable(Lcom/android/server/notification/NotificationRecord;Landroid/service/notification/StatusBarNotification;)V
+HSPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->run()V
 HSPLcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;->requestReconsideration(Lcom/android/server/notification/RankingReconsideration;)V
+HSPLcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;->requestReconsideration(Lcom/android/server/notification/RankingReconsideration;)V
 HSPLcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;->requestSort()V
 HSPLcom/android/server/notification/NotificationManagerService$RoleObserver;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/app/role/RoleManager;Landroid/content/pm/IPackageManager;Ljava/util/concurrent/Executor;)V
 HSPLcom/android/server/notification/NotificationManagerService$RoleObserver;->getUidForPackage(Ljava/lang/String;I)I
@@ -12634,404 +21191,693 @@
 HSPLcom/android/server/notification/NotificationManagerService$SavePolicyFileRunnable;->run()V
 HSPLcom/android/server/notification/NotificationManagerService$SettingsObserver;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Handler;)V
 HSPLcom/android/server/notification/NotificationManagerService$SettingsObserver;->observe()V
+PLcom/android/server/notification/NotificationManagerService$SettingsObserver;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/notification/NotificationManagerService$SettingsObserver;->update(Landroid/net/Uri;)V
-HPLcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;-><init>(Landroid/service/notification/StatusBarNotification;)V
-HPLcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;->get()Landroid/service/notification/StatusBarNotification;
-PLcom/android/server/notification/NotificationManagerService$ToastRecord;-><init>(ILjava/lang/String;Landroid/app/ITransientNotification;ILandroid/os/Binder;I)V
-HPLcom/android/server/notification/NotificationManagerService$TrimCache;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;)V
-HPLcom/android/server/notification/NotificationManagerService$TrimCache;->ForListener(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/StatusBarNotification;
+PLcom/android/server/notification/NotificationManagerService$SnoozeNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;JLjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$SnoozeNotificationRunnable;->run()V
+PLcom/android/server/notification/NotificationManagerService$SnoozeNotificationRunnable;->snoozeLocked(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationManagerService$SnoozeNotificationRunnable;->snoozeNotificationLocked(Lcom/android/server/notification/NotificationRecord;)V
+HSPLcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;-><init>(Landroid/service/notification/StatusBarNotification;)V
+HSPLcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;->get()Landroid/service/notification/StatusBarNotification;
+HPLcom/android/server/notification/NotificationManagerService$ToastRecord;-><init>(ILjava/lang/String;Landroid/app/ITransientNotification;ILandroid/os/Binder;I)V
+PLcom/android/server/notification/NotificationManagerService$ToastRecord;-><init>(ILjava/lang/String;Landroid/os/IBinder;Landroid/app/ITransientNotification;ILandroid/os/Binder;I)V
+PLcom/android/server/notification/NotificationManagerService$ToastRecord;->update(I)V
+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;
 HSPLcom/android/server/notification/NotificationManagerService$WorkerHandler;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Looper;)V
-PLcom/android/server/notification/NotificationManagerService$WorkerHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/notification/NotificationManagerService$WorkerHandler;->scheduleCancelNotification(Lcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;)V
-PLcom/android/server/notification/NotificationManagerService$WorkerHandler;->scheduleOnPackageChanged(ZI[Ljava/lang/String;[I)V
+HPLcom/android/server/notification/NotificationManagerService$WorkerHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/notification/NotificationManagerService$WorkerHandler;->scheduleCancelNotification(Lcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;)V
+HPLcom/android/server/notification/NotificationManagerService$WorkerHandler;->scheduleOnPackageChanged(ZI[Ljava/lang/String;[I)V
+HPLcom/android/server/notification/NotificationManagerService$WorkerHandler;->scheduleSendRankingUpdate()V
 HSPLcom/android/server/notification/NotificationManagerService;-><clinit>()V
 HSPLcom/android/server/notification/NotificationManagerService;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/notification/NotificationManagerService;-><init>(Landroid/content/Context;Lcom/android/server/notification/NotificationRecordLogger;)V
+HSPLcom/android/server/notification/NotificationManagerService;-><init>(Landroid/content/Context;Lcom/android/server/notification/NotificationRecordLogger;Lcom/android/internal/logging/InstanceIdSequence;)V
 HSPLcom/android/server/notification/NotificationManagerService;->access$100(Lcom/android/server/notification/NotificationManagerService;)Landroid/util/AtomicFile;
-PLcom/android/server/notification/NotificationManagerService;->access$1200(Lcom/android/server/notification/NotificationManagerService;)Landroid/content/pm/IPackageManager;
+HSPLcom/android/server/notification/NotificationManagerService;->access$1000(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
+HPLcom/android/server/notification/NotificationManagerService;->access$10000(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/NotificationRankingUpdate;
+HPLcom/android/server/notification/NotificationManagerService;->access$10100(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/NotificationRankingUpdate;
+HPLcom/android/server/notification/NotificationManagerService;->access$1100(Lcom/android/server/notification/NotificationManagerService;)Landroid/content/pm/IPackageManager;
+HPLcom/android/server/notification/NotificationManagerService;->access$1200(Lcom/android/server/notification/NotificationManagerService;)Landroid/content/pm/IPackageManager;
+HSPLcom/android/server/notification/NotificationManagerService;->access$1500(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
+HSPLcom/android/server/notification/NotificationManagerService;->access$1500(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/PreferencesHelper;
+HSPLcom/android/server/notification/NotificationManagerService;->access$1600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/ConditionProviders;
+HSPLcom/android/server/notification/NotificationManagerService;->access$1600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
 HSPLcom/android/server/notification/NotificationManagerService;->access$1600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/PreferencesHelper;
+PLcom/android/server/notification/NotificationManagerService;->access$1700()Ljava/lang/String;
+HSPLcom/android/server/notification/NotificationManagerService;->access$1700(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/ConditionProviders;
 HSPLcom/android/server/notification/NotificationManagerService;->access$1700(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
+PLcom/android/server/notification/NotificationManagerService;->access$1800()Ljava/lang/String;
 HSPLcom/android/server/notification/NotificationManagerService;->access$1800(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/ConditionProviders;
+PLcom/android/server/notification/NotificationManagerService;->access$1800(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationManagerService;->access$1900()I
+PLcom/android/server/notification/NotificationManagerService;->access$1900(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)Lcom/android/server/notification/NotificationRecord;
 HSPLcom/android/server/notification/NotificationManagerService;->access$200(Lcom/android/server/notification/NotificationManagerService;Ljava/io/OutputStream;ZI)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$2000()I
 HSPLcom/android/server/notification/NotificationManagerService;->access$2100()I
+HPLcom/android/server/notification/NotificationManagerService;->access$2100(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
 HSPLcom/android/server/notification/NotificationManagerService;->access$2200()I
+HSPLcom/android/server/notification/NotificationManagerService;->access$2200(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
+HSPLcom/android/server/notification/NotificationManagerService;->access$2200(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->access$2300(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/lights/Light;
+PLcom/android/server/notification/NotificationManagerService;->access$2300(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/lights/LogicalLight;
 PLcom/android/server/notification/NotificationManagerService;->access$2300(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
+PLcom/android/server/notification/NotificationManagerService;->access$2300(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->access$2400(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/lights/Light;
+HSPLcom/android/server/notification/NotificationManagerService;->access$2400(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/ManagedServices$UserProfiles;
 PLcom/android/server/notification/NotificationManagerService;->access$2400(Lcom/android/server/notification/NotificationManagerService;)V
 PLcom/android/server/notification/NotificationManagerService;->access$2500(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/lights/Light;
+HSPLcom/android/server/notification/NotificationManagerService;->access$2500(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/ManagedServices$UserProfiles;
+HSPLcom/android/server/notification/NotificationManagerService;->access$2500(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$SettingsObserver;
 HSPLcom/android/server/notification/NotificationManagerService;->access$2600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/ManagedServices$UserProfiles;
+PLcom/android/server/notification/NotificationManagerService;->access$2600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationHistoryManager;
+HSPLcom/android/server/notification/NotificationManagerService;->access$2600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$SettingsObserver;
 PLcom/android/server/notification/NotificationManagerService;->access$2700(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$SettingsObserver;
+HSPLcom/android/server/notification/NotificationManagerService;->access$2800(Lcom/android/server/notification/NotificationManagerService;)F
+HPLcom/android/server/notification/NotificationManagerService;->access$2800(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/ActivityManager;
+HSPLcom/android/server/notification/NotificationManagerService;->access$2802(Lcom/android/server/notification/NotificationManagerService;F)F
 HSPLcom/android/server/notification/NotificationManagerService;->access$2900(Lcom/android/server/notification/NotificationManagerService;)F
+HSPLcom/android/server/notification/NotificationManagerService;->access$2900(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V
 HSPLcom/android/server/notification/NotificationManagerService;->access$2902(Lcom/android/server/notification/NotificationManagerService;F)F
+PLcom/android/server/notification/NotificationManagerService;->access$3000(Lcom/android/server/notification/NotificationManagerService;)V
 HSPLcom/android/server/notification/NotificationManagerService;->access$3000(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService;->access$302(Lcom/android/server/notification/NotificationManagerService;Z)Z
-PLcom/android/server/notification/NotificationManagerService;->access$3100(Lcom/android/server/notification/NotificationManagerService;)V
-PLcom/android/server/notification/NotificationManagerService;->access$3600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/wm/WindowManagerInternal;
+HSPLcom/android/server/notification/NotificationManagerService;->access$3100(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->access$3100(Lcom/android/server/notification/NotificationManagerService;ILjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->access$3200(Lcom/android/server/notification/NotificationManagerService;ILjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->access$3200(Lcom/android/server/notification/NotificationManagerService;ILjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->access$3300(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/ActivityManager;
+PLcom/android/server/notification/NotificationManagerService;->access$3300(Lcom/android/server/notification/NotificationManagerService;ILjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->access$3400(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/internal/compat/IPlatformCompat;
+PLcom/android/server/notification/NotificationManagerService;->access$3500(Lcom/android/server/notification/NotificationManagerService;)Landroid/os/Handler;
+HPLcom/android/server/notification/NotificationManagerService;->access$3600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/wm/WindowManagerInternal;
+HPLcom/android/server/notification/NotificationManagerService;->access$3700(Lcom/android/server/notification/NotificationManagerService;ILjava/lang/String;Landroid/os/IBinder;Ljava/lang/CharSequence;Landroid/app/ITransientNotification;ILandroid/os/Binder;ILandroid/app/ITransientNotificationCallback;)Lcom/android/server/notification/toast/ToastRecord;
 HSPLcom/android/server/notification/NotificationManagerService;->access$3700(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService;->access$3800(Lcom/android/server/notification/NotificationManagerService;)V
+HPLcom/android/server/notification/NotificationManagerService;->access$3800(Lcom/android/server/notification/NotificationManagerService;I)V
 HSPLcom/android/server/notification/NotificationManagerService;->access$3900(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService;->access$400(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Ljava/lang/String;
+HPLcom/android/server/notification/NotificationManagerService;->access$4000(Lcom/android/server/notification/NotificationManagerService;)V
 PLcom/android/server/notification/NotificationManagerService;->access$4000(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;ILandroid/app/NotificationChannelGroup;ZZ)V
 HSPLcom/android/server/notification/NotificationManagerService;->access$4100(Lcom/android/server/notification/NotificationManagerService;)Landroid/content/pm/PackageManager;
-HPLcom/android/server/notification/NotificationManagerService;->access$4300(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/SnoozeHelper;
-PLcom/android/server/notification/NotificationManagerService;->access$4700(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->access$4100(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService;->access$4200(Lcom/android/server/notification/NotificationManagerService;)Landroid/content/pm/PackageManager;
+PLcom/android/server/notification/NotificationManagerService;->access$4200(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;ILandroid/app/NotificationChannel;Z)V
+HPLcom/android/server/notification/NotificationManagerService;->access$4200(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;ILandroid/app/NotificationChannelGroup;ZZ)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$4300(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/SnoozeHelper;
+HSPLcom/android/server/notification/NotificationManagerService;->access$4400(Lcom/android/server/notification/NotificationManagerService;)Landroid/content/pm/PackageManager;
+HPLcom/android/server/notification/NotificationManagerService;->access$4400(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/SnoozeHelper;
+PLcom/android/server/notification/NotificationManagerService;->access$4400(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->access$4500(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->access$4500(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;ILandroid/app/NotificationChannel;Z)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$4600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/SnoozeHelper;
+PLcom/android/server/notification/NotificationManagerService;->access$4700(Lcom/android/server/notification/NotificationManagerService;)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$4700(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$4800(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/AppOpsManager;
+HPLcom/android/server/notification/NotificationManagerService;->access$4800(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
 PLcom/android/server/notification/NotificationManagerService;->access$4800(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$4900(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$Archive;
+PLcom/android/server/notification/NotificationManagerService;->access$4900(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->access$4900(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
 PLcom/android/server/notification/NotificationManagerService;->access$500(Lcom/android/server/notification/NotificationManagerService;)V
-PLcom/android/server/notification/NotificationManagerService;->access$600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
+PLcom/android/server/notification/NotificationManagerService;->access$5000(Lcom/android/server/notification/NotificationManagerService;)V
+HPLcom/android/server/notification/NotificationManagerService;->access$5000(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$5100(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->access$5100(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$5100(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+PLcom/android/server/notification/NotificationManagerService;->access$5200(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->access$5200(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+PLcom/android/server/notification/NotificationManagerService;->access$5200(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)Z
+PLcom/android/server/notification/NotificationManagerService;->access$5300(Lcom/android/server/notification/NotificationManagerService;)I
+PLcom/android/server/notification/NotificationManagerService;->access$5300(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->access$5300(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)Z
+PLcom/android/server/notification/NotificationManagerService;->access$5400(Lcom/android/server/notification/NotificationManagerService;)I
+PLcom/android/server/notification/NotificationManagerService;->access$5400(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+PLcom/android/server/notification/NotificationManagerService;->access$5500(Lcom/android/server/notification/NotificationManagerService;)I
+PLcom/android/server/notification/NotificationManagerService;->access$5500(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/admin/DevicePolicyManagerInternal;
+PLcom/android/server/notification/NotificationManagerService;->access$5500(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)Z
+PLcom/android/server/notification/NotificationManagerService;->access$5600(Lcom/android/server/notification/NotificationManagerService;)I
+PLcom/android/server/notification/NotificationManagerService;->access$5600(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/admin/DevicePolicyManagerInternal;
+PLcom/android/server/notification/NotificationManagerService;->access$5600(Lcom/android/server/notification/NotificationManagerService;Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+PLcom/android/server/notification/NotificationManagerService;->access$5700(Lcom/android/server/notification/NotificationManagerService;)I
+PLcom/android/server/notification/NotificationManagerService;->access$5700(Lcom/android/server/notification/NotificationManagerService;Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+PLcom/android/server/notification/NotificationManagerService;->access$5800(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/admin/DevicePolicyManagerInternal;
+PLcom/android/server/notification/NotificationManagerService;->access$5800(Lcom/android/server/notification/NotificationManagerService;Ljava/io/FileDescriptor;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+PLcom/android/server/notification/NotificationManagerService;->access$5900(Lcom/android/server/notification/NotificationManagerService;Ljava/io/FileDescriptor;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+PLcom/android/server/notification/NotificationManagerService;->access$5900(Lcom/android/server/notification/NotificationManagerService;Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
 PLcom/android/server/notification/NotificationManagerService;->access$6000(Lcom/android/server/notification/NotificationManagerService;)Ljava/util/List;
-PLcom/android/server/notification/NotificationManagerService;->access$6100(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/RankingHelper;
+PLcom/android/server/notification/NotificationManagerService;->access$6000(Lcom/android/server/notification/NotificationManagerService;Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$6100(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/RankingHelper;
+PLcom/android/server/notification/NotificationManagerService;->access$6100(Lcom/android/server/notification/NotificationManagerService;)Ljava/util/List;
+PLcom/android/server/notification/NotificationManagerService;->access$6100(Lcom/android/server/notification/NotificationManagerService;Ljava/io/FileDescriptor;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+HPLcom/android/server/notification/NotificationManagerService;->access$6200(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/RankingHelper;
+HSPLcom/android/server/notification/NotificationManagerService;->access$6200(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->access$6200(Lcom/android/server/notification/NotificationManagerService;Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$6300(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/internal/util/function/TriPredicate;
+PLcom/android/server/notification/NotificationManagerService;->access$6300(Lcom/android/server/notification/NotificationManagerService;)Ljava/util/List;
+HSPLcom/android/server/notification/NotificationManagerService;->access$6300(Lcom/android/server/notification/NotificationManagerService;)V
 HSPLcom/android/server/notification/NotificationManagerService;->access$6400(Lcom/android/server/notification/NotificationManagerService;)Landroid/os/UserManager;
+HSPLcom/android/server/notification/NotificationManagerService;->access$6400(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/internal/util/function/TriPredicate;
+HPLcom/android/server/notification/NotificationManagerService;->access$6400(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/RankingHelper;
+HSPLcom/android/server/notification/NotificationManagerService;->access$6500(Lcom/android/server/notification/NotificationManagerService;)Landroid/os/UserManager;
+HSPLcom/android/server/notification/NotificationManagerService;->access$6500(Lcom/android/server/notification/NotificationManagerService;)V
 PLcom/android/server/notification/NotificationManagerService;->access$6500(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Landroid/service/notification/Adjustment;)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$6600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/internal/util/function/TriPredicate;
 PLcom/android/server/notification/NotificationManagerService;->access$6600(Lcom/android/server/notification/NotificationManagerService;)Z
-PLcom/android/server/notification/NotificationManagerService;->access$6700(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationUsageStats;
-HPLcom/android/server/notification/NotificationManagerService;->access$6900(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;
-PLcom/android/server/notification/NotificationManagerService;->access$7600(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;ILcom/android/server/notification/NotificationRecord;Z)V
-PLcom/android/server/notification/NotificationManagerService;->access$7700(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V
-PLcom/android/server/notification/NotificationManagerService;->access$7900(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/NotificationManagerService;->access$8000(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
-HPLcom/android/server/notification/NotificationManagerService;->access$8100(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;)Z
-PLcom/android/server/notification/NotificationManagerService;->access$8200(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/GroupHelper;
+PLcom/android/server/notification/NotificationManagerService;->access$6600(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Landroid/service/notification/Adjustment;)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$6700(Lcom/android/server/notification/NotificationManagerService;)Landroid/os/UserManager;
+HSPLcom/android/server/notification/NotificationManagerService;->access$6700(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationUsageStats;
+PLcom/android/server/notification/NotificationManagerService;->access$6700(Lcom/android/server/notification/NotificationManagerService;)Z
+HPLcom/android/server/notification/NotificationManagerService;->access$6800(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationUsageStats;
+PLcom/android/server/notification/NotificationManagerService;->access$6800(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Landroid/service/notification/Adjustment;)V
+PLcom/android/server/notification/NotificationManagerService;->access$6800(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Ljava/util/List;
+PLcom/android/server/notification/NotificationManagerService;->access$6900(Lcom/android/server/notification/NotificationManagerService;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->access$6900(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;
+PLcom/android/server/notification/NotificationManagerService;->access$6900(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Ljava/util/List;
+PLcom/android/server/notification/NotificationManagerService;->access$700(Lcom/android/server/notification/NotificationManagerService;)V
+HPLcom/android/server/notification/NotificationManagerService;->access$7000(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationUsageStats;
+PLcom/android/server/notification/NotificationManagerService;->access$7000(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)Lcom/android/server/notification/NotificationRecord;
+HPLcom/android/server/notification/NotificationManagerService;->access$7000(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;
+PLcom/android/server/notification/NotificationManagerService;->access$7100(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$7100(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Ljava/util/List;
+PLcom/android/server/notification/NotificationManagerService;->access$7200(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$7200(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;ZIZLjava/lang/String;)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$7200(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;
+PLcom/android/server/notification/NotificationManagerService;->access$7300(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)Lcom/android/server/notification/NotificationRecord;
+PLcom/android/server/notification/NotificationManagerService;->access$7400(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$7400(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;ZIIIZLjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->access$7500(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;IILjava/lang/String;ZLcom/android/server/notification/NotificationManagerService$FlagChecker;)V
+PLcom/android/server/notification/NotificationManagerService;->access$7500(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;ZIIIZLjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->access$7500(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;ZIZLjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->access$7600(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;IILjava/lang/String;ZLcom/android/server/notification/NotificationManagerService$FlagChecker;)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$7600(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;ILcom/android/server/notification/NotificationRecord;Z)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$7700(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V
+PLcom/android/server/notification/NotificationManagerService;->access$7700(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;ILcom/android/server/notification/NotificationRecord;Z)V
+PLcom/android/server/notification/NotificationManagerService;->access$7700(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;ZIIIZLjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->access$7800(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;IILjava/lang/String;ZLcom/android/server/notification/NotificationManagerService$FlagChecker;)V
+PLcom/android/server/notification/NotificationManagerService;->access$7800(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$7900(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/NotificationManagerService;->access$7900(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;ILcom/android/server/notification/NotificationRecord;Z)V
+PLcom/android/server/notification/NotificationManagerService;->access$800(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/internal/logging/MetricsLogger;
+HSPLcom/android/server/notification/NotificationManagerService;->access$8000(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/NotificationManagerService;->access$8000(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$8100(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$8100(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->access$8200(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/GroupHelper;
+HPLcom/android/server/notification/NotificationManagerService;->access$8200(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;)Z
+HPLcom/android/server/notification/NotificationManagerService;->access$8200(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$8300(Lcom/android/server/notification/NotificationManagerService;)Landroid/os/Binder;
+PLcom/android/server/notification/NotificationManagerService;->access$8300(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/internal/logging/InstanceIdSequence;
+PLcom/android/server/notification/NotificationManagerService;->access$8300(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/GroupHelper;
+PLcom/android/server/notification/NotificationManagerService;->access$8300(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$8302(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Binder;)Landroid/os/Binder;
+PLcom/android/server/notification/NotificationManagerService;->access$8400(Lcom/android/server/notification/NotificationManagerService;)Landroid/net/Uri;
+PLcom/android/server/notification/NotificationManagerService;->access$8400(Lcom/android/server/notification/NotificationManagerService;)Landroid/os/Binder;
+PLcom/android/server/notification/NotificationManagerService;->access$8400(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationRecordLogger;
+HPLcom/android/server/notification/NotificationManagerService;->access$8400(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$8400(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$8402(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Binder;)Landroid/os/Binder;
+PLcom/android/server/notification/NotificationManagerService;->access$8500(Lcom/android/server/notification/NotificationManagerService;)Landroid/media/AudioAttributes;
+PLcom/android/server/notification/NotificationManagerService;->access$8500(Lcom/android/server/notification/NotificationManagerService;)Landroid/net/Uri;
+HPLcom/android/server/notification/NotificationManagerService;->access$8500(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/GroupHelper;
+HPLcom/android/server/notification/NotificationManagerService;->access$8500(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;)Z
+PLcom/android/server/notification/NotificationManagerService;->access$8600(Lcom/android/server/notification/NotificationManagerService;)F
+PLcom/android/server/notification/NotificationManagerService;->access$8600(Lcom/android/server/notification/NotificationManagerService;)Landroid/media/AudioAttributes;
+PLcom/android/server/notification/NotificationManagerService;->access$8600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/GroupHelper;
+HPLcom/android/server/notification/NotificationManagerService;->access$8600(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationRecordLogger;
+PLcom/android/server/notification/NotificationManagerService;->access$8700(Lcom/android/server/notification/NotificationManagerService;)F
+PLcom/android/server/notification/NotificationManagerService;->access$8700(Lcom/android/server/notification/NotificationManagerService;)Landroid/os/Binder;
+PLcom/android/server/notification/NotificationManagerService;->access$8700(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationRecordLogger;
+PLcom/android/server/notification/NotificationManagerService;->access$8700(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService$ToastRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->access$8702(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Binder;)Landroid/os/Binder;
+PLcom/android/server/notification/NotificationManagerService;->access$8800(Lcom/android/server/notification/NotificationManagerService;)Landroid/net/Uri;
+PLcom/android/server/notification/NotificationManagerService;->access$8800(Lcom/android/server/notification/NotificationManagerService;)Landroid/os/Binder;
+PLcom/android/server/notification/NotificationManagerService;->access$8800(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService$ToastRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->access$8802(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Binder;)Landroid/os/Binder;
+PLcom/android/server/notification/NotificationManagerService;->access$8900(Lcom/android/server/notification/NotificationManagerService;)Landroid/media/AudioAttributes;
+PLcom/android/server/notification/NotificationManagerService;->access$8900(Lcom/android/server/notification/NotificationManagerService;)Landroid/net/Uri;
+PLcom/android/server/notification/NotificationManagerService;->access$8900(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->access$8900(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService$ToastRecord;)V
 PLcom/android/server/notification/NotificationManagerService;->access$900(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/ActivityManager;
+PLcom/android/server/notification/NotificationManagerService;->access$9000(Lcom/android/server/notification/NotificationManagerService;)F
+PLcom/android/server/notification/NotificationManagerService;->access$9000(Lcom/android/server/notification/NotificationManagerService;)Landroid/media/AudioAttributes;
+PLcom/android/server/notification/NotificationManagerService;->access$9000(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->access$9000(Lcom/android/server/notification/NotificationManagerService;I)V
+PLcom/android/server/notification/NotificationManagerService;->access$9000(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService$ToastRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->access$9100(Lcom/android/server/notification/NotificationManagerService;)F
+PLcom/android/server/notification/NotificationManagerService;->access$9100(Lcom/android/server/notification/NotificationManagerService;)V
 PLcom/android/server/notification/NotificationManagerService;->access$9100(Lcom/android/server/notification/NotificationManagerService;I)V
-PLcom/android/server/notification/NotificationManagerService;->access$9200(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Message;)V
-HPLcom/android/server/notification/NotificationManagerService;->access$9300(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;Z)V
-PLcom/android/server/notification/NotificationManagerService;->access$9600(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/NotificationRankingUpdate;
-PLcom/android/server/notification/NotificationManagerService;->addAutoGroupAdjustment(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;)V
-PLcom/android/server/notification/NotificationManagerService;->addAutogroupKeyLocked(Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->access$9100(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/toast/ToastRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->access$9200(Lcom/android/server/notification/NotificationManagerService;I)V
+HPLcom/android/server/notification/NotificationManagerService;->access$9200(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Message;)V
+PLcom/android/server/notification/NotificationManagerService;->access$9200(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/toast/ToastRecord;)V
+HPLcom/android/server/notification/NotificationManagerService;->access$9300(Lcom/android/server/notification/NotificationManagerService;)V
+HPLcom/android/server/notification/NotificationManagerService;->access$9300(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Message;)V
+PLcom/android/server/notification/NotificationManagerService;->access$9300(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/toast/ToastRecord;)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$9300(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;Z)V
+PLcom/android/server/notification/NotificationManagerService;->access$9400(Lcom/android/server/notification/NotificationManagerService;)V
+HPLcom/android/server/notification/NotificationManagerService;->access$9400(Lcom/android/server/notification/NotificationManagerService;I)V
+HPLcom/android/server/notification/NotificationManagerService;->access$9400(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Message;)V
+HPLcom/android/server/notification/NotificationManagerService;->access$9400(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;Z)V
+PLcom/android/server/notification/NotificationManagerService;->access$9500(Lcom/android/server/notification/NotificationManagerService;I)V
+HPLcom/android/server/notification/NotificationManagerService;->access$9500(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;Z)V
+PLcom/android/server/notification/NotificationManagerService;->access$9600(Lcom/android/server/notification/NotificationManagerService;I)V
+HPLcom/android/server/notification/NotificationManagerService;->access$9600(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Message;)V
+HSPLcom/android/server/notification/NotificationManagerService;->access$9600(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/NotificationRankingUpdate;
+HPLcom/android/server/notification/NotificationManagerService;->access$9700(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Message;)V
+HPLcom/android/server/notification/NotificationManagerService;->access$9700(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/NotificationRankingUpdate;
+HSPLcom/android/server/notification/NotificationManagerService;->access$9700(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;Z)V
+HPLcom/android/server/notification/NotificationManagerService;->access$9800(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/NotificationRankingUpdate;
+HPLcom/android/server/notification/NotificationManagerService;->access$9800(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;Z)V
+HPLcom/android/server/notification/NotificationManagerService;->addAutoGroupAdjustment(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService;->addAutogroupKeyLocked(Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService;->addDisabledHint(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
+PLcom/android/server/notification/NotificationManagerService;->addDisabledHints(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
 HSPLcom/android/server/notification/NotificationManagerService;->allowAssistant(ILandroid/content/ComponentName;)Z
 HPLcom/android/server/notification/NotificationManagerService;->applyAdjustment(Lcom/android/server/notification/NotificationRecord;Landroid/service/notification/Adjustment;)V
-PLcom/android/server/notification/NotificationManagerService;->applyZenModeLocked(Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/NotificationManagerService;->buzzBeepBlinkLocked(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationManagerService;->applyFlagBubble(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;ILcom/android/server/notification/NotificationRecord;Z)V
+HPLcom/android/server/notification/NotificationManagerService;->applyZenModeLocked(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationManagerService;->buzzBeepBlinkLocked(Lcom/android/server/notification/NotificationRecord;)I
+HSPLcom/android/server/notification/NotificationManagerService;->buzzBeepBlinkLocked(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationManagerService;->calculateHints()I
+PLcom/android/server/notification/NotificationManagerService;->calculateSuppressedEffects()J
+PLcom/android/server/notification/NotificationManagerService;->calculateSuppressedVisualEffects(Landroid/app/NotificationManager$Policy;Landroid/app/NotificationManager$Policy;I)I
 PLcom/android/server/notification/NotificationManagerService;->callStateToString(I)Ljava/lang/String;
-HPLcom/android/server/notification/NotificationManagerService;->canBubble(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;I)Z
-PLcom/android/server/notification/NotificationManagerService;->canShowLightsLocked(Lcom/android/server/notification/NotificationRecord;Z)Z
+HSPLcom/android/server/notification/NotificationManagerService;->canBubble(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;I)Z
+PLcom/android/server/notification/NotificationManagerService;->canLaunchInActivityView(Landroid/content/Context;Landroid/app/PendingIntent;Ljava/lang/String;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->canShowLightsLocked(Lcom/android/server/notification/NotificationRecord;Z)Z
 HSPLcom/android/server/notification/NotificationManagerService;->canUseManagedServices(Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;)Z
-HPLcom/android/server/notification/NotificationManagerService;->cancelAllNotificationsByListLocked(Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;Z)V
+PLcom/android/server/notification/NotificationManagerService;->cancelAllLocked(IIIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;Z)V
+HSPLcom/android/server/notification/NotificationManagerService;->cancelAllNotificationsByListLocked(Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;Z)V
 HSPLcom/android/server/notification/NotificationManagerService;->cancelAllNotificationsInt(IILjava/lang/String;Ljava/lang/String;IIZIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
-PLcom/android/server/notification/NotificationManagerService;->cancelGroupChildrenByListLocked(Ljava/util/ArrayList;Lcom/android/server/notification/NotificationRecord;IILjava/lang/String;ZZLcom/android/server/notification/NotificationManagerService$FlagChecker;)V
-PLcom/android/server/notification/NotificationManagerService;->cancelGroupChildrenLocked(Lcom/android/server/notification/NotificationRecord;IILjava/lang/String;ZLcom/android/server/notification/NotificationManagerService$FlagChecker;)V
-HPLcom/android/server/notification/NotificationManagerService;->cancelNotification(IILjava/lang/String;Ljava/lang/String;IIIZIIIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
-PLcom/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
-PLcom/android/server/notification/NotificationManagerService;->cancelNotificationLocked(Lcom/android/server/notification/NotificationRecord;ZIIIZLjava/lang/String;)V
-PLcom/android/server/notification/NotificationManagerService;->cancelToastLocked(I)V
+HPLcom/android/server/notification/NotificationManagerService;->cancelGroupChildrenByListLocked(Ljava/util/ArrayList;Lcom/android/server/notification/NotificationRecord;IILjava/lang/String;ZZLcom/android/server/notification/NotificationManagerService$FlagChecker;)V
+HPLcom/android/server/notification/NotificationManagerService;->cancelGroupChildrenLocked(Lcom/android/server/notification/NotificationRecord;IILjava/lang/String;ZLcom/android/server/notification/NotificationManagerService$FlagChecker;)V
+HSPLcom/android/server/notification/NotificationManagerService;->cancelNotification(IILjava/lang/String;Ljava/lang/String;IIIZIIIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+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
+HPLcom/android/server/notification/NotificationManagerService;->cancelNotificationLocked(Lcom/android/server/notification/NotificationRecord;ZIIIZLjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->cancelNotificationLocked(Lcom/android/server/notification/NotificationRecord;ZIZLjava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService;->cancelToastLocked(I)V
 HSPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSameApp(Ljava/lang/String;)V
 HSPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSameApp(Ljava/lang/String;II)V
-PLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystem()V
+HSPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystem()V
 HSPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystemOrSameApp(Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationManagerService;->checkDisqualifyingFeatures(IIILjava/lang/String;Lcom/android/server/notification/NotificationRecord;Z)Z
-HPLcom/android/server/notification/NotificationManagerService;->checkRemoteViews(Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;)V
-HPLcom/android/server/notification/NotificationManagerService;->checkRestrictedCategories(Landroid/app/Notification;)V
-PLcom/android/server/notification/NotificationManagerService;->clamp(III)I
-PLcom/android/server/notification/NotificationManagerService;->clearAutogroupSummaryLocked(ILjava/lang/String;)V
-PLcom/android/server/notification/NotificationManagerService;->clearSoundLocked()V
-PLcom/android/server/notification/NotificationManagerService;->clearVibrateLocked()V
-PLcom/android/server/notification/NotificationManagerService;->createAutoGroupSummary(ILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/notification/NotificationManagerService;->createNotificationChannelGroup(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;ZZ)V
+HSPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystemOrShell()V
+HPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystemOrSystemUiOrShell()V
+HSPLcom/android/server/notification/NotificationManagerService;->checkDisqualifyingFeatures(IIILjava/lang/String;Lcom/android/server/notification/NotificationRecord;Z)Z
+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;->clearAutogroupSummaryLocked(ILjava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService;->clearLightsLocked()V
+HPLcom/android/server/notification/NotificationManagerService;->clearSoundLocked()V
+HPLcom/android/server/notification/NotificationManagerService;->clearVibrateLocked()V
+HPLcom/android/server/notification/NotificationManagerService;->createAutoGroupSummary(ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService;->createNotificationChannelGroup(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;ZZ)V
 HPLcom/android/server/notification/NotificationManagerService;->destroyPermissionOwner(Landroid/os/IBinder;ILjava/lang/String;)V
-PLcom/android/server/notification/NotificationManagerService;->disableNotificationEffects(Lcom/android/server/notification/NotificationRecord;)Ljava/lang/String;
-PLcom/android/server/notification/NotificationManagerService;->doChannelWarningToast(Ljava/lang/CharSequence;)V
-PLcom/android/server/notification/NotificationManagerService;->dumpImpl(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+HSPLcom/android/server/notification/NotificationManagerService;->disableNotificationEffects(Lcom/android/server/notification/NotificationRecord;)Ljava/lang/String;
+HPLcom/android/server/notification/NotificationManagerService;->doChannelWarningToast(Ljava/lang/CharSequence;)V
+HPLcom/android/server/notification/NotificationManagerService;->dumpImpl(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 PLcom/android/server/notification/NotificationManagerService;->dumpJson(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 PLcom/android/server/notification/NotificationManagerService;->dumpNotificationRecords(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 PLcom/android/server/notification/NotificationManagerService;->dumpProto(Ljava/io/FileDescriptor;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
-HPLcom/android/server/notification/NotificationManagerService;->enqueueNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;I)V
+HSPLcom/android/server/notification/NotificationManagerService;->enqueueNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;I)V
 PLcom/android/server/notification/NotificationManagerService;->exitIdle()V
+PLcom/android/server/notification/NotificationManagerService;->findInCurrentAndSnoozedNotificationByKeyLocked(Ljava/lang/String;)Lcom/android/server/notification/NotificationRecord;
+PLcom/android/server/notification/NotificationManagerService;->findNotificationByKeyLocked(Ljava/lang/String;)Lcom/android/server/notification/NotificationRecord;
 HPLcom/android/server/notification/NotificationManagerService;->findNotificationByListLocked(Ljava/util/ArrayList;Ljava/lang/String;)Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationManagerService;->findNotificationByListLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;
-PLcom/android/server/notification/NotificationManagerService;->findNotificationLocked(Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;
-PLcom/android/server/notification/NotificationManagerService;->findNotificationRecordIndexLocked(Lcom/android/server/notification/NotificationRecord;)I
-PLcom/android/server/notification/NotificationManagerService;->findNotificationsByListLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Ljava/util/List;
-HPLcom/android/server/notification/NotificationManagerService;->fixNotification(Landroid/app/Notification;Ljava/lang/String;Ljava/lang/String;II)V
-HPLcom/android/server/notification/NotificationManagerService;->flagNotificationForBubbles(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;ILcom/android/server/notification/NotificationRecord;Z)V
+HSPLcom/android/server/notification/NotificationManagerService;->findNotificationByListLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationManagerService;->findNotificationLocked(Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;
+HPLcom/android/server/notification/NotificationManagerService;->findNotificationRecordIndexLocked(Lcom/android/server/notification/NotificationRecord;)I
+HPLcom/android/server/notification/NotificationManagerService;->findNotificationsByListLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Ljava/util/List;
+PLcom/android/server/notification/NotificationManagerService;->finishTokenLocked(Landroid/os/IBinder;I)V
+PLcom/android/server/notification/NotificationManagerService;->finishWindowTokenLocked(Landroid/os/IBinder;I)V
+HSPLcom/android/server/notification/NotificationManagerService;->fixNotification(Landroid/app/Notification;Ljava/lang/String;Ljava/lang/String;II)V
+HSPLcom/android/server/notification/NotificationManagerService;->flagNotificationForBubbles(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;ILcom/android/server/notification/NotificationRecord;Z)V
+PLcom/android/server/notification/NotificationManagerService;->getCompanionManager()Landroid/companion/ICompanionDeviceManager;
 HSPLcom/android/server/notification/NotificationManagerService;->getGroupHelper()Lcom/android/server/notification/GroupHelper;
-HPLcom/android/server/notification/NotificationManagerService;->getHistoryText(Landroid/content/Context;Landroid/app/Notification;)Ljava/lang/String;
-PLcom/android/server/notification/NotificationManagerService;->getHistoryTitle(Landroid/app/Notification;)Ljava/lang/String;
+HSPLcom/android/server/notification/NotificationManagerService;->getHistoryText(Landroid/content/Context;Landroid/app/Notification;)Ljava/lang/String;
+HSPLcom/android/server/notification/NotificationManagerService;->getHistoryTitle(Landroid/app/Notification;)Ljava/lang/String;
 HSPLcom/android/server/notification/NotificationManagerService;->getLongArray(Landroid/content/res/Resources;II[J)[J
 HPLcom/android/server/notification/NotificationManagerService;->getNotificationCountLocked(Ljava/lang/String;IILjava/lang/String;)I
-PLcom/android/server/notification/NotificationManagerService;->getRealUserId(I)I
-PLcom/android/server/notification/NotificationManagerService;->grantUriPermission(Landroid/os/IBinder;Landroid/net/Uri;ILjava/lang/String;I)V
+HSPLcom/android/server/notification/NotificationManagerService;->getRealUserId(I)I
+HPLcom/android/server/notification/NotificationManagerService;->getSuppressors()Ljava/util/ArrayList;
+HPLcom/android/server/notification/NotificationManagerService;->getToastRecord(ILjava/lang/String;Landroid/os/IBinder;Ljava/lang/CharSequence;Landroid/app/ITransientNotification;ILandroid/os/Binder;ILandroid/app/ITransientNotificationCallback;)Lcom/android/server/notification/toast/ToastRecord;
+HPLcom/android/server/notification/NotificationManagerService;->grantUriPermission(Landroid/os/IBinder;Landroid/net/Uri;ILjava/lang/String;I)V
 PLcom/android/server/notification/NotificationManagerService;->handleDurationReached(Lcom/android/server/notification/NotificationManagerService$ToastRecord;)V
-PLcom/android/server/notification/NotificationManagerService;->handleGroupedNotificationLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V
+PLcom/android/server/notification/NotificationManagerService;->handleDurationReached(Lcom/android/server/notification/toast/ToastRecord;)V
+HSPLcom/android/server/notification/NotificationManagerService;->handleGroupedNotificationLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V
 PLcom/android/server/notification/NotificationManagerService;->handleKillTokenTimeout(Lcom/android/server/notification/NotificationManagerService$ToastRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->handleKillTokenTimeout(Lcom/android/server/notification/toast/ToastRecord;)V
+HPLcom/android/server/notification/NotificationManagerService;->handleListenerHintsChanged(I)V
 PLcom/android/server/notification/NotificationManagerService;->handleListenerInterruptionFilterChanged(I)V
 HPLcom/android/server/notification/NotificationManagerService;->handleOnPackageChanged(ZI[Ljava/lang/String;[I)V
 HPLcom/android/server/notification/NotificationManagerService;->handleRankingReconsideration(Landroid/os/Message;)V
 HSPLcom/android/server/notification/NotificationManagerService;->handleRankingSort()V
 HSPLcom/android/server/notification/NotificationManagerService;->handleSavePolicyFile()V
-PLcom/android/server/notification/NotificationManagerService;->handleSendRankingUpdate()V
-HPLcom/android/server/notification/NotificationManagerService;->hasAutoGroupSummaryLocked(Landroid/service/notification/StatusBarNotification;)Z
-PLcom/android/server/notification/NotificationManagerService;->hasCompanionDevice(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
-HPLcom/android/server/notification/NotificationManagerService;->indexOfNotificationLocked(Ljava/lang/String;)I
-PLcom/android/server/notification/NotificationManagerService;->indexOfToastLocked(Ljava/lang/String;Landroid/app/ITransientNotification;)I
+HPLcom/android/server/notification/NotificationManagerService;->handleSendRankingUpdate()V
+HSPLcom/android/server/notification/NotificationManagerService;->hasAutoGroupSummaryLocked(Landroid/service/notification/StatusBarNotification;)Z
+HPLcom/android/server/notification/NotificationManagerService;->hasCompanionDevice(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
+PLcom/android/server/notification/NotificationManagerService;->hideNotificationsForPackages([Ljava/lang/String;)V
+HSPLcom/android/server/notification/NotificationManagerService;->indexOfNotificationLocked(Ljava/lang/String;)I
+HPLcom/android/server/notification/NotificationManagerService;->indexOfToastLocked(Ljava/lang/String;Landroid/app/ITransientNotification;)I
+HPLcom/android/server/notification/NotificationManagerService;->indexOfToastLocked(Ljava/lang/String;Landroid/os/IBinder;)I
 HSPLcom/android/server/notification/NotificationManagerService;->init(Lcom/android/server/notification/NotificationManagerService$WorkerHandler;Lcom/android/server/notification/RankingHandler;Landroid/content/pm/IPackageManager;Landroid/content/pm/PackageManager;Lcom/android/server/lights/LightsManager;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/ConditionProviders;Landroid/companion/ICompanionDeviceManager;Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/NotificationUsageStats;Landroid/util/AtomicFile;Landroid/app/ActivityManager;Lcom/android/server/notification/GroupHelper;Landroid/app/IActivityManager;Landroid/app/usage/UsageStatsManagerInternal;Landroid/app/admin/DevicePolicyManagerInternal;Landroid/app/IUriGrantsManager;Lcom/android/server/uri/UriGrantsManagerInternal;Landroid/app/AppOpsManager;Landroid/os/UserManager;Lcom/android/server/notification/NotificationHistoryManager;)V
-HPLcom/android/server/notification/NotificationManagerService;->isBlocked(Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/NotificationManagerService;->isBlocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationUsageStats;)Z
-HPLcom/android/server/notification/NotificationManagerService;->isCallerAndroid(Ljava/lang/String;I)Z
-PLcom/android/server/notification/NotificationManagerService;->isCallerInstantApp(II)Z
-HPLcom/android/server/notification/NotificationManagerService;->isCallerSameApp(Ljava/lang/String;II)Z
+HSPLcom/android/server/notification/NotificationManagerService;->isBlocked(Lcom/android/server/notification/NotificationRecord;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->isBlocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationUsageStats;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->isCallerAndroid(Ljava/lang/String;I)Z
+HPLcom/android/server/notification/NotificationManagerService;->isCallerInstantApp(II)Z
+HSPLcom/android/server/notification/NotificationManagerService;->isCallerSameApp(Ljava/lang/String;II)Z
 HSPLcom/android/server/notification/NotificationManagerService;->isCallerSystemOrPhone()Z
-PLcom/android/server/notification/NotificationManagerService;->isCallingUidSystem()Z
-PLcom/android/server/notification/NotificationManagerService;->isCritical(Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/NotificationManagerService;->isInCall()Z
-PLcom/android/server/notification/NotificationManagerService;->isLoopingRingtoneNotification(Lcom/android/server/notification/NotificationRecord;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->isCallingUidSystem()Z
+HSPLcom/android/server/notification/NotificationManagerService;->isCritical(Lcom/android/server/notification/NotificationRecord;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->isInCall()Z
+HSPLcom/android/server/notification/NotificationManagerService;->isLoopingRingtoneNotification(Lcom/android/server/notification/NotificationRecord;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->isNotificationAppropriateToBubble(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;ILcom/android/server/notification/NotificationRecord;)Z
 HPLcom/android/server/notification/NotificationManagerService;->isNotificationAppropriateToBubble(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;ILcom/android/server/notification/NotificationRecord;Z)Z
-PLcom/android/server/notification/NotificationManagerService;->isNotificationForCurrentUser(Lcom/android/server/notification/NotificationRecord;)Z
-HPLcom/android/server/notification/NotificationManagerService;->isPackagePausedOrSuspended(Ljava/lang/String;I)Z
-PLcom/android/server/notification/NotificationManagerService;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
+HSPLcom/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;->isUidSystemOrPhone(I)Z
-HPLcom/android/server/notification/NotificationManagerService;->isVisibleToListener(Landroid/service/notification/StatusBarNotification;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
-PLcom/android/server/notification/NotificationManagerService;->isVisuallyInterruptive(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/NotificationManagerService;->keepProcessAliveIfNeededLocked(I)V
-PLcom/android/server/notification/NotificationManagerService;->lambda$doChannelWarningToast$3$NotificationManagerService(Ljava/lang/CharSequence;)V
+HSPLcom/android/server/notification/NotificationManagerService;->isVisibleToListener(Landroid/service/notification/StatusBarNotification;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->isVisuallyInterruptive(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/NotificationManagerService;->keepProcessAliveForToastIfNeededLocked(I)V
+HPLcom/android/server/notification/NotificationManagerService;->keepProcessAliveIfNeededLocked(I)V
+HPLcom/android/server/notification/NotificationManagerService;->lambda$doChannelWarningToast$3$NotificationManagerService(Ljava/lang/CharSequence;)V
+PLcom/android/server/notification/NotificationManagerService;->lambda$onStopUser$2$NotificationManagerService(Landroid/content/pm/UserInfo;)V
 PLcom/android/server/notification/NotificationManagerService;->lambda$onUnlockUser$1$NotificationManagerService(Landroid/content/pm/UserInfo;)V
-PLcom/android/server/notification/NotificationManagerService;->lambda$playVibration$4$NotificationManagerService(Lcom/android/server/notification/NotificationRecord;Landroid/os/VibrationEffect;)V
+HSPLcom/android/server/notification/NotificationManagerService;->lambda$playVibration$4$NotificationManagerService(Lcom/android/server/notification/NotificationRecord;Landroid/os/VibrationEffect;)V
 PLcom/android/server/notification/NotificationManagerService;->lambda$registerDeviceConfigChange$0$NotificationManagerService(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/notification/NotificationManagerService;->listenForCallState()V
 HSPLcom/android/server/notification/NotificationManagerService;->loadPolicyFile()V
-PLcom/android/server/notification/NotificationManagerService;->logSmartSuggestionsVisible(Lcom/android/server/notification/NotificationRecord;I)V
-HPLcom/android/server/notification/NotificationManagerService;->makeRankingUpdateLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/NotificationRankingUpdate;
-PLcom/android/server/notification/NotificationManagerService;->maybeRecordInterruptionLocked(Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/NotificationManagerService;->notificationMatchesUserId(Lcom/android/server/notification/NotificationRecord;I)Z
+HPLcom/android/server/notification/NotificationManagerService;->logSmartSuggestionsVisible(Lcom/android/server/notification/NotificationRecord;I)V
+HSPLcom/android/server/notification/NotificationManagerService;->makeRankingUpdateLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/NotificationRankingUpdate;
+PLcom/android/server/notification/NotificationManagerService;->maybeNotifyChannelOwner(Ljava/lang/String;ILandroid/app/NotificationChannel;Landroid/app/NotificationChannel;)V
+HSPLcom/android/server/notification/NotificationManagerService;->maybeRecordInterruptionLocked(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->notificationMatchesCurrentProfiles(Lcom/android/server/notification/NotificationRecord;I)Z
+HPLcom/android/server/notification/NotificationManagerService;->notificationMatchesUserId(Lcom/android/server/notification/NotificationRecord;I)Z
 HSPLcom/android/server/notification/NotificationManagerService;->onBootPhase(I)V
 HSPLcom/android/server/notification/NotificationManagerService;->onStart()V
+PLcom/android/server/notification/NotificationManagerService;->onStopUser(Landroid/content/pm/UserInfo;)V
 PLcom/android/server/notification/NotificationManagerService;->onUnlockUser(Landroid/content/pm/UserInfo;)V
-PLcom/android/server/notification/NotificationManagerService;->playSound(Lcom/android/server/notification/NotificationRecord;Landroid/net/Uri;)Z
-PLcom/android/server/notification/NotificationManagerService;->playVibration(Lcom/android/server/notification/NotificationRecord;[JZ)Z
+PLcom/android/server/notification/NotificationManagerService;->playInCallNotification()V
+HSPLcom/android/server/notification/NotificationManagerService;->playSound(Lcom/android/server/notification/NotificationRecord;Landroid/net/Uri;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->playVibration(Lcom/android/server/notification/NotificationRecord;[JZ)Z
 HSPLcom/android/server/notification/NotificationManagerService;->readPolicyXml(Ljava/io/InputStream;ZI)V
+PLcom/android/server/notification/NotificationManagerService;->recordCallerLocked(Lcom/android/server/notification/NotificationRecord;)V
 HSPLcom/android/server/notification/NotificationManagerService;->registerDeviceConfigChange()V
+PLcom/android/server/notification/NotificationManagerService;->removeAutogroupKeyLocked(Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService;->removeDisabledHints(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
-PLcom/android/server/notification/NotificationManagerService;->removeDisabledHints(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)Z
-PLcom/android/server/notification/NotificationManagerService;->removeFromNotificationListsLocked(Lcom/android/server/notification/NotificationRecord;)Z
-HPLcom/android/server/notification/NotificationManagerService;->removeRemoteView(Ljava/lang/String;Ljava/lang/String;ILandroid/widget/RemoteViews;)Z
-PLcom/android/server/notification/NotificationManagerService;->reportSeen(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationManagerService;->removeDisabledHints(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)Z
+HPLcom/android/server/notification/NotificationManagerService;->removeFromNotificationListsLocked(Lcom/android/server/notification/NotificationRecord;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->removeRemoteView(Ljava/lang/String;Ljava/lang/String;ILandroid/widget/RemoteViews;)Z
+HPLcom/android/server/notification/NotificationManagerService;->reportSeen(Lcom/android/server/notification/NotificationRecord;)V
 PLcom/android/server/notification/NotificationManagerService;->reportUserInteraction(Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/NotificationManagerService;->resolveNotificationUid(Ljava/lang/String;Ljava/lang/String;II)I
+HSPLcom/android/server/notification/NotificationManagerService;->resolveNotificationUid(Ljava/lang/String;Ljava/lang/String;II)I
+HPLcom/android/server/notification/NotificationManagerService;->revokeUriPermission(Landroid/os/IBinder;Landroid/net/Uri;I)V
 HSPLcom/android/server/notification/NotificationManagerService;->safeBoolean(Ljava/lang/String;Z)Z
-PLcom/android/server/notification/NotificationManagerService;->scheduleDurationReachedLocked(Lcom/android/server/notification/NotificationManagerService$ToastRecord;)V
+HPLcom/android/server/notification/NotificationManagerService;->scheduleDurationReachedLocked(Lcom/android/server/notification/NotificationManagerService$ToastRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->scheduleDurationReachedLocked(Lcom/android/server/notification/toast/ToastRecord;)V
 PLcom/android/server/notification/NotificationManagerService;->scheduleInterruptionFilterChanged(I)V
-PLcom/android/server/notification/NotificationManagerService;->scheduleTimeoutLocked(Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/NotificationManagerService;->sendAccessibilityEvent(Landroid/app/Notification;Ljava/lang/CharSequence;)V
+HPLcom/android/server/notification/NotificationManagerService;->scheduleKillTokenTimeout(Lcom/android/server/notification/NotificationManagerService$ToastRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->scheduleKillTokenTimeout(Lcom/android/server/notification/toast/ToastRecord;)V
+HPLcom/android/server/notification/NotificationManagerService;->scheduleListenerHintsChanged(I)V
+HSPLcom/android/server/notification/NotificationManagerService;->scheduleTimeoutLocked(Lcom/android/server/notification/NotificationRecord;)V
+HSPLcom/android/server/notification/NotificationManagerService;->sendAccessibilityEvent(Landroid/app/Notification;Ljava/lang/CharSequence;)V
 HSPLcom/android/server/notification/NotificationManagerService;->sendRegisteredOnlyBroadcast(Ljava/lang/String;)V
 HSPLcom/android/server/notification/NotificationManagerService;->setDefaultAssistantForUser(I)V
 HSPLcom/android/server/notification/NotificationManagerService;->setNotificationAssistantAccessGrantedForUserInternal(Landroid/content/ComponentName;IZ)V
-PLcom/android/server/notification/NotificationManagerService;->shouldMuteNotificationLocked(Lcom/android/server/notification/NotificationRecord;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->shouldMuteNotificationLocked(Lcom/android/server/notification/NotificationRecord;)Z
 PLcom/android/server/notification/NotificationManagerService;->showNextToastLocked()V
+PLcom/android/server/notification/NotificationManagerService;->snoozeNotificationInt(Ljava/lang/String;JLjava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
 HPLcom/android/server/notification/NotificationManagerService;->unhideNotificationsForPackages([Ljava/lang/String;)V
-PLcom/android/server/notification/NotificationManagerService;->updateAutobundledSummaryFlags(ILjava/lang/String;ZZ)V
-PLcom/android/server/notification/NotificationManagerService;->updateInterruptionFilterLocked()V
-PLcom/android/server/notification/NotificationManagerService;->updateLightsLocked()V
-PLcom/android/server/notification/NotificationManagerService;->updateNotificationPulse()V
-HPLcom/android/server/notification/NotificationManagerService;->updateUriPermissions(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;I)V
+HPLcom/android/server/notification/NotificationManagerService;->updateAutobundledSummaryFlags(ILjava/lang/String;ZZ)V
+HPLcom/android/server/notification/NotificationManagerService;->updateEffectsSuppressorLocked()V
+HSPLcom/android/server/notification/NotificationManagerService;->updateInterruptionFilterLocked()V
+HSPLcom/android/server/notification/NotificationManagerService;->updateLightsLocked()V
+PLcom/android/server/notification/NotificationManagerService;->updateListenerHintsLocked()V
+HPLcom/android/server/notification/NotificationManagerService;->updateNotificationBubbleFlags(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;ILcom/android/server/notification/NotificationRecord;Z)V
+PLcom/android/server/notification/NotificationManagerService;->updateNotificationChannelInt(Ljava/lang/String;ILandroid/app/NotificationChannel;Z)V
+HSPLcom/android/server/notification/NotificationManagerService;->updateNotificationPulse()V
+HSPLcom/android/server/notification/NotificationManagerService;->updateUriPermissions(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;I)V
 HSPLcom/android/server/notification/NotificationManagerService;->writePolicyXml(Ljava/io/OutputStream;ZI)V
 HSPLcom/android/server/notification/NotificationManagerService;->writeSecureNotificationsPolicy(Lorg/xmlpull/v1/XmlSerializer;)V
 HPLcom/android/server/notification/NotificationRecord$Light;-><init>(III)V
 PLcom/android/server/notification/NotificationRecord$Light;->toString()Ljava/lang/String;
-PLcom/android/server/notification/NotificationRecord;-><clinit>()V
-HPLcom/android/server/notification/NotificationRecord;-><init>(Landroid/content/Context;Landroid/service/notification/StatusBarNotification;Landroid/app/NotificationChannel;)V
-PLcom/android/server/notification/NotificationRecord;->addAdjustment(Landroid/service/notification/Adjustment;)V
-HPLcom/android/server/notification/NotificationRecord;->applyAdjustments()V
-HPLcom/android/server/notification/NotificationRecord;->calculateAttributes()Landroid/media/AudioAttributes;
-HPLcom/android/server/notification/NotificationRecord;->calculateGrantableUris()V
-HPLcom/android/server/notification/NotificationRecord;->calculateImportance()V
-HPLcom/android/server/notification/NotificationRecord;->calculateInitialImportance()I
-HPLcom/android/server/notification/NotificationRecord;->calculateLights()Lcom/android/server/notification/NotificationRecord$Light;
-HPLcom/android/server/notification/NotificationRecord;->calculateRankingTimeMs(J)J
-HPLcom/android/server/notification/NotificationRecord;->calculateSound()Landroid/net/Uri;
-HPLcom/android/server/notification/NotificationRecord;->calculateUserSentiment()V
-HPLcom/android/server/notification/NotificationRecord;->calculateVibration()[J
-HPLcom/android/server/notification/NotificationRecord;->canBubble()Z
-HPLcom/android/server/notification/NotificationRecord;->canShowBadge()Z
-PLcom/android/server/notification/NotificationRecord;->copyRankingInformation(Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/NotificationRecord;->dump(Landroid/util/proto/ProtoOutputStream;JZI)V
-PLcom/android/server/notification/NotificationRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/content/Context;Z)V
+HSPLcom/android/server/notification/NotificationRecord;-><clinit>()V
+HSPLcom/android/server/notification/NotificationRecord;-><init>(Landroid/content/Context;Landroid/service/notification/StatusBarNotification;Landroid/app/NotificationChannel;)V
+HPLcom/android/server/notification/NotificationRecord;->addAdjustment(Landroid/service/notification/Adjustment;)V
+HSPLcom/android/server/notification/NotificationRecord;->applyAdjustments()V
+HSPLcom/android/server/notification/NotificationRecord;->calculateAttributes()Landroid/media/AudioAttributes;
+HSPLcom/android/server/notification/NotificationRecord;->calculateGrantableUris()V
+HSPLcom/android/server/notification/NotificationRecord;->calculateImportance()V
+HSPLcom/android/server/notification/NotificationRecord;->calculateInitialImportance()I
+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
+HSPLcom/android/server/notification/NotificationRecord;->calculateVibration()[J
+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
+HPLcom/android/server/notification/NotificationRecord;->dump(Landroid/util/proto/ProtoOutputStream;JZI)V
+HPLcom/android/server/notification/NotificationRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/content/Context;Z)V
 PLcom/android/server/notification/NotificationRecord;->formatRemoteViews(Landroid/widget/RemoteViews;)Ljava/lang/String;
-HPLcom/android/server/notification/NotificationRecord;->getAudioAttributes()Landroid/media/AudioAttributes;
-HPLcom/android/server/notification/NotificationRecord;->getAuthoritativeRank()I
-HPLcom/android/server/notification/NotificationRecord;->getChannel()Landroid/app/NotificationChannel;
+PLcom/android/server/notification/NotificationRecord;->getAdjustmentIssuer()Ljava/lang/String;
+PLcom/android/server/notification/NotificationRecord;->getAssistantImportance()I
+HSPLcom/android/server/notification/NotificationRecord;->getAudioAttributes()Landroid/media/AudioAttributes;
+HSPLcom/android/server/notification/NotificationRecord;->getAuthoritativeRank()I
+HSPLcom/android/server/notification/NotificationRecord;->getChannel()Landroid/app/NotificationChannel;
 HPLcom/android/server/notification/NotificationRecord;->getContactAffinity()F
-HPLcom/android/server/notification/NotificationRecord;->getCriticality()I
+HSPLcom/android/server/notification/NotificationRecord;->getCriticality()I
 PLcom/android/server/notification/NotificationRecord;->getEditChoicesBeforeSending()Z
-HPLcom/android/server/notification/NotificationRecord;->getExposureMs(J)I
+HSPLcom/android/server/notification/NotificationRecord;->getExposureMs(J)I
 HPLcom/android/server/notification/NotificationRecord;->getFlags()I
-HPLcom/android/server/notification/NotificationRecord;->getFreshnessMs(J)I
+HSPLcom/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;
-HPLcom/android/server/notification/NotificationRecord;->getImportance()I
-HPLcom/android/server/notification/NotificationRecord;->getImportanceExplanation()Ljava/lang/CharSequence;
-HPLcom/android/server/notification/NotificationRecord;->getInterruptionMs(J)I
-PLcom/android/server/notification/NotificationRecord;->getItemLogMaker()Landroid/metrics/LogMaker;
-HPLcom/android/server/notification/NotificationRecord;->getKey()Ljava/lang/String;
-HPLcom/android/server/notification/NotificationRecord;->getLastAudiblyAlertedMs()J
-PLcom/android/server/notification/NotificationRecord;->getLastIntrusive()J
-HPLcom/android/server/notification/NotificationRecord;->getLifespanMs(J)I
+HSPLcom/android/server/notification/NotificationRecord;->getGrantableUris()Landroid/util/ArraySet;
+HSPLcom/android/server/notification/NotificationRecord;->getGroupKey()Ljava/lang/String;
+HSPLcom/android/server/notification/NotificationRecord;->getImportance()I
+HSPLcom/android/server/notification/NotificationRecord;->getImportanceExplanation()Ljava/lang/CharSequence;
+PLcom/android/server/notification/NotificationRecord;->getImportanceExplanationCode()I
+PLcom/android/server/notification/NotificationRecord;->getInitialImportance()I
+PLcom/android/server/notification/NotificationRecord;->getInitialImportanceExplanationCode()I
+HSPLcom/android/server/notification/NotificationRecord;->getInterruptionMs(J)I
+PLcom/android/server/notification/NotificationRecord;->getIsAppImportanceLocked()Z
+HPLcom/android/server/notification/NotificationRecord;->getItemLogMaker()Landroid/metrics/LogMaker;
+HSPLcom/android/server/notification/NotificationRecord;->getKey()Ljava/lang/String;
+HSPLcom/android/server/notification/NotificationRecord;->getLastAudiblyAlertedMs()J
+HPLcom/android/server/notification/NotificationRecord;->getLastIntrusive()J
+HSPLcom/android/server/notification/NotificationRecord;->getLifespanMs(J)I
 PLcom/android/server/notification/NotificationRecord;->getLight()Lcom/android/server/notification/NotificationRecord$Light;
-HPLcom/android/server/notification/NotificationRecord;->getLogMaker()Landroid/metrics/LogMaker;
-PLcom/android/server/notification/NotificationRecord;->getLogMaker(J)Landroid/metrics/LogMaker;
-HPLcom/android/server/notification/NotificationRecord;->getNotification()Landroid/app/Notification;
-PLcom/android/server/notification/NotificationRecord;->getNumSmartActionsAdded()I
-PLcom/android/server/notification/NotificationRecord;->getNumSmartRepliesAdded()I
+HSPLcom/android/server/notification/NotificationRecord;->getLogMaker()Landroid/metrics/LogMaker;
+HSPLcom/android/server/notification/NotificationRecord;->getLogMaker(J)Landroid/metrics/LogMaker;
+HSPLcom/android/server/notification/NotificationRecord;->getNotification()Landroid/app/Notification;
+HPLcom/android/server/notification/NotificationRecord;->getNumSmartActionsAdded()I
+HPLcom/android/server/notification/NotificationRecord;->getNumSmartRepliesAdded()I
 HPLcom/android/server/notification/NotificationRecord;->getPackagePriority()I
-HPLcom/android/server/notification/NotificationRecord;->getPackageVisibilityOverride()I
-HPLcom/android/server/notification/NotificationRecord;->getPeopleOverride()Ljava/util/ArrayList;
+HSPLcom/android/server/notification/NotificationRecord;->getPackageVisibilityOverride()I
+HSPLcom/android/server/notification/NotificationRecord;->getPeopleOverride()Ljava/util/ArrayList;
+HPLcom/android/server/notification/NotificationRecord;->getRankingScore()F
 HPLcom/android/server/notification/NotificationRecord;->getRankingTimeMs()J
-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;->getSbn()Landroid/service/notification/StatusBarNotification;
+HSPLcom/android/server/notification/NotificationRecord;->getSmartReplies()Ljava/util/ArrayList;
+HSPLcom/android/server/notification/NotificationRecord;->getSnoozeCriteria()Ljava/util/ArrayList;
+HSPLcom/android/server/notification/NotificationRecord;->getSound()Landroid/net/Uri;
 HPLcom/android/server/notification/NotificationRecord;->getStats()Landroid/service/notification/NotificationStats;
 PLcom/android/server/notification/NotificationRecord;->getSuggestionsGeneratedByAssistant()Z
-HPLcom/android/server/notification/NotificationRecord;->getSuppressedVisualEffects()I
-HPLcom/android/server/notification/NotificationRecord;->getSystemGeneratedSmartActions()Ljava/util/ArrayList;
-HPLcom/android/server/notification/NotificationRecord;->getUid()I
-HPLcom/android/server/notification/NotificationRecord;->getUser()Landroid/os/UserHandle;
-HPLcom/android/server/notification/NotificationRecord;->getUserId()I
-HPLcom/android/server/notification/NotificationRecord;->getUserSentiment()I
-HPLcom/android/server/notification/NotificationRecord;->getVibration()[J
+HSPLcom/android/server/notification/NotificationRecord;->getSuppressedVisualEffects()I
+HSPLcom/android/server/notification/NotificationRecord;->getSystemGeneratedSmartActions()Ljava/util/ArrayList;
+HSPLcom/android/server/notification/NotificationRecord;->getUid()I
+HSPLcom/android/server/notification/NotificationRecord;->getUser()Landroid/os/UserHandle;
+HSPLcom/android/server/notification/NotificationRecord;->getUserId()I
+HSPLcom/android/server/notification/NotificationRecord;->getUserSentiment()I
+HSPLcom/android/server/notification/NotificationRecord;->getVibration()[J
 HPLcom/android/server/notification/NotificationRecord;->hasBeenVisiblyExpanded()Z
-HPLcom/android/server/notification/NotificationRecord;->hasRecordedInterruption()Z
+HSPLcom/android/server/notification/NotificationRecord;->hasRecordedInterruption()Z
 PLcom/android/server/notification/NotificationRecord;->hasSeenSmartReplies()Z
-HPLcom/android/server/notification/NotificationRecord;->hasUndecoratedRemoteView()Z
+HSPLcom/android/server/notification/NotificationRecord;->hasUndecoratedRemoteView()Z
 HPLcom/android/server/notification/NotificationRecord;->isAudioAttributesUsage(I)Z
 HPLcom/android/server/notification/NotificationRecord;->isCategory(Ljava/lang/String;)Z
-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
-PLcom/android/server/notification/NotificationRecord;->isProxied()Z
-HPLcom/android/server/notification/NotificationRecord;->isRecentlyIntrusive()Z
+HPLcom/android/server/notification/NotificationRecord;->isConversation()Z
+HSPLcom/android/server/notification/NotificationRecord;->isHidden()Z
+HSPLcom/android/server/notification/NotificationRecord;->isIntercepted()Z
+HSPLcom/android/server/notification/NotificationRecord;->isInterruptive()Z
+PLcom/android/server/notification/NotificationRecord;->isNewEnoughForAlerting(J)Z
+HSPLcom/android/server/notification/NotificationRecord;->isPreChannelsNotification()Z
+HPLcom/android/server/notification/NotificationRecord;->isProxied()Z
+HSPLcom/android/server/notification/NotificationRecord;->isRecentlyIntrusive()Z
 HPLcom/android/server/notification/NotificationRecord;->isSeen()Z
-HPLcom/android/server/notification/NotificationRecord;->lambda$calculateGrantableUris$0$NotificationRecord(Landroid/net/Uri;)V
+HSPLcom/android/server/notification/NotificationRecord;->lambda$calculateGrantableUris$0$NotificationRecord(Landroid/net/Uri;)V
+PLcom/android/server/notification/NotificationRecord;->recordDirectReplied()V
 PLcom/android/server/notification/NotificationRecord;->recordDismissalSentiment(I)V
 PLcom/android/server/notification/NotificationRecord;->recordDismissalSurface(I)V
 PLcom/android/server/notification/NotificationRecord;->recordExpanded()V
-HPLcom/android/server/notification/NotificationRecord;->setAllowBubble(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setAudiblyAlerted(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setAuthoritativeRank(I)V
-HPLcom/android/server/notification/NotificationRecord;->setContactAffinity(F)V
+PLcom/android/server/notification/NotificationRecord;->recordSnoozed()V
+PLcom/android/server/notification/NotificationRecord;->recordViewedSettings()V
+HSPLcom/android/server/notification/NotificationRecord;->setAllowBubble(Z)V
+PLcom/android/server/notification/NotificationRecord;->setAssistantImportance(I)V
+HSPLcom/android/server/notification/NotificationRecord;->setAudiblyAlerted(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setAuthoritativeRank(I)V
+HSPLcom/android/server/notification/NotificationRecord;->setContactAffinity(F)V
 PLcom/android/server/notification/NotificationRecord;->setEditChoicesBeforeSending(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setGlobalSortKey(Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationRecord;->setHidden(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setIntercepted(Z)Z
-PLcom/android/server/notification/NotificationRecord;->setInterruptive(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setIsAppImportanceLocked(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setGlobalSortKey(Ljava/lang/String;)V
+HSPLcom/android/server/notification/NotificationRecord;->setHidden(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setIntercepted(Z)Z
+HSPLcom/android/server/notification/NotificationRecord;->setInterruptive(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setIsAppImportanceLocked(Z)V
 PLcom/android/server/notification/NotificationRecord;->setNumSmartActionsAdded(I)V
 PLcom/android/server/notification/NotificationRecord;->setNumSmartRepliesAdded(I)V
-HPLcom/android/server/notification/NotificationRecord;->setPackagePriority(I)V
-HPLcom/android/server/notification/NotificationRecord;->setPackageVisibilityOverride(I)V
-HPLcom/android/server/notification/NotificationRecord;->setRecentlyIntrusive(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setRecordedInterruption(Z)V
+PLcom/android/server/notification/NotificationRecord;->setOverrideGroupKey(Ljava/lang/String;)V
+HSPLcom/android/server/notification/NotificationRecord;->setPackagePriority(I)V
+HSPLcom/android/server/notification/NotificationRecord;->setPackageVisibilityOverride(I)V
+HSPLcom/android/server/notification/NotificationRecord;->setRecentlyIntrusive(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setRecordedInterruption(Z)V
 HPLcom/android/server/notification/NotificationRecord;->setSeen()V
 PLcom/android/server/notification/NotificationRecord;->setSeenSmartReplies(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setShowBadge(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setShowBadge(Z)V
 PLcom/android/server/notification/NotificationRecord;->setSmartReplies(Ljava/util/ArrayList;)V
 PLcom/android/server/notification/NotificationRecord;->setSuggestionsGeneratedByAssistant(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setSuppressedVisualEffects(I)V
-PLcom/android/server/notification/NotificationRecord;->setSystemImportance(I)V
+HSPLcom/android/server/notification/NotificationRecord;->setSuppressedVisualEffects(I)V
+PLcom/android/server/notification/NotificationRecord;->setSystemGeneratedSmartActions(Ljava/util/ArrayList;)V
+HPLcom/android/server/notification/NotificationRecord;->setSystemImportance(I)V
 HPLcom/android/server/notification/NotificationRecord;->setTextChanged(Z)V
-PLcom/android/server/notification/NotificationRecord;->setVisibility(ZII)V
-PLcom/android/server/notification/NotificationRecord;->toString()Ljava/lang/String;
-HPLcom/android/server/notification/NotificationRecord;->updateNotificationChannel(Landroid/app/NotificationChannel;)V
-HPLcom/android/server/notification/NotificationRecord;->visitGrantableUri(Landroid/net/Uri;Z)V
+HPLcom/android/server/notification/NotificationRecord;->setVisibility(ZII)V
+HPLcom/android/server/notification/NotificationRecord;->toString()Ljava/lang/String;
+HSPLcom/android/server/notification/NotificationRecord;->updateNotificationChannel(Landroid/app/NotificationChannel;)V
+HSPLcom/android/server/notification/NotificationRecord;->visitGrantableUri(Landroid/net/Uri;Z)V
+HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;-><init>(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getAssistantHash()I
+PLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getInstanceId()I
+HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getNumPeople()I
+HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getNumPeople(Landroid/os/Bundle;)I
+HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getStyle()I
+HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getStyle(Landroid/os/Bundle;)I
+PLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getUiEvent()Lcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvents;
+HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->shouldLog(I)Z
+PLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvents;-><clinit>()V
+PLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvents;-><init>(Ljava/lang/String;II)V
+PLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvents;->getId()I
+HSPLcom/android/server/notification/NotificationRecordLoggerImpl;-><init>()V
+HPLcom/android/server/notification/NotificationRecordLoggerImpl;->logNotificationReported(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V
 HSPLcom/android/server/notification/NotificationUsageStats$1;-><init>(Lcom/android/server/notification/NotificationUsageStats;Landroid/os/Looper;)V
 PLcom/android/server/notification/NotificationUsageStats$1;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;-><init>(Landroid/content/Context;Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->countApiUse(Lcom/android/server/notification/NotificationRecord;)V
+HSPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;-><init>(Landroid/content/Context;Ljava/lang/String;)V
+HSPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->countApiUse(Lcom/android/server/notification/NotificationRecord;)V
 PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->dumpJson()Lorg/json/JSONObject;
 PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->emit()V
 PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->getEnqueueRate()F
-PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->getEnqueueRate(J)F
+HPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->getEnqueueRate(J)F
 PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->getPrevious()Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
-PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->isAlertRateLimited()Z
+HSPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->isAlertRateLimited()Z
 PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->maybeCount(Ljava/lang/String;I)V
 PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->maybePut(Lorg/json/JSONObject;Ljava/lang/String;F)V
 HPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->maybePut(Lorg/json/JSONObject;Ljava/lang/String;I)V
-PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->toStringWithIndent(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->updateInterarrivalEstimate(J)V
-PLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;-><clinit>()V
-PLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;-><init>(Landroid/content/Context;Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->increment(I)V
+HPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->toStringWithIndent(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->updateInterarrivalEstimate(J)V
+HSPLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;-><clinit>()V
+HSPLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;-><init>(Landroid/content/Context;Ljava/lang/String;)V
+HSPLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->increment(I)V
 PLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->maybeCount(Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;)V
 PLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->maybePut(Lorg/json/JSONObject;Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;)V
-PLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->toString()Ljava/lang/String;
+HPLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->toString()Ljava/lang/String;
 PLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->update(Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;)V
 HSPLcom/android/server/notification/NotificationUsageStats$SQLiteLog$1;-><init>(Lcom/android/server/notification/NotificationUsageStats$SQLiteLog;Landroid/os/Looper;)V
-PLcom/android/server/notification/NotificationUsageStats$SQLiteLog$1;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/notification/NotificationUsageStats$SQLiteLog$1;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/notification/NotificationUsageStats$SQLiteLog$2;-><init>(Lcom/android/server/notification/NotificationUsageStats$SQLiteLog;Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)V
-PLcom/android/server/notification/NotificationUsageStats$SQLiteLog$2;->onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V
+HSPLcom/android/server/notification/NotificationUsageStats$SQLiteLog$2;->onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V
 PLcom/android/server/notification/NotificationUsageStats$SQLiteLog$2;->onCreate(Landroid/database/sqlite/SQLiteDatabase;)V
 PLcom/android/server/notification/NotificationUsageStats$SQLiteLog$2;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase;II)V
 HSPLcom/android/server/notification/NotificationUsageStats$SQLiteLog;-><init>(Landroid/content/Context;)V
-PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->access$000(Lcom/android/server/notification/NotificationUsageStats$SQLiteLog;JILcom/android/server/notification/NotificationRecord;)V
+HSPLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->access$000(Lcom/android/server/notification/NotificationUsageStats$SQLiteLog;JILcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->dumpJson(Lcom/android/server/notification/NotificationManagerService$DumpFilter;)Lorg/json/JSONObject;
 PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->getMidnightMs()J
-PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->jsonPostFrequencies(Lcom/android/server/notification/NotificationManagerService$DumpFilter;)Lorg/json/JSONArray;
-PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->logPosted(Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->printPostFrequencies(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
-PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->pruneIfNecessary(Landroid/database/sqlite/SQLiteDatabase;)V
-PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->putNotificationDetails(Lcom/android/server/notification/NotificationRecord;Landroid/content/ContentValues;)V
-PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->putNotificationIdentifiers(Lcom/android/server/notification/NotificationRecord;Landroid/content/ContentValues;)V
-PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->putPosttimeVisibility(Lcom/android/server/notification/NotificationRecord;Landroid/content/ContentValues;)V
-PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->writeEvent(JILcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;-><init>()V
+HPLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->jsonPostFrequencies(Lcom/android/server/notification/NotificationManagerService$DumpFilter;)Lorg/json/JSONArray;
+PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->logClicked(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->logDismissed(Lcom/android/server/notification/NotificationRecord;)V
+HSPLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->logPosted(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->logRemoved(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->printPostFrequencies(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+HSPLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->pruneIfNecessary(Landroid/database/sqlite/SQLiteDatabase;)V
+HSPLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->putNotificationDetails(Lcom/android/server/notification/NotificationRecord;Landroid/content/ContentValues;)V
+HSPLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->putNotificationIdentifiers(Lcom/android/server/notification/NotificationRecord;Landroid/content/ContentValues;)V
+HPLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->putPosttimeVisibility(Lcom/android/server/notification/NotificationRecord;Landroid/content/ContentValues;)V
+HSPLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->writeEvent(JILcom/android/server/notification/NotificationRecord;)V
+HSPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;-><init>()V
 PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->finish()V
 PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->getCurrentAirtimeExpandedMs()J
 PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->getCurrentAirtimeMs()J
-PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->getCurrentPosttimeMs()J
+HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->getCurrentPosttimeMs()J
 PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->hasBeenVisiblyExpanded()Z
 PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onClick()V
 PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onDismiss()V
 PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onExpansionChanged(ZZ)V
 PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onRemoved()V
-PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onVisibilityChanged(Z)V
-PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->toString()Ljava/lang/String;
-PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->updateFrom(Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;)V
-PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->updateVisiblyExpandedStats()V
+HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onVisibilityChanged(Z)V
+HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->toString()Ljava/lang/String;
+HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->updateFrom(Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;)V
+HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->updateVisiblyExpandedStats()V
 HSPLcom/android/server/notification/NotificationUsageStats;-><clinit>()V
 HSPLcom/android/server/notification/NotificationUsageStats;-><init>(Landroid/content/Context;)V
-PLcom/android/server/notification/NotificationUsageStats;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+HPLcom/android/server/notification/NotificationUsageStats;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 PLcom/android/server/notification/NotificationUsageStats;->dumpJson(Lcom/android/server/notification/NotificationManagerService$DumpFilter;)Lorg/json/JSONObject;
-PLcom/android/server/notification/NotificationUsageStats;->emit()V
-PLcom/android/server/notification/NotificationUsageStats;->getAggregatedStatsLocked(Lcom/android/server/notification/NotificationRecord;)[Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
-PLcom/android/server/notification/NotificationUsageStats;->getAggregatedStatsLocked(Ljava/lang/String;)[Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
-PLcom/android/server/notification/NotificationUsageStats;->getAppEnqueueRate(Ljava/lang/String;)F
-PLcom/android/server/notification/NotificationUsageStats;->getOrCreateAggregatedStatsLocked(Ljava/lang/String;)Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
-PLcom/android/server/notification/NotificationUsageStats;->isAlertRateLimited(Ljava/lang/String;)Z
-PLcom/android/server/notification/NotificationUsageStats;->registerBlocked(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationUsageStats;->emit()V
+HSPLcom/android/server/notification/NotificationUsageStats;->getAggregatedStatsLocked(Lcom/android/server/notification/NotificationRecord;)[Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
+HSPLcom/android/server/notification/NotificationUsageStats;->getAggregatedStatsLocked(Ljava/lang/String;)[Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
+HPLcom/android/server/notification/NotificationUsageStats;->getAppEnqueueRate(Ljava/lang/String;)F
+HSPLcom/android/server/notification/NotificationUsageStats;->getOrCreateAggregatedStatsLocked(Ljava/lang/String;)Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
+HSPLcom/android/server/notification/NotificationUsageStats;->isAlertRateLimited(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationUsageStats;->registerBlocked(Lcom/android/server/notification/NotificationRecord;)V
 PLcom/android/server/notification/NotificationUsageStats;->registerClickedByUser(Lcom/android/server/notification/NotificationRecord;)V
 PLcom/android/server/notification/NotificationUsageStats;->registerDismissedByUser(Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/NotificationUsageStats;->registerEnqueuedByApp(Ljava/lang/String;)V
+HSPLcom/android/server/notification/NotificationUsageStats;->registerEnqueuedByApp(Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationUsageStats;->registerImageRemoved(Ljava/lang/String;)V
 HPLcom/android/server/notification/NotificationUsageStats;->registerOverCountQuota(Ljava/lang/String;)V
-PLcom/android/server/notification/NotificationUsageStats;->registerOverRateQuota(Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationUsageStats;->registerPeopleAffinity(Lcom/android/server/notification/NotificationRecord;ZZZ)V
-PLcom/android/server/notification/NotificationUsageStats;->registerPostedByApp(Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/NotificationUsageStats;->registerRemovedByApp(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationUsageStats;->registerOverRateQuota(Ljava/lang/String;)V
+HSPLcom/android/server/notification/NotificationUsageStats;->registerPeopleAffinity(Lcom/android/server/notification/NotificationRecord;ZZZ)V
+HSPLcom/android/server/notification/NotificationUsageStats;->registerPostedByApp(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationUsageStats;->registerRemovedByApp(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationUsageStats;->registerSuspendedByAdmin(Lcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/NotificationUsageStats;->registerUpdatedByApp(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/NotificationUsageStats;->releaseAggregatedStatsLocked([Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;)V
+HSPLcom/android/server/notification/NotificationUsageStats;->releaseAggregatedStatsLocked([Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;)V
 HSPLcom/android/server/notification/PreferencesHelper$PackagePreferences;-><init>()V
 HSPLcom/android/server/notification/PreferencesHelper$PackagePreferences;-><init>(Lcom/android/server/notification/PreferencesHelper$1;)V
+PLcom/android/server/notification/PreferencesHelper$PackagePreferences;->isValidDelegate(Ljava/lang/String;I)Z
 HSPLcom/android/server/notification/PreferencesHelper;-><init>(Landroid/content/Context;Landroid/content/pm/PackageManager;Lcom/android/server/notification/RankingHandler;Lcom/android/server/notification/ZenModeHelper;)V
-HPLcom/android/server/notification/PreferencesHelper;->areBubblesAllowed(Ljava/lang/String;I)Z
-HPLcom/android/server/notification/PreferencesHelper;->badgingEnabled(Landroid/os/UserHandle;)Z
-PLcom/android/server/notification/PreferencesHelper;->bubblesEnabled()Z
-HPLcom/android/server/notification/PreferencesHelper;->canShowBadge(Ljava/lang/String;I)Z
-HPLcom/android/server/notification/PreferencesHelper;->channelIsLiveLocked(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;Landroid/app/NotificationChannel;)Z
+HSPLcom/android/server/notification/PreferencesHelper;->areBubblesAllowed(Ljava/lang/String;I)Z
+HSPLcom/android/server/notification/PreferencesHelper;->badgingEnabled(Landroid/os/UserHandle;)Z
+HSPLcom/android/server/notification/PreferencesHelper;->bubblesEnabled()Z
+HSPLcom/android/server/notification/PreferencesHelper;->canShowBadge(Ljava/lang/String;I)Z
+HSPLcom/android/server/notification/PreferencesHelper;->channelIsLiveLocked(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;Landroid/app/NotificationChannel;)Z
+PLcom/android/server/notification/PreferencesHelper;->clearData(Ljava/lang/String;I)V
+PLcom/android/server/notification/PreferencesHelper;->clearLockedFieldsLocked(Landroid/app/NotificationChannel;)V
 HSPLcom/android/server/notification/PreferencesHelper;->createDefaultChannelIfNeededLocked(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;)Z
 HSPLcom/android/server/notification/PreferencesHelper;->createNotificationChannel(Ljava/lang/String;ILandroid/app/NotificationChannel;ZZ)Z
-PLcom/android/server/notification/PreferencesHelper;->createNotificationChannelGroup(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;Z)V
+HPLcom/android/server/notification/PreferencesHelper;->createNotificationChannelGroup(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;Z)V
 HSPLcom/android/server/notification/PreferencesHelper;->deleteDefaultChannelIfNeededLocked(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;)Z
 HSPLcom/android/server/notification/PreferencesHelper;->deleteNotificationChannel(Ljava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/notification/PreferencesHelper;->deleteNotificationChannelGroup(Ljava/lang/String;ILjava/lang/String;)Ljava/util/List;
 PLcom/android/server/notification/PreferencesHelper;->dump(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 PLcom/android/server/notification/PreferencesHelper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 PLcom/android/server/notification/PreferencesHelper;->dumpBansJson(Lcom/android/server/notification/NotificationManagerService$DumpFilter;)Lorg/json/JSONArray;
-PLcom/android/server/notification/PreferencesHelper;->dumpChannelsJson(Lcom/android/server/notification/NotificationManagerService$DumpFilter;)Lorg/json/JSONArray;
-PLcom/android/server/notification/PreferencesHelper;->dumpJson(Lcom/android/server/notification/NotificationManagerService$DumpFilter;)Lorg/json/JSONObject;
+HPLcom/android/server/notification/PreferencesHelper;->dumpChannelsJson(Lcom/android/server/notification/NotificationManagerService$DumpFilter;)Lorg/json/JSONArray;
+HPLcom/android/server/notification/PreferencesHelper;->dumpJson(Lcom/android/server/notification/NotificationManagerService$DumpFilter;)Lorg/json/JSONObject;
 HPLcom/android/server/notification/PreferencesHelper;->dumpPackagePreferencesLocked(Landroid/util/proto/ProtoOutputStream;JLcom/android/server/notification/NotificationManagerService$DumpFilter;Landroid/util/ArrayMap;)V
 HPLcom/android/server/notification/PreferencesHelper;->dumpPackagePreferencesLocked(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;Landroid/util/ArrayMap;)V
+HPLcom/android/server/notification/PreferencesHelper;->findConversationChannel(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;Ljava/lang/String;Ljava/lang/String;Z)Landroid/app/NotificationChannel;
 HPLcom/android/server/notification/PreferencesHelper;->getAppsBypassingDndCount(I)I
+HPLcom/android/server/notification/PreferencesHelper;->getBlockedAppCount(I)I
+HPLcom/android/server/notification/PreferencesHelper;->getBlockedChannelCount(Ljava/lang/String;I)I
 PLcom/android/server/notification/PreferencesHelper;->getChannelGroupLog(Ljava/lang/String;Ljava/lang/String;)Landroid/metrics/LogMaker;
-PLcom/android/server/notification/PreferencesHelper;->getChannelLog(Landroid/app/NotificationChannel;Ljava/lang/String;)Landroid/metrics/LogMaker;
-HPLcom/android/server/notification/PreferencesHelper;->getImportance(Ljava/lang/String;I)I
-HPLcom/android/server/notification/PreferencesHelper;->getIsAppImportanceLocked(Ljava/lang/String;I)Z
+HSPLcom/android/server/notification/PreferencesHelper;->getChannelLog(Landroid/app/NotificationChannel;Ljava/lang/String;)Landroid/metrics/LogMaker;
+HSPLcom/android/server/notification/PreferencesHelper;->getConversationNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ZZ)Landroid/app/NotificationChannel;
+HPLcom/android/server/notification/PreferencesHelper;->getDeletedChannelCount(Ljava/lang/String;I)I
+HSPLcom/android/server/notification/PreferencesHelper;->getImportance(Ljava/lang/String;I)I
+HSPLcom/android/server/notification/PreferencesHelper;->getIsAppImportanceLocked(Ljava/lang/String;I)Z
+HSPLcom/android/server/notification/PreferencesHelper;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Z)Landroid/app/NotificationChannel;
 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;
@@ -13039,17 +21885,23 @@
 HPLcom/android/server/notification/PreferencesHelper;->getNotificationChannels(Ljava/lang/String;IZ)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/notification/PreferencesHelper;->getOrCreatePackagePreferencesLocked(Ljava/lang/String;I)Lcom/android/server/notification/PreferencesHelper$PackagePreferences;
 HSPLcom/android/server/notification/PreferencesHelper;->getOrCreatePackagePreferencesLocked(Ljava/lang/String;IIIIIZZ)Lcom/android/server/notification/PreferencesHelper$PackagePreferences;
-PLcom/android/server/notification/PreferencesHelper;->getPackageBans()Ljava/util/Map;
-PLcom/android/server/notification/PreferencesHelper;->getPackageChannels()Ljava/util/Map;
+HPLcom/android/server/notification/PreferencesHelper;->getPackageBans()Ljava/util/Map;
+HPLcom/android/server/notification/PreferencesHelper;->getPackageChannels()Ljava/util/Map;
 HSPLcom/android/server/notification/PreferencesHelper;->getPackagePreferencesLocked(Ljava/lang/String;I)Lcom/android/server/notification/PreferencesHelper$PackagePreferences;
-HPLcom/android/server/notification/PreferencesHelper;->isGroupBlocked(Ljava/lang/String;ILjava/lang/String;)Z
+PLcom/android/server/notification/PreferencesHelper;->isDelegateAllowed(Ljava/lang/String;ILjava/lang/String;I)Z
+HSPLcom/android/server/notification/PreferencesHelper;->isGroupBlocked(Ljava/lang/String;ILjava/lang/String;)Z
 HSPLcom/android/server/notification/PreferencesHelper;->lockChannelsForOEM([Ljava/lang/String;)V
+PLcom/android/server/notification/PreferencesHelper;->lockFieldsForUpdateLocked(Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;)V
+HSPLcom/android/server/notification/PreferencesHelper;->onLocaleChanged(Landroid/content/Context;I)V
 HPLcom/android/server/notification/PreferencesHelper;->onPackagesChanged(ZI[Ljava/lang/String;[I)Z
-PLcom/android/server/notification/PreferencesHelper;->onUserSwitched(I)V
+PLcom/android/server/notification/PreferencesHelper;->onUserRemoved(I)V
+HSPLcom/android/server/notification/PreferencesHelper;->onUserSwitched(I)V
 PLcom/android/server/notification/PreferencesHelper;->onUserUnlocked(I)V
-PLcom/android/server/notification/PreferencesHelper;->onlyHasDefaultChannel(Ljava/lang/String;I)Z
+HPLcom/android/server/notification/PreferencesHelper;->onlyHasDefaultChannel(Ljava/lang/String;I)Z
 HSPLcom/android/server/notification/PreferencesHelper;->packagePreferencesKey(Ljava/lang/String;I)Ljava/lang/String;
 HSPLcom/android/server/notification/PreferencesHelper;->readXml(Lorg/xmlpull/v1/XmlPullParser;ZI)V
+PLcom/android/server/notification/PreferencesHelper;->setEnabled(Ljava/lang/String;IZ)V
+PLcom/android/server/notification/PreferencesHelper;->setImportance(Ljava/lang/String;II)V
 HSPLcom/android/server/notification/PreferencesHelper;->shouldHaveDefaultChannel(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;)Z
 PLcom/android/server/notification/PreferencesHelper;->shouldHideSilentStatusIcons()Z
 HSPLcom/android/server/notification/PreferencesHelper;->syncChannelsBypassingDnd(I)V
@@ -13059,150 +21911,210 @@
 HSPLcom/android/server/notification/PreferencesHelper;->updateChannelsBypassingDnd(I)V
 HSPLcom/android/server/notification/PreferencesHelper;->updateConfig()V
 HSPLcom/android/server/notification/PreferencesHelper;->updateDefaultApps(ILandroid/util/ArraySet;Landroid/util/ArraySet;)V
-PLcom/android/server/notification/PreferencesHelper;->updateNotificationChannel(Ljava/lang/String;ILandroid/app/NotificationChannel;Z)V
+HPLcom/android/server/notification/PreferencesHelper;->updateNotificationChannel(Ljava/lang/String;ILandroid/app/NotificationChannel;Z)V
+PLcom/android/server/notification/PreferencesHelper;->updateZenPolicy(Z)V
 HSPLcom/android/server/notification/PreferencesHelper;->wasBadgingForcedTrue(Landroid/content/Context;)Z
 HSPLcom/android/server/notification/PreferencesHelper;->writeXml(Lorg/xmlpull/v1/XmlSerializer;ZI)V
 HSPLcom/android/server/notification/PriorityExtractor;-><init>()V
 HSPLcom/android/server/notification/PriorityExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/PriorityExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/PriorityExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
 HSPLcom/android/server/notification/PriorityExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/PriorityExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/PropConfig;->getStringArray(Landroid/content/Context;Ljava/lang/String;I)[Ljava/lang/String;
 HSPLcom/android/server/notification/RankingHelper;-><init>(Landroid/content/Context;Lcom/android/server/notification/RankingHandler;Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/NotificationUsageStats;[Ljava/lang/String;)V
-PLcom/android/server/notification/RankingHelper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
-HPLcom/android/server/notification/RankingHelper;->extractSignals(Lcom/android/server/notification/NotificationRecord;)V
-PLcom/android/server/notification/RankingHelper;->indexOf(Ljava/util/ArrayList;Lcom/android/server/notification/NotificationRecord;)I
+PLcom/android/server/notification/RankingHelper;->dump(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+HPLcom/android/server/notification/RankingHelper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+HSPLcom/android/server/notification/RankingHelper;->extractSignals(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/RankingHelper;->findExtractor(Ljava/lang/Class;)Lcom/android/server/notification/NotificationSignalExtractor;
+HPLcom/android/server/notification/RankingHelper;->indexOf(Ljava/util/ArrayList;Lcom/android/server/notification/NotificationRecord;)I
 HSPLcom/android/server/notification/RankingHelper;->sort(Ljava/util/ArrayList;)V
-PLcom/android/server/notification/RankingReconsideration;-><init>(Ljava/lang/String;J)V
-PLcom/android/server/notification/RankingReconsideration;->getDelay(Ljava/util/concurrent/TimeUnit;)J
-PLcom/android/server/notification/RankingReconsideration;->getKey()Ljava/lang/String;
+HSPLcom/android/server/notification/RankingReconsideration;-><init>(Ljava/lang/String;J)V
+HSPLcom/android/server/notification/RankingReconsideration;->getDelay(Ljava/util/concurrent/TimeUnit;)J
+HPLcom/android/server/notification/RankingReconsideration;->getKey()Ljava/lang/String;
 HPLcom/android/server/notification/RankingReconsideration;->run()V
-PLcom/android/server/notification/RateEstimator;-><init>()V
+HSPLcom/android/server/notification/RateEstimator;-><init>()V
 HPLcom/android/server/notification/RateEstimator;->getInterarrivalEstimate(J)D
-PLcom/android/server/notification/RateEstimator;->getRate(J)F
-PLcom/android/server/notification/RateEstimator;->update(J)F
+HPLcom/android/server/notification/RateEstimator;->getRate(J)F
+HSPLcom/android/server/notification/RateEstimator;->update(J)F
 HSPLcom/android/server/notification/ScheduleConditionProvider$1;-><init>(Lcom/android/server/notification/ScheduleConditionProvider;)V
-PLcom/android/server/notification/ScheduleConditionProvider$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/notification/ScheduleConditionProvider$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/ScheduleConditionProvider;-><clinit>()V
 HSPLcom/android/server/notification/ScheduleConditionProvider;-><init>()V
+PLcom/android/server/notification/ScheduleConditionProvider;->access$000(Lcom/android/server/notification/ScheduleConditionProvider;)Landroid/util/ArrayMap;
+PLcom/android/server/notification/ScheduleConditionProvider;->access$100(Lcom/android/server/notification/ScheduleConditionProvider;)V
 PLcom/android/server/notification/ScheduleConditionProvider;->addSnoozed(Landroid/net/Uri;)V
 HSPLcom/android/server/notification/ScheduleConditionProvider;->asInterface()Landroid/service/notification/IConditionProvider;
 HSPLcom/android/server/notification/ScheduleConditionProvider;->attachBase(Landroid/content/Context;)V
 PLcom/android/server/notification/ScheduleConditionProvider;->conditionSnoozed(Landroid/net/Uri;)Z
-PLcom/android/server/notification/ScheduleConditionProvider;->createCondition(Landroid/net/Uri;ILjava/lang/String;)Landroid/service/notification/Condition;
+HSPLcom/android/server/notification/ScheduleConditionProvider;->createCondition(Landroid/net/Uri;ILjava/lang/String;)Landroid/service/notification/Condition;
 PLcom/android/server/notification/ScheduleConditionProvider;->dump(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
-PLcom/android/server/notification/ScheduleConditionProvider;->evaluateSubscriptionLocked(Landroid/net/Uri;Landroid/service/notification/ScheduleCalendar;JJ)Landroid/service/notification/Condition;
-PLcom/android/server/notification/ScheduleConditionProvider;->evaluateSubscriptions()V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->evaluateSubscriptionLocked(Landroid/net/Uri;Landroid/service/notification/ScheduleCalendar;JJ)Landroid/service/notification/Condition;
+HSPLcom/android/server/notification/ScheduleConditionProvider;->evaluateSubscriptions()V
 HSPLcom/android/server/notification/ScheduleConditionProvider;->getComponent()Landroid/content/ComponentName;
-PLcom/android/server/notification/ScheduleConditionProvider;->getNextAlarm()J
+HSPLcom/android/server/notification/ScheduleConditionProvider;->getNextAlarm()J
 HSPLcom/android/server/notification/ScheduleConditionProvider;->isValidConditionId(Landroid/net/Uri;)Z
+PLcom/android/server/notification/ScheduleConditionProvider;->meetsSchedule(Landroid/service/notification/ScheduleCalendar;J)Z
 HSPLcom/android/server/notification/ScheduleConditionProvider;->onBootComplete()V
-PLcom/android/server/notification/ScheduleConditionProvider;->onConnected()V
-PLcom/android/server/notification/ScheduleConditionProvider;->onSubscribe(Landroid/net/Uri;)V
-PLcom/android/server/notification/ScheduleConditionProvider;->readSnoozed()V
-PLcom/android/server/notification/ScheduleConditionProvider;->removeSnoozed(Landroid/net/Uri;)V
-PLcom/android/server/notification/ScheduleConditionProvider;->saveSnoozedLocked()V
-PLcom/android/server/notification/ScheduleConditionProvider;->setRegistered(Z)V
-PLcom/android/server/notification/ScheduleConditionProvider;->updateAlarm(JJ)V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->onConnected()V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->onSubscribe(Landroid/net/Uri;)V
+PLcom/android/server/notification/ScheduleConditionProvider;->onUnsubscribe(Landroid/net/Uri;)V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->readSnoozed()V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->removeSnoozed(Landroid/net/Uri;)V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->saveSnoozedLocked()V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->setRegistered(Z)V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->updateAlarm(JJ)V
 HSPLcom/android/server/notification/SnoozeHelper$1;-><init>(Lcom/android/server/notification/SnoozeHelper;)V
+PLcom/android/server/notification/SnoozeHelper$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/SnoozeHelper;-><clinit>()V
 HSPLcom/android/server/notification/SnoozeHelper;-><init>(Landroid/content/Context;Lcom/android/server/notification/SnoozeHelper$Callback;Lcom/android/server/notification/ManagedServices$UserProfiles;)V
-PLcom/android/server/notification/SnoozeHelper;->cancel(ILjava/lang/String;)Z
-HPLcom/android/server/notification/SnoozeHelper;->cancel(ILjava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/notification/SnoozeHelper;->access$000()Z
+PLcom/android/server/notification/SnoozeHelper;->access$100()Ljava/lang/String;
+HSPLcom/android/server/notification/SnoozeHelper;->cancel(ILjava/lang/String;)Z
+HSPLcom/android/server/notification/SnoozeHelper;->cancel(ILjava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/notification/SnoozeHelper;->cancel(IZ)Z
+PLcom/android/server/notification/SnoozeHelper;->clearData(ILjava/lang/String;)V
+PLcom/android/server/notification/SnoozeHelper;->createPendingIntent(Ljava/lang/String;Ljava/lang/String;I)Landroid/app/PendingIntent;
 PLcom/android/server/notification/SnoozeHelper;->dump(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
-HPLcom/android/server/notification/SnoozeHelper;->getSnoozeContextForUnpostedNotification(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/server/notification/SnoozeHelper;->getSnoozeTimeForUnpostedNotification(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/Long;
+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;
 PLcom/android/server/notification/SnoozeHelper;->getSnoozed()Ljava/util/List;
-PLcom/android/server/notification/SnoozeHelper;->getSnoozed(ILjava/lang/String;)Ljava/util/Collection;
-PLcom/android/server/notification/SnoozeHelper;->isSnoozed(ILjava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/notification/SnoozeHelper;->getSnoozed(ILjava/lang/String;)Ljava/util/Collection;
+HSPLcom/android/server/notification/SnoozeHelper;->isSnoozed(ILjava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/notification/SnoozeHelper;->lambda$writeXml$0(JLorg/xmlpull/v1/XmlSerializer;Ljava/lang/Long;)V
 HSPLcom/android/server/notification/SnoozeHelper;->readXml(Lorg/xmlpull/v1/XmlPullParser;)V
-HPLcom/android/server/notification/SnoozeHelper;->removeRecord(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Landroid/util/ArrayMap;)Ljava/lang/Object;
-PLcom/android/server/notification/SnoozeHelper;->repostGroupSummary(Ljava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/server/notification/SnoozeHelper;->removeRecord(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Landroid/util/ArrayMap;)Ljava/lang/Object;
+PLcom/android/server/notification/SnoozeHelper;->repost(Ljava/lang/String;I)V
+HPLcom/android/server/notification/SnoozeHelper;->repostGroupSummary(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/notification/SnoozeHelper;->scheduleRepost(Ljava/lang/String;Ljava/lang/String;IJ)V
+PLcom/android/server/notification/SnoozeHelper;->snooze(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/SnoozeHelper;->snooze(Lcom/android/server/notification/NotificationRecord;J)V
+PLcom/android/server/notification/SnoozeHelper;->storeRecord(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Landroid/util/ArrayMap;Ljava/lang/Object;)V
+PLcom/android/server/notification/SnoozeHelper;->update(ILcom/android/server/notification/NotificationRecord;)V
 HSPLcom/android/server/notification/SnoozeHelper;->writeXml(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/notification/SnoozeHelper;->writeXml(Lorg/xmlpull/v1/XmlSerializer;Landroid/util/ArrayMap;Ljava/lang/String;Lcom/android/server/notification/SnoozeHelper$Inserter;)V
 HSPLcom/android/server/notification/SystemConditionProviderService;-><init>()V
 PLcom/android/server/notification/SystemConditionProviderService;->dumpUpcomingTime(Ljava/io/PrintWriter;Ljava/lang/String;JJ)V
-PLcom/android/server/notification/SystemConditionProviderService;->formatDuration(J)Ljava/lang/String;
-PLcom/android/server/notification/SystemConditionProviderService;->ts(J)Ljava/lang/String;
+HSPLcom/android/server/notification/SystemConditionProviderService;->formatDuration(J)Ljava/lang/String;
+HSPLcom/android/server/notification/SystemConditionProviderService;->ts(J)Ljava/lang/String;
 HSPLcom/android/server/notification/ValidateNotificationPeople$1;-><init>(Lcom/android/server/notification/ValidateNotificationPeople;Landroid/os/Handler;)V
 PLcom/android/server/notification/ValidateNotificationPeople$1;->onChange(ZLandroid/net/Uri;I)V
+PLcom/android/server/notification/ValidateNotificationPeople$2;-><init>(Lcom/android/server/notification/ValidateNotificationPeople;Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;Ljava/util/concurrent/Semaphore;)V
+PLcom/android/server/notification/ValidateNotificationPeople$2;->run()V
 HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;-><init>()V
 HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->access$400(Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;)Z
 HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->getAffinity()F
 HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->isExpired()Z
 HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->isInvalid()Z
+HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->mergeContact(Landroid/database/Cursor;)V
 HPLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;-><init>(Lcom/android/server/notification/ValidateNotificationPeople;Landroid/content/Context;Ljava/lang/String;Ljava/util/LinkedList;)V
 HPLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;-><init>(Lcom/android/server/notification/ValidateNotificationPeople;Landroid/content/Context;Ljava/lang/String;Ljava/util/LinkedList;Lcom/android/server/notification/ValidateNotificationPeople$1;)V
 HPLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;->applyChangesLocked(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;->getContactAffinity()F
 HPLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;->setRecord(Lcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;->work()V
 HSPLcom/android/server/notification/ValidateNotificationPeople;-><clinit>()V
 HSPLcom/android/server/notification/ValidateNotificationPeople;-><init>()V
-HPLcom/android/server/notification/ValidateNotificationPeople;->combineLists([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
-HPLcom/android/server/notification/ValidateNotificationPeople;->getContextAsUser(Landroid/os/UserHandle;)Landroid/content/Context;
-PLcom/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;
+PLcom/android/server/notification/ValidateNotificationPeople;->access$000()Z
+PLcom/android/server/notification/ValidateNotificationPeople;->access$100(Lcom/android/server/notification/ValidateNotificationPeople;)I
+PLcom/android/server/notification/ValidateNotificationPeople;->access$1000(Lcom/android/server/notification/ValidateNotificationPeople;)Lcom/android/server/notification/NotificationUsageStats;
+PLcom/android/server/notification/ValidateNotificationPeople;->access$108(Lcom/android/server/notification/ValidateNotificationPeople;)I
+PLcom/android/server/notification/ValidateNotificationPeople;->access$200()Z
+PLcom/android/server/notification/ValidateNotificationPeople;->access$300(Lcom/android/server/notification/ValidateNotificationPeople;)Landroid/util/LruCache;
+PLcom/android/server/notification/ValidateNotificationPeople;->access$600(Lcom/android/server/notification/ValidateNotificationPeople;Landroid/content/Context;Ljava/lang/String;)Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;
+PLcom/android/server/notification/ValidateNotificationPeople;->access$700(Lcom/android/server/notification/ValidateNotificationPeople;Landroid/content/Context;Ljava/lang/String;)Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;
+PLcom/android/server/notification/ValidateNotificationPeople;->access$800(Lcom/android/server/notification/ValidateNotificationPeople;Landroid/content/Context;Landroid/net/Uri;)Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;
+HPLcom/android/server/notification/ValidateNotificationPeople;->access$900(Lcom/android/server/notification/ValidateNotificationPeople;ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/notification/ValidateNotificationPeople;->combineLists([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
+HPLcom/android/server/notification/ValidateNotificationPeople;->getCacheKey(ILjava/lang/String;)Ljava/lang/String;
+PLcom/android/server/notification/ValidateNotificationPeople;->getContactAffinity(Landroid/os/UserHandle;Landroid/os/Bundle;IF)F
+HSPLcom/android/server/notification/ValidateNotificationPeople;->getContextAsUser(Landroid/os/UserHandle;)Landroid/content/Context;
+HSPLcom/android/server/notification/ValidateNotificationPeople;->getExtraPeople(Landroid/os/Bundle;)[Ljava/lang/String;
+HSPLcom/android/server/notification/ValidateNotificationPeople;->getExtraPeopleForKey(Landroid/os/Bundle;Ljava/lang/String;)[Ljava/lang/String;
 HSPLcom/android/server/notification/ValidateNotificationPeople;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/ValidateNotificationPeople;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/ValidateNotificationPeople;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HPLcom/android/server/notification/ValidateNotificationPeople;->resolveEmailContact(Landroid/content/Context;Ljava/lang/String;)Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;
+PLcom/android/server/notification/ValidateNotificationPeople;->resolvePhoneContact(Landroid/content/Context;Ljava/lang/String;)Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;
 HPLcom/android/server/notification/ValidateNotificationPeople;->searchContacts(Landroid/content/Context;Landroid/net/Uri;)Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;
 HSPLcom/android/server/notification/ValidateNotificationPeople;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/ValidateNotificationPeople;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
-HPLcom/android/server/notification/ValidateNotificationPeople;->validatePeople(Landroid/content/Context;Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
-HPLcom/android/server/notification/ValidateNotificationPeople;->validatePeople(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;Ljava/util/List;[F)Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;
+HSPLcom/android/server/notification/ValidateNotificationPeople;->validatePeople(Landroid/content/Context;Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/ValidateNotificationPeople;->validatePeople(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;Ljava/util/List;[F)Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;
 HSPLcom/android/server/notification/VisibilityExtractor;-><init>()V
 HSPLcom/android/server/notification/VisibilityExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/VisibilityExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/VisibilityExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
 HSPLcom/android/server/notification/VisibilityExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/VisibilityExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/ZenLog;-><clinit>()V
 HSPLcom/android/server/notification/ZenLog;->append(ILjava/lang/String;)V
-PLcom/android/server/notification/ZenLog;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/notification/ZenLog;->componentListToString(Ljava/util/List;)Ljava/lang/String;
+PLcom/android/server/notification/ZenLog;->componentToString(Landroid/content/ComponentName;)Ljava/lang/String;
+HPLcom/android/server/notification/ZenLog;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/notification/ZenLog;->hintsToString(I)Ljava/lang/String;
 HSPLcom/android/server/notification/ZenLog;->ringerModeToString(I)Ljava/lang/String;
-PLcom/android/server/notification/ZenLog;->subscribeResult(Landroid/service/notification/IConditionProvider;Landroid/os/RemoteException;)Ljava/lang/String;
+HSPLcom/android/server/notification/ZenLog;->subscribeResult(Landroid/service/notification/IConditionProvider;Landroid/os/RemoteException;)Ljava/lang/String;
 HSPLcom/android/server/notification/ZenLog;->traceConfig(Ljava/lang/String;Landroid/service/notification/ZenModeConfig;Landroid/service/notification/ZenModeConfig;)V
+HPLcom/android/server/notification/ZenLog;->traceDisableEffects(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;)V
+HPLcom/android/server/notification/ZenLog;->traceEffectsSuppressorChanged(Ljava/util/List;Ljava/util/List;J)V
 HPLcom/android/server/notification/ZenLog;->traceIntercepted(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;)V
-PLcom/android/server/notification/ZenLog;->traceNotIntercepted(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;)V
+HPLcom/android/server/notification/ZenLog;->traceListenerHintsChanged(III)V
+HPLcom/android/server/notification/ZenLog;->traceNotIntercepted(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;)V
 HSPLcom/android/server/notification/ZenLog;->traceSetConsolidatedZenPolicy(Landroid/app/NotificationManager$Policy;Ljava/lang/String;)V
+PLcom/android/server/notification/ZenLog;->traceSetNotificationPolicy(Ljava/lang/String;ILandroid/app/NotificationManager$Policy;)V
+PLcom/android/server/notification/ZenLog;->traceSetRingerModeExternal(IILjava/lang/String;II)V
 HSPLcom/android/server/notification/ZenLog;->traceSetRingerModeInternal(IILjava/lang/String;II)V
 HSPLcom/android/server/notification/ZenLog;->traceSetZenMode(ILjava/lang/String;)V
-PLcom/android/server/notification/ZenLog;->traceSubscribe(Landroid/net/Uri;Landroid/service/notification/IConditionProvider;Landroid/os/RemoteException;)V
+HSPLcom/android/server/notification/ZenLog;->traceSubscribe(Landroid/net/Uri;Landroid/service/notification/IConditionProvider;Landroid/os/RemoteException;)V
+PLcom/android/server/notification/ZenLog;->traceUnsubscribe(Landroid/net/Uri;Landroid/service/notification/IConditionProvider;Landroid/os/RemoteException;)V
 PLcom/android/server/notification/ZenLog;->typeToString(I)Ljava/lang/String;
 HSPLcom/android/server/notification/ZenLog;->zenModeToString(I)Ljava/lang/String;
 HSPLcom/android/server/notification/ZenModeConditions;-><clinit>()V
 HSPLcom/android/server/notification/ZenModeConditions;-><init>(Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/ConditionProviders;)V
+PLcom/android/server/notification/ZenModeConditions;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/notification/ZenModeConditions;->evaluateConfig(Landroid/service/notification/ZenModeConfig;Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/notification/ZenModeConditions;->evaluateRule(Landroid/service/notification/ZenModeConfig$ZenRule;Landroid/util/ArraySet;Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/notification/ZenModeConditions;->onBootComplete()V
-PLcom/android/server/notification/ZenModeConditions;->onConditionChanged(Landroid/net/Uri;Landroid/service/notification/Condition;)V
+HSPLcom/android/server/notification/ZenModeConditions;->onConditionChanged(Landroid/net/Uri;Landroid/service/notification/Condition;)V
 PLcom/android/server/notification/ZenModeConditions;->onServiceAdded(Landroid/content/ComponentName;)V
-PLcom/android/server/notification/ZenModeConditions;->onUserSwitched()V
+HSPLcom/android/server/notification/ZenModeConditions;->onUserSwitched()V
 HSPLcom/android/server/notification/ZenModeConditions;->updateSnoozing(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
 HSPLcom/android/server/notification/ZenModeExtractor;-><clinit>()V
 HSPLcom/android/server/notification/ZenModeExtractor;-><init>()V
 HSPLcom/android/server/notification/ZenModeExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/ZenModeExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/ZenModeExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
 HSPLcom/android/server/notification/ZenModeExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/ZenModeExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/ZenModeFiltering$RepeatCallers;-><init>()V
 HSPLcom/android/server/notification/ZenModeFiltering$RepeatCallers;-><init>(Lcom/android/server/notification/ZenModeFiltering$1;)V
-PLcom/android/server/notification/ZenModeFiltering$RepeatCallers;->peopleString(Landroid/os/Bundle;)Ljava/lang/String;
+PLcom/android/server/notification/ZenModeFiltering$RepeatCallers;->access$100(Lcom/android/server/notification/ZenModeFiltering$RepeatCallers;)I
+PLcom/android/server/notification/ZenModeFiltering$RepeatCallers;->access$200(Lcom/android/server/notification/ZenModeFiltering$RepeatCallers;)Landroid/util/ArrayMap;
+PLcom/android/server/notification/ZenModeFiltering$RepeatCallers;->access$300(Lcom/android/server/notification/ZenModeFiltering$RepeatCallers;Landroid/content/Context;Landroid/os/Bundle;)Z
+PLcom/android/server/notification/ZenModeFiltering$RepeatCallers;->access$400(Lcom/android/server/notification/ZenModeFiltering$RepeatCallers;Landroid/content/Context;Landroid/os/Bundle;)V
+HPLcom/android/server/notification/ZenModeFiltering$RepeatCallers;->cleanUp(Landroid/util/ArrayMap;J)V
+HPLcom/android/server/notification/ZenModeFiltering$RepeatCallers;->isRepeat(Landroid/content/Context;Landroid/os/Bundle;)Z
+HPLcom/android/server/notification/ZenModeFiltering$RepeatCallers;->peopleString(Landroid/os/Bundle;)Ljava/lang/String;
 PLcom/android/server/notification/ZenModeFiltering$RepeatCallers;->recordCall(Landroid/content/Context;Landroid/os/Bundle;)V
+PLcom/android/server/notification/ZenModeFiltering$RepeatCallers;->setThresholdMinutes(Landroid/content/Context;)V
 HSPLcom/android/server/notification/ZenModeFiltering;-><clinit>()V
 HSPLcom/android/server/notification/ZenModeFiltering;-><init>(Landroid/content/Context;)V
-PLcom/android/server/notification/ZenModeFiltering;->audienceMatches(IF)Z
+HPLcom/android/server/notification/ZenModeFiltering;->audienceMatches(IF)Z
 PLcom/android/server/notification/ZenModeFiltering;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/notification/ZenModeFiltering;->isAlarm(Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/ZenModeFiltering;->isCall(Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/ZenModeFiltering;->isCritical(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/ZenModeFiltering;->extras(Lcom/android/server/notification/NotificationRecord;)Landroid/os/Bundle;
+HPLcom/android/server/notification/ZenModeFiltering;->isAlarm(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/ZenModeFiltering;->isCall(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/ZenModeFiltering;->isCritical(Lcom/android/server/notification/NotificationRecord;)Z
 HPLcom/android/server/notification/ZenModeFiltering;->isDefaultPhoneApp(Ljava/lang/String;)Z
-PLcom/android/server/notification/ZenModeFiltering;->isEvent(Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/ZenModeFiltering;->isMedia(Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/ZenModeFiltering;->isMessage(Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/ZenModeFiltering;->isReminder(Lcom/android/server/notification/NotificationRecord;)Z
-PLcom/android/server/notification/ZenModeFiltering;->isSystem(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/ZenModeFiltering;->isEvent(Lcom/android/server/notification/NotificationRecord;)Z
+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;->isReminder(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/ZenModeFiltering;->isSystem(Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/ZenModeFiltering;->matchesCallFilter(Landroid/content/Context;ILandroid/app/NotificationManager$Policy;Landroid/os/UserHandle;Landroid/os/Bundle;Lcom/android/server/notification/ValidateNotificationPeople;IF)Z
 PLcom/android/server/notification/ZenModeFiltering;->recordCall(Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/ZenModeFiltering;->shouldIntercept(ILandroid/app/NotificationManager$Policy;Lcom/android/server/notification/NotificationRecord;)Z
+HSPLcom/android/server/notification/ZenModeFiltering;->shouldIntercept(ILandroid/app/NotificationManager$Policy;Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/ZenModeFiltering;->shouldInterceptAudience(ILcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/ZenModeFiltering;->ts(J)Ljava/lang/String;
 HSPLcom/android/server/notification/ZenModeHelper$Callback;-><init>()V
+PLcom/android/server/notification/ZenModeHelper$Callback;->onAutomaticRuleStatusChanged(ILjava/lang/String;Ljava/lang/String;I)V
 HSPLcom/android/server/notification/ZenModeHelper$Callback;->onConsolidatedPolicyChanged()V
 HSPLcom/android/server/notification/ZenModeHelper$Callback;->onPolicyChanged()V
 HSPLcom/android/server/notification/ZenModeHelper$H$ConfigMessageData;-><init>(Lcom/android/server/notification/ZenModeHelper$H;Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)V
@@ -13211,20 +22123,22 @@
 HSPLcom/android/server/notification/ZenModeHelper$H;->access$200(Lcom/android/server/notification/ZenModeHelper$H;)V
 HSPLcom/android/server/notification/ZenModeHelper$H;->access$300(Lcom/android/server/notification/ZenModeHelper$H;Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/notification/ZenModeHelper$H;->access$400(Lcom/android/server/notification/ZenModeHelper$H;)V
-PLcom/android/server/notification/ZenModeHelper$H;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/notification/ZenModeHelper$H;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/notification/ZenModeHelper$H;->postApplyConfig(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/notification/ZenModeHelper$H;->postDispatchOnZenModeChanged()V
 HSPLcom/android/server/notification/ZenModeHelper$H;->postMetricsTimer()V
 HSPLcom/android/server/notification/ZenModeHelper$Metrics;-><init>(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/ZenModeHelper$Metrics;-><init>(Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/ZenModeHelper$1;)V
+PLcom/android/server/notification/ZenModeHelper$Metrics;->access$1200(Lcom/android/server/notification/ZenModeHelper$Metrics;)V
 HSPLcom/android/server/notification/ZenModeHelper$Metrics;->emit()V
 HSPLcom/android/server/notification/ZenModeHelper$Metrics;->emitDndType()V
 HSPLcom/android/server/notification/ZenModeHelper$Metrics;->emitRules()V
 HSPLcom/android/server/notification/ZenModeHelper$Metrics;->emitZenMode()V
 HSPLcom/android/server/notification/ZenModeHelper$Metrics;->onConfigChanged()V
-PLcom/android/server/notification/ZenModeHelper$Metrics;->onZenModeChanged()V
+HSPLcom/android/server/notification/ZenModeHelper$Metrics;->onZenModeChanged()V
 HSPLcom/android/server/notification/ZenModeHelper$RingerModeDelegate;-><init>(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/ZenModeHelper$RingerModeDelegate;->getRingerModeAffectedStreams(I)I
+PLcom/android/server/notification/ZenModeHelper$RingerModeDelegate;->onSetRingerModeExternal(IILjava/lang/String;ILandroid/media/VolumePolicy;)I
 HSPLcom/android/server/notification/ZenModeHelper$RingerModeDelegate;->onSetRingerModeInternal(IILjava/lang/String;ILandroid/media/VolumePolicy;)I
 PLcom/android/server/notification/ZenModeHelper$RingerModeDelegate;->toString()Ljava/lang/String;
 HSPLcom/android/server/notification/ZenModeHelper$SettingsObserver;-><init>(Lcom/android/server/notification/ZenModeHelper;Landroid/os/Handler;)V
@@ -13233,79 +22147,132 @@
 HSPLcom/android/server/notification/ZenModeHelper$SettingsObserver;->update(Landroid/net/Uri;)V
 HSPLcom/android/server/notification/ZenModeHelper;-><clinit>()V
 HSPLcom/android/server/notification/ZenModeHelper;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/notification/ConditionProviders;)V
-PLcom/android/server/notification/ZenModeHelper;->access$1000(Lcom/android/server/notification/ZenModeHelper;)V
-PLcom/android/server/notification/ZenModeHelper;->access$1300(Lcom/android/server/notification/ZenModeHelper;Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)V
+HSPLcom/android/server/notification/ZenModeHelper;->access$1000(Lcom/android/server/notification/ZenModeHelper;)V
+PLcom/android/server/notification/ZenModeHelper;->access$1100(Lcom/android/server/notification/ZenModeHelper;)Lcom/android/server/notification/ZenModeHelper$Metrics;
+HSPLcom/android/server/notification/ZenModeHelper;->access$1300(Lcom/android/server/notification/ZenModeHelper;Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/notification/ZenModeHelper;->access$500(Lcom/android/server/notification/ZenModeHelper;Ljava/lang/Integer;)V
 HSPLcom/android/server/notification/ZenModeHelper;->access$700(Lcom/android/server/notification/ZenModeHelper;)Landroid/content/Context;
 PLcom/android/server/notification/ZenModeHelper;->access$800(Lcom/android/server/notification/ZenModeHelper;)I
 HSPLcom/android/server/notification/ZenModeHelper;->access$900(Lcom/android/server/notification/ZenModeHelper;)Lcom/android/server/notification/ZenModeHelper$H;
+PLcom/android/server/notification/ZenModeHelper;->addAutomaticZenRule(Landroid/app/AutomaticZenRule;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/notification/ZenModeHelper;->addCallback(Lcom/android/server/notification/ZenModeHelper$Callback;)V
-PLcom/android/server/notification/ZenModeHelper;->applyConfig(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)V
+HSPLcom/android/server/notification/ZenModeHelper;->applyConfig(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/notification/ZenModeHelper;->applyCustomPolicy(Landroid/service/notification/ZenPolicy;Landroid/service/notification/ZenModeConfig$ZenRule;)V
 HSPLcom/android/server/notification/ZenModeHelper;->applyRestrictions()V
 HSPLcom/android/server/notification/ZenModeHelper;->applyRestrictions(ZZI)V
 HSPLcom/android/server/notification/ZenModeHelper;->applyRestrictions(ZZII)V
 HSPLcom/android/server/notification/ZenModeHelper;->applyZenToRingerMode()V
-PLcom/android/server/notification/ZenModeHelper;->canManageAutomaticZenRule(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
+HPLcom/android/server/notification/ZenModeHelper;->canManageAutomaticZenRule(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
 HSPLcom/android/server/notification/ZenModeHelper;->cleanUpZenRules()V
 HSPLcom/android/server/notification/ZenModeHelper;->computeZenMode()I
 PLcom/android/server/notification/ZenModeHelper;->createAutomaticZenRule(Landroid/service/notification/ZenModeConfig$ZenRule;)Landroid/app/AutomaticZenRule;
+PLcom/android/server/notification/ZenModeHelper;->dispatchOnAutomaticRuleStatusChanged(ILjava/lang/String;Ljava/lang/String;I)V
 HSPLcom/android/server/notification/ZenModeHelper;->dispatchOnConfigChanged()V
 HSPLcom/android/server/notification/ZenModeHelper;->dispatchOnConsolidatedPolicyChanged()V
 HSPLcom/android/server/notification/ZenModeHelper;->dispatchOnPolicyChanged()V
-PLcom/android/server/notification/ZenModeHelper;->dispatchOnZenModeChanged()V
+HSPLcom/android/server/notification/ZenModeHelper;->dispatchOnZenModeChanged()V
 PLcom/android/server/notification/ZenModeHelper;->dump(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/notification/ZenModeHelper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/notification/ZenModeHelper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Landroid/service/notification/ZenModeConfig;)V
+HPLcom/android/server/notification/ZenModeHelper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Landroid/service/notification/ZenModeConfig;)V
 HSPLcom/android/server/notification/ZenModeHelper;->evaluateZenMode(Ljava/lang/String;Z)V
-PLcom/android/server/notification/ZenModeHelper;->findMatchingRule(Landroid/service/notification/ZenModeConfig;Landroid/net/Uri;Landroid/service/notification/Condition;)Landroid/service/notification/ZenModeConfig$ZenRule;
-PLcom/android/server/notification/ZenModeHelper;->getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;
+HSPLcom/android/server/notification/ZenModeHelper;->findMatchingRule(Landroid/service/notification/ZenModeConfig;Landroid/net/Uri;Landroid/service/notification/Condition;)Landroid/service/notification/ZenModeConfig$ZenRule;
+HPLcom/android/server/notification/ZenModeHelper;->getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;
 HSPLcom/android/server/notification/ZenModeHelper;->getConfig()Landroid/service/notification/ZenModeConfig;
 HSPLcom/android/server/notification/ZenModeHelper;->getConsolidatedNotificationPolicy()Landroid/app/NotificationManager$Policy;
+PLcom/android/server/notification/ZenModeHelper;->getCurrentInstanceCount(Landroid/content/ComponentName;)I
 HSPLcom/android/server/notification/ZenModeHelper;->getNotificationPolicy()Landroid/app/NotificationManager$Policy;
 HSPLcom/android/server/notification/ZenModeHelper;->getNotificationPolicy(Landroid/service/notification/ZenModeConfig;)Landroid/app/NotificationManager$Policy;
 PLcom/android/server/notification/ZenModeHelper;->getPreviousRingerModeSetting()I
+PLcom/android/server/notification/ZenModeHelper;->getServiceInfo(Landroid/content/ComponentName;)Landroid/content/pm/ServiceInfo;
+PLcom/android/server/notification/ZenModeHelper;->getSuppressedEffects()J
 HSPLcom/android/server/notification/ZenModeHelper;->getZenMode()I
 HSPLcom/android/server/notification/ZenModeHelper;->getZenModeListenerInterruptionFilter()I
 PLcom/android/server/notification/ZenModeHelper;->getZenModeSetting()I
-PLcom/android/server/notification/ZenModeHelper;->getZenRules()Ljava/util/List;
+HPLcom/android/server/notification/ZenModeHelper;->getZenRules()Ljava/util/List;
 HSPLcom/android/server/notification/ZenModeHelper;->initZenMode()V
-PLcom/android/server/notification/ZenModeHelper;->loadConfigForUser(ILjava/lang/String;)V
+PLcom/android/server/notification/ZenModeHelper;->isCall(Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/ZenModeHelper;->isSystemRule(Landroid/app/AutomaticZenRule;)Z
+HSPLcom/android/server/notification/ZenModeHelper;->loadConfigForUser(ILjava/lang/String;)V
+PLcom/android/server/notification/ZenModeHelper;->matchesCallFilter(Landroid/os/UserHandle;Landroid/os/Bundle;Lcom/android/server/notification/ValidateNotificationPeople;IF)Z
 HSPLcom/android/server/notification/ZenModeHelper;->onSystemReady()V
-PLcom/android/server/notification/ZenModeHelper;->onUserSwitched(I)V
+PLcom/android/server/notification/ZenModeHelper;->onUserRemoved(I)V
+HSPLcom/android/server/notification/ZenModeHelper;->onUserSwitched(I)V
 PLcom/android/server/notification/ZenModeHelper;->onUserUnlocked(I)V
 PLcom/android/server/notification/ZenModeHelper;->populateZenRule(Landroid/app/AutomaticZenRule;Landroid/service/notification/ZenModeConfig$ZenRule;Z)V
 HSPLcom/android/server/notification/ZenModeHelper;->readDefaultConfig(Landroid/content/res/Resources;)Landroid/service/notification/ZenModeConfig;
 HSPLcom/android/server/notification/ZenModeHelper;->readXml(Lorg/xmlpull/v1/XmlPullParser;ZI)V
-PLcom/android/server/notification/ZenModeHelper;->ruleMatches(Landroid/net/Uri;Landroid/service/notification/Condition;Landroid/service/notification/ZenModeConfig$ZenRule;)Z
-PLcom/android/server/notification/ZenModeHelper;->setAutomaticZenRuleState(Landroid/net/Uri;Landroid/service/notification/Condition;)V
-PLcom/android/server/notification/ZenModeHelper;->setAutomaticZenRuleStateLocked(Landroid/service/notification/ZenModeConfig;Landroid/service/notification/ZenModeConfig$ZenRule;Landroid/service/notification/Condition;)V
+PLcom/android/server/notification/ZenModeHelper;->recordCaller(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/ZenModeHelper;->removeAutomaticZenRule(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/notification/ZenModeHelper;->removeAutomaticZenRules(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/notification/ZenModeHelper;->requestFromListener(Landroid/content/ComponentName;I)V
+HSPLcom/android/server/notification/ZenModeHelper;->ruleMatches(Landroid/net/Uri;Landroid/service/notification/Condition;Landroid/service/notification/ZenModeConfig$ZenRule;)Z
+HSPLcom/android/server/notification/ZenModeHelper;->setAutomaticZenRuleState(Landroid/net/Uri;Landroid/service/notification/Condition;)V
+PLcom/android/server/notification/ZenModeHelper;->setAutomaticZenRuleState(Ljava/lang/String;Landroid/service/notification/Condition;)V
+HSPLcom/android/server/notification/ZenModeHelper;->setAutomaticZenRuleStateLocked(Landroid/service/notification/ZenModeConfig;Landroid/service/notification/ZenModeConfig$ZenRule;Landroid/service/notification/Condition;)V
 PLcom/android/server/notification/ZenModeHelper;->setConfig(Landroid/service/notification/ZenModeConfig;Landroid/content/ComponentName;Ljava/lang/String;)V
 HSPLcom/android/server/notification/ZenModeHelper;->setConfigLocked(Landroid/service/notification/ZenModeConfig;Landroid/content/ComponentName;Ljava/lang/String;)Z
 HSPLcom/android/server/notification/ZenModeHelper;->setConfigLocked(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)Z
+PLcom/android/server/notification/ZenModeHelper;->setManualZenMode(ILandroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/notification/ZenModeHelper;->setManualZenMode(ILandroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Z)V
+PLcom/android/server/notification/ZenModeHelper;->setNotificationPolicy(Landroid/app/NotificationManager$Policy;)V
 HSPLcom/android/server/notification/ZenModeHelper;->setPreviousRingerModeSetting(Ljava/lang/Integer;)V
 HSPLcom/android/server/notification/ZenModeHelper;->setPriorityOnlyDndExemptPackages([Ljava/lang/String;)V
+HPLcom/android/server/notification/ZenModeHelper;->setSuppressedEffects(J)V
 HSPLcom/android/server/notification/ZenModeHelper;->setZenModeSetting(I)V
-HPLcom/android/server/notification/ZenModeHelper;->shouldIntercept(Lcom/android/server/notification/NotificationRecord;)Z
+HSPLcom/android/server/notification/ZenModeHelper;->shouldIntercept(Lcom/android/server/notification/NotificationRecord;)Z
 HSPLcom/android/server/notification/ZenModeHelper;->showZenUpgradeNotification(I)V
-PLcom/android/server/notification/ZenModeHelper;->updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;Ljava/lang/String;)Z
+HPLcom/android/server/notification/ZenModeHelper;->updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;Ljava/lang/String;)Z
 HSPLcom/android/server/notification/ZenModeHelper;->updateConsolidatedPolicy(Ljava/lang/String;)V
 HSPLcom/android/server/notification/ZenModeHelper;->updateDefaultAutomaticRuleNames()V
+HSPLcom/android/server/notification/ZenModeHelper;->updateDefaultZenRules()V
 HSPLcom/android/server/notification/ZenModeHelper;->updateRingerModeAffectedStreams()V
-PLcom/android/server/notification/ZenModeHelper;->updateSnoozing(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
+HSPLcom/android/server/notification/ZenModeHelper;->updateSnoozing(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
 HSPLcom/android/server/notification/ZenModeHelper;->writeXml(Lorg/xmlpull/v1/XmlSerializer;ZLjava/lang/Integer;I)V
 HSPLcom/android/server/notification/ZenModeHelper;->zenSeverity(I)I
+PLcom/android/server/notification/toast/CustomToastRecord;-><init>(Lcom/android/server/notification/NotificationManagerService;ILjava/lang/String;Landroid/os/IBinder;Landroid/app/ITransientNotification;ILandroid/os/Binder;I)V
+PLcom/android/server/notification/toast/CustomToastRecord;->hide()V
+PLcom/android/server/notification/toast/CustomToastRecord;->show()Z
+HPLcom/android/server/notification/toast/TextToastRecord;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/statusbar/StatusBarManagerInternal;ILjava/lang/String;Landroid/os/IBinder;Ljava/lang/CharSequence;ILandroid/os/Binder;ILandroid/app/ITransientNotificationCallback;)V
+PLcom/android/server/notification/toast/TextToastRecord;->hide()V
+PLcom/android/server/notification/toast/TextToastRecord;->show()Z
+PLcom/android/server/notification/toast/TextToastRecord;->toString()Ljava/lang/String;
+HPLcom/android/server/notification/toast/ToastRecord;-><init>(Lcom/android/server/notification/NotificationManagerService;ILjava/lang/String;Landroid/os/IBinder;ILandroid/os/Binder;I)V
+PLcom/android/server/notification/toast/ToastRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
+PLcom/android/server/notification/toast/ToastRecord;->getDuration()I
+PLcom/android/server/notification/toast/ToastRecord;->update(I)V
+PLcom/android/server/oemlock/-$$Lambda$VendorLock$8zNsLj4Jt-s5XEEk_KIC2zQR29g;-><init>([Ljava/lang/Integer;[Ljava/lang/Boolean;)V
+PLcom/android/server/oemlock/-$$Lambda$VendorLock$8zNsLj4Jt-s5XEEk_KIC2zQR29g;->onValues(IZ)V
+PLcom/android/server/oemlock/-$$Lambda$VendorLock$HjegvthxXAHFarV_FukbaMGePGU;-><init>([Ljava/lang/Integer;[Ljava/lang/Boolean;)V
+PLcom/android/server/oemlock/-$$Lambda$VendorLock$HjegvthxXAHFarV_FukbaMGePGU;->onValues(IZ)V
 HSPLcom/android/server/oemlock/OemLock;-><init>()V
 HSPLcom/android/server/oemlock/OemLockService$1;-><init>(Lcom/android/server/oemlock/OemLockService;)V
-PLcom/android/server/oemlock/OemLockService$1;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/oemlock/OemLockService$1;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
 HSPLcom/android/server/oemlock/OemLockService$2;-><init>(Lcom/android/server/oemlock/OemLockService;)V
+PLcom/android/server/oemlock/OemLockService$2;->isDeviceOemUnlocked()Z
+PLcom/android/server/oemlock/OemLockService$2;->isOemUnlockAllowed()Z
+PLcom/android/server/oemlock/OemLockService$2;->isOemUnlockAllowedByCarrier()Z
+PLcom/android/server/oemlock/OemLockService$2;->setOemUnlockAllowedByCarrier(Z[B)V
 HSPLcom/android/server/oemlock/OemLockService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/oemlock/OemLockService;-><init>(Landroid/content/Context;Lcom/android/server/oemlock/OemLock;)V
+PLcom/android/server/oemlock/OemLockService;->access$000(Lcom/android/server/oemlock/OemLockService;)Lcom/android/server/oemlock/OemLock;
+PLcom/android/server/oemlock/OemLockService;->access$100(Lcom/android/server/oemlock/OemLockService;Z)V
+PLcom/android/server/oemlock/OemLockService;->access$200(Lcom/android/server/oemlock/OemLockService;)V
+PLcom/android/server/oemlock/OemLockService;->access$300(Lcom/android/server/oemlock/OemLockService;)V
+PLcom/android/server/oemlock/OemLockService;->access$600(Lcom/android/server/oemlock/OemLockService;)V
+PLcom/android/server/oemlock/OemLockService;->enforceManageCarrierOemUnlockPermission()V
+PLcom/android/server/oemlock/OemLockService;->enforceOemUnlockReadPermission()V
+PLcom/android/server/oemlock/OemLockService;->enforceUserIsAdmin()V
 HSPLcom/android/server/oemlock/OemLockService;->getOemLock(Landroid/content/Context;)Lcom/android/server/oemlock/OemLock;
 HSPLcom/android/server/oemlock/OemLockService;->onStart()V
+PLcom/android/server/oemlock/OemLockService;->setPersistentDataBlockOemUnlockAllowedBit(Z)V
 HSPLcom/android/server/oemlock/VendorLock;-><init>(Landroid/content/Context;Landroid/hardware/oemlock/V1_0/IOemLock;)V
 HSPLcom/android/server/oemlock/VendorLock;->getOemLockHalService()Landroid/hardware/oemlock/V1_0/IOemLock;
+PLcom/android/server/oemlock/VendorLock;->isOemUnlockAllowedByCarrier()Z
+PLcom/android/server/oemlock/VendorLock;->isOemUnlockAllowedByDevice()Z
+PLcom/android/server/oemlock/VendorLock;->lambda$isOemUnlockAllowedByCarrier$1([Ljava/lang/Integer;[Ljava/lang/Boolean;IZ)V
+PLcom/android/server/oemlock/VendorLock;->lambda$isOemUnlockAllowedByDevice$2([Ljava/lang/Integer;[Ljava/lang/Boolean;IZ)V
+PLcom/android/server/oemlock/VendorLock;->setOemUnlockAllowedByCarrier(Z[B)V
+HPLcom/android/server/oemlock/VendorLock;->toByteArrayList([B)Ljava/util/ArrayList;
 HSPLcom/android/server/om/-$$Lambda$IdmapDaemon$Connection$4U-n0RSv1BPv15mvu8B8zXARcpk;-><init>(Lcom/android/server/om/IdmapDaemon$Connection;)V
 PLcom/android/server/om/-$$Lambda$IdmapDaemon$Connection$4U-n0RSv1BPv15mvu8B8zXARcpk;->run()V
 HSPLcom/android/server/om/-$$Lambda$IdmapDaemon$hZvlb8B5bMAnD3h9mHLjOQXKSTI;-><clinit>()V
@@ -13363,11 +22330,12 @@
 PLcom/android/server/om/IdmapDaemon;->access$202(Lcom/android/server/om/IdmapDaemon;Landroid/os/IIdmap2;)Landroid/os/IIdmap2;
 PLcom/android/server/om/IdmapDaemon;->access$300()V
 HSPLcom/android/server/om/IdmapDaemon;->connect()Lcom/android/server/om/IdmapDaemon$Connection;
-PLcom/android/server/om/IdmapDaemon;->createIdmap(Ljava/lang/String;Ljava/lang/String;IZI)Ljava/lang/String;
+HSPLcom/android/server/om/IdmapDaemon;->createIdmap(Ljava/lang/String;Ljava/lang/String;IZI)Ljava/lang/String;
 HSPLcom/android/server/om/IdmapDaemon;->getIdmapPath(Ljava/lang/String;I)Ljava/lang/String;
 HSPLcom/android/server/om/IdmapDaemon;->getInstance()Lcom/android/server/om/IdmapDaemon;
 HSPLcom/android/server/om/IdmapDaemon;->lambda$connect$0()Landroid/os/IBinder;
 PLcom/android/server/om/IdmapDaemon;->lambda$connect$1()V
+PLcom/android/server/om/IdmapDaemon;->removeIdmap(Ljava/lang/String;I)Z
 HSPLcom/android/server/om/IdmapDaemon;->startIdmapService()V
 PLcom/android/server/om/IdmapDaemon;->stopIdmapService()V
 HSPLcom/android/server/om/IdmapDaemon;->verifyIdmap(Ljava/lang/String;IZI)Z
@@ -13377,38 +22345,61 @@
 HSPLcom/android/server/om/IdmapManager;->createIdmap(Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageInfo;I)Z
 HSPLcom/android/server/om/IdmapManager;->enforceOverlayable(Landroid/content/pm/PackageInfo;)Z
 HSPLcom/android/server/om/IdmapManager;->getIdmapPath(Ljava/lang/String;I)Ljava/lang/String;
+PLcom/android/server/om/IdmapManager;->idmapExists(Landroid/content/om/OverlayInfo;)Z
 HSPLcom/android/server/om/IdmapManager;->idmapExists(Landroid/content/pm/PackageInfo;I)Z
+PLcom/android/server/om/IdmapManager;->removeIdmap(Landroid/content/om/OverlayInfo;I)Z
+PLcom/android/server/om/OverlayActorEnforcer$ActorState;-><clinit>()V
+PLcom/android/server/om/OverlayActorEnforcer$ActorState;-><init>(Ljava/lang/String;I)V
 HSPLcom/android/server/om/OverlayActorEnforcer;-><init>(Lcom/android/server/om/OverlayActorEnforcer$VerifyCallback;)V
+PLcom/android/server/om/OverlayActorEnforcer;->enforceActor(Landroid/content/om/OverlayInfo;Ljava/lang/String;II)V
+PLcom/android/server/om/OverlayActorEnforcer;->isAllowedActor(Ljava/lang/String;Landroid/content/om/OverlayInfo;II)Lcom/android/server/om/OverlayActorEnforcer$ActorState;
 HSPLcom/android/server/om/OverlayManagerService$1;-><init>(Lcom/android/server/om/OverlayManagerService;)V
 PLcom/android/server/om/OverlayManagerService$1;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/om/OverlayManagerService$1;->enforceActor(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/om/OverlayManagerService$1;->enforceDumpPermission(Ljava/lang/String;)V
 PLcom/android/server/om/OverlayManagerService$1;->getDefaultOverlayPackages()[Ljava/lang/String;
-PLcom/android/server/om/OverlayManagerService$1;->getOverlayInfosForTarget(Ljava/lang/String;I)Ljava/util/List;
+PLcom/android/server/om/OverlayManagerService$1;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo;
+HPLcom/android/server/om/OverlayManagerService$1;->getOverlayInfosForTarget(Ljava/lang/String;I)Ljava/util/List;
+HPLcom/android/server/om/OverlayManagerService$1;->handleIncomingUser(ILjava/lang/String;)I
+PLcom/android/server/om/OverlayManagerService$1;->setEnabled(Ljava/lang/String;ZI)Z
+PLcom/android/server/om/OverlayManagerService$1;->setEnabledExclusiveInCategory(Ljava/lang/String;I)Z
 HSPLcom/android/server/om/OverlayManagerService$OverlayChangeListener;-><init>(Lcom/android/server/om/OverlayManagerService;)V
 HSPLcom/android/server/om/OverlayManagerService$OverlayChangeListener;-><init>(Lcom/android/server/om/OverlayManagerService;Lcom/android/server/om/OverlayManagerService$1;)V
-PLcom/android/server/om/OverlayManagerService$OverlayChangeListener;->lambda$onOverlaysChanged$0$OverlayManagerService$OverlayChangeListener(ILjava/lang/String;)V
+HPLcom/android/server/om/OverlayManagerService$OverlayChangeListener;->lambda$onOverlaysChanged$0$OverlayManagerService$OverlayChangeListener(ILjava/lang/String;)V
 PLcom/android/server/om/OverlayManagerService$OverlayChangeListener;->onOverlaysChanged(Ljava/lang/String;I)V
 HSPLcom/android/server/om/OverlayManagerService$PackageManagerHelper;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->cachePackageInfo(Ljava/lang/String;ILandroid/content/pm/PackageInfo;)V
+PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->doesTargetDefineOverlayable(Ljava/lang/String;I)Z
 PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->dump(Ljava/io/PrintWriter;Lcom/android/server/om/DumpState;)V
-PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->forgetPackageInfo(Ljava/lang/String;I)V
+PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->enforcePermission(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->forgetAllPackageInfos(I)V
+HPLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->forgetPackageInfo(Ljava/lang/String;I)V
 HSPLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->getCachedPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->getOverlayPackages(I)Ljava/util/List;
 HSPLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->getPackageInfo(Ljava/lang/String;IZ)Landroid/content/pm/PackageInfo;
+PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->getPackagesForUid(I)[Ljava/lang/String;
 HSPLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->signaturesMatching(Ljava/lang/String;Ljava/lang/String;I)Z
 HSPLcom/android/server/om/OverlayManagerService$PackageReceiver;-><init>(Lcom/android/server/om/OverlayManagerService;)V
 HSPLcom/android/server/om/OverlayManagerService$PackageReceiver;-><init>(Lcom/android/server/om/OverlayManagerService;Lcom/android/server/om/OverlayManagerService$1;)V
-PLcom/android/server/om/OverlayManagerService$PackageReceiver;->onPackageAdded(Ljava/lang/String;[I)V
-PLcom/android/server/om/OverlayManagerService$PackageReceiver;->onPackageChanged(Ljava/lang/String;[I)V
+HPLcom/android/server/om/OverlayManagerService$PackageReceiver;->onPackageAdded(Ljava/lang/String;[I)V
+HPLcom/android/server/om/OverlayManagerService$PackageReceiver;->onPackageChanged(Ljava/lang/String;[I)V
+HPLcom/android/server/om/OverlayManagerService$PackageReceiver;->onPackageRemoved(Ljava/lang/String;[I)V
 HPLcom/android/server/om/OverlayManagerService$PackageReceiver;->onPackageReplaced(Ljava/lang/String;[I)V
 HPLcom/android/server/om/OverlayManagerService$PackageReceiver;->onPackageReplacing(Ljava/lang/String;[I)V
-PLcom/android/server/om/OverlayManagerService$PackageReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/om/OverlayManagerService$PackageReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/om/OverlayManagerService$UserReceiver;-><init>(Lcom/android/server/om/OverlayManagerService;)V
 HSPLcom/android/server/om/OverlayManagerService$UserReceiver;-><init>(Lcom/android/server/om/OverlayManagerService;Lcom/android/server/om/OverlayManagerService$1;)V
+PLcom/android/server/om/OverlayManagerService$UserReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/om/OverlayManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/om/OverlayManagerService;->access$1000(Lcom/android/server/om/OverlayManagerService;ILjava/lang/String;)V
 PLcom/android/server/om/OverlayManagerService;->access$400(Lcom/android/server/om/OverlayManagerService;)Ljava/lang/Object;
 PLcom/android/server/om/OverlayManagerService;->access$500(Lcom/android/server/om/OverlayManagerService;)Lcom/android/server/om/OverlayManagerService$PackageManagerHelper;
 PLcom/android/server/om/OverlayManagerService;->access$600(Lcom/android/server/om/OverlayManagerService;)Lcom/android/server/om/OverlayManagerServiceImpl;
+PLcom/android/server/om/OverlayManagerService;->access$700(Lcom/android/server/om/OverlayManagerService;ILjava/util/List;)Ljava/util/ArrayList;
+PLcom/android/server/om/OverlayManagerService;->access$700(Lcom/android/server/om/OverlayManagerService;ILjava/util/List;)V
+PLcom/android/server/om/OverlayManagerService;->access$800(Lcom/android/server/om/OverlayManagerService;)Lcom/android/server/om/OverlayActorEnforcer;
+PLcom/android/server/om/OverlayManagerService;->access$900(Lcom/android/server/om/OverlayManagerService;)V
 HSPLcom/android/server/om/OverlayManagerService;->getDefaultOverlayPackages()[Ljava/lang/String;
 HSPLcom/android/server/om/OverlayManagerService;->initIfNeeded()V
 HSPLcom/android/server/om/OverlayManagerService;->lambda$schedulePersistSettings$0$OverlayManagerService()V
@@ -13416,7 +22407,9 @@
 HSPLcom/android/server/om/OverlayManagerService;->onSwitchUser(I)V
 HSPLcom/android/server/om/OverlayManagerService;->restoreSettings()V
 HSPLcom/android/server/om/OverlayManagerService;->schedulePersistSettings()V
+PLcom/android/server/om/OverlayManagerService;->updateAssets(ILjava/lang/String;)V
 HSPLcom/android/server/om/OverlayManagerService;->updateAssets(ILjava/util/List;)V
+HSPLcom/android/server/om/OverlayManagerService;->updateOverlayPaths(ILjava/util/List;)Ljava/util/ArrayList;
 HSPLcom/android/server/om/OverlayManagerService;->updateOverlayPaths(ILjava/util/List;)V
 HSPLcom/android/server/om/OverlayManagerServiceImpl;-><init>(Lcom/android/server/om/OverlayManagerServiceImpl$PackageManagerHelper;Lcom/android/server/om/IdmapManager;Lcom/android/server/om/OverlayManagerSettings;[Ljava/lang/String;Lcom/android/server/om/OverlayManagerServiceImpl$OverlayChangeListener;)V
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->calculateNewState(Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageInfo;II)I
@@ -13424,12 +22417,19 @@
 PLcom/android/server/om/OverlayManagerServiceImpl;->getDefaultOverlayPackages()[Ljava/lang/String;
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->getEnabledOverlayPackageNames(Ljava/lang/String;I)Ljava/util/List;
 PLcom/android/server/om/OverlayManagerServiceImpl;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo;
+PLcom/android/server/om/OverlayManagerServiceImpl;->getOverlayInfosForTarget(Ljava/lang/String;I)Ljava/util/List;
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->mustReinitializeOverlay(Landroid/content/pm/PackageInfo;Landroid/content/om/OverlayInfo;)Z
+PLcom/android/server/om/OverlayManagerServiceImpl;->onTargetPackageAdded(Ljava/lang/String;I)V
+PLcom/android/server/om/OverlayManagerServiceImpl;->onTargetPackageRemoved(Ljava/lang/String;I)V
 PLcom/android/server/om/OverlayManagerServiceImpl;->onTargetPackageReplaced(Ljava/lang/String;I)V
+PLcom/android/server/om/OverlayManagerServiceImpl;->onUserRemoved(I)V
+PLcom/android/server/om/OverlayManagerServiceImpl;->removeIdmapIfPossible(Landroid/content/om/OverlayInfo;)V
+PLcom/android/server/om/OverlayManagerServiceImpl;->setEnabled(Ljava/lang/String;ZI)Z
+HPLcom/android/server/om/OverlayManagerServiceImpl;->setEnabledExclusive(Ljava/lang/String;ZI)Z
 HPLcom/android/server/om/OverlayManagerServiceImpl;->updateAndRefreshOverlaysForTarget(Ljava/lang/String;II)V
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->updateOverlaysForUser(I)Ljava/util/ArrayList;
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->updateState(Ljava/lang/String;Ljava/lang/String;II)Z
-HPLcom/android/server/om/OverlayManagerSettings$BadKeyException;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/server/om/OverlayManagerSettings$BadKeyException;-><init>(Ljava/lang/String;I)V
 HSPLcom/android/server/om/OverlayManagerSettings$Serializer;->persist(Ljava/util/ArrayList;Ljava/io/OutputStream;)V
 HSPLcom/android/server/om/OverlayManagerSettings$Serializer;->persistRow(Lcom/android/internal/util/FastXmlSerializer;Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)V
 HSPLcom/android/server/om/OverlayManagerSettings$Serializer;->restore(Ljava/util/ArrayList;Ljava/io/InputStream;)V
@@ -13492,25 +22492,40 @@
 HSPLcom/android/server/om/OverlayManagerSettings;->lambda$selectWhereUser$10(ILcom/android/server/om/OverlayManagerSettings$SettingsItem;)Z
 HSPLcom/android/server/om/OverlayManagerSettings;->persist(Ljava/io/OutputStream;)V
 HSPLcom/android/server/om/OverlayManagerSettings;->remove(Ljava/lang/String;I)Z
+HSPLcom/android/server/om/OverlayManagerSettings;->removeUser(I)Z
 HSPLcom/android/server/om/OverlayManagerSettings;->restore(Ljava/io/InputStream;)V
 HSPLcom/android/server/om/OverlayManagerSettings;->select(Ljava/lang/String;I)I
 HSPLcom/android/server/om/OverlayManagerSettings;->selectWhereTarget(Ljava/lang/String;I)Ljava/util/stream/Stream;
 HSPLcom/android/server/om/OverlayManagerSettings;->selectWhereUser(I)Ljava/util/stream/Stream;
 HSPLcom/android/server/om/OverlayManagerSettings;->setBaseCodePath(Ljava/lang/String;ILjava/lang/String;)Z
 HSPLcom/android/server/om/OverlayManagerSettings;->setCategory(Ljava/lang/String;ILjava/lang/String;)Z
+PLcom/android/server/om/OverlayManagerSettings;->setEnabled(Ljava/lang/String;IZ)Z
 HSPLcom/android/server/om/OverlayManagerSettings;->setState(Ljava/lang/String;II)Z
+HSPLcom/android/server/om/OverlayReferenceMapper$1;-><init>(Lcom/android/server/om/OverlayReferenceMapper;)V
+HSPLcom/android/server/om/OverlayReferenceMapper$1;->getTargetToOverlayables(Landroid/content/pm/parsing/AndroidPackage;)Ljava/util/Map;
+HSPLcom/android/server/om/OverlayReferenceMapper;-><init>(ZLcom/android/server/om/OverlayReferenceMapper$Provider;)V
+HSPLcom/android/server/om/OverlayReferenceMapper;->addOverlay(Landroid/content/pm/parsing/AndroidPackage;Ljava/util/Map;)V
+HSPLcom/android/server/om/OverlayReferenceMapper;->addPkg(Landroid/content/pm/parsing/AndroidPackage;Ljava/util/Map;)V
+HSPLcom/android/server/om/OverlayReferenceMapper;->rebuild()V
+HSPLcom/android/server/om/OverlayReferenceMapper;->rebuildIfDeferred()V
+HSPLcom/android/server/om/OverlayReferenceMapper;->removeOverlay(Ljava/lang/String;)V
+HSPLcom/android/server/om/OverlayReferenceMapper;->removePkg(Ljava/lang/String;)V
+HSPLcom/android/server/om/OverlayReferenceMapper;->removeTarget(Ljava/lang/String;)V
 HSPLcom/android/server/os/-$$Lambda$SchedulingPolicyService$ao2OiSvvlyzmJ0li0c0nhHy-IDk;-><init>(Lcom/android/server/os/SchedulingPolicyService;)V
 HSPLcom/android/server/os/-$$Lambda$SchedulingPolicyService$ao2OiSvvlyzmJ0li0c0nhHy-IDk;->run()V
 HSPLcom/android/server/os/BugreportManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/os/BugreportManagerService;->onStart()V
 PLcom/android/server/os/BugreportManagerServiceImpl$DumpstateListener;-><init>(Lcom/android/server/os/BugreportManagerServiceImpl;Landroid/os/IDumpstateListener;Landroid/os/IDumpstate;)V
 PLcom/android/server/os/BugreportManagerServiceImpl$DumpstateListener;->binderDied()V
+PLcom/android/server/os/BugreportManagerServiceImpl$DumpstateListener;->onError(I)V
 PLcom/android/server/os/BugreportManagerServiceImpl$DumpstateListener;->onFinished()V
 PLcom/android/server/os/BugreportManagerServiceImpl$DumpstateListener;->onProgress(I)V
 HSPLcom/android/server/os/BugreportManagerServiceImpl;-><init>(Landroid/content/Context;)V
 PLcom/android/server/os/BugreportManagerServiceImpl;->access$000(Lcom/android/server/os/BugreportManagerServiceImpl;)Ljava/lang/Object;
+PLcom/android/server/os/BugreportManagerServiceImpl;->cancelBugreport()V
 PLcom/android/server/os/BugreportManagerServiceImpl;->ensureIsPrimaryUser()V
 PLcom/android/server/os/BugreportManagerServiceImpl;->isDumpstateBinderServiceRunningLocked()Z
+PLcom/android/server/os/BugreportManagerServiceImpl;->reportError(Landroid/os/IDumpstateListener;I)V
 PLcom/android/server/os/BugreportManagerServiceImpl;->startAndGetDumpstateBinderServiceLocked()Landroid/os/IDumpstate;
 PLcom/android/server/os/BugreportManagerServiceImpl;->startBugreport(ILjava/lang/String;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;ILandroid/os/IDumpstateListener;)V
 PLcom/android/server/os/BugreportManagerServiceImpl;->startBugreportLocked(ILjava/lang/String;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;ILandroid/os/IDumpstateListener;)V
@@ -13524,9 +22539,139 @@
 HSPLcom/android/server/os/SchedulingPolicyService;-><clinit>()V
 HSPLcom/android/server/os/SchedulingPolicyService;-><init>()V
 HSPLcom/android/server/os/SchedulingPolicyService;->disableCpusetBoost(I)I
-PLcom/android/server/os/SchedulingPolicyService;->isPermitted()Z
+HSPLcom/android/server/os/SchedulingPolicyService;->isPermitted()Z
 HSPLcom/android/server/os/SchedulingPolicyService;->lambda$new$0$SchedulingPolicyService()V
-PLcom/android/server/os/SchedulingPolicyService;->requestPriority(IIIZ)I
+HSPLcom/android/server/os/SchedulingPolicyService;->requestPriority(IIIZ)I
+HSPLcom/android/server/people/PeopleService$LocalService;-><init>(Lcom/android/server/people/PeopleService;)V
+PLcom/android/server/people/PeopleService$LocalService;->backupConversationInfos(I)[B
+HSPLcom/android/server/people/PeopleService;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/people/PeopleService;->onBootPhase(I)V
+HSPLcom/android/server/people/PeopleService;->onStart()V
+PLcom/android/server/people/PeopleService;->onStopUser(Lcom/android/server/SystemService$TargetUser;)V
+PLcom/android/server/people/PeopleService;->onUnlockUser(Lcom/android/server/SystemService$TargetUser;)V
+HSPLcom/android/server/people/PeopleServiceInternal;-><init>()V
+PLcom/android/server/people/data/-$$Lambda$DataManager$CallLogContentObserver$F795P2fXEZGvzLUih_SIpFcsyic;-><init>(Ljava/lang/String;Lcom/android/server/people/data/Event;)V
+PLcom/android/server/people/data/-$$Lambda$DataManager$CallLogContentObserver$F795P2fXEZGvzLUih_SIpFcsyic;->accept(Ljava/lang/Object;)V
+PLcom/android/server/people/data/-$$Lambda$DataManager$ContactsContentObserver$wv19gIIQIhM79fILSTcdGXPmrF0;-><init>(Landroid/net/Uri;Lcom/android/server/people/data/DataManager$ContactsContentObserver$ConversationSelector;)V
+PLcom/android/server/people/data/-$$Lambda$DataManager$MmsSmsContentObserver$UfeTRftTDIcNo1iUJLeOD5s_XmM;-><init>(Ljava/lang/String;Lcom/android/server/people/data/Event;)V
+PLcom/android/server/people/data/-$$Lambda$DataManager$MmsSmsContentObserver$UfeTRftTDIcNo1iUJLeOD5s_XmM;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/people/data/-$$Lambda$DataManager$ShortcutServiceListener$emB0GKXSexwJTzSWLUKYnAGbCCg;-><init>(Lcom/android/server/people/data/DataManager$ShortcutServiceListener;Ljava/lang/String;I)V
+HPLcom/android/server/people/data/-$$Lambda$DataManager$ShortcutServiceListener$emB0GKXSexwJTzSWLUKYnAGbCCg;->run()V
+PLcom/android/server/people/data/CallLogQueryHelper;-><clinit>()V
+PLcom/android/server/people/data/CallLogQueryHelper;-><init>(Landroid/content/Context;Ljava/util/function/BiConsumer;)V
+PLcom/android/server/people/data/CallLogQueryHelper;->addEvent(Ljava/lang/String;JJI)Z
+PLcom/android/server/people/data/CallLogQueryHelper;->getLastCallTimestamp()J
+PLcom/android/server/people/data/CallLogQueryHelper;->querySince(J)Z
+PLcom/android/server/people/data/CallLogQueryHelper;->validateEvent(Ljava/lang/String;JI)Z
+PLcom/android/server/people/data/ContactsQueryHelper;-><init>(Landroid/content/Context;)V
+PLcom/android/server/people/data/ContactsQueryHelper;->getContactUri()Landroid/net/Uri;
+HPLcom/android/server/people/data/ContactsQueryHelper;->queryContact(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Z
+HPLcom/android/server/people/data/ContactsQueryHelper;->queryPhoneNumber(Ljava/lang/String;)Z
+PLcom/android/server/people/data/ContactsQueryHelper;->querySince(J)Z
+PLcom/android/server/people/data/DataManager$CallLogContentObserver;-><init>(Lcom/android/server/people/data/DataManager;Landroid/os/Handler;)V
+PLcom/android/server/people/data/DataManager$CallLogContentObserver;-><init>(Lcom/android/server/people/data/DataManager;Landroid/os/Handler;Lcom/android/server/people/data/DataManager$1;)V
+PLcom/android/server/people/data/DataManager$CallLogContentObserver;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/people/data/DataManager$CallLogContentObserver;->accept(Ljava/lang/String;Lcom/android/server/people/data/Event;)V
+PLcom/android/server/people/data/DataManager$CallLogContentObserver;->lambda$accept$0(Ljava/lang/String;Lcom/android/server/people/data/Event;Lcom/android/server/people/data/UserData;)V
+PLcom/android/server/people/data/DataManager$CallLogContentObserver;->onChange(Z)V
+PLcom/android/server/people/data/DataManager$ContactsContentObserver$ConversationSelector;-><init>(Lcom/android/server/people/data/DataManager$ContactsContentObserver;)V
+PLcom/android/server/people/data/DataManager$ContactsContentObserver$ConversationSelector;-><init>(Lcom/android/server/people/data/DataManager$ContactsContentObserver;Lcom/android/server/people/data/DataManager$1;)V
+PLcom/android/server/people/data/DataManager$ContactsContentObserver$ConversationSelector;->access$1100(Lcom/android/server/people/data/DataManager$ContactsContentObserver$ConversationSelector;)Lcom/android/server/people/data/ConversationInfo;
+PLcom/android/server/people/data/DataManager$ContactsContentObserver$ConversationSelector;->access$900(Lcom/android/server/people/data/DataManager$ContactsContentObserver$ConversationSelector;)Lcom/android/server/people/data/ConversationInfo;
+PLcom/android/server/people/data/DataManager$ContactsContentObserver;-><init>(Lcom/android/server/people/data/DataManager;Landroid/os/Handler;)V
+PLcom/android/server/people/data/DataManager$ContactsContentObserver;-><init>(Lcom/android/server/people/data/DataManager;Landroid/os/Handler;Lcom/android/server/people/data/DataManager$1;)V
+PLcom/android/server/people/data/DataManager$ContactsContentObserver;->onChange(ZLandroid/net/Uri;I)V
+HSPLcom/android/server/people/data/DataManager$Injector;-><init>()V
+PLcom/android/server/people/data/DataManager$Injector;->createCallLogQueryHelper(Landroid/content/Context;Ljava/util/function/BiConsumer;)Lcom/android/server/people/data/CallLogQueryHelper;
+PLcom/android/server/people/data/DataManager$Injector;->createContactsQueryHelper(Landroid/content/Context;)Lcom/android/server/people/data/ContactsQueryHelper;
+PLcom/android/server/people/data/DataManager$Injector;->createMmsQueryHelper(Landroid/content/Context;Ljava/util/function/BiConsumer;)Lcom/android/server/people/data/MmsQueryHelper;
+HSPLcom/android/server/people/data/DataManager$Injector;->createScheduledExecutor()Ljava/util/concurrent/ScheduledExecutorService;
+PLcom/android/server/people/data/DataManager$Injector;->createSmsQueryHelper(Landroid/content/Context;Ljava/util/function/BiConsumer;)Lcom/android/server/people/data/SmsQueryHelper;
+HPLcom/android/server/people/data/DataManager$Injector;->getCallingUserId()I
+PLcom/android/server/people/data/DataManager$MmsSmsContentObserver;-><init>(Lcom/android/server/people/data/DataManager;Landroid/os/Handler;)V
+PLcom/android/server/people/data/DataManager$MmsSmsContentObserver;-><init>(Lcom/android/server/people/data/DataManager;Landroid/os/Handler;Lcom/android/server/people/data/DataManager$1;)V
+PLcom/android/server/people/data/DataManager$MmsSmsContentObserver;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/people/data/DataManager$MmsSmsContentObserver;->accept(Ljava/lang/String;Lcom/android/server/people/data/Event;)V
+PLcom/android/server/people/data/DataManager$MmsSmsContentObserver;->lambda$accept$0(Ljava/lang/String;Lcom/android/server/people/data/Event;Lcom/android/server/people/data/UserData;)V
+PLcom/android/server/people/data/DataManager$MmsSmsContentObserver;->onChange(Z)V
+PLcom/android/server/people/data/DataManager$NotificationListener;-><init>(Lcom/android/server/people/data/DataManager;)V
+PLcom/android/server/people/data/DataManager$NotificationListener;-><init>(Lcom/android/server/people/data/DataManager;Lcom/android/server/people/data/DataManager$1;)V
+PLcom/android/server/people/data/DataManager$NotificationListener;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;I)V
+PLcom/android/server/people/data/DataManager$PerUserBroadcastReceiver;-><init>(Lcom/android/server/people/data/DataManager;I)V
+PLcom/android/server/people/data/DataManager$PerUserBroadcastReceiver;-><init>(Lcom/android/server/people/data/DataManager;ILcom/android/server/people/data/DataManager$1;)V
+HPLcom/android/server/people/data/DataManager$PerUserBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/people/data/DataManager$ShortcutServiceListener;-><init>(Lcom/android/server/people/data/DataManager;)V
+HSPLcom/android/server/people/data/DataManager$ShortcutServiceListener;-><init>(Lcom/android/server/people/data/DataManager;Lcom/android/server/people/data/DataManager$1;)V
+HPLcom/android/server/people/data/DataManager$ShortcutServiceListener;->lambda$onShortcutChanged$0$DataManager$ShortcutServiceListener(Ljava/lang/String;I)V
+HPLcom/android/server/people/data/DataManager$ShortcutServiceListener;->onShortcutChanged(Ljava/lang/String;I)V
+PLcom/android/server/people/data/DataManager$UsageStatsQueryRunnable;-><init>(Lcom/android/server/people/data/DataManager;I)V
+PLcom/android/server/people/data/DataManager$UsageStatsQueryRunnable;-><init>(Lcom/android/server/people/data/DataManager;ILcom/android/server/people/data/DataManager$1;)V
+HPLcom/android/server/people/data/DataManager$UsageStatsQueryRunnable;->run()V
+HSPLcom/android/server/people/data/DataManager;-><clinit>()V
+HSPLcom/android/server/people/data/DataManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/people/data/DataManager;-><init>(Landroid/content/Context;Lcom/android/server/people/data/DataManager$Injector;)V
+PLcom/android/server/people/data/DataManager;->access$1000(Lcom/android/server/people/data/DataManager;I)Lcom/android/server/people/data/UserData;
+PLcom/android/server/people/data/DataManager;->access$1100(Lcom/android/server/people/data/DataManager;Ljava/lang/String;ILjava/util/List;)Ljava/util/List;
+PLcom/android/server/people/data/DataManager;->access$1200(Lcom/android/server/people/data/DataManager;Landroid/service/notification/StatusBarNotification;)Lcom/android/server/people/data/EventHistoryImpl;
+PLcom/android/server/people/data/DataManager;->access$1300(Lcom/android/server/people/data/DataManager;Lcom/android/server/people/data/UserData;)V
+PLcom/android/server/people/data/DataManager;->access$1300(Lcom/android/server/people/data/DataManager;Ljava/util/function/Consumer;)V
+PLcom/android/server/people/data/DataManager;->access$1400(Lcom/android/server/people/data/DataManager;Ljava/lang/String;ILjava/util/List;)Ljava/util/List;
+PLcom/android/server/people/data/DataManager;->access$1500(Lcom/android/server/people/data/DataManager;Landroid/service/notification/StatusBarNotification;)Lcom/android/server/people/data/EventHistoryImpl;
+PLcom/android/server/people/data/DataManager;->access$1600(Lcom/android/server/people/data/DataManager;Lcom/android/server/people/data/UserData;)V
+PLcom/android/server/people/data/DataManager;->access$500(Lcom/android/server/people/data/DataManager;)Landroid/content/Context;
+PLcom/android/server/people/data/DataManager;->access$600(Lcom/android/server/people/data/DataManager;)Lcom/android/server/people/data/DataManager$Injector;
+PLcom/android/server/people/data/DataManager;->access$700(Lcom/android/server/people/data/DataManager;)Landroid/content/Context;
+PLcom/android/server/people/data/DataManager;->access$800(Lcom/android/server/people/data/DataManager;)Lcom/android/server/people/data/DataManager$Injector;
+PLcom/android/server/people/data/DataManager;->access$800(Lcom/android/server/people/data/DataManager;I)Lcom/android/server/people/data/UserData;
+HPLcom/android/server/people/data/DataManager;->forAllUnlockedUsers(Ljava/util/function/Consumer;)V
+PLcom/android/server/people/data/DataManager;->getEventHistoryIfEligible(Landroid/service/notification/StatusBarNotification;)Lcom/android/server/people/data/EventHistoryImpl;
+HPLcom/android/server/people/data/DataManager;->getPackage(Ljava/lang/String;I)Lcom/android/server/people/data/PackageData;
+HPLcom/android/server/people/data/DataManager;->getPackageData(Ljava/lang/String;I)Lcom/android/server/people/data/PackageData;
+HPLcom/android/server/people/data/DataManager;->getShortcuts(Ljava/lang/String;ILjava/util/List;)Ljava/util/List;
+HPLcom/android/server/people/data/DataManager;->getUnlockedUserData(I)Lcom/android/server/people/data/UserData;
+HSPLcom/android/server/people/data/DataManager;->initialize()V
+HPLcom/android/server/people/data/DataManager;->onShortcutAddedOrUpdated(Landroid/content/pm/ShortcutInfo;)V
+PLcom/android/server/people/data/DataManager;->onUserStopped(I)V
+PLcom/android/server/people/data/DataManager;->onUserUnlocked(I)V
+HPLcom/android/server/people/data/DataManager;->queryUsageStatsService(IJJ)V
+PLcom/android/server/people/data/DataManager;->updateDefaultDialer(Lcom/android/server/people/data/UserData;)V
+PLcom/android/server/people/data/DataManager;->updateDefaultSmsApp(Lcom/android/server/people/data/UserData;)V
+PLcom/android/server/people/data/Event$Builder;-><init>(JI)V
+PLcom/android/server/people/data/Event$Builder;->access$000(Lcom/android/server/people/data/Event$Builder;)J
+PLcom/android/server/people/data/Event$Builder;->access$100(Lcom/android/server/people/data/Event$Builder;)I
+PLcom/android/server/people/data/Event$Builder;->access$200(Lcom/android/server/people/data/Event$Builder;)Lcom/android/server/people/data/Event$CallDetails;
+PLcom/android/server/people/data/Event$Builder;->build()Lcom/android/server/people/data/Event;
+PLcom/android/server/people/data/Event$Builder;->setCallDetails(Lcom/android/server/people/data/Event$CallDetails;)Lcom/android/server/people/data/Event$Builder;
+PLcom/android/server/people/data/Event$CallDetails;-><init>(J)V
+PLcom/android/server/people/data/Event;-><clinit>()V
+PLcom/android/server/people/data/Event;-><init>(JI)V
+PLcom/android/server/people/data/Event;-><init>(Lcom/android/server/people/data/Event$Builder;)V
+PLcom/android/server/people/data/Event;-><init>(Lcom/android/server/people/data/Event$Builder;Lcom/android/server/people/data/Event$1;)V
+PLcom/android/server/people/data/MmsQueryHelper;-><clinit>()V
+PLcom/android/server/people/data/MmsQueryHelper;-><init>(Landroid/content/Context;Ljava/util/function/BiConsumer;)V
+PLcom/android/server/people/data/MmsQueryHelper;->addEvent(Ljava/lang/String;JI)Z
+PLcom/android/server/people/data/MmsQueryHelper;->getLastMessageTimestamp()J
+PLcom/android/server/people/data/MmsQueryHelper;->getMmsAddress(Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/people/data/MmsQueryHelper;->querySince(J)Z
+PLcom/android/server/people/data/MmsQueryHelper;->validateEvent(Ljava/lang/String;JI)Z
+PLcom/android/server/people/data/SmsQueryHelper;-><clinit>()V
+PLcom/android/server/people/data/SmsQueryHelper;-><init>(Landroid/content/Context;Ljava/util/function/BiConsumer;)V
+PLcom/android/server/people/data/SmsQueryHelper;->addEvent(Ljava/lang/String;JI)Z
+PLcom/android/server/people/data/SmsQueryHelper;->getLastMessageTimestamp()J
+HPLcom/android/server/people/data/SmsQueryHelper;->querySince(J)Z
+PLcom/android/server/people/data/SmsQueryHelper;->validateEvent(Ljava/lang/String;JI)Z
+PLcom/android/server/people/data/UserData;-><init>(I)V
+PLcom/android/server/people/data/UserData;->forAllPackages(Ljava/util/function/Consumer;)V
+PLcom/android/server/people/data/UserData;->getDefaultDialer()Lcom/android/server/people/data/PackageData;
+PLcom/android/server/people/data/UserData;->getDefaultSmsApp()Lcom/android/server/people/data/PackageData;
+HPLcom/android/server/people/data/UserData;->getPackageData(Ljava/lang/String;)Lcom/android/server/people/data/PackageData;
+PLcom/android/server/people/data/UserData;->getUserId()I
+HPLcom/android/server/people/data/UserData;->isUnlocked()Z
+PLcom/android/server/people/data/UserData;->setDefaultDialer(Ljava/lang/String;)V
+PLcom/android/server/people/data/UserData;->setDefaultSmsApp(Ljava/lang/String;)V
+PLcom/android/server/people/data/UserData;->setUserStopped()V
+PLcom/android/server/people/data/UserData;->setUserUnlocked()V
+PLcom/android/server/people/data/Utils;->getCurrentCountryIso(Landroid/content/Context;)Ljava/lang/String;
 PLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$1$dbgKSgcSW-enjqvNAbeI3zvdw_E;-><init>(Lcom/android/server/pm/ApexManager$ApexManagerImpl$1;)V
 PLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$1$dbgKSgcSW-enjqvNAbeI3zvdw_E;->run()V
 PLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$48iOSmygOXJ0TezZTiFdfMqA4-U;-><clinit>()V
@@ -13541,6 +22686,15 @@
 HSPLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$pQnjdbWgnVRvdOuYJTmevPGwE8s;-><clinit>()V
 HSPLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$pQnjdbWgnVRvdOuYJTmevPGwE8s;-><init>()V
 HSPLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$pQnjdbWgnVRvdOuYJTmevPGwE8s;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$q1ttlIbEI3KHg5wkhDwkpDn2qCU;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$q1ttlIbEI3KHg5wkhDwkpDn2qCU;-><init>()V
+HPLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$q1ttlIbEI3KHg5wkhDwkpDn2qCU;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$tz3TLW-UaMjqz-wkojT7H_pVbZU;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$tz3TLW-UaMjqz-wkojT7H_pVbZU;-><init>()V
+PLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$tz3TLW-UaMjqz-wkojT7H_pVbZU;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$zKFrzIK0lAT7V4Fl0Pv5KKt1Gu0;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$zKFrzIK0lAT7V4Fl0Pv5KKt1Gu0;-><init>()V
+PLcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$zKFrzIK0lAT7V4Fl0Pv5KKt1Gu0;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/pm/-$$Lambda$AppsFilter$FeatureConfigImpl$n15whgPRX7bGimHq6-7mgAskIKs;-><init>(Lcom/android/server/pm/AppsFilter$FeatureConfigImpl;)V
 PLcom/android/server/pm/-$$Lambda$AppsFilter$FeatureConfigImpl$n15whgPRX7bGimHq6-7mgAskIKs;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 PLcom/android/server/pm/-$$Lambda$AppsFilter$irFGkuh4mJ419pXBYKSj13ADTtA;-><init>(Landroid/util/SparseArray;Lcom/android/server/pm/PackageManagerService;)V
@@ -13557,15 +22711,16 @@
 PLcom/android/server/pm/-$$Lambda$FW40Da1L1EZJ_usDX0ew1qRMmtc;-><clinit>()V
 PLcom/android/server/pm/-$$Lambda$FW40Da1L1EZJ_usDX0ew1qRMmtc;-><init>()V
 PLcom/android/server/pm/-$$Lambda$FW40Da1L1EZJ_usDX0ew1qRMmtc;->test(Ljava/lang/Object;)Z
-PLcom/android/server/pm/-$$Lambda$InstantAppRegistry$BuKCbLr_MGBazMPl54-pWTuGHYY;-><init>(J)V
+HPLcom/android/server/pm/-$$Lambda$InstantAppRegistry$BuKCbLr_MGBazMPl54-pWTuGHYY;-><init>(J)V
 PLcom/android/server/pm/-$$Lambda$InstantAppRegistry$R7XSXckXZJx-7zO-lFkgYY_-lWA;-><init>(Landroid/content/pm/parsing/AndroidPackage;)V
+PLcom/android/server/pm/-$$Lambda$InstantAppRegistry$eaYsiecM_Rq6dliDvliwVtj695o;-><init>(Ljava/lang/String;)V
 PLcom/android/server/pm/-$$Lambda$InstantAppResolverConnection$D-JKXi4qrYjnPQMOwj8UtfZenps;-><init>(Lcom/android/server/pm/InstantAppResolverConnection;)V
 PLcom/android/server/pm/-$$Lambda$InstantAppResolverConnection$D-JKXi4qrYjnPQMOwj8UtfZenps;->run()V
 PLcom/android/server/pm/-$$Lambda$K2g8Oho05j5S7zVOkoQrHzM_Gig;-><clinit>()V
 PLcom/android/server/pm/-$$Lambda$K2g8Oho05j5S7zVOkoQrHzM_Gig;-><init>()V
 PLcom/android/server/pm/-$$Lambda$K2g8Oho05j5S7zVOkoQrHzM_Gig;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/pm/-$$Lambda$LauncherAppsService$LauncherAppsImpl$MyPackageMonitor$eTair5Mvr14v4M0nq9aQEW2cp-Y;-><init>(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;Ljava/lang/String;I)V
-PLcom/android/server/pm/-$$Lambda$LauncherAppsService$LauncherAppsImpl$MyPackageMonitor$eTair5Mvr14v4M0nq9aQEW2cp-Y;->run()V
+HPLcom/android/server/pm/-$$Lambda$LauncherAppsService$LauncherAppsImpl$MyPackageMonitor$eTair5Mvr14v4M0nq9aQEW2cp-Y;->run()V
 PLcom/android/server/pm/-$$Lambda$LauncherAppsService$LauncherAppsImpl$PR6SMHDNFTsnoL92MFZskM-zN8k;-><init>(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Landroid/os/UserHandle;)V
 HPLcom/android/server/pm/-$$Lambda$LauncherAppsService$LauncherAppsImpl$PR6SMHDNFTsnoL92MFZskM-zN8k;->test(I)Z
 PLcom/android/server/pm/-$$Lambda$OtaDexoptService$sAE9PLBjWsXDVkiiC_uzr0kwQ4k;-><clinit>()V
@@ -13573,15 +22728,38 @@
 PLcom/android/server/pm/-$$Lambda$OtaDexoptService$sAE9PLBjWsXDVkiiC_uzr0kwQ4k;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/pm/-$$Lambda$PackageInstallerService$vra5ZkE3juVvcgDBu5xv0wVzno8;-><init>(I)V
 PLcom/android/server/pm/-$$Lambda$PackageInstallerService$vra5ZkE3juVvcgDBu5xv0wVzno8;->test(I)Z
+HSPLcom/android/server/pm/-$$Lambda$PackageInstallerSession$0MwsfMSD_PrEtElmOWjbhM7455A;-><init>(Ljava/io/FileFilter;)V
+HSPLcom/android/server/pm/-$$Lambda$PackageInstallerSession$0MwsfMSD_PrEtElmOWjbhM7455A;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$0Oqu1oanLjaOBEcFPtJVCRQ0lHs;-><init>(Lcom/android/server/pm/PackageInstallerSession;Landroid/system/Int64Ref;)V
+PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$0Oqu1oanLjaOBEcFPtJVCRQ0lHs;->onProgress(J)V
 PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$1hK7f4fIb3Je8SK1lZHBTWREMrU;-><init>(Ljava/io/FileFilter;)V
 PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$1hK7f4fIb3Je8SK1lZHBTWREMrU;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$ChildStatusIntentReceiver$CIWymiEKCzNknV3an6tFtcz5-Mc;-><init>(Lcom/android/server/pm/PackageInstallerSession$ChildStatusIntentReceiver;Landroid/content/Intent;)V
+PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$ChildStatusIntentReceiver$CIWymiEKCzNknV3an6tFtcz5-Mc;->run()V
+PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$Jldeo0ihCZqsZyrchyGGrBvBFhI;-><init>(Lcom/android/server/pm/PackageInstallerSession;Landroid/system/Int64Ref;)V
+PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$Jldeo0ihCZqsZyrchyGGrBvBFhI;->onProgress(J)V
 PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$O9LdsceQY8NfkziFc8PltN3Zew4;-><init>(Ljava/io/File;)V
 PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$O9LdsceQY8NfkziFc8PltN3Zew4;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/pm/-$$Lambda$PackageInstallerSession$Q84DQuKTSKG_oVZkTd4otsUSsIE;-><clinit>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageInstallerSession$Q84DQuKTSKG_oVZkTd4otsUSsIE;-><init>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageInstallerSession$Q84DQuKTSKG_oVZkTd4otsUSsIE;->applyAsInt(Ljava/lang/Object;)I
 PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$WxRUCOlFBsKbwiMNBR7ysMEZKp4;-><clinit>()V
 PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$WxRUCOlFBsKbwiMNBR7ysMEZKp4;-><init>()V
 PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$WxRUCOlFBsKbwiMNBR7ysMEZKp4;->apply(I)Ljava/lang/Object;
+PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$gIaZyqaw0zETPQMxuRW3BVLMZ-Y;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$gIaZyqaw0zETPQMxuRW3BVLMZ-Y;-><init>()V
+PLcom/android/server/pm/-$$Lambda$PackageInstallerSession$gIaZyqaw0zETPQMxuRW3BVLMZ-Y;->apply(I)Ljava/lang/Object;
+HSPLcom/android/server/pm/-$$Lambda$PackageInstallerSession$iyfVEu9LbUOK_cEGZ3wXC81wsgs;-><init>(Ljava/io/File;)V
+HSPLcom/android/server/pm/-$$Lambda$PackageInstallerSession$iyfVEu9LbUOK_cEGZ3wXC81wsgs;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/pm/-$$Lambda$PackageInstallerSession$yEAIQbVnbSznJVW9xPXv9WGuzI0;-><clinit>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageInstallerSession$yEAIQbVnbSznJVW9xPXv9WGuzI0;-><init>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageInstallerSession$yEAIQbVnbSznJVW9xPXv9WGuzI0;->apply(I)Ljava/lang/Object;
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$-SI_LHw6Eiq8VNiFLLjJdCbGgSQ;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/util/List;I)V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$-SI_LHw6Eiq8VNiFLLjJdCbGgSQ;->run()V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$0Regyd5pBrcIdGN2_jpl21L-KWw;-><init>(Lcom/android/server/pm/PackageManagerService;I)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$0Regyd5pBrcIdGN2_jpl21L-KWw;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$3TlqkUBuVM7NyAg7uqJCni92WOU;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Landroid/content/IntentSender;)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$3TlqkUBuVM7NyAg7uqJCni92WOU;->run()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$3yxDU_uSU2kkdLuKkfPYVKvXKGw;-><clinit>()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$3yxDU_uSU2kkdLuKkfPYVKvXKGw;-><init>()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$3yxDU_uSU2kkdLuKkfPYVKvXKGw;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
@@ -13595,20 +22773,34 @@
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$FFJwRezEfCP4utcPN2U9pjn2hIo;->produce(Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 PLcom/android/server/pm/-$$Lambda$PackageManagerService$J0eEFDuLDZBCGkS0UBLQaQGBMN8;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ILjava/lang/String;)V
 PLcom/android/server/pm/-$$Lambda$PackageManagerService$J0eEFDuLDZBCGkS0UBLQaQGBMN8;->run()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$JQITabyRBc2Nst0hnvtDUIYPLkk;-><clinit>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$JQITabyRBc2Nst0hnvtDUIYPLkk;-><init>()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$JqISwjRG4Nrwn7K19yITMU1WH5g;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HPLcom/android/server/pm/-$$Lambda$PackageManagerService$KUTG4a_t__F9-jF9uKK4m5M6ED0;-><init>(I)V
 PLcom/android/server/pm/-$$Lambda$PackageManagerService$KUTG4a_t__F9-jF9uKK4m5M6ED0;->run()V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$QEXaCTQ54nCy5aHUAa6mkt0WtpM;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$QEXaCTQ54nCy5aHUAa6mkt0WtpM;->run()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$RfqRmQ8KNtYywzf-EIm7VG5PHj8;-><clinit>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$RfqRmQ8KNtYywzf-EIm7VG5PHj8;-><init>()V
 HPLcom/android/server/pm/-$$Lambda$PackageManagerService$RoklvvEqbb0_WAziY4NuUNhrlUA;-><init>(Lcom/android/server/pm/PackageManagerService;[ILjava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[I)V
 HPLcom/android/server/pm/-$$Lambda$PackageManagerService$RoklvvEqbb0_WAziY4NuUNhrlUA;->run()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$U47f17sf-Z0eef3W2xgzUB-ecR4;-><clinit>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$U47f17sf-Z0eef3W2xgzUB-ecR4;-><init>()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$UqTOzDNpKPiIlaG4_AUlesB9I1E;-><clinit>()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$UqTOzDNpKPiIlaG4_AUlesB9I1E;-><init>()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$Wnf5zZuMJLUQ4GfjHtUww4l7YUg;-><clinit>()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$Wnf5zZuMJLUQ4GfjHtUww4l7YUg;-><init>()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$Wnf5zZuMJLUQ4GfjHtUww4l7YUg;->produce(Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$YHVD9fSfoszBkmlqzmswh1u_y_M;-><clinit>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$YHVD9fSfoszBkmlqzmswh1u_y_M;-><init>()V
 PLcom/android/server/pm/-$$Lambda$PackageManagerService$Ze0Xh0iBIll5jkJ4VcmUxBuZyI8;-><init>(Lcom/android/server/pm/PackageManagerService;ZI[Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/pm/-$$Lambda$PackageManagerService$Ze0Xh0iBIll5jkJ4VcmUxBuZyI8;->run()V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$_CMCXnVAsgXUrfmWq_KOQ0-d17c;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;IZZJII[ILandroid/content/pm/IPackageDeleteObserver2;Ljava/lang/String;)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$_CMCXnVAsgXUrfmWq_KOQ0-d17c;->run()V
 PLcom/android/server/pm/-$$Lambda$PackageManagerService$aXPYjiloRwQataUrx041SxBr5us;-><init>(Lcom/android/server/pm/PackageManagerService;ZLjava/util/List;)V
 PLcom/android/server/pm/-$$Lambda$PackageManagerService$aXPYjiloRwQataUrx041SxBr5us;->run()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$aptgkdXtM4g66mNvfWDFzI6FQyI;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$aptgkdXtM4g66mNvfWDFzI6FQyI;->onInitialized(I)V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$cHQqBPj5vgOw-P7yhrKC9Ssq27g;-><init>(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$cHQqBPj5vgOw-P7yhrKC9Ssq27g;->produce(Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$ccz4PCOSG7fKRFBAMJv8GMQMI08;-><init>(Lcom/android/server/pm/PackageManagerService;)V
@@ -13618,10 +22810,30 @@
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$djQQrdclAlQ8ILip1OVPcBDTkW4;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/pm/-$$Lambda$PackageManagerService$f5l1_UOwACQPN6qixqBmzSJzDMw;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;JILandroid/content/pm/IPackageDataObserver;)V
 PLcom/android/server/pm/-$$Lambda$PackageManagerService$f5l1_UOwACQPN6qixqBmzSJzDMw;->run()V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$fQjXY6S0s38rWZ-Tv1PTQvrgJb4;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/content/pm/parsing/AndroidPackage;IIILandroid/content/pm/IPackageDataObserver;Ljava/lang/String;)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$fQjXY6S0s38rWZ-Tv1PTQvrgJb4;->run()V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$hlGRKJu3cTGpEnG-hyOT3QbrXxY;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;IZZJII[ILandroid/content/pm/IPackageDeleteObserver2;Ljava/lang/String;)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$hlGRKJu3cTGpEnG-hyOT3QbrXxY;->run()V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$i2wY1QKIZAfMEAymOPPs8KS2G5c;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSetting;)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$i2wY1QKIZAfMEAymOPPs8KS2G5c;->run()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$i6CpetYRHYknkq8R3n1zFsH2Qng;-><init>(Landroid/content/Context;Ljava/lang/Object;)V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$i6CpetYRHYknkq8R3n1zFsH2Qng;->produce(Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$imyTLGZ0HLyacORSu0iPTteivzY;-><init>(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$imyTLGZ0HLyacORSu0iPTteivzY;->produce(Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$kUm15OrlWJD9K-LIlM_rBtX-g4Q;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$kUm15OrlWJD9K-LIlM_rBtX-g4Q;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$kdqJJNrm44ZfCpYgQsRrZy7nM38;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/content/pm/parsing/AndroidPackage;IIILandroid/content/pm/IPackageDataObserver;Ljava/lang/String;)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$kdqJJNrm44ZfCpYgQsRrZy7nM38;->run()V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$mozSqBaYzz4jQjwZjKIapdRXflc;-><init>(I)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$mozSqBaYzz4jQjwZjKIapdRXflc;->run()V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$ms4g2QGGQv1AIanhd1siLhoElkI;-><init>(Lcom/android/server/pm/PackageManagerService;I)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$ms4g2QGGQv1AIanhd1siLhoElkI;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$pVdeIe13BPz2j1-uK6W_NugHu2Q;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$pVdeIe13BPz2j1-uK6W_NugHu2Q;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$rLdmTQLwnuPeDuWTeDB-0S1Ku4I;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$rLdmTQLwnuPeDuWTeDB-0S1Ku4I;->onInitialized(I)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$rcVfdsXa_dlub2enxT5rL0nTx7I;-><init>(Lcom/android/server/pm/PackageManagerService;[ILjava/lang/String;Z)V
+PLcom/android/server/pm/-$$Lambda$PackageManagerService$rcVfdsXa_dlub2enxT5rL0nTx7I;->run()V
 PLcom/android/server/pm/-$$Lambda$PackageManagerService$vPmwW10Lr1Zc8YoNadc7v4xmIWo;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;Ljava/util/ArrayList;)V
 PLcom/android/server/pm/-$$Lambda$PackageManagerService$vPmwW10Lr1Zc8YoNadc7v4xmIWo;->run()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$xKD6SB7pISjc29qfmXIq5O_3OJw;-><init>(Landroid/content/Context;Lcom/android/server/pm/Installer;Ljava/lang/Object;ZLjava/lang/Object;)V
@@ -13631,27 +22843,30 @@
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$zCuBGosGB1OGJ7ya2EB4X5V2jBk;-><clinit>()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$zCuBGosGB1OGJ7ya2EB4X5V2jBk;-><init>()V
 HSPLcom/android/server/pm/-$$Lambda$PackageManagerService$zCuBGosGB1OGJ7ya2EB4X5V2jBk;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$JqfeXEVVj9qyD-t5TtAWP5dUo_Q;-><init>(Lcom/android/server/pm/dex/DexManager;)V
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$JqfeXEVVj9qyD-t5TtAWP5dUo_Q;->test(Ljava/lang/Object;)Z
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$WqWSiwN-039OE_mRd8x6F_ORqRU;-><init>(Landroid/util/ArraySet;)V
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$WqWSiwN-039OE_mRd8x6F_ORqRU;->test(Ljava/lang/Object;)Z
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$ZEbcK7yQgHqG-8Z65v9KNo4jBgU;-><init>(J)V
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$ZEbcK7yQgHqG-8Z65v9KNo4jBgU;->test(Ljava/lang/Object;)Z
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$_LUs2lN_dtgmbhOTm2Ear0f91Qg;-><clinit>()V
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$_LUs2lN_dtgmbhOTm2Ear0f91Qg;-><init>()V
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$_LUs2lN_dtgmbhOTm2Ear0f91Qg;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$pak5uFueWVDXpeD0raY40AD6lPY;-><clinit>()V
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$pak5uFueWVDXpeD0raY40AD6lPY;-><init>()V
-HPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$pak5uFueWVDXpeD0raY40AD6lPY;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$qCP9hzvvo1JqZQ7mV-34TucIk2o;-><clinit>()V
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$qCP9hzvvo1JqZQ7mV-34TucIk2o;-><init>()V
-PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$qCP9hzvvo1JqZQ7mV-34TucIk2o;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$JqfeXEVVj9qyD-t5TtAWP5dUo_Q;-><init>(Lcom/android/server/pm/dex/DexManager;)V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$JqfeXEVVj9qyD-t5TtAWP5dUo_Q;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$WqWSiwN-039OE_mRd8x6F_ORqRU;-><init>(Landroid/util/ArraySet;)V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$WqWSiwN-039OE_mRd8x6F_ORqRU;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$ZEbcK7yQgHqG-8Z65v9KNo4jBgU;-><init>(J)V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$ZEbcK7yQgHqG-8Z65v9KNo4jBgU;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$_LUs2lN_dtgmbhOTm2Ear0f91Qg;-><clinit>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$_LUs2lN_dtgmbhOTm2Ear0f91Qg;-><init>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$_LUs2lN_dtgmbhOTm2Ear0f91Qg;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$eMhMS_ozPxLQedSFcYUWkqe3DH4;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$eMhMS_ozPxLQedSFcYUWkqe3DH4;-><init>()V
+PLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$eMhMS_ozPxLQedSFcYUWkqe3DH4;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$pak5uFueWVDXpeD0raY40AD6lPY;-><clinit>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$pak5uFueWVDXpeD0raY40AD6lPY;-><init>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$pak5uFueWVDXpeD0raY40AD6lPY;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$qCP9hzvvo1JqZQ7mV-34TucIk2o;-><clinit>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$qCP9hzvvo1JqZQ7mV-34TucIk2o;-><init>()V
+HSPLcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$qCP9hzvvo1JqZQ7mV-34TucIk2o;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/pm/-$$Lambda$ParallelPackageParser$FTtinPrp068lVeI7K6bC1tNE3iM;-><init>(Lcom/android/server/pm/ParallelPackageParser;Ljava/io/File;I)V
 HSPLcom/android/server/pm/-$$Lambda$ParallelPackageParser$FTtinPrp068lVeI7K6bC1tNE3iM;->run()V
 HSPLcom/android/server/pm/-$$Lambda$ShortcutBitmapSaver$AUDgG57FGyGDUVDAjL-7cuiE0pM;-><init>(Lcom/android/server/pm/ShortcutBitmapSaver;)V
-PLcom/android/server/pm/-$$Lambda$ShortcutBitmapSaver$AUDgG57FGyGDUVDAjL-7cuiE0pM;->run()V
-PLcom/android/server/pm/-$$Lambda$ShortcutBitmapSaver$xgjvZfaiKXavxgGCSta_eIdVBnk;-><init>(Ljava/util/concurrent/CountDownLatch;)V
-PLcom/android/server/pm/-$$Lambda$ShortcutBitmapSaver$xgjvZfaiKXavxgGCSta_eIdVBnk;->run()V
+HPLcom/android/server/pm/-$$Lambda$ShortcutBitmapSaver$AUDgG57FGyGDUVDAjL-7cuiE0pM;->run()V
+HPLcom/android/server/pm/-$$Lambda$ShortcutBitmapSaver$xgjvZfaiKXavxgGCSta_eIdVBnk;-><init>(Ljava/util/concurrent/CountDownLatch;)V
+HPLcom/android/server/pm/-$$Lambda$ShortcutBitmapSaver$xgjvZfaiKXavxgGCSta_eIdVBnk;->run()V
 PLcom/android/server/pm/-$$Lambda$ShortcutDumpFiles$rwmVVp6PnQCcurF7D6VzrdNqEdk;-><init>([B)V
 PLcom/android/server/pm/-$$Lambda$ShortcutDumpFiles$rwmVVp6PnQCcurF7D6VzrdNqEdk;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/-$$Lambda$ShortcutDumpFiles$stGgHzhh-NVWPgDSwmH2ybAWRE8;-><clinit>()V
@@ -13664,46 +22879,118 @@
 PLcom/android/server/pm/-$$Lambda$ShortcutPackage$ZN-r6tS0M7WKGK6nbXyJZPwNRGc;-><init>()V
 PLcom/android/server/pm/-$$Lambda$ShortcutPackage$hEXnzlESoRjagj8Pd9f4PrqudKE;-><clinit>()V
 PLcom/android/server/pm/-$$Lambda$ShortcutPackage$hEXnzlESoRjagj8Pd9f4PrqudKE;-><init>()V
-PLcom/android/server/pm/-$$Lambda$ShortcutPackage$hEXnzlESoRjagj8Pd9f4PrqudKE;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/pm/-$$Lambda$ShortcutPackage$hEXnzlESoRjagj8Pd9f4PrqudKE;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/pm/-$$Lambda$ShortcutPackage$ibOAVgfKWMZFYSeVV_hLNx6jogk;-><init>(Lcom/android/server/pm/ShortcutPackage;)V
+HPLcom/android/server/pm/-$$Lambda$ShortcutPackage$ibOAVgfKWMZFYSeVV_hLNx6jogk;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$2mjLrqafL_ZPftw5bIS-yyK7PxI;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$2mjLrqafL_ZPftw5bIS-yyK7PxI;-><init>()V
 HSPLcom/android/server/pm/-$$Lambda$ShortcutService$3$WghiV-HLnzJqZabObC5uHCmb960;-><init>(Lcom/android/server/pm/ShortcutService$3;I)V
 HSPLcom/android/server/pm/-$$Lambda$ShortcutService$3$WghiV-HLnzJqZabObC5uHCmb960;->run()V
 HSPLcom/android/server/pm/-$$Lambda$ShortcutService$3$n_VdEzyBcjs0pGZO8GnB0FoTgR0;-><init>(Lcom/android/server/pm/ShortcutService$3;II)V
 HSPLcom/android/server/pm/-$$Lambda$ShortcutService$3$n_VdEzyBcjs0pGZO8GnB0FoTgR0;->run()V
 HPLcom/android/server/pm/-$$Lambda$ShortcutService$DzwraUeMWDwA0XDfFxd3sGOsA0E;-><init>(Lcom/android/server/pm/ShortcutService;ILjava/lang/String;)V
-PLcom/android/server/pm/-$$Lambda$ShortcutService$DzwraUeMWDwA0XDfFxd3sGOsA0E;->run()V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$DzwraUeMWDwA0XDfFxd3sGOsA0E;->run()V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$EE8aJ-V-lThNgd-x9utgJTk3K50;-><init>(I)V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$EE8aJ-V-lThNgd-x9utgJTk3K50;->test(Ljava/lang/Object;)Z
 PLcom/android/server/pm/-$$Lambda$ShortcutService$H1HFyb1U9E1-y03suEsi37_w-t0;-><init>(Ljava/util/List;Landroid/content/IntentFilter;)V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$H1HFyb1U9E1-y03suEsi37_w-t0;->accept(Ljava/lang/Object;)V
-PLcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$Q0t7aDuDFJ8HWAf1NHW1dGQjOf8;-><init>(Lcom/android/server/pm/ShortcutService$LocalService;ILjava/lang/String;Ljava/util/List;JLandroid/content/ComponentName;IILjava/util/ArrayList;III)V
-PLcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$Q0t7aDuDFJ8HWAf1NHW1dGQjOf8;->accept(Ljava/lang/Object;)V
-PLcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$ltDE7qm9grkumxffFI8cLCFpNqU;-><init>(JLandroid/util/ArraySet;Landroid/content/ComponentName;ZZZZ)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$HrjNihAM4odnSGPLxsJbI33JkwE;-><init>(Ljava/util/List;Landroid/content/IntentFilter;)V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$HrjNihAM4odnSGPLxsJbI33JkwE;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$Q0t7aDuDFJ8HWAf1NHW1dGQjOf8;-><init>(Lcom/android/server/pm/ShortcutService$LocalService;ILjava/lang/String;Ljava/util/List;JLandroid/content/ComponentName;IILjava/util/ArrayList;III)V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$Q0t7aDuDFJ8HWAf1NHW1dGQjOf8;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$ZxpFznY3OrD6IbNkC12YhV8h3J4;-><init>(JLandroid/util/ArraySet;Landroid/content/ComponentName;ZZZZZ)V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$ZxpFznY3OrD6IbNkC12YhV8h3J4;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$a6cj3oQpS-Z6FB4DytB0FytYmiM;-><init>(Ljava/lang/String;)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$a6cj3oQpS-Z6FB4DytB0FytYmiM;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$ltDE7qm9grkumxffFI8cLCFpNqU;-><init>(JLandroid/util/ArraySet;Landroid/content/ComponentName;ZZZZ)V
 HPLcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$ltDE7qm9grkumxffFI8cLCFpNqU;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$$Lambda$ShortcutService$M_jA5rlnfqs19yyXen7WvF8EFdQ;-><init>(Lcom/android/server/pm/ShortcutService;Ljava/util/ArrayList;)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$M_jA5rlnfqs19yyXen7WvF8EFdQ;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$NdP-8QRYjvDVSScw7cBKt85dbWQ;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$NdP-8QRYjvDVSScw7cBKt85dbWQ;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$Ot_p1CCuELDP1Emv4jTa8vvA09A;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$Ot_p1CCuELDP1Emv4jTa8vvA09A;-><init>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$Ot_p1CCuELDP1Emv4jTa8vvA09A;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$QFWliMhWloedhnaZCwVKaqKPVb4;-><init>(Lcom/android/server/pm/ShortcutService;JI)V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$QFWliMhWloedhnaZCwVKaqKPVb4;->run()V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$SjK_0i78sIpSTGJKpeLWOhhhsiA;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$SjK_0i78sIpSTGJKpeLWOhhhsiA;-><init>()V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$SjK_0i78sIpSTGJKpeLWOhhhsiA;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$TAtLoMHHFYLITi_4Sj-ZTHx6ELo;-><init>(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;IZ)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$TAtLoMHHFYLITi_4Sj-ZTHx6ELo;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$TUT0CJsDhxqkpcseduaAriOs6bg;-><clinit>()V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$TUT0CJsDhxqkpcseduaAriOs6bg;-><init>()V
-PLcom/android/server/pm/-$$Lambda$ShortcutService$TUT0CJsDhxqkpcseduaAriOs6bg;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$TUT0CJsDhxqkpcseduaAriOs6bg;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$TVqBA9DN_h90eIcwrnmy7Mkl6jo;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$TVqBA9DN_h90eIcwrnmy7Mkl6jo;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$exGcjcSQADxpLL30XenIn9sDxlI;-><clinit>()V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$exGcjcSQADxpLL30XenIn9sDxlI;-><init>()V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$exGcjcSQADxpLL30XenIn9sDxlI;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$fCl_JbVpr187Fh4_6N-IxgnU68c;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$fCl_JbVpr187Fh4_6N-IxgnU68c;-><init>()V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$fCl_JbVpr187Fh4_6N-IxgnU68c;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$io6aQoSP1ibWQCoayRXJaxbmJvA;-><init>(Lcom/android/server/pm/ShortcutService;Ljava/util/ArrayList;)V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$io6aQoSP1ibWQCoayRXJaxbmJvA;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$l8T8kXBB-Gktym0FoX_WiKj2Glc;-><clinit>()V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$l8T8kXBB-Gktym0FoX_WiKj2Glc;-><init>()V
-PLcom/android/server/pm/-$$Lambda$ShortcutService$l8T8kXBB-Gktym0FoX_WiKj2Glc;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$l8T8kXBB-Gktym0FoX_WiKj2Glc;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$lYluTnTRdTOcpwtJusvYEvlkMjQ;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$lYluTnTRdTOcpwtJusvYEvlkMjQ;-><init>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$lYluTnTRdTOcpwtJusvYEvlkMjQ;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$oes_dY8CJz5MllJiOggarpV9YkA;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$oes_dY8CJz5MllJiOggarpV9YkA;-><init>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$oes_dY8CJz5MllJiOggarpV9YkA;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$s11VOofRVMGkuwyyqnMY7eAyb5k;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$s11VOofRVMGkuwyyqnMY7eAyb5k;-><init>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$s11VOofRVMGkuwyyqnMY7eAyb5k;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/-$$Lambda$ShortcutService$t1am7miIbc4iP6CfSL0gFgEsO0Y;-><init>(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;IZ)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$t1am7miIbc4iP6CfSL0gFgEsO0Y;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$uvknhLDPo5JAtmXalM9P3rrx9e4;-><init>(Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutUser;I)V
+PLcom/android/server/pm/-$$Lambda$ShortcutService$uvknhLDPo5JAtmXalM9P3rrx9e4;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$y1mZhNAWeEp6GCbsOBAt4g-DS3s;-><init>(Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutUser;I)V
 PLcom/android/server/pm/-$$Lambda$ShortcutService$y1mZhNAWeEp6GCbsOBAt4g-DS3s;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$ShortcutUser$6rBk7xJFaM9dXyyKHFs-DCus0iM;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutUser$6rBk7xJFaM9dXyyKHFs-DCus0iM;-><init>()V
+PLcom/android/server/pm/-$$Lambda$ShortcutUser$6rBk7xJFaM9dXyyKHFs-DCus0iM;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/-$$Lambda$ShortcutUser$XHWlvjfCvG1SoVwGHi3envhmtfM;-><init>(ILjava/lang/String;Ljava/util/function/Consumer;)V
 HPLcom/android/server/pm/-$$Lambda$ShortcutUser$XHWlvjfCvG1SoVwGHi3envhmtfM;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/-$$Lambda$ShortcutUser$bsc89E_40a5X2amehalpqawQ5hY;-><clinit>()V
 PLcom/android/server/pm/-$$Lambda$ShortcutUser$bsc89E_40a5X2amehalpqawQ5hY;-><init>()V
 PLcom/android/server/pm/-$$Lambda$ShortcutUser$bsc89E_40a5X2amehalpqawQ5hY;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$StagingManager$-_ny3FTrU2IsbpZjLW2h29O5auM;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$StagingManager$-_ny3FTrU2IsbpZjLW2h29O5auM;-><init>()V
+PLcom/android/server/pm/-$$Lambda$StagingManager$-_ny3FTrU2IsbpZjLW2h29O5auM;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$$Lambda$StagingManager$HKgsX1m7APD_7T6AtjHR5IBpKOg;-><init>(Lcom/android/server/pm/StagingManager;)V
+PLcom/android/server/pm/-$$Lambda$StagingManager$HKgsX1m7APD_7T6AtjHR5IBpKOg;->apply(I)Ljava/lang/Object;
+PLcom/android/server/pm/-$$Lambda$StagingManager$UAHmD_dya6rWSylrk_h2BGFBKcA;-><init>(Lcom/android/server/pm/StagingManager;Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/-$$Lambda$StagingManager$UAHmD_dya6rWSylrk_h2BGFBKcA;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$StagingManager$ZgsDW9nz_GRyhJblDPqTcQpERKw;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$StagingManager$ZgsDW9nz_GRyhJblDPqTcQpERKw;-><init>()V
+PLcom/android/server/pm/-$$Lambda$StagingManager$ZgsDW9nz_GRyhJblDPqTcQpERKw;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/pm/-$$Lambda$StagingManager$d5wng09Aqg6kD7IttyYM7c0-S_s;-><init>(Lcom/android/server/pm/StagingManager;)V
+PLcom/android/server/pm/-$$Lambda$StagingManager$d5wng09Aqg6kD7IttyYM7c0-S_s;->apply(I)Ljava/lang/Object;
+PLcom/android/server/pm/-$$Lambda$StagingManager$khHJXt_K9cdI6PMA3kOt_alWSgA;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$StagingManager$khHJXt_K9cdI6PMA3kOt_alWSgA;-><init>()V
+PLcom/android/server/pm/-$$Lambda$StagingManager$khHJXt_K9cdI6PMA3kOt_alWSgA;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$$Lambda$StagingManager$klDFpL8kmOtsqN6EenDYGj-WaZA;-><init>(Ljava/util/function/Predicate;)V
+PLcom/android/server/pm/-$$Lambda$StagingManager$klDFpL8kmOtsqN6EenDYGj-WaZA;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$$Lambda$StagingManager$l7fa-k0J9C50Vr9mDKn9MKzrXEI;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$StagingManager$l7fa-k0J9C50Vr9mDKn9MKzrXEI;-><init>()V
+PLcom/android/server/pm/-$$Lambda$StagingManager$l7fa-k0J9C50Vr9mDKn9MKzrXEI;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$$Lambda$UserManagerService$1$DQ_02g7kZ7QrJXO6aCATwE6DYCE;-><init>(Lcom/android/server/pm/UserManagerService$1;ILandroid/content/IntentSender;)V
+PLcom/android/server/pm/-$$Lambda$UserManagerService$1$DQ_02g7kZ7QrJXO6aCATwE6DYCE;->run()V
 HSPLcom/android/server/pm/-$$Lambda$UserManagerService$s1AxethOTPU7NQ5LXxyP4etLk7E;-><init>(Landroid/os/IUserRestrictionsListener;)V
-PLcom/android/server/pm/-$$Lambda$UserManagerService$s1AxethOTPU7NQ5LXxyP4etLk7E;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/pm/-$$Lambda$UserManagerService$s1AxethOTPU7NQ5LXxyP4etLk7E;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+PLcom/android/server/pm/-$$Lambda$UserSystemPackageInstaller$qgQhYPPVJE0ZGQMRr6lmVdZZll0;-><init>(Lcom/android/server/pm/UserSystemPackageInstaller;Ljava/util/Set;ZLjava/util/Set;)V
+PLcom/android/server/pm/-$$Lambda$UserSystemPackageInstaller$qgQhYPPVJE0ZGQMRr6lmVdZZll0;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo;-><clinit>()V
+PLcom/android/server/pm/-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo;-><init>()V
+HPLcom/android/server/pm/-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo;->execute(Ljava/lang/Runnable;)V
 HSPLcom/android/server/pm/-$$Lambda$g4P9K8aMR8DqEu0xx3BuQNeuJDI;-><clinit>()V
 HSPLcom/android/server/pm/-$$Lambda$g4P9K8aMR8DqEu0xx3BuQNeuJDI;-><init>()V
 HSPLcom/android/server/pm/-$$Lambda$g4P9K8aMR8DqEu0xx3BuQNeuJDI;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/pm/-$$Lambda$jZzCUQd1whVIqs_s1XMLbFqTP_E;-><init>(Lcom/android/server/pm/ShortcutService;)V
-PLcom/android/server/pm/-$$Lambda$jZzCUQd1whVIqs_s1XMLbFqTP_E;->run()V
+HPLcom/android/server/pm/-$$Lambda$jZzCUQd1whVIqs_s1XMLbFqTP_E;->run()V
 HSPLcom/android/server/pm/-$$Lambda$k1GFoI6SobyVJslBym5uZjmuRFs;-><clinit>()V
 HSPLcom/android/server/pm/-$$Lambda$k1GFoI6SobyVJslBym5uZjmuRFs;-><init>()V
 HSPLcom/android/server/pm/-$$Lambda$k1GFoI6SobyVJslBym5uZjmuRFs;->apply(Ljava/lang/Object;)Ljava/lang/Object;
@@ -13715,40 +23002,60 @@
 HSPLcom/android/server/pm/-$$Lambda$p0TiQPw2ryHKkedVkMgvUcGADDo;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/pm/-$$Lambda$vv6Ko6L2p38nn3EYcL5PZxcyRyk;-><clinit>()V
 PLcom/android/server/pm/-$$Lambda$vv6Ko6L2p38nn3EYcL5PZxcyRyk;-><init>()V
-PLcom/android/server/pm/-$$Lambda$vv6Ko6L2p38nn3EYcL5PZxcyRyk;->test(Ljava/lang/Object;)Z
-PLcom/android/server/pm/AbstractStatsBase$1;-><init>(Lcom/android/server/pm/AbstractStatsBase;Ljava/lang/String;Ljava/lang/Object;)V
-PLcom/android/server/pm/AbstractStatsBase$1;->run()V
+HPLcom/android/server/pm/-$$Lambda$vv6Ko6L2p38nn3EYcL5PZxcyRyk;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/pm/AbstractStatsBase$1;-><init>(Lcom/android/server/pm/AbstractStatsBase;Ljava/lang/String;Ljava/lang/Object;)V
+HPLcom/android/server/pm/AbstractStatsBase$1;->run()V
 HSPLcom/android/server/pm/AbstractStatsBase;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V
+PLcom/android/server/pm/AbstractStatsBase;->access$000(Lcom/android/server/pm/AbstractStatsBase;Ljava/lang/Object;)V
+PLcom/android/server/pm/AbstractStatsBase;->access$100(Lcom/android/server/pm/AbstractStatsBase;)Ljava/util/concurrent/atomic/AtomicLong;
+PLcom/android/server/pm/AbstractStatsBase;->access$200(Lcom/android/server/pm/AbstractStatsBase;)Ljava/util/concurrent/atomic/AtomicBoolean;
 HSPLcom/android/server/pm/AbstractStatsBase;->getFile()Landroid/util/AtomicFile;
-HPLcom/android/server/pm/AbstractStatsBase;->maybeWriteAsync(Ljava/lang/Object;)Z
+HSPLcom/android/server/pm/AbstractStatsBase;->maybeWriteAsync(Ljava/lang/Object;)Z
 HSPLcom/android/server/pm/AbstractStatsBase;->read(Ljava/lang/Object;)V
 PLcom/android/server/pm/AbstractStatsBase;->writeImpl(Ljava/lang/Object;)V
+PLcom/android/server/pm/AbstractStatsBase;->writeNow(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/ApexManager$1;-><init>()V
 HSPLcom/android/server/pm/ApexManager$1;->create()Lcom/android/server/pm/ApexManager;
 HSPLcom/android/server/pm/ApexManager$1;->create()Ljava/lang/Object;
+HSPLcom/android/server/pm/ApexManager$ActiveApexInfo;-><init>(Landroid/apex/ApexInfo;)V
+HSPLcom/android/server/pm/ApexManager$ActiveApexInfo;-><init>(Landroid/apex/ApexInfo;Lcom/android/server/pm/ApexManager$1;)V
 HSPLcom/android/server/pm/ApexManager$ActiveApexInfo;-><init>(Ljava/io/File;Ljava/io/File;)V
 HSPLcom/android/server/pm/ApexManager$ActiveApexInfo;-><init>(Ljava/io/File;Ljava/io/File;Lcom/android/server/pm/ApexManager$1;)V
+HSPLcom/android/server/pm/ApexManager$ActiveApexInfo;-><init>(Ljava/lang/String;Ljava/io/File;Ljava/io/File;)V
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl$1;-><init>(Lcom/android/server/pm/ApexManager$ApexManagerImpl;)V
 PLcom/android/server/pm/ApexManager$ApexManagerImpl$1;->lambda$onReceive$0$ApexManager$ApexManagerImpl$1()V
 PLcom/android/server/pm/ApexManager$ApexManagerImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;-><init>(Landroid/apex/IApexService;)V
+PLcom/android/server/pm/ApexManager$ApexManagerImpl;->abortStagedSession(I)Z
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->access$100(Lcom/android/server/pm/ApexManager$ApexManagerImpl;)V
+PLcom/android/server/pm/ApexManager$ApexManagerImpl;->access$200(Lcom/android/server/pm/ApexManager$ApexManagerImpl;)V
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/pm/ApexManager$ApexManagerImpl;->dumpFromPackagesCache(Ljava/util/List;Ljava/lang/String;Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getActiveApexInfos()Ljava/util/List;
 HPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getActivePackages()Ljava/util/List;
+HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getApexModuleNameForPackageName(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/pm/ApexManager$ApexManagerImpl;->getApksInApex(Ljava/lang/String;)Ljava/util/List;
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->getFactoryPackages()Ljava/util/List;
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->getInactivePackages()Ljava/util/List;
 HPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
-PLcom/android/server/pm/ApexManager$ApexManagerImpl;->isActive(Landroid/content/pm/PackageInfo;)Z
+PLcom/android/server/pm/ApexManager$ApexManagerImpl;->getStagedSessionInfo(I)Landroid/apex/ApexSessionInfo;
+HPLcom/android/server/pm/ApexManager$ApexManagerImpl;->isActive(Landroid/content/pm/PackageInfo;)Z
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->isApexPackage(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->isApexSupported()Z
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->isFactory(Landroid/content/pm/PackageInfo;)Z
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->lambda$getActiveApexInfos$0(Landroid/apex/ApexInfo;)Lcom/android/server/pm/ApexManager$ActiveApexInfo;
+HPLcom/android/server/pm/ApexManager$ApexManagerImpl;->lambda$getActivePackages$0(Landroid/content/pm/PackageInfo;)Z
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->lambda$getActivePackages$1(Landroid/content/pm/PackageInfo;)Z
+PLcom/android/server/pm/ApexManager$ApexManagerImpl;->lambda$getFactoryPackages$1(Landroid/content/pm/PackageInfo;)Z
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->lambda$getFactoryPackages$2(Landroid/content/pm/PackageInfo;)Z
+PLcom/android/server/pm/ApexManager$ApexManagerImpl;->lambda$getInactivePackages$2(Landroid/content/pm/PackageInfo;)Z
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->lambda$getInactivePackages$3(Landroid/content/pm/PackageInfo;)Z
+PLcom/android/server/pm/ApexManager$ApexManagerImpl;->markStagedSessionReady(I)V
+PLcom/android/server/pm/ApexManager$ApexManagerImpl;->markStagedSessionSuccessful(I)V
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->populateAllPackagesCacheIfNeeded()V
+HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->populatePackageNameToApexModuleNameIfNeeded()V
+HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->registerApkInApex(Landroid/content/pm/parsing/AndroidPackage;)V
+PLcom/android/server/pm/ApexManager$ApexManagerImpl;->submitStagedSession(Landroid/apex/ApexSessionParams;)Landroid/apex/ApexInfoList;
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->systemReady(Landroid/content/Context;)V
 HSPLcom/android/server/pm/ApexManager;-><clinit>()V
 HSPLcom/android/server/pm/ApexManager;-><init>()V
@@ -13759,13 +23066,17 @@
 PLcom/android/server/pm/AppsFilter$FeatureConfigImpl;->lambda$onSystemReady$0$AppsFilter$FeatureConfigImpl(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/pm/AppsFilter$FeatureConfigImpl;->onSystemReady()V
 HSPLcom/android/server/pm/AppsFilter;-><init>(Lcom/android/server/pm/AppsFilter$FeatureConfig;[Ljava/lang/String;Z)V
+HSPLcom/android/server/pm/AppsFilter;-><init>(Lcom/android/server/pm/AppsFilter$FeatureConfig;[Ljava/lang/String;ZLcom/android/server/om/OverlayReferenceMapper$Provider;)V
 HSPLcom/android/server/pm/AppsFilter;->addPackage(Lcom/android/server/pm/PackageSetting;Landroid/util/ArrayMap;)V
+HSPLcom/android/server/pm/AppsFilter;->canQueryAsInstaller(Lcom/android/server/pm/PackageSetting;Landroid/content/pm/parsing/AndroidPackage;)Z
 HSPLcom/android/server/pm/AppsFilter;->canQueryViaIntent(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;)Z
+HSPLcom/android/server/pm/AppsFilter;->canQueryViaPackage(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;)Z
 HSPLcom/android/server/pm/AppsFilter;->create(Lcom/android/server/pm/PackageManagerService$Injector;)Lcom/android/server/pm/AppsFilter;
 HPLcom/android/server/pm/AppsFilter;->dumpQueries(Ljava/io/PrintWriter;Lcom/android/server/pm/PackageManagerService;Ljava/lang/Integer;Lcom/android/server/pm/DumpState;[I)V
 HSPLcom/android/server/pm/AppsFilter;->grantImplicitAccess(II)V
+PLcom/android/server/pm/AppsFilter;->isSystemSigned(Landroid/content/pm/PackageParser$SigningDetails;Lcom/android/server/pm/PackageSetting;)Z
 HSPLcom/android/server/pm/AppsFilter;->onSystemReady()V
-HPLcom/android/server/pm/AppsFilter;->removePackage(Lcom/android/server/pm/PackageSetting;[ILandroid/util/ArrayMap;)V
+HSPLcom/android/server/pm/AppsFilter;->removePackage(Lcom/android/server/pm/PackageSetting;[ILandroid/util/ArrayMap;)V
 HSPLcom/android/server/pm/AppsFilter;->shouldFilterApplication(ILcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;I)Z
 HSPLcom/android/server/pm/AppsFilter;->shouldFilterApplicationInternal(ILcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;I)Z
 PLcom/android/server/pm/BackgroundDexOptService$1;-><init>(Lcom/android/server/pm/BackgroundDexOptService;Ljava/lang/String;Landroid/app/job/JobParameters;Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;)V
@@ -13774,11 +23085,16 @@
 PLcom/android/server/pm/BackgroundDexOptService$2;->run()V
 HSPLcom/android/server/pm/BackgroundDexOptService;-><clinit>()V
 PLcom/android/server/pm/BackgroundDexOptService;-><init>()V
-PLcom/android/server/pm/BackgroundDexOptService;->abortIdleOptimizations(J)I
-PLcom/android/server/pm/BackgroundDexOptService;->getBatteryLevel()I
+HPLcom/android/server/pm/BackgroundDexOptService;->abortIdleOptimizations(J)I
+PLcom/android/server/pm/BackgroundDexOptService;->access$000(Lcom/android/server/pm/BackgroundDexOptService;Landroid/app/job/JobParameters;Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;)V
+PLcom/android/server/pm/BackgroundDexOptService;->access$100(Lcom/android/server/pm/BackgroundDexOptService;Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;Landroid/content/Context;)I
+HPLcom/android/server/pm/BackgroundDexOptService;->getBatteryLevel()I
 HSPLcom/android/server/pm/BackgroundDexOptService;->getDowngradeUnusedAppsThresholdInMillis()J
+PLcom/android/server/pm/BackgroundDexOptService;->getLowStorageThreshold(Landroid/content/Context;)J
+PLcom/android/server/pm/BackgroundDexOptService;->idleOptimization(Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;Landroid/content/Context;)I
 PLcom/android/server/pm/BackgroundDexOptService;->idleOptimizePackages(Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;J)I
 HSPLcom/android/server/pm/BackgroundDexOptService;->isBackgroundDexoptDisabled()Z
+HPLcom/android/server/pm/BackgroundDexOptService;->lambda$performDexOptPrimary$0(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;II)Ljava/lang/Integer;
 PLcom/android/server/pm/BackgroundDexOptService;->notifyPackageChanged(Ljava/lang/String;)V
 PLcom/android/server/pm/BackgroundDexOptService;->notifyPinService(Landroid/util/ArraySet;)V
 PLcom/android/server/pm/BackgroundDexOptService;->onStartJob(Landroid/app/job/JobParameters;)Z
@@ -13786,38 +23102,45 @@
 PLcom/android/server/pm/BackgroundDexOptService;->optimizePackage(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;Z)Z
 HPLcom/android/server/pm/BackgroundDexOptService;->optimizePackages(Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;JZLandroid/util/ArraySet;)I
 HPLcom/android/server/pm/BackgroundDexOptService;->performDexOptPrimary(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;II)Z
-PLcom/android/server/pm/BackgroundDexOptService;->postBootUpdate(Landroid/app/job/JobParameters;Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;)V
-PLcom/android/server/pm/BackgroundDexOptService;->reconcileSecondaryDexFiles(Lcom/android/server/pm/dex/DexManager;)I
+HPLcom/android/server/pm/BackgroundDexOptService;->performDexOptSecondary(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;II)Z
+HPLcom/android/server/pm/BackgroundDexOptService;->postBootUpdate(Landroid/app/job/JobParameters;Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;)V
+HPLcom/android/server/pm/BackgroundDexOptService;->reconcileSecondaryDexFiles(Lcom/android/server/pm/dex/DexManager;)I
+PLcom/android/server/pm/BackgroundDexOptService;->runIdleOptimization(Landroid/app/job/JobParameters;Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;)Z
+PLcom/android/server/pm/BackgroundDexOptService;->runPostBootUpdate(Landroid/app/job/JobParameters;Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;)Z
 HSPLcom/android/server/pm/BackgroundDexOptService;->schedule(Landroid/content/Context;)V
 PLcom/android/server/pm/BackgroundDexOptService;->shouldDowngrade(J)Z
 PLcom/android/server/pm/BackgroundDexOptService;->supportSecondaryDex()Z
-PLcom/android/server/pm/BackgroundDexOptService;->trackPerformDexOpt(Ljava/lang/String;ZLjava/util/function/Supplier;)I
+HPLcom/android/server/pm/BackgroundDexOptService;->trackPerformDexOpt(Ljava/lang/String;ZLjava/util/function/Supplier;)I
 HSPLcom/android/server/pm/CompilerStats$PackageStats;-><init>(Ljava/lang/String;)V
-PLcom/android/server/pm/CompilerStats$PackageStats;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/pm/CompilerStats$PackageStats;->access$000(Lcom/android/server/pm/CompilerStats$PackageStats;)Ljava/util/Map;
+HPLcom/android/server/pm/CompilerStats$PackageStats;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/pm/CompilerStats$PackageStats;->getPackageName()Ljava/lang/String;
 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/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;
-PLcom/android/server/pm/CompilerStats;->getPackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
-PLcom/android/server/pm/CompilerStats;->maybeWriteAsync()Z
+HPLcom/android/server/pm/CompilerStats;->getPackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
+HSPLcom/android/server/pm/CompilerStats;->maybeWriteAsync()Z
 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
-PLcom/android/server/pm/CompilerStats;->write(Ljava/io/Writer;)V
+HPLcom/android/server/pm/CompilerStats;->write(Ljava/io/Writer;)V
 PLcom/android/server/pm/CompilerStats;->writeInternal(Ljava/lang/Object;)V
 PLcom/android/server/pm/CompilerStats;->writeInternal(Ljava/lang/Void;)V
+PLcom/android/server/pm/CompilerStats;->writeNow()V
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;-><init>()V
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;-><init>(Lcom/android/server/pm/ComponentResolver$1;)V
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->access$400(Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;)Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->access$700(Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;Ljava/lang/String;Ljava/util/List;)V
-PLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->access$800(Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;Ljava/lang/String;)V
+HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->access$800(Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;Ljava/lang/String;)V
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->addActivity(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;Ljava/lang/String;Ljava/util/List;)V
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->allowFilterResult(Landroid/content/IntentFilter;Ljava/util/List;)Z
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->allowFilterResult(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;Ljava/util/List;)Z
 HPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->dumpFilterLabel(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Object;I)V
 HPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->filterToLabel(Landroid/content/IntentFilter;)Ljava/lang/Object;
+HPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->filterToLabel(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;)Ljava/lang/Object;
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->getResolveList(Landroid/content/pm/parsing/AndroidPackage;)Ljava/util/List;
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->isFilterStopped(Landroid/content/IntentFilter;I)Z
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->isFilterStopped(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;I)Z
@@ -13829,11 +23152,11 @@
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->newResult(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;II)Landroid/content/pm/ResolveInfo;
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->queryIntent(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->queryIntentForPackage(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;I)Ljava/util/List;
-HPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->removeActivity(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;Ljava/lang/String;)V
+HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->removeActivity(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivity;Ljava/lang/String;)V
 HSPLcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->sortResults(Ljava/util/List;)V
 PLcom/android/server/pm/ComponentResolver$InstantAppIntentResolver;-><init>()V
-PLcom/android/server/pm/ComponentResolver$InstantAppIntentResolver;->filterResults(Ljava/util/List;)V
-PLcom/android/server/pm/ComponentResolver$InstantAppIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
+HPLcom/android/server/pm/ComponentResolver$InstantAppIntentResolver;->filterResults(Ljava/util/List;)V
+HPLcom/android/server/pm/ComponentResolver$InstantAppIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
 PLcom/android/server/pm/ComponentResolver$InstantAppIntentResolver;->newArray(I)[Landroid/content/pm/AuxiliaryResolveInfo$AuxiliaryFilter;
 PLcom/android/server/pm/ComponentResolver$InstantAppIntentResolver;->newResult(Landroid/content/IntentFilter;II)Ljava/lang/Object;
 PLcom/android/server/pm/ComponentResolver$InstantAppIntentResolver;->newResult(Landroid/content/pm/AuxiliaryResolveInfo$AuxiliaryFilter;II)Landroid/content/pm/AuxiliaryResolveInfo$AuxiliaryFilter;
@@ -13841,19 +23164,21 @@
 HSPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;-><init>(Lcom/android/server/pm/ComponentResolver$1;)V
 HSPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->access$500(Lcom/android/server/pm/ComponentResolver$ProviderIntentResolver;)Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->addProvider(Landroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;)V
-PLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->allowFilterResult(Landroid/content/IntentFilter;Ljava/util/List;)Z
+HPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->allowFilterResult(Landroid/content/IntentFilter;Ljava/util/List;)Z
 HPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->allowFilterResult(Landroid/content/pm/parsing/ComponentParseUtils$ParsedProviderIntentInfo;Ljava/util/List;)Z
-PLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->dumpFilterLabel(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Object;I)V
-PLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->filterToLabel(Landroid/content/IntentFilter;)Ljava/lang/Object;
-PLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/IntentFilter;)Z
+HPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->dumpFilterLabel(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Object;I)V
+HPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->filterToLabel(Landroid/content/IntentFilter;)Ljava/lang/Object;
+PLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->filterToLabel(Landroid/content/pm/parsing/ComponentParseUtils$ParsedProviderIntentInfo;)Ljava/lang/Object;
+HPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/IntentFilter;)Z
+HPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/pm/parsing/ComponentParseUtils$ParsedProviderIntentInfo;)Z
 HSPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
 HSPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->newArray(I)[Landroid/content/pm/parsing/ComponentParseUtils$ParsedProviderIntentInfo;
-PLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->newResult(Landroid/content/IntentFilter;II)Ljava/lang/Object;
+HPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->newResult(Landroid/content/IntentFilter;II)Ljava/lang/Object;
 HPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->newResult(Landroid/content/pm/parsing/ComponentParseUtils$ParsedProviderIntentInfo;II)Landroid/content/pm/ResolveInfo;
-PLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->queryIntent(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
-PLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->queryIntentForPackage(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;I)Ljava/util/List;
-HPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->removeProvider(Landroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;)V
-PLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->sortResults(Ljava/util/List;)V
+HPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->queryIntent(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
+HPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->queryIntentForPackage(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;I)Ljava/util/List;
+HSPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->removeProvider(Landroid/content/pm/parsing/ComponentParseUtils$ParsedProvider;)V
+HPLcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->sortResults(Ljava/util/List;)V
 HSPLcom/android/server/pm/ComponentResolver$ReceiverIntentResolver;-><init>()V
 HSPLcom/android/server/pm/ComponentResolver$ReceiverIntentResolver;-><init>(Lcom/android/server/pm/ComponentResolver$1;)V
 HSPLcom/android/server/pm/ComponentResolver$ReceiverIntentResolver;->getResolveList(Landroid/content/pm/parsing/AndroidPackage;)Ljava/util/List;
@@ -13864,9 +23189,10 @@
 HSPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->allowFilterResult(Landroid/content/IntentFilter;Ljava/util/List;)Z
 HSPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->allowFilterResult(Landroid/content/pm/parsing/ComponentParseUtils$ParsedServiceIntentInfo;Ljava/util/List;)Z
 HPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->dumpFilterLabel(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Object;I)V
-PLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->filterToLabel(Landroid/content/IntentFilter;)Ljava/lang/Object;
-PLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->isFilterStopped(Landroid/content/IntentFilter;I)Z
-PLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->isFilterStopped(Landroid/content/pm/parsing/ComponentParseUtils$ParsedServiceIntentInfo;I)Z
+HPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->filterToLabel(Landroid/content/IntentFilter;)Ljava/lang/Object;
+PLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->filterToLabel(Landroid/content/pm/parsing/ComponentParseUtils$ParsedServiceIntentInfo;)Ljava/lang/Object;
+HPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->isFilterStopped(Landroid/content/IntentFilter;I)Z
+HPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->isFilterStopped(Landroid/content/pm/parsing/ComponentParseUtils$ParsedServiceIntentInfo;I)Z
 HSPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/IntentFilter;)Z
 HSPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/pm/parsing/ComponentParseUtils$ParsedServiceIntentInfo;)Z
 HSPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
@@ -13875,7 +23201,7 @@
 HSPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->newResult(Landroid/content/pm/parsing/ComponentParseUtils$ParsedServiceIntentInfo;II)Landroid/content/pm/ResolveInfo;
 HSPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->queryIntent(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
 HSPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->queryIntentForPackage(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;I)Ljava/util/List;
-HPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->removeService(Landroid/content/pm/parsing/ComponentParseUtils$ParsedService;)V
+HSPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->removeService(Landroid/content/pm/parsing/ComponentParseUtils$ParsedService;)V
 HSPLcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->sortResults(Ljava/util/List;)V
 HSPLcom/android/server/pm/ComponentResolver;-><clinit>()V
 HSPLcom/android/server/pm/ComponentResolver;-><init>(Lcom/android/server/pm/UserManagerService;Landroid/content/pm/PackageManagerInternal;Ljava/lang/Object;)V
@@ -13890,7 +23216,7 @@
 PLcom/android/server/pm/ComponentResolver;->assertProvidersNotDefined(Landroid/content/pm/parsing/AndroidPackage;)V
 HPLcom/android/server/pm/ComponentResolver;->assertProvidersNotDefinedLocked(Landroid/content/pm/parsing/AndroidPackage;)V
 PLcom/android/server/pm/ComponentResolver;->dumpActivityResolvers(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;Ljava/lang/String;)V
-PLcom/android/server/pm/ComponentResolver;->dumpContentProviders(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;Ljava/lang/String;)V
+HPLcom/android/server/pm/ComponentResolver;->dumpContentProviders(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;Ljava/lang/String;)V
 PLcom/android/server/pm/ComponentResolver;->dumpProviderResolvers(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;Ljava/lang/String;)V
 PLcom/android/server/pm/ComponentResolver;->dumpReceiverResolvers(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;Ljava/lang/String;)V
 HPLcom/android/server/pm/ComponentResolver;->dumpServicePermissions(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;)V
@@ -13908,28 +23234,43 @@
 HSPLcom/android/server/pm/ComponentResolver;->queryActivities(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
 HSPLcom/android/server/pm/ComponentResolver;->queryActivities(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;I)Ljava/util/List;
 HSPLcom/android/server/pm/ComponentResolver;->queryProvider(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
-PLcom/android/server/pm/ComponentResolver;->queryProviders(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
+HPLcom/android/server/pm/ComponentResolver;->queryProviders(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
 PLcom/android/server/pm/ComponentResolver;->queryProviders(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;I)Ljava/util/List;
 HSPLcom/android/server/pm/ComponentResolver;->queryProviders(Ljava/lang/String;Ljava/lang/String;III)Ljava/util/List;
 HSPLcom/android/server/pm/ComponentResolver;->queryReceivers(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
 HSPLcom/android/server/pm/ComponentResolver;->queryReceivers(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;I)Ljava/util/List;
 HSPLcom/android/server/pm/ComponentResolver;->queryServices(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
 HSPLcom/android/server/pm/ComponentResolver;->queryServices(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;I)Ljava/util/List;
-PLcom/android/server/pm/ComponentResolver;->removeAllComponents(Landroid/content/pm/parsing/AndroidPackage;Z)V
-HPLcom/android/server/pm/ComponentResolver;->removeAllComponentsLocked(Landroid/content/pm/parsing/AndroidPackage;Z)V
+HSPLcom/android/server/pm/ComponentResolver;->removeAllComponents(Landroid/content/pm/parsing/AndroidPackage;Z)V
+HSPLcom/android/server/pm/ComponentResolver;->removeAllComponentsLocked(Landroid/content/pm/parsing/AndroidPackage;Z)V
 HSPLcom/android/server/pm/CrossProfileAppsService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/CrossProfileAppsService;->onStart()V
 HSPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;-><init>(Landroid/content/Context;)V
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->clearCallingIdentity()J
+PLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getActivityTaskManagerInternal()Lcom/android/server/wm/ActivityTaskManagerInternal;
+PLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getAppOpsManager()Landroid/app/AppOpsManager;
+PLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getCallingPid()I
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getCallingUid()I
+PLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getCallingUserId()I
+PLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getPackageManagerInternal()Landroid/content/pm/PackageManagerInternal;
+PLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getUserManager()Landroid/os/UserManager;
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->restoreCallingIdentity(J)V
 HSPLcom/android/server/pm/CrossProfileAppsServiceImpl;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/CrossProfileAppsServiceImpl;-><init>(Landroid/content/Context;Lcom/android/server/pm/CrossProfileAppsServiceImpl$Injector;)V
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->getTargetUserProfiles(Ljava/lang/String;)Ljava/util/List;
-PLcom/android/server/pm/CrossProfileAppsServiceImpl;->getTargetUserProfilesUnchecked(Ljava/lang/String;I)Ljava/util/List;
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->getTargetUserProfilesUnchecked(Ljava/lang/String;I)Ljava/util/List;
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->isPackageEnabled(Ljava/lang/String;I)Z
+PLcom/android/server/pm/CrossProfileAppsServiceImpl;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/ComponentName;IZ)V
+PLcom/android/server/pm/CrossProfileAppsServiceImpl;->verifyActivityCanHandleIntentAndExported(Landroid/content/Intent;Landroid/content/ComponentName;II)V
+PLcom/android/server/pm/CrossProfileAppsServiceImpl;->verifyCallingPackage(Ljava/lang/String;)V
+HPLcom/android/server/pm/CrossProfileIntentFilter;-><init>(Landroid/content/IntentFilter;Ljava/lang/String;II)V
 HSPLcom/android/server/pm/CrossProfileIntentFilter;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V
-PLcom/android/server/pm/CrossProfileIntentFilter;->getFlags()I
+PLcom/android/server/pm/CrossProfileIntentFilter;->equalsIgnoreFilter(Lcom/android/server/pm/CrossProfileIntentFilter;)Z
+HSPLcom/android/server/pm/CrossProfileIntentFilter;->getFlags()I
 HSPLcom/android/server/pm/CrossProfileIntentFilter;->getIntFromXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
+PLcom/android/server/pm/CrossProfileIntentFilter;->getOwnerPackage()Ljava/lang/String;
 HSPLcom/android/server/pm/CrossProfileIntentFilter;->getStringFromXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/pm/CrossProfileIntentFilter;->getTargetUserId()I
+HSPLcom/android/server/pm/CrossProfileIntentFilter;->getTargetUserId()I
 HSPLcom/android/server/pm/CrossProfileIntentFilter;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/pm/CrossProfileIntentResolver;-><init>()V
 HSPLcom/android/server/pm/CrossProfileIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
@@ -13938,11 +23279,11 @@
 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
-PLcom/android/server/pm/DumpState;-><init>()V
+HPLcom/android/server/pm/DumpState;-><init>()V
 PLcom/android/server/pm/DumpState;->getTitlePrinted()Z
-PLcom/android/server/pm/DumpState;->isDumping(I)Z
+HPLcom/android/server/pm/DumpState;->isDumping(I)Z
 PLcom/android/server/pm/DumpState;->isOptionEnabled(I)Z
-PLcom/android/server/pm/DumpState;->onTitlePrinted()Z
+HPLcom/android/server/pm/DumpState;->onTitlePrinted()Z
 PLcom/android/server/pm/DumpState;->setTitlePrinted(Z)V
 PLcom/android/server/pm/DynamicCodeLoggingService$AuditWatchingThread;-><init>(Lcom/android/server/pm/DynamicCodeLoggingService;Landroid/app/job/JobParameters;)V
 HPLcom/android/server/pm/DynamicCodeLoggingService$AuditWatchingThread;->processAuditEvents()Z
@@ -13951,98 +23292,148 @@
 PLcom/android/server/pm/DynamicCodeLoggingService$IdleLoggingThread;->run()V
 HSPLcom/android/server/pm/DynamicCodeLoggingService;-><clinit>()V
 PLcom/android/server/pm/DynamicCodeLoggingService;-><init>()V
+PLcom/android/server/pm/DynamicCodeLoggingService;->access$000()Lcom/android/server/pm/dex/DynamicCodeLogger;
+PLcom/android/server/pm/DynamicCodeLoggingService;->access$100(Lcom/android/server/pm/DynamicCodeLoggingService;)Z
+PLcom/android/server/pm/DynamicCodeLoggingService;->access$200()Ljava/lang/String;
+HPLcom/android/server/pm/DynamicCodeLoggingService;->access$300(Lcom/android/server/pm/DynamicCodeLoggingService;)Z
+PLcom/android/server/pm/DynamicCodeLoggingService;->access$400()Ljava/util/regex/Pattern;
+PLcom/android/server/pm/DynamicCodeLoggingService;->getDynamicCodeLogger()Lcom/android/server/pm/dex/DynamicCodeLogger;
 PLcom/android/server/pm/DynamicCodeLoggingService;->onStartJob(Landroid/app/job/JobParameters;)Z
 PLcom/android/server/pm/DynamicCodeLoggingService;->onStopJob(Landroid/app/job/JobParameters;)Z
 HSPLcom/android/server/pm/DynamicCodeLoggingService;->schedule(Landroid/content/Context;)V
 HSPLcom/android/server/pm/InstallSource;-><clinit>()V
 HSPLcom/android/server/pm/InstallSource;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLcom/android/server/pm/InstallSource;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLcom/android/server/pm/PackageSignatures;)V
+HSPLcom/android/server/pm/InstallSource;->create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/InstallSource;->create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Lcom/android/server/pm/InstallSource;
+HSPLcom/android/server/pm/InstallSource;->create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/InstallSource;->createInternal(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Lcom/android/server/pm/InstallSource;
+HSPLcom/android/server/pm/InstallSource;->createInternal(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLcom/android/server/pm/PackageSignatures;)Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/InstallSource;->intern(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/InstallSource;->setInitiatingPackageSignatures(Lcom/android/server/pm/PackageSignatures;)Lcom/android/server/pm/InstallSource;
 PLcom/android/server/pm/InstallSource;->setInstallerPackage(Ljava/lang/String;)Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/InstallSource;->setIsOrphaned(Z)Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/Installer$1;-><init>(Lcom/android/server/pm/Installer;)V
-PLcom/android/server/pm/Installer$InstallerException;-><init>(Ljava/lang/String;)V
-PLcom/android/server/pm/Installer$InstallerException;->from(Ljava/lang/Exception;)Lcom/android/server/pm/Installer$InstallerException;
+HPLcom/android/server/pm/Installer$InstallerException;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/pm/Installer$InstallerException;->from(Ljava/lang/Exception;)Lcom/android/server/pm/Installer$InstallerException;
 HSPLcom/android/server/pm/Installer;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/Installer;-><init>(Landroid/content/Context;Z)V
-PLcom/android/server/pm/Installer;->assertValidInstructionSet(Ljava/lang/String;)V
+HSPLcom/android/server/pm/Installer;->assertFsverityRootHashMatches(Ljava/lang/String;[B)V
+HSPLcom/android/server/pm/Installer;->assertValidInstructionSet(Ljava/lang/String;)V
 HSPLcom/android/server/pm/Installer;->checkBeforeRemote()Z
-PLcom/android/server/pm/Installer;->clearAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
+HPLcom/android/server/pm/Installer;->clearAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
 HSPLcom/android/server/pm/Installer;->clearAppProfiles(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/Installer;->connect()V
 PLcom/android/server/pm/Installer;->copySystemProfile(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/Installer;->createAppData(Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;I)J
+PLcom/android/server/pm/Installer;->createOatDir(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/pm/Installer;->createProfileSnapshot(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/pm/Installer;->createUserData(Ljava/lang/String;III)V
-PLcom/android/server/pm/Installer;->destroyAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
+HPLcom/android/server/pm/Installer;->deleteOdex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/pm/Installer;->destroyAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
+PLcom/android/server/pm/Installer;->destroyAppProfiles(Ljava/lang/String;)V
 PLcom/android/server/pm/Installer;->destroyProfileSnapshot(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/pm/Installer;->dexopt(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/pm/Installer;->destroyUserData(Ljava/lang/String;II)V
+HSPLcom/android/server/pm/Installer;->dexopt(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/Installer;->fixupAppData(Ljava/lang/String;I)V
+HPLcom/android/server/pm/Installer;->freeCache(Ljava/lang/String;JJI)V
 HPLcom/android/server/pm/Installer;->getAppSize(Ljava/lang/String;[Ljava/lang/String;III[J[Ljava/lang/String;Landroid/content/pm/PackageStats;)V
 PLcom/android/server/pm/Installer;->getExternalSize(Ljava/lang/String;II[I)[J
-PLcom/android/server/pm/Installer;->getUserSize(Ljava/lang/String;II[ILandroid/content/pm/PackageStats;)V
-PLcom/android/server/pm/Installer;->hashSecondaryDexFile(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;I)[B
+HPLcom/android/server/pm/Installer;->getUserSize(Ljava/lang/String;II[ILandroid/content/pm/PackageStats;)V
+HPLcom/android/server/pm/Installer;->hashSecondaryDexFile(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;I)[B
+PLcom/android/server/pm/Installer;->installApkVerity(Ljava/lang/String;Ljava/io/FileDescriptor;I)V
 HSPLcom/android/server/pm/Installer;->invalidateMounts()V
-PLcom/android/server/pm/Installer;->isQuotaSupported(Ljava/lang/String;)Z
+HPLcom/android/server/pm/Installer;->isQuotaSupported(Ljava/lang/String;)Z
+PLcom/android/server/pm/Installer;->linkFile(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/pm/Installer;->linkNativeLibraryDirectory(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/pm/Installer;->markBootComplete(Ljava/lang/String;)V
-PLcom/android/server/pm/Installer;->mergeProfiles(ILjava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/pm/Installer;->mergeProfiles(ILjava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/pm/Installer;->migrateLegacyObbData()Z
-PLcom/android/server/pm/Installer;->moveAb(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/pm/Installer;->moveAb(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/Installer;->onStart()V
-PLcom/android/server/pm/Installer;->prepareAppProfile(Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/server/pm/Installer;->reconcileSecondaryDexFile(Ljava/lang/String;Ljava/lang/String;I[Ljava/lang/String;Ljava/lang/String;I)Z
-PLcom/android/server/pm/Installer;->rmPackageDir(Ljava/lang/String;)V
-PLcom/android/server/pm/Installer;->rmdex(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/pm/Installer;->prepareAppProfile(Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/pm/Installer;->reconcileSecondaryDexFile(Ljava/lang/String;Ljava/lang/String;I[Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/pm/Installer;->restoreAppDataSnapshot(Ljava/lang/String;ILjava/lang/String;III)Z
+HSPLcom/android/server/pm/Installer;->rmPackageDir(Ljava/lang/String;)V
+HSPLcom/android/server/pm/Installer;->rmdex(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/Installer;->setAppQuota(Ljava/lang/String;IIJ)V
 HSPLcom/android/server/pm/Installer;->setWarnIfHeld(Ljava/lang/Object;)V
+PLcom/android/server/pm/Installer;->snapshotAppData(Ljava/lang/String;III)J
 HSPLcom/android/server/pm/InstantAppRegistry$CookiePersistence;-><init>(Lcom/android/server/pm/InstantAppRegistry;Landroid/os/Looper;)V
+PLcom/android/server/pm/InstantAppRegistry$CookiePersistence;->cancelPendingPersistLPw(Landroid/content/pm/parsing/AndroidPackage;I)V
+PLcom/android/server/pm/InstantAppRegistry$CookiePersistence;->removePendingPersistCookieLPr(Landroid/content/pm/parsing/AndroidPackage;I)Lcom/android/internal/os/SomeArgs;
 HSPLcom/android/server/pm/InstantAppRegistry;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+HSPLcom/android/server/pm/InstantAppRegistry;->addInstantAppLPw(II)V
+PLcom/android/server/pm/InstantAppRegistry;->createInstantAppInfoForPackage(Landroid/content/pm/parsing/AndroidPackage;IZ)Landroid/content/pm/InstantAppInfo;
+PLcom/android/server/pm/InstantAppRegistry;->deleteDir(Ljava/io/File;)V
+PLcom/android/server/pm/InstantAppRegistry;->deleteInstantApplicationMetadataLPw(Ljava/lang/String;I)V
 HPLcom/android/server/pm/InstantAppRegistry;->getInstalledInstantApplicationsLPr(I)Ljava/util/List;
-PLcom/android/server/pm/InstantAppRegistry;->getInstantApplicationDir(Ljava/lang/String;I)Ljava/io/File;
-PLcom/android/server/pm/InstantAppRegistry;->getInstantApplicationsDir(I)Ljava/io/File;
+HPLcom/android/server/pm/InstantAppRegistry;->getInstantApplicationDir(Ljava/lang/String;I)Ljava/io/File;
+HPLcom/android/server/pm/InstantAppRegistry;->getInstantApplicationsDir(I)Ljava/io/File;
+PLcom/android/server/pm/InstantAppRegistry;->getInstantAppsLPr(I)Ljava/util/List;
 PLcom/android/server/pm/InstantAppRegistry;->getUninstalledInstantAppStatesLPr(I)Ljava/util/List;
 PLcom/android/server/pm/InstantAppRegistry;->getUninstalledInstantApplicationsLPr(I)Ljava/util/List;
+PLcom/android/server/pm/InstantAppRegistry;->hasInstantAppMetadataLPr(Ljava/lang/String;I)Z
+PLcom/android/server/pm/InstantAppRegistry;->hasInstantApplicationMetadataLPr(Ljava/lang/String;I)Z
+PLcom/android/server/pm/InstantAppRegistry;->hasUninstalledInstantAppStateLPr(Ljava/lang/String;I)Z
 PLcom/android/server/pm/InstantAppRegistry;->isInstantAccessGranted(III)Z
 HPLcom/android/server/pm/InstantAppRegistry;->onPackageInstalledLPw(Landroid/content/pm/parsing/AndroidPackage;[I)V
+HPLcom/android/server/pm/InstantAppRegistry;->onPackageUninstalledLPw(Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/PackageSetting;[I)V
+PLcom/android/server/pm/InstantAppRegistry;->onPackageUninstalledLPw(Landroid/content/pm/parsing/AndroidPackage;[I)V
+PLcom/android/server/pm/InstantAppRegistry;->onUserRemovedLPw(I)V
 PLcom/android/server/pm/InstantAppRegistry;->parseMetadataFile(Ljava/io/File;)Lcom/android/server/pm/InstantAppRegistry$UninstalledInstantAppState;
-PLcom/android/server/pm/InstantAppRegistry;->peekInstantCookieFile(Ljava/lang/String;I)Ljava/io/File;
+HPLcom/android/server/pm/InstantAppRegistry;->peekInstantCookieFile(Ljava/lang/String;I)Ljava/io/File;
 PLcom/android/server/pm/InstantAppRegistry;->peekOrParseUninstalledInstantAppInfo(Ljava/lang/String;I)Landroid/content/pm/InstantAppInfo;
-PLcom/android/server/pm/InstantAppRegistry;->propagateInstantAppPermissionsIfNeeded(Landroid/content/pm/parsing/AndroidPackage;I)V
+HPLcom/android/server/pm/InstantAppRegistry;->propagateInstantAppPermissionsIfNeeded(Landroid/content/pm/parsing/AndroidPackage;I)V
+PLcom/android/server/pm/InstantAppRegistry;->pruneInstalledInstantApps(JJ)Z
 PLcom/android/server/pm/InstantAppRegistry;->pruneInstantApps()V
-PLcom/android/server/pm/InstantAppRegistry;->pruneInstantApps(JJJ)Z
-PLcom/android/server/pm/InstantAppRegistry;->removeUninstalledInstantAppStateLPw(Ljava/util/function/Predicate;I)V
+HPLcom/android/server/pm/InstantAppRegistry;->pruneInstantApps(JJJ)Z
+PLcom/android/server/pm/InstantAppRegistry;->pruneUninstalledInstantApps(JJ)Z
+PLcom/android/server/pm/InstantAppRegistry;->removeAppLPw(II)V
+HPLcom/android/server/pm/InstantAppRegistry;->removeUninstalledInstantAppStateLPw(Ljava/util/function/Predicate;I)V
 PLcom/android/server/pm/InstantAppResolver;-><clinit>()V
-PLcom/android/server/pm/InstantAppResolver;->computeResolveFilters(Landroid/content/Intent;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Landroid/content/pm/InstantAppResolveInfo;)Ljava/util/List;
+HPLcom/android/server/pm/InstantAppResolver;->buildRequestInfo(Landroid/content/pm/InstantAppRequest;)Landroid/content/pm/InstantAppRequestInfo;
+HPLcom/android/server/pm/InstantAppResolver;->computeResolveFilters(Landroid/content/Intent;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Landroid/content/pm/InstantAppResolveInfo;)Ljava/util/List;
 PLcom/android/server/pm/InstantAppResolver;->createFailureIntent(Landroid/content/Intent;Ljava/lang/String;)Landroid/content/Intent;
-PLcom/android/server/pm/InstantAppResolver;->doInstantAppResolutionPhaseOne(Lcom/android/server/pm/InstantAppResolverConnection;Landroid/content/pm/InstantAppRequest;)Landroid/content/pm/AuxiliaryResolveInfo;
+HPLcom/android/server/pm/InstantAppResolver;->doInstantAppResolutionPhaseOne(Lcom/android/server/pm/InstantAppResolverConnection;Landroid/content/pm/InstantAppRequest;)Landroid/content/pm/AuxiliaryResolveInfo;
 PLcom/android/server/pm/InstantAppResolver;->filterInstantAppIntent(Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;ILjava/lang/String;Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest;Ljava/lang/String;)Landroid/content/pm/AuxiliaryResolveInfo;
+HPLcom/android/server/pm/InstantAppResolver;->filterInstantAppIntent(Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;[I)Landroid/content/pm/AuxiliaryResolveInfo;
 PLcom/android/server/pm/InstantAppResolver;->getLogger()Lcom/android/internal/logging/MetricsLogger;
 PLcom/android/server/pm/InstantAppResolver;->logMetrics(IJLjava/lang/String;I)V
-PLcom/android/server/pm/InstantAppResolver;->sanitizeIntent(Landroid/content/Intent;)Landroid/content/Intent;
+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;
 PLcom/android/server/pm/InstantAppResolverConnection$ConnectionException;-><init>(I)V
 HSPLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller$1;-><init>(Lcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;)V
-PLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller$1;->sendResult(Landroid/os/Bundle;)V
+HPLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller$1;->sendResult(Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;-><init>()V
+HPLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;->access$700(Lcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;Ljava/lang/Object;I)V
+HPLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;->getInstantAppResolveInfoList(Landroid/app/IInstantAppResolver;Landroid/content/pm/InstantAppRequestInfo;)Ljava/util/List;
 HSPLcom/android/server/pm/InstantAppResolverConnection$MyServiceConnection;-><init>(Lcom/android/server/pm/InstantAppResolverConnection;)V
 HSPLcom/android/server/pm/InstantAppResolverConnection$MyServiceConnection;-><init>(Lcom/android/server/pm/InstantAppResolverConnection;Lcom/android/server/pm/InstantAppResolverConnection$1;)V
 PLcom/android/server/pm/InstantAppResolverConnection$MyServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/pm/InstantAppResolverConnection$MyServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
 HSPLcom/android/server/pm/InstantAppResolverConnection;-><clinit>()V
 HSPLcom/android/server/pm/InstantAppResolverConnection;-><init>(Landroid/content/Context;Landroid/content/ComponentName;Ljava/lang/String;)V
+PLcom/android/server/pm/InstantAppResolverConnection;->access$100()Z
+PLcom/android/server/pm/InstantAppResolverConnection;->access$200(Lcom/android/server/pm/InstantAppResolverConnection;)Ljava/lang/Object;
+PLcom/android/server/pm/InstantAppResolverConnection;->access$302(Lcom/android/server/pm/InstantAppResolverConnection;Landroid/app/IInstantAppResolver;)Landroid/app/IInstantAppResolver;
+PLcom/android/server/pm/InstantAppResolverConnection;->access$400(Lcom/android/server/pm/InstantAppResolverConnection;)I
+PLcom/android/server/pm/InstantAppResolverConnection;->access$402(Lcom/android/server/pm/InstantAppResolverConnection;I)I
+PLcom/android/server/pm/InstantAppResolverConnection;->access$500(Lcom/android/server/pm/InstantAppResolverConnection;)V
 HSPLcom/android/server/pm/InstantAppResolverConnection;->access$600()J
-PLcom/android/server/pm/InstantAppResolverConnection;->bind(Ljava/lang/String;)Landroid/app/IInstantAppResolver;
+HPLcom/android/server/pm/InstantAppResolverConnection;->bind(Ljava/lang/String;)Landroid/app/IInstantAppResolver;
 PLcom/android/server/pm/InstantAppResolverConnection;->binderDied()V
 PLcom/android/server/pm/InstantAppResolverConnection;->getInstantAppResolveInfoList(Landroid/content/Intent;[IILjava/lang/String;)Ljava/util/List;
-PLcom/android/server/pm/InstantAppResolverConnection;->getRemoteInstanceLazy(Ljava/lang/String;)Landroid/app/IInstantAppResolver;
+HPLcom/android/server/pm/InstantAppResolverConnection;->getInstantAppResolveInfoList(Landroid/content/pm/InstantAppRequestInfo;)Ljava/util/List;
+HPLcom/android/server/pm/InstantAppResolverConnection;->getRemoteInstanceLazy(Ljava/lang/String;)Landroid/app/IInstantAppResolver;
 PLcom/android/server/pm/InstantAppResolverConnection;->handleBinderDiedLocked()V
 PLcom/android/server/pm/InstantAppResolverConnection;->lambda$optimisticBind$0$InstantAppResolverConnection()V
 PLcom/android/server/pm/InstantAppResolverConnection;->optimisticBind()V
-PLcom/android/server/pm/InstantAppResolverConnection;->waitForBindLocked(Ljava/lang/String;)V
+HPLcom/android/server/pm/InstantAppResolverConnection;->throwIfCalledOnMainThread()V
+HPLcom/android/server/pm/InstantAppResolverConnection;->waitForBindLocked(Ljava/lang/String;)V
 HSPLcom/android/server/pm/InstructionSets;-><clinit>()V
 HSPLcom/android/server/pm/InstructionSets;->getAllDexCodeInstructionSets()[Ljava/lang/String;
-HPLcom/android/server/pm/InstructionSets;->getAppDexInstructionSets(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/server/pm/InstructionSets;->getAppDexInstructionSets(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
 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;->getPreferredInstructionSet()Ljava/lang/String;
@@ -14052,7 +23443,7 @@
 PLcom/android/server/pm/IntentFilterVerificationState;-><init>(IILjava/lang/String;)V
 HPLcom/android/server/pm/IntentFilterVerificationState;->addFilter(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;)V
 PLcom/android/server/pm/IntentFilterVerificationState;->getFilters()Ljava/util/ArrayList;
-PLcom/android/server/pm/IntentFilterVerificationState;->getHostsString()Ljava/lang/String;
+HPLcom/android/server/pm/IntentFilterVerificationState;->getHostsString()Ljava/lang/String;
 PLcom/android/server/pm/IntentFilterVerificationState;->getPackageName()Ljava/lang/String;
 PLcom/android/server/pm/IntentFilterVerificationState;->getUserId()I
 PLcom/android/server/pm/IntentFilterVerificationState;->isVerificationComplete()Z
@@ -14060,40 +23451,42 @@
 PLcom/android/server/pm/IntentFilterVerificationState;->setPendingState()V
 PLcom/android/server/pm/IntentFilterVerificationState;->setState(I)V
 PLcom/android/server/pm/IntentFilterVerificationState;->setVerifierResponse(II)Z
-PLcom/android/server/pm/KeySetHandle;-><init>(J)V
+HSPLcom/android/server/pm/KeySetHandle;-><init>(J)V
 HSPLcom/android/server/pm/KeySetHandle;-><init>(JI)V
 HSPLcom/android/server/pm/KeySetHandle;->decrRefCountLPw()I
-PLcom/android/server/pm/KeySetHandle;->getId()J
+HSPLcom/android/server/pm/KeySetHandle;->getId()J
 HSPLcom/android/server/pm/KeySetHandle;->getRefCountLPr()I
-PLcom/android/server/pm/KeySetHandle;->incrRefCountLPw()V
+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$1;)V
-PLcom/android/server/pm/KeySetManagerService$PublicKeyHandle;-><init>(Lcom/android/server/pm/KeySetManagerService;JLjava/security/PublicKey;)V
+HSPLcom/android/server/pm/KeySetManagerService$PublicKeyHandle;-><init>(Lcom/android/server/pm/KeySetManagerService;JLjava/security/PublicKey;)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>(Landroid/util/ArrayMap;)V
 HSPLcom/android/server/pm/KeySetManagerService;->addDefinedKeySetsToPackageLPw(Lcom/android/server/pm/PackageSetting;Ljava/util/Map;)V
-PLcom/android/server/pm/KeySetManagerService;->addKeySetLPw(Landroid/util/ArraySet;)Lcom/android/server/pm/KeySetHandle;
-PLcom/android/server/pm/KeySetManagerService;->addPublicKeyLPw(Ljava/security/PublicKey;)J
+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(Landroid/content/pm/parsing/AndroidPackage;)V
 HSPLcom/android/server/pm/KeySetManagerService;->addSigningKeySetToPackageLPw(Lcom/android/server/pm/PackageSetting;Landroid/util/ArraySet;)V
 HSPLcom/android/server/pm/KeySetManagerService;->assertScannedPackageValid(Landroid/content/pm/parsing/AndroidPackage;)V
+PLcom/android/server/pm/KeySetManagerService;->clearPackageKeySetDataLPw(Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/KeySetManagerService;->decrementKeySetLPw(J)V
 HSPLcom/android/server/pm/KeySetManagerService;->decrementPublicKeyLPw(J)V
-PLcom/android/server/pm/KeySetManagerService;->dumpLPr(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/DumpState;)V
+HPLcom/android/server/pm/KeySetManagerService;->dumpLPr(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/DumpState;)V
 HSPLcom/android/server/pm/KeySetManagerService;->encodePublicKey(Ljava/security/PublicKey;)Ljava/lang/String;
-PLcom/android/server/pm/KeySetManagerService;->getFreeKeySetIDLPw()J
-PLcom/android/server/pm/KeySetManagerService;->getFreePublicKeyIdLPw()J
-PLcom/android/server/pm/KeySetManagerService;->getIdForPublicKeyLPr(Ljava/security/PublicKey;)J
-PLcom/android/server/pm/KeySetManagerService;->getIdFromKeyIdsLPr(Ljava/util/Set;)J
+HSPLcom/android/server/pm/KeySetManagerService;->getFreeKeySetIDLPw()J
+HSPLcom/android/server/pm/KeySetManagerService;->getFreePublicKeyIdLPw()J
+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(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/pm/KeySetManagerService;->readKeySetsLPw(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/ArrayMap;)V
 HSPLcom/android/server/pm/KeySetManagerService;->readKeysLPw(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/pm/KeySetManagerService;->readPublicKeyLPw(Lorg/xmlpull/v1/XmlPullParser;)V
+HPLcom/android/server/pm/KeySetManagerService;->removeAppKeySetDataLPw(Ljava/lang/String;)V
 HSPLcom/android/server/pm/KeySetManagerService;->shouldCheckUpgradeKeySetLocked(Lcom/android/server/pm/PackageSettingBase;I)Z
 HSPLcom/android/server/pm/KeySetManagerService;->writeKeySetManagerServiceLPr(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/pm/KeySetManagerService;->writeKeySetsLPr(Lorg/xmlpull/v1/XmlSerializer;)V
@@ -14101,58 +23494,67 @@
 PLcom/android/server/pm/LauncherAppsService$BroadcastCookie;-><init>(Landroid/os/UserHandle;Ljava/lang/String;II)V
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;-><init>(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;)V
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;-><init>(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$1;)V
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->lambda$onShortcutChanged$0$LauncherAppsService$LauncherAppsImpl$MyPackageMonitor(Ljava/lang/String;I)V
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onPackageAdded(Ljava/lang/String;I)V
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->lambda$onShortcutChanged$0$LauncherAppsService$LauncherAppsImpl$MyPackageMonitor(Ljava/lang/String;I)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onPackageAdded(Ljava/lang/String;I)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onPackageRemoved(Ljava/lang/String;I)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onPackagesSuspended([Ljava/lang/String;)V
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onPackagesUnsuspended([Ljava/lang/String;)V
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onShortcutChanged(Ljava/lang/String;I)V
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onShortcutChangedInner(Ljava/lang/String;I)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onShortcutChangedInner(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageCallbackList;-><init>(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;)V
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageCallbackList;->onCallbackDied(Landroid/os/IInterface;Ljava/lang/Object;)V
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;-><init>(Landroid/content/Context;)V
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->access$100(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;)Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageCallbackList;
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->access$200(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Landroid/os/UserHandle;Landroid/os/UserHandle;Ljava/lang/String;)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->access$100(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;)Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageCallbackList;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->access$200(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Landroid/os/UserHandle;Landroid/os/UserHandle;Ljava/lang/String;)Z
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->access$300(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;)Landroid/content/pm/ShortcutServiceInternal;
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->addOnAppsChangedListener(Ljava/lang/String;Landroid/content/pm/IOnAppsChangedListener;)V
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->canAccessProfile(ILjava/lang/String;)Z
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->checkCallbackCount()V
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->ensureShortcutPermission(Ljava/lang/String;)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->ensureShortcutPermission(Ljava/lang/String;)V
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getAllSessions(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getAppUsageLimit(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/LauncherApps$AppUsageLimit;
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getApplicationInfo(Ljava/lang/String;Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getCallingUserId()I
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getHiddenAppActivityInfo(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getAppUsageLimit(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/LauncherApps$AppUsageLimit;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getApplicationInfo(Ljava/lang/String;Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getCallingUserId()I
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getHiddenAppActivityInfo(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ResolveInfo;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getLauncherActivities(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getPackageInstallerService()Lcom/android/server/pm/PackageInstallerService;
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getShortcutConfigActivities(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getShortcutConfigActivities(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getShortcutIconFd(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Landroid/os/ParcelFileDescriptor;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getShortcuts(Ljava/lang/String;JLjava/lang/String;Ljava/util/List;Landroid/content/ComponentName;ILandroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->hasDefaultEnableLauncherActivity(Ljava/lang/String;)Z
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->hasShortcutHostPermission(Ljava/lang/String;)Z
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectBinderCallingPid()I
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->hasShortcutHostPermission(Ljava/lang/String;)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectBinderCallingPid()I
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectBinderCallingUid()I
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectCallingUserId()I
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectClearCallingIdentity()J
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectRestoreCallingIdentity(J)V
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isActivityEnabled(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectClearCallingIdentity()J
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectRestoreCallingIdentity(J)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isActivityEnabled(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Z
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isEnabledProfileOf(Landroid/os/UserHandle;Landroid/os/UserHandle;Ljava/lang/String;)Z
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isManagedProfileAdmin(Landroid/os/UserHandle;Ljava/lang/String;)Z
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isPackageEnabled(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isManagedProfileAdmin(Landroid/os/UserHandle;Ljava/lang/String;)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isPackageEnabled(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Z
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->lambda$registerPackageInstallerCallback$0$LauncherAppsService$LauncherAppsImpl(Landroid/os/UserHandle;I)Z
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->postToPackageMonitorHandler(Ljava/lang/Runnable;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->pinShortcuts(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->postToPackageMonitorHandler(Ljava/lang/Runnable;)V
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->queryActivitiesForUser(Ljava/lang/String;Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->registerPackageInstallerCallback(Ljava/lang/String;Landroid/content/pm/IPackageInstallerCallback;)V
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->requestsPermissions(Landroid/content/pm/parsing/AndroidPackage;)Z
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->resolveActivity(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->requestsPermissions(Landroid/content/pm/parsing/AndroidPackage;)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->resolveActivity(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Landroid/content/pm/ActivityInfo;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->shouldHideFromSuggestions(Ljava/lang/String;Landroid/os/UserHandle;)Z
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->shouldShowSyntheticActivity(Landroid/os/UserHandle;Landroid/content/pm/ApplicationInfo;)Z
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/ComponentName;Landroid/graphics/Rect;Landroid/os/Bundle;Landroid/os/UserHandle;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->showAppDetailsAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/ComponentName;Landroid/graphics/Rect;Landroid/os/Bundle;Landroid/os/UserHandle;)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/ComponentName;Landroid/graphics/Rect;Landroid/os/Bundle;Landroid/os/UserHandle;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->startSessionDetailsActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/pm/PackageInstaller$SessionInfo;Landroid/graphics/Rect;Landroid/os/Bundle;Landroid/os/UserHandle;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->startShortcut(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;Landroid/os/Bundle;I)Z
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->startShortcutIntentsAsPublisher([Landroid/content/Intent;Ljava/lang/String;Landroid/os/Bundle;I)Z
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->startWatchingPackageBroadcasts()V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->stopWatchingPackageBroadcasts()V
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->verifyCallingPackage(Ljava/lang/String;)V
 HSPLcom/android/server/pm/LauncherAppsService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/LauncherAppsService;->onStart()V
 HSPLcom/android/server/pm/ModuleInfoProvider;-><init>(Landroid/content/Context;Landroid/content/pm/IPackageManager;)V
 HPLcom/android/server/pm/ModuleInfoProvider;->getInstalledModules(I)Ljava/util/List;
+HPLcom/android/server/pm/ModuleInfoProvider;->getModuleInfo(Ljava/lang/String;I)Landroid/content/pm/ModuleInfo;
 PLcom/android/server/pm/ModuleInfoProvider;->getPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/ModuleInfoProvider;->loadModuleMetadata(Landroid/content/res/XmlResourceParser;Landroid/content/res/Resources;)V
 HSPLcom/android/server/pm/ModuleInfoProvider;->systemReady()V
@@ -14176,8 +23578,9 @@
 PLcom/android/server/pm/OtaDexoptService;->performMetricsLogging()V
 HPLcom/android/server/pm/OtaDexoptService;->prepare()V
 PLcom/android/server/pm/OtaDexoptService;->prepareMetricsLogging(IIJJ)V
-PLcom/android/server/pm/OtaDexoptShellCommand;-><init>(Lcom/android/server/pm/OtaDexoptService;)V
+HPLcom/android/server/pm/OtaDexoptShellCommand;-><init>(Lcom/android/server/pm/OtaDexoptService;)V
 HPLcom/android/server/pm/OtaDexoptShellCommand;->onCommand(Ljava/lang/String;)I
+PLcom/android/server/pm/OtaDexoptShellCommand;->runOtaCleanup()I
 PLcom/android/server/pm/OtaDexoptShellCommand;->runOtaDone()I
 PLcom/android/server/pm/OtaDexoptShellCommand;->runOtaNext()I
 PLcom/android/server/pm/OtaDexoptShellCommand;->runOtaPrepare()I
@@ -14199,32 +23602,34 @@
 HSPLcom/android/server/pm/PackageAbiHelperImpl;->getNativeLibraryPaths(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;->maybeThrowExceptionForMultiArchCopy(Ljava/lang/String;I)V
 PLcom/android/server/pm/PackageDexOptimizer$ForcedUpdatePackageDexOptimizer;-><init>(Lcom/android/server/pm/Installer;Ljava/lang/Object;Landroid/content/Context;Ljava/lang/String;)V
+PLcom/android/server/pm/PackageDexOptimizer$ForcedUpdatePackageDexOptimizer;-><init>(Lcom/android/server/pm/PackageDexOptimizer;)V
 PLcom/android/server/pm/PackageDexOptimizer$ForcedUpdatePackageDexOptimizer;->adjustDexoptFlags(I)I
 PLcom/android/server/pm/PackageDexOptimizer$ForcedUpdatePackageDexOptimizer;->adjustDexoptNeeded(I)I
 HSPLcom/android/server/pm/PackageDexOptimizer;-><init>(Lcom/android/server/pm/Installer;Ljava/lang/Object;Landroid/content/Context;Ljava/lang/String;)V
-HPLcom/android/server/pm/PackageDexOptimizer;->acquireWakeLockLI(I)J
-PLcom/android/server/pm/PackageDexOptimizer;->adjustDexoptFlags(I)I
-PLcom/android/server/pm/PackageDexOptimizer;->adjustDexoptNeeded(I)I
-PLcom/android/server/pm/PackageDexOptimizer;->canOptimizePackage(Landroid/content/pm/parsing/AndroidPackage;)Z
-HPLcom/android/server/pm/PackageDexOptimizer;->dexOptPath(Landroid/content/pm/parsing/AndroidPackage;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;IILcom/android/server/pm/CompilerStats$PackageStats;ZLjava/lang/String;Ljava/lang/String;I)I
+PLcom/android/server/pm/PackageDexOptimizer;-><init>(Lcom/android/server/pm/PackageDexOptimizer;)V
+HSPLcom/android/server/pm/PackageDexOptimizer;->acquireWakeLockLI(I)J
+HSPLcom/android/server/pm/PackageDexOptimizer;->adjustDexoptFlags(I)I
+HSPLcom/android/server/pm/PackageDexOptimizer;->adjustDexoptNeeded(I)I
+HSPLcom/android/server/pm/PackageDexOptimizer;->canOptimizePackage(Landroid/content/pm/parsing/AndroidPackage;)Z
+HSPLcom/android/server/pm/PackageDexOptimizer;->dexOptPath(Landroid/content/pm/parsing/AndroidPackage;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;IILcom/android/server/pm/CompilerStats$PackageStats;ZLjava/lang/String;Ljava/lang/String;I)I
 PLcom/android/server/pm/PackageDexOptimizer;->dexOptSecondaryDexPath(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/DexoptOptions;)I
 PLcom/android/server/pm/PackageDexOptimizer;->dexOptSecondaryDexPathLI(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/DexoptOptions;)I
 HPLcom/android/server/pm/PackageDexOptimizer;->dumpDexoptState(Lcom/android/internal/util/IndentingPrintWriter;Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)V
-PLcom/android/server/pm/PackageDexOptimizer;->getAugmentedReasonName(IZ)Ljava/lang/String;
-HPLcom/android/server/pm/PackageDexOptimizer;->getDexFlags(IILandroid/util/SparseArray;ZLjava/lang/String;Lcom/android/server/pm/dex/DexoptOptions;)I
+HSPLcom/android/server/pm/PackageDexOptimizer;->getAugmentedReasonName(IZ)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageDexOptimizer;->getDexFlags(IILandroid/util/SparseArray;ZLjava/lang/String;Lcom/android/server/pm/dex/DexoptOptions;)I
 PLcom/android/server/pm/PackageDexOptimizer;->getDexFlags(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Lcom/android/server/pm/dex/DexoptOptions;)I
-HPLcom/android/server/pm/PackageDexOptimizer;->getDexFlags(Landroid/content/pm/parsing/AndroidPackage;Ljava/lang/String;Lcom/android/server/pm/dex/DexoptOptions;)I
-HPLcom/android/server/pm/PackageDexOptimizer;->getDexoptNeeded(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)I
-PLcom/android/server/pm/PackageDexOptimizer;->getOatDir(Ljava/io/File;)Ljava/io/File;
-HPLcom/android/server/pm/PackageDexOptimizer;->getPackageOatDirIfSupported(Landroid/content/pm/parsing/AndroidPackage;)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageDexOptimizer;->getDexFlags(Landroid/content/pm/parsing/AndroidPackage;Ljava/lang/String;Lcom/android/server/pm/dex/DexoptOptions;)I
+HSPLcom/android/server/pm/PackageDexOptimizer;->getDexoptNeeded(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)I
+HSPLcom/android/server/pm/PackageDexOptimizer;->getOatDir(Ljava/io/File;)Ljava/io/File;
+HSPLcom/android/server/pm/PackageDexOptimizer;->getPackageOatDirIfSupported(Landroid/content/pm/parsing/AndroidPackage;)Ljava/lang/String;
 PLcom/android/server/pm/PackageDexOptimizer;->getRealCompilerFilter(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Z)Ljava/lang/String;
-HPLcom/android/server/pm/PackageDexOptimizer;->getRealCompilerFilter(Landroid/content/pm/parsing/AndroidPackage;Ljava/lang/String;Z)Ljava/lang/String;
-PLcom/android/server/pm/PackageDexOptimizer;->isAppImageEnabled()Z
+HSPLcom/android/server/pm/PackageDexOptimizer;->getRealCompilerFilter(Landroid/content/pm/parsing/AndroidPackage;Ljava/lang/String;Z)Ljava/lang/String;
+HPLcom/android/server/pm/PackageDexOptimizer;->isAppImageEnabled()Z
 HPLcom/android/server/pm/PackageDexOptimizer;->isProfileUpdated(Landroid/content/pm/parsing/AndroidPackage;ILjava/lang/String;Ljava/lang/String;)Z
-HPLcom/android/server/pm/PackageDexOptimizer;->performDexOpt(Landroid/content/pm/parsing/AndroidPackage;[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(Landroid/content/pm/parsing/AndroidPackage;[Ljava/lang/String;Lcom/android/server/pm/CompilerStats$PackageStats;Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Lcom/android/server/pm/dex/DexoptOptions;)I
-PLcom/android/server/pm/PackageDexOptimizer;->printDexoptFlags(I)Ljava/lang/String;
-PLcom/android/server/pm/PackageDexOptimizer;->releaseWakeLockLI(J)V
+HSPLcom/android/server/pm/PackageDexOptimizer;->performDexOpt(Landroid/content/pm/parsing/AndroidPackage;[Ljava/lang/String;Lcom/android/server/pm/CompilerStats$PackageStats;Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Lcom/android/server/pm/dex/DexoptOptions;)I
+HSPLcom/android/server/pm/PackageDexOptimizer;->performDexOptLI(Landroid/content/pm/parsing/AndroidPackage;[Ljava/lang/String;Lcom/android/server/pm/CompilerStats$PackageStats;Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Lcom/android/server/pm/dex/DexoptOptions;)I
+HSPLcom/android/server/pm/PackageDexOptimizer;->printDexoptFlags(I)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageDexOptimizer;->releaseWakeLockLI(J)V
 HSPLcom/android/server/pm/PackageDexOptimizer;->systemReady()V
 HSPLcom/android/server/pm/PackageInstallerService$1;-><init>()V
 HSPLcom/android/server/pm/PackageInstallerService$1;->accept(Ljava/io/File;Ljava/lang/String;)Z
@@ -14233,152 +23638,271 @@
 HSPLcom/android/server/pm/PackageInstallerService$Callbacks;-><init>(Landroid/os/Looper;)V
 PLcom/android/server/pm/PackageInstallerService$Callbacks;->access$200(Lcom/android/server/pm/PackageInstallerService$Callbacks;II)V
 PLcom/android/server/pm/PackageInstallerService$Callbacks;->access$500(Lcom/android/server/pm/PackageInstallerService$Callbacks;II)V
-PLcom/android/server/pm/PackageInstallerService$Callbacks;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/pm/PackageInstallerService$Callbacks;->invokeCallback(Landroid/content/pm/IPackageInstallerCallback;Landroid/os/Message;)V
-PLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionBadgingChanged(II)V
+PLcom/android/server/pm/PackageInstallerService$Callbacks;->access$700(Lcom/android/server/pm/PackageInstallerService$Callbacks;IIZ)V
+HPLcom/android/server/pm/PackageInstallerService$Callbacks;->access$800(Lcom/android/server/pm/PackageInstallerService$Callbacks;IIF)V
+HPLcom/android/server/pm/PackageInstallerService$Callbacks;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/pm/PackageInstallerService$Callbacks;->invokeCallback(Landroid/content/pm/IPackageInstallerCallback;Landroid/os/Message;)V
+HPLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionActiveChanged(IIZ)V
+HPLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionBadgingChanged(II)V
+PLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionCreated(II)V
+PLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionFinished(IIZ)V
+HPLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionProgressChanged(IIF)V
 HSPLcom/android/server/pm/PackageInstallerService$Callbacks;->register(Landroid/content/pm/IPackageInstallerCallback;Ljava/util/function/IntPredicate;)V
+PLcom/android/server/pm/PackageInstallerService$Callbacks;->unregister(Landroid/content/pm/IPackageInstallerCallback;)V
 PLcom/android/server/pm/PackageInstallerService$InternalCallback$1;-><init>(Lcom/android/server/pm/PackageInstallerService$InternalCallback;Lcom/android/server/pm/PackageInstallerSession;Z)V
-PLcom/android/server/pm/PackageInstallerService$InternalCallback$1;->run()V
+HPLcom/android/server/pm/PackageInstallerService$InternalCallback$1;->run()V
 HSPLcom/android/server/pm/PackageInstallerService$InternalCallback;-><init>(Lcom/android/server/pm/PackageInstallerService;)V
+PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionActiveChanged(Lcom/android/server/pm/PackageInstallerSession;Z)V
 PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionBadgingChanged(Lcom/android/server/pm/PackageInstallerSession;)V
 PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionFinished(Lcom/android/server/pm/PackageInstallerSession;Z)V
+PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionPrepared(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionProgressChanged(Lcom/android/server/pm/PackageInstallerSession;F)V
 PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionSealedBlocking(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onStagedSessionChanged(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerService$PackageDeleteObserverAdapter;-><init>(Landroid/content/Context;Landroid/content/IntentSender;Ljava/lang/String;ZI)V
+PLcom/android/server/pm/PackageInstallerService$PackageDeleteObserverAdapter;->onPackageDeleted(Ljava/lang/String;ILjava/lang/String;)V
 HSPLcom/android/server/pm/PackageInstallerService;-><clinit>()V
+HSPLcom/android/server/pm/PackageInstallerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageInstallerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/ApexManager;)V
 PLcom/android/server/pm/PackageInstallerService;->abandonSession(I)V
+PLcom/android/server/pm/PackageInstallerService;->access$000(Lcom/android/server/pm/PackageInstallerService;)Landroid/util/SparseArray;
+HPLcom/android/server/pm/PackageInstallerService;->access$100(Lcom/android/server/pm/PackageInstallerService;)V
+PLcom/android/server/pm/PackageInstallerService;->access$1000(Lcom/android/server/pm/PackageInstallerService;)Lcom/android/server/pm/PackageManagerService;
+PLcom/android/server/pm/PackageInstallerService;->access$1100(Lcom/android/server/pm/PackageInstallerService;)Lcom/android/server/pm/StagingManager;
+PLcom/android/server/pm/PackageInstallerService;->access$1200(Lcom/android/server/pm/PackageInstallerService;Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerService;->access$1300(Lcom/android/server/pm/PackageInstallerService;I)Ljava/io/File;
+PLcom/android/server/pm/PackageInstallerService;->access$1400(Lcom/android/server/pm/PackageInstallerService;)Landroid/os/Handler;
 PLcom/android/server/pm/PackageInstallerService;->access$400(Lcom/android/server/pm/PackageInstallerService;)Lcom/android/server/pm/PackageInstallerService$Callbacks;
 PLcom/android/server/pm/PackageInstallerService;->access$600(Lcom/android/server/pm/PackageInstallerService;)V
-PLcom/android/server/pm/PackageInstallerService;->addHistoricalSessionLocked(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerService;->access$900(Lcom/android/server/pm/PackageInstallerService;)Z
+HPLcom/android/server/pm/PackageInstallerService;->addHistoricalSessionLocked(Lcom/android/server/pm/PackageInstallerSession;)V
 PLcom/android/server/pm/PackageInstallerService;->allocateSessionIdLocked()I
-PLcom/android/server/pm/PackageInstallerService;->buildAppIconFile(I)Ljava/io/File;
+HSPLcom/android/server/pm/PackageInstallerService;->buildAppIconFile(I)Ljava/io/File;
 PLcom/android/server/pm/PackageInstallerService;->buildSessionDir(ILandroid/content/pm/PackageInstaller$SessionParams;)Ljava/io/File;
-PLcom/android/server/pm/PackageInstallerService;->buildTmpSessionDir(ILjava/lang/String;)Ljava/io/File;
+HPLcom/android/server/pm/PackageInstallerService;->buildTmpSessionDir(ILjava/lang/String;)Ljava/io/File;
 PLcom/android/server/pm/PackageInstallerService;->createSession(Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;I)I
-PLcom/android/server/pm/PackageInstallerService;->createSessionInternal(Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;I)I
-PLcom/android/server/pm/PackageInstallerService;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/pm/PackageInstallerService;->getAllSessions(I)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/pm/PackageInstallerService;->getMySessions(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/pm/PackageInstallerService;->getSessionCount(Landroid/util/SparseArray;I)I
-PLcom/android/server/pm/PackageInstallerService;->getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;
+HPLcom/android/server/pm/PackageInstallerService;->createSessionInternal(Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;I)I
+HPLcom/android/server/pm/PackageInstallerService;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/pm/PackageInstallerService;->getAllSessions(I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/PackageInstallerService;->getMySessions(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLcom/android/server/pm/PackageInstallerService;->getSession(I)Lcom/android/server/pm/PackageInstallerSession;
+HPLcom/android/server/pm/PackageInstallerService;->getSessionCount(Landroid/util/SparseArray;I)I
+HPLcom/android/server/pm/PackageInstallerService;->getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;
 PLcom/android/server/pm/PackageInstallerService;->getStagedSessions()Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/PackageInstallerService;->getTmpSessionDir(Ljava/lang/String;)Ljava/io/File;
+PLcom/android/server/pm/PackageInstallerService;->installExistingPackage(Ljava/lang/String;IILandroid/content/IntentSender;ILjava/util/List;)V
 PLcom/android/server/pm/PackageInstallerService;->isCallingUidOwner(Lcom/android/server/pm/PackageInstallerSession;)Z
 HSPLcom/android/server/pm/PackageInstallerService;->isStageName(Ljava/lang/String;)Z
+PLcom/android/server/pm/PackageInstallerService;->lambda$registerCallback$0(II)Z
 HSPLcom/android/server/pm/PackageInstallerService;->newArraySet([Ljava/lang/Object;)Landroid/util/ArraySet;
+PLcom/android/server/pm/PackageInstallerService;->okToSendBroadcasts()Z
 PLcom/android/server/pm/PackageInstallerService;->openSession(I)Landroid/content/pm/IPackageInstallerSession;
 PLcom/android/server/pm/PackageInstallerService;->openSessionInternal(I)Landroid/content/pm/IPackageInstallerSession;
-PLcom/android/server/pm/PackageInstallerService;->prepareStageDir(Ljava/io/File;)V
+HPLcom/android/server/pm/PackageInstallerService;->prepareStageDir(Ljava/io/File;)V
 HSPLcom/android/server/pm/PackageInstallerService;->readSessionsLocked()V
 HSPLcom/android/server/pm/PackageInstallerService;->reconcileStagesLocked(Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageInstallerService;->registerCallback(Landroid/content/pm/IPackageInstallerCallback;I)V
 HSPLcom/android/server/pm/PackageInstallerService;->registerCallback(Landroid/content/pm/IPackageInstallerCallback;Ljava/util/function/IntPredicate;)V
 HSPLcom/android/server/pm/PackageInstallerService;->restoreAndApplyStagedSessionIfNeeded()V
 HPLcom/android/server/pm/PackageInstallerService;->sendOnPackageInstalled(Landroid/content/Context;Landroid/content/IntentSender;IZILjava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageInstallerService;->sendOnUserActionRequired(Landroid/content/Context;Landroid/content/IntentSender;ILandroid/content/Intent;)V
+PLcom/android/server/pm/PackageInstallerService;->setPermissionsResult(IZ)V
 HSPLcom/android/server/pm/PackageInstallerService;->systemReady()V
+HPLcom/android/server/pm/PackageInstallerService;->uninstall(Landroid/content/pm/VersionedPackage;Ljava/lang/String;ILandroid/content/IntentSender;I)V
+PLcom/android/server/pm/PackageInstallerService;->unregisterCallback(Landroid/content/pm/IPackageInstallerCallback;)V
 PLcom/android/server/pm/PackageInstallerService;->updateSessionAppIcon(ILandroid/graphics/Bitmap;)V
-PLcom/android/server/pm/PackageInstallerService;->updateSessionAppLabel(ILjava/lang/String;)V
+HPLcom/android/server/pm/PackageInstallerService;->updateSessionAppLabel(ILjava/lang/String;)V
 PLcom/android/server/pm/PackageInstallerService;->writeSessionsAsync()V
 HSPLcom/android/server/pm/PackageInstallerService;->writeSessionsLocked()V
-PLcom/android/server/pm/PackageInstallerSession$1;-><init>()V
-PLcom/android/server/pm/PackageInstallerSession$1;->accept(Ljava/io/File;)Z
-PLcom/android/server/pm/PackageInstallerSession$2;-><init>()V
+HSPLcom/android/server/pm/PackageInstallerSession$1;-><init>()V
+HSPLcom/android/server/pm/PackageInstallerSession$1;->accept(Ljava/io/File;)Z
+HSPLcom/android/server/pm/PackageInstallerSession$2;-><init>()V
 PLcom/android/server/pm/PackageInstallerSession$2;->accept(Ljava/io/File;)Z
-PLcom/android/server/pm/PackageInstallerSession$3;-><init>(Lcom/android/server/pm/PackageInstallerSession;)V
+HSPLcom/android/server/pm/PackageInstallerSession$3;-><init>()V
+HSPLcom/android/server/pm/PackageInstallerSession$3;-><init>(Lcom/android/server/pm/PackageInstallerSession;)V
+HPLcom/android/server/pm/PackageInstallerSession$3;->accept(Ljava/io/File;)Z
 PLcom/android/server/pm/PackageInstallerSession$3;->handleMessage(Landroid/os/Message;)Z
-PLcom/android/server/pm/PackageInstallerSession$4;-><init>(Lcom/android/server/pm/PackageInstallerSession;)V
+HSPLcom/android/server/pm/PackageInstallerSession$4;-><init>(Lcom/android/server/pm/PackageInstallerSession;)V
+HPLcom/android/server/pm/PackageInstallerSession$4;->handleMessage(Landroid/os/Message;)Z
 PLcom/android/server/pm/PackageInstallerSession$4;->onPackageInstalled(Ljava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V
-PLcom/android/server/pm/PackageInstallerSession;-><clinit>()V
+PLcom/android/server/pm/PackageInstallerSession$5;-><init>(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerSession$5;->onPackageInstalled(Ljava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageInstallerSession$ChildStatusIntentReceiver$1;-><init>(Lcom/android/server/pm/PackageInstallerSession$ChildStatusIntentReceiver;)V
+PLcom/android/server/pm/PackageInstallerSession$ChildStatusIntentReceiver$1;->send(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageInstallerSession$ChildStatusIntentReceiver;-><init>(Lcom/android/server/pm/PackageInstallerSession;Landroid/util/SparseIntArray;Landroid/content/IntentSender;)V
+PLcom/android/server/pm/PackageInstallerSession$ChildStatusIntentReceiver;-><init>(Lcom/android/server/pm/PackageInstallerSession;Landroid/util/SparseIntArray;Landroid/content/IntentSender;Lcom/android/server/pm/PackageInstallerSession$1;)V
+PLcom/android/server/pm/PackageInstallerSession$ChildStatusIntentReceiver;->getIntentSender()Landroid/content/IntentSender;
+PLcom/android/server/pm/PackageInstallerSession$ChildStatusIntentReceiver;->lambda$statusUpdate$0$PackageInstallerSession$ChildStatusIntentReceiver(Landroid/content/Intent;)V
+PLcom/android/server/pm/PackageInstallerSession$ChildStatusIntentReceiver;->statusUpdate(Landroid/content/Intent;)V
+HSPLcom/android/server/pm/PackageInstallerSession;-><clinit>()V
 HPLcom/android/server/pm/PackageInstallerSession;-><init>(Lcom/android/server/pm/PackageInstallerService$InternalCallback;Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSessionProvider;Landroid/os/Looper;Lcom/android/server/pm/StagingManager;IIILcom/android/server/pm/InstallSource;Landroid/content/pm/PackageInstaller$SessionParams;JLjava/io/File;Ljava/lang/String;ZZZ[IIZZZILjava/lang/String;)V
+HSPLcom/android/server/pm/PackageInstallerSession;-><init>(Lcom/android/server/pm/PackageInstallerService$InternalCallback;Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSessionProvider;Landroid/os/Looper;Lcom/android/server/pm/StagingManager;IIILcom/android/server/pm/InstallSource;Landroid/content/pm/PackageInstaller$SessionParams;JLjava/io/File;Ljava/lang/String;[Lcom/android/server/pm/PackageInstallerSession$FileInfo;ZZZ[IIZZZILjava/lang/String;)V
 PLcom/android/server/pm/PackageInstallerSession;->abandon()V
+PLcom/android/server/pm/PackageInstallerSession;->access$000(Lcom/android/server/pm/PackageInstallerSession;)V
 PLcom/android/server/pm/PackageInstallerSession;->access$000(Lcom/android/server/pm/PackageInstallerSession;Landroid/content/IntentSender;)V
 PLcom/android/server/pm/PackageInstallerSession;->access$100(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerSession;->access$200(Lcom/android/server/pm/PackageInstallerSession;)Landroid/content/Context;
+PLcom/android/server/pm/PackageInstallerSession;->access$200(Lcom/android/server/pm/PackageInstallerSession;)V
 PLcom/android/server/pm/PackageInstallerSession;->access$300(Lcom/android/server/pm/PackageInstallerSession;)Landroid/content/Context;
+PLcom/android/server/pm/PackageInstallerSession;->access$300(Lcom/android/server/pm/PackageInstallerSession;)Z
 PLcom/android/server/pm/PackageInstallerSession;->access$400(Lcom/android/server/pm/PackageInstallerSession;)Z
+PLcom/android/server/pm/PackageInstallerSession;->access$600(Lcom/android/server/pm/PackageInstallerSession;)Landroid/os/Handler;
+PLcom/android/server/pm/PackageInstallerSession;->access$700(Lcom/android/server/pm/PackageInstallerSession;)Landroid/os/Handler;
 PLcom/android/server/pm/PackageInstallerSession;->access$700(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerSession;->access$800(Lcom/android/server/pm/PackageInstallerSession;)V
 PLcom/android/server/pm/PackageInstallerSession;->access$800(Lcom/android/server/pm/PackageInstallerSession;ILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageInstallerSession;->access$900(Lcom/android/server/pm/PackageInstallerSession;ILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageInstallerSession;->addChildSessionId(I)V
+PLcom/android/server/pm/PackageInstallerSession;->addChildSessionIdInternal(I)V
+PLcom/android/server/pm/PackageInstallerSession;->addClientProgress(F)V
 PLcom/android/server/pm/PackageInstallerSession;->assertApkConsistentLocked(Ljava/lang/String;Landroid/content/pm/PackageParser$ApkLite;)V
-PLcom/android/server/pm/PackageInstallerSession;->assertCallerIsOwnerOrRootLocked()V
+HPLcom/android/server/pm/PackageInstallerSession;->assertCallerIsOwnerOrRootLocked()V
 HPLcom/android/server/pm/PackageInstallerSession;->assertCanBeCommitted(Z)V
-PLcom/android/server/pm/PackageInstallerSession;->assertNoWriteFileTransfersOpenLocked()V
+PLcom/android/server/pm/PackageInstallerSession;->assertCanWrite(Z)V
+HSPLcom/android/server/pm/PackageInstallerSession;->assertConsistencyWithLocked(Lcom/android/server/pm/PackageInstallerSession;)V
+HSPLcom/android/server/pm/PackageInstallerSession;->assertMultiPackageConsistencyLocked(Ljava/util/List;)V
+HSPLcom/android/server/pm/PackageInstallerSession;->assertNoWriteFileTransfersOpenLocked()V
 PLcom/android/server/pm/PackageInstallerSession;->assertPreparedAndNotCommittedOrDestroyedLocked(Ljava/lang/String;)V
-PLcom/android/server/pm/PackageInstallerSession;->assertPreparedAndNotDestroyedLocked(Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageInstallerSession;->assertPreparedAndNotDestroyedLocked(Ljava/lang/String;)V
 PLcom/android/server/pm/PackageInstallerSession;->assertPreparedAndNotSealedLocked(Ljava/lang/String;)V
-HPLcom/android/server/pm/PackageInstallerSession;->buildAppIconFile(ILjava/io/File;)Ljava/io/File;
+PLcom/android/server/pm/PackageInstallerSession;->assertShellOrSystemCalling(Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageInstallerSession;->buildAppIconFile(ILjava/io/File;)Ljava/io/File;
+PLcom/android/server/pm/PackageInstallerSession;->cleanStageDir()V
 PLcom/android/server/pm/PackageInstallerSession;->close()V
 PLcom/android/server/pm/PackageInstallerSession;->closeInternal(Z)V
 PLcom/android/server/pm/PackageInstallerSession;->commit(Landroid/content/IntentSender;Z)V
 PLcom/android/server/pm/PackageInstallerSession;->commitNonStagedLocked(Ljava/util/List;)V
-PLcom/android/server/pm/PackageInstallerSession;->computeProgressLocked(Z)V
-PLcom/android/server/pm/PackageInstallerSession;->destroyInternal()V
-PLcom/android/server/pm/PackageInstallerSession;->dispatchSessionFinished(ILjava/lang/String;Landroid/os/Bundle;)V
-PLcom/android/server/pm/PackageInstallerSession;->doWriteInternal(Ljava/lang/String;JJLandroid/os/ParcelFileDescriptor;)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/pm/PackageInstallerSession;->computeProgressLocked(Z)V
+PLcom/android/server/pm/PackageInstallerSession;->createOatDirs(Ljava/util/List;Ljava/io/File;)V
+HPLcom/android/server/pm/PackageInstallerSession;->destroyInternal()V
+HPLcom/android/server/pm/PackageInstallerSession;->dispatchSessionFinished(ILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageInstallerSession;->dispatchStreamAndValidate()V
+PLcom/android/server/pm/PackageInstallerSession;->dispatchStreamValidateAndCommit()V
+HPLcom/android/server/pm/PackageInstallerSession;->doWriteInternal(Ljava/lang/String;JJLandroid/os/ParcelFileDescriptor;)Landroid/os/ParcelFileDescriptor;
 PLcom/android/server/pm/PackageInstallerSession;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/pm/PackageInstallerSession;->dumpLocked(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/pm/PackageInstallerSession;->dumpLocked(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/pm/PackageInstallerSession;->extractNativeLibraries(Ljava/io/File;Ljava/lang/String;Z)V
-PLcom/android/server/pm/PackageInstallerSession;->filterFiles(Ljava/io/File;[Ljava/lang/String;Ljava/io/FileFilter;)[Ljava/io/File;
+HPLcom/android/server/pm/PackageInstallerSession;->filterFiles(Ljava/io/File;[Ljava/lang/String;Ljava/io/FileFilter;)Ljava/util/ArrayList;
+HSPLcom/android/server/pm/PackageInstallerSession;->filterFiles(Ljava/io/File;[Ljava/lang/String;Ljava/io/FileFilter;)[Ljava/io/File;
 PLcom/android/server/pm/PackageInstallerSession;->generateInfo()Landroid/content/pm/PackageInstaller$SessionInfo;
-PLcom/android/server/pm/PackageInstallerSession;->generateInfo(Z)Landroid/content/pm/PackageInstaller$SessionInfo;
+HPLcom/android/server/pm/PackageInstallerSession;->generateInfo(Z)Landroid/content/pm/PackageInstaller$SessionInfo;
+PLcom/android/server/pm/PackageInstallerSession;->getAddedApksLocked()Ljava/util/List;
+HSPLcom/android/server/pm/PackageInstallerSession;->getAddedApksLocked()[Ljava/io/File;
 PLcom/android/server/pm/PackageInstallerSession;->getAddedFilesLocked()[Ljava/io/File;
-PLcom/android/server/pm/PackageInstallerSession;->getChildSessionIds()[I
-PLcom/android/server/pm/PackageInstallerSession;->getChildSessions()Ljava/util/List;
-PLcom/android/server/pm/PackageInstallerSession;->getInstallerUid()I
+HSPLcom/android/server/pm/PackageInstallerSession;->getChildSessionIds()[I
+HSPLcom/android/server/pm/PackageInstallerSession;->getChildSessions()Ljava/util/List;
+PLcom/android/server/pm/PackageInstallerSession;->getInstallSource()Lcom/android/server/pm/InstallSource;
+PLcom/android/server/pm/PackageInstallerSession;->getInstallerPackageName()Ljava/lang/String;
+HPLcom/android/server/pm/PackageInstallerSession;->getInstallerUid()I
 PLcom/android/server/pm/PackageInstallerSession;->getNames()[Ljava/lang/String;
-HPLcom/android/server/pm/PackageInstallerSession;->getNamesLocked()[Ljava/lang/String;
+HSPLcom/android/server/pm/PackageInstallerSession;->getNamesLocked()[Ljava/lang/String;
+HPLcom/android/server/pm/PackageInstallerSession;->getPackageName()Ljava/lang/String;
+HSPLcom/android/server/pm/PackageInstallerSession;->getParentSessionId()I
+PLcom/android/server/pm/PackageInstallerSession;->getRelativePath(Ljava/io/File;Ljava/io/File;)Ljava/lang/String;
+PLcom/android/server/pm/PackageInstallerSession;->getRemovedFilesLocked()Ljava/util/List;
 PLcom/android/server/pm/PackageInstallerSession;->getRemovedFilesLocked()[Ljava/io/File;
-PLcom/android/server/pm/PackageInstallerSession;->getUpdatedMillis()J
+HSPLcom/android/server/pm/PackageInstallerSession;->getUpdatedMillis()J
 PLcom/android/server/pm/PackageInstallerSession;->handleCommit()V
+PLcom/android/server/pm/PackageInstallerSession;->handleInstall()V
 PLcom/android/server/pm/PackageInstallerSession;->handleSeal(Landroid/content/IntentSender;)V
-PLcom/android/server/pm/PackageInstallerSession;->hasParentSessionId()Z
-PLcom/android/server/pm/PackageInstallerSession;->isCommitted()Z
-PLcom/android/server/pm/PackageInstallerSession;->isInstallerDeviceOwnerOrAffiliatedProfileOwnerLocked()Z
-PLcom/android/server/pm/PackageInstallerSession;->isMultiPackage()Z
-PLcom/android/server/pm/PackageInstallerSession;->isPrepared()Z
-PLcom/android/server/pm/PackageInstallerSession;->isSealed()Z
-PLcom/android/server/pm/PackageInstallerSession;->isStaged()Z
-PLcom/android/server/pm/PackageInstallerSession;->isStagedAndInTerminalState()Z
-PLcom/android/server/pm/PackageInstallerSession;->isStagedSessionStateValid(ZZZ)Z
+PLcom/android/server/pm/PackageInstallerSession;->handleStreamAndValidate()V
+PLcom/android/server/pm/PackageInstallerSession;->handleStreamValidateAndCommit()V
+HSPLcom/android/server/pm/PackageInstallerSession;->hasParentSessionId()Z
+PLcom/android/server/pm/PackageInstallerSession;->installNonStagedLocked(Ljava/util/List;)V
+HSPLcom/android/server/pm/PackageInstallerSession;->isApexInstallation()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->isCommitted()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->isDataLoaderInstallation()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->isIncrementalInstallation()Z
+HPLcom/android/server/pm/PackageInstallerSession;->isInstallerDeviceOwnerOrAffiliatedProfileOwnerLocked()Z
+PLcom/android/server/pm/PackageInstallerSession;->isLinkPossible(Ljava/util/List;Ljava/io/File;)Z
+HSPLcom/android/server/pm/PackageInstallerSession;->isMultiPackage()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->isPrepared()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->isSealed()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->isStaged()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->isStagedAndInTerminalState()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->isStagedSessionApplied()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->isStagedSessionFailed()Z
+PLcom/android/server/pm/PackageInstallerSession;->isStagedSessionReady()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->isStagedSessionStateValid(ZZZ)Z
+HSPLcom/android/server/pm/PackageInstallerSession;->isStreamingInstallation()Z
+PLcom/android/server/pm/PackageInstallerSession;->lambda$doWriteInternal$0$PackageInstallerSession(Landroid/system/Int64Ref;J)V
+HPLcom/android/server/pm/PackageInstallerSession;->lambda$doWriteInternal$5$PackageInstallerSession(Landroid/system/Int64Ref;J)V
 PLcom/android/server/pm/PackageInstallerSession;->lambda$filterFiles$0(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
 PLcom/android/server/pm/PackageInstallerSession;->lambda$filterFiles$1(Ljava/io/FileFilter;Ljava/io/File;)Z
 PLcom/android/server/pm/PackageInstallerSession;->lambda$filterFiles$2(I)[Ljava/io/File;
-PLcom/android/server/pm/PackageInstallerSession;->makeSessionActiveLocked()Lcom/android/server/pm/PackageManagerService$ActiveInstallSession;
+HSPLcom/android/server/pm/PackageInstallerSession;->lambda$filterFiles$2(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
+HSPLcom/android/server/pm/PackageInstallerSession;->lambda$filterFiles$3(Ljava/io/FileFilter;Ljava/io/File;)Z
+HSPLcom/android/server/pm/PackageInstallerSession;->lambda$filterFiles$4(I)[Ljava/io/File;
+PLcom/android/server/pm/PackageInstallerSession;->lambda$readFromXml$10(I)[Ljava/lang/String;
+HSPLcom/android/server/pm/PackageInstallerSession;->lambda$readFromXml$11(Ljava/lang/Integer;)I
+PLcom/android/server/pm/PackageInstallerSession;->linkFiles(Ljava/util/List;Ljava/io/File;Ljava/io/File;)V
+HPLcom/android/server/pm/PackageInstallerSession;->makeSessionActiveLocked()Lcom/android/server/pm/PackageManagerService$ActiveInstallSession;
+PLcom/android/server/pm/PackageInstallerSession;->markAsCommitted()Z
 PLcom/android/server/pm/PackageInstallerSession;->markAsCommitted(Landroid/content/IntentSender;)Z
+PLcom/android/server/pm/PackageInstallerSession;->markAsSealed(Landroid/content/IntentSender;)Z
+PLcom/android/server/pm/PackageInstallerSession;->markAsSealed(Landroid/content/IntentSender;Z)Z
+PLcom/android/server/pm/PackageInstallerSession;->markUpdated()V
 PLcom/android/server/pm/PackageInstallerSession;->mayInheritNativeLibs()Z
-PLcom/android/server/pm/PackageInstallerSession;->maybeRenameFile(Ljava/io/File;Ljava/io/File;)V
-PLcom/android/server/pm/PackageInstallerSession;->needToAskForPermissionsLocked()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->maybeRenameFile(Ljava/io/File;Ljava/io/File;)V
+HPLcom/android/server/pm/PackageInstallerSession;->needToAskForPermissionsLocked()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->onAfterSessionRead()V
 PLcom/android/server/pm/PackageInstallerSession;->open()V
 PLcom/android/server/pm/PackageInstallerSession;->openWrite(Ljava/lang/String;JJ)Landroid/os/ParcelFileDescriptor;
-PLcom/android/server/pm/PackageInstallerSession;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/PackageInstallerService$InternalCallback;Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Landroid/os/Looper;Lcom/android/server/pm/StagingManager;Ljava/io/File;Lcom/android/server/pm/PackageSessionProvider;)Lcom/android/server/pm/PackageInstallerSession;
-PLcom/android/server/pm/PackageInstallerSession;->resolveAndStageFile(Ljava/io/File;Ljava/io/File;)V
-PLcom/android/server/pm/PackageInstallerSession;->sealAndValidateIfNecessary()V
-PLcom/android/server/pm/PackageInstallerSession;->sealAndValidateLocked(Ljava/util/List;)V
+PLcom/android/server/pm/PackageInstallerSession;->prepareDataLoader()V
+PLcom/android/server/pm/PackageInstallerSession;->prepareDataLoaderLocked()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/PackageInstallerService$InternalCallback;Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Landroid/os/Looper;Lcom/android/server/pm/StagingManager;Ljava/io/File;Lcom/android/server/pm/PackageSessionProvider;)Lcom/android/server/pm/PackageInstallerSession;
+HSPLcom/android/server/pm/PackageInstallerSession;->resolveAndStageFile(Ljava/io/File;Ljava/io/File;)V
+PLcom/android/server/pm/PackageInstallerSession;->resolveInheritedFile(Ljava/io/File;)V
+HSPLcom/android/server/pm/PackageInstallerSession;->sealAndValidateIfNecessary()V
+HSPLcom/android/server/pm/PackageInstallerSession;->sealAndValidateLocked(Ljava/util/List;)V
+PLcom/android/server/pm/PackageInstallerSession;->sealIfNecessary()V
+HSPLcom/android/server/pm/PackageInstallerSession;->sealLocked(Ljava/util/List;)V
 PLcom/android/server/pm/PackageInstallerSession;->setClientProgress(F)V
-PLcom/android/server/pm/PackageInstallerSession;->validateApkInstallLocked(Landroid/content/pm/PackageInfo;)V
-PLcom/android/server/pm/PackageInstallerSession;->write(Lorg/xmlpull/v1/XmlSerializer;Ljava/io/File;)V
-HPLcom/android/server/pm/PackageInstallerSession;->writeGrantedRuntimePermissionsLocked(Lorg/xmlpull/v1/XmlSerializer;[Ljava/lang/String;)V
-HPLcom/android/server/pm/PackageInstallerSession;->writeWhitelistedRestrictedPermissionsLocked(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;)V
+HPLcom/android/server/pm/PackageInstallerSession;->setClientProgressLocked(F)V
+PLcom/android/server/pm/PackageInstallerSession;->setParentSessionId(I)V
+PLcom/android/server/pm/PackageInstallerSession;->setPermissionsResult(Z)V
+PLcom/android/server/pm/PackageInstallerSession;->setStagedSessionApplied()V
+PLcom/android/server/pm/PackageInstallerSession;->setStagedSessionFailed(ILjava/lang/String;)V
+PLcom/android/server/pm/PackageInstallerSession;->setStagedSessionReady()V
+HSPLcom/android/server/pm/PackageInstallerSession;->streamAndValidateLocked()V
+PLcom/android/server/pm/PackageInstallerSession;->streamAndValidateLocked()Z
+PLcom/android/server/pm/PackageInstallerSession;->streamValidateAndCommit()Z
+HSPLcom/android/server/pm/PackageInstallerSession;->validateApexInstallLocked()V
+HPLcom/android/server/pm/PackageInstallerSession;->validateApkInstallLocked(Landroid/content/pm/PackageInfo;)V
+PLcom/android/server/pm/PackageInstallerSession;->write(Ljava/lang/String;JJLandroid/os/ParcelFileDescriptor;)V
+HSPLcom/android/server/pm/PackageInstallerSession;->write(Lorg/xmlpull/v1/XmlSerializer;Ljava/io/File;)V
+HSPLcom/android/server/pm/PackageInstallerSession;->writeGrantedRuntimePermissionsLocked(Lorg/xmlpull/v1/XmlSerializer;[Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageInstallerSession;->writeWhitelistedRestrictedPermissionsLocked(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;)V
 HSPLcom/android/server/pm/PackageKeySetData;-><init>()V
 HSPLcom/android/server/pm/PackageKeySetData;->getAliases()Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/PackageKeySetData;->getProperSigningKeySet()J
+HPLcom/android/server/pm/PackageKeySetData;->isUsingDefinedKeySets()Z
 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
 HSPLcom/android/server/pm/PackageKeySetData;->setProperSigningKeySet(J)V
 HSPLcom/android/server/pm/PackageList;-><init>(Ljava/util/List;Landroid/content/pm/PackageManagerInternal$PackageListObserver;)V
+PLcom/android/server/pm/PackageList;->getPackageNames()Ljava/util/List;
 PLcom/android/server/pm/PackageList;->onPackageAdded(Ljava/lang/String;I)V
 PLcom/android/server/pm/PackageList;->onPackageChanged(Ljava/lang/String;I)V
+PLcom/android/server/pm/PackageList;->onPackageRemoved(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerException;-><init>(ILjava/lang/String;)V
-PLcom/android/server/pm/PackageManagerException;-><init>(Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageManagerException;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerService$1;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 PLcom/android/server/pm/PackageManagerService$1;->onVolumeStateChanged(Landroid/os/storage/VolumeInfo;II)V
 PLcom/android/server/pm/PackageManagerService$2;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/util/List;)V
+HPLcom/android/server/pm/PackageManagerService$2;->writeElement(Landroid/content/IntentFilter;Landroid/os/Parcel;I)V
+HPLcom/android/server/pm/PackageManagerService$2;->writeElement(Ljava/lang/Object;Landroid/os/Parcel;I)V
+PLcom/android/server/pm/PackageManagerService$3;-><init>(Lcom/android/server/pm/PackageManagerService;ZLjava/lang/String;ILandroid/content/pm/IPackageDataObserver;)V
+PLcom/android/server/pm/PackageManagerService$3;->run()V
 HSPLcom/android/server/pm/PackageManagerService$4;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/os/Handler;Landroid/content/ContentResolver;)V
 HSPLcom/android/server/pm/PackageManagerService$4;->onChange(Z)V
 HSPLcom/android/server/pm/PackageManagerService$5;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerService$6;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 PLcom/android/server/pm/PackageManagerService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/pm/PackageManagerService$7;-><init>(Lcom/android/server/pm/PackageManagerService;)V
-PLcom/android/server/pm/PackageManagerService$7;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/pm/PackageManagerService$7;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/pm/PackageManagerService$ActiveInstallSession;-><init>(Ljava/lang/String;Ljava/io/File;Landroid/content/pm/IPackageInstallObserver2;Landroid/content/pm/PackageInstaller$SessionParams;ILcom/android/server/pm/InstallSource;Landroid/os/UserHandle;Landroid/content/pm/PackageParser$SigningDetails;)V
 PLcom/android/server/pm/PackageManagerService$ActiveInstallSession;->getInstallSource()Lcom/android/server/pm/InstallSource;
 PLcom/android/server/pm/PackageManagerService$ActiveInstallSession;->getInstallerUid()I
@@ -14389,12 +23913,14 @@
 PLcom/android/server/pm/PackageManagerService$ActiveInstallSession;->getUser()Landroid/os/UserHandle;
 PLcom/android/server/pm/PackageManagerService$CommitRequest;-><init>(Ljava/util/Map;[I)V
 PLcom/android/server/pm/PackageManagerService$CommitRequest;-><init>(Ljava/util/Map;[ILcom/android/server/pm/PackageManagerService$1;)V
+PLcom/android/server/pm/PackageManagerService$CrossProfileDomainInfo;-><init>()V
+PLcom/android/server/pm/PackageManagerService$CrossProfileDomainInfo;-><init>(Lcom/android/server/pm/PackageManagerService$1;)V
 PLcom/android/server/pm/PackageManagerService$DeletePackageAction;-><init>(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageManagerService$PackageRemovedInfo;ILandroid/os/UserHandle;)V
 PLcom/android/server/pm/PackageManagerService$DeletePackageAction;-><init>(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageManagerService$PackageRemovedInfo;ILandroid/os/UserHandle;Lcom/android/server/pm/PackageManagerService$1;)V
 PLcom/android/server/pm/PackageManagerService$FileInstallArgs;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$InstallParams;)V
-PLcom/android/server/pm/PackageManagerService$FileInstallArgs;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
-PLcom/android/server/pm/PackageManagerService$FileInstallArgs;->cleanUp()Z
-PLcom/android/server/pm/PackageManagerService$FileInstallArgs;->cleanUpResourcesLI()V
+HSPLcom/android/server/pm/PackageManagerService$FileInstallArgs;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageManagerService$FileInstallArgs;->cleanUp()Z
+HSPLcom/android/server/pm/PackageManagerService$FileInstallArgs;->cleanUpResourcesLI()V
 PLcom/android/server/pm/PackageManagerService$FileInstallArgs;->copyApk()I
 PLcom/android/server/pm/PackageManagerService$FileInstallArgs;->doCopyApk()I
 PLcom/android/server/pm/PackageManagerService$FileInstallArgs;->doPostDeleteLI(Z)Z
@@ -14403,6 +23929,7 @@
 HPLcom/android/server/pm/PackageManagerService$FileInstallArgs;->doRename(ILandroid/content/pm/parsing/ParsedPackage;)Z
 PLcom/android/server/pm/PackageManagerService$FileInstallArgs;->getCodePath()Ljava/lang/String;
 PLcom/android/server/pm/PackageManagerService$HandlerParams;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/os/UserHandle;)V
+PLcom/android/server/pm/PackageManagerService$HandlerParams;->getRollbackUser()Landroid/os/UserHandle;
 PLcom/android/server/pm/PackageManagerService$HandlerParams;->getUser()Landroid/os/UserHandle;
 PLcom/android/server/pm/PackageManagerService$HandlerParams;->setTraceCookie(I)Lcom/android/server/pm/PackageManagerService$HandlerParams;
 PLcom/android/server/pm/PackageManagerService$HandlerParams;->setTraceMethod(Ljava/lang/String;)Lcom/android/server/pm/PackageManagerService$HandlerParams;
@@ -14418,10 +23945,12 @@
 HSPLcom/android/server/pm/PackageManagerService$Injector;->bootstrap(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerService$Injector;->getAbiHelper()Lcom/android/server/pm/PackageAbiHelper;
 HSPLcom/android/server/pm/PackageManagerService$Injector;->getActivityTaskManagerInternal()Lcom/android/server/wm/ActivityTaskManagerInternal;
+PLcom/android/server/pm/PackageManagerService$Injector;->getAppOpsManager()Landroid/app/AppOpsManager;
 HSPLcom/android/server/pm/PackageManagerService$Injector;->getAppsFilter()Lcom/android/server/pm/AppsFilter;
 HSPLcom/android/server/pm/PackageManagerService$Injector;->getCompatibility()Lcom/android/server/compat/PlatformCompat;
 HSPLcom/android/server/pm/PackageManagerService$Injector;->getComponentResolver()Lcom/android/server/pm/ComponentResolver;
 HSPLcom/android/server/pm/PackageManagerService$Injector;->getContext()Landroid/content/Context;
+PLcom/android/server/pm/PackageManagerService$Injector;->getDeviceStorageMonitorInternal()Lcom/android/server/storage/DeviceStorageMonitorInternal;
 HSPLcom/android/server/pm/PackageManagerService$Injector;->getDisplayManager()Landroid/hardware/display/DisplayManager;
 HSPLcom/android/server/pm/PackageManagerService$Injector;->getInstallLock()Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$Injector;->getInstaller()Lcom/android/server/pm/Installer;
@@ -14435,408 +23964,629 @@
 HSPLcom/android/server/pm/PackageManagerService$Injector;->getUserManagerInternal()Landroid/os/UserManagerInternal;
 HSPLcom/android/server/pm/PackageManagerService$Injector;->getUserManagerService()Lcom/android/server/pm/UserManagerService;
 PLcom/android/server/pm/PackageManagerService$InstallArgs;-><init>(Lcom/android/server/pm/PackageManagerService$InstallParams;)V
-PLcom/android/server/pm/PackageManagerService$InstallArgs;-><init>(Lcom/android/server/pm/PackageManagerService$OriginInfo;Lcom/android/server/pm/PackageManagerService$MoveInfo;Landroid/content/pm/IPackageInstallObserver2;ILcom/android/server/pm/InstallSource;Ljava/lang/String;Landroid/os/UserHandle;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILandroid/content/pm/PackageParser$SigningDetails;ILcom/android/server/pm/PackageManagerService$MultiPackageInstallParams;)V
+HSPLcom/android/server/pm/PackageManagerService$InstallArgs;-><init>(Lcom/android/server/pm/PackageManagerService$OriginInfo;Lcom/android/server/pm/PackageManagerService$MoveInfo;Landroid/content/pm/IPackageInstallObserver2;ILcom/android/server/pm/InstallSource;Ljava/lang/String;Landroid/os/UserHandle;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILandroid/content/pm/PackageParser$SigningDetails;ILcom/android/server/pm/PackageManagerService$MultiPackageInstallParams;)V
+HSPLcom/android/server/pm/PackageManagerService$InstallArgs;-><init>(Lcom/android/server/pm/PackageManagerService$OriginInfo;Lcom/android/server/pm/PackageManagerService$MoveInfo;Landroid/content/pm/IPackageInstallObserver2;ILcom/android/server/pm/InstallSource;Ljava/lang/String;Landroid/os/UserHandle;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILandroid/content/pm/PackageParser$SigningDetails;IZLcom/android/server/pm/PackageManagerService$MultiPackageInstallParams;)V
 PLcom/android/server/pm/PackageManagerService$InstallArgs;->getUser()Landroid/os/UserHandle;
 PLcom/android/server/pm/PackageManagerService$InstallParams$1;-><init>(Lcom/android/server/pm/PackageManagerService$InstallParams;I)V
 PLcom/android/server/pm/PackageManagerService$InstallParams$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/pm/PackageManagerService$InstallParams$2;-><init>(Lcom/android/server/pm/PackageManagerService$InstallParams;I)V
+HPLcom/android/server/pm/PackageManagerService$InstallParams$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/pm/PackageManagerService$InstallParams$3;-><init>(Lcom/android/server/pm/PackageManagerService$InstallParams;I)V
+HPLcom/android/server/pm/PackageManagerService$InstallParams$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/pm/PackageManagerService$InstallParams;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$ActiveInstallSession;)V
 PLcom/android/server/pm/PackageManagerService$InstallParams;->access$800(Lcom/android/server/pm/PackageManagerService$InstallParams;)Lcom/android/server/pm/PackageManagerService$InstallArgs;
+PLcom/android/server/pm/PackageManagerService$InstallParams;->handleIntegrityVerificationFinished()V
 PLcom/android/server/pm/PackageManagerService$InstallParams;->handleReturnCode()V
+PLcom/android/server/pm/PackageManagerService$InstallParams;->handleRollbackEnabled()V
 PLcom/android/server/pm/PackageManagerService$InstallParams;->handleStartCopy()V
 PLcom/android/server/pm/PackageManagerService$InstallParams;->handleVerificationFinished()V
 PLcom/android/server/pm/PackageManagerService$InstallParams;->installLocationPolicy(Landroid/content/pm/PackageInfoLite;)I
+PLcom/android/server/pm/PackageManagerService$InstallParams;->populateInstallerExtras(Landroid/content/Intent;)V
+HPLcom/android/server/pm/PackageManagerService$InstallParams;->sendIntegrityVerificationRequest(ILandroid/content/pm/PackageInfoLite;Lcom/android/server/pm/PackageVerificationState;)V
+HPLcom/android/server/pm/PackageManagerService$InstallParams;->sendPackageVerificationRequest(ILandroid/content/pm/PackageInfoLite;Lcom/android/server/pm/PackageVerificationState;)I
+PLcom/android/server/pm/PackageManagerService$InstallParams;->setReturnCode(I)V
 PLcom/android/server/pm/PackageManagerService$InstallRequest;-><init>(Lcom/android/server/pm/PackageManagerService$InstallArgs;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;)V
 PLcom/android/server/pm/PackageManagerService$InstallRequest;-><init>(Lcom/android/server/pm/PackageManagerService$InstallArgs;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Lcom/android/server/pm/PackageManagerService$1;)V
 HSPLcom/android/server/pm/PackageManagerService$IntentVerifierProxy;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/content/Context;Landroid/content/ComponentName;)V
 PLcom/android/server/pm/PackageManagerService$IntentVerifierProxy;->addOneIntentFilterVerification(IIILandroid/content/IntentFilter;Ljava/lang/String;)Z
 HPLcom/android/server/pm/PackageManagerService$IntentVerifierProxy;->addOneIntentFilterVerification(IIILandroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;Ljava/lang/String;)Z
 PLcom/android/server/pm/PackageManagerService$IntentVerifierProxy;->createDomainVerificationState(IIILjava/lang/String;)Lcom/android/server/pm/IntentFilterVerificationState;
+PLcom/android/server/pm/PackageManagerService$IntentVerifierProxy;->getDefaultScheme()Ljava/lang/String;
 PLcom/android/server/pm/PackageManagerService$IntentVerifierProxy;->receiveVerificationResponse(I)V
 PLcom/android/server/pm/PackageManagerService$IntentVerifierProxy;->sendVerificationRequest(ILcom/android/server/pm/IntentFilterVerificationState;)V
-PLcom/android/server/pm/PackageManagerService$IntentVerifierProxy;->startVerifications(I)V
+HPLcom/android/server/pm/PackageManagerService$IntentVerifierProxy;->startVerifications(I)V
 HSPLcom/android/server/pm/PackageManagerService$MoveCallbacks;-><init>(Landroid/os/Looper;)V
 PLcom/android/server/pm/PackageManagerService$MoveCallbacks;->register(Landroid/content/pm/IPackageMoveObserver;)V
-PLcom/android/server/pm/PackageManagerService$OriginInfo;-><init>(Ljava/io/File;ZZ)V
-PLcom/android/server/pm/PackageManagerService$OriginInfo;->fromNothing()Lcom/android/server/pm/PackageManagerService$OriginInfo;
+PLcom/android/server/pm/PackageManagerService$MultiPackageInstallParams;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/os/UserHandle;Ljava/util/List;)V
+PLcom/android/server/pm/PackageManagerService$MultiPackageInstallParams;->handleReturnCode()V
+PLcom/android/server/pm/PackageManagerService$MultiPackageInstallParams;->handleStartCopy()V
+PLcom/android/server/pm/PackageManagerService$MultiPackageInstallParams;->tryProcessInstallRequest(Lcom/android/server/pm/PackageManagerService$InstallArgs;I)V
+HSPLcom/android/server/pm/PackageManagerService$OriginInfo;-><init>(Ljava/io/File;ZZ)V
+HSPLcom/android/server/pm/PackageManagerService$OriginInfo;->fromNothing()Lcom/android/server/pm/PackageManagerService$OriginInfo;
 PLcom/android/server/pm/PackageManagerService$OriginInfo;->fromStagedFile(Ljava/io/File;)Lcom/android/server/pm/PackageManagerService$OriginInfo;
-PLcom/android/server/pm/PackageManagerService$PackageFreezer;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/pm/PackageManagerService$PackageFreezer;->close()V
-PLcom/android/server/pm/PackageManagerService$PackageFreezer;->finalize()V
+PLcom/android/server/pm/PackageManagerService$PackageFreezer;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+HPLcom/android/server/pm/PackageManagerService$PackageFreezer;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService$PackageFreezer;->close()V
+HPLcom/android/server/pm/PackageManagerService$PackageFreezer;->finalize()V
 HSPLcom/android/server/pm/PackageManagerService$PackageHandler;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/os/Looper;)V
-PLcom/android/server/pm/PackageManagerService$PackageHandler;->doHandleMessage(Landroid/os/Message;)V
-PLcom/android/server/pm/PackageManagerService$PackageHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/pm/PackageManagerService$PackageHandler;->doHandleMessage(Landroid/os/Message;)V
+HPLcom/android/server/pm/PackageManagerService$PackageHandler;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/pm/PackageManagerService$PackageInstalledInfo;-><init>()V
+PLcom/android/server/pm/PackageManagerService$PackageInstalledInfo;->setError(ILjava/lang/String;)V
 PLcom/android/server/pm/PackageManagerService$PackageInstalledInfo;->setReturnCode(I)V
+PLcom/android/server/pm/PackageManagerService$PackageInstalledInfo;->setReturnMessage(Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$1;)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->addIsolatedUid(II)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->areDefaultRuntimePermissionsGranted(I)Z
 PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->canAccessComponent(ILandroid/content/ComponentName;I)Z
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->canAccessInstantApps(II)Z
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->canAccessInstantApps(II)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->filterAppAccess(Landroid/content/pm/parsing/AndroidPackage;II)Z
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->filterAppAccess(Ljava/lang/String;II)Z
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->filterAppAccess(Ljava/lang/String;II)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->filterOnlySystemPackages([Ljava/lang/String;)[Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->forEachInstalledPackage(Ljava/util/function/Consumer;I)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->finishPackageInstall(IZ)V
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->forEachInstalledPackage(Ljava/util/function/Consumer;I)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->forEachPackage(Ljava/util/function/Consumer;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->freeStorage(Ljava/lang/String;JI)V
 PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getActivityInfo(Landroid/content/ComponentName;III)Landroid/content/pm/ActivityInfo;
-HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getApplicationEnabledState(Ljava/lang/String;I)I
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getApksInApex(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getApplicationEnabledState(Ljava/lang/String;I)I
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getApplicationInfo(Ljava/lang/String;III)Landroid/content/pm/ApplicationInfo;
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getCeDataInode(Ljava/lang/String;I)J
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getDefaultHomeActivity(I)Landroid/content/ComponentName;
-HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getDisabledComponents(Ljava/lang/String;I)Landroid/util/ArraySet;
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getDisabledComponents(Ljava/lang/String;I)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getDisabledSystemPackage(Ljava/lang/String;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getDisabledSystemPackageName(Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getDistractingPackageRestrictions(Ljava/lang/String;I)I
-HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getEnabledComponents(Ljava/lang/String;I)Landroid/util/ArraySet;
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getHomeActivitiesAsUser(Ljava/util/List;I)Landroid/content/ComponentName;
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getInstalledApplications(III)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getDistractingPackageRestrictions(Ljava/lang/String;I)I
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getEnabledComponents(Ljava/lang/String;I)Landroid/util/ArraySet;
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getHomeActivitiesAsUser(Ljava/util/List;I)Landroid/content/ComponentName;
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getInstalledApplications(III)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getInstantAppPackageName(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getKnownPackageNames(II)[Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getKnownPackageNamesInternal(II)[Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getNameForUid(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getOverlayPackages(I)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackage(I)Landroid/content/pm/parsing/AndroidPackage;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackage(Ljava/lang/String;)Landroid/content/pm/parsing/AndroidPackage;
-HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackageInfo(Ljava/lang/String;III)Landroid/content/pm/PackageInfo;
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackageInfo(Ljava/lang/String;III)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackageList(Landroid/content/pm/PackageManagerInternal$PackageListObserver;)Lcom/android/server/pm/PackageList;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackageSetting(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackageSetting(Ljava/lang/String;)Ljava/lang/Object;
-HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackageTargetSdkVersion(Ljava/lang/String;)I
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackageTargetSdkVersion(Ljava/lang/String;)I
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackageUid(Ljava/lang/String;II)I
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackageUidInternal(Ljava/lang/String;II)I
 HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackagesForSharedUserId(Ljava/lang/String;I)[Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getProcessesForUid(I)Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getSetupWizardPackageName()Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getSharedUserPackagesForPackage(Ljava/lang/String;I)[Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getSigningDetails(I)Landroid/content/pm/PackageParser$SigningDetails;
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getSigningDetails(Ljava/lang/String;)Landroid/content/pm/PackageParser$SigningDetails;
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getSuspendedDialogInfo(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/SuspendDialogInfo;
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getSuspendedPackageLauncherExtras(Ljava/lang/String;I)Landroid/os/Bundle;
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getSuspendingPackage(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getSystemUiServiceComponent()Landroid/content/ComponentName;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getTargetPackageNames(I)Ljava/util/List;
-HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getUidTargetSdkVersion(I)I
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getUidTargetSdkVersion(I)I
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->grantImplicitAccess(ILandroid/content/Intent;II)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->hasInstantApplicationMetadata(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->hasSignatureCapability(III)Z
-HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isCallerInstallerOfRecord(Landroid/content/pm/parsing/AndroidPackage;I)Z
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isApexPackage(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isCallerInstallerOfRecord(Landroid/content/pm/parsing/AndroidPackage;I)Z
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isDataRestoreSafe(Landroid/content/pm/Signature;Ljava/lang/String;)Z
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isDataRestoreSafe([BLjava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isEnabledAndMatches(Landroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;II)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isInstantApp(Ljava/lang/String;I)Z
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isInstantAppInstallerComponent(Landroid/content/ComponentName;)Z
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isInstantAppInstallerComponent(Landroid/content/ComponentName;)Z
 PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isOnlyCoreApps()Z
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPackageDataProtected(ILjava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPackageEphemeral(ILjava/lang/String;)Z
-HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPackagePersistent(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPackagePersistent(Ljava/lang/String;)Z
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPackageStateProtected(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPackageSuspended(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPermissionsReviewRequired(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPlatformSigned(Ljava/lang/String;)Z
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isResolveActivityComponent(Landroid/content/pm/ComponentInfo;)Z
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isResolveActivityComponent(Landroid/content/pm/ComponentInfo;)Z
 PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->migrateLegacyObbData()V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->notifyPackageUse(Ljava/lang/String;I)V
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;III)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->pruneInstantApps()V
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;III)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->removeIsolatedUid(I)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->removeLegacyDefaultBrowserPackageName(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->resolveContentProvider(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;IIZI)Landroid/content/pm/ResolveInfo;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->resolveService(Landroid/content/Intent;Ljava/lang/String;III)Landroid/content/pm/ResolveInfo;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setDeviceAndProfileOwnerPackages(ILjava/lang/String;Landroid/util/SparseArray;)V
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setDeviceOwnerProtectedPackages(Ljava/util/List;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setEnableRollbackCode(II)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setEnabledOverlayPackages(ILjava/lang/String;Ljava/util/List;)Z
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setEnabledOverlayPackages(ILjava/lang/String;Ljava/util/List;Ljava/util/Collection;)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setExternalSourcesPolicy(Landroid/content/pm/PackageManagerInternal$ExternalSourcesPolicy;)V
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setRuntimePermissionsFingerPrint(Ljava/lang/String;I)V
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setIntegrityVerificationResult(II)V
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setKeepUninstalledPackages(Ljava/util/List;)V
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setRuntimePermissionsFingerPrint(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->userNeedsBadging(I)Z
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->wasPackageEverLaunched(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->writePermissionSettings([IZ)V
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->writeSettings(Z)V
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->writeSettings(Z)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerNative;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerNative;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$1;)V
-PLcom/android/server/pm/PackageManagerService$PackageManagerNative;->getInstallerForPackage(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerNative;->getInstallerForPackage(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/pm/PackageManagerService$PackageManagerNative;->getLocationFlags(Ljava/lang/String;)I
 PLcom/android/server/pm/PackageManagerService$PackageManagerNative;->getModuleMetadataPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerNative;->getNamesForUids([I)[Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService$PackageManagerNative;->getTargetSdkVersionForPackage(Ljava/lang/String;)I
 PLcom/android/server/pm/PackageManagerService$PackageManagerNative;->getVersionCodeForPackage(Ljava/lang/String;)J
-PLcom/android/server/pm/PackageManagerService$PackageManagerNative;->isAudioPlaybackCaptureAllowed([Ljava/lang/String;)[Z
+HPLcom/android/server/pm/PackageManagerService$PackageManagerNative;->isAudioPlaybackCaptureAllowed([Ljava/lang/String;)[Z
 HSPLcom/android/server/pm/PackageManagerService$PackageParserCallback;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerService$PackageParserCallback;->hasFeature(Ljava/lang/String;)Z
 PLcom/android/server/pm/PackageManagerService$PackageRemovedInfo;-><init>(Lcom/android/server/pm/PackageSender;)V
-PLcom/android/server/pm/PackageManagerService$PackageRemovedInfo;->populateUsers([ILcom/android/server/pm/PackageSetting;)V
+HPLcom/android/server/pm/PackageManagerService$PackageRemovedInfo;->populateUsers([ILcom/android/server/pm/PackageSetting;)V
 PLcom/android/server/pm/PackageManagerService$PackageRemovedInfo;->sendPackageRemovedBroadcastInternal(Z)V
 PLcom/android/server/pm/PackageManagerService$PackageRemovedInfo;->sendPackageRemovedBroadcasts(Z)V
+PLcom/android/server/pm/PackageManagerService$PackageRemovedInfo;->sendSystemPackageAppearedBroadcasts()V
+PLcom/android/server/pm/PackageManagerService$PackageRemovedInfo;->sendSystemPackageUpdatedBroadcasts()V
+PLcom/android/server/pm/PackageManagerService$PackageRemovedInfo;->sendSystemPackageUpdatedBroadcastsInternal()V
 HSPLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;-><init>()V
-PLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->get(ILjava/lang/String;)Ljava/util/ArrayList;
-PLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->put(ILjava/lang/String;Ljava/util/ArrayList;)V
+HPLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->clear()V
+HPLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->get(ILjava/lang/String;)Ljava/util/ArrayList;
+HPLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->getOrAllocate(I)Landroid/util/ArrayMap;
+HPLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->packagesForUserId(I)Landroid/util/ArrayMap;
+HPLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->put(ILjava/lang/String;Ljava/util/ArrayList;)V
+PLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->remove(I)V
+HPLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->remove(ILjava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->size()I
+HPLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->userIdAt(I)I
+HPLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->userIdCount()I
 PLcom/android/server/pm/PackageManagerService$PostInstallData;-><init>(Lcom/android/server/pm/PackageManagerService$InstallArgs;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Ljava/lang/Runnable;)V
+PLcom/android/server/pm/PackageManagerService$PrepareFailure;-><init>(ILjava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService$PrepareFailure;->conflictsWithExistingPermission(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/pm/PackageManagerService$PrepareFailure;
 PLcom/android/server/pm/PackageManagerService$PrepareResult;-><init>(ZIILandroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/ParsedPackage;ZZLcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;)V
 PLcom/android/server/pm/PackageManagerService$PrepareResult;-><init>(ZIILandroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/ParsedPackage;ZZLcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageManagerService$1;)V
 HSPLcom/android/server/pm/PackageManagerService$ReconcileRequest;-><init>(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V
 HSPLcom/android/server/pm/PackageManagerService$ReconcileRequest;-><init>(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Lcom/android/server/pm/PackageManagerService$1;)V
 HSPLcom/android/server/pm/PackageManagerService$ReconcileRequest;-><init>(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V
+PLcom/android/server/pm/PackageManagerService$ReconcileRequest;-><init>(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Lcom/android/server/pm/PackageManagerService$1;)V
 HSPLcom/android/server/pm/PackageManagerService$ReconciledPackage;-><init>(Lcom/android/server/pm/PackageManagerService$ReconcileRequest;Lcom/android/server/pm/PackageManagerService$InstallArgs;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Lcom/android/server/pm/PackageManagerService$PrepareResult;Lcom/android/server/pm/PackageManagerService$ScanResult;Lcom/android/server/pm/PackageManagerService$DeletePackageAction;Ljava/util/List;Landroid/content/pm/PackageParser$SigningDetails;ZZ)V
 HSPLcom/android/server/pm/PackageManagerService$ReconciledPackage;-><init>(Lcom/android/server/pm/PackageManagerService$ReconcileRequest;Lcom/android/server/pm/PackageManagerService$InstallArgs;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Lcom/android/server/pm/PackageManagerService$PrepareResult;Lcom/android/server/pm/PackageManagerService$ScanResult;Lcom/android/server/pm/PackageManagerService$DeletePackageAction;Ljava/util/List;Landroid/content/pm/PackageParser$SigningDetails;ZZLcom/android/server/pm/PackageManagerService$1;)V
 HSPLcom/android/server/pm/PackageManagerService$ReconciledPackage;->access$2000(Lcom/android/server/pm/PackageManagerService$ReconciledPackage;)Ljava/util/Map;
+HSPLcom/android/server/pm/PackageManagerService$ReconciledPackage;->access$2100(Lcom/android/server/pm/PackageManagerService$ReconciledPackage;)Ljava/util/Map;
 HSPLcom/android/server/pm/PackageManagerService$ReconciledPackage;->getCombinedAvailablePackages()Ljava/util/Map;
 HSPLcom/android/server/pm/PackageManagerService$ScanRequest;-><init>(Landroid/content/pm/parsing/ParsedPackage;Lcom/android/server/pm/SharedUserSetting;Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Ljava/lang/String;IIZLandroid/os/UserHandle;)V
 HSPLcom/android/server/pm/PackageManagerService$ScanResult;-><init>(Lcom/android/server/pm/PackageManagerService$ScanRequest;ZLcom/android/server/pm/PackageSetting;Ljava/util/List;ZLandroid/content/pm/SharedLibraryInfo;Ljava/util/List;)V
 HSPLcom/android/server/pm/PackageManagerService$SystemPartition;-><init>(Ljava/io/File;IZ)V
 HSPLcom/android/server/pm/PackageManagerService$SystemPartition;-><init>(Ljava/io/File;IZLcom/android/server/pm/PackageManagerService$1;)V
+PLcom/android/server/pm/PackageManagerService$SystemPartition;->containsPath(Ljava/lang/String;)Z
+PLcom/android/server/pm/PackageManagerService$SystemPartition;->containsPrivPath(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService$SystemPartition;->shouldScanPrivApps(I)Z
 HSPLcom/android/server/pm/PackageManagerService$SystemPartition;->toCanonical(Ljava/io/File;)Ljava/io/File;
 PLcom/android/server/pm/PackageManagerService$VerificationInfo;-><init>(Landroid/net/Uri;Landroid/net/Uri;II)V
 HSPLcom/android/server/pm/PackageManagerService;-><clinit>()V
 HSPLcom/android/server/pm/PackageManagerService;-><init>(Lcom/android/server/pm/PackageManagerService$Injector;ZZ)V
 PLcom/android/server/pm/PackageManagerService;->access$100(Lcom/android/server/pm/PackageManagerService;)J
+PLcom/android/server/pm/PackageManagerService;->access$1000(Lcom/android/server/pm/PackageManagerService;ILandroid/net/Uri;ILandroid/os/UserHandle;)V
 PLcom/android/server/pm/PackageManagerService;->access$1100(Lcom/android/server/pm/PackageManagerService;IIZLjava/lang/String;ZLjava/util/List;)V
 PLcom/android/server/pm/PackageManagerService;->access$1200(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/PackageManagerService$IntentFilterVerifier;
+PLcom/android/server/pm/PackageManagerService;->access$1200(Lcom/android/server/pm/PackageManagerService;IIZLjava/lang/String;ZLjava/util/List;)V
+PLcom/android/server/pm/PackageManagerService;->access$1300(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/PackageManagerService$IntentFilterVerifier;
 PLcom/android/server/pm/PackageManagerService;->access$200(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/PackageManagerService$Injector;
+PLcom/android/server/pm/PackageManagerService;->access$2300(Lcom/android/server/pm/PackageManagerService;I)Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;
+PLcom/android/server/pm/PackageManagerService;->access$2400(Lcom/android/server/pm/PackageManagerService;ZLjava/util/List;)V
+PLcom/android/server/pm/PackageManagerService;->access$2500()Z
+PLcom/android/server/pm/PackageManagerService;->access$2600(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;II)I
+PLcom/android/server/pm/PackageManagerService;->access$2700(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/PackageInfoLite;)V
+PLcom/android/server/pm/PackageManagerService;->access$2800(Landroid/content/pm/parsing/AndroidPackage;)Z
 PLcom/android/server/pm/PackageManagerService;->access$2800(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$InstallParams;)Lcom/android/server/pm/PackageManagerService$InstallArgs;
 PLcom/android/server/pm/PackageManagerService;->access$2900(Lcom/android/server/pm/PackageManagerService;III)Z
+PLcom/android/server/pm/PackageManagerService;->access$2900(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$InstallParams;)Lcom/android/server/pm/PackageManagerService$InstallArgs;
 PLcom/android/server/pm/PackageManagerService;->access$300(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;)Z
 PLcom/android/server/pm/PackageManagerService;->access$3000(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;IIZ)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService;->access$3008(Lcom/android/server/pm/PackageManagerService;)I
 PLcom/android/server/pm/PackageManagerService;->access$3108(Lcom/android/server/pm/PackageManagerService;)I
+PLcom/android/server/pm/PackageManagerService;->access$3200(Lcom/android/server/pm/PackageManagerService;)Z
 PLcom/android/server/pm/PackageManagerService;->access$3200(Lcom/android/server/pm/PackageManagerService;Landroid/content/pm/PackageInfoLite;Ljava/util/List;Lcom/android/server/pm/PackageVerificationState;)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService;->access$3300(Lcom/android/server/pm/PackageManagerService;III)Z
 PLcom/android/server/pm/PackageManagerService;->access$3300(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;Ljava/util/List;)Landroid/content/ComponentName;
+PLcom/android/server/pm/PackageManagerService;->access$3400(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;IIZ)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService;->access$3500(Lcom/android/server/pm/PackageManagerService;Landroid/content/pm/PackageInfoLite;Ljava/util/List;Lcom/android/server/pm/PackageVerificationState;)Ljava/util/List;
 PLcom/android/server/pm/PackageManagerService;->access$3600(Lcom/android/server/pm/PackageManagerService;Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
+PLcom/android/server/pm/PackageManagerService;->access$3600(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;Ljava/util/List;)Landroid/content/ComponentName;
 PLcom/android/server/pm/PackageManagerService;->access$3700(Lcom/android/server/pm/PackageManagerService;)Landroid/os/incremental/IncrementalManager;
-PLcom/android/server/pm/PackageManagerService;->access$400(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ZLjava/util/ArrayList;ILjava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->access$3700(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$InstallArgs;I)V
+PLcom/android/server/pm/PackageManagerService;->access$3800(Lcom/android/server/pm/PackageManagerService;Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
+HSPLcom/android/server/pm/PackageManagerService;->access$3900(Lcom/android/server/pm/PackageManagerService;)Landroid/os/incremental/IncrementalManager;
+HPLcom/android/server/pm/PackageManagerService;->access$400(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ZLjava/util/ArrayList;ILjava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->access$4400()[I
+PLcom/android/server/pm/PackageManagerService;->access$4700(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageManagerService;->access$4800(Lcom/android/server/pm/PackageManagerService;)Landroid/util/SparseBooleanArray;
+PLcom/android/server/pm/PackageManagerService;->access$4800(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/InstantAppRegistry;
+PLcom/android/server/pm/PackageManagerService;->access$500(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;ZZZ[Ljava/lang/String;Ljava/util/List;ZLjava/lang/String;Landroid/content/pm/IPackageInstallObserver2;)V
+HSPLcom/android/server/pm/PackageManagerService;->access$5000(Lcom/android/server/pm/PackageManagerService;)Landroid/util/SparseBooleanArray;
+PLcom/android/server/pm/PackageManagerService;->access$5100(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;IILjava/lang/String;)V
 PLcom/android/server/pm/PackageManagerService;->access$5600(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/ModuleInfoProvider;
 PLcom/android/server/pm/PackageManagerService;->access$5700(Lcom/android/server/pm/PackageManagerService;III)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService;->access$5800(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/ModuleInfoProvider;
 HSPLcom/android/server/pm/PackageManagerService;->access$5800(Lcom/android/server/pm/PackageManagerService;I)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->access$5900(Lcom/android/server/pm/PackageManagerService;III)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->access$5900(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSetting;II)Z
+PLcom/android/server/pm/PackageManagerService;->access$600(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageManagerService;->access$6000(Lcom/android/server/pm/PackageManagerService;I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->access$6000(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;J)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->access$6100(Lcom/android/server/pm/PackageManagerService;)Landroid/util/ArraySet;
+HSPLcom/android/server/pm/PackageManagerService;->access$6100(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSetting;II)Z
 HSPLcom/android/server/pm/PackageManagerService;->access$6200(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
+HSPLcom/android/server/pm/PackageManagerService;->access$6200(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;J)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->access$6300(Lcom/android/server/pm/PackageManagerService;)Landroid/util/ArraySet;
+HSPLcom/android/server/pm/PackageManagerService;->access$6400(Lcom/android/server/pm/PackageManagerService;[Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->access$6500(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
 PLcom/android/server/pm/PackageManagerService;->access$6500(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;JIII)Landroid/content/pm/PackageInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$6600(Lcom/android/server/pm/PackageManagerService;)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->access$6600(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;III)Landroid/content/pm/ApplicationInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$6602(Lcom/android/server/pm/PackageManagerService;Ljava/util/List;)Ljava/util/List;
 PLcom/android/server/pm/PackageManagerService;->access$6700(Lcom/android/server/pm/PackageManagerService;Landroid/content/ComponentName;III)Landroid/content/pm/ActivityInfo;
 PLcom/android/server/pm/PackageManagerService;->access$6800(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;IIIZZ)Ljava/util/List;
-PLcom/android/server/pm/PackageManagerService;->access$700(Lcom/android/server/pm/PackageManagerService;)Landroid/util/ArraySet;
+HSPLcom/android/server/pm/PackageManagerService;->access$6800(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;JIII)Landroid/content/pm/PackageInfo;
+HPLcom/android/server/pm/PackageManagerService;->access$6900(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;III)I
+HPLcom/android/server/pm/PackageManagerService;->access$6900(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;III)Landroid/content/pm/ApplicationInfo;
+HPLcom/android/server/pm/PackageManagerService;->access$700(Lcom/android/server/pm/PackageManagerService;)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/PackageManagerService;->access$7000(Lcom/android/server/pm/PackageManagerService;I)Landroid/content/ComponentName;
+HPLcom/android/server/pm/PackageManagerService;->access$7000(Lcom/android/server/pm/PackageManagerService;Landroid/content/ComponentName;III)Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/pm/PackageManagerService;->access$7000(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;III)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/pm/PackageManagerService;->access$7100(Lcom/android/server/pm/PackageManagerService;I)Z
+HPLcom/android/server/pm/PackageManagerService;->access$7100(Lcom/android/server/pm/PackageManagerService;Landroid/content/ComponentName;III)Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/pm/PackageManagerService;->access$7100(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;IIIZZ)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->access$7200(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;IIIZZ)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService;->access$7300(Lcom/android/server/pm/PackageManagerService;I)Landroid/content/ComponentName;
 HSPLcom/android/server/pm/PackageManagerService;->access$7300(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;II)Z
 HSPLcom/android/server/pm/PackageManagerService;->access$7400(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/AppsFilter;
+PLcom/android/server/pm/PackageManagerService;->access$7400(Lcom/android/server/pm/PackageManagerService;I)Landroid/content/ComponentName;
+HSPLcom/android/server/pm/PackageManagerService;->access$7400(Lcom/android/server/pm/PackageManagerService;I)Z
+HSPLcom/android/server/pm/PackageManagerService;->access$7500(Lcom/android/server/pm/PackageManagerService;I)Z
 HSPLcom/android/server/pm/PackageManagerService;->access$7600(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSetting;II)Landroid/content/pm/PackageInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$7600(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;II)Z
+HSPLcom/android/server/pm/PackageManagerService;->access$7700(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/AppsFilter;
 PLcom/android/server/pm/PackageManagerService;->access$7700(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;IIZI)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$7700(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;II)Z
+HSPLcom/android/server/pm/PackageManagerService;->access$7800(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/AppsFilter;
 HSPLcom/android/server/pm/PackageManagerService;->access$7800(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;III)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$7900(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSetting;II)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/pm/PackageManagerService;->access$7900(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
 PLcom/android/server/pm/PackageManagerService;->access$8000(Lcom/android/server/pm/PackageManagerService;I)I
+HPLcom/android/server/pm/PackageManagerService;->access$8000(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;IIZI)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$8000(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSetting;II)Landroid/content/pm/PackageInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$8000(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;J)Landroid/content/pm/SharedLibraryInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$8100(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;III)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$8100(Lcom/android/server/pm/PackageManagerService;Landroid/content/pm/SharedLibraryInfo;II)Ljava/util/List;
 PLcom/android/server/pm/PackageManagerService;->access$8100(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;)I
+HSPLcom/android/server/pm/PackageManagerService;->access$8100(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;J)Landroid/content/pm/SharedLibraryInfo;
 HPLcom/android/server/pm/PackageManagerService;->access$8200(Lcom/android/server/pm/PackageManagerService;II)Z
+HPLcom/android/server/pm/PackageManagerService;->access$8200(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;IIZI)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$8200(Lcom/android/server/pm/PackageManagerService;Landroid/content/pm/SharedLibraryInfo;II)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerService;->access$8200(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$8300(Lcom/android/server/pm/PackageManagerService;I)I
+HSPLcom/android/server/pm/PackageManagerService;->access$8300(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;III)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/pm/PackageManagerService;->access$8300(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;IIZI)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$8400(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;III)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$8400(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;)I
 HSPLcom/android/server/pm/PackageManagerService;->access$8400(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/PackageManagerService;->access$8400(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$8500(Lcom/android/server/pm/PackageManagerService;I)I
+HPLcom/android/server/pm/PackageManagerService;->access$8500(Lcom/android/server/pm/PackageManagerService;II)Z
+HSPLcom/android/server/pm/PackageManagerService;->access$8500(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
+HSPLcom/android/server/pm/PackageManagerService;->access$8600(Lcom/android/server/pm/PackageManagerService;I)I
+HPLcom/android/server/pm/PackageManagerService;->access$8600(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;)I
+HPLcom/android/server/pm/PackageManagerService;->access$8700(Lcom/android/server/pm/PackageManagerService;II)Z
+HPLcom/android/server/pm/PackageManagerService;->access$8700(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;)I
+HSPLcom/android/server/pm/PackageManagerService;->access$8700(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)V
 HPLcom/android/server/pm/PackageManagerService;->access$8700(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)[Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->access$8800(Lcom/android/server/pm/PackageManagerService;II)Z
+PLcom/android/server/pm/PackageManagerService;->access$8800(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSetting;ILandroid/content/ComponentName;II)Z
+PLcom/android/server/pm/PackageManagerService;->access$8900(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSetting;ILandroid/content/ComponentName;II)Z
+HSPLcom/android/server/pm/PackageManagerService;->access$8900(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/PackageManagerService;->access$8900(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)[Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->access$900(Lcom/android/server/pm/PackageManagerService;Landroid/os/UserHandle;)I
+HSPLcom/android/server/pm/PackageManagerService;->access$9000(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/PackageManagerService;->access$9100(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)[Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->access$9200(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)[Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->access$9300(Lcom/android/server/pm/PackageManagerService;II)V
+PLcom/android/server/pm/PackageManagerService;->access$9400(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/ApexManager;
+PLcom/android/server/pm/PackageManagerService;->activitySupportsIntent(Landroid/content/ComponentName;Landroid/content/Intent;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService;->addBuiltInSharedLibraryLocked(Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/server/pm/PackageManagerService;->addCrossProfileIntentFilter(Landroid/content/IntentFilter;Ljava/lang/String;III)V
+HPLcom/android/server/pm/PackageManagerService;->addCrossProfileIntentFilter(Landroid/content/IntentFilter;Ljava/lang/String;III)V
 HSPLcom/android/server/pm/PackageManagerService;->addForInitLI(Landroid/content/pm/parsing/ParsedPackage;IIJLandroid/os/UserHandle;)Landroid/content/pm/parsing/AndroidPackage;
 HSPLcom/android/server/pm/PackageManagerService;->addPackageHoldingPermissions(Ljava/util/ArrayList;Lcom/android/server/pm/PackageSetting;[Ljava/lang/String;[ZII)V
+PLcom/android/server/pm/PackageManagerService;->addPreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V
 PLcom/android/server/pm/PackageManagerService;->addPreferredActivityInternal(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;ZILjava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerService;->addSharedLibraryLPr(Landroid/content/pm/parsing/AndroidPackage;Ljava/util/Set;Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/parsing/AndroidPackage;)V
 HSPLcom/android/server/pm/PackageManagerService;->addSharedLibraryToPackageVersionMap(Ljava/util/Map;Landroid/content/pm/SharedLibraryInfo;)Z
 HSPLcom/android/server/pm/PackageManagerService;->adjustScanFlags(ILcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Landroid/os/UserHandle;Landroid/content/pm/parsing/AndroidPackage;)I
+PLcom/android/server/pm/PackageManagerService;->allHavePackage(Ljava/util/List;Ljava/lang/String;)Z
 PLcom/android/server/pm/PackageManagerService;->apkHasCode(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService;->applyAdjustedAbiToSharedUser(Lcom/android/server/pm/SharedUserSetting;Landroid/content/pm/parsing/ParsedPackage;Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->applyDefiningSharedLibraryUpdateLocked(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/SharedLibraryInfo;Ljava/util/function/BiConsumer;)V
 HSPLcom/android/server/pm/PackageManagerService;->applyPolicy(Landroid/content/pm/parsing/ParsedPackage;IILandroid/content/pm/parsing/AndroidPackage;)V
-PLcom/android/server/pm/PackageManagerService;->applyPostContentProviderResolutionFilter(Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->applyPostContentProviderResolutionFilter(Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->applyPostResolutionFilter(Ljava/util/List;Ljava/lang/String;ZIZILandroid/content/Intent;)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->applyPostServiceResolutionFilter(Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
 HPLcom/android/server/pm/PackageManagerService;->areWebInstantAppsDisabled(I)Z
-PLcom/android/server/pm/PackageManagerService;->arrayToString([I)Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->arrayToString([I)Ljava/lang/String;
 PLcom/android/server/pm/PackageManagerService;->assertCodePolicy(Landroid/content/pm/parsing/AndroidPackage;)V
 HSPLcom/android/server/pm/PackageManagerService;->assertPackageIsValid(Landroid/content/pm/parsing/AndroidPackage;II)V
 HSPLcom/android/server/pm/PackageManagerService;->assertPackageKnownAndInstalled(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/pm/PackageManagerService;->bestDomainVerificationStatus(II)I
 PLcom/android/server/pm/PackageManagerService;->broadcastPackageVerified(ILandroid/net/Uri;ILandroid/os/UserHandle;)V
+PLcom/android/server/pm/PackageManagerService;->canForwardTo(Landroid/content/Intent;Ljava/lang/String;II)Z
+PLcom/android/server/pm/PackageManagerService;->canRequestPackageInstalls(Ljava/lang/String;I)Z
+PLcom/android/server/pm/PackageManagerService;->canRequestPackageInstallsInternal(Ljava/lang/String;IIZ)Z
 HSPLcom/android/server/pm/PackageManagerService;->canSkipForcedApkVerification(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService;->canSkipForcedPackageVerification(Landroid/content/pm/parsing/AndroidPackage;)Z
 HPLcom/android/server/pm/PackageManagerService;->canSuspendPackageForUserInternal([Ljava/lang/String;I)[Z
 HSPLcom/android/server/pm/PackageManagerService;->canViewInstantApps(II)Z
-PLcom/android/server/pm/PackageManagerService;->canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;
 HPLcom/android/server/pm/PackageManagerService;->checkDowngrade(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/PackageInfoLite;)V
 PLcom/android/server/pm/PackageManagerService;->checkPackageFrozen(Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerService;->checkPackageStartable(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I
 HSPLcom/android/server/pm/PackageManagerService;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I
 HSPLcom/android/server/pm/PackageManagerService;->checkUidPermission(Ljava/lang/String;I)I
-PLcom/android/server/pm/PackageManagerService;->checkUidSignatures(II)I
+HPLcom/android/server/pm/PackageManagerService;->checkUidSignatures(II)I
 HSPLcom/android/server/pm/PackageManagerService;->chooseBestActivity(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;I)Landroid/content/pm/ResolveInfo;
-HPLcom/android/server/pm/PackageManagerService;->cleanPackageDataStructuresLILPw(Landroid/content/pm/parsing/AndroidPackage;Z)V
-PLcom/android/server/pm/PackageManagerService;->clearAppDataLIF(Landroid/content/pm/parsing/AndroidPackage;II)V
+HSPLcom/android/server/pm/PackageManagerService;->cleanPackageDataStructuresLILPw(Landroid/content/pm/parsing/AndroidPackage;Z)V
+PLcom/android/server/pm/PackageManagerService;->cleanUpUser(Lcom/android/server/pm/UserManagerService;I)V
+HPLcom/android/server/pm/PackageManagerService;->clearAppDataLIF(Landroid/content/pm/parsing/AndroidPackage;II)V
 HPLcom/android/server/pm/PackageManagerService;->clearAppDataLeafLIF(Landroid/content/pm/parsing/AndroidPackage;II)V
 HSPLcom/android/server/pm/PackageManagerService;->clearAppProfilesLIF(Landroid/content/pm/parsing/AndroidPackage;I)V
+PLcom/android/server/pm/PackageManagerService;->clearApplicationUserData(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;I)V
+PLcom/android/server/pm/PackageManagerService;->clearApplicationUserDataLIF(Ljava/lang/String;I)Z
 HPLcom/android/server/pm/PackageManagerService;->clearCrossProfileIntentFilters(ILjava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->clearDefaultBrowserIfNeeded(Ljava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService;->clearDefaultBrowserIfNeededForUser(Ljava/lang/String;I)V
+PLcom/android/server/pm/PackageManagerService;->clearIntentFilterVerificationsLPw(Ljava/lang/String;I)V
+HPLcom/android/server/pm/PackageManagerService;->clearPackagePreferredActivitiesLPw(Ljava/lang/String;Landroid/util/SparseBooleanArray;I)V
+PLcom/android/server/pm/PackageManagerService;->clearPackageStateForUserLIF(Lcom/android/server/pm/PackageSetting;ILcom/android/server/pm/PackageManagerService$PackageRemovedInfo;I)V
 HSPLcom/android/server/pm/PackageManagerService;->collectAbsoluteCodePaths()Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->collectCertificatesLI(Lcom/android/server/pm/PackageSetting;Landroid/content/pm/parsing/ParsedPackage;ZZ)V
 HSPLcom/android/server/pm/PackageManagerService;->collectSharedLibraryInfos(Landroid/content/pm/parsing/AndroidPackage;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)Ljava/util/ArrayList;
 HSPLcom/android/server/pm/PackageManagerService;->collectSharedLibraryInfos(Ljava/util/List;[J[[Ljava/lang/String;Ljava/lang/String;ZILjava/util/ArrayList;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)Ljava/util/ArrayList;
 HSPLcom/android/server/pm/PackageManagerService;->commitPackageSettings(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/PackageSetting;IZLcom/android/server/pm/PackageManagerService$ReconciledPackage;)V
-PLcom/android/server/pm/PackageManagerService;->commitPackagesLocked(Lcom/android/server/pm/PackageManagerService$CommitRequest;)V
+HPLcom/android/server/pm/PackageManagerService;->commitPackagesLocked(Lcom/android/server/pm/PackageManagerService$CommitRequest;)V
 HSPLcom/android/server/pm/PackageManagerService;->commitReconciledScanResultLocked(Lcom/android/server/pm/PackageManagerService$ReconciledPackage;)Landroid/content/pm/parsing/AndroidPackage;
 HSPLcom/android/server/pm/PackageManagerService;->commitSharedLibraryInfoLocked(Landroid/content/pm/SharedLibraryInfo;)V
 HSPLcom/android/server/pm/PackageManagerService;->configurePackageComponents(Landroid/content/pm/parsing/AndroidPackage;)V
-HPLcom/android/server/pm/PackageManagerService;->createForwardingResolveInfo(Lcom/android/server/pm/CrossProfileIntentFilter;Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo;
-HPLcom/android/server/pm/PackageManagerService;->createForwardingResolveInfoUnchecked(Landroid/content/IntentFilter;II)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->createForwardingResolveInfo(Lcom/android/server/pm/CrossProfileIntentFilter;Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->createForwardingResolveInfoUnchecked(Landroid/content/IntentFilter;II)Landroid/content/pm/ResolveInfo;
 PLcom/android/server/pm/PackageManagerService;->createInstallArgs(Lcom/android/server/pm/PackageManagerService$InstallParams;)Lcom/android/server/pm/PackageManagerService$InstallArgs;
-PLcom/android/server/pm/PackageManagerService;->createInstallArgsForExisting(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Lcom/android/server/pm/PackageManagerService$InstallArgs;
+HSPLcom/android/server/pm/PackageManagerService;->createInstallArgsForExisting(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Lcom/android/server/pm/PackageManagerService$InstallArgs;
+PLcom/android/server/pm/PackageManagerService;->createNewUser(ILjava/util/Set;[Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->createPackageInstalledInfo(I)Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;
+HPLcom/android/server/pm/PackageManagerService;->currentToCanonicalPackageNames([Ljava/lang/String;)[Ljava/lang/String;
 PLcom/android/server/pm/PackageManagerService;->decompressPackage(Ljava/lang/String;Ljava/lang/String;)Ljava/io/File;
+PLcom/android/server/pm/PackageManagerService;->deleteApplicationCacheFiles(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)V
+PLcom/android/server/pm/PackageManagerService;->deleteApplicationCacheFilesAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageDataObserver;)V
 PLcom/android/server/pm/PackageManagerService;->deleteInstalledPackageLIF(Lcom/android/server/pm/PackageSetting;ZI[ILcom/android/server/pm/PackageManagerService$PackageRemovedInfo;Z)V
+HPLcom/android/server/pm/PackageManagerService;->deleteOatArtifactsOfPackage(Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->deletePackageAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageDeleteObserver;II)V
+PLcom/android/server/pm/PackageManagerService;->deletePackageLIF(Ljava/lang/String;Landroid/os/UserHandle;Z[IILcom/android/server/pm/PackageManagerService$PackageRemovedInfo;ZLandroid/content/pm/parsing/ParsedPackage;)Z
+HPLcom/android/server/pm/PackageManagerService;->deletePackageVersioned(Landroid/content/pm/VersionedPackage;Landroid/content/pm/IPackageDeleteObserver2;II)V
+HPLcom/android/server/pm/PackageManagerService;->deletePackageX(Ljava/lang/String;JII)I
+PLcom/android/server/pm/PackageManagerService;->deleteSystemPackageLIF(Lcom/android/server/pm/PackageManagerService$DeletePackageAction;Lcom/android/server/pm/PackageSetting;[IILcom/android/server/pm/PackageManagerService$PackageRemovedInfo;Z)V
 HSPLcom/android/server/pm/PackageManagerService;->deleteTempPackageFiles()V
+PLcom/android/server/pm/PackageManagerService;->destroyAppDataLIF(Landroid/content/pm/parsing/AndroidPackage;II)V
+HPLcom/android/server/pm/PackageManagerService;->destroyAppDataLeafLIF(Landroid/content/pm/parsing/AndroidPackage;II)V
+PLcom/android/server/pm/PackageManagerService;->destroyAppProfilesLIF(Landroid/content/pm/parsing/AndroidPackage;)V
+PLcom/android/server/pm/PackageManagerService;->destroyAppProfilesLeafLIF(Landroid/content/pm/parsing/AndroidPackage;)V
 HSPLcom/android/server/pm/PackageManagerService;->disableSkuSpecificApps()V
+PLcom/android/server/pm/PackageManagerService;->disableSystemPackageLPw(Landroid/content/pm/parsing/AndroidPackage;)Z
 HPLcom/android/server/pm/PackageManagerService;->doSendBroadcast(Landroid/app/IActivityManager;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[IZ)V
+HSPLcom/android/server/pm/PackageManagerService;->dropNonSystemPackages([Ljava/lang/String;)[Ljava/lang/String;
 HPLcom/android/server/pm/PackageManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/pm/PackageManagerService;->dumpCompilerStatsLPr(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/pm/PackageManagerService;->dumpDexoptStateLPr(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/pm/PackageManagerService;->dumpDomainString(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->dumpFeaturesProto(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/pm/PackageManagerService;->dumpCompilerStatsLPr(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService;->dumpDexoptStateLPr(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService;->dumpDomainString(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->dumpFeaturesProto(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/pm/PackageManagerService;->dumpProto(Ljava/io/FileDescriptor;)V
-PLcom/android/server/pm/PackageManagerService;->dumpSharedLibrariesProto(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/pm/PackageManagerService;->dumpSharedLibrariesProto(Landroid/util/proto/ProtoOutputStream;)V
+PLcom/android/server/pm/PackageManagerService;->enableSystemPackageLPw(Landroid/content/pm/parsing/AndroidPackage;)V
+PLcom/android/server/pm/PackageManagerService;->enforceAdjustRuntimePermissionsPolicyOrUpgradeRuntimePermissions(Ljava/lang/String;)V
 PLcom/android/server/pm/PackageManagerService;->enforceCanSetPackagesSuspendedAsUser(Ljava/lang/String;IILjava/lang/String;)V
-PLcom/android/server/pm/PackageManagerService;->enforceOwnerRights(Ljava/lang/String;I)V
+HPLcom/android/server/pm/PackageManagerService;->enforceOwnerRights(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService;->enforceSystemOrRoot(Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerService;->ensureSystemPackageName(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->ensureSystemPackageNames([Ljava/lang/String;)[Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->executeDeletePackageLIF(Lcom/android/server/pm/PackageManagerService$DeletePackageAction;Ljava/lang/String;Z[IZLandroid/content/pm/parsing/ParsedPackage;)V
-PLcom/android/server/pm/PackageManagerService;->executePostCommitSteps(Lcom/android/server/pm/PackageManagerService$CommitRequest;)V
+HPLcom/android/server/pm/PackageManagerService;->executeDeletePackageLIF(Lcom/android/server/pm/PackageManagerService$DeletePackageAction;Ljava/lang/String;Z[IZLandroid/content/pm/parsing/ParsedPackage;)V
+HPLcom/android/server/pm/PackageManagerService;->executePostCommitSteps(Lcom/android/server/pm/PackageManagerService$CommitRequest;)V
 HSPLcom/android/server/pm/PackageManagerService;->executeSharedLibrariesUpdateLPr(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;Ljava/util/ArrayList;)V
+PLcom/android/server/pm/PackageManagerService;->extendVerificationTimeout(IIJ)V
 PLcom/android/server/pm/PackageManagerService;->extrasForInstallResult(Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;)Landroid/os/Bundle;
-PLcom/android/server/pm/PackageManagerService;->filterCandidatesWithDomainPreferredActivitiesLPr(Landroid/content/Intent;ILjava/util/List;Lcom/android/server/pm/PackageManagerService$CrossProfileDomainInfo;I)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->filterCandidatesWithDomainPreferredActivitiesLPr(Landroid/content/Intent;ILjava/util/List;Lcom/android/server/pm/PackageManagerService$CrossProfileDomainInfo;I)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->filterIfNotSystemUser(Ljava/util/List;I)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->filterSharedLibPackageLPr(Lcom/android/server/pm/PackageSetting;III)Z
-PLcom/android/server/pm/PackageManagerService;->findPersistentPreferredActivityLP(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;ZI)Landroid/content/pm/ResolveInfo;
-HPLcom/android/server/pm/PackageManagerService;->findPreferredActivityNotLocked(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;IZZZI)Landroid/content/pm/ResolveInfo;
-HPLcom/android/server/pm/PackageManagerService;->findSharedLibraries(Landroid/content/pm/parsing/AndroidPackage;)Ljava/util/List;
-HPLcom/android/server/pm/PackageManagerService;->findSharedLibrariesRecursive(Landroid/content/pm/SharedLibraryInfo;Ljava/util/ArrayList;Ljava/util/Set;)V
-HPLcom/android/server/pm/PackageManagerService;->findSharedNonSystemLibraries(Landroid/content/pm/parsing/AndroidPackage;)Ljava/util/List;
-PLcom/android/server/pm/PackageManagerService;->finishPackageInstall(IZ)V
+HPLcom/android/server/pm/PackageManagerService;->findPersistentPreferredActivity(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->findPersistentPreferredActivityLP(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;ZI)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->findPreferredActivityNotLocked(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;IZZZI)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->findSharedLibraries(Landroid/content/pm/parsing/AndroidPackage;)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerService;->findSharedLibrariesRecursive(Landroid/content/pm/SharedLibraryInfo;Ljava/util/ArrayList;Ljava/util/Set;)V
+HSPLcom/android/server/pm/PackageManagerService;->findSharedNonSystemLibraries(Landroid/content/pm/parsing/AndroidPackage;)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->finishPackageInstall(IZ)V
 HSPLcom/android/server/pm/PackageManagerService;->fixProcessName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/pm/PackageManagerService;->fixUpInstallReason(Ljava/lang/String;II)I
-HPLcom/android/server/pm/PackageManagerService;->forEachInstalledPackage(Ljava/util/function/Consumer;I)V
+HSPLcom/android/server/pm/PackageManagerService;->forEachInstalledPackage(Ljava/util/function/Consumer;I)V
 HSPLcom/android/server/pm/PackageManagerService;->forEachPackage(Ljava/util/function/Consumer;)V
-PLcom/android/server/pm/PackageManagerService;->freeStorage(Ljava/lang/String;JI)V
-PLcom/android/server/pm/PackageManagerService;->freeStorageAndNotify(Ljava/lang/String;JILandroid/content/pm/IPackageDataObserver;)V
+HPLcom/android/server/pm/PackageManagerService;->freeStorage(Ljava/lang/String;JI)V
+HPLcom/android/server/pm/PackageManagerService;->freeStorageAndNotify(Ljava/lang/String;JILandroid/content/pm/IPackageDataObserver;)V
+PLcom/android/server/pm/PackageManagerService;->freezePackage(Ljava/lang/String;ILjava/lang/String;)Lcom/android/server/pm/PackageManagerService$PackageFreezer;
+PLcom/android/server/pm/PackageManagerService;->freezePackage(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/pm/PackageManagerService$PackageFreezer;
+PLcom/android/server/pm/PackageManagerService;->freezePackageForDelete(Ljava/lang/String;IILjava/lang/String;)Lcom/android/server/pm/PackageManagerService$PackageFreezer;
+PLcom/android/server/pm/PackageManagerService;->freezePackageForInstall(Ljava/lang/String;IILjava/lang/String;)Lcom/android/server/pm/PackageManagerService$PackageFreezer;
 PLcom/android/server/pm/PackageManagerService;->freezePackageForInstall(Ljava/lang/String;ILjava/lang/String;)Lcom/android/server/pm/PackageManagerService$PackageFreezer;
 HSPLcom/android/server/pm/PackageManagerService;->generateApplicationInfoFromSettingsLPw(Ljava/lang/String;III)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/pm/PackageManagerService;->generatePackageInfo(Lcom/android/server/pm/PackageSetting;II)Landroid/content/pm/PackageInfo;
 PLcom/android/server/pm/PackageManagerService;->getActiveLauncherPackageName(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getActivityInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo;
 HSPLcom/android/server/pm/PackageManagerService;->getActivityInfoInternal(Landroid/content/ComponentName;III)Landroid/content/pm/ActivityInfo;
-PLcom/android/server/pm/PackageManagerService;->getAllIntentFilters(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/PackageManagerService;->getAllIntentFilters(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/PackageManagerService;->getAllowedSharedLibInfos(Lcom/android/server/pm/PackageManagerService$ScanResult;Ljava/util/Map;)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService;->getAppOpPermissionPackages(Ljava/lang/String;)[Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getAppPredictionServicePackageName()Ljava/lang/String;
-HPLcom/android/server/pm/PackageManagerService;->getApplicationEnabledSetting(Ljava/lang/String;I)I
+HSPLcom/android/server/pm/PackageManagerService;->getApplicationEnabledSetting(Ljava/lang/String;I)I
+HPLcom/android/server/pm/PackageManagerService;->getApplicationHiddenSettingAsUser(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageManagerService;->getApplicationInfo(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/pm/PackageManagerService;->getApplicationInfoInternal(Ljava/lang/String;III)Landroid/content/pm/ApplicationInfo;
 PLcom/android/server/pm/PackageManagerService;->getArtManager()Landroid/content/pm/dex/IArtManager;
 HSPLcom/android/server/pm/PackageManagerService;->getAttentionServicePackageName()Ljava/lang/String;
 HPLcom/android/server/pm/PackageManagerService;->getBlockUninstallForUser(Ljava/lang/String;I)Z
-PLcom/android/server/pm/PackageManagerService;->getChangedPackages(II)Landroid/content/pm/ChangedPackages;
+PLcom/android/server/pm/PackageManagerService;->getBlockUninstallForUsers(Ljava/lang/String;[I)[I
+HPLcom/android/server/pm/PackageManagerService;->getChangedPackages(II)Landroid/content/pm/ChangedPackages;
+PLcom/android/server/pm/PackageManagerService;->getCompilerPackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
 HSPLcom/android/server/pm/PackageManagerService;->getComponentEnabledSetting(Landroid/content/ComponentName;I)I
-PLcom/android/server/pm/PackageManagerService;->getContentCaptureServicePackageName()Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->getCrossProfileDomainPreferredLpr(Landroid/content/Intent;Ljava/lang/String;III)Lcom/android/server/pm/PackageManagerService$CrossProfileDomainInfo;
+HSPLcom/android/server/pm/PackageManagerService;->getContentCaptureServicePackageName()Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->getCrossProfileDomainPreferredLpr(Landroid/content/Intent;Ljava/lang/String;III)Lcom/android/server/pm/PackageManagerService$CrossProfileDomainInfo;
 HPLcom/android/server/pm/PackageManagerService;->getDeclaredSharedLibraries(Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/pm/PackageManagerService;->getDefaultAppsBackup(I)[B
 HSPLcom/android/server/pm/PackageManagerService;->getDefaultDisplayMetrics(Landroid/hardware/display/DisplayManager;Landroid/util/DisplayMetrics;)V
 HSPLcom/android/server/pm/PackageManagerService;->getDefaultHomeActivity(I)Landroid/content/ComponentName;
+PLcom/android/server/pm/PackageManagerService;->getDefaultTextClassifierPackageName()Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->getDefaultVerificationResponse(Landroid/os/UserHandle;)I
 HSPLcom/android/server/pm/PackageManagerService;->getDeviceConfiguratorPackageName()Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->getDexManager()Lcom/android/server/pm/dex/DexManager;
+HSPLcom/android/server/pm/PackageManagerService;->getDexManager()Lcom/android/server/pm/dex/DexManager;
 HSPLcom/android/server/pm/PackageManagerService;->getDocumenterPackageName()Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->getDomainVerificationStatusLPr(Lcom/android/server/pm/PackageSetting;I)J
-PLcom/android/server/pm/PackageManagerService;->getHarmfulAppWarning(Ljava/lang/String;I)Ljava/lang/CharSequence;
-PLcom/android/server/pm/PackageManagerService;->getHomeActivities(Ljava/util/List;)Landroid/content/ComponentName;
+HPLcom/android/server/pm/PackageManagerService;->getDomainVerificationStatusLPr(Lcom/android/server/pm/PackageSetting;I)J
+HSPLcom/android/server/pm/PackageManagerService;->getHarmfulAppWarning(Ljava/lang/String;I)Ljava/lang/CharSequence;
+HPLcom/android/server/pm/PackageManagerService;->getHomeActivities(Ljava/util/List;)Landroid/content/ComponentName;
 HSPLcom/android/server/pm/PackageManagerService;->getHomeActivitiesAsUser(Ljava/util/List;I)Landroid/content/ComponentName;
 HSPLcom/android/server/pm/PackageManagerService;->getHomeIntent()Landroid/content/Intent;
 HSPLcom/android/server/pm/PackageManagerService;->getIncidentReportApproverPackageName()Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->getInstallReason(Ljava/lang/String;I)I
 HSPLcom/android/server/pm/PackageManagerService;->getInstallSourceLocked(Ljava/lang/String;I)Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/PackageManagerService;->getInstalledApplications(II)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/PackageManagerService;->getInstalledApplicationsListInternal(III)Ljava/util/List;
-PLcom/android/server/pm/PackageManagerService;->getInstalledModules(I)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->getInstalledModules(I)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->getInstalledPackages(II)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/PackageManagerService;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->getInstantAppAndroidId(Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->getInstantAppAndroidId(Ljava/lang/String;I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getInstantAppInstallerLPr()Landroid/content/pm/ActivityInfo;
 HSPLcom/android/server/pm/PackageManagerService;->getInstantAppPackageName(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getInstantAppResolverLPr()Landroid/util/Pair;
 PLcom/android/server/pm/PackageManagerService;->getInstantAppResolverSettingsComponent()Landroid/content/ComponentName;
 HSPLcom/android/server/pm/PackageManagerService;->getInstantAppResolverSettingsLPr(Landroid/content/ComponentName;)Landroid/content/ComponentName;
 PLcom/android/server/pm/PackageManagerService;->getInstantApps(I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/PackageManagerService;->getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo;
 PLcom/android/server/pm/PackageManagerService;->getIntentFilterVerificationBackup(I)[B
-PLcom/android/server/pm/PackageManagerService;->getIntentFilterVerifications(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/PackageManagerService;->getIntentFilterVerifications(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/PackageManagerService;->getIntentFilterVerifierComponentNameLPr()Landroid/content/ComponentName;
+HPLcom/android/server/pm/PackageManagerService;->getIntentVerificationStatus(Ljava/lang/String;I)I
 PLcom/android/server/pm/PackageManagerService;->getLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;I)Landroid/content/pm/ResolveInfo;
 HSPLcom/android/server/pm/PackageManagerService;->getLatestSharedLibraVersionLPr(Landroid/content/pm/parsing/AndroidPackage;)Landroid/content/pm/SharedLibraryInfo;
 HSPLcom/android/server/pm/PackageManagerService;->getMatchingCrossProfileIntentFilters(Landroid/content/Intent;Ljava/lang/String;I)Ljava/util/List;
 HPLcom/android/server/pm/PackageManagerService;->getModuleInfo(Ljava/lang/String;I)Landroid/content/pm/ModuleInfo;
 HSPLcom/android/server/pm/PackageManagerService;->getNameForUid(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getNamesForUids([I)[Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->getNextCodePath(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
-PLcom/android/server/pm/PackageManagerService;->getOptimizablePackages()Landroid/util/ArraySet;
-PLcom/android/server/pm/PackageManagerService;->getOrCreateCompilerPackageStats(Landroid/content/pm/parsing/AndroidPackage;)Lcom/android/server/pm/CompilerStats$PackageStats;
-PLcom/android/server/pm/PackageManagerService;->getOrCreateCompilerPackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
+HPLcom/android/server/pm/PackageManagerService;->getNextCodePath(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
+PLcom/android/server/pm/PackageManagerService;->getOatDir(Landroid/content/pm/parsing/AndroidPackage;)Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->getOptimizablePackages()Landroid/util/ArraySet;
+HSPLcom/android/server/pm/PackageManagerService;->getOrCreateCompilerPackageStats(Landroid/content/pm/parsing/AndroidPackage;)Lcom/android/server/pm/CompilerStats$PackageStats;
+HSPLcom/android/server/pm/PackageManagerService;->getOrCreateCompilerPackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
 HSPLcom/android/server/pm/PackageManagerService;->getOriginalPackageLocked(Landroid/content/pm/parsing/AndroidPackage;Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageManagerService;->getPackageGids(Ljava/lang/String;II)[I
 HSPLcom/android/server/pm/PackageManagerService;->getPackageInfo(Ljava/lang/String;II)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/pm/PackageManagerService;->getPackageInfoInternal(Ljava/lang/String;JIII)Landroid/content/pm/PackageInfo;
 HPLcom/android/server/pm/PackageManagerService;->getPackageInfoVersioned(Landroid/content/pm/VersionedPackage;II)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/pm/PackageManagerService;->getPackageInstaller()Landroid/content/pm/IPackageInstaller;
+PLcom/android/server/pm/PackageManagerService;->getPackageInstallerPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getPackageSetting(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
-PLcom/android/server/pm/PackageManagerService;->getPackageTargetSdkVersionLockedLPr(Ljava/lang/String;)I
+HSPLcom/android/server/pm/PackageManagerService;->getPackageTargetSdkVersionLockedLPr(Ljava/lang/String;)I
 HSPLcom/android/server/pm/PackageManagerService;->getPackageUid(Ljava/lang/String;II)I
+HSPLcom/android/server/pm/PackageManagerService;->getPackageUidInternal(Ljava/lang/String;III)I
 PLcom/android/server/pm/PackageManagerService;->getPackages()Ljava/util/Collection;
 HPLcom/android/server/pm/PackageManagerService;->getPackagesForSharedUserIdLocked(Ljava/lang/String;I)[Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getPackagesForUid(I)[Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getPackagesHoldingPermissions([Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
-HPLcom/android/server/pm/PackageManagerService;->getPackagesUsingSharedLibraryLPr(Landroid/content/pm/SharedLibraryInfo;II)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerService;->getPackagesUsingSharedLibraryLPr(Landroid/content/pm/SharedLibraryInfo;II)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->getPermissionControllerPackageName()Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->getPersistentApplications(I)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/pm/PackageManagerService;->getPersistentApplicationsInternal(I)Ljava/util/List;
-PLcom/android/server/pm/PackageManagerService;->getPrebuildProfilePath(Landroid/content/pm/parsing/AndroidPackage;)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->getPersistentApplications(I)Landroid/content/pm/ParceledListSlice;
+HSPLcom/android/server/pm/PackageManagerService;->getPersistentApplicationsInternal(I)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->getPrebuildProfilePath(Landroid/content/pm/parsing/AndroidPackage;)Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I
 PLcom/android/server/pm/PackageManagerService;->getPreferredActivityBackup(I)[B
-PLcom/android/server/pm/PackageManagerService;->getProfileParent(I)Landroid/content/pm/UserInfo;
-PLcom/android/server/pm/PackageManagerService;->getProviderInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ProviderInfo;
+HSPLcom/android/server/pm/PackageManagerService;->getProcessesForUidLocked(I)Landroid/util/ArrayMap;
+HPLcom/android/server/pm/PackageManagerService;->getProfileParent(I)Landroid/content/pm/UserInfo;
+HPLcom/android/server/pm/PackageManagerService;->getProviderInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ProviderInfo;
 HSPLcom/android/server/pm/PackageManagerService;->getRealPackageName(Landroid/content/pm/parsing/AndroidPackage;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getReceiverInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo;
 HSPLcom/android/server/pm/PackageManagerService;->getRequiredButNotReallyRequiredVerifierLPr()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getRequiredInstallerLPr()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getRequiredPermissionControllerLPr()Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->getRequiredServicesExtensionPackageLPr()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getRequiredSharedLibraryLPr(Ljava/lang/String;I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getRequiredUninstallerLPr()Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->getRuntimePermissionsVersion(I)I
+HSPLcom/android/server/pm/PackageManagerService;->getRetailDemoPackageName()Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->getRuntimePermissionsVersion(I)I
 HSPLcom/android/server/pm/PackageManagerService;->getServiceInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ServiceInfo;
-PLcom/android/server/pm/PackageManagerService;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getSettingsVersionForPackage(Landroid/content/pm/parsing/AndroidPackage;)Lcom/android/server/pm/Settings$VersionInfo;
-PLcom/android/server/pm/PackageManagerService;->getSetupWizardPackageName()Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->getSetupWizardPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getSetupWizardPackageNameImpl()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getSharedLibLatestVersionSetting(Lcom/android/server/pm/PackageManagerService$ScanResult;)Lcom/android/server/pm/PackageSetting;
 HPLcom/android/server/pm/PackageManagerService;->getSharedLibraries(Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/PackageManagerService;->getSharedLibraryInfo(Ljava/lang/String;JLjava/util/Map;Ljava/util/Map;)Landroid/content/pm/SharedLibraryInfo;
 HSPLcom/android/server/pm/PackageManagerService;->getSharedLibraryInfoLPr(Ljava/lang/String;J)Landroid/content/pm/SharedLibraryInfo;
 PLcom/android/server/pm/PackageManagerService;->getSharedSystemSharedLibraryPackageName()Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->getSharedUserPackagesForPackageLocked(Ljava/lang/String;I)[Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getStorageManagerPackageName()Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->getSystemAvailableFeatures()Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/pm/PackageManagerService;->getSystemCaptionsServicePackageName()Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->getSuspendedPackageAppExtrasInternal(Ljava/lang/String;I)Landroid/os/Bundle;
+HPLcom/android/server/pm/PackageManagerService;->getSystemAvailableFeatures()Landroid/content/pm/ParceledListSlice;
+HSPLcom/android/server/pm/PackageManagerService;->getSystemCaptionsServicePackageName()Ljava/lang/String;
 HPLcom/android/server/pm/PackageManagerService;->getSystemSharedLibraryNames()[Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getSystemTextClassifierPackageName()Ljava/lang/String;
-HPLcom/android/server/pm/PackageManagerService;->getSystemTextClassifierPackages()[Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->getSystemTextClassifierPackages()[Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getTelephonyPackageNames()[Ljava/lang/String;
-HPLcom/android/server/pm/PackageManagerService;->getUidTargetSdkVersionLockedLPr(I)I
+HSPLcom/android/server/pm/PackageManagerService;->getUidTargetSdkVersionLockedLPr(I)I
 PLcom/android/server/pm/PackageManagerService;->getUnknownSourcesSettings()I
 HPLcom/android/server/pm/PackageManagerService;->getUnsuspendablePackagesForUser([Ljava/lang/String;I)[Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->getVerificationTimeout()J
+HPLcom/android/server/pm/PackageManagerService;->getUnusedPackages(J)Ljava/util/Set;
+HPLcom/android/server/pm/PackageManagerService;->getVerificationTimeout()J
 HSPLcom/android/server/pm/PackageManagerService;->getWellbeingPackageName()Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/PackageManagerService;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
 HPLcom/android/server/pm/PackageManagerService;->handlePackagePostInstall(Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;ZZZ[Ljava/lang/String;Ljava/util/List;ZLjava/lang/String;Landroid/content/pm/IPackageInstallObserver2;)V
 PLcom/android/server/pm/PackageManagerService;->hasDomainURLs(Landroid/content/pm/parsing/AndroidPackage;)Z
 HSPLcom/android/server/pm/PackageManagerService;->hasNonNegativePriority(Ljava/util/List;)Z
+HPLcom/android/server/pm/PackageManagerService;->hasString(Ljava/util/List;Ljava/util/List;)Z
 HSPLcom/android/server/pm/PackageManagerService;->hasSystemFeature(Ljava/lang/String;I)Z
-PLcom/android/server/pm/PackageManagerService;->hasSystemUidErrors()Z
-PLcom/android/server/pm/PackageManagerService;->hasValidDomains(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;)Z
-PLcom/android/server/pm/PackageManagerService;->installExistingPackageAsUser(Ljava/lang/String;IIILjava/util/List;)I
-PLcom/android/server/pm/PackageManagerService;->installExistingPackageAsUser(Ljava/lang/String;IIILjava/util/List;Landroid/content/IntentSender;)I
-PLcom/android/server/pm/PackageManagerService;->installPackagesLI(Ljava/util/List;)V
+HSPLcom/android/server/pm/PackageManagerService;->hasSystemUidErrors()Z
+HPLcom/android/server/pm/PackageManagerService;->hasValidDomains(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;)Z
+HPLcom/android/server/pm/PackageManagerService;->installExistingPackageAsUser(Ljava/lang/String;IIILjava/util/List;)I
+HPLcom/android/server/pm/PackageManagerService;->installExistingPackageAsUser(Ljava/lang/String;IIILjava/util/List;Landroid/content/IntentSender;)I
+PLcom/android/server/pm/PackageManagerService;->installPackageFromSystemLIF(Ljava/lang/String;[I[ILcom/android/server/pm/permission/PermissionsState;Z)Landroid/content/pm/parsing/AndroidPackage;
+HPLcom/android/server/pm/PackageManagerService;->installPackagesLI(Ljava/util/List;)V
 PLcom/android/server/pm/PackageManagerService;->installPackagesTracedLI(Ljava/util/List;)V
-PLcom/android/server/pm/PackageManagerService;->installStage(Lcom/android/server/pm/PackageManagerService$ActiveInstallSession;)V
+HPLcom/android/server/pm/PackageManagerService;->installStage(Lcom/android/server/pm/PackageManagerService$ActiveInstallSession;)V
+PLcom/android/server/pm/PackageManagerService;->installStage(Ljava/util/List;)V
 PLcom/android/server/pm/PackageManagerService;->installStubPackageLI(Landroid/content/pm/parsing/AndroidPackage;II)Landroid/content/pm/parsing/AndroidPackage;
 HSPLcom/android/server/pm/PackageManagerService;->installSystemStubPackages(Ljava/util/List;I)V
 HSPLcom/android/server/pm/PackageManagerService;->installWhitelistedSystemPackages()V
+PLcom/android/server/pm/PackageManagerService;->isCallerAllowedToSilentlyUninstall(ILjava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService;->isCallerSameApp(Ljava/lang/String;I)Z
+PLcom/android/server/pm/PackageManagerService;->isCallerVerifier(I)Z
 PLcom/android/server/pm/PackageManagerService;->isCompatSignatureUpdateNeeded(Landroid/content/pm/parsing/AndroidPackage;)Z
 HSPLcom/android/server/pm/PackageManagerService;->isCompatSignatureUpdateNeeded(Lcom/android/server/pm/Settings$VersionInfo;)Z
 HSPLcom/android/server/pm/PackageManagerService;->isDeviceUpgrading()Z
 HSPLcom/android/server/pm/PackageManagerService;->isExternal(Landroid/content/pm/parsing/AndroidPackage;)Z
 HSPLcom/android/server/pm/PackageManagerService;->isExternal(Lcom/android/server/pm/PackageSetting;)Z
 HSPLcom/android/server/pm/PackageManagerService;->isFirstBoot()Z
-PLcom/android/server/pm/PackageManagerService;->isHistoricalPackageUsageAvailable()Z
-PLcom/android/server/pm/PackageManagerService;->isHomeIntent(Landroid/content/Intent;)Z
+HSPLcom/android/server/pm/PackageManagerService;->isHistoricalPackageUsageAvailable()Z
+HSPLcom/android/server/pm/PackageManagerService;->isHomeIntent(Landroid/content/Intent;)Z
 HSPLcom/android/server/pm/PackageManagerService;->isInstantApp(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageManagerService;->isInstantAppInternal(Ljava/lang/String;II)Z
 HSPLcom/android/server/pm/PackageManagerService;->isInstantAppResolutionAllowed(Landroid/content/Intent;Ljava/util/List;IZ)Z
+PLcom/android/server/pm/PackageManagerService;->isIntegrityVerificationEnabled()Z
 PLcom/android/server/pm/PackageManagerService;->isOdmApp(Landroid/content/pm/parsing/AndroidPackage;)Z
 PLcom/android/server/pm/PackageManagerService;->isOemApp(Landroid/content/pm/parsing/AndroidPackage;)Z
 HSPLcom/android/server/pm/PackageManagerService;->isOnlyCoreApps()Z
+PLcom/android/server/pm/PackageManagerService;->isOrphaned(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService;->isPackageAvailable(Ljava/lang/String;I)Z
 HPLcom/android/server/pm/PackageManagerService;->isPackageDeviceAdmin(Ljava/lang/String;I)Z
+PLcom/android/server/pm/PackageManagerService;->isPackageDeviceAdminOnAnyUser(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService;->isPackageRenamed(Landroid/content/pm/parsing/AndroidPackage;Ljava/lang/String;)Z
-HPLcom/android/server/pm/PackageManagerService;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
+HSPLcom/android/server/pm/PackageManagerService;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
 PLcom/android/server/pm/PackageManagerService;->isPrivilegedApp(Landroid/content/pm/parsing/AndroidPackage;)Z
 PLcom/android/server/pm/PackageManagerService;->isProductApp(Landroid/content/pm/parsing/AndroidPackage;)Z
 HSPLcom/android/server/pm/PackageManagerService;->isProtectedBroadcast(Ljava/lang/String;)Z
@@ -14847,76 +24597,111 @@
 PLcom/android/server/pm/PackageManagerService;->isStorageLow()Z
 HSPLcom/android/server/pm/PackageManagerService;->isSystemApp(Landroid/content/pm/parsing/AndroidPackage;)Z
 PLcom/android/server/pm/PackageManagerService;->isSystemApp(Lcom/android/server/pm/PackageSetting;)Z
-PLcom/android/server/pm/PackageManagerService;->isUidPrivileged(I)Z
-HPLcom/android/server/pm/PackageManagerService;->isUserEnabled(I)Z
-PLcom/android/server/pm/PackageManagerService;->isUserRestricted(ILjava/lang/String;)Z
+HPLcom/android/server/pm/PackageManagerService;->isUidPrivileged(I)Z
+PLcom/android/server/pm/PackageManagerService;->isUpdatedSystemApp(Lcom/android/server/pm/PackageSetting;)Z
+HSPLcom/android/server/pm/PackageManagerService;->isUserEnabled(I)Z
+HPLcom/android/server/pm/PackageManagerService;->isUserRestricted(ILjava/lang/String;)Z
 PLcom/android/server/pm/PackageManagerService;->isVendorApp(Landroid/content/pm/parsing/AndroidPackage;)Z
 PLcom/android/server/pm/PackageManagerService;->isVerificationEnabled(III)Z
-PLcom/android/server/pm/PackageManagerService;->killApplication(Ljava/lang/String;IILjava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService;->killApplication(Ljava/lang/String;IILjava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->killApplication(Ljava/lang/String;ILjava/lang/String;)V
 PLcom/android/server/pm/PackageManagerService;->lambda$commitPackageSettings$15$PackageManagerService(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;Ljava/util/ArrayList;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$deleteApplicationCacheFilesAsUser$28$PackageManagerService(Landroid/content/pm/parsing/AndroidPackage;IIILandroid/content/pm/IPackageDataObserver;Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$deleteApplicationCacheFilesAsUser$29$PackageManagerService(Landroid/content/pm/parsing/AndroidPackage;IIILandroid/content/pm/IPackageDataObserver;Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$deletePackageVersioned$26$PackageManagerService(Ljava/lang/String;IZZJII[ILandroid/content/pm/IPackageDeleteObserver2;Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$deletePackageVersioned$27$PackageManagerService(Ljava/lang/String;IZZJII[ILandroid/content/pm/IPackageDeleteObserver2;Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerService;->lambda$executeSharedLibrariesUpdateLPr$14(Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;)V
 PLcom/android/server/pm/PackageManagerService;->lambda$freeStorageAndNotify$10$PackageManagerService(Ljava/lang/String;JILandroid/content/pm/IPackageDataObserver;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$installExistingPackageAsUser$19$PackageManagerService(Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Landroid/content/IntentSender;)V
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$0(Ljava/lang/Object;Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/ComponentResolver;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$1(Landroid/content/Context;Ljava/lang/Object;Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$2(Landroid/content/Context;Lcom/android/server/pm/Installer;Ljava/lang/Object;ZLjava/lang/Object;Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$3(Ljava/lang/Object;Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/Settings;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$4(Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/AppsFilter;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$5(Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/compat/PlatformCompat;
+HSPLcom/android/server/pm/PackageManagerService;->lambda$new$35$PackageManagerService(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/PackageManagerService;->lambda$new$36$PackageManagerService(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService;->lambda$new$7(Lcom/android/server/pm/ApexManager$ActiveApexInfo;)Lcom/android/server/pm/PackageManagerService$SystemPartition;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$new$8(Lcom/android/server/pm/PackageManagerService$SystemPartition;)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$new$9$PackageManagerService(Ljava/util/List;I)V
 PLcom/android/server/pm/PackageManagerService;->lambda$notifyFirstLaunch$22$PackageManagerService(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$postPreferredActivityChangedBroadcast$29(I)V
 HPLcom/android/server/pm/PackageManagerService;->lambda$postPreferredActivityChangedBroadcast$30(I)V
 HPLcom/android/server/pm/PackageManagerService;->lambda$processInstallRequestsAsync$21$PackageManagerService(ZLjava/util/List;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$removePackageDataLIF$28$PackageManagerService(Lcom/android/server/pm/PackageSetting;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$removeUnusedPackagesLPw$43$PackageManagerService(Ljava/lang/String;I)V
 HPLcom/android/server/pm/PackageManagerService;->lambda$sendMyPackageSuspendedOrUnsuspended$20$PackageManagerService(ZI[Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$sendPackageAddedForNewUsers$18$PackageManagerService([ILjava/lang/String;Z)V
 HPLcom/android/server/pm/PackageManagerService;->lambda$sendPackageBroadcast$16$PackageManagerService([ILjava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[I)V
 HSPLcom/android/server/pm/PackageManagerService;->lambda$static$17(Landroid/content/pm/ProviderInfo;Landroid/content/pm/ProviderInfo;)I
 HSPLcom/android/server/pm/PackageManagerService;->lambda$systemReady$36$PackageManagerService(I)V
+PLcom/android/server/pm/PackageManagerService;->lambda$systemReady$37$PackageManagerService(I)V
+HSPLcom/android/server/pm/PackageManagerService;->lambda$systemReady$38$PackageManagerService(I)V
+PLcom/android/server/pm/PackageManagerService;->lambda$updateDefaultHomeNotLocked$33$PackageManagerService(ILjava/lang/Boolean;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$updateDefaultHomeNotLocked$34$PackageManagerService(ILjava/lang/Boolean;)V
 HSPLcom/android/server/pm/PackageManagerService;->logAppProcessStartIfNeeded(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService;->main(Landroid/content/Context;Lcom/android/server/pm/Installer;ZZ)Lcom/android/server/pm/PackageManagerService;
-PLcom/android/server/pm/PackageManagerService;->matchComponentForVerifier(Ljava/lang/String;Ljava/util/List;)Landroid/content/ComponentName;
+PLcom/android/server/pm/PackageManagerService;->markPackageUninstalledForUserLPw(Lcom/android/server/pm/PackageSetting;Landroid/os/UserHandle;)V
+HPLcom/android/server/pm/PackageManagerService;->matchComponentForVerifier(Ljava/lang/String;Ljava/util/List;)Landroid/content/ComponentName;
 PLcom/android/server/pm/PackageManagerService;->matchVerifiers(Landroid/content/pm/PackageInfoLite;Ljava/util/List;Lcom/android/server/pm/PackageVerificationState;)Ljava/util/List;
 PLcom/android/server/pm/PackageManagerService;->mayDeletePackageLocked(Lcom/android/server/pm/PackageManagerService$PackageRemovedInfo;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;ILandroid/os/UserHandle;)Lcom/android/server/pm/PackageManagerService$DeletePackageAction;
 PLcom/android/server/pm/PackageManagerService;->maybeAddInstantAppInstaller(Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;IIZ)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->maybeAddInstantAppInstaller(Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;IIZZ)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->maybeClearProfilesForUpgradesLI(Lcom/android/server/pm/PackageSetting;Landroid/content/pm/parsing/AndroidPackage;)V
 HSPLcom/android/server/pm/PackageManagerService;->maybeMigrateAppDataLIF(Landroid/content/pm/parsing/AndroidPackage;I)Z
 PLcom/android/server/pm/PackageManagerService;->needsNetworkVerificationLPr(Landroid/content/pm/parsing/ComponentParseUtils$ParsedActivityIntentInfo;)Z
 HSPLcom/android/server/pm/PackageManagerService;->nonStaticSharedLibExistsLocked(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService;->normalizePackageNameLPr(Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/server/pm/PackageManagerService;->notifyDexLoad(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageManagerService;->notifyDexLoad(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->notifyFirstLaunch(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/pm/PackageManagerService;->notifyInstallObserver(Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Landroid/content/pm/IPackageInstallObserver2;)V
-PLcom/android/server/pm/PackageManagerService;->notifyPackageAdded(Ljava/lang/String;I)V
+PLcom/android/server/pm/PackageManagerService;->notifyInstallObserver(Ljava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService;->notifyPackageAdded(Ljava/lang/String;I)V
 PLcom/android/server/pm/PackageManagerService;->notifyPackageChanged(Ljava/lang/String;I)V
+HPLcom/android/server/pm/PackageManagerService;->notifyPackageRemoved(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService;->notifyPackageUse(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService;->notifyPackageUseLocked(Ljava/lang/String;I)V
 HPLcom/android/server/pm/PackageManagerService;->notifyPackagesReplacedReceived([Ljava/lang/String;)V
-PLcom/android/server/pm/PackageManagerService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
+PLcom/android/server/pm/PackageManagerService;->onNewUserCreated(I)V
+PLcom/android/server/pm/PackageManagerService;->onRestoreComplete(ILandroid/content/Context;Landroid/content/IntentSender;)V
+HSPLcom/android/server/pm/PackageManagerService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
 HSPLcom/android/server/pm/PackageManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/server/pm/PackageManagerService;->optimisticallyRegisterAppId(Lcom/android/server/pm/PackageManagerService$ScanResult;)Z
-PLcom/android/server/pm/PackageManagerService;->packageIsBrowser(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/PackageManagerService;->packageIsBrowser(Ljava/lang/String;I)Z
 PLcom/android/server/pm/PackageManagerService;->performBackupManagerRestore(IILcom/android/server/pm/PackageManagerService$PackageInstalledInfo;)Z
 PLcom/android/server/pm/PackageManagerService;->performDexOpt(Lcom/android/server/pm/dex/DexoptOptions;)Z
-PLcom/android/server/pm/PackageManagerService;->performDexOptInternal(Lcom/android/server/pm/dex/DexoptOptions;)I
-HPLcom/android/server/pm/PackageManagerService;->performDexOptInternalWithDependenciesLI(Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/dex/DexoptOptions;)I
-PLcom/android/server/pm/PackageManagerService;->performDexOptTraced(Lcom/android/server/pm/dex/DexoptOptions;)I
-PLcom/android/server/pm/PackageManagerService;->performDexOptUpgrade(Ljava/util/List;ZIZ)[I
+HSPLcom/android/server/pm/PackageManagerService;->performDexOptInternal(Lcom/android/server/pm/dex/DexoptOptions;)I
+HSPLcom/android/server/pm/PackageManagerService;->performDexOptInternalWithDependenciesLI(Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/dex/DexoptOptions;)I
+PLcom/android/server/pm/PackageManagerService;->performDexOptMode(Ljava/lang/String;ZLjava/lang/String;ZZLjava/lang/String;)Z
+HSPLcom/android/server/pm/PackageManagerService;->performDexOptTraced(Lcom/android/server/pm/dex/DexoptOptions;)I
+HSPLcom/android/server/pm/PackageManagerService;->performDexOptUpgrade(Ljava/util/List;ZIZ)[I
+PLcom/android/server/pm/PackageManagerService;->performDexOptWithStatus(Lcom/android/server/pm/dex/DexoptOptions;)I
 HSPLcom/android/server/pm/PackageManagerService;->performFstrimIfNeeded()V
 HPLcom/android/server/pm/PackageManagerService;->performRollbackManagerRestore(IILcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Lcom/android/server/pm/PackageManagerService$PostInstallData;)Z
+PLcom/android/server/pm/PackageManagerService;->postPreferredActivityChangedBroadcast(I)V
 HPLcom/android/server/pm/PackageManagerService;->prepareAppDataAfterInstallLIF(Landroid/content/pm/parsing/AndroidPackage;)V
 HSPLcom/android/server/pm/PackageManagerService;->prepareAppDataAndMigrateLIF(Landroid/content/pm/parsing/AndroidPackage;IIZ)V
+PLcom/android/server/pm/PackageManagerService;->prepareAppDataContentsLIF(Landroid/content/pm/parsing/AndroidPackage;II)V
 HSPLcom/android/server/pm/PackageManagerService;->prepareAppDataContentsLeafLIF(Landroid/content/pm/parsing/AndroidPackage;II)V
 HSPLcom/android/server/pm/PackageManagerService;->prepareAppDataLIF(Landroid/content/pm/parsing/AndroidPackage;II)V
 HSPLcom/android/server/pm/PackageManagerService;->prepareAppDataLeafLIF(Landroid/content/pm/parsing/AndroidPackage;II)V
-PLcom/android/server/pm/PackageManagerService;->preparePackageLI(Lcom/android/server/pm/PackageManagerService$InstallArgs;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;)Lcom/android/server/pm/PackageManagerService$PrepareResult;
+HPLcom/android/server/pm/PackageManagerService;->preparePackageLI(Lcom/android/server/pm/PackageManagerService$InstallArgs;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;)Lcom/android/server/pm/PackageManagerService$PrepareResult;
 HSPLcom/android/server/pm/PackageManagerService;->preparePackageParserCache()Ljava/io/File;
+HPLcom/android/server/pm/PackageManagerService;->primeDomainVerificationsLPw(I)V
+PLcom/android/server/pm/PackageManagerService;->processInstallRequestsAsync(ZLjava/util/List;)V
 PLcom/android/server/pm/PackageManagerService;->processPendingInstall(Lcom/android/server/pm/PackageManagerService$InstallArgs;I)V
+HPLcom/android/server/pm/PackageManagerService;->pruneUnusedStaticSharedLibraries(JJ)Z
 HSPLcom/android/server/pm/PackageManagerService;->queryContentProviders(Ljava/lang/String;IILjava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/PackageManagerService;->queryCrossProfileIntents(Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;IIZ)Landroid/content/pm/ResolveInfo;
-HPLcom/android/server/pm/PackageManagerService;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/pm/PackageManagerService;->queryInstrumentation(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/pm/PackageManagerService;->queryInstrumentationInternal(Ljava/lang/String;I)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerService;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/PackageManagerService;->queryIntentActivitiesInternal(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->queryIntentActivitiesInternal(Landroid/content/Intent;Ljava/lang/String;IIIZZ)Ljava/util/List;
-PLcom/android/server/pm/PackageManagerService;->queryIntentContentProviders(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/pm/PackageManagerService;->queryIntentContentProvidersInternal(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService;->queryIntentActivityOptions(Landroid/content/ComponentName;[Landroid/content/Intent;[Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/pm/PackageManagerService;->queryIntentActivityOptionsInternal(Landroid/content/ComponentName;[Landroid/content/Intent;[Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->queryIntentContentProviders(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/PackageManagerService;->queryIntentContentProvidersInternal(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->queryIntentReceivers(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/PackageManagerService;->queryIntentReceiversInternal(Landroid/content/Intent;Ljava/lang/String;IIZ)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->queryIntentServices(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
@@ -14928,14 +24713,17 @@
 HSPLcom/android/server/pm/PackageManagerService;->reconcileAppsDataLI(Ljava/lang/String;IIZZ)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService;->reconcilePackagesLocked(Lcom/android/server/pm/PackageManagerService$ReconcileRequest;Lcom/android/server/pm/KeySetManagerService;)Ljava/util/Map;
 PLcom/android/server/pm/PackageManagerService;->registerMoveCallback(Landroid/content/pm/IPackageMoveObserver;)V
-PLcom/android/server/pm/PackageManagerService;->removeCodePathLI(Ljava/io/File;)V
-PLcom/android/server/pm/PackageManagerService;->removeDexFiles(Ljava/util/List;[Ljava/lang/String;)V
-PLcom/android/server/pm/PackageManagerService;->removePackageDataLIF(Lcom/android/server/pm/PackageSetting;[ILcom/android/server/pm/PackageManagerService$PackageRemovedInfo;IZ)V
-PLcom/android/server/pm/PackageManagerService;->removePackageLI(Landroid/content/pm/parsing/AndroidPackage;Z)V
-PLcom/android/server/pm/PackageManagerService;->removePackageLI(Ljava/lang/String;Z)V
-PLcom/android/server/pm/PackageManagerService;->removeSharedLibraryLPw(Ljava/lang/String;J)Z
+HSPLcom/android/server/pm/PackageManagerService;->removeCodePathLI(Ljava/io/File;)V
+HSPLcom/android/server/pm/PackageManagerService;->removeDexFiles(Ljava/util/List;[Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->removeKeystoreDataIfNeeded(Landroid/os/UserManagerInternal;II)V
+PLcom/android/server/pm/PackageManagerService;->removeNativeBinariesLI(Lcom/android/server/pm/PackageSetting;)V
+HPLcom/android/server/pm/PackageManagerService;->removePackageDataLIF(Lcom/android/server/pm/PackageSetting;[ILcom/android/server/pm/PackageManagerService$PackageRemovedInfo;IZ)V
+HSPLcom/android/server/pm/PackageManagerService;->removePackageLI(Landroid/content/pm/parsing/AndroidPackage;Z)V
+HSPLcom/android/server/pm/PackageManagerService;->removePackageLI(Ljava/lang/String;Z)V
+HSPLcom/android/server/pm/PackageManagerService;->removeSharedLibraryLPw(Ljava/lang/String;J)Z
+HPLcom/android/server/pm/PackageManagerService;->removeUnusedPackagesLPw(Lcom/android/server/pm/UserManagerService;I)V
 HSPLcom/android/server/pm/PackageManagerService;->renameStaticSharedLibraryPackage(Landroid/content/pm/parsing/ParsedPackage;)V
-PLcom/android/server/pm/PackageManagerService;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V
+HPLcom/android/server/pm/PackageManagerService;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V
 HSPLcom/android/server/pm/PackageManagerService;->reportSettingsProblem(ILjava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerService;->resolveApexToSystemPartition(Lcom/android/server/pm/ApexManager$ActiveApexInfo;)Lcom/android/server/pm/PackageManagerService$SystemPartition;
 HSPLcom/android/server/pm/PackageManagerService;->resolveContentProvider(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
@@ -14949,38 +24737,56 @@
 PLcom/android/server/pm/PackageManagerService;->resolveUserIds(I)[I
 PLcom/android/server/pm/PackageManagerService;->restoreAndPostInstall(ILcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Lcom/android/server/pm/PackageManagerService$PostInstallData;)V
 HSPLcom/android/server/pm/PackageManagerService;->scanDirLI(Ljava/io/File;IIJ)V
+HSPLcom/android/server/pm/PackageManagerService;->scanDirLI(Ljava/io/File;IIJLandroid/content/pm/PackageParser;Ljava/util/concurrent/ExecutorService;)V
 HSPLcom/android/server/pm/PackageManagerService;->scanDirTracedLI(Ljava/io/File;IIJ)V
+HSPLcom/android/server/pm/PackageManagerService;->scanDirTracedLI(Ljava/io/File;IIJLandroid/content/pm/PackageParser;Ljava/util/concurrent/ExecutorService;)V
 PLcom/android/server/pm/PackageManagerService;->scanPackageLI(Ljava/io/File;IIJLandroid/os/UserHandle;)Landroid/content/pm/parsing/AndroidPackage;
 HSPLcom/android/server/pm/PackageManagerService;->scanPackageNewLI(Landroid/content/pm/parsing/ParsedPackage;IIJLandroid/os/UserHandle;)Lcom/android/server/pm/PackageManagerService$ScanResult;
 HSPLcom/android/server/pm/PackageManagerService;->scanPackageOnlyLI(Lcom/android/server/pm/PackageManagerService$ScanRequest;Lcom/android/server/pm/PackageManagerService$Injector;ZJ)Lcom/android/server/pm/PackageManagerService$ScanResult;
 PLcom/android/server/pm/PackageManagerService;->scanPackageTracedLI(Landroid/content/pm/parsing/ParsedPackage;IIJLandroid/os/UserHandle;)Lcom/android/server/pm/PackageManagerService$ScanResult;
 PLcom/android/server/pm/PackageManagerService;->scanPackageTracedLI(Ljava/io/File;IIJLandroid/os/UserHandle;)Landroid/content/pm/parsing/AndroidPackage;
+PLcom/android/server/pm/PackageManagerService;->scheduleDeferredNoKillInstallObserver(Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Landroid/content/pm/IPackageInstallObserver2;)V
+PLcom/android/server/pm/PackageManagerService;->scheduleDeferredNoKillPostDelete(Lcom/android/server/pm/PackageManagerService$InstallArgs;)V
+PLcom/android/server/pm/PackageManagerService;->scheduleWritePackageListLocked(I)V
 HPLcom/android/server/pm/PackageManagerService;->scheduleWritePackageRestrictionsLocked(I)V
-PLcom/android/server/pm/PackageManagerService;->scheduleWriteSettingsLocked()V
+PLcom/android/server/pm/PackageManagerService;->scheduleWritePackageRestrictionsLocked(Landroid/os/UserHandle;)V
+HSPLcom/android/server/pm/PackageManagerService;->scheduleWriteSettingsLocked()V
+PLcom/android/server/pm/PackageManagerService;->sendBootCompletedBroadcastToSystemApp(Ljava/lang/String;ZI)V
 PLcom/android/server/pm/PackageManagerService;->sendFirstLaunchBroadcast(Ljava/lang/String;Ljava/lang/String;[I[I)V
 PLcom/android/server/pm/PackageManagerService;->sendMyPackageSuspendedOrUnsuspended([Ljava/lang/String;ZI)V
 PLcom/android/server/pm/PackageManagerService;->sendPackageAddedForNewUsers(Ljava/lang/String;ZZI[I[I)V
-PLcom/android/server/pm/PackageManagerService;->sendPackageBroadcast(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[I[I)V
+PLcom/android/server/pm/PackageManagerService;->sendPackageAddedForUser(Ljava/lang/String;Lcom/android/server/pm/PackageSetting;I)V
+HPLcom/android/server/pm/PackageManagerService;->sendPackageBroadcast(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[I[I)V
 HPLcom/android/server/pm/PackageManagerService;->sendPackageChangedBroadcast(Ljava/lang/String;ZLjava/util/ArrayList;ILjava/lang/String;)V
 PLcom/android/server/pm/PackageManagerService;->sendPackagesSuspendedForUser([Ljava/lang/String;[IIZ)V
-PLcom/android/server/pm/PackageManagerService;->sendSessionCommitBroadcast(Landroid/content/pm/PackageInstaller$SessionInfo;I)V
-PLcom/android/server/pm/PackageManagerService;->setApplicationCategoryHint(Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/pm/PackageManagerService;->setApplicationEnabledSetting(Ljava/lang/String;IIILjava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService;->sendSessionCommitBroadcast(Landroid/content/pm/PackageInstaller$SessionInfo;I)V
+PLcom/android/server/pm/PackageManagerService;->sendSessionUpdatedBroadcast(Landroid/content/pm/PackageInstaller$SessionInfo;I)V
+HPLcom/android/server/pm/PackageManagerService;->setApplicationCategoryHint(Ljava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService;->setApplicationEnabledSetting(Ljava/lang/String;IIILjava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->setApplicationHiddenSettingAsUser(Ljava/lang/String;ZI)Z
 HPLcom/android/server/pm/PackageManagerService;->setBlockUninstallForUser(Ljava/lang/String;ZI)Z
 HSPLcom/android/server/pm/PackageManagerService;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V
+PLcom/android/server/pm/PackageManagerService;->setDistractingPackageRestrictionsAsUser([Ljava/lang/String;II)[Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->setEnableRollbackCode(II)V
 HSPLcom/android/server/pm/PackageManagerService;->setEnabledSetting(Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerService;->setInstantAppForUser(Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageSetting;IZZ)V
 PLcom/android/server/pm/PackageManagerService;->setLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;ILandroid/content/IntentFilter;ILandroid/content/ComponentName;)V
 HSPLcom/android/server/pm/PackageManagerService;->setPackageStoppedState(Ljava/lang/String;ZI)V
 HPLcom/android/server/pm/PackageManagerService;->setPackagesSuspendedAsUser([Ljava/lang/String;ZLandroid/os/PersistableBundle;Landroid/os/PersistableBundle;Landroid/content/pm/SuspendDialogInfo;Ljava/lang/String;I)[Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->setRuntimePermissionsVersion(II)V
 HSPLcom/android/server/pm/PackageManagerService;->setSystemAppHiddenUntilInstalled(Ljava/lang/String;Z)V
+HSPLcom/android/server/pm/PackageManagerService;->setSystemAppInstallState(Ljava/lang/String;ZI)Z
 HPLcom/android/server/pm/PackageManagerService;->setUpFsVerityIfPossible(Landroid/content/pm/parsing/AndroidPackage;)V
 HSPLcom/android/server/pm/PackageManagerService;->setUpInstantAppInstallerActivityLP(Landroid/content/pm/ActivityInfo;)V
+PLcom/android/server/pm/PackageManagerService;->setUpdateAvailable(Ljava/lang/String;Z)V
 HSPLcom/android/server/pm/PackageManagerService;->sharedLibExists(Ljava/lang/String;JLjava/util/Map;)Z
 HSPLcom/android/server/pm/PackageManagerService;->shouldFilterApplicationLocked(Lcom/android/server/pm/PackageSetting;II)Z
 HSPLcom/android/server/pm/PackageManagerService;->shouldFilterApplicationLocked(Lcom/android/server/pm/PackageSetting;ILandroid/content/ComponentName;II)Z
+PLcom/android/server/pm/PackageManagerService;->shouldKeepUninstalledPackageLPr(Ljava/lang/String;)Z
+PLcom/android/server/pm/PackageManagerService;->shutdown()V
 HPLcom/android/server/pm/PackageManagerService;->startIntentFilterVerifications(IZLandroid/content/pm/parsing/AndroidPackage;)V
 HSPLcom/android/server/pm/PackageManagerService;->systemReady()V
+HPLcom/android/server/pm/PackageManagerService;->unsuspendForSuspendingPackage(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService;->updateAllSharedLibrariesLocked(Landroid/content/pm/parsing/AndroidPackage;Ljava/util/Map;)Ljava/util/ArrayList;
 HPLcom/android/server/pm/PackageManagerService;->updateDefaultHomeNotLocked(I)Z
 HSPLcom/android/server/pm/PackageManagerService;->updateFlags(II)I
@@ -14990,124 +24796,175 @@
 HSPLcom/android/server/pm/PackageManagerService;->updateFlagsForResolve(IIIZ)I
 HSPLcom/android/server/pm/PackageManagerService;->updateFlagsForResolve(IIIZZ)I
 HSPLcom/android/server/pm/PackageManagerService;->updateInstantAppInstallerLocked(Ljava/lang/String;)V
-PLcom/android/server/pm/PackageManagerService;->updateIntentForResolve(Landroid/content/Intent;)Landroid/content/Intent;
+HSPLcom/android/server/pm/PackageManagerService;->updateIntentForResolve(Landroid/content/Intent;)Landroid/content/Intent;
+PLcom/android/server/pm/PackageManagerService;->updateIntentVerificationStatus(Ljava/lang/String;II)Z
 HSPLcom/android/server/pm/PackageManagerService;->updatePackagesIfNeeded()V
-PLcom/android/server/pm/PackageManagerService;->updateSequenceNumberLP(Lcom/android/server/pm/PackageSetting;[I)V
+HPLcom/android/server/pm/PackageManagerService;->updateSequenceNumberLP(Lcom/android/server/pm/PackageSetting;[I)V
 HPLcom/android/server/pm/PackageManagerService;->updateSettingsInternalLI(Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/PackageManagerService$InstallArgs;[ILcom/android/server/pm/PackageManagerService$PackageInstalledInfo;)V
+PLcom/android/server/pm/PackageManagerService;->updateSettingsLI(Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/PackageManagerService$InstallArgs;[ILcom/android/server/pm/PackageManagerService$PackageInstalledInfo;)V
 HSPLcom/android/server/pm/PackageManagerService;->updateSharedLibrariesLocked(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;Ljava/util/Map;)V
 HSPLcom/android/server/pm/PackageManagerService;->userNeedsBadging(I)Z
 PLcom/android/server/pm/PackageManagerService;->verifyIntentFilter(IILjava/util/List;)V
 HPLcom/android/server/pm/PackageManagerService;->verifyIntentFiltersIfNeeded(IIZLjava/lang/String;ZLjava/util/List;)V
-PLcom/android/server/pm/PackageManagerService;->verifyPendingInstall(II)V
+HPLcom/android/server/pm/PackageManagerService;->verifyPendingInstall(II)V
 HSPLcom/android/server/pm/PackageManagerService;->waitForAppDataPrepared()V
 HSPLcom/android/server/pm/PackageManagerServiceCompilerMapping;-><clinit>()V
 HSPLcom/android/server/pm/PackageManagerServiceCompilerMapping;->checkProperties()V
 HSPLcom/android/server/pm/PackageManagerServiceCompilerMapping;->getAndCheckValidity(I)Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerServiceCompilerMapping;->getCompilerFilterForReason(I)Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerServiceCompilerMapping;->getReasonName(I)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerServiceCompilerMapping;->getCompilerFilterForReason(I)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerServiceCompilerMapping;->getReasonName(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerServiceCompilerMapping;->getSystemPropertyName(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerServiceCompilerMapping;->isFilterAllowedForReason(ILjava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils$1;-><init>()V
 HSPLcom/android/server/pm/PackageManagerServiceUtils$1;->accept(Ljava/io/File;Ljava/lang/String;)Z
-PLcom/android/server/pm/PackageManagerServiceUtils;->applyPackageFilter(Ljava/util/function/Predicate;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/List;Lcom/android/server/pm/PackageManagerService;)V
-PLcom/android/server/pm/PackageManagerServiceUtils;->checkISA(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->applyPackageFilter(Ljava/util/function/Predicate;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/List;Lcom/android/server/pm/PackageManagerService;)V
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->checkISA(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->compressedFileExists(Ljava/lang/String;)Z
 PLcom/android/server/pm/PackageManagerServiceUtils;->decompressFile(Ljava/io/File;Ljava/io/File;)I
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->deriveAbiOverride(Ljava/lang/String;Lcom/android/server/pm/PackageSetting;)Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerServiceUtils;->dumpCriticalInfo(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/pm/PackageManagerServiceUtils;->dumpCriticalInfo(Landroid/util/proto/ProtoOutputStream;)V
 HPLcom/android/server/pm/PackageManagerServiceUtils;->dumpCriticalInfo(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->enforceShellRestriction(Landroid/os/UserManagerInternal;Ljava/lang/String;II)V
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->enforceSystemOrPhoneCaller(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->getCompressedFiles(Ljava/lang/String;)[Ljava/io/File;
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->getLastModifiedTime(Landroid/content/pm/parsing/AndroidPackage;)J
 PLcom/android/server/pm/PackageManagerServiceUtils;->getMinimalPackageInfo(Landroid/content/Context;Ljava/lang/String;ILjava/lang/String;)Landroid/content/pm/PackageInfoLite;
-PLcom/android/server/pm/PackageManagerServiceUtils;->getPackageNamesForIntent(Landroid/content/Intent;I)Landroid/util/ArraySet;
-PLcom/android/server/pm/PackageManagerServiceUtils;->getPackagesForDexopt(Ljava/util/Collection;Lcom/android/server/pm/PackageManagerService;)Ljava/util/List;
-PLcom/android/server/pm/PackageManagerServiceUtils;->getPackagesForDexopt(Ljava/util/Collection;Lcom/android/server/pm/PackageManagerService;Z)Ljava/util/List;
-HPLcom/android/server/pm/PackageManagerServiceUtils;->getPermissionsState(Landroid/content/pm/PackageManagerInternal;Landroid/content/pm/parsing/AndroidPackage;)Lcom/android/server/pm/permission/PermissionsState;
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->getPackageNamesForIntent(Landroid/content/Intent;I)Landroid/util/ArraySet;
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->getPackagesForDexopt(Ljava/util/Collection;Lcom/android/server/pm/PackageManagerService;)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->getPackagesForDexopt(Ljava/util/Collection;Lcom/android/server/pm/PackageManagerService;Z)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->getPermissionsState(Landroid/content/pm/PackageManagerInternal;Landroid/content/pm/parsing/AndroidPackage;)Lcom/android/server/pm/permission/PermissionsState;
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->getSettingsProblemFile()Ljava/io/File;
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->isApkVerificationForced(Lcom/android/server/pm/PackageSetting;)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->isApkVerityEnabled()Z
 PLcom/android/server/pm/PackageManagerServiceUtils;->isDowngradePermitted(II)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->isLegacyApkVerityEnabled()Z
-PLcom/android/server/pm/PackageManagerServiceUtils;->lambda$getPackagesForDexopt$1(Landroid/content/pm/parsing/AndroidPackage;)Z
-HPLcom/android/server/pm/PackageManagerServiceUtils;->lambda$getPackagesForDexopt$2(Landroid/util/ArraySet;Landroid/content/pm/parsing/AndroidPackage;)Z
-HPLcom/android/server/pm/PackageManagerServiceUtils;->lambda$getPackagesForDexopt$3(Lcom/android/server/pm/dex/DexManager;Landroid/content/pm/parsing/AndroidPackage;)Z
-PLcom/android/server/pm/PackageManagerServiceUtils;->lambda$getPackagesForDexopt$4(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;)I
-PLcom/android/server/pm/PackageManagerServiceUtils;->lambda$getPackagesForDexopt$5(JLandroid/content/pm/parsing/AndroidPackage;)Z
-HPLcom/android/server/pm/PackageManagerServiceUtils;->lambda$sortPackagesByUsageDate$0(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;)I
+HPLcom/android/server/pm/PackageManagerServiceUtils;->isUnusedSinceTimeInMillis(JJJLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;JJ)Z
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->lambda$getPackagesForDexopt$1(Landroid/content/pm/parsing/AndroidPackage;)Z
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->lambda$getPackagesForDexopt$2(Landroid/util/ArraySet;Landroid/content/pm/parsing/AndroidPackage;)Z
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->lambda$getPackagesForDexopt$3(Lcom/android/server/pm/dex/DexManager;Landroid/content/pm/parsing/AndroidPackage;)Z
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->lambda$getPackagesForDexopt$4(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;)I
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->lambda$getPackagesForDexopt$5(JLandroid/content/pm/parsing/AndroidPackage;)Z
+PLcom/android/server/pm/PackageManagerServiceUtils;->lambda$getPackagesForDexopt$7(Landroid/content/pm/parsing/AndroidPackage;)Z
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->lambda$sortPackagesByUsageDate$0(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;)I
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->logCriticalInfo(ILjava/lang/String;)V
+PLcom/android/server/pm/PackageManagerServiceUtils;->makeDirRecursive(Ljava/io/File;I)V
 HPLcom/android/server/pm/PackageManagerServiceUtils;->packagesToString(Ljava/util/Collection;)Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerServiceUtils;->sortPackagesByUsageDate(Ljava/util/List;Lcom/android/server/pm/PackageManagerService;)V
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->sortPackagesByUsageDate(Ljava/util/List;Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->verifySignatures(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Landroid/content/pm/PackageParser$SigningDetails;ZZ)Z
-PLcom/android/server/pm/PackageManagerShellCommand;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/permission/IPermissionManager;)V
-PLcom/android/server/pm/PackageManagerShellCommand;->onCommand(Ljava/lang/String;)I
-PLcom/android/server/pm/PackageManagerShellCommand;->runList()I
-PLcom/android/server/pm/PackageManagerShellCommand;->runListPackages(Z)I
-PLcom/android/server/pm/PackageManagerShellCommand;->translateUserId(IILjava/lang/String;)I
+PLcom/android/server/pm/PackageManagerShellCommand$2;-><init>(Lcom/android/server/pm/PackageManagerShellCommand;)V
+PLcom/android/server/pm/PackageManagerShellCommand$ClearDataObserver;-><init>()V
+PLcom/android/server/pm/PackageManagerShellCommand$ClearDataObserver;->onRemoveCompleted(Ljava/lang/String;Z)V
+PLcom/android/server/pm/PackageManagerShellCommand$InstallParams;-><init>()V
+PLcom/android/server/pm/PackageManagerShellCommand$InstallParams;-><init>(Lcom/android/server/pm/PackageManagerShellCommand$1;)V
+PLcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver$1;-><init>(Lcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;)V
+PLcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver$1;->send(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;-><init>()V
+PLcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;-><init>(Lcom/android/server/pm/PackageManagerShellCommand$1;)V
+PLcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;->access$600(Lcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;)Ljava/util/concurrent/LinkedBlockingQueue;
+PLcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;->getIntentSender()Landroid/content/IntentSender;
+PLcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;->getResult()Landroid/content/Intent;
+HSPLcom/android/server/pm/PackageManagerShellCommand;-><clinit>()V
+HSPLcom/android/server/pm/PackageManagerShellCommand;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/permission/IPermissionManager;)V
+HPLcom/android/server/pm/PackageManagerShellCommand;->checkAbiArgument(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerShellCommand;->displayPackageFilePath(Ljava/lang/String;I)I
+PLcom/android/server/pm/PackageManagerShellCommand;->doAbandonSession(IZ)I
+PLcom/android/server/pm/PackageManagerShellCommand;->doCommitSession(IZ)I
+PLcom/android/server/pm/PackageManagerShellCommand;->doCreateSession(Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;I)I
+HPLcom/android/server/pm/PackageManagerShellCommand;->doRunInstall(Lcom/android/server/pm/PackageManagerShellCommand$InstallParams;)I
+PLcom/android/server/pm/PackageManagerShellCommand;->doWriteSplit(ILjava/lang/String;JLjava/lang/String;Z)I
+HPLcom/android/server/pm/PackageManagerShellCommand;->doWriteSplits(ILjava/util/ArrayList;JZ)I
+HPLcom/android/server/pm/PackageManagerShellCommand;->getRemainingArgs()Ljava/util/ArrayList;
+HPLcom/android/server/pm/PackageManagerShellCommand;->makeInstallParams()Lcom/android/server/pm/PackageManagerShellCommand$InstallParams;
+HSPLcom/android/server/pm/PackageManagerShellCommand;->onCommand(Ljava/lang/String;)I
+PLcom/android/server/pm/PackageManagerShellCommand;->runClear()I
+PLcom/android/server/pm/PackageManagerShellCommand;->runCompile()I
+PLcom/android/server/pm/PackageManagerShellCommand;->runInstall()I
+PLcom/android/server/pm/PackageManagerShellCommand;->runInstallCommit()I
+PLcom/android/server/pm/PackageManagerShellCommand;->runInstallCreate()I
+PLcom/android/server/pm/PackageManagerShellCommand;->runInstallWrite()I
+HSPLcom/android/server/pm/PackageManagerShellCommand;->runList()I
+PLcom/android/server/pm/PackageManagerShellCommand;->runListInstrumentation()I
+HSPLcom/android/server/pm/PackageManagerShellCommand;->runListPackages(Z)I
+PLcom/android/server/pm/PackageManagerShellCommand;->runPath()I
+HPLcom/android/server/pm/PackageManagerShellCommand;->runUninstall()I
+HPLcom/android/server/pm/PackageManagerShellCommand;->setParamsSize(Lcom/android/server/pm/PackageManagerShellCommand$InstallParams;Ljava/util/List;)V
+HSPLcom/android/server/pm/PackageManagerShellCommand;->translateUserId(IILjava/lang/String;)I
 HSPLcom/android/server/pm/PackageSetting;-><init>(Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/PackageSetting;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JIII[Ljava/lang/String;[J)V
 HSPLcom/android/server/pm/PackageSetting;->areInstallPermissionsFixed()Z
 HSPLcom/android/server/pm/PackageSetting;->doCopy(Lcom/android/server/pm/PackageSetting;)V
 HPLcom/android/server/pm/PackageSetting;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JLjava/util/List;)V
-HPLcom/android/server/pm/PackageSetting;->getAppId()I
+HSPLcom/android/server/pm/PackageSetting;->getAppId()I
 HSPLcom/android/server/pm/PackageSetting;->getPermissionsState()Lcom/android/server/pm/permission/PermissionsState;
+PLcom/android/server/pm/PackageSetting;->getSharedUser()Lcom/android/server/pm/SharedUserSetting;
 HSPLcom/android/server/pm/PackageSetting;->getSharedUserId()I
 HSPLcom/android/server/pm/PackageSetting;->isPrivileged()Z
-PLcom/android/server/pm/PackageSetting;->isSharedUser()Z
+HSPLcom/android/server/pm/PackageSetting;->isSharedUser()Z
 HSPLcom/android/server/pm/PackageSetting;->isSystem()Z
 HSPLcom/android/server/pm/PackageSetting;->isUpdatedSystem()Z
 HSPLcom/android/server/pm/PackageSetting;->setAndroidPackage(Landroid/content/pm/parsing/AndroidPackage;)V
 HSPLcom/android/server/pm/PackageSetting;->setInstallPermissionsFixed(Z)V
-HPLcom/android/server/pm/PackageSetting;->toString()Ljava/lang/String;
+HSPLcom/android/server/pm/PackageSetting;->toString()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageSetting;->updateFrom(Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/PackageSettingBase;-><clinit>()V
 HSPLcom/android/server/pm/PackageSettingBase;-><init>(Lcom/android/server/pm/PackageSettingBase;Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageSettingBase;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JII[Ljava/lang/String;[J)V
-HPLcom/android/server/pm/PackageSettingBase;->disableComponentLPw(Ljava/lang/String;I)Z
+PLcom/android/server/pm/PackageSettingBase;->addOrUpdateSuspension(Ljava/lang/String;Landroid/content/pm/SuspendDialogInfo;Landroid/os/PersistableBundle;Landroid/os/PersistableBundle;I)V
+PLcom/android/server/pm/PackageSettingBase;->clearDomainVerificationStatusForUser(I)V
+HSPLcom/android/server/pm/PackageSettingBase;->disableComponentLPw(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageSettingBase;->doCopy(Lcom/android/server/pm/PackageSettingBase;)V
-HPLcom/android/server/pm/PackageSettingBase;->enableComponentLPw(Ljava/lang/String;I)Z
-PLcom/android/server/pm/PackageSettingBase;->getCeDataInode(I)J
+HSPLcom/android/server/pm/PackageSettingBase;->enableComponentLPw(Ljava/lang/String;I)Z
+HSPLcom/android/server/pm/PackageSettingBase;->getCeDataInode(I)J
 HSPLcom/android/server/pm/PackageSettingBase;->getCurrentEnabledStateLPr(Ljava/lang/String;I)I
-PLcom/android/server/pm/PackageSettingBase;->getDisabledComponents(I)Landroid/util/ArraySet;
-PLcom/android/server/pm/PackageSettingBase;->getDistractionFlags(I)I
-PLcom/android/server/pm/PackageSettingBase;->getDomainVerificationStatusForUser(I)J
-HPLcom/android/server/pm/PackageSettingBase;->getEnabled(I)I
-PLcom/android/server/pm/PackageSettingBase;->getEnabledComponents(I)Landroid/util/ArraySet;
-HPLcom/android/server/pm/PackageSettingBase;->getHarmfulAppWarning(I)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageSettingBase;->getDisabledComponents(I)Landroid/util/ArraySet;
+HSPLcom/android/server/pm/PackageSettingBase;->getDistractionFlags(I)I
+HPLcom/android/server/pm/PackageSettingBase;->getDomainVerificationStatusForUser(I)J
+HSPLcom/android/server/pm/PackageSettingBase;->getEnabled(I)I
+HSPLcom/android/server/pm/PackageSettingBase;->getEnabledComponents(I)Landroid/util/ArraySet;
+HSPLcom/android/server/pm/PackageSettingBase;->getHarmfulAppWarning(I)Ljava/lang/String;
 HPLcom/android/server/pm/PackageSettingBase;->getHidden(I)Z
-PLcom/android/server/pm/PackageSettingBase;->getInstallReason(I)I
+HPLcom/android/server/pm/PackageSettingBase;->getInstallReason(I)I
 HSPLcom/android/server/pm/PackageSettingBase;->getInstalled(I)Z
 HSPLcom/android/server/pm/PackageSettingBase;->getInstantApp(I)Z
-PLcom/android/server/pm/PackageSettingBase;->getIntentFilterVerificationInfo()Landroid/content/pm/IntentFilterVerificationInfo;
+HPLcom/android/server/pm/PackageSettingBase;->getIntentFilterVerificationInfo()Landroid/content/pm/IntentFilterVerificationInfo;
 HPLcom/android/server/pm/PackageSettingBase;->getLastDisabledAppCaller(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageSettingBase;->getNotInstalledUserIds()[I
 HPLcom/android/server/pm/PackageSettingBase;->getNotLaunched(I)Z
-PLcom/android/server/pm/PackageSettingBase;->getOverlayPaths(I)[Ljava/lang/String;
+HPLcom/android/server/pm/PackageSettingBase;->getOverlayPaths(I)[Ljava/lang/String;
+HPLcom/android/server/pm/PackageSettingBase;->getOverlayPathsForLibrary(I)Ljava/util/Map;
 HSPLcom/android/server/pm/PackageSettingBase;->getPermissionsState()Lcom/android/server/pm/permission/PermissionsState;
 HSPLcom/android/server/pm/PackageSettingBase;->getSigningDetails()Landroid/content/pm/PackageParser$SigningDetails;
 HSPLcom/android/server/pm/PackageSettingBase;->getStopped(I)Z
 HSPLcom/android/server/pm/PackageSettingBase;->getSuspended(I)Z
 HSPLcom/android/server/pm/PackageSettingBase;->getVirtulalPreload(I)Z
+PLcom/android/server/pm/PackageSettingBase;->isAnyInstalled([I)Z
 HSPLcom/android/server/pm/PackageSettingBase;->modifyUserState(I)Landroid/content/pm/PackageUserState;
 HSPLcom/android/server/pm/PackageSettingBase;->modifyUserStateComponents(IZZ)Landroid/content/pm/PackageUserState;
-PLcom/android/server/pm/PackageSettingBase;->queryInstalledUsers([IZ)[I
+HPLcom/android/server/pm/PackageSettingBase;->queryInstalledUsers([IZ)[I
 HSPLcom/android/server/pm/PackageSettingBase;->readUserState(I)Landroid/content/pm/PackageUserState;
 HPLcom/android/server/pm/PackageSettingBase;->removeSuspension(Ljava/lang/String;I)V
+PLcom/android/server/pm/PackageSettingBase;->removeUser(I)V
 HSPLcom/android/server/pm/PackageSettingBase;->restoreComponentLPw(Ljava/lang/String;I)Z
+PLcom/android/server/pm/PackageSettingBase;->setCeDataInode(JI)V
+PLcom/android/server/pm/PackageSettingBase;->setDomainVerificationStatusForUser(III)V
 HSPLcom/android/server/pm/PackageSettingBase;->setEnabled(IILjava/lang/String;)V
+PLcom/android/server/pm/PackageSettingBase;->setHidden(ZI)V
 PLcom/android/server/pm/PackageSettingBase;->setInstallReason(II)V
 PLcom/android/server/pm/PackageSettingBase;->setInstallSource(Lcom/android/server/pm/InstallSource;)V
-PLcom/android/server/pm/PackageSettingBase;->setInstalled(ZI)V
+HSPLcom/android/server/pm/PackageSettingBase;->setInstalled(ZI)V
 PLcom/android/server/pm/PackageSettingBase;->setInstallerPackageName(Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageSettingBase;->setIntentFilterVerificationInfo(Landroid/content/pm/IntentFilterVerificationInfo;)V
 HSPLcom/android/server/pm/PackageSettingBase;->setIsOrphaned(Z)V
+PLcom/android/server/pm/PackageSettingBase;->setNotLaunched(ZI)V
 HSPLcom/android/server/pm/PackageSettingBase;->setOverlayPaths(Ljava/util/List;I)V
+HSPLcom/android/server/pm/PackageSettingBase;->setOverlayPathsForLibrary(Ljava/lang/String;Ljava/util/List;I)V
+PLcom/android/server/pm/PackageSettingBase;->setStopped(ZI)V
 HSPLcom/android/server/pm/PackageSettingBase;->setTimeStamp(J)V
+PLcom/android/server/pm/PackageSettingBase;->setUpdateAvailable(Z)V
 HSPLcom/android/server/pm/PackageSettingBase;->setUserState(IJIZZZZIZLandroid/util/ArrayMap;ZZLjava/lang/String;Landroid/util/ArraySet;Landroid/util/ArraySet;IIILjava/lang/String;)V
 HSPLcom/android/server/pm/PackageSettingBase;->updateFrom(Lcom/android/server/pm/PackageSettingBase;)Lcom/android/server/pm/PackageSettingBase;
-PLcom/android/server/pm/PackageSettingBase;->writeUsersInfoToProto(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/pm/PackageSettingBase;->writeUsersInfoToProto(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/pm/PackageSignatures;-><init>()V
 HSPLcom/android/server/pm/PackageSignatures;->readCertsListXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/util/ArrayList;Ljava/util/ArrayList;IZLandroid/content/pm/PackageParser$SigningDetails$Builder;)I
 HSPLcom/android/server/pm/PackageSignatures;->readXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/util/ArrayList;)V
@@ -15115,7 +24972,7 @@
 HSPLcom/android/server/pm/PackageSignatures;->writeCertsListXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/ArrayList;[Landroid/content/pm/Signature;Z)V
 HSPLcom/android/server/pm/PackageSignatures;->writeXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/util/ArrayList;)V
 HSPLcom/android/server/pm/PackageUsage;-><init>()V
-PLcom/android/server/pm/PackageUsage;->isHistoricalPackageUsageAvailable()Z
+HSPLcom/android/server/pm/PackageUsage;->isHistoricalPackageUsageAvailable()Z
 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
@@ -15126,17 +24983,32 @@
 HPLcom/android/server/pm/PackageUsage;->writeInternal(Ljava/util/Map;)V
 PLcom/android/server/pm/PackageVerificationResponse;-><init>(II)V
 PLcom/android/server/pm/PackageVerificationState;-><init>(ILcom/android/server/pm/PackageManagerService$InstallParams;)V
+PLcom/android/server/pm/PackageVerificationState;-><init>(Lcom/android/server/pm/PackageManagerService$InstallParams;)V
+PLcom/android/server/pm/PackageVerificationState;->areAllVerificationsComplete()Z
+PLcom/android/server/pm/PackageVerificationState;->extendTimeout()V
 PLcom/android/server/pm/PackageVerificationState;->getInstallParams()Lcom/android/server/pm/PackageManagerService$InstallParams;
 PLcom/android/server/pm/PackageVerificationState;->isInstallAllowed()Z
+PLcom/android/server/pm/PackageVerificationState;->isIntegrityVerificationComplete()Z
 PLcom/android/server/pm/PackageVerificationState;->isVerificationComplete()Z
+PLcom/android/server/pm/PackageVerificationState;->setIntegrityVerificationResult(I)V
+PLcom/android/server/pm/PackageVerificationState;->setRequiredVerifierUid(I)V
 PLcom/android/server/pm/PackageVerificationState;->setVerifierResponse(II)Z
+PLcom/android/server/pm/PackageVerificationState;->timeoutExtended()Z
 HSPLcom/android/server/pm/ParallelPackageParser$ParseResult;-><init>()V
+HSPLcom/android/server/pm/ParallelPackageParser;-><init>(Landroid/content/pm/PackageParser;Ljava/util/concurrent/ExecutorService;)V
 HSPLcom/android/server/pm/ParallelPackageParser;-><init>([Ljava/lang/String;ZLandroid/util/DisplayMetrics;Ljava/io/File;Landroid/content/pm/PackageParser$Callback;)V
 HSPLcom/android/server/pm/ParallelPackageParser;->close()V
 HSPLcom/android/server/pm/ParallelPackageParser;->lambda$submit$0$ParallelPackageParser(Ljava/io/File;I)V
+HSPLcom/android/server/pm/ParallelPackageParser;->makeExecutorService()Ljava/util/concurrent/ExecutorService;
 HSPLcom/android/server/pm/ParallelPackageParser;->parsePackage(Landroid/content/pm/PackageParser;Ljava/io/File;I)Landroid/content/pm/parsing/ParsedPackage;
+HSPLcom/android/server/pm/ParallelPackageParser;->parsePackage(Ljava/io/File;I)Landroid/content/pm/parsing/ParsedPackage;
 HSPLcom/android/server/pm/ParallelPackageParser;->submit(Ljava/io/File;I)V
 HSPLcom/android/server/pm/ParallelPackageParser;->take()Lcom/android/server/pm/ParallelPackageParser$ParseResult;
+HSPLcom/android/server/pm/PersistentPreferredActivity;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLcom/android/server/pm/PersistentPreferredActivity;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HSPLcom/android/server/pm/PersistentPreferredIntentResolver;-><init>()V
+HSPLcom/android/server/pm/PersistentPreferredIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
+HSPLcom/android/server/pm/PersistentPreferredIntentResolver;->newArray(I)[Lcom/android/server/pm/PersistentPreferredActivity;
 HSPLcom/android/server/pm/Policy$PolicyBuilder;-><init>()V
 HSPLcom/android/server/pm/Policy$PolicyBuilder;->access$000(Lcom/android/server/pm/Policy$PolicyBuilder;)Ljava/lang/String;
 HSPLcom/android/server/pm/Policy$PolicyBuilder;->access$100(Lcom/android/server/pm/Policy$PolicyBuilder;)Ljava/util/Set;
@@ -15157,29 +25029,39 @@
 HSPLcom/android/server/pm/PolicyComparator;->compare(Lcom/android/server/pm/Policy;Lcom/android/server/pm/Policy;)I
 HSPLcom/android/server/pm/PolicyComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/pm/PolicyComparator;->foundDuplicate()Z
+PLcom/android/server/pm/PreferredActivity;-><init>(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/pm/PreferredActivity;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/pm/PreferredActivity;->onReadTag(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;)Z
 HSPLcom/android/server/pm/PreferredActivity;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
 PLcom/android/server/pm/PreferredComponent;-><init>(Lcom/android/server/pm/PreferredComponent$Callbacks;I[Landroid/content/ComponentName;Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/pm/PreferredComponent;-><init>(Lcom/android/server/pm/PreferredComponent$Callbacks;Lorg/xmlpull/v1/XmlPullParser;)V
-PLcom/android/server/pm/PreferredComponent;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Object;)V
+PLcom/android/server/pm/PreferredComponent;->discardObsoleteComponents(Ljava/util/List;)[Landroid/content/ComponentName;
+HPLcom/android/server/pm/PreferredComponent;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Object;)V
 HSPLcom/android/server/pm/PreferredComponent;->getParseError()Ljava/lang/String;
-PLcom/android/server/pm/PreferredComponent;->sameSet(Ljava/util/List;Z)Z
+PLcom/android/server/pm/PreferredComponent;->isSuperset(Ljava/util/List;Z)Z
+HSPLcom/android/server/pm/PreferredComponent;->sameSet(Ljava/util/List;Z)Z
 HPLcom/android/server/pm/PreferredComponent;->sameSet([Landroid/content/ComponentName;)Z
 HSPLcom/android/server/pm/PreferredComponent;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
 HSPLcom/android/server/pm/PreferredIntentResolver;-><init>()V
 PLcom/android/server/pm/PreferredIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/content/IntentFilter;)V
+PLcom/android/server/pm/PreferredIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/PreferredActivity;)V
+PLcom/android/server/pm/PreferredIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/IntentFilter;)Z
+PLcom/android/server/pm/PreferredIntentResolver;->isPackageForFilter(Ljava/lang/String;Lcom/android/server/pm/PreferredActivity;)Z
 HSPLcom/android/server/pm/PreferredIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
 HSPLcom/android/server/pm/PreferredIntentResolver;->newArray(I)[Lcom/android/server/pm/PreferredActivity;
 HSPLcom/android/server/pm/ProcessLoggingHandler;-><init>()V
-PLcom/android/server/pm/ProcessLoggingHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/pm/ProcessLoggingHandler;->invalidateProcessLoggingBaseApkHash(Ljava/lang/String;)V
+HSPLcom/android/server/pm/ProcessLoggingHandler;->computeHashOfApkFile(Ljava/lang/String;)[B
+HSPLcom/android/server/pm/ProcessLoggingHandler;->computeStringHashOfApk(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/ProcessLoggingHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/pm/ProcessLoggingHandler;->invalidateProcessLoggingBaseApkHash(Ljava/lang/String;)V
 HSPLcom/android/server/pm/ProtectedPackages;-><init>(Landroid/content/Context;)V
 PLcom/android/server/pm/ProtectedPackages;->getDeviceOwnerOrProfileOwnerPackage(I)Ljava/lang/String;
 HSPLcom/android/server/pm/ProtectedPackages;->hasDeviceOwnerOrProfileOwner(ILjava/lang/String;)Z
+PLcom/android/server/pm/ProtectedPackages;->isPackageDataProtected(ILjava/lang/String;)Z
 HSPLcom/android/server/pm/ProtectedPackages;->isPackageStateProtected(ILjava/lang/String;)Z
 HSPLcom/android/server/pm/ProtectedPackages;->isProtectedPackage(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/ProtectedPackages;->setDeviceAndProfileOwnerPackages(ILjava/lang/String;Landroid/util/SparseArray;)V
+HSPLcom/android/server/pm/ProtectedPackages;->setDeviceOwnerProtectedPackages(Ljava/util/List;)V
 HSPLcom/android/server/pm/SELinuxMMAC;-><clinit>()V
 HSPLcom/android/server/pm/SELinuxMMAC;->getSeInfo(Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/compat/PlatformCompat;)Ljava/lang/String;
 HSPLcom/android/server/pm/SELinuxMMAC;->getSeInfo(Landroid/content/pm/parsing/AndroidPackage;ZI)Ljava/lang/String;
@@ -15199,52 +25081,67 @@
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence$MyHandler;-><init>(Lcom/android/server/pm/Settings$RuntimePermissionPersistence;)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence$MyHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;-><init>(Lcom/android/server/pm/Settings;Ljava/lang/Object;)V
+PLcom/android/server/pm/Settings$RuntimePermissionPersistence;->access$100(Lcom/android/server/pm/Settings$RuntimePermissionPersistence;I)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->access$300(Lcom/android/server/pm/Settings$RuntimePermissionPersistence;I)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->areDefaultRuntimePermissionsGrantedLPr(I)Z
-PLcom/android/server/pm/Settings$RuntimePermissionPersistence;->getVersionLPr(I)I
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->getPermissionsFromPermissionsState(Lcom/android/server/pm/permission/PermissionsState;I)Ljava/util/List;
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->getVersionLPr(I)I
+HPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->onUserRemovedLPw(I)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->parsePermissionsLPr(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/permission/PermissionsState;I)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->parseRuntimePermissionsLPr(Lorg/xmlpull/v1/XmlPullParser;I)V
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->readLegacyStateForUserSyncLPr(I)V
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->readPermissionsStateLpr(Ljava/util/List;Lcom/android/server/pm/permission/PermissionsState;I)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->readStateForUserSyncLPr(I)V
-PLcom/android/server/pm/Settings$RuntimePermissionPersistence;->setRuntimePermissionsFingerPrintLPr(Ljava/lang/String;I)V
+HPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->revokeRuntimePermissionsAndClearFlags(Lcom/android/server/pm/SettingBase;I)V
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->setRuntimePermissionsFingerPrintLPr(Ljava/lang/String;I)V
+PLcom/android/server/pm/Settings$RuntimePermissionPersistence;->setVersionLPr(II)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->writePermissions(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->writePermissionsForUserAsyncLPr(I)V
+PLcom/android/server/pm/Settings$RuntimePermissionPersistence;->writePermissionsForUserSyncLPr(I)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->writePermissionsSync(I)V
 HSPLcom/android/server/pm/Settings$VersionInfo;-><init>()V
 HSPLcom/android/server/pm/Settings;-><clinit>()V
 HSPLcom/android/server/pm/Settings;-><init>(Ljava/io/File;Lcom/android/server/pm/permission/PermissionSettings;Ljava/lang/Object;)V
 HSPLcom/android/server/pm/Settings;->access$200(Lcom/android/server/pm/Settings;I)Ljava/io/File;
-PLcom/android/server/pm/Settings;->acquireAndRegisterNewAppIdLPw(Lcom/android/server/pm/SettingBase;)I
+HSPLcom/android/server/pm/Settings;->acquireAndRegisterNewAppIdLPw(Lcom/android/server/pm/SettingBase;)I
+HSPLcom/android/server/pm/Settings;->addInstallerPackageNames(Lcom/android/server/pm/InstallSource;)V
 HSPLcom/android/server/pm/Settings;->addPackageLPw(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IJII[Ljava/lang/String;[J)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/Settings;->addPackageSettingLPw(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/SharedUserSetting;)V
 HSPLcom/android/server/pm/Settings;->addSharedUserLPw(Ljava/lang/String;III)Lcom/android/server/pm/SharedUserSetting;
+HPLcom/android/server/pm/Settings;->applyDefaultPreferredAppsLPw(I)V
 HSPLcom/android/server/pm/Settings;->areDefaultRuntimePermissionsGrantedLPr(I)Z
-PLcom/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/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JIILandroid/os/UserHandle;ZZZLcom/android/server/pm/UserManagerService;[Ljava/lang/String;[J)Lcom/android/server/pm/PackageSetting;
-PLcom/android/server/pm/Settings;->disableSystemPackageLPw(Ljava/lang/String;Z)Z
-PLcom/android/server/pm/Settings;->dumpGidsLPr(Ljava/io/PrintWriter;Ljava/lang/String;[I)V
-PLcom/android/server/pm/Settings;->dumpInstallPermissionsLPr(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;Lcom/android/server/pm/permission/PermissionsState;)V
+PLcom/android/server/pm/Settings;->createIntentFilterVerificationIfNeededLPw(Ljava/lang/String;Landroid/util/ArraySet;)Landroid/content/pm/IntentFilterVerificationInfo;
+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/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JIILandroid/os/UserHandle;ZZZLcom/android/server/pm/UserManagerService;[Ljava/lang/String;[J)Lcom/android/server/pm/PackageSetting;
+HPLcom/android/server/pm/Settings;->createNewUserLI(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/Installer;ILjava/util/Set;[Ljava/lang/String;)V
+HSPLcom/android/server/pm/Settings;->disableSystemPackageLPw(Ljava/lang/String;Z)Z
+HPLcom/android/server/pm/Settings;->dumpGidsLPr(Ljava/io/PrintWriter;Ljava/lang/String;[I)V
+HPLcom/android/server/pm/Settings;->dumpInstallPermissionsLPr(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;Lcom/android/server/pm/permission/PermissionsState;)V
 HPLcom/android/server/pm/Settings;->dumpPackageLPr(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Landroid/util/ArraySet;Lcom/android/server/pm/PackageSetting;Ljava/text/SimpleDateFormat;Ljava/util/Date;Ljava/util/List;ZZ)V
 HPLcom/android/server/pm/Settings;->dumpPackagesLPr(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;Lcom/android/server/pm/DumpState;Z)V
-PLcom/android/server/pm/Settings;->dumpPackagesProto(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/pm/Settings;->dumpPackagesProto(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/pm/Settings;->dumpPermissionsLPr(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;Lcom/android/server/pm/DumpState;)V
 PLcom/android/server/pm/Settings;->dumpReadMessagesLPr(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;)V
-PLcom/android/server/pm/Settings;->dumpRuntimePermissionsLPr(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;Ljava/util/List;Z)V
+HPLcom/android/server/pm/Settings;->dumpRuntimePermissionsLPr(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;Ljava/util/List;Z)V
 HPLcom/android/server/pm/Settings;->dumpSharedUsersLPr(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;Lcom/android/server/pm/DumpState;Z)V
 PLcom/android/server/pm/Settings;->dumpSharedUsersProto(Landroid/util/proto/ProtoOutputStream;)V
 HPLcom/android/server/pm/Settings;->dumpSplitNames(Ljava/io/PrintWriter;Landroid/content/pm/parsing/AndroidPackage;)V
-PLcom/android/server/pm/Settings;->dumpVersionLPr(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/pm/Settings;->dumpVersionLPr(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/pm/Settings;->editCrossProfileIntentResolverLPw(I)Lcom/android/server/pm/CrossProfileIntentResolver;
+HSPLcom/android/server/pm/Settings;->editPersistentPreferredActivitiesLPw(I)Lcom/android/server/pm/PersistentPreferredIntentResolver;
 HSPLcom/android/server/pm/Settings;->editPreferredActivitiesLPw(I)Lcom/android/server/pm/PreferredIntentResolver;
-PLcom/android/server/pm/Settings;->enableSystemPackageLPw(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
+HSPLcom/android/server/pm/Settings;->enableSystemPackageLPw(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 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;
-HPLcom/android/server/pm/Settings;->getApplicationEnabledSettingLPr(Ljava/lang/String;I)I
+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
-PLcom/android/server/pm/Settings;->getDefaultRuntimePermissionsVersionLPr(I)I
+HSPLcom/android/server/pm/Settings;->getDefaultRuntimePermissionsVersionLPr(I)I
 PLcom/android/server/pm/Settings;->getDisabledSystemPkgLPr(Lcom/android/server/pm/PackageSetting;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/Settings;->getDisabledSystemPkgLPr(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
-PLcom/android/server/pm/Settings;->getHarmfulAppWarningLPr(Ljava/lang/String;I)Ljava/lang/String;
-PLcom/android/server/pm/Settings;->getIntentFilterVerificationLPr(Ljava/lang/String;)Landroid/content/pm/IntentFilterVerificationInfo;
+HSPLcom/android/server/pm/Settings;->getHarmfulAppWarningLPr(Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/pm/Settings;->getIntentFilterVerificationLPr(Ljava/lang/String;)Landroid/content/pm/IntentFilterVerificationInfo;
+PLcom/android/server/pm/Settings;->getIntentFilterVerificationStatusLPr(Ljava/lang/String;I)I
 HPLcom/android/server/pm/Settings;->getIntentFilterVerificationsLPr(Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/pm/Settings;->getInternalVersion()Lcom/android/server/pm/Settings$VersionInfo;
 HSPLcom/android/server/pm/Settings;->getPackageLPr(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
@@ -15257,9 +25154,11 @@
 HSPLcom/android/server/pm/Settings;->getUsers(Lcom/android/server/pm/UserManagerService;Z)Ljava/util/List;
 HSPLcom/android/server/pm/Settings;->getVolumePackagesLPr(Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/pm/Settings;->insertPackageSettingLPw(Lcom/android/server/pm/PackageSetting;Landroid/content/pm/parsing/AndroidPackage;)V
+PLcom/android/server/pm/Settings;->isAdbInstallDisallowed(Lcom/android/server/pm/UserManagerService;I)Z
 HSPLcom/android/server/pm/Settings;->isDisabledSystemPackageLPr(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/Settings;->isEnabledAndMatchLPr(Landroid/content/pm/ComponentInfo;II)Z
 HSPLcom/android/server/pm/Settings;->isEnabledAndMatchLPr(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/ComponentParseUtils$ParsedComponent;II)Z
+PLcom/android/server/pm/Settings;->isOrphaned(Ljava/lang/String;)Z
 HPLcom/android/server/pm/Settings;->permissionFlagsToString(Ljava/lang/String;I)Ljava/lang/String;
 HPLcom/android/server/pm/Settings;->printFlags(Ljava/io/PrintWriter;I[Ljava/lang/Object;)V
 HSPLcom/android/server/pm/Settings;->pruneSharedUsersLPw()V
@@ -15278,16 +25177,28 @@
 HSPLcom/android/server/pm/Settings;->readRestoredIntentFilterVerifications(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/pm/Settings;->readSharedUserLPw(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/pm/Settings;->readUsesStaticLibLPw(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/PackageSetting;)V
-PLcom/android/server/pm/Settings;->registerAppIdLPw(Lcom/android/server/pm/PackageSetting;)Z
+HSPLcom/android/server/pm/Settings;->registerAppIdLPw(Lcom/android/server/pm/PackageSetting;)Z
 HSPLcom/android/server/pm/Settings;->registerExistingAppIdLPw(ILcom/android/server/pm/SettingBase;Ljava/lang/Object;)Z
+PLcom/android/server/pm/Settings;->removeAppIdLPw(I)V
+PLcom/android/server/pm/Settings;->removeCrossProfileIntentFiltersLPw(I)V
+PLcom/android/server/pm/Settings;->removeDefaultBrowserPackageNameLPw(I)Ljava/lang/String;
 PLcom/android/server/pm/Settings;->removeDisabledSystemPackageLPw(Ljava/lang/String;)V
-PLcom/android/server/pm/Settings;->setBlockUninstallLPw(ILjava/lang/String;Z)V
+PLcom/android/server/pm/Settings;->removeInstallerPackageStatus(Ljava/lang/String;)V
+PLcom/android/server/pm/Settings;->removeIntentFilterVerificationLPw(Ljava/lang/String;I)Z
+PLcom/android/server/pm/Settings;->removeIntentFilterVerificationLPw(Ljava/lang/String;[I)Z
+PLcom/android/server/pm/Settings;->removePackageLPw(Ljava/lang/String;)I
+HPLcom/android/server/pm/Settings;->removeUserLPw(I)V
+HPLcom/android/server/pm/Settings;->setBlockUninstallLPw(ILjava/lang/String;Z)V
+PLcom/android/server/pm/Settings;->setDefaultRuntimePermissionsVersionLPr(II)V
+PLcom/android/server/pm/Settings;->setFirstAvailableUid(I)V
 PLcom/android/server/pm/Settings;->setInstallerPackageName(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/Settings;->setPackageStoppedStateLPw(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ZZII)Z
-PLcom/android/server/pm/Settings;->setRuntimePermissionsFingerPrintLPr(Ljava/lang/String;I)V
+HSPLcom/android/server/pm/Settings;->setRuntimePermissionsFingerPrintLPr(Ljava/lang/String;I)V
 PLcom/android/server/pm/Settings;->updateIntentFilterVerificationStatusLPw(Ljava/lang/String;II)Z
 HSPLcom/android/server/pm/Settings;->updatePackageSetting(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/SharedUserSetting;Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILcom/android/server/pm/UserManagerService;[Ljava/lang/String;[J)V
-PLcom/android/server/pm/Settings;->writeAllDomainVerificationsLPr(Lorg/xmlpull/v1/XmlSerializer;I)V
+PLcom/android/server/pm/Settings;->updateSharedUserPermsLPw(Lcom/android/server/pm/PackageSetting;I)I
+PLcom/android/server/pm/Settings;->wasPackageEverLaunchedLPr(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/Settings;->writeAllDomainVerificationsLPr(Lorg/xmlpull/v1/XmlSerializer;I)V
 HSPLcom/android/server/pm/Settings;->writeAllRuntimePermissionsLPr()V
 HSPLcom/android/server/pm/Settings;->writeAllUsersPackageRestrictionsLPr()V
 HSPLcom/android/server/pm/Settings;->writeBlockUninstallPackagesLPr(Lorg/xmlpull/v1/XmlSerializer;I)V
@@ -15299,6 +25210,7 @@
 HSPLcom/android/server/pm/Settings;->writeKernelMappingLPr()V
 HSPLcom/android/server/pm/Settings;->writeKernelMappingLPr(Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/Settings;->writeKernelMappingLPr(Ljava/lang/String;I[I)V
+PLcom/android/server/pm/Settings;->writeKernelRemoveUserLPr(I)V
 HSPLcom/android/server/pm/Settings;->writeKeySetAliasesLPr(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/pm/PackageKeySetData;)V
 HSPLcom/android/server/pm/Settings;->writeLPr()V
 HSPLcom/android/server/pm/Settings;->writePackageLPr(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/pm/PackageSetting;)V
@@ -15309,100 +25221,127 @@
 HSPLcom/android/server/pm/Settings;->writePermissionsLPr(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;)V
 HSPLcom/android/server/pm/Settings;->writePersistentPreferredActivitiesLPr(Lorg/xmlpull/v1/XmlSerializer;I)V
 HSPLcom/android/server/pm/Settings;->writePreferredActivitiesLPr(Lorg/xmlpull/v1/XmlSerializer;IZ)V
-PLcom/android/server/pm/Settings;->writeRuntimePermissionsForUserLPr(IZ)V
+HSPLcom/android/server/pm/Settings;->writeRuntimePermissionsForUserLPr(IZ)V
 HSPLcom/android/server/pm/Settings;->writeSigningKeySetLPr(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/pm/PackageKeySetData;)V
 HSPLcom/android/server/pm/Settings;->writeUpgradeKeySetsLPr(Lorg/xmlpull/v1/XmlSerializer;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;->writeUsesStaticLibLPw(Lorg/xmlpull/v1/XmlSerializer;[Ljava/lang/String;[J)V
-PLcom/android/server/pm/ShareTargetInfo$TargetData;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/pm/ShareTargetInfo$TargetData;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/pm/ShareTargetInfo;-><init>([Lcom/android/server/pm/ShareTargetInfo$TargetData;Ljava/lang/String;[Ljava/lang/String;)V
-PLcom/android/server/pm/ShareTargetInfo;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/pm/ShareTargetInfo;
+HPLcom/android/server/pm/ShareTargetInfo;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/pm/ShareTargetInfo;
 PLcom/android/server/pm/ShareTargetInfo;->parseTargetData(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/pm/ShareTargetInfo$TargetData;
 HPLcom/android/server/pm/ShareTargetInfo;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
 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(Landroid/util/ArrayMap;)V
 PLcom/android/server/pm/SharedUserSetting;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/pm/SharedUserSetting;->fixSeInfoLocked()V
 HSPLcom/android/server/pm/SharedUserSetting;->getPackages()Ljava/util/List;
 HSPLcom/android/server/pm/SharedUserSetting;->getPermissionsState()Lcom/android/server/pm/permission/PermissionsState;
 HSPLcom/android/server/pm/SharedUserSetting;->isPrivileged()Z
-PLcom/android/server/pm/SharedUserSetting;->toString()Ljava/lang/String;
+PLcom/android/server/pm/SharedUserSetting;->removePackage(Lcom/android/server/pm/PackageSetting;)Z
+HPLcom/android/server/pm/SharedUserSetting;->toString()Ljava/lang/String;
+HSPLcom/android/server/pm/SharedUserSetting;->updateProcesses()V
 HPLcom/android/server/pm/ShortcutBitmapSaver$PendingItem;-><init>(Landroid/content/pm/ShortcutInfo;[B)V
-PLcom/android/server/pm/ShortcutBitmapSaver$PendingItem;-><init>(Landroid/content/pm/ShortcutInfo;[BLcom/android/server/pm/ShortcutBitmapSaver$1;)V
+HPLcom/android/server/pm/ShortcutBitmapSaver$PendingItem;-><init>(Landroid/content/pm/ShortcutInfo;[BLcom/android/server/pm/ShortcutBitmapSaver$1;)V
 HSPLcom/android/server/pm/ShortcutBitmapSaver;-><init>(Lcom/android/server/pm/ShortcutService;)V
 PLcom/android/server/pm/ShortcutBitmapSaver;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/pm/ShortcutBitmapSaver;->lambda$waitForAllSavesLocked$0(Ljava/util/concurrent/CountDownLatch;)V
-PLcom/android/server/pm/ShortcutBitmapSaver;->processPendingItems()Z
+PLcom/android/server/pm/ShortcutBitmapSaver;->getBitmapPathMayWaitLocked(Landroid/content/pm/ShortcutInfo;)Ljava/lang/String;
+PLcom/android/server/pm/ShortcutBitmapSaver;->lambda$new$1$ShortcutBitmapSaver()V
+HPLcom/android/server/pm/ShortcutBitmapSaver;->lambda$waitForAllSavesLocked$0(Ljava/util/concurrent/CountDownLatch;)V
+HPLcom/android/server/pm/ShortcutBitmapSaver;->processPendingItems()Z
 PLcom/android/server/pm/ShortcutBitmapSaver;->removeIcon(Landroid/content/pm/ShortcutInfo;)V
-PLcom/android/server/pm/ShortcutBitmapSaver;->saveBitmapLocked(Landroid/content/pm/ShortcutInfo;ILandroid/graphics/Bitmap$CompressFormat;I)V
-PLcom/android/server/pm/ShortcutBitmapSaver;->waitForAllSavesLocked()Z
+HPLcom/android/server/pm/ShortcutBitmapSaver;->saveBitmapLocked(Landroid/content/pm/ShortcutInfo;ILandroid/graphics/Bitmap$CompressFormat;I)V
+HPLcom/android/server/pm/ShortcutBitmapSaver;->waitForAllSavesLocked()Z
 HSPLcom/android/server/pm/ShortcutDumpFiles;-><init>(Lcom/android/server/pm/ShortcutService;)V
-PLcom/android/server/pm/ShortcutDumpFiles;->dumpAll(Ljava/io/PrintWriter;)V
+HPLcom/android/server/pm/ShortcutDumpFiles;->dumpAll(Ljava/io/PrintWriter;)V
+PLcom/android/server/pm/ShortcutDumpFiles;->lambda$dumpAll$1(Ljava/io/File;)Z
+PLcom/android/server/pm/ShortcutDumpFiles;->lambda$dumpAll$2(Ljava/io/File;)Ljava/lang/String;
+PLcom/android/server/pm/ShortcutDumpFiles;->lambda$save$0([BLjava/io/PrintWriter;)V
 PLcom/android/server/pm/ShortcutDumpFiles;->save(Ljava/lang/String;Ljava/util/function/Consumer;)Z
+PLcom/android/server/pm/ShortcutDumpFiles;->save(Ljava/lang/String;[B)Z
 PLcom/android/server/pm/ShortcutLauncher;-><init>(Lcom/android/server/pm/ShortcutUser;ILjava/lang/String;I)V
 PLcom/android/server/pm/ShortcutLauncher;-><init>(Lcom/android/server/pm/ShortcutUser;ILjava/lang/String;ILcom/android/server/pm/ShortcutPackageInfo;)V
-PLcom/android/server/pm/ShortcutLauncher;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/ShortcutService$DumpFilter;)V
+PLcom/android/server/pm/ShortcutLauncher;->addPinnedShortcut(Ljava/lang/String;ILjava/lang/String;Z)V
+HPLcom/android/server/pm/ShortcutLauncher;->cleanUpPackage(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/ShortcutLauncher;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/ShortcutService$DumpFilter;)V
 PLcom/android/server/pm/ShortcutLauncher;->ensurePackageInfo()V
 PLcom/android/server/pm/ShortcutLauncher;->getOwnerUserId()I
-PLcom/android/server/pm/ShortcutLauncher;->getPinnedShortcutIds(Ljava/lang/String;I)Landroid/util/ArraySet;
+HPLcom/android/server/pm/ShortcutLauncher;->getPinnedShortcutIds(Ljava/lang/String;I)Landroid/util/ArraySet;
+PLcom/android/server/pm/ShortcutLauncher;->hasPinned(Landroid/content/pm/ShortcutInfo;)Z
 PLcom/android/server/pm/ShortcutLauncher;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/ShortcutUser;IZ)Lcom/android/server/pm/ShortcutLauncher;
-PLcom/android/server/pm/ShortcutLauncher;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
+PLcom/android/server/pm/ShortcutLauncher;->pinShortcuts(ILjava/lang/String;Ljava/util/List;Z)V
+HPLcom/android/server/pm/ShortcutLauncher;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
 PLcom/android/server/pm/ShortcutNonPersistentUser;-><init>(Lcom/android/server/pm/ShortcutService;I)V
 PLcom/android/server/pm/ShortcutNonPersistentUser;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/ShortcutService$DumpFilter;)V
 PLcom/android/server/pm/ShortcutNonPersistentUser;->getUserId()I
-PLcom/android/server/pm/ShortcutNonPersistentUser;->hasHostPackage(Ljava/lang/String;)Z
+HPLcom/android/server/pm/ShortcutNonPersistentUser;->hasHostPackage(Ljava/lang/String;)Z
 PLcom/android/server/pm/ShortcutNonPersistentUser;->setShortcutHostPackage(Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/pm/ShortcutPackage;-><init>(Lcom/android/server/pm/ShortcutUser;ILjava/lang/String;)V
-PLcom/android/server/pm/ShortcutPackage;-><init>(Lcom/android/server/pm/ShortcutUser;ILjava/lang/String;Lcom/android/server/pm/ShortcutPackageInfo;)V
-PLcom/android/server/pm/ShortcutPackage;->addOrReplaceDynamicShortcut(Landroid/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;->addOrReplaceDynamicShortcut(Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->adjustRanks()V
-PLcom/android/server/pm/ShortcutPackage;->areAllActivitiesStillEnabled()Z
-PLcom/android/server/pm/ShortcutPackage;->clearAllImplicitRanks()V
-PLcom/android/server/pm/ShortcutPackage;->deleteAllDynamicShortcuts(Z)V
-PLcom/android/server/pm/ShortcutPackage;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/ShortcutService$DumpFilter;)V
+HPLcom/android/server/pm/ShortcutPackage;->areAllActivitiesStillEnabled()Z
+PLcom/android/server/pm/ShortcutPackage;->canRestoreAnyVersion()Z
+HPLcom/android/server/pm/ShortcutPackage;->clearAllImplicitRanks()V
+HPLcom/android/server/pm/ShortcutPackage;->deleteAllDynamicShortcuts(Z)V
+PLcom/android/server/pm/ShortcutPackage;->deleteDynamicWithId(Ljava/lang/String;Z)Z
+PLcom/android/server/pm/ShortcutPackage;->deleteOrDisableWithId(Ljava/lang/String;ZZZI)Landroid/content/pm/ShortcutInfo;
+PLcom/android/server/pm/ShortcutPackage;->disableDynamicWithId(Ljava/lang/String;ZI)Z
+PLcom/android/server/pm/ShortcutPackage;->disableWithId(Ljava/lang/String;Ljava/lang/String;IZZI)V
+HPLcom/android/server/pm/ShortcutPackage;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/ShortcutService$DumpFilter;)V
+PLcom/android/server/pm/ShortcutPackage;->enableWithId(Ljava/lang/String;)V
 HPLcom/android/server/pm/ShortcutPackage;->enforceShortcutCountsBeforeOperation(Ljava/util/List;I)V
-PLcom/android/server/pm/ShortcutPackage;->ensureImmutableShortcutsNotIncluded(Ljava/util/List;Z)V
-PLcom/android/server/pm/ShortcutPackage;->ensureImmutableShortcutsNotIncludedWithIds(Ljava/util/List;Z)V
+HPLcom/android/server/pm/ShortcutPackage;->ensureImmutableShortcutsNotIncluded(Ljava/util/List;Z)V
+HPLcom/android/server/pm/ShortcutPackage;->ensureImmutableShortcutsNotIncludedWithIds(Ljava/util/List;Z)V
 PLcom/android/server/pm/ShortcutPackage;->ensureNotImmutable(Landroid/content/pm/ShortcutInfo;Z)V
 HPLcom/android/server/pm/ShortcutPackage;->ensureNotImmutable(Ljava/lang/String;Z)V
-PLcom/android/server/pm/ShortcutPackage;->findAll(Ljava/util/List;Ljava/util/function/Predicate;I)V
+HPLcom/android/server/pm/ShortcutPackage;->findAll(Ljava/util/List;Ljava/util/function/Predicate;I)V
 HPLcom/android/server/pm/ShortcutPackage;->findAll(Ljava/util/List;Ljava/util/function/Predicate;ILjava/lang/String;IZ)V
-PLcom/android/server/pm/ShortcutPackage;->findShortcutById(Ljava/lang/String;)Landroid/content/pm/ShortcutInfo;
+HPLcom/android/server/pm/ShortcutPackage;->findShortcutById(Ljava/lang/String;)Landroid/content/pm/ShortcutInfo;
 HPLcom/android/server/pm/ShortcutPackage;->forceDeleteShortcutInner(Ljava/lang/String;)Landroid/content/pm/ShortcutInfo;
 HPLcom/android/server/pm/ShortcutPackage;->forceReplaceShortcutInner(Landroid/content/pm/ShortcutInfo;)V
-PLcom/android/server/pm/ShortcutPackage;->getApiCallCount(Z)I
+HPLcom/android/server/pm/ShortcutPackage;->getApiCallCount(Z)I
 HPLcom/android/server/pm/ShortcutPackage;->getFileName(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/pm/ShortcutPackage;->getMatchingShareTargets(Landroid/content/IntentFilter;)Ljava/util/List;
-PLcom/android/server/pm/ShortcutPackage;->getOwnerUserId()I
+HPLcom/android/server/pm/ShortcutPackage;->getMatchingShareTargets(Landroid/content/IntentFilter;)Ljava/util/List;
+HPLcom/android/server/pm/ShortcutPackage;->getOwnerUserId()I
 PLcom/android/server/pm/ShortcutPackage;->getPackageResources()Landroid/content/res/Resources;
 HPLcom/android/server/pm/ShortcutPackage;->getSharingShortcutCount()I
 HPLcom/android/server/pm/ShortcutPackage;->getUsedBitmapFiles()Landroid/util/ArraySet;
 HPLcom/android/server/pm/ShortcutPackage;->hasShareTargets()Z
 HPLcom/android/server/pm/ShortcutPackage;->incrementCountForActivity(Landroid/util/ArrayMap;Landroid/content/ComponentName;I)V
 PLcom/android/server/pm/ShortcutPackage;->isShortcutExistsAndVisibleToPublisher(Ljava/lang/String;)Z
-PLcom/android/server/pm/ShortcutPackage;->lambda$new$2(Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;)I
-PLcom/android/server/pm/ShortcutPackage;->loadFromXml(Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutUser;Lorg/xmlpull/v1/XmlPullParser;Z)Lcom/android/server/pm/ShortcutPackage;
-PLcom/android/server/pm/ShortcutPackage;->parseIntent(Lorg/xmlpull/v1/XmlPullParser;)Landroid/content/Intent;
-PLcom/android/server/pm/ShortcutPackage;->parseShortcut(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;IZ)Landroid/content/pm/ShortcutInfo;
+HPLcom/android/server/pm/ShortcutPackage;->lambda$new$2(Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;)I
+HPLcom/android/server/pm/ShortcutPackage;->lambda$refreshPinnedFlags$0$ShortcutPackage(Lcom/android/server/pm/ShortcutLauncher;)V
+HPLcom/android/server/pm/ShortcutPackage;->loadFromXml(Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutUser;Lorg/xmlpull/v1/XmlPullParser;Z)Lcom/android/server/pm/ShortcutPackage;
+PLcom/android/server/pm/ShortcutPackage;->onRestored(I)V
+HPLcom/android/server/pm/ShortcutPackage;->parseIntent(Lorg/xmlpull/v1/XmlPullParser;)Landroid/content/Intent;
+HPLcom/android/server/pm/ShortcutPackage;->parseShortcut(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;IZ)Landroid/content/pm/ShortcutInfo;
 HPLcom/android/server/pm/ShortcutPackage;->publishManifestShortcuts(Ljava/util/List;)Z
-PLcom/android/server/pm/ShortcutPackage;->pushOutExcessShortcuts()Z
-PLcom/android/server/pm/ShortcutPackage;->removeOrphans()V
-PLcom/android/server/pm/ShortcutPackage;->rescanPackageIfNeeded(ZZ)Z
+HPLcom/android/server/pm/ShortcutPackage;->pushOutExcessShortcuts()Z
+HPLcom/android/server/pm/ShortcutPackage;->refreshPinnedFlags()V
+HPLcom/android/server/pm/ShortcutPackage;->removeOrphans()V
+HPLcom/android/server/pm/ShortcutPackage;->rescanPackageIfNeeded(ZZ)Z
 PLcom/android/server/pm/ShortcutPackage;->resetRateLimiting()V
+PLcom/android/server/pm/ShortcutPackage;->resetRateLimitingForCommandLineNoSaving()V
+PLcom/android/server/pm/ShortcutPackage;->resolveResourceStrings()V
 HPLcom/android/server/pm/ShortcutPackage;->saveShortcut(Lorg/xmlpull/v1/XmlSerializer;Landroid/content/pm/ShortcutInfo;ZZ)V
 HPLcom/android/server/pm/ShortcutPackage;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
 HPLcom/android/server/pm/ShortcutPackage;->sortShortcutsToActivities()Landroid/util/ArrayMap;
 PLcom/android/server/pm/ShortcutPackage;->tryApiCall(Z)Z
-PLcom/android/server/pm/ShortcutPackageInfo;-><init>(JJLjava/util/ArrayList;Z)V
-PLcom/android/server/pm/ShortcutPackageInfo;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/pm/ShortcutPackageInfo;-><init>(JJLjava/util/ArrayList;Z)V
+PLcom/android/server/pm/ShortcutPackageInfo;->canRestoreTo(Lcom/android/server/pm/ShortcutService;Landroid/content/pm/PackageInfo;Z)I
+HPLcom/android/server/pm/ShortcutPackageInfo;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/pm/ShortcutPackageInfo;->getLastUpdateTime()J
 PLcom/android/server/pm/ShortcutPackageInfo;->getVersionCode()J
+PLcom/android/server/pm/ShortcutPackageInfo;->hasSignatures()Z
 HPLcom/android/server/pm/ShortcutPackageInfo;->isBackupAllowed()Z
 HPLcom/android/server/pm/ShortcutPackageInfo;->isShadow()Z
-PLcom/android/server/pm/ShortcutPackageInfo;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;Z)V
+HPLcom/android/server/pm/ShortcutPackageInfo;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;Z)V
 HPLcom/android/server/pm/ShortcutPackageInfo;->newEmpty()Lcom/android/server/pm/ShortcutPackageInfo;
 PLcom/android/server/pm/ShortcutPackageInfo;->refreshSignature(Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutPackageItem;)V
 HPLcom/android/server/pm/ShortcutPackageInfo;->saveToXml(Lcom/android/server/pm/ShortcutService;Lorg/xmlpull/v1/XmlSerializer;Z)V
+PLcom/android/server/pm/ShortcutPackageInfo;->setShadow(Z)V
 PLcom/android/server/pm/ShortcutPackageInfo;->updateFromPackageInfo(Landroid/content/pm/PackageInfo;)V
 HPLcom/android/server/pm/ShortcutPackageItem;-><init>(Lcom/android/server/pm/ShortcutUser;ILjava/lang/String;Lcom/android/server/pm/ShortcutPackageInfo;)V
 HPLcom/android/server/pm/ShortcutPackageItem;->attemptToRestoreIfNeededAndSave()V
@@ -15412,32 +25351,48 @@
 PLcom/android/server/pm/ShortcutPackageItem;->getUser()Lcom/android/server/pm/ShortcutUser;
 PLcom/android/server/pm/ShortcutPackageItem;->refreshPackageSignatureAndSave()V
 PLcom/android/server/pm/ShortcutPackageItem;->replaceUser(Lcom/android/server/pm/ShortcutUser;)V
-PLcom/android/server/pm/ShortcutParser;->createShortcutFromManifest(Lcom/android/server/pm/ShortcutService;ILjava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;IIIIIZ)Landroid/content/pm/ShortcutInfo;
-PLcom/android/server/pm/ShortcutParser;->parseCategories(Lcom/android/server/pm/ShortcutService;Landroid/util/AttributeSet;)Ljava/lang/String;
+HPLcom/android/server/pm/ShortcutParser;->createShortcutFromManifest(Lcom/android/server/pm/ShortcutService;ILjava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;IIIIIZ)Landroid/content/pm/ShortcutInfo;
+HPLcom/android/server/pm/ShortcutParser;->parseCategories(Lcom/android/server/pm/ShortcutService;Landroid/util/AttributeSet;)Ljava/lang/String;
 PLcom/android/server/pm/ShortcutParser;->parseCategory(Lcom/android/server/pm/ShortcutService;Landroid/util/AttributeSet;)Ljava/lang/String;
 PLcom/android/server/pm/ShortcutParser;->parseShareTargetAttributes(Lcom/android/server/pm/ShortcutService;Landroid/util/AttributeSet;)Lcom/android/server/pm/ShareTargetInfo;
 HPLcom/android/server/pm/ShortcutParser;->parseShareTargetData(Lcom/android/server/pm/ShortcutService;Landroid/util/AttributeSet;)Lcom/android/server/pm/ShareTargetInfo$TargetData;
-PLcom/android/server/pm/ShortcutParser;->parseShortcutAttributes(Lcom/android/server/pm/ShortcutService;Landroid/util/AttributeSet;Ljava/lang/String;Landroid/content/ComponentName;II)Landroid/content/pm/ShortcutInfo;
-PLcom/android/server/pm/ShortcutParser;->parseShortcuts(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;ILjava/util/List;)Ljava/util/List;
+HPLcom/android/server/pm/ShortcutParser;->parseShortcutAttributes(Lcom/android/server/pm/ShortcutService;Landroid/util/AttributeSet;Ljava/lang/String;Landroid/content/ComponentName;II)Landroid/content/pm/ShortcutInfo;
+HPLcom/android/server/pm/ShortcutParser;->parseShortcuts(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;ILjava/util/List;)Ljava/util/List;
 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;
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner;-><init>(Lcom/android/server/pm/ShortcutRequestPinProcessor;Landroid/content/IntentSender;I)V
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner;-><init>(Lcom/android/server/pm/ShortcutRequestPinProcessor;Landroid/content/IntentSender;ILcom/android/server/pm/ShortcutRequestPinProcessor$1;)V
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner;->accept(Landroid/os/Bundle;)Z
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner;->isCallerValid()Z
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner;->isValid()Z
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinShortcutRequestInner;-><init>(Lcom/android/server/pm/ShortcutRequestPinProcessor;Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;Landroid/content/IntentSender;Ljava/lang/String;IIZ)V
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinShortcutRequestInner;-><init>(Lcom/android/server/pm/ShortcutRequestPinProcessor;Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;Landroid/content/IntentSender;Ljava/lang/String;IIZLcom/android/server/pm/ShortcutRequestPinProcessor$1;)V
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinShortcutRequestInner;->getShortcutInfo()Landroid/content/pm/ShortcutInfo;
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinShortcutRequestInner;->tryAccept()Z
 HSPLcom/android/server/pm/ShortcutRequestPinProcessor;-><init>(Lcom/android/server/pm/ShortcutService;Ljava/lang/Object;)V
-PLcom/android/server/pm/ShortcutRequestPinProcessor;->getRequestPinConfirmationActivity(II)Landroid/util/Pair;
+PLcom/android/server/pm/ShortcutRequestPinProcessor;->createShortcutResultIntent(Landroid/content/pm/ShortcutInfo;I)Landroid/content/Intent;
+PLcom/android/server/pm/ShortcutRequestPinProcessor;->directPinShortcut(Lcom/android/server/pm/ShortcutRequestPinProcessor$PinShortcutRequestInner;)Z
+HPLcom/android/server/pm/ShortcutRequestPinProcessor;->getRequestPinConfirmationActivity(II)Landroid/util/Pair;
+PLcom/android/server/pm/ShortcutRequestPinProcessor;->isCallerUid(I)Z
+HPLcom/android/server/pm/ShortcutRequestPinProcessor;->isRequestPinItemSupported(II)Z
+PLcom/android/server/pm/ShortcutRequestPinProcessor;->requestPinShortcutLocked(Landroid/content/pm/ShortcutInfo;Landroid/content/IntentSender;Landroid/util/Pair;)Landroid/content/pm/LauncherApps$PinItemRequest;
+PLcom/android/server/pm/ShortcutRequestPinProcessor;->sendResultIntent(Landroid/content/IntentSender;Landroid/content/Intent;)V
 HSPLcom/android/server/pm/ShortcutService$1;-><init>()V
 PLcom/android/server/pm/ShortcutService$1;->test(Landroid/content/pm/ResolveInfo;)Z
-PLcom/android/server/pm/ShortcutService$1;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/pm/ShortcutService$1;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/pm/ShortcutService$2;-><init>()V
 PLcom/android/server/pm/ShortcutService$2;->test(Landroid/content/pm/PackageInfo;)Z
-PLcom/android/server/pm/ShortcutService$2;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/pm/ShortcutService$2;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/pm/ShortcutService$3;-><init>(Lcom/android/server/pm/ShortcutService;)V
 HSPLcom/android/server/pm/ShortcutService$3;->lambda$onUidGone$1$ShortcutService$3(I)V
 HSPLcom/android/server/pm/ShortcutService$3;->lambda$onUidStateChanged$0$ShortcutService$3(II)V
 HSPLcom/android/server/pm/ShortcutService$3;->onUidGone(IZ)V
 HSPLcom/android/server/pm/ShortcutService$3;->onUidStateChanged(IIJI)V
 HSPLcom/android/server/pm/ShortcutService$4;-><init>(Lcom/android/server/pm/ShortcutService;)V
+HSPLcom/android/server/pm/ShortcutService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/pm/ShortcutService$5;-><init>(Lcom/android/server/pm/ShortcutService;)V
-PLcom/android/server/pm/ShortcutService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/pm/ShortcutService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/pm/ShortcutService$DumpFilter;-><init>()V
-PLcom/android/server/pm/ShortcutService$DumpFilter;->isPackageMatch(Ljava/lang/String;)Z
+HPLcom/android/server/pm/ShortcutService$DumpFilter;->isPackageMatch(Ljava/lang/String;)Z
 PLcom/android/server/pm/ShortcutService$DumpFilter;->isUserMatch(I)Z
 PLcom/android/server/pm/ShortcutService$DumpFilter;->setDumpFiles(Z)V
 PLcom/android/server/pm/ShortcutService$DumpFilter;->setDumpUid(Z)V
@@ -15446,182 +25401,255 @@
 PLcom/android/server/pm/ShortcutService$DumpFilter;->shouldDumpFiles()Z
 PLcom/android/server/pm/ShortcutService$DumpFilter;->shouldDumpMain()Z
 PLcom/android/server/pm/ShortcutService$DumpFilter;->shouldDumpUid()Z
-PLcom/android/server/pm/ShortcutService$FileOutputStreamWithPath;-><init>(Ljava/io/File;)V
+HPLcom/android/server/pm/ShortcutService$FileOutputStreamWithPath;-><init>(Ljava/io/File;)V
 PLcom/android/server/pm/ShortcutService$FileOutputStreamWithPath;->getFile()Ljava/io/File;
 HSPLcom/android/server/pm/ShortcutService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/ShortcutService$Lifecycle;->onBootPhase(I)V
 HSPLcom/android/server/pm/ShortcutService$Lifecycle;->onStart()V
+PLcom/android/server/pm/ShortcutService$Lifecycle;->onStopUser(I)V
 PLcom/android/server/pm/ShortcutService$Lifecycle;->onUnlockUser(I)V
 HSPLcom/android/server/pm/ShortcutService$LocalService;-><init>(Lcom/android/server/pm/ShortcutService;)V
 HSPLcom/android/server/pm/ShortcutService$LocalService;-><init>(Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService$1;)V
 HSPLcom/android/server/pm/ShortcutService$LocalService;->addListener(Landroid/content/pm/ShortcutServiceInternal$ShortcutChangeListener;)V
+PLcom/android/server/pm/ShortcutService$LocalService;->createShortcutIntents(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;III)[Landroid/content/Intent;
 PLcom/android/server/pm/ShortcutService$LocalService;->getShortcutIconFd(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Landroid/os/ParcelFileDescriptor;
-PLcom/android/server/pm/ShortcutService$LocalService;->getShortcuts(ILjava/lang/String;JLjava/lang/String;Ljava/util/List;Landroid/content/ComponentName;IIII)Ljava/util/List;
-PLcom/android/server/pm/ShortcutService$LocalService;->getShortcutsInnerLocked(ILjava/lang/String;Ljava/lang/String;Ljava/util/List;JLandroid/content/ComponentName;IILjava/util/ArrayList;III)V
+PLcom/android/server/pm/ShortcutService$LocalService;->getShortcutInfoLocked(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IZ)Landroid/content/pm/ShortcutInfo;
+HPLcom/android/server/pm/ShortcutService$LocalService;->getShortcuts(ILjava/lang/String;JLjava/lang/String;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;JLandroid/content/ComponentName;IILjava/util/ArrayList;III)V
 HPLcom/android/server/pm/ShortcutService$LocalService;->hasShortcutHostPermission(ILjava/lang/String;II)Z
-PLcom/android/server/pm/ShortcutService$LocalService;->lambda$getShortcuts$0$ShortcutService$LocalService(ILjava/lang/String;Ljava/util/List;JLandroid/content/ComponentName;IILjava/util/ArrayList;IIILcom/android/server/pm/ShortcutPackage;)V
+PLcom/android/server/pm/ShortcutService$LocalService;->isForegroundDefaultLauncher(Ljava/lang/String;I)Z
+PLcom/android/server/pm/ShortcutService$LocalService;->isPinnedByCaller(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/pm/ShortcutService$LocalService;->isRequestPinItemSupported(II)Z
+PLcom/android/server/pm/ShortcutService$LocalService;->lambda$getShortcutInfoLocked$2(Ljava/lang/String;Landroid/content/pm/ShortcutInfo;)Z
+HPLcom/android/server/pm/ShortcutService$LocalService;->lambda$getShortcuts$0$ShortcutService$LocalService(ILjava/lang/String;Ljava/util/List;JLandroid/content/ComponentName;IILjava/util/ArrayList;IIILcom/android/server/pm/ShortcutPackage;)V
 HPLcom/android/server/pm/ShortcutService$LocalService;->lambda$getShortcutsInnerLocked$1(JLandroid/util/ArraySet;Landroid/content/ComponentName;ZZZZLandroid/content/pm/ShortcutInfo;)Z
+HPLcom/android/server/pm/ShortcutService$LocalService;->lambda$getShortcutsInnerLocked$1(JLandroid/util/ArraySet;Landroid/content/ComponentName;ZZZZZLandroid/content/pm/ShortcutInfo;)Z
+PLcom/android/server/pm/ShortcutService$LocalService;->pinShortcuts(ILjava/lang/String;Ljava/lang/String;Ljava/util/List;I)V
 PLcom/android/server/pm/ShortcutService$LocalService;->setShortcutHostPackage(Ljava/lang/String;Ljava/lang/String;I)V
 HSPLcom/android/server/pm/ShortcutService;-><clinit>()V
 HSPLcom/android/server/pm/ShortcutService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/ShortcutService;-><init>(Landroid/content/Context;Landroid/os/Looper;Z)V
 PLcom/android/server/pm/ShortcutService;->access$000(Landroid/content/pm/PackageInfo;)Z
+PLcom/android/server/pm/ShortcutService;->access$1000(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;->access$1100(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;->access$1200(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;I)V
 HSPLcom/android/server/pm/ShortcutService;->access$200(Lcom/android/server/pm/ShortcutService;)Ljava/lang/Object;
 HPLcom/android/server/pm/ShortcutService;->access$300(Lcom/android/server/pm/ShortcutService;Ljava/util/List;)Ljava/util/List;
 HSPLcom/android/server/pm/ShortcutService;->access$400(Lcom/android/server/pm/ShortcutService;)Ljava/util/ArrayList;
-PLcom/android/server/pm/ShortcutService;->addDynamicShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
+PLcom/android/server/pm/ShortcutService;->access$500(Lcom/android/server/pm/ShortcutService;)Lcom/android/server/pm/ShortcutBitmapSaver;
+HSPLcom/android/server/pm/ShortcutService;->access$700(Lcom/android/server/pm/ShortcutService;)Ljava/util/concurrent/atomic/AtomicBoolean;
+PLcom/android/server/pm/ShortcutService;->access$800(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;->access$900(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;I)V
+HPLcom/android/server/pm/ShortcutService;->addDynamicShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
+HPLcom/android/server/pm/ShortcutService;->assignImplicitRanks(Ljava/util/List;)V
 HPLcom/android/server/pm/ShortcutService;->canSeeAnyPinnedShortcut(Ljava/lang/String;III)Z
 PLcom/android/server/pm/ShortcutService;->checkPackageChanges(I)V
+PLcom/android/server/pm/ShortcutService;->cleanUpPackageForAllLoadedUsers(Ljava/lang/String;IZ)V
+HPLcom/android/server/pm/ShortcutService;->cleanUpPackageLocked(Ljava/lang/String;IIZ)V
+HPLcom/android/server/pm/ShortcutService;->cleanupBitmapsForPackage(ILjava/lang/String;)V
 HPLcom/android/server/pm/ShortcutService;->cleanupDanglingBitmapDirectoriesLocked(I)V
 HPLcom/android/server/pm/ShortcutService;->cleanupDanglingBitmapFilesLocked(ILcom/android/server/pm/ShortcutUser;Ljava/lang/String;Ljava/io/File;)V
-PLcom/android/server/pm/ShortcutService;->disableShortcuts(Ljava/lang/String;Ljava/util/List;Ljava/lang/CharSequence;II)V
+PLcom/android/server/pm/ShortcutService;->createShortcutResultIntent(Ljava/lang/String;Landroid/content/pm/ShortcutInfo;I)Landroid/content/Intent;
+HPLcom/android/server/pm/ShortcutService;->disableShortcuts(Ljava/lang/String;Ljava/util/List;Ljava/lang/CharSequence;II)V
 PLcom/android/server/pm/ShortcutService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/pm/ShortcutService;->dumpDumpFiles(Ljava/io/PrintWriter;)V
-PLcom/android/server/pm/ShortcutService;->dumpInner(Ljava/io/PrintWriter;Lcom/android/server/pm/ShortcutService$DumpFilter;)V
+HPLcom/android/server/pm/ShortcutService;->dumpInner(Ljava/io/PrintWriter;Lcom/android/server/pm/ShortcutService$DumpFilter;)V
 PLcom/android/server/pm/ShortcutService;->dumpNoCheck(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/pm/ShortcutService;->dumpUid(Ljava/io/PrintWriter;)V
+HPLcom/android/server/pm/ShortcutService;->dumpUid(Ljava/io/PrintWriter;)V
 PLcom/android/server/pm/ShortcutService;->enableShortcuts(Ljava/lang/String;Ljava/util/List;I)V
-PLcom/android/server/pm/ShortcutService;->fillInDefaultActivity(Ljava/util/List;)V
-PLcom/android/server/pm/ShortcutService;->fixUpIncomingShortcutInfo(Landroid/content/pm/ShortcutInfo;ZZ)V
-PLcom/android/server/pm/ShortcutService;->fixUpShortcutResourceNamesAndValues(Landroid/content/pm/ShortcutInfo;)V
-PLcom/android/server/pm/ShortcutService;->forUpdatedPackages(IJZLjava/util/function/Consumer;)V
+PLcom/android/server/pm/ShortcutService;->enforceCallingOrSelfPermission(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/pm/ShortcutService;->enforceMaxActivityShortcuts(I)V
+PLcom/android/server/pm/ShortcutService;->enforceResetThrottlingPermission()V
+PLcom/android/server/pm/ShortcutService;->enforceSystem()V
+HPLcom/android/server/pm/ShortcutService;->fillInDefaultActivity(Ljava/util/List;)V
+PLcom/android/server/pm/ShortcutService;->fixUpIncomingShortcutInfo(Landroid/content/pm/ShortcutInfo;Z)V
+HPLcom/android/server/pm/ShortcutService;->fixUpIncomingShortcutInfo(Landroid/content/pm/ShortcutInfo;ZZ)V
+HPLcom/android/server/pm/ShortcutService;->fixUpShortcutResourceNamesAndValues(Landroid/content/pm/ShortcutInfo;)V
+HPLcom/android/server/pm/ShortcutService;->forEachLoadedUserLocked(Ljava/util/function/Consumer;)V
+HPLcom/android/server/pm/ShortcutService;->forUpdatedPackages(IJZLjava/util/function/Consumer;)V
+PLcom/android/server/pm/ShortcutService;->formatTime(J)Ljava/lang/String;
 PLcom/android/server/pm/ShortcutService;->getActivityInfoWithMetadata(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
-PLcom/android/server/pm/ShortcutService;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
+HPLcom/android/server/pm/ShortcutService;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
 PLcom/android/server/pm/ShortcutService;->getBackupPayload(I)[B
 HSPLcom/android/server/pm/ShortcutService;->getBaseStateFile()Landroid/util/AtomicFile;
-PLcom/android/server/pm/ShortcutService;->getDefaultLauncher(I)Landroid/content/ComponentName;
+HPLcom/android/server/pm/ShortcutService;->getDefaultLauncher(I)Landroid/content/ComponentName;
 PLcom/android/server/pm/ShortcutService;->getDumpPath()Ljava/io/File;
-PLcom/android/server/pm/ShortcutService;->getDynamicShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/ShortcutService;->getDynamicShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/pm/ShortcutService;->getIconMaxDimensions(Ljava/lang/String;I)I
 PLcom/android/server/pm/ShortcutService;->getInstalledPackages(I)Ljava/util/List;
 HSPLcom/android/server/pm/ShortcutService;->getLastResetTimeLocked()J
-PLcom/android/server/pm/ShortcutService;->getLauncherShortcutsLocked(Ljava/lang/String;II)Lcom/android/server/pm/ShortcutLauncher;
-PLcom/android/server/pm/ShortcutService;->getMainActivityIntent()Landroid/content/Intent;
-PLcom/android/server/pm/ShortcutService;->getManifestShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/ShortcutService;->getLauncherShortcutsLocked(Ljava/lang/String;II)Lcom/android/server/pm/ShortcutLauncher;
+HPLcom/android/server/pm/ShortcutService;->getMainActivityIntent()Landroid/content/Intent;
+HPLcom/android/server/pm/ShortcutService;->getManifestShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/pm/ShortcutService;->getMaxActivityShortcuts()I
-PLcom/android/server/pm/ShortcutService;->getMaxShortcutCountPerActivity(Ljava/lang/String;I)I
-PLcom/android/server/pm/ShortcutService;->getNonPersistentUserLocked(I)Lcom/android/server/pm/ShortcutNonPersistentUser;
+HPLcom/android/server/pm/ShortcutService;->getMaxShortcutCountPerActivity(Ljava/lang/String;I)I
+PLcom/android/server/pm/ShortcutService;->getNextResetTimeLocked()J
+HPLcom/android/server/pm/ShortcutService;->getNonPersistentUserLocked(I)Lcom/android/server/pm/ShortcutNonPersistentUser;
 PLcom/android/server/pm/ShortcutService;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
-PLcom/android/server/pm/ShortcutService;->getPackageInfo(Ljava/lang/String;IZ)Landroid/content/pm/PackageInfo;
-PLcom/android/server/pm/ShortcutService;->getPackageShortcutsForPublisherLocked(Ljava/lang/String;I)Lcom/android/server/pm/ShortcutPackage;
-PLcom/android/server/pm/ShortcutService;->getPinnedShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/ShortcutService;->getPackageInfo(Ljava/lang/String;IZ)Landroid/content/pm/PackageInfo;
+PLcom/android/server/pm/ShortcutService;->getPackageInfoWithSignatures(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
+HPLcom/android/server/pm/ShortcutService;->getPackageShortcutsForPublisherLocked(Ljava/lang/String;I)Lcom/android/server/pm/ShortcutPackage;
+PLcom/android/server/pm/ShortcutService;->getPackageShortcutsLocked(Ljava/lang/String;I)Lcom/android/server/pm/ShortcutPackage;
+PLcom/android/server/pm/ShortcutService;->getParentOrSelfUserId(I)I
+HPLcom/android/server/pm/ShortcutService;->getPinnedShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/ShortcutService;->getRemainingCallCount(Ljava/lang/String;I)I
 PLcom/android/server/pm/ShortcutService;->getShareTargets(Ljava/lang/String;Landroid/content/IntentFilter;I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/ShortcutService;->getShortcuts(Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
 HPLcom/android/server/pm/ShortcutService;->getShortcutsWithQueryLocked(Ljava/lang/String;IILjava/util/function/Predicate;)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/pm/ShortcutService;->getStatStartTime()J
-PLcom/android/server/pm/ShortcutService;->getUserBitmapFilePath(I)Ljava/io/File;
-PLcom/android/server/pm/ShortcutService;->getUserFile(I)Ljava/io/File;
+HPLcom/android/server/pm/ShortcutService;->getStatStartTime()J
+PLcom/android/server/pm/ShortcutService;->getUidLastForegroundElapsedTimeLocked(I)J
+HPLcom/android/server/pm/ShortcutService;->getUserBitmapFilePath(I)Ljava/io/File;
+HPLcom/android/server/pm/ShortcutService;->getUserFile(I)Ljava/io/File;
 HPLcom/android/server/pm/ShortcutService;->getUserShortcutsLocked(I)Lcom/android/server/pm/ShortcutUser;
+PLcom/android/server/pm/ShortcutService;->handleLocaleChanged()V
 HSPLcom/android/server/pm/ShortcutService;->handleOnUidStateChanged(II)V
 PLcom/android/server/pm/ShortcutService;->handlePackageAdded(Ljava/lang/String;I)V
-PLcom/android/server/pm/ShortcutService;->handlePackageChanged(Ljava/lang/String;I)V
+HPLcom/android/server/pm/ShortcutService;->handlePackageChanged(Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;->handlePackageDataCleared(Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;->handlePackageRemoved(Ljava/lang/String;I)V
 PLcom/android/server/pm/ShortcutService;->handlePackageUpdateFinished(Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;->handleStopUser(I)V
 PLcom/android/server/pm/ShortcutService;->handleUnlockUser(I)V
+HPLcom/android/server/pm/ShortcutService;->hasShareTargets(Ljava/lang/String;Ljava/lang/String;I)Z
 HPLcom/android/server/pm/ShortcutService;->hasShortcutHostPermission(Ljava/lang/String;III)Z
-PLcom/android/server/pm/ShortcutService;->hasShortcutHostPermissionInner(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/ShortcutService;->hasShortcutHostPermissionInner(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/ShortcutService;->initialize()V
-PLcom/android/server/pm/ShortcutService;->injectApplicationInfoWithUninstalled(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
-PLcom/android/server/pm/ShortcutService;->injectBinderCallingUid()I
+HPLcom/android/server/pm/ShortcutService;->injectApplicationInfoWithUninstalled(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
+HPLcom/android/server/pm/ShortcutService;->injectBinderCallingPid()I
+HPLcom/android/server/pm/ShortcutService;->injectBinderCallingUid()I
 PLcom/android/server/pm/ShortcutService;->injectBuildFingerprint()Ljava/lang/String;
-PLcom/android/server/pm/ShortcutService;->injectClearCallingIdentity()J
+HPLcom/android/server/pm/ShortcutService;->injectClearCallingIdentity()J
 HSPLcom/android/server/pm/ShortcutService;->injectCurrentTimeMillis()J
 HSPLcom/android/server/pm/ShortcutService;->injectDipToPixel(I)I
 HSPLcom/android/server/pm/ShortcutService;->injectElapsedRealtime()J
-PLcom/android/server/pm/ShortcutService;->injectGetActivityInfoWithMetadataWithUninstalled(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
-PLcom/android/server/pm/ShortcutService;->injectGetDefaultMainActivity(Ljava/lang/String;I)Landroid/content/ComponentName;
-PLcom/android/server/pm/ShortcutService;->injectGetLocaleTagsForUser(I)Ljava/lang/String;
-PLcom/android/server/pm/ShortcutService;->injectGetMainActivities(Ljava/lang/String;I)Ljava/util/List;
-PLcom/android/server/pm/ShortcutService;->injectGetPackageUid(Ljava/lang/String;I)I
+PLcom/android/server/pm/ShortcutService;->injectEnforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/pm/ShortcutService;->injectGetActivityInfoWithMetadataWithUninstalled(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/pm/ShortcutService;->injectGetDefaultMainActivity(Ljava/lang/String;I)Landroid/content/ComponentName;
+HPLcom/android/server/pm/ShortcutService;->injectGetLocaleTagsForUser(I)Ljava/lang/String;
+HPLcom/android/server/pm/ShortcutService;->injectGetMainActivities(Ljava/lang/String;I)Ljava/util/List;
+HPLcom/android/server/pm/ShortcutService;->injectGetPackageUid(Ljava/lang/String;I)I
 PLcom/android/server/pm/ShortcutService;->injectGetPackagesWithUninstalled(I)Ljava/util/List;
-PLcom/android/server/pm/ShortcutService;->injectGetPinConfirmationActivity(Ljava/lang/String;II)Landroid/content/ComponentName;
-PLcom/android/server/pm/ShortcutService;->injectGetResourcesForApplicationAsUser(Ljava/lang/String;I)Landroid/content/res/Resources;
-PLcom/android/server/pm/ShortcutService;->injectHasAccessShortcutsPermission(II)Z
-PLcom/android/server/pm/ShortcutService;->injectIsActivityEnabledAndExported(Landroid/content/ComponentName;I)Z
+HPLcom/android/server/pm/ShortcutService;->injectGetPinConfirmationActivity(Ljava/lang/String;II)Landroid/content/ComponentName;
+HPLcom/android/server/pm/ShortcutService;->injectGetResourcesForApplicationAsUser(Ljava/lang/String;I)Landroid/content/res/Resources;
+HPLcom/android/server/pm/ShortcutService;->injectHasAccessShortcutsPermission(II)Z
+HPLcom/android/server/pm/ShortcutService;->injectHasUnlimitedShortcutsApiCallsPermission(II)Z
+HPLcom/android/server/pm/ShortcutService;->injectIsActivityEnabledAndExported(Landroid/content/ComponentName;I)Z
 HSPLcom/android/server/pm/ShortcutService;->injectIsLowRamDevice()Z
-PLcom/android/server/pm/ShortcutService;->injectIsMainActivity(Landroid/content/ComponentName;I)Z
+HPLcom/android/server/pm/ShortcutService;->injectIsMainActivity(Landroid/content/ComponentName;I)Z
 PLcom/android/server/pm/ShortcutService;->injectIsSafeModeEnabled()Z
-PLcom/android/server/pm/ShortcutService;->injectPackageInfoWithUninstalled(Ljava/lang/String;IZ)Landroid/content/pm/PackageInfo;
+HPLcom/android/server/pm/ShortcutService;->injectPackageInfoWithUninstalled(Ljava/lang/String;IZ)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/pm/ShortcutService;->injectPostToHandler(Ljava/lang/Runnable;)V
 HSPLcom/android/server/pm/ShortcutService;->injectRegisterUidObserver(Landroid/app/IUidObserver;I)V
-PLcom/android/server/pm/ShortcutService;->injectRestoreCallingIdentity(J)V
+HPLcom/android/server/pm/ShortcutService;->injectRestoreCallingIdentity(J)V
 PLcom/android/server/pm/ShortcutService;->injectRunOnNewThread(Ljava/lang/Runnable;)V
+PLcom/android/server/pm/ShortcutService;->injectSendIntentSender(Landroid/content/IntentSender;Landroid/content/Intent;)V
 HSPLcom/android/server/pm/ShortcutService;->injectShortcutManagerConstants()Ljava/lang/String;
 PLcom/android/server/pm/ShortcutService;->injectShouldPerformVerification()Z
 HSPLcom/android/server/pm/ShortcutService;->injectSystemDataPath()Ljava/io/File;
-PLcom/android/server/pm/ShortcutService;->injectUserDataPath(I)Ljava/io/File;
-PLcom/android/server/pm/ShortcutService;->injectValidateIconResPackage(Landroid/content/pm/ShortcutInfo;Landroid/graphics/drawable/Icon;)V
+HPLcom/android/server/pm/ShortcutService;->injectUserDataPath(I)Ljava/io/File;
+HPLcom/android/server/pm/ShortcutService;->injectValidateIconResPackage(Landroid/content/pm/ShortcutInfo;Landroid/graphics/drawable/Icon;)V
 PLcom/android/server/pm/ShortcutService;->injectXmlMetaData(Landroid/content/pm/ActivityInfo;Ljava/lang/String;)Landroid/content/res/XmlResourceParser;
-PLcom/android/server/pm/ShortcutService;->isCallerSystem()Z
-PLcom/android/server/pm/ShortcutService;->isEphemeralApp(Landroid/content/pm/ApplicationInfo;)Z
+HPLcom/android/server/pm/ShortcutService;->isCallerSystem()Z
+HSPLcom/android/server/pm/ShortcutService;->isClockValid(J)Z
+PLcom/android/server/pm/ShortcutService;->isDummyMainActivity(Landroid/content/ComponentName;)Z
+HPLcom/android/server/pm/ShortcutService;->isEphemeralApp(Landroid/content/pm/ApplicationInfo;)Z
 PLcom/android/server/pm/ShortcutService;->isEphemeralApp(Ljava/lang/String;I)Z
 PLcom/android/server/pm/ShortcutService;->isInstalled(Landroid/content/pm/ActivityInfo;)Z
-PLcom/android/server/pm/ShortcutService;->isInstalled(Landroid/content/pm/ApplicationInfo;)Z
-PLcom/android/server/pm/ShortcutService;->isInstalled(Landroid/content/pm/PackageInfo;)Z
+HPLcom/android/server/pm/ShortcutService;->isInstalled(Landroid/content/pm/ApplicationInfo;)Z
+HPLcom/android/server/pm/ShortcutService;->isInstalled(Landroid/content/pm/PackageInfo;)Z
 PLcom/android/server/pm/ShortcutService;->isInstalledOrNull(Landroid/content/pm/ActivityInfo;)Landroid/content/pm/ActivityInfo;
 PLcom/android/server/pm/ShortcutService;->isInstalledOrNull(Landroid/content/pm/ApplicationInfo;)Landroid/content/pm/ApplicationInfo;
 PLcom/android/server/pm/ShortcutService;->isInstalledOrNull(Landroid/content/pm/PackageInfo;)Landroid/content/pm/PackageInfo;
 PLcom/android/server/pm/ShortcutService;->isPackageInstalled(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/ShortcutService;->isProcessStateForeground(I)Z
-PLcom/android/server/pm/ShortcutService;->isRequestPinItemSupported(II)Z
+HPLcom/android/server/pm/ShortcutService;->isRequestPinItemSupported(II)Z
+HPLcom/android/server/pm/ShortcutService;->isUidForegroundLocked(I)Z
+HPLcom/android/server/pm/ShortcutService;->isUserLoadedLocked(I)Z
 HPLcom/android/server/pm/ShortcutService;->isUserUnlockedL(I)Z
 PLcom/android/server/pm/ShortcutService;->lambda$checkPackageChanges$7$ShortcutService(Ljava/util/ArrayList;Lcom/android/server/pm/ShortcutPackageItem;)V
+PLcom/android/server/pm/ShortcutService;->lambda$checkPackageChanges$8$ShortcutService(Ljava/util/ArrayList;Lcom/android/server/pm/ShortcutPackageItem;)V
+PLcom/android/server/pm/ShortcutService;->lambda$cleanUpPackageForAllLoadedUsers$3$ShortcutService(Ljava/lang/String;IZLcom/android/server/pm/ShortcutUser;)V
+PLcom/android/server/pm/ShortcutService;->lambda$cleanUpPackageForAllLoadedUsers$4$ShortcutService(Ljava/lang/String;IZLcom/android/server/pm/ShortcutUser;)V
+PLcom/android/server/pm/ShortcutService;->lambda$cleanUpPackageLocked$4(Ljava/lang/String;ILcom/android/server/pm/ShortcutLauncher;)V
+HPLcom/android/server/pm/ShortcutService;->lambda$cleanUpPackageLocked$5(Lcom/android/server/pm/ShortcutPackage;)V
+PLcom/android/server/pm/ShortcutService;->lambda$cleanUpPackageLocked$5(Ljava/lang/String;ILcom/android/server/pm/ShortcutLauncher;)V
+HPLcom/android/server/pm/ShortcutService;->lambda$cleanUpPackageLocked$6(Lcom/android/server/pm/ShortcutPackage;)V
+HPLcom/android/server/pm/ShortcutService;->lambda$getBackupPayload$10(Lcom/android/server/pm/ShortcutPackage;)V
+PLcom/android/server/pm/ShortcutService;->lambda$getBackupPayload$10(Lcom/android/server/pm/ShortcutPackageItem;)V
+PLcom/android/server/pm/ShortcutService;->lambda$getBackupPayload$11(Lcom/android/server/pm/ShortcutLauncher;)V
+HPLcom/android/server/pm/ShortcutService;->lambda$getBackupPayload$11(Lcom/android/server/pm/ShortcutPackage;)V
+PLcom/android/server/pm/ShortcutService;->lambda$getBackupPayload$12(Lcom/android/server/pm/ShortcutLauncher;)V
+PLcom/android/server/pm/ShortcutService;->lambda$getBackupPayload$9(Lcom/android/server/pm/ShortcutPackageItem;)V
+HPLcom/android/server/pm/ShortcutService;->lambda$getShareTargets$2(Ljava/util/List;Landroid/content/IntentFilter;Lcom/android/server/pm/ShortcutPackage;)V
+HPLcom/android/server/pm/ShortcutService;->lambda$getShareTargets$3(Ljava/util/List;Landroid/content/IntentFilter;Lcom/android/server/pm/ShortcutPackage;)V
+PLcom/android/server/pm/ShortcutService;->lambda$getShortcuts$2(ILandroid/content/pm/ShortcutInfo;)Z
+PLcom/android/server/pm/ShortcutService;->lambda$handleLocaleChanged$6(Lcom/android/server/pm/ShortcutUser;)V
 PLcom/android/server/pm/ShortcutService;->lambda$handleUnlockUser$0$ShortcutService(JI)V
-PLcom/android/server/pm/ShortcutService;->lambda$notifyListeners$1$ShortcutService(ILjava/lang/String;)V
+HPLcom/android/server/pm/ShortcutService;->lambda$notifyListeners$1$ShortcutService(ILjava/lang/String;)V
 PLcom/android/server/pm/ShortcutService;->lambda$rescanUpdatedPackagesLocked$8$ShortcutService(Lcom/android/server/pm/ShortcutUser;ILandroid/content/pm/ApplicationInfo;)V
+PLcom/android/server/pm/ShortcutService;->lambda$rescanUpdatedPackagesLocked$9$ShortcutService(Lcom/android/server/pm/ShortcutUser;ILandroid/content/pm/ApplicationInfo;)V
 HSPLcom/android/server/pm/ShortcutService;->loadBaseStateLocked()V
 HSPLcom/android/server/pm/ShortcutService;->loadConfigurationLocked()V
 PLcom/android/server/pm/ShortcutService;->loadUserInternal(ILjava/io/InputStream;Z)Lcom/android/server/pm/ShortcutUser;
 PLcom/android/server/pm/ShortcutService;->loadUserLocked(I)Lcom/android/server/pm/ShortcutUser;
-PLcom/android/server/pm/ShortcutService;->logDurationStat(IJ)V
-PLcom/android/server/pm/ShortcutService;->notifyListeners(Ljava/lang/String;I)V
+HPLcom/android/server/pm/ShortcutService;->logDurationStat(IJ)V
+HPLcom/android/server/pm/ShortcutService;->notifyListeners(Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;->onApplicationActive(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/ShortcutService;->onBootPhase(I)V
-PLcom/android/server/pm/ShortcutService;->openIconFileForWrite(ILandroid/content/pm/ShortcutInfo;)Lcom/android/server/pm/ShortcutService$FileOutputStreamWithPath;
+HPLcom/android/server/pm/ShortcutService;->openIconFileForWrite(ILandroid/content/pm/ShortcutInfo;)Lcom/android/server/pm/ShortcutService$FileOutputStreamWithPath;
 PLcom/android/server/pm/ShortcutService;->packageShortcutsChanged(Ljava/lang/String;I)V
 PLcom/android/server/pm/ShortcutService;->parseBooleanAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Z
 PLcom/android/server/pm/ShortcutService;->parseBooleanAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Z)Z
-PLcom/android/server/pm/ShortcutService;->parseComponentNameAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/content/ComponentName;
+HPLcom/android/server/pm/ShortcutService;->parseComponentNameAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/content/ComponentName;
 PLcom/android/server/pm/ShortcutService;->parseDumpArgs([Ljava/lang/String;)Lcom/android/server/pm/ShortcutService$DumpFilter;
-PLcom/android/server/pm/ShortcutService;->parseIntAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)I
+HPLcom/android/server/pm/ShortcutService;->parseIntAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)I
 PLcom/android/server/pm/ShortcutService;->parseIntAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
 PLcom/android/server/pm/ShortcutService;->parseIntentAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/content/Intent;
-PLcom/android/server/pm/ShortcutService;->parseIntentAttributeNoDefault(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/content/Intent;
+HPLcom/android/server/pm/ShortcutService;->parseIntentAttributeNoDefault(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/content/Intent;
 HSPLcom/android/server/pm/ShortcutService;->parseLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)J
 HSPLcom/android/server/pm/ShortcutService;->parseLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;J)J
 HSPLcom/android/server/pm/ShortcutService;->parseStringAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/pm/ShortcutService;->queryActivities(Landroid/content/Intent;IZ)Ljava/util/List;
-PLcom/android/server/pm/ShortcutService;->queryActivities(Landroid/content/Intent;Ljava/lang/String;Landroid/content/ComponentName;I)Ljava/util/List;
+HPLcom/android/server/pm/ShortcutService;->queryActivities(Landroid/content/Intent;IZ)Ljava/util/List;
+HPLcom/android/server/pm/ShortcutService;->queryActivities(Landroid/content/Intent;Ljava/lang/String;Landroid/content/ComponentName;I)Ljava/util/List;
 PLcom/android/server/pm/ShortcutService;->removeAllDynamicShortcuts(Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;->removeDynamicShortcuts(Ljava/lang/String;Ljava/util/List;I)V
 PLcom/android/server/pm/ShortcutService;->removeIconLocked(Landroid/content/pm/ShortcutInfo;)V
 PLcom/android/server/pm/ShortcutService;->reportShortcutUsed(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/pm/ShortcutService;->rescanUpdatedPackagesLocked(IJ)V
 PLcom/android/server/pm/ShortcutService;->saveBaseStateLocked()V
-PLcom/android/server/pm/ShortcutService;->saveDirtyInfo()V
-PLcom/android/server/pm/ShortcutService;->saveIconAndFixUpShortcutLocked(Landroid/content/pm/ShortcutInfo;)V
-PLcom/android/server/pm/ShortcutService;->saveUserInternalLocked(ILjava/io/OutputStream;Z)V
-PLcom/android/server/pm/ShortcutService;->saveUserLocked(I)V
+HPLcom/android/server/pm/ShortcutService;->saveDirtyInfo()V
+HPLcom/android/server/pm/ShortcutService;->saveIconAndFixUpShortcutLocked(Landroid/content/pm/ShortcutInfo;)V
+HPLcom/android/server/pm/ShortcutService;->saveUserInternalLocked(ILjava/io/OutputStream;Z)V
+HPLcom/android/server/pm/ShortcutService;->saveUserLocked(I)V
 HSPLcom/android/server/pm/ShortcutService;->scheduleSaveBaseState()V
 HSPLcom/android/server/pm/ShortcutService;->scheduleSaveInner(I)V
-PLcom/android/server/pm/ShortcutService;->scheduleSaveUser(I)V
+HPLcom/android/server/pm/ShortcutService;->scheduleSaveUser(I)V
 HPLcom/android/server/pm/ShortcutService;->setDynamicShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
 HPLcom/android/server/pm/ShortcutService;->setReturnedByServer(Ljava/util/List;)Ljava/util/List;
 PLcom/android/server/pm/ShortcutService;->setShortcutHostPackage(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/pm/ShortcutService;->shouldBackupApp(Landroid/content/pm/PackageInfo;)Z
-PLcom/android/server/pm/ShortcutService;->shrinkBitmap(Landroid/graphics/Bitmap;I)Landroid/graphics/Bitmap;
+HPLcom/android/server/pm/ShortcutService;->shrinkBitmap(Landroid/graphics/Bitmap;I)Landroid/graphics/Bitmap;
 HPLcom/android/server/pm/ShortcutService;->throwIfUserLockedL(I)V
+PLcom/android/server/pm/ShortcutService;->unloadUserLocked(I)V
 HSPLcom/android/server/pm/ShortcutService;->updateConfigurationLocked(Ljava/lang/String;)Z
-PLcom/android/server/pm/ShortcutService;->updateShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
+HPLcom/android/server/pm/ShortcutService;->updateShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
 HSPLcom/android/server/pm/ShortcutService;->updateTimesLocked()V
-PLcom/android/server/pm/ShortcutService;->verifyCaller(Ljava/lang/String;I)V
-PLcom/android/server/pm/ShortcutService;->verifyShortcutInfoPackage(Ljava/lang/String;Landroid/content/pm/ShortcutInfo;)V
+PLcom/android/server/pm/ShortcutService;->validateShortcutForPinRequest(Landroid/content/pm/ShortcutInfo;)V
+HPLcom/android/server/pm/ShortcutService;->verifyCaller(Ljava/lang/String;I)V
+HPLcom/android/server/pm/ShortcutService;->verifyShortcutInfoPackage(Ljava/lang/String;Landroid/content/pm/ShortcutInfo;)V
+HPLcom/android/server/pm/ShortcutService;->verifyShortcutInfoPackages(Ljava/lang/String;Ljava/util/List;)V
 PLcom/android/server/pm/ShortcutService;->verifyStates()V
-PLcom/android/server/pm/ShortcutService;->writeAttr(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;J)V
-PLcom/android/server/pm/ShortcutService;->writeAttr(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Landroid/content/ComponentName;)V
-PLcom/android/server/pm/ShortcutService;->writeAttr(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Landroid/content/Intent;)V
+HPLcom/android/server/pm/ShortcutService;->writeAttr(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;J)V
+HPLcom/android/server/pm/ShortcutService;->writeAttr(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Landroid/content/ComponentName;)V
+HPLcom/android/server/pm/ShortcutService;->writeAttr(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Landroid/content/Intent;)V
 HPLcom/android/server/pm/ShortcutService;->writeAttr(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/lang/CharSequence;)V
-PLcom/android/server/pm/ShortcutService;->writeAttr(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Z)V
-PLcom/android/server/pm/ShortcutService;->writeTagExtra(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Landroid/os/PersistableBundle;)V
+HPLcom/android/server/pm/ShortcutService;->writeAttr(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Z)V
+HPLcom/android/server/pm/ShortcutService;->writeTagExtra(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Landroid/os/PersistableBundle;)V
 PLcom/android/server/pm/ShortcutService;->writeTagValue(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;J)V
 PLcom/android/server/pm/ShortcutService;->writeTagValue(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Landroid/content/ComponentName;)V
-PLcom/android/server/pm/ShortcutService;->writeTagValue(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/pm/ShortcutService;->writeTagValue(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/pm/ShortcutService;->wtf(Ljava/lang/String;)V
+PLcom/android/server/pm/ShortcutService;->wtf(Ljava/lang/String;Ljava/lang/Throwable;)V
 HPLcom/android/server/pm/ShortcutUser$PackageWithUser;-><init>(ILjava/lang/String;)V
 HPLcom/android/server/pm/ShortcutUser$PackageWithUser;->equals(Ljava/lang/Object;)Z
 HPLcom/android/server/pm/ShortcutUser$PackageWithUser;->hashCode()I
@@ -15630,63 +25658,161 @@
 PLcom/android/server/pm/ShortcutUser;->addLauncher(Lcom/android/server/pm/ShortcutLauncher;)V
 PLcom/android/server/pm/ShortcutUser;->attemptToRestoreIfNeededAndSave(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;I)V
 PLcom/android/server/pm/ShortcutUser;->clearLauncher()V
-PLcom/android/server/pm/ShortcutUser;->detectLocaleChange()V
-PLcom/android/server/pm/ShortcutUser;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/ShortcutService$DumpFilter;)V
-PLcom/android/server/pm/ShortcutUser;->dumpDirectorySize(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/io/File;)V
-PLcom/android/server/pm/ShortcutUser;->forAllLaunchers(Ljava/util/function/Consumer;)V
-PLcom/android/server/pm/ShortcutUser;->forAllPackageItems(Ljava/util/function/Consumer;)V
+HPLcom/android/server/pm/ShortcutUser;->detectLocaleChange()V
+HPLcom/android/server/pm/ShortcutUser;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/ShortcutService$DumpFilter;)V
+HPLcom/android/server/pm/ShortcutUser;->dumpDirectorySize(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/io/File;)V
+HPLcom/android/server/pm/ShortcutUser;->forAllLaunchers(Ljava/util/function/Consumer;)V
+HPLcom/android/server/pm/ShortcutUser;->forAllPackageItems(Ljava/util/function/Consumer;)V
 HPLcom/android/server/pm/ShortcutUser;->forAllPackages(Ljava/util/function/Consumer;)V
 PLcom/android/server/pm/ShortcutUser;->forPackageItem(Ljava/lang/String;ILjava/util/function/Consumer;)V
 PLcom/android/server/pm/ShortcutUser;->getCachedLauncher()Landroid/content/ComponentName;
 PLcom/android/server/pm/ShortcutUser;->getLastAppScanOsFingerprint()Ljava/lang/String;
 PLcom/android/server/pm/ShortcutUser;->getLastAppScanTime()J
+PLcom/android/server/pm/ShortcutUser;->getLastKnownLauncher()Landroid/content/ComponentName;
 HPLcom/android/server/pm/ShortcutUser;->getLauncherShortcuts(Ljava/lang/String;I)Lcom/android/server/pm/ShortcutLauncher;
-PLcom/android/server/pm/ShortcutUser;->getPackageShortcuts(Ljava/lang/String;)Lcom/android/server/pm/ShortcutPackage;
+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;
 PLcom/android/server/pm/ShortcutUser;->getUserId()I
 HPLcom/android/server/pm/ShortcutUser;->hasPackage(Ljava/lang/String;)Z
 PLcom/android/server/pm/ShortcutUser;->lambda$attemptToRestoreIfNeededAndSave$2(Lcom/android/server/pm/ShortcutPackageItem;)V
+PLcom/android/server/pm/ShortcutUser;->lambda$detectLocaleChange$1(Lcom/android/server/pm/ShortcutPackage;)V
 HPLcom/android/server/pm/ShortcutUser;->lambda$forPackageItem$0(ILjava/lang/String;Ljava/util/function/Consumer;Lcom/android/server/pm/ShortcutPackageItem;)V
-PLcom/android/server/pm/ShortcutUser;->loadFromXml(Lcom/android/server/pm/ShortcutService;Lorg/xmlpull/v1/XmlPullParser;IZ)Lcom/android/server/pm/ShortcutUser;
+HPLcom/android/server/pm/ShortcutUser;->loadFromXml(Lcom/android/server/pm/ShortcutService;Lorg/xmlpull/v1/XmlPullParser;IZ)Lcom/android/server/pm/ShortcutUser;
 HPLcom/android/server/pm/ShortcutUser;->logSharingShortcutStats(Lcom/android/internal/logging/MetricsLogger;)V
-PLcom/android/server/pm/ShortcutUser;->onCalledByPublisher(Ljava/lang/String;)V
-PLcom/android/server/pm/ShortcutUser;->rescanPackageIfNeeded(Ljava/lang/String;Z)V
+HPLcom/android/server/pm/ShortcutUser;->onCalledByPublisher(Ljava/lang/String;)V
+HPLcom/android/server/pm/ShortcutUser;->removeLauncher(ILjava/lang/String;)Lcom/android/server/pm/ShortcutLauncher;
+PLcom/android/server/pm/ShortcutUser;->removePackage(Ljava/lang/String;)Lcom/android/server/pm/ShortcutPackage;
+HPLcom/android/server/pm/ShortcutUser;->rescanPackageIfNeeded(Ljava/lang/String;Z)V
 HPLcom/android/server/pm/ShortcutUser;->saveShortcutPackageItem(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/pm/ShortcutPackageItem;Z)V
 HPLcom/android/server/pm/ShortcutUser;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
 PLcom/android/server/pm/ShortcutUser;->setLastAppScanOsFingerprint(Ljava/lang/String;)V
 PLcom/android/server/pm/ShortcutUser;->setLastAppScanTime(J)V
 PLcom/android/server/pm/ShortcutUser;->setLauncher(Landroid/content/ComponentName;)V
 HPLcom/android/server/pm/ShortcutUser;->setLauncher(Landroid/content/ComponentName;Z)V
+HSPLcom/android/server/pm/StagingManager$1;-><init>(Lcom/android/server/pm/StagingManager;)V
+PLcom/android/server/pm/StagingManager$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/pm/StagingManager$LocalIntentReceiverAsync$1;-><init>(Lcom/android/server/pm/StagingManager$LocalIntentReceiverAsync;)V
+PLcom/android/server/pm/StagingManager$LocalIntentReceiverAsync$1;->send(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/StagingManager$LocalIntentReceiverAsync;-><init>(Ljava/util/function/Consumer;)V
+PLcom/android/server/pm/StagingManager$LocalIntentReceiverAsync;->getIntentSender()Landroid/content/IntentSender;
+PLcom/android/server/pm/StagingManager$LocalIntentReceiverSync$1;-><init>(Lcom/android/server/pm/StagingManager$LocalIntentReceiverSync;)V
+PLcom/android/server/pm/StagingManager$LocalIntentReceiverSync$1;->send(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/StagingManager$LocalIntentReceiverSync;-><init>()V
+PLcom/android/server/pm/StagingManager$LocalIntentReceiverSync;-><init>(Lcom/android/server/pm/StagingManager$1;)V
+PLcom/android/server/pm/StagingManager$LocalIntentReceiverSync;->access$400(Lcom/android/server/pm/StagingManager$LocalIntentReceiverSync;)Ljava/util/concurrent/LinkedBlockingQueue;
+PLcom/android/server/pm/StagingManager$LocalIntentReceiverSync;->getIntentSender()Landroid/content/IntentSender;
+PLcom/android/server/pm/StagingManager$LocalIntentReceiverSync;->getResult()Landroid/content/Intent;
 HSPLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;-><init>(Lcom/android/server/pm/StagingManager;Landroid/os/Looper;)V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->access$000(Lcom/android/server/pm/StagingManager$PreRebootVerificationHandler;I)V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->access$1300(Lcom/android/server/pm/StagingManager$PreRebootVerificationHandler;I)V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->access$300(Lcom/android/server/pm/StagingManager$PreRebootVerificationHandler;)V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->handlePreRebootVerification_Apex(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->handlePreRebootVerification_Apk(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->handlePreRebootVerification_End(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->handlePreRebootVerification_Start(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->notifyPreRebootVerification_Apex_Complete(I)V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->notifyPreRebootVerification_Apk_Complete(I)V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->notifyPreRebootVerification_Start_Complete(I)V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->readyToStart()V
+PLcom/android/server/pm/StagingManager$PreRebootVerificationHandler;->startPreRebootVerification(I)V
+HSPLcom/android/server/pm/StagingManager;-><init>(Lcom/android/server/pm/PackageInstallerService;Landroid/content/Context;)V
 HSPLcom/android/server/pm/StagingManager;-><init>(Lcom/android/server/pm/PackageInstallerService;Lcom/android/server/pm/ApexManager;Landroid/content/Context;)V
-PLcom/android/server/pm/StagingManager;->getSessions()Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/pm/StagingManager;->abortCommittedSession(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager;->abortSession(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager;->access$1000(Lcom/android/server/pm/StagingManager;Lcom/android/server/pm/PackageInstallerSession;)Z
+PLcom/android/server/pm/StagingManager;->access$1100(Lcom/android/server/pm/StagingManager;Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager;->access$1200(Lcom/android/server/pm/StagingManager;)Lcom/android/server/pm/ApexManager;
+PLcom/android/server/pm/StagingManager;->access$200(Lcom/android/server/pm/StagingManager;)Lcom/android/server/pm/StagingManager$PreRebootVerificationHandler;
+PLcom/android/server/pm/StagingManager;->access$500(Lcom/android/server/pm/StagingManager;)Landroid/util/SparseArray;
+PLcom/android/server/pm/StagingManager;->access$600(Lcom/android/server/pm/StagingManager;)Landroid/util/SparseIntArray;
+PLcom/android/server/pm/StagingManager;->access$700(Lcom/android/server/pm/StagingManager;Lcom/android/server/pm/PackageInstallerSession;)Z
+PLcom/android/server/pm/StagingManager;->access$800(Lcom/android/server/pm/StagingManager;Lcom/android/server/pm/PackageInstallerSession;)Ljava/util/List;
+PLcom/android/server/pm/StagingManager;->access$900(Lcom/android/server/pm/StagingManager;Landroid/content/pm/PackageInfo;)V
+PLcom/android/server/pm/StagingManager;->checkDowngrade(Lcom/android/server/pm/PackageInstallerSession;Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageInfo;)V
+HPLcom/android/server/pm/StagingManager;->checkNonOverlappingWithStagedSessions(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager;->checkRequiredVersionCode(Lcom/android/server/pm/PackageInstallerSession;Landroid/content/pm/PackageInfo;)V
+HSPLcom/android/server/pm/StagingManager;->checkStateAndResume(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager;->commitSession(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager;->createAndWriteApkSession(Lcom/android/server/pm/PackageInstallerSession;Z)Lcom/android/server/pm/PackageInstallerSession;
+PLcom/android/server/pm/StagingManager;->createSession(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager;->extractApksInSession(Lcom/android/server/pm/PackageInstallerSession;Z)Lcom/android/server/pm/PackageInstallerSession;
+PLcom/android/server/pm/StagingManager;->findAPKsInDir(Ljava/io/File;)Ljava/util/List;
+HPLcom/android/server/pm/StagingManager;->getSessions()Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/pm/StagingManager;->installApksInSession(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager;->isApexSession(Lcom/android/server/pm/PackageInstallerSession;)Z
+PLcom/android/server/pm/StagingManager;->isApexSessionFailed(Landroid/apex/ApexSessionInfo;)Z
+PLcom/android/server/pm/StagingManager;->isApexSessionFinalized(Landroid/apex/ApexSessionInfo;)Z
+HSPLcom/android/server/pm/StagingManager;->isMultiPackageSessionComplete(Lcom/android/server/pm/PackageInstallerSession;)Z
+PLcom/android/server/pm/StagingManager;->lambda$extractApksInSession$5$StagingManager(I)Lcom/android/server/pm/PackageInstallerSession;
+PLcom/android/server/pm/StagingManager;->lambda$extractApksInSession$6(Lcom/android/server/pm/PackageInstallerSession;)Z
+PLcom/android/server/pm/StagingManager;->lambda$sessionContains$1$StagingManager(I)Lcom/android/server/pm/PackageInstallerSession;
+PLcom/android/server/pm/StagingManager;->lambda$sessionContains$2(Ljava/util/function/Predicate;Lcom/android/server/pm/PackageInstallerSession;)Z
+PLcom/android/server/pm/StagingManager;->lambda$sessionContainsApex$3(Lcom/android/server/pm/PackageInstallerSession;)Z
+PLcom/android/server/pm/StagingManager;->lambda$sessionContainsApk$4(Lcom/android/server/pm/PackageInstallerSession;)Z
+PLcom/android/server/pm/StagingManager;->lambda$submitSessionToApexService$0(Landroid/content/pm/PackageInfo;)Ljava/lang/String;
+PLcom/android/server/pm/StagingManager;->lambda$verifyApksInSession$7$StagingManager(Lcom/android/server/pm/PackageInstallerSession;Landroid/content/Intent;)V
+PLcom/android/server/pm/StagingManager;->needsCheckpoint()Z
+HSPLcom/android/server/pm/StagingManager;->restoreSession(Lcom/android/server/pm/PackageInstallerSession;Z)V
+PLcom/android/server/pm/StagingManager;->resumeSession(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager;->retrieveRollbackIdForCommitSession(I)I
+PLcom/android/server/pm/StagingManager;->sessionContains(Lcom/android/server/pm/PackageInstallerSession;Ljava/util/function/Predicate;)Z
+PLcom/android/server/pm/StagingManager;->sessionContainsApex(Lcom/android/server/pm/PackageInstallerSession;)Z
+PLcom/android/server/pm/StagingManager;->sessionContainsApk(Lcom/android/server/pm/PackageInstallerSession;)Z
+PLcom/android/server/pm/StagingManager;->snapshotAndRestoreApkInApexUserData(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager;->snapshotAndRestoreApkInApexUserData(Ljava/lang/String;)V
+PLcom/android/server/pm/StagingManager;->submitSessionToApexService(Lcom/android/server/pm/PackageInstallerSession;)Ljava/util/List;
+PLcom/android/server/pm/StagingManager;->supportsCheckpoint()Z
+HSPLcom/android/server/pm/StagingManager;->systemReady()V
+PLcom/android/server/pm/StagingManager;->updateStoredSession(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/StagingManager;->validateApexSignature(Landroid/content/pm/PackageInfo;)V
+PLcom/android/server/pm/StagingManager;->verifyApksInSession(Lcom/android/server/pm/PackageInstallerSession;)V
 HSPLcom/android/server/pm/UserDataPreparer;-><init>(Lcom/android/server/pm/Installer;Ljava/lang/Object;Landroid/content/Context;Z)V
+PLcom/android/server/pm/UserDataPreparer;->destroyUserData(II)V
+PLcom/android/server/pm/UserDataPreparer;->destroyUserDataLI(Ljava/lang/String;II)V
 HSPLcom/android/server/pm/UserDataPreparer;->enforceSerialNumber(Ljava/io/File;I)V
 PLcom/android/server/pm/UserDataPreparer;->getDataSystemCeDirectory(I)Ljava/io/File;
 PLcom/android/server/pm/UserDataPreparer;->getDataSystemDeDirectory(I)Ljava/io/File;
 PLcom/android/server/pm/UserDataPreparer;->getDataUserCeDirectory(Ljava/lang/String;I)Ljava/io/File;
 PLcom/android/server/pm/UserDataPreparer;->getDataUserDeDirectory(Ljava/lang/String;I)Ljava/io/File;
 HSPLcom/android/server/pm/UserDataPreparer;->getSerialNumber(Ljava/io/File;)I
+PLcom/android/server/pm/UserDataPreparer;->getUserSystemDirectory(I)Ljava/io/File;
 HSPLcom/android/server/pm/UserDataPreparer;->isFileEncryptedEmulatedOnly()Z
 PLcom/android/server/pm/UserDataPreparer;->prepareUserData(III)V
 PLcom/android/server/pm/UserDataPreparer;->prepareUserDataLI(Ljava/lang/String;IIIZ)V
 HSPLcom/android/server/pm/UserDataPreparer;->reconcileUsers(Ljava/lang/String;Ljava/util/List;)V
 HSPLcom/android/server/pm/UserDataPreparer;->reconcileUsers(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
+HSPLcom/android/server/pm/UserDataPreparer;->setSerialNumber(Ljava/io/File;I)V
 HSPLcom/android/server/pm/UserManagerService$1;-><init>(Lcom/android/server/pm/UserManagerService;)V
+PLcom/android/server/pm/UserManagerService$1;->lambda$onReceive$0$UserManagerService$1(ILandroid/content/IntentSender;)V
+PLcom/android/server/pm/UserManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/pm/UserManagerService$2;-><init>(Lcom/android/server/pm/UserManagerService;Landroid/os/Bundle;I)V
-PLcom/android/server/pm/UserManagerService$2;->run()V
+HSPLcom/android/server/pm/UserManagerService$2;->run()V
 HSPLcom/android/server/pm/UserManagerService$3;-><init>(Lcom/android/server/pm/UserManagerService;ILandroid/os/Bundle;Landroid/os/Bundle;)V
-PLcom/android/server/pm/UserManagerService$3;->run()V
+HSPLcom/android/server/pm/UserManagerService$3;->run()V
+PLcom/android/server/pm/UserManagerService$4;-><init>(Lcom/android/server/pm/UserManagerService;)V
+PLcom/android/server/pm/UserManagerService$4;->run()V
+PLcom/android/server/pm/UserManagerService$5;-><init>(Lcom/android/server/pm/UserManagerService;)V
+PLcom/android/server/pm/UserManagerService$5;->userStopped(I)V
+PLcom/android/server/pm/UserManagerService$6$1;-><init>(Lcom/android/server/pm/UserManagerService$6;)V
+PLcom/android/server/pm/UserManagerService$6$1;->run()V
+PLcom/android/server/pm/UserManagerService$6;-><init>(Lcom/android/server/pm/UserManagerService;I)V
+PLcom/android/server/pm/UserManagerService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/pm/UserManagerService$DisableQuietModeUserUnlockedCallback;-><init>(Lcom/android/server/pm/UserManagerService;Landroid/content/IntentSender;)V
+PLcom/android/server/pm/UserManagerService$DisableQuietModeUserUnlockedCallback;->onFinished(ILandroid/os/Bundle;)V
+PLcom/android/server/pm/UserManagerService$DisableQuietModeUserUnlockedCallback;->onProgress(IILandroid/os/Bundle;)V
+PLcom/android/server/pm/UserManagerService$DisableQuietModeUserUnlockedCallback;->onStarted(ILandroid/os/Bundle;)V
 HSPLcom/android/server/pm/UserManagerService$LifeCycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/UserManagerService$LifeCycle;->onBootPhase(I)V
 HSPLcom/android/server/pm/UserManagerService$LifeCycle;->onStart()V
-PLcom/android/server/pm/UserManagerService$LifeCycle;->onStartUser(I)V
+HSPLcom/android/server/pm/UserManagerService$LifeCycle;->onStartUser(I)V
+PLcom/android/server/pm/UserManagerService$LifeCycle;->onStopUser(I)V
 PLcom/android/server/pm/UserManagerService$LifeCycle;->onUnlockUser(I)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$1;)V
 HSPLcom/android/server/pm/UserManagerService$LocalService;->addUserRestrictionsListener(Landroid/os/UserManagerInternal$UserRestrictionsListener;)V
 HSPLcom/android/server/pm/UserManagerService$LocalService;->exists(I)Z
-PLcom/android/server/pm/UserManagerService$LocalService;->getProfileParentId(I)I
+HPLcom/android/server/pm/UserManagerService$LocalService;->getProfileParentId(I)I
 HSPLcom/android/server/pm/UserManagerService$LocalService;->getUserIds()[I
 HSPLcom/android/server/pm/UserManagerService$LocalService;->getUserInfo(I)Landroid/content/pm/UserInfo;
 HSPLcom/android/server/pm/UserManagerService$LocalService;->getUserInfos()[Landroid/content/pm/UserInfo;
@@ -15694,13 +25820,15 @@
 HSPLcom/android/server/pm/UserManagerService$LocalService;->hasUserRestriction(Ljava/lang/String;I)Z
 PLcom/android/server/pm/UserManagerService$LocalService;->isDeviceManaged()Z
 HPLcom/android/server/pm/UserManagerService$LocalService;->isProfileAccessible(IILjava/lang/String;Z)Z
-PLcom/android/server/pm/UserManagerService$LocalService;->isUserInitialized(I)Z
+HSPLcom/android/server/pm/UserManagerService$LocalService;->isUserInitialized(I)Z
 PLcom/android/server/pm/UserManagerService$LocalService;->isUserManaged(I)Z
 HSPLcom/android/server/pm/UserManagerService$LocalService;->isUserRunning(I)Z
 HSPLcom/android/server/pm/UserManagerService$LocalService;->isUserUnlocked(I)Z
 HSPLcom/android/server/pm/UserManagerService$LocalService;->isUserUnlockingOrUnlocked(I)Z
+PLcom/android/server/pm/UserManagerService$LocalService;->removeUserState(I)V
 HSPLcom/android/server/pm/UserManagerService$LocalService;->setDeviceManaged(Z)V
 HSPLcom/android/server/pm/UserManagerService$LocalService;->setDevicePolicyUserRestrictions(ILandroid/os/Bundle;I)V
+HSPLcom/android/server/pm/UserManagerService$LocalService;->setForceEphemeralUsers(Z)V
 HSPLcom/android/server/pm/UserManagerService$LocalService;->setUserManaged(IZ)V
 PLcom/android/server/pm/UserManagerService$LocalService;->setUserState(II)V
 HSPLcom/android/server/pm/UserManagerService$MainHandler;-><init>(Lcom/android/server/pm/UserManagerService;)V
@@ -15711,42 +25839,92 @@
 HSPLcom/android/server/pm/UserManagerService;-><clinit>()V
 HSPLcom/android/server/pm/UserManagerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/UserDataPreparer;Ljava/lang/Object;)V
 HSPLcom/android/server/pm/UserManagerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/UserDataPreparer;Ljava/lang/Object;Ljava/io/File;)V
-PLcom/android/server/pm/UserManagerService;->access$100(Lcom/android/server/pm/UserManagerService;)Landroid/content/Context;
+PLcom/android/server/pm/UserManagerService;->access$000(Lcom/android/server/pm/UserManagerService;IZLandroid/content/IntentSender;Ljava/lang/String;)V
+HSPLcom/android/server/pm/UserManagerService;->access$100(Lcom/android/server/pm/UserManagerService;)Landroid/content/Context;
+PLcom/android/server/pm/UserManagerService;->access$1000(Lcom/android/server/pm/UserManagerService;I)V
 PLcom/android/server/pm/UserManagerService;->access$1100(Lcom/android/server/pm/UserManagerService;)Ljava/lang/Object;
+PLcom/android/server/pm/UserManagerService;->access$1200(Lcom/android/server/pm/UserManagerService;)Ljava/lang/Object;
 PLcom/android/server/pm/UserManagerService;->access$1200(Lcom/android/server/pm/UserManagerService;I)Lcom/android/server/pm/UserManagerService$UserData;
+PLcom/android/server/pm/UserManagerService;->access$1300(Lcom/android/server/pm/UserManagerService;I)Lcom/android/server/pm/UserManagerService$UserData;
 PLcom/android/server/pm/UserManagerService;->access$1300(Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService$UserData;)V
 HSPLcom/android/server/pm/UserManagerService;->access$1400(Lcom/android/server/pm/UserManagerService;ILandroid/os/Bundle;I)V
+PLcom/android/server/pm/UserManagerService;->access$1400(Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService$UserData;)V
+HSPLcom/android/server/pm/UserManagerService;->access$1500(Lcom/android/server/pm/UserManagerService;ILandroid/os/Bundle;I)V
 PLcom/android/server/pm/UserManagerService;->access$1800(Lcom/android/server/pm/UserManagerService;)Z
 HSPLcom/android/server/pm/UserManagerService;->access$1802(Lcom/android/server/pm/UserManagerService;Z)Z
 HSPLcom/android/server/pm/UserManagerService;->access$1900(Lcom/android/server/pm/UserManagerService;)Landroid/util/SparseBooleanArray;
+PLcom/android/server/pm/UserManagerService;->access$1900(Lcom/android/server/pm/UserManagerService;)Z
+HSPLcom/android/server/pm/UserManagerService;->access$1902(Lcom/android/server/pm/UserManagerService;Z)Z
+HSPLcom/android/server/pm/UserManagerService;->access$200(Lcom/android/server/pm/UserManagerService;)Lcom/android/server/pm/PackageManagerService;
 HSPLcom/android/server/pm/UserManagerService;->access$200(Lcom/android/server/pm/UserManagerService;)Ljava/lang/Object;
-PLcom/android/server/pm/UserManagerService;->access$2500(Lcom/android/server/pm/UserManagerService;I)Landroid/content/pm/UserInfo;
+HSPLcom/android/server/pm/UserManagerService;->access$2000(Lcom/android/server/pm/UserManagerService;)Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/pm/UserManagerService;->access$2202(Lcom/android/server/pm/UserManagerService;Z)Z
+HSPLcom/android/server/pm/UserManagerService;->access$2302(Lcom/android/server/pm/UserManagerService;Z)Z
+HPLcom/android/server/pm/UserManagerService;->access$2500(Lcom/android/server/pm/UserManagerService;I)Landroid/content/pm/UserInfo;
+HPLcom/android/server/pm/UserManagerService;->access$2600(Lcom/android/server/pm/UserManagerService;I)Landroid/content/pm/UserInfo;
 HSPLcom/android/server/pm/UserManagerService;->access$2800(Lcom/android/server/pm/UserManagerService;)Landroid/util/SparseIntArray;
+HSPLcom/android/server/pm/UserManagerService;->access$2900(Lcom/android/server/pm/UserManagerService;)Landroid/util/SparseIntArray;
 HSPLcom/android/server/pm/UserManagerService;->access$2900(Lcom/android/server/pm/UserManagerService;I)Landroid/content/pm/UserInfo;
-PLcom/android/server/pm/UserManagerService;->access$300(Lcom/android/server/pm/UserManagerService;I)Lcom/android/server/pm/UserManagerService$UserData;
+HSPLcom/android/server/pm/UserManagerService;->access$300(Lcom/android/server/pm/UserManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/pm/UserManagerService;->access$300(Lcom/android/server/pm/UserManagerService;I)Lcom/android/server/pm/UserManagerService$UserData;
+HSPLcom/android/server/pm/UserManagerService;->access$3000(Lcom/android/server/pm/UserManagerService;I)Landroid/content/pm/UserInfo;
+HPLcom/android/server/pm/UserManagerService;->access$3100(Lcom/android/server/pm/UserManagerService;I)Landroid/content/pm/UserInfo;
 HSPLcom/android/server/pm/UserManagerService;->access$3100(Lcom/android/server/pm/UserManagerService;I)Landroid/os/Bundle;
 HSPLcom/android/server/pm/UserManagerService;->access$3200(Lcom/android/server/pm/UserManagerService;)Landroid/util/SparseArray;
-PLcom/android/server/pm/UserManagerService;->access$500()Landroid/os/IBinder;
-PLcom/android/server/pm/UserManagerService;->access$600(Lcom/android/server/pm/UserManagerService;)Lcom/android/internal/app/IAppOpsService;
+HSPLcom/android/server/pm/UserManagerService;->access$3200(Lcom/android/server/pm/UserManagerService;I)Landroid/os/Bundle;
+HSPLcom/android/server/pm/UserManagerService;->access$3300(Lcom/android/server/pm/UserManagerService;)Landroid/util/SparseArray;
+HSPLcom/android/server/pm/UserManagerService;->access$400(Lcom/android/server/pm/UserManagerService;I)Lcom/android/server/pm/UserManagerService$UserData;
+HSPLcom/android/server/pm/UserManagerService;->access$500()Landroid/os/IBinder;
+HSPLcom/android/server/pm/UserManagerService;->access$600()Landroid/os/IBinder;
+HSPLcom/android/server/pm/UserManagerService;->access$600(Lcom/android/server/pm/UserManagerService;)Lcom/android/internal/app/IAppOpsService;
+HSPLcom/android/server/pm/UserManagerService;->access$700(Lcom/android/server/pm/UserManagerService;)Lcom/android/internal/app/IAppOpsService;
 HSPLcom/android/server/pm/UserManagerService;->access$700(Lcom/android/server/pm/UserManagerService;)Ljava/util/ArrayList;
+PLcom/android/server/pm/UserManagerService;->access$800(Lcom/android/server/pm/UserManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/pm/UserManagerService;->access$800(Lcom/android/server/pm/UserManagerService;)Ljava/util/ArrayList;
+PLcom/android/server/pm/UserManagerService;->access$900(Lcom/android/server/pm/UserManagerService;)Ljava/lang/Object;
+PLcom/android/server/pm/UserManagerService;->addRemovingUserIdLocked(I)V
 HSPLcom/android/server/pm/UserManagerService;->addUserRestrictionsListener(Landroid/os/IUserRestrictionsListener;)V
+PLcom/android/server/pm/UserManagerService;->applyUserRestrictionsForAllUsersLR()V
 HSPLcom/android/server/pm/UserManagerService;->applyUserRestrictionsLR(I)V
+PLcom/android/server/pm/UserManagerService;->broadcastProfileAvailabilityChanges(Landroid/os/UserHandle;Landroid/os/UserHandle;Z)V
+PLcom/android/server/pm/UserManagerService;->canAddMoreManagedProfiles(IZ)Z
+PLcom/android/server/pm/UserManagerService;->canAddMoreProfilesToUser(Ljava/lang/String;IZ)Z
+PLcom/android/server/pm/UserManagerService;->canAddMoreUsersOfType(Lcom/android/server/pm/UserTypeDetails;)Z
+PLcom/android/server/pm/UserManagerService;->canHaveRestrictedProfile(I)Z
+PLcom/android/server/pm/UserManagerService;->checkManageOrCreateUsersPermission(I)V
 HSPLcom/android/server/pm/UserManagerService;->checkManageOrCreateUsersPermission(Ljava/lang/String;)V
 HSPLcom/android/server/pm/UserManagerService;->checkManageOrInteractPermIfCallerInOtherProfileGroup(ILjava/lang/String;)V
 PLcom/android/server/pm/UserManagerService;->checkManageUserAndAcrossUsersFullPermission(Ljava/lang/String;)V
 HSPLcom/android/server/pm/UserManagerService;->checkManageUsersPermission(Ljava/lang/String;)V
-PLcom/android/server/pm/UserManagerService;->checkSystemOrRoot(Ljava/lang/String;)V
+HPLcom/android/server/pm/UserManagerService;->checkSystemOrRoot(Ljava/lang/String;)V
+PLcom/android/server/pm/UserManagerService;->checkUserTypeConsistency(I)Z
 HSPLcom/android/server/pm/UserManagerService;->cleanupPartialUsers()V
+PLcom/android/server/pm/UserManagerService;->cleanupPreCreatedUsers()V
 HSPLcom/android/server/pm/UserManagerService;->computeEffectiveUserRestrictionsLR(I)Landroid/os/Bundle;
-PLcom/android/server/pm/UserManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/pm/UserManagerService;->createProfileForUserEvenWhenDisallowed(Ljava/lang/String;Ljava/lang/String;II[Ljava/lang/String;)Landroid/content/pm/UserInfo;
+PLcom/android/server/pm/UserManagerService;->createProfileForUserEvenWhenDisallowedWithThrow(Ljava/lang/String;Ljava/lang/String;II[Ljava/lang/String;)Landroid/content/pm/UserInfo;
+PLcom/android/server/pm/UserManagerService;->createUserInternalUnchecked(Ljava/lang/String;Ljava/lang/String;IIZ[Ljava/lang/String;)Landroid/content/pm/UserInfo;
+PLcom/android/server/pm/UserManagerService;->createUserInternalUncheckedNoTracing(Ljava/lang/String;Ljava/lang/String;IIZ[Ljava/lang/String;Lcom/android/server/utils/TimingsTraceAndSlog;)Landroid/content/pm/UserInfo;
+PLcom/android/server/pm/UserManagerService;->dispatchUserAddedIntent(Landroid/content/pm/UserInfo;)V
+HPLcom/android/server/pm/UserManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/pm/UserManagerService;->dumpTimeAgo(Ljava/io/PrintWriter;Ljava/lang/StringBuilder;JJ)V
+PLcom/android/server/pm/UserManagerService;->ensureCanModifyQuietMode(Ljava/lang/String;IIZ)V
 HSPLcom/android/server/pm/UserManagerService;->exists(I)Z
-PLcom/android/server/pm/UserManagerService;->getAliveUsersExcludingGuestsCountLU()I
+PLcom/android/server/pm/UserManagerService;->finishRemoveUser(I)V
+HPLcom/android/server/pm/UserManagerService;->getAliveUsersExcludingGuestsCountLU()I
 HPLcom/android/server/pm/UserManagerService;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
 HPLcom/android/server/pm/UserManagerService;->getApplicationRestrictionsForUser(Ljava/lang/String;I)Landroid/os/Bundle;
+PLcom/android/server/pm/UserManagerService;->getCreationTime()J
 HSPLcom/android/server/pm/UserManagerService;->getCredentialOwnerProfile(I)I
 HSPLcom/android/server/pm/UserManagerService;->getEffectiveUserRestrictions(I)Landroid/os/Bundle;
+PLcom/android/server/pm/UserManagerService;->getEnforcingUserLocked(I)Landroid/os/UserManager$EnforcingUser;
+PLcom/android/server/pm/UserManagerService;->getFreeProfileBadgeLU(ILjava/lang/String;)I
 HSPLcom/android/server/pm/UserManagerService;->getInstance()Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/UserManagerService;->getInternalForInjectorOnly()Landroid/os/UserManagerInternal;
+PLcom/android/server/pm/UserManagerService;->getMaxUsersOfTypePerParent(Lcom/android/server/pm/UserTypeDetails;)I
+PLcom/android/server/pm/UserManagerService;->getMaxUsersOfTypePerParent(Ljava/lang/String;)I
+PLcom/android/server/pm/UserManagerService;->getNextAvailableId()I
+HSPLcom/android/server/pm/UserManagerService;->getOwnerName()Ljava/lang/String;
 HSPLcom/android/server/pm/UserManagerService;->getPrimaryUser()Landroid/content/pm/UserInfo;
 HSPLcom/android/server/pm/UserManagerService;->getProfileIds(ILjava/lang/String;Z)[I
 HSPLcom/android/server/pm/UserManagerService;->getProfileIds(IZ)[I
@@ -15755,23 +25933,26 @@
 HSPLcom/android/server/pm/UserManagerService;->getProfileParentLU(I)Landroid/content/pm/UserInfo;
 HSPLcom/android/server/pm/UserManagerService;->getProfiles(IZ)Ljava/util/List;
 HSPLcom/android/server/pm/UserManagerService;->getProfilesLU(ILjava/lang/String;ZZ)Ljava/util/List;
+PLcom/android/server/pm/UserManagerService;->getSeedAccountType()Ljava/lang/String;
 HPLcom/android/server/pm/UserManagerService;->getUidForPackage(Ljava/lang/String;)I
 PLcom/android/server/pm/UserManagerService;->getUserAccount(I)Ljava/lang/String;
 HPLcom/android/server/pm/UserManagerService;->getUserBadgeColorResId(I)I
 HPLcom/android/server/pm/UserManagerService;->getUserBadgeLabelResId(I)I
 HPLcom/android/server/pm/UserManagerService;->getUserBadgeNoBackgroundResId(I)I
-PLcom/android/server/pm/UserManagerService;->getUserCreationTime(I)J
-PLcom/android/server/pm/UserManagerService;->getUserDataLU(I)Lcom/android/server/pm/UserManagerService$UserData;
+PLcom/android/server/pm/UserManagerService;->getUserBadgeResId(I)I
+HPLcom/android/server/pm/UserManagerService;->getUserCreationTime(I)J
+HSPLcom/android/server/pm/UserManagerService;->getUserDataLU(I)Lcom/android/server/pm/UserManagerService$UserData;
 PLcom/android/server/pm/UserManagerService;->getUserDataNoChecks(I)Lcom/android/server/pm/UserManagerService$UserData;
 HSPLcom/android/server/pm/UserManagerService;->getUserHandle(I)I
-PLcom/android/server/pm/UserManagerService;->getUserIcon(I)Landroid/os/ParcelFileDescriptor;
-PLcom/android/server/pm/UserManagerService;->getUserIconBadgeResId(I)I
+HPLcom/android/server/pm/UserManagerService;->getUserIcon(I)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/pm/UserManagerService;->getUserIconBadgeResId(I)I
 HSPLcom/android/server/pm/UserManagerService;->getUserIds()[I
 HSPLcom/android/server/pm/UserManagerService;->getUserInfo(I)Landroid/content/pm/UserInfo;
 HSPLcom/android/server/pm/UserManagerService;->getUserInfoLU(I)Landroid/content/pm/UserInfo;
 HSPLcom/android/server/pm/UserManagerService;->getUserInfoNoChecks(I)Landroid/content/pm/UserInfo;
 PLcom/android/server/pm/UserManagerService;->getUserName()Ljava/lang/String;
-PLcom/android/server/pm/UserManagerService;->getUserRestrictionSources(Ljava/lang/String;I)Ljava/util/List;
+HPLcom/android/server/pm/UserManagerService;->getUserRestrictionSource(Ljava/lang/String;I)I
+HPLcom/android/server/pm/UserManagerService;->getUserRestrictionSources(Ljava/lang/String;I)Ljava/util/List;
 HSPLcom/android/server/pm/UserManagerService;->getUserRestrictions(I)Landroid/os/Bundle;
 HSPLcom/android/server/pm/UserManagerService;->getUserSerialNumber(I)I
 HPLcom/android/server/pm/UserManagerService;->getUserStartRealtime()J
@@ -15782,40 +25963,44 @@
 HSPLcom/android/server/pm/UserManagerService;->getUsers(Z)Ljava/util/List;
 HSPLcom/android/server/pm/UserManagerService;->getUsers(ZZZ)Ljava/util/List;
 HPLcom/android/server/pm/UserManagerService;->hasBadge(I)Z
-PLcom/android/server/pm/UserManagerService;->hasBaseUserRestriction(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/UserManagerService;->hasBaseUserRestriction(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/UserManagerService;->hasManageOrCreateUsersPermission()Z
 HSPLcom/android/server/pm/UserManagerService;->hasManageUsersOrPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/UserManagerService;->hasManageUsersPermission()Z
 HSPLcom/android/server/pm/UserManagerService;->hasManagedProfile(I)Z
 HSPLcom/android/server/pm/UserManagerService;->hasPermissionGranted(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/UserManagerService;->hasUserRestriction(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/UserManagerService;->hasUserRestrictionOnAnyUser(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/UserManagerService;->initDefaultGuestRestrictions()V
 HSPLcom/android/server/pm/UserManagerService;->installWhitelistedSystemPackages(ZZ)Z
-PLcom/android/server/pm/UserManagerService;->isDemoUser(I)Z
+PLcom/android/server/pm/UserManagerService;->isAtMostOneFlag(I)Z
+HPLcom/android/server/pm/UserManagerService;->isDemoUser(I)Z
 HSPLcom/android/server/pm/UserManagerService;->isManagedProfile(I)Z
 PLcom/android/server/pm/UserManagerService;->isPreCreated(I)Z
 HSPLcom/android/server/pm/UserManagerService;->isProfile(I)Z
 HSPLcom/android/server/pm/UserManagerService;->isProfileOf(Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;)Z
-PLcom/android/server/pm/UserManagerService;->isQuietModeEnabled(I)Z
-PLcom/android/server/pm/UserManagerService;->isRestricted()Z
-PLcom/android/server/pm/UserManagerService;->isSameProfileGroup(II)Z
+HSPLcom/android/server/pm/UserManagerService;->isQuietModeEnabled(I)Z
+HPLcom/android/server/pm/UserManagerService;->isRestricted()Z
+HPLcom/android/server/pm/UserManagerService;->isSameProfileGroup(II)Z
 HSPLcom/android/server/pm/UserManagerService;->isSameProfileGroupNoChecks(II)Z
 HSPLcom/android/server/pm/UserManagerService;->isSettingRestrictedForUser(Ljava/lang/String;ILjava/lang/String;I)Z
-PLcom/android/server/pm/UserManagerService;->isUserLimitReached()Z
+HPLcom/android/server/pm/UserManagerService;->isUserLimitReached()Z
 HSPLcom/android/server/pm/UserManagerService;->isUserRunning(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
-PLcom/android/server/pm/UserManagerService;->lambda$addUserRestrictionsListener$0(Landroid/os/IUserRestrictionsListener;ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/pm/UserManagerService;->lambda$addUserRestrictionsListener$0(Landroid/os/IUserRestrictionsListener;ILandroid/os/Bundle;Landroid/os/Bundle;)V
+PLcom/android/server/pm/UserManagerService;->logQuietModeEnabled(IZLjava/lang/String;)V
+PLcom/android/server/pm/UserManagerService;->makeInitialized(I)V
 PLcom/android/server/pm/UserManagerService;->onBeforeStartUser(I)V
 PLcom/android/server/pm/UserManagerService;->onBeforeUnlockUser(I)V
 PLcom/android/server/pm/UserManagerService;->onUserLoggedIn(I)V
-PLcom/android/server/pm/UserManagerService;->packageToRestrictionsFileName(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/pm/UserManagerService;->packageToRestrictionsFileName(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/pm/UserManagerService;->propagateUserRestrictionsLR(ILandroid/os/Bundle;Landroid/os/Bundle;)V
 HPLcom/android/server/pm/UserManagerService;->readApplicationRestrictionsLAr(Landroid/util/AtomicFile;)Landroid/os/Bundle;
-PLcom/android/server/pm/UserManagerService;->readApplicationRestrictionsLAr(Ljava/lang/String;I)Landroid/os/Bundle;
+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;Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/pm/UserManagerService;->readIntAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
 HSPLcom/android/server/pm/UserManagerService;->readLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;J)J
@@ -15823,10 +26008,20 @@
 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;->reconcileUsers(Ljava/lang/String;)V
+PLcom/android/server/pm/UserManagerService;->removeUser(I)Z
+PLcom/android/server/pm/UserManagerService;->removeUserState(I)V
+PLcom/android/server/pm/UserManagerService;->removeUserUnchecked(I)Z
+PLcom/android/server/pm/UserManagerService;->requestQuietModeEnabled(Ljava/lang/String;ZILandroid/content/IntentSender;)Z
+PLcom/android/server/pm/UserManagerService;->requestQuietModeEnabled(Ljava/lang/String;ZILandroid/content/IntentSender;I)Z
+PLcom/android/server/pm/UserManagerService;->scanNextAvailableIdLocked()I
 PLcom/android/server/pm/UserManagerService;->scheduleWriteUser(Lcom/android/server/pm/UserManagerService$UserData;)V
-PLcom/android/server/pm/UserManagerService;->setApplicationRestrictions(Ljava/lang/String;Landroid/os/Bundle;I)V
+PLcom/android/server/pm/UserManagerService;->sendProfileRemovedBroadcast(II)V
+HPLcom/android/server/pm/UserManagerService;->setApplicationRestrictions(Ljava/lang/String;Landroid/os/Bundle;I)V
 HSPLcom/android/server/pm/UserManagerService;->setDevicePolicyUserRestrictionsInner(ILandroid/os/Bundle;I)V
-PLcom/android/server/pm/UserManagerService;->setUserRestriction(Ljava/lang/String;ZI)V
+PLcom/android/server/pm/UserManagerService;->setQuietModeEnabled(IZLandroid/content/IntentSender;Ljava/lang/String;)V
+PLcom/android/server/pm/UserManagerService;->setUserEnabled(I)V
+HSPLcom/android/server/pm/UserManagerService;->setUserRestriction(Ljava/lang/String;ZI)V
+PLcom/android/server/pm/UserManagerService;->showConfirmCredentialToDisableQuietMode(ILandroid/content/IntentSender;)V
 HSPLcom/android/server/pm/UserManagerService;->systemReady()V
 HSPLcom/android/server/pm/UserManagerService;->updateRestrictionsIfNeededLR(ILandroid/os/Bundle;Landroid/util/SparseArray;)Z
 HSPLcom/android/server/pm/UserManagerService;->updateUserIds()V
@@ -15834,22 +26029,28 @@
 HSPLcom/android/server/pm/UserManagerService;->upgradeIfNecessaryLP(Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/UserManagerService;->upgradeIfNecessaryLP(Landroid/os/Bundle;I)V
 HSPLcom/android/server/pm/UserManagerService;->userWithName(Landroid/content/pm/UserInfo;)Landroid/content/pm/UserInfo;
-PLcom/android/server/pm/UserManagerService;->writeApplicationRestrictionsLAr(Landroid/os/Bundle;Landroid/util/AtomicFile;)V
-PLcom/android/server/pm/UserManagerService;->writeApplicationRestrictionsLAr(Ljava/lang/String;Landroid/os/Bundle;I)V
-PLcom/android/server/pm/UserManagerService;->writeBundle(Landroid/os/Bundle;Lorg/xmlpull/v1/XmlSerializer;)V
+PLcom/android/server/pm/UserManagerService;->verifyCallingPackage(Ljava/lang/String;I)V
+HPLcom/android/server/pm/UserManagerService;->writeApplicationRestrictionsLAr(Landroid/os/Bundle;Landroid/util/AtomicFile;)V
+HPLcom/android/server/pm/UserManagerService;->writeApplicationRestrictionsLAr(Ljava/lang/String;Landroid/os/Bundle;I)V
+HPLcom/android/server/pm/UserManagerService;->writeBundle(Landroid/os/Bundle;Lorg/xmlpull/v1/XmlSerializer;)V
 PLcom/android/server/pm/UserManagerService;->writeUserLP(Lcom/android/server/pm/UserManagerService$UserData;)V
 PLcom/android/server/pm/UserManagerService;->writeUserLP(Lcom/android/server/pm/UserManagerService$UserData;Ljava/io/OutputStream;)V
+PLcom/android/server/pm/UserManagerService;->writeUserListLP()V
 HSPLcom/android/server/pm/UserRestrictionsUtils;-><clinit>()V
-PLcom/android/server/pm/UserRestrictionsUtils;->applyUserRestriction(Landroid/content/Context;ILjava/lang/String;Z)V
-PLcom/android/server/pm/UserRestrictionsUtils;->applyUserRestrictions(Landroid/content/Context;ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/pm/UserRestrictionsUtils;->applyUserRestriction(Landroid/content/Context;ILjava/lang/String;Z)V
+HSPLcom/android/server/pm/UserRestrictionsUtils;->applyUserRestrictions(Landroid/content/Context;ILandroid/os/Bundle;Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/UserRestrictionsUtils;->areEqual(Landroid/os/Bundle;Landroid/os/Bundle;)Z
+HPLcom/android/server/pm/UserRestrictionsUtils;->canDeviceOwnerChange(Ljava/lang/String;)Z
+HPLcom/android/server/pm/UserRestrictionsUtils;->canProfileOwnerChange(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/UserRestrictionsUtils;->clone(Landroid/os/Bundle;)Landroid/os/Bundle;
+PLcom/android/server/pm/UserRestrictionsUtils;->contains(Landroid/os/Bundle;Ljava/lang/String;)Z
 HPLcom/android/server/pm/UserRestrictionsUtils;->dumpRestrictions(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/UserRestrictionsUtils;->getDefaultEnabledForManagedProfiles()Ljava/util/Set;
-PLcom/android/server/pm/UserRestrictionsUtils;->getNewUserRestrictionSetting(Landroid/content/Context;ILjava/lang/String;Z)I
+HSPLcom/android/server/pm/UserRestrictionsUtils;->getNewUserRestrictionSetting(Landroid/content/Context;ILjava/lang/String;Z)I
 HSPLcom/android/server/pm/UserRestrictionsUtils;->isEmpty(Landroid/os/Bundle;)Z
-HPLcom/android/server/pm/UserRestrictionsUtils;->isGlobal(ILjava/lang/String;)Z
+HSPLcom/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
+PLcom/android/server/pm/UserRestrictionsUtils;->isSystemApp(I[Ljava/lang/String;)Z
 HSPLcom/android/server/pm/UserRestrictionsUtils;->isValidRestriction(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/UserRestrictionsUtils;->merge(Landroid/os/Bundle;Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/UserRestrictionsUtils;->mergeAll(Landroid/util/SparseArray;)Landroid/os/Bundle;
@@ -15857,24 +26058,29 @@
 HSPLcom/android/server/pm/UserRestrictionsUtils;->nonNull(Landroid/os/Bundle;)Landroid/os/Bundle;
 HSPLcom/android/server/pm/UserRestrictionsUtils;->readRestrictions(Lorg/xmlpull/v1/XmlPullParser;)Landroid/os/Bundle;
 HSPLcom/android/server/pm/UserRestrictionsUtils;->readRestrictions(Lorg/xmlpull/v1/XmlPullParser;Landroid/os/Bundle;)V
-PLcom/android/server/pm/UserRestrictionsUtils;->restrictionsChanged(Landroid/os/Bundle;Landroid/os/Bundle;[Ljava/lang/String;)Z
-PLcom/android/server/pm/UserRestrictionsUtils;->setInstallMarketAppsRestriction(Landroid/content/ContentResolver;II)V
+HSPLcom/android/server/pm/UserRestrictionsUtils;->restrictionsChanged(Landroid/os/Bundle;Landroid/os/Bundle;[Ljava/lang/String;)Z
+HSPLcom/android/server/pm/UserRestrictionsUtils;->setInstallMarketAppsRestriction(Landroid/content/ContentResolver;II)V
 HSPLcom/android/server/pm/UserRestrictionsUtils;->sortToGlobalAndLocal(Landroid/os/Bundle;ILandroid/os/Bundle;Landroid/os/Bundle;)V
-HPLcom/android/server/pm/UserRestrictionsUtils;->writeRestrictions(Lorg/xmlpull/v1/XmlSerializer;Landroid/os/Bundle;Ljava/lang/String;)V
+HSPLcom/android/server/pm/UserRestrictionsUtils;->writeRestrictions(Lorg/xmlpull/v1/XmlSerializer;Landroid/os/Bundle;Ljava/lang/String;)V
 HSPLcom/android/server/pm/UserSystemPackageInstaller;-><init>(Lcom/android/server/pm/UserManagerService;Landroid/util/ArrayMap;)V
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->checkWhitelistedSystemPackages(I)V
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->determineWhitelistedPackagesForUserTypes(Lcom/android/server/SystemConfig;)Landroid/util/ArrayMap;
 HPLcom/android/server/pm/UserSystemPackageInstaller;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->getAndSortKeysFromMap(Landroid/util/ArrayMap;)[Ljava/lang/String;
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->getBaseTypeBitSets()Ljava/util/Map;
+PLcom/android/server/pm/UserSystemPackageInstaller;->getInstallablePackagesForUserType(Ljava/lang/String;)Ljava/util/Set;
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->getTypesBitSet(Ljava/lang/Iterable;Ljava/util/Map;)J
+PLcom/android/server/pm/UserSystemPackageInstaller;->getUserTypeMask(Ljava/lang/String;)J
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->getWhitelistMode()I
+PLcom/android/server/pm/UserSystemPackageInstaller;->getWhitelistedPackagesForUserType(Ljava/lang/String;)Ljava/util/Set;
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->getWhitelistedSystemPackages()Ljava/util/Set;
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->installWhitelistedSystemPackages(ZZ)Z
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->isEnforceMode(I)Z
 PLcom/android/server/pm/UserSystemPackageInstaller;->isIgnoreOtaMode(I)Z
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->isImplicitWhitelistMode(I)Z
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->isLogMode(I)Z
+HPLcom/android/server/pm/UserSystemPackageInstaller;->lambda$getInstallablePackagesForUserType$2$UserSystemPackageInstaller(Ljava/util/Set;ZLjava/util/Set;Landroid/content/pm/parsing/AndroidPackage;)V
+PLcom/android/server/pm/UserSystemPackageInstaller;->shouldInstallPackage(Landroid/content/pm/parsing/AndroidPackage;Landroid/util/ArrayMap;Ljava/util/Set;Z)Z
 HSPLcom/android/server/pm/UserTypeDetails$Builder;-><init>()V
 HSPLcom/android/server/pm/UserTypeDetails$Builder;->createUserTypeDetails()Lcom/android/server/pm/UserTypeDetails;
 HSPLcom/android/server/pm/UserTypeDetails$Builder;->hasBadge()Z
@@ -15896,12 +26102,17 @@
 HSPLcom/android/server/pm/UserTypeDetails;-><init>(Ljava/lang/String;ZIIIIIIII[I[ILandroid/os/Bundle;Lcom/android/server/pm/UserTypeDetails$1;)V
 HSPLcom/android/server/pm/UserTypeDetails;->addDefaultRestrictionsTo(Landroid/os/Bundle;)V
 HPLcom/android/server/pm/UserTypeDetails;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/pm/UserTypeDetails;->getBadgeColor(I)I
-PLcom/android/server/pm/UserTypeDetails;->getBadgeLabel(I)I
-PLcom/android/server/pm/UserTypeDetails;->getBadgeNoBackground()I
+HPLcom/android/server/pm/UserTypeDetails;->getBadgeColor(I)I
+HPLcom/android/server/pm/UserTypeDetails;->getBadgeLabel(I)I
+HPLcom/android/server/pm/UserTypeDetails;->getBadgeNoBackground()I
+PLcom/android/server/pm/UserTypeDetails;->getBadgePlain()I
+PLcom/android/server/pm/UserTypeDetails;->getDefaultUserInfoFlags()I
 PLcom/android/server/pm/UserTypeDetails;->getIconBadge()I
-PLcom/android/server/pm/UserTypeDetails;->hasBadge()Z
+PLcom/android/server/pm/UserTypeDetails;->getMaxAllowed()I
+PLcom/android/server/pm/UserTypeDetails;->getMaxAllowedPerParent()I
+HPLcom/android/server/pm/UserTypeDetails;->hasBadge()Z
 HSPLcom/android/server/pm/UserTypeDetails;->isFull()Z
+PLcom/android/server/pm/UserTypeDetails;->isManagedProfile()Z
 HSPLcom/android/server/pm/UserTypeDetails;->isProfile()Z
 HSPLcom/android/server/pm/UserTypeDetails;->isSystem()Z
 HSPLcom/android/server/pm/UserTypeFactory;->customizeBuilders(Landroid/util/ArrayMap;Landroid/content/res/XmlResourceParser;)V
@@ -15921,17 +26132,17 @@
 PLcom/android/server/pm/dex/-$$Lambda$ArtManagerService$_rD0Y6OPSJHMdjTIOtucoGQ1xag;->run()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$1;)V
-PLcom/android/server/pm/dex/ArtManagerService$ArtManagerInternalImpl;->getPackageOptimizationInfo(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;)Landroid/content/pm/dex/PackageOptimizationInfo;
+HPLcom/android/server/pm/dex/ArtManagerService$ArtManagerInternalImpl;->getPackageOptimizationInfo(Landroid/content/pm/ApplicationInfo;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;Landroid/content/pm/IPackageManager;Lcom/android/server/pm/Installer;Ljava/lang/Object;)V
 PLcom/android/server/pm/dex/ArtManagerService;->access$100(Ljava/lang/String;)I
 PLcom/android/server/pm/dex/ArtManagerService;->access$200(Ljava/lang/String;)I
-PLcom/android/server/pm/dex/ArtManagerService;->checkAndroidPermissions(ILjava/lang/String;)Z
+HPLcom/android/server/pm/dex/ArtManagerService;->checkAndroidPermissions(ILjava/lang/String;)Z
 PLcom/android/server/pm/dex/ArtManagerService;->checkShellPermissions(ILjava/lang/String;I)Z
 HSPLcom/android/server/pm/dex/ArtManagerService;->clearAppProfiles(Landroid/content/pm/parsing/AndroidPackage;)V
 PLcom/android/server/pm/dex/ArtManagerService;->createProfileSnapshot(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/content/pm/dex/ISnapshotRuntimeProfileCallback;)V
 PLcom/android/server/pm/dex/ArtManagerService;->destroyProfileSnapshot(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/pm/dex/ArtManagerService;->getCompilationFilterTronValue(Ljava/lang/String;)I
+HPLcom/android/server/pm/dex/ArtManagerService;->getCompilationFilterTronValue(Ljava/lang/String;)I
 HSPLcom/android/server/pm/dex/ArtManagerService;->getCompilationReasonTronValue(Ljava/lang/String;)I
 HSPLcom/android/server/pm/dex/ArtManagerService;->getPackageProfileNames(Landroid/content/pm/parsing/AndroidPackage;)Landroid/util/ArrayMap;
 PLcom/android/server/pm/dex/ArtManagerService;->isRuntimeProfilingEnabled(ILjava/lang/String;)Z
@@ -15940,106 +26151,122 @@
 PLcom/android/server/pm/dex/ArtManagerService;->postError(Landroid/content/pm/dex/ISnapshotRuntimeProfileCallback;Ljava/lang/String;I)V
 PLcom/android/server/pm/dex/ArtManagerService;->postSuccess(Ljava/lang/String;Landroid/os/ParcelFileDescriptor;Landroid/content/pm/dex/ISnapshotRuntimeProfileCallback;)V
 HPLcom/android/server/pm/dex/ArtManagerService;->prepareAppProfiles(Landroid/content/pm/parsing/AndroidPackage;IZ)V
+PLcom/android/server/pm/dex/ArtManagerService;->prepareAppProfiles(Landroid/content/pm/parsing/AndroidPackage;[IZ)V
 PLcom/android/server/pm/dex/ArtManagerService;->snapshotAppProfile(Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/dex/ISnapshotRuntimeProfileCallback;)V
 PLcom/android/server/pm/dex/ArtManagerService;->snapshotBootImageProfile(Landroid/content/pm/dex/ISnapshotRuntimeProfileCallback;)V
 PLcom/android/server/pm/dex/ArtManagerService;->snapshotRuntimeProfile(ILjava/lang/String;Ljava/lang/String;Landroid/content/pm/dex/ISnapshotRuntimeProfileCallback;Ljava/lang/String;)V
 HSPLcom/android/server/pm/dex/ArtManagerService;->verifyTronLoggingConstants()V
-HPLcom/android/server/pm/dex/DexManager$DexSearchResult;-><init>(Lcom/android/server/pm/dex/DexManager;Ljava/lang/String;I)V
-PLcom/android/server/pm/dex/DexManager$DexSearchResult;->access$000(Lcom/android/server/pm/dex/DexManager$DexSearchResult;)I
-PLcom/android/server/pm/dex/DexManager$DexSearchResult;->access$100(Lcom/android/server/pm/dex/DexManager$DexSearchResult;)Ljava/lang/String;
-HPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;-><init>(Landroid/content/pm/ApplicationInfo;I)V
+HSPLcom/android/server/pm/dex/DexManager$DexSearchResult;-><init>(Lcom/android/server/pm/dex/DexManager;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/dex/DexManager$DexSearchResult;->access$000(Lcom/android/server/pm/dex/DexManager$DexSearchResult;)I
+HSPLcom/android/server/pm/dex/DexManager$DexSearchResult;->access$100(Lcom/android/server/pm/dex/DexManager$DexSearchResult;)Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;-><init>(Landroid/content/pm/ApplicationInfo;I)V
 HSPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;-><init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
-HPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;->access$200(Lcom/android/server/pm/dex/DexManager$PackageCodeLocations;)Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;->access$200(Lcom/android/server/pm/dex/DexManager$PackageCodeLocations;)Ljava/lang/String;
 HSPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;->mergeAppDataDirs(Ljava/lang/String;I)V
-HPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;->searchDex(Ljava/lang/String;I)I
+HSPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;->searchDex(Ljava/lang/String;I)I
 HSPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;->updateCodeLocation(Ljava/lang/String;[Ljava/lang/String;)V
 HSPLcom/android/server/pm/dex/DexManager;-><clinit>()V
 HSPLcom/android/server/pm/dex/DexManager;-><init>(Landroid/content/Context;Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageDexOptimizer;Lcom/android/server/pm/Installer;Ljava/lang/Object;)V
 HSPLcom/android/server/pm/dex/DexManager;->access$300(Ljava/util/Map;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/android/server/pm/dex/DexManager;->access$400()I
-HPLcom/android/server/pm/dex/DexManager;->access$500()I
+HSPLcom/android/server/pm/dex/DexManager;->access$400()I
+HSPLcom/android/server/pm/dex/DexManager;->access$500()I
 PLcom/android/server/pm/dex/DexManager;->access$600()I
 HPLcom/android/server/pm/dex/DexManager;->access$700()I
 HSPLcom/android/server/pm/dex/DexManager;->cachePackageCodeLocation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;I)V
 HSPLcom/android/server/pm/dex/DexManager;->cachePackageInfo(Landroid/content/pm/PackageInfo;I)V
 PLcom/android/server/pm/dex/DexManager;->dexoptSecondaryDex(Lcom/android/server/pm/dex/DexoptOptions;)Z
-HPLcom/android/server/pm/dex/DexManager;->getDexPackage(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;I)Lcom/android/server/pm/dex/DexManager$DexSearchResult;
-PLcom/android/server/pm/dex/DexManager;->getPackageUseInfoOrDefault(Ljava/lang/String;)Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;
-PLcom/android/server/pm/dex/DexManager;->isPackageSelectedToRunOob(Ljava/lang/String;)Z
+PLcom/android/server/pm/dex/DexManager;->getAllPackagesWithSecondaryDexFiles()Ljava/util/Set;
+HSPLcom/android/server/pm/dex/DexManager;->getDexPackage(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;I)Lcom/android/server/pm/dex/DexManager$DexSearchResult;
+PLcom/android/server/pm/dex/DexManager;->getDynamicCodeLogger()Lcom/android/server/pm/dex/DynamicCodeLogger;
+HSPLcom/android/server/pm/dex/DexManager;->getPackageUseInfoOrDefault(Ljava/lang/String;)Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;
+HSPLcom/android/server/pm/dex/DexManager;->isPackageSelectedToRunOob(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/dex/DexManager;->isPackageSelectedToRunOob(Ljava/util/Collection;)Z
 HSPLcom/android/server/pm/dex/DexManager;->isPackageSelectedToRunOobInternal(ZLjava/lang/String;Ljava/util/Collection;)Z
 HSPLcom/android/server/pm/dex/DexManager;->load(Ljava/util/Map;)V
 HSPLcom/android/server/pm/dex/DexManager;->loadInternal(Ljava/util/Map;)V
-HPLcom/android/server/pm/dex/DexManager;->notifyDexLoad(Landroid/content/pm/ApplicationInfo;Ljava/util/List;Ljava/util/List;Ljava/lang/String;I)V
-HPLcom/android/server/pm/dex/DexManager;->notifyDexLoadInternal(Landroid/content/pm/ApplicationInfo;Ljava/util/List;Ljava/util/List;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/dex/DexManager;->notifyDexLoad(Landroid/content/pm/ApplicationInfo;Ljava/util/List;Ljava/util/List;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/dex/DexManager;->notifyDexLoadInternal(Landroid/content/pm/ApplicationInfo;Ljava/util/List;Ljava/util/List;Ljava/lang/String;I)V
+PLcom/android/server/pm/dex/DexManager;->notifyPackageDataDestroyed(Ljava/lang/String;I)V
 PLcom/android/server/pm/dex/DexManager;->notifyPackageInstalled(Landroid/content/pm/PackageInfo;I)V
+PLcom/android/server/pm/dex/DexManager;->notifyPackageUpdated(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
 HSPLcom/android/server/pm/dex/DexManager;->putIfAbsent(Ljava/util/Map;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/pm/dex/DexManager;->reconcileSecondaryDexFiles(Ljava/lang/String;)V
-HPLcom/android/server/pm/dex/DexoptOptions;-><init>(Ljava/lang/String;II)V
-HPLcom/android/server/pm/dex/DexoptOptions;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/pm/dex/DexoptOptions;->getCompilationReason()I
-PLcom/android/server/pm/dex/DexoptOptions;->getCompilerFilter()Ljava/lang/String;
-PLcom/android/server/pm/dex/DexoptOptions;->getFlags()I
-HPLcom/android/server/pm/dex/DexoptOptions;->getPackageName()Ljava/lang/String;
-PLcom/android/server/pm/dex/DexoptOptions;->getSplitName()Ljava/lang/String;
-PLcom/android/server/pm/dex/DexoptOptions;->isBootComplete()Z
-PLcom/android/server/pm/dex/DexoptOptions;->isCheckForProfileUpdates()Z
-PLcom/android/server/pm/dex/DexoptOptions;->isDexoptAsSharedLibrary()Z
-PLcom/android/server/pm/dex/DexoptOptions;->isDexoptIdleBackgroundJob()Z
-PLcom/android/server/pm/dex/DexoptOptions;->isDexoptInstallWithDexMetadata()Z
+HPLcom/android/server/pm/dex/DexManager;->reconcileSecondaryDexFiles(Ljava/lang/String;)V
+PLcom/android/server/pm/dex/DexManager;->writePackageDexUsageNow()V
+HSPLcom/android/server/pm/dex/DexoptOptions;-><init>(Ljava/lang/String;II)V
+HSPLcom/android/server/pm/dex/DexoptOptions;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/dex/DexoptOptions;->getCompilationReason()I
+HSPLcom/android/server/pm/dex/DexoptOptions;->getCompilerFilter()Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexoptOptions;->getFlags()I
+HSPLcom/android/server/pm/dex/DexoptOptions;->getPackageName()Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexoptOptions;->getSplitName()Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexoptOptions;->isBootComplete()Z
+HSPLcom/android/server/pm/dex/DexoptOptions;->isCheckForProfileUpdates()Z
+HSPLcom/android/server/pm/dex/DexoptOptions;->isDexoptAsSharedLibrary()Z
+HSPLcom/android/server/pm/dex/DexoptOptions;->isDexoptIdleBackgroundJob()Z
+HSPLcom/android/server/pm/dex/DexoptOptions;->isDexoptInstallWithDexMetadata()Z
 HPLcom/android/server/pm/dex/DexoptOptions;->isDexoptOnlySecondaryDex()Z
 PLcom/android/server/pm/dex/DexoptOptions;->isDexoptOnlySharedDex()Z
-PLcom/android/server/pm/dex/DexoptOptions;->isDowngrade()Z
-HPLcom/android/server/pm/dex/DexoptOptions;->isForce()Z
-PLcom/android/server/pm/dex/DexoptUtils;-><clinit>()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;->encodeClassLoaderChain(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/server/pm/dex/DexoptUtils;->encodeClasspath(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/server/pm/dex/DexoptUtils;->encodeClasspath([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;->encodeSharedLibrary(Landroid/content/pm/SharedLibraryInfo;)Ljava/lang/String;
-HPLcom/android/server/pm/dex/DexoptUtils;->getClassLoaderContexts(Landroid/content/pm/parsing/AndroidPackage;Ljava/util/List;[Z)[Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexoptOptions;->isDowngrade()Z
+HSPLcom/android/server/pm/dex/DexoptOptions;->isForce()Z
+HSPLcom/android/server/pm/dex/DexoptUtils;-><clinit>()V
+HSPLcom/android/server/pm/dex/DexoptUtils;->encodeClassLoader(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexoptUtils;->encodeClassLoader(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexoptUtils;->encodeClassLoaderChain(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexoptUtils;->encodeClasspath(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexoptUtils;->encodeClasspath([Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexoptUtils;->encodeSharedLibraries(Ljava/util/List;)Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexoptUtils;->encodeSharedLibrary(Landroid/content/pm/SharedLibraryInfo;)Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexoptUtils;->getClassLoaderContexts(Landroid/content/pm/parsing/AndroidPackage;Ljava/util/List;[Z)[Ljava/lang/String;
 HPLcom/android/server/pm/dex/DexoptUtils;->getSplitRelativeCodePaths(Landroid/content/pm/parsing/AndroidPackage;)[Ljava/lang/String;
-HPLcom/android/server/pm/dex/DexoptUtils;->processContextForDexLoad(Ljava/util/List;Ljava/util/List;)[Ljava/lang/String;
+HSPLcom/android/server/pm/dex/DexoptUtils;->processContextForDexLoad(Ljava/util/List;Ljava/util/List;)[Ljava/lang/String;
 HSPLcom/android/server/pm/dex/DynamicCodeLogger;-><init>(Landroid/content/pm/IPackageManager;Lcom/android/server/pm/Installer;)V
 HSPLcom/android/server/pm/dex/DynamicCodeLogger;-><init>(Landroid/content/pm/IPackageManager;Lcom/android/server/pm/Installer;Lcom/android/server/pm/dex/PackageDynamicCodeLoading;)V
-PLcom/android/server/pm/dex/DynamicCodeLogger;->fileIsUnder(Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/server/pm/dex/DynamicCodeLogger;->logDynamicCodeLoading(Ljava/lang/String;)V
+HPLcom/android/server/pm/dex/DynamicCodeLogger;->fileIsUnder(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/pm/dex/DynamicCodeLogger;->getAllPackagesWithDynamicCodeLoading()Ljava/util/Set;
+PLcom/android/server/pm/dex/DynamicCodeLogger;->getPackageDynamicCodeInfo(Ljava/lang/String;)Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;
+HPLcom/android/server/pm/dex/DynamicCodeLogger;->logDynamicCodeLoading(Ljava/lang/String;)V
 HSPLcom/android/server/pm/dex/DynamicCodeLogger;->readAndSync(Ljava/util/Map;)V
 PLcom/android/server/pm/dex/DynamicCodeLogger;->recordDex(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/pm/dex/DynamicCodeLogger;->recordNative(ILjava/lang/String;)V
-HPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)V
-PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$1;)V
+HPLcom/android/server/pm/dex/DynamicCodeLogger;->recordNative(ILjava/lang/String;)V
+PLcom/android/server/pm/dex/DynamicCodeLogger;->removePackage(Ljava/lang/String;)V
+PLcom/android/server/pm/dex/DynamicCodeLogger;->removeUserPackage(Ljava/lang/String;I)V
+HPLcom/android/server/pm/dex/DynamicCodeLogger;->writeDclEvent(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/pm/dex/DynamicCodeLogger;->writeNow()V
+HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)V
+HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$1;)V
 HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;-><init>(ZILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->access$200(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Ljava/util/Set;
 HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->access$300(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)I
-PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->access$400(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Z
+HPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->access$400(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Z
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->access$600(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Z
 HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->access$700(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Ljava/util/Set;
 PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->getClassLoaderContext()Ljava/lang/String;
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->getLoaderIsas()Ljava/util/Set;
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->getOwnerUserId()I
 PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->isUnknownClassLoaderContext()Z
 PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->isUsedByOtherApps()Z
 PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->isVariableClassLoaderContext()Z
-PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->merge(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Z
+HPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->merge(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Z
 HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>()V
-HPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)V
-PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$1;)V
-PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->access$000(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)V
+HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$1;)V
+HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->access$000(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->access$100(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)Ljava/util/Map;
 HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->access$500(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)Ljava/util/Map;
 HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->access$800(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)Z
+PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->clearCodePathUsedByOtherApps()Z
 PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->getDexUseInfoMap()Ljava/util/Map;
 PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->getLoadingPackages(Ljava/lang/String;)Ljava/util/Set;
 HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->isAnyCodePathUsedByOtherApps()Z
-PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->isUsedByOtherApps(Ljava/lang/String;)Z
-PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->mergeCodePathUsedByOtherApps(Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->isUsedByOtherApps(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->mergeCodePathUsedByOtherApps(Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/dex/PackageDexUsage;-><init>()V
 PLcom/android/server/pm/dex/PackageDexUsage;->clearUsedByOtherApps(Ljava/lang/String;)Z
-PLcom/android/server/pm/dex/PackageDexUsage;->clonePackageUseInfoMap()Ljava/util/Map;
-PLcom/android/server/pm/dex/PackageDexUsage;->getAllPackagesWithSecondaryDexFiles()Ljava/util/Set;
-PLcom/android/server/pm/dex/PackageDexUsage;->getPackageUseInfo(Ljava/lang/String;)Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;
+HPLcom/android/server/pm/dex/PackageDexUsage;->clonePackageUseInfoMap()Ljava/util/Map;
+HPLcom/android/server/pm/dex/PackageDexUsage;->getAllPackagesWithSecondaryDexFiles()Ljava/util/Set;
+HSPLcom/android/server/pm/dex/PackageDexUsage;->getPackageUseInfo(Ljava/lang/String;)Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;
 HSPLcom/android/server/pm/dex/PackageDexUsage;->isSupportedVersion(I)Z
-PLcom/android/server/pm/dex/PackageDexUsage;->maybeAddLoadingPackage(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)Z
+HPLcom/android/server/pm/dex/PackageDexUsage;->maybeAddLoadingPackage(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)Z
 HSPLcom/android/server/pm/dex/PackageDexUsage;->maybeReadClassLoaderContext(Ljava/io/BufferedReader;I)Ljava/lang/String;
 HSPLcom/android/server/pm/dex/PackageDexUsage;->maybeReadLoadingPackages(Ljava/io/BufferedReader;I)Ljava/util/Set;
 PLcom/android/server/pm/dex/PackageDexUsage;->maybeWriteAsync()V
@@ -16048,68 +26275,101 @@
 HSPLcom/android/server/pm/dex/PackageDexUsage;->readBoolean(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/dex/PackageDexUsage;->readInternal(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/dex/PackageDexUsage;->readInternal(Ljava/lang/Void;)V
-PLcom/android/server/pm/dex/PackageDexUsage;->record(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/server/pm/dex/PackageDexUsage;->record(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/pm/dex/PackageDexUsage;->removeDexFile(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Ljava/lang/String;I)Z
 PLcom/android/server/pm/dex/PackageDexUsage;->removeDexFile(Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/pm/dex/PackageDexUsage;->removePackage(Ljava/lang/String;)Z
+PLcom/android/server/pm/dex/PackageDexUsage;->removeUserPackage(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/dex/PackageDexUsage;->syncData(Ljava/util/Map;Ljava/util/Map;)V
 HPLcom/android/server/pm/dex/PackageDexUsage;->write(Ljava/io/Writer;)V
+PLcom/android/server/pm/dex/PackageDexUsage;->writeBoolean(Z)Ljava/lang/String;
 PLcom/android/server/pm/dex/PackageDexUsage;->writeInternal(Ljava/lang/Object;)V
-PLcom/android/server/pm/dex/PackageDexUsage;->writeInternal(Ljava/lang/Void;)V
+HPLcom/android/server/pm/dex/PackageDexUsage;->writeInternal(Ljava/lang/Void;)V
+PLcom/android/server/pm/dex/PackageDexUsage;->writeNow()V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;-><init>(CI[Ljava/lang/String;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;-><init>(CI[Ljava/lang/String;Lcom/android/server/pm/dex/PackageDynamicCodeLoading$1;)V
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;-><init>(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;)V
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;-><init>(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;Lcom/android/server/pm/dex/PackageDynamicCodeLoading$1;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;-><init>()V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;-><init>(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$1;)V
-PLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;-><init>(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;)V
-PLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->access$100(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;Ljava/lang/String;CILjava/lang/String;)Z
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;-><init>(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;)V
+PLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;-><init>(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;Lcom/android/server/pm/dex/PackageDynamicCodeLoading$1;)V
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->access$100(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;Ljava/lang/String;CILjava/lang/String;)Z
+PLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->access$400(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->access$500(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;Ljava/util/Map;Ljava/util/Set;)V
-PLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->add(Ljava/lang/String;CILjava/lang/String;)Z
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->add(Ljava/lang/String;CILjava/lang/String;)Z
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->removeFile(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->syncData(Ljava/util/Map;Ljava/util/Set;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;-><clinit>()V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;-><init>()V
-PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->escape(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->escape(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->getAllPackagesWithDynamicCodeLoading()Ljava/util/Set;
 PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->getPackageDynamicCodeInfo(Ljava/lang/String;)Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->isValidFileType(I)Z
-PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->maybeWriteAsync()V
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->maybeWriteAsync()V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->read()V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->read(Ljava/io/InputStream;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->read(Ljava/io/InputStream;Ljava/util/Map;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->readFileInfo(Ljava/lang/String;Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->readInternal(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->readInternal(Ljava/lang/Void;)V
-PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->record(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;)Z
-PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->removeFile(Ljava/lang/String;Ljava/lang/String;I)Z
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->record(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;)Z
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->removeFile(Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->removePackage(Ljava/lang/String;)Z
+PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->removeUserPackage(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->syncData(Ljava/util/Map;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->unescape(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->write(Ljava/io/OutputStream;)V
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->write(Ljava/io/OutputStream;)V
 HPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->write(Ljava/io/OutputStream;Ljava/util/Map;)V
 PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->writeInternal(Ljava/lang/Object;)V
 PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->writeInternal(Ljava/lang/Void;)V
+PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->writeNow()V
 HSPLcom/android/server/pm/dex/ViewCompiler;-><init>(Ljava/lang/Object;Lcom/android/server/pm/Installer;)V
-PLcom/android/server/pm/permission/-$$Lambda$DefaultPermissionGrantPolicy$SHfHTWKpfBf_vZtWArm-FlNBI8k;-><clinit>()V
-PLcom/android/server/pm/permission/-$$Lambda$DefaultPermissionGrantPolicy$SHfHTWKpfBf_vZtWArm-FlNBI8k;-><init>()V
+HSPLcom/android/server/pm/permission/-$$Lambda$DefaultPermissionGrantPolicy$SHfHTWKpfBf_vZtWArm-FlNBI8k;-><clinit>()V
+HSPLcom/android/server/pm/permission/-$$Lambda$DefaultPermissionGrantPolicy$SHfHTWKpfBf_vZtWArm-FlNBI8k;-><init>()V
+PLcom/android/server/pm/permission/-$$Lambda$OneTimePermissionUserManager$PackageInactivityListener$6-ufctMfTfrbd3URDMlB0Ywd8Ik;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;)V
+PLcom/android/server/pm/permission/-$$Lambda$OneTimePermissionUserManager$PackageInactivityListener$6-ufctMfTfrbd3URDMlB0Ywd8Ik;->onUidImportance(II)V
+PLcom/android/server/pm/permission/-$$Lambda$OneTimePermissionUserManager$PackageInactivityListener$SVoloDDAPWRycmaRhugBlXuSVeI;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;)V
+PLcom/android/server/pm/permission/-$$Lambda$OneTimePermissionUserManager$PackageInactivityListener$SVoloDDAPWRycmaRhugBlXuSVeI;->onUidImportance(II)V
+PLcom/android/server/pm/permission/-$$Lambda$OneTimePermissionUserManager$PackageInactivityListener$jL3jeghSTeL6RfIu1pUGSzWgTuc;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;)V
+PLcom/android/server/pm/permission/-$$Lambda$OneTimePermissionUserManager$PackageInactivityListener$jL3jeghSTeL6RfIu1pUGSzWgTuc;->run()V
+PLcom/android/server/pm/permission/-$$Lambda$OneTimePermissionUserManager$PackageInactivityListener$lKEtuzRRYU8MegOihXQiXrZ0ZaM;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;)V
+HPLcom/android/server/pm/permission/-$$Lambda$OneTimePermissionUserManager$PackageInactivityListener$lKEtuzRRYU8MegOihXQiXrZ0ZaM;->onUidImportance(II)V
+PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$1$7A2ffMA57G4PvFD5RbG2mRh2Q_8;-><init>(II)V
+PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$1$7A2ffMA57G4PvFD5RbG2mRh2Q_8;->run()V
 PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$5wIJaBo3ATYcr96ofI23sjuUqoA;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/os/UserHandle;)V
 PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$5wIJaBo3ATYcr96ofI23sjuUqoA;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$BEPoV9HmbUN2-ZgCcIqC6xfzvew;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;[Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$BEPoV9HmbUN2-ZgCcIqC6xfzvew;->runOrThrow()V
-PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$JcWw5txStfnrnbvcFd2durv6YOo;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;[Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$E0rM1FNIqzKUZzqphmkzeY3ZdTk;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;[Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$E0rM1FNIqzKUZzqphmkzeY3ZdTk;->runOrThrow()V
+HPLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$JcWw5txStfnrnbvcFd2durv6YOo;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;[Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$JcWw5txStfnrnbvcFd2durv6YOo;->runOrThrow()V
-PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$NPd9St1HBvGAtg1uhMV2Upfww4g;-><clinit>()V
-PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$NPd9St1HBvGAtg1uhMV2Upfww4g;-><init>()V
-HPLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$NPd9St1HBvGAtg1uhMV2Upfww4g;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$T4uCZ9__oEXYpzLBYEW1T_BN3SU;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;[Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$NPd9St1HBvGAtg1uhMV2Upfww4g;-><clinit>()V
+HSPLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$NPd9St1HBvGAtg1uhMV2Upfww4g;-><init>()V
+HSPLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$NPd9St1HBvGAtg1uhMV2Upfww4g;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$QU_UFF-9J77Mq118FLJUiLh4ARI;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;Lcom/android/server/pm/permission/BasePermission;ILcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
+HPLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$QU_UFF-9J77Mq118FLJUiLh4ARI;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$T4uCZ9__oEXYpzLBYEW1T_BN3SU;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;[Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$T4uCZ9__oEXYpzLBYEW1T_BN3SU;->runOrThrow()V
+PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$aQWnOfCuKK-rSxzDPI_dUOtzv8I;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;[Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$aQWnOfCuKK-rSxzDPI_dUOtzv8I;->runOrThrow()V
 HSPLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$g9Bo5gFpLYyPOsp3K8Aik5xseDI;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/content/pm/parsing/AndroidPackage;ZLjava/lang/String;Ljava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
 HSPLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$g9Bo5gFpLYyPOsp3K8Aik5xseDI;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$igfYI7thImnYrDxs3qWtqs2SCRk;-><init>(II)V
+PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$igfYI7thImnYrDxs3qWtqs2SCRk;->run()V
+PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$oG7YD8MVgcqcPbx_HXQ04PEUOXM;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$oG7YD8MVgcqcPbx_HXQ04PEUOXM;->runOrThrow()V
 PLcom/android/server/pm/permission/-$$Lambda$oynlBn0BbcU0KODvfUDDUHb5LKY;-><init>(Ljava/util/concurrent/CompletableFuture;)V
 PLcom/android/server/pm/permission/-$$Lambda$oynlBn0BbcU0KODvfUDDUHb5LKY;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/permission/BasePermission;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/BasePermission;->addToTree(ILandroid/content/pm/PermissionInfo;Lcom/android/server/pm/permission/BasePermission;)Z
 PLcom/android/server/pm/permission/BasePermission;->comparePermissionInfos(Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;Landroid/content/pm/PermissionInfo;)Z
-PLcom/android/server/pm/permission/BasePermission;->compareStrings(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z
+HPLcom/android/server/pm/permission/BasePermission;->compareStrings(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z
 HSPLcom/android/server/pm/permission/BasePermission;->computeGids(I)[I
 HSPLcom/android/server/pm/permission/BasePermission;->createOrUpdate(Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/permission/BasePermission;Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;Landroid/content/pm/parsing/AndroidPackage;Ljava/util/Collection;Z)Lcom/android/server/pm/permission/BasePermission;
 HPLcom/android/server/pm/permission/BasePermission;->dumpPermissionsLPr(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/util/Set;ZZLcom/android/server/pm/DumpState;)Z
-PLcom/android/server/pm/permission/BasePermission;->enforceDeclaredUsedAndRuntimeOrDevelopment(Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/PackageSetting;)V
+HSPLcom/android/server/pm/permission/BasePermission;->enforceDeclaredUsedAndRuntimeOrDevelopment(Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/PackageSetting;)V
 PLcom/android/server/pm/permission/BasePermission;->enforcePermissionTree(Ljava/util/Collection;Ljava/lang/String;I)Lcom/android/server/pm/permission/BasePermission;
 HSPLcom/android/server/pm/permission/BasePermission;->findPermissionTree(Ljava/util/Collection;Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
 HSPLcom/android/server/pm/permission/BasePermission;->generatePermissionInfo(II)Landroid/content/pm/PermissionInfo;
@@ -16120,21 +26380,25 @@
 HSPLcom/android/server/pm/permission/BasePermission;->getSourcePackageSetting()Lcom/android/server/pm/PackageSettingBase;
 HSPLcom/android/server/pm/permission/BasePermission;->isAppOp()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isAppPredictor()Z
+HSPLcom/android/server/pm/permission/BasePermission;->isCompanion()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isConfigurator()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isDevelopment()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isDocumenter()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isDynamic()Z
-PLcom/android/server/pm/permission/BasePermission;->isHardOrSoftRestricted()Z
+HSPLcom/android/server/pm/permission/BasePermission;->isHardOrSoftRestricted()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isHardRestricted()Z
-PLcom/android/server/pm/permission/BasePermission;->isImmutablyRestricted()Z
+HSPLcom/android/server/pm/permission/BasePermission;->isImmutablyRestricted()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isIncidentReportApprover()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isInstaller()Z
+PLcom/android/server/pm/permission/BasePermission;->isInstant()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isNormal()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isOEM()Z
-HPLcom/android/server/pm/permission/BasePermission;->isPermission(Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;)Z
+HSPLcom/android/server/pm/permission/BasePermission;->isPermission(Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;)Z
 HSPLcom/android/server/pm/permission/BasePermission;->isPre23()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isPreInstalled()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isPrivileged()Z
+PLcom/android/server/pm/permission/BasePermission;->isRemoved()Z
+HSPLcom/android/server/pm/permission/BasePermission;->isRetailDemo()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isRuntime()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isRuntimeOnly()Z
 HSPLcom/android/server/pm/permission/BasePermission;->isSetup()Z
@@ -16148,7 +26412,7 @@
 HSPLcom/android/server/pm/permission/BasePermission;->readInt(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Ljava/lang/String;I)I
 HSPLcom/android/server/pm/permission/BasePermission;->readLPw(Ljava/util/Map;Lorg/xmlpull/v1/XmlPullParser;)Z
 HSPLcom/android/server/pm/permission/BasePermission;->setGids([IZ)V
-PLcom/android/server/pm/permission/BasePermission;->setPermission(Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;)V
+HSPLcom/android/server/pm/permission/BasePermission;->setPermission(Landroid/content/pm/parsing/ComponentParseUtils$ParsedPermission;)V
 HSPLcom/android/server/pm/permission/BasePermission;->setSourcePackageSetting(Lcom/android/server/pm/PackageSettingBase;)V
 HSPLcom/android/server/pm/permission/BasePermission;->updateDynamicPermission(Ljava/util/Collection;)V
 HSPLcom/android/server/pm/permission/BasePermission;->writeLPr(Lorg/xmlpull/v1/XmlSerializer;)V
@@ -16162,47 +26426,55 @@
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->access$102(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;Landroid/util/ArrayMap;)Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->access$200(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;)Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->doesPackageSupportRuntimePermissions(Landroid/content/pm/PackageInfo;)Z
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getBackgroundPermission(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getBackgroundPermission(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultPermissionFiles()[Ljava/io/File;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultProviderAuthorityPackage(Ljava/lang/String;I)Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerActivityPackage(Landroid/content/Intent;I)Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerActivityPackage(Ljava/lang/String;I)Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerActivityPackageForCategory(Ljava/lang/String;I)Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerServicePackage(Landroid/content/Intent;I)Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerServicePackage(Ljava/lang/String;I)Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getHeadlessSyncAdapterPackages([Ljava/lang/String;I)Ljava/util/ArrayList;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getKnownPackages(II)[Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getPackageInfo(Ljava/lang/String;)Landroid/content/pm/PackageInfo;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultProviderAuthorityPackage(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerActivityPackage(Landroid/content/Intent;I)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerActivityPackage(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerActivityPackageForCategory(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerServicePackage(Landroid/content/Intent;I)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerServicePackage(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getHeadlessSyncAdapterPackages([Ljava/lang/String;I)Ljava/util/ArrayList;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getKnownPackages(II)[Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getPackageInfo(Ljava/lang/String;)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getSystemPackageInfo(Ljava/lang/String;)Landroid/content/pm/PackageInfo;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionExceptions(I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissions(I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSystemDialerApp(Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSystemSmsApp(Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionExceptions(I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissions(I)V
+PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToActiveLuiApp(Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultBrowser(Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSimCallManager(Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSystemDialerApp(Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSystemSmsApp(Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSystemUseOpenWifiApp(Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultUseOpenWifiApp(Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToEnabledCarrierApps([Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToEnabledImsServices([Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToEnabledTelephonyDataServices([Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultSystemHandlerPermissions(I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionToEachSystemPackage(Ljava/util/ArrayList;I[Ljava/util/Set;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToPackage(Landroid/content/pm/PackageInfo;IZZZ[Ljava/util/Set;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToPackage(Ljava/lang/String;IZZ[Ljava/util/Set;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSysComponentsAndPrivApps(I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSystemPackage(Ljava/lang/String;IZ[Ljava/util/Set;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSystemPackage(Ljava/lang/String;I[Ljava/util/Set;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissions(Landroid/content/pm/PackageInfo;Ljava/util/Set;ZI)V
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissions(Landroid/content/pm/PackageInfo;Ljava/util/Set;ZZZI)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissionsForSystemPackage(ILandroid/content/pm/PackageInfo;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantSystemFixedPermissionsToSystemPackage(Ljava/lang/String;I[Ljava/util/Set;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->isFixedOrUserSet(I)Z
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->isPermissionDangerous(Ljava/lang/String;)Z
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->isPermissionRestricted(Ljava/lang/String;)Z
+HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToEnabledTelephonyDataServices([Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultSystemHandlerPermissions(I)V
+PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantIgnoringSystemPackage(Ljava/lang/String;I[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionToEachSystemPackage(Ljava/util/ArrayList;I[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToPackage(Landroid/content/pm/PackageInfo;IZZZ[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToPackage(Ljava/lang/String;IZZ[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSysComponentsAndPrivApps(I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSystemPackage(Ljava/lang/String;IZ[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSystemPackage(Ljava/lang/String;I[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissions(Landroid/content/pm/PackageInfo;Ljava/util/Set;ZI)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissions(Landroid/content/pm/PackageInfo;Ljava/util/Set;ZZZI)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissionsForSystemPackage(ILandroid/content/pm/PackageInfo;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantSystemFixedPermissionsToSystemPackage(Ljava/lang/String;I[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->isFixedOrUserSet(I)Z
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->isPermissionDangerous(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->isPermissionRestricted(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->isSysComponentOrPersistentPlatformSignedPrivApp(Landroid/content/pm/PackageInfo;)Z
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->isSystemPackage(Landroid/content/pm/PackageInfo;)Z
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->isSystemPackage(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->isSystemPackage(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->parse(Lorg/xmlpull/v1/XmlPullParser;Ljava/util/Map;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->parseExceptions(Lorg/xmlpull/v1/XmlPullParser;Ljava/util/Map;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->parsePermission(Lorg/xmlpull/v1/XmlPullParser;Ljava/util/List;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->readDefaultPermissionExceptionsLocked()Landroid/util/ArrayMap;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->revokeDefaultPermissionsFromDisabledTelephonyDataServices([Ljava/lang/String;I)V
+HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->revokeDefaultPermissionsFromDisabledTelephonyDataServices([Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->revokeDefaultPermissionsFromLuiApps([Ljava/lang/String;I)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->scheduleReadDefaultPermissionExceptions()V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->setDialerAppPackagesProvider(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PackagesProvider;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->setLocationExtraPackagesProvider(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PackagesProvider;)V
@@ -16213,15 +26485,46 @@
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->setUseOpenWifiAppPackagesProvider(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PackagesProvider;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->setVoiceInteractionPackagesProvider(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PackagesProvider;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->wereDefaultPermissionsGrantedSinceBoot(I)Z
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager;ILjava/lang/String;JII)V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager;ILjava/lang/String;JIILcom/android/server/pm/permission/OneTimePermissionUserManager$1;)V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->cancelAlarmLocked()V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->lambda$new$0$OneTimePermissionUserManager$PackageInactivityListener(II)V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->lambda$new$1$OneTimePermissionUserManager$PackageInactivityListener(II)V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->lambda$new$2$OneTimePermissionUserManager$PackageInactivityListener(II)V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->lambda$onPackageInactiveLocked$3$OneTimePermissionUserManager$PackageInactivityListener()V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->onAlarm()V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->onImportanceChanged(II)V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->onPackageInactiveLocked()V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->setAlarmLocked()V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager;-><clinit>()V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager;->access$200(Lcom/android/server/pm/permission/OneTimePermissionUserManager;)Landroid/app/ActivityManager;
+PLcom/android/server/pm/permission/OneTimePermissionUserManager;->access$300()Ljava/lang/String;
+PLcom/android/server/pm/permission/OneTimePermissionUserManager;->access$400(Lcom/android/server/pm/permission/OneTimePermissionUserManager;)Landroid/content/Context;
+PLcom/android/server/pm/permission/OneTimePermissionUserManager;->access$500(Lcom/android/server/pm/permission/OneTimePermissionUserManager;)Landroid/app/AlarmManager;
+PLcom/android/server/pm/permission/OneTimePermissionUserManager;->access$600(Lcom/android/server/pm/permission/OneTimePermissionUserManager;)Ljava/lang/Object;
+PLcom/android/server/pm/permission/OneTimePermissionUserManager;->access$700(Lcom/android/server/pm/permission/OneTimePermissionUserManager;)Landroid/util/SparseArray;
+PLcom/android/server/pm/permission/OneTimePermissionUserManager;->access$800(Lcom/android/server/pm/permission/OneTimePermissionUserManager;)Landroid/permission/PermissionControllerManager;
+PLcom/android/server/pm/permission/OneTimePermissionUserManager;->startPackageOneTimeSession(Ljava/lang/String;JII)V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager;->stopPackageOneTimeSession(Ljava/lang/String;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$1;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;)V
-PLcom/android/server/pm/permission/PermissionManagerService$1;->onPermissionGranted(II)V
+PLcom/android/server/pm/permission/PermissionManagerService$1;->lambda$onPermissionRevoked$1(II)V
+PLcom/android/server/pm/permission/PermissionManagerService$1;->onInstallPermissionGranted()V
+PLcom/android/server/pm/permission/PermissionManagerService$1;->onInstallPermissionRevoked()V
+HSPLcom/android/server/pm/permission/PermissionManagerService$1;->onPermissionGranted(II)V
+PLcom/android/server/pm/permission/PermissionManagerService$1;->onPermissionRevoked(II)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$1;->onPermissionUpdated([IZ)V
-HPLcom/android/server/pm/permission/PermissionManagerService$1;->onPermissionUpdatedNotifyListener([IZI)V
+HSPLcom/android/server/pm/permission/PermissionManagerService$1;->onPermissionUpdatedNotifyListener([IZI)V
+PLcom/android/server/pm/permission/PermissionManagerService$2;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/util/ArraySet;Landroid/util/IntArray;Landroid/util/IntArray;[Z)V
+PLcom/android/server/pm/permission/PermissionManagerService$2;->onPermissionGranted(II)V
+PLcom/android/server/pm/permission/PermissionManagerService$2;->onPermissionRevoked(II)V
+PLcom/android/server/pm/permission/PermissionManagerService$2;->onPermissionUpdated([IZ)V
+PLcom/android/server/pm/permission/PermissionManagerService$2;->onPermissionUpdatedNotifyListener([IZI)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$OnPermissionChangeListeners;-><init>(Landroid/os/Looper;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$OnPermissionChangeListeners;->addListenerLocked(Landroid/permission/IOnPermissionsChangeListener;)V
-HPLcom/android/server/pm/permission/PermissionManagerService$OnPermissionChangeListeners;->handleMessage(Landroid/os/Message;)V
-HPLcom/android/server/pm/permission/PermissionManagerService$OnPermissionChangeListeners;->handleOnPermissionsChanged(I)V
-HPLcom/android/server/pm/permission/PermissionManagerService$OnPermissionChangeListeners;->onPermissionsChanged(I)V
+HSPLcom/android/server/pm/permission/PermissionManagerService$OnPermissionChangeListeners;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService$OnPermissionChangeListeners;->handleOnPermissionsChanged(I)V
+HSPLcom/android/server/pm/permission/PermissionManagerService$OnPermissionChangeListeners;->onPermissionsChanged(I)V
 PLcom/android/server/pm/permission/PermissionManagerService$OnPermissionChangeListeners;->removeListenerLocked(Landroid/permission/IOnPermissionsChangeListener;)V
 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$1;)V
@@ -16229,20 +26532,30 @@
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->addAllPermissions(Landroid/content/pm/parsing/AndroidPackage;Z)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->addOnRuntimePermissionStateChangedListener(Landroid/permission/PermissionManagerInternal$OnRuntimePermissionStateChangedListener;)V
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->backupRuntimePermissions(Landroid/os/UserHandle;)[B
+HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->enforceCrossUserOrProfilePermission(IIZZLjava/lang/String;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->enforceCrossUserPermission(IIZZLjava/lang/String;)V
-PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->enforceCrossUserPermission(IIZZZLjava/lang/String;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->enforceCrossUserPermission(IIZZZLjava/lang/String;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getAllPermissionWithProtection(I)Ljava/util/ArrayList;
-HPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getDefaultBrowser(I)Ljava/lang/String;
+PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getAppOpPermissionPackages(Ljava/lang/String;I)[Ljava/lang/String;
+HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getDefaultBrowser(I)Ljava/lang/String;
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getDefaultDialer(I)Ljava/lang/String;
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getDefaultHome(I)Ljava/lang/String;
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getPermissionSettings()Lcom/android/server/pm/permission/PermissionSettings;
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getPermissionTEMP(Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
+PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->grantDefaultPermissionsToDefaultSimCallManager(Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->grantDefaultPermissionsToDefaultUseOpenWifiApp(Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->grantRequestedRuntimePermissions(Landroid/content/pm/parsing/AndroidPackage;[I[Ljava/lang/String;I)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->isPermissionsReviewRequired(Landroid/content/pm/parsing/AndroidPackage;I)Z
-PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->removeAllPermissions(Landroid/content/pm/parsing/AndroidPackage;Z)V
+PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->onNewUserCreated(I)V
+HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->removeAllPermissions(Landroid/content/pm/parsing/AndroidPackage;Z)V
+PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->resetRuntimePermissions(Landroid/content/pm/parsing/AndroidPackage;I)V
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->restoreDelayedRuntimePermissions(Ljava/lang/String;Landroid/os/UserHandle;)V
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->revokeRuntimePermissionsIfGroupChanged(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;Ljava/util/ArrayList;)V
+PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setCheckPermissionDelegate(Landroid/permission/PermissionManagerInternal$CheckPermissionDelegate;)V
+PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setDefaultBrowser(Ljava/lang/String;ZZI)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setDefaultBrowserProvider(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultBrowserProvider;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setDefaultDialerProvider(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultDialerProvider;)V
+PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setDefaultHome(Ljava/lang/String;ILjava/util/function/Consumer;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setDefaultHomeProvider(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultHomeProvider;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setDialerAppPackagesProvider(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PackagesProvider;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setLocationExtraPackagesProvider(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PackagesProvider;)V
@@ -16253,29 +26566,50 @@
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setUseOpenWifiAppPackagesProvider(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PackagesProvider;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setVoiceInteractionPackagesProvider(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PackagesProvider;)V
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setWhitelistedRestrictedPermissions(Landroid/content/pm/parsing/AndroidPackage;[ILjava/util/List;II)V
+PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setWhitelistedRestrictedPermissions(Ljava/lang/String;Ljava/util/List;II)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->systemReady()V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->updateAllPermissions(Ljava/lang/String;Z)V
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->updatePermissions(Ljava/lang/String;Landroid/content/pm/parsing/AndroidPackage;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->wereDefaultPermissionsGrantedSinceBoot(I)Z
 HSPLcom/android/server/pm/permission/PermissionManagerService;-><clinit>()V
 HSPLcom/android/server/pm/permission/PermissionManagerService;-><init>(Landroid/content/Context;Ljava/lang/Object;)V
-PLcom/android/server/pm/permission/PermissionManagerService;->access$100(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionManagerService$OnPermissionChangeListeners;
-PLcom/android/server/pm/permission/PermissionManagerService;->access$1000(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/content/pm/parsing/AndroidPackage;Z)V
+PLcom/android/server/pm/permission/PermissionManagerService;->access$000(Lcom/android/server/pm/permission/PermissionManagerService;)Landroid/os/Handler;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->access$100(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionManagerService$OnPermissionChangeListeners;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->access$1000(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/content/pm/parsing/AndroidPackage;Z)V
+PLcom/android/server/pm/permission/PermissionManagerService;->access$1100(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/content/pm/parsing/AndroidPackage;[I[Ljava/lang/String;ILcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
 PLcom/android/server/pm/permission/PermissionManagerService;->access$1200(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/content/pm/parsing/AndroidPackage;ILjava/util/List;IILcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
+PLcom/android/server/pm/permission/PermissionManagerService;->access$1300(Lcom/android/server/pm/permission/PermissionManagerService;Ljava/lang/String;Ljava/util/List;II)Z
 PLcom/android/server/pm/permission/PermissionManagerService;->access$1400(Lcom/android/server/pm/permission/PermissionManagerService;Ljava/lang/String;Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$1500(Lcom/android/server/pm/permission/PermissionManagerService;Ljava/lang/String;ZLcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
+PLcom/android/server/pm/permission/PermissionManagerService;->access$1600(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/content/pm/parsing/AndroidPackage;I)V
+PLcom/android/server/pm/permission/PermissionManagerService;->access$1700(Lcom/android/server/pm/permission/PermissionManagerService;Ljava/lang/String;I)[Ljava/lang/String;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$1800(Lcom/android/server/pm/permission/PermissionManagerService;IIZZZLjava/lang/String;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->access$1900(Lcom/android/server/pm/permission/PermissionManagerService;IIZZLjava/lang/String;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$200(Lcom/android/server/pm/permission/PermissionManagerService;)Landroid/content/pm/PackageManagerInternal;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$2000(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionSettings;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->access$2100(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionSettings;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$2100(Lcom/android/server/pm/permission/PermissionManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->access$2200(Lcom/android/server/pm/permission/PermissionManagerService;)Ljava/lang/Object;
+PLcom/android/server/pm/permission/PermissionManagerService;->access$2300(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/os/UserHandle;)[B
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$2500(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/permission/PermissionManagerInternal$OnRuntimePermissionStateChangedListener;)V
-PLcom/android/server/pm/permission/PermissionManagerService;->access$2800(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultBrowserProvider;
+PLcom/android/server/pm/permission/PermissionManagerService;->access$2500(Lcom/android/server/pm/permission/PermissionManagerService;Ljava/lang/String;Landroid/os/UserHandle;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->access$2600(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/permission/PermissionManagerInternal$OnRuntimePermissionStateChangedListener;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->access$2800(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultBrowserProvider;
+PLcom/android/server/pm/permission/PermissionManagerService;->access$2802(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/permission/PermissionManagerInternal$CheckPermissionDelegate;)Landroid/permission/PermissionManagerInternal$CheckPermissionDelegate;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$2802(Lcom/android/server/pm/permission/PermissionManagerService;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultBrowserProvider;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultBrowserProvider;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->access$2900(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultBrowserProvider;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->access$2902(Lcom/android/server/pm/permission/PermissionManagerService;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultBrowserProvider;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultBrowserProvider;
 PLcom/android/server/pm/permission/PermissionManagerService;->access$3000(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultDialerProvider;
+PLcom/android/server/pm/permission/PermissionManagerService;->access$3000(Lcom/android/server/pm/permission/PermissionManagerService;Ljava/lang/String;ZZI)Z
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$3002(Lcom/android/server/pm/permission/PermissionManagerService;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultDialerProvider;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultDialerProvider;
+PLcom/android/server/pm/permission/PermissionManagerService;->access$3100(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultDialerProvider;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$3100(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultHomeProvider;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->access$3102(Lcom/android/server/pm/permission/PermissionManagerService;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultDialerProvider;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultDialerProvider;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$3102(Lcom/android/server/pm/permission/PermissionManagerService;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultHomeProvider;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultHomeProvider;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$3200(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;
+HPLcom/android/server/pm/permission/PermissionManagerService;->access$3200(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultHomeProvider;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->access$3202(Lcom/android/server/pm/permission/PermissionManagerService;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultHomeProvider;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$DefaultHomeProvider;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->access$3300(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$400(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$500(Lcom/android/server/pm/permission/PermissionManagerService;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->access$600(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/content/pm/parsing/AndroidPackage;I)Z
@@ -16287,11 +26621,12 @@
 HSPLcom/android/server/pm/permission/PermissionManagerService;->addOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->addOnRuntimePermissionStateChangedListener(Landroid/permission/PermissionManagerInternal$OnRuntimePermissionStateChangedListener;)V
 HPLcom/android/server/pm/permission/PermissionManagerService;->addPermission(Landroid/content/pm/PermissionInfo;Z)Z
-HPLcom/android/server/pm/permission/PermissionManagerService;->addWhitelistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;II)Z
+HSPLcom/android/server/pm/permission/PermissionManagerService;->addWhitelistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;II)Z
 HSPLcom/android/server/pm/permission/PermissionManagerService;->adjustPermissionProtectionFlagsLocked(ILjava/lang/String;I)I
 PLcom/android/server/pm/permission/PermissionManagerService;->backupRuntimePermissions(Landroid/os/UserHandle;)[B
+PLcom/android/server/pm/permission/PermissionManagerService;->buildInvalidCrossUserPermissionMessage(Ljava/lang/String;Z)Ljava/lang/String;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->cacheBackgroundToForegoundPermissionMapping()V
-HPLcom/android/server/pm/permission/PermissionManagerService;->checkExistsAndEnforceCannotModifyImmutablyRestrictedPermission(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/permission/PermissionManagerService;->checkExistsAndEnforceCannotModifyImmutablyRestrictedPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/PermissionManagerService;->checkIfLegacyStorageOpsNeedToBeUpdated(Landroid/content/pm/parsing/AndroidPackage;Z[I)[I
 HSPLcom/android/server/pm/permission/PermissionManagerService;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I
 HSPLcom/android/server/pm/permission/PermissionManagerService;->checkPermissionImpl(Ljava/lang/String;Ljava/lang/String;I)I
@@ -16302,58 +26637,83 @@
 HSPLcom/android/server/pm/permission/PermissionManagerService;->checkUidPermissionImpl(Ljava/lang/String;I)I
 HSPLcom/android/server/pm/permission/PermissionManagerService;->checkUidPermissionInternal(Landroid/content/pm/parsing/AndroidPackage;ILjava/lang/String;)I
 HSPLcom/android/server/pm/permission/PermissionManagerService;->create(Landroid/content/Context;Ljava/lang/Object;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
-HPLcom/android/server/pm/permission/PermissionManagerService;->doNotifyRuntimePermissionStateChanged(Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->doNotifyRuntimePermissionStateChanged(Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->enforceCrossUserOrProfilePermission(IIZZLjava/lang/String;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->enforceCrossUserPermission(IIZZZLjava/lang/String;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->enforceGrantRevokeGetRuntimePermissionPermissions(Ljava/lang/String;)V
-PLcom/android/server/pm/permission/PermissionManagerService;->enforceGrantRevokeRuntimePermissionPermissions(Ljava/lang/String;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->enforceGrantRevokeRuntimePermissionPermissions(Ljava/lang/String;)V
 HPLcom/android/server/pm/permission/PermissionManagerService;->getAllPermissionGroups(I)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/pm/permission/PermissionManagerService;->getBackgroundPermissions()Landroid/util/ArrayMap;
+PLcom/android/server/pm/permission/PermissionManagerService;->getAppOpPermissionPackages(Ljava/lang/String;)[Ljava/lang/String;
+HPLcom/android/server/pm/permission/PermissionManagerService;->getAppOpPermissionPackagesInternal(Ljava/lang/String;I)[Ljava/lang/String;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->getBackgroundPermissions()Landroid/util/ArrayMap;
 PLcom/android/server/pm/permission/PermissionManagerService;->getDefaultBrowser(I)Ljava/lang/String;
-PLcom/android/server/pm/permission/PermissionManagerService;->getPermission(Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
+PLcom/android/server/pm/permission/PermissionManagerService;->getOneTimePermissionUserManager(I)Lcom/android/server/pm/permission/OneTimePermissionUserManager;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->getPermission(Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;I)I
 HSPLcom/android/server/pm/permission/PermissionManagerService;->getPermissionFlagsInternal(Ljava/lang/String;Ljava/lang/String;II)I
 HPLcom/android/server/pm/permission/PermissionManagerService;->getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->getPermissionInfo(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->getSplitPermissions()Ljava/util/List;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->getVolumeUuidForPackage(Landroid/content/pm/parsing/AndroidPackage;)Ljava/lang/String;
-HPLcom/android/server/pm/permission/PermissionManagerService;->getWhitelistedRestrictedPermissions(Ljava/lang/String;II)Ljava/util/List;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->getWhitelistedRestrictedPermissions(Ljava/lang/String;II)Ljava/util/List;
+PLcom/android/server/pm/permission/PermissionManagerService;->grantDefaultPermissionsToActiveLuiApp(Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/PermissionManagerService;->grantDefaultPermissionsToEnabledCarrierApps([Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/PermissionManagerService;->grantDefaultPermissionsToEnabledImsServices([Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/PermissionManagerService;->grantDefaultPermissionsToEnabledTelephonyDataServices([Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/PermissionManagerService;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/PermissionManagerService;->grantRuntimePermissionInternal(Ljava/lang/String;Ljava/lang/String;ZIILcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
+HPLcom/android/server/pm/permission/PermissionManagerService;->grantDefaultPermissionsToEnabledTelephonyDataServices([Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/PermissionManagerService;->grantRequestedRuntimePermissions(Landroid/content/pm/parsing/AndroidPackage;[I[Ljava/lang/String;ILcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
+HPLcom/android/server/pm/permission/PermissionManagerService;->grantRequestedRuntimePermissionsForUser(Landroid/content/pm/parsing/AndroidPackage;I[Ljava/lang/String;ILcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->grantRuntimePermissionInternal(Ljava/lang/String;Ljava/lang/String;ZIILcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->grantSignaturePermission(Ljava/lang/String;Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/permission/BasePermission;Lcom/android/server/pm/permission/PermissionsState;)Z
+HSPLcom/android/server/pm/permission/PermissionManagerService;->hasCrossUserPermission(IIIZZ)Z
 HPLcom/android/server/pm/permission/PermissionManagerService;->hasPermission(Landroid/content/pm/parsing/AndroidPackage;Ljava/lang/String;)Z
+HPLcom/android/server/pm/permission/PermissionManagerService;->hasPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/PermissionManagerService;->hasPrivappWhitelistEntry(Ljava/lang/String;Landroid/content/pm/parsing/AndroidPackage;)Z
-PLcom/android/server/pm/permission/PermissionManagerService;->inheritPermissionStateToNewImplicitPermissionLocked(Landroid/util/ArraySet;Ljava/lang/String;Lcom/android/server/pm/permission/PermissionsState;Landroid/content/pm/parsing/AndroidPackage;I)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->inheritPermissionStateToNewImplicitPermissionLocked(Landroid/util/ArraySet;Ljava/lang/String;Lcom/android/server/pm/permission/PermissionsState;Landroid/content/pm/parsing/AndroidPackage;I)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->isNewPlatformPermissionForPackage(Ljava/lang/String;Landroid/content/pm/parsing/AndroidPackage;)Z
 HSPLcom/android/server/pm/permission/PermissionManagerService;->isPackageRequestingPermission(Landroid/content/pm/parsing/AndroidPackage;Ljava/lang/String;)Z
-PLcom/android/server/pm/permission/PermissionManagerService;->isPermissionRevokedByPolicy(Ljava/lang/String;Ljava/lang/String;I)Z
+HPLcom/android/server/pm/permission/PermissionManagerService;->isPermissionRevokedByPolicy(Ljava/lang/String;Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/permission/PermissionManagerService;->isPermissionsReviewRequired(Landroid/content/pm/parsing/AndroidPackage;I)Z
-PLcom/android/server/pm/permission/PermissionManagerService;->lambda$NPd9St1HBvGAtg1uhMV2Upfww4g(Lcom/android/server/pm/permission/PermissionManagerService;Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/PermissionManagerService;->killUid(IILjava/lang/String;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->lambda$NPd9St1HBvGAtg1uhMV2Upfww4g(Lcom/android/server/pm/permission/PermissionManagerService;Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/PermissionManagerService;->lambda$grantDefaultPermissionsToActiveLuiApp$7$PermissionManagerService(Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/PermissionManagerService;->lambda$grantDefaultPermissionsToEnabledCarrierApps$3$PermissionManagerService([Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/PermissionManagerService;->lambda$grantDefaultPermissionsToEnabledImsServices$4$PermissionManagerService([Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/PermissionManagerService;->lambda$grantDefaultPermissionsToEnabledTelephonyDataServices$5$PermissionManagerService([Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/PermissionManagerService;->lambda$resetRuntimePermissionsInternal$2(II)V
 PLcom/android/server/pm/permission/PermissionManagerService;->lambda$restoreDelayedRuntimePermissions$9$PermissionManagerService(Landroid/os/UserHandle;Ljava/lang/Boolean;)V
 PLcom/android/server/pm/permission/PermissionManagerService;->lambda$revokeDefaultPermissionsFromDisabledTelephonyDataServices$6$PermissionManagerService([Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/PermissionManagerService;->lambda$revokeDefaultPermissionsFromLuiApps$8$PermissionManagerService([Ljava/lang/String;I)V
+HPLcom/android/server/pm/permission/PermissionManagerService;->lambda$updatePermissionSourcePackage$11$PermissionManagerService(Lcom/android/server/pm/permission/BasePermission;ILcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;Landroid/content/pm/parsing/AndroidPackage;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->lambda$updatePermissions$10$PermissionManagerService(Landroid/content/pm/parsing/AndroidPackage;ZLjava/lang/String;Ljava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;Landroid/content/pm/parsing/AndroidPackage;)V
-PLcom/android/server/pm/permission/PermissionManagerService;->logPermission(ILjava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/pm/permission/PermissionManagerService;->notifyRuntimePermissionStateChanged(Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->logPermission(ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->notifyRuntimePermissionStateChanged(Ljava/lang/String;I)V
 HPLcom/android/server/pm/permission/PermissionManagerService;->queryPermissionsByGroup(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-HPLcom/android/server/pm/permission/PermissionManagerService;->removeAllPermissions(Landroid/content/pm/parsing/AndroidPackage;Z)V
-PLcom/android/server/pm/permission/PermissionManagerService;->removeOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V
-PLcom/android/server/pm/permission/PermissionManagerService;->restoreDelayedRuntimePermissions(Ljava/lang/String;Landroid/os/UserHandle;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->removeAllPermissions(Landroid/content/pm/parsing/AndroidPackage;Z)V
+HPLcom/android/server/pm/permission/PermissionManagerService;->removeOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V
+PLcom/android/server/pm/permission/PermissionManagerService;->removeWhitelistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;II)Z
+HPLcom/android/server/pm/permission/PermissionManagerService;->resetRuntimePermissionsInternal(Landroid/content/pm/parsing/AndroidPackage;I)V
+HPLcom/android/server/pm/permission/PermissionManagerService;->restoreDelayedRuntimePermissions(Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->restorePermissionState(Landroid/content/pm/parsing/AndroidPackage;ZLjava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
-PLcom/android/server/pm/permission/PermissionManagerService;->revokeDefaultPermissionsFromDisabledTelephonyDataServices([Ljava/lang/String;I)V
+HPLcom/android/server/pm/permission/PermissionManagerService;->revokeDefaultPermissionsFromDisabledTelephonyDataServices([Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/PermissionManagerService;->revokeDefaultPermissionsFromLuiApps([Ljava/lang/String;I)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->revokePermissionsNoLongerImplicitLocked(Lcom/android/server/pm/permission/PermissionsState;Landroid/content/pm/parsing/AndroidPackage;[I)[I
+PLcom/android/server/pm/permission/PermissionManagerService;->revokeRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/pm/permission/PermissionManagerService;->revokeRuntimePermissionInternal(Ljava/lang/String;Ljava/lang/String;ZIILcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
 HPLcom/android/server/pm/permission/PermissionManagerService;->revokeRuntimePermissionsIfGroupChanged(Landroid/content/pm/parsing/AndroidPackage;Landroid/content/pm/parsing/AndroidPackage;Ljava/util/ArrayList;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
-PLcom/android/server/pm/permission/PermissionManagerService;->revokeUnusedSharedUserPermissionsLocked(Lcom/android/server/pm/SharedUserSetting;[I)[I
+HPLcom/android/server/pm/permission/PermissionManagerService;->revokeUnusedSharedUserPermissionsLocked(Lcom/android/server/pm/SharedUserSetting;[I)[I
+PLcom/android/server/pm/permission/PermissionManagerService;->setDefaultBrowser(Ljava/lang/String;I)Z
+PLcom/android/server/pm/permission/PermissionManagerService;->setDefaultBrowserInternal(Ljava/lang/String;ZZI)Z
 HSPLcom/android/server/pm/permission/PermissionManagerService;->setInitialGrantForNewImplicitPermissionsLocked(Lcom/android/server/pm/permission/PermissionsState;Lcom/android/server/pm/permission/PermissionsState;Landroid/content/pm/parsing/AndroidPackage;Landroid/util/ArraySet;[I)[I
-HPLcom/android/server/pm/permission/PermissionManagerService;->setWhitelistedRestrictedPermissionsForUser(Landroid/content/pm/parsing/AndroidPackage;ILjava/util/List;IILcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
-PLcom/android/server/pm/permission/PermissionManagerService;->setWhitelistedRestrictedPermissionsInternal(Ljava/lang/String;Ljava/util/List;II)Z
-PLcom/android/server/pm/permission/PermissionManagerService;->shouldShowRequestPermissionRationale(Ljava/lang/String;Ljava/lang/String;I)Z
+HSPLcom/android/server/pm/permission/PermissionManagerService;->setWhitelistedRestrictedPermissionsForUser(Landroid/content/pm/parsing/AndroidPackage;ILjava/util/List;IILcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->setWhitelistedRestrictedPermissionsInternal(Ljava/lang/String;Ljava/util/List;II)Z
+HPLcom/android/server/pm/permission/PermissionManagerService;->shouldShowRequestPermissionRationale(Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/pm/permission/PermissionManagerService;->startOneTimePermissionSession(Ljava/lang/String;IJII)V
+PLcom/android/server/pm/permission/PermissionManagerService;->stopOneTimePermissionSession(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->systemReady()V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->updateAllPermissions(Ljava/lang/String;ZLcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
-HPLcom/android/server/pm/permission/PermissionManagerService;->updatePermissionFlags(Ljava/lang/String;Ljava/lang/String;IIZI)V
-HPLcom/android/server/pm/permission/PermissionManagerService;->updatePermissionFlagsInternal(Ljava/lang/String;Ljava/lang/String;IIIIZLcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->updatePermissionFlags(Ljava/lang/String;Ljava/lang/String;IIZI)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->updatePermissionFlagsInternal(Ljava/lang/String;Ljava/lang/String;IIIIZLcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->updatePermissionSourcePackage(Ljava/lang/String;Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)Z
 HSPLcom/android/server/pm/permission/PermissionManagerService;->updatePermissionTreeSourcePackage(Ljava/lang/String;Landroid/content/pm/parsing/AndroidPackage;)Z
 PLcom/android/server/pm/permission/PermissionManagerService;->updatePermissions(Ljava/lang/String;Landroid/content/pm/parsing/AndroidPackage;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
@@ -16362,14 +26722,17 @@
 HSPLcom/android/server/pm/permission/PermissionManagerServiceInternal;-><init>()V
 HSPLcom/android/server/pm/permission/PermissionSettings;-><init>(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/permission/PermissionSettings;->addAppOpPackage(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/pm/permission/PermissionSettings;->dumpPermissions(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;ZLcom/android/server/pm/DumpState;)V
+HPLcom/android/server/pm/permission/PermissionSettings;->dumpPermissions(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;ZLcom/android/server/pm/DumpState;)V
 PLcom/android/server/pm/permission/PermissionSettings;->enforcePermissionTree(Ljava/lang/String;I)Lcom/android/server/pm/permission/BasePermission;
 HSPLcom/android/server/pm/permission/PermissionSettings;->getAllPermissionTreesLocked()Ljava/util/Collection;
 HSPLcom/android/server/pm/permission/PermissionSettings;->getAllPermissionsLocked()Ljava/util/Collection;
 HSPLcom/android/server/pm/permission/PermissionSettings;->getPermission(Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
 HSPLcom/android/server/pm/permission/PermissionSettings;->getPermissionLocked(Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
-PLcom/android/server/pm/permission/PermissionSettings;->isPermissionAppOp(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/permission/PermissionSettings;->getPermissionTreeLocked(Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
+HSPLcom/android/server/pm/permission/PermissionSettings;->isPermissionAppOp(Ljava/lang/String;)Z
+HPLcom/android/server/pm/permission/PermissionSettings;->isPermissionInstant(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/PermissionSettings;->putPermissionLocked(Ljava/lang/String;Lcom/android/server/pm/permission/BasePermission;)V
+HSPLcom/android/server/pm/permission/PermissionSettings;->putPermissionTreeLocked(Ljava/lang/String;Lcom/android/server/pm/permission/BasePermission;)V
 HSPLcom/android/server/pm/permission/PermissionSettings;->readPermissionTrees(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/pm/permission/PermissionSettings;->readPermissions(Landroid/util/ArrayMap;Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/pm/permission/PermissionSettings;->readPermissions(Lorg/xmlpull/v1/XmlPullParser;)V
@@ -16400,7 +26763,7 @@
 HSPLcom/android/server/pm/permission/PermissionsState$PermissionState;->isGranted()Z
 HSPLcom/android/server/pm/permission/PermissionsState;-><clinit>()V
 HSPLcom/android/server/pm/permission/PermissionsState;-><init>()V
-PLcom/android/server/pm/permission/PermissionsState;-><init>(Lcom/android/server/pm/permission/PermissionsState;)V
+HPLcom/android/server/pm/permission/PermissionsState;-><init>(Lcom/android/server/pm/permission/PermissionsState;)V
 HSPLcom/android/server/pm/permission/PermissionsState;->appendInts([I[I)[I
 HSPLcom/android/server/pm/permission/PermissionsState;->computeGids(I)[I
 HSPLcom/android/server/pm/permission/PermissionsState;->computeGids([I)[I
@@ -16421,58 +26784,125 @@
 HSPLcom/android/server/pm/permission/PermissionsState;->grantRuntimePermission(Lcom/android/server/pm/permission/BasePermission;I)I
 HSPLcom/android/server/pm/permission/PermissionsState;->hasInstallPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/PermissionsState;->hasPermission(Ljava/lang/String;I)Z
-PLcom/android/server/pm/permission/PermissionsState;->hasRequestedPermission(Landroid/util/ArraySet;)Z
+PLcom/android/server/pm/permission/PermissionsState;->hasPermissionRequiringReview(I)Z
+HSPLcom/android/server/pm/permission/PermissionsState;->hasRequestedPermission(Landroid/util/ArraySet;)Z
 HSPLcom/android/server/pm/permission/PermissionsState;->hasRequestedPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/PermissionsState;->hasRuntimePermission(Ljava/lang/String;I)Z
+PLcom/android/server/pm/permission/PermissionsState;->isPermissionReviewRequired(I)Z
 PLcom/android/server/pm/permission/PermissionsState;->reset()V
 HSPLcom/android/server/pm/permission/PermissionsState;->revokeInstallPermission(Lcom/android/server/pm/permission/BasePermission;)I
 HSPLcom/android/server/pm/permission/PermissionsState;->revokePermission(Lcom/android/server/pm/permission/BasePermission;I)I
 PLcom/android/server/pm/permission/PermissionsState;->revokeRuntimePermission(Lcom/android/server/pm/permission/BasePermission;I)I
 HSPLcom/android/server/pm/permission/PermissionsState;->setGlobalGids([I)V
 HSPLcom/android/server/pm/permission/PermissionsState;->updatePermissionFlags(Lcom/android/server/pm/permission/BasePermission;III)Z
-PLcom/android/server/policy/-$$Lambda$PermissionPolicyService$8D9Zbki65ND_Q20M-Trexl6cHcQ;-><init>(Ljava/util/concurrent/CountDownLatch;)V
-PLcom/android/server/policy/-$$Lambda$PermissionPolicyService$8D9Zbki65ND_Q20M-Trexl6cHcQ;->accept(Ljava/lang/Object;)V
+PLcom/android/server/policy/-$$Lambda$LegacyGlobalActions$MdLN6qUJHty5FwMejjTE2cTYSvc;-><init>(Lcom/android/server/policy/LegacyGlobalActions;)V
+PLcom/android/server/policy/-$$Lambda$LegacyGlobalActions$MdLN6qUJHty5FwMejjTE2cTYSvc;->getAsBoolean()Z
+PLcom/android/server/policy/-$$Lambda$LegacyGlobalActions$wqp7aD3DxIVGmy_uGo-yxhtwmQk;-><init>(Lcom/android/server/policy/LegacyGlobalActions;)V
+PLcom/android/server/policy/-$$Lambda$LegacyGlobalActions$wqp7aD3DxIVGmy_uGo-yxhtwmQk;->getAsBoolean()Z
+HSPLcom/android/server/policy/-$$Lambda$PermissionPolicyService$8D9Zbki65ND_Q20M-Trexl6cHcQ;-><init>(Ljava/util/concurrent/CountDownLatch;)V
+HSPLcom/android/server/policy/-$$Lambda$PermissionPolicyService$8D9Zbki65ND_Q20M-Trexl6cHcQ;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/policy/-$$Lambda$PermissionPolicyService$EOXe1_laAw9FFgJquDg6Qy2DagQ;-><init>(Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;)V
 HSPLcom/android/server/policy/-$$Lambda$PermissionPolicyService$EOXe1_laAw9FFgJquDg6Qy2DagQ;->accept(Ljava/lang/Object;)V
-PLcom/android/server/policy/-$$Lambda$PermissionPolicyService$RYery4oeHNcS8uZ6BgM2MtZIvKw;-><clinit>()V
-PLcom/android/server/policy/-$$Lambda$PermissionPolicyService$RYery4oeHNcS8uZ6BgM2MtZIvKw;-><init>()V
-HPLcom/android/server/policy/-$$Lambda$PermissionPolicyService$RYery4oeHNcS8uZ6BgM2MtZIvKw;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/policy/-$$Lambda$PermissionPolicyService$RYery4oeHNcS8uZ6BgM2MtZIvKw;-><clinit>()V
+HSPLcom/android/server/policy/-$$Lambda$PermissionPolicyService$RYery4oeHNcS8uZ6BgM2MtZIvKw;-><init>()V
+HSPLcom/android/server/policy/-$$Lambda$PermissionPolicyService$RYery4oeHNcS8uZ6BgM2MtZIvKw;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/policy/-$$Lambda$PermissionPolicyService$V2gOjn4rTBH_rbxagOz-eOTvNfc;-><init>(Lcom/android/server/policy/PermissionPolicyService;)V
-PLcom/android/server/policy/-$$Lambda$PermissionPolicyService$V2gOjn4rTBH_rbxagOz-eOTvNfc;->onRuntimePermissionStateChanged(Ljava/lang/String;I)V
-PLcom/android/server/policy/-$$Lambda$oXa0y3A-00RiQs6-KTPBgpkGtgw;-><init>(Lcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;)V
-PLcom/android/server/policy/-$$Lambda$oXa0y3A-00RiQs6-KTPBgpkGtgw;->run()V
+HSPLcom/android/server/policy/-$$Lambda$PermissionPolicyService$V2gOjn4rTBH_rbxagOz-eOTvNfc;->onRuntimePermissionStateChanged(Ljava/lang/String;I)V
+PLcom/android/server/policy/-$$Lambda$PermissionPolicyService$enZnky8NIhd5B9lAhmYeFn1Y6mk;-><init>(Lcom/android/internal/infra/AndroidFuture;I)V
+PLcom/android/server/policy/-$$Lambda$PermissionPolicyService$enZnky8NIhd5B9lAhmYeFn1Y6mk;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/policy/-$$Lambda$PhoneWindowManager$DisplayHomeButtonHandler$ljCIzo7y96OZCYYMVaAi6LAwRAE;-><init>(Lcom/android/server/policy/PhoneWindowManager$DisplayHomeButtonHandler;)V
+HPLcom/android/server/policy/-$$Lambda$PhoneWindowManager$DisplayHomeButtonHandler$ljCIzo7y96OZCYYMVaAi6LAwRAE;->run()V
+PLcom/android/server/policy/-$$Lambda$j_3GF7S52oSV__e_mYWlY5TeyiM;-><init>(Lcom/android/server/policy/GlobalActions;)V
+PLcom/android/server/policy/-$$Lambda$j_3GF7S52oSV__e_mYWlY5TeyiM;->run()V
+HPLcom/android/server/policy/-$$Lambda$oXa0y3A-00RiQs6-KTPBgpkGtgw;-><init>(Lcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;)V
+HPLcom/android/server/policy/-$$Lambda$oXa0y3A-00RiQs6-KTPBgpkGtgw;->run()V
 HPLcom/android/server/policy/EventLogTags;->writeInterceptPower(Ljava/lang/String;II)V
-PLcom/android/server/policy/EventLogTags;->writeScreenToggled(I)V
+HSPLcom/android/server/policy/EventLogTags;->writeScreenToggled(I)V
 PLcom/android/server/policy/GlobalActions$1;-><init>(Lcom/android/server/policy/GlobalActions;)V
+PLcom/android/server/policy/GlobalActions$1;->run()V
 PLcom/android/server/policy/GlobalActions;-><init>(Landroid/content/Context;Lcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;)V
+PLcom/android/server/policy/GlobalActions;->access$000(Lcom/android/server/policy/GlobalActions;)V
+PLcom/android/server/policy/GlobalActions;->access$100(Lcom/android/server/policy/GlobalActions;)Z
+PLcom/android/server/policy/GlobalActions;->access$200(Lcom/android/server/policy/GlobalActions;)Z
+PLcom/android/server/policy/GlobalActions;->access$300(Lcom/android/server/policy/GlobalActions;)Lcom/android/server/policy/LegacyGlobalActions;
+PLcom/android/server/policy/GlobalActions;->ensureLegacyCreated()V
 PLcom/android/server/policy/GlobalActions;->onGlobalActionsAvailableChanged(Z)V
 PLcom/android/server/policy/GlobalActions;->onGlobalActionsDismissed()V
 PLcom/android/server/policy/GlobalActions;->onGlobalActionsShown()V
 PLcom/android/server/policy/GlobalActions;->showDialog(ZZ)V
 HSPLcom/android/server/policy/GlobalKeyManager;-><init>(Landroid/content/Context;)V
 PLcom/android/server/policy/GlobalKeyManager;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/policy/GlobalKeyManager;->handleGlobalKey(Landroid/content/Context;ILandroid/view/KeyEvent;)Z
+HPLcom/android/server/policy/GlobalKeyManager;->handleGlobalKey(Landroid/content/Context;ILandroid/view/KeyEvent;)Z
 HSPLcom/android/server/policy/GlobalKeyManager;->loadGlobalKeys(Landroid/content/Context;)V
-PLcom/android/server/policy/GlobalKeyManager;->shouldHandleGlobalKey(ILandroid/view/KeyEvent;)Z
+HPLcom/android/server/policy/GlobalKeyManager;->shouldHandleGlobalKey(ILandroid/view/KeyEvent;)Z
 HSPLcom/android/server/policy/IconUtilities;-><init>(Landroid/content/Context;)V
 PLcom/android/server/policy/IconUtilities;->createIconBitmap(Landroid/graphics/drawable/Drawable;)Landroid/graphics/Bitmap;
+PLcom/android/server/policy/IconUtilities;->getDisabledColorFilter()Landroid/graphics/ColorFilter;
+PLcom/android/server/policy/LegacyGlobalActions$10;-><init>(Lcom/android/server/policy/LegacyGlobalActions;)V
+PLcom/android/server/policy/LegacyGlobalActions$10;->onServiceStateChanged(Landroid/telephony/ServiceState;)V
+PLcom/android/server/policy/LegacyGlobalActions$11;-><init>(Lcom/android/server/policy/LegacyGlobalActions;)V
+PLcom/android/server/policy/LegacyGlobalActions$11;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/policy/LegacyGlobalActions$12;-><init>(Lcom/android/server/policy/LegacyGlobalActions;Landroid/os/Handler;)V
+PLcom/android/server/policy/LegacyGlobalActions$13;-><init>(Lcom/android/server/policy/LegacyGlobalActions;)V
+HPLcom/android/server/policy/LegacyGlobalActions$13;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/policy/LegacyGlobalActions$1;-><init>(Lcom/android/server/policy/LegacyGlobalActions;IIIII)V
+PLcom/android/server/policy/LegacyGlobalActions$2;-><init>(Lcom/android/server/policy/LegacyGlobalActions;)V
+PLcom/android/server/policy/LegacyGlobalActions$7;-><init>(Lcom/android/server/policy/LegacyGlobalActions;II)V
+PLcom/android/server/policy/LegacyGlobalActions$7;->showDuringKeyguard()Z
+PLcom/android/server/policy/LegacyGlobalActions$9;-><init>(Lcom/android/server/policy/LegacyGlobalActions;)V
+HPLcom/android/server/policy/LegacyGlobalActions$9;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/policy/LegacyGlobalActions$BugReportAction$1;-><init>(Lcom/android/server/policy/LegacyGlobalActions$BugReportAction;)V
+PLcom/android/server/policy/LegacyGlobalActions$BugReportAction$1;->run()V
+PLcom/android/server/policy/LegacyGlobalActions$BugReportAction;-><init>(Lcom/android/server/policy/LegacyGlobalActions;)V
+PLcom/android/server/policy/LegacyGlobalActions$BugReportAction;->getStatus()Ljava/lang/String;
+PLcom/android/server/policy/LegacyGlobalActions$BugReportAction;->onPress()V
+PLcom/android/server/policy/LegacyGlobalActions$BugReportAction;->showDuringKeyguard()Z
+PLcom/android/server/policy/LegacyGlobalActions$SilentModeTriStateAction;-><init>(Landroid/content/Context;Landroid/media/AudioManager;Landroid/os/Handler;)V
+PLcom/android/server/policy/LegacyGlobalActions;-><init>(Landroid/content/Context;Lcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;Ljava/lang/Runnable;)V
+PLcom/android/server/policy/LegacyGlobalActions;->access$000(Lcom/android/server/policy/LegacyGlobalActions;)Z
+PLcom/android/server/policy/LegacyGlobalActions;->access$1100(Lcom/android/server/policy/LegacyGlobalActions;)Lcom/android/internal/globalactions/ActionsDialog;
+PLcom/android/server/policy/LegacyGlobalActions;->access$1102(Lcom/android/server/policy/LegacyGlobalActions;Lcom/android/internal/globalactions/ActionsDialog;)Lcom/android/internal/globalactions/ActionsDialog;
+PLcom/android/server/policy/LegacyGlobalActions;->access$1200(Lcom/android/server/policy/LegacyGlobalActions;)V
+PLcom/android/server/policy/LegacyGlobalActions;->access$1300(Lcom/android/server/policy/LegacyGlobalActions;)V
+PLcom/android/server/policy/LegacyGlobalActions;->access$200(Lcom/android/server/policy/LegacyGlobalActions;)Landroid/content/Context;
+PLcom/android/server/policy/LegacyGlobalActions;->access$400(Lcom/android/server/policy/LegacyGlobalActions;)Lcom/android/internal/globalactions/ToggleAction$State;
+PLcom/android/server/policy/LegacyGlobalActions;->access$402(Lcom/android/server/policy/LegacyGlobalActions;Lcom/android/internal/globalactions/ToggleAction$State;)Lcom/android/internal/globalactions/ToggleAction$State;
+PLcom/android/server/policy/LegacyGlobalActions;->access$500(Lcom/android/server/policy/LegacyGlobalActions;)Lcom/android/internal/globalactions/ActionsAdapter;
+PLcom/android/server/policy/LegacyGlobalActions;->access$600(Lcom/android/server/policy/LegacyGlobalActions;)Landroid/os/Handler;
+PLcom/android/server/policy/LegacyGlobalActions;->access$900(Lcom/android/server/policy/LegacyGlobalActions;)Lcom/android/internal/globalactions/ToggleAction;
+PLcom/android/server/policy/LegacyGlobalActions;->awakenIfNecessary()V
+PLcom/android/server/policy/LegacyGlobalActions;->createDialog()Lcom/android/internal/globalactions/ActionsDialog;
+PLcom/android/server/policy/LegacyGlobalActions;->getCurrentUser()Landroid/content/pm/UserInfo;
+PLcom/android/server/policy/LegacyGlobalActions;->getLockdownAction()Lcom/android/internal/globalactions/Action;
+PLcom/android/server/policy/LegacyGlobalActions;->handleShow()V
+PLcom/android/server/policy/LegacyGlobalActions;->isCurrentUserOwner()Z
+PLcom/android/server/policy/LegacyGlobalActions;->lambda$createDialog$0$LegacyGlobalActions()Z
+PLcom/android/server/policy/LegacyGlobalActions;->lambda$createDialog$1$LegacyGlobalActions()Z
+PLcom/android/server/policy/LegacyGlobalActions;->onAirplaneModeChanged()V
+PLcom/android/server/policy/LegacyGlobalActions;->onClick(Landroid/content/DialogInterface;I)V
+PLcom/android/server/policy/LegacyGlobalActions;->onDismiss(Landroid/content/DialogInterface;)V
+PLcom/android/server/policy/LegacyGlobalActions;->prepareDialog()V
+PLcom/android/server/policy/LegacyGlobalActions;->refreshSilentMode()V
+PLcom/android/server/policy/LegacyGlobalActions;->showDialog(ZZ)V
 HSPLcom/android/server/policy/LogDecelerateInterpolator;-><init>(II)V
 HSPLcom/android/server/policy/LogDecelerateInterpolator;->computeLog(FII)F
-PLcom/android/server/policy/LogDecelerateInterpolator;->getInterpolation(F)F
+HPLcom/android/server/policy/LogDecelerateInterpolator;->getInterpolation(F)F
 HSPLcom/android/server/policy/PermissionPolicyInternal;-><init>()V
 HSPLcom/android/server/policy/PermissionPolicyService$1;-><init>(Lcom/android/server/policy/PermissionPolicyService;)V
 PLcom/android/server/policy/PermissionPolicyService$1;->onPackageAdded(Ljava/lang/String;I)V
 PLcom/android/server/policy/PermissionPolicyService$1;->onPackageChanged(Ljava/lang/String;I)V
+PLcom/android/server/policy/PermissionPolicyService$1;->onPackageRemoved(Ljava/lang/String;I)V
 HSPLcom/android/server/policy/PermissionPolicyService$2;-><init>(Lcom/android/server/policy/PermissionPolicyService;)V
-HPLcom/android/server/policy/PermissionPolicyService$2;->opChanged(IILjava/lang/String;)V
+HSPLcom/android/server/policy/PermissionPolicyService$2;->opChanged(IILjava/lang/String;)V
 HSPLcom/android/server/policy/PermissionPolicyService$Internal;-><init>(Lcom/android/server/policy/PermissionPolicyService;)V
 HSPLcom/android/server/policy/PermissionPolicyService$Internal;-><init>(Lcom/android/server/policy/PermissionPolicyService;Lcom/android/server/policy/PermissionPolicyService$1;)V
-PLcom/android/server/policy/PermissionPolicyService$Internal;->checkStartActivity(Landroid/content/Intent;ILjava/lang/String;)Z
-PLcom/android/server/policy/PermissionPolicyService$Internal;->isActionRemovedForCallingPackage(Landroid/content/Intent;ILjava/lang/String;)Z
+HSPLcom/android/server/policy/PermissionPolicyService$Internal;->checkStartActivity(Landroid/content/Intent;ILjava/lang/String;)Z
+HPLcom/android/server/policy/PermissionPolicyService$Internal;->isActionRemovedForCallingPackage(Landroid/content/Intent;ILjava/lang/String;)Z
 HSPLcom/android/server/policy/PermissionPolicyService$Internal;->isInitialized(I)Z
 HSPLcom/android/server/policy/PermissionPolicyService$Internal;->setOnInitializedCallback(Lcom/android/server/policy/PermissionPolicyInternal$OnInitializedCallback;)V
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser$OpToChange;-><init>(Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;ILjava/lang/String;I)V
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;-><init>(Landroid/content/Context;)V
+HPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;-><init>(Lcom/android/server/policy/PermissionPolicyService;Landroid/content/Context;)V
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->access$400(Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;)V
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->addAppOps(Landroid/content/pm/PackageInfo;Ljava/lang/String;)V
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->addExtraAppOp(Landroid/content/pm/PackageInfo;Landroid/content/pm/PermissionInfo;)V
@@ -16489,174 +26919,244 @@
 HSPLcom/android/server/policy/PermissionPolicyService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/policy/PermissionPolicyService;->access$100(Lcom/android/server/policy/PermissionPolicyService;I)Z
 PLcom/android/server/policy/PermissionPolicyService;->access$200(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V
-HPLcom/android/server/policy/PermissionPolicyService;->access$300(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V
+HSPLcom/android/server/policy/PermissionPolicyService;->access$300(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V
 HSPLcom/android/server/policy/PermissionPolicyService;->access$500(Ljava/lang/String;)I
+PLcom/android/server/policy/PermissionPolicyService;->access$600(Lcom/android/server/policy/PermissionPolicyService;)Lcom/android/internal/app/IAppOpsCallback;
 HSPLcom/android/server/policy/PermissionPolicyService;->access$700(Lcom/android/server/policy/PermissionPolicyService;)Ljava/lang/Object;
+PLcom/android/server/policy/PermissionPolicyService;->access$800(Lcom/android/server/policy/PermissionPolicyService;)Ljava/lang/Object;
 HSPLcom/android/server/policy/PermissionPolicyService;->access$802(Lcom/android/server/policy/PermissionPolicyService;Lcom/android/server/policy/PermissionPolicyInternal$OnInitializedCallback;)Lcom/android/server/policy/PermissionPolicyInternal$OnInitializedCallback;
+PLcom/android/server/policy/PermissionPolicyService;->access$902(Lcom/android/server/policy/PermissionPolicyService;Lcom/android/server/policy/PermissionPolicyInternal$OnInitializedCallback;)Lcom/android/server/policy/PermissionPolicyInternal$OnInitializedCallback;
 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;->grantOrUpgradeDefaultRuntimePermissionsIfNeeded(I)V
 HSPLcom/android/server/policy/PermissionPolicyService;->isStarted(I)Z
-HPLcom/android/server/policy/PermissionPolicyService;->lambda$RYery4oeHNcS8uZ6BgM2MtZIvKw(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V
-PLcom/android/server/policy/PermissionPolicyService;->lambda$V2gOjn4rTBH_rbxagOz-eOTvNfc(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V
-PLcom/android/server/policy/PermissionPolicyService;->lambda$grantOrUpgradeDefaultRuntimePermissionsIfNeeded$0(Ljava/util/concurrent/CountDownLatch;Ljava/lang/Boolean;)V
+HSPLcom/android/server/policy/PermissionPolicyService;->lambda$RYery4oeHNcS8uZ6BgM2MtZIvKw(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V
+HSPLcom/android/server/policy/PermissionPolicyService;->lambda$V2gOjn4rTBH_rbxagOz-eOTvNfc(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V
+PLcom/android/server/policy/PermissionPolicyService;->lambda$grantOrUpgradeDefaultRuntimePermissionsIfNeeded$0(Lcom/android/internal/infra/AndroidFuture;ILjava/lang/Boolean;)V
+HSPLcom/android/server/policy/PermissionPolicyService;->lambda$grantOrUpgradeDefaultRuntimePermissionsIfNeeded$0(Ljava/util/concurrent/CountDownLatch;Ljava/lang/Boolean;)V
 HSPLcom/android/server/policy/PermissionPolicyService;->lambda$synchronizePermissionsAndAppOpsForUser$1(Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;Landroid/content/pm/parsing/AndroidPackage;)V
 HSPLcom/android/server/policy/PermissionPolicyService;->onBootPhase(I)V
 HSPLcom/android/server/policy/PermissionPolicyService;->onStart()V
 HSPLcom/android/server/policy/PermissionPolicyService;->onStartUser(I)V
-HPLcom/android/server/policy/PermissionPolicyService;->synchronizePackagePermissionsAndAppOpsAsyncForUser(Ljava/lang/String;I)V
-HPLcom/android/server/policy/PermissionPolicyService;->synchronizePackagePermissionsAndAppOpsForUser(Ljava/lang/String;I)V
+PLcom/android/server/policy/PermissionPolicyService;->onStopUser(I)V
+HSPLcom/android/server/policy/PermissionPolicyService;->synchronizePackagePermissionsAndAppOpsAsyncForUser(Ljava/lang/String;I)V
+HSPLcom/android/server/policy/PermissionPolicyService;->synchronizePackagePermissionsAndAppOpsForUser(Ljava/lang/String;I)V
 HSPLcom/android/server/policy/PermissionPolicyService;->synchronizePermissionsAndAppOpsForUser(I)V
 HSPLcom/android/server/policy/PhoneWindowManager$10;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$10;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/policy/PhoneWindowManager$11;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
-PLcom/android/server/policy/PhoneWindowManager$11;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/policy/PhoneWindowManager$11;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/policy/PhoneWindowManager$12;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
-PLcom/android/server/policy/PhoneWindowManager$12;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/policy/PhoneWindowManager$12;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/policy/PhoneWindowManager$13;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 HSPLcom/android/server/policy/PhoneWindowManager$13;->run()V
 HSPLcom/android/server/policy/PhoneWindowManager$1;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
-PLcom/android/server/policy/PhoneWindowManager$1;->run()V
+HPLcom/android/server/policy/PhoneWindowManager$1;->run()V
 HSPLcom/android/server/policy/PhoneWindowManager$2;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
-PLcom/android/server/policy/PhoneWindowManager$2;->onDrawn()V
+HPLcom/android/server/policy/PhoneWindowManager$2;->onDrawn()V
 HSPLcom/android/server/policy/PhoneWindowManager$3;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 HSPLcom/android/server/policy/PhoneWindowManager$4;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 HSPLcom/android/server/policy/PhoneWindowManager$5;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$5;->run()V
 HSPLcom/android/server/policy/PhoneWindowManager$6;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 HSPLcom/android/server/policy/PhoneWindowManager$7;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 PLcom/android/server/policy/PhoneWindowManager$7;->onAppTransitionCancelledLocked(I)V
-PLcom/android/server/policy/PhoneWindowManager$7;->onAppTransitionStartingLocked(IJJJ)I
+HSPLcom/android/server/policy/PhoneWindowManager$7;->onAppTransitionStartingLocked(IJJJ)I
 HSPLcom/android/server/policy/PhoneWindowManager$8;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 PLcom/android/server/policy/PhoneWindowManager$8;->onShowingChanged()V
 PLcom/android/server/policy/PhoneWindowManager$8;->onTrustedChanged()V
+PLcom/android/server/policy/PhoneWindowManager$DisplayHomeButtonHandler$1;-><init>(Lcom/android/server/policy/PhoneWindowManager$DisplayHomeButtonHandler;)V
+PLcom/android/server/policy/PhoneWindowManager$DisplayHomeButtonHandler;-><init>(Lcom/android/server/policy/PhoneWindowManager;I)V
+HPLcom/android/server/policy/PhoneWindowManager$DisplayHomeButtonHandler;->handleHomeButton(Landroid/os/IBinder;Landroid/view/KeyEvent;)I
+PLcom/android/server/policy/PhoneWindowManager$DisplayHomeButtonHandler;->lambda$handleHomeButton$0$PhoneWindowManager$DisplayHomeButtonHandler()V
+PLcom/android/server/policy/PhoneWindowManager$DisplayHomeButtonHandler;->toString()Ljava/lang/String;
 HSPLcom/android/server/policy/PhoneWindowManager$MyWakeGestureListener;-><init>(Lcom/android/server/policy/PhoneWindowManager;Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/policy/PhoneWindowManager$PolicyHandler;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 HSPLcom/android/server/policy/PhoneWindowManager$PolicyHandler;-><init>(Lcom/android/server/policy/PhoneWindowManager;Lcom/android/server/policy/PhoneWindowManager$1;)V
-PLcom/android/server/policy/PhoneWindowManager$PolicyHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/policy/PhoneWindowManager$PolicyHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/policy/PhoneWindowManager$ScreenLockTimeout;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+HPLcom/android/server/policy/PhoneWindowManager$ScreenLockTimeout;->run()V
 HSPLcom/android/server/policy/PhoneWindowManager$ScreenshotRunnable;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 HSPLcom/android/server/policy/PhoneWindowManager$ScreenshotRunnable;-><init>(Lcom/android/server/policy/PhoneWindowManager;Lcom/android/server/policy/PhoneWindowManager$1;)V
 PLcom/android/server/policy/PhoneWindowManager$ScreenshotRunnable;->run()V
+PLcom/android/server/policy/PhoneWindowManager$ScreenshotRunnable;->setScreenshotType(I)V
 HSPLcom/android/server/policy/PhoneWindowManager$SettingsObserver;-><init>(Lcom/android/server/policy/PhoneWindowManager;Landroid/os/Handler;)V
 HSPLcom/android/server/policy/PhoneWindowManager$SettingsObserver;->observe()V
-PLcom/android/server/policy/PhoneWindowManager$SettingsObserver;->onChange(Z)V
+HSPLcom/android/server/policy/PhoneWindowManager$SettingsObserver;->onChange(Z)V
 HSPLcom/android/server/policy/PhoneWindowManager;-><clinit>()V
 HSPLcom/android/server/policy/PhoneWindowManager;-><init>()V
+PLcom/android/server/policy/PhoneWindowManager;->access$000(Lcom/android/server/policy/PhoneWindowManager;Z)V
 PLcom/android/server/policy/PhoneWindowManager;->access$100(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager;->access$1200(Lcom/android/server/policy/PhoneWindowManager;)V
 PLcom/android/server/policy/PhoneWindowManager;->access$1500(Lcom/android/server/policy/PhoneWindowManager;I)V
+PLcom/android/server/policy/PhoneWindowManager;->access$1700(Lcom/android/server/policy/PhoneWindowManager;)V
 PLcom/android/server/policy/PhoneWindowManager;->access$200(Lcom/android/server/policy/PhoneWindowManager;)V
+HPLcom/android/server/policy/PhoneWindowManager;->access$2700(Lcom/android/server/policy/PhoneWindowManager;I)V
+PLcom/android/server/policy/PhoneWindowManager;->access$2800(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager;->access$2900(Lcom/android/server/policy/PhoneWindowManager;)I
+PLcom/android/server/policy/PhoneWindowManager;->access$3000()[I
+HSPLcom/android/server/policy/PhoneWindowManager;->access$3500(Lcom/android/server/policy/PhoneWindowManager;IJ)I
 PLcom/android/server/policy/PhoneWindowManager;->access$3600(Lcom/android/server/policy/PhoneWindowManager;IJ)I
-PLcom/android/server/policy/PhoneWindowManager;->addSplashScreen(Landroid/os/IBinder;Ljava/lang/String;ILandroid/content/res/CompatibilityInfo;Ljava/lang/CharSequence;IIIILandroid/content/res/Configuration;I)Lcom/android/server/policy/WindowManagerPolicy$StartingSurface;
-PLcom/android/server/policy/PhoneWindowManager;->addSplashscreenContent(Lcom/android/internal/policy/PhoneWindow;Landroid/content/Context;)V
+PLcom/android/server/policy/PhoneWindowManager;->access$800(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager;->accessibilityShortcutActivated()V
+HPLcom/android/server/policy/PhoneWindowManager;->addSplashScreen(Landroid/os/IBinder;Ljava/lang/String;ILandroid/content/res/CompatibilityInfo;Ljava/lang/CharSequence;IIIILandroid/content/res/Configuration;I)Lcom/android/server/policy/WindowManagerPolicy$StartingSurface;
+HPLcom/android/server/policy/PhoneWindowManager;->addSplashscreenContent(Lcom/android/internal/policy/PhoneWindow;Landroid/content/Context;)V
 HSPLcom/android/server/policy/PhoneWindowManager;->adjustConfigurationLw(Landroid/content/res/Configuration;II)V
-PLcom/android/server/policy/PhoneWindowManager;->applyKeyguardPolicyLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;Lcom/android/server/policy/WindowManagerPolicy$WindowState;)V
+HSPLcom/android/server/policy/PhoneWindowManager;->applyKeyguardPolicyLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;Lcom/android/server/policy/WindowManagerPolicy$WindowState;)V
 PLcom/android/server/policy/PhoneWindowManager;->applyLidSwitchState()V
+PLcom/android/server/policy/PhoneWindowManager;->awakenDreams()V
 HSPLcom/android/server/policy/PhoneWindowManager;->bindKeyguard()V
-HPLcom/android/server/policy/PhoneWindowManager;->canBeHiddenByKeyguardLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)Z
-PLcom/android/server/policy/PhoneWindowManager;->canDismissBootAnimation()Z
+HSPLcom/android/server/policy/PhoneWindowManager;->canBeHiddenByKeyguardLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)Z
+HSPLcom/android/server/policy/PhoneWindowManager;->canDismissBootAnimation()Z
 HPLcom/android/server/policy/PhoneWindowManager;->cancelPendingAccessibilityShortcutAction()V
-PLcom/android/server/policy/PhoneWindowManager;->cancelPendingBackKeyAction()V
-PLcom/android/server/policy/PhoneWindowManager;->cancelPendingPowerKeyAction()V
-PLcom/android/server/policy/PhoneWindowManager;->cancelPendingScreenshotChordAction()V
-PLcom/android/server/policy/PhoneWindowManager;->cancelPossibleVeryLongPressReboot()V
-PLcom/android/server/policy/PhoneWindowManager;->checkAddPermission(Landroid/view/WindowManager$LayoutParams;[I)I
+HPLcom/android/server/policy/PhoneWindowManager;->cancelPendingBackKeyAction()V
+HPLcom/android/server/policy/PhoneWindowManager;->cancelPendingPowerKeyAction()V
+HPLcom/android/server/policy/PhoneWindowManager;->cancelPendingRingerToggleChordAction()V
+HPLcom/android/server/policy/PhoneWindowManager;->cancelPendingScreenshotChordAction()V
+HPLcom/android/server/policy/PhoneWindowManager;->cancelPossibleVeryLongPressReboot()V
+PLcom/android/server/policy/PhoneWindowManager;->cancelPreloadRecentApps()V
+HSPLcom/android/server/policy/PhoneWindowManager;->checkAddPermission(Landroid/view/WindowManager$LayoutParams;[I)I
 PLcom/android/server/policy/PhoneWindowManager;->checkShowToOwnerOnly(Landroid/view/WindowManager$LayoutParams;)Z
 HPLcom/android/server/policy/PhoneWindowManager;->createHiddenByKeyguardExit(ZZZ)Landroid/view/animation/Animation;
-PLcom/android/server/policy/PhoneWindowManager;->dump(Ljava/lang/String;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/policy/PhoneWindowManager;->createHomeDockIntent()Landroid/content/Intent;
+PLcom/android/server/policy/PhoneWindowManager;->createKeyguardWallpaperExit(Z)Landroid/view/animation/Animation;
+PLcom/android/server/policy/PhoneWindowManager;->dismissKeyguardLw(Lcom/android/internal/policy/IKeyguardDismissCallback;Ljava/lang/CharSequence;)V
+PLcom/android/server/policy/PhoneWindowManager;->dispatchMediaKeyRepeatWithWakeLock(Landroid/view/KeyEvent;)V
+PLcom/android/server/policy/PhoneWindowManager;->dispatchMediaKeyWithWakeLock(Landroid/view/KeyEvent;)V
+PLcom/android/server/policy/PhoneWindowManager;->dispatchMediaKeyWithWakeLockToAudioService(Landroid/view/KeyEvent;)V
+PLcom/android/server/policy/PhoneWindowManager;->dispatchUnhandledKey(Landroid/os/IBinder;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;
+PLcom/android/server/policy/PhoneWindowManager;->doubleTapOnHomeBehaviorToString(I)Ljava/lang/String;
+HPLcom/android/server/policy/PhoneWindowManager;->dump(Ljava/lang/String;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/policy/PhoneWindowManager;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLcom/android/server/policy/PhoneWindowManager;->enableKeyguard(Z)V
 PLcom/android/server/policy/PhoneWindowManager;->enableScreenAfterBoot()V
 PLcom/android/server/policy/PhoneWindowManager;->endcallBehaviorToString(I)Ljava/lang/String;
-PLcom/android/server/policy/PhoneWindowManager;->finishKeyguardDrawn()V
-PLcom/android/server/policy/PhoneWindowManager;->finishPowerKeyPress()V
-PLcom/android/server/policy/PhoneWindowManager;->finishScreenTurningOn()V
+HPLcom/android/server/policy/PhoneWindowManager;->finishKeyguardDrawn()V
+HPLcom/android/server/policy/PhoneWindowManager;->finishPowerKeyPress()V
+HPLcom/android/server/policy/PhoneWindowManager;->finishScreenTurningOn()V
 PLcom/android/server/policy/PhoneWindowManager;->finishWindowsDrawn()V
-PLcom/android/server/policy/PhoneWindowManager;->finishedGoingToSleep(I)V
-PLcom/android/server/policy/PhoneWindowManager;->finishedWakingUp(I)V
+HPLcom/android/server/policy/PhoneWindowManager;->finishedGoingToSleep(I)V
+HSPLcom/android/server/policy/PhoneWindowManager;->finishedWakingUp(I)V
 PLcom/android/server/policy/PhoneWindowManager;->getAccessibilityShortcutTimeout()J
-PLcom/android/server/policy/PhoneWindowManager;->getAudioService()Landroid/media/IAudioService;
+PLcom/android/server/policy/PhoneWindowManager;->getAudioManagerInternal()Landroid/media/AudioManagerInternal;
+HPLcom/android/server/policy/PhoneWindowManager;->getAudioService()Landroid/media/IAudioService;
 PLcom/android/server/policy/PhoneWindowManager;->getDisplayContext(Landroid/content/Context;I)Landroid/content/Context;
+HPLcom/android/server/policy/PhoneWindowManager;->getDreamManager()Landroid/service/dreams/IDreamManager;
 PLcom/android/server/policy/PhoneWindowManager;->getHdmiControl()Lcom/android/server/policy/PhoneWindowManager$HdmiControl;
 HSPLcom/android/server/policy/PhoneWindowManager;->getKeyguardDrawnTimeout()J
 HSPLcom/android/server/policy/PhoneWindowManager;->getLidBehavior()I
 HSPLcom/android/server/policy/PhoneWindowManager;->getLongIntArray(Landroid/content/res/Resources;I)[J
 PLcom/android/server/policy/PhoneWindowManager;->getMaxMultiPressPowerCount()I
-PLcom/android/server/policy/PhoneWindowManager;->getNotificationService()Landroid/app/NotificationManager;
+HPLcom/android/server/policy/PhoneWindowManager;->getNotificationService()Landroid/app/NotificationManager;
 PLcom/android/server/policy/PhoneWindowManager;->getResolvedLongPressOnPowerBehavior()I
+PLcom/android/server/policy/PhoneWindowManager;->getRingerToggleChordDelay()J
 PLcom/android/server/policy/PhoneWindowManager;->getScreenshotChordLongPressDelay()J
+PLcom/android/server/policy/PhoneWindowManager;->getStatusBarManagerInternal()Lcom/android/server/statusbar/StatusBarManagerInternal;
 PLcom/android/server/policy/PhoneWindowManager;->getStatusBarService()Lcom/android/internal/statusbar/IStatusBarService;
-PLcom/android/server/policy/PhoneWindowManager;->getTelecommService()Landroid/telecom/TelecomManager;
+HPLcom/android/server/policy/PhoneWindowManager;->getTelecommService()Landroid/telecom/TelecomManager;
 HSPLcom/android/server/policy/PhoneWindowManager;->getUiMode()I
+HPLcom/android/server/policy/PhoneWindowManager;->getVibrationEffect(I)Landroid/os/VibrationEffect;
 PLcom/android/server/policy/PhoneWindowManager;->goToSleep(JII)V
-PLcom/android/server/policy/PhoneWindowManager;->goToSleepFromPowerButton(JI)Z
-PLcom/android/server/policy/PhoneWindowManager;->handleStartTransitionForKeyguardLw(IJ)I
+HPLcom/android/server/policy/PhoneWindowManager;->goToSleepFromPowerButton(JI)Z
+PLcom/android/server/policy/PhoneWindowManager;->handleRingerChordGesture()V
+HPLcom/android/server/policy/PhoneWindowManager;->handleShortPressOnHome(I)V
+HSPLcom/android/server/policy/PhoneWindowManager;->handleStartTransitionForKeyguardLw(IJ)I
 PLcom/android/server/policy/PhoneWindowManager;->hasLongPressOnBackBehavior()Z
 PLcom/android/server/policy/PhoneWindowManager;->hasLongPressOnPowerBehavior()Z
-PLcom/android/server/policy/PhoneWindowManager;->hasVeryLongPressOnPowerBehavior()Z
-PLcom/android/server/policy/PhoneWindowManager;->inKeyguardRestrictedKeyInputMode()Z
+HPLcom/android/server/policy/PhoneWindowManager;->hasVeryLongPressOnPowerBehavior()Z
+HPLcom/android/server/policy/PhoneWindowManager;->inKeyguardRestrictedKeyInputMode()Z
+PLcom/android/server/policy/PhoneWindowManager;->incallBackBehaviorToString(I)Ljava/lang/String;
+PLcom/android/server/policy/PhoneWindowManager;->incallPowerBehaviorToString(I)Ljava/lang/String;
 HSPLcom/android/server/policy/PhoneWindowManager;->init(Landroid/content/Context;Landroid/view/IWindowManager;Lcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;)V
 HSPLcom/android/server/policy/PhoneWindowManager;->initializeHdmiState()V
 HSPLcom/android/server/policy/PhoneWindowManager;->initializeHdmiStateInternal()V
-PLcom/android/server/policy/PhoneWindowManager;->interceptAccessibilityShortcutChord()V
-PLcom/android/server/policy/PhoneWindowManager;->interceptBackKeyDown()V
-PLcom/android/server/policy/PhoneWindowManager;->interceptBackKeyUp(Landroid/view/KeyEvent;)Z
-PLcom/android/server/policy/PhoneWindowManager;->interceptKeyBeforeDispatching(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J
+HPLcom/android/server/policy/PhoneWindowManager;->interceptAccessibilityShortcutChord()V
+HPLcom/android/server/policy/PhoneWindowManager;->interceptBackKeyDown()V
+HPLcom/android/server/policy/PhoneWindowManager;->interceptBackKeyUp(Landroid/view/KeyEvent;)Z
+PLcom/android/server/policy/PhoneWindowManager;->interceptFallback(Landroid/os/IBinder;Landroid/view/KeyEvent;I)Z
+HPLcom/android/server/policy/PhoneWindowManager;->interceptKeyBeforeDispatching(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J
 HPLcom/android/server/policy/PhoneWindowManager;->interceptKeyBeforeDispatchingInner(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J
-PLcom/android/server/policy/PhoneWindowManager;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
-PLcom/android/server/policy/PhoneWindowManager;->interceptMotionBeforeQueueingNonInteractive(IJI)I
-PLcom/android/server/policy/PhoneWindowManager;->interceptPowerKeyDown(Landroid/view/KeyEvent;Z)V
-PLcom/android/server/policy/PhoneWindowManager;->interceptPowerKeyUp(Landroid/view/KeyEvent;ZZ)V
-PLcom/android/server/policy/PhoneWindowManager;->interceptRingerToggleChord()V
-PLcom/android/server/policy/PhoneWindowManager;->interceptScreenshotChord()V
+HSPLcom/android/server/policy/PhoneWindowManager;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
+HPLcom/android/server/policy/PhoneWindowManager;->interceptMotionBeforeQueueingNonInteractive(IJI)I
+HPLcom/android/server/policy/PhoneWindowManager;->interceptPowerKeyDown(Landroid/view/KeyEvent;Z)V
+HPLcom/android/server/policy/PhoneWindowManager;->interceptPowerKeyUp(Landroid/view/KeyEvent;ZZ)V
+HPLcom/android/server/policy/PhoneWindowManager;->interceptRingerToggleChord()V
+HPLcom/android/server/policy/PhoneWindowManager;->interceptScreenshotChord()V
+PLcom/android/server/policy/PhoneWindowManager;->interceptSystemNavigationKey(Landroid/view/KeyEvent;)V
+PLcom/android/server/policy/PhoneWindowManager;->isDeviceProvisioned()Z
 PLcom/android/server/policy/PhoneWindowManager;->isKeyguardDrawnLw()Z
-PLcom/android/server/policy/PhoneWindowManager;->isKeyguardHostWindow(Landroid/view/WindowManager$LayoutParams;)Z
+HPLcom/android/server/policy/PhoneWindowManager;->isKeyguardHostWindow(Landroid/view/WindowManager$LayoutParams;)Z
 HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardLocked()Z
-PLcom/android/server/policy/PhoneWindowManager;->isKeyguardOccluded()Z
-PLcom/android/server/policy/PhoneWindowManager;->isKeyguardSecure(I)Z
+HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardOccluded()Z
+HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardSecure(I)Z
+HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardShowing()Z
 HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardShowingAndNotOccluded()Z
+PLcom/android/server/policy/PhoneWindowManager;->isKeyguardTrustedLw()Z
 HSPLcom/android/server/policy/PhoneWindowManager;->isScreenOn()Z
-PLcom/android/server/policy/PhoneWindowManager;->isTheaterModeEnabled()Z
-PLcom/android/server/policy/PhoneWindowManager;->isUserSetupComplete()Z
+HPLcom/android/server/policy/PhoneWindowManager;->isTheaterModeEnabled()Z
+HPLcom/android/server/policy/PhoneWindowManager;->isUserSetupComplete()Z
 PLcom/android/server/policy/PhoneWindowManager;->isValidGlobalKey(I)Z
+PLcom/android/server/policy/PhoneWindowManager;->isWakeKeyWhenScreenOff(I)Z
 PLcom/android/server/policy/PhoneWindowManager;->keepScreenOnStartedLw()V
 PLcom/android/server/policy/PhoneWindowManager;->keepScreenOnStoppedLw()V
 HSPLcom/android/server/policy/PhoneWindowManager;->keyguardOn()Z
+PLcom/android/server/policy/PhoneWindowManager;->launchHomeFromHotKey(I)V
+HPLcom/android/server/policy/PhoneWindowManager;->launchHomeFromHotKey(IZZ)V
+PLcom/android/server/policy/PhoneWindowManager;->lidBehaviorToString(I)Ljava/lang/String;
+PLcom/android/server/policy/PhoneWindowManager;->lockNow(Landroid/os/Bundle;)V
+PLcom/android/server/policy/PhoneWindowManager;->longPressOnBackBehaviorToString(I)Ljava/lang/String;
+PLcom/android/server/policy/PhoneWindowManager;->longPressOnHomeBehaviorToString(I)Ljava/lang/String;
 PLcom/android/server/policy/PhoneWindowManager;->longPressOnPowerBehaviorToString(I)Ljava/lang/String;
-PLcom/android/server/policy/PhoneWindowManager;->okToAnimate()Z
-PLcom/android/server/policy/PhoneWindowManager;->onDefaultDisplayFocusChangedLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)V
+PLcom/android/server/policy/PhoneWindowManager;->multiPressOnPowerBehaviorToString(I)Ljava/lang/String;
+PLcom/android/server/policy/PhoneWindowManager;->notifyLidSwitchChanged(JZ)V
+HPLcom/android/server/policy/PhoneWindowManager;->okToAnimate()Z
+HSPLcom/android/server/policy/PhoneWindowManager;->onDefaultDisplayFocusChangedLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)V
 PLcom/android/server/policy/PhoneWindowManager;->onKeyguardOccludedChangedLw(Z)V
 HSPLcom/android/server/policy/PhoneWindowManager;->onSystemUiStarted()V
-PLcom/android/server/policy/PhoneWindowManager;->performHapticFeedback(ILjava/lang/String;IZLjava/lang/String;)Z
+HPLcom/android/server/policy/PhoneWindowManager;->performHapticFeedback(ILjava/lang/String;IZLjava/lang/String;)Z
+HPLcom/android/server/policy/PhoneWindowManager;->performHapticFeedback(IZLjava/lang/String;)Z
 PLcom/android/server/policy/PhoneWindowManager;->powerLongPress()V
-PLcom/android/server/policy/PhoneWindowManager;->powerPress(JZI)V
+HPLcom/android/server/policy/PhoneWindowManager;->powerPress(JZI)V
 HSPLcom/android/server/policy/PhoneWindowManager;->readCameraLensCoverState()V
 HSPLcom/android/server/policy/PhoneWindowManager;->readConfigurationDependentBehaviors()V
 HSPLcom/android/server/policy/PhoneWindowManager;->readLidState()V
 PLcom/android/server/policy/PhoneWindowManager;->registerShortcutKey(JLcom/android/internal/policy/IShortcutService;)V
 HSPLcom/android/server/policy/PhoneWindowManager;->reportScreenStateToVrManager(Z)V
-PLcom/android/server/policy/PhoneWindowManager;->schedulePossibleVeryLongPressReboot()V
-PLcom/android/server/policy/PhoneWindowManager;->screenTurnedOff()V
+HPLcom/android/server/policy/PhoneWindowManager;->schedulePossibleVeryLongPressReboot()V
+HPLcom/android/server/policy/PhoneWindowManager;->screenTurnedOff()V
 HSPLcom/android/server/policy/PhoneWindowManager;->screenTurnedOn()V
-PLcom/android/server/policy/PhoneWindowManager;->screenTurningOff(Lcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;)V
+HPLcom/android/server/policy/PhoneWindowManager;->screenTurningOff(Lcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;)V
 HSPLcom/android/server/policy/PhoneWindowManager;->screenTurningOn(Lcom/android/server/policy/WindowManagerPolicy$ScreenOnListener;)V
-PLcom/android/server/policy/PhoneWindowManager;->sendSystemKeyToStatusBar(I)V
-PLcom/android/server/policy/PhoneWindowManager;->sendSystemKeyToStatusBarAsync(I)V
+HPLcom/android/server/policy/PhoneWindowManager;->sendCloseSystemWindows(Ljava/lang/String;)V
+HPLcom/android/server/policy/PhoneWindowManager;->sendSystemKeyToStatusBar(I)V
+HPLcom/android/server/policy/PhoneWindowManager;->sendSystemKeyToStatusBarAsync(I)V
 HSPLcom/android/server/policy/PhoneWindowManager;->setAllowLockscreenWhenOn(IZ)V
 PLcom/android/server/policy/PhoneWindowManager;->setAodShowing(Z)Z
 HSPLcom/android/server/policy/PhoneWindowManager;->setDefaultDisplay(Lcom/android/server/policy/WindowManagerPolicy$DisplayContentInfo;)V
-PLcom/android/server/policy/PhoneWindowManager;->setDismissImeOnBackKeyPressed(Z)V
+HPLcom/android/server/policy/PhoneWindowManager;->setDismissImeOnBackKeyPressed(Z)V
 PLcom/android/server/policy/PhoneWindowManager;->setKeyguardCandidateLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)V
 PLcom/android/server/policy/PhoneWindowManager;->setKeyguardOccludedLw(ZZ)Z
 PLcom/android/server/policy/PhoneWindowManager;->setNavBarVirtualKeyHapticFeedbackEnabledLw(Z)V
+PLcom/android/server/policy/PhoneWindowManager;->setPipVisibilityLw(Z)V
 HSPLcom/android/server/policy/PhoneWindowManager;->setSafeMode(Z)V
 HSPLcom/android/server/policy/PhoneWindowManager;->setTopFocusedDisplay(I)V
 PLcom/android/server/policy/PhoneWindowManager;->shortPressOnPowerBehaviorToString(I)Ljava/lang/String;
+PLcom/android/server/policy/PhoneWindowManager;->shortPressOnSleepBehaviorToString(I)Ljava/lang/String;
+PLcom/android/server/policy/PhoneWindowManager;->shortPressOnWindowBehaviorToString(I)Ljava/lang/String;
 HPLcom/android/server/policy/PhoneWindowManager;->shouldBeHiddenByKeyguard(Lcom/android/server/policy/WindowManagerPolicy$WindowState;Lcom/android/server/policy/WindowManagerPolicy$WindowState;)Z
-PLcom/android/server/policy/PhoneWindowManager;->shouldDispatchInputWhenNonInteractive(II)Z
+HPLcom/android/server/policy/PhoneWindowManager;->shouldDispatchInputWhenNonInteractive(II)Z
 HSPLcom/android/server/policy/PhoneWindowManager;->shouldEnableWakeGestureLp()Z
 PLcom/android/server/policy/PhoneWindowManager;->showGlobalActionsInternal()V
+PLcom/android/server/policy/PhoneWindowManager;->showRecentApps()V
+PLcom/android/server/policy/PhoneWindowManager;->showRecentApps(Z)V
+PLcom/android/server/policy/PhoneWindowManager;->startActivityAsUser(Landroid/content/Intent;Landroid/os/Bundle;Landroid/os/UserHandle;)V
+PLcom/android/server/policy/PhoneWindowManager;->startActivityAsUser(Landroid/content/Intent;Landroid/os/Bundle;Landroid/os/UserHandle;Z)V
+PLcom/android/server/policy/PhoneWindowManager;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
+HPLcom/android/server/policy/PhoneWindowManager;->startDockOrHome(IZZ)V
 PLcom/android/server/policy/PhoneWindowManager;->startKeyguardExitAnimation(JJ)V
 PLcom/android/server/policy/PhoneWindowManager;->startedGoingToSleep(I)V
-PLcom/android/server/policy/PhoneWindowManager;->startedWakingUp(I)V
-PLcom/android/server/policy/PhoneWindowManager;->systemBooted()V
+HSPLcom/android/server/policy/PhoneWindowManager;->startedWakingUp(I)V
+HSPLcom/android/server/policy/PhoneWindowManager;->systemBooted()V
 HSPLcom/android/server/policy/PhoneWindowManager;->systemReady()V
 HSPLcom/android/server/policy/PhoneWindowManager;->updateLockScreenTimeout()V
 HSPLcom/android/server/policy/PhoneWindowManager;->updateRotation(Z)V
@@ -16664,12 +27164,21 @@
 HSPLcom/android/server/policy/PhoneWindowManager;->updateSettings()V
 HSPLcom/android/server/policy/PhoneWindowManager;->updateUiMode()V
 HSPLcom/android/server/policy/PhoneWindowManager;->updateWakeGestureListenerLp()V
-HPLcom/android/server/policy/PhoneWindowManager;->userActivity()V
+HSPLcom/android/server/policy/PhoneWindowManager;->userActivity()V
+PLcom/android/server/policy/PhoneWindowManager;->veryLongPressOnPowerBehaviorToString(I)Ljava/lang/String;
+PLcom/android/server/policy/PhoneWindowManager;->wakeUp(JZILjava/lang/String;)Z
+PLcom/android/server/policy/PhoneWindowManager;->wakeUpFromPowerKey(J)V
+PLcom/android/server/policy/PowerAction;-><init>(Landroid/content/Context;Lcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;)V
+PLcom/android/server/policy/PowerAction;->showDuringKeyguard()Z
+PLcom/android/server/policy/RestartAction;-><init>(Landroid/content/Context;Lcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;)V
+PLcom/android/server/policy/RestartAction;->onPress()V
+PLcom/android/server/policy/RestartAction;->showDuringKeyguard()Z
 HSPLcom/android/server/policy/ShortcutManager$ShortcutInfo;-><init>(Ljava/lang/String;Landroid/content/Intent;)V
 HSPLcom/android/server/policy/ShortcutManager;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/policy/ShortcutManager;->loadShortcuts()V
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy$1;-><init>()V
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy$2;-><init>(ZIZZ)V
+HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy$2;-><init>(ZIZZZ)V
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy$2;->getExtraAppOpCode()I
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy$2;->mayAllowExtraAppOp()Z
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy$2;->mayDenyExtraAppOpIfGranted()Z
@@ -16682,6 +27191,7 @@
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy;->getExtraAppOpCode()I
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy;->getMinimumTargetSDK(Landroid/content/Context;Landroid/content/pm/ApplicationInfo;Landroid/os/UserHandle;)I
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy;->hasUidRequestedLegacyExternalStorage(ILandroid/content/Context;)Z
+HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy;->hasWriteMediaStorageGrantedForUid(ILandroid/content/Context;)Z
 PLcom/android/server/policy/SplashScreenSurface;-><init>(Landroid/view/View;Landroid/os/IBinder;)V
 PLcom/android/server/policy/SplashScreenSurface;->remove()V
 HSPLcom/android/server/policy/WakeGestureListener$1;-><init>(Lcom/android/server/policy/WakeGestureListener;)V
@@ -16692,10 +27202,10 @@
 HSPLcom/android/server/policy/WakeGestureListener;->isSupported()Z
 PLcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;->cameraLensStateToString(I)Ljava/lang/String;
 HSPLcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;->lidStateToString(I)Ljava/lang/String;
-PLcom/android/server/policy/WindowManagerPolicy;->getSubWindowLayerFromTypeLw(I)I
-PLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(I)I
-HPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(IZ)I
-HPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)I
+HPLcom/android/server/policy/WindowManagerPolicy;->getSubWindowLayerFromTypeLw(I)I
+HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(I)I
+HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(IZ)I
+HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)I
 HSPLcom/android/server/policy/WindowManagerPolicy;->userRotationModeToString(I)Ljava/lang/String;
 HSPLcom/android/server/policy/WindowOrientationListener$OrientationJudge;-><init>(Lcom/android/server/policy/WindowOrientationListener;)V
 HSPLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge$1;-><init>(Lcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;)V
@@ -16703,15 +27213,15 @@
 HSPLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;-><init>(Lcom/android/server/policy/WindowOrientationListener;)V
 PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->access$402(Lcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;Z)Z
 HSPLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->evaluateRotationChangeLocked()I
-PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->getProposedRotationLocked()I
+HPLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->evaluateRotationChangeLocked()I
+HPLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->getProposedRotationLocked()I
 PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->isDesiredRotationAcceptableLocked(J)Z
-PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
-PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->onSensorChanged(Landroid/hardware/SensorEvent;)V
-PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->onTouchEndLocked(J)V
-PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->onTouchStartLocked()V
+HPLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
+HPLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->onSensorChanged(Landroid/hardware/SensorEvent;)V
+HPLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->onTouchEndLocked(J)V
+HPLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->onTouchStartLocked()V
 PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->resetLocked(Z)V
-PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->scheduleRotationEvaluationIfNecessaryLocked(J)V
+HPLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->scheduleRotationEvaluationIfNecessaryLocked(J)V
 PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->unscheduleRotationEvaluationLocked()V
 HSPLcom/android/server/policy/WindowOrientationListener;-><clinit>()V
 HSPLcom/android/server/policy/WindowOrientationListener;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
@@ -16720,19 +27230,25 @@
 PLcom/android/server/policy/WindowOrientationListener;->access$100()Z
 PLcom/android/server/policy/WindowOrientationListener;->access$300(Lcom/android/server/policy/WindowOrientationListener;)Landroid/os/Handler;
 HSPLcom/android/server/policy/WindowOrientationListener;->canDetectOrientation()Z
-PLcom/android/server/policy/WindowOrientationListener;->disable()V
+HPLcom/android/server/policy/WindowOrientationListener;->disable()V
 HSPLcom/android/server/policy/WindowOrientationListener;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/policy/WindowOrientationListener;->enable(Z)V
 PLcom/android/server/policy/WindowOrientationListener;->getHandler()Landroid/os/Handler;
-PLcom/android/server/policy/WindowOrientationListener;->getProposedRotation()I
-PLcom/android/server/policy/WindowOrientationListener;->onTouchEnd()V
-PLcom/android/server/policy/WindowOrientationListener;->onTouchStart()V
+HPLcom/android/server/policy/WindowOrientationListener;->getProposedRotation()I
+HPLcom/android/server/policy/WindowOrientationListener;->onTouchEnd()V
+HPLcom/android/server/policy/WindowOrientationListener;->onTouchStart()V
 HSPLcom/android/server/policy/WindowOrientationListener;->setCurrentRotation(I)V
+PLcom/android/server/policy/keyguard/-$$Lambda$KeyguardServiceDelegate$1$ZQ5qG3EmC57J43br9oobeNISXyE;-><clinit>()V
+PLcom/android/server/policy/keyguard/-$$Lambda$KeyguardServiceDelegate$1$ZQ5qG3EmC57J43br9oobeNISXyE;-><init>()V
+PLcom/android/server/policy/keyguard/-$$Lambda$KeyguardServiceDelegate$1$ZQ5qG3EmC57J43br9oobeNISXyE;->run()V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate$1;-><init>(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;)V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate$1;->lambda$onServiceDisconnected$0()V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate$1;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardShowDelegate;-><init>(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$DrawnListener;)V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardShowDelegate;->onDrawn()V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardState;-><init>()V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardState;->access$400(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardState;)V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardState;->reset()V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;-><init>(Landroid/content/Context;Lcom/android/server/policy/keyguard/KeyguardStateMonitor$StateCallback;)V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->access$000(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;)Landroid/content/Context;
@@ -16740,31 +27256,44 @@
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->access$200(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;)Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardState;
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->access$300(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;)Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$DrawnListener;
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->access$302(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$DrawnListener;)Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$DrawnListener;
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->access$500(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;)Landroid/os/Handler;
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->bindService(Landroid/content/Context;)V
-PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->dismiss(Lcom/android/internal/policy/IKeyguardDismissCallback;Ljava/lang/CharSequence;)V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->doKeyguardTimeout(Landroid/os/Bundle;)V
+HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->hasKeyguard()Z
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->hasLockscreenWallpaper()Z
-PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isInputRestricted()Z
-PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isSecure(I)Z
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->interactiveStateToString(I)Ljava/lang/String;
+HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isInputRestricted()Z
+HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isSecure(I)Z
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isShowing()Z
-PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onBootCompleted()V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isTrusted()Z
+HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onBootCompleted()V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onDreamingStarted()V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onDreamingStopped()V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onFinishedGoingToSleep(IZ)V
-PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onFinishedWakingUp()V
+HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onFinishedWakingUp()V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onScreenTurnedOff()V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onScreenTurnedOn()V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onScreenTurningOff()V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onScreenTurningOn(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$DrawnListener;)V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onStartedGoingToSleep(I)V
-PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onStartedWakingUp()V
+HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onStartedWakingUp()V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onSystemReady()V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->screenStateToString(I)Ljava/lang/String;
+HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->setKeyguardEnabled(Z)V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->setOccluded(ZZ)V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->startKeyguardExitAnimation(JJ)V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;-><init>(Landroid/content/Context;Lcom/android/internal/policy/IKeyguardService;Lcom/android/server/policy/keyguard/KeyguardStateMonitor$StateCallback;)V
-PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->isInputRestricted()Z
-PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->isSecure(I)Z
-PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->isShowing()Z
+PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->dismiss(Lcom/android/internal/policy/IKeyguardDismissCallback;Ljava/lang/CharSequence;)V
+HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->doKeyguardTimeout(Landroid/os/Bundle;)V
+PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->hasLockscreenWallpaper()Z
+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
+PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->isTrusted()Z
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onBootCompleted()V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onDreamingStarted()V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onDreamingStopped()V
@@ -16773,124 +27302,159 @@
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onScreenTurnedOff()V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onScreenTurnedOn()V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onScreenTurningOff()V
-PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onScreenTurningOn(Lcom/android/internal/policy/IKeyguardDrawnCallback;)V
-PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onStartedGoingToSleep(I)V
+HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onScreenTurningOn(Lcom/android/internal/policy/IKeyguardDrawnCallback;)V
+HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onStartedGoingToSleep(I)V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onStartedWakingUp()V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onSystemReady()V
-PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->setKeyguardEnabled(Z)V
+HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->setKeyguardEnabled(Z)V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->setOccluded(ZZ)V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->startKeyguardExitAnimation(JJ)V
 PLcom/android/server/policy/keyguard/KeyguardStateMonitor;-><init>(Landroid/content/Context;Lcom/android/internal/policy/IKeyguardService;Lcom/android/server/policy/keyguard/KeyguardStateMonitor$StateCallback;)V
 PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->isInputRestricted()Z
-PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->isSecure(I)Z
-PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->isShowing()Z
+PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->hasLockscreenWallpaper()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
+PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->isTrusted()Z
 PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onHasLockscreenWallpaperChanged(Z)V
-PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onInputRestrictedStateChanged(Z)V
-PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onShowingStateChanged(Z)V
+HPLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onInputRestrictedStateChanged(Z)V
+HPLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onShowingStateChanged(Z)V
 PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onSimSecureStateChanged(Z)V
 PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onTrustedChanged(Z)V
 HSPLcom/android/server/policy/role/LegacyRoleResolutionPolicy;-><init>(Landroid/content/Context;)V
-PLcom/android/server/policy/role/LegacyRoleResolutionPolicy;->getRoleHolders(Ljava/lang/String;I)Ljava/util/List;
-PLcom/android/server/policy/role/LegacyRoleResolutionPolicy;->isSettingsApplication(Ljava/lang/String;I)Z
+HPLcom/android/server/policy/role/LegacyRoleResolutionPolicy;->getRoleHolders(Ljava/lang/String;I)Ljava/util/List;
+HPLcom/android/server/policy/role/LegacyRoleResolutionPolicy;->isSettingsApplication(Ljava/lang/String;I)Z
 HSPLcom/android/server/power/-$$Lambda$PowerManagerService$FUW_os-Z9SregUE_DR9vDwaRuXo;-><init>(Lcom/android/server/power/PowerManagerService;)V
+PLcom/android/server/power/-$$Lambda$PowerManagerService$FUW_os-Z9SregUE_DR9vDwaRuXo;->run()V
 HSPLcom/android/server/power/-$$Lambda$ThermalManagerService$9JFHCKCwrnUIYoXDsqNamhlY5VU;-><init>(Lcom/android/server/power/ThermalManagerService;)V
+PLcom/android/server/power/-$$Lambda$ThermalManagerService$9JFHCKCwrnUIYoXDsqNamhlY5VU;->onValues(Landroid/os/Temperature;)V
 HSPLcom/android/server/power/-$$Lambda$ThermalManagerService$ThermalHal20Wrapper$R9S8YWn8x1F3V2TOvXtmky1V44Q;-><init>(Ljava/util/List;)V
 HSPLcom/android/server/power/-$$Lambda$ThermalManagerService$ThermalHal20Wrapper$R9S8YWn8x1F3V2TOvXtmky1V44Q;->onValues(Landroid/hardware/thermal/V1_0/ThermalStatus;Ljava/util/ArrayList;)V
-PLcom/android/server/power/-$$Lambda$ThermalManagerService$ThermalHal20Wrapper$dRsq86SXVH7z342fbs2U36cr67I;-><init>(Ljava/util/List;)V
-PLcom/android/server/power/-$$Lambda$ThermalManagerService$ThermalHal20Wrapper$dRsq86SXVH7z342fbs2U36cr67I;->onValues(Landroid/hardware/thermal/V1_0/ThermalStatus;Ljava/util/ArrayList;)V
+HPLcom/android/server/power/-$$Lambda$ThermalManagerService$ThermalHal20Wrapper$dRsq86SXVH7z342fbs2U36cr67I;-><init>(Ljava/util/List;)V
+HPLcom/android/server/power/-$$Lambda$ThermalManagerService$ThermalHal20Wrapper$dRsq86SXVH7z342fbs2U36cr67I;->onValues(Landroid/hardware/thermal/V1_0/ThermalStatus;Ljava/util/ArrayList;)V
 HSPLcom/android/server/power/-$$Lambda$ThermalManagerService$ZPQKzo9ZjU-hL4QYH693hWuTqjk;-><init>(Lcom/android/server/power/ThermalManagerService;Landroid/os/IThermalStatusListener;)V
 HSPLcom/android/server/power/-$$Lambda$ThermalManagerService$ZPQKzo9ZjU-hL4QYH693hWuTqjk;->run()V
 HSPLcom/android/server/power/-$$Lambda$ThermalManagerService$x5obtNvJKZxnpguOiQsFBDmBZ4k;-><init>(Landroid/os/IThermalEventListener;Landroid/os/Temperature;)V
 HSPLcom/android/server/power/-$$Lambda$ThermalManagerService$x5obtNvJKZxnpguOiQsFBDmBZ4k;->run()V
 HSPLcom/android/server/power/AttentionDetector$1;-><init>(Lcom/android/server/power/AttentionDetector;Landroid/os/Handler;Landroid/content/Context;)V
+PLcom/android/server/power/AttentionDetector$1;->onChange(Z)V
+PLcom/android/server/power/AttentionDetector$AttentionCallbackInternalImpl;-><init>(Lcom/android/server/power/AttentionDetector;I)V
+PLcom/android/server/power/AttentionDetector$AttentionCallbackInternalImpl;->onFailure(I)V
+PLcom/android/server/power/AttentionDetector$AttentionCallbackInternalImpl;->onSuccess(IJ)V
 HSPLcom/android/server/power/AttentionDetector$UserSwitchObserver;-><init>(Lcom/android/server/power/AttentionDetector;)V
 HSPLcom/android/server/power/AttentionDetector$UserSwitchObserver;-><init>(Lcom/android/server/power/AttentionDetector;Lcom/android/server/power/AttentionDetector$1;)V
 HSPLcom/android/server/power/AttentionDetector;-><init>(Ljava/lang/Runnable;Ljava/lang/Object;)V
-PLcom/android/server/power/AttentionDetector;->cancelCurrentRequestIfAny()V
-PLcom/android/server/power/AttentionDetector;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/power/AttentionDetector;->getPreDimCheckDurationMillis()J
-PLcom/android/server/power/AttentionDetector;->onUserActivity(JI)I
+PLcom/android/server/power/AttentionDetector;->access$100(Lcom/android/server/power/AttentionDetector;)Ljava/util/concurrent/atomic/AtomicBoolean;
+PLcom/android/server/power/AttentionDetector;->access$200(Lcom/android/server/power/AttentionDetector;)Ljava/lang/Object;
+PLcom/android/server/power/AttentionDetector;->access$300(Lcom/android/server/power/AttentionDetector;)I
+PLcom/android/server/power/AttentionDetector;->access$400(Lcom/android/server/power/AttentionDetector;)Ljava/lang/Runnable;
+PLcom/android/server/power/AttentionDetector;->access$500(Lcom/android/server/power/AttentionDetector;)V
+HSPLcom/android/server/power/AttentionDetector;->cancelCurrentRequestIfAny()V
+HPLcom/android/server/power/AttentionDetector;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/power/AttentionDetector;->getPostDimCheckDurationMillis(J)J
+HPLcom/android/server/power/AttentionDetector;->getPreDimCheckDurationMillis()J
+PLcom/android/server/power/AttentionDetector;->isAttentionServiceSupported()Z
+HSPLcom/android/server/power/AttentionDetector;->onUserActivity(JI)I
 PLcom/android/server/power/AttentionDetector;->onWakefulnessChangeStarted(I)V
-PLcom/android/server/power/AttentionDetector;->resetConsecutiveExtensionCount()V
+HSPLcom/android/server/power/AttentionDetector;->resetConsecutiveExtensionCount()V
+HPLcom/android/server/power/AttentionDetector;->serviceHasSufficientPermissions()Z
 HSPLcom/android/server/power/AttentionDetector;->systemReady(Landroid/content/Context;)V
 HSPLcom/android/server/power/AttentionDetector;->updateEnabledFromSettings(Landroid/content/Context;)V
-HPLcom/android/server/power/AttentionDetector;->updateUserActivity(JJ)J
+HSPLcom/android/server/power/AttentionDetector;->updateUserActivity(JJ)J
 HSPLcom/android/server/power/InattentiveSleepWarningController;-><init>()V
 HSPLcom/android/server/power/InattentiveSleepWarningController;->isShown()Z
-PLcom/android/server/power/Notifier$1;-><init>(Lcom/android/server/power/Notifier;I)V
-PLcom/android/server/power/Notifier$1;->run()V
+HPLcom/android/server/power/Notifier$1;-><init>(Lcom/android/server/power/Notifier;I)V
+HPLcom/android/server/power/Notifier$1;->run()V
 HPLcom/android/server/power/Notifier$2;-><init>(Lcom/android/server/power/Notifier;)V
-PLcom/android/server/power/Notifier$2;->run()V
-PLcom/android/server/power/Notifier$3;-><init>(Lcom/android/server/power/Notifier;I)V
-PLcom/android/server/power/Notifier$3;->run()V
+HPLcom/android/server/power/Notifier$2;->run()V
+HPLcom/android/server/power/Notifier$3;-><init>(Lcom/android/server/power/Notifier;I)V
+HPLcom/android/server/power/Notifier$3;->run()V
 HPLcom/android/server/power/Notifier$4;-><init>(Lcom/android/server/power/Notifier;II)V
-PLcom/android/server/power/Notifier$4;->run()V
-PLcom/android/server/power/Notifier$5;-><init>(Lcom/android/server/power/Notifier;II)V
-PLcom/android/server/power/Notifier$5;->run()V
+HPLcom/android/server/power/Notifier$4;->run()V
+HPLcom/android/server/power/Notifier$5;-><init>(Lcom/android/server/power/Notifier;II)V
+HPLcom/android/server/power/Notifier$5;->run()V
 HSPLcom/android/server/power/Notifier$6;-><init>(Lcom/android/server/power/Notifier;)V
 HPLcom/android/server/power/Notifier$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/power/Notifier$7;-><init>(Lcom/android/server/power/Notifier;)V
-PLcom/android/server/power/Notifier$7;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/power/Notifier$7;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/power/Notifier$NotifierHandler;-><init>(Lcom/android/server/power/Notifier;Landroid/os/Looper;)V
-HPLcom/android/server/power/Notifier$NotifierHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/power/Notifier$NotifierHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/power/Notifier;-><clinit>()V
 HSPLcom/android/server/power/Notifier;-><init>(Landroid/os/Looper;Landroid/content/Context;Lcom/android/internal/app/IBatteryStats;Lcom/android/server/power/SuspendBlocker;Lcom/android/server/policy/WindowManagerPolicy;)V
 PLcom/android/server/power/Notifier;->access$000(Lcom/android/server/power/Notifier;)Landroid/app/ActivityManagerInternal;
 PLcom/android/server/power/Notifier;->access$100(Lcom/android/server/power/Notifier;)I
+PLcom/android/server/power/Notifier;->access$200(I)I
 PLcom/android/server/power/Notifier;->access$300(Lcom/android/server/power/Notifier;)Lcom/android/server/policy/WindowManagerPolicy;
 PLcom/android/server/power/Notifier;->access$400(Lcom/android/server/power/Notifier;)J
 PLcom/android/server/power/Notifier;->access$500(Lcom/android/server/power/Notifier;)V
-PLcom/android/server/power/Notifier;->access$600(Lcom/android/server/power/Notifier;)V
-PLcom/android/server/power/Notifier;->finishPendingBroadcastLocked()V
+HSPLcom/android/server/power/Notifier;->access$600(Lcom/android/server/power/Notifier;)V
+PLcom/android/server/power/Notifier;->access$700(Lcom/android/server/power/Notifier;II)V
+PLcom/android/server/power/Notifier;->access$900(Lcom/android/server/power/Notifier;I)V
+PLcom/android/server/power/Notifier;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/power/Notifier;->finishPendingBroadcastLocked()V
 HSPLcom/android/server/power/Notifier;->getBatteryStatsWakeLockMonitorType(I)I
-PLcom/android/server/power/Notifier;->handleEarlyInteractiveChange()V
-PLcom/android/server/power/Notifier;->handleLateInteractiveChange()V
+HPLcom/android/server/power/Notifier;->handleEarlyInteractiveChange()V
+HPLcom/android/server/power/Notifier;->handleLateInteractiveChange()V
 PLcom/android/server/power/Notifier;->isChargingFeedbackEnabled(I)Z
-PLcom/android/server/power/Notifier;->onLongPartialWakeLockFinish(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;)V
-PLcom/android/server/power/Notifier;->onLongPartialWakeLockStart(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;)V
-HPLcom/android/server/power/Notifier;->onUserActivity(II)V
+HPLcom/android/server/power/Notifier;->onLongPartialWakeLockFinish(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;)V
+HPLcom/android/server/power/Notifier;->onLongPartialWakeLockStart(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;)V
+HSPLcom/android/server/power/Notifier;->onUserActivity(II)V
 HSPLcom/android/server/power/Notifier;->onWakeLockAcquired(ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;)V
-HPLcom/android/server/power/Notifier;->onWakeLockChanging(ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;)V
+HSPLcom/android/server/power/Notifier;->onWakeLockChanging(ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;)V
 HSPLcom/android/server/power/Notifier;->onWakeLockReleased(ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;)V
-PLcom/android/server/power/Notifier;->onWakeUp(ILjava/lang/String;ILjava/lang/String;I)V
+HPLcom/android/server/power/Notifier;->onWakeUp(ILjava/lang/String;ILjava/lang/String;I)V
 PLcom/android/server/power/Notifier;->onWakefulnessChangeFinished()V
-PLcom/android/server/power/Notifier;->onWakefulnessChangeStarted(IIJ)V
+HPLcom/android/server/power/Notifier;->onWakefulnessChangeStarted(IIJ)V
 PLcom/android/server/power/Notifier;->onWiredChargingStarted(I)V
-PLcom/android/server/power/Notifier;->playChargingStartedFeedback(IZ)V
-PLcom/android/server/power/Notifier;->sendGoToSleepBroadcast()V
-PLcom/android/server/power/Notifier;->sendNextBroadcast()V
-HPLcom/android/server/power/Notifier;->sendUserActivity()V
-PLcom/android/server/power/Notifier;->sendWakeUpBroadcast()V
+PLcom/android/server/power/Notifier;->onWirelessChargingStarted(II)V
+HPLcom/android/server/power/Notifier;->playChargingStartedFeedback(IZ)V
+HPLcom/android/server/power/Notifier;->sendGoToSleepBroadcast()V
+HPLcom/android/server/power/Notifier;->sendNextBroadcast()V
+HSPLcom/android/server/power/Notifier;->sendUserActivity()V
+HPLcom/android/server/power/Notifier;->sendWakeUpBroadcast()V
+PLcom/android/server/power/Notifier;->showWiredChargingStarted(I)V
+PLcom/android/server/power/Notifier;->showWirelessChargingStarted(II)V
 PLcom/android/server/power/Notifier;->translateOffReason(I)I
-PLcom/android/server/power/Notifier;->updatePendingBroadcastLocked()V
+PLcom/android/server/power/Notifier;->translateOnReason(I)I
+HPLcom/android/server/power/Notifier;->updatePendingBroadcastLocked()V
 HSPLcom/android/server/power/PowerManagerService$1;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$1;->acquireSuspendBlocker()V
 HSPLcom/android/server/power/PowerManagerService$1;->onDisplayStateChange(I)V
+PLcom/android/server/power/PowerManagerService$1;->onProximityNegative()V
+PLcom/android/server/power/PowerManagerService$1;->onProximityPositive()V
 HSPLcom/android/server/power/PowerManagerService$1;->onStateChanged()V
 HSPLcom/android/server/power/PowerManagerService$1;->releaseSuspendBlocker()V
 PLcom/android/server/power/PowerManagerService$1;->toString()Ljava/lang/String;
+PLcom/android/server/power/PowerManagerService$2;-><init>(Lcom/android/server/power/PowerManagerService;IZLjava/lang/String;)V
+PLcom/android/server/power/PowerManagerService$2;->run()V
 HSPLcom/android/server/power/PowerManagerService$4;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$BatteryReceiver;-><init>(Lcom/android/server/power/PowerManagerService;)V
-PLcom/android/server/power/PowerManagerService$BatteryReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/power/PowerManagerService$BatteryReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/power/PowerManagerService$BinderService;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$BinderService;->acquireWakeLock(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;)V
 PLcom/android/server/power/PowerManagerService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/power/PowerManagerService$BinderService;->getLastShutdownReason()I
+PLcom/android/server/power/PowerManagerService$BinderService;->getPowerSaveModeTrigger()I
 HSPLcom/android/server/power/PowerManagerService$BinderService;->getPowerSaveState(I)Landroid/os/PowerSaveState;
-PLcom/android/server/power/PowerManagerService$BinderService;->goToSleep(JII)V
+HPLcom/android/server/power/PowerManagerService$BinderService;->goToSleep(JII)V
 HSPLcom/android/server/power/PowerManagerService$BinderService;->isDeviceIdleMode()Z
 HSPLcom/android/server/power/PowerManagerService$BinderService;->isInteractive()Z
-HPLcom/android/server/power/PowerManagerService$BinderService;->isLightDeviceIdleMode()Z
-HPLcom/android/server/power/PowerManagerService$BinderService;->isPowerSaveMode()Z
-PLcom/android/server/power/PowerManagerService$BinderService;->isWakeLockLevelSupported(I)Z
+HSPLcom/android/server/power/PowerManagerService$BinderService;->isLightDeviceIdleMode()Z
+HSPLcom/android/server/power/PowerManagerService$BinderService;->isPowerSaveMode()Z
+HSPLcom/android/server/power/PowerManagerService$BinderService;->isWakeLockLevelSupported(I)Z
+PLcom/android/server/power/PowerManagerService$BinderService;->nap(J)V
+PLcom/android/server/power/PowerManagerService$BinderService;->reboot(ZLjava/lang/String;Z)V
 HSPLcom/android/server/power/PowerManagerService$BinderService;->releaseWakeLock(Landroid/os/IBinder;I)V
+HPLcom/android/server/power/PowerManagerService$BinderService;->setAdaptivePowerSaveEnabled(Z)Z
+HPLcom/android/server/power/PowerManagerService$BinderService;->setAdaptivePowerSavePolicy(Landroid/os/BatterySaverPolicyConfig;)Z
 HSPLcom/android/server/power/PowerManagerService$BinderService;->setDozeAfterScreenOff(Z)V
-PLcom/android/server/power/PowerManagerService$BinderService;->setDynamicPowerSaveHint(ZI)Z
+HPLcom/android/server/power/PowerManagerService$BinderService;->setDynamicPowerSaveHint(ZI)Z
+PLcom/android/server/power/PowerManagerService$BinderService;->setPowerSaveModeEnabled(Z)Z
+PLcom/android/server/power/PowerManagerService$BinderService;->shutdown(ZLjava/lang/String;Z)V
 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
-PLcom/android/server/power/PowerManagerService$BinderService;->userActivity(JII)V
-PLcom/android/server/power/PowerManagerService$BinderService;->wakeUp(JILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/power/PowerManagerService$BinderService;->userActivity(JII)V
+HPLcom/android/server/power/PowerManagerService$BinderService;->wakeUp(JILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService$Constants;-><init>(Lcom/android/server/power/PowerManagerService;Landroid/os/Handler;)V
 PLcom/android/server/power/PowerManagerService$Constants;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/power/PowerManagerService$Constants;->dumpProto(Landroid/util/proto/ProtoOutputStream;)V
@@ -16900,13 +27464,13 @@
 HSPLcom/android/server/power/PowerManagerService$DockReceiver;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$1;)V
 HSPLcom/android/server/power/PowerManagerService$DreamReceiver;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$DreamReceiver;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$1;)V
-PLcom/android/server/power/PowerManagerService$DreamReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/power/PowerManagerService$DreamReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/power/PowerManagerService$ForegroundProfileObserver;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$ForegroundProfileObserver;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$1;)V
 PLcom/android/server/power/PowerManagerService$ForegroundProfileObserver;->onForegroundProfileSwitch(I)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;
-PLcom/android/server/power/PowerManagerService$Injector$1;->set(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/power/PowerManagerService$Injector$1;->set(Ljava/lang/String;Ljava/lang/String;)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;->createBatterySaverPolicy(Ljava/lang/Object;Landroid/content/Context;Lcom/android/server/power/batterysaver/BatterySavingStats;)Lcom/android/server/power/batterysaver/BatterySaverPolicy;
@@ -16919,13 +27483,13 @@
 HSPLcom/android/server/power/PowerManagerService$LocalService;-><init>(Lcom/android/server/power/PowerManagerService;)V
 PLcom/android/server/power/PowerManagerService$LocalService;->getLastWakeup()Landroid/os/PowerManager$WakeData;
 HSPLcom/android/server/power/PowerManagerService$LocalService;->getLowPowerState(I)Landroid/os/PowerSaveState;
-PLcom/android/server/power/PowerManagerService$LocalService;->powerHint(II)V
+HSPLcom/android/server/power/PowerManagerService$LocalService;->powerHint(II)V
 HSPLcom/android/server/power/PowerManagerService$LocalService;->registerLowPowerModeObserver(Landroid/os/PowerManagerInternal$LowPowerModeListener;)V
-PLcom/android/server/power/PowerManagerService$LocalService;->setDeviceIdleMode(Z)Z
-PLcom/android/server/power/PowerManagerService$LocalService;->setDeviceIdleTempWhitelist([I)V
+HPLcom/android/server/power/PowerManagerService$LocalService;->setDeviceIdleMode(Z)Z
+HPLcom/android/server/power/PowerManagerService$LocalService;->setDeviceIdleTempWhitelist([I)V
 HSPLcom/android/server/power/PowerManagerService$LocalService;->setDeviceIdleWhitelist([I)V
-PLcom/android/server/power/PowerManagerService$LocalService;->setDozeOverrideFromDreamManager(II)V
-PLcom/android/server/power/PowerManagerService$LocalService;->setLightDeviceIdleMode(Z)Z
+HPLcom/android/server/power/PowerManagerService$LocalService;->setDozeOverrideFromDreamManager(II)V
+HPLcom/android/server/power/PowerManagerService$LocalService;->setLightDeviceIdleMode(Z)Z
 HSPLcom/android/server/power/PowerManagerService$LocalService;->setMaximumScreenOffTimeoutFromDeviceAdmin(IJ)V
 HSPLcom/android/server/power/PowerManagerService$LocalService;->setScreenBrightnessOverrideFromWindowManager(I)V
 HSPLcom/android/server/power/PowerManagerService$LocalService;->setUserActivityTimeoutOverrideFromWindowManager(J)V
@@ -16936,14 +27500,15 @@
 HSPLcom/android/server/power/PowerManagerService$NativeWrapper;-><init>()V
 HSPLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeAcquireSuspendBlocker(Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeInit(Lcom/android/server/power/PowerManagerService;)V
-PLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeReleaseSuspendBlocker(Ljava/lang/String;)V
-PLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeSendPowerHint(II)V
+HSPLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeReleaseSuspendBlocker(Ljava/lang/String;)V
+HSPLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeSendPowerHint(II)V
 HSPLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeSetAutoSuspend(Z)V
 HSPLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeSetFeature(II)V
 HSPLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeSetInteractive(Z)V
 HSPLcom/android/server/power/PowerManagerService$PowerManagerHandler;-><init>(Lcom/android/server/power/PowerManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/power/PowerManagerService$PowerManagerHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/power/PowerManagerService$SettingsObserver;-><init>(Lcom/android/server/power/PowerManagerService;Landroid/os/Handler;)V
+PLcom/android/server/power/PowerManagerService$SettingsObserver;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;-><init>(Lcom/android/server/power/PowerManagerService;Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->acquire()V
 PLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
@@ -16951,16 +27516,16 @@
 PLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->toString()Ljava/lang/String;
 HSPLcom/android/server/power/PowerManagerService$UidState;-><init>(I)V
 HSPLcom/android/server/power/PowerManagerService$UserSwitchedReceiver;-><init>(Lcom/android/server/power/PowerManagerService;)V
-PLcom/android/server/power/PowerManagerService$UserSwitchedReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/power/PowerManagerService$UserSwitchedReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/power/PowerManagerService$WakeLock;-><init>(Lcom/android/server/power/PowerManagerService;Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;IILcom/android/server/power/PowerManagerService$UidState;)V
 PLcom/android/server/power/PowerManagerService$WakeLock;->binderDied()V
 PLcom/android/server/power/PowerManagerService$WakeLock;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 PLcom/android/server/power/PowerManagerService$WakeLock;->getLockFlagsString()Ljava/lang/String;
 PLcom/android/server/power/PowerManagerService$WakeLock;->getLockLevelString()Ljava/lang/String;
-PLcom/android/server/power/PowerManagerService$WakeLock;->hasSameProperties(ILjava/lang/String;Landroid/os/WorkSource;II)Z
+HSPLcom/android/server/power/PowerManagerService$WakeLock;->hasSameProperties(ILjava/lang/String;Landroid/os/WorkSource;II)Z
 HSPLcom/android/server/power/PowerManagerService$WakeLock;->hasSameWorkSource(Landroid/os/WorkSource;)Z
-PLcom/android/server/power/PowerManagerService$WakeLock;->toString()Ljava/lang/String;
-PLcom/android/server/power/PowerManagerService$WakeLock;->updateWorkSource(Landroid/os/WorkSource;)V
+HPLcom/android/server/power/PowerManagerService$WakeLock;->toString()Ljava/lang/String;
+HSPLcom/android/server/power/PowerManagerService$WakeLock;->updateWorkSource(Landroid/os/WorkSource;)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;->access$000(Lcom/android/server/power/PowerManagerService;)Ljava/lang/Object;
@@ -16968,122 +27533,152 @@
 HSPLcom/android/server/power/PowerManagerService;->access$1200(Lcom/android/server/power/PowerManagerService;)Ljava/util/ArrayList;
 HSPLcom/android/server/power/PowerManagerService;->access$1676(Lcom/android/server/power/PowerManagerService;I)I
 HSPLcom/android/server/power/PowerManagerService;->access$1700(Lcom/android/server/power/PowerManagerService;)V
+PLcom/android/server/power/PowerManagerService;->access$1802(Lcom/android/server/power/PowerManagerService;Z)Z
+PLcom/android/server/power/PowerManagerService;->access$1900(Lcom/android/server/power/PowerManagerService;JIII)Z
 HSPLcom/android/server/power/PowerManagerService;->access$2000(Lcom/android/server/power/PowerManagerService;)Z
+PLcom/android/server/power/PowerManagerService;->access$202(Lcom/android/server/power/PowerManagerService;I)I
 HSPLcom/android/server/power/PowerManagerService;->access$2200(Lcom/android/server/power/PowerManagerService;)Z
 HSPLcom/android/server/power/PowerManagerService;->access$2400(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/SuspendBlocker;
-PLcom/android/server/power/PowerManagerService;->access$2500(Lcom/android/server/power/PowerManagerService;)V
+HSPLcom/android/server/power/PowerManagerService;->access$2500(Lcom/android/server/power/PowerManagerService;)V
 PLcom/android/server/power/PowerManagerService;->access$2600(Lcom/android/server/power/PowerManagerService;)V
-PLcom/android/server/power/PowerManagerService;->access$2700(Lcom/android/server/power/PowerManagerService;)V
-PLcom/android/server/power/PowerManagerService;->access$2900(Lcom/android/server/power/PowerManagerService;II)V
+HSPLcom/android/server/power/PowerManagerService;->access$2700(Lcom/android/server/power/PowerManagerService;)V
+HSPLcom/android/server/power/PowerManagerService;->access$2900(Lcom/android/server/power/PowerManagerService;II)V
+PLcom/android/server/power/PowerManagerService;->access$300(Lcom/android/server/power/PowerManagerService;J)V
 PLcom/android/server/power/PowerManagerService;->access$3100(Lcom/android/server/power/PowerManagerService;)V
-PLcom/android/server/power/PowerManagerService;->access$3200(Lcom/android/server/power/PowerManagerService;)V
+HSPLcom/android/server/power/PowerManagerService;->access$3200(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService;->access$3500(Landroid/os/WorkSource;)Landroid/os/WorkSource;
+PLcom/android/server/power/PowerManagerService;->access$3600(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$WakeLock;)V
 HSPLcom/android/server/power/PowerManagerService;->access$3700(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/PowerManagerService$NativeWrapper;
 HSPLcom/android/server/power/PowerManagerService;->access$3900(Lcom/android/server/power/PowerManagerService;)Landroid/content/Context;
 HSPLcom/android/server/power/PowerManagerService;->access$400(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService;->access$4000(Lcom/android/server/power/PowerManagerService;Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;II)V
 HSPLcom/android/server/power/PowerManagerService;->access$4100(Lcom/android/server/power/PowerManagerService;Landroid/os/IBinder;I)V
 HSPLcom/android/server/power/PowerManagerService;->access$4200(Lcom/android/server/power/PowerManagerService;Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;I)V
-PLcom/android/server/power/PowerManagerService;->access$4300(Lcom/android/server/power/PowerManagerService;I)Z
-PLcom/android/server/power/PowerManagerService;->access$4500(Lcom/android/server/power/PowerManagerService;JIII)V
+HSPLcom/android/server/power/PowerManagerService;->access$4300(Lcom/android/server/power/PowerManagerService;I)Z
+PLcom/android/server/power/PowerManagerService;->access$4400(Lcom/android/server/power/PowerManagerService;)J
+PLcom/android/server/power/PowerManagerService;->access$4402(Lcom/android/server/power/PowerManagerService;J)J
+HPLcom/android/server/power/PowerManagerService;->access$4500(Lcom/android/server/power/PowerManagerService;JIII)V
+PLcom/android/server/power/PowerManagerService;->access$4600(Lcom/android/server/power/PowerManagerService;JILjava/lang/String;ILjava/lang/String;I)V
+PLcom/android/server/power/PowerManagerService;->access$4700(Lcom/android/server/power/PowerManagerService;JIII)V
+PLcom/android/server/power/PowerManagerService;->access$4800(Lcom/android/server/power/PowerManagerService;JI)V
 HSPLcom/android/server/power/PowerManagerService;->access$4900(Lcom/android/server/power/PowerManagerService;)Z
 HSPLcom/android/server/power/PowerManagerService;->access$500(Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService;->access$5000(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/batterysaver/BatterySaverController;
 HSPLcom/android/server/power/PowerManagerService;->access$5100(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/batterysaver/BatterySaverPolicy;
+PLcom/android/server/power/PowerManagerService;->access$5200(Lcom/android/server/power/PowerManagerService;Z)Z
+PLcom/android/server/power/PowerManagerService;->access$5300(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/batterysaver/BatterySaverStateMachine;
+PLcom/android/server/power/PowerManagerService;->access$5500(Lcom/android/server/power/PowerManagerService;IZLjava/lang/String;Z)V
 HSPLcom/android/server/power/PowerManagerService;->access$5800(Lcom/android/server/power/PowerManagerService;Z)V
-PLcom/android/server/power/PowerManagerService;->access$600(Ljava/lang/String;)V
+HSPLcom/android/server/power/PowerManagerService;->access$600(Ljava/lang/String;)V
+PLcom/android/server/power/PowerManagerService;->access$6200(Lcom/android/server/power/PowerManagerService;Ljava/io/FileDescriptor;)V
+PLcom/android/server/power/PowerManagerService;->access$6300(Lcom/android/server/power/PowerManagerService;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/power/PowerManagerService;->access$6400(Lcom/android/server/power/PowerManagerService;I)V
 PLcom/android/server/power/PowerManagerService;->access$6500(Lcom/android/server/power/PowerManagerService;II)V
+PLcom/android/server/power/PowerManagerService;->access$6600(Lcom/android/server/power/PowerManagerService;Ljava/io/FileDescriptor;)V
 HSPLcom/android/server/power/PowerManagerService;->access$6700(Lcom/android/server/power/PowerManagerService;J)V
+PLcom/android/server/power/PowerManagerService;->access$6700(Lcom/android/server/power/PowerManagerService;Ljava/io/PrintWriter;)V
+HSPLcom/android/server/power/PowerManagerService;->access$6800(Lcom/android/server/power/PowerManagerService;I)V
 PLcom/android/server/power/PowerManagerService;->access$6900(Lcom/android/server/power/PowerManagerService;)Landroid/os/PowerManager$WakeData;
+HPLcom/android/server/power/PowerManagerService;->access$6900(Lcom/android/server/power/PowerManagerService;II)V
 HSPLcom/android/server/power/PowerManagerService;->access$700(Z)V
+HSPLcom/android/server/power/PowerManagerService;->access$7100(Lcom/android/server/power/PowerManagerService;J)V
+PLcom/android/server/power/PowerManagerService;->access$7300(Lcom/android/server/power/PowerManagerService;)Landroid/os/PowerManager$WakeData;
 HSPLcom/android/server/power/PowerManagerService;->access$800(Z)V
-PLcom/android/server/power/PowerManagerService;->access$900(II)V
+HSPLcom/android/server/power/PowerManagerService;->access$900(II)V
 HSPLcom/android/server/power/PowerManagerService;->acquireWakeLockInternal(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;II)V
 HSPLcom/android/server/power/PowerManagerService;->adjustWakeLockSummaryLocked(I)I
 HSPLcom/android/server/power/PowerManagerService;->applyWakeLockFlagsOnAcquireLocked(Lcom/android/server/power/PowerManagerService$WakeLock;I)V
 HSPLcom/android/server/power/PowerManagerService;->applyWakeLockFlagsOnReleaseLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
 PLcom/android/server/power/PowerManagerService;->canDozeLocked()Z
-PLcom/android/server/power/PowerManagerService;->canDreamLocked()Z
+HPLcom/android/server/power/PowerManagerService;->canDreamLocked()Z
 HPLcom/android/server/power/PowerManagerService;->checkForLongWakeLocks()V
 HSPLcom/android/server/power/PowerManagerService;->copyWorkSource(Landroid/os/WorkSource;)Landroid/os/WorkSource;
-PLcom/android/server/power/PowerManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
-PLcom/android/server/power/PowerManagerService;->dumpProto(Ljava/io/FileDescriptor;)V
-PLcom/android/server/power/PowerManagerService;->enqueueNotifyLongMsgLocked(J)V
+HPLcom/android/server/power/PowerManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
+HPLcom/android/server/power/PowerManagerService;->dumpProto(Ljava/io/FileDescriptor;)V
+HSPLcom/android/server/power/PowerManagerService;->enqueueNotifyLongMsgLocked(J)V
 HSPLcom/android/server/power/PowerManagerService;->findWakeLockIndexLocked(Landroid/os/IBinder;)I
 HSPLcom/android/server/power/PowerManagerService;->finishWakefulnessChangeIfNeededLocked()V
 HSPLcom/android/server/power/PowerManagerService;->getAttentiveTimeoutLocked()J
 HSPLcom/android/server/power/PowerManagerService;->getDesiredScreenPolicyLocked()I
+PLcom/android/server/power/PowerManagerService;->getFirstNonEmptyWorkChain(Landroid/os/WorkSource;)Landroid/os/WorkSource$WorkChain;
 PLcom/android/server/power/PowerManagerService;->getLastShutdownReasonInternal()I
 PLcom/android/server/power/PowerManagerService;->getLastWakeupInternal()Landroid/os/PowerManager$WakeData;
 HSPLcom/android/server/power/PowerManagerService;->getNextProfileTimeoutLocked(J)J
-PLcom/android/server/power/PowerManagerService;->getScreenDimDurationLocked(J)J
+HSPLcom/android/server/power/PowerManagerService;->getScreenDimDurationLocked(J)J
 HSPLcom/android/server/power/PowerManagerService;->getScreenOffTimeoutLocked(JJ)J
-PLcom/android/server/power/PowerManagerService;->getSleepTimeoutLocked(J)J
+HSPLcom/android/server/power/PowerManagerService;->getSleepTimeoutLocked(J)J
 HSPLcom/android/server/power/PowerManagerService;->getWakeLockSummaryFlags(Lcom/android/server/power/PowerManagerService$WakeLock;)I
-PLcom/android/server/power/PowerManagerService;->goToSleepInternal(JIII)V
-PLcom/android/server/power/PowerManagerService;->goToSleepNoUpdateLocked(JIII)Z
-PLcom/android/server/power/PowerManagerService;->handleBatteryStateChangedLocked()V
+HPLcom/android/server/power/PowerManagerService;->goToSleepInternal(JIII)V
+HPLcom/android/server/power/PowerManagerService;->goToSleepNoUpdateLocked(JIII)Z
+HSPLcom/android/server/power/PowerManagerService;->handleBatteryStateChangedLocked()V
 HSPLcom/android/server/power/PowerManagerService;->handleSandman()V
-PLcom/android/server/power/PowerManagerService;->handleSettingsChangedLocked()V
-PLcom/android/server/power/PowerManagerService;->handleUserActivityTimeout()V
-PLcom/android/server/power/PowerManagerService;->handleWakeLockDeath(Lcom/android/server/power/PowerManagerService$WakeLock;)V
+HSPLcom/android/server/power/PowerManagerService;->handleSettingsChangedLocked()V
+HPLcom/android/server/power/PowerManagerService;->handleUidStateChangeLocked()V
+HPLcom/android/server/power/PowerManagerService;->handleUserActivityTimeout()V
+HPLcom/android/server/power/PowerManagerService;->handleWakeLockDeath(Lcom/android/server/power/PowerManagerService$WakeLock;)V
 HSPLcom/android/server/power/PowerManagerService;->incrementBootCount()V
-PLcom/android/server/power/PowerManagerService;->isAttentiveTimeoutExpired(J)Z
-PLcom/android/server/power/PowerManagerService;->isBeingKeptAwakeLocked()Z
+HPLcom/android/server/power/PowerManagerService;->isAttentiveTimeoutExpired(J)Z
+HPLcom/android/server/power/PowerManagerService;->isBeingKeptAwakeLocked()Z
 HSPLcom/android/server/power/PowerManagerService;->isDeviceIdleModeInternal()Z
 HSPLcom/android/server/power/PowerManagerService;->isInteractiveInternal()Z
-PLcom/android/server/power/PowerManagerService;->isItBedTimeYetLocked()Z
-HPLcom/android/server/power/PowerManagerService;->isLightDeviceIdleModeInternal()Z
+HSPLcom/android/server/power/PowerManagerService;->isItBedTimeYetLocked()Z
+HSPLcom/android/server/power/PowerManagerService;->isLightDeviceIdleModeInternal()Z
 HSPLcom/android/server/power/PowerManagerService;->isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()Z
 PLcom/android/server/power/PowerManagerService;->isScreenLock(Lcom/android/server/power/PowerManagerService$WakeLock;)Z
-PLcom/android/server/power/PowerManagerService;->isValidBrightness(I)Z
-PLcom/android/server/power/PowerManagerService;->isWakeLockLevelSupportedInternal(I)Z
-PLcom/android/server/power/PowerManagerService;->logSleepTimeoutRecapturedLocked()V
+HPLcom/android/server/power/PowerManagerService;->isValidBrightness(I)Z
+HSPLcom/android/server/power/PowerManagerService;->isWakeLockLevelSupportedInternal(I)Z
+PLcom/android/server/power/PowerManagerService;->lambda$FUW_os-Z9SregUE_DR9vDwaRuXo(Lcom/android/server/power/PowerManagerService;)V
+HPLcom/android/server/power/PowerManagerService;->logSleepTimeoutRecapturedLocked()V
 HSPLcom/android/server/power/PowerManagerService;->maybeHideInattentiveSleepWarningLocked(JJ)Z
-PLcom/android/server/power/PowerManagerService;->maybeUpdateForegroundProfileLastActivityLocked(J)V
-PLcom/android/server/power/PowerManagerService;->monitor()V
+HSPLcom/android/server/power/PowerManagerService;->maybeUpdateForegroundProfileLastActivityLocked(J)V
+HPLcom/android/server/power/PowerManagerService;->monitor()V
+PLcom/android/server/power/PowerManagerService;->napInternal(JI)V
+HPLcom/android/server/power/PowerManagerService;->napNoUpdateLocked(JI)Z
 HSPLcom/android/server/power/PowerManagerService;->needDisplaySuspendBlockerLocked()Z
 HSPLcom/android/server/power/PowerManagerService;->notifyWakeLockAcquiredLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
-HPLcom/android/server/power/PowerManagerService;->notifyWakeLockChangingLocked(Lcom/android/server/power/PowerManagerService$WakeLock;ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;)V
+HSPLcom/android/server/power/PowerManagerService;->notifyWakeLockChangingLocked(Lcom/android/server/power/PowerManagerService$WakeLock;ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService;->notifyWakeLockLongFinishedLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
+PLcom/android/server/power/PowerManagerService;->notifyWakeLockLongStartedLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
 HSPLcom/android/server/power/PowerManagerService;->notifyWakeLockReleasedLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
 HSPLcom/android/server/power/PowerManagerService;->onBootPhase(I)V
 HSPLcom/android/server/power/PowerManagerService;->onStart()V
-PLcom/android/server/power/PowerManagerService;->powerHintInternal(II)V
+PLcom/android/server/power/PowerManagerService;->onUserAttention()V
+HSPLcom/android/server/power/PowerManagerService;->powerHintInternal(II)V
 HSPLcom/android/server/power/PowerManagerService;->readConfigurationLocked()V
 PLcom/android/server/power/PowerManagerService;->reallyGoToSleepNoUpdateLocked(JI)Z
 HSPLcom/android/server/power/PowerManagerService;->releaseWakeLockInternal(Landroid/os/IBinder;I)V
 HSPLcom/android/server/power/PowerManagerService;->removeWakeLockLocked(Lcom/android/server/power/PowerManagerService$WakeLock;I)V
 HSPLcom/android/server/power/PowerManagerService;->restartNofifyLongTimerLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
-HPLcom/android/server/power/PowerManagerService;->scheduleSandmanLocked()V
-PLcom/android/server/power/PowerManagerService;->scheduleUserInactivityTimeout(J)V
+HSPLcom/android/server/power/PowerManagerService;->scheduleSandmanLocked()V
+HSPLcom/android/server/power/PowerManagerService;->scheduleUserInactivityTimeout(J)V
 PLcom/android/server/power/PowerManagerService;->setDeviceIdleModeInternal(Z)Z
-PLcom/android/server/power/PowerManagerService;->setDeviceIdleTempWhitelistInternal([I)V
+HPLcom/android/server/power/PowerManagerService;->setDeviceIdleTempWhitelistInternal([I)V
 HSPLcom/android/server/power/PowerManagerService;->setDeviceIdleWhitelistInternal([I)V
 HSPLcom/android/server/power/PowerManagerService;->setDozeAfterScreenOffInternal(Z)V
-PLcom/android/server/power/PowerManagerService;->setDozeOverrideFromDreamManagerInternal(II)V
+HPLcom/android/server/power/PowerManagerService;->setDozeOverrideFromDreamManagerInternal(II)V
 HSPLcom/android/server/power/PowerManagerService;->setHalAutoSuspendModeLocked(Z)V
 HSPLcom/android/server/power/PowerManagerService;->setHalInteractiveModeLocked(Z)V
 PLcom/android/server/power/PowerManagerService;->setLightDeviceIdleModeInternal(Z)Z
+PLcom/android/server/power/PowerManagerService;->setLowPowerModeInternal(Z)Z
 HSPLcom/android/server/power/PowerManagerService;->setMaximumScreenOffTimeoutFromDeviceAdminInternal(IJ)V
 HSPLcom/android/server/power/PowerManagerService;->setScreenBrightnessOverrideFromWindowManagerInternal(I)V
 HSPLcom/android/server/power/PowerManagerService;->setUserActivityTimeoutOverrideFromWindowManagerInternal(J)V
 HSPLcom/android/server/power/PowerManagerService;->setWakeLockDisabledStateLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)Z
 HPLcom/android/server/power/PowerManagerService;->setWakefulnessLocked(IIJ)V
-PLcom/android/server/power/PowerManagerService;->shouldBoostScreenBrightness()Z
+HSPLcom/android/server/power/PowerManagerService;->shouldBoostScreenBrightness()Z
 PLcom/android/server/power/PowerManagerService;->shouldNapAtBedTimeLocked()Z
-PLcom/android/server/power/PowerManagerService;->shouldUseProximitySensorLocked()Z
+HSPLcom/android/server/power/PowerManagerService;->shouldUseProximitySensorLocked()Z
 HSPLcom/android/server/power/PowerManagerService;->shouldWakeUpWhenPluggedOrUnpluggedLocked(ZIZ)Z
+PLcom/android/server/power/PowerManagerService;->shutdownOrRebootInternal(IZLjava/lang/String;Z)V
 HSPLcom/android/server/power/PowerManagerService;->systemReady(Lcom/android/internal/app/IAppOpsService;)V
 HSPLcom/android/server/power/PowerManagerService;->uidActiveInternal(I)V
 HSPLcom/android/server/power/PowerManagerService;->uidGoneInternal(I)V
 HSPLcom/android/server/power/PowerManagerService;->uidIdleInternal(I)V
 HSPLcom/android/server/power/PowerManagerService;->updateAttentiveStateLocked(JI)V
 HSPLcom/android/server/power/PowerManagerService;->updateDisplayPowerStateLocked(I)Z
-HPLcom/android/server/power/PowerManagerService;->updateDreamLocked(IZ)V
+HSPLcom/android/server/power/PowerManagerService;->updateDreamLocked(IZ)V
 HSPLcom/android/server/power/PowerManagerService;->updateIsPoweredLocked(I)V
-PLcom/android/server/power/PowerManagerService;->updatePowerRequestFromBatterySaverPolicy(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;)V
+HSPLcom/android/server/power/PowerManagerService;->updatePowerRequestFromBatterySaverPolicy(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;)V
 HSPLcom/android/server/power/PowerManagerService;->updatePowerStateLocked()V
 HSPLcom/android/server/power/PowerManagerService;->updateProfilesLocked(J)V
 HSPLcom/android/server/power/PowerManagerService;->updateScreenBrightnessBoostLocked(I)V
@@ -17099,18 +27694,47 @@
 HSPLcom/android/server/power/PowerManagerService;->userActivityFromNative(JII)V
 HSPLcom/android/server/power/PowerManagerService;->userActivityInternal(JIII)V
 HSPLcom/android/server/power/PowerManagerService;->userActivityNoUpdateLocked(JIII)Z
-PLcom/android/server/power/PowerManagerService;->wakeUpInternal(JILjava/lang/String;ILjava/lang/String;I)V
+HPLcom/android/server/power/PowerManagerService;->wakeUpInternal(JILjava/lang/String;ILjava/lang/String;I)V
 HSPLcom/android/server/power/PowerManagerService;->wakeUpNoUpdateLocked(JILjava/lang/String;ILjava/lang/String;I)Z
+PLcom/android/server/power/ShutdownThread$2;-><init>()V
+PLcom/android/server/power/ShutdownThread$3;-><init>(Lcom/android/server/power/ShutdownThread;)V
+PLcom/android/server/power/ShutdownThread$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/power/ShutdownThread$5;-><init>(Lcom/android/server/power/ShutdownThread;JI[Z)V
+PLcom/android/server/power/ShutdownThread$5;->run()V
+PLcom/android/server/power/ShutdownThread;-><clinit>()V
+PLcom/android/server/power/ShutdownThread;-><init>()V
+PLcom/android/server/power/ShutdownThread;->access$1000()Landroid/util/ArrayMap;
+PLcom/android/server/power/ShutdownThread;->access$200()Landroid/util/TimingsTraceLog;
+PLcom/android/server/power/ShutdownThread;->access$300(Lcom/android/server/power/ShutdownThread;)Landroid/content/Context;
+PLcom/android/server/power/ShutdownThread;->access$400()Ljava/lang/String;
+PLcom/android/server/power/ShutdownThread;->access$500(Ljava/lang/String;)V
+PLcom/android/server/power/ShutdownThread;->access$600()Z
+PLcom/android/server/power/ShutdownThread;->access$900(Ljava/lang/String;)V
+PLcom/android/server/power/ShutdownThread;->actionDone()V
+PLcom/android/server/power/ShutdownThread;->beginShutdownSequence(Landroid/content/Context;)V
+PLcom/android/server/power/ShutdownThread;->metricEnded(Ljava/lang/String;)V
+PLcom/android/server/power/ShutdownThread;->metricShutdownStart()V
+PLcom/android/server/power/ShutdownThread;->metricStarted(Ljava/lang/String;)V
+PLcom/android/server/power/ShutdownThread;->newTimingsLog()Landroid/util/TimingsTraceLog;
+PLcom/android/server/power/ShutdownThread;->reboot(Landroid/content/Context;Ljava/lang/String;Z)V
+PLcom/android/server/power/ShutdownThread;->rebootOrShutdown(Landroid/content/Context;ZLjava/lang/String;)V
+PLcom/android/server/power/ShutdownThread;->run()V
+PLcom/android/server/power/ShutdownThread;->saveMetrics(ZLjava/lang/String;)V
+PLcom/android/server/power/ShutdownThread;->showShutdownDialog(Landroid/content/Context;)Landroid/app/ProgressDialog;
+PLcom/android/server/power/ShutdownThread;->showSysuiReboot()Z
+PLcom/android/server/power/ShutdownThread;->shutdown(Landroid/content/Context;Ljava/lang/String;Z)V
+PLcom/android/server/power/ShutdownThread;->shutdownInner(Landroid/content/Context;Z)V
+PLcom/android/server/power/ShutdownThread;->shutdownRadios(I)V
 HSPLcom/android/server/power/ThermalManagerService$1;-><init>(Lcom/android/server/power/ThermalManagerService;)V
 PLcom/android/server/power/ThermalManagerService$1;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/power/ThermalManagerService$1;->dumpItemsLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/util/Collection;)V
+HPLcom/android/server/power/ThermalManagerService$1;->dumpItemsLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/util/Collection;)V
 HPLcom/android/server/power/ThermalManagerService$1;->getCurrentCoolingDevices()Ljava/util/List;
-PLcom/android/server/power/ThermalManagerService$1;->getCurrentTemperatures()Ljava/util/List;
-PLcom/android/server/power/ThermalManagerService$1;->getCurrentThermalStatus()I
+HPLcom/android/server/power/ThermalManagerService$1;->getCurrentTemperatures()Ljava/util/List;
+HPLcom/android/server/power/ThermalManagerService$1;->getCurrentThermalStatus()I
 HSPLcom/android/server/power/ThermalManagerService$1;->registerThermalEventListener(Landroid/os/IThermalEventListener;)Z
 PLcom/android/server/power/ThermalManagerService$1;->registerThermalEventListenerWithType(Landroid/os/IThermalEventListener;I)Z
 HSPLcom/android/server/power/ThermalManagerService$1;->registerThermalStatusListener(Landroid/os/IThermalStatusListener;)Z
-PLcom/android/server/power/ThermalManagerService$1;->unregisterThermalStatusListener(Landroid/os/IThermalStatusListener;)Z
+HPLcom/android/server/power/ThermalManagerService$1;->unregisterThermalStatusListener(Landroid/os/IThermalStatusListener;)Z
 HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper$1;-><init>(Lcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;)V
 PLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper$1;->notifyThrottling(Landroid/hardware/thermal/V2_0/Temperature;)V
 HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;-><init>()V
@@ -17129,12 +27753,16 @@
 HSPLcom/android/server/power/ThermalManagerService;-><init>(Landroid/content/Context;Lcom/android/server/power/ThermalManagerService$ThermalHalWrapper;)V
 HSPLcom/android/server/power/ThermalManagerService;->access$000(Lcom/android/server/power/ThermalManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/power/ThermalManagerService;->access$100(Lcom/android/server/power/ThermalManagerService;)Landroid/os/RemoteCallbackList;
+PLcom/android/server/power/ThermalManagerService;->access$1000(Lcom/android/server/power/ThermalManagerService;)Landroid/util/ArrayMap;
 HSPLcom/android/server/power/ThermalManagerService;->access$200(Lcom/android/server/power/ThermalManagerService;Landroid/os/IThermalEventListener;Ljava/lang/Integer;)V
 PLcom/android/server/power/ThermalManagerService;->access$300(Lcom/android/server/power/ThermalManagerService;)Ljava/util/concurrent/atomic/AtomicBoolean;
 PLcom/android/server/power/ThermalManagerService;->access$400(Lcom/android/server/power/ThermalManagerService;)Lcom/android/server/power/ThermalManagerService$ThermalHalWrapper;
 HSPLcom/android/server/power/ThermalManagerService;->access$500(Lcom/android/server/power/ThermalManagerService;)Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/power/ThermalManagerService;->access$600(Lcom/android/server/power/ThermalManagerService;Landroid/os/IThermalStatusListener;)V
 PLcom/android/server/power/ThermalManagerService;->access$700(Lcom/android/server/power/ThermalManagerService;)I
+PLcom/android/server/power/ThermalManagerService;->access$800()Ljava/lang/String;
+PLcom/android/server/power/ThermalManagerService;->access$900(Lcom/android/server/power/ThermalManagerService;)Z
+PLcom/android/server/power/ThermalManagerService;->lambda$9JFHCKCwrnUIYoXDsqNamhlY5VU(Lcom/android/server/power/ThermalManagerService;Landroid/os/Temperature;)V
 HSPLcom/android/server/power/ThermalManagerService;->lambda$postEventListener$1(Landroid/os/IThermalEventListener;Landroid/os/Temperature;)V
 HSPLcom/android/server/power/ThermalManagerService;->lambda$postStatusListener$0$ThermalManagerService(Landroid/os/IThermalStatusListener;)V
 HSPLcom/android/server/power/ThermalManagerService;->notifyEventListenersLocked(Landroid/os/Temperature;)V
@@ -17150,200 +27778,604 @@
 HSPLcom/android/server/power/ThermalManagerService;->postStatusListener(Landroid/os/IThermalStatusListener;)V
 HSPLcom/android/server/power/ThermalManagerService;->setStatusLocked(I)V
 HSPLcom/android/server/power/ThermalManagerService;->shutdownIfNeeded(Landroid/os/Temperature;)V
+HSPLcom/android/server/power/WakeLockLog$EntryByteTranslator;-><init>(Lcom/android/server/power/WakeLockLog$TagDatabase;)V
+HPLcom/android/server/power/WakeLockLog$EntryByteTranslator;->fromBytes([BJLcom/android/server/power/WakeLockLog$LogEntry;)Lcom/android/server/power/WakeLockLog$LogEntry;
+HSPLcom/android/server/power/WakeLockLog$EntryByteTranslator;->getRelativeTime(JJ)I
+HSPLcom/android/server/power/WakeLockLog$EntryByteTranslator;->toBytes(Lcom/android/server/power/WakeLockLog$LogEntry;[BJ)I
+HSPLcom/android/server/power/WakeLockLog$Injector;-><init>()V
+HSPLcom/android/server/power/WakeLockLog$Injector;->currentTimeMillis()J
+HSPLcom/android/server/power/WakeLockLog$Injector;->getDateFormat()Ljava/text/SimpleDateFormat;
+HSPLcom/android/server/power/WakeLockLog$Injector;->getLogSize()I
+HSPLcom/android/server/power/WakeLockLog$Injector;->getLooper()Landroid/os/Looper;
+HSPLcom/android/server/power/WakeLockLog$Injector;->getTagDatabaseSize()I
+HPLcom/android/server/power/WakeLockLog$LogEntry;-><init>()V
+HSPLcom/android/server/power/WakeLockLog$LogEntry;-><init>(JILcom/android/server/power/WakeLockLog$TagData;I)V
+HPLcom/android/server/power/WakeLockLog$LogEntry;->dump(Ljava/io/PrintWriter;Ljava/text/SimpleDateFormat;)V
+HPLcom/android/server/power/WakeLockLog$LogEntry;->flagsToString(Ljava/lang/StringBuilder;)V
+HSPLcom/android/server/power/WakeLockLog$LogEntry;->set(JILcom/android/server/power/WakeLockLog$TagData;I)V
+HPLcom/android/server/power/WakeLockLog$LogEntry;->toStringInternal(Ljava/text/SimpleDateFormat;)Ljava/lang/String;
+HSPLcom/android/server/power/WakeLockLog$TagData;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/server/power/WakeLockLog$TagData;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/server/power/WakeLockLog$TagDatabase;-><init>(Lcom/android/server/power/WakeLockLog$Injector;)V
+HSPLcom/android/server/power/WakeLockLog$TagDatabase;->findOrCreateTag(Ljava/lang/String;IZ)Lcom/android/server/power/WakeLockLog$TagData;
+HPLcom/android/server/power/WakeLockLog$TagDatabase;->getTag(I)Lcom/android/server/power/WakeLockLog$TagData;
+HSPLcom/android/server/power/WakeLockLog$TagDatabase;->getTagIndex(Lcom/android/server/power/WakeLockLog$TagData;)I
+HSPLcom/android/server/power/WakeLockLog$TagDatabase;->setCallback(Lcom/android/server/power/WakeLockLog$TagDatabase$Callback;)V
+HSPLcom/android/server/power/WakeLockLog$TagDatabase;->setToIndex(Lcom/android/server/power/WakeLockLog$TagData;I)V
+HSPLcom/android/server/power/WakeLockLog$TagDatabase;->updateTagTime(Lcom/android/server/power/WakeLockLog$TagData;J)V
+HSPLcom/android/server/power/WakeLockLog$TheLog$1;-><init>(Lcom/android/server/power/WakeLockLog$TheLog;)V
+PLcom/android/server/power/WakeLockLog$TheLog$2;-><init>(Lcom/android/server/power/WakeLockLog$TheLog;Lcom/android/server/power/WakeLockLog$LogEntry;)V
+HPLcom/android/server/power/WakeLockLog$TheLog$2;->checkState()V
+HPLcom/android/server/power/WakeLockLog$TheLog$2;->hasNext()Z
+HPLcom/android/server/power/WakeLockLog$TheLog$2;->next()Lcom/android/server/power/WakeLockLog$LogEntry;
+HPLcom/android/server/power/WakeLockLog$TheLog$2;->next()Ljava/lang/Object;
+HSPLcom/android/server/power/WakeLockLog$TheLog;-><init>(Lcom/android/server/power/WakeLockLog$Injector;Lcom/android/server/power/WakeLockLog$EntryByteTranslator;Lcom/android/server/power/WakeLockLog$TagDatabase;)V
+PLcom/android/server/power/WakeLockLog$TheLog;->access$300(Lcom/android/server/power/WakeLockLog$TheLog;)I
+HPLcom/android/server/power/WakeLockLog$TheLog;->access$400(Lcom/android/server/power/WakeLockLog$TheLog;)J
+HPLcom/android/server/power/WakeLockLog$TheLog;->access$500(Lcom/android/server/power/WakeLockLog$TheLog;)J
+HPLcom/android/server/power/WakeLockLog$TheLog;->access$600(Lcom/android/server/power/WakeLockLog$TheLog;)I
+HPLcom/android/server/power/WakeLockLog$TheLog;->access$700(Lcom/android/server/power/WakeLockLog$TheLog;IJLcom/android/server/power/WakeLockLog$LogEntry;)Lcom/android/server/power/WakeLockLog$LogEntry;
+HPLcom/android/server/power/WakeLockLog$TheLog;->access$800(Lcom/android/server/power/WakeLockLog$TheLog;)Lcom/android/server/power/WakeLockLog$EntryByteTranslator;
+HPLcom/android/server/power/WakeLockLog$TheLog;->access$900(Lcom/android/server/power/WakeLockLog$TheLog;)[B
+HSPLcom/android/server/power/WakeLockLog$TheLog;->addEntry(Lcom/android/server/power/WakeLockLog$LogEntry;)V
+PLcom/android/server/power/WakeLockLog$TheLog;->getAllItems(Lcom/android/server/power/WakeLockLog$LogEntry;)Ljava/util/Iterator;
+HSPLcom/android/server/power/WakeLockLog$TheLog;->getAvailableSpace()I
+PLcom/android/server/power/WakeLockLog$TheLog;->getUsedBufferSize()I
+HSPLcom/android/server/power/WakeLockLog$TheLog;->isBufferEmpty()Z
+HSPLcom/android/server/power/WakeLockLog$TheLog;->makeSpace(I)Z
+HPLcom/android/server/power/WakeLockLog$TheLog;->readEntryAt(IJLcom/android/server/power/WakeLockLog$LogEntry;)Lcom/android/server/power/WakeLockLog$LogEntry;
+HPLcom/android/server/power/WakeLockLog$TheLog;->removeOldestItem()V
+HPLcom/android/server/power/WakeLockLog$TheLog;->removeTagIndex(I)V
+HSPLcom/android/server/power/WakeLockLog$TheLog;->writeBytesAt(I[BI)V
+PLcom/android/server/power/WakeLockLog$TheLog;->writeEntryAt(ILcom/android/server/power/WakeLockLog$LogEntry;J)V
+HSPLcom/android/server/power/WakeLockLog$WakeLockLogHandler;-><init>(Lcom/android/server/power/WakeLockLog;Landroid/os/Looper;)V
+HSPLcom/android/server/power/WakeLockLog$WakeLockLogHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/power/WakeLockLog;-><clinit>()V
+HSPLcom/android/server/power/WakeLockLog;-><init>()V
+HSPLcom/android/server/power/WakeLockLog;-><init>(Lcom/android/server/power/WakeLockLog$Injector;)V
+HSPLcom/android/server/power/WakeLockLog;->access$000()Ljava/text/SimpleDateFormat;
+HPLcom/android/server/power/WakeLockLog;->access$100()[Ljava/lang/String;
+HSPLcom/android/server/power/WakeLockLog;->access$1000(Lcom/android/server/power/WakeLockLog;ILjava/lang/String;IIJ)V
+PLcom/android/server/power/WakeLockLog;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/power/WakeLockLog;->dump(Ljava/io/PrintWriter;Z)V
+HSPLcom/android/server/power/WakeLockLog;->handleWakeLockEventInternal(ILjava/lang/String;IIJ)V
+HSPLcom/android/server/power/WakeLockLog;->onWakeLockAcquired(Ljava/lang/String;II)V
+HSPLcom/android/server/power/WakeLockLog;->onWakeLockEvent(ILjava/lang/String;II)V
+HSPLcom/android/server/power/WakeLockLog;->onWakeLockReleased(Ljava/lang/String;I)V
+HSPLcom/android/server/power/WakeLockLog;->tagNameReducer(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/power/WakeLockLog;->translateFlagsFromPowerManager(I)I
 HSPLcom/android/server/power/WirelessChargerDetector$1;-><init>(Lcom/android/server/power/WirelessChargerDetector;)V
+HPLcom/android/server/power/WirelessChargerDetector$1;->onSensorChanged(Landroid/hardware/SensorEvent;)V
 HSPLcom/android/server/power/WirelessChargerDetector$2;-><init>(Lcom/android/server/power/WirelessChargerDetector;)V
+PLcom/android/server/power/WirelessChargerDetector$2;->run()V
 HSPLcom/android/server/power/WirelessChargerDetector;-><clinit>()V
 HSPLcom/android/server/power/WirelessChargerDetector;-><init>(Landroid/hardware/SensorManager;Lcom/android/server/power/SuspendBlocker;Landroid/os/Handler;)V
-PLcom/android/server/power/WirelessChargerDetector;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/power/WirelessChargerDetector;->access$000(Lcom/android/server/power/WirelessChargerDetector;)Ljava/lang/Object;
+PLcom/android/server/power/WirelessChargerDetector;->access$100(Lcom/android/server/power/WirelessChargerDetector;FFF)V
+PLcom/android/server/power/WirelessChargerDetector;->access$200(Lcom/android/server/power/WirelessChargerDetector;)V
+PLcom/android/server/power/WirelessChargerDetector;->clearAtRestLocked()V
+HPLcom/android/server/power/WirelessChargerDetector;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/power/WirelessChargerDetector;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/power/WirelessChargerDetector;->finishDetectionLocked()V
+HPLcom/android/server/power/WirelessChargerDetector;->hasMoved(FFFFFF)Z
+HPLcom/android/server/power/WirelessChargerDetector;->processSampleLocked(FFF)V
+HSPLcom/android/server/power/WirelessChargerDetector;->startDetectionLocked()V
 HSPLcom/android/server/power/WirelessChargerDetector;->update(ZI)Z
+PLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverPolicy$7a-wfvqpjaa389r6FVZsJX98cd8;-><init>(Lcom/android/server/power/batterysaver/BatterySaverPolicy;[Lcom/android/server/power/batterysaver/BatterySaverPolicy$BatterySaverPolicyListener;)V
+PLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverPolicy$7a-wfvqpjaa389r6FVZsJX98cd8;->run()V
 HSPLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverPolicy$rfw31Sb8JX1OVD2rGHGtCXyfop8;-><init>(Lcom/android/server/power/batterysaver/BatterySaverPolicy;)V
+PLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverPolicy$rfw31Sb8JX1OVD2rGHGtCXyfop8;->onAccessibilityStateChanged(Z)V
+PLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$66yeetZVz7IbzEr9gw2J77hoMVI;-><init>(Lcom/android/server/power/batterysaver/BatterySaverStateMachine;I)V
+PLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$66yeetZVz7IbzEr9gw2J77hoMVI;->run()V
+PLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$KPPqeIS8QIZneCCBkN31dB4SR6U;-><init>(Lcom/android/server/power/batterysaver/BatterySaverStateMachine;)V
+PLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$KPPqeIS8QIZneCCBkN31dB4SR6U;->run()V
+PLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$QXh4KHnoFaNqEkr199qR1vIeCpo;-><init>(Lcom/android/server/power/batterysaver/BatterySaverStateMachine;)V
+PLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$QXh4KHnoFaNqEkr199qR1vIeCpo;->run()V
 HSPLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$SSfmWJrD4RBoVg8A8loZrS-jhAo;-><init>(Lcom/android/server/power/batterysaver/BatterySaverStateMachine;)V
+PLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$SSfmWJrD4RBoVg8A8loZrS-jhAo;->run()V
 PLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$fEidyt_9TXlXBpF6D2lhOOrfOC4;-><init>(Lcom/android/server/power/batterysaver/BatterySaverStateMachine;)V
 PLcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$fEidyt_9TXlXBpF6D2lhOOrfOC4;->run()V
 HSPLcom/android/server/power/batterysaver/-$$Lambda$FileUpdater$NUmipjKCJwbgmFbIcGS3uaz3QFk;-><init>(Lcom/android/server/power/batterysaver/FileUpdater;)V
+HPLcom/android/server/power/batterysaver/-$$Lambda$FileUpdater$NUmipjKCJwbgmFbIcGS3uaz3QFk;->run()V
 HSPLcom/android/server/power/batterysaver/BatterySaverController$1;-><init>(Lcom/android/server/power/batterysaver/BatterySaverController;)V
-PLcom/android/server/power/batterysaver/BatterySaverController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/power/batterysaver/BatterySaverController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverController$MyHandler;-><init>(Lcom/android/server/power/batterysaver/BatterySaverController;Landroid/os/Looper;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverController$MyHandler;->dispatchMessage(Landroid/os/Message;)V
+HPLcom/android/server/power/batterysaver/BatterySaverController$MyHandler;->postStateChanged(ZI)V
 HSPLcom/android/server/power/batterysaver/BatterySaverController$MyHandler;->postSystemReady()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
 PLcom/android/server/power/batterysaver/BatterySaverController;->access$000(Lcom/android/server/power/batterysaver/BatterySaverController;)Z
-PLcom/android/server/power/batterysaver/BatterySaverController;->access$100(Lcom/android/server/power/batterysaver/BatterySaverController;)V
-PLcom/android/server/power/batterysaver/BatterySaverController;->access$300(Lcom/android/server/power/batterysaver/BatterySaverController;)Ljava/lang/Object;
-PLcom/android/server/power/batterysaver/BatterySaverController;->access$402(Lcom/android/server/power/batterysaver/BatterySaverController;Z)Z
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->access$100(Lcom/android/server/power/batterysaver/BatterySaverController;)V
+PLcom/android/server/power/batterysaver/BatterySaverController;->access$200(Lcom/android/server/power/batterysaver/BatterySaverController;)Lcom/android/server/power/batterysaver/BatterySaverController$MyHandler;
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->access$300(Lcom/android/server/power/batterysaver/BatterySaverController;)Ljava/lang/Object;
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->access$402(Lcom/android/server/power/batterysaver/BatterySaverController;Z)Z
 HSPLcom/android/server/power/batterysaver/BatterySaverController;->access$500(Lcom/android/server/power/batterysaver/BatterySaverController;)[Lcom/android/server/power/batterysaver/BatterySaverController$Plugin;
 HSPLcom/android/server/power/batterysaver/BatterySaverController;->addListener(Landroid/os/PowerManagerInternal$LowPowerModeListener;)V
+PLcom/android/server/power/batterysaver/BatterySaverController;->enableBatterySaver(ZI)V
 HSPLcom/android/server/power/batterysaver/BatterySaverController;->getBatterySaverPolicy()Lcom/android/server/power/batterysaver/BatterySaverPolicy;
-PLcom/android/server/power/batterysaver/BatterySaverController;->getPowerManager()Landroid/os/PowerManager;
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->getPowerManager()Landroid/os/PowerManager;
+HPLcom/android/server/power/batterysaver/BatterySaverController;->handleBatterySaverStateChanged(ZI)V
 PLcom/android/server/power/batterysaver/BatterySaverController;->isAdaptiveEnabled()Z
-HPLcom/android/server/power/batterysaver/BatterySaverController;->isEnabled()Z
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->isEnabled()Z
 PLcom/android/server/power/batterysaver/BatterySaverController;->isFullEnabled()Z
-PLcom/android/server/power/batterysaver/BatterySaverController;->isLaunchBoostDisabled()Z
-PLcom/android/server/power/batterysaver/BatterySaverController;->isPolicyEnabled()Z
+PLcom/android/server/power/batterysaver/BatterySaverController;->isInteractive()Z
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->isLaunchBoostDisabled()Z
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->isPolicyEnabled()Z
+PLcom/android/server/power/batterysaver/BatterySaverController;->onBatterySaverPolicyChanged(Lcom/android/server/power/batterysaver/BatterySaverPolicy;)V
+PLcom/android/server/power/batterysaver/BatterySaverController;->reasonToString(I)Ljava/lang/String;
 PLcom/android/server/power/batterysaver/BatterySaverController;->resetAdaptivePolicyLocked(I)Z
 PLcom/android/server/power/batterysaver/BatterySaverController;->setAdaptivePolicyEnabledLocked(ZI)Z
+HPLcom/android/server/power/batterysaver/BatterySaverController;->setAdaptivePolicyLocked(Landroid/os/BatterySaverPolicyConfig;I)Z
+HPLcom/android/server/power/batterysaver/BatterySaverController;->setAdaptivePolicyLocked(Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;I)Z
 HSPLcom/android/server/power/batterysaver/BatterySaverController;->systemReady()V
-PLcom/android/server/power/batterysaver/BatterySaverController;->updateBatterySavingStats()V
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->updateBatterySavingStats()V
+PLcom/android/server/power/batterysaver/BatterySaverController;->updatePolicyLevelLocked()Z
 HSPLcom/android/server/power/batterysaver/BatterySaverLocationPlugin;-><init>(Landroid/content/Context;)V
+PLcom/android/server/power/batterysaver/BatterySaverLocationPlugin;->onBatterySaverChanged(Lcom/android/server/power/batterysaver/BatterySaverController;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverLocationPlugin;->onSystemReady(Lcom/android/server/power/batterysaver/BatterySaverController;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverLocationPlugin;->updateLocationState(Lcom/android/server/power/batterysaver/BatterySaverController;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;-><init>(FZZZZZZZZZZZZZZLandroid/util/ArrayMap;Landroid/util/ArrayMap;ZZI)V
 PLcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;->fromConfig(Landroid/os/BatterySaverPolicyConfig;)Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;->fromSettings(Ljava/lang/String;Ljava/lang/String;Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;)Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;-><clinit>()V
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;-><init>(Ljava/lang/Object;Landroid/content/Context;Lcom/android/server/power/batterysaver/BatterySavingStats;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;->addListener(Lcom/android/server/power/batterysaver/BatterySaverPolicy$BatterySaverPolicyListener;)V
-PLcom/android/server/power/batterysaver/BatterySaverPolicy;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/power/batterysaver/BatterySaverPolicy;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/power/batterysaver/BatterySaverPolicy;->dumpMap(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArrayMap;)V
-PLcom/android/server/power/batterysaver/BatterySaverPolicy;->dumpPolicyLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;)V
+HPLcom/android/server/power/batterysaver/BatterySaverPolicy;->dumpPolicyLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;->getBatterySaverPolicy(I)Landroid/os/PowerSaveState;
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;->getCurrentPolicyLocked()Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;->getDeviceSpecificConfigResId()I
+PLcom/android/server/power/batterysaver/BatterySaverPolicy;->getFileValues(Z)Landroid/util/ArrayMap;
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;->getGlobalSetting(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;->getGpsMode()I
+PLcom/android/server/power/batterysaver/BatterySaverPolicy;->isLaunchBoostDisabled()Z
+PLcom/android/server/power/batterysaver/BatterySaverPolicy;->lambda$refreshSettings$1$BatterySaverPolicy([Lcom/android/server/power/batterysaver/BatterySaverPolicy$BatterySaverPolicyListener;)V
+PLcom/android/server/power/batterysaver/BatterySaverPolicy;->lambda$systemReady$0$BatterySaverPolicy(Z)V
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;->refreshSettings()V
 PLcom/android/server/power/batterysaver/BatterySaverPolicy;->resetAdaptivePolicyLocked()Z
 PLcom/android/server/power/batterysaver/BatterySaverPolicy;->setAdaptivePolicyLocked(Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;)Z
-PLcom/android/server/power/batterysaver/BatterySaverPolicy;->shouldAdvertiseIsEnabled()Z
+PLcom/android/server/power/batterysaver/BatterySaverPolicy;->setPolicyLevel(I)Z
+HPLcom/android/server/power/batterysaver/BatterySaverPolicy;->shouldAdvertiseIsEnabled()Z
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;->systemReady()V
+PLcom/android/server/power/batterysaver/BatterySaverPolicy;->toEventLogString()Ljava/lang/String;
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;->updateConstantsLocked(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;->updatePolicyDependenciesLocked()V
 HSPLcom/android/server/power/batterysaver/BatterySaverStateMachine$1;-><init>(Lcom/android/server/power/batterysaver/BatterySaverStateMachine;Landroid/os/Handler;)V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine$1;->onChange(Z)V
 HSPLcom/android/server/power/batterysaver/BatterySaverStateMachine;-><init>(Ljava/lang/Object;Landroid/content/Context;Lcom/android/server/power/batterysaver/BatterySaverController;)V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->access$000(Lcom/android/server/power/batterysaver/BatterySaverStateMachine;)Ljava/lang/Object;
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->access$100(Lcom/android/server/power/batterysaver/BatterySaverStateMachine;)V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->buildNotification(Ljava/lang/String;IILjava/lang/String;)Landroid/app/Notification;
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->buildNotification(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/app/Notification;
 HSPLcom/android/server/power/batterysaver/BatterySaverStateMachine;->doAutoBatterySaverLocked()V
-PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/power/batterysaver/BatterySaverStateMachine;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->dumpProto(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->enableBatterySaverLocked(ZZI)V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->enableBatterySaverLocked(ZZILjava/lang/String;)V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->ensureNotificationChannelExists(Landroid/app/NotificationManager;Ljava/lang/String;I)V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->getGlobalSetting(Ljava/lang/String;I)I
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->hideDynamicModeNotification()V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->hideNotification(I)V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->hideStickyDisabledNotification()V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->isAutomaticModeActiveLocked()Z
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->isDynamicModeActiveLocked()Z
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->isInAutomaticLowZoneLocked()Z
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->isInDynamicLowZoneLocked()Z
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->lambda$hideNotification$4$BatterySaverStateMachine(I)V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->lambda$new$1$BatterySaverStateMachine()V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->lambda$onBootCompleted$0$BatterySaverStateMachine()V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->lambda$triggerDynamicModeNotification$2$BatterySaverStateMachine()V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->lambda$triggerStickyDisabledNotification$3$BatterySaverStateMachine()V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->onBootCompleted()V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->putGlobalSetting(Ljava/lang/String;I)V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->refreshSettingsLocked()V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->runOnBgThread(Ljava/lang/Runnable;)V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->runOnBgThreadLazy(Ljava/lang/Runnable;I)V
+HPLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setAdaptiveBatterySaverEnabled(Z)Z
+HPLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setAdaptiveBatterySaverPolicy(Landroid/os/BatterySaverPolicyConfig;)Z
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setBatterySaverEnabledManually(Z)V
 HSPLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setBatteryStatus(ZIZ)V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setSettingsLocked(ZZIZIIZI)V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setStickyActive(Z)V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->triggerDynamicModeNotification()V
+PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->triggerStickyDisabledNotification()V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->updateStateLocked(ZZ)V
-PLcom/android/server/power/batterysaver/BatterySavingStats$BatterySaverState;->fromIndex(I)I
+HSPLcom/android/server/power/batterysaver/BatterySavingStats$BatterySaverState;->fromIndex(I)I
 HPLcom/android/server/power/batterysaver/BatterySavingStats$DozeState;->fromIndex(I)I
 HPLcom/android/server/power/batterysaver/BatterySavingStats$InteractiveState;->fromIndex(I)I
-PLcom/android/server/power/batterysaver/BatterySavingStats$Stat;-><init>()V
+HSPLcom/android/server/power/batterysaver/BatterySavingStats$Stat;-><init>()V
+PLcom/android/server/power/batterysaver/BatterySavingStats$Stat;->drainPerHour()D
+PLcom/android/server/power/batterysaver/BatterySavingStats$Stat;->totalMinutes()J
 HSPLcom/android/server/power/batterysaver/BatterySavingStats;-><init>(Ljava/lang/Object;)V
-PLcom/android/server/power/batterysaver/BatterySavingStats;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/power/batterysaver/BatterySavingStats;->dumpLineLocked(Ljava/io/PrintWriter;Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/power/batterysaver/BatterySavingStats;->endLastStateLocked(JII)V
-PLcom/android/server/power/batterysaver/BatterySavingStats;->getBatteryManagerInternal()Landroid/os/BatteryManagerInternal;
-PLcom/android/server/power/batterysaver/BatterySavingStats;->getStat(I)Lcom/android/server/power/batterysaver/BatterySavingStats$Stat;
-PLcom/android/server/power/batterysaver/BatterySavingStats;->injectBatteryLevel()I
-PLcom/android/server/power/batterysaver/BatterySavingStats;->injectBatteryPercent()I
-PLcom/android/server/power/batterysaver/BatterySavingStats;->injectCurrentTime()J
-PLcom/android/server/power/batterysaver/BatterySavingStats;->startCharging()V
-PLcom/android/server/power/batterysaver/BatterySavingStats;->startNewStateLocked(IJII)V
-PLcom/android/server/power/batterysaver/BatterySavingStats;->statesToIndex(III)I
-PLcom/android/server/power/batterysaver/BatterySavingStats;->transitionState(III)V
-PLcom/android/server/power/batterysaver/BatterySavingStats;->transitionStateLocked(I)V
+HPLcom/android/server/power/batterysaver/BatterySavingStats;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/power/batterysaver/BatterySavingStats;->dumpLineLocked(Ljava/io/PrintWriter;Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->endLastStateLocked(JII)V
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->getBatteryManagerInternal()Landroid/os/BatteryManagerInternal;
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->getStat(I)Lcom/android/server/power/batterysaver/BatterySavingStats$Stat;
+PLcom/android/server/power/batterysaver/BatterySavingStats;->getStat(III)Lcom/android/server/power/batterysaver/BatterySavingStats$Stat;
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->injectBatteryLevel()I
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->injectBatteryPercent()I
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->injectCurrentTime()J
+HPLcom/android/server/power/batterysaver/BatterySavingStats;->startCharging()V
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->startNewStateLocked(IJII)V
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->statesToIndex(III)I
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->transitionState(III)V
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->transitionStateLocked(I)V
 HSPLcom/android/server/power/batterysaver/CpuFrequencies;-><init>()V
 HSPLcom/android/server/power/batterysaver/CpuFrequencies;->addToSysFileMap(Ljava/util/Map;)V
 HSPLcom/android/server/power/batterysaver/CpuFrequencies;->parseString(Ljava/lang/String;)Lcom/android/server/power/batterysaver/CpuFrequencies;
 HSPLcom/android/server/power/batterysaver/CpuFrequencies;->toSysFileMap()Landroid/util/ArrayMap;
 HSPLcom/android/server/power/batterysaver/FileUpdater;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/power/batterysaver/FileUpdater;-><init>(Landroid/content/Context;Landroid/os/Looper;II)V
+PLcom/android/server/power/batterysaver/FileUpdater;->cloneMap(Landroid/util/ArrayMap;)Landroid/util/ArrayMap;
+PLcom/android/server/power/batterysaver/FileUpdater;->doWtf(Ljava/lang/String;)V
+HPLcom/android/server/power/batterysaver/FileUpdater;->ensureDefaultLoaded(Ljava/lang/String;)Z
+PLcom/android/server/power/batterysaver/FileUpdater;->getKeysString(Ljava/util/Map;)Ljava/lang/String;
+HPLcom/android/server/power/batterysaver/FileUpdater;->handleWriteOnHandler()V
 HSPLcom/android/server/power/batterysaver/FileUpdater;->injectDefaultValuesFilename()Ljava/io/File;
+PLcom/android/server/power/batterysaver/FileUpdater;->injectReadFromFileTrimmed(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/power/batterysaver/FileUpdater;->injectShouldSkipWrite()Z
+HPLcom/android/server/power/batterysaver/FileUpdater;->injectWriteToFile(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/power/batterysaver/FileUpdater;->injectWtf(Ljava/lang/String;Ljava/lang/Throwable;)V
+HPLcom/android/server/power/batterysaver/FileUpdater;->lambda$new$0$FileUpdater()V
 HSPLcom/android/server/power/batterysaver/FileUpdater;->loadDefaultValuesLocked()Z
+HPLcom/android/server/power/batterysaver/FileUpdater;->restoreDefault()V
+PLcom/android/server/power/batterysaver/FileUpdater;->saveDefaultValuesLocked()V
+HPLcom/android/server/power/batterysaver/FileUpdater;->scheduleRetry()V
 HSPLcom/android/server/power/batterysaver/FileUpdater;->systemReady(Z)V
+HPLcom/android/server/power/batterysaver/FileUpdater;->writeFiles(Landroid/util/ArrayMap;)V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$1cbVOJkW_ULFS1xH-T-tbALCzHI;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$1cbVOJkW_ULFS1xH-T-tbALCzHI;-><init>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$1cbVOJkW_ULFS1xH-T-tbALCzHI;->accept(Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$FH95Crnc6zH421SxRw9RxPyl0YY;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$FH95Crnc6zH421SxRw9RxPyl0YY;-><init>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$FH95Crnc6zH421SxRw9RxPyl0YY;->accept(Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$KGsYx3sHW6vGymod4UmBTazYSks;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$KGsYx3sHW6vGymod4UmBTazYSks;-><init>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$KGsYx3sHW6vGymod4UmBTazYSks;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$L2EQSyIHled1ZVO5GCaBXmvtCQQ;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$L2EQSyIHled1ZVO5GCaBXmvtCQQ;-><init>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$L2EQSyIHled1ZVO5GCaBXmvtCQQ;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$aHc-cJYzTXxafcxxvfW2janFHIc;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$aHc-cJYzTXxafcxxvfW2janFHIc;-><init>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$aHc-cJYzTXxafcxxvfW2janFHIc;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$jrFOjxtIoMNm8S0KNTqIDHuv4oY;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$jrFOjxtIoMNm8S0KNTqIDHuv4oY;-><init>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$jrFOjxtIoMNm8S0KNTqIDHuv4oY;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$pgSurbN2geCgHp9vfTAIFm5XvgQ;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$pgSurbN2geCgHp9vfTAIFm5XvgQ;-><init>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$pgSurbN2geCgHp9vfTAIFm5XvgQ;->accept(Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$ru7USNI_O2DIDwflMPlEsqA_IY4;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$ru7USNI_O2DIDwflMPlEsqA_IY4;-><init>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$ru7USNI_O2DIDwflMPlEsqA_IY4;->accept(Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$tI07K2u4Z5L72sd1hvSEunGclrg;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$tI07K2u4Z5L72sd1hvSEunGclrg;-><init>()V
+PLcom/android/server/print/-$$Lambda$RemotePrintService$tI07K2u4Z5L72sd1hvSEunGclrg;->accept(Ljava/lang/Object;)V
 PLcom/android/server/print/-$$Lambda$UserState$LdWYUAKz4cbWqoxOD4oZ_ZslKdg;-><clinit>()V
 PLcom/android/server/print/-$$Lambda$UserState$LdWYUAKz4cbWqoxOD4oZ_ZslKdg;-><init>()V
 PLcom/android/server/print/-$$Lambda$UserState$LdWYUAKz4cbWqoxOD4oZ_ZslKdg;->accept(Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$CjemUQP8s7wG-dq-pIggj9Oze6I;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$CjemUQP8s7wG-dq-pIggj9Oze6I;-><init>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$CjemUQP8s7wG-dq-pIggj9Oze6I;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$MT8AtQ4cegoEAucY7Fm8C8TCrjo;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$MT8AtQ4cegoEAucY7Fm8C8TCrjo;-><init>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$MT8AtQ4cegoEAucY7Fm8C8TCrjo;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$Ou3LUs53hzSrIma0FHPj2g3gePc;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$Ou3LUs53hzSrIma0FHPj2g3gePc;-><init>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$Ou3LUs53hzSrIma0FHPj2g3gePc;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$TAWPnRTK22Veu2-mmKNSJCvnBoU;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$TAWPnRTK22Veu2-mmKNSJCvnBoU;-><init>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$TAWPnRTK22Veu2-mmKNSJCvnBoU;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$TNeLGO1RKf0CucB-BMQ_M0UyoRs;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$TNeLGO1RKf0CucB-BMQ_M0UyoRs;-><init>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$TNeLGO1RKf0CucB-BMQ_M0UyoRs;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$_XymASnzhemmGwK4Nu5RUIT0ahk;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$_XymASnzhemmGwK4Nu5RUIT0ahk;-><init>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$_XymASnzhemmGwK4Nu5RUIT0ahk;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$iQrjLK8luujjjp1uW3VGCsAZK_g;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$iQrjLK8luujjjp1uW3VGCsAZK_g;-><init>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$iQrjLK8luujjjp1uW3VGCsAZK_g;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$lfSsgTy_1NLRRkjOH_yL2Tk_x2w;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$lfSsgTy_1NLRRkjOH_yL2Tk_x2w;-><init>()V
+PLcom/android/server/print/-$$Lambda$UserState$PrinterDiscoverySessionMediator$lfSsgTy_1NLRRkjOH_yL2Tk_x2w;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$UserState$d-WQxYwbHYb6N0le5ohwQsWVdjw;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$UserState$d-WQxYwbHYb6N0le5ohwQsWVdjw;-><init>()V
+PLcom/android/server/print/-$$Lambda$UserState$d-WQxYwbHYb6N0le5ohwQsWVdjw;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/-$$Lambda$UserState$f3loorfBpq9Tu3Vl5vt4Ul321ok;-><clinit>()V
+PLcom/android/server/print/-$$Lambda$UserState$f3loorfBpq9Tu3Vl5vt4Ul321ok;-><init>()V
+PLcom/android/server/print/-$$Lambda$UserState$f3loorfBpq9Tu3Vl5vt4Ul321ok;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/print/PrintManagerService$PrintManagerImpl$1;-><init>(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;Landroid/os/Handler;Landroid/net/Uri;)V
 HSPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;-><init>(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;)V
-PLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->hadPrintService(Lcom/android/server/print/UserState;Ljava/lang/String;)Z
-PLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->hasPrintService(Ljava/lang/String;)Z
-PLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->onPackageAdded(Ljava/lang/String;I)V
-PLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->hadPrintService(Lcom/android/server/print/UserState;Ljava/lang/String;)Z
+HPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->hasPrintService(Ljava/lang/String;)Z
+HPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+HPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->onPackageAdded(Ljava/lang/String;I)V
+HPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->onPackageRemoved(Ljava/lang/String;I)V
 PLcom/android/server/print/PrintManagerService$PrintManagerImpl$3;-><init>(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;I)V
 PLcom/android/server/print/PrintManagerService$PrintManagerImpl$3;->run()V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl$4;-><init>(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl$4;->run()V
 HSPLcom/android/server/print/PrintManagerService$PrintManagerImpl;-><init>(Lcom/android/server/print/PrintManagerService;Landroid/content/Context;)V
 PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->access$000(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->access$100(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;I)V
 PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->access$200(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;)Ljava/lang/Object;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->access$300(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;)Landroid/util/SparseArray;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->access$400(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;)Landroid/content/Context;
 PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->access$500(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;)Landroid/os/UserManager;
 PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->access$600(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;IZZ)Lcom/android/server/print/UserState;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->addPrintJobStateChangeListener(Landroid/print/IPrintJobStateChangeListener;II)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->addPrintServiceRecommendationsChangeListener(Landroid/printservice/recommendation/IRecommendationsChangeListener;I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->addPrintServicesChangeListener(Landroid/print/IPrintServicesChangeListener;I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->createPrinterDiscoverySession(Landroid/print/IPrinterDiscoveryObserver;I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->destroyPrinterDiscoverySession(Landroid/print/IPrinterDiscoveryObserver;I)V
 PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/util/ArrayList;)V
 PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->getOrCreateUserStateLocked(IZZ)Lcom/android/server/print/UserState;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->getCurrentUserId()I
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->getOrCreateUserStateLocked(IZ)Lcom/android/server/print/UserState;
+HPLcom/android/server/print/PrintManagerService$PrintManagerImpl;->getOrCreateUserStateLocked(IZZ)Lcom/android/server/print/UserState;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->getPrintJobInfos(II)Ljava/util/List;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->getPrintServiceRecommendations(I)Ljava/util/List;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->getPrintServices(II)Ljava/util/List;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->handleUserStopped(I)V
 PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->handleUserUnlocked(I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->isPrintingEnabled()Z
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->print(Ljava/lang/String;Landroid/print/IPrintDocumentAdapter;Landroid/print/PrintAttributes;Ljava/lang/String;II)Landroid/os/Bundle;
 HSPLcom/android/server/print/PrintManagerService$PrintManagerImpl;->registerBroadcastReceivers()V
 HSPLcom/android/server/print/PrintManagerService$PrintManagerImpl;->registerContentObservers()V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->removePrintJobStateChangeListener(Landroid/print/IPrintJobStateChangeListener;I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->removePrintServiceRecommendationsChangeListener(Landroid/printservice/recommendation/IRecommendationsChangeListener;I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->removePrintServicesChangeListener(Landroid/print/IPrintServicesChangeListener;I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->resolveCallingAppEnforcingPermissions(I)I
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->resolveCallingPackageNameEnforcingSecurity(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->resolveCallingProfileParentLocked(I)I
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->resolveCallingUserEnforcingPermissions(I)I
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->startPrinterDiscovery(Landroid/print/IPrinterDiscoveryObserver;Ljava/util/List;I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->startPrinterStateTracking(Landroid/print/PrinterId;I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->stopPrinterDiscovery(Landroid/print/IPrinterDiscoveryObserver;I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->stopPrinterStateTracking(Landroid/print/PrinterId;I)V
 HSPLcom/android/server/print/PrintManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/print/PrintManagerService;->onStart()V
+PLcom/android/server/print/PrintManagerService;->onStopUser(I)V
 PLcom/android/server/print/PrintManagerService;->onUnlockUser(I)V
+PLcom/android/server/print/RemotePrintService$4;-><init>(Lcom/android/server/print/RemotePrintService;)V
+PLcom/android/server/print/RemotePrintService$4;->run()V
+PLcom/android/server/print/RemotePrintService$6;-><init>(Lcom/android/server/print/RemotePrintService;Ljava/util/List;)V
+PLcom/android/server/print/RemotePrintService$6;->run()V
 PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;-><init>(Lcom/android/server/print/RemotePrintService;)V
+PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->getPrintJobInfo(Landroid/print/PrintJobId;)Landroid/print/PrintJobInfo;
+PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->onPrintersAdded(Landroid/content/pm/ParceledListSlice;)V
+PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->onPrintersRemoved(Landroid/content/pm/ParceledListSlice;)V
+PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->setPrintJobState(Landroid/print/PrintJobId;ILjava/lang/String;)Z
+PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->throwIfPrinterIdTampered(Landroid/content/ComponentName;Landroid/print/PrinterId;)V
+PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->throwIfPrinterIdsForPrinterInfoTampered(Landroid/content/ComponentName;Ljava/util/List;)V
+PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->throwIfPrinterIdsTampered(Landroid/content/ComponentName;Ljava/util/List;)V
+PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->writePrintJobData(Landroid/os/ParcelFileDescriptor;Landroid/print/PrintJobId;)V
 PLcom/android/server/print/RemotePrintService$RemoteServiceConneciton;-><init>(Lcom/android/server/print/RemotePrintService;)V
 PLcom/android/server/print/RemotePrintService$RemoteServiceConneciton;-><init>(Lcom/android/server/print/RemotePrintService;Lcom/android/server/print/RemotePrintService$1;)V
+PLcom/android/server/print/RemotePrintService$RemoteServiceConneciton;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/print/RemotePrintService;-><init>(Landroid/content/Context;Landroid/content/ComponentName;ILcom/android/server/print/RemotePrintSpooler;Lcom/android/server/print/RemotePrintService$PrintServiceCallbacks;)V
+PLcom/android/server/print/RemotePrintService;->access$1100(Lcom/android/server/print/RemotePrintService;)Z
+PLcom/android/server/print/RemotePrintService;->access$1200(Lcom/android/server/print/RemotePrintService;)Z
+PLcom/android/server/print/RemotePrintService;->access$1202(Lcom/android/server/print/RemotePrintService;Z)Z
+PLcom/android/server/print/RemotePrintService;->access$1500(Lcom/android/server/print/RemotePrintService;)Landroid/printservice/IPrintService;
+PLcom/android/server/print/RemotePrintService;->access$1502(Lcom/android/server/print/RemotePrintService;Landroid/printservice/IPrintService;)Landroid/printservice/IPrintService;
+PLcom/android/server/print/RemotePrintService;->access$1700(Lcom/android/server/print/RemotePrintService;)Lcom/android/server/print/RemotePrintService$RemotePrintServiceClient;
+PLcom/android/server/print/RemotePrintService;->access$1800(Lcom/android/server/print/RemotePrintService;)Z
+PLcom/android/server/print/RemotePrintService;->access$1802(Lcom/android/server/print/RemotePrintService;Z)Z
+PLcom/android/server/print/RemotePrintService;->access$1900(Lcom/android/server/print/RemotePrintService;)Z
+PLcom/android/server/print/RemotePrintService;->access$2100(Lcom/android/server/print/RemotePrintService;)Ljava/lang/Object;
+PLcom/android/server/print/RemotePrintService;->access$2300(Lcom/android/server/print/RemotePrintService;)Ljava/util/List;
+PLcom/android/server/print/RemotePrintService;->access$2600(Lcom/android/server/print/RemotePrintService;)Landroid/content/ComponentName;
+PLcom/android/server/print/RemotePrintService;->access$2700(Lcom/android/server/print/RemotePrintService;)Lcom/android/server/print/RemotePrintSpooler;
+PLcom/android/server/print/RemotePrintService;->access$2800(Lcom/android/server/print/RemotePrintService;)Lcom/android/server/print/RemotePrintService$PrintServiceCallbacks;
+PLcom/android/server/print/RemotePrintService;->access$400(Lcom/android/server/print/RemotePrintService;)V
+PLcom/android/server/print/RemotePrintService;->access$600(Lcom/android/server/print/RemotePrintService;Ljava/util/List;)V
+PLcom/android/server/print/RemotePrintService;->createPrinterDiscoverySession()V
+PLcom/android/server/print/RemotePrintService;->destroy()V
+PLcom/android/server/print/RemotePrintService;->destroyPrinterDiscoverySession()V
 PLcom/android/server/print/RemotePrintService;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;)V
+PLcom/android/server/print/RemotePrintService;->ensureBound()V
+PLcom/android/server/print/RemotePrintService;->ensureUnbound()V
 PLcom/android/server/print/RemotePrintService;->getComponentName()Landroid/content/ComponentName;
+PLcom/android/server/print/RemotePrintService;->handleCreatePrinterDiscoverySession()V
+PLcom/android/server/print/RemotePrintService;->handleDestroy()V
+PLcom/android/server/print/RemotePrintService;->handleDestroyPrinterDiscoverySession()V
+PLcom/android/server/print/RemotePrintService;->handleOnAllPrintJobsHandled()V
+PLcom/android/server/print/RemotePrintService;->handleOnPrintJobQueued(Landroid/print/PrintJobInfo;)V
+PLcom/android/server/print/RemotePrintService;->handleStartPrinterDiscovery(Ljava/util/List;)V
+PLcom/android/server/print/RemotePrintService;->handleStartPrinterStateTracking(Landroid/print/PrinterId;)V
+PLcom/android/server/print/RemotePrintService;->handleStopPrinterDiscovery()V
+PLcom/android/server/print/RemotePrintService;->handleStopPrinterStateTracking(Landroid/print/PrinterId;)V
 PLcom/android/server/print/RemotePrintService;->isBound()Z
+PLcom/android/server/print/RemotePrintService;->lambda$1cbVOJkW_ULFS1xH-T-tbALCzHI(Lcom/android/server/print/RemotePrintService;)V
+PLcom/android/server/print/RemotePrintService;->lambda$FH95Crnc6zH421SxRw9RxPyl0YY(Lcom/android/server/print/RemotePrintService;)V
+PLcom/android/server/print/RemotePrintService;->lambda$KGsYx3sHW6vGymod4UmBTazYSks(Lcom/android/server/print/RemotePrintService;Landroid/print/PrintJobInfo;)V
+PLcom/android/server/print/RemotePrintService;->lambda$L2EQSyIHled1ZVO5GCaBXmvtCQQ(Lcom/android/server/print/RemotePrintService;Landroid/print/PrinterId;)V
+PLcom/android/server/print/RemotePrintService;->lambda$aHc-cJYzTXxafcxxvfW2janFHIc(Lcom/android/server/print/RemotePrintService;Landroid/print/PrinterId;)V
+PLcom/android/server/print/RemotePrintService;->lambda$jrFOjxtIoMNm8S0KNTqIDHuv4oY(Lcom/android/server/print/RemotePrintService;Ljava/util/List;)V
+PLcom/android/server/print/RemotePrintService;->lambda$pgSurbN2geCgHp9vfTAIFm5XvgQ(Lcom/android/server/print/RemotePrintService;)V
+PLcom/android/server/print/RemotePrintService;->lambda$ru7USNI_O2DIDwflMPlEsqA_IY4(Lcom/android/server/print/RemotePrintService;)V
+PLcom/android/server/print/RemotePrintService;->lambda$tI07K2u4Z5L72sd1hvSEunGclrg(Lcom/android/server/print/RemotePrintService;)V
+PLcom/android/server/print/RemotePrintService;->onAllPrintJobsHandled()V
+PLcom/android/server/print/RemotePrintService;->onPrintJobQueued(Landroid/print/PrintJobInfo;)V
+PLcom/android/server/print/RemotePrintService;->startPrinterDiscovery(Ljava/util/List;)V
+PLcom/android/server/print/RemotePrintService;->startPrinterStateTracking(Landroid/print/PrinterId;)V
+PLcom/android/server/print/RemotePrintService;->stopPrinterDiscovery()V
+PLcom/android/server/print/RemotePrintService;->stopPrinterStateTracking(Landroid/print/PrinterId;)V
+PLcom/android/server/print/RemotePrintService;->stopTrackingAllPrinters()V
+PLcom/android/server/print/RemotePrintServiceRecommendationService$Connection$1;-><init>(Lcom/android/server/print/RemotePrintServiceRecommendationService$Connection;)V
+PLcom/android/server/print/RemotePrintServiceRecommendationService$Connection$1;->onRecommendationsUpdated(Ljava/util/List;)V
+PLcom/android/server/print/RemotePrintServiceRecommendationService$Connection;-><init>(Lcom/android/server/print/RemotePrintServiceRecommendationService;Lcom/android/server/print/RemotePrintServiceRecommendationService$RemotePrintServiceRecommendationServiceCallbacks;)V
+PLcom/android/server/print/RemotePrintServiceRecommendationService$Connection;->access$300(Lcom/android/server/print/RemotePrintServiceRecommendationService$Connection;)Lcom/android/server/print/RemotePrintServiceRecommendationService$RemotePrintServiceRecommendationServiceCallbacks;
+PLcom/android/server/print/RemotePrintServiceRecommendationService$Connection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/print/RemotePrintServiceRecommendationService;-><init>(Landroid/content/Context;Landroid/os/UserHandle;Lcom/android/server/print/RemotePrintServiceRecommendationService$RemotePrintServiceRecommendationServiceCallbacks;)V
+PLcom/android/server/print/RemotePrintServiceRecommendationService;->access$000(Lcom/android/server/print/RemotePrintServiceRecommendationService;)Ljava/lang/Object;
+PLcom/android/server/print/RemotePrintServiceRecommendationService;->access$100(Lcom/android/server/print/RemotePrintServiceRecommendationService;)Landroid/printservice/recommendation/IRecommendationService;
+PLcom/android/server/print/RemotePrintServiceRecommendationService;->access$102(Lcom/android/server/print/RemotePrintServiceRecommendationService;Landroid/printservice/recommendation/IRecommendationService;)Landroid/printservice/recommendation/IRecommendationService;
+PLcom/android/server/print/RemotePrintServiceRecommendationService;->access$200(Lcom/android/server/print/RemotePrintServiceRecommendationService;)Z
+PLcom/android/server/print/RemotePrintServiceRecommendationService;->close()V
+PLcom/android/server/print/RemotePrintServiceRecommendationService;->finalize()V
+PLcom/android/server/print/RemotePrintServiceRecommendationService;->getServiceIntent(Landroid/os/UserHandle;)Landroid/content/Intent;
 PLcom/android/server/print/RemotePrintSpooler$BasePrintSpoolerServiceCallbacks;-><init>()V
 PLcom/android/server/print/RemotePrintSpooler$BasePrintSpoolerServiceCallbacks;-><init>(Lcom/android/server/print/RemotePrintSpooler$1;)V
 PLcom/android/server/print/RemotePrintSpooler$ClearCustomPrinterIconCacheCaller$1;-><init>(Lcom/android/server/print/RemotePrintSpooler$ClearCustomPrinterIconCacheCaller;)V
+PLcom/android/server/print/RemotePrintSpooler$ClearCustomPrinterIconCacheCaller$1;->customPrinterIconCacheCleared(I)V
 PLcom/android/server/print/RemotePrintSpooler$ClearCustomPrinterIconCacheCaller;-><init>()V
+PLcom/android/server/print/RemotePrintSpooler$ClearCustomPrinterIconCacheCaller;->access$1100(Lcom/android/server/print/RemotePrintSpooler$ClearCustomPrinterIconCacheCaller;Ljava/lang/Object;I)V
+PLcom/android/server/print/RemotePrintSpooler$ClearCustomPrinterIconCacheCaller;->clearCustomPrinterIconCache(Landroid/print/IPrintSpooler;)Ljava/lang/Void;
 PLcom/android/server/print/RemotePrintSpooler$GetCustomPrinterIconCaller$1;-><init>(Lcom/android/server/print/RemotePrintSpooler$GetCustomPrinterIconCaller;)V
 PLcom/android/server/print/RemotePrintSpooler$GetCustomPrinterIconCaller;-><init>()V
 PLcom/android/server/print/RemotePrintSpooler$GetPrintJobInfoCaller$1;-><init>(Lcom/android/server/print/RemotePrintSpooler$GetPrintJobInfoCaller;)V
+PLcom/android/server/print/RemotePrintSpooler$GetPrintJobInfoCaller$1;->onGetPrintJobInfoResult(Landroid/print/PrintJobInfo;I)V
 PLcom/android/server/print/RemotePrintSpooler$GetPrintJobInfoCaller;-><init>()V
+PLcom/android/server/print/RemotePrintSpooler$GetPrintJobInfoCaller;->access$700(Lcom/android/server/print/RemotePrintSpooler$GetPrintJobInfoCaller;Ljava/lang/Object;I)V
+PLcom/android/server/print/RemotePrintSpooler$GetPrintJobInfoCaller;->getPrintJobInfo(Landroid/print/IPrintSpooler;Landroid/print/PrintJobId;I)Landroid/print/PrintJobInfo;
 PLcom/android/server/print/RemotePrintSpooler$GetPrintJobInfosCaller$1;-><init>(Lcom/android/server/print/RemotePrintSpooler$GetPrintJobInfosCaller;)V
+PLcom/android/server/print/RemotePrintSpooler$GetPrintJobInfosCaller$1;->onGetPrintJobInfosResult(Ljava/util/List;I)V
 PLcom/android/server/print/RemotePrintSpooler$GetPrintJobInfosCaller;-><init>()V
+PLcom/android/server/print/RemotePrintSpooler$GetPrintJobInfosCaller;->access$600(Lcom/android/server/print/RemotePrintSpooler$GetPrintJobInfosCaller;Ljava/lang/Object;I)V
+PLcom/android/server/print/RemotePrintSpooler$GetPrintJobInfosCaller;->getPrintJobInfos(Landroid/print/IPrintSpooler;Landroid/content/ComponentName;II)Ljava/util/List;
 PLcom/android/server/print/RemotePrintSpooler$MyServiceConnection;-><init>(Lcom/android/server/print/RemotePrintSpooler;)V
 PLcom/android/server/print/RemotePrintSpooler$MyServiceConnection;-><init>(Lcom/android/server/print/RemotePrintSpooler;Lcom/android/server/print/RemotePrintSpooler$1;)V
 PLcom/android/server/print/RemotePrintSpooler$MyServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/print/RemotePrintSpooler$OnCustomPrinterIconLoadedCaller$1;-><init>(Lcom/android/server/print/RemotePrintSpooler$OnCustomPrinterIconLoadedCaller;)V
 PLcom/android/server/print/RemotePrintSpooler$OnCustomPrinterIconLoadedCaller;-><init>()V
 PLcom/android/server/print/RemotePrintSpooler$PrintSpoolerClient;-><init>(Lcom/android/server/print/RemotePrintSpooler;)V
+PLcom/android/server/print/RemotePrintSpooler$PrintSpoolerClient;->onAllPrintJobsForServiceHandled(Landroid/content/ComponentName;)V
 PLcom/android/server/print/RemotePrintSpooler$PrintSpoolerClient;->onAllPrintJobsHandled()V
+PLcom/android/server/print/RemotePrintSpooler$PrintSpoolerClient;->onPrintJobQueued(Landroid/print/PrintJobInfo;)V
+PLcom/android/server/print/RemotePrintSpooler$PrintSpoolerClient;->onPrintJobStateChanged(Landroid/print/PrintJobInfo;)V
 PLcom/android/server/print/RemotePrintSpooler$SetPrintJobStateCaller$1;-><init>(Lcom/android/server/print/RemotePrintSpooler$SetPrintJobStateCaller;)V
+PLcom/android/server/print/RemotePrintSpooler$SetPrintJobStateCaller$1;->onSetPrintJobStateResult(ZI)V
 PLcom/android/server/print/RemotePrintSpooler$SetPrintJobStateCaller;-><init>()V
+PLcom/android/server/print/RemotePrintSpooler$SetPrintJobStateCaller;->access$800(Lcom/android/server/print/RemotePrintSpooler$SetPrintJobStateCaller;Ljava/lang/Object;I)V
+PLcom/android/server/print/RemotePrintSpooler$SetPrintJobStateCaller;->setPrintJobState(Landroid/print/IPrintSpooler;Landroid/print/PrintJobId;ILjava/lang/String;)Z
 PLcom/android/server/print/RemotePrintSpooler$SetPrintJobTagCaller$1;-><init>(Lcom/android/server/print/RemotePrintSpooler$SetPrintJobTagCaller;)V
 PLcom/android/server/print/RemotePrintSpooler$SetPrintJobTagCaller;-><init>()V
 PLcom/android/server/print/RemotePrintSpooler;-><clinit>()V
 PLcom/android/server/print/RemotePrintSpooler;-><init>(Landroid/content/Context;IZLcom/android/server/print/RemotePrintSpooler$PrintSpoolerCallbacks;)V
 PLcom/android/server/print/RemotePrintSpooler;->access$100(Lcom/android/server/print/RemotePrintSpooler;)Ljava/lang/Object;
+PLcom/android/server/print/RemotePrintSpooler;->access$1300(Lcom/android/server/print/RemotePrintSpooler;)Lcom/android/server/print/RemotePrintSpooler$PrintSpoolerCallbacks;
 PLcom/android/server/print/RemotePrintSpooler;->access$1400(Lcom/android/server/print/RemotePrintSpooler;)V
+PLcom/android/server/print/RemotePrintSpooler;->access$1500(Lcom/android/server/print/RemotePrintSpooler;Landroid/print/PrintJobInfo;)V
 PLcom/android/server/print/RemotePrintSpooler;->access$202(Lcom/android/server/print/RemotePrintSpooler;Landroid/print/IPrintSpooler;)Landroid/print/IPrintSpooler;
 PLcom/android/server/print/RemotePrintSpooler;->access$300(Lcom/android/server/print/RemotePrintSpooler;)V
 PLcom/android/server/print/RemotePrintSpooler;->bindLocked()V
 PLcom/android/server/print/RemotePrintSpooler;->clearClientLocked()V
+PLcom/android/server/print/RemotePrintSpooler;->clearCustomPrinterIconCache()V
+PLcom/android/server/print/RemotePrintSpooler;->destroy()V
 PLcom/android/server/print/RemotePrintSpooler;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;)V
+PLcom/android/server/print/RemotePrintSpooler;->getPrintJobInfo(Landroid/print/PrintJobId;I)Landroid/print/PrintJobInfo;
+PLcom/android/server/print/RemotePrintSpooler;->getPrintJobInfos(Landroid/content/ComponentName;II)Ljava/util/List;
 PLcom/android/server/print/RemotePrintSpooler;->getRemoteInstanceLazy()Landroid/print/IPrintSpooler;
-PLcom/android/server/print/RemotePrintSpooler;->increasePriority()V
+HPLcom/android/server/print/RemotePrintSpooler;->increasePriority()V
 PLcom/android/server/print/RemotePrintSpooler;->onAllPrintJobsHandled()V
+PLcom/android/server/print/RemotePrintSpooler;->onPrintJobStateChanged(Landroid/print/PrintJobInfo;)V
 PLcom/android/server/print/RemotePrintSpooler;->pruneApprovedPrintServices(Ljava/util/List;)V
 PLcom/android/server/print/RemotePrintSpooler;->removeObsoletePrintJobs()V
 PLcom/android/server/print/RemotePrintSpooler;->setClientLocked()V
+PLcom/android/server/print/RemotePrintSpooler;->setPrintJobState(Landroid/print/PrintJobId;ILjava/lang/String;)Z
 PLcom/android/server/print/RemotePrintSpooler;->throwIfCalledOnMainThread()V
 PLcom/android/server/print/RemotePrintSpooler;->throwIfDestroyedLocked()V
 PLcom/android/server/print/RemotePrintSpooler;->unbindLocked()V
+PLcom/android/server/print/RemotePrintSpooler;->writePrintJobData(Landroid/os/ParcelFileDescriptor;Landroid/print/PrintJobId;)V
+PLcom/android/server/print/UserState$1;-><init>(Lcom/android/server/print/UserState;)V
+PLcom/android/server/print/UserState$1;->onDestroyed()V
+PLcom/android/server/print/UserState$2;-><init>(Lcom/android/server/print/UserState;Landroid/print/IPrintJobStateChangeListener;I)V
+PLcom/android/server/print/UserState$3;-><init>(Lcom/android/server/print/UserState;Landroid/print/IPrintServicesChangeListener;)V
+PLcom/android/server/print/UserState$4;-><init>(Lcom/android/server/print/UserState;Landroid/printservice/recommendation/IRecommendationsChangeListener;)V
+PLcom/android/server/print/UserState$ListenerRecord;-><init>(Lcom/android/server/print/UserState;Landroid/os/IInterface;)V
+PLcom/android/server/print/UserState$ListenerRecord;->destroy()V
+PLcom/android/server/print/UserState$PrintJobForAppCache$1;-><init>(Lcom/android/server/print/UserState$PrintJobForAppCache;Landroid/os/IBinder;I)V
+PLcom/android/server/print/UserState$PrintJobForAppCache$1;->binderDied()V
 PLcom/android/server/print/UserState$PrintJobForAppCache;-><init>(Lcom/android/server/print/UserState;)V
 PLcom/android/server/print/UserState$PrintJobForAppCache;-><init>(Lcom/android/server/print/UserState;Lcom/android/server/print/UserState$1;)V
+PLcom/android/server/print/UserState$PrintJobForAppCache;->access$1000(Lcom/android/server/print/UserState$PrintJobForAppCache;)Landroid/util/SparseArray;
 PLcom/android/server/print/UserState$PrintJobForAppCache;->dumpLocked(Lcom/android/internal/util/dump/DualDumpOutputStream;)V
+PLcom/android/server/print/UserState$PrintJobForAppCache;->getPrintJobs(I)Ljava/util/List;
+PLcom/android/server/print/UserState$PrintJobForAppCache;->onPrintJobCreated(Landroid/os/IBinder;ILandroid/print/PrintJobInfo;)Z
+PLcom/android/server/print/UserState$PrintJobForAppCache;->onPrintJobStateChanged(Landroid/print/PrintJobInfo;)V
+PLcom/android/server/print/UserState$PrintJobStateChangeListenerRecord;-><init>(Lcom/android/server/print/UserState;Landroid/print/IPrintJobStateChangeListener;I)V
+PLcom/android/server/print/UserState$PrintJobStateChangeListenerRecord;->destroy()V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$1;-><init>(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;-><init>(Lcom/android/server/print/UserState;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->addObserverLocked(Landroid/print/IPrinterDiscoveryObserver;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->destroyLocked()V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handleDispatchCreatePrinterDiscoverySession(Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handleDispatchDestroyPrinterDiscoverySession(Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handleDispatchPrintersAdded(Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handleDispatchPrintersRemoved(Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handleDispatchStartPrinterDiscovery(Ljava/util/List;Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handleDispatchStopPrinterDiscovery(Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handlePrintersAdded(Landroid/print/IPrinterDiscoveryObserver;Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handlePrintersRemoved(Landroid/print/IPrinterDiscoveryObserver;Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handleStartPrinterStateTracking(Lcom/android/server/print/RemotePrintService;Landroid/print/PrinterId;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handleStopPrinterStateTracking(Lcom/android/server/print/RemotePrintService;Landroid/print/PrinterId;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->lambda$CjemUQP8s7wG-dq-pIggj9Oze6I(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->lambda$MT8AtQ4cegoEAucY7Fm8C8TCrjo(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Ljava/util/List;Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->lambda$Ou3LUs53hzSrIma0FHPj2g3gePc(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->lambda$TAWPnRTK22Veu2-mmKNSJCvnBoU(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->lambda$TNeLGO1RKf0CucB-BMQ_M0UyoRs(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->lambda$_XymASnzhemmGwK4Nu5RUIT0ahk(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Lcom/android/server/print/RemotePrintService;Landroid/print/PrinterId;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->lambda$iQrjLK8luujjjp1uW3VGCsAZK_g(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Lcom/android/server/print/RemotePrintService;Landroid/print/PrinterId;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->lambda$lfSsgTy_1NLRRkjOH_yL2Tk_x2w(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->onPrintersAddedLocked(Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->onPrintersRemovedLocked(Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->removeObserverLocked(Landroid/print/IPrinterDiscoveryObserver;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->startPrinterDiscoveryLocked(Landroid/print/IPrinterDiscoveryObserver;Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->startPrinterStateTrackingLocked(Landroid/print/PrinterId;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->stopPrinterDiscoveryLocked(Landroid/print/IPrinterDiscoveryObserver;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->stopPrinterStateTrackingLocked(Landroid/print/PrinterId;)V
 PLcom/android/server/print/UserState;-><init>(Landroid/content/Context;ILjava/lang/Object;Z)V
+PLcom/android/server/print/UserState;->access$102(Lcom/android/server/print/UserState;Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;)Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;
+PLcom/android/server/print/UserState;->access$200(Lcom/android/server/print/UserState;)Ljava/lang/Object;
+PLcom/android/server/print/UserState;->access$600(Lcom/android/server/print/UserState;)Landroid/util/ArrayMap;
+PLcom/android/server/print/UserState;->addPrintJobStateChangeListener(Landroid/print/IPrintJobStateChangeListener;I)V
+PLcom/android/server/print/UserState;->addPrintServiceRecommendationsChangeListener(Landroid/printservice/recommendation/IRecommendationsChangeListener;)V
+PLcom/android/server/print/UserState;->addPrintServicesChangeListener(Landroid/print/IPrintServicesChangeListener;)V
 PLcom/android/server/print/UserState;->addServiceLocked(Lcom/android/server/print/RemotePrintService;)V
+PLcom/android/server/print/UserState;->createPrinterDiscoverySession(Landroid/print/IPrinterDiscoveryObserver;)V
+PLcom/android/server/print/UserState;->destroyLocked()V
+PLcom/android/server/print/UserState;->destroyPrinterDiscoverySession(Landroid/print/IPrinterDiscoveryObserver;)V
 PLcom/android/server/print/UserState;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;)V
 PLcom/android/server/print/UserState;->getInstalledComponents()Ljava/util/ArrayList;
-PLcom/android/server/print/UserState;->getPrintServices(I)Ljava/util/List;
+PLcom/android/server/print/UserState;->getPrintJobInfos(I)Ljava/util/List;
+PLcom/android/server/print/UserState;->getPrintServiceRecommendations()Ljava/util/List;
+HPLcom/android/server/print/UserState;->getPrintServices(I)Ljava/util/List;
+PLcom/android/server/print/UserState;->handleDispatchPrintJobStateChanged(Landroid/print/PrintJobId;Ljava/util/function/IntSupplier;)V
+PLcom/android/server/print/UserState;->handleDispatchPrintServiceRecommendationsUpdated(Ljava/util/List;)V
 PLcom/android/server/print/UserState;->handleDispatchPrintServicesChanged()V
-PLcom/android/server/print/UserState;->increasePriority()V
+HPLcom/android/server/print/UserState;->increasePriority()V
 PLcom/android/server/print/UserState;->lambda$LdWYUAKz4cbWqoxOD4oZ_ZslKdg(Lcom/android/server/print/UserState;)V
+PLcom/android/server/print/UserState;->lambda$d-WQxYwbHYb6N0le5ohwQsWVdjw(Lcom/android/server/print/UserState;Landroid/print/PrintJobId;Ljava/util/function/IntSupplier;)V
+PLcom/android/server/print/UserState;->lambda$f3loorfBpq9Tu3Vl5vt4Ul321ok(Lcom/android/server/print/UserState;Ljava/util/List;)V
+PLcom/android/server/print/UserState;->onAllPrintJobsForServiceHandled(Landroid/content/ComponentName;)V
 PLcom/android/server/print/UserState;->onConfigurationChanged()V
 PLcom/android/server/print/UserState;->onConfigurationChangedLocked()V
+PLcom/android/server/print/UserState;->onPrintJobQueued(Landroid/print/PrintJobInfo;)V
+PLcom/android/server/print/UserState;->onPrintJobStateChanged(Landroid/print/PrintJobInfo;)V
+PLcom/android/server/print/UserState;->onPrintServiceRecommendationsUpdated(Ljava/util/List;)V
 PLcom/android/server/print/UserState;->onPrintServicesChanged()V
+PLcom/android/server/print/UserState;->onPrintersAdded(Ljava/util/List;)V
+PLcom/android/server/print/UserState;->onPrintersRemoved(Ljava/util/List;)V
+PLcom/android/server/print/UserState;->print(Ljava/lang/String;Landroid/print/IPrintDocumentAdapter;Landroid/print/PrintAttributes;Ljava/lang/String;I)Landroid/os/Bundle;
 PLcom/android/server/print/UserState;->prunePrintServices()V
 PLcom/android/server/print/UserState;->readConfigurationLocked()V
 PLcom/android/server/print/UserState;->readDisabledPrintServicesLocked()V
 PLcom/android/server/print/UserState;->readInstalledPrintServicesLocked()V
 PLcom/android/server/print/UserState;->readPrintServicesFromSettingLocked(Ljava/lang/String;Ljava/util/Set;)V
 PLcom/android/server/print/UserState;->removeObsoletePrintJobs()V
+PLcom/android/server/print/UserState;->removePrintJobStateChangeListener(Landroid/print/IPrintJobStateChangeListener;)V
+PLcom/android/server/print/UserState;->removePrintServiceRecommendationsChangeListener(Landroid/printservice/recommendation/IRecommendationsChangeListener;)V
+PLcom/android/server/print/UserState;->removePrintServicesChangeListener(Landroid/print/IPrintServicesChangeListener;)V
+PLcom/android/server/print/UserState;->startPrinterDiscovery(Landroid/print/IPrinterDiscoveryObserver;Ljava/util/List;)V
+PLcom/android/server/print/UserState;->startPrinterStateTracking(Landroid/print/PrinterId;)V
+PLcom/android/server/print/UserState;->stopPrinterDiscovery(Landroid/print/IPrinterDiscoveryObserver;)V
+PLcom/android/server/print/UserState;->stopPrinterStateTracking(Landroid/print/PrinterId;)V
 PLcom/android/server/print/UserState;->throwIfDestroyedLocked()V
 PLcom/android/server/print/UserState;->updateIfNeededLocked()V
 PLcom/android/server/print/UserState;->upgradePersistentStateIfNeeded()V
@@ -17385,86 +28417,122 @@
 PLcom/android/server/protolog/ProtoLogViewerConfigReader;->knownViewerStringsNumber()I
 HSPLcom/android/server/recoverysystem/RecoverySystemService$Injector;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/recoverysystem/RecoverySystemService$Injector;->getContext()Landroid/content/Context;
+HSPLcom/android/server/recoverysystem/RecoverySystemService$Injector;->getLockSettingsService()Lcom/android/internal/widget/LockSettingsInternal;
 HSPLcom/android/server/recoverysystem/RecoverySystemService$Lifecycle;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/recoverysystem/RecoverySystemService$Lifecycle;->onBootPhase(I)V
 HSPLcom/android/server/recoverysystem/RecoverySystemService$Lifecycle;->onStart()V
 HSPLcom/android/server/recoverysystem/RecoverySystemService;-><clinit>()V
 HSPLcom/android/server/recoverysystem/RecoverySystemService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/recoverysystem/RecoverySystemService;-><init>(Landroid/content/Context;Lcom/android/server/recoverysystem/RecoverySystemService$1;)V
 HSPLcom/android/server/recoverysystem/RecoverySystemService;-><init>(Lcom/android/server/recoverysystem/RecoverySystemService$Injector;)V
+PLcom/android/server/recoverysystem/RecoverySystemService;->onPreparedForReboot(Z)V
+HSPLcom/android/server/recoverysystem/RecoverySystemService;->onSystemServicesReady()V
+PLcom/android/server/recoverysystem/RecoverySystemService;->rebootWithLskf(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/recoverysystem/RecoverySystemService;->requestLskf(Ljava/lang/String;Landroid/content/IntentSender;)Z
+PLcom/android/server/recoverysystem/RecoverySystemService;->sendPreparedForRebootIntentIfNeeded()V
 HSPLcom/android/server/restrictions/RestrictionsManagerService$RestrictionsManagerImpl;-><init>(Lcom/android/server/restrictions/RestrictionsManagerService;Landroid/content/Context;)V
-PLcom/android/server/restrictions/RestrictionsManagerService$RestrictionsManagerImpl;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
+HPLcom/android/server/restrictions/RestrictionsManagerService$RestrictionsManagerImpl;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
 PLcom/android/server/restrictions/RestrictionsManagerService$RestrictionsManagerImpl;->hasRestrictionsProvider()Z
 HSPLcom/android/server/restrictions/RestrictionsManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/restrictions/RestrictionsManagerService;->access$000(Lcom/android/server/restrictions/RestrictionsManagerService;Ljava/lang/String;)Landroid/os/IBinder;
 HSPLcom/android/server/restrictions/RestrictionsManagerService;->access$100(Lcom/android/server/restrictions/RestrictionsManagerService;Ljava/lang/String;)Landroid/os/IBinder;
 HSPLcom/android/server/restrictions/RestrictionsManagerService;->onStart()V
-PLcom/android/server/role/-$$Lambda$RoleManagerService$4FcQsmMH6Dhstzx5gl80tO2TkTw;-><init>(Lcom/android/server/role/RoleUserState;Ljava/lang/String;Lcom/android/internal/infra/AndroidFuture;)V
+HPLcom/android/server/role/-$$Lambda$RoleManagerService$4FcQsmMH6Dhstzx5gl80tO2TkTw;-><init>(Lcom/android/server/role/RoleUserState;Ljava/lang/String;Lcom/android/internal/infra/AndroidFuture;)V
 PLcom/android/server/role/-$$Lambda$RoleManagerService$4FcQsmMH6Dhstzx5gl80tO2TkTw;->accept(Ljava/lang/Object;)V
+PLcom/android/server/role/-$$Lambda$RoleManagerService$DefaultBrowserProvider$X3gMGYlhUgmYMuqj0K5NlCALn5E;-><init>(Lcom/android/internal/infra/AndroidFuture;)V
+PLcom/android/server/role/-$$Lambda$RoleManagerService$DefaultBrowserProvider$X3gMGYlhUgmYMuqj0K5NlCALn5E;->onResult(Landroid/os/Bundle;)V
+PLcom/android/server/role/-$$Lambda$RoleManagerService$DefaultBrowserProvider$cU2Hhx52nmVnJXJvHuAnRTzxST0;-><init>(Ljava/lang/String;)V
+PLcom/android/server/role/-$$Lambda$RoleManagerService$DefaultBrowserProvider$cU2Hhx52nmVnJXJvHuAnRTzxST0;->onResult(Landroid/os/Bundle;)V
+PLcom/android/server/role/-$$Lambda$RoleManagerService$DefaultHomeProvider$9eeqZaqhD2FohE8PZOcBaWBSZu4;-><init>(Ljava/lang/String;Ljava/util/function/Consumer;)V
+PLcom/android/server/role/-$$Lambda$RoleManagerService$DefaultHomeProvider$9eeqZaqhD2FohE8PZOcBaWBSZu4;->onResult(Landroid/os/Bundle;)V
 PLcom/android/server/role/-$$Lambda$RoleManagerService$TCTA4I2bhEypguZihxs4ezif6t0;-><clinit>()V
 PLcom/android/server/role/-$$Lambda$RoleManagerService$TCTA4I2bhEypguZihxs4ezif6t0;-><init>()V
 PLcom/android/server/role/-$$Lambda$RoleManagerService$TCTA4I2bhEypguZihxs4ezif6t0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/role/-$$Lambda$RoleManagerService$p0uu3WH3gz96-kAWnyu6IUHMtCg;-><init>(Lcom/android/server/role/RoleManagerService;I)V
-PLcom/android/server/role/-$$Lambda$RoleManagerService$p0uu3WH3gz96-kAWnyu6IUHMtCg;->run()V
-PLcom/android/server/role/-$$Lambda$RoleManagerService$wh1KtBLaCUo52_0EzVI0n0nL1ng;-><init>(Ljava/io/ByteArrayOutputStream;Landroid/content/pm/PackageManagerInternal;I)V
-HPLcom/android/server/role/-$$Lambda$RoleManagerService$wh1KtBLaCUo52_0EzVI0n0nL1ng;->acceptOrThrow(Ljava/lang/Object;)V
+HPLcom/android/server/role/-$$Lambda$RoleManagerService$p0uu3WH3gz96-kAWnyu6IUHMtCg;->run()V
+HSPLcom/android/server/role/-$$Lambda$RoleManagerService$wh1KtBLaCUo52_0EzVI0n0nL1ng;-><init>(Ljava/io/ByteArrayOutputStream;Landroid/content/pm/PackageManagerInternal;I)V
+HSPLcom/android/server/role/-$$Lambda$RoleManagerService$wh1KtBLaCUo52_0EzVI0n0nL1ng;->acceptOrThrow(Ljava/lang/Object;)V
 PLcom/android/server/role/-$$Lambda$RoleUserState$e8W_Zaq_FyocW_DX1qcbN0ld0co;-><clinit>()V
 PLcom/android/server/role/-$$Lambda$RoleUserState$e8W_Zaq_FyocW_DX1qcbN0ld0co;-><init>()V
-PLcom/android/server/role/-$$Lambda$RoleUserState$e8W_Zaq_FyocW_DX1qcbN0ld0co;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/role/-$$Lambda$RoleUserState$e8W_Zaq_FyocW_DX1qcbN0ld0co;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/role/RoleManagerInternal;-><init>()V
 HSPLcom/android/server/role/RoleManagerService$1;-><init>(Lcom/android/server/role/RoleManagerService;)V
+PLcom/android/server/role/RoleManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/role/RoleManagerService$2;-><init>(Lcom/android/server/role/RoleManagerService;)V
-PLcom/android/server/role/RoleManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/role/RoleManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/role/RoleManagerService$DefaultBrowserProvider;-><init>(Lcom/android/server/role/RoleManagerService;)V
 HSPLcom/android/server/role/RoleManagerService$DefaultBrowserProvider;-><init>(Lcom/android/server/role/RoleManagerService;Lcom/android/server/role/RoleManagerService$1;)V
-PLcom/android/server/role/RoleManagerService$DefaultBrowserProvider;->getDefaultBrowser(I)Ljava/lang/String;
+HSPLcom/android/server/role/RoleManagerService$DefaultBrowserProvider;->getDefaultBrowser(I)Ljava/lang/String;
+PLcom/android/server/role/RoleManagerService$DefaultBrowserProvider;->lambda$setDefaultBrowser$0(Lcom/android/internal/infra/AndroidFuture;Landroid/os/Bundle;)V
+PLcom/android/server/role/RoleManagerService$DefaultBrowserProvider;->lambda$setDefaultBrowserAsync$1(Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/role/RoleManagerService$DefaultBrowserProvider;->setDefaultBrowser(Ljava/lang/String;I)Z
+PLcom/android/server/role/RoleManagerService$DefaultBrowserProvider;->setDefaultBrowserAsync(Ljava/lang/String;I)V
 HSPLcom/android/server/role/RoleManagerService$DefaultDialerProvider;-><init>(Lcom/android/server/role/RoleManagerService;)V
 HSPLcom/android/server/role/RoleManagerService$DefaultDialerProvider;-><init>(Lcom/android/server/role/RoleManagerService;Lcom/android/server/role/RoleManagerService$1;)V
 PLcom/android/server/role/RoleManagerService$DefaultDialerProvider;->getDefaultDialer(I)Ljava/lang/String;
 HSPLcom/android/server/role/RoleManagerService$DefaultHomeProvider;-><init>(Lcom/android/server/role/RoleManagerService;)V
 HSPLcom/android/server/role/RoleManagerService$DefaultHomeProvider;-><init>(Lcom/android/server/role/RoleManagerService;Lcom/android/server/role/RoleManagerService$1;)V
 HSPLcom/android/server/role/RoleManagerService$DefaultHomeProvider;->getDefaultHome(I)Ljava/lang/String;
+PLcom/android/server/role/RoleManagerService$DefaultHomeProvider;->lambda$setDefaultHomeAsync$0(Ljava/lang/String;Ljava/util/function/Consumer;Landroid/os/Bundle;)V
+PLcom/android/server/role/RoleManagerService$DefaultHomeProvider;->setDefaultHomeAsync(Ljava/lang/String;ILjava/util/function/Consumer;)V
 HSPLcom/android/server/role/RoleManagerService$Internal;-><init>(Lcom/android/server/role/RoleManagerService;)V
 HSPLcom/android/server/role/RoleManagerService$Internal;-><init>(Lcom/android/server/role/RoleManagerService;Lcom/android/server/role/RoleManagerService$1;)V
 HSPLcom/android/server/role/RoleManagerService$Stub;-><init>(Lcom/android/server/role/RoleManagerService;)V
 HSPLcom/android/server/role/RoleManagerService$Stub;-><init>(Lcom/android/server/role/RoleManagerService;Lcom/android/server/role/RoleManagerService$1;)V
 HSPLcom/android/server/role/RoleManagerService$Stub;->addOnRoleHoldersChangedListenerAsUser(Landroid/app/role/IOnRoleHoldersChangedListener;I)V
+PLcom/android/server/role/RoleManagerService$Stub;->addRoleHolderAsUser(Ljava/lang/String;Ljava/lang/String;IILandroid/os/RemoteCallback;)V
+PLcom/android/server/role/RoleManagerService$Stub;->addRoleHolderFromController(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/role/RoleManagerService$Stub;->clearRoleHoldersAsUser(Ljava/lang/String;IILandroid/os/RemoteCallback;)V
 PLcom/android/server/role/RoleManagerService$Stub;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/role/RoleManagerService$Stub;->getDefaultSmsPackage(I)Ljava/lang/String;
+HSPLcom/android/server/role/RoleManagerService$Stub;->getDefaultSmsPackage(I)Ljava/lang/String;
+HPLcom/android/server/role/RoleManagerService$Stub;->getHeldRolesFromController(Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/role/RoleManagerService$Stub;->getRoleHoldersAsUser(Ljava/lang/String;I)Ljava/util/List;
 HSPLcom/android/server/role/RoleManagerService$Stub;->handleIncomingUser(IZLjava/lang/String;)I
 HSPLcom/android/server/role/RoleManagerService$Stub;->isRoleAvailable(Ljava/lang/String;)Z
-PLcom/android/server/role/RoleManagerService$Stub;->setRoleNamesFromController(Ljava/util/List;)V
+HPLcom/android/server/role/RoleManagerService$Stub;->isRoleHeld(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/role/RoleManagerService$Stub;->removeOnRoleHoldersChangedListenerAsUser(Landroid/app/role/IOnRoleHoldersChangedListener;I)V
+PLcom/android/server/role/RoleManagerService$Stub;->removeRoleHolderFromController(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/role/RoleManagerService$Stub;->setRoleNamesFromController(Ljava/util/List;)V
 HSPLcom/android/server/role/RoleManagerService;-><clinit>()V
 HSPLcom/android/server/role/RoleManagerService;-><init>(Landroid/content/Context;Lcom/android/server/role/RoleManagerService$RoleHoldersResolver;)V
+PLcom/android/server/role/RoleManagerService;->access$1000()Ljava/lang/String;
+PLcom/android/server/role/RoleManagerService;->access$1100(Lcom/android/server/role/RoleManagerService;I)Landroid/app/role/RoleControllerManager;
 HSPLcom/android/server/role/RoleManagerService;->access$1200(Lcom/android/server/role/RoleManagerService;I)Landroid/os/RemoteCallbackList;
+PLcom/android/server/role/RoleManagerService;->access$1300(Lcom/android/server/role/RoleManagerService;I)Landroid/os/RemoteCallbackList;
+PLcom/android/server/role/RoleManagerService;->access$400(Lcom/android/server/role/RoleManagerService;I)V
+PLcom/android/server/role/RoleManagerService;->access$600(Lcom/android/server/role/RoleManagerService;I)V
 HSPLcom/android/server/role/RoleManagerService;->access$700(Lcom/android/server/role/RoleManagerService;I)Lcom/android/server/role/RoleUserState;
+PLcom/android/server/role/RoleManagerService;->access$800(Lcom/android/server/role/RoleManagerService;)Landroid/app/AppOpsManager;
 HSPLcom/android/server/role/RoleManagerService;->access$900(Lcom/android/server/role/RoleManagerService;)Landroid/os/UserManagerInternal;
-PLcom/android/server/role/RoleManagerService;->computeComponentStateHash(I)Ljava/lang/String;
+HSPLcom/android/server/role/RoleManagerService;->computeComponentStateHash(I)Ljava/lang/String;
 PLcom/android/server/role/RoleManagerService;->getListeners(I)Landroid/os/RemoteCallbackList;
-PLcom/android/server/role/RoleManagerService;->getOrCreateController(I)Landroid/app/role/RoleControllerManager;
+HPLcom/android/server/role/RoleManagerService;->getOrCreateController(I)Landroid/app/role/RoleControllerManager;
 HSPLcom/android/server/role/RoleManagerService;->getOrCreateListeners(I)Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/role/RoleManagerService;->getOrCreateUserState(I)Lcom/android/server/role/RoleUserState;
 PLcom/android/server/role/RoleManagerService;->lambda$TCTA4I2bhEypguZihxs4ezif6t0(Lcom/android/server/role/RoleManagerService;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/role/RoleManagerService;->lambda$computeComponentStateHash$2(Ljava/io/ByteArrayOutputStream;Landroid/content/pm/PackageManagerInternal;ILandroid/content/pm/parsing/AndroidPackage;)V
+HSPLcom/android/server/role/RoleManagerService;->lambda$computeComponentStateHash$2(Ljava/io/ByteArrayOutputStream;Landroid/content/pm/PackageManagerInternal;ILandroid/content/pm/parsing/AndroidPackage;)V
 PLcom/android/server/role/RoleManagerService;->lambda$maybeGrantDefaultRolesAsync$0$RoleManagerService(I)V
-PLcom/android/server/role/RoleManagerService;->lambda$maybeGrantDefaultRolesInternal$1(Lcom/android/server/role/RoleUserState;Ljava/lang/String;Lcom/android/internal/infra/AndroidFuture;Ljava/lang/Boolean;)V
+HPLcom/android/server/role/RoleManagerService;->lambda$maybeGrantDefaultRolesInternal$1(Lcom/android/server/role/RoleUserState;Ljava/lang/String;Lcom/android/internal/infra/AndroidFuture;Ljava/lang/Boolean;)V
 HPLcom/android/server/role/RoleManagerService;->maybeGrantDefaultRolesAsync(I)V
-HPLcom/android/server/role/RoleManagerService;->maybeGrantDefaultRolesInternal(I)Lcom/android/internal/infra/AndroidFuture;
-PLcom/android/server/role/RoleManagerService;->maybeGrantDefaultRolesSync(I)V
+HSPLcom/android/server/role/RoleManagerService;->maybeGrantDefaultRolesInternal(I)Lcom/android/internal/infra/AndroidFuture;
+HSPLcom/android/server/role/RoleManagerService;->maybeGrantDefaultRolesSync(I)V
 HPLcom/android/server/role/RoleManagerService;->maybeMigrateRole(Ljava/lang/String;I)V
-PLcom/android/server/role/RoleManagerService;->notifyRoleHoldersChanged(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/role/RoleManagerService;->notifyRoleHoldersChangedForListeners(Landroid/os/RemoteCallbackList;Ljava/lang/String;I)V
-PLcom/android/server/role/RoleManagerService;->onRoleHoldersChanged(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/role/RoleManagerService;->notifyRoleHoldersChanged(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/role/RoleManagerService;->notifyRoleHoldersChangedForListeners(Landroid/os/RemoteCallbackList;Ljava/lang/String;I)V
+PLcom/android/server/role/RoleManagerService;->onRemoveUser(I)V
+HPLcom/android/server/role/RoleManagerService;->onRoleHoldersChanged(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/role/RoleManagerService;->onStart()V
-PLcom/android/server/role/RoleManagerService;->onStartUser(I)V
+HSPLcom/android/server/role/RoleManagerService;->onStartUser(I)V
 HSPLcom/android/server/role/RoleManagerService;->registerUserRemovedReceiver()V
 HSPLcom/android/server/role/RoleUserState;-><clinit>()V
 HSPLcom/android/server/role/RoleUserState;-><init>(ILcom/android/server/role/RoleUserState$Callback;)V
 PLcom/android/server/role/RoleUserState;->addRoleHolder(Ljava/lang/String;Ljava/lang/String;)Z
 HPLcom/android/server/role/RoleUserState;->addRoleName(Ljava/lang/String;)Z
-PLcom/android/server/role/RoleUserState;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
+PLcom/android/server/role/RoleUserState;->destroy()V
+HPLcom/android/server/role/RoleUserState;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 HSPLcom/android/server/role/RoleUserState;->getFile(I)Ljava/io/File;
-PLcom/android/server/role/RoleUserState;->getPackagesHash()Ljava/lang/String;
+HPLcom/android/server/role/RoleUserState;->getHeldRoles(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/server/role/RoleUserState;->getPackagesHash()Ljava/lang/String;
 HSPLcom/android/server/role/RoleUserState;->getRoleHolders(Ljava/lang/String;)Landroid/util/ArraySet;
 HSPLcom/android/server/role/RoleUserState;->isRoleAvailable(Ljava/lang/String;)Z
 PLcom/android/server/role/RoleUserState;->lambda$e8W_Zaq_FyocW_DX1qcbN0ld0co(Lcom/android/server/role/RoleUserState;)V
@@ -17472,13 +28540,19 @@
 HSPLcom/android/server/role/RoleUserState;->parseRolesLocked(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/role/RoleUserState;->parseXmlLocked(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/role/RoleUserState;->readFile()V
-PLcom/android/server/role/RoleUserState;->scheduleWriteFileLocked()V
-PLcom/android/server/role/RoleUserState;->serializeRoleHolders(Lorg/xmlpull/v1/XmlSerializer;Landroid/util/ArraySet;)V
-PLcom/android/server/role/RoleUserState;->serializeRoles(Lorg/xmlpull/v1/XmlSerializer;ILjava/lang/String;Landroid/util/ArrayMap;)V
-PLcom/android/server/role/RoleUserState;->setPackagesHash(Ljava/lang/String;)V
-PLcom/android/server/role/RoleUserState;->setRoleNames(Ljava/util/List;)V
-PLcom/android/server/role/RoleUserState;->snapshotRolesLocked()Landroid/util/ArrayMap;
-PLcom/android/server/role/RoleUserState;->writeFile()V
+PLcom/android/server/role/RoleUserState;->readLegacyFileLocked()V
+PLcom/android/server/role/RoleUserState;->removeRoleHolder(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/role/RoleUserState;->scheduleWriteFileLocked()V
+HPLcom/android/server/role/RoleUserState;->serializeRoleHolders(Lorg/xmlpull/v1/XmlSerializer;Landroid/util/ArraySet;)V
+HPLcom/android/server/role/RoleUserState;->serializeRoles(Lorg/xmlpull/v1/XmlSerializer;ILjava/lang/String;Landroid/util/ArrayMap;)V
+HPLcom/android/server/role/RoleUserState;->setPackagesHash(Ljava/lang/String;)V
+HPLcom/android/server/role/RoleUserState;->setRoleNames(Ljava/util/List;)V
+HPLcom/android/server/role/RoleUserState;->snapshotRolesLocked()Landroid/util/ArrayMap;
+HPLcom/android/server/role/RoleUserState;->writeFile()V
+PLcom/android/server/rollback/-$$Lambda$Rollback$EvT1BaUrjWsJaVTizSu77MCfRBs;-><init>(Lcom/android/server/rollback/Rollback;Landroid/content/Context;Landroid/content/IntentSender;Ljava/util/List;)V
+PLcom/android/server/rollback/-$$Lambda$Rollback$EvT1BaUrjWsJaVTizSu77MCfRBs;->accept(Ljava/lang/Object;)V
+PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$1$QPIiLceItKZOKeHshAhrcNkM3m8;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl$1;ILjava/io/File;II)V
+PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$1$QPIiLceItKZOKeHshAhrcNkM3m8;->run()V
 PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$58BbNzpzWX_z-GzhKXpdGPwKcIU;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
 PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$58BbNzpzWX_z-GzhKXpdGPwKcIU;->run()V
 PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$5VimxC3UlEV_IzyoBdYlrATzYd8;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
@@ -17487,137 +28561,371 @@
 PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$9jRyv0ATJ7l2lc6xAd3tmkVmx7g;->run()V
 PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$Be1hJgd8PbSLFX_uKif2yCGhtKo;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;ILjava/util/concurrent/CountDownLatch;)V
 PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$Be1hJgd8PbSLFX_uKif2yCGhtKo;->run()V
+PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$EebLQVAY8_XZdz3mG6qTmlJupzA;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;Ljava/lang/String;[IILjava/lang/String;I)V
+PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$EebLQVAY8_XZdz3mG6qTmlJupzA;->run()V
+PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$Qz1-TYGVImHAonyKgh8LjWx_ub0;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;ILjava/util/concurrent/LinkedBlockingQueue;)V
+PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$Qz1-TYGVImHAonyKgh8LjWx_ub0;->run()V
+PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$UZ6heBvW792l5X1X86VJbao61T4;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
+PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$UZ6heBvW792l5X1X86VJbao61T4;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
+PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$bhmKnyhoneBLazCFC2rxxtRypFI;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;ILandroid/content/pm/ParceledListSlice;Ljava/lang/String;Landroid/content/IntentSender;)V
+PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$bhmKnyhoneBLazCFC2rxxtRypFI;->run()V
+PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$pjR6RZoFE_-Nf6Dqbrc5-qATSwY;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;II)V
+PLcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$pjR6RZoFE_-Nf6Dqbrc5-qATSwY;->run()V
+PLcom/android/server/rollback/-$$Lambda$RollbackPackageHealthObserver$IamLzWoD8UIw0nYBYf04E_MUT8U;-><init>(Lcom/android/server/rollback/RollbackPackageHealthObserver;Landroid/content/rollback/RollbackInfo;Landroid/content/rollback/RollbackManager;Landroid/content/pm/VersionedPackage;ILjava/lang/String;)V
+PLcom/android/server/rollback/-$$Lambda$RollbackPackageHealthObserver$IamLzWoD8UIw0nYBYf04E_MUT8U;->accept(Ljava/lang/Object;)V
+PLcom/android/server/rollback/-$$Lambda$RollbackPackageHealthObserver$_CTueeoAyZZbpbCYMvJ3rbtIF94;-><init>(Landroid/content/rollback/RollbackManager;Landroid/content/rollback/RollbackInfo;Landroid/content/pm/VersionedPackage;Lcom/android/server/rollback/LocalIntentReceiver;)V
+PLcom/android/server/rollback/-$$Lambda$RollbackPackageHealthObserver$_CTueeoAyZZbpbCYMvJ3rbtIF94;->run()V
 PLcom/android/server/rollback/-$$Lambda$RollbackPackageHealthObserver$pi_OhdsKzJHdXoHHtYauaWDdX5A;-><init>(Lcom/android/server/rollback/RollbackPackageHealthObserver;)V
 PLcom/android/server/rollback/-$$Lambda$RollbackPackageHealthObserver$pi_OhdsKzJHdXoHHtYauaWDdX5A;->run()V
 HSPLcom/android/server/rollback/AppDataRollbackHelper;-><init>(Lcom/android/server/pm/Installer;)V
+PLcom/android/server/rollback/AppDataRollbackHelper;->commitPendingBackupAndRestoreForUser(ILcom/android/server/rollback/Rollback;)Z
+PLcom/android/server/rollback/AppDataRollbackHelper;->isUserCredentialLocked(I)Z
+PLcom/android/server/rollback/AppDataRollbackHelper;->restoreAppData(ILandroid/content/rollback/PackageRollbackInfo;IILjava/lang/String;)Z
+PLcom/android/server/rollback/AppDataRollbackHelper;->snapshotAppData(ILandroid/content/rollback/PackageRollbackInfo;[I)V
+PLcom/android/server/rollback/LocalIntentReceiver$1;-><init>(Lcom/android/server/rollback/LocalIntentReceiver;)V
+PLcom/android/server/rollback/LocalIntentReceiver$1;->send(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/rollback/LocalIntentReceiver;-><init>(Ljava/util/function/Consumer;)V
+PLcom/android/server/rollback/LocalIntentReceiver;->getIntentSender()Landroid/content/IntentSender;
+PLcom/android/server/rollback/Rollback;-><init>(ILjava/io/File;IILjava/lang/String;[I)V
+HSPLcom/android/server/rollback/Rollback;-><init>(Landroid/content/rollback/RollbackInfo;Ljava/io/File;Ljava/time/Instant;IIIZILjava/lang/String;)V
+PLcom/android/server/rollback/Rollback;->commit(Landroid/content/Context;Ljava/util/List;Ljava/lang/String;Landroid/content/IntentSender;)V
+PLcom/android/server/rollback/Rollback;->commitPendingBackupAndRestoreForUser(ILcom/android/server/rollback/AppDataRollbackHelper;)V
+PLcom/android/server/rollback/Rollback;->delete(Lcom/android/server/rollback/AppDataRollbackHelper;)V
+PLcom/android/server/rollback/Rollback;->enableForPackage(Ljava/lang/String;JJZLjava/lang/String;[Ljava/lang/String;I)Z
+PLcom/android/server/rollback/Rollback;->enableForPackageInApex(Ljava/lang/String;JI)Z
+PLcom/android/server/rollback/Rollback;->getApexPackageNames()Ljava/util/List;
+PLcom/android/server/rollback/Rollback;->getApkSessionId()I
+PLcom/android/server/rollback/Rollback;->getBackupDir()Ljava/io/File;
+PLcom/android/server/rollback/Rollback;->getInstallerPackageName()Ljava/lang/String;
+PLcom/android/server/rollback/Rollback;->getPackageCount(I)I
+PLcom/android/server/rollback/Rollback;->getPackageNames()Ljava/util/List;
+PLcom/android/server/rollback/Rollback;->getPackageSessionIdCount()I
+PLcom/android/server/rollback/Rollback;->getStagedSessionId()I
+PLcom/android/server/rollback/Rollback;->getStateAsString()Ljava/lang/String;
+PLcom/android/server/rollback/Rollback;->getTimestamp()Ljava/time/Instant;
+PLcom/android/server/rollback/Rollback;->getUserId()I
+HPLcom/android/server/rollback/Rollback;->includesPackageWithDifferentVersion(Ljava/lang/String;J)Z
+PLcom/android/server/rollback/Rollback;->isAvailable()Z
+PLcom/android/server/rollback/Rollback;->isCommitted()Z
+PLcom/android/server/rollback/Rollback;->isDeleted()Z
+PLcom/android/server/rollback/Rollback;->isEnabling()Z
+PLcom/android/server/rollback/Rollback;->isRestoreUserDataInProgress()Z
+PLcom/android/server/rollback/Rollback;->isStaged()Z
+PLcom/android/server/rollback/Rollback;->lambda$commit$0$Rollback(Landroid/content/Context;Landroid/content/IntentSender;Ljava/util/List;Landroid/content/Intent;)V
+PLcom/android/server/rollback/Rollback;->makeAvailable()V
+PLcom/android/server/rollback/Rollback;->restoreUserDataForPackageIfInProgress(Ljava/lang/String;[IILjava/lang/String;Lcom/android/server/rollback/AppDataRollbackHelper;)Z
+HSPLcom/android/server/rollback/Rollback;->rollbackStateFromString(Ljava/lang/String;)I
+PLcom/android/server/rollback/Rollback;->rollbackStateToString(I)Ljava/lang/String;
+PLcom/android/server/rollback/Rollback;->saveRollback()V
+PLcom/android/server/rollback/Rollback;->setApkSessionId(I)V
+PLcom/android/server/rollback/Rollback;->setRestoreUserDataInProgress(Z)V
+PLcom/android/server/rollback/Rollback;->setTimestamp(Ljava/time/Instant;)V
+PLcom/android/server/rollback/Rollback;->snapshotUserData(Ljava/lang/String;[ILcom/android/server/rollback/AppDataRollbackHelper;)V
 HSPLcom/android/server/rollback/RollbackManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/rollback/RollbackManagerService;->onBootPhase(I)V
 HSPLcom/android/server/rollback/RollbackManagerService;->onStart()V
 PLcom/android/server/rollback/RollbackManagerService;->onUnlockUser(I)V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl$1;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl$1;->lambda$onReceive$0$RollbackManagerServiceImpl$1(ILjava/io/File;II)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl$2;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl$3;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl$4;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
 HPLcom/android/server/rollback/RollbackManagerServiceImpl$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl$5;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
-PLcom/android/server/rollback/RollbackManagerServiceImpl$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/rollback/RollbackManagerServiceImpl$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl$NewRollback;-><init>(Lcom/android/server/rollback/Rollback;)V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl$SessionCallback;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl$SessionCallback;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;Lcom/android/server/rollback/RollbackManagerServiceImpl$1;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl$SessionCallback;->onActiveChanged(IZ)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl$SessionCallback;->onBadgingChanged(I)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl$SessionCallback;->onCreated(I)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl$SessionCallback;->onFinished(IZ)V
-PLcom/android/server/rollback/RollbackManagerServiceImpl$SessionCallback;->onProgressChanged(IF)V
+HPLcom/android/server/rollback/RollbackManagerServiceImpl$SessionCallback;->onProgressChanged(IF)V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl;-><clinit>()V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl;-><init>(Landroid/content/Context;)V
-PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1000()J
-PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1100(Lcom/android/server/rollback/RollbackManagerServiceImpl;)Ljava/util/List;
-PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$300(Lcom/android/server/rollback/RollbackManagerServiceImpl;)Ljava/lang/Object;
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$000(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$100(Lcom/android/server/rollback/RollbackManagerServiceImpl;)Landroid/os/Handler;
+HSPLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1000()J
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1000(Lcom/android/server/rollback/RollbackManagerServiceImpl;)J
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1000(Lcom/android/server/rollback/RollbackManagerServiceImpl;Ljava/lang/String;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1002(Lcom/android/server/rollback/RollbackManagerServiceImpl;J)J
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1100()J
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1100(Lcom/android/server/rollback/RollbackManagerServiceImpl;)J
+HSPLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1100(Lcom/android/server/rollback/RollbackManagerServiceImpl;)Ljava/util/List;
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1102(Lcom/android/server/rollback/RollbackManagerServiceImpl;J)J
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1200()J
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1200(Lcom/android/server/rollback/RollbackManagerServiceImpl;)Ljava/util/List;
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1300(Lcom/android/server/rollback/RollbackManagerServiceImpl;)Ljava/util/List;
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1400(Lcom/android/server/rollback/RollbackManagerServiceImpl;I)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1500(Lcom/android/server/rollback/RollbackManagerServiceImpl;I)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$1600(Lcom/android/server/rollback/RollbackManagerServiceImpl;I)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$200(Lcom/android/server/rollback/RollbackManagerServiceImpl;ILjava/io/File;II)Z
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$300()Z
+HSPLcom/android/server/rollback/RollbackManagerServiceImpl;->access$300(Lcom/android/server/rollback/RollbackManagerServiceImpl;)Ljava/lang/Object;
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$400(Lcom/android/server/rollback/RollbackManagerServiceImpl;)Ljava/lang/Object;
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$600(Lcom/android/server/rollback/RollbackManagerServiceImpl;Landroid/os/UserHandle;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$700(Lcom/android/server/rollback/RollbackManagerServiceImpl;Ljava/lang/String;)V
-PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$900(Lcom/android/server/rollback/RollbackManagerServiceImpl;)J
-PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$902(Lcom/android/server/rollback/RollbackManagerServiceImpl;J)J
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$800(Lcom/android/server/rollback/RollbackManagerServiceImpl;Ljava/lang/String;)V
+HSPLcom/android/server/rollback/RollbackManagerServiceImpl;->access$900(Lcom/android/server/rollback/RollbackManagerServiceImpl;)J
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->access$900(Lcom/android/server/rollback/RollbackManagerServiceImpl;Ljava/lang/String;)V
+HSPLcom/android/server/rollback/RollbackManagerServiceImpl;->access$902(Lcom/android/server/rollback/RollbackManagerServiceImpl;J)J
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->allocateRollbackIdLocked()I
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl;->calculateRelativeBootTime()J
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->commitRollback(ILandroid/content/pm/ParceledListSlice;Ljava/lang/String;Landroid/content/IntentSender;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->commitRollbackInternal(ILjava/util/List;Ljava/lang/String;Landroid/content/IntentSender;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->completeEnableRollback(Lcom/android/server/rollback/RollbackManagerServiceImpl$NewRollback;)Lcom/android/server/rollback/Rollback;
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->createNewRollbackLocked(Landroid/content/pm/PackageInstaller$SessionInfo;)Lcom/android/server/rollback/RollbackManagerServiceImpl$NewRollback;
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->enableRollback(ILjava/io/File;II)Z
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->enableRollbackAllowed(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->enableRollbackForPackageSession(Lcom/android/server/rollback/Rollback;Landroid/content/pm/PackageInstaller$SessionInfo;)Z
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->enforceManageRollbacks(Ljava/lang/String;)V
+HPLcom/android/server/rollback/RollbackManagerServiceImpl;->expireRollbackForPackage(Ljava/lang/String;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->getAvailableRollbacks()Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl;->getContextAsUser(Landroid/os/UserHandle;)Landroid/content/Context;
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl;->getHandler()Landroid/os/Handler;
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->getInstalledPackageVersion(Ljava/lang/String;)J
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->getNewRollbackForPackageSessionLocked(I)Lcom/android/server/rollback/Rollback;
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->getNewRollbackForPackageSessionLocked(I)Lcom/android/server/rollback/RollbackManagerServiceImpl$NewRollback;
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->getPackageInfo(Ljava/lang/String;)Landroid/content/pm/PackageInfo;
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->getRecentlyCommittedRollbacks()Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->getRollbackForId(I)Lcom/android/server/rollback/Rollback;
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->isModule(Ljava/lang/String;)Z
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->isRollbackWhitelisted(Ljava/lang/String;)Z
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$commitRollback$0$RollbackManagerServiceImpl(ILandroid/content/pm/ParceledListSlice;Ljava/lang/String;Landroid/content/IntentSender;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$notifyStagedApkSession$10$RollbackManagerServiceImpl(II)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$notifyStagedSession$9$RollbackManagerServiceImpl(ILjava/util/concurrent/LinkedBlockingQueue;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$onBootCompleted$5$RollbackManagerServiceImpl()V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$onBootCompleted$5$RollbackManagerServiceImpl(Landroid/provider/DeviceConfig$Properties;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$onBootCompleted$6$RollbackManagerServiceImpl()V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$onUnlockUser$4$RollbackManagerServiceImpl(ILjava/util/concurrent/CountDownLatch;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$scheduleExpiration$7$RollbackManagerServiceImpl()V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$snapshotAndRestoreUserData$8$RollbackManagerServiceImpl(Ljava/lang/String;[IILjava/lang/String;I)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->makeRollbackAvailable(Lcom/android/server/rollback/Rollback;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->notifyStagedApkSession(II)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->notifyStagedSession(I)I
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->onBootCompleted()V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->onPackageFullyRemoved(Ljava/lang/String;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->onPackageReplaced(Ljava/lang/String;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->onUnlockUser(I)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->queueSleepIfNeeded()V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl;->registerTimeChangeReceiver()V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl;->registerUserCallbacks(Landroid/os/UserHandle;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->removeRollbackForPackageSessionId(I)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->restoreUserDataInternal(Ljava/lang/String;[IILjava/lang/String;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->runExpiration()V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->scheduleExpiration(J)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->sessionMatchesForEnableRollback(Landroid/content/pm/PackageInstaller$SessionInfo;ILjava/io/File;)Z
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->snapshotAndRestoreUserData(Ljava/lang/String;[IIJLjava/lang/String;I)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->snapshotUserDataInternal(Ljava/lang/String;[I)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->updateRollbackLifetimeDurationInMillis()V
+PLcom/android/server/rollback/RollbackPackageHealthObserver$1;-><init>(Lcom/android/server/rollback/RollbackPackageHealthObserver;Landroid/content/rollback/RollbackManager;ILandroid/content/pm/VersionedPackage;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/rollback/RollbackPackageHealthObserver;-><init>(Landroid/content/Context;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->access$000(Lcom/android/server/rollback/RollbackPackageHealthObserver;Landroid/content/rollback/RollbackManager;ILandroid/content/BroadcastReceiver;Landroid/content/pm/VersionedPackage;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->execute(Landroid/content/pm/VersionedPackage;I)Z
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->getAvailableRollback(Landroid/content/pm/VersionedPackage;)Landroid/content/rollback/RollbackInfo;
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->getModuleMetadataPackageName()Ljava/lang/String;
 HSPLcom/android/server/rollback/RollbackPackageHealthObserver;->getName()Ljava/lang/String;
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->handleStagedSessionChange(Landroid/content/rollback/RollbackManager;ILandroid/content/BroadcastReceiver;Landroid/content/pm/VersionedPackage;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->isModule(Ljava/lang/String;)Z
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->isPendingStagedSessionsEmpty()Z
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->lambda$onBootCompletedAsync$0$RollbackPackageHealthObserver()V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->lambda$rollbackPackage$1$RollbackPackageHealthObserver(Landroid/content/rollback/RollbackInfo;Landroid/content/rollback/RollbackManager;Landroid/content/pm/VersionedPackage;ILjava/lang/String;Landroid/content/Intent;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->lambda$rollbackPackage$2(Landroid/content/rollback/RollbackManager;Landroid/content/rollback/RollbackInfo;Landroid/content/pm/VersionedPackage;Lcom/android/server/rollback/LocalIntentReceiver;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->listenForStagedSessionReady(Landroid/content/rollback/RollbackManager;ILandroid/content/pm/VersionedPackage;)Landroid/content/BroadcastReceiver;
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->logEvent(Landroid/content/pm/VersionedPackage;IILjava/lang/String;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->mapFailureReasonToMetric(I)I
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->markStagedSessionHandled(I)Z
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->onBootCompleted()V
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->onBootCompletedAsync()V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->onHealthCheckFailed(Landroid/content/pm/VersionedPackage;I)I
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->popLastStagedRollbackId()I
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->popLastStagedRollbackIds()Ljava/util/List;
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->rollbackPackage(Landroid/content/rollback/RollbackInfo;Landroid/content/pm/VersionedPackage;I)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->rollbackReasonToString(I)Ljava/lang/String;
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->rollbackTypeToString(I)Ljava/lang/String;
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->startObservingHealth(Ljava/util/List;J)V
 HSPLcom/android/server/rollback/RollbackStore;-><init>(Ljava/io/File;)V
+PLcom/android/server/rollback/RollbackStore;->backupPackageCodePath(Lcom/android/server/rollback/Rollback;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/rollback/RollbackStore;->ceSnapshotInodesFromJson(Lorg/json/JSONArray;)Landroid/util/SparseLongArray;
+PLcom/android/server/rollback/RollbackStore;->ceSnapshotInodesToJson(Landroid/util/SparseLongArray;)Lorg/json/JSONArray;
+HSPLcom/android/server/rollback/RollbackStore;->convertToIntArray(Lorg/json/JSONArray;)Landroid/util/IntArray;
+PLcom/android/server/rollback/RollbackStore;->convertToJsonArray(Landroid/util/IntArray;)Lorg/json/JSONArray;
+HPLcom/android/server/rollback/RollbackStore;->convertToJsonArray(Ljava/util/List;)Lorg/json/JSONArray;
+HSPLcom/android/server/rollback/RollbackStore;->convertToRestoreInfoArray(Lorg/json/JSONArray;)Ljava/util/ArrayList;
+PLcom/android/server/rollback/RollbackStore;->createStagedRollback(IIILjava/lang/String;[I)Lcom/android/server/rollback/Rollback;
+PLcom/android/server/rollback/RollbackStore;->deletePackageCodePaths(Lcom/android/server/rollback/Rollback;)V
+PLcom/android/server/rollback/RollbackStore;->deleteRollback(Lcom/android/server/rollback/Rollback;)V
+PLcom/android/server/rollback/RollbackStore;->getPackageCodePaths(Lcom/android/server/rollback/Rollback;Ljava/lang/String;)[Ljava/io/File;
+HSPLcom/android/server/rollback/RollbackStore;->loadRollback(Ljava/io/File;)Lcom/android/server/rollback/Rollback;
 HSPLcom/android/server/rollback/RollbackStore;->loadRollbacks()Ljava/util/List;
+HSPLcom/android/server/rollback/RollbackStore;->packageRollbackInfoFromJson(Lorg/json/JSONObject;)Landroid/content/rollback/PackageRollbackInfo;
+HSPLcom/android/server/rollback/RollbackStore;->packageRollbackInfosFromJson(Lorg/json/JSONArray;)Ljava/util/List;
+PLcom/android/server/rollback/RollbackStore;->removeFile(Ljava/io/File;)V
+HSPLcom/android/server/rollback/RollbackStore;->rollbackFromJson(Lorg/json/JSONObject;Ljava/io/File;)Lcom/android/server/rollback/Rollback;
+HSPLcom/android/server/rollback/RollbackStore;->rollbackInfoFromJson(Lorg/json/JSONObject;)Landroid/content/rollback/RollbackInfo;
+PLcom/android/server/rollback/RollbackStore;->rollbackInfoToJson(Landroid/content/rollback/RollbackInfo;)Lorg/json/JSONObject;
+PLcom/android/server/rollback/RollbackStore;->saveRollback(Lcom/android/server/rollback/Rollback;)V
+PLcom/android/server/rollback/RollbackStore;->toJson(Landroid/content/pm/VersionedPackage;)Lorg/json/JSONObject;
+HPLcom/android/server/rollback/RollbackStore;->toJson(Landroid/content/rollback/PackageRollbackInfo;)Lorg/json/JSONObject;
+HPLcom/android/server/rollback/RollbackStore;->toJson(Ljava/util/List;)Lorg/json/JSONArray;
+HSPLcom/android/server/rollback/RollbackStore;->versionedPackageFromJson(Lorg/json/JSONObject;)Landroid/content/pm/VersionedPackage;
+HSPLcom/android/server/rollback/RollbackStore;->versionedPackagesFromJson(Lorg/json/JSONArray;)Ljava/util/List;
+PLcom/android/server/rollback/RollbackStore;->versionedPackagesToJson(Ljava/util/List;)Lorg/json/JSONArray;
 HSPLcom/android/server/search/SearchManagerService$GlobalSearchProviderObserver;-><init>(Lcom/android/server/search/SearchManagerService;Landroid/content/ContentResolver;)V
 PLcom/android/server/search/SearchManagerService$Lifecycle$1;-><init>(Lcom/android/server/search/SearchManagerService$Lifecycle;I)V
 PLcom/android/server/search/SearchManagerService$Lifecycle$1;->run()V
 HSPLcom/android/server/search/SearchManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 PLcom/android/server/search/SearchManagerService$Lifecycle;->access$000(Lcom/android/server/search/SearchManagerService$Lifecycle;)Lcom/android/server/search/SearchManagerService;
+PLcom/android/server/search/SearchManagerService$Lifecycle;->onCleanupUser(I)V
 HSPLcom/android/server/search/SearchManagerService$Lifecycle;->onStart()V
 PLcom/android/server/search/SearchManagerService$Lifecycle;->onUnlockUser(I)V
 HSPLcom/android/server/search/SearchManagerService$MyPackageMonitor;-><init>(Lcom/android/server/search/SearchManagerService;)V
-PLcom/android/server/search/SearchManagerService$MyPackageMonitor;->onPackageModified(Ljava/lang/String;)V
-PLcom/android/server/search/SearchManagerService$MyPackageMonitor;->onSomePackagesChanged()V
-PLcom/android/server/search/SearchManagerService$MyPackageMonitor;->updateSearchables()V
+HPLcom/android/server/search/SearchManagerService$MyPackageMonitor;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/search/SearchManagerService$MyPackageMonitor;->onSomePackagesChanged()V
+HPLcom/android/server/search/SearchManagerService$MyPackageMonitor;->updateSearchables()V
 HSPLcom/android/server/search/SearchManagerService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/search/SearchManagerService;->access$100(Lcom/android/server/search/SearchManagerService;I)V
+PLcom/android/server/search/SearchManagerService;->access$200(Lcom/android/server/search/SearchManagerService;I)V
+PLcom/android/server/search/SearchManagerService;->access$300(Lcom/android/server/search/SearchManagerService;)Landroid/util/SparseArray;
+PLcom/android/server/search/SearchManagerService;->access$400(Lcom/android/server/search/SearchManagerService;)Landroid/content/Context;
 PLcom/android/server/search/SearchManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/search/SearchManagerService;->getGlobalSearchActivity()Landroid/content/ComponentName;
 PLcom/android/server/search/SearchManagerService;->getSearchableInfo(Landroid/content/ComponentName;)Landroid/app/SearchableInfo;
+PLcom/android/server/search/SearchManagerService;->getSearchables(I)Lcom/android/server/search/Searchables;
 PLcom/android/server/search/SearchManagerService;->getSearchables(IZ)Lcom/android/server/search/Searchables;
+PLcom/android/server/search/SearchManagerService;->getSearchablesInGlobalSearch()Ljava/util/List;
+PLcom/android/server/search/SearchManagerService;->getWebSearchActivity()Landroid/content/ComponentName;
+PLcom/android/server/search/SearchManagerService;->onCleanupUser(I)V
 PLcom/android/server/search/SearchManagerService;->onUnlockUser(I)V
 PLcom/android/server/search/Searchables$1;-><init>()V
+PLcom/android/server/search/Searchables$1;->compare(Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;)I
+PLcom/android/server/search/Searchables$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/search/Searchables;-><clinit>()V
 PLcom/android/server/search/Searchables;-><init>(Landroid/content/Context;I)V
-PLcom/android/server/search/Searchables;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/search/Searchables;->access$000(Landroid/content/pm/ResolveInfo;)Z
+PLcom/android/server/search/Searchables;->createFilterdSearchableInfoList(Ljava/util/List;)Ljava/util/ArrayList;
+HPLcom/android/server/search/Searchables;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HPLcom/android/server/search/Searchables;->findGlobalSearchActivities()Ljava/util/List;
-PLcom/android/server/search/Searchables;->findGlobalSearchActivity(Ljava/util/List;)Landroid/content/ComponentName;
-PLcom/android/server/search/Searchables;->findWebSearchActivity(Landroid/content/ComponentName;)Landroid/content/ComponentName;
-PLcom/android/server/search/Searchables;->getDefaultGlobalSearchProvider(Ljava/util/List;)Landroid/content/ComponentName;
-PLcom/android/server/search/Searchables;->getGlobalSearchProviderSetting()Ljava/lang/String;
+HPLcom/android/server/search/Searchables;->findGlobalSearchActivity(Ljava/util/List;)Landroid/content/ComponentName;
+HPLcom/android/server/search/Searchables;->findWebSearchActivity(Landroid/content/ComponentName;)Landroid/content/ComponentName;
+HPLcom/android/server/search/Searchables;->getDefaultGlobalSearchProvider(Ljava/util/List;)Landroid/content/ComponentName;
+PLcom/android/server/search/Searchables;->getGlobalSearchActivity()Landroid/content/ComponentName;
+HPLcom/android/server/search/Searchables;->getGlobalSearchProviderSetting()Ljava/lang/String;
 PLcom/android/server/search/Searchables;->getSearchableInfo(Landroid/content/ComponentName;)Landroid/app/SearchableInfo;
-PLcom/android/server/search/Searchables;->queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;
+PLcom/android/server/search/Searchables;->getSearchablesInGlobalSearchList()Ljava/util/ArrayList;
+PLcom/android/server/search/Searchables;->getWebSearchActivity()Landroid/content/ComponentName;
+PLcom/android/server/search/Searchables;->isSystemApp(Landroid/content/pm/ResolveInfo;)Z
+HPLcom/android/server/search/Searchables;->queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;
 HPLcom/android/server/search/Searchables;->updateSearchableList()V
+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;->loadAllCertificates()V
+HSPLcom/android/server/security/FileIntegrityService;->loadCertificatesFromDirectory(Ljava/lang/String;)V
+HSPLcom/android/server/security/FileIntegrityService;->loadCertificatesFromKeystore(Landroid/security/KeyStore;)V
+HSPLcom/android/server/security/FileIntegrityService;->onStart()V
 HSPLcom/android/server/security/KeyAttestationApplicationIdProviderService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/security/KeyAttestationApplicationIdProviderService;->getKeyAttestationApplicationId(I)Landroid/security/keymaster/KeyAttestationApplicationId;
 HSPLcom/android/server/security/KeyChainSystemService$1;-><init>(Lcom/android/server/security/KeyChainSystemService;)V
-PLcom/android/server/security/KeyChainSystemService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/security/KeyChainSystemService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/security/KeyChainSystemService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/security/KeyChainSystemService;->access$000(Lcom/android/server/security/KeyChainSystemService;Landroid/content/Intent;Landroid/os/UserHandle;)V
 HSPLcom/android/server/security/KeyChainSystemService;->onStart()V
-PLcom/android/server/security/KeyChainSystemService;->startServiceInBackgroundAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
-PLcom/android/server/security/VerityUtils;->getFsveritySignatureFilePath(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/security/KeyChainSystemService;->startServiceInBackgroundAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
+PLcom/android/server/security/VerityUtils$SetupResult;-><init>(ILjava/io/FileDescriptor;I)V
+PLcom/android/server/security/VerityUtils$SetupResult;->getContentSize()I
+PLcom/android/server/security/VerityUtils$SetupResult;->getUnownedFileDescriptor()Ljava/io/FileDescriptor;
+PLcom/android/server/security/VerityUtils$SetupResult;->isFailed()Z
+PLcom/android/server/security/VerityUtils$SetupResult;->isOk()Z
+PLcom/android/server/security/VerityUtils$SetupResult;->ok(Ljava/io/FileDescriptor;I)Lcom/android/server/security/VerityUtils$SetupResult;
+PLcom/android/server/security/VerityUtils$SetupResult;->skipped()Lcom/android/server/security/VerityUtils$SetupResult;
+PLcom/android/server/security/VerityUtils$TrackedShmBufferFactory;-><init>()V
+PLcom/android/server/security/VerityUtils$TrackedShmBufferFactory;-><init>(Lcom/android/server/security/VerityUtils$1;)V
+PLcom/android/server/security/VerityUtils$TrackedShmBufferFactory;->create(I)Ljava/nio/ByteBuffer;
+PLcom/android/server/security/VerityUtils$TrackedShmBufferFactory;->getBufferLimit()I
+PLcom/android/server/security/VerityUtils$TrackedShmBufferFactory;->releaseSharedMemory()Landroid/os/SharedMemory;
+HSPLcom/android/server/security/VerityUtils;->generateApkVerityRootHash(Ljava/lang/String;)[B
+PLcom/android/server/security/VerityUtils;->generateApkVeritySetupData(Ljava/lang/String;)Lcom/android/server/security/VerityUtils$SetupResult;
+PLcom/android/server/security/VerityUtils;->generateFsVerityIntoSharedMemory(Ljava/lang/String;[B)Landroid/util/Pair;
+HSPLcom/android/server/security/VerityUtils;->getFsveritySignatureFilePath(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/security/VerityUtils;->hasFsverity(Ljava/lang/String;)Z
+HSPLcom/android/server/security/VerityUtils;->isFsveritySignatureFile(Ljava/io/File;)Z
+PLcom/android/server/signedconfig/GlobalSettingsConfigApplicator;-><clinit>()V
+PLcom/android/server/signedconfig/GlobalSettingsConfigApplicator;-><init>(Landroid/content/Context;Ljava/lang/String;Lcom/android/server/signedconfig/SignedConfigEvent;)V
+PLcom/android/server/signedconfig/GlobalSettingsConfigApplicator;->applyConfig(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/signedconfig/GlobalSettingsConfigApplicator;->checkSignature(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/signedconfig/GlobalSettingsConfigApplicator;->getCurrentConfigVersion()I
+PLcom/android/server/signedconfig/GlobalSettingsConfigApplicator;->makeMap([Ljava/lang/Object;)Ljava/util/Map;
+PLcom/android/server/signedconfig/SignatureVerifier;-><init>(Lcom/android/server/signedconfig/SignedConfigEvent;)V
+PLcom/android/server/signedconfig/SignatureVerifier;->createKey(Ljava/lang/String;)Ljava/security/PublicKey;
+PLcom/android/server/signedconfig/SignatureVerifier;->verifySignature(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/signedconfig/SignatureVerifier;->verifyWithPublicKey(Ljava/security/PublicKey;[B[B)Z
+PLcom/android/server/signedconfig/SignedConfig$PerSdkConfig;-><init>(IILjava/util/Map;)V
+PLcom/android/server/signedconfig/SignedConfig;-><init>(ILjava/util/List;)V
+PLcom/android/server/signedconfig/SignedConfig;->parse(Ljava/lang/String;Ljava/util/Set;Ljava/util/Map;)Lcom/android/server/signedconfig/SignedConfig;
+PLcom/android/server/signedconfig/SignedConfig;->parsePerSdkConfig(Lorg/json/JSONObject;Ljava/util/Set;Ljava/util/Map;)Lcom/android/server/signedconfig/SignedConfig$PerSdkConfig;
+PLcom/android/server/signedconfig/SignedConfigEvent;-><init>()V
+PLcom/android/server/signedconfig/SignedConfigEvent;->send()V
 HSPLcom/android/server/signedconfig/SignedConfigService$UpdateReceiver;-><init>()V
 HSPLcom/android/server/signedconfig/SignedConfigService$UpdateReceiver;-><init>(Lcom/android/server/signedconfig/SignedConfigService$1;)V
 PLcom/android/server/signedconfig/SignedConfigService$UpdateReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/signedconfig/SignedConfigService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/signedconfig/SignedConfigService;->handlePackageBroadcast(Landroid/content/Intent;)V
 HSPLcom/android/server/signedconfig/SignedConfigService;->registerUpdateReceiver(Landroid/content/Context;)V
+PLcom/android/server/slice/-$$Lambda$PinnedSliceState$2PaYhOaggf1E5xg82LTTEwxmLE4;-><clinit>()V
+PLcom/android/server/slice/-$$Lambda$PinnedSliceState$2PaYhOaggf1E5xg82LTTEwxmLE4;-><init>()V
+PLcom/android/server/slice/-$$Lambda$PinnedSliceState$2PaYhOaggf1E5xg82LTTEwxmLE4;->test(Ljava/lang/Object;)Z
 PLcom/android/server/slice/-$$Lambda$PinnedSliceState$KzxFkvfomRuMb5PD8_pIHDIhUUE;-><init>(Lcom/android/server/slice/PinnedSliceState;)V
+PLcom/android/server/slice/-$$Lambda$PinnedSliceState$KzxFkvfomRuMb5PD8_pIHDIhUUE;->binderDied()V
 PLcom/android/server/slice/-$$Lambda$PinnedSliceState$TZdoqC_LDA8If7sQ7WXz9LM6VHg;-><init>(Lcom/android/server/slice/PinnedSliceState;)V
 PLcom/android/server/slice/-$$Lambda$PinnedSliceState$TZdoqC_LDA8If7sQ7WXz9LM6VHg;->run()V
+PLcom/android/server/slice/-$$Lambda$PinnedSliceState$j_JfEZwPCa729MjgsTSd8MAItIw;-><init>(Lcom/android/server/slice/PinnedSliceState;[Landroid/app/slice/SliceSpec;)V
+PLcom/android/server/slice/-$$Lambda$PinnedSliceState$j_JfEZwPCa729MjgsTSd8MAItIw;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/slice/-$$Lambda$PinnedSliceState$t5Vl61Ns1u_83c4ri7920sczEu0;-><init>(Lcom/android/server/slice/PinnedSliceState;)V
 PLcom/android/server/slice/-$$Lambda$PinnedSliceState$t5Vl61Ns1u_83c4ri7920sczEu0;->run()V
+PLcom/android/server/slice/-$$Lambda$PinnedSliceState$vxnx7v9Z67Tj9aywVmtdX48br1M;-><clinit>()V
+PLcom/android/server/slice/-$$Lambda$PinnedSliceState$vxnx7v9Z67Tj9aywVmtdX48br1M;-><init>()V
+PLcom/android/server/slice/-$$Lambda$PinnedSliceState$vxnx7v9Z67Tj9aywVmtdX48br1M;->apply(I)Ljava/lang/Object;
+PLcom/android/server/slice/-$$Lambda$SliceManagerService$EsoJb3dNe0G_qzoQixj72OS5gnw;-><init>(I)V
+PLcom/android/server/slice/-$$Lambda$SliceManagerService$EsoJb3dNe0G_qzoQixj72OS5gnw;->test(Ljava/lang/Object;)Z
 PLcom/android/server/slice/-$$Lambda$SliceManagerService$LkusK1jmu9JKJTiMRWqWxNGEGbY;-><init>(Lcom/android/server/slice/SliceManagerService;I)V
-PLcom/android/server/slice/-$$Lambda$SliceManagerService$LkusK1jmu9JKJTiMRWqWxNGEGbY;->get()Ljava/lang/Object;
+HPLcom/android/server/slice/-$$Lambda$SliceManagerService$LkusK1jmu9JKJTiMRWqWxNGEGbY;->get()Ljava/lang/Object;
 PLcom/android/server/slice/-$$Lambda$SliceManagerService$ic_PW16x_KcVi-NszMwHhErqI0s;-><init>(Lcom/android/server/slice/SliceManagerService;I)V
-PLcom/android/server/slice/-$$Lambda$SliceManagerService$ic_PW16x_KcVi-NszMwHhErqI0s;->get()Ljava/lang/Object;
+HPLcom/android/server/slice/-$$Lambda$SliceManagerService$ic_PW16x_KcVi-NszMwHhErqI0s;->get()Ljava/lang/Object;
 PLcom/android/server/slice/-$$Lambda$SliceManagerService$pJ39TkC3AEVezLFEPuJgSQSTDJM;-><init>(Lcom/android/server/slice/SliceManagerService;Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/slice/-$$Lambda$SliceManagerService$pJ39TkC3AEVezLFEPuJgSQSTDJM;->run()V
 PLcom/android/server/slice/-$$Lambda$SlicePermissionManager$y3Tun5dTftw8s8sky62syeWR34U;-><clinit>()V
 PLcom/android/server/slice/-$$Lambda$SlicePermissionManager$y3Tun5dTftw8s8sky62syeWR34U;-><init>()V
 PLcom/android/server/slice/PinnedSliceState$ListenerInfo;-><init>(Lcom/android/server/slice/PinnedSliceState;Landroid/os/IBinder;Ljava/lang/String;ZII)V
-PLcom/android/server/slice/PinnedSliceState;-><init>(Lcom/android/server/slice/SliceManagerService;Landroid/net/Uri;Ljava/lang/String;)V
-PLcom/android/server/slice/PinnedSliceState;->getClient()Landroid/content/ContentProviderClient;
+PLcom/android/server/slice/PinnedSliceState$ListenerInfo;->access$000(Lcom/android/server/slice/PinnedSliceState$ListenerInfo;)Landroid/os/IBinder;
+HPLcom/android/server/slice/PinnedSliceState;-><init>(Lcom/android/server/slice/SliceManagerService;Landroid/net/Uri;Ljava/lang/String;)V
+PLcom/android/server/slice/PinnedSliceState;->checkSelfRemove()V
+PLcom/android/server/slice/PinnedSliceState;->destroy()V
+HPLcom/android/server/slice/PinnedSliceState;->findSpec([Landroid/app/slice/SliceSpec;Ljava/lang/String;)Landroid/app/slice/SliceSpec;
+HPLcom/android/server/slice/PinnedSliceState;->getClient()Landroid/content/ContentProviderClient;
 PLcom/android/server/slice/PinnedSliceState;->getPkg()Ljava/lang/String;
 PLcom/android/server/slice/PinnedSliceState;->getSpecs()[Landroid/app/slice/SliceSpec;
 PLcom/android/server/slice/PinnedSliceState;->getUri()Landroid/net/Uri;
+PLcom/android/server/slice/PinnedSliceState;->handleRecheckListeners()V
 PLcom/android/server/slice/PinnedSliceState;->handleSendPinned()V
 PLcom/android/server/slice/PinnedSliceState;->handleSendUnpinned()V
 PLcom/android/server/slice/PinnedSliceState;->hasPinOrListener()Z
+PLcom/android/server/slice/PinnedSliceState;->lambda$KzxFkvfomRuMb5PD8_pIHDIhUUE(Lcom/android/server/slice/PinnedSliceState;)V
 PLcom/android/server/slice/PinnedSliceState;->lambda$TZdoqC_LDA8If7sQ7WXz9LM6VHg(Lcom/android/server/slice/PinnedSliceState;)V
+PLcom/android/server/slice/PinnedSliceState;->lambda$mergeSpecs$0$PinnedSliceState([Landroid/app/slice/SliceSpec;Landroid/app/slice/SliceSpec;)Landroid/app/slice/SliceSpec;
+PLcom/android/server/slice/PinnedSliceState;->lambda$mergeSpecs$1(Landroid/app/slice/SliceSpec;)Z
+PLcom/android/server/slice/PinnedSliceState;->lambda$mergeSpecs$2(I)[Landroid/app/slice/SliceSpec;
+PLcom/android/server/slice/PinnedSliceState;->lambda$t5Vl61Ns1u_83c4ri7920sczEu0(Lcom/android/server/slice/PinnedSliceState;)V
 PLcom/android/server/slice/PinnedSliceState;->mergeSpecs([Landroid/app/slice/SliceSpec;)V
-PLcom/android/server/slice/PinnedSliceState;->pin(Ljava/lang/String;[Landroid/app/slice/SliceSpec;Landroid/os/IBinder;)V
-PLcom/android/server/slice/PinnedSliceState;->setSlicePinned(Z)V
+HPLcom/android/server/slice/PinnedSliceState;->pin(Ljava/lang/String;[Landroid/app/slice/SliceSpec;Landroid/os/IBinder;)V
+HPLcom/android/server/slice/PinnedSliceState;->setSlicePinned(Z)V
 PLcom/android/server/slice/PinnedSliceState;->unpin(Ljava/lang/String;Landroid/os/IBinder;)Z
 HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;-><init>(Ljava/lang/String;Lcom/android/server/slice/SlicePermissionManager$PkgUser;Lcom/android/server/slice/DirtyTracker;)V
-PLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->access$000(Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;)Ljava/lang/String;
-PLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->access$100(Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;)Lcom/android/server/slice/SlicePermissionManager$PkgUser;
+HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->access$000(Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;)Ljava/lang/String;
+HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->access$100(Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;)Lcom/android/server/slice/SlicePermissionManager$PkgUser;
 HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->addPath(Ljava/util/List;)V
 HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->decodeSegments(Ljava/lang/String;)[Ljava/lang/String;
 HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->encodeSegments([Ljava/lang/String;)Ljava/lang/String;
@@ -17628,218 +28936,990 @@
 HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->writeTo(Lorg/xmlpull/v1/XmlSerializer;)V
 PLcom/android/server/slice/SliceClientPermissions;-><clinit>()V
 PLcom/android/server/slice/SliceClientPermissions;-><init>(Lcom/android/server/slice/SlicePermissionManager$PkgUser;Lcom/android/server/slice/DirtyTracker;)V
-PLcom/android/server/slice/SliceClientPermissions;->createFrom(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/slice/DirtyTracker;)Lcom/android/server/slice/SliceClientPermissions;
-PLcom/android/server/slice/SliceClientPermissions;->getAuthority(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;
+PLcom/android/server/slice/SliceClientPermissions;->access$200()Ljava/lang/String;
+PLcom/android/server/slice/SliceClientPermissions;->clear()V
+HPLcom/android/server/slice/SliceClientPermissions;->createFrom(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/slice/DirtyTracker;)Lcom/android/server/slice/SliceClientPermissions;
+HPLcom/android/server/slice/SliceClientPermissions;->getAuthority(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;
 PLcom/android/server/slice/SliceClientPermissions;->getFileName()Ljava/lang/String;
 PLcom/android/server/slice/SliceClientPermissions;->getFileName(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Ljava/lang/String;
-PLcom/android/server/slice/SliceClientPermissions;->getOrCreateAuthority(Lcom/android/server/slice/SlicePermissionManager$PkgUser;Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;
-PLcom/android/server/slice/SliceClientPermissions;->hasFullAccess()Z
-PLcom/android/server/slice/SliceClientPermissions;->hasPermission(Landroid/net/Uri;I)Z
+HPLcom/android/server/slice/SliceClientPermissions;->getOrCreateAuthority(Lcom/android/server/slice/SlicePermissionManager$PkgUser;Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;
+HPLcom/android/server/slice/SliceClientPermissions;->grantUri(Landroid/net/Uri;Lcom/android/server/slice/SlicePermissionManager$PkgUser;)V
+HPLcom/android/server/slice/SliceClientPermissions;->hasFullAccess()Z
+HPLcom/android/server/slice/SliceClientPermissions;->hasPermission(Landroid/net/Uri;I)Z
 PLcom/android/server/slice/SliceClientPermissions;->onPersistableDirty(Lcom/android/server/slice/DirtyTracker$Persistable;)V
-PLcom/android/server/slice/SliceClientPermissions;->writeTo(Lorg/xmlpull/v1/XmlSerializer;)V
+PLcom/android/server/slice/SliceClientPermissions;->removeAuthority(Ljava/lang/String;I)V
+HPLcom/android/server/slice/SliceClientPermissions;->writeTo(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/slice/SliceManagerService$1;-><init>(Lcom/android/server/slice/SliceManagerService;)V
-PLcom/android/server/slice/SliceManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/slice/SliceManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/slice/SliceManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/slice/SliceManagerService$Lifecycle;->onBootPhase(I)V
 HSPLcom/android/server/slice/SliceManagerService$Lifecycle;->onStart()V
+PLcom/android/server/slice/SliceManagerService$Lifecycle;->onStopUser(I)V
 PLcom/android/server/slice/SliceManagerService$Lifecycle;->onUnlockUser(I)V
 PLcom/android/server/slice/SliceManagerService$PackageMatchingCache;-><init>(Ljava/util/function/Supplier;)V
-PLcom/android/server/slice/SliceManagerService$PackageMatchingCache;->matches(Ljava/lang/String;)Z
+HPLcom/android/server/slice/SliceManagerService$PackageMatchingCache;->matches(Ljava/lang/String;)Z
 HSPLcom/android/server/slice/SliceManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/slice/SliceManagerService;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
+PLcom/android/server/slice/SliceManagerService;->access$000(Lcom/android/server/slice/SliceManagerService;)Lcom/android/server/slice/SlicePermissionManager;
 HSPLcom/android/server/slice/SliceManagerService;->access$100(Lcom/android/server/slice/SliceManagerService;)V
 PLcom/android/server/slice/SliceManagerService;->access$200(Lcom/android/server/slice/SliceManagerService;I)V
-PLcom/android/server/slice/SliceManagerService;->checkAccess(Ljava/lang/String;Landroid/net/Uri;II)I
-PLcom/android/server/slice/SliceManagerService;->checkSlicePermission(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;II[Ljava/lang/String;)I
+PLcom/android/server/slice/SliceManagerService;->access$300(Lcom/android/server/slice/SliceManagerService;I)V
+HPLcom/android/server/slice/SliceManagerService;->checkAccess(Ljava/lang/String;Landroid/net/Uri;II)I
+HPLcom/android/server/slice/SliceManagerService;->checkSlicePermission(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;II[Ljava/lang/String;)I
 HSPLcom/android/server/slice/SliceManagerService;->createHandler()Lcom/android/server/ServiceThread;
 PLcom/android/server/slice/SliceManagerService;->createPinnedSlice(Landroid/net/Uri;Ljava/lang/String;)Lcom/android/server/slice/PinnedSliceState;
-PLcom/android/server/slice/SliceManagerService;->enforceAccess(Ljava/lang/String;Landroid/net/Uri;)V
-PLcom/android/server/slice/SliceManagerService;->enforceCrossUser(Ljava/lang/String;Landroid/net/Uri;)V
-PLcom/android/server/slice/SliceManagerService;->enforceOwner(Ljava/lang/String;Landroid/net/Uri;I)V
-PLcom/android/server/slice/SliceManagerService;->getAssistant(I)Ljava/lang/String;
-PLcom/android/server/slice/SliceManagerService;->getAssistantMatcher(I)Lcom/android/server/slice/SliceManagerService$PackageMatchingCache;
+HPLcom/android/server/slice/SliceManagerService;->enforceAccess(Ljava/lang/String;Landroid/net/Uri;)V
+HPLcom/android/server/slice/SliceManagerService;->enforceCrossUser(Ljava/lang/String;Landroid/net/Uri;)V
+HPLcom/android/server/slice/SliceManagerService;->enforceOwner(Ljava/lang/String;Landroid/net/Uri;I)V
+HPLcom/android/server/slice/SliceManagerService;->getAssistant(I)Ljava/lang/String;
+HPLcom/android/server/slice/SliceManagerService;->getAssistantMatcher(I)Lcom/android/server/slice/SliceManagerService$PackageMatchingCache;
 PLcom/android/server/slice/SliceManagerService;->getBackupPayload(I)[B
 PLcom/android/server/slice/SliceManagerService;->getContext()Landroid/content/Context;
-PLcom/android/server/slice/SliceManagerService;->getDefaultHome(I)Ljava/lang/String;
+HPLcom/android/server/slice/SliceManagerService;->getDefaultHome(I)Ljava/lang/String;
 PLcom/android/server/slice/SliceManagerService;->getHandler()Landroid/os/Handler;
-PLcom/android/server/slice/SliceManagerService;->getHomeMatcher(I)Lcom/android/server/slice/SliceManagerService$PackageMatchingCache;
+HPLcom/android/server/slice/SliceManagerService;->getHomeMatcher(I)Lcom/android/server/slice/SliceManagerService$PackageMatchingCache;
 PLcom/android/server/slice/SliceManagerService;->getLock()Ljava/lang/Object;
-PLcom/android/server/slice/SliceManagerService;->getOrCreatePinnedSlice(Landroid/net/Uri;Ljava/lang/String;)Lcom/android/server/slice/PinnedSliceState;
-PLcom/android/server/slice/SliceManagerService;->getPinnedSlice(Landroid/net/Uri;)Lcom/android/server/slice/PinnedSliceState;
-PLcom/android/server/slice/SliceManagerService;->getPinnedSlices(Ljava/lang/String;)[Landroid/net/Uri;
-PLcom/android/server/slice/SliceManagerService;->getPinnedSpecs(Landroid/net/Uri;Ljava/lang/String;)[Landroid/app/slice/SliceSpec;
-PLcom/android/server/slice/SliceManagerService;->getProviderPkg(Landroid/net/Uri;I)Ljava/lang/String;
-PLcom/android/server/slice/SliceManagerService;->grantSlicePermission(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)V
-PLcom/android/server/slice/SliceManagerService;->hasFullSliceAccess(Ljava/lang/String;I)Z
-PLcom/android/server/slice/SliceManagerService;->isAssistant(Ljava/lang/String;I)Z
-PLcom/android/server/slice/SliceManagerService;->isDefaultHomeApp(Ljava/lang/String;I)Z
-PLcom/android/server/slice/SliceManagerService;->isGrantedFullAccess(Ljava/lang/String;I)Z
-PLcom/android/server/slice/SliceManagerService;->lambda$getAssistantMatcher$2$SliceManagerService(I)Ljava/lang/String;
-PLcom/android/server/slice/SliceManagerService;->lambda$getHomeMatcher$3$SliceManagerService(I)Ljava/lang/String;
+HPLcom/android/server/slice/SliceManagerService;->getOrCreatePinnedSlice(Landroid/net/Uri;Ljava/lang/String;)Lcom/android/server/slice/PinnedSliceState;
+HPLcom/android/server/slice/SliceManagerService;->getPinnedSlice(Landroid/net/Uri;)Lcom/android/server/slice/PinnedSliceState;
+HPLcom/android/server/slice/SliceManagerService;->getPinnedSlices(Ljava/lang/String;)[Landroid/net/Uri;
+HPLcom/android/server/slice/SliceManagerService;->getPinnedSpecs(Landroid/net/Uri;Ljava/lang/String;)[Landroid/app/slice/SliceSpec;
+HPLcom/android/server/slice/SliceManagerService;->getProviderPkg(Landroid/net/Uri;I)Ljava/lang/String;
+HPLcom/android/server/slice/SliceManagerService;->grantSlicePermission(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)V
+HPLcom/android/server/slice/SliceManagerService;->hasFullSliceAccess(Ljava/lang/String;I)Z
+HPLcom/android/server/slice/SliceManagerService;->isAssistant(Ljava/lang/String;I)Z
+HPLcom/android/server/slice/SliceManagerService;->isDefaultHomeApp(Ljava/lang/String;I)Z
+HPLcom/android/server/slice/SliceManagerService;->isGrantedFullAccess(Ljava/lang/String;I)Z
+HPLcom/android/server/slice/SliceManagerService;->lambda$getAssistantMatcher$2$SliceManagerService(I)Ljava/lang/String;
+HPLcom/android/server/slice/SliceManagerService;->lambda$getHomeMatcher$3$SliceManagerService(I)Ljava/lang/String;
+PLcom/android/server/slice/SliceManagerService;->lambda$onStopUser$0(ILcom/android/server/slice/PinnedSliceState;)Z
 PLcom/android/server/slice/SliceManagerService;->lambda$pinSlice$1$SliceManagerService(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/slice/SliceManagerService;->onStopUser(I)V
 PLcom/android/server/slice/SliceManagerService;->onUnlockUser(I)V
-PLcom/android/server/slice/SliceManagerService;->pinSlice(Ljava/lang/String;Landroid/net/Uri;[Landroid/app/slice/SliceSpec;Landroid/os/IBinder;)V
+HPLcom/android/server/slice/SliceManagerService;->pinSlice(Ljava/lang/String;Landroid/net/Uri;[Landroid/app/slice/SliceSpec;Landroid/os/IBinder;)V
 PLcom/android/server/slice/SliceManagerService;->removePinnedSlice(Landroid/net/Uri;)V
 HSPLcom/android/server/slice/SliceManagerService;->systemReady()V
-PLcom/android/server/slice/SliceManagerService;->unpinSlice(Ljava/lang/String;Landroid/net/Uri;Landroid/os/IBinder;)V
-PLcom/android/server/slice/SliceManagerService;->verifyCaller(Ljava/lang/String;)V
+HPLcom/android/server/slice/SliceManagerService;->unpinSlice(Ljava/lang/String;Landroid/net/Uri;Landroid/os/IBinder;)V
+HPLcom/android/server/slice/SliceManagerService;->verifyCaller(Ljava/lang/String;)V
 HSPLcom/android/server/slice/SlicePermissionManager$H;-><init>(Lcom/android/server/slice/SlicePermissionManager;Landroid/os/Looper;)V
-PLcom/android/server/slice/SlicePermissionManager$H;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/slice/SlicePermissionManager$ParserHolder;-><init>(Lcom/android/server/slice/SlicePermissionManager;)V
+HPLcom/android/server/slice/SlicePermissionManager$H;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/slice/SlicePermissionManager$ParserHolder;-><init>(Lcom/android/server/slice/SlicePermissionManager;)V
 PLcom/android/server/slice/SlicePermissionManager$ParserHolder;-><init>(Lcom/android/server/slice/SlicePermissionManager;Lcom/android/server/slice/SlicePermissionManager$1;)V
-PLcom/android/server/slice/SlicePermissionManager$PkgUser;-><init>(Ljava/lang/String;)V
-PLcom/android/server/slice/SlicePermissionManager$PkgUser;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/slice/SlicePermissionManager$ParserHolder;->access$100(Lcom/android/server/slice/SlicePermissionManager$ParserHolder;)Lorg/xmlpull/v1/XmlPullParser;
+PLcom/android/server/slice/SlicePermissionManager$ParserHolder;->access$102(Lcom/android/server/slice/SlicePermissionManager$ParserHolder;Lorg/xmlpull/v1/XmlPullParser;)Lorg/xmlpull/v1/XmlPullParser;
+PLcom/android/server/slice/SlicePermissionManager$ParserHolder;->access$300(Lcom/android/server/slice/SlicePermissionManager$ParserHolder;)Ljava/io/InputStream;
+PLcom/android/server/slice/SlicePermissionManager$ParserHolder;->access$302(Lcom/android/server/slice/SlicePermissionManager$ParserHolder;Ljava/io/InputStream;)Ljava/io/InputStream;
+HPLcom/android/server/slice/SlicePermissionManager$ParserHolder;->close()V
+HPLcom/android/server/slice/SlicePermissionManager$PkgUser;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/slice/SlicePermissionManager$PkgUser;-><init>(Ljava/lang/String;I)V
 HPLcom/android/server/slice/SlicePermissionManager$PkgUser;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/slice/SlicePermissionManager$PkgUser;->getPkg()Ljava/lang/String;
+PLcom/android/server/slice/SlicePermissionManager$PkgUser;->getUserId()I
 HPLcom/android/server/slice/SlicePermissionManager$PkgUser;->hashCode()I
-PLcom/android/server/slice/SlicePermissionManager$PkgUser;->toString()Ljava/lang/String;
+HPLcom/android/server/slice/SlicePermissionManager$PkgUser;->toString()Ljava/lang/String;
 HSPLcom/android/server/slice/SlicePermissionManager;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
 HSPLcom/android/server/slice/SlicePermissionManager;-><init>(Landroid/content/Context;Landroid/os/Looper;Ljava/io/File;)V
-PLcom/android/server/slice/SlicePermissionManager;->getClient(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceClientPermissions;
-PLcom/android/server/slice/SlicePermissionManager;->getFile(Ljava/lang/String;)Landroid/util/AtomicFile;
-PLcom/android/server/slice/SlicePermissionManager;->getParser(Ljava/lang/String;)Lcom/android/server/slice/SlicePermissionManager$ParserHolder;
-PLcom/android/server/slice/SlicePermissionManager;->getProvider(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceProviderPermissions;
-PLcom/android/server/slice/SlicePermissionManager;->grantSliceAccess(Ljava/lang/String;ILjava/lang/String;ILandroid/net/Uri;)V
+PLcom/android/server/slice/SlicePermissionManager;->access$400(Lcom/android/server/slice/SlicePermissionManager;)Landroid/util/ArraySet;
+PLcom/android/server/slice/SlicePermissionManager;->access$600(Lcom/android/server/slice/SlicePermissionManager;)Landroid/util/ArrayMap;
+PLcom/android/server/slice/SlicePermissionManager;->access$700(Lcom/android/server/slice/SlicePermissionManager;)Landroid/util/ArrayMap;
+HPLcom/android/server/slice/SlicePermissionManager;->getClient(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceClientPermissions;
+HPLcom/android/server/slice/SlicePermissionManager;->getFile(Ljava/lang/String;)Landroid/util/AtomicFile;
+HPLcom/android/server/slice/SlicePermissionManager;->getParser(Ljava/lang/String;)Lcom/android/server/slice/SlicePermissionManager$ParserHolder;
+HPLcom/android/server/slice/SlicePermissionManager;->getProvider(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceProviderPermissions;
+HPLcom/android/server/slice/SlicePermissionManager;->grantSliceAccess(Ljava/lang/String;ILjava/lang/String;ILandroid/net/Uri;)V
 PLcom/android/server/slice/SlicePermissionManager;->handlePersist()V
-PLcom/android/server/slice/SlicePermissionManager;->hasFullAccess(Ljava/lang/String;I)Z
-PLcom/android/server/slice/SlicePermissionManager;->hasPermission(Ljava/lang/String;ILandroid/net/Uri;)Z
-PLcom/android/server/slice/SlicePermissionManager;->onPersistableDirty(Lcom/android/server/slice/DirtyTracker$Persistable;)V
-PLcom/android/server/slice/SlicePermissionManager;->writeBackup(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/slice/SlicePermissionManager;->hasFullAccess(Ljava/lang/String;I)Z
+HPLcom/android/server/slice/SlicePermissionManager;->hasPermission(Ljava/lang/String;ILandroid/net/Uri;)Z
+HPLcom/android/server/slice/SlicePermissionManager;->onPersistableDirty(Lcom/android/server/slice/DirtyTracker$Persistable;)V
+HPLcom/android/server/slice/SlicePermissionManager;->removePkg(Ljava/lang/String;I)V
+HPLcom/android/server/slice/SlicePermissionManager;->writeBackup(Lorg/xmlpull/v1/XmlSerializer;)V
 HPLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;-><init>(Ljava/lang/String;Lcom/android/server/slice/DirtyTracker;)V
 PLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->access$000(Lcom/android/server/slice/SliceProviderPermissions$SliceAuthority;)Ljava/lang/String;
-PLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->addPkg(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)V
-PLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->getAuthority()Ljava/lang/String;
-PLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->readFrom(Lorg/xmlpull/v1/XmlPullParser;)V
-PLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->writeTo(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->addPkg(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)V
+HPLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->getAuthority()Ljava/lang/String;
+PLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->getPkgs()Ljava/util/Collection;
+HPLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->readFrom(Lorg/xmlpull/v1/XmlPullParser;)V
+HPLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->writeTo(Lorg/xmlpull/v1/XmlSerializer;)V
 PLcom/android/server/slice/SliceProviderPermissions;-><clinit>()V
-PLcom/android/server/slice/SliceProviderPermissions;-><init>(Lcom/android/server/slice/SlicePermissionManager$PkgUser;Lcom/android/server/slice/DirtyTracker;)V
+HPLcom/android/server/slice/SliceProviderPermissions;-><init>(Lcom/android/server/slice/SlicePermissionManager$PkgUser;Lcom/android/server/slice/DirtyTracker;)V
 HPLcom/android/server/slice/SliceProviderPermissions;->access$100()Ljava/lang/String;
-PLcom/android/server/slice/SliceProviderPermissions;->createFrom(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/slice/DirtyTracker;)Lcom/android/server/slice/SliceProviderPermissions;
+HPLcom/android/server/slice/SliceProviderPermissions;->createFrom(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/slice/DirtyTracker;)Lcom/android/server/slice/SliceProviderPermissions;
+HPLcom/android/server/slice/SliceProviderPermissions;->getAuthorities()Ljava/util/Collection;
+PLcom/android/server/slice/SliceProviderPermissions;->getFileName()Ljava/lang/String;
 PLcom/android/server/slice/SliceProviderPermissions;->getFileName(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Ljava/lang/String;
-PLcom/android/server/slice/SliceProviderPermissions;->getOrCreateAuthority(Ljava/lang/String;)Lcom/android/server/slice/SliceProviderPermissions$SliceAuthority;
-PLcom/android/server/slice/SliceProviderPermissions;->writeTo(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/slice/SliceProviderPermissions;->getOrCreateAuthority(Ljava/lang/String;)Lcom/android/server/slice/SliceProviderPermissions$SliceAuthority;
+PLcom/android/server/slice/SliceProviderPermissions;->onPersistableDirty(Lcom/android/server/slice/DirtyTracker$Persistable;)V
+HPLcom/android/server/slice/SliceProviderPermissions;->writeTo(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$F-iA254xzDfAHrQW86c2oSqXfwI;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent;)V
+HPLcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$F-iA254xzDfAHrQW86c2oSqXfwI;->run(ILandroid/media/soundtrigger/ISoundTriggerDetectionService;)V
+HPLcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$crQZgbDmIG6q92Mrkm49T2yqrs0;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;I)V
+PLcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$crQZgbDmIG6q92Mrkm49T2yqrs0;->run(ILandroid/media/soundtrigger/ISoundTriggerDetectionService;)V
+HPLcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$pFqiq_C9KJsoa_HQOdj7lmMixsI;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent;)V
+HPLcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$t5mBYXswwLAAdm47WS10stLjYng;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;)V
+HPLcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$t5mBYXswwLAAdm47WS10stLjYng;->run()V
+PLcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$wfDlqQ7aPvu9qZCZ24jJu4tfUMY;-><clinit>()V
+PLcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$wfDlqQ7aPvu9qZCZ24jJu4tfUMY;-><init>()V
+HPLcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$wfDlqQ7aPvu9qZCZ24jJu4tfUMY;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$yqLMvkOmrO13yWrggtSaVrLgsWo;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;)V
+HPLcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$yqLMvkOmrO13yWrggtSaVrLgsWo;->run()V
 HSPLcom/android/server/soundtrigger/SoundTriggerDbHelper;-><init>(Landroid/content/Context;)V
-PLcom/android/server/soundtrigger/SoundTriggerDbHelper;->deleteGenericSoundModel(Ljava/util/UUID;)Z
-PLcom/android/server/soundtrigger/SoundTriggerDbHelper;->getGenericSoundModel(Ljava/util/UUID;)Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;
+HPLcom/android/server/soundtrigger/SoundTriggerDbHelper;->deleteGenericSoundModel(Ljava/util/UUID;)Z
+PLcom/android/server/soundtrigger/SoundTriggerDbHelper;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/soundtrigger/SoundTriggerDbHelper;->getGenericSoundModel(Ljava/util/UUID;)Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;
+PLcom/android/server/soundtrigger/SoundTriggerDbHelper;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase;II)V
+HPLcom/android/server/soundtrigger/SoundTriggerDbHelper;->updateGenericSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;)Z
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;-><init>(Ljava/util/UUID;I)V
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->clearCallback()V
+PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->callbackToString()Ljava/lang/String;
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->clearCallback()V
+PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->clearState()V
+PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->createGenericModelData(Ljava/util/UUID;)Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->createKeyphraseModelData(Ljava/util/UUID;)Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getCallback()Landroid/hardware/soundtrigger/IRecognitionStatusCallback;
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getHandle()I
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getModelId()Ljava/util/UUID;
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getCallback()Landroid/hardware/soundtrigger/IRecognitionStatusCallback;
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getHandle()I
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getModelId()Ljava/util/UUID;
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getRecognitionConfig()Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getSoundModel()Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getSoundModel()Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isGenericModel()Z
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isKeyphraseModel()Z
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isModelLoaded()Z
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isModelStarted()Z
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isModelLoaded()Z
+PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isModelNotLoaded()Z
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isModelStarted()Z
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isRequested()Z
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setCallback(Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->modelTypeToString()Ljava/lang/String;
+PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->requestedToString()Ljava/lang/String;
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setCallback(Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)V
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setHandle(I)V
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setLoaded()V
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setRecognitionConfig(Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)V
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setRequested(Z)V
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;)V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setRecognitionConfig(Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setRequested(Z)V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;)V
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setStarted()V
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setStopped()V
+PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->stateToString()Ljava/lang/String;
+PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->toString()Ljava/lang/String;
+PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->uuidToString()Ljava/lang/String;
 HSPLcom/android/server/soundtrigger/SoundTriggerHelper$MyCallStateListener;-><init>(Lcom/android/server/soundtrigger/SoundTriggerHelper;)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper$MyCallStateListener;->onCallStateChanged(ILjava/lang/String;)V
 PLcom/android/server/soundtrigger/SoundTriggerHelper$PowerSaveModeListener;-><init>(Lcom/android/server/soundtrigger/SoundTriggerHelper;)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper$PowerSaveModeListener;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/soundtrigger/SoundTriggerHelper;-><init>(Landroid/content/Context;)V
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->computeRecognitionRequestedLocked()Z
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->access$000(Lcom/android/server/soundtrigger/SoundTriggerHelper;)Ljava/lang/Object;
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->access$100(Lcom/android/server/soundtrigger/SoundTriggerHelper;Z)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->access$200(Lcom/android/server/soundtrigger/SoundTriggerHelper;)Landroid/os/PowerManager;
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->access$300(Lcom/android/server/soundtrigger/SoundTriggerHelper;Z)V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->computeRecognitionRequestedLocked()Z
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->createKeyphraseModelDataLocked(Ljava/util/UUID;I)Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->getKeyphraseModelDataLocked(I)Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->forceStopAndUnloadModelLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;Ljava/lang/Exception;)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->forceStopAndUnloadModelLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;Ljava/lang/Exception;Ljava/util/Iterator;)V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->getGenericModelState(Ljava/util/UUID;)I
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->getKeyphraseIdFromEvent(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;)I
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->getKeyphraseModelDataLocked(I)Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->getModelDataForLocked(I)Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->getModuleProperties()Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->initializeTelephonyAndPowerStateListeners()V
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->internalClearGlobalStateLocked()V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->getOrCreateGenericModelDataLocked(Ljava/util/UUID;)Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->initializeTelephonyAndPowerStateListeners()V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->internalClearGlobalStateLocked()V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->internalClearModelStateLocked()V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->isKeyphraseRecognitionEvent(Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;)Z
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->isRecognitionAllowed()Z
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->onKeyphraseRecognitionSuccessLocked(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->isRecognitionRequested(Ljava/util/UUID;)Z
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->onCallStateChangedLocked(Z)V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->onGenericRecognitionSuccessLocked(Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent;)V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->onKeyphraseRecognitionSuccessLocked(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->onPowerSaveModeChangedLocked(Z)V
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->onRecognition(Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->onServiceDied()V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->onServiceDiedLocked()V
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->onServiceStateChange(I)V
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->onServiceStateChangedLocked(Z)V
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->startKeyphraseRecognition(ILandroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->startRecognition(Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;I)I
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->startRecognitionLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;Z)I
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->stopAndUnloadDeadModelsLocked()V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->removeKeyphraseModelLocked(I)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->sendErrorCallbacksToAllLocked(I)V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->startGenericRecognition(Ljava/util/UUID;Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->startKeyphraseRecognition(ILandroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->startRecognition(Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;I)I
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->startRecognitionLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;Z)I
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->stopAndUnloadDeadModelsLocked()V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->stopGenericRecognition(Ljava/util/UUID;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->stopKeyphraseRecognition(ILandroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->stopRecognition(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->stopRecognitionLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;Z)I
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->unloadGenericSoundModel(Ljava/util/UUID;)I
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->tryStopAndUnloadLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;ZZ)I
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->unloadGenericSoundModel(Ljava/util/UUID;)I
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->unloadKeyphraseSoundModel(I)I
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->updateAllRecognitionsLocked(Z)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->updateRecognitionLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;ZZ)I
 HSPLcom/android/server/soundtrigger/SoundTriggerInternal;-><init>()V
 PLcom/android/server/soundtrigger/SoundTriggerLogger$Event;-><clinit>()V
-PLcom/android/server/soundtrigger/SoundTriggerLogger$Event;-><init>()V
+HPLcom/android/server/soundtrigger/SoundTriggerLogger$Event;-><init>()V
 HPLcom/android/server/soundtrigger/SoundTriggerLogger$Event;->toString()Ljava/lang/String;
-PLcom/android/server/soundtrigger/SoundTriggerLogger$StringEvent;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/soundtrigger/SoundTriggerLogger$StringEvent;-><init>(Ljava/lang/String;)V
 PLcom/android/server/soundtrigger/SoundTriggerLogger$StringEvent;->eventToString()Ljava/lang/String;
 HSPLcom/android/server/soundtrigger/SoundTriggerLogger;-><init>(ILjava/lang/String;)V
-PLcom/android/server/soundtrigger/SoundTriggerLogger;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/soundtrigger/SoundTriggerLogger;->dump(Ljava/io/PrintWriter;)V
 HPLcom/android/server/soundtrigger/SoundTriggerLogger;->log(Lcom/android/server/soundtrigger/SoundTriggerLogger$Event;)V
 HSPLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService;Landroid/content/Context;)V
+PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;->getModuleProperties()Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
 PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;->isInitialized()Z
 HSPLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;->setSoundTriggerHelper(Lcom/android/server/soundtrigger/SoundTriggerHelper;)V
-PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;->startRecognition(ILandroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
+HPLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;->startRecognition(ILandroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
 PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;->stopRecognition(ILandroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
+PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;->unloadKeyphraseModel(I)I
+PLcom/android/server/soundtrigger/SoundTriggerService$NumOps;-><init>()V
+PLcom/android/server/soundtrigger/SoundTriggerService$NumOps;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$1;)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$NumOps;->addOp(J)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$NumOps;->clearOldOps(J)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$NumOps;->getOpsAdded()I
+HPLcom/android/server/soundtrigger/SoundTriggerService$Operation;-><init>(Ljava/lang/Runnable;Lcom/android/server/soundtrigger/SoundTriggerService$Operation$ExecuteOp;Ljava/lang/Runnable;)V
+PLcom/android/server/soundtrigger/SoundTriggerService$Operation;-><init>(Ljava/lang/Runnable;Lcom/android/server/soundtrigger/SoundTriggerService$Operation$ExecuteOp;Ljava/lang/Runnable;Lcom/android/server/soundtrigger/SoundTriggerService$1;)V
+PLcom/android/server/soundtrigger/SoundTriggerService$Operation;->drop()V
+PLcom/android/server/soundtrigger/SoundTriggerService$Operation;->run(ILandroid/media/soundtrigger/ISoundTriggerDetectionService;)V
+PLcom/android/server/soundtrigger/SoundTriggerService$Operation;->setup()V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService$1;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;Lcom/android/server/soundtrigger/SoundTriggerService;)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService$1;->onOpFinished(I)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService;Ljava/util/UUID;Landroid/os/Bundle;Landroid/content/ComponentName;Landroid/os/UserHandle;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)V
+PLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->access$1200(Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;)Ljava/lang/Object;
+PLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->access$1300(Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;)Landroid/util/ArraySet;
+PLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->access$1400(Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;)Ljava/util/ArrayList;
+PLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->access$1500(Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;)Z
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->access$1600(Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->bind()V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->destroy()V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->disconnectLocked()V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->lambda$onError$3$SoundTriggerService$RemoteSoundTriggerDetectionService()V
+PLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->lambda$onError$4$SoundTriggerService$RemoteSoundTriggerDetectionService(IILandroid/media/soundtrigger/ISoundTriggerDetectionService;)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->lambda$onGenericSoundTriggerDetected$0$SoundTriggerService$RemoteSoundTriggerDetectionService()V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->lambda$onGenericSoundTriggerDetected$1$SoundTriggerService$RemoteSoundTriggerDetectionService(Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent;ILandroid/media/soundtrigger/ISoundTriggerDetectionService;)V
+PLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->lambda$wfDlqQ7aPvu9qZCZ24jJu4tfUMY(Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->onError(I)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->onGenericSoundTriggerDetected(Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent;)V
+PLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->onRecognitionPaused()V
+PLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->onRecognitionResumed()V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->pingBinder()Z
+HPLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->runOrAddOperation(Lcom/android/server/soundtrigger/SoundTriggerService$Operation;)V
+PLcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;->stopAllPendingOperations()V
+PLcom/android/server/soundtrigger/SoundTriggerService$SoundModelStatTracker$SoundModelStat;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$SoundModelStatTracker;)V
 HSPLcom/android/server/soundtrigger/SoundTriggerService$SoundModelStatTracker;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService;)V
 PLcom/android/server/soundtrigger/SoundTriggerService$SoundModelStatTracker;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundModelStatTracker;->onStart(Ljava/util/UUID;)V
 HPLcom/android/server/soundtrigger/SoundTriggerService$SoundModelStatTracker;->onStop(Ljava/util/UUID;)V
 HSPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService;)V
-PLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;->deleteSoundModel(Landroid/os/ParcelUuid;)V
-PLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;->deleteSoundModel(Landroid/os/ParcelUuid;)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;->getModelState(Landroid/os/ParcelUuid;)I
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;->getSoundModel(Landroid/os/ParcelUuid;)Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;
+PLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;->isRecognitionActive(Landroid/os/ParcelUuid;)Z
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;->loadGenericSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;)I
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;->startRecognition(Landroid/os/ParcelUuid;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;->startRecognitionForService(Landroid/os/ParcelUuid;Landroid/os/Bundle;Landroid/content/ComponentName;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
+PLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;->stopRecognition(Landroid/os/ParcelUuid;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;->updateSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;)V
 HSPLcom/android/server/soundtrigger/SoundTriggerService;-><clinit>()V
 HSPLcom/android/server/soundtrigger/SoundTriggerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/soundtrigger/SoundTriggerService;->access$000(Lcom/android/server/soundtrigger/SoundTriggerService;Ljava/lang/String;)V
+PLcom/android/server/soundtrigger/SoundTriggerService;->access$100(Lcom/android/server/soundtrigger/SoundTriggerService;)Z
+PLcom/android/server/soundtrigger/SoundTriggerService;->access$1000(Lcom/android/server/soundtrigger/SoundTriggerService;)Landroid/util/ArrayMap;
+PLcom/android/server/soundtrigger/SoundTriggerService;->access$200()Lcom/android/server/soundtrigger/SoundTriggerLogger;
+PLcom/android/server/soundtrigger/SoundTriggerService;->access$300(Lcom/android/server/soundtrigger/SoundTriggerService;)Lcom/android/server/soundtrigger/SoundTriggerHelper;
+PLcom/android/server/soundtrigger/SoundTriggerService;->access$400(Lcom/android/server/soundtrigger/SoundTriggerService;)Lcom/android/server/soundtrigger/SoundTriggerService$SoundModelStatTracker;
+PLcom/android/server/soundtrigger/SoundTriggerService;->access$500(Lcom/android/server/soundtrigger/SoundTriggerService;)Lcom/android/server/soundtrigger/SoundTriggerDbHelper;
+PLcom/android/server/soundtrigger/SoundTriggerService;->access$600(Lcom/android/server/soundtrigger/SoundTriggerService;)Ljava/lang/Object;
+PLcom/android/server/soundtrigger/SoundTriggerService;->access$700(Lcom/android/server/soundtrigger/SoundTriggerService;)Ljava/util/TreeMap;
+PLcom/android/server/soundtrigger/SoundTriggerService;->access$800(Lcom/android/server/soundtrigger/SoundTriggerService;)Ljava/lang/Object;
+PLcom/android/server/soundtrigger/SoundTriggerService;->access$900(Lcom/android/server/soundtrigger/SoundTriggerService;)Ljava/util/TreeMap;
+HPLcom/android/server/soundtrigger/SoundTriggerService;->enforceCallingPermission(Ljava/lang/String;)V
 HSPLcom/android/server/soundtrigger/SoundTriggerService;->initSoundTriggerHelper()V
+HPLcom/android/server/soundtrigger/SoundTriggerService;->isInitialized()Z
 HSPLcom/android/server/soundtrigger/SoundTriggerService;->onBootPhase(I)V
 HSPLcom/android/server/soundtrigger/SoundTriggerService;->onStart()V
-PLcom/android/server/soundtrigger/SoundTriggerService;->onStartUser(I)V
-PLcom/android/server/stats/ProcfsMemoryUtil$MemorySnapshot;-><init>()V
+HSPLcom/android/server/soundtrigger/SoundTriggerService;->onStartUser(I)V
+HPLcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$-_QZ-VR2645z-GkbokL_T8I__48;-><init>(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;)V
+PLcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$-_QZ-VR2645z-GkbokL_T8I__48;->onValues(II)V
+HSPLcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$TgbC0Y00RFANX4qn5-S2zqA0RJU;-><init>(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicReference;)V
+HSPLcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$TgbC0Y00RFANX4qn5-S2zqA0RJU;->onValues(ILandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;)V
+PLcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$ewHo6fX75Dw1073KIePOuh3oLIE;-><init>(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;)V
+PLcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$ewHo6fX75Dw1073KIePOuh3oLIE;->onValues(II)V
+HSPLcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$fbvBJLiyU152ejAJj5a9PvFEhUI;-><init>(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicReference;)V
+HSPLcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$fbvBJLiyU152ejAJj5a9PvFEhUI;->onValues(ILandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;)V
+HSPLcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerMiddlewareService$Lifecycle$-t8UndY0AHGyM6n9ce2y6qok3Ho;-><clinit>()V
+HSPLcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerMiddlewareService$Lifecycle$-t8UndY0AHGyM6n9ce2y6qok3Ho;-><init>()V
+HSPLcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerMiddlewareService$Lifecycle$-t8UndY0AHGyM6n9ce2y6qok3Ho;->create()Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;
+HSPLcom/android/server/soundtrigger_middleware/AudioSessionProviderImpl;-><init>()V
+PLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlPhrase(Landroid/media/soundtrigger_middleware/Phrase;)Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Phrase;
+HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlPhraseRecognitionExtra(Landroid/media/soundtrigger_middleware/PhraseRecognitionExtra;)Landroid/hardware/soundtrigger/V2_0/PhraseRecognitionExtra;
+PLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlPhraseSoundModel(Landroid/media/soundtrigger_middleware/PhraseSoundModel;)Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;
+PLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlRecognitionConfig(Landroid/media/soundtrigger_middleware/RecognitionConfig;)Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$RecognitionConfig;
+HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlRecognitionConfig(Landroid/media/soundtrigger_middleware/RecognitionConfig;)Landroid/hardware/soundtrigger/V2_3/RecognitionConfig;
+PLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlRecognitionModes(I)I
+HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlSoundModel(Landroid/media/soundtrigger_middleware/SoundModel;)Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;
+PLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlSoundModelType(I)I
+HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlUuid(Ljava/lang/String;)Landroid/hardware/audio/common/V2_0/Uuid;
+HSPLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlAudioCapabilities(I)I
+PLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlAudioConfig(Landroid/hardware/audio/common/V2_0/AudioConfig;)Landroid/media/audio/common/AudioConfig;
+PLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlConfidenceLevel(Landroid/hardware/soundtrigger/V2_0/ConfidenceLevel;)Landroid/media/soundtrigger_middleware/ConfidenceLevel;
+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;->hidl2aidlPhraseRecognitionEvent(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;)Landroid/media/soundtrigger_middleware/PhraseRecognitionEvent;
+HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlPhraseRecognitionExtra(Landroid/hardware/soundtrigger/V2_0/PhraseRecognitionExtra;)Landroid/media/soundtrigger_middleware/PhraseRecognitionExtra;
+HSPLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlProperties(Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;)Landroid/media/soundtrigger_middleware/SoundTriggerModuleProperties;
+HSPLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlProperties(Landroid/hardware/soundtrigger/V2_3/Properties;)Landroid/media/soundtrigger_middleware/SoundTriggerModuleProperties;
+HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlRecognitionEvent(Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHwCallback$RecognitionEvent;)Landroid/media/soundtrigger_middleware/RecognitionEvent;
+PLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlRecognitionEvent(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$RecognitionEvent;)Landroid/media/soundtrigger_middleware/RecognitionEvent;
+HSPLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlRecognitionModes(I)I
+HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlRecognitionStatus(I)I
+PLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlSoundModelType(I)I
+HSPLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlUuid(Landroid/hardware/audio/common/V2_0/Uuid;)Ljava/lang/String;
+PLcom/android/server/soundtrigger_middleware/HalException;-><init>(ILjava/lang/String;)V
+HPLcom/android/server/soundtrigger_middleware/HalException;->toString()Ljava/lang/String;
+HSPLcom/android/server/soundtrigger_middleware/Hw2CompatUtil;->convertProperties_2_0_to_2_3(Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;)Landroid/hardware/soundtrigger/V2_3/Properties;
+PLcom/android/server/soundtrigger_middleware/Hw2CompatUtil;->convertRecognitionConfig_2_3_to_2_1(Landroid/hardware/soundtrigger/V2_3/RecognitionConfig;)Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$RecognitionConfig;
+HPLcom/android/server/soundtrigger_middleware/InternalServerError;-><init>(Ljava/lang/Throwable;)V
+HPLcom/android/server/soundtrigger_middleware/RecoverableException;-><init>(ILjava/lang/String;)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$NotSupported;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$SoundTriggerCallback;-><init>(Lcom/android/server/soundtrigger_middleware/ISoundTriggerHw2$Callback;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$SoundTriggerCallback;-><init>(Lcom/android/server/soundtrigger_middleware/ISoundTriggerHw2$Callback;Lcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$1;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$SoundTriggerCallback;->phraseRecognitionCallback_2_1(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;I)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$SoundTriggerCallback;->recognitionCallback_2_1(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$RecognitionEvent;I)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;-><init>(Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;-><init>(Landroid/os/IHwBinder;)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->as2_0()Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->as2_1()Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->as2_2()Landroid/hardware/soundtrigger/V2_2/ISoundTriggerHw;
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->as2_3()Landroid/hardware/soundtrigger/V2_3/ISoundTriggerHw;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->getModelState(I)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->getProperties()Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->getProperties()Landroid/hardware/soundtrigger/V2_3/Properties;
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->getProperties_2_0()Landroid/hardware/soundtrigger/V2_3/Properties;
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->handleHalStatus(ILjava/lang/String;)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->lambda$getProperties$0(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicReference;ILandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->lambda$getProperties_2_0$5(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicReference;ILandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->lambda$loadPhraseSoundModel$2(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;II)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->lambda$loadSoundModel$1(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;II)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->loadPhraseSoundModel(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHw2$Callback;I)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->loadSoundModel(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHw2$Callback;I)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->startRecognition(ILandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$RecognitionConfig;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHw2$Callback;I)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->startRecognition(ILandroid/hardware/soundtrigger/V2_3/RecognitionConfig;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHw2$Callback;I)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->startRecognition_2_1(ILandroid/hardware/soundtrigger/V2_3/RecognitionConfig;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHw2$Callback;I)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->stopRecognition(I)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->unloadSoundModel(I)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider$AudioSession;-><init>(III)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider;-><init>()V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl;-><init>([Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider;)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl;-><init>([Lcom/android/server/soundtrigger_middleware/HalFactory;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl;->attach(ILandroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl;->listModules()[Landroid/media/soundtrigger_middleware/SoundTriggerModuleDescriptor;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl;->setExternalCaptureState(Z)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$Lifecycle;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$Lifecycle;->lambda$onStart$0()Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$Lifecycle;->onStart()V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModelState$Activity;-><clinit>()V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModelState$Activity;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModelState;-><init>()V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->attach(Landroid/media/soundtrigger_middleware/ISoundTriggerModule;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->detach()V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->forceRecognitionEvent(I)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->loadModel(Landroid/media/soundtrigger_middleware/SoundModel;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->loadPhraseModel(Landroid/media/soundtrigger_middleware/PhraseSoundModel;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->onModuleDied()V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->onPhraseRecognition(ILandroid/media/soundtrigger_middleware/PhraseRecognitionEvent;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->onRecognition(ILandroid/media/soundtrigger_middleware/RecognitionEvent;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->onRecognitionAvailabilityChange(Z)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->startRecognition(ILandroid/media/soundtrigger_middleware/RecognitionConfig;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->stopRecognition(I)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->unloadModel(I)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;-><init>(Landroid/media/soundtrigger_middleware/ISoundTriggerMiddlewareService;Landroid/content/Context;)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;-><init>(Landroid/media/soundtrigger_middleware/ISoundTriggerMiddlewareService;Landroid/content/Context;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$1;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->access$100(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->access$200(Ljava/lang/Exception;)Ljava/lang/RuntimeException;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->attach(ILandroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->checkPermissions()V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->checkPreemptPermissions()V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->enforcePermission(Ljava/lang/String;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->handleException(Ljava/lang/Exception;)Ljava/lang/RuntimeException;
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->listModules()[Landroid/media/soundtrigger_middleware/SoundTriggerModuleDescriptor;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->setExternalCaptureState(Z)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$ModelState;-><clinit>()V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$ModelState;-><init>(Ljava/lang/String;I)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$1;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->access$1000(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->access$1000(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;Landroid/media/soundtrigger_middleware/RecognitionConfig;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->access$1100(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->access$1100(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;Landroid/media/soundtrigger_middleware/RecognitionConfig;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->access$1200(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->access$1300(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->access$700(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;Landroid/media/soundtrigger_middleware/SoundModel;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->access$800(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;Landroid/media/soundtrigger_middleware/PhraseSoundModel;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->access$800(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;Landroid/media/soundtrigger_middleware/SoundModel;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->access$900(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->access$900(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;Landroid/media/soundtrigger_middleware/PhraseSoundModel;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->forceRecognitionEvent()V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->getState()Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$ModelState;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->load(Landroid/media/soundtrigger_middleware/PhraseSoundModel;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->load(Landroid/media/soundtrigger_middleware/SoundModel;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->phraseRecognitionCallback(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;I)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->recognitionCallback(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$RecognitionEvent;I)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->setState(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$ModelState;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->startRecognition(Landroid/media/soundtrigger_middleware/RecognitionConfig;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->stopRecognition()V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->unload()V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$1;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->access$2000(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)Ljava/util/Map;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->access$2100(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->access$2100(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)Ljava/util/Map;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->access$2200(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->access$300(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->checkValid()V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->forceRecognitionEvent(I)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->loadModel(Landroid/media/soundtrigger_middleware/SoundModel;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->loadPhraseModel(Landroid/media/soundtrigger_middleware/PhraseSoundModel;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->moduleDied()V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->notifyRecognitionAvailability()V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->startRecognition(ILandroid/media/soundtrigger_middleware/RecognitionConfig;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->stopRecognition(I)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->unloadModel(I)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerModule;-><clinit>()V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerModule;-><init>(Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider;)V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerModule;-><init>(Lcom/android/server/soundtrigger_middleware/HalFactory;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$1700(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)Z
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$1800(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$1800(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)Z
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$1900(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)Lcom/android/server/soundtrigger_middleware/ISoundTriggerHw2;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$1900(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$2000(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)Lcom/android/server/soundtrigger_middleware/ISoundTriggerHw2;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$400(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$400(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$404(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$406(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$500(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$500(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)Landroid/media/soundtrigger_middleware/SoundTriggerModuleProperties;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$504(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$506(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)I
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->access$600(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;)Landroid/media/soundtrigger_middleware/SoundTriggerModuleProperties;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->attach(Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->attach(Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->attachToHal()V
+HSPLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->getProperties()Landroid/media/soundtrigger_middleware/SoundTriggerModuleProperties;
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->removeSession(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->reset()V
+PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->serviceDied(J)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->setExternalCaptureState(Z)V
+PLcom/android/server/soundtrigger_middleware/UuidUtil;-><clinit>()V
+HPLcom/android/server/soundtrigger_middleware/ValidationUtil;->validateGenericModel(Landroid/media/soundtrigger_middleware/SoundModel;)V
+HPLcom/android/server/soundtrigger_middleware/ValidationUtil;->validateModel(Landroid/media/soundtrigger_middleware/SoundModel;I)V
+HPLcom/android/server/soundtrigger_middleware/ValidationUtil;->validatePhraseModel(Landroid/media/soundtrigger_middleware/PhraseSoundModel;)V
+HPLcom/android/server/soundtrigger_middleware/ValidationUtil;->validateRecognitionConfig(Landroid/media/soundtrigger_middleware/RecognitionConfig;)V
+HPLcom/android/server/soundtrigger_middleware/ValidationUtil;->validateUuid(Ljava/lang/String;)V
+HSPLcom/android/server/stats/-$$Lambda$StatsPullAtomService$EbRlEjVa52EZqvTktBrsVz_xiQc;-><init>(Lcom/android/server/stats/StatsPullAtomService;)V
+PLcom/android/server/stats/-$$Lambda$StatsPullAtomService$EbRlEjVa52EZqvTktBrsVz_xiQc;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/-$$Lambda$StatsPullAtomService$J0XbDHzcNTw46LNg2i54ecFZHmo;-><init>(Lcom/android/server/stats/StatsPullAtomService;)V
+PLcom/android/server/stats/-$$Lambda$StatsPullAtomService$J0XbDHzcNTw46LNg2i54ecFZHmo;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/-$$Lambda$StatsPullAtomService$LXlSF9hVw5xJWZeE9MueVeGuYlE;-><init>(Lcom/android/server/stats/StatsPullAtomService;)V
+HSPLcom/android/server/stats/-$$Lambda$StatsPullAtomService$SuO7HJ54GUnG0kWIGHl94Gs0AlM;-><init>(Lcom/android/server/stats/StatsPullAtomService;)V
+PLcom/android/server/stats/-$$Lambda$StatsPullAtomService$SuO7HJ54GUnG0kWIGHl94Gs0AlM;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/-$$Lambda$StatsPullAtomService$VacoZ2wbIeAc9JIIYvmytuwBEKQ;-><init>(Lcom/android/server/stats/StatsPullAtomService;)V
+HSPLcom/android/server/stats/-$$Lambda$StatsPullAtomService$WYL8jwEtrR3YxQtIXV6asRHqKLI;-><init>(Lcom/android/server/stats/StatsPullAtomService;)V
+PLcom/android/server/stats/-$$Lambda$StatsPullAtomService$WYL8jwEtrR3YxQtIXV6asRHqKLI;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/-$$Lambda$StatsPullAtomService$fvH7sIVZhG6jdyiuwvkwrEA6Ma8;-><init>(Lcom/android/server/stats/StatsPullAtomService;)V
+PLcom/android/server/stats/-$$Lambda$StatsPullAtomService$fvH7sIVZhG6jdyiuwvkwrEA6Ma8;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/-$$Lambda$StatsPullAtomService$rfnm7rXB2YTVbgaO43K28w78oKk;-><init>(Lcom/android/server/stats/StatsPullAtomService;)V
+HSPLcom/android/server/stats/-$$Lambda$StatsPullAtomService$rfnm7rXB2YTVbgaO43K28w78oKk;->run()V
+HSPLcom/android/server/stats/-$$Lambda$StatsPullAtomService$ut-c4lKIS9fPnUOWESOzEKZZwUk;-><init>(Lcom/android/server/stats/StatsPullAtomService;)V
+PLcom/android/server/stats/-$$Lambda$StatsPullAtomService$ut-c4lKIS9fPnUOWESOzEKZZwUk;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/IonMemoryUtil$IonAllocations;-><init>()V
+PLcom/android/server/stats/IonMemoryUtil;-><clinit>()V
+HPLcom/android/server/stats/IonMemoryUtil;->parseIonHeapSizeFromDebugfs(Ljava/lang/String;)J
+HPLcom/android/server/stats/IonMemoryUtil;->parseProcessIonHeapSizesFromDebugfs(Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/stats/IonMemoryUtil;->readFile(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/stats/IonMemoryUtil;->readProcessSystemIonHeapSizesFromDebugfs()Ljava/util/List;
+PLcom/android/server/stats/IonMemoryUtil;->readSystemIonHeapSizeFromDebugfs()J
+HPLcom/android/server/stats/ProcfsMemoryUtil$MemorySnapshot;-><init>()V
 PLcom/android/server/stats/ProcfsMemoryUtil;-><clinit>()V
 HPLcom/android/server/stats/ProcfsMemoryUtil;->forEachPid(Ljava/util/function/BiConsumer;)V
 HPLcom/android/server/stats/ProcfsMemoryUtil;->readCmdlineFromProcfs(I)Ljava/lang/String;
 HPLcom/android/server/stats/ProcfsMemoryUtil;->readMemorySnapshotFromProcfs(I)Lcom/android/server/stats/ProcfsMemoryUtil$MemorySnapshot;
+HSPLcom/android/server/stats/StatsPullAtomService;-><init>(Landroid/content/Context;)V
+HPLcom/android/server/stats/StatsPullAtomService;->addNetworkStats(ILjava/util/List;Landroid/net/NetworkStats;Z)V
+PLcom/android/server/stats/StatsPullAtomService;->awaitControllerInfo(Landroid/os/SynchronousResultReceiver;)Landroid/os/Parcelable;
+PLcom/android/server/stats/StatsPullAtomService;->fetchBluetoothData()Landroid/bluetooth/BluetoothActivityEnergyInfo;
+PLcom/android/server/stats/StatsPullAtomService;->getINetworkStatsService()Landroid/net/INetworkStatsService;
+HSPLcom/android/server/stats/StatsPullAtomService;->lambda$onBootPhase$0$StatsPullAtomService()V
+PLcom/android/server/stats/StatsPullAtomService;->lambda$registerBluetoothActivityInfo$8$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/StatsPullAtomService;->lambda$registerBluetoothBytesTransfer$7$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/StatsPullAtomService;->lambda$registerMobileBytesTransfer$5$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/StatsPullAtomService;->lambda$registerMobileBytesTransferBackground$6$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/StatsPullAtomService;->lambda$registerWifiBytesTransfer$3$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/StatsPullAtomService;->lambda$registerWifiBytesTransferBackground$4$StatsPullAtomService(ILjava/util/List;)I
+HSPLcom/android/server/stats/StatsPullAtomService;->onBootPhase(I)V
+HSPLcom/android/server/stats/StatsPullAtomService;->onStart()V
+PLcom/android/server/stats/StatsPullAtomService;->pullBluetoothActivityInfo(ILjava/util/List;)I
+PLcom/android/server/stats/StatsPullAtomService;->pullBluetoothBytesTransfer(ILjava/util/List;)I
+PLcom/android/server/stats/StatsPullAtomService;->pullMobileBytesTransfer(ILjava/util/List;)I
+HPLcom/android/server/stats/StatsPullAtomService;->pullMobileBytesTransferBackground(ILjava/util/List;)I
+HPLcom/android/server/stats/StatsPullAtomService;->pullWifiBytesTransfer(ILjava/util/List;)I
+PLcom/android/server/stats/StatsPullAtomService;->pullWifiBytesTransferBackground(ILjava/util/List;)I
+HSPLcom/android/server/stats/StatsPullAtomService;->registerAllPullers()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerAppOps()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerAppSize()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerAppsOnExternalStorageInfo()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerBatteryCycleCount()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerBatteryLevel()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerBatteryVoltage()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerBinderCalls()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerBinderCallsExceptions()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerBluetoothActivityInfo()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerBluetoothBytesTransfer()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerBuildInformation()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerCategorySize()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerCoolingDevice()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerCpuActiveTime()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerCpuClusterTime()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerCpuTimePerFreq()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerCpuTimePerThreadFreq()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerCpuTimePerUid()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerCpuTimePerUidFreq()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerDangerousPermissionState()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerDangerousPermissionStateSampled()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerDebugElapsedClock()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerDebugFailingElapsedClock()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerDeviceCalculatedPowerBlameOther()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerDeviceCalculatedPowerBlameUid()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerDeviceCalculatedPowerUse()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerDirectoryUsage()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerDiskIO()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerDiskStats()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerExternalStorageInfo()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerFaceSettings()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerFullBatteryCapacity()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerKernelWakelock()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerLooperStats()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerMobileBytesTransfer()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerMobileBytesTransferBackground()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerModemActivityInfo()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerNotificationRemoteViews()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerNumFacesEnrolled()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerNumFingerprintsEnrolled()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerPowerProfile()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerProcStats()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerProcStatsPkgProc()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerProcessCpuTime()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerProcessMemoryHighWaterMark()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerProcessMemorySnapshot()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerProcessMemoryState()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerProcessSystemIonHeapSize()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerRemainingBatteryCapacity()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerRoleHolder()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerSystemElapsedRealtime()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerSystemIonHeapSize()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerSystemUptime()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerTemperature()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerTimeZoneDataInfo()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerWifiActivityInfo()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerWifiBytesTransfer()V
+HSPLcom/android/server/stats/StatsPullAtomService;->registerWifiBytesTransferBackground()V
+HPLcom/android/server/stats/StatsPullAtomService;->rollupNetworkStatsByFGBG(Landroid/net/NetworkStats;)Landroid/net/NetworkStats;
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$-PhCvl52WhUMdMnxVAqihfFHthA;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$0P4nZ-nE165g-Q5g9CoYyB1Byw4;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$0P4nZ-nE165g-Q5g9CoYyB1Byw4;->onPullAtom(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$1pxf28Ik2lMu276JUeacrtqOJzc;-><init>(ILjava/util/List;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$1pxf28Ik2lMu276JUeacrtqOJzc;->onUidCpuTime(ILjava/lang/Object;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$1tOYlDsL-P_KhgklFe6EqdCi9Yk;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$2Fp18gjakqm8R81qgIOHaDrmsU0;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$2Fp18gjakqm8R81qgIOHaDrmsU0;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$30xS0mVfwQjdpwkeyHDi7Bx6u60;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$30xS0mVfwQjdpwkeyHDi7Bx6u60;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$3OXuKaMjWs_ET87IAgknuvoqC8U;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$3OXuKaMjWs_ET87IAgknuvoqC8U;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$3qrx8WI68Lm0XGBBfW4gzODU9yk;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$7UAUwQTlDkqBQjoyOoessLYxCH0;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$7UAUwQTlDkqBQjoyOoessLYxCH0;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$7hfhsUfLzXxgbvx0G5m-nXfuhtE;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$7jldJaULxe_82vcFrliUbHpA5lE;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$7jldJaULxe_82vcFrliUbHpA5lE;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$7xMtizDmeMIdTUoXvmAJ9__a1H8;-><init>(ILjava/util/List;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$7xMtizDmeMIdTUoXvmAJ9__a1H8;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$AJY7IPMD64l6eMvl-4Yk1PNJTC8;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$AJY7IPMD64l6eMvl-4Yk1PNJTC8;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$AbytlHPB_renx2JnIl7w0EkN8Ms;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$AiS8ePl8e1Vo_1hXDcyJiYZVEak;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$AiS8ePl8e1Vo_1hXDcyJiYZVEak;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$DD__7RQZDPvJeL9pnb_7J1voUNE;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$DD__7RQZDPvJeL9pnb_7J1voUNE;->run()V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$DaTIT3haxTQC9hsnPFM6rU5N88A;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$DaTIT3haxTQC9hsnPFM6rU5N88A;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ErlITMC3hXYvJk7H-BuZWp0l5ko;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$GT9G5Edej6G4xpQClwAG4i73Ml8;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$GT9G5Edej6G4xpQClwAG4i73Ml8;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$Gu78SpEIgqYCwZEn1wrkHRIhYfw;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$Gu78SpEIgqYCwZEn1wrkHRIhYfw;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$H5--fOxGaHVjnFaRkyzvBX76HOE;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$HX4G1hDcJMKgszczqxpSHdoDK_s;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$HoKaYjaEIOIRXJyDFklY-rgc_cw;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$HoKaYjaEIOIRXJyDFklY-rgc_cw;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$I9d0JaNY8gTVS5nJ3bvbDlp2yu0;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$I9d0JaNY8gTVS5nJ3bvbDlp2yu0;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$IB4WDvYz1DDpmLMD3gEZhLRa46s;-><init>(Landroid/util/SparseArray;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$IB4WDvYz1DDpmLMD3gEZhLRa46s;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ITU8q06caEdamlLZPazkHB2M8iE;-><init>(ILjava/util/List;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ITU8q06caEdamlLZPazkHB2M8iE;->onValues(ILandroid/hardware/health/V2_0/HealthInfo;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$KQag3_StEOzx9XWRUKksVrW-B4o;-><init>(ILjava/util/List;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$KQag3_StEOzx9XWRUKksVrW-B4o;->onValues(ILandroid/hardware/health/V2_0/HealthInfo;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$LX85szVlyRD-qrhFa1vvBo3yiHI;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$LX85szVlyRD-qrhFa1vvBo3yiHI;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$M5tfOmnyD25Ws5xFmcaNZmCcWv4;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$M5tfOmnyD25Ws5xFmcaNZmCcWv4;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$Myxd926lI020RejJAC3J7xJBf-M;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$Myxd926lI020RejJAC3J7xJBf-M;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$O-i_qJRna30dOvZwoceUXgRcdmM;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$O-i_qJRna30dOvZwoceUXgRcdmM;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ODMP0J94F-i0lScEZVqBmBZetGs;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$OnuY6QGq5IcThy5OPAdG5C6fFrU;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$PXO4cqN_PpXkJgCq2SHpV_sY50E;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$PXO4cqN_PpXkJgCq2SHpV_sY50E;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$QQcMZJIXQd5YLqJodYJFOwUBv0c;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$QQcMZJIXQd5YLqJodYJFOwUBv0c;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$QjQnTX1PdNCoFkVsVjiS8xeDDC8;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$RJwHYKCxBtI76CmPqdZceiz3WOc;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$RPju9l8LZxvj1kR9SO_j3YArLwk;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$Sf77fvy4SVd9GzRqpAUUydeJGQI;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$Sf77fvy4SVd9GzRqpAUUydeJGQI;->onPullAtom(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$T3eGvsVXN09Gi-BtBQXR4zdDBEg;-><init>(Landroid/util/SparseArray;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$T3eGvsVXN09Gi-BtBQXR4zdDBEg;->accept(Ljava/lang/Object;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$T4pO_UW2jhPPRWvYxUe66agQ9_U;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$T4pO_UW2jhPPRWvYxUe66agQ9_U;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$TbCE6UdFHnpFKs5GJ5OeGvkZR3w;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$TbCE6UdFHnpFKs5GJ5OeGvkZR3w;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$U0On1Mn47-Y0rxvEemY9d5CvB7A;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$UzadvADZjWad2cUMtKWnDa-bkao;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$UzadvADZjWad2cUMtKWnDa-bkao;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$VuGEpDG3j9NcXTay60birJz1dKw;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$VuGEpDG3j9NcXTay60birJz1dKw;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$W16O4qsBRa22kMF_rGhLALJrDX0;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$WI1rTiStFbJ3m4p9d8AvyRXzTXU;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$WI1rTiStFbJ3m4p9d8AvyRXzTXU;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ZUW2WJxdpx34RXfmAZzvaSioIaI;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ZUW2WJxdpx34RXfmAZzvaSioIaI;->onPullAtom(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ZcA3hS41MDSLP3tvbVw7ycWV2Uk;-><init>(ILjava/util/List;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ZcA3hS41MDSLP3tvbVw7ycWV2Uk;->onUidCpuTime(ILjava/lang/Object;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$azxbjQftB2lwBb_UEHTETFb5urU;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$azxbjQftB2lwBb_UEHTETFb5urU;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$bGdd1XQKPBSlirlhMqL7Kyr4dKU;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$bVYBhIENPiTPrSDw3qDtspWRc68;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$bncFYZhYtBOc8H2sC7RT_uK4VQc;-><init>(ILjava/util/List;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$bncFYZhYtBOc8H2sC7RT_uK4VQc;->onUidStorageStats(IJJJJJJJJJJ)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$cD_BSMC6DqR-o7gxzB0mTMww2pc;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$cD_BSMC6DqR-o7gxzB0mTMww2pc;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$dvk2NfS9657o0VC9lBgVa8gpvlQ;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$dvk2NfS9657o0VC9lBgVa8gpvlQ;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$eKQ59cCrSM0iXjIA64vCoqEuTaQ;-><init>(Landroid/os/SynchronousResultReceiver;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$eKQ59cCrSM0iXjIA64vCoqEuTaQ;->onWifiActivityEnergyInfo(Landroid/os/connectivity/WifiActivityEnergyInfo;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ew5jVI8ng1800NuFBR9nuVqZhEA;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$fktJbqJAvHUrt48VRPzhsYMAbE4;-><init>(ILjava/util/List;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$fktJbqJAvHUrt48VRPzhsYMAbE4;->onUidCpuTime(ILjava/lang/Object;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$fl3y2rQNVEsKV4HvhEyC2k3aSW4;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$fl3y2rQNVEsKV4HvhEyC2k3aSW4;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$h23-vyYl4vByordF3qxCf47oQcY;-><init>(ILjava/util/List;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$h23-vyYl4vByordF3qxCf47oQcY;->onUidStorageStats(IJJJJJJJJJJ)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$hIAQYRkW-2p4zc6JTn5OwHqbM5M;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$hIAQYRkW-2p4zc6JTn5OwHqbM5M;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$hKgCHOcWWjhlKa_oJzU15Zt0JUY;-><init>(Landroid/os/SynchronousResultReceiver;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$hKgCHOcWWjhlKa_oJzU15Zt0JUY;->onWifiActivityEnergyInfo(Landroid/os/connectivity/WifiActivityEnergyInfo;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$hPsC5VFMB0pUxEe6YNkhn5cdnB8;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$hPsC5VFMB0pUxEe6YNkhn5cdnB8;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$iWJKUaJRDKWP6Tm1GOLkhBCdoSw;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$iWJKUaJRDKWP6Tm1GOLkhBCdoSw;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$jQfeAT-DDHk5j0nn54uyxEQ-1qo;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$jQfeAT-DDHk5j0nn54uyxEQ-1qo;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$kbyq1Jaw0bLtz4QZ0dHLQDBcS84;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$lXlXj5VhcAmBNund256UqZwrUcQ;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$lXlXj5VhcAmBNund256UqZwrUcQ;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$n5Z40V94ruxObttUmeeT9hJ2lwU;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$n5Z40V94ruxObttUmeeT9hJ2lwU;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ndKYmfQrhE59wBrqdr_J4mR9XeQ;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ndKYmfQrhE59wBrqdr_J4mR9XeQ;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$q64SJPz4qOJVhsbLkSd-TefRkz4;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$q64SJPz4qOJVhsbLkSd-TefRkz4;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$qv-qUoYV_cdRHv47l_lHeb43i84;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$roxBOSLRvrWWGOq4tg7SrKcwYkM;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$sHsQqf-uX2oC0xi9S65s-8cl6w0;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$sHsQqf-uX2oC0xi9S65s-8cl6w0;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$sN2JKQjhqafdV9iBufFp7wWmkBg;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$tgrBI__GVejUkinaoMC5NY-7TjM;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$uAEfAOa33shUMp3_0vxKUg1a16s;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$uAEfAOa33shUMp3_0vxKUg1a16s;->onPullAtom(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$u_a4BjhN7rx49bnJveS1mjwhkb8;-><init>(ILjava/util/List;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$u_a4BjhN7rx49bnJveS1mjwhkb8;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ufk9iL1tEj0A5bia0nI_H6pWIHE;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ufk9iL1tEj0A5bia0nI_H6pWIHE;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$vXSqtIKAG3al1X91EB3FoH96cWo;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$vXSqtIKAG3al1X91EB3FoH96cWo;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$yHqXLPks8Cf6arciMxSh7owd6sU;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$yHqXLPks8Cf6arciMxSh7owd6sU;->onPullAtom(ILjava/util/List;)I
+PLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$z9YxSZJALshcZpXiGJxNWlLa2ME;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$zkqK-r9QsJBeVy1sojo4bOB8YhY;-><init>(ILjava/util/List;)V
+HPLcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$zkqK-r9QsJBeVy1sojo4bOB8YhY;->onUidCpuTime(ILjava/lang/Object;)V
+PLcom/android/server/stats/pull/-$$Lambda$wPejPqIRC0ueiw9uak8ULakT1R8;-><init>(Ljava/util/concurrent/CompletableFuture;)V
+PLcom/android/server/stats/pull/-$$Lambda$wPejPqIRC0ueiw9uak8ULakT1R8;->accept(Ljava/lang/Object;)V
+PLcom/android/server/stats/pull/IonMemoryUtil$IonAllocations;-><init>()V
+PLcom/android/server/stats/pull/IonMemoryUtil;-><clinit>()V
+HPLcom/android/server/stats/pull/IonMemoryUtil;->parseIonHeapSizeFromDebugfs(Ljava/lang/String;)J
+HPLcom/android/server/stats/pull/IonMemoryUtil;->parseProcessIonHeapSizesFromDebugfs(Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/stats/pull/IonMemoryUtil;->readFile(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/stats/pull/IonMemoryUtil;->readProcessSystemIonHeapSizesFromDebugfs()Ljava/util/List;
+PLcom/android/server/stats/pull/IonMemoryUtil;->readSystemIonHeapSizeFromDebugfs()J
+HPLcom/android/server/stats/pull/ProcfsMemoryUtil$MemorySnapshot;-><init>()V
+PLcom/android/server/stats/pull/ProcfsMemoryUtil;-><clinit>()V
+HPLcom/android/server/stats/pull/ProcfsMemoryUtil;->forEachPid(Ljava/util/function/BiConsumer;)V
+HPLcom/android/server/stats/pull/ProcfsMemoryUtil;->getProcessCmdlines()Landroid/util/SparseArray;
+HPLcom/android/server/stats/pull/ProcfsMemoryUtil;->readCmdlineFromProcfs(I)Ljava/lang/String;
+HPLcom/android/server/stats/pull/ProcfsMemoryUtil;->readMemorySnapshotFromProcfs(I)Lcom/android/server/stats/pull/ProcfsMemoryUtil$MemorySnapshot;
+PLcom/android/server/stats/pull/StatsPullAtomService$1;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+PLcom/android/server/stats/pull/StatsPullAtomService$1;->execute(Ljava/lang/Runnable;)V
+HSPLcom/android/server/stats/pull/StatsPullAtomService$ConnectivityStatsCallback;-><init>()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService$ConnectivityStatsCallback;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService$1;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService$ConnectivityStatsCallback;->onAvailable(Landroid/net/Network;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService$ConnectivityStatsCallback;->onLost(Landroid/net/Network;)V
+HSPLcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomCallbackImpl;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HSPLcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomCallbackImpl;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;Lcom/android/server/stats/pull/StatsPullAtomService$1;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomCallbackImpl;->onPullAtom(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/StatsPullAtomService$ThermalEventListener;-><init>()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService$ThermalEventListener;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService$1;)V
+HSPLcom/android/server/stats/pull/StatsPullAtomService$ThermalEventListener;->notifyThrottling(Landroid/os/Temperature;)V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;-><clinit>()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/stats/pull/StatsPullAtomService;->access$000(Lcom/android/server/stats/pull/StatsPullAtomService;IILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->addNetworkStats(ILjava/util/List;Landroid/net/NetworkStats;Z)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->awaitControllerInfo(Landroid/os/SynchronousResultReceiver;)Landroid/os/Parcelable;
+PLcom/android/server/stats/pull/StatsPullAtomService;->fetchBluetoothData()Landroid/bluetooth/BluetoothActivityEnergyInfo;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->getINetworkStatsService()Landroid/net/INetworkStatsService;
+PLcom/android/server/stats/pull/StatsPullAtomService;->getIStoragedService()Landroid/os/IStoraged;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->getIThermalService()Landroid/os/IThermalService;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->initializePullersState()V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->isAppUid(I)Z
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$onBootPhase$0$StatsPullAtomService()V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullBatteryLevel$15(ILjava/util/List;ILandroid/hardware/health/V2_0/HealthInfo;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullCpuTimePerUid$14(ILjava/util/List;I[J)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullCpuTimePerUid$6(ILjava/util/List;I[J)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullCpuTimeperUidFreq$16(ILjava/util/List;I[J)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullCpuTimeperUidFreq$7(ILjava/util/List;I[J)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullDiskIO$14(ILjava/util/List;IJJJJJJJJJJ)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullDiskIO$50(ILjava/util/List;IJJJJJJJJJJ)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullHealthHal$15(ILjava/util/List;ILandroid/hardware/health/V2_0/HealthInfo;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullProcessMemoryHighWaterMark$11(Landroid/util/SparseArray;Landroid/app/ProcessMemoryState;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullProcessMemoryHighWaterMark$29(ILjava/util/List;Ljava/lang/Integer;Ljava/lang/String;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullProcessMemorySnapshot$12(Landroid/util/SparseArray;Landroid/app/ProcessMemoryState;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullProcessMemorySnapshot$31(ILjava/util/List;Ljava/lang/Integer;Ljava/lang/String;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullWifiActivityInfo$10(Landroid/os/SynchronousResultReceiver;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullWifiActivityInfo$22(Landroid/os/SynchronousResultReceiver;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerAppOps$64$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerAppOps$66$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerAppsOnExternalStorageInfo$62$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerAppsOnExternalStorageInfo$64$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerBinderCallsStats$37$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerBluetoothActivityInfo$24$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerBluetoothBytesTransfer$10$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerCategorySize$43$StatsPullAtomService(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerCoolingDevice$36$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerCpuTimePerThreadFreq$53$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerCpuTimePerUid$13$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerCpuTimePerUidFreq$15$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerDangerousPermissionState$59$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerDangerousPermissionState$61$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerDangerousPermissionStateSampled$68$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerDebugElapsedClock$57$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerDebugFailingElapsedClock$58$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerDirectoryUsage$41$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerDiskIO$49$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerDiskStats$40$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerExternalStorageInfo$61$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerExternalStorageInfo$63$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerFaceSettings$63$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerFaceSettings$65$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerIonHeapSize$33$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerKernelWakelock$11$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerLooperStats$39$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerMobileBytesTransfer$8$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerMobileBytesTransferBackground$9$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerModemActivityInfo$23$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerNumFacesEnrolled$45$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerNumFingerprintsEnrolled$44$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerProcessCpuTime$52$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerProcessMemoryHighWaterMark$28$StatsPullAtomService(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerProcessMemorySnapshot$30$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerProcessSystemIonHeapSize$34$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerSystemIonHeapSize$32$StatsPullAtomService(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerSystemUptime$26$StatsPullAtomService(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerTemperature$35$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerTimeZoneDataInfo$62$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerWifiActivityInfo$21$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerWifiBytesTransfer$6$StatsPullAtomService(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$registerWifiBytesTransferBackground$7$StatsPullAtomService(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->onBootPhase(I)V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->onStart()V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullAppOps(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullAppsOnExternalStorageInfo(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullBatteryLevel(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullBinderCallsStats(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullBluetoothActivityInfo(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->pullBluetoothBytesTransfer(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullCategorySize(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullCooldownDevice(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullCpuTimePerThreadFreq(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->pullCpuTimePerUid(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->pullCpuTimeperUidFreq(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullDangerousPermissionState(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullDebugElapsedClock(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullDebugFailingElapsedClock(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullDirectoryUsage(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->pullDiskIO(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullDiskStats(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullExternalStorageInfo(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullFaceSettings(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullHealthHal(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->pullIonHeapSize(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullKernelWakelock(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullLooperStats(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullMobileBytesTransfer(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullMobileBytesTransferBackground(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullModemActivityInfo(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullNumBiometricsEnrolled(IILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullProcessCpuTime(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullProcessMemoryHighWaterMark(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullProcessMemorySnapshot(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullProcessSystemIonHeapSize(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullSystemIonHeapSize(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullSystemUptime(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullTemperature(ILjava/util/List;)I
+PLcom/android/server/stats/pull/StatsPullAtomService;->pullTimeZoneDataInfo(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullWifiActivityInfo(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullWifiBytesTransfer(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullWifiBytesTransferBackground(ILjava/util/List;)I
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerAllPullers()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerAppOps()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerAppSize()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerAppsOnExternalStorageInfo()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerBatteryCycleCount()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerBatteryLevel()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerBatteryVoltage()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerBinderCallsStats()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerBinderCallsStatsExceptions()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerBluetoothActivityInfo()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerBluetoothBytesTransfer()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerBuildInformation()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerCategorySize()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerCoolingDevice()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerCpuActiveTime()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerCpuClusterTime()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerCpuTimePerFreq()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerCpuTimePerThreadFreq()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerCpuTimePerUid()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerCpuTimePerUidFreq()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDangerousPermissionState()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDangerousPermissionStateSampled()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDebugElapsedClock()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDebugFailingElapsedClock()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDeviceCalculatedPowerBlameOther()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDeviceCalculatedPowerBlameUid()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDeviceCalculatedPowerUse()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDirectoryUsage()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDiskIO()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDiskStats()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerEventListeners()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerExternalStorageInfo()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerFaceSettings()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerFullBatteryCapacity()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerIonHeapSize()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerKernelWakelock()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerLooperStats()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerMobileBytesTransfer()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerMobileBytesTransferBackground()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerModemActivityInfo()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerNotificationRemoteViews()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerNumFacesEnrolled()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerNumFingerprintsEnrolled()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerPowerProfile()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerProcStats()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerProcStatsPkgProc()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerProcessCpuTime()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerProcessMemoryHighWaterMark()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerProcessMemorySnapshot()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerProcessMemoryState()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerProcessSystemIonHeapSize()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerRemainingBatteryCapacity()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerRoleHolder()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerSystemElapsedRealtime()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerSystemIonHeapSize()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerSystemUptime()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerTemperature()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerTimeZoneDataInfo()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerWifiActivityInfo()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerWifiBytesTransfer()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerWifiBytesTransferBackground()V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->rollupNetworkStatsByFGBG(Landroid/net/NetworkStats;)Landroid/net/NetworkStats;
 PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$E67OP8P-DuCzmX46ISCwIyOv93Q;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;)V
 PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$E67OP8P-DuCzmX46ISCwIyOv93Q;->run()V
-PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$dQguzfF4tEgBOj3Pr8MpGRN8HT0;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;ILandroid/os/IBinder;IIZZ)V
-PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$dQguzfF4tEgBOj3Pr8MpGRN8HT0;->run()V
-PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$uF0ibEnnXe7Lxunxb98QQLJjgZM;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;IZZ)V
-PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$uF0ibEnnXe7Lxunxb98QQLJjgZM;->run()V
+PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$KPqmL9kxt0YFCz4dBAFkiUMRWw8;-><clinit>()V
+PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$KPqmL9kxt0YFCz4dBAFkiUMRWw8;-><init>()V
+PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$KPqmL9kxt0YFCz4dBAFkiUMRWw8;->run()V
+PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$P3yc6y5R6oqIuxbUK14JNoV_hJM;-><init>(Z)V
+PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$P3yc6y5R6oqIuxbUK14JNoV_hJM;->run()V
+HPLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$dQguzfF4tEgBOj3Pr8MpGRN8HT0;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;ILandroid/os/IBinder;IIZZ)V
+HPLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$dQguzfF4tEgBOj3Pr8MpGRN8HT0;->run()V
+HSPLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$uF0ibEnnXe7Lxunxb98QQLJjgZM;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;IZZ)V
+HSPLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$uF0ibEnnXe7Lxunxb98QQLJjgZM;->run()V
 PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$yr21OX4Hyd_XfExwnVnVIn3Jfe4;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;I)V
-PLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$yr21OX4Hyd_XfExwnVnVIn3Jfe4;->run()V
+HPLcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$yr21OX4Hyd_XfExwnVnVIn3Jfe4;->run()V
 HSPLcom/android/server/statusbar/StatusBarManagerService$1;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->abortTransient(I[I)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionCancelled(I)V
-PLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionFinished(I)V
-PLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionPending(I)V
-PLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionStarting(IJJ)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionFinished(I)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionPending(I)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionStarting(IJJ)V
+PLcom/android/server/statusbar/StatusBarManagerService$1;->hideToast(Ljava/lang/String;Landroid/os/IBinder;)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->onCameraLaunchGestureDetected(I)V
+PLcom/android/server/statusbar/StatusBarManagerService$1;->onDisplayReady(I)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->onProposedRotationChanged(IZ)V
-PLcom/android/server/statusbar/StatusBarManagerService$1;->onRecentsAnimationStateChanged(Z)V
-HPLcom/android/server/statusbar/StatusBarManagerService$1;->onSystemBarAppearanceChanged(II[Lcom/android/internal/view/AppearanceRegion;Z)V
-PLcom/android/server/statusbar/StatusBarManagerService$1;->setDisableFlags(IILjava/lang/String;)V
+HPLcom/android/server/statusbar/StatusBarManagerService$1;->onRecentsAnimationStateChanged(Z)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$1;->onSystemBarAppearanceChanged(II[Lcom/android/internal/view/AppearanceRegion;Z)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$1;->setDisableFlags(IILjava/lang/String;)V
 HSPLcom/android/server/statusbar/StatusBarManagerService$1;->setNotificationDelegate(Lcom/android/server/notification/NotificationDelegate;)V
 HPLcom/android/server/statusbar/StatusBarManagerService$1;->setTopAppHidesStatusBar(Z)V
-PLcom/android/server/statusbar/StatusBarManagerService$1;->setWindowState(III)V
+HPLcom/android/server/statusbar/StatusBarManagerService$1;->setWindowState(III)V
+PLcom/android/server/statusbar/StatusBarManagerService$1;->showAssistDisclosure()V
+PLcom/android/server/statusbar/StatusBarManagerService$1;->showChargingAnimation(I)V
+PLcom/android/server/statusbar/StatusBarManagerService$1;->showRecentApps(Z)V
+PLcom/android/server/statusbar/StatusBarManagerService$1;->showShutdownUi(ZLjava/lang/String;)Z
+PLcom/android/server/statusbar/StatusBarManagerService$1;->showToast(Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/CharSequence;Landroid/os/IBinder;ILandroid/app/ITransientNotificationCallback;)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->showTransient(I[I)V
-PLcom/android/server/statusbar/StatusBarManagerService$1;->topAppWindowChanged(IZZ)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$1;->topAppWindowChanged(IZZ)V
 HSPLcom/android/server/statusbar/StatusBarManagerService$2;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;)V
+PLcom/android/server/statusbar/StatusBarManagerService$2;->isGlobalActionsDisabled()Z
+PLcom/android/server/statusbar/StatusBarManagerService$2;->setGlobalActionsListener(Lcom/android/server/policy/GlobalActionsProvider$GlobalActionsListener;)V
 PLcom/android/server/statusbar/StatusBarManagerService$2;->showGlobalActions()V
 HSPLcom/android/server/statusbar/StatusBarManagerService$DeathRecipient;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;)V
 HSPLcom/android/server/statusbar/StatusBarManagerService$DeathRecipient;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/server/statusbar/StatusBarManagerService$1;)V
+PLcom/android/server/statusbar/StatusBarManagerService$DeathRecipient;->binderDied()V
 PLcom/android/server/statusbar/StatusBarManagerService$DeathRecipient;->linkToDeath()V
-PLcom/android/server/statusbar/StatusBarManagerService$DisableRecord;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;ILandroid/os/IBinder;)V
-HPLcom/android/server/statusbar/StatusBarManagerService$DisableRecord;->getFlags(I)I
-PLcom/android/server/statusbar/StatusBarManagerService$DisableRecord;->isEmpty()Z
-PLcom/android/server/statusbar/StatusBarManagerService$DisableRecord;->setFlags(IILjava/lang/String;)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$DisableRecord;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;ILandroid/os/IBinder;)V
+PLcom/android/server/statusbar/StatusBarManagerService$DisableRecord;->binderDied()V
+HSPLcom/android/server/statusbar/StatusBarManagerService$DisableRecord;->getFlags(I)I
+HSPLcom/android/server/statusbar/StatusBarManagerService$DisableRecord;->isEmpty()Z
+HSPLcom/android/server/statusbar/StatusBarManagerService$DisableRecord;->setFlags(IILjava/lang/String;)V
 PLcom/android/server/statusbar/StatusBarManagerService$DisableRecord;->toString()Ljava/lang/String;
 HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;)V
 HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/server/statusbar/StatusBarManagerService$1;)V
-PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$1200(Lcom/android/server/statusbar/StatusBarManagerService$UiState;I[Lcom/android/internal/view/AppearanceRegion;Z)Z
-PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$1300(Lcom/android/server/statusbar/StatusBarManagerService$UiState;I[Lcom/android/internal/view/AppearanceRegion;Z)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$1200(Lcom/android/server/statusbar/StatusBarManagerService$UiState;I[Lcom/android/internal/view/AppearanceRegion;Z)Z
+HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$1300(Lcom/android/server/statusbar/StatusBarManagerService$UiState;I[Lcom/android/internal/view/AppearanceRegion;Z)V
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$1400(Lcom/android/server/statusbar/StatusBarManagerService$UiState;[I)V
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$1500(Lcom/android/server/statusbar/StatusBarManagerService$UiState;[I)V
-PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$1900(Lcom/android/server/statusbar/StatusBarManagerService$UiState;II)Z
+PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$1700(Lcom/android/server/statusbar/StatusBarManagerService$UiState;)I
+HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$1900(Lcom/android/server/statusbar/StatusBarManagerService$UiState;II)Z
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$2000(Lcom/android/server/statusbar/StatusBarManagerService$UiState;II)V
-PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$2100(Lcom/android/server/statusbar/StatusBarManagerService$UiState;Z)V
-PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$2200(Lcom/android/server/statusbar/StatusBarManagerService$UiState;Z)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$2100(Lcom/android/server/statusbar/StatusBarManagerService$UiState;Z)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$2200(Lcom/android/server/statusbar/StatusBarManagerService$UiState;Z)V
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$2300(Lcom/android/server/statusbar/StatusBarManagerService$UiState;IIZLandroid/os/IBinder;)V
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$2400(Lcom/android/server/statusbar/StatusBarManagerService$UiState;)Landroid/util/ArraySet;
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$2500(Lcom/android/server/statusbar/StatusBarManagerService$UiState;)I
@@ -17851,77 +29931,121 @@
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$3100(Lcom/android/server/statusbar/StatusBarManagerService$UiState;)Z
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$3200(Lcom/android/server/statusbar/StatusBarManagerService$UiState;)Z
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$3300(Lcom/android/server/statusbar/StatusBarManagerService$UiState;)Z
-HPLcom/android/server/statusbar/StatusBarManagerService$UiState;->appearanceEquals(I[Lcom/android/internal/view/AppearanceRegion;Z)Z
+PLcom/android/server/statusbar/StatusBarManagerService$UiState;->access$3400(Lcom/android/server/statusbar/StatusBarManagerService$UiState;)I
+HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->appearanceEquals(I[Lcom/android/internal/view/AppearanceRegion;Z)Z
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->clearTransient([I)V
-PLcom/android/server/statusbar/StatusBarManagerService$UiState;->disableEquals(II)Z
-PLcom/android/server/statusbar/StatusBarManagerService$UiState;->setAppearance(I[Lcom/android/internal/view/AppearanceRegion;Z)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->disableEquals(II)Z
+PLcom/android/server/statusbar/StatusBarManagerService$UiState;->getDisabled1()I
+PLcom/android/server/statusbar/StatusBarManagerService$UiState;->getDisabled2()I
+HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->setAppearance(I[Lcom/android/internal/view/AppearanceRegion;Z)V
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->setDisabled(II)V
-PLcom/android/server/statusbar/StatusBarManagerService$UiState;->setFullscreen(Z)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->setFullscreen(Z)V
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->setImeWindowState(IIZLandroid/os/IBinder;)V
-PLcom/android/server/statusbar/StatusBarManagerService$UiState;->setImmersive(Z)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->setImmersive(Z)V
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->showTransient([I)V
+HSPLcom/android/server/statusbar/StatusBarManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/statusbar/StatusBarManagerService;-><init>(Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;)V
-PLcom/android/server/statusbar/StatusBarManagerService;->access$100(Lcom/android/server/statusbar/StatusBarManagerService;)Lcom/android/internal/statusbar/IStatusBar;
-HPLcom/android/server/statusbar/StatusBarManagerService;->access$1100(Lcom/android/server/statusbar/StatusBarManagerService;I)Lcom/android/server/statusbar/StatusBarManagerService$UiState;
+HSPLcom/android/server/statusbar/StatusBarManagerService;->access$100(Lcom/android/server/statusbar/StatusBarManagerService;)Lcom/android/internal/statusbar/IStatusBar;
+PLcom/android/server/statusbar/StatusBarManagerService;->access$1000(Lcom/android/server/statusbar/StatusBarManagerService;)Landroid/content/Context;
+PLcom/android/server/statusbar/StatusBarManagerService;->access$102(Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/internal/statusbar/IStatusBar;)Lcom/android/internal/statusbar/IStatusBar;
+HSPLcom/android/server/statusbar/StatusBarManagerService;->access$1100(Lcom/android/server/statusbar/StatusBarManagerService;I)Lcom/android/server/statusbar/StatusBarManagerService$UiState;
+PLcom/android/server/statusbar/StatusBarManagerService;->access$1600(Lcom/android/server/statusbar/StatusBarManagerService;)Landroid/util/SparseArray;
+PLcom/android/server/statusbar/StatusBarManagerService;->access$1800(Lcom/android/server/statusbar/StatusBarManagerService;)Lcom/android/server/policy/GlobalActionsProvider$GlobalActionsListener;
+PLcom/android/server/statusbar/StatusBarManagerService;->access$1802(Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/server/policy/GlobalActionsProvider$GlobalActionsListener;)Lcom/android/server/policy/GlobalActionsProvider$GlobalActionsListener;
+PLcom/android/server/statusbar/StatusBarManagerService;->access$200(Lcom/android/server/statusbar/StatusBarManagerService;)V
 PLcom/android/server/statusbar/StatusBarManagerService;->access$300(Lcom/android/server/statusbar/StatusBarManagerService;)Lcom/android/server/statusbar/StatusBarManagerService$DeathRecipient;
 HSPLcom/android/server/statusbar/StatusBarManagerService;->access$502(Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/server/notification/NotificationDelegate;)Lcom/android/server/notification/NotificationDelegate;
-PLcom/android/server/statusbar/StatusBarManagerService;->access$600(Lcom/android/server/statusbar/StatusBarManagerService;IZZ)V
-PLcom/android/server/statusbar/StatusBarManagerService;->access$700(Lcom/android/server/statusbar/StatusBarManagerService;IILjava/lang/String;)V
-PLcom/android/server/statusbar/StatusBarManagerService;->access$800(Lcom/android/server/statusbar/StatusBarManagerService;)V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->access$600(Lcom/android/server/statusbar/StatusBarManagerService;IZZ)V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->access$700(Lcom/android/server/statusbar/StatusBarManagerService;IILjava/lang/String;)V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->access$800(Lcom/android/server/statusbar/StatusBarManagerService;)V
 HPLcom/android/server/statusbar/StatusBarManagerService;->clearInlineReplyUriPermissions(Ljava/lang/String;)V
-PLcom/android/server/statusbar/StatusBarManagerService;->clearNotificationEffects()V
+HPLcom/android/server/statusbar/StatusBarManagerService;->clearNotificationEffects()V
+PLcom/android/server/statusbar/StatusBarManagerService;->collapsePanels()V
+PLcom/android/server/statusbar/StatusBarManagerService;->disable(ILandroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/statusbar/StatusBarManagerService;->disable2(ILandroid/os/IBinder;Ljava/lang/String;)V
 PLcom/android/server/statusbar/StatusBarManagerService;->disable2ForUser(ILandroid/os/IBinder;Ljava/lang/String;I)V
-PLcom/android/server/statusbar/StatusBarManagerService;->disableForUser(ILandroid/os/IBinder;Ljava/lang/String;I)V
-HPLcom/android/server/statusbar/StatusBarManagerService;->disableLocked(IIILandroid/os/IBinder;Ljava/lang/String;I)V
-PLcom/android/server/statusbar/StatusBarManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/statusbar/StatusBarManagerService;->enforceExpandStatusBar()V
+HPLcom/android/server/statusbar/StatusBarManagerService;->disableForUser(ILandroid/os/IBinder;Ljava/lang/String;I)V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->disableLocked(IIILandroid/os/IBinder;Ljava/lang/String;I)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/statusbar/StatusBarManagerService;->enforceBiometricDialog()V
+HPLcom/android/server/statusbar/StatusBarManagerService;->enforceExpandStatusBar()V
 HSPLcom/android/server/statusbar/StatusBarManagerService;->enforceStatusBar()V
-HPLcom/android/server/statusbar/StatusBarManagerService;->enforceStatusBarService()V
-HPLcom/android/server/statusbar/StatusBarManagerService;->findMatchingRecordLocked(Landroid/os/IBinder;I)Landroid/util/Pair;
-PLcom/android/server/statusbar/StatusBarManagerService;->gatherDisableActionsLocked(II)I
-PLcom/android/server/statusbar/StatusBarManagerService;->getUiState(I)Lcom/android/server/statusbar/StatusBarManagerService$UiState;
-PLcom/android/server/statusbar/StatusBarManagerService;->handleSystemKey(I)V
+PLcom/android/server/statusbar/StatusBarManagerService;->enforceStatusBarOrShell()V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->enforceStatusBarService()V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->findMatchingRecordLocked(Landroid/os/IBinder;I)Landroid/util/Pair;
+HSPLcom/android/server/statusbar/StatusBarManagerService;->gatherDisableActionsLocked(II)I
+PLcom/android/server/statusbar/StatusBarManagerService;->getDisableFlags(Landroid/os/IBinder;I)[I
+PLcom/android/server/statusbar/StatusBarManagerService;->getUiContext()Landroid/content/Context;
+HSPLcom/android/server/statusbar/StatusBarManagerService;->getUiState(I)Lcom/android/server/statusbar/StatusBarManagerService$UiState;
+HPLcom/android/server/statusbar/StatusBarManagerService;->handleSystemKey(I)V
+PLcom/android/server/statusbar/StatusBarManagerService;->hideAuthenticationDialog()V
 PLcom/android/server/statusbar/StatusBarManagerService;->lambda$disableLocked$0$StatusBarManagerService(I)V
 PLcom/android/server/statusbar/StatusBarManagerService;->lambda$notifyBarAttachChanged$3$StatusBarManagerService()V
-PLcom/android/server/statusbar/StatusBarManagerService;->lambda$setImeWindowStatus$2$StatusBarManagerService(ILandroid/os/IBinder;IIZZ)V
-PLcom/android/server/statusbar/StatusBarManagerService;->lambda$topAppWindowChanged$1$StatusBarManagerService(IZZ)V
-PLcom/android/server/statusbar/StatusBarManagerService;->manageDisableListLocked(IILandroid/os/IBinder;Ljava/lang/String;I)V
+PLcom/android/server/statusbar/StatusBarManagerService;->lambda$reboot$5(Z)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->lambda$setImeWindowStatus$2$StatusBarManagerService(ILandroid/os/IBinder;IIZZ)V
+PLcom/android/server/statusbar/StatusBarManagerService;->lambda$shutdown$4()V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->lambda$topAppWindowChanged$1$StatusBarManagerService(IZZ)V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->manageDisableListLocked(IILandroid/os/IBinder;Ljava/lang/String;I)V
 PLcom/android/server/statusbar/StatusBarManagerService;->notifyBarAttachChanged()V
-PLcom/android/server/statusbar/StatusBarManagerService;->onDisplayChanged(I)V
+PLcom/android/server/statusbar/StatusBarManagerService;->onBiometricAuthenticated()V
+PLcom/android/server/statusbar/StatusBarManagerService;->onBiometricError(III)V
+PLcom/android/server/statusbar/StatusBarManagerService;->onBubbleNotificationSuppressionChanged(Ljava/lang/String;Z)V
+PLcom/android/server/statusbar/StatusBarManagerService;->onClearAllNotifications(I)V
+PLcom/android/server/statusbar/StatusBarManagerService;->onDisplayAdded(I)V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->onDisplayChanged(I)V
+PLcom/android/server/statusbar/StatusBarManagerService;->onDisplayRemoved(I)V
 PLcom/android/server/statusbar/StatusBarManagerService;->onGlobalActionsHidden()V
 PLcom/android/server/statusbar/StatusBarManagerService;->onGlobalActionsShown()V
 PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationActionClick(Ljava/lang/String;ILandroid/app/Notification$Action;Lcom/android/internal/statusbar/NotificationVisibility;Z)V
-PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationClear(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;IILcom/android/internal/statusbar/NotificationVisibility;)V
-PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationClick(Ljava/lang/String;Lcom/android/internal/statusbar/NotificationVisibility;)V
-PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationExpansionChanged(Ljava/lang/String;ZZI)V
-PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationSmartSuggestionsAdded(Ljava/lang/String;IIZZ)V
-PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationVisibilityChanged([Lcom/android/internal/statusbar/NotificationVisibility;[Lcom/android/internal/statusbar/NotificationVisibility;)V
-PLcom/android/server/statusbar/StatusBarManagerService;->onPanelHidden()V
-PLcom/android/server/statusbar/StatusBarManagerService;->onPanelRevealed(ZI)V
+PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationBubbleChanged(Ljava/lang/String;Z)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->onNotificationClear(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;IILcom/android/internal/statusbar/NotificationVisibility;)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->onNotificationClick(Ljava/lang/String;Lcom/android/internal/statusbar/NotificationVisibility;)V
+PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationDirectReplied(Ljava/lang/String;)V
+PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationError(Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;I)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->onNotificationExpansionChanged(Ljava/lang/String;ZZI)V
+PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationSettingsViewed(Ljava/lang/String;)V
+PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationSmartReplySent(Ljava/lang/String;ILjava/lang/CharSequence;IZ)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->onNotificationSmartSuggestionsAdded(Ljava/lang/String;IIZZ)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->onNotificationVisibilityChanged([Lcom/android/internal/statusbar/NotificationVisibility;[Lcom/android/internal/statusbar/NotificationVisibility;)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->onPanelHidden()V
+HPLcom/android/server/statusbar/StatusBarManagerService;->onPanelRevealed(ZI)V
+PLcom/android/server/statusbar/StatusBarManagerService;->reboot(Z)V
 PLcom/android/server/statusbar/StatusBarManagerService;->registerStatusBar(Lcom/android/internal/statusbar/IStatusBar;)Lcom/android/internal/statusbar/RegisterStatusBarResult;
 PLcom/android/server/statusbar/StatusBarManagerService;->remTile(Landroid/content/ComponentName;)V
-HPLcom/android/server/statusbar/StatusBarManagerService;->setDisableFlags(IILjava/lang/String;)V
+PLcom/android/server/statusbar/StatusBarManagerService;->removeIcon(Ljava/lang/String;)V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->setDisableFlags(IILjava/lang/String;)V
+PLcom/android/server/statusbar/StatusBarManagerService;->setIcon(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;)V
 HSPLcom/android/server/statusbar/StatusBarManagerService;->setIconVisibility(Ljava/lang/String;Z)V
-PLcom/android/server/statusbar/StatusBarManagerService;->setImeWindowStatus(ILandroid/os/IBinder;IIZZ)V
-PLcom/android/server/statusbar/StatusBarManagerService;->topAppWindowChanged(IZZ)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->setImeWindowStatus(ILandroid/os/IBinder;IIZZ)V
+PLcom/android/server/statusbar/StatusBarManagerService;->showAuthenticationDialog(Landroid/os/Bundle;Landroid/hardware/biometrics/IBiometricServiceReceiverInternal;IZILjava/lang/String;)V
+PLcom/android/server/statusbar/StatusBarManagerService;->showPinningEnterExitToast(Z)V
+PLcom/android/server/statusbar/StatusBarManagerService;->showPinningEscapeToast()V
+PLcom/android/server/statusbar/StatusBarManagerService;->shutdown()V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->topAppWindowChanged(IZZ)V
+PLcom/android/server/storage/-$$Lambda$StorageUserConnection$ActiveConnection$2ECT20JMDVk3s2c7JRifxIdFISs;-><init>(Lcom/android/server/storage/StorageUserConnection$ActiveConnection;Ljava/util/concurrent/CountDownLatch;)V
+PLcom/android/server/storage/-$$Lambda$StorageUserConnection$ActiveConnection$2ECT20JMDVk3s2c7JRifxIdFISs;->onResult(Landroid/os/Bundle;)V
+PLcom/android/server/storage/-$$Lambda$StorageUserConnection$ActiveConnection$uMm3Ei4cCV446R_LJOCKr8R8AU8;-><init>(Lcom/android/server/storage/StorageUserConnection$ActiveConnection;Ljava/util/concurrent/CountDownLatch;)V
+PLcom/android/server/storage/-$$Lambda$StorageUserConnection$ActiveConnection$uMm3Ei4cCV446R_LJOCKr8R8AU8;->onResult(Landroid/os/Bundle;)V
 PLcom/android/server/storage/AppCollector$BackgroundHandler;-><init>(Lcom/android/server/storage/AppCollector;Landroid/os/Looper;Landroid/os/storage/VolumeInfo;Landroid/content/pm/PackageManager;Landroid/os/UserManager;Landroid/app/usage/StorageStatsManager;)V
-PLcom/android/server/storage/AppCollector$BackgroundHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/storage/AppCollector$BackgroundHandler;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/storage/AppCollector;-><clinit>()V
 PLcom/android/server/storage/AppCollector;-><init>(Landroid/content/Context;Landroid/os/storage/VolumeInfo;)V
 PLcom/android/server/storage/AppCollector;->access$100(Lcom/android/server/storage/AppCollector;)Ljava/util/concurrent/CompletableFuture;
 PLcom/android/server/storage/AppCollector;->getPackageStats(J)Ljava/util/List;
-PLcom/android/server/storage/AppFuseBridge$MountScope;-><init>(II)V
-PLcom/android/server/storage/AppFuseBridge$MountScope;->setMountResultLocked(Z)V
+HPLcom/android/server/storage/AppFuseBridge$MountScope;-><init>(II)V
+HPLcom/android/server/storage/AppFuseBridge$MountScope;->setMountResultLocked(Z)V
 PLcom/android/server/storage/AppFuseBridge$MountScope;->waitForMount()Z
-PLcom/android/server/storage/AppFuseBridge;->addBridge(Lcom/android/server/storage/AppFuseBridge$MountScope;)Landroid/os/ParcelFileDescriptor;
-PLcom/android/server/storage/AppFuseBridge;->onClosed(I)V
-PLcom/android/server/storage/AppFuseBridge;->onMount(I)V
-PLcom/android/server/storage/AppFuseBridge;->openFile(III)Landroid/os/ParcelFileDescriptor;
-PLcom/android/server/storage/AppFuseBridge;->run()V
+HPLcom/android/server/storage/AppFuseBridge;-><init>()V
+HPLcom/android/server/storage/AppFuseBridge;->addBridge(Lcom/android/server/storage/AppFuseBridge$MountScope;)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/storage/AppFuseBridge;->onClosed(I)V
+HPLcom/android/server/storage/AppFuseBridge;->onMount(I)V
+HPLcom/android/server/storage/AppFuseBridge;->openFile(III)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/storage/AppFuseBridge;->run()V
 PLcom/android/server/storage/CacheQuotaStrategy$1$1;-><init>(Lcom/android/server/storage/CacheQuotaStrategy$1;Landroid/os/IBinder;)V
 PLcom/android/server/storage/CacheQuotaStrategy$1$1;->run()V
 PLcom/android/server/storage/CacheQuotaStrategy$1;-><init>(Lcom/android/server/storage/CacheQuotaStrategy;)V
 PLcom/android/server/storage/CacheQuotaStrategy$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/storage/CacheQuotaStrategy$1;->onServiceDisconnected(Landroid/content/ComponentName;)V
 HSPLcom/android/server/storage/CacheQuotaStrategy;-><init>(Landroid/content/Context;Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/pm/Installer;Landroid/util/ArrayMap;)V
 PLcom/android/server/storage/CacheQuotaStrategy;->access$000(Lcom/android/server/storage/CacheQuotaStrategy;)Ljava/lang/Object;
 PLcom/android/server/storage/CacheQuotaStrategy;->access$100(Lcom/android/server/storage/CacheQuotaStrategy;)Landroid/app/usage/ICacheQuotaService;
@@ -17931,30 +30055,36 @@
 HSPLcom/android/server/storage/CacheQuotaStrategy;->disconnectService()V
 HSPLcom/android/server/storage/CacheQuotaStrategy;->getRequestFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/app/usage/CacheQuotaHint;
 PLcom/android/server/storage/CacheQuotaStrategy;->getServiceComponentName()Landroid/content/ComponentName;
-PLcom/android/server/storage/CacheQuotaStrategy;->getUnfulfilledRequests()Ljava/util/List;
+HPLcom/android/server/storage/CacheQuotaStrategy;->getUnfulfilledRequests()Ljava/util/List;
 HSPLcom/android/server/storage/CacheQuotaStrategy;->insertIntoQuotaMap(Ljava/lang/String;IIJ)V
 PLcom/android/server/storage/CacheQuotaStrategy;->onResult(Landroid/os/Bundle;)V
 HSPLcom/android/server/storage/CacheQuotaStrategy;->pushProcessedQuotas(Ljava/util/List;)V
 HSPLcom/android/server/storage/CacheQuotaStrategy;->readFromXml(Ljava/io/InputStream;)Landroid/util/Pair;
 PLcom/android/server/storage/CacheQuotaStrategy;->recalculateQuotas()V
-PLcom/android/server/storage/CacheQuotaStrategy;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;J)V
+HPLcom/android/server/storage/CacheQuotaStrategy;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;J)V
 HSPLcom/android/server/storage/CacheQuotaStrategy;->setupQuotasFromFile()J
 PLcom/android/server/storage/CacheQuotaStrategy;->writeXmlToFile(Ljava/util/List;)V
 HSPLcom/android/server/storage/DeviceStorageMonitorService$1;-><init>(Lcom/android/server/storage/DeviceStorageMonitorService;Landroid/os/Looper;)V
 HSPLcom/android/server/storage/DeviceStorageMonitorService$1;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/storage/DeviceStorageMonitorService$2;-><init>(Lcom/android/server/storage/DeviceStorageMonitorService;)V
+PLcom/android/server/storage/DeviceStorageMonitorService$2;->checkMemory()V
+PLcom/android/server/storage/DeviceStorageMonitorService$2;->getMemoryLowThreshold()J
+PLcom/android/server/storage/DeviceStorageMonitorService$2;->isMemoryLow()Z
 HSPLcom/android/server/storage/DeviceStorageMonitorService$3;-><init>(Lcom/android/server/storage/DeviceStorageMonitorService;)V
 PLcom/android/server/storage/DeviceStorageMonitorService$3;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/storage/DeviceStorageMonitorService$CacheFileDeletedObserver;-><init>()V
 HSPLcom/android/server/storage/DeviceStorageMonitorService$State;-><init>()V
 HSPLcom/android/server/storage/DeviceStorageMonitorService$State;-><init>(Lcom/android/server/storage/DeviceStorageMonitorService$1;)V
+PLcom/android/server/storage/DeviceStorageMonitorService$State;->access$300(I)Ljava/lang/String;
 HSPLcom/android/server/storage/DeviceStorageMonitorService$State;->access$400(III)Z
 HSPLcom/android/server/storage/DeviceStorageMonitorService$State;->access$500(III)Z
 HSPLcom/android/server/storage/DeviceStorageMonitorService$State;->isEntering(III)Z
 HSPLcom/android/server/storage/DeviceStorageMonitorService$State;->isLeaving(III)Z
+PLcom/android/server/storage/DeviceStorageMonitorService$State;->levelToString(I)Ljava/lang/String;
 HSPLcom/android/server/storage/DeviceStorageMonitorService;-><clinit>()V
 HSPLcom/android/server/storage/DeviceStorageMonitorService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/storage/DeviceStorageMonitorService;->access$100(Lcom/android/server/storage/DeviceStorageMonitorService;)V
+PLcom/android/server/storage/DeviceStorageMonitorService;->access$200(Lcom/android/server/storage/DeviceStorageMonitorService;)Landroid/os/Handler;
 HSPLcom/android/server/storage/DeviceStorageMonitorService;->check()V
 PLcom/android/server/storage/DeviceStorageMonitorService;->dumpImpl(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/storage/DeviceStorageMonitorService;->findOrCreateState(Ljava/util/UUID;)Lcom/android/server/storage/DeviceStorageMonitorService$State;
@@ -17963,9 +30093,9 @@
 HSPLcom/android/server/storage/DeviceStorageMonitorService;->updateBroadcasts(Landroid/os/storage/VolumeInfo;III)V
 HSPLcom/android/server/storage/DeviceStorageMonitorService;->updateNotifications(Landroid/os/storage/VolumeInfo;II)V
 PLcom/android/server/storage/DiskStatsFileLogger;-><init>(Lcom/android/server/storage/FileCollector$MeasurementResult;Lcom/android/server/storage/FileCollector$MeasurementResult;Ljava/util/List;J)V
-PLcom/android/server/storage/DiskStatsFileLogger;->addAppsToJson(Lorg/json/JSONObject;)V
+HPLcom/android/server/storage/DiskStatsFileLogger;->addAppsToJson(Lorg/json/JSONObject;)V
 PLcom/android/server/storage/DiskStatsFileLogger;->dumpToFile(Ljava/io/File;)V
-PLcom/android/server/storage/DiskStatsFileLogger;->filterOnlyPrimaryUser()Landroid/util/ArrayMap;
+HPLcom/android/server/storage/DiskStatsFileLogger;->filterOnlyPrimaryUser()Landroid/util/ArrayMap;
 PLcom/android/server/storage/DiskStatsFileLogger;->getJsonRepresentation()Lorg/json/JSONObject;
 PLcom/android/server/storage/DiskStatsLoggingService$LogRunnable;-><clinit>()V
 PLcom/android/server/storage/DiskStatsLoggingService$LogRunnable;-><init>()V
@@ -17980,7 +30110,10 @@
 PLcom/android/server/storage/DiskStatsLoggingService$LogRunnable;->setSystemSize(J)V
 HSPLcom/android/server/storage/DiskStatsLoggingService;-><clinit>()V
 PLcom/android/server/storage/DiskStatsLoggingService;-><init>()V
+PLcom/android/server/storage/DiskStatsLoggingService;->isCharging(Landroid/content/Context;)Z
+PLcom/android/server/storage/DiskStatsLoggingService;->isDumpsysTaskEnabled(Landroid/content/ContentResolver;)Z
 PLcom/android/server/storage/DiskStatsLoggingService;->onStartJob(Landroid/app/job/JobParameters;)Z
+PLcom/android/server/storage/DiskStatsLoggingService;->onStopJob(Landroid/app/job/JobParameters;)Z
 HSPLcom/android/server/storage/DiskStatsLoggingService;->schedule(Landroid/content/Context;)V
 PLcom/android/server/storage/FileCollector$MeasurementResult;-><init>()V
 PLcom/android/server/storage/FileCollector$MeasurementResult;->totalAccountedSize()J
@@ -17989,9 +30122,59 @@
 PLcom/android/server/storage/FileCollector;->getMeasurementResult(Landroid/content/Context;)Lcom/android/server/storage/FileCollector$MeasurementResult;
 PLcom/android/server/storage/FileCollector;->getMeasurementResult(Ljava/io/File;)Lcom/android/server/storage/FileCollector$MeasurementResult;
 PLcom/android/server/storage/FileCollector;->getSystemSize(Landroid/content/Context;)J
+PLcom/android/server/storage/StorageSessionController$ExternalStorageServiceException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
 HSPLcom/android/server/storage/StorageSessionController;-><init>(Landroid/content/Context;Z)V
+PLcom/android/server/storage/StorageSessionController;->getExternalStorageServiceComponentName()Landroid/content/ComponentName;
+PLcom/android/server/storage/StorageSessionController;->initExternalStorageServiceComponent()V
+PLcom/android/server/storage/StorageSessionController;->isEmulatedOrPublic(Landroid/os/storage/VolumeInfo;)Z
+PLcom/android/server/storage/StorageSessionController;->killExternalStorageService(I)V
+PLcom/android/server/storage/StorageSessionController;->onReset(Landroid/os/IVold;Landroid/os/Handler;)V
 PLcom/android/server/storage/StorageSessionController;->onUnlockUser(I)V
+PLcom/android/server/storage/StorageSessionController;->onUserStopping(I)V
+PLcom/android/server/storage/StorageSessionController;->onVolumeMount(Landroid/os/ParcelFileDescriptor;Landroid/os/storage/VolumeInfo;)V
+PLcom/android/server/storage/StorageSessionController;->onVolumeMount(Ljava/io/FileDescriptor;Landroid/os/storage/VolumeInfo;)V
+PLcom/android/server/storage/StorageSessionController;->onVolumeRemove(Landroid/os/storage/VolumeInfo;)Lcom/android/server/storage/StorageUserConnection;
 PLcom/android/server/storage/StorageSessionController;->shouldHandle(Landroid/os/storage/VolumeInfo;)Z
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection$1;-><init>(Lcom/android/server/storage/StorageUserConnection$ActiveConnection;)V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection$1;->handleConnection(Landroid/os/IBinder;)V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection$1;->handleDisconnection()V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection$1;->onBindingDied(Landroid/content/ComponentName;)V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection$1;->onNullBinding(Landroid/content/ComponentName;)V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection$1;->onServiceDisconnected(Landroid/content/ComponentName;)V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;-><init>(Lcom/android/server/storage/StorageUserConnection;)V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;-><init>(Lcom/android/server/storage/StorageUserConnection;Lcom/android/server/storage/StorageUserConnection$1;)V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->access$600(Lcom/android/server/storage/StorageUserConnection$ActiveConnection;)Z
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->access$602(Lcom/android/server/storage/StorageUserConnection$ActiveConnection;Z)Z
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->access$702(Lcom/android/server/storage/StorageUserConnection$ActiveConnection;Landroid/service/storage/IExternalStorageService;)Landroid/service/storage/IExternalStorageService;
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->access$800(Lcom/android/server/storage/StorageUserConnection$ActiveConnection;)Ljava/util/concurrent/CountDownLatch;
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->bind()Ljava/util/concurrent/CountDownLatch;
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->close()V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->endSessionLocked(Lcom/android/server/storage/StorageUserConnection$Session;)V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->isActiveLocked(Lcom/android/server/storage/StorageUserConnection$Session;)Z
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->lambda$endSessionLocked$1$StorageUserConnection$ActiveConnection(Ljava/util/concurrent/CountDownLatch;Landroid/os/Bundle;)V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->lambda$startSessionLocked$0$StorageUserConnection$ActiveConnection(Ljava/util/concurrent/CountDownLatch;Landroid/os/Bundle;)V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->maybeThrowExceptionLocked()V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->setResultLocked(Ljava/util/concurrent/CountDownLatch;Landroid/os/Bundle;)V
+PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->startSessionLocked(Lcom/android/server/storage/StorageUserConnection$Session;Landroid/os/ParcelFileDescriptor;)V
+PLcom/android/server/storage/StorageUserConnection$Session;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/storage/StorageUserConnection$Session;->isInitialisedLocked()Z
+PLcom/android/server/storage/StorageUserConnection$Session;->toString()Ljava/lang/String;
+PLcom/android/server/storage/StorageUserConnection;-><init>(Landroid/content/Context;ILcom/android/server/storage/StorageSessionController;)V
+PLcom/android/server/storage/StorageUserConnection;->access$100(Lcom/android/server/storage/StorageUserConnection;)Ljava/lang/Object;
+PLcom/android/server/storage/StorageUserConnection;->access$200(Lcom/android/server/storage/StorageUserConnection;)I
+PLcom/android/server/storage/StorageUserConnection;->access$300(Lcom/android/server/storage/StorageUserConnection;)Landroid/content/Context;
+PLcom/android/server/storage/StorageUserConnection;->access$400(Lcom/android/server/storage/StorageUserConnection;Ljava/util/concurrent/CountDownLatch;Ljava/lang/String;)V
+PLcom/android/server/storage/StorageUserConnection;->access$500(Lcom/android/server/storage/StorageUserConnection;)Lcom/android/server/storage/StorageSessionController;
+PLcom/android/server/storage/StorageUserConnection;->close()V
+PLcom/android/server/storage/StorageUserConnection;->getAllSessionIds()Ljava/util/Set;
+PLcom/android/server/storage/StorageUserConnection;->prepareRemote()V
+PLcom/android/server/storage/StorageUserConnection;->removeAllSessions()V
+PLcom/android/server/storage/StorageUserConnection;->removeSession(Ljava/lang/String;)Lcom/android/server/storage/StorageUserConnection$Session;
+PLcom/android/server/storage/StorageUserConnection;->removeSessionAndWait(Ljava/lang/String;)V
+PLcom/android/server/storage/StorageUserConnection;->resetUserSessions()V
+PLcom/android/server/storage/StorageUserConnection;->startSession(Ljava/lang/String;Landroid/os/ParcelFileDescriptor;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/storage/StorageUserConnection;->waitForLatch(Ljava/util/concurrent/CountDownLatch;Ljava/lang/String;)V
 PLcom/android/server/systemcaptions/RemoteSystemCaptionsManagerService$RemoteServiceConnection;-><init>(Lcom/android/server/systemcaptions/RemoteSystemCaptionsManagerService;)V
 PLcom/android/server/systemcaptions/RemoteSystemCaptionsManagerService$RemoteServiceConnection;-><init>(Lcom/android/server/systemcaptions/RemoteSystemCaptionsManagerService;Lcom/android/server/systemcaptions/RemoteSystemCaptionsManagerService$1;)V
 PLcom/android/server/systemcaptions/RemoteSystemCaptionsManagerService;-><clinit>()V
@@ -18013,36 +30196,36 @@
 PLcom/android/server/systemcaptions/SystemCaptionsManagerService;->onServiceRemoved(Lcom/android/server/systemcaptions/SystemCaptionsManagerPerUserService;I)V
 HSPLcom/android/server/systemcaptions/SystemCaptionsManagerService;->onStart()V
 HSPLcom/android/server/telecom/-$$Lambda$TelecomLoaderService$4O6PYSHBsC0Q5H-Y3LkvD32Vcjk;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
-PLcom/android/server/telecom/-$$Lambda$TelecomLoaderService$4O6PYSHBsC0Q5H-Y3LkvD32Vcjk;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/-$$Lambda$TelecomLoaderService$4O6PYSHBsC0Q5H-Y3LkvD32Vcjk;->getPackages(I)[Ljava/lang/String;
 HSPLcom/android/server/telecom/-$$Lambda$TelecomLoaderService$Dg9me3bEFl3t0NGOPYwXIoF34FY;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
-PLcom/android/server/telecom/-$$Lambda$TelecomLoaderService$Dg9me3bEFl3t0NGOPYwXIoF34FY;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/-$$Lambda$TelecomLoaderService$Dg9me3bEFl3t0NGOPYwXIoF34FY;->getPackages(I)[Ljava/lang/String;
 HSPLcom/android/server/telecom/-$$Lambda$TelecomLoaderService$jGqhqH8bl_lWotJlrzraXplioIw;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
 PLcom/android/server/telecom/-$$Lambda$TelecomLoaderService$jGqhqH8bl_lWotJlrzraXplioIw;->onRoleHoldersChanged(Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLcom/android/server/telecom/-$$Lambda$TelecomLoaderService$v_RQMbGOOwc6kjxGSNUrOugH8pw;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
-PLcom/android/server/telecom/-$$Lambda$TelecomLoaderService$v_RQMbGOOwc6kjxGSNUrOugH8pw;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/-$$Lambda$TelecomLoaderService$v_RQMbGOOwc6kjxGSNUrOugH8pw;->getPackages(I)[Ljava/lang/String;
 HSPLcom/android/server/telecom/TelecomLoaderService$1;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
 PLcom/android/server/telecom/TelecomLoaderService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-PLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection$1;-><init>(Lcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;)V
+HSPLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection$1;-><init>(Lcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;)V
 HSPLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
 HSPLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;-><init>(Lcom/android/server/telecom/TelecomLoaderService;Lcom/android/server/telecom/TelecomLoaderService$1;)V
-PLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HSPLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 HSPLcom/android/server/telecom/TelecomLoaderService;-><clinit>()V
 HSPLcom/android/server/telecom/TelecomLoaderService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/telecom/TelecomLoaderService;->access$100(Lcom/android/server/telecom/TelecomLoaderService;)Landroid/content/Context;
-PLcom/android/server/telecom/TelecomLoaderService;->access$200(Lcom/android/server/telecom/TelecomLoaderService;)Ljava/lang/Object;
-PLcom/android/server/telecom/TelecomLoaderService;->access$300(Lcom/android/server/telecom/TelecomLoaderService;)Landroid/util/IntArray;
+HSPLcom/android/server/telecom/TelecomLoaderService;->access$100(Lcom/android/server/telecom/TelecomLoaderService;)Landroid/content/Context;
+HSPLcom/android/server/telecom/TelecomLoaderService;->access$200(Lcom/android/server/telecom/TelecomLoaderService;)Ljava/lang/Object;
+HSPLcom/android/server/telecom/TelecomLoaderService;->access$300(Lcom/android/server/telecom/TelecomLoaderService;)Landroid/util/IntArray;
 PLcom/android/server/telecom/TelecomLoaderService;->access$500(Lcom/android/server/telecom/TelecomLoaderService;I)V
 HSPLcom/android/server/telecom/TelecomLoaderService;->connectToTelecom()V
 PLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppNotifier$3$TelecomLoaderService(Ljava/lang/String;Landroid/os/UserHandle;)V
-PLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppProviders$0$TelecomLoaderService(I)[Ljava/lang/String;
-PLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppProviders$1$TelecomLoaderService(I)[Ljava/lang/String;
-PLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppProviders$2$TelecomLoaderService(I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppProviders$0$TelecomLoaderService(I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppProviders$1$TelecomLoaderService(I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppProviders$2$TelecomLoaderService(I)[Ljava/lang/String;
 HSPLcom/android/server/telecom/TelecomLoaderService;->onBootPhase(I)V
 HSPLcom/android/server/telecom/TelecomLoaderService;->onStart()V
 HSPLcom/android/server/telecom/TelecomLoaderService;->registerCarrierConfigChangedReceiver()V
 HSPLcom/android/server/telecom/TelecomLoaderService;->registerDefaultAppNotifier()V
 HSPLcom/android/server/telecom/TelecomLoaderService;->registerDefaultAppProviders()V
-PLcom/android/server/telecom/TelecomLoaderService;->updateSimCallManagerPermissions(I)V
+HPLcom/android/server/telecom/TelecomLoaderService;->updateSimCallManagerPermissions(I)V
 HSPLcom/android/server/testharness/TestHarnessModeService$1;-><init>(Lcom/android/server/testharness/TestHarnessModeService;)V
 HSPLcom/android/server/testharness/TestHarnessModeService;-><clinit>()V
 HSPLcom/android/server/testharness/TestHarnessModeService;-><init>(Landroid/content/Context;)V
@@ -18053,26 +30236,86 @@
 HSPLcom/android/server/testharness/TestHarnessModeService;->onStart()V
 HSPLcom/android/server/testharness/TestHarnessModeService;->setUpTestHarnessMode()V
 PLcom/android/server/testharness/TestHarnessModeService;->showNotificationIfEnabled()V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$2sJrwO1jPjEX_2E7aDk6t5666lk;-><init>(Lcom/android/internal/util/FunctionalUtils$ThrowingConsumer;Lcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$2sJrwO1jPjEX_2E7aDk6t5666lk;->runOrThrow()V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$64mAXU9GjFt2f69p_xdhRl7xXFQ;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;Landroid/view/textclassifier/TextClassificationSessionId;)V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$64mAXU9GjFt2f69p_xdhRl7xXFQ;->acceptOrThrow(Ljava/lang/Object;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$C6b5fl8vcOQ42djzSJ_03hDc6yA;-><init>(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextSelection$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$C6b5fl8vcOQ42djzSJ_03hDc6yA;->acceptOrThrow(Ljava/lang/Object;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$CB4TRod_LBt48w0zNWgHd_0r5tU;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$CB4TRod_LBt48w0zNWgHd_0r5tU;->runOrThrow()V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$LbKHscWPDUIjKzR4a1gANqdMY6c;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$LbKHscWPDUIjKzR4a1gANqdMY6c;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$LgTaKgUnkwyysO9lmBSO8HNViFU;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationContext;Landroid/view/textclassifier/TextClassificationSessionId;I)V
-PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$LgTaKgUnkwyysO9lmBSO8HNViFU;->runOrThrow()V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$LgTaKgUnkwyysO9lmBSO8HNViFU;->runOrThrow()V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$Mu95ZECYMawAFTgaMzQ9kasDiKU;-><init>(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/ConversationActions$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$Mu95ZECYMawAFTgaMzQ9kasDiKU;->acceptOrThrow(Ljava/lang/Object;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$NrhR3cz8qMQshjDDQuBK6HtZpyc;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/SelectionEvent;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$NrhR3cz8qMQshjDDQuBK6HtZpyc;->runOrThrow()V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$XSRTA8JOHnkYT6Nx-j6ZQZBVb1k;-><init>(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassifierEvent;)V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$XSRTA8JOHnkYT6Nx-j6ZQZBVb1k;->acceptOrThrow(Ljava/lang/Object;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$YncBiGXrmV9iVRg9N6un11UZvEM;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassifierEvent;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$YncBiGXrmV9iVRg9N6un11UZvEM;->runOrThrow()V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$Zo3yKbNMpKbAhJ7coUzTv5c-zZI;-><init>(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/SelectionEvent;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$Zo3yKbNMpKbAhJ7coUzTv5c-zZI;->acceptOrThrow(Ljava/lang/Object;)V
 PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$bskC2PS7oOlLzDJkBbOVEdfy1Gg;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$bskC2PS7oOlLzDJkBbOVEdfy1Gg;->runOrThrow()V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$dSVln_o2_pbF3ORGnBQ8z407M10;-><init>(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextLinks$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$dSVln_o2_pbF3ORGnBQ8z407M10;->acceptOrThrow(Ljava/lang/Object;)V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$e1UWpNtFzY7M9iYeMHhCrNauxak;-><init>(Lcom/android/internal/util/FunctionalUtils$ThrowingConsumer;Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;)V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$e1UWpNtFzY7M9iYeMHhCrNauxak;->runOrThrow()V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$eHPAXa73mXK1X6ykNeph3K0mXtg;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;Landroid/view/textclassifier/TextClassificationContext;Landroid/view/textclassifier/TextClassificationSessionId;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$eHPAXa73mXK1X6ykNeph3K0mXtg;->acceptOrThrow(Ljava/lang/Object;)V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$f_vDZ7EFXK9b8SQpksrEkEWKPq8;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;Landroid/view/textclassifier/TextClassificationContext;Landroid/view/textclassifier/TextClassificationSessionId;I)V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$f_vDZ7EFXK9b8SQpksrEkEWKPq8;->acceptOrThrow(Ljava/lang/Object;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$kUVQfCEBNt6jzkS89Io4xSHSuIs;-><init>(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassification$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$kUVQfCEBNt6jzkS89Io4xSHSuIs;->acceptOrThrow(Ljava/lang/Object;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$mKOJpfoN0qgghwbMeUHqGFHaCDg;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextSelection$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$mKOJpfoN0qgghwbMeUHqGFHaCDg;->runOrThrow()V
 PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$mLzk2wMmEjV5zvq4IRM6g-PyeAk;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/ConversationActions$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
 PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$mLzk2wMmEjV5zvq4IRM6g-PyeAk;->runOrThrow()V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$nMkPNkAsWr8y9ybbpmHncJ2R2Aw;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextLinks$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$nMkPNkAsWr8y9ybbpmHncJ2R2Aw;->runOrThrow()V
 PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$s1d_iMop8cVfXdi-T-chBEHa9ek;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassification$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
 PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$s1d_iMop8cVfXdi-T-chBEHa9ek;->runOrThrow()V
-PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$x-GZDBev2pMmhyvF3nP65PH7VPo;-><init>(Ljava/lang/String;)V
-PLcom/android/server/textclassifier/-$$Lambda$k-7KcqZH2A0AukChaKa6Xru13_Q;-><init>(Landroid/service/textclassifier/ITextClassifierCallback;)V
+HPLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$x-GZDBev2pMmhyvF3nP65PH7VPo;-><init>(Ljava/lang/String;)V
+PLcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$x-GZDBev2pMmhyvF3nP65PH7VPo;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/textclassifier/-$$Lambda$k-7KcqZH2A0AukChaKa6Xru13_Q;-><init>(Landroid/service/textclassifier/ITextClassifierCallback;)V
+HSPLcom/android/server/textclassifier/TextClassificationManagerService$1;-><init>()V
+HPLcom/android/server/textclassifier/TextClassificationManagerService$1;->asBinder()Landroid/os/IBinder;
 HSPLcom/android/server/textclassifier/TextClassificationManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/textclassifier/TextClassificationManagerService$Lifecycle;->onStart()V
-PLcom/android/server/textclassifier/TextClassificationManagerService$Lifecycle;->onStartUser(I)V
+HSPLcom/android/server/textclassifier/TextClassificationManagerService$Lifecycle;->onStartUser(I)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$Lifecycle;->onStopUser(I)V
 PLcom/android/server/textclassifier/TextClassificationManagerService$Lifecycle;->onUnlockUser(I)V
-PLcom/android/server/textclassifier/TextClassificationManagerService$Lifecycle;->processAnyPendingWork(I)V
+HSPLcom/android/server/textclassifier/TextClassificationManagerService$Lifecycle;->processAnyPendingWork(I)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;-><init>(Ljava/lang/String;Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;Landroid/os/IBinder;Lcom/android/server/textclassifier/TextClassificationManagerService;Lcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;I)V
 HPLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;-><init>(Ljava/lang/String;Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;Landroid/os/IBinder;Lcom/android/server/textclassifier/TextClassificationManagerService;Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;I)V
-PLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;->access$1200(Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;)I
-PLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;->access$1300(Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;)Ljava/lang/String;
-PLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;->access$1400(Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;)Ljava/lang/Runnable;
-PLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;->access$1600(Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;)Landroid/os/IBinder;
+HPLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;->access$1200(Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;)I
+HPLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;->access$1300(Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;)Ljava/lang/String;
+PLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;->access$1400(Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;)I
+HPLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;->access$1400(Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;)Ljava/lang/Runnable;
+PLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;->access$1500(Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;)Ljava/lang/String;
+HPLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;->access$1600(Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;)Landroid/os/IBinder;
+PLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;->access$1600(Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;)Ljava/lang/Runnable;
+PLcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;->access$1800(Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;)Landroid/os/IBinder;
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState$TextClassifierServiceConnection;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;I)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState$TextClassifierServiceConnection;->init(Landroid/service/textclassifier/ITextClassifierService;Landroid/content/ComponentName;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState$TextClassifierServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;ILjava/lang/String;Z)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;ILjava/lang/String;ZLcom/android/server/textclassifier/TextClassificationManagerService$1;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;->access$1200(Lcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;)Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;->access$2100(Lcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;ILandroid/content/ComponentName;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;->access$2200(Lcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;->access$500(Lcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;)Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;->access$600(Lcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;ILjava/lang/String;)Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;->bindIfHasPendingRequestsLocked()Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;->bindLocked()Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;->checkRequestAcceptedLocked(ILjava/lang/String;)Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;->getTextClassifierServiceComponent()Landroid/content/ComponentName;
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;->handlePendingRequestsLocked()V
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;->isBoundLocked()Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;->updateServiceInfoLocked(ILandroid/content/ComponentName;)V
 HSPLcom/android/server/textclassifier/TextClassificationManagerService$TextClassifierSettingsListener;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;Landroid/content/Context;)V
 PLcom/android/server/textclassifier/TextClassificationManagerService$TextClassifierSettingsListener;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/textclassifier/TextClassificationManagerService$TextClassifierSettingsListener;->registerObserver()V
@@ -18083,152 +30326,305 @@
 PLcom/android/server/textclassifier/TextClassificationManagerService$UserState$TextClassifierServiceConnection;->onNullBinding(Landroid/content/ComponentName;)V
 PLcom/android/server/textclassifier/TextClassificationManagerService$UserState$TextClassifierServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/textclassifier/TextClassificationManagerService$UserState$TextClassifierServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
-PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;ILandroid/content/Context;Ljava/lang/Object;)V
-PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;ILandroid/content/Context;Ljava/lang/Object;Lcom/android/server/textclassifier/TextClassificationManagerService$1;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;I)V
+HSPLcom/android/server/textclassifier/TextClassificationManagerService$UserState;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;ILandroid/content/Context;Ljava/lang/Object;)V
+HSPLcom/android/server/textclassifier/TextClassificationManagerService$UserState;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;ILandroid/content/Context;Ljava/lang/Object;Lcom/android/server/textclassifier/TextClassificationManagerService$1;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;-><init>(Lcom/android/server/textclassifier/TextClassificationManagerService;ILcom/android/server/textclassifier/TextClassificationManagerService$1;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$1000(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;)V
 PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$1700(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;)Ljava/lang/Object;
 PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$1800(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;ILandroid/content/ComponentName;)V
 PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$1900(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;)V
-PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$400(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;)Z
-PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$600(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;ILjava/lang/String;)Z
-PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->bindIfHasPendingRequestsLocked()Z
-PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->bindLocked()Z
-PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->checkRequestAcceptedLocked(ILjava/lang/String;)Z
+HSPLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$400(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;)Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$500(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;)Z
+HPLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$600(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;ILjava/lang/String;)Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$600(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$700(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;)Z
+HPLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$800(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;ILjava/lang/String;)Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$800(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->access$900(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/content/ComponentName;)Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->bindIfHasPendingRequestsLocked()V
+HSPLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->bindIfHasPendingRequestsLocked()Z
+HPLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->bindLocked()Z
+HPLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->checkRequestAcceptedLocked(ILjava/lang/String;)Z
 PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->getAllServiceStatesLocked()Ljava/util/List;
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->getServiceStateLocked(Z)Lcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;
 PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->getServiceUid(Landroid/content/ComponentName;I)I
-PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->handlePendingRequestsLocked()V
-PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->isBoundLocked()Z
+HPLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->handlePendingRequestsLocked()V
+HPLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->isBoundLocked()Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->isCurrentlyBoundToComponentLocked(Landroid/content/ComponentName;)Z
 PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->isDefaultTrustService(Landroid/content/ComponentName;)Z
+PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->unbindLocked()V
 PLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->updateServiceInfoLocked(ILandroid/content/ComponentName;)V
+HSPLcom/android/server/textclassifier/TextClassificationManagerService;-><clinit>()V
 HSPLcom/android/server/textclassifier/TextClassificationManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/textclassifier/TextClassificationManagerService;-><init>(Landroid/content/Context;Lcom/android/server/textclassifier/TextClassificationManagerService$1;)V
 HSPLcom/android/server/textclassifier/TextClassificationManagerService;->access$100(Lcom/android/server/textclassifier/TextClassificationManagerService;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->access$1000(Lcom/android/server/textclassifier/TextClassificationManagerService;)Ljava/lang/String;
 PLcom/android/server/textclassifier/TextClassificationManagerService;->access$1100(Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;Ljava/lang/String;)Ljava/lang/Runnable;
-PLcom/android/server/textclassifier/TextClassificationManagerService;->access$200(Lcom/android/server/textclassifier/TextClassificationManagerService;)Ljava/lang/Object;
-PLcom/android/server/textclassifier/TextClassificationManagerService;->access$300(Lcom/android/server/textclassifier/TextClassificationManagerService;I)Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;
+PLcom/android/server/textclassifier/TextClassificationManagerService;->access$1100(Lcom/android/server/textclassifier/TextClassificationManagerService;)Landroid/view/textclassifier/TextClassificationConstants;
+PLcom/android/server/textclassifier/TextClassificationManagerService;->access$1900(Lcom/android/server/textclassifier/TextClassificationManagerService;)Landroid/content/Context;
+HSPLcom/android/server/textclassifier/TextClassificationManagerService;->access$200(Lcom/android/server/textclassifier/TextClassificationManagerService;)Ljava/lang/Object;
+PLcom/android/server/textclassifier/TextClassificationManagerService;->access$2000(Lcom/android/server/textclassifier/TextClassificationManagerService;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->access$2000(Lcom/android/server/textclassifier/TextClassificationManagerService;Ljava/lang/String;I)I
+HSPLcom/android/server/textclassifier/TextClassificationManagerService;->access$300(Lcom/android/server/textclassifier/TextClassificationManagerService;I)Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;
+PLcom/android/server/textclassifier/TextClassificationManagerService;->access$700(Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;Ljava/lang/String;)Ljava/lang/Runnable;
+PLcom/android/server/textclassifier/TextClassificationManagerService;->access$800(Lcom/android/server/textclassifier/TextClassificationManagerService;)Ljava/lang/String;
 PLcom/android/server/textclassifier/TextClassificationManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/textclassifier/TextClassificationManagerService;->getUserStateLocked(I)Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;
+HSPLcom/android/server/textclassifier/TextClassificationManagerService;->getUserStateLocked(I)Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->handleRequest(ILjava/lang/String;ZLcom/android/internal/util/FunctionalUtils$ThrowingConsumer;Ljava/lang/String;Landroid/service/textclassifier/ITextClassifierCallback;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->handleRequest(ILjava/lang/String;ZZLcom/android/internal/util/FunctionalUtils$ThrowingConsumer;Ljava/lang/String;Landroid/service/textclassifier/ITextClassifierCallback;)V
 PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$dump$9$TextClassificationManagerService(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$handleRequest$10(Lcom/android/internal/util/FunctionalUtils$ThrowingConsumer;Lcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$handleRequest$10(Lcom/android/internal/util/FunctionalUtils$ThrowingConsumer;Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$logOnFailure$10(Ljava/lang/String;Ljava/lang/Throwable;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$logOnFailure$11(Ljava/lang/String;Ljava/lang/Throwable;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onClassifyText$1(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassification$Request;Landroid/service/textclassifier/ITextClassifierCallback;Landroid/service/textclassifier/ITextClassifierService;)V
 PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onClassifyText$1(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassification$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
-PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onCreateTextClassificationSession$7$TextClassificationManagerService(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationContext;Landroid/view/textclassifier/TextClassificationSessionId;I)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onCreateTextClassificationSession$7$TextClassificationManagerService(Landroid/view/textclassifier/TextClassificationContext;Landroid/view/textclassifier/TextClassificationSessionId;ILandroid/service/textclassifier/ITextClassifierService;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onCreateTextClassificationSession$7$TextClassificationManagerService(Landroid/view/textclassifier/TextClassificationContext;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/service/textclassifier/ITextClassifierService;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onCreateTextClassificationSession$7$TextClassificationManagerService(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationContext;Landroid/view/textclassifier/TextClassificationSessionId;I)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onDestroyTextClassificationSession$8$TextClassificationManagerService(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/service/textclassifier/ITextClassifierService;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onDestroyTextClassificationSession$8$TextClassificationManagerService(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onGenerateLinks$2(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextLinks$Request;Landroid/service/textclassifier/ITextClassifierCallback;Landroid/service/textclassifier/ITextClassifierService;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onGenerateLinks$2(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextLinks$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onSelectionEvent$3(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/SelectionEvent;Landroid/service/textclassifier/ITextClassifierService;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onSelectionEvent$3(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/SelectionEvent;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onSuggestConversationActions$6(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/ConversationActions$Request;Landroid/service/textclassifier/ITextClassifierCallback;Landroid/service/textclassifier/ITextClassifierService;)V
 PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onSuggestConversationActions$6(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/ConversationActions$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
-PLcom/android/server/textclassifier/TextClassificationManagerService;->logOnFailure(Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;Ljava/lang/String;)Ljava/lang/Runnable;
-PLcom/android/server/textclassifier/TextClassificationManagerService;->onClassifyText(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassification$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
-PLcom/android/server/textclassifier/TextClassificationManagerService;->onCreateTextClassificationSession(Landroid/view/textclassifier/TextClassificationContext;Landroid/view/textclassifier/TextClassificationSessionId;)V
-PLcom/android/server/textclassifier/TextClassificationManagerService;->onDestroyTextClassificationSession(Landroid/view/textclassifier/TextClassificationSessionId;)V
-PLcom/android/server/textclassifier/TextClassificationManagerService;->onGenerateLinks(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextLinks$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
-PLcom/android/server/textclassifier/TextClassificationManagerService;->onSelectionEvent(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/SelectionEvent;)V
-PLcom/android/server/textclassifier/TextClassificationManagerService;->onSuggestConversationActions(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/ConversationActions$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onSuggestSelection$0(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextSelection$Request;Landroid/service/textclassifier/ITextClassifierCallback;Landroid/service/textclassifier/ITextClassifierService;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onSuggestSelection$0(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextSelection$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onTextClassifierEvent$4(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassifierEvent;Landroid/service/textclassifier/ITextClassifierService;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->lambda$onTextClassifierEvent$4(Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassifierEvent;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->logOnFailure(Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;Ljava/lang/String;)Ljava/lang/Runnable;
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->onClassifyText(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassification$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->onCreateTextClassificationSession(Landroid/view/textclassifier/TextClassificationContext;Landroid/view/textclassifier/TextClassificationSessionId;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->onDestroyTextClassificationSession(Landroid/view/textclassifier/TextClassificationSessionId;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->onGenerateLinks(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextLinks$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->onSelectionEvent(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/SelectionEvent;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->onSuggestConversationActions(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/ConversationActions$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
 PLcom/android/server/textclassifier/TextClassificationManagerService;->onSuggestSelection(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextSelection$Request;Landroid/service/textclassifier/ITextClassifierCallback;)V
-PLcom/android/server/textclassifier/TextClassificationManagerService;->onTextClassifierEvent(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassifierEvent;)V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->onTextClassifierEvent(Landroid/view/textclassifier/TextClassificationSessionId;Landroid/view/textclassifier/TextClassifierEvent;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->peekUserStateLocked(I)Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;
+PLcom/android/server/textclassifier/TextClassificationManagerService;->resolvePackageToUid(Ljava/lang/String;I)I
 HSPLcom/android/server/textclassifier/TextClassificationManagerService;->startListenSettings()V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->unbindServiceIfNecessary()V
+HPLcom/android/server/textclassifier/TextClassificationManagerService;->validateCallingPackage(Ljava/lang/String;)V
 HPLcom/android/server/textclassifier/TextClassificationManagerService;->validateInput(Landroid/content/Context;Ljava/lang/String;I)V
-PLcom/android/server/textservices/-$$Lambda$TextServicesManagerService$SpellCheckerBindGroup$H2umvFNjpgILSC1ZJmUoLxzCdSk;-><init>(Landroid/os/IBinder;)V
+PLcom/android/server/textclassifier/TextClassificationManagerService;->validateUser(I)V
+HPLcom/android/server/textservices/-$$Lambda$TextServicesManagerService$SpellCheckerBindGroup$H2umvFNjpgILSC1ZJmUoLxzCdSk;-><init>(Landroid/os/IBinder;)V
+PLcom/android/server/textservices/-$$Lambda$TextServicesManagerService$SpellCheckerBindGroup$H2umvFNjpgILSC1ZJmUoLxzCdSk;->test(Ljava/lang/Object;)Z
+PLcom/android/server/textservices/LocaleUtils;->getSuitableLocalesForSpellChecker(Ljava/util/Locale;)Ljava/util/ArrayList;
 HSPLcom/android/server/textservices/TextServicesManagerInternal$1;-><init>()V
 HSPLcom/android/server/textservices/TextServicesManagerInternal;-><clinit>()V
 HSPLcom/android/server/textservices/TextServicesManagerInternal;-><init>()V
 HSPLcom/android/server/textservices/TextServicesManagerInternal;->get()Lcom/android/server/textservices/TextServicesManagerInternal;
-PLcom/android/server/textservices/TextServicesManagerService$ISpellCheckerServiceCallbackBinder;-><init>(Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;Lcom/android/server/textservices/TextServicesManagerService$SessionRequest;)V
+HPLcom/android/server/textservices/TextServicesManagerService$ISpellCheckerServiceCallbackBinder;-><init>(Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;Lcom/android/server/textservices/TextServicesManagerService$SessionRequest;)V
 PLcom/android/server/textservices/TextServicesManagerService$ISpellCheckerServiceCallbackBinder;->onSessionCreated(Lcom/android/internal/textservice/ISpellCheckerSession;)V
-PLcom/android/server/textservices/TextServicesManagerService$InternalDeathRecipients;-><init>(Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;)V
+HPLcom/android/server/textservices/TextServicesManagerService$InternalDeathRecipients;-><init>(Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;)V
 PLcom/android/server/textservices/TextServicesManagerService$InternalDeathRecipients;->onCallbackDied(Landroid/os/IInterface;)V
 PLcom/android/server/textservices/TextServicesManagerService$InternalDeathRecipients;->onCallbackDied(Lcom/android/internal/textservice/ISpellCheckerSessionListener;)V
-PLcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;-><init>(Lcom/android/server/textservices/TextServicesManagerService;Ljava/lang/String;Ljava/util/HashMap;)V
+HPLcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;-><init>(Lcom/android/server/textservices/TextServicesManagerService;Ljava/lang/String;Ljava/util/HashMap;)V
 PLcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;->access$2100(Lcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;)Ljava/util/HashMap;
 PLcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;->access$2200(Lcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;)Ljava/lang/String;
 PLcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;->onServiceConnectedInnerLocked(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;->onServiceConnectedInnerLocked(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
+PLcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;->onServiceDisconnectedInnerLocked(Landroid/content/ComponentName;)V
 HSPLcom/android/server/textservices/TextServicesManagerService$Lifecycle$1;-><init>(Lcom/android/server/textservices/TextServicesManagerService$Lifecycle;)V
 HSPLcom/android/server/textservices/TextServicesManagerService$Lifecycle$1;->getCurrentSpellCheckerForUser(I)Landroid/view/textservice/SpellCheckerInfo;
 HSPLcom/android/server/textservices/TextServicesManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/textservices/TextServicesManagerService$Lifecycle;->access$800(Lcom/android/server/textservices/TextServicesManagerService$Lifecycle;)Lcom/android/server/textservices/TextServicesManagerService;
 HSPLcom/android/server/textservices/TextServicesManagerService$Lifecycle;->onStart()V
+PLcom/android/server/textservices/TextServicesManagerService$Lifecycle;->onStopUser(I)V
 PLcom/android/server/textservices/TextServicesManagerService$Lifecycle;->onUnlockUser(I)V
-PLcom/android/server/textservices/TextServicesManagerService$SessionRequest;-><init>(ILjava/lang/String;Lcom/android/internal/textservice/ITextServicesSessionListener;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;)V
-PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;-><init>(Lcom/android/server/textservices/TextServicesManagerService;Lcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;)V
+HPLcom/android/server/textservices/TextServicesManagerService$SessionRequest;-><init>(ILjava/lang/String;Lcom/android/internal/textservice/ITextServicesSessionListener;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;)V
+HPLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;-><init>(Lcom/android/server/textservices/TextServicesManagerService;Lcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;)V
 PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->access$100(Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;)Lcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;
-PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->cleanLocked()V
+PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->access$200(Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;)Lcom/android/internal/textservice/ISpellCheckerService;
+PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->access$300(Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;)Z
+PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->access$400(Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;)Z
+PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->access$500(Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;)Ljava/util/ArrayList;
+PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->access$600(Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;)Ljava/util/ArrayList;
+PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->access$700(Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;)Lcom/android/server/textservices/TextServicesManagerService$InternalDeathRecipients;
+HPLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->cleanLocked()V
 PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->getISpellCheckerSessionOrQueueLocked(Lcom/android/server/textservices/TextServicesManagerService$SessionRequest;)V
-PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->onServiceConnectedLocked(Lcom/android/internal/textservice/ISpellCheckerService;)V
+PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->lambda$removeListener$0(Landroid/os/IBinder;Lcom/android/server/textservices/TextServicesManagerService$SessionRequest;)Z
+HPLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->onServiceConnectedLocked(Lcom/android/internal/textservice/ISpellCheckerService;)V
+PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->onServiceDisconnectedLocked()V
 PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->onSessionCreated(Lcom/android/internal/textservice/ISpellCheckerSession;Lcom/android/server/textservices/TextServicesManagerService$SessionRequest;)V
-PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->removeListener(Lcom/android/internal/textservice/ISpellCheckerSessionListener;)V
+PLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->removeAllLocked()V
+HPLcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;->removeListener(Lcom/android/internal/textservice/ISpellCheckerSessionListener;)V
 PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;-><init>(ILandroid/content/Context;)V
-PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->access$1100(Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)V
-PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->access$1600(Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)Ljava/util/HashMap;
-PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->access$1800(Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)Ljava/util/HashMap;
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->access$1100(Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)V
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->access$1600(Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)Ljava/util/HashMap;
+PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->access$1700(Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)Ljava/util/ArrayList;
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->access$1800(Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)Ljava/util/HashMap;
 PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->access$1900(Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)I
 PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->access$2000(Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;Ljava/io/PrintWriter;)V
 PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getBoolean(Ljava/lang/String;Z)Z
-PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getCurrentSpellChecker()Landroid/view/textservice/SpellCheckerInfo;
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getBoolean(Ljava/lang/String;Z)Z
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getCurrentSpellChecker()Landroid/view/textservice/SpellCheckerInfo;
 HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getInt(Ljava/lang/String;I)I
-PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getSelectedSpellChecker()Ljava/lang/String;
-PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getSelectedSpellCheckerSubtype(I)I
-PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->initializeTextServicesData()V
-PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->isSpellCheckerEnabled()Z
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getSelectedSpellChecker()Ljava/lang/String;
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getSelectedSpellCheckerSubtype(I)I
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->initializeTextServicesData()V
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->isSpellCheckerEnabled()Z
+PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->putInt(Ljava/lang/String;I)V
+PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->putSelectedSpellChecker(Ljava/lang/String;)V
+PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->putSelectedSpellCheckerSubtype(I)V
+PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->putString(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->setCurrentSpellChecker(Landroid/view/textservice/SpellCheckerInfo;)V
 HSPLcom/android/server/textservices/TextServicesManagerService$TextServicesMonitor;-><init>(Lcom/android/server/textservices/TextServicesManagerService;)V
 HSPLcom/android/server/textservices/TextServicesManagerService$TextServicesMonitor;-><init>(Lcom/android/server/textservices/TextServicesManagerService;Lcom/android/server/textservices/TextServicesManagerService$1;)V
-PLcom/android/server/textservices/TextServicesManagerService$TextServicesMonitor;->onSomePackagesChanged()V
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesMonitor;->onSomePackagesChanged()V
 HSPLcom/android/server/textservices/TextServicesManagerService;-><clinit>()V
 HSPLcom/android/server/textservices/TextServicesManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/textservices/TextServicesManagerService;->access$1200(Lcom/android/server/textservices/TextServicesManagerService;)Ljava/lang/Object;
+PLcom/android/server/textservices/TextServicesManagerService;->access$1300(Lcom/android/server/textservices/TextServicesManagerService;)Landroid/util/SparseArray;
+PLcom/android/server/textservices/TextServicesManagerService;->access$2300(Lcom/android/server/textservices/TextServicesManagerService;)Landroid/content/Context;
 HSPLcom/android/server/textservices/TextServicesManagerService;->access$900(Lcom/android/server/textservices/TextServicesManagerService;I)Landroid/view/textservice/SpellCheckerInfo;
 PLcom/android/server/textservices/TextServicesManagerService;->bindCurrentSpellCheckerService(Landroid/content/Intent;Landroid/content/ServiceConnection;II)Z
 PLcom/android/server/textservices/TextServicesManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/textservices/TextServicesManagerService;->finishSpellCheckerService(ILcom/android/internal/textservice/ISpellCheckerSessionListener;)V
-PLcom/android/server/textservices/TextServicesManagerService;->getCurrentSpellChecker(ILjava/lang/String;)Landroid/view/textservice/SpellCheckerInfo;
+PLcom/android/server/textservices/TextServicesManagerService;->findAvailSystemSpellCheckerLocked(Ljava/lang/String;Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)Landroid/view/textservice/SpellCheckerInfo;
+HPLcom/android/server/textservices/TextServicesManagerService;->finishSpellCheckerService(ILcom/android/internal/textservice/ISpellCheckerSessionListener;)V
+HPLcom/android/server/textservices/TextServicesManagerService;->getCurrentSpellChecker(ILjava/lang/String;)Landroid/view/textservice/SpellCheckerInfo;
 HSPLcom/android/server/textservices/TextServicesManagerService;->getCurrentSpellCheckerForUser(I)Landroid/view/textservice/SpellCheckerInfo;
-PLcom/android/server/textservices/TextServicesManagerService;->getCurrentSpellCheckerSubtype(IZ)Landroid/view/textservice/SpellCheckerSubtype;
-PLcom/android/server/textservices/TextServicesManagerService;->getSpellCheckerService(ILjava/lang/String;Ljava/lang/String;Lcom/android/internal/textservice/ITextServicesSessionListener;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;)V
+HPLcom/android/server/textservices/TextServicesManagerService;->getCurrentSpellCheckerSubtype(IZ)Landroid/view/textservice/SpellCheckerSubtype;
+HPLcom/android/server/textservices/TextServicesManagerService;->getDataFromCallingUserIdLocked(I)Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;
+HPLcom/android/server/textservices/TextServicesManagerService;->getSpellCheckerService(ILjava/lang/String;Ljava/lang/String;Lcom/android/internal/textservice/ITextServicesSessionListener;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;)V
 PLcom/android/server/textservices/TextServicesManagerService;->initializeInternalStateLocked(I)V
-PLcom/android/server/textservices/TextServicesManagerService;->isSpellCheckerEnabled(I)Z
+HPLcom/android/server/textservices/TextServicesManagerService;->isSpellCheckerEnabled(I)Z
+PLcom/android/server/textservices/TextServicesManagerService;->onStopUser(I)V
 PLcom/android/server/textservices/TextServicesManagerService;->onUnlockUser(I)V
+PLcom/android/server/textservices/TextServicesManagerService;->setCurrentSpellCheckerLocked(Landroid/view/textservice/SpellCheckerInfo;Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)V
 PLcom/android/server/textservices/TextServicesManagerService;->startSpellCheckerServiceInnerLocked(Landroid/view/textservice/SpellCheckerInfo;Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;
-PLcom/android/server/textservices/TextServicesManagerService;->verifyUser(I)V
+PLcom/android/server/textservices/TextServicesManagerService;->unbindServiceLocked(Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)V
+HPLcom/android/server/textservices/TextServicesManagerService;->verifyUser(I)V
+HPLcom/android/server/timedetector/-$$Lambda$TimeDetectorService$CIVCmMHYHAlLayNvm792RTW8F3U;-><init>(Lcom/android/server/timedetector/TimeDetectorService;Landroid/app/timedetector/PhoneTimeSuggestion;)V
+HPLcom/android/server/timedetector/-$$Lambda$TimeDetectorService$CIVCmMHYHAlLayNvm792RTW8F3U;->run()V
+PLcom/android/server/timedetector/-$$Lambda$TimeDetectorService$nU2ruOeSUWWPVvB4A7i7qaumT4s;-><init>(Lcom/android/server/timedetector/TimeDetectorService;Landroid/app/timedetector/NetworkTimeSuggestion;)V
+PLcom/android/server/timedetector/-$$Lambda$TimeDetectorService$nU2ruOeSUWWPVvB4A7i7qaumT4s;->run()V
+PLcom/android/server/timedetector/-$$Lambda$lkjIbFi2SczFhCGbzNmkRxmPS0M;-><init>(Lcom/android/server/timedetector/TimeDetectorStrategy;)V
+PLcom/android/server/timedetector/-$$Lambda$lkjIbFi2SczFhCGbzNmkRxmPS0M;->run()V
 HSPLcom/android/server/timedetector/TimeDetectorService$1;-><init>(Landroid/os/Handler;Lcom/android/server/timedetector/TimeDetectorService;)V
+PLcom/android/server/timedetector/TimeDetectorService$1;->onChange(Z)V
 HSPLcom/android/server/timedetector/TimeDetectorService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/timedetector/TimeDetectorService$Lifecycle;->onStart()V
 HSPLcom/android/server/timedetector/TimeDetectorService;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/timedetector/TimeDetectorStrategy;)V
 HSPLcom/android/server/timedetector/TimeDetectorService;->access$000(Landroid/content/Context;)Lcom/android/server/timedetector/TimeDetectorService;
 HSPLcom/android/server/timedetector/TimeDetectorService;->create(Landroid/content/Context;)Lcom/android/server/timedetector/TimeDetectorService;
 PLcom/android/server/timedetector/TimeDetectorService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/timedetector/TimeDetectorService;->enforceSuggestNetworkTimePermission()V
+HPLcom/android/server/timedetector/TimeDetectorService;->enforceSuggestPhoneTimePermission()V
+PLcom/android/server/timedetector/TimeDetectorService;->handleAutoTimeDetectionToggle()V
+PLcom/android/server/timedetector/TimeDetectorService;->lambda$suggestNetworkTime$2$TimeDetectorService(Landroid/app/timedetector/NetworkTimeSuggestion;)V
+PLcom/android/server/timedetector/TimeDetectorService;->lambda$suggestPhoneTime$0$TimeDetectorService(Landroid/app/timedetector/PhoneTimeSuggestion;)V
+PLcom/android/server/timedetector/TimeDetectorService;->suggestNetworkTime(Landroid/app/timedetector/NetworkTimeSuggestion;)V
+HPLcom/android/server/timedetector/TimeDetectorService;->suggestPhoneTime(Landroid/app/timedetector/PhoneTimeSuggestion;)V
+HPLcom/android/server/timedetector/TimeDetectorStrategy;->getTimeAt(Landroid/os/TimestampedValue;J)J
+PLcom/android/server/timedetector/TimeDetectorStrategy;->getTimeAt(Landroid/util/TimestampedValue;J)J
 HSPLcom/android/server/timedetector/TimeDetectorStrategyCallbackImpl;-><init>(Landroid/content/Context;)V
+HPLcom/android/server/timedetector/TimeDetectorStrategyCallbackImpl;->acquireWakeLock()V
+HPLcom/android/server/timedetector/TimeDetectorStrategyCallbackImpl;->checkWakeLockHeld()V
+HPLcom/android/server/timedetector/TimeDetectorStrategyCallbackImpl;->elapsedRealtimeMillis()J
+HPLcom/android/server/timedetector/TimeDetectorStrategyCallbackImpl;->isAutoTimeDetectionEnabled()Z
+HPLcom/android/server/timedetector/TimeDetectorStrategyCallbackImpl;->releaseWakeLock()V
+PLcom/android/server/timedetector/TimeDetectorStrategyCallbackImpl;->sendStickyBroadcast(Landroid/content/Intent;)V
+PLcom/android/server/timedetector/TimeDetectorStrategyCallbackImpl;->setSystemClock(J)V
+HPLcom/android/server/timedetector/TimeDetectorStrategyCallbackImpl;->systemClockMillis()J
+PLcom/android/server/timedetector/TimeDetectorStrategyCallbackImpl;->systemClockUpdateThresholdMillis()I
 HSPLcom/android/server/timedetector/TimeDetectorStrategyImpl;-><init>()V
+HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->doAutoTimeDetection(Ljava/lang/String;)V
 PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->dump(Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->findBestPhoneSuggestion()Landroid/app/timedetector/PhoneTimeSuggestion;
+PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->findLatestValidNetworkSuggestion()Landroid/app/timedetector/NetworkTimeSuggestion;
+PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->handleAutoTimeDetectionChanged()V
 HSPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->initialize(Lcom/android/server/timedetector/TimeDetectorStrategy$Callback;)V
+PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->isOriginAutomatic(I)Z
+PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->scorePhoneSuggestion(JLandroid/app/timedetector/PhoneTimeSuggestion;)I
+HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->setSystemClockIfRequired(ILandroid/os/TimestampedValue;Ljava/lang/String;)V
+PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->setSystemClockIfRequired(ILandroid/util/TimestampedValue;Ljava/lang/String;)V
+HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->setSystemClockUnderWakeLock(ILandroid/os/TimestampedValue;Ljava/lang/Object;)V
+PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->setSystemClockUnderWakeLock(ILandroid/util/TimestampedValue;Ljava/lang/Object;)V
+HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->suggestNetworkTime(Landroid/app/timedetector/NetworkTimeSuggestion;)V
+HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->suggestPhoneTime(Landroid/app/timedetector/PhoneTimeSuggestion;)V
+HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->validateAndStorePhoneSuggestion(Landroid/app/timedetector/PhoneTimeSuggestion;)Z
+PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->validateSuggestionTime(Landroid/os/TimestampedValue;Ljava/lang/Object;)Z
+PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->validateSuggestionTime(Landroid/util/TimestampedValue;Ljava/lang/Object;)Z
+PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->validateSuggestionUtcTime(JLandroid/os/TimestampedValue;)Z
+PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->validateSuggestionUtcTime(JLandroid/util/TimestampedValue;)Z
 PLcom/android/server/timezonedetector/-$$Lambda$TimeZoneDetectorService$9xvncY35tAcP2eoRcnDHHViAoZw;-><init>(Lcom/android/server/timezonedetector/TimeZoneDetectorService;Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;)V
 PLcom/android/server/timezonedetector/-$$Lambda$TimeZoneDetectorService$9xvncY35tAcP2eoRcnDHHViAoZw;->run()V
+PLcom/android/server/timezonedetector/-$$Lambda$TimeZoneDetectorService$UdeBqzyBZX1S4jHLM7d2cKvE_-U;-><init>(Lcom/android/server/timezonedetector/TimeZoneDetectorService;Landroid/app/timezonedetector/ManualTimeZoneSuggestion;)V
+PLcom/android/server/timezonedetector/-$$Lambda$TimeZoneDetectorService$UdeBqzyBZX1S4jHLM7d2cKvE_-U;->run()V
+HSPLcom/android/server/timezonedetector/ArrayMapWithHistory;-><init>(I)V
+PLcom/android/server/timezonedetector/ArrayMapWithHistory;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/timezonedetector/ArrayMapWithHistory;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/timezonedetector/ArrayMapWithHistory;->keyAt(I)Ljava/lang/Object;
+HPLcom/android/server/timezonedetector/ArrayMapWithHistory;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/timezonedetector/ArrayMapWithHistory;->size()I
+HPLcom/android/server/timezonedetector/ArrayMapWithHistory;->valueAt(I)Ljava/lang/Object;
+HSPLcom/android/server/timezonedetector/ReferenceWithHistory;-><init>(I)V
+HPLcom/android/server/timezonedetector/ReferenceWithHistory;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/timezonedetector/ReferenceWithHistory;->get()Ljava/lang/Object;
+HPLcom/android/server/timezonedetector/ReferenceWithHistory;->getHistoryCount()I
+HPLcom/android/server/timezonedetector/ReferenceWithHistory;->set(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/timezonedetector/ReferenceWithHistory;->toString()Ljava/lang/String;
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorCallbackImpl;-><init>(Landroid/content/Context;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorCallbackImpl;->getDeviceTimeZone()Ljava/lang/String;
-PLcom/android/server/timezonedetector/TimeZoneDetectorCallbackImpl;->isAutoTimeZoneDetectionEnabled()Z
-PLcom/android/server/timezonedetector/TimeZoneDetectorCallbackImpl;->isDeviceTimeZoneInitialized()Z
+HPLcom/android/server/timezonedetector/TimeZoneDetectorCallbackImpl;->isAutoTimeZoneDetectionEnabled()Z
+HPLcom/android/server/timezonedetector/TimeZoneDetectorCallbackImpl;->isDeviceTimeZoneInitialized()Z
+PLcom/android/server/timezonedetector/TimeZoneDetectorCallbackImpl;->setDeviceTimeZone(Ljava/lang/String;)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorService$1;-><init>(Landroid/os/Handler;Lcom/android/server/timezonedetector/TimeZoneDetectorService;)V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService$1;-><init>(Landroid/os/Handler;Lcom/android/server/timezonedetector/TimeZoneDetectorStrategy;)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorService$1;->onChange(Z)V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService$Lifecycle;->onStart()V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/timezonedetector/TimeZoneDetectorStrategy;)V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService;->access$000(Landroid/content/Context;)Lcom/android/server/timezonedetector/TimeZoneDetectorService;
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService;->create(Landroid/content/Context;)Lcom/android/server/timezonedetector/TimeZoneDetectorService;
 PLcom/android/server/timezonedetector/TimeZoneDetectorService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorService;->enforceSuggestManualTimeZonePermission()V
 PLcom/android/server/timezonedetector/TimeZoneDetectorService;->enforceSuggestPhoneTimeZonePermission()V
+PLcom/android/server/timezonedetector/TimeZoneDetectorService;->lambda$suggestManualTimeZone$0$TimeZoneDetectorService(Landroid/app/timezonedetector/ManualTimeZoneSuggestion;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorService;->lambda$suggestPhoneTimeZone$1$TimeZoneDetectorService(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;)V
-PLcom/android/server/timezonedetector/TimeZoneDetectorService;->suggestPhoneTimeZone(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorService;->suggestManualTimeZone(Landroid/app/timezonedetector/ManualTimeZoneSuggestion;)V
+HPLcom/android/server/timezonedetector/TimeZoneDetectorService;->suggestPhoneTimeZone(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategy$QualifiedPhoneTimeZoneSuggestion;-><init>(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;I)V
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategy$QualifiedPhoneTimeZoneSuggestion;->toString()Ljava/lang/String;
+HPLcom/android/server/timezonedetector/TimeZoneDetectorStrategy$QualifiedPhoneTimeZoneSuggestion;->toString()Ljava/lang/String;
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;-><init>(Lcom/android/server/timezonedetector/TimeZoneDetectorStrategy$Callback;)V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->create(Landroid/content/Context;)Lcom/android/server/timezonedetector/TimeZoneDetectorStrategy;
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->doAutoTimeZoneDetection(Ljava/lang/String;)V
+HPLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->doAutoTimeZoneDetection(Ljava/lang/String;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->dumpState(Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->findBestPhoneSuggestion()Lcom/android/server/timezonedetector/TimeZoneDetectorStrategy$QualifiedPhoneTimeZoneSuggestion;
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->handleAutoTimeZoneDetectionChange()V
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->isOriginAutomatic(I)Z
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->scorePhoneSuggestion(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;)I
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->setDeviceTimeZoneIfRequired(ILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->suggestPhoneTimeZone(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;)V
-PLcom/android/server/trust/-$$Lambda$TrustManagerService$1$98HKBkg-C1PLlz_Q1vJz1OJtw4c;-><clinit>()V
-PLcom/android/server/trust/-$$Lambda$TrustManagerService$1$98HKBkg-C1PLlz_Q1vJz1OJtw4c;-><init>()V
-PLcom/android/server/trust/-$$Lambda$TrustManagerService$1$98HKBkg-C1PLlz_Q1vJz1OJtw4c;->run()V
+HPLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->setDeviceTimeZoneIfRequired(ILjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->suggestManualTimeZone(Landroid/app/timezonedetector/ManualTimeZoneSuggestion;)V
+HPLcom/android/server/timezonedetector/TimeZoneDetectorStrategy;->suggestPhoneTimeZone(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl$QualifiedPhoneTimeZoneSuggestion;-><init>(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;I)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl$QualifiedPhoneTimeZoneSuggestion;->toString()Ljava/lang/String;
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;-><init>(Lcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl$Callback;)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->create(Landroid/content/Context;)Lcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->doAutoTimeZoneDetection(Ljava/lang/String;)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->findBestPhoneSuggestion()Lcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl$QualifiedPhoneTimeZoneSuggestion;
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->isOriginAutomatic(I)Z
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->scorePhoneSuggestion(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;)I
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->setDeviceTimeZoneIfRequired(ILjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->suggestPhoneTimeZone(Landroid/app/timezonedetector/PhoneTimeZoneSuggestion;)V
+HSPLcom/android/server/trust/-$$Lambda$TrustManagerService$1$98HKBkg-C1PLlz_Q1vJz1OJtw4c;-><clinit>()V
+HSPLcom/android/server/trust/-$$Lambda$TrustManagerService$1$98HKBkg-C1PLlz_Q1vJz1OJtw4c;-><init>()V
+HPLcom/android/server/trust/-$$Lambda$TrustManagerService$1$98HKBkg-C1PLlz_Q1vJz1OJtw4c;->run()V
 PLcom/android/server/trust/TrustAgentWrapper$1;-><init>(Lcom/android/server/trust/TrustAgentWrapper;)V
 PLcom/android/server/trust/TrustAgentWrapper$2;-><init>(Lcom/android/server/trust/TrustAgentWrapper;)V
 PLcom/android/server/trust/TrustAgentWrapper$2;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/trust/TrustAgentWrapper$3;-><init>(Lcom/android/server/trust/TrustAgentWrapper;)V
+PLcom/android/server/trust/TrustAgentWrapper$3;->grantTrust(Ljava/lang/CharSequence;JI)V
+PLcom/android/server/trust/TrustAgentWrapper$3;->revokeTrust()V
+PLcom/android/server/trust/TrustAgentWrapper$3;->setManagingTrust(Z)V
 PLcom/android/server/trust/TrustAgentWrapper$4;-><init>(Lcom/android/server/trust/TrustAgentWrapper;)V
 PLcom/android/server/trust/TrustAgentWrapper$4;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/trust/TrustAgentWrapper$4;->onServiceDisconnected(Landroid/content/ComponentName;)V
@@ -18236,9 +30632,10 @@
 PLcom/android/server/trust/TrustAgentWrapper;-><init>(Landroid/content/Context;Lcom/android/server/trust/TrustManagerService;Landroid/content/Intent;Landroid/os/UserHandle;)V
 PLcom/android/server/trust/TrustAgentWrapper;->access$000(Lcom/android/server/trust/TrustAgentWrapper;)Landroid/content/ComponentName;
 PLcom/android/server/trust/TrustAgentWrapper;->access$100(Lcom/android/server/trust/TrustAgentWrapper;)Landroid/os/Handler;
-PLcom/android/server/trust/TrustAgentWrapper;->access$1000(Lcom/android/server/trust/TrustAgentWrapper;)I
-PLcom/android/server/trust/TrustAgentWrapper;->access$1100(Lcom/android/server/trust/TrustAgentWrapper;)Lcom/android/server/trust/TrustManagerService;
+HPLcom/android/server/trust/TrustAgentWrapper;->access$1000(Lcom/android/server/trust/TrustAgentWrapper;)I
+HPLcom/android/server/trust/TrustAgentWrapper;->access$1100(Lcom/android/server/trust/TrustAgentWrapper;)Lcom/android/server/trust/TrustManagerService;
 PLcom/android/server/trust/TrustAgentWrapper;->access$1302(Lcom/android/server/trust/TrustAgentWrapper;Landroid/os/IBinder;)Landroid/os/IBinder;
+PLcom/android/server/trust/TrustAgentWrapper;->access$1500(Lcom/android/server/trust/TrustAgentWrapper;)Z
 PLcom/android/server/trust/TrustAgentWrapper;->access$1502(Lcom/android/server/trust/TrustAgentWrapper;Z)Z
 PLcom/android/server/trust/TrustAgentWrapper;->access$1602(Lcom/android/server/trust/TrustAgentWrapper;Landroid/service/trust/ITrustAgentService;)Landroid/service/trust/ITrustAgentService;
 PLcom/android/server/trust/TrustAgentWrapper;->access$1800(Lcom/android/server/trust/TrustAgentWrapper;)Landroid/service/trust/ITrustAgentServiceCallback;
@@ -18248,116 +30645,232 @@
 PLcom/android/server/trust/TrustAgentWrapper;->access$202(Lcom/android/server/trust/TrustAgentWrapper;Z)Z
 PLcom/android/server/trust/TrustAgentWrapper;->access$2100(Lcom/android/server/trust/TrustAgentWrapper;)Z
 PLcom/android/server/trust/TrustAgentWrapper;->access$2200(Lcom/android/server/trust/TrustAgentWrapper;)V
+PLcom/android/server/trust/TrustAgentWrapper;->access$300(Lcom/android/server/trust/TrustAgentWrapper;)Ljava/lang/CharSequence;
 PLcom/android/server/trust/TrustAgentWrapper;->access$302(Lcom/android/server/trust/TrustAgentWrapper;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 PLcom/android/server/trust/TrustAgentWrapper;->access$500()Z
 PLcom/android/server/trust/TrustAgentWrapper;->destroy()V
+PLcom/android/server/trust/TrustAgentWrapper;->getMessage()Ljava/lang/CharSequence;
+PLcom/android/server/trust/TrustAgentWrapper;->getScheduledRestartUptimeMillis()J
 PLcom/android/server/trust/TrustAgentWrapper;->isBound()Z
-PLcom/android/server/trust/TrustAgentWrapper;->isConnected()Z
+HPLcom/android/server/trust/TrustAgentWrapper;->isConnected()Z
 PLcom/android/server/trust/TrustAgentWrapper;->isManagingTrust()Z
 PLcom/android/server/trust/TrustAgentWrapper;->isTrusted()Z
-PLcom/android/server/trust/TrustAgentWrapper;->onDeviceLocked()V
-PLcom/android/server/trust/TrustAgentWrapper;->onDeviceUnlocked()V
+HPLcom/android/server/trust/TrustAgentWrapper;->onDeviceLocked()V
+HPLcom/android/server/trust/TrustAgentWrapper;->onDeviceUnlocked()V
+PLcom/android/server/trust/TrustAgentWrapper;->onError(Ljava/lang/Exception;)V
 PLcom/android/server/trust/TrustAgentWrapper;->onUnlockAttempt(Z)V
+PLcom/android/server/trust/TrustAgentWrapper;->onUnlockLockout(I)V
 PLcom/android/server/trust/TrustAgentWrapper;->scheduleRestart()V
 PLcom/android/server/trust/TrustAgentWrapper;->setCallback(Landroid/service/trust/ITrustAgentServiceCallback;)V
-PLcom/android/server/trust/TrustAgentWrapper;->updateDevicePolicyFeatures()Z
+HPLcom/android/server/trust/TrustAgentWrapper;->updateDevicePolicyFeatures()Z
 HPLcom/android/server/trust/TrustArchive$Event;-><init>(IILandroid/content/ComponentName;Ljava/lang/String;JIZ)V
 HPLcom/android/server/trust/TrustArchive$Event;-><init>(IILandroid/content/ComponentName;Ljava/lang/String;JIZLcom/android/server/trust/TrustArchive$1;)V
 HSPLcom/android/server/trust/TrustArchive;-><init>()V
-PLcom/android/server/trust/TrustArchive;->addEvent(Lcom/android/server/trust/TrustArchive$Event;)V
+HPLcom/android/server/trust/TrustArchive;->addEvent(Lcom/android/server/trust/TrustArchive$Event;)V
 PLcom/android/server/trust/TrustArchive;->dump(Ljava/io/PrintWriter;IILjava/lang/String;Z)V
+PLcom/android/server/trust/TrustArchive;->dumpGrantFlags(I)Ljava/lang/String;
 PLcom/android/server/trust/TrustArchive;->dumpType(I)Ljava/lang/String;
+PLcom/android/server/trust/TrustArchive;->formatDuration(J)Ljava/lang/String;
+PLcom/android/server/trust/TrustArchive;->formatElapsed(J)Ljava/lang/String;
+PLcom/android/server/trust/TrustArchive;->getSimpleName(Landroid/content/ComponentName;)Ljava/lang/String;
 PLcom/android/server/trust/TrustArchive;->logAgentConnected(ILandroid/content/ComponentName;)V
+PLcom/android/server/trust/TrustArchive;->logAgentDied(ILandroid/content/ComponentName;)V
+PLcom/android/server/trust/TrustArchive;->logAgentStopped(ILandroid/content/ComponentName;)V
+HPLcom/android/server/trust/TrustArchive;->logDevicePolicyChanged()V
+PLcom/android/server/trust/TrustArchive;->logGrantTrust(ILandroid/content/ComponentName;Ljava/lang/String;JI)V
+PLcom/android/server/trust/TrustArchive;->logManagingTrust(ILandroid/content/ComponentName;Z)V
+PLcom/android/server/trust/TrustArchive;->logRevokeTrust(ILandroid/content/ComponentName;)V
 PLcom/android/server/trust/TrustManagerService$1$1;-><init>(Lcom/android/server/trust/TrustManagerService$1;Ljava/io/PrintWriter;Ljava/util/List;)V
 PLcom/android/server/trust/TrustManagerService$1$1;->run()V
 HSPLcom/android/server/trust/TrustManagerService$1;-><init>(Lcom/android/server/trust/TrustManagerService;)V
-PLcom/android/server/trust/TrustManagerService$1;->clearAllBiometricRecognized(Landroid/hardware/biometrics/BiometricSourceType;)V
+PLcom/android/server/trust/TrustManagerService$1;->access$900(Lcom/android/server/trust/TrustManagerService$1;Ljava/io/PrintWriter;Landroid/content/pm/UserInfo;Z)V
+HPLcom/android/server/trust/TrustManagerService$1;->clearAllBiometricRecognized(Landroid/hardware/biometrics/BiometricSourceType;)V
 PLcom/android/server/trust/TrustManagerService$1;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/trust/TrustManagerService$1;->dumpBool(Z)Ljava/lang/String;
+PLcom/android/server/trust/TrustManagerService$1;->dumpHex(I)Ljava/lang/String;
 PLcom/android/server/trust/TrustManagerService$1;->dumpUser(Ljava/io/PrintWriter;Landroid/content/pm/UserInfo;Z)V
 HSPLcom/android/server/trust/TrustManagerService$1;->enforceListenerPermission()V
-PLcom/android/server/trust/TrustManagerService$1;->enforceReportPermission()V
-PLcom/android/server/trust/TrustManagerService$1;->isDeviceLocked(I)Z
+HSPLcom/android/server/trust/TrustManagerService$1;->enforceReportPermission()V
+HPLcom/android/server/trust/TrustManagerService$1;->isDeviceLocked(I)Z
 HPLcom/android/server/trust/TrustManagerService$1;->isDeviceSecure(I)Z
 HSPLcom/android/server/trust/TrustManagerService$1;->isTrustUsuallyManaged(I)Z
 PLcom/android/server/trust/TrustManagerService$1;->lambda$reportKeyguardShowingChanged$0()V
 HSPLcom/android/server/trust/TrustManagerService$1;->registerTrustListener(Landroid/app/trust/ITrustListener;)V
-PLcom/android/server/trust/TrustManagerService$1;->reportKeyguardShowingChanged()V
-PLcom/android/server/trust/TrustManagerService$1;->reportUnlockAttempt(ZI)V
-PLcom/android/server/trust/TrustManagerService$1;->unlockedByBiometricForUser(ILandroid/hardware/biometrics/BiometricSourceType;)V
+PLcom/android/server/trust/TrustManagerService$1;->reportEnabledTrustAgentsChanged(I)V
+HSPLcom/android/server/trust/TrustManagerService$1;->reportKeyguardShowingChanged()V
+HPLcom/android/server/trust/TrustManagerService$1;->reportUnlockAttempt(ZI)V
+PLcom/android/server/trust/TrustManagerService$1;->reportUnlockLockout(II)V
+PLcom/android/server/trust/TrustManagerService$1;->setDeviceLockedForUser(IZ)V
+HPLcom/android/server/trust/TrustManagerService$1;->unlockedByBiometricForUser(ILandroid/hardware/biometrics/BiometricSourceType;)V
 HSPLcom/android/server/trust/TrustManagerService$2;-><init>(Lcom/android/server/trust/TrustManagerService;)V
-PLcom/android/server/trust/TrustManagerService$2;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/trust/TrustManagerService$2;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/trust/TrustManagerService$3;-><init>(Lcom/android/server/trust/TrustManagerService;)V
-PLcom/android/server/trust/TrustManagerService$3;->onPackageChanged(Ljava/lang/String;I[Ljava/lang/String;)Z
+HPLcom/android/server/trust/TrustManagerService$3;->onPackageChanged(Ljava/lang/String;I[Ljava/lang/String;)Z
 PLcom/android/server/trust/TrustManagerService$3;->onPackageDisappeared(Ljava/lang/String;I)V
-PLcom/android/server/trust/TrustManagerService$3;->onSomePackagesChanged()V
+HPLcom/android/server/trust/TrustManagerService$3;->onSomePackagesChanged()V
 HSPLcom/android/server/trust/TrustManagerService$AgentInfo;-><init>()V
 HSPLcom/android/server/trust/TrustManagerService$AgentInfo;-><init>(Lcom/android/server/trust/TrustManagerService$1;)V
-PLcom/android/server/trust/TrustManagerService$AgentInfo;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/trust/TrustManagerService$AgentInfo;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/server/trust/TrustManagerService$AgentInfo;->hashCode()I
 HSPLcom/android/server/trust/TrustManagerService$Receiver;-><init>(Lcom/android/server/trust/TrustManagerService;)V
 HSPLcom/android/server/trust/TrustManagerService$Receiver;-><init>(Lcom/android/server/trust/TrustManagerService;Lcom/android/server/trust/TrustManagerService$1;)V
-HPLcom/android/server/trust/TrustManagerService$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/trust/TrustManagerService$Receiver;->getUserId(Landroid/content/Intent;)I
+HSPLcom/android/server/trust/TrustManagerService$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/trust/TrustManagerService$Receiver;->register(Landroid/content/Context;)V
 HSPLcom/android/server/trust/TrustManagerService$SettingsAttrs;-><init>(Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/trust/TrustManagerService$SettingsObserver;-><init>(Lcom/android/server/trust/TrustManagerService;Landroid/os/Handler;)V
-PLcom/android/server/trust/TrustManagerService$SettingsObserver;->getTrustAgentsExtendUnlock()Z
+PLcom/android/server/trust/TrustManagerService$SettingsObserver;->getLockWhenTrustLost()Z
+HSPLcom/android/server/trust/TrustManagerService$SettingsObserver;->getTrustAgentsExtendUnlock()Z
 HSPLcom/android/server/trust/TrustManagerService$SettingsObserver;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/trust/TrustManagerService$SettingsObserver;->updateContentObserver()V
 HSPLcom/android/server/trust/TrustManagerService$StrongAuthTracker;-><init>(Lcom/android/server/trust/TrustManagerService;Landroid/content/Context;)V
 PLcom/android/server/trust/TrustManagerService$StrongAuthTracker;->allowTrustFromUnlock(I)V
-PLcom/android/server/trust/TrustManagerService$StrongAuthTracker;->canAgentsRunForUser(I)Z
+HPLcom/android/server/trust/TrustManagerService$StrongAuthTracker;->canAgentsRunForUser(I)Z
 PLcom/android/server/trust/TrustManagerService$StrongAuthTracker;->onStrongAuthRequiredChanged(I)V
+PLcom/android/server/trust/TrustManagerService$TrustTimeoutAlarmListener;-><init>(Lcom/android/server/trust/TrustManagerService;I)V
+PLcom/android/server/trust/TrustManagerService$TrustTimeoutAlarmListener;->isQueued()Z
+PLcom/android/server/trust/TrustManagerService$TrustTimeoutAlarmListener;->onAlarm()V
+PLcom/android/server/trust/TrustManagerService$TrustTimeoutAlarmListener;->setQueued(Z)V
 HSPLcom/android/server/trust/TrustManagerService;-><clinit>()V
 HSPLcom/android/server/trust/TrustManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/trust/TrustManagerService;->access$100(Lcom/android/server/trust/TrustManagerService;)I
+PLcom/android/server/trust/TrustManagerService;->access$1000(Lcom/android/server/trust/TrustManagerService;I)Z
+PLcom/android/server/trust/TrustManagerService;->access$1100(Lcom/android/server/trust/TrustManagerService;I)Z
+PLcom/android/server/trust/TrustManagerService;->access$1200(Lcom/android/server/trust/TrustManagerService;)Lcom/android/server/trust/TrustManagerService$StrongAuthTracker;
+PLcom/android/server/trust/TrustManagerService;->access$1300(Lcom/android/server/trust/TrustManagerService;)Landroid/util/ArraySet;
+PLcom/android/server/trust/TrustManagerService;->access$1400(Lcom/android/server/trust/TrustManagerService;)Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/trust/TrustManagerService;->access$1500(Lcom/android/server/trust/TrustManagerService;I)Z
 PLcom/android/server/trust/TrustManagerService;->access$1600(Lcom/android/server/trust/TrustManagerService;)Landroid/util/SparseBooleanArray;
-PLcom/android/server/trust/TrustManagerService;->access$1800(Lcom/android/server/trust/TrustManagerService;Landroid/app/trust/ITrustListener;)V
+PLcom/android/server/trust/TrustManagerService;->access$1700(Lcom/android/server/trust/TrustManagerService;)Lcom/android/server/trust/TrustManagerService$SettingsObserver;
+HSPLcom/android/server/trust/TrustManagerService;->access$1800(Lcom/android/server/trust/TrustManagerService;Landroid/app/trust/ITrustListener;)V
 PLcom/android/server/trust/TrustManagerService;->access$2000(Lcom/android/server/trust/TrustManagerService;ZI)V
-PLcom/android/server/trust/TrustManagerService;->access$2200(Lcom/android/server/trust/TrustManagerService;I)V
+PLcom/android/server/trust/TrustManagerService;->access$2100(Lcom/android/server/trust/TrustManagerService;II)V
+HPLcom/android/server/trust/TrustManagerService;->access$2200(Lcom/android/server/trust/TrustManagerService;I)V
+PLcom/android/server/trust/TrustManagerService;->access$2300(Lcom/android/server/trust/TrustManagerService;IZ)V
+PLcom/android/server/trust/TrustManagerService;->access$2400(Lcom/android/server/trust/TrustManagerService;)Landroid/util/SparseBooleanArray;
+PLcom/android/server/trust/TrustManagerService;->access$2500(Lcom/android/server/trust/TrustManagerService;IIZ)V
+PLcom/android/server/trust/TrustManagerService;->access$2600(Lcom/android/server/trust/TrustManagerService;II)V
+PLcom/android/server/trust/TrustManagerService;->access$2700(Lcom/android/server/trust/TrustManagerService;Ljava/lang/String;)V
+PLcom/android/server/trust/TrustManagerService;->access$2800(Lcom/android/server/trust/TrustManagerService;Lcom/android/internal/widget/LockPatternUtils;I)V
+PLcom/android/server/trust/TrustManagerService;->access$2900(Lcom/android/server/trust/TrustManagerService;)Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/trust/TrustManagerService;->access$300(Lcom/android/server/trust/TrustManagerService;)Landroid/os/Handler;
-PLcom/android/server/trust/TrustManagerService;->access$400(Lcom/android/server/trust/TrustManagerService;)Lcom/android/internal/widget/LockPatternUtils;
-PLcom/android/server/trust/TrustManagerService;->access$500(Lcom/android/server/trust/TrustManagerService;I)I
+PLcom/android/server/trust/TrustManagerService;->access$3000(Lcom/android/server/trust/TrustManagerService;)Landroid/util/ArrayMap;
+PLcom/android/server/trust/TrustManagerService;->access$3100(Lcom/android/server/trust/TrustManagerService;)Landroid/app/AlarmManager;
+PLcom/android/server/trust/TrustManagerService;->access$3200(Lcom/android/server/trust/TrustManagerService;I)V
+HPLcom/android/server/trust/TrustManagerService;->access$400(Lcom/android/server/trust/TrustManagerService;)Lcom/android/internal/widget/LockPatternUtils;
+HPLcom/android/server/trust/TrustManagerService;->access$500(Lcom/android/server/trust/TrustManagerService;I)I
 HSPLcom/android/server/trust/TrustManagerService;->access$600(Lcom/android/server/trust/TrustManagerService;)Landroid/content/Context;
-PLcom/android/server/trust/TrustManagerService;->addListener(Landroid/app/trust/ITrustListener;)V
-PLcom/android/server/trust/TrustManagerService;->aggregateIsTrustManaged(I)Z
+PLcom/android/server/trust/TrustManagerService;->access$700(Lcom/android/server/trust/TrustManagerService;)Z
+PLcom/android/server/trust/TrustManagerService;->access$800(Lcom/android/server/trust/TrustManagerService;)Landroid/os/UserManager;
+HSPLcom/android/server/trust/TrustManagerService;->addListener(Landroid/app/trust/ITrustListener;)V
+HSPLcom/android/server/trust/TrustManagerService;->aggregateIsTrustManaged(I)Z
 HSPLcom/android/server/trust/TrustManagerService;->aggregateIsTrusted(I)Z
-PLcom/android/server/trust/TrustManagerService;->dispatchDeviceLocked(IZ)V
-PLcom/android/server/trust/TrustManagerService;->dispatchOnTrustChanged(ZII)V
-PLcom/android/server/trust/TrustManagerService;->dispatchOnTrustManagedChanged(ZI)V
-PLcom/android/server/trust/TrustManagerService;->dispatchUnlockAttempt(ZI)V
+HPLcom/android/server/trust/TrustManagerService;->dispatchDeviceLocked(IZ)V
+HSPLcom/android/server/trust/TrustManagerService;->dispatchOnTrustChanged(ZII)V
+HSPLcom/android/server/trust/TrustManagerService;->dispatchOnTrustManagedChanged(ZI)V
+HPLcom/android/server/trust/TrustManagerService;->dispatchUnlockAttempt(ZI)V
+PLcom/android/server/trust/TrustManagerService;->dispatchUnlockLockout(II)V
 HSPLcom/android/server/trust/TrustManagerService;->getComponentName(Landroid/content/pm/ResolveInfo;)Landroid/content/ComponentName;
+PLcom/android/server/trust/TrustManagerService;->getDefaultFactoryTrustAgent(Landroid/content/Context;)Landroid/content/ComponentName;
 HSPLcom/android/server/trust/TrustManagerService;->getSettingsAttrs(Landroid/content/pm/PackageManager;Landroid/content/pm/ResolveInfo;)Lcom/android/server/trust/TrustManagerService$SettingsAttrs;
+PLcom/android/server/trust/TrustManagerService;->handleScheduleTrustTimeout(II)V
 HSPLcom/android/server/trust/TrustManagerService;->isDeviceLockedInner(I)Z
 HSPLcom/android/server/trust/TrustManagerService;->isTrustUsuallyManagedInternal(I)Z
 PLcom/android/server/trust/TrustManagerService;->maybeEnableFactoryTrustAgents(Lcom/android/internal/widget/LockPatternUtils;I)V
+PLcom/android/server/trust/TrustManagerService;->maybeLockScreen(I)V
 HSPLcom/android/server/trust/TrustManagerService;->onBootPhase(I)V
+PLcom/android/server/trust/TrustManagerService;->onCleanupUser(I)V
 HSPLcom/android/server/trust/TrustManagerService;->onStart()V
-PLcom/android/server/trust/TrustManagerService;->onStartUser(I)V
+HSPLcom/android/server/trust/TrustManagerService;->onStartUser(I)V
+PLcom/android/server/trust/TrustManagerService;->onStopUser(I)V
 PLcom/android/server/trust/TrustManagerService;->onUnlockUser(I)V
 HSPLcom/android/server/trust/TrustManagerService;->refreshAgentList(I)V
 HSPLcom/android/server/trust/TrustManagerService;->refreshDeviceLockedForUser(I)V
-PLcom/android/server/trust/TrustManagerService;->removeAgentsOfPackage(Ljava/lang/String;)V
+HPLcom/android/server/trust/TrustManagerService;->removeAgentsOfPackage(Ljava/lang/String;)V
+PLcom/android/server/trust/TrustManagerService;->resetAgent(Landroid/content/ComponentName;I)V
 HSPLcom/android/server/trust/TrustManagerService;->resolveAllowedTrustAgents(Landroid/content/pm/PackageManager;I)Ljava/util/List;
 HPLcom/android/server/trust/TrustManagerService;->resolveProfileParent(I)I
+PLcom/android/server/trust/TrustManagerService;->scheduleTrustTimeout(IZ)V
 HSPLcom/android/server/trust/TrustManagerService;->setDeviceLockedForUser(IZ)V
-HPLcom/android/server/trust/TrustManagerService;->updateDevicePolicyFeatures()V
-PLcom/android/server/trust/TrustManagerService;->updateTrust(II)V
-PLcom/android/server/trust/TrustManagerService;->updateTrust(IIZ)V
-PLcom/android/server/trust/TrustManagerService;->updateTrustAll()V
+HSPLcom/android/server/trust/TrustManagerService;->updateDevicePolicyFeatures()V
+HSPLcom/android/server/trust/TrustManagerService;->updateTrust(II)V
+HSPLcom/android/server/trust/TrustManagerService;->updateTrust(IIZ)V
+HSPLcom/android/server/trust/TrustManagerService;->updateTrustAll()V
+PLcom/android/server/trust/TrustManagerService;->updateTrustUsuallyManaged(IZ)V
 HSPLcom/android/server/tv/TvInputHal;-><clinit>()V
+PLcom/android/server/twilight/-$$Lambda$QlMS1hfADW-S9aqM_RavcEKO3N0;-><init>(Lcom/android/server/twilight/TwilightService;)V
+PLcom/android/server/twilight/-$$Lambda$QlMS1hfADW-S9aqM_RavcEKO3N0;->accept(Ljava/lang/Object;)V
+PLcom/android/server/twilight/-$$Lambda$TwilightService$stdw4-ZXNiEaXmDt9g9s8D1zEQU;-><init>(Lcom/android/server/twilight/TwilightListener;Lcom/android/server/twilight/TwilightState;)V
+PLcom/android/server/twilight/-$$Lambda$TwilightService$stdw4-ZXNiEaXmDt9g9s8D1zEQU;->run()V
 HSPLcom/android/server/twilight/TwilightService$1;-><init>(Lcom/android/server/twilight/TwilightService;)V
 HSPLcom/android/server/twilight/TwilightService$1;->getLastTwilightState()Lcom/android/server/twilight/TwilightState;
+HSPLcom/android/server/twilight/TwilightService$1;->registerListener(Lcom/android/server/twilight/TwilightListener;Landroid/os/Handler;)V
 HSPLcom/android/server/twilight/TwilightService$1;->unregisterListener(Lcom/android/server/twilight/TwilightListener;)V
+PLcom/android/server/twilight/TwilightService$2;-><init>(Lcom/android/server/twilight/TwilightService;)V
+PLcom/android/server/twilight/TwilightService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/twilight/TwilightService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/twilight/TwilightService;->access$000(Lcom/android/server/twilight/TwilightService;)Landroid/util/ArrayMap;
+HSPLcom/android/server/twilight/TwilightService;->access$100(Lcom/android/server/twilight/TwilightService;)Landroid/os/Handler;
+PLcom/android/server/twilight/TwilightService;->access$200(Lcom/android/server/twilight/TwilightService;)V
+PLcom/android/server/twilight/TwilightService;->calculateTwilightState(Landroid/location/Location;J)Lcom/android/server/twilight/TwilightState;
+PLcom/android/server/twilight/TwilightService;->handleMessage(Landroid/os/Message;)Z
+PLcom/android/server/twilight/TwilightService;->lambda$updateTwilightState$0(Lcom/android/server/twilight/TwilightListener;Lcom/android/server/twilight/TwilightState;)V
+PLcom/android/server/twilight/TwilightService;->onAlarm()V
 HSPLcom/android/server/twilight/TwilightService;->onBootPhase(I)V
+HPLcom/android/server/twilight/TwilightService;->onLocationChanged(Landroid/location/Location;)V
+PLcom/android/server/twilight/TwilightService;->onProviderDisabled(Ljava/lang/String;)V
+PLcom/android/server/twilight/TwilightService;->onProviderEnabled(Ljava/lang/String;)V
 HSPLcom/android/server/twilight/TwilightService;->onStart()V
-PLcom/android/server/uri/GrantUri;-><init>(ILandroid/net/Uri;Z)V
-PLcom/android/server/uri/GrantUri;->equals(Ljava/lang/Object;)Z
-PLcom/android/server/uri/GrantUri;->hashCode()I
-PLcom/android/server/uri/GrantUri;->resolve(ILandroid/net/Uri;)Lcom/android/server/uri/GrantUri;
-PLcom/android/server/uri/GrantUri;->toString()Ljava/lang/String;
+PLcom/android/server/twilight/TwilightService;->startListening()V
+PLcom/android/server/twilight/TwilightService;->stopListening()V
+HPLcom/android/server/twilight/TwilightService;->updateTwilightState()V
+PLcom/android/server/twilight/TwilightState;-><init>(JJ)V
+PLcom/android/server/twilight/TwilightState;->equals(Lcom/android/server/twilight/TwilightState;)Z
+PLcom/android/server/twilight/TwilightState;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/twilight/TwilightState;->isNight()Z
+PLcom/android/server/twilight/TwilightState;->sunrise()Ljava/time/LocalDateTime;
+PLcom/android/server/twilight/TwilightState;->sunriseTimeMillis()J
+PLcom/android/server/twilight/TwilightState;->sunset()Ljava/time/LocalDateTime;
+PLcom/android/server/twilight/TwilightState;->sunsetTimeMillis()J
+PLcom/android/server/twilight/TwilightState;->toString()Ljava/lang/String;
+PLcom/android/server/updates/CertPinInstallReceiver;-><init>()V
+PLcom/android/server/updates/ConfigUpdateInstallReceiver$1;-><init>(Lcom/android/server/updates/ConfigUpdateInstallReceiver;Landroid/content/Intent;Landroid/content/Context;)V
+PLcom/android/server/updates/ConfigUpdateInstallReceiver$1;->run()V
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->access$000(Lcom/android/server/updates/ConfigUpdateInstallReceiver;Landroid/content/Intent;)I
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->access$100(Lcom/android/server/updates/ConfigUpdateInstallReceiver;Landroid/content/Intent;)Ljava/lang/String;
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->access$200(Lcom/android/server/updates/ConfigUpdateInstallReceiver;)I
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->access$300(Lcom/android/server/updates/ConfigUpdateInstallReceiver;)[B
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->access$400([B)Ljava/lang/String;
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->access$500(Lcom/android/server/updates/ConfigUpdateInstallReceiver;Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->access$600(Lcom/android/server/updates/ConfigUpdateInstallReceiver;Landroid/content/Context;Landroid/content/Intent;)Ljava/io/BufferedInputStream;
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->getAltContent(Landroid/content/Context;Landroid/content/Intent;)Ljava/io/BufferedInputStream;
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->getContentFromIntent(Landroid/content/Intent;)Landroid/net/Uri;
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->getCurrentContent()[B
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->getCurrentHash([B)Ljava/lang/String;
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->getCurrentVersion()I
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->getRequiredHashFromIntent(Landroid/content/Intent;)Ljava/lang/String;
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->getVersionFromIntent(Landroid/content/Intent;)I
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->install(Ljava/io/InputStream;I)V
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->postInstall(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->verifyPreviousHash(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/updates/ConfigUpdateInstallReceiver;->verifyVersion(II)Z
+HPLcom/android/server/updates/ConfigUpdateInstallReceiver;->writeUpdate(Ljava/io/File;Ljava/io/File;Ljava/io/InputStream;)V
+PLcom/android/server/updates/ConversationActionsInstallReceiver;-><init>()V
+PLcom/android/server/updates/ConversationActionsInstallReceiver;->verifyVersion(II)Z
+PLcom/android/server/updates/EmergencyNumberDbInstallReceiver;-><init>()V
+PLcom/android/server/updates/LangIdInstallReceiver;-><init>()V
+PLcom/android/server/updates/LangIdInstallReceiver;->verifyVersion(II)Z
+PLcom/android/server/updates/SmartSelectionInstallReceiver;-><init>()V
+PLcom/android/server/updates/SmartSelectionInstallReceiver;->verifyVersion(II)Z
+PLcom/android/server/updates/SmsShortCodesInstallReceiver;-><init>()V
+HSPLcom/android/server/uri/GrantUri;-><init>(ILandroid/net/Uri;Z)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;)Lcom/android/server/uri/GrantUri;
+PLcom/android/server/uri/GrantUri;->toSafeString()Ljava/lang/String;
+HPLcom/android/server/uri/GrantUri;->toString()Ljava/lang/String;
 PLcom/android/server/uri/NeededUriGrants;-><init>(Ljava/lang/String;II)V
 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
@@ -18366,99 +30879,178 @@
 HPLcom/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(ILjava/lang/String;Landroid/content/Intent;ILcom/android/server/uri/NeededUriGrants;I)Lcom/android/server/uri/NeededUriGrants;
-PLcom/android/server/uri/UriGrantsManagerService$LocalService;->checkUriPermission(Lcom/android/server/uri/GrantUri;II)Z
-PLcom/android/server/uri/UriGrantsManagerService$LocalService;->dump(Ljava/io/PrintWriter;ZLjava/lang/String;)V
-PLcom/android/server/uri/UriGrantsManagerService$LocalService;->grantUriPermission(ILjava/lang/String;Lcom/android/server/uri/GrantUri;ILcom/android/server/uri/UriPermissionOwner;I)V
-PLcom/android/server/uri/UriGrantsManagerService$LocalService;->grantUriPermissionFromIntent(ILjava/lang/String;Landroid/content/Intent;Lcom/android/server/uri/UriPermissionOwner;I)V
+HPLcom/android/server/uri/UriGrantsManagerService$LocalService;->checkUriPermission(Lcom/android/server/uri/GrantUri;II)Z
+HPLcom/android/server/uri/UriGrantsManagerService$LocalService;->dump(Ljava/io/PrintWriter;ZLjava/lang/String;)V
+HPLcom/android/server/uri/UriGrantsManagerService$LocalService;->grantUriPermission(ILjava/lang/String;Lcom/android/server/uri/GrantUri;ILcom/android/server/uri/UriPermissionOwner;I)V
+PLcom/android/server/uri/UriGrantsManagerService$LocalService;->grantUriPermissionFromIntent(ILjava/lang/String;Landroid/content/Intent;I)V
+HSPLcom/android/server/uri/UriGrantsManagerService$LocalService;->grantUriPermissionFromIntent(ILjava/lang/String;Landroid/content/Intent;Lcom/android/server/uri/UriPermissionOwner;I)V
+PLcom/android/server/uri/UriGrantsManagerService$LocalService;->grantUriPermissionUncheckedFromIntent(Lcom/android/server/uri/NeededUriGrants;Lcom/android/server/uri/UriPermissionOwner;)V
 HSPLcom/android/server/uri/UriGrantsManagerService$LocalService;->newUriPermissionOwner(Ljava/lang/String;)Landroid/os/IBinder;
 HSPLcom/android/server/uri/UriGrantsManagerService$LocalService;->onActivityManagerInternalAdded()V
 HSPLcom/android/server/uri/UriGrantsManagerService$LocalService;->onSystemReady()V
-PLcom/android/server/uri/UriGrantsManagerService$LocalService;->removeUriPermissionIfNeeded(Lcom/android/server/uri/UriPermission;)V
-PLcom/android/server/uri/UriGrantsManagerService$LocalService;->removeUriPermissionsForPackage(Ljava/lang/String;IZZ)V
-PLcom/android/server/uri/UriGrantsManagerService$LocalService;->revokeUriPermission(Ljava/lang/String;ILcom/android/server/uri/GrantUri;I)V
-PLcom/android/server/uri/UriGrantsManagerService$LocalService;->revokeUriPermissionFromOwner(Landroid/os/IBinder;Landroid/net/Uri;II)V
+HPLcom/android/server/uri/UriGrantsManagerService$LocalService;->removeUriPermissionIfNeeded(Lcom/android/server/uri/UriPermission;)V
+HPLcom/android/server/uri/UriGrantsManagerService$LocalService;->removeUriPermissionsForPackage(Ljava/lang/String;IZZ)V
+HPLcom/android/server/uri/UriGrantsManagerService$LocalService;->revokeUriPermission(Ljava/lang/String;ILcom/android/server/uri/GrantUri;I)V
+HPLcom/android/server/uri/UriGrantsManagerService$LocalService;->revokeUriPermissionFromOwner(Landroid/os/IBinder;Landroid/net/Uri;II)V
 HSPLcom/android/server/uri/UriGrantsManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/uri/UriGrantsManagerService;-><init>(Landroid/content/Context;Lcom/android/server/uri/UriGrantsManagerService$1;)V
 HSPLcom/android/server/uri/UriGrantsManagerService;->access$100(Lcom/android/server/uri/UriGrantsManagerService;)V
 HSPLcom/android/server/uri/UriGrantsManagerService;->access$300(Lcom/android/server/uri/UriGrantsManagerService;)Ljava/lang/Object;
+PLcom/android/server/uri/UriGrantsManagerService;->access$400(Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriPermission;)V
 HSPLcom/android/server/uri/UriGrantsManagerService;->access$500(Lcom/android/server/uri/UriGrantsManagerService;Ljava/lang/String;)V
+PLcom/android/server/uri/UriGrantsManagerService;->access$600(Lcom/android/server/uri/UriGrantsManagerService;)Landroid/util/SparseArray;
 HPLcom/android/server/uri/UriGrantsManagerService;->checkAuthorityGrants(ILandroid/content/pm/ProviderInfo;IZ)Z
-PLcom/android/server/uri/UriGrantsManagerService;->checkGrantUriPermission(ILjava/lang/String;Landroid/net/Uri;II)I
+HPLcom/android/server/uri/UriGrantsManagerService;->checkGrantUriPermission(ILjava/lang/String;Landroid/net/Uri;II)I
 HPLcom/android/server/uri/UriGrantsManagerService;->checkGrantUriPermission(ILjava/lang/String;Lcom/android/server/uri/GrantUri;II)I
 HSPLcom/android/server/uri/UriGrantsManagerService;->checkGrantUriPermissionFromIntent(ILjava/lang/String;Landroid/content/Intent;ILcom/android/server/uri/NeededUriGrants;I)Lcom/android/server/uri/NeededUriGrants;
-PLcom/android/server/uri/UriGrantsManagerService;->checkHoldingPermissions(Landroid/content/pm/IPackageManager;Landroid/content/pm/ProviderInfo;Lcom/android/server/uri/GrantUri;II)Z
+HPLcom/android/server/uri/UriGrantsManagerService;->checkHoldingPermissions(Landroid/content/pm/IPackageManager;Landroid/content/pm/ProviderInfo;Lcom/android/server/uri/GrantUri;II)Z
 HPLcom/android/server/uri/UriGrantsManagerService;->checkHoldingPermissionsInternal(Landroid/content/pm/IPackageManager;Landroid/content/pm/ProviderInfo;Lcom/android/server/uri/GrantUri;IIZ)Z
 HPLcom/android/server/uri/UriGrantsManagerService;->checkUriPermission(Lcom/android/server/uri/GrantUri;II)Z
 HSPLcom/android/server/uri/UriGrantsManagerService;->enforceNotIsolatedCaller(Ljava/lang/String;)V
-PLcom/android/server/uri/UriGrantsManagerService;->findOrCreateUriPermission(Ljava/lang/String;Ljava/lang/String;ILcom/android/server/uri/GrantUri;)Lcom/android/server/uri/UriPermission;
-HPLcom/android/server/uri/UriGrantsManagerService;->getProviderInfo(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
+HSPLcom/android/server/uri/UriGrantsManagerService;->findOrCreateUriPermission(Ljava/lang/String;Ljava/lang/String;ILcom/android/server/uri/GrantUri;)Lcom/android/server/uri/UriPermission;
+PLcom/android/server/uri/UriGrantsManagerService;->findUriPermissionLocked(ILcom/android/server/uri/GrantUri;)Lcom/android/server/uri/UriPermission;
+PLcom/android/server/uri/UriGrantsManagerService;->getGrantedUriPermissions(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLcom/android/server/uri/UriGrantsManagerService;->getProviderInfo(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
 HPLcom/android/server/uri/UriGrantsManagerService;->getUriPermissions(Ljava/lang/String;ZZ)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/uri/UriGrantsManagerService;->grantUriPermission(ILjava/lang/String;Lcom/android/server/uri/GrantUri;ILcom/android/server/uri/UriPermissionOwner;I)V
-PLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionFromIntent(ILjava/lang/String;Landroid/content/Intent;Lcom/android/server/uri/UriPermissionOwner;I)V
-PLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionFromOwner(Landroid/os/IBinder;ILjava/lang/String;Landroid/net/Uri;III)V
-PLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionUnchecked(ILjava/lang/String;Lcom/android/server/uri/GrantUri;ILcom/android/server/uri/UriPermissionOwner;)V
+HPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermission(ILjava/lang/String;Lcom/android/server/uri/GrantUri;ILcom/android/server/uri/UriPermissionOwner;I)V
+HSPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionFromIntent(ILjava/lang/String;Landroid/content/Intent;Lcom/android/server/uri/UriPermissionOwner;I)V
+HPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionFromOwner(Landroid/os/IBinder;ILjava/lang/String;Landroid/net/Uri;III)V
+HPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionUnchecked(ILjava/lang/String;Lcom/android/server/uri/GrantUri;ILcom/android/server/uri/UriPermissionOwner;)V
+PLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionUncheckedFromIntent(Lcom/android/server/uri/NeededUriGrants;Lcom/android/server/uri/UriPermissionOwner;)V
 PLcom/android/server/uri/UriGrantsManagerService;->matchesProvider(Landroid/net/Uri;Landroid/content/pm/ProviderInfo;)Z
+PLcom/android/server/uri/UriGrantsManagerService;->maybePrunePersistedUriGrants(I)Z
 HSPLcom/android/server/uri/UriGrantsManagerService;->onActivityManagerInternalAdded()V
 HSPLcom/android/server/uri/UriGrantsManagerService;->readGrantedUriPermissions()V
-PLcom/android/server/uri/UriGrantsManagerService;->removeUriPermissionIfNeeded(Lcom/android/server/uri/UriPermission;)V
+PLcom/android/server/uri/UriGrantsManagerService;->releasePersistableUriPermission(Landroid/net/Uri;ILjava/lang/String;I)V
+HPLcom/android/server/uri/UriGrantsManagerService;->removeUriPermissionIfNeeded(Lcom/android/server/uri/UriPermission;)V
 HPLcom/android/server/uri/UriGrantsManagerService;->removeUriPermissionsForPackage(Ljava/lang/String;IZZ)V
 HPLcom/android/server/uri/UriGrantsManagerService;->revokeUriPermission(Ljava/lang/String;ILcom/android/server/uri/GrantUri;I)V
 HSPLcom/android/server/uri/UriGrantsManagerService;->start()V
-PLcom/android/server/uri/UriPermission;-><init>(Ljava/lang/String;Ljava/lang/String;ILcom/android/server/uri/GrantUri;)V
+PLcom/android/server/uri/UriGrantsManagerService;->takePersistableUriPermission(Landroid/net/Uri;ILjava/lang/String;I)V
+HSPLcom/android/server/uri/UriPermission;-><init>(Ljava/lang/String;Ljava/lang/String;ILcom/android/server/uri/GrantUri;)V
 HPLcom/android/server/uri/UriPermission;->addReadOwner(Lcom/android/server/uri/UriPermissionOwner;)V
+PLcom/android/server/uri/UriPermission;->addWriteOwner(Lcom/android/server/uri/UriPermissionOwner;)V
 PLcom/android/server/uri/UriPermission;->buildPersistedPublicApiObject()Landroid/content/UriPermission;
-PLcom/android/server/uri/UriPermission;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/uri/UriPermission;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/uri/UriPermission;->getStrength(I)I
-PLcom/android/server/uri/UriPermission;->grantModes(ILcom/android/server/uri/UriPermissionOwner;)V
-PLcom/android/server/uri/UriPermission;->removeReadOwner(Lcom/android/server/uri/UriPermissionOwner;)V
-PLcom/android/server/uri/UriPermission;->revokeModes(IZ)Z
-PLcom/android/server/uri/UriPermission;->toString()Ljava/lang/String;
-PLcom/android/server/uri/UriPermission;->updateModeFlags()V
+HPLcom/android/server/uri/UriPermission;->grantModes(ILcom/android/server/uri/UriPermissionOwner;)V
+HSPLcom/android/server/uri/UriPermission;->initPersistedModes(IJ)V
+HPLcom/android/server/uri/UriPermission;->removeReadOwner(Lcom/android/server/uri/UriPermissionOwner;)V
+PLcom/android/server/uri/UriPermission;->removeWriteOwner(Lcom/android/server/uri/UriPermissionOwner;)V
+HPLcom/android/server/uri/UriPermission;->revokeModes(IZ)Z
+PLcom/android/server/uri/UriPermission;->takePersistableModes(I)Z
+HPLcom/android/server/uri/UriPermission;->toString()Ljava/lang/String;
+HSPLcom/android/server/uri/UriPermission;->updateModeFlags()V
 HSPLcom/android/server/uri/UriPermissionOwner$ExternalToken;-><init>(Lcom/android/server/uri/UriPermissionOwner;)V
-PLcom/android/server/uri/UriPermissionOwner$ExternalToken;->getOwner()Lcom/android/server/uri/UriPermissionOwner;
+HPLcom/android/server/uri/UriPermissionOwner$ExternalToken;->getOwner()Lcom/android/server/uri/UriPermissionOwner;
 HSPLcom/android/server/uri/UriPermissionOwner;-><init>(Lcom/android/server/uri/UriGrantsManagerInternal;Ljava/lang/Object;)V
-PLcom/android/server/uri/UriPermissionOwner;->addReadPermission(Lcom/android/server/uri/UriPermission;)V
-PLcom/android/server/uri/UriPermissionOwner;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/uri/UriPermissionOwner;->fromExternalToken(Landroid/os/IBinder;)Lcom/android/server/uri/UriPermissionOwner;
+HPLcom/android/server/uri/UriPermissionOwner;->addReadPermission(Lcom/android/server/uri/UriPermission;)V
+PLcom/android/server/uri/UriPermissionOwner;->addWritePermission(Lcom/android/server/uri/UriPermission;)V
+HPLcom/android/server/uri/UriPermissionOwner;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/uri/UriPermissionOwner;->fromExternalToken(Landroid/os/IBinder;)Lcom/android/server/uri/UriPermissionOwner;
 HSPLcom/android/server/uri/UriPermissionOwner;->getExternalToken()Landroid/os/Binder;
-PLcom/android/server/uri/UriPermissionOwner;->removeUriPermission(Lcom/android/server/uri/GrantUri;I)V
+PLcom/android/server/uri/UriPermissionOwner;->removeReadPermission(Lcom/android/server/uri/UriPermission;)V
+HPLcom/android/server/uri/UriPermissionOwner;->removeUriPermission(Lcom/android/server/uri/GrantUri;I)V
 PLcom/android/server/uri/UriPermissionOwner;->removeUriPermissions()V
-PLcom/android/server/uri/UriPermissionOwner;->removeUriPermissions(I)V
+HPLcom/android/server/uri/UriPermissionOwner;->removeUriPermissions(I)V
 PLcom/android/server/uri/UriPermissionOwner;->toString()Ljava/lang/String;
+HPLcom/android/server/usage/-$$Lambda$StorageStatsService$2sUmj2KWW5zDR1eh9U7bRfiEbbQ;-><init>(Landroid/content/pm/PackageStats;Ljava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/usage/-$$Lambda$StorageStatsService$bqtERyu3o5aAlc4KluAfnmSEFLI;-><init>(Landroid/content/pm/PackageStats;ILjava/lang/String;)V
+HPLcom/android/server/usage/-$$Lambda$StorageStatsService$iSsicGWO2pdH7m9nkPc_jeZZgzE;-><init>(Landroid/content/pm/PackageStats;ILjava/lang/String;)V
+PLcom/android/server/usage/-$$Lambda$UsageStatsIdleService$RaU7JQt6BjPuOZETPRSrIe-Hdos;-><init>(Lcom/android/server/usage/UsageStatsIdleService;ILandroid/app/job/JobParameters;)V
+PLcom/android/server/usage/-$$Lambda$UsageStatsIdleService$RaU7JQt6BjPuOZETPRSrIe-Hdos;->run()V
+PLcom/android/server/usage/-$$Lambda$UserUsageStatsService$wWX7s9XZT5O4B7JcG_IB_VcPI9s;-><init>(JJLjava/lang/String;Landroid/util/ArraySet;Z)V
+HPLcom/android/server/usage/-$$Lambda$UserUsageStatsService$wWX7s9XZT5O4B7JcG_IB_VcPI9s;->combine(Lcom/android/server/usage/IntervalStats;ZLjava/util/List;)V
+PLcom/android/server/usage/AppTimeLimitController$AppUsageGroup;-><init>(Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController$UserData;Lcom/android/server/usage/AppTimeLimitController$ObserverAppData;I[Ljava/lang/String;JLandroid/app/PendingIntent;)V
+PLcom/android/server/usage/AppTimeLimitController$AppUsageGroup;->remove()V
+PLcom/android/server/usage/AppTimeLimitController$AppUsageLimitGroup;-><init>(Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController$UserData;Lcom/android/server/usage/AppTimeLimitController$ObserverAppData;I[Ljava/lang/String;JJLandroid/app/PendingIntent;)V
+PLcom/android/server/usage/AppTimeLimitController$AppUsageLimitGroup;->getTotaUsageLimit()J
+PLcom/android/server/usage/AppTimeLimitController$AppUsageLimitGroup;->getUsageRemaining()J
+PLcom/android/server/usage/AppTimeLimitController$AppUsageLimitGroup;->remove()V
 HSPLcom/android/server/usage/AppTimeLimitController$Lock;-><init>()V
 HSPLcom/android/server/usage/AppTimeLimitController$Lock;-><init>(Lcom/android/server/usage/AppTimeLimitController$1;)V
 HSPLcom/android/server/usage/AppTimeLimitController$MyHandler;-><init>(Lcom/android/server/usage/AppTimeLimitController;Landroid/os/Looper;)V
+PLcom/android/server/usage/AppTimeLimitController$MyHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/usage/AppTimeLimitController$ObserverAppData;-><init>(Lcom/android/server/usage/AppTimeLimitController;I)V
+PLcom/android/server/usage/AppTimeLimitController$ObserverAppData;-><init>(Lcom/android/server/usage/AppTimeLimitController;ILcom/android/server/usage/AppTimeLimitController$1;)V
+HPLcom/android/server/usage/AppTimeLimitController$ObserverAppData;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/usage/AppTimeLimitController$ObserverAppData;->removeAppUsageGroup(I)V
+PLcom/android/server/usage/AppTimeLimitController$ObserverAppData;->removeAppUsageLimitGroup(I)V
+PLcom/android/server/usage/AppTimeLimitController$ObserverAppData;->removeSessionUsageGroup(I)V
+PLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;-><init>(Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController$UserData;Lcom/android/server/usage/AppTimeLimitController$ObserverAppData;I[Ljava/lang/String;JLandroid/app/PendingIntent;JLandroid/app/PendingIntent;)V
+HPLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;->noteUsageStart(JJ)V
+PLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;->noteUsageStop(J)V
+PLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;->onSessionEnd()V
+PLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;->remove()V
+PLcom/android/server/usage/AppTimeLimitController$UsageGroup;-><init>(Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController$UserData;Lcom/android/server/usage/AppTimeLimitController$ObserverAppData;I[Ljava/lang/String;JLandroid/app/PendingIntent;)V
+PLcom/android/server/usage/AppTimeLimitController$UsageGroup;->checkTimeout(J)V
+HPLcom/android/server/usage/AppTimeLimitController$UsageGroup;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/usage/AppTimeLimitController$UsageGroup;->noteUsageStart(J)V
+PLcom/android/server/usage/AppTimeLimitController$UsageGroup;->noteUsageStart(JJ)V
+HPLcom/android/server/usage/AppTimeLimitController$UsageGroup;->noteUsageStop(J)V
+PLcom/android/server/usage/AppTimeLimitController$UsageGroup;->onLimitReached()V
+PLcom/android/server/usage/AppTimeLimitController$UsageGroup;->remove()V
 PLcom/android/server/usage/AppTimeLimitController$UserData;-><init>(Lcom/android/server/usage/AppTimeLimitController;I)V
 PLcom/android/server/usage/AppTimeLimitController$UserData;-><init>(Lcom/android/server/usage/AppTimeLimitController;ILcom/android/server/usage/AppTimeLimitController$1;)V
-PLcom/android/server/usage/AppTimeLimitController$UserData;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/usage/AppTimeLimitController$UserData;->access$500(Lcom/android/server/usage/AppTimeLimitController$UserData;)I
+HPLcom/android/server/usage/AppTimeLimitController$UserData;->addUsageGroup(Lcom/android/server/usage/AppTimeLimitController$UsageGroup;)V
+HPLcom/android/server/usage/AppTimeLimitController$UserData;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/usage/AppTimeLimitController$UserData;->isActive([Ljava/lang/String;)Z
+HPLcom/android/server/usage/AppTimeLimitController$UserData;->removeUsageGroup(Lcom/android/server/usage/AppTimeLimitController$UsageGroup;)V
 HSPLcom/android/server/usage/AppTimeLimitController;-><clinit>()V
 HSPLcom/android/server/usage/AppTimeLimitController;-><init>(Lcom/android/server/usage/AppTimeLimitController$TimeLimitCallbackListener;Landroid/os/Looper;)V
-PLcom/android/server/usage/AppTimeLimitController;->dump([Ljava/lang/String;Ljava/io/PrintWriter;)V
+PLcom/android/server/usage/AppTimeLimitController;->access$100(Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController$UsageGroup;J)V
+PLcom/android/server/usage/AppTimeLimitController;->access$200(Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController$UsageGroup;)V
+PLcom/android/server/usage/AppTimeLimitController;->access$300(Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController$UsageGroup;)V
+PLcom/android/server/usage/AppTimeLimitController;->access$400(Lcom/android/server/usage/AppTimeLimitController;)Lcom/android/server/usage/AppTimeLimitController$TimeLimitCallbackListener;
+PLcom/android/server/usage/AppTimeLimitController;->access$600(Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;)V
+PLcom/android/server/usage/AppTimeLimitController;->access$700(Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;J)V
+PLcom/android/server/usage/AppTimeLimitController;->access$800(Lcom/android/server/usage/AppTimeLimitController;)Lcom/android/server/usage/AppTimeLimitController$Lock;
+PLcom/android/server/usage/AppTimeLimitController;->addAppUsageLimitObserver(II[Ljava/lang/String;JJLandroid/app/PendingIntent;I)V
+PLcom/android/server/usage/AppTimeLimitController;->addAppUsageObserver(II[Ljava/lang/String;JLandroid/app/PendingIntent;I)V
+PLcom/android/server/usage/AppTimeLimitController;->addUsageSessionObserver(II[Ljava/lang/String;JJLandroid/app/PendingIntent;Landroid/app/PendingIntent;I)V
+HPLcom/android/server/usage/AppTimeLimitController;->cancelCheckTimeoutLocked(Lcom/android/server/usage/AppTimeLimitController$UsageGroup;)V
+HPLcom/android/server/usage/AppTimeLimitController;->cancelInformSessionEndListener(Lcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;)V
+HPLcom/android/server/usage/AppTimeLimitController;->dump([Ljava/lang/String;Ljava/io/PrintWriter;)V
 HPLcom/android/server/usage/AppTimeLimitController;->getAppUsageLimit(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;
-PLcom/android/server/usage/AppTimeLimitController;->getOrCreateUserDataLocked(I)Lcom/android/server/usage/AppTimeLimitController$UserData;
-PLcom/android/server/usage/AppTimeLimitController;->getUptimeMillis()J
+PLcom/android/server/usage/AppTimeLimitController;->getAppUsageLimitObserverPerUidLimit()J
+PLcom/android/server/usage/AppTimeLimitController;->getAppUsageObserverPerUidLimit()J
+PLcom/android/server/usage/AppTimeLimitController;->getMinTimeLimit()J
+PLcom/android/server/usage/AppTimeLimitController;->getOrCreateObserverAppDataLocked(I)Lcom/android/server/usage/AppTimeLimitController$ObserverAppData;
+HPLcom/android/server/usage/AppTimeLimitController;->getOrCreateUserDataLocked(I)Lcom/android/server/usage/AppTimeLimitController$UserData;
+HPLcom/android/server/usage/AppTimeLimitController;->getUptimeMillis()J
+PLcom/android/server/usage/AppTimeLimitController;->getUsageSessionObserverPerUidLimit()J
+PLcom/android/server/usage/AppTimeLimitController;->noteActiveLocked(Lcom/android/server/usage/AppTimeLimitController$UserData;Lcom/android/server/usage/AppTimeLimitController$UsageGroup;J)V
 PLcom/android/server/usage/AppTimeLimitController;->noteUsageStart(Ljava/lang/String;I)V
-PLcom/android/server/usage/AppTimeLimitController;->noteUsageStart(Ljava/lang/String;IJ)V
-PLcom/android/server/usage/AppTimeLimitController;->noteUsageStop(Ljava/lang/String;I)V
+HPLcom/android/server/usage/AppTimeLimitController;->noteUsageStart(Ljava/lang/String;IJ)V
+HPLcom/android/server/usage/AppTimeLimitController;->noteUsageStop(Ljava/lang/String;I)V
+PLcom/android/server/usage/AppTimeLimitController;->onUserRemoved(I)V
+HPLcom/android/server/usage/AppTimeLimitController;->postCheckTimeoutLocked(Lcom/android/server/usage/AppTimeLimitController$UsageGroup;J)V
+PLcom/android/server/usage/AppTimeLimitController;->postInformLimitReachedListenerLocked(Lcom/android/server/usage/AppTimeLimitController$UsageGroup;)V
+PLcom/android/server/usage/AppTimeLimitController;->postInformSessionEndListenerLocked(Lcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;J)V
+PLcom/android/server/usage/AppTimeLimitController;->removeAppUsageLimitObserver(III)V
+PLcom/android/server/usage/AppTimeLimitController;->removeAppUsageObserver(III)V
+PLcom/android/server/usage/AppTimeLimitController;->removeUsageSessionObserver(III)V
 HPLcom/android/server/usage/IntervalStats$EventTracker;-><init>()V
 HPLcom/android/server/usage/IntervalStats$EventTracker;->commitTime(J)V
 HPLcom/android/server/usage/IntervalStats$EventTracker;->update(J)V
-PLcom/android/server/usage/IntervalStats;-><init>()V
+HPLcom/android/server/usage/IntervalStats;-><init>()V
 HPLcom/android/server/usage/IntervalStats;->addEvent(Landroid/app/usage/UsageEvents$Event;)V
 PLcom/android/server/usage/IntervalStats;->commitTime(J)V
 HPLcom/android/server/usage/IntervalStats;->deobfuscateData(Lcom/android/server/usage/PackagesTokenData;)Z
 HPLcom/android/server/usage/IntervalStats;->deobfuscateEvents(Lcom/android/server/usage/PackagesTokenData;)Z
 HPLcom/android/server/usage/IntervalStats;->deobfuscateUsageStats(Lcom/android/server/usage/PackagesTokenData;)Z
 HPLcom/android/server/usage/IntervalStats;->getCachedStringRef(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/usage/IntervalStats;->getOrCreateConfigurationStats(Landroid/content/res/Configuration;)Landroid/app/usage/ConfigurationStats;
+HPLcom/android/server/usage/IntervalStats;->getOrCreateConfigurationStats(Landroid/content/res/Configuration;)Landroid/app/usage/ConfigurationStats;
 HPLcom/android/server/usage/IntervalStats;->getOrCreateUsageStats(Ljava/lang/String;)Landroid/app/usage/UsageStats;
-PLcom/android/server/usage/IntervalStats;->incrementAppLaunchCount(Ljava/lang/String;)V
+HPLcom/android/server/usage/IntervalStats;->incrementAppLaunchCount(Ljava/lang/String;)V
 HPLcom/android/server/usage/IntervalStats;->obfuscateData(Lcom/android/server/usage/PackagesTokenData;)V
 HPLcom/android/server/usage/IntervalStats;->obfuscateEventsData(Lcom/android/server/usage/PackagesTokenData;)V
 HPLcom/android/server/usage/IntervalStats;->obfuscateUsageStatsData(Lcom/android/server/usage/PackagesTokenData;)V
 HPLcom/android/server/usage/IntervalStats;->update(Ljava/lang/String;Ljava/lang/String;JII)V
 PLcom/android/server/usage/IntervalStats;->updateChooserCounts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/usage/IntervalStats;->updateConfigurationStats(Landroid/content/res/Configuration;J)V
+HPLcom/android/server/usage/IntervalStats;->updateConfigurationStats(Landroid/content/res/Configuration;J)V
 PLcom/android/server/usage/IntervalStats;->updateKeyguardHidden(J)V
 PLcom/android/server/usage/IntervalStats;->updateKeyguardShown(J)V
 PLcom/android/server/usage/IntervalStats;->updateScreenInteractive(J)V
@@ -18468,7 +31060,8 @@
 HPLcom/android/server/usage/PackagesTokenData;->getPackageTokenOrAdd(Ljava/lang/String;J)I
 HPLcom/android/server/usage/PackagesTokenData;->getString(II)Ljava/lang/String;
 HPLcom/android/server/usage/PackagesTokenData;->getTokenOrAdd(ILjava/lang/String;Ljava/lang/String;)I
-PLcom/android/server/usage/PackagesTokenData;->removePackage(Ljava/lang/String;J)I
+HPLcom/android/server/usage/PackagesTokenData;->removePackage(Ljava/lang/String;J)I
+HSPLcom/android/server/usage/StorageStatsManagerInternal;-><init>()V
 HSPLcom/android/server/usage/StorageStatsService$1;-><init>(Lcom/android/server/usage/StorageStatsService;)V
 PLcom/android/server/usage/StorageStatsService$1;->onVolumeStateChanged(Landroid/os/storage/VolumeInfo;II)V
 HSPLcom/android/server/usage/StorageStatsService$H;-><init>(Lcom/android/server/usage/StorageStatsService;Landroid/os/Looper;)V
@@ -18477,26 +31070,35 @@
 PLcom/android/server/usage/StorageStatsService$H;->recalculateQuotas(Lcom/android/server/storage/CacheQuotaStrategy;)V
 HSPLcom/android/server/usage/StorageStatsService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/usage/StorageStatsService$Lifecycle;->onStart()V
+HSPLcom/android/server/usage/StorageStatsService$LocalService;-><init>(Lcom/android/server/usage/StorageStatsService;)V
+HSPLcom/android/server/usage/StorageStatsService$LocalService;-><init>(Lcom/android/server/usage/StorageStatsService;Lcom/android/server/usage/StorageStatsService$1;)V
 HSPLcom/android/server/usage/StorageStatsService;-><clinit>()V
 HSPLcom/android/server/usage/StorageStatsService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/usage/StorageStatsService;->access$000(Lcom/android/server/usage/StorageStatsService;)V
 HSPLcom/android/server/usage/StorageStatsService;->access$100(Lcom/android/server/usage/StorageStatsService;)Landroid/content/Context;
+HSPLcom/android/server/usage/StorageStatsService;->access$200(Lcom/android/server/usage/StorageStatsService;)Landroid/content/Context;
 HSPLcom/android/server/usage/StorageStatsService;->access$200(Lcom/android/server/usage/StorageStatsService;)Lcom/android/server/pm/Installer;
 HSPLcom/android/server/usage/StorageStatsService;->access$300(Lcom/android/server/usage/StorageStatsService;)Landroid/util/ArrayMap;
+HSPLcom/android/server/usage/StorageStatsService;->access$300(Lcom/android/server/usage/StorageStatsService;)Lcom/android/server/pm/Installer;
+HSPLcom/android/server/usage/StorageStatsService;->access$400(Lcom/android/server/usage/StorageStatsService;)Landroid/util/ArrayMap;
 HPLcom/android/server/usage/StorageStatsService;->enforcePermission(ILjava/lang/String;)V
+HPLcom/android/server/usage/StorageStatsService;->enforceStatsPermission(ILjava/lang/String;)V
+HPLcom/android/server/usage/StorageStatsService;->forEachStorageStatsAugmenter(Ljava/util/function/Consumer;Ljava/lang/String;)V
 HPLcom/android/server/usage/StorageStatsService;->getAppIds(I)[I
-PLcom/android/server/usage/StorageStatsService;->getCacheBytes(Ljava/lang/String;Ljava/lang/String;)J
-PLcom/android/server/usage/StorageStatsService;->getCacheQuotaBytes(Ljava/lang/String;ILjava/lang/String;)J
-PLcom/android/server/usage/StorageStatsService;->getFreeBytes(Ljava/lang/String;Ljava/lang/String;)J
-PLcom/android/server/usage/StorageStatsService;->getTotalBytes(Ljava/lang/String;Ljava/lang/String;)J
+HPLcom/android/server/usage/StorageStatsService;->getCacheBytes(Ljava/lang/String;Ljava/lang/String;)J
+HPLcom/android/server/usage/StorageStatsService;->getCacheQuotaBytes(Ljava/lang/String;ILjava/lang/String;)J
+HPLcom/android/server/usage/StorageStatsService;->getDefaultFlags()I
+HPLcom/android/server/usage/StorageStatsService;->getFreeBytes(Ljava/lang/String;Ljava/lang/String;)J
+HPLcom/android/server/usage/StorageStatsService;->getTotalBytes(Ljava/lang/String;Ljava/lang/String;)J
 HSPLcom/android/server/usage/StorageStatsService;->invalidateMounts()V
 HSPLcom/android/server/usage/StorageStatsService;->isCacheQuotaCalculationsEnabled(Landroid/content/ContentResolver;)Z
-PLcom/android/server/usage/StorageStatsService;->isQuotaSupported(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/usage/StorageStatsService;->isQuotaSupported(Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/usage/StorageStatsService;->notifySignificantDelta()V
 PLcom/android/server/usage/StorageStatsService;->queryExternalStatsForUser(Ljava/lang/String;ILjava/lang/String;)Landroid/app/usage/ExternalStorageStats;
 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;
-PLcom/android/server/usage/StorageStatsService;->queryStatsForUser(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;
+HPLcom/android/server/usage/StorageStatsService;->translate(Landroid/content/pm/PackageStats;)Landroid/app/usage/StorageStats;
 PLcom/android/server/usage/UnixCalendar;-><init>(J)V
 PLcom/android/server/usage/UnixCalendar;->addDays(I)V
 PLcom/android/server/usage/UnixCalendar;->addMonths(I)V
@@ -18505,49 +31107,58 @@
 HPLcom/android/server/usage/UnixCalendar;->getTimeInMillis()J
 PLcom/android/server/usage/UnixCalendar;->setTimeInMillis(J)V
 PLcom/android/server/usage/UsageStatsDatabase$1;-><init>(Lcom/android/server/usage/UsageStatsDatabase;)V
-PLcom/android/server/usage/UsageStatsDatabase$1;->accept(Ljava/io/File;Ljava/lang/String;)Z
+HPLcom/android/server/usage/UsageStatsDatabase$1;->accept(Ljava/io/File;Ljava/lang/String;)Z
 PLcom/android/server/usage/UsageStatsDatabase;-><clinit>()V
 PLcom/android/server/usage/UsageStatsDatabase;-><init>(Ljava/io/File;)V
 PLcom/android/server/usage/UsageStatsDatabase;-><init>(Ljava/io/File;I)V
 PLcom/android/server/usage/UsageStatsDatabase;->checkVersionAndBuildLocked()V
-PLcom/android/server/usage/UsageStatsDatabase;->checkinDailyFiles(Lcom/android/server/usage/UsageStatsDatabase$CheckinAction;)Z
-PLcom/android/server/usage/UsageStatsDatabase;->dump(Lcom/android/internal/util/IndentingPrintWriter;Z)V
+HPLcom/android/server/usage/UsageStatsDatabase;->checkinDailyFiles(Lcom/android/server/usage/UsageStatsDatabase$CheckinAction;)Z
+PLcom/android/server/usage/UsageStatsDatabase;->doUpgradeLocked(I)V
+HPLcom/android/server/usage/UsageStatsDatabase;->dump(Lcom/android/internal/util/IndentingPrintWriter;Z)V
 HPLcom/android/server/usage/UsageStatsDatabase;->dumpMappings(Lcom/android/internal/util/IndentingPrintWriter;)V
 HPLcom/android/server/usage/UsageStatsDatabase;->filterStats(Lcom/android/server/usage/IntervalStats;)V
-PLcom/android/server/usage/UsageStatsDatabase;->findBestFitBucket(JJ)I
+HPLcom/android/server/usage/UsageStatsDatabase;->findBestFitBucket(JJ)I
 PLcom/android/server/usage/UsageStatsDatabase;->getBackupPayload(Ljava/lang/String;)[B
-PLcom/android/server/usage/UsageStatsDatabase;->getBackupPayload(Ljava/lang/String;I)[B
+HPLcom/android/server/usage/UsageStatsDatabase;->getBackupPayload(Ljava/lang/String;I)[B
 PLcom/android/server/usage/UsageStatsDatabase;->getBuildFingerprint()Ljava/lang/String;
 PLcom/android/server/usage/UsageStatsDatabase;->getLatestUsageStats(I)Lcom/android/server/usage/IntervalStats;
 PLcom/android/server/usage/UsageStatsDatabase;->indexFilesLocked()V
 PLcom/android/server/usage/UsageStatsDatabase;->init(J)V
 PLcom/android/server/usage/UsageStatsDatabase;->isNewUpdate()Z
 HPLcom/android/server/usage/UsageStatsDatabase;->obfuscateCurrentStats([Lcom/android/server/usage/IntervalStats;)V
+PLcom/android/server/usage/UsageStatsDatabase;->onPackageRemoved(Ljava/lang/String;J)I
+HPLcom/android/server/usage/UsageStatsDatabase;->onTimeChanged(J)V
 HPLcom/android/server/usage/UsageStatsDatabase;->parseBeginTime(Landroid/util/AtomicFile;)J
 HPLcom/android/server/usage/UsageStatsDatabase;->parseBeginTime(Ljava/io/File;)J
 PLcom/android/server/usage/UsageStatsDatabase;->prune(J)V
 HPLcom/android/server/usage/UsageStatsDatabase;->pruneChooserCountsOlderThan(Ljava/io/File;J)V
-PLcom/android/server/usage/UsageStatsDatabase;->pruneFilesOlderThan(Ljava/io/File;J)V
-PLcom/android/server/usage/UsageStatsDatabase;->putUsageStats(ILcom/android/server/usage/IntervalStats;)V
-PLcom/android/server/usage/UsageStatsDatabase;->queryUsageStats(IJJLcom/android/server/usage/UsageStatsDatabase$StatCombiner;)Ljava/util/List;
+HPLcom/android/server/usage/UsageStatsDatabase;->pruneFilesOlderThan(Ljava/io/File;J)V
+PLcom/android/server/usage/UsageStatsDatabase;->pruneUninstalledPackagesData()Z
+HPLcom/android/server/usage/UsageStatsDatabase;->putUsageStats(ILcom/android/server/usage/IntervalStats;)V
+HPLcom/android/server/usage/UsageStatsDatabase;->queryUsageStats(IJJLcom/android/server/usage/UsageStatsDatabase$StatCombiner;)Ljava/util/List;
 HPLcom/android/server/usage/UsageStatsDatabase;->readLocked(Landroid/util/AtomicFile;Lcom/android/server/usage/IntervalStats;)V
 HPLcom/android/server/usage/UsageStatsDatabase;->readLocked(Landroid/util/AtomicFile;Lcom/android/server/usage/IntervalStats;ILcom/android/server/usage/PackagesTokenData;)Z
 HPLcom/android/server/usage/UsageStatsDatabase;->readLocked(Ljava/io/InputStream;Lcom/android/server/usage/IntervalStats;ILcom/android/server/usage/PackagesTokenData;)Z
 HPLcom/android/server/usage/UsageStatsDatabase;->readMappingsLocked()V
-PLcom/android/server/usage/UsageStatsDatabase;->sanitizeIntervalStatsForBackup(Lcom/android/server/usage/IntervalStats;)V
-PLcom/android/server/usage/UsageStatsDatabase;->serializeIntervalStats(Lcom/android/server/usage/IntervalStats;I)[B
+HPLcom/android/server/usage/UsageStatsDatabase;->sanitizeIntervalStatsForBackup(Lcom/android/server/usage/IntervalStats;)V
+HPLcom/android/server/usage/UsageStatsDatabase;->serializeIntervalStats(Lcom/android/server/usage/IntervalStats;I)[B
 PLcom/android/server/usage/UsageStatsDatabase;->wasUpgradePerformed()Z
-PLcom/android/server/usage/UsageStatsDatabase;->writeIntervalStatsToStream(Ljava/io/DataOutputStream;Landroid/util/AtomicFile;I)V
+HPLcom/android/server/usage/UsageStatsDatabase;->writeIntervalStatsToStream(Ljava/io/DataOutputStream;Landroid/util/AtomicFile;I)V
 HPLcom/android/server/usage/UsageStatsDatabase;->writeLocked(Landroid/util/AtomicFile;Lcom/android/server/usage/IntervalStats;)V
 HPLcom/android/server/usage/UsageStatsDatabase;->writeLocked(Landroid/util/AtomicFile;Lcom/android/server/usage/IntervalStats;ILcom/android/server/usage/PackagesTokenData;)V
 HPLcom/android/server/usage/UsageStatsDatabase;->writeLocked(Ljava/io/OutputStream;Lcom/android/server/usage/IntervalStats;ILcom/android/server/usage/PackagesTokenData;)V
 HPLcom/android/server/usage/UsageStatsDatabase;->writeMappingsLocked()V
+PLcom/android/server/usage/UsageStatsIdleService;-><init>()V
+PLcom/android/server/usage/UsageStatsIdleService;->cancelJob(Landroid/content/Context;I)V
+PLcom/android/server/usage/UsageStatsIdleService;->lambda$onStartJob$0$UsageStatsIdleService(ILandroid/app/job/JobParameters;)V
+PLcom/android/server/usage/UsageStatsIdleService;->onStartJob(Landroid/app/job/JobParameters;)Z
+PLcom/android/server/usage/UsageStatsIdleService;->scheduleJob(Landroid/content/Context;I)V
 PLcom/android/server/usage/UsageStatsProto;-><clinit>()V
 HPLcom/android/server/usage/UsageStatsProto;->write(Ljava/io/OutputStream;Lcom/android/server/usage/IntervalStats;)V
 HPLcom/android/server/usage/UsageStatsProto;->writeChooserCounts(Landroid/util/proto/ProtoOutputStream;Landroid/app/usage/UsageStats;)V
 HPLcom/android/server/usage/UsageStatsProto;->writeCountAndTime(Landroid/util/proto/ProtoOutputStream;JIJ)V
-PLcom/android/server/usage/UsageStatsProto;->writeCountsForAction(Landroid/util/proto/ProtoOutputStream;Landroid/util/ArrayMap;)V
-PLcom/android/server/usage/UsageStatsProto;->writeStringPool(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/usage/IntervalStats;)V
+HPLcom/android/server/usage/UsageStatsProto;->writeCountsForAction(Landroid/util/proto/ProtoOutputStream;Landroid/util/ArrayMap;)V
+HPLcom/android/server/usage/UsageStatsProto;->writeStringPool(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/usage/IntervalStats;)V
 HPLcom/android/server/usage/UsageStatsProto;->writeUsageStats(Landroid/util/proto/ProtoOutputStream;JLcom/android/server/usage/IntervalStats;Landroid/app/usage/UsageStats;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->loadChooserCounts(Landroid/util/proto/ProtoInputStream;Landroid/app/usage/UsageStats;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->loadConfigStats(Landroid/util/proto/ProtoInputStream;Lcom/android/server/usage/IntervalStats;)V
@@ -18555,9 +31166,11 @@
 HPLcom/android/server/usage/UsageStatsProtoV2;->loadCountsForAction(Landroid/util/proto/ProtoInputStream;Landroid/util/SparseIntArray;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->loadPackagesMap(Landroid/util/proto/ProtoInputStream;Landroid/util/SparseArray;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->parseEvent(Landroid/util/proto/ProtoInputStream;J)Landroid/app/usage/UsageEvents$Event;
+HPLcom/android/server/usage/UsageStatsProtoV2;->parsePendingEvent(Landroid/util/proto/ProtoInputStream;)Landroid/app/usage/UsageEvents$Event;
 HPLcom/android/server/usage/UsageStatsProtoV2;->parseUsageStats(Landroid/util/proto/ProtoInputStream;J)Landroid/app/usage/UsageStats;
 HPLcom/android/server/usage/UsageStatsProtoV2;->read(Ljava/io/InputStream;Lcom/android/server/usage/IntervalStats;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->readObfuscatedData(Ljava/io/InputStream;Lcom/android/server/usage/PackagesTokenData;)V
+HPLcom/android/server/usage/UsageStatsProtoV2;->readPendingEvents(Ljava/io/InputStream;Ljava/util/LinkedList;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->write(Ljava/io/OutputStream;Lcom/android/server/usage/IntervalStats;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeChooserCounts(Landroid/util/proto/ProtoOutputStream;Landroid/app/usage/UsageStats;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeConfigStats(Landroid/util/proto/ProtoOutputStream;JLandroid/app/usage/ConfigurationStats;Z)V
@@ -18565,96 +31178,154 @@
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeCountsForAction(Landroid/util/proto/ProtoOutputStream;Landroid/util/SparseIntArray;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeEvent(Landroid/util/proto/ProtoOutputStream;JLandroid/app/usage/UsageEvents$Event;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeObfuscatedData(Ljava/io/OutputStream;Lcom/android/server/usage/PackagesTokenData;)V
+HPLcom/android/server/usage/UsageStatsProtoV2;->writePendingEvent(Landroid/util/proto/ProtoOutputStream;Landroid/app/usage/UsageEvents$Event;)V
+HPLcom/android/server/usage/UsageStatsProtoV2;->writePendingEvents(Ljava/io/OutputStream;Ljava/util/LinkedList;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeUsageStats(Landroid/util/proto/ProtoOutputStream;JLandroid/app/usage/UsageStats;)V
 HSPLcom/android/server/usage/UsageStatsService$1;-><init>(Lcom/android/server/usage/UsageStatsService;)V
-PLcom/android/server/usage/UsageStatsService$1;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
+HSPLcom/android/server/usage/UsageStatsService$1;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
 HSPLcom/android/server/usage/UsageStatsService$2;-><init>(Lcom/android/server/usage/UsageStatsService;)V
+PLcom/android/server/usage/UsageStatsService$2;->onLimitReached(IIJJLandroid/app/PendingIntent;)V
+PLcom/android/server/usage/UsageStatsService$2;->onSessionEnd(IIJLandroid/app/PendingIntent;)V
 HSPLcom/android/server/usage/UsageStatsService$3;-><init>(Lcom/android/server/usage/UsageStatsService;)V
 HSPLcom/android/server/usage/UsageStatsService$3;->onUidGone(IZ)V
 HSPLcom/android/server/usage/UsageStatsService$3;->onUidStateChanged(IIJI)V
-PLcom/android/server/usage/UsageStatsService$ActivityData;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/usage/UsageStatsService$ActivityData;-><init>(Ljava/lang/String;Ljava/lang/String;Lcom/android/server/usage/UsageStatsService$1;)V
+HPLcom/android/server/usage/UsageStatsService$ActivityData;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/usage/UsageStatsService$ActivityData;-><init>(Ljava/lang/String;Ljava/lang/String;Lcom/android/server/usage/UsageStatsService$1;)V
 PLcom/android/server/usage/UsageStatsService$ActivityData;->access$600(Lcom/android/server/usage/UsageStatsService$ActivityData;)Ljava/lang/String;
 PLcom/android/server/usage/UsageStatsService$ActivityData;->access$700(Lcom/android/server/usage/UsageStatsService$ActivityData;)Ljava/lang/String;
 HSPLcom/android/server/usage/UsageStatsService$BinderService;-><init>(Lcom/android/server/usage/UsageStatsService;)V
 HSPLcom/android/server/usage/UsageStatsService$BinderService;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$1;)V
+HPLcom/android/server/usage/UsageStatsService$BinderService;->checkCallerIsSameApp(Ljava/lang/String;)V
+PLcom/android/server/usage/UsageStatsService$BinderService;->checkCallerIsSystemOrSameApp(Ljava/lang/String;)V
 PLcom/android/server/usage/UsageStatsService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/usage/UsageStatsService$BinderService;->getAppStandbyBucket(Ljava/lang/String;Ljava/lang/String;I)I
-PLcom/android/server/usage/UsageStatsService$BinderService;->getAppStandbyBuckets(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/usage/UsageStatsService$BinderService;->getAppStandbyBucket(Ljava/lang/String;Ljava/lang/String;I)I
+HPLcom/android/server/usage/UsageStatsService$BinderService;->getAppStandbyBuckets(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/usage/UsageStatsService$BinderService;->getUsageSource()I
 PLcom/android/server/usage/UsageStatsService$BinderService;->hasObserverPermission()Z
 HPLcom/android/server/usage/UsageStatsService$BinderService;->hasPermission(Ljava/lang/String;)Z
+PLcom/android/server/usage/UsageStatsService$BinderService;->hasPermissions(Ljava/lang/String;[Ljava/lang/String;)Z
 HPLcom/android/server/usage/UsageStatsService$BinderService;->isAppInactive(Ljava/lang/String;I)Z
-PLcom/android/server/usage/UsageStatsService$BinderService;->queryEvents(JJLjava/lang/String;)Landroid/app/usage/UsageEvents;
-PLcom/android/server/usage/UsageStatsService$BinderService;->queryUsageStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/usage/UsageStatsService$BinderService;->isCallingUidSystem()Z
+PLcom/android/server/usage/UsageStatsService$BinderService;->onCarrierPrivilegedAppsChanged()V
+HPLcom/android/server/usage/UsageStatsService$BinderService;->queryEvents(JJLjava/lang/String;)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UsageStatsService$BinderService;->queryEventsForPackage(JJLjava/lang/String;)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UsageStatsService$BinderService;->queryEventsForPackageForUser(JJILjava/lang/String;Ljava/lang/String;)Landroid/app/usage/UsageEvents;
+PLcom/android/server/usage/UsageStatsService$BinderService;->queryEventsForUser(JJILjava/lang/String;)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UsageStatsService$BinderService;->queryUsageStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/usage/UsageStatsService$BinderService;->registerAppUsageLimitObserver(I[Ljava/lang/String;JJLandroid/app/PendingIntent;Ljava/lang/String;)V
+PLcom/android/server/usage/UsageStatsService$BinderService;->registerAppUsageObserver(I[Ljava/lang/String;JLandroid/app/PendingIntent;Ljava/lang/String;)V
+PLcom/android/server/usage/UsageStatsService$BinderService;->registerUsageSessionObserver(I[Ljava/lang/String;JJLandroid/app/PendingIntent;Landroid/app/PendingIntent;Ljava/lang/String;)V
 PLcom/android/server/usage/UsageStatsService$BinderService;->reportChooserSelection(Ljava/lang/String;ILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/usage/UsageStatsService$BinderService;->setAppStandbyBuckets(Landroid/content/pm/ParceledListSlice;I)V
+HPLcom/android/server/usage/UsageStatsService$BinderService;->setAppStandbyBuckets(Landroid/content/pm/ParceledListSlice;I)V
+PLcom/android/server/usage/UsageStatsService$BinderService;->unregisterAppUsageLimitObserver(ILjava/lang/String;)V
+PLcom/android/server/usage/UsageStatsService$BinderService;->unregisterAppUsageObserver(ILjava/lang/String;)V
+PLcom/android/server/usage/UsageStatsService$BinderService;->unregisterUsageSessionObserver(ILjava/lang/String;)V
 HSPLcom/android/server/usage/UsageStatsService$H;-><init>(Lcom/android/server/usage/UsageStatsService;Landroid/os/Looper;)V
 HSPLcom/android/server/usage/UsageStatsService$H;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;-><init>(Lcom/android/server/usage/UsageStatsService;)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$1;)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->getAppStandbyBucket(Ljava/lang/String;IJ)I
+HPLcom/android/server/usage/UsageStatsService$LocalService;->getAppUsageLimit(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;
 PLcom/android/server/usage/UsageStatsService$LocalService;->getBackupPayload(ILjava/lang/String;)[B
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->getIdleUidsForUser(I)[I
 PLcom/android/server/usage/UsageStatsService$LocalService;->getTimeSinceLastJobRun(Ljava/lang/String;I)J
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->isAppIdle(Ljava/lang/String;II)Z
+PLcom/android/server/usage/UsageStatsService$LocalService;->onActiveAdminAdded(Ljava/lang/String;I)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->onAdminDataAvailable()V
+PLcom/android/server/usage/UsageStatsService$LocalService;->prepareForPossibleShutdown()V
+PLcom/android/server/usage/UsageStatsService$LocalService;->prepareShutdown()V
+PLcom/android/server/usage/UsageStatsService$LocalService;->pruneUninstalledPackagesData(I)Z
+HPLcom/android/server/usage/UsageStatsService$LocalService;->queryEventsForUser(IJJZ)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UsageStatsService$LocalService;->queryEventsForUser(IJJZZ)Landroid/app/usage/UsageEvents;
 PLcom/android/server/usage/UsageStatsService$LocalService;->queryUsageStatsForUser(IIJJZ)Ljava/util/List;
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportConfigurationChange(Landroid/content/res/Configuration;I)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportContentProviderUsage(Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/usage/UsageStatsService$LocalService;->reportEvent(Landroid/content/ComponentName;IIILandroid/content/ComponentName;)V
+HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportEvent(Landroid/content/ComponentName;IIILandroid/content/ComponentName;)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportEvent(Ljava/lang/String;II)V
-PLcom/android/server/usage/UsageStatsService$LocalService;->reportInterruptiveNotification(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/usage/UsageStatsService$LocalService;->reportExemptedSyncStart(Ljava/lang/String;I)V
+HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportInterruptiveNotification(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/usage/UsageStatsService$LocalService;->reportShortcutUsage(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/usage/UsageStatsService$LocalService;->reportSyncScheduled(Ljava/lang/String;IZ)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->setActiveAdminApps(Ljava/util/Set;I)V
 HPLcom/android/server/usage/UsageStatsService$LocalService;->setLastJobRunTime(Ljava/lang/String;IJ)V
 HSPLcom/android/server/usage/UsageStatsService$MyPackageMonitor;-><init>(Lcom/android/server/usage/UsageStatsService;)V
 HSPLcom/android/server/usage/UsageStatsService$MyPackageMonitor;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$1;)V
+HPLcom/android/server/usage/UsageStatsService$MyPackageMonitor;->onPackageRemoved(Ljava/lang/String;I)V
 HSPLcom/android/server/usage/UsageStatsService$UserActionsReceiver;-><init>(Lcom/android/server/usage/UsageStatsService;)V
 HSPLcom/android/server/usage/UsageStatsService$UserActionsReceiver;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$1;)V
-PLcom/android/server/usage/UsageStatsService$UserActionsReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/usage/UsageStatsService$UserActionsReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/usage/UsageStatsService;-><clinit>()V
 HSPLcom/android/server/usage/UsageStatsService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/usage/UsageStatsService;->access$100(Lcom/android/server/usage/UsageStatsService;ILandroid/app/usage/UsageEvents$Event;)V
 HSPLcom/android/server/usage/UsageStatsService;->access$1000(Lcom/android/server/usage/UsageStatsService;)Landroid/util/SparseIntArray;
 HSPLcom/android/server/usage/UsageStatsService;->access$1100()Ljava/io/File;
-PLcom/android/server/usage/UsageStatsService;->access$1300(Lcom/android/server/usage/UsageStatsService;II)Z
+PLcom/android/server/usage/UsageStatsService;->access$1200(Lcom/android/server/usage/UsageStatsService;)Landroid/app/admin/DevicePolicyManagerInternal;
+HPLcom/android/server/usage/UsageStatsService;->access$1300(Lcom/android/server/usage/UsageStatsService;II)Z
+PLcom/android/server/usage/UsageStatsService;->access$1400(Lcom/android/server/usage/UsageStatsService;ILjava/lang/String;II)Z
+PLcom/android/server/usage/UsageStatsService;->access$1500(Lcom/android/server/usage/UsageStatsService;)Ljava/lang/Object;
+PLcom/android/server/usage/UsageStatsService;->access$1600(Lcom/android/server/usage/UsageStatsService;)Ljava/lang/Object;
+PLcom/android/server/usage/UsageStatsService;->access$1700(Lcom/android/server/usage/UsageStatsService;)Landroid/util/SparseBooleanArray;
+PLcom/android/server/usage/UsageStatsService;->access$1800(Lcom/android/server/usage/UsageStatsService;)Landroid/util/SparseBooleanArray;
+PLcom/android/server/usage/UsageStatsService;->access$1800(Lcom/android/server/usage/UsageStatsService;I)Lcom/android/server/usage/UserUsageStatsService;
+PLcom/android/server/usage/UsageStatsService;->access$1900(Lcom/android/server/usage/UsageStatsService;I)Lcom/android/server/usage/UserUsageStatsService;
+PLcom/android/server/usage/UsageStatsService;->access$1900(Lcom/android/server/usage/UsageStatsService;I)Z
+PLcom/android/server/usage/UsageStatsService;->access$2000(Lcom/android/server/usage/UsageStatsService;I)Z
 PLcom/android/server/usage/UsageStatsService;->access$800(Lcom/android/server/usage/UsageStatsService;I)V
+PLcom/android/server/usage/UsageStatsService;->access$900(Lcom/android/server/usage/UsageStatsService;ILjava/lang/String;)V
 PLcom/android/server/usage/UsageStatsService;->deleteLegacyDir(I)V
 PLcom/android/server/usage/UsageStatsService;->deleteRecursively(Ljava/io/File;)V
-PLcom/android/server/usage/UsageStatsService;->dump([Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/usage/UsageStatsService;->flushToDisk()V
-PLcom/android/server/usage/UsageStatsService;->flushToDiskLocked()V
+HPLcom/android/server/usage/UsageStatsService;->dump([Ljava/lang/String;Ljava/io/PrintWriter;)V
+HPLcom/android/server/usage/UsageStatsService;->flushToDisk()V
+HPLcom/android/server/usage/UsageStatsService;->flushToDiskLocked()V
 HSPLcom/android/server/usage/UsageStatsService;->getDpmInternal()Landroid/app/admin/DevicePolicyManagerInternal;
 HPLcom/android/server/usage/UsageStatsService;->getInstalledPackages(I)Ljava/util/HashMap;
+HSPLcom/android/server/usage/UsageStatsService;->getShortcutServiceInternal()Landroid/content/pm/ShortcutServiceInternal;
 HPLcom/android/server/usage/UsageStatsService;->getUserUsageStatsServiceLocked(I)Lcom/android/server/usage/UserUsageStatsService;
 PLcom/android/server/usage/UsageStatsService;->initializeUserUsageStatsServiceLocked(IJLjava/util/HashMap;)V
 PLcom/android/server/usage/UsageStatsService;->loadPendingEventsLocked(ILjava/util/LinkedList;)V
 PLcom/android/server/usage/UsageStatsService;->migrateStatsToSystemCeIfNeededLocked(I)V
 HSPLcom/android/server/usage/UsageStatsService;->onBootPhase(I)V
 PLcom/android/server/usage/UsageStatsService;->onNewUpdate(I)V
+HPLcom/android/server/usage/UsageStatsService;->onPackageRemoved(ILjava/lang/String;)V
 HSPLcom/android/server/usage/UsageStatsService;->onStart()V
-PLcom/android/server/usage/UsageStatsService;->onStartUser(Landroid/content/pm/UserInfo;)V
+HSPLcom/android/server/usage/UsageStatsService;->onStartUser(Landroid/content/pm/UserInfo;)V
+PLcom/android/server/usage/UsageStatsService;->onStatsReloaded()V
 PLcom/android/server/usage/UsageStatsService;->onStatsUpdated()V
+PLcom/android/server/usage/UsageStatsService;->onStopUser(Landroid/content/pm/UserInfo;)V
 PLcom/android/server/usage/UsageStatsService;->onUnlockUser(Landroid/content/pm/UserInfo;)V
+PLcom/android/server/usage/UsageStatsService;->onUserRemoved(I)V
 HPLcom/android/server/usage/UsageStatsService;->onUserUnlocked(I)V
-PLcom/android/server/usage/UsageStatsService;->queryEvents(IJJZ)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UsageStatsService;->persistPendingEventsLocked(I)V
+PLcom/android/server/usage/UsageStatsService;->prepareForPossibleShutdown()V
+PLcom/android/server/usage/UsageStatsService;->pruneUninstalledPackagesData(I)Z
+HPLcom/android/server/usage/UsageStatsService;->queryEvents(IJJZ)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UsageStatsService;->queryEvents(IJJZZ)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UsageStatsService;->queryEventsForPackage(IJJLjava/lang/String;Z)Landroid/app/usage/UsageEvents;
 HPLcom/android/server/usage/UsageStatsService;->queryUsageStats(IIJJZ)Ljava/util/List;
 HSPLcom/android/server/usage/UsageStatsService;->readUsageSourceSetting()V
+PLcom/android/server/usage/UsageStatsService;->registerAppUsageLimitObserver(II[Ljava/lang/String;JJLandroid/app/PendingIntent;I)V
+PLcom/android/server/usage/UsageStatsService;->registerAppUsageObserver(II[Ljava/lang/String;JLandroid/app/PendingIntent;I)V
+PLcom/android/server/usage/UsageStatsService;->registerUsageSessionObserver(II[Ljava/lang/String;JJLandroid/app/PendingIntent;Landroid/app/PendingIntent;I)V
 HPLcom/android/server/usage/UsageStatsService;->reportEvent(Landroid/app/usage/UsageEvents$Event;I)V
 HSPLcom/android/server/usage/UsageStatsService;->reportEventOrAddToQueue(ILandroid/app/usage/UsageEvents$Event;)V
-PLcom/android/server/usage/UsageStatsService;->reportEventToAllUserId(Landroid/app/usage/UsageEvents$Event;)V
-PLcom/android/server/usage/UsageStatsService;->shouldObfuscateInstantAppsForCaller(II)Z
+HPLcom/android/server/usage/UsageStatsService;->reportEventToAllUserId(Landroid/app/usage/UsageEvents$Event;)V
+PLcom/android/server/usage/UsageStatsService;->shouldHideShortcutInvocationEvents(ILjava/lang/String;II)Z
+HPLcom/android/server/usage/UsageStatsService;->shouldObfuscateInstantAppsForCaller(II)Z
+PLcom/android/server/usage/UsageStatsService;->shutdown()V
+PLcom/android/server/usage/UsageStatsService;->unregisterAppUsageLimitObserver(III)V
+PLcom/android/server/usage/UsageStatsService;->unregisterAppUsageObserver(III)V
+PLcom/android/server/usage/UsageStatsService;->unregisterUsageSessionObserver(III)V
 PLcom/android/server/usage/UserUsageStatsService$1;-><init>()V
 HPLcom/android/server/usage/UserUsageStatsService$1;->combine(Lcom/android/server/usage/IntervalStats;ZLjava/util/List;)V
 PLcom/android/server/usage/UserUsageStatsService$2;-><init>()V
 PLcom/android/server/usage/UserUsageStatsService$3;-><init>()V
 HPLcom/android/server/usage/UserUsageStatsService$4;-><init>(Lcom/android/server/usage/UserUsageStatsService;JJZLandroid/util/ArraySet;)V
+HPLcom/android/server/usage/UserUsageStatsService$4;-><init>(Lcom/android/server/usage/UserUsageStatsService;JJZZLandroid/util/ArraySet;)V
 HPLcom/android/server/usage/UserUsageStatsService$4;->combine(Lcom/android/server/usage/IntervalStats;ZLjava/util/List;)V
 HPLcom/android/server/usage/UserUsageStatsService$5;-><init>(Lcom/android/server/usage/UserUsageStatsService;Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/usage/UserUsageStatsService$5;->checkin(Lcom/android/server/usage/IntervalStats;)Z
 PLcom/android/server/usage/UserUsageStatsService$6;-><init>(Lcom/android/server/usage/UserUsageStatsService;JJLjava/lang/String;)V
-PLcom/android/server/usage/UserUsageStatsService$6;->combine(Lcom/android/server/usage/IntervalStats;ZLjava/util/List;)V
+HPLcom/android/server/usage/UserUsageStatsService$6;->combine(Lcom/android/server/usage/IntervalStats;ZLjava/util/List;)V
 PLcom/android/server/usage/UserUsageStatsService;-><clinit>()V
 PLcom/android/server/usage/UserUsageStatsService;-><init>(Landroid/content/Context;ILjava/io/File;Lcom/android/server/usage/UserUsageStatsService$StatsUpdatedListener;)V
 HPLcom/android/server/usage/UserUsageStatsService;->checkAndGetTimeLocked()J
@@ -18667,108 +31338,184 @@
 PLcom/android/server/usage/UserUsageStatsService;->getBackupPayload(Ljava/lang/String;)[B
 PLcom/android/server/usage/UserUsageStatsService;->init(JLjava/util/HashMap;)V
 PLcom/android/server/usage/UserUsageStatsService;->intervalToString(I)Ljava/lang/String;
+HPLcom/android/server/usage/UserUsageStatsService;->lambda$queryEventsForPackage$0(JJLjava/lang/String;Landroid/util/ArraySet;ZLcom/android/server/usage/IntervalStats;ZLjava/util/List;)V
 PLcom/android/server/usage/UserUsageStatsService;->loadActiveStats(J)V
 PLcom/android/server/usage/UserUsageStatsService;->notifyNewUpdate()V
 HPLcom/android/server/usage/UserUsageStatsService;->notifyStatsChanged()V
-PLcom/android/server/usage/UserUsageStatsService;->persistActiveStats()V
+PLcom/android/server/usage/UserUsageStatsService;->onPackageRemoved(Ljava/lang/String;J)I
+PLcom/android/server/usage/UserUsageStatsService;->onTimeChanged(JJ)V
+HPLcom/android/server/usage/UserUsageStatsService;->persistActiveStats()V
 HPLcom/android/server/usage/UserUsageStatsService;->printEvent(Lcom/android/internal/util/IndentingPrintWriter;Landroid/app/usage/UsageEvents$Event;Z)V
-PLcom/android/server/usage/UserUsageStatsService;->printEventAggregation(Lcom/android/internal/util/IndentingPrintWriter;Ljava/lang/String;Lcom/android/server/usage/IntervalStats$EventTracker;Z)V
+HPLcom/android/server/usage/UserUsageStatsService;->printEventAggregation(Lcom/android/internal/util/IndentingPrintWriter;Ljava/lang/String;Lcom/android/server/usage/IntervalStats$EventTracker;Z)V
 HPLcom/android/server/usage/UserUsageStatsService;->printIntervalStats(Lcom/android/internal/util/IndentingPrintWriter;Lcom/android/server/usage/IntervalStats;ZZLjava/lang/String;)V
-PLcom/android/server/usage/UserUsageStatsService;->printLast24HrEvents(Lcom/android/internal/util/IndentingPrintWriter;ZLjava/lang/String;)V
-PLcom/android/server/usage/UserUsageStatsService;->queryEvents(JJZ)Landroid/app/usage/UsageEvents;
-PLcom/android/server/usage/UserUsageStatsService;->queryStats(IJJLcom/android/server/usage/UsageStatsDatabase$StatCombiner;)Ljava/util/List;
-PLcom/android/server/usage/UserUsageStatsService;->queryUsageStats(IJJ)Ljava/util/List;
+HPLcom/android/server/usage/UserUsageStatsService;->printLast24HrEvents(Lcom/android/internal/util/IndentingPrintWriter;ZLjava/lang/String;)V
+PLcom/android/server/usage/UserUsageStatsService;->pruneUninstalledPackagesData()Z
+HPLcom/android/server/usage/UserUsageStatsService;->queryEvents(JJZ)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UserUsageStatsService;->queryEvents(JJZZ)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UserUsageStatsService;->queryEventsForPackage(JJLjava/lang/String;Z)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UserUsageStatsService;->queryStats(IJJLcom/android/server/usage/UsageStatsDatabase$StatCombiner;)Ljava/util/List;
+HPLcom/android/server/usage/UserUsageStatsService;->queryUsageStats(IJJ)Ljava/util/List;
 PLcom/android/server/usage/UserUsageStatsService;->readPackageMappingsLocked(Ljava/util/HashMap;)V
 HPLcom/android/server/usage/UserUsageStatsService;->reportEvent(Landroid/app/usage/UsageEvents$Event;)V
 HPLcom/android/server/usage/UserUsageStatsService;->rolloverStats(J)V
 HPLcom/android/server/usage/UserUsageStatsService;->updatePackageMappingsLocked(Ljava/util/HashMap;)V
 PLcom/android/server/usage/UserUsageStatsService;->updateRolloverDeadline()V
+PLcom/android/server/usage/UserUsageStatsService;->userStopped()V
 HPLcom/android/server/usage/UserUsageStatsService;->validRange(JJJ)Z
 HSPLcom/android/server/usb/-$$Lambda$UsbHostManager$XT3F5aQci4H6VWSBYBQQNSzpnvs;-><init>(Lcom/android/server/usb/UsbHostManager;)V
 HSPLcom/android/server/usb/-$$Lambda$UsbHostManager$XT3F5aQci4H6VWSBYBQQNSzpnvs;->run()V
 HSPLcom/android/server/usb/-$$Lambda$UsbPortManager$FUqGOOupcl6RrRkZBk-BnrRQyPI;-><init>(Lcom/android/server/usb/UsbPortManager;Landroid/content/Intent;)V
 HSPLcom/android/server/usb/-$$Lambda$UsbPortManager$FUqGOOupcl6RrRkZBk-BnrRQyPI;->run()V
 HSPLcom/android/server/usb/-$$Lambda$UsbProfileGroupSettingsManager$IQKTzU0q3lyaW9nLL_sbxJPW8ME;-><init>(Lcom/android/server/usb/UsbProfileGroupSettingsManager;)V
+PLcom/android/server/usb/-$$Lambda$UsbProfileGroupSettingsManager$_G1PjxMa22pAIRMzYCwyomX8uhk;-><init>(Lcom/android/server/usb/UsbProfileGroupSettingsManager;)V
+PLcom/android/server/usb/-$$Lambda$UsbProfileGroupSettingsManager$_G1PjxMa22pAIRMzYCwyomX8uhk;->run()V
+HSPLcom/android/server/usb/-$$Lambda$UsbService$Lifecycle$KjOG0MXO3C0J-L5Ymrj6FnSwXwQ;-><init>(Lcom/android/server/usb/UsbService$Lifecycle;)V
+HSPLcom/android/server/usb/-$$Lambda$UsbService$Lifecycle$KjOG0MXO3C0J-L5Ymrj6FnSwXwQ;->run()V
+HSPLcom/android/server/usb/-$$Lambda$UsbService$Lifecycle$sV0bZ5BCi6DR9FlGZbY2PyYUP58;-><init>(Lcom/android/server/usb/UsbService$Lifecycle;)V
+HSPLcom/android/server/usb/-$$Lambda$UsbService$Lifecycle$sV0bZ5BCi6DR9FlGZbY2PyYUP58;->run()V
 HSPLcom/android/server/usb/MtpNotificationManager$Receiver;-><init>(Lcom/android/server/usb/MtpNotificationManager;)V
 HSPLcom/android/server/usb/MtpNotificationManager$Receiver;-><init>(Lcom/android/server/usb/MtpNotificationManager;Lcom/android/server/usb/MtpNotificationManager$1;)V
 HSPLcom/android/server/usb/MtpNotificationManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/MtpNotificationManager$OnOpenInAppListener;)V
+PLcom/android/server/usb/MtpNotificationManager;->hideNotification(I)V
 PLcom/android/server/usb/MtpNotificationManager;->isMtpDevice(Landroid/hardware/usb/UsbDevice;)Z
+PLcom/android/server/usb/MtpNotificationManager;->shouldShowNotification(Landroid/content/pm/PackageManager;Landroid/hardware/usb/UsbDevice;)Z
+PLcom/android/server/usb/UsbAlsaDevice;-><init>(Landroid/media/IAudioService;IILjava/lang/String;ZZZZ)V
+PLcom/android/server/usb/UsbAlsaDevice;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
+PLcom/android/server/usb/UsbAlsaDevice;->getAlsaCardDeviceString()Ljava/lang/String;
+PLcom/android/server/usb/UsbAlsaDevice;->getCardNum()I
+PLcom/android/server/usb/UsbAlsaDevice;->getDeviceAddress()Ljava/lang/String;
+PLcom/android/server/usb/UsbAlsaDevice;->isInputJackConnected()Z
+PLcom/android/server/usb/UsbAlsaDevice;->isOutputJackConnected()Z
+PLcom/android/server/usb/UsbAlsaDevice;->setDeviceNameAndDescription(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/usb/UsbAlsaDevice;->start()V
+PLcom/android/server/usb/UsbAlsaDevice;->startJackDetect()V
+PLcom/android/server/usb/UsbAlsaDevice;->stop()V
+PLcom/android/server/usb/UsbAlsaDevice;->stopJackDetect()V
+PLcom/android/server/usb/UsbAlsaDevice;->toString()Ljava/lang/String;
+PLcom/android/server/usb/UsbAlsaDevice;->updateWiredDeviceConnectionState(Z)V
+PLcom/android/server/usb/UsbAlsaJackDetector;-><init>(Lcom/android/server/usb/UsbAlsaDevice;)V
+PLcom/android/server/usb/UsbAlsaJackDetector;->isInputJackConnected()Z
+PLcom/android/server/usb/UsbAlsaJackDetector;->isOutputJackConnected()Z
+PLcom/android/server/usb/UsbAlsaJackDetector;->jackDetectCallback()Z
+PLcom/android/server/usb/UsbAlsaJackDetector;->pleaseStop()V
+PLcom/android/server/usb/UsbAlsaJackDetector;->run()V
+PLcom/android/server/usb/UsbAlsaJackDetector;->startJackDetect(Lcom/android/server/usb/UsbAlsaDevice;)Lcom/android/server/usb/UsbAlsaJackDetector;
 HSPLcom/android/server/usb/UsbAlsaManager$BlackListEntry;-><init>(III)V
 HSPLcom/android/server/usb/UsbAlsaManager;-><clinit>()V
 HSPLcom/android/server/usb/UsbAlsaManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/usb/UsbAlsaManager;->deselectAlsaDevice()V
 PLcom/android/server/usb/UsbAlsaManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 PLcom/android/server/usb/UsbAlsaManager;->getAlsaDeviceListIndexFor(Ljava/lang/String;)I
+PLcom/android/server/usb/UsbAlsaManager;->isDeviceBlacklisted(III)Z
+PLcom/android/server/usb/UsbAlsaManager;->logDevices(Ljava/lang/String;)V
+PLcom/android/server/usb/UsbAlsaManager;->removeAlsaDeviceFromList(Ljava/lang/String;)Lcom/android/server/usb/UsbAlsaDevice;
+PLcom/android/server/usb/UsbAlsaManager;->selectAlsaDevice(Lcom/android/server/usb/UsbAlsaDevice;)V
+PLcom/android/server/usb/UsbAlsaManager;->selectDefaultDevice()Lcom/android/server/usb/UsbAlsaDevice;
 PLcom/android/server/usb/UsbAlsaManager;->setPeripheralMidiState(ZII)V
 HSPLcom/android/server/usb/UsbAlsaManager;->systemReady()V
 PLcom/android/server/usb/UsbAlsaManager;->usbDeviceAdded(Ljava/lang/String;Landroid/hardware/usb/UsbDevice;Lcom/android/server/usb/descriptors/UsbDescriptorParser;)V
 PLcom/android/server/usb/UsbAlsaManager;->usbDeviceRemoved(Ljava/lang/String;)V
 HSPLcom/android/server/usb/UsbDeviceManager$1;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
-PLcom/android/server/usb/UsbDeviceManager$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/usb/UsbDeviceManager$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/usb/UsbDeviceManager$2;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
-PLcom/android/server/usb/UsbDeviceManager$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/usb/UsbDeviceManager$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/usb/UsbDeviceManager$3;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
 PLcom/android/server/usb/UsbDeviceManager$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/usb/UsbDeviceManager$4;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
+HSPLcom/android/server/usb/UsbDeviceManager$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler$AdbTransport;-><init>(Lcom/android/server/usb/UsbDeviceManager$UsbHandler;)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler$AdbTransport;->onAdbEnabled(Z)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;-><init>(Landroid/os/Looper;Landroid/content/Context;Lcom/android/server/usb/UsbDeviceManager;Lcom/android/server/usb/UsbAlsaManager;Lcom/android/server/usb/UsbPermissionManager;)V
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->dumpFunctions(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;JJ)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->finishBoot()V
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->getAppliedFunctions(J)J
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->getChargingFunctions()J
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->getCurrentAccessory()Landroid/hardware/usb/UsbAccessory;
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->getEnabledFunctions()J
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->getPinnedSharedPrefs(Landroid/content/Context;)Landroid/content/SharedPreferences;
-PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isAdbEnabled()Z
+HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isAdbEnabled()Z
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isTv()Z
-PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isUsbDataTransferActive(J)Z
-PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isUsbStateChanged(Landroid/content/Intent;)Z
-PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isUsbTransferAllowed()Z
+HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isUsbDataTransferActive(J)Z
+HPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isUsbStateChanged(Landroid/content/Intent;)Z
+HPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isUsbTransferAllowed()Z
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->notifyAccessoryModeExit()V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendMessage(ILjava/lang/Object;)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendMessage(ILjava/lang/Object;Z)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendMessage(IZ)V
+HPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendMessageDelayed(IZJ)V
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendStickyBroadcast(Landroid/content/Intent;)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->setAdbEnabled(Z)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->setScreenUnlockedFunctions()V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->setSystemProperty(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateAdbNotification(Z)V
-PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateHostState(Landroid/hardware/usb/UsbPort;Landroid/hardware/usb/UsbPortStatus;)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateCurrentAccessory()V
+HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateHostState(Landroid/hardware/usb/UsbPort;Landroid/hardware/usb/UsbPortStatus;)V
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateMidiFunction()V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateState(Ljava/lang/String;)V
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbFunctions()V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbNotification(Z)V
-PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbStateBroadcastIfNeeded(J)V
+HPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbStateBroadcastIfNeeded(J)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal$ServiceNotification;-><init>(Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal$ServiceNotification;->onRegistration(Ljava/lang/String;Ljava/lang/String;Z)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal$UsbGadgetCallback;-><init>(Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal$UsbGadgetCallback;-><init>(Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;IJZ)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal$UsbGadgetCallback;->getCurrentUsbFunctionsCb(JI)V
+HPLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal$UsbGadgetCallback;->setCurrentUsbFunctionsCb(JI)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal$UsbGadgetDeathRecipient;-><init>(Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;-><init>(Landroid/os/Looper;Landroid/content/Context;Lcom/android/server/usb/UsbDeviceManager;Lcom/android/server/usb/UsbAlsaManager;Lcom/android/server/usb/UsbPermissionManager;)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;->access$700(Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;)I
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;->setEnabledFunctions(JZ)V
+HPLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;->setEnabledFunctions(JZ)V
+HPLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;->setUsbConfig(JZ)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbUEventObserver;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbUEventObserver;-><init>(Lcom/android/server/usb/UsbDeviceManager;Lcom/android/server/usb/UsbDeviceManager$1;)V
-PLcom/android/server/usb/UsbDeviceManager$UsbUEventObserver;->onUEvent(Landroid/os/UEventObserver$UEvent;)V
+HPLcom/android/server/usb/UsbDeviceManager$UsbUEventObserver;->onUEvent(Landroid/os/UEventObserver$UEvent;)V
 HSPLcom/android/server/usb/UsbDeviceManager;-><clinit>()V
 HSPLcom/android/server/usb/UsbDeviceManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbAlsaManager;Lcom/android/server/usb/UsbSettingsManager;Lcom/android/server/usb/UsbPermissionManager;)V
-PLcom/android/server/usb/UsbDeviceManager;->access$000(Lcom/android/server/usb/UsbDeviceManager;)Lcom/android/server/usb/UsbDeviceManager$UsbHandler;
+HSPLcom/android/server/usb/UsbDeviceManager;->access$000(Lcom/android/server/usb/UsbDeviceManager;)Lcom/android/server/usb/UsbDeviceManager$UsbHandler;
+PLcom/android/server/usb/UsbDeviceManager;->access$100(Lcom/android/server/usb/UsbDeviceManager;)V
 HSPLcom/android/server/usb/UsbDeviceManager;->access$300()Ljava/lang/String;
+PLcom/android/server/usb/UsbDeviceManager;->access$400()Ljava/util/Set;
 PLcom/android/server/usb/UsbDeviceManager;->bootCompleted()V
 PLcom/android/server/usb/UsbDeviceManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
+PLcom/android/server/usb/UsbDeviceManager;->getAccessoryStrings()[Ljava/lang/String;
+PLcom/android/server/usb/UsbDeviceManager;->getControlFd(J)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/usb/UsbDeviceManager;->getCurrentAccessory()Landroid/hardware/usb/UsbAccessory;
+PLcom/android/server/usb/UsbDeviceManager;->getCurrentFunctions()J
+PLcom/android/server/usb/UsbDeviceManager;->getCurrentSettings()Lcom/android/server/usb/UsbProfileGroupSettingsManager;
 HSPLcom/android/server/usb/UsbDeviceManager;->initRndisAddress()V
-PLcom/android/server/usb/UsbDeviceManager;->onAwakeStateChanged(Z)V
-PLcom/android/server/usb/UsbDeviceManager;->onKeyguardStateChanged(Z)V
+HPLcom/android/server/usb/UsbDeviceManager;->onAwakeStateChanged(Z)V
+HPLcom/android/server/usb/UsbDeviceManager;->onKeyguardStateChanged(Z)V
 PLcom/android/server/usb/UsbDeviceManager;->onUnlockUser(I)V
+PLcom/android/server/usb/UsbDeviceManager;->openAccessory(Landroid/hardware/usb/UsbAccessory;Lcom/android/server/usb/UsbUserPermissionManager;I)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/usb/UsbDeviceManager;->setCurrentFunctions(J)V
 HSPLcom/android/server/usb/UsbDeviceManager;->setCurrentUser(ILcom/android/server/usb/UsbProfileGroupSettingsManager;)V
+PLcom/android/server/usb/UsbDeviceManager;->startAccessoryMode()V
 HSPLcom/android/server/usb/UsbDeviceManager;->systemReady()V
+HSPLcom/android/server/usb/UsbDeviceManager;->updateUserRestrictions()V
 HSPLcom/android/server/usb/UsbHandlerManager;-><clinit>()V
 HSPLcom/android/server/usb/UsbHandlerManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/usb/UsbHandlerManager;->confirmUsbHandler(Landroid/content/pm/ResolveInfo;Landroid/hardware/usb/UsbDevice;Landroid/hardware/usb/UsbAccessory;)V
+PLcom/android/server/usb/UsbHandlerManager;->createDialogIntent()Landroid/content/Intent;
+PLcom/android/server/usb/UsbHandlerManager;->selectUsbHandler(Ljava/util/ArrayList;Landroid/os/UserHandle;Landroid/content/Intent;)V
 PLcom/android/server/usb/UsbHostManager$ConnectionRecord;-><init>(Lcom/android/server/usb/UsbHostManager;Ljava/lang/String;I[B)V
+PLcom/android/server/usb/UsbHostManager$ConnectionRecord;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 HSPLcom/android/server/usb/UsbHostManager;-><clinit>()V
 HSPLcom/android/server/usb/UsbHostManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbAlsaManager;Lcom/android/server/usb/UsbPermissionManager;)V
 PLcom/android/server/usb/UsbHostManager;->addConnectionRecord(Ljava/lang/String;I[B)V
+PLcom/android/server/usb/UsbHostManager;->checkUsbInterfacesBlackListed(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Z
 PLcom/android/server/usb/UsbHostManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 PLcom/android/server/usb/UsbHostManager;->getCurrentUserSettings()Lcom/android/server/usb/UsbProfileGroupSettingsManager;
-PLcom/android/server/usb/UsbHostManager;->getDeviceList(Landroid/os/Bundle;)V
+HSPLcom/android/server/usb/UsbHostManager;->getDeviceList(Landroid/os/Bundle;)V
 PLcom/android/server/usb/UsbHostManager;->getUsbDeviceConnectionHandler()Landroid/content/ComponentName;
+PLcom/android/server/usb/UsbHostManager;->isBlackListed(II)Z
+PLcom/android/server/usb/UsbHostManager;->isBlackListed(Ljava/lang/String;)Z
 HSPLcom/android/server/usb/UsbHostManager;->lambda$XT3F5aQci4H6VWSBYBQQNSzpnvs(Lcom/android/server/usb/UsbHostManager;)V
 PLcom/android/server/usb/UsbHostManager;->logUsbDevice(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)V
+PLcom/android/server/usb/UsbHostManager;->openDevice(Ljava/lang/String;Lcom/android/server/usb/UsbUserPermissionManager;Ljava/lang/String;II)Landroid/os/ParcelFileDescriptor;
 HSPLcom/android/server/usb/UsbHostManager;->setCurrentUserSettings(Lcom/android/server/usb/UsbProfileGroupSettingsManager;)V
 HSPLcom/android/server/usb/UsbHostManager;->setUsbDeviceConnectionHandler(Landroid/content/ComponentName;)V
 HSPLcom/android/server/usb/UsbHostManager;->systemReady()V
@@ -18778,11 +31525,13 @@
 HSPLcom/android/server/usb/UsbPermissionManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbService;)V
 PLcom/android/server/usb/UsbPermissionManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 PLcom/android/server/usb/UsbPermissionManager;->getPermissionsForUser(I)Lcom/android/server/usb/UsbUserPermissionManager;
+PLcom/android/server/usb/UsbPermissionManager;->usbAccessoryRemoved(Landroid/hardware/usb/UsbAccessory;)V
 PLcom/android/server/usb/UsbPermissionManager;->usbDeviceRemoved(Landroid/hardware/usb/UsbDevice;)V
 HSPLcom/android/server/usb/UsbPortManager$1;-><init>(Lcom/android/server/usb/UsbPortManager;Landroid/os/Looper;)V
 HSPLcom/android/server/usb/UsbPortManager$1;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/usb/UsbPortManager$DeathRecipient;-><init>(Lcom/android/server/usb/UsbPortManager;Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/usb/UsbPortManager$HALCallback;-><init>(Lcom/android/internal/util/IndentingPrintWriter;Lcom/android/server/usb/UsbPortManager;)V
+HSPLcom/android/server/usb/UsbPortManager$HALCallback;->notifyPortStatusChange_1_1(Ljava/util/ArrayList;I)V
 HSPLcom/android/server/usb/UsbPortManager$HALCallback;->notifyPortStatusChange_1_2(Ljava/util/ArrayList;I)V
 HSPLcom/android/server/usb/UsbPortManager$PortInfo;-><init>(Landroid/hardware/usb/UsbManager;Ljava/lang/String;IIZZ)V
 PLcom/android/server/usb/UsbPortManager$PortInfo;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
@@ -18807,10 +31556,12 @@
 HSPLcom/android/server/usb/UsbPortManager;->connectToProxy(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/usb/UsbPortManager;->convertContaminantDetectionStatusToProto(I)I
 PLcom/android/server/usb/UsbPortManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
+PLcom/android/server/usb/UsbPortManager;->enableContaminantDetection(Ljava/lang/String;ZLcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/usb/UsbPortManager;->enableContaminantDetectionIfNeeded(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/usb/UsbPortManager;->getPortStatus(Ljava/lang/String;)Landroid/hardware/usb/UsbPortStatus;
-PLcom/android/server/usb/UsbPortManager;->getPorts()[Landroid/hardware/usb/UsbPort;
+HSPLcom/android/server/usb/UsbPortManager;->getPortStatus(Ljava/lang/String;)Landroid/hardware/usb/UsbPortStatus;
+HSPLcom/android/server/usb/UsbPortManager;->getPorts()[Landroid/hardware/usb/UsbPort;
 HSPLcom/android/server/usb/UsbPortManager;->handlePortAddedLocked(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/usb/UsbPortManager;->handlePortChangedLocked(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/usb/UsbPortManager;->handlePortLocked(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/usb/UsbPortManager;->lambda$sendPortChangedBroadcastLocked$0$UsbPortManager(Landroid/content/Intent;)V
 HSPLcom/android/server/usb/UsbPortManager;->logAndPrint(ILcom/android/internal/util/IndentingPrintWriter;Ljava/lang/String;)V
@@ -18821,93 +31572,217 @@
 HSPLcom/android/server/usb/UsbPortManager;->updatePortsLocked(Lcom/android/internal/util/IndentingPrintWriter;Ljava/util/ArrayList;)V
 HSPLcom/android/server/usb/UsbProfileGroupSettingsManager$MyPackageMonitor;-><init>(Lcom/android/server/usb/UsbProfileGroupSettingsManager;)V
 HSPLcom/android/server/usb/UsbProfileGroupSettingsManager$MyPackageMonitor;-><init>(Lcom/android/server/usb/UsbProfileGroupSettingsManager;Lcom/android/server/usb/UsbProfileGroupSettingsManager$1;)V
-PLcom/android/server/usb/UsbProfileGroupSettingsManager$MyPackageMonitor;->onPackageAdded(Ljava/lang/String;I)V
-PLcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;-><init>(Ljava/lang/String;Landroid/os/UserHandle;)V
-PLcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;-><init>(Ljava/lang/String;Landroid/os/UserHandle;Lcom/android/server/usb/UsbProfileGroupSettingsManager$1;)V
+HPLcom/android/server/usb/UsbProfileGroupSettingsManager$MyPackageMonitor;->onPackageAdded(Ljava/lang/String;I)V
+HPLcom/android/server/usb/UsbProfileGroupSettingsManager$MyPackageMonitor;->onPackageRemoved(Ljava/lang/String;I)V
+HSPLcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;-><init>(Ljava/lang/String;Landroid/os/UserHandle;)V
+HSPLcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;-><init>(Ljava/lang/String;Landroid/os/UserHandle;Lcom/android/server/usb/UsbProfileGroupSettingsManager$1;)V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;->toString()Ljava/lang/String;
 HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;-><clinit>()V
 HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;-><init>(Landroid/content/Context;Landroid/os/UserHandle;Lcom/android/server/usb/UsbSettingsManager;Lcom/android/server/usb/UsbHandlerManager;)V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->access$000(Lcom/android/server/usb/UsbProfileGroupSettingsManager;)Landroid/os/UserHandle;
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->access$100(Lcom/android/server/usb/UsbProfileGroupSettingsManager;)Landroid/os/UserManager;
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->access$300(Lcom/android/server/usb/UsbProfileGroupSettingsManager;Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;)V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->accessoryAttached(Landroid/hardware/usb/UsbAccessory;)V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->clearCompatibleMatchesLocked(Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;Landroid/hardware/usb/DeviceFilter;)Z
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->clearDefaults(Ljava/lang/String;Landroid/os/UserHandle;)V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->clearPackageDefaultsLocked(Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;)Z
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->createDeviceAttachedIntent(Landroid/hardware/usb/UsbDevice;)Landroid/content/Intent;
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->deviceAttached(Landroid/hardware/usb/UsbDevice;)V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->getAccessoryFilters(Landroid/content/pm/PackageManager;Landroid/content/pm/ResolveInfo;)Ljava/util/ArrayList;
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->getAccessoryMatchesLocked(Landroid/hardware/usb/UsbAccessory;Landroid/content/Intent;)Ljava/util/ArrayList;
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->getDefaultActivityLocked(Ljava/util/ArrayList;Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;)Landroid/content/pm/ActivityInfo;
-PLcom/android/server/usb/UsbProfileGroupSettingsManager;->getDeviceFilters(Landroid/content/pm/PackageManager;Landroid/content/pm/ResolveInfo;)Ljava/util/ArrayList;
+HPLcom/android/server/usb/UsbProfileGroupSettingsManager;->getDeviceFilters(Landroid/content/pm/PackageManager;Landroid/content/pm/ResolveInfo;)Ljava/util/ArrayList;
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->getDeviceMatchesLocked(Landroid/hardware/usb/UsbDevice;Landroid/content/Intent;)Ljava/util/ArrayList;
-PLcom/android/server/usb/UsbProfileGroupSettingsManager;->handlePackageAdded(Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;)V
-PLcom/android/server/usb/UsbProfileGroupSettingsManager;->handlePackageAddedLocked(Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;Landroid/content/pm/ActivityInfo;Ljava/lang/String;)Z
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->getSerial(Landroid/os/UserHandle;)I
+HPLcom/android/server/usb/UsbProfileGroupSettingsManager;->handlePackageAdded(Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;)V
+HPLcom/android/server/usb/UsbProfileGroupSettingsManager;->handlePackageAddedLocked(Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;Landroid/content/pm/ActivityInfo;Ljava/lang/String;)Z
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->hasDefaults(Ljava/lang/String;Landroid/os/UserHandle;)Z
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->isForwardMatch(Landroid/content/pm/ResolveInfo;)Z
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->lambda$scheduleWriteSettingsLocked$1$UsbProfileGroupSettingsManager()V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->packageMatchesLocked(Landroid/content/pm/ResolveInfo;Landroid/hardware/usb/UsbDevice;Landroid/hardware/usb/UsbAccessory;)Z
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->preferHighPriority(Ljava/util/ArrayList;)Ljava/util/ArrayList;
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->queryIntentActivitiesForAllProfiles(Landroid/content/Intent;)Ljava/util/ArrayList;
+HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->readPreference(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->readSettingsLocked()V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->removeForwardIntentIfNotNeeded(Ljava/util/ArrayList;)Ljava/util/ArrayList;
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->removeUser(Landroid/os/UserHandle;)V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->resolveActivity(Landroid/content/Intent;Landroid/hardware/usb/UsbDevice;Z)V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->resolveActivity(Landroid/content/Intent;Ljava/util/ArrayList;Landroid/content/pm/ActivityInfo;Landroid/hardware/usb/UsbDevice;Landroid/hardware/usb/UsbAccessory;)V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->scheduleWriteSettingsLocked()V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->setDevicePackage(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->upgradeSingleUserLocked()V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->usbDeviceRemoved(Landroid/hardware/usb/UsbDevice;)V
 PLcom/android/server/usb/UsbSerialReader;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbPermissionManager;Ljava/lang/String;)V
-PLcom/android/server/usb/UsbSerialReader;->getSerial(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/usb/UsbSerialReader;->enforcePackageBelongsToUid(ILjava/lang/String;)V
+HPLcom/android/server/usb/UsbSerialReader;->getSerial(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/usb/UsbSerialReader;->setDevice(Ljava/lang/Object;)V
 HSPLcom/android/server/usb/UsbService$1;-><init>(Lcom/android/server/usb/UsbService;)V
-PLcom/android/server/usb/UsbService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/usb/UsbService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/usb/UsbService$Lifecycle;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/usb/UsbService$Lifecycle;->lambda$onBootPhase$1$UsbService$Lifecycle()V
+HSPLcom/android/server/usb/UsbService$Lifecycle;->lambda$onStart$0$UsbService$Lifecycle()V
 HSPLcom/android/server/usb/UsbService$Lifecycle;->onBootPhase(I)V
 HSPLcom/android/server/usb/UsbService$Lifecycle;->onStart()V
+PLcom/android/server/usb/UsbService$Lifecycle;->onStopUser(I)V
+PLcom/android/server/usb/UsbService$Lifecycle;->onStopUser(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/usb/UsbService$Lifecycle;->onUnlockUser(I)V
+PLcom/android/server/usb/UsbService$Lifecycle;->onUnlockUser(Lcom/android/server/SystemService$TargetUser;)V
 HSPLcom/android/server/usb/UsbService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/usb/UsbService;->access$000(Lcom/android/server/usb/UsbService;Landroid/os/UserHandle;)V
+PLcom/android/server/usb/UsbService;->access$100(Lcom/android/server/usb/UsbService;Landroid/os/UserHandle;)V
+HSPLcom/android/server/usb/UsbService;->access$200(Lcom/android/server/usb/UsbService;)Lcom/android/server/usb/UsbDeviceManager;
 PLcom/android/server/usb/UsbService;->bootCompleted()V
 PLcom/android/server/usb/UsbService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/usb/UsbService;->getControlFd(J)Landroid/os/ParcelFileDescriptor;
 PLcom/android/server/usb/UsbService;->getCurrentAccessory()Landroid/hardware/usb/UsbAccessory;
 PLcom/android/server/usb/UsbService;->getCurrentFunctions()J
-PLcom/android/server/usb/UsbService;->getDeviceList(Landroid/os/Bundle;)V
-PLcom/android/server/usb/UsbService;->getPortStatus(Ljava/lang/String;)Landroid/hardware/usb/UsbPortStatus;
-PLcom/android/server/usb/UsbService;->getPorts()Ljava/util/List;
+HSPLcom/android/server/usb/UsbService;->getDeviceList(Landroid/os/Bundle;)V
+PLcom/android/server/usb/UsbService;->getPermissionsForUser(I)Lcom/android/server/usb/UsbUserPermissionManager;
+HSPLcom/android/server/usb/UsbService;->getPortStatus(Ljava/lang/String;)Landroid/hardware/usb/UsbPortStatus;
+HSPLcom/android/server/usb/UsbService;->getPorts()Ljava/util/List;
 PLcom/android/server/usb/UsbService;->getSettingsForUser(I)Lcom/android/server/usb/UsbUserSettingsManager;
+PLcom/android/server/usb/UsbService;->grantDevicePermission(Landroid/hardware/usb/UsbDevice;I)V
+PLcom/android/server/usb/UsbService;->hasAccessoryPermission(Landroid/hardware/usb/UsbAccessory;)Z
+HPLcom/android/server/usb/UsbService;->hasDefaults(Ljava/lang/String;I)Z
+PLcom/android/server/usb/UsbService;->hasDevicePermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;)Z
+PLcom/android/server/usb/UsbService;->onStopUser(Landroid/os/UserHandle;)V
 HSPLcom/android/server/usb/UsbService;->onSwitchUser(I)V
 PLcom/android/server/usb/UsbService;->onUnlockUser(I)V
+PLcom/android/server/usb/UsbService;->openAccessory(Landroid/hardware/usb/UsbAccessory;)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/usb/UsbService;->openDevice(Ljava/lang/String;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/usb/UsbService;->requestDevicePermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;Landroid/app/PendingIntent;)V
+PLcom/android/server/usb/UsbService;->setCurrentFunctions(J)V
+PLcom/android/server/usb/UsbService;->setDevicePackage(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;I)V
 HSPLcom/android/server/usb/UsbService;->systemReady()V
 HSPLcom/android/server/usb/UsbSettingsManager;-><clinit>()V
 HSPLcom/android/server/usb/UsbSettingsManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbService;)V
 PLcom/android/server/usb/UsbSettingsManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 HSPLcom/android/server/usb/UsbSettingsManager;->getSettingsForProfileGroup(Landroid/os/UserHandle;)Lcom/android/server/usb/UsbProfileGroupSettingsManager;
 PLcom/android/server/usb/UsbSettingsManager;->getSettingsForUser(I)Lcom/android/server/usb/UsbUserSettingsManager;
+PLcom/android/server/usb/UsbSettingsManager;->remove(Landroid/os/UserHandle;)V
 PLcom/android/server/usb/UsbUserPermissionManager;-><clinit>()V
 PLcom/android/server/usb/UsbUserPermissionManager;-><init>(Landroid/content/Context;Landroid/os/UserHandle;Lcom/android/server/usb/UsbUserSettingsManager;)V
+PLcom/android/server/usb/UsbUserPermissionManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbUserSettingsManager;)V
+PLcom/android/server/usb/UsbUserPermissionManager;->checkPermission(Landroid/hardware/usb/UsbAccessory;I)V
+PLcom/android/server/usb/UsbUserPermissionManager;->checkPermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;II)V
 PLcom/android/server/usb/UsbUserPermissionManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
+PLcom/android/server/usb/UsbUserPermissionManager;->grantAccessoryPermission(Landroid/hardware/usb/UsbAccessory;I)V
+PLcom/android/server/usb/UsbUserPermissionManager;->grantDevicePermission(Landroid/hardware/usb/UsbDevice;I)V
+PLcom/android/server/usb/UsbUserPermissionManager;->hasPermission(Landroid/hardware/usb/UsbAccessory;I)Z
+PLcom/android/server/usb/UsbUserPermissionManager;->hasPermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;II)Z
+PLcom/android/server/usb/UsbUserPermissionManager;->isCameraDevicePresent(Landroid/hardware/usb/UsbDevice;)Z
 PLcom/android/server/usb/UsbUserPermissionManager;->readPermissionsLocked()V
+PLcom/android/server/usb/UsbUserPermissionManager;->removeAccessoryPermissions(Landroid/hardware/usb/UsbAccessory;)V
+PLcom/android/server/usb/UsbUserPermissionManager;->removeDevicePermissions(Landroid/hardware/usb/UsbDevice;)V
+PLcom/android/server/usb/UsbUserPermissionManager;->requestPermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;Landroid/app/PendingIntent;II)V
+PLcom/android/server/usb/UsbUserPermissionManager;->requestPermissionDialog(Landroid/hardware/usb/UsbDevice;Landroid/hardware/usb/UsbAccessory;ZLjava/lang/String;ILandroid/content/Context;Landroid/app/PendingIntent;)V
+PLcom/android/server/usb/UsbUserPermissionManager;->requestPermissionDialog(Landroid/hardware/usb/UsbDevice;Landroid/hardware/usb/UsbAccessory;ZLjava/lang/String;Landroid/app/PendingIntent;I)V
 PLcom/android/server/usb/UsbUserSettingsManager;-><clinit>()V
 PLcom/android/server/usb/UsbUserSettingsManager;-><init>(Landroid/content/Context;Landroid/os/UserHandle;)V
-PLcom/android/server/usb/UsbUserSettingsManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
+PLcom/android/server/usb/UsbUserSettingsManager;->canBeDefault(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;)Z
+HPLcom/android/server/usb/UsbUserSettingsManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
+PLcom/android/server/usb/UsbUserSettingsManager;->getPackageActivities(Ljava/lang/String;)[Landroid/content/pm/ActivityInfo;
 PLcom/android/server/usb/UsbUserSettingsManager;->queryIntentActivities(Landroid/content/Intent;)Ljava/util/List;
 PLcom/android/server/usb/descriptors/ByteStream;-><init>([B)V
-PLcom/android/server/usb/descriptors/ByteStream;->available()I
-PLcom/android/server/usb/descriptors/ByteStream;->getByte()B
+PLcom/android/server/usb/descriptors/ByteStream;->advance(I)V
+HPLcom/android/server/usb/descriptors/ByteStream;->available()I
+HPLcom/android/server/usb/descriptors/ByteStream;->getByte()B
 PLcom/android/server/usb/descriptors/ByteStream;->getReadCount()I
-PLcom/android/server/usb/descriptors/ByteStream;->getUnsignedByte()I
+HPLcom/android/server/usb/descriptors/ByteStream;->getUnsignedByte()I
 PLcom/android/server/usb/descriptors/ByteStream;->resetReadCount()V
+PLcom/android/server/usb/descriptors/ByteStream;->unpackUsbInt()I
 PLcom/android/server/usb/descriptors/ByteStream;->unpackUsbShort()I
+PLcom/android/server/usb/descriptors/ByteStream;->unpackUsbTriple()I
+PLcom/android/server/usb/descriptors/Usb10ACHeader;-><init>(IBBII)V
+PLcom/android/server/usb/descriptors/Usb10ACHeader;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/Usb10ACInputTerminal;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/Usb10ACInputTerminal;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/Usb10ACMixerUnit;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/Usb10ACMixerUnit;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/Usb10ACOutputTerminal;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/Usb10ACOutputTerminal;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/Usb10ASFormatI;-><init>(IBBBI)V
+PLcom/android/server/usb/descriptors/Usb10ASFormatI;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/Usb10ASGeneral;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/Usb10ASGeneral;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/Usb20ACHeader;-><init>(IBBII)V
+PLcom/android/server/usb/descriptors/Usb20ACHeader;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/Usb20ACInputTerminal;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/Usb20ACInputTerminal;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/Usb20ACMixerUnit;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/Usb20ACMixerUnit;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/Usb20ACOutputTerminal;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/Usb20ACOutputTerminal;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/Usb20ASFormatI;-><init>(IBBBI)V
+PLcom/android/server/usb/descriptors/Usb20ASFormatI;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/Usb20ASGeneral;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/Usb20ASGeneral;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbACAudioStreamEndpoint;-><init>(IBI)V
+PLcom/android/server/usb/descriptors/UsbACAudioStreamEndpoint;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbACEndpoint;-><init>(IBI)V
+PLcom/android/server/usb/descriptors/UsbACEndpoint;->allocDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;IB)Lcom/android/server/usb/descriptors/UsbDescriptor;
+PLcom/android/server/usb/descriptors/UsbACEndpoint;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbACFeatureUnit;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/UsbACHeaderInterface;-><init>(IBBII)V
+PLcom/android/server/usb/descriptors/UsbACInterface;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/UsbACInterface;->allocAudioControlDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;Lcom/android/server/usb/descriptors/ByteStream;IBBI)Lcom/android/server/usb/descriptors/UsbDescriptor;
+PLcom/android/server/usb/descriptors/UsbACInterface;->allocAudioStreamingDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;Lcom/android/server/usb/descriptors/ByteStream;IBBI)Lcom/android/server/usb/descriptors/UsbDescriptor;
+PLcom/android/server/usb/descriptors/UsbACInterface;->allocDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;Lcom/android/server/usb/descriptors/ByteStream;IB)Lcom/android/server/usb/descriptors/UsbDescriptor;
+PLcom/android/server/usb/descriptors/UsbACInterface;->getSubclass()I
+PLcom/android/server/usb/descriptors/UsbACInterface;->getSubtype()B
+PLcom/android/server/usb/descriptors/UsbACInterfaceUnparsed;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/UsbACMixerUnit;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/UsbACMixerUnit;->calcControlArraySize(II)I
+PLcom/android/server/usb/descriptors/UsbACMixerUnit;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbACTerminal;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/UsbACTerminal;->getTerminalType()I
+PLcom/android/server/usb/descriptors/UsbACTerminal;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbASFormat;-><init>(IBBBI)V
+PLcom/android/server/usb/descriptors/UsbASFormat;->allocDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;Lcom/android/server/usb/descriptors/ByteStream;IBBI)Lcom/android/server/usb/descriptors/UsbDescriptor;
 PLcom/android/server/usb/descriptors/UsbConfigDescriptor;-><init>(IB)V
+PLcom/android/server/usb/descriptors/UsbConfigDescriptor;->addInterfaceDescriptor(Lcom/android/server/usb/descriptors/UsbInterfaceDescriptor;)V
 PLcom/android/server/usb/descriptors/UsbConfigDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
 PLcom/android/server/usb/descriptors/UsbConfigDescriptor;->toAndroid(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Landroid/hardware/usb/UsbConfiguration;
 PLcom/android/server/usb/descriptors/UsbDescriptor;-><clinit>()V
-PLcom/android/server/usb/descriptors/UsbDescriptor;-><init>(IB)V
-PLcom/android/server/usb/descriptors/UsbDescriptor;->getType()B
+HPLcom/android/server/usb/descriptors/UsbDescriptor;-><init>(IB)V
+PLcom/android/server/usb/descriptors/UsbDescriptor;->getLength()I
+HPLcom/android/server/usb/descriptors/UsbDescriptor;->getType()B
 PLcom/android/server/usb/descriptors/UsbDescriptor;->logDescriptorName(BI)V
+PLcom/android/server/usb/descriptors/UsbDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
 PLcom/android/server/usb/descriptors/UsbDescriptor;->postParse(Lcom/android/server/usb/descriptors/ByteStream;)V
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;-><init>(Ljava/lang/String;[B)V
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;->allocDescriptor(Lcom/android/server/usb/descriptors/ByteStream;)Lcom/android/server/usb/descriptors/UsbDescriptor;
+HPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getACInterfaceDescriptors(BI)Ljava/util/ArrayList;
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getACInterfaceSpec()I
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getCurInterface()Lcom/android/server/usb/descriptors/UsbInterfaceDescriptor;
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getDescriptorString(I)Ljava/lang/String;
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getDescriptors()Ljava/util/ArrayList;
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getDeviceAddr()Ljava/lang/String;
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getDeviceDescriptor()Lcom/android/server/usb/descriptors/UsbDeviceDescriptor;
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getInterfaceDescriptorsForClass(I)Ljava/util/ArrayList;
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getInputHeadsetProbability()F
+HPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getInterfaceDescriptorsForClass(I)Ljava/util/ArrayList;
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getOutputHeadsetProbability()F
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getRawDescriptors()[B
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioCapture()Z
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioInterface()Z
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioPlayback()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioTerminal(I)Z
+HPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioTerminal(I)Z
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasHIDInterface()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasMIDIInterface()Z
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasInput()Z
+HPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasMIDIInterface()Z
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasMic()Z
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasOutput()Z
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasSpeaker()Z
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasStorageInterface()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasVideoCapture()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasVideoPlayback()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->parseDescriptors([B)V
+HPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasVideoCapture()Z
+HPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasVideoPlayback()Z
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->isInputHeadset()Z
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->isOutputHeadset()Z
+HPLcom/android/server/usb/descriptors/UsbDescriptorParser;->parseDescriptors([B)V
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->setACInterfaceSpec(I)V
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;->toAndroidUsbDeviceBuilder()Landroid/hardware/usb/UsbDevice$Builder;
 PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;-><init>(IB)V
 PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->addConfigDescriptor(Lcom/android/server/usb/descriptors/UsbConfigDescriptor;)V
@@ -18919,7 +31794,33 @@
 PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getVendorID()I
 PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
 PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->toAndroid(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Landroid/hardware/usb/UsbDevice$Builder;
-PLcom/android/server/utils/PriorityDump;->dump(Lcom/android/server/utils/PriorityDump$PriorityDumper;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/usb/descriptors/UsbEndpointDescriptor;-><init>(IB)V
+PLcom/android/server/usb/descriptors/UsbEndpointDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbEndpointDescriptor;->toAndroid(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Landroid/hardware/usb/UsbEndpoint;
+PLcom/android/server/usb/descriptors/UsbHIDDescriptor;-><init>(IB)V
+PLcom/android/server/usb/descriptors/UsbHIDDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbInterfaceAssoc;-><init>(IB)V
+PLcom/android/server/usb/descriptors/UsbInterfaceAssoc;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;-><init>(IB)V
+PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->addEndpointDescriptor(Lcom/android/server/usb/descriptors/UsbEndpointDescriptor;)V
+PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->getUsbClass()I
+PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->getUsbSubclass()I
+PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->toAndroid(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Landroid/hardware/usb/UsbInterface;
+PLcom/android/server/usb/descriptors/UsbUnknown;-><init>(IB)V
+PLcom/android/server/utils/AppInstallerUtil;->createIntent(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;
+PLcom/android/server/utils/AppInstallerUtil;->createIntent(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;
+PLcom/android/server/utils/AppInstallerUtil;->getInstallerPackageName(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/utils/AppInstallerUtil;->resolveIntent(Landroid/content/Context;Landroid/content/Intent;)Landroid/content/Intent;
+PLcom/android/server/utils/FlagNamespaceUtils;-><clinit>()V
+PLcom/android/server/utils/FlagNamespaceUtils;->addToKnownResetNamespaces(Ljava/lang/String;)V
+PLcom/android/server/utils/FlagNamespaceUtils;->addToKnownResetNamespaces(Ljava/util/List;)V
+PLcom/android/server/utils/FlagNamespaceUtils;->incrementAndRetrieveResetNamespacesFlagCounter()I
+PLcom/android/server/utils/FlagNamespaceUtils;->resetDeviceConfig(ILjava/util/List;)V
+PLcom/android/server/utils/PriorityDump$PriorityDumper;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
+PLcom/android/server/utils/PriorityDump$PriorityDumper;->dumpHigh(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
+PLcom/android/server/utils/PriorityDump$PriorityDumper;->dumpNormal(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
+HPLcom/android/server/utils/PriorityDump;->dump(Lcom/android/server/utils/PriorityDump$PriorityDumper;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/utils/PriorityDump;->getPriorityType(Ljava/lang/String;)I
 HSPLcom/android/server/utils/TimingsTraceAndSlog;-><init>()V
 HSPLcom/android/server/utils/TimingsTraceAndSlog;-><init>(Ljava/lang/String;)V
@@ -18931,92 +31832,281 @@
 PLcom/android/server/utils/TraceBuffer;->getStatus()Ljava/lang/String;
 HSPLcom/android/server/utils/TraceBuffer;->resetBuffer()V
 HSPLcom/android/server/utils/TraceBuffer;->setCapacity(I)V
+PLcom/android/server/utils/UserTokenWatcher$InnerTokenWatcher;-><init>(Lcom/android/server/utils/UserTokenWatcher;ILandroid/os/Handler;Ljava/lang/String;)V
+PLcom/android/server/utils/UserTokenWatcher$InnerTokenWatcher;-><init>(Lcom/android/server/utils/UserTokenWatcher;ILandroid/os/Handler;Ljava/lang/String;Lcom/android/server/utils/UserTokenWatcher$1;)V
+PLcom/android/server/utils/UserTokenWatcher$InnerTokenWatcher;->acquired()V
+PLcom/android/server/utils/UserTokenWatcher$InnerTokenWatcher;->released()V
 HSPLcom/android/server/utils/UserTokenWatcher;-><init>(Lcom/android/server/utils/UserTokenWatcher$Callback;Landroid/os/Handler;Ljava/lang/String;)V
+PLcom/android/server/utils/UserTokenWatcher;->access$100(Lcom/android/server/utils/UserTokenWatcher;)Lcom/android/server/utils/UserTokenWatcher$Callback;
+PLcom/android/server/utils/UserTokenWatcher;->access$200(Lcom/android/server/utils/UserTokenWatcher;)Landroid/util/SparseArray;
+PLcom/android/server/utils/UserTokenWatcher;->acquire(Landroid/os/IBinder;Ljava/lang/String;I)V
+PLcom/android/server/utils/UserTokenWatcher;->isAcquired(I)Z
+PLcom/android/server/utils/UserTokenWatcher;->release(Landroid/os/IBinder;I)V
+HSPLcom/android/server/utils/quota/-$$Lambda$Categorizer$7ez64bqBH_7ftnL6e10WcD6kHMA;-><clinit>()V
+HSPLcom/android/server/utils/quota/-$$Lambda$Categorizer$7ez64bqBH_7ftnL6e10WcD6kHMA;-><init>()V
+HSPLcom/android/server/utils/quota/-$$Lambda$Categorizer$7ez64bqBH_7ftnL6e10WcD6kHMA;->getCategory(ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/utils/quota/Category;
+PLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$JPiaaEfenxacor9EsTZts7yjmfo;-><init>(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$JPiaaEfenxacor9EsTZts7yjmfo;->accept(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
+HSPLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$V8_P5m4uQVKMpyfUCyH32qDbyt4;-><clinit>()V
+HSPLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$V8_P5m4uQVKMpyfUCyH32qDbyt4;-><init>()V
+HSPLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$V8_P5m4uQVKMpyfUCyH32qDbyt4;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$YGSPs4eBXm5g9fUsluToPq543sk;-><init>(J)V
+PLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$cN0cbPv_XamMCffwzXBT1y5wiSs;-><init>(Lcom/android/server/utils/quota/CountQuotaTracker;Landroid/util/proto/ProtoOutputStream;)V
+PLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$cN0cbPv_XamMCffwzXBT1y5wiSs;->accept(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
+HSPLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$gcuaahwgCbmI2MO_9858jGPxPGM;-><init>(Lcom/android/server/utils/quota/CountQuotaTracker;)V
+HPLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$gcuaahwgCbmI2MO_9858jGPxPGM;->onAlarm()V
+HSPLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$giodBFjkV0qAORwrWZQrMAgSRaY;-><clinit>()V
+HSPLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$giodBFjkV0qAORwrWZQrMAgSRaY;-><init>()V
+HSPLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$giodBFjkV0qAORwrWZQrMAgSRaY;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$txEUpjjjfBHHIwaoIrBUanoDtpI;-><init>(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$txEUpjjjfBHHIwaoIrBUanoDtpI;->accept(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
+HSPLcom/android/server/utils/quota/-$$Lambda$QuotaTracker$AlarmQueue$9XqssygjZyzGRYPaPGM34LNECH0;-><clinit>()V
+HSPLcom/android/server/utils/quota/-$$Lambda$QuotaTracker$AlarmQueue$9XqssygjZyzGRYPaPGM34LNECH0;-><init>()V
+HSPLcom/android/server/utils/quota/-$$Lambda$QuotaTracker$QGqhRiGVlazdG76r-Ich6VZnho4;-><init>(Lcom/android/server/utils/quota/QuotaTracker;IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;)V
+HSPLcom/android/server/utils/quota/-$$Lambda$QuotaTracker$QGqhRiGVlazdG76r-Ich6VZnho4;->run()V
+HPLcom/android/server/utils/quota/-$$Lambda$QuotaTracker$XRuiZQg4lOmWE1kXJjjkatdBgB8;-><init>(Lcom/android/server/utils/quota/QuotaTracker;ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/utils/quota/-$$Lambda$QuotaTracker$XRuiZQg4lOmWE1kXJjjkatdBgB8;->run()V
+HSPLcom/android/server/utils/quota/-$$Lambda$QuotaTracker$cKEDVJtC0LHULuSrH0-B6zQBe3g;-><init>(Lcom/android/server/utils/quota/QuotaTracker;)V
+HSPLcom/android/server/utils/quota/-$$Lambda$QuotaTracker$cKEDVJtC0LHULuSrH0-B6zQBe3g;->run()V
+HSPLcom/android/server/utils/quota/-$$Lambda$UptcMap$VIYMMrjbnqShO606s52uuyAgdlU;-><init>(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/utils/quota/-$$Lambda$UptcMap$VIYMMrjbnqShO606s52uuyAgdlU;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/utils/quota/Categorizer;-><clinit>()V
+HSPLcom/android/server/utils/quota/Categorizer;->lambda$static$0(ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/utils/quota/Category;
+HSPLcom/android/server/utils/quota/Category;-><clinit>()V
+HSPLcom/android/server/utils/quota/Category;-><init>(Ljava/lang/String;)V
+PLcom/android/server/utils/quota/Category;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLcom/android/server/utils/quota/Category;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/server/utils/quota/Category;->hashCode()I
+PLcom/android/server/utils/quota/Category;->toString()Ljava/lang/String;
+HSPLcom/android/server/utils/quota/CountQuotaTracker$CqtHandler;-><init>(Lcom/android/server/utils/quota/CountQuotaTracker;Landroid/os/Looper;)V
+HPLcom/android/server/utils/quota/CountQuotaTracker$CqtHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker$DeleteEventTimesFunctor;-><init>(Lcom/android/server/utils/quota/CountQuotaTracker;)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker$DeleteEventTimesFunctor;-><init>(Lcom/android/server/utils/quota/CountQuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker$1;)V
+HPLcom/android/server/utils/quota/CountQuotaTracker$DeleteEventTimesFunctor;->accept(Landroid/util/LongArrayQueue;)V
+HPLcom/android/server/utils/quota/CountQuotaTracker$DeleteEventTimesFunctor;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker$DeleteEventTimesFunctor;->access$000(Lcom/android/server/utils/quota/CountQuotaTracker$DeleteEventTimesFunctor;)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker$DeleteEventTimesFunctor;->access$100(Lcom/android/server/utils/quota/CountQuotaTracker$DeleteEventTimesFunctor;)J
+HSPLcom/android/server/utils/quota/CountQuotaTracker$DeleteEventTimesFunctor;->updateMaxPeriod()V
+HSPLcom/android/server/utils/quota/CountQuotaTracker$EarliestEventTimeFunctor;-><init>()V
+HSPLcom/android/server/utils/quota/CountQuotaTracker$EarliestEventTimeFunctor;-><init>(Lcom/android/server/utils/quota/CountQuotaTracker$1;)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker$EarliestEventTimeFunctor;->accept(Landroid/util/LongArrayQueue;)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker$EarliestEventTimeFunctor;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker$EarliestEventTimeFunctor;->reset()V
+HSPLcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;-><init>()V
+HPLcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;->toString()Ljava/lang/String;
+HSPLcom/android/server/utils/quota/CountQuotaTracker;-><clinit>()V
+HSPLcom/android/server/utils/quota/CountQuotaTracker;-><init>(Landroid/content/Context;Lcom/android/server/utils/quota/Categorizer;)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker;-><init>(Landroid/content/Context;Lcom/android/server/utils/quota/Categorizer;Lcom/android/server/utils/quota/QuotaTracker$Injector;)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->access$300(Lcom/android/server/utils/quota/CountQuotaTracker;)Landroid/util/ArrayMap;
+PLcom/android/server/utils/quota/CountQuotaTracker;->deleteObsoleteEventsLocked()V
+PLcom/android/server/utils/quota/CountQuotaTracker;->dump(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/utils/quota/CountQuotaTracker;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->getExecutionStatsLocked(ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->getExecutionStatsLocked(ILjava/lang/String;Ljava/lang/String;Z)Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;
+PLcom/android/server/utils/quota/CountQuotaTracker;->getHandler()Landroid/os/Handler;
+PLcom/android/server/utils/quota/CountQuotaTracker;->handleRemovedAppLocked(Ljava/lang/String;I)V
+PLcom/android/server/utils/quota/CountQuotaTracker;->handleRemovedUserLocked(I)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->invalidateAllExecutionStatsLocked()V
+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
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->isWithinQuotaLocked(Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;)Z
+HPLcom/android/server/utils/quota/CountQuotaTracker;->lambda$dump$6(Lcom/android/internal/util/IndentingPrintWriter;ILjava/lang/String;Ljava/lang/String;Landroid/util/LongArrayQueue;)V
+HPLcom/android/server/utils/quota/CountQuotaTracker;->lambda$dump$7(Lcom/android/internal/util/IndentingPrintWriter;ILjava/lang/String;Ljava/lang/String;Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;)V
+HPLcom/android/server/utils/quota/CountQuotaTracker;->lambda$dump$8$CountQuotaTracker(Landroid/util/proto/ProtoOutputStream;ILjava/lang/String;Ljava/lang/String;Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;)V
+HPLcom/android/server/utils/quota/CountQuotaTracker;->lambda$new$0$CountQuotaTracker()V
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->lambda$new$4(Ljava/lang/Void;)Landroid/util/LongArrayQueue;
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->lambda$new$5(Ljava/lang/Void;)Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->maybeScheduleCleanupAlarmLocked()V
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->noteEvent(ILjava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->setCountLimit(Lcom/android/server/utils/quota/Category;IJ)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->setEnabled(Z)V
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->updateExecutionStatsLocked(ILjava/lang/String;Ljava/lang/String;Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;)V
+HSPLcom/android/server/utils/quota/QuotaTracker$1;-><init>(Lcom/android/server/utils/quota/QuotaTracker;)V
+PLcom/android/server/utils/quota/QuotaTracker$1;->getPackageName(Landroid/content/Intent;)Ljava/lang/String;
+HPLcom/android/server/utils/quota/QuotaTracker$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/utils/quota/QuotaTracker$AlarmQueue;-><init>()V
+HSPLcom/android/server/utils/quota/QuotaTracker$InQuotaAlarmListener;-><init>(Lcom/android/server/utils/quota/QuotaTracker;)V
+HSPLcom/android/server/utils/quota/QuotaTracker$InQuotaAlarmListener;-><init>(Lcom/android/server/utils/quota/QuotaTracker;Lcom/android/server/utils/quota/QuotaTracker$1;)V
+PLcom/android/server/utils/quota/QuotaTracker$InQuotaAlarmListener;->dumpLocked(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/utils/quota/QuotaTracker$InQuotaAlarmListener;->dumpLocked(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/utils/quota/QuotaTracker$InQuotaAlarmListener;->removeAlarmsLocked(I)V
+PLcom/android/server/utils/quota/QuotaTracker$InQuotaAlarmListener;->removeAlarmsLocked(ILjava/lang/String;)V
+HSPLcom/android/server/utils/quota/QuotaTracker$Injector;-><init>()V
+HSPLcom/android/server/utils/quota/QuotaTracker$Injector;->getElapsedRealtime()J
+HSPLcom/android/server/utils/quota/QuotaTracker$Injector;->isAlarmManagerReady()Z
+HSPLcom/android/server/utils/quota/QuotaTracker;-><clinit>()V
+HSPLcom/android/server/utils/quota/QuotaTracker;-><init>(Landroid/content/Context;Lcom/android/server/utils/quota/Categorizer;Lcom/android/server/utils/quota/QuotaTracker$Injector;)V
+PLcom/android/server/utils/quota/QuotaTracker;->access$200(Lcom/android/server/utils/quota/QuotaTracker;Ljava/lang/String;I)V
+PLcom/android/server/utils/quota/QuotaTracker;->access$300(Lcom/android/server/utils/quota/QuotaTracker;I)V
+PLcom/android/server/utils/quota/QuotaTracker;->dump(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/utils/quota/QuotaTracker;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HSPLcom/android/server/utils/quota/QuotaTracker;->isEnabledLocked()Z
+PLcom/android/server/utils/quota/QuotaTracker;->isIndividualQuotaFreeLocked(ILjava/lang/String;)Z
+HSPLcom/android/server/utils/quota/QuotaTracker;->isQuotaFreeLocked(ILjava/lang/String;)Z
+HSPLcom/android/server/utils/quota/QuotaTracker;->isWithinQuota(ILjava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/utils/quota/QuotaTracker;->lambda$postQuotaStatusChanged$3$QuotaTracker(ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/utils/quota/QuotaTracker;->lambda$scheduleAlarm$0$QuotaTracker(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;)V
+HSPLcom/android/server/utils/quota/QuotaTracker;->lambda$scheduleQuotaCheck$2$QuotaTracker()V
+HPLcom/android/server/utils/quota/QuotaTracker;->onAppRemovedLocked(Ljava/lang/String;I)V
+PLcom/android/server/utils/quota/QuotaTracker;->onUserRemovedLocked(I)V
+PLcom/android/server/utils/quota/QuotaTracker;->postQuotaStatusChanged(ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/utils/quota/QuotaTracker;->scheduleAlarm(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;)V
+HSPLcom/android/server/utils/quota/QuotaTracker;->scheduleQuotaCheck()V
+HSPLcom/android/server/utils/quota/QuotaTracker;->setEnabled(Z)V
+HPLcom/android/server/utils/quota/Uptc;-><init>(ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/utils/quota/Uptc;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/utils/quota/Uptc;->string(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/utils/quota/UptcMap;-><init>()V
+HSPLcom/android/server/utils/quota/UptcMap;->add(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
+PLcom/android/server/utils/quota/UptcMap;->delete(I)V
+HPLcom/android/server/utils/quota/UptcMap;->delete(ILjava/lang/String;)Landroid/util/ArrayMap;
+HPLcom/android/server/utils/quota/UptcMap;->forEach(Lcom/android/server/utils/quota/UptcMap$UptcDataConsumer;)V
+HSPLcom/android/server/utils/quota/UptcMap;->forEach(Ljava/util/function/Consumer;)V
+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;
+PLcom/android/server/utils/quota/UptcMap;->getPackageNameAtIndex(II)Ljava/lang/String;
+HPLcom/android/server/utils/quota/UptcMap;->getTagAtIndex(III)Ljava/lang/String;
+PLcom/android/server/utils/quota/UptcMap;->getUserIdAtIndex(I)I
+HSPLcom/android/server/utils/quota/UptcMap;->lambda$forEach$0(Ljava/util/function/Consumer;Landroid/util/ArrayMap;)V
+PLcom/android/server/utils/quota/UptcMap;->packageCountForUser(I)I
+HPLcom/android/server/utils/quota/UptcMap;->tagCountForUserAndPackage(ILjava/lang/String;)I
+PLcom/android/server/utils/quota/UptcMap;->userCount()I
+PLcom/android/server/voiceinteraction/-$$Lambda$VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2$_YjGqp96fW1i83gthgQe_rVHY5s;-><clinit>()V
+PLcom/android/server/voiceinteraction/-$$Lambda$VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2$_YjGqp96fW1i83gthgQe_rVHY5s;-><init>()V
+PLcom/android/server/voiceinteraction/-$$Lambda$VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2$_YjGqp96fW1i83gthgQe_rVHY5s;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/voiceinteraction/DatabaseHelper;-><init>(Landroid/content/Context;)V
-PLcom/android/server/voiceinteraction/DatabaseHelper;->getArrayForCommaSeparatedString(Ljava/lang/String;)[I
-PLcom/android/server/voiceinteraction/DatabaseHelper;->getKeyphraseSoundModel(IILjava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;
+PLcom/android/server/voiceinteraction/DatabaseHelper;->deleteKeyphraseSoundModel(IILjava/lang/String;)Z
+PLcom/android/server/voiceinteraction/DatabaseHelper;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/voiceinteraction/DatabaseHelper;->getArrayForCommaSeparatedString(Ljava/lang/String;)[I
+PLcom/android/server/voiceinteraction/DatabaseHelper;->getCommaSeparatedString([I)Ljava/lang/String;
+HPLcom/android/server/voiceinteraction/DatabaseHelper;->getKeyphraseSoundModel(IILjava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;
+PLcom/android/server/voiceinteraction/DatabaseHelper;->getKeyphraseSoundModel(Ljava/lang/String;ILjava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;
+HPLcom/android/server/voiceinteraction/DatabaseHelper;->getValidKeyphraseSoundModelForUser(Ljava/lang/String;I)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;
+PLcom/android/server/voiceinteraction/DatabaseHelper;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase;II)V
+PLcom/android/server/voiceinteraction/DatabaseHelper;->updateKeyphraseSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)Z
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$1;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)V
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$1;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$1;->getPackages(I)[Ljava/lang/String;
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$LocalService;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;)V
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2;->onPackageModified(Ljava/lang/String;)V
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2;->onSomePackagesChanged()V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2;->lambda$onHandleForceStop$0(Ljava/lang/Boolean;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2;->onHandleUserStop(Landroid/content/Intent;I)V
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2;->onSomePackagesChanged()V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$RoleObserver;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;Ljava/util/concurrent/Executor;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$RoleObserver;->getDefaultRecognizer(Landroid/os/UserHandle;)Ljava/lang/String;
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$RoleObserver;->onRoleHoldersChanged(Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$SettingsObserver;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;Landroid/os/Handler;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$SettingsObserver;->onChange(Z)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->access$400(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->access$500(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;)I
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->access$500(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->access$600(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;)I
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->closeSystemDialogs(Landroid/os/IBinder;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->deleteKeyphraseSoundModel(ILjava/lang/String;)I
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->deliverNewSession(Landroid/os/IBinder;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;)Z
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->enforceCallingPermission(Ljava/lang/String;)V
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->enforceIsCurrentVoiceInteractionService(Landroid/service/voice/IVoiceInteractionService;)V
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->enforceIsCurrentVoiceInteractionService(Landroid/service/voice/IVoiceInteractionService;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->findAvailInteractor(ILjava/lang/String;)Landroid/service/voice/VoiceInteractionServiceInfo;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->findAvailRecognizer(Ljava/lang/String;I)Landroid/content/ComponentName;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->finish(Landroid/os/IBinder;)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getActiveServiceComponentName()Landroid/content/ComponentName;
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getCurInteractor(I)Landroid/content/ComponentName;
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getCurRecognizer(I)Landroid/content/ComponentName;
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getCurAssistant(I)Landroid/content/ComponentName;
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getCurInteractor(I)Landroid/content/ComponentName;
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getCurRecognizer(I)Landroid/content/ComponentName;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getDspModuleProperties(Landroid/service/voice/IVoiceInteractionService;)Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getEnrolledKeyphraseMetadata(Landroid/service/voice/IVoiceInteractionService;Ljava/lang/String;Ljava/lang/String;)Landroid/hardware/soundtrigger/KeyphraseMetadata;
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getForceVoiceInteractionServicePackage(Landroid/content/res/Resources;)Ljava/lang/String;
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getKeyphraseSoundModel(ILjava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getUserDisabledShowContext()I
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->hideCurrentSession()V
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->hideSessionFromSession(Landroid/os/IBinder;)Z
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->initForUser(I)V
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->initForUserNoTracing(I)V
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->hideSessionFromSession(Landroid/os/IBinder;)Z
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->initForUser(I)V
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->initForUserNoTracing(I)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->isEnrolledForKeyphrase(Landroid/service/voice/IVoiceInteractionService;ILjava/lang/String;)Z
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->isSessionRunning()Z
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->onLockscreenShown()V
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->onLockscreenShown()V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->onSessionHidden()V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->onSessionShown()V
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->registerVoiceInteractionSessionListener(Lcom/android/internal/app/IVoiceInteractionSessionListener;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->requestDirectActions(Landroid/os/IBinder;ILandroid/os/IBinder;Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->resetCurAssistant(I)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->setCurInteractor(Landroid/content/ComponentName;I)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->setCurRecognizer(Landroid/content/ComponentName;I)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->setCurrentUserLocked(I)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->setDisabledShowContext(I)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->setImplLocked(Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;)V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->setUiHints(Landroid/service/voice/IVoiceInteractionService;Landroid/os/Bundle;)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->shouldEnableService(Landroid/content/Context;)Z
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->showSession(Landroid/service/voice/IVoiceInteractionService;Landroid/os/Bundle;I)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->showSessionForActiveService(Landroid/os/Bundle;ILcom/android/internal/app/IVoiceInteractionSessionShowCallback;Landroid/os/IBinder;)Z
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->showSessionFromSession(Landroid/os/IBinder;Landroid/os/Bundle;I)Z
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->startRecognition(Landroid/service/voice/IVoiceInteractionService;ILjava/lang/String;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->stopRecognition(Landroid/service/voice/IVoiceInteractionService;ILandroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->startAssistantActivity(Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;)I
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->startRecognition(Landroid/service/voice/IVoiceInteractionService;ILjava/lang/String;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->startVoiceActivity(Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;)I
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->stopRecognition(Landroid/service/voice/IVoiceInteractionService;ILandroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->switchImplementationIfNeeded(Z)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->switchImplementationIfNeededLocked(Z)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->switchImplementationIfNeededNoTracingLocked(Z)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->systemRunning(Z)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->unloadAllKeyphraseModels()V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->updateKeyphraseSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)I
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->access$000(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->access$000(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->access$100(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)Landroid/os/RemoteCallbackList;
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->access$100(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;Landroid/content/pm/UserInfo;)Z
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->access$200(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)Landroid/os/RemoteCallbackList;
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->access$300(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->isSupported(Landroid/content/pm/UserInfo;)Z
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->isSupportedUser(Lcom/android/server/SystemService$TargetUser;)Z
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->onBootPhase(I)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->onStart()V
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->onStartUser(Landroid/content/pm/UserInfo;)V
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->onStartUser(Landroid/content/pm/UserInfo;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->onUnlockUser(Landroid/content/pm/UserInfo;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$1;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;)V
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$2;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$2;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;ILandroid/content/ComponentName;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->closeSystemDialogsLocked(Landroid/os/IBinder;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->deliverNewSessionLocked(Landroid/os/IBinder;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;)Z
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->dumpLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->finishLocked(Landroid/os/IBinder;Z)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->getUserDisabledShowContextLocked(I)I
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->hideSessionLocked()Z
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->notifySoundModelsChangedLocked()V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->onSessionHidden(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->onSessionShown(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->requestDirectActionsLocked(Landroid/os/IBinder;ILandroid/os/IBinder;Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->sessionConnectionGone(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->setDisabledShowContextLocked(II)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->showSessionLocked(Landroid/os/Bundle;ILcom/android/internal/app/IVoiceInteractionSessionShowCallback;Landroid/os/IBinder;)Z
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->shutdownLocked()V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->startAssistantActivityLocked(IILandroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;)I
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->startLocked()V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->startVoiceActivityLocked(IILandroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;)I
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$1;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$1;->onShown()V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$2;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$2;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$3;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$3;->run()V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;-><init>(Ljava/lang/Object;Landroid/content/ComponentName;ILandroid/content/Context;Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$Callback;ILandroid/os/Handler;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->access$100(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->canHandleReceivedAssistDataLocked()Z
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->cancelLocked(Z)V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->deliverNewSessionLocked(Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;)Z
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->getUserDisabledShowContextLocked()I
+HPLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->getUserDisabledShowContextLocked()I
+PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->grantClipDataItemPermission(Landroid/content/ClipData$Item;IIILjava/lang/String;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->grantClipDataPermissions(Landroid/content/ClipData;IIILjava/lang/String;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->grantUriPermission(Landroid/net/Uri;IIILjava/lang/String;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->hideLocked()Z
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->notifyPendingShowCallbacksShownLocked()V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->onAssistDataReceivedLocked(Landroid/os/Bundle;II)V
@@ -19024,29 +32114,150 @@
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;->showLocked(Landroid/os/Bundle;IILcom/android/internal/app/IVoiceInteractionSessionShowCallback;Ljava/util/List;)Z
+HSPLcom/android/server/vr/EnabledComponentsObserver$1;-><init>(Lcom/android/server/vr/EnabledComponentsObserver;)V
+PLcom/android/server/vr/EnabledComponentsObserver$1;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+PLcom/android/server/vr/EnabledComponentsObserver$1;->onPackageDisappeared(Ljava/lang/String;I)V
+HPLcom/android/server/vr/EnabledComponentsObserver$1;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/vr/EnabledComponentsObserver$1;->onSomePackagesChanged()V
+HSPLcom/android/server/vr/EnabledComponentsObserver;-><clinit>()V
+HSPLcom/android/server/vr/EnabledComponentsObserver;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;Ljava/util/Collection;)V
+HSPLcom/android/server/vr/EnabledComponentsObserver;->build(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Looper;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;Ljava/util/Collection;)Lcom/android/server/vr/EnabledComponentsObserver;
+HSPLcom/android/server/vr/EnabledComponentsObserver;->getCurrentProfileIds()[I
+HSPLcom/android/server/vr/EnabledComponentsObserver;->getEnabled(I)Landroid/util/ArraySet;
+PLcom/android/server/vr/EnabledComponentsObserver;->getInstalled(I)Landroid/util/ArraySet;
+HPLcom/android/server/vr/EnabledComponentsObserver;->isValid(Landroid/content/ComponentName;I)I
+HSPLcom/android/server/vr/EnabledComponentsObserver;->loadComponentNames(Landroid/content/pm/PackageManager;ILjava/lang/String;Ljava/lang/String;)Landroid/util/ArraySet;
+HSPLcom/android/server/vr/EnabledComponentsObserver;->loadComponentNamesForUser(I)Landroid/util/ArraySet;
+HSPLcom/android/server/vr/EnabledComponentsObserver;->loadComponentNamesFromSetting(Ljava/lang/String;I)Landroid/util/ArraySet;
+HPLcom/android/server/vr/EnabledComponentsObserver;->onPackagesChanged()V
+HSPLcom/android/server/vr/EnabledComponentsObserver;->onUsersChanged()V
+HSPLcom/android/server/vr/EnabledComponentsObserver;->rebuildAll()V
+HSPLcom/android/server/vr/EnabledComponentsObserver;->sendSettingChanged()V
+HSPLcom/android/server/vr/SettingsObserver$1;-><init>(Lcom/android/server/vr/SettingsObserver;Ljava/lang/String;)V
+HSPLcom/android/server/vr/SettingsObserver$2;-><init>(Lcom/android/server/vr/SettingsObserver;Landroid/os/Handler;Landroid/net/Uri;)V
+HSPLcom/android/server/vr/SettingsObserver;-><init>(Landroid/content/Context;Landroid/os/Handler;Landroid/net/Uri;Ljava/lang/String;)V
+HSPLcom/android/server/vr/SettingsObserver;->addListener(Lcom/android/server/vr/SettingsObserver$SettingChangeListener;)V
+HSPLcom/android/server/vr/SettingsObserver;->build(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/String;)Lcom/android/server/vr/SettingsObserver;
+HSPLcom/android/server/vr/Vr2dDisplay$1;-><init>(Lcom/android/server/vr/Vr2dDisplay;)V
+HSPLcom/android/server/vr/Vr2dDisplay;-><init>(Landroid/hardware/display/DisplayManager;Landroid/app/ActivityManagerInternal;Lcom/android/server/wm/WindowManagerInternal;Landroid/service/vr/IVrManager;)V
+HSPLcom/android/server/vr/Vr2dDisplay;->init(Landroid/content/Context;Z)V
+HSPLcom/android/server/vr/Vr2dDisplay;->startDebugOnlyBroadcastReceiver(Landroid/content/Context;)V
+HSPLcom/android/server/vr/Vr2dDisplay;->startVrModeListener()V
+HSPLcom/android/server/vr/VrManagerInternal;-><init>()V
+HSPLcom/android/server/vr/VrManagerService$1;-><init>(Lcom/android/server/vr/VrManagerService;)V
+HSPLcom/android/server/vr/VrManagerService$2;-><init>(Lcom/android/server/vr/VrManagerService;)V
+HSPLcom/android/server/vr/VrManagerService$3;-><init>()V
+HSPLcom/android/server/vr/VrManagerService$4;-><init>(Lcom/android/server/vr/VrManagerService;)V
+HPLcom/android/server/vr/VrManagerService$4;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLcom/android/server/vr/VrManagerService$4;->getVrModeState()Z
+HSPLcom/android/server/vr/VrManagerService$4;->registerListener(Landroid/service/vr/IVrStateCallbacks;)V
+HSPLcom/android/server/vr/VrManagerService$4;->registerPersistentVrStateListener(Landroid/service/vr/IPersistentVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService$4;->unregisterListener(Landroid/service/vr/IVrStateCallbacks;)V
+HSPLcom/android/server/vr/VrManagerService$5;-><init>(Lcom/android/server/vr/VrManagerService;)V
+PLcom/android/server/vr/VrManagerService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/vr/VrManagerService$LocalService;-><init>(Lcom/android/server/vr/VrManagerService;)V
+HSPLcom/android/server/vr/VrManagerService$LocalService;-><init>(Lcom/android/server/vr/VrManagerService;Lcom/android/server/vr/VrManagerService$1;)V
+HSPLcom/android/server/vr/VrManagerService$LocalService;->addPersistentVrModeStateListener(Landroid/service/vr/IPersistentVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService$LocalService;->isCurrentVrListener(Ljava/lang/String;I)Z
+HSPLcom/android/server/vr/VrManagerService$LocalService;->onScreenStateChanged(Z)V
+HSPLcom/android/server/vr/VrManagerService$LocalService;->setVrMode(ZLandroid/content/ComponentName;IILandroid/content/ComponentName;)V
+HSPLcom/android/server/vr/VrManagerService$NotificationAccessManager;-><init>(Lcom/android/server/vr/VrManagerService;)V
+HSPLcom/android/server/vr/VrManagerService$NotificationAccessManager;-><init>(Lcom/android/server/vr/VrManagerService;Lcom/android/server/vr/VrManagerService$1;)V
+HSPLcom/android/server/vr/VrManagerService$NotificationAccessManager;->update(Ljava/util/Collection;)V
+HSPLcom/android/server/vr/VrManagerService$VrState;-><init>(ZZLandroid/content/ComponentName;IILandroid/content/ComponentName;)V
+HSPLcom/android/server/vr/VrManagerService;-><clinit>()V
+HSPLcom/android/server/vr/VrManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/vr/VrManagerService;->access$1000(Lcom/android/server/vr/VrManagerService;)Landroid/os/RemoteCallbackList;
+HSPLcom/android/server/vr/VrManagerService;->access$1400(Lcom/android/server/vr/VrManagerService;Ljava/lang/String;)V
+HSPLcom/android/server/vr/VrManagerService;->access$1500(Lcom/android/server/vr/VrManagerService;Ljava/lang/String;I)V
+HSPLcom/android/server/vr/VrManagerService;->access$1600(Lcom/android/server/vr/VrManagerService;Ljava/lang/String;I)V
+HSPLcom/android/server/vr/VrManagerService;->access$1700(Lcom/android/server/vr/VrManagerService;[Ljava/lang/String;)V
+HSPLcom/android/server/vr/VrManagerService;->access$1800(Lcom/android/server/vr/VrManagerService;Landroid/service/vr/IVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService;->access$1900(Lcom/android/server/vr/VrManagerService;Landroid/service/vr/IVrStateCallbacks;)V
+HSPLcom/android/server/vr/VrManagerService;->access$2000(Lcom/android/server/vr/VrManagerService;Landroid/service/vr/IPersistentVrStateCallbacks;)V
+HSPLcom/android/server/vr/VrManagerService;->access$2200(Lcom/android/server/vr/VrManagerService;)Z
+PLcom/android/server/vr/VrManagerService;->access$2700(Lcom/android/server/vr/VrManagerService;)Landroid/content/Context;
+PLcom/android/server/vr/VrManagerService;->access$2800(Lcom/android/server/vr/VrManagerService;)Z
+PLcom/android/server/vr/VrManagerService;->access$2900(Lcom/android/server/vr/VrManagerService;)Lcom/android/server/utils/ManagedApplicationService;
+PLcom/android/server/vr/VrManagerService;->access$300(Lcom/android/server/vr/VrManagerService;)Lcom/android/server/utils/ManagedApplicationService;
+PLcom/android/server/vr/VrManagerService;->access$3000(Lcom/android/server/vr/VrManagerService;Ljava/io/PrintWriter;)V
+PLcom/android/server/vr/VrManagerService;->access$3100(Lcom/android/server/vr/VrManagerService;)I
+PLcom/android/server/vr/VrManagerService;->access$3200(Lcom/android/server/vr/VrManagerService;)Lcom/android/server/vr/EnabledComponentsObserver;
+HSPLcom/android/server/vr/VrManagerService;->access$3300(Lcom/android/server/vr/VrManagerService;ZLandroid/content/ComponentName;IILandroid/content/ComponentName;)V
+HSPLcom/android/server/vr/VrManagerService;->access$3400(Lcom/android/server/vr/VrManagerService;Z)V
+PLcom/android/server/vr/VrManagerService;->access$3500(Lcom/android/server/vr/VrManagerService;Ljava/lang/String;I)Z
+PLcom/android/server/vr/VrManagerService;->access$3800(Lcom/android/server/vr/VrManagerService;)V
+PLcom/android/server/vr/VrManagerService;->access$700(Lcom/android/server/vr/VrManagerService;)Landroid/os/RemoteCallbackList;
+PLcom/android/server/vr/VrManagerService;->access$800(Lcom/android/server/vr/VrManagerService;)Z
+HSPLcom/android/server/vr/VrManagerService;->addPersistentStateCallback(Landroid/service/vr/IPersistentVrStateCallbacks;)V
+HSPLcom/android/server/vr/VrManagerService;->addStateCallback(Landroid/service/vr/IVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService;->consumeAndApplyPendingStateLocked(Z)V
 PLcom/android/server/vr/VrManagerService;->dumpStateTransitions(Ljava/io/PrintWriter;)V
-PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$-BqUtvsdVGS3ye_UHe7qFnTZPn4;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
-PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$-BqUtvsdVGS3ye_UHe7qFnTZPn4;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/vr/VrManagerService;->enforceCallerPermissionAnyOf([Ljava/lang/String;)V
+HSPLcom/android/server/vr/VrManagerService;->getVrMode()Z
+HSPLcom/android/server/vr/VrManagerService;->grantCoarseLocationPermissionIfNeeded(Ljava/lang/String;I)V
+HSPLcom/android/server/vr/VrManagerService;->grantNotificationListenerAccess(Ljava/lang/String;I)V
+HSPLcom/android/server/vr/VrManagerService;->grantNotificationPolicyAccess(Ljava/lang/String;)V
+PLcom/android/server/vr/VrManagerService;->isCurrentVrListener(Ljava/lang/String;I)Z
+HSPLcom/android/server/vr/VrManagerService;->isDefaultAllowed(Ljava/lang/String;)Z
+HSPLcom/android/server/vr/VrManagerService;->isPermissionUserUpdated(Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/vr/VrManagerService;->onAwakeStateChanged(Z)V
+HSPLcom/android/server/vr/VrManagerService;->onBootPhase(I)V
+PLcom/android/server/vr/VrManagerService;->onCleanupUser(I)V
+HSPLcom/android/server/vr/VrManagerService;->onEnabledComponentChanged()V
+HPLcom/android/server/vr/VrManagerService;->onKeyguardStateChanged(Z)V
+HSPLcom/android/server/vr/VrManagerService;->onStart()V
+HSPLcom/android/server/vr/VrManagerService;->onStartUser(I)V
+PLcom/android/server/vr/VrManagerService;->onStopUser(I)V
+PLcom/android/server/vr/VrManagerService;->removeStateCallback(Landroid/service/vr/IVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService;->setPersistentModeAndNotifyListenersLocked(Z)V
+HSPLcom/android/server/vr/VrManagerService;->setScreenOn(Z)V
+HSPLcom/android/server/vr/VrManagerService;->setSystemState(IZ)V
+PLcom/android/server/vr/VrManagerService;->setUserUnlocked()V
+HSPLcom/android/server/vr/VrManagerService;->setVrMode(ZLandroid/content/ComponentName;IILandroid/content/ComponentName;)V
+HPLcom/android/server/vr/VrManagerService;->updateCurrentVrServiceLocked(ZZLandroid/content/ComponentName;IILandroid/content/ComponentName;)Z
+HSPLcom/android/server/vr/VrManagerService;->updateVrModeAllowedLocked()V
+HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$-BqUtvsdVGS3ye_UHe7qFnTZPn4;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$-BqUtvsdVGS3ye_UHe7qFnTZPn4;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$1tPkxHr3PHUgpfvv03vRyPzY3uM;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
 HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$1tPkxHr3PHUgpfvv03vRyPzY3uM;->run()V
 PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$4phuz9MKBqoKfDMu8M8EBVJyI2I;-><init>(Ljava/io/PrintWriter;)V
 PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$93YXv2Z9dcGnT0Vr4Zebgn1qyVM;-><init>(Ljava/io/PrintWriter;)V
 PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$93YXv2Z9dcGnT0Vr4Zebgn1qyVM;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$SxaUJpgTTfzUoz6u3AWuAOQdoNw;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)V
+HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$SxaUJpgTTfzUoz6u3AWuAOQdoNw;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$VUhQWq8Flr0dsQqeVHhHT8jU7qY;-><init>(Ljava/io/PrintWriter;)V
 PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$VUhQWq8Flr0dsQqeVHhHT8jU7qY;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$87DhM3RJJxRNtgkHmd_gtnGk-z4;-><clinit>()V
+PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$87DhM3RJJxRNtgkHmd_gtnGk-z4;-><init>()V
+PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$87DhM3RJJxRNtgkHmd_gtnGk-z4;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$NrNkceFJLqjCb8eAxErUhpLd5c8;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)V
 HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$NrNkceFJLqjCb8eAxErUhpLd5c8;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$QhODF3v-swnwSYvDbeEhU85gOBw;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)V
-PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$Y6NUt3jeHQDhNJsATtXxO4MiWJ0;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)V
+PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$QhODF3v-swnwSYvDbeEhU85gOBw;->run()V
+HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$Y6NUt3jeHQDhNJsATtXxO4MiWJ0;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)V
+PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$Yk86TTURTI5B9DzxOzMQGDq7aQU;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)V
+PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$Yk86TTURTI5B9DzxOzMQGDq7aQU;->run()V
 PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$ZY5r01reAnoB4Dl2bo4au8KMz3Y;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;I)V
 PLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$ZY5r01reAnoB4Dl2bo4au8KMz3Y;->run()V
 HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$la7x4YHA-l88Cd6HFTscnLBbKfI;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;I)V
 HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$la7x4YHA-l88Cd6HFTscnLBbKfI;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$tRb4SPHGj0pcxb3p7arcqKFqs08;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)V
+PLcom/android/server/wallpaper/-$$Lambda$havGP5uMdRgWQrLydPeIOu1qDGE;-><clinit>()V
+PLcom/android/server/wallpaper/-$$Lambda$havGP5uMdRgWQrLydPeIOu1qDGE;-><init>()V
+PLcom/android/server/wallpaper/-$$Lambda$havGP5uMdRgWQrLydPeIOu1qDGE;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wallpaper/GLHelper;-><clinit>()V
+PLcom/android/server/wallpaper/GLHelper;->getMaxTextureSize()I
+PLcom/android/server/wallpaper/GLHelper;->retrieveTextureSizeFromGL()I
 HSPLcom/android/server/wallpaper/WallpaperManagerInternal;-><init>()V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$1;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
-PLcom/android/server/wallpaper/WallpaperManagerService$1;->onDisplayChanged(I)V
+PLcom/android/server/wallpaper/WallpaperManagerService$1;->onDisplayAdded(I)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService$1;->onDisplayChanged(I)V
+PLcom/android/server/wallpaper/WallpaperManagerService$1;->onDisplayRemoved(I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$2;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$3;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$4;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$DisplayData;-><init>(I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
@@ -19055,54 +32266,91 @@
 PLcom/android/server/wallpaper/WallpaperManagerService$Lifecycle;->onUnlockUser(I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$LocalService;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$LocalService;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$1;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$LocalService;->onDisplayReady(I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
-PLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->doPackagesChangedLocked(ZLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)Z
-PLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->doPackagesChangedLocked(ZLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)Z
+PLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+HPLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onPackageModified(Ljava/lang/String;)V
 PLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onPackageUpdateFinished(Ljava/lang/String;I)V
 PLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onPackageUpdateStarted(Ljava/lang/String;I)V
-PLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onSomePackagesChanged()V
+HPLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onSomePackagesChanged()V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;I)V
-PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;->connectLocked(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
-PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;->ensureStatusHandled()V
+HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;->connectLocked(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;->disconnectLocked()V
+HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;->ensureStatusHandled()V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;Landroid/app/WallpaperInfo;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->access$1300(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)Landroid/util/SparseArray;
+HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->access$1400(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Ljava/util/function/Predicate;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->access$2700(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)Ljava/lang/Runnable;
+HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->access$3100(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Landroid/view/Display;)Z
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->appendConnectorWithCondition(Ljava/util/function/Predicate;)V
-PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->attachEngine(Landroid/service/wallpaper/IWallpaperEngine;I)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->attachEngine(Landroid/service/wallpaper/IWallpaperEngine;I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->containsDisplay(I)Z
 PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->engineShown(Landroid/service/wallpaper/IWallpaperEngine;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->forEachDisplayConnector(Ljava/util/function/Consumer;)V
-PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->getDisplayConnectorOrCreate(I)Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;
+HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->getDisplayConnectorOrCreate(I)Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->initDisplayState()V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->isUsableDisplay(Landroid/view/Display;)Z
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->lambda$NrNkceFJLqjCb8eAxErUhpLd5c8(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Landroid/view/Display;)Z
-PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->lambda$new$0$WallpaperManagerService$WallpaperConnection()V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->lambda$onServiceDisconnected$1(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->lambda$onServiceDisconnected$2$WallpaperManagerService$WallpaperConnection()V
+HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->onWallpaperColorsChanged(Landroid/app/WallpaperColors;I)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->processDisconnect(Landroid/content/ServiceConnection;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->scheduleTimeoutLocked()V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->tryToRebind()V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;-><init>(ILjava/io/File;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;->access$3000(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;->cropExists()Z
+HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;->sourceExists()Z
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperObserver;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
-HPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperObserver;->dataForEvent(ZZ)Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;
-HPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperObserver;->onEvent(ILjava/lang/String;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperObserver;->dataForEvent(ZZ)Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;
+HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperObserver;->onEvent(ILjava/lang/String;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;-><clinit>()V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/wallpaper/WallpaperManagerService;->access$000(Lcom/android/server/wallpaper/WallpaperManagerService;)Ljava/lang/Object;
-PLcom/android/server/wallpaper/WallpaperManagerService;->access$1000(Lcom/android/server/wallpaper/WallpaperManagerService;I)V
-PLcom/android/server/wallpaper/WallpaperManagerService;->access$1500(Lcom/android/server/wallpaper/WallpaperManagerService;I)Lcom/android/server/wallpaper/WallpaperManagerService$DisplayData;
-PLcom/android/server/wallpaper/WallpaperManagerService;->access$1600(Lcom/android/server/wallpaper/WallpaperManagerService;)Lcom/android/server/wm/WindowManagerInternal;
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->access$000(Lcom/android/server/wallpaper/WallpaperManagerService;)Ljava/lang/Object;
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$100(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/util/SparseArray;
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->access$1000(Lcom/android/server/wallpaper/WallpaperManagerService;I)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->access$1500(Lcom/android/server/wallpaper/WallpaperManagerService;I)Lcom/android/server/wallpaper/WallpaperManagerService$DisplayData;
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->access$1600(Lcom/android/server/wallpaper/WallpaperManagerService;)Lcom/android/server/wm/WindowManagerInternal;
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->access$1700(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)Z
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->access$1800(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/hardware/display/DisplayManager;
-PLcom/android/server/wallpaper/WallpaperManagerService;->access$1900(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
-PLcom/android/server/wallpaper/WallpaperManagerService;->access$200(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/util/SparseArray;
-PLcom/android/server/wallpaper/WallpaperManagerService;->access$2000(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/content/Context;
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->access$1900(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->access$200(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/util/SparseArray;
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->access$2000(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/content/Context;
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$2100(Lcom/android/server/wallpaper/WallpaperManagerService;)I
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$2200(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/content/ComponentName;
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$2300(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;II)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->access$2400(Lcom/android/server/wallpaper/WallpaperManagerService;)Z
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$2500(Lcom/android/server/wallpaper/WallpaperManagerService;)Z
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$2502(Lcom/android/server/wallpaper/WallpaperManagerService;Z)Z
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$2600(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$2900(Lcom/android/server/wallpaper/WallpaperManagerService;I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$300(Lcom/android/server/wallpaper/WallpaperManagerService;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$400(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$500(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$700(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->access$800(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/content/ComponentName;
-PLcom/android/server/wallpaper/WallpaperManagerService;->attachServiceLocked(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->access$900(Lcom/android/server/wallpaper/WallpaperManagerService;Landroid/content/ComponentName;ZZLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Landroid/os/IRemoteCallback;)Z
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->attachServiceLocked(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->bindWallpaperComponentLocked(Landroid/content/ComponentName;ZZLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Landroid/os/IRemoteCallback;)Z
+PLcom/android/server/wallpaper/WallpaperManagerService;->changingToSame(Landroid/content/ComponentName;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)Z
 PLcom/android/server/wallpaper/WallpaperManagerService;->checkPermission(Ljava/lang/String;)V
-PLcom/android/server/wallpaper/WallpaperManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->clearWallpaper(Ljava/lang/String;II)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->clearWallpaperComponentLocked(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->clearWallpaperLocked(ZIILandroid/os/IRemoteCallback;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->detachWallpaperLocked(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+HPLcom/android/server/wallpaper/WallpaperManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->emptyCallbackList(Landroid/os/RemoteCallbackList;)Z
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->ensureSaneWallpaperData(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->ensureSaneWallpaperDisplaySize(Lcom/android/server/wallpaper/WallpaperManagerService$DisplayData;I)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->extractColors(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->extractDefaultImageWallpaperColors()Landroid/app/WallpaperColors;
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->findWallpaperAtDisplay(II)Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;
+PLcom/android/server/wallpaper/WallpaperManagerService;->forEachDisplayData(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->generateCrop(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->getAttributeInt(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->getDisplayDataOrCreate(I)Lcom/android/server/wallpaper/WallpaperManagerService$DisplayData;
 PLcom/android/server/wallpaper/WallpaperManagerService;->getHeightHint(I)I
@@ -19110,44 +32358,56 @@
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperCallbacks(II)Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperColors(III)Landroid/app/WallpaperColors;
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperDir(I)Ljava/io/File;
-PLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperIdForUser(II)I
-PLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperInfo(I)Landroid/app/WallpaperInfo;
+HPLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperIdForUser(II)I
+HPLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperInfo(I)Landroid/app/WallpaperInfo;
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperSafeLocked(II)Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;
 HPLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperWithFeature(Ljava/lang/String;Ljava/lang/String;Landroid/app/IWallpaperManagerCallback;ILandroid/os/Bundle;I)Landroid/os/ParcelFileDescriptor;
 PLcom/android/server/wallpaper/WallpaperManagerService;->getWidthHint(I)I
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->initialize()V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->initializeFallbackWallpaper()V
-PLcom/android/server/wallpaper/WallpaperManagerService;->isSetWallpaperAllowed(Ljava/lang/String;)Z
+HPLcom/android/server/wallpaper/WallpaperManagerService;->isSetWallpaperAllowed(Ljava/lang/String;)Z
 PLcom/android/server/wallpaper/WallpaperManagerService;->isValidDisplay(I)Z
 PLcom/android/server/wallpaper/WallpaperManagerService;->isWallpaperBackupEligible(II)Z
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->isWallpaperSupported(Ljava/lang/String;)Z
-PLcom/android/server/wallpaper/WallpaperManagerService;->lambda$attachServiceLocked$6(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->lambda$attachServiceLocked$6(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->lambda$dump$7(Ljava/io/PrintWriter;Lcom/android/server/wallpaper/WallpaperManagerService$DisplayData;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->lambda$dump$8(Ljava/io/PrintWriter;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->lambda$notifyWallpaperColorsChanged$0$WallpaperManagerService(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;ILcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->lambda$onUnlockUser$4$WallpaperManagerService(I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->lambda$switchUser$5$WallpaperManagerService(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->lambda$updateFallbackConnection$2(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Landroid/view/Display;)Z
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->loadSettingsLocked(IZ)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->makeJournaledFile(I)Lcom/android/internal/util/JournaledFile;
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->makeWallpaperIdLocked()I
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->migrateFromOld()V
+PLcom/android/server/wallpaper/WallpaperManagerService;->migrateSystemToLockWallpaperLocked(I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->notifyCallbacksLocked(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->notifyColorListeners(Landroid/app/WallpaperColors;III)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->notifyLockWallpaperChanged()V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->notifyWallpaperColorsChanged(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->notifyWallpaperColorsChangedOnDisplay(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;II)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->onBootPhase(I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->onDisplayReadyInternal(I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->onRemoveUser(I)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->onUnlockUser(I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->parseWallpaperAttributes(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Z)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->registerWallpaperColorsCallback(Landroid/app/IWallpaperManagerCallback;II)V
-PLcom/android/server/wallpaper/WallpaperManagerService;->saveSettingsLocked(I)V
-PLcom/android/server/wallpaper/WallpaperManagerService;->setInAmbientMode(ZJ)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->saveSettingsLocked(I)V
+HPLcom/android/server/wallpaper/WallpaperManagerService;->setInAmbientMode(ZJ)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->setLockWallpaperCallback(Landroid/app/IWallpaperManagerCallback;)Z
+PLcom/android/server/wallpaper/WallpaperManagerService;->setWallpaper(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;ZLandroid/os/Bundle;ILandroid/app/IWallpaperManagerCallback;I)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/wallpaper/WallpaperManagerService;->setWallpaperComponent(Landroid/content/ComponentName;I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->setWallpaperComponentChecked(Landroid/content/ComponentName;Ljava/lang/String;I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->stopObserver(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->stopObserversLocked(I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->supportsMultiDisplay(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)Z
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->switchUser(ILandroid/os/IRemoteCallback;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->switchWallpaper(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Landroid/os/IRemoteCallback;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->systemReady()V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->unregisterWallpaperColorsCallback(Landroid/app/IWallpaperManagerCallback;II)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->updateFallbackConnection()V
-PLcom/android/server/wallpaper/WallpaperManagerService;->writeWallpaperAttributes(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->updateWallpaperBitmapLocked(Ljava/lang/String;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Landroid/os/Bundle;)Landroid/os/ParcelFileDescriptor;
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->writeWallpaperAttributes(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
 HSPLcom/android/server/webkit/-$$Lambda$lAUGMGZZth095wGxrAtUYbmlIJY;-><init>(Lcom/android/server/webkit/WebViewUpdateServiceImpl;)V
 HSPLcom/android/server/webkit/-$$Lambda$lAUGMGZZth095wGxrAtUYbmlIJY;->run()V
 HSPLcom/android/server/webkit/SystemImpl$LazyHolder;-><clinit>()V
@@ -19170,29 +32430,35 @@
 HSPLcom/android/server/webkit/SystemImpl;->readSignatures(Landroid/content/res/XmlResourceParser;)[Ljava/lang/String;
 HSPLcom/android/server/webkit/SystemImpl;->systemIsDebuggable()Z
 HSPLcom/android/server/webkit/WebViewUpdateService$1;-><init>(Lcom/android/server/webkit/WebViewUpdateService;)V
-PLcom/android/server/webkit/WebViewUpdateService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/webkit/WebViewUpdateService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/webkit/WebViewUpdateService$BinderService;-><init>(Lcom/android/server/webkit/WebViewUpdateService;)V
 HSPLcom/android/server/webkit/WebViewUpdateService$BinderService;-><init>(Lcom/android/server/webkit/WebViewUpdateService;Lcom/android/server/webkit/WebViewUpdateService$1;)V
 PLcom/android/server/webkit/WebViewUpdateService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/webkit/WebViewUpdateService$BinderService;->getCurrentWebViewPackage()Landroid/content/pm/PackageInfo;
-PLcom/android/server/webkit/WebViewUpdateService$BinderService;->getCurrentWebViewPackageName()Ljava/lang/String;
-PLcom/android/server/webkit/WebViewUpdateService$BinderService;->isMultiProcessEnabled()Z
+HPLcom/android/server/webkit/WebViewUpdateService$BinderService;->getCurrentWebViewPackage()Landroid/content/pm/PackageInfo;
+HPLcom/android/server/webkit/WebViewUpdateService$BinderService;->getCurrentWebViewPackageName()Ljava/lang/String;
+HPLcom/android/server/webkit/WebViewUpdateService$BinderService;->grantVisibilityToCaller(Ljava/lang/String;I)V
+HPLcom/android/server/webkit/WebViewUpdateService$BinderService;->isMultiProcessEnabled()Z
 HSPLcom/android/server/webkit/WebViewUpdateService$BinderService;->notifyRelroCreationCompleted()V
-PLcom/android/server/webkit/WebViewUpdateService$BinderService;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
+HPLcom/android/server/webkit/WebViewUpdateService$BinderService;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
 HSPLcom/android/server/webkit/WebViewUpdateService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/webkit/WebViewUpdateService;->access$000(Landroid/content/Intent;)Ljava/lang/String;
 HSPLcom/android/server/webkit/WebViewUpdateService;->access$100(Lcom/android/server/webkit/WebViewUpdateService;)Lcom/android/server/webkit/WebViewUpdateServiceImpl;
+PLcom/android/server/webkit/WebViewUpdateService;->entirePackageChanged(Landroid/content/Intent;)Z
 HSPLcom/android/server/webkit/WebViewUpdateService;->onStart()V
+PLcom/android/server/webkit/WebViewUpdateService;->packageNameFromIntent(Landroid/content/Intent;)Ljava/lang/String;
 HSPLcom/android/server/webkit/WebViewUpdateService;->prepareWebViewInSystemServer()V
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;-><clinit>()V
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;-><init>(Landroid/content/Context;Lcom/android/server/webkit/SystemInterface;)V
 PLcom/android/server/webkit/WebViewUpdateServiceImpl;->dumpState(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->getCurrentWebViewPackage()Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->getWebViewPackages()[Landroid/webkit/WebViewProviderInfo;
-PLcom/android/server/webkit/WebViewUpdateServiceImpl;->handleNewUser(I)V
+HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->handleNewUser(I)V
 PLcom/android/server/webkit/WebViewUpdateServiceImpl;->handleUserChange()V
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->handleUserRemoved(I)V
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->isMultiProcessEnabled()Z
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->migrateFallbackStateOnBoot()V
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->notifyRelroCreationCompleted()V
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->packageStateChanged(Ljava/lang/String;II)V
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->prepareWebViewInSystemServer()V
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->startZygoteWhenReady()V
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
@@ -19210,6 +32476,7 @@
 HSPLcom/android/server/webkit/WebViewUpdater;->isValidProvider(Landroid/webkit/WebViewProviderInfo;Landroid/content/pm/PackageInfo;)Z
 HSPLcom/android/server/webkit/WebViewUpdater;->notifyRelroCreationCompleted()V
 HSPLcom/android/server/webkit/WebViewUpdater;->onWebViewProviderChanged(Landroid/content/pm/PackageInfo;)V
+PLcom/android/server/webkit/WebViewUpdater;->packageStateChanged(Ljava/lang/String;I)V
 HSPLcom/android/server/webkit/WebViewUpdater;->prepareWebViewInSystemServer()V
 HSPLcom/android/server/webkit/WebViewUpdater;->providerHasValidSignature(Landroid/webkit/WebViewProviderInfo;Landroid/content/pm/PackageInfo;Lcom/android/server/webkit/SystemInterface;)Z
 PLcom/android/server/webkit/WebViewUpdater;->updateCurrentWebViewPackage(Ljava/lang/String;)Landroid/content/pm/PackageInfo;
@@ -19217,128 +32484,204 @@
 HSPLcom/android/server/webkit/WebViewUpdater;->versionCodeGE(JJ)Z
 HSPLcom/android/server/webkit/WebViewUpdater;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
 HSPLcom/android/server/webkit/WebViewUpdater;->webViewIsReadyLocked()Z
-PLcom/android/server/wm/-$$Lambda$-OevXHSXgaSE351ZqRnMoA024MM;-><init>(Lcom/android/server/wm/TaskSnapshotSurface;)V
-PLcom/android/server/wm/-$$Lambda$-OevXHSXgaSE351ZqRnMoA024MM;->run()V
+HPLcom/android/server/wm/-$$Lambda$-OevXHSXgaSE351ZqRnMoA024MM;-><init>(Lcom/android/server/wm/TaskSnapshotSurface;)V
+HPLcom/android/server/wm/-$$Lambda$-OevXHSXgaSE351ZqRnMoA024MM;->run()V
 PLcom/android/server/wm/-$$Lambda$-gsVbWDnbYC49FhjWBEWQbbGfCo;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$-gsVbWDnbYC49FhjWBEWQbbGfCo;-><init>()V
 PLcom/android/server/wm/-$$Lambda$-gsVbWDnbYC49FhjWBEWQbbGfCo;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$-hxY8aP13MItXHILC9K9vyNQgr4;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$-hxY8aP13MItXHILC9K9vyNQgr4;-><init>()V
 HSPLcom/android/server/wm/-$$Lambda$-hxY8aP13MItXHILC9K9vyNQgr4;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$01bPtngJg5AqEoOWfW3rWfV7MH4;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$01bPtngJg5AqEoOWfW3rWfV7MH4;-><init>()V
-PLcom/android/server/wm/-$$Lambda$01bPtngJg5AqEoOWfW3rWfV7MH4;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$01bPtngJg5AqEoOWfW3rWfV7MH4;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$01bPtngJg5AqEoOWfW3rWfV7MH4;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$01bPtngJg5AqEoOWfW3rWfV7MH4;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$1636dquQO0UvkFayOGf_gceB4iw;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$1636dquQO0UvkFayOGf_gceB4iw;-><init>()V
-PLcom/android/server/wm/-$$Lambda$1636dquQO0UvkFayOGf_gceB4iw;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$1636dquQO0UvkFayOGf_gceB4iw;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$1Hjf_Nn5x4aIy9rIBTwVrtrzWFA;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$1Hjf_Nn5x4aIy9rIBTwVrtrzWFA;-><init>()V
 HSPLcom/android/server/wm/-$$Lambda$1Hjf_Nn5x4aIy9rIBTwVrtrzWFA;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/wm/-$$Lambda$2KrtdmjrY7Nagc4IRqzCk9gDuQU;-><init>(Lcom/android/server/wm/WindowManagerService;)V
-PLcom/android/server/wm/-$$Lambda$2KrtdmjrY7Nagc4IRqzCk9gDuQU;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$5zunxFfSXQYpejvFiP3lO5a4GDY;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$5zunxFfSXQYpejvFiP3lO5a4GDY;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$5zunxFfSXQYpejvFiP3lO5a4GDY;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$1uR2GodW3-TXQGLlsV_nCi1hRIE;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$1uR2GodW3-TXQGLlsV_nCi1hRIE;-><init>()V
+PLcom/android/server/wm/-$$Lambda$1uR2GodW3-TXQGLlsV_nCi1hRIE;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$1z_bkwouqOBIC89HKBNNqb1FoaY;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$1z_bkwouqOBIC89HKBNNqb1FoaY;-><init>()V
+PLcom/android/server/wm/-$$Lambda$1z_bkwouqOBIC89HKBNNqb1FoaY;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$2KrtdmjrY7Nagc4IRqzCk9gDuQU;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+HPLcom/android/server/wm/-$$Lambda$2KrtdmjrY7Nagc4IRqzCk9gDuQU;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$5JqEQmkxeln8TugmxHRkbeL4kzY;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$5JqEQmkxeln8TugmxHRkbeL4kzY;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$5JqEQmkxeln8TugmxHRkbeL4kzY;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$5zunxFfSXQYpejvFiP3lO5a4GDY;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$5zunxFfSXQYpejvFiP3lO5a4GDY;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$5zunxFfSXQYpejvFiP3lO5a4GDY;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$5zz5Ugt4wxIXoNE3lZS6NA9z_Jk;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$5zz5Ugt4wxIXoNE3lZS6NA9z_Jk;-><init>()V
+PLcom/android/server/wm/-$$Lambda$5zz5Ugt4wxIXoNE3lZS6NA9z_Jk;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$6P_D-ul93Vzg9xx2hvWUdYrHVXg;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$6P_D-ul93Vzg9xx2hvWUdYrHVXg;-><init>()V
-PLcom/android/server/wm/-$$Lambda$6P_D-ul93Vzg9xx2hvWUdYrHVXg;->get()Ljava/lang/Object;
+HPLcom/android/server/wm/-$$Lambda$6P_D-ul93Vzg9xx2hvWUdYrHVXg;->get()Ljava/lang/Object;
 HSPLcom/android/server/wm/-$$Lambda$7nuK7cv058ES7c7refBFgc-jagk;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$7nuK7cv058ES7c7refBFgc-jagk;-><init>()V
-PLcom/android/server/wm/-$$Lambda$7nuK7cv058ES7c7refBFgc-jagk;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$7nuK7cv058ES7c7refBFgc-jagk;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$8ew6SY_v_7ex9pwFGDswbkGWuXc;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$8ew6SY_v_7ex9pwFGDswbkGWuXc;-><init>()V
+PLcom/android/server/wm/-$$Lambda$8ew6SY_v_7ex9pwFGDswbkGWuXc;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$99XNq73vh8e4HVH9BuxFhbLxKVY;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$99XNq73vh8e4HVH9BuxFhbLxKVY;-><init>()V
-PLcom/android/server/wm/-$$Lambda$99XNq73vh8e4HVH9BuxFhbLxKVY;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$99XNq73vh8e4HVH9BuxFhbLxKVY;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$9vBfnQOmNnsc9WU80IIatZHQGKc;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$9vBfnQOmNnsc9WU80IIatZHQGKc;-><init>()V
 HSPLcom/android/server/wm/-$$Lambda$9vBfnQOmNnsc9WU80IIatZHQGKc;->get()Ljava/lang/Object;
+PLcom/android/server/wm/-$$Lambda$ABB1r3i-Ua4IQKhbebsmnEGpWd8;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ABB1r3i-Ua4IQKhbebsmnEGpWd8;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ABB1r3i-Ua4IQKhbebsmnEGpWd8;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$ADNhW0r9Skcs9ezrOGURijI-lyQ;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$ADNhW0r9Skcs9ezrOGURijI-lyQ;-><init>()V
 HSPLcom/android/server/wm/-$$Lambda$ADNhW0r9Skcs9ezrOGURijI-lyQ;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$AccessibilityController$DisplayMagnifier$MagnifiedViewport$ZNyFGy-UXiWV1D2yZGvH-9qN0AA;-><init>(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;Landroid/util/SparseArray;)V
+HPLcom/android/server/wm/-$$Lambda$AccessibilityController$DisplayMagnifier$MagnifiedViewport$ZNyFGy-UXiWV1D2yZGvH-9qN0AA;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$AccessibilityController$WindowsForAccessibilityObserver$2C1tADzS58YZU_H5KqoEnZ2M57I;-><init>(Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;Lcom/android/server/wm/WindowState;Landroid/graphics/Matrix;Landroid/graphics/Region;)V
+HPLcom/android/server/wm/-$$Lambda$AccessibilityController$WindowsForAccessibilityObserver$2C1tADzS58YZU_H5KqoEnZ2M57I;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$AccessibilityController$WindowsForAccessibilityObserver$gS9b6G5QkV-2hX2iGcgQl5HPWws;-><init>(Ljava/util/List;)V
+HPLcom/android/server/wm/-$$Lambda$AccessibilityController$WindowsForAccessibilityObserver$gS9b6G5QkV-2hX2iGcgQl5HPWws;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$AccessibilityController$WindowsForAccessibilityObserver$n5Rg8WjCeBbjXNbZvPUlKzhx8Nw;-><init>(Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;Ljava/util/List;)V
+HPLcom/android/server/wm/-$$Lambda$AccessibilityController$WindowsForAccessibilityObserver$n5Rg8WjCeBbjXNbZvPUlKzhx8Nw;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$3JeUkmbe0mtunyS6P4HpkAkfKIY;-><init>(Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
 PLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$3JeUkmbe0mtunyS6P4HpkAkfKIY;->run()V
-PLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$9gqV7SOtv0dBXWMri6Jpu47OdLc;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$9gqV7SOtv0dBXWMri6Jpu47OdLc;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$9gqV7SOtv0dBXWMri6Jpu47OdLc;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$MEjrvbJugXgttKs3lnAk7x7tVPc;-><init>(Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
-PLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$MEjrvbJugXgttKs3lnAk7x7tVPc;->run()V
-PLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$fTBXciy3VZJ2vTW_ZJXaKfUj7_I;-><init>(Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
-PLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$fTBXciy3VZJ2vTW_ZJXaKfUj7_I;->run()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$9gqV7SOtv0dBXWMri6Jpu47OdLc;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$9gqV7SOtv0dBXWMri6Jpu47OdLc;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$9gqV7SOtv0dBXWMri6Jpu47OdLc;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$MEjrvbJugXgttKs3lnAk7x7tVPc;-><init>(Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
+HPLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$MEjrvbJugXgttKs3lnAk7x7tVPc;->run()V
+HPLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$fTBXciy3VZJ2vTW_ZJXaKfUj7_I;-><init>(Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
+HPLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$fTBXciy3VZJ2vTW_ZJXaKfUj7_I;->run()V
 PLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$l0oslVb5YyQhsmr7OXWV2whbXYU;-><init>(Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
 PLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$l0oslVb5YyQhsmr7OXWV2whbXYU;->run()V
-PLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$sZFHZi7b6t6yjfx5mx3RtECSlEU;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$sZFHZi7b6t6yjfx5mx3RtECSlEU;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$sZFHZi7b6t6yjfx5mx3RtECSlEU;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$QP-eHsXODaflS0pyRnr8fdoF6BU;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$QP-eHsXODaflS0pyRnr8fdoF6BU;-><init>()V
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$QP-eHsXODaflS0pyRnr8fdoF6BU;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$sZFHZi7b6t6yjfx5mx3RtECSlEU;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$sZFHZi7b6t6yjfx5mx3RtECSlEU;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$sZFHZi7b6t6yjfx5mx3RtECSlEU;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/wm/-$$Lambda$ActivityRecord$HCzV5lDTWOurUvy4cOGaHiRsYqY;-><init>(Lcom/android/server/wm/ActivityRecord;[F[F)V
+PLcom/android/server/wm/-$$Lambda$ActivityRecord$HCzV5lDTWOurUvy4cOGaHiRsYqY;->run()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityRecord$QP-eHsXODaflS0pyRnr8fdoF6BU;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityRecord$QP-eHsXODaflS0pyRnr8fdoF6BU;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityRecord$QP-eHsXODaflS0pyRnr8fdoF6BU;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$ActivityRecord$TmL40hmGhjc2_QavTI0gwtolvY8;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityRecord$TmL40hmGhjc2_QavTI0gwtolvY8;-><init>()V
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$TmL40hmGhjc2_QavTI0gwtolvY8;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$ActivityRecord$TmL40hmGhjc2_QavTI0gwtolvY8;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$ActivityRecord$XnMxHSlbhK9x7qGQcZpHSkPOQvQ;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityRecord$XnMxHSlbhK9x7qGQcZpHSkPOQvQ;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$ActivityRecord$XnMxHSlbhK9x7qGQcZpHSkPOQvQ;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$YSVwd546vKWMiMYy7MFzg1qRiio;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/-$$Lambda$ActivityRecord$YSVwd546vKWMiMYy7MFzg1qRiio;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/-$$Lambda$ActivityRecord$YSVwd546vKWMiMYy7MFzg1qRiio;->applyAppSaturation([F[F)V
 PLcom/android/server/wm/-$$Lambda$ActivityRecord$YY5kCNb4uWg5W_2lbH3ZOqirP1g;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityRecord$YY5kCNb4uWg5W_2lbH3ZOqirP1g;-><init>()V
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$YY5kCNb4uWg5W_2lbH3ZOqirP1g;->apply(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$ActivityRecord$YY5kCNb4uWg5W_2lbH3ZOqirP1g;->apply(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$ActivityRecord$gHNTxsqqXHTV3N7vXQjmY818XQI;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityRecord$gHNTxsqqXHTV3N7vXQjmY818XQI;-><init>()V
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$gHNTxsqqXHTV3N7vXQjmY818XQI;->apply(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$ActivityRecord$gHNTxsqqXHTV3N7vXQjmY818XQI;->apply(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$ActivityRecord$jAKnTXYErEwplxJ5lQgj44-M9_c;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ActivityRecord$jAKnTXYErEwplxJ5lQgj44-M9_c;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ActivityRecord$jAKnTXYErEwplxJ5lQgj44-M9_c;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$ActivityRecord$lyqdJlA4QOn1CXj7zglxNJxDy9o;-><init>(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/-$$Lambda$ActivityRecord$lyqdJlA4QOn1CXj7zglxNJxDy9o;->get()Ljava/lang/Object;
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$prAsqx_JQJTqW1jNxmkuU3AV8AU;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$prAsqx_JQJTqW1jNxmkuU3AV8AU;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$ActivityRecord$prAsqx_JQJTqW1jNxmkuU3AV8AU;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$tt99EJHW_Nk5qgU9galJBIm5wXg;-><init>(Lcom/android/server/policy/WindowManagerPolicy$StartingSurface;)V
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$tt99EJHW_Nk5qgU9galJBIm5wXg;->run()V
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$viEGm2vZbJCQ4-hdkomJCNYJiHU;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$ActivityRecord$viEGm2vZbJCQ4-hdkomJCNYJiHU;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$ActivityRecord$viEGm2vZbJCQ4-hdkomJCNYJiHU;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$ActivityRecord$prAsqx_JQJTqW1jNxmkuU3AV8AU;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityRecord$prAsqx_JQJTqW1jNxmkuU3AV8AU;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityRecord$prAsqx_JQJTqW1jNxmkuU3AV8AU;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/-$$Lambda$ActivityRecord$tt99EJHW_Nk5qgU9galJBIm5wXg;-><init>(Lcom/android/server/policy/WindowManagerPolicy$StartingSurface;)V
+HPLcom/android/server/wm/-$$Lambda$ActivityRecord$tt99EJHW_Nk5qgU9galJBIm5wXg;->run()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityRecord$viEGm2vZbJCQ4-hdkomJCNYJiHU;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityRecord$viEGm2vZbJCQ4-hdkomJCNYJiHU;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityRecord$viEGm2vZbJCQ4-hdkomJCNYJiHU;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityServiceConnectionsHolder$3WnpJbbvyxcEr6D6eCp22ebnxPk;-><init>(Lcom/android/server/wm/ActivityServiceConnectionsHolder;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityServiceConnectionsHolder$3WnpJbbvyxcEr6D6eCp22ebnxPk;->run()V
+PLcom/android/server/wm/-$$Lambda$ActivityServiceConnectionsHolder$E9W1qwLXBAwoppLfYj6pecVF_x8;-><init>(Lcom/android/server/wm/ActivityServiceConnectionsHolder;)V
+PLcom/android/server/wm/-$$Lambda$ActivityServiceConnectionsHolder$E9W1qwLXBAwoppLfYj6pecVF_x8;->run()V
 HSPLcom/android/server/wm/-$$Lambda$ActivityStack$0bNPw28X3N2biqQIdsnZuX7xaP4;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$ActivityStack$0bNPw28X3N2biqQIdsnZuX7xaP4;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$ActivityStack$0bNPw28X3N2biqQIdsnZuX7xaP4;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$ActivityStack$0bNPw28X3N2biqQIdsnZuX7xaP4;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$ActivityStack$2g-Gmexz3kbCg6lRcnM6dKBTDYc;-><init>(Lcom/android/server/wm/ActivityStack;Lcom/android/server/wm/DisplayContent;Landroid/graphics/Rect;Landroid/graphics/Rect;IIZZI)V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$2g-Gmexz3kbCg6lRcnM6dKBTDYc;->run()V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$4eA3orAXlhwXqOJQ8sydb6lzW_4;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$4eA3orAXlhwXqOJQ8sydb6lzW_4;-><init>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$4eA3orAXlhwXqOJQ8sydb6lzW_4;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$ActivityStack$5VekJIJoJIh5JMUz2PkEx2YRfmo;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$5VekJIJoJIh5JMUz2PkEx2YRfmo;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$5VekJIJoJIh5JMUz2PkEx2YRfmo;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$8rl8kos6nVh_HCoMLzbQatFXfQM;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$8rl8kos6nVh_HCoMLzbQatFXfQM;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$8rl8kos6nVh_HCoMLzbQatFXfQM;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$9LPSm49BYrWURHV0f_s9bnJYnVk;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$9LPSm49BYrWURHV0f_s9bnJYnVk;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$9LPSm49BYrWURHV0f_s9bnJYnVk;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$ActivityStack$BmRNRfPY9eDs_h7lUVkDfKuzXrA;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$BmRNRfPY9eDs_h7lUVkDfKuzXrA;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$ActivityStack$BmRNRfPY9eDs_h7lUVkDfKuzXrA;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$BqE10FCv9how7gdM55red1ApUGs;-><init>(Lcom/android/server/am/ActivityManagerService$ItemMatcher;Ljava/util/ArrayList;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$BqE10FCv9how7gdM55red1ApUGs;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$Bw4s_aT8NefvklvOlavSngajM-8;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$Bw4s_aT8NefvklvOlavSngajM-8;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$ActivityStack$Bw4s_aT8NefvklvOlavSngajM-8;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$ActivityStack$CheckBehindFullscreenActivityHelper$hxEhv3lodv2mTq0c1tG208T2TSs;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$ActivityStack$CheckBehindFullscreenActivityHelper$hxEhv3lodv2mTq0c1tG208T2TSs;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$ActivityStack$CheckBehindFullscreenActivityHelper$hxEhv3lodv2mTq0c1tG208T2TSs;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/wm/-$$Lambda$ActivityStack$CheckBehindFullscreenActivityHelper$hxEhv3lodv2mTq0c1tG208T2TSs;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityStack$CheckBehindFullscreenActivityHelper$hxEhv3lodv2mTq0c1tG208T2TSs;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityStack$CheckBehindFullscreenActivityHelper$hxEhv3lodv2mTq0c1tG208T2TSs;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/wm/-$$Lambda$ActivityStack$FkaZkaRIeozTqSdHkmYZNbNtF1I;-><init>(Lcom/android/server/wm/ActivityStack;IZZZZZ)V
 HSPLcom/android/server/wm/-$$Lambda$ActivityStack$FkaZkaRIeozTqSdHkmYZNbNtF1I;->run()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$FmEEyG-_GV_nB2HunZ086MlsGbw;-><init>(Lcom/android/server/wm/ActivityRecord;[I[Landroid/content/Intent;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$FmEEyG-_GV_nB2HunZ086MlsGbw;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/wm/-$$Lambda$ActivityStack$GDPUuzTvyfp2z6wYxqAF0vhMJK8;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$GDPUuzTvyfp2z6wYxqAF0vhMJK8;-><init>()V
-PLcom/android/server/wm/-$$Lambda$ActivityStack$GDPUuzTvyfp2z6wYxqAF0vhMJK8;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$ActivityStack$GDPUuzTvyfp2z6wYxqAF0vhMJK8;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$LjKdRo1XcwS4pEMN4TDnJTwl_Xs;-><init>(Landroid/util/proto/ProtoOutputStream;I)V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$LjKdRo1XcwS4pEMN4TDnJTwl_Xs;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$ActivityStack$MbOt7bGpxw9wmjZ8kOCkYcDCqMQ;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$ActivityStack$MbOt7bGpxw9wmjZ8kOCkYcDCqMQ;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$ActivityStack$MbOt7bGpxw9wmjZ8kOCkYcDCqMQ;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$ActivityStack$McNymlK649VA6OMbsDYgFAkVJo8;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$McNymlK649VA6OMbsDYgFAkVJo8;-><init>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$N2PfGF62p6Y1TYGt9lvFtsW9LmQ;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$N2PfGF62p6Y1TYGt9lvFtsW9LmQ;-><init>()V
-PLcom/android/server/wm/-$$Lambda$ActivityStack$N2PfGF62p6Y1TYGt9lvFtsW9LmQ;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/-$$Lambda$ActivityStack$N2PfGF62p6Y1TYGt9lvFtsW9LmQ;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/wm/-$$Lambda$ActivityStack$NfjvUUwVOB3bYUF_fHSaW6oHS94;-><init>(Landroid/util/proto/ProtoOutputStream;I)V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$NfjvUUwVOB3bYUF_fHSaW6oHS94;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$ActivityStack$RemoveHistoryRecordsForApp$8j2ZFLAwkXnwDAxiTFN7mMDLhjU;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$ActivityStack$RemoveHistoryRecordsForApp$8j2ZFLAwkXnwDAxiTFN7mMDLhjU;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$ActivityStack$RemoveHistoryRecordsForApp$8j2ZFLAwkXnwDAxiTFN7mMDLhjU;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$ActivityStack$U5MWhpArTVT_b8W6GtTa1Ao8HFs;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$ActivityStack$U5MWhpArTVT_b8W6GtTa1Ao8HFs;-><init>()V
-PLcom/android/server/wm/-$$Lambda$ActivityStack$U5MWhpArTVT_b8W6GtTa1Ao8HFs;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$ActivityStack$RemoveHistoryRecordsForApp$8j2ZFLAwkXnwDAxiTFN7mMDLhjU;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$TtiWgYBlSmpdH3zrFrJGnJ3IEn8;-><init>(Lcom/android/server/wm/ActivityStack;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$TtiWgYBlSmpdH3zrFrJGnJ3IEn8;->run()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityStack$U5MWhpArTVT_b8W6GtTa1Ao8HFs;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityStack$U5MWhpArTVT_b8W6GtTa1Ao8HFs;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$ActivityStack$U5MWhpArTVT_b8W6GtTa1Ao8HFs;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$ActivityStack$VIuWlCdKwIo4qqRlevMLniedZ7o;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$VIuWlCdKwIo4qqRlevMLniedZ7o;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$VIuWlCdKwIo4qqRlevMLniedZ7o;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$W1rlXKcoaLb8UYskrF3gqMvOkRU;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$W1rlXKcoaLb8UYskrF3gqMvOkRU;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$W1rlXKcoaLb8UYskrF3gqMvOkRU;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$YAQEcQUrLqR06xiJJApMvOPIxhg;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$YAQEcQUrLqR06xiJJApMvOPIxhg;-><init>()V
-PLcom/android/server/wm/-$$Lambda$ActivityStack$YAQEcQUrLqR06xiJJApMvOPIxhg;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$ActivityStack$YAQEcQUrLqR06xiJJApMvOPIxhg;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$YtJbVURmslxye4JS4EFo6X31Vv0;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$YtJbVURmslxye4JS4EFo6X31Vv0;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$YtJbVURmslxye4JS4EFo6X31Vv0;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$YwFMIPNkUBnV2uIqB9sZ47M__Og;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$YwFMIPNkUBnV2uIqB9sZ47M__Og;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$YwFMIPNkUBnV2uIqB9sZ47M__Og;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$ZeqjtPeTSrJ3k2l6y2bUmw5uqo0;-><init>(Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$ZeqjtPeTSrJ3k2l6y2bUmw5uqo0;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$bz2cGPwYAKpE4bX0VyxJRH8LJRE;-><init>(Lcom/android/server/wm/ActivityStack;Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$bz2cGPwYAKpE4bX0VyxJRH8LJRE;->run()V
-PLcom/android/server/wm/-$$Lambda$ActivityStack$ccf0sRiFvFeqRiJQ6iXIEF1eN1Q;-><init>(Lcom/android/server/wm/ActivityStack;ZLjava/io/PrintWriter;Ljava/io/FileDescriptor;ZZLjava/lang/String;)V
-PLcom/android/server/wm/-$$Lambda$ActivityStack$ccf0sRiFvFeqRiJQ6iXIEF1eN1Q;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$bzlcMWlmDol-PMxBdUW69zw6n4Q;-><init>(ZLjava/io/PrintWriter;Ljava/io/FileDescriptor;ZZLjava/lang/String;)V
+HPLcom/android/server/wm/-$$Lambda$ActivityStack$bzlcMWlmDol-PMxBdUW69zw6n4Q;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$ActivityStack$ccf0sRiFvFeqRiJQ6iXIEF1eN1Q;-><init>(Lcom/android/server/wm/ActivityStack;ZLjava/io/PrintWriter;Ljava/io/FileDescriptor;ZZLjava/lang/String;)V
+HPLcom/android/server/wm/-$$Lambda$ActivityStack$ccf0sRiFvFeqRiJQ6iXIEF1eN1Q;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$dhfbladKtxXwwdCS2dFdAfUfBN4;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$dhfbladKtxXwwdCS2dFdAfUfBN4;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$dhfbladKtxXwwdCS2dFdAfUfBN4;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$n-w1s4z47M3zxF8atJ8fDCrw2CA;-><init>(Lcom/android/server/wm/ActivityStack;Lcom/android/server/wm/BoundsAnimationController;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$n-w1s4z47M3zxF8atJ8fDCrw2CA;->run()V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$vLTEw6nwtjcZ-ZyMktx8L5MR_TA;-><init>(Landroid/content/ComponentName;)V
+PLcom/android/server/wm/-$$Lambda$ActivityStack$vLTEw6nwtjcZ-ZyMktx8L5MR_TA;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$ActivityStack$xrtErRAEnS21CI3h4SKc_WzJFDA;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStack$xrtErRAEnS21CI3h4SKc_WzJFDA;-><init>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$0u1RcpeZ6m0BHDGGv8EXroS3KyE;-><init>(Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/ActivityStack;)V
@@ -19353,116 +32696,183 @@
 PLcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$MoveTaskToFullscreenHelper$n0VOwWNM3mud17SnHip7XMiWlWE;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$PKLpVoHaca7ZAS9IjUCkoGIBtDw;-><init>(Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/ActivityStack;Z)V
 PLcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$PKLpVoHaca7ZAS9IjUCkoGIBtDw;->run()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$iNb1-M_lYtbDycAXODgbDkmI9ww;-><init>(Lcom/android/server/wm/ActivityStackSupervisor;)V
+HSPLcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$iNb1-M_lYtbDycAXODgbDkmI9ww;->run()V
 PLcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$mLKHIIzkTAK9QSlSxia8-84y15M;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$mLKHIIzkTAK9QSlSxia8-84y15M;-><init>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$mLKHIIzkTAK9QSlSxia8-84y15M;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$ActivityStartController$6bTAPCVeDq_D4Y53Y5WNfMK4xBE;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityStartController$6bTAPCVeDq_D4Y53Y5WNfMK4xBE;-><init>()V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$-xFyZDUKMraVkermSJGXQdN3oJ4;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$-xFyZDUKMraVkermSJGXQdN3oJ4;->run()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$-xFyZDUKMraVkermSJGXQdN3oJ4;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
+HSPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$-xFyZDUKMraVkermSJGXQdN3oJ4;->run()V
 PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$3DTHgCAeEd5OOF7ACeXoCk8mmrQ;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$3DTHgCAeEd5OOF7ACeXoCk8mmrQ;-><init>()V
 PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$3DTHgCAeEd5OOF7ACeXoCk8mmrQ;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$7Ia1bmRpPHHSNlbH8cuLw8dKG04;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$7Ia1bmRpPHHSNlbH8cuLw8dKG04;->run()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$7Ia1bmRpPHHSNlbH8cuLw8dKG04;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$7Ia1bmRpPHHSNlbH8cuLw8dKG04;->run()V
 PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$7ieG0s-7Zp4H2bLiWdOgB6MqhcI;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$7ieG0s-7Zp4H2bLiWdOgB6MqhcI;-><init>()V
 PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$7ieG0s-7Zp4H2bLiWdOgB6MqhcI;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$BXul1K8BX6JEv_ff3NT76qpeZGQ;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/IBinder;)V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$BXul1K8BX6JEv_ff3NT76qpeZGQ;->run()V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$Uli7s8UWTEj0IpBUtoST5bmgvKk;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$Uli7s8UWTEj0IpBUtoST5bmgvKk;->run()V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$iduseKQrjIWQYD0hJ8Q5DMmuSfE;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$iduseKQrjIWQYD0hJ8Q5DMmuSfE;->run()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$BXul1K8BX6JEv_ff3NT76qpeZGQ;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$BXul1K8BX6JEv_ff3NT76qpeZGQ;->run()V
+PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$U6g1UdnOPnEF9wX1OTm9nKVXY5k;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$U6g1UdnOPnEF9wX1OTm9nKVXY5k;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$U6g1UdnOPnEF9wX1OTm9nKVXY5k;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$Uli7s8UWTEj0IpBUtoST5bmgvKk;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
+HPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$Uli7s8UWTEj0IpBUtoST5bmgvKk;->run()V
+HPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$iduseKQrjIWQYD0hJ8Q5DMmuSfE;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
+HPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$iduseKQrjIWQYD0hJ8Q5DMmuSfE;->run()V
 PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$js0zprxhKzo_Mx9ozR8logP_1-c;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityRecord;Landroid/app/PictureInPictureParams;)V
 PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$js0zprxhKzo_Mx9ozR8logP_1-c;->run()V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$oP6xxIfnD4kb4JN7aSJU073ULR4;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ZZ)V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$oP6xxIfnD4kb4JN7aSJU073ULR4;->run()V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$p4I6RZJqLXjaEjdISFyNzjAe4HE;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ZLcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$p4I6RZJqLXjaEjdISFyNzjAe4HE;->run()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$oP6xxIfnD4kb4JN7aSJU073ULR4;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ZZ)V
+HSPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$oP6xxIfnD4kb4JN7aSJU073ULR4;->run()V
+HSPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$p4I6RZJqLXjaEjdISFyNzjAe4HE;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ZLcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$p4I6RZJqLXjaEjdISFyNzjAe4HE;->run()V
+PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$yP9TbBmrgQ4lrgcxb-8oL1pBAs4;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$yP9TbBmrgQ4lrgcxb-8oL1pBAs4;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$yP9TbBmrgQ4lrgcxb-8oL1pBAs4;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$AlertWindowNotification$ZuqSYML-X-nkNVTba_yeIT9hJ1s;-><init>(Lcom/android/server/wm/AlertWindowNotification;Z)V
 PLcom/android/server/wm/-$$Lambda$AlertWindowNotification$ZuqSYML-X-nkNVTba_yeIT9hJ1s;->run()V
 PLcom/android/server/wm/-$$Lambda$AlertWindowNotification$iVtcJMb6VtqtAgEtGUDCkGay0tM;-><init>(Lcom/android/server/wm/AlertWindowNotification;)V
 PLcom/android/server/wm/-$$Lambda$AlertWindowNotification$iVtcJMb6VtqtAgEtGUDCkGay0tM;->run()V
+PLcom/android/server/wm/-$$Lambda$AppTransition$9JtLlCXlArIsRNjLJ0_3RWFSHts;-><init>(Lcom/android/server/wm/AppTransition;Landroid/view/IAppTransitionAnimationSpecsFuture;)V
+PLcom/android/server/wm/-$$Lambda$AppTransition$9JtLlCXlArIsRNjLJ0_3RWFSHts;->run()V
 PLcom/android/server/wm/-$$Lambda$AppTransition$B95jxKE2FnT5RNLStTafenhEYj4;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$AppTransition$B95jxKE2FnT5RNLStTafenhEYj4;-><init>()V
 PLcom/android/server/wm/-$$Lambda$AppTransition$B95jxKE2FnT5RNLStTafenhEYj4;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$AppTransition$xrq-Gwel_FcpfDvO2DrCfGN_3bk;-><init>(Lcom/android/server/wm/AppTransition;)V
 PLcom/android/server/wm/-$$Lambda$AppTransition$xrq-Gwel_FcpfDvO2DrCfGN_3bk;->run()V
-PLcom/android/server/wm/-$$Lambda$AppTransitionController$ZU-2ppbyGJ7-UsXREbcW1x9TJH0;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$AppTransitionController$ZU-2ppbyGJ7-UsXREbcW1x9TJH0;-><init>()V
-PLcom/android/server/wm/-$$Lambda$AppTransitionController$ZU-2ppbyGJ7-UsXREbcW1x9TJH0;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$AppTransitionController$o_nkoN7a-ZHaSAgJCQZcboKz9Ig;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$AppTransitionController$o_nkoN7a-ZHaSAgJCQZcboKz9Ig;-><init>()V
-PLcom/android/server/wm/-$$Lambda$AppTransitionController$o_nkoN7a-ZHaSAgJCQZcboKz9Ig;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$AppTransitionController$z5kCoexPNTWFncmRBfeXr6HA2JA;-><init>(ILandroid/util/ArraySet;)V
-PLcom/android/server/wm/-$$Lambda$AppTransitionController$z5kCoexPNTWFncmRBfeXr6HA2JA;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$AppTransitionController$KP68kgUCojUmpcFh_s6uhO2M93o;-><init>(Ljava/util/ArrayList;)V
+PLcom/android/server/wm/-$$Lambda$AppTransitionController$KP68kgUCojUmpcFh_s6uhO2M93o;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
+HSPLcom/android/server/wm/-$$Lambda$AppTransitionController$ZU-2ppbyGJ7-UsXREbcW1x9TJH0;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$AppTransitionController$ZU-2ppbyGJ7-UsXREbcW1x9TJH0;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$AppTransitionController$ZU-2ppbyGJ7-UsXREbcW1x9TJH0;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$AppTransitionController$fJATtpiRgHjEgZVznt1dzW5Mwt0;-><init>(Ljava/util/ArrayList;)V
+HPLcom/android/server/wm/-$$Lambda$AppTransitionController$fJATtpiRgHjEgZVznt1dzW5Mwt0;->run()V
+HSPLcom/android/server/wm/-$$Lambda$AppTransitionController$o_nkoN7a-ZHaSAgJCQZcboKz9Ig;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$AppTransitionController$o_nkoN7a-ZHaSAgJCQZcboKz9Ig;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$AppTransitionController$o_nkoN7a-ZHaSAgJCQZcboKz9Ig;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$AppTransitionController$wKDCdmYJWN9Qk9bjArILV5j7lEY;-><init>(Lcom/android/server/wm/AppTransitionController;)V
+PLcom/android/server/wm/-$$Lambda$AppTransitionController$wKDCdmYJWN9Qk9bjArILV5j7lEY;->run()V
+HSPLcom/android/server/wm/-$$Lambda$AppTransitionController$z5kCoexPNTWFncmRBfeXr6HA2JA;-><init>(ILandroid/util/ArraySet;)V
+HPLcom/android/server/wm/-$$Lambda$AppTransitionController$z5kCoexPNTWFncmRBfeXr6HA2JA;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$B16jdo1lKUkQ4B7iWXwPKs2MAdg;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$B16jdo1lKUkQ4B7iWXwPKs2MAdg;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$B16jdo1lKUkQ4B7iWXwPKs2MAdg;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$B58NKEOrr2mhFWeS3bqpaZnd11o;-><init>(Lcom/android/server/wm/WindowManagerService$SettingsObserver;)V
 HSPLcom/android/server/wm/-$$Lambda$B58NKEOrr2mhFWeS3bqpaZnd11o;->run()V
 PLcom/android/server/wm/-$$Lambda$BEx3OWenCvYAaV5h_J2ZkZXhEcY;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$BEx3OWenCvYAaV5h_J2ZkZXhEcY;-><init>()V
-PLcom/android/server/wm/-$$Lambda$BEx3OWenCvYAaV5h_J2ZkZXhEcY;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$BEx3OWenCvYAaV5h_J2ZkZXhEcY;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$BoundsAnimationController$3-yWz6AXIW5r1KElGtHEgHZdi5Q;-><init>(Lcom/android/server/wm/BoundsAnimationController;Landroid/animation/AnimationHandler;)V
 HSPLcom/android/server/wm/-$$Lambda$BoundsAnimationController$3-yWz6AXIW5r1KElGtHEgHZdi5Q;->run()V
 PLcom/android/server/wm/-$$Lambda$BoundsAnimationController$BoundsAnimator$eIPNx9WcD7moTPCByy2XhPMSdCs;-><init>(Lcom/android/server/wm/BoundsAnimationController$BoundsAnimator;)V
 PLcom/android/server/wm/-$$Lambda$BoundsAnimationController$BoundsAnimator$eIPNx9WcD7moTPCByy2XhPMSdCs;->run()V
-PLcom/android/server/wm/-$$Lambda$BoundsAnimationController$MoVv_WhxoMrTVo-xz1qu2FMcYrM;-><init>(Lcom/android/server/wm/BoundsAnimationController;)V
+HPLcom/android/server/wm/-$$Lambda$BoundsAnimationController$MoVv_WhxoMrTVo-xz1qu2FMcYrM;-><init>(Lcom/android/server/wm/BoundsAnimationController;)V
 PLcom/android/server/wm/-$$Lambda$BoundsAnimationController$MoVv_WhxoMrTVo-xz1qu2FMcYrM;->run()V
+HSPLcom/android/server/wm/-$$Lambda$CD-g9zNm970tG9hCSQ-1BiBOrwY;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$CD-g9zNm970tG9hCSQ-1BiBOrwY;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$CD-g9zNm970tG9hCSQ-1BiBOrwY;->applyAsInt(Ljava/lang/Object;)I
 PLcom/android/server/wm/-$$Lambda$CkqCuQmAGdLOVExbosZfF3sXdHQ;-><init>(Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/-$$Lambda$CkqCuQmAGdLOVExbosZfF3sXdHQ;->get()Ljava/lang/Object;
+HPLcom/android/server/wm/-$$Lambda$CkqCuQmAGdLOVExbosZfF3sXdHQ;->get()Ljava/lang/Object;
 PLcom/android/server/wm/-$$Lambda$CvWmQaXToMTllLb80KQ9WdJHYXo;-><init>(Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/-$$Lambda$CvWmQaXToMTllLb80KQ9WdJHYXo;->run()V
-PLcom/android/server/wm/-$$Lambda$DLUVMr0q4HDD6VD11G3xgCuJfHo;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$DLUVMr0q4HDD6VD11G3xgCuJfHo;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$CvWmQaXToMTllLb80KQ9WdJHYXo;->run()V
+HSPLcom/android/server/wm/-$$Lambda$DLUVMr0q4HDD6VD11G3xgCuJfHo;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$DLUVMr0q4HDD6VD11G3xgCuJfHo;-><init>()V
 PLcom/android/server/wm/-$$Lambda$DLUVMr0q4HDD6VD11G3xgCuJfHo;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$DaFwIyqZTBVKE2y-TN2iE7CD-r8;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$DaFwIyqZTBVKE2y-TN2iE7CD-r8;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$DaFwIyqZTBVKE2y-TN2iE7CD-r8;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$Dimmer$DimState$QYvwJex5H10MFMe0LEzEUs1b2G0;-><init>(Lcom/android/server/wm/Dimmer$DimState;Lcom/android/server/wm/Dimmer$DimAnimatable;)V
+HSPLcom/android/server/wm/-$$Lambda$DaFwIyqZTBVKE2y-TN2iE7CD-r8;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$DeprecatedTargetSdkVersionDialog$TaeLH3pyy18K9h_WuSYLeQFy9Io;-><init>(Lcom/android/server/wm/DeprecatedTargetSdkVersionDialog;Lcom/android/server/wm/AppWarnings;)V
+PLcom/android/server/wm/-$$Lambda$DeprecatedTargetSdkVersionDialog$TaeLH3pyy18K9h_WuSYLeQFy9Io;->onClick(Landroid/content/DialogInterface;I)V
+PLcom/android/server/wm/-$$Lambda$DeprecatedTargetSdkVersionDialog$ZkWArfvd086vsF78_zwSd67uSUs;-><init>(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/wm/-$$Lambda$Dimmer$DimState$QYvwJex5H10MFMe0LEzEUs1b2G0;-><init>(Lcom/android/server/wm/Dimmer$DimState;Lcom/android/server/wm/Dimmer$DimAnimatable;)V
 PLcom/android/server/wm/-$$Lambda$Dimmer$DimState$QYvwJex5H10MFMe0LEzEUs1b2G0;->run()V
+PLcom/android/server/wm/-$$Lambda$Dimmer$DimState$wU1YjYaM1_enRLsRLQ25SnC1ECw;-><init>(Lcom/android/server/wm/Dimmer$DimState;Lcom/android/server/wm/Dimmer$DimAnimatable;)V
+PLcom/android/server/wm/-$$Lambda$Dimmer$DimState$wU1YjYaM1_enRLsRLQ25SnC1ECw;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayArea$Tokens$m3rhEbIWQl888W_2uGBIkkXLdlA;-><init>(Lcom/android/server/wm/DisplayArea$Tokens;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayArea$Tokens$m3rhEbIWQl888W_2uGBIkkXLdlA;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$-t02M5j-NY8t_HMWggKym0SrI5k;-><init>([I[ILandroid/graphics/Region;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$-t02M5j-NY8t_HMWggKym0SrI5k;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$0DHYqZExqV37Iiw4M0GSqxCijHE;-><init>(Lcom/android/server/wm/DisplayContent;Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region;[ILandroid/graphics/Region;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$0DHYqZExqV37Iiw4M0GSqxCijHE;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$0gBMuAOGNBEAnJdXST73Nf88i7E;-><init>(Landroid/view/SurfaceControl$Transaction;IIZ)V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$0gBMuAOGNBEAnJdXST73Nf88i7E;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$0yxrqH9eGY2qTjH1u_BvaVrXCSA;-><init>(Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$0yxrqH9eGY2qTjH1u_BvaVrXCSA;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$DisplayContent$2VlyMN8z2sOPqE9-yf-z3-peRMI;-><init>(I)V
-PLcom/android/server/wm/-$$Lambda$DisplayContent$2VlyMN8z2sOPqE9-yf-z3-peRMI;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$2VlyMN8z2sOPqE9-yf-z3-peRMI;-><init>(I)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$2VlyMN8z2sOPqE9-yf-z3-peRMI;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$DisplayContent$4EwMMjZ5_EoQtEZ4VPJm9XUauJY;-><init>(Lcom/android/server/policy/WindowManagerPolicy;ZZZ)V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$4EwMMjZ5_EoQtEZ4VPJm9XUauJY;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$7Z9gsguOLtfXssJUALjgEsOLZoE;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$7Z9gsguOLtfXssJUALjgEsOLZoE;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$7Z9gsguOLtfXssJUALjgEsOLZoE;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$DisplayContent$7alf4NuxocTwmtWRy0_MvBepKoE;-><init>(Lcom/android/server/wm/DisplayContent;Landroid/util/SparseBooleanArray;)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$7alf4NuxocTwmtWRy0_MvBepKoE;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$7uZtakUXzuXqF_Qht5Uq7LUvubI;-><init>(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$7uZtakUXzuXqF_Qht5Uq7LUvubI;->apply(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$7voe_dEKk2BYMriCvPuvaznb9WQ;-><init>(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$7voe_dEKk2BYMriCvPuvaznb9WQ;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$BvG_N-oQ9idqqb6Bo2x0dq7gI5g;-><init>(Lcom/android/server/wm/DisplayContent;Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region;[ILandroid/graphics/Region;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$BvG_N-oQ9idqqb6Bo2x0dq7gI5g;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$D0QJUvhaQkGgoMtOmjw5foY9F8M;-><init>(Lcom/android/server/wm/DisplayContent;)V
-HPLcom/android/server/wm/-$$Lambda$DisplayContent$D0QJUvhaQkGgoMtOmjw5foY9F8M;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$D0QJUvhaQkGgoMtOmjw5foY9F8M;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$Dg1quneQgytca0GgzUkUIFT67mk;-><init>(Landroid/view/SurfaceControl$Transaction;IIZ)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$Dg1quneQgytca0GgzUkUIFT67mk;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$DjwkABhnEVEEFPHXKA0QFcHdb2w;-><init>(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$Ei1gEKrsGOVbEpUtkye4DxvMrow;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$Ei1gEKrsGOVbEpUtkye4DxvMrow;-><init>()V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$Ei1gEKrsGOVbEpUtkye4DxvMrow;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$GdYfLI7hkBs2XfGJkN6DbdzEs8U;-><init>(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$GdYfLI7hkBs2XfGJkN6DbdzEs8U;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$Gs1I9c16qswnvvDSPXoEhteQcFM;-><init>(Ljava/io/PrintWriter;Ljava/lang/String;[I)V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$Gs1I9c16qswnvvDSPXoEhteQcFM;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$JKV50ExZuoi3fuNRue0nZXh8ijA;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$JKV50ExZuoi3fuNRue0nZXh8ijA;-><init>()V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$JKV50ExZuoi3fuNRue0nZXh8ijA;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$DisplayContent$JYsrGdifTPH6ASJDC3B9YWMD2pw;-><init>(I)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$JYsrGdifTPH6ASJDC3B9YWMD2pw;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$JibsaX4YnJd0ta_wiDDdSp-PjQk;-><init>(Lcom/android/server/wm/DisplayContent;)V
-HPLcom/android/server/wm/-$$Lambda$DisplayContent$JibsaX4YnJd0ta_wiDDdSp-PjQk;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$JibsaX4YnJd0ta_wiDDdSp-PjQk;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$MTOrQ0uso5p3wixTLmDsYyck6h4;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$MTOrQ0uso5p3wixTLmDsYyck6h4;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$MTOrQ0uso5p3wixTLmDsYyck6h4;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$NonAppWindowContainers$FI_O7m2qEDfIRZef3D32AxG-rcs;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$NonAppWindowContainers$FI_O7m2qEDfIRZef3D32AxG-rcs;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$NonAppWindowContainers$FI_O7m2qEDfIRZef3D32AxG-rcs;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$NonAppWindowContainers$m2B7QqNQSZc7N5DejF0qGwn6Pck;-><init>(Lcom/android/server/wm/DisplayContent$NonAppWindowContainers;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$NonAppWindowContainers$m2B7QqNQSZc7N5DejF0qGwn6Pck;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$NonAppWindowContainers$nqCymC3xR9b3qaeohnnJJpSiajc;-><init>(Lcom/android/server/wm/DisplayContent$NonAppWindowContainers;)V
-PLcom/android/server/wm/-$$Lambda$DisplayContent$NonAppWindowContainers$nqCymC3xR9b3qaeohnnJJpSiajc;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$NonAppWindowContainers$nqCymC3xR9b3qaeohnnJJpSiajc;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/wm/-$$Lambda$DisplayContent$O9XflhhULqGeDab0OHXXGq_DSlU;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$O9XflhhULqGeDab0OHXXGq_DSlU;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$O9XflhhULqGeDab0OHXXGq_DSlU;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$SeHNTr4WUVpGmQniHULUi1ST7k8;-><init>(Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$SeHNTr4WUVpGmQniHULUi1ST7k8;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$TPj3OjTsuIg5GTLb5nMmFqIghA4;-><init>(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$TPj3OjTsuIg5GTLb5nMmFqIghA4;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$DisplayContent$TaskContainers$O93kVOZBPruBUoIqFi--Pvv3DF0;-><init>(Ljava/util/ArrayList;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$TaskContainers$O93kVOZBPruBUoIqFi--Pvv3DF0;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$TaskContainers$sOc7NEp-0tqs2Dj7F4JTNjgQacU;-><init>(Lcom/android/server/wm/DisplayContent$TaskContainers;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$TaskContainers$sOc7NEp-0tqs2Dj7F4JTNjgQacU;->onPreAssignChildLayers()V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$TaskForResizePointSearchResult$1FHFJXiYTNFcgi5tiBrxzbmjdWw;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$TaskForResizePointSearchResult$1FHFJXiYTNFcgi5tiBrxzbmjdWw;-><init>()V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$TaskForResizePointSearchResult$1FHFJXiYTNFcgi5tiBrxzbmjdWw;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$TaskStackContainers$5H3Kr211kTMg-C28tapuQGzkwN8;-><init>(Lcom/android/server/wm/DisplayContent$TaskStackContainers;)V
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$TaskStackContainers$5H3Kr211kTMg-C28tapuQGzkwN8;->onPreAssignChildLayers()V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$TaskStackContainers$rQnI0Y8R9ptQ09cGHwbCHDiG2FY;-><init>(Ljava/util/ArrayList;)V
-PLcom/android/server/wm/-$$Lambda$DisplayContent$TaskStackContainers$rQnI0Y8R9ptQ09cGHwbCHDiG2FY;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$TaskStackContainers$rQnI0Y8R9ptQ09cGHwbCHDiG2FY;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$Ufn2ZjVS0i1L8aeQ8GZMJNJfmcY;-><init>(Lcom/android/server/policy/WindowManagerPolicy;ZZZ)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$Ufn2ZjVS0i1L8aeQ8GZMJNJfmcY;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$YcKsbDd5rrFH1MI8pTOCMIM0mNY;-><init>([III)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$YcKsbDd5rrFH1MI8pTOCMIM0mNY;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$_XfE1uZ9VUv6i0SxWUvqu69FNb4;-><init>(Lcom/android/server/wm/DisplayContent;II)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$_XfE1uZ9VUv6i0SxWUvqu69FNb4;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$a4EkCBfpZNIl1xfYgm2ktgndF8w;-><init>(Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$a4EkCBfpZNIl1xfYgm2ktgndF8w;->apply(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$DisplayContent$cDcvMzGxc6XW13Q8FrU5X4DagqE;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$DisplayContent$cDcvMzGxc6XW13Q8FrU5X4DagqE;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$DisplayContent$cDcvMzGxc6XW13Q8FrU5X4DagqE;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$cDcvMzGxc6XW13Q8FrU5X4DagqE;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$cDcvMzGxc6XW13Q8FrU5X4DagqE;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$cDcvMzGxc6XW13Q8FrU5X4DagqE;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$dcSGCWAJtdQoc69foFpUzYoTn2I;-><init>(Ljava/io/PrintWriter;Ljava/lang/String;[I)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$dcSGCWAJtdQoc69foFpUzYoTn2I;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$eJsj3GR1HdCnOJrZ8_oaLP52jg0;-><init>(Lcom/android/server/wm/DisplayContent;)V
@@ -19471,52 +32881,123 @@
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$fiC19lMy-d_-rvza7hhOSw6bOM8;->compute(Ljava/lang/Object;I)Ljava/lang/Object;
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$gpAoT7pBNdi6jYEHs_L3kzaRF0g;-><init>([I[ILandroid/graphics/Region;)V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$gpAoT7pBNdi6jYEHs_L3kzaRF0g;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$hRKjZwmneu0T85LNNY6_Zcs4gKM;-><init>(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$hRKjZwmneu0T85LNNY6_Zcs4gKM;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$k7ctHGhg6DCeupTBZO8cyEJDjLM;-><init>(Lcom/android/server/wm/DisplayContent;Z)V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$k7ctHGhg6DCeupTBZO8cyEJDjLM;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$mRojqgB8byVtZRzyTl2qSRFPgIo;-><init>(I)V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$mRojqgB8byVtZRzyTl2qSRFPgIo;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$DisplayContent$n90JauAfTfQVesyRzx0-TX7s1LM;-><init>([III)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$n90JauAfTfQVesyRzx0-TX7s1LM;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$nUI_QDRGnWH0dX0j3xt2TTkrvZw;-><init>(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$nUI_QDRGnWH0dX0j3xt2TTkrvZw;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$olEtDzkJbp6PCECUFtRISV0LCpk;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$olEtDzkJbp6PCECUFtRISV0LCpk;-><init>()V
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$qT01Aq6xt_ZOs86A1yDQe-qmPFQ;-><init>(Lcom/android/server/wm/DisplayContent;)V
-HPLcom/android/server/wm/-$$Lambda$DisplayContent$qT01Aq6xt_ZOs86A1yDQe-qmPFQ;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$qT01Aq6xt_ZOs86A1yDQe-qmPFQ;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$qxt4izS31fb0LF2uo_OF9DMa7gc;-><init>(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$qxt4izS31fb0LF2uo_OF9DMa7gc;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$DisplayContent$sYPOy6TL-QiWuU_jcEHYn4HeFnQ;-><init>(II)V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$sYPOy6TL-QiWuU_jcEHYn4HeFnQ;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$vehcSAr5hQ3Q5gWBUB0K8yByHXQ;-><init>(Lcom/android/server/wm/DisplayContent;Z)V
+HPLcom/android/server/wm/-$$Lambda$DisplayContent$vehcSAr5hQ3Q5gWBUB0K8yByHXQ;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$w9ep5dwa3CsKsu0rpKSQwF-60A4;-><init>(II)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayContent$w9ep5dwa3CsKsu0rpKSQwF-60A4;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$x9QSHnWitjvGOC1SnurRP5ASz48;-><init>(Lcom/android/server/wm/DisplayContent;Landroid/util/SparseBooleanArray;)V
+PLcom/android/server/wm/-$$Lambda$DisplayContent$x9QSHnWitjvGOC1SnurRP5ASz48;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/-$$Lambda$DisplayContent$xDPfsCNl85pDNmgsKEQVqdUehiA;-><init>(Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/-$$Lambda$DisplayContent$xDPfsCNl85pDNmgsKEQVqdUehiA;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$-jer63nl4BagHUaTYzlDJxk8xIU;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$-jer63nl4BagHUaTYzlDJxk8xIU;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$-jer63nl4BagHUaTYzlDJxk8xIU;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$DisplayPolicy$3MnyIKSHFLqhfUifWEQPNp_-J6A;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
 HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$3MnyIKSHFLqhfUifWEQPNp_-J6A;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$9Q7foUL8MStILLFmJNfN48-WaJM;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$9Q7foUL8MStILLFmJNfN48-WaJM;->createInputEventReceiver(Landroid/view/InputChannel;Landroid/os/Looper;)Landroid/view/InputEventReceiver;
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$AdQlGK4do0LfpQJmOnIuKqDwp0Y;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$AdQlGK4do0LfpQJmOnIuKqDwp0Y;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayPolicy$DaI-u7gKDqJtPizmW-_eQ3hO-BU;-><init>(Lcom/android/server/wm/DisplayPolicy;ILjava/lang/String;Landroid/util/Pair;I[Lcom/android/internal/view/AppearanceRegion;ZZZ)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayPolicy$DaI-u7gKDqJtPizmW-_eQ3hO-BU;->run()V
 PLcom/android/server/wm/-$$Lambda$DisplayPolicy$FpQuLkFb2EnHvk4Uzhr9G5Rn_xI;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
 PLcom/android/server/wm/-$$Lambda$DisplayPolicy$FpQuLkFb2EnHvk4Uzhr9G5Rn_xI;->createInputEventReceiver(Landroid/view/InputChannel;Landroid/os/Looper;)Landroid/view/InputEventReceiver;
+HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$HbdRZfPpJ53Wnk7_Ueb0ycyz_AQ;-><init>(Lcom/android/server/wm/DisplayPolicy;ILjava/lang/String;Landroid/util/Pair;I[Lcom/android/internal/view/AppearanceRegion;ZZZ)V
+HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$HbdRZfPpJ53Wnk7_Ueb0ycyz_AQ;->run()V
 PLcom/android/server/wm/-$$Lambda$DisplayPolicy$IOyP8YVRG92tn9u1muYWZgBbgc0;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
 HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$IOyP8YVRG92tn9u1muYWZgBbgc0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$DisplayPolicy$J8sIwXJvltUaPM3jEGO948Bx9ig;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
 HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$J8sIwXJvltUaPM3jEGO948Bx9ig;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$LFEaXRr2IF3nhPJdP5h3swIhnus;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
+HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$LFEaXRr2IF3nhPJdP5h3swIhnus;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$DisplayPolicy$LkHee4mchNXMwNt7HLgsMzHofeE;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
 HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$LkHee4mchNXMwNt7HLgsMzHofeE;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$P8D337iYIcX04InNbwQCJWD0nmU;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$P8D337iYIcX04InNbwQCJWD0nmU;->run()V
 PLcom/android/server/wm/-$$Lambda$DisplayPolicy$QDPgWUhyEOraWnf6a-u4mTBttdw;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
 HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$QDPgWUhyEOraWnf6a-u4mTBttdw;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$XssW_Qm0L7CsznkQYKBfWrF7PU4;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$XssW_Qm0L7CsznkQYKBfWrF7PU4;->run()V
 HSPLcom/android/server/wm/-$$Lambda$DisplayPolicy$_FsvHpVUi-gbWmSpT009cJNNmgM;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$bT9mjfT_DJVx_BBfkRPXHf6mfWE;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$bT9mjfT_DJVx_BBfkRPXHf6mfWE;->createInputEventReceiver(Landroid/view/InputChannel;Landroid/os/Looper;)Landroid/view/InputEventReceiver;
 HSPLcom/android/server/wm/-$$Lambda$DisplayPolicy$j3sY1jb4WFF_F3wOT9D2fB2mOts;-><init>(Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/WindowManagerService;I)V
-PLcom/android/server/wm/-$$Lambda$DisplayPolicy$pqtzqy0ti-csynvTP9P1eQUE-gE;-><init>(I)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$m-UPXUZKrPpeFUjrauzoJMNbYjM;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$m-UPXUZKrPpeFUjrauzoJMNbYjM;->run()V
+HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$nrBrmKRLvJQjdv_P6oPT7D0GGW8;-><init>(Lcom/android/server/wm/DisplayPolicy;ILjava/lang/String;Landroid/util/Pair;I[Lcom/android/internal/view/AppearanceRegion;ZZZ)V
+HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$nrBrmKRLvJQjdv_P6oPT7D0GGW8;->run()V
+HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$pqtzqy0ti-csynvTP9P1eQUE-gE;-><init>(I)V
 HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$pqtzqy0ti-csynvTP9P1eQUE-gE;->apply(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$wrdG81IaCZoCL0YqumBunZu5DyM;-><init>(Lcom/android/server/wm/DisplayPolicy;ILjava/lang/String;Landroid/util/Pair;I[Lcom/android/internal/view/AppearanceRegion;ZZZ)V
-HPLcom/android/server/wm/-$$Lambda$DisplayPolicy$wrdG81IaCZoCL0YqumBunZu5DyM;->run()V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$rio2so8uuvIt5iXObo83p1LyRwA;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$rio2so8uuvIt5iXObo83p1LyRwA;->run()V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$rkGhPuV8zWnPuCUXhzLY40zhjLk;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
+PLcom/android/server/wm/-$$Lambda$DisplayPolicy$rkGhPuV8zWnPuCUXhzLY40zhjLk;->createInputEventReceiver(Landroid/view/InputChannel;Landroid/os/Looper;)Landroid/view/InputEventReceiver;
+HSPLcom/android/server/wm/-$$Lambda$DisplayPolicy$wrdG81IaCZoCL0YqumBunZu5DyM;-><init>(Lcom/android/server/wm/DisplayPolicy;ILjava/lang/String;Landroid/util/Pair;I[Lcom/android/internal/view/AppearanceRegion;ZZZ)V
+HSPLcom/android/server/wm/-$$Lambda$DisplayPolicy$wrdG81IaCZoCL0YqumBunZu5DyM;->run()V
+PLcom/android/server/wm/-$$Lambda$DisplayRotation$2$pp3jOG1BWDI3rPQ3oFXammeS5Tg;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$DisplayRotation$2$pp3jOG1BWDI3rPQ3oFXammeS5Tg;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$DisplayRotation$2$pp3jOG1BWDI3rPQ3oFXammeS5Tg;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DisplayRotation$UvDbz_yyBKmo2Ump2uc0fobRTmg;-><init>(Lcom/android/server/wm/DisplayRotation;[Z)V
+HPLcom/android/server/wm/-$$Lambda$DisplayRotation$UvDbz_yyBKmo2Ump2uc0fobRTmg;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DisplayRotation$q2wjcSMbrixEIlIR6-WoSLJ1j-g;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$DisplayRotation$q2wjcSMbrixEIlIR6-WoSLJ1j-g;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$DisplayRotation$q2wjcSMbrixEIlIR6-WoSLJ1j-g;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$DragState$-yUFIMrhYYccZ0gwd6eVcpAE93o;-><init>(Lcom/android/server/wm/DragState;FF)V
+PLcom/android/server/wm/-$$Lambda$DragState$-yUFIMrhYYccZ0gwd6eVcpAE93o;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$DragState$4E4tzlfJ9AKYEiVk7F8SFlBLwPc;-><init>(Landroid/animation/ValueAnimator;)V
+PLcom/android/server/wm/-$$Lambda$DragState$4E4tzlfJ9AKYEiVk7F8SFlBLwPc;->run()V
+HSPLcom/android/server/wm/-$$Lambda$ERD-2J5ieyabZSu134oI85tDnME;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$ERD-2J5ieyabZSu134oI85tDnME;-><init>()V
+PLcom/android/server/wm/-$$Lambda$ERD-2J5ieyabZSu134oI85tDnME;->startAnimation(Lcom/android/server/wm/SurfaceAnimator;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+PLcom/android/server/wm/-$$Lambda$EmbeddedWindowController$Q0HHIdTKm8MX4DsCYgzZ2UOUXPQ;-><init>(Lcom/android/server/wm/EmbeddedWindowController;Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/-$$Lambda$EnsureActivitiesVisibleHelper$Bbb3nMFa3F8er_OBuKA7-SpeSKo;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$EnsureActivitiesVisibleHelper$Bbb3nMFa3F8er_OBuKA7-SpeSKo;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$EnsureActivitiesVisibleHelper$Bbb3nMFa3F8er_OBuKA7-SpeSKo;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$EnsureActivitiesVisibleHelper$uAeEWwx5d0xk6FKOvvR9CXZS6Bg;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$EnsureActivitiesVisibleHelper$uAeEWwx5d0xk6FKOvvR9CXZS6Bg;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$EnsureActivitiesVisibleHelper$uAeEWwx5d0xk6FKOvvR9CXZS6Bg;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$FvpUGL5umwa8cY7p8SB7VV6jxQU;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$FvpUGL5umwa8cY7p8SB7VV6jxQU;-><init>()V
-PLcom/android/server/wm/-$$Lambda$FvpUGL5umwa8cY7p8SB7VV6jxQU;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$FvpUGL5umwa8cY7p8SB7VV6jxQU;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$G7MFeOBgoCefJGCDIl_j8uFkMZI;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$G7MFeOBgoCefJGCDIl_j8uFkMZI;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$G7MFeOBgoCefJGCDIl_j8uFkMZI;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$HLz_SQuxQoIiuaK5SB5xJ6FnoxY;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$HLz_SQuxQoIiuaK5SB5xJ6FnoxY;-><init>()V
-PLcom/android/server/wm/-$$Lambda$HLz_SQuxQoIiuaK5SB5xJ6FnoxY;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$HLz_SQuxQoIiuaK5SB5xJ6FnoxY;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$HLz_SQuxQoIiuaK5SB5xJ6FnoxY;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$HLz_SQuxQoIiuaK5SB5xJ6FnoxY;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$HtepUMgqPLKO-76U6SMEmchALsM;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$HtepUMgqPLKO-76U6SMEmchALsM;-><init>()V
+PLcom/android/server/wm/-$$Lambda$HtepUMgqPLKO-76U6SMEmchALsM;->startAnimation(Lcom/android/server/wm/SurfaceAnimator;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZLjava/lang/Runnable;)V
 PLcom/android/server/wm/-$$Lambda$IamNNBZp056cXLajnE4zHKSqj-c;-><init>(Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/-$$Lambda$IamNNBZp056cXLajnE4zHKSqj-c;->get()Ljava/lang/Object;
-PLcom/android/server/wm/-$$Lambda$InsetsStateController$c8m0K1Ykk6OHrDEJKWFPmp5WxKU;-><init>(Lcom/android/server/wm/InsetsStateController;)V
-PLcom/android/server/wm/-$$Lambda$InsetsStateController$c8m0K1Ykk6OHrDEJKWFPmp5WxKU;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/-$$Lambda$IamNNBZp056cXLajnE4zHKSqj-c;->get()Ljava/lang/Object;
+PLcom/android/server/wm/-$$Lambda$InputMonitor$ew_vdS116C6DH9LxWaTuVXJYZPE;-><init>(Lcom/android/server/wm/InputMonitor;)V
+PLcom/android/server/wm/-$$Lambda$InputMonitor$ew_vdS116C6DH9LxWaTuVXJYZPE;->run()V
+PLcom/android/server/wm/-$$Lambda$InsetsPolicy$LCR2QgJZxbNat6Qb0Be-JDpy3i0;-><init>(Lcom/android/server/wm/InsetsPolicy;)V
+PLcom/android/server/wm/-$$Lambda$InsetsPolicy$rhM012fDRQZs2vWOctMZZ_uSXvc;-><init>(Lcom/android/server/wm/InsetsPolicy;)V
+HSPLcom/android/server/wm/-$$Lambda$InsetsStateController$1JYO8QVhePzczEaYmXV0veAcadI;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$InsetsStateController$1JYO8QVhePzczEaYmXV0veAcadI;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$InsetsStateController$EieWndHHWtNpBtJoK2U-TZ_RU2A;-><init>(Lcom/android/server/wm/InsetsStateController;)V
+PLcom/android/server/wm/-$$Lambda$InsetsStateController$EieWndHHWtNpBtJoK2U-TZ_RU2A;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/wm/-$$Lambda$InsetsStateController$c8m0K1Ykk6OHrDEJKWFPmp5WxKU;-><init>(Lcom/android/server/wm/InsetsStateController;)V
+HSPLcom/android/server/wm/-$$Lambda$InsetsStateController$c8m0K1Ykk6OHrDEJKWFPmp5WxKU;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/wm/-$$Lambda$InsetsStateController$pXoYGy4X5aPw1QFi0iIWKiTMlDg;-><init>(Lcom/android/server/wm/InsetsStateController;)V
 HSPLcom/android/server/wm/-$$Lambda$InsetsStateController$pXoYGy4X5aPw1QFi0iIWKiTMlDg;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/wm/-$$Lambda$InsetsStateController$sIYEJIR4ztgffCLMi5Z1RvdxyYs;-><clinit>()V
@@ -19524,38 +33005,48 @@
 HPLcom/android/server/wm/-$$Lambda$InsetsStateController$sIYEJIR4ztgffCLMi5Z1RvdxyYs;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$JTKQBRuxxgBAO5y04IFnI4psyA4;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$JTKQBRuxxgBAO5y04IFnI4psyA4;-><init>()V
-PLcom/android/server/wm/-$$Lambda$JTKQBRuxxgBAO5y04IFnI4psyA4;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/-$$Lambda$JTKQBRuxxgBAO5y04IFnI4psyA4;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/wm/-$$Lambda$LI60v4Y5Me6khV12IZ-zEQtSx7A;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$LI60v4Y5Me6khV12IZ-zEQtSx7A;-><init>()V
-PLcom/android/server/wm/-$$Lambda$LI60v4Y5Me6khV12IZ-zEQtSx7A;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$LYW1ECaEajjYgarzgKdTZ4O1fi0;-><init>(Landroid/app/ActivityManagerInternal;)V
-PLcom/android/server/wm/-$$Lambda$LYW1ECaEajjYgarzgKdTZ4O1fi0;->run()V
+HPLcom/android/server/wm/-$$Lambda$LI60v4Y5Me6khV12IZ-zEQtSx7A;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$LYW1ECaEajjYgarzgKdTZ4O1fi0;-><init>(Landroid/app/ActivityManagerInternal;)V
+HPLcom/android/server/wm/-$$Lambda$LYW1ECaEajjYgarzgKdTZ4O1fi0;->run()V
 PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$FhvLqBbd_XMsJK45WV5Mlt8JSYM;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$FhvLqBbd_XMsJK45WV5Mlt8JSYM;-><init>()V
 PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$FhvLqBbd_XMsJK45WV5Mlt8JSYM;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$KukKmVpn5W_1xSV6Dnp8wW2H2Ks;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$KukKmVpn5W_1xSV6Dnp8wW2H2Ks;-><init>()V
-PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$KukKmVpn5W_1xSV6Dnp8wW2H2Ks;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$KukKmVpn5W_1xSV6Dnp8wW2H2Ks;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$QcawcFcJtEX4EhYptq_Vb4j368Y;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$QcawcFcJtEX4EhYptq_Vb4j368Y;-><init>()V
-PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$QcawcFcJtEX4EhYptq_Vb4j368Y;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$UGY1OclnLIQLMEL9B55qjERFf4o;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$UGY1OclnLIQLMEL9B55qjERFf4o;-><init>()V
-PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$UGY1OclnLIQLMEL9B55qjERFf4o;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$QcawcFcJtEX4EhYptq_Vb4j368Y;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$UGY1OclnLIQLMEL9B55qjERFf4o;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$UGY1OclnLIQLMEL9B55qjERFf4o;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$UGY1OclnLIQLMEL9B55qjERFf4o;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$lAGPwfsXJvBWsyG2rbEfo3sTv34;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$lAGPwfsXJvBWsyG2rbEfo3sTv34;-><init>()V
 PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$lAGPwfsXJvBWsyG2rbEfo3sTv34;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$pWUDt4Ot3BWLJOTAhXMkkhHUhpc;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$pWUDt4Ot3BWLJOTAhXMkkhHUhpc;-><init>()V
 HSPLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$pWUDt4Ot3BWLJOTAhXMkkhHUhpc;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$veRn_GhgLZLlOHOJ0ZYT6KcfYqo;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$veRn_GhgLZLlOHOJ0ZYT6KcfYqo;-><init>()V
-PLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$veRn_GhgLZLlOHOJ0ZYT6KcfYqo;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$veRn_GhgLZLlOHOJ0ZYT6KcfYqo;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$veRn_GhgLZLlOHOJ0ZYT6KcfYqo;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$veRn_GhgLZLlOHOJ0ZYT6KcfYqo;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$LaunchParamsPersister$Rc1cXPLhXa2WPSr18Q9-Xc7SdV8;-><init>(Ljava/lang/String;)V
 HPLcom/android/server/wm/-$$Lambda$LocalAnimationAdapter$X--EomqUvw4qy89IeeTFTH7aCMo;-><init>(Lcom/android/server/wm/LocalAnimationAdapter;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
-PLcom/android/server/wm/-$$Lambda$LocalAnimationAdapter$X--EomqUvw4qy89IeeTFTH7aCMo;->run()V
+HPLcom/android/server/wm/-$$Lambda$LocalAnimationAdapter$X--EomqUvw4qy89IeeTFTH7aCMo;->run()V
+HPLcom/android/server/wm/-$$Lambda$LocalAnimationAdapter$zbLki1x5Fhwh-g7q-dA43aw6Y4M;-><init>(Lcom/android/server/wm/LocalAnimationAdapter;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;I)V
+HPLcom/android/server/wm/-$$Lambda$LocalAnimationAdapter$zbLki1x5Fhwh-g7q-dA43aw6Y4M;->run()V
+PLcom/android/server/wm/-$$Lambda$LockTaskController$NMEqFdnoSJ8A7QRxQO-ZoqXOmVc;-><init>(Lcom/android/server/wm/LockTaskController;Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/-$$Lambda$LockTaskController$NMEqFdnoSJ8A7QRxQO-ZoqXOmVc;->run()V
+PLcom/android/server/wm/-$$Lambda$LockTaskController$mYEdosOvuhEWdcYLQrOC83U4Wms;-><init>(Lcom/android/server/wm/LockTaskController;Landroid/content/Intent;Lcom/android/server/wm/Task;I)V
+PLcom/android/server/wm/-$$Lambda$LockTaskController$mYEdosOvuhEWdcYLQrOC83U4Wms;->run()V
+PLcom/android/server/wm/-$$Lambda$MGgYXq0deCsjjGP-28PM6ahiI2U;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$MGgYXq0deCsjjGP-28PM6ahiI2U;-><init>()V
+PLcom/android/server/wm/-$$Lambda$MGgYXq0deCsjjGP-28PM6ahiI2U;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$OPdXuZQLetMnocdH6XV32JbNQ3I;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$OPdXuZQLetMnocdH6XV32JbNQ3I;-><init>()V
-PLcom/android/server/wm/-$$Lambda$OPdXuZQLetMnocdH6XV32JbNQ3I;->getSystemDirectoryForUser(I)Ljava/io/File;
+HPLcom/android/server/wm/-$$Lambda$OPdXuZQLetMnocdH6XV32JbNQ3I;->getSystemDirectoryForUser(I)Ljava/io/File;
 HSPLcom/android/server/wm/-$$Lambda$OuObUsm0bB9g5X0kIXYkBYHvodY;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$OuObUsm0bB9g5X0kIXYkBYHvodY;-><init>()V
 PLcom/android/server/wm/-$$Lambda$OuObUsm0bB9g5X0kIXYkBYHvodY;->apply(I)Ljava/lang/Object;
@@ -19564,34 +33055,47 @@
 HSPLcom/android/server/wm/-$$Lambda$PersisterQueue$HOTPBvinkMOqT3zxV3gRm6Y9Wi4;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$PersisterQueue$HOTPBvinkMOqT3zxV3gRm6Y9Wi4;-><init>()V
 PLcom/android/server/wm/-$$Lambda$PersisterQueue$HOTPBvinkMOqT3zxV3gRm6Y9Wi4;->process()V
-PLcom/android/server/wm/-$$Lambda$RecentTasks$1$yqVuu6fkQgjlTTs6kgJbxqq3Hng;-><init>(Lcom/android/server/wm/RecentTasks$1;III)V
+PLcom/android/server/wm/-$$Lambda$Pl4__K9hqf4p4lme99AnaMrbXe0;-><init>(Landroid/app/ActivityManagerInternal;)V
+PLcom/android/server/wm/-$$Lambda$Pl4__K9hqf4p4lme99AnaMrbXe0;->run()V
+PLcom/android/server/wm/-$$Lambda$PyL9QAXbv8yta3wX2VTGq8fFFo4;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$PyL9QAXbv8yta3wX2VTGq8fFFo4;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$PyL9QAXbv8yta3wX2VTGq8fFFo4;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$QEISWTQzWbgxRMT5rMnIEzpsKpc;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$QEISWTQzWbgxRMT5rMnIEzpsKpc;-><init>()V
+PLcom/android/server/wm/-$$Lambda$QEISWTQzWbgxRMT5rMnIEzpsKpc;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$RecentTasks$1$yqVuu6fkQgjlTTs6kgJbxqq3Hng;-><init>(Lcom/android/server/wm/RecentTasks$1;III)V
 PLcom/android/server/wm/-$$Lambda$RecentTasks$1$yqVuu6fkQgjlTTs6kgJbxqq3Hng;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$RecentTasks$eaeTjEEoVsLAhHFPccdtbbB3Lrk;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$RecentTasks$eaeTjEEoVsLAhHFPccdtbbB3Lrk;-><init>()V
 PLcom/android/server/wm/-$$Lambda$RecentsAnimation$L-oo1O0uvOIOr4MDh9QYSeVU09U;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$RecentsAnimation$L-oo1O0uvOIOr4MDh9QYSeVU09U;-><init>()V
-PLcom/android/server/wm/-$$Lambda$RecentsAnimation$L-oo1O0uvOIOr4MDh9QYSeVU09U;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$RecentsAnimation$reh_wG2afVmsOkGOZzt-QbWe4gE;-><init>(Lcom/android/server/wm/RecentsAnimation;IZLcom/android/server/wm/RecentsAnimationController;)V
-PLcom/android/server/wm/-$$Lambda$RecentsAnimation$reh_wG2afVmsOkGOZzt-QbWe4gE;->run()V
-PLcom/android/server/wm/-$$Lambda$RecentsAnimationController$4jQqaDgSmtGCjbUJiVoDh_jr9rY;-><init>(Lcom/android/server/wm/RecentsAnimationController;)V
+HPLcom/android/server/wm/-$$Lambda$RecentsAnimation$L-oo1O0uvOIOr4MDh9QYSeVU09U;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$RecentsAnimation$reh_wG2afVmsOkGOZzt-QbWe4gE;-><init>(Lcom/android/server/wm/RecentsAnimation;IZLcom/android/server/wm/RecentsAnimationController;)V
+HPLcom/android/server/wm/-$$Lambda$RecentsAnimation$reh_wG2afVmsOkGOZzt-QbWe4gE;->run()V
+HPLcom/android/server/wm/-$$Lambda$RecentsAnimationController$4jQqaDgSmtGCjbUJiVoDh_jr9rY;-><init>(Lcom/android/server/wm/RecentsAnimationController;)V
+PLcom/android/server/wm/-$$Lambda$RecentsAnimationController$4jQqaDgSmtGCjbUJiVoDh_jr9rY;->run()V
 PLcom/android/server/wm/-$$Lambda$RecentsAnimationController$EI4Oe4vlsDKieYi6iTTlm_g_DcI;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$RecentsAnimationController$EI4Oe4vlsDKieYi6iTTlm_g_DcI;-><init>()V
-PLcom/android/server/wm/-$$Lambda$RecentsAnimationController$EI4Oe4vlsDKieYi6iTTlm_g_DcI;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$RecentsAnimationController$j5cfzBzoc-2KFpZ5MiHSgWihq-Y;-><init>(Lcom/android/server/wm/RecentsAnimationController;)V
+HPLcom/android/server/wm/-$$Lambda$RecentsAnimationController$EI4Oe4vlsDKieYi6iTTlm_g_DcI;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$RecentsAnimationController$e-cTibokWXD_fkqfXQhiQOEXBkQ;-><init>(Lcom/android/server/wm/RecentsAnimationController;I)V
+PLcom/android/server/wm/-$$Lambda$RecentsAnimationController$e-cTibokWXD_fkqfXQhiQOEXBkQ;->run()V
+HPLcom/android/server/wm/-$$Lambda$RecentsAnimationController$j5cfzBzoc-2KFpZ5MiHSgWihq-Y;-><init>(Lcom/android/server/wm/RecentsAnimationController;)V
+PLcom/android/server/wm/-$$Lambda$RecentsAnimationController$j5cfzBzoc-2KFpZ5MiHSgWihq-Y;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$RecentsAnimationController$jw5vdNcR7ME-ta1B7JaOAiF7wKw;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$RecentsAnimationController$jw5vdNcR7ME-ta1B7JaOAiF7wKw;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$RecentsAnimationController$jw5vdNcR7ME-ta1B7JaOAiF7wKw;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/wm/-$$Lambda$RemoteAnimationController$74uuXaM2TqjkzYi0b8LqJdbycxA;-><init>(Lcom/android/server/wm/RemoteAnimationController;[Landroid/view/RemoteAnimationTarget;[Landroid/view/RemoteAnimationTarget;)V
-PLcom/android/server/wm/-$$Lambda$RemoteAnimationController$74uuXaM2TqjkzYi0b8LqJdbycxA;->run()V
-PLcom/android/server/wm/-$$Lambda$RemoteAnimationController$dP8qDptNigoqhzVtIudsX5naGu4;-><init>(Lcom/android/server/wm/RemoteAnimationController;)V
+HPLcom/android/server/wm/-$$Lambda$RemoteAnimationController$74uuXaM2TqjkzYi0b8LqJdbycxA;-><init>(Lcom/android/server/wm/RemoteAnimationController;[Landroid/view/RemoteAnimationTarget;[Landroid/view/RemoteAnimationTarget;)V
+HPLcom/android/server/wm/-$$Lambda$RemoteAnimationController$74uuXaM2TqjkzYi0b8LqJdbycxA;->run()V
+HPLcom/android/server/wm/-$$Lambda$RemoteAnimationController$dP8qDptNigoqhzVtIudsX5naGu4;-><init>(Lcom/android/server/wm/RemoteAnimationController;)V
 PLcom/android/server/wm/-$$Lambda$RemoteAnimationController$dP8qDptNigoqhzVtIudsX5naGu4;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$RemoteAnimationController$uQS8vaPKQ-E3x_9G8NCxPQmw1fw;-><init>(Lcom/android/server/wm/RemoteAnimationController;)V
+HPLcom/android/server/wm/-$$Lambda$RemoteAnimationController$uQS8vaPKQ-E3x_9G8NCxPQmw1fw;-><init>(Lcom/android/server/wm/RemoteAnimationController;)V
+PLcom/android/server/wm/-$$Lambda$RemoteAnimationController$uQS8vaPKQ-E3x_9G8NCxPQmw1fw;->run()V
 PLcom/android/server/wm/-$$Lambda$ResetTargetTaskHelper$APiSnEpUwnLFg5o4cp87NyJw4j4;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ResetTargetTaskHelper$APiSnEpUwnLFg5o4cp87NyJw4j4;-><init>()V
-PLcom/android/server/wm/-$$Lambda$ResetTargetTaskHelper$APiSnEpUwnLFg5o4cp87NyJw4j4;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$ResetTargetTaskHelper$APiSnEpUwnLFg5o4cp87NyJw4j4;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$ResetTargetTaskHelper$O-Gmp4WswvLHsJ0Qd1g0pv2tF14;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$ResetTargetTaskHelper$O-Gmp4WswvLHsJ0Qd1g0pv2tF14;-><init>()V
-PLcom/android/server/wm/-$$Lambda$ResetTargetTaskHelper$O-Gmp4WswvLHsJ0Qd1g0pv2tF14;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/-$$Lambda$ResetTargetTaskHelper$O-Gmp4WswvLHsJ0Qd1g0pv2tF14;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/wm/-$$Lambda$RootActivityContainer$-T1KVP2TtHv3l0Zlmfrn4vxoQQc;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$RootActivityContainer$-T1KVP2TtHv3l0Zlmfrn4vxoQQc;-><init>()V
 PLcom/android/server/wm/-$$Lambda$RootActivityContainer$-T1KVP2TtHv3l0Zlmfrn4vxoQQc;->test(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
@@ -19616,46 +33120,94 @@
 PLcom/android/server/wm/-$$Lambda$RootActivityContainer$xJQTdvTIrdue_psRt_XJNwTCmzA;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$RootActivityContainer$xJQTdvTIrdue_psRt_XJNwTCmzA;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$RootActivityContainer$xJQTdvTIrdue_psRt_XJNwTCmzA;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$-XbbIpkF4p2mF3v0qeXeat-_w3E;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$-XbbIpkF4p2mF3v0qeXeat-_w3E;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$-XbbIpkF4p2mF3v0qeXeat-_w3E;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$0ZupnQyxl7yZKgMmf2zwvykG50s;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$0ZupnQyxl7yZKgMmf2zwvykG50s;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$RootWindowContainer$0ZupnQyxl7yZKgMmf2zwvykG50s;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$0aCEx04eIvMHmZVtI4ucsiK5s9I;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$0aCEx04eIvMHmZVtI4ucsiK5s9I;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$RootWindowContainer$0aCEx04eIvMHmZVtI4ucsiK5s9I;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$3VVFoec4x74e1MMAq03gYI9kKjo;-><init>(IZ)V
+HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$3VVFoec4x74e1MMAq03gYI9kKjo;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$5fbF65VSmaJkPHxEhceOGTat7JE;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$5fbF65VSmaJkPHxEhceOGTat7JE;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$5fbF65VSmaJkPHxEhceOGTat7JE;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$7XcqfZjQLAbjpIyed3iDnVtZro4;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$7XcqfZjQLAbjpIyed3iDnVtZro4;-><init>()V
 HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$7XcqfZjQLAbjpIyed3iDnVtZro4;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$9Gi6QLDM5W-SF-EH_zfgZZvIlo0;-><init>(Landroid/util/ArraySet;Z)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$9Gi6QLDM5W-SF-EH_zfgZZvIlo0;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$FinishDisabledPackageActivitiesHelper$XWfRTrqNP6c1kx7wtT2Pvy6K9-c;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$FinishDisabledPackageActivitiesHelper$XWfRTrqNP6c1kx7wtT2Pvy6K9-c;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$RootWindowContainer$FinishDisabledPackageActivitiesHelper$XWfRTrqNP6c1kx7wtT2Pvy6K9-c;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$FtQd5Yte3ooh7jQ1sV_WSAmocV8;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$FtQd5Yte3ooh7jQ1sV_WSAmocV8;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$RootWindowContainer$FtQd5Yte3ooh7jQ1sV_WSAmocV8;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$RootWindowContainer$GNZWuoiMNi2XGPa9C70en5XvGQU;-><init>(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/wm/-$$Lambda$RootWindowContainer$GNZWuoiMNi2XGPa9C70en5XvGQU;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$RootWindowContainer$IlD1lD49ui7gQmU2NkxgnXIhlOo;-><init>(I)V
 HPLcom/android/server/wm/-$$Lambda$RootWindowContainer$IlD1lD49ui7gQmU2NkxgnXIhlOo;->apply(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$JVx5SVc0AsTnwnLxXYLgV6AKHPg;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$JVx5SVc0AsTnwnLxXYLgV6AKHPg;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$RootWindowContainer$JVx5SVc0AsTnwnLxXYLgV6AKHPg;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$JZALJLRYsvQWgNnzHdoTfj_f3QY;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$JZALJLRYsvQWgNnzHdoTfj_f3QY;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$RootWindowContainer$JZALJLRYsvQWgNnzHdoTfj_f3QY;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$SVJucJygDtyF-4eKB9wPXWaNBDM;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$SVJucJygDtyF-4eKB9wPXWaNBDM;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$SVJucJygDtyF-4eKB9wPXWaNBDM;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$Vvv8jzH2oSE9-eakZwTuKd5NpsU;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$Vvv8jzH2oSE9-eakZwTuKd5NpsU;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$RootWindowContainer$Vvv8jzH2oSE9-eakZwTuKd5NpsU;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$Vvv8jzH2oSE9-eakZwTuKd5NpsU;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$bRRfWu3QSW54eS51jCvFD02TPt8;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$bRRfWu3QSW54eS51jCvFD02TPt8;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$RootWindowContainer$bRRfWu3QSW54eS51jCvFD02TPt8;->test(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$fL0RxmEBMlnXFmjHLkBJ9jk9drs;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$fL0RxmEBMlnXFmjHLkBJ9jk9drs;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$RootWindowContainer$fL0RxmEBMlnXFmjHLkBJ9jk9drs;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$iBTaizkGPVUfwWK0hFvdR5mseLI;-><init>(Landroid/util/proto/ProtoOutputStream;)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$iBTaizkGPVUfwWK0hFvdR5mseLI;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$ipFw3PwG_VSG45EGVCDfJfHk29I;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$ipFw3PwG_VSG45EGVCDfJfHk29I;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$RootWindowContainer$ipFw3PwG_VSG45EGVCDfJfHk29I;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$RootWindowContainer$jHLZ5ssJOPMd9KJ4tf6FHZ8ZLXI;-><init>(Landroid/util/ArraySet;Z)V
 PLcom/android/server/wm/-$$Lambda$RootWindowContainer$jHLZ5ssJOPMd9KJ4tf6FHZ8ZLXI;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$RootWindowContainer$nRMSe8o9Vhp4MBHMJJoyb6ObTQ0;-><init>(Ljava/util/ArrayList;Ljava/io/PrintWriter;[IZ)V
 PLcom/android/server/wm/-$$Lambda$RootWindowContainer$nRMSe8o9Vhp4MBHMJJoyb6ObTQ0;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$RootWindowContainer$qT2ficAmvrvFcBdiJIGNKxJ8Z9Q;-><init>(Lcom/android/server/wm/RootWindowContainer;)V
-PLcom/android/server/wm/-$$Lambda$RootWindowContainer$qT2ficAmvrvFcBdiJIGNKxJ8Z9Q;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$RootWindowContainer$qT2ficAmvrvFcBdiJIGNKxJ8Z9Q;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$smSIq2r4GMdbTUsLaRS4KHth6DY;-><init>(Landroid/util/proto/ProtoOutputStream;I)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$smSIq2r4GMdbTUsLaRS4KHth6DY;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$RootWindowContainer$vMW2dyMvZQ0PDhptvNKN5WXpK_w;-><init>(IZ)V
 PLcom/android/server/wm/-$$Lambda$RootWindowContainer$vMW2dyMvZQ0PDhptvNKN5WXpK_w;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$y9wG_endhUBCwGznyjN4RSIYTyg;-><init>(Ljava/util/ArrayList;Ljava/io/PrintWriter;[IZ)V
+PLcom/android/server/wm/-$$Lambda$RootWindowContainer$y9wG_endhUBCwGznyjN4RSIYTyg;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$RunningTasks$MPCBAZpSXKx53M7vrqtvLfftJOc;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$RunningTasks$MPCBAZpSXKx53M7vrqtvLfftJOc;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$RunningTasks$MPCBAZpSXKx53M7vrqtvLfftJOc;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/wm/-$$Lambda$RunningTasks$hR_Ryk91b0B2BdJN9eCfQfPwC3g;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$RunningTasks$hR_Ryk91b0B2BdJN9eCfQfPwC3g;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$RunningTasks$hR_Ryk91b0B2BdJN9eCfQfPwC3g;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$ScreenRotationAnimation$SurfaceRotationAnimationController$R3Rh3gcwK_nBUAZq4hlWwmQXjXA;-><init>(Lcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;)V
-PLcom/android/server/wm/-$$Lambda$ScreenRotationAnimation$SurfaceRotationAnimationController$R3Rh3gcwK_nBUAZq4hlWwmQXjXA;->run()V
+HPLcom/android/server/wm/-$$Lambda$ScreenRotationAnimation$SurfaceRotationAnimationController$R3Rh3gcwK_nBUAZq4hlWwmQXjXA;-><init>(Lcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;)V
+HPLcom/android/server/wm/-$$Lambda$ScreenRotationAnimation$SurfaceRotationAnimationController$R3Rh3gcwK_nBUAZq4hlWwmQXjXA;->run()V
+PLcom/android/server/wm/-$$Lambda$ScreenRotationAnimation$SurfaceRotationAnimationController$mryOPi3UUpYZkQThzDJyjGBpl5c;-><init>(Lcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;)V
+PLcom/android/server/wm/-$$Lambda$ScreenRotationAnimation$SurfaceRotationAnimationController$mryOPi3UUpYZkQThzDJyjGBpl5c;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
 HPLcom/android/server/wm/-$$Lambda$Session$15hO_YO9_yR6FTMdPPe87fZzL1c;-><init>(Landroid/os/IBinder;)V
-PLcom/android/server/wm/-$$Lambda$Session$15hO_YO9_yR6FTMdPPe87fZzL1c;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$Session$15hO_YO9_yR6FTMdPPe87fZzL1c;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/wm/-$$Lambda$Session$zgdcs0nAb8hCdS-6ugnFMadbhU8;-><init>(FFFF)V
-PLcom/android/server/wm/-$$Lambda$Session$zgdcs0nAb8hCdS-6ugnFMadbhU8;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$Session$zgdcs0nAb8hCdS-6ugnFMadbhU8;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$StatusBarController$1$3FiQ0kybPCSlgcNJkCsNm5M12iA;-><init>(Lcom/android/server/wm/StatusBarController$1;)V
-PLcom/android/server/wm/-$$Lambda$StatusBarController$1$3FiQ0kybPCSlgcNJkCsNm5M12iA;->run()V
+HSPLcom/android/server/wm/-$$Lambda$StatusBarController$1$3FiQ0kybPCSlgcNJkCsNm5M12iA;->run()V
 HSPLcom/android/server/wm/-$$Lambda$StatusBarController$1$CizMeoiz6ZVrkt6kAKpSV5htmyc;-><init>(Lcom/android/server/wm/StatusBarController$1;)V
 PLcom/android/server/wm/-$$Lambda$StatusBarController$1$CizMeoiz6ZVrkt6kAKpSV5htmyc;->run()V
-PLcom/android/server/wm/-$$Lambda$StatusBarController$1$t71qcQIBSxRShk0Xohf1lk53bOw;-><init>(Lcom/android/server/wm/StatusBarController$1;JJ)V
-PLcom/android/server/wm/-$$Lambda$StatusBarController$1$t71qcQIBSxRShk0Xohf1lk53bOw;->run()V
+HSPLcom/android/server/wm/-$$Lambda$StatusBarController$1$t71qcQIBSxRShk0Xohf1lk53bOw;-><init>(Lcom/android/server/wm/StatusBarController$1;JJ)V
+HSPLcom/android/server/wm/-$$Lambda$StatusBarController$1$t71qcQIBSxRShk0Xohf1lk53bOw;->run()V
 HSPLcom/android/server/wm/-$$Lambda$StatusBarController$1$x4q7e0Eysf0ynMSdT1A-JN_ucuI;-><init>(Lcom/android/server/wm/StatusBarController$1;)V
-PLcom/android/server/wm/-$$Lambda$StatusBarController$1$x4q7e0Eysf0ynMSdT1A-JN_ucuI;->run()V
+HSPLcom/android/server/wm/-$$Lambda$StatusBarController$1$x4q7e0Eysf0ynMSdT1A-JN_ucuI;->run()V
 HPLcom/android/server/wm/-$$Lambda$SurfaceAnimationRunner$9Wa9MhcrSX12liOouHtYXEkDU60;-><init>(Lcom/android/server/wm/SurfaceAnimationRunner;)V
-PLcom/android/server/wm/-$$Lambda$SurfaceAnimationRunner$9Wa9MhcrSX12liOouHtYXEkDU60;->doFrame(J)V
+HPLcom/android/server/wm/-$$Lambda$SurfaceAnimationRunner$9Wa9MhcrSX12liOouHtYXEkDU60;->doFrame(J)V
 PLcom/android/server/wm/-$$Lambda$SurfaceAnimationRunner$SGOilG6qRe0XTsTJRQqQKhta0pA;-><init>(Lcom/android/server/wm/SurfaceAnimationRunner;Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;)V
 PLcom/android/server/wm/-$$Lambda$SurfaceAnimationRunner$SGOilG6qRe0XTsTJRQqQKhta0pA;->run()V
 HSPLcom/android/server/wm/-$$Lambda$SurfaceAnimationRunner$lSzwjoKEGADoEFOzdEnwriAk0T4;-><init>(Lcom/android/server/wm/SurfaceAnimationRunner;)V
@@ -19666,80 +33218,110 @@
 PLcom/android/server/wm/-$$Lambda$SurfaceAnimationRunner$we7K92eAl3biB_bzyqbv5xCmasE;->makeAnimator()Landroid/animation/ValueAnimator;
 HSPLcom/android/server/wm/-$$Lambda$SurfaceAnimationRunner$xDyZdsMrcbp64p4BQmOGPvVnSWA;-><init>(Lcom/android/server/wm/SurfaceAnimationRunner;)V
 HSPLcom/android/server/wm/-$$Lambda$SurfaceAnimationRunner$xDyZdsMrcbp64p4BQmOGPvVnSWA;->run()V
-PLcom/android/server/wm/-$$Lambda$SurfaceAnimator$M9kRDTUpVS03LTqe-QLQz3DnMhk;-><init>(Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/AnimationAdapter;Ljava/lang/Runnable;)V
-PLcom/android/server/wm/-$$Lambda$SurfaceAnimator$M9kRDTUpVS03LTqe-QLQz3DnMhk;->run()V
+HPLcom/android/server/wm/-$$Lambda$SurfaceAnimator$M9kRDTUpVS03LTqe-QLQz3DnMhk;-><init>(Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/AnimationAdapter;Ljava/lang/Runnable;)V
+HPLcom/android/server/wm/-$$Lambda$SurfaceAnimator$M9kRDTUpVS03LTqe-QLQz3DnMhk;->run()V
+HSPLcom/android/server/wm/-$$Lambda$SurfaceAnimator$Y4hCTFZUnyoMqrbq2rxOWj68ccg;-><init>(Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+HPLcom/android/server/wm/-$$Lambda$SurfaceAnimator$Y4hCTFZUnyoMqrbq2rxOWj68ccg;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
+HPLcom/android/server/wm/-$$Lambda$SurfaceAnimator$qxm0Z0Ve0b3lKnyQQMgWVQfTP3Q;-><init>(Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/AnimationAdapter;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;I)V
+HPLcom/android/server/wm/-$$Lambda$SurfaceAnimator$qxm0Z0Ve0b3lKnyQQMgWVQfTP3Q;->run()V
 HSPLcom/android/server/wm/-$$Lambda$SurfaceAnimator$vdRZk66hQVbQCvVXEaQCT1kVmFc;-><init>(Lcom/android/server/wm/SurfaceAnimator;Ljava/lang/Runnable;)V
-PLcom/android/server/wm/-$$Lambda$SurfaceAnimator$vdRZk66hQVbQCvVXEaQCT1kVmFc;->onAnimationFinished(Lcom/android/server/wm/AnimationAdapter;)V
+HPLcom/android/server/wm/-$$Lambda$SurfaceAnimator$vdRZk66hQVbQCvVXEaQCT1kVmFc;->onAnimationFinished(Lcom/android/server/wm/AnimationAdapter;)V
 HSPLcom/android/server/wm/-$$Lambda$SystemGesturesPointerEventListener$9Iw39fjTtjXO5kacgrpdxfxjuSY;-><init>(Lcom/android/server/wm/SystemGesturesPointerEventListener;)V
 HSPLcom/android/server/wm/-$$Lambda$SystemGesturesPointerEventListener$9Iw39fjTtjXO5kacgrpdxfxjuSY;->run()V
+PLcom/android/server/wm/-$$Lambda$TDUtW_T9flkdwvGQ9AliNjGyzdY;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/-$$Lambda$TDUtW_T9flkdwvGQ9AliNjGyzdY;->run()V
 PLcom/android/server/wm/-$$Lambda$Task$2Dfz5yY09PC4DNoGpbJL4lMbjDo;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$Task$2Dfz5yY09PC4DNoGpbJL4lMbjDo;-><init>()V
-PLcom/android/server/wm/-$$Lambda$Task$2Dfz5yY09PC4DNoGpbJL4lMbjDo;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$Task$2iqUThjTmuPJNPgunW5qcBmNa3E;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$Task$2iqUThjTmuPJNPgunW5qcBmNa3E;-><init>()V
-PLcom/android/server/wm/-$$Lambda$Task$2iqUThjTmuPJNPgunW5qcBmNa3E;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$Task$2Dfz5yY09PC4DNoGpbJL4lMbjDo;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$Task$2iqUThjTmuPJNPgunW5qcBmNa3E;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$Task$2iqUThjTmuPJNPgunW5qcBmNa3E;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$Task$2iqUThjTmuPJNPgunW5qcBmNa3E;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$Task$AFigK9DV4TJX-I6KGr1B5GhkxBQ;-><init>(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/-$$Lambda$Task$BP51Xfr33NBfsJ4rKO04RomX2Tg;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$Task$BP51Xfr33NBfsJ4rKO04RomX2Tg;-><init>()V
-PLcom/android/server/wm/-$$Lambda$Task$BP51Xfr33NBfsJ4rKO04RomX2Tg;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$Task$FindRootHelper$sIea0VfMPIGsR0Xwg7rABysHwZ4;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$Task$FindRootHelper$sIea0VfMPIGsR0Xwg7rABysHwZ4;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$Task$FindRootHelper$sIea0VfMPIGsR0Xwg7rABysHwZ4;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/-$$Lambda$Task$BP51Xfr33NBfsJ4rKO04RomX2Tg;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$Task$CKQ9RLMNPYajktwO1VrUoQGHF_8;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$Task$CKQ9RLMNPYajktwO1VrUoQGHF_8;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$Task$CKQ9RLMNPYajktwO1VrUoQGHF_8;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$Task$FindRootHelper$sIea0VfMPIGsR0Xwg7rABysHwZ4;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$Task$FindRootHelper$sIea0VfMPIGsR0Xwg7rABysHwZ4;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$Task$FindRootHelper$sIea0VfMPIGsR0Xwg7rABysHwZ4;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/wm/-$$Lambda$Task$HQ9aJbE-z0XuxiYHPMxxaMHkKFY;-><init>(Landroid/util/proto/ProtoOutputStream;)V
+PLcom/android/server/wm/-$$Lambda$Task$HQ9aJbE-z0XuxiYHPMxxaMHkKFY;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$Task$N2dM5PIhuaw--o5HD3NnXAFoPzg;-><init>(Landroid/util/proto/ProtoOutputStream;)V
+PLcom/android/server/wm/-$$Lambda$Task$N2dM5PIhuaw--o5HD3NnXAFoPzg;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$Task$N6swnhdrHvxOfp81yUqye9AbX7A;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$Task$N6swnhdrHvxOfp81yUqye9AbX7A;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$Task$N6swnhdrHvxOfp81yUqye9AbX7A;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$Task$OQmaRDKXdgA0v6VfNwTX7wOkwBs;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$Task$OQmaRDKXdgA0v6VfNwTX7wOkwBs;-><init>()V
-PLcom/android/server/wm/-$$Lambda$Task$OQmaRDKXdgA0v6VfNwTX7wOkwBs;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/wm/-$$Lambda$Task$SRt5iDqxFMzfuMULgjnmoyWp73o;-><init>(Ljava/io/PrintWriter;Ljava/lang/String;[ILjava/lang/String;Z)V
-PLcom/android/server/wm/-$$Lambda$Task$SRt5iDqxFMzfuMULgjnmoyWp73o;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$Task$TUGPkEKamN60PF6hJQxUwDBjU-M;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$Task$TUGPkEKamN60PF6hJQxUwDBjU-M;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$Task$TUGPkEKamN60PF6hJQxUwDBjU-M;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/-$$Lambda$Task$OQmaRDKXdgA0v6VfNwTX7wOkwBs;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/-$$Lambda$Task$SRt5iDqxFMzfuMULgjnmoyWp73o;-><init>(Ljava/io/PrintWriter;Ljava/lang/String;[ILjava/lang/String;Z)V
+HPLcom/android/server/wm/-$$Lambda$Task$SRt5iDqxFMzfuMULgjnmoyWp73o;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$Task$TUGPkEKamN60PF6hJQxUwDBjU-M;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$Task$TUGPkEKamN60PF6hJQxUwDBjU-M;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$Task$TUGPkEKamN60PF6hJQxUwDBjU-M;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/wm/-$$Lambda$Task$UZHgJINsQMxoLLbKNADHN5xbji8;-><init>(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/wm/-$$Lambda$Task$UZHgJINsQMxoLLbKNADHN5xbji8;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$Task$V2nwgQi-xYvgAjezrWRsKUB2nLI;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$Task$V2nwgQi-xYvgAjezrWRsKUB2nLI;-><init>()V
-PLcom/android/server/wm/-$$Lambda$Task$V2nwgQi-xYvgAjezrWRsKUB2nLI;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$Task$V2nwgQi-xYvgAjezrWRsKUB2nLI;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$Task$WFXOGUsP9k2SctNXpn2eb_XUKP0;-><init>(Landroid/util/proto/ProtoOutputStream;I)V
+PLcom/android/server/wm/-$$Lambda$Task$WFXOGUsP9k2SctNXpn2eb_XUKP0;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$Task$XRtJRRfvaa_neQ0BbpDvRIqXzf4;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$Task$XRtJRRfvaa_neQ0BbpDvRIqXzf4;-><init>()V
-PLcom/android/server/wm/-$$Lambda$Task$XRtJRRfvaa_neQ0BbpDvRIqXzf4;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$Task$a4C-owFvQJqPsf8C48fgcmCjd6M;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$Task$a4C-owFvQJqPsf8C48fgcmCjd6M;-><init>()V
-PLcom/android/server/wm/-$$Lambda$Task$a4C-owFvQJqPsf8C48fgcmCjd6M;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$Task$XRtJRRfvaa_neQ0BbpDvRIqXzf4;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$Task$a4C-owFvQJqPsf8C48fgcmCjd6M;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$Task$a4C-owFvQJqPsf8C48fgcmCjd6M;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$Task$a4C-owFvQJqPsf8C48fgcmCjd6M;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$Task$eHH2M2yJE6epk3eXzGcOuu6WMt8;-><init>(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/-$$Lambda$Task$eHH2M2yJE6epk3eXzGcOuu6WMt8;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/wm/-$$Lambda$Task$hJlIVNsWJQJ_mIrVCbuZDn-cUwE;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$Task$hJlIVNsWJQJ_mIrVCbuZDn-cUwE;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$Task$hJlIVNsWJQJ_mIrVCbuZDn-cUwE;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$Task$lqGdYR9ABiPuG3_68w1VS6hrr8c;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$Task$lqGdYR9ABiPuG3_68w1VS6hrr8c;-><init>()V
-PLcom/android/server/wm/-$$Lambda$Task$lqGdYR9ABiPuG3_68w1VS6hrr8c;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/-$$Lambda$Task$lqGdYR9ABiPuG3_68w1VS6hrr8c;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/wm/-$$Lambda$Task$s9wiZSThkGOKye0Zl5MRKv-8Iq0;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$Task$s9wiZSThkGOKye0Zl5MRKv-8Iq0;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$Task$s9wiZSThkGOKye0Zl5MRKv-8Iq0;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$Task$wJrggGO94VQWnIMvq8QrsNZ1LZk;-><init>(Ljava/lang/String;)V
-PLcom/android/server/wm/-$$Lambda$Task$wJrggGO94VQWnIMvq8QrsNZ1LZk;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$Task$xh_oQC7HZKaIUa_hEyntZO3NQcs;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$Task$xh_oQC7HZKaIUa_hEyntZO3NQcs;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$Task$xh_oQC7HZKaIUa_hEyntZO3NQcs;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$Task$wJrggGO94VQWnIMvq8QrsNZ1LZk;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$Task$xh_oQC7HZKaIUa_hEyntZO3NQcs;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$Task$xh_oQC7HZKaIUa_hEyntZO3NQcs;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$Task$xh_oQC7HZKaIUa_hEyntZO3NQcs;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$Task$zTlXbC5QcSokVoyim7UHGu8aFek;-><init>(Landroid/util/proto/ProtoOutputStream;I)V
 PLcom/android/server/wm/-$$Lambda$Task$zTlXbC5QcSokVoyim7UHGu8aFek;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$0m_-qN9QkcgkoWun2Biw8le4l1Y;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$0m_-qN9QkcgkoWun2Biw8le4l1Y;-><init>()V
+PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$0m_-qN9QkcgkoWun2Biw8le4l1Y;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$1ziXgnyLi0gQjqMGJAbSzs0-dmE;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$1ziXgnyLi0gQjqMGJAbSzs0-dmE;-><init>()V
-PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$1ziXgnyLi0gQjqMGJAbSzs0-dmE;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$1ziXgnyLi0gQjqMGJAbSzs0-dmE;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$9ngbiJ2r3x2ASHwN59tUFO2-2BQ;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$9ngbiJ2r3x2ASHwN59tUFO2-2BQ;-><init>()V
+PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$9ngbiJ2r3x2ASHwN59tUFO2-2BQ;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$Dvvt1gNNfFRVEKlSCdL_9VnilUE;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$Dvvt1gNNfFRVEKlSCdL_9VnilUE;-><init>()V
+PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$Dvvt1gNNfFRVEKlSCdL_9VnilUE;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$Ge3jFevRwpndz6qRSLDXODq2VjE;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$Ge3jFevRwpndz6qRSLDXODq2VjE;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$Ge3jFevRwpndz6qRSLDXODq2VjE;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$Ge3jFevRwpndz6qRSLDXODq2VjE;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$Kz-Od_gLhLbMtGka4r78W0Gmzgo;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$Kz-Od_gLhLbMtGka4r78W0Gmzgo;-><init>()V
-PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$Kz-Od_gLhLbMtGka4r78W0Gmzgo;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$Kz-Od_gLhLbMtGka4r78W0Gmzgo;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$M2NSB3SSVJR2Tu4vihNfsIL31s4;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$M2NSB3SSVJR2Tu4vihNfsIL31s4;-><init>()V
 PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$M2NSB3SSVJR2Tu4vihNfsIL31s4;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$MS67FdGix7tWO0Od9imcaKVXL7I;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$MS67FdGix7tWO0Od9imcaKVXL7I;-><init>()V
-PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$MS67FdGix7tWO0Od9imcaKVXL7I;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$MS67FdGix7tWO0Od9imcaKVXL7I;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$NLoKy9SbVr1EJpEjznsKi7yAlpg;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$NLoKy9SbVr1EJpEjznsKi7yAlpg;-><init>()V
-PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$NLoKy9SbVr1EJpEjznsKi7yAlpg;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$NLoKy9SbVr1EJpEjznsKi7yAlpg;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$PSFFTNiSSqx5-emiM-hoY62N04M;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$PSFFTNiSSqx5-emiM-hoY62N04M;-><init>()V
-PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$PSFFTNiSSqx5-emiM-hoY62N04M;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$PSFFTNiSSqx5-emiM-hoY62N04M;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$SAbrujQOZNUflKs1FAg2mBnjx3A;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$SAbrujQOZNUflKs1FAg2mBnjx3A;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$SAbrujQOZNUflKs1FAg2mBnjx3A;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
@@ -19747,23 +33329,25 @@
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$SByuGj5tpcCpjTH9lf5zHHv2gNM;-><init>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$UexNbaqPy0mc3VxTw2coCctHho8;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$UexNbaqPy0mc3VxTw2coCctHho8;-><init>()V
-PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$UexNbaqPy0mc3VxTw2coCctHho8;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$UexNbaqPy0mc3VxTw2coCctHho8;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$VuvWLQaLHifVGvurVv75MXCukH0;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$VuvWLQaLHifVGvurVv75MXCukH0;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$VuvWLQaLHifVGvurVv75MXCukH0;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$VuvWLQaLHifVGvurVv75MXCukH0;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$ZLPZtiEvD_F4WUgH7BD4KPpdAWM;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$ZLPZtiEvD_F4WUgH7BD4KPpdAWM;-><init>()V
-PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$ZLPZtiEvD_F4WUgH7BD4KPpdAWM;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$ZLPZtiEvD_F4WUgH7BD4KPpdAWM;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$byMDuIFUN4cQ1lT9jVjMwLhaLDw;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$byMDuIFUN4cQ1lT9jVjMwLhaLDw;-><init>()V
+PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$byMDuIFUN4cQ1lT9jVjMwLhaLDw;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$cFUeUwnRjuOQKcg2c4PnDS0ImTw;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$cFUeUwnRjuOQKcg2c4PnDS0ImTw;-><init>()V
+PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$cFUeUwnRjuOQKcg2c4PnDS0ImTw;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$k0FXXC-HcWJhmtm6-Kruo6nGeXI;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$k0FXXC-HcWJhmtm6-Kruo6nGeXI;-><init>()V
-PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$k0FXXC-HcWJhmtm6-Kruo6nGeXI;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$k0FXXC-HcWJhmtm6-Kruo6nGeXI;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$kss8MGli3T9b_Y-QDzR2cB843y8;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$kss8MGli3T9b_Y-QDzR2cB843y8;-><init>()V
-PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$kss8MGli3T9b_Y-QDzR2cB843y8;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$kss8MGli3T9b_Y-QDzR2cB843y8;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$ncM_yje7-m7HuiJvorBIH_C8Ou4;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$ncM_yje7-m7HuiJvorBIH_C8Ou4;-><init>()V
 PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$ncM_yje7-m7HuiJvorBIH_C8Ou4;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
@@ -19772,90 +33356,139 @@
 PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$qONfw3ssOxjb_iMuO2oMzCbXfrg;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$sS6OHbZtuWHjzmkm8bleSWZWFqA;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$sS6OHbZtuWHjzmkm8bleSWZWFqA;-><init>()V
-PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$sS6OHbZtuWHjzmkm8bleSWZWFqA;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$sS6OHbZtuWHjzmkm8bleSWZWFqA;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$sdBP_U6BS8zRbtZp-gZ0BmFW8bs;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$sdBP_U6BS8zRbtZp-gZ0BmFW8bs;-><init>()V
+PLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$sdBP_U6BS8zRbtZp-gZ0BmFW8bs;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$wuBjs4dj7gB_MI4dIdt2gV2Osus;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$wuBjs4dj7gB_MI4dIdt2gV2Osus;-><init>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$yaW9HlZsz3L55CTQ4b7y33IGo94;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$yaW9HlZsz3L55CTQ4b7y33IGo94;-><init>()V
 PLcom/android/server/wm/-$$Lambda$TaskPersister$8MhgCrM41UuyRqTjWwKtfifKRLo;-><init>(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/-$$Lambda$TaskPersister$8MhgCrM41UuyRqTjWwKtfifKRLo;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$TaskPersister$mW0HULrR8EtZ9La-pL9kLTnHSzk;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/wm/-$$Lambda$TaskPersister$mW0HULrR8EtZ9La-pL9kLTnHSzk;-><init>(Ljava/lang/String;)V
 PLcom/android/server/wm/-$$Lambda$TaskPersister$mW0HULrR8EtZ9La-pL9kLTnHSzk;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$TaskPersister$piHtCTZMpbHMTXAk2o7OdlK4Xvc;-><init>(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/-$$Lambda$TaskPersister$piHtCTZMpbHMTXAk2o7OdlK4Xvc;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$TaskPersister$piHtCTZMpbHMTXAk2o7OdlK4Xvc;-><init>(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/-$$Lambda$TaskPersister$piHtCTZMpbHMTXAk2o7OdlK4Xvc;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$TaskPositioningController$u0oAwi82C-bAGo2JAsAc_9ZLi70;-><init>(Lcom/android/server/wm/TaskPositioningController;Lcom/android/server/wm/DisplayContent;II)V
 PLcom/android/server/wm/-$$Lambda$TaskPositioningController$u0oAwi82C-bAGo2JAsAc_9ZLi70;->run()V
-PLcom/android/server/wm/-$$Lambda$TaskSnapshotController$Tj7bQvjfkzsOjJOdJXBpqCZnW1Q;-><init>(Lcom/android/server/wm/TaskSnapshotController;Lcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;)V
-PLcom/android/server/wm/-$$Lambda$TaskSnapshotController$Tj7bQvjfkzsOjJOdJXBpqCZnW1Q;->run()V
+HPLcom/android/server/wm/-$$Lambda$TaskSnapshotController$Tj7bQvjfkzsOjJOdJXBpqCZnW1Q;-><init>(Lcom/android/server/wm/TaskSnapshotController;Lcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;)V
+HPLcom/android/server/wm/-$$Lambda$TaskSnapshotController$Tj7bQvjfkzsOjJOdJXBpqCZnW1Q;->run()V
 PLcom/android/server/wm/-$$Lambda$TaskSnapshotController$b7mc92hqzbRpmpc99dYS4wKuL6Y;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$TaskSnapshotController$b7mc92hqzbRpmpc99dYS4wKuL6Y;-><init>()V
-PLcom/android/server/wm/-$$Lambda$TaskSnapshotController$b7mc92hqzbRpmpc99dYS4wKuL6Y;->apply(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$TaskSnapshotController$b7mc92hqzbRpmpc99dYS4wKuL6Y;->apply(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$TaskSnapshotController$eY4HzOpxvBAchhbObndnIDQqsVs;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$TaskSnapshotController$eY4HzOpxvBAchhbObndnIDQqsVs;-><init>()V
-PLcom/android/server/wm/-$$Lambda$TaskSnapshotController$eY4HzOpxvBAchhbObndnIDQqsVs;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$TaskSnapshotController$pF831VjVO7J7eXZhalKp1CJKNC4;-><init>(Lcom/android/server/wm/TaskSnapshotController;)V
+HPLcom/android/server/wm/-$$Lambda$TaskSnapshotController$eY4HzOpxvBAchhbObndnIDQqsVs;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$TaskSnapshotController$pF831VjVO7J7eXZhalKp1CJKNC4;-><init>(Lcom/android/server/wm/TaskSnapshotController;)V
 HPLcom/android/server/wm/-$$Lambda$TaskSnapshotController$pF831VjVO7J7eXZhalKp1CJKNC4;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$UZl9uqUNteVgplGGEK6TMzf-7zk;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$UZl9uqUNteVgplGGEK6TMzf-7zk;-><init>()V
-PLcom/android/server/wm/-$$Lambda$UZl9uqUNteVgplGGEK6TMzf-7zk;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$U9zpYh1OwxC9FZcjOfUJl0HQSho;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$U9zpYh1OwxC9FZcjOfUJl0HQSho;-><init>()V
+PLcom/android/server/wm/-$$Lambda$U9zpYh1OwxC9FZcjOfUJl0HQSho;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$UZl9uqUNteVgplGGEK6TMzf-7zk;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$UZl9uqUNteVgplGGEK6TMzf-7zk;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$UZl9uqUNteVgplGGEK6TMzf-7zk;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$UnknownAppVisibilityController$FYhcjOhYWVp6HX5hr3GGaPg67Gc;-><init>(Lcom/android/server/wm/UnknownAppVisibilityController;)V
 PLcom/android/server/wm/-$$Lambda$UnknownAppVisibilityController$FYhcjOhYWVp6HX5hr3GGaPg67Gc;->run()V
-PLcom/android/server/wm/-$$Lambda$VY87MmFWaCLMkNa2qHGaPrThyrI;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$VY87MmFWaCLMkNa2qHGaPrThyrI;-><init>()V
-PLcom/android/server/wm/-$$Lambda$VY87MmFWaCLMkNa2qHGaPrThyrI;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$WallpaperAnimationAdapter$-EwtM9NXnIMpRq_OzBHTdmhakaM;-><init>(JJLjava/util/function/Consumer;Ljava/util/ArrayList;Ljava/util/ArrayList;)V
-PLcom/android/server/wm/-$$Lambda$WallpaperAnimationAdapter$-EwtM9NXnIMpRq_OzBHTdmhakaM;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$VDG7MoD_7v7qIdkguJXls8nmhGU;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$VDG7MoD_7v7qIdkguJXls8nmhGU;-><init>()V
+PLcom/android/server/wm/-$$Lambda$VDG7MoD_7v7qIdkguJXls8nmhGU;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$VY87MmFWaCLMkNa2qHGaPrThyrI;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$VY87MmFWaCLMkNa2qHGaPrThyrI;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$VY87MmFWaCLMkNa2qHGaPrThyrI;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$VYR_ckkt7281-Ti8Ps0f0Tx3ljY;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$VYR_ckkt7281-Ti8Ps0f0Tx3ljY;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$VYR_ckkt7281-Ti8Ps0f0Tx3ljY;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$WallpaperAnimationAdapter$-EwtM9NXnIMpRq_OzBHTdmhakaM;-><init>(JJLjava/util/function/Consumer;Ljava/util/ArrayList;Ljava/util/ArrayList;)V
+HPLcom/android/server/wm/-$$Lambda$WallpaperAnimationAdapter$-EwtM9NXnIMpRq_OzBHTdmhakaM;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$WallpaperController$6pruPGLeSJAwNl9vGfC87eso21w;-><init>(Lcom/android/server/wm/WallpaperController;)V
-HPLcom/android/server/wm/-$$Lambda$WallpaperController$6pruPGLeSJAwNl9vGfC87eso21w;->apply(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$WallpaperController$6pruPGLeSJAwNl9vGfC87eso21w;->apply(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$WallpaperController$Gy7houdzET4VmpY0QJ2v-NX1b7k;-><init>(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/-$$Lambda$WallpaperController$Gy7houdzET4VmpY0QJ2v-NX1b7k;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$WallpaperController$Gy7houdzET4VmpY0QJ2v-NX1b7k;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$WindowAnimationSpec$jKE7Phq2DESkeBondpaNPBLn6Cs;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$WindowAnimationSpec$jKE7Phq2DESkeBondpaNPBLn6Cs;-><init>()V
-PLcom/android/server/wm/-$$Lambda$WindowAnimationSpec$jKE7Phq2DESkeBondpaNPBLn6Cs;->get()Ljava/lang/Object;
+HPLcom/android/server/wm/-$$Lambda$WindowAnimationSpec$jKE7Phq2DESkeBondpaNPBLn6Cs;->get()Ljava/lang/Object;
 HSPLcom/android/server/wm/-$$Lambda$WindowAnimator$U3Fu5_RzEyNo8Jt6zTb2ozdXiqM;-><init>(Lcom/android/server/wm/WindowAnimator;)V
 HSPLcom/android/server/wm/-$$Lambda$WindowAnimator$U3Fu5_RzEyNo8Jt6zTb2ozdXiqM;->run()V
 HSPLcom/android/server/wm/-$$Lambda$WindowAnimator$ddXU8gK8rmDqri0OZVMNa3Y4GHk;-><init>(Lcom/android/server/wm/WindowAnimator;)V
 HSPLcom/android/server/wm/-$$Lambda$WindowAnimator$ddXU8gK8rmDqri0OZVMNa3Y4GHk;->doFrame(J)V
-PLcom/android/server/wm/-$$Lambda$WindowContainer$-A4y17DMfFWJcsomzkr9vLbjQAE;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$WindowContainer$-A4y17DMfFWJcsomzkr9vLbjQAE;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$WindowContainer$-A4y17DMfFWJcsomzkr9vLbjQAE;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$WindowContainer$4sX6UUtugZXD_J917yuWIm58Q9M;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$WindowContainer$4sX6UUtugZXD_J917yuWIm58Q9M;-><init>()V
-HPLcom/android/server/wm/-$$Lambda$WindowContainer$4sX6UUtugZXD_J917yuWIm58Q9M;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$WindowContainer$7u99Gj9w15XaOTtX23LKq-yXn5o;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$WindowContainer$7u99Gj9w15XaOTtX23LKq-yXn5o;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$-A4y17DMfFWJcsomzkr9vLbjQAE;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$-A4y17DMfFWJcsomzkr9vLbjQAE;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$-A4y17DMfFWJcsomzkr9vLbjQAE;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$WindowContainer$2rGzqVQd2W3E16Whknxg9bmDzTY;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$WindowContainer$2rGzqVQd2W3E16Whknxg9bmDzTY;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$WindowContainer$2rGzqVQd2W3E16Whknxg9bmDzTY;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$4sX6UUtugZXD_J917yuWIm58Q9M;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$4sX6UUtugZXD_J917yuWIm58Q9M;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$4sX6UUtugZXD_J917yuWIm58Q9M;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$7u99Gj9w15XaOTtX23LKq-yXn5o;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$7u99Gj9w15XaOTtX23LKq-yXn5o;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$WindowContainer$7u99Gj9w15XaOTtX23LKq-yXn5o;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$WindowContainer$TQFCJtak2E5nTjAEG9Q24yp-Oi8;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$WindowContainer$TQFCJtak2E5nTjAEG9Q24yp-Oi8;-><init>()V
-PLcom/android/server/wm/-$$Lambda$WindowContainer$TQFCJtak2E5nTjAEG9Q24yp-Oi8;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$WindowContainer$WskrGbNwLeexLlAXUNUyGLhHEWA;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$WindowContainer$WskrGbNwLeexLlAXUNUyGLhHEWA;-><init>()V
+PLcom/android/server/wm/-$$Lambda$WindowContainer$Gpo6ayyekClulCV4pWn8r_9sFj8;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$WindowContainer$Gpo6ayyekClulCV4pWn8r_9sFj8;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$WindowContainer$Gpo6ayyekClulCV4pWn8r_9sFj8;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$LBjDP_WAw_7yWAmt8ZHABKob-8M;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$LBjDP_WAw_7yWAmt8ZHABKob-8M;-><init>()V
+PLcom/android/server/wm/-$$Lambda$WindowContainer$LBjDP_WAw_7yWAmt8ZHABKob-8M;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$WindowContainer$MJv6PFywp2VpmiV3-w1JgxopvP0;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$WindowContainer$MJv6PFywp2VpmiV3-w1JgxopvP0;-><init>()V
+PLcom/android/server/wm/-$$Lambda$WindowContainer$MJv6PFywp2VpmiV3-w1JgxopvP0;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$WindowContainer$Nezf9LuhT9GSLKWzqEWp7WKs5W8;-><init>(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/-$$Lambda$WindowContainer$Nezf9LuhT9GSLKWzqEWp7WKs5W8;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$TQFCJtak2E5nTjAEG9Q24yp-Oi8;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$TQFCJtak2E5nTjAEG9Q24yp-Oi8;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$TQFCJtak2E5nTjAEG9Q24yp-Oi8;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$WskrGbNwLeexLlAXUNUyGLhHEWA;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$WskrGbNwLeexLlAXUNUyGLhHEWA;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$WindowContainer$WskrGbNwLeexLlAXUNUyGLhHEWA;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$WindowContainer$a-4AX8BeEa4UpmUmPJfszEypbe8;-><init>(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/-$$Lambda$WindowContainer$a-4AX8BeEa4UpmUmPJfszEypbe8;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$WindowContainer$aOnsenmCzcAbVIVfb4GaJb6lURI;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$WindowContainer$aOnsenmCzcAbVIVfb4GaJb6lURI;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$WindowContainer$aOnsenmCzcAbVIVfb4GaJb6lURI;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$WindowContainer$bIb_8MdCB21XDQtqSZBnQ6UsdVY;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$WindowContainer$bIb_8MdCB21XDQtqSZBnQ6UsdVY;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$WindowContainer$bIb_8MdCB21XDQtqSZBnQ6UsdVY;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$WindowContainer$dnx35h_Pw7Bg2H7Ehkb7sSfFoyI;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$WindowContainer$dnx35h_Pw7Bg2H7Ehkb7sSfFoyI;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$WindowContainer$dnx35h_Pw7Bg2H7Ehkb7sSfFoyI;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$WindowContainer$fQfr0FFMMdeUY3lZFLkiF4glOP0;-><init>(Lcom/android/server/wm/WindowContainer;Lcom/android/server/policy/WindowManagerPolicy;)V
 HPLcom/android/server/wm/-$$Lambda$WindowContainer$fQfr0FFMMdeUY3lZFLkiF4glOP0;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$WindowContainer$hEnPtnCJ_pCrhm4O_2UvgVpB0HQ;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$WindowContainer$hEnPtnCJ_pCrhm4O_2UvgVpB0HQ;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$WindowContainer$hEnPtnCJ_pCrhm4O_2UvgVpB0HQ;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$hIGRJSXS2_nuTiN5-y-qjXv-Wwk;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$hIGRJSXS2_nuTiN5-y-qjXv-Wwk;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$WindowContainer$hIGRJSXS2_nuTiN5-y-qjXv-Wwk;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$WindowContainer$k_PpuHAHKhi1gqk1dQsXNnYX7Ok;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$WindowContainer$k_PpuHAHKhi1gqk1dQsXNnYX7Ok;-><init>()V
-PLcom/android/server/wm/-$$Lambda$WindowContainer$k_PpuHAHKhi1gqk1dQsXNnYX7Ok;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$WindowContainer$k_PpuHAHKhi1gqk1dQsXNnYX7Ok;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/-$$Lambda$WindowContainer$lJjjxJS1wJFikrxN0jFMgNna43g;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$WindowContainer$lJjjxJS1wJFikrxN0jFMgNna43g;-><init>()V
-PLcom/android/server/wm/-$$Lambda$WindowContainer$lJjjxJS1wJFikrxN0jFMgNna43g;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/-$$Lambda$WindowContainer$lJjjxJS1wJFikrxN0jFMgNna43g;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$WindowContainer$qSbR9_kgF0JT89cFcOglSsU0Y94;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$WindowContainer$qSbR9_kgF0JT89cFcOglSsU0Y94;-><init>()V
+PLcom/android/server/wm/-$$Lambda$WindowContainer$qSbR9_kgF0JT89cFcOglSsU0Y94;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$WindowContainer$sh5zVifGKSmT1fuGQxK_5_eAZ20;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$WindowContainer$sh5zVifGKSmT1fuGQxK_5_eAZ20;-><init>()V
-PLcom/android/server/wm/-$$Lambda$WindowContainer$sh5zVifGKSmT1fuGQxK_5_eAZ20;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$$Lambda$WindowContainer$sh5zVifGKSmT1fuGQxK_5_eAZ20;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$$Lambda$WindowContainerThumbnail$TAAowaUKTiUY1j0FFlQQfUHXn0U;-><init>(Lcom/android/server/wm/WindowContainerThumbnail;)V
+PLcom/android/server/wm/-$$Lambda$WindowContainerThumbnail$TAAowaUKTiUY1j0FFlQQfUHXn0U;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
+PLcom/android/server/wm/-$$Lambda$WindowContainerThumbnail$eaIKGhnBPQly7snIrFjjw1Gda8k;-><init>(Lcom/android/server/wm/WindowContainerThumbnail;)V
+PLcom/android/server/wm/-$$Lambda$WindowContainerThumbnail$eaIKGhnBPQly7snIrFjjw1Gda8k;->run()V
 HSPLcom/android/server/wm/-$$Lambda$WindowManagerConstants$H0Vnr9H2xLD72_22unzb68d1fSM;-><init>(Lcom/android/server/wm/WindowManagerConstants;)V
 HSPLcom/android/server/wm/-$$Lambda$WindowManagerConstants$YOsWod8qOtbBnduZqPrYHSwyJ5E;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/-$$Lambda$WindowManagerConstants$vqhvZbTPHnj84vQKH9wjAhgVP44;-><init>(Lcom/android/server/wm/WindowManagerConstants;)V
 HSPLcom/android/server/wm/-$$Lambda$WindowManagerService$-84S7IuSlM65nKgepHJEvVFHdC8;-><init>(Lcom/android/server/wm/WindowManagerService;)V
-PLcom/android/server/wm/-$$Lambda$WindowManagerService$8ua71O53dXrMSZy5W0bAg3kK7ho;-><init>(Z)V
+PLcom/android/server/wm/-$$Lambda$WindowManagerService$-84S7IuSlM65nKgepHJEvVFHdC8;->binderDied()V
+PLcom/android/server/wm/-$$Lambda$WindowManagerService$76as6dijPl5n2m0AtZPbXLM-ukM;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$WindowManagerService$76as6dijPl5n2m0AtZPbXLM-ukM;-><init>()V
+PLcom/android/server/wm/-$$Lambda$WindowManagerService$76as6dijPl5n2m0AtZPbXLM-ukM;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$WindowManagerService$8ua71O53dXrMSZy5W0bAg3kK7ho;-><init>(Z)V
 HPLcom/android/server/wm/-$$Lambda$WindowManagerService$8ua71O53dXrMSZy5W0bAg3kK7ho;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$WindowManagerService$LocalService$_nYJRiVOgbON7mI191FIzNAk4Xs;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/wm/-$$Lambda$WindowManagerService$LocalService$_nYJRiVOgbON7mI191FIzNAk4Xs;-><init>(Ljava/lang/String;)V
 PLcom/android/server/wm/-$$Lambda$WindowManagerService$LocalService$_nYJRiVOgbON7mI191FIzNAk4Xs;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$WindowManagerService$LocalService$rEGrcIRCgYp-4kzr5xA12LKQX0E;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/wm/-$$Lambda$WindowManagerService$LocalService$rEGrcIRCgYp-4kzr5xA12LKQX0E;-><init>(Ljava/lang/String;)V
 PLcom/android/server/wm/-$$Lambda$WindowManagerService$LocalService$rEGrcIRCgYp-4kzr5xA12LKQX0E;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$WindowManagerService$Zv37mcLTUXyG89YznyHzluaKNE0;-><init>(Landroid/app/IAssistDataReceiver;Landroid/graphics/Bitmap;)V
 PLcom/android/server/wm/-$$Lambda$WindowManagerService$Zv37mcLTUXyG89YznyHzluaKNE0;->run()V
@@ -19867,27 +33500,33 @@
 HSPLcom/android/server/wm/-$$Lambda$WindowManagerService$qCWPyJrU0wwX4tP-_QpfmersCVc;->run()V
 PLcom/android/server/wm/-$$Lambda$WindowManagerShellCommand$prjQFpVCgSa5hzjzlwN4oL9HnaI;-><init>(Ljava/util/ArrayList;)V
 PLcom/android/server/wm/-$$Lambda$WindowManagerShellCommand$prjQFpVCgSa5hzjzlwN4oL9HnaI;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$WindowToken$tFLHn4S6WuSXW1gp1kvT_sp7WC0;-><init>(Lcom/android/server/wm/WindowToken;)V
+HSPLcom/android/server/wm/-$$Lambda$WindowToken$tFLHn4S6WuSXW1gp1kvT_sp7WC0;-><init>(Lcom/android/server/wm/WindowToken;)V
 PLcom/android/server/wm/-$$Lambda$WindowToken$tFLHn4S6WuSXW1gp1kvT_sp7WC0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/wm/-$$Lambda$WindowTracing$lz89IHzR4nKO_ZtXtwyNGkRleMY;-><init>(Lcom/android/server/wm/WindowTracing;)V
 HSPLcom/android/server/wm/-$$Lambda$Z9QEXZevRsInPMEXX0zFWg8YGMQ;-><init>(Lcom/android/server/wm/RecentTasks;)V
 PLcom/android/server/wm/-$$Lambda$Z9QEXZevRsInPMEXX0zFWg8YGMQ;->run()V
-PLcom/android/server/wm/-$$Lambda$_-mEZ6EASUAbbjgZj87dfvxRN64;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$_-mEZ6EASUAbbjgZj87dfvxRN64;-><init>()V
-PLcom/android/server/wm/-$$Lambda$_-mEZ6EASUAbbjgZj87dfvxRN64;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$_jL5KNK44AQYPj1d8Hd3FYO0W-M;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$_jL5KNK44AQYPj1d8Hd3FYO0W-M;-><init>()V
-PLcom/android/server/wm/-$$Lambda$_jL5KNK44AQYPj1d8Hd3FYO0W-M;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$_-mEZ6EASUAbbjgZj87dfvxRN64;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$_-mEZ6EASUAbbjgZj87dfvxRN64;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$_-mEZ6EASUAbbjgZj87dfvxRN64;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$_jL5KNK44AQYPj1d8Hd3FYO0W-M;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$_jL5KNK44AQYPj1d8Hd3FYO0W-M;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$_jL5KNK44AQYPj1d8Hd3FYO0W-M;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$cJE-iQ28Rv-ThCcuht9wXeFzPgo;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$cJE-iQ28Rv-ThCcuht9wXeFzPgo;-><init>()V
 HSPLcom/android/server/wm/-$$Lambda$cJE-iQ28Rv-ThCcuht9wXeFzPgo;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$dwJG8BAnLlvKNGuDY9U3-haNY4M;-><init>(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/-$$Lambda$dwJG8BAnLlvKNGuDY9U3-haNY4M;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
 PLcom/android/server/wm/-$$Lambda$h-x5kpt7iRsCHGk24gs4Sab2qLw;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$h-x5kpt7iRsCHGk24gs4Sab2qLw;-><init>()V
+PLcom/android/server/wm/-$$Lambda$h-x5kpt7iRsCHGk24gs4Sab2qLw;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/wm/-$$Lambda$hD1GQddqK6sJaBtwVBGHwmleilc;-><init>(Ljava/util/ArrayList;)V
-PLcom/android/server/wm/-$$Lambda$hD1GQddqK6sJaBtwVBGHwmleilc;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$hT1kyMEAhvB1-Uxr0DFAlnuU3cQ;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$hT1kyMEAhvB1-Uxr0DFAlnuU3cQ;-><init>()V
-PLcom/android/server/wm/-$$Lambda$hT1kyMEAhvB1-Uxr0DFAlnuU3cQ;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$hD1GQddqK6sJaBtwVBGHwmleilc;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$hT1kyMEAhvB1-Uxr0DFAlnuU3cQ;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$hT1kyMEAhvB1-Uxr0DFAlnuU3cQ;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$hT1kyMEAhvB1-Uxr0DFAlnuU3cQ;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$hwQLWout8wOWvnHXCxS5LJZGGvw;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$hwQLWout8wOWvnHXCxS5LJZGGvw;-><init>()V
+PLcom/android/server/wm/-$$Lambda$hwQLWout8wOWvnHXCxS5LJZGGvw;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/wm/-$$Lambda$iQxeP_PsHHArcPSFabJ3FXyPKNc;-><init>(Lcom/android/server/wm/WindowManagerService$SettingsObserver;)V
 HSPLcom/android/server/wm/-$$Lambda$iQxeP_PsHHArcPSFabJ3FXyPKNc;->run()V
 HSPLcom/android/server/wm/-$$Lambda$ibmQVLjaQW2x74Wk8TcE0Og2MJM;-><clinit>()V
@@ -19896,60 +33535,149 @@
 PLcom/android/server/wm/-$$Lambda$j9nJq2XXOKyN4f0dfDaTjqmQRvg;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$j9nJq2XXOKyN4f0dfDaTjqmQRvg;-><init>()V
 PLcom/android/server/wm/-$$Lambda$j9nJq2XXOKyN4f0dfDaTjqmQRvg;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$ju_KnYxEFekr6LzoWamCeaO5FHQ;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/-$$Lambda$ju_KnYxEFekr6LzoWamCeaO5FHQ;->binderDied()V
 PLcom/android/server/wm/-$$Lambda$lnLU7X2Jo6KLxEmrQlMdzuxHhJA;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$lnLU7X2Jo6KLxEmrQlMdzuxHhJA;-><init>()V
 PLcom/android/server/wm/-$$Lambda$lnLU7X2Jo6KLxEmrQlMdzuxHhJA;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$oZvG727evJMxIwK1im7QJjcltfo;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$oZvG727evJMxIwK1im7QJjcltfo;-><init>()V
 PLcom/android/server/wm/-$$Lambda$oZvG727evJMxIwK1im7QJjcltfo;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$pAuPvwUqsKCejIrAPrx0ARZSqeY;-><init>(Lcom/android/server/wm/PersisterQueue$WriteQueueItem;)V
+HPLcom/android/server/wm/-$$Lambda$pAuPvwUqsKCejIrAPrx0ARZSqeY;-><init>(Lcom/android/server/wm/PersisterQueue$WriteQueueItem;)V
 PLcom/android/server/wm/-$$Lambda$pAuPvwUqsKCejIrAPrx0ARZSqeY;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/-$$Lambda$qMFJUmfG50ZSjk7Tac67xBia0d4;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$qMFJUmfG50ZSjk7Tac67xBia0d4;-><init>()V
-PLcom/android/server/wm/-$$Lambda$qMFJUmfG50ZSjk7Tac67xBia0d4;->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/-$$Lambda$qMFJUmfG50ZSjk7Tac67xBia0d4;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$qMFJUmfG50ZSjk7Tac67xBia0d4;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$qMFJUmfG50ZSjk7Tac67xBia0d4;->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/-$$Lambda$swA_sUfSJdP8eC8AA9Iby3-SuOY;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$swA_sUfSJdP8eC8AA9Iby3-SuOY;-><init>()V
 HSPLcom/android/server/wm/-$$Lambda$swA_sUfSJdP8eC8AA9Iby3-SuOY;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$uwO6wQlqU3CG7OTdH7NBCKnHs64;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$uwO6wQlqU3CG7OTdH7NBCKnHs64;-><init>()V
-PLcom/android/server/wm/-$$Lambda$uwO6wQlqU3CG7OTdH7NBCKnHs64;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/-$$Lambda$x6Ib5GIrsWZg48HsPUVGxKBQJS4;-><clinit>()V
-PLcom/android/server/wm/-$$Lambda$x6Ib5GIrsWZg48HsPUVGxKBQJS4;-><init>()V
-PLcom/android/server/wm/-$$Lambda$x6Ib5GIrsWZg48HsPUVGxKBQJS4;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$uwO6wQlqU3CG7OTdH7NBCKnHs64;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$$Lambda$vhwCX-wzYksBgFM46tASKUCeQRc;-><clinit>()V
+PLcom/android/server/wm/-$$Lambda$vhwCX-wzYksBgFM46tASKUCeQRc;-><init>()V
+HPLcom/android/server/wm/-$$Lambda$vhwCX-wzYksBgFM46tASKUCeQRc;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/-$$Lambda$x6Ib5GIrsWZg48HsPUVGxKBQJS4;-><clinit>()V
+HSPLcom/android/server/wm/-$$Lambda$x6Ib5GIrsWZg48HsPUVGxKBQJS4;-><init>()V
+HSPLcom/android/server/wm/-$$Lambda$x6Ib5GIrsWZg48HsPUVGxKBQJS4;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/-$$Lambda$yACUZqn1Ak-GL14-Nu3kHUSaLX0;-><clinit>()V
 HSPLcom/android/server/wm/-$$Lambda$yACUZqn1Ak-GL14-Nu3kHUSaLX0;-><init>()V
 PLcom/android/server/wm/-$$Lambda$yACUZqn1Ak-GL14-Nu3kHUSaLX0;->startAnimation(Lcom/android/server/wm/SurfaceAnimator;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;Z)V
 HSPLcom/android/server/wm/-$$Lambda$yVRF8YoeNdTa8GR1wDStVsHu8xM;-><init>(Lcom/android/server/wm/WindowContainer;)V
-PLcom/android/server/wm/-$$Lambda$yVRF8YoeNdTa8GR1wDStVsHu8xM;->run()V
+HPLcom/android/server/wm/-$$Lambda$yVRF8YoeNdTa8GR1wDStVsHu8xM;->run()V
 PLcom/android/server/wm/-$$Lambda$z5j5fiv3cZuY5AODkt3H3rhKimk;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$z5j5fiv3cZuY5AODkt3H3rhKimk;-><init>()V
 PLcom/android/server/wm/-$$Lambda$z5j5fiv3cZuY5AODkt3H3rhKimk;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$zP5AObb0-v-Zzwr-v8NXOg4Yt1c;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$zP5AObb0-v-Zzwr-v8NXOg4Yt1c;-><init>()V
-PLcom/android/server/wm/-$$Lambda$zP5AObb0-v-Zzwr-v8NXOg4Yt1c;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$$Lambda$zP5AObb0-v-Zzwr-v8NXOg4Yt1c;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/-$$Lambda$zuO3rEvETpKsuJLTTdIHB2ijeho;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$zuO3rEvETpKsuJLTTdIHB2ijeho;-><init>()V
 HPLcom/android/server/wm/-$$Lambda$zuO3rEvETpKsuJLTTdIHB2ijeho;->apply(Ljava/lang/Object;)Z
 PLcom/android/server/wm/-$$Lambda$zwLNi4Hz7werGBGptK8eYRpBWpw;-><clinit>()V
 PLcom/android/server/wm/-$$Lambda$zwLNi4Hz7werGBGptK8eYRpBWpw;-><init>()V
-PLcom/android/server/wm/-$$Lambda$zwLNi4Hz7werGBGptK8eYRpBWpw;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;-><init>()V
-PLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->access$000(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;)J
-PLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->access$002(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;J)J
-PLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->access$100(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
-PLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->access$102(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
-HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;IZZ)V
-HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->allDrawn()Z
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->calculateCurrentDelay()I
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->calculateDelay(J)I
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->contains(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->create(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;ZZI)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->isInterestingToLoggerAndObserver()Z
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->removePendingDrawActivity(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->setLatestLaunchedActivity(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityMetricsLogger$1;)V
-HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityRecord;I)V
+HPLcom/android/server/wm/-$$Lambda$zwLNi4Hz7werGBGptK8eYRpBWpw;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow$AnimationController;-><init>(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;Landroid/content/Context;Landroid/os/Looper;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;-><init>(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;Landroid/content/Context;)V
+HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;->drawIfNeeded(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;->invalidate(Landroid/graphics/Rect;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;->releaseSurface()V
+HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;->setBounds(Landroid/graphics/Region;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;->setShown(ZZ)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;->updateSize(Landroid/view/SurfaceControl$Transaction;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;-><init>(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->access$1200(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;)Landroid/graphics/Point;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->access$1300(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;)F
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->access$1400(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;)Landroid/view/WindowManager;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->destroyWindow()V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->drawWindowIfNeededLocked(Landroid/view/SurfaceControl$Transaction;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->getLetterboxBounds(Lcom/android/server/wm/WindowState;)Landroid/graphics/Region;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->getMagnificationRegionLocked(Landroid/graphics/Region;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->getMagnificationSpecLocked()Landroid/view/MagnificationSpec;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->isMagnifyingLocked()Z
+HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->lambda$populateWindowsOnScreenLocked$0$AccessibilityController$DisplayMagnifier$MagnifiedViewport(Landroid/util/SparseArray;Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->onRotationChangedLocked(Landroid/view/SurfaceControl$Transaction;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->populateWindowsOnScreenLocked(Landroid/util/SparseArray;)V
+HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->recomputeBoundsLocked()V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->setMagnifiedRegionBorderShownLocked(ZZ)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->updateMagnificationSpecLocked(Landroid/view/MagnificationSpec;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MyHandler;-><init>(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;Landroid/os/Looper;)V
+HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MyHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;Landroid/view/Display;Lcom/android/server/wm/WindowManagerInternal$MagnificationCallbacks;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->access$000(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)Landroid/content/Context;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->access$100(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)Landroid/view/Display;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->access$1000(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)Lcom/android/server/wm/WindowManagerService;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->access$1100(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)Lcom/android/server/wm/DisplayContent;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->access$1600(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)Lcom/android/server/wm/WindowManagerInternal$MagnificationCallbacks;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->access$200(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)Landroid/os/Handler;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->access$300(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)Landroid/graphics/Region;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->access$400(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)Landroid/graphics/Region;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->access$600(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)Landroid/graphics/Region;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->access$700(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)Landroid/graphics/Rect;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->access$800(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)Landroid/graphics/Region;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->destroyLocked()V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->drawMagnifiedRegionBorderIfNeededLocked(Landroid/view/SurfaceControl$Transaction;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->getMagnificationRegionLocked(Landroid/graphics/Region;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->getMagnificationSpecForWindowLocked(Lcom/android/server/wm/WindowState;)Landroid/view/MagnificationSpec;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->isForceShowingMagnifiableBoundsLocked()Z
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->onAppWindowTransitionLocked(II)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->onRectangleOnScreenRequestedLocked(Landroid/graphics/Rect;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->onRotationChangedLocked(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->onWindowTransitionLocked(Lcom/android/server/wm/WindowState;I)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->setMagnificationSpecLocked(Landroid/view/MagnificationSpec;)V
+PLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver$MyHandler;-><init>(Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;Landroid/os/Looper;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver$MyHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;-><init>(Lcom/android/server/wm/WindowManagerService;ILcom/android/server/wm/WindowManagerInternal$WindowsForAccessibilityCallback;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->addPopulatedWindowInfo(Lcom/android/server/wm/WindowState;Landroid/graphics/Region;Ljava/util/List;Ljava/util/Set;)V
+PLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->clearAndRecycleWindows(Ljava/util/List;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->computeChangedWindows(Z)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->computeWindowRegionInScreen(Lcom/android/server/wm/WindowState;Landroid/graphics/Region;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->findRootDisplayParentWindow(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->getTopFocusWindow()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->isReportedWindowType(I)Z
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->lambda$computeWindowRegionInScreen$0$AccessibilityController$WindowsForAccessibilityObserver(Lcom/android/server/wm/WindowState;Landroid/graphics/Matrix;Landroid/graphics/Region;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->lambda$populateVisibleWindowsOnScreenLocked$1(Ljava/util/List;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->lambda$populateVisibleWindowsOnScreenLocked$2$AccessibilityController$WindowsForAccessibilityObserver(Ljava/util/List;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->performComputeChangedWindowsNotLocked(Z)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->populateVisibleWindowsOnScreenLocked(Landroid/util/SparseArray;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->scheduleComputeChangedWindowsLocked()V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->updateUnaccountedSpace(Lcom/android/server/wm/WindowState;Landroid/graphics/Region;Landroid/graphics/Region;Ljava/util/HashSet;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->windowMattersToAccessibility(Lcom/android/server/wm/WindowState;Landroid/graphics/Region;Landroid/graphics/Region;Ljava/util/HashSet;)Z
+PLcom/android/server/wm/AccessibilityController;-><clinit>()V
+PLcom/android/server/wm/AccessibilityController;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/AccessibilityController;->access$500(Lcom/android/server/wm/WindowState;Landroid/graphics/Matrix;)V
+HPLcom/android/server/wm/AccessibilityController;->drawMagnifiedRegionBorderIfNeededLocked(ILandroid/view/SurfaceControl$Transaction;)V
+PLcom/android/server/wm/AccessibilityController;->getMagnificationRegionLocked(ILandroid/graphics/Region;)V
+HPLcom/android/server/wm/AccessibilityController;->getMagnificationSpecForWindowLocked(Lcom/android/server/wm/WindowState;)Landroid/view/MagnificationSpec;
+PLcom/android/server/wm/AccessibilityController;->hasCallbacksLocked()Z
+HPLcom/android/server/wm/AccessibilityController;->onAppWindowTransitionLocked(II)V
+HPLcom/android/server/wm/AccessibilityController;->onRectangleOnScreenRequestedLocked(ILandroid/graphics/Rect;)V
+PLcom/android/server/wm/AccessibilityController;->onRotationChangedLocked(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/AccessibilityController;->onSomeWindowResizedOrMovedLocked([I)V
+HPLcom/android/server/wm/AccessibilityController;->onWindowFocusChangedNotLocked(I)V
+HPLcom/android/server/wm/AccessibilityController;->onWindowTransitionLocked(Lcom/android/server/wm/WindowState;I)V
+HPLcom/android/server/wm/AccessibilityController;->performComputeChangedWindowsNotLocked(IZ)V
+PLcom/android/server/wm/AccessibilityController;->populateTransformationMatrixLocked(Lcom/android/server/wm/WindowState;Landroid/graphics/Matrix;)V
+PLcom/android/server/wm/AccessibilityController;->setMagnificationCallbacksLocked(ILcom/android/server/wm/WindowManagerInternal$MagnificationCallbacks;)Z
+PLcom/android/server/wm/AccessibilityController;->setMagnificationSpecLocked(ILandroid/view/MagnificationSpec;)V
+PLcom/android/server/wm/AccessibilityController;->setWindowsForAccessibilityCallbackLocked(ILcom/android/server/wm/WindowManagerInternal$WindowsForAccessibilityCallback;)Z
+HSPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;-><init>()V
+HSPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->access$000(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;)J
+HSPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->access$002(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;J)J
+HSPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->access$100(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
+HSPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->access$102(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;IZZ)V
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->allDrawn()Z
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->calculateCurrentDelay()I
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->calculateDelay(J)I
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->contains(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->create(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;ZZI)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->isInterestingToLoggerAndObserver()Z
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->removePendingDrawActivity(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->setLatestLaunchedActivity(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityMetricsLogger$1;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityRecord;I)V
 PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/ActivityMetricsLogger$1;)V
 PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->access$1100(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)Lcom/android/server/wm/WindowProcessController;
 PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->access$1200(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)Ljava/lang/String;
@@ -19960,745 +33688,973 @@
 PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->access$700(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)I
 PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->access$800(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)I
 PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->access$900(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)Ljava/lang/String;
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->getLaunchState()I
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->getLaunchState()I
 HSPLcom/android/server/wm/ActivityMetricsLogger;-><clinit>()V
 HSPLcom/android/server/wm/ActivityMetricsLogger;-><init>(Lcom/android/server/wm/ActivityStackSupervisor;Landroid/os/Looper;)V
 PLcom/android/server/wm/ActivityMetricsLogger;->abort(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Ljava/lang/String;)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->checkVisibility(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->convertActivityRecordToProto(Lcom/android/server/wm/ActivityRecord;)[B
+HSPLcom/android/server/wm/ActivityMetricsLogger;->checkVisibility(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->convertActivityRecordToProto(Lcom/android/server/wm/ActivityRecord;)[B
 PLcom/android/server/wm/ActivityMetricsLogger;->convertAppStartTransitionType(I)I
-PLcom/android/server/wm/ActivityMetricsLogger;->convertTransitionTypeToLaunchObserverTemperature(I)I
+HSPLcom/android/server/wm/ActivityMetricsLogger;->convertTransitionTypeToLaunchObserverTemperature(I)I
 HPLcom/android/server/wm/ActivityMetricsLogger;->done(ZLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Ljava/lang/String;J)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->getActiveTransitionInfo(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
+HSPLcom/android/server/wm/ActivityMetricsLogger;->getActiveTransitionInfo(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
 PLcom/android/server/wm/ActivityMetricsLogger;->getArtManagerInternal()Landroid/content/pm/dex/ArtManagerInternal;
-PLcom/android/server/wm/ActivityMetricsLogger;->getLastDrawnDelayMs(Lcom/android/server/wm/ActivityRecord;)I
+HSPLcom/android/server/wm/ActivityMetricsLogger;->getLastDrawnDelayMs(Lcom/android/server/wm/ActivityRecord;)I
 HSPLcom/android/server/wm/ActivityMetricsLogger;->getLaunchObserverRegistry()Lcom/android/server/wm/ActivityMetricsLaunchObserverRegistry;
-PLcom/android/server/wm/ActivityMetricsLogger;->hasActivityToBeDrawn(Lcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/ActivityMetricsLogger;->lambda$9gqV7SOtv0dBXWMri6Jpu47OdLc(Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->lambda$hasActivityToBeDrawn$0(Lcom/android/server/wm/ActivityRecord;)Ljava/lang/Boolean;
-PLcom/android/server/wm/ActivityMetricsLogger;->lambda$logAppTransitionFinished$1$ActivityMetricsLogger(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->lambda$logAppTransitionFinished$2$ActivityMetricsLogger(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->hasActivityToBeDrawn(Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/ActivityMetricsLogger;->lambda$9gqV7SOtv0dBXWMri6Jpu47OdLc(Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->lambda$hasActivityToBeDrawn$0(Lcom/android/server/wm/ActivityRecord;)Ljava/lang/Boolean;
+HPLcom/android/server/wm/ActivityMetricsLogger;->lambda$logAppTransitionFinished$1$ActivityMetricsLogger(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->lambda$logAppTransitionFinished$2$ActivityMetricsLogger(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
 PLcom/android/server/wm/ActivityMetricsLogger;->lambda$logAppTransitionReportedDrawn$3$ActivityMetricsLogger(Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
 PLcom/android/server/wm/ActivityMetricsLogger;->lambda$logAppTransitionReportedDrawn$4$ActivityMetricsLogger(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
 PLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyActivityLaunchCancelled(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyActivityLaunchFinished(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;J)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyActivityLaunched(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyIntentFailed()V
-HPLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyIntentStarted(Landroid/content/Intent;J)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyActivityLaunched(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyIntentFailed()V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyIntentStarted(Landroid/content/Intent;J)V
 PLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyReportFullyDrawn(Lcom/android/server/wm/ActivityRecord;J)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->logAbortedBgActivityStart(Landroid/content/Intent;Lcom/android/server/wm/WindowProcessController;ILjava/lang/String;IZIIZZ)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->logAppDisplayed(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->logAppFullyDrawn(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->logAppFullyDrawn(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->logAppStartMemoryStateCapture(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->logAppTransition(IILcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->logAppTransitionCancel(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->logAppTransitionCancel(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->logAppTransitionFinished(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->logAppTransitionReportedDrawn(Lcom/android/server/wm/ActivityRecord;Z)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;
-PLcom/android/server/wm/ActivityMetricsLogger;->logWindowState()V
-HPLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunched(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;ILcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunching(Landroid/content/Intent;)Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;
-PLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunching(Landroid/content/Intent;Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;
-HPLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunching(Landroid/content/Intent;Lcom/android/server/wm/ActivityRecord;I)Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;
-PLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityRemoved(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->logAppTransitionReportedDrawn(Lcom/android/server/wm/ActivityRecord;Z)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;
+HPLcom/android/server/wm/ActivityMetricsLogger;->logWindowState()V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunched(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;ILcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunching(Landroid/content/Intent;)Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;
+HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunching(Landroid/content/Intent;Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;
+HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunching(Landroid/content/Intent;Lcom/android/server/wm/ActivityRecord;I)Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;
+HPLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityRemoved(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyBindApplication(Landroid/content/pm/ApplicationInfo;)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->notifyTransitionStarting(Landroid/util/ArrayMap;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->notifyVisibilityChanged(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->notifyWindowsDrawn(Lcom/android/server/wm/ActivityRecord;J)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;
-PLcom/android/server/wm/ActivityMetricsLogger;->startLaunchTrace(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->stopLaunchTrace(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->notifyStartingWindowDrawn(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyTransitionStarting(Landroid/util/ArrayMap;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyVisibilityChanged(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyWindowsDrawn(Lcom/android/server/wm/ActivityRecord;J)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;
+HSPLcom/android/server/wm/ActivityMetricsLogger;->startLaunchTrace(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->stopLaunchTrace(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
 PLcom/android/server/wm/ActivityRecord$1;-><clinit>()V
-PLcom/android/server/wm/ActivityRecord$AddStartingWindow;-><init>(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityRecord$AddStartingWindow;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord$1;)V
-PLcom/android/server/wm/ActivityRecord$AddStartingWindow;->run()V
-PLcom/android/server/wm/ActivityRecord$CompatDisplayInsets;-><init>(Lcom/android/server/wm/DisplayContent;Landroid/graphics/Rect;Z)V
+HSPLcom/android/server/wm/ActivityRecord$1;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityRecord$1;->run()V
+HSPLcom/android/server/wm/ActivityRecord$2;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityRecord$2;->run()V
+HSPLcom/android/server/wm/ActivityRecord$3;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/ActivityRecord$3;->run()V
+HSPLcom/android/server/wm/ActivityRecord$4;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/ActivityRecord$4;->run()V
+PLcom/android/server/wm/ActivityRecord$5;-><clinit>()V
+HSPLcom/android/server/wm/ActivityRecord$AddStartingWindow;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityRecord$AddStartingWindow;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord$1;)V
+HPLcom/android/server/wm/ActivityRecord$AddStartingWindow;->run()V
+PLcom/android/server/wm/ActivityRecord$AppSaturationInfo;-><init>()V
+PLcom/android/server/wm/ActivityRecord$AppSaturationInfo;-><init>(Lcom/android/server/wm/ActivityRecord$1;)V
+PLcom/android/server/wm/ActivityRecord$AppSaturationInfo;->setSaturation([F[F)V
+HPLcom/android/server/wm/ActivityRecord$CompatDisplayInsets;-><init>(Lcom/android/server/wm/DisplayContent;Landroid/graphics/Rect;Z)V
 HPLcom/android/server/wm/ActivityRecord$CompatDisplayInsets;->getDisplayBoundsByRotation(Landroid/graphics/Rect;I)V
 HPLcom/android/server/wm/ActivityRecord$CompatDisplayInsets;->getFrameByOrientation(Landroid/graphics/Rect;I)V
-PLcom/android/server/wm/ActivityRecord$Token;-><init>(Landroid/content/Intent;)V
+HSPLcom/android/server/wm/ActivityRecord$Token;-><init>(Landroid/content/Intent;)V
 PLcom/android/server/wm/ActivityRecord$Token;->access$000(Lcom/android/server/wm/ActivityRecord$Token;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord$Token;->access$100(Lcom/android/server/wm/ActivityRecord$Token;)Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityRecord$Token;->access$100(Lcom/android/server/wm/ActivityRecord$Token;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityRecord$Token;->attach(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityRecord$Token;->getName()Ljava/lang/String;
-PLcom/android/server/wm/ActivityRecord$Token;->toString()Ljava/lang/String;
-PLcom/android/server/wm/ActivityRecord$Token;->tokenToActivityRecordLocked(Lcom/android/server/wm/ActivityRecord$Token;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/ActivityRecord;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/WindowProcessController;IILjava/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/ActivityStackSupervisor;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityRecord;->activityResumedLocked(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/ActivityRecord$Token;->access$200(Lcom/android/server/wm/ActivityRecord$Token;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityRecord$Token;->attach(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityRecord$Token;->getName()Ljava/lang/String;
+HPLcom/android/server/wm/ActivityRecord$Token;->toString()Ljava/lang/String;
+HSPLcom/android/server/wm/ActivityRecord$Token;->tokenToActivityRecordLocked(Lcom/android/server/wm/ActivityRecord$Token;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/WindowProcessController;IILjava/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/ActivityStackSupervisor;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/ActivityRecord;->access$000(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/ActivityRecord;->activityPaused(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->activityResumedLocked(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityRecord;->activityStopped(Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/lang/CharSequence;)V
 PLcom/android/server/wm/ActivityRecord;->activityStoppedLocked(Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/lang/CharSequence;)V
-PLcom/android/server/wm/ActivityRecord;->addResultLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;IILandroid/content/Intent;)V
-PLcom/android/server/wm/ActivityRecord;->addStartingWindow(Ljava/lang/String;ILandroid/content/res/CompatibilityInfo;Ljava/lang/CharSequence;IIIILandroid/os/IBinder;ZZZZZZ)Z
-PLcom/android/server/wm/ActivityRecord;->addToFinishingAndWaitForIdle()Z
-PLcom/android/server/wm/ActivityRecord;->addToStopping(ZZLjava/lang/String;)V
-PLcom/android/server/wm/ActivityRecord;->addWindow(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/ActivityRecord;->allDrawnStatesConsidered()Z
-PLcom/android/server/wm/ActivityRecord;->allowMoveToFront()Z
-PLcom/android/server/wm/ActivityRecord;->allowTaskSnapshot()Z
-PLcom/android/server/wm/ActivityRecord;->applyAnimation(Landroid/view/WindowManager$LayoutParams;IZZ)Z
-HPLcom/android/server/wm/ActivityRecord;->applyAspectRatio(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/ActivityRecord;->applyOptionsLocked()V
-PLcom/android/server/wm/ActivityRecord;->applyOptionsLocked(Landroid/app/ActivityOptions;Landroid/content/Intent;)V
-PLcom/android/server/wm/ActivityRecord;->asActivityRecord()Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/ActivityRecord;->attachedToProcess()Z
+HPLcom/android/server/wm/ActivityRecord;->addNewIntentLocked(Lcom/android/internal/content/ReferrerIntent;)V
+HPLcom/android/server/wm/ActivityRecord;->addResultLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;IILandroid/content/Intent;)V
+HSPLcom/android/server/wm/ActivityRecord;->addStartingWindow(Ljava/lang/String;ILandroid/content/res/CompatibilityInfo;Ljava/lang/CharSequence;IIIILandroid/os/IBinder;ZZZZZZ)Z
+HPLcom/android/server/wm/ActivityRecord;->addToFinishingAndWaitForIdle()Z
+HPLcom/android/server/wm/ActivityRecord;->addToStopping(ZZLjava/lang/String;)V
+HSPLcom/android/server/wm/ActivityRecord;->addWindow(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/ActivityRecord;->allDrawnStatesConsidered()Z
+HSPLcom/android/server/wm/ActivityRecord;->allowMoveToFront()Z
+HSPLcom/android/server/wm/ActivityRecord;->allowTaskSnapshot()Z
+HPLcom/android/server/wm/ActivityRecord;->applyAnimation(Landroid/view/WindowManager$LayoutParams;IZZ)Z
+PLcom/android/server/wm/ActivityRecord;->applyAnimation(Landroid/view/WindowManager$LayoutParams;IZZLcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)Z
+PLcom/android/server/wm/ActivityRecord;->applyAnimation(Landroid/view/WindowManager$LayoutParams;IZZLjava/lang/Runnable;)Z
+HSPLcom/android/server/wm/ActivityRecord;->applyAspectRatio(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/ActivityRecord;->applyOptionsLocked()V
+HSPLcom/android/server/wm/ActivityRecord;->applyOptionsLocked(Landroid/app/ActivityOptions;Landroid/content/Intent;)V
+HSPLcom/android/server/wm/ActivityRecord;->asActivityRecord()Lcom/android/server/wm/ActivityRecord;
+PLcom/android/server/wm/ActivityRecord;->attachCrossProfileAppsThumbnailAnimation()V
+PLcom/android/server/wm/ActivityRecord;->attachThumbnailAnimation()V
+HSPLcom/android/server/wm/ActivityRecord;->attachedToProcess()Z
 HPLcom/android/server/wm/ActivityRecord;->calculateCompatBoundsTransformation(Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/ActivityRecord;->canBeLaunchedOnDisplay(I)Z
-HPLcom/android/server/wm/ActivityRecord;->canBeTopRunning()Z
+HSPLcom/android/server/wm/ActivityRecord;->canBeLaunchedOnDisplay(I)Z
+HSPLcom/android/server/wm/ActivityRecord;->canBeTopRunning()Z
+PLcom/android/server/wm/ActivityRecord;->canLaunchAssistActivity(Ljava/lang/String;)Z
 PLcom/android/server/wm/ActivityRecord;->canLaunchHomeActivity(ILcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityRecord;->canResumeByCompat()Z
-HPLcom/android/server/wm/ActivityRecord;->canShowWhenLocked()Z
-PLcom/android/server/wm/ActivityRecord;->canShowWindows()Z
-PLcom/android/server/wm/ActivityRecord;->canTurnScreenOn()Z
-PLcom/android/server/wm/ActivityRecord;->cancelAnimation()V
+HSPLcom/android/server/wm/ActivityRecord;->canResumeByCompat()Z
+HSPLcom/android/server/wm/ActivityRecord;->canShowWhenLocked()Z
+HSPLcom/android/server/wm/ActivityRecord;->canShowWindows()Z
+HSPLcom/android/server/wm/ActivityRecord;->canTurnScreenOn()Z
+HPLcom/android/server/wm/ActivityRecord;->cancelAnimation()V
 PLcom/android/server/wm/ActivityRecord;->cancelAnimationOnly()V
 HPLcom/android/server/wm/ActivityRecord;->cancelInitializing()V
-HPLcom/android/server/wm/ActivityRecord;->checkAppWindowsReadyToShow()V
-HPLcom/android/server/wm/ActivityRecord;->checkCompleteDeferredRemoval()Z
-PLcom/android/server/wm/ActivityRecord;->checkEnterPictureInPictureState(Ljava/lang/String;Z)Z
-PLcom/android/server/wm/ActivityRecord;->checkKeyguardFlagsChanged()V
+HSPLcom/android/server/wm/ActivityRecord;->checkAppWindowsReadyToShow()V
+HSPLcom/android/server/wm/ActivityRecord;->checkCompleteDeferredRemoval()Z
+HPLcom/android/server/wm/ActivityRecord;->checkEnterPictureInPictureAppOpsState()Z
+HPLcom/android/server/wm/ActivityRecord;->checkEnterPictureInPictureState(Ljava/lang/String;Z)Z
+HSPLcom/android/server/wm/ActivityRecord;->checkKeyguardFlagsChanged()V
 HPLcom/android/server/wm/ActivityRecord;->cleanUp(ZZ)V
 PLcom/android/server/wm/ActivityRecord;->cleanUpActivityServices()V
-PLcom/android/server/wm/ActivityRecord;->clearAllDrawn()V
-PLcom/android/server/wm/ActivityRecord;->clearAnimatingFlags()V
-PLcom/android/server/wm/ActivityRecord;->clearChangeLeash(Landroid/view/SurfaceControl$Transaction;Z)V
-PLcom/android/server/wm/ActivityRecord;->clearOptionsLocked()V
-PLcom/android/server/wm/ActivityRecord;->clearOptionsLocked(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->clearAllDrawn()V
+HPLcom/android/server/wm/ActivityRecord;->clearAnimatingFlags()V
+HPLcom/android/server/wm/ActivityRecord;->clearChangeLeash(Landroid/view/SurfaceControl$Transaction;Z)V
+HPLcom/android/server/wm/ActivityRecord;->clearOptionsLocked()V
+HSPLcom/android/server/wm/ActivityRecord;->clearOptionsLocked(Z)V
 PLcom/android/server/wm/ActivityRecord;->clearRelaunching()V
-PLcom/android/server/wm/ActivityRecord;->clearThumbnail()V
-HPLcom/android/server/wm/ActivityRecord;->commitVisibility(ZZ)V
-PLcom/android/server/wm/ActivityRecord;->completeFinishing(Ljava/lang/String;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/ActivityRecord;->completeResumeLocked()V
-HPLcom/android/server/wm/ActivityRecord;->containsDismissKeyguardWindow()Z
-HPLcom/android/server/wm/ActivityRecord;->containsShowWhenLockedWindow()Z
+HSPLcom/android/server/wm/ActivityRecord;->clearThumbnail()V
+HSPLcom/android/server/wm/ActivityRecord;->commitVisibility(ZZ)V
+HPLcom/android/server/wm/ActivityRecord;->completeFinishing(Ljava/lang/String;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->completeResumeLocked()V
+HSPLcom/android/server/wm/ActivityRecord;->containsDismissKeyguardWindow()Z
+HSPLcom/android/server/wm/ActivityRecord;->containsShowWhenLockedWindow()Z
+HSPLcom/android/server/wm/ActivityRecord;->containsTurnScreenOnWindow()Z
+HSPLcom/android/server/wm/ActivityRecord;->continueLaunchTicking()Z
 PLcom/android/server/wm/ActivityRecord;->continueLaunchTickingLocked()Z
-PLcom/android/server/wm/ActivityRecord;->createAnimationBoundsLayer(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/ActivityRecord;->createAnimationBoundsLayer(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/ActivityRecord;->createImageFilename(JI)Ljava/lang/String;
 HPLcom/android/server/wm/ActivityRecord;->createRemoteAnimationTarget(Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;)Landroid/view/RemoteAnimationTarget;
-PLcom/android/server/wm/ActivityRecord;->createSnapshot(Landroid/app/ActivityManager$TaskSnapshot;)Z
+HPLcom/android/server/wm/ActivityRecord;->createSnapshot(Landroid/app/ActivityManager$TaskSnapshot;)Z
 PLcom/android/server/wm/ActivityRecord;->crossesHorizontalSizeThreshold(II)Z
 PLcom/android/server/wm/ActivityRecord;->crossesSizeThreshold([III)Z
+PLcom/android/server/wm/ActivityRecord;->crossesSmallestSizeThreshold(II)Z
 PLcom/android/server/wm/ActivityRecord;->crossesVerticalSizeThreshold(II)Z
-PLcom/android/server/wm/ActivityRecord;->deliverNewIntentLocked(ILandroid/content/Intent;Ljava/lang/String;)V
+PLcom/android/server/wm/ActivityRecord;->currentLaunchCanTurnScreenOn()Z
+HPLcom/android/server/wm/ActivityRecord;->deliverNewIntentLocked(ILandroid/content/Intent;Ljava/lang/String;)V
 HPLcom/android/server/wm/ActivityRecord;->destroyIfPossible(Ljava/lang/String;)Z
 HPLcom/android/server/wm/ActivityRecord;->destroyImmediately(ZLjava/lang/String;)Z
-PLcom/android/server/wm/ActivityRecord;->destroySurfaces()V
-PLcom/android/server/wm/ActivityRecord;->destroySurfaces(Z)V
-PLcom/android/server/wm/ActivityRecord;->destroyed(Ljava/lang/String;)V
-PLcom/android/server/wm/ActivityRecord;->detachChildren()V
+HPLcom/android/server/wm/ActivityRecord;->destroySurfaces()V
+HPLcom/android/server/wm/ActivityRecord;->destroySurfaces(Z)V
+HPLcom/android/server/wm/ActivityRecord;->destroyed(Ljava/lang/String;)V
+HPLcom/android/server/wm/ActivityRecord;->detachChildren()V
 HPLcom/android/server/wm/ActivityRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/ActivityRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/server/wm/ActivityRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLcom/android/server/wm/ActivityRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
-PLcom/android/server/wm/ActivityRecord;->ensureActivityConfiguration(IZ)Z
-PLcom/android/server/wm/ActivityRecord;->ensureActivityConfiguration(IZZ)Z
-HPLcom/android/server/wm/ActivityRecord;->fillsParent()Z
-PLcom/android/server/wm/ActivityRecord;->findMainWindow()Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/ActivityRecord;->findMainWindow(Z)Lcom/android/server/wm/WindowState;
-PLcom/android/server/wm/ActivityRecord;->finishActivityResults(ILandroid/content/Intent;)V
+HSPLcom/android/server/wm/ActivityRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/wm/ActivityRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;I)V
+HPLcom/android/server/wm/ActivityRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLcom/android/server/wm/ActivityRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HSPLcom/android/server/wm/ActivityRecord;->ensureActivityConfiguration(IZ)Z
+HSPLcom/android/server/wm/ActivityRecord;->ensureActivityConfiguration(IZZ)Z
+HSPLcom/android/server/wm/ActivityRecord;->fillsParent()Z
+HSPLcom/android/server/wm/ActivityRecord;->findMainWindow()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/ActivityRecord;->findMainWindow(Z)Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/ActivityRecord;->finishActivityResults(ILandroid/content/Intent;)V
 HPLcom/android/server/wm/ActivityRecord;->finishIfPossible(ILandroid/content/Intent;Ljava/lang/String;Z)I
 PLcom/android/server/wm/ActivityRecord;->finishIfPossible(Ljava/lang/String;Z)I
-PLcom/android/server/wm/ActivityRecord;->finishLaunchTickingLocked()V
-HPLcom/android/server/wm/ActivityRecord;->forAllActivities(Ljava/util/function/Consumer;Z)V
-HPLcom/android/server/wm/ActivityRecord;->forAllActivities(Ljava/util/function/Function;Z)Z
-HPLcom/android/server/wm/ActivityRecord;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
-PLcom/android/server/wm/ActivityRecord;->forAllWindowsUnchecked(Lcom/android/internal/util/ToBooleanFunction;Z)Z
-HPLcom/android/server/wm/ActivityRecord;->forTokenLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->getActivity(Ljava/util/function/Predicate;ZLcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/ActivityRecord;->getActivityStack()Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/ActivityRecord;->getAnimationBounds(I)Landroid/graphics/Rect;
-PLcom/android/server/wm/ActivityRecord;->getAnimationFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/ActivityRecord;->getAnimationLeashParent()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/ActivityRecord;->getAppAnimationLayer()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/ActivityRecord;->getBounds()Landroid/graphics/Rect;
-PLcom/android/server/wm/ActivityRecord;->getConfigurationChanges(Landroid/content/res/Configuration;)I
-HPLcom/android/server/wm/ActivityRecord;->getDisplay()Lcom/android/server/wm/DisplayContent;
-PLcom/android/server/wm/ActivityRecord;->getDisplayId()I
-HPLcom/android/server/wm/ActivityRecord;->getDisplayedBounds()Landroid/graphics/Rect;
-PLcom/android/server/wm/ActivityRecord;->getLetterboxInnerBounds(Landroid/graphics/Rect;)V
-PLcom/android/server/wm/ActivityRecord;->getLetterboxInsets()Landroid/graphics/Rect;
-HPLcom/android/server/wm/ActivityRecord;->getOrientation(I)I
-PLcom/android/server/wm/ActivityRecord;->getPersistentSavedState()Landroid/os/PersistableBundle;
-PLcom/android/server/wm/ActivityRecord;->getPid()I
+PLcom/android/server/wm/ActivityRecord;->finishIfSameAffinity(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/ActivityRecord;->finishIfSubActivity(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;I)V
+HSPLcom/android/server/wm/ActivityRecord;->finishLaunchTickingLocked()V
+PLcom/android/server/wm/ActivityRecord;->finishRelaunching()V
+HSPLcom/android/server/wm/ActivityRecord;->forAllActivities(Ljava/util/function/Consumer;Z)V
+HSPLcom/android/server/wm/ActivityRecord;->forAllActivities(Ljava/util/function/Function;Z)Z
+HSPLcom/android/server/wm/ActivityRecord;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HSPLcom/android/server/wm/ActivityRecord;->forAllWindowsUnchecked(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HSPLcom/android/server/wm/ActivityRecord;->forTokenLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
+PLcom/android/server/wm/ActivityRecord;->freezeBounds()V
+HSPLcom/android/server/wm/ActivityRecord;->getActivity(Ljava/util/function/Predicate;ZLcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->getActivityStack()Lcom/android/server/wm/ActivityStack;
+HPLcom/android/server/wm/ActivityRecord;->getAnimationBounds(I)Landroid/graphics/Rect;
+HPLcom/android/server/wm/ActivityRecord;->getAnimationFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/ActivityRecord;->getAnimationLeashParent()Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/ActivityRecord;->getAppAnimationLayer()Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/ActivityRecord;->getBounds()Landroid/graphics/Rect;
+HSPLcom/android/server/wm/ActivityRecord;->getConfigurationChanges(Landroid/content/res/Configuration;)I
+HSPLcom/android/server/wm/ActivityRecord;->getDisplay()Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/ActivityRecord;->getDisplayId()I
+HSPLcom/android/server/wm/ActivityRecord;->getDisplayedBounds()Landroid/graphics/Rect;
+PLcom/android/server/wm/ActivityRecord;->getHighestAnimLayerWindow(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/ActivityRecord;->getImeTargetBelowWindow(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/ActivityRecord;->getLetterboxInnerBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/ActivityRecord;->getLetterboxInsets()Landroid/graphics/Rect;
+HSPLcom/android/server/wm/ActivityRecord;->getLockTaskLaunchMode(Landroid/content/pm/ActivityInfo;Landroid/app/ActivityOptions;)I
+HSPLcom/android/server/wm/ActivityRecord;->getOrientation(I)I
+HSPLcom/android/server/wm/ActivityRecord;->getPersistentSavedState()Landroid/os/PersistableBundle;
+HPLcom/android/server/wm/ActivityRecord;->getPid()I
+HSPLcom/android/server/wm/ActivityRecord;->getProcessGlobalConfiguration()Landroid/content/res/Configuration;
 PLcom/android/server/wm/ActivityRecord;->getRemoteAnimationDefinition()Landroid/view/RemoteAnimationDefinition;
-PLcom/android/server/wm/ActivityRecord;->getRequestedOrientation()I
-PLcom/android/server/wm/ActivityRecord;->getSavedState()Landroid/os/Bundle;
-PLcom/android/server/wm/ActivityRecord;->getSizeCompatScale()F
-PLcom/android/server/wm/ActivityRecord;->getStack()Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/ActivityRecord;->getStackLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/ActivityRecord;->getStartingWindowType(ZZZZZZLandroid/app/ActivityManager$TaskSnapshot;)I
-PLcom/android/server/wm/ActivityRecord;->getState()Lcom/android/server/wm/ActivityStack$ActivityState;
-HPLcom/android/server/wm/ActivityRecord;->getTask()Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityRecord;->getRequestedOrientation()I
+HSPLcom/android/server/wm/ActivityRecord;->getRootTask()Lcom/android/server/wm/ActivityStack;
+PLcom/android/server/wm/ActivityRecord;->getRootTaskId()I
+HSPLcom/android/server/wm/ActivityRecord;->getSavedState()Landroid/os/Bundle;
+HPLcom/android/server/wm/ActivityRecord;->getSizeCompatScale()F
+HSPLcom/android/server/wm/ActivityRecord;->getStack()Lcom/android/server/wm/ActivityStack;
+PLcom/android/server/wm/ActivityRecord;->getStackId()I
+HSPLcom/android/server/wm/ActivityRecord;->getStackLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityStack;
+HPLcom/android/server/wm/ActivityRecord;->getStartingWindowType(ZZZZZZLandroid/app/ActivityManager$TaskSnapshot;)I
+HPLcom/android/server/wm/ActivityRecord;->getState()Lcom/android/server/wm/ActivityStack$ActivityState;
+HSPLcom/android/server/wm/ActivityRecord;->getTask()Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/ActivityRecord;->getTaskForActivityLocked(Landroid/os/IBinder;Z)I
+HPLcom/android/server/wm/ActivityRecord;->getTopFullscreenOpaqueWindow()Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/ActivityRecord;->getTopFullscreenWindow()Lcom/android/server/wm/WindowState;
-PLcom/android/server/wm/ActivityRecord;->getTransit()I
+HPLcom/android/server/wm/ActivityRecord;->getTransit()I
 PLcom/android/server/wm/ActivityRecord;->getTransitFlags()I
-PLcom/android/server/wm/ActivityRecord;->getTurnScreenOnFlag()Z
+HSPLcom/android/server/wm/ActivityRecord;->getTurnScreenOnFlag()Z
 PLcom/android/server/wm/ActivityRecord;->getUid()I
-PLcom/android/server/wm/ActivityRecord;->getUriPermissionsLocked()Lcom/android/server/uri/UriPermissionOwner;
-PLcom/android/server/wm/ActivityRecord;->handleAlreadyVisible()V
-PLcom/android/server/wm/ActivityRecord;->hasActivity()Z
+HSPLcom/android/server/wm/ActivityRecord;->getUriPermissionsLocked()Lcom/android/server/uri/UriPermissionOwner;
+PLcom/android/server/wm/ActivityRecord;->getWaitingHistoryRecordLocked()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->handleAlreadyVisible()V
+HSPLcom/android/server/wm/ActivityRecord;->hasActivity()Z
 PLcom/android/server/wm/ActivityRecord;->hasNonDefaultColorWindow()Z
-PLcom/android/server/wm/ActivityRecord;->hasProcess()Z
+HSPLcom/android/server/wm/ActivityRecord;->hasProcess()Z
+PLcom/android/server/wm/ActivityRecord;->hasResizeChange(I)Z
 PLcom/android/server/wm/ActivityRecord;->hasSavedState()Z
-HPLcom/android/server/wm/ActivityRecord;->hasSizeCompatBounds()Z
+HSPLcom/android/server/wm/ActivityRecord;->hasSizeCompatBounds()Z
 HPLcom/android/server/wm/ActivityRecord;->hasStartingWindow()Z
-PLcom/android/server/wm/ActivityRecord;->inSizeCompatMode()Z
-PLcom/android/server/wm/ActivityRecord;->isAlwaysFocusable()Z
-HPLcom/android/server/wm/ActivityRecord;->isClientVisible()Z
+HSPLcom/android/server/wm/ActivityRecord;->inSizeCompatMode()Z
+HSPLcom/android/server/wm/ActivityRecord;->isAlwaysFocusable()Z
+HSPLcom/android/server/wm/ActivityRecord;->isClientVisible()Z
+HPLcom/android/server/wm/ActivityRecord;->isClosingOrEnteringPip()Z
 PLcom/android/server/wm/ActivityRecord;->isConfigurationCompatible(Landroid/content/res/Configuration;)Z
 PLcom/android/server/wm/ActivityRecord;->isDestroyable()Z
 PLcom/android/server/wm/ActivityRecord;->isFirstChildWindowGreaterThanSecond(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/ActivityRecord;->isFocusable()Z
-PLcom/android/server/wm/ActivityRecord;->isFreezingScreen()Z
-PLcom/android/server/wm/ActivityRecord;->isHomeIntent(Landroid/content/Intent;)Z
-PLcom/android/server/wm/ActivityRecord;->isInChangeTransition()Z
+HSPLcom/android/server/wm/ActivityRecord;->isFocusable()Z
+HSPLcom/android/server/wm/ActivityRecord;->isFreezingScreen()Z
+HSPLcom/android/server/wm/ActivityRecord;->isHomeIntent(Landroid/content/Intent;)Z
+HSPLcom/android/server/wm/ActivityRecord;->isInChangeTransition()Z
 PLcom/android/server/wm/ActivityRecord;->isInHistory()Z
-PLcom/android/server/wm/ActivityRecord;->isInStackLocked()Z
-HPLcom/android/server/wm/ActivityRecord;->isInStackLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->isInStackLocked()Z
+HSPLcom/android/server/wm/ActivityRecord;->isInStackLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityRecord;->isInVrUiMode(Landroid/content/res/Configuration;)Z
-PLcom/android/server/wm/ActivityRecord;->isLetterboxOverlappingWith(Landroid/graphics/Rect;)Z
-PLcom/android/server/wm/ActivityRecord;->isMainIntent(Landroid/content/Intent;)Z
+PLcom/android/server/wm/ActivityRecord;->isInterestingToUserLocked()Z
+PLcom/android/server/wm/ActivityRecord;->isLastWindow(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/ActivityRecord;->isLetterboxOverlappingWith(Landroid/graphics/Rect;)Z
+HPLcom/android/server/wm/ActivityRecord;->isMainIntent(Landroid/content/Intent;)Z
+HPLcom/android/server/wm/ActivityRecord;->isNoHistory()Z
 PLcom/android/server/wm/ActivityRecord;->isNonResizableOrForcedResizable(I)Z
-PLcom/android/server/wm/ActivityRecord;->isPersistable()Z
-PLcom/android/server/wm/ActivityRecord;->isProcessRunning()Z
-PLcom/android/server/wm/ActivityRecord;->isRelaunching()Z
-PLcom/android/server/wm/ActivityRecord;->isResizeable()Z
-PLcom/android/server/wm/ActivityRecord;->isResolverActivity(Ljava/lang/String;)Z
+HSPLcom/android/server/wm/ActivityRecord;->isPersistable()Z
+HSPLcom/android/server/wm/ActivityRecord;->isProcessRunning()Z
+HSPLcom/android/server/wm/ActivityRecord;->isRelaunching()Z
+PLcom/android/server/wm/ActivityRecord;->isResizeOnlyChange(I)Z
+HSPLcom/android/server/wm/ActivityRecord;->isResizeable()Z
+HSPLcom/android/server/wm/ActivityRecord;->isResolverActivity(Ljava/lang/String;)Z
 PLcom/android/server/wm/ActivityRecord;->isResolverOrChildActivity()Z
-PLcom/android/server/wm/ActivityRecord;->isResolverOrDelegateActivity()Z
-PLcom/android/server/wm/ActivityRecord;->isRootOfTask()Z
-PLcom/android/server/wm/ActivityRecord;->isSleeping()Z
-PLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityStack$ActivityState;)Z
+HSPLcom/android/server/wm/ActivityRecord;->isResolverOrDelegateActivity()Z
+PLcom/android/server/wm/ActivityRecord;->isResumedActivityOnDisplay()Z
+HSPLcom/android/server/wm/ActivityRecord;->isRootOfTask()Z
+HPLcom/android/server/wm/ActivityRecord;->isSleeping()Z
+HSPLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityStack$ActivityState;)Z
 PLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;)Z
 PLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;)Z
 PLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;)Z
-PLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;)Z
+HSPLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;)Z
+HPLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;Lcom/android/server/wm/ActivityStack$ActivityState;)Z
 PLcom/android/server/wm/ActivityRecord;->isSurfaceShowing()Z
-PLcom/android/server/wm/ActivityRecord;->isTopRunningActivity()Z
-HPLcom/android/server/wm/ActivityRecord;->isVisible()Z
-HPLcom/android/server/wm/ActivityRecord;->isWaitingForTransitionStart()Z
-PLcom/android/server/wm/ActivityRecord;->lambda$applyOptionsLocked$5(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityRecord;->lambda$hasNonDefaultColorWindow$4(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/ActivityRecord;->isTaskOverlay()Z
+HSPLcom/android/server/wm/ActivityRecord;->isTopRunningActivity()Z
+PLcom/android/server/wm/ActivityRecord;->isUid(I)Z
+HSPLcom/android/server/wm/ActivityRecord;->isVisible()Z
+HSPLcom/android/server/wm/ActivityRecord;->isWaitingForTransitionStart()Z
+PLcom/android/server/wm/ActivityRecord;->keyDispatchingTimedOut(Ljava/lang/String;I)Z
+HSPLcom/android/server/wm/ActivityRecord;->lambda$applyOptionsLocked$5(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityRecord;->lambda$hasNonDefaultColorWindow$4(Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/ActivityRecord;->lambda$jAKnTXYErEwplxJ5lQgj44-M9_c(Lcom/android/server/wm/ActivityRecord;I)V
 PLcom/android/server/wm/ActivityRecord;->lambda$layoutLetterbox$2$ActivityRecord()Landroid/view/SurfaceControl$Builder;
-PLcom/android/server/wm/ActivityRecord;->lambda$postApplyAnimation$7(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/ActivityRecord;->lambda$prAsqx_JQJTqW1jNxmkuU3AV8AU(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/ActivityRecord;->lambda$new$0$ActivityRecord([F[F)V
+PLcom/android/server/wm/ActivityRecord;->lambda$new$1$ActivityRecord([F[F)V
+HPLcom/android/server/wm/ActivityRecord;->lambda$postApplyAnimation$7(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/ActivityRecord;->lambda$prAsqx_JQJTqW1jNxmkuU3AV8AU(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityRecord;->lambda$removeStartingWindow$3(Lcom/android/server/policy/WindowManagerPolicy$StartingSurface;)V
 PLcom/android/server/wm/ActivityRecord;->lambda$setVisibility$6(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/ActivityRecord;->lambda$shouldUseAppThemeSnapshot$8(Lcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/ActivityRecord;->lambda$showAllWindowsLocked$9(Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/ActivityRecord;->layoutLetterbox(Lcom/android/server/wm/WindowState;)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
+HSPLcom/android/server/wm/ActivityRecord;->lambda$showAllWindowsLocked$9(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/ActivityRecord;->layoutLetterbox(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/ActivityRecord;->loadThumbnailAnimation(Landroid/graphics/GraphicBuffer;)Landroid/view/animation/Animation;
+HSPLcom/android/server/wm/ActivityRecord;->logStartActivity(ILcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/ActivityRecord;->makeActiveIfNeeded(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityRecord;->makeClientVisible()V
 PLcom/android/server/wm/ActivityRecord;->makeFinishingLocked()V
 HPLcom/android/server/wm/ActivityRecord;->makeInvisible()V
-PLcom/android/server/wm/ActivityRecord;->makeVisibleIfNeeded(Lcom/android/server/wm/ActivityRecord;Z)V
-PLcom/android/server/wm/ActivityRecord;->matchParentBounds()Z
-PLcom/android/server/wm/ActivityRecord;->mayFreezeScreenLocked()Z
-PLcom/android/server/wm/ActivityRecord;->mayFreezeScreenLocked(Lcom/android/server/wm/WindowProcessController;)Z
-PLcom/android/server/wm/ActivityRecord;->moveFocusableActivityToTop(Ljava/lang/String;)Z
-HPLcom/android/server/wm/ActivityRecord;->needsZBoost()Z
-PLcom/android/server/wm/ActivityRecord;->notifyAppResumed(Z)V
-PLcom/android/server/wm/ActivityRecord;->notifyAppStopped()V
-HPLcom/android/server/wm/ActivityRecord;->notifyUnknownVisibilityLaunchedForKeyguardTransition()V
-PLcom/android/server/wm/ActivityRecord;->occludesParent()Z
-HPLcom/android/server/wm/ActivityRecord;->okToShowLocked()Z
-PLcom/android/server/wm/ActivityRecord;->onAnimationFinished()V
-PLcom/android/server/wm/ActivityRecord;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
-PLcom/android/server/wm/ActivityRecord;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/ActivityRecord;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HPLcom/android/server/wm/ActivityRecord;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/ActivityRecord;->onFirstWindowDrawn(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;)V
-HPLcom/android/server/wm/ActivityRecord;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
-PLcom/android/server/wm/ActivityRecord;->onRemovedFromDisplay()V
-PLcom/android/server/wm/ActivityRecord;->onWindowsDrawn(ZJ)V
+HPLcom/android/server/wm/ActivityRecord;->makeVisibleIfNeeded(Lcom/android/server/wm/ActivityRecord;Z)V
+HSPLcom/android/server/wm/ActivityRecord;->matchParentBounds()Z
+HSPLcom/android/server/wm/ActivityRecord;->mayFreezeScreenLocked()Z
+HSPLcom/android/server/wm/ActivityRecord;->mayFreezeScreenLocked(Lcom/android/server/wm/WindowProcessController;)Z
+HPLcom/android/server/wm/ActivityRecord;->moveFocusableActivityToTop(Ljava/lang/String;)Z
+HSPLcom/android/server/wm/ActivityRecord;->needsZBoost()Z
+HPLcom/android/server/wm/ActivityRecord;->notifyAppResumed(Z)V
+HPLcom/android/server/wm/ActivityRecord;->notifyAppStopped()V
+HSPLcom/android/server/wm/ActivityRecord;->notifyUnknownVisibilityLaunchedForKeyguardTransition()V
+HSPLcom/android/server/wm/ActivityRecord;->occludesParent()Z
+HSPLcom/android/server/wm/ActivityRecord;->okToShowLocked()Z
+HSPLcom/android/server/wm/ActivityRecord;->onAnimationFinished()V
+HPLcom/android/server/wm/ActivityRecord;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
+HPLcom/android/server/wm/ActivityRecord;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/ActivityRecord;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
+PLcom/android/server/wm/ActivityRecord;->onAppFreezeTimeout()V
+HSPLcom/android/server/wm/ActivityRecord;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/ActivityRecord;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/ActivityRecord;->onFirstWindowDrawn(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;)V
+HSPLcom/android/server/wm/ActivityRecord;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
+HPLcom/android/server/wm/ActivityRecord;->onRemovedFromDisplay()V
+PLcom/android/server/wm/ActivityRecord;->onWindowReplacementTimeout()V
+HSPLcom/android/server/wm/ActivityRecord;->onWindowsDrawn(ZJ)V
 PLcom/android/server/wm/ActivityRecord;->onWindowsGone()V
-PLcom/android/server/wm/ActivityRecord;->onWindowsVisible()V
-PLcom/android/server/wm/ActivityRecord;->pauseKeyDispatchingLocked()V
-HPLcom/android/server/wm/ActivityRecord;->postApplyAnimation(Z)V
-PLcom/android/server/wm/ActivityRecord;->postWindowRemoveStartingWindowCleanup(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/ActivityRecord;->onWindowsVisible()V
+PLcom/android/server/wm/ActivityRecord;->onlyVrUiModeChanged(ILandroid/content/res/Configuration;)Z
+HPLcom/android/server/wm/ActivityRecord;->pauseKeyDispatchingLocked()V
+HSPLcom/android/server/wm/ActivityRecord;->postApplyAnimation(Z)V
+HPLcom/android/server/wm/ActivityRecord;->postWindowRemoveStartingWindowCleanup(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/ActivityRecord;->prepareActivityHideTransitionAnimation(I)V
-HPLcom/android/server/wm/ActivityRecord;->prepareSurfaces()V
+PLcom/android/server/wm/ActivityRecord;->prepareActivityHideTransitionAnimationIfOvarlay(I)V
+HSPLcom/android/server/wm/ActivityRecord;->prepareSurfaces()V
 PLcom/android/server/wm/ActivityRecord;->registerRemoteAnimations(Landroid/view/RemoteAnimationDefinition;)V
+HPLcom/android/server/wm/ActivityRecord;->relaunchActivityLocked(Z)V
 HPLcom/android/server/wm/ActivityRecord;->removeAppTokenFromDisplay()V
-PLcom/android/server/wm/ActivityRecord;->removeChild(Lcom/android/server/wm/WindowContainer;)V
-PLcom/android/server/wm/ActivityRecord;->removeChild(Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/ActivityRecord;->removeDeadWindows()V
+HPLcom/android/server/wm/ActivityRecord;->removeChild(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/ActivityRecord;->removeChild(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/ActivityRecord;->removeDeadWindows()V
+HPLcom/android/server/wm/ActivityRecord;->removeDestroyTimeout()V
 HPLcom/android/server/wm/ActivityRecord;->removeFromHistory(Ljava/lang/String;)V
 PLcom/android/server/wm/ActivityRecord;->removeIfPossible()V
 PLcom/android/server/wm/ActivityRecord;->removeImmediately()V
-PLcom/android/server/wm/ActivityRecord;->removeReplacedWindowIfNeeded(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/ActivityRecord;->removeLaunchTickRunnable()V
+HPLcom/android/server/wm/ActivityRecord;->removePauseTimeout()V
+HSPLcom/android/server/wm/ActivityRecord;->removeReplacedWindowIfNeeded(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/ActivityRecord;->removeResultsLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;I)V
-PLcom/android/server/wm/ActivityRecord;->removeStartingWindow()V
-PLcom/android/server/wm/ActivityRecord;->removeUriPermissionsLocked()V
+HSPLcom/android/server/wm/ActivityRecord;->removeStartingWindow()V
+HPLcom/android/server/wm/ActivityRecord;->removeStopTimeout()V
+HPLcom/android/server/wm/ActivityRecord;->removeTimeouts()V
+HPLcom/android/server/wm/ActivityRecord;->removeUriPermissionsLocked()V
 PLcom/android/server/wm/ActivityRecord;->reparent(Lcom/android/server/wm/Task;ILjava/lang/String;)V
 PLcom/android/server/wm/ActivityRecord;->reparentSurfaceControl(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
-PLcom/android/server/wm/ActivityRecord;->reportDescendantOrientationChangeIfNeeded()V
-PLcom/android/server/wm/ActivityRecord;->requestUpdateWallpaperIfNeeded()V
-PLcom/android/server/wm/ActivityRecord;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/ActivityRecord;->resolveSizeCompatModeConfiguration(Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/ActivityRecord;->resumeKeyDispatchingLocked()V
-PLcom/android/server/wm/ActivityRecord;->scheduleAddStartingWindow()V
-PLcom/android/server/wm/ActivityRecord;->scheduleConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/ActivityRecord;->reportDescendantOrientationChangeIfNeeded()V
+PLcom/android/server/wm/ActivityRecord;->reportFullyDrawnLocked(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->requestUpdateWallpaperIfNeeded()V
+HSPLcom/android/server/wm/ActivityRecord;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/ActivityRecord;->resolveSizeCompatModeConfiguration(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/ActivityRecord;->resumeKeyDispatchingLocked()V
+PLcom/android/server/wm/ActivityRecord;->savePinnedStackBounds()V
+PLcom/android/server/wm/ActivityRecord;->scheduleActivityMovedToDisplay(ILandroid/content/res/Configuration;)V
+HPLcom/android/server/wm/ActivityRecord;->scheduleAddStartingWindow()V
+HPLcom/android/server/wm/ActivityRecord;->scheduleConfigurationChanged(Landroid/content/res/Configuration;)V
 PLcom/android/server/wm/ActivityRecord;->scheduleMultiWindowModeChanged(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/ActivityRecord;->schedulePauseTimeout()V
 PLcom/android/server/wm/ActivityRecord;->schedulePictureInPictureModeChanged(Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/ActivityRecord;->scheduleTopResumedActivityChanged(Z)Z
-PLcom/android/server/wm/ActivityRecord;->setActivityType(ZILandroid/content/Intent;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityRecord;->setAppLayoutChanges(ILjava/lang/String;)V
-HPLcom/android/server/wm/ActivityRecord;->setClientVisible(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->scheduleTopResumedActivityChanged(Z)Z
+PLcom/android/server/wm/ActivityRecord;->sendResult(ILjava/lang/String;IILandroid/content/Intent;)V
+HSPLcom/android/server/wm/ActivityRecord;->setActivityType(ZILandroid/content/Intent;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityRecord;->setAppLayoutChanges(ILjava/lang/String;)V
+HSPLcom/android/server/wm/ActivityRecord;->setClientVisible(Z)V
 PLcom/android/server/wm/ActivityRecord;->setCurrentLaunchCanTurnScreenOn(Z)V
 PLcom/android/server/wm/ActivityRecord;->setDeferHidingClient(Z)V
-PLcom/android/server/wm/ActivityRecord;->setLastReportedConfiguration(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/ActivityRecord;->setLastReportedConfiguration(Landroid/util/MergedConfiguration;)V
-PLcom/android/server/wm/ActivityRecord;->setLastReportedGlobalConfiguration(Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/ActivityRecord;->setLayer(Landroid/view/SurfaceControl$Transaction;I)V
-PLcom/android/server/wm/ActivityRecord;->setMainWindowOpaque(Z)V
-PLcom/android/server/wm/ActivityRecord;->setOccludesParent(Z)Z
-PLcom/android/server/wm/ActivityRecord;->setOrientation(IZ)V
-PLcom/android/server/wm/ActivityRecord;->setProcess(Lcom/android/server/wm/WindowProcessController;)V
-PLcom/android/server/wm/ActivityRecord;->setRequestedOrientation(I)V
-PLcom/android/server/wm/ActivityRecord;->setSavedState(Landroid/os/Bundle;)V
-PLcom/android/server/wm/ActivityRecord;->setSizeConfigurations([I[I[I)V
-HPLcom/android/server/wm/ActivityRecord;->setSleeping(Z)V
+PLcom/android/server/wm/ActivityRecord;->setDisablePreviewScreenshots(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->setLastReportedConfiguration(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/ActivityRecord;->setLastReportedConfiguration(Landroid/util/MergedConfiguration;)V
+HSPLcom/android/server/wm/ActivityRecord;->setLastReportedGlobalConfiguration(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/ActivityRecord;->setLayer(Landroid/view/SurfaceControl$Transaction;I)V
+HPLcom/android/server/wm/ActivityRecord;->setMainWindowOpaque(Z)V
+HPLcom/android/server/wm/ActivityRecord;->setOccludesParent(Z)Z
+HPLcom/android/server/wm/ActivityRecord;->setOrientation(IZ)V
+HSPLcom/android/server/wm/ActivityRecord;->setProcess(Lcom/android/server/wm/WindowProcessController;)V
+HPLcom/android/server/wm/ActivityRecord;->setRequestedOrientation(I)V
+HSPLcom/android/server/wm/ActivityRecord;->setSavedState(Landroid/os/Bundle;)V
+PLcom/android/server/wm/ActivityRecord;->setShowWhenLocked(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->setSizeConfigurations([I[I[I)V
+HSPLcom/android/server/wm/ActivityRecord;->setSleeping(Z)V
 HPLcom/android/server/wm/ActivityRecord;->setSleeping(ZZ)V
-PLcom/android/server/wm/ActivityRecord;->setState(Lcom/android/server/wm/ActivityStack$ActivityState;Ljava/lang/String;)V
-PLcom/android/server/wm/ActivityRecord;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V
+HSPLcom/android/server/wm/ActivityRecord;->setState(Lcom/android/server/wm/ActivityStack$ActivityState;Ljava/lang/String;)V
+HSPLcom/android/server/wm/ActivityRecord;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V
 PLcom/android/server/wm/ActivityRecord;->setTaskForReuse(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/ActivityRecord;->setVisibility(Z)V
-PLcom/android/server/wm/ActivityRecord;->setVisibility(ZZ)V
-PLcom/android/server/wm/ActivityRecord;->setVisible(Z)V
-PLcom/android/server/wm/ActivityRecord;->setWillCloseOrEnterPip(Z)V
+PLcom/android/server/wm/ActivityRecord;->setTaskOverlay(Z)V
+PLcom/android/server/wm/ActivityRecord;->setTurnScreenOn(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->setVisibility(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->setVisibility(ZZ)V
+HSPLcom/android/server/wm/ActivityRecord;->setVisible(Z)V
+HPLcom/android/server/wm/ActivityRecord;->setWillCloseOrEnterPip(Z)V
+PLcom/android/server/wm/ActivityRecord;->setWillReplaceChildWindows()V
 HPLcom/android/server/wm/ActivityRecord;->shouldApplyAnimation(Z)Z
-PLcom/android/server/wm/ActivityRecord;->shouldBeResumed(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityRecord;->shouldBeVisible()Z
-HPLcom/android/server/wm/ActivityRecord;->shouldBeVisible(ZZ)Z
-PLcom/android/server/wm/ActivityRecord;->shouldDeferAnimationFinish(Ljava/lang/Runnable;)Z
-HPLcom/android/server/wm/ActivityRecord;->shouldMakeActive(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityRecord;->shouldPauseActivity(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldBeResumed(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldBeVisible()Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldBeVisible(ZZ)Z
+HPLcom/android/server/wm/ActivityRecord;->shouldDeferAnimationFinish(Ljava/lang/Runnable;)Z
+PLcom/android/server/wm/ActivityRecord;->shouldFreezeBounds()Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldMakeActive(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldPauseActivity(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityRecord;->shouldRelaunchLocked(ILandroid/content/res/Configuration;)Z
-PLcom/android/server/wm/ActivityRecord;->shouldResumeActivity(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityRecord;->shouldStartChangeTransition(II)Z
-PLcom/android/server/wm/ActivityRecord;->shouldUpdateConfigForDisplayChanged()Z
-PLcom/android/server/wm/ActivityRecord;->shouldUseSizeCompatMode()Z
-PLcom/android/server/wm/ActivityRecord;->showAllWindowsLocked()V
-PLcom/android/server/wm/ActivityRecord;->showStartingWindow(Lcom/android/server/wm/ActivityRecord;ZZ)V
-PLcom/android/server/wm/ActivityRecord;->showStartingWindow(Lcom/android/server/wm/ActivityRecord;ZZZ)V
-PLcom/android/server/wm/ActivityRecord;->startFreezingScreen()V
-PLcom/android/server/wm/ActivityRecord;->startFreezingScreenLocked(I)V
-PLcom/android/server/wm/ActivityRecord;->startFreezingScreenLocked(Lcom/android/server/wm/WindowProcessController;I)V
-PLcom/android/server/wm/ActivityRecord;->startLaunchTickingLocked()V
-PLcom/android/server/wm/ActivityRecord;->startingWindowStateToString(I)Ljava/lang/String;
-PLcom/android/server/wm/ActivityRecord;->stopFreezingScreen(ZZ)V
-HPLcom/android/server/wm/ActivityRecord;->stopFreezingScreenLocked(Z)V
-PLcom/android/server/wm/ActivityRecord;->stopIfPossible()V
-PLcom/android/server/wm/ActivityRecord;->supportsFreeform()Z
-PLcom/android/server/wm/ActivityRecord;->supportsPictureInPicture()Z
-PLcom/android/server/wm/ActivityRecord;->supportsResizeableMultiWindow()Z
-PLcom/android/server/wm/ActivityRecord;->supportsSplitScreenWindowingMode()Z
-PLcom/android/server/wm/ActivityRecord;->takeFromHistory()V
-PLcom/android/server/wm/ActivityRecord;->takeOptionsLocked(Z)Landroid/app/ActivityOptions;
-PLcom/android/server/wm/ActivityRecord;->toString()Ljava/lang/String;
-PLcom/android/server/wm/ActivityRecord;->transferStartingWindow(Landroid/os/IBinder;)Z
-PLcom/android/server/wm/ActivityRecord;->transferStartingWindow(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityRecord;->transferStartingWindowFromHiddenAboveTokenIfNeeded()V
-PLcom/android/server/wm/ActivityRecord;->updateAllDrawn()V
-PLcom/android/server/wm/ActivityRecord;->updateColorTransform()V
-HPLcom/android/server/wm/ActivityRecord;->updateDrawnWindowStates(Lcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/ActivityRecord;->updateLetterboxSurface(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/ActivityRecord;->updateMultiWindowMode()V
+HSPLcom/android/server/wm/ActivityRecord;->shouldResumeActivity(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldStartActivity()Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldStartChangeTransition(II)Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldUpdateConfigForDisplayChanged()Z
+HPLcom/android/server/wm/ActivityRecord;->shouldUseAppThemeSnapshot()Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldUseSizeCompatMode()Z
+HSPLcom/android/server/wm/ActivityRecord;->showAllWindowsLocked()V
+HSPLcom/android/server/wm/ActivityRecord;->showStartingWindow(Lcom/android/server/wm/ActivityRecord;ZZ)V
+HSPLcom/android/server/wm/ActivityRecord;->showStartingWindow(Lcom/android/server/wm/ActivityRecord;ZZZ)V
+HSPLcom/android/server/wm/ActivityRecord;->showToCurrentUser()Z
+HPLcom/android/server/wm/ActivityRecord;->snapshotOrientationSameAsTask(Landroid/app/ActivityManager$TaskSnapshot;)Z
+HPLcom/android/server/wm/ActivityRecord;->startFreezingScreen()V
+HSPLcom/android/server/wm/ActivityRecord;->startFreezingScreenLocked(I)V
+HSPLcom/android/server/wm/ActivityRecord;->startFreezingScreenLocked(Lcom/android/server/wm/WindowProcessController;I)V
+HSPLcom/android/server/wm/ActivityRecord;->startLaunchTickingLocked()V
+PLcom/android/server/wm/ActivityRecord;->startRelaunching()V
+HPLcom/android/server/wm/ActivityRecord;->startingWindowStateToString(I)Ljava/lang/String;
+HSPLcom/android/server/wm/ActivityRecord;->stopFreezingScreen(ZZ)V
+HSPLcom/android/server/wm/ActivityRecord;->stopFreezingScreenLocked(Z)V
+HPLcom/android/server/wm/ActivityRecord;->stopIfPossible()V
+HSPLcom/android/server/wm/ActivityRecord;->supportsFreeform()Z
+HSPLcom/android/server/wm/ActivityRecord;->supportsPictureInPicture()Z
+HSPLcom/android/server/wm/ActivityRecord;->supportsResizeableMultiWindow()Z
+HSPLcom/android/server/wm/ActivityRecord;->supportsSplitScreenWindowingMode()Z
+HPLcom/android/server/wm/ActivityRecord;->takeFromHistory()V
+HSPLcom/android/server/wm/ActivityRecord;->takeOptionsLocked(Z)Landroid/app/ActivityOptions;
+HSPLcom/android/server/wm/ActivityRecord;->toString()Ljava/lang/String;
+HPLcom/android/server/wm/ActivityRecord;->transferStartingWindow(Landroid/os/IBinder;)Z
+HSPLcom/android/server/wm/ActivityRecord;->transferStartingWindow(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityRecord;->transferStartingWindowFromHiddenAboveTokenIfNeeded()V
+HPLcom/android/server/wm/ActivityRecord;->unfreezeBounds()V
+PLcom/android/server/wm/ActivityRecord;->unregisterRemoteAnimations()V
+HSPLcom/android/server/wm/ActivityRecord;->updateAllDrawn()V
+PLcom/android/server/wm/ActivityRecord;->updateApplicationInfo(Landroid/content/pm/ApplicationInfo;)V
+HSPLcom/android/server/wm/ActivityRecord;->updateColorTransform()V
+HSPLcom/android/server/wm/ActivityRecord;->updateDrawnWindowStates(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/ActivityRecord;->updateLetterboxSurface(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/ActivityRecord;->updateMultiWindowMode()V
 PLcom/android/server/wm/ActivityRecord;->updateOptionsLocked(Landroid/app/ActivityOptions;)V
 PLcom/android/server/wm/ActivityRecord;->updatePictureInPictureMode(Landroid/graphics/Rect;Z)V
-HPLcom/android/server/wm/ActivityRecord;->updateReportedVisibilityLocked()V
-HPLcom/android/server/wm/ActivityRecord;->updateSizeCompatMode()V
+HSPLcom/android/server/wm/ActivityRecord;->updateReportedVisibilityLocked()V
+HSPLcom/android/server/wm/ActivityRecord;->updateSizeCompatMode()V
 PLcom/android/server/wm/ActivityRecord;->updateTaskDescription(Ljava/lang/CharSequence;)V
-PLcom/android/server/wm/ActivityRecord;->windowsAreFocusable()Z
-HPLcom/android/server/wm/ActivityRecord;->windowsAreFocusable(Z)Z
-PLcom/android/server/wm/ActivityRecord;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/ActivityRecord;->writeNameToProto(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLcom/android/server/wm/ActivityRecord;->windowsAreFocusable()Z
+HSPLcom/android/server/wm/ActivityRecord;->windowsAreFocusable(Z)Z
+HSPLcom/android/server/wm/ActivityRecord;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLcom/android/server/wm/ActivityRecord;->writeNameToProto(Landroid/util/proto/ProtoOutputStream;J)V
 PLcom/android/server/wm/ActivityResult;-><init>(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;IILandroid/content/Intent;)V
 PLcom/android/server/wm/ActivityServiceConnectionsHolder;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityServiceConnectionsHolder;->addConnection(Ljava/lang/Object;)V
+HPLcom/android/server/wm/ActivityServiceConnectionsHolder;->addConnection(Ljava/lang/Object;)V
 PLcom/android/server/wm/ActivityServiceConnectionsHolder;->disconnectActivityFromServices()V
-PLcom/android/server/wm/ActivityServiceConnectionsHolder;->getActivityPid()I
-PLcom/android/server/wm/ActivityServiceConnectionsHolder;->isActivityVisible()Z
-PLcom/android/server/wm/ActivityServiceConnectionsHolder;->removeConnection(Ljava/lang/Object;)V
+PLcom/android/server/wm/ActivityServiceConnectionsHolder;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/wm/ActivityServiceConnectionsHolder;->forEachConnection(Ljava/util/function/Consumer;)V
+HPLcom/android/server/wm/ActivityServiceConnectionsHolder;->getActivityPid()I
+HPLcom/android/server/wm/ActivityServiceConnectionsHolder;->isActivityVisible()Z
+PLcom/android/server/wm/ActivityServiceConnectionsHolder;->lambda$disconnectActivityFromServices$0$ActivityServiceConnectionsHolder()V
+PLcom/android/server/wm/ActivityServiceConnectionsHolder;->lambda$disconnectActivityFromServices$0$ActivityServiceConnectionsHolder(Ljava/lang/Object;)V
+HPLcom/android/server/wm/ActivityServiceConnectionsHolder;->removeConnection(Ljava/lang/Object;)V
+PLcom/android/server/wm/ActivityServiceConnectionsHolder;->toString()Ljava/lang/String;
 HSPLcom/android/server/wm/ActivityStack$ActivityStackHandler;-><init>(Lcom/android/server/wm/ActivityStack;Landroid/os/Looper;)V
 PLcom/android/server/wm/ActivityStack$ActivityStackHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/wm/ActivityStack$ActivityState;-><clinit>()V
-PLcom/android/server/wm/ActivityStack$ActivityState;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/server/wm/ActivityStack$ActivityState;-><clinit>()V
+HSPLcom/android/server/wm/ActivityStack$ActivityState;-><init>(Ljava/lang/String;I)V
 PLcom/android/server/wm/ActivityStack$ActivityState;->values()[Lcom/android/server/wm/ActivityStack$ActivityState;
 HSPLcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;-><init>(Lcom/android/server/wm/ActivityStack;)V
 HSPLcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;-><init>(Lcom/android/server/wm/ActivityStack;Lcom/android/server/wm/ActivityStack$1;)V
-PLcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;->lambda$hxEhv3lodv2mTq0c1tG208T2TSs(Lcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;->process(Lcom/android/server/wm/ActivityRecord;Ljava/util/function/Consumer;)Z
-HPLcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;->processActivity(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;->reset(Lcom/android/server/wm/ActivityRecord;Ljava/util/function/Consumer;)V
+HSPLcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;->lambda$hxEhv3lodv2mTq0c1tG208T2TSs(Lcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;->process(Lcom/android/server/wm/ActivityRecord;Ljava/util/function/Consumer;)Z
+HSPLcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;->processActivity(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;->reset(Lcom/android/server/wm/ActivityRecord;Ljava/util/function/Consumer;)V
 HSPLcom/android/server/wm/ActivityStack$EnsureVisibleActivitiesConfigHelper;-><init>(Lcom/android/server/wm/ActivityStack;)V
 HSPLcom/android/server/wm/ActivityStack$EnsureVisibleActivitiesConfigHelper;-><init>(Lcom/android/server/wm/ActivityStack;Lcom/android/server/wm/ActivityStack$1;)V
-PLcom/android/server/wm/ActivityStack$EnsureVisibleActivitiesConfigHelper;->process(Lcom/android/server/wm/ActivityRecord;Z)V
-PLcom/android/server/wm/ActivityStack$EnsureVisibleActivitiesConfigHelper;->processActivity(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/ActivityStack$EnsureVisibleActivitiesConfigHelper;->process(Lcom/android/server/wm/ActivityRecord;Z)V
+HPLcom/android/server/wm/ActivityStack$EnsureVisibleActivitiesConfigHelper;->processActivity(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityStack$EnsureVisibleActivitiesConfigHelper;->reset(Z)V
 HSPLcom/android/server/wm/ActivityStack$RemoveHistoryRecordsForApp;-><init>(Lcom/android/server/wm/ActivityStack;)V
 HSPLcom/android/server/wm/ActivityStack$RemoveHistoryRecordsForApp;-><init>(Lcom/android/server/wm/ActivityStack;Lcom/android/server/wm/ActivityStack$1;)V
-PLcom/android/server/wm/ActivityStack$RemoveHistoryRecordsForApp;->addActivityToRemove(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStack$RemoveHistoryRecordsForApp;->lambda$8j2ZFLAwkXnwDAxiTFN7mMDLhjU(Lcom/android/server/wm/ActivityStack$RemoveHistoryRecordsForApp;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityStack$RemoveHistoryRecordsForApp;->addActivityToRemove(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityStack$RemoveHistoryRecordsForApp;->lambda$8j2ZFLAwkXnwDAxiTFN7mMDLhjU(Lcom/android/server/wm/ActivityStack$RemoveHistoryRecordsForApp;Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityStack$RemoveHistoryRecordsForApp;->process(Lcom/android/server/wm/WindowProcessController;)Z
-PLcom/android/server/wm/ActivityStack$RemoveHistoryRecordsForApp;->processActivity(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityStack$RemoveHistoryRecordsForApp;->processActivity(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityStack;-><clinit>()V
+HSPLcom/android/server/wm/ActivityStack;-><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;IIIIILjava/lang/String;IZZZIILandroid/content/pm/ActivityInfo;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Lcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/ActivityStack;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Landroid/app/ActivityManager$TaskDescription;Lcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/ActivityStack;-><init>(Lcom/android/server/wm/DisplayContent;ILcom/android/server/wm/ActivityStackSupervisor;I)V
 HSPLcom/android/server/wm/ActivityStack;-><init>(Lcom/android/server/wm/DisplayContent;ILcom/android/server/wm/ActivityStackSupervisor;IIZ)V
+HSPLcom/android/server/wm/ActivityStack;-><init>(Lcom/android/server/wm/DisplayContent;ILcom/android/server/wm/ActivityStackSupervisor;ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;)V
 PLcom/android/server/wm/ActivityStack;->activityPausedLocked(Landroid/os/IBinder;Z)V
-PLcom/android/server/wm/ActivityStack;->addChild(Lcom/android/server/wm/Task;IZZ)V
-PLcom/android/server/wm/ActivityStack;->addChild(Lcom/android/server/wm/Task;ZZ)V
+HSPLcom/android/server/wm/ActivityStack;->addChild(Lcom/android/server/wm/Task;IZZ)V
+HSPLcom/android/server/wm/ActivityStack;->addChild(Lcom/android/server/wm/Task;ZZ)V
 PLcom/android/server/wm/ActivityStack;->addChild(Lcom/android/server/wm/WindowContainer;I)V
+HSPLcom/android/server/wm/ActivityStack;->addChild(Lcom/android/server/wm/WindowContainer;IZ)V
+HSPLcom/android/server/wm/ActivityStack;->addChild(Lcom/android/server/wm/WindowContainer;ZZ)V
 PLcom/android/server/wm/ActivityStack;->adjustFocusToNextFocusableStack(Ljava/lang/String;)Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/ActivityStack;->adjustFocusToNextFocusableStack(Ljava/lang/String;Z)Lcom/android/server/wm/ActivityStack;
+HPLcom/android/server/wm/ActivityStack;->adjustFocusToNextFocusableStack(Ljava/lang/String;Z)Lcom/android/server/wm/ActivityStack;
+HPLcom/android/server/wm/ActivityStack;->adjustForIME(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/ActivityStack;->affectedBySplitScreenResize()Z
 PLcom/android/server/wm/ActivityStack;->animateResizePinnedStack(Landroid/graphics/Rect;Landroid/graphics/Rect;IZ)V
-PLcom/android/server/wm/ActivityStack;->awakeFromSleepingLocked()V
+PLcom/android/server/wm/ActivityStack;->applyAdjustForImeIfNeeded(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/ActivityStack;->awakeFromSleepingLocked()V
+PLcom/android/server/wm/ActivityStack;->beginImeAdjustAnimation()V
+PLcom/android/server/wm/ActivityStack;->calculateDockedBoundsForConfigChange(Landroid/content/res/Configuration;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/ActivityStack;->calculatePinnedBoundsForConfigChange(Landroid/graphics/Rect;)Z
-HPLcom/android/server/wm/ActivityStack;->canEnterPipOnTaskSwitch(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
-HPLcom/android/server/wm/ActivityStack;->canShowWithInsecureKeyguard()Z
-PLcom/android/server/wm/ActivityStack;->cancelInitializingActivities()V
-PLcom/android/server/wm/ActivityStack;->checkBehindFullscreenActivity(Lcom/android/server/wm/ActivityRecord;Ljava/util/function/Consumer;)Z
+HSPLcom/android/server/wm/ActivityStack;->canEnterPipOnTaskSwitch(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
+HSPLcom/android/server/wm/ActivityStack;->canShowWithInsecureKeyguard()Z
+PLcom/android/server/wm/ActivityStack;->canSpecifyOrientation()Z
+HSPLcom/android/server/wm/ActivityStack;->cancelInitializingActivities()V
+HSPLcom/android/server/wm/ActivityStack;->checkBehindFullscreenActivity(Lcom/android/server/wm/ActivityRecord;Ljava/util/function/Consumer;)Z
 HSPLcom/android/server/wm/ActivityStack;->checkCompleteDeferredRemoval()Z
-HPLcom/android/server/wm/ActivityStack;->checkKeyguardVisibility(Lcom/android/server/wm/ActivityRecord;ZZ)Z
-PLcom/android/server/wm/ActivityStack;->checkReadyForSleep()V
-HPLcom/android/server/wm/ActivityStack;->checkTranslucentActivityWaiting(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStack;->clearLaunchTime(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStack;->completePauseLocked(ZLcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityStack;->computeMinPosition(II)I
-PLcom/android/server/wm/ActivityStack;->containsActivityFromStack(Ljava/util/List;)Z
-PLcom/android/server/wm/ActivityStack;->continueUpdateBounds()V
-PLcom/android/server/wm/ActivityStack;->createTask(ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;ZLcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityStack;->checkKeyguardVisibility(Lcom/android/server/wm/ActivityRecord;ZZ)Z
+HSPLcom/android/server/wm/ActivityStack;->checkReadyForSleep()V
+HSPLcom/android/server/wm/ActivityStack;->checkTranslucentActivityWaiting(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityStack;->clearLaunchTime(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityStack;->completePauseLocked(ZLcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityStack;->computeMinPosition(II)I
+HPLcom/android/server/wm/ActivityStack;->containsActivityFromStack(Ljava/util/List;)Z
+HSPLcom/android/server/wm/ActivityStack;->continueUpdateBounds()V
+PLcom/android/server/wm/ActivityStack;->convertActivityToTranslucent(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/ActivityStack;->createTask(ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Z)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityStack;->createTask(ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;ZLcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Lcom/android/server/wm/Task;
+PLcom/android/server/wm/ActivityStack;->createTask(ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Z)Lcom/android/server/wm/Task;
 PLcom/android/server/wm/ActivityStack;->deferScheduleMultiWindowModeChanged()Z
+PLcom/android/server/wm/ActivityStack;->deferUpdateBounds()V
+HPLcom/android/server/wm/ActivityStack;->dim(F)V
+PLcom/android/server/wm/ActivityStack;->dismissPip()V
 HSPLcom/android/server/wm/ActivityStack;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZZLjava/lang/String;Z)Z
 HSPLcom/android/server/wm/ActivityStack;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
 HSPLcom/android/server/wm/ActivityStack;->dumpActivities(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZZLjava/lang/String;Z)Z
-PLcom/android/server/wm/ActivityStack;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HPLcom/android/server/wm/ActivityStack;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
 HPLcom/android/server/wm/ActivityStack;->dumpDebugInnerStackOnly(Landroid/util/proto/ProtoOutputStream;JI)V
-PLcom/android/server/wm/ActivityStack;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZ)V
+PLcom/android/server/wm/ActivityStack;->endImeAdjustAnimation()V
+HPLcom/android/server/wm/ActivityStack;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZ)V
 HSPLcom/android/server/wm/ActivityStack;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZZ)V
 PLcom/android/server/wm/ActivityStack;->ensureVisibleActivitiesConfiguration(Lcom/android/server/wm/ActivityRecord;Z)V
-PLcom/android/server/wm/ActivityStack;->executeAppTransition(Landroid/app/ActivityOptions;)V
+HPLcom/android/server/wm/ActivityStack;->executeAppTransition(Landroid/app/ActivityOptions;)V
 HPLcom/android/server/wm/ActivityStack;->fillsParent()Z
+HSPLcom/android/server/wm/ActivityStack;->findPositionForTask(Lcom/android/server/wm/Task;I)I
 HPLcom/android/server/wm/ActivityStack;->findPositionForTask(Lcom/android/server/wm/Task;IZ)I
+PLcom/android/server/wm/ActivityStack;->finishAllActivitiesImmediately()V
 PLcom/android/server/wm/ActivityStack;->finishIfVoiceActivity(Lcom/android/server/wm/ActivityRecord;Landroid/os/IBinder;)Z
-PLcom/android/server/wm/ActivityStack;->finishIfVoiceTask(Lcom/android/server/wm/Task;Landroid/os/IBinder;)V
-PLcom/android/server/wm/ActivityStack;->finishTopCrashedActivityLocked(Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;)Lcom/android/server/wm/Task;
-PLcom/android/server/wm/ActivityStack;->finishVoiceTask(Landroid/service/voice/IVoiceInteractionSession;)V
-PLcom/android/server/wm/ActivityStack;->getAnimatingActivityRegistry()Lcom/android/server/wm/AnimatingActivityRegistry;
+HPLcom/android/server/wm/ActivityStack;->finishIfVoiceTask(Lcom/android/server/wm/Task;Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityStack;->finishTopCrashedActivityLocked(Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;)Lcom/android/server/wm/Task;
+HPLcom/android/server/wm/ActivityStack;->finishVoiceTask(Landroid/service/voice/IVoiceInteractionSession;)V
+HSPLcom/android/server/wm/ActivityStack;->getAnimatingActivityRegistry()Lcom/android/server/wm/AnimatingActivityRegistry;
+PLcom/android/server/wm/ActivityStack;->getAnimationOrCurrentBounds(Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/ActivityStack;->getBounds()Landroid/graphics/Rect;
 HSPLcom/android/server/wm/ActivityStack;->getBounds(Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/ActivityStack;->getDimBounds(Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/ActivityStack;->getDisplay()Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/ActivityStack;->getDisplayId()I
+HPLcom/android/server/wm/ActivityStack;->getDockSide()I
+HPLcom/android/server/wm/ActivityStack;->getDockSide(Landroid/content/res/Configuration;Landroid/graphics/Rect;)I
+HPLcom/android/server/wm/ActivityStack;->getDockSide(Lcom/android/server/wm/DisplayContent;Landroid/content/res/Configuration;Landroid/graphics/Rect;)I
+PLcom/android/server/wm/ActivityStack;->getDockSideForDisplay(Lcom/android/server/wm/DisplayContent;)I
 PLcom/android/server/wm/ActivityStack;->getDumpActivitiesLocked(Ljava/lang/String;)Ljava/util/ArrayList;
 PLcom/android/server/wm/ActivityStack;->getFinalAnimationBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/ActivityStack;->getMinTopStackBottom(Landroid/graphics/Rect;I)I
 HSPLcom/android/server/wm/ActivityStack;->getName()Ljava/lang/String;
+PLcom/android/server/wm/ActivityStack;->getOrientation()I
 HSPLcom/android/server/wm/ActivityStack;->getRawBounds()Landroid/graphics/Rect;
+PLcom/android/server/wm/ActivityStack;->getRawBounds(Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/ActivityStack;->getRelativeDisplayedPosition(Landroid/graphics/Point;)V
 HSPLcom/android/server/wm/ActivityStack;->getResumedActivity()Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityStack;->getStackDockedModeBounds(Landroid/content/res/Configuration;ZLandroid/graphics/Rect;Landroid/graphics/Rect;IZ)V
+HPLcom/android/server/wm/ActivityStack;->getStackDockedModeBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/ActivityStack;->getStackId()I
 HSPLcom/android/server/wm/ActivityStack;->getStackOutset()I
+HSPLcom/android/server/wm/ActivityStack;->getTile()Lcom/android/server/wm/TaskTile;
 HSPLcom/android/server/wm/ActivityStack;->getTopDismissingKeyguardActivity()Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityStack;->getTopNonFinishingActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityStack;->getTopNonFinishingActivity()Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/ActivityStack;->getVisibility(Lcom/android/server/wm/ActivityRecord;)I
-PLcom/android/server/wm/ActivityStack;->goToSleep()V
+HPLcom/android/server/wm/ActivityStack;->goToSleep()V
 HPLcom/android/server/wm/ActivityStack;->goToSleepIfPossible(Z)Z
+HSPLcom/android/server/wm/ActivityStack;->handleAppDied(Lcom/android/server/wm/WindowProcessController;)Z
 HSPLcom/android/server/wm/ActivityStack;->handleAppDiedLocked(Lcom/android/server/wm/WindowProcessController;)Z
 PLcom/android/server/wm/ActivityStack;->inLruList(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityStack;->isAdjustedForIme()Z
-PLcom/android/server/wm/ActivityStack;->isAdjustedForMinimizedDockedStack()Z
-PLcom/android/server/wm/ActivityStack;->isAnimatingBounds()Z
+HSPLcom/android/server/wm/ActivityStack;->isAdjustedForIme()Z
+HSPLcom/android/server/wm/ActivityStack;->isAdjustedForMinimizedDockedStack()Z
+HSPLcom/android/server/wm/ActivityStack;->isAnimatingBounds()Z
+HPLcom/android/server/wm/ActivityStack;->isAnimatingBoundsToFullscreen()Z
 PLcom/android/server/wm/ActivityStack;->isAnimatingForIme()Z
 HSPLcom/android/server/wm/ActivityStack;->isAttached()Z
-PLcom/android/server/wm/ActivityStack;->isCompatible(II)Z
+HSPLcom/android/server/wm/ActivityStack;->isCompatible(II)Z
+PLcom/android/server/wm/ActivityStack;->isControlledByTaskOrganizer()Z
 HSPLcom/android/server/wm/ActivityStack;->isFocusable()Z
 HSPLcom/android/server/wm/ActivityStack;->isFocusableAndVisible()Z
 HSPLcom/android/server/wm/ActivityStack;->isFocusedStackOnDisplay()Z
-PLcom/android/server/wm/ActivityStack;->isForceScaled()Z
-HPLcom/android/server/wm/ActivityStack;->isHomeOrRecentsStack()Z
-PLcom/android/server/wm/ActivityStack;->isInStackLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityStack;->isForceScaled()Z
+HSPLcom/android/server/wm/ActivityStack;->isHomeOrRecentsStack()Z
+HSPLcom/android/server/wm/ActivityStack;->isInStackLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/ActivityStack;->isInStackLocked(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/ActivityStack;->isMinimizedDockAndHomeStackResizable()Z
-PLcom/android/server/wm/ActivityStack;->isOpaqueActivity(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityStack;->isSingleTaskInstance()Z
+HSPLcom/android/server/wm/ActivityStack;->isMinimizedDockAndHomeStackResizable()Z
+HPLcom/android/server/wm/ActivityStack;->isOnHomeDisplay()Z
+HPLcom/android/server/wm/ActivityStack;->isOpaqueActivity(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityStack;->isSingleTaskInstance()Z
 HSPLcom/android/server/wm/ActivityStack;->isStackTranslucent(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityStack;->isTaskSwitch(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityStack;->isTopRunningNonDelayed(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityStack;->isTopStackOnDisplay()Z
-PLcom/android/server/wm/ActivityStack;->lambda$GDPUuzTvyfp2z6wYxqAF0vhMJK8(Lcom/android/server/wm/Task;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/ActivityStack;->lambda$MbOt7bGpxw9wmjZ8kOCkYcDCqMQ(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/ActivityStack;->isTaskAnimating()Z
+HSPLcom/android/server/wm/ActivityStack;->isTaskSwitch(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityStack;->isTopActivityFocusable()Z
+HPLcom/android/server/wm/ActivityStack;->isTopActivityVisible()Z
+HPLcom/android/server/wm/ActivityStack;->isTopRunningNonDelayed(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/ActivityStack;->isTopSplitScreenStack()Z
+HSPLcom/android/server/wm/ActivityStack;->isTopStackOnDisplay()Z
+PLcom/android/server/wm/ActivityStack;->isTransientWindowingMode(I)Z
+HPLcom/android/server/wm/ActivityStack;->lambda$GDPUuzTvyfp2z6wYxqAF0vhMJK8(Lcom/android/server/wm/Task;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/ActivityStack;->lambda$MbOt7bGpxw9wmjZ8kOCkYcDCqMQ(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityStack;->lambda$N2PfGF62p6Y1TYGt9lvFtsW9LmQ(Lcom/android/server/wm/ActivityRecord;Landroid/os/IBinder;)Z
 PLcom/android/server/wm/ActivityStack;->lambda$U5MWhpArTVT_b8W6GtTa1Ao8HFs(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/ActivityStack;->lambda$VIuWlCdKwIo4qqRlevMLniedZ7o(Lcom/android/server/wm/Task;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/ActivityStack;->lambda$YAQEcQUrLqR06xiJJApMvOPIxhg(Lcom/android/server/wm/Task;Landroid/os/IBinder;)V
 PLcom/android/server/wm/ActivityStack;->lambda$animateResizePinnedStack$15$ActivityStack(Lcom/android/server/wm/DisplayContent;Landroid/graphics/Rect;Landroid/graphics/Rect;IIZZI)V
 HPLcom/android/server/wm/ActivityStack;->lambda$awakeFromSleepingLocked$5(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/ActivityStack;->lambda$beginImeAdjustAnimation$18(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityStack;->lambda$calculatePinnedBoundsForConfigChange$17$ActivityStack(Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/ActivityStack;->lambda$dumpActivities$13$ActivityStack(ZLjava/io/PrintWriter;Ljava/io/FileDescriptor;ZZLjava/lang/String;Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/ActivityStack;->lambda$dhfbladKtxXwwdCS2dFdAfUfBN4(Lcom/android/server/wm/Task;Landroid/view/ITaskOrganizer;)V
+PLcom/android/server/wm/ActivityStack;->lambda$dismissPip$16$ActivityStack()V
+HPLcom/android/server/wm/ActivityStack;->lambda$dumpActivities$13$ActivityStack(ZLjava/io/PrintWriter;Ljava/io/FileDescriptor;ZZLjava/lang/String;Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/ActivityStack;->lambda$dumpActivities$13(ZLjava/io/PrintWriter;Ljava/io/FileDescriptor;ZZLjava/lang/String;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityStack;->lambda$dumpDebug$21(Landroid/util/proto/ProtoOutputStream;ILcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityStack;->lambda$dumpDebugInnerStackOnly$22(Landroid/util/proto/ProtoOutputStream;ILcom/android/server/wm/Task;)V
-PLcom/android/server/wm/ActivityStack;->lambda$goToSleep$6(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/ActivityStack;->lambda$endImeAdjustAnimation$19(Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/ActivityStack;->lambda$finishAllActivitiesImmediately$9(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/ActivityStack;->lambda$finishIfVoiceTask$8(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/ActivityStack;->lambda$getDumpActivitiesLocked$14(Lcom/android/server/am/ActivityManagerService$ItemMatcher;Ljava/util/ArrayList;Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityStack;->lambda$goToSleep$6(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/ActivityStack;->lambda$navigateUpTo$10(Landroid/content/ComponentName;Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/ActivityStack;->lambda$navigateUpTo$11(Lcom/android/server/wm/ActivityRecord;[I[Landroid/content/Intent;Lcom/android/server/wm/ActivityRecord;)Ljava/lang/Boolean;
+PLcom/android/server/wm/ActivityStack;->lambda$onAnimationStart$20(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/ActivityStack;->lambda$onConfigurationChanged$0(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/ActivityStack;->lambda$resetCurrentBoundsAnimation$17$ActivityStack(Lcom/android/server/wm/BoundsAnimationController;)V
 HSPLcom/android/server/wm/ActivityStack;->lambda$setWindowingMode$1$ActivityStack(IZZZZZ)V
-HPLcom/android/server/wm/ActivityStack;->lambda$topRunningActivity$2(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityStack;->lambda$topRunningActivity$2(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/ActivityStack;->lambda$topRunningNonOverlayTaskActivity$3(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityStack;->lambda$willActivityBeVisible$12(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityStack;->lastAnimatingBoundsWasToFullscreen()Z
-PLcom/android/server/wm/ActivityStack;->minimalResumeActivityLocked(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityStack;->lastAnimatingBoundsWasToFullscreen()Z
+HSPLcom/android/server/wm/ActivityStack;->minimalResumeActivityLocked(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityStack;->moveHomeStackToFrontIfNeeded(ZLcom/android/server/wm/DisplayContent;Ljava/lang/String;)V
+HPLcom/android/server/wm/ActivityStack;->moveTaskToBack(Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/ActivityStack;->moveTaskToFrontLocked(Lcom/android/server/wm/Task;ZLandroid/app/ActivityOptions;Lcom/android/server/am/AppTimeTracker;Ljava/lang/String;)V
-PLcom/android/server/wm/ActivityStack;->moveToFront(Ljava/lang/String;)V
-HPLcom/android/server/wm/ActivityStack;->moveToFront(Ljava/lang/String;Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/ActivityStack;->moveTaskToFrontLocked(Lcom/android/server/wm/Task;ZLandroid/app/ActivityOptions;Lcom/android/server/am/AppTimeTracker;ZLjava/lang/String;)V
+PLcom/android/server/wm/ActivityStack;->moveToBack(Ljava/lang/String;Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/ActivityStack;->moveToFront(Ljava/lang/String;)V
+HSPLcom/android/server/wm/ActivityStack;->moveToFront(Ljava/lang/String;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityStack;->moveToFrontAndResumeStateIfNeeded(Lcom/android/server/wm/ActivityRecord;ZZZLjava/lang/String;)V
-PLcom/android/server/wm/ActivityStack;->notifyActivityDrawnLocked(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStack;->onActivityAddedToStack(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStack;->onActivityRemovedFromStack(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStack;->onActivityStateChanged(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityStack$ActivityState;Ljava/lang/String;)V
-PLcom/android/server/wm/ActivityStack;->onAnimationEnd(ZLandroid/graphics/Rect;Z)V
-PLcom/android/server/wm/ActivityStack;->onAnimationStart(ZZI)Z
-HPLcom/android/server/wm/ActivityStack;->onChildPositionChanged(Lcom/android/server/wm/WindowContainer;)V
+PLcom/android/server/wm/ActivityStack;->navigateUpTo(Lcom/android/server/wm/ActivityRecord;Landroid/content/Intent;ILandroid/content/Intent;)Z
+HSPLcom/android/server/wm/ActivityStack;->notifyActivityDrawnLocked(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityStack;->onActivityAddedToStack(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityStack;->onActivityRemovedFromStack(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityStack;->onActivityStateChanged(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityStack$ActivityState;Ljava/lang/String;)V
+PLcom/android/server/wm/ActivityStack;->onAllWindowsDrawn()V
+HPLcom/android/server/wm/ActivityStack;->onAnimationEnd(ZLandroid/graphics/Rect;Z)V
+HPLcom/android/server/wm/ActivityStack;->onAnimationStart(ZZI)Z
+HSPLcom/android/server/wm/ActivityStack;->onChildPositionChanged(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/ActivityStack;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/ActivityStack;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/ActivityStack;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
+HPLcom/android/server/wm/ActivityStack;->onPipAnimationEndResize()V
 HPLcom/android/server/wm/ActivityStack;->positionChildAt(ILcom/android/server/wm/Task;ZZ)I
-PLcom/android/server/wm/ActivityStack;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
-PLcom/android/server/wm/ActivityStack;->positionChildAtTop(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/ActivityStack;->prepareFreezingTaskBounds()V
+HSPLcom/android/server/wm/ActivityStack;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+PLcom/android/server/wm/ActivityStack;->positionChildAtBottom(Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/ActivityStack;->positionChildAtBottom(Lcom/android/server/wm/Task;Z)V
+HSPLcom/android/server/wm/ActivityStack;->positionChildAtTop(Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/ActivityStack;->postReparent()V
+HSPLcom/android/server/wm/ActivityStack;->prepareFreezingTaskBounds()V
 HSPLcom/android/server/wm/ActivityStack;->prepareSurfaces()V
-PLcom/android/server/wm/ActivityStack;->processTaskResizeBounds(Lcom/android/server/wm/Task;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/ActivityStack;->processTaskResizeBounds(Lcom/android/server/wm/Task;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/ActivityStack;->removeChild(Lcom/android/server/wm/WindowContainer;)V
 HPLcom/android/server/wm/ActivityStack;->removeChild(Lcom/android/server/wm/WindowContainer;Ljava/lang/String;)V
 PLcom/android/server/wm/ActivityStack;->removeDestroyTimeoutForActivity(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityStack;->removeHistoryRecordsForApp(Lcom/android/server/wm/WindowProcessController;)Z
 HSPLcom/android/server/wm/ActivityStack;->removeHistoryRecordsForApp(Ljava/util/ArrayList;Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;)V
 PLcom/android/server/wm/ActivityStack;->removeIfPossible()V
-PLcom/android/server/wm/ActivityStack;->removeLaunchTickMessages()V
+PLcom/android/server/wm/ActivityStack;->removeImmediately()V
+HSPLcom/android/server/wm/ActivityStack;->removeLaunchTickMessages()V
 PLcom/android/server/wm/ActivityStack;->removePauseTimeoutForActivity(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityStack;->removeStopTimeoutForActivity(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityStack;->removeTimeoutsForActivity(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/ActivityStack;->repositionSplitScreenStackAfterRotation(Landroid/content/res/Configuration;ZLandroid/graphics/Rect;)V
 HSPLcom/android/server/wm/ActivityStack;->resetAdjustedForIme(Z)V
-PLcom/android/server/wm/ActivityStack;->resetTaskIfNeeded(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/ActivityStack;->resize(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZZ)V
+PLcom/android/server/wm/ActivityStack;->resetCurrentBoundsAnimation(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/ActivityStack;->resetTaskIfNeeded(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityStack;->resize(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZZ)V
+HSPLcom/android/server/wm/ActivityStack;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
 PLcom/android/server/wm/ActivityStack;->resumeNextFocusableActivityWhenStackIsEmpty(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
-PLcom/android/server/wm/ActivityStack;->resumeTopActivityInnerLocked(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
-PLcom/android/server/wm/ActivityStack;->resumeTopActivityUncheckedLocked(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
-PLcom/android/server/wm/ActivityStack;->returnsToHomeStack()Z
+HSPLcom/android/server/wm/ActivityStack;->resumeTopActivityInnerLocked(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
+HSPLcom/android/server/wm/ActivityStack;->resumeTopActivityUncheckedLocked(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
+HPLcom/android/server/wm/ActivityStack;->returnsToHomeStack()Z
 PLcom/android/server/wm/ActivityStack;->scheduleDestroyTimeoutForActivity(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityStack;->scheduleLaunchTickForActivity(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityStack;->schedulePauseTimeoutForActivity(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityStack;->scheduleStopTimeoutForActivity(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStack;->setAdjustedBounds(Landroid/graphics/Rect;)V
-PLcom/android/server/wm/ActivityStack;->setAnimationFinalBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;Z)V
-PLcom/android/server/wm/ActivityStack;->setBounds(Landroid/graphics/Rect;)I
-PLcom/android/server/wm/ActivityStack;->setPictureInPictureAspectRatio(F)V
-PLcom/android/server/wm/ActivityStack;->setPinnedStackAlpha(F)Z
-PLcom/android/server/wm/ActivityStack;->setPinnedStackSize(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
-PLcom/android/server/wm/ActivityStack;->setResumedActivity(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
+HPLcom/android/server/wm/ActivityStack;->setAdjustedBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/ActivityStack;->setAdjustedForIme(Lcom/android/server/wm/WindowState;Z)V
+HPLcom/android/server/wm/ActivityStack;->setAnimationFinalBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;Z)V
+HSPLcom/android/server/wm/ActivityStack;->setBounds(Landroid/graphics/Rect;)I
+HSPLcom/android/server/wm/ActivityStack;->setBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)I
+PLcom/android/server/wm/ActivityStack;->setPictureInPictureActions(Ljava/util/List;)V
+HPLcom/android/server/wm/ActivityStack;->setPictureInPictureAspectRatio(F)V
+HPLcom/android/server/wm/ActivityStack;->setPinnedStackAlpha(F)Z
+HPLcom/android/server/wm/ActivityStack;->setPinnedStackSize(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+HSPLcom/android/server/wm/ActivityStack;->setResumedActivity(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
+PLcom/android/server/wm/ActivityStack;->setTaskBounds(Landroid/graphics/Rect;)V
+PLcom/android/server/wm/ActivityStack;->setTaskBounds(Lcom/android/server/wm/Task;Landroid/graphics/Rect;)V
+PLcom/android/server/wm/ActivityStack;->setTaskDisplayedBounds(Landroid/graphics/Rect;)V
 PLcom/android/server/wm/ActivityStack;->setWindowingMode(I)V
 HSPLcom/android/server/wm/ActivityStack;->setWindowingMode(IZZZZZ)V
 HSPLcom/android/server/wm/ActivityStack;->setWindowingModeInSurfaceTransaction(IZZZZZ)V
 HSPLcom/android/server/wm/ActivityStack;->shouldBeVisible(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityStack;->shouldDeferStartOnMoveToFullscreen()Z
-HPLcom/android/server/wm/ActivityStack;->shouldIgnoreInput()Z
+HSPLcom/android/server/wm/ActivityStack;->shouldIgnoreInput()Z
 HSPLcom/android/server/wm/ActivityStack;->shouldSleepActivities()Z
-PLcom/android/server/wm/ActivityStack;->shouldSleepOrShutDownActivities()Z
+HSPLcom/android/server/wm/ActivityStack;->shouldSleepOrShutDownActivities()Z
 PLcom/android/server/wm/ActivityStack;->shouldUpRecreateTaskLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)Z
-PLcom/android/server/wm/ActivityStack;->startActivityLocked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;ZZLandroid/app/ActivityOptions;)V
-PLcom/android/server/wm/ActivityStack;->startPausingLocked(ZZLcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/ActivityStack;->snapDockedStackAfterRotation(Landroid/content/res/Configuration;Landroid/view/DisplayCutout;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/ActivityStack;->startActivityLocked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;ZZLandroid/app/ActivityOptions;)V
+HPLcom/android/server/wm/ActivityStack;->startPausingLocked(ZZLcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/ActivityStack;->stopDimming()V
 HSPLcom/android/server/wm/ActivityStack;->toShortString()Ljava/lang/String;
 HSPLcom/android/server/wm/ActivityStack;->toString()Ljava/lang/String;
 HSPLcom/android/server/wm/ActivityStack;->topActivityOccludesKeyguard()Z
 HSPLcom/android/server/wm/ActivityStack;->topRunningActivity()Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/ActivityStack;->topRunningActivity(Z)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/ActivityStack;->topRunningNonDelayedActivityLocked(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/ActivityStack;->updateAdjustedBounds()V
+HSPLcom/android/server/wm/ActivityStack;->topRunningNonDelayedActivityLocked(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
+PLcom/android/server/wm/ActivityStack;->topRunningNonOverlayTaskActivity()Lcom/android/server/wm/ActivityRecord;
+PLcom/android/server/wm/ActivityStack;->transferSingleTaskToOrganizer(Lcom/android/server/wm/Task;Landroid/view/ITaskOrganizer;)V
+PLcom/android/server/wm/ActivityStack;->transferToTaskOrganizer(Landroid/view/ITaskOrganizer;)V
+HPLcom/android/server/wm/ActivityStack;->updateAdjustForIme(FFZ)Z
+HPLcom/android/server/wm/ActivityStack;->updateAdjustedBounds()V
 PLcom/android/server/wm/ActivityStack;->updateBoundsAllowed(Landroid/graphics/Rect;)Z
+PLcom/android/server/wm/ActivityStack;->updateDisplayedBoundsAllowed(Landroid/graphics/Rect;)Z
 HPLcom/android/server/wm/ActivityStack;->updateLruList(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityStack;->updatePictureInPictureModeForPinnedStackAnimation(Landroid/graphics/Rect;Z)V
 HSPLcom/android/server/wm/ActivityStack;->updateSurfaceBounds()V
 HSPLcom/android/server/wm/ActivityStack;->updateSurfaceSize(Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/ActivityStack;->updateTransitLocked(ILandroid/app/ActivityOptions;)V
+HSPLcom/android/server/wm/ActivityStack;->updateTaskOrganizerState()V
+HPLcom/android/server/wm/ActivityStack;->updateTransitLocked(ILandroid/app/ActivityOptions;)V
 PLcom/android/server/wm/ActivityStack;->willActivityBeVisible(Landroid/os/IBinder;)Z
 HSPLcom/android/server/wm/ActivityStackSupervisor$ActivityStackSupervisorHandler;-><init>(Lcom/android/server/wm/ActivityStackSupervisor;Landroid/os/Looper;)V
+HPLcom/android/server/wm/ActivityStackSupervisor$ActivityStackSupervisorHandler;->activityIdleFromMessage(Lcom/android/server/wm/ActivityRecord;Z)V
 PLcom/android/server/wm/ActivityStackSupervisor$ActivityStackSupervisorHandler;->activityIdleInternal(Lcom/android/server/wm/ActivityRecord;Z)V
-PLcom/android/server/wm/ActivityStackSupervisor$ActivityStackSupervisorHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/wm/ActivityStackSupervisor$ActivityStackSupervisorHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/wm/ActivityStackSupervisor$ActivityStackSupervisorHandler;->handleMessageInner(Landroid/os/Message;)Z
 HSPLcom/android/server/wm/ActivityStackSupervisor$MoveTaskToFullscreenHelper;-><init>(Lcom/android/server/wm/ActivityStackSupervisor;)V
 HSPLcom/android/server/wm/ActivityStackSupervisor$MoveTaskToFullscreenHelper;-><init>(Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/ActivityStackSupervisor$1;)V
 PLcom/android/server/wm/ActivityStackSupervisor$MoveTaskToFullscreenHelper;->lambda$n0VOwWNM3mud17SnHip7XMiWlWE(Lcom/android/server/wm/ActivityStackSupervisor$MoveTaskToFullscreenHelper;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityStackSupervisor$MoveTaskToFullscreenHelper;->process(Lcom/android/server/wm/ActivityStack;Lcom/android/server/wm/DisplayContent;ZZ)V
 PLcom/android/server/wm/ActivityStackSupervisor$MoveTaskToFullscreenHelper;->processTask(Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/ActivityStackSupervisor$PendingActivityLaunch;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/ActivityStack;Lcom/android/server/wm/WindowProcessController;)V
 HSPLcom/android/server/wm/ActivityStackSupervisor;-><clinit>()V
 HSPLcom/android/server/wm/ActivityStackSupervisor;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/Looper;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->access$100(Lcom/android/server/wm/ActivityStackSupervisor;)Landroid/app/ActivityOptions;
+PLcom/android/server/wm/ActivityStackSupervisor;->access$200(Lcom/android/server/wm/ActivityStackSupervisor;)Ljava/util/ArrayList;
 PLcom/android/server/wm/ActivityStackSupervisor;->access$300(Lcom/android/server/wm/ActivityStackSupervisor;)Ljava/util/ArrayList;
 PLcom/android/server/wm/ActivityStackSupervisor;->access$400(Lcom/android/server/wm/ActivityStackSupervisor;)Landroid/graphics/Rect;
+PLcom/android/server/wm/ActivityStackSupervisor;->access$500(Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/ActivityRecord;ZLjava/lang/String;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->access$600(Lcom/android/server/wm/ActivityStackSupervisor;)Lcom/android/server/wm/ActivityStackSupervisor$ActivityStackSupervisorHandler;
-PLcom/android/server/wm/ActivityStackSupervisor;->acquireLaunchWakelock()V
+PLcom/android/server/wm/ActivityStackSupervisor;->access$600(Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->access$700(Lcom/android/server/wm/ActivityStackSupervisor;)Lcom/android/server/wm/ActivityStackSupervisor$ActivityStackSupervisorHandler;
+HPLcom/android/server/wm/ActivityStackSupervisor;->acquireLaunchWakelock()V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->activityIdleInternal(Lcom/android/server/wm/ActivityRecord;ZZLandroid/content/res/Configuration;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->activityIdleInternalLocked(Landroid/os/IBinder;ZZLandroid/content/res/Configuration;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/ActivityStackSupervisor;->activitySleptLocked(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/ActivityStackSupervisor;->activityRelaunchedLocked(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->activitySleptLocked(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->addToMultiWindowModeChangedList(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->addToPipModeChangedList(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStackSupervisor;->beginDeferResume()V
-PLcom/android/server/wm/ActivityStackSupervisor;->canPlaceEntityOnDisplay(IIILandroid/content/pm/ActivityInfo;)Z
-PLcom/android/server/wm/ActivityStackSupervisor;->canUseActivityOptionsLaunchBounds(Landroid/app/ActivityOptions;)Z
-PLcom/android/server/wm/ActivityStackSupervisor;->checkFinishBootingLocked()Z
-PLcom/android/server/wm/ActivityStackSupervisor;->checkReadyForSleepLocked(Z)V
-PLcom/android/server/wm/ActivityStackSupervisor;->checkStartAnyActivityPermission(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/String;IIILjava/lang/String;ZZLcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityStack;)Z
+HSPLcom/android/server/wm/ActivityStackSupervisor;->beginDeferResume()V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->canPlaceEntityOnDisplay(IIILandroid/content/pm/ActivityInfo;)Z
+HSPLcom/android/server/wm/ActivityStackSupervisor;->canUseActivityOptionsLaunchBounds(Landroid/app/ActivityOptions;)Z
+HSPLcom/android/server/wm/ActivityStackSupervisor;->checkFinishBootingLocked()Z
+HPLcom/android/server/wm/ActivityStackSupervisor;->checkReadyForSleepLocked(Z)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->checkStartAnyActivityPermission(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/String;IIILjava/lang/String;ZZLcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityStack;)Z
 HPLcom/android/server/wm/ActivityStackSupervisor;->cleanUpRemovedTaskLocked(Lcom/android/server/wm/Task;ZZ)V
-PLcom/android/server/wm/ActivityStackSupervisor;->cleanupActivity(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStackSupervisor;->comeOutOfSleepIfNeededLocked()V
-PLcom/android/server/wm/ActivityStackSupervisor;->continueUpdateRecentsHomeStackBounds()V
+HPLcom/android/server/wm/ActivityStackSupervisor;->cleanupActivity(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->comeOutOfSleepIfNeededLocked()V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->continueUpdateRecentsHomeStackBounds()V
+PLcom/android/server/wm/ActivityStackSupervisor;->deferUpdateRecentsHomeStackBounds()V
 HSPLcom/android/server/wm/ActivityStackSupervisor;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/wm/ActivityStackSupervisor;->dumpHistoryList(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;ZZZLjava/lang/String;ZLjava/lang/String;Lcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/ActivityStackSupervisor;->endDeferResume()V
-PLcom/android/server/wm/ActivityStackSupervisor;->findTaskToMoveToFront(Lcom/android/server/wm/Task;ILandroid/app/ActivityOptions;Ljava/lang/String;Z)V
-PLcom/android/server/wm/ActivityStackSupervisor;->getActionRestrictionForCallingPackage(Ljava/lang/String;Ljava/lang/String;II)I
+HSPLcom/android/server/wm/ActivityStackSupervisor;->endDeferResume()V
+HPLcom/android/server/wm/ActivityStackSupervisor;->findTaskToMoveToFront(Lcom/android/server/wm/Task;ILandroid/app/ActivityOptions;Ljava/lang/String;Z)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->getActionRestrictionForCallingPackage(Ljava/lang/String;Ljava/lang/String;II)I
 HSPLcom/android/server/wm/ActivityStackSupervisor;->getActivityMetricsLogger()Lcom/android/server/wm/ActivityMetricsLogger;
-PLcom/android/server/wm/ActivityStackSupervisor;->getComponentRestrictionForCallingPackage(Landroid/content/pm/ActivityInfo;Ljava/lang/String;IIZ)I
+HPLcom/android/server/wm/ActivityStackSupervisor;->getComponentRestrictionForCallingPackage(Landroid/content/pm/ActivityInfo;Ljava/lang/String;IIZ)I
 HSPLcom/android/server/wm/ActivityStackSupervisor;->getKeyguardController()Lcom/android/server/wm/KeyguardController;
-PLcom/android/server/wm/ActivityStackSupervisor;->getLaunchParamsController()Lcom/android/server/wm/LaunchParamsController;
+HSPLcom/android/server/wm/ActivityStackSupervisor;->getLaunchParamsController()Lcom/android/server/wm/LaunchParamsController;
+HSPLcom/android/server/wm/ActivityStackSupervisor;->getNextTaskIdForUser()I
+HSPLcom/android/server/wm/ActivityStackSupervisor;->getNextTaskIdForUser(I)I
 PLcom/android/server/wm/ActivityStackSupervisor;->getNextTaskIdForUserLocked(I)I
 PLcom/android/server/wm/ActivityStackSupervisor;->getReparentTargetStack(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityStack;Z)Lcom/android/server/wm/ActivityStack;
 PLcom/android/server/wm/ActivityStackSupervisor;->getRunningTasks()Lcom/android/server/wm/RunningTasks;
-PLcom/android/server/wm/ActivityStackSupervisor;->getSystemChooserActivity()Landroid/content/ComponentName;
-PLcom/android/server/wm/ActivityStackSupervisor;->goingToSleepLocked()V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->getSystemChooserActivity()Landroid/content/ComponentName;
+PLcom/android/server/wm/ActivityStackSupervisor;->getUserInfo(I)Landroid/content/pm/UserInfo;
+HPLcom/android/server/wm/ActivityStackSupervisor;->goingToSleepLocked()V
+HPLcom/android/server/wm/ActivityStackSupervisor;->handleForcedResizableTaskIfNeeded(Lcom/android/server/wm/Task;I)V
 HPLcom/android/server/wm/ActivityStackSupervisor;->handleLaunchTaskBehindCompleteLocked(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStackSupervisor;->handleNonResizableTaskIfNeeded(Lcom/android/server/wm/Task;IILcom/android/server/wm/ActivityStack;)V
-HPLcom/android/server/wm/ActivityStackSupervisor;->handleNonResizableTaskIfNeeded(Lcom/android/server/wm/Task;IILcom/android/server/wm/ActivityStack;Z)V
-PLcom/android/server/wm/ActivityStackSupervisor;->handleTopResumedStateReleased(Z)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->handleNonResizableTaskIfNeeded(Lcom/android/server/wm/Task;IILcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->handleNonResizableTaskIfNeeded(Lcom/android/server/wm/Task;IILcom/android/server/wm/ActivityStack;Z)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->handleTopResumedStateReleased(Z)V
 HSPLcom/android/server/wm/ActivityStackSupervisor;->initPowerManagement()V
 HSPLcom/android/server/wm/ActivityStackSupervisor;->initialize()V
-PLcom/android/server/wm/ActivityStackSupervisor;->isCallerAllowedToLaunchOnDisplay(IIILandroid/content/pm/ActivityInfo;)Z
-PLcom/android/server/wm/ActivityStackSupervisor;->isCurrentProfileLocked(I)Z
+HSPLcom/android/server/wm/ActivityStackSupervisor;->isCallerAllowedToLaunchOnDisplay(IIILandroid/content/pm/ActivityInfo;)Z
+HSPLcom/android/server/wm/ActivityStackSupervisor;->isCurrentProfileLocked(I)Z
 PLcom/android/server/wm/ActivityStackSupervisor;->isStoppingNoHistoryActivity()Z
 PLcom/android/server/wm/ActivityStackSupervisor;->lambda$BFgD0ahFSDg4CqQNytqWrPRgFII(Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->lambda$activityIdleInternal$0$ActivityStackSupervisor()V
 PLcom/android/server/wm/ActivityStackSupervisor;->lambda$activityIdleInternalLocked$0$ActivityStackSupervisor()V
 PLcom/android/server/wm/ActivityStackSupervisor;->lambda$mLKHIIzkTAK9QSlSxia8-84y15M(Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->lambda$moveTasksToFullscreenStackLocked$1$ActivityStackSupervisor(Lcom/android/server/wm/ActivityStack;Z)V
-PLcom/android/server/wm/ActivityStackSupervisor;->logIfTransactionTooLarge(Landroid/content/Intent;Landroid/os/Bundle;)V
+PLcom/android/server/wm/ActivityStackSupervisor;->lambda$removeStack$2$ActivityStackSupervisor(Lcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->logIfTransactionTooLarge(Landroid/content/Intent;Landroid/os/Bundle;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->logStackState()V
-PLcom/android/server/wm/ActivityStackSupervisor;->moveHomeStackToFrontIfNeeded(ILcom/android/server/wm/DisplayContent;Ljava/lang/String;)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->moveHomeStackToFrontIfNeeded(ILcom/android/server/wm/DisplayContent;Ljava/lang/String;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->moveTasksToFullscreenStackInSurfaceTransaction(Lcom/android/server/wm/ActivityStack;IZ)V
-PLcom/android/server/wm/ActivityStackSupervisor;->nextTaskIdForUser(II)I
-PLcom/android/server/wm/ActivityStackSupervisor;->notifyAppTransitionDone()V
-PLcom/android/server/wm/ActivityStackSupervisor;->onRecentTaskAdded(Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/ActivityStackSupervisor;->moveTasksToFullscreenStackLocked(Lcom/android/server/wm/ActivityStack;Z)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->nextTaskIdForUser(II)I
+HSPLcom/android/server/wm/ActivityStackSupervisor;->notifyAppTransitionDone()V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->onRecentTaskAdded(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->onRecentTaskRemoved(Lcom/android/server/wm/Task;ZZ)V
 HSPLcom/android/server/wm/ActivityStackSupervisor;->onSystemReady()V
 PLcom/android/server/wm/ActivityStackSupervisor;->onUserUnlocked(I)V
 HSPLcom/android/server/wm/ActivityStackSupervisor;->printThisActivity(Ljava/io/PrintWriter;Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;ZLjava/lang/String;)Z
+PLcom/android/server/wm/ActivityStackSupervisor;->processStoppingActivities(Lcom/android/server/wm/ActivityRecord;ZZLjava/lang/String;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->processStoppingActivitiesLocked(Lcom/android/server/wm/ActivityRecord;ZZ)Ljava/util/ArrayList;
-PLcom/android/server/wm/ActivityStackSupervisor;->readyToResume()Z
-PLcom/android/server/wm/ActivityStackSupervisor;->realStartActivityLocked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;ZZ)Z
-PLcom/android/server/wm/ActivityStackSupervisor;->removeSleepTimeouts()V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->processStoppingAndFinishingActivities(Lcom/android/server/wm/ActivityRecord;ZLjava/lang/String;)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->readyToResume()Z
+HSPLcom/android/server/wm/ActivityStackSupervisor;->realStartActivityLocked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;ZZ)Z
+HSPLcom/android/server/wm/ActivityStackSupervisor;->removeHistoryRecords(Lcom/android/server/wm/WindowProcessController;)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->removeHistoryRecords(Ljava/util/ArrayList;Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->removeIdleTimeoutForActivity(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->removeSleepTimeouts()V
 PLcom/android/server/wm/ActivityStackSupervisor;->removeStack(Lcom/android/server/wm/ActivityStack;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->removeStackInSurfaceTransaction(Lcom/android/server/wm/ActivityStack;)V
-PLcom/android/server/wm/ActivityStackSupervisor;->removeTask(Lcom/android/server/wm/Task;ZZLjava/lang/String;)V
-PLcom/android/server/wm/ActivityStackSupervisor;->removeTaskById(IZZLjava/lang/String;)Z
+HPLcom/android/server/wm/ActivityStackSupervisor;->removeTask(Lcom/android/server/wm/Task;ZZLjava/lang/String;)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->removeTaskById(IZZLjava/lang/String;)Z
 PLcom/android/server/wm/ActivityStackSupervisor;->removeTimeoutsForActivityLocked(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStackSupervisor;->reportActivityLaunchedLocked(ZLcom/android/server/wm/ActivityRecord;JI)V
-PLcom/android/server/wm/ActivityStackSupervisor;->reportResumedActivityLocked(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityStackSupervisor;->reportWaitingActivityLaunchedIfNeeded(Lcom/android/server/wm/ActivityRecord;I)V
-PLcom/android/server/wm/ActivityStackSupervisor;->resizePinnedStackLocked(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/ActivityStackSupervisor;->resolveActivity(Landroid/content/Intent;Landroid/content/pm/ResolveInfo;ILandroid/app/ProfilerInfo;)Landroid/content/pm/ActivityInfo;
+HSPLcom/android/server/wm/ActivityStackSupervisor;->reportActivityLaunchedLocked(ZLcom/android/server/wm/ActivityRecord;JI)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->reportResumedActivityLocked(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityStackSupervisor;->reportWaitingActivityLaunchedIfNeeded(Lcom/android/server/wm/ActivityRecord;I)V
+PLcom/android/server/wm/ActivityStackSupervisor;->resizeDockedStackLocked(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Z)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->resizeDockedStackLocked(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZZ)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->resizePinnedStackLocked(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->resolveActivity(Landroid/content/Intent;Landroid/content/pm/ResolveInfo;ILandroid/app/ProfilerInfo;)Landroid/content/pm/ActivityInfo;
 PLcom/android/server/wm/ActivityStackSupervisor;->resolveActivity(Landroid/content/Intent;Ljava/lang/String;ILandroid/app/ProfilerInfo;II)Landroid/content/pm/ActivityInfo;
-PLcom/android/server/wm/ActivityStackSupervisor;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;III)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/wm/ActivityStackSupervisor;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;III)Landroid/content/pm/ResolveInfo;
+PLcom/android/server/wm/ActivityStackSupervisor;->restoreRecentTaskLocked(Lcom/android/server/wm/Task;Landroid/app/ActivityOptions;Z)Z
+HPLcom/android/server/wm/ActivityStackSupervisor;->scheduleIdle()V
 PLcom/android/server/wm/ActivityStackSupervisor;->scheduleIdleLocked()V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->scheduleIdleTimeout(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->scheduleIdleTimeoutLocked(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStackSupervisor;->scheduleLaunchTaskBehindComplete(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->scheduleLaunchTaskBehindComplete(Landroid/os/IBinder;)V
+PLcom/android/server/wm/ActivityStackSupervisor;->scheduleProcessStoppingAndFinishingActivities()V
 PLcom/android/server/wm/ActivityStackSupervisor;->scheduleResumeTopActivities()V
-PLcom/android/server/wm/ActivityStackSupervisor;->scheduleSleepTimeout()V
-PLcom/android/server/wm/ActivityStackSupervisor;->scheduleTopResumedActivityStateIfNeeded()V
-PLcom/android/server/wm/ActivityStackSupervisor;->scheduleTopResumedStateLossTimeout(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStackSupervisor;->scheduleUpdateMultiWindowMode(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->scheduleSleepTimeout()V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->scheduleTopResumedActivityStateIfNeeded()V
+HPLcom/android/server/wm/ActivityStackSupervisor;->scheduleTopResumedStateLossTimeout(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityStackSupervisor;->scheduleUpdateMultiWindowMode(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->scheduleUpdatePictureInPictureModeIfNeeded(Lcom/android/server/wm/Task;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->scheduleUpdatePictureInPictureModeIfNeeded(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityStack;)V
-PLcom/android/server/wm/ActivityStackSupervisor;->setLaunchSource(I)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->setLaunchSource(I)V
+PLcom/android/server/wm/ActivityStackSupervisor;->setNextTaskIdForUser(II)V
 PLcom/android/server/wm/ActivityStackSupervisor;->setNextTaskIdForUserLocked(II)V
 HSPLcom/android/server/wm/ActivityStackSupervisor;->setRecentTasks(Lcom/android/server/wm/RecentTasks;)V
+PLcom/android/server/wm/ActivityStackSupervisor;->setResizingDuringAnimation(Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/ActivityStackSupervisor;->setRunningTasks(Lcom/android/server/wm/RunningTasks;)V
+PLcom/android/server/wm/ActivityStackSupervisor;->setSplitScreenResizing(Z)V
 HSPLcom/android/server/wm/ActivityStackSupervisor;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
-PLcom/android/server/wm/ActivityStackSupervisor;->startActivityFromRecents(IIILcom/android/server/wm/SafeActivityOptions;)I
-HPLcom/android/server/wm/ActivityStackSupervisor;->startSpecificActivity(Lcom/android/server/wm/ActivityRecord;ZZ)V
-PLcom/android/server/wm/ActivityStackSupervisor;->stopWaitingForActivityVisible(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityStackSupervisor;->stopWaitingForActivityVisible(Lcom/android/server/wm/ActivityRecord;J)V
-PLcom/android/server/wm/ActivityStackSupervisor;->updateHomeProcess(Lcom/android/server/wm/WindowProcessController;)V
+PLcom/android/server/wm/ActivityStackSupervisor;->shutdownLocked(I)Z
+HPLcom/android/server/wm/ActivityStackSupervisor;->startActivityFromRecents(IIILcom/android/server/wm/SafeActivityOptions;)I
+HSPLcom/android/server/wm/ActivityStackSupervisor;->startSpecificActivity(Lcom/android/server/wm/ActivityRecord;ZZ)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->stopWaitingForActivityVisible(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->stopWaitingForActivityVisible(Lcom/android/server/wm/ActivityRecord;J)V
+HSPLcom/android/server/wm/ActivityStackSupervisor;->updateHomeProcess(Lcom/android/server/wm/WindowProcessController;)V
 PLcom/android/server/wm/ActivityStackSupervisor;->updatePictureInPictureMode(Lcom/android/server/wm/Task;Landroid/graphics/Rect;Z)V
 HSPLcom/android/server/wm/ActivityStackSupervisor;->updateTopResumedActivityIfNeeded()V
+PLcom/android/server/wm/ActivityStackSupervisor;->wakeUp(Ljava/lang/String;)V
 HSPLcom/android/server/wm/ActivityStartController$StartHandler;-><init>(Lcom/android/server/wm/ActivityStartController;Landroid/os/Looper;)V
-PLcom/android/server/wm/ActivityStartController$StartHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/wm/ActivityStartController$StartHandler;->handleMessage(Landroid/os/Message;)V
 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/ActivityStackSupervisor;Lcom/android/server/wm/ActivityStarter$Factory;)V
+PLcom/android/server/wm/ActivityStartController;->access$000(Lcom/android/server/wm/ActivityStartController;)Lcom/android/server/wm/ActivityTaskManagerService;
+PLcom/android/server/wm/ActivityStartController;->addPendingActivityLaunch(Lcom/android/server/wm/ActivityStackSupervisor$PendingActivityLaunch;)V
 PLcom/android/server/wm/ActivityStartController;->checkTargetUser(IZIILjava/lang/String;)I
-PLcom/android/server/wm/ActivityStartController;->clearPendingActivityLaunches(Ljava/lang/String;)Z
-PLcom/android/server/wm/ActivityStartController;->doPendingActivityLaunches(Z)V
+HPLcom/android/server/wm/ActivityStartController;->clearPendingActivityLaunches(Ljava/lang/String;)Z
+HSPLcom/android/server/wm/ActivityStartController;->doPendingActivityLaunches(Z)V
 PLcom/android/server/wm/ActivityStartController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/wm/ActivityStartController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/ActivityStartController;->getPendingRemoteAnimationRegistry()Lcom/android/server/wm/PendingRemoteAnimationRegistry;
-PLcom/android/server/wm/ActivityStartController;->obtainStarter(Landroid/content/Intent;Ljava/lang/String;)Lcom/android/server/wm/ActivityStarter;
-PLcom/android/server/wm/ActivityStartController;->onExecutionComplete(Lcom/android/server/wm/ActivityStarter;)V
+HSPLcom/android/server/wm/ActivityStartController;->getPendingRemoteAnimationRegistry()Lcom/android/server/wm/PendingRemoteAnimationRegistry;
+HSPLcom/android/server/wm/ActivityStartController;->obtainStarter(Landroid/content/Intent;Ljava/lang/String;)Lcom/android/server/wm/ActivityStarter;
+HSPLcom/android/server/wm/ActivityStartController;->onExecutionComplete(Lcom/android/server/wm/ActivityStarter;)V
 PLcom/android/server/wm/ActivityStartController;->postStartActivityProcessingForLastStarter(Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/ActivityStack;)V
-PLcom/android/server/wm/ActivityStartController;->startActivities(Landroid/app/IApplicationThread;IIILjava/lang/String;[Landroid/content/Intent;[Ljava/lang/String;Landroid/os/IBinder;Lcom/android/server/wm/SafeActivityOptions;ILjava/lang/String;Lcom/android/server/am/PendingIntentRecord;Z)I
+PLcom/android/server/wm/ActivityStartController;->registerRemoteAnimationForNextActivityStart(Ljava/lang/String;Landroid/view/RemoteAnimationAdapter;)V
+HPLcom/android/server/wm/ActivityStartController;->schedulePendingActivityLaunches(J)V
+HPLcom/android/server/wm/ActivityStartController;->startActivities(Landroid/app/IApplicationThread;IIILjava/lang/String;[Landroid/content/Intent;[Ljava/lang/String;Landroid/os/IBinder;Lcom/android/server/wm/SafeActivityOptions;ILjava/lang/String;Lcom/android/server/am/PendingIntentRecord;Z)I
 PLcom/android/server/wm/ActivityStartController;->startActivitiesInPackage(IIILjava/lang/String;[Landroid/content/Intent;[Ljava/lang/String;Landroid/os/IBinder;Lcom/android/server/wm/SafeActivityOptions;IZLcom/android/server/am/PendingIntentRecord;Z)I
-PLcom/android/server/wm/ActivityStartController;->startActivityInPackage(IIILjava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILcom/android/server/wm/SafeActivityOptions;ILcom/android/server/wm/Task;Ljava/lang/String;ZLcom/android/server/am/PendingIntentRecord;Z)I
-PLcom/android/server/wm/ActivityStartController;->startHomeActivity(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/String;I)V
-PLcom/android/server/wm/ActivityStartController;->startSetupActivity()V
+PLcom/android/server/wm/ActivityStartController;->startActivitiesInPackage(ILjava/lang/String;[Landroid/content/Intent;[Ljava/lang/String;Landroid/os/IBinder;Lcom/android/server/wm/SafeActivityOptions;IZLcom/android/server/am/PendingIntentRecord;Z)I
+HPLcom/android/server/wm/ActivityStartController;->startActivityInPackage(IIILjava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILcom/android/server/wm/SafeActivityOptions;ILcom/android/server/wm/Task;Ljava/lang/String;ZLcom/android/server/am/PendingIntentRecord;Z)I
+HSPLcom/android/server/wm/ActivityStartController;->startHomeActivity(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/String;I)V
+HSPLcom/android/server/wm/ActivityStartController;->startSetupActivity()V
 HSPLcom/android/server/wm/ActivityStartInterceptor;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityStackSupervisor;)V
 HSPLcom/android/server/wm/ActivityStartInterceptor;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/RootActivityContainer;Landroid/content/Context;)V
-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;IILandroid/app/ActivityOptions;)Z
-PLcom/android/server/wm/ActivityStartInterceptor;->interceptHarmfulAppIfNeeded()Z
-PLcom/android/server/wm/ActivityStartInterceptor;->interceptQuietProfileIfNeeded()Z
-PLcom/android/server/wm/ActivityStartInterceptor;->interceptSuspendedPackageIfNeeded()Z
-PLcom/android/server/wm/ActivityStartInterceptor;->interceptWithConfirmCredentialsIfNeeded(Landroid/content/pm/ActivityInfo;I)Landroid/content/Intent;
-PLcom/android/server/wm/ActivityStartInterceptor;->interceptWorkProfileChallengeIfNeeded()Z
-PLcom/android/server/wm/ActivityStartInterceptor;->setStates(IIIILjava/lang/String;)V
+HSPLcom/android/server/wm/ActivityStartInterceptor;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/RootWindowContainer;Landroid/content/Context;)V
+PLcom/android/server/wm/ActivityStartInterceptor;->createIntentSenderForOriginalIntent(II)Landroid/content/IntentSender;
+PLcom/android/server/wm/ActivityStartInterceptor;->deferCrossProfileAppsAnimationIfNecessary()Landroid/os/Bundle;
+PLcom/android/server/wm/ActivityStartInterceptor;->hasCrossProfileAnimation()Z
+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;IILandroid/app/ActivityOptions;)Z
+HSPLcom/android/server/wm/ActivityStartInterceptor;->interceptHarmfulAppIfNeeded()Z
+HSPLcom/android/server/wm/ActivityStartInterceptor;->interceptLockTaskModeViolationPackageIfNeeded()Z
+HSPLcom/android/server/wm/ActivityStartInterceptor;->interceptQuietProfileIfNeeded()Z
+HSPLcom/android/server/wm/ActivityStartInterceptor;->interceptSuspendedPackageIfNeeded()Z
+HSPLcom/android/server/wm/ActivityStartInterceptor;->interceptWithConfirmCredentialsIfNeeded(Landroid/content/pm/ActivityInfo;I)Landroid/content/Intent;
+HSPLcom/android/server/wm/ActivityStartInterceptor;->interceptWorkProfileChallengeIfNeeded()Z
+HSPLcom/android/server/wm/ActivityStartInterceptor;->setStates(IIIILjava/lang/String;)V
 HSPLcom/android/server/wm/ActivityStarter$DefaultFactory;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/ActivityStartInterceptor;)V
-PLcom/android/server/wm/ActivityStarter$DefaultFactory;->obtain()Lcom/android/server/wm/ActivityStarter;
-PLcom/android/server/wm/ActivityStarter$DefaultFactory;->recycle(Lcom/android/server/wm/ActivityStarter;)V
+HSPLcom/android/server/wm/ActivityStarter$DefaultFactory;->obtain()Lcom/android/server/wm/ActivityStarter;
+HSPLcom/android/server/wm/ActivityStarter$DefaultFactory;->recycle(Lcom/android/server/wm/ActivityStarter;)V
 HSPLcom/android/server/wm/ActivityStarter$DefaultFactory;->setController(Lcom/android/server/wm/ActivityStartController;)V
-PLcom/android/server/wm/ActivityStarter$Request;-><init>()V
-PLcom/android/server/wm/ActivityStarter$Request;->reset()V
+HSPLcom/android/server/wm/ActivityStarter$Request;-><init>()V
+HSPLcom/android/server/wm/ActivityStarter$Request;->reset()V
 HPLcom/android/server/wm/ActivityStarter$Request;->resolveActivity(Lcom/android/server/wm/ActivityStackSupervisor;)V
-PLcom/android/server/wm/ActivityStarter$Request;->set(Lcom/android/server/wm/ActivityStarter$Request;)V
-PLcom/android/server/wm/ActivityStarter;-><init>(Lcom/android/server/wm/ActivityStartController;Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/ActivityStartInterceptor;)V
-PLcom/android/server/wm/ActivityStarter;->addOrReparentStartingActivity(Lcom/android/server/wm/Task;Ljava/lang/String;)V
-PLcom/android/server/wm/ActivityStarter;->adjustLaunchFlagsToDocumentMode(Lcom/android/server/wm/ActivityRecord;ZZI)I
+HSPLcom/android/server/wm/ActivityStarter$Request;->set(Lcom/android/server/wm/ActivityStarter$Request;)V
+HSPLcom/android/server/wm/ActivityStarter;-><init>(Lcom/android/server/wm/ActivityStartController;Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/ActivityStartInterceptor;)V
+HSPLcom/android/server/wm/ActivityStarter;->addOrReparentStartingActivity(Lcom/android/server/wm/Task;Ljava/lang/String;)V
+HSPLcom/android/server/wm/ActivityStarter;->adjustLaunchFlagsToDocumentMode(Lcom/android/server/wm/ActivityRecord;ZZI)I
 PLcom/android/server/wm/ActivityStarter;->canLaunchIntoFocusedStack(Lcom/android/server/wm/ActivityRecord;Z)Z
-PLcom/android/server/wm/ActivityStarter;->complyActivityFlags(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStarter;->computeLaunchingTaskFlags()V
+HPLcom/android/server/wm/ActivityStarter;->complyActivityFlags(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityStarter;->computeLaunchParams(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/ActivityStarter;->computeLaunchingTaskFlags()V
 PLcom/android/server/wm/ActivityStarter;->computeResolveFilterUid(III)I
-PLcom/android/server/wm/ActivityStarter;->computeSourceStack()V
+HSPLcom/android/server/wm/ActivityStarter;->computeSourceStack()V
 PLcom/android/server/wm/ActivityStarter;->computeStackFocus(Lcom/android/server/wm/ActivityRecord;ZILandroid/app/ActivityOptions;)Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/ActivityStarter;->computeTargetTask()Lcom/android/server/wm/Task;
-PLcom/android/server/wm/ActivityStarter;->deliverNewIntent(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityStarter;->deliverToCurrentTopIfNeeded(Lcom/android/server/wm/ActivityStack;)I
-PLcom/android/server/wm/ActivityStarter;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/wm/ActivityStarter;->execute()I
-HPLcom/android/server/wm/ActivityStarter;->executeRequest(Lcom/android/server/wm/ActivityStarter$Request;)I
-PLcom/android/server/wm/ActivityStarter;->getExternalResult(I)I
-PLcom/android/server/wm/ActivityStarter;->getLaunchStack(Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/Task;Landroid/app/ActivityOptions;)Lcom/android/server/wm/ActivityStack;
-HPLcom/android/server/wm/ActivityStarter;->getReusableTask()Lcom/android/server/wm/Task;
-PLcom/android/server/wm/ActivityStarter;->handleStartResult(Lcom/android/server/wm/ActivityRecord;I)Lcom/android/server/wm/ActivityStack;
-HPLcom/android/server/wm/ActivityStarter;->isAllowedToStart(Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/Task;)I
+HSPLcom/android/server/wm/ActivityStarter;->computeTargetTask()Lcom/android/server/wm/Task;
+HPLcom/android/server/wm/ActivityStarter;->deliverNewIntent(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityStarter;->deliverToCurrentTopIfNeeded(Lcom/android/server/wm/ActivityStack;)I
+HPLcom/android/server/wm/ActivityStarter;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/ActivityStarter;->execute()I
+HSPLcom/android/server/wm/ActivityStarter;->executeRequest(Lcom/android/server/wm/ActivityStarter$Request;)I
+HSPLcom/android/server/wm/ActivityStarter;->getExternalResult(I)I
+HSPLcom/android/server/wm/ActivityStarter;->getLaunchStack(Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/Task;Landroid/app/ActivityOptions;)Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/ActivityStarter;->getReusableTask()Lcom/android/server/wm/Task;
+PLcom/android/server/wm/ActivityStarter;->handleBackgroundActivityAbort(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityStarter;->handleStartResult(Lcom/android/server/wm/ActivityRecord;I)Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/ActivityStarter;->isAllowedToStart(Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/Task;)I
 PLcom/android/server/wm/ActivityStarter;->isDocumentLaunchesIntoExisting(I)Z
 PLcom/android/server/wm/ActivityStarter;->isLaunchModeOneOf(II)Z
-PLcom/android/server/wm/ActivityStarter;->onExecutionComplete()V
-PLcom/android/server/wm/ActivityStarter;->postStartActivityProcessing(Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/ActivityStarter;->onExecutionComplete()V
+HSPLcom/android/server/wm/ActivityStarter;->postStartActivityProcessing(Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/ActivityStack;)V
 HPLcom/android/server/wm/ActivityStarter;->recycleTask(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)I
-PLcom/android/server/wm/ActivityStarter;->reset(Z)V
-PLcom/android/server/wm/ActivityStarter;->resolveToHeavyWeightSwitcherIfNeeded()I
-PLcom/android/server/wm/ActivityStarter;->resumeTargetStackIfNeeded()V
-PLcom/android/server/wm/ActivityStarter;->sendNewTaskResultRequestIfNeeded()V
-PLcom/android/server/wm/ActivityStarter;->set(Lcom/android/server/wm/ActivityStarter;)V
-PLcom/android/server/wm/ActivityStarter;->setActivityInfo(Landroid/content/pm/ActivityInfo;)Lcom/android/server/wm/ActivityStarter;
-PLcom/android/server/wm/ActivityStarter;->setActivityOptions(Landroid/os/Bundle;)Lcom/android/server/wm/ActivityStarter;
-PLcom/android/server/wm/ActivityStarter;->setActivityOptions(Lcom/android/server/wm/SafeActivityOptions;)Lcom/android/server/wm/ActivityStarter;
+HSPLcom/android/server/wm/ActivityStarter;->reset(Z)V
+HSPLcom/android/server/wm/ActivityStarter;->resolveToHeavyWeightSwitcherIfNeeded()I
+HPLcom/android/server/wm/ActivityStarter;->resumeTargetStackIfNeeded()V
+HSPLcom/android/server/wm/ActivityStarter;->sendNewTaskResultRequestIfNeeded()V
+HSPLcom/android/server/wm/ActivityStarter;->set(Lcom/android/server/wm/ActivityStarter;)V
+HSPLcom/android/server/wm/ActivityStarter;->setActivityInfo(Landroid/content/pm/ActivityInfo;)Lcom/android/server/wm/ActivityStarter;
+HSPLcom/android/server/wm/ActivityStarter;->setActivityOptions(Landroid/os/Bundle;)Lcom/android/server/wm/ActivityStarter;
+HSPLcom/android/server/wm/ActivityStarter;->setActivityOptions(Lcom/android/server/wm/SafeActivityOptions;)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setAllowBackgroundActivityStart(Z)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setAllowPendingRemoteAnimationRegistryLookup(Z)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setCaller(Landroid/app/IApplicationThread;)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setCallingPackage(Ljava/lang/String;)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setCallingPid(I)Lcom/android/server/wm/ActivityStarter;
-PLcom/android/server/wm/ActivityStarter;->setCallingUid(I)Lcom/android/server/wm/ActivityStarter;
+HSPLcom/android/server/wm/ActivityStarter;->setCallingUid(I)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setComponentSpecified(Z)Lcom/android/server/wm/ActivityStarter;
+PLcom/android/server/wm/ActivityStarter;->setFilterCallingUid(I)Lcom/android/server/wm/ActivityStarter;
+PLcom/android/server/wm/ActivityStarter;->setGlobalConfiguration(Landroid/content/res/Configuration;)Lcom/android/server/wm/ActivityStarter;
+PLcom/android/server/wm/ActivityStarter;->setIgnoreTargetSecurity(Z)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setInTask(Lcom/android/server/wm/Task;)Lcom/android/server/wm/ActivityStarter;
-HPLcom/android/server/wm/ActivityStarter;->setInitialState(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;ZILcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Z)V
-PLcom/android/server/wm/ActivityStarter;->setIntent(Landroid/content/Intent;)Lcom/android/server/wm/ActivityStarter;
-PLcom/android/server/wm/ActivityStarter;->setNewTask(Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/ActivityStarter;->setInitialState(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;ZILcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Z)V
+HSPLcom/android/server/wm/ActivityStarter;->setIntent(Landroid/content/Intent;)Lcom/android/server/wm/ActivityStarter;
+HSPLcom/android/server/wm/ActivityStarter;->setNewTask(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityStarter;->setOriginatingPendingIntent(Lcom/android/server/am/PendingIntentRecord;)Lcom/android/server/wm/ActivityStarter;
-PLcom/android/server/wm/ActivityStarter;->setOutActivity([Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityStarter;
+HSPLcom/android/server/wm/ActivityStarter;->setOutActivity([Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityStarter;
+PLcom/android/server/wm/ActivityStarter;->setProfilerInfo(Landroid/app/ProfilerInfo;)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setRealCallingPid(I)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setRealCallingUid(I)Lcom/android/server/wm/ActivityStarter;
-PLcom/android/server/wm/ActivityStarter;->setReason(Ljava/lang/String;)Lcom/android/server/wm/ActivityStarter;
+HSPLcom/android/server/wm/ActivityStarter;->setReason(Ljava/lang/String;)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setRequestCode(I)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setResolvedType(Ljava/lang/String;)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setResultTo(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityStarter;
@@ -20706,293 +34662,416 @@
 PLcom/android/server/wm/ActivityStarter;->setStartFlags(I)Lcom/android/server/wm/ActivityStarter;
 HPLcom/android/server/wm/ActivityStarter;->setTargetStackIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityStarter;->setUserId(I)Lcom/android/server/wm/ActivityStarter;
-PLcom/android/server/wm/ActivityStarter;->shouldAbortBackgroundActivityStart(IILjava/lang/String;IILcom/android/server/wm/WindowProcessController;Lcom/android/server/am/PendingIntentRecord;ZLandroid/content/Intent;)Z
-HPLcom/android/server/wm/ActivityStarter;->startActivityInner(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;IZLandroid/app/ActivityOptions;Lcom/android/server/wm/Task;Z)I
-HPLcom/android/server/wm/ActivityStarter;->startActivityUnchecked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;IZLandroid/app/ActivityOptions;Lcom/android/server/wm/Task;Z)I
-PLcom/android/server/wm/ActivityStarter;->updateBounds(Lcom/android/server/wm/Task;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/ActivityTaskManagerInternal$SleepToken;-><init>()V
+PLcom/android/server/wm/ActivityStarter;->setVoiceInteractor(Lcom/android/internal/app/IVoiceInteractor;)Lcom/android/server/wm/ActivityStarter;
+PLcom/android/server/wm/ActivityStarter;->setVoiceSession(Landroid/service/voice/IVoiceInteractionSession;)Lcom/android/server/wm/ActivityStarter;
+HSPLcom/android/server/wm/ActivityStarter;->shouldAbortBackgroundActivityStart(IILjava/lang/String;IILcom/android/server/wm/WindowProcessController;Lcom/android/server/am/PendingIntentRecord;ZLandroid/content/Intent;)Z
+HSPLcom/android/server/wm/ActivityStarter;->startActivityInner(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;IZLandroid/app/ActivityOptions;Lcom/android/server/wm/Task;Z)I
+HSPLcom/android/server/wm/ActivityStarter;->startActivityUnchecked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;IZLandroid/app/ActivityOptions;Lcom/android/server/wm/Task;Z)I
+PLcom/android/server/wm/ActivityStarter;->startResolvedActivity(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;IZLandroid/app/ActivityOptions;Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/ActivityStarter;->updateBounds(Lcom/android/server/wm/Task;Landroid/graphics/Rect;)V
+PLcom/android/server/wm/ActivityTaskManagerInternal$ActivityTokens;-><init>(Lcom/android/server/wm/ActivityTaskManagerInternal;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/IApplicationThread;)V
+PLcom/android/server/wm/ActivityTaskManagerInternal$ActivityTokens;->getActivityToken()Landroid/os/IBinder;
+PLcom/android/server/wm/ActivityTaskManagerInternal$ActivityTokens;->getApplicationThread()Landroid/app/IApplicationThread;
+PLcom/android/server/wm/ActivityTaskManagerInternal$ActivityTokens;->getAssistToken()Landroid/os/IBinder;
+HPLcom/android/server/wm/ActivityTaskManagerInternal$SleepToken;-><init>()V
 HSPLcom/android/server/wm/ActivityTaskManagerInternal;-><init>()V
 HSPLcom/android/server/wm/ActivityTaskManagerService$1;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
-PLcom/android/server/wm/ActivityTaskManagerService$1;->run()V
+HPLcom/android/server/wm/ActivityTaskManagerService$1;->run()V
+PLcom/android/server/wm/ActivityTaskManagerService$2;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Ljava/lang/Runnable;)V
+PLcom/android/server/wm/ActivityTaskManagerService$2;->onDismissSucceeded()V
 HSPLcom/android/server/wm/ActivityTaskManagerService$FontScaleSettingObserver;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
+PLcom/android/server/wm/ActivityTaskManagerService$FontScaleSettingObserver;->onChange(ZLandroid/net/Uri;I)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
 HSPLcom/android/server/wm/ActivityTaskManagerService$Lifecycle;->getService()Lcom/android/server/wm/ActivityTaskManagerService;
+PLcom/android/server/wm/ActivityTaskManagerService$Lifecycle;->onCleanupUser(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$Lifecycle;->onStart()V
 PLcom/android/server/wm/ActivityTaskManagerService$Lifecycle;->onUnlockUser(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->acquireSleepToken(Ljava/lang/String;I)Lcom/android/server/wm/ActivityTaskManagerInternal$SleepToken;
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->acquireSleepToken(Ljava/lang/String;I)Lcom/android/server/wm/ActivityTaskManagerInternal$SleepToken;
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->attachApplication(Lcom/android/server/wm/WindowProcessController;)Z
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->canGcNow()Z
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->canShowErrorDialogs()Z
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->cleanupDisabledPackageComponents(Ljava/lang/String;Ljava/util/Set;IZ)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->canGcNow()Z
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->canShowErrorDialogs()Z
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->cleanupDisabledPackageComponents(Ljava/lang/String;Ljava/util/Set;IZ)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->clearHeavyWeightProcessIfEquals(Lcom/android/server/wm/WindowProcessController;)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->closeSystemDialogs(Ljava/lang/String;)V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->clearPendingResultForActivity(Landroid/os/IBinder;Ljava/lang/ref/WeakReference;)V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->clearSavedANRState()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;->dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZZLjava/lang/String;)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->dumpActivity(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;IZZZ)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->dumpForProcesses(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZLjava/lang/String;IZZI)Z
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->enableScreenAfterBoot(Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->enableScreenAfterBoot(Z)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->enforceCallerIsRecentsOrHasPermission(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->finishTopCrashedActivities(Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;)I
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->finishTopCrashedActivities(Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;)I
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getHomeIntent()Landroid/content/Intent;
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getHomeProcess()Lcom/android/server/wm/WindowProcessController;
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getHomeProcess()Lcom/android/server/wm/WindowProcessController;
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getIntentSender(ILjava/lang/String;IILandroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;)Landroid/content/IIntentSender;
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getLaunchObserverRegistry()Lcom/android/server/wm/ActivityMetricsLaunchObserverRegistry;
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getPreviousProcess()Lcom/android/server/wm/WindowProcessController;
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getServiceConnectionsHolder(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityServiceConnectionsHolder;
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getPreviousProcess()Lcom/android/server/wm/WindowProcessController;
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getServiceConnectionsHolder(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityServiceConnectionsHolder;
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTaskSnapshotNoRestore(IZ)Landroid/app/ActivityManager$TaskSnapshot;
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopActivityForTask(I)Lcom/android/server/wm/ActivityTaskManagerInternal$ActivityTokens;
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopApp()Lcom/android/server/wm/WindowProcessController;
-HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopProcessState()I
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopProcessState()I
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopVisibleActivities()Ljava/util/List;
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->handleAppCrashInActivityController(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;JLjava/lang/String;Ljava/lang/Runnable;)Z
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->handleAppCrashInActivityController(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;JLjava/lang/String;Ljava/lang/Runnable;)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->handleAppDied(Lcom/android/server/wm/WindowProcessController;ZLjava/lang/Runnable;)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isCallerRecents(I)Z
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isCallerRecents(I)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isFactoryTestProcess(Lcom/android/server/wm/WindowProcessController;)Z
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isGetTasksAllowed(Ljava/lang/String;II)Z
-HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isHeavyWeightProcess(Lcom/android/server/wm/WindowProcessController;)Z
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isShuttingDown()Z
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isHeavyWeightProcess(Lcom/android/server/wm/WindowProcessController;)Z
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isRecentsComponentHomeActivity(I)Z
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isShuttingDown()Z
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isSleeping()Z
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isUidForeground(I)Z
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->loadRecentTasksForUser(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyActiveVoiceInteractionServiceChanged(Landroid/content/ComponentName;)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyAppTransitionCancelled()V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyAppTransitionFinished()V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyDockedStackMinimizedChanged(Z)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyKeyguardFlagsChanged(Ljava/lang/Runnable;I)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyKeyguardTrustedChanged()V
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyAppTransitionFinished()V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyDockedStackMinimizedChanged(Z)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyKeyguardFlagsChanged(Ljava/lang/Runnable;I)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyKeyguardTrustedChanged()V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyLockedProfile(II)V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifySingleTaskDisplayDrawn(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onCleanUpApplicationRecord(Lcom/android/server/wm/WindowProcessController;)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onForceStopPackage(Ljava/lang/String;ZZI)Z
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onImeWindowSetOnDisplay(II)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackageAdded(Ljava/lang/String;Z)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackageReplaced(Landroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onForceStopPackage(Ljava/lang/String;ZZI)Z
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onHandleAppCrash(Lcom/android/server/wm/WindowProcessController;)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onImeWindowSetOnDisplay(II)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackageAdded(Ljava/lang/String;Z)V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackageDataCleared(Ljava/lang/String;)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackageReplaced(Landroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackageUninstalled(Ljava/lang/String;)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackagesSuspendedChanged([Ljava/lang/String;ZI)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;->onProcessUnMapped(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onUidActive(II)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onUidAddedToPendingTempWhitelist(ILjava/lang/String;)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onUidAddedToPendingTempWhitelist(ILjava/lang/String;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onUidInactive(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onUidProcStateChanged(II)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onUidRemovedFromPendingTempWhitelist(I)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onUidRemovedFromPendingTempWhitelist(I)V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onUserStopped(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->preBindApplication(Lcom/android/server/wm/WindowProcessController;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->rankTaskLayersIfNeeded()V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->registerScreenObserver(Lcom/android/server/wm/ActivityTaskManagerInternal$ScreenObserver;)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->resumeTopActivities(Z)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->removeRecentTasksByPackageName(Ljava/lang/String;I)V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->removeUser(I)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->resumeTopActivities(Z)V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->saveANRState(Ljava/lang/String;)V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->sendActivityResult(ILandroid/os/IBinder;Ljava/lang/String;IILandroid/content/Intent;)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->setAllowAppSwitches(Ljava/lang/String;II)V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->setCompanionAppPackages(ILjava/util/Set;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->setDeviceOwnerUid(I)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->showSystemReadyErrorDialogsIfNeeded()V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->setFocusedActivity(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->showSystemReadyErrorDialogsIfNeeded()V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->shuttingDown(ZI)Z
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startActivitiesAsPackage(Ljava/lang/String;I[Landroid/content/Intent;Landroid/os/Bundle;)I
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startActivitiesInPackage(IIILjava/lang/String;[Landroid/content/Intent;[Ljava/lang/String;Landroid/os/IBinder;Lcom/android/server/wm/SafeActivityOptions;IZLcom/android/server/am/PendingIntentRecord;Z)I
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Landroid/os/Bundle;I)I
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startActivityInPackage(IIILjava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILcom/android/server/wm/SafeActivityOptions;ILcom/android/server/wm/Task;Ljava/lang/String;ZLcom/android/server/am/PendingIntentRecord;Z)I
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startHomeOnAllDisplays(ILjava/lang/String;)Z
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startActivityInPackage(IIILjava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILcom/android/server/wm/SafeActivityOptions;ILcom/android/server/wm/Task;Ljava/lang/String;ZLcom/android/server/am/PendingIntentRecord;Z)I
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startHomeActivity(ILjava/lang/String;)Z
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startHomeOnAllDisplays(ILjava/lang/String;)Z
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startHomeOnDisplay(ILjava/lang/String;IZZ)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->updateTopComponentForFactoryTest()V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->writeActivitiesToProto(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->writeProcessesToProto(Landroid/util/proto/ProtoOutputStream;Ljava/lang/String;IZ)V
 PLcom/android/server/wm/ActivityTaskManagerService$PendingAssistExtras;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityRecord;Landroid/os/Bundle;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IAssistDataReceiver;Landroid/os/Bundle;I)V
+PLcom/android/server/wm/ActivityTaskManagerService$PendingAssistExtras;->run()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;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->access$000(Lcom/android/server/wm/ActivityTaskManagerService;I)V
+PLcom/android/server/wm/ActivityTaskManagerService;->access$1000(Lcom/android/server/wm/ActivityTaskManagerService;)Z
+PLcom/android/server/wm/ActivityTaskManagerService;->access$1000(Lcom/android/server/wm/ActivityTaskManagerService;Ljava/lang/String;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->access$1100(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/util/proto/ProtoOutputStream;IZ)V
+PLcom/android/server/wm/ActivityTaskManagerService;->access$1100(Lcom/android/server/wm/ActivityTaskManagerService;Ljava/lang/String;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->access$1200(Lcom/android/server/wm/ActivityTaskManagerService;)Lcom/android/server/wm/MirrorActiveUids;
+PLcom/android/server/wm/ActivityTaskManagerService;->access$1200(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/util/proto/ProtoOutputStream;IZ)V
 PLcom/android/server/wm/ActivityTaskManagerService;->access$1300(Lcom/android/server/wm/ActivityTaskManagerService;)Landroid/util/SparseArray;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->access$1300(Lcom/android/server/wm/ActivityTaskManagerService;)Lcom/android/server/wm/MirrorActiveUids;
+PLcom/android/server/wm/ActivityTaskManagerService;->access$1400(Lcom/android/server/wm/ActivityTaskManagerService;)Landroid/util/SparseArray;
 PLcom/android/server/wm/ActivityTaskManagerService;->access$1400(Lcom/android/server/wm/ActivityTaskManagerService;)Lcom/android/server/wm/RecentTasks;
+PLcom/android/server/wm/ActivityTaskManagerService;->access$1500(Lcom/android/server/wm/ActivityTaskManagerService;)Lcom/android/server/wm/RecentTasks;
+PLcom/android/server/wm/ActivityTaskManagerService;->access$1600(Lcom/android/server/wm/ActivityTaskManagerService;IZZ)Landroid/app/ActivityManager$TaskSnapshot;
+PLcom/android/server/wm/ActivityTaskManagerService;->access$1700(Lcom/android/server/wm/ActivityTaskManagerService;)Ljava/util/Map;
+HPLcom/android/server/wm/ActivityTaskManagerService;->access$1700(Lcom/android/server/wm/ActivityTaskManagerService;IZZ)Landroid/app/ActivityManager$TaskSnapshot;
+PLcom/android/server/wm/ActivityTaskManagerService;->access$1800(Lcom/android/server/wm/ActivityTaskManagerService;)Ljava/util/Map;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->access$200(Lcom/android/server/wm/ActivityTaskManagerService;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->access$300(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService$PendingAssistExtras;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->access$500(Lcom/android/server/wm/ActivityTaskManagerService;)Lcom/android/server/wm/TaskChangeNotificationController;
+PLcom/android/server/wm/ActivityTaskManagerService;->access$600(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;IZ)I
 PLcom/android/server/wm/ActivityTaskManagerService;->access$600(Lcom/android/server/wm/ActivityTaskManagerService;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->access$700(Lcom/android/server/wm/ActivityTaskManagerService;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->access$700(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
+PLcom/android/server/wm/ActivityTaskManagerService;->access$800(Lcom/android/server/wm/ActivityTaskManagerService;)Z
+HSPLcom/android/server/wm/ActivityTaskManagerService;->access$800(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->access$900(Lcom/android/server/wm/ActivityTaskManagerService;)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->acquireSleepToken(Ljava/lang/String;I)Lcom/android/server/wm/ActivityTaskManagerInternal$SleepToken;
-PLcom/android/server/wm/ActivityTaskManagerService;->activityDestroyed(Landroid/os/IBinder;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->activityIdle(Landroid/os/IBinder;Landroid/content/res/Configuration;Z)V
-PLcom/android/server/wm/ActivityTaskManagerService;->activityPaused(Landroid/os/IBinder;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->activityResumed(Landroid/os/IBinder;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->activitySlept(Landroid/os/IBinder;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->activityStopped(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/lang/CharSequence;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->activityTopResumedStateLost()V
+HPLcom/android/server/wm/ActivityTaskManagerService;->acquireSleepToken(Ljava/lang/String;I)Lcom/android/server/wm/ActivityTaskManagerInternal$SleepToken;
+HPLcom/android/server/wm/ActivityTaskManagerService;->activityDestroyed(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->activityIdle(Landroid/os/IBinder;Landroid/content/res/Configuration;Z)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->activityPaused(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->activityRelaunched(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->activityResumed(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->activitySlept(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->activityStopped(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/lang/CharSequence;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->activityTopResumedStateLost()V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->addWindowLayoutReasons(I)V
 PLcom/android/server/wm/ActivityTaskManagerService;->animateResizePinnedStack(ILandroid/graphics/Rect;I)V
-PLcom/android/server/wm/ActivityTaskManagerService;->applyUpdateLockStateLocked(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->applyUpdateVrModeLocked(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->cancelRecentsAnimation(Z)V
-PLcom/android/server/wm/ActivityTaskManagerService;->checkAppSwitchAllowedLocked(IIIILjava/lang/String;)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->checkCallingPermission(Ljava/lang/String;)I
-PLcom/android/server/wm/ActivityTaskManagerService;->checkComponentPermission(Ljava/lang/String;IIIZ)I
-PLcom/android/server/wm/ActivityTaskManagerService;->checkGetTasksPermission(Ljava/lang/String;II)I
-PLcom/android/server/wm/ActivityTaskManagerService;->checkPermission(Ljava/lang/String;II)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->applyContainerTransaction(Landroid/view/WindowContainerTransaction;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->applyUpdateLockStateLocked(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->applyUpdateVrModeLocked(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->applyWindowContainerChange(Lcom/android/server/wm/ConfigurationContainer;Landroid/view/WindowContainerTransaction$Change;)I
+PLcom/android/server/wm/ActivityTaskManagerService;->applyWindowContainerChange(Lcom/android/server/wm/ConfigurationContainer;Landroid/view/WindowContainerTransaction$Change;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->applyWindowContainerChange(Lcom/android/server/wm/WindowContainer;Landroid/view/WindowContainerTransaction$Change;)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->assertPackageMatchesCallingUid(Ljava/lang/String;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->buildAssistBundleLocked(Lcom/android/server/wm/ActivityTaskManagerService$PendingAssistExtras;Landroid/os/Bundle;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->cancelRecentsAnimation(Z)V
+PLcom/android/server/wm/ActivityTaskManagerService;->checkAllowAppSwitchUid(I)Z
+HSPLcom/android/server/wm/ActivityTaskManagerService;->checkAppSwitchAllowedLocked(IIIILjava/lang/String;)Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->checkCallingPermission(Ljava/lang/String;)I
+HSPLcom/android/server/wm/ActivityTaskManagerService;->checkComponentPermission(Ljava/lang/String;IIIZ)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->checkGetTasksPermission(Ljava/lang/String;II)I
+HSPLcom/android/server/wm/ActivityTaskManagerService;->checkPermission(Ljava/lang/String;II)I
 HSPLcom/android/server/wm/ActivityTaskManagerService;->clearHeavyWeightProcessIfEquals(Lcom/android/server/wm/WindowProcessController;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->compatibilityInfoForPackageLocked(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/CompatibilityInfo;
-PLcom/android/server/wm/ActivityTaskManagerService;->constructResumedTraceName(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->constructResumedTraceName(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->continueWindowLayout()V
-PLcom/android/server/wm/ActivityTaskManagerService;->convertFromTranslucent(Landroid/os/IBinder;)Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->convertFromTranslucent(Landroid/os/IBinder;)Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->convertToTranslucent(Landroid/os/IBinder;Landroid/os/Bundle;)Z
 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;->createStackSupervisor()Lcom/android/server/wm/ActivityStackSupervisor;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->deferWindowLayout()V
+PLcom/android/server/wm/ActivityTaskManagerService;->dismissKeyguard(Landroid/os/IBinder;Lcom/android/internal/policy/IKeyguardDismissCallback;Ljava/lang/CharSequence;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->dismissPip(ZI)V
+PLcom/android/server/wm/ActivityTaskManagerService;->dismissSplitScreenMode(Z)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->dumpActivitiesLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZZLjava/lang/String;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->dumpActivitiesLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZZLjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->dumpActivity(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;IZZZ)Z
 PLcom/android/server/wm/ActivityTaskManagerService;->dumpActivity(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Lcom/android/server/wm/ActivityRecord;[Ljava/lang/String;Z)V
+PLcom/android/server/wm/ActivityTaskManagerService;->dumpActivityContainersLocked(Ljava/io/PrintWriter;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->dumpActivityStarterLocked(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->dumpLastANRLocked(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->enforceCallerIsRecentsOrHasPermission(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->enforceNotIsolatedCaller(Ljava/lang/String;)V
-PLcom/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;
+HPLcom/android/server/wm/ActivityTaskManagerService;->enforceNotIsolatedCaller(Ljava/lang/String;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->enqueueAssistContext(ILandroid/content/Intent;Ljava/lang/String;Landroid/app/IAssistDataReceiver;Landroid/os/Bundle;Landroid/os/IBinder;ZZILandroid/os/Bundle;JI)Lcom/android/server/wm/ActivityTaskManagerService$PendingAssistExtras;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->ensureConfigAndVisibilityAfterUpdate(Lcom/android/server/wm/ActivityRecord;I)Z
 PLcom/android/server/wm/ActivityTaskManagerService;->ensureValidPictureInPictureActivityParamsLocked(Ljava/lang/String;Landroid/os/IBinder;Landroid/app/PictureInPictureParams;)Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityTaskManagerService;->enterPictureInPictureMode(Landroid/os/IBinder;Landroid/app/PictureInPictureParams;)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->finishActivity(Landroid/os/IBinder;ILandroid/content/Intent;I)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->finishRunningVoiceLocked()V
+PLcom/android/server/wm/ActivityTaskManagerService;->expireStartAsCallerTokenMsg(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->finishActivity(Landroid/os/IBinder;ILandroid/content/Intent;I)Z
+PLcom/android/server/wm/ActivityTaskManagerService;->finishActivityAffinity(Landroid/os/IBinder;)Z
+HSPLcom/android/server/wm/ActivityTaskManagerService;->finishRunningVoiceLocked()V
+PLcom/android/server/wm/ActivityTaskManagerService;->finishSubActivity(Landroid/os/IBinder;Ljava/lang/String;I)V
 PLcom/android/server/wm/ActivityTaskManagerService;->finishVoiceTask(Landroid/service/voice/IVoiceInteractionSession;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->getActivityClassForToken(Landroid/os/IBinder;)Landroid/content/ComponentName;
-PLcom/android/server/wm/ActivityTaskManagerService;->getActivityOptions(Landroid/os/IBinder;)Landroid/os/Bundle;
-PLcom/android/server/wm/ActivityTaskManagerService;->getActivityStartController()Lcom/android/server/wm/ActivityStartController;
-PLcom/android/server/wm/ActivityTaskManagerService;->getAppInfoForUser(Landroid/content/pm/ApplicationInfo;I)Landroid/content/pm/ApplicationInfo;
-PLcom/android/server/wm/ActivityTaskManagerService;->getAppTasks(Ljava/lang/String;)Ljava/util/List;
-PLcom/android/server/wm/ActivityTaskManagerService;->getAppWarningsLocked()Lcom/android/server/wm/AppWarnings;
-PLcom/android/server/wm/ActivityTaskManagerService;->getCallingActivity(Landroid/os/IBinder;)Landroid/content/ComponentName;
+PLcom/android/server/wm/ActivityTaskManagerService;->forgetStartAsCallerTokenMsg(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->getActivityClassForToken(Landroid/os/IBinder;)Landroid/content/ComponentName;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getActivityOptions(Landroid/os/IBinder;)Landroid/os/Bundle;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getActivityStartController()Lcom/android/server/wm/ActivityStartController;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getAllStackInfosOnDisplay(I)Ljava/util/List;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getAppInfoForUser(Landroid/content/pm/ApplicationInfo;I)Landroid/content/pm/ApplicationInfo;
+PLcom/android/server/wm/ActivityTaskManagerService;->getAppOpsService()Lcom/android/server/appop/AppOpsService;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getAppTasks(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getAppWarningsLocked()Lcom/android/server/wm/AppWarnings;
+PLcom/android/server/wm/ActivityTaskManagerService;->getAssistContextExtras(I)Landroid/os/Bundle;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getCallingActivity(Landroid/os/IBinder;)Landroid/content/ComponentName;
 PLcom/android/server/wm/ActivityTaskManagerService;->getCallingPackage(Landroid/os/IBinder;)Ljava/lang/String;
+PLcom/android/server/wm/ActivityTaskManagerService;->getCallingRecordLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityTaskManagerService;->getConfiguration()Landroid/content/res/Configuration;
 PLcom/android/server/wm/ActivityTaskManagerService;->getCurrentUserId()I
-PLcom/android/server/wm/ActivityTaskManagerService;->getDeviceConfigurationInfo()Landroid/content/pm/ConfigurationInfo;
-PLcom/android/server/wm/ActivityTaskManagerService;->getDisplayId(Landroid/os/IBinder;)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->getDeviceConfigurationInfo()Landroid/content/pm/ConfigurationInfo;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getDisplayId(Landroid/os/IBinder;)I
 HPLcom/android/server/wm/ActivityTaskManagerService;->getFilteredTasks(III)Ljava/util/List;
 HPLcom/android/server/wm/ActivityTaskManagerService;->getFocusedStackInfo()Landroid/app/ActivityManager$StackInfo;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getGlobalConfiguration()Landroid/content/res/Configuration;
-PLcom/android/server/wm/ActivityTaskManagerService;->getGlobalConfigurationForCallingPid()Landroid/content/res/Configuration;
-HPLcom/android/server/wm/ActivityTaskManagerService;->getGlobalConfigurationForPid(I)Landroid/content/res/Configuration;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getGlobalConfigurationForCallingPid()Landroid/content/res/Configuration;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getGlobalConfigurationForPid(I)Landroid/content/res/Configuration;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getGlobalLock()Lcom/android/server/wm/WindowManagerGlobalLock;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getHomeIntent()Landroid/content/Intent;
-PLcom/android/server/wm/ActivityTaskManagerService;->getInputDispatchingTimeoutLocked(Lcom/android/server/wm/ActivityRecord;)J
-PLcom/android/server/wm/ActivityTaskManagerService;->getLastResumedActivityUserId()I
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getInputDispatchingTimeoutLocked(Lcom/android/server/wm/ActivityRecord;)J
+PLcom/android/server/wm/ActivityTaskManagerService;->getIntentSenderLocked(ILjava/lang/String;IILandroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;)Landroid/content/IIntentSender;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getLastResumedActivityUserId()I
+PLcom/android/server/wm/ActivityTaskManagerService;->getLastStopAppSwitchesTime()J
+PLcom/android/server/wm/ActivityTaskManagerService;->getLaunchedFromPackage(Landroid/os/IBinder;)Ljava/lang/String;
 PLcom/android/server/wm/ActivityTaskManagerService;->getLaunchedFromUid(Landroid/os/IBinder;)I
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getLifecycleManager()Lcom/android/server/wm/ClientLifecycleManager;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getLockTaskController()Lcom/android/server/wm/LockTaskController;
-PLcom/android/server/wm/ActivityTaskManagerService;->getLockTaskModeState()I
-PLcom/android/server/wm/ActivityTaskManagerService;->getPackageManager()Landroid/content/pm/IPackageManager;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getLockTaskModeState()I
+PLcom/android/server/wm/ActivityTaskManagerService;->getMaxNumPictureInPictureActions(Landroid/os/IBinder;)I
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getPackageManager()Landroid/content/pm/IPackageManager;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getPackageManagerInternalLocked()Landroid/content/pm/PackageManagerInternal;
-PLcom/android/server/wm/ActivityTaskManagerService;->getPermissionPolicyInternal()Lcom/android/server/policy/PermissionPolicyInternal;
-PLcom/android/server/wm/ActivityTaskManagerService;->getProcessController(II)Lcom/android/server/wm/WindowProcessController;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getPermissionPolicyInternal()Lcom/android/server/policy/PermissionPolicyInternal;
+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;
-PLcom/android/server/wm/ActivityTaskManagerService;->getProcessController(Ljava/lang/String;I)Lcom/android/server/wm/WindowProcessController;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getProcessController(Ljava/lang/String;I)Lcom/android/server/wm/WindowProcessController;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getRecentTasks()Lcom/android/server/wm/RecentTasks;
-PLcom/android/server/wm/ActivityTaskManagerService;->getRecentTasks(III)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/wm/ActivityTaskManagerService;->getRequestedOrientation(Landroid/os/IBinder;)I
-PLcom/android/server/wm/ActivityTaskManagerService;->getStackInfo(II)Landroid/app/ActivityManager$StackInfo;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getRecentTasks(III)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getRequestedOrientation(Landroid/os/IBinder;)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->getStackInfo(II)Landroid/app/ActivityManager$StackInfo;
 HPLcom/android/server/wm/ActivityTaskManagerService;->getTaskBounds(I)Landroid/graphics/Rect;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getTaskChangeNotificationController()Lcom/android/server/wm/TaskChangeNotificationController;
-PLcom/android/server/wm/ActivityTaskManagerService;->getTaskDescriptionIcon(Ljava/lang/String;I)Landroid/graphics/Bitmap;
-PLcom/android/server/wm/ActivityTaskManagerService;->getTaskForActivity(Landroid/os/IBinder;Z)I
-PLcom/android/server/wm/ActivityTaskManagerService;->getTaskSnapshot(IZ)Landroid/app/ActivityManager$TaskSnapshot;
-PLcom/android/server/wm/ActivityTaskManagerService;->getTaskSnapshot(IZZ)Landroid/app/ActivityManager$TaskSnapshot;
-PLcom/android/server/wm/ActivityTaskManagerService;->getTasks(I)Ljava/util/List;
+PLcom/android/server/wm/ActivityTaskManagerService;->getTaskDescription(I)Landroid/app/ActivityManager$TaskDescription;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getTaskDescriptionIcon(Ljava/lang/String;I)Landroid/graphics/Bitmap;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getTaskForActivity(Landroid/os/IBinder;Z)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->getTaskSnapshot(IZ)Landroid/app/ActivityManager$TaskSnapshot;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getTaskSnapshot(IZZ)Landroid/app/ActivityManager$TaskSnapshot;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getTasks(I)Ljava/util/List;
 HPLcom/android/server/wm/ActivityTaskManagerService;->getTopDisplayFocusedStack()Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/ActivityTaskManagerService;->getUidState(I)I
-PLcom/android/server/wm/ActivityTaskManagerService;->getUserManager()Lcom/android/server/pm/UserManagerService;
-PLcom/android/server/wm/ActivityTaskManagerService;->handleIncomingUser(IIILjava/lang/String;)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->getUidState(I)I
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getUserManager()Lcom/android/server/pm/UserManagerService;
+HPLcom/android/server/wm/ActivityTaskManagerService;->handleIncomingUser(IIILjava/lang/String;)I
+PLcom/android/server/wm/ActivityTaskManagerService;->hasSystemAlertWindowPermission(IILjava/lang/String;)Z
+PLcom/android/server/wm/ActivityTaskManagerService;->hasUserRestriction(Ljava/lang/String;I)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;->installSystemProviders()V
-PLcom/android/server/wm/ActivityTaskManagerService;->invalidateHomeTaskSnapshot(Landroid/os/IBinder;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->isAssistDataAllowedOnCurrentActivity()Z
-PLcom/android/server/wm/ActivityTaskManagerService;->isAssociatedCompanionApp(II)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->isBooted()Z
-PLcom/android/server/wm/ActivityTaskManagerService;->isBooting()Z
-PLcom/android/server/wm/ActivityTaskManagerService;->isControllerAMonkey()Z
-PLcom/android/server/wm/ActivityTaskManagerService;->isCrossUserAllowed(II)Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->invalidateHomeTaskSnapshot(Landroid/os/IBinder;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->isActivityStartsLoggingEnabled()Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->isAssistDataAllowedOnCurrentActivity()Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->isAssociatedCompanionApp(II)Z
+PLcom/android/server/wm/ActivityTaskManagerService;->isBackgroundActivityStartsEnabled()Z
+HSPLcom/android/server/wm/ActivityTaskManagerService;->isBooted()Z
+HSPLcom/android/server/wm/ActivityTaskManagerService;->isBooting()Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->isControllerAMonkey()Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->isCrossUserAllowed(II)Z
+PLcom/android/server/wm/ActivityTaskManagerService;->isDeviceOwner(I)Z
 HPLcom/android/server/wm/ActivityTaskManagerService;->isGetTasksAllowed(Ljava/lang/String;II)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->isInMultiWindowMode(Landroid/os/IBinder;)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->isInPictureInPictureMode(Landroid/os/IBinder;)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->isInPictureInPictureMode(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->isSameApp(ILjava/lang/String;)Z
+PLcom/android/server/wm/ActivityTaskManagerService;->isInLockTaskMode()Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->isInMultiWindowMode(Landroid/os/IBinder;)Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->isInPictureInPictureMode(Landroid/os/IBinder;)Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->isInPictureInPictureMode(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/ActivityTaskManagerService;->isKeyguardLocked()Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->isSameApp(ILjava/lang/String;)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->isSleepingLocked()Z
-PLcom/android/server/wm/ActivityTaskManagerService;->isSleepingOrShuttingDownLocked()Z
-PLcom/android/server/wm/ActivityTaskManagerService;->isUidForeground(I)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->keyguardGoingAway(I)V
-PLcom/android/server/wm/ActivityTaskManagerService;->lambda$applyUpdateLockStateLocked$0$ActivityTaskManagerService(ZLcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->lambda$applyUpdateVrModeLocked$5$ActivityTaskManagerService(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->isSleepingOrShuttingDownLocked()Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->isTopOfTask(Landroid/os/IBinder;)Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->isUidForeground(I)Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->keyguardGoingAway(I)V
+PLcom/android/server/wm/ActivityTaskManagerService;->lambda$3DTHgCAeEd5OOF7ACeXoCk8mmrQ(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/IBinder;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->lambda$7ieG0s-7Zp4H2bLiWdOgB6MqhcI(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/IBinder;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->lambda$U6g1UdnOPnEF9wX1OTm9nKVXY5k(Lcom/android/server/wm/ActivityTaskManagerService;Ljava/util/Locale;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->lambda$applyUpdateLockStateLocked$0$ActivityTaskManagerService(ZLcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->lambda$applyUpdateVrModeLocked$5$ActivityTaskManagerService(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->lambda$enterPictureInPictureMode$4$ActivityTaskManagerService(Lcom/android/server/wm/ActivityRecord;Landroid/app/PictureInPictureParams;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->lambda$notifyEnterAnimationComplete$1$ActivityTaskManagerService(Landroid/os/IBinder;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->lambda$onScreenAwakeChanged$3$ActivityTaskManagerService(Z)V
-PLcom/android/server/wm/ActivityTaskManagerService;->lambda$postFinishBooting$6$ActivityTaskManagerService(ZZ)V
-PLcom/android/server/wm/ActivityTaskManagerService;->lambda$scheduleAppGcsLocked$7$ActivityTaskManagerService()V
-PLcom/android/server/wm/ActivityTaskManagerService;->lambda$setLockScreenShown$2$ActivityTaskManagerService(Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->lambda$notifyEnterAnimationComplete$1$ActivityTaskManagerService(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->lambda$onScreenAwakeChanged$3$ActivityTaskManagerService(Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->lambda$postFinishBooting$6$ActivityTaskManagerService(ZZ)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->lambda$scheduleAppGcsLocked$7$ActivityTaskManagerService()V
+HPLcom/android/server/wm/ActivityTaskManagerService;->lambda$setLockScreenShown$2$ActivityTaskManagerService(Z)V
+PLcom/android/server/wm/ActivityTaskManagerService;->lambda$yP9TbBmrgQ4lrgcxb-8oL1pBAs4(Lcom/android/server/wm/ActivityTaskManagerService;ILandroid/content/res/Configuration;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->logAppTooSlow(Lcom/android/server/wm/WindowProcessController;JLjava/lang/String;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->logPictureInPictureArgs(Landroid/app/PictureInPictureParams;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->moveTaskToFrontLocked(Landroid/app/IApplicationThread;Ljava/lang/String;IILcom/android/server/wm/SafeActivityOptions;Z)V
-PLcom/android/server/wm/ActivityTaskManagerService;->notifyActivityDrawn(Landroid/os/IBinder;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->notifyEnterAnimationComplete(Landroid/os/IBinder;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->notifyLaunchTaskBehindComplete(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->moveActivityTaskToBack(Landroid/os/IBinder;Z)Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->moveTaskToFrontLocked(Landroid/app/IApplicationThread;Ljava/lang/String;IILcom/android/server/wm/SafeActivityOptions;Z)V
+PLcom/android/server/wm/ActivityTaskManagerService;->navigateUpTo(Landroid/os/IBinder;Landroid/content/Intent;ILandroid/content/Intent;)Z
+HSPLcom/android/server/wm/ActivityTaskManagerService;->notifyActivityDrawn(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->notifyEnterAnimationComplete(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->notifyLaunchTaskBehindComplete(Landroid/os/IBinder;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->notifyPinnedStackAnimationEnded()V
 PLcom/android/server/wm/ActivityTaskManagerService;->notifyPinnedStackAnimationStarted()V
-PLcom/android/server/wm/ActivityTaskManagerService;->notifyTaskPersisterLocked(Lcom/android/server/wm/Task;Z)V
+PLcom/android/server/wm/ActivityTaskManagerService;->notifySingleTaskDisplayEmpty(I)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->notifyTaskPersisterLocked(Lcom/android/server/wm/Task;Z)V
 PLcom/android/server/wm/ActivityTaskManagerService;->offsetPinnedStackBounds(ILandroid/graphics/Rect;III)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->onActivityManagerInternalAdded()V
-PLcom/android/server/wm/ActivityTaskManagerService;->onBackPressedOnTaskRoot(Landroid/os/IBinder;Landroid/app/IRequestFinishCallback;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->onBackPressedOnTaskRoot(Landroid/os/IBinder;Landroid/app/IRequestFinishCallback;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->onInitPowerManagement()V
-PLcom/android/server/wm/ActivityTaskManagerService;->onScreenAwakeChanged(Z)V
-PLcom/android/server/wm/ActivityTaskManagerService;->onStartActivitySetDidAppSwitch()V
+HPLcom/android/server/wm/ActivityTaskManagerService;->onScreenAwakeChanged(Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->onStartActivitySetDidAppSwitch()V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->onSystemReady()V
-PLcom/android/server/wm/ActivityTaskManagerService;->overridePendingTransition(Landroid/os/IBinder;Ljava/lang/String;II)V
-PLcom/android/server/wm/ActivityTaskManagerService;->postFinishBooting(ZZ)V
-PLcom/android/server/wm/ActivityTaskManagerService;->registerRemoteAnimationForNextActivityStart(Ljava/lang/String;Landroid/view/RemoteAnimationAdapter;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->overridePendingTransition(Landroid/os/IBinder;Ljava/lang/String;II)V
+PLcom/android/server/wm/ActivityTaskManagerService;->pendingAssistExtrasTimedOut(Lcom/android/server/wm/ActivityTaskManagerService$PendingAssistExtras;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->postFinishBooting(ZZ)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->registerRemoteAnimationForNextActivityStart(Ljava/lang/String;Landroid/view/RemoteAnimationAdapter;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->registerRemoteAnimations(Landroid/os/IBinder;Landroid/view/RemoteAnimationDefinition;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->relaunchReasonToString(I)Ljava/lang/String;
+PLcom/android/server/wm/ActivityTaskManagerService;->releaseActivityInstance(Landroid/os/IBinder;)Z
 PLcom/android/server/wm/ActivityTaskManagerService;->releaseSomeActivities(Landroid/app/IApplicationThread;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->removeAllVisibleRecentTasks()V
 PLcom/android/server/wm/ActivityTaskManagerService;->removeStacksInWindowingModes([I)V
-PLcom/android/server/wm/ActivityTaskManagerService;->removeTask(I)Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->removeTask(I)Z
 PLcom/android/server/wm/ActivityTaskManagerService;->reportActivityFullyDrawn(Landroid/os/IBinder;Z)V
-PLcom/android/server/wm/ActivityTaskManagerService;->reportAssistContextExtras(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;Landroid/net/Uri;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->reportSizeConfigurations(Landroid/os/IBinder;[I[I[I)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
+HSPLcom/android/server/wm/ActivityTaskManagerService;->reportSizeConfigurations(Landroid/os/IBinder;[I[I[I)V
 PLcom/android/server/wm/ActivityTaskManagerService;->requestAssistContextExtras(ILandroid/app/IAssistDataReceiver;Landroid/os/Bundle;Landroid/os/IBinder;ZZ)Z
 PLcom/android/server/wm/ActivityTaskManagerService;->requestAutofillData(Landroid/app/IAssistDataReceiver;Landroid/os/Bundle;Landroid/os/IBinder;I)Z
 PLcom/android/server/wm/ActivityTaskManagerService;->requestStartActivityPermissionToken(Landroid/os/IBinder;)Landroid/os/IBinder;
-PLcom/android/server/wm/ActivityTaskManagerService;->resizePinnedStack(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->resumeAppSwitches()V
+HPLcom/android/server/wm/ActivityTaskManagerService;->resizeDockedStack(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->resizePinnedStack(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->resizePinnedStackIfNeeded(Lcom/android/server/wm/ConfigurationContainer;IILandroid/content/res/Configuration;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->resumeAppSwitches()V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->retrieveSettings(Landroid/content/ContentResolver;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->scheduleAppGcsLocked()V
-PLcom/android/server/wm/ActivityTaskManagerService;->setBooted(Z)V
-PLcom/android/server/wm/ActivityTaskManagerService;->setBooting(Z)V
+PLcom/android/server/wm/ActivityTaskManagerService;->sanitizeAndApplyChange(Lcom/android/server/wm/ConfigurationContainer;Landroid/view/WindowContainerTransaction$Change;)I
+PLcom/android/server/wm/ActivityTaskManagerService;->sanitizeAndApplyChange(Lcom/android/server/wm/WindowContainer;Landroid/view/WindowContainerTransaction$Change;)I
+PLcom/android/server/wm/ActivityTaskManagerService;->sanitizeAndApplyConfigChange(Lcom/android/server/wm/ConfigurationContainer;Landroid/view/WindowContainerTransaction$Change;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->scheduleAppGcsLocked()V
+PLcom/android/server/wm/ActivityTaskManagerService;->sendLocaleToMountDaemonMsg(Ljava/util/Locale;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->sendPutConfigurationForUserMsg(ILandroid/content/res/Configuration;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->setActivityController(Landroid/app/IActivityController;Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->setBooted(Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->setBooting(Z)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->setDeviceOwnerUid(I)V
-PLcom/android/server/wm/ActivityTaskManagerService;->setDisablePreviewScreenshots(Landroid/os/IBinder;Z)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->setDisablePreviewScreenshots(Landroid/os/IBinder;Z)V
+PLcom/android/server/wm/ActivityTaskManagerService;->setDisplayToSingleTaskInstance(I)V
 PLcom/android/server/wm/ActivityTaskManagerService;->setFocusedTask(I)V
-PLcom/android/server/wm/ActivityTaskManagerService;->setLockScreenShown(ZZ)V
-PLcom/android/server/wm/ActivityTaskManagerService;->setPictureInPictureParams(Landroid/os/IBinder;Landroid/app/PictureInPictureParams;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->setImmersive(Landroid/os/IBinder;Z)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->setLockScreenShown(ZZ)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->setPictureInPictureParams(Landroid/os/IBinder;Landroid/app/PictureInPictureParams;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->setRecentTasks(Lcom/android/server/wm/RecentTasks;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->setRequestedOrientation(Landroid/os/IBinder;I)V
-PLcom/android/server/wm/ActivityTaskManagerService;->setResumedActivityUncheckLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->setTaskDescription(Landroid/os/IBinder;Landroid/app/ActivityManager$TaskDescription;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->setRequestedOrientation(Landroid/os/IBinder;I)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->setResumedActivityUncheckLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->setShowWhenLocked(Landroid/os/IBinder;Z)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->setSplitScreenResizing(Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->setTaskDescription(Landroid/os/IBinder;Landroid/app/ActivityManager$TaskDescription;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->setTurnScreenOn(Landroid/os/IBinder;Z)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->setUsageStatsManager(Landroid/app/usage/UsageStatsManagerInternal;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->shouldDisableNonVrUiLocked()Z
 PLcom/android/server/wm/ActivityTaskManagerService;->shouldUpRecreateTask(Landroid/os/IBinder;Ljava/lang/String;)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->start()V
 PLcom/android/server/wm/ActivityTaskManagerService;->startActivities(Landroid/app/IApplicationThread;Ljava/lang/String;[Landroid/content/Intent;[Ljava/lang/String;Landroid/os/IBinder;Landroid/os/Bundle;I)I
-PLcom/android/server/wm/ActivityTaskManagerService;->startActivity(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->startActivity(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;)I
 PLcom/android/server/wm/ActivityTaskManagerService;->startActivityAsCaller(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;Landroid/os/IBinder;ZI)I
 PLcom/android/server/wm/ActivityTaskManagerService;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;I)I
-PLcom/android/server/wm/ActivityTaskManagerService;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;IZ)I
-PLcom/android/server/wm/ActivityTaskManagerService;->startActivityFromRecents(ILandroid/os/Bundle;)I
-PLcom/android/server/wm/ActivityTaskManagerService;->startActivityIntentSender(Landroid/app/IApplicationThread;Landroid/content/IIntentSender;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;)I
-PLcom/android/server/wm/ActivityTaskManagerService;->startProcessAsync(Lcom/android/server/wm/ActivityRecord;ZZLjava/lang/String;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->startRecentsActivity(Landroid/content/Intent;Landroid/app/IAssistDataReceiver;Landroid/view/IRecentsAnimationRunner;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->startTimeTrackingFocusedActivityLocked()V
-PLcom/android/server/wm/ActivityTaskManagerService;->stopAppSwitches()V
-PLcom/android/server/wm/ActivityTaskManagerService;->unregisterTaskStackListener(Landroid/app/ITaskStackListener;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->updateActivityUsageStats(Lcom/android/server/wm/ActivityRecord;I)V
-PLcom/android/server/wm/ActivityTaskManagerService;->updateBatteryStats(Lcom/android/server/wm/ActivityRecord;Z)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;IZ)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->startActivityFromRecents(ILandroid/os/Bundle;)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->startActivityIntentSender(Landroid/app/IApplicationThread;Landroid/content/IIntentSender;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->startActivityWithConfig(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/content/res/Configuration;Landroid/os/Bundle;I)I
+PLcom/android/server/wm/ActivityTaskManagerService;->startAssistantActivity(Ljava/lang/String;IILandroid/content/Intent;Ljava/lang/String;Landroid/os/Bundle;I)I
+PLcom/android/server/wm/ActivityTaskManagerService;->startLockTaskModeLocked(Lcom/android/server/wm/Task;Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->startProcessAsync(Lcom/android/server/wm/ActivityRecord;ZZLjava/lang/String;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->startRecentsActivity(Landroid/content/Intent;Landroid/app/IAssistDataReceiver;Landroid/view/IRecentsAnimationRunner;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->startSystemLockTaskMode(I)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->startTimeTrackingFocusedActivityLocked()V
+PLcom/android/server/wm/ActivityTaskManagerService;->startVoiceActivity(Ljava/lang/String;IILandroid/content/Intent;Ljava/lang/String;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;ILandroid/app/ProfilerInfo;Landroid/os/Bundle;I)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->stopAppSwitches()V
+PLcom/android/server/wm/ActivityTaskManagerService;->stopLockTaskModeInternal(Lcom/android/server/wm/Task;Z)V
+PLcom/android/server/wm/ActivityTaskManagerService;->stopSystemLockTaskMode()V
+PLcom/android/server/wm/ActivityTaskManagerService;->unregisterRemoteAnimations(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->unregisterTaskStackListener(Landroid/app/ITaskStackListener;)V
+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;->updateConfiguration(Landroid/content/res/Configuration;)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;Z)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;ZZ)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;ZZIZ)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;ZZIZLcom/android/server/wm/ActivityTaskManagerService$UpdateConfigurationResult;)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->updateCpuStats()V
-PLcom/android/server/wm/ActivityTaskManagerService;->updateEventDispatchingLocked(Z)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->updateCpuStats()V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->updateEventDispatchingLocked(Z)V
+PLcom/android/server/wm/ActivityTaskManagerService;->updateFontScaleIfNeeded(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateGlobalConfigurationLocked(Landroid/content/res/Configuration;ZZIZ)I
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateLockTaskFeatures(II)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateLockTaskPackages(I[Ljava/lang/String;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->updateOomAdj()V
-PLcom/android/server/wm/ActivityTaskManagerService;->updateResumedAppTrace(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->updateOomAdj()V
+PLcom/android/server/wm/ActivityTaskManagerService;->updatePersistentConfiguration(Landroid/content/res/Configuration;I)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->updateResumedAppTrace(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateShouldShowDialogsLocked(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateSleepIfNeededLocked()V
 PLcom/android/server/wm/ActivityTaskManagerService;->willActivityBeVisible(Landroid/os/IBinder;)Z
 PLcom/android/server/wm/ActivityTaskManagerService;->writeSleepStateToProto(Landroid/util/proto/ProtoOutputStream;IZ)V
 PLcom/android/server/wm/AlertWindowNotification;-><clinit>()V
-PLcom/android/server/wm/AlertWindowNotification;-><init>(Lcom/android/server/wm/WindowManagerService;Ljava/lang/String;)V
+HPLcom/android/server/wm/AlertWindowNotification;-><init>(Lcom/android/server/wm/WindowManagerService;Ljava/lang/String;)V
 PLcom/android/server/wm/AlertWindowNotification;->cancel(Z)V
 PLcom/android/server/wm/AlertWindowNotification;->createNotificationChannel(Landroid/content/Context;Ljava/lang/String;)V
 PLcom/android/server/wm/AlertWindowNotification;->getApplicationInfo(Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/pm/ApplicationInfo;
@@ -21004,152 +35083,216 @@
 PLcom/android/server/wm/AlertWindowNotification;->post()V
 HSPLcom/android/server/wm/AnimatingActivityRegistry;-><init>()V
 HSPLcom/android/server/wm/AnimatingActivityRegistry;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/wm/AnimatingActivityRegistry;->endDeferringFinished()V
-PLcom/android/server/wm/AnimatingActivityRegistry;->notifyAboutToFinish(Lcom/android/server/wm/ActivityRecord;Ljava/lang/Runnable;)Z
-PLcom/android/server/wm/AnimatingActivityRegistry;->notifyFinished(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/AnimatingActivityRegistry;->notifyStarting(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/AnimationAdapter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/AppTaskImpl;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;II)V
-PLcom/android/server/wm/AppTaskImpl;->checkCaller()V
-PLcom/android/server/wm/AppTaskImpl;->getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;
-PLcom/android/server/wm/AppTaskImpl;->setExcludeFromRecents(Z)V
+HPLcom/android/server/wm/AnimatingActivityRegistry;->endDeferringFinished()V
+HPLcom/android/server/wm/AnimatingActivityRegistry;->notifyAboutToFinish(Lcom/android/server/wm/ActivityRecord;Ljava/lang/Runnable;)Z
+HPLcom/android/server/wm/AnimatingActivityRegistry;->notifyFinished(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/AnimatingActivityRegistry;->notifyStarting(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/AnimationAdapter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/wm/AppTaskImpl;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;II)V
+HPLcom/android/server/wm/AppTaskImpl;->checkCaller()V
+PLcom/android/server/wm/AppTaskImpl;->finishAndRemoveTask()V
+HPLcom/android/server/wm/AppTaskImpl;->getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;
+PLcom/android/server/wm/AppTaskImpl;->moveToFront(Landroid/app/IApplicationThread;Ljava/lang/String;)V
+HPLcom/android/server/wm/AppTaskImpl;->setExcludeFromRecents(Z)V
 HSPLcom/android/server/wm/AppTransition$1;-><init>(Lcom/android/server/wm/AppTransition;)V
 HSPLcom/android/server/wm/AppTransition$2;-><init>(Lcom/android/server/wm/AppTransition;)V
+PLcom/android/server/wm/AppTransition$2;->getInterpolation(F)F
 HSPLcom/android/server/wm/AppTransition;-><clinit>()V
 HSPLcom/android/server/wm/AppTransition;-><init>(Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/AppTransition;->access$100(Lcom/android/server/wm/AppTransition;)Landroid/view/animation/Interpolator;
 PLcom/android/server/wm/AppTransition;->calculateClipRevealTransitionDuration(ZFFLandroid/graphics/Rect;)J
-PLcom/android/server/wm/AppTransition;->canOverridePendingAppTransition()Z
-PLcom/android/server/wm/AppTransition;->canSkipFirstFrame()Z
-PLcom/android/server/wm/AppTransition;->clear()V
+HPLcom/android/server/wm/AppTransition;->canOverridePendingAppTransition()Z
+HPLcom/android/server/wm/AppTransition;->canSkipFirstFrame()Z
+HSPLcom/android/server/wm/AppTransition;->clear()V
+PLcom/android/server/wm/AppTransition;->computePivot(IF)F
+PLcom/android/server/wm/AppTransition;->createAspectScaledThumbnailEnterExitAnimationLocked(IIIILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLcom/android/server/wm/WindowContainer;)Landroid/view/animation/Animation;
 PLcom/android/server/wm/AppTransition;->createClipRevealAnimationLocked(IZLandroid/graphics/Rect;Landroid/graphics/Rect;)Landroid/view/animation/Animation;
+PLcom/android/server/wm/AppTransition;->createCrossProfileAppsThumbnail(ILandroid/graphics/Rect;)Landroid/graphics/GraphicBuffer;
+PLcom/android/server/wm/AppTransition;->createCrossProfileAppsThumbnailAnimationLocked(Landroid/graphics/Rect;)Landroid/view/animation/Animation;
+PLcom/android/server/wm/AppTransition;->createCurvedMotion(FFFF)Landroid/view/animation/Animation;
+PLcom/android/server/wm/AppTransition;->createCurvedPath(FFFF)Landroid/graphics/Path;
+PLcom/android/server/wm/AppTransition;->createScaleUpAnimationLocked(IZLandroid/graphics/Rect;)Landroid/view/animation/Animation;
+PLcom/android/server/wm/AppTransition;->createThumbnailAspectScaleAnimationLocked(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/GraphicBuffer;Lcom/android/server/wm/WindowContainer;II)Landroid/view/animation/Animation;
 PLcom/android/server/wm/AppTransition;->doAnimationCallback(Landroid/os/IRemoteCallback;)V
 PLcom/android/server/wm/AppTransition;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/AppTransition;->fetchAppTransitionSpecsFromFuture()V
+HSPLcom/android/server/wm/AppTransition;->fetchAppTransitionSpecsFromFuture()V
+PLcom/android/server/wm/AppTransition;->freeze()V
 PLcom/android/server/wm/AppTransition;->getAnimationStyleResId(Landroid/view/WindowManager$LayoutParams;)I
 PLcom/android/server/wm/AppTransition;->getAppStackClipMode()I
 HSPLcom/android/server/wm/AppTransition;->getAppTransition()I
-PLcom/android/server/wm/AppTransition;->getCachedAnimations(Landroid/view/WindowManager$LayoutParams;)Lcom/android/server/AttributeCache$Entry;
+PLcom/android/server/wm/AppTransition;->getAppTransitionThumbnailHeader(Lcom/android/server/wm/WindowContainer;)Landroid/graphics/GraphicBuffer;
+PLcom/android/server/wm/AppTransition;->getAspectScaleDuration()J
+PLcom/android/server/wm/AppTransition;->getAspectScaleInterpolator()Landroid/view/animation/Interpolator;
+HPLcom/android/server/wm/AppTransition;->getCachedAnimations(Landroid/view/WindowManager$LayoutParams;)Lcom/android/server/AttributeCache$Entry;
+HPLcom/android/server/wm/AppTransition;->getCachedAnimations(Ljava/lang/String;I)Lcom/android/server/AttributeCache$Entry;
 PLcom/android/server/wm/AppTransition;->getDefaultNextAppTransitionStartRect(Landroid/graphics/Rect;)V
+PLcom/android/server/wm/AppTransition;->getLastClipRevealTransitionDuration()J
+PLcom/android/server/wm/AppTransition;->getNextAppTransitionStartRect(Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/AppTransition;->getRemoteAnimationController()Lcom/android/server/wm/RemoteAnimationController;
-PLcom/android/server/wm/AppTransition;->getTransitFlags()I
-PLcom/android/server/wm/AppTransition;->goodToGo(ILcom/android/server/wm/ActivityRecord;Landroid/util/ArraySet;)I
+PLcom/android/server/wm/AppTransition;->getThumbnailTransitionState(Z)I
+HSPLcom/android/server/wm/AppTransition;->getTransitFlags()I
+HSPLcom/android/server/wm/AppTransition;->goodToGo(ILcom/android/server/wm/ActivityRecord;Landroid/util/ArraySet;)I
+PLcom/android/server/wm/AppTransition;->hadClipRevealAnimation()Z
 PLcom/android/server/wm/AppTransition;->handleAppTransitionTimeout()V
 PLcom/android/server/wm/AppTransition;->isActivityTransit(I)Z
-PLcom/android/server/wm/AppTransition;->isChangeTransit(I)Z
-PLcom/android/server/wm/AppTransition;->isFetchingAppTransitionsSpecs()Z
-PLcom/android/server/wm/AppTransition;->isKeyguardGoingAwayTransit(I)Z
-PLcom/android/server/wm/AppTransition;->isKeyguardTransit(I)Z
+HSPLcom/android/server/wm/AppTransition;->isChangeTransit(I)Z
+HSPLcom/android/server/wm/AppTransition;->isFetchingAppTransitionsSpecs()Z
+HSPLcom/android/server/wm/AppTransition;->isKeyguardGoingAwayTransit(I)Z
+HSPLcom/android/server/wm/AppTransition;->isKeyguardTransit(I)Z
 PLcom/android/server/wm/AppTransition;->isNextAppTransitionOpenCrossProfileApps()Z
 PLcom/android/server/wm/AppTransition;->isNextAppTransitionThumbnailDown()Z
 PLcom/android/server/wm/AppTransition;->isNextAppTransitionThumbnailUp()Z
 HSPLcom/android/server/wm/AppTransition;->isReady()Z
 HSPLcom/android/server/wm/AppTransition;->isRunning()Z
-PLcom/android/server/wm/AppTransition;->isTaskOpenTransit(I)Z
-PLcom/android/server/wm/AppTransition;->isTaskTransit(I)Z
-PLcom/android/server/wm/AppTransition;->isTimeout()Z
-PLcom/android/server/wm/AppTransition;->isTransitionEqual(I)Z
-PLcom/android/server/wm/AppTransition;->isTransitionSet()Z
+HSPLcom/android/server/wm/AppTransition;->isTaskOpenTransit(I)Z
+HSPLcom/android/server/wm/AppTransition;->isTaskTransit(I)Z
+HSPLcom/android/server/wm/AppTransition;->isTimeout()Z
+HSPLcom/android/server/wm/AppTransition;->isTransitionEqual(I)Z
+HSPLcom/android/server/wm/AppTransition;->isTransitionSet()Z
+PLcom/android/server/wm/AppTransition;->lambda$B95jxKE2FnT5RNLStTafenhEYj4(Landroid/os/IRemoteCallback;)V
+PLcom/android/server/wm/AppTransition;->lambda$fetchAppTransitionSpecsFromFuture$1$AppTransition(Landroid/view/IAppTransitionAnimationSpecsFuture;)V
+PLcom/android/server/wm/AppTransition;->lambda$new$0$AppTransition()V
 HPLcom/android/server/wm/AppTransition;->loadAnimation(Landroid/view/WindowManager$LayoutParams;IZIILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZZLcom/android/server/wm/WindowContainer;)Landroid/view/animation/Animation;
-PLcom/android/server/wm/AppTransition;->loadAnimationAttr(Landroid/view/WindowManager$LayoutParams;II)Landroid/view/animation/Animation;
+HPLcom/android/server/wm/AppTransition;->loadAnimationAttr(Landroid/view/WindowManager$LayoutParams;II)Landroid/view/animation/Animation;
 PLcom/android/server/wm/AppTransition;->loadAnimationRes(Landroid/view/WindowManager$LayoutParams;I)Landroid/view/animation/Animation;
 PLcom/android/server/wm/AppTransition;->loadAnimationRes(Ljava/lang/String;I)Landroid/view/animation/Animation;
-PLcom/android/server/wm/AppTransition;->loadAnimationSafely(Landroid/content/Context;I)Landroid/view/animation/Animation;
+HPLcom/android/server/wm/AppTransition;->loadAnimationSafely(Landroid/content/Context;I)Landroid/view/animation/Animation;
 PLcom/android/server/wm/AppTransition;->loadKeyguardExitAnimation(I)Landroid/view/animation/Animation;
-PLcom/android/server/wm/AppTransition;->needsBoosting()Z
-PLcom/android/server/wm/AppTransition;->notifyAppTransitionFinishedLocked(Landroid/os/IBinder;)V
-PLcom/android/server/wm/AppTransition;->notifyAppTransitionPendingLocked()V
-PLcom/android/server/wm/AppTransition;->notifyAppTransitionStartingLocked(IJJJ)I
-PLcom/android/server/wm/AppTransition;->overridePendingAppTransitionRemote(Landroid/view/RemoteAnimationAdapter;)V
-PLcom/android/server/wm/AppTransition;->postAnimationCallback()V
-PLcom/android/server/wm/AppTransition;->prepare()Z
-HPLcom/android/server/wm/AppTransition;->prepareAppTransitionLocked(IZIZ)Z
+HSPLcom/android/server/wm/AppTransition;->needsBoosting()Z
+PLcom/android/server/wm/AppTransition;->notifyAppTransitionCancelledLocked(I)V
+HSPLcom/android/server/wm/AppTransition;->notifyAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/AppTransition;->notifyAppTransitionPendingLocked()V
+HSPLcom/android/server/wm/AppTransition;->notifyAppTransitionStartingLocked(IJJJ)I
+PLcom/android/server/wm/AppTransition;->overridePendingAppTransition(Ljava/lang/String;IILandroid/os/IRemoteCallback;)V
+PLcom/android/server/wm/AppTransition;->overridePendingAppTransitionClipReveal(IIII)V
+PLcom/android/server/wm/AppTransition;->overridePendingAppTransitionMultiThumb([Landroid/view/AppTransitionAnimationSpec;Landroid/os/IRemoteCallback;Landroid/os/IRemoteCallback;Z)V
+PLcom/android/server/wm/AppTransition;->overridePendingAppTransitionMultiThumbFuture(Landroid/view/IAppTransitionAnimationSpecsFuture;Landroid/os/IRemoteCallback;Z)V
+HPLcom/android/server/wm/AppTransition;->overridePendingAppTransitionRemote(Landroid/view/RemoteAnimationAdapter;)V
+PLcom/android/server/wm/AppTransition;->overridePendingAppTransitionScaleUp(IIII)V
+PLcom/android/server/wm/AppTransition;->overridePendingAppTransitionStartCrossProfileApps()V
+HSPLcom/android/server/wm/AppTransition;->postAnimationCallback()V
+HSPLcom/android/server/wm/AppTransition;->prepare()Z
+HSPLcom/android/server/wm/AppTransition;->prepareAppTransitionLocked(IZIZ)Z
+PLcom/android/server/wm/AppTransition;->prepareThumbnailAnimationWithDuration(Landroid/view/animation/Animation;IIJLandroid/view/animation/Interpolator;)Landroid/view/animation/Animation;
 PLcom/android/server/wm/AppTransition;->putDefaultNextAppTransitionCoordinates(IIIILandroid/graphics/GraphicBuffer;)V
 HSPLcom/android/server/wm/AppTransition;->registerListenerLocked(Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;)V
-PLcom/android/server/wm/AppTransition;->removeAppTransitionTimeoutCallbacks()V
-PLcom/android/server/wm/AppTransition;->setAppTransition(II)V
-PLcom/android/server/wm/AppTransition;->setAppTransitionState(I)V
-PLcom/android/server/wm/AppTransition;->setIdle()V
-PLcom/android/server/wm/AppTransition;->setLastAppTransition(ILcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/AppTransition;->setReady()V
-PLcom/android/server/wm/AppTransition;->unregisterListener(Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;)V
-PLcom/android/server/wm/AppTransition;->updateBooster()V
-PLcom/android/server/wm/AppTransition;->updateToTranslucentAnimIfNeeded(II)I
+HSPLcom/android/server/wm/AppTransition;->removeAppTransitionTimeoutCallbacks()V
+HSPLcom/android/server/wm/AppTransition;->setAppTransition(II)V
+HSPLcom/android/server/wm/AppTransition;->setAppTransitionState(I)V
+HSPLcom/android/server/wm/AppTransition;->setIdle()V
+HSPLcom/android/server/wm/AppTransition;->setLastAppTransition(ILcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/AppTransition;->setReady()V
+PLcom/android/server/wm/AppTransition;->setTimeout()V
+PLcom/android/server/wm/AppTransition;->shouldScaleDownThumbnailTransition(II)Z
+HPLcom/android/server/wm/AppTransition;->unregisterListener(Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;)V
+HSPLcom/android/server/wm/AppTransition;->updateBooster()V
+HPLcom/android/server/wm/AppTransition;->updateToTranslucentAnimIfNeeded(II)I
 HSPLcom/android/server/wm/AppTransitionController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/AppTransitionController;->applyAnimations(Landroid/util/ArraySet;IZLandroid/view/WindowManager$LayoutParams;Z)V
-PLcom/android/server/wm/AppTransitionController;->canBeWallpaperTarget(Landroid/util/ArraySet;)Z
-PLcom/android/server/wm/AppTransitionController;->collectActivityTypes(Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;)Landroid/util/ArraySet;
-PLcom/android/server/wm/AppTransitionController;->containsVoiceInteraction(Landroid/util/ArraySet;)Z
-PLcom/android/server/wm/AppTransitionController;->findAnimLayoutParamsToken(ILandroid/util/ArraySet;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/AppTransitionController;->getAnimLp(Lcom/android/server/wm/ActivityRecord;)Landroid/view/WindowManager$LayoutParams;
+HSPLcom/android/server/wm/AppTransitionController;->applyAnimations(Landroid/util/ArraySet;Landroid/util/ArraySet;ILandroid/view/WindowManager$LayoutParams;Z)V
+HPLcom/android/server/wm/AppTransitionController;->applyAnimations(Landroid/util/ArraySet;Landroid/util/ArraySet;IZLandroid/view/WindowManager$LayoutParams;Z)V
+HSPLcom/android/server/wm/AppTransitionController;->canBeWallpaperTarget(Landroid/util/ArraySet;)Z
+HSPLcom/android/server/wm/AppTransitionController;->collectActivityTypes(Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;)Landroid/util/ArraySet;
+HSPLcom/android/server/wm/AppTransitionController;->containsVoiceInteraction(Landroid/util/ArraySet;)Z
+HSPLcom/android/server/wm/AppTransitionController;->findAnimLayoutParamsToken(ILandroid/util/ArraySet;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/AppTransitionController;->getAnimLp(Lcom/android/server/wm/ActivityRecord;)Landroid/view/WindowManager$LayoutParams;
+HPLcom/android/server/wm/AppTransitionController;->getAnimationTargets(Landroid/util/ArraySet;Landroid/util/ArraySet;Z)Landroid/util/ArraySet;
 PLcom/android/server/wm/AppTransitionController;->getRemoteAnimationOverride(Lcom/android/server/wm/ActivityRecord;ILandroid/util/ArraySet;)Landroid/view/RemoteAnimationAdapter;
-PLcom/android/server/wm/AppTransitionController;->getTopApp(Landroid/util/ArraySet;Z)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/AppTransitionController;->handleAppTransitionReady()V
-HPLcom/android/server/wm/AppTransitionController;->handleChangingApps(I)V
-HPLcom/android/server/wm/AppTransitionController;->handleClosingApps()V
-PLcom/android/server/wm/AppTransitionController;->handleNonAppWindowsInTransition(II)V
-HPLcom/android/server/wm/AppTransitionController;->handleOpeningApps()V
-PLcom/android/server/wm/AppTransitionController;->isTransitWithinTask(ILcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/AppTransitionController;->getTopApp(Landroid/util/ArraySet;Z)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/AppTransitionController;->handleAppTransitionReady()V
+HSPLcom/android/server/wm/AppTransitionController;->handleChangingApps(I)V
+HSPLcom/android/server/wm/AppTransitionController;->handleClosingApps()V
+HSPLcom/android/server/wm/AppTransitionController;->handleNonAppWindowsInTransition(II)V
+HSPLcom/android/server/wm/AppTransitionController;->handleOpeningApps()V
+HPLcom/android/server/wm/AppTransitionController;->isTransitWithinTask(ILcom/android/server/wm/Task;)Z
+HPLcom/android/server/wm/AppTransitionController;->lambda$applyAnimations$4(Ljava/util/ArrayList;)V
+HPLcom/android/server/wm/AppTransitionController;->lambda$applyAnimations$4(Ljava/util/ArrayList;ILcom/android/server/wm/AnimationAdapter;)V
 PLcom/android/server/wm/AppTransitionController;->lambda$findAnimLayoutParamsToken$1(ILandroid/util/ArraySet;Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/AppTransitionController;->lambda$findAnimLayoutParamsToken$2(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/AppTransitionController;->lambda$findAnimLayoutParamsToken$3(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/AppTransitionController;->lookForHighestTokenWithFilter(Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;Ljava/util/function/Predicate;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/AppTransitionController;->maybeUpdateTransitToTranslucentAnim(I)I
-PLcom/android/server/wm/AppTransitionController;->maybeUpdateTransitToWallpaper(IZZ)I
-PLcom/android/server/wm/AppTransitionController;->overrideWithRemoteAnimationIfSet(Lcom/android/server/wm/ActivityRecord;ILandroid/util/ArraySet;)V
-HPLcom/android/server/wm/AppTransitionController;->transitionGoodToGo(Landroid/util/ArraySet;Landroid/util/ArrayMap;)Z
+HPLcom/android/server/wm/AppTransitionController;->lambda$findAnimLayoutParamsToken$2(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/AppTransitionController;->lambda$findAnimLayoutParamsToken$3(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/AppTransitionController;->lambda$handleAppTransitionReady$0$AppTransitionController()V
+HSPLcom/android/server/wm/AppTransitionController;->lookForHighestTokenWithFilter(Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;Ljava/util/function/Predicate;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/AppTransitionController;->maybeUpdateTransitToTranslucentAnim(I)I
+HSPLcom/android/server/wm/AppTransitionController;->maybeUpdateTransitToWallpaper(IZZ)I
+HSPLcom/android/server/wm/AppTransitionController;->overrideWithRemoteAnimationIfSet(Lcom/android/server/wm/ActivityRecord;ILandroid/util/ArraySet;)V
+HSPLcom/android/server/wm/AppTransitionController;->transitionGoodToGo(Landroid/util/ArraySet;Landroid/util/ArrayMap;)Z
 HSPLcom/android/server/wm/AppWarnings$ConfigHandler;-><init>(Lcom/android/server/wm/AppWarnings;Landroid/os/Looper;)V
+PLcom/android/server/wm/AppWarnings$ConfigHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/wm/AppWarnings$ConfigHandler;->scheduleWrite()V
 HSPLcom/android/server/wm/AppWarnings$UiHandler;-><init>(Lcom/android/server/wm/AppWarnings;Landroid/os/Looper;)V
 HSPLcom/android/server/wm/AppWarnings$UiHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/wm/AppWarnings$UiHandler;->hideDialogsForPackage(Ljava/lang/String;)V
 HSPLcom/android/server/wm/AppWarnings$UiHandler;->hideUnsupportedDisplaySizeDialog()V
+PLcom/android/server/wm/AppWarnings$UiHandler;->showDeprecatedTargetDialog(Lcom/android/server/wm/ActivityRecord;)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;->access$100(Lcom/android/server/wm/AppWarnings;)V
+PLcom/android/server/wm/AppWarnings;->access$300(Lcom/android/server/wm/AppWarnings;Ljava/lang/String;)V
+PLcom/android/server/wm/AppWarnings;->access$400(Lcom/android/server/wm/AppWarnings;Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/AppWarnings;->access$500(Lcom/android/server/wm/AppWarnings;)V
+PLcom/android/server/wm/AppWarnings;->getPackageFlags(Ljava/lang/String;)I
+PLcom/android/server/wm/AppWarnings;->hasPackageFlag(Ljava/lang/String;I)Z
+PLcom/android/server/wm/AppWarnings;->hideDialogsForPackageUiThread(Ljava/lang/String;)V
 HSPLcom/android/server/wm/AppWarnings;->hideUnsupportedDisplaySizeDialogUiThread()V
 HSPLcom/android/server/wm/AppWarnings;->onDensityChanged()V
-PLcom/android/server/wm/AppWarnings;->onResumeActivity(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/AppWarnings;->onStartActivity(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/AppWarnings;->onPackageDataCleared(Ljava/lang/String;)V
+PLcom/android/server/wm/AppWarnings;->onPackageUninstalled(Ljava/lang/String;)V
+HPLcom/android/server/wm/AppWarnings;->onResumeActivity(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/AppWarnings;->onStartActivity(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/AppWarnings;->readConfigFromFileAmsThread()V
-PLcom/android/server/wm/AppWarnings;->showDeprecatedTargetDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/AppWarnings;->showUnsupportedCompileSdkDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/AppWarnings;->showUnsupportedDisplaySizeDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/AppWarnings;->removePackageAndHideDialogs(Ljava/lang/String;)V
+PLcom/android/server/wm/AppWarnings;->setPackageFlag(Ljava/lang/String;IZ)V
+HSPLcom/android/server/wm/AppWarnings;->showDeprecatedTargetDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/AppWarnings;->showDeprecatedTargetSdkDialogUiThread(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/AppWarnings;->showUnsupportedCompileSdkDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/AppWarnings;->showUnsupportedDisplaySizeDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/AppWarnings;->writeConfigToFileAmsThread()V
 HPLcom/android/server/wm/BarController$1;-><init>(Lcom/android/server/wm/BarController;I)V
-PLcom/android/server/wm/BarController$1;->run()V
+HPLcom/android/server/wm/BarController$1;->run()V
 HSPLcom/android/server/wm/BarController$BarHandler;-><init>(Lcom/android/server/wm/BarController;)V
 PLcom/android/server/wm/BarController$BarHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/wm/BarController;-><init>(Ljava/lang/String;IIIIIII)V
+PLcom/android/server/wm/BarController;->access$000(Lcom/android/server/wm/BarController;)I
 PLcom/android/server/wm/BarController;->access$100(Lcom/android/server/wm/BarController;)Lcom/android/server/wm/BarController$OnBarVisibilityChangedListener;
-PLcom/android/server/wm/BarController;->adjustSystemUiVisibilityLw(II)V
-HPLcom/android/server/wm/BarController;->applyTranslucentFlagLw(Lcom/android/server/wm/WindowState;II)I
+HSPLcom/android/server/wm/BarController;->adjustSystemUiVisibilityLw(II)V
+HSPLcom/android/server/wm/BarController;->applyTranslucentFlagLw(Lcom/android/server/wm/WindowState;II)I
 HPLcom/android/server/wm/BarController;->checkHiddenLw()Z
-PLcom/android/server/wm/BarController;->checkShowTransientBarLw()Z
+HPLcom/android/server/wm/BarController;->checkShowTransientBarLw()Z
 HPLcom/android/server/wm/BarController;->computeStateLw(ZZLcom/android/server/wm/WindowState;Z)I
 HSPLcom/android/server/wm/BarController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/wm/BarController;->getStatusBarInternal()Lcom/android/server/statusbar/StatusBarManagerInternal;
-PLcom/android/server/wm/BarController;->isTransientShowRequested()Z
-PLcom/android/server/wm/BarController;->isTransientShowing()Z
-PLcom/android/server/wm/BarController;->isTransparentAllowed(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/BarController;->getStatusBarInternal()Lcom/android/server/statusbar/StatusBarManagerInternal;
+HSPLcom/android/server/wm/BarController;->isTransientShowRequested()Z
+HPLcom/android/server/wm/BarController;->isTransientShowing()Z
+HSPLcom/android/server/wm/BarController;->isTransparentAllowed(Lcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/BarController;->setBarShowingLw(Z)Z
-PLcom/android/server/wm/BarController;->setContentFrame(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/BarController;->setContentFrame(Landroid/graphics/Rect;)V
 PLcom/android/server/wm/BarController;->setOnBarVisibilityChangedListener(Lcom/android/server/wm/BarController$OnBarVisibilityChangedListener;Z)V
-PLcom/android/server/wm/BarController;->setShowTransparent(Z)V
+HPLcom/android/server/wm/BarController;->setShowTransparent(Z)V
+PLcom/android/server/wm/BarController;->setTransientBarState(I)V
 PLcom/android/server/wm/BarController;->setWindow(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/BarController;->showTransient()V
 HPLcom/android/server/wm/BarController;->skipAnimation()Z
 PLcom/android/server/wm/BarController;->transientBarStateToString(I)Ljava/lang/String;
-PLcom/android/server/wm/BarController;->updateStateLw(I)Z
-HPLcom/android/server/wm/BarController;->updateVisibilityLw(ZII)I
-PLcom/android/server/wm/BarController;->wasRecentlyTranslucent()Z
+HPLcom/android/server/wm/BarController;->updateStateLw(I)Z
+HSPLcom/android/server/wm/BarController;->updateVisibilityLw(ZII)I
+HPLcom/android/server/wm/BarController;->wasRecentlyTranslucent()Z
 HPLcom/android/server/wm/BlackFrame$BlackSurface;-><init>(Landroid/view/SurfaceControl$Transaction;IIIIILcom/android/server/wm/DisplayContent;Landroid/view/SurfaceControl;)V
-PLcom/android/server/wm/BlackFrame;-><init>(Ljava/util/function/Supplier;Landroid/view/SurfaceControl$Transaction;Landroid/graphics/Rect;Landroid/graphics/Rect;ILcom/android/server/wm/DisplayContent;ZLandroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/BlackFrame;-><init>(Ljava/util/function/Supplier;Landroid/view/SurfaceControl$Transaction;Landroid/graphics/Rect;Landroid/graphics/Rect;ILcom/android/server/wm/DisplayContent;ZLandroid/view/SurfaceControl;)V
 PLcom/android/server/wm/BlackFrame;->kill()V
 HSPLcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;-><init>(Lcom/android/server/wm/BoundsAnimationController;)V
 HSPLcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;-><init>(Lcom/android/server/wm/BoundsAnimationController;Lcom/android/server/wm/BoundsAnimationController$1;)V
-PLcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;->animationFinished()V
-PLcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
-PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;-><init>(Lcom/android/server/wm/BoundsAnimationController;Lcom/android/server/wm/BoundsAnimationTarget;ILandroid/graphics/Rect;Landroid/graphics/Rect;IIZZLandroid/graphics/Rect;)V
+HSPLcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;->animationFinished()V
+HSPLcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;->run()V
+HPLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;-><init>(Lcom/android/server/wm/BoundsAnimationController;Lcom/android/server/wm/BoundsAnimationTarget;ILandroid/graphics/Rect;Landroid/graphics/Rect;IIZZLandroid/graphics/Rect;)V
+PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->access$1000(Lcom/android/server/wm/BoundsAnimationController$BoundsAnimator;)I
+PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->access$1100(Lcom/android/server/wm/BoundsAnimationController$BoundsAnimator;)I
+PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->access$1200(Lcom/android/server/wm/BoundsAnimationController$BoundsAnimator;)I
 PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->access$1300(Lcom/android/server/wm/BoundsAnimationController$BoundsAnimator;)I
 PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->access$700(Lcom/android/server/wm/BoundsAnimationController$BoundsAnimator;)V
+PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->access$800(Lcom/android/server/wm/BoundsAnimationController$BoundsAnimator;)Z
 PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->access$900(Lcom/android/server/wm/BoundsAnimationController$BoundsAnimator;)Z
-PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->animatingToLargerSize()Z
+HPLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->animatingToLargerSize()Z
+PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->cancel()V
 PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->cancelAndCallAnimationEnd()V
 PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->getAnimationHandler()Landroid/animation/AnimationHandler;
 PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->isAnimatingTo(Landroid/graphics/Rect;)Z
@@ -21157,36 +35300,53 @@
 PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->onAnimationCancel(Landroid/animation/Animator;)V
 PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->onAnimationEnd(Landroid/animation/Animator;)V
 PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->onAnimationStart(Landroid/animation/Animator;)V
-PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
+HPLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
 PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->pause()V
 PLcom/android/server/wm/BoundsAnimationController$BoundsAnimator;->resume()V
 HSPLcom/android/server/wm/BoundsAnimationController;-><init>(Landroid/content/Context;Lcom/android/server/wm/AppTransition;Landroid/os/Handler;Landroid/animation/AnimationHandler;)V
-PLcom/android/server/wm/BoundsAnimationController;->access$000(Lcom/android/server/wm/BoundsAnimationController;)Z
+HSPLcom/android/server/wm/BoundsAnimationController;->access$000(Lcom/android/server/wm/BoundsAnimationController;)Z
+PLcom/android/server/wm/BoundsAnimationController;->access$002(Lcom/android/server/wm/BoundsAnimationController;Z)Z
 PLcom/android/server/wm/BoundsAnimationController;->access$100(Lcom/android/server/wm/BoundsAnimationController;)Landroid/os/Handler;
+PLcom/android/server/wm/BoundsAnimationController;->access$200(Lcom/android/server/wm/BoundsAnimationController;)Landroid/util/ArrayMap;
+PLcom/android/server/wm/BoundsAnimationController;->access$400(Lcom/android/server/wm/BoundsAnimationController;)V
+PLcom/android/server/wm/BoundsAnimationController;->access$500(Lcom/android/server/wm/BoundsAnimationController;)Lcom/android/server/wm/AppTransition;
+PLcom/android/server/wm/BoundsAnimationController;->access$600(Lcom/android/server/wm/BoundsAnimationController;)Landroid/animation/AnimationHandler;
 PLcom/android/server/wm/BoundsAnimationController;->animateBounds(Lcom/android/server/wm/BoundsAnimationTarget;Landroid/graphics/Rect;Landroid/graphics/Rect;IIZZI)V
-PLcom/android/server/wm/BoundsAnimationController;->animateBoundsImpl(Lcom/android/server/wm/BoundsAnimationTarget;Landroid/graphics/Rect;Landroid/graphics/Rect;IIZZI)Lcom/android/server/wm/BoundsAnimationController$BoundsAnimator;
+HPLcom/android/server/wm/BoundsAnimationController;->animateBoundsImpl(Lcom/android/server/wm/BoundsAnimationTarget;Landroid/graphics/Rect;Landroid/graphics/Rect;IIZZI)Lcom/android/server/wm/BoundsAnimationController$BoundsAnimator;
 PLcom/android/server/wm/BoundsAnimationController;->cancel(Lcom/android/server/wm/BoundsAnimationTarget;)V
+PLcom/android/server/wm/BoundsAnimationController;->getAnimationType()I
 PLcom/android/server/wm/BoundsAnimationController;->getHandler()Landroid/os/Handler;
 PLcom/android/server/wm/BoundsAnimationController;->isRunningFadeInAnimation(Lcom/android/server/wm/BoundsAnimationTarget;)Z
+PLcom/android/server/wm/BoundsAnimationController;->lambda$MoVv_WhxoMrTVo-xz1qu2FMcYrM(Lcom/android/server/wm/BoundsAnimationController;)V
 HSPLcom/android/server/wm/BoundsAnimationController;->lambda$new$0$BoundsAnimationController(Landroid/animation/AnimationHandler;)V
+PLcom/android/server/wm/BoundsAnimationController;->onAllWindowsDrawn()V
+PLcom/android/server/wm/BoundsAnimationController;->resume()V
 PLcom/android/server/wm/BoundsAnimationController;->setAnimationType(I)V
+PLcom/android/server/wm/BoundsAnimationController;->updateBooster()V
 HSPLcom/android/server/wm/ClientLifecycleManager;-><init>()V
 HSPLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/IApplicationThread;Landroid/app/servertransaction/ClientTransactionItem;)V
-PLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/servertransaction/ActivityLifecycleItem;)V
-PLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/servertransaction/ClientTransactionItem;)V
+HPLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/servertransaction/ActivityLifecycleItem;)V
+HSPLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/servertransaction/ClientTransactionItem;)V
 HSPLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/servertransaction/ClientTransaction;)V
 HSPLcom/android/server/wm/ClientLifecycleManager;->transactionWithCallback(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/servertransaction/ClientTransactionItem;)Landroid/app/servertransaction/ClientTransaction;
-PLcom/android/server/wm/ClientLifecycleManager;->transactionWithState(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/servertransaction/ActivityLifecycleItem;)Landroid/app/servertransaction/ClientTransaction;
+HPLcom/android/server/wm/ClientLifecycleManager;->transactionWithState(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/servertransaction/ActivityLifecycleItem;)Landroid/app/servertransaction/ClientTransaction;
 HSPLcom/android/server/wm/CompatModePackages$CompatHandler;-><init>(Lcom/android/server/wm/CompatModePackages;Landroid/os/Looper;)V
 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;->getPackageFlags(Ljava/lang/String;)I
-PLcom/android/server/wm/CompatModePackages;->handlePackageAddedLocked(Ljava/lang/String;Z)V
+PLcom/android/server/wm/CompatModePackages;->getPackages()Ljava/util/HashMap;
+HPLcom/android/server/wm/CompatModePackages;->handlePackageAddedLocked(Ljava/lang/String;Z)V
+PLcom/android/server/wm/CompatModePackages;->handlePackageDataClearedLocked(Ljava/lang/String;)V
+PLcom/android/server/wm/CompatModePackages;->handlePackageUninstalledLocked(Ljava/lang/String;)V
+PLcom/android/server/wm/CompatModePackages;->removePackage(Ljava/lang/String;)V
 HSPLcom/android/server/wm/ConfigurationContainer$RemoteToken;-><init>(Lcom/android/server/wm/ConfigurationContainer;)V
+PLcom/android/server/wm/ConfigurationContainer$RemoteToken;->fromBinder(Landroid/os/IBinder;)Lcom/android/server/wm/ConfigurationContainer$RemoteToken;
+PLcom/android/server/wm/ConfigurationContainer$RemoteToken;->getContainer()Lcom/android/server/wm/ConfigurationContainer;
 HSPLcom/android/server/wm/ConfigurationContainer;-><init>()V
+HSPLcom/android/server/wm/ConfigurationContainer;->containsListener(Lcom/android/server/wm/ConfigurationContainerListener;)Z
 HSPLcom/android/server/wm/ConfigurationContainer;->diffRequestedOverrideBounds(Landroid/graphics/Rect;)I
-PLcom/android/server/wm/ConfigurationContainer;->dumpChildrenNames(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/wm/ConfigurationContainer;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HPLcom/android/server/wm/ConfigurationContainer;->dumpChildrenNames(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/ConfigurationContainer;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
 HSPLcom/android/server/wm/ConfigurationContainer;->equivalentBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
 HSPLcom/android/server/wm/ConfigurationContainer;->equivalentRequestedOverrideBounds(Landroid/graphics/Rect;)Z
 HSPLcom/android/server/wm/ConfigurationContainer;->getActivityType()I
@@ -21195,28 +35355,31 @@
 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;->getName()Ljava/lang/String;
+HPLcom/android/server/wm/ConfigurationContainer;->getPosition(Landroid/graphics/Point;)V
 HSPLcom/android/server/wm/ConfigurationContainer;->getRequestedOverrideBounds()Landroid/graphics/Rect;
 HSPLcom/android/server/wm/ConfigurationContainer;->getRequestedOverrideConfiguration()Landroid/content/res/Configuration;
 HSPLcom/android/server/wm/ConfigurationContainer;->getRequestedOverrideWindowingMode()I
-PLcom/android/server/wm/ConfigurationContainer;->getResolvedOverrideBounds()Landroid/graphics/Rect;
-PLcom/android/server/wm/ConfigurationContainer;->getResolvedOverrideConfiguration()Landroid/content/res/Configuration;
+HSPLcom/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
 HSPLcom/android/server/wm/ConfigurationContainer;->hasChild()Z
-HPLcom/android/server/wm/ConfigurationContainer;->hasCompatibleActivityType(Lcom/android/server/wm/ConfigurationContainer;)Z
-HPLcom/android/server/wm/ConfigurationContainer;->inFreeformWindowingMode()Z
-HPLcom/android/server/wm/ConfigurationContainer;->inMultiWindowMode()Z
+HSPLcom/android/server/wm/ConfigurationContainer;->hasCompatibleActivityType(Lcom/android/server/wm/ConfigurationContainer;)Z
+HPLcom/android/server/wm/ConfigurationContainer;->hasOverrideBounds()Z
+HSPLcom/android/server/wm/ConfigurationContainer;->inFreeformWindowingMode()Z
+HSPLcom/android/server/wm/ConfigurationContainer;->inMultiWindowMode()Z
 HSPLcom/android/server/wm/ConfigurationContainer;->inPinnedWindowingMode()Z
 HSPLcom/android/server/wm/ConfigurationContainer;->inSplitScreenPrimaryWindowingMode()Z
-PLcom/android/server/wm/ConfigurationContainer;->inSplitScreenSecondaryWindowingMode()Z
-PLcom/android/server/wm/ConfigurationContainer;->inSplitScreenWindowingMode()Z
+HSPLcom/android/server/wm/ConfigurationContainer;->inSplitScreenSecondaryWindowingMode()Z
+HSPLcom/android/server/wm/ConfigurationContainer;->inSplitScreenWindowingMode()Z
 HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeAssistant()Z
 HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeHome()Z
-PLcom/android/server/wm/ConfigurationContainer;->isActivityTypeRecents()Z
-PLcom/android/server/wm/ConfigurationContainer;->isActivityTypeStandard()Z
-PLcom/android/server/wm/ConfigurationContainer;->isActivityTypeStandardOrUndefined()Z
+HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeRecents()Z
+HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeStandard()Z
+HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeStandardOrUndefined()Z
 HSPLcom/android/server/wm/ConfigurationContainer;->isAlwaysOnTop()Z
-HPLcom/android/server/wm/ConfigurationContainer;->isCompatible(II)Z
+HSPLcom/android/server/wm/ConfigurationContainer;->isCompatible(II)Z
+HSPLcom/android/server/wm/ConfigurationContainer;->isFocusable()Z
 HSPLcom/android/server/wm/ConfigurationContainer;->matchParentBounds()Z
 HSPLcom/android/server/wm/ConfigurationContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/ConfigurationContainer;->onConfigurationChanged(Landroid/content/res/Configuration;Z)V
@@ -21226,60 +35389,158 @@
 HSPLcom/android/server/wm/ConfigurationContainer;->registerConfigurationChangeListener(Lcom/android/server/wm/ConfigurationContainerListener;)V
 HSPLcom/android/server/wm/ConfigurationContainer;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/ConfigurationContainer;->setActivityType(I)V
+PLcom/android/server/wm/ConfigurationContainer;->setAlwaysOnTop(Z)V
 HSPLcom/android/server/wm/ConfigurationContainer;->setBounds(IIII)I
 HSPLcom/android/server/wm/ConfigurationContainer;->setBounds(Landroid/graphics/Rect;)I
 HSPLcom/android/server/wm/ConfigurationContainer;->setDisplayWindowingMode(I)V
 HSPLcom/android/server/wm/ConfigurationContainer;->setWindowingMode(I)V
-HPLcom/android/server/wm/ConfigurationContainer;->supportsSplitScreenWindowingMode()Z
-PLcom/android/server/wm/Dimmer$AlphaAnimationSpec;-><init>(FFJ)V
-PLcom/android/server/wm/Dimmer$AlphaAnimationSpec;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V
-PLcom/android/server/wm/Dimmer$AlphaAnimationSpec;->getDuration()J
+HSPLcom/android/server/wm/ConfigurationContainer;->supportsSplitScreenWindowingMode()Z
+HPLcom/android/server/wm/ConfigurationContainer;->unregisterConfigurationChangeListener(Lcom/android/server/wm/ConfigurationContainerListener;)V
+PLcom/android/server/wm/DeprecatedTargetSdkVersionDialog;-><init>(Lcom/android/server/wm/AppWarnings;Landroid/content/Context;Landroid/content/pm/ApplicationInfo;)V
+PLcom/android/server/wm/DeprecatedTargetSdkVersionDialog;->dismiss()V
+PLcom/android/server/wm/DeprecatedTargetSdkVersionDialog;->lambda$new$0$DeprecatedTargetSdkVersionDialog(Lcom/android/server/wm/AppWarnings;Landroid/content/DialogInterface;I)V
+PLcom/android/server/wm/DeprecatedTargetSdkVersionDialog;->show()V
+HPLcom/android/server/wm/Dimmer$AlphaAnimationSpec;-><init>(FFJ)V
+HPLcom/android/server/wm/Dimmer$AlphaAnimationSpec;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V
+HPLcom/android/server/wm/Dimmer$AlphaAnimationSpec;->getDuration()J
 PLcom/android/server/wm/Dimmer$DimAnimatable;-><init>(Lcom/android/server/wm/Dimmer;Landroid/view/SurfaceControl;)V
 PLcom/android/server/wm/Dimmer$DimAnimatable;-><init>(Lcom/android/server/wm/Dimmer;Landroid/view/SurfaceControl;Lcom/android/server/wm/Dimmer$1;)V
-PLcom/android/server/wm/Dimmer$DimAnimatable;->getAnimationLeashParent()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/Dimmer$DimAnimatable;->getParentSurfaceControl()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/Dimmer$DimAnimatable;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
-PLcom/android/server/wm/Dimmer$DimAnimatable;->getSurfaceControl()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/Dimmer$DimAnimatable;->getSurfaceHeight()I
-PLcom/android/server/wm/Dimmer$DimAnimatable;->getSurfaceWidth()I
-PLcom/android/server/wm/Dimmer$DimAnimatable;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
-PLcom/android/server/wm/Dimmer$DimAnimatable;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
-PLcom/android/server/wm/Dimmer$DimAnimatable;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/Dimmer$DimAnimatable;->removeSurface()V
-PLcom/android/server/wm/Dimmer$DimState;-><init>(Lcom/android/server/wm/Dimmer;Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->getAnimationLeashParent()Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->getParentSurfaceControl()Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->getSurfaceControl()Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->getSurfaceHeight()I
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->getSurfaceWidth()I
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->removeSurface()V
+HPLcom/android/server/wm/Dimmer$DimState;-><init>(Lcom/android/server/wm/Dimmer;Landroid/view/SurfaceControl;)V
 PLcom/android/server/wm/Dimmer$DimState;->lambda$new$0$Dimmer$DimState(Lcom/android/server/wm/Dimmer$DimAnimatable;)V
+PLcom/android/server/wm/Dimmer$DimState;->lambda$new$0$Dimmer$DimState(Lcom/android/server/wm/Dimmer$DimAnimatable;ILcom/android/server/wm/AnimationAdapter;)V
 HSPLcom/android/server/wm/Dimmer;-><init>(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/Dimmer;-><init>(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Dimmer$SurfaceAnimatorStarter;)V
-PLcom/android/server/wm/Dimmer;->dim(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowContainer;IF)V
-PLcom/android/server/wm/Dimmer;->dimBelow(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowContainer;F)V
-PLcom/android/server/wm/Dimmer;->getDimDuration(Lcom/android/server/wm/WindowContainer;)J
-PLcom/android/server/wm/Dimmer;->getDimState(Lcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/Dimmer$DimState;
-PLcom/android/server/wm/Dimmer;->makeDimLayer()Landroid/view/SurfaceControl;
+PLcom/android/server/wm/Dimmer;->access$000(Lcom/android/server/wm/Dimmer;)Lcom/android/server/wm/WindowContainer;
+HPLcom/android/server/wm/Dimmer;->dim(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowContainer;IF)V
+HPLcom/android/server/wm/Dimmer;->dimAbove(Landroid/view/SurfaceControl$Transaction;F)V
+HPLcom/android/server/wm/Dimmer;->dimBelow(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowContainer;F)V
+PLcom/android/server/wm/Dimmer;->dontAnimateExit()V
+HPLcom/android/server/wm/Dimmer;->getDimDuration(Lcom/android/server/wm/WindowContainer;)J
+HPLcom/android/server/wm/Dimmer;->getDimState(Lcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/Dimmer$DimState;
+HPLcom/android/server/wm/Dimmer;->makeDimLayer()Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/Dimmer;->resetDimStates()V
-PLcom/android/server/wm/Dimmer;->startAnim(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/SurfaceAnimator;Landroid/view/SurfaceControl$Transaction;FF)V
+HPLcom/android/server/wm/Dimmer;->startAnim(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/SurfaceAnimator;Landroid/view/SurfaceControl$Transaction;FF)V
 PLcom/android/server/wm/Dimmer;->startDimEnter(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/SurfaceAnimator;Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/Dimmer;->startDimExit(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/SurfaceAnimator;Landroid/view/SurfaceControl$Transaction;)V
+PLcom/android/server/wm/Dimmer;->stopDim(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/Dimmer;->updateDims(Landroid/view/SurfaceControl$Transaction;Landroid/graphics/Rect;)Z
+HSPLcom/android/server/wm/DisplayArea$1;-><clinit>()V
+HSPLcom/android/server/wm/DisplayArea$Root;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+HPLcom/android/server/wm/DisplayArea$Root;->getDimmer()Lcom/android/server/wm/Dimmer;
+HSPLcom/android/server/wm/DisplayArea$Root;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
+PLcom/android/server/wm/DisplayArea$Root;->getSurfaceControl()Landroid/view/SurfaceControl;
+PLcom/android/server/wm/DisplayArea$Root;->getSurfaceHeight()I
+PLcom/android/server/wm/DisplayArea$Root;->getSurfaceWidth()I
+PLcom/android/server/wm/DisplayArea$Root;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
+HSPLcom/android/server/wm/DisplayArea$Root;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/DisplayArea$Root;->prepareSurfaces()V
+HSPLcom/android/server/wm/DisplayArea$Tokens;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayArea$Type;Ljava/lang/String;)V
+HPLcom/android/server/wm/DisplayArea$Tokens;->addChild(Lcom/android/server/wm/WindowToken;)V
+HSPLcom/android/server/wm/DisplayArea$Tokens;->getOrientation(I)I
+HSPLcom/android/server/wm/DisplayArea$Tokens;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
+HSPLcom/android/server/wm/DisplayArea$Tokens;->getSurfaceControl()Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/DisplayArea$Tokens;->lambda$new$0$DisplayArea$Tokens(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/DisplayArea$Tokens;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/DisplayArea$Type;-><clinit>()V
+HSPLcom/android/server/wm/DisplayArea$Type;-><init>(Ljava/lang/String;I)V
+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;
+HPLcom/android/server/wm/DisplayArea$Type;->typeOf(Lcom/android/server/wm/WindowToken;)Lcom/android/server/wm/DisplayArea$Type;
+HSPLcom/android/server/wm/DisplayArea$Type;->values()[Lcom/android/server/wm/DisplayArea$Type;
+HSPLcom/android/server/wm/DisplayArea;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayArea$Type;Ljava/lang/String;)V
+PLcom/android/server/wm/DisplayArea;->commitPendingTransaction()V
+HPLcom/android/server/wm/DisplayArea;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HSPLcom/android/server/wm/DisplayArea;->fillsParent()Z
+PLcom/android/server/wm/DisplayArea;->getAnimationLeashParent()Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/DisplayArea;->getName()Ljava/lang/String;
+PLcom/android/server/wm/DisplayArea;->getParentSurfaceControl()Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/DisplayArea;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
+HSPLcom/android/server/wm/DisplayArea;->getSurfaceControl()Landroid/view/SurfaceControl;
+PLcom/android/server/wm/DisplayArea;->getSurfaceHeight()I
+PLcom/android/server/wm/DisplayArea;->getSurfaceWidth()I
+PLcom/android/server/wm/DisplayArea;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
+PLcom/android/server/wm/DisplayArea;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
+PLcom/android/server/wm/DisplayArea;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/DisplayArea;->onChildPositionChanged(Lcom/android/server/wm/WindowContainer;)V
+HSPLcom/android/server/wm/DisplayArea;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+PLcom/android/server/wm/DisplayAreaPolicy$1;-><clinit>()V
+HSPLcom/android/server/wm/DisplayAreaPolicy$Default;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayArea$Root;Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent$TaskContainers;)V
+HPLcom/android/server/wm/DisplayAreaPolicy$Default;->addWindow(Lcom/android/server/wm/WindowToken;)V
+HSPLcom/android/server/wm/DisplayAreaPolicy$Default;->attachDisplayAreas()V
+HSPLcom/android/server/wm/DisplayAreaPolicy;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayArea$Root;Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent$TaskContainers;)V
 HSPLcom/android/server/wm/DisplayContent$AboveAppWindowContainers;-><init>(Lcom/android/server/wm/DisplayContent;Ljava/lang/String;Lcom/android/server/wm/WindowManagerService;)V
-PLcom/android/server/wm/DisplayContent$AboveAppWindowContainers;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/DisplayContent$AboveAppWindowContainers;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/DisplayContent$AboveAppWindowContainers;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowContainer;)V
-PLcom/android/server/wm/DisplayContent$AboveAppWindowContainers;->makeChildSurface(Lcom/android/server/wm/WindowContainer;)Landroid/view/SurfaceControl$Builder;
+HPLcom/android/server/wm/DisplayContent$AboveAppWindowContainers;->makeChildSurface(Lcom/android/server/wm/WindowContainer;)Landroid/view/SurfaceControl$Builder;
 HSPLcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;-><init>()V
 HSPLcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;-><init>(Lcom/android/server/wm/DisplayContent$1;)V
 HSPLcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;->reset()V
 HSPLcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;-><init>(Lcom/android/server/wm/WindowManagerService;)V
-HPLcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;->fillsParent()Z
+HSPLcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;->fillsParent()Z
+PLcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;->isVisible()Z
+HSPLcom/android/server/wm/DisplayContent$ImeContainer;-><init>(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowManagerService;)V
+HSPLcom/android/server/wm/DisplayContent$ImeContainer;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+HSPLcom/android/server/wm/DisplayContent$ImeContainer;->assignLayer(Landroid/view/SurfaceControl$Transaction;I)V
+HSPLcom/android/server/wm/DisplayContent$ImeContainer;->assignRelativeLayer(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;I)V
+HPLcom/android/server/wm/DisplayContent$ImeContainer;->forAllWindowForce(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+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;->setNeedsLayer()V
+HSPLcom/android/server/wm/DisplayContent$ImeContainer;->skipImeWindowsDuringTraversal(Lcom/android/server/wm/DisplayContent;)Z
 HSPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;-><init>(Lcom/android/server/wm/DisplayContent;Ljava/lang/String;Lcom/android/server/wm/WindowManagerService;)V
-PLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->addChild(Lcom/android/server/wm/WindowToken;)V
-HPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->getDimmer()Lcom/android/server/wm/Dimmer;
+HSPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->addChild(Lcom/android/server/wm/WindowToken;)V
+HSPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->getDimmer()Lcom/android/server/wm/Dimmer;
 HSPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->getName()Ljava/lang/String;
 HSPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->getOrientation()I
-PLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->lambda$new$0$DisplayContent$NonAppWindowContainers(Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowToken;)I
-PLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->lambda$new$1(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->getOrientation(I)I
+HPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->lambda$new$0$DisplayContent$NonAppWindowContainers(Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowToken;)I
+HPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->lambda$new$1$DisplayContent$NonAppWindowContainers(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->lambda$new$1(Lcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->prepareSurfaces()V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;-><init>(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowManagerService;)V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->addChild(Lcom/android/server/wm/ActivityStack;I)V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->addStackReferenceIfNeeded(Lcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->assignStackOrdering(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->findPositionForStack(ILcom/android/server/wm/ActivityStack;Z)I
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->forAllExitingAppTokenWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+PLcom/android/server/wm/DisplayContent$TaskContainers;->getAppAnimationLayer(I)Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->getIndexOf(Lcom/android/server/wm/ActivityStack;)I
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->getOrientation(I)I
+HPLcom/android/server/wm/DisplayContent$TaskContainers;->getRootHomeTask()Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->getRootPinnedTask()Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->getRootSplitScreenPrimaryTask()Lcom/android/server/wm/ActivityStack;
+PLcom/android/server/wm/DisplayContent$TaskContainers;->getSplitScreenDividerAnchor()Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->getStack(II)Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->getTopStack()Lcom/android/server/wm/ActivityStack;
+PLcom/android/server/wm/DisplayContent$TaskContainers;->getVisibleTasks()Ljava/util/ArrayList;
+HPLcom/android/server/wm/DisplayContent$TaskContainers;->lambda$getVisibleTasks$0(Ljava/util/ArrayList;Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->lambda$onParentChanged$1$DisplayContent$TaskContainers()V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->onChildPositionChanged(Lcom/android/server/wm/WindowContainer;)V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->onStackWindowingModeChanged(Lcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->positionChildAt(ILcom/android/server/wm/ActivityStack;Z)V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+PLcom/android/server/wm/DisplayContent$TaskContainers;->removeChild(Lcom/android/server/wm/ActivityStack;)V
+PLcom/android/server/wm/DisplayContent$TaskContainers;->removeChild(Lcom/android/server/wm/WindowContainer;)V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->removeExistingAppTokensIfPossible()V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->removeStackReferenceIfNeeded(Lcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/DisplayContent$TaskContainers;->setExitingTokensHasVisible(Z)V
 HSPLcom/android/server/wm/DisplayContent$TaskForResizePointSearchResult;-><init>()V
 PLcom/android/server/wm/DisplayContent$TaskForResizePointSearchResult;->lambda$1FHFJXiYTNFcgi5tiBrxzbmjdWw(Lcom/android/server/wm/DisplayContent$TaskForResizePointSearchResult;Lcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/DisplayContent$TaskForResizePointSearchResult;->process(Lcom/android/server/wm/WindowContainer;III)Lcom/android/server/wm/Task;
+HPLcom/android/server/wm/DisplayContent$TaskForResizePointSearchResult;->process(Lcom/android/server/wm/WindowContainer;III)Lcom/android/server/wm/Task;
 PLcom/android/server/wm/DisplayContent$TaskForResizePointSearchResult;->processTask(Lcom/android/server/wm/Task;)Z
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;-><init>(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->addChild(Lcom/android/server/wm/ActivityStack;I)V
@@ -21289,7 +35550,7 @@
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->findPositionForStack(ILcom/android/server/wm/ActivityStack;Z)I
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->forAllExitingAppTokenWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
-PLcom/android/server/wm/DisplayContent$TaskStackContainers;->getAppAnimationLayer(I)Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/DisplayContent$TaskStackContainers;->getAppAnimationLayer(I)Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->getHomeStack()Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->getIndexOf(Lcom/android/server/wm/ActivityStack;)I
 HPLcom/android/server/wm/DisplayContent$TaskStackContainers;->getOrientation()I
@@ -21298,251 +35559,349 @@
 PLcom/android/server/wm/DisplayContent$TaskStackContainers;->getSplitScreenDividerAnchor()Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->getSplitScreenPrimaryStack()Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->getStack(II)Lcom/android/server/wm/ActivityStack;
-HPLcom/android/server/wm/DisplayContent$TaskStackContainers;->getTopStack()Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->getTopStack()Lcom/android/server/wm/ActivityStack;
+PLcom/android/server/wm/DisplayContent$TaskStackContainers;->getVisibleTasks()Ljava/util/ArrayList;
+HPLcom/android/server/wm/DisplayContent$TaskStackContainers;->lambda$getVisibleTasks$0(Ljava/util/ArrayList;Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->lambda$onParentChanged$1$DisplayContent$TaskStackContainers()V
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
+HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->onStackWindowingModeChanged(Lcom/android/server/wm/ActivityStack;)V
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->positionChildAt(ILcom/android/server/wm/ActivityStack;Z)V
-PLcom/android/server/wm/DisplayContent$TaskStackContainers;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+PLcom/android/server/wm/DisplayContent$TaskStackContainers;->removeChild(Lcom/android/server/wm/ActivityStack;)V
 PLcom/android/server/wm/DisplayContent$TaskStackContainers;->removeChild(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->removeExistingAppTokensIfPossible()V
-PLcom/android/server/wm/DisplayContent$TaskStackContainers;->removeStackReferenceIfNeeded(Lcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->removeStackReferenceIfNeeded(Lcom/android/server/wm/ActivityStack;)V
 HSPLcom/android/server/wm/DisplayContent$TaskStackContainers;->setExitingTokensHasVisible(Z)V
 HSPLcom/android/server/wm/DisplayContent$WindowContainers;-><init>(Lcom/android/server/wm/DisplayContent;Ljava/lang/String;Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/DisplayContent$WindowContainers;->addChildren()V
 HSPLcom/android/server/wm/DisplayContent$WindowContainers;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/DisplayContent$WindowContainers;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
 HSPLcom/android/server/wm/DisplayContent$WindowContainers;->getName()Ljava/lang/String;
-HPLcom/android/server/wm/DisplayContent$WindowContainers;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HSPLcom/android/server/wm/DisplayContent$WindowContainers;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
 HSPLcom/android/server/wm/DisplayContent$WindowContainers;->skipTraverseChild(Lcom/android/server/wm/WindowContainer;)Z
 HSPLcom/android/server/wm/DisplayContent;-><clinit>()V
 HSPLcom/android/server/wm/DisplayContent;-><init>(Landroid/view/Display;Lcom/android/server/wm/RootActivityContainer;)V
+HSPLcom/android/server/wm/DisplayContent;-><init>(Landroid/view/Display;Lcom/android/server/wm/RootWindowContainer;)V
 HSPLcom/android/server/wm/DisplayContent;->access$100(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayContent$TaskStackContainers;
+HSPLcom/android/server/wm/DisplayContent;->access$1002(Lcom/android/server/wm/DisplayContent;I)I
+HSPLcom/android/server/wm/DisplayContent;->access$200(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayContent$TaskContainers;
+HSPLcom/android/server/wm/DisplayContent;->access$200(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayContent$TaskStackContainers;
 HSPLcom/android/server/wm/DisplayContent;->access$200(Lcom/android/server/wm/DisplayContent;)Ljava/util/ArrayList;
 HSPLcom/android/server/wm/DisplayContent;->access$300(Lcom/android/server/wm/DisplayContent;)Ljava/util/ArrayList;
 HSPLcom/android/server/wm/DisplayContent;->access$400(Lcom/android/server/wm/DisplayContent;)Ljava/util/ArrayList;
 HSPLcom/android/server/wm/DisplayContent;->access$500(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayContent$NonAppWindowContainers;
+HSPLcom/android/server/wm/DisplayContent;->access$500(Lcom/android/server/wm/DisplayContent;)Ljava/util/ArrayList;
 HSPLcom/android/server/wm/DisplayContent;->access$600(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayContent$AboveAppWindowContainers;
+HSPLcom/android/server/wm/DisplayContent;->access$600(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayContent$ImeContainer;
+HSPLcom/android/server/wm/DisplayContent;->access$600(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayContent$NonAppWindowContainers;
+HSPLcom/android/server/wm/DisplayContent;->access$700(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayArea$Root;
+HSPLcom/android/server/wm/DisplayContent;->access$700(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayContent$AboveAppWindowContainers;
 HSPLcom/android/server/wm/DisplayContent;->access$700(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayContent$NonAppWindowContainers;
 HSPLcom/android/server/wm/DisplayContent;->access$800(Lcom/android/server/wm/DisplayContent;)I
+HSPLcom/android/server/wm/DisplayContent;->access$800(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayAreaPolicy;
+HSPLcom/android/server/wm/DisplayContent;->access$800(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayContent$AboveAppWindowContainers;
+HSPLcom/android/server/wm/DisplayContent;->access$800(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/DisplayContent$NonAppWindowContainers;
 PLcom/android/server/wm/DisplayContent;->access$802(Lcom/android/server/wm/DisplayContent;I)I
+HSPLcom/android/server/wm/DisplayContent;->access$900(Lcom/android/server/wm/DisplayContent;)I
 HSPLcom/android/server/wm/DisplayContent;->access$902(Lcom/android/server/wm/DisplayContent;I)I
 HSPLcom/android/server/wm/DisplayContent;->addStack(Lcom/android/server/wm/ActivityStack;I)V
 HPLcom/android/server/wm/DisplayContent;->addToGlobalAndConsumeLimit(Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Rect;ILcom/android/server/wm/WindowState;I)I
-PLcom/android/server/wm/DisplayContent;->addWindowToken(Landroid/os/IBinder;Lcom/android/server/wm/WindowToken;)V
+HSPLcom/android/server/wm/DisplayContent;->addWindowToken(Landroid/os/IBinder;Lcom/android/server/wm/WindowToken;)V
 HSPLcom/android/server/wm/DisplayContent;->adjustDisplaySizeRanges(Landroid/view/DisplayInfo;IIII)V
 HSPLcom/android/server/wm/DisplayContent;->adjustForImeIfNeeded()V
-HPLcom/android/server/wm/DisplayContent;->allResumedActivitiesComplete()Z
+HSPLcom/android/server/wm/DisplayContent;->allResumedActivitiesComplete()Z
 HSPLcom/android/server/wm/DisplayContent;->alwaysCreateStack(II)Z
 HSPLcom/android/server/wm/DisplayContent;->amendWindowTapExcludeRegion(Landroid/graphics/Region;)V
-PLcom/android/server/wm/DisplayContent;->applyRotationLocked(II)V
+HPLcom/android/server/wm/DisplayContent;->animateForIme(FFF)Z
+PLcom/android/server/wm/DisplayContent;->applyMagnificationSpec(Landroid/view/MagnificationSpec;)V
+HPLcom/android/server/wm/DisplayContent;->applyRotationLocked(II)V
 HSPLcom/android/server/wm/DisplayContent;->applySurfaceChangesTransaction(Z)V
 HSPLcom/android/server/wm/DisplayContent;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/DisplayContent;->assignStackOrdering()V
+HPLcom/android/server/wm/DisplayContent;->assignStackOrdering()V
 HSPLcom/android/server/wm/DisplayContent;->assignWindowLayers(Z)V
+HPLcom/android/server/wm/DisplayContent;->beginImeAdjustAnimation()V
 HSPLcom/android/server/wm/DisplayContent;->calculateBounds(Landroid/view/DisplayInfo;Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/DisplayContent;->calculateDisplayCutoutForRotation(I)Lcom/android/server/wm/utils/WmDisplayCutout;
 HSPLcom/android/server/wm/DisplayContent;->calculateDisplayCutoutForRotationUncached(Landroid/view/DisplayCutout;I)Lcom/android/server/wm/utils/WmDisplayCutout;
 HPLcom/android/server/wm/DisplayContent;->calculateSystemGestureExclusion(Landroid/graphics/Region;Landroid/graphics/Region;)Z
-PLcom/android/server/wm/DisplayContent;->canAddToastWindowForUid(I)Z
+HPLcom/android/server/wm/DisplayContent;->canAddToastWindowForUid(I)Z
+PLcom/android/server/wm/DisplayContent;->canShowIme()Z
 PLcom/android/server/wm/DisplayContent;->canUpdateImeTarget()Z
 HSPLcom/android/server/wm/DisplayContent;->checkCompleteDeferredRemoval()Z
+HPLcom/android/server/wm/DisplayContent;->clearImeAdjustAnimation()Z
 HSPLcom/android/server/wm/DisplayContent;->clearLayoutNeeded()V
 HSPLcom/android/server/wm/DisplayContent;->computeCompatSmallestWidth(ZIIILandroid/view/DisplayCutout;)I
-PLcom/android/server/wm/DisplayContent;->computeImeParent()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/DisplayContent;->computeImeTarget(Z)Lcom/android/server/wm/WindowState;
-PLcom/android/server/wm/DisplayContent;->computeImeTargetIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/DisplayContent;->computeImeControlTarget()Lcom/android/server/wm/InsetsControlTarget;
+HPLcom/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;->computeImeTargetIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/DisplayContent;->computeScreenConfiguration(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/DisplayContent;->computeSizeRangesAndScreenLayout(Landroid/view/DisplayInfo;ZIIIFLandroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/DisplayContent;->configureDisplayPolicy()V
-PLcom/android/server/wm/DisplayContent;->continueUpdateImeTarget()V
+HPLcom/android/server/wm/DisplayContent;->continueUpdateImeTarget()V
 PLcom/android/server/wm/DisplayContent;->convertCropForSurfaceFlinger(Landroid/graphics/Rect;III)V
+PLcom/android/server/wm/DisplayContent;->createPortalWindowHandle(Ljava/lang/String;)Landroid/view/InputWindowHandle;
+HPLcom/android/server/wm/DisplayContent;->createRotationMatrix(IFFFFLandroid/graphics/Matrix;)V
+PLcom/android/server/wm/DisplayContent;->createRotationMatrix(IFFLandroid/graphics/Matrix;)V
 HSPLcom/android/server/wm/DisplayContent;->createStack(IIZ)Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/DisplayContent;->createStack(IIZLandroid/content/pm/ActivityInfo;Landroid/content/Intent;)Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/DisplayContent;->createStackUnchecked(IIIZ)Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/DisplayContent;->createStackUnchecked(IIIZLandroid/content/pm/ActivityInfo;Landroid/content/Intent;)Lcom/android/server/wm/ActivityStack;
 PLcom/android/server/wm/DisplayContent;->deferUpdateImeTarget()V
 PLcom/android/server/wm/DisplayContent;->deltaRotation(II)I
 HSPLcom/android/server/wm/DisplayContent;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
 PLcom/android/server/wm/DisplayContent;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
-PLcom/android/server/wm/DisplayContent;->dumpDebugInner(Landroid/util/proto/ProtoOutputStream;JI)V
+HPLcom/android/server/wm/DisplayContent;->dumpDebugInner(Landroid/util/proto/ProtoOutputStream;JI)V
 PLcom/android/server/wm/DisplayContent;->dumpTokens(Ljava/io/PrintWriter;Z)V
+PLcom/android/server/wm/DisplayContent;->dumpWindowAnimators(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/wm/DisplayContent;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZZ)V
-PLcom/android/server/wm/DisplayContent;->executeAppTransition()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;
+PLcom/android/server/wm/DisplayContent;->findTaskForResizePoint(II)Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/DisplayContent;->findTaskLocked(Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/RootActivityContainer$FindTaskResult;)V
-PLcom/android/server/wm/DisplayContent;->forAllImeWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
-PLcom/android/server/wm/DisplayContent;->getActivityRecord(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/DisplayContent;->findTaskLocked(Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/RootWindowContainer$FindTaskResult;)V
+HPLcom/android/server/wm/DisplayContent;->forAllImeWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HSPLcom/android/server/wm/DisplayContent;->getActivityRecord(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/DisplayContent;->getBounds(Landroid/graphics/Rect;I)V
+PLcom/android/server/wm/DisplayContent;->getCurrentOverrideConfigurationChanges()I
 HSPLcom/android/server/wm/DisplayContent;->getDisplay()Landroid/view/Display;
 HSPLcom/android/server/wm/DisplayContent;->getDisplayId()I
 HSPLcom/android/server/wm/DisplayContent;->getDisplayInfo()Landroid/view/DisplayInfo;
 HSPLcom/android/server/wm/DisplayContent;->getDisplayMetrics()Landroid/util/DisplayMetrics;
 HSPLcom/android/server/wm/DisplayContent;->getDisplayPolicy()Lcom/android/server/wm/DisplayPolicy;
 HSPLcom/android/server/wm/DisplayContent;->getDisplayRotation()Lcom/android/server/wm/DisplayRotation;
+PLcom/android/server/wm/DisplayContent;->getDisplayUiContext()Landroid/content/Context;
 HSPLcom/android/server/wm/DisplayContent;->getDockedDividerController()Lcom/android/server/wm/DockedStackDividerController;
 HSPLcom/android/server/wm/DisplayContent;->getFocusedStack()Lcom/android/server/wm/ActivityStack;
 PLcom/android/server/wm/DisplayContent;->getHomeActivity()Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/DisplayContent;->getHomeActivityForUser(I)Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/DisplayContent;->getHomeActivityForUser(I)Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/DisplayContent;->getHomeStack()Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/DisplayContent;->getIndexOf(Lcom/android/server/wm/ActivityStack;)I
 HSPLcom/android/server/wm/DisplayContent;->getInputMonitor()Lcom/android/server/wm/InputMonitor;
-PLcom/android/server/wm/DisplayContent;->getInsetsPolicy()Lcom/android/server/wm/InsetsPolicy;
+HSPLcom/android/server/wm/DisplayContent;->getInsetsPolicy()Lcom/android/server/wm/InsetsPolicy;
 PLcom/android/server/wm/DisplayContent;->getInsetsStateController()Lcom/android/server/wm/InsetsStateController;
-PLcom/android/server/wm/DisplayContent;->getLastFocusedStack()Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/DisplayContent;->getLastHasContent()Z
-PLcom/android/server/wm/DisplayContent;->getLastOrientation()I
+HSPLcom/android/server/wm/DisplayContent;->getLastFocusedStack()Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/DisplayContent;->getLastHasContent()Z
+HSPLcom/android/server/wm/DisplayContent;->getLastOrientation()I
+PLcom/android/server/wm/DisplayContent;->getLastWindowForcedOrientation()I
+PLcom/android/server/wm/DisplayContent;->getLocationInParentDisplay()Landroid/graphics/Point;
+PLcom/android/server/wm/DisplayContent;->getLocationInParentWindow()Landroid/graphics/Point;
 HSPLcom/android/server/wm/DisplayContent;->getMetricsLogger()Lcom/android/internal/logging/MetricsLogger;
 PLcom/android/server/wm/DisplayContent;->getName()Ljava/lang/String;
 PLcom/android/server/wm/DisplayContent;->getNaturalOrientation()I
-PLcom/android/server/wm/DisplayContent;->getNextFocusableStack(Lcom/android/server/wm/ActivityStack;Z)Lcom/android/server/wm/ActivityStack;
+HPLcom/android/server/wm/DisplayContent;->getNextFocusableStack(Lcom/android/server/wm/ActivityStack;Z)Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/DisplayContent;->getNextStackId()I
 HSPLcom/android/server/wm/DisplayContent;->getOrCreateStack(IIZ)Lcom/android/server/wm/ActivityStack;
 PLcom/android/server/wm/DisplayContent;->getOrCreateStack(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;IZ)Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/DisplayContent;->getOrientation()I
 PLcom/android/server/wm/DisplayContent;->getOverlayLayer()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/DisplayContent;->getParentWindow()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/DisplayContent;->getParentWindow()Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/DisplayContent;->getPinnedStack()Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/DisplayContent;->getPinnedStackController()Lcom/android/server/wm/PinnedStackController;
+HPLcom/android/server/wm/DisplayContent;->getPresentUIDs()Landroid/util/IntArray;
 HSPLcom/android/server/wm/DisplayContent;->getRecentsStack()Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/DisplayContent;->getResumedActivity()Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/DisplayContent;->getRootHomeTask()Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/DisplayContent;->getRootPinnedTask()Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/DisplayContent;->getRootSplitScreenPrimaryTask()Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/DisplayContent;->getRotation()I
 HSPLcom/android/server/wm/DisplayContent;->getRotationAnimation()Lcom/android/server/wm/ScreenRotationAnimation;
 HSPLcom/android/server/wm/DisplayContent;->getSession()Landroid/view/SurfaceSession;
+PLcom/android/server/wm/DisplayContent;->getSplitScreenDividerAnchor()Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/DisplayContent;->getSplitScreenPrimaryStack()Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/DisplayContent;->getSplitScreenPrimaryStackIgnoringVisibility()Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/DisplayContent;->getStack(I)Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/DisplayContent;->getSplitScreenPrimaryStackIgnoringVisibility()Lcom/android/server/wm/ActivityStack;
+PLcom/android/server/wm/DisplayContent;->getStableRect(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayContent;->getStack(I)Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/DisplayContent;->getStack(II)Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/DisplayContent;->getStackAbove(Lcom/android/server/wm/ActivityStack;)Lcom/android/server/wm/ActivityStack;
+HPLcom/android/server/wm/DisplayContent;->getStackAbove(Lcom/android/server/wm/ActivityStack;)Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/DisplayContent;->getStackAt(I)Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/DisplayContent;->getStackCount()I
 HSPLcom/android/server/wm/DisplayContent;->getStacks()Lcom/android/server/wm/WindowList;
-PLcom/android/server/wm/DisplayContent;->getTopStack()Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/DisplayContent;->getTopStackInWindowingMode(I)Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/DisplayContent;->getTopStack()Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/DisplayContent;->getTopStackInWindowingMode(I)Lcom/android/server/wm/ActivityStack;
+HPLcom/android/server/wm/DisplayContent;->getTouchableWinAtPointLocked(FF)Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/DisplayContent;->getVisibleTasks()Ljava/util/ArrayList;
 PLcom/android/server/wm/DisplayContent;->getWindowCornerRadius()F
-PLcom/android/server/wm/DisplayContent;->getWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;
+HSPLcom/android/server/wm/DisplayContent;->getWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;
 PLcom/android/server/wm/DisplayContent;->getWindowingLayer()Landroid/view/SurfaceControl;
-HPLcom/android/server/wm/DisplayContent;->handleActivitySizeCompatModeIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/DisplayContent;->handleAnimatingStoppedAndTransition()V
-PLcom/android/server/wm/DisplayContent;->handlesOrientationChangeFromDescendant()Z
+HSPLcom/android/server/wm/DisplayContent;->handleActivitySizeCompatModeIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/DisplayContent;->handleAnimatingStoppedAndTransition()V
+HSPLcom/android/server/wm/DisplayContent;->handlesOrientationChangeFromDescendant()Z
 HSPLcom/android/server/wm/DisplayContent;->hasAccess(I)Z
+HPLcom/android/server/wm/DisplayContent;->hasAlertWindowSurfaces()Z
 HSPLcom/android/server/wm/DisplayContent;->hasPinnedStack()Z
+HSPLcom/android/server/wm/DisplayContent;->hasPinnedTask()Z
+PLcom/android/server/wm/DisplayContent;->hasSecureWindowOnScreen()Z
 HSPLcom/android/server/wm/DisplayContent;->hasSplitScreenPrimaryStack()Z
+HSPLcom/android/server/wm/DisplayContent;->hasSplitScreenPrimaryTask()Z
 PLcom/android/server/wm/DisplayContent;->hideTransientBars()V
 HSPLcom/android/server/wm/DisplayContent;->initializeDisplayBaseInfo()V
+PLcom/android/server/wm/DisplayContent;->isAnyNonToastWindowVisibleForPid(I)Z
 PLcom/android/server/wm/DisplayContent;->isHomeActivityForUser(Lcom/android/server/wm/ActivityRecord;I)Z
-PLcom/android/server/wm/DisplayContent;->isInputMethodClientFocus(II)Z
+HPLcom/android/server/wm/DisplayContent;->isImeAttachedToApp()Z
+HPLcom/android/server/wm/DisplayContent;->isInputMethodClientFocus(II)Z
 HSPLcom/android/server/wm/DisplayContent;->isLayoutNeeded()Z
-PLcom/android/server/wm/DisplayContent;->isNextTransitionForward()Z
+HSPLcom/android/server/wm/DisplayContent;->isNextTransitionForward()Z
 HSPLcom/android/server/wm/DisplayContent;->isNonDecorDisplayCloseToSquare(III)Z
 HSPLcom/android/server/wm/DisplayContent;->isPrivate()Z
 HSPLcom/android/server/wm/DisplayContent;->isReady()Z
 HSPLcom/android/server/wm/DisplayContent;->isRemoved()Z
 PLcom/android/server/wm/DisplayContent;->isRemoving()Z
-PLcom/android/server/wm/DisplayContent;->isSingleTaskInstance()Z
+HSPLcom/android/server/wm/DisplayContent;->isSingleTaskInstance()Z
 HSPLcom/android/server/wm/DisplayContent;->isSleeping()Z
-HPLcom/android/server/wm/DisplayContent;->isStackVisible(I)Z
-HPLcom/android/server/wm/DisplayContent;->isTopNotPinnedStack(Lcom/android/server/wm/ActivityStack;)Z
-PLcom/android/server/wm/DisplayContent;->isTopStack(Lcom/android/server/wm/ActivityStack;)Z
+HSPLcom/android/server/wm/DisplayContent;->isStackVisible(I)Z
+HSPLcom/android/server/wm/DisplayContent;->isTopNotPinnedStack(Lcom/android/server/wm/ActivityStack;)Z
+HSPLcom/android/server/wm/DisplayContent;->isTopStack(Lcom/android/server/wm/ActivityStack;)Z
+PLcom/android/server/wm/DisplayContent;->isUidPresent(I)Z
 HSPLcom/android/server/wm/DisplayContent;->isUntrustedVirtualDisplay()Z
 PLcom/android/server/wm/DisplayContent;->isVisible()Z
 HSPLcom/android/server/wm/DisplayContent;->isWindowingModeSupported(IZZZZI)Z
 PLcom/android/server/wm/DisplayContent;->lambda$JKV50ExZuoi3fuNRue0nZXh8ijA(Lcom/android/server/wm/ActivityRecord;I)Z
 HPLcom/android/server/wm/DisplayContent;->lambda$addToGlobalAndConsumeLimit$24([I[ILandroid/graphics/Region;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$addToGlobalAndConsumeLimit$25([I[ILandroid/graphics/Region;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$adjustForImeIfNeeded$12(Lcom/android/server/wm/Task;)Z
+HPLcom/android/server/wm/DisplayContent;->lambda$applyRotationLocked$10$DisplayContent(ZLcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/DisplayContent;->lambda$applyRotationLocked$8(Landroid/view/SurfaceControl$Transaction;IIZLcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/DisplayContent;->lambda$applyRotationLocked$9$DisplayContent(ZLcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/DisplayContent;->lambda$cDcvMzGxc6XW13Q8FrU5X4DagqE(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;I)V
+HPLcom/android/server/wm/DisplayContent;->lambda$applyRotationLocked$9(Landroid/view/SurfaceControl$Transaction;IIZLcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/DisplayContent;->lambda$cDcvMzGxc6XW13Q8FrU5X4DagqE(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;I)V
 HPLcom/android/server/wm/DisplayContent;->lambda$calculateSystemGestureExclusion$23$DisplayContent(Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region;[ILandroid/graphics/Region;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$calculateSystemGestureExclusion$24$DisplayContent(Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region;[ILandroid/graphics/Region;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/DisplayContent;->lambda$canAddToastWindowForUid$13(ILcom/android/server/wm/WindowState;)Z
-PLcom/android/server/wm/DisplayContent;->lambda$canAddToastWindowForUid$14(ILcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayContent;->lambda$canAddToastWindowForUid$14(ILcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/DisplayContent;->lambda$canAddToastWindowForUid$15(ILcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/DisplayContent;->lambda$dumpWindowAnimators$16(Ljava/io/PrintWriter;Ljava/lang/String;[ILcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$dumpWindowAnimators$17(Ljava/io/PrintWriter;Ljava/lang/String;[ILcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/DisplayContent;->lambda$fiC19lMy-d_-rvza7hhOSw6bOM8(Lcom/android/server/wm/DisplayContent;Landroid/view/DisplayCutout;I)Lcom/android/server/wm/utils/WmDisplayCutout;
+HPLcom/android/server/wm/DisplayContent;->lambda$getTouchableWinAtPointLocked$13$DisplayContent(IILcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/DisplayContent;->lambda$hasSecureWindowOnScreen$19(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayContent;->lambda$hasSecureWindowOnScreen$20(Lcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/DisplayContent;->lambda$new$0$DisplayContent(Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/DisplayContent;->lambda$new$1$DisplayContent(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/DisplayContent;->lambda$new$1$DisplayContent(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$new$2$DisplayContent(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/DisplayContent;->lambda$new$2$DisplayContent(Lcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/DisplayContent;->lambda$new$3$DisplayContent(Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/DisplayContent;->lambda$new$4$DisplayContent(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/DisplayContent;->lambda$new$3$DisplayContent(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/DisplayContent;->lambda$new$4$DisplayContent(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/DisplayContent;->lambda$new$5$DisplayContent(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/DisplayContent;->lambda$new$5$DisplayContent(Lcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/DisplayContent;->lambda$new$6$DisplayContent(Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/DisplayContent;->lambda$new$7$DisplayContent(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$new$6$DisplayContent(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/DisplayContent;->lambda$new$7$DisplayContent(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/DisplayContent;->lambda$new$8$DisplayContent(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/DisplayContent;->lambda$notifyLocationInParentDisplayChanged$23(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/DisplayContent;->lambda$onWindowFreezeTimeout$21$DisplayContent(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/DisplayContent;->lambda$onWindowFreezeTimeout$22$DisplayContent(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/DisplayContent;->lambda$pointWithinAppWindow$10([IIILcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$pointWithinAppWindow$11([IIILcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/DisplayContent;->lambda$shouldWaitForSystemDecorWindowsOnBoot$18$DisplayContent(Landroid/util/SparseBooleanArray;Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/DisplayContent;->lambda$shouldWaitForSystemDecorWindowsOnBoot$19$DisplayContent(Landroid/util/SparseBooleanArray;Lcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/DisplayContent;->lambda$startKeyguardExitOnNonAppWindows$17(Lcom/android/server/policy/WindowManagerPolicy;ZZZLcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$startKeyguardExitOnNonAppWindows$18(Lcom/android/server/policy/WindowManagerPolicy;ZZZLcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/DisplayContent;->lambda$updateSystemUiVisibility$20(IILcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/DisplayContent;->lambda$updateSystemUiVisibility$21(IILcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/DisplayContent;->layoutAndAssignWindowLayersIfNeeded()V
-PLcom/android/server/wm/DisplayContent;->logsGestureExclusionRestrictions(Lcom/android/server/wm/WindowState;)Z
+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;
-PLcom/android/server/wm/DisplayContent;->makeOverlay()Landroid/view/SurfaceControl$Builder;
-PLcom/android/server/wm/DisplayContent;->moveHomeStackToFront(Ljava/lang/String;)V
+HPLcom/android/server/wm/DisplayContent;->makeOverlay()Landroid/view/SurfaceControl$Builder;
+PLcom/android/server/wm/DisplayContent;->moveHomeActivityToTop(Ljava/lang/String;)V
+HPLcom/android/server/wm/DisplayContent;->moveHomeStackToFront(Ljava/lang/String;)V
 HPLcom/android/server/wm/DisplayContent;->moveStackBehindBottomMostVisibleStack(Lcom/android/server/wm/ActivityStack;)V
 PLcom/android/server/wm/DisplayContent;->moveStackBehindStack(Lcom/android/server/wm/ActivityStack;Lcom/android/server/wm/ActivityStack;)V
 HPLcom/android/server/wm/DisplayContent;->needsGestureExclusionRestrictions(Lcom/android/server/wm/WindowState;I)Z
-PLcom/android/server/wm/DisplayContent;->okToAnimate()Z
-HPLcom/android/server/wm/DisplayContent;->okToDisplay()Z
-PLcom/android/server/wm/DisplayContent;->onAppTransitionDone()V
+PLcom/android/server/wm/DisplayContent;->notifyLocationInParentDisplayChanged()V
+HSPLcom/android/server/wm/DisplayContent;->okToAnimate()Z
+HSPLcom/android/server/wm/DisplayContent;->okToAnimate(Z)Z
+HSPLcom/android/server/wm/DisplayContent;->okToDisplay()Z
+HSPLcom/android/server/wm/DisplayContent;->okToDisplay(Z)Z
+HSPLcom/android/server/wm/DisplayContent;->onAppTransitionDone()V
 HSPLcom/android/server/wm/DisplayContent;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/DisplayContent;->onDescendantOrientationChanged(Landroid/os/IBinder;Lcom/android/server/wm/ConfigurationContainer;)Z
-PLcom/android/server/wm/DisplayContent;->onDescendantOverrideConfigurationChanged()V
+HSPLcom/android/server/wm/DisplayContent;->onDescendantOrientationChanged(Landroid/os/IBinder;Lcom/android/server/wm/ConfigurationContainer;)Z
+HPLcom/android/server/wm/DisplayContent;->onDescendantOverrideConfigurationChanged()V
 HSPLcom/android/server/wm/DisplayContent;->onDisplayChanged()V
 HSPLcom/android/server/wm/DisplayContent;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/DisplayContent;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
 HSPLcom/android/server/wm/DisplayContent;->onRequestedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
+PLcom/android/server/wm/DisplayContent;->onSplitScreenModeActivated()V
+PLcom/android/server/wm/DisplayContent;->onSplitScreenModeDismissed()V
 HSPLcom/android/server/wm/DisplayContent;->onStackOrderChanged(Lcom/android/server/wm/ActivityStack;)V
+PLcom/android/server/wm/DisplayContent;->onStackRemoved(Lcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/DisplayContent;->onStackWindowingModeChanged(Lcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/DisplayContent;->onWindowFocusChanged(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/DisplayContent;->onWindowFreezeTimeout()V
-HPLcom/android/server/wm/DisplayContent;->pauseBackStacks(ZLcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/DisplayContent;->pauseBackStacks(ZLcom/android/server/wm/ActivityRecord;)Z
 HSPLcom/android/server/wm/DisplayContent;->performDisplayOverrideConfigUpdate(Landroid/content/res/Configuration;Z)I
 HSPLcom/android/server/wm/DisplayContent;->performLayout(ZZ)V
 HSPLcom/android/server/wm/DisplayContent;->performLayoutNoTrace(ZZ)V
-PLcom/android/server/wm/DisplayContent;->pointWithinAppWindow(II)Z
-PLcom/android/server/wm/DisplayContent;->positionChildAt(ILcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;Z)V
-PLcom/android/server/wm/DisplayContent;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HPLcom/android/server/wm/DisplayContent;->pointWithinAppWindow(II)Z
+HSPLcom/android/server/wm/DisplayContent;->positionChildAt(ILcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;Z)V
+HSPLcom/android/server/wm/DisplayContent;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HSPLcom/android/server/wm/DisplayContent;->positionDisplayAt(IZ)V
 HSPLcom/android/server/wm/DisplayContent;->positionStackAt(ILcom/android/server/wm/ActivityStack;Z)V
 HSPLcom/android/server/wm/DisplayContent;->positionStackAt(Lcom/android/server/wm/ActivityStack;I)V
 HSPLcom/android/server/wm/DisplayContent;->positionStackAt(Lcom/android/server/wm/ActivityStack;IZLjava/lang/String;)V
 PLcom/android/server/wm/DisplayContent;->positionStackAtBottom(Lcom/android/server/wm/ActivityStack;)V
 PLcom/android/server/wm/DisplayContent;->positionStackAtBottom(Lcom/android/server/wm/ActivityStack;Ljava/lang/String;)V
-PLcom/android/server/wm/DisplayContent;->positionStackAtTop(Lcom/android/server/wm/ActivityStack;ZLjava/lang/String;)V
+PLcom/android/server/wm/DisplayContent;->positionStackAtTop(Lcom/android/server/wm/ActivityStack;Z)V
+HSPLcom/android/server/wm/DisplayContent;->positionStackAtTop(Lcom/android/server/wm/ActivityStack;ZLjava/lang/String;)V
 HSPLcom/android/server/wm/DisplayContent;->preOnConfigurationChanged()V
-PLcom/android/server/wm/DisplayContent;->prepareAppTransition(IZ)V
-PLcom/android/server/wm/DisplayContent;->prepareAppTransition(IZIZ)V
+HSPLcom/android/server/wm/DisplayContent;->prepareAppTransition(IZ)V
+HSPLcom/android/server/wm/DisplayContent;->prepareAppTransition(IZIZ)V
+HSPLcom/android/server/wm/DisplayContent;->prepareFreezingTaskBounds()V
 HSPLcom/android/server/wm/DisplayContent;->prepareSurfaces()V
-HPLcom/android/server/wm/DisplayContent;->processTaskForTouchExcludeRegion(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;I)V
-HPLcom/android/server/wm/DisplayContent;->reParentWindowToken(Lcom/android/server/wm/WindowToken;)V
-PLcom/android/server/wm/DisplayContent;->reapplyMagnificationSpec()V
+HSPLcom/android/server/wm/DisplayContent;->processTaskForTouchExcludeRegion(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;I)V
+HSPLcom/android/server/wm/DisplayContent;->reParentWindowToken(Lcom/android/server/wm/WindowToken;)V
+HSPLcom/android/server/wm/DisplayContent;->reapplyMagnificationSpec()V
 HSPLcom/android/server/wm/DisplayContent;->reconfigureDisplayLocked()V
 HSPLcom/android/server/wm/DisplayContent;->reduceCompatConfigWidthSize(IIILandroid/util/DisplayMetrics;IILandroid/view/DisplayCutout;)I
 HSPLcom/android/server/wm/DisplayContent;->reduceConfigLayout(IIFIIILandroid/view/DisplayCutout;)I
-PLcom/android/server/wm/DisplayContent;->reevaluateStatusBarVisibility()V
+HPLcom/android/server/wm/DisplayContent;->reevaluateStatusBarVisibility()V
 HSPLcom/android/server/wm/DisplayContent;->registerPointerEventListener(Landroid/view/WindowManagerPolicyConstants$PointerEventListener;)V
-PLcom/android/server/wm/DisplayContent;->registerStackOrderChangedListener(Lcom/android/server/wm/DisplayContent$OnStackOrderChangedListener;)V
+HPLcom/android/server/wm/DisplayContent;->registerStackOrderChangedListener(Lcom/android/server/wm/DisplayContent$OnStackOrderChangedListener;)V
 PLcom/android/server/wm/DisplayContent;->registerSystemGestureExclusionListener(Landroid/view/ISystemGestureExclusionListener;)V
-PLcom/android/server/wm/DisplayContent;->releaseSelfIfNeeded()V
-PLcom/android/server/wm/DisplayContent;->removeAppToken(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/DisplayContent;->releaseSelfIfNeeded()V
+HPLcom/android/server/wm/DisplayContent;->remove()V
+HPLcom/android/server/wm/DisplayContent;->removeAppToken(Landroid/os/IBinder;)V
+PLcom/android/server/wm/DisplayContent;->removeChild(Lcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;)V
+PLcom/android/server/wm/DisplayContent;->removeChild(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/DisplayContent;->removeExistingTokensIfPossible()V
+PLcom/android/server/wm/DisplayContent;->removeIfPossible()V
+HPLcom/android/server/wm/DisplayContent;->removeImmediately()V
 PLcom/android/server/wm/DisplayContent;->removeStacksInWindowingModes([I)V
-PLcom/android/server/wm/DisplayContent;->removeWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;
-PLcom/android/server/wm/DisplayContent;->resolveWindowingMode(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;I)I
-PLcom/android/server/wm/DisplayContent;->scheduleToastWindowsTimeoutIfNeededLocked(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->removeWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;
+PLcom/android/server/wm/DisplayContent;->reparentDisplayContent(Lcom/android/server/wm/WindowState;Landroid/view/SurfaceControl;)V
+PLcom/android/server/wm/DisplayContent;->reparentToOverlay(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/DisplayContent;->resolveWindowingMode(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;I)I
+PLcom/android/server/wm/DisplayContent;->rotateBounds(IILandroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayContent;->rotateBounds(Landroid/graphics/Rect;IILandroid/graphics/Rect;)V
+HSPLcom/android/server/wm/DisplayContent;->scheduleToastWindowsTimeoutIfNeededLocked(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/DisplayContent;->screenshotDisplayLocked(Landroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;
 HSPLcom/android/server/wm/DisplayContent;->sendNewConfiguration()V
+PLcom/android/server/wm/DisplayContent;->setDisplayToSingleTaskInstance()V
 HSPLcom/android/server/wm/DisplayContent;->setExitingTokensHasVisible(Z)V
-PLcom/android/server/wm/DisplayContent;->setFocusedApp(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/DisplayContent;->setFocusedApp(Lcom/android/server/wm/ActivityRecord;Z)V
-PLcom/android/server/wm/DisplayContent;->setInputMethodTarget(Lcom/android/server/wm/WindowState;Z)V
-PLcom/android/server/wm/DisplayContent;->setInputMethodWindowLocked(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/DisplayContent;->setFocusedApp(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/DisplayContent;->setFocusedApp(Lcom/android/server/wm/ActivityRecord;Z)V
+PLcom/android/server/wm/DisplayContent;->setForwardedInsets(Landroid/graphics/Insets;)V
+HSPLcom/android/server/wm/DisplayContent;->setInputMethodTarget(Lcom/android/server/wm/WindowState;Z)V
+HPLcom/android/server/wm/DisplayContent;->setInputMethodWindowLocked(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/DisplayContent;->setInsetProvider(ILcom/android/server/wm/WindowState;Lcom/android/internal/util/function/TriConsumer;)V
+PLcom/android/server/wm/DisplayContent;->setInsetProvider(ILcom/android/server/wm/WindowState;Lcom/android/internal/util/function/TriConsumer;Lcom/android/internal/util/function/TriConsumer;)V
 PLcom/android/server/wm/DisplayContent;->setIsSleeping(Z)V
 HSPLcom/android/server/wm/DisplayContent;->setLayoutNeeded()V
+PLcom/android/server/wm/DisplayContent;->setRotationAnimation(Lcom/android/server/wm/ScreenRotationAnimation;)V
 HSPLcom/android/server/wm/DisplayContent;->setStackOnDisplay(Lcom/android/server/wm/ActivityStack;I)V
 HSPLcom/android/server/wm/DisplayContent;->setWindowingMode(I)V
+PLcom/android/server/wm/DisplayContent;->shouldDestroyContentOnRemove()Z
 HSPLcom/android/server/wm/DisplayContent;->shouldSleep()Z
 PLcom/android/server/wm/DisplayContent;->shouldWaitForSystemDecorWindowsOnBoot()Z
-PLcom/android/server/wm/DisplayContent;->startKeyguardExitOnNonAppWindows(ZZZ)V
-PLcom/android/server/wm/DisplayContent;->statusBarVisibilityChanged(I)V
-PLcom/android/server/wm/DisplayContent;->supportsSystemDecorations()Z
+HPLcom/android/server/wm/DisplayContent;->startKeyguardExitOnNonAppWindows(ZZZ)V
+HSPLcom/android/server/wm/DisplayContent;->statusBarVisibilityChanged(I)V
+HPLcom/android/server/wm/DisplayContent;->supportsSystemDecorations()Z
 HSPLcom/android/server/wm/DisplayContent;->topRunningActivity()Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/DisplayContent;->topRunningActivity(Z)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/DisplayContent;->unregisterStackOrderChangedListener(Lcom/android/server/wm/DisplayContent$OnStackOrderChangedListener;)V
+HPLcom/android/server/wm/DisplayContent;->unregisterStackOrderChangedListener(Lcom/android/server/wm/DisplayContent$OnStackOrderChangedListener;)V
+PLcom/android/server/wm/DisplayContent;->unregisterSystemGestureExclusionListener(Landroid/view/ISystemGestureExclusionListener;)V
 HSPLcom/android/server/wm/DisplayContent;->updateBaseDisplayMetrics(III)V
 HSPLcom/android/server/wm/DisplayContent;->updateBaseDisplayMetricsIfNeeded()V
 HSPLcom/android/server/wm/DisplayContent;->updateBounds()V
@@ -21551,17 +35910,19 @@
 HSPLcom/android/server/wm/DisplayContent;->updateDisplayOverrideConfigurationLocked()Z
 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
+PLcom/android/server/wm/DisplayContent;->updateImeControlTarget(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/DisplayContent;->updateImeParent()V
+PLcom/android/server/wm/DisplayContent;->updateLocation(Lcom/android/server/wm/WindowState;II)V
 HSPLcom/android/server/wm/DisplayContent;->updateOrientation()Z
-PLcom/android/server/wm/DisplayContent;->updateOrientation(Landroid/content/res/Configuration;Landroid/os/IBinder;Z)Landroid/content/res/Configuration;
+HSPLcom/android/server/wm/DisplayContent;->updateOrientation(Landroid/content/res/Configuration;Landroid/os/IBinder;Z)Landroid/content/res/Configuration;
 HSPLcom/android/server/wm/DisplayContent;->updateRotationUnchecked()Z
-PLcom/android/server/wm/DisplayContent;->updateStatusBarVisibilityLocked(I)Z
+HSPLcom/android/server/wm/DisplayContent;->updateStatusBarVisibilityLocked(I)Z
 HSPLcom/android/server/wm/DisplayContent;->updateSystemGestureExclusion()Z
 HSPLcom/android/server/wm/DisplayContent;->updateSystemGestureExclusionLimit()V
-PLcom/android/server/wm/DisplayContent;->updateSystemUiVisibility(II)V
+HSPLcom/android/server/wm/DisplayContent;->updateSystemUiVisibility(II)V
 HSPLcom/android/server/wm/DisplayContent;->updateTouchExcludeRegion()V
 HSPLcom/android/server/wm/DisplayContent;->updateWindowsForAnimator()V
-PLcom/android/server/wm/DisplayContent;->validateWindowingMode(ILcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;I)I
+HSPLcom/android/server/wm/DisplayContent;->validateWindowingMode(ILcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;I)I
 HSPLcom/android/server/wm/DisplayFrames;-><init>(ILandroid/view/DisplayInfo;Lcom/android/server/wm/utils/WmDisplayCutout;)V
 HSPLcom/android/server/wm/DisplayFrames;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/DisplayFrames;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
@@ -21573,10 +35934,12 @@
 PLcom/android/server/wm/DisplayPolicy$1;->onBarVisibilityChanged(Z)V
 HSPLcom/android/server/wm/DisplayPolicy$2;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
 PLcom/android/server/wm/DisplayPolicy$2;->getOrientationListener()Lcom/android/server/policy/WindowOrientationListener;
+PLcom/android/server/wm/DisplayPolicy$2;->onDebug()V
 PLcom/android/server/wm/DisplayPolicy$2;->onDown()V
 PLcom/android/server/wm/DisplayPolicy$2;->onFling(I)V
-PLcom/android/server/wm/DisplayPolicy$2;->onSwipeFromLeft()V
-PLcom/android/server/wm/DisplayPolicy$2;->onSwipeFromRight()V
+PLcom/android/server/wm/DisplayPolicy$2;->onSwipeFromBottom()V
+HPLcom/android/server/wm/DisplayPolicy$2;->onSwipeFromLeft()V
+HPLcom/android/server/wm/DisplayPolicy$2;->onSwipeFromRight()V
 PLcom/android/server/wm/DisplayPolicy$2;->onSwipeFromTop()V
 PLcom/android/server/wm/DisplayPolicy$2;->onUpOrCancel()V
 HSPLcom/android/server/wm/DisplayPolicy$3;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
@@ -21590,10 +35953,11 @@
 HSPLcom/android/server/wm/DisplayPolicy;-><clinit>()V
 HSPLcom/android/server/wm/DisplayPolicy;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/DisplayPolicy;->access$000(Lcom/android/server/wm/DisplayPolicy;)Landroid/view/accessibility/AccessibilityManager;
+PLcom/android/server/wm/DisplayPolicy;->access$100(Lcom/android/server/wm/DisplayPolicy;Z)V
 PLcom/android/server/wm/DisplayPolicy;->access$1000(Lcom/android/server/wm/DisplayPolicy;)Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/DisplayPolicy;->access$1100(Lcom/android/server/wm/DisplayPolicy;)Z
 PLcom/android/server/wm/DisplayPolicy;->access$1200(Lcom/android/server/wm/DisplayPolicy;)Lcom/android/server/wm/SystemGesturesPointerEventListener;
-PLcom/android/server/wm/DisplayPolicy;->access$1300(Lcom/android/server/wm/DisplayPolicy;)Lcom/android/server/wm/WindowManagerService;
+HPLcom/android/server/wm/DisplayPolicy;->access$1300(Lcom/android/server/wm/DisplayPolicy;)Lcom/android/server/wm/WindowManagerService;
 PLcom/android/server/wm/DisplayPolicy;->access$1400(Lcom/android/server/wm/DisplayPolicy;)Landroid/os/Handler;
 PLcom/android/server/wm/DisplayPolicy;->access$1500(Lcom/android/server/wm/DisplayPolicy;)I
 PLcom/android/server/wm/DisplayPolicy;->access$1502(Lcom/android/server/wm/DisplayPolicy;I)I
@@ -21608,143 +35972,187 @@
 PLcom/android/server/wm/DisplayPolicy;->access$2100(Lcom/android/server/wm/DisplayPolicy;)Lcom/android/server/wm/BarController;
 PLcom/android/server/wm/DisplayPolicy;->access$300(Lcom/android/server/wm/DisplayPolicy;)Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/DisplayPolicy;->access$400(Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/DisplayPolicy;->access$500(Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/policy/WindowManagerPolicy$InputConsumer;)V
+PLcom/android/server/wm/DisplayPolicy;->access$800(Lcom/android/server/wm/DisplayPolicy;)I
 PLcom/android/server/wm/DisplayPolicy;->access$900(Lcom/android/server/wm/DisplayPolicy;)Ljava/lang/Object;
-PLcom/android/server/wm/DisplayPolicy;->addWindowLw(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;)V
-PLcom/android/server/wm/DisplayPolicy;->adjustSystemUiVisibilityLw(I)I
-HPLcom/android/server/wm/DisplayPolicy;->adjustWindowParamsLw(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;II)V
-PLcom/android/server/wm/DisplayPolicy;->allowAppAnimationsLw()Z
-HPLcom/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
-HPLcom/android/server/wm/DisplayPolicy;->applyStableConstraints(IILandroid/graphics/Rect;Lcom/android/server/wm/DisplayFrames;)V
-PLcom/android/server/wm/DisplayPolicy;->areSystemBarsForcedShownLw(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/DisplayPolicy;->addWindowLw(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;)V
+HSPLcom/android/server/wm/DisplayPolicy;->adjustSystemUiVisibilityLw(I)I
+HSPLcom/android/server/wm/DisplayPolicy;->adjustWindowParamsLw(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;II)V
+HSPLcom/android/server/wm/DisplayPolicy;->allowAppAnimationsLw()Z
+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
+HSPLcom/android/server/wm/DisplayPolicy;->applyStableConstraints(IILandroid/graphics/Rect;Lcom/android/server/wm/DisplayFrames;)V
+HSPLcom/android/server/wm/DisplayPolicy;->areSystemBarsForcedShownLw(Lcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/DisplayPolicy;->beginLayoutLw(Lcom/android/server/wm/DisplayFrames;I)V
 HSPLcom/android/server/wm/DisplayPolicy;->beginPostLayoutPolicyLw()V
 HSPLcom/android/server/wm/DisplayPolicy;->canHideNavigationBar()Z
 HPLcom/android/server/wm/DisplayPolicy;->canReceiveInput(Lcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/DisplayPolicy;->canToastShowWhenLocked(I)Z
-HPLcom/android/server/wm/DisplayPolicy;->chooseNavigationColorWindowLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;I)Lcom/android/server/wm/WindowState;
-PLcom/android/server/wm/DisplayPolicy;->clearClearableFlagsLw()V
-HPLcom/android/server/wm/DisplayPolicy;->configureNavBarOpacity(IZZZZZ)I
+HSPLcom/android/server/wm/DisplayPolicy;->chooseNavigationColorWindowLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;I)Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/DisplayPolicy;->clearClearableFlagsLw()V
+HSPLcom/android/server/wm/DisplayPolicy;->configureNavBarOpacity(IZZZZZ)I
 HSPLcom/android/server/wm/DisplayPolicy;->convertNonDecorInsetsToStableInsets(Landroid/graphics/Rect;I)V
-HPLcom/android/server/wm/DisplayPolicy;->drawsBarBackground(ILcom/android/server/wm/WindowState;Lcom/android/server/wm/BarController;I)Z
-HPLcom/android/server/wm/DisplayPolicy;->drawsNavigationBarBackground(ILcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/DisplayPolicy;->drawsStatusBarBackground(ILcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/DisplayPolicy;->disposeInputConsumer(Lcom/android/server/policy/WindowManagerPolicy$InputConsumer;)V
+HSPLcom/android/server/wm/DisplayPolicy;->drawsBarBackground(ILcom/android/server/wm/WindowState;Lcom/android/server/wm/BarController;I)Z
+HSPLcom/android/server/wm/DisplayPolicy;->drawsNavigationBarBackground(ILcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/DisplayPolicy;->drawsStatusBarBackground(ILcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/DisplayPolicy;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+PLcom/android/server/wm/DisplayPolicy;->enablePointerLocation()V
 PLcom/android/server/wm/DisplayPolicy;->finishKeyguardDrawn()Z
 HSPLcom/android/server/wm/DisplayPolicy;->finishPostLayoutPolicyLw()I
 PLcom/android/server/wm/DisplayPolicy;->finishScreenTurningOn()Z
-PLcom/android/server/wm/DisplayPolicy;->finishWindowsDrawn()Z
-PLcom/android/server/wm/DisplayPolicy;->focusChangedLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)I
+HPLcom/android/server/wm/DisplayPolicy;->finishWindowsDrawn()Z
+HSPLcom/android/server/wm/DisplayPolicy;->focusChangedLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)I
 HSPLcom/android/server/wm/DisplayPolicy;->getConfigDisplayHeight(IIIILandroid/view/DisplayCutout;)I
 HSPLcom/android/server/wm/DisplayPolicy;->getConfigDisplayWidth(IIIILandroid/view/DisplayCutout;)I
 HSPLcom/android/server/wm/DisplayPolicy;->getCurrentUserResources()Landroid/content/res/Resources;
 HSPLcom/android/server/wm/DisplayPolicy;->getDisplayId()I
-PLcom/android/server/wm/DisplayPolicy;->getDockMode()I
-HPLcom/android/server/wm/DisplayPolicy;->getImpliedSysUiFlagsForLayout(Landroid/view/WindowManager$LayoutParams;)I
-HPLcom/android/server/wm/DisplayPolicy;->getInsetsPolicy()Lcom/android/server/wm/InsetsPolicy;
-HPLcom/android/server/wm/DisplayPolicy;->getLayoutHintLw(Landroid/view/WindowManager$LayoutParams;Landroid/graphics/Rect;Lcom/android/server/wm/DisplayFrames;ZLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;)Z
+HPLcom/android/server/wm/DisplayPolicy;->getDockMode()I
+PLcom/android/server/wm/DisplayPolicy;->getForwardedInsets()Landroid/graphics/Insets;
+HSPLcom/android/server/wm/DisplayPolicy;->getImpliedSysUiFlagsForLayout(Landroid/view/WindowManager$LayoutParams;)I
+HSPLcom/android/server/wm/DisplayPolicy;->getInsetsPolicy()Lcom/android/server/wm/InsetsPolicy;
+HSPLcom/android/server/wm/DisplayPolicy;->getLayoutHintLw(Landroid/view/WindowManager$LayoutParams;Landroid/graphics/Rect;Lcom/android/server/wm/DisplayFrames;ZLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;)Z
 HSPLcom/android/server/wm/DisplayPolicy;->getLidState()I
+PLcom/android/server/wm/DisplayPolicy;->getNavBarPosition()I
 HSPLcom/android/server/wm/DisplayPolicy;->getNavigationBarFrameHeight(II)I
 HSPLcom/android/server/wm/DisplayPolicy;->getNavigationBarHeight(II)I
 HSPLcom/android/server/wm/DisplayPolicy;->getNavigationBarWidth(II)I
 HSPLcom/android/server/wm/DisplayPolicy;->getNonDecorDisplayHeight(IIIILandroid/view/DisplayCutout;)I
 HSPLcom/android/server/wm/DisplayPolicy;->getNonDecorDisplayWidth(IIIILandroid/view/DisplayCutout;)I
 HSPLcom/android/server/wm/DisplayPolicy;->getNonDecorInsetsLw(IIILandroid/view/DisplayCutout;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/DisplayPolicy;->getRefreshRatePolicy()Lcom/android/server/wm/RefreshRatePolicy;
+HSPLcom/android/server/wm/DisplayPolicy;->getNotificationShade()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/DisplayPolicy;->getRefreshRatePolicy()Lcom/android/server/wm/RefreshRatePolicy;
 PLcom/android/server/wm/DisplayPolicy;->getScreenOnListener()Lcom/android/server/policy/WindowManagerPolicy$ScreenOnListener;
 HSPLcom/android/server/wm/DisplayPolicy;->getStableInsetsLw(IIILandroid/view/DisplayCutout;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/DisplayPolicy;->getStatusBar()Lcom/android/server/wm/WindowState;
-PLcom/android/server/wm/DisplayPolicy;->getStatusBarHeight(Lcom/android/server/wm/DisplayFrames;)I
-PLcom/android/server/wm/DisplayPolicy;->getStatusBarManagerInternal()Lcom/android/server/statusbar/StatusBarManagerInternal;
+HSPLcom/android/server/wm/DisplayPolicy;->getStatusBar()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/DisplayPolicy;->getStatusBarHeight(Lcom/android/server/wm/DisplayFrames;)I
+HSPLcom/android/server/wm/DisplayPolicy;->getStatusBarManagerInternal()Lcom/android/server/statusbar/StatusBarManagerInternal;
 HSPLcom/android/server/wm/DisplayPolicy;->getSystemUiContext()Landroid/content/Context;
-PLcom/android/server/wm/DisplayPolicy;->getTopFullscreenOpaqueWindow()Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/DisplayPolicy;->getTransientState(II)Landroid/util/Pair;
+HSPLcom/android/server/wm/DisplayPolicy;->getTopFullscreenOpaqueWindow()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/DisplayPolicy;->getTransientState(II)Landroid/util/Pair;
 HSPLcom/android/server/wm/DisplayPolicy;->getWindowCornerRadius()F
 HSPLcom/android/server/wm/DisplayPolicy;->hasNavigationBar()Z
 HSPLcom/android/server/wm/DisplayPolicy;->hasStatusBar()Z
 HSPLcom/android/server/wm/DisplayPolicy;->isAwake()Z
-PLcom/android/server/wm/DisplayPolicy;->isCarDockEnablesAccelerometer()Z
-PLcom/android/server/wm/DisplayPolicy;->isDeskDockEnablesAccelerometer()Z
-PLcom/android/server/wm/DisplayPolicy;->isHdmiPlugged()Z
-HPLcom/android/server/wm/DisplayPolicy;->isImmersiveMode(I)Z
+HPLcom/android/server/wm/DisplayPolicy;->isCarDockEnablesAccelerometer()Z
+HPLcom/android/server/wm/DisplayPolicy;->isDeskDockEnablesAccelerometer()Z
+HPLcom/android/server/wm/DisplayPolicy;->isHdmiPlugged()Z
+HSPLcom/android/server/wm/DisplayPolicy;->isImmersiveMode(I)Z
 HSPLcom/android/server/wm/DisplayPolicy;->isKeyguardDrawComplete()Z
-HPLcom/android/server/wm/DisplayPolicy;->isKeyguardOccluded()Z
+HSPLcom/android/server/wm/DisplayPolicy;->isKeyguardOccluded()Z
+HSPLcom/android/server/wm/DisplayPolicy;->isKeyguardShowing()Z
 PLcom/android/server/wm/DisplayPolicy;->isNavBarEmpty(I)Z
-PLcom/android/server/wm/DisplayPolicy;->isPersistentVrModeEnabled()Z
+HPLcom/android/server/wm/DisplayPolicy;->isPersistentVrModeEnabled()Z
 HSPLcom/android/server/wm/DisplayPolicy;->isScreenOnEarly()Z
-PLcom/android/server/wm/DisplayPolicy;->isScreenOnFully()Z
+HSPLcom/android/server/wm/DisplayPolicy;->isScreenOnFully()Z
 HSPLcom/android/server/wm/DisplayPolicy;->isShowingDreamLw()Z
 HSPLcom/android/server/wm/DisplayPolicy;->isStatusBarKeyguard()Z
 PLcom/android/server/wm/DisplayPolicy;->isTopLayoutFullscreen()Z
-PLcom/android/server/wm/DisplayPolicy;->isWindowExcludedFromContent(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/DisplayPolicy;->isWindowExcludedFromContent(Lcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/DisplayPolicy;->isWindowManagerDrawComplete()Z
-PLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$3$DisplayPolicy(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$4$DisplayPolicy(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$5$DisplayPolicy(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$6$DisplayPolicy(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$7$DisplayPolicy(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$3$DisplayPolicy(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$4$DisplayPolicy(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$5$DisplayPolicy(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$5(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$6$DisplayPolicy(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$7$DisplayPolicy(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$8$DisplayPolicy(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$9$DisplayPolicy(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
+PLcom/android/server/wm/DisplayPolicy;->lambda$beginLayoutLw$10$DisplayPolicy(Landroid/view/InputChannel;Landroid/os/Looper;)Landroid/view/InputEventReceiver;
+PLcom/android/server/wm/DisplayPolicy;->lambda$beginLayoutLw$12$DisplayPolicy(Landroid/view/InputChannel;Landroid/os/Looper;)Landroid/view/InputEventReceiver;
 PLcom/android/server/wm/DisplayPolicy;->lambda$beginLayoutLw$8$DisplayPolicy(Landroid/view/InputChannel;Landroid/os/Looper;)Landroid/view/InputEventReceiver;
-PLcom/android/server/wm/DisplayPolicy;->lambda$canToastShowWhenLocked$2(ILcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/DisplayPolicy;->lambda$updateSystemUiVisibilityLw$10$DisplayPolicy(ILjava/lang/String;Landroid/util/Pair;I[Lcom/android/internal/view/AppearanceRegion;ZZZ)V
+PLcom/android/server/wm/DisplayPolicy;->lambda$beginLayoutLw$9$DisplayPolicy(Landroid/view/InputChannel;Landroid/os/Looper;)Landroid/view/InputEventReceiver;
+HPLcom/android/server/wm/DisplayPolicy;->lambda$canToastShowWhenLocked$2(ILcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/DisplayPolicy;->lambda$notifyDisplayReady$10$DisplayPolicy()V
+PLcom/android/server/wm/DisplayPolicy;->lambda$notifyDisplayReady$11$DisplayPolicy()V
+PLcom/android/server/wm/DisplayPolicy;->lambda$notifyDisplayReady$13$DisplayPolicy()V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$notifyDisplayReady$9$DisplayPolicy()V
+HSPLcom/android/server/wm/DisplayPolicy;->lambda$updateSystemUiVisibilityLw$10$DisplayPolicy(ILjava/lang/String;Landroid/util/Pair;I[Lcom/android/internal/view/AppearanceRegion;ZZZ)V
+HSPLcom/android/server/wm/DisplayPolicy;->lambda$updateSystemUiVisibilityLw$11$DisplayPolicy(ILjava/lang/String;Landroid/util/Pair;I[Lcom/android/internal/view/AppearanceRegion;ZZZ)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$updateSystemUiVisibilityLw$12$DisplayPolicy(ILjava/lang/String;Landroid/util/Pair;I[Lcom/android/internal/view/AppearanceRegion;ZZZ)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$updateSystemUiVisibilityLw$14$DisplayPolicy(ILjava/lang/String;Landroid/util/Pair;I[Lcom/android/internal/view/AppearanceRegion;ZZZ)V
 HSPLcom/android/server/wm/DisplayPolicy;->layoutNavigationBar(Lcom/android/server/wm/DisplayFrames;IZZZZ)Z
+HSPLcom/android/server/wm/DisplayPolicy;->layoutNavigationBar(Lcom/android/server/wm/DisplayFrames;IZZZZZ)Z
 HSPLcom/android/server/wm/DisplayPolicy;->layoutScreenDecorWindows(Lcom/android/server/wm/DisplayFrames;)V
+HSPLcom/android/server/wm/DisplayPolicy;->layoutScreenDecorWindows(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowFrames;)V
 HSPLcom/android/server/wm/DisplayPolicy;->layoutStatusBar(Lcom/android/server/wm/DisplayFrames;IZ)Z
-HPLcom/android/server/wm/DisplayPolicy;->layoutWallpaper(Lcom/android/server/wm/DisplayFrames;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/DisplayPolicy;->layoutWindowLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/DisplayFrames;)V
+HSPLcom/android/server/wm/DisplayPolicy;->layoutWallpaper(Lcom/android/server/wm/DisplayFrames;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/DisplayPolicy;->layoutWindowLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/DisplayFrames;)V
 HSPLcom/android/server/wm/DisplayPolicy;->navigationBarCanMove()Z
 HSPLcom/android/server/wm/DisplayPolicy;->navigationBarPosition(III)I
-PLcom/android/server/wm/DisplayPolicy;->offsetInputMethodWindowLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/DisplayFrames;)V
+PLcom/android/server/wm/DisplayPolicy;->notifyDisplayReady()V
+HPLcom/android/server/wm/DisplayPolicy;->offsetInputMethodWindowLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/DisplayFrames;)V
+HPLcom/android/server/wm/DisplayPolicy;->offsetVoiceInputWindowLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/DisplayFrames;)V
 HSPLcom/android/server/wm/DisplayPolicy;->onConfigurationChanged()V
-PLcom/android/server/wm/DisplayPolicy;->onPowerKeyDown(Z)V
-PLcom/android/server/wm/DisplayPolicy;->removeWindowLw(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/DisplayPolicy;->requestTransientBars(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/DisplayPolicy;->resetSystemUiVisibilityLw()V
+PLcom/android/server/wm/DisplayPolicy;->onLockTaskStateChangedLw(I)V
+PLcom/android/server/wm/DisplayPolicy;->onOverlayChangedLw()V
+HPLcom/android/server/wm/DisplayPolicy;->onPowerKeyDown(Z)V
+HSPLcom/android/server/wm/DisplayPolicy;->postAdjustDisplayFrames(Lcom/android/server/wm/DisplayFrames;)V
+HPLcom/android/server/wm/DisplayPolicy;->removeWindowLw(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayPolicy;->requestTransientBars(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/DisplayPolicy;->resetSystemUiVisibilityLw()V
 PLcom/android/server/wm/DisplayPolicy;->screenTurnedOff()V
 HSPLcom/android/server/wm/DisplayPolicy;->screenTurnedOn(Lcom/android/server/policy/WindowManagerPolicy$ScreenOnListener;)V
-PLcom/android/server/wm/DisplayPolicy;->selectAnimation(Lcom/android/server/wm/WindowState;I)I
+HPLcom/android/server/wm/DisplayPolicy;->selectAnimation(Lcom/android/server/wm/WindowState;I)I
+PLcom/android/server/wm/DisplayPolicy;->selectDockedDividerAnimation(Lcom/android/server/wm/WindowState;I)I
 HPLcom/android/server/wm/DisplayPolicy;->setAttachedWindowFrames(Lcom/android/server/wm/WindowState;IILcom/android/server/wm/WindowState;ZLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Lcom/android/server/wm/DisplayFrames;)V
-PLcom/android/server/wm/DisplayPolicy;->setAwake(Z)V
+HSPLcom/android/server/wm/DisplayPolicy;->setAwake(Z)V
+PLcom/android/server/wm/DisplayPolicy;->setForwardedInsets(Landroid/graphics/Insets;)V
 HSPLcom/android/server/wm/DisplayPolicy;->setHdmiPlugged(ZZ)V
 HSPLcom/android/server/wm/DisplayPolicy;->setLidState(I)V
-PLcom/android/server/wm/DisplayPolicy;->setNavBarTransparentFlag(I)I
+PLcom/android/server/wm/DisplayPolicy;->setNavBarOpaqueFlag(I)I
+HSPLcom/android/server/wm/DisplayPolicy;->setNavBarTransparentFlag(I)I
+PLcom/android/server/wm/DisplayPolicy;->setPointerLocationEnabled(Z)V
+PLcom/android/server/wm/DisplayPolicy;->supportsPointerLocation()Z
 HSPLcom/android/server/wm/DisplayPolicy;->systemReady()V
 PLcom/android/server/wm/DisplayPolicy;->takeScreenshot(I)V
-PLcom/android/server/wm/DisplayPolicy;->topAppHidesStatusBar()Z
+HPLcom/android/server/wm/DisplayPolicy;->topAppHidesStatusBar()Z
 HSPLcom/android/server/wm/DisplayPolicy;->updateConfigurationAndScreenSizeDependentBehaviors()V
 HSPLcom/android/server/wm/DisplayPolicy;->updateCurrentUserResources()V
-HPLcom/android/server/wm/DisplayPolicy;->updateLightNavigationBarLw(ILcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)I
-HPLcom/android/server/wm/DisplayPolicy;->updateLightStatusBarAppearanceLw(ILcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)I
-HPLcom/android/server/wm/DisplayPolicy;->updateSystemBarsLw(Lcom/android/server/wm/WindowState;II)Landroid/util/Pair;
+PLcom/android/server/wm/DisplayPolicy;->updateDreamingSleepToken(Z)V
+HSPLcom/android/server/wm/DisplayPolicy;->updateLightNavigationBarLw(ILcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)I
+HSPLcom/android/server/wm/DisplayPolicy;->updateLightStatusBarAppearanceLw(ILcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)I
+HSPLcom/android/server/wm/DisplayPolicy;->updateSystemBarsLw(Lcom/android/server/wm/WindowState;II)Landroid/util/Pair;
 HSPLcom/android/server/wm/DisplayPolicy;->updateSystemUiVisibilityLw()I
-PLcom/android/server/wm/DisplayPolicy;->updateTransientState(IIIILandroid/util/IntArray;Landroid/util/IntArray;)V
+HSPLcom/android/server/wm/DisplayPolicy;->updateTransientState(IIIILandroid/util/IntArray;Landroid/util/IntArray;)V
 HSPLcom/android/server/wm/DisplayPolicy;->updateWindowSleepToken()V
-PLcom/android/server/wm/DisplayPolicy;->validateAddingWindowLw(Landroid/view/WindowManager$LayoutParams;)I
+HSPLcom/android/server/wm/DisplayPolicy;->validateAddingWindowLw(Landroid/view/WindowManager$LayoutParams;)I
 HSPLcom/android/server/wm/DisplayRotation$1;-><init>(Lcom/android/server/wm/DisplayRotation;)V
+PLcom/android/server/wm/DisplayRotation$1;->run()V
 HSPLcom/android/server/wm/DisplayRotation$2;-><init>(Lcom/android/server/wm/DisplayRotation;)V
+HPLcom/android/server/wm/DisplayRotation$2;->continueRotateDisplay(ILandroid/view/WindowContainerTransaction;)V
+PLcom/android/server/wm/DisplayRotation$2;->lambda$continueRotateDisplay$0(Ljava/lang/Object;ILandroid/view/WindowContainerTransaction;)V
 PLcom/android/server/wm/DisplayRotation$OrientationListener$UpdateRunnable;-><init>(Lcom/android/server/wm/DisplayRotation$OrientationListener;I)V
-PLcom/android/server/wm/DisplayRotation$OrientationListener$UpdateRunnable;->run()V
+HPLcom/android/server/wm/DisplayRotation$OrientationListener$UpdateRunnable;->run()V
 HSPLcom/android/server/wm/DisplayRotation$OrientationListener;-><init>(Lcom/android/server/wm/DisplayRotation;Landroid/content/Context;Landroid/os/Handler;)V
 PLcom/android/server/wm/DisplayRotation$OrientationListener;->disable()V
 PLcom/android/server/wm/DisplayRotation$OrientationListener;->enable(Z)V
-PLcom/android/server/wm/DisplayRotation$OrientationListener;->onProposedRotationChanged(I)V
+HPLcom/android/server/wm/DisplayRotation$OrientationListener;->onProposedRotationChanged(I)V
 HSPLcom/android/server/wm/DisplayRotation$RotationAnimationPair;-><init>()V
 HSPLcom/android/server/wm/DisplayRotation$RotationAnimationPair;-><init>(Lcom/android/server/wm/DisplayRotation$1;)V
 HSPLcom/android/server/wm/DisplayRotation$SettingsObserver;-><init>(Lcom/android/server/wm/DisplayRotation;Landroid/os/Handler;)V
 HSPLcom/android/server/wm/DisplayRotation$SettingsObserver;->observe()V
-PLcom/android/server/wm/DisplayRotation$SettingsObserver;->onChange(Z)V
+HSPLcom/android/server/wm/DisplayRotation$SettingsObserver;->onChange(Z)V
 HSPLcom/android/server/wm/DisplayRotation;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/DisplayRotation;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayWindowSettings;Landroid/content/Context;Ljava/lang/Object;)V
+PLcom/android/server/wm/DisplayRotation;->access$100(Lcom/android/server/wm/DisplayRotation;)I
+PLcom/android/server/wm/DisplayRotation;->access$200(Lcom/android/server/wm/DisplayRotation;ILandroid/view/WindowContainerTransaction;)V
 PLcom/android/server/wm/DisplayRotation;->access$300(Lcom/android/server/wm/DisplayRotation;)Lcom/android/server/wm/WindowManagerService;
 PLcom/android/server/wm/DisplayRotation;->access$400(Lcom/android/server/wm/DisplayRotation;)I
 PLcom/android/server/wm/DisplayRotation;->access$500(Lcom/android/server/wm/DisplayRotation;I)Z
+PLcom/android/server/wm/DisplayRotation;->access$600(Lcom/android/server/wm/DisplayRotation;I)Z
+PLcom/android/server/wm/DisplayRotation;->access$700(Lcom/android/server/wm/DisplayRotation;IZ)V
 HSPLcom/android/server/wm/DisplayRotation;->access$800(Lcom/android/server/wm/DisplayRotation;)Landroid/content/Context;
 HSPLcom/android/server/wm/DisplayRotation;->access$900(Lcom/android/server/wm/DisplayRotation;)Z
 HSPLcom/android/server/wm/DisplayRotation;->allowAllRotationsToString(I)Ljava/lang/String;
+PLcom/android/server/wm/DisplayRotation;->applyCurrentRotation(I)V
 HSPLcom/android/server/wm/DisplayRotation;->configure(IIII)V
+HPLcom/android/server/wm/DisplayRotation;->continueRotation(ILandroid/view/WindowContainerTransaction;)V
 HSPLcom/android/server/wm/DisplayRotation;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/DisplayRotation;->freezeRotation(I)V
 PLcom/android/server/wm/DisplayRotation;->getCurrentAppOrientation()I
 HSPLcom/android/server/wm/DisplayRotation;->getDisplayPolicy()Lcom/android/server/wm/DisplayPolicy;
 HSPLcom/android/server/wm/DisplayRotation;->getLandscapeRotation()I
+HSPLcom/android/server/wm/DisplayRotation;->getLastOrientation()I
 PLcom/android/server/wm/DisplayRotation;->getOrientationListener()Lcom/android/server/policy/WindowOrientationListener;
 HSPLcom/android/server/wm/DisplayRotation;->getPortraitRotation()I
 HSPLcom/android/server/wm/DisplayRotation;->getRotation()I
@@ -21752,32 +36160,48 @@
 HSPLcom/android/server/wm/DisplayRotation;->getUpsideDownRotation()I
 PLcom/android/server/wm/DisplayRotation;->getUserRotation()I
 PLcom/android/server/wm/DisplayRotation;->getUserRotationMode()I
+PLcom/android/server/wm/DisplayRotation;->isAnyPortrait(I)Z
 HSPLcom/android/server/wm/DisplayRotation;->isFixedToUserRotation()Z
+PLcom/android/server/wm/DisplayRotation;->isLandscapeOrSeascape(I)Z
 HSPLcom/android/server/wm/DisplayRotation;->isRotatingSeamlessly()Z
 PLcom/android/server/wm/DisplayRotation;->isRotationChoicePossible(I)Z
+PLcom/android/server/wm/DisplayRotation;->isRotationFrozen()Z
 PLcom/android/server/wm/DisplayRotation;->isValidRotationChoice(I)Z
 HSPLcom/android/server/wm/DisplayRotation;->isWaitingForRemoteRotation()Z
-PLcom/android/server/wm/DisplayRotation;->markForSeamlessRotation(Lcom/android/server/wm/WindowState;Z)V
-PLcom/android/server/wm/DisplayRotation;->needSensorRunning()Z
-PLcom/android/server/wm/DisplayRotation;->onUserSwitch()V
-PLcom/android/server/wm/DisplayRotation;->prepareNormalRotationAnimation()V
+PLcom/android/server/wm/DisplayRotation;->lambda$onSeamlessRotationTimeout$1$DisplayRotation([ZLcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/DisplayRotation;->lambda$shouldRotateSeamlessly$0(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayRotation;->markForSeamlessRotation(Lcom/android/server/wm/WindowState;Z)V
+HPLcom/android/server/wm/DisplayRotation;->needSensorRunning()Z
+PLcom/android/server/wm/DisplayRotation;->needsUpdate()Z
+PLcom/android/server/wm/DisplayRotation;->onSeamlessRotationTimeout()V
+HSPLcom/android/server/wm/DisplayRotation;->onUserSwitch()V
+PLcom/android/server/wm/DisplayRotation;->pause()V
+HSPLcom/android/server/wm/DisplayRotation;->prepareNormalRotationAnimation()V
+PLcom/android/server/wm/DisplayRotation;->prepareSeamlessRotation()V
 HSPLcom/android/server/wm/DisplayRotation;->readRotation(I)I
-PLcom/android/server/wm/DisplayRotation;->respectAppRequestedOrientation()Z
+HSPLcom/android/server/wm/DisplayRotation;->respectAppRequestedOrientation()Z
 HSPLcom/android/server/wm/DisplayRotation;->restoreSettings(III)V
-PLcom/android/server/wm/DisplayRotation;->rotationForOrientation(II)I
-PLcom/android/server/wm/DisplayRotation;->selectRotationAnimation()Lcom/android/server/wm/DisplayRotation$RotationAnimationPair;
+PLcom/android/server/wm/DisplayRotation;->resume()V
+HPLcom/android/server/wm/DisplayRotation;->rotationForOrientation(II)I
+HSPLcom/android/server/wm/DisplayRotation;->selectRotationAnimation()Lcom/android/server/wm/DisplayRotation$RotationAnimationPair;
+PLcom/android/server/wm/DisplayRotation;->sendProposedRotationChangeToStatusBarInternal(IZ)V
 PLcom/android/server/wm/DisplayRotation;->setUserRotation(II)V
-PLcom/android/server/wm/DisplayRotation;->shouldRotateSeamlessly(IIZ)Z
-PLcom/android/server/wm/DisplayRotation;->startRemoteRotation(II)V
+HPLcom/android/server/wm/DisplayRotation;->shouldRotateSeamlessly(IIZ)Z
+HPLcom/android/server/wm/DisplayRotation;->startRemoteRotation(II)V
+PLcom/android/server/wm/DisplayRotation;->thawRotation()V
 HSPLcom/android/server/wm/DisplayRotation;->updateOrientation(IZ)Z
 HSPLcom/android/server/wm/DisplayRotation;->updateOrientationListener()V
 HSPLcom/android/server/wm/DisplayRotation;->updateOrientationListenerLw()V
+PLcom/android/server/wm/DisplayRotation;->updateRotationAndSendNewConfigIfChanged()Z
 HSPLcom/android/server/wm/DisplayRotation;->updateRotationUnchecked(Z)Z
 HSPLcom/android/server/wm/DisplayRotation;->updateSettings()Z
 HSPLcom/android/server/wm/DisplayRotation;->updateUserDependentConfiguration(Landroid/content/res/Resources;)V
+PLcom/android/server/wm/DisplayRotation;->validateRotationAnimation(IIZ)Z
 HSPLcom/android/server/wm/DisplayWindowListenerController;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/DisplayWindowListenerController;->dispatchDisplayAdded(Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/DisplayWindowListenerController;->dispatchDisplayChanged(Lcom/android/server/wm/DisplayContent;Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/DisplayWindowListenerController;->dispatchDisplayRemoved(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/DisplayWindowListenerController;->registerListener(Landroid/view/IDisplayWindowListener;)V
 HSPLcom/android/server/wm/DisplayWindowSettings$AtomicFileStorage;-><init>()V
 HSPLcom/android/server/wm/DisplayWindowSettings$AtomicFileStorage;->copyVendorSettings(Ljava/io/File;)V
 HSPLcom/android/server/wm/DisplayWindowSettings$AtomicFileStorage;->openRead()Ljava/io/InputStream;
@@ -21799,93 +36223,209 @@
 HSPLcom/android/server/wm/DisplayWindowSettings;->getWindowingModeLocked(Lcom/android/server/wm/DisplayContent;)I
 HSPLcom/android/server/wm/DisplayWindowSettings;->getWindowingModeLocked(Lcom/android/server/wm/DisplayWindowSettings$Entry;I)I
 HSPLcom/android/server/wm/DisplayWindowSettings;->readSettings()V
-PLcom/android/server/wm/DisplayWindowSettings;->shouldShowSystemDecorsLocked(Lcom/android/server/wm/DisplayContent;)Z
+HPLcom/android/server/wm/DisplayWindowSettings;->shouldShowSystemDecorsLocked(Lcom/android/server/wm/DisplayContent;)Z
 HSPLcom/android/server/wm/DisplayWindowSettings;->updateSettingsForDisplay(Lcom/android/server/wm/DisplayContent;)Z
 HSPLcom/android/server/wm/DockedStackDividerController;-><clinit>()V
 HSPLcom/android/server/wm/DockedStackDividerController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/DockedStackDividerController;->animate(J)Z
-PLcom/android/server/wm/DockedStackDividerController;->checkMinimizeChanged(Z)V
+HPLcom/android/server/wm/DockedStackDividerController;->animateForIme(J)Z
+HPLcom/android/server/wm/DockedStackDividerController;->canPrimaryStackDockTo(ILandroid/graphics/Rect;I)Z
+HSPLcom/android/server/wm/DockedStackDividerController;->checkMinimizeChanged(Z)V
+PLcom/android/server/wm/DockedStackDividerController;->clearImeAdjustAnimation()Z
+PLcom/android/server/wm/DockedStackDividerController;->containsAppInDockedStack(Landroid/util/ArraySet;)Z
 HSPLcom/android/server/wm/DockedStackDividerController;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/DockedStackDividerController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/wm/DockedStackDividerController;->getClipRevealMeetFraction(Lcom/android/server/wm/ActivityStack;)F
+PLcom/android/server/wm/DockedStackDividerController;->getContentInsets()I
 HSPLcom/android/server/wm/DockedStackDividerController;->getContentWidth()I
-PLcom/android/server/wm/DockedStackDividerController;->getHomeStackBoundsInDockedMode(Landroid/content/res/Configuration;ILandroid/graphics/Rect;)V
+PLcom/android/server/wm/DockedStackDividerController;->getContentWidthInactive()I
+HPLcom/android/server/wm/DockedStackDividerController;->getDockSide(Landroid/graphics/Rect;Landroid/graphics/Rect;II)I
+HPLcom/android/server/wm/DockedStackDividerController;->getHomeStackBoundsInDockedMode(Landroid/content/res/Configuration;ILandroid/graphics/Rect;)V
 PLcom/android/server/wm/DockedStackDividerController;->getImeHeightAdjustedFor()I
+PLcom/android/server/wm/DockedStackDividerController;->getInterpolatedAnimationValue(F)F
+PLcom/android/server/wm/DockedStackDividerController;->getInterpolatedDividerValue(F)F
+HPLcom/android/server/wm/DockedStackDividerController;->getSmallestWidthDpForBounds(Landroid/graphics/Rect;)I
 HSPLcom/android/server/wm/DockedStackDividerController;->initSnapAlgorithmForRotations()V
+PLcom/android/server/wm/DockedStackDividerController;->isAnimationMaximizing()Z
+PLcom/android/server/wm/DockedStackDividerController;->isDockSideAllowed(IIIZ)Z
 PLcom/android/server/wm/DockedStackDividerController;->isHomeStackResizable()Z
 PLcom/android/server/wm/DockedStackDividerController;->isImeHideRequested()Z
 HSPLcom/android/server/wm/DockedStackDividerController;->isMinimizedDock()Z
-PLcom/android/server/wm/DockedStackDividerController;->isResizing()Z
+HSPLcom/android/server/wm/DockedStackDividerController;->isResizing()Z
+HPLcom/android/server/wm/DockedStackDividerController;->isWithinDisplay(Lcom/android/server/wm/Task;)Z
 HSPLcom/android/server/wm/DockedStackDividerController;->loadDimens()V
 PLcom/android/server/wm/DockedStackDividerController;->notifyAdjustedForImeChanged(ZJ)V
-PLcom/android/server/wm/DockedStackDividerController;->notifyAppTransitionStarting(Landroid/util/ArraySet;I)V
-PLcom/android/server/wm/DockedStackDividerController;->notifyAppVisibilityChanged()V
+HSPLcom/android/server/wm/DockedStackDividerController;->notifyAppTransitionStarting(Landroid/util/ArraySet;I)V
+HSPLcom/android/server/wm/DockedStackDividerController;->notifyAppVisibilityChanged()V
+PLcom/android/server/wm/DockedStackDividerController;->notifyDockSideChanged(I)V
 PLcom/android/server/wm/DockedStackDividerController;->notifyDockedDividerVisibilityChanged(Z)V
 PLcom/android/server/wm/DockedStackDividerController;->notifyDockedStackExistsChanged(Z)V
-PLcom/android/server/wm/DockedStackDividerController;->notifyDockedStackMinimizedChanged(ZZZ)V
+HPLcom/android/server/wm/DockedStackDividerController;->notifyDockedStackMinimizedChanged(ZZZ)V
 HSPLcom/android/server/wm/DockedStackDividerController;->onConfigurationChanged()V
-PLcom/android/server/wm/DockedStackDividerController;->positionDockedStackedDivider(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DockedStackDividerController;->positionDockedStackedDivider(Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/DockedStackDividerController;->reevaluateVisibility(Z)V
 PLcom/android/server/wm/DockedStackDividerController;->registerDockedStackListener(Landroid/view/IDockedStackListener;)V
+PLcom/android/server/wm/DockedStackDividerController;->resetDragResizingChangeReported()V
 PLcom/android/server/wm/DockedStackDividerController;->resetImeHideRequested()V
 HSPLcom/android/server/wm/DockedStackDividerController;->setAdjustedForIme(ZZZLcom/android/server/wm/WindowState;I)V
 PLcom/android/server/wm/DockedStackDividerController;->setMinimizedDockedStack(ZZ)V
+HPLcom/android/server/wm/DockedStackDividerController;->setResizeDimLayer(ZIF)V
+PLcom/android/server/wm/DockedStackDividerController;->setResizing(Z)V
 PLcom/android/server/wm/DockedStackDividerController;->setTouchRegion(Landroid/graphics/Rect;)V
 PLcom/android/server/wm/DockedStackDividerController;->setWindow(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/DockedStackDividerController;->startImeAdjustAnimation(ZZLcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/DockedStackDividerController;->wasVisible()Z
 HSPLcom/android/server/wm/DragDropController$1;-><init>(Lcom/android/server/wm/DragDropController;)V
 HSPLcom/android/server/wm/DragDropController$DragHandler;-><init>(Lcom/android/server/wm/DragDropController;Lcom/android/server/wm/WindowManagerService;Landroid/os/Looper;)V
+PLcom/android/server/wm/DragDropController$DragHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/wm/DragDropController;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/Looper;)V
+PLcom/android/server/wm/DragDropController;->access$000(Lcom/android/server/wm/DragDropController;)Lcom/android/server/wm/DragState;
 HSPLcom/android/server/wm/DragDropController;->dragDropActiveLocked()Z
+PLcom/android/server/wm/DragDropController;->dragRecipientEntered(Landroid/view/IWindow;)V
+PLcom/android/server/wm/DragDropController;->dragRecipientExited(Landroid/view/IWindow;)V
+HPLcom/android/server/wm/DragDropController;->handleMotionEvent(ZFF)V
+PLcom/android/server/wm/DragDropController;->onDragStateClosedLocked(Lcom/android/server/wm/DragState;)V
+PLcom/android/server/wm/DragDropController;->performDrag(Landroid/view/SurfaceSession;IILandroid/view/IWindow;ILandroid/view/SurfaceControl;IFFFFLandroid/content/ClipData;)Landroid/os/IBinder;
+PLcom/android/server/wm/DragDropController;->reportDropResult(Landroid/view/IWindow;Z)V
+PLcom/android/server/wm/DragDropController;->sendHandlerMessage(ILjava/lang/Object;)V
+PLcom/android/server/wm/DragDropController;->sendTimeoutMessage(ILjava/lang/Object;)V
+PLcom/android/server/wm/DragInputEventReceiver;-><init>(Landroid/view/InputChannel;Landroid/os/Looper;Lcom/android/server/wm/DragDropController;)V
+HPLcom/android/server/wm/DragInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V
+PLcom/android/server/wm/DragResizeMode;->isModeAllowedForStack(Lcom/android/server/wm/ActivityStack;I)Z
+PLcom/android/server/wm/DragState$AnimationListener;-><init>(Lcom/android/server/wm/DragState;)V
+PLcom/android/server/wm/DragState$AnimationListener;-><init>(Lcom/android/server/wm/DragState;Lcom/android/server/wm/DragState$1;)V
+PLcom/android/server/wm/DragState$AnimationListener;->onAnimationEnd(Landroid/animation/Animator;)V
+PLcom/android/server/wm/DragState$AnimationListener;->onAnimationStart(Landroid/animation/Animator;)V
+PLcom/android/server/wm/DragState$AnimationListener;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
+PLcom/android/server/wm/DragState$InputInterceptor;-><init>(Lcom/android/server/wm/DragState;Landroid/view/Display;)V
+PLcom/android/server/wm/DragState$InputInterceptor;->tearDown()V
+PLcom/android/server/wm/DragState;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DragDropController;Landroid/os/IBinder;Landroid/view/SurfaceControl;ILandroid/os/IBinder;)V
+PLcom/android/server/wm/DragState;->access$000(Lcom/android/server/wm/DragState;)Landroid/graphics/Point;
+PLcom/android/server/wm/DragState;->broadcastDragStartedLocked(FF)V
+PLcom/android/server/wm/DragState;->closeLocked()V
+PLcom/android/server/wm/DragState;->createReturnAnimationLocked()Landroid/animation/ValueAnimator;
+PLcom/android/server/wm/DragState;->endDragLocked()V
+PLcom/android/server/wm/DragState;->getInputChannel()Landroid/view/InputChannel;
+PLcom/android/server/wm/DragState;->getInputWindowHandle()Landroid/view/InputWindowHandle;
+PLcom/android/server/wm/DragState;->isClosing()Z
+PLcom/android/server/wm/DragState;->isFromSource(I)Z
+PLcom/android/server/wm/DragState;->isInProgress()Z
+PLcom/android/server/wm/DragState;->isValidDropTarget(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DragState;->isWindowNotified(Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/DragState;->lambda$broadcastDragStartedLocked$0$DragState(FFLcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/DragState;->lambda$createReturnAnimationLocked$1(Landroid/animation/ValueAnimator;)V
+PLcom/android/server/wm/DragState;->notifyDropLocked(FF)V
+HPLcom/android/server/wm/DragState;->notifyLocationLocked(FF)V
+HPLcom/android/server/wm/DragState;->notifyMoveLocked(FF)V
+HPLcom/android/server/wm/DragState;->obtainDragEvent(Lcom/android/server/wm/WindowState;IFFLjava/lang/Object;Landroid/content/ClipDescription;Landroid/content/ClipData;Lcom/android/internal/view/IDragAndDropPermissions;Z)Landroid/view/DragEvent;
+PLcom/android/server/wm/DragState;->overridePointerIconLocked(I)V
+PLcom/android/server/wm/DragState;->register(Landroid/view/Display;)V
+PLcom/android/server/wm/DragState;->sendDragStartedIfNeededLocked(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/DragState;->sendDragStartedLocked(Lcom/android/server/wm/WindowState;FFLandroid/content/ClipDescription;)V
+PLcom/android/server/wm/DragState;->showInputSurface()V
+PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;-><init>(Landroid/view/IWindow;Lcom/android/server/wm/WindowState;II)V
 HSPLcom/android/server/wm/EmbeddedWindowController;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/wm/EmbeddedWindowController;->add(Landroid/os/IBinder;Landroid/view/IWindow;Lcom/android/server/wm/WindowState;II)V
 PLcom/android/server/wm/EmbeddedWindowController;->getHostWindow(Landroid/os/IBinder;)Lcom/android/server/wm/WindowState;
-PLcom/android/server/wm/EmbeddedWindowController;->removeWindowsWithHost(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/EmbeddedWindowController;->remove(Landroid/view/IWindow;)V
+HPLcom/android/server/wm/EmbeddedWindowController;->removeWindowsWithHost(Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;-><init>(Lcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->lambda$Bbb3nMFa3F8er_OBuKA7-SpeSKo(Lcom/android/server/wm/EnsureActivitiesVisibleHelper;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Z)V
 HPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->lambda$uAeEWwx5d0xk6FKOvvR9CXZS6Bg(Lcom/android/server/wm/EnsureActivitiesVisibleHelper;Lcom/android/server/wm/ActivityRecord;Z)V
-PLcom/android/server/wm/EnsureActivitiesVisibleHelper;->makeVisibleAndRestartIfNeeded(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->makeVisibleAndRestartIfNeeded(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->process(Lcom/android/server/wm/ActivityRecord;IZZ)V
 HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->reset(Lcom/android/server/wm/ActivityRecord;IZZ)V
+HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->setActivityVisibilityState(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Z)V
 HPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->setActivityVisibilityState(Lcom/android/server/wm/ActivityRecord;Z)V
-PLcom/android/server/wm/EventLogTags;->writeWmAddToStopping(IILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/wm/EventLogTags;->writeWmAddToStopping(IILjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/wm/EventLogTags;->writeWmBootAnimationDone(J)V
-PLcom/android/server/wm/EventLogTags;->writeWmCreateTask(II)V
+HSPLcom/android/server/wm/EventLogTags;->writeWmCreateTask(II)V
 HPLcom/android/server/wm/EventLogTags;->writeWmDestroyActivity(IIILjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/wm/EventLogTags;->writeWmFailedToPause(IILjava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/wm/EventLogTags;->writeWmFinishActivity(IIILjava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/wm/EventLogTags;->writeWmFocusedStack(IIIILjava/lang/String;)V
-PLcom/android/server/wm/EventLogTags;->writeWmPauseActivity(IILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/wm/EventLogTags;->writeWmRemoveTask(II)V
-HPLcom/android/server/wm/EventLogTags;->writeWmRestartActivity(IIILjava/lang/String;)V
+HPLcom/android/server/wm/EventLogTags;->writeWmPauseActivity(IILjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/wm/EventLogTags;->writeWmRelaunchActivity(IIILjava/lang/String;)V
+HPLcom/android/server/wm/EventLogTags;->writeWmRelaunchResumeActivity(IIILjava/lang/String;)V
+HPLcom/android/server/wm/EventLogTags;->writeWmRemoveTask(II)V
+HSPLcom/android/server/wm/EventLogTags;->writeWmRestartActivity(IIILjava/lang/String;)V
 HPLcom/android/server/wm/EventLogTags;->writeWmResumeActivity(IIILjava/lang/String;)V
 HPLcom/android/server/wm/EventLogTags;->writeWmSetKeyguardShown(IIILjava/lang/String;)V
-PLcom/android/server/wm/EventLogTags;->writeWmSetResumedActivity(ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/wm/EventLogTags;->writeWmSetResumedActivity(ILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/wm/EventLogTags;->writeWmStackCreated(I)V
-PLcom/android/server/wm/EventLogTags;->writeWmStackRemoved(I)V
-PLcom/android/server/wm/EventLogTags;->writeWmStopActivity(IILjava/lang/String;)V
-PLcom/android/server/wm/EventLogTags;->writeWmTaskCreated(II)V
-HPLcom/android/server/wm/EventLogTags;->writeWmTaskMoved(III)V
-PLcom/android/server/wm/EventLogTags;->writeWmTaskRemoved(ILjava/lang/String;)V
-PLcom/android/server/wm/EventLogTags;->writeWmTaskToFront(II)V
+HPLcom/android/server/wm/EventLogTags;->writeWmStackRemoved(I)V
+HPLcom/android/server/wm/EventLogTags;->writeWmStopActivity(IILjava/lang/String;)V
+HSPLcom/android/server/wm/EventLogTags;->writeWmTaskCreated(II)V
+HSPLcom/android/server/wm/EventLogTags;->writeWmTaskMoved(III)V
+HPLcom/android/server/wm/EventLogTags;->writeWmTaskRemoved(ILjava/lang/String;)V
+HPLcom/android/server/wm/EventLogTags;->writeWmTaskToFront(II)V
 HSPLcom/android/server/wm/HighRefreshRateBlacklist$OnPropertiesChangedListener;-><init>(Lcom/android/server/wm/HighRefreshRateBlacklist;)V
 HSPLcom/android/server/wm/HighRefreshRateBlacklist$OnPropertiesChangedListener;-><init>(Lcom/android/server/wm/HighRefreshRateBlacklist;Lcom/android/server/wm/HighRefreshRateBlacklist$1;)V
 PLcom/android/server/wm/HighRefreshRateBlacklist$OnPropertiesChangedListener;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/wm/HighRefreshRateBlacklist;-><init>(Landroid/content/res/Resources;Lcom/android/server/wm/utils/DeviceConfigInterface;)V
 HSPLcom/android/server/wm/HighRefreshRateBlacklist;->create(Landroid/content/res/Resources;)Lcom/android/server/wm/HighRefreshRateBlacklist;
 PLcom/android/server/wm/HighRefreshRateBlacklist;->dump(Ljava/io/PrintWriter;)V
-HPLcom/android/server/wm/HighRefreshRateBlacklist;->isBlacklisted(Ljava/lang/String;)Z
+HSPLcom/android/server/wm/HighRefreshRateBlacklist;->isBlacklisted(Ljava/lang/String;)Z
 HSPLcom/android/server/wm/HighRefreshRateBlacklist;->updateBlacklist(Ljava/lang/String;)V
 HSPLcom/android/server/wm/ImeInsetsSourceProvider;-><init>(Landroid/view/InsetsSource;Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/ImeInsetsSourceProvider;->checkShowImePostLayout()V
 HSPLcom/android/server/wm/ImeInsetsSourceProvider;->onPostInsetsDispatched()V
 HSPLcom/android/server/wm/ImeInsetsSourceProvider;->onPostLayout()V
 HSPLcom/android/server/wm/ImmersiveModeConfirmation$1;-><init>(Lcom/android/server/wm/ImmersiveModeConfirmation;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation$1;->run()V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView$1;-><init>(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView$2;-><init>(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView$2;->onComputeInternalInsets(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView$3;-><init>(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView$4;-><init>(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView$4;->onClick(Landroid/view/View;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView$5$1;-><init>(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView$5;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView$5$1;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView$5;-><init>(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;Landroid/view/View;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView$5;->run()V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;-><init>(Lcom/android/server/wm/ImmersiveModeConfirmation;Landroid/content/Context;Ljava/lang/Runnable;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->access$000(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)Landroid/view/ViewGroup;
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->access$300(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)Ljava/lang/Runnable;
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->access$400(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)Landroid/view/animation/Interpolator;
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->access$400(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)Ljava/lang/Runnable;
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->access$500(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)Landroid/animation/ValueAnimator;
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->access$500(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)Landroid/view/animation/Interpolator;
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->access$502(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;Landroid/animation/ValueAnimator;)Landroid/animation/ValueAnimator;
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->access$600(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)Landroid/animation/ValueAnimator;
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->access$600(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)Landroid/graphics/drawable/ColorDrawable;
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->access$602(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;Landroid/animation/ValueAnimator;)Landroid/animation/ValueAnimator;
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->access$700(Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;)Landroid/graphics/drawable/ColorDrawable;
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->onAttachedToWindow()V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->onDetachedFromWindow()V
 HSPLcom/android/server/wm/ImmersiveModeConfirmation$H;-><init>(Lcom/android/server/wm/ImmersiveModeConfirmation;Landroid/os/Looper;)V
 PLcom/android/server/wm/ImmersiveModeConfirmation$H;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/wm/ImmersiveModeConfirmation;-><init>(Landroid/content/Context;Landroid/os/Looper;Z)V
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$100(Lcom/android/server/wm/ImmersiveModeConfirmation;)Landroid/widget/FrameLayout$LayoutParams;
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$1000(Landroid/content/Context;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$1000(Lcom/android/server/wm/ImmersiveModeConfirmation;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$1100(Lcom/android/server/wm/ImmersiveModeConfirmation;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$1200(Lcom/android/server/wm/ImmersiveModeConfirmation;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$300(Lcom/android/server/wm/ImmersiveModeConfirmation;)Landroid/view/WindowManager;
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$700()Z
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$702(Z)Z
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$800()Z
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$800(Lcom/android/server/wm/ImmersiveModeConfirmation;)Landroid/content/Context;
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$802(Z)Z
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$900(Landroid/content/Context;)V
+PLcom/android/server/wm/ImmersiveModeConfirmation;->access$900(Lcom/android/server/wm/ImmersiveModeConfirmation;)Landroid/content/Context;
 PLcom/android/server/wm/ImmersiveModeConfirmation;->confirmCurrentPrompt()V
+PLcom/android/server/wm/ImmersiveModeConfirmation;->getBubbleLayoutParams()Landroid/widget/FrameLayout$LayoutParams;
+PLcom/android/server/wm/ImmersiveModeConfirmation;->getClingWindowLayoutParams()Landroid/view/WindowManager$LayoutParams;
 HSPLcom/android/server/wm/ImmersiveModeConfirmation;->getNavBarExitDuration()J
-PLcom/android/server/wm/ImmersiveModeConfirmation;->getWindowToken()Landroid/os/IBinder;
-PLcom/android/server/wm/ImmersiveModeConfirmation;->immersiveModeChangedLw(Ljava/lang/String;ZZZ)V
+PLcom/android/server/wm/ImmersiveModeConfirmation;->getWindowManager()Landroid/view/WindowManager;
+HSPLcom/android/server/wm/ImmersiveModeConfirmation;->getWindowToken()Landroid/os/IBinder;
+PLcom/android/server/wm/ImmersiveModeConfirmation;->handleHide()V
+PLcom/android/server/wm/ImmersiveModeConfirmation;->handleShow()V
+HPLcom/android/server/wm/ImmersiveModeConfirmation;->immersiveModeChangedLw(Ljava/lang/String;ZZZ)V
 HSPLcom/android/server/wm/ImmersiveModeConfirmation;->loadSetting(ILandroid/content/Context;)Z
+PLcom/android/server/wm/ImmersiveModeConfirmation;->onLockTaskModeChangedLw(I)V
 PLcom/android/server/wm/ImmersiveModeConfirmation;->onPowerKeyDown(ZJZZ)Z
+PLcom/android/server/wm/ImmersiveModeConfirmation;->saveSetting(Landroid/content/Context;)V
 PLcom/android/server/wm/InputConsumerImpl;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;Ljava/lang/String;Landroid/view/InputChannel;ILandroid/os/UserHandle;I)V
 PLcom/android/server/wm/InputConsumerImpl;->binderDied()V
 PLcom/android/server/wm/InputConsumerImpl;->disposeChannelsLw()V
@@ -21895,31 +36435,47 @@
 HPLcom/android/server/wm/InputConsumerImpl;->layout(Landroid/view/SurfaceControl$Transaction;II)V
 HPLcom/android/server/wm/InputConsumerImpl;->layout(Landroid/view/SurfaceControl$Transaction;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/InputConsumerImpl;->linkToDeathRecipient()V
-PLcom/android/server/wm/InputConsumerImpl;->show(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/InputConsumerImpl;->show(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/InputConsumerImpl;->unlinkFromDeathRecipient()V
+PLcom/android/server/wm/InputManagerCallback$1;-><init>(Lcom/android/server/wm/InputManagerCallback;Ljava/lang/Runnable;Ljava/util/concurrent/CountDownLatch;JLjava/lang/String;[Z)V
+PLcom/android/server/wm/InputManagerCallback$1;->run()V
+HSPLcom/android/server/wm/InputManagerCallback;-><clinit>()V
 HSPLcom/android/server/wm/InputManagerCallback;-><init>(Lcom/android/server/wm/WindowManagerService;)V
-PLcom/android/server/wm/InputManagerCallback;->dispatchPointerCaptureChanged(Landroid/view/IWindow;Z)Z
+PLcom/android/server/wm/InputManagerCallback;->access$000()J
+HPLcom/android/server/wm/InputManagerCallback;->dispatchPointerCaptureChanged(Landroid/view/IWindow;Z)Z
+PLcom/android/server/wm/InputManagerCallback;->dispatchUnhandledKey(Landroid/os/IBinder;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;
+PLcom/android/server/wm/InputManagerCallback;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/wm/InputManagerCallback;->freezeInputDispatchingLw()V
 HSPLcom/android/server/wm/InputManagerCallback;->getPointerDisplayId()I
-PLcom/android/server/wm/InputManagerCallback;->interceptKeyBeforeDispatching(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J
-PLcom/android/server/wm/InputManagerCallback;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
-PLcom/android/server/wm/InputManagerCallback;->interceptMotionBeforeQueueingNonInteractive(IJI)I
+HSPLcom/android/server/wm/InputManagerCallback;->getPointerLayer()I
+HPLcom/android/server/wm/InputManagerCallback;->interceptKeyBeforeDispatching(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J
+HSPLcom/android/server/wm/InputManagerCallback;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
+HPLcom/android/server/wm/InputManagerCallback;->interceptMotionBeforeQueueingNonInteractive(IJI)I
+PLcom/android/server/wm/InputManagerCallback;->isWindowAboveSystem(Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/InputManagerCallback;->notifyANR(Landroid/view/InputApplicationHandle;Landroid/os/IBinder;Ljava/lang/String;)J
 HSPLcom/android/server/wm/InputManagerCallback;->notifyConfigurationChanged()V
-PLcom/android/server/wm/InputManagerCallback;->notifyFocusChanged(Landroid/os/IBinder;Landroid/os/IBinder;)Z
+HPLcom/android/server/wm/InputManagerCallback;->notifyFocusChanged(Landroid/os/IBinder;Landroid/os/IBinder;)Z
+PLcom/android/server/wm/InputManagerCallback;->notifyInputChannelBroken(Landroid/os/IBinder;)V
+PLcom/android/server/wm/InputManagerCallback;->notifyLidSwitchChanged(JZ)V
+HPLcom/android/server/wm/InputManagerCallback;->onPointerDownOutsideFocus(Landroid/os/IBinder;)V
+PLcom/android/server/wm/InputManagerCallback;->preDumpIfLockTooSlow()V
 PLcom/android/server/wm/InputManagerCallback;->setEventDispatchingLw(Z)V
+PLcom/android/server/wm/InputManagerCallback;->thawInputDispatchingLw()V
 PLcom/android/server/wm/InputManagerCallback;->updateInputDispatchModeLw()V
 HSPLcom/android/server/wm/InputManagerCallback;->waitForInputDevicesReady(J)Z
 PLcom/android/server/wm/InputMonitor$EventReceiverInputConsumer;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/InputMonitor;Landroid/os/Looper;Ljava/lang/String;Landroid/view/InputEventReceiver$Factory;ILandroid/os/UserHandle;I)V
 PLcom/android/server/wm/InputMonitor$EventReceiverInputConsumer;->dismiss()V
 HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;-><init>(Lcom/android/server/wm/InputMonitor;)V
 HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;-><init>(Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor$1;)V
-HPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->accept(Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->accept(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->access$700(Lcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;Z)V
 HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->updateInputWindows(Z)V
 HSPLcom/android/server/wm/InputMonitor$UpdateInputWindows;-><init>(Lcom/android/server/wm/InputMonitor;)V
 HSPLcom/android/server/wm/InputMonitor$UpdateInputWindows;-><init>(Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor$1;)V
 HSPLcom/android/server/wm/InputMonitor$UpdateInputWindows;->run()V
 HSPLcom/android/server/wm/InputMonitor;-><init>(Lcom/android/server/wm/WindowManagerService;I)V
+HSPLcom/android/server/wm/InputMonitor;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/InputMonitor;->access$000(Lcom/android/server/wm/InputMonitor;)Lcom/android/server/wm/WindowManagerService;
 HSPLcom/android/server/wm/InputMonitor;->access$1000(Lcom/android/server/wm/InputMonitor;)Landroid/graphics/Rect;
 HSPLcom/android/server/wm/InputMonitor;->access$102(Lcom/android/server/wm/InputMonitor;Z)Z
@@ -21939,151 +36495,201 @@
 PLcom/android/server/wm/InputMonitor;->disposeInputConsumer(Lcom/android/server/wm/InputConsumerImpl;)Z
 HSPLcom/android/server/wm/InputMonitor;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/wm/InputMonitor;->getInputConsumer(Ljava/lang/String;)Lcom/android/server/wm/InputConsumerImpl;
+PLcom/android/server/wm/InputMonitor;->lambda$onDisplayRemoved$0$InputMonitor()V
 HSPLcom/android/server/wm/InputMonitor;->layoutInputConsumers(II)V
-PLcom/android/server/wm/InputMonitor;->pauseDispatchingLw(Lcom/android/server/wm/WindowToken;)V
-HPLcom/android/server/wm/InputMonitor;->populateInputWindowHandle(Landroid/view/InputWindowHandle;Lcom/android/server/wm/WindowState;IIZZZ)V
+PLcom/android/server/wm/InputMonitor;->onDisplayRemoved()V
+HPLcom/android/server/wm/InputMonitor;->pauseDispatchingLw(Lcom/android/server/wm/WindowToken;)V
+HSPLcom/android/server/wm/InputMonitor;->populateInputWindowHandle(Landroid/view/InputWindowHandle;Lcom/android/server/wm/WindowState;IIZZZ)V
 HSPLcom/android/server/wm/InputMonitor;->resetInputConsumers(Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/InputMonitor;->resumeDispatchingLw(Lcom/android/server/wm/WindowToken;)V
+HPLcom/android/server/wm/InputMonitor;->resumeDispatchingLw(Lcom/android/server/wm/WindowToken;)V
 HSPLcom/android/server/wm/InputMonitor;->scheduleUpdateInputWindows()V
-PLcom/android/server/wm/InputMonitor;->setFocusedAppLw(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/InputMonitor;->setInputFocusLw(Lcom/android/server/wm/WindowState;Z)V
+HSPLcom/android/server/wm/InputMonitor;->setFocusedAppLw(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/InputMonitor;->setInputFocusLw(Lcom/android/server/wm/WindowState;Z)V
 HSPLcom/android/server/wm/InputMonitor;->setUpdateInputWindowsNeededLw()V
 HSPLcom/android/server/wm/InputMonitor;->updateInputWindowsLw(Z)V
 HSPLcom/android/server/wm/InsetsPolicy$BarWindow;-><init>(Lcom/android/server/wm/InsetsPolicy;I)V
+PLcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener$InsetsPolicyAnimationControlCallbacks;-><init>(Lcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener;Lcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener;)V
+PLcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener$InsetsPolicyAnimationControlCallbacks;->access$200(Lcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener$InsetsPolicyAnimationControlCallbacks;ILandroid/util/SparseArray;Z)V
+PLcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener$InsetsPolicyAnimationControlCallbacks;->controlAnimationUnchecked(ILandroid/util/SparseArray;Z)V
+PLcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener;-><init>(Lcom/android/server/wm/InsetsPolicy;ZLjava/lang/Runnable;)V
 HSPLcom/android/server/wm/InsetsPolicy$TransientControlTarget;-><init>(Lcom/android/server/wm/InsetsPolicy;)V
 HSPLcom/android/server/wm/InsetsPolicy$TransientControlTarget;-><init>(Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy$1;)V
 HSPLcom/android/server/wm/InsetsPolicy;-><init>(Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/DisplayContent;)V
-HPLcom/android/server/wm/InsetsPolicy;->areSystemBarsForciblyVisible()Z
-PLcom/android/server/wm/InsetsPolicy;->getFakeNavControlTarget(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/InsetsControlTarget;
-PLcom/android/server/wm/InsetsPolicy;->getFakeStatusControlTarget(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/InsetsControlTarget;
-HPLcom/android/server/wm/InsetsPolicy;->getInsetsForDispatch(Lcom/android/server/wm/WindowState;)Landroid/view/InsetsState;
-PLcom/android/server/wm/InsetsPolicy;->getNavControlTarget(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/InsetsControlTarget;
-PLcom/android/server/wm/InsetsPolicy;->getStatusControlTarget(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/InsetsControlTarget;
+HSPLcom/android/server/wm/InsetsPolicy;->areSystemBarsForciblyVisible()Z
+HPLcom/android/server/wm/InsetsPolicy;->checkAbortTransient(Lcom/android/server/wm/WindowState;Landroid/view/InsetsState;)V
+PLcom/android/server/wm/InsetsPolicy;->controlAnimationUnchecked(ILandroid/util/SparseArray;ZLjava/lang/Runnable;)V
+HSPLcom/android/server/wm/InsetsPolicy;->getFakeNavControlTarget(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/InsetsControlTarget;
+HSPLcom/android/server/wm/InsetsPolicy;->getFakeStatusControlTarget(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/InsetsControlTarget;
+HSPLcom/android/server/wm/InsetsPolicy;->getInsetsForDispatch(Lcom/android/server/wm/WindowState;)Landroid/view/InsetsState;
+HSPLcom/android/server/wm/InsetsPolicy;->getNavControlTarget(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/InsetsControlTarget;
+HSPLcom/android/server/wm/InsetsPolicy;->getStatusControlTarget(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/InsetsControlTarget;
 PLcom/android/server/wm/InsetsPolicy;->hideTransient()V
 HPLcom/android/server/wm/InsetsPolicy;->isHidden(I)Z
-PLcom/android/server/wm/InsetsPolicy;->isNavBarForciblyVisible()Z
-PLcom/android/server/wm/InsetsPolicy;->isStatusBarForciblyVisible()Z
-PLcom/android/server/wm/InsetsPolicy;->isTransient(I)Z
+HSPLcom/android/server/wm/InsetsPolicy;->isKeyguardOrStatusBarForciblyVisible()Z
+HSPLcom/android/server/wm/InsetsPolicy;->isNavBarForciblyVisible()Z
+HSPLcom/android/server/wm/InsetsPolicy;->isStatusBarForciblyVisible()Z
+HPLcom/android/server/wm/InsetsPolicy;->isTransient(I)Z
+HPLcom/android/server/wm/InsetsPolicy;->onInsetsModified(Lcom/android/server/wm/WindowState;Landroid/view/InsetsState;)V
 PLcom/android/server/wm/InsetsPolicy;->showTransient(Landroid/util/IntArray;)V
-HPLcom/android/server/wm/InsetsPolicy;->updateBarControlTarget(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/InsetsPolicy;->startAnimation(Landroid/util/IntArray;ZLjava/lang/Runnable;)V
+HSPLcom/android/server/wm/InsetsPolicy;->updateBarControlTarget(Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/InsetsSourceProvider;-><init>(Landroid/view/InsetsSource;Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/InsetsSourceProvider;->getSource()Landroid/view/InsetsSource;
-PLcom/android/server/wm/InsetsSourceProvider;->hasWindow()Z
-PLcom/android/server/wm/InsetsSourceProvider;->isControllable()Z
+PLcom/android/server/wm/InsetsSourceProvider;->getControl(Lcom/android/server/wm/InsetsControlTarget;)Landroid/view/InsetsSourceControl;
+PLcom/android/server/wm/InsetsSourceProvider;->getControlTarget()Lcom/android/server/wm/InsetsControlTarget;
+HPLcom/android/server/wm/InsetsSourceProvider;->getSource()Landroid/view/InsetsSource;
+HPLcom/android/server/wm/InsetsSourceProvider;->hasWindow()Z
+HPLcom/android/server/wm/InsetsSourceProvider;->isControllable()Z
 HSPLcom/android/server/wm/InsetsSourceProvider;->onPostLayout()V
-PLcom/android/server/wm/InsetsSourceProvider;->setServerVisible(Z)V
-PLcom/android/server/wm/InsetsSourceProvider;->setWindow(Lcom/android/server/wm/WindowState;Lcom/android/internal/util/function/TriConsumer;)V
+HPLcom/android/server/wm/InsetsSourceProvider;->setServerVisible(Z)V
+HPLcom/android/server/wm/InsetsSourceProvider;->setWindow(Lcom/android/server/wm/WindowState;Lcom/android/internal/util/function/TriConsumer;)V
+HPLcom/android/server/wm/InsetsSourceProvider;->setWindow(Lcom/android/server/wm/WindowState;Lcom/android/internal/util/function/TriConsumer;Lcom/android/internal/util/function/TriConsumer;)V
 HPLcom/android/server/wm/InsetsSourceProvider;->updateSourceFrame()V
-PLcom/android/server/wm/InsetsSourceProvider;->updateVisibility()V
+HPLcom/android/server/wm/InsetsSourceProvider;->updateVisibility()V
 HSPLcom/android/server/wm/InsetsStateController;-><init>(Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/InsetsStateController;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/wm/InsetsStateController;->getImeSourceProvider()Lcom/android/server/wm/ImeInsetsSourceProvider;
-HPLcom/android/server/wm/InsetsStateController;->getInsetsForDispatch(Lcom/android/server/wm/WindowState;)Landroid/view/InsetsState;
+HSPLcom/android/server/wm/InsetsStateController;->getInsetsForDispatch(Lcom/android/server/wm/WindowState;)Landroid/view/InsetsState;
 HSPLcom/android/server/wm/InsetsStateController;->getSourceProvider(I)Lcom/android/server/wm/InsetsSourceProvider;
+PLcom/android/server/wm/InsetsStateController;->isFakeTarget(ILcom/android/server/wm/InsetsControlTarget;)Z
 HSPLcom/android/server/wm/InsetsStateController;->lambda$getSourceProvider$1$InsetsStateController(Ljava/lang/Integer;)Lcom/android/server/wm/InsetsSourceProvider;
-PLcom/android/server/wm/InsetsStateController;->lambda$getSourceProvider$2$InsetsStateController(Ljava/lang/Integer;)Lcom/android/server/wm/InsetsSourceProvider;
-PLcom/android/server/wm/InsetsStateController;->lambda$new$0(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/InsetsStateController;->lambda$getSourceProvider$2$InsetsStateController(Ljava/lang/Integer;)Lcom/android/server/wm/InsetsSourceProvider;
+PLcom/android/server/wm/InsetsStateController;->lambda$getSourceProvider$3$InsetsStateController(Ljava/lang/Integer;)Lcom/android/server/wm/InsetsSourceProvider;
+HPLcom/android/server/wm/InsetsStateController;->lambda$new$0(Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/InsetsStateController;->notifyInsetsChanged()V
-PLcom/android/server/wm/InsetsStateController;->notifyPendingInsetsControlChanged()V
-PLcom/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
-HPLcom/android/server/wm/InsetsStateController;->onControlChanged(ILcom/android/server/wm/InsetsControlTarget;)V
-HPLcom/android/server/wm/InsetsStateController;->onControlFakeTargetChanged(ILcom/android/server/wm/InsetsControlTarget;)V
-PLcom/android/server/wm/InsetsStateController;->onImeTargetChanged(Lcom/android/server/wm/InsetsControlTarget;)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
+HSPLcom/android/server/wm/InsetsStateController;->onControlChanged(ILcom/android/server/wm/InsetsControlTarget;)V
+HSPLcom/android/server/wm/InsetsStateController;->onControlFakeTargetChanged(ILcom/android/server/wm/InsetsControlTarget;)V
+HPLcom/android/server/wm/InsetsStateController;->onImeControlTargetChanged(Lcom/android/server/wm/InsetsControlTarget;)V
+HPLcom/android/server/wm/InsetsStateController;->onImeTargetChanged(Lcom/android/server/wm/InsetsControlTarget;)V
+HPLcom/android/server/wm/InsetsStateController;->onInsetsModified(Lcom/android/server/wm/InsetsControlTarget;Landroid/view/InsetsState;)V
 HSPLcom/android/server/wm/InsetsStateController;->onPostLayout()V
-PLcom/android/server/wm/InsetsStateController;->peekSourceProvider(I)Lcom/android/server/wm/InsetsSourceProvider;
+HPLcom/android/server/wm/InsetsStateController;->peekSourceProvider(I)Lcom/android/server/wm/InsetsSourceProvider;
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;I)V
+PLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->access$000(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->access$100(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
-PLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->access$200(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
+HPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->access$200(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
 PLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->access$300(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Lcom/android/server/wm/ActivityTaskManagerInternal$SleepToken;
 PLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->acquiredSleepToken()V
 PLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->dumpStatus(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->getStackForControllingOccluding(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/ActivityStack;
+PLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->onRemoved()V
 PLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->releaseSleepToken()V
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->visibilitiesUpdated(Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/KeyguardController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityStackSupervisor;)V
+PLcom/android/server/wm/KeyguardController;->access$400(Lcom/android/server/wm/KeyguardController;I)V
+PLcom/android/server/wm/KeyguardController;->access$500(Lcom/android/server/wm/KeyguardController;)Lcom/android/server/wm/ActivityTaskManagerService;
+PLcom/android/server/wm/KeyguardController;->access$600(Lcom/android/server/wm/KeyguardController;)Lcom/android/server/wm/WindowManagerService;
 HSPLcom/android/server/wm/KeyguardController;->beginActivityVisibilityUpdate()V
+PLcom/android/server/wm/KeyguardController;->canDismissKeyguard()Z
 HPLcom/android/server/wm/KeyguardController;->canShowActivityWhileKeyguardShowing(Lcom/android/server/wm/ActivityRecord;Z)Z
+PLcom/android/server/wm/KeyguardController;->canShowWhileOccluded(ZZ)Z
 PLcom/android/server/wm/KeyguardController;->convertTransitFlags(I)I
-PLcom/android/server/wm/KeyguardController;->dismissDockedStackIfNeeded()V
+HPLcom/android/server/wm/KeyguardController;->dismissDockedStackIfNeeded()V
+PLcom/android/server/wm/KeyguardController;->dismissKeyguard(Landroid/os/IBinder;Lcom/android/internal/policy/IKeyguardDismissCallback;Ljava/lang/CharSequence;)V
 HSPLcom/android/server/wm/KeyguardController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/KeyguardController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/wm/KeyguardController;->dumpDisplayStates(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/wm/KeyguardController;->endActivityVisibilityUpdate()V
 HSPLcom/android/server/wm/KeyguardController;->getDisplay(I)Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;
-PLcom/android/server/wm/KeyguardController;->handleOccludedChanged(I)V
-PLcom/android/server/wm/KeyguardController;->isDisplayOccluded(I)Z
+PLcom/android/server/wm/KeyguardController;->handleDismissKeyguard()V
+HPLcom/android/server/wm/KeyguardController;->handleOccludedChanged(I)V
+HPLcom/android/server/wm/KeyguardController;->isDisplayOccluded(I)Z
 HSPLcom/android/server/wm/KeyguardController;->isKeyguardGoingAway()Z
-PLcom/android/server/wm/KeyguardController;->isKeyguardLocked()Z
-PLcom/android/server/wm/KeyguardController;->isKeyguardOrAodShowing(I)Z
+HSPLcom/android/server/wm/KeyguardController;->isKeyguardLocked()Z
+HSPLcom/android/server/wm/KeyguardController;->isKeyguardOrAodShowing(I)Z
 PLcom/android/server/wm/KeyguardController;->isKeyguardShowing(I)Z
-PLcom/android/server/wm/KeyguardController;->isKeyguardUnoccludedOrAodShowing(I)Z
-PLcom/android/server/wm/KeyguardController;->keyguardGoingAway(I)V
+HPLcom/android/server/wm/KeyguardController;->isKeyguardUnoccludedOrAodShowing(I)Z
+HPLcom/android/server/wm/KeyguardController;->keyguardGoingAway(I)V
+PLcom/android/server/wm/KeyguardController;->onDisplayRemoved(I)V
 PLcom/android/server/wm/KeyguardController;->resolveOccludeTransit()I
 PLcom/android/server/wm/KeyguardController;->setKeyguardGoingAway(Z)V
-PLcom/android/server/wm/KeyguardController;->setKeyguardShown(ZZ)V
+HPLcom/android/server/wm/KeyguardController;->setKeyguardShown(ZZ)V
 HSPLcom/android/server/wm/KeyguardController;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
-PLcom/android/server/wm/KeyguardController;->updateKeyguardSleepToken()V
+HPLcom/android/server/wm/KeyguardController;->updateKeyguardSleepToken()V
 HPLcom/android/server/wm/KeyguardController;->updateKeyguardSleepToken(I)V
 HSPLcom/android/server/wm/KeyguardController;->visibilitiesUpdated()V
 PLcom/android/server/wm/KeyguardController;->writeDisplayStatesToProto(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/wm/KeyguardDisableHandler$1;-><init>(Lcom/android/server/wm/KeyguardDisableHandler;)V
+PLcom/android/server/wm/KeyguardDisableHandler$1;->acquired(I)V
+PLcom/android/server/wm/KeyguardDisableHandler$1;->released(I)V
 HSPLcom/android/server/wm/KeyguardDisableHandler$2;-><init>(Lcom/android/server/policy/WindowManagerPolicy;Landroid/os/UserManagerInternal;)V
+HSPLcom/android/server/wm/KeyguardDisableHandler$2;->dpmRequiresPassword(I)Z
+HSPLcom/android/server/wm/KeyguardDisableHandler$2;->enableKeyguard(Z)V
+PLcom/android/server/wm/KeyguardDisableHandler$2;->getProfileParentId(I)I
+HSPLcom/android/server/wm/KeyguardDisableHandler$2;->isKeyguardSecure(I)Z
 HSPLcom/android/server/wm/KeyguardDisableHandler;-><init>(Lcom/android/server/wm/KeyguardDisableHandler$Injector;Landroid/os/Handler;)V
 HSPLcom/android/server/wm/KeyguardDisableHandler;->create(Landroid/content/Context;Lcom/android/server/policy/WindowManagerPolicy;Landroid/os/Handler;)Lcom/android/server/wm/KeyguardDisableHandler;
-PLcom/android/server/wm/KeyguardDisableHandler;->shouldKeyguardBeEnabled(I)Z
-HPLcom/android/server/wm/KeyguardDisableHandler;->updateKeyguardEnabled(I)V
+PLcom/android/server/wm/KeyguardDisableHandler;->disableKeyguard(Landroid/os/IBinder;Ljava/lang/String;II)V
+PLcom/android/server/wm/KeyguardDisableHandler;->reenableKeyguard(Landroid/os/IBinder;II)V
+HSPLcom/android/server/wm/KeyguardDisableHandler;->shouldKeyguardBeEnabled(I)Z
+HSPLcom/android/server/wm/KeyguardDisableHandler;->updateKeyguardEnabled(I)V
+HSPLcom/android/server/wm/KeyguardDisableHandler;->updateKeyguardEnabledLocked(I)V
+PLcom/android/server/wm/KeyguardDisableHandler;->watcherForCallingUid(Landroid/os/IBinder;I)Lcom/android/server/utils/UserTokenWatcher;
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl;-><init>(Landroid/os/Looper;)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnActivityLaunchCancelled([B)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnActivityLaunchFinished([BJ)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnActivityLaunched([BI)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnIntentStarted(Landroid/content/Intent;J)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnReportFullyDrawn([BJ)V
+HPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnActivityLaunchCancelled([B)V
+HPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnActivityLaunchFinished([BJ)V
+HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnActivityLaunched([BI)V
+HPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnIntentFailed()V
+HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnIntentStarted(Landroid/content/Intent;J)V
+HPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnReportFullyDrawn([BJ)V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleRegisterLaunchObserver(Lcom/android/server/wm/ActivityMetricsLaunchObserver;)V
 PLcom/android/server/wm/LaunchObserverRegistryImpl;->lambda$FhvLqBbd_XMsJK45WV5Mlt8JSYM(Lcom/android/server/wm/LaunchObserverRegistryImpl;[BJ)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->lambda$QcawcFcJtEX4EhYptq_Vb4j368Y(Lcom/android/server/wm/LaunchObserverRegistryImpl;[BJ)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->lambda$UGY1OclnLIQLMEL9B55qjERFf4o(Lcom/android/server/wm/LaunchObserverRegistryImpl;[BI)V
+PLcom/android/server/wm/LaunchObserverRegistryImpl;->lambda$KukKmVpn5W_1xSV6Dnp8wW2H2Ks(Lcom/android/server/wm/LaunchObserverRegistryImpl;)V
+HPLcom/android/server/wm/LaunchObserverRegistryImpl;->lambda$QcawcFcJtEX4EhYptq_Vb4j368Y(Lcom/android/server/wm/LaunchObserverRegistryImpl;[BJ)V
+HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->lambda$UGY1OclnLIQLMEL9B55qjERFf4o(Lcom/android/server/wm/LaunchObserverRegistryImpl;[BI)V
 PLcom/android/server/wm/LaunchObserverRegistryImpl;->lambda$lAGPwfsXJvBWsyG2rbEfo3sTv34(Lcom/android/server/wm/LaunchObserverRegistryImpl;[B)V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->lambda$pWUDt4Ot3BWLJOTAhXMkkhHUhpc(Lcom/android/server/wm/LaunchObserverRegistryImpl;Lcom/android/server/wm/ActivityMetricsLaunchObserver;)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->lambda$veRn_GhgLZLlOHOJ0ZYT6KcfYqo(Lcom/android/server/wm/LaunchObserverRegistryImpl;Landroid/content/Intent;J)V
+HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->lambda$veRn_GhgLZLlOHOJ0ZYT6KcfYqo(Lcom/android/server/wm/LaunchObserverRegistryImpl;Landroid/content/Intent;J)V
 PLcom/android/server/wm/LaunchObserverRegistryImpl;->onActivityLaunchCancelled([B)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->onActivityLaunchFinished([BJ)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->onActivityLaunched([BI)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->onIntentFailed()V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->onIntentStarted(Landroid/content/Intent;J)V
+HPLcom/android/server/wm/LaunchObserverRegistryImpl;->onActivityLaunchFinished([BJ)V
+HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->onActivityLaunched([BI)V
+HPLcom/android/server/wm/LaunchObserverRegistryImpl;->onIntentFailed()V
+HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->onIntentStarted(Landroid/content/Intent;J)V
 PLcom/android/server/wm/LaunchObserverRegistryImpl;->onReportFullyDrawn([BJ)V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->registerLaunchObserver(Lcom/android/server/wm/ActivityMetricsLaunchObserver;)V
 HSPLcom/android/server/wm/LaunchParamsController$LaunchParams;-><init>()V
-PLcom/android/server/wm/LaunchParamsController$LaunchParams;->hasPreferredDisplay()Z
-PLcom/android/server/wm/LaunchParamsController$LaunchParams;->hasWindowingMode()Z
-PLcom/android/server/wm/LaunchParamsController$LaunchParams;->isEmpty()Z
-PLcom/android/server/wm/LaunchParamsController$LaunchParams;->reset()V
-PLcom/android/server/wm/LaunchParamsController$LaunchParams;->set(Lcom/android/server/wm/LaunchParamsController$LaunchParams;)V
+HSPLcom/android/server/wm/LaunchParamsController$LaunchParams;->hasPreferredDisplay()Z
+HSPLcom/android/server/wm/LaunchParamsController$LaunchParams;->hasWindowingMode()Z
+HSPLcom/android/server/wm/LaunchParamsController$LaunchParams;->isEmpty()Z
+HSPLcom/android/server/wm/LaunchParamsController$LaunchParams;->reset()V
+HSPLcom/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
-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;ILcom/android/server/wm/LaunchParamsController$LaunchParams;)V
-HPLcom/android/server/wm/LaunchParamsController;->layoutTask(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
+HSPLcom/android/server/wm/LaunchParamsController;->calculate(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;ILcom/android/server/wm/LaunchParamsController$LaunchParams;)V
+HSPLcom/android/server/wm/LaunchParamsController;->layoutTask(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
 HSPLcom/android/server/wm/LaunchParamsController;->registerDefaultModifiers(Lcom/android/server/wm/ActivityStackSupervisor;)V
 HSPLcom/android/server/wm/LaunchParamsController;->registerModifier(Lcom/android/server/wm/LaunchParamsController$LaunchParamsModifier;)V
+PLcom/android/server/wm/LaunchParamsPersister$CleanUpComponentQueueItem;-><init>(Lcom/android/server/wm/LaunchParamsPersister;Ljava/util/List;)V
+PLcom/android/server/wm/LaunchParamsPersister$CleanUpComponentQueueItem;-><init>(Lcom/android/server/wm/LaunchParamsPersister;Ljava/util/List;Lcom/android/server/wm/LaunchParamsPersister$1;)V
+PLcom/android/server/wm/LaunchParamsPersister$CleanUpComponentQueueItem;->process()V
 HSPLcom/android/server/wm/LaunchParamsPersister$PackageListObserver;-><init>(Lcom/android/server/wm/LaunchParamsPersister;)V
 HSPLcom/android/server/wm/LaunchParamsPersister$PackageListObserver;-><init>(Lcom/android/server/wm/LaunchParamsPersister;Lcom/android/server/wm/LaunchParamsPersister$1;)V
 PLcom/android/server/wm/LaunchParamsPersister$PackageListObserver;->onPackageAdded(Ljava/lang/String;I)V
+PLcom/android/server/wm/LaunchParamsPersister$PackageListObserver;->onPackageRemoved(Ljava/lang/String;I)V
+HPLcom/android/server/wm/LaunchParamsPersister$PersistableLaunchParams;-><init>(Lcom/android/server/wm/LaunchParamsPersister;)V
+PLcom/android/server/wm/LaunchParamsPersister$PersistableLaunchParams;-><init>(Lcom/android/server/wm/LaunchParamsPersister;Lcom/android/server/wm/LaunchParamsPersister$1;)V
+HPLcom/android/server/wm/LaunchParamsPersister$PersistableLaunchParams;->restoreFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/wm/LaunchParamsPersister;-><init>(Lcom/android/server/wm/PersisterQueue;Lcom/android/server/wm/ActivityStackSupervisor;)V
 HSPLcom/android/server/wm/LaunchParamsPersister;-><init>(Lcom/android/server/wm/PersisterQueue;Lcom/android/server/wm/ActivityStackSupervisor;Ljava/util/function/IntFunction;)V
 PLcom/android/server/wm/LaunchParamsPersister;->getLaunchParamFolder(I)Ljava/io/File;
-HPLcom/android/server/wm/LaunchParamsPersister;->getLaunchParams(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)V
-PLcom/android/server/wm/LaunchParamsPersister;->loadLaunchParams(I)V
+HSPLcom/android/server/wm/LaunchParamsPersister;->getLaunchParams(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)V
+PLcom/android/server/wm/LaunchParamsPersister;->getParamFile(Ljava/io/File;Landroid/content/ComponentName;)Ljava/io/File;
+HPLcom/android/server/wm/LaunchParamsPersister;->loadLaunchParams(I)V
+PLcom/android/server/wm/LaunchParamsPersister;->onCleanupUser(I)V
 HSPLcom/android/server/wm/LaunchParamsPersister;->onSystemReady()V
 PLcom/android/server/wm/LaunchParamsPersister;->onUnlockUser(I)V
-PLcom/android/server/wm/Letterbox$InputInterceptor$SimpleInputReceiver;-><init>(Landroid/view/InputChannel;)V
-PLcom/android/server/wm/Letterbox$InputInterceptor;-><init>(Ljava/lang/String;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/LaunchParamsPersister;->removeRecordForPackage(Ljava/lang/String;)V
+HPLcom/android/server/wm/Letterbox$InputInterceptor$SimpleInputReceiver;-><init>(Landroid/view/InputChannel;)V
+HPLcom/android/server/wm/Letterbox$InputInterceptor;-><init>(Ljava/lang/String;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/Letterbox$InputInterceptor;->dispose()V
-PLcom/android/server/wm/Letterbox$InputInterceptor;->updateTouchableRegion(Landroid/graphics/Rect;)V
-PLcom/android/server/wm/Letterbox$LetterboxSurface;-><init>(Lcom/android/server/wm/Letterbox;Ljava/lang/String;)V
-PLcom/android/server/wm/Letterbox$LetterboxSurface;->applySurfaceChanges(Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/Letterbox$LetterboxSurface;->attachInput(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/Letterbox$LetterboxSurface;->createSurface(Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/Letterbox$LetterboxSurface;->getHeight()I
-PLcom/android/server/wm/Letterbox$LetterboxSurface;->getWidth()I
+HPLcom/android/server/wm/Letterbox$InputInterceptor;->updateTouchableRegion(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/Letterbox$LetterboxSurface;-><init>(Lcom/android/server/wm/Letterbox;Ljava/lang/String;)V
+HPLcom/android/server/wm/Letterbox$LetterboxSurface;->applySurfaceChanges(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/Letterbox$LetterboxSurface;->attachInput(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/Letterbox$LetterboxSurface;->createSurface(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/Letterbox$LetterboxSurface;->getHeight()I
+HPLcom/android/server/wm/Letterbox$LetterboxSurface;->getWidth()I
 HPLcom/android/server/wm/Letterbox$LetterboxSurface;->isOverlappingWith(Landroid/graphics/Rect;)Z
 HPLcom/android/server/wm/Letterbox$LetterboxSurface;->layout(IIIILandroid/graphics/Point;)V
 HPLcom/android/server/wm/Letterbox$LetterboxSurface;->needsApplySurfaceChanges()Z
@@ -22092,7 +36698,7 @@
 PLcom/android/server/wm/Letterbox;-><init>(Ljava/util/function/Supplier;Ljava/util/function/Supplier;)V
 PLcom/android/server/wm/Letterbox;->access$100(Lcom/android/server/wm/Letterbox;)Ljava/util/function/Supplier;
 PLcom/android/server/wm/Letterbox;->access$200(Lcom/android/server/wm/Letterbox;)Ljava/util/function/Supplier;
-PLcom/android/server/wm/Letterbox;->applySurfaceChanges(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/Letterbox;->applySurfaceChanges(Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/Letterbox;->attachInput(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/Letterbox;->destroy()V
 HPLcom/android/server/wm/Letterbox;->getInnerFrame()Landroid/graphics/Rect;
@@ -22101,105 +36707,155 @@
 HPLcom/android/server/wm/Letterbox;->isOverlappingWith(Landroid/graphics/Rect;)Z
 HPLcom/android/server/wm/Letterbox;->layout(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Point;)V
 HPLcom/android/server/wm/Letterbox;->needsApplySurfaceChanges()Z
-PLcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;->canSkipFirstFrame()Z
-PLcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;->canSkipFirstFrame()Z
+HPLcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;->needsEarlyWakeup()Z
 HPLcom/android/server/wm/LocalAnimationAdapter;-><init>(Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;Lcom/android/server/wm/SurfaceAnimationRunner;)V
-PLcom/android/server/wm/LocalAnimationAdapter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/server/wm/LocalAnimationAdapter;->getDurationHint()J
-PLcom/android/server/wm/LocalAnimationAdapter;->getShowWallpaper()Z
+PLcom/android/server/wm/LocalAnimationAdapter;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/LocalAnimationAdapter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/wm/LocalAnimationAdapter;->getDurationHint()J
+HPLcom/android/server/wm/LocalAnimationAdapter;->getShowWallpaper()Z
 PLcom/android/server/wm/LocalAnimationAdapter;->getStatusBarTransitionsStartTime()J
-PLcom/android/server/wm/LocalAnimationAdapter;->lambda$startAnimation$0$LocalAnimationAdapter(Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+HPLcom/android/server/wm/LocalAnimationAdapter;->lambda$startAnimation$0$LocalAnimationAdapter(Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+HPLcom/android/server/wm/LocalAnimationAdapter;->lambda$startAnimation$0$LocalAnimationAdapter(Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;I)V
 PLcom/android/server/wm/LocalAnimationAdapter;->onAnimationCancelled(Landroid/view/SurfaceControl;)V
-PLcom/android/server/wm/LocalAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+PLcom/android/server/wm/LocalAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;ILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+HPLcom/android/server/wm/LocalAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
 HSPLcom/android/server/wm/LockTaskController$LockTaskToken;-><init>()V
 HSPLcom/android/server/wm/LockTaskController$LockTaskToken;-><init>(Lcom/android/server/wm/LockTaskController$1;)V
 HSPLcom/android/server/wm/LockTaskController;-><clinit>()V
 HSPLcom/android/server/wm/LockTaskController;-><init>(Landroid/content/Context;Lcom/android/server/wm/ActivityStackSupervisor;Landroid/os/Handler;)V
-PLcom/android/server/wm/LockTaskController;->activityBlockedFromFinish(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/LockTaskController;->clearLockedTask(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/LockTaskController;->activityBlockedFromFinish(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/LockTaskController;->canMoveTaskToBack(Lcom/android/server/wm/Task;)Z
+HPLcom/android/server/wm/LockTaskController;->clearLockedTask(Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/LockTaskController;->clearLockedTasks(Ljava/lang/String;)V
 HSPLcom/android/server/wm/LockTaskController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/wm/LockTaskController;->getDevicePolicyManager()Landroid/app/admin/IDevicePolicyManager;
+PLcom/android/server/wm/LockTaskController;->getLockPatternUtils()Lcom/android/internal/widget/LockPatternUtils;
 HSPLcom/android/server/wm/LockTaskController;->getLockTaskFeaturesForUser(I)I
-PLcom/android/server/wm/LockTaskController;->getLockTaskModeState()I
-PLcom/android/server/wm/LockTaskController;->getRootTask()Lcom/android/server/wm/Task;
-PLcom/android/server/wm/LockTaskController;->isKeyguardAllowed(I)Z
-PLcom/android/server/wm/LockTaskController;->isLockTaskModeViolation(Lcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/LockTaskController;->isLockTaskModeViolation(Lcom/android/server/wm/Task;Z)Z
-HPLcom/android/server/wm/LockTaskController;->isLockTaskModeViolationInternal(Lcom/android/server/wm/Task;Z)Z
-PLcom/android/server/wm/LockTaskController;->isPackageWhitelisted(ILjava/lang/String;)Z
+HSPLcom/android/server/wm/LockTaskController;->getLockTaskModeState()I
+HPLcom/android/server/wm/LockTaskController;->getRootTask()Lcom/android/server/wm/Task;
+PLcom/android/server/wm/LockTaskController;->getStatusBarService()Lcom/android/internal/statusbar/IStatusBarService;
+HSPLcom/android/server/wm/LockTaskController;->isActivityAllowed(ILjava/lang/String;I)Z
+HSPLcom/android/server/wm/LockTaskController;->isKeyguardAllowed(I)Z
+HSPLcom/android/server/wm/LockTaskController;->isLockTaskModeViolation(Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/LockTaskController;->isLockTaskModeViolation(Lcom/android/server/wm/Task;Z)Z
+HSPLcom/android/server/wm/LockTaskController;->isLockTaskModeViolationInternal(Lcom/android/server/wm/Task;Z)Z
+HSPLcom/android/server/wm/LockTaskController;->isPackageWhitelisted(ILjava/lang/String;)Z
+PLcom/android/server/wm/LockTaskController;->isRecentsAllowed(I)Z
 PLcom/android/server/wm/LockTaskController;->isRootTask(Lcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/LockTaskController;->isTaskLocked(Lcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/LockTaskController;->isTaskWhitelisted(Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/LockTaskController;->isTaskLocked(Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/LockTaskController;->isTaskWhitelisted(Lcom/android/server/wm/Task;)Z
+PLcom/android/server/wm/LockTaskController;->lambda$removeLockedTask$0$LockTaskController(Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/LockTaskController;->lambda$setLockTaskMode$1$LockTaskController(Landroid/content/Intent;Lcom/android/server/wm/Task;I)V
+PLcom/android/server/wm/LockTaskController;->lockKeyguardIfNeeded()V
 HSPLcom/android/server/wm/LockTaskController;->lockTaskModeToString()Ljava/lang/String;
+PLcom/android/server/wm/LockTaskController;->performStartLockTask(Ljava/lang/String;II)V
+PLcom/android/server/wm/LockTaskController;->performStopLockTask(I)V
+PLcom/android/server/wm/LockTaskController;->removeLockedTask(Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/LockTaskController;->setKeyguardState(II)V
+PLcom/android/server/wm/LockTaskController;->setLockTaskMode(Lcom/android/server/wm/Task;ILjava/lang/String;Z)V
+PLcom/android/server/wm/LockTaskController;->setStatusBarState(II)V
 HSPLcom/android/server/wm/LockTaskController;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/LockTaskController;->shouldLockKeyguard()Z
+PLcom/android/server/wm/LockTaskController;->showLockTaskToast()V
+PLcom/android/server/wm/LockTaskController;->startLockTaskMode(Lcom/android/server/wm/Task;ZI)V
+PLcom/android/server/wm/LockTaskController;->stopLockTaskMode(Lcom/android/server/wm/Task;ZI)V
 HSPLcom/android/server/wm/LockTaskController;->updateLockTaskFeatures(II)V
 HSPLcom/android/server/wm/LockTaskController;->updateLockTaskPackages(I[Ljava/lang/String;)V
 HSPLcom/android/server/wm/MirrorActiveUids;-><init>()V
-PLcom/android/server/wm/MirrorActiveUids;->getUidState(I)I
+HPLcom/android/server/wm/MirrorActiveUids;->getUidState(I)I
 HSPLcom/android/server/wm/MirrorActiveUids;->onUidActive(II)V
 HSPLcom/android/server/wm/MirrorActiveUids;->onUidInactive(I)V
 HSPLcom/android/server/wm/MirrorActiveUids;->onUidProcStateChanged(II)V
-PLcom/android/server/wm/PendingRemoteAnimationRegistry$Entry;-><init>(Lcom/android/server/wm/PendingRemoteAnimationRegistry;Ljava/lang/String;Landroid/view/RemoteAnimationAdapter;)V
+HPLcom/android/server/wm/PendingRemoteAnimationRegistry$Entry;-><init>(Lcom/android/server/wm/PendingRemoteAnimationRegistry;Ljava/lang/String;Landroid/view/RemoteAnimationAdapter;)V
 PLcom/android/server/wm/PendingRemoteAnimationRegistry$Entry;->lambda$new$0$PendingRemoteAnimationRegistry$Entry(Ljava/lang/String;)V
 HSPLcom/android/server/wm/PendingRemoteAnimationRegistry;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/Handler;)V
+HSPLcom/android/server/wm/PendingRemoteAnimationRegistry;-><init>(Lcom/android/server/wm/WindowManagerGlobalLock;Landroid/os/Handler;)V
 PLcom/android/server/wm/PendingRemoteAnimationRegistry;->access$000(Lcom/android/server/wm/PendingRemoteAnimationRegistry;)Landroid/os/Handler;
-HPLcom/android/server/wm/PendingRemoteAnimationRegistry;->overrideOptionsIfNeeded(Ljava/lang/String;Landroid/app/ActivityOptions;)Landroid/app/ActivityOptions;
+PLcom/android/server/wm/PendingRemoteAnimationRegistry;->access$100(Lcom/android/server/wm/PendingRemoteAnimationRegistry;)Lcom/android/server/wm/WindowManagerGlobalLock;
+PLcom/android/server/wm/PendingRemoteAnimationRegistry;->access$200(Lcom/android/server/wm/PendingRemoteAnimationRegistry;)Landroid/util/ArrayMap;
+PLcom/android/server/wm/PendingRemoteAnimationRegistry;->addPendingAnimation(Ljava/lang/String;Landroid/view/RemoteAnimationAdapter;)V
+HSPLcom/android/server/wm/PendingRemoteAnimationRegistry;->overrideOptionsIfNeeded(Ljava/lang/String;Landroid/app/ActivityOptions;)Landroid/app/ActivityOptions;
 HSPLcom/android/server/wm/PersisterQueue$LazyTaskWriterThread;-><init>(Lcom/android/server/wm/PersisterQueue;Ljava/lang/String;)V
 HSPLcom/android/server/wm/PersisterQueue$LazyTaskWriterThread;-><init>(Lcom/android/server/wm/PersisterQueue;Ljava/lang/String;Lcom/android/server/wm/PersisterQueue$1;)V
-PLcom/android/server/wm/PersisterQueue$LazyTaskWriterThread;->run()V
+HPLcom/android/server/wm/PersisterQueue$LazyTaskWriterThread;->run()V
 HSPLcom/android/server/wm/PersisterQueue;-><clinit>()V
 HSPLcom/android/server/wm/PersisterQueue;-><init>()V
 HSPLcom/android/server/wm/PersisterQueue;-><init>(JJ)V
 PLcom/android/server/wm/PersisterQueue;->access$100(Lcom/android/server/wm/PersisterQueue;)Ljava/util/ArrayList;
-PLcom/android/server/wm/PersisterQueue;->access$200(Lcom/android/server/wm/PersisterQueue;)Ljava/util/ArrayList;
-PLcom/android/server/wm/PersisterQueue;->access$300(Lcom/android/server/wm/PersisterQueue;)V
-PLcom/android/server/wm/PersisterQueue;->addItem(Lcom/android/server/wm/PersisterQueue$WriteQueueItem;Z)V
+HPLcom/android/server/wm/PersisterQueue;->access$200(Lcom/android/server/wm/PersisterQueue;)Ljava/util/ArrayList;
+HPLcom/android/server/wm/PersisterQueue;->access$300(Lcom/android/server/wm/PersisterQueue;)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
-PLcom/android/server/wm/PersisterQueue;->findLastItem(Ljava/util/function/Predicate;Ljava/lang/Class;)Lcom/android/server/wm/PersisterQueue$WriteQueueItem;
-PLcom/android/server/wm/PersisterQueue;->processNextItem()V
-PLcom/android/server/wm/PersisterQueue;->removeItems(Ljava/util/function/Predicate;Ljava/lang/Class;)V
+HPLcom/android/server/wm/PersisterQueue;->findLastItem(Ljava/util/function/Predicate;Ljava/lang/Class;)Lcom/android/server/wm/PersisterQueue$WriteQueueItem;
+PLcom/android/server/wm/PersisterQueue;->lambda$static$0()V
+HPLcom/android/server/wm/PersisterQueue;->processNextItem()V
+HPLcom/android/server/wm/PersisterQueue;->removeItems(Ljava/util/function/Predicate;Ljava/lang/Class;)V
 PLcom/android/server/wm/PersisterQueue;->startPersisting()V
-PLcom/android/server/wm/PersisterQueue;->updateLastOrAddItem(Lcom/android/server/wm/PersisterQueue$WriteQueueItem;Z)V
-PLcom/android/server/wm/PersisterQueue;->yieldIfQueueTooDeep()V
+HPLcom/android/server/wm/PersisterQueue;->updateLastOrAddItem(Lcom/android/server/wm/PersisterQueue$WriteQueueItem;Z)V
+HPLcom/android/server/wm/PersisterQueue;->yieldIfQueueTooDeep()V
 HSPLcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;-><init>(Lcom/android/server/wm/PinnedStackController;)V
 HSPLcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;-><init>(Lcom/android/server/wm/PinnedStackController;Lcom/android/server/wm/PinnedStackController$1;)V
 PLcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;->getDisplayRotation()I
+PLcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;->reportBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+PLcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;->resetBoundsAnimation(Landroid/graphics/Rect;)V
 PLcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;->startAnimation(Landroid/graphics/Rect;Landroid/graphics/Rect;I)V
 HSPLcom/android/server/wm/PinnedStackController$PinnedStackListenerDeathHandler;-><init>(Lcom/android/server/wm/PinnedStackController;)V
 HSPLcom/android/server/wm/PinnedStackController$PinnedStackListenerDeathHandler;-><init>(Lcom/android/server/wm/PinnedStackController;Lcom/android/server/wm/PinnedStackController$1;)V
+PLcom/android/server/wm/PinnedStackController$PinnedStackListenerDeathHandler;->binderDied()V
 HSPLcom/android/server/wm/PinnedStackController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/PinnedStackController;->access$1000(Lcom/android/server/wm/PinnedStackController;)Lcom/android/server/wm/PinnedStackController$PinnedStackListenerDeathHandler;
 PLcom/android/server/wm/PinnedStackController;->access$300(Lcom/android/server/wm/PinnedStackController;)Lcom/android/server/wm/WindowManagerService;
 PLcom/android/server/wm/PinnedStackController;->access$400(Lcom/android/server/wm/PinnedStackController;)Landroid/view/DisplayInfo;
 PLcom/android/server/wm/PinnedStackController;->access$500(Lcom/android/server/wm/PinnedStackController;)Lcom/android/server/wm/DisplayContent;
+PLcom/android/server/wm/PinnedStackController;->access$600(Lcom/android/server/wm/PinnedStackController;)Landroid/graphics/Rect;
+PLcom/android/server/wm/PinnedStackController;->access$700(Lcom/android/server/wm/PinnedStackController;)Landroid/graphics/Rect;
+PLcom/android/server/wm/PinnedStackController;->access$700(Lcom/android/server/wm/PinnedStackController;)Landroid/view/IPinnedStackListener;
+PLcom/android/server/wm/PinnedStackController;->access$702(Lcom/android/server/wm/PinnedStackController;Landroid/view/IPinnedStackListener;)Landroid/view/IPinnedStackListener;
+PLcom/android/server/wm/PinnedStackController;->access$800(Lcom/android/server/wm/PinnedStackController;)Lcom/android/server/wm/PinnedStackController$PinnedStackListenerDeathHandler;
+PLcom/android/server/wm/PinnedStackController;->access$900(Lcom/android/server/wm/PinnedStackController;)Landroid/view/IPinnedStackListener;
+PLcom/android/server/wm/PinnedStackController;->access$902(Lcom/android/server/wm/PinnedStackController;Landroid/view/IPinnedStackListener;)Landroid/view/IPinnedStackListener;
 HSPLcom/android/server/wm/PinnedStackController;->dpToPx(FLandroid/util/DisplayMetrics;)I
 HSPLcom/android/server/wm/PinnedStackController;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/PinnedStackController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/wm/PinnedStackController;->getAspectRatio()F
 HSPLcom/android/server/wm/PinnedStackController;->getDefaultBounds(F)Landroid/graphics/Rect;
 HSPLcom/android/server/wm/PinnedStackController;->getInsetBounds(Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/PinnedStackController;->getMovementBounds(Landroid/graphics/Rect;)Landroid/graphics/Rect;
 HSPLcom/android/server/wm/PinnedStackController;->getMovementBounds(Landroid/graphics/Rect;Z)Landroid/graphics/Rect;
 PLcom/android/server/wm/PinnedStackController;->isSameDimensionAndRotation(Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;)Z
+PLcom/android/server/wm/PinnedStackController;->isValidPictureInPictureAspectRatio(F)Z
 PLcom/android/server/wm/PinnedStackController;->notifyActionsChanged(Ljava/util/List;)V
 PLcom/android/server/wm/PinnedStackController;->notifyAspectRatioChanged(F)V
 HSPLcom/android/server/wm/PinnedStackController;->notifyDisplayInfoChanged(Landroid/view/DisplayInfo;)V
-PLcom/android/server/wm/PinnedStackController;->notifyImeVisibilityChanged(ZI)V
+HPLcom/android/server/wm/PinnedStackController;->notifyImeVisibilityChanged(ZI)V
 PLcom/android/server/wm/PinnedStackController;->notifyMinimizeChanged(Z)V
 HSPLcom/android/server/wm/PinnedStackController;->notifyMovementBoundsChanged(ZZ)V
 PLcom/android/server/wm/PinnedStackController;->notifyPrepareAnimation(Landroid/graphics/Rect;FLandroid/graphics/Rect;)V
 HSPLcom/android/server/wm/PinnedStackController;->onConfigurationChanged()V
 HSPLcom/android/server/wm/PinnedStackController;->onDisplayInfoChanged(Landroid/view/DisplayInfo;)V
 PLcom/android/server/wm/PinnedStackController;->onTaskStackBoundsChanged(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+PLcom/android/server/wm/PinnedStackController;->prepareAnimation(Landroid/graphics/Rect;FLandroid/graphics/Rect;)V
 PLcom/android/server/wm/PinnedStackController;->registerPinnedStackListener(Landroid/view/IPinnedStackListener;)V
 HSPLcom/android/server/wm/PinnedStackController;->reloadResources()V
 HPLcom/android/server/wm/PinnedStackController;->resetReentryBounds(Landroid/content/ComponentName;)V
+PLcom/android/server/wm/PinnedStackController;->saveReentryBounds(Landroid/content/ComponentName;Landroid/graphics/Rect;)V
+PLcom/android/server/wm/PinnedStackController;->setActions(Ljava/util/List;)V
 HSPLcom/android/server/wm/PinnedStackController;->setAdjustedForIme(ZI)V
+PLcom/android/server/wm/PinnedStackController;->setAspectRatio(F)V
 HSPLcom/android/server/wm/PinnedStackController;->setDisplayInfo(Landroid/view/DisplayInfo;)V
 HSPLcom/android/server/wm/PointerEventDispatcher;-><init>(Landroid/view/InputChannel;)V
+PLcom/android/server/wm/PointerEventDispatcher;->dispose()V
 HPLcom/android/server/wm/PointerEventDispatcher;->onInputEvent(Landroid/view/InputEvent;)V
 HSPLcom/android/server/wm/PointerEventDispatcher;->registerInputEventListener(Landroid/view/WindowManagerPolicyConstants$PointerEventListener;)V
-HPLcom/android/server/wm/PolicyControl;->getSystemUiVisibility(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;)I
-HPLcom/android/server/wm/PolicyControl;->getWindowFlags(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;)I
-PLcom/android/server/wm/PolicyControl;->reloadFromSetting(Landroid/content/Context;)Z
+PLcom/android/server/wm/PointerEventDispatcher;->unregisterInputEventListener(Landroid/view/WindowManagerPolicyConstants$PointerEventListener;)V
+PLcom/android/server/wm/PolicyControl;->disableImmersiveConfirmation(Ljava/lang/String;)Z
+PLcom/android/server/wm/PolicyControl;->dump(Ljava/lang/String;Lcom/android/server/wm/PolicyControl$Filter;Ljava/lang/String;Ljava/io/PrintWriter;)V
+PLcom/android/server/wm/PolicyControl;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+HSPLcom/android/server/wm/PolicyControl;->getSystemUiVisibility(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;)I
+HSPLcom/android/server/wm/PolicyControl;->getWindowFlags(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;)I
+HSPLcom/android/server/wm/PolicyControl;->reloadFromSetting(Landroid/content/Context;)Z
 HSPLcom/android/server/wm/ProtoLogGroup;-><clinit>()V
 HSPLcom/android/server/wm/ProtoLogGroup;-><init>(Ljava/lang/String;IZZZLjava/lang/String;)V
 HSPLcom/android/server/wm/ProtoLogGroup;->getTag()Ljava/lang/String;
@@ -22209,165 +36865,219 @@
 HSPLcom/android/server/wm/ProtoLogGroup;->isLogToProto()Z
 HSPLcom/android/server/wm/ProtoLogGroup;->values()[Lcom/android/server/wm/ProtoLogGroup;
 HSPLcom/android/server/wm/RecentTasks$1;-><init>(Lcom/android/server/wm/RecentTasks;)V
-PLcom/android/server/wm/RecentTasks$1;->lambda$onPointerEvent$0$RecentTasks$1(IIILjava/lang/Object;)V
+HPLcom/android/server/wm/RecentTasks$1;->lambda$onPointerEvent$0$RecentTasks$1(IIILjava/lang/Object;)V
 HPLcom/android/server/wm/RecentTasks$1;->onPointerEvent(Landroid/view/MotionEvent;)V
 HSPLcom/android/server/wm/RecentTasks;-><clinit>()V
 HSPLcom/android/server/wm/RecentTasks;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityStackSupervisor;)V
-PLcom/android/server/wm/RecentTasks;->access$000(Lcom/android/server/wm/RecentTasks;)Z
+HPLcom/android/server/wm/RecentTasks;->access$000(Lcom/android/server/wm/RecentTasks;)Z
 PLcom/android/server/wm/RecentTasks;->access$100(Lcom/android/server/wm/RecentTasks;)Lcom/android/server/wm/ActivityTaskManagerService;
-HPLcom/android/server/wm/RecentTasks;->add(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/RecentTasks;->cleanupDisabledPackageTasksLocked(Ljava/lang/String;Ljava/util/Set;I)V
+HSPLcom/android/server/wm/RecentTasks;->add(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/RecentTasks;->cleanupDisabledPackageTasksLocked(Ljava/lang/String;Ljava/util/Set;I)V
 PLcom/android/server/wm/RecentTasks;->cleanupLocked(I)V
-PLcom/android/server/wm/RecentTasks;->containsTaskId(II)Z
-PLcom/android/server/wm/RecentTasks;->createRecentTaskInfo(Lcom/android/server/wm/Task;)Landroid/app/ActivityManager$RecentTaskInfo;
-PLcom/android/server/wm/RecentTasks;->dump(Ljava/io/PrintWriter;ZLjava/lang/String;)V
-HPLcom/android/server/wm/RecentTasks;->findRemoveIndexForAddTask(Lcom/android/server/wm/Task;)I
+HSPLcom/android/server/wm/RecentTasks;->containsTaskId(II)Z
+HPLcom/android/server/wm/RecentTasks;->createRecentTaskInfo(Lcom/android/server/wm/Task;)Landroid/app/ActivityManager$RecentTaskInfo;
+HPLcom/android/server/wm/RecentTasks;->dump(Ljava/io/PrintWriter;ZLjava/lang/String;)V
+HSPLcom/android/server/wm/RecentTasks;->findRemoveIndexForAddTask(Lcom/android/server/wm/Task;)I
 HPLcom/android/server/wm/RecentTasks;->getAppTasksList(ILjava/lang/String;)Ljava/util/ArrayList;
-PLcom/android/server/wm/RecentTasks;->getCurrentProfileIds()[I
+HSPLcom/android/server/wm/RecentTasks;->getCurrentProfileIds()[I
 HSPLcom/android/server/wm/RecentTasks;->getInputListener()Landroid/view/WindowManagerPolicyConstants$PointerEventListener;
-PLcom/android/server/wm/RecentTasks;->getPersistableTaskIds(Landroid/util/ArraySet;)V
-PLcom/android/server/wm/RecentTasks;->getProfileIds(I)Ljava/util/Set;
-PLcom/android/server/wm/RecentTasks;->getRecentTaskIds()Landroid/util/SparseBooleanArray;
-PLcom/android/server/wm/RecentTasks;->getRecentTasks(IIZZII)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/wm/RecentTasks;->getPersistableTaskIds(Landroid/util/ArraySet;)V
+HPLcom/android/server/wm/RecentTasks;->getProfileIds(I)Ljava/util/Set;
+HPLcom/android/server/wm/RecentTasks;->getRecentTaskIds()Landroid/util/SparseBooleanArray;
+HPLcom/android/server/wm/RecentTasks;->getRecentTasks(IIZZII)Landroid/content/pm/ParceledListSlice;
 HPLcom/android/server/wm/RecentTasks;->getRecentTasksImpl(IIZZII)Ljava/util/ArrayList;
-PLcom/android/server/wm/RecentTasks;->getTask(I)Lcom/android/server/wm/Task;
-PLcom/android/server/wm/RecentTasks;->getUserInfo(I)Landroid/content/pm/UserInfo;
+PLcom/android/server/wm/RecentTasks;->getRecentsComponent()Landroid/content/ComponentName;
+PLcom/android/server/wm/RecentTasks;->getRecentsComponentUid()I
+HSPLcom/android/server/wm/RecentTasks;->getTask(I)Lcom/android/server/wm/Task;
+PLcom/android/server/wm/RecentTasks;->getTaskDescriptionIcon(Ljava/lang/String;)Landroid/graphics/Bitmap;
+HPLcom/android/server/wm/RecentTasks;->getTaskIdsForUser(I)Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/wm/RecentTasks;->getUserInfo(I)Landroid/content/pm/UserInfo;
 HPLcom/android/server/wm/RecentTasks;->hasCompatibleActivityTypeAndWindowingMode(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/RecentTasks;->isActiveRecentTask(Lcom/android/server/wm/Task;Landroid/util/SparseBooleanArray;)Z
+HSPLcom/android/server/wm/RecentTasks;->isActiveRecentTask(Lcom/android/server/wm/Task;Landroid/util/SparseBooleanArray;)Z
 HSPLcom/android/server/wm/RecentTasks;->isCallerRecents(I)Z
+PLcom/android/server/wm/RecentTasks;->isFreezeTaskListReorderingSet()Z
 HPLcom/android/server/wm/RecentTasks;->isInVisibleRange(Lcom/android/server/wm/Task;IIZ)Z
+HPLcom/android/server/wm/RecentTasks;->isRecentsComponent(Landroid/content/ComponentName;I)Z
 HSPLcom/android/server/wm/RecentTasks;->isRecentsComponentHomeActivity(I)Z
-PLcom/android/server/wm/RecentTasks;->isTrimmable(Lcom/android/server/wm/Task;)Z
+HPLcom/android/server/wm/RecentTasks;->isTrimmable(Lcom/android/server/wm/Task;)Z
 PLcom/android/server/wm/RecentTasks;->isUserRunning(II)Z
-HPLcom/android/server/wm/RecentTasks;->isVisibleRecentTask(Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/RecentTasks;->isVisibleRecentTask(Lcom/android/server/wm/Task;)Z
 HSPLcom/android/server/wm/RecentTasks;->loadParametersFromResources(Landroid/content/res/Resources;)V
-PLcom/android/server/wm/RecentTasks;->loadPersistedTaskIdsForUserLocked(I)V
+HSPLcom/android/server/wm/RecentTasks;->loadPersistedTaskIdsForUserLocked(I)V
 HSPLcom/android/server/wm/RecentTasks;->loadRecentsComponent(Landroid/content/res/Resources;)V
-PLcom/android/server/wm/RecentTasks;->loadUserRecentsLocked(I)V
-PLcom/android/server/wm/RecentTasks;->notifyTaskAdded(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/RecentTasks;->notifyTaskPersisterLocked(Lcom/android/server/wm/Task;Z)V
-PLcom/android/server/wm/RecentTasks;->notifyTaskRemoved(Lcom/android/server/wm/Task;ZZ)V
+HPLcom/android/server/wm/RecentTasks;->loadUserRecentsLocked(I)V
+HSPLcom/android/server/wm/RecentTasks;->notifyTaskAdded(Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/RecentTasks;->notifyTaskPersisterLocked(Lcom/android/server/wm/Task;Z)V
+HPLcom/android/server/wm/RecentTasks;->notifyTaskRemoved(Lcom/android/server/wm/Task;ZZ)V
+PLcom/android/server/wm/RecentTasks;->onLockTaskModeStateChanged(II)V
 HPLcom/android/server/wm/RecentTasks;->onPackagesSuspendedChanged([Ljava/lang/String;ZI)V
 HSPLcom/android/server/wm/RecentTasks;->onSystemReadyLocked()V
 PLcom/android/server/wm/RecentTasks;->processNextAffiliateChainLocked(I)I
 HSPLcom/android/server/wm/RecentTasks;->registerCallback(Lcom/android/server/wm/RecentTasks$Callbacks;)V
-PLcom/android/server/wm/RecentTasks;->remove(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/RecentTasks;->removeForAddTask(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/RecentTasks;->resetFreezeTaskListReordering(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/RecentTasks;->remove(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/RecentTasks;->removeAllVisibleTasks(I)V
+HSPLcom/android/server/wm/RecentTasks;->removeForAddTask(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/RecentTasks;->removeTasksByPackageName(Ljava/lang/String;I)V
+PLcom/android/server/wm/RecentTasks;->removeTasksForUserLocked(I)V
+PLcom/android/server/wm/RecentTasks;->removeUnreachableHiddenTasks(I)V
+HPLcom/android/server/wm/RecentTasks;->resetFreezeTaskListReordering(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RecentTasks;->resetFreezeTaskListReorderingOnTimeout()V
+PLcom/android/server/wm/RecentTasks;->saveImage(Landroid/graphics/Bitmap;Ljava/lang/String;)V
 PLcom/android/server/wm/RecentTasks;->setFreezeTaskListReordering()V
-PLcom/android/server/wm/RecentTasks;->shouldPersistTaskLocked(Lcom/android/server/wm/Task;)Z
+HPLcom/android/server/wm/RecentTasks;->shouldPersistTaskLocked(Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/RecentTasks;->syncPersistentTaskIdsLocked()V
-PLcom/android/server/wm/RecentTasks;->trimInactiveRecentTasks()V
-PLcom/android/server/wm/RecentTasks;->usersWithRecentsLoadedLocked()[I
+HSPLcom/android/server/wm/RecentTasks;->trimInactiveRecentTasks()V
+PLcom/android/server/wm/RecentTasks;->unloadUserDataFromMemoryLocked(I)V
+HPLcom/android/server/wm/RecentTasks;->usersWithRecentsLoadedLocked()[I
 PLcom/android/server/wm/RecentsAnimation;-><clinit>()V
 HPLcom/android/server/wm/RecentsAnimation;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/ActivityStartController;Lcom/android/server/wm/WindowManagerService;Landroid/content/Intent;Landroid/content/ComponentName;ILcom/android/server/wm/WindowProcessController;)V
 HPLcom/android/server/wm/RecentsAnimation;->finishAnimation(IZ)V
-PLcom/android/server/wm/RecentsAnimation;->getTargetActivity(Lcom/android/server/wm/ActivityStack;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/RecentsAnimation;->getTopNonAlwaysOnTopStack()Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/RecentsAnimation;->lambda$L-oo1O0uvOIOr4MDh9QYSeVU09U(Lcom/android/server/wm/RecentsAnimation;Lcom/android/server/wm/Task;)Z
+HPLcom/android/server/wm/RecentsAnimation;->getTargetActivity(Lcom/android/server/wm/ActivityStack;)Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/RecentsAnimation;->getTopNonAlwaysOnTopStack()Lcom/android/server/wm/ActivityStack;
+HPLcom/android/server/wm/RecentsAnimation;->lambda$L-oo1O0uvOIOr4MDh9QYSeVU09U(Lcom/android/server/wm/RecentsAnimation;Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/RecentsAnimation;->lambda$finishAnimation$0$RecentsAnimation(IZLcom/android/server/wm/RecentsAnimationController;)V
-PLcom/android/server/wm/RecentsAnimation;->matchesTarget(Lcom/android/server/wm/Task;)Z
+HPLcom/android/server/wm/RecentsAnimation;->matchesTarget(Lcom/android/server/wm/Task;)Z
 PLcom/android/server/wm/RecentsAnimation;->notifyAnimationCancelBeforeStart(Landroid/view/IRecentsAnimationRunner;)V
 PLcom/android/server/wm/RecentsAnimation;->onAnimationFinished(IZ)V
 PLcom/android/server/wm/RecentsAnimation;->onStackOrderChanged(Lcom/android/server/wm/ActivityStack;)V
+PLcom/android/server/wm/RecentsAnimation;->preloadRecentsActivity()V
 HPLcom/android/server/wm/RecentsAnimation;->startRecentsActivity(Landroid/view/IRecentsAnimationRunner;)V
 PLcom/android/server/wm/RecentsAnimation;->startRecentsActivityInBackground(Ljava/lang/String;)V
-PLcom/android/server/wm/RecentsAnimationController$1;-><init>(Lcom/android/server/wm/RecentsAnimationController;)V
+HPLcom/android/server/wm/RecentsAnimationController$1;-><init>(Lcom/android/server/wm/RecentsAnimationController;)V
 PLcom/android/server/wm/RecentsAnimationController$1;->continueDeferredCancel()V
+PLcom/android/server/wm/RecentsAnimationController$1;->onAppTransitionCancelledLocked(I)V
 PLcom/android/server/wm/RecentsAnimationController$1;->onAppTransitionStartingLocked(IJJJ)I
-PLcom/android/server/wm/RecentsAnimationController$2;-><init>(Lcom/android/server/wm/RecentsAnimationController;)V
+HPLcom/android/server/wm/RecentsAnimationController$2;-><init>(Lcom/android/server/wm/RecentsAnimationController;)V
+PLcom/android/server/wm/RecentsAnimationController$2;->cleanupScreenshot()V
 HPLcom/android/server/wm/RecentsAnimationController$2;->finish(ZZ)V
-PLcom/android/server/wm/RecentsAnimationController$2;->hideCurrentInputMethod()V
-PLcom/android/server/wm/RecentsAnimationController$2;->screenshotTask(I)Landroid/app/ActivityManager$TaskSnapshot;
-PLcom/android/server/wm/RecentsAnimationController$2;->setAnimationTargetsBehindSystemBars(Z)V
-PLcom/android/server/wm/RecentsAnimationController$2;->setInputConsumerEnabled(Z)V
-PLcom/android/server/wm/RecentsAnimationController$2;->setSplitScreenMinimized(Z)V
-PLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;-><init>(Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/Task;Z)V
-PLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->access$1200(Lcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;)Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;
+HPLcom/android/server/wm/RecentsAnimationController$2;->hideCurrentInputMethod()V
+HPLcom/android/server/wm/RecentsAnimationController$2;->screenshotTask(I)Landroid/app/ActivityManager$TaskSnapshot;
+HPLcom/android/server/wm/RecentsAnimationController$2;->setAnimationTargetsBehindSystemBars(Z)V
+PLcom/android/server/wm/RecentsAnimationController$2;->setDeferCancelUntilNextTransition(ZZ)V
+HPLcom/android/server/wm/RecentsAnimationController$2;->setInputConsumerEnabled(Z)V
+HPLcom/android/server/wm/RecentsAnimationController$2;->setSplitScreenMinimized(Z)V
+PLcom/android/server/wm/RecentsAnimationController$2;->setWillFinishToHome(Z)V
+HPLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;-><init>(Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/Task;Z)V
+PLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->access$1200(Lcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;)I
+HPLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->access$1200(Lcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;)Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;
+PLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->access$1300(Lcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;)Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;
 HPLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->access$600(Lcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;)Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->createRemoteAnimationTarget()Landroid/view/RemoteAnimationTarget;
-PLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+PLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;)V
+PLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->getDurationHint()J
+HPLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->getShowWallpaper()Z
+PLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->getStatusBarTransitionsStartTime()J
+PLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->onAnimationCancelled(Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;ILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+HPLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
 PLcom/android/server/wm/RecentsAnimationController;-><clinit>()V
-PLcom/android/server/wm/RecentsAnimationController;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/IRecentsAnimationRunner;Lcom/android/server/wm/RecentsAnimationController$RecentsAnimationCallbacks;I)V
-PLcom/android/server/wm/RecentsAnimationController;->access$000(Lcom/android/server/wm/RecentsAnimationController;)Lcom/android/server/wm/DisplayContent;
-PLcom/android/server/wm/RecentsAnimationController;->access$100(Lcom/android/server/wm/RecentsAnimationController;)Z
-PLcom/android/server/wm/RecentsAnimationController;->access$1002(Lcom/android/server/wm/RecentsAnimationController;Z)Z
+HPLcom/android/server/wm/RecentsAnimationController;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/IRecentsAnimationRunner;Lcom/android/server/wm/RecentsAnimationController$RecentsAnimationCallbacks;I)V
+HPLcom/android/server/wm/RecentsAnimationController;->access$000(Lcom/android/server/wm/RecentsAnimationController;)Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/RecentsAnimationController;->access$100(Lcom/android/server/wm/RecentsAnimationController;)Z
+HPLcom/android/server/wm/RecentsAnimationController;->access$1002(Lcom/android/server/wm/RecentsAnimationController;Z)Z
+PLcom/android/server/wm/RecentsAnimationController;->access$1102(Lcom/android/server/wm/RecentsAnimationController;Z)Z
 HPLcom/android/server/wm/RecentsAnimationController;->access$1300(Lcom/android/server/wm/RecentsAnimationController;)Landroid/graphics/Rect;
+PLcom/android/server/wm/RecentsAnimationController;->access$1400(Lcom/android/server/wm/RecentsAnimationController;)Landroid/graphics/Rect;
 PLcom/android/server/wm/RecentsAnimationController;->access$200(Lcom/android/server/wm/RecentsAnimationController;)Z
+PLcom/android/server/wm/RecentsAnimationController;->access$202(Lcom/android/server/wm/RecentsAnimationController;Z)Z
+PLcom/android/server/wm/RecentsAnimationController;->access$300(Lcom/android/server/wm/RecentsAnimationController;)Z
 HPLcom/android/server/wm/RecentsAnimationController;->access$400(Lcom/android/server/wm/RecentsAnimationController;)Lcom/android/server/wm/WindowManagerService;
 HPLcom/android/server/wm/RecentsAnimationController;->access$500(Lcom/android/server/wm/RecentsAnimationController;)Ljava/util/ArrayList;
 PLcom/android/server/wm/RecentsAnimationController;->access$700(Lcom/android/server/wm/RecentsAnimationController;)Lcom/android/server/wm/RecentsAnimationController$RecentsAnimationCallbacks;
-PLcom/android/server/wm/RecentsAnimationController;->access$800(Lcom/android/server/wm/RecentsAnimationController;)I
-PLcom/android/server/wm/RecentsAnimationController;->access$902(Lcom/android/server/wm/RecentsAnimationController;Z)Z
-PLcom/android/server/wm/RecentsAnimationController;->addAnimation(Lcom/android/server/wm/Task;Z)Lcom/android/server/wm/AnimationAdapter;
-PLcom/android/server/wm/RecentsAnimationController;->cancelAnimation(ILjava/lang/String;)V
-PLcom/android/server/wm/RecentsAnimationController;->cancelAnimation(IZLjava/lang/String;)V
-PLcom/android/server/wm/RecentsAnimationController;->checkAnimationReady(Lcom/android/server/wm/WallpaperController;)V
-PLcom/android/server/wm/RecentsAnimationController;->cleanupAnimation(I)V
+HPLcom/android/server/wm/RecentsAnimationController;->access$800(Lcom/android/server/wm/RecentsAnimationController;)I
+HPLcom/android/server/wm/RecentsAnimationController;->access$902(Lcom/android/server/wm/RecentsAnimationController;Z)Z
+HPLcom/android/server/wm/RecentsAnimationController;->addAnimation(Lcom/android/server/wm/Task;Z)Lcom/android/server/wm/AnimationAdapter;
+PLcom/android/server/wm/RecentsAnimationController;->binderDied()V
+HPLcom/android/server/wm/RecentsAnimationController;->cancelAnimation(ILjava/lang/String;)V
+HPLcom/android/server/wm/RecentsAnimationController;->cancelAnimation(IZLjava/lang/String;)V
+PLcom/android/server/wm/RecentsAnimationController;->cancelAnimationWithScreenshot(Z)V
+HPLcom/android/server/wm/RecentsAnimationController;->checkAnimationReady(Lcom/android/server/wm/WallpaperController;)V
+HPLcom/android/server/wm/RecentsAnimationController;->cleanupAnimation(I)V
 HPLcom/android/server/wm/RecentsAnimationController;->createAppAnimations()[Landroid/view/RemoteAnimationTarget;
-PLcom/android/server/wm/RecentsAnimationController;->createWallpaperAnimations()[Landroid/view/RemoteAnimationTarget;
+HPLcom/android/server/wm/RecentsAnimationController;->createWallpaperAnimations()[Landroid/view/RemoteAnimationTarget;
+PLcom/android/server/wm/RecentsAnimationController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/wm/RecentsAnimationController;->initialize(ILandroid/util/SparseBooleanArray;Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/RecentsAnimationController;->isAnimatingApp(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/RecentsAnimationController;->isAnimatingTask(Lcom/android/server/wm/Task;)Z
+PLcom/android/server/wm/RecentsAnimationController;->isSplitScreenMinimized()Z
 HPLcom/android/server/wm/RecentsAnimationController;->isTargetApp(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/RecentsAnimationController;->isTargetOverWallpaper()Z
 HPLcom/android/server/wm/RecentsAnimationController;->isWallpaperVisible(Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/RecentsAnimationController;->lambda$createWallpaperAnimations$3$RecentsAnimationController(Lcom/android/server/wm/WallpaperAnimationAdapter;)V
 HPLcom/android/server/wm/RecentsAnimationController;->lambda$initialize$1(Lcom/android/server/wm/Task;Ljava/util/ArrayList;)V
 HPLcom/android/server/wm/RecentsAnimationController;->lambda$isAnimatingApp$5(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Ljava/lang/Boolean;
+PLcom/android/server/wm/RecentsAnimationController;->lambda$new$0$RecentsAnimationController()V
+PLcom/android/server/wm/RecentsAnimationController;->lambda$screenshotRecentTask$4$RecentsAnimationController(I)V
 PLcom/android/server/wm/RecentsAnimationController;->linkToDeathOfRunner()V
-PLcom/android/server/wm/RecentsAnimationController;->removeAnimation(Lcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;)V
-PLcom/android/server/wm/RecentsAnimationController;->removeWallpaperAnimation(Lcom/android/server/wm/WallpaperAnimationAdapter;)V
+HPLcom/android/server/wm/RecentsAnimationController;->removeAnimation(Lcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;)V
+HPLcom/android/server/wm/RecentsAnimationController;->removeWallpaperAnimation(Lcom/android/server/wm/WallpaperAnimationAdapter;)V
 PLcom/android/server/wm/RecentsAnimationController;->scheduleFailsafe()V
+PLcom/android/server/wm/RecentsAnimationController;->screenshotRecentTask(Lcom/android/server/wm/Task;I)Landroid/app/ActivityManager$TaskSnapshot;
+PLcom/android/server/wm/RecentsAnimationController;->setCancelOnNextTransitionStart()V
+PLcom/android/server/wm/RecentsAnimationController;->setDeferredCancel(ZZ)V
 HPLcom/android/server/wm/RecentsAnimationController;->shouldApplyInputConsumer(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/RecentsAnimationController;->shouldDeferCancelUntilNextTransition()Z
+HPLcom/android/server/wm/RecentsAnimationController;->shouldDeferCancelUntilNextTransition()Z
 PLcom/android/server/wm/RecentsAnimationController;->shouldDeferCancelWithScreenshot()Z
-PLcom/android/server/wm/RecentsAnimationController;->startAnimation()V
-PLcom/android/server/wm/RecentsAnimationController;->unlinkToDeathOfRunner()V
+HPLcom/android/server/wm/RecentsAnimationController;->shouldIgnoreForAccessibility(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/RecentsAnimationController;->startAnimation()V
+HPLcom/android/server/wm/RecentsAnimationController;->unlinkToDeathOfRunner()V
 HSPLcom/android/server/wm/RefreshRatePolicy;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/DisplayInfo;Lcom/android/server/wm/HighRefreshRateBlacklist;)V
 HPLcom/android/server/wm/RefreshRatePolicy;->addNonHighRefreshRatePackage(Ljava/lang/String;)V
+HSPLcom/android/server/wm/RefreshRatePolicy;->calculatePriority(Lcom/android/server/wm/WindowState;)I
 HSPLcom/android/server/wm/RefreshRatePolicy;->findLowRefreshRateModeId(Landroid/view/DisplayInfo;)I
-HPLcom/android/server/wm/RefreshRatePolicy;->getPreferredModeId(Lcom/android/server/wm/WindowState;)I
+HSPLcom/android/server/wm/RefreshRatePolicy;->getPreferredModeId(Lcom/android/server/wm/WindowState;)I
 HPLcom/android/server/wm/RefreshRatePolicy;->removeNonHighRefreshRatePackage(Ljava/lang/String;)V
-PLcom/android/server/wm/RemoteAnimationController$FinishedCallback;-><init>(Lcom/android/server/wm/RemoteAnimationController;)V
-PLcom/android/server/wm/RemoteAnimationController$FinishedCallback;->onAnimationFinished()V
-PLcom/android/server/wm/RemoteAnimationController$FinishedCallback;->release()V
-PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;-><init>(Lcom/android/server/wm/RemoteAnimationController;Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;Landroid/graphics/Point;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->access$000(Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;)Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;
-PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->dumpDebug(Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->getDurationHint()J
+HPLcom/android/server/wm/RemoteAnimationController$FinishedCallback;-><init>(Lcom/android/server/wm/RemoteAnimationController;)V
+HPLcom/android/server/wm/RemoteAnimationController$FinishedCallback;->onAnimationFinished()V
+HPLcom/android/server/wm/RemoteAnimationController$FinishedCallback;->release()V
+HPLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;-><init>(Lcom/android/server/wm/RemoteAnimationController;Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;Landroid/graphics/Point;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->access$000(Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;)Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;
+PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->access$100(Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;)I
+PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->dumpDebug(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->getDurationHint()J
 PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->getShowWallpaper()Z
-PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->getStatusBarTransitionsStartTime()J
-PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->onAnimationCancelled(Landroid/view/SurfaceControl;)V
-PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
-PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;-><init>(Lcom/android/server/wm/RemoteAnimationController;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Point;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;->createRemoteAnimationTarget()Landroid/view/RemoteAnimationTarget;
-PLcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;->getMode()I
-PLcom/android/server/wm/RemoteAnimationController;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/RemoteAnimationAdapter;Landroid/os/Handler;)V
-PLcom/android/server/wm/RemoteAnimationController;->access$100(Lcom/android/server/wm/RemoteAnimationController;)V
-PLcom/android/server/wm/RemoteAnimationController;->access$300(Lcom/android/server/wm/RemoteAnimationController;)Landroid/view/RemoteAnimationAdapter;
+HPLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->getStatusBarTransitionsStartTime()J
+HPLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->onAnimationCancelled(Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;ILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+HPLcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+HPLcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;-><init>(Lcom/android/server/wm/RemoteAnimationController;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Point;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;->createRemoteAnimationTarget()Landroid/view/RemoteAnimationTarget;
+HPLcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;->getMode()I
+HPLcom/android/server/wm/RemoteAnimationController;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/RemoteAnimationAdapter;Landroid/os/Handler;)V
+HPLcom/android/server/wm/RemoteAnimationController;->access$100(Lcom/android/server/wm/RemoteAnimationController;)V
+PLcom/android/server/wm/RemoteAnimationController;->access$200(Lcom/android/server/wm/RemoteAnimationController;)V
+HPLcom/android/server/wm/RemoteAnimationController;->access$300(Lcom/android/server/wm/RemoteAnimationController;)Landroid/view/RemoteAnimationAdapter;
+PLcom/android/server/wm/RemoteAnimationController;->access$400(Lcom/android/server/wm/RemoteAnimationController;)Landroid/view/RemoteAnimationAdapter;
 PLcom/android/server/wm/RemoteAnimationController;->access$400(Lcom/android/server/wm/RemoteAnimationController;)Ljava/util/ArrayList;
+PLcom/android/server/wm/RemoteAnimationController;->access$500(Lcom/android/server/wm/RemoteAnimationController;)Ljava/util/ArrayList;
+PLcom/android/server/wm/RemoteAnimationController;->binderDied()V
 PLcom/android/server/wm/RemoteAnimationController;->cancelAnimation(Ljava/lang/String;)V
-PLcom/android/server/wm/RemoteAnimationController;->createAppAnimations()[Landroid/view/RemoteAnimationTarget;
-PLcom/android/server/wm/RemoteAnimationController;->createRemoteAnimationRecord(Lcom/android/server/wm/WindowContainer;Landroid/graphics/Point;Landroid/graphics/Rect;Landroid/graphics/Rect;)Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;
-PLcom/android/server/wm/RemoteAnimationController;->createWallpaperAnimations()[Landroid/view/RemoteAnimationTarget;
-PLcom/android/server/wm/RemoteAnimationController;->goodToGo()V
+HPLcom/android/server/wm/RemoteAnimationController;->createAppAnimations()[Landroid/view/RemoteAnimationTarget;
+HPLcom/android/server/wm/RemoteAnimationController;->createRemoteAnimationRecord(Lcom/android/server/wm/WindowContainer;Landroid/graphics/Point;Landroid/graphics/Rect;Landroid/graphics/Rect;)Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;
+HPLcom/android/server/wm/RemoteAnimationController;->createWallpaperAnimations()[Landroid/view/RemoteAnimationTarget;
+HPLcom/android/server/wm/RemoteAnimationController;->goodToGo()V
 PLcom/android/server/wm/RemoteAnimationController;->invokeAnimationCancelled()V
-PLcom/android/server/wm/RemoteAnimationController;->lambda$createWallpaperAnimations$2$RemoteAnimationController(Lcom/android/server/wm/WallpaperAnimationAdapter;)V
-PLcom/android/server/wm/RemoteAnimationController;->lambda$goodToGo$1$RemoteAnimationController([Landroid/view/RemoteAnimationTarget;[Landroid/view/RemoteAnimationTarget;)V
-PLcom/android/server/wm/RemoteAnimationController;->linkToDeathOfRunner()V
-PLcom/android/server/wm/RemoteAnimationController;->onAnimationFinished()V
-PLcom/android/server/wm/RemoteAnimationController;->releaseFinishedCallback()V
-PLcom/android/server/wm/RemoteAnimationController;->setRunningRemoteAnimation(Z)V
-PLcom/android/server/wm/RemoteAnimationController;->unlinkToDeathOfRunner()V
+HPLcom/android/server/wm/RemoteAnimationController;->lambda$createWallpaperAnimations$2$RemoteAnimationController(Lcom/android/server/wm/WallpaperAnimationAdapter;)V
+HPLcom/android/server/wm/RemoteAnimationController;->lambda$goodToGo$1$RemoteAnimationController([Landroid/view/RemoteAnimationTarget;[Landroid/view/RemoteAnimationTarget;)V
+PLcom/android/server/wm/RemoteAnimationController;->lambda$new$0$RemoteAnimationController()V
+HPLcom/android/server/wm/RemoteAnimationController;->linkToDeathOfRunner()V
+HPLcom/android/server/wm/RemoteAnimationController;->onAnimationFinished()V
+HPLcom/android/server/wm/RemoteAnimationController;->releaseFinishedCallback()V
+HPLcom/android/server/wm/RemoteAnimationController;->setRunningRemoteAnimation(Z)V
+HPLcom/android/server/wm/RemoteAnimationController;->unlinkToDeathOfRunner()V
 HSPLcom/android/server/wm/ResetTargetTaskHelper;-><init>()V
 PLcom/android/server/wm/ResetTargetTaskHelper;->finishActivities(Ljava/util/ArrayList;Ljava/lang/String;)V
-PLcom/android/server/wm/ResetTargetTaskHelper;->lambda$APiSnEpUwnLFg5o4cp87NyJw4j4(Lcom/android/server/wm/ResetTargetTaskHelper;Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/ResetTargetTaskHelper;->lambda$APiSnEpUwnLFg5o4cp87NyJw4j4(Lcom/android/server/wm/ResetTargetTaskHelper;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ResetTargetTaskHelper;->lambda$O-Gmp4WswvLHsJ0Qd1g0pv2tF14(Lcom/android/server/wm/ResetTargetTaskHelper;Lcom/android/server/wm/ActivityRecord;Z)Z
 PLcom/android/server/wm/ResetTargetTaskHelper;->process(Lcom/android/server/wm/ActivityStack;Lcom/android/server/wm/Task;Z)Landroid/app/ActivityOptions;
-PLcom/android/server/wm/ResetTargetTaskHelper;->processActivity(Lcom/android/server/wm/ActivityRecord;Z)Z
+HPLcom/android/server/wm/ResetTargetTaskHelper;->process(Lcom/android/server/wm/Task;Z)Landroid/app/ActivityOptions;
+HPLcom/android/server/wm/ResetTargetTaskHelper;->processActivity(Lcom/android/server/wm/ActivityRecord;Z)Z
 PLcom/android/server/wm/ResetTargetTaskHelper;->processCreatedTasks()V
-PLcom/android/server/wm/ResetTargetTaskHelper;->processTask(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/ResetTargetTaskHelper;->processPendingReparentActivities()V
+PLcom/android/server/wm/ResetTargetTaskHelper;->processResultActivities(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;IZZ)V
+HPLcom/android/server/wm/ResetTargetTaskHelper;->processTask(Lcom/android/server/wm/Task;)V
 HPLcom/android/server/wm/ResetTargetTaskHelper;->reset(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ResetTargetTaskHelper;->takeOption(Lcom/android/server/wm/ActivityRecord;Z)Z
 HSPLcom/android/server/wm/RootActivityContainer$FindTaskResult;-><init>()V
@@ -22482,142 +37192,317 @@
 PLcom/android/server/wm/RootActivityContainer;->updatePreviousProcess(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/RootActivityContainer;->updateUIDsPresentOnDisplay()V
 PLcom/android/server/wm/RootActivityContainer;->updateUserStack(ILcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/RootWindowContainer$1;-><init>(Lcom/android/server/wm/RootWindowContainer;)V
+HSPLcom/android/server/wm/RootWindowContainer$FindTaskResult;-><init>()V
+HSPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->apply(Lcom/android/server/wm/Task;)Ljava/lang/Boolean;
+HSPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->clear()V
+HSPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->process(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityStack;)V
+PLcom/android/server/wm/RootWindowContainer$FindTaskResult;->setTo(Lcom/android/server/wm/RootWindowContainer$FindTaskResult;)V
+HSPLcom/android/server/wm/RootWindowContainer$FinishDisabledPackageActivitiesHelper;-><init>(Lcom/android/server/wm/RootWindowContainer;)V
+HPLcom/android/server/wm/RootWindowContainer$FinishDisabledPackageActivitiesHelper;->lambda$XWfRTrqNP6c1kx7wtT2Pvy6K9-c(Lcom/android/server/wm/RootWindowContainer$FinishDisabledPackageActivitiesHelper;Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/RootWindowContainer$FinishDisabledPackageActivitiesHelper;->process(Ljava/lang/String;Ljava/util/Set;ZZI)Z
+HPLcom/android/server/wm/RootWindowContainer$FinishDisabledPackageActivitiesHelper;->processActivity(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/RootWindowContainer$FinishDisabledPackageActivitiesHelper;->reset(Ljava/lang/String;Ljava/util/Set;ZZI)V
 HSPLcom/android/server/wm/RootWindowContainer$MyHandler;-><init>(Lcom/android/server/wm/RootWindowContainer;Landroid/os/Looper;)V
 HSPLcom/android/server/wm/RootWindowContainer$MyHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/wm/RootWindowContainer$SleepTokenImpl;-><init>(Lcom/android/server/wm/RootWindowContainer;Ljava/lang/String;I)V
+PLcom/android/server/wm/RootWindowContainer$SleepTokenImpl;->access$100(Lcom/android/server/wm/RootWindowContainer$SleepTokenImpl;)I
+HPLcom/android/server/wm/RootWindowContainer$SleepTokenImpl;->release()V
+PLcom/android/server/wm/RootWindowContainer$SleepTokenImpl;->toString()Ljava/lang/String;
 HSPLcom/android/server/wm/RootWindowContainer;-><clinit>()V
 HSPLcom/android/server/wm/RootWindowContainer;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+HPLcom/android/server/wm/RootWindowContainer;->access$200(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer$SleepTokenImpl;)V
+HPLcom/android/server/wm/RootWindowContainer;->addStartingWindowsForVisibleActivities()V
+HSPLcom/android/server/wm/RootWindowContainer;->allPausedActivitiesComplete()Z
+HSPLcom/android/server/wm/RootWindowContainer;->allResumedActivitiesIdle()Z
+HPLcom/android/server/wm/RootWindowContainer;->allResumedActivitiesVisible()Z
+PLcom/android/server/wm/RootWindowContainer;->anyTaskForId(I)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/RootWindowContainer;->anyTaskForId(II)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/RootWindowContainer;->anyTaskForId(IILandroid/app/ActivityOptions;Z)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/RootWindowContainer;->applySleepTokens(Z)V
 HSPLcom/android/server/wm/RootWindowContainer;->applySurfaceChangesTransaction(Z)V
+HSPLcom/android/server/wm/RootWindowContainer;->attachApplication(Lcom/android/server/wm/WindowProcessController;)Z
+HSPLcom/android/server/wm/RootWindowContainer;->calculateDefaultMinimalSizeOfResizeableTasks()V
+HSPLcom/android/server/wm/RootWindowContainer;->canLaunchOnDisplay(Lcom/android/server/wm/ActivityRecord;I)Z
+HSPLcom/android/server/wm/RootWindowContainer;->canStartHomeOnDisplay(Landroid/content/pm/ActivityInfo;IZ)Z
+HSPLcom/android/server/wm/RootWindowContainer;->cancelInitializingActivities()V
 HSPLcom/android/server/wm/RootWindowContainer;->checkAppTransitionReady(Lcom/android/server/wm/WindowSurfacePlacer;)V
+HPLcom/android/server/wm/RootWindowContainer;->closeSystemDialogs()V
+HPLcom/android/server/wm/RootWindowContainer;->closeSystemDialogs(Ljava/lang/String;)V
+HSPLcom/android/server/wm/RootWindowContainer;->continueUpdateBounds(I)V
 HSPLcom/android/server/wm/RootWindowContainer;->copyAnimToLayoutParams()Z
+HPLcom/android/server/wm/RootWindowContainer;->createSleepToken(Ljava/lang/String;I)Lcom/android/server/wm/ActivityTaskManagerInternal$SleepToken;
+PLcom/android/server/wm/RootWindowContainer;->deferUpdateBounds(I)V
+PLcom/android/server/wm/RootWindowContainer;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/RootWindowContainer;->dumpActivities(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZZLjava/lang/String;)Z
 PLcom/android/server/wm/RootWindowContainer;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+PLcom/android/server/wm/RootWindowContainer;->dumpDebugInner(Landroid/util/proto/ProtoOutputStream;JI)V
+PLcom/android/server/wm/RootWindowContainer;->dumpDisplayConfigs(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/RootWindowContainer;->dumpDisplayContents(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/RootWindowContainer;->dumpLayoutNeededDisplayIds(Ljava/io/PrintWriter;)V
+PLcom/android/server/wm/RootWindowContainer;->dumpTokens(Ljava/io/PrintWriter;Z)V
+PLcom/android/server/wm/RootWindowContainer;->dumpTopFocusedDisplayId(Ljava/io/PrintWriter;)V
+PLcom/android/server/wm/RootWindowContainer;->dumpWindowsNoHeader(Ljava/io/PrintWriter;ZLjava/util/ArrayList;)V
+HSPLcom/android/server/wm/RootWindowContainer;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZ)V
+HSPLcom/android/server/wm/RootWindowContainer;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZZ)V
+HSPLcom/android/server/wm/RootWindowContainer;->ensureVisibilityAndConfig(Lcom/android/server/wm/ActivityRecord;IZZ)Z
+HSPLcom/android/server/wm/RootWindowContainer;->executeAppTransitionForAllDisplay()V
+HPLcom/android/server/wm/RootWindowContainer;->findActivity(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Z)Lcom/android/server/wm/ActivityRecord;
+PLcom/android/server/wm/RootWindowContainer;->findStackBehind(Lcom/android/server/wm/ActivityStack;)Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/RootWindowContainer;->findTask(Lcom/android/server/wm/ActivityRecord;I)Lcom/android/server/wm/ActivityRecord;
+PLcom/android/server/wm/RootWindowContainer;->finishDisabledPackageActivities(Ljava/lang/String;Ljava/util/Set;ZZI)Z
+HPLcom/android/server/wm/RootWindowContainer;->finishTopCrashedActivities(Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;)I
+HPLcom/android/server/wm/RootWindowContainer;->finishVoiceTask(Landroid/service/voice/IVoiceInteractionSession;)V
 HSPLcom/android/server/wm/RootWindowContainer;->forAllDisplayPolicies(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/wm/RootWindowContainer;->forAllDisplays(Ljava/util/function/Consumer;)V
-PLcom/android/server/wm/RootWindowContainer;->getActivityRecord(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/RootWindowContainer;->getCurrentInputMethodWindow()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/RootWindowContainer;->getActivityRecord(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/RootWindowContainer;->getAllStackInfos(I)Ljava/util/ArrayList;
+HSPLcom/android/server/wm/RootWindowContainer;->getCurrentInputMethodWindow()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/RootWindowContainer;->getDefaultDisplay()Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/RootWindowContainer;->getDisplayContent(I)Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/RootWindowContainer;->getDisplayContent(Ljava/lang/String;)Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/RootWindowContainer;->getDisplayContentOrCreate(I)Lcom/android/server/wm/DisplayContent;
+PLcom/android/server/wm/RootWindowContainer;->getDisplayContextsWithNonToastVisibleWindows(ILjava/util/List;)V
+HSPLcom/android/server/wm/RootWindowContainer;->getDisplayOverrideConfiguration(I)Landroid/content/res/Configuration;
+PLcom/android/server/wm/RootWindowContainer;->getDisplayUiContext(I)Landroid/content/Context;
+PLcom/android/server/wm/RootWindowContainer;->getDumpActivities(Ljava/lang/String;ZZ)Ljava/util/ArrayList;
+PLcom/android/server/wm/RootWindowContainer;->getLaunchStack(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;Z)Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/RootWindowContainer;->getLaunchStack(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;ZLcom/android/server/wm/LaunchParamsController$LaunchParams;II)Lcom/android/server/wm/ActivityStack;
+PLcom/android/server/wm/RootWindowContainer;->getName()Ljava/lang/String;
+HPLcom/android/server/wm/RootWindowContainer;->getNextFocusableStack(Lcom/android/server/wm/ActivityStack;Z)Lcom/android/server/wm/ActivityStack;
+PLcom/android/server/wm/RootWindowContainer;->getRunningTasks(ILjava/util/List;IIIZZLandroid/util/ArraySet;)V
+HPLcom/android/server/wm/RootWindowContainer;->getStack(I)Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/RootWindowContainer;->getStack(II)Lcom/android/server/wm/ActivityStack;
+HPLcom/android/server/wm/RootWindowContainer;->getStackInfo(I)Landroid/app/ActivityManager$StackInfo;
+HPLcom/android/server/wm/RootWindowContainer;->getStackInfo(II)Landroid/app/ActivityManager$StackInfo;
+HPLcom/android/server/wm/RootWindowContainer;->getStackInfo(Lcom/android/server/wm/ActivityStack;)Landroid/app/ActivityManager$StackInfo;
+HSPLcom/android/server/wm/RootWindowContainer;->getTopDisplayFocusedStack()Lcom/android/server/wm/ActivityStack;
 HSPLcom/android/server/wm/RootWindowContainer;->getTopFocusedDisplayContent()Lcom/android/server/wm/DisplayContent;
-PLcom/android/server/wm/RootWindowContainer;->getWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;
-PLcom/android/server/wm/RootWindowContainer;->getWindowTokenDisplay(Lcom/android/server/wm/WindowToken;)Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/RootWindowContainer;->handleNotObscuredLocked(Lcom/android/server/wm/WindowState;ZZ)Z
+HSPLcom/android/server/wm/RootWindowContainer;->getTopResumedActivity()Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/RootWindowContainer;->getTopVisibleActivities()Ljava/util/List;
+HSPLcom/android/server/wm/RootWindowContainer;->getValidLaunchStackOnDisplay(ILcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;Landroid/app/ActivityOptions;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/RootWindowContainer;->getWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;
+HSPLcom/android/server/wm/RootWindowContainer;->getWindowTokenDisplay(Lcom/android/server/wm/WindowToken;)Lcom/android/server/wm/DisplayContent;
+PLcom/android/server/wm/RootWindowContainer;->handleAppCrash(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;)V
+HPLcom/android/server/wm/RootWindowContainer;->handleAppCrash(Lcom/android/server/wm/WindowProcessController;)V
+HSPLcom/android/server/wm/RootWindowContainer;->handleAppDied(Lcom/android/server/wm/WindowProcessController;)Z
+HSPLcom/android/server/wm/RootWindowContainer;->handleNotObscuredLocked(Lcom/android/server/wm/WindowState;ZZ)Z
 HSPLcom/android/server/wm/RootWindowContainer;->handleResizingWindows()V
+HSPLcom/android/server/wm/RootWindowContainer;->hasAwakeDisplay()Z
 HSPLcom/android/server/wm/RootWindowContainer;->hasPendingLayoutChanges(Lcom/android/server/wm/WindowAnimator;)Z
-PLcom/android/server/wm/RootWindowContainer;->isAnyNonToastWindowVisibleForUid(I)Z
+HSPLcom/android/server/wm/RootWindowContainer;->invalidateTaskLayers()V
+HPLcom/android/server/wm/RootWindowContainer;->isAnyNonToastWindowVisibleForUid(I)Z
+HSPLcom/android/server/wm/RootWindowContainer;->isFocusable(Lcom/android/server/wm/ConfigurationContainer;Z)Z
+HSPLcom/android/server/wm/RootWindowContainer;->isInAnyStack(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/RootWindowContainer;->isLayoutNeeded()Z
-HPLcom/android/server/wm/RootWindowContainer;->isOnTop()Z
+HSPLcom/android/server/wm/RootWindowContainer;->isOnTop()Z
+HSPLcom/android/server/wm/RootWindowContainer;->isTopDisplayFocusedStack(Lcom/android/server/wm/ActivityStack;)Z
+HSPLcom/android/server/wm/RootWindowContainer;->isValidLaunchStack(Lcom/android/server/wm/ActivityStack;Lcom/android/server/wm/ActivityRecord;I)Z
+PLcom/android/server/wm/RootWindowContainer;->lambda$0ZupnQyxl7yZKgMmf2zwvykG50s(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;)V
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$5fbF65VSmaJkPHxEhceOGTat7JE(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/RootWindowContainer;->lambda$JVx5SVc0AsTnwnLxXYLgV6AKHPg(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/Task;I)V
+HPLcom/android/server/wm/RootWindowContainer;->lambda$JZALJLRYsvQWgNnzHdoTfj_f3QY(Lcom/android/server/wm/Task;Landroid/app/ActivityManager$StackInfo;[I)V
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$SVJucJygDtyF-4eKB9wPXWaNBDM(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/RootWindowContainer;->lambda$addStartingWindowsForVisibleActivities$11(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/RootWindowContainer;->lambda$bRRfWu3QSW54eS51jCvFD02TPt8(Lcom/android/server/wm/ActivityRecord;IZLandroid/content/Intent;Landroid/content/ComponentName;)Z
+HPLcom/android/server/wm/RootWindowContainer;->lambda$closeSystemDialogs$12(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/RootWindowContainer;->lambda$dumpDebug$10(Landroid/util/proto/ProtoOutputStream;ILcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/RootWindowContainer;->lambda$dumpDebug$11(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/RootWindowContainer;->lambda$dumpDebugInner$10(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/RootWindowContainer;->lambda$dumpWindowsNoHeader$10(Ljava/util/ArrayList;Ljava/io/PrintWriter;[IZLcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/RootWindowContainer;->lambda$dumpWindowsNoHeader$9(Ljava/util/ArrayList;Ljava/io/PrintWriter;[IZLcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/RootWindowContainer;->lambda$fL0RxmEBMlnXFmjHLkBJ9jk9drs(Lcom/android/server/wm/ActivityRecord;Landroid/content/pm/ApplicationInfo;ILjava/lang/String;)V
 PLcom/android/server/wm/RootWindowContainer;->lambda$isAnyNonToastWindowVisibleForUid$3(ILcom/android/server/wm/WindowState;)Z
-PLcom/android/server/wm/RootWindowContainer;->lambda$new$0$RootWindowContainer(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/RootWindowContainer;->lambda$new$0$RootWindowContainer(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$performSurfacePlacementNoTrace$8(Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/RootWindowContainer;->lambda$performSurfacePlacementNoTrace$9(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$setSecureSurfaceState$3(IZLcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/RootWindowContainer;->lambda$setSecureSurfaceState$4(IZLcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/RootWindowContainer;->lambda$static$1(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$static$1(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/RootWindowContainer;->lambda$updateAppOpsState$5(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/RootWindowContainer;->lambda$updateHiddenWhileSuspendedState$4(Landroid/util/ArraySet;ZLcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/RootWindowContainer;->lambda$updateHiddenWhileSuspendedState$5(Landroid/util/ArraySet;ZLcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/RootWindowContainer;->lockAllProfileTasks(I)V
+HPLcom/android/server/wm/RootWindowContainer;->matchesActivity(Lcom/android/server/wm/ActivityRecord;IZLandroid/content/Intent;Landroid/content/ComponentName;)Z
+PLcom/android/server/wm/RootWindowContainer;->moveActivityToPinnedStack(Lcom/android/server/wm/ActivityRecord;Landroid/graphics/Rect;FLjava/lang/String;)V
 HSPLcom/android/server/wm/RootWindowContainer;->onChildPositionChanged(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/RootWindowContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/RootWindowContainer;->onDisplayAdded(I)V
+HSPLcom/android/server/wm/RootWindowContainer;->onDisplayChanged(I)V
+HPLcom/android/server/wm/RootWindowContainer;->onDisplayRemoved(I)V
 HSPLcom/android/server/wm/RootWindowContainer;->onSettingsRetrieved()V
 HSPLcom/android/server/wm/RootWindowContainer;->performSurfacePlacement(Z)V
 HSPLcom/android/server/wm/RootWindowContainer;->performSurfacePlacementNoTrace(Z)V
 HSPLcom/android/server/wm/RootWindowContainer;->positionChildAt(ILcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/RootWindowContainer;->positionChildAt(ILcom/android/server/wm/DisplayContent;Z)V
-PLcom/android/server/wm/RootWindowContainer;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HSPLcom/android/server/wm/RootWindowContainer;->positionChildAt(ILcom/android/server/wm/DisplayContent;Z)V
+HSPLcom/android/server/wm/RootWindowContainer;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+PLcom/android/server/wm/RootWindowContainer;->prepareForShutdown()V
 HSPLcom/android/server/wm/RootWindowContainer;->prepareFreezingTaskBounds()V
-PLcom/android/server/wm/RootWindowContainer;->removeReplacedWindows()V
+HPLcom/android/server/wm/RootWindowContainer;->processTaskForStackInfo(Lcom/android/server/wm/Task;Landroid/app/ActivityManager$StackInfo;[I)V
+HPLcom/android/server/wm/RootWindowContainer;->putStacksToSleep(ZZ)Z
+HSPLcom/android/server/wm/RootWindowContainer;->rankTaskLayerForActivity(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/RootWindowContainer;->rankTaskLayersIfNeeded()V
+PLcom/android/server/wm/RootWindowContainer;->removeChild(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/RootWindowContainer;->removeChild(Lcom/android/server/wm/WindowContainer;)V
+HSPLcom/android/server/wm/RootWindowContainer;->removeReplacedWindows()V
+HPLcom/android/server/wm/RootWindowContainer;->removeSleepToken(Lcom/android/server/wm/RootWindowContainer$SleepTokenImpl;)V
+PLcom/android/server/wm/RootWindowContainer;->removeStacksInWindowingModes([I)V
+PLcom/android/server/wm/RootWindowContainer;->removeUser(I)V
+HSPLcom/android/server/wm/RootWindowContainer;->resolveActivityType(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;)I
+HSPLcom/android/server/wm/RootWindowContainer;->resolveHomeActivity(ILandroid/content/Intent;)Landroid/content/pm/ActivityInfo;
+HSPLcom/android/server/wm/RootWindowContainer;->resumeFocusedStacksTopActivities()Z
+HSPLcom/android/server/wm/RootWindowContainer;->resumeFocusedStacksTopActivities(Lcom/android/server/wm/ActivityStack;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
+HPLcom/android/server/wm/RootWindowContainer;->resumeHomeActivity(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;I)Z
 HSPLcom/android/server/wm/RootWindowContainer;->scheduleAnimation()V
+HSPLcom/android/server/wm/RootWindowContainer;->sendPowerHintForLaunchEndIfNeeded()V
+HSPLcom/android/server/wm/RootWindowContainer;->sendPowerHintForLaunchStartIfNeeded(ZLcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/RootWindowContainer;->setDisplayOverrideConfigurationIfNeeded(Landroid/content/res/Configuration;Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/RootWindowContainer;->setDockedStackMinimized(Z)V
 HSPLcom/android/server/wm/RootWindowContainer;->setRootActivityContainer(Lcom/android/server/wm/RootActivityContainer;)V
-PLcom/android/server/wm/RootWindowContainer;->setSecureSurfaceState(IZ)V
+HSPLcom/android/server/wm/RootWindowContainer;->setSecureSurfaceState(IZ)V
+HSPLcom/android/server/wm/RootWindowContainer;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
+HPLcom/android/server/wm/RootWindowContainer;->shouldPlaceSecondaryHomeOnDisplay(I)Z
+HSPLcom/android/server/wm/RootWindowContainer;->startActivityForAttachedApplicationIfNeeded(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/RootWindowContainer;->startHomeOnAllDisplays(ILjava/lang/String;)Z
+HSPLcom/android/server/wm/RootWindowContainer;->startHomeOnDisplay(ILjava/lang/String;I)Z
+HSPLcom/android/server/wm/RootWindowContainer;->startHomeOnDisplay(ILjava/lang/String;IZZ)Z
+HSPLcom/android/server/wm/RootWindowContainer;->startHomeOnEmptyDisplays(Ljava/lang/String;)V
+HPLcom/android/server/wm/RootWindowContainer;->startSystemDecorations(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/RootWindowContainer;->taskTopActivityIsUser(Lcom/android/server/wm/Task;I)V
 HPLcom/android/server/wm/RootWindowContainer;->toBrightnessOverride(F)I
+HSPLcom/android/server/wm/RootWindowContainer;->topRunningActivity()Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/RootWindowContainer;->updateActivityApplicationInfo(Landroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/wm/RootWindowContainer;->updateActivityApplicationInfo(Lcom/android/server/wm/ActivityRecord;Landroid/content/pm/ApplicationInfo;ILjava/lang/String;)V
+PLcom/android/server/wm/RootWindowContainer;->updateAppOpsState()V
 HSPLcom/android/server/wm/RootWindowContainer;->updateFocusedWindowLocked(IZ)Z
 PLcom/android/server/wm/RootWindowContainer;->updateHiddenWhileSuspendedState(Landroid/util/ArraySet;Z)V
+HPLcom/android/server/wm/RootWindowContainer;->updatePreviousProcess(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/RootWindowContainer;->updateUIDsPresentOnDisplay()V
+HSPLcom/android/server/wm/RootWindowContainer;->updateUserStack(ILcom/android/server/wm/ActivityStack;)V
 HSPLcom/android/server/wm/RunningTasks;-><clinit>()V
 HSPLcom/android/server/wm/RunningTasks;-><init>()V
-PLcom/android/server/wm/RunningTasks;->createRunningTaskInfo(Lcom/android/server/wm/Task;)Landroid/app/ActivityManager$RunningTaskInfo;
+HPLcom/android/server/wm/RunningTasks;->createRunningTaskInfo(Lcom/android/server/wm/Task;)Landroid/app/ActivityManager$RunningTaskInfo;
 HPLcom/android/server/wm/RunningTasks;->getTasks(ILjava/util/List;IILcom/android/server/wm/RootActivityContainer;IZZLandroid/util/ArraySet;)V
+HPLcom/android/server/wm/RunningTasks;->getTasks(ILjava/util/List;IILcom/android/server/wm/RootWindowContainer;IZZLandroid/util/ArraySet;)V
 HPLcom/android/server/wm/RunningTasks;->lambda$hR_Ryk91b0B2BdJN9eCfQfPwC3g(Lcom/android/server/wm/RunningTasks;Lcom/android/server/wm/Task;)V
 HPLcom/android/server/wm/RunningTasks;->lambda$static$0(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;)I
 HPLcom/android/server/wm/RunningTasks;->processTask(Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/SafeActivityOptions;-><init>(Landroid/app/ActivityOptions;)V
-PLcom/android/server/wm/SafeActivityOptions;->checkPermissions(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/ActivityStackSupervisor;Landroid/app/ActivityOptions;II)V
+HSPLcom/android/server/wm/SafeActivityOptions;-><init>(Landroid/app/ActivityOptions;)V
+PLcom/android/server/wm/SafeActivityOptions;->abort()V
+PLcom/android/server/wm/SafeActivityOptions;->abort(Lcom/android/server/wm/SafeActivityOptions;)V
+HSPLcom/android/server/wm/SafeActivityOptions;->checkPermissions(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/ActivityStackSupervisor;Landroid/app/ActivityOptions;II)V
 HSPLcom/android/server/wm/SafeActivityOptions;->fromBundle(Landroid/os/Bundle;)Lcom/android/server/wm/SafeActivityOptions;
-PLcom/android/server/wm/SafeActivityOptions;->getOptions(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/ActivityStackSupervisor;)Landroid/app/ActivityOptions;
+HSPLcom/android/server/wm/SafeActivityOptions;->getOptions(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/ActivityStackSupervisor;)Landroid/app/ActivityOptions;
+PLcom/android/server/wm/SafeActivityOptions;->getOptions(Lcom/android/server/wm/ActivityRecord;)Landroid/app/ActivityOptions;
 PLcom/android/server/wm/SafeActivityOptions;->getOptions(Lcom/android/server/wm/ActivityStackSupervisor;)Landroid/app/ActivityOptions;
-PLcom/android/server/wm/SafeActivityOptions;->mergeActivityOptions(Landroid/app/ActivityOptions;Landroid/app/ActivityOptions;)Landroid/app/ActivityOptions;
-PLcom/android/server/wm/SafeActivityOptions;->popAppVerificationBundle()Landroid/os/Bundle;
-PLcom/android/server/wm/SafeActivityOptions;->setCallingPidUidForRemoteAnimationAdapter(Landroid/app/ActivityOptions;II)V
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;-><init>(Lcom/android/server/wm/ScreenRotationAnimation;)V
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->cancel()V
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->createWindowAnimationSpec(Landroid/view/animation/Animation;)Lcom/android/server/wm/WindowAnimationSpec;
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->initializeBuilder()Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;
+HSPLcom/android/server/wm/SafeActivityOptions;->mergeActivityOptions(Landroid/app/ActivityOptions;Landroid/app/ActivityOptions;)Landroid/app/ActivityOptions;
+HSPLcom/android/server/wm/SafeActivityOptions;->popAppVerificationBundle()Landroid/os/Bundle;
+PLcom/android/server/wm/SafeActivityOptions;->setCallerOptions(Landroid/app/ActivityOptions;)V
+HSPLcom/android/server/wm/SafeActivityOptions;->setCallingPidUidForRemoteAnimationAdapter(Landroid/app/ActivityOptions;II)V
+PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController$1;-><init>(Lcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;JLandroid/animation/ArgbEvaluator;II[FI)V
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController$1;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V
+PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController$1;->getDuration()J
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;-><init>(Lcom/android/server/wm/ScreenRotationAnimation;)V
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->cancel()V
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->createWindowAnimationSpec(Landroid/view/animation/Animation;)Lcom/android/server/wm/WindowAnimationSpec;
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->initializeBuilder()Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;
 HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->isAnimating()Z
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->lambda$R3Rh3gcwK_nBUAZq4hlWwmQXjXA(Lcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;)V
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->lambda$R3Rh3gcwK_nBUAZq4hlWwmQXjXA(Lcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;)V
+PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->lambda$mryOPi3UUpYZkQThzDJyjGBpl5c(Lcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;ILcom/android/server/wm/AnimationAdapter;)V
 HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->onAnimationEnd()V
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startAnimation()V
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startAnimation(Lcom/android/server/wm/SurfaceAnimator$Animatable;Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;Ljava/lang/Runnable;)Lcom/android/server/wm/SurfaceAnimator;
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startDisplayRotation()Lcom/android/server/wm/SurfaceAnimator;
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->onAnimationEnd(ILcom/android/server/wm/AnimationAdapter;)V
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startAnimation()V
+PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startAnimation(Lcom/android/server/wm/SurfaceAnimator$Animatable;Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)Lcom/android/server/wm/SurfaceAnimator;
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startAnimation(Lcom/android/server/wm/SurfaceAnimator$Animatable;Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;Ljava/lang/Runnable;)Lcom/android/server/wm/SurfaceAnimator;
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startColorAnimation()V
+PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startCustomAnimation()V
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startDisplayRotation()Lcom/android/server/wm/SurfaceAnimator;
 PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startEnterBlackFrameAnimation()Lcom/android/server/wm/SurfaceAnimator;
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startScreenshotAlphaAnimation()Lcom/android/server/wm/SurfaceAnimator;
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startScreenshotRotationAnimation()Lcom/android/server/wm/SurfaceAnimator;
-PLcom/android/server/wm/ScreenRotationAnimation;-><init>(Landroid/content/Context;Lcom/android/server/wm/DisplayContent;ZZLcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startScreenRotationAnimation()V
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startScreenshotAlphaAnimation()Lcom/android/server/wm/SurfaceAnimator;
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startScreenshotRotationAnimation()Lcom/android/server/wm/SurfaceAnimator;
+HPLcom/android/server/wm/ScreenRotationAnimation;-><init>(Landroid/content/Context;Lcom/android/server/wm/DisplayContent;ZZLcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/ScreenRotationAnimation;->access$000(Lcom/android/server/wm/ScreenRotationAnimation;)Lcom/android/server/wm/BlackFrame;
+PLcom/android/server/wm/ScreenRotationAnimation;->access$000(Lcom/android/server/wm/ScreenRotationAnimation;)Lcom/android/server/wm/WindowManagerService;
 PLcom/android/server/wm/ScreenRotationAnimation;->access$100(Lcom/android/server/wm/ScreenRotationAnimation;)Lcom/android/server/wm/BlackFrame;
+PLcom/android/server/wm/ScreenRotationAnimation;->access$1000(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/content/Context;
 PLcom/android/server/wm/ScreenRotationAnimation;->access$1000(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/view/animation/Animation;
+PLcom/android/server/wm/ScreenRotationAnimation;->access$1100(Lcom/android/server/wm/ScreenRotationAnimation;)F
 PLcom/android/server/wm/ScreenRotationAnimation;->access$1100(Lcom/android/server/wm/ScreenRotationAnimation;)Lcom/android/server/wm/WindowManagerService;
+PLcom/android/server/wm/ScreenRotationAnimation;->access$1200(Lcom/android/server/wm/ScreenRotationAnimation;)F
+PLcom/android/server/wm/ScreenRotationAnimation;->access$1300(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/view/SurfaceControl;
 PLcom/android/server/wm/ScreenRotationAnimation;->access$200(Lcom/android/server/wm/ScreenRotationAnimation;)Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/ScreenRotationAnimation;->access$300(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/view/animation/Animation;
 PLcom/android/server/wm/ScreenRotationAnimation;->access$400(Lcom/android/server/wm/ScreenRotationAnimation;)I
 PLcom/android/server/wm/ScreenRotationAnimation;->access$500(Lcom/android/server/wm/ScreenRotationAnimation;)I
 PLcom/android/server/wm/ScreenRotationAnimation;->access$600(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/view/SurfaceControl;
 PLcom/android/server/wm/ScreenRotationAnimation;->access$700(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/view/SurfaceControl;
+PLcom/android/server/wm/ScreenRotationAnimation;->access$700(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/view/animation/Animation;
+PLcom/android/server/wm/ScreenRotationAnimation;->access$800(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/view/SurfaceControl;
 PLcom/android/server/wm/ScreenRotationAnimation;->access$800(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/view/animation/Animation;
 PLcom/android/server/wm/ScreenRotationAnimation;->access$900(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/view/SurfaceControl;
+PLcom/android/server/wm/ScreenRotationAnimation;->access$900(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/view/animation/Animation;
 PLcom/android/server/wm/ScreenRotationAnimation;->createRotationMatrix(IIILandroid/graphics/Matrix;)V
 PLcom/android/server/wm/ScreenRotationAnimation;->dismiss(Landroid/view/SurfaceControl$Transaction;JFIIII)Z
 PLcom/android/server/wm/ScreenRotationAnimation;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/ScreenRotationAnimation;->getEnterTransformation()Landroid/view/animation/Transformation;
+HPLcom/android/server/wm/ScreenRotationAnimation;->getEnterTransformation()Landroid/view/animation/Transformation;
 PLcom/android/server/wm/ScreenRotationAnimation;->hasScreenshot()Z
 HPLcom/android/server/wm/ScreenRotationAnimation;->isAnimating()Z
-PLcom/android/server/wm/ScreenRotationAnimation;->isRotating()Z
-PLcom/android/server/wm/ScreenRotationAnimation;->kill()V
-PLcom/android/server/wm/ScreenRotationAnimation;->printTo(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/wm/ScreenRotationAnimation;->setRotation(Landroid/view/SurfaceControl$Transaction;I)V
+HPLcom/android/server/wm/ScreenRotationAnimation;->isRotating()Z
+HPLcom/android/server/wm/ScreenRotationAnimation;->kill()V
+HPLcom/android/server/wm/ScreenRotationAnimation;->printTo(Ljava/lang/String;Ljava/io/PrintWriter;)V
+HPLcom/android/server/wm/ScreenRotationAnimation;->setRotation(Landroid/view/SurfaceControl$Transaction;I)V
 HPLcom/android/server/wm/ScreenRotationAnimation;->setRotationTransform(Landroid/view/SurfaceControl$Transaction;Landroid/graphics/Matrix;)V
 HPLcom/android/server/wm/ScreenRotationAnimation;->startAnimation(Landroid/view/SurfaceControl$Transaction;JFIIII)Z
-PLcom/android/server/wm/SeamlessRotator;-><init>(IILandroid/view/DisplayInfo;)V
-PLcom/android/server/wm/SeamlessRotator;->finish(Lcom/android/server/wm/WindowState;Z)V
+HPLcom/android/server/wm/SeamlessRotator;-><init>(IILandroid/view/DisplayInfo;)V
+HPLcom/android/server/wm/SeamlessRotator;->finish(Lcom/android/server/wm/WindowState;Z)V
 PLcom/android/server/wm/SeamlessRotator;->getOldRotation()I
-PLcom/android/server/wm/SeamlessRotator;->unrotate(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/Session;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/IWindowSessionCallback;)V
-PLcom/android/server/wm/Session;->actionOnWallpaper(Landroid/os/IBinder;Ljava/util/function/BiConsumer;)V
-HPLcom/android/server/wm/Session;->addToDisplay(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/InputChannel;Landroid/view/InsetsState;)I
-PLcom/android/server/wm/Session;->binderDied()V
+HPLcom/android/server/wm/SeamlessRotator;->unrotate(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/Session;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/IWindowSessionCallback;)V
+HPLcom/android/server/wm/Session;->actionOnWallpaper(Landroid/os/IBinder;Ljava/util/function/BiConsumer;)V
+HSPLcom/android/server/wm/Session;->addToDisplay(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/InputChannel;Landroid/view/InsetsState;)I
+HPLcom/android/server/wm/Session;->binderDied()V
 PLcom/android/server/wm/Session;->cancelAlertWindowNotification()V
-PLcom/android/server/wm/Session;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/wm/Session;->finishDrawing(Landroid/view/IWindow;Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/Session;->getDisplayFrame(Landroid/view/IWindow;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/Session;->getInTouchMode()Z
-PLcom/android/server/wm/Session;->getWindowId(Landroid/os/IBinder;)Landroid/view/IWindowId;
-PLcom/android/server/wm/Session;->killSessionLocked()V
-PLcom/android/server/wm/Session;->lambda$setWallpaperPosition$0(FFFFLcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/Session;->lambda$wallpaperOffsetsComplete$1(Landroid/os/IBinder;Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/Session;->onRectangleOnScreenRequested(Landroid/os/IBinder;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/Session;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/server/wm/Session;->onWindowSurfaceVisibilityChanged(Lcom/android/server/wm/WindowSurfaceController;ZI)V
-PLcom/android/server/wm/Session;->performHapticFeedback(IZ)Z
-HPLcom/android/server/wm/Session;->relayout(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIIJLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;)I
-PLcom/android/server/wm/Session;->remove(Landroid/view/IWindow;)V
+PLcom/android/server/wm/Session;->dragRecipientEntered(Landroid/view/IWindow;)V
+PLcom/android/server/wm/Session;->dragRecipientExited(Landroid/view/IWindow;)V
+HPLcom/android/server/wm/Session;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/Session;->finishDrawing(Landroid/view/IWindow;Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/Session;->getDisplayFrame(Landroid/view/IWindow;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/Session;->getInTouchMode()Z
+HPLcom/android/server/wm/Session;->getWindowId(Landroid/os/IBinder;)Landroid/view/IWindowId;
+PLcom/android/server/wm/Session;->grantInputChannel(ILandroid/view/SurfaceControl;Landroid/view/IWindow;Landroid/os/IBinder;Landroid/view/InputChannel;)V
+HPLcom/android/server/wm/Session;->hasAlertWindowSurfaces(Lcom/android/server/wm/DisplayContent;)Z
+HPLcom/android/server/wm/Session;->insetsModified(Landroid/view/IWindow;Landroid/view/InsetsState;)V
+HPLcom/android/server/wm/Session;->killSessionLocked()V
+HPLcom/android/server/wm/Session;->lambda$setWallpaperPosition$0(FFFFLcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/Session;->lambda$wallpaperOffsetsComplete$1(Landroid/os/IBinder;Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/Session;->onRectangleOnScreenRequested(Landroid/os/IBinder;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/Session;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/server/wm/Session;->onWindowSurfaceVisibilityChanged(Lcom/android/server/wm/WindowSurfaceController;ZI)V
+PLcom/android/server/wm/Session;->performDrag(Landroid/view/IWindow;ILandroid/view/SurfaceControl;IFFFFLandroid/content/ClipData;)Landroid/os/IBinder;
+HPLcom/android/server/wm/Session;->performHapticFeedback(IZ)Z
+HPLcom/android/server/wm/Session;->pokeDrawLock(Landroid/os/IBinder;)V
+PLcom/android/server/wm/Session;->prepareToReplaceWindows(Landroid/os/IBinder;Z)V
+HSPLcom/android/server/wm/Session;->relayout(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIIJLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;)I
+HPLcom/android/server/wm/Session;->relayout(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIIJLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;Landroid/graphics/Point;)I
+HSPLcom/android/server/wm/Session;->relayout(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIIJLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;Landroid/graphics/Point;Landroid/view/SurfaceControl;)I
+HPLcom/android/server/wm/Session;->remove(Landroid/view/IWindow;)V
+PLcom/android/server/wm/Session;->reparentDisplayContent(Landroid/view/IWindow;Landroid/view/SurfaceControl;I)V
+PLcom/android/server/wm/Session;->reportDropResult(Landroid/view/IWindow;Z)V
 HPLcom/android/server/wm/Session;->reportSystemGestureExclusionChanged(Landroid/view/IWindow;Ljava/util/List;)V
 PLcom/android/server/wm/Session;->sendWallpaperCommand(Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;Z)Landroid/os/Bundle;
-PLcom/android/server/wm/Session;->setHasOverlayUi(Z)V
-PLcom/android/server/wm/Session;->setInsets(Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
-PLcom/android/server/wm/Session;->setTransparentRegion(Landroid/view/IWindow;Landroid/graphics/Region;)V
-PLcom/android/server/wm/Session;->setWallpaperPosition(Landroid/os/IBinder;FFFF)V
+HPLcom/android/server/wm/Session;->setHasOverlayUi(Z)V
+PLcom/android/server/wm/Session;->setInTouchMode(Z)V
+HPLcom/android/server/wm/Session;->setInsets(Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
+HPLcom/android/server/wm/Session;->setTransparentRegion(Landroid/view/IWindow;Landroid/graphics/Region;)V
+HPLcom/android/server/wm/Session;->setWallpaperPosition(Landroid/os/IBinder;FFFF)V
 PLcom/android/server/wm/Session;->toString()Ljava/lang/String;
-PLcom/android/server/wm/Session;->updatePointerIcon(Landroid/view/IWindow;)V
-PLcom/android/server/wm/Session;->wallpaperOffsetsComplete(Landroid/os/IBinder;)V
-PLcom/android/server/wm/Session;->windowAddedLocked(Ljava/lang/String;)V
+PLcom/android/server/wm/Session;->updateDisplayContentLocation(Landroid/view/IWindow;III)V
+HPLcom/android/server/wm/Session;->updatePointerIcon(Landroid/view/IWindow;)V
+PLcom/android/server/wm/Session;->updateTapExcludeRegion(Landroid/view/IWindow;Landroid/graphics/Region;)V
+HPLcom/android/server/wm/Session;->wallpaperOffsetsComplete(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/Session;->windowAddedLocked(Ljava/lang/String;)V
 PLcom/android/server/wm/Session;->windowRemovedLocked()V
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;-><init>()V
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->access$000(Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;)I
@@ -22632,7 +37517,7 @@
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->access$700(Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;)Ljava/util/function/Supplier;
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->access$800(Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;)Ljava/util/function/BiConsumer;
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->access$900(Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;)Ljava/util/function/Consumer;
-PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->build()Lcom/android/server/wm/SurfaceAnimator$Animatable;
+HPLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->build()Lcom/android/server/wm/SurfaceAnimator$Animatable;
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->setAnimationLeashParent(Landroid/view/SurfaceControl;)Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->setAnimationLeashSupplier(Ljava/util/function/Supplier;)Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->setCommitTransactionRunnable(Ljava/lang/Runnable;)Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;
@@ -22641,100 +37526,113 @@
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->setPendingTransactionSupplier(Ljava/util/function/Supplier;)Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->setSurfaceControl(Landroid/view/SurfaceControl;)Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->setWidth(I)Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;
-PLcom/android/server/wm/SimpleSurfaceAnimatable;-><init>(Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;)V
-PLcom/android/server/wm/SimpleSurfaceAnimatable;-><init>(Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;Lcom/android/server/wm/SimpleSurfaceAnimatable$1;)V
-PLcom/android/server/wm/SimpleSurfaceAnimatable;->commitPendingTransaction()V
-PLcom/android/server/wm/SimpleSurfaceAnimatable;->getAnimationLeashParent()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/SimpleSurfaceAnimatable;->getParentSurfaceControl()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/SimpleSurfaceAnimatable;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
+HPLcom/android/server/wm/SimpleSurfaceAnimatable;-><init>(Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;)V
+HPLcom/android/server/wm/SimpleSurfaceAnimatable;-><init>(Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;Lcom/android/server/wm/SimpleSurfaceAnimatable$1;)V
+HPLcom/android/server/wm/SimpleSurfaceAnimatable;->commitPendingTransaction()V
+HPLcom/android/server/wm/SimpleSurfaceAnimatable;->getAnimationLeashParent()Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/SimpleSurfaceAnimatable;->getParentSurfaceControl()Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/SimpleSurfaceAnimatable;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
 HPLcom/android/server/wm/SimpleSurfaceAnimatable;->getSurfaceControl()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/SimpleSurfaceAnimatable;->getSurfaceHeight()I
-PLcom/android/server/wm/SimpleSurfaceAnimatable;->getSurfaceWidth()I
-PLcom/android/server/wm/SimpleSurfaceAnimatable;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
-PLcom/android/server/wm/SimpleSurfaceAnimatable;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
-PLcom/android/server/wm/SimpleSurfaceAnimatable;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/SimpleSurfaceAnimatable;->shouldDeferAnimationFinish(Ljava/lang/Runnable;)Z
-PLcom/android/server/wm/SnapshotStartingData;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/app/ActivityManager$TaskSnapshot;)V
-PLcom/android/server/wm/SnapshotStartingData;->createStartingSurface(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/policy/WindowManagerPolicy$StartingSurface;
+HPLcom/android/server/wm/SimpleSurfaceAnimatable;->getSurfaceHeight()I
+HPLcom/android/server/wm/SimpleSurfaceAnimatable;->getSurfaceWidth()I
+HPLcom/android/server/wm/SimpleSurfaceAnimatable;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
+HPLcom/android/server/wm/SimpleSurfaceAnimatable;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/SimpleSurfaceAnimatable;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/SimpleSurfaceAnimatable;->shouldDeferAnimationFinish(Ljava/lang/Runnable;)Z
+HPLcom/android/server/wm/SnapshotStartingData;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/app/ActivityManager$TaskSnapshot;)V
+HPLcom/android/server/wm/SnapshotStartingData;->createStartingSurface(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/policy/WindowManagerPolicy$StartingSurface;
 PLcom/android/server/wm/SplashScreenStartingData;-><init>(Lcom/android/server/wm/WindowManagerService;Ljava/lang/String;ILandroid/content/res/CompatibilityInfo;Ljava/lang/CharSequence;IIIILandroid/content/res/Configuration;)V
-PLcom/android/server/wm/SplashScreenStartingData;->createStartingSurface(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/policy/WindowManagerPolicy$StartingSurface;
-PLcom/android/server/wm/StartingData;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+HPLcom/android/server/wm/SplashScreenStartingData;->createStartingSurface(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/policy/WindowManagerPolicy$StartingSurface;
+HPLcom/android/server/wm/StartingData;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/StatusBarController$1;-><init>(Lcom/android/server/wm/StatusBarController;)V
-PLcom/android/server/wm/StatusBarController$1;->lambda$$0$StatusBarController$1()V
-PLcom/android/server/wm/StatusBarController$1;->lambda$$2$StatusBarController$1()V
-PLcom/android/server/wm/StatusBarController$1;->lambda$onAppTransitionStartingLocked$3$StatusBarController$1(JJ)V
+HSPLcom/android/server/wm/StatusBarController$1;->lambda$$0$StatusBarController$1()V
+PLcom/android/server/wm/StatusBarController$1;->lambda$$1$StatusBarController$1()V
+HSPLcom/android/server/wm/StatusBarController$1;->lambda$$2$StatusBarController$1()V
+HSPLcom/android/server/wm/StatusBarController$1;->lambda$onAppTransitionStartingLocked$3$StatusBarController$1(JJ)V
 PLcom/android/server/wm/StatusBarController$1;->onAppTransitionCancelledLocked(I)V
-PLcom/android/server/wm/StatusBarController$1;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
-PLcom/android/server/wm/StatusBarController$1;->onAppTransitionPendingLocked()V
-PLcom/android/server/wm/StatusBarController$1;->onAppTransitionStartingLocked(IJJJ)I
+HSPLcom/android/server/wm/StatusBarController$1;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/StatusBarController$1;->onAppTransitionPendingLocked()V
+HSPLcom/android/server/wm/StatusBarController$1;->onAppTransitionStartingLocked(IJJJ)I
 HSPLcom/android/server/wm/StatusBarController;-><init>(I)V
 HSPLcom/android/server/wm/StatusBarController;->getAppTransitionListener()Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;
-PLcom/android/server/wm/StatusBarController;->setTopAppHidesStatusBar(Z)V
+HPLcom/android/server/wm/StatusBarController;->setTopAppHidesStatusBar(Z)V
 HPLcom/android/server/wm/StatusBarController;->skipAnimation()Z
 HPLcom/android/server/wm/SurfaceAnimationRunner$1;-><init>(Lcom/android/server/wm/SurfaceAnimationRunner;Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;)V
-PLcom/android/server/wm/SurfaceAnimationRunner$1;->onAnimationEnd(Landroid/animation/Animator;)V
-PLcom/android/server/wm/SurfaceAnimationRunner$1;->onAnimationStart(Landroid/animation/Animator;)V
+HPLcom/android/server/wm/SurfaceAnimationRunner$1;->onAnimationEnd(Landroid/animation/Animator;)V
+HPLcom/android/server/wm/SurfaceAnimationRunner$1;->onAnimationStart(Landroid/animation/Animator;)V
 HPLcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;-><init>(Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;Landroid/view/SurfaceControl;Ljava/lang/Runnable;)V
 HPLcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;->access$000(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;)Z
 PLcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;->access$002(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;Z)Z
 HPLcom/android/server/wm/SurfaceAnimationRunner$SfValueAnimator;-><init>(Lcom/android/server/wm/SurfaceAnimationRunner;)V
-PLcom/android/server/wm/SurfaceAnimationRunner$SfValueAnimator;->getAnimationHandler()Landroid/animation/AnimationHandler;
+HPLcom/android/server/wm/SurfaceAnimationRunner$SfValueAnimator;->getAnimationHandler()Landroid/animation/AnimationHandler;
 HSPLcom/android/server/wm/SurfaceAnimationRunner;-><init>(Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;Lcom/android/server/wm/SurfaceAnimationRunner$AnimatorFactory;Landroid/view/SurfaceControl$Transaction;Landroid/os/PowerManagerInternal;)V
 HSPLcom/android/server/wm/SurfaceAnimationRunner;-><init>(Ljava/util/function/Supplier;Landroid/os/PowerManagerInternal;)V
-PLcom/android/server/wm/SurfaceAnimationRunner;->access$100(Lcom/android/server/wm/SurfaceAnimationRunner;)Ljava/lang/Object;
+HPLcom/android/server/wm/SurfaceAnimationRunner;->access$100(Lcom/android/server/wm/SurfaceAnimationRunner;)Ljava/lang/Object;
 PLcom/android/server/wm/SurfaceAnimationRunner;->access$200(Lcom/android/server/wm/SurfaceAnimationRunner;)Landroid/view/SurfaceControl$Transaction;
 PLcom/android/server/wm/SurfaceAnimationRunner;->access$300(Lcom/android/server/wm/SurfaceAnimationRunner;)Ljava/lang/Object;
 PLcom/android/server/wm/SurfaceAnimationRunner;->access$400(Lcom/android/server/wm/SurfaceAnimationRunner;)Landroid/animation/AnimationHandler;
-PLcom/android/server/wm/SurfaceAnimationRunner;->applyTransaction()V
-PLcom/android/server/wm/SurfaceAnimationRunner;->applyTransformation(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;Landroid/view/SurfaceControl$Transaction;J)V
-PLcom/android/server/wm/SurfaceAnimationRunner;->continueStartingAnimations()V
-PLcom/android/server/wm/SurfaceAnimationRunner;->deferStartingAnimations()V
-PLcom/android/server/wm/SurfaceAnimationRunner;->lambda$9Wa9MhcrSX12liOouHtYXEkDU60(Lcom/android/server/wm/SurfaceAnimationRunner;J)V
-PLcom/android/server/wm/SurfaceAnimationRunner;->lambda$lSzwjoKEGADoEFOzdEnwriAk0T4(Lcom/android/server/wm/SurfaceAnimationRunner;)V
+PLcom/android/server/wm/SurfaceAnimationRunner;->access$400(Lcom/android/server/wm/SurfaceAnimationRunner;)Landroid/os/Handler;
+HPLcom/android/server/wm/SurfaceAnimationRunner;->access$500(Lcom/android/server/wm/SurfaceAnimationRunner;)Landroid/animation/AnimationHandler;
+HPLcom/android/server/wm/SurfaceAnimationRunner;->applyTransaction()V
+HPLcom/android/server/wm/SurfaceAnimationRunner;->applyTransformation(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;Landroid/view/SurfaceControl$Transaction;J)V
+HSPLcom/android/server/wm/SurfaceAnimationRunner;->continueStartingAnimations()V
+HSPLcom/android/server/wm/SurfaceAnimationRunner;->deferStartingAnimations()V
+HPLcom/android/server/wm/SurfaceAnimationRunner;->lambda$9Wa9MhcrSX12liOouHtYXEkDU60(Lcom/android/server/wm/SurfaceAnimationRunner;J)V
+HPLcom/android/server/wm/SurfaceAnimationRunner;->lambda$lSzwjoKEGADoEFOzdEnwriAk0T4(Lcom/android/server/wm/SurfaceAnimationRunner;)V
 HSPLcom/android/server/wm/SurfaceAnimationRunner;->lambda$new$0$SurfaceAnimationRunner()V
 PLcom/android/server/wm/SurfaceAnimationRunner;->lambda$new$1$SurfaceAnimationRunner()Landroid/animation/ValueAnimator;
 PLcom/android/server/wm/SurfaceAnimationRunner;->lambda$onAnimationCancelled$2$SurfaceAnimationRunner(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;)V
 HPLcom/android/server/wm/SurfaceAnimationRunner;->lambda$startAnimationLocked$3$SurfaceAnimationRunner(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;)V
-PLcom/android/server/wm/SurfaceAnimationRunner;->onAnimationCancelled(Landroid/view/SurfaceControl;)V
-PLcom/android/server/wm/SurfaceAnimationRunner;->scheduleApplyTransaction()V
-PLcom/android/server/wm/SurfaceAnimationRunner;->startAnimation(Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;Ljava/lang/Runnable;)V
-PLcom/android/server/wm/SurfaceAnimationRunner;->startAnimationLocked(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;)V
-PLcom/android/server/wm/SurfaceAnimationRunner;->startAnimations(J)V
-PLcom/android/server/wm/SurfaceAnimationRunner;->startPendingAnimationsLocked()V
+HPLcom/android/server/wm/SurfaceAnimationRunner;->onAnimationCancelled(Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/SurfaceAnimationRunner;->scheduleApplyTransaction()V
+HPLcom/android/server/wm/SurfaceAnimationRunner;->startAnimation(Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;Ljava/lang/Runnable;)V
+HPLcom/android/server/wm/SurfaceAnimationRunner;->startAnimationLocked(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;)V
+HPLcom/android/server/wm/SurfaceAnimationRunner;->startAnimations(J)V
+HPLcom/android/server/wm/SurfaceAnimationRunner;->startPendingAnimationsLocked()V
 HSPLcom/android/server/wm/SurfaceAnimationThread;-><init>()V
 HSPLcom/android/server/wm/SurfaceAnimationThread;->ensureThreadLocked()V
 HSPLcom/android/server/wm/SurfaceAnimationThread;->get()Lcom/android/server/wm/SurfaceAnimationThread;
 HSPLcom/android/server/wm/SurfaceAnimationThread;->getHandler()Landroid/os/Handler;
 HPLcom/android/server/wm/SurfaceAnimator$Animatable;->shouldDeferAnimationFinish(Ljava/lang/Runnable;)Z
+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;-><init>(Lcom/android/server/wm/SurfaceAnimator$Animatable;Ljava/lang/Runnable;Lcom/android/server/wm/WindowManagerService;)V
-PLcom/android/server/wm/SurfaceAnimator;->cancelAnimation()V
-PLcom/android/server/wm/SurfaceAnimator;->cancelAnimation(Landroid/view/SurfaceControl$Transaction;ZZ)V
-PLcom/android/server/wm/SurfaceAnimator;->createAnimationLeash(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;IIZ)Landroid/view/SurfaceControl;
-PLcom/android/server/wm/SurfaceAnimator;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/SurfaceAnimator;->getAnimation()Lcom/android/server/wm/AnimationAdapter;
+HPLcom/android/server/wm/SurfaceAnimator;->cancelAnimation()V
+HPLcom/android/server/wm/SurfaceAnimator;->cancelAnimation(Landroid/view/SurfaceControl$Transaction;ZZ)V
+HPLcom/android/server/wm/SurfaceAnimator;->createAnimationLeash(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;IIZ)Landroid/view/SurfaceControl;
+PLcom/android/server/wm/SurfaceAnimator;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/SurfaceAnimator;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/wm/SurfaceAnimator;->endDelayingAnimationStart()V
+HPLcom/android/server/wm/SurfaceAnimator;->getAnimation()Lcom/android/server/wm/AnimationAdapter;
+HSPLcom/android/server/wm/SurfaceAnimator;->getFinishedCallback(Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;
 HSPLcom/android/server/wm/SurfaceAnimator;->getFinishedCallback(Ljava/lang/Runnable;)Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;
 HSPLcom/android/server/wm/SurfaceAnimator;->hasLeash()Z
 HSPLcom/android/server/wm/SurfaceAnimator;->isAnimating()Z
 PLcom/android/server/wm/SurfaceAnimator;->isAnimationStartDelayed()Z
-PLcom/android/server/wm/SurfaceAnimator;->lambda$getFinishedCallback$0$SurfaceAnimator(Lcom/android/server/wm/AnimationAdapter;Ljava/lang/Runnable;)V
-PLcom/android/server/wm/SurfaceAnimator;->lambda$getFinishedCallback$1$SurfaceAnimator(Ljava/lang/Runnable;Lcom/android/server/wm/AnimationAdapter;)V
+HPLcom/android/server/wm/SurfaceAnimator;->lambda$getFinishedCallback$0$SurfaceAnimator(Lcom/android/server/wm/AnimationAdapter;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;I)V
+HPLcom/android/server/wm/SurfaceAnimator;->lambda$getFinishedCallback$0$SurfaceAnimator(Lcom/android/server/wm/AnimationAdapter;Ljava/lang/Runnable;)V
+HPLcom/android/server/wm/SurfaceAnimator;->lambda$getFinishedCallback$1$SurfaceAnimator(Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;ILcom/android/server/wm/AnimationAdapter;)V
+HPLcom/android/server/wm/SurfaceAnimator;->lambda$getFinishedCallback$1$SurfaceAnimator(Ljava/lang/Runnable;Lcom/android/server/wm/AnimationAdapter;)V
+PLcom/android/server/wm/SurfaceAnimator;->reparent(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
 HPLcom/android/server/wm/SurfaceAnimator;->reset(Landroid/view/SurfaceControl$Transaction;Z)V
 HSPLcom/android/server/wm/SurfaceAnimator;->setLayer(Landroid/view/SurfaceControl$Transaction;I)V
 HSPLcom/android/server/wm/SurfaceAnimator;->setRelativeLayer(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;I)V
-PLcom/android/server/wm/SurfaceAnimator;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;Z)V
+HPLcom/android/server/wm/SurfaceAnimator;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;Z)V
+PLcom/android/server/wm/SurfaceAnimator;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZI)V
+HPLcom/android/server/wm/SurfaceAnimator;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+HPLcom/android/server/wm/SurfaceAnimator;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZLjava/lang/Runnable;)V
 PLcom/android/server/wm/SurfaceAnimator;->transferAnimation(Lcom/android/server/wm/SurfaceAnimator;)V
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener$1;-><init>(Lcom/android/server/wm/SystemGesturesPointerEventListener;Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener$FlingGestureDetector;-><init>(Lcom/android/server/wm/SystemGesturesPointerEventListener;)V
-PLcom/android/server/wm/SystemGesturesPointerEventListener$FlingGestureDetector;->onFling(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
-PLcom/android/server/wm/SystemGesturesPointerEventListener$FlingGestureDetector;->onSingleTapUp(Landroid/view/MotionEvent;)Z
+HPLcom/android/server/wm/SystemGesturesPointerEventListener$FlingGestureDetector;->onFling(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
+HPLcom/android/server/wm/SystemGesturesPointerEventListener$FlingGestureDetector;->onSingleTapUp(Landroid/view/MotionEvent;)Z
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/wm/SystemGesturesPointerEventListener$Callbacks;)V
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener;->access$000(Lcom/android/server/wm/SystemGesturesPointerEventListener;)Landroid/content/Context;
-PLcom/android/server/wm/SystemGesturesPointerEventListener;->access$100(Lcom/android/server/wm/SystemGesturesPointerEventListener;)J
+HPLcom/android/server/wm/SystemGesturesPointerEventListener;->access$100(Lcom/android/server/wm/SystemGesturesPointerEventListener;)J
 PLcom/android/server/wm/SystemGesturesPointerEventListener;->access$102(Lcom/android/server/wm/SystemGesturesPointerEventListener;J)J
 PLcom/android/server/wm/SystemGesturesPointerEventListener;->access$200(Lcom/android/server/wm/SystemGesturesPointerEventListener;)Lcom/android/server/wm/SystemGesturesPointerEventListener$Callbacks;
-PLcom/android/server/wm/SystemGesturesPointerEventListener;->captureDown(Landroid/view/MotionEvent;I)V
+HPLcom/android/server/wm/SystemGesturesPointerEventListener;->captureDown(Landroid/view/MotionEvent;I)V
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener;->checkNull(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/wm/SystemGesturesPointerEventListener;->currentGestureStartedInRegion(Landroid/graphics/Region;)Z
+HPLcom/android/server/wm/SystemGesturesPointerEventListener;->currentGestureStartedInRegion(Landroid/graphics/Region;)Z
 HPLcom/android/server/wm/SystemGesturesPointerEventListener;->detectSwipe(IJFF)I
 HPLcom/android/server/wm/SystemGesturesPointerEventListener;->detectSwipe(Landroid/view/MotionEvent;)I
 HPLcom/android/server/wm/SystemGesturesPointerEventListener;->findIndex(I)I
@@ -22742,436 +37640,597 @@
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener;->onConfigurationChanged()V
 HPLcom/android/server/wm/SystemGesturesPointerEventListener;->onPointerEvent(Landroid/view/MotionEvent;)V
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener;->systemReady()V
-PLcom/android/server/wm/Task$FindRootHelper;-><init>(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/Task$FindRootHelper;-><init>(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task$1;)V
-PLcom/android/server/wm/Task$FindRootHelper;->clear()V
-HPLcom/android/server/wm/Task$FindRootHelper;->findRoot(ZZ)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/Task$FindRootHelper;->lambda$sIea0VfMPIGsR0Xwg7rABysHwZ4(Lcom/android/server/wm/Task$FindRootHelper;Lcom/android/server/wm/ActivityRecord;ZZ)Z
-PLcom/android/server/wm/Task$FindRootHelper;->processActivity(Lcom/android/server/wm/ActivityRecord;ZZ)Z
-PLcom/android/server/wm/Task$TaskActivitiesReport;-><init>()V
-HPLcom/android/server/wm/Task$TaskActivitiesReport;->accept(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/Task$TaskActivitiesReport;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/Task$TaskActivitiesReport;->reset()V
-PLcom/android/server/wm/Task$TaskFactory;-><init>()V
+HSPLcom/android/server/wm/Task$FindRootHelper;-><init>(Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/Task$FindRootHelper;-><init>(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task$1;)V
+HSPLcom/android/server/wm/Task$FindRootHelper;->clear()V
+HSPLcom/android/server/wm/Task$FindRootHelper;->findRoot(ZZ)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task$FindRootHelper;->lambda$sIea0VfMPIGsR0Xwg7rABysHwZ4(Lcom/android/server/wm/Task$FindRootHelper;Lcom/android/server/wm/ActivityRecord;ZZ)Z
+HSPLcom/android/server/wm/Task$FindRootHelper;->processActivity(Lcom/android/server/wm/ActivityRecord;ZZ)Z
+HSPLcom/android/server/wm/Task$TaskActivitiesReport;-><init>()V
+HSPLcom/android/server/wm/Task$TaskActivitiesReport;->accept(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task$TaskActivitiesReport;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/Task$TaskActivitiesReport;->reset()V
+HSPLcom/android/server/wm/Task$TaskFactory;-><init>()V
 PLcom/android/server/wm/Task$TaskFactory;->create(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;IIIIILjava/lang/String;IZZZIILcom/android/server/wm/ActivityStack;)Lcom/android/server/wm/Task;
-PLcom/android/server/wm/Task$TaskFactory;->create(Lcom/android/server/wm/ActivityTaskManagerService;ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Lcom/android/server/wm/ActivityStack;)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task$TaskFactory;->create(Lcom/android/server/wm/ActivityTaskManagerService;ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Lcom/android/server/wm/ActivityStack;)Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/Task$TaskFactory;->restoreFromXml(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/wm/ActivityStackSupervisor;)Lcom/android/server/wm/Task;
-HPLcom/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;IIIIILjava/lang/String;IZZZIILandroid/content/pm/ActivityInfo;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Lcom/android/server/wm/ActivityStack;)V
-PLcom/android/server/wm/Task;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Landroid/app/ActivityManager$TaskDescription;Lcom/android/server/wm/ActivityStack;)V
-PLcom/android/server/wm/Task;->addChild(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/Task;->addChild(Lcom/android/server/wm/WindowContainer;I)V
-HPLcom/android/server/wm/Task;->adjustBoundsForDisplayChangeIfNeeded(Lcom/android/server/wm/DisplayContent;)V
-HPLcom/android/server/wm/Task;->adjustForMinimalTaskDimensions(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/Task$TaskToken;-><init>(Lcom/android/server/wm/Task;Lcom/android/server/wm/ConfigurationContainer;)V
+HSPLcom/android/server/wm/Task$TaskToken;-><init>(Lcom/android/server/wm/Task;Lcom/android/server/wm/WindowContainer;)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;IIIIILjava/lang/String;IZZZIILandroid/content/pm/ActivityInfo;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Lcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/Task;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Landroid/app/ActivityManager$TaskDescription;Lcom/android/server/wm/ActivityStack;)V
+HSPLcom/android/server/wm/Task;->addChild(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->addChild(Lcom/android/server/wm/WindowContainer;I)V
+HSPLcom/android/server/wm/Task;->adjustBoundsForDisplayChangeIfNeeded(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/Task;->adjustForMinimalTaskDimensions(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/Task;->alignToAdjustedBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;Z)V
+HSPLcom/android/server/wm/Task;->asTask()Lcom/android/server/wm/Task;
 PLcom/android/server/wm/Task;->autoRemoveFromRecents()Z
-HPLcom/android/server/wm/Task;->calculateInsetFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayInfo;)V
-PLcom/android/server/wm/Task;->canAffectSystemUiFlags()Z
+HSPLcom/android/server/wm/Task;->calculateInsetFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayInfo;)V
+HSPLcom/android/server/wm/Task;->canAffectSystemUiFlags()Z
 PLcom/android/server/wm/Task;->canBeLaunchedOnDisplay(I)Z
 PLcom/android/server/wm/Task;->canResizeToBounds(Landroid/graphics/Rect;)Z
-PLcom/android/server/wm/Task;->cleanUpResourcesForDestroy()V
+HPLcom/android/server/wm/Task;->cleanUpActivityReferences(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/Task;->cleanUpResourcesForDestroy()V
+HPLcom/android/server/wm/Task;->cleanUpResourcesForDestroy(Lcom/android/server/wm/ConfigurationContainer;)V
 PLcom/android/server/wm/Task;->clearPreserveNonFloatingState()V
-PLcom/android/server/wm/Task;->clearRootProcess()V
-PLcom/android/server/wm/Task;->closeRecentsChain()V
-PLcom/android/server/wm/Task;->computeConfigResourceOverrides(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)V
-HPLcom/android/server/wm/Task;->computeConfigResourceOverrides(Landroid/content/res/Configuration;Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord$CompatDisplayInsets;)V
-HPLcom/android/server/wm/Task;->computeFullscreenBounds(Landroid/graphics/Rect;Lcom/android/server/wm/ActivityRecord;Landroid/graphics/Rect;I)V
-PLcom/android/server/wm/Task;->computeScreenLayoutOverride(III)I
-PLcom/android/server/wm/Task;->create(Lcom/android/server/wm/ActivityTaskManagerService;ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Lcom/android/server/wm/ActivityStack;)Lcom/android/server/wm/Task;
-PLcom/android/server/wm/Task;->cropWindowsToStackBounds()Z
+HSPLcom/android/server/wm/Task;->clearRootProcess()V
+HPLcom/android/server/wm/Task;->closeRecentsChain()V
+HSPLcom/android/server/wm/Task;->computeConfigResourceOverrides(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/Task;->computeConfigResourceOverrides(Landroid/content/res/Configuration;Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord$CompatDisplayInsets;)V
+HSPLcom/android/server/wm/Task;->computeFullscreenBounds(Landroid/graphics/Rect;Lcom/android/server/wm/ActivityRecord;Landroid/graphics/Rect;I)V
+HSPLcom/android/server/wm/Task;->computeMinUserPosition(II)I
+HSPLcom/android/server/wm/Task;->computeScreenLayoutOverride(III)I
+HSPLcom/android/server/wm/Task;->create(Lcom/android/server/wm/ActivityTaskManagerService;ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Lcom/android/server/wm/ActivityStack;)Lcom/android/server/wm/Task;
+PLcom/android/server/wm/Task;->createRemoteAnimationTarget(Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;)Landroid/view/RemoteAnimationTarget;
+HSPLcom/android/server/wm/Task;->cropWindowsToStackBounds()Z
+HPLcom/android/server/wm/Task;->dim(F)V
+PLcom/android/server/wm/Task;->dontAnimateDimExit()V
 HPLcom/android/server/wm/Task;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/wm/Task;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HPLcom/android/server/wm/Task;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
 HPLcom/android/server/wm/Task;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HPLcom/android/server/wm/Task;->dumpDebugInner(Landroid/util/proto/ProtoOutputStream;JI)V
 HPLcom/android/server/wm/Task;->dumpDebugInnerTaskOnly(Landroid/util/proto/ProtoOutputStream;JI)V
-HPLcom/android/server/wm/Task;->fillTaskInfo(Landroid/app/TaskInfo;)V
-HPLcom/android/server/wm/Task;->fillsParent()Z
-PLcom/android/server/wm/Task;->findActivityInHistory(Landroid/content/ComponentName;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->fillTaskInfo(Landroid/app/TaskInfo;)V
+HSPLcom/android/server/wm/Task;->fillsParent()Z
+HPLcom/android/server/wm/Task;->findActivityInHistory(Landroid/content/ComponentName;)Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/Task;->finishActivityAbove(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/Task;->forAllTasks(Ljava/util/function/Consumer;Z)V
-PLcom/android/server/wm/Task;->forAllTasks(Ljava/util/function/Function;)Z
-PLcom/android/server/wm/Task;->forceWindowsScaleable(Z)V
-HPLcom/android/server/wm/Task;->getActivityType()I
-HPLcom/android/server/wm/Task;->getAdjustedAddPosition(Lcom/android/server/wm/ActivityRecord;I)I
-PLcom/android/server/wm/Task;->getAnimationLeashParent()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/Task;->getBaseIntent()Landroid/content/Intent;
-HPLcom/android/server/wm/Task;->getDimBounds(Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/Task;->getDimmer()Lcom/android/server/wm/Dimmer;
-HPLcom/android/server/wm/Task;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/Task;->getDisplayedBounds()Landroid/graphics/Rect;
-PLcom/android/server/wm/Task;->getInactiveDuration()J
-HPLcom/android/server/wm/Task;->getLaunchBounds()Landroid/graphics/Rect;
-PLcom/android/server/wm/Task;->getName()Ljava/lang/String;
-PLcom/android/server/wm/Task;->getNumRunningActivities(Lcom/android/server/wm/Task$TaskActivitiesReport;)V
-PLcom/android/server/wm/Task;->getOverrideDisplayedBounds()Landroid/graphics/Rect;
-PLcom/android/server/wm/Task;->getRootActivity()Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/Task;->getRootActivity(Z)Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/Task;->getRootActivity(ZZ)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/Task;->getStack()Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/Task;->getStackId()I
-HPLcom/android/server/wm/Task;->getTask(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/Task;
-PLcom/android/server/wm/Task;->getTaskDescription()Landroid/app/ActivityManager$TaskDescription;
-PLcom/android/server/wm/Task;->getTaskFactory()Lcom/android/server/wm/Task$TaskFactory;
-PLcom/android/server/wm/Task;->getTaskInfo()Landroid/app/ActivityManager$RunningTaskInfo;
+HSPLcom/android/server/wm/Task;->forAllTasks(Ljava/util/function/Consumer;Z)V
+HSPLcom/android/server/wm/Task;->forAllTasks(Ljava/util/function/Consumer;ZLcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/Task;->forAllTasks(Ljava/util/function/Function;)Z
+HSPLcom/android/server/wm/Task;->forceWindowsScaleable(Z)V
+HSPLcom/android/server/wm/Task;->getActivityType()I
+HSPLcom/android/server/wm/Task;->getAdjustedAddPosition(Lcom/android/server/wm/ActivityRecord;I)I
+HSPLcom/android/server/wm/Task;->getAdjustedChildPosition(Lcom/android/server/wm/WindowContainer;I)I
+PLcom/android/server/wm/Task;->getAnimationBounds(I)Landroid/graphics/Rect;
+PLcom/android/server/wm/Task;->getAnimationFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/Task;->getAnimationLeashParent()Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/Task;->getBaseIntent()Landroid/content/Intent;
+HPLcom/android/server/wm/Task;->getDescendantTaskCount()I
+HSPLcom/android/server/wm/Task;->getDimBounds(Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/Task;->getDimmer()Lcom/android/server/wm/Dimmer;
+HSPLcom/android/server/wm/Task;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/Task;->getDisplayId()I
+HSPLcom/android/server/wm/Task;->getDisplayedBounds()Landroid/graphics/Rect;
+PLcom/android/server/wm/Task;->getDragResizeMode()I
+HPLcom/android/server/wm/Task;->getInactiveDuration()J
+HSPLcom/android/server/wm/Task;->getLaunchBounds()Landroid/graphics/Rect;
+HSPLcom/android/server/wm/Task;->getName()Ljava/lang/String;
+HSPLcom/android/server/wm/Task;->getNumRunningActivities(Lcom/android/server/wm/Task$TaskActivitiesReport;)V
+HSPLcom/android/server/wm/Task;->getOverrideDisplayedBounds()Landroid/graphics/Rect;
+HSPLcom/android/server/wm/Task;->getRelativeDisplayedPosition(Landroid/graphics/Point;)V
+HSPLcom/android/server/wm/Task;->getResumedActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->getRootActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->getRootActivity(Z)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->getRootActivity(ZZ)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->getRootTask()Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task;->getRootTaskId()I
+HPLcom/android/server/wm/Task;->getSmallestScreenWidthDpForDockedBounds(Landroid/graphics/Rect;)I
+PLcom/android/server/wm/Task;->getSnapshot(ZZ)Landroid/app/ActivityManager$TaskSnapshot;
+HSPLcom/android/server/wm/Task;->getStack()Lcom/android/server/wm/ActivityStack;
+HSPLcom/android/server/wm/Task;->getStackId()I
+HSPLcom/android/server/wm/Task;->getTask(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task;->getTaskDescription()Landroid/app/ActivityManager$TaskDescription;
+HSPLcom/android/server/wm/Task;->getTaskFactory()Lcom/android/server/wm/Task$TaskFactory;
+HSPLcom/android/server/wm/Task;->getTaskInfo()Landroid/app/ActivityManager$RunningTaskInfo;
 HPLcom/android/server/wm/Task;->getTaskStack()Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/Task;->getTopFullscreenActivity()Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/Task;->getTopNonFinishingActivity()Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/Task;->getTopNonFinishingActivity(Z)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/Task;->getTopVisibleActivity()Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/Task;->intersectWithInsetsIfFits(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/Task;->getTopFullscreenActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->getTopNonFinishingActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->getTopNonFinishingActivity(Z)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->getTopVisibleActivity()Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/Task;->getTopVisibleAppMainWindow()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/Task;->intersectWithInsetsIfFits(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/Task;->isClearingToReuseTask()Z
-PLcom/android/server/wm/Task;->isFloating()Z
-PLcom/android/server/wm/Task;->isResizeable()Z
-PLcom/android/server/wm/Task;->isResizeable(Z)Z
-PLcom/android/server/wm/Task;->isSameIntentFilter(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/Task;->isTaskAnimating()Z
-PLcom/android/server/wm/Task;->isTaskId(I)Z
+HSPLcom/android/server/wm/Task;->isControlledByTaskOrganizer()Z
+HPLcom/android/server/wm/Task;->isDragResizing()Z
+HSPLcom/android/server/wm/Task;->isFloating()Z
+PLcom/android/server/wm/Task;->isFocused()Z
+HPLcom/android/server/wm/Task;->isOpaqueActivity(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/Task;->isResizeable()Z
+HSPLcom/android/server/wm/Task;->isResizeable(Z)Z
+HSPLcom/android/server/wm/Task;->isRootTask()Z
+HPLcom/android/server/wm/Task;->isSameIntentFilter(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/Task;->isTaskAnimating()Z
+HSPLcom/android/server/wm/Task;->isTaskId(I)Z
+HPLcom/android/server/wm/Task;->isTranslucent(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/Task;->isUidPresent(I)Z
 PLcom/android/server/wm/Task;->lambda$BP51Xfr33NBfsJ4rKO04RomX2Tg(Lcom/android/server/wm/ActivityRecord;Landroid/content/ComponentName;)Z
+HPLcom/android/server/wm/Task;->lambda$CKQ9RLMNPYajktwO1VrUoQGHF_8(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->lambda$OQmaRDKXdgA0v6VfNwTX7wOkwBs(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Lorg/xmlpull/v1/XmlSerializer;)Z
-PLcom/android/server/wm/Task;->lambda$TUGPkEKamN60PF6hJQxUwDBjU-M(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskDescription;)Z
-PLcom/android/server/wm/Task;->lambda$dump$9(Ljava/io/PrintWriter;Ljava/lang/String;[ILjava/lang/String;ZLcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->lambda$TUGPkEKamN60PF6hJQxUwDBjU-M(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskDescription;)Z
+HPLcom/android/server/wm/Task;->lambda$dump$9(Ljava/io/PrintWriter;Ljava/lang/String;[ILjava/lang/String;ZLcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/Task;->lambda$dumpDebug$10(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/Task;->lambda$dumpDebugInner$11(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/Task;->lambda$dumpDebugInnerTaskOnly$8(Landroid/util/proto/ProtoOutputStream;ILcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/Task;->lambda$getAdjustedAddPosition$5(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/Task;->lambda$getTopFullscreenActivity$6(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/Task;->lambda$getTopVisibleActivity$7(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/Task;->lambda$dumpDebugInnerTaskOnly$9(Landroid/util/proto/ProtoOutputStream;ILcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/Task;->lambda$dumpDebugInnerTaskOnly$9(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->lambda$getAdjustedAddPosition$5(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/Task;->lambda$getDescendantTaskCount$5(Lcom/android/server/wm/Task;[I)V
+HPLcom/android/server/wm/Task;->lambda$getTopFullscreenActivity$6(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/Task;->lambda$getTopFullscreenActivity$7(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/Task;->lambda$getTopVisibleActivity$7(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/Task;->lambda$getTopVisibleActivity$8(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/Task;->lambda$isTaskAnimating$6$Task(Lcom/android/server/wm/Task;)Ljava/lang/Boolean;
 PLcom/android/server/wm/Task;->lambda$lqGdYR9ABiPuG3_68w1VS6hrr8c(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->lambda$onlyHasTaskOverlayActivities$1(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->lambda$onlyHasTaskOverlayActivities$2(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/Task;->lambda$performClearTaskAtIndexLocked$4(Ljava/lang/String;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/Task;->lambda$topRunningActivityWithStartingWindowLocked$0(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/Task;->lambda$performClearTaskAtIndexLocked$4(Ljava/lang/String;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->lambda$topRunningActivityWithStartingWindowLocked$0(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->lockTaskAuthToString()Ljava/lang/String;
-PLcom/android/server/wm/Task;->makeSurface()Landroid/view/SurfaceControl$Builder;
-PLcom/android/server/wm/Task;->matchesActivityInHistory(Lcom/android/server/wm/ActivityRecord;Landroid/content/ComponentName;)Z
+HSPLcom/android/server/wm/Task;->makeSurface()Landroid/view/SurfaceControl$Builder;
+HPLcom/android/server/wm/Task;->matchesActivityInHistory(Lcom/android/server/wm/ActivityRecord;Landroid/content/ComponentName;)Z
 PLcom/android/server/wm/Task;->moveActivityToFrontLocked(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/Task;->onActivityStateChanged(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityStack$ActivityState;Ljava/lang/String;)V
-HPLcom/android/server/wm/Task;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/Task;->onDescendantOrientationChanged(Landroid/os/IBinder;Lcom/android/server/wm/ConfigurationContainer;)Z
-HPLcom/android/server/wm/Task;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
-HPLcom/android/server/wm/Task;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
+HSPLcom/android/server/wm/Task;->onActivityStateChanged(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityStack$ActivityState;Ljava/lang/String;)V
+HPLcom/android/server/wm/Task;->onAnimationFinished()V
+HSPLcom/android/server/wm/Task;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/Task;->onDescendantOrientationChanged(Landroid/os/IBinder;Lcom/android/server/wm/ConfigurationContainer;)Z
+HSPLcom/android/server/wm/Task;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/Task;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
 PLcom/android/server/wm/Task;->onSnapshotChanged(Landroid/app/ActivityManager$TaskSnapshot;)V
-PLcom/android/server/wm/Task;->onlyHasTaskOverlayActivities(Z)Z
-PLcom/android/server/wm/Task;->performClearTaskAtIndexLocked(Ljava/lang/String;)V
+HSPLcom/android/server/wm/Task;->onWindowFocusChanged(Z)V
+HPLcom/android/server/wm/Task;->onlyHasTaskOverlayActivities(Z)Z
+HPLcom/android/server/wm/Task;->performClearTaskAtIndexLocked(Ljava/lang/String;)V
 PLcom/android/server/wm/Task;->performClearTaskForReuseLocked(Lcom/android/server/wm/ActivityRecord;I)Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/Task;->performClearTaskLocked()V
-PLcom/android/server/wm/Task;->performClearTaskLocked(Lcom/android/server/wm/ActivityRecord;I)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/Task;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
-PLcom/android/server/wm/Task;->positionChildAt(Lcom/android/server/wm/ActivityRecord;I)V
-PLcom/android/server/wm/Task;->positionChildAtTop(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/Task;->prepareFreezingBounds()V
-HPLcom/android/server/wm/Task;->prepareSurfaces()V
-PLcom/android/server/wm/Task;->removeChild(Lcom/android/server/wm/WindowContainer;)V
-PLcom/android/server/wm/Task;->removeIfPossible()V
-PLcom/android/server/wm/Task;->removeImmediately()V
+HPLcom/android/server/wm/Task;->performClearTaskLocked(Lcom/android/server/wm/ActivityRecord;I)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HSPLcom/android/server/wm/Task;->positionChildAt(Lcom/android/server/wm/ActivityRecord;I)V
+HSPLcom/android/server/wm/Task;->positionChildAtTop(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->prepareFreezingBounds()V
+HSPLcom/android/server/wm/Task;->prepareSurfaces()V
+HPLcom/android/server/wm/Task;->removeChild(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/Task;->removeChild(Lcom/android/server/wm/WindowContainer;Ljava/lang/String;)V
+HPLcom/android/server/wm/Task;->removeIfPossible()V
+HPLcom/android/server/wm/Task;->removeImmediately()V
 PLcom/android/server/wm/Task;->removeTaskActivitiesLocked(Ljava/lang/String;)V
 PLcom/android/server/wm/Task;->removedFromRecents()V
 PLcom/android/server/wm/Task;->reparent(Lcom/android/server/wm/ActivityStack;IIZZZLjava/lang/String;)Z
 PLcom/android/server/wm/Task;->reparent(Lcom/android/server/wm/ActivityStack;IZLjava/lang/String;)V
+PLcom/android/server/wm/Task;->reparent(Lcom/android/server/wm/ActivityStack;ZIZZLjava/lang/String;)Z
 PLcom/android/server/wm/Task;->reparent(Lcom/android/server/wm/ActivityStack;ZIZZZLjava/lang/String;)Z
+PLcom/android/server/wm/Task;->reparentSurfaceControl(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
 PLcom/android/server/wm/Task;->replaceWindowsOnTaskMove(II)Z
 PLcom/android/server/wm/Task;->resize(Landroid/graphics/Rect;IZZ)Z
 PLcom/android/server/wm/Task;->resize(ZZ)V
-HPLcom/android/server/wm/Task;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/Task;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
 PLcom/android/server/wm/Task;->restoreFromXml(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/wm/ActivityStackSupervisor;)Lcom/android/server/wm/Task;
-PLcom/android/server/wm/Task;->saveActivityToXml(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Lorg/xmlpull/v1/XmlSerializer;)Z
-HPLcom/android/server/wm/Task;->saveLaunchingStateIfNeeded()V
+HPLcom/android/server/wm/Task;->returnsToHomeStack()Z
+HPLcom/android/server/wm/Task;->saveActivityToXml(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Lorg/xmlpull/v1/XmlSerializer;)Z
+HSPLcom/android/server/wm/Task;->saveLaunchingStateIfNeeded()V
+HSPLcom/android/server/wm/Task;->saveLaunchingStateIfNeeded(Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/Task;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
-HPLcom/android/server/wm/Task;->setBounds(Landroid/graphics/Rect;)I
-HPLcom/android/server/wm/Task;->setIntent(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;)V
-PLcom/android/server/wm/Task;->setIntent(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/Task;->setLockTaskAuth()V
-HPLcom/android/server/wm/Task;->setLockTaskAuth(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/Task;->setMinDimensions(Landroid/content/pm/ActivityInfo;)V
+HSPLcom/android/server/wm/Task;->sendTaskAppeared()V
+HSPLcom/android/server/wm/Task;->setBounds(Landroid/graphics/Rect;)I
+PLcom/android/server/wm/Task;->setBounds(Landroid/graphics/Rect;Z)I
+PLcom/android/server/wm/Task;->setCanAffectSystemUiFlags(Z)V
+PLcom/android/server/wm/Task;->setDragResizing(ZI)V
+HSPLcom/android/server/wm/Task;->setForceShowForAllUsers(Z)V
+HSPLcom/android/server/wm/Task;->setIntent(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;)V
+HSPLcom/android/server/wm/Task;->setIntent(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->setLockTaskAuth()V
+HSPLcom/android/server/wm/Task;->setLockTaskAuth(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->setMinDimensions(Landroid/content/pm/ActivityInfo;)V
 PLcom/android/server/wm/Task;->setNextAffiliate(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/Task;->setOverrideDisplayedBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/Task;->setOverrideDisplayedBounds(Landroid/graphics/Rect;)V
 PLcom/android/server/wm/Task;->setPrevAffiliate(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/Task;->setRootProcess(Lcom/android/server/wm/WindowProcessController;)V
-PLcom/android/server/wm/Task;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V
-HPLcom/android/server/wm/Task;->setTaskDescriptionFromActivityAboveRoot(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskDescription;)Z
-PLcom/android/server/wm/Task;->setTaskFactory(Lcom/android/server/wm/Task$TaskFactory;)V
-PLcom/android/server/wm/Task;->shouldDeferRemoval()Z
-PLcom/android/server/wm/Task;->showForAllUsers()Z
-HPLcom/android/server/wm/Task;->supportsSplitScreenWindowingMode()Z
-PLcom/android/server/wm/Task;->toString()Ljava/lang/String;
-PLcom/android/server/wm/Task;->topRunningActivityLocked()Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/Task;->topRunningActivityWithStartingWindowLocked()Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/Task;->touchActiveTime()V
-PLcom/android/server/wm/Task;->updateEffectiveIntent()V
-PLcom/android/server/wm/Task;->updateOverrideConfigurationFromLaunchBounds()Landroid/graphics/Rect;
-HPLcom/android/server/wm/Task;->updateTaskDescription()V
-PLcom/android/server/wm/Task;->updateTaskMovement(Z)V
+HSPLcom/android/server/wm/Task;->setResumedActivity(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
+HSPLcom/android/server/wm/Task;->setRootProcess(Lcom/android/server/wm/WindowProcessController;)V
+HSPLcom/android/server/wm/Task;->setSurfaceControl(Landroid/view/SurfaceControl;)V
+HSPLcom/android/server/wm/Task;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V
+HSPLcom/android/server/wm/Task;->setTaskDescriptionFromActivityAboveRoot(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskDescription;)Z
+PLcom/android/server/wm/Task;->setTaskDockedResizing(Z)V
+HSPLcom/android/server/wm/Task;->setTaskFactory(Lcom/android/server/wm/Task$TaskFactory;)V
+HSPLcom/android/server/wm/Task;->setTaskOrganizer(Landroid/view/ITaskOrganizer;)V
+PLcom/android/server/wm/Task;->setWindowingMode(I)V
+HPLcom/android/server/wm/Task;->shouldDeferRemoval()Z
+HSPLcom/android/server/wm/Task;->showForAllUsers()Z
+HSPLcom/android/server/wm/Task;->showToCurrentUser()Z
+HPLcom/android/server/wm/Task;->stopDimming()V
+HSPLcom/android/server/wm/Task;->supportsSplitScreenWindowingMode()Z
+HSPLcom/android/server/wm/Task;->supportsSplitScreenWindowingModeInner()Z
+HPLcom/android/server/wm/Task;->toString()Ljava/lang/String;
+HSPLcom/android/server/wm/Task;->topRunningActivityLocked()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->topRunningActivityWithStartingWindowLocked()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->touchActiveTime()V
+HSPLcom/android/server/wm/Task;->updateEffectiveIntent()V
+HSPLcom/android/server/wm/Task;->updateOverrideConfigurationFromLaunchBounds()Landroid/graphics/Rect;
+HSPLcom/android/server/wm/Task;->updateShadowsRadius(ZLandroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/Task;->updateSurfaceCrop()V
+HSPLcom/android/server/wm/Task;->updateSurfacePosition()V
+HSPLcom/android/server/wm/Task;->updateTaskDescription()V
+HSPLcom/android/server/wm/Task;->updateTaskMovement(Z)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$MainHandler;-><init>(Lcom/android/server/wm/TaskChangeNotificationController;Landroid/os/Looper;)V
-HPLcom/android/server/wm/TaskChangeNotificationController$MainHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController$MainHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController;-><init>(Ljava/lang/Object;Lcom/android/server/wm/ActivityStackSupervisor;Landroid/os/Handler;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->access$000(Lcom/android/server/wm/TaskChangeNotificationController;)Ljava/lang/Object;
 PLcom/android/server/wm/TaskChangeNotificationController;->access$100(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/ActivityStackSupervisor;
+PLcom/android/server/wm/TaskChangeNotificationController;->access$1000(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/wm/TaskChangeNotificationController;->access$1100(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/wm/TaskChangeNotificationController;->access$1300(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/wm/TaskChangeNotificationController;->access$1400(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/wm/TaskChangeNotificationController;->access$1600(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/wm/TaskChangeNotificationController;->access$1900(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->access$200(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
-PLcom/android/server/wm/TaskChangeNotificationController;->access$2500(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
-PLcom/android/server/wm/TaskChangeNotificationController;->access$2600(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
-PLcom/android/server/wm/TaskChangeNotificationController;->access$300(Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;Landroid/os/Message;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->access$400(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/wm/TaskChangeNotificationController;->access$2000(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/wm/TaskChangeNotificationController;->access$2100(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+HSPLcom/android/server/wm/TaskChangeNotificationController;->access$2500(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+HSPLcom/android/server/wm/TaskChangeNotificationController;->access$2600(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/wm/TaskChangeNotificationController;->access$2700(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+HSPLcom/android/server/wm/TaskChangeNotificationController;->access$300(Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->access$400(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->access$500(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
-PLcom/android/server/wm/TaskChangeNotificationController;->access$700(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/wm/TaskChangeNotificationController;->access$600(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+HSPLcom/android/server/wm/TaskChangeNotificationController;->access$700(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->access$800(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->access$900(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
-HPLcom/android/server/wm/TaskChangeNotificationController;->forAllLocalListeners(Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;Landroid/os/Message;)V
-HPLcom/android/server/wm/TaskChangeNotificationController;->forAllRemoteListeners(Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;Landroid/os/Message;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$0(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$1(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->forAllLocalListeners(Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->forAllRemoteListeners(Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;Landroid/os/Message;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$0(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$1(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$10(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$11(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$12(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$13(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$14(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$17(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$18(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$19(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$2(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$22(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$23(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$2(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$20(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$21(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$22(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$23(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$24(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$4(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$6(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$3(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$4(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$6(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$7(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$8(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$9(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->notifyActivityDismissingDockedStack()V
+PLcom/android/server/wm/TaskChangeNotificationController;->notifyActivityForcedResizable(IILjava/lang/String;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->notifyActivityPinned(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->notifyActivityRequestedOrientationChanged(II)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->notifyActivityRequestedOrientationChanged(II)V
 PLcom/android/server/wm/TaskChangeNotificationController;->notifyActivityUnpinned()V
+PLcom/android/server/wm/TaskChangeNotificationController;->notifyPinnedActivityRestartAttempt(Z)V
+PLcom/android/server/wm/TaskChangeNotificationController;->notifyPinnedStackAnimationEnded()V
+PLcom/android/server/wm/TaskChangeNotificationController;->notifyPinnedStackAnimationStarted()V
+PLcom/android/server/wm/TaskChangeNotificationController;->notifySingleTaskDisplayDrawn(I)V
+PLcom/android/server/wm/TaskChangeNotificationController;->notifySingleTaskDisplayEmpty(I)V
 PLcom/android/server/wm/TaskChangeNotificationController;->notifySizeCompatModeActivityChanged(ILandroid/os/IBinder;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskCreated(ILandroid/content/ComponentName;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskDescriptionChanged(Landroid/app/TaskInfo;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskDisplayChanged(II)V
-PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskListFrozen(Z)V
-PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskListUpdated()V
-PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskMovedToFront(Landroid/app/TaskInfo;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskRemovalStarted(Landroid/app/ActivityManager$RunningTaskInfo;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskRemoved(I)V
-PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskStackChanged()V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskCreated(ILandroid/content/ComponentName;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskDescriptionChanged(Landroid/app/TaskInfo;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskDisplayChanged(II)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskListFrozen(Z)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskListUpdated()V
+HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskMovedToFront(Landroid/app/TaskInfo;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskProfileLocked(II)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskRemovalStarted(Landroid/app/ActivityManager$RunningTaskInfo;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskRemoved(I)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskSnapshotChanged(ILandroid/app/ActivityManager$TaskSnapshot;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskStackChanged()V
 HSPLcom/android/server/wm/TaskChangeNotificationController;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->unregisterTaskStackListener(Landroid/app/ITaskStackListener;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->unregisterTaskStackListener(Landroid/app/ITaskStackListener;)V
 HSPLcom/android/server/wm/TaskLaunchParamsModifier;-><init>(Lcom/android/server/wm/ActivityStackSupervisor;)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;ILcom/android/server/wm/LaunchParamsController$LaunchParams;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)I
-PLcom/android/server/wm/TaskLaunchParamsModifier;->canApplyFreeformWindowPolicy(Lcom/android/server/wm/DisplayContent;I)Z
+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;ILcom/android/server/wm/LaunchParamsController$LaunchParams;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)I
+HSPLcom/android/server/wm/TaskLaunchParamsModifier;->canApplyFreeformWindowPolicy(Lcom/android/server/wm/DisplayContent;I)Z
 HPLcom/android/server/wm/TaskLaunchParamsModifier;->canInheritWindowingModeFromSource(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/TaskLaunchParamsModifier;->getPreferredLaunchDisplay(Lcom/android/server/wm/Task;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)I
-PLcom/android/server/wm/TaskLaunchParamsModifier;->initLogBuilder(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/TaskLaunchParamsModifier;->onCalculate(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;ILcom/android/server/wm/LaunchParamsController$LaunchParams;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)I
-PLcom/android/server/wm/TaskLaunchParamsModifier;->outputLog()V
+HSPLcom/android/server/wm/TaskLaunchParamsModifier;->getPreferredLaunchDisplay(Lcom/android/server/wm/Task;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)I
+HSPLcom/android/server/wm/TaskLaunchParamsModifier;->initLogBuilder(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/TaskLaunchParamsModifier;->onCalculate(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;ILcom/android/server/wm/LaunchParamsController$LaunchParams;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)I
+HSPLcom/android/server/wm/TaskLaunchParamsModifier;->outputLog()V
+HSPLcom/android/server/wm/TaskOrganizerController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
+HSPLcom/android/server/wm/TaskOrganizerController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/WindowManagerGlobalLock;)V
+HPLcom/android/server/wm/TaskOrganizerController;->applyContainerTransaction(Landroid/view/WindowContainerTransaction;)V
+PLcom/android/server/wm/TaskOrganizerController;->applyWindowContainerChange(Lcom/android/server/wm/WindowContainer;Landroid/view/WindowContainerTransaction$Change;)I
+HSPLcom/android/server/wm/TaskOrganizerController;->dispatchPendingTaskInfoChanges()V
+PLcom/android/server/wm/TaskOrganizerController;->enforceStackPermission(Ljava/lang/String;)V
+HSPLcom/android/server/wm/TaskOrganizerController;->getTaskOrganizer(I)Landroid/view/ITaskOrganizer;
+PLcom/android/server/wm/TaskOrganizerController;->resizePinnedStackIfNeeded(Lcom/android/server/wm/ConfigurationContainer;IILandroid/content/res/Configuration;)V
+PLcom/android/server/wm/TaskOrganizerController;->sanitizeAndApplyChange(Lcom/android/server/wm/WindowContainer;Landroid/view/WindowContainerTransaction$Change;)I
 PLcom/android/server/wm/TaskPersister$1;-><init>(Lcom/android/server/wm/TaskPersister;)V
 PLcom/android/server/wm/TaskPersister$1;->compare(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;)I
 PLcom/android/server/wm/TaskPersister$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLcom/android/server/wm/TaskPersister$ImageWriteQueueItem;-><init>(Ljava/lang/String;Landroid/graphics/Bitmap;)V
-PLcom/android/server/wm/TaskPersister$ImageWriteQueueItem;->matches(Lcom/android/server/wm/PersisterQueue$WriteQueueItem;)Z
-PLcom/android/server/wm/TaskPersister$ImageWriteQueueItem;->matches(Lcom/android/server/wm/TaskPersister$ImageWriteQueueItem;)Z
-PLcom/android/server/wm/TaskPersister$ImageWriteQueueItem;->process()V
+HPLcom/android/server/wm/TaskPersister$ImageWriteQueueItem;-><init>(Ljava/lang/String;Landroid/graphics/Bitmap;)V
+HPLcom/android/server/wm/TaskPersister$ImageWriteQueueItem;->matches(Lcom/android/server/wm/PersisterQueue$WriteQueueItem;)Z
+HPLcom/android/server/wm/TaskPersister$ImageWriteQueueItem;->matches(Lcom/android/server/wm/TaskPersister$ImageWriteQueueItem;)Z
+HPLcom/android/server/wm/TaskPersister$ImageWriteQueueItem;->process()V
 PLcom/android/server/wm/TaskPersister$ImageWriteQueueItem;->updateFrom(Lcom/android/server/wm/PersisterQueue$WriteQueueItem;)V
 PLcom/android/server/wm/TaskPersister$ImageWriteQueueItem;->updateFrom(Lcom/android/server/wm/TaskPersister$ImageWriteQueueItem;)V
-PLcom/android/server/wm/TaskPersister$TaskWriteQueueItem;-><init>(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityTaskManagerService;)V
+HPLcom/android/server/wm/TaskPersister$TaskWriteQueueItem;-><init>(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityTaskManagerService;)V
 PLcom/android/server/wm/TaskPersister$TaskWriteQueueItem;->access$200(Lcom/android/server/wm/TaskPersister$TaskWriteQueueItem;)Lcom/android/server/wm/Task;
-PLcom/android/server/wm/TaskPersister$TaskWriteQueueItem;->process()V
+HPLcom/android/server/wm/TaskPersister$TaskWriteQueueItem;->process()V
 HPLcom/android/server/wm/TaskPersister$TaskWriteQueueItem;->saveToXml(Lcom/android/server/wm/Task;)Ljava/io/StringWriter;
 HSPLcom/android/server/wm/TaskPersister;-><init>(Ljava/io/File;Lcom/android/server/wm/ActivityStackSupervisor;Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/PersisterQueue;)V
-PLcom/android/server/wm/TaskPersister;->access$000(I)Ljava/io/File;
-PLcom/android/server/wm/TaskPersister;->getUserPersistedTaskIdsFile(I)Ljava/io/File;
-PLcom/android/server/wm/TaskPersister;->getUserTasksDir(I)Ljava/io/File;
+HPLcom/android/server/wm/TaskPersister;->access$000(I)Ljava/io/File;
+PLcom/android/server/wm/TaskPersister;->access$100(Ljava/lang/String;)Z
+HPLcom/android/server/wm/TaskPersister;->createParentDirectory(Ljava/lang/String;)Z
+PLcom/android/server/wm/TaskPersister;->getImageFromWriteQueue(Ljava/lang/String;)Landroid/graphics/Bitmap;
+PLcom/android/server/wm/TaskPersister;->getTaskDescriptionIcon(Ljava/lang/String;)Landroid/graphics/Bitmap;
+HPLcom/android/server/wm/TaskPersister;->getUserImagesDir(I)Ljava/io/File;
+HSPLcom/android/server/wm/TaskPersister;->getUserPersistedTaskIdsFile(I)Ljava/io/File;
+HPLcom/android/server/wm/TaskPersister;->getUserTasksDir(I)Ljava/io/File;
+PLcom/android/server/wm/TaskPersister;->lambda$getImageFromWriteQueue$2(Ljava/lang/String;Lcom/android/server/wm/TaskPersister$ImageWriteQueueItem;)Z
 PLcom/android/server/wm/TaskPersister;->lambda$removeThumbnails$0(Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskPersister$ImageWriteQueueItem;)Z
 PLcom/android/server/wm/TaskPersister;->lambda$wakeup$1(Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskPersister$TaskWriteQueueItem;)Z
-PLcom/android/server/wm/TaskPersister;->loadPersistedTaskIdsForUser(I)Landroid/util/SparseBooleanArray;
-PLcom/android/server/wm/TaskPersister;->onPreProcessItem(Z)V
-PLcom/android/server/wm/TaskPersister;->removeObsoleteFiles(Landroid/util/ArraySet;)V
-PLcom/android/server/wm/TaskPersister;->removeObsoleteFiles(Landroid/util/ArraySet;[Ljava/io/File;)V
+HSPLcom/android/server/wm/TaskPersister;->loadPersistedTaskIdsForUser(I)Landroid/util/SparseBooleanArray;
+HPLcom/android/server/wm/TaskPersister;->onPreProcessItem(Z)V
+HPLcom/android/server/wm/TaskPersister;->removeObsoleteFiles(Landroid/util/ArraySet;)V
+HPLcom/android/server/wm/TaskPersister;->removeObsoleteFiles(Landroid/util/ArraySet;[Ljava/io/File;)V
 PLcom/android/server/wm/TaskPersister;->removeThumbnails(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/TaskPersister;->restoreTasksForUserLocked(ILandroid/util/SparseBooleanArray;)Ljava/util/List;
+PLcom/android/server/wm/TaskPersister;->restoreImage(Ljava/lang/String;)Landroid/graphics/Bitmap;
+HPLcom/android/server/wm/TaskPersister;->restoreTasksForUserLocked(ILandroid/util/SparseBooleanArray;)Ljava/util/List;
+PLcom/android/server/wm/TaskPersister;->saveImage(Landroid/graphics/Bitmap;Ljava/lang/String;)V
 PLcom/android/server/wm/TaskPersister;->taskIdToTask(ILjava/util/ArrayList;)Lcom/android/server/wm/Task;
+PLcom/android/server/wm/TaskPersister;->unloadUserDataFromMemory(I)V
 HPLcom/android/server/wm/TaskPersister;->wakeup(Lcom/android/server/wm/Task;Z)V
-PLcom/android/server/wm/TaskPersister;->writePersistedTaskIdsForUser(Landroid/util/SparseBooleanArray;I)V
-PLcom/android/server/wm/TaskPersister;->writeTaskIdsFiles()V
+HPLcom/android/server/wm/TaskPersister;->writePersistedTaskIdsForUser(Landroid/util/SparseBooleanArray;I)V
+HPLcom/android/server/wm/TaskPersister;->writeTaskIdsFiles()V
 HSPLcom/android/server/wm/TaskPositioningController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/input/InputManagerService;Landroid/app/IActivityTaskManager;Landroid/os/Looper;)V
+PLcom/android/server/wm/TaskPositioningController;->handleTapOutsideTask(Lcom/android/server/wm/DisplayContent;II)V
 HSPLcom/android/server/wm/TaskPositioningController;->hideInputSurface(Landroid/view/SurfaceControl$Transaction;I)V
 HSPLcom/android/server/wm/TaskPositioningController;->isPositioningLocked()Z
 PLcom/android/server/wm/TaskPositioningController;->lambda$handleTapOutsideTask$0$TaskPositioningController(Lcom/android/server/wm/DisplayContent;II)V
-PLcom/android/server/wm/TaskSnapshotCache$CacheEntry;-><init>(Landroid/app/ActivityManager$TaskSnapshot;Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/TaskScreenshotAnimatable;-><init>(Ljava/util/function/Function;Lcom/android/server/wm/Task;Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;)V
+PLcom/android/server/wm/TaskScreenshotAnimatable;->commitPendingTransaction()V
+PLcom/android/server/wm/TaskScreenshotAnimatable;->getAnimationLeashParent()Landroid/view/SurfaceControl;
+PLcom/android/server/wm/TaskScreenshotAnimatable;->getParentSurfaceControl()Landroid/view/SurfaceControl;
+PLcom/android/server/wm/TaskScreenshotAnimatable;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
+PLcom/android/server/wm/TaskScreenshotAnimatable;->getSurfaceControl()Landroid/view/SurfaceControl;
+PLcom/android/server/wm/TaskScreenshotAnimatable;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
+PLcom/android/server/wm/TaskScreenshotAnimatable;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/TaskSnapshotCache$CacheEntry;-><init>(Landroid/app/ActivityManager$TaskSnapshot;Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/TaskSnapshotCache;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/TaskSnapshotLoader;)V
 HSPLcom/android/server/wm/TaskSnapshotCache;->clearRunningCache()V
-PLcom/android/server/wm/TaskSnapshotCache;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/wm/TaskSnapshotCache;->getSnapshot(IIZZ)Landroid/app/ActivityManager$TaskSnapshot;
-PLcom/android/server/wm/TaskSnapshotCache;->onAppRemoved(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/TaskSnapshotCache;->putSnapshot(Lcom/android/server/wm/Task;Landroid/app/ActivityManager$TaskSnapshot;)V
-PLcom/android/server/wm/TaskSnapshotCache;->removeRunningEntry(I)V
+HPLcom/android/server/wm/TaskSnapshotCache;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/TaskSnapshotCache;->getSnapshot(IIZZ)Landroid/app/ActivityManager$TaskSnapshot;
+HPLcom/android/server/wm/TaskSnapshotCache;->onAppDied(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/TaskSnapshotCache;->onAppRemoved(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/TaskSnapshotCache;->onTaskRemoved(I)V
+HPLcom/android/server/wm/TaskSnapshotCache;->putSnapshot(Lcom/android/server/wm/Task;Landroid/app/ActivityManager$TaskSnapshot;)V
+HPLcom/android/server/wm/TaskSnapshotCache;->removeRunningEntry(I)V
 PLcom/android/server/wm/TaskSnapshotCache;->tryRestoreFromDisk(IIZ)Landroid/app/ActivityManager$TaskSnapshot;
 HSPLcom/android/server/wm/TaskSnapshotController;-><init>(Lcom/android/server/wm/WindowManagerService;)V
-PLcom/android/server/wm/TaskSnapshotController;->addSkipClosingAppSnapshotTasks(Landroid/util/ArraySet;)V
+HPLcom/android/server/wm/TaskSnapshotController;->addSkipClosingAppSnapshotTasks(Landroid/util/ArraySet;)V
 HSPLcom/android/server/wm/TaskSnapshotController;->clearSnapshotCache()V
-PLcom/android/server/wm/TaskSnapshotController;->createStartingSurface(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskSnapshot;)Lcom/android/server/policy/WindowManagerPolicy$StartingSurface;
+HPLcom/android/server/wm/TaskSnapshotController;->createStartingSurface(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskSnapshot;)Lcom/android/server/policy/WindowManagerPolicy$StartingSurface;
 HPLcom/android/server/wm/TaskSnapshotController;->createTaskSnapshot(Lcom/android/server/wm/Task;FI)Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;
-PLcom/android/server/wm/TaskSnapshotController;->drawAppThemeSnapshot(Lcom/android/server/wm/Task;)Landroid/app/ActivityManager$TaskSnapshot;
-PLcom/android/server/wm/TaskSnapshotController;->getClosingTasks(Landroid/util/ArraySet;Landroid/util/ArraySet;)V
-PLcom/android/server/wm/TaskSnapshotController;->getSnapshot(IIZZ)Landroid/app/ActivityManager$TaskSnapshot;
-PLcom/android/server/wm/TaskSnapshotController;->getSnapshotMode(Lcom/android/server/wm/Task;)I
-PLcom/android/server/wm/TaskSnapshotController;->handleClosingApps(Landroid/util/ArraySet;)V
-PLcom/android/server/wm/TaskSnapshotController;->lambda$findAppTokenForSnapshot$1(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/TaskSnapshotController;->drawAppThemeSnapshot(Lcom/android/server/wm/Task;)Landroid/app/ActivityManager$TaskSnapshot;
+PLcom/android/server/wm/TaskSnapshotController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/TaskSnapshotController;->findAppTokenForSnapshot(Lcom/android/server/wm/Task;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/TaskSnapshotController;->getClosingTasks(Landroid/util/ArraySet;Landroid/util/ArraySet;)V
+HPLcom/android/server/wm/TaskSnapshotController;->getInsets(Lcom/android/server/wm/WindowState;)Landroid/graphics/Rect;
+HPLcom/android/server/wm/TaskSnapshotController;->getSnapshot(IIZZ)Landroid/app/ActivityManager$TaskSnapshot;
+HPLcom/android/server/wm/TaskSnapshotController;->getSnapshotMode(Lcom/android/server/wm/Task;)I
+HPLcom/android/server/wm/TaskSnapshotController;->getSystemUiVisibility(Lcom/android/server/wm/Task;)I
+HSPLcom/android/server/wm/TaskSnapshotController;->handleClosingApps(Landroid/util/ArraySet;)V
+PLcom/android/server/wm/TaskSnapshotController;->lambda$findAppTokenForSnapshot$0(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/TaskSnapshotController;->lambda$findAppTokenForSnapshot$1(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/TaskSnapshotController;->lambda$screenTurningOff$2$TaskSnapshotController(Lcom/android/server/wm/Task;)V
 HPLcom/android/server/wm/TaskSnapshotController;->lambda$screenTurningOff$3$TaskSnapshotController(Lcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;)V
-PLcom/android/server/wm/TaskSnapshotController;->minRect(Landroid/graphics/Rect;Landroid/graphics/Rect;)Landroid/graphics/Rect;
-PLcom/android/server/wm/TaskSnapshotController;->notifyAppVisibilityChanged(Lcom/android/server/wm/ActivityRecord;Z)V
+HPLcom/android/server/wm/TaskSnapshotController;->minRect(Landroid/graphics/Rect;Landroid/graphics/Rect;)Landroid/graphics/Rect;
+HSPLcom/android/server/wm/TaskSnapshotController;->notifyAppVisibilityChanged(Lcom/android/server/wm/ActivityRecord;Z)V
 PLcom/android/server/wm/TaskSnapshotController;->notifyTaskRemovedFromRecents(II)V
+PLcom/android/server/wm/TaskSnapshotController;->onAppDied(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/TaskSnapshotController;->onAppRemoved(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/TaskSnapshotController;->onTransitionStarting(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/TaskSnapshotController;->onTransitionStarting(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/TaskSnapshotController;->prepareTaskSnapshot(Lcom/android/server/wm/Task;FILandroid/app/ActivityManager$TaskSnapshot$Builder;)Z
 PLcom/android/server/wm/TaskSnapshotController;->removeObsoleteTaskFiles(Landroid/util/ArraySet;[I)V
 PLcom/android/server/wm/TaskSnapshotController;->removeSnapshotCache(I)V
-PLcom/android/server/wm/TaskSnapshotController;->screenTurningOff(Lcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;)V
+HPLcom/android/server/wm/TaskSnapshotController;->screenTurningOff(Lcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;)V
 PLcom/android/server/wm/TaskSnapshotController;->setPersisterPaused(Z)V
-PLcom/android/server/wm/TaskSnapshotController;->shouldDisableSnapshots()Z
+HSPLcom/android/server/wm/TaskSnapshotController;->shouldDisableSnapshots()Z
 PLcom/android/server/wm/TaskSnapshotController;->snapshotTask(Lcom/android/server/wm/Task;)Landroid/app/ActivityManager$TaskSnapshot;
-PLcom/android/server/wm/TaskSnapshotController;->snapshotTasks(Landroid/util/ArraySet;)V
-HPLcom/android/server/wm/TaskSnapshotController;->snapshotTasks(Landroid/util/ArraySet;Z)V
+HPLcom/android/server/wm/TaskSnapshotController;->snapshotTask(Lcom/android/server/wm/Task;FI)Landroid/app/ActivityManager$TaskSnapshot;
+HSPLcom/android/server/wm/TaskSnapshotController;->snapshotTasks(Landroid/util/ArraySet;)V
+HSPLcom/android/server/wm/TaskSnapshotController;->snapshotTasks(Landroid/util/ArraySet;Z)V
 HSPLcom/android/server/wm/TaskSnapshotController;->systemReady()V
 HSPLcom/android/server/wm/TaskSnapshotLoader;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;)V
-PLcom/android/server/wm/TaskSnapshotLoader;->loadTask(IIZ)Landroid/app/ActivityManager$TaskSnapshot;
+HPLcom/android/server/wm/TaskSnapshotLoader;->loadTask(IIZ)Landroid/app/ActivityManager$TaskSnapshot;
 HSPLcom/android/server/wm/TaskSnapshotPersister$1;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;Ljava/lang/String;)V
 HSPLcom/android/server/wm/TaskSnapshotPersister$1;->run()V
 PLcom/android/server/wm/TaskSnapshotPersister$DeleteWriteQueueItem;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;II)V
 PLcom/android/server/wm/TaskSnapshotPersister$DeleteWriteQueueItem;->write()V
 HPLcom/android/server/wm/TaskSnapshotPersister$RemoveObsoleteFilesQueueItem;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;Landroid/util/ArraySet;[I)V
-PLcom/android/server/wm/TaskSnapshotPersister$RemoveObsoleteFilesQueueItem;->getTaskId(Ljava/lang/String;)I
+HPLcom/android/server/wm/TaskSnapshotPersister$RemoveObsoleteFilesQueueItem;->getTaskId(Ljava/lang/String;)I
 HPLcom/android/server/wm/TaskSnapshotPersister$RemoveObsoleteFilesQueueItem;->write()V
 PLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;IILandroid/app/ActivityManager$TaskSnapshot;)V
+PLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->access$000(Lcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;)I
 PLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->onDequeuedLocked()V
-PLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->onQueuedLocked()V
-PLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->write()V
-PLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->writeBuffer()Z
-PLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->writeProto()Z
-PLcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;)V
-PLcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;Lcom/android/server/wm/TaskSnapshotPersister$1;)V
+HPLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->onQueuedLocked()V
+HPLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->write()V
+HPLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->writeBuffer()Z
+HPLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->writeProto()Z
+HPLcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;)V
+HPLcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;Lcom/android/server/wm/TaskSnapshotPersister$1;)V
 PLcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;->onDequeuedLocked()V
-PLcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;->onQueuedLocked()V
+HPLcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;->onQueuedLocked()V
 HSPLcom/android/server/wm/TaskSnapshotPersister;-><clinit>()V
 HSPLcom/android/server/wm/TaskSnapshotPersister;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/TaskSnapshotPersister$DirectoryResolver;)V
 HSPLcom/android/server/wm/TaskSnapshotPersister;->access$100(Lcom/android/server/wm/TaskSnapshotPersister;)Ljava/lang/Object;
+PLcom/android/server/wm/TaskSnapshotPersister;->access$1000(Lcom/android/server/wm/TaskSnapshotPersister;)F
 PLcom/android/server/wm/TaskSnapshotPersister;->access$1100(Lcom/android/server/wm/TaskSnapshotPersister;)Landroid/util/ArraySet;
 HSPLcom/android/server/wm/TaskSnapshotPersister;->access$200(Lcom/android/server/wm/TaskSnapshotPersister;)Z
 HSPLcom/android/server/wm/TaskSnapshotPersister;->access$300(Lcom/android/server/wm/TaskSnapshotPersister;)Ljava/util/ArrayDeque;
 HSPLcom/android/server/wm/TaskSnapshotPersister;->access$402(Lcom/android/server/wm/TaskSnapshotPersister;Z)Z
-PLcom/android/server/wm/TaskSnapshotPersister;->ensureStoreQueueDepthLocked()V
-PLcom/android/server/wm/TaskSnapshotPersister;->getBitmapFile(II)Ljava/io/File;
-PLcom/android/server/wm/TaskSnapshotPersister;->getDirectory(I)Ljava/io/File;
-PLcom/android/server/wm/TaskSnapshotPersister;->getProtoFile(II)Ljava/io/File;
-PLcom/android/server/wm/TaskSnapshotPersister;->getReducedResolutionBitmapFile(II)Ljava/io/File;
+PLcom/android/server/wm/TaskSnapshotPersister;->access$600(Lcom/android/server/wm/TaskSnapshotPersister;)Ljava/util/ArrayDeque;
+PLcom/android/server/wm/TaskSnapshotPersister;->access$700(Lcom/android/server/wm/TaskSnapshotPersister;I)Z
+HPLcom/android/server/wm/TaskSnapshotPersister;->access$800(Lcom/android/server/wm/TaskSnapshotPersister;I)Ljava/io/File;
+PLcom/android/server/wm/TaskSnapshotPersister;->access$900(Lcom/android/server/wm/TaskSnapshotPersister;II)V
+HPLcom/android/server/wm/TaskSnapshotPersister;->createDirectory(I)Z
+HPLcom/android/server/wm/TaskSnapshotPersister;->deleteSnapshot(II)V
+HPLcom/android/server/wm/TaskSnapshotPersister;->ensureStoreQueueDepthLocked()V
+HPLcom/android/server/wm/TaskSnapshotPersister;->getBitmapFile(II)Ljava/io/File;
+HPLcom/android/server/wm/TaskSnapshotPersister;->getDirectory(I)Ljava/io/File;
+HPLcom/android/server/wm/TaskSnapshotPersister;->getProtoFile(II)Ljava/io/File;
+HPLcom/android/server/wm/TaskSnapshotPersister;->getReducedResolutionBitmapFile(II)Ljava/io/File;
 PLcom/android/server/wm/TaskSnapshotPersister;->getReducedScale()F
-PLcom/android/server/wm/TaskSnapshotPersister;->onTaskRemovedFromRecents(II)V
-PLcom/android/server/wm/TaskSnapshotPersister;->persistSnapshot(IILandroid/app/ActivityManager$TaskSnapshot;)V
-PLcom/android/server/wm/TaskSnapshotPersister;->removeObsoleteFiles(Landroid/util/ArraySet;[I)V
-PLcom/android/server/wm/TaskSnapshotPersister;->sendToQueueLocked(Lcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;)V
-PLcom/android/server/wm/TaskSnapshotPersister;->setPaused(Z)V
+HPLcom/android/server/wm/TaskSnapshotPersister;->onTaskRemovedFromRecents(II)V
+HPLcom/android/server/wm/TaskSnapshotPersister;->persistSnapshot(IILandroid/app/ActivityManager$TaskSnapshot;)V
+HPLcom/android/server/wm/TaskSnapshotPersister;->removeObsoleteFiles(Landroid/util/ArraySet;[I)V
+HPLcom/android/server/wm/TaskSnapshotPersister;->sendToQueueLocked(Lcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;)V
+HPLcom/android/server/wm/TaskSnapshotPersister;->setPaused(Z)V
 HSPLcom/android/server/wm/TaskSnapshotPersister;->start()V
 PLcom/android/server/wm/TaskSnapshotPersister;->use16BitFormat()Z
 PLcom/android/server/wm/TaskSnapshotSurface$1;-><init>(Landroid/os/Looper;)V
+PLcom/android/server/wm/TaskSnapshotSurface$1;->handleMessage(Landroid/os/Message;)V
 HPLcom/android/server/wm/TaskSnapshotSurface$SystemBarBackgroundPainter;-><init>(IIILandroid/app/ActivityManager$TaskDescription;FLandroid/view/InsetsState;)V
 PLcom/android/server/wm/TaskSnapshotSurface$SystemBarBackgroundPainter;->drawDecors(Landroid/graphics/Canvas;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/TaskSnapshotSurface$SystemBarBackgroundPainter;->drawNavigationBarBackground(Landroid/graphics/Canvas;)V
+HPLcom/android/server/wm/TaskSnapshotSurface$SystemBarBackgroundPainter;->drawNavigationBarBackground(Landroid/graphics/Canvas;)V
 PLcom/android/server/wm/TaskSnapshotSurface$SystemBarBackgroundPainter;->drawStatusBarBackground(Landroid/graphics/Canvas;Landroid/graphics/Rect;I)V
 PLcom/android/server/wm/TaskSnapshotSurface$SystemBarBackgroundPainter;->getStatusBarColorViewHeight()I
 PLcom/android/server/wm/TaskSnapshotSurface$SystemBarBackgroundPainter;->isNavigationBarColorViewVisible()Z
-PLcom/android/server/wm/TaskSnapshotSurface$SystemBarBackgroundPainter;->setInsets(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/TaskSnapshotSurface$Window;-><init>()V
-PLcom/android/server/wm/TaskSnapshotSurface$Window;->resized(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZILandroid/view/DisplayCutout$ParcelableWrapper;)V
+HPLcom/android/server/wm/TaskSnapshotSurface$SystemBarBackgroundPainter;->setInsets(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/TaskSnapshotSurface$Window;-><init>()V
+HPLcom/android/server/wm/TaskSnapshotSurface$Window;->resized(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZILandroid/view/DisplayCutout$ParcelableWrapper;)V
 PLcom/android/server/wm/TaskSnapshotSurface$Window;->setOuter(Lcom/android/server/wm/TaskSnapshotSurface;)V
 PLcom/android/server/wm/TaskSnapshotSurface;-><clinit>()V
 HPLcom/android/server/wm/TaskSnapshotSurface;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/TaskSnapshotSurface$Window;Landroid/view/SurfaceControl;Landroid/app/ActivityManager$TaskSnapshot;Ljava/lang/CharSequence;Landroid/app/ActivityManager$TaskDescription;IIILandroid/graphics/Rect;ILandroid/view/InsetsState;)V
+PLcom/android/server/wm/TaskSnapshotSurface;->access$000(Lcom/android/server/wm/TaskSnapshotSurface;)Lcom/android/server/wm/WindowManagerService;
+PLcom/android/server/wm/TaskSnapshotSurface;->access$100(Lcom/android/server/wm/TaskSnapshotSurface;)Z
+PLcom/android/server/wm/TaskSnapshotSurface;->access$200(Lcom/android/server/wm/TaskSnapshotSurface;)V
 PLcom/android/server/wm/TaskSnapshotSurface;->access$300(Lcom/android/server/wm/TaskSnapshotSurface;)I
+PLcom/android/server/wm/TaskSnapshotSurface;->access$400()Landroid/os/Handler;
+PLcom/android/server/wm/TaskSnapshotSurface;->calculateSnapshotCrop()Landroid/graphics/Rect;
+PLcom/android/server/wm/TaskSnapshotSurface;->calculateSnapshotFrame(Landroid/graphics/Rect;)Landroid/graphics/Rect;
 HPLcom/android/server/wm/TaskSnapshotSurface;->create(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskSnapshot;)Lcom/android/server/wm/TaskSnapshotSurface;
+PLcom/android/server/wm/TaskSnapshotSurface;->drawBackgroundAndBars(Landroid/graphics/Canvas;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/TaskSnapshotSurface;->drawSizeMismatchSnapshot()V
-PLcom/android/server/wm/TaskSnapshotSurface;->drawSnapshot()V
-PLcom/android/server/wm/TaskSnapshotSurface;->remove()V
-PLcom/android/server/wm/TaskSnapshotSurface;->reportDrawn()V
-PLcom/android/server/wm/TaskSnapshotSurface;->setFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/TaskSnapshotSurface;->drawSnapshot()V
+HPLcom/android/server/wm/TaskSnapshotSurface;->remove()V
+HPLcom/android/server/wm/TaskSnapshotSurface;->reportDrawn()V
+HPLcom/android/server/wm/TaskSnapshotSurface;->setFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/TaskTapPointerEventListener;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/TaskTapPointerEventListener;->onPointerEvent(Landroid/view/MotionEvent;)V
 HSPLcom/android/server/wm/TaskTapPointerEventListener;->setTouchExcludeRegion(Landroid/graphics/Region;)V
 HSPLcom/android/server/wm/UnknownAppVisibilityController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/UnknownAppVisibilityController;->allResolved()Z
-PLcom/android/server/wm/UnknownAppVisibilityController;->appRemovedOrHidden(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/UnknownAppVisibilityController;->clear()V
+HSPLcom/android/server/wm/UnknownAppVisibilityController;->allResolved()Z
+HPLcom/android/server/wm/UnknownAppVisibilityController;->appRemovedOrHidden(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/UnknownAppVisibilityController;->clear()V
 PLcom/android/server/wm/UnknownAppVisibilityController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/UnknownAppVisibilityController;->lambda$FYhcjOhYWVp6HX5hr3GGaPg67Gc(Lcom/android/server/wm/UnknownAppVisibilityController;)V
-PLcom/android/server/wm/UnknownAppVisibilityController;->notifyAppResumedFinished(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/UnknownAppVisibilityController;->notifyLaunched(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/UnknownAppVisibilityController;->notifyRelayouted(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/UnknownAppVisibilityController;->notifyVisibilitiesUpdated()V
+HSPLcom/android/server/wm/UnknownAppVisibilityController;->notifyAppResumedFinished(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/UnknownAppVisibilityController;->notifyLaunched(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/UnknownAppVisibilityController;->notifyRelayouted(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/UnknownAppVisibilityController;->notifyVisibilitiesUpdated()V
 HSPLcom/android/server/wm/VrController$1;-><init>(Lcom/android/server/wm/VrController;)V
 HSPLcom/android/server/wm/VrController;-><clinit>()V
 HSPLcom/android/server/wm/VrController;-><init>(Ljava/lang/Object;)V
-PLcom/android/server/wm/VrController;->clearVrRenderThreadLocked(Z)V
+HSPLcom/android/server/wm/VrController;->changeVrModeLocked(ZLcom/android/server/wm/WindowProcessController;)Z
+HSPLcom/android/server/wm/VrController;->clearVrRenderThreadLocked(Z)V
 PLcom/android/server/wm/VrController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/VrController;->hasPersistentVrFlagSet()Z
-PLcom/android/server/wm/VrController;->inVrMode()Z
+HPLcom/android/server/wm/VrController;->hasPersistentVrFlagSet()Z
+HPLcom/android/server/wm/VrController;->inVrMode()Z
 HSPLcom/android/server/wm/VrController;->onSystemReady()V
-PLcom/android/server/wm/VrController;->onTopProcChangedLocked(Lcom/android/server/wm/WindowProcessController;)V
-PLcom/android/server/wm/VrController;->onVrModeChanged(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/VrController;->setVrRenderThreadLocked(IIZ)I
+HSPLcom/android/server/wm/VrController;->onTopProcChangedLocked(Lcom/android/server/wm/WindowProcessController;)V
+HSPLcom/android/server/wm/VrController;->onVrModeChanged(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/VrController;->setVrRenderThreadLocked(IIZ)I
+PLcom/android/server/wm/VrController;->shouldDisableNonVrUiLocked()Z
 HSPLcom/android/server/wm/VrController;->toString()Ljava/lang/String;
-PLcom/android/server/wm/VrController;->updateVrRenderThreadLocked(IZ)I
-PLcom/android/server/wm/WallpaperAnimationAdapter;-><init>(Lcom/android/server/wm/WallpaperWindowToken;JJLjava/util/function/Consumer;)V
+HSPLcom/android/server/wm/VrController;->updateVrRenderThreadLocked(IZ)I
+HPLcom/android/server/wm/WallpaperAnimationAdapter;-><init>(Lcom/android/server/wm/WallpaperWindowToken;JJLjava/util/function/Consumer;)V
 HPLcom/android/server/wm/WallpaperAnimationAdapter;->createRemoteAnimationTarget()Landroid/view/RemoteAnimationTarget;
+PLcom/android/server/wm/WallpaperAnimationAdapter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;)V
+PLcom/android/server/wm/WallpaperAnimationAdapter;->getLastAnimationType()I
 PLcom/android/server/wm/WallpaperAnimationAdapter;->getLeash()Landroid/view/SurfaceControl;
 PLcom/android/server/wm/WallpaperAnimationAdapter;->getLeashFinishedCallback()Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;
-PLcom/android/server/wm/WallpaperAnimationAdapter;->lambda$startWallpaperAnimations$0(JJLjava/util/function/Consumer;Ljava/util/ArrayList;Ljava/util/ArrayList;Lcom/android/server/wm/WallpaperWindowToken;)V
+HPLcom/android/server/wm/WallpaperAnimationAdapter;->lambda$startWallpaperAnimations$0(JJLjava/util/function/Consumer;Ljava/util/ArrayList;Ljava/util/ArrayList;Lcom/android/server/wm/WallpaperWindowToken;)V
 PLcom/android/server/wm/WallpaperAnimationAdapter;->onAnimationCancelled(Landroid/view/SurfaceControl;)V
-PLcom/android/server/wm/WallpaperAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
-PLcom/android/server/wm/WallpaperAnimationAdapter;->startWallpaperAnimations(Lcom/android/server/wm/WindowManagerService;JJLjava/util/function/Consumer;Ljava/util/ArrayList;)[Landroid/view/RemoteAnimationTarget;
+HPLcom/android/server/wm/WallpaperAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;ILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+HPLcom/android/server/wm/WallpaperAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+HPLcom/android/server/wm/WallpaperAnimationAdapter;->startWallpaperAnimations(Lcom/android/server/wm/WindowManagerService;JJLjava/util/function/Consumer;Ljava/util/ArrayList;)[Landroid/view/RemoteAnimationTarget;
 HSPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;-><init>()V
 HSPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;-><init>(Lcom/android/server/wm/WallpaperController$1;)V
-PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->reset()V
-PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setTopWallpaper(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->reset()V
+HSPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setTopWallpaper(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setUseTopWallpaperAsTarget(Z)V
-PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setWallpaperTarget(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setWallpaperTarget(Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/WallpaperController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/WallpaperController;->addWallpaperToken(Lcom/android/server/wm/WallpaperWindowToken;)V
-PLcom/android/server/wm/WallpaperController;->adjustWallpaperWindows()V
-PLcom/android/server/wm/WallpaperController;->adjustWallpaperWindowsForAppTransitionIfNeeded(Landroid/util/ArraySet;Landroid/util/ArraySet;)V
-PLcom/android/server/wm/WallpaperController;->clearLastWallpaperTimeoutTime()V
+HSPLcom/android/server/wm/WallpaperController;->addWallpaperToken(Lcom/android/server/wm/WallpaperWindowToken;)V
+HSPLcom/android/server/wm/WallpaperController;->adjustWallpaperWindows()V
+HSPLcom/android/server/wm/WallpaperController;->adjustWallpaperWindowsForAppTransitionIfNeeded(Landroid/util/ArraySet;Landroid/util/ArraySet;)V
+HSPLcom/android/server/wm/WallpaperController;->clearLastWallpaperTimeoutTime()V
 HSPLcom/android/server/wm/WallpaperController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/wm/WallpaperController;->findWallpaperTarget()V
-PLcom/android/server/wm/WallpaperController;->getWallpaperTarget()Lcom/android/server/wm/WindowState;
-PLcom/android/server/wm/WallpaperController;->hideDeferredWallpapersIfNeeded()V
+HSPLcom/android/server/wm/WallpaperController;->findWallpaperTarget()V
+HSPLcom/android/server/wm/WallpaperController;->getWallpaperTarget()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WallpaperController;->hideDeferredWallpapersIfNeeded()V
 HPLcom/android/server/wm/WallpaperController;->hideWallpapers(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/WallpaperController;->isBelowWallpaperTarget(Lcom/android/server/wm/WindowState;)Z
-PLcom/android/server/wm/WallpaperController;->isWallpaperTarget(Lcom/android/server/wm/WindowState;)Z
-PLcom/android/server/wm/WallpaperController;->isWallpaperTargetAnimating()Z
+HPLcom/android/server/wm/WallpaperController;->isBelowWallpaperTarget(Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/WallpaperController;->isFullscreen(Landroid/view/WindowManager$LayoutParams;)Z
+HSPLcom/android/server/wm/WallpaperController;->isWallpaperTarget(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/WallpaperController;->isWallpaperTargetAnimating()Z
 HSPLcom/android/server/wm/WallpaperController;->isWallpaperVisible()Z
 HSPLcom/android/server/wm/WallpaperController;->isWallpaperVisible(Lcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/WallpaperController;->lambda$new$0$WallpaperController(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/WallpaperController;->lambda$new$0$WallpaperController(Lcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/WallpaperController;->lambda$updateWallpaperWindowsTarget$1(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/WallpaperController;->processWallpaperDrawPendingTimeout()Z
+PLcom/android/server/wm/WallpaperController;->removeWallpaperToken(Lcom/android/server/wm/WallpaperWindowToken;)V
 PLcom/android/server/wm/WallpaperController;->sendWindowWallpaperCommand(Lcom/android/server/wm/WindowState;Ljava/lang/String;IIILandroid/os/Bundle;Z)Landroid/os/Bundle;
-PLcom/android/server/wm/WallpaperController;->setWindowWallpaperPosition(Lcom/android/server/wm/WindowState;FFFF)V
-PLcom/android/server/wm/WallpaperController;->updateWallpaperOffset(Lcom/android/server/wm/WindowState;IIZ)Z
-PLcom/android/server/wm/WallpaperController;->updateWallpaperOffsetLocked(Lcom/android/server/wm/WindowState;Z)V
-HPLcom/android/server/wm/WallpaperController;->updateWallpaperTokens(Z)V
-PLcom/android/server/wm/WallpaperController;->updateWallpaperWindowsTarget(Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;)V
-PLcom/android/server/wm/WallpaperController;->wallpaperOffsetsComplete(Landroid/os/IBinder;)V
-PLcom/android/server/wm/WallpaperController;->wallpaperTransitionReady()Z
+HPLcom/android/server/wm/WallpaperController;->setWindowWallpaperPosition(Lcom/android/server/wm/WindowState;FFFF)V
+PLcom/android/server/wm/WallpaperController;->startWallpaperAnimation(Landroid/view/animation/Animation;)V
+HSPLcom/android/server/wm/WallpaperController;->updateWallpaperOffset(Lcom/android/server/wm/WindowState;IIZ)Z
+HPLcom/android/server/wm/WallpaperController;->updateWallpaperOffsetLocked(Lcom/android/server/wm/WindowState;Z)V
+HSPLcom/android/server/wm/WallpaperController;->updateWallpaperTokens(Z)V
+PLcom/android/server/wm/WallpaperController;->updateWallpaperVisibility()V
+HSPLcom/android/server/wm/WallpaperController;->updateWallpaperWindowsTarget(Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;)V
+HPLcom/android/server/wm/WallpaperController;->wallpaperOffsetsComplete(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/WallpaperController;->wallpaperTransitionReady()Z
 HSPLcom/android/server/wm/WallpaperVisibilityListeners;-><init>()V
-PLcom/android/server/wm/WallpaperVisibilityListeners;->notifyWallpaperVisibilityChanged(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/WallpaperVisibilityListeners;->notifyWallpaperVisibilityChanged(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/WallpaperVisibilityListeners;->registerWallpaperVisibilityListener(Landroid/view/IWallpaperVisibilityListener;I)V
-PLcom/android/server/wm/WallpaperWindowToken;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;ZLcom/android/server/wm/DisplayContent;Z)V
-PLcom/android/server/wm/WallpaperWindowToken;->forAllWallpaperWindows(Ljava/util/function/Consumer;)V
-PLcom/android/server/wm/WallpaperWindowToken;->hasVisibleNotDrawnWallpaper()Z
-PLcom/android/server/wm/WallpaperWindowToken;->hideWallpaperToken(ZLjava/lang/String;)V
+PLcom/android/server/wm/WallpaperVisibilityListeners;->unregisterWallpaperVisibilityListener(Landroid/view/IWallpaperVisibilityListener;I)V
+HSPLcom/android/server/wm/WallpaperWindowToken;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;ZLcom/android/server/wm/DisplayContent;Z)V
+HPLcom/android/server/wm/WallpaperWindowToken;->forAllWallpaperWindows(Ljava/util/function/Consumer;)V
+HPLcom/android/server/wm/WallpaperWindowToken;->hasVisibleNotDrawnWallpaper()Z
+HPLcom/android/server/wm/WallpaperWindowToken;->hideWallpaperToken(ZLjava/lang/String;)V
 PLcom/android/server/wm/WallpaperWindowToken;->sendWindowWallpaperCommand(Ljava/lang/String;IIILandroid/os/Bundle;Z)V
-PLcom/android/server/wm/WallpaperWindowToken;->toString()Ljava/lang/String;
-PLcom/android/server/wm/WallpaperWindowToken;->updateWallpaperOffset(IIZ)V
-PLcom/android/server/wm/WallpaperWindowToken;->updateWallpaperVisibility(Z)V
-HPLcom/android/server/wm/WallpaperWindowToken;->updateWallpaperWindows(Z)V
+PLcom/android/server/wm/WallpaperWindowToken;->setExiting()V
+PLcom/android/server/wm/WallpaperWindowToken;->startAnimation(Landroid/view/animation/Animation;)V
+HSPLcom/android/server/wm/WallpaperWindowToken;->toString()Ljava/lang/String;
+HPLcom/android/server/wm/WallpaperWindowToken;->updateWallpaperOffset(IIZ)V
+HPLcom/android/server/wm/WallpaperWindowToken;->updateWallpaperVisibility(Z)V
+HSPLcom/android/server/wm/WallpaperWindowToken;->updateWallpaperWindows(Z)V
 HPLcom/android/server/wm/WindowAnimationSpec$TmpValues;-><init>()V
 HPLcom/android/server/wm/WindowAnimationSpec$TmpValues;-><init>(Lcom/android/server/wm/WindowAnimationSpec$1;)V
-PLcom/android/server/wm/WindowAnimationSpec;-><init>(Landroid/view/animation/Animation;Landroid/graphics/Point;Landroid/graphics/Rect;ZIZF)V
+HPLcom/android/server/wm/WindowAnimationSpec;-><init>(Landroid/view/animation/Animation;Landroid/graphics/Point;Landroid/graphics/Rect;ZIZF)V
 HPLcom/android/server/wm/WindowAnimationSpec;-><init>(Landroid/view/animation/Animation;Landroid/graphics/Point;ZF)V
 HPLcom/android/server/wm/WindowAnimationSpec;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V
-PLcom/android/server/wm/WindowAnimationSpec;->calculateStatusBarTransitionStartTime()J
-PLcom/android/server/wm/WindowAnimationSpec;->canSkipFirstFrame()Z
-PLcom/android/server/wm/WindowAnimationSpec;->dumpDebugInner(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/wm/WindowAnimationSpec;->calculateStatusBarTransitionStartTime()J
+HPLcom/android/server/wm/WindowAnimationSpec;->canSkipFirstFrame()Z
+PLcom/android/server/wm/WindowAnimationSpec;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/WindowAnimationSpec;->dumpDebugInner(Landroid/util/proto/ProtoOutputStream;)V
 HPLcom/android/server/wm/WindowAnimationSpec;->findAlmostThereFraction(Landroid/view/animation/Interpolator;)F
-PLcom/android/server/wm/WindowAnimationSpec;->findTranslateAnimation(Landroid/view/animation/Animation;)Landroid/view/animation/TranslateAnimation;
-PLcom/android/server/wm/WindowAnimationSpec;->getDuration()J
-PLcom/android/server/wm/WindowAnimationSpec;->getShowWallpaper()Z
+HPLcom/android/server/wm/WindowAnimationSpec;->findTranslateAnimation(Landroid/view/animation/Animation;)Landroid/view/animation/TranslateAnimation;
+HPLcom/android/server/wm/WindowAnimationSpec;->getDuration()J
+HPLcom/android/server/wm/WindowAnimationSpec;->getShowWallpaper()Z
 HPLcom/android/server/wm/WindowAnimationSpec;->lambda$new$0()Lcom/android/server/wm/WindowAnimationSpec$TmpValues;
 HPLcom/android/server/wm/WindowAnimationSpec;->needsEarlyWakeup()Z
 HSPLcom/android/server/wm/WindowAnimator$DisplayContentsAnimator;-><init>(Lcom/android/server/wm/WindowAnimator;)V
 HSPLcom/android/server/wm/WindowAnimator$DisplayContentsAnimator;-><init>(Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator$1;)V
 HSPLcom/android/server/wm/WindowAnimator;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+HPLcom/android/server/wm/WindowAnimator;->addAfterPrepareSurfacesRunnable(Ljava/lang/Runnable;)V
 HSPLcom/android/server/wm/WindowAnimator;->addDisplayLocked(I)V
 HSPLcom/android/server/wm/WindowAnimator;->animate(J)V
+PLcom/android/server/wm/WindowAnimator;->bulkUpdateParamsToString(I)Ljava/lang/String;
 HSPLcom/android/server/wm/WindowAnimator;->cancelAnimation()V
 PLcom/android/server/wm/WindowAnimator;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
 HSPLcom/android/server/wm/WindowAnimator;->executeAfterPrepareSurfacesRunnables()V
@@ -23182,168 +38241,229 @@
 HSPLcom/android/server/wm/WindowAnimator;->lambda$new$1$WindowAnimator(J)V
 HSPLcom/android/server/wm/WindowAnimator;->orAnimating(Z)V
 HSPLcom/android/server/wm/WindowAnimator;->ready()V
-PLcom/android/server/wm/WindowAnimator;->requestRemovalOfReplacedWindows(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/WindowAnimator;->removeDisplayLocked(I)V
+HSPLcom/android/server/wm/WindowAnimator;->requestRemovalOfReplacedWindows(Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/WindowAnimator;->scheduleAnimation()V
 HSPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;-><init>(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;-><init>(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowContainer$1;)V
-HPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->apply(Lcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->apply(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->apply(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->apply(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->release()V
 HSPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->setConsumer(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/wm/WindowContainer$RemoteToken;-><init>(Lcom/android/server/wm/WindowContainer;)V
+PLcom/android/server/wm/WindowContainer$RemoteToken;->fromBinder(Landroid/os/IBinder;)Lcom/android/server/wm/WindowContainer$RemoteToken;
+PLcom/android/server/wm/WindowContainer$RemoteToken;->getContainer()Lcom/android/server/wm/WindowContainer;
 HSPLcom/android/server/wm/WindowContainer;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/WindowContainer;->access$100(Lcom/android/server/wm/WindowContainer;)Landroid/util/Pools$SynchronizedPool;
 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;->applyAnimation(Landroid/view/WindowManager$LayoutParams;IZZ)Z
+HPLcom/android/server/wm/WindowContainer;->applyAnimation(Landroid/view/WindowManager$LayoutParams;IZZLcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)Z
+HPLcom/android/server/wm/WindowContainer;->applyAnimation(Landroid/view/WindowManager$LayoutParams;IZZLjava/lang/Runnable;)Z
+HSPLcom/android/server/wm/WindowContainer;->asActivityRecord()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowContainer;->asTask()Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/WindowContainer;->assignChildLayers()V
 HSPLcom/android/server/wm/WindowContainer;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/WindowContainer;->assignLayer(Landroid/view/SurfaceControl$Transaction;I)V
 HSPLcom/android/server/wm/WindowContainer;->assignRelativeLayer(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;I)V
-PLcom/android/server/wm/WindowContainer;->cancelAnimation()V
+HPLcom/android/server/wm/WindowContainer;->cancelAnimation()V
 HSPLcom/android/server/wm/WindowContainer;->checkAppWindowsReadyToShow()V
 HSPLcom/android/server/wm/WindowContainer;->checkCompleteDeferredRemoval()Z
-PLcom/android/server/wm/WindowContainer;->commitPendingTransaction()V
-HPLcom/android/server/wm/WindowContainer;->compareTo(Lcom/android/server/wm/WindowContainer;)I
+HPLcom/android/server/wm/WindowContainer;->clearMagnificationSpec(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/WindowContainer;->commitPendingTransaction()V
+HSPLcom/android/server/wm/WindowContainer;->compareTo(Lcom/android/server/wm/WindowContainer;)I
 HSPLcom/android/server/wm/WindowContainer;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/WindowContainer;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HSPLcom/android/server/wm/WindowContainer;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
 HSPLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Consumer;Z)V
 HSPLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Function;)Z
 PLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Function;Lcom/android/server/wm/WindowContainer;ZZ)Z
-PLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Function;Lcom/android/server/wm/WindowContainer;ZZ[Z)Z
+HPLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Function;Lcom/android/server/wm/WindowContainer;ZZ[Z)Z
 HSPLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Function;Z)Z
 HSPLcom/android/server/wm/WindowContainer;->forAllTasks(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/wm/WindowContainer;->forAllTasks(Ljava/util/function/Consumer;Z)V
-HPLcom/android/server/wm/WindowContainer;->forAllTasks(Ljava/util/function/Function;)Z
+HSPLcom/android/server/wm/WindowContainer;->forAllTasks(Ljava/util/function/Function;)Z
 HPLcom/android/server/wm/WindowContainer;->forAllWallpaperWindows(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/wm/WindowContainer;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
 HSPLcom/android/server/wm/WindowContainer;->forAllWindows(Ljava/util/function/Consumer;Z)V
 PLcom/android/server/wm/WindowContainer;->forceWindowsScaleableInTransaction(Z)V
 HSPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;)Lcom/android/server/wm/ActivityRecord;
-PLcom/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;
+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;
 HSPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;ZLcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/WindowContainer;->getActivityAbove(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/WindowContainer;->getActivityBelow(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/WindowContainer;->getAnimation()Lcom/android/server/wm/AnimationAdapter;
+HSPLcom/android/server/wm/WindowContainer;->getActivityAbove(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/WindowContainer;->getActivityBelow(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowContainer;->getAnimatingContainer()Lcom/android/server/wm/WindowContainer;
+HPLcom/android/server/wm/WindowContainer;->getAnimation()Lcom/android/server/wm/AnimationAdapter;
 HPLcom/android/server/wm/WindowContainer;->getAnimationAdapter(Landroid/view/WindowManager$LayoutParams;IZZ)Landroid/util/Pair;
-PLcom/android/server/wm/WindowContainer;->getAnimationLeashParent()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/WindowContainer;->getAppAnimationLayer(I)Landroid/view/SurfaceControl;
-PLcom/android/server/wm/WindowContainer;->getBottomMostActivity()Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/WindowContainer;->getAnimationBounds(I)Landroid/graphics/Rect;
+HPLcom/android/server/wm/WindowContainer;->getAnimationFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowContainer;->getAnimationLeashParent()Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/WindowContainer;->getAppAnimationLayer(I)Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/WindowContainer;->getBottomMostActivity()Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/WindowContainer;->getBottomMostTask()Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/WindowContainer;->getChildAt(I)Lcom/android/server/wm/ConfigurationContainer;
 HSPLcom/android/server/wm/WindowContainer;->getChildAt(I)Lcom/android/server/wm/WindowContainer;
 HSPLcom/android/server/wm/WindowContainer;->getChildCount()I
-HPLcom/android/server/wm/WindowContainer;->getDimmer()Lcom/android/server/wm/Dimmer;
+HSPLcom/android/server/wm/WindowContainer;->getDimmer()Lcom/android/server/wm/Dimmer;
 HSPLcom/android/server/wm/WindowContainer;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/WindowContainer;->getDisplayedBounds()Landroid/graphics/Rect;
-PLcom/android/server/wm/WindowContainer;->getOrientation()I
-HPLcom/android/server/wm/WindowContainer;->getOrientation(I)I
+HSPLcom/android/server/wm/WindowContainer;->getOrientation()I
+HSPLcom/android/server/wm/WindowContainer;->getOrientation(I)I
 HSPLcom/android/server/wm/WindowContainer;->getParent()Lcom/android/server/wm/ConfigurationContainer;
 HSPLcom/android/server/wm/WindowContainer;->getParent()Lcom/android/server/wm/WindowContainer;
-PLcom/android/server/wm/WindowContainer;->getParentSurfaceControl()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/WindowContainer;->getParents(Ljava/util/LinkedList;)V
+HPLcom/android/server/wm/WindowContainer;->getParentSurfaceControl()Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/WindowContainer;->getParents(Ljava/util/LinkedList;)V
 HSPLcom/android/server/wm/WindowContainer;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
-PLcom/android/server/wm/WindowContainer;->getPrefixOrderIndex()I
+HPLcom/android/server/wm/WindowContainer;->getPrefixOrderIndex()I
 HPLcom/android/server/wm/WindowContainer;->getPrefixOrderIndex(Lcom/android/server/wm/WindowContainer;)I
 HSPLcom/android/server/wm/WindowContainer;->getRelativeDisplayedPosition(Landroid/graphics/Point;)V
-PLcom/android/server/wm/WindowContainer;->getRequestedConfigurationOrientation()I
+HSPLcom/android/server/wm/WindowContainer;->getRequestedConfigurationOrientation()I
 HSPLcom/android/server/wm/WindowContainer;->getSession()Landroid/view/SurfaceSession;
 PLcom/android/server/wm/WindowContainer;->getSurfaceAnimationRunner()Lcom/android/server/wm/SurfaceAnimationRunner;
 HSPLcom/android/server/wm/WindowContainer;->getSurfaceControl()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/WindowContainer;->getSurfaceHeight()I
-PLcom/android/server/wm/WindowContainer;->getSurfaceWidth()I
-PLcom/android/server/wm/WindowContainer;->getTask(Ljava/util/function/Predicate;)Lcom/android/server/wm/Task;
+HPLcom/android/server/wm/WindowContainer;->getSurfaceHeight()I
+HPLcom/android/server/wm/WindowContainer;->getSurfaceWidth()I
+HSPLcom/android/server/wm/WindowContainer;->getTask(Ljava/util/function/Predicate;)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/WindowContainer;->getTask(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/WindowContainer;->getTopActivity(ZZ)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/WindowContainer;->getTopChild()Lcom/android/server/wm/WindowContainer;
-PLcom/android/server/wm/WindowContainer;->getTopMostActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowContainer;->getTopActivity(ZZ)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowContainer;->getTopChild()Lcom/android/server/wm/WindowContainer;
+HPLcom/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;
-PLcom/android/server/wm/WindowContainer;->handlesOrientationChangeFromDescendant()Z
-HPLcom/android/server/wm/WindowContainer;->hasActivity()Z
-HPLcom/android/server/wm/WindowContainer;->hasChild(Lcom/android/server/wm/WindowContainer;)Z
-PLcom/android/server/wm/WindowContainer;->hasContentToDisplay()Z
-PLcom/android/server/wm/WindowContainer;->isAnimating()Z
+HSPLcom/android/server/wm/WindowContainer;->handlesOrientationChangeFromDescendant()Z
+HSPLcom/android/server/wm/WindowContainer;->hasActivity()Z
+HSPLcom/android/server/wm/WindowContainer;->hasChild(Lcom/android/server/wm/WindowContainer;)Z
+PLcom/android/server/wm/WindowContainer;->hasCommittedReparentToAnimationLeash()Z
+HSPLcom/android/server/wm/WindowContainer;->hasContentToDisplay()Z
+HSPLcom/android/server/wm/WindowContainer;->isAnimating()Z
 HSPLcom/android/server/wm/WindowContainer;->isAnimating(I)Z
-PLcom/android/server/wm/WindowContainer;->isAppTransitioning()Z
-PLcom/android/server/wm/WindowContainer;->isOnTop()Z
-HPLcom/android/server/wm/WindowContainer;->isVisible()Z
+HSPLcom/android/server/wm/WindowContainer;->isAppTransitioning()Z
+HPLcom/android/server/wm/WindowContainer;->isDescendantOf(Lcom/android/server/wm/WindowContainer;)Z
+HSPLcom/android/server/wm/WindowContainer;->isFocusable()Z
+HSPLcom/android/server/wm/WindowContainer;->isOnTop()Z
+HSPLcom/android/server/wm/WindowContainer;->isVisible()Z
 HSPLcom/android/server/wm/WindowContainer;->isWaitingForTransitionStart()Z
-PLcom/android/server/wm/WindowContainer;->lambda$getActivityAbove$1(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/WindowContainer;->lambda$getActivityAbove$1(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/WindowContainer;->lambda$getActivityAbove$2(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/WindowContainer;->lambda$getActivityBelow$2(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/WindowContainer;->lambda$getBottomMostActivity$3(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/WindowContainer;->lambda$getActivityBelow$3(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowContainer;->lambda$getBottomMostActivity$3(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/WindowContainer;->lambda$getBottomMostActivity$4(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/WindowContainer;->lambda$getBottomMostTask$11(Lcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/WindowContainer;->lambda$getTopActivity$7(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/WindowContainer;->lambda$getBottomMostTask$12(Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/WindowContainer;->lambda$getTopActivity$7(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/WindowContainer;->lambda$getTopActivity$8(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/WindowContainer;->lambda$getTopActivity$9(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/WindowContainer;->lambda$getTopMostActivity$4(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/WindowContainer;->lambda$getTopMostTask$12(Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/WindowContainer;->lambda$isAppTransitioning$0(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/WindowContainer;->lambda$getTopMostActivity$5(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowContainer;->lambda$getTopMostTask$12(Lcom/android/server/wm/Task;)Z
+PLcom/android/server/wm/WindowContainer;->lambda$getTopMostTask$13(Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/WindowContainer;->lambda$isAppTransitioning$0(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/WindowContainer;->lambda$isAppTransitioning$1(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/WindowContainer;->lambda$isWaitingForTransitionStart$0(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/WindowContainer;->lambda$waitForAllWindowsDrawn$13$WindowContainer(Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WindowContainer;->lambda$waitForAllWindowsDrawn$13$WindowContainer(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/WindowContainer;->lambda$waitForAllWindowsDrawn$14$WindowContainer(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/WindowContainer;->loadAnimation(Landroid/view/WindowManager$LayoutParams;IZZ)Landroid/view/animation/Animation;
-PLcom/android/server/wm/WindowContainer;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
+HPLcom/android/server/wm/WindowContainer;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
 HSPLcom/android/server/wm/WindowContainer;->makeChildSurface(Lcom/android/server/wm/WindowContainer;)Landroid/view/SurfaceControl$Builder;
 HSPLcom/android/server/wm/WindowContainer;->makeSurface()Landroid/view/SurfaceControl$Builder;
-HPLcom/android/server/wm/WindowContainer;->needsZBoost()Z
+HSPLcom/android/server/wm/WindowContainer;->needsZBoost()Z
 HSPLcom/android/server/wm/WindowContainer;->obtainConsumerWrapper(Ljava/util/function/Consumer;)Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;
 HPLcom/android/server/wm/WindowContainer;->okToAnimate()Z
-PLcom/android/server/wm/WindowContainer;->okToDisplay()Z
-PLcom/android/server/wm/WindowContainer;->onAnimationFinished()V
-PLcom/android/server/wm/WindowContainer;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
-PLcom/android/server/wm/WindowContainer;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
-HPLcom/android/server/wm/WindowContainer;->onAppTransitionDone()V
+HSPLcom/android/server/wm/WindowContainer;->okToAnimate(Z)Z
+HSPLcom/android/server/wm/WindowContainer;->okToDisplay()Z
+HSPLcom/android/server/wm/WindowContainer;->onAnimationFinished()V
+HPLcom/android/server/wm/WindowContainer;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
+HPLcom/android/server/wm/WindowContainer;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/WindowContainer;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/WindowContainer;->onAppTransitionDone()V
 HSPLcom/android/server/wm/WindowContainer;->onChildAdded(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/WindowContainer;->onChildPositionChanged(Lcom/android/server/wm/WindowContainer;)V
-PLcom/android/server/wm/WindowContainer;->onChildRemoved(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/WindowContainer;->onChildRemoved(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/WindowContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/WindowContainer;->onDescendantOrientationChanged(Landroid/os/IBinder;Lcom/android/server/wm/ConfigurationContainer;)Z
+HSPLcom/android/server/wm/WindowContainer;->onDescendantOrientationChanged(Landroid/os/IBinder;Lcom/android/server/wm/ConfigurationContainer;)Z
 HSPLcom/android/server/wm/WindowContainer;->onDescendantOverrideConfigurationChanged()V
 HSPLcom/android/server/wm/WindowContainer;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/WindowContainer;->onMovedByResize()V
+HPLcom/android/server/wm/WindowContainer;->onMovedByResize()V
 HSPLcom/android/server/wm/WindowContainer;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
 HSPLcom/android/server/wm/WindowContainer;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowContainer$PreAssignChildLayersCallback;)V
+HPLcom/android/server/wm/WindowContainer;->onParentResize()V
 HSPLcom/android/server/wm/WindowContainer;->onRequestedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/WindowContainer;->onResize()V
 HSPLcom/android/server/wm/WindowContainer;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
 HSPLcom/android/server/wm/WindowContainer;->prepareSurfaces()V
-PLcom/android/server/wm/WindowContainer;->processForAllActivitiesWithBoundary(Ljava/util/function/Function;Lcom/android/server/wm/WindowContainer;ZZ[ZLcom/android/server/wm/WindowContainer;)Z
-PLcom/android/server/wm/WindowContainer;->processGetActivityWithBoundary(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ[ZLcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/WindowContainer;->reassignLayer(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/WindowContainer;->processForAllActivitiesWithBoundary(Ljava/util/function/Function;Lcom/android/server/wm/WindowContainer;ZZ[ZLcom/android/server/wm/WindowContainer;)Z
+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;->reassignLayer(Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/WindowContainer;->removeChild(Lcom/android/server/wm/WindowContainer;)V
-PLcom/android/server/wm/WindowContainer;->removeIfPossible()V
-PLcom/android/server/wm/WindowContainer;->removeImmediately()V
+HPLcom/android/server/wm/WindowContainer;->removeIfPossible()V
+HPLcom/android/server/wm/WindowContainer;->removeImmediately()V
 PLcom/android/server/wm/WindowContainer;->reparent(Lcom/android/server/wm/WindowContainer;I)V
 PLcom/android/server/wm/WindowContainer;->reparentSurfaceControl(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/WindowContainer;->resetDragResizingChangeReported()V
 HSPLcom/android/server/wm/WindowContainer;->scheduleAnimation()V
-PLcom/android/server/wm/WindowContainer;->sendAppVisibilityToClients()V
+HPLcom/android/server/wm/WindowContainer;->sendAppVisibilityToClients()V
 HSPLcom/android/server/wm/WindowContainer;->setLayer(Landroid/view/SurfaceControl$Transaction;I)V
-PLcom/android/server/wm/WindowContainer;->setOrientation(I)V
-PLcom/android/server/wm/WindowContainer;->setOrientation(ILandroid/os/IBinder;Lcom/android/server/wm/ConfigurationContainer;)V
+HSPLcom/android/server/wm/WindowContainer;->setOrientation(I)V
+HSPLcom/android/server/wm/WindowContainer;->setOrientation(ILandroid/os/IBinder;Lcom/android/server/wm/ConfigurationContainer;)V
 HSPLcom/android/server/wm/WindowContainer;->setParent(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/WindowContainer;->setRelativeLayer(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;I)V
-PLcom/android/server/wm/WindowContainer;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;Z)V
+HSPLcom/android/server/wm/WindowContainer;->setSurfaceControl(Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/WindowContainer;->setWaitingForDrawnIfResizingChanged()V
+HPLcom/android/server/wm/WindowContainer;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;Z)V
+PLcom/android/server/wm/WindowContainer;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZI)V
+HPLcom/android/server/wm/WindowContainer;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
+HPLcom/android/server/wm/WindowContainer;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZLjava/lang/Runnable;)V
+PLcom/android/server/wm/WindowContainer;->transferAnimation(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/WindowContainer;->updateSurfacePosition()V
-PLcom/android/server/wm/WindowContainer;->waitForAllWindowsDrawn()V
-PLcom/android/server/wm/WindowFrames;-><clinit>()V
-PLcom/android/server/wm/WindowFrames;-><init>()V
-PLcom/android/server/wm/WindowFrames;->calculateDockedDividerInsets(Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowFrames;->calculateInsets(ZZLandroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowFrames;->didFrameSizeChange()Z
-PLcom/android/server/wm/WindowFrames;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/WindowContainer;->waitForAllWindowsDrawn()V
+PLcom/android/server/wm/WindowContainerThumbnail;-><init>(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowContainer;Landroid/graphics/GraphicBuffer;ZLandroid/view/Surface;Lcom/android/server/wm/SurfaceAnimator;)V
+PLcom/android/server/wm/WindowContainerThumbnail;-><init>(Ljava/util/function/Supplier;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowContainer;Landroid/graphics/GraphicBuffer;)V
+PLcom/android/server/wm/WindowContainerThumbnail;-><init>(Ljava/util/function/Supplier;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowContainer;Landroid/graphics/GraphicBuffer;Z)V
+PLcom/android/server/wm/WindowContainerThumbnail;->commitPendingTransaction()V
+PLcom/android/server/wm/WindowContainerThumbnail;->destroy()V
+PLcom/android/server/wm/WindowContainerThumbnail;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/wm/WindowContainerThumbnail;->getAnimationLeashParent()Landroid/view/SurfaceControl;
+PLcom/android/server/wm/WindowContainerThumbnail;->getParentSurfaceControl()Landroid/view/SurfaceControl;
+PLcom/android/server/wm/WindowContainerThumbnail;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
+PLcom/android/server/wm/WindowContainerThumbnail;->getSurfaceControl()Landroid/view/SurfaceControl;
+PLcom/android/server/wm/WindowContainerThumbnail;->getSurfaceHeight()I
+PLcom/android/server/wm/WindowContainerThumbnail;->getSurfaceWidth()I
+PLcom/android/server/wm/WindowContainerThumbnail;->lambda$TAAowaUKTiUY1j0FFlQQfUHXn0U(Lcom/android/server/wm/WindowContainerThumbnail;ILcom/android/server/wm/AnimationAdapter;)V
+PLcom/android/server/wm/WindowContainerThumbnail;->lambda$eaIKGhnBPQly7snIrFjjw1Gda8k(Lcom/android/server/wm/WindowContainerThumbnail;)V
+PLcom/android/server/wm/WindowContainerThumbnail;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
+PLcom/android/server/wm/WindowContainerThumbnail;->onAnimationFinished()V
+PLcom/android/server/wm/WindowContainerThumbnail;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
+PLcom/android/server/wm/WindowContainerThumbnail;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
+PLcom/android/server/wm/WindowContainerThumbnail;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
+PLcom/android/server/wm/WindowContainerThumbnail;->setShowing(Landroid/view/SurfaceControl$Transaction;Z)V
+PLcom/android/server/wm/WindowContainerThumbnail;->startAnimation(Landroid/view/SurfaceControl$Transaction;Landroid/view/animation/Animation;)V
+PLcom/android/server/wm/WindowContainerThumbnail;->startAnimation(Landroid/view/SurfaceControl$Transaction;Landroid/view/animation/Animation;Landroid/graphics/Point;)V
+HSPLcom/android/server/wm/WindowFrames;-><clinit>()V
+HSPLcom/android/server/wm/WindowFrames;-><init>()V
+HPLcom/android/server/wm/WindowFrames;->calculateDockedDividerInsets(Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowFrames;->calculateInsets(ZZLandroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowFrames;->didFrameSizeChange()Z
+HPLcom/android/server/wm/WindowFrames;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/wm/WindowFrames;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/WindowFrames;->hasContentChanged()Z
-HPLcom/android/server/wm/WindowFrames;->offsetFrames(II)V
-PLcom/android/server/wm/WindowFrames;->parentFrameWasClippedByDisplayCutout()Z
+HSPLcom/android/server/wm/WindowFrames;->hasContentChanged()Z
+HSPLcom/android/server/wm/WindowFrames;->offsetFrames(II)V
+HSPLcom/android/server/wm/WindowFrames;->parentFrameWasClippedByDisplayCutout()Z
 PLcom/android/server/wm/WindowFrames;->resetInsetsChanged()V
-PLcom/android/server/wm/WindowFrames;->resetLastContentInsets()V
-PLcom/android/server/wm/WindowFrames;->scaleInsets(F)V
-PLcom/android/server/wm/WindowFrames;->setContentChanged(Z)V
-HPLcom/android/server/wm/WindowFrames;->setDisplayCutout(Lcom/android/server/wm/utils/WmDisplayCutout;)V
+HPLcom/android/server/wm/WindowFrames;->resetLastContentInsets()V
+HPLcom/android/server/wm/WindowFrames;->scaleInsets(F)V
+HSPLcom/android/server/wm/WindowFrames;->setContentChanged(Z)V
+HSPLcom/android/server/wm/WindowFrames;->setDisplayCutout(Lcom/android/server/wm/utils/WmDisplayCutout;)V
 HPLcom/android/server/wm/WindowFrames;->setFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowFrames;->setParentFrameWasClippedByDisplayCutout(Z)V
-HPLcom/android/server/wm/WindowFrames;->setReportResizeHints()Z
-PLcom/android/server/wm/WindowFrames;->updateLastInsetValues()V
+HSPLcom/android/server/wm/WindowFrames;->setParentFrameWasClippedByDisplayCutout(Z)V
+HSPLcom/android/server/wm/WindowFrames;->setReportResizeHints()Z
+HSPLcom/android/server/wm/WindowFrames;->updateLastInsetValues()V
 HSPLcom/android/server/wm/WindowList;-><init>()V
+HPLcom/android/server/wm/WindowList;->addFirst(Ljava/lang/Object;)V
+HPLcom/android/server/wm/WindowList;->peekFirst()Ljava/lang/Object;
 HSPLcom/android/server/wm/WindowList;->peekLast()Ljava/lang/Object;
 HSPLcom/android/server/wm/WindowManagerConstants;-><init>(Lcom/android/server/wm/WindowManagerGlobalLock;Ljava/lang/Runnable;Lcom/android/server/wm/utils/DeviceConfigInterface;)V
 HSPLcom/android/server/wm/WindowManagerConstants;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/utils/DeviceConfigInterface;)V
@@ -23355,278 +38475,432 @@
 HSPLcom/android/server/wm/WindowManagerGlobalLock;-><init>()V
 HSPLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;-><init>()V
 PLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionCancelledLocked(I)V
-PLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
-PLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionPendingLocked()V
-PLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionStartingLocked(IJJJ)I
+HSPLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionPendingLocked()V
+HSPLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionStartingLocked(IJJJ)I
+PLcom/android/server/wm/WindowManagerInternal$IDragDropCallback;->postPerformDrag()V
+PLcom/android/server/wm/WindowManagerInternal$IDragDropCallback;->postReportDropResult()V
+PLcom/android/server/wm/WindowManagerInternal$IDragDropCallback;->prePerformDrag(Landroid/view/IWindow;Landroid/os/IBinder;IFFFFLandroid/content/ClipData;)Z
+PLcom/android/server/wm/WindowManagerInternal$IDragDropCallback;->preReportDropResult(Landroid/view/IWindow;Z)V
+PLcom/android/server/wm/WindowManagerInternal$IDragDropCallback;->registerInputChannel(Lcom/android/server/wm/DragState;Landroid/view/Display;Lcom/android/server/input/InputManagerService;Landroid/view/InputChannel;)Z
 HSPLcom/android/server/wm/WindowManagerInternal;-><init>()V
 PLcom/android/server/wm/WindowManagerService$10;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;)V
+HPLcom/android/server/wm/WindowManagerService$10;->binderDied()V
 HSPLcom/android/server/wm/WindowManagerService$1;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/WindowManagerService$2;-><init>(Lcom/android/server/wm/WindowManagerService;)V
-HPLcom/android/server/wm/WindowManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/wm/WindowManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/wm/WindowManagerService$3;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/WindowManagerService$3;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/wm/WindowManagerService$3;->dumpCritical(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 HSPLcom/android/server/wm/WindowManagerService$4;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/WindowManagerService$4;->onAppTransitionCancelledLocked(I)V
-PLcom/android/server/wm/WindowManagerService$4;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/WindowManagerService$4;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
 HSPLcom/android/server/wm/WindowManagerService$5;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/WindowManagerService$5;->run()V
 HSPLcom/android/server/wm/WindowManagerService$6;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService$6;->getServiceType()I
+PLcom/android/server/wm/WindowManagerService$6;->onLowPowerModeChanged(Landroid/os/PowerSaveState;)V
 HSPLcom/android/server/wm/WindowManagerService$7;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService$7;->onOpChanged(ILjava/lang/String;)V
 HSPLcom/android/server/wm/WindowManagerService$8;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/WindowManagerService$8;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/wm/WindowManagerService$H;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/WindowManagerService$H;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/wm/WindowManagerService$H;->sendNewMessageDelayed(ILjava/lang/Object;J)V
+HSPLcom/android/server/wm/WindowManagerService$H;->sendNewMessageDelayed(ILjava/lang/Object;J)V
 HSPLcom/android/server/wm/WindowManagerService$LocalService;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/WindowManagerService$LocalService;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService$1;)V
 HPLcom/android/server/wm/WindowManagerService$LocalService;->addNonHighRefreshRatePackage(Ljava/lang/String;)V
-PLcom/android/server/wm/WindowManagerService$LocalService;->addWindowToken(Landroid/os/IBinder;II)V
+HSPLcom/android/server/wm/WindowManagerService$LocalService;->addWindowToken(Landroid/os/IBinder;II)V
 HSPLcom/android/server/wm/WindowManagerService$LocalService;->clearSnapshotCache()V
-PLcom/android/server/wm/WindowManagerService$LocalService;->getDisplayIdForWindow(Landroid/os/IBinder;)I
+HPLcom/android/server/wm/WindowManagerService$LocalService;->computeWindowsForAccessibility(I)V
+HPLcom/android/server/wm/WindowManagerService$LocalService;->getCompatibleMagnificationSpecForWindow(Landroid/os/IBinder;)Landroid/view/MagnificationSpec;
+HPLcom/android/server/wm/WindowManagerService$LocalService;->getDisplayIdForWindow(Landroid/os/IBinder;)I
+HPLcom/android/server/wm/WindowManagerService$LocalService;->getFocusedWindowToken()Landroid/os/IBinder;
+HPLcom/android/server/wm/WindowManagerService$LocalService;->getKeyInterceptionInfoFromToken(Landroid/os/IBinder;)Lcom/android/internal/policy/KeyInterceptionInfo;
+PLcom/android/server/wm/WindowManagerService$LocalService;->getMagnificationRegion(ILandroid/graphics/Region;)V
 HPLcom/android/server/wm/WindowManagerService$LocalService;->getTopFocusedDisplayId()I
-PLcom/android/server/wm/WindowManagerService$LocalService;->isHardKeyboardAvailable()Z
-PLcom/android/server/wm/WindowManagerService$LocalService;->isInputMethodClientFocus(III)Z
+PLcom/android/server/wm/WindowManagerService$LocalService;->getTopFocusedDisplayUiContext()Landroid/content/Context;
+PLcom/android/server/wm/WindowManagerService$LocalService;->getWindowOwnerUserId(Landroid/os/IBinder;)I
+HPLcom/android/server/wm/WindowManagerService$LocalService;->isHardKeyboardAvailable()Z
+HPLcom/android/server/wm/WindowManagerService$LocalService;->isInputMethodClientFocus(III)Z
 PLcom/android/server/wm/WindowManagerService$LocalService;->isKeyguardShowingAndNotOccluded()Z
-PLcom/android/server/wm/WindowManagerService$LocalService;->isStackVisibleLw(I)Z
-PLcom/android/server/wm/WindowManagerService$LocalService;->isUidAllowedOnDisplay(II)Z
-PLcom/android/server/wm/WindowManagerService$LocalService;->isUidFocused(I)Z
+HPLcom/android/server/wm/WindowManagerService$LocalService;->isStackVisibleLw(I)Z
+HPLcom/android/server/wm/WindowManagerService$LocalService;->isUidAllowedOnDisplay(II)Z
+HPLcom/android/server/wm/WindowManagerService$LocalService;->isUidFocused(I)Z
 HPLcom/android/server/wm/WindowManagerService$LocalService;->lambda$addNonHighRefreshRatePackage$0(Ljava/lang/String;Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/WindowManagerService$LocalService;->lambda$removeNonHighRefreshRatePackage$1(Ljava/lang/String;Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/WindowManagerService$LocalService;->registerAppTransitionListener(Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;)V
 HPLcom/android/server/wm/WindowManagerService$LocalService;->removeNonHighRefreshRatePackage(Ljava/lang/String;)V
-PLcom/android/server/wm/WindowManagerService$LocalService;->removeWindowToken(Landroid/os/IBinder;ZI)V
+HPLcom/android/server/wm/WindowManagerService$LocalService;->removeWindowToken(Landroid/os/IBinder;ZI)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->reportPasswordChanged(I)V
 HSPLcom/android/server/wm/WindowManagerService$LocalService;->requestTraversalFromDisplayManager()V
+HPLcom/android/server/wm/WindowManagerService$LocalService;->setAccessibilityIdToSurfaceMetadata(Landroid/os/IBinder;I)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->setInputFilter(Landroid/view/IInputFilter;)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->setMagnificationCallbacks(ILcom/android/server/wm/WindowManagerInternal$MagnificationCallbacks;)Z
+PLcom/android/server/wm/WindowManagerService$LocalService;->setMagnificationSpec(ILandroid/view/MagnificationSpec;)V
 HSPLcom/android/server/wm/WindowManagerService$LocalService;->setOnHardKeyboardStatusChangeListener(Lcom/android/server/wm/WindowManagerInternal$OnHardKeyboardStatusChangeListener;)V
-PLcom/android/server/wm/WindowManagerService$LocalService;->updateInputMethodTargetWindow(Landroid/os/IBinder;Landroid/os/IBinder;)V
-PLcom/android/server/wm/WindowManagerService$LocalService;->updateInputMethodWindowStatus(Landroid/os/IBinder;ZZ)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->setWindowsForAccessibilityCallback(ILcom/android/server/wm/WindowManagerInternal$WindowsForAccessibilityCallback;)Z
+PLcom/android/server/wm/WindowManagerService$LocalService;->shouldShowIme(I)Z
+PLcom/android/server/wm/WindowManagerService$LocalService;->shouldShowSystemDecorOnDisplay(I)Z
+HPLcom/android/server/wm/WindowManagerService$LocalService;->updateInputMethodTargetWindow(Landroid/os/IBinder;Landroid/os/IBinder;)V
+HPLcom/android/server/wm/WindowManagerService$LocalService;->updateInputMethodWindowStatus(Landroid/os/IBinder;ZZ)V
 HPLcom/android/server/wm/WindowManagerService$LocalService;->waitForAllWindowsDrawn(Ljava/lang/Runnable;JI)V
 HSPLcom/android/server/wm/WindowManagerService$MousePositionTracker;-><init>()V
 HSPLcom/android/server/wm/WindowManagerService$MousePositionTracker;-><init>(Lcom/android/server/wm/WindowManagerService$1;)V
+PLcom/android/server/wm/WindowManagerService$MousePositionTracker;->access$1700(Lcom/android/server/wm/WindowManagerService$MousePositionTracker;)Z
+PLcom/android/server/wm/WindowManagerService$MousePositionTracker;->access$1800(Lcom/android/server/wm/WindowManagerService$MousePositionTracker;)Z
 HPLcom/android/server/wm/WindowManagerService$MousePositionTracker;->onPointerEvent(Landroid/view/MotionEvent;)V
 PLcom/android/server/wm/WindowManagerService$RotationWatcher;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/IRotationWatcher;Landroid/os/IBinder$DeathRecipient;I)V
 HSPLcom/android/server/wm/WindowManagerService$SettingsObserver;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService$SettingsObserver;->onChange(ZLandroid/net/Uri;)V
+PLcom/android/server/wm/WindowManagerService$SettingsObserver;->updateForceDesktopModeOnExternalDisplays()V
+PLcom/android/server/wm/WindowManagerService$SettingsObserver;->updateForceResizableTasks()V
+PLcom/android/server/wm/WindowManagerService$SettingsObserver;->updateFreeformWindowManagement()V
 HSPLcom/android/server/wm/WindowManagerService$SettingsObserver;->updatePointerLocation()V
+PLcom/android/server/wm/WindowManagerService$SettingsObserver;->updateSizeCompatFreeform()V
 HSPLcom/android/server/wm/WindowManagerService$SettingsObserver;->updateSystemUiSettings()V
 HSPLcom/android/server/wm/WindowManagerService;-><clinit>()V
 HSPLcom/android/server/wm/WindowManagerService;-><init>(Landroid/content/Context;Lcom/android/server/input/InputManagerService;ZZLcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/wm/ActivityTaskManagerService;Ljava/util/function/Supplier;Ljava/util/function/Supplier;Ljava/util/function/Function;)V
-PLcom/android/server/wm/WindowManagerService;->access$000(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/KeyguardDisableHandler;
+HSPLcom/android/server/wm/WindowManagerService;->access$000(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/KeyguardDisableHandler;
+PLcom/android/server/wm/WindowManagerService;->access$100(Lcom/android/server/wm/WindowManagerService;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/wm/WindowManagerService;->access$1000(Lcom/android/server/wm/WindowManagerService;)V
+HSPLcom/android/server/wm/WindowManagerService;->access$1100(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/WindowManagerService;->access$1300(Lcom/android/server/wm/WindowManagerService;)Z
-PLcom/android/server/wm/WindowManagerService;->access$1400(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/RecentsAnimationController;
+HPLcom/android/server/wm/WindowManagerService;->access$1400(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/RecentsAnimationController;
+PLcom/android/server/wm/WindowManagerService;->access$1400(Lcom/android/server/wm/WindowManagerService;)Z
+HPLcom/android/server/wm/WindowManagerService;->access$1500(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/RecentsAnimationController;
 HPLcom/android/server/wm/WindowManagerService;->access$1500(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;)V
+HPLcom/android/server/wm/WindowManagerService;->access$1600(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;)V
+PLcom/android/server/wm/WindowManagerService;->access$200(Lcom/android/server/wm/WindowManagerService;)Z
+HPLcom/android/server/wm/WindowManagerService;->access$2000(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WindowManagerService;->access$2100(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/WindowManagerService;->access$300(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService;->access$300(Lcom/android/server/wm/WindowManagerService;)Z
+PLcom/android/server/wm/WindowManagerService;->access$400(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/WindowManagerService;->access$400(Lcom/android/server/wm/WindowManagerService;Landroid/util/ArraySet;Z)V
-HPLcom/android/server/wm/WindowManagerService;->access$600(Lcom/android/server/wm/WindowManagerService;)V
-HPLcom/android/server/wm/WindowManagerService;->addWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/InputChannel;Landroid/view/InsetsState;)I
-PLcom/android/server/wm/WindowManagerService;->addWindowToken(Landroid/os/IBinder;II)V
+PLcom/android/server/wm/WindowManagerService;->access$500(Lcom/android/server/wm/WindowManagerService;Landroid/util/ArraySet;Z)V
+HSPLcom/android/server/wm/WindowManagerService;->access$600(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService;->access$700(Lcom/android/server/wm/WindowManagerService;)F
+HSPLcom/android/server/wm/WindowManagerService;->access$700(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService;->access$702(Lcom/android/server/wm/WindowManagerService;F)F
+PLcom/android/server/wm/WindowManagerService;->access$800(Lcom/android/server/wm/WindowManagerService;)F
+PLcom/android/server/wm/WindowManagerService;->access$802(Lcom/android/server/wm/WindowManagerService;F)F
+PLcom/android/server/wm/WindowManagerService;->access$900(Lcom/android/server/wm/WindowManagerService;)F
+PLcom/android/server/wm/WindowManagerService;->access$902(Lcom/android/server/wm/WindowManagerService;F)F
+HSPLcom/android/server/wm/WindowManagerService;->addWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/InputChannel;Landroid/view/InsetsState;)I
+HPLcom/android/server/wm/WindowManagerService;->addWindowContextToken(Landroid/os/IBinder;IILjava/lang/String;)I
+HSPLcom/android/server/wm/WindowManagerService;->addWindowToken(Landroid/os/IBinder;II)V
+HPLcom/android/server/wm/WindowManagerService;->addWindowTokenWithOptions(Landroid/os/IBinder;IILandroid/os/Bundle;Ljava/lang/String;)I
 HSPLcom/android/server/wm/WindowManagerService;->applyForcedPropertiesForDefaultDisplay()Z
+PLcom/android/server/wm/WindowManagerService;->applyMagnificationSpecLocked(ILandroid/view/MagnificationSpec;)V
 HSPLcom/android/server/wm/WindowManagerService;->boostPriorityForLockedSection()V
-PLcom/android/server/wm/WindowManagerService;->canStartRecentsAnimation()Z
+HPLcom/android/server/wm/WindowManagerService;->canStartRecentsAnimation()Z
 PLcom/android/server/wm/WindowManagerService;->cancelRecentsAnimation(ILjava/lang/String;)V
 PLcom/android/server/wm/WindowManagerService;->checkBootAnimationCompleteLocked()Z
-PLcom/android/server/wm/WindowManagerService;->checkCallingPermission(Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/server/wm/WindowManagerService;->checkDrawnWindowsLocked()V
-PLcom/android/server/wm/WindowManagerService;->checkSplitScreenMinimizedChanged(Z)V
-PLcom/android/server/wm/WindowManagerService;->cleanupRecentsAnimation(I)V
+PLcom/android/server/wm/WindowManagerService;->checkCallerOwnsDisplay(I)V
+HSPLcom/android/server/wm/WindowManagerService;->checkCallingPermission(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/server/wm/WindowManagerService;->checkDrawnWindowsLocked()V
+HPLcom/android/server/wm/WindowManagerService;->checkSplitScreenMinimizedChanged(Z)V
+HPLcom/android/server/wm/WindowManagerService;->cleanupRecentsAnimation(I)V
 HSPLcom/android/server/wm/WindowManagerService;->closeSurfaceTransaction(Ljava/lang/String;)V
-PLcom/android/server/wm/WindowManagerService;->closeSystemDialogs(Ljava/lang/String;)V
+HPLcom/android/server/wm/WindowManagerService;->closeSystemDialogs(Ljava/lang/String;)V
 HSPLcom/android/server/wm/WindowManagerService;->computeNewConfiguration(I)Landroid/content/res/Configuration;
 HSPLcom/android/server/wm/WindowManagerService;->computeNewConfigurationLocked(I)Landroid/content/res/Configuration;
 PLcom/android/server/wm/WindowManagerService;->createInputConsumer(Landroid/os/IBinder;Ljava/lang/String;ILandroid/view/InputChannel;)V
 PLcom/android/server/wm/WindowManagerService;->createInputConsumer(Landroid/os/Looper;Ljava/lang/String;Landroid/view/InputEventReceiver$Factory;I)Lcom/android/server/policy/WindowManagerPolicy$InputConsumer;
-HPLcom/android/server/wm/WindowManagerService;->createSurfaceControl(Landroid/view/SurfaceControl;ILcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;)I
+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;->createSurfaceControl(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;ILcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;)I
 HSPLcom/android/server/wm/WindowManagerService;->createWatermark()V
 PLcom/android/server/wm/WindowManagerService;->destroyInputConsumer(Ljava/lang/String;I)Z
 HSPLcom/android/server/wm/WindowManagerService;->destroyPreservedSurfaceLocked()V
 HSPLcom/android/server/wm/WindowManagerService;->detectSafeMode()Z
 HSPLcom/android/server/wm/WindowManagerService;->dipToPixel(ILandroid/util/DisplayMetrics;)I
+PLcom/android/server/wm/WindowManagerService;->disableKeyguard(Landroid/os/IBinder;Ljava/lang/String;I)V
+PLcom/android/server/wm/WindowManagerService;->dismissKeyguard(Lcom/android/internal/policy/IKeyguardDismissCallback;Ljava/lang/CharSequence;)V
+PLcom/android/server/wm/WindowManagerService;->dispatchNewAnimatorScaleLocked(Lcom/android/server/wm/Session;)V
 HSPLcom/android/server/wm/WindowManagerService;->displayReady()V
 PLcom/android/server/wm/WindowManagerService;->doDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
-PLcom/android/server/wm/WindowManagerService;->doesAddToastWindowRequireToken(Ljava/lang/String;ILcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/WindowManagerService;->doesAddToastWindowRequireToken(Ljava/lang/String;ILcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/WindowManagerService;->dontOverrideDisplayInfo(I)V
 PLcom/android/server/wm/WindowManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wm/WindowManagerService;->dumpAnimatorLocked(Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/wm/WindowManagerService;->dumpDebugLocked(Landroid/util/proto/ProtoOutputStream;I)V
+PLcom/android/server/wm/WindowManagerService;->dumpHighRefreshRateBlacklist(Ljava/io/PrintWriter;)V
+PLcom/android/server/wm/WindowManagerService;->dumpLastANRLocked(Ljava/io/PrintWriter;)V
+PLcom/android/server/wm/WindowManagerService;->dumpLogStatus(Ljava/io/PrintWriter;)V
+PLcom/android/server/wm/WindowManagerService;->dumpPolicyLocked(Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/wm/WindowManagerService;->dumpSessionsLocked(Ljava/io/PrintWriter;Z)V
+PLcom/android/server/wm/WindowManagerService;->dumpTokensLocked(Ljava/io/PrintWriter;Z)V
+PLcom/android/server/wm/WindowManagerService;->dumpTraceStatus(Ljava/io/PrintWriter;)V
+PLcom/android/server/wm/WindowManagerService;->dumpWindowsLocked(Ljava/io/PrintWriter;ZLjava/util/ArrayList;)V
 PLcom/android/server/wm/WindowManagerService;->dumpWindowsNoHeaderLocked(Ljava/io/PrintWriter;ZLjava/util/ArrayList;)V
-PLcom/android/server/wm/WindowManagerService;->enableScreenAfterBoot()V
+HSPLcom/android/server/wm/WindowManagerService;->enableScreenAfterBoot()V
 PLcom/android/server/wm/WindowManagerService;->enableScreenIfNeeded()V
 HSPLcom/android/server/wm/WindowManagerService;->enableScreenIfNeededLocked()V
-PLcom/android/server/wm/WindowManagerService;->excludeWindowTypeFromTapOutTask(I)Z
-PLcom/android/server/wm/WindowManagerService;->executeAppTransition()V
-PLcom/android/server/wm/WindowManagerService;->finishDrawingWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/WindowManagerService;->excludeWindowTypeFromTapOutTask(I)Z
+HPLcom/android/server/wm/WindowManagerService;->executeAppTransition()V
+HSPLcom/android/server/wm/WindowManagerService;->finishDrawingWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/view/SurfaceControl$Transaction;)V
+PLcom/android/server/wm/WindowManagerService;->fixScale(F)F
 PLcom/android/server/wm/WindowManagerService;->freezeDisplayRotation(II)V
 PLcom/android/server/wm/WindowManagerService;->freezeRotation(I)V
+PLcom/android/server/wm/WindowManagerService;->getAnimationScale(I)F
+PLcom/android/server/wm/WindowManagerService;->getBaseDisplayDensity(I)I
 HSPLcom/android/server/wm/WindowManagerService;->getBaseDisplaySize(ILandroid/graphics/Point;)V
 HSPLcom/android/server/wm/WindowManagerService;->getCameraLensCoverState()I
 HSPLcom/android/server/wm/WindowManagerService;->getCurrentAnimatorScale()F
 HSPLcom/android/server/wm/WindowManagerService;->getDefaultDisplayContentLocked()Lcom/android/server/wm/DisplayContent;
-PLcom/android/server/wm/WindowManagerService;->getDisplayContentOrCreate(ILandroid/os/IBinder;)Lcom/android/server/wm/DisplayContent;
-PLcom/android/server/wm/WindowManagerService;->getDockedStackSide()I
+PLcom/android/server/wm/WindowManagerService;->getDefaultDisplayRotation()I
+HSPLcom/android/server/wm/WindowManagerService;->getDisplayContentOrCreate(ILandroid/os/IBinder;)Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/WindowManagerService;->getDockedStackSide()I
+HPLcom/android/server/wm/WindowManagerService;->getFocusedWindowLocked()Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowManagerService;->getForcedDisplayDensityForUserLocked(I)I
 HSPLcom/android/server/wm/WindowManagerService;->getImeFocusStackLocked()Lcom/android/server/wm/ActivityStack;
+HPLcom/android/server/wm/WindowManagerService;->getInTouchMode()Z
+HPLcom/android/server/wm/WindowManagerService;->getInitialDisplayDensity(I)I
 PLcom/android/server/wm/WindowManagerService;->getInitialDisplaySize(ILandroid/graphics/Point;)V
 HSPLcom/android/server/wm/WindowManagerService;->getInputManagerCallback()Lcom/android/server/wm/InputManagerCallback;
 HSPLcom/android/server/wm/WindowManagerService;->getLidState()I
+PLcom/android/server/wm/WindowManagerService;->getNavBarPosition(I)I
 HSPLcom/android/server/wm/WindowManagerService;->getRecentsAnimationController()Lcom/android/server/wm/RecentsAnimationController;
-PLcom/android/server/wm/WindowManagerService;->getStableInsets(ILandroid/graphics/Rect;)V
-PLcom/android/server/wm/WindowManagerService;->getStableInsetsLocked(ILandroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowManagerService;->getStableInsets(ILandroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowManagerService;->getStableInsetsLocked(ILandroid/graphics/Rect;)V
 HSPLcom/android/server/wm/WindowManagerService;->getStackBounds(IILandroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowManagerService;->getTaskSnapshot(IIZZ)Landroid/app/ActivityManager$TaskSnapshot;
 PLcom/android/server/wm/WindowManagerService;->getTransitionAnimationScaleLocked()F
 PLcom/android/server/wm/WindowManagerService;->getWindowAnimationScaleLocked()F
-PLcom/android/server/wm/WindowManagerService;->getWindowDisplayFrame(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/WindowManagerService;->getWindowId(Landroid/os/IBinder;)Landroid/view/IWindowId;
+HPLcom/android/server/wm/WindowManagerService;->getWindowDisplayFrame(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowManagerService;->getWindowId(Landroid/os/IBinder;)Landroid/view/IWindowId;
+HSPLcom/android/server/wm/WindowManagerService;->getWindowInsets(Landroid/view/WindowManager$LayoutParams;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;)V
 HSPLcom/android/server/wm/WindowManagerService;->getWindowManagerLock()Ljava/lang/Object;
-PLcom/android/server/wm/WindowManagerService;->handleTaskFocusChange(Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/WindowManagerService;->grantInputChannel(IIILandroid/view/SurfaceControl;Landroid/view/IWindow;Landroid/os/IBinder;Landroid/view/InputChannel;)V
+HPLcom/android/server/wm/WindowManagerService;->handleTaskFocusChange(Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/WindowManagerService;->hasHdrSupport()Z
 HSPLcom/android/server/wm/WindowManagerService;->hasNavigationBar(I)Z
+PLcom/android/server/wm/WindowManagerService;->hasStatusBarPermission(II)Z
 HSPLcom/android/server/wm/WindowManagerService;->hasWideColorGamutSupport()Z
-PLcom/android/server/wm/WindowManagerService;->hideBootMessagesLocked()V
+HSPLcom/android/server/wm/WindowManagerService;->hideBootMessagesLocked()V
 PLcom/android/server/wm/WindowManagerService;->hideTransientBars(I)V
 HSPLcom/android/server/wm/WindowManagerService;->inSurfaceTransaction(Ljava/lang/Runnable;)V
 HSPLcom/android/server/wm/WindowManagerService;->initPolicy()V
-PLcom/android/server/wm/WindowManagerService;->initializeRecentsAnimation(ILandroid/view/IRecentsAnimationRunner;Lcom/android/server/wm/RecentsAnimationController$RecentsAnimationCallbacks;ILandroid/util/SparseBooleanArray;Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/WindowManagerService;->initializeRecentsAnimation(ILandroid/view/IRecentsAnimationRunner;Lcom/android/server/wm/RecentsAnimationController$RecentsAnimationCallbacks;ILandroid/util/SparseBooleanArray;Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/WindowManagerService;->intersectDisplayInsetBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowManagerService;->isCurrentProfile(I)Z
 PLcom/android/server/wm/WindowManagerService;->isCurrentProfileLocked(I)Z
+PLcom/android/server/wm/WindowManagerService;->isDisplayRotationFrozen(I)Z
 HSPLcom/android/server/wm/WindowManagerService;->isKeyguardLocked()Z
-PLcom/android/server/wm/WindowManagerService;->isKeyguardSecure(I)Z
-PLcom/android/server/wm/WindowManagerService;->isKeyguardShowingAndNotOccluded()Z
+HPLcom/android/server/wm/WindowManagerService;->isKeyguardSecure(I)Z
+HPLcom/android/server/wm/WindowManagerService;->isKeyguardShowingAndNotOccluded()Z
+PLcom/android/server/wm/WindowManagerService;->isRotationFrozen()Z
 PLcom/android/server/wm/WindowManagerService;->isSafeModeEnabled()Z
-PLcom/android/server/wm/WindowManagerService;->isSecureLocked(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/WindowManagerService;->isSecureLocked(Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/WindowManagerService;->isValidPictureInPictureAspectRatio(IF)Z
+PLcom/android/server/wm/WindowManagerService;->isValidPictureInPictureAspectRatio(Lcom/android/server/wm/DisplayContent;F)Z
+PLcom/android/server/wm/WindowManagerService;->isWindowTraceEnabled()Z
 HPLcom/android/server/wm/WindowManagerService;->lambda$checkDrawnWindowsLocked$7$WindowManagerService(Lcom/android/server/wm/WindowContainer;Ljava/lang/Runnable;)V
 PLcom/android/server/wm/WindowManagerService;->lambda$dumpWindowsNoHeaderLocked$9(Ljava/io/PrintWriter;Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/WindowManagerService;->lambda$main$1(Landroid/content/Context;Lcom/android/server/input/InputManagerService;ZZLcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/wm/ActivityTaskManagerService;Ljava/util/function/Supplier;Ljava/util/function/Supplier;Ljava/util/function/Function;)V
+PLcom/android/server/wm/WindowManagerService;->lambda$new$0$WindowManagerService()V
+PLcom/android/server/wm/WindowManagerService;->lambda$onOverlayChanged$12(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/WindowManagerService;->lambda$requestAssistScreenshot$3(Landroid/app/IAssistDataReceiver;Landroid/graphics/Bitmap;)V
 HPLcom/android/server/wm/WindowManagerService;->lambda$updateNonSystemOverlayWindowsVisibilityIfNeeded$13(ZLcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/WindowManagerService;->lockNow(Landroid/os/Bundle;)V
 HSPLcom/android/server/wm/WindowManagerService;->main(Landroid/content/Context;Lcom/android/server/input/InputManagerService;ZZLcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/wm/ActivityTaskManagerService;)Lcom/android/server/wm/WindowManagerService;
 HSPLcom/android/server/wm/WindowManagerService;->main(Landroid/content/Context;Lcom/android/server/input/InputManagerService;ZZLcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/wm/ActivityTaskManagerService;Ljava/util/function/Supplier;Ljava/util/function/Supplier;Ljava/util/function/Function;)Lcom/android/server/wm/WindowManagerService;
 HSPLcom/android/server/wm/WindowManagerService;->makeSurfaceBuilder(Landroid/view/SurfaceSession;)Landroid/view/SurfaceControl$Builder;
-PLcom/android/server/wm/WindowManagerService;->makeWindowFreezingScreenIfNeededLocked(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/WindowManagerService;->monitor()V
-PLcom/android/server/wm/WindowManagerService;->notifyFocusChanged()V
+HSPLcom/android/server/wm/WindowManagerService;->makeWindowFreezingScreenIfNeededLocked(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WindowManagerService;->monitor()V
+HSPLcom/android/server/wm/WindowManagerService;->notifyFocusChanged()V
 PLcom/android/server/wm/WindowManagerService;->notifyKeyguardFlagsChanged(Ljava/lang/Runnable;I)V
 PLcom/android/server/wm/WindowManagerService;->notifyKeyguardTrustedChanged()V
-PLcom/android/server/wm/WindowManagerService;->onAnimationFinished()V
+PLcom/android/server/wm/WindowManagerService;->notifyShowingDreamChanged()V
+HSPLcom/android/server/wm/WindowManagerService;->onAnimationFinished()V
 HSPLcom/android/server/wm/WindowManagerService;->onInitReady()V
-PLcom/android/server/wm/WindowManagerService;->onKeyguardShowingAndNotOccludedChanged()V
+HPLcom/android/server/wm/WindowManagerService;->onKeyguardShowingAndNotOccludedChanged()V
+PLcom/android/server/wm/WindowManagerService;->onLockTaskStateChanged(I)V
+PLcom/android/server/wm/WindowManagerService;->onOverlayChanged()V
 HPLcom/android/server/wm/WindowManagerService;->onPointerDownOutsideFocusLocked(Landroid/os/IBinder;)V
-PLcom/android/server/wm/WindowManagerService;->onPowerKeyDown(Z)V
-PLcom/android/server/wm/WindowManagerService;->onRectangleOnScreenRequested(Landroid/os/IBinder;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowManagerService;->onPowerKeyDown(Z)V
+HPLcom/android/server/wm/WindowManagerService;->onRectangleOnScreenRequested(Landroid/os/IBinder;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/WindowManagerService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
 HSPLcom/android/server/wm/WindowManagerService;->onSystemUiStarted()V
 HSPLcom/android/server/wm/WindowManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/server/wm/WindowManagerService;->onUserSwitched()V
-PLcom/android/server/wm/WindowManagerService;->openSession(Landroid/view/IWindowSessionCallback;)Landroid/view/IWindowSession;
+HSPLcom/android/server/wm/WindowManagerService;->onUserSwitched()V
+HSPLcom/android/server/wm/WindowManagerService;->openSession(Landroid/view/IWindowSessionCallback;)Landroid/view/IWindowSession;
 HSPLcom/android/server/wm/WindowManagerService;->openSurfaceTransaction()V
+PLcom/android/server/wm/WindowManagerService;->overridePendingAppTransitionMultiThumbFuture(Landroid/view/IAppTransitionAnimationSpecsFuture;Landroid/os/IRemoteCallback;ZI)V
 PLcom/android/server/wm/WindowManagerService;->performBootTimeout()V
-PLcom/android/server/wm/WindowManagerService;->performEnableScreen()V
-PLcom/android/server/wm/WindowManagerService;->postWindowRemoveCleanupLocked(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/WindowManagerService;->prepareAppTransition(IZ)V
-PLcom/android/server/wm/WindowManagerService;->prepareNoneTransitionForRelaunching(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/WindowManagerService;->prepareWindowReplacementTransition(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowManagerService;->performEnableScreen()V
+HPLcom/android/server/wm/WindowManagerService;->pokeDrawLock(Lcom/android/server/wm/Session;Landroid/os/IBinder;)V
+HPLcom/android/server/wm/WindowManagerService;->postWindowRemoveCleanupLocked(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WindowManagerService;->prepareAppTransition(IZ)V
+HSPLcom/android/server/wm/WindowManagerService;->prepareNoneTransitionForRelaunching(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/WindowManagerService;->prepareWindowReplacementTransition(Lcom/android/server/wm/ActivityRecord;)Z
 HSPLcom/android/server/wm/WindowManagerService;->queryHdrSupport()Z
 HSPLcom/android/server/wm/WindowManagerService;->queryWideColorGamutSupport()Z
-PLcom/android/server/wm/WindowManagerService;->refreshScreenCaptureDisabled(I)V
+PLcom/android/server/wm/WindowManagerService;->reboot(Z)V
+PLcom/android/server/wm/WindowManagerService;->reenableKeyguard(Landroid/os/IBinder;I)V
+HSPLcom/android/server/wm/WindowManagerService;->refreshScreenCaptureDisabled(I)V
 PLcom/android/server/wm/WindowManagerService;->registerAppFreezeListener(Lcom/android/server/wm/WindowManagerService$AppFreezeListener;)V
+HSPLcom/android/server/wm/WindowManagerService;->registerDisplayWindowListener(Landroid/view/IDisplayWindowListener;)V
 PLcom/android/server/wm/WindowManagerService;->registerDockedStackListener(Landroid/view/IDockedStackListener;)V
 PLcom/android/server/wm/WindowManagerService;->registerPinnedStackListener(ILandroid/view/IPinnedStackListener;)V
 PLcom/android/server/wm/WindowManagerService;->registerShortcutKey(JLcom/android/internal/policy/IShortcutService;)V
 PLcom/android/server/wm/WindowManagerService;->registerSystemGestureExclusionListener(Landroid/view/ISystemGestureExclusionListener;I)V
 PLcom/android/server/wm/WindowManagerService;->registerWallpaperVisibilityListener(Landroid/view/IWallpaperVisibilityListener;I)Z
-HPLcom/android/server/wm/WindowManagerService;->relayoutWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIIJLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;)I
-PLcom/android/server/wm/WindowManagerService;->removeObsoleteTaskFiles(Landroid/util/ArraySet;[I)V
-PLcom/android/server/wm/WindowManagerService;->removeRotationWatcher(Landroid/view/IRotationWatcher;)V
-PLcom/android/server/wm/WindowManagerService;->removeWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;)V
-PLcom/android/server/wm/WindowManagerService;->removeWindowToken(Landroid/os/IBinder;I)V
+HSPLcom/android/server/wm/WindowManagerService;->relayoutWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIIJLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;)I
+HPLcom/android/server/wm/WindowManagerService;->relayoutWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIIJLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;Landroid/graphics/Point;)I
+HSPLcom/android/server/wm/WindowManagerService;->relayoutWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIIJLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;Landroid/graphics/Point;Landroid/view/SurfaceControl;)I
+HPLcom/android/server/wm/WindowManagerService;->removeObsoleteTaskFiles(Landroid/util/ArraySet;[I)V
+HPLcom/android/server/wm/WindowManagerService;->removeRotationWatcher(Landroid/view/IRotationWatcher;)V
+HPLcom/android/server/wm/WindowManagerService;->removeWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;)V
+HPLcom/android/server/wm/WindowManagerService;->removeWindowToken(Landroid/os/IBinder;I)V
+PLcom/android/server/wm/WindowManagerService;->reparentDisplayContent(Landroid/view/IWindow;Landroid/view/SurfaceControl;I)V
 HPLcom/android/server/wm/WindowManagerService;->reportSystemGestureExclusionChanged(Lcom/android/server/wm/Session;Landroid/view/IWindow;Ljava/util/List;)V
 PLcom/android/server/wm/WindowManagerService;->requestAssistScreenshot(Landroid/app/IAssistDataReceiver;)Z
 HSPLcom/android/server/wm/WindowManagerService;->requestTraversal()V
 HSPLcom/android/server/wm/WindowManagerService;->resetPriorityAfterLockedSection()V
-PLcom/android/server/wm/WindowManagerService;->scheduleAnimationLocked()V
+PLcom/android/server/wm/WindowManagerService;->saveANRStateLocked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowState;Ljava/lang/String;)V
+HSPLcom/android/server/wm/WindowManagerService;->scheduleAnimationLocked()V
+PLcom/android/server/wm/WindowManagerService;->scheduleClearWillReplaceWindows(Landroid/os/IBinder;Z)V
+PLcom/android/server/wm/WindowManagerService;->scheduleWindowReplacementTimeouts(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/WindowManagerService;->screenTurningOff(Lcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;)V
+PLcom/android/server/wm/WindowManagerService;->setAnimationScale(IF)V
 HSPLcom/android/server/wm/WindowManagerService;->setAnimatorDurationScale(F)V
-PLcom/android/server/wm/WindowManagerService;->setAodShowing(Z)V
+HPLcom/android/server/wm/WindowManagerService;->setAodShowing(Z)V
 PLcom/android/server/wm/WindowManagerService;->setCurrentProfileIds([I)V
-PLcom/android/server/wm/WindowManagerService;->setDockedStackDividerTouchRegion(Landroid/graphics/Rect;)V
-PLcom/android/server/wm/WindowManagerService;->setEventDispatching(Z)V
+HSPLcom/android/server/wm/WindowManagerService;->setDisplayWindowRotationController(Landroid/view/IDisplayWindowRotationController;)V
+PLcom/android/server/wm/WindowManagerService;->setDockedStackCreateStateLocked(ILandroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowManagerService;->setDockedStackDividerTouchRegion(Landroid/graphics/Rect;)V
+PLcom/android/server/wm/WindowManagerService;->setDockedStackResizing(Z)V
+HSPLcom/android/server/wm/WindowManagerService;->setEventDispatching(Z)V
+PLcom/android/server/wm/WindowManagerService;->setForwardedInsets(ILandroid/graphics/Insets;)V
 HSPLcom/android/server/wm/WindowManagerService;->setGlobalShadowSettings()V
 HSPLcom/android/server/wm/WindowManagerService;->setHoldScreenLocked(Lcom/android/server/wm/Session;)V
-PLcom/android/server/wm/WindowManagerService;->setInsetsWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
-PLcom/android/server/wm/WindowManagerService;->setKeyguardGoingAway(Z)V
-PLcom/android/server/wm/WindowManagerService;->setKeyguardOrAodShowingOnDefaultDisplay(Z)V
+PLcom/android/server/wm/WindowManagerService;->setInTouchMode(Z)V
+HPLcom/android/server/wm/WindowManagerService;->setInsetsWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
+HPLcom/android/server/wm/WindowManagerService;->setKeyguardGoingAway(Z)V
+HPLcom/android/server/wm/WindowManagerService;->setKeyguardOrAodShowingOnDefaultDisplay(Z)V
 PLcom/android/server/wm/WindowManagerService;->setNavBarVirtualKeyHapticFeedbackEnabled(Z)V
 HSPLcom/android/server/wm/WindowManagerService;->setNewDisplayOverrideConfiguration(Landroid/content/res/Configuration;Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/WindowManagerService;->setPipVisibility(Z)V
-PLcom/android/server/wm/WindowManagerService;->setTransparentRegionWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/graphics/Region;)V
+HPLcom/android/server/wm/WindowManagerService;->setResizeDimLayer(ZIF)V
+HSPLcom/android/server/wm/WindowManagerService;->setShadowRenderer()V
+PLcom/android/server/wm/WindowManagerService;->setStrictModeVisualIndicatorPreference(Ljava/lang/String;)V
+HPLcom/android/server/wm/WindowManagerService;->setTransparentRegionWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/graphics/Region;)V
+PLcom/android/server/wm/WindowManagerService;->setWillReplaceWindows(Landroid/os/IBinder;Z)V
+PLcom/android/server/wm/WindowManagerService;->setWindowOpaqueLocked(Landroid/os/IBinder;Z)V
+PLcom/android/server/wm/WindowManagerService;->shouldShowIme(I)Z
+PLcom/android/server/wm/WindowManagerService;->shouldShowSystemDecors(I)Z
 HSPLcom/android/server/wm/WindowManagerService;->showEmulatorDisplayOverlayIfNeeded()V
+PLcom/android/server/wm/WindowManagerService;->showRecentApps()V
 HSPLcom/android/server/wm/WindowManagerService;->startFreezingDisplayLocked(IILcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/WindowManagerService;->stopFreezingDisplayLocked()V
 HSPLcom/android/server/wm/WindowManagerService;->systemReady()V
-PLcom/android/server/wm/WindowManagerService;->triggerAnimationFailsafe()V
-PLcom/android/server/wm/WindowManagerService;->tryStartExitingAnimation(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;Z)Z
+PLcom/android/server/wm/WindowManagerService;->thawDisplayRotation(I)V
+PLcom/android/server/wm/WindowManagerService;->thawRotation()V
+HPLcom/android/server/wm/WindowManagerService;->triggerAnimationFailsafe()V
+HPLcom/android/server/wm/WindowManagerService;->tryStartExitingAnimation(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;Z)Z
+HPLcom/android/server/wm/WindowManagerService;->unprivilegedAppCanCreateTokenWith(Lcom/android/server/wm/WindowState;IIILandroid/os/IBinder;Ljava/lang/String;)Z
+PLcom/android/server/wm/WindowManagerService;->unregisterAppFreezeListener(Lcom/android/server/wm/WindowManagerService$AppFreezeListener;)V
+PLcom/android/server/wm/WindowManagerService;->unregisterSystemGestureExclusionListener(Landroid/view/ISystemGestureExclusionListener;I)V
+PLcom/android/server/wm/WindowManagerService;->unregisterWallpaperVisibilityListener(Landroid/view/IWallpaperVisibilityListener;I)V
+PLcom/android/server/wm/WindowManagerService;->updateAppOpsState()V
+HPLcom/android/server/wm/WindowManagerService;->updateDisplayContentLocation(Landroid/view/IWindow;III)V
 HSPLcom/android/server/wm/WindowManagerService;->updateFocusedWindowLocked(IZ)Z
 PLcom/android/server/wm/WindowManagerService;->updateHiddenWhileSuspendedState(Landroid/util/ArraySet;Z)V
-HPLcom/android/server/wm/WindowManagerService;->updateNonSystemOverlayWindowsVisibilityIfNeeded(Lcom/android/server/wm/WindowState;Z)V
+HSPLcom/android/server/wm/WindowManagerService;->updateNonSystemOverlayWindowsVisibilityIfNeeded(Lcom/android/server/wm/WindowState;Z)V
 PLcom/android/server/wm/WindowManagerService;->updatePointerIcon(Landroid/view/IWindow;)V
 HSPLcom/android/server/wm/WindowManagerService;->updateRotation(ZZ)V
 HSPLcom/android/server/wm/WindowManagerService;->updateRotationUnchecked(ZZ)V
-PLcom/android/server/wm/WindowManagerService;->watchRotation(Landroid/view/IRotationWatcher;I)I
-HPLcom/android/server/wm/WindowManagerService;->windowForClientLocked(Lcom/android/server/wm/Session;Landroid/os/IBinder;Z)Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/WindowManagerService;->windowForClientLocked(Lcom/android/server/wm/Session;Landroid/view/IWindow;Z)Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/WindowManagerService;->updateTapExcludeRegion(Landroid/view/IWindow;Landroid/graphics/Region;)V
+HPLcom/android/server/wm/WindowManagerService;->watchRotation(Landroid/view/IRotationWatcher;I)I
+HSPLcom/android/server/wm/WindowManagerService;->windowForClientLocked(Lcom/android/server/wm/Session;Landroid/os/IBinder;Z)Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowManagerService;->windowForClientLocked(Lcom/android/server/wm/Session;Landroid/view/IWindow;Z)Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/WindowManagerShellCommand;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerShellCommand;->getDisplayId(Ljava/lang/String;)I
 PLcom/android/server/wm/WindowManagerShellCommand;->lambda$runDumpVisibleWindowViews$0(Ljava/util/ArrayList;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/WindowManagerShellCommand;->onCommand(Ljava/lang/String;)I
+PLcom/android/server/wm/WindowManagerShellCommand;->printInitialDisplayDensity(Ljava/io/PrintWriter;I)V
+PLcom/android/server/wm/WindowManagerShellCommand;->runDismissKeyguard(Ljava/io/PrintWriter;)I
+PLcom/android/server/wm/WindowManagerShellCommand;->runDisplayDensity(Ljava/io/PrintWriter;)I
 PLcom/android/server/wm/WindowManagerShellCommand;->runDumpVisibleWindowViews(Ljava/io/PrintWriter;)I
 HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;-><init>()V
 HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->boost()V
 HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->reset()V
-PLcom/android/server/wm/WindowManagerThreadPriorityBooster;->setAppTransitionRunning(Z)V
+HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->setAppTransitionRunning(Z)V
 PLcom/android/server/wm/WindowManagerThreadPriorityBooster;->setBoundsAnimationRunning(Z)V
-PLcom/android/server/wm/WindowManagerThreadPriorityBooster;->updatePriorityLocked()V
+HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->updatePriorityLocked()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
-PLcom/android/server/wm/WindowProcessController;->addActivityIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/WindowProcessController;->addActivityIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/WindowProcessController;->addPackage(Ljava/lang/String;)V
 PLcom/android/server/wm/WindowProcessController;->addRecentTask(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/WindowProcessController;->appEarlyNotResponding(Ljava/lang/String;Ljava/lang/Runnable;)V
+PLcom/android/server/wm/WindowProcessController;->appDied()V
+PLcom/android/server/wm/WindowProcessController;->appDied(Ljava/lang/String;)V
+HPLcom/android/server/wm/WindowProcessController;->appEarlyNotResponding(Ljava/lang/String;Ljava/lang/Runnable;)V
 PLcom/android/server/wm/WindowProcessController;->appNotResponding(Ljava/lang/String;Ljava/lang/Runnable;Ljava/lang/Runnable;)Z
 PLcom/android/server/wm/WindowProcessController;->areBackgroundActivityStartsAllowed()Z
 HSPLcom/android/server/wm/WindowProcessController;->clearActivities()V
-PLcom/android/server/wm/WindowProcessController;->clearPackageList()V
+HPLcom/android/server/wm/WindowProcessController;->clearPackageList()V
 HSPLcom/android/server/wm/WindowProcessController;->clearRecentTasks()V
 HPLcom/android/server/wm/WindowProcessController;->computeOomAdjFromActivities(ILcom/android/server/wm/WindowProcessController$ComputeOomAdjCallback;)I
-PLcom/android/server/wm/WindowProcessController;->computeRelaunchReason()I
-PLcom/android/server/wm/WindowProcessController;->createProfilerInfoIfNeeded()Landroid/app/ProfilerInfo;
-PLcom/android/server/wm/WindowProcessController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/WindowProcessController;->computeRelaunchReason()I
+HSPLcom/android/server/wm/WindowProcessController;->createProfilerInfoIfNeeded()Landroid/app/ProfilerInfo;
+HSPLcom/android/server/wm/WindowProcessController;->dispatchConfigurationChange(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/WindowProcessController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/wm/WindowProcessController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/wm/WindowProcessController;->getChildCount()I
-PLcom/android/server/wm/WindowProcessController;->getCpuTime()J
-PLcom/android/server/wm/WindowProcessController;->getCurrentSchedulingGroup()I
-PLcom/android/server/wm/WindowProcessController;->getParent()Lcom/android/server/wm/ConfigurationContainer;
-PLcom/android/server/wm/WindowProcessController;->getPid()I
-PLcom/android/server/wm/WindowProcessController;->getReportedProcState()I
-PLcom/android/server/wm/WindowProcessController;->getRequiredAbi()Ljava/lang/String;
-PLcom/android/server/wm/WindowProcessController;->getThread()Landroid/app/IApplicationThread;
+HSPLcom/android/server/wm/WindowProcessController;->getCpuTime()J
+PLcom/android/server/wm/WindowProcessController;->getCurrentProcState()I
+HSPLcom/android/server/wm/WindowProcessController;->getCurrentSchedulingGroup()I
+PLcom/android/server/wm/WindowProcessController;->getDisplayContextsWithErrorDialogs(Ljava/util/List;)V
+PLcom/android/server/wm/WindowProcessController;->getFgInteractionTime()J
+PLcom/android/server/wm/WindowProcessController;->getInputDispatchingTimeout()J
+PLcom/android/server/wm/WindowProcessController;->getInteractionEventTime()J
+HSPLcom/android/server/wm/WindowProcessController;->getParent()Lcom/android/server/wm/ConfigurationContainer;
+HSPLcom/android/server/wm/WindowProcessController;->getPid()I
+HSPLcom/android/server/wm/WindowProcessController;->getReportedProcState()I
+HSPLcom/android/server/wm/WindowProcessController;->getRequiredAbi()Ljava/lang/String;
+HSPLcom/android/server/wm/WindowProcessController;->getThread()Landroid/app/IApplicationThread;
+PLcom/android/server/wm/WindowProcessController;->getWhenUnimportant()J
 HSPLcom/android/server/wm/WindowProcessController;->hasActivities()Z
 HSPLcom/android/server/wm/WindowProcessController;->hasActivitiesOrRecentTasks()Z
-PLcom/android/server/wm/WindowProcessController;->hasActivityInVisibleTask()Z
+HPLcom/android/server/wm/WindowProcessController;->hasActivityInVisibleTask()Z
+PLcom/android/server/wm/WindowProcessController;->hasClientActivities()Z
+PLcom/android/server/wm/WindowProcessController;->hasForegroundActivities()Z
 PLcom/android/server/wm/WindowProcessController;->hasForegroundServices()Z
-HPLcom/android/server/wm/WindowProcessController;->hasRecentTasks()Z
-PLcom/android/server/wm/WindowProcessController;->hasStartedActivity(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/WindowProcessController;->hasThread()Z
+PLcom/android/server/wm/WindowProcessController;->hasOverlayUi()Z
+PLcom/android/server/wm/WindowProcessController;->hasPendingUiClean()Z
+HSPLcom/android/server/wm/WindowProcessController;->hasRecentTasks()Z
+HPLcom/android/server/wm/WindowProcessController;->hasStartedActivity(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowProcessController;->hasThread()Z
+PLcom/android/server/wm/WindowProcessController;->hasTopUi()Z
 HSPLcom/android/server/wm/WindowProcessController;->hasVisibleActivities()Z
-PLcom/android/server/wm/WindowProcessController;->isCrashing()Z
-HPLcom/android/server/wm/WindowProcessController;->isHomeProcess()Z
+PLcom/android/server/wm/WindowProcessController;->isBoundByForegroundUid()Z
+HSPLcom/android/server/wm/WindowProcessController;->isCrashing()Z
+HSPLcom/android/server/wm/WindowProcessController;->isHomeProcess()Z
 HSPLcom/android/server/wm/WindowProcessController;->isInstrumenting()Z
-PLcom/android/server/wm/WindowProcessController;->isInterestingToUser()Z
-PLcom/android/server/wm/WindowProcessController;->isNotResponding()Z
-HPLcom/android/server/wm/WindowProcessController;->isPreviousProcess()Z
+HPLcom/android/server/wm/WindowProcessController;->isInterestingToUser()Z
+HSPLcom/android/server/wm/WindowProcessController;->isNotResponding()Z
+PLcom/android/server/wm/WindowProcessController;->isPerceptible()Z
+PLcom/android/server/wm/WindowProcessController;->isPersistent()Z
+HSPLcom/android/server/wm/WindowProcessController;->isPreviousProcess()Z
 HSPLcom/android/server/wm/WindowProcessController;->isRemoved()Z
+PLcom/android/server/wm/WindowProcessController;->isUsingWrapper()Z
+PLcom/android/server/wm/WindowProcessController;->makeFinishingForProcessRemoved()V
 HSPLcom/android/server/wm/WindowProcessController;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/WindowProcessController;->onMergedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/WindowProcessController;->onProcCachedStateChanged(Z)V
 PLcom/android/server/wm/WindowProcessController;->onRequestedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/WindowProcessController;->onStartActivity(ILandroid/content/pm/ActivityInfo;)V
-PLcom/android/server/wm/WindowProcessController;->onTopProcChanged()V
-PLcom/android/server/wm/WindowProcessController;->postPendingUiCleanMsg(Z)V
+HSPLcom/android/server/wm/WindowProcessController;->onStartActivity(ILandroid/content/pm/ActivityInfo;)V
+HSPLcom/android/server/wm/WindowProcessController;->onTopProcChanged()V
+HPLcom/android/server/wm/WindowProcessController;->postPendingUiCleanMsg(Z)V
+HSPLcom/android/server/wm/WindowProcessController;->registerActivityConfigurationListener(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/WindowProcessController;->registerDisplayConfigurationListener(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/WindowProcessController;->registerDisplayConfigurationListenerLocked(Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/WindowProcessController;->registeredForDisplayConfigChanges()Z
+HSPLcom/android/server/wm/WindowProcessController;->registeredForDisplayConfigChanges()Z
 PLcom/android/server/wm/WindowProcessController;->releaseSomeActivities(Ljava/lang/String;)V
-PLcom/android/server/wm/WindowProcessController;->removeActivity(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/WindowProcessController;->removeRecentTask(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/WindowProcessController;->removeActivity(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/WindowProcessController;->removeRecentTask(Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/WindowProcessController;->setAllowBackgroundActivityStarts(Z)V
 HSPLcom/android/server/wm/WindowProcessController;->setBoundClientUids(Landroid/util/ArraySet;)V
 HSPLcom/android/server/wm/WindowProcessController;->setCrashing(Z)V
@@ -23636,355 +38910,429 @@
 HSPLcom/android/server/wm/WindowProcessController;->setFgInteractionTime(J)V
 HSPLcom/android/server/wm/WindowProcessController;->setHasClientActivities(Z)V
 HSPLcom/android/server/wm/WindowProcessController;->setHasForegroundActivities(Z)V
+PLcom/android/server/wm/WindowProcessController;->setHasForegroundServices(Z)V
+PLcom/android/server/wm/WindowProcessController;->setHasOverlayUi(Z)V
 PLcom/android/server/wm/WindowProcessController;->setHasTopUi(Z)V
+PLcom/android/server/wm/WindowProcessController;->setInstrumenting(ZZ)V
 HSPLcom/android/server/wm/WindowProcessController;->setInteractionEventTime(J)V
 PLcom/android/server/wm/WindowProcessController;->setLastActivityFinishTimeIfNeeded(J)V
-PLcom/android/server/wm/WindowProcessController;->setLastActivityLaunchTime(J)V
+HSPLcom/android/server/wm/WindowProcessController;->setLastActivityLaunchTime(J)V
 HSPLcom/android/server/wm/WindowProcessController;->setLastReportedConfiguration(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/WindowProcessController;->setNotResponding(Z)V
-PLcom/android/server/wm/WindowProcessController;->setPendingUiClean(Z)V
-PLcom/android/server/wm/WindowProcessController;->setPendingUiCleanAndForceProcessStateUpTo(I)V
+HSPLcom/android/server/wm/WindowProcessController;->setPendingUiClean(Z)V
+HPLcom/android/server/wm/WindowProcessController;->setPendingUiCleanAndForceProcessStateUpTo(I)V
 HSPLcom/android/server/wm/WindowProcessController;->setPerceptible(Z)V
 HSPLcom/android/server/wm/WindowProcessController;->setPersistent(Z)V
 HSPLcom/android/server/wm/WindowProcessController;->setPid(I)V
 HSPLcom/android/server/wm/WindowProcessController;->setReportedProcState(I)V
 HSPLcom/android/server/wm/WindowProcessController;->setRequiredAbi(Ljava/lang/String;)V
-PLcom/android/server/wm/WindowProcessController;->setRunningRecentsAnimation(Z)V
+HPLcom/android/server/wm/WindowProcessController;->setRunningRecentsAnimation(Z)V
+HPLcom/android/server/wm/WindowProcessController;->setRunningRemoteAnimation(Z)V
 HSPLcom/android/server/wm/WindowProcessController;->setThread(Landroid/app/IApplicationThread;)V
 HSPLcom/android/server/wm/WindowProcessController;->setUsingWrapper(Z)V
-PLcom/android/server/wm/WindowProcessController;->setWhenUnimportant(J)V
-PLcom/android/server/wm/WindowProcessController;->shouldKillProcessForRemovedTask(Lcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/WindowProcessController;->shouldSetProfileProc()Z
-PLcom/android/server/wm/WindowProcessController;->stopFreezingActivities()V
-PLcom/android/server/wm/WindowProcessController;->toString()Ljava/lang/String;
+HPLcom/android/server/wm/WindowProcessController;->setWhenUnimportant(J)V
+HPLcom/android/server/wm/WindowProcessController;->shouldKillProcessForRemovedTask(Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/WindowProcessController;->shouldSetProfileProc()Z
+HPLcom/android/server/wm/WindowProcessController;->stopFreezingActivities()V
+HPLcom/android/server/wm/WindowProcessController;->toString()Ljava/lang/String;
+HSPLcom/android/server/wm/WindowProcessController;->unregisterActivityConfigurationListener()V
+HSPLcom/android/server/wm/WindowProcessController;->unregisterDisplayConfigurationListener()V
 PLcom/android/server/wm/WindowProcessController;->unregisterDisplayConfigurationListenerLocked()V
+HSPLcom/android/server/wm/WindowProcessController;->updateActivityConfigurationListener()V
 HSPLcom/android/server/wm/WindowProcessController;->updateConfiguration()V
-PLcom/android/server/wm/WindowProcessController;->updateProcessInfo(ZZZ)V
+HPLcom/android/server/wm/WindowProcessController;->updateProcessInfo(ZZZ)V
 HPLcom/android/server/wm/WindowProcessController;->updateRunningRemoteOrRecentsAnimation()V
-PLcom/android/server/wm/WindowProcessController;->updateServiceConnectionActivities()V
-HPLcom/android/server/wm/WindowProcessController;->updateTopResumingActivityInProcessIfNeeded(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowProcessController;->updateServiceConnectionActivities()V
+HSPLcom/android/server/wm/WindowProcessController;->updateTopResumingActivityInProcessIfNeeded(Lcom/android/server/wm/ActivityRecord;)Z
 HSPLcom/android/server/wm/WindowProcessControllerMap;-><init>()V
 HSPLcom/android/server/wm/WindowProcessControllerMap;->getPidMap()Landroid/util/SparseArray;
-HPLcom/android/server/wm/WindowProcessControllerMap;->getProcess(I)Lcom/android/server/wm/WindowProcessController;
+HSPLcom/android/server/wm/WindowProcessControllerMap;->getProcess(I)Lcom/android/server/wm/WindowProcessController;
+PLcom/android/server/wm/WindowProcessControllerMap;->getProcesses(I)Landroid/util/ArraySet;
 HSPLcom/android/server/wm/WindowProcessControllerMap;->put(ILcom/android/server/wm/WindowProcessController;)V
 HSPLcom/android/server/wm/WindowProcessControllerMap;->remove(I)V
 HSPLcom/android/server/wm/WindowProcessControllerMap;->removeProcessFromUidMap(Lcom/android/server/wm/WindowProcessController;)V
-PLcom/android/server/wm/WindowState$1;-><init>()V
+HSPLcom/android/server/wm/WindowState$1;-><init>()V
+PLcom/android/server/wm/WindowState$1;->compare(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)I
 PLcom/android/server/wm/WindowState$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLcom/android/server/wm/WindowState$2;-><init>(Lcom/android/server/wm/WindowManagerService;)V
-PLcom/android/server/wm/WindowState$DeathRecipient;-><init>(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/WindowState$DeathRecipient;-><init>(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState$1;)V
-PLcom/android/server/wm/WindowState$DeathRecipient;->binderDied()V
-PLcom/android/server/wm/WindowState$MoveAnimationSpec;-><init>(Lcom/android/server/wm/WindowState;IIII)V
-PLcom/android/server/wm/WindowState$MoveAnimationSpec;-><init>(Lcom/android/server/wm/WindowState;IIIILcom/android/server/wm/WindowState$1;)V
-PLcom/android/server/wm/WindowState$MoveAnimationSpec;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V
-PLcom/android/server/wm/WindowState$MoveAnimationSpec;->getDuration()J
-PLcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;-><init>()V
-PLcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;->reset()V
-PLcom/android/server/wm/WindowState$WindowId;-><init>(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/WindowState$WindowId;-><init>(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState$1;)V
+HSPLcom/android/server/wm/WindowState$2;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowState$2;->isInteractive()Z
+PLcom/android/server/wm/WindowState$2;->wakeUp(JILjava/lang/String;)V
+PLcom/android/server/wm/WindowState$3;-><init>(Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;ZILandroid/view/DisplayCutout;)V
+PLcom/android/server/wm/WindowState$3;->run()V
+HSPLcom/android/server/wm/WindowState$DeathRecipient;-><init>(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/WindowState$DeathRecipient;-><init>(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState$1;)V
+HPLcom/android/server/wm/WindowState$DeathRecipient;->binderDied()V
+HPLcom/android/server/wm/WindowState$MoveAnimationSpec;-><init>(Lcom/android/server/wm/WindowState;IIII)V
+HPLcom/android/server/wm/WindowState$MoveAnimationSpec;-><init>(Lcom/android/server/wm/WindowState;IIIILcom/android/server/wm/WindowState$1;)V
+HPLcom/android/server/wm/WindowState$MoveAnimationSpec;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V
+PLcom/android/server/wm/WindowState$MoveAnimationSpec;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/wm/WindowState$MoveAnimationSpec;->dumpDebugInner(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/wm/WindowState$MoveAnimationSpec;->getDuration()J
+HSPLcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;-><init>()V
+HSPLcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;->reset()V
+HSPLcom/android/server/wm/WindowState$WindowId;-><init>(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/WindowState$WindowId;-><init>(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState$1;)V
 PLcom/android/server/wm/WindowState$WindowId;->isFocused()Z
-PLcom/android/server/wm/WindowState;-><clinit>()V
-PLcom/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;IILandroid/view/WindowManager$LayoutParams;IIZ)V
-PLcom/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;IILandroid/view/WindowManager$LayoutParams;IIZLcom/android/server/wm/WindowState$PowerManagerWrapper;)V
-HPLcom/android/server/wm/WindowState;->adjustStartingWindowFlags()V
-PLcom/android/server/wm/WindowState;->applyAdjustForImeIfNeeded()V
-HPLcom/android/server/wm/WindowState;->applyDims(Lcom/android/server/wm/Dimmer;)V
-HPLcom/android/server/wm/WindowState;->applyGravityAndUpdateFrame(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowState;->applyImeWindowsIfNeeded(Lcom/android/internal/util/ToBooleanFunction;Z)Z
-HPLcom/android/server/wm/WindowState;->applyInOrderWithImeWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
-HPLcom/android/server/wm/WindowState;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V
-HPLcom/android/server/wm/WindowState;->assignLayer(Landroid/view/SurfaceControl$Transaction;I)V
-PLcom/android/server/wm/WindowState;->attach()V
-HPLcom/android/server/wm/WindowState;->calculatePolicyCrop(Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowState;->calculateSystemDecorRect(Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowState;->canAddInternalSystemWindow()Z
-HPLcom/android/server/wm/WindowState;->canAffectSystemUiFlags()Z
-PLcom/android/server/wm/WindowState;->canBeImeTarget()Z
-PLcom/android/server/wm/WindowState;->canReceiveKeys()Z
-HPLcom/android/server/wm/WindowState;->canReceiveKeys(Z)Z
-PLcom/android/server/wm/WindowState;->canShowWhenLocked()Z
-HPLcom/android/server/wm/WindowState;->cantReceiveTouchInput()Z
-PLcom/android/server/wm/WindowState;->checkPolicyVisibilityChange()V
-PLcom/android/server/wm/WindowState;->clearAnimatingFlags()Z
+HSPLcom/android/server/wm/WindowState;-><clinit>()V
+HSPLcom/android/server/wm/WindowState;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/Session;Landroid/view/IWindow;Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowState;IILandroid/view/WindowManager$LayoutParams;IIZ)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;IILandroid/view/WindowManager$LayoutParams;IIZLcom/android/server/wm/WindowState$PowerManagerWrapper;)V
+PLcom/android/server/wm/WindowState;->access$200(Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/WindowState;->access$300(Lcom/android/server/wm/WindowState;Z)V
+PLcom/android/server/wm/WindowState;->access$400(Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;ZILandroid/view/DisplayCutout;)V
+PLcom/android/server/wm/WindowState;->addEmbeddedDisplayContent(Lcom/android/server/wm/DisplayContent;)Z
+HSPLcom/android/server/wm/WindowState;->adjustStartingWindowFlags()V
+HSPLcom/android/server/wm/WindowState;->applyAdjustForImeIfNeeded()V
+HSPLcom/android/server/wm/WindowState;->applyDims(Lcom/android/server/wm/Dimmer;)V
+HSPLcom/android/server/wm/WindowState;->applyGravityAndUpdateFrame(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowState;->applyGravityAndUpdateFrame(Lcom/android/server/wm/WindowFrames;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowState;->applyImeWindowsIfNeeded(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HSPLcom/android/server/wm/WindowState;->applyInOrderWithImeWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HPLcom/android/server/wm/WindowState;->applyInsets(Landroid/graphics/Region;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowState;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/WindowState;->assignLayer(Landroid/view/SurfaceControl$Transaction;I)V
+HSPLcom/android/server/wm/WindowState;->attach()V
+HSPLcom/android/server/wm/WindowState;->calculatePolicyCrop(Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowState;->calculateSystemDecorRect(Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowState;->canAddInternalSystemWindow()Z
+HSPLcom/android/server/wm/WindowState;->canAffectSystemUiFlags()Z
+HPLcom/android/server/wm/WindowState;->canBeImeTarget()Z
+HSPLcom/android/server/wm/WindowState;->canReceiveKeys()Z
+HSPLcom/android/server/wm/WindowState;->canReceiveKeys(Z)Z
+HPLcom/android/server/wm/WindowState;->canShowWhenLocked()Z
+HSPLcom/android/server/wm/WindowState;->cantReceiveTouchInput()Z
+HPLcom/android/server/wm/WindowState;->checkPolicyVisibilityChange()V
+HPLcom/android/server/wm/WindowState;->clearAnimatingFlags()Z
 PLcom/android/server/wm/WindowState;->clearPolicyVisibilityFlag(I)V
-HPLcom/android/server/wm/WindowState;->computeDragResizing()Z
-HPLcom/android/server/wm/WindowState;->computeFrameLw()V
-HPLcom/android/server/wm/WindowState;->cropRegionToStackBoundsIfNeeded(Landroid/graphics/Region;)V
-PLcom/android/server/wm/WindowState;->destroySurface(ZZ)Z
+HSPLcom/android/server/wm/WindowState;->computeDragResizing()Z
+HPLcom/android/server/wm/WindowState;->computeFrame(Lcom/android/server/wm/DisplayFrames;)V
+HSPLcom/android/server/wm/WindowState;->computeFrameLw()V
+HSPLcom/android/server/wm/WindowState;->cropRegionToStackBoundsIfNeeded(Landroid/graphics/Region;)V
+HPLcom/android/server/wm/WindowState;->destroySurface(ZZ)Z
 PLcom/android/server/wm/WindowState;->destroySurfaceUnchecked()V
 HPLcom/android/server/wm/WindowState;->dispatchResized(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;ZILandroid/view/DisplayCutout;)V
-PLcom/android/server/wm/WindowState;->dispatchWallpaperVisibility(Z)V
-PLcom/android/server/wm/WindowState;->disposeInputChannel()V
-PLcom/android/server/wm/WindowState;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HSPLcom/android/server/wm/WindowState;->dispatchWallpaperVisibility(Z)V
+HPLcom/android/server/wm/WindowState;->disposeInputChannel()V
+HPLcom/android/server/wm/WindowState;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
 HPLcom/android/server/wm/WindowState;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
-PLcom/android/server/wm/WindowState;->expandForSurfaceInsets(Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowState;->expandForSurfaceInsets(Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/WindowState;->fillsDisplay()Z
-HPLcom/android/server/wm/WindowState;->finishSeamlessRotation(Z)V
-PLcom/android/server/wm/WindowState;->forAllWindowBottomToTop(Lcom/android/internal/util/ToBooleanFunction;)Z
+HSPLcom/android/server/wm/WindowState;->finishSeamlessRotation(Z)V
+HPLcom/android/server/wm/WindowState;->forAllWindowBottomToTop(Lcom/android/internal/util/ToBooleanFunction;)Z
 HPLcom/android/server/wm/WindowState;->forAllWindowTopToBottom(Lcom/android/internal/util/ToBooleanFunction;)Z
-HPLcom/android/server/wm/WindowState;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HSPLcom/android/server/wm/WindowState;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
 PLcom/android/server/wm/WindowState;->forceWindowsScaleableInTransaction(Z)V
+HPLcom/android/server/wm/WindowState;->frameCoversEntireAppTokenBounds()Z
 HPLcom/android/server/wm/WindowState;->getAnimationFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/WindowState;->getAppToken()Landroid/view/IApplicationToken;
-HPLcom/android/server/wm/WindowState;->getAttrs()Landroid/view/WindowManager$LayoutParams;
-HPLcom/android/server/wm/WindowState;->getBackdropFrame(Landroid/graphics/Rect;)Landroid/graphics/Rect;
-PLcom/android/server/wm/WindowState;->getBaseType()I
-PLcom/android/server/wm/WindowState;->getBounds()Landroid/graphics/Rect;
+HSPLcom/android/server/wm/WindowState;->getAppToken()Landroid/view/IApplicationToken;
+HSPLcom/android/server/wm/WindowState;->getAttrs()Landroid/view/WindowManager$LayoutParams;
+HSPLcom/android/server/wm/WindowState;->getBackdropFrame(Landroid/graphics/Rect;)Landroid/graphics/Rect;
+HSPLcom/android/server/wm/WindowState;->getBaseType()I
+HSPLcom/android/server/wm/WindowState;->getBounds()Landroid/graphics/Rect;
 HPLcom/android/server/wm/WindowState;->getClientInsetsState()Landroid/view/InsetsState;
-HPLcom/android/server/wm/WindowState;->getCompatFrame(Landroid/graphics/Rect;)V
-PLcom/android/server/wm/WindowState;->getCompatFrameSize(Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowState;->getConfiguration()Landroid/content/res/Configuration;
+HSPLcom/android/server/wm/WindowState;->getCompatFrame(Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowState;->getCompatFrameSize(Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowState;->getConfiguration()Landroid/content/res/Configuration;
 PLcom/android/server/wm/WindowState;->getContainingFrame()Landroid/graphics/Rect;
-PLcom/android/server/wm/WindowState;->getContentFrameLw()Landroid/graphics/Rect;
+HPLcom/android/server/wm/WindowState;->getContentFrameLw()Landroid/graphics/Rect;
 PLcom/android/server/wm/WindowState;->getContentInsets()Landroid/graphics/Rect;
-PLcom/android/server/wm/WindowState;->getContentInsets(Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowState;->getControllableInsetProvider()Lcom/android/server/wm/InsetsSourceProvider;
-HPLcom/android/server/wm/WindowState;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
-PLcom/android/server/wm/WindowState;->getDisplayFrameLw()Landroid/graphics/Rect;
-PLcom/android/server/wm/WindowState;->getDisplayId()I
-PLcom/android/server/wm/WindowState;->getDisplayInfo()Landroid/view/DisplayInfo;
-PLcom/android/server/wm/WindowState;->getDisplayedBounds()Landroid/graphics/Rect;
-PLcom/android/server/wm/WindowState;->getDrawnStateEvaluated()Z
+HPLcom/android/server/wm/WindowState;->getContentInsets(Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowState;->getControllableInsetProvider()Lcom/android/server/wm/InsetsSourceProvider;
+PLcom/android/server/wm/WindowState;->getDeferTransactionBarrier()Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/WindowState;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/WindowState;->getDisplayFrameLw()Landroid/graphics/Rect;
+HSPLcom/android/server/wm/WindowState;->getDisplayId()I
+HPLcom/android/server/wm/WindowState;->getDisplayInfo()Landroid/view/DisplayInfo;
+HPLcom/android/server/wm/WindowState;->getDisplayedBounds()Landroid/graphics/Rect;
+HSPLcom/android/server/wm/WindowState;->getDrawnStateEvaluated()Z
 HPLcom/android/server/wm/WindowState;->getEffectiveTouchableRegion(Landroid/graphics/Region;)V
-HPLcom/android/server/wm/WindowState;->getFrameLw()Landroid/graphics/Rect;
+HSPLcom/android/server/wm/WindowState;->getFrameLw()Landroid/graphics/Rect;
 PLcom/android/server/wm/WindowState;->getFrameNumber()J
 PLcom/android/server/wm/WindowState;->getGivenContentInsetsLw()Landroid/graphics/Rect;
-PLcom/android/server/wm/WindowState;->getGivenInsetsPendingLw()Z
+HPLcom/android/server/wm/WindowState;->getGivenInsetsPendingLw()Z
 PLcom/android/server/wm/WindowState;->getGivenVisibleInsetsLw()Landroid/graphics/Rect;
-PLcom/android/server/wm/WindowState;->getInputDispatchingTimeoutNanos()J
-HPLcom/android/server/wm/WindowState;->getInsetsForRelayout(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowState;->getKeyInterceptionInfo()Lcom/android/internal/policy/KeyInterceptionInfo;
-HPLcom/android/server/wm/WindowState;->getLastReportedConfiguration()Landroid/content/res/Configuration;
-PLcom/android/server/wm/WindowState;->getLastReportedMergedConfiguration(Landroid/util/MergedConfiguration;)V
-HPLcom/android/server/wm/WindowState;->getMergedConfiguration(Landroid/util/MergedConfiguration;)V
-HPLcom/android/server/wm/WindowState;->getName()Ljava/lang/String;
-HPLcom/android/server/wm/WindowState;->getOrientationChanging()Z
-PLcom/android/server/wm/WindowState;->getOwningPackage()Ljava/lang/String;
-PLcom/android/server/wm/WindowState;->getOwningUid()I
-HPLcom/android/server/wm/WindowState;->getParentWindow()Lcom/android/server/wm/WindowState;
-PLcom/android/server/wm/WindowState;->getProcessGlobalConfiguration()Landroid/content/res/Configuration;
-PLcom/android/server/wm/WindowState;->getReplacingWindow()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->getInputDispatchingTimeoutNanos()J
+HSPLcom/android/server/wm/WindowState;->getInsetsForRelayout(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowState;->getKeyInterceptionInfo()Lcom/android/internal/policy/KeyInterceptionInfo;
+HSPLcom/android/server/wm/WindowState;->getLastReportedConfiguration()Landroid/content/res/Configuration;
+HPLcom/android/server/wm/WindowState;->getLastReportedMergedConfiguration(Landroid/util/MergedConfiguration;)V
+HPLcom/android/server/wm/WindowState;->getLayoutingWindowFrames()Lcom/android/server/wm/WindowFrames;
+HSPLcom/android/server/wm/WindowState;->getMergedConfiguration(Landroid/util/MergedConfiguration;)V
+HSPLcom/android/server/wm/WindowState;->getName()Ljava/lang/String;
+HSPLcom/android/server/wm/WindowState;->getOrientationChanging()Z
+HSPLcom/android/server/wm/WindowState;->getOwningPackage()Ljava/lang/String;
+HSPLcom/android/server/wm/WindowState;->getOwningUid()I
+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;->getReplacingWindow()Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/WindowState;->getRequestedInsetsState()Landroid/view/InsetsState;
+PLcom/android/server/wm/WindowState;->getResizeMode()I
+HSPLcom/android/server/wm/WindowState;->getRootTask()Lcom/android/server/wm/ActivityStack;
+HPLcom/android/server/wm/WindowState;->getRootTaskId()I
 PLcom/android/server/wm/WindowState;->getRotationAnimationHint()I
-PLcom/android/server/wm/WindowState;->getSession()Landroid/view/SurfaceSession;
+HSPLcom/android/server/wm/WindowState;->getSession()Landroid/view/SurfaceSession;
+PLcom/android/server/wm/WindowState;->getStableFrameLw()Landroid/graphics/Rect;
 PLcom/android/server/wm/WindowState;->getStableInsets()Landroid/graphics/Rect;
-PLcom/android/server/wm/WindowState;->getStableInsets(Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowState;->getStack()Lcom/android/server/wm/ActivityStack;
-PLcom/android/server/wm/WindowState;->getStackId()I
+HPLcom/android/server/wm/WindowState;->getStableInsets(Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowState;->getStack()Lcom/android/server/wm/ActivityStack;
+HPLcom/android/server/wm/WindowState;->getStackId()I
 PLcom/android/server/wm/WindowState;->getSurfaceLayer()I
-HPLcom/android/server/wm/WindowState;->getSurfaceTouchableRegion(Landroid/view/InputWindowHandle;I)I
-PLcom/android/server/wm/WindowState;->getSystemGestureExclusion()Ljava/util/List;
-PLcom/android/server/wm/WindowState;->getSystemUiVisibility()I
-HPLcom/android/server/wm/WindowState;->getTask()Lcom/android/server/wm/Task;
-PLcom/android/server/wm/WindowState;->getTopParentWindow()Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/WindowState;->getTouchableRegion(Landroid/graphics/Region;)V
+HSPLcom/android/server/wm/WindowState;->getSurfaceTouchableRegion(Landroid/view/InputWindowHandle;I)I
+HPLcom/android/server/wm/WindowState;->getSystemGestureExclusion()Ljava/util/List;
+HSPLcom/android/server/wm/WindowState;->getSystemUiVisibility()I
+HPLcom/android/server/wm/WindowState;->getTapExcludeRegion(Landroid/graphics/Region;)V
+HSPLcom/android/server/wm/WindowState;->getTask()Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/WindowState;->getTopParentWindow()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->getTouchableRegion(Landroid/graphics/Region;)V
+HPLcom/android/server/wm/WindowState;->getTransformationMatrix([FLandroid/graphics/Matrix;)V
+HPLcom/android/server/wm/WindowState;->getVisibleBounds(Landroid/graphics/Rect;)V
 PLcom/android/server/wm/WindowState;->getVisibleFrameLw()Landroid/graphics/Rect;
 HPLcom/android/server/wm/WindowState;->getWindow(Ljava/util/function/Predicate;)Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/WindowState;->getWindowFrames()Lcom/android/server/wm/WindowFrames;
-PLcom/android/server/wm/WindowState;->getWindowTag()Ljava/lang/CharSequence;
-HPLcom/android/server/wm/WindowState;->getWmDisplayCutout()Lcom/android/server/wm/utils/WmDisplayCutout;
-HPLcom/android/server/wm/WindowState;->handleWindowMovedIfNeeded()V
-HPLcom/android/server/wm/WindowState;->hasContentToDisplay()Z
+HSPLcom/android/server/wm/WindowState;->getWindowFrames()Lcom/android/server/wm/WindowFrames;
+HPLcom/android/server/wm/WindowState;->getWindowInfo()Landroid/view/WindowInfo;
+HSPLcom/android/server/wm/WindowState;->getWindowTag()Ljava/lang/CharSequence;
+HSPLcom/android/server/wm/WindowState;->getWmDisplayCutout()Lcom/android/server/wm/utils/WmDisplayCutout;
+HSPLcom/android/server/wm/WindowState;->handleWindowMovedIfNeeded()V
+PLcom/android/server/wm/WindowState;->hasAppShownWindows()Z
+HSPLcom/android/server/wm/WindowState;->hasContentToDisplay()Z
 PLcom/android/server/wm/WindowState;->hasDrawnLw()Z
-HPLcom/android/server/wm/WindowState;->hasMoved()Z
-PLcom/android/server/wm/WindowState;->hasVisibleNotDrawnWallpaper()Z
-PLcom/android/server/wm/WindowState;->hideLw(Z)Z
+HSPLcom/android/server/wm/WindowState;->hasMoved()Z
+HPLcom/android/server/wm/WindowState;->hasTapExcludeRegion()Z
+HPLcom/android/server/wm/WindowState;->hasVisibleNotDrawnWallpaper()Z
+HPLcom/android/server/wm/WindowState;->hideLw(Z)Z
 HPLcom/android/server/wm/WindowState;->hideLw(ZZ)Z
-PLcom/android/server/wm/WindowState;->hideNonSystemOverlayWindowsWhenVisible()Z
+HSPLcom/android/server/wm/WindowState;->hideNonSystemOverlayWindowsWhenVisible()Z
 PLcom/android/server/wm/WindowState;->hidePermanentlyLw()V
 HPLcom/android/server/wm/WindowState;->hideWallpaperWindow(ZLjava/lang/String;)V
-PLcom/android/server/wm/WindowState;->inAppWindowThatMatchesParentBounds()Z
-HPLcom/android/server/wm/WindowState;->inSizeCompatMode()Z
-PLcom/android/server/wm/WindowState;->initAppOpsState()V
-PLcom/android/server/wm/WindowState;->initExclusionRestrictions()V
-HPLcom/android/server/wm/WindowState;->isAnimatingLw()Z
+HSPLcom/android/server/wm/WindowState;->inAppWindowThatMatchesParentBounds()Z
+HSPLcom/android/server/wm/WindowState;->inSizeCompatMode()Z
+HSPLcom/android/server/wm/WindowState;->initAppOpsState()V
+HSPLcom/android/server/wm/WindowState;->initExclusionRestrictions()V
+HPLcom/android/server/wm/WindowState;->isAnimating(I)Z
+HSPLcom/android/server/wm/WindowState;->isAnimatingLw()Z
 PLcom/android/server/wm/WindowState;->isAnimatingToRecents()Z
-HPLcom/android/server/wm/WindowState;->isChildWindow()Z
-PLcom/android/server/wm/WindowState;->isDimming()Z
-HPLcom/android/server/wm/WindowState;->isDisplayedLw()Z
-PLcom/android/server/wm/WindowState;->isDockedResizing()Z
-PLcom/android/server/wm/WindowState;->isDragResizeChanged()Z
-PLcom/android/server/wm/WindowState;->isDragResizing()Z
-PLcom/android/server/wm/WindowState;->isDrawFinishedLw()Z
-HPLcom/android/server/wm/WindowState;->isDrawnLw()Z
-PLcom/android/server/wm/WindowState;->isFocused()Z
-HPLcom/android/server/wm/WindowState;->isGoneForLayoutLw()Z
+HSPLcom/android/server/wm/WindowState;->isChildWindow()Z
+PLcom/android/server/wm/WindowState;->isClosing()Z
+HSPLcom/android/server/wm/WindowState;->isDimming()Z
+HSPLcom/android/server/wm/WindowState;->isDisplayedLw()Z
+HSPLcom/android/server/wm/WindowState;->isDockedResizing()Z
+HSPLcom/android/server/wm/WindowState;->isDragResizeChanged()Z
+HSPLcom/android/server/wm/WindowState;->isDragResizing()Z
+PLcom/android/server/wm/WindowState;->isDragResizingChangeReported()Z
+HSPLcom/android/server/wm/WindowState;->isDrawFinishedLw()Z
+HSPLcom/android/server/wm/WindowState;->isDrawnLw()Z
+HSPLcom/android/server/wm/WindowState;->isFocused()Z
+HSPLcom/android/server/wm/WindowState;->isFullyTransparent()Z
+HSPLcom/android/server/wm/WindowState;->isGoneForLayoutLw()Z
 HPLcom/android/server/wm/WindowState;->isHiddenFromUserLocked()Z
 HPLcom/android/server/wm/WindowState;->isImplicitlyExcludingAllSystemGestures()Z
-HPLcom/android/server/wm/WindowState;->isInputMethodTarget()Z
-PLcom/android/server/wm/WindowState;->isInputMethodWindow()Z
-PLcom/android/server/wm/WindowState;->isInteresting()Z
-PLcom/android/server/wm/WindowState;->isLaidOut()Z
-PLcom/android/server/wm/WindowState;->isLastConfigReportedToClient()Z
-PLcom/android/server/wm/WindowState;->isLegacyPolicyVisibility()Z
-PLcom/android/server/wm/WindowState;->isLetterboxedAppWindow()Z
-HPLcom/android/server/wm/WindowState;->isLetterboxedForDisplayCutoutLw()Z
-PLcom/android/server/wm/WindowState;->isLetterboxedOverlappingWith(Landroid/graphics/Rect;)Z
-HPLcom/android/server/wm/WindowState;->isObscuringDisplay()Z
-HPLcom/android/server/wm/WindowState;->isOnScreen()Z
-HPLcom/android/server/wm/WindowState;->isOpaqueDrawn()Z
-HPLcom/android/server/wm/WindowState;->isParentWindowGoneForLayout()Z
-HPLcom/android/server/wm/WindowState;->isParentWindowHidden()Z
-HPLcom/android/server/wm/WindowState;->isReadyForDisplay()Z
-PLcom/android/server/wm/WindowState;->isRtl()Z
-PLcom/android/server/wm/WindowState;->isSelfOrAncestorWindowAnimatingExit()Z
-HPLcom/android/server/wm/WindowState;->isVisible()Z
-HPLcom/android/server/wm/WindowState;->isVisibleByPolicy()Z
-HPLcom/android/server/wm/WindowState;->isVisibleLw()Z
-PLcom/android/server/wm/WindowState;->isVisibleNow()Z
-HPLcom/android/server/wm/WindowState;->isVisibleOrAdding()Z
-HPLcom/android/server/wm/WindowState;->isVoiceInteraction()Z
-PLcom/android/server/wm/WindowState;->isWinVisibleLw()Z
-PLcom/android/server/wm/WindowState;->layoutInParentFrame()Z
-PLcom/android/server/wm/WindowState;->logExclusionRestrictions(I)V
-PLcom/android/server/wm/WindowState;->logPerformShow(Ljava/lang/String;)V
-HPLcom/android/server/wm/WindowState;->matchesDisplayBounds()Z
-HPLcom/android/server/wm/WindowState;->mightAffectAllDrawn()Z
-HPLcom/android/server/wm/WindowState;->needsRelativeLayeringToIme()Z
-HPLcom/android/server/wm/WindowState;->needsZBoost()Z
-PLcom/android/server/wm/WindowState;->notifyInsetsChanged()V
-PLcom/android/server/wm/WindowState;->onAnimationFinished()V
-PLcom/android/server/wm/WindowState;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
-PLcom/android/server/wm/WindowState;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/WindowState;->isInputMethodTarget()Z
+HPLcom/android/server/wm/WindowState;->isInputMethodWindow()Z
+HSPLcom/android/server/wm/WindowState;->isInteresting()Z
+HSPLcom/android/server/wm/WindowState;->isLaidOut()Z
+HSPLcom/android/server/wm/WindowState;->isLastConfigReportedToClient()Z
+HPLcom/android/server/wm/WindowState;->isLegacyPolicyVisibility()Z
+HSPLcom/android/server/wm/WindowState;->isLetterboxedAppWindow()Z
+HSPLcom/android/server/wm/WindowState;->isLetterboxedForDisplayCutoutLw()Z
+HSPLcom/android/server/wm/WindowState;->isLetterboxedOverlappingWith(Landroid/graphics/Rect;)Z
+PLcom/android/server/wm/WindowState;->isNonToastOrStarting()Z
+PLcom/android/server/wm/WindowState;->isNonToastWindowVisibleForPid(I)Z
+HPLcom/android/server/wm/WindowState;->isNonToastWindowVisibleForUid(I)Z
+HSPLcom/android/server/wm/WindowState;->isObscuringDisplay()Z
+HSPLcom/android/server/wm/WindowState;->isOnScreen()Z
+HSPLcom/android/server/wm/WindowState;->isOpaqueDrawn()Z
+HSPLcom/android/server/wm/WindowState;->isParentWindowGoneForLayout()Z
+HSPLcom/android/server/wm/WindowState;->isParentWindowHidden()Z
+PLcom/android/server/wm/WindowState;->isPotentialDragTarget()Z
+HSPLcom/android/server/wm/WindowState;->isReadyForDisplay()Z
+HSPLcom/android/server/wm/WindowState;->isRecentsAnimationConsumingAppInput()Z
+HSPLcom/android/server/wm/WindowState;->isRtl()Z
+HPLcom/android/server/wm/WindowState;->isSelfOrAncestorWindowAnimatingExit()Z
+HSPLcom/android/server/wm/WindowState;->isVisible()Z
+HSPLcom/android/server/wm/WindowState;->isVisibleByPolicy()Z
+HSPLcom/android/server/wm/WindowState;->isVisibleLw()Z
+HPLcom/android/server/wm/WindowState;->isVisibleNow()Z
+HSPLcom/android/server/wm/WindowState;->isVisibleOrAdding()Z
+HSPLcom/android/server/wm/WindowState;->isVoiceInteraction()Z
+HPLcom/android/server/wm/WindowState;->isWinVisibleLw()Z
+HPLcom/android/server/wm/WindowState;->layoutInParentFrame()Z
+HPLcom/android/server/wm/WindowState;->logExclusionRestrictions(I)V
+HSPLcom/android/server/wm/WindowState;->logPerformShow(Ljava/lang/String;)V
+HSPLcom/android/server/wm/WindowState;->matchesDisplayBounds()Z
+HSPLcom/android/server/wm/WindowState;->mightAffectAllDrawn()Z
+HSPLcom/android/server/wm/WindowState;->needsRelativeLayeringToIme()Z
+HSPLcom/android/server/wm/WindowState;->needsZBoost()Z
+HPLcom/android/server/wm/WindowState;->notifyInsetsChanged()V
+HPLcom/android/server/wm/WindowState;->onAnimationFinished()V
+HPLcom/android/server/wm/WindowState;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
+HPLcom/android/server/wm/WindowState;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/WindowState;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/WindowState;->onAppVisibilityChanged(ZZ)V
-HPLcom/android/server/wm/WindowState;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/WindowState;->onExitAnimationDone()V
-PLcom/android/server/wm/WindowState;->onMergedOverrideConfigurationChanged()V
-PLcom/android/server/wm/WindowState;->onMovedByResize()V
-HPLcom/android/server/wm/WindowState;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
-PLcom/android/server/wm/WindowState;->onResize()V
+HSPLcom/android/server/wm/WindowState;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/WindowState;->onExitAnimationDone()V
+HSPLcom/android/server/wm/WindowState;->onMergedOverrideConfigurationChanged()V
+HPLcom/android/server/wm/WindowState;->onMovedByResize()V
+HSPLcom/android/server/wm/WindowState;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
+HPLcom/android/server/wm/WindowState;->onResize()V
 PLcom/android/server/wm/WindowState;->onSetAppExiting()Z
 PLcom/android/server/wm/WindowState;->onStartFreezingScreen()V
 PLcom/android/server/wm/WindowState;->onStopFreezingScreen()Z
-PLcom/android/server/wm/WindowState;->onSurfaceShownChanged(Z)V
-PLcom/android/server/wm/WindowState;->openInputChannel(Landroid/view/InputChannel;)V
+HSPLcom/android/server/wm/WindowState;->onSurfaceShownChanged(Z)V
+PLcom/android/server/wm/WindowState;->onUnfreezeBounds()V
+PLcom/android/server/wm/WindowState;->onWindowReplacementTimeout()V
+HSPLcom/android/server/wm/WindowState;->openInputChannel(Landroid/view/InputChannel;)V
 PLcom/android/server/wm/WindowState;->orientationChangeTimedOut()V
-HPLcom/android/server/wm/WindowState;->performShowLocked()Z
-PLcom/android/server/wm/WindowState;->prelayout()V
-HPLcom/android/server/wm/WindowState;->prepareSurfaces()V
-HPLcom/android/server/wm/WindowState;->prepareWindowToDisplayDuringRelayout(Z)V
-HPLcom/android/server/wm/WindowState;->registeredForDisplayConfigChanges()Z
-HPLcom/android/server/wm/WindowState;->relayoutVisibleWindow(II)I
-PLcom/android/server/wm/WindowState;->removeIfPossible()V
-PLcom/android/server/wm/WindowState;->removeIfPossible(Z)V
-PLcom/android/server/wm/WindowState;->removeImmediately()V
-HPLcom/android/server/wm/WindowState;->removeReplacedWindowIfNeeded(Lcom/android/server/wm/WindowState;)Z
-PLcom/android/server/wm/WindowState;->reportFocusChangedSerialized(ZZ)V
-PLcom/android/server/wm/WindowState;->reportResized()V
-PLcom/android/server/wm/WindowState;->requestUpdateWallpaperIfNeeded()V
+HSPLcom/android/server/wm/WindowState;->performShowLocked()Z
+HPLcom/android/server/wm/WindowState;->pokeDrawLockLw(J)V
+HSPLcom/android/server/wm/WindowState;->prelayout()V
+HSPLcom/android/server/wm/WindowState;->prepareSurfaces()V
+HSPLcom/android/server/wm/WindowState;->prepareWindowToDisplayDuringRelayout(Z)V
+HSPLcom/android/server/wm/WindowState;->registeredForDisplayConfigChanges()Z
+HSPLcom/android/server/wm/WindowState;->relayoutVisibleWindow(II)I
+PLcom/android/server/wm/WindowState;->removeEmbeddedDisplayContent(Lcom/android/server/wm/DisplayContent;)Z
+HPLcom/android/server/wm/WindowState;->removeIfPossible()V
+HPLcom/android/server/wm/WindowState;->removeIfPossible(Z)V
+HPLcom/android/server/wm/WindowState;->removeImmediately()V
+HSPLcom/android/server/wm/WindowState;->removeReplacedWindowIfNeeded(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/WindowState;->reportFocusChangedSerialized(Z)V
+HSPLcom/android/server/wm/WindowState;->reportFocusChangedSerialized(ZZ)V
+HPLcom/android/server/wm/WindowState;->reportResized()V
+HPLcom/android/server/wm/WindowState;->requestDrawIfNeeded(Ljava/util/List;)V
+HPLcom/android/server/wm/WindowState;->requestUpdateWallpaperIfNeeded()V
 PLcom/android/server/wm/WindowState;->resetAppOpsState()V
-PLcom/android/server/wm/WindowState;->resetContentChanged()V
+HSPLcom/android/server/wm/WindowState;->resetContentChanged()V
+PLcom/android/server/wm/WindowState;->resetDragResizingChangeReported()V
 PLcom/android/server/wm/WindowState;->resetLastContentInsets()V
-PLcom/android/server/wm/WindowState;->seamlesslyRotateIfAllowed(Landroid/view/SurfaceControl$Transaction;IIZ)V
-PLcom/android/server/wm/WindowState;->sendAppVisibilityToClients()V
-HPLcom/android/server/wm/WindowState;->setDisplayLayoutNeeded()V
-PLcom/android/server/wm/WindowState;->setDrawnStateEvaluated(Z)V
-HPLcom/android/server/wm/WindowState;->setForceHideNonSystemOverlayWindowIfNeeded(Z)V
-PLcom/android/server/wm/WindowState;->setFrameNumber(J)V
-PLcom/android/server/wm/WindowState;->setHasSurface(Z)V
-PLcom/android/server/wm/WindowState;->setHiddenWhileSuspended(Z)V
+HPLcom/android/server/wm/WindowState;->seamlesslyRotateIfAllowed(Landroid/view/SurfaceControl$Transaction;IIZ)V
+HPLcom/android/server/wm/WindowState;->sendAppVisibilityToClients()V
+PLcom/android/server/wm/WindowState;->setAppOpVisibilityLw(Z)V
+HSPLcom/android/server/wm/WindowState;->setDisplayLayoutNeeded()V
+HPLcom/android/server/wm/WindowState;->setDragResizing()V
+HSPLcom/android/server/wm/WindowState;->setDrawnStateEvaluated(Z)V
+HSPLcom/android/server/wm/WindowState;->setForceHideNonSystemOverlayWindowIfNeeded(Z)V
+HSPLcom/android/server/wm/WindowState;->setFrameNumber(J)V
+HSPLcom/android/server/wm/WindowState;->setHasSurface(Z)V
+HSPLcom/android/server/wm/WindowState;->setHiddenWhileSuspended(Z)V
 HPLcom/android/server/wm/WindowState;->setLastExclusionHeights(III)V
-HPLcom/android/server/wm/WindowState;->setLastReportedMergedConfiguration(Landroid/util/MergedConfiguration;)V
-PLcom/android/server/wm/WindowState;->setOrientationChanging(Z)V
+HSPLcom/android/server/wm/WindowState;->setLastReportedMergedConfiguration(Landroid/util/MergedConfiguration;)V
+HSPLcom/android/server/wm/WindowState;->setOrientationChanging(Z)V
 PLcom/android/server/wm/WindowState;->setPolicyVisibilityFlag(I)V
-PLcom/android/server/wm/WindowState;->setReplacementWindowIfNeeded(Lcom/android/server/wm/WindowState;)Z
-PLcom/android/server/wm/WindowState;->setReportResizeHints()Z
-PLcom/android/server/wm/WindowState;->setRequestedSize(II)V
+HSPLcom/android/server/wm/WindowState;->setReplacementWindowIfNeeded(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/WindowState;->setReportResizeHints()Z
+HSPLcom/android/server/wm/WindowState;->setRequestedSize(II)V
 PLcom/android/server/wm/WindowState;->setShowToOwnerOnlyLocked(Z)V
-PLcom/android/server/wm/WindowState;->setSystemGestureExclusion(Ljava/util/List;)Z
-HPLcom/android/server/wm/WindowState;->setTouchableRegionCropIfNeeded(Landroid/view/InputWindowHandle;)V
-HPLcom/android/server/wm/WindowState;->setWindowScale(II)V
-PLcom/android/server/wm/WindowState;->setupWindowForRemoveOnExit()V
+HPLcom/android/server/wm/WindowState;->setSystemGestureExclusion(Ljava/util/List;)Z
+HSPLcom/android/server/wm/WindowState;->setTouchableRegionCropIfNeeded(Landroid/view/InputWindowHandle;)V
+PLcom/android/server/wm/WindowState;->setWaitingForDrawnIfResizingChanged()V
+PLcom/android/server/wm/WindowState;->setWillReplaceChildWindows()V
+PLcom/android/server/wm/WindowState;->setWillReplaceWindow(Z)V
+HSPLcom/android/server/wm/WindowState;->setWindowScale(II)V
+HPLcom/android/server/wm/WindowState;->setupWindowForRemoveOnExit()V
+PLcom/android/server/wm/WindowState;->shouldBeReplacedWithChildren()Z
 PLcom/android/server/wm/WindowState;->shouldKeepVisibleDeadAppWindow()Z
-PLcom/android/server/wm/WindowState;->showLw(Z)Z
+HPLcom/android/server/wm/WindowState;->shouldMagnify()Z
+HSPLcom/android/server/wm/WindowState;->showForAllUsers()Z
+HPLcom/android/server/wm/WindowState;->showLw(Z)Z
 HPLcom/android/server/wm/WindowState;->showLw(ZZ)Z
-HPLcom/android/server/wm/WindowState;->skipDecorCrop()Z
+HSPLcom/android/server/wm/WindowState;->showToCurrentUser()Z
+HSPLcom/android/server/wm/WindowState;->skipDecorCrop()Z
 PLcom/android/server/wm/WindowState;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;)V
-PLcom/android/server/wm/WindowState;->startAnimation(Landroid/view/animation/Animation;)V
-PLcom/android/server/wm/WindowState;->startMoveAnimation(II)V
-PLcom/android/server/wm/WindowState;->subtractInsets(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/WindowState;->subtractTouchExcludeRegionIfNeeded(Landroid/graphics/Region;)V
-PLcom/android/server/wm/WindowState;->surfaceInsetsChanging()Z
-HPLcom/android/server/wm/WindowState;->toString()Ljava/lang/String;
-HPLcom/android/server/wm/WindowState;->transformClipRectFromScreenToSurfaceSpace(Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowState;->transformFrameToSurfacePosition(IILandroid/graphics/Point;)V
-HPLcom/android/server/wm/WindowState;->transformSurfaceInsetsPosition(Landroid/graphics/Point;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowState;->updateLastFrames()V
-HPLcom/android/server/wm/WindowState;->updateLastInsetValues()V
-PLcom/android/server/wm/WindowState;->updateLocationInParentDisplayIfNeeded()V
-HPLcom/android/server/wm/WindowState;->updateReportedVisibility(Lcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;)V
-HPLcom/android/server/wm/WindowState;->updateResizingWindowIfNeeded()V
-HPLcom/android/server/wm/WindowState;->updateSurfacePosition()V
-HPLcom/android/server/wm/WindowState;->updateSurfacePosition(Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/WindowState;->waitingForReplacement()Z
-HPLcom/android/server/wm/WindowState;->wouldBeVisibleIfPolicyIgnored()Z
-PLcom/android/server/wm/WindowState;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/WindowStateAnimator;-><init>(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/WindowStateAnimator;->applyAnimationLocked(IZ)Z
-HPLcom/android/server/wm/WindowStateAnimator;->applyCrop(Landroid/graphics/Rect;Z)V
-PLcom/android/server/wm/WindowStateAnimator;->applyEnterAnimationLocked()V
-HPLcom/android/server/wm/WindowStateAnimator;->calculateCrop(Landroid/graphics/Rect;)Z
-HPLcom/android/server/wm/WindowStateAnimator;->calculateSurfaceBounds(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/WindowStateAnimator;->commitFinishDrawingLocked()Z
-HPLcom/android/server/wm/WindowStateAnimator;->computeShownFrameLocked()V
-HPLcom/android/server/wm/WindowStateAnimator;->createSurfaceLocked(II)Lcom/android/server/wm/WindowSurfaceController;
-PLcom/android/server/wm/WindowStateAnimator;->destroyDeferredSurfaceLocked()V
-PLcom/android/server/wm/WindowStateAnimator;->destroyPreservedSurfaceLocked()V
-PLcom/android/server/wm/WindowStateAnimator;->destroySurface()V
-PLcom/android/server/wm/WindowStateAnimator;->destroySurfaceLocked()V
-PLcom/android/server/wm/WindowStateAnimator;->detachChildren()V
+HPLcom/android/server/wm/WindowState;->startAnimation(Landroid/view/animation/Animation;)V
+HPLcom/android/server/wm/WindowState;->startMoveAnimation(II)V
+HPLcom/android/server/wm/WindowState;->subtractInsets(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowState;->subtractTouchExcludeRegionIfNeeded(Landroid/graphics/Region;)V
+HPLcom/android/server/wm/WindowState;->surfaceInsetsChanging()Z
+HSPLcom/android/server/wm/WindowState;->toString()Ljava/lang/String;
+HSPLcom/android/server/wm/WindowState;->transformClipRectFromScreenToSurfaceSpace(Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowState;->transformFrameToSurfacePosition(IILandroid/graphics/Point;)V
+HSPLcom/android/server/wm/WindowState;->transformSurfaceInsetsPosition(Landroid/graphics/Point;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowState;->translateToWindowX(F)F
+HPLcom/android/server/wm/WindowState;->translateToWindowY(F)F
+HPLcom/android/server/wm/WindowState;->updateAppOpsState()V
+HSPLcom/android/server/wm/WindowState;->updateFrameRateSelectionPriorityIfNeeded()V
+HSPLcom/android/server/wm/WindowState;->updateLastFrames()V
+HSPLcom/android/server/wm/WindowState;->updateLastInsetValues()V
+HSPLcom/android/server/wm/WindowState;->updateLocationInParentDisplayIfNeeded()V
+HSPLcom/android/server/wm/WindowState;->updateRegionForModalActivityWindow(Landroid/graphics/Region;)V
+HSPLcom/android/server/wm/WindowState;->updateReportedVisibility(Lcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;)V
+HPLcom/android/server/wm/WindowState;->updateRequestedInsetsState(Landroid/view/InsetsState;)V
+HSPLcom/android/server/wm/WindowState;->updateResizingWindowIfNeeded()V
+HSPLcom/android/server/wm/WindowState;->updateSurfacePosition()V
+HSPLcom/android/server/wm/WindowState;->updateSurfacePosition(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/WindowState;->updateTapExcludeRegion(Landroid/graphics/Region;)V
+HPLcom/android/server/wm/WindowState;->waitingForReplacement()Z
+HSPLcom/android/server/wm/WindowState;->wouldBeVisibleIfPolicyIgnored()Z
+HPLcom/android/server/wm/WindowState;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLcom/android/server/wm/WindowStateAnimator;-><init>(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WindowStateAnimator;->applyAnimationLocked(IZ)Z
+HSPLcom/android/server/wm/WindowStateAnimator;->applyCrop(Landroid/graphics/Rect;Z)V
+HSPLcom/android/server/wm/WindowStateAnimator;->applyEnterAnimationLocked()V
+HSPLcom/android/server/wm/WindowStateAnimator;->calculateCrop(Landroid/graphics/Rect;)Z
+HSPLcom/android/server/wm/WindowStateAnimator;->calculateSurfaceBounds(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/WindowStateAnimator;->commitFinishDrawingLocked()Z
+HSPLcom/android/server/wm/WindowStateAnimator;->computeShownFrameLocked()V
+HSPLcom/android/server/wm/WindowStateAnimator;->createSurfaceLocked(II)Lcom/android/server/wm/WindowSurfaceController;
+HPLcom/android/server/wm/WindowStateAnimator;->destroyDeferredSurfaceLocked()V
+HPLcom/android/server/wm/WindowStateAnimator;->destroyPreservedSurfaceLocked()V
+HPLcom/android/server/wm/WindowStateAnimator;->destroySurface()V
+HPLcom/android/server/wm/WindowStateAnimator;->destroySurfaceLocked()V
+HPLcom/android/server/wm/WindowStateAnimator;->detachChildren()V
 PLcom/android/server/wm/WindowStateAnimator;->drawStateToString()Ljava/lang/String;
-PLcom/android/server/wm/WindowStateAnimator;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HPLcom/android/server/wm/WindowStateAnimator;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
 HPLcom/android/server/wm/WindowStateAnimator;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/WindowStateAnimator;->finishDrawingLocked(Landroid/view/SurfaceControl$Transaction;)Z
-PLcom/android/server/wm/WindowStateAnimator;->getShown()Z
-HPLcom/android/server/wm/WindowStateAnimator;->hasSurface()Z
-PLcom/android/server/wm/WindowStateAnimator;->hide(Landroid/view/SurfaceControl$Transaction;Ljava/lang/String;)V
-HPLcom/android/server/wm/WindowStateAnimator;->hide(Ljava/lang/String;)V
-PLcom/android/server/wm/WindowStateAnimator;->isForceScaled()Z
-PLcom/android/server/wm/WindowStateAnimator;->markPreservedSurfaceForDestroy()V
-PLcom/android/server/wm/WindowStateAnimator;->onAnimationFinished()V
-HPLcom/android/server/wm/WindowStateAnimator;->prepareSurfaceLocked(Z)V
-PLcom/android/server/wm/WindowStateAnimator;->preserveSurfaceLocked()V
-PLcom/android/server/wm/WindowStateAnimator;->resetDrawState()V
-PLcom/android/server/wm/WindowStateAnimator;->setColorSpaceAgnosticLocked(Z)V
-PLcom/android/server/wm/WindowStateAnimator;->setOffsetPositionForStackResize(Z)V
-PLcom/android/server/wm/WindowStateAnimator;->setOpaqueLocked(Z)V
-PLcom/android/server/wm/WindowStateAnimator;->setSecureLocked(Z)V
-HPLcom/android/server/wm/WindowStateAnimator;->setSurfaceBoundariesLocked(Z)V
-PLcom/android/server/wm/WindowStateAnimator;->setWallpaperOffset(II)Z
-PLcom/android/server/wm/WindowStateAnimator;->showSurfaceRobustlyLocked()Z
-PLcom/android/server/wm/WindowStateAnimator;->toString()Ljava/lang/String;
+HSPLcom/android/server/wm/WindowStateAnimator;->finishDrawingLocked(Landroid/view/SurfaceControl$Transaction;)Z
+HPLcom/android/server/wm/WindowStateAnimator;->getDeferTransactionBarrier()Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/WindowStateAnimator;->getShown()Z
+HSPLcom/android/server/wm/WindowStateAnimator;->hasSurface()Z
+HSPLcom/android/server/wm/WindowStateAnimator;->hide(Landroid/view/SurfaceControl$Transaction;Ljava/lang/String;)V
+HSPLcom/android/server/wm/WindowStateAnimator;->hide(Ljava/lang/String;)V
+HSPLcom/android/server/wm/WindowStateAnimator;->isForceScaled()Z
+HSPLcom/android/server/wm/WindowStateAnimator;->markPreservedSurfaceForDestroy()V
+HPLcom/android/server/wm/WindowStateAnimator;->onAnimationFinished()V
+HSPLcom/android/server/wm/WindowStateAnimator;->prepareSurfaceLocked(Z)V
+HPLcom/android/server/wm/WindowStateAnimator;->preserveSurfaceLocked()V
+HSPLcom/android/server/wm/WindowStateAnimator;->resetDrawState()V
+HPLcom/android/server/wm/WindowStateAnimator;->setColorSpaceAgnosticLocked(Z)V
+HSPLcom/android/server/wm/WindowStateAnimator;->setOffsetPositionForStackResize(Z)V
+HPLcom/android/server/wm/WindowStateAnimator;->setOpaqueLocked(Z)V
+HSPLcom/android/server/wm/WindowStateAnimator;->setSecureLocked(Z)V
+HSPLcom/android/server/wm/WindowStateAnimator;->setSurfaceBoundariesLocked(Z)V
+PLcom/android/server/wm/WindowStateAnimator;->setTransparentRegionHintLocked(Landroid/graphics/Region;)V
+HSPLcom/android/server/wm/WindowStateAnimator;->setWallpaperOffset(II)Z
+HSPLcom/android/server/wm/WindowStateAnimator;->showSurfaceRobustlyLocked()Z
+HPLcom/android/server/wm/WindowStateAnimator;->toString()Ljava/lang/String;
 PLcom/android/server/wm/WindowStateAnimator;->tryChangeFormatInPlaceLocked()Z
-PLcom/android/server/wm/WindowSurfaceController;-><init>(Ljava/lang/String;IIIILcom/android/server/wm/WindowStateAnimator;II)V
-HPLcom/android/server/wm/WindowSurfaceController;->clearCropInTransaction(Z)V
-PLcom/android/server/wm/WindowSurfaceController;->destroyNotInTransaction()V
-PLcom/android/server/wm/WindowSurfaceController;->detachChildren()V
-PLcom/android/server/wm/WindowSurfaceController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-PLcom/android/server/wm/WindowSurfaceController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/WindowSurfaceController;->getHeight()I
-PLcom/android/server/wm/WindowSurfaceController;->getShown()Z
-PLcom/android/server/wm/WindowSurfaceController;->getSurfaceControl(Landroid/view/SurfaceControl;)V
-PLcom/android/server/wm/WindowSurfaceController;->getWidth()I
-HPLcom/android/server/wm/WindowSurfaceController;->hasSurface()Z
-PLcom/android/server/wm/WindowSurfaceController;->hide(Landroid/view/SurfaceControl$Transaction;Ljava/lang/String;)V
-PLcom/android/server/wm/WindowSurfaceController;->hideSurface(Landroid/view/SurfaceControl$Transaction;)V
-HPLcom/android/server/wm/WindowSurfaceController;->prepareToShowInTransaction(FFFFFZ)Z
+HSPLcom/android/server/wm/WindowSurfaceController;-><init>(Ljava/lang/String;IIIILcom/android/server/wm/WindowStateAnimator;II)V
+HSPLcom/android/server/wm/WindowSurfaceController;->clearCropInTransaction(Z)V
+HPLcom/android/server/wm/WindowSurfaceController;->destroyNotInTransaction()V
+HPLcom/android/server/wm/WindowSurfaceController;->detachChildren()V
+HPLcom/android/server/wm/WindowSurfaceController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HPLcom/android/server/wm/WindowSurfaceController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+PLcom/android/server/wm/WindowSurfaceController;->forceScaleableInTransaction(Z)V
+HSPLcom/android/server/wm/WindowSurfaceController;->getBLASTSurfaceControl(Landroid/view/SurfaceControl;)V
+PLcom/android/server/wm/WindowSurfaceController;->getDeferTransactionBarrier()Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/WindowSurfaceController;->getHeight()I
+HSPLcom/android/server/wm/WindowSurfaceController;->getShown()Z
+HSPLcom/android/server/wm/WindowSurfaceController;->getSurfaceControl(Landroid/view/SurfaceControl;)V
+HSPLcom/android/server/wm/WindowSurfaceController;->getWidth()I
+HSPLcom/android/server/wm/WindowSurfaceController;->hasSurface()Z
+HPLcom/android/server/wm/WindowSurfaceController;->hide(Landroid/view/SurfaceControl$Transaction;Ljava/lang/String;)V
+HPLcom/android/server/wm/WindowSurfaceController;->hideSurface(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/WindowSurfaceController;->prepareToShowInTransaction(FFFFFZ)Z
 HPLcom/android/server/wm/WindowSurfaceController;->setBufferSizeInTransaction(IIZ)Z
-PLcom/android/server/wm/WindowSurfaceController;->setColorSpaceAgnostic(Z)V
-PLcom/android/server/wm/WindowSurfaceController;->setCropInTransaction(Landroid/graphics/Rect;Z)V
-HPLcom/android/server/wm/WindowSurfaceController;->setMatrix(Landroid/view/SurfaceControl$Transaction;FFFFZ)V
-PLcom/android/server/wm/WindowSurfaceController;->setMatrixInTransaction(FFFFZ)V
-PLcom/android/server/wm/WindowSurfaceController;->setOpaque(Z)V
-HPLcom/android/server/wm/WindowSurfaceController;->setPosition(Landroid/view/SurfaceControl$Transaction;FFZ)V
-PLcom/android/server/wm/WindowSurfaceController;->setPositionInTransaction(FFZ)V
-PLcom/android/server/wm/WindowSurfaceController;->setSecure(Z)V
-PLcom/android/server/wm/WindowSurfaceController;->setShown(Z)V
-PLcom/android/server/wm/WindowSurfaceController;->setTransparentRegionHint(Landroid/graphics/Region;)V
-PLcom/android/server/wm/WindowSurfaceController;->showRobustlyInTransaction()Z
-PLcom/android/server/wm/WindowSurfaceController;->showSurface()Z
+HSPLcom/android/server/wm/WindowSurfaceController;->setColorSpaceAgnostic(Z)V
+HSPLcom/android/server/wm/WindowSurfaceController;->setCropInTransaction(Landroid/graphics/Rect;Z)V
+HSPLcom/android/server/wm/WindowSurfaceController;->setMatrix(Landroid/view/SurfaceControl$Transaction;FFFFZ)V
+HSPLcom/android/server/wm/WindowSurfaceController;->setMatrixInTransaction(FFFFZ)V
+HPLcom/android/server/wm/WindowSurfaceController;->setOpaque(Z)V
+HSPLcom/android/server/wm/WindowSurfaceController;->setPosition(Landroid/view/SurfaceControl$Transaction;FFZ)V
+HSPLcom/android/server/wm/WindowSurfaceController;->setPositionInTransaction(FFZ)V
+HSPLcom/android/server/wm/WindowSurfaceController;->setSecure(Z)V
+HSPLcom/android/server/wm/WindowSurfaceController;->setShown(Z)V
+HPLcom/android/server/wm/WindowSurfaceController;->setTransparentRegionHint(Landroid/graphics/Region;)V
+HSPLcom/android/server/wm/WindowSurfaceController;->showRobustlyInTransaction()Z
+HSPLcom/android/server/wm/WindowSurfaceController;->showSurface()Z
 HPLcom/android/server/wm/WindowSurfaceController;->toString()Ljava/lang/String;
-PLcom/android/server/wm/WindowSurfaceController;->updateVisibility()Z
+HSPLcom/android/server/wm/WindowSurfaceController;->updateVisibility()Z
 HSPLcom/android/server/wm/WindowSurfacePlacer$Traverser;-><init>(Lcom/android/server/wm/WindowSurfacePlacer;)V
 HSPLcom/android/server/wm/WindowSurfacePlacer$Traverser;-><init>(Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer$1;)V
 HSPLcom/android/server/wm/WindowSurfacePlacer$Traverser;->run()V
@@ -23999,23 +39347,26 @@
 HSPLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacement(Z)V
 HSPLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacementLoop()V
 HSPLcom/android/server/wm/WindowSurfacePlacer;->requestTraversal()V
-PLcom/android/server/wm/WindowToken;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;IZLcom/android/server/wm/DisplayContent;Z)V
-PLcom/android/server/wm/WindowToken;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;IZLcom/android/server/wm/DisplayContent;ZZ)V
-PLcom/android/server/wm/WindowToken;->addWindow(Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/WindowToken;->asActivityRecord()Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/WindowToken;->canLayerAboveSystemBars()Z
-PLcom/android/server/wm/WindowToken;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/WindowToken;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
-PLcom/android/server/wm/WindowToken;->getName()Ljava/lang/String;
-PLcom/android/server/wm/WindowToken;->getReplacingWindow()Lcom/android/server/wm/WindowState;
-PLcom/android/server/wm/WindowToken;->isEmpty()Z
+HSPLcom/android/server/wm/WindowToken;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;IZLcom/android/server/wm/DisplayContent;Z)V
+HSPLcom/android/server/wm/WindowToken;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;IZLcom/android/server/wm/DisplayContent;ZZ)V
+HSPLcom/android/server/wm/WindowToken;->addWindow(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/WindowToken;->asActivityRecord()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowToken;->assignLayer(Landroid/view/SurfaceControl$Transaction;I)V
+HPLcom/android/server/wm/WindowToken;->canLayerAboveSystemBars()Z
+HPLcom/android/server/wm/WindowToken;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HSPLcom/android/server/wm/WindowToken;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HSPLcom/android/server/wm/WindowToken;->getName()Ljava/lang/String;
+HSPLcom/android/server/wm/WindowToken;->getReplacingWindow()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WindowToken;->getWindowLayerFromType()I
+HPLcom/android/server/wm/WindowToken;->isEmpty()Z
 PLcom/android/server/wm/WindowToken;->isFirstChildWindowGreaterThanSecond(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)Z
-PLcom/android/server/wm/WindowToken;->lambda$new$0$WindowToken(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)I
-HPLcom/android/server/wm/WindowToken;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/WindowToken;->removeAllWindowsIfPossible()V
-PLcom/android/server/wm/WindowToken;->removeImmediately()V
-PLcom/android/server/wm/WindowToken;->setExiting()V
-PLcom/android/server/wm/WindowToken;->toString()Ljava/lang/String;
+HPLcom/android/server/wm/WindowToken;->lambda$new$0$WindowToken(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)I
+HSPLcom/android/server/wm/WindowToken;->makeSurface()Landroid/view/SurfaceControl$Builder;
+HSPLcom/android/server/wm/WindowToken;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/WindowToken;->removeAllWindowsIfPossible()V
+HPLcom/android/server/wm/WindowToken;->removeImmediately()V
+HPLcom/android/server/wm/WindowToken;->setExiting()V
+HPLcom/android/server/wm/WindowToken;->toString()Ljava/lang/String;
 HPLcom/android/server/wm/WindowToken;->windowsCanBeWallpaperTarget()Z
 HSPLcom/android/server/wm/WindowTracing;-><init>(Ljava/io/File;Lcom/android/server/wm/WindowManagerService;Landroid/view/Choreographer;I)V
 HSPLcom/android/server/wm/WindowTracing;-><init>(Ljava/io/File;Lcom/android/server/wm/WindowManagerService;Landroid/view/Choreographer;Lcom/android/server/wm/WindowManagerGlobalLock;I)V
@@ -24029,10 +39380,12 @@
 PLcom/android/server/wm/animation/ClipRectLRAnimation;-><init>(IIII)V
 PLcom/android/server/wm/animation/ClipRectLRAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
 PLcom/android/server/wm/animation/ClipRectTBAnimation;-><init>(IIIIIILandroid/view/animation/Interpolator;)V
-PLcom/android/server/wm/animation/ClipRectTBAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
-PLcom/android/server/wm/animation/ClipRectTBAnimation;->getTransformation(JLandroid/view/animation/Transformation;)Z
+HPLcom/android/server/wm/animation/ClipRectTBAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
+HPLcom/android/server/wm/animation/ClipRectTBAnimation;->getTransformation(JLandroid/view/animation/Transformation;)Z
+PLcom/android/server/wm/animation/CurvedTranslateAnimation;-><init>(Landroid/graphics/Path;)V
+PLcom/android/server/wm/animation/CurvedTranslateAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
 PLcom/android/server/wm/utils/CoordinateTransforms;->transformLogicalToPhysicalCoordinates(IIILandroid/graphics/Matrix;)V
-PLcom/android/server/wm/utils/CoordinateTransforms;->transformPhysicalToLogicalCoordinates(IIILandroid/graphics/Matrix;)V
+HSPLcom/android/server/wm/utils/CoordinateTransforms;->transformPhysicalToLogicalCoordinates(IIILandroid/graphics/Matrix;)V
 HSPLcom/android/server/wm/utils/DeviceConfigInterface$1;-><init>()V
 HSPLcom/android/server/wm/utils/DeviceConfigInterface$1;->addOnPropertiesChangedListener(Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/provider/DeviceConfig$OnPropertiesChangedListener;)V
 HSPLcom/android/server/wm/utils/DeviceConfigInterface$1;->getBoolean(Ljava/lang/String;Ljava/lang/String;Z)Z
@@ -24041,61 +39394,83 @@
 HSPLcom/android/server/wm/utils/DeviceConfigInterface$1;->getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/wm/utils/DeviceConfigInterface;-><clinit>()V
 HSPLcom/android/server/wm/utils/DisplayRotationUtil;-><init>()V
+HSPLcom/android/server/wm/utils/DisplayRotationUtil;->getBoundIndexFromRotation(II)I
+HSPLcom/android/server/wm/utils/DisplayRotationUtil;->getRotatedBounds([Landroid/graphics/Rect;III)[Landroid/graphics/Rect;
+HSPLcom/android/server/wm/utils/DisplayRotationUtil;->getRotationToBoundsOffset(I)I
 PLcom/android/server/wm/utils/InsetUtils;->addInsets(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/utils/InsetUtils;->insetsBetweenFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/utils/InsetUtils;->insetsBetweenFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/utils/InsetUtils;->rotateInsets(Landroid/graphics/Rect;I)V
+HPLcom/android/server/wm/utils/RegionUtils;->forEachRect(Landroid/graphics/Region;Ljava/util/function/Consumer;)V
 HPLcom/android/server/wm/utils/RegionUtils;->forEachRectReverse(Landroid/graphics/Region;Ljava/util/function/Consumer;)V
 HPLcom/android/server/wm/utils/RegionUtils;->rectListToRegion(Ljava/util/List;Landroid/graphics/Region;)V
+PLcom/android/server/wm/utils/RotationAnimationUtils;->createRotationMatrix(IIILandroid/graphics/Matrix;)V
+HPLcom/android/server/wm/utils/RotationAnimationUtils;->getAvgBorderLuma(Landroid/graphics/GraphicBuffer;Landroid/graphics/ColorSpace;)F
+PLcom/android/server/wm/utils/RotationAnimationUtils;->getLumaOfSurfaceControl(Landroid/view/Display;Landroid/view/SurfaceControl;)F
 HSPLcom/android/server/wm/utils/RotationCache;-><init>(Lcom/android/server/wm/utils/RotationCache$RotationDependentComputation;)V
 HSPLcom/android/server/wm/utils/RotationCache;->getOrCompute(Ljava/lang/Object;I)Ljava/lang/Object;
 HSPLcom/android/server/wm/utils/WmDisplayCutout;-><clinit>()V
 HSPLcom/android/server/wm/utils/WmDisplayCutout;-><init>(Landroid/view/DisplayCutout;Landroid/util/Size;)V
-HPLcom/android/server/wm/utils/WmDisplayCutout;->calculateRelativeTo(Landroid/graphics/Rect;)Lcom/android/server/wm/utils/WmDisplayCutout;
-HPLcom/android/server/wm/utils/WmDisplayCutout;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/utils/WmDisplayCutout;->calculateRelativeTo(Landroid/graphics/Rect;)Lcom/android/server/wm/utils/WmDisplayCutout;
+HSPLcom/android/server/wm/utils/WmDisplayCutout;->computeSafeInsets(Landroid/util/Size;Landroid/view/DisplayCutout;)Landroid/graphics/Rect;
+HSPLcom/android/server/wm/utils/WmDisplayCutout;->computeSafeInsets(Landroid/view/DisplayCutout;II)Lcom/android/server/wm/utils/WmDisplayCutout;
+HSPLcom/android/server/wm/utils/WmDisplayCutout;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/utils/WmDisplayCutout;->findInsetForSide(Landroid/util/Size;Ljava/util/List;I)I
 HSPLcom/android/server/wm/utils/WmDisplayCutout;->getDisplayCutout()Landroid/view/DisplayCutout;
+HPLcom/android/server/wm/utils/WmDisplayCutout;->inset(IIII)Lcom/android/server/wm/utils/WmDisplayCutout;
 HSPLcom/android/server/wm/utils/WmDisplayCutout;->toString()Ljava/lang/String;
-PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$6ikxM-3KospNGDidAY7yA-rECHw;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;Landroid/content/Intent;J)V
-PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$6ikxM-3KospNGDidAY7yA-rECHw;->run(Lcom/google/android/startop/iorap/IIorap;)V
-PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$B9wq4q5y7qahY6TuLMO_s8nPIwY;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;[BI)V
-PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$B9wq4q5y7qahY6TuLMO_s8nPIwY;->run(Lcom/google/android/startop/iorap/IIorap;)V
+HSPLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$6ikxM-3KospNGDidAY7yA-rECHw;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;Landroid/content/Intent;J)V
+HSPLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$6ikxM-3KospNGDidAY7yA-rECHw;->run(Lcom/google/android/startop/iorap/IIorap;)V
+HSPLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$B9wq4q5y7qahY6TuLMO_s8nPIwY;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;[BI)V
+HSPLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$B9wq4q5y7qahY6TuLMO_s8nPIwY;->run(Lcom/google/android/startop/iorap/IIorap;)V
 HPLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$J1AHa-Qs75WQr3stjbN97THbudE;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;[BJ)V
 PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$J1AHa-Qs75WQr3stjbN97THbudE;->run(Lcom/google/android/startop/iorap/IIorap;)V
 PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$bprgjb2FWBxwWDJr-Q4ViVP0aJc;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;[BJ)V
 PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$bprgjb2FWBxwWDJr-Q4ViVP0aJc;->run(Lcom/google/android/startop/iorap/IIorap;)V
 PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$elqG7IabJdUOCjFWiPV8vgrXnVI;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;[B)V
 PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$elqG7IabJdUOCjFWiPV8vgrXnVI;->run(Lcom/google/android/startop/iorap/IIorap;)V
-PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$qed0q0aplGsIh0O7dSm6JWk8wZI;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;)V
-PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$qed0q0aplGsIh0O7dSm6JWk8wZI;->run(Lcom/google/android/startop/iorap/IIorap;)V
+HPLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$qed0q0aplGsIh0O7dSm6JWk8wZI;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;)V
+HPLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$qed0q0aplGsIh0O7dSm6JWk8wZI;->run(Lcom/google/android/startop/iorap/IIorap;)V
 PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$IorapdJobService$LUEcmjVFTNORsDoHk5dk5OHflTU;-><init>(Lcom/google/android/startop/iorap/RequestId;Landroid/app/job/JobParameters;)V
 PLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$IorapdJobService$LUEcmjVFTNORsDoHk5dk5OHflTU;->run(Lcom/google/android/startop/iorap/IIorap;)V
 HSPLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$miQO-RJhHA7C1W4BujwCS9blXFc;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService;)V
 HSPLcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$miQO-RJhHA7C1W4BujwCS9blXFc;->run(Lcom/google/android/startop/iorap/IIorap;)V
-PLcom/google/android/startop/iorap/AppLaunchEvent$1;-><init>()V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent$1;-><init>()V
 PLcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunchCancelled;-><init>(J[B)V
 PLcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunchCancelled;->writeToParcelImpl(Landroid/os/Parcel;I)V
-PLcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunchFinished;-><init>(J[BJ)V
-PLcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunchFinished;->writeToParcelImpl(Landroid/os/Parcel;I)V
-PLcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunched;-><init>(J[BI)V
-PLcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunched;->writeToParcelImpl(Landroid/os/Parcel;I)V
-PLcom/google/android/startop/iorap/AppLaunchEvent$ActivityRecordProtoParcelable;->write(Landroid/os/Parcel;[BI)V
-PLcom/google/android/startop/iorap/AppLaunchEvent$BaseWithActivityRecordData;-><init>(J[B)V
-PLcom/google/android/startop/iorap/AppLaunchEvent$BaseWithActivityRecordData;->writeToParcelImpl(Landroid/os/Parcel;I)V
+HPLcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunchFinished;-><init>(J[BJ)V
+HPLcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunchFinished;->writeToParcelImpl(Landroid/os/Parcel;I)V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunched;-><init>(J[BI)V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunched;->writeToParcelImpl(Landroid/os/Parcel;I)V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent$ActivityRecordProtoParcelable;->write(Landroid/os/Parcel;[BI)V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent$BaseWithActivityRecordData;-><init>(J[B)V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent$BaseWithActivityRecordData;->writeToParcelImpl(Landroid/os/Parcel;I)V
 PLcom/google/android/startop/iorap/AppLaunchEvent$IntentFailed;-><init>(J)V
-PLcom/google/android/startop/iorap/AppLaunchEvent$IntentProtoParcelable;->write(Landroid/os/Parcel;Landroid/content/Intent;I)V
-PLcom/google/android/startop/iorap/AppLaunchEvent$IntentStarted;-><init>(JLandroid/content/Intent;J)V
-PLcom/google/android/startop/iorap/AppLaunchEvent$IntentStarted;->writeToParcelImpl(Landroid/os/Parcel;I)V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent$IntentProtoParcelable;->write(Landroid/os/Parcel;Landroid/content/Intent;I)V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent$IntentStarted;-><init>(JLandroid/content/Intent;J)V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent$IntentStarted;->writeToParcelImpl(Landroid/os/Parcel;I)V
 PLcom/google/android/startop/iorap/AppLaunchEvent$ReportFullyDrawn;-><init>(J[BJ)V
 PLcom/google/android/startop/iorap/AppLaunchEvent$ReportFullyDrawn;->writeToParcelImpl(Landroid/os/Parcel;I)V
-PLcom/google/android/startop/iorap/AppLaunchEvent;-><clinit>()V
-PLcom/google/android/startop/iorap/AppLaunchEvent;-><init>(J)V
-PLcom/google/android/startop/iorap/AppLaunchEvent;->getTypeIndex()I
-PLcom/google/android/startop/iorap/AppLaunchEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLcom/google/android/startop/iorap/AppLaunchEvent;->writeToParcelImpl(Landroid/os/Parcel;I)V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent;-><clinit>()V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent;-><init>(J)V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent;->getTypeIndex()I
+HSPLcom/google/android/startop/iorap/AppLaunchEvent;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLcom/google/android/startop/iorap/AppLaunchEvent;->writeToParcelImpl(Landroid/os/Parcel;I)V
 PLcom/google/android/startop/iorap/CheckHelpers;->checkStateInRange(II)V
 PLcom/google/android/startop/iorap/CheckHelpers;->checkTypeInRange(II)V
+HSPLcom/google/android/startop/iorap/EventSequenceValidator$State;-><clinit>()V
+HSPLcom/google/android/startop/iorap/EventSequenceValidator$State;-><init>(Ljava/lang/String;I)V
+HSPLcom/google/android/startop/iorap/EventSequenceValidator;-><init>()V
+HPLcom/google/android/startop/iorap/EventSequenceValidator;->decAccIntentStartedEvents()V
+HPLcom/google/android/startop/iorap/EventSequenceValidator;->incAccIntentStartedEvents()V
+PLcom/google/android/startop/iorap/EventSequenceValidator;->onActivityLaunchCancelled([B)V
+HPLcom/google/android/startop/iorap/EventSequenceValidator;->onActivityLaunchFinished([BJ)V
+HSPLcom/google/android/startop/iorap/EventSequenceValidator;->onActivityLaunched([BI)V
+HPLcom/google/android/startop/iorap/EventSequenceValidator;->onIntentFailed()V
+HSPLcom/google/android/startop/iorap/EventSequenceValidator;->onIntentStarted(Landroid/content/Intent;J)V
+PLcom/google/android/startop/iorap/EventSequenceValidator;->onReportFullyDrawn([BJ)V
 HSPLcom/google/android/startop/iorap/IIorap$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/google/android/startop/iorap/IIorap$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-PLcom/google/android/startop/iorap/IIorap$Stub$Proxy;->onAppLaunchEvent(Lcom/google/android/startop/iorap/RequestId;Lcom/google/android/startop/iorap/AppLaunchEvent;)V
+HSPLcom/google/android/startop/iorap/IIorap$Stub$Proxy;->onAppLaunchEvent(Lcom/google/android/startop/iorap/RequestId;Lcom/google/android/startop/iorap/AppLaunchEvent;)V
 PLcom/google/android/startop/iorap/IIorap$Stub$Proxy;->onJobScheduledEvent(Lcom/google/android/startop/iorap/RequestId;Lcom/google/android/startop/iorap/JobScheduledEvent;)V
 HSPLcom/google/android/startop/iorap/IIorap$Stub$Proxy;->setTaskListener(Lcom/google/android/startop/iorap/ITaskListener;)V
 HSPLcom/google/android/startop/iorap/IIorap$Stub;->asInterface(Landroid/os/IBinder;)Lcom/google/android/startop/iorap/IIorap;
@@ -24107,16 +39482,16 @@
 HSPLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService;)V
 HSPLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService;Lcom/google/android/startop/iorap/IorapForwardingService$1;)V
 PLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->lambda$onActivityLaunchCancelled$3$IorapForwardingService$AppLaunchObserver([BLcom/google/android/startop/iorap/IIorap;)V
-PLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->lambda$onActivityLaunchFinished$4$IorapForwardingService$AppLaunchObserver([BJLcom/google/android/startop/iorap/IIorap;)V
-PLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->lambda$onActivityLaunched$2$IorapForwardingService$AppLaunchObserver([BILcom/google/android/startop/iorap/IIorap;)V
-PLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->lambda$onIntentFailed$1$IorapForwardingService$AppLaunchObserver(Lcom/google/android/startop/iorap/IIorap;)V
-PLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->lambda$onIntentStarted$0$IorapForwardingService$AppLaunchObserver(Landroid/content/Intent;JLcom/google/android/startop/iorap/IIorap;)V
+HPLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->lambda$onActivityLaunchFinished$4$IorapForwardingService$AppLaunchObserver([BJLcom/google/android/startop/iorap/IIorap;)V
+HSPLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->lambda$onActivityLaunched$2$IorapForwardingService$AppLaunchObserver([BILcom/google/android/startop/iorap/IIorap;)V
+HPLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->lambda$onIntentFailed$1$IorapForwardingService$AppLaunchObserver(Lcom/google/android/startop/iorap/IIorap;)V
+HSPLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->lambda$onIntentStarted$0$IorapForwardingService$AppLaunchObserver(Landroid/content/Intent;JLcom/google/android/startop/iorap/IIorap;)V
 PLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->lambda$onReportFullyDrawn$5$IorapForwardingService$AppLaunchObserver([BJLcom/google/android/startop/iorap/IIorap;)V
 PLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->onActivityLaunchCancelled([B)V
-PLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->onActivityLaunchFinished([BJ)V
-PLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->onActivityLaunched([BI)V
-PLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->onIntentFailed()V
-PLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->onIntentStarted(Landroid/content/Intent;J)V
+HPLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->onActivityLaunchFinished([BJ)V
+HSPLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->onActivityLaunched([BI)V
+HPLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->onIntentFailed()V
+HSPLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->onIntentStarted(Landroid/content/Intent;J)V
 PLcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;->onReportFullyDrawn([BJ)V
 HSPLcom/google/android/startop/iorap/IorapForwardingService$BinderConnectionHandler;-><init>(Lcom/google/android/startop/iorap/IorapForwardingService;Landroid/os/Looper;)V
 PLcom/google/android/startop/iorap/IorapForwardingService$BinderConnectionHandler;->handleMessage(Landroid/os/Message;)V
@@ -24137,8 +39512,8 @@
 HSPLcom/google/android/startop/iorap/IorapForwardingService;-><init>(Landroid/content/Context;)V
 PLcom/google/android/startop/iorap/IorapForwardingService;->access$000(Lcom/google/android/startop/iorap/IorapForwardingService;I)Z
 PLcom/google/android/startop/iorap/IorapForwardingService;->access$100(Lcom/google/android/startop/iorap/IorapForwardingService;)Lcom/google/android/startop/iorap/IorapForwardingService$IorapdJobService;
-PLcom/google/android/startop/iorap/IorapForwardingService;->access$300(Lcom/google/android/startop/iorap/IorapForwardingService;)Lcom/google/android/startop/iorap/IIorap;
-PLcom/google/android/startop/iorap/IorapForwardingService;->access$400(Lcom/google/android/startop/iorap/IIorap;Lcom/google/android/startop/iorap/IorapForwardingService$RemoteRunnable;)Z
+HSPLcom/google/android/startop/iorap/IorapForwardingService;->access$300(Lcom/google/android/startop/iorap/IorapForwardingService;)Lcom/google/android/startop/iorap/IIorap;
+HSPLcom/google/android/startop/iorap/IorapForwardingService;->access$400(Lcom/google/android/startop/iorap/IIorap;Lcom/google/android/startop/iorap/IorapForwardingService$RemoteRunnable;)Z
 PLcom/google/android/startop/iorap/IorapForwardingService;->access$500()Lcom/google/android/startop/iorap/IorapForwardingService;
 HSPLcom/google/android/startop/iorap/IorapForwardingService;->connectToRemoteAndConfigure()Z
 HSPLcom/google/android/startop/iorap/IorapForwardingService;->connectToRemoteAndConfigureLocked()Z
@@ -24160,19 +39535,19 @@
 PLcom/google/android/startop/iorap/JobScheduledEvent;->checkConstructorArguments()V
 PLcom/google/android/startop/iorap/JobScheduledEvent;->createIdleMaintenance(ILandroid/app/job/JobParameters;)Lcom/google/android/startop/iorap/JobScheduledEvent;
 PLcom/google/android/startop/iorap/JobScheduledEvent;->writeToParcel(Landroid/os/Parcel;I)V
-PLcom/google/android/startop/iorap/RequestId$1;-><init>()V
+HSPLcom/google/android/startop/iorap/RequestId$1;-><init>()V
 PLcom/google/android/startop/iorap/RequestId$1;->createFromParcel(Landroid/os/Parcel;)Lcom/google/android/startop/iorap/RequestId;
 PLcom/google/android/startop/iorap/RequestId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-PLcom/google/android/startop/iorap/RequestId;-><clinit>()V
-PLcom/google/android/startop/iorap/RequestId;-><init>(J)V
+HSPLcom/google/android/startop/iorap/RequestId;-><clinit>()V
+HSPLcom/google/android/startop/iorap/RequestId;-><init>(J)V
 PLcom/google/android/startop/iorap/RequestId;-><init>(Landroid/os/Parcel;)V
 PLcom/google/android/startop/iorap/RequestId;-><init>(Landroid/os/Parcel;Lcom/google/android/startop/iorap/RequestId$1;)V
-PLcom/google/android/startop/iorap/RequestId;->checkConstructorArguments()V
+HSPLcom/google/android/startop/iorap/RequestId;->checkConstructorArguments()V
 PLcom/google/android/startop/iorap/RequestId;->equals(Lcom/google/android/startop/iorap/RequestId;)Z
 PLcom/google/android/startop/iorap/RequestId;->equals(Ljava/lang/Object;)Z
 PLcom/google/android/startop/iorap/RequestId;->hashCode()I
-PLcom/google/android/startop/iorap/RequestId;->nextValueForSequence()Lcom/google/android/startop/iorap/RequestId;
-PLcom/google/android/startop/iorap/RequestId;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLcom/google/android/startop/iorap/RequestId;->nextValueForSequence()Lcom/google/android/startop/iorap/RequestId;
+HSPLcom/google/android/startop/iorap/RequestId;->writeToParcel(Landroid/os/Parcel;I)V
 PLcom/google/android/startop/iorap/TaskResult$1;-><init>()V
 PLcom/google/android/startop/iorap/TaskResult$1;->createFromParcel(Landroid/os/Parcel;)Lcom/google/android/startop/iorap/TaskResult;
 PLcom/google/android/startop/iorap/TaskResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -24180,17 +39555,23 @@
 PLcom/google/android/startop/iorap/TaskResult;-><init>(Landroid/os/Parcel;)V
 PLcom/google/android/startop/iorap/TaskResult;-><init>(Landroid/os/Parcel;Lcom/google/android/startop/iorap/TaskResult$1;)V
 PLcom/google/android/startop/iorap/TaskResult;->checkConstructorArguments()V
+Landroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;
 Landroid/app/usage/UsageStatsManagerInternal;
 Landroid/content/pm/PackageManagerInternal$ExternalSourcesPolicy;
 Landroid/content/pm/PackageManagerInternal$PackageListObserver;
 Landroid/content/pm/PackageManagerInternal;
+Landroid/hardware/audio/common/V2_0/AudioConfig;
+Landroid/hardware/audio/common/V2_0/AudioOffloadInfo;
+Landroid/hardware/audio/common/V2_0/Uuid;
 Landroid/hardware/authsecret/V1_0/IAuthSecret$Proxy;
 Landroid/hardware/authsecret/V1_0/IAuthSecret;
 Landroid/hardware/biometrics/face/V1_0/IBiometricsFace$Proxy;
 Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
 Landroid/hardware/biometrics/face/V1_0/IBiometricsFaceClientCallback$Stub;
 Landroid/hardware/biometrics/face/V1_0/IBiometricsFaceClientCallback;
+Landroid/hardware/biometrics/face/V1_0/OptionalBool;
 Landroid/hardware/biometrics/face/V1_0/OptionalUint64;
+Landroid/hardware/biometrics/face/V1_0/Status;
 Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;
 Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;
 Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback$Stub;
@@ -24198,37 +39579,108 @@
 Landroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs$Proxy;
 Landroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;
 Landroid/hardware/configstore/V1_0/OptionalBool;
+Landroid/hardware/configstore/V1_0/OptionalInt64;
+Landroid/hardware/configstore/V1_0/OptionalUInt64;
+Landroid/hardware/health/V1_0/BatteryHealth;
+Landroid/hardware/health/V1_0/BatteryStatus;
 Landroid/hardware/health/V1_0/HealthInfo;
 Landroid/hardware/health/V2_0/DiskStats;
 Landroid/hardware/health/V2_0/HealthInfo;
 Landroid/hardware/health/V2_0/IHealth$Proxy;
 Landroid/hardware/health/V2_0/IHealth$getCapacityCallback;
 Landroid/hardware/health/V2_0/IHealth$getChargeCounterCallback;
+Landroid/hardware/health/V2_0/IHealth$getChargeStatusCallback;
 Landroid/hardware/health/V2_0/IHealth$getCurrentAverageCallback;
+Landroid/hardware/health/V2_0/IHealth$getCurrentNowCallback;
+Landroid/hardware/health/V2_0/IHealth$getDiskStatsCallback;
 Landroid/hardware/health/V2_0/IHealth$getEnergyCounterCallback;
+Landroid/hardware/health/V2_0/IHealth$getHealthInfoCallback;
+Landroid/hardware/health/V2_0/IHealth$getStorageInfoCallback;
 Landroid/hardware/health/V2_0/IHealth;
 Landroid/hardware/health/V2_0/IHealthInfoCallback$Stub;
 Landroid/hardware/health/V2_0/IHealthInfoCallback;
+Landroid/hardware/health/V2_0/Result;
 Landroid/hardware/health/V2_0/StorageAttribute;
 Landroid/hardware/health/V2_0/StorageInfo;
+Landroid/hardware/light/HwLight$1;
+Landroid/hardware/light/HwLight;
+Landroid/hardware/light/HwLightState;
+Landroid/hardware/light/ILights$Stub$Proxy;
+Landroid/hardware/light/ILights$Stub;
+Landroid/hardware/light/ILights;
 Landroid/hardware/oemlock/V1_0/IOemLock$Proxy;
+Landroid/hardware/oemlock/V1_0/IOemLock$getNameCallback;
 Landroid/hardware/oemlock/V1_0/IOemLock$isOemUnlockAllowedByCarrierCallback;
+Landroid/hardware/oemlock/V1_0/IOemLock$isOemUnlockAllowedByDeviceCallback;
 Landroid/hardware/oemlock/V1_0/IOemLock;
+Landroid/hardware/rebootescrow/IRebootEscrow$Stub$Proxy;
+Landroid/hardware/rebootescrow/IRebootEscrow$Stub;
+Landroid/hardware/rebootescrow/IRebootEscrow;
+Landroid/hardware/soundtrigger/V2_0/ConfidenceLevel;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Phrase;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$PhraseSoundModel;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Proxy;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$RecognitionConfig;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$SoundModel;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$getPropertiesCallback;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$loadPhraseSoundModelCallback;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$loadSoundModelCallback;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHwCallback$PhraseRecognitionEvent;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHwCallback$RecognitionEvent;
+Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHwCallback;
+Landroid/hardware/soundtrigger/V2_0/PhraseRecognitionExtra;
+Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;
+Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$RecognitionConfig;
+Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;
+Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$loadPhraseSoundModel_2_1Callback;
+Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$loadSoundModel_2_1Callback;
+Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw;
+Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;
+Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$RecognitionEvent;
+Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$Stub;
+Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback;
+Landroid/hardware/soundtrigger/V2_2/ISoundTriggerHw$Proxy;
+Landroid/hardware/soundtrigger/V2_2/ISoundTriggerHw;
+Landroid/hardware/soundtrigger/V2_3/AudioCapabilities;
+Landroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$Proxy;
+Landroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$getParameterCallback;
+Landroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$getProperties_2_3Callback;
+Landroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$queryParameterCallback;
+Landroid/hardware/soundtrigger/V2_3/ISoundTriggerHw;
+Landroid/hardware/soundtrigger/V2_3/ModelParameterRange;
+Landroid/hardware/soundtrigger/V2_3/OptionalModelParameterRange;
+Landroid/hardware/soundtrigger/V2_3/Properties;
+Landroid/hardware/soundtrigger/V2_3/RecognitionConfig;
 Landroid/hardware/usb/V1_0/IUsb$Proxy;
 Landroid/hardware/usb/V1_0/IUsb;
 Landroid/hardware/usb/V1_0/IUsbCallback;
+Landroid/hardware/usb/V1_0/PortDataRole;
+Landroid/hardware/usb/V1_0/PortMode;
+Landroid/hardware/usb/V1_0/PortPowerRole;
+Landroid/hardware/usb/V1_0/PortRole;
 Landroid/hardware/usb/V1_0/PortStatus;
+Landroid/hardware/usb/V1_1/IUsb;
 Landroid/hardware/usb/V1_1/IUsbCallback;
+Landroid/hardware/usb/V1_1/PortMode_1_1;
 Landroid/hardware/usb/V1_1/PortStatus_1_1;
+Landroid/hardware/usb/V1_2/ContaminantDetectionStatus;
+Landroid/hardware/usb/V1_2/ContaminantProtectionMode;
+Landroid/hardware/usb/V1_2/ContaminantProtectionStatus;
+Landroid/hardware/usb/V1_2/IUsb;
 Landroid/hardware/usb/V1_2/IUsbCallback$Stub;
 Landroid/hardware/usb/V1_2/IUsbCallback;
 Landroid/hardware/usb/V1_2/PortStatus;
+Landroid/hardware/usb/gadget/V1_1/IUsbGadget;
 Landroid/hardware/weaver/V1_0/IWeaver$Proxy;
 Landroid/hardware/weaver/V1_0/IWeaver$getConfigCallback;
 Landroid/hardware/weaver/V1_0/IWeaver$readCallback;
 Landroid/hardware/weaver/V1_0/IWeaver;
 Landroid/hardware/weaver/V1_0/WeaverConfig;
 Landroid/hardware/weaver/V1_0/WeaverReadResponse;
+Landroid/hidl/base/V1_0/DebugInfo$Architecture;
+Landroid/hidl/base/V1_0/DebugInfo;
 Landroid/hidl/base/V1_0/IBase;
 Landroid/hidl/manager/V1_0/IServiceManager$InstanceDebugInfo;
 Landroid/hidl/manager/V1_0/IServiceManager$Proxy;
@@ -24236,11 +39688,15 @@
 Landroid/hidl/manager/V1_0/IServiceNotification$Stub;
 Landroid/hidl/manager/V1_0/IServiceNotification;
 Landroid/hidl/manager/V1_1/IServiceManager;
+Landroid/hidl/manager/V1_2/IClientCallback;
 Landroid/hidl/manager/V1_2/IServiceManager$Proxy;
 Landroid/hidl/manager/V1_2/IServiceManager;
+Landroid/net/-$$Lambda$NetworkFactory$quULWy1SjqmEQiqq5nzlBuGzTss;
 Landroid/net/-$$Lambda$NetworkStackClient$8Y7GJyozK7_xixdmgfHS4QSif-A;
 Landroid/net/-$$Lambda$NetworkStackClient$EsrnifYD8E-HxTwVQsf45HJKvtM;
 Landroid/net/-$$Lambda$NetworkStackClient$qInwLPrclXOFvKSYRjcCaCSeEhw;
+Landroid/net/-$$Lambda$NetworkStackClient$tuv4lz5fwSxR2XuU69pB4cKkltA;
+Landroid/net/ConnectivityModuleConnector$1;
 Landroid/net/ConnectivityModuleConnector$ConnectivityModuleHealthListener;
 Landroid/net/ConnectivityModuleConnector$Dependencies;
 Landroid/net/ConnectivityModuleConnector$DependenciesImpl;
@@ -24259,6 +39715,7 @@
 Landroid/net/INetd$Stub$Proxy;
 Landroid/net/INetd$Stub;
 Landroid/net/INetd;
+Landroid/net/INetdUnsolicitedEventListener$Stub$Proxy;
 Landroid/net/INetdUnsolicitedEventListener$Stub;
 Landroid/net/INetdUnsolicitedEventListener;
 Landroid/net/INetworkMonitor$Stub$Proxy;
@@ -24266,12 +39723,18 @@
 Landroid/net/INetworkMonitorCallbacks$Stub;
 Landroid/net/INetworkMonitorCallbacks;
 Landroid/net/INetworkStackConnector$Stub$Proxy;
+Landroid/net/INetworkStackConnector$Stub;
 Landroid/net/INetworkStackConnector;
 Landroid/net/ITetheringConnector;
 Landroid/net/InterfaceConfigurationParcel$1;
 Landroid/net/InterfaceConfigurationParcel;
 Landroid/net/IpMemoryStore$1;
+Landroid/net/IpMemoryStore;
+Landroid/net/IpMemoryStoreClient;
+Landroid/net/Layer2PacketParcelable;
+Landroid/net/MarkMaskParcel;
 Landroid/net/NetworkMonitorManager;
+Landroid/net/NetworkStackClient$1;
 Landroid/net/NetworkStackClient$Dependencies;
 Landroid/net/NetworkStackClient$DependenciesImpl;
 Landroid/net/NetworkStackClient$NetworkStackCallback;
@@ -24281,13 +39744,22 @@
 Landroid/net/PrivateDnsConfigParcel;
 Landroid/net/ProvisioningConfigurationParcelable$1;
 Landroid/net/ProvisioningConfigurationParcelable;
+Landroid/net/ResolverParamsParcel;
+Landroid/net/RouteInfoParcel;
+Landroid/net/TcpKeepalivePacketData;
+Landroid/net/TcpKeepalivePacketDataParcelable;
+Landroid/net/TetherConfigParcel;
 Landroid/net/TetherStatsParcel$1;
 Landroid/net/TetherStatsParcel;
 Landroid/net/TetheringManager$TetheringConnection;
 Landroid/net/TetheringManager;
 Landroid/net/UidRangeParcel;
+Landroid/net/dhcp/DhcpServingParamsParcel;
+Landroid/net/dhcp/IDhcpServerCallbacks;
 Landroid/net/ip/IIpClient$Stub$Proxy;
+Landroid/net/ip/IIpClient$Stub;
 Landroid/net/ip/IIpClient;
+Landroid/net/ip/IIpClientCallbacks$Stub$Proxy;
 Landroid/net/ip/IIpClientCallbacks$Stub;
 Landroid/net/ip/IIpClientCallbacks;
 Landroid/net/ip/IpClientCallbacks;
@@ -24297,17 +39769,26 @@
 Landroid/net/ipmemorystore/Blob;
 Landroid/net/ipmemorystore/IOnBlobRetrievedListener$Default;
 Landroid/net/ipmemorystore/IOnBlobRetrievedListener;
+Landroid/net/ipmemorystore/OnBlobRetrievedListener;
+Landroid/net/ipmemorystore/OnStatusListener;
+Landroid/net/metrics/INetdEventListener$Stub$Proxy;
 Landroid/net/metrics/INetdEventListener$Stub;
 Landroid/net/metrics/INetdEventListener;
+Landroid/net/netlink/InetDiagMessage;
+Landroid/net/netlink/NetlinkMessage;
 Landroid/net/shared/-$$Lambda$OsobWheG5dMvEj_cOJtueqUBqBI;
 Landroid/net/shared/-$$Lambda$SYWvjOUPlAZ_O2Z6yfFU9np1858;
 Landroid/net/shared/IpConfigurationParcelableUtil;
 Landroid/net/shared/LinkPropertiesParcelableUtil;
+Landroid/net/shared/NetdUtils;
 Landroid/net/shared/NetworkMonitorUtils;
 Landroid/net/shared/ParcelableUtil;
 Landroid/net/shared/PrivateDnsConfig;
 Landroid/net/shared/ProvisioningConfiguration$Builder;
 Landroid/net/shared/ProvisioningConfiguration;
+Landroid/net/shared/RouteUtils$ModifyOperation;
+Landroid/net/shared/RouteUtils;
+Landroid/net/util/NetdService$NetdCommand;
 Landroid/net/util/NetdService;
 Landroid/net/util/SharedLog$Category;
 Landroid/net/util/SharedLog;
@@ -24318,25 +39799,55 @@
 Landroid/os/UserManagerInternal$UserRestrictionsListener;
 Landroid/os/UserManagerInternal;
 Lcom/android/server/-$$Lambda$1xUIIN0BU8izGcnYWT-VzczLBFU;
+Lcom/android/server/-$$Lambda$2rlj96lJ7chZc-A-SbtixW5GQdw;
 Lcom/android/server/-$$Lambda$AlarmManagerService$2$Eo-D98J-N9R2METkD-12gPs320c;
+Lcom/android/server/-$$Lambda$AlarmManagerService$3$jIkPWjqS66vG6aFVQoHxR2w4HPE;
 Lcom/android/server/-$$Lambda$AlarmManagerService$Batch$Xltkj5RTKUMuFVeuavpuY7-Ogzc;
+Lcom/android/server/-$$Lambda$AlarmManagerService$Kswc8z2_RnUW_V0bP_uNErDNN_4;
 Lcom/android/server/-$$Lambda$AlarmManagerService$ZVedZIeWdB3G6AGM0_-9P_GEO24;
 Lcom/android/server/-$$Lambda$AlarmManagerService$gKXZ864LsHRTGbnNeLAgHKL2YPk;
+Lcom/android/server/-$$Lambda$AlarmManagerService$lzZOWJB2te9UTLsLWoZ6M8xouQQ;
 Lcom/android/server/-$$Lambda$AlarmManagerService$nSJw2tKfoL3YIrKDtszoL44jcSM;
+Lcom/android/server/-$$Lambda$AlarmManagerService$nhEd_CDoc7mzdNLRwGUhwl9TaGk;
 Lcom/android/server/-$$Lambda$AlarmManagerService$qehVSjTLWvtJYPGgKh2mkJ6ePnk;
+Lcom/android/server/-$$Lambda$AnimationThread$mMqvPqhsYaiy1Cu67m4VbAgabsM;
 Lcom/android/server/-$$Lambda$AppStateTracker$zzioY8jvEm-1GnJ13CUiQGauPEE;
 Lcom/android/server/-$$Lambda$BatteryService$2x73lvpB0jctMSVP4qb9sHAqRPw;
 Lcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$7Y-B9O7NDYgUY9hQvFzC2FQ2V5w;
 Lcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$9z3zqgxtPzBN8Qoni5nHVb0m8EY;
 Lcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$DM4ow6LC--JYWBfhHp2f1JW8nww;
+Lcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$JTQ79fl14NyImudsJhx-Mp1dJI8;
 Lcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$KZAu97wwr_7_MI0awCjQTzdIuAI;
+Lcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$hInbvsihGvN2hXqvdcoFYzdeqHw;
 Lcom/android/server/-$$Lambda$BatteryService$BatteryPropertiesRegistrar$muNPoFqxU6pF6un7sF70iW4-Fus;
 Lcom/android/server/-$$Lambda$BatteryService$D1kwd7L7yyqN5niz3KWkTepVmUk;
+Lcom/android/server/-$$Lambda$BinderCallsStatsService$SettingsObserver$bif9uA0lzoT6htcKe6MNsrH_ha4;
+Lcom/android/server/-$$Lambda$ConnectivityService$3$_itgrpHpWu3QvA9Wb0gtsEYJWZY;
+Lcom/android/server/-$$Lambda$ConnectivityService$HGNmLJFn9hb5C4M_qIm2DAASfeY;
+Lcom/android/server/-$$Lambda$ConnectivityService$LEHWBvz4S-r8QDKRwIiJBgJlcRE;
+Lcom/android/server/-$$Lambda$ConnectivityService$OIhIcUZjeJ-ci4rP6veezE8o67U;
 Lcom/android/server/-$$Lambda$ConnectivityService$SFqiR4Pfksb1C7csMC3uNxCllR8;
+Lcom/android/server/-$$Lambda$ConnectivityService$_7E84WuW6fYNkhu0kZaWBpcTO58;
 Lcom/android/server/-$$Lambda$ConnectivityService$_NU7EIcPVS-uF_gWH_NWN_gBL4w;
+Lcom/android/server/-$$Lambda$ConnectivityService$ehBcQNERx6CsAuQn5W-xyVKZtXo;
 Lcom/android/server/-$$Lambda$ConnectivityService$iOdlQdHoQM14teTS-EPRH-RRL3k;
+Lcom/android/server/-$$Lambda$ConnectivityService$tyyIxrN1UBdbonRFAT6eEH4wVic;
+Lcom/android/server/-$$Lambda$ConnectivityService$uvmt4yGRo-ufWZED19neBxJaTNk;
 Lcom/android/server/-$$Lambda$ConnectivityService$vGRhfNpFTw0hellWUlmBolfzRy8;
 Lcom/android/server/-$$Lambda$ContextHubSystemService$q-5gSEKm3he-4vIHcay4DLtf85E;
+Lcom/android/server/-$$Lambda$CountryDetectorService$ESi5ICoEixGJHWdY67G_J38VrJI;
+Lcom/android/server/-$$Lambda$CountryDetectorService$UdoYpHRrhGb-PF6QTwQ4SluOe20;
+Lcom/android/server/-$$Lambda$CountryDetectorService$YZWlE4qqoDuiwnkSrasi91p2-Tk;
+Lcom/android/server/-$$Lambda$CountryDetectorService$fFSTHORponDwFf2wlaJLUdUhirQ;
+Lcom/android/server/-$$Lambda$DisplayThread$f5MRs-rGyBEbIMjOX5lqvMSkf2g;
+Lcom/android/server/-$$Lambda$ExplicitHealthCheckController$6YGiVtgCnlJ0hMIeX5TzlFUaNrY;
+Lcom/android/server/-$$Lambda$ExplicitHealthCheckController$MJhpX-SveTcXQEYQTQa3k6RpjzU;
+Lcom/android/server/-$$Lambda$ExplicitHealthCheckController$NCzfilqDrFIbp6BuyCJrDsdAk5I;
+Lcom/android/server/-$$Lambda$ExplicitHealthCheckController$_PgTaUvckhKQczm_86P6Mowec48;
+Lcom/android/server/-$$Lambda$ExplicitHealthCheckController$fE2pZ6ZhwFEJPuOl0ochqPnSmyI;
+Lcom/android/server/-$$Lambda$ExplicitHealthCheckController$ucIBQc_IW2iYt6j4dngAncLT6nQ;
+Lcom/android/server/-$$Lambda$ExplicitHealthCheckController$x4g41SYVR_nHQxV-RQY6VIfh1zs;
+Lcom/android/server/-$$Lambda$GnssManagerService$-oEUAdznvSDH354TqspnOkB88T4;
 Lcom/android/server/-$$Lambda$GnssManagerService$a17GVVAgEci0VYD4EMvKwuPLhdQ;
 Lcom/android/server/-$$Lambda$GnssManagerService$mZAgy7PA5q3tB1aq7tHsX4xM14E;
 Lcom/android/server/-$$Lambda$GraphicsStatsService$2EDVu98hsJvSwNgKvijVLSR3IrQ;
@@ -24344,16 +39855,30 @@
 Lcom/android/server/-$$Lambda$IpSecService$AnqunmSwm_yQvDDEPg-gokhVs5M;
 Lcom/android/server/-$$Lambda$LocationManagerService$1$HAAnoF9DI9FvCHK_geH89--2z2I;
 Lcom/android/server/-$$Lambda$LocationManagerService$56u_uxjuANYKBEJg0XAb0TfpovM;
+Lcom/android/server/-$$Lambda$LocationManagerService$6axYIgaetwnztBT8L9-07FzvA1k;
+Lcom/android/server/-$$Lambda$LocationManagerService$7UVIPM1Ndi2blDc1rAeJdqMBvh8;
+Lcom/android/server/-$$Lambda$LocationManagerService$9-Bb7czX4njtJ272aPH91IsacAY;
+Lcom/android/server/-$$Lambda$LocationManagerService$AgevX9G4cx2TbNzr7MYT3YPtASs;
 Lcom/android/server/-$$Lambda$LocationManagerService$BQNQ1vKVv2dgsjR1d4p8xU8o1us;
 Lcom/android/server/-$$Lambda$LocationManagerService$BY2uqgE48i0Shvo1FGLa9toRxBA;
 Lcom/android/server/-$$Lambda$LocationManagerService$DJ4kMod0tVB-vqSawrWCXTCoPAM;
+Lcom/android/server/-$$Lambda$LocationManagerService$EWYAKDMwH-ZXy5A8J9erCTIUqKY;
 Lcom/android/server/-$$Lambda$LocationManagerService$GnHas6J3gXGjXx6KfNuV_GzNl9w;
 Lcom/android/server/-$$Lambda$LocationManagerService$HZIPtgYCt4b4zdEJtC8qjcHStVE;
+Lcom/android/server/-$$Lambda$LocationManagerService$KXKNxpIZDrysWhFilQxLdYekB3M;
 Lcom/android/server/-$$Lambda$LocationManagerService$LocationProviderManager$neXVKsR0MS1O6DaHXSdf3TVC-rc;
 Lcom/android/server/-$$Lambda$LocationManagerService$Nht7c6P7I1-MJqXp4qiS_HUIjzY;
+Lcom/android/server/-$$Lambda$LocationManagerService$QVf9Y4g7BmVBQBlkUO5oHLmMW2o;
 Lcom/android/server/-$$Lambda$LocationManagerService$V3FRncuMEn-4R6Dd2zsTs4m0dWM;
+Lcom/android/server/-$$Lambda$LocationManagerService$XWulT08IueAbw1NBjxLvw-T5cfc;
+Lcom/android/server/-$$Lambda$LocationManagerService$cH8JMN3scBU_51q5WfUtASFQZJ0;
+Lcom/android/server/-$$Lambda$LocationManagerService$dMJ6CgaZhEyiV2592-lxxrexZAQ;
 Lcom/android/server/-$$Lambda$LocationManagerService$es-cu7rp_R0xbJzDRj4qpZNL7vc;
+Lcom/android/server/-$$Lambda$LocationManagerService$fWSrYiKaBfOFmdeiwC9Lx7S68B4;
+Lcom/android/server/-$$Lambda$LocationManagerService$nxs_FejUjcjw2UUIeDY3TYTRJs4;
+Lcom/android/server/-$$Lambda$LocationManagerService$oIimlThgbbmKRAN80H4tpnruGtk;
 Lcom/android/server/-$$Lambda$LocationManagerService$qbZh8GXCTpZ1wNP3qw1VXZxlKQg;
+Lcom/android/server/-$$Lambda$LockGuard$C107ImDhsfBAwlfWxZPBoVXIl_4;
 Lcom/android/server/-$$Lambda$LooperStatsService$Byo6QAxZpVXDCMtjrcYJc6YLAks;
 Lcom/android/server/-$$Lambda$LooperStatsService$Vzysuo2tO86qjfcWeh1Rdb47NQQ;
 Lcom/android/server/-$$Lambda$LooperStatsService$XjYmSR91xdWG1Xgt-Gj9GBZZbjk;
@@ -24361,8 +39886,10 @@
 Lcom/android/server/-$$Lambda$NetworkManagementService$15DusjG2gzn5UASV-lMS3BUUn9c;
 Lcom/android/server/-$$Lambda$NetworkManagementService$D43p3Tqq7B3qaMs9AGb_3j0KZd0;
 Lcom/android/server/-$$Lambda$NetworkManagementService$FsR_UD5xfj4hgrwGdX74wq881Bk;
+Lcom/android/server/-$$Lambda$NetworkManagementService$Hs4ibiwzKmd9u0PZ04vysXRExho;
 Lcom/android/server/-$$Lambda$NetworkManagementService$JKmkb4AIm_PPzQp1XOHOgPPRswo;
 Lcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$0xWa9DGxTnoGVHppsM-nng2PygE;
+Lcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$CY9DSIbzpOaZKmi1MIGhBkJBJV0;
 Lcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$KpFpi2qBs2OPscTclZ3JRRr-G-g;
 Lcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$L7i_Z-ii6zMptHCt2_Igy3iBvKk;
 Lcom/android/server/-$$Lambda$NetworkManagementService$NetdUnsolicitedEventListener$QjjL0oku3yfQh6xuCG2xu7lWiSM;
@@ -24376,16 +39903,22 @@
 Lcom/android/server/-$$Lambda$NetworkManagementService$YKgmK-4MuJjN-VLuMBhmJy1eWj4;
 Lcom/android/server/-$$Lambda$NetworkManagementService$Yw12yNgo43yul34SibAKDtttAK8;
 Lcom/android/server/-$$Lambda$NetworkManagementService$_L953cbquVj0BMBP1MZlSTm0Umg;
+Lcom/android/server/-$$Lambda$NetworkManagementService$fl14NirBlFUd6eJkGcL0QWd5-w0;
 Lcom/android/server/-$$Lambda$NetworkManagementService$hs6djmKbGd8sG4u1TMglrogNP_s;
 Lcom/android/server/-$$Lambda$NetworkManagementService$vX8dVVYxxv3YT9jQuN34bgGgRa8;
 Lcom/android/server/-$$Lambda$NetworkManagementService$xer7k2RLU4mODjrkZqaX89S9gD8;
 Lcom/android/server/-$$Lambda$NetworkScoreService$vwytA23Qz3U83FJaKiA52aJ1mts;
+Lcom/android/server/-$$Lambda$OiriEnuntH0IJYDPdRjKdzSjR0o;
 Lcom/android/server/-$$Lambda$PackageWatchdog$07YAng9lcuyRJuBYy9Jk3p2pWVY;
 Lcom/android/server/-$$Lambda$PackageWatchdog$9whbrgN2UsbVDUUSdkrctYqoh5M;
 Lcom/android/server/-$$Lambda$PackageWatchdog$CQuOnXthwwBaxcS5WoAlJJAz8Tk;
 Lcom/android/server/-$$Lambda$PackageWatchdog$Q0WI2EJpRFO1jF_7_YDaj1eGHas;
+Lcom/android/server/-$$Lambda$PackageWatchdog$VAW1s9zLN90OWS2gosDw9xdVjr8;
+Lcom/android/server/-$$Lambda$PackageWatchdog$hFdPWF73rahpzi1hJ-d9hNfUNrY;
+Lcom/android/server/-$$Lambda$PackageWatchdog$ib8X74W4PjX4xo1uv-QgOpcuf4o;
 Lcom/android/server/-$$Lambda$PackageWatchdog$nOS9OaZO4hPsSe0I8skPT1UgQoo;
 Lcom/android/server/-$$Lambda$PackageWatchdog$oAoA92I4TtJeqztFu3XBOLEs7gE;
+Lcom/android/server/-$$Lambda$PackageWatchdog$pCeN8Lr1-8Uwvg-VmBTEDs1Ak0w;
 Lcom/android/server/-$$Lambda$PackageWatchdog$uFI2R7Ip9Bh1wQPJqJ5H5A0soVU;
 Lcom/android/server/-$$Lambda$PackageWatchdog$vRKcIrucEj03dz6ypRVINZtns1s;
 Lcom/android/server/-$$Lambda$PersistentDataBlockService$EZl9OYaT2eNL7kfSr2nKUBjxidk;
@@ -24394,25 +39927,47 @@
 Lcom/android/server/-$$Lambda$PinnerService$6bekYOn4YXi0x7vYNWO40QyA-s8;
 Lcom/android/server/-$$Lambda$PinnerService$GeEX-8XoHeV0LEszxat7jOSlrs4;
 Lcom/android/server/-$$Lambda$PruneInstantAppsJobService$i4sLSJdxcTXdgPAQZFbP66ZRprE;
+Lcom/android/server/-$$Lambda$QDIfseHi3OqlANfwpoMGUUJDtAQ;
 Lcom/android/server/-$$Lambda$QTLvklqCTz22VSzZPEWJs-o0bv4;
+Lcom/android/server/-$$Lambda$RescueParty$M16YDzk6heHIMmIiCwHVSe9Y_o8;
+Lcom/android/server/-$$Lambda$SensorPrivacyService$SensorPrivacyHandler$ctW6BcqPnLm_33mG1WatsFwFT7w;
 Lcom/android/server/-$$Lambda$ServiceWatcher$IP3HV4ye72eH3YxzGb9dMfcGWPE;
+Lcom/android/server/-$$Lambda$ServiceWatcher$K66HPJls7ga1t3t859fKACfAgZc;
 Lcom/android/server/-$$Lambda$ServiceWatcher$b1z9OeL-1VpQ_8p47qz7nMNUpsE;
 Lcom/android/server/-$$Lambda$ServiceWatcher$gVk2fFkq2-aamIua2kIpukAFtf8;
 Lcom/android/server/-$$Lambda$ServiceWatcher$uCZpuTwrOz-CS9PQS2NY1ZXaU8U;
 Lcom/android/server/-$$Lambda$ServiceWatcher$uru7j1zD-GiN8rndFZ3KWaTrxYo;
+Lcom/android/server/-$$Lambda$StorageManagerService$QRLVSwX20a_sSZQkOpiBHRVs3Cs;
+Lcom/android/server/-$$Lambda$StorageManagerService$iQEwQayMYzs9Ew4L6Gk7kRIO9wM;
 Lcom/android/server/-$$Lambda$StorageManagerService$js3bHvdd2Mf8gztNxvL27JoT034;
+Lcom/android/server/-$$Lambda$StorageManagerService$rphiUwXTDSwqMt8xpkOYwsKQc5w;
+Lcom/android/server/-$$Lambda$StorageManagerService$wW-xFR_FbxcgCZR-2zxBZdtJhr8;
+Lcom/android/server/-$$Lambda$SystemServer$5qLn3pqt3aoGcHIU3L45PwnW0vI;
+Lcom/android/server/-$$Lambda$SystemServer$72PvntN28skIthlRYR9w5EhsdX8;
 Lcom/android/server/-$$Lambda$SystemServer$NlJmG18aPrQduhRqASIdcn7G0z8;
+Lcom/android/server/-$$Lambda$SystemServer$RfxLu1RawR4j0S9lEwPzwtODxaE;
 Lcom/android/server/-$$Lambda$SystemServer$TEbRm_G0ejorrajBEvke8XmHuQU;
 Lcom/android/server/-$$Lambda$SystemServer$UyrPns7R814g-ZEylCbDKhe8It4;
 Lcom/android/server/-$$Lambda$SystemServer$VBGb9VpEls6bUcVBPwYLtX7qDTs;
 Lcom/android/server/-$$Lambda$SystemServer$Y1gEdKr_Hb7K7cbTDAo_WOJ-SYI;
+Lcom/android/server/-$$Lambda$SystemServer$c50amMOcae1K0NdkHHoWNGvSMJQ;
+Lcom/android/server/-$$Lambda$SystemServer$zn6ji6g70a_qrK5QZEPCaarZSik;
 Lcom/android/server/-$$Lambda$SystemServerInitThreadPool$o2_GLo0lnkotYmRdTfg66UETEwQ;
+Lcom/android/server/-$$Lambda$TelephonyRegistry$1bce8MzlZGgWfCoSiX5udUvFDQ0;
 Lcom/android/server/-$$Lambda$TelephonyRegistry$ANYH01Imb6dMua6cgKvMEl4kD3I;
 Lcom/android/server/-$$Lambda$TelephonyRegistry$KwKYEFoKdijV5jZbDqX1IUV4CzY;
+Lcom/android/server/-$$Lambda$UiModeManagerService$10$s3H4QPM2YRtAd9qa2Ja54k7yJO0;
+Lcom/android/server/-$$Lambda$UiModeManagerService$9$ytrifY2iawCLCBtYLrmL70q1UhI;
+Lcom/android/server/-$$Lambda$UiModeManagerService$AwUHdh7CYhroUMaGm35a4uvZcnY;
+Lcom/android/server/-$$Lambda$UiModeManagerService$bGpxq9ta5GBYtiUBAOy4iNtThus;
 Lcom/android/server/-$$Lambda$UiModeManagerService$vYS4_RzjAavNRF50rrGN0tXI5JM;
 Lcom/android/server/-$$Lambda$UiModeManagerService$vuGxqIEDBezs_Xyz-NAh0Bonp5g;
+Lcom/android/server/-$$Lambda$UiModeManagerService$wttJpnJnECgc-2ud4hu2A5dSOPg;
 Lcom/android/server/-$$Lambda$YWiwiKm_Qgqb55C6tTuq_n2JzdY;
+Lcom/android/server/-$$Lambda$gdjkrlx9BXIj8-f75-NKd_zMxPs;
+Lcom/android/server/-$$Lambda$htemI6hNv3kq1UVGrXpRlPIVXRU;
 Lcom/android/server/-$$Lambda$hu439-4T6QBT8QyZnspMtXqICWs;
+Lcom/android/server/-$$Lambda$jMDA_C1bkT6orVkYqrEdgiGSDI0;
 Lcom/android/server/-$$Lambda$qoNbXUvSu3yuTPVXPUfZW_HDrTQ;
 Lcom/android/server/-$$Lambda$u6uWKONNslLDvDcMfFfe2etQmKg;
 Lcom/android/server/AlarmManagerInternal$InFlightListener;
@@ -24423,6 +39978,7 @@
 Lcom/android/server/AlarmManagerService$4;
 Lcom/android/server/AlarmManagerService$5;
 Lcom/android/server/AlarmManagerService$6;
+Lcom/android/server/AlarmManagerService$7;
 Lcom/android/server/AlarmManagerService$Alarm;
 Lcom/android/server/AlarmManagerService$AlarmHandler;
 Lcom/android/server/AlarmManagerService$AlarmThread;
@@ -24430,19 +39986,25 @@
 Lcom/android/server/AlarmManagerService$AppWakeupHistory;
 Lcom/android/server/AlarmManagerService$Batch;
 Lcom/android/server/AlarmManagerService$BatchTimeOrder;
+Lcom/android/server/AlarmManagerService$BroadcastStats;
 Lcom/android/server/AlarmManagerService$ChargingReceiver;
 Lcom/android/server/AlarmManagerService$ClockReceiver;
 Lcom/android/server/AlarmManagerService$Constants;
 Lcom/android/server/AlarmManagerService$DeliveryTracker;
+Lcom/android/server/AlarmManagerService$FilterStats;
 Lcom/android/server/AlarmManagerService$InFlight;
 Lcom/android/server/AlarmManagerService$IncreasingTimeOrder;
 Lcom/android/server/AlarmManagerService$Injector;
 Lcom/android/server/AlarmManagerService$InteractiveStateReceiver;
 Lcom/android/server/AlarmManagerService$LocalService;
+Lcom/android/server/AlarmManagerService$PriorityClass;
+Lcom/android/server/AlarmManagerService$ShellCmd;
 Lcom/android/server/AlarmManagerService$UidObserver;
 Lcom/android/server/AlarmManagerService$UninstallReceiver;
+Lcom/android/server/AlarmManagerService$WakeupEvent;
 Lcom/android/server/AlarmManagerService;
 Lcom/android/server/AnimationThread;
+Lcom/android/server/AppStateTracker$1;
 Lcom/android/server/AppStateTracker$AppOpsWatcher;
 Lcom/android/server/AppStateTracker$FeatureFlagsObserver;
 Lcom/android/server/AppStateTracker$Listener;
@@ -24451,17 +40013,24 @@
 Lcom/android/server/AppStateTracker$StandbyTracker;
 Lcom/android/server/AppStateTracker$UidObserver;
 Lcom/android/server/AppStateTracker;
+Lcom/android/server/AttributeCache$Entry;
+Lcom/android/server/AttributeCache$Package;
 Lcom/android/server/AttributeCache;
 Lcom/android/server/BatteryService$10;
+Lcom/android/server/BatteryService$1;
 Lcom/android/server/BatteryService$2;
 Lcom/android/server/BatteryService$3;
 Lcom/android/server/BatteryService$4;
+Lcom/android/server/BatteryService$5;
+Lcom/android/server/BatteryService$6;
 Lcom/android/server/BatteryService$7;
 Lcom/android/server/BatteryService$8;
 Lcom/android/server/BatteryService$9;
 Lcom/android/server/BatteryService$BatteryPropertiesRegistrar;
 Lcom/android/server/BatteryService$BinderService;
 Lcom/android/server/BatteryService$HealthHalCallback;
+Lcom/android/server/BatteryService$HealthServiceWrapper$1;
+Lcom/android/server/BatteryService$HealthServiceWrapper$2;
 Lcom/android/server/BatteryService$HealthServiceWrapper$Callback;
 Lcom/android/server/BatteryService$HealthServiceWrapper$IHealthSupplier;
 Lcom/android/server/BatteryService$HealthServiceWrapper$IServiceManagerSupplier;
@@ -24470,12 +40039,18 @@
 Lcom/android/server/BatteryService$HealthServiceWrapper;
 Lcom/android/server/BatteryService$Led;
 Lcom/android/server/BatteryService$LocalService;
+Lcom/android/server/BatteryService$Shell;
 Lcom/android/server/BatteryService;
 Lcom/android/server/BinderCallsStatsService$AuthorizedWorkSourceProvider;
 Lcom/android/server/BinderCallsStatsService$Internal;
 Lcom/android/server/BinderCallsStatsService$LifeCycle;
 Lcom/android/server/BinderCallsStatsService$SettingsObserver;
 Lcom/android/server/BinderCallsStatsService;
+Lcom/android/server/BluetoothAirplaneModeListener$1;
+Lcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper$1;
+Lcom/android/server/BluetoothAirplaneModeListener$AirplaneModeHelper;
+Lcom/android/server/BluetoothAirplaneModeListener$BluetoothAirplaneModeHandler;
+Lcom/android/server/BluetoothAirplaneModeListener;
 Lcom/android/server/BluetoothManagerService$1;
 Lcom/android/server/BluetoothManagerService$2;
 Lcom/android/server/BluetoothManagerService$3;
@@ -24490,6 +40065,7 @@
 Lcom/android/server/BluetoothService;
 Lcom/android/server/CachedDeviceStateService$1;
 Lcom/android/server/CachedDeviceStateService;
+Lcom/android/server/CertBlacklister$BlacklistObserver$1;
 Lcom/android/server/CertBlacklister$BlacklistObserver;
 Lcom/android/server/CertBlacklister;
 Lcom/android/server/ConnectivityService$1;
@@ -24498,16 +40074,24 @@
 Lcom/android/server/ConnectivityService$4;
 Lcom/android/server/ConnectivityService$5;
 Lcom/android/server/ConnectivityService$6;
+Lcom/android/server/ConnectivityService$7;
 Lcom/android/server/ConnectivityService$CaptivePortalImpl;
+Lcom/android/server/ConnectivityService$ConnectivityDiagnosticsCallbackInfo;
+Lcom/android/server/ConnectivityService$ConnectivityDiagnosticsHandler;
 Lcom/android/server/ConnectivityService$Dependencies;
 Lcom/android/server/ConnectivityService$InternalHandler;
 Lcom/android/server/ConnectivityService$LegacyTypeTracker;
 Lcom/android/server/ConnectivityService$NetworkFactoryInfo;
 Lcom/android/server/ConnectivityService$NetworkMonitorCallbacks;
+Lcom/android/server/ConnectivityService$NetworkProviderInfo;
+Lcom/android/server/ConnectivityService$NetworkReassignment$NetworkBgStatePair;
+Lcom/android/server/ConnectivityService$NetworkReassignment$RequestReassignment;
+Lcom/android/server/ConnectivityService$NetworkReassignment;
 Lcom/android/server/ConnectivityService$NetworkRequestInfo;
 Lcom/android/server/ConnectivityService$NetworkStateTrackerHandler;
 Lcom/android/server/ConnectivityService$ReapUnvalidatedNetworks;
 Lcom/android/server/ConnectivityService$SettingsObserver;
+Lcom/android/server/ConnectivityService$ShellCmd;
 Lcom/android/server/ConnectivityService$UnneededFor;
 Lcom/android/server/ConnectivityService;
 Lcom/android/server/ConsumerIrService;
@@ -24530,12 +40114,14 @@
 Lcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;
 Lcom/android/server/DropBoxManagerService$EntryFile;
 Lcom/android/server/DropBoxManagerService$FileList;
+Lcom/android/server/DropBoxManagerService$ShellCmd;
 Lcom/android/server/DropBoxManagerService;
 Lcom/android/server/DynamicSystemService;
 Lcom/android/server/EntropyMixer$1;
 Lcom/android/server/EntropyMixer$2;
 Lcom/android/server/EntropyMixer;
 Lcom/android/server/EventLogTags;
+Lcom/android/server/ExplicitHealthCheckController$1;
 Lcom/android/server/ExplicitHealthCheckController;
 Lcom/android/server/ExtconStateObserver;
 Lcom/android/server/ExtconUEventObserver$ExtconInfo;
@@ -24549,6 +40135,7 @@
 Lcom/android/server/GnssManagerService;
 Lcom/android/server/GraphicsStatsService$1;
 Lcom/android/server/GraphicsStatsService$ActiveBuffer;
+Lcom/android/server/GraphicsStatsService$BufferInfo;
 Lcom/android/server/GraphicsStatsService$HistoricalBuffer;
 Lcom/android/server/GraphicsStatsService;
 Lcom/android/server/HardwarePropertiesManagerService;
@@ -24558,24 +40145,40 @@
 Lcom/android/server/IntentResolver;
 Lcom/android/server/IoThread;
 Lcom/android/server/IpSecService$1;
+Lcom/android/server/IpSecService$EncapSocketRecord;
+Lcom/android/server/IpSecService$IResource;
 Lcom/android/server/IpSecService$IpSecServiceConfiguration$1;
 Lcom/android/server/IpSecService$IpSecServiceConfiguration;
+Lcom/android/server/IpSecService$OwnedResourceRecord;
+Lcom/android/server/IpSecService$RefcountedResource;
+Lcom/android/server/IpSecService$RefcountedResourceArray;
+Lcom/android/server/IpSecService$ResourceTracker;
+Lcom/android/server/IpSecService$SpiRecord;
+Lcom/android/server/IpSecService$TransformRecord;
+Lcom/android/server/IpSecService$TunnelInterfaceRecord;
 Lcom/android/server/IpSecService$UidFdTagger;
+Lcom/android/server/IpSecService$UserRecord;
 Lcom/android/server/IpSecService$UserResourceTracker;
 Lcom/android/server/IpSecService;
 Lcom/android/server/LocationManagerService$1;
 Lcom/android/server/LocationManagerService$2;
 Lcom/android/server/LocationManagerService$3;
 Lcom/android/server/LocationManagerService$Lifecycle;
+Lcom/android/server/LocationManagerService$LocalService;
 Lcom/android/server/LocationManagerService$LocationProviderManager;
+Lcom/android/server/LocationManagerService$PassiveLocationProviderManager;
 Lcom/android/server/LocationManagerService$Receiver;
 Lcom/android/server/LocationManagerService$UpdateRecord;
 Lcom/android/server/LocationManagerService;
+Lcom/android/server/LocationManagerServiceUtils$LinkedListener;
 Lcom/android/server/LocationManagerServiceUtils$LinkedListenerBase;
 Lcom/android/server/LocationManagerServiceUtils;
+Lcom/android/server/LockGuard$1;
 Lcom/android/server/LockGuard$LockInfo;
 Lcom/android/server/LockGuard;
+Lcom/android/server/LooperStatsService$1;
 Lcom/android/server/LooperStatsService$Lifecycle;
+Lcom/android/server/LooperStatsService$LooperShellCommand;
 Lcom/android/server/LooperStatsService$SettingsObserver;
 Lcom/android/server/LooperStatsService;
 Lcom/android/server/MmsServiceBroker$1;
@@ -24585,12 +40188,22 @@
 Lcom/android/server/MmsServiceBroker;
 Lcom/android/server/MountServiceIdler$1;
 Lcom/android/server/MountServiceIdler;
+Lcom/android/server/NativeDaemonConnector$1;
+Lcom/android/server/NativeDaemonConnector$Command;
+Lcom/android/server/NativeDaemonConnector$NativeDaemonArgumentException;
+Lcom/android/server/NativeDaemonConnector$NativeDaemonFailureException;
+Lcom/android/server/NativeDaemonConnector$ResponseQueue$PendingCmd;
 Lcom/android/server/NativeDaemonConnector$ResponseQueue;
+Lcom/android/server/NativeDaemonConnector$SensitiveArg;
 Lcom/android/server/NativeDaemonConnector;
 Lcom/android/server/NativeDaemonConnectorException;
 Lcom/android/server/NativeDaemonEvent;
+Lcom/android/server/NativeDaemonTimeoutException;
 Lcom/android/server/NetIdManager;
 Lcom/android/server/NetworkManagementInternal;
+Lcom/android/server/NetworkManagementService$1;
+Lcom/android/server/NetworkManagementService$IdleTimerParams;
+Lcom/android/server/NetworkManagementService$Injector;
 Lcom/android/server/NetworkManagementService$LocalService;
 Lcom/android/server/NetworkManagementService$NetdTetheringStatsProvider;
 Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;
@@ -24600,6 +40213,7 @@
 Lcom/android/server/NetworkScoreService$1;
 Lcom/android/server/NetworkScoreService$2;
 Lcom/android/server/NetworkScoreService$3;
+Lcom/android/server/NetworkScoreService$4;
 Lcom/android/server/NetworkScoreService$CurrentNetworkScoreCacheFilter;
 Lcom/android/server/NetworkScoreService$DispatchingContentObserver;
 Lcom/android/server/NetworkScoreService$FilteringCacheUpdatingConsumer;
@@ -24612,17 +40226,25 @@
 Lcom/android/server/NetworkScoreService;
 Lcom/android/server/NetworkScorerAppManager$SettingsFacade;
 Lcom/android/server/NetworkScorerAppManager;
+Lcom/android/server/NetworkTimeUpdateService$1;
+Lcom/android/server/NetworkTimeUpdateService$AutoTimeSettingObserver;
+Lcom/android/server/NetworkTimeUpdateService$MyHandler;
+Lcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;
 Lcom/android/server/NetworkTimeUpdateService;
 Lcom/android/server/NetworkTimeUpdateServiceImpl$1;
 Lcom/android/server/NetworkTimeUpdateServiceImpl$2;
+Lcom/android/server/NetworkTimeUpdateServiceImpl$AutoTimeSettingObserver;
 Lcom/android/server/NetworkTimeUpdateServiceImpl$MyHandler;
 Lcom/android/server/NetworkTimeUpdateServiceImpl$NetworkTimeUpdateCallback;
 Lcom/android/server/NetworkTimeUpdateServiceImpl$SettingsObserver;
 Lcom/android/server/NetworkTimeUpdateServiceImpl;
+Lcom/android/server/NsdService$1;
 Lcom/android/server/NsdService$ClientInfo;
 Lcom/android/server/NsdService$DaemonConnection;
 Lcom/android/server/NsdService$DaemonConnectionSupplier;
 Lcom/android/server/NsdService$NativeCallbackReceiver;
+Lcom/android/server/NsdService$NativeEvent;
+Lcom/android/server/NsdService$NativeResponseCode;
 Lcom/android/server/NsdService$NsdSettings$1;
 Lcom/android/server/NsdService$NsdSettings;
 Lcom/android/server/NsdService$NsdStateMachine$1;
@@ -24631,10 +40253,14 @@
 Lcom/android/server/NsdService$NsdStateMachine$EnabledState;
 Lcom/android/server/NsdService$NsdStateMachine;
 Lcom/android/server/NsdService;
+Lcom/android/server/PackageWatchdog$1;
+Lcom/android/server/PackageWatchdog$BootThreshold;
+Lcom/android/server/PackageWatchdog$MonitoredPackage;
 Lcom/android/server/PackageWatchdog$ObserverInternal;
 Lcom/android/server/PackageWatchdog$PackageHealthObserver;
 Lcom/android/server/PackageWatchdog$SystemClock;
 Lcom/android/server/PackageWatchdog;
+Lcom/android/server/PendingIntentUtils;
 Lcom/android/server/PersistentDataBlockManagerInternal;
 Lcom/android/server/PersistentDataBlockService$1;
 Lcom/android/server/PersistentDataBlockService$2;
@@ -24655,6 +40281,7 @@
 Lcom/android/server/RandomBlock;
 Lcom/android/server/RescueParty$AppThreshold;
 Lcom/android/server/RescueParty$BootThreshold;
+Lcom/android/server/RescueParty$RescuePartyObserver;
 Lcom/android/server/RescueParty$Threshold;
 Lcom/android/server/RescueParty;
 Lcom/android/server/RuntimeService;
@@ -24669,7 +40296,11 @@
 Lcom/android/server/ServiceWatcher$2;
 Lcom/android/server/ServiceWatcher$BinderRunner;
 Lcom/android/server/ServiceWatcher$BlockingBinderRunner;
+Lcom/android/server/ServiceWatcher$ServiceInfo;
 Lcom/android/server/ServiceWatcher;
+Lcom/android/server/StorageManagerService$10;
+Lcom/android/server/StorageManagerService$11;
+Lcom/android/server/StorageManagerService$12;
 Lcom/android/server/StorageManagerService$13;
 Lcom/android/server/StorageManagerService$1;
 Lcom/android/server/StorageManagerService$2;
@@ -24677,17 +40308,26 @@
 Lcom/android/server/StorageManagerService$4;
 Lcom/android/server/StorageManagerService$5;
 Lcom/android/server/StorageManagerService$6;
+Lcom/android/server/StorageManagerService$7;
 Lcom/android/server/StorageManagerService$8;
 Lcom/android/server/StorageManagerService$9;
 Lcom/android/server/StorageManagerService$AppFuseMountScope;
 Lcom/android/server/StorageManagerService$Callbacks;
 Lcom/android/server/StorageManagerService$Lifecycle;
+Lcom/android/server/StorageManagerService$MountObbAction;
+Lcom/android/server/StorageManagerService$ObbAction;
 Lcom/android/server/StorageManagerService$ObbActionHandler;
+Lcom/android/server/StorageManagerService$ObbState;
 Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;
 Lcom/android/server/StorageManagerService$StorageManagerServiceHandler;
+Lcom/android/server/StorageManagerService$UnmountObbAction;
 Lcom/android/server/StorageManagerService;
+Lcom/android/server/SystemConfigService$1;
+Lcom/android/server/SystemConfigService;
+Lcom/android/server/SystemServer$1;
 Lcom/android/server/SystemServer;
 Lcom/android/server/SystemServerInitThreadPool;
+Lcom/android/server/SystemService$TargetUser;
 Lcom/android/server/SystemService;
 Lcom/android/server/SystemServiceManager;
 Lcom/android/server/SystemUpdateManagerService;
@@ -24702,6 +40342,7 @@
 Lcom/android/server/ThreadPriorityBooster$PriorityState;
 Lcom/android/server/ThreadPriorityBooster;
 Lcom/android/server/UiModeManagerInternal;
+Lcom/android/server/UiModeManagerService$10;
 Lcom/android/server/UiModeManagerService$1;
 Lcom/android/server/UiModeManagerService$2;
 Lcom/android/server/UiModeManagerService$3;
@@ -24712,6 +40353,7 @@
 Lcom/android/server/UiModeManagerService$8;
 Lcom/android/server/UiModeManagerService$9;
 Lcom/android/server/UiModeManagerService$LocalService;
+Lcom/android/server/UiModeManagerService$Shell;
 Lcom/android/server/UiModeManagerService$UserSwitchedReceiver;
 Lcom/android/server/UiModeManagerService;
 Lcom/android/server/UiThread;
@@ -24722,6 +40364,7 @@
 Lcom/android/server/VibratorService$3;
 Lcom/android/server/VibratorService$4;
 Lcom/android/server/VibratorService$5;
+Lcom/android/server/VibratorService$ExternalVibratorService$ExternalVibrationDeathRecipient;
 Lcom/android/server/VibratorService$ExternalVibratorService;
 Lcom/android/server/VibratorService$ScaleLevel;
 Lcom/android/server/VibratorService$SettingsObserver;
@@ -24730,12 +40373,14 @@
 Lcom/android/server/VibratorService$VibrationInfo;
 Lcom/android/server/VibratorService$VibratorShellCommand;
 Lcom/android/server/VibratorService;
+Lcom/android/server/Watchdog$1;
 Lcom/android/server/Watchdog$BinderThreadMonitor;
 Lcom/android/server/Watchdog$HandlerChecker;
 Lcom/android/server/Watchdog$Monitor;
 Lcom/android/server/Watchdog$OpenFdMonitor;
 Lcom/android/server/Watchdog$RebootRequestReceiver;
 Lcom/android/server/Watchdog;
+Lcom/android/server/WatchdogDiagnostics;
 Lcom/android/server/WiredAccessoryManager$1;
 Lcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;
 Lcom/android/server/WiredAccessoryManager$WiredAccessoryObserver$UEventInfo;
@@ -24743,16 +40388,47 @@
 Lcom/android/server/WiredAccessoryManager;
 Lcom/android/server/ZramWriteback$1;
 Lcom/android/server/ZramWriteback;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$1$49HMbWlhAK8DBFFzhu5wH_-EQaM;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$1$J4pGG-UiTxhxH1VLNWBa7KLTh48;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$4A2E7YnYuU3-mDj4eBvmxi8PEpA;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$4X8DTUSf9fNVgqvhoZcnlny0VlE;
 Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$5vwr6qV-eqdCr73CeDmVnsJlZHM;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$6XNVrFpXInVgMbrXSPlonG0skYM;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$BB160fzAC7iBy5jJ5MWjuD3DeD8;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$BX2CMQr5jU9WhPYx7Aaae4zgxf4;
 Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$Gu-W_dQ2mWyy8l4tm19TzFxGbeM;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$INvzqadejxj-XxBJAa177LZwIDQ;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$LBcFUTzQoOf533NwD2ZIwFqFJYg;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$NCeV24lEcO5W6ZZr1GqGK-ylU9g;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$PPQodQ1oFD7RLj5c4axXJBoCbR8;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$ZdgJH-YGWmUCqtsR2uYpejEExzw;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$bNCuysjTCG2afhYMHuqu25CfY5g;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$dXg1wGgz3WXjndENJncsiVH2imE;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$eskhivxnBVBZCLZ0d5oWdhYVtfs;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$fHb6jcCpfXvxrnf-dXJngiIFuoo;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$he8-7PL6YxfY9L7x0CLg6DATNxg;
 Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$heq1MRdQjg8BGWFbpV3PEpnDVcg;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$iCLwAtq-px2o256DhoyM-0_S-Uc;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$ifdWn5KwwehtrFVplnBr1oDsgh8;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$j2QeVWedl6n56ZCByHdIyOcYsHw;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$lq56M7RYVQWgwiIOT5tX2Qhveeg;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$luI_C3QiJWsM08i8m3lx484SyyY;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$mu7O1RAujG8e8HXPylcZ6hd_kNU;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$pRLk3Ywnu7AW5-78BwVI1fvOwX0;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$vOsKAMFlSRp8W9N5pJiqJ7ToRQA;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$zXJtauhUptSkQJSF-M55-grAVbo;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityManagerService$zwk7AhIUkEPGJ4AonEk70rQ3Bl4;
 Lcom/android/server/accessibility/-$$Lambda$AccessibilityServiceConnection$ASP9bmSvpeD7ZE_uJ8sm-9hCwiU;
+Lcom/android/server/accessibility/-$$Lambda$AccessibilityWindowManager$Ky3Q5Gg_NEaXwBlFb7wxyjIUci0;
 Lcom/android/server/accessibility/-$$Lambda$X8i00nfnUx_qUoIgZixkfu6ddSY;
 Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$1;
 Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$SystemSupport;
 Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;
+Lcom/android/server/accessibility/AccessibilityInputFilter;
 Lcom/android/server/accessibility/AccessibilityManagerService$1;
 Lcom/android/server/accessibility/AccessibilityManagerService$2;
+Lcom/android/server/accessibility/AccessibilityManagerService$3;
+Lcom/android/server/accessibility/AccessibilityManagerService$4;
 Lcom/android/server/accessibility/AccessibilityManagerService$AccessibilityContentObserver;
 Lcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;
 Lcom/android/server/accessibility/AccessibilityManagerService$Client;
@@ -24764,85 +40440,189 @@
 Lcom/android/server/accessibility/AccessibilitySecurityPolicy$AccessibilityUserManager;
 Lcom/android/server/accessibility/AccessibilitySecurityPolicy;
 Lcom/android/server/accessibility/AccessibilityServiceConnection;
+Lcom/android/server/accessibility/AccessibilityShellCommand;
 Lcom/android/server/accessibility/AccessibilityUserState$ServiceInfoChangeListener;
 Lcom/android/server/accessibility/AccessibilityUserState;
 Lcom/android/server/accessibility/AccessibilityWindowManager$AccessibilityEventSender;
+Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;
+Lcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;
 Lcom/android/server/accessibility/AccessibilityWindowManager;
+Lcom/android/server/accessibility/BaseEventStreamTransformation;
+Lcom/android/server/accessibility/EventStreamTransformation;
 Lcom/android/server/accessibility/FingerprintGestureDispatcher$FingerprintGestureClient;
+Lcom/android/server/accessibility/FingerprintGestureDispatcher;
 Lcom/android/server/accessibility/KeyEventDispatcher$KeyEventFilter;
+Lcom/android/server/accessibility/KeyEventDispatcher;
+Lcom/android/server/accessibility/MagnificationController;
+Lcom/android/server/accessibility/MotionEventInjector;
+Lcom/android/server/accessibility/SystemActionPerformer$SystemActionsChangedListener;
 Lcom/android/server/accessibility/SystemActionPerformer;
 Lcom/android/server/accessibility/UiAutomationManager$1;
+Lcom/android/server/accessibility/UiAutomationManager$UiAutomationService;
 Lcom/android/server/accessibility/UiAutomationManager;
+Lcom/android/server/accessibility/magnification/WindowMagnificationManager;
+Lcom/android/server/accounts/-$$Lambda$AccountManagerService$b-wmW_X7TIC2Bc_zEKaPtyELmHY;
 Lcom/android/server/accounts/-$$Lambda$AccountManagerService$c6GExIY3Vh2fORdBziuAPJbExac;
+Lcom/android/server/accounts/-$$Lambda$AccountManagerService$lqbNdAUKUSipmpqby9oIO8JlNTQ;
 Lcom/android/server/accounts/-$$Lambda$AccountManagerService$nCdu9dc3c8qBwJIwS0ZQk2waXfY;
 Lcom/android/server/accounts/-$$Lambda$AccountManagerService$ncg6hlXg7I0Ee1EZqbXw8fQH9bY;
+Lcom/android/server/accounts/AccountAuthenticatorCache$1;
 Lcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;
 Lcom/android/server/accounts/AccountAuthenticatorCache;
 Lcom/android/server/accounts/AccountManagerBackupHelper;
 Lcom/android/server/accounts/AccountManagerService$1$1;
+Lcom/android/server/accounts/AccountManagerService$10;
+Lcom/android/server/accounts/AccountManagerService$11;
+Lcom/android/server/accounts/AccountManagerService$12;
+Lcom/android/server/accounts/AccountManagerService$13;
+Lcom/android/server/accounts/AccountManagerService$14;
+Lcom/android/server/accounts/AccountManagerService$15;
+Lcom/android/server/accounts/AccountManagerService$16;
+Lcom/android/server/accounts/AccountManagerService$17;
 Lcom/android/server/accounts/AccountManagerService$18;
+Lcom/android/server/accounts/AccountManagerService$19;
 Lcom/android/server/accounts/AccountManagerService$1;
 Lcom/android/server/accounts/AccountManagerService$1LogRecordTask;
 Lcom/android/server/accounts/AccountManagerService$2;
 Lcom/android/server/accounts/AccountManagerService$3;
 Lcom/android/server/accounts/AccountManagerService$4;
+Lcom/android/server/accounts/AccountManagerService$5;
+Lcom/android/server/accounts/AccountManagerService$6;
+Lcom/android/server/accounts/AccountManagerService$7;
 Lcom/android/server/accounts/AccountManagerService$8;
+Lcom/android/server/accounts/AccountManagerService$9;
 Lcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;
 Lcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;
 Lcom/android/server/accounts/AccountManagerService$Injector;
 Lcom/android/server/accounts/AccountManagerService$Lifecycle;
 Lcom/android/server/accounts/AccountManagerService$MessageHandler;
+Lcom/android/server/accounts/AccountManagerService$NotificationId;
 Lcom/android/server/accounts/AccountManagerService$RemoveAccountSession;
 Lcom/android/server/accounts/AccountManagerService$Session;
+Lcom/android/server/accounts/AccountManagerService$StartAccountSession;
 Lcom/android/server/accounts/AccountManagerService$TestFeaturesSession;
 Lcom/android/server/accounts/AccountManagerService$UserAccounts;
 Lcom/android/server/accounts/AccountManagerService;
+Lcom/android/server/accounts/AccountManagerServiceShellCommand;
+Lcom/android/server/accounts/AccountsDb$1;
 Lcom/android/server/accounts/AccountsDb$CeDatabaseHelper;
 Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;
+Lcom/android/server/accounts/AccountsDb$PreNDatabaseHelper;
 Lcom/android/server/accounts/AccountsDb;
+Lcom/android/server/accounts/CryptoHelper;
 Lcom/android/server/accounts/IAccountAuthenticatorCache;
 Lcom/android/server/accounts/TokenCache$Key;
 Lcom/android/server/accounts/TokenCache$TokenLruCache$Evictor;
 Lcom/android/server/accounts/TokenCache$TokenLruCache;
+Lcom/android/server/accounts/TokenCache$Value;
 Lcom/android/server/accounts/TokenCache;
 Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler$1;
 Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;
 Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;
 Lcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;
 Lcom/android/server/adb/AdbDebuggingManager;
+Lcom/android/server/adb/AdbService$1;
 Lcom/android/server/adb/AdbService$AdbHandler;
 Lcom/android/server/adb/AdbService$AdbManagerInternalImpl;
 Lcom/android/server/adb/AdbService$AdbSettingsObserver;
 Lcom/android/server/adb/AdbService$Lifecycle;
 Lcom/android/server/adb/AdbService;
+Lcom/android/server/am/-$$Lambda$4tnGzleKvf7Rqiq5-S70R8ME1NY;
+Lcom/android/server/am/-$$Lambda$5hokEl5hcign5FXeGZdl53qh2zg;
+Lcom/android/server/am/-$$Lambda$7toxTvZDSEytL0rCkoEfGilPDWM;
+Lcom/android/server/am/-$$Lambda$8usf6utdff9V7wtRbjhmjrLif-w;
+Lcom/android/server/am/-$$Lambda$ActiveServices$0WENDXD5vmtSS6wlQjMNWJNWoHA;
+Lcom/android/server/am/-$$Lambda$ActivityManagerConstants$PMWuxGp7r583rXDgas6HMH5Lce8;
 Lcom/android/server/am/-$$Lambda$ActivityManagerService$2afaFERxNQEnSdevJxY5plp1fS4;
+Lcom/android/server/am/-$$Lambda$ActivityManagerService$5$BegFiGFfKLYS7VRmiWluczgOC5k;
+Lcom/android/server/am/-$$Lambda$ActivityManagerService$Fbs0C_KjUpE0imxFftpdBfeTJpg;
+Lcom/android/server/am/-$$Lambda$ActivityManagerService$LocalService$4G_pzvRw9NHuN5SCKHrZRQVBK5M;
+Lcom/android/server/am/-$$Lambda$ActivityManagerService$LocalService$4TwTxLxI0dJRfxaapqjRJ92DO9c;
 Lcom/android/server/am/-$$Lambda$ActivityManagerService$Z3G4KWA2tlTOhqhFtAvVby1SjyQ;
 Lcom/android/server/am/-$$Lambda$ActivityManagerService$dLQ66dH4nIti4hweaVJTGHj2tMU;
+Lcom/android/server/am/-$$Lambda$ActivityManagerService$eFxS8Z-_MXzP9a8ro45rBMHy3bk;
+Lcom/android/server/am/-$$Lambda$ActivityManagerService$edxAPEC3muKzJql6X4RKsKcgmvo;
+Lcom/android/server/am/-$$Lambda$ActivityManagerService$fS1-94oynjazWAe2OWfx5p-HXUQ;
+Lcom/android/server/am/-$$Lambda$ActivityManagerService$qLjSm9VDxOdlZwBZT-qc8uDXM_o;
+Lcom/android/server/am/-$$Lambda$ActivityManagerService$sgcouPmrltwdDp2DCHkd89xkLZ4;
 Lcom/android/server/am/-$$Lambda$ActivityManagerService$w5jCshLsk1jfv4UDTmEfq_HU0OQ;
+Lcom/android/server/am/-$$Lambda$AppErrors$1aFX_-j-MSc0clpKk9XdlBZz9lU;
+Lcom/android/server/am/-$$Lambda$AppErrors$Ziph9zXnTzhEV6frMYJe_IEvvfY;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$-wbGBZV07-3wEpce4OUXCzlzxWg;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$4HqbaQvHgSDp9GydRzwaw14dV_s;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$8RmxBGb9aEc0feL90j1NR9guFlc;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$AppExitInfoContainer$RLhS-SmRlSPkWGNtIw3PWkm5huk;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$AppExitInfoContainer$UGYjMlfjNQLNoNs9jB0lra88GDI;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$AppExitInfoContainer$UJh7jNVpjR6lqMYBGte4jdTlSE0;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$AppExitInfoExternalSource$lEw-U7omc69c99jUnvgjDvhihE8;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$DgW09rn1xYgswF2bIX-IptVkNqg;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$LrV5fgRdrB2bonNSZZAbUAXpryI;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$M7pmR3pU58DetrzQsI3M2-go5XU;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$S0H7kzxKRRmRG78Gu7uuZcjMtTs;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$UhdolDh03szrz0tHY4ggJ2c_9IQ;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$Yc6vluAEWPBi2TSflPrFu351ztU;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$c5_NOVUCRvAgISOc2oOk7DGF5Vc;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$e3RqpmVvDTV44W327x1Bbxd4Iqc;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$eDSFQ6mRzgNt-3VDBtVv4kawCFk;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$qwGPfYnVeHBuD9CPCUYvgLTIWQA;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$ykvdMbwZILd9oyb6cyIe3GfomwU;
+Lcom/android/server/am/-$$Lambda$AppExitInfoTracker$ytE2dVTxZ9YlyeVmm3AXBFxNqAw;
+Lcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$MJXTdtPzBwRCdTjCDCE77VXPHBk;
 Lcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$ML8sXrbYk0MflPvsY2cfCYlcU0w;
 Lcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$PpNEY15dspg9oLlkg1OsyjrPTqw;
 Lcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$ddVY5lmqswnSjXppAxPTOHbuzzQ;
 Lcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$r3x3xYmhrLG8kgeNVPXl5EILHwU;
+Lcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$xR3yCbbVfCo3oq_xPiH7j5l5uac;
 Lcom/android/server/am/-$$Lambda$BatteryStatsService$ZxbqtJ7ozYmzYFkkNV3m_QRd0Sk;
 Lcom/android/server/am/-$$Lambda$BatteryStatsService$rRONgIFHr4sujxPESRmo9P5RJ6w;
+Lcom/android/server/am/-$$Lambda$BroadcastQueue$-Rc4kAs41vmqWweLcJR0YLxZ0dM;
+Lcom/android/server/am/-$$Lambda$CoreSettingsObserver$IEGGdL9JzvkvDo5ePJ2OAMEVAVs;
+Lcom/android/server/am/-$$Lambda$F5A5p7evh-7maWNW7K80NbTRjbM;
 Lcom/android/server/am/-$$Lambda$HKoBBTwYfMTyX1rzuzxIXu0s2cc;
 Lcom/android/server/am/-$$Lambda$OomAdjProfiler$oLbVP84ACmxo_1QlnwlSuhi91W4;
 Lcom/android/server/am/-$$Lambda$OomAdjuster$OVkqAAacT5-taN3pgDzyZj3Ymvk;
 Lcom/android/server/am/-$$Lambda$PendingIntentController$pDmmJDvS20vSAAXh9qdzbN0P8N0;
+Lcom/android/server/am/-$$Lambda$PendingIntentController$sPmaborOkBSSEP2wiimxXw-eYDQ;
 Lcom/android/server/am/-$$Lambda$PendingIntentRecord$hlEHdgdG_SS5n3v7IRr7e6QZgLQ;
 Lcom/android/server/am/-$$Lambda$PersistentConnection$rkvbuN0FQdQUv1hqSwDvmwwh6Uk;
+Lcom/android/server/am/-$$Lambda$ProcessList$-WIJmGtIk6c8jVr9HT6EdC2Qnzg;
+Lcom/android/server/am/-$$Lambda$ProcessList$hjUwwFAIhoht4KRKnKeUve_Kcto;
 Lcom/android/server/am/-$$Lambda$ProcessList$vtq7LF5jIHO4t5NE03c8g7BT7Jc;
 Lcom/android/server/am/-$$Lambda$ProcessRecord$1qn6-pj5yWgiSnKANZpVz3gwd30;
 Lcom/android/server/am/-$$Lambda$ProcessRecord$2DImTokd0AWNTECl3WgBxJkOOqs;
 Lcom/android/server/am/-$$Lambda$ProcessRecord$Cb3MKja7_iTlaFQrvQTzPvLyoT8;
+Lcom/android/server/am/-$$Lambda$ProcessRecord$ErrorDialogController$Pxxn90rYyxqzAxLE-3U2iU5qX6M;
+Lcom/android/server/am/-$$Lambda$ProcessRecord$ErrorDialogController$W-AQD6Azm5daJOusD9r1R26WGBo;
+Lcom/android/server/am/-$$Lambda$ProcessRecord$ErrorDialogController$pOUTBc6k6s3-ZuZYLsjopLU9JWw;
+Lcom/android/server/am/-$$Lambda$ProcessRecord$ErrorDialogController$yEOzfx-KIitetidLDudmF3WIN9Y;
+Lcom/android/server/am/-$$Lambda$ServiceRecord$LibDrdWU9t_vgStZ6swd0FNzHXc;
 Lcom/android/server/am/-$$Lambda$SettingsToPropertiesMapper$oP9A7vTPRZcZgLdy43KKEveF4zQ;
+Lcom/android/server/am/-$$Lambda$UserController$2SW3yysxmLLBBPZQ1P-qHVFL46g;
+Lcom/android/server/am/-$$Lambda$UserController$5-I-mDc6HrA5Dg_nAZlw5yKDAA0;
+Lcom/android/server/am/-$$Lambda$UserController$G0WJmqt4X_QG30fRlvXobn18mrE;
+Lcom/android/server/am/-$$Lambda$UserController$I0p0bKjuvsSPLZB71mKQFfdUjZ4;
 Lcom/android/server/am/-$$Lambda$UserController$Injector$MYTLl7MOQKjyMJknWdxPeBLoPCc;
 Lcom/android/server/am/-$$Lambda$UserController$K71HFCIuD0iCwrDTKYnIUDyAeWg;
+Lcom/android/server/am/-$$Lambda$UserController$QAvDazb_bK3Biqbrt7rtbU_i_EQ;
+Lcom/android/server/am/-$$Lambda$UserController$TdNZVHdOPNd598N3S_XTdc7pt7o;
+Lcom/android/server/am/-$$Lambda$UserController$WUEqPFGA7TEsxb4dlgZAmMu5O-s;
+Lcom/android/server/am/-$$Lambda$UserController$avTAix2Aub5zSKSBBofMYY2qXyk;
+Lcom/android/server/am/-$$Lambda$UserController$f2F3ceAG58MOmBJm9cmZ7HhYcmE;
+Lcom/android/server/am/-$$Lambda$UserController$fU2mcMYCcCOsyUuGHKIUB-nSo1Y;
 Lcom/android/server/am/-$$Lambda$UserController$stQk1028ON105v_u-VMykVjcxLk;
 Lcom/android/server/am/-$$Lambda$Y_KRxxoOXfy-YceuDG7WHd46Y_I;
+Lcom/android/server/am/-$$Lambda$cC4f0pNQX9_D9f8AXLmKk2sArGY;
 Lcom/android/server/am/-$$Lambda$gATL8uvTPRd405IfefK1RL9bNqA;
+Lcom/android/server/am/-$$Lambda$nvO8eEA3_tju6oGhhJ2BoQfYghg;
+Lcom/android/server/am/-$$Lambda$uR36okKz1QISfNZZ4VonU8JRVDE;
+Lcom/android/server/am/-$$Lambda$wajKhQOjpilT0K4j-1sLOJKYftw;
 Lcom/android/server/am/-$$Lambda$yk1Ms9fVlF6PvprMwF2rru-dw4Q;
+Lcom/android/server/am/ActiveInstrumentation;
 Lcom/android/server/am/ActiveServices$1;
+Lcom/android/server/am/ActiveServices$2;
+Lcom/android/server/am/ActiveServices$3;
+Lcom/android/server/am/ActiveServices$4;
+Lcom/android/server/am/ActiveServices$ActiveForegroundApp;
 Lcom/android/server/am/ActiveServices$ForcedStandbyListener;
 Lcom/android/server/am/ActiveServices$ServiceDumper;
 Lcom/android/server/am/ActiveServices$ServiceLookupResult;
@@ -24852,25 +40632,41 @@
 Lcom/android/server/am/ActiveUids;
 Lcom/android/server/am/ActivityManagerConstants$1;
 Lcom/android/server/am/ActivityManagerConstants;
+Lcom/android/server/am/ActivityManagerService$10;
+Lcom/android/server/am/ActivityManagerService$11;
+Lcom/android/server/am/ActivityManagerService$12;
+Lcom/android/server/am/ActivityManagerService$13;
+Lcom/android/server/am/ActivityManagerService$14;
 Lcom/android/server/am/ActivityManagerService$15;
 Lcom/android/server/am/ActivityManagerService$16;
+Lcom/android/server/am/ActivityManagerService$17;
+Lcom/android/server/am/ActivityManagerService$18;
+Lcom/android/server/am/ActivityManagerService$19;
 Lcom/android/server/am/ActivityManagerService$1;
 Lcom/android/server/am/ActivityManagerService$20;
 Lcom/android/server/am/ActivityManagerService$21;
+Lcom/android/server/am/ActivityManagerService$22;
 Lcom/android/server/am/ActivityManagerService$23;
+Lcom/android/server/am/ActivityManagerService$24;
+Lcom/android/server/am/ActivityManagerService$25;
 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$7;
+Lcom/android/server/am/ActivityManagerService$8;
+Lcom/android/server/am/ActivityManagerService$9;
 Lcom/android/server/am/ActivityManagerService$AppDeathRecipient;
+Lcom/android/server/am/ActivityManagerService$Association;
 Lcom/android/server/am/ActivityManagerService$CpuBinder$1;
 Lcom/android/server/am/ActivityManagerService$CpuBinder;
 Lcom/android/server/am/ActivityManagerService$DbBinder;
 Lcom/android/server/am/ActivityManagerService$DevelopmentSettingsObserver;
 Lcom/android/server/am/ActivityManagerService$GraphicsBinder;
 Lcom/android/server/am/ActivityManagerService$HiddenApiSettings;
+Lcom/android/server/am/ActivityManagerService$Identity;
+Lcom/android/server/am/ActivityManagerService$ImportanceToken;
 Lcom/android/server/am/ActivityManagerService$Injector;
 Lcom/android/server/am/ActivityManagerService$IntentFirewallInterface;
 Lcom/android/server/am/ActivityManagerService$ItemMatcher;
@@ -24880,13 +40676,20 @@
 Lcom/android/server/am/ActivityManagerService$MainHandler;
 Lcom/android/server/am/ActivityManagerService$MemBinder$1;
 Lcom/android/server/am/ActivityManagerService$MemBinder;
+Lcom/android/server/am/ActivityManagerService$MemItem;
+Lcom/android/server/am/ActivityManagerService$MemoryUsageDumpOptions;
+Lcom/android/server/am/ActivityManagerService$OomAdjObserver;
 Lcom/android/server/am/ActivityManagerService$PackageAssociationInfo;
+Lcom/android/server/am/ActivityManagerService$PendingTempWhitelist;
 Lcom/android/server/am/ActivityManagerService$PermissionController;
 Lcom/android/server/am/ActivityManagerService$PidMap;
 Lcom/android/server/am/ActivityManagerService$ProcStatsRunnable;
 Lcom/android/server/am/ActivityManagerService$ProcessChangeItem;
 Lcom/android/server/am/ActivityManagerService$ProcessInfoService;
 Lcom/android/server/am/ActivityManagerService$ProfileData;
+Lcom/android/server/am/ActivityManagerService$RecordPssRunnable;
+Lcom/android/server/am/ActivityManagerService$ShellDelegate;
+Lcom/android/server/am/ActivityManagerService$StartActivityRunnable;
 Lcom/android/server/am/ActivityManagerService$UiHandler;
 Lcom/android/server/am/ActivityManagerService$UidObserverRegistration;
 Lcom/android/server/am/ActivityManagerService;
@@ -24896,12 +40699,28 @@
 Lcom/android/server/am/AppBindRecord;
 Lcom/android/server/am/AppCompactor$1;
 Lcom/android/server/am/AppCompactor$2;
+Lcom/android/server/am/AppCompactor$LastCompactionStats;
 Lcom/android/server/am/AppCompactor$MemCompactionHandler;
+Lcom/android/server/am/AppCompactor$PropertyChangedCallbackForTest;
 Lcom/android/server/am/AppCompactor;
 Lcom/android/server/am/AppErrorDialog$1;
+Lcom/android/server/am/AppErrorDialog$Data;
 Lcom/android/server/am/AppErrorDialog;
 Lcom/android/server/am/AppErrorResult;
+Lcom/android/server/am/AppErrors$BadProcessInfo;
 Lcom/android/server/am/AppErrors;
+Lcom/android/server/am/AppExitInfoTracker$1;
+Lcom/android/server/am/AppExitInfoTracker$2;
+Lcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;
+Lcom/android/server/am/AppExitInfoTracker$AppExitInfoExternalSource;
+Lcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;
+Lcom/android/server/am/AppExitInfoTracker$KillHandler;
+Lcom/android/server/am/AppExitInfoTracker$LmkdKillListener;
+Lcom/android/server/am/AppExitInfoTracker;
+Lcom/android/server/am/AppNotRespondingDialog$Data;
+Lcom/android/server/am/AppNotRespondingDialog;
+Lcom/android/server/am/AppTimeTracker;
+Lcom/android/server/am/AppWaitingForDebuggerDialog;
 Lcom/android/server/am/AssistDataRequester$AssistDataRequesterCallbacks;
 Lcom/android/server/am/AssistDataRequester;
 Lcom/android/server/am/BackupRecord;
@@ -24909,6 +40728,7 @@
 Lcom/android/server/am/BaseErrorDialog;
 Lcom/android/server/am/BatteryExternalStatsWorker$1;
 Lcom/android/server/am/BatteryExternalStatsWorker$2;
+Lcom/android/server/am/BatteryExternalStatsWorker$3;
 Lcom/android/server/am/BatteryExternalStatsWorker;
 Lcom/android/server/am/BatteryStatsService$1;
 Lcom/android/server/am/BatteryStatsService$LocalService;
@@ -24919,6 +40739,7 @@
 Lcom/android/server/am/BroadcastDispatcher$1;
 Lcom/android/server/am/BroadcastDispatcher$2;
 Lcom/android/server/am/BroadcastDispatcher$Deferrals;
+Lcom/android/server/am/BroadcastDispatcher$Dumper;
 Lcom/android/server/am/BroadcastDispatcher;
 Lcom/android/server/am/BroadcastFilter;
 Lcom/android/server/am/BroadcastQueue$1;
@@ -24931,23 +40752,39 @@
 Lcom/android/server/am/BroadcastStats$PackageEntry;
 Lcom/android/server/am/BroadcastStats$ViolationEntry;
 Lcom/android/server/am/BroadcastStats;
+Lcom/android/server/am/BugReportHandlerUtil;
+Lcom/android/server/am/CachedAppOptimizer$1;
+Lcom/android/server/am/CachedAppOptimizer$2;
+Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;
+Lcom/android/server/am/CachedAppOptimizer$LastCompactionStats;
+Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;
+Lcom/android/server/am/CachedAppOptimizer$PropertyChangedCallbackForTest;
+Lcom/android/server/am/CachedAppOptimizer;
+Lcom/android/server/am/CarUserSwitchingDialog;
 Lcom/android/server/am/ConnectionRecord;
 Lcom/android/server/am/ContentProviderConnection;
+Lcom/android/server/am/ContentProviderRecord$ExternalProcessHandle;
 Lcom/android/server/am/ContentProviderRecord;
+Lcom/android/server/am/CoreSettingsObserver$DeviceConfigEntry;
 Lcom/android/server/am/CoreSettingsObserver;
 Lcom/android/server/am/EventLogTags;
 Lcom/android/server/am/HealthStatsBatteryStatsWriter;
 Lcom/android/server/am/HostingRecord;
+Lcom/android/server/am/InstrumentationReporter$MyThread;
+Lcom/android/server/am/InstrumentationReporter$Report;
 Lcom/android/server/am/InstrumentationReporter;
 Lcom/android/server/am/IntentBindRecord;
 Lcom/android/server/am/LmkdConnection$1;
 Lcom/android/server/am/LmkdConnection$LmkdConnectionListener;
 Lcom/android/server/am/LmkdConnection;
+Lcom/android/server/am/LowMemDetector$1;
 Lcom/android/server/am/LowMemDetector$LowMemThread;
 Lcom/android/server/am/LowMemDetector;
+Lcom/android/server/am/MemoryStatUtil$MemoryStat;
 Lcom/android/server/am/MemoryStatUtil;
 Lcom/android/server/am/NativeCrashListener$NativeCrashReporter;
 Lcom/android/server/am/NativeCrashListener;
+Lcom/android/server/am/OomAdjProfiler$1;
 Lcom/android/server/am/OomAdjProfiler$CpuTimes;
 Lcom/android/server/am/OomAdjProfiler;
 Lcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;
@@ -24961,17 +40798,23 @@
 Lcom/android/server/am/PreBootBroadcaster$1;
 Lcom/android/server/am/PreBootBroadcaster;
 Lcom/android/server/am/ProcessList$1;
+Lcom/android/server/am/ProcessList$ImperceptibleKillRunner$H;
+Lcom/android/server/am/ProcessList$ImperceptibleKillRunner$IdlenessReceiver;
+Lcom/android/server/am/ProcessList$ImperceptibleKillRunner;
 Lcom/android/server/am/ProcessList$IsolatedUidRange;
 Lcom/android/server/am/ProcessList$IsolatedUidRangeAllocator;
 Lcom/android/server/am/ProcessList$KillHandler;
+Lcom/android/server/am/ProcessList$LmkdKillListener;
 Lcom/android/server/am/ProcessList$MyProcessMap;
 Lcom/android/server/am/ProcessList$ProcStateMemTracker;
 Lcom/android/server/am/ProcessList;
 Lcom/android/server/am/ProcessMemInfo;
+Lcom/android/server/am/ProcessRecord$ErrorDialogController;
 Lcom/android/server/am/ProcessRecord$PackageList;
 Lcom/android/server/am/ProcessRecord;
 Lcom/android/server/am/ProcessStatsService$1;
 Lcom/android/server/am/ProcessStatsService$2;
+Lcom/android/server/am/ProcessStatsService$3;
 Lcom/android/server/am/ProcessStatsService$4;
 Lcom/android/server/am/ProcessStatsService;
 Lcom/android/server/am/ProviderMap;
@@ -24983,20 +40826,32 @@
 Lcom/android/server/am/ServiceRecord;
 Lcom/android/server/am/SettingsToPropertiesMapper$1;
 Lcom/android/server/am/SettingsToPropertiesMapper;
+Lcom/android/server/am/StrictModeViolationDialog;
 Lcom/android/server/am/UidRecord$ChangeItem;
 Lcom/android/server/am/UidRecord;
+Lcom/android/server/am/UserController$1;
 Lcom/android/server/am/UserController$2;
+Lcom/android/server/am/UserController$3;
+Lcom/android/server/am/UserController$4;
+Lcom/android/server/am/UserController$5;
 Lcom/android/server/am/UserController$6;
+Lcom/android/server/am/UserController$7;
 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$KeyEvictedCallback;
 Lcom/android/server/am/UserState;
+Lcom/android/server/am/UserSwitchingDialog;
+Lcom/android/server/appbinding/-$$Lambda$AppBindingService$C9KbqX5cmsR3luJhFKt2Gpj0uLc;
 Lcom/android/server/appbinding/-$$Lambda$AppBindingService$D_3boeCn8eAANOp2ZDk6OC2rNaI;
+Lcom/android/server/appbinding/-$$Lambda$AppBindingService$_RrDLXlhUGfI3nzAdSavPUgy7uo;
+Lcom/android/server/appbinding/-$$Lambda$AppBindingService$ecbTIkvVpOcufbjzWWh2_dn3hSo;
 Lcom/android/server/appbinding/-$$Lambda$xkEFYM78dwFMyAjWJXkB7AxgA2c;
 Lcom/android/server/appbinding/AppBindingConstants;
 Lcom/android/server/appbinding/AppBindingService$1;
 Lcom/android/server/appbinding/AppBindingService$2;
+Lcom/android/server/appbinding/AppBindingService$AppServiceConnection;
 Lcom/android/server/appbinding/AppBindingService$Injector;
 Lcom/android/server/appbinding/AppBindingService$Lifecycle;
 Lcom/android/server/appbinding/AppBindingService;
@@ -25004,43 +40859,71 @@
 Lcom/android/server/appbinding/finders/-$$Lambda$CarrierMessagingClientServiceFinder$HEVyQ3IEZ8Eseze74Vyp3NHEREg;
 Lcom/android/server/appbinding/finders/AppServiceFinder;
 Lcom/android/server/appbinding/finders/CarrierMessagingClientServiceFinder;
+Lcom/android/server/appop/-$$Lambda$6fg-14Ev2L834_Mi1dl7XNuM-aI;
+Lcom/android/server/appop/-$$Lambda$9PbhNRcJKpFejdnfSDhPa_VHrMY;
+Lcom/android/server/appop/-$$Lambda$AppOpsService$6bQNsBhQYyNmBpWP1n_r2kLsLYY;
 Lcom/android/server/appop/-$$Lambda$AppOpsService$AfBLuTvVESlqN91IyRX84hMV5nE;
+Lcom/android/server/appop/-$$Lambda$AppOpsService$ClientRestrictionState$uMVYManZlOG3nljcsmHU5SaC48k;
 Lcom/android/server/appop/-$$Lambda$AppOpsService$FYLTtxqrHmv8Y5UdZ9ybXKsSJhs;
+Lcom/android/server/appop/-$$Lambda$AppOpsService$FeatureOp$MYCtEUxKOBmIqr2Vx8cxdcUBE8E;
 Lcom/android/server/appop/-$$Lambda$AppOpsService$GUeKjlbzT65s86vaxy5gvOajuhw;
+Lcom/android/server/appop/-$$Lambda$AppOpsService$JHjaGTUaQHugMX7TLydyaTrbPFw;
+Lcom/android/server/appop/-$$Lambda$AppOpsService$NDUi03ZZuuR42-RDEIQ0UELKycc;
 Lcom/android/server/appop/-$$Lambda$AppOpsService$ac4Ra3Yhj0OQzvkaL2dLbsuLAmQ;
 Lcom/android/server/appop/-$$Lambda$AppOpsService$gQy7GOuCV6GbjQtdNhNG6xld8I4;
+Lcom/android/server/appop/-$$Lambda$AppOpsService$mWtZBFm5Ggi69Tx6HVKXLYiPWt4;
+Lcom/android/server/appop/-$$Lambda$AppOpsService$mfUWTdGevxEoIUv1cEPEFG0qAaI;
+Lcom/android/server/appop/-$$Lambda$AppOpsService$vmE_L3936m2CQ4j7sCtdACCvHGk;
+Lcom/android/server/appop/-$$Lambda$AppOpsService$zN6prp9KCBI96qJ_QVmqGh-kpB8;
 Lcom/android/server/appop/-$$Lambda$HistoricalRegistry$dJrtb4M71TzV6sx9vPEImQG_akU;
+Lcom/android/server/appop/-$$Lambda$ztf_FWUCLkjfRoVMTTWb7ZsjhNk;
 Lcom/android/server/appop/AppOpsService$1$1;
 Lcom/android/server/appop/AppOpsService$1;
 Lcom/android/server/appop/AppOpsService$2;
 Lcom/android/server/appop/AppOpsService$3;
+Lcom/android/server/appop/AppOpsService$4;
+Lcom/android/server/appop/AppOpsService$5;
+Lcom/android/server/appop/AppOpsService$6;
 Lcom/android/server/appop/AppOpsService$ActiveCallback;
 Lcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;
+Lcom/android/server/appop/AppOpsService$ChangeRec;
 Lcom/android/server/appop/AppOpsService$ClientRestrictionState;
 Lcom/android/server/appop/AppOpsService$ClientState;
 Lcom/android/server/appop/AppOpsService$Constants;
 Lcom/android/server/appop/AppOpsService$FeatureOp;
+Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;
+Lcom/android/server/appop/AppOpsService$InProgressStartOpEventPool;
 Lcom/android/server/appop/AppOpsService$ModeCallback;
 Lcom/android/server/appop/AppOpsService$NotedCallback;
 Lcom/android/server/appop/AppOpsService$Op;
+Lcom/android/server/appop/AppOpsService$OpEventProxyInfoPool;
 Lcom/android/server/appop/AppOpsService$Ops;
+Lcom/android/server/appop/AppOpsService$Shell;
 Lcom/android/server/appop/AppOpsService$UidState;
 Lcom/android/server/appop/AppOpsService;
+Lcom/android/server/appop/AudioRestrictionManager$1;
 Lcom/android/server/appop/AudioRestrictionManager$Restriction;
 Lcom/android/server/appop/AudioRestrictionManager;
 Lcom/android/server/appop/HistoricalRegistry$1;
 Lcom/android/server/appop/HistoricalRegistry$Persistence;
+Lcom/android/server/appop/HistoricalRegistry$StringDumpVisitor;
 Lcom/android/server/appop/HistoricalRegistry;
+Lcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$3-HMCieo6-UZfG43p_6ip1hrL0k;
 Lcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$40EK4qcr-rG55ENTthOaXAXWDA4;
 Lcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$4yDhFef-19aMlJ-Y7O6RdjSAvnk;
 Lcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$NmwmTMZXXS4S7viVNKzU2genXA8;
+Lcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$gV-NT40YbIbIqIJKiNGjlZGVJjc;
+Lcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$s2vrDOHz5x1TW_6jMihxp1iCAvg;
 Lcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$vSY20eQq5y5FXrxhhqOTcEmezTs;
+Lcom/android/server/appprediction/-$$Lambda$AppPredictionManagerService$PredictionManagerServiceStub$vWB3PdxOOvPr7p0_NmoqXeH8Ros;
 Lcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$9DCowUTEF8fYuBlWGxOmP5hTAWA;
 Lcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$Ikwq62LQ8mos7hCBmykUhqvUq2Y;
 Lcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$UaZoW5Y9AD8L3ktnyw-25jtnxhA;
 Lcom/android/server/appprediction/-$$Lambda$RemoteAppPredictionService$qroIh2ewx0BLP-J9XIAX2CaX8J4;
+Lcom/android/server/appprediction/AppPredictionManagerService$1;
 Lcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;
 Lcom/android/server/appprediction/AppPredictionManagerService;
+Lcom/android/server/appprediction/AppPredictionManagerServiceShellCommand;
 Lcom/android/server/appprediction/AppPredictionPerUserService;
 Lcom/android/server/appprediction/RemoteAppPredictionService$RemoteAppPredictionServiceCallbacks;
 Lcom/android/server/appprediction/RemoteAppPredictionService;
@@ -25048,27 +40931,56 @@
 Lcom/android/server/appwidget/-$$Lambda$AppWidgetServiceImpl$TEG8Dmf_tnBoLQ8rTg9_1sFaVu8;
 Lcom/android/server/appwidget/AppWidgetService;
 Lcom/android/server/appwidget/AppWidgetServiceImpl$1;
+Lcom/android/server/appwidget/AppWidgetServiceImpl$2;
+Lcom/android/server/appwidget/AppWidgetServiceImpl$3;
 Lcom/android/server/appwidget/AppWidgetServiceImpl$AppWidgetManagerLocal;
+Lcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController$RestoreUpdateRecord;
 Lcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;
 Lcom/android/server/appwidget/AppWidgetServiceImpl$CallbackHandler;
 Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;
 Lcom/android/server/appwidget/AppWidgetServiceImpl$HostId;
+Lcom/android/server/appwidget/AppWidgetServiceImpl$LoadedWidgetState;
 Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;
 Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;
 Lcom/android/server/appwidget/AppWidgetServiceImpl$SaveStateRunnable;
 Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;
+Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;
 Lcom/android/server/appwidget/AppWidgetServiceImpl;
+Lcom/android/server/attention/-$$Lambda$AttentionManagerService$2UthIuCIdjigpPv1U5Dxw_fo4nY;
+Lcom/android/server/attention/AttentionManagerService$1;
+Lcom/android/server/attention/AttentionManagerService$AttentionCheck;
+Lcom/android/server/attention/AttentionManagerService$AttentionCheckCache;
+Lcom/android/server/attention/AttentionManagerService$AttentionCheckCacheBuffer;
 Lcom/android/server/attention/AttentionManagerService$AttentionHandler;
 Lcom/android/server/attention/AttentionManagerService$AttentionManagerServiceShellCommand$TestableAttentionCallbackInternal;
 Lcom/android/server/attention/AttentionManagerService$AttentionManagerServiceShellCommand;
 Lcom/android/server/attention/AttentionManagerService$BinderService;
 Lcom/android/server/attention/AttentionManagerService$LocalService;
 Lcom/android/server/attention/AttentionManagerService$ScreenStateReceiver;
+Lcom/android/server/attention/AttentionManagerService$UserState$AttentionServiceConnection;
+Lcom/android/server/attention/AttentionManagerService$UserState;
 Lcom/android/server/attention/AttentionManagerService;
+Lcom/android/server/audio/-$$Lambda$AudioDeviceInventory$2HRlO1Fuzgf97A2Y249yqOtNAlc;
+Lcom/android/server/audio/-$$Lambda$AudioDeviceInventory$7CtpUHI2aS8Sdar40vc2ScvU1zA;
+Lcom/android/server/audio/-$$Lambda$AudioDeviceInventory$7s2_dtMUrYgHtM2Mpc1sS0XgWCw;
+Lcom/android/server/audio/-$$Lambda$AudioDeviceInventory$A06w_GDNkrLVK3IhlqiuSJkZdos;
+Lcom/android/server/audio/-$$Lambda$AudioDeviceInventory$BF-h0pJdMg-xR5-FyHERBLWDjA0;
+Lcom/android/server/audio/-$$Lambda$AudioDeviceInventory$BMFj2tw2PdB9dFQB6gMjDjefzwg;
+Lcom/android/server/audio/-$$Lambda$AudioDeviceInventory$Jg62meZgoWI_a0zxOvpWdJWRPfI;
+Lcom/android/server/audio/-$$Lambda$AudioDeviceInventory$Kq15BolmuFXaWWabjDNQiScRxjo;
+Lcom/android/server/audio/-$$Lambda$AudioDeviceInventory$Nads7_S1eD53QDofbK9CuYO9Fok;
+Lcom/android/server/audio/-$$Lambda$AudioDeviceInventory$OBWGV1RNEso-eo8dzWjaFhEjC0A;
+Lcom/android/server/audio/-$$Lambda$AudioDeviceInventory$YxgcWZ4jspoxzltUgvW9l8k40io;
+Lcom/android/server/audio/-$$Lambda$AudioDeviceInventory$_CdHBhvBDErZWSm39GafCXJiOqQ;
 Lcom/android/server/audio/-$$Lambda$UV1wDVoVlbcxpr8zevj_aMFtUGw;
+Lcom/android/server/audio/AudioDeviceBroker$1;
 Lcom/android/server/audio/AudioDeviceBroker$BrokerHandler;
 Lcom/android/server/audio/AudioDeviceBroker$BrokerThread;
+Lcom/android/server/audio/AudioDeviceBroker$BtDeviceConnectionInfo;
+Lcom/android/server/audio/AudioDeviceBroker$HearingAidDeviceConnectionInfo;
 Lcom/android/server/audio/AudioDeviceBroker;
+Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;
+Lcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;
 Lcom/android/server/audio/AudioDeviceInventory;
 Lcom/android/server/audio/AudioEventLogger$Event;
 Lcom/android/server/audio/AudioEventLogger$StringEvent;
@@ -25076,13 +40988,16 @@
 Lcom/android/server/audio/AudioService$1;
 Lcom/android/server/audio/AudioService$2;
 Lcom/android/server/audio/AudioService$3;
+Lcom/android/server/audio/AudioService$4;
 Lcom/android/server/audio/AudioService$5;
+Lcom/android/server/audio/AudioService$AsdProxy;
 Lcom/android/server/audio/AudioService$AudioHandler;
 Lcom/android/server/audio/AudioService$AudioPolicyProxy;
 Lcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;
 Lcom/android/server/audio/AudioService$AudioServiceInternal;
 Lcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;
 Lcom/android/server/audio/AudioService$AudioSystemThread;
+Lcom/android/server/audio/AudioService$DeviceVolumeUpdate;
 Lcom/android/server/audio/AudioService$ForceControlStreamClient;
 Lcom/android/server/audio/AudioService$Lifecycle;
 Lcom/android/server/audio/AudioService$LoadSoundEffectReply;
@@ -25091,20 +41006,26 @@
 Lcom/android/server/audio/AudioService$RoleObserver;
 Lcom/android/server/audio/AudioService$SetModeDeathHandler;
 Lcom/android/server/audio/AudioService$SettingsObserver;
+Lcom/android/server/audio/AudioService$StreamVolumeCommand;
 Lcom/android/server/audio/AudioService$VolumeController;
 Lcom/android/server/audio/AudioService$VolumeStreamState;
 Lcom/android/server/audio/AudioService;
 Lcom/android/server/audio/AudioServiceEvents$ForceUseEvent;
 Lcom/android/server/audio/AudioServiceEvents$PhoneStateEvent;
 Lcom/android/server/audio/AudioServiceEvents$VolumeEvent;
+Lcom/android/server/audio/AudioServiceEvents$WiredDevConnectEvent;
+Lcom/android/server/audio/AudioSystemAdapter$AudioSystemOkAdapter;
+Lcom/android/server/audio/AudioSystemAdapter;
 Lcom/android/server/audio/BtHelper$1;
 Lcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;
 Lcom/android/server/audio/BtHelper$ScoClient;
 Lcom/android/server/audio/BtHelper;
 Lcom/android/server/audio/FocusRequester;
+Lcom/android/server/audio/MediaFocusControl$1;
 Lcom/android/server/audio/MediaFocusControl$2;
 Lcom/android/server/audio/MediaFocusControl$AudioFocusDeathHandler;
 Lcom/android/server/audio/MediaFocusControl;
+Lcom/android/server/audio/PlaybackActivityMonitor$1;
 Lcom/android/server/audio/PlaybackActivityMonitor$AudioAttrEvent;
 Lcom/android/server/audio/PlaybackActivityMonitor$DuckEvent;
 Lcom/android/server/audio/PlaybackActivityMonitor$DuckingManager$DuckedApp;
@@ -25117,10 +41038,15 @@
 Lcom/android/server/audio/PlayerFocusEnforcer;
 Lcom/android/server/audio/RecordingActivityMonitor$RecMonitorClient;
 Lcom/android/server/audio/RecordingActivityMonitor$RecorderDeathHandler;
+Lcom/android/server/audio/RecordingActivityMonitor$RecordingEvent;
+Lcom/android/server/audio/RecordingActivityMonitor$RecordingState;
 Lcom/android/server/audio/RecordingActivityMonitor;
 Lcom/android/server/audio/RotationHelper$AudioDisplayListener;
 Lcom/android/server/audio/RotationHelper;
 Lcom/android/server/audio/SoundEffectsHelper$1;
+Lcom/android/server/audio/SoundEffectsHelper$2;
+Lcom/android/server/audio/SoundEffectsHelper$3;
+Lcom/android/server/audio/SoundEffectsHelper$4;
 Lcom/android/server/audio/SoundEffectsHelper$OnEffectsLoadCompleteHandler;
 Lcom/android/server/audio/SoundEffectsHelper$Resource;
 Lcom/android/server/audio/SoundEffectsHelper$SfxHandler$1;
@@ -25131,39 +41057,72 @@
 Lcom/android/server/autofill/-$$Lambda$AutofillManagerService$1$1-WNu3tTkxodB_LsZ7dGIlvrPN0;
 Lcom/android/server/autofill/-$$Lambda$AutofillManagerService$6afarI-dhLaYDLGebVyDMPu2nok;
 Lcom/android/server/autofill/-$$Lambda$AutofillManagerService$AjdnAnVaegTp2pojE30m5yjqZx8;
+Lcom/android/server/autofill/-$$Lambda$AutofillManagerService$J4rMQC_cWRd6Td3UdzyhcfhT9xc;
+Lcom/android/server/autofill/-$$Lambda$AutofillManagerService$PR6iUwKxXatnzjgBDLARdxaGV3A;
+Lcom/android/server/autofill/-$$Lambda$AutofillManagerService$froT1eG0jUnRoVv7cbUMLtO1bho;
 Lcom/android/server/autofill/-$$Lambda$FieldClassificationStrategy$NQQgQ63vxhPkiwOWrnwRyuYSHTM;
+Lcom/android/server/autofill/-$$Lambda$FieldClassificationStrategy$cXTbqmCb6-V5mVc5dTOipqK5X_E;
 Lcom/android/server/autofill/-$$Lambda$FieldClassificationStrategy$vGIL1YGX_9ksoSV74T7gO4fkEBE;
+Lcom/android/server/autofill/-$$Lambda$Helper$laLKWmsGqkFIaRXW5rR6_s66Vsw;
 Lcom/android/server/autofill/-$$Lambda$Helper$nK3g_oXXf8NGajcUf0W5JsQzf3w;
+Lcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$06SvcwAr_tZDEPuK1BK6VWFA4mE;
+Lcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$W6vVk8kBkoWieb1Jw-BucQNBDsM;
+Lcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$qEoykSLvIU1PeokaPDuPOb0M5U0;
+Lcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$v9CqZP_PIroMsV929WlHTKMHOHM;
+Lcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$yudIvtYKB9W2eb_t3RT2S1y3KiI;
+Lcom/android/server/autofill/-$$Lambda$RemoteAugmentedAutofillService$zt04rV6kTquQwdDYqT9tjLbRn14;
+Lcom/android/server/autofill/-$$Lambda$RemoteInlineSuggestionRenderService$qkXs53uHunrqzogLSpFo1NOYNnw;
 Lcom/android/server/autofill/-$$Lambda$Session$eVloK5PeyeuPZn1G52SC-fXIsjk;
 Lcom/android/server/autofill/-$$Lambda$Session$xw4trZ-LA7gCvZvpKJ93vf377ak;
 Lcom/android/server/autofill/-$$Lambda$knR7oLyPSG_CoFAxBA_nqSw3JBo;
+Lcom/android/server/autofill/-$$Lambda$sdnPz1IsKKVKSEXwI7z4h2-SxiM;
 Lcom/android/server/autofill/AutofillManagerService$1;
 Lcom/android/server/autofill/AutofillManagerService$AugmentedAutofillState;
 Lcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;
 Lcom/android/server/autofill/AutofillManagerService$AutofillCompatState;
 Lcom/android/server/autofill/AutofillManagerService$LocalService;
+Lcom/android/server/autofill/AutofillManagerService$PackageCompatState;
 Lcom/android/server/autofill/AutofillManagerService;
 Lcom/android/server/autofill/AutofillManagerServiceImpl$1;
+Lcom/android/server/autofill/AutofillManagerServiceImpl$InlineSuggestionRenderCallbacksImpl;
 Lcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask;
 Lcom/android/server/autofill/AutofillManagerServiceImpl;
+Lcom/android/server/autofill/AutofillManagerServiceShellCommand;
+Lcom/android/server/autofill/FieldClassificationStrategy$1;
+Lcom/android/server/autofill/FieldClassificationStrategy$Command;
 Lcom/android/server/autofill/FieldClassificationStrategy$MetadataParser;
 Lcom/android/server/autofill/FieldClassificationStrategy;
 Lcom/android/server/autofill/Helper$ViewNodeFilter;
 Lcom/android/server/autofill/Helper;
+Lcom/android/server/autofill/InlineSuggestionFactory$InlineSuggestionUiCallback;
+Lcom/android/server/autofill/InlineSuggestionFactory;
+Lcom/android/server/autofill/RemoteAugmentedAutofillService$1;
 Lcom/android/server/autofill/RemoteAugmentedAutofillService$RemoteAugmentedAutofillServiceCallbacks;
 Lcom/android/server/autofill/RemoteAugmentedAutofillService;
 Lcom/android/server/autofill/RemoteFillService$FillServiceCallbacks;
 Lcom/android/server/autofill/RemoteFillService;
+Lcom/android/server/autofill/RemoteInlineSuggestionRenderService$InlineSuggestionRenderCallbacks;
+Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;
 Lcom/android/server/autofill/Session$1;
 Lcom/android/server/autofill/Session;
 Lcom/android/server/autofill/ViewState$Listener;
 Lcom/android/server/autofill/ViewState;
 Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$56AC3ykfo4h_e2LSjdkJ3XQn370;
+Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$DTy4Jc0XMA0Y3HhlZbnbed3GpWs;
+Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$GsOszOMmizdASbReEM1r3Cvrp58;
 Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$H0BWucCEHDp2_3FUpZ9-CLDtxYQ;
+Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$HTgNHXKclzwJgKbCz3IEvPsgvvQ;
+Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$L0vbjVRCF8SgWZO8ukcjgJYQgsI;
 Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$LjywPhTUqjU0ZUlG1crxBg8qhRA;
+Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$N1Kl8ql4a5Um06QDzh6Q59ZwYO4;
+Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$R46Kz1SlDpiZBOYi-1HNH5FBjnU;
+Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$S44U_U0PT4w7o-A7hRXjwt9pKXg;
+Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$S8lqjy9BKKn2SSfu43iaVPGD6rg;
 Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$VF2EbGE70QNyGDbklN9Uz5xHqyQ;
 Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$XWhvh2-Jd9NLMoEos-e8RkZdQaI;
+Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$YlDsCvtP9vYV1RgccupdfUdv-PI;
 Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$Z-Di7CGd-L0nOI4i7_RO1FYbhgU;
+Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$_6s4RnleY3q9wMVHqQks_jl2KOA;
 Lcom/android/server/autofill/ui/-$$Lambda$AutoFillUI$i7qTc5vqiej5Psbl-bIkD7js-Ao;
 Lcom/android/server/autofill/ui/-$$Lambda$E4J-3bUcyqJNd4ZlExSBhwy8Tx4;
 Lcom/android/server/autofill/ui/-$$Lambda$FillUi$AutofillWindowPresenter$N4xQe2B0oe5MBiqZlsy3Lb7vZTg;
@@ -25172,6 +41131,7 @@
 Lcom/android/server/autofill/ui/-$$Lambda$FillUi$QXIyKJs3cMApGd5ifauQkxdpdqk;
 Lcom/android/server/autofill/ui/-$$Lambda$FillUi$TUHYXtyYjvn8kBKxh1vyXjC9x84;
 Lcom/android/server/autofill/ui/AutoFillUI$1;
+Lcom/android/server/autofill/ui/AutoFillUI$2;
 Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;
 Lcom/android/server/autofill/ui/AutoFillUI;
 Lcom/android/server/autofill/ui/FillUi$AnchoredWindow;
@@ -25181,8 +41141,15 @@
 Lcom/android/server/autofill/ui/FillUi$ItemsAdapter;
 Lcom/android/server/autofill/ui/FillUi$ViewItem;
 Lcom/android/server/autofill/ui/FillUi;
+Lcom/android/server/autofill/ui/InlineSuggestionUi;
 Lcom/android/server/autofill/ui/OverlayControl;
+Lcom/android/server/autofill/ui/PendingUi;
+Lcom/android/server/autofill/ui/SaveUi$OnSaveListener;
+Lcom/android/server/autofill/ui/SaveUi;
 Lcom/android/server/backup/-$$Lambda$-xfpm33S8Jqv3KpU_-llxhj8ZPI;
+Lcom/android/server/backup/-$$Lambda$BackupManagerService$1$wNR2kL0jG0FP7rVncyt3YJRw1RI;
+Lcom/android/server/backup/-$$Lambda$BackupManagerService$6P4GQiH-FZ5t_w1XVcGR55OdSL4;
+Lcom/android/server/backup/-$$Lambda$BackupManagerService$PzvNLQ5gp1PWnFQ6Pxc6Lw6ubKU;
 Lcom/android/server/backup/-$$Lambda$TransportManager$4ND1hZMerK5gHU67okq6DZjKDQw;
 Lcom/android/server/backup/-$$Lambda$TransportManager$Qbutmzd17ICwZdy0UzRrO-3_VK0;
 Lcom/android/server/backup/-$$Lambda$TransportManager$Z9ckpFUW2V4jkdHnyXIEiLuAoBc;
@@ -25211,6 +41178,7 @@
 Lcom/android/server/backup/ProcessedPackagesJournal;
 Lcom/android/server/backup/TransportManager;
 Lcom/android/server/backup/UserBackupManagerFilePersistedSettings;
+Lcom/android/server/backup/UserBackupManagerFiles;
 Lcom/android/server/backup/UserBackupManagerService$1;
 Lcom/android/server/backup/UserBackupManagerService$2;
 Lcom/android/server/backup/UserBackupManagerService$4;
@@ -25261,8 +41229,18 @@
 Lcom/android/server/backup/utils/FileUtils;
 Lcom/android/server/backup/utils/FullBackupUtils;
 Lcom/android/server/backup/utils/RandomAccessFileUtils;
+Lcom/android/server/biometrics/-$$Lambda$BiometricService$IIHhqSKogJZG56VmePRbTOf_5qo;
+Lcom/android/server/biometrics/-$$Lambda$BiometricService$PWa3w6AT62ogdb7_LTOZ5QOYAk4;
 Lcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$5zE_f-JKSpUWsfwvdtw36YktZZ0;
+Lcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$8-hCNL3jMZVMKItY0KyN7TBk6u8;
+Lcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$B1PDNz5plOtQUbeZgXMkI_dh_yQ;
+Lcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$VFT8WmkESkAnonaxJDq_GS_vB4E;
+Lcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$Zy4OXo3HMpNNxU1x5VMDe_5Q3vI;
+Lcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$iRNlDOJhMpMFOTQxuHjuZ0z5dlY;
 Lcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$lM-Gght_XjLuQG2iY0xHchO8Xgk;
+Lcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$rf3hjPI_nf4EvVsQV7gFCF1-HpI;
+Lcom/android/server/biometrics/-$$Lambda$BiometricServiceBase$yj0NG4umGnnyUerNM_EKxeka05A;
+Lcom/android/server/biometrics/AuthService$1;
 Lcom/android/server/biometrics/AuthService$AuthServiceImpl;
 Lcom/android/server/biometrics/AuthService$Injector;
 Lcom/android/server/biometrics/AuthService;
@@ -25283,13 +41261,17 @@
 Lcom/android/server/biometrics/BiometricServiceBase$BiometricServiceListener;
 Lcom/android/server/biometrics/BiometricServiceBase$BiometricTaskStackListener;
 Lcom/android/server/biometrics/BiometricServiceBase$DaemonWrapper;
+Lcom/android/server/biometrics/BiometricServiceBase$EnrollClientImpl;
 Lcom/android/server/biometrics/BiometricServiceBase$H;
 Lcom/android/server/biometrics/BiometricServiceBase$InternalEnumerateClient;
+Lcom/android/server/biometrics/BiometricServiceBase$InternalRemovalClient;
 Lcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor$1;
 Lcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor$2;
 Lcom/android/server/biometrics/BiometricServiceBase$LockoutResetMonitor;
+Lcom/android/server/biometrics/BiometricServiceBase$PerformanceStats;
 Lcom/android/server/biometrics/BiometricServiceBase$ResetClientStateRunnable;
 Lcom/android/server/biometrics/BiometricServiceBase$ServiceListener;
+Lcom/android/server/biometrics/BiometricServiceBase$UserTemplate;
 Lcom/android/server/biometrics/BiometricServiceBase;
 Lcom/android/server/biometrics/BiometricStrengthController;
 Lcom/android/server/biometrics/BiometricUserState$1;
@@ -25297,77 +41279,153 @@
 Lcom/android/server/biometrics/BiometricUtils;
 Lcom/android/server/biometrics/ClientMonitor;
 Lcom/android/server/biometrics/Constants;
+Lcom/android/server/biometrics/EnrollClient;
 Lcom/android/server/biometrics/EnumerateClient;
 Lcom/android/server/biometrics/LoggableMonitor;
+Lcom/android/server/biometrics/RemovalClient;
 Lcom/android/server/biometrics/SensorConfig;
+Lcom/android/server/biometrics/Utils;
+Lcom/android/server/biometrics/face/-$$Lambda$FaceService$1$7DzDQwoPfgYi40WuB8Xi0hA3qVQ;
+Lcom/android/server/biometrics/face/-$$Lambda$FaceService$1$81olYJI06zsG8LvXV_gD76jaNyg;
+Lcom/android/server/biometrics/face/-$$Lambda$FaceService$1$Dg7kqAVO92T8FbodjRCfn9vSkto;
+Lcom/android/server/biometrics/face/-$$Lambda$FaceService$1$GcU4ZG1fdDLhKvSxuMwfPargEnI;
 Lcom/android/server/biometrics/face/-$$Lambda$FaceService$1$OiHHyHFXrIcrZYUfSsf-E2as1qE;
+Lcom/android/server/biometrics/face/-$$Lambda$FaceService$1$jaJb2y4UkoXOtV5wJimfIPNA_PM;
+Lcom/android/server/biometrics/face/-$$Lambda$FaceService$1$s3kBxUsmTmDZC9YLbT5yPR3KOWo;
 Lcom/android/server/biometrics/face/-$$Lambda$FaceService$A0dfsVDvPu3BDJsON7widXUriSs;
+Lcom/android/server/biometrics/face/-$$Lambda$FaceService$FaceServiceWrapper$1ZJGnsaJl1du-I_XjU-JKzIy49Q;
+Lcom/android/server/biometrics/face/-$$Lambda$FaceService$FaceServiceWrapper$6Efp5LtXdV1OgyOr4AaGf19hmLs;
+Lcom/android/server/biometrics/face/-$$Lambda$FaceService$FaceServiceWrapper$kw0BBGgTrFveHiSJWRbNG8sygqA;
+Lcom/android/server/biometrics/face/-$$Lambda$FaceService$FaceServiceWrapper$oUY0TN9T4s4roMpe33Oc2nS7uzI;
 Lcom/android/server/biometrics/face/-$$Lambda$FaceService$rveb67MoYJ0egfY6LL-l05KvUz8;
 Lcom/android/server/biometrics/face/FaceAuthenticator;
 Lcom/android/server/biometrics/face/FaceConstants;
 Lcom/android/server/biometrics/face/FaceService$1;
 Lcom/android/server/biometrics/face/FaceService$2;
+Lcom/android/server/biometrics/face/FaceService$AuthenticationEvent;
+Lcom/android/server/biometrics/face/FaceService$BiometricPromptServiceListenerImpl;
+Lcom/android/server/biometrics/face/FaceService$FaceAuthClient;
+Lcom/android/server/biometrics/face/FaceService$FaceServiceWrapper$1;
+Lcom/android/server/biometrics/face/FaceService$FaceServiceWrapper$2;
+Lcom/android/server/biometrics/face/FaceService$FaceServiceWrapper$3;
+Lcom/android/server/biometrics/face/FaceService$FaceServiceWrapper$4;
 Lcom/android/server/biometrics/face/FaceService$FaceServiceWrapper;
+Lcom/android/server/biometrics/face/FaceService$ServiceListenerImpl;
 Lcom/android/server/biometrics/face/FaceService$UsageStats;
 Lcom/android/server/biometrics/face/FaceService;
 Lcom/android/server/biometrics/face/FaceUserState;
 Lcom/android/server/biometrics/face/FaceUtils;
 Lcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$3I9ge5BoesXZUovbayCOCR754fc;
+Lcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$7-RPI0PwwgOAZtsXq2j72pQWwMc;
 Lcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$7nMWCt41OE3k8ihjPNPqB0O8POU;
+Lcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$BJntfNoFTejPmUJ_45WFIwis8Nw;
 Lcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$N1Y2Zwqq-x5yDKQsDTj2KQ5q7g4;
 Lcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$1$cO88ecWuvWIBecLAEccxr5yeJK4;
 Lcom/android/server/biometrics/fingerprint/-$$Lambda$FingerprintService$YOMIOLvco2SvXVeJIulOSVKdX7A;
+Lcom/android/server/biometrics/fingerprint/FingerprintAuthenticator;
+Lcom/android/server/biometrics/fingerprint/FingerprintConstants;
 Lcom/android/server/biometrics/fingerprint/FingerprintService$1;
 Lcom/android/server/biometrics/fingerprint/FingerprintService$2;
 Lcom/android/server/biometrics/fingerprint/FingerprintService$BiometricPromptServiceListenerImpl;
 Lcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintAuthClient;
+Lcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper$1;
+Lcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper$2;
+Lcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper$3;
+Lcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper$4;
 Lcom/android/server/biometrics/fingerprint/FingerprintService$FingerprintServiceWrapper;
+Lcom/android/server/biometrics/fingerprint/FingerprintService$LockoutReceiver;
 Lcom/android/server/biometrics/fingerprint/FingerprintService$ResetFailedAttemptsForUserRunnable;
 Lcom/android/server/biometrics/fingerprint/FingerprintService$ServiceListenerImpl;
 Lcom/android/server/biometrics/fingerprint/FingerprintService;
 Lcom/android/server/biometrics/fingerprint/FingerprintUserState;
 Lcom/android/server/biometrics/fingerprint/FingerprintUtils;
+Lcom/android/server/biometrics/iris/IrisAuthenticator;
+Lcom/android/server/biometrics/iris/IrisService;
+Lcom/android/server/broadcastradio/BroadcastRadioService;
+Lcom/android/server/broadcastradio/hal1/-$$Lambda$-XcW_oxw3YwSco8d8bZQoqwUTnM;
+Lcom/android/server/broadcastradio/hal1/-$$Lambda$TunerCallback$-h4udaDmWtN-rprVGi_U0x7oSJc;
+Lcom/android/server/broadcastradio/hal1/-$$Lambda$TunerCallback$C_-9BcvTpHXxQ-jC-hu9LBHT0XU;
+Lcom/android/server/broadcastradio/hal1/-$$Lambda$TunerCallback$QNBMPvImBEGMe4jaw6iOF4QPjns;
+Lcom/android/server/broadcastradio/hal1/-$$Lambda$TunerCallback$QwopTG5nMx1CO2s6KecqSuCqviA;
+Lcom/android/server/broadcastradio/hal1/-$$Lambda$TunerCallback$YlDkqdeYbHPdKcgZh23aJ5Yw8mg;
+Lcom/android/server/broadcastradio/hal1/-$$Lambda$TunerCallback$mdqODkiuJlYCJRXqdXBC-d6vdp4;
+Lcom/android/server/broadcastradio/hal1/-$$Lambda$TunerCallback$ndOBpfBmClsz77tzZfe3mvcA1lI;
+Lcom/android/server/broadcastradio/hal1/-$$Lambda$TunerCallback$nm8WiKzJMmmFFCbXZdjr71O3V8Q;
+Lcom/android/server/broadcastradio/hal1/-$$Lambda$TunerCallback$qR-bdRNnpcaEQYaUWeumt5lHhtY;
+Lcom/android/server/broadcastradio/hal1/-$$Lambda$TunerCallback$yDfY5pWuRHaQpNiYhPjLkNUUrc0;
+Lcom/android/server/broadcastradio/hal1/-$$Lambda$TunerCallback$yVJR7oPW6kDozlkthdDAOaT7L-4;
 Lcom/android/server/broadcastradio/hal1/BroadcastRadioService;
 Lcom/android/server/broadcastradio/hal1/Convert;
 Lcom/android/server/broadcastradio/hal1/Tuner;
+Lcom/android/server/broadcastradio/hal1/TunerCallback$RunnableThrowingRemoteException;
 Lcom/android/server/broadcastradio/hal1/TunerCallback;
 Lcom/android/server/camera/CameraServiceProxy$1;
 Lcom/android/server/camera/CameraServiceProxy$2;
 Lcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;
+Lcom/android/server/camera/CameraServiceProxy$EventWriterTask;
 Lcom/android/server/camera/CameraServiceProxy;
 Lcom/android/server/camera/CameraStatsJobService;
+Lcom/android/server/clipboard/ClipboardService$1;
 Lcom/android/server/clipboard/ClipboardService$ClipboardImpl;
+Lcom/android/server/clipboard/ClipboardService$ListenerInfo;
+Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;
 Lcom/android/server/clipboard/ClipboardService;
+Lcom/android/server/clipboard/HostClipboardMonitor$HostClipboardCallback;
+Lcom/android/server/clipboard/HostClipboardMonitor;
 Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$0VKz9ecFqvfFXzRrfaz-Pf5wW2s;
 Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$1$EelUlD0Ldboon98oq6H5kDCPW9I;
 Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$1$IwZz9SPheLuA45R-qkZX_v1sHV4;
+Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$2$-LNsQ_6iDwt_SHib_WgAf70VWCI;
+Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$2$dm_CTD4HzQO9qRu6lX0jCG6NMCM;
+Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$2wb0ihDuJR-XM-iMwM4so23756E;
+Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$NreYX1A7ahBgly9jo0iR-2otX-Q;
 Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$bdv3Vfadbb8b9nrSgkARO4oYOXU;
+Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$m9NLTVY7N8yX_cTeQGMddCEpCU0;
+Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$oYSpdTmzLHvD4Kqu1cDfzfZuvwo;
+Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$CompanionDeviceManagerImpl$yIqg4YLiQouxnVJakZERWIZnPYU;
+Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$IkTCYCPSwHv3PPP8etpa0xLh9Is;
+Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$_wqnNKMj0AXNyFu-i6lXk6tA3xs;
 Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$bh5xRJq9-CRJoXvmerYRNjK1xEQ;
+Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$d_RLJQyt7Hah5vpYlYLeoWXxACU;
+Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$pG_kG2extKjHVEAFcCd4MLP2mkk;
+Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$wG7upTzVFwCMCLI1zfTZW4dftak;
 Lcom/android/server/companion/-$$Lambda$CompanionDeviceManagerService$wnUkAY8uXyjMGM59-bNpzLLMJ1I;
+Lcom/android/server/companion/-$$Lambda$dmgYbfK3c1MAswkxujxbcRtjs9A;
 Lcom/android/server/companion/CompanionDeviceManagerService$1;
+Lcom/android/server/companion/CompanionDeviceManagerService$2;
 Lcom/android/server/companion/CompanionDeviceManagerService$Association;
 Lcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;
+Lcom/android/server/companion/CompanionDeviceManagerService$ShellCmd;
 Lcom/android/server/companion/CompanionDeviceManagerService;
 Lcom/android/server/compat/CompatChange$ChangeListener;
 Lcom/android/server/compat/CompatChange;
 Lcom/android/server/compat/CompatConfig;
+Lcom/android/server/compat/OverrideValidatorImpl;
 Lcom/android/server/compat/PlatformCompat;
 Lcom/android/server/compat/PlatformCompatNative;
 Lcom/android/server/compat/config/Change;
 Lcom/android/server/compat/config/Config;
 Lcom/android/server/compat/config/XmlParser;
 Lcom/android/server/connectivity/-$$Lambda$DnsManager$PrivateDnsValidationStatuses$_X4_M08nKysv-L4hDpqAsa4SBxI;
+Lcom/android/server/connectivity/-$$Lambda$DnsManager$Z_oEyRSp0wthIcVTcqKDoAJRe6Q;
 Lcom/android/server/connectivity/-$$Lambda$IpConnectivityMetrics$B0oR30xfeM300kIzUVaV_zUNLCg;
+Lcom/android/server/connectivity/-$$Lambda$IpConnectivityMetrics$S6t43cbsv7uQTbniMoTEFVB8Tfw;
+Lcom/android/server/connectivity/-$$Lambda$IpConnectivityMetrics$VClycNGAy74aP-7CTaYoRpoYsy4;
 Lcom/android/server/connectivity/-$$Lambda$MultipathPolicyTracker$2$dvyDLfu9d6g2XoEdL3QMHx7ut6k;
 Lcom/android/server/connectivity/-$$Lambda$Nat464Xlat$40jKHQd7R0zgcegyEyc9zPHKXVA;
 Lcom/android/server/connectivity/-$$Lambda$Nat464Xlat$PACHOP9HoYvr_jzHtIwFDy31Ud4;
+Lcom/android/server/connectivity/-$$Lambda$PermissionMonitor$h-GPsXXwaQ-Mfu5-dqCp_VIYNOM;
+Lcom/android/server/connectivity/-$$Lambda$TcpKeepaliveController$mLZJWrEAOnfgV5N3ZSa2J3iTmxE;
 Lcom/android/server/connectivity/DataConnectionStats$PhoneStateListenerImpl;
 Lcom/android/server/connectivity/DataConnectionStats;
 Lcom/android/server/connectivity/DefaultNetworkMetrics;
+Lcom/android/server/connectivity/DnsManager$1;
 Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses$ValidationStatus;
 Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationStatuses;
+Lcom/android/server/connectivity/DnsManager$PrivateDnsValidationUpdate;
 Lcom/android/server/connectivity/DnsManager;
 Lcom/android/server/connectivity/IpConnectivityEventBuilder;
+Lcom/android/server/connectivity/IpConnectivityMetrics$1;
 Lcom/android/server/connectivity/IpConnectivityMetrics$Impl;
 Lcom/android/server/connectivity/IpConnectivityMetrics$Logger;
 Lcom/android/server/connectivity/IpConnectivityMetrics$LoggerImpl;
@@ -25387,6 +41445,7 @@
 Lcom/android/server/connectivity/Nat464Xlat;
 Lcom/android/server/connectivity/NetdEventListenerService$NetworkMetricsSnapshot;
 Lcom/android/server/connectivity/NetdEventListenerService;
+Lcom/android/server/connectivity/NetworkAgentInfo$1;
 Lcom/android/server/connectivity/NetworkAgentInfo$LingerTimer;
 Lcom/android/server/connectivity/NetworkAgentInfo;
 Lcom/android/server/connectivity/NetworkDiagnostics$DnsResponseCode;
@@ -25395,26 +41454,35 @@
 Lcom/android/server/connectivity/NetworkDiagnostics$Measurement;
 Lcom/android/server/connectivity/NetworkDiagnostics$SimpleSocketCheck;
 Lcom/android/server/connectivity/NetworkDiagnostics;
+Lcom/android/server/connectivity/NetworkNotificationManager$1;
 Lcom/android/server/connectivity/NetworkNotificationManager$NotificationType;
 Lcom/android/server/connectivity/NetworkNotificationManager;
 Lcom/android/server/connectivity/PacManager$1;
+Lcom/android/server/connectivity/PacManager$2;
+Lcom/android/server/connectivity/PacManager$3;
 Lcom/android/server/connectivity/PacManager$PacRefreshIntentReceiver;
 Lcom/android/server/connectivity/PacManager;
+Lcom/android/server/connectivity/PermissionMonitor$1;
 Lcom/android/server/connectivity/PermissionMonitor$PackageListObserver;
 Lcom/android/server/connectivity/PermissionMonitor;
 Lcom/android/server/connectivity/ProxyTracker;
 Lcom/android/server/connectivity/TcpKeepaliveController;
+Lcom/android/server/connectivity/Vpn$1;
 Lcom/android/server/connectivity/Vpn$2;
 Lcom/android/server/connectivity/Vpn$Connection;
+Lcom/android/server/connectivity/Vpn$LegacyVpnRunner;
 Lcom/android/server/connectivity/Vpn$SystemServices;
 Lcom/android/server/connectivity/Vpn;
 Lcom/android/server/content/-$$Lambda$ContentService$5-BNVxd6JTWU9ogp3u-0kfiqgbI;
+Lcom/android/server/content/-$$Lambda$SyncManager$4nklbtZn-JuPLOkU32f34xZoiug;
 Lcom/android/server/content/-$$Lambda$SyncManager$68MEyNkTh36YmYoFlURJoRa_-cY;
 Lcom/android/server/content/-$$Lambda$SyncManager$6y-gkGdDn-rSLmR9G8Pz_n9zy2A;
 Lcom/android/server/content/-$$Lambda$SyncManager$9EoLpTk5JrHZn9R-uS0lqCVrpRw;
+Lcom/android/server/content/-$$Lambda$SyncManager$BRG-YMU-C9QC6JWVXAvsoEZC6Zc;
 Lcom/android/server/content/-$$Lambda$SyncManager$CjX_2uO4O4xJPQnKzeqvGwd87Dc;
 Lcom/android/server/content/-$$Lambda$SyncManager$EMXCZP9LDjgUTYbLsEoVu9Ccntw;
 Lcom/android/server/content/-$$Lambda$SyncManager$HhiSFjEoPA_Hnv3xYZGfwkalc68;
+Lcom/android/server/content/-$$Lambda$SyncManager$SyncHandler$7-vThHsPImW4qB6AnVEnnD3dGhM;
 Lcom/android/server/content/-$$Lambda$SyncManager$XKEiBZ17uDgUCTwf_kh9_pH7usQ;
 Lcom/android/server/content/-$$Lambda$SyncManager$ag0YGuZ1oL06fytmNlyErbNyYcw;
 Lcom/android/server/content/-$$Lambda$SyncManager$bVs0A6OYdmGkOiq_lbp5MiBwelw;
@@ -25429,6 +41497,7 @@
 Lcom/android/server/content/ContentService$ObserverNode$ObserverEntry;
 Lcom/android/server/content/ContentService$ObserverNode;
 Lcom/android/server/content/ContentService;
+Lcom/android/server/content/ContentShellCommand;
 Lcom/android/server/content/SyncAdapterStateFetcher;
 Lcom/android/server/content/SyncJobService;
 Lcom/android/server/content/SyncLogger$RotatingFileLogger$MyHandler;
@@ -25436,6 +41505,7 @@
 Lcom/android/server/content/SyncLogger;
 Lcom/android/server/content/SyncManager$10;
 Lcom/android/server/content/SyncManager$11;
+Lcom/android/server/content/SyncManager$12;
 Lcom/android/server/content/SyncManager$13;
 Lcom/android/server/content/SyncManager$14;
 Lcom/android/server/content/SyncManager$15;
@@ -25455,8 +41525,12 @@
 Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck$1;
 Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;
 Lcom/android/server/content/SyncManager$PrintTable;
+Lcom/android/server/content/SyncManager$ScheduleSyncMessagePayload;
+Lcom/android/server/content/SyncManager$ServiceConnectionData;
+Lcom/android/server/content/SyncManager$SyncFinishedOrCancelledMessagePayload;
 Lcom/android/server/content/SyncManager$SyncHandler;
 Lcom/android/server/content/SyncManager$SyncTimeTracker;
+Lcom/android/server/content/SyncManager$UpdatePeriodicSyncMessagePayload;
 Lcom/android/server/content/SyncManager;
 Lcom/android/server/content/SyncManagerConstants;
 Lcom/android/server/content/SyncOperation;
@@ -25469,14 +41543,23 @@
 Lcom/android/server/content/SyncStorageEngine$OnAuthorityRemovedListener;
 Lcom/android/server/content/SyncStorageEngine$OnSyncRequestListener;
 Lcom/android/server/content/SyncStorageEngine$PeriodicSyncAddedListener;
+Lcom/android/server/content/SyncStorageEngine$SyncHistoryItem;
 Lcom/android/server/content/SyncStorageEngine;
+Lcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$17qcaUpUsTMt5exVwDnmTmyrpJw;
 Lcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$4nadnpI0ImgQseJYN0WTE4IJ4s4;
+Lcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$ContentCaptureManagerServiceStub$6vI15KqJwo_ruaAABrGMvkwVRt4;
+Lcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$ContentCaptureManagerServiceStub$Qe-DhsP4OR9GyoofNgVlcOk-1so;
+Lcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$ContentCaptureManagerServiceStub$vyDTyUUAt356my5WVtp7QPYv5gY;
+Lcom/android/server/contentcapture/-$$Lambda$ContentCaptureManagerService$jCIcV2sgwD7QUkN-c6yfPd58T_U;
 Lcom/android/server/contentcapture/-$$Lambda$RemoteContentCaptureService$yRaGuMutdbjMq9h32e3TC2_1a_A;
 Lcom/android/server/contentcapture/ContentCaptureManagerInternal;
+Lcom/android/server/contentcapture/ContentCaptureManagerService$1;
 Lcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;
+Lcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;
 Lcom/android/server/contentcapture/ContentCaptureManagerService$GlobalContentCaptureOptions;
 Lcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;
 Lcom/android/server/contentcapture/ContentCaptureManagerService;
+Lcom/android/server/contentcapture/ContentCaptureManagerServiceShellCommand;
 Lcom/android/server/contentcapture/ContentCapturePerUserService$ContentCaptureServiceRemoteCallback;
 Lcom/android/server/contentcapture/ContentCapturePerUserService;
 Lcom/android/server/contentcapture/ContentCaptureServerSession;
@@ -25486,13 +41569,400 @@
 Lcom/android/server/contentsuggestions/-$$Lambda$RemoteContentSuggestionsService$VKh1DoMPNSPjPfnVGdsInmxuqzc;
 Lcom/android/server/contentsuggestions/-$$Lambda$RemoteContentSuggestionsService$eoGnQ2MDLLnW1UBX6wxNE1VBLAk;
 Lcom/android/server/contentsuggestions/-$$Lambda$RemoteContentSuggestionsService$yUTbcaYlZCYTmagCkNJ3i2VCkY4;
+Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService$1;
 Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService$ContentSuggestionsManagerStub;
 Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;
+Lcom/android/server/contentsuggestions/ContentSuggestionsManagerServiceShellCommand;
+Lcom/android/server/contentsuggestions/ContentSuggestionsPerUserService$1;
 Lcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;
+Lcom/android/server/contentsuggestions/RemoteContentSuggestionsService$Callbacks;
 Lcom/android/server/contentsuggestions/RemoteContentSuggestionsService;
+Lcom/android/server/coverage/CoverageService$1;
+Lcom/android/server/coverage/CoverageService$CoverageCommand;
 Lcom/android/server/coverage/CoverageService;
+Lcom/android/server/devicepolicy/-$$Lambda$CertificateMonitor$nzwzuvk_fK7AIlili6jDKrKWLJM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$-SLM70h2SesShbP-O5yYa1PYZVw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$-akc0-_Xpj7aIxkCmZXNOwZmfBo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$03gLgx7r9JVlctOr2Y2H2tmFv4c;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$08tAXus2zREPLhPWSJJMbXKP4Sg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$09_I4G_12aZDp0ahZnGtJryBYCg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$0H5SdBGIQE77NlJ8chd0JlrtVZM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$0YdFTQIxrgxkEfzJdhGZzP5z4eM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$0nS7EqUlxcoON_ZF5WsIciiV6f4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$17w9Erg0JBwVQsxp9tlvNXoHag8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$19j1Aw89Idv-1enlT4bK5AugL5A;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1R0QiR_l4mLrk0FOixnnsUDLM1Y;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1XDDDftsFpFAuDCNfSCxMrNxbMk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1Xv08Aj_cK0tIZBpTLTZYh8Zs9s;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1Zyuyui_ku0ZdGgm9CrkOMuG9B8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1_463wML1lyyuhNEcH6YQZBNupk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1iJrvtbb8D-HC5dcMcu7FeZ0bls;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$1k_SpqyKkZIiqJdJjszs6AKXu5U;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$2QHA45sHi3IUGkw9j4nqdP1d9f4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$2T_rNBu9uZarOjRto1J4yaEXo9g;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$2abeHMpplaQvVBNJWjp-qJz5WVw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$2dnwZdGuTZnM6wwcm6xROcqfwb0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$2oZRUqH8940wHaVi7eD5XbqxSUs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$30ERlBvVSEX3BNYniAbrkpzZMO8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$3L30HmY-8WRZNE3mKrX3xDa7_k8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$3ci-C-bvTQXBAy8k6mmH8aTckko;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$3cl91AM3OrkyrKhqi6ZVDNTQKAA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$3fkwqImXZBEqEcBcVdbEHhjgHpw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$3rzSAPGK2j1J59mql6CHDfj5_vM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$408nFvkwnZ8Zkn34fAB90_FIpuw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$40NnXYgLNWX1UOoSU-Z89B60qgw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$4ALlixN_yWTKyHgaHqgvFKb2Fys;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$4CiWL2iCMnRVnveuqpgZV0TEhrk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$4SlKpwMTE30yupnWmTMOjRy2qoU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$5-nWFGyr7IsWb84Z7EeOMY-GKY4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$5VQd88NWLFnS68z-nw7XjNBNv6A;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$5Xy1SW6FmfM4-7F8ZHPEFhBAJjs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$5_qqJuFUQctuq7MUOxfXoWw-5xg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$6E7MK8TbNUybt8S9CwAdfdcn2x0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$6K_0ypBXU-MxW25hBfVb_pa476Y;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$6SGKr9VhDL9p5RwsHqFj4UpVZTQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$6bRYy5LYRT2cwzrjgkdZcHBZJb0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$6bgFhX4b-xoNuxSdFAd4tk1EzFE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$6g9CONRefKQHg446cfQoqfOE2Vk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$7Cpvth9RknvcbwQxadY3QRMYuFU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$7bcaEHXf3TCFcAmnNgQ3w5k52Do;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$7d4KuFVANhtDTCmi75jRXr1iwQg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$8WEE00-ysyIE1NA6831vMvnUKA8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$8XUqgbgdUcEUgLSotmYa65MlJU4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$8ellpsdXYuR8VQfhf8jcttRtOvI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$8qCcR6mM8qspH7fQ8IbJXDcl-oE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$91lePGqcrxZc3CJvr3r82jo8pqU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$9BBesRjvUOb0HylcboB6iBXa9rA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$9R-Cd8_5zpYXgcD0dtPoPmXylac;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$9ZcumXOv56Ei2C9SZ1rGCAWbFq0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$9e1WD675Sk7q7eBur0QM_ABo6vQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$9slZPgx0YdlOIZDsP-rOhH7cf1I;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$AijWRIktKOprZjv1bi4_G1772Mk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$BG5ucLiTHDdSlIiTv_4KUZ1x4-E;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$BRpIBuCcPsCOsse3nSRZZGAN6zo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Bg95NheW5thmDvdD-hGXu4jgipE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Bioo-mDmIMMQbonuT-cTceZugBE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CAHsZjsjfTBjSCaXhAqawAZQxAs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CDHZdCsr9YgduzpjJeJZgy9m_78;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CFMQ1ykMHZEBAbCbIrxt0fG8F6Q;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CRiVj7LcEcD99tgHUWiVKaQNje0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CiK-O2Bv367FPc0wKJTNYLXtCuE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CpvrZCMW3zm0aad04_pjyy_0aZc;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CtnVY1-sDsBzKJt5YVB4zyTnSFg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$CxwsOCiBBPip8s6Ob2djUNKClVQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$D4ztnD6BT25lWG-r4PUjRzNR1zs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$DGti-zSjoF-MLpb6ukDfHkXaJIQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Dkp34yebHBWf2q7_ZEs8MgnJZqA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$E3l49EGA6UCGqdaOZqz6OFNlTrc;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$E9awYavFY3fUvYuziaFPn187V2A;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$EJsqLPPVkijBKCgW-TLEHRRqyDI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ERuVso0xsJCwwC2166dqVBI8lYA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$EXFPU7YOnkkc9OavMU_VthZbEIs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$EXuB-2fI5CcnhtDXjFh3KBQt36U;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$EbBXBUjOxgBkysUjLC5ARCskXTI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$EbIZcVNy2OyF5PbYw2fTtScB9Zk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ElWamLudjuXKkng-z8ausIIf74E;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$EmW1vJQsSAWrjreihtc0C_PUzE8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$EuGKTMwvdflyo2gmfY_QNT1EMBo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$FmxOJlCc2MLPPP1wq6qLc9sJsjs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$FoRIQWHG7DAHSS17BPWMp1vOTtQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$G4W44ReWhy5Zf5FIX4LLR9Rz4wk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$GLFaeQoYlGpw9LS1HfFdyYwmh6E;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Gay72FJGh9jv-C5zoSYQgAwFMqE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Gd_Pd_RvM9VhMO0x9QLATLm3qOQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$GrJ2yAyrcr8_uJK0BCe9i4AcIYc;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$H1JgNiSBhXsH1Qg5Bfg-nluQHLg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$H87e1pqSu1446VUE1hubyHp3hbY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$HiDFwQ00KZn2k7XjSY2W4AemAmo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$HoakbJWSKTWNgXqp-KqZUDQ2v3M;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Hv-tQz9yG7UQN-NW0Pun2vUKT00;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$IEMjUYhA0mP8sRicHJTUcSHklKI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$IFjmfnHIk0cwZ4cu_jTHWTsMxfc;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$IH37q4aCcb7fKvN7WNz4-JFtN1M;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$IMrqSPgnQFlD9AquL6PEMeRT48A;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ISVxczoeSB_OIc18VUJwvW1XWDw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$IiTDvO4lH6i6MSEHWCEcAk85DDE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$IzlTyFucmXCd4PMovIDmqmmpJ_Y;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$J1D7mGzV3_Pe5CkN4SOHvBx0GQM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$J40SNkUbFjfJHtRZcSHYbhkkIpg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$JBJyALwyQJsZ_dc_0yFxEbDWxjk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$JE1PnTEmjhmAR-70siow09xiBRg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$JGK9yG1wj3-orqdqBMnl7nMPLL4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Jd52Cn2ACBQ9fPq5K732aG_8iTY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$JklCLZ8vzxbgTOI4Xt7ZbZsL0Dk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Jn1h0KwAOFO-2SLpickAr7b6UEI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$JtphNR0tnaOuEEn0ikwSL9fXD1M;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$KOycIT0DtH49A4P5XWP73pI0dj4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$KVBXyPBBtnY04KgNMY8kTUc8TDM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$KnolhWMYD7G9f7e3KfTxyhi7Xjg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$KpzX_BpNOjdEddBwsYhu3UDTjU0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Kt954vcIuhnBMcd-u6lDaLOaZfM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Kxt959fEmzAZCuTvdZLLr4ydBwg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$L0UrX9eXuPfnxY8pUss60yr6d3E;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$L1BjBKCM4PsL1cN_5wbAOuBRIk8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$L3XzC2X57y8_uXrsW81Qk8KXQTA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Ld5sfZCEJNJ2WbpNqes0zQsde2I;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$LgaheO5I5mZ7xT2AeYYlkZKwrzU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$LoHksgFKu14_Ln6PoeosRoDbwSw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$LocalService$YxQa4ZcUPWKs76meOLw1c_tn1OU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$LoqX5KbgPsZw5lbWDX6YUnchwpU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MBTqJ13s-x_J2oljYVXrMdEJZ8o;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MOLrAJRWCniZfP_bjE3gjYwLUTA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MRmEzbzRUozehYFykb5YqjHEt_s;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MTDdFPtPQJRYX737yGn0OzoNDCQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MW8w4Pd-7XMiVO9Fsi7HcnTblIo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MX3M3eTWWoV82PMImp1skv1Wm-I;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MdCcLj6WQKJMyudRB0ePdeQg77k;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$MviNnPMxpWJ3R18v9L0iG_mI4as;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$N18wt-LIW9paPKI_TTPbSWO6bBo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$NQ8HQ2OEvYVwQcxv3HSGyE4pJg0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$NV9-XJEdh3iVV_1FcyzVTLRWMMs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$NZ0oxk-Ik8VTdLKIQsEmJ4u8ge4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Nu-f7ZVLk0_egJ3zAQpMMR_T5ZE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$OL2XWo5c7ghltPdi2SyRK5POm-4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$OPWRB8NOzJI5iy7fnh0GBb93YAc;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$OcqRV2qOJlY8E9xCUpwMhJGcmQM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Ohf5PJQmXjsarWisPAuPB8WECX8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$OmIywYg9v-MYZi3nGwhJlkHQU6U;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Onml4JIb-lgf_B0yniDhFL6SqPs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$P2nOCmk6UKsFCZPm0Fr5-8DwJKI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$P3h-UVT190ynE2bPKyoZs8z7pak;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$PJ0C7ukpsSrXE-QKILsxBvc5f-U;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$PbWvUymvyMNlDpwaJHqqjloqHY0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$PvWvjngN8JqJGeEwEDF8KNY9tDM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Q04hsrQ7laYfGd0a2yxfWGwUB2w;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Q26NV3WTVuMjxUPcG_Ce4APBYQQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Q2aFvXmF7YdOdbBObb4oqHGsO8k;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Q9i_tyPkEfhioam4h9dIwd-X4Pg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Q9wyVuMahnMYX1BkwZ0hhT1S6cw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$QQFWZYAphnYjdI68Fks2LdFuAgo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$QSJKFWOoJ7s5g0HLgGWDuDCNelU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$QSZZ_1yoXc0KadPc27uY1ijTXpM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$QUJm_3fIWeaPInXzmBYpb8UWBEY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$QrMlHNz0PC-Ctzh_dDzUj8g5xm0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$R7jNGUHgN9uG5tT_PuItt7Vn00g;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$RB751AcDJaPqaU4DtTtgN1tidpA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$RMYLQ6bxpyj9L88wy3v1nWqZ7Wg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$RQLjmSc75b3yyzDq48EB60T-xJ0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$RYzj0IXZ3UNMgwQnbenZ8i-9s60;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$RaSE9sEzDuKpHnuwL4Ihn963J7g;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$RgCXuyEFWhEba2UFAFFocJYLNYo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Rk6dbmkjZ2gQ7A2Eazn5ASwC3RU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Rt85y5wEY0DRLvRJ6XnzxsSF1eo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$SSPIfQ_rRI3lQvEj0ACrAZaUe6g;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$SxNw2QtLreqUCvuB24woR-GjuMA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$T-DYGQoYs3p1_NgKsVcKRX8fTnA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$T4eSwgayOKOYwmmjCYnPFwO28Pw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$T7SRZQOZqOGELBG7YRAkVmxuJh4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$TSS9Yr-s-3wxWw1bzVWIxqNSkMk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$TSnfnLktaFMgNdIMhbxjbiz8gqA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$TcNgzWUAWtXQgb-e38C9PKE89Go;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Tf_SuyVihRcKkRFcIwGsSH6fYLU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$TistVIXPlboUC3QIj4JSWHtbCxQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ToBnODi9cmoTXsgBuVAERPdlksk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Tvjb8n7J2l26EpnkgMIAbjrhdu8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$TyEVpAcNrxbs_aScP7ydRC6JPq8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$U-CvSEcNqQJzFyxm9-WI72-937c;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$U1J_URN15ScrYGv9RfGM-uCj4pk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$U68n4iP9YZvCi9l_w8clW0ezl0E;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$UB9vMSrN5Y8UAmaQB2lj1M1M4hY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$UGjCdSf2Rxgyqxv7KJhmrE1D48Y;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$UPnhCNO69TKnF1hSXENMzK_2NSQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$UZoVWdpJJZwABGNhZWHbxPIvMO4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$VDIwg4X1iKAqFvQldV7uz3FQETk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Vg0S0XWRLxc15dP0DNjWoFnOlo4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$VqrEAorQ36H01_gtzS6luteYBs0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Vsgrnsu-JDIF867spjVbBkS6FtU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$W--TL5Jqd40HLcEvbX-xfRTBXg4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$WClCPAIaYC1HcqeEWjZ5mwt9QEY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$WPoBmlz33wJKdfRNgazaVqch_RI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$WYP5q_IBba00XZnGp257U-5v_qM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$WevGGQWsNzietlJkpgLAumbTjNU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$WtqYUfe7dJqIftHU4nTlehWlM1o;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$X8P9YSbXKt6AGKQrPiFxyDc-HJQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$X8ssNAYCaueT78i6KH-xMYuutXA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$XHdp-DhtN4kHoHFZDl3Q3ERAk4c;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$XIgyjzk0MIew6CDVQI8Ae8JzYYY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$XOdX3qkh6bxGtbYtcwPIQmfVatY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$XnSMMFYuFPI3ne_otxnTw0Tx_Tk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$XoA7qUoiMKNWGeLb0_PAA1GorHs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$Xtl9mqtvlMrCVZVtWJhb8BLKs4I;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$XxTvtDGjc65GwFaqkNXZsW63TPE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$XzyHMSPs-XjT8PmWp7Qpn7iczdw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$YA4XK8CPWPIZ24OqYJwgVT_5HYs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$YTkdlwrc6XAKuTn0p2mVi0oHrSM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$YzrBfeyVBmtTDtp-1wWRuGqpX1g;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZFdrHPwd7Erny0jil4SeojoI0yE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZQ4kE3IfWore2zFzZG1Za8zcO2k;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZX_ASbhDe3h4tTo7Tg94QibI20o;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZazSf3xAT5dEmqVmEq4ScK7Em7s;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZjUzT0tdaozvbrToMBz5lXo_9gQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZnmDaAarGwYrOpGdw8hNrUXv7Zk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZplEHvL6OScKFb4GYIB1nKJqtd8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZpoQff3M1J7SHl-aNOO7YrgHMIw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ZyL5RaozhKx4pFmCb-n3LlH5zy8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$_4WJ5_9h8DV0lHhL1rEl8TaHdxA;
 Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$_Nw-YGl5ncBg-LJs8W81WNW6xoU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$_O5h-afqoPkhc8WaUr4EVDCDxU0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$__SFQBw4-nPdRkwUAOWlzeEXEDg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$a2r02nyCVCgFWzutUK0956l0CYQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$a30NURDJ7zRXLs68n_gcBSzFE40;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$a6N7YdVtFZPKYb2-gun76ulJ5fQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$aC4EXkkAMAWYv8qwbTvE24Kub28;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$b6NlDdKsoSylaG3SG2kID_T_mKI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$bouyOrED43n7AxQtiV7_tal36UY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$bt8Y4TXOqcLHPnaZVT6V787Lqhw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$byvbdSMbYMI25u0KJPfs_XsrYpM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$cDpxDpKZ5POqE3OYBUq7OxTH9TU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$cF-dIKd2XSk01iZ99bPAGkzvRQ8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$cKidc1M10gM7lsDQq-dJXYRT7yM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$cVXDr0Iu6R4M_ILrW6G7OOe40H8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ce_6_s-XSM555Wtht-tuaS4jh_Y;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$cr-JLWKI9Q0W6mZziyfSq7n1Wxc;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$crFaMQsO42AtLAJVGqKK5_OcRFY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$cs7Jw_Ty60Ef1wUrMmzygNqwnKY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$cxqU3mrQvYaXt635Q0s7bc5lWXg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$d08rPNL3sI-Hx7ZpnR_dxsBLZmk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$dglutnmu9mKYgbZSpXZQbMKKvds;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$dhmKG9Egag2TPEwukGPiev6dT70;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$dnWqKdI2wwfbdJIvSwUGOiGJ_2U;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$e2DzcGWRwnNdKo6blzNAob0HsSw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$e3xcbpVR082uQMOIH1sFm-7ww_k;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$e7c2huGjk3obVFka43jMbcJT0E8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$eKrWywCP77ljwUZh-R1c8aoFHh4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$eTztGRhk0T0d0Zt_QnBM1_amoPo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$eV4vpckz4c7VE5pO-M0cZ315eUE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$eZw4tgcZRgP2OCEUG4UMwL1KdZI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$el8xxlwPD9FXAFSeIFQoFZ6W4po;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$erIeDiO3NPFogMKpp4rw-CzQzyY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$evMMfIEOmotKwbweLAEWFf6tmk4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$eyzr70H-LIhamGl2lQJNuBnNUCg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$fBEZoXFpOdFGTOWV_4afqn0J6Jo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$fU0Evn2qWpzcawqc8Qu9d2hCcoA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$fUEsKK2Ap8SOLg8jKKO8IWAOMHo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$fi3bp9Jg5MB-y7uy1juNXt4OgTY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$frL8-y9KUDCjvP_ukJ0uoU1Mk5k;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$g3pjxXrKbnPToHF_egmYdr2f8-M;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$gUwTdpToc4b137uFTknYXprKx0I;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$gbbZuAsRK_vXaCroy1gj9r0-V4o;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$gyGQmraIFm9snTVcQs8v9x_oN2s;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$h5usYc0BlbipvFKYNcWISejzUxs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$hN_ekQEl5DInXkKF8Q-qa6Pmb6E;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$hSkJUSDkGz1ZmNMPxLsgctH3Bx4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$hVh-r9U8me62PnowMqWIYzsG__4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$hWg24ME7nlaYglkgmkHI7VvIfWk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$hX2NEWgF6rTNkdyJ6G_rvoL6TR0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$hohlWNRUxQL3ppUY1dM8mwNK67I;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$iJGFtbFrOPcW3nu2RGPHCHVu1-E;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$imyf3XRXXjZCs-QgcGmDkyevO40;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$iojPtiJXnnFJDsa0P-LGE6gfikU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$j6r61e-hJc3TCg_zV4jTt3IZnPk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$jDU7UhnyXuItN3e_DVSz6WUa7Qc;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ja_JdZk-BJUe5rbQuU_LxLblBfM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$jgsUvRSr_6U0Lrv4PXbJtZQe_Mk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$jqQoRiWmeM8a3MeBPfKE9lApkio;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$kRuvxF00uvZotgT3afXskSfAGzI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$l1-j9XdvuDdp7fQsY_n_Pv6CP3A;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$l1OVi4X-0E2PRGCgmqaMDm9f37g;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$l597rxoTSNqmNmqk6LNflbZy40g;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$lBH-DXXEe5fe_x6FRZ41LI-rdHY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$lG9keASbSI5H2nDJOOi-80s_LvI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$liZQVQo5sYVwMOQlTlgxUF7fWMU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$lxepyUaTh9HejBaF0nHpaiCx0_s;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$m2h-vVM6u7Yweb_QNLSUAbWduj8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$m4rOeIPRBmiAyZePUlogYBlUqWg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$mBqOqsTnwflzQ2R1u3HUeMrbjVI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$mF6fAm3fr7FHqqfmNeO86iULgao;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$mTtUOq0pM85nkOQibagz4NHu6gc;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$mkMQ9WtInWWL27eiU6IDs8Sol8Q;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$mkvkdiyEMl05tI1rw6O3HygvaRY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$mxnMynV7fO8Pt3nYwwCODWeOMC8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$nBM3fQ_95BD262BpQ3v_i1LTo9o;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$nDo4MxovM0DSBzOVm-GzbztXFFU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$nJ1o9XvwkdXtKnTlJqUdmJP-79w;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$n_Z4yiCZPW15aN8wIrdQ-AZdONo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$nbD4hzJ7SdekKDVJaFS0e_yoOtU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ng4tixim9kGp1JCPRZP6128y4Vs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ngRwwawqOGNh8B2G-2i4gOON3v8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$nhnQ_4mt77CRywClA2_LCvN86-M;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$nkWVy9u7AzQNpu2s-LcA_ChoL_0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ntEsc6u7AnPDmT8-eKrNAgcP9-E;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$o8yCHGIwCRCQbFYZ0lEmBtEJxg0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$oPL_fgeCfV3bjhOoeIBcgcoNzI4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$o_H-PxZs9hbF8cnz9neG6sE06E8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$p6M2CJuZlA3Rm0CLLTJMm5qd9vU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$pE7Amjgwpxhd3c82eV3sPlVpU7Y;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$pQr4-HeJd7F_DBrh2GLysG-VVqk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$pnGOhpYZbTior4-5l_ZVpjwHMlA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$qLdZ0ebI9-VES2qOXxipAqDsLtg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$qUFZingYce_mtufJ-COKvsGFldc;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$qVG_che5VZcjXofzxjKlurWwLu4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$qViz9I1AJUZv2wUBqL57ZuJyV6w;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$rIIGm_pcvT_tv88ID-sqKSFXqPU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$rP76VuxkDMpQvOKe_NhM7A9S5D0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$rU5IDfnRM1iicQF_3fSUkRMiJWs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$r_bhpqZN19zqo-UyWd_MN7sg9gk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$rg9PVcvT3UURAp6r5F9n-OzYW0o;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$rgWIdVG-xIVE9DTQu1PoIuOkdEc;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$s2hBmnk5DsUR6LzsI-hOmE3fbOI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$s7nsr83MiLj0X1p1Wlc_DLT8K_k;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$sKaiUCZhJCPEsQr9hbBm2BCLjFE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$sgJgS32ZNiiwGAfMZyTUvDVx3oE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$srUwh80IVWUvcHUY2qLiJl7DXbw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$stRgRygcW96CZ_aQdsj6efcedrw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$stYWAHQ1_37Oh1WhPMUK1JldOJ4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$sv3aqNyetv_Byb9X8ONZtlQZJG0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$swuqECN_oZ3Ck3YdyYEc6mtnat4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$sy2ThawNYz2_Mvwprqq7BkdyFPI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$szQlSNzC2ADtbjiyZ_BsctEeVvo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$t2IDLi9Z2kd4YgBQUweQjeF56So;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$t4_pjPJy5FQTNLdcE-DM8Y_3LFk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$tAgDO0b7hXUD7MGkHfgPTDV4o6g;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$tDS-z4u8kVI84TeTEN8vBdedFSA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$tEq84x06yJ3TuolYQS3bpqsQnQ4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$tWth7tXYQXpYp5Hzb8E7OMe1xQU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$tp-48y_8GxxZ_5HYpkvQSJUXCCs;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$uBbMjDj76ovvi3SNe9WwB6bL1bg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$uD3EtO2DK71MscaG7ykh6GMewyM;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$uX3N9oUyt7vAkRk62hfFpSIUfxU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ua0yrS5kFedpcAO57O20Vkmp_iU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ubKPRWVtvdZzQDW6CDEvggHJXRc;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$v4runHJLxiL3Ks01Uqv-LIy69tA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$vFs74BeiHI_1TW0yjvIUNhocv4w;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$vR-RWtti8ewEGuhsA0IoU86GAmo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$vbK5M-QMAlkZf1zA7KPOBiQxiAU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$vmrMOPfGWyqGVGm4kjnJw9y43pg;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$vsNaZOHvF-kWqLDfhyiTAaRLpQU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$vzueeb-BCfMYtgO3SeHI1YKhvCk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$w0sB6f-r2UXAh8dWEvNc-SAFTkY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$wQUJoH3intmxV9FH1ypMmbuy0cQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$wWlaczCw_V5Gjsu_Q1bzmhAPf4c;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$wrebaRxLxzDXlP2L0mbsQk63W0Y;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$wynHOghqUtl8CTB8Lp1BnOlWruI;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xGPzaLfEk18lj3TzX73zjHkH5nE;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xJ8-hwvSE1cq8C5FtgXnoW_zBZU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xNEzeKxioITjjXluv5fVIH4Ral4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xSgT6QdDr4xnDwmWzibK-JrkVlk;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$x_XvH7NWMAoRsaUgVX92Cmco4J0;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xcgjFgZvtVsZvMCJ8GD7qseAgKw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xgC7PclKrFrtVX1O9t4fpDNgv0E;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xtNi-Fr5I3CYHdDTU1gC1K5Os44;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xt_J25l3ug-esItAoFFF6v_nxKc;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$xuhW_wd6YxaInBm76w-yoLWFE5o;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$y1mmEY6CDw01OUVh1NYq1BVWf2A;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$y4TmIIzrIWhefGZSS0RoexHhlYw;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$yeV2rhP1kSqkhwkWq2VA00I0Y6Y;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$ylqQ-0_BWKf5SNKi5IEZksGSyuU;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$yxbu3Ze4QwrYlONlYNa05wehYXA;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$z9w-PqXATVne7zR3PADeRtW0jf4;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$zErhxcsyTkaK2GsPBoPqruFzweQ;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$zhpBiZesw6vWyjay3oNmua6J6mY;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$zqWn6EZzfYDYc9JTg9Ag7SZ3qTo;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$zx-WdN6vyDW_q41Uj3Zg3ktwyG8;
+Lcom/android/server/devicepolicy/-$$Lambda$DevicePolicyManagerService$zyZhewRXB707f3cphuI380YTw64;
 Lcom/android/server/devicepolicy/-$$Lambda$NetworkLoggingHandler$VKC_fB9Ws13yQKJ8zNkiF3Wp0Jk;
+Lcom/android/server/devicepolicy/-$$Lambda$SecurityLogMonitor$y5Q3dMmmJ8bk5nBh8WR2MUroKrI;
+Lcom/android/server/devicepolicy/AbUpdateInstaller;
 Lcom/android/server/devicepolicy/BaseIDevicePolicyManager;
 Lcom/android/server/devicepolicy/CertificateMonitor$1;
 Lcom/android/server/devicepolicy/CertificateMonitor;
@@ -25506,8 +41976,12 @@
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$3;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$4$1;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$4;
+Lcom/android/server/devicepolicy/DevicePolicyManagerService$5;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$6;
+Lcom/android/server/devicepolicy/DevicePolicyManagerService$7;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$8;
+Lcom/android/server/devicepolicy/DevicePolicyManagerService$9;
+Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin$TrustAgentInfo;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyConstantsObserver;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;
@@ -25522,6 +41996,8 @@
 Lcom/android/server/devicepolicy/NetworkLogger;
 Lcom/android/server/devicepolicy/NetworkLoggingHandler$1;
 Lcom/android/server/devicepolicy/NetworkLoggingHandler;
+Lcom/android/server/devicepolicy/NonAbUpdateInstaller;
+Lcom/android/server/devicepolicy/OverlayPackagesProvider$1;
 Lcom/android/server/devicepolicy/OverlayPackagesProvider$DefaultInjector;
 Lcom/android/server/devicepolicy/OverlayPackagesProvider$Injector;
 Lcom/android/server/devicepolicy/OverlayPackagesProvider;
@@ -25531,12 +42007,21 @@
 Lcom/android/server/devicepolicy/Owners$OwnerInfo;
 Lcom/android/server/devicepolicy/Owners$ProfileOwnerReadWriter;
 Lcom/android/server/devicepolicy/Owners;
+Lcom/android/server/devicepolicy/PersonalAppsSuspensionHelper;
+Lcom/android/server/devicepolicy/RemoteBugreportUtils;
 Lcom/android/server/devicepolicy/SecurityLogMonitor;
 Lcom/android/server/devicepolicy/TransferOwnershipMetadataManager$Injector;
+Lcom/android/server/devicepolicy/TransferOwnershipMetadataManager$Metadata;
 Lcom/android/server/devicepolicy/TransferOwnershipMetadataManager;
+Lcom/android/server/devicepolicy/UpdateInstaller;
 Lcom/android/server/display/-$$Lambda$AmbientBrightnessStatsTracker$vQZYn_dAhbvzT-Un4vvpuyIATII;
 Lcom/android/server/display/-$$Lambda$BrightnessTracker$_S_g5htVKYYPRPZzYSZzGdy7hM0;
 Lcom/android/server/display/-$$Lambda$BrightnessTracker$fmx2Mcw7OCEtRi9DwxxGQgA74fg;
+Lcom/android/server/display/-$$Lambda$DisplayAdapter$cOPGY8nGfp02WlhPeZ6ntLAXxvU;
+Lcom/android/server/display/-$$Lambda$DisplayAdapter$wRUuY3ELxjWqttjwkmhWSLcgkIA;
+Lcom/android/server/display/-$$Lambda$LocalDisplayAdapter$LocalDisplayDevice$6tpawjjBXhlj4GSsJjStLZrwDUQ;
+Lcom/android/server/display/-$$Lambda$LocalDisplayAdapter$LocalDisplayDevice$S4bSIp6drytTEiae37oiY_7m6ng;
+Lcom/android/server/display/-$$Lambda$LocalDisplayAdapter$LocalDisplayDevice$iXCIox7NAT3NknToX9AEwGueQjs;
 Lcom/android/server/display/-$$Lambda$VirtualDisplayAdapter$PFyqe-aYIEBicSVtuy5lL_bT8B0;
 Lcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;
 Lcom/android/server/display/AmbientBrightnessStatsTracker$Clock;
@@ -25552,8 +42037,12 @@
 Lcom/android/server/display/AutomaticBrightnessController$TaskStackListenerImpl;
 Lcom/android/server/display/AutomaticBrightnessController;
 Lcom/android/server/display/BrightnessIdleJob;
+Lcom/android/server/display/BrightnessMappingStrategy$1;
 Lcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;
+Lcom/android/server/display/BrightnessMappingStrategy$SimpleMappingStrategy;
 Lcom/android/server/display/BrightnessMappingStrategy;
+Lcom/android/server/display/BrightnessTracker$1;
+Lcom/android/server/display/BrightnessTracker$BrightnessChangeValues;
 Lcom/android/server/display/BrightnessTracker$DisplayListener;
 Lcom/android/server/display/BrightnessTracker$Injector;
 Lcom/android/server/display/BrightnessTracker$LightData;
@@ -25570,22 +42059,30 @@
 Lcom/android/server/display/DisplayAdapter;
 Lcom/android/server/display/DisplayBlanker;
 Lcom/android/server/display/DisplayDevice;
+Lcom/android/server/display/DisplayDeviceConfig;
 Lcom/android/server/display/DisplayDeviceInfo;
+Lcom/android/server/display/DisplayManagerService$1;
 Lcom/android/server/display/DisplayManagerService$AllowedDisplayModeObserver;
 Lcom/android/server/display/DisplayManagerService$BinderService;
 Lcom/android/server/display/DisplayManagerService$CallbackRecord;
+Lcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver;
 Lcom/android/server/display/DisplayManagerService$DisplayAdapterListener;
 Lcom/android/server/display/DisplayManagerService$DisplayManagerHandler;
 Lcom/android/server/display/DisplayManagerService$Injector;
 Lcom/android/server/display/DisplayManagerService$LocalService$1;
 Lcom/android/server/display/DisplayManagerService$LocalService;
+Lcom/android/server/display/DisplayManagerService$SettingsObserver;
 Lcom/android/server/display/DisplayManagerService$SyncRoot;
 Lcom/android/server/display/DisplayManagerService;
+Lcom/android/server/display/DisplayManagerShellCommand;
+Lcom/android/server/display/DisplayModeDirector$1;
 Lcom/android/server/display/DisplayModeDirector$AppRequestObserver;
 Lcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener$1;
 Lcom/android/server/display/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;
 Lcom/android/server/display/DisplayModeDirector$BrightnessObserver;
 Lcom/android/server/display/DisplayModeDirector$DesiredDisplayConfigSpecs;
+Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;
+Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecsListener;
 Lcom/android/server/display/DisplayModeDirector$DeviceConfigDisplaySettings;
 Lcom/android/server/display/DisplayModeDirector$DisplayModeDirectorHandler;
 Lcom/android/server/display/DisplayModeDirector$DisplayModeListener;
@@ -25623,7 +42120,11 @@
 Lcom/android/server/display/LogicalDisplay;
 Lcom/android/server/display/OverlayDisplayAdapter$1$1;
 Lcom/android/server/display/OverlayDisplayAdapter$1;
+Lcom/android/server/display/OverlayDisplayAdapter$OverlayDisplayHandle;
+Lcom/android/server/display/OverlayDisplayAdapter$OverlayMode;
 Lcom/android/server/display/OverlayDisplayAdapter;
+Lcom/android/server/display/OverlayDisplayWindow$Listener;
+Lcom/android/server/display/PersistentDataStore$1;
 Lcom/android/server/display/PersistentDataStore$BrightnessConfigurations;
 Lcom/android/server/display/PersistentDataStore$DisplayState;
 Lcom/android/server/display/PersistentDataStore$Injector;
@@ -25633,12 +42134,16 @@
 Lcom/android/server/display/RampAnimator$Listener;
 Lcom/android/server/display/RampAnimator;
 Lcom/android/server/display/VirtualDisplayAdapter$Callback;
+Lcom/android/server/display/VirtualDisplayAdapter$MediaProjectionCallback;
 Lcom/android/server/display/VirtualDisplayAdapter$SurfaceControlDisplayFactory;
 Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;
 Lcom/android/server/display/VirtualDisplayAdapter;
+Lcom/android/server/display/WifiDisplayAdapter;
 Lcom/android/server/display/color/-$$Lambda$ColorDisplayService$3e7BuPerYILI5JPZm17hU11tDtY;
+Lcom/android/server/display/color/AppSaturationController$1;
 Lcom/android/server/display/color/AppSaturationController$SaturationController;
 Lcom/android/server/display/color/AppSaturationController;
+Lcom/android/server/display/color/ColorDisplayService$1;
 Lcom/android/server/display/color/ColorDisplayService$2;
 Lcom/android/server/display/color/ColorDisplayService$3;
 Lcom/android/server/display/color/ColorDisplayService$BinderService;
@@ -25651,12 +42156,17 @@
 Lcom/android/server/display/color/ColorDisplayService$NightDisplayAutoMode;
 Lcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;
 Lcom/android/server/display/color/ColorDisplayService$TintHandler;
+Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;
 Lcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;
 Lcom/android/server/display/color/ColorDisplayService;
 Lcom/android/server/display/color/DisplayTransformManager;
 Lcom/android/server/display/color/DisplayWhiteBalanceTintController;
 Lcom/android/server/display/color/GlobalSaturationTintController;
 Lcom/android/server/display/color/TintController;
+Lcom/android/server/display/config/DisplayConfiguration;
+Lcom/android/server/display/config/NitsMap;
+Lcom/android/server/display/config/Point;
+Lcom/android/server/display/config/XmlParser;
 Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;
 Lcom/android/server/display/utils/AmbientFilter;
 Lcom/android/server/display/utils/AmbientFilterFactory;
@@ -25710,8 +42220,10 @@
 Lcom/android/server/firewall/Filter;
 Lcom/android/server/firewall/FilterFactory;
 Lcom/android/server/firewall/FilterList;
+Lcom/android/server/firewall/IntentFirewall$1;
 Lcom/android/server/firewall/IntentFirewall$AMSInterface;
 Lcom/android/server/firewall/IntentFirewall$FirewallHandler;
+Lcom/android/server/firewall/IntentFirewall$FirewallIntentFilter;
 Lcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;
 Lcom/android/server/firewall/IntentFirewall$Rule;
 Lcom/android/server/firewall/IntentFirewall$RuleObserver;
@@ -25742,16 +42254,34 @@
 Lcom/android/server/firewall/StringFilter$7;
 Lcom/android/server/firewall/StringFilter$8;
 Lcom/android/server/firewall/StringFilter$9;
+Lcom/android/server/firewall/StringFilter$ContainsFilter;
+Lcom/android/server/firewall/StringFilter$EqualsFilter;
+Lcom/android/server/firewall/StringFilter$IsNullFilter;
+Lcom/android/server/firewall/StringFilter$PatternStringFilter;
+Lcom/android/server/firewall/StringFilter$RegexFilter;
+Lcom/android/server/firewall/StringFilter$StartsWithFilter;
 Lcom/android/server/firewall/StringFilter$ValueProvider;
 Lcom/android/server/firewall/StringFilter;
+Lcom/android/server/gpu/GpuService$1;
+Lcom/android/server/gpu/GpuService$DeviceConfigListener;
 Lcom/android/server/gpu/GpuService$PackageReceiver;
+Lcom/android/server/gpu/GpuService$SettingsObserver;
 Lcom/android/server/gpu/GpuService;
 Lcom/android/server/hdmi/HdmiCecController;
+Lcom/android/server/hdmi/HdmiControlService;
+Lcom/android/server/incident/-$$Lambda$PendingReports$42Ba6ZxAFxFmqtPlfnXNpuKHOXM;
+Lcom/android/server/incident/-$$Lambda$PendingReports$B2hwzQpyMfhPG0Cw6n_Xz1SrHR0;
+Lcom/android/server/incident/-$$Lambda$PendingReports$h00dGfNWXgDmC4-YyxYy1CUoKw4;
+Lcom/android/server/incident/IncidentCompanionService$1;
 Lcom/android/server/incident/IncidentCompanionService$BinderService;
 Lcom/android/server/incident/IncidentCompanionService;
+Lcom/android/server/incident/PendingReports$PendingReportRec;
 Lcom/android/server/incident/PendingReports;
 Lcom/android/server/incident/RequestQueue$1;
+Lcom/android/server/incident/RequestQueue$Rec;
 Lcom/android/server/incident/RequestQueue;
+Lcom/android/server/incremental/IncrementalManagerService;
+Lcom/android/server/incremental/IncrementalManagerShellCommand;
 Lcom/android/server/infra/-$$Lambda$AbstractMasterSystemService$1$TLhe3_2yHs5UB69Y7lf2s7OxJCo;
 Lcom/android/server/infra/-$$Lambda$AbstractMasterSystemService$_fKw-VUP0pSfcMMlgRqoT4OPhxw;
 Lcom/android/server/infra/-$$Lambda$AbstractMasterSystemService$su3lJpEVIbL-C7doP4eboTpqjxU;
@@ -25760,38 +42290,74 @@
 Lcom/android/server/infra/AbstractMasterSystemService$Visitor;
 Lcom/android/server/infra/AbstractMasterSystemService;
 Lcom/android/server/infra/AbstractPerUserSystemService;
+Lcom/android/server/infra/FrameworkResourcesServiceNameResolver$1;
 Lcom/android/server/infra/FrameworkResourcesServiceNameResolver;
 Lcom/android/server/infra/SecureSettingsServiceNameResolver;
 Lcom/android/server/infra/ServiceNameResolver$NameResolverListener;
 Lcom/android/server/infra/ServiceNameResolver;
+Lcom/android/server/input/-$$Lambda$InputManagerService$M0FF5e8p6FGyFBNFwEYoVAKqrhQ;
+Lcom/android/server/input/-$$Lambda$InputManagerService$P986LfJHWb-Wytu9J9I0HQIpodU;
+Lcom/android/server/input/-$$Lambda$InputManagerService$e8CLEFczq_4kLYCG30uaJDgK3rA;
+Lcom/android/server/input/-$$Lambda$InputManagerService$o1rqNjeoTO6WW7Ut-lKtY_eyNc8;
+Lcom/android/server/input/ConfigurationProcessor;
 Lcom/android/server/input/InputManagerService$10;
 Lcom/android/server/input/InputManagerService$11;
+Lcom/android/server/input/InputManagerService$12;
 Lcom/android/server/input/InputManagerService$1;
 Lcom/android/server/input/InputManagerService$2;
+Lcom/android/server/input/InputManagerService$3;
+Lcom/android/server/input/InputManagerService$4;
 Lcom/android/server/input/InputManagerService$5;
+Lcom/android/server/input/InputManagerService$6;
+Lcom/android/server/input/InputManagerService$7;
+Lcom/android/server/input/InputManagerService$8;
 Lcom/android/server/input/InputManagerService$9;
 Lcom/android/server/input/InputManagerService$InputDevicesChangedListenerRecord;
+Lcom/android/server/input/InputManagerService$InputFilterHost;
 Lcom/android/server/input/InputManagerService$InputManagerHandler;
+Lcom/android/server/input/InputManagerService$InputMonitorHost;
+Lcom/android/server/input/InputManagerService$KeyboardLayoutDescriptor;
 Lcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;
 Lcom/android/server/input/InputManagerService$LocalService;
+Lcom/android/server/input/InputManagerService$TabletModeChangedListenerRecord;
+Lcom/android/server/input/InputManagerService$VibratorToken;
 Lcom/android/server/input/InputManagerService$WindowManagerCallbacks;
 Lcom/android/server/input/InputManagerService$WiredAccessoryCallbacks;
 Lcom/android/server/input/InputManagerService;
+Lcom/android/server/input/PersistentDataStore$1;
 Lcom/android/server/input/PersistentDataStore$InputDeviceState;
 Lcom/android/server/input/PersistentDataStore;
+Lcom/android/server/inputmethod/-$$Lambda$InputMethodManagerService$-9-NV9-J24Jr9m-wcbQnLu0hhjU;
+Lcom/android/server/inputmethod/-$$Lambda$InputMethodManagerService$MMyKF1SeotTOu5KNBltIfhafmb8;
+Lcom/android/server/inputmethod/-$$Lambda$InputMethodManagerService$SkFx0gCz5ltIh90rm1gl_N-wDWM;
+Lcom/android/server/inputmethod/-$$Lambda$InputMethodManagerService$Ufznp6QtlvKmc-UE2qM5QE0C6tE;
+Lcom/android/server/inputmethod/-$$Lambda$InputMethodManagerService$cbEjGgC40X7HsuUviRQkKGegQKg;
+Lcom/android/server/inputmethod/-$$Lambda$InputMethodManagerService$fNiO49PxZWEh32vCF6nuqhrDtOw;
+Lcom/android/server/inputmethod/-$$Lambda$InputMethodManagerService$i1_7vZfXoh5fbjEb2f7kLcAViOU;
 Lcom/android/server/inputmethod/-$$Lambda$InputMethodManagerService$oxpSIwENeEjKtHbxqUXuaXD0Gn8;
+Lcom/android/server/inputmethod/-$$Lambda$InputMethodManagerService$yBUcRNgC_2SdMjBHdbSjb2l9-Rw;
+Lcom/android/server/inputmethod/-$$Lambda$Z2NtIIfW6UZqUgiVBM1fNETGPS8;
 Lcom/android/server/inputmethod/AdditionalSubtypeUtils;
+Lcom/android/server/inputmethod/InputContentUriTokenHandler;
 Lcom/android/server/inputmethod/InputMethodManagerInternal$1;
+Lcom/android/server/inputmethod/InputMethodManagerInternal$InputMethodListListener;
 Lcom/android/server/inputmethod/InputMethodManagerInternal;
 Lcom/android/server/inputmethod/InputMethodManagerService$1;
 Lcom/android/server/inputmethod/InputMethodManagerService$2;
+Lcom/android/server/inputmethod/InputMethodManagerService$3;
+Lcom/android/server/inputmethod/InputMethodManagerService$4;
+Lcom/android/server/inputmethod/InputMethodManagerService$5;
+Lcom/android/server/inputmethod/InputMethodManagerService$ActivityViewInfo;
 Lcom/android/server/inputmethod/InputMethodManagerService$ClientDeathRecipient;
 Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;
 Lcom/android/server/inputmethod/InputMethodManagerService$DebugFlag;
+Lcom/android/server/inputmethod/InputMethodManagerService$DebugFlags;
 Lcom/android/server/inputmethod/InputMethodManagerService$HardKeyboardListener;
 Lcom/android/server/inputmethod/InputMethodManagerService$ImeDisplayValidator;
+Lcom/android/server/inputmethod/InputMethodManagerService$ImeSubtypeListAdapter;
 Lcom/android/server/inputmethod/InputMethodManagerService$ImmsBroadcastReceiverForAllUsers;
 Lcom/android/server/inputmethod/InputMethodManagerService$ImmsBroadcastReceiverForSystemUser;
+Lcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;
 Lcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;
 Lcom/android/server/inputmethod/InputMethodManagerService$Lifecycle;
 Lcom/android/server/inputmethod/InputMethodManagerService$LocalServiceImpl;
@@ -25799,10 +42365,12 @@
 Lcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;
 Lcom/android/server/inputmethod/InputMethodManagerService$SessionState;
 Lcom/android/server/inputmethod/InputMethodManagerService$SettingsObserver;
+Lcom/android/server/inputmethod/InputMethodManagerService$ShellCommandImpl;
 Lcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory$Entry;
 Lcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory;
 Lcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;
 Lcom/android/server/inputmethod/InputMethodManagerService;
+Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$1;
 Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;
 Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;
 Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;
@@ -25816,27 +42384,93 @@
 Lcom/android/server/inputmethod/InputMethodUtils;
 Lcom/android/server/inputmethod/LocaleUtils$LocaleExtractor;
 Lcom/android/server/inputmethod/LocaleUtils;
+Lcom/android/server/inputmethod/MultiClientInputMethodManagerService$Lifecycle;
+Lcom/android/server/integrity/-$$Lambda$AppIntegrityManagerServiceImpl$1$AQicMJqZVSufBnAD8HJ81gPtf7Y;
+Lcom/android/server/integrity/-$$Lambda$AppIntegrityManagerServiceImpl$mjGol37R4-F3yOIKIoAbde7yLk0;
+Lcom/android/server/integrity/-$$Lambda$AppIntegrityManagerServiceImpl$uoiTatxA4aGwrlfDx0m8FP_FtCo;
 Lcom/android/server/integrity/AppIntegrityManagerService;
 Lcom/android/server/integrity/AppIntegrityManagerServiceImpl$1;
 Lcom/android/server/integrity/AppIntegrityManagerServiceImpl;
+Lcom/android/server/integrity/IntegrityFileManager;
+Lcom/android/server/integrity/IntegrityUtils;
+Lcom/android/server/integrity/engine/-$$Lambda$I1P1n5zkAf1R76LNtLXDmbu8DuM;
+Lcom/android/server/integrity/engine/-$$Lambda$RuleEvaluationEngine$FG2m_EhrIHu0hqkBa5ri2WKDeuU;
+Lcom/android/server/integrity/engine/RuleEvaluationEngine;
+Lcom/android/server/integrity/engine/RuleEvaluator;
+Lcom/android/server/integrity/model/BitInputStream;
+Lcom/android/server/integrity/model/BitOutputStream;
+Lcom/android/server/integrity/model/BitTrackedInputStream;
+Lcom/android/server/integrity/model/ByteTrackedOutputStream;
+Lcom/android/server/integrity/model/IntegrityCheckResult$Effect;
+Lcom/android/server/integrity/model/IntegrityCheckResult;
+Lcom/android/server/integrity/model/RuleMetadata;
+Lcom/android/server/integrity/parser/BinaryFileOperations;
+Lcom/android/server/integrity/parser/LimitInputStream;
+Lcom/android/server/integrity/parser/RandomAccessInputStream;
+Lcom/android/server/integrity/parser/RandomAccessObject;
+Lcom/android/server/integrity/parser/RuleBinaryParser;
+Lcom/android/server/integrity/parser/RuleIndexRange;
+Lcom/android/server/integrity/parser/RuleIndexingController;
+Lcom/android/server/integrity/parser/RuleMetadataParser;
+Lcom/android/server/integrity/parser/RuleParseException;
+Lcom/android/server/integrity/parser/RuleParser;
+Lcom/android/server/integrity/serializer/-$$Lambda$RuleBinarySerializer$zQONQpJbeFriqC_n-BZzfoN_XZk;
+Lcom/android/server/integrity/serializer/-$$Lambda$UV1wDVoVlbcxpr8zevj_aMFtUGw;
+Lcom/android/server/integrity/serializer/RuleBinarySerializer;
+Lcom/android/server/integrity/serializer/RuleIndexingDetailsIdentifier;
+Lcom/android/server/integrity/serializer/RuleMetadataSerializer;
+Lcom/android/server/integrity/serializer/RuleSerializeException;
+Lcom/android/server/integrity/serializer/RuleSerializer;
+Lcom/android/server/lights/-$$Lambda$LightsService$LightImpl$0Tv691Vnph8HFbwps7sFDuvrhv0;
+Lcom/android/server/lights/-$$Lambda$LightsService$LightsManagerBinderService$8FmNnEggUQUk5aNo2TKU1g6SMDA;
 Lcom/android/server/lights/Light;
 Lcom/android/server/lights/LightsManager;
 Lcom/android/server/lights/LightsService$1;
 Lcom/android/server/lights/LightsService$2;
 Lcom/android/server/lights/LightsService$LightImpl;
+Lcom/android/server/lights/LightsService$LightsManagerBinderService$Session;
+Lcom/android/server/lights/LightsService$LightsManagerBinderService;
 Lcom/android/server/lights/LightsService;
+Lcom/android/server/lights/LogicalLight;
 Lcom/android/server/location/-$$Lambda$5U-_NhZgxqnYDZhpyacq4qBxh8k;
+Lcom/android/server/location/-$$Lambda$7zgzwOWgEFtr6DuyW9EYKot7bHU;
+Lcom/android/server/location/-$$Lambda$AbstractLocationProvider$3HtpTaeZPwUqdVjGVtj1KqJeRWw;
+Lcom/android/server/location/-$$Lambda$AbstractLocationProvider$7mcCTIOqvoJb2WvnMUdvA1Gicj4;
+Lcom/android/server/location/-$$Lambda$AbstractLocationProvider$Cz0MzfhYL-KpWWW0XmxsZTNwnI0;
+Lcom/android/server/location/-$$Lambda$AbstractLocationProvider$FRdWEbu93JPBpviTG1AkogCflNc;
+Lcom/android/server/location/-$$Lambda$AbstractLocationProvider$I29l5_Y-rKhaHygNa-fvF70mzA0;
+Lcom/android/server/location/-$$Lambda$AbstractLocationProvider$diUZq3K1KUpjC4EqB0SQY_fHHGM;
+Lcom/android/server/location/-$$Lambda$AbstractLocationProvider$kFGsZg9Hx50h6WYQeAMQABkRKNU;
+Lcom/android/server/location/-$$Lambda$AbstractLocationProvider$s_g7M1EFAxoisWC6LYYgN-hWTwc;
+Lcom/android/server/location/-$$Lambda$AbstractLocationProvider$tT5Ydpt2Xk0BtGNe34XjfHM0Bks;
+Lcom/android/server/location/-$$Lambda$AbstractLocationProvider$wZCGZbIMAspHRG64AcKlNjhWJEk;
 Lcom/android/server/location/-$$Lambda$ActivityRecognitionProxy$1$d2hvjp-Sk2zwb2N0mtEiubZ0jBE;
+Lcom/android/server/location/-$$Lambda$AppForegroundHelper$7asxY_maANt1D_AUTchqbCjktH0;
+Lcom/android/server/location/-$$Lambda$AppForegroundHelper$gltDhiWDJwfMNZ8gJdumXZH8_Hg;
+Lcom/android/server/location/-$$Lambda$ContextHubClientBroker$7Uwy0RpQUtRsDYbocrZ-WuXEVJQ;
+Lcom/android/server/location/-$$Lambda$ContextHubClientBroker$B9OxjmBvqPB3gqJ7VRMqEIw1cbY;
 Lcom/android/server/location/-$$Lambda$ContextHubClientBroker$CFacmt7807NhDDkp6CgbkeGnMvQ;
+Lcom/android/server/location/-$$Lambda$ContextHubClientBroker$LSvRo4l-aTVqttfWfOHNw7uyb3Q;
+Lcom/android/server/location/-$$Lambda$ContextHubClientBroker$NOnZ9Z0Vw11snzPmdVOE1pPrZ_4;
+Lcom/android/server/location/-$$Lambda$ContextHubClientBroker$P9IUEzaG4gP8jALe00of9jdlrGw;
+Lcom/android/server/location/-$$Lambda$ContextHubClientBroker$dhEakMhmIulMdmLMree-thpxPXU;
+Lcom/android/server/location/-$$Lambda$ContextHubClientBroker$euuUV-nmBEuGSQnmknMVANWcP88;
 Lcom/android/server/location/-$$Lambda$ContextHubClientBroker$iBGtMeLZ6k5dYJZb_VEUfBBYh9s;
 Lcom/android/server/location/-$$Lambda$ContextHubClientBroker$ykmLCadaR6NcV4R42i4K8zw4AWs;
 Lcom/android/server/location/-$$Lambda$ContextHubClientManager$VPD5ebhe8Z67S8QKuTR4KzeshK8;
+Lcom/android/server/location/-$$Lambda$ContextHubClientManager$WHzSH2f-YJ3FaiF7JXPP-7oX9EE;
+Lcom/android/server/location/-$$Lambda$ContextHubClientManager$aRAV9Gn84ao-4XOiN6tFizfZjHo;
 Lcom/android/server/location/-$$Lambda$ContextHubClientManager$f15OSYbsSONpkXn7GinnrBPeumw;
 Lcom/android/server/location/-$$Lambda$ContextHubClientManager$gN_vRogwyzr9qBjrQpKwwHzrFAo;
+Lcom/android/server/location/-$$Lambda$ContextHubService$CF_XmCHU9Bf2P5yun6nYrbm6Fpk;
 Lcom/android/server/location/-$$Lambda$ContextHubService$HPGvKluemttyVfAcSog-eXiJyHE;
 Lcom/android/server/location/-$$Lambda$ContextHubService$yrt4Ybb62ufyqsQQMJoTJ2JMw_4;
 Lcom/android/server/location/-$$Lambda$ContextHubTransactionManager$sHbjr4TaLEATkCX_yhD2L7ebuxE;
 Lcom/android/server/location/-$$Lambda$GeocoderProxy$jfLn3HL2BzwsKdoI6ZZeFfEe10k;
+Lcom/android/server/location/-$$Lambda$GeocoderProxy$l4GRjTzjcqxZJILrVLX5qayXBE0;
+Lcom/android/server/location/-$$Lambda$GeofenceProxy$GeofenceProxyServiceConnection$yPO-K2AUteHenF5MXfJoSnZURWI;
+Lcom/android/server/location/-$$Lambda$GeofenceProxy$GeofenceProxyServiceConnection$zlbg9IPCIuzTl4MNd_aO2VH84CU;
+Lcom/android/server/location/-$$Lambda$GeofenceProxy$hIfaTtsg4NqVfDRkaCxUg6rx90I;
 Lcom/android/server/location/-$$Lambda$GeofenceProxy$nfSKchjbT2ANT9GbYwyAcTjzBwQ;
 Lcom/android/server/location/-$$Lambda$GnssConfiguration$1$384RrX20Mx6OJsRiqsQcSxYdcZc;
 Lcom/android/server/location/-$$Lambda$GnssConfiguration$1$5tBf0Ru8L994vqKbXOeOBj2A-CA;
@@ -25845,36 +42479,72 @@
 Lcom/android/server/location/-$$Lambda$GnssConfiguration$1$aaV8BigB_1Oil1H82EHUb0zvWPo;
 Lcom/android/server/location/-$$Lambda$GnssConfiguration$1$rRu0NBMB8DgPt3DY5__6u_WNl7A;
 Lcom/android/server/location/-$$Lambda$GnssConfiguration$1$sKzdHBM7V7DxdhcWx1u8hipJYFo;
+Lcom/android/server/location/-$$Lambda$GnssLocationProvider$3-p6UujuU3pwMrR_jYW3uvQiXNM;
+Lcom/android/server/location/-$$Lambda$GnssLocationProvider$9MM35t5nvyDpqsn9eNpZKYoZgE4;
+Lcom/android/server/location/-$$Lambda$GnssLocationProvider$EdWkocFV52YPVPhXR-8dHVOO94k;
+Lcom/android/server/location/-$$Lambda$GnssLocationProvider$Mf3hti2G0vD9ZNlxSGs0q1o7fm4;
 Lcom/android/server/location/-$$Lambda$GnssLocationProvider$Q6M8z_ZBiD7BNs3kvNmVrqoHSng;
 Lcom/android/server/location/-$$Lambda$GnssLocationProvider$_xEBoJSNGaiPvO5kj-sfJB7tZYk;
+Lcom/android/server/location/-$$Lambda$GnssLocationProvider$adAUsgD5mK9uoxw0KEjaMYtp_Ro;
 Lcom/android/server/location/-$$Lambda$GnssLocationProvider$cSSwMZHkxTRwFeOp8gWaG_qGZ5A;
 Lcom/android/server/location/-$$Lambda$GnssLocationProvider$ecDMZdWsEh2URVlhxaEdh1Ifjc8;
+Lcom/android/server/location/-$$Lambda$GnssLocationProvider$iKRZ4-bb3otAVYEgv859Z4uWXAo;
 Lcom/android/server/location/-$$Lambda$GnssLocationProvider$jmXMIeP-Oz1yyVRIDOicfl2ucfI;
+Lcom/android/server/location/-$$Lambda$GnssLocationProvider$nZP4qF7PEET3HrkcVZAYhG3Bm0c;
+Lcom/android/server/location/-$$Lambda$GnssLocationProvider$oOmW6rOO6xCNWQPEjj4mX2PxDsI;
+Lcom/android/server/location/-$$Lambda$GnssLocationProvider$rgfO__O6aj3JBohawF88T-AfsaY;
+Lcom/android/server/location/-$$Lambda$GnssLocationProvider$tViaOq3LA5BWjgBCpCz5nJIfQdI;
+Lcom/android/server/location/-$$Lambda$GnssLocationProvider$yfrbw7SiyKDgHamyMz3bNbh47g8;
+Lcom/android/server/location/-$$Lambda$GnssLocationProvider$zDU-4stA5kbnbj2CmSK2PauyroM;
+Lcom/android/server/location/-$$Lambda$GnssMeasurementCorrectionsProvider$VUSA1ROgV90b6YMNVx53Jh7SSc8;
 Lcom/android/server/location/-$$Lambda$GnssMeasurementsProvider$Qlkb-fzzYggD17FlZmrylRJr2vE;
+Lcom/android/server/location/-$$Lambda$GnssNavigationMessageProvider$FPgP5DRMyheqM1CQ4z7jkoJwIFg;
 Lcom/android/server/location/-$$Lambda$GnssNetworkConnectivityHandler$YEGTN3glQ7Hr1FK-xXGbC4KcmJY;
 Lcom/android/server/location/-$$Lambda$GnssNetworkConnectivityHandler$aTyNcuGLHmJGtXKl9qoZpMmhfBY;
 Lcom/android/server/location/-$$Lambda$GnssNetworkConnectivityHandler$axxNnxmo3KqgsSDot69yokC4KVE;
+Lcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$0MNjUouf1HJVcFD10rzoJIkzCrw;
 Lcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$6s2HBSMgP5pXrugfCvtIf9QHndI;
 Lcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$AtHI8E6PAjonHH1N0ZGabW0VF6c;
 Lcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$H9Tg_OtCE9BSJiAQYs_ITHFpiHU;
+Lcom/android/server/location/-$$Lambda$GnssStatusListenerHelper$WA8CUTRQeFIyZhMJFtziHItmYNA;
+Lcom/android/server/location/-$$Lambda$GnssVisibilityControl$3hQO4NR8YgRdTo_ZUTbEKP4-TIU;
 Lcom/android/server/location/-$$Lambda$GnssVisibilityControl$FLGfeDaxF8J3CE9m-TcOXh5j6ow;
 Lcom/android/server/location/-$$Lambda$GnssVisibilityControl$WNe_V-oiVnZtOTinPJBWWgUSctQ;
 Lcom/android/server/location/-$$Lambda$GnssVisibilityControl$YLPk0FuuEUrv7lfRNYvhNb6uKic;
 Lcom/android/server/location/-$$Lambda$GnssVisibilityControl$cq648s0kLZajRjefd-RR_iUZoiQ;
 Lcom/android/server/location/-$$Lambda$GnssVisibilityControl$ezKd0QctWKgyrEvPFQUXWNBxlNg;
+Lcom/android/server/location/-$$Lambda$GnssVisibilityControl$nmfWkQtbYmj8KoGmFncGZnuzWS0;
+Lcom/android/server/location/-$$Lambda$GnssVisibilityControl$rgPyvoFYNphS-9zV3fbeQCNLxa8;
+Lcom/android/server/location/-$$Lambda$HardwareActivityRecognitionProxy$Z7jbekKm-LTVAz47zPN0h1VYfjo;
+Lcom/android/server/location/-$$Lambda$LocationProviderProxy$-2Oydd5e411MBMGt3B1yw8f6h-Y;
 Lcom/android/server/location/-$$Lambda$LocationProviderProxy$2$QT3uzVX4fLIc1b7F_cP9P1hzluA;
+Lcom/android/server/location/-$$Lambda$LocationProviderProxy$26d2FFhpYis1Ws92o2khDXr7LzU;
+Lcom/android/server/location/-$$Lambda$LocationProviderProxy$3wGALcuMWaMkkBRL1d0LQ_QqoCk;
+Lcom/android/server/location/-$$Lambda$LocationProviderProxy$DolK0RPdYvNbDbCY51eoLe2SJLw;
+Lcom/android/server/location/-$$Lambda$LocationProviderProxy$Uez3oEpu2OhUykPUhHZnDv6UWJI;
+Lcom/android/server/location/-$$Lambda$LocationProviderProxy$yxlgGzrAmph8SqKppGMl5iNhd-0;
 Lcom/android/server/location/-$$Lambda$LocationSettingsStore$FSM6khNR8gXmFeTsAWvdXgk6aYY;
 Lcom/android/server/location/-$$Lambda$LocationSettingsStore$k_IS3lfsliNZ8moQnq2NpYztkWE;
 Lcom/android/server/location/-$$Lambda$NtpTimeHelper$xPxgficKWFyuwUj60WMuiGEEjdg;
 Lcom/android/server/location/-$$Lambda$NtpTimeHelper$xWqlqJuq4jBJ5-xhFLCwEKGVB0k;
 Lcom/android/server/location/-$$Lambda$RemoteListenerHelper$0Rlnad83RE1JdiVK0ULOLm530JM;
+Lcom/android/server/location/-$$Lambda$SettingsHelper$DVmNGa9ypltgL35WVwJuSTIxRS8;
+Lcom/android/server/location/-$$Lambda$SettingsHelper$Ez8giHaZAPYwS7zICeUtrlXPpBo;
+Lcom/android/server/location/-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo;
+Lcom/android/server/location/AbstractLocationProvider$1;
+Lcom/android/server/location/AbstractLocationProvider$InternalState;
+Lcom/android/server/location/AbstractLocationProvider$Listener;
 Lcom/android/server/location/AbstractLocationProvider$LocationProviderManager;
+Lcom/android/server/location/AbstractLocationProvider$State;
 Lcom/android/server/location/AbstractLocationProvider;
 Lcom/android/server/location/ActivityRecognitionProxy$1;
 Lcom/android/server/location/ActivityRecognitionProxy;
+Lcom/android/server/location/AppForegroundHelper$AppForegroundListener;
+Lcom/android/server/location/AppForegroundHelper;
 Lcom/android/server/location/CallerIdentity;
 Lcom/android/server/location/ComprehensiveCountryDetector$1;
 Lcom/android/server/location/ComprehensiveCountryDetector$2;
+Lcom/android/server/location/ComprehensiveCountryDetector$3;
 Lcom/android/server/location/ComprehensiveCountryDetector$4;
 Lcom/android/server/location/ComprehensiveCountryDetector;
 Lcom/android/server/location/ContextHubClientBroker$CallbackConsumer;
@@ -25893,16 +42563,20 @@
 Lcom/android/server/location/ContextHubServiceUtil;
 Lcom/android/server/location/ContextHubTransactionManager$1;
 Lcom/android/server/location/ContextHubTransactionManager$2;
+Lcom/android/server/location/ContextHubTransactionManager$3;
+Lcom/android/server/location/ContextHubTransactionManager$4;
 Lcom/android/server/location/ContextHubTransactionManager$5;
 Lcom/android/server/location/ContextHubTransactionManager;
 Lcom/android/server/location/CountryDetectorBase;
 Lcom/android/server/location/ExponentialBackOff;
 Lcom/android/server/location/GeocoderProxy;
+Lcom/android/server/location/GeofenceManager$1;
 Lcom/android/server/location/GeofenceManager$GeofenceHandler;
 Lcom/android/server/location/GeofenceManager;
 Lcom/android/server/location/GeofenceProxy$1;
 Lcom/android/server/location/GeofenceProxy$GeofenceProxyServiceConnection;
 Lcom/android/server/location/GeofenceProxy;
+Lcom/android/server/location/GeofenceState;
 Lcom/android/server/location/GnssBatchingProvider$GnssBatchingProviderNative;
 Lcom/android/server/location/GnssBatchingProvider;
 Lcom/android/server/location/GnssCapabilitiesProvider;
@@ -25910,6 +42584,8 @@
 Lcom/android/server/location/GnssConfiguration$HalInterfaceVersion;
 Lcom/android/server/location/GnssConfiguration$SetCarrierProperty;
 Lcom/android/server/location/GnssConfiguration;
+Lcom/android/server/location/GnssGeofenceProvider$1;
+Lcom/android/server/location/GnssGeofenceProvider$GeofenceEntry;
 Lcom/android/server/location/GnssGeofenceProvider$GnssGeofenceProviderNative;
 Lcom/android/server/location/GnssGeofenceProvider;
 Lcom/android/server/location/GnssLocationProvider$1;
@@ -25928,6 +42604,7 @@
 Lcom/android/server/location/GnssLocationProvider$LocationExtras;
 Lcom/android/server/location/GnssLocationProvider$NetworkLocationListener;
 Lcom/android/server/location/GnssLocationProvider$ProviderHandler;
+Lcom/android/server/location/GnssLocationProvider$SvStatusInfo;
 Lcom/android/server/location/GnssLocationProvider;
 Lcom/android/server/location/GnssMeasurementCorrectionsProvider$GnssMeasurementCorrectionsProviderNative;
 Lcom/android/server/location/GnssMeasurementCorrectionsProvider;
@@ -25940,6 +42617,7 @@
 Lcom/android/server/location/GnssNetworkConnectivityHandler$1;
 Lcom/android/server/location/GnssNetworkConnectivityHandler$2;
 Lcom/android/server/location/GnssNetworkConnectivityHandler$GnssNetworkListener;
+Lcom/android/server/location/GnssNetworkConnectivityHandler$NetworkAttributes;
 Lcom/android/server/location/GnssNetworkConnectivityHandler;
 Lcom/android/server/location/GnssPositionMode;
 Lcom/android/server/location/GnssSatelliteBlacklistHelper$1;
@@ -25947,18 +42625,27 @@
 Lcom/android/server/location/GnssSatelliteBlacklistHelper;
 Lcom/android/server/location/GnssStatusListenerHelper;
 Lcom/android/server/location/GnssVisibilityControl$1;
+Lcom/android/server/location/GnssVisibilityControl$NfwNotification;
+Lcom/android/server/location/GnssVisibilityControl$ProxyAppState;
 Lcom/android/server/location/GnssVisibilityControl;
+Lcom/android/server/location/GpsPsdsDownloader;
+Lcom/android/server/location/HardwareActivityRecognitionProxy;
 Lcom/android/server/location/LocationBasedCountryDetector$1;
 Lcom/android/server/location/LocationBasedCountryDetector$3;
 Lcom/android/server/location/LocationBasedCountryDetector;
 Lcom/android/server/location/LocationFudger$1;
 Lcom/android/server/location/LocationFudger;
+Lcom/android/server/location/LocationPermissionUtil;
 Lcom/android/server/location/LocationProviderProxy$1;
 Lcom/android/server/location/LocationProviderProxy$2;
 Lcom/android/server/location/LocationProviderProxy;
+Lcom/android/server/location/LocationRequestStatistics$1;
 Lcom/android/server/location/LocationRequestStatistics$PackageProviderKey;
 Lcom/android/server/location/LocationRequestStatistics$PackageStatistics;
+Lcom/android/server/location/LocationRequestStatistics$RequestSummary;
+Lcom/android/server/location/LocationRequestStatistics$RequestSummaryLimitedHistory;
 Lcom/android/server/location/LocationRequestStatistics;
+Lcom/android/server/location/LocationSettingsStore$1;
 Lcom/android/server/location/LocationSettingsStore$GlobalSettingChangedListener;
 Lcom/android/server/location/LocationSettingsStore$IntegerSecureSetting;
 Lcom/android/server/location/LocationSettingsStore$LongGlobalSetting;
@@ -25968,41 +42655,91 @@
 Lcom/android/server/location/LocationSettingsStore$UserSettingChangedListener;
 Lcom/android/server/location/LocationSettingsStore;
 Lcom/android/server/location/LocationUsageLogger;
+Lcom/android/server/location/MockProvider;
+Lcom/android/server/location/MockableLocationProvider$1;
+Lcom/android/server/location/MockableLocationProvider$ListenerWrapper;
+Lcom/android/server/location/MockableLocationProvider;
 Lcom/android/server/location/NanoAppStateManager;
 Lcom/android/server/location/NtpTimeHelper$InjectNtpTimeCallback;
 Lcom/android/server/location/NtpTimeHelper;
 Lcom/android/server/location/PassiveProvider;
 Lcom/android/server/location/RemoteListenerHelper$1;
 Lcom/android/server/location/RemoteListenerHelper$HandlerRunnable;
+Lcom/android/server/location/RemoteListenerHelper$IdentifiedListener;
 Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;
 Lcom/android/server/location/RemoteListenerHelper;
+Lcom/android/server/location/SettingsHelper$1;
+Lcom/android/server/location/SettingsHelper$GlobalSettingChangedListener;
+Lcom/android/server/location/SettingsHelper$IntegerSecureSetting;
+Lcom/android/server/location/SettingsHelper$LongGlobalSetting;
+Lcom/android/server/location/SettingsHelper$ObservingSetting;
+Lcom/android/server/location/SettingsHelper$StringListCachedSecureSetting;
+Lcom/android/server/location/SettingsHelper$StringSetCachedGlobalSetting;
+Lcom/android/server/location/SettingsHelper$UserSettingChangedListener;
+Lcom/android/server/location/SettingsHelper;
+Lcom/android/server/location/UserInfoHelper$1;
+Lcom/android/server/location/UserInfoHelper$UserChangedListener;
+Lcom/android/server/location/UserInfoHelper;
+Lcom/android/server/location/UserInfoStore$1;
+Lcom/android/server/location/UserInfoStore$UserChangedListener;
+Lcom/android/server/location/UserInfoStore;
+Lcom/android/server/location/gnss/-$$Lambda$139-CBKLG1EL-wg1T1KP8tgmIKg;
+Lcom/android/server/location/gnss/-$$Lambda$FxAranobP2o6eVcPEOp8tzZYyLY;
+Lcom/android/server/location/gnss/-$$Lambda$GnssManagerService$ADNn_wSsxu1352rEzpl8bNWHHIs;
+Lcom/android/server/location/gnss/-$$Lambda$GnssManagerService$UdLm78gS4fBvCkzR5_od9MCx3_M;
+Lcom/android/server/location/gnss/-$$Lambda$GnssManagerService$Xb7pwmWy3YdCevK1MZL3c-zTOco;
+Lcom/android/server/location/gnss/-$$Lambda$GnssManagerService$de6v4jWKxQDC9J4FdGGrfKg2phA;
+Lcom/android/server/location/gnss/-$$Lambda$HALkbmbB2IPr_wdFkPjiIWCzJsY;
+Lcom/android/server/location/gnss/-$$Lambda$WsssLeTVg_jaQ16K-SvqbRc0TV8;
+Lcom/android/server/location/gnss/-$$Lambda$hu439-4T6QBT8QyZnspMtXqICWs;
+Lcom/android/server/location/gnss/-$$Lambda$qoNbXUvSu3yuTPVXPUfZW_HDrTQ;
+Lcom/android/server/location/gnss/GnssManagerService;
+Lcom/android/server/locksettings/-$$Lambda$LockSettingsService$25VQEBWGuGqdc4Xjn9m8HXt9ZTI;
+Lcom/android/server/locksettings/-$$Lambda$LockSettingsService$3iCV7W6YQrxOv5dDGr5Cx3toXr0;
+Lcom/android/server/locksettings/-$$Lambda$LockSettingsService$6ZJNEvi0AXsP3F_UD8F01RaIg3M;
+Lcom/android/server/locksettings/-$$Lambda$LockSettingsService$uLUdo5pAFhnR0hn-L5FUgWTjl70;
 Lcom/android/server/locksettings/-$$Lambda$SyntheticPasswordManager$WjMV-qfQ1YUbeAiLzyAhyepqPFI;
 Lcom/android/server/locksettings/-$$Lambda$SyntheticPasswordManager$aWnbfYziDTrRrLqWFePMTj6-dy0;
 Lcom/android/server/locksettings/LockSettingsService$1;
 Lcom/android/server/locksettings/LockSettingsService$2;
 Lcom/android/server/locksettings/LockSettingsService$3;
+Lcom/android/server/locksettings/LockSettingsService$4;
+Lcom/android/server/locksettings/LockSettingsService$5;
 Lcom/android/server/locksettings/LockSettingsService$DeviceProvisionedObserver;
 Lcom/android/server/locksettings/LockSettingsService$GateKeeperDiedRecipient;
 Lcom/android/server/locksettings/LockSettingsService$Injector$1;
 Lcom/android/server/locksettings/LockSettingsService$Injector;
 Lcom/android/server/locksettings/LockSettingsService$Lifecycle;
 Lcom/android/server/locksettings/LockSettingsService$LocalService;
+Lcom/android/server/locksettings/LockSettingsService$PendingResetLockout;
+Lcom/android/server/locksettings/LockSettingsService$RebootEscrowCallbacks;
 Lcom/android/server/locksettings/LockSettingsService$SynchronizedStrongAuthTracker;
 Lcom/android/server/locksettings/LockSettingsService;
+Lcom/android/server/locksettings/LockSettingsShellCommand;
+Lcom/android/server/locksettings/LockSettingsStorage$1;
 Lcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;
 Lcom/android/server/locksettings/LockSettingsStorage$Cache;
 Lcom/android/server/locksettings/LockSettingsStorage$Callback;
 Lcom/android/server/locksettings/LockSettingsStorage$CredentialHash;
 Lcom/android/server/locksettings/LockSettingsStorage$DatabaseHelper;
+Lcom/android/server/locksettings/LockSettingsStorage$PersistentData;
 Lcom/android/server/locksettings/LockSettingsStorage;
 Lcom/android/server/locksettings/LockSettingsStrongAuth$1;
 Lcom/android/server/locksettings/LockSettingsStrongAuth$StrongAuthTimeoutAlarmListener;
 Lcom/android/server/locksettings/LockSettingsStrongAuth;
+Lcom/android/server/locksettings/ManagedProfilePasswordCache;
 Lcom/android/server/locksettings/PasswordSlotManager;
+Lcom/android/server/locksettings/RebootEscrowData;
+Lcom/android/server/locksettings/RebootEscrowKey;
+Lcom/android/server/locksettings/RebootEscrowManager$Callbacks;
+Lcom/android/server/locksettings/RebootEscrowManager$Injector;
+Lcom/android/server/locksettings/RebootEscrowManager;
 Lcom/android/server/locksettings/SP800Derive;
 Lcom/android/server/locksettings/SyntheticPasswordCrypto;
+Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationResult;
 Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;
 Lcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;
+Lcom/android/server/locksettings/SyntheticPasswordManager$TokenData;
 Lcom/android/server/locksettings/SyntheticPasswordManager;
 Lcom/android/server/locksettings/recoverablekeystore/InsecureUserException;
 Lcom/android/server/locksettings/recoverablekeystore/KeyStoreProxy;
@@ -26028,35 +42765,71 @@
 Lcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;
 Lcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotParserException;
 Lcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializer;
+Lcom/android/server/locksettings/recoverablekeystore/storage/-$$Lambda$RecoverableKeyStoreDb$knfkhmVPS_11tGWkGt87bH4xjYg;
+Lcom/android/server/locksettings/recoverablekeystore/storage/-$$Lambda$RecoverySessionStorage$1ayqf2qqdJH00fvbhBUKWso4cdc;
 Lcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;
 Lcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager$1;
 Lcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;
 Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;
 Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelper;
+Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage$Entry;
 Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage;
 Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$-0XFotLxZ8ck40Oe5LDds6S_Pxo;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$1JbhLbgzmpRe6Fh4FAkmF-x3WgE;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$1NkSmUAo7bqq-q9MYAtjjxnlxC0;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$4rh7ewjqL3KNJanh6qyjXqKofCc;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$65zW92mHmIRd5JBz9e4pjRubny8;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$6Riyrjlduscvk3ao_6ULVEacHqc;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$75Q69r2Bn2bjiCy1-gHOQ0wCMNM;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$BFwvUEm4uRPirj-zTGfOx3o1w-Y;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$G_zjJhMcdTbGVz2DuKqcOJmX0OU;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$M94FQn7LGXpV3kApGJU9Bnp0RRk;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$P6mZgg0_B1MQK6U6uDI4V8JUyy8;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$QRE0IkqsUP_uX7kD-TOn1pE7uWc;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$SDO87Krd1n1doHne7Euurb1tZWQ;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$UWIms6pHB4Lwnsbfj-b_9WI7INk;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$X4W6vrpULp0aMfJC9PBBz3m1MyM;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$XJkTc5hm1mMtQKQ92wWBqMIUe2M;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$aadBHil74jOePCRh7oROReTvBKI;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$fhyQV2I26eJq3ZCV6fT5gQCAC14;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$kz96Yiuiohyo_33N-2dNHLJ62qY;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$oNAsUj79BHHX4XoiqoHDYMKvTZc;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$xwrgJ0QIcy6O_xCDFBt_XQNI5DY;
+Lcom/android/server/media/-$$Lambda$MediaRouter2ServiceImpl$yPZ2ZN9TKRG_PR_HKi8QWy7YTV0;
 Lcom/android/server/media/-$$Lambda$MediaSessionService$za_9dlUSlnaiZw6eCdPVEZq0XLw;
+Lcom/android/server/media/AudioPlayerStateMonitor$1;
 Lcom/android/server/media/AudioPlayerStateMonitor$AudioManagerPlaybackListener;
 Lcom/android/server/media/AudioPlayerStateMonitor$MessageHandler;
 Lcom/android/server/media/AudioPlayerStateMonitor$OnAudioPlayerActiveStateChangedListener;
 Lcom/android/server/media/AudioPlayerStateMonitor;
 Lcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;
 Lcom/android/server/media/MediaResourceMonitorService;
+Lcom/android/server/media/MediaRoute2Provider$Callback;
+Lcom/android/server/media/MediaRoute2Provider;
 Lcom/android/server/media/MediaRoute2ProviderWatcher$1;
 Lcom/android/server/media/MediaRoute2ProviderWatcher$2;
+Lcom/android/server/media/MediaRoute2ProviderWatcher$Callback;
 Lcom/android/server/media/MediaRoute2ProviderWatcher;
+Lcom/android/server/media/MediaRouter2ServiceImpl$Client2Record;
+Lcom/android/server/media/MediaRouter2ServiceImpl$ManagerRecord;
+Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;
+Lcom/android/server/media/MediaRouter2ServiceImpl$UserRecord;
 Lcom/android/server/media/MediaRouter2ServiceImpl;
 Lcom/android/server/media/MediaRouterService$1$1;
 Lcom/android/server/media/MediaRouterService$1;
 Lcom/android/server/media/MediaRouterService$2;
 Lcom/android/server/media/MediaRouterService$3;
+Lcom/android/server/media/MediaRouterService$ClientGroup;
 Lcom/android/server/media/MediaRouterService$ClientRecord;
 Lcom/android/server/media/MediaRouterService$MediaRouterServiceBroadcastReceiver;
 Lcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;
+Lcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;
 Lcom/android/server/media/MediaRouterService$UserHandler;
 Lcom/android/server/media/MediaRouterService$UserRecord$1;
 Lcom/android/server/media/MediaRouterService$UserRecord;
 Lcom/android/server/media/MediaRouterService;
+Lcom/android/server/media/MediaSession2Record;
 Lcom/android/server/media/MediaSessionRecord$2;
 Lcom/android/server/media/MediaSessionRecord$3;
 Lcom/android/server/media/MediaSessionRecord$ControllerStub;
@@ -26064,9 +42837,12 @@
 Lcom/android/server/media/MediaSessionRecord$SessionCb;
 Lcom/android/server/media/MediaSessionRecord$SessionStub;
 Lcom/android/server/media/MediaSessionRecord;
+Lcom/android/server/media/MediaSessionRecordImpl;
 Lcom/android/server/media/MediaSessionService$1;
 Lcom/android/server/media/MediaSessionService$Controller2Callback;
 Lcom/android/server/media/MediaSessionService$FullUserRecord$CallbackRecord;
+Lcom/android/server/media/MediaSessionService$FullUserRecord$OnMediaKeyEventDispatchedListenerRecord;
+Lcom/android/server/media/MediaSessionService$FullUserRecord$OnMediaKeyEventSessionChangedListenerRecord;
 Lcom/android/server/media/MediaSessionService$FullUserRecord;
 Lcom/android/server/media/MediaSessionService$MessageHandler;
 Lcom/android/server/media/MediaSessionService$Session2TokensListenerRecord;
@@ -26089,18 +42865,36 @@
 Lcom/android/server/media/RemoteDisplayProviderWatcher$2;
 Lcom/android/server/media/RemoteDisplayProviderWatcher$Callback;
 Lcom/android/server/media/RemoteDisplayProviderWatcher;
+Lcom/android/server/media/SystemMediaRoute2Provider;
 Lcom/android/server/media/projection/MediaProjectionManagerService$1;
 Lcom/android/server/media/projection/MediaProjectionManagerService$2;
 Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;
 Lcom/android/server/media/projection/MediaProjectionManagerService$CallbackDelegate;
+Lcom/android/server/media/projection/MediaProjectionManagerService$ClientStopCallback;
+Lcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;
 Lcom/android/server/media/projection/MediaProjectionManagerService$MediaRouterCallback;
+Lcom/android/server/media/projection/MediaProjectionManagerService$WatcherStartCallback;
+Lcom/android/server/media/projection/MediaProjectionManagerService$WatcherStopCallback;
 Lcom/android/server/media/projection/MediaProjectionManagerService;
 Lcom/android/server/midi/MidiService$1;
+Lcom/android/server/midi/MidiService$Client;
+Lcom/android/server/midi/MidiService$Device;
 Lcom/android/server/midi/MidiService$Lifecycle;
 Lcom/android/server/midi/MidiService;
+Lcom/android/server/net/-$$Lambda$IpConfigStore$O2tmBZ0pfEt3xGZYo5ZrQq4edzM;
+Lcom/android/server/net/-$$Lambda$IpConfigStore$rFY3yG3j6RGRgrQey7yYfi0Yze0;
 Lcom/android/server/net/-$$Lambda$NetworkPolicyManagerService$HDTUqowtgL-W_V0Kq6psXLWC9ws;
+Lcom/android/server/net/-$$Lambda$NetworkPolicyManagerService$lv2qqWetKVoJzbe7z3LT5idTu54;
+Lcom/android/server/net/-$$Lambda$NetworkStatsService$KVH4Y9nH53_gEfrhunDFp_O6ExY;
+Lcom/android/server/net/-$$Lambda$NetworkStatsService$NetworkStatsManagerInternalImpl$5TwpV7cRVx_8Ch3sTJ1XxcGYaFo;
+Lcom/android/server/net/-$$Lambda$NetworkStatsService$rLCnfQluyJtbXZ2vSn6SQAdNPMc;
+Lcom/android/server/net/-$$Lambda$NetworkStatsService$xfTbcb80CcmFJlvul1xYQmewxlg;
+Lcom/android/server/net/DelayedDiskWrite$1;
+Lcom/android/server/net/DelayedDiskWrite$Writer;
 Lcom/android/server/net/DelayedDiskWrite;
+Lcom/android/server/net/IpConfigStore$1;
 Lcom/android/server/net/IpConfigStore;
+Lcom/android/server/net/LockdownVpnTracker$1;
 Lcom/android/server/net/LockdownVpnTracker;
 Lcom/android/server/net/NetworkIdentitySet;
 Lcom/android/server/net/NetworkPolicyLogger$Data;
@@ -26127,7 +42921,9 @@
 Lcom/android/server/net/NetworkPolicyManagerService$9;
 Lcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener;
 Lcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;
+Lcom/android/server/net/NetworkPolicyManagerService$NotificationId;
 Lcom/android/server/net/NetworkPolicyManagerService;
+Lcom/android/server/net/NetworkPolicyManagerShellCommand;
 Lcom/android/server/net/NetworkStatsAccess;
 Lcom/android/server/net/NetworkStatsCollection$Key;
 Lcom/android/server/net/NetworkStatsCollection;
@@ -26137,6 +42933,7 @@
 Lcom/android/server/net/NetworkStatsObservers$NetworkUsageRequestInfo;
 Lcom/android/server/net/NetworkStatsObservers$RequestInfo;
 Lcom/android/server/net/NetworkStatsObservers$StatsContext;
+Lcom/android/server/net/NetworkStatsObservers$UserUsageRequestInfo;
 Lcom/android/server/net/NetworkStatsObservers;
 Lcom/android/server/net/NetworkStatsRecorder$CombiningRewriter;
 Lcom/android/server/net/NetworkStatsRecorder$RemoveUidRewriter;
@@ -26153,29 +42950,58 @@
 Lcom/android/server/net/NetworkStatsService$HandlerCallback;
 Lcom/android/server/net/NetworkStatsService$NetworkStatsHandler;
 Lcom/android/server/net/NetworkStatsService$NetworkStatsManagerInternalImpl;
+Lcom/android/server/net/NetworkStatsService$NetworkStatsProviderCallbackImpl;
 Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
 Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings;
+Lcom/android/server/net/NetworkStatsService$ThrowingConsumer;
 Lcom/android/server/net/NetworkStatsService;
 Lcom/android/server/net/watchlist/-$$Lambda$WatchlistLoggingHandler$GBD0dX6RhipHIkM0Z_B5jLlwfHQ;
 Lcom/android/server/net/watchlist/DigestUtils;
+Lcom/android/server/net/watchlist/HarmfulCrcs;
 Lcom/android/server/net/watchlist/HarmfulDigests;
 Lcom/android/server/net/watchlist/NetworkWatchlistService$1;
 Lcom/android/server/net/watchlist/NetworkWatchlistService$Lifecycle;
 Lcom/android/server/net/watchlist/NetworkWatchlistService;
+Lcom/android/server/net/watchlist/NetworkWatchlistShellCommand;
 Lcom/android/server/net/watchlist/PrivacyUtils;
 Lcom/android/server/net/watchlist/ReportEncoder;
 Lcom/android/server/net/watchlist/ReportWatchlistJobService;
+Lcom/android/server/net/watchlist/WatchlistConfig$CrcShaDigests;
 Lcom/android/server/net/watchlist/WatchlistConfig;
 Lcom/android/server/net/watchlist/WatchlistLoggingHandler;
 Lcom/android/server/net/watchlist/WatchlistReportDbHelper$AggregatedResult;
 Lcom/android/server/net/watchlist/WatchlistReportDbHelper;
 Lcom/android/server/net/watchlist/WatchlistSettings;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$1$xhbVsydQBNNW5m21WjLTPrHQojA;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$10$BRIIoO5T43uig1Sv3P_yA2lc3LA;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$11$JotEN8cxCghuwRUNQKNwudTtDmM;
 Lcom/android/server/notification/-$$Lambda$NotificationManagerService$11$zVdn9N0ybkMxz8xM8Qa1AXowlic;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$12$-k8J5tgk6UDzy6Im2nYiWZgVEDI;
 Lcom/android/server/notification/-$$Lambda$NotificationManagerService$12gEiRp5yhg_vLn2NsMtnAkm3GI;
 Lcom/android/server/notification/-$$Lambda$NotificationManagerService$14$hWnH6mjUAxwVmpU3QRoPHh5_FyI;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$15$wXaTmmz_lG6grUqU8upk0686eXA;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$1IFJYiXNBcQVsabIke0xY_TgCZI;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$CancelNotificationRunnable$1i8BOFS2Ap_BvazcwqssFxW6U1U;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$-frFvBh01OajP_vj8nGNvXvmX1Y;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$2uJN0X0VDgKmWRoJqYsux0bhlYo;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$3ktx5hfF9rabi25qaQLZ-YvqPO4;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$6E04T6AkRfKEIjCw7jopFAFGv30;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$FsWpf1cmSi9GG7O4rBv1eLAEE9M;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$S2EUT9RRW0P4hWLU4YD7mrnGPII;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$fguXa8ZWUwjg4Css0w9IvLwqTno;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$hdUZ_hmwLutGkIKdq7dHKjQLP4E;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$j__6VKF3Ej58Ecwq9KDrcYMRydI;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$ou_FTabXQDrMmZWvZYfT09jSrKI;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$pzk58E_uhN8zWEPqtMQoUZpAM4k;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$qNPzonSecZ4lX0Og0m8NERBS_UQ;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationAssistants$uDzVB3NwVCerv0Z5si1fGXZkZu4;
 Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$3bretMyG2YyNFKU5plLQgmxuGr0;
 Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$Srt8NNqA1xJUAp_7nDU6CBZJm_0;
 Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$T5BM1IF40aMGtqZZRr6BWGjzNxA;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$NotificationListeners$Uven29tL9-XX5tMiwAHBwNumQKc;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$msGTh8UV2euOI6xhjY-rx_tZTLM;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$qSGWKI1fXQ1cTJ2fD072f_33txY;
+Lcom/android/server/notification/-$$Lambda$NotificationManagerService$qbzDjihCkTumQH-EnAW4i5wobvM;
 Lcom/android/server/notification/-$$Lambda$NotificationRecord$XgkrZGcjOHPHem34oE9qLGy3siA;
 Lcom/android/server/notification/-$$Lambda$SnoozeHelper$333G5Hgba3G7RU9lYp0HmgKJBvA;
 Lcom/android/server/notification/-$$Lambda$SnoozeHelper$uY_yjjODxoDQVadkBTGNFqh7pco;
@@ -26187,9 +43013,11 @@
 Lcom/android/server/notification/CalendarTracker$Callback;
 Lcom/android/server/notification/CalendarTracker$CheckEventResult;
 Lcom/android/server/notification/CalendarTracker;
+Lcom/android/server/notification/ConditionProviders$1;
 Lcom/android/server/notification/ConditionProviders$Callback;
 Lcom/android/server/notification/ConditionProviders$ConditionRecord;
 Lcom/android/server/notification/ConditionProviders;
+Lcom/android/server/notification/CountdownConditionProvider$1;
 Lcom/android/server/notification/CountdownConditionProvider$Receiver;
 Lcom/android/server/notification/CountdownConditionProvider;
 Lcom/android/server/notification/CriticalNotificationExtractor;
@@ -26202,6 +43030,7 @@
 Lcom/android/server/notification/GroupHelper$Callback;
 Lcom/android/server/notification/GroupHelper;
 Lcom/android/server/notification/ImportanceExtractor;
+Lcom/android/server/notification/InlineReplyUriRecord;
 Lcom/android/server/notification/ManagedServices$1$1;
 Lcom/android/server/notification/ManagedServices$1;
 Lcom/android/server/notification/ManagedServices$Config;
@@ -26213,6 +43042,10 @@
 Lcom/android/server/notification/NotificationComparator$1;
 Lcom/android/server/notification/NotificationComparator;
 Lcom/android/server/notification/NotificationDelegate;
+Lcom/android/server/notification/NotificationHistoryDatabase$FileAttrProvider;
+Lcom/android/server/notification/NotificationHistoryDatabase$NotificationHistoryFileAttrProvider;
+Lcom/android/server/notification/NotificationHistoryDatabase;
+Lcom/android/server/notification/NotificationHistoryDatabaseFactory;
 Lcom/android/server/notification/NotificationHistoryManager$SettingsObserver;
 Lcom/android/server/notification/NotificationHistoryManager;
 Lcom/android/server/notification/NotificationIntrusivenessExtractor$1;
@@ -26220,11 +43053,14 @@
 Lcom/android/server/notification/NotificationManagerInternal;
 Lcom/android/server/notification/NotificationManagerService$10$1;
 Lcom/android/server/notification/NotificationManagerService$10;
+Lcom/android/server/notification/NotificationManagerService$11$1;
 Lcom/android/server/notification/NotificationManagerService$11;
+Lcom/android/server/notification/NotificationManagerService$12;
 Lcom/android/server/notification/NotificationManagerService$13;
 Lcom/android/server/notification/NotificationManagerService$14;
 Lcom/android/server/notification/NotificationManagerService$15;
 Lcom/android/server/notification/NotificationManagerService$16;
+Lcom/android/server/notification/NotificationManagerService$17;
 Lcom/android/server/notification/NotificationManagerService$1;
 Lcom/android/server/notification/NotificationManagerService$2;
 Lcom/android/server/notification/NotificationManagerService$3;
@@ -26240,6 +43076,7 @@
 Lcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;
 Lcom/android/server/notification/NotificationManagerService$FlagChecker;
 Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
+Lcom/android/server/notification/NotificationManagerService$NotificationListeners$1;
 Lcom/android/server/notification/NotificationManagerService$NotificationListeners$2;
 Lcom/android/server/notification/NotificationManagerService$NotificationListeners$3;
 Lcom/android/server/notification/NotificationManagerService$NotificationListeners$4;
@@ -26252,11 +43089,19 @@
 Lcom/android/server/notification/NotificationManagerService$RoleObserver;
 Lcom/android/server/notification/NotificationManagerService$SavePolicyFileRunnable;
 Lcom/android/server/notification/NotificationManagerService$SettingsObserver;
+Lcom/android/server/notification/NotificationManagerService$SnoozeNotificationRunnable;
 Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;
+Lcom/android/server/notification/NotificationManagerService$ToastRecord;
 Lcom/android/server/notification/NotificationManagerService$TrimCache;
 Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
 Lcom/android/server/notification/NotificationManagerService;
+Lcom/android/server/notification/NotificationRecord$Light;
 Lcom/android/server/notification/NotificationRecord;
+Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;
+Lcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvents;
+Lcom/android/server/notification/NotificationRecordLogger;
+Lcom/android/server/notification/NotificationRecordLoggerImpl;
+Lcom/android/server/notification/NotificationShellCmd;
 Lcom/android/server/notification/NotificationSignalExtractor;
 Lcom/android/server/notification/NotificationUsageStats$1;
 Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
@@ -26266,11 +43111,13 @@
 Lcom/android/server/notification/NotificationUsageStats$SQLiteLog;
 Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;
 Lcom/android/server/notification/NotificationUsageStats;
+Lcom/android/server/notification/PreferencesHelper$1;
 Lcom/android/server/notification/PreferencesHelper$Delegate;
 Lcom/android/server/notification/PreferencesHelper$PackagePreferences;
 Lcom/android/server/notification/PreferencesHelper;
 Lcom/android/server/notification/PriorityExtractor;
 Lcom/android/server/notification/PropConfig;
+Lcom/android/server/notification/PulledStats;
 Lcom/android/server/notification/RankingConfig;
 Lcom/android/server/notification/RankingHandler;
 Lcom/android/server/notification/RankingHelper;
@@ -26284,6 +43131,7 @@
 Lcom/android/server/notification/SnoozeHelper;
 Lcom/android/server/notification/SystemConditionProviderService;
 Lcom/android/server/notification/ValidateNotificationPeople$1;
+Lcom/android/server/notification/ValidateNotificationPeople$2;
 Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;
 Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;
 Lcom/android/server/notification/ValidateNotificationPeople;
@@ -26291,8 +43139,10 @@
 Lcom/android/server/notification/ZenLog;
 Lcom/android/server/notification/ZenModeConditions;
 Lcom/android/server/notification/ZenModeExtractor;
+Lcom/android/server/notification/ZenModeFiltering$1;
 Lcom/android/server/notification/ZenModeFiltering$RepeatCallers;
 Lcom/android/server/notification/ZenModeFiltering;
+Lcom/android/server/notification/ZenModeHelper$1;
 Lcom/android/server/notification/ZenModeHelper$Callback;
 Lcom/android/server/notification/ZenModeHelper$H$ConfigMessageData;
 Lcom/android/server/notification/ZenModeHelper$H;
@@ -26300,11 +43150,17 @@
 Lcom/android/server/notification/ZenModeHelper$RingerModeDelegate;
 Lcom/android/server/notification/ZenModeHelper$SettingsObserver;
 Lcom/android/server/notification/ZenModeHelper;
+Lcom/android/server/notification/toast/CustomToastRecord;
+Lcom/android/server/notification/toast/TextToastRecord;
+Lcom/android/server/notification/toast/ToastRecord;
+Lcom/android/server/oemlock/-$$Lambda$VendorLock$8zNsLj4Jt-s5XEEk_KIC2zQR29g;
 Lcom/android/server/oemlock/-$$Lambda$VendorLock$HjegvthxXAHFarV_FukbaMGePGU;
+Lcom/android/server/oemlock/-$$Lambda$VendorLock$mE2wEMNMcvqMft72oSVABYa_mYs;
 Lcom/android/server/oemlock/OemLock;
 Lcom/android/server/oemlock/OemLockService$1;
 Lcom/android/server/oemlock/OemLockService$2;
 Lcom/android/server/oemlock/OemLockService;
+Lcom/android/server/oemlock/PersistentDataBlockLock;
 Lcom/android/server/oemlock/VendorLock;
 Lcom/android/server/om/-$$Lambda$IdmapDaemon$Connection$4U-n0RSv1BPv15mvu8B8zXARcpk;
 Lcom/android/server/om/-$$Lambda$IdmapDaemon$hZvlb8B5bMAnD3h9mHLjOQXKSTI;
@@ -26312,17 +43168,24 @@
 Lcom/android/server/om/-$$Lambda$OverlayManagerService$OverlayChangeListener$u9oeN2C0PDMo0pYiLqfMBkwuMNA;
 Lcom/android/server/om/-$$Lambda$OverlayManagerService$_WGEV7N0qhntbqqDW3A1O-TVv5o;
 Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$ATr0DZmWpSWdKD0COw4t2qS-DRk;
+Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$BKNCDt6MBH2RSKr2mbIUnL_dIvA;
 Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$Fjt465P6G89HQZERZFsOEjMbtXI;
 Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$IkswmT9ZZJXmNAztGRVrD3hODMw;
 Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$L_Sj43p2Txm_KH-wT0lseBTVzh8;
 Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$WYtPK6Ebqjgxm8_8Cot-ijv_z_8;
+Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$Xr3l7ivgTflBmPTqf9hbG3i0H_I;
 Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$jZUujzDxrP0hpAqUxnqEf-b-nQc;
+Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$leWA95COTthWNYtDKcdKVChlc-c;
+Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$n3zAcJx5VlITl9U9fQatqN2KJyA;
 Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$sx0Nyvq91kCH_A-4Ctf09G_0u9M;
 Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$vXm2C4y9Q-F5yYZNimB-Lr6w-oI;
 Lcom/android/server/om/-$$Lambda$bXuJGR0fITXNwGnQfQHv9KS-XgY;
+Lcom/android/server/om/DumpState;
+Lcom/android/server/om/IdmapDaemon$1;
 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$VerifyCallback;
 Lcom/android/server/om/OverlayActorEnforcer;
 Lcom/android/server/om/OverlayManagerService$1;
@@ -26338,43 +43201,175 @@
 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/os/-$$Lambda$SchedulingPolicyService$ao2OiSvvlyzmJ0li0c0nhHy-IDk;
 Lcom/android/server/os/BugreportManagerService;
+Lcom/android/server/os/BugreportManagerServiceImpl$DumpstateListener;
 Lcom/android/server/os/BugreportManagerServiceImpl;
 Lcom/android/server/os/DeviceIdentifiersPolicyService$DeviceIdentifiersPolicy;
 Lcom/android/server/os/DeviceIdentifiersPolicyService;
 Lcom/android/server/os/SchedulingPolicyService$1;
 Lcom/android/server/os/SchedulingPolicyService;
+Lcom/android/server/people/-$$Lambda$PeopleService$LocalService$3Qo6-WDOLNVaPTLQAF-EJxAGmxI;
+Lcom/android/server/people/-$$Lambda$PeopleService$LocalService$DA0r0rysK9_les70rzTEjoXDMIs;
+Lcom/android/server/people/-$$Lambda$PeopleService$LocalService$OkrAFIXTSUJ7ZEBAVexg7Fz8XuM;
+Lcom/android/server/people/-$$Lambda$PeopleService$LocalService$R86SOhwiEgxiryvdaimpXnymNC4;
+Lcom/android/server/people/-$$Lambda$PeopleService$LocalService$UGTAS6UjpowRtjdCWHwQ_4g5zsw;
+Lcom/android/server/people/-$$Lambda$PeopleService$LocalService$cmUgPk-YO6by7_XySWglEKwZh3E;
+Lcom/android/server/people/-$$Lambda$PeopleService$LocalService$fqMQSnT1vOGK2_fKsvWHTY9b7SQ;
+Lcom/android/server/people/-$$Lambda$PeopleService$LocalService$uZx_s9KkC6FGFW4bkELnUYtB08A;
+Lcom/android/server/people/PeopleService$LocalService;
+Lcom/android/server/people/PeopleService;
+Lcom/android/server/people/PeopleServiceInternal;
+Lcom/android/server/people/SessionInfo;
+Lcom/android/server/people/data/-$$Lambda$DataManager$ShortcutServiceListener$emB0GKXSexwJTzSWLUKYnAGbCCg;
+Lcom/android/server/people/data/ContactsQueryHelper;
+Lcom/android/server/people/data/ConversationInfo$Builder;
+Lcom/android/server/people/data/ConversationInfo;
+Lcom/android/server/people/data/ConversationStore;
+Lcom/android/server/people/data/DataManager$1;
+Lcom/android/server/people/data/DataManager$ContactsContentObserver;
+Lcom/android/server/people/data/DataManager$Injector;
+Lcom/android/server/people/data/DataManager$NotificationListener;
+Lcom/android/server/people/data/DataManager$PerUserBroadcastReceiver;
+Lcom/android/server/people/data/DataManager$ShortcutServiceListener;
+Lcom/android/server/people/data/DataManager$UsageStatsQueryRunnable;
+Lcom/android/server/people/data/DataManager;
+Lcom/android/server/people/data/Event;
+Lcom/android/server/people/data/EventHistory;
+Lcom/android/server/people/data/EventHistoryImpl;
+Lcom/android/server/people/data/EventStore;
+Lcom/android/server/people/data/PackageData;
+Lcom/android/server/people/data/UserData;
+Lcom/android/server/people/prediction/ConversationPredictor;
+Lcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$1$dbgKSgcSW-enjqvNAbeI3zvdw_E;
+Lcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$48iOSmygOXJ0TezZTiFdfMqA4-U;
+Lcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$ZSnyvqMou1dicjDEP1s6HfI9AtM;
+Lcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$o0S1o3gtXHOOZT_0tmoPlF2FOdI;
 Lcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$pQnjdbWgnVRvdOuYJTmevPGwE8s;
+Lcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$q1ttlIbEI3KHg5wkhDwkpDn2qCU;
+Lcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$tz3TLW-UaMjqz-wkojT7H_pVbZU;
+Lcom/android/server/pm/-$$Lambda$ApexManager$ApexManagerImpl$zKFrzIK0lAT7V4Fl0Pv5KKt1Gu0;
 Lcom/android/server/pm/-$$Lambda$AppsFilter$FeatureConfigImpl$n15whgPRX7bGimHq6-7mgAskIKs;
+Lcom/android/server/pm/-$$Lambda$AppsFilter$irFGkuh4mJ419pXBYKSj13ADTtA;
 Lcom/android/server/pm/-$$Lambda$BWZi0Aa35BwEPzNacDfE_69TPS8;
 Lcom/android/server/pm/-$$Lambda$BackgroundDexOptService$-KiE2NsUP--OYmoSDt9BwEQICZw;
 Lcom/android/server/pm/-$$Lambda$BackgroundDexOptService$TAsfDUuoxt92xKFoSCfpMUmY2Es;
+Lcom/android/server/pm/-$$Lambda$CFSsMipQUq5_2T1_SDplRJCGzsQ;
 Lcom/android/server/pm/-$$Lambda$ComponentResolver$PuHbZd5KEOMGjkH8xDOhOwfLtC0;
+Lcom/android/server/pm/-$$Lambda$CrossProfileAppsServiceImpl$wMVevLD4FZ1cL73xmtbSkTJK9d8;
+Lcom/android/server/pm/-$$Lambda$EvXtX9FEb_c87yAlCmxSfLtExqQ;
 Lcom/android/server/pm/-$$Lambda$FW40Da1L1EZJ_usDX0ew1qRMmtc;
+Lcom/android/server/pm/-$$Lambda$Installer$SebeftIfAJ7KsTmM0tju6PfW4Pc;
 Lcom/android/server/pm/-$$Lambda$InstantAppRegistry$BuKCbLr_MGBazMPl54-pWTuGHYY;
+Lcom/android/server/pm/-$$Lambda$InstantAppRegistry$R7XSXckXZJx-7zO-lFkgYY_-lWA;
+Lcom/android/server/pm/-$$Lambda$InstantAppRegistry$UOn4sUy4zBQuofxUbY8RBYhkNSE;
+Lcom/android/server/pm/-$$Lambda$InstantAppRegistry$eaYsiecM_Rq6dliDvliwVtj695o;
 Lcom/android/server/pm/-$$Lambda$InstantAppResolverConnection$D-JKXi4qrYjnPQMOwj8UtfZenps;
 Lcom/android/server/pm/-$$Lambda$K2g8Oho05j5S7zVOkoQrHzM_Gig;
 Lcom/android/server/pm/-$$Lambda$LauncherAppsService$LauncherAppsImpl$MyPackageMonitor$eTair5Mvr14v4M0nq9aQEW2cp-Y;
+Lcom/android/server/pm/-$$Lambda$LauncherAppsService$LauncherAppsImpl$PR6SMHDNFTsnoL92MFZskM-zN8k;
+Lcom/android/server/pm/-$$Lambda$OtaDexoptService$sAE9PLBjWsXDVkiiC_uzr0kwQ4k;
 Lcom/android/server/pm/-$$Lambda$PackageInstallerService$vra5ZkE3juVvcgDBu5xv0wVzno8;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$0MwsfMSD_PrEtElmOWjbhM7455A;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$1Vn1SAhcCHhhsIQilx5inKAgWRM;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$8h1d-tE1jIyQL1g477wJngVHGm0;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$A1RHq3AVT8egu8DUw6cGBmsHEPc;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$I-m_B4h0BMOozr8LCZKwLk8jYwA;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$Jldeo0ihCZqsZyrchyGGrBvBFhI;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$LKX-RujkFnSgLnC0cYsTt3XfpMw;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$Q84DQuKTSKG_oVZkTd4otsUSsIE;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$RFRVvuZuSQwpU_8M3Ga1MzynP8I;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$ZZgozNNErmyn9Tirn9svDJQY2u4;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$ZoEZmTQxt8zSZ4xFr5F5KoJtKIk;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$gIaZyqaw0zETPQMxuRW3BVLMZ-Y;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$hcjzMyeJvQ7YhAw688UGz8W5_aU;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$iyfVEu9LbUOK_cEGZ3wXC81wsgs;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$lBx0EGMbjm-sO2YmD4xcKPdUC6g;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$rKtX6eBC-DOrX8wgZiUgIdje2Kc;
+Lcom/android/server/pm/-$$Lambda$PackageInstallerSession$yEAIQbVnbSznJVW9xPXv9WGuzI0;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$-SI_LHw6Eiq8VNiFLLjJdCbGgSQ;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$0Regyd5pBrcIdGN2_jpl21L-KWw;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$2LJuxrdU5DWIRpDkTbzKA8U7iIc;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$3TlqkUBuVM7NyAg7uqJCni92WOU;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$3yxDU_uSU2kkdLuKkfPYVKvXKGw;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$4lr9R3-Rfzq-VEptx-WWeRaSpd4;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$BzRujGrz-3iO1VZDBUuSaqm63Go;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$DWomXCDpiVbZPOk7h4gWI0gNMDM;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$ECakc05vOVsUm8ydpi2Z-HghH4w;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$EQHzRzxse-rtXNIoVfzT15c8LHI;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$FFJwRezEfCP4utcPN2U9pjn2hIo;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$I5XLVROcF2w_-cucMNuicHY0H0k;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$J0eEFDuLDZBCGkS0UBLQaQGBMN8;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$JQITabyRBc2Nst0hnvtDUIYPLkk;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$JqISwjRG4Nrwn7K19yITMU1WH5g;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$KUTG4a_t__F9-jF9uKK4m5M6ED0;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$Kv9_Hbk7M-eyDSHfPi1rrQzjiwc;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$Mtahsr42dH18eRuAJ0J6DzShLys;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$OchkDx-ijr5A5mGpkAil3XLu7Oo;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$PmwkzQu9rsYKerIyizl5HqTMOeY;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$PvuTB7Ihf5rmN0ByWpLv31cRa7s;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$QEXaCTQ54nCy5aHUAa6mkt0WtpM;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$RfqRmQ8KNtYywzf-EIm7VG5PHj8;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$RoklvvEqbb0_WAziY4NuUNhrlUA;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$U47f17sf-Z0eef3W2xgzUB-ecR4;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$UqTOzDNpKPiIlaG4_AUlesB9I1E;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$VINGOt0rwLOHiIrsYfMP2VPHvl0;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$WLKCxynYP-nOLQg-OBNNc1w2Z18;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$Wnf5zZuMJLUQ4GfjHtUww4l7YUg;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$XBL5VfMu2aQcjyrc4spKskHsSJU;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$XrodqQtXF-63SFPD_WxRBB7sfa4;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$YHVD9fSfoszBkmlqzmswh1u_y_M;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$Ze0Xh0iBIll5jkJ4VcmUxBuZyI8;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$_CMCXnVAsgXUrfmWq_KOQ0-d17c;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$aXPYjiloRwQataUrx041SxBr5us;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$aptgkdXtM4g66mNvfWDFzI6FQyI;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$cHQqBPj5vgOw-P7yhrKC9Ssq27g;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$ccz4PCOSG7fKRFBAMJv8GMQMI08;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$djQQrdclAlQ8ILip1OVPcBDTkW4;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$ey1rLNYtfJSvujRGt9gqdyMxIwI;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$f5l1_UOwACQPN6qixqBmzSJzDMw;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$fQjXY6S0s38rWZ-Tv1PTQvrgJb4;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$hLkpaH_y40nbOItNYjiR8EOZUgM;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$hlGRKJu3cTGpEnG-hyOT3QbrXxY;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$i2wY1QKIZAfMEAymOPPs8KS2G5c;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$i6CpetYRHYknkq8R3n1zFsH2Qng;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$imyTLGZ0HLyacORSu0iPTteivzY;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$kHFR9hPPJshGwQIlj0mPFAZIZSI;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$kUm15OrlWJD9K-LIlM_rBtX-g4Q;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$kdqJJNrm44ZfCpYgQsRrZy7nM38;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$mozSqBaYzz4jQjwZjKIapdRXflc;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$ms4g2QGGQv1AIanhd1siLhoElkI;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$pVdeIe13BPz2j1-uK6W_NugHu2Q;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$pzzC0ChZnM8yUb83hUS8pcZYU3A;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$qNpeCKStShTSYrHT0cclQGx1igI;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$r9dUYOfGzr26Di0nsqMuBl6nBJY;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$rAJdldFfFkjlsYiEzyWtJPRkHn8;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$rJEHTCbZuliP-AofB7kQxwDOX4I;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$rLdmTQLwnuPeDuWTeDB-0S1Ku4I;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$rcVfdsXa_dlub2enxT5rL0nTx7I;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$vPmwW10Lr1Zc8YoNadc7v4xmIWo;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$vyKDCUt14soSFqmBBfd52n5w5qM;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$xKD6SB7pISjc29qfmXIq5O_3OJw;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$xZAAMOZCDrDe-FJUcRmxesa8h7c;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$xv5zSGDUCMQ_E6mH4qgdkiJ5XtA;
+Lcom/android/server/pm/-$$Lambda$PackageManagerService$xwqiJpXPI0dDAZ1z9noew-rHViA;
 Lcom/android/server/pm/-$$Lambda$PackageManagerService$zCuBGosGB1OGJ7ya2EB4X5V2jBk;
+Lcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$1RbkDa86pOg-5BavmgbPLLCoJCA;
+Lcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$JqfeXEVVj9qyD-t5TtAWP5dUo_Q;
+Lcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$WqWSiwN-039OE_mRd8x6F_ORqRU;
+Lcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$ZEbcK7yQgHqG-8Z65v9KNo4jBgU;
+Lcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$_LUs2lN_dtgmbhOTm2Ear0f91Qg;
+Lcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$eMhMS_ozPxLQedSFcYUWkqe3DH4;
+Lcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$pak5uFueWVDXpeD0raY40AD6lPY;
+Lcom/android/server/pm/-$$Lambda$PackageManagerServiceUtils$qCP9hzvvo1JqZQ7mV-34TucIk2o;
+Lcom/android/server/pm/-$$Lambda$PackageManagerShellCommand$-OZpz58K2HXVuHDuVYKnCu6oo4c;
+Lcom/android/server/pm/-$$Lambda$PackageManagerShellCommand$v3vXA2YvCwaE7J0QfR1IQ122iTI;
 Lcom/android/server/pm/-$$Lambda$ParallelPackageParser$FTtinPrp068lVeI7K6bC1tNE3iM;
+Lcom/android/server/pm/-$$Lambda$RIrciDUAm_lS8CbvRCW_P-ee_-4;
 Lcom/android/server/pm/-$$Lambda$ShortcutBitmapSaver$AUDgG57FGyGDUVDAjL-7cuiE0pM;
 Lcom/android/server/pm/-$$Lambda$ShortcutBitmapSaver$xgjvZfaiKXavxgGCSta_eIdVBnk;
 Lcom/android/server/pm/-$$Lambda$ShortcutDumpFiles$rwmVVp6PnQCcurF7D6VzrdNqEdk;
@@ -26383,47 +43378,87 @@
 Lcom/android/server/pm/-$$Lambda$ShortcutPackage$ZN-r6tS0M7WKGK6nbXyJZPwNRGc;
 Lcom/android/server/pm/-$$Lambda$ShortcutPackage$hEXnzlESoRjagj8Pd9f4PrqudKE;
 Lcom/android/server/pm/-$$Lambda$ShortcutPackage$ibOAVgfKWMZFYSeVV_hLNx6jogk;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$2mjLrqafL_ZPftw5bIS-yyK7PxI;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$3$WghiV-HLnzJqZabObC5uHCmb960;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$3$n_VdEzyBcjs0pGZO8GnB0FoTgR0;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$DzwraUeMWDwA0XDfFxd3sGOsA0E;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$EE8aJ-V-lThNgd-x9utgJTk3K50;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$H1HFyb1U9E1-y03suEsi37_w-t0;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$HrjNihAM4odnSGPLxsJbI33JkwE;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$KOp4rgvJPqXwR4WftrrGcjb2qMQ;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$Q0t7aDuDFJ8HWAf1NHW1dGQjOf8;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$ZxpFznY3OrD6IbNkC12YhV8h3J4;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$a6cj3oQpS-Z6FB4DytB0FytYmiM;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$LocalService$ltDE7qm9grkumxffFI8cLCFpNqU;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$M_jA5rlnfqs19yyXen7WvF8EFdQ;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$NdP-8QRYjvDVSScw7cBKt85dbWQ;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$Ot_p1CCuELDP1Emv4jTa8vvA09A;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$QFWliMhWloedhnaZCwVKaqKPVb4;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$SjK_0i78sIpSTGJKpeLWOhhhsiA;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$TAtLoMHHFYLITi_4Sj-ZTHx6ELo;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$TUT0CJsDhxqkpcseduaAriOs6bg;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$TVqBA9DN_h90eIcwrnmy7Mkl6jo;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$exGcjcSQADxpLL30XenIn9sDxlI;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$fCl_JbVpr187Fh4_6N-IxgnU68c;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$fqEqB5P0QHkQKJgSWuI8hNg-9pk;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$iFS9voxIL014PvOEV1G-QzjkDjk;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$io6aQoSP1ibWQCoayRXJaxbmJvA;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$l8T8kXBB-Gktym0FoX_WiKj2Glc;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$lYluTnTRdTOcpwtJusvYEvlkMjQ;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$nr2YpVwPOGGO8CME0IHeIUIo4yk;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$oes_dY8CJz5MllJiOggarpV9YkA;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$s11VOofRVMGkuwyyqnMY7eAyb5k;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$t1am7miIbc4iP6CfSL0gFgEsO0Y;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$uvknhLDPo5JAtmXalM9P3rrx9e4;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$vKI79Gf4pKq8ASWghBXV-NKhZwk;
+Lcom/android/server/pm/-$$Lambda$ShortcutService$w7_ouiisHmMMzTkQ_HUAHbawlLY;
 Lcom/android/server/pm/-$$Lambda$ShortcutService$y1mZhNAWeEp6GCbsOBAt4g-DS3s;
 Lcom/android/server/pm/-$$Lambda$ShortcutUser$6rBk7xJFaM9dXyyKHFs-DCus0iM;
 Lcom/android/server/pm/-$$Lambda$ShortcutUser$XHWlvjfCvG1SoVwGHi3envhmtfM;
 Lcom/android/server/pm/-$$Lambda$ShortcutUser$bsc89E_40a5X2amehalpqawQ5hY;
+Lcom/android/server/pm/-$$Lambda$StagingManager$-_ny3FTrU2IsbpZjLW2h29O5auM;
+Lcom/android/server/pm/-$$Lambda$StagingManager$HKgsX1m7APD_7T6AtjHR5IBpKOg;
+Lcom/android/server/pm/-$$Lambda$StagingManager$UAHmD_dya6rWSylrk_h2BGFBKcA;
+Lcom/android/server/pm/-$$Lambda$StagingManager$ZgsDW9nz_GRyhJblDPqTcQpERKw;
+Lcom/android/server/pm/-$$Lambda$StagingManager$d5wng09Aqg6kD7IttyYM7c0-S_s;
+Lcom/android/server/pm/-$$Lambda$StagingManager$khHJXt_K9cdI6PMA3kOt_alWSgA;
+Lcom/android/server/pm/-$$Lambda$StagingManager$klDFpL8kmOtsqN6EenDYGj-WaZA;
+Lcom/android/server/pm/-$$Lambda$StagingManager$l7fa-k0J9C50Vr9mDKn9MKzrXEI;
+Lcom/android/server/pm/-$$Lambda$UserManagerService$1$DQ_02g7kZ7QrJXO6aCATwE6DYCE;
 Lcom/android/server/pm/-$$Lambda$UserManagerService$s1AxethOTPU7NQ5LXxyP4etLk7E;
+Lcom/android/server/pm/-$$Lambda$UserSystemPackageInstaller$G2PoxOZRnHC75k6Z6WIxO5_7BnU;
+Lcom/android/server/pm/-$$Lambda$UserSystemPackageInstaller$qgQhYPPVJE0ZGQMRr6lmVdZZll0;
+Lcom/android/server/pm/-$$Lambda$UserSystemPackageInstaller$sAb1bQVy3LvCkecpDpo9566E_WA;
+Lcom/android/server/pm/-$$Lambda$XAnWXMIiLhuW-IgC6QMv9mUZKLs;
+Lcom/android/server/pm/-$$Lambda$_14QHG018Z6p13d3hzJuGTWnNeo;
+Lcom/android/server/pm/-$$Lambda$aDS6mx4DkwptPe2nlJ1LiNnzsdA;
 Lcom/android/server/pm/-$$Lambda$g4P9K8aMR8DqEu0xx3BuQNeuJDI;
 Lcom/android/server/pm/-$$Lambda$jZzCUQd1whVIqs_s1XMLbFqTP_E;
 Lcom/android/server/pm/-$$Lambda$k1GFoI6SobyVJslBym5uZjmuRFs;
+Lcom/android/server/pm/-$$Lambda$lPF7xFSzcWOL7sNKaTqRz6Ju9JA;
 Lcom/android/server/pm/-$$Lambda$o-ZLavkSzPWqIqo9vLXCsdj4Pgg;
 Lcom/android/server/pm/-$$Lambda$p0TiQPw2ryHKkedVkMgvUcGADDo;
+Lcom/android/server/pm/-$$Lambda$sAnQjWlQDJoJcSwHDDCKcU2fneU;
 Lcom/android/server/pm/-$$Lambda$vv6Ko6L2p38nn3EYcL5PZxcyRyk;
 Lcom/android/server/pm/AbstractStatsBase$1;
 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$1;
 Lcom/android/server/pm/ApexManager$ApexManagerImpl;
 Lcom/android/server/pm/ApexManager;
+Lcom/android/server/pm/AppsFilter$1;
 Lcom/android/server/pm/AppsFilter$FeatureConfig;
 Lcom/android/server/pm/AppsFilter$FeatureConfigImpl;
+Lcom/android/server/pm/AppsFilter$ToString;
 Lcom/android/server/pm/AppsFilter;
 Lcom/android/server/pm/BackgroundDexOptService$1;
 Lcom/android/server/pm/BackgroundDexOptService$2;
 Lcom/android/server/pm/BackgroundDexOptService;
 Lcom/android/server/pm/CompilerStats$PackageStats;
 Lcom/android/server/pm/CompilerStats;
+Lcom/android/server/pm/ComponentResolver$1;
 Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;
 Lcom/android/server/pm/ComponentResolver$InstantAppIntentResolver;
 Lcom/android/server/pm/ComponentResolver$ProviderIntentResolver;
@@ -26437,6 +43472,7 @@
 Lcom/android/server/pm/CrossProfileIntentFilter;
 Lcom/android/server/pm/CrossProfileIntentResolver;
 Lcom/android/server/pm/DataLoaderManagerService$DataLoaderManagerBinderService;
+Lcom/android/server/pm/DataLoaderManagerService$DataLoaderServiceConnection;
 Lcom/android/server/pm/DataLoaderManagerService;
 Lcom/android/server/pm/DumpState;
 Lcom/android/server/pm/DynamicCodeLoggingService$AuditWatchingThread;
@@ -26447,28 +43483,39 @@
 Lcom/android/server/pm/Installer$InstallerException;
 Lcom/android/server/pm/Installer;
 Lcom/android/server/pm/InstantAppRegistry$CookiePersistence;
+Lcom/android/server/pm/InstantAppRegistry$UninstalledInstantAppState;
 Lcom/android/server/pm/InstantAppRegistry;
 Lcom/android/server/pm/InstantAppResolver;
+Lcom/android/server/pm/InstantAppResolverConnection$1;
 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$PhaseTwoCallback;
 Lcom/android/server/pm/InstantAppResolverConnection;
 Lcom/android/server/pm/InstructionSets;
+Lcom/android/server/pm/IntentFilterVerificationResponse;
 Lcom/android/server/pm/IntentFilterVerificationState;
 Lcom/android/server/pm/KeySetHandle;
+Lcom/android/server/pm/KeySetManagerService$1;
 Lcom/android/server/pm/KeySetManagerService$PublicKeyHandle;
 Lcom/android/server/pm/KeySetManagerService;
+Lcom/android/server/pm/LauncherAppsService$1;
+Lcom/android/server/pm/LauncherAppsService$BroadcastCookie;
 Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;
 Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageCallbackList;
 Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;
 Lcom/android/server/pm/LauncherAppsService;
 Lcom/android/server/pm/ModuleInfoProvider;
+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;
 Lcom/android/server/pm/PackageAbiHelperImpl;
+Lcom/android/server/pm/PackageDexOptimizer$ForcedUpdatePackageDexOptimizer;
 Lcom/android/server/pm/PackageDexOptimizer;
 Lcom/android/server/pm/PackageInstallerService$1;
 Lcom/android/server/pm/PackageInstallerService$2;
@@ -26481,18 +43528,34 @@
 Lcom/android/server/pm/PackageInstallerSession$2;
 Lcom/android/server/pm/PackageInstallerSession$3;
 Lcom/android/server/pm/PackageInstallerSession$4;
+Lcom/android/server/pm/PackageInstallerSession$5;
+Lcom/android/server/pm/PackageInstallerSession$6;
+Lcom/android/server/pm/PackageInstallerSession$ChildStatusIntentReceiver;
+Lcom/android/server/pm/PackageInstallerSession$FileInfo;
+Lcom/android/server/pm/PackageInstallerSession$FileSystemConnector;
+Lcom/android/server/pm/PackageInstallerSession$Notificator;
+Lcom/android/server/pm/PackageInstallerSession$StreamingException;
 Lcom/android/server/pm/PackageInstallerSession;
 Lcom/android/server/pm/PackageKeySetData;
 Lcom/android/server/pm/PackageList;
 Lcom/android/server/pm/PackageManagerException;
 Lcom/android/server/pm/PackageManagerService$1;
+Lcom/android/server/pm/PackageManagerService$2;
+Lcom/android/server/pm/PackageManagerService$3;
 Lcom/android/server/pm/PackageManagerService$4;
 Lcom/android/server/pm/PackageManagerService$5;
 Lcom/android/server/pm/PackageManagerService$6;
 Lcom/android/server/pm/PackageManagerService$7;
+Lcom/android/server/pm/PackageManagerService$8;
+Lcom/android/server/pm/PackageManagerService$9;
 Lcom/android/server/pm/PackageManagerService$ActiveInstallSession;
+Lcom/android/server/pm/PackageManagerService$BlobXmlRestorer;
+Lcom/android/server/pm/PackageManagerService$CommitRequest;
+Lcom/android/server/pm/PackageManagerService$CrossProfileDomainInfo;
+Lcom/android/server/pm/PackageManagerService$DeletePackageAction;
 Lcom/android/server/pm/PackageManagerService$FileInstallArgs;
 Lcom/android/server/pm/PackageManagerService$HandlerParams;
+Lcom/android/server/pm/PackageManagerService$IFVerificationParams;
 Lcom/android/server/pm/PackageManagerService$Injector$LocalServicesProducer;
 Lcom/android/server/pm/PackageManagerService$Injector$Producer;
 Lcom/android/server/pm/PackageManagerService$Injector$Singleton;
@@ -26501,9 +43564,14 @@
 Lcom/android/server/pm/PackageManagerService$InstallArgs;
 Lcom/android/server/pm/PackageManagerService$InstallParams$1;
 Lcom/android/server/pm/PackageManagerService$InstallParams;
+Lcom/android/server/pm/PackageManagerService$InstallRequest;
 Lcom/android/server/pm/PackageManagerService$IntentFilterVerifier;
 Lcom/android/server/pm/PackageManagerService$IntentVerifierProxy;
 Lcom/android/server/pm/PackageManagerService$MoveCallbacks;
+Lcom/android/server/pm/PackageManagerService$MoveInfo;
+Lcom/android/server/pm/PackageManagerService$MoveInstallArgs;
+Lcom/android/server/pm/PackageManagerService$MultiPackageInstallParams;
+Lcom/android/server/pm/PackageManagerService$OriginInfo;
 Lcom/android/server/pm/PackageManagerService$PackageFreezer;
 Lcom/android/server/pm/PackageManagerService$PackageHandler;
 Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;
@@ -26512,6 +43580,7 @@
 Lcom/android/server/pm/PackageManagerService$PackageParserCallback;
 Lcom/android/server/pm/PackageManagerService$PackageRemovedInfo;
 Lcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;
+Lcom/android/server/pm/PackageManagerService$PostInstallData;
 Lcom/android/server/pm/PackageManagerService$PrepareFailure;
 Lcom/android/server/pm/PackageManagerService$PrepareResult;
 Lcom/android/server/pm/PackageManagerService$ReconcileFailure;
@@ -26521,22 +43590,35 @@
 Lcom/android/server/pm/PackageManagerService$ScanResult;
 Lcom/android/server/pm/PackageManagerService$SystemDeleteException;
 Lcom/android/server/pm/PackageManagerService$SystemPartition;
+Lcom/android/server/pm/PackageManagerService$VerificationInfo;
 Lcom/android/server/pm/PackageManagerService;
 Lcom/android/server/pm/PackageManagerServiceCompilerMapping;
 Lcom/android/server/pm/PackageManagerServiceUtils$1;
 Lcom/android/server/pm/PackageManagerServiceUtils;
+Lcom/android/server/pm/PackageManagerShellCommand$1;
+Lcom/android/server/pm/PackageManagerShellCommand$2;
+Lcom/android/server/pm/PackageManagerShellCommand$3;
+Lcom/android/server/pm/PackageManagerShellCommand$4;
+Lcom/android/server/pm/PackageManagerShellCommand$ClearDataObserver;
+Lcom/android/server/pm/PackageManagerShellCommand$InstallParams;
+Lcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;
+Lcom/android/server/pm/PackageManagerShellCommand$SessionDump;
+Lcom/android/server/pm/PackageManagerShellCommand$SnapshotRuntimeProfileCallback;
 Lcom/android/server/pm/PackageManagerShellCommand;
+Lcom/android/server/pm/PackageManagerShellCommandDataLoader;
 Lcom/android/server/pm/PackageSender;
 Lcom/android/server/pm/PackageSessionProvider;
 Lcom/android/server/pm/PackageSetting;
 Lcom/android/server/pm/PackageSettingBase;
 Lcom/android/server/pm/PackageSignatures;
 Lcom/android/server/pm/PackageUsage;
+Lcom/android/server/pm/PackageVerificationResponse;
 Lcom/android/server/pm/PackageVerificationState;
 Lcom/android/server/pm/ParallelPackageParser$ParseResult;
 Lcom/android/server/pm/ParallelPackageParser;
 Lcom/android/server/pm/PersistentPreferredActivity;
 Lcom/android/server/pm/PersistentPreferredIntentResolver;
+Lcom/android/server/pm/Policy$1;
 Lcom/android/server/pm/Policy$PolicyBuilder;
 Lcom/android/server/pm/Policy;
 Lcom/android/server/pm/PolicyComparator;
@@ -26548,12 +43630,15 @@
 Lcom/android/server/pm/ProtectedPackages;
 Lcom/android/server/pm/SELinuxMMAC;
 Lcom/android/server/pm/SettingBase;
+Lcom/android/server/pm/Settings$1;
 Lcom/android/server/pm/Settings$KernelPackageState;
 Lcom/android/server/pm/Settings$RuntimePermissionPersistence$MyHandler;
 Lcom/android/server/pm/Settings$RuntimePermissionPersistence;
 Lcom/android/server/pm/Settings$VersionInfo;
 Lcom/android/server/pm/Settings;
 Lcom/android/server/pm/SharedUserSetting;
+Lcom/android/server/pm/ShortcutBitmapSaver$1;
+Lcom/android/server/pm/ShortcutBitmapSaver$PendingItem;
 Lcom/android/server/pm/ShortcutBitmapSaver;
 Lcom/android/server/pm/ShortcutDumpFiles;
 Lcom/android/server/pm/ShortcutLauncher;
@@ -26562,6 +43647,10 @@
 Lcom/android/server/pm/ShortcutPackageInfo;
 Lcom/android/server/pm/ShortcutPackageItem;
 Lcom/android/server/pm/ShortcutParser;
+Lcom/android/server/pm/ShortcutRequestPinProcessor$1;
+Lcom/android/server/pm/ShortcutRequestPinProcessor$PinAppWidgetRequestInner;
+Lcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner;
+Lcom/android/server/pm/ShortcutRequestPinProcessor$PinShortcutRequestInner;
 Lcom/android/server/pm/ShortcutRequestPinProcessor;
 Lcom/android/server/pm/ShortcutService$1;
 Lcom/android/server/pm/ShortcutService$2;
@@ -26573,53 +43662,84 @@
 Lcom/android/server/pm/ShortcutService$InvalidFileFormatException;
 Lcom/android/server/pm/ShortcutService$Lifecycle;
 Lcom/android/server/pm/ShortcutService$LocalService;
+Lcom/android/server/pm/ShortcutService$MyShellCommand;
 Lcom/android/server/pm/ShortcutService;
 Lcom/android/server/pm/ShortcutUser$PackageWithUser;
 Lcom/android/server/pm/ShortcutUser;
+Lcom/android/server/pm/StagingManager$1;
+Lcom/android/server/pm/StagingManager$LocalIntentReceiverAsync;
+Lcom/android/server/pm/StagingManager$LocalIntentReceiverSync;
 Lcom/android/server/pm/StagingManager$PreRebootVerificationHandler;
 Lcom/android/server/pm/StagingManager;
 Lcom/android/server/pm/UserDataPreparer;
 Lcom/android/server/pm/UserManagerService$1;
 Lcom/android/server/pm/UserManagerService$2;
 Lcom/android/server/pm/UserManagerService$3;
+Lcom/android/server/pm/UserManagerService$4;
+Lcom/android/server/pm/UserManagerService$5;
+Lcom/android/server/pm/UserManagerService$6;
+Lcom/android/server/pm/UserManagerService$DisableQuietModeUserUnlockedCallback;
 Lcom/android/server/pm/UserManagerService$LifeCycle;
+Lcom/android/server/pm/UserManagerService$LocalService$1;
 Lcom/android/server/pm/UserManagerService$LocalService;
 Lcom/android/server/pm/UserManagerService$MainHandler;
+Lcom/android/server/pm/UserManagerService$Shell;
 Lcom/android/server/pm/UserManagerService$UserData;
 Lcom/android/server/pm/UserManagerService;
 Lcom/android/server/pm/UserRestrictionsUtils;
 Lcom/android/server/pm/UserSystemPackageInstaller;
+Lcom/android/server/pm/UserTypeDetails$1;
 Lcom/android/server/pm/UserTypeDetails$Builder;
 Lcom/android/server/pm/UserTypeDetails;
 Lcom/android/server/pm/UserTypeFactory;
 Lcom/android/server/pm/dex/-$$Lambda$ArtManagerService$MEVzU-orlv4msZVF-bA5NLti04g;
 Lcom/android/server/pm/dex/-$$Lambda$ArtManagerService$_rD0Y6OPSJHMdjTIOtucoGQ1xag;
+Lcom/android/server/pm/dex/ArtManagerService$1;
 Lcom/android/server/pm/dex/ArtManagerService$ArtManagerInternalImpl;
 Lcom/android/server/pm/dex/ArtManagerService;
 Lcom/android/server/pm/dex/DexManager$DexSearchResult;
 Lcom/android/server/pm/dex/DexManager$PackageCodeLocations;
+Lcom/android/server/pm/dex/DexManager$RegisterDexModuleResult;
 Lcom/android/server/pm/dex/DexManager;
 Lcom/android/server/pm/dex/DexoptOptions;
 Lcom/android/server/pm/dex/DexoptUtils;
 Lcom/android/server/pm/dex/DynamicCodeLogger;
+Lcom/android/server/pm/dex/PackageDexUsage$1;
 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$1;
 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/permission/-$$Lambda$DefaultPermissionGrantPolicy$SHfHTWKpfBf_vZtWArm-FlNBI8k;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$1$7A2ffMA57G4PvFD5RbG2mRh2Q_8;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$1$QSCLyelVDMHZe8LrlYhYvfz5G2c;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$3_HObOA7SDQazRHAVI1qUUdGq_s;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$5wIJaBo3ATYcr96ofI23sjuUqoA;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$BEPoV9HmbUN2-ZgCcIqC6xfzvew;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$E0rM1FNIqzKUZzqphmkzeY3ZdTk;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$JcWw5txStfnrnbvcFd2durv6YOo;
 Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$NPd9St1HBvGAtg1uhMV2Upfww4g;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$PermissionManagerServiceInternalImpl$u0m9fxQ1DzsHML4E-xlMAgH2gIE;
 Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$QU_UFF-9J77Mq118FLJUiLh4ARI;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$T4uCZ9__oEXYpzLBYEW1T_BN3SU;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$aQWnOfCuKK-rSxzDPI_dUOtzv8I;
 Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$eApyRxwI3JHTSVAxV9EbP43gFOo;
 Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$g9Bo5gFpLYyPOsp3K8Aik5xseDI;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$igfYI7thImnYrDxs3qWtqs2SCRk;
 Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$iwnRBDwjg4K5iRGbRU5_sVt0zaU;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$oG7YD8MVgcqcPbx_HXQ04PEUOXM;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$vxr3T148I1WcHTp-Fe7nK-xkT-E;
+Lcom/android/server/pm/permission/-$$Lambda$oynlBn0BbcU0KODvfUDDUHb5LKY;
 Lcom/android/server/pm/permission/BasePermission;
 Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;
 Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DefaultPermissionGrant;
 Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;
+Lcom/android/server/pm/permission/OneTimePermissionUserManager;
 Lcom/android/server/pm/permission/PermissionManagerService$1;
+Lcom/android/server/pm/permission/PermissionManagerService$2;
 Lcom/android/server/pm/permission/PermissionManagerService$OnPermissionChangeListeners;
 Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
 Lcom/android/server/pm/permission/PermissionManagerService;
@@ -26634,9 +43754,15 @@
 Lcom/android/server/pm/permission/PermissionsState$PermissionData;
 Lcom/android/server/pm/permission/PermissionsState$PermissionState;
 Lcom/android/server/pm/permission/PermissionsState;
+Lcom/android/server/policy/-$$Lambda$PermissionPolicyService$8D9Zbki65ND_Q20M-Trexl6cHcQ;
 Lcom/android/server/policy/-$$Lambda$PermissionPolicyService$EOXe1_laAw9FFgJquDg6Qy2DagQ;
+Lcom/android/server/policy/-$$Lambda$PermissionPolicyService$RYery4oeHNcS8uZ6BgM2MtZIvKw;
 Lcom/android/server/policy/-$$Lambda$PermissionPolicyService$V2gOjn4rTBH_rbxagOz-eOTvNfc;
+Lcom/android/server/policy/-$$Lambda$PermissionPolicyService$enZnky8NIhd5B9lAhmYeFn1Y6mk;
 Lcom/android/server/policy/-$$Lambda$oXa0y3A-00RiQs6-KTPBgpkGtgw;
+Lcom/android/server/policy/BurnInProtectionHelper;
+Lcom/android/server/policy/DisplayFoldController;
+Lcom/android/server/policy/EventLogTags;
 Lcom/android/server/policy/GlobalActions;
 Lcom/android/server/policy/GlobalActionsProvider$GlobalActionsListener;
 Lcom/android/server/policy/GlobalActionsProvider;
@@ -26655,6 +43781,7 @@
 Lcom/android/server/policy/PhoneWindowManager$11;
 Lcom/android/server/policy/PhoneWindowManager$12;
 Lcom/android/server/policy/PhoneWindowManager$13;
+Lcom/android/server/policy/PhoneWindowManager$14;
 Lcom/android/server/policy/PhoneWindowManager$1;
 Lcom/android/server/policy/PhoneWindowManager$2;
 Lcom/android/server/policy/PhoneWindowManager$3;
@@ -26663,7 +43790,9 @@
 Lcom/android/server/policy/PhoneWindowManager$6;
 Lcom/android/server/policy/PhoneWindowManager$7;
 Lcom/android/server/policy/PhoneWindowManager$8;
+Lcom/android/server/policy/PhoneWindowManager$9;
 Lcom/android/server/policy/PhoneWindowManager$DisplayHomeButtonHandler;
+Lcom/android/server/policy/PhoneWindowManager$HdmiControl;
 Lcom/android/server/policy/PhoneWindowManager$HdmiVideoExtconUEventObserver;
 Lcom/android/server/policy/PhoneWindowManager$MyWakeGestureListener;
 Lcom/android/server/policy/PhoneWindowManager$PolicyHandler;
@@ -26683,12 +43812,14 @@
 Lcom/android/server/policy/WakeGestureListener;
 Lcom/android/server/policy/WindowManagerPolicy$DisplayContentInfo;
 Lcom/android/server/policy/WindowManagerPolicy$InputConsumer;
+Lcom/android/server/policy/WindowManagerPolicy$OnKeyguardExitResult;
 Lcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;
 Lcom/android/server/policy/WindowManagerPolicy$ScreenOnListener;
 Lcom/android/server/policy/WindowManagerPolicy$StartingSurface;
 Lcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;
 Lcom/android/server/policy/WindowManagerPolicy$WindowState;
 Lcom/android/server/policy/WindowManagerPolicy;
+Lcom/android/server/policy/WindowOrientationListener$AccelSensorJudge;
 Lcom/android/server/policy/WindowOrientationListener$OrientationJudge;
 Lcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge$1;
 Lcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;
@@ -26696,6 +43827,7 @@
 Lcom/android/server/policy/keyguard/-$$Lambda$KeyguardServiceDelegate$1$ZQ5qG3EmC57J43br9oobeNISXyE;
 Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$1;
 Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$DrawnListener;
+Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardExitDelegate;
 Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardShowDelegate;
 Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardState;
 Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;
@@ -26703,12 +43835,16 @@
 Lcom/android/server/policy/keyguard/KeyguardStateMonitor$StateCallback;
 Lcom/android/server/policy/keyguard/KeyguardStateMonitor;
 Lcom/android/server/policy/role/LegacyRoleResolutionPolicy;
+Lcom/android/server/power/-$$Lambda$InattentiveSleepWarningController$EjYRIermunwb9Ll5LMj3chPJN6k;
+Lcom/android/server/power/-$$Lambda$InattentiveSleepWarningController$fd5hIb5QJl3fTkCKcm9jEkrhnUU;
 Lcom/android/server/power/-$$Lambda$PowerManagerService$FUW_os-Z9SregUE_DR9vDwaRuXo;
 Lcom/android/server/power/-$$Lambda$ThermalManagerService$9JFHCKCwrnUIYoXDsqNamhlY5VU;
 Lcom/android/server/power/-$$Lambda$ThermalManagerService$ThermalHal20Wrapper$R9S8YWn8x1F3V2TOvXtmky1V44Q;
+Lcom/android/server/power/-$$Lambda$ThermalManagerService$ThermalHal20Wrapper$dRsq86SXVH7z342fbs2U36cr67I;
 Lcom/android/server/power/-$$Lambda$ThermalManagerService$ZPQKzo9ZjU-hL4QYH693hWuTqjk;
 Lcom/android/server/power/-$$Lambda$ThermalManagerService$x5obtNvJKZxnpguOiQsFBDmBZ4k;
 Lcom/android/server/power/AttentionDetector$1;
+Lcom/android/server/power/AttentionDetector$AttentionCallbackInternalImpl;
 Lcom/android/server/power/AttentionDetector$UserSwitchObserver;
 Lcom/android/server/power/AttentionDetector;
 Lcom/android/server/power/InattentiveSleepWarningController;
@@ -26722,6 +43858,8 @@
 Lcom/android/server/power/Notifier$NotifierHandler;
 Lcom/android/server/power/Notifier;
 Lcom/android/server/power/PowerManagerService$1;
+Lcom/android/server/power/PowerManagerService$2;
+Lcom/android/server/power/PowerManagerService$3;
 Lcom/android/server/power/PowerManagerService$4;
 Lcom/android/server/power/PowerManagerService$BatteryReceiver;
 Lcom/android/server/power/PowerManagerService$BinderService;
@@ -26741,19 +43879,39 @@
 Lcom/android/server/power/PowerManagerService$UserSwitchedReceiver;
 Lcom/android/server/power/PowerManagerService$WakeLock;
 Lcom/android/server/power/PowerManagerService;
+Lcom/android/server/power/PowerManagerShellCommand;
+Lcom/android/server/power/ShutdownThread;
 Lcom/android/server/power/SuspendBlocker;
 Lcom/android/server/power/SystemPropertiesWrapper;
 Lcom/android/server/power/ThermalManagerService$1;
+Lcom/android/server/power/ThermalManagerService$ThermalHal10Wrapper;
+Lcom/android/server/power/ThermalManagerService$ThermalHal11Wrapper;
 Lcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper$1;
 Lcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;
 Lcom/android/server/power/ThermalManagerService$ThermalHalWrapper$DeathRecipient;
 Lcom/android/server/power/ThermalManagerService$ThermalHalWrapper$TemperatureChangedCallback;
 Lcom/android/server/power/ThermalManagerService$ThermalHalWrapper;
+Lcom/android/server/power/ThermalManagerService$ThermalShellCommand;
 Lcom/android/server/power/ThermalManagerService;
+Lcom/android/server/power/WakeLockLog$EntryByteTranslator;
+Lcom/android/server/power/WakeLockLog$Injector;
+Lcom/android/server/power/WakeLockLog$LogEntry;
+Lcom/android/server/power/WakeLockLog$TagData;
+Lcom/android/server/power/WakeLockLog$TagDatabase$Callback;
+Lcom/android/server/power/WakeLockLog$TagDatabase;
+Lcom/android/server/power/WakeLockLog$TheLog$1;
+Lcom/android/server/power/WakeLockLog$TheLog$2;
+Lcom/android/server/power/WakeLockLog$TheLog;
+Lcom/android/server/power/WakeLockLog$WakeLockLogHandler;
+Lcom/android/server/power/WakeLockLog;
 Lcom/android/server/power/WirelessChargerDetector$1;
 Lcom/android/server/power/WirelessChargerDetector$2;
 Lcom/android/server/power/WirelessChargerDetector;
+Lcom/android/server/power/batterysaver/-$$Lambda$BatterySaverPolicy$7a-wfvqpjaa389r6FVZsJX98cd8;
 Lcom/android/server/power/batterysaver/-$$Lambda$BatterySaverPolicy$rfw31Sb8JX1OVD2rGHGtCXyfop8;
+Lcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$66yeetZVz7IbzEr9gw2J77hoMVI;
+Lcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$KPPqeIS8QIZneCCBkN31dB4SR6U;
+Lcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$QXh4KHnoFaNqEkr199qR1vIeCpo;
 Lcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$SSfmWJrD4RBoVg8A8loZrS-jhAo;
 Lcom/android/server/power/batterysaver/-$$Lambda$BatterySaverStateMachine$fEidyt_9TXlXBpF6D2lhOOrfOC4;
 Lcom/android/server/power/batterysaver/-$$Lambda$FileUpdater$NUmipjKCJwbgmFbIcGS3uaz3QFk;
@@ -26767,6 +43925,9 @@
 Lcom/android/server/power/batterysaver/BatterySaverPolicy;
 Lcom/android/server/power/batterysaver/BatterySaverStateMachine$1;
 Lcom/android/server/power/batterysaver/BatterySaverStateMachine;
+Lcom/android/server/power/batterysaver/BatterySavingStats$BatterySaverState;
+Lcom/android/server/power/batterysaver/BatterySavingStats$DozeState;
+Lcom/android/server/power/batterysaver/BatterySavingStats$InteractiveState;
 Lcom/android/server/power/batterysaver/BatterySavingStats$Stat;
 Lcom/android/server/power/batterysaver/BatterySavingStats;
 Lcom/android/server/power/batterysaver/CpuFrequencies;
@@ -26775,8 +43936,10 @@
 Lcom/android/server/print/PrintManagerService$PrintManagerImpl$1;
 Lcom/android/server/print/PrintManagerService$PrintManagerImpl$2;
 Lcom/android/server/print/PrintManagerService$PrintManagerImpl$3;
+Lcom/android/server/print/PrintManagerService$PrintManagerImpl$4;
 Lcom/android/server/print/PrintManagerService$PrintManagerImpl;
 Lcom/android/server/print/PrintManagerService;
+Lcom/android/server/print/PrintShellCommand;
 Lcom/android/server/print/RemotePrintService$PrintServiceCallbacks;
 Lcom/android/server/print/RemotePrintService;
 Lcom/android/server/print/RemotePrintServiceRecommendationService$RemotePrintServiceRecommendationServiceCallbacks;
@@ -26786,7 +43949,12 @@
 Lcom/android/server/print/RemotePrintSpooler;
 Lcom/android/server/print/UserState$PrintJobForAppCache;
 Lcom/android/server/print/UserState;
+Lcom/android/server/protolog/-$$Lambda$PfxMAktVLMbQMPp_FRkrQxibSKE;
+Lcom/android/server/protolog/-$$Lambda$ProtoLogImpl$G6yKiHAdF7lI4aTCybTMCes5zyI;
 Lcom/android/server/protolog/-$$Lambda$ProtoLogImpl$W1-9aFv3AkmuxF_FKhP3IYl2IMA;
+Lcom/android/server/protolog/-$$Lambda$ProtoLogImpl$dhk0iBKAK3ywNSTqD4XUL3Oq0hM;
+Lcom/android/server/protolog/-$$Lambda$ProtoLogImpl$mcAeBX3AFrWeIaIbVZQdFHsbH1E;
+Lcom/android/server/protolog/-$$Lambda$ProtoLogImpl$u2ST5Fi0HXPt_TWW4vWXOLOmOOU;
 Lcom/android/server/protolog/-$$Lambda$QtQzaT3jZ03CdC3RGYitrH7aUYo;
 Lcom/android/server/protolog/ProtoLog$Cache;
 Lcom/android/server/protolog/ProtoLogImpl$1;
@@ -26794,11 +43962,22 @@
 Lcom/android/server/protolog/ProtoLogImpl;
 Lcom/android/server/protolog/ProtoLogViewerConfigReader;
 Lcom/android/server/protolog/common/IProtoLogGroup;
+Lcom/android/server/protolog/common/LogDataType;
+Lcom/android/server/recoverysystem/RecoverySystemService$1;
 Lcom/android/server/recoverysystem/RecoverySystemService$Injector;
 Lcom/android/server/recoverysystem/RecoverySystemService$Lifecycle;
+Lcom/android/server/recoverysystem/RecoverySystemService$UncryptSocket;
 Lcom/android/server/recoverysystem/RecoverySystemService;
+Lcom/android/server/recoverysystem/RecoverySystemShellCommand;
 Lcom/android/server/restrictions/RestrictionsManagerService$RestrictionsManagerImpl;
 Lcom/android/server/restrictions/RestrictionsManagerService;
+Lcom/android/server/role/-$$Lambda$RoleManagerService$4FcQsmMH6Dhstzx5gl80tO2TkTw;
+Lcom/android/server/role/-$$Lambda$RoleManagerService$DefaultBrowserProvider$X3gMGYlhUgmYMuqj0K5NlCALn5E;
+Lcom/android/server/role/-$$Lambda$RoleManagerService$DefaultBrowserProvider$cU2Hhx52nmVnJXJvHuAnRTzxST0;
+Lcom/android/server/role/-$$Lambda$RoleManagerService$DefaultHomeProvider$9eeqZaqhD2FohE8PZOcBaWBSZu4;
+Lcom/android/server/role/-$$Lambda$RoleManagerService$TCTA4I2bhEypguZihxs4ezif6t0;
+Lcom/android/server/role/-$$Lambda$RoleManagerService$p0uu3WH3gz96-kAWnyu6IUHMtCg;
+Lcom/android/server/role/-$$Lambda$RoleManagerService$wh1KtBLaCUo52_0EzVI0n0nL1ng;
 Lcom/android/server/role/-$$Lambda$RoleUserState$e8W_Zaq_FyocW_DX1qcbN0ld0co;
 Lcom/android/server/role/RoleManagerInternal;
 Lcom/android/server/role/RoleManagerService$1;
@@ -26810,20 +43989,42 @@
 Lcom/android/server/role/RoleManagerService$RoleHoldersResolver;
 Lcom/android/server/role/RoleManagerService$Stub;
 Lcom/android/server/role/RoleManagerService;
+Lcom/android/server/role/RoleManagerShellCommand;
 Lcom/android/server/role/RoleUserState$Callback;
 Lcom/android/server/role/RoleUserState;
+Lcom/android/server/rollback/-$$Lambda$Rollback$EvT1BaUrjWsJaVTizSu77MCfRBs;
+Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$1$QPIiLceItKZOKeHshAhrcNkM3m8;
+Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$58BbNzpzWX_z-GzhKXpdGPwKcIU;
 Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$5VimxC3UlEV_IzyoBdYlrATzYd8;
+Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$9jRyv0ATJ7l2lc6xAd3tmkVmx7g;
+Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$Be1hJgd8PbSLFX_uKif2yCGhtKo;
+Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$EebLQVAY8_XZdz3mG6qTmlJupzA;
+Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$K_I_qP9ed2R4xbW7mnGjXH6B7Yc;
+Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$Oa5w5-KGpmVbVAVYjUwNItCBRqg;
+Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$Qz1-TYGVImHAonyKgh8LjWx_ub0;
+Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$UZ6heBvW792l5X1X86VJbao61T4;
+Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$bhmKnyhoneBLazCFC2rxxtRypFI;
+Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$mLT_D8xDNyND2xOtKDtfeJiTkqI;
+Lcom/android/server/rollback/-$$Lambda$RollbackManagerServiceImpl$pjR6RZoFE_-Nf6Dqbrc5-qATSwY;
+Lcom/android/server/rollback/-$$Lambda$RollbackPackageHealthObserver$IamLzWoD8UIw0nYBYf04E_MUT8U;
+Lcom/android/server/rollback/-$$Lambda$RollbackPackageHealthObserver$_CTueeoAyZZbpbCYMvJ3rbtIF94;
+Lcom/android/server/rollback/-$$Lambda$RollbackPackageHealthObserver$pi_OhdsKzJHdXoHHtYauaWDdX5A;
 Lcom/android/server/rollback/AppDataRollbackHelper;
+Lcom/android/server/rollback/LocalIntentReceiver;
+Lcom/android/server/rollback/Rollback;
 Lcom/android/server/rollback/RollbackManagerService;
 Lcom/android/server/rollback/RollbackManagerServiceImpl$1;
 Lcom/android/server/rollback/RollbackManagerServiceImpl$2;
 Lcom/android/server/rollback/RollbackManagerServiceImpl$3;
 Lcom/android/server/rollback/RollbackManagerServiceImpl$4;
 Lcom/android/server/rollback/RollbackManagerServiceImpl$5;
+Lcom/android/server/rollback/RollbackManagerServiceImpl$NewRollback;
 Lcom/android/server/rollback/RollbackManagerServiceImpl$SessionCallback;
 Lcom/android/server/rollback/RollbackManagerServiceImpl;
+Lcom/android/server/rollback/RollbackPackageHealthObserver$1;
 Lcom/android/server/rollback/RollbackPackageHealthObserver;
 Lcom/android/server/rollback/RollbackStore;
+Lcom/android/server/rollback/WatchdogRollbackLogger;
 Lcom/android/server/search/SearchManagerService$GlobalSearchProviderObserver;
 Lcom/android/server/search/SearchManagerService$Lifecycle$1;
 Lcom/android/server/search/SearchManagerService$Lifecycle;
@@ -26831,15 +44032,20 @@
 Lcom/android/server/search/SearchManagerService;
 Lcom/android/server/search/Searchables$1;
 Lcom/android/server/search/Searchables;
+Lcom/android/server/security/FileIntegrityService$1;
+Lcom/android/server/security/FileIntegrityService;
 Lcom/android/server/security/KeyAttestationApplicationIdProviderService;
 Lcom/android/server/security/KeyChainSystemService$1;
 Lcom/android/server/security/KeyChainSystemService;
+Lcom/android/server/security/VerityUtils$1;
 Lcom/android/server/security/VerityUtils$SetupResult;
 Lcom/android/server/security/VerityUtils$TrackedShmBufferFactory;
 Lcom/android/server/security/VerityUtils;
 Lcom/android/server/signedconfig/GlobalSettingsConfigApplicator;
 Lcom/android/server/signedconfig/SignatureVerifier;
 Lcom/android/server/signedconfig/SignedConfig;
+Lcom/android/server/signedconfig/SignedConfigEvent;
+Lcom/android/server/signedconfig/SignedConfigService$1;
 Lcom/android/server/signedconfig/SignedConfigService$UpdateReceiver;
 Lcom/android/server/signedconfig/SignedConfigService;
 Lcom/android/server/slice/-$$Lambda$PinnedSliceState$2PaYhOaggf1E5xg82LTTEwxmLE4;
@@ -26848,6 +44054,7 @@
 Lcom/android/server/slice/-$$Lambda$PinnedSliceState$j_JfEZwPCa729MjgsTSd8MAItIw;
 Lcom/android/server/slice/-$$Lambda$PinnedSliceState$t5Vl61Ns1u_83c4ri7920sczEu0;
 Lcom/android/server/slice/-$$Lambda$PinnedSliceState$vxnx7v9Z67Tj9aywVmtdX48br1M;
+Lcom/android/server/slice/-$$Lambda$SliceManagerService$EsoJb3dNe0G_qzoQixj72OS5gnw;
 Lcom/android/server/slice/-$$Lambda$SliceManagerService$LkusK1jmu9JKJTiMRWqWxNGEGbY;
 Lcom/android/server/slice/-$$Lambda$SliceManagerService$ic_PW16x_KcVi-NszMwHhErqI0s;
 Lcom/android/server/slice/-$$Lambda$SliceManagerService$pJ39TkC3AEVezLFEPuJgSQSTDJM;
@@ -26861,12 +44068,14 @@
 Lcom/android/server/slice/SliceManagerService$Lifecycle;
 Lcom/android/server/slice/SliceManagerService$PackageMatchingCache;
 Lcom/android/server/slice/SliceManagerService;
+Lcom/android/server/slice/SlicePermissionManager$1;
 Lcom/android/server/slice/SlicePermissionManager$H;
 Lcom/android/server/slice/SlicePermissionManager$ParserHolder;
 Lcom/android/server/slice/SlicePermissionManager$PkgUser;
 Lcom/android/server/slice/SlicePermissionManager;
 Lcom/android/server/slice/SliceProviderPermissions$SliceAuthority;
 Lcom/android/server/slice/SliceProviderPermissions;
+Lcom/android/server/slice/SliceShellCommand;
 Lcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$F-iA254xzDfAHrQW86c2oSqXfwI;
 Lcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$crQZgbDmIG6q92Mrkm49T2yqrs0;
 Lcom/android/server/soundtrigger/-$$Lambda$SoundTriggerService$RemoteSoundTriggerDetectionService$t5mBYXswwLAAdm47WS10stLjYng;
@@ -26878,6 +44087,8 @@
 Lcom/android/server/soundtrigger/SoundTriggerHelper$PowerSaveModeListener;
 Lcom/android/server/soundtrigger/SoundTriggerHelper;
 Lcom/android/server/soundtrigger/SoundTriggerInternal;
+Lcom/android/server/soundtrigger/SoundTriggerLogger$Event;
+Lcom/android/server/soundtrigger/SoundTriggerLogger$StringEvent;
 Lcom/android/server/soundtrigger/SoundTriggerLogger;
 Lcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;
 Lcom/android/server/soundtrigger/SoundTriggerService$NumOps;
@@ -26885,9 +44096,151 @@
 Lcom/android/server/soundtrigger/SoundTriggerService$Operation;
 Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService$1;
 Lcom/android/server/soundtrigger/SoundTriggerService$RemoteSoundTriggerDetectionService;
+Lcom/android/server/soundtrigger/SoundTriggerService$SoundModelStatTracker$SoundModelStat;
 Lcom/android/server/soundtrigger/SoundTriggerService$SoundModelStatTracker;
 Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;
 Lcom/android/server/soundtrigger/SoundTriggerService;
+Lcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$-_QZ-VR2645z-GkbokL_T8I__48;
+Lcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$TgbC0Y00RFANX4qn5-S2zqA0RJU;
+Lcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$U-QnBwfU2Eg5ANmLxegcyHjJw1M;
+Lcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$X838A3db9kVMHQpQXa1dyFuUof0;
+Lcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$d4MfUfrLxE-WfTBopivzvQedlJQ;
+Lcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$ewHo6fX75Dw1073KIePOuh3oLIE;
+Lcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$fbvBJLiyU152ejAJj5a9PvFEhUI;
+Lcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$mz3ZN09XJCrlYM4uLTiT43iNlCQ;
+Lcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerHw2Compat$zVVAAwHUfPftj_Egw5y5yBJZXPw;
+Lcom/android/server/soundtrigger_middleware/-$$Lambda$SoundTriggerMiddlewareService$Lifecycle$-t8UndY0AHGyM6n9ce2y6qok3Ho;
+Lcom/android/server/soundtrigger_middleware/AudioSessionProviderImpl;
+Lcom/android/server/soundtrigger_middleware/ConversionUtil;
+Lcom/android/server/soundtrigger_middleware/HalException;
+Lcom/android/server/soundtrigger_middleware/HalFactory;
+Lcom/android/server/soundtrigger_middleware/Hw2CompatUtil;
+Lcom/android/server/soundtrigger_middleware/ISoundTriggerHw2$Callback;
+Lcom/android/server/soundtrigger_middleware/ISoundTriggerHw2;
+Lcom/android/server/soundtrigger_middleware/InternalServerError;
+Lcom/android/server/soundtrigger_middleware/RecoverableException;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$1;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$NotSupported;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$SoundTriggerCallback;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$1;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$Lifecycle;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$1;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;
+Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;
+Lcom/android/server/soundtrigger_middleware/UuidUtil;
+Lcom/android/server/stats/-$$Lambda$StatsPullAtomService$EbRlEjVa52EZqvTktBrsVz_xiQc;
+Lcom/android/server/stats/-$$Lambda$StatsPullAtomService$J0XbDHzcNTw46LNg2i54ecFZHmo;
+Lcom/android/server/stats/-$$Lambda$StatsPullAtomService$LXlSF9hVw5xJWZeE9MueVeGuYlE;
+Lcom/android/server/stats/-$$Lambda$StatsPullAtomService$SuO7HJ54GUnG0kWIGHl94Gs0AlM;
+Lcom/android/server/stats/-$$Lambda$StatsPullAtomService$VacoZ2wbIeAc9JIIYvmytuwBEKQ;
+Lcom/android/server/stats/-$$Lambda$StatsPullAtomService$WYL8jwEtrR3YxQtIXV6asRHqKLI;
+Lcom/android/server/stats/-$$Lambda$StatsPullAtomService$bdFry8Zk1wYxmQbrOxMR_Pp9960;
+Lcom/android/server/stats/-$$Lambda$StatsPullAtomService$fvH7sIVZhG6jdyiuwvkwrEA6Ma8;
+Lcom/android/server/stats/-$$Lambda$StatsPullAtomService$rfnm7rXB2YTVbgaO43K28w78oKk;
+Lcom/android/server/stats/-$$Lambda$StatsPullAtomService$ut-c4lKIS9fPnUOWESOzEKZZwUk;
+Lcom/android/server/stats/IonMemoryUtil$IonAllocations;
+Lcom/android/server/stats/IonMemoryUtil;
+Lcom/android/server/stats/ProcfsMemoryUtil$MemorySnapshot;
+Lcom/android/server/stats/ProcfsMemoryUtil;
+Lcom/android/server/stats/StatsPullAtomService;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$-PhCvl52WhUMdMnxVAqihfFHthA;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$0P4nZ-nE165g-Q5g9CoYyB1Byw4;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$1pxf28Ik2lMu276JUeacrtqOJzc;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$1tOYlDsL-P_KhgklFe6EqdCi9Yk;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$2Fp18gjakqm8R81qgIOHaDrmsU0;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$30xS0mVfwQjdpwkeyHDi7Bx6u60;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$3OXuKaMjWs_ET87IAgknuvoqC8U;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$3qrx8WI68Lm0XGBBfW4gzODU9yk;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$4tfrHblqmHrtPiB3WLHYY9Tgjx4;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$5X-K4R4LvqwKsdGFUQS9YrVTDoM;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$7UAUwQTlDkqBQjoyOoessLYxCH0;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$7hfhsUfLzXxgbvx0G5m-nXfuhtE;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$7xMtizDmeMIdTUoXvmAJ9__a1H8;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$AJY7IPMD64l6eMvl-4Yk1PNJTC8;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$AbytlHPB_renx2JnIl7w0EkN8Ms;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$AiS8ePl8e1Vo_1hXDcyJiYZVEak;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$DD__7RQZDPvJeL9pnb_7J1voUNE;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$DaTIT3haxTQC9hsnPFM6rU5N88A;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ErlITMC3hXYvJk7H-BuZWp0l5ko;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$GT9G5Edej6G4xpQClwAG4i73Ml8;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$Gu78SpEIgqYCwZEn1wrkHRIhYfw;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$H33PO3Q_4vgNoahcl426eELxpcA;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$H5--fOxGaHVjnFaRkyzvBX76HOE;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$HX4G1hDcJMKgszczqxpSHdoDK_s;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$I9d0JaNY8gTVS5nJ3bvbDlp2yu0;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$IB4WDvYz1DDpmLMD3gEZhLRa46s;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ITU8q06caEdamlLZPazkHB2M8iE;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$KQag3_StEOzx9XWRUKksVrW-B4o;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$KuCLMqc8aqwcyjfuGvKp-HrwVAY;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$LX85szVlyRD-qrhFa1vvBo3yiHI;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$M5tfOmnyD25Ws5xFmcaNZmCcWv4;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$Myxd926lI020RejJAC3J7xJBf-M;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$O-i_qJRna30dOvZwoceUXgRcdmM;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$OnuY6QGq5IcThy5OPAdG5C6fFrU;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$PXO4cqN_PpXkJgCq2SHpV_sY50E;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$QQcMZJIXQd5YLqJodYJFOwUBv0c;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$REkQRT5hxWedgS_oVmye_rXEMpM;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$RPju9l8LZxvj1kR9SO_j3YArLwk;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$Sf77fvy4SVd9GzRqpAUUydeJGQI;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$SqdF4nK9ElmlOAiZ4Ki0RbhnyFQ;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$T3eGvsVXN09Gi-BtBQXR4zdDBEg;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$TbCE6UdFHnpFKs5GJ5OeGvkZR3w;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$UzadvADZjWad2cUMtKWnDa-bkao;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$VuGEpDG3j9NcXTay60birJz1dKw;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$WI1rTiStFbJ3m4p9d8AvyRXzTXU;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$XbISM3meLPWUKRh1ln9wbqhodVo;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ZUW2WJxdpx34RXfmAZzvaSioIaI;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ZcA3hS41MDSLP3tvbVw7ycWV2Uk;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$azxbjQftB2lwBb_UEHTETFb5urU;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$bGdd1XQKPBSlirlhMqL7Kyr4dKU;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$bVYBhIENPiTPrSDw3qDtspWRc68;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$bncFYZhYtBOc8H2sC7RT_uK4VQc;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$cD_BSMC6DqR-o7gxzB0mTMww2pc;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$dvk2NfS9657o0VC9lBgVa8gpvlQ;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$eKQ59cCrSM0iXjIA64vCoqEuTaQ;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ew5jVI8ng1800NuFBR9nuVqZhEA;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$fktJbqJAvHUrt48VRPzhsYMAbE4;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$fl3y2rQNVEsKV4HvhEyC2k3aSW4;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$h23-vyYl4vByordF3qxCf47oQcY;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$hIAQYRkW-2p4zc6JTn5OwHqbM5M;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$hKgCHOcWWjhlKa_oJzU15Zt0JUY;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$hPsC5VFMB0pUxEe6YNkhn5cdnB8;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$haijZs4owQ0GrMSMCqBDmYyG3-U;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$kbyq1Jaw0bLtz4QZ0dHLQDBcS84;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$lXlXj5VhcAmBNund256UqZwrUcQ;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$n5Z40V94ruxObttUmeeT9hJ2lwU;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ndKYmfQrhE59wBrqdr_J4mR9XeQ;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$q64SJPz4qOJVhsbLkSd-TefRkz4;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$qv-qUoYV_cdRHv47l_lHeb43i84;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$roxBOSLRvrWWGOq4tg7SrKcwYkM;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$sHsQqf-uX2oC0xi9S65s-8cl6w0;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$sN2JKQjhqafdV9iBufFp7wWmkBg;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$tgrBI__GVejUkinaoMC5NY-7TjM;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$uAEfAOa33shUMp3_0vxKUg1a16s;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$u_a4BjhN7rx49bnJveS1mjwhkb8;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$ufk9iL1tEj0A5bia0nI_H6pWIHE;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$vXSqtIKAG3al1X91EB3FoH96cWo;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$yHqXLPks8Cf6arciMxSh7owd6sU;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$z9YxSZJALshcZpXiGJxNWlLa2ME;
+Lcom/android/server/stats/pull/-$$Lambda$StatsPullAtomService$zkqK-r9QsJBeVy1sojo4bOB8YhY;
+Lcom/android/server/stats/pull/-$$Lambda$wPejPqIRC0ueiw9uak8ULakT1R8;
+Lcom/android/server/stats/pull/IonMemoryUtil$IonAllocations;
+Lcom/android/server/stats/pull/IonMemoryUtil;
+Lcom/android/server/stats/pull/ProcfsMemoryUtil$MemorySnapshot;
+Lcom/android/server/stats/pull/ProcfsMemoryUtil;
+Lcom/android/server/stats/pull/StatsPullAtomService$1;
+Lcom/android/server/stats/pull/StatsPullAtomService$ConnectivityStatsCallback;
+Lcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomCallbackImpl;
+Lcom/android/server/stats/pull/StatsPullAtomService$ThermalEventListener;
+Lcom/android/server/stats/pull/StatsPullAtomService;
+Lcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$E67OP8P-DuCzmX46ISCwIyOv93Q;
+Lcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$KPqmL9kxt0YFCz4dBAFkiUMRWw8;
+Lcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$P3yc6y5R6oqIuxbUK14JNoV_hJM;
 Lcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$dQguzfF4tEgBOj3Pr8MpGRN8HT0;
 Lcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$uF0ibEnnXe7Lxunxb98QQLJjgZM;
 Lcom/android/server/statusbar/-$$Lambda$StatusBarManagerService$yr21OX4Hyd_XfExwnVnVIn3Jfe4;
@@ -26898,6 +44251,7 @@
 Lcom/android/server/statusbar/StatusBarManagerService$DisableRecord;
 Lcom/android/server/statusbar/StatusBarManagerService$UiState;
 Lcom/android/server/statusbar/StatusBarManagerService;
+Lcom/android/server/statusbar/StatusBarShellCommand;
 Lcom/android/server/storage/AppCollector$BackgroundHandler;
 Lcom/android/server/storage/AppCollector;
 Lcom/android/server/storage/AppFuseBridge$MountScope;
@@ -26910,6 +44264,7 @@
 Lcom/android/server/storage/DeviceStorageMonitorService$2;
 Lcom/android/server/storage/DeviceStorageMonitorService$3;
 Lcom/android/server/storage/DeviceStorageMonitorService$CacheFileDeletedObserver;
+Lcom/android/server/storage/DeviceStorageMonitorService$Shell;
 Lcom/android/server/storage/DeviceStorageMonitorService$State;
 Lcom/android/server/storage/DeviceStorageMonitorService;
 Lcom/android/server/storage/DiskStatsFileLogger;
@@ -26919,18 +44274,49 @@
 Lcom/android/server/storage/FileCollector;
 Lcom/android/server/storage/StorageSessionController$ExternalStorageServiceException;
 Lcom/android/server/storage/StorageSessionController;
+Lcom/android/server/storage/StorageUserConnection$Session;
+Lcom/android/server/storage/StorageUserConnection;
+Lcom/android/server/systemcaptions/SystemCaptionsManagerPerUserService;
 Lcom/android/server/systemcaptions/SystemCaptionsManagerService;
 Lcom/android/server/telecom/-$$Lambda$TelecomLoaderService$4O6PYSHBsC0Q5H-Y3LkvD32Vcjk;
 Lcom/android/server/telecom/-$$Lambda$TelecomLoaderService$Dg9me3bEFl3t0NGOPYwXIoF34FY;
 Lcom/android/server/telecom/-$$Lambda$TelecomLoaderService$jGqhqH8bl_lWotJlrzraXplioIw;
 Lcom/android/server/telecom/-$$Lambda$TelecomLoaderService$v_RQMbGOOwc6kjxGSNUrOugH8pw;
 Lcom/android/server/telecom/TelecomLoaderService$1;
+Lcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection$1;
 Lcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;
 Lcom/android/server/telecom/TelecomLoaderService;
 Lcom/android/server/testharness/TestHarnessModeService$1;
+Lcom/android/server/testharness/TestHarnessModeService$PersistentData;
 Lcom/android/server/testharness/TestHarnessModeService$SetUpTestHarnessModeException;
+Lcom/android/server/testharness/TestHarnessModeService$TestHarnessModeShellCommand;
 Lcom/android/server/testharness/TestHarnessModeService;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$64mAXU9GjFt2f69p_xdhRl7xXFQ;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$C6b5fl8vcOQ42djzSJ_03hDc6yA;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$CB4TRod_LBt48w0zNWgHd_0r5tU;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$KnnEOusa8Z2droJJS1lDigNFcQs;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$LbKHscWPDUIjKzR4a1gANqdMY6c;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$LgTaKgUnkwyysO9lmBSO8HNViFU;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$Mu95ZECYMawAFTgaMzQ9kasDiKU;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$NrhR3cz8qMQshjDDQuBK6HtZpyc;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$XSRTA8JOHnkYT6Nx-j6ZQZBVb1k;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$YncBiGXrmV9iVRg9N6un11UZvEM;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$Zo3yKbNMpKbAhJ7coUzTv5c-zZI;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$bskC2PS7oOlLzDJkBbOVEdfy1Gg;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$dSVln_o2_pbF3ORGnBQ8z407M10;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$e1UWpNtFzY7M9iYeMHhCrNauxak;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$evPEo-mmJh6oAuwYuZkLKKZd_Dw;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$f_vDZ7EFXK9b8SQpksrEkEWKPq8;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$kUVQfCEBNt6jzkS89Io4xSHSuIs;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$mKOJpfoN0qgghwbMeUHqGFHaCDg;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$mLzk2wMmEjV5zvq4IRM6g-PyeAk;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$nMkPNkAsWr8y9ybbpmHncJ2R2Aw;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$s1d_iMop8cVfXdi-T-chBEHa9ek;
+Lcom/android/server/textclassifier/-$$Lambda$TextClassificationManagerService$x-GZDBev2pMmhyvF3nP65PH7VPo;
+Lcom/android/server/textclassifier/-$$Lambda$k-7KcqZH2A0AukChaKa6Xru13_Q;
+Lcom/android/server/textclassifier/TextClassificationManagerService$1;
 Lcom/android/server/textclassifier/TextClassificationManagerService$Lifecycle;
+Lcom/android/server/textclassifier/TextClassificationManagerService$PendingRequest;
 Lcom/android/server/textclassifier/TextClassificationManagerService$TextClassifierSettingsListener;
 Lcom/android/server/textclassifier/TextClassificationManagerService$UserState$TextClassifierServiceConnection;
 Lcom/android/server/textclassifier/TextClassificationManagerService$UserState;
@@ -26938,15 +44324,21 @@
 Lcom/android/server/textservices/LocaleUtils;
 Lcom/android/server/textservices/TextServicesManagerInternal$1;
 Lcom/android/server/textservices/TextServicesManagerInternal;
+Lcom/android/server/textservices/TextServicesManagerService$1;
 Lcom/android/server/textservices/TextServicesManagerService$ISpellCheckerServiceCallbackBinder;
 Lcom/android/server/textservices/TextServicesManagerService$InternalDeathRecipients;
 Lcom/android/server/textservices/TextServicesManagerService$InternalServiceConnection;
 Lcom/android/server/textservices/TextServicesManagerService$Lifecycle$1;
 Lcom/android/server/textservices/TextServicesManagerService$Lifecycle;
+Lcom/android/server/textservices/TextServicesManagerService$SessionRequest;
 Lcom/android/server/textservices/TextServicesManagerService$SpellCheckerBindGroup;
 Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;
 Lcom/android/server/textservices/TextServicesManagerService$TextServicesMonitor;
 Lcom/android/server/textservices/TextServicesManagerService;
+Lcom/android/server/timedetector/-$$Lambda$TimeDetectorService$CIVCmMHYHAlLayNvm792RTW8F3U;
+Lcom/android/server/timedetector/-$$Lambda$TimeDetectorService$DcAkTJaWB9_yMqP5iTI6-JQdq4g;
+Lcom/android/server/timedetector/-$$Lambda$TimeDetectorService$nU2ruOeSUWWPVvB4A7i7qaumT4s;
+Lcom/android/server/timedetector/-$$Lambda$lkjIbFi2SczFhCGbzNmkRxmPS0M;
 Lcom/android/server/timedetector/TimeDetectorService$1;
 Lcom/android/server/timedetector/TimeDetectorService$Lifecycle;
 Lcom/android/server/timedetector/TimeDetectorService;
@@ -26954,17 +44346,25 @@
 Lcom/android/server/timedetector/TimeDetectorStrategy;
 Lcom/android/server/timedetector/TimeDetectorStrategyCallbackImpl;
 Lcom/android/server/timedetector/TimeDetectorStrategyImpl;
+Lcom/android/server/timezonedetector/-$$Lambda$TimeZoneDetectorService$9xvncY35tAcP2eoRcnDHHViAoZw;
+Lcom/android/server/timezonedetector/-$$Lambda$TimeZoneDetectorService$UdeBqzyBZX1S4jHLM7d2cKvE_-U;
+Lcom/android/server/timezonedetector/ArrayMapWithHistory;
+Lcom/android/server/timezonedetector/ReferenceWithHistory;
 Lcom/android/server/timezonedetector/TimeZoneDetectorCallbackImpl;
 Lcom/android/server/timezonedetector/TimeZoneDetectorService$1;
 Lcom/android/server/timezonedetector/TimeZoneDetectorService$Lifecycle;
 Lcom/android/server/timezonedetector/TimeZoneDetectorService;
 Lcom/android/server/timezonedetector/TimeZoneDetectorStrategy$Callback;
+Lcom/android/server/timezonedetector/TimeZoneDetectorStrategy$QualifiedPhoneTimeZoneSuggestion;
 Lcom/android/server/timezonedetector/TimeZoneDetectorStrategy;
 Lcom/android/server/trust/-$$Lambda$TrustManagerService$1$98HKBkg-C1PLlz_Q1vJz1OJtw4c;
+Lcom/android/server/trust/-$$Lambda$TrustManagerService$fEkVwjahpkATIGtXudiFOG8VXOo;
 Lcom/android/server/trust/TrustAgentWrapper$2;
 Lcom/android/server/trust/TrustAgentWrapper$3;
 Lcom/android/server/trust/TrustAgentWrapper$4;
 Lcom/android/server/trust/TrustAgentWrapper;
+Lcom/android/server/trust/TrustArchive$1;
+Lcom/android/server/trust/TrustArchive$Event;
 Lcom/android/server/trust/TrustArchive;
 Lcom/android/server/trust/TrustManagerService$1$1;
 Lcom/android/server/trust/TrustManagerService$1;
@@ -26977,8 +44377,13 @@
 Lcom/android/server/trust/TrustManagerService$StrongAuthTracker;
 Lcom/android/server/trust/TrustManagerService$TrustTimeoutAlarmListener;
 Lcom/android/server/trust/TrustManagerService;
+Lcom/android/server/tv/TvInputHal$Callback;
 Lcom/android/server/tv/TvInputHal;
+Lcom/android/server/tv/TvInputManagerService;
+Lcom/android/server/tv/TvRemoteService;
 Lcom/android/server/tv/UinputBridge;
+Lcom/android/server/twilight/-$$Lambda$QlMS1hfADW-S9aqM_RavcEKO3N0;
+Lcom/android/server/twilight/-$$Lambda$TwilightService$stdw4-ZXNiEaXmDt9g9s8D1zEQU;
 Lcom/android/server/twilight/TwilightListener;
 Lcom/android/server/twilight/TwilightManager;
 Lcom/android/server/twilight/TwilightService$1;
@@ -26986,15 +44391,26 @@
 Lcom/android/server/twilight/TwilightService;
 Lcom/android/server/twilight/TwilightState;
 Lcom/android/server/uri/GrantUri;
+Lcom/android/server/uri/NeededUriGrants;
 Lcom/android/server/uri/UriGrantsManagerInternal;
+Lcom/android/server/uri/UriGrantsManagerService$1;
 Lcom/android/server/uri/UriGrantsManagerService$H;
 Lcom/android/server/uri/UriGrantsManagerService$Lifecycle;
 Lcom/android/server/uri/UriGrantsManagerService$LocalService;
 Lcom/android/server/uri/UriGrantsManagerService;
+Lcom/android/server/uri/UriPermission$1;
+Lcom/android/server/uri/UriPermission$PersistedTimeComparator;
+Lcom/android/server/uri/UriPermission$Snapshot;
 Lcom/android/server/uri/UriPermission;
 Lcom/android/server/uri/UriPermissionOwner$ExternalToken;
 Lcom/android/server/uri/UriPermissionOwner;
+Lcom/android/server/usage/-$$Lambda$StorageStatsService$2sUmj2KWW5zDR1eh9U7bRfiEbbQ;
+Lcom/android/server/usage/-$$Lambda$StorageStatsService$bqtERyu3o5aAlc4KluAfnmSEFLI;
+Lcom/android/server/usage/-$$Lambda$StorageStatsService$iSsicGWO2pdH7m9nkPc_jeZZgzE;
 Lcom/android/server/usage/-$$Lambda$UserUsageStatsService$wWX7s9XZT5O4B7JcG_IB_VcPI9s;
+Lcom/android/server/usage/AppTimeLimitController$1;
+Lcom/android/server/usage/AppTimeLimitController$AppUsageGroup;
+Lcom/android/server/usage/AppTimeLimitController$AppUsageLimitGroup;
 Lcom/android/server/usage/AppTimeLimitController$Lock;
 Lcom/android/server/usage/AppTimeLimitController$MyHandler;
 Lcom/android/server/usage/AppTimeLimitController$ObserverAppData;
@@ -27004,19 +44420,25 @@
 Lcom/android/server/usage/AppTimeLimitController$UserData;
 Lcom/android/server/usage/AppTimeLimitController;
 Lcom/android/server/usage/IntervalStats;
+Lcom/android/server/usage/StorageStatsManagerInternal$StorageStatsAugmenter;
+Lcom/android/server/usage/StorageStatsManagerInternal;
 Lcom/android/server/usage/StorageStatsService$1;
 Lcom/android/server/usage/StorageStatsService$H;
 Lcom/android/server/usage/StorageStatsService$Lifecycle;
+Lcom/android/server/usage/StorageStatsService$LocalService;
 Lcom/android/server/usage/StorageStatsService;
 Lcom/android/server/usage/UnixCalendar;
 Lcom/android/server/usage/UsageStatsDatabase$1;
 Lcom/android/server/usage/UsageStatsDatabase$CheckinAction;
 Lcom/android/server/usage/UsageStatsDatabase$StatCombiner;
 Lcom/android/server/usage/UsageStatsDatabase;
+Lcom/android/server/usage/UsageStatsIdleService;
 Lcom/android/server/usage/UsageStatsProto;
+Lcom/android/server/usage/UsageStatsProtoV2;
 Lcom/android/server/usage/UsageStatsService$1;
 Lcom/android/server/usage/UsageStatsService$2;
 Lcom/android/server/usage/UsageStatsService$3;
+Lcom/android/server/usage/UsageStatsService$ActivityData;
 Lcom/android/server/usage/UsageStatsService$BinderService;
 Lcom/android/server/usage/UsageStatsService$H;
 Lcom/android/server/usage/UsageStatsService$LocalService;
@@ -27034,6 +44456,11 @@
 Lcom/android/server/usb/-$$Lambda$UsbHostManager$XT3F5aQci4H6VWSBYBQQNSzpnvs;
 Lcom/android/server/usb/-$$Lambda$UsbPortManager$FUqGOOupcl6RrRkZBk-BnrRQyPI;
 Lcom/android/server/usb/-$$Lambda$UsbProfileGroupSettingsManager$IQKTzU0q3lyaW9nLL_sbxJPW8ME;
+Lcom/android/server/usb/-$$Lambda$UsbProfileGroupSettingsManager$_G1PjxMa22pAIRMzYCwyomX8uhk;
+Lcom/android/server/usb/-$$Lambda$UsbService$Lifecycle$2MdT23i5rGWaZmMCtfy6PYZmBMQ;
+Lcom/android/server/usb/-$$Lambda$UsbService$Lifecycle$KjOG0MXO3C0J-L5Ymrj6FnSwXwQ;
+Lcom/android/server/usb/-$$Lambda$UsbService$Lifecycle$sV0bZ5BCi6DR9FlGZbY2PyYUP58;
+Lcom/android/server/usb/MtpNotificationManager$1;
 Lcom/android/server/usb/MtpNotificationManager$OnOpenInAppListener;
 Lcom/android/server/usb/MtpNotificationManager$Receiver;
 Lcom/android/server/usb/MtpNotificationManager;
@@ -27051,10 +44478,16 @@
 Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal$UsbGadgetCallback;
 Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal$UsbGadgetDeathRecipient;
 Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;
+Lcom/android/server/usb/UsbDeviceManager$UsbHandlerLegacy;
 Lcom/android/server/usb/UsbDeviceManager$UsbUEventObserver;
 Lcom/android/server/usb/UsbDeviceManager;
 Lcom/android/server/usb/UsbHandlerManager;
+Lcom/android/server/usb/UsbHostManager$ConnectionRecord;
 Lcom/android/server/usb/UsbHostManager;
+Lcom/android/server/usb/UsbMidiDevice$1;
+Lcom/android/server/usb/UsbMidiDevice$2;
+Lcom/android/server/usb/UsbMidiDevice$3;
+Lcom/android/server/usb/UsbMidiDevice$InputReceiverProxy;
 Lcom/android/server/usb/UsbMidiDevice;
 Lcom/android/server/usb/UsbPermissionManager;
 Lcom/android/server/usb/UsbPortManager$1;
@@ -27065,13 +44498,16 @@
 Lcom/android/server/usb/UsbPortManager$RawPortInfo;
 Lcom/android/server/usb/UsbPortManager$ServiceNotification;
 Lcom/android/server/usb/UsbPortManager;
+Lcom/android/server/usb/UsbProfileGroupSettingsManager$1;
 Lcom/android/server/usb/UsbProfileGroupSettingsManager$MyPackageMonitor;
+Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;
 Lcom/android/server/usb/UsbProfileGroupSettingsManager;
 Lcom/android/server/usb/UsbSerialReader;
 Lcom/android/server/usb/UsbService$1;
 Lcom/android/server/usb/UsbService$Lifecycle;
 Lcom/android/server/usb/UsbService;
 Lcom/android/server/usb/UsbSettingsManager;
+Lcom/android/server/usb/UsbUserPermissionManager;
 Lcom/android/server/usb/UsbUserSettingsManager;
 Lcom/android/server/usb/descriptors/ByteStream;
 Lcom/android/server/usb/descriptors/Usb10ACHeader;
@@ -27095,16 +44531,63 @@
 Lcom/android/server/usb/descriptors/UsbHIDDescriptor;
 Lcom/android/server/usb/descriptors/UsbInterfaceDescriptor;
 Lcom/android/server/usb/descriptors/report/Reporting;
+Lcom/android/server/utils/-$$Lambda$TraceBuffer$moAOzKBOTAbEa_3b3V5vLbO3dRA;
+Lcom/android/server/utils/FlagNamespaceUtils;
 Lcom/android/server/utils/ManagedApplicationService$BinderChecker;
+Lcom/android/server/utils/ManagedApplicationService$EventCallback;
+Lcom/android/server/utils/ManagedApplicationService$LogEvent;
+Lcom/android/server/utils/ManagedApplicationService$LogFormattable;
+Lcom/android/server/utils/ManagedApplicationService$PendingEvent;
+Lcom/android/server/utils/ManagedApplicationService;
 Lcom/android/server/utils/PriorityDump$PriorityDumper;
 Lcom/android/server/utils/PriorityDump;
 Lcom/android/server/utils/TimingsTraceAndSlog;
 Lcom/android/server/utils/TraceBuffer;
+Lcom/android/server/utils/UserTokenWatcher$1;
 Lcom/android/server/utils/UserTokenWatcher$Callback;
+Lcom/android/server/utils/UserTokenWatcher$InnerTokenWatcher;
 Lcom/android/server/utils/UserTokenWatcher;
+Lcom/android/server/utils/quota/-$$Lambda$Categorizer$7ez64bqBH_7ftnL6e10WcD6kHMA;
+Lcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$4HkN-fmWmlx7JUhhSIp_xzSqM_k;
+Lcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$JPiaaEfenxacor9EsTZts7yjmfo;
+Lcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$KhSu52UVcmIwsRTTPJOPkxx5QBg;
+Lcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$V8_P5m4uQVKMpyfUCyH32qDbyt4;
+Lcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$YGSPs4eBXm5g9fUsluToPq543sk;
+Lcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$cN0cbPv_XamMCffwzXBT1y5wiSs;
+Lcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$gcuaahwgCbmI2MO_9858jGPxPGM;
+Lcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$giodBFjkV0qAORwrWZQrMAgSRaY;
+Lcom/android/server/utils/quota/-$$Lambda$CountQuotaTracker$txEUpjjjfBHHIwaoIrBUanoDtpI;
+Lcom/android/server/utils/quota/-$$Lambda$QuotaTracker$AlarmQueue$9XqssygjZyzGRYPaPGM34LNECH0;
+Lcom/android/server/utils/quota/-$$Lambda$QuotaTracker$InQuotaAlarmListener$soj539BGmQ3unUf9-_Ugq8KVOxI;
+Lcom/android/server/utils/quota/-$$Lambda$QuotaTracker$QGqhRiGVlazdG76r-Ich6VZnho4;
+Lcom/android/server/utils/quota/-$$Lambda$QuotaTracker$XRuiZQg4lOmWE1kXJjjkatdBgB8;
+Lcom/android/server/utils/quota/-$$Lambda$QuotaTracker$cKEDVJtC0LHULuSrH0-B6zQBe3g;
+Lcom/android/server/utils/quota/-$$Lambda$QuotaTracker$v5weP48tcgV_Pr7kzEEv4AvPw_k;
+Lcom/android/server/utils/quota/-$$Lambda$UptcMap$VIYMMrjbnqShO606s52uuyAgdlU;
+Lcom/android/server/utils/quota/Categorizer;
+Lcom/android/server/utils/quota/Category;
+Lcom/android/server/utils/quota/CountQuotaTracker$1;
+Lcom/android/server/utils/quota/CountQuotaTracker$CqtHandler;
+Lcom/android/server/utils/quota/CountQuotaTracker$DeleteEventTimesFunctor;
+Lcom/android/server/utils/quota/CountQuotaTracker$EarliestEventTimeFunctor;
+Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;
+Lcom/android/server/utils/quota/CountQuotaTracker;
+Lcom/android/server/utils/quota/QuotaChangeListener;
+Lcom/android/server/utils/quota/QuotaTracker$1;
+Lcom/android/server/utils/quota/QuotaTracker$AlarmQueue;
+Lcom/android/server/utils/quota/QuotaTracker$InQuotaAlarmListener;
+Lcom/android/server/utils/quota/QuotaTracker$Injector;
+Lcom/android/server/utils/quota/QuotaTracker;
+Lcom/android/server/utils/quota/Uptc;
+Lcom/android/server/utils/quota/UptcMap$UptcDataConsumer;
+Lcom/android/server/utils/quota/UptcMap;
+Lcom/android/server/voiceinteraction/-$$Lambda$VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2$_YjGqp96fW1i83gthgQe_rVHY5s;
+Lcom/android/server/voiceinteraction/-$$Lambda$VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$u4484DFAd6TvNnx89ISVr_ZLWJY;
+Lcom/android/server/voiceinteraction/DatabaseHelper$SoundModelRecord;
 Lcom/android/server/voiceinteraction/DatabaseHelper;
 Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$1;
 Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$LocalService;
+Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$1;
 Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$2;
 Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$RoleObserver;
 Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$SettingsObserver;
@@ -27117,27 +44600,46 @@
 Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$2;
 Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$Callback;
 Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;
+Lcom/android/server/vr/-$$Lambda$VrManagerService$hhbi29QXTMTcQg-S7n5SpAawSZs;
 Lcom/android/server/vr/EnabledComponentsObserver$1;
 Lcom/android/server/vr/EnabledComponentsObserver$EnabledComponentChangeListener;
 Lcom/android/server/vr/EnabledComponentsObserver;
+Lcom/android/server/vr/SettingsObserver$1;
+Lcom/android/server/vr/SettingsObserver$2;
 Lcom/android/server/vr/SettingsObserver$SettingChangeListener;
 Lcom/android/server/vr/SettingsObserver;
+Lcom/android/server/vr/Vr2dDisplay$1;
+Lcom/android/server/vr/Vr2dDisplay$3;
 Lcom/android/server/vr/Vr2dDisplay;
 Lcom/android/server/vr/VrManagerInternal;
+Lcom/android/server/vr/VrManagerService$1;
+Lcom/android/server/vr/VrManagerService$2;
 Lcom/android/server/vr/VrManagerService$3;
 Lcom/android/server/vr/VrManagerService$4;
 Lcom/android/server/vr/VrManagerService$5;
+Lcom/android/server/vr/VrManagerService$6;
 Lcom/android/server/vr/VrManagerService$LocalService;
 Lcom/android/server/vr/VrManagerService$NotificationAccessManager;
+Lcom/android/server/vr/VrManagerService$SettingEvent;
+Lcom/android/server/vr/VrManagerService$VrState;
 Lcom/android/server/vr/VrManagerService;
+Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$-BqUtvsdVGS3ye_UHe7qFnTZPn4;
 Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$1tPkxHr3PHUgpfvv03vRyPzY3uM;
+Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$4phuz9MKBqoKfDMu8M8EBVJyI2I;
+Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$93YXv2Z9dcGnT0Vr4Zebgn1qyVM;
 Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$SxaUJpgTTfzUoz6u3AWuAOQdoNw;
+Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$VUhQWq8Flr0dsQqeVHhHT8jU7qY;
 Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$87DhM3RJJxRNtgkHmd_gtnGk-z4;
 Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$NrNkceFJLqjCb8eAxErUhpLd5c8;
 Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$QhODF3v-swnwSYvDbeEhU85gOBw;
+Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$Y6NUt3jeHQDhNJsATtXxO4MiWJ0;
 Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$WallpaperConnection$Yk86TTURTI5B9DzxOzMQGDq7aQU;
+Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$ZY5r01reAnoB4Dl2bo4au8KMz3Y;
 Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$la7x4YHA-l88Cd6HFTscnLBbKfI;
+Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$pVmree9DyIpBSg0s3RDK3MDesvs;
+Lcom/android/server/wallpaper/-$$Lambda$WallpaperManagerService$tRb4SPHGj0pcxb3p7arcqKFqs08;
 Lcom/android/server/wallpaper/-$$Lambda$havGP5uMdRgWQrLydPeIOu1qDGE;
+Lcom/android/server/wallpaper/GLHelper;
 Lcom/android/server/wallpaper/IWallpaperManagerService;
 Lcom/android/server/wallpaper/WallpaperManagerInternal;
 Lcom/android/server/wallpaper/WallpaperManagerService$1;
@@ -27154,6 +44656,7 @@
 Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperObserver;
 Lcom/android/server/wallpaper/WallpaperManagerService;
 Lcom/android/server/webkit/-$$Lambda$lAUGMGZZth095wGxrAtUYbmlIJY;
+Lcom/android/server/webkit/SystemImpl$1;
 Lcom/android/server/webkit/SystemImpl$LazyHolder;
 Lcom/android/server/webkit/SystemImpl;
 Lcom/android/server/webkit/SystemInterface;
@@ -27161,106 +44664,298 @@
 Lcom/android/server/webkit/WebViewUpdateService$BinderService;
 Lcom/android/server/webkit/WebViewUpdateService;
 Lcom/android/server/webkit/WebViewUpdateServiceImpl;
+Lcom/android/server/webkit/WebViewUpdateServiceShellCommand;
 Lcom/android/server/webkit/WebViewUpdater$ProviderAndPackageInfo;
 Lcom/android/server/webkit/WebViewUpdater$WebViewPackageMissingException;
 Lcom/android/server/webkit/WebViewUpdater;
 Lcom/android/server/wm/-$$Lambda$-OevXHSXgaSE351ZqRnMoA024MM;
+Lcom/android/server/wm/-$$Lambda$-gsVbWDnbYC49FhjWBEWQbbGfCo;
 Lcom/android/server/wm/-$$Lambda$-hxY8aP13MItXHILC9K9vyNQgr4;
 Lcom/android/server/wm/-$$Lambda$01bPtngJg5AqEoOWfW3rWfV7MH4;
 Lcom/android/server/wm/-$$Lambda$1636dquQO0UvkFayOGf_gceB4iw;
 Lcom/android/server/wm/-$$Lambda$1Hjf_Nn5x4aIy9rIBTwVrtrzWFA;
+Lcom/android/server/wm/-$$Lambda$1uR2GodW3-TXQGLlsV_nCi1hRIE;
+Lcom/android/server/wm/-$$Lambda$1z_bkwouqOBIC89HKBNNqb1FoaY;
 Lcom/android/server/wm/-$$Lambda$2KrtdmjrY7Nagc4IRqzCk9gDuQU;
+Lcom/android/server/wm/-$$Lambda$5JqEQmkxeln8TugmxHRkbeL4kzY;
+Lcom/android/server/wm/-$$Lambda$5zunxFfSXQYpejvFiP3lO5a4GDY;
+Lcom/android/server/wm/-$$Lambda$5zz5Ugt4wxIXoNE3lZS6NA9z_Jk;
 Lcom/android/server/wm/-$$Lambda$6P_D-ul93Vzg9xx2hvWUdYrHVXg;
 Lcom/android/server/wm/-$$Lambda$7nuK7cv058ES7c7refBFgc-jagk;
+Lcom/android/server/wm/-$$Lambda$8ew6SY_v_7ex9pwFGDswbkGWuXc;
 Lcom/android/server/wm/-$$Lambda$99XNq73vh8e4HVH9BuxFhbLxKVY;
+Lcom/android/server/wm/-$$Lambda$9Kj79s-YFqaGRhFHazfExnbZExw;
 Lcom/android/server/wm/-$$Lambda$9vBfnQOmNnsc9WU80IIatZHQGKc;
+Lcom/android/server/wm/-$$Lambda$ABB1r3i-Ua4IQKhbebsmnEGpWd8;
 Lcom/android/server/wm/-$$Lambda$ADNhW0r9Skcs9ezrOGURijI-lyQ;
+Lcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$3JeUkmbe0mtunyS6P4HpkAkfKIY;
+Lcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$9gqV7SOtv0dBXWMri6Jpu47OdLc;
+Lcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$MEjrvbJugXgttKs3lnAk7x7tVPc;
+Lcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$fTBXciy3VZJ2vTW_ZJXaKfUj7_I;
+Lcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$l0oslVb5YyQhsmr7OXWV2whbXYU;
+Lcom/android/server/wm/-$$Lambda$ActivityMetricsLogger$sZFHZi7b6t6yjfx5mx3RtECSlEU;
+Lcom/android/server/wm/-$$Lambda$ActivityRecord$HCzV5lDTWOurUvy4cOGaHiRsYqY;
+Lcom/android/server/wm/-$$Lambda$ActivityRecord$IKQ7cgWGEqQBcP5npSaTqcxAkhg;
+Lcom/android/server/wm/-$$Lambda$ActivityRecord$QP-eHsXODaflS0pyRnr8fdoF6BU;
+Lcom/android/server/wm/-$$Lambda$ActivityRecord$TmL40hmGhjc2_QavTI0gwtolvY8;
+Lcom/android/server/wm/-$$Lambda$ActivityRecord$XnMxHSlbhK9x7qGQcZpHSkPOQvQ;
 Lcom/android/server/wm/-$$Lambda$ActivityRecord$YSVwd546vKWMiMYy7MFzg1qRiio;
 Lcom/android/server/wm/-$$Lambda$ActivityRecord$YY5kCNb4uWg5W_2lbH3ZOqirP1g;
+Lcom/android/server/wm/-$$Lambda$ActivityRecord$gHNTxsqqXHTV3N7vXQjmY818XQI;
+Lcom/android/server/wm/-$$Lambda$ActivityRecord$jAKnTXYErEwplxJ5lQgj44-M9_c;
+Lcom/android/server/wm/-$$Lambda$ActivityRecord$lyqdJlA4QOn1CXj7zglxNJxDy9o;
+Lcom/android/server/wm/-$$Lambda$ActivityRecord$prAsqx_JQJTqW1jNxmkuU3AV8AU;
 Lcom/android/server/wm/-$$Lambda$ActivityRecord$tt99EJHW_Nk5qgU9galJBIm5wXg;
+Lcom/android/server/wm/-$$Lambda$ActivityRecord$viEGm2vZbJCQ4-hdkomJCNYJiHU;
 Lcom/android/server/wm/-$$Lambda$ActivityStack$0bNPw28X3N2biqQIdsnZuX7xaP4;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$2g-Gmexz3kbCg6lRcnM6dKBTDYc;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$4eA3orAXlhwXqOJQ8sydb6lzW_4;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$5VekJIJoJIh5JMUz2PkEx2YRfmo;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$5zgAl3IFHP6i4hvY3Hby3Fg4HQM;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$8rl8kos6nVh_HCoMLzbQatFXfQM;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$9LPSm49BYrWURHV0f_s9bnJYnVk;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$AQt7n1uNhFzkQj_jKv_v8YLYK-E;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$BmRNRfPY9eDs_h7lUVkDfKuzXrA;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$BqE10FCv9how7gdM55red1ApUGs;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$Bw4s_aT8NefvklvOlavSngajM-8;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$CheckBehindFullscreenActivityHelper$hxEhv3lodv2mTq0c1tG208T2TSs;
 Lcom/android/server/wm/-$$Lambda$ActivityStack$FkaZkaRIeozTqSdHkmYZNbNtF1I;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$FmEEyG-_GV_nB2HunZ086MlsGbw;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$GDPUuzTvyfp2z6wYxqAF0vhMJK8;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$LjKdRo1XcwS4pEMN4TDnJTwl_Xs;
 Lcom/android/server/wm/-$$Lambda$ActivityStack$MbOt7bGpxw9wmjZ8kOCkYcDCqMQ;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$McNymlK649VA6OMbsDYgFAkVJo8;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$N2PfGF62p6Y1TYGt9lvFtsW9LmQ;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$NfjvUUwVOB3bYUF_fHSaW6oHS94;
 Lcom/android/server/wm/-$$Lambda$ActivityStack$RemoveHistoryRecordsForApp$8j2ZFLAwkXnwDAxiTFN7mMDLhjU;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$TtiWgYBlSmpdH3zrFrJGnJ3IEn8;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$U5MWhpArTVT_b8W6GtTa1Ao8HFs;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$VIuWlCdKwIo4qqRlevMLniedZ7o;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$W1rlXKcoaLb8UYskrF3gqMvOkRU;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$YAQEcQUrLqR06xiJJApMvOPIxhg;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$YtJbVURmslxye4JS4EFo6X31Vv0;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$YwFMIPNkUBnV2uIqB9sZ47M__Og;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$ZeqjtPeTSrJ3k2l6y2bUmw5uqo0;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$bzlcMWlmDol-PMxBdUW69zw6n4Q;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$ccf0sRiFvFeqRiJQ6iXIEF1eN1Q;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$dhfbladKtxXwwdCS2dFdAfUfBN4;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$n-w1s4z47M3zxF8atJ8fDCrw2CA;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$vLTEw6nwtjcZ-ZyMktx8L5MR_TA;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$xHrv17CG5tAkxdutHyfCFt4-Iec;
+Lcom/android/server/wm/-$$Lambda$ActivityStack$xrtErRAEnS21CI3h4SKc_WzJFDA;
 Lcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$0u1RcpeZ6m0BHDGGv8EXroS3KyE;
 Lcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$28Zuzbi6usdgbDcOi8hrJg6nZO0;
+Lcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$BFgD0ahFSDg4CqQNytqWrPRgFII;
+Lcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$GTQdt2-hJbSgeh3nbBxR-rvVTqw;
+Lcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$MoveTaskToFullscreenHelper$n0VOwWNM3mud17SnHip7XMiWlWE;
+Lcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$PKLpVoHaca7ZAS9IjUCkoGIBtDw;
+Lcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$iNb1-M_lYtbDycAXODgbDkmI9ww;
+Lcom/android/server/wm/-$$Lambda$ActivityStackSupervisor$mLKHIIzkTAK9QSlSxia8-84y15M;
 Lcom/android/server/wm/-$$Lambda$ActivityStartController$6bTAPCVeDq_D4Y53Y5WNfMK4xBE;
 Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$-xFyZDUKMraVkermSJGXQdN3oJ4;
 Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$3DTHgCAeEd5OOF7ACeXoCk8mmrQ;
 Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$7Ia1bmRpPHHSNlbH8cuLw8dKG04;
 Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$7ieG0s-7Zp4H2bLiWdOgB6MqhcI;
 Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$BXul1K8BX6JEv_ff3NT76qpeZGQ;
+Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$LocalService$hXNJNh8HjV10X1ZEOI6o0Yzmq8o;
+Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$LocalService$smesvyl87CxHptMAvRA559Glc1k;
+Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$LocalService$xIfx_hFO4SXy-Nq34zoEHe3S9eU;
 Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$U6g1UdnOPnEF9wX1OTm9nKVXY5k;
 Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$Uli7s8UWTEj0IpBUtoST5bmgvKk;
 Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$iduseKQrjIWQYD0hJ8Q5DMmuSfE;
+Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$js0zprxhKzo_Mx9ozR8logP_1-c;
 Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$oP6xxIfnD4kb4JN7aSJU073ULR4;
 Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$p4I6RZJqLXjaEjdISFyNzjAe4HE;
+Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$w70cT1_hTWQQAYctmXaA0BeZuBc;
+Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$x3j1aVkumtfulORwKd6dHysJyE0;
 Lcom/android/server/wm/-$$Lambda$ActivityTaskManagerService$yP9TbBmrgQ4lrgcxb-8oL1pBAs4;
 Lcom/android/server/wm/-$$Lambda$AlertWindowNotification$ZuqSYML-X-nkNVTba_yeIT9hJ1s;
 Lcom/android/server/wm/-$$Lambda$AlertWindowNotification$iVtcJMb6VtqtAgEtGUDCkGay0tM;
+Lcom/android/server/wm/-$$Lambda$AppTransition$9JtLlCXlArIsRNjLJ0_3RWFSHts;
 Lcom/android/server/wm/-$$Lambda$AppTransition$B95jxKE2FnT5RNLStTafenhEYj4;
 Lcom/android/server/wm/-$$Lambda$AppTransition$xrq-Gwel_FcpfDvO2DrCfGN_3bk;
+Lcom/android/server/wm/-$$Lambda$AppTransitionController$KP68kgUCojUmpcFh_s6uhO2M93o;
+Lcom/android/server/wm/-$$Lambda$AppTransitionController$ZU-2ppbyGJ7-UsXREbcW1x9TJH0;
+Lcom/android/server/wm/-$$Lambda$AppTransitionController$fJATtpiRgHjEgZVznt1dzW5Mwt0;
 Lcom/android/server/wm/-$$Lambda$AppTransitionController$o_nkoN7a-ZHaSAgJCQZcboKz9Ig;
+Lcom/android/server/wm/-$$Lambda$AppTransitionController$wKDCdmYJWN9Qk9bjArILV5j7lEY;
 Lcom/android/server/wm/-$$Lambda$AppTransitionController$z5kCoexPNTWFncmRBfeXr6HA2JA;
+Lcom/android/server/wm/-$$Lambda$B16jdo1lKUkQ4B7iWXwPKs2MAdg;
 Lcom/android/server/wm/-$$Lambda$B58NKEOrr2mhFWeS3bqpaZnd11o;
 Lcom/android/server/wm/-$$Lambda$BEx3OWenCvYAaV5h_J2ZkZXhEcY;
 Lcom/android/server/wm/-$$Lambda$BoundsAnimationController$3-yWz6AXIW5r1KElGtHEgHZdi5Q;
 Lcom/android/server/wm/-$$Lambda$BoundsAnimationController$MoVv_WhxoMrTVo-xz1qu2FMcYrM;
+Lcom/android/server/wm/-$$Lambda$CD-g9zNm970tG9hCSQ-1BiBOrwY;
+Lcom/android/server/wm/-$$Lambda$DLUVMr0q4HDD6VD11G3xgCuJfHo;
 Lcom/android/server/wm/-$$Lambda$DaFwIyqZTBVKE2y-TN2iE7CD-r8;
 Lcom/android/server/wm/-$$Lambda$Dimmer$DimState$QYvwJex5H10MFMe0LEzEUs1b2G0;
+Lcom/android/server/wm/-$$Lambda$DisplayArea$Tokens$m3rhEbIWQl888W_2uGBIkkXLdlA;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$-t02M5j-NY8t_HMWggKym0SrI5k;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$0yxrqH9eGY2qTjH1u_BvaVrXCSA;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$2VlyMN8z2sOPqE9-yf-z3-peRMI;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$7Z9gsguOLtfXssJUALjgEsOLZoE;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$7uZtakUXzuXqF_Qht5Uq7LUvubI;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$7voe_dEKk2BYMriCvPuvaznb9WQ;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$BvG_N-oQ9idqqb6Bo2x0dq7gI5g;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$D0QJUvhaQkGgoMtOmjw5foY9F8M;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$Dg1quneQgytca0GgzUkUIFT67mk;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$DjwkABhnEVEEFPHXKA0QFcHdb2w;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$Ei1gEKrsGOVbEpUtkye4DxvMrow;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$GdYfLI7hkBs2XfGJkN6DbdzEs8U;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$Gs1I9c16qswnvvDSPXoEhteQcFM;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$JKV50ExZuoi3fuNRue0nZXh8ijA;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$JYsrGdifTPH6ASJDC3B9YWMD2pw;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$JibsaX4YnJd0ta_wiDDdSp-PjQk;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$MTOrQ0uso5p3wixTLmDsYyck6h4;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$NonAppWindowContainers$FI_O7m2qEDfIRZef3D32AxG-rcs;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$NonAppWindowContainers$m2B7QqNQSZc7N5DejF0qGwn6Pck;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$NonAppWindowContainers$nqCymC3xR9b3qaeohnnJJpSiajc;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$SeHNTr4WUVpGmQniHULUi1ST7k8;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$TPj3OjTsuIg5GTLb5nMmFqIghA4;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$TaskContainers$O93kVOZBPruBUoIqFi--Pvv3DF0;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$TaskContainers$sOc7NEp-0tqs2Dj7F4JTNjgQacU;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$TaskForResizePointSearchResult$1FHFJXiYTNFcgi5tiBrxzbmjdWw;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$TaskStackContainers$5H3Kr211kTMg-C28tapuQGzkwN8;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$TaskStackContainers$rQnI0Y8R9ptQ09cGHwbCHDiG2FY;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$Ufn2ZjVS0i1L8aeQ8GZMJNJfmcY;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$_XfE1uZ9VUv6i0SxWUvqu69FNb4;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$a4EkCBfpZNIl1xfYgm2ktgndF8w;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$cDcvMzGxc6XW13Q8FrU5X4DagqE;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$eJsj3GR1HdCnOJrZ8_oaLP52jg0;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$fiC19lMy-d_-rvza7hhOSw6bOM8;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$hRKjZwmneu0T85LNNY6_Zcs4gKM;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$n90JauAfTfQVesyRzx0-TX7s1LM;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$olEtDzkJbp6PCECUFtRISV0LCpk;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$qT01Aq6xt_ZOs86A1yDQe-qmPFQ;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$qxt4izS31fb0LF2uo_OF9DMa7gc;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$rF1ZhFUTWyZqcBK8Oea3g5-uNlM;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$sYPOy6TL-QiWuU_jcEHYn4HeFnQ;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$urKpYhmBMnn2yjZBZV3AQYBudRc;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$vehcSAr5hQ3Q5gWBUB0K8yByHXQ;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$w9ep5dwa3CsKsu0rpKSQwF-60A4;
+Lcom/android/server/wm/-$$Lambda$DisplayContent$x9QSHnWitjvGOC1SnurRP5ASz48;
 Lcom/android/server/wm/-$$Lambda$DisplayContent$xDPfsCNl85pDNmgsKEQVqdUehiA;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$-jer63nl4BagHUaTYzlDJxk8xIU;
 Lcom/android/server/wm/-$$Lambda$DisplayPolicy$3MnyIKSHFLqhfUifWEQPNp_-J6A;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$9Q7foUL8MStILLFmJNfN48-WaJM;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$AdQlGK4do0LfpQJmOnIuKqDwp0Y;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$DDvhxUfu81ZBR36fDVY0P7u99ag;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$DaI-u7gKDqJtPizmW-_eQ3hO-BU;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$FpQuLkFb2EnHvk4Uzhr9G5Rn_xI;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$HbdRZfPpJ53Wnk7_Ueb0ycyz_AQ;
 Lcom/android/server/wm/-$$Lambda$DisplayPolicy$IOyP8YVRG92tn9u1muYWZgBbgc0;
 Lcom/android/server/wm/-$$Lambda$DisplayPolicy$J8sIwXJvltUaPM3jEGO948Bx9ig;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$LFEaXRr2IF3nhPJdP5h3swIhnus;
 Lcom/android/server/wm/-$$Lambda$DisplayPolicy$LkHee4mchNXMwNt7HLgsMzHofeE;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$P8D337iYIcX04InNbwQCJWD0nmU;
 Lcom/android/server/wm/-$$Lambda$DisplayPolicy$QDPgWUhyEOraWnf6a-u4mTBttdw;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$XssW_Qm0L7CsznkQYKBfWrF7PU4;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$Z8iyyXgeVPvu1sLiGR3kYtB4YO8;
 Lcom/android/server/wm/-$$Lambda$DisplayPolicy$_FsvHpVUi-gbWmSpT009cJNNmgM;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$bT9mjfT_DJVx_BBfkRPXHf6mfWE;
 Lcom/android/server/wm/-$$Lambda$DisplayPolicy$j3sY1jb4WFF_F3wOT9D2fB2mOts;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$m-UPXUZKrPpeFUjrauzoJMNbYjM;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$nrBrmKRLvJQjdv_P6oPT7D0GGW8;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$pqtzqy0ti-csynvTP9P1eQUE-gE;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$rio2so8uuvIt5iXObo83p1LyRwA;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$rkGhPuV8zWnPuCUXhzLY40zhjLk;
+Lcom/android/server/wm/-$$Lambda$DisplayPolicy$wrdG81IaCZoCL0YqumBunZu5DyM;
+Lcom/android/server/wm/-$$Lambda$DisplayRotation$2$pp3jOG1BWDI3rPQ3oFXammeS5Tg;
+Lcom/android/server/wm/-$$Lambda$DisplayRotation$UvDbz_yyBKmo2Ump2uc0fobRTmg;
+Lcom/android/server/wm/-$$Lambda$DisplayRotation$q2wjcSMbrixEIlIR6-WoSLJ1j-g;
+Lcom/android/server/wm/-$$Lambda$DockedStackDividerController$5bA1vUPZ2WAWRKwBSEsFIfWUu9o;
 Lcom/android/server/wm/-$$Lambda$DragState$-yUFIMrhYYccZ0gwd6eVcpAE93o;
+Lcom/android/server/wm/-$$Lambda$ERD-2J5ieyabZSu134oI85tDnME;
+Lcom/android/server/wm/-$$Lambda$EmbeddedWindowController$Q0HHIdTKm8MX4DsCYgzZ2UOUXPQ;
+Lcom/android/server/wm/-$$Lambda$EnsureActivitiesVisibleHelper$Bbb3nMFa3F8er_OBuKA7-SpeSKo;
 Lcom/android/server/wm/-$$Lambda$EnsureActivitiesVisibleHelper$uAeEWwx5d0xk6FKOvvR9CXZS6Bg;
+Lcom/android/server/wm/-$$Lambda$FvpUGL5umwa8cY7p8SB7VV6jxQU;
+Lcom/android/server/wm/-$$Lambda$G7MFeOBgoCefJGCDIl_j8uFkMZI;
 Lcom/android/server/wm/-$$Lambda$HLz_SQuxQoIiuaK5SB5xJ6FnoxY;
+Lcom/android/server/wm/-$$Lambda$HtepUMgqPLKO-76U6SMEmchALsM;
+Lcom/android/server/wm/-$$Lambda$ImeInsetsSourceProvider$1aCwANZDoNIzXR0mfeN2iV_k2Yo;
+Lcom/android/server/wm/-$$Lambda$InputMonitor$ew_vdS116C6DH9LxWaTuVXJYZPE;
+Lcom/android/server/wm/-$$Lambda$InsetsPolicy$LCR2QgJZxbNat6Qb0Be-JDpy3i0;
+Lcom/android/server/wm/-$$Lambda$InsetsPolicy$rhM012fDRQZs2vWOctMZZ_uSXvc;
+Lcom/android/server/wm/-$$Lambda$InsetsStateController$-1iOXDf-1s3wDHcMIHBKNk6MS3I;
+Lcom/android/server/wm/-$$Lambda$InsetsStateController$0D_z1-eyl79cSyxMEkWr97-EhW0;
+Lcom/android/server/wm/-$$Lambda$InsetsStateController$1JYO8QVhePzczEaYmXV0veAcadI;
+Lcom/android/server/wm/-$$Lambda$InsetsStateController$AD-N-CuASggMPuANxay4AharPVM;
+Lcom/android/server/wm/-$$Lambda$InsetsStateController$EieWndHHWtNpBtJoK2U-TZ_RU2A;
+Lcom/android/server/wm/-$$Lambda$InsetsStateController$WPnaFmmIW6k6mGJbfuuwznz-bHA;
+Lcom/android/server/wm/-$$Lambda$InsetsStateController$c8m0K1Ykk6OHrDEJKWFPmp5WxKU;
 Lcom/android/server/wm/-$$Lambda$InsetsStateController$pXoYGy4X5aPw1QFi0iIWKiTMlDg;
 Lcom/android/server/wm/-$$Lambda$InsetsStateController$sIYEJIR4ztgffCLMi5Z1RvdxyYs;
+Lcom/android/server/wm/-$$Lambda$JQG7CszycLV40zONwvdlvplb1TI;
+Lcom/android/server/wm/-$$Lambda$JTKQBRuxxgBAO5y04IFnI4psyA4;
 Lcom/android/server/wm/-$$Lambda$LI60v4Y5Me6khV12IZ-zEQtSx7A;
 Lcom/android/server/wm/-$$Lambda$LYW1ECaEajjYgarzgKdTZ4O1fi0;
+Lcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$850Ez4IkbH192NuVFW_l12sZL_E;
+Lcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$FhvLqBbd_XMsJK45WV5Mlt8JSYM;
 Lcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$KukKmVpn5W_1xSV6Dnp8wW2H2Ks;
 Lcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$QcawcFcJtEX4EhYptq_Vb4j368Y;
 Lcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$UGY1OclnLIQLMEL9B55qjERFf4o;
 Lcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$lAGPwfsXJvBWsyG2rbEfo3sTv34;
 Lcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$pWUDt4Ot3BWLJOTAhXMkkhHUhpc;
 Lcom/android/server/wm/-$$Lambda$LaunchObserverRegistryImpl$veRn_GhgLZLlOHOJ0ZYT6KcfYqo;
+Lcom/android/server/wm/-$$Lambda$LaunchParamsPersister$Rc1cXPLhXa2WPSr18Q9-Xc7SdV8;
 Lcom/android/server/wm/-$$Lambda$LocalAnimationAdapter$X--EomqUvw4qy89IeeTFTH7aCMo;
+Lcom/android/server/wm/-$$Lambda$LockTaskController$NMEqFdnoSJ8A7QRxQO-ZoqXOmVc;
+Lcom/android/server/wm/-$$Lambda$LockTaskController$mYEdosOvuhEWdcYLQrOC83U4Wms;
+Lcom/android/server/wm/-$$Lambda$LockTaskController$nuVptnoYwaF1CYydSggC_oxSSSc;
+Lcom/android/server/wm/-$$Lambda$MGgYXq0deCsjjGP-28PM6ahiI2U;
 Lcom/android/server/wm/-$$Lambda$OPdXuZQLetMnocdH6XV32JbNQ3I;
 Lcom/android/server/wm/-$$Lambda$OuObUsm0bB9g5X0kIXYkBYHvodY;
 Lcom/android/server/wm/-$$Lambda$PendingRemoteAnimationRegistry$Entry$giivzkMgzIxukCXvO2EVzLb0oxo;
 Lcom/android/server/wm/-$$Lambda$PersisterQueue$HOTPBvinkMOqT3zxV3gRm6Y9Wi4;
+Lcom/android/server/wm/-$$Lambda$PinnedStackController$PinnedStackControllerCallback$0SANOJyiLP67Pkj3NbDS5B-egBU;
+Lcom/android/server/wm/-$$Lambda$Pl4__K9hqf4p4lme99AnaMrbXe0;
+Lcom/android/server/wm/-$$Lambda$PyL9QAXbv8yta3wX2VTGq8fFFo4;
+Lcom/android/server/wm/-$$Lambda$Q7nS26dC0McEbKsdlJZMFVXDNKY;
+Lcom/android/server/wm/-$$Lambda$QEISWTQzWbgxRMT5rMnIEzpsKpc;
+Lcom/android/server/wm/-$$Lambda$RecentTasks$1$yqVuu6fkQgjlTTs6kgJbxqq3Hng;
 Lcom/android/server/wm/-$$Lambda$RecentTasks$eaeTjEEoVsLAhHFPccdtbbB3Lrk;
 Lcom/android/server/wm/-$$Lambda$RemoteAnimationController$74uuXaM2TqjkzYi0b8LqJdbycxA;
 Lcom/android/server/wm/-$$Lambda$RemoteAnimationController$dP8qDptNigoqhzVtIudsX5naGu4;
 Lcom/android/server/wm/-$$Lambda$RemoteAnimationController$uQS8vaPKQ-E3x_9G8NCxPQmw1fw;
+Lcom/android/server/wm/-$$Lambda$ResetTargetTaskHelper$APiSnEpUwnLFg5o4cp87NyJw4j4;
+Lcom/android/server/wm/-$$Lambda$ResetTargetTaskHelper$O-Gmp4WswvLHsJ0Qd1g0pv2tF14;
 Lcom/android/server/wm/-$$Lambda$RootActivityContainer$eTBwQBLMAzyK1I2vbgH_wbrf5n0;
 Lcom/android/server/wm/-$$Lambda$RootActivityContainer$m1XaUaXYDseEoG-rccxbUydXgO8;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$-XbbIpkF4p2mF3v0qeXeat-_w3E;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$0ZupnQyxl7yZKgMmf2zwvykG50s;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$0aCEx04eIvMHmZVtI4ucsiK5s9I;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$1$HOnR_rhPvM6ZPX8yI-4GFhkGqUs;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$3VVFoec4x74e1MMAq03gYI9kKjo;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$5fbF65VSmaJkPHxEhceOGTat7JE;
 Lcom/android/server/wm/-$$Lambda$RootWindowContainer$7XcqfZjQLAbjpIyed3iDnVtZro4;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$9Gi6QLDM5W-SF-EH_zfgZZvIlo0;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$FinishDisabledPackageActivitiesHelper$XWfRTrqNP6c1kx7wtT2Pvy6K9-c;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$FtQd5Yte3ooh7jQ1sV_WSAmocV8;
 Lcom/android/server/wm/-$$Lambda$RootWindowContainer$IlD1lD49ui7gQmU2NkxgnXIhlOo;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$JVx5SVc0AsTnwnLxXYLgV6AKHPg;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$JZALJLRYsvQWgNnzHdoTfj_f3QY;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$O6gArs92KbWUhitra1og4WTg69c;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$ONUnDkI6axONU1lRFnZMH5NkbZI;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$SVJucJygDtyF-4eKB9wPXWaNBDM;
 Lcom/android/server/wm/-$$Lambda$RootWindowContainer$Vvv8jzH2oSE9-eakZwTuKd5NpsU;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$ZTXupc1zKRWZgWpo-r3so3blHoI;
 Lcom/android/server/wm/-$$Lambda$RootWindowContainer$auMc5HUrsvttHP3CYY9dttuuvi8;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$bRRfWu3QSW54eS51jCvFD02TPt8;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$fL0RxmEBMlnXFmjHLkBJ9jk9drs;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$iBTaizkGPVUfwWK0hFvdR5mseLI;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$ipFw3PwG_VSG45EGVCDfJfHk29I;
 Lcom/android/server/wm/-$$Lambda$RootWindowContainer$qT2ficAmvrvFcBdiJIGNKxJ8Z9Q;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$smSIq2r4GMdbTUsLaRS4KHth6DY;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$utugHDPHgMp2b3JwigOH_-Y0P1Q;
 Lcom/android/server/wm/-$$Lambda$RootWindowContainer$vMW2dyMvZQ0PDhptvNKN5WXpK_w;
+Lcom/android/server/wm/-$$Lambda$RootWindowContainer$y9wG_endhUBCwGznyjN4RSIYTyg;
 Lcom/android/server/wm/-$$Lambda$RunningTasks$MPCBAZpSXKx53M7vrqtvLfftJOc;
+Lcom/android/server/wm/-$$Lambda$RunningTasks$hR_Ryk91b0B2BdJN9eCfQfPwC3g;
+Lcom/android/server/wm/-$$Lambda$Session$15hO_YO9_yR6FTMdPPe87fZzL1c;
+Lcom/android/server/wm/-$$Lambda$Session$3q7E1KtcKfO8_a7pOH0nnVURP8w;
+Lcom/android/server/wm/-$$Lambda$Session$6cG7louvKZjAfcc7DtiA7aAzr7U;
+Lcom/android/server/wm/-$$Lambda$Session$zgdcs0nAb8hCdS-6ugnFMadbhU8;
 Lcom/android/server/wm/-$$Lambda$StatusBarController$1$3FiQ0kybPCSlgcNJkCsNm5M12iA;
 Lcom/android/server/wm/-$$Lambda$StatusBarController$1$CizMeoiz6ZVrkt6kAKpSV5htmyc;
 Lcom/android/server/wm/-$$Lambda$StatusBarController$1$t71qcQIBSxRShk0Xohf1lk53bOw;
@@ -27271,9 +44966,36 @@
 Lcom/android/server/wm/-$$Lambda$SurfaceAnimationRunner$puhYAP5tF0mSSJva-eUz59HnrkA;
 Lcom/android/server/wm/-$$Lambda$SurfaceAnimationRunner$we7K92eAl3biB_bzyqbv5xCmasE;
 Lcom/android/server/wm/-$$Lambda$SurfaceAnimationRunner$xDyZdsMrcbp64p4BQmOGPvVnSWA;
+Lcom/android/server/wm/-$$Lambda$SurfaceAnimationThread$frZMbXAzhUBmX-wz0SwbLTXpw9k;
 Lcom/android/server/wm/-$$Lambda$SurfaceAnimator$M9kRDTUpVS03LTqe-QLQz3DnMhk;
+Lcom/android/server/wm/-$$Lambda$SurfaceAnimator$Y4hCTFZUnyoMqrbq2rxOWj68ccg;
+Lcom/android/server/wm/-$$Lambda$SurfaceAnimator$qxm0Z0Ve0b3lKnyQQMgWVQfTP3Q;
 Lcom/android/server/wm/-$$Lambda$SurfaceAnimator$vdRZk66hQVbQCvVXEaQCT1kVmFc;
 Lcom/android/server/wm/-$$Lambda$SystemGesturesPointerEventListener$9Iw39fjTtjXO5kacgrpdxfxjuSY;
+Lcom/android/server/wm/-$$Lambda$TDUtW_T9flkdwvGQ9AliNjGyzdY;
+Lcom/android/server/wm/-$$Lambda$Task$2iqUThjTmuPJNPgunW5qcBmNa3E;
+Lcom/android/server/wm/-$$Lambda$Task$AFigK9DV4TJX-I6KGr1B5GhkxBQ;
+Lcom/android/server/wm/-$$Lambda$Task$BP51Xfr33NBfsJ4rKO04RomX2Tg;
+Lcom/android/server/wm/-$$Lambda$Task$CKQ9RLMNPYajktwO1VrUoQGHF_8;
+Lcom/android/server/wm/-$$Lambda$Task$FindRootHelper$sIea0VfMPIGsR0Xwg7rABysHwZ4;
+Lcom/android/server/wm/-$$Lambda$Task$HQ9aJbE-z0XuxiYHPMxxaMHkKFY;
+Lcom/android/server/wm/-$$Lambda$Task$N2dM5PIhuaw--o5HD3NnXAFoPzg;
+Lcom/android/server/wm/-$$Lambda$Task$N6swnhdrHvxOfp81yUqye9AbX7A;
+Lcom/android/server/wm/-$$Lambda$Task$OQmaRDKXdgA0v6VfNwTX7wOkwBs;
+Lcom/android/server/wm/-$$Lambda$Task$SAhnD6goWlY1lXYn6fWba8f2JLs;
+Lcom/android/server/wm/-$$Lambda$Task$SRt5iDqxFMzfuMULgjnmoyWp73o;
+Lcom/android/server/wm/-$$Lambda$Task$TUGPkEKamN60PF6hJQxUwDBjU-M;
+Lcom/android/server/wm/-$$Lambda$Task$V2nwgQi-xYvgAjezrWRsKUB2nLI;
+Lcom/android/server/wm/-$$Lambda$Task$WFXOGUsP9k2SctNXpn2eb_XUKP0;
+Lcom/android/server/wm/-$$Lambda$Task$XRtJRRfvaa_neQ0BbpDvRIqXzf4;
+Lcom/android/server/wm/-$$Lambda$Task$a4C-owFvQJqPsf8C48fgcmCjd6M;
+Lcom/android/server/wm/-$$Lambda$Task$eHH2M2yJE6epk3eXzGcOuu6WMt8;
+Lcom/android/server/wm/-$$Lambda$Task$hJlIVNsWJQJ_mIrVCbuZDn-cUwE;
+Lcom/android/server/wm/-$$Lambda$Task$lN_nRoGkP81jAXXQImoACo3ADSk;
+Lcom/android/server/wm/-$$Lambda$Task$lqGdYR9ABiPuG3_68w1VS6hrr8c;
+Lcom/android/server/wm/-$$Lambda$Task$s9wiZSThkGOKye0Zl5MRKv-8Iq0;
+Lcom/android/server/wm/-$$Lambda$Task$wJrggGO94VQWnIMvq8QrsNZ1LZk;
+Lcom/android/server/wm/-$$Lambda$Task$xh_oQC7HZKaIUa_hEyntZO3NQcs;
 Lcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$0m_-qN9QkcgkoWun2Biw8le4l1Y;
 Lcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$1ziXgnyLi0gQjqMGJAbSzs0-dmE;
 Lcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$9ngbiJ2r3x2ASHwN59tUFO2-2BQ;
@@ -27299,60 +45021,130 @@
 Lcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$sdBP_U6BS8zRbtZp-gZ0BmFW8bs;
 Lcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$wuBjs4dj7gB_MI4dIdt2gV2Osus;
 Lcom/android/server/wm/-$$Lambda$TaskChangeNotificationController$yaW9HlZsz3L55CTQ4b7y33IGo94;
+Lcom/android/server/wm/-$$Lambda$TaskPersister$8MhgCrM41UuyRqTjWwKtfifKRLo;
 Lcom/android/server/wm/-$$Lambda$TaskPersister$mW0HULrR8EtZ9La-pL9kLTnHSzk;
+Lcom/android/server/wm/-$$Lambda$TaskPersister$piHtCTZMpbHMTXAk2o7OdlK4Xvc;
 Lcom/android/server/wm/-$$Lambda$TaskPositioningController$u0oAwi82C-bAGo2JAsAc_9ZLi70;
+Lcom/android/server/wm/-$$Lambda$TaskPositioningController$z3n1stJjOdhDbXXrvPlvlqmON6k;
+Lcom/android/server/wm/-$$Lambda$TaskSnapshotController$Tj7bQvjfkzsOjJOdJXBpqCZnW1Q;
 Lcom/android/server/wm/-$$Lambda$TaskSnapshotController$b7mc92hqzbRpmpc99dYS4wKuL6Y;
+Lcom/android/server/wm/-$$Lambda$TaskSnapshotController$eY4HzOpxvBAchhbObndnIDQqsVs;
+Lcom/android/server/wm/-$$Lambda$TaskSnapshotController$pF831VjVO7J7eXZhalKp1CJKNC4;
+Lcom/android/server/wm/-$$Lambda$U9zpYh1OwxC9FZcjOfUJl0HQSho;
 Lcom/android/server/wm/-$$Lambda$UZl9uqUNteVgplGGEK6TMzf-7zk;
 Lcom/android/server/wm/-$$Lambda$UnknownAppVisibilityController$FYhcjOhYWVp6HX5hr3GGaPg67Gc;
+Lcom/android/server/wm/-$$Lambda$VDG7MoD_7v7qIdkguJXls8nmhGU;
 Lcom/android/server/wm/-$$Lambda$VY87MmFWaCLMkNa2qHGaPrThyrI;
+Lcom/android/server/wm/-$$Lambda$VYR_ckkt7281-Ti8Ps0f0Tx3ljY;
+Lcom/android/server/wm/-$$Lambda$WallpaperController$3kGUJhX6nW41Z26JaiCQelxXZr8;
 Lcom/android/server/wm/-$$Lambda$WallpaperController$6pruPGLeSJAwNl9vGfC87eso21w;
 Lcom/android/server/wm/-$$Lambda$WallpaperController$Gy7houdzET4VmpY0QJ2v-NX1b7k;
 Lcom/android/server/wm/-$$Lambda$WindowAnimationSpec$jKE7Phq2DESkeBondpaNPBLn6Cs;
 Lcom/android/server/wm/-$$Lambda$WindowAnimator$U3Fu5_RzEyNo8Jt6zTb2ozdXiqM;
 Lcom/android/server/wm/-$$Lambda$WindowAnimator$ddXU8gK8rmDqri0OZVMNa3Y4GHk;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$-A4y17DMfFWJcsomzkr9vLbjQAE;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$1ZEE7fA5djns2jQRzCNudNIbJ1U;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$4sX6UUtugZXD_J917yuWIm58Q9M;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$7u99Gj9w15XaOTtX23LKq-yXn5o;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$7x9zhFx3vhSZ5lMUA8efWaz-6co;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$LBjDP_WAw_7yWAmt8ZHABKob-8M;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$TQFCJtak2E5nTjAEG9Q24yp-Oi8;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$VgO_jyvTwx2IcoTcwvoIKxat95M;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$WskrGbNwLeexLlAXUNUyGLhHEWA;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$XFf_Y8TZb5u_pVgOD-hm95z8ghM;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$a-4AX8BeEa4UpmUmPJfszEypbe8;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$hEnPtnCJ_pCrhm4O_2UvgVpB0HQ;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$hIGRJSXS2_nuTiN5-y-qjXv-Wwk;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$k_PpuHAHKhi1gqk1dQsXNnYX7Ok;
 Lcom/android/server/wm/-$$Lambda$WindowContainer$lJjjxJS1wJFikrxN0jFMgNna43g;
+Lcom/android/server/wm/-$$Lambda$WindowContainer$sh5zVifGKSmT1fuGQxK_5_eAZ20;
 Lcom/android/server/wm/-$$Lambda$WindowManagerConstants$H0Vnr9H2xLD72_22unzb68d1fSM;
 Lcom/android/server/wm/-$$Lambda$WindowManagerConstants$YOsWod8qOtbBnduZqPrYHSwyJ5E;
 Lcom/android/server/wm/-$$Lambda$WindowManagerConstants$vqhvZbTPHnj84vQKH9wjAhgVP44;
 Lcom/android/server/wm/-$$Lambda$WindowManagerService$-84S7IuSlM65nKgepHJEvVFHdC8;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$05fsn8aS3Yh8PJChNK4X3zTgx6M;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$3$FRNc42I1SE4lD0XFYgIp8RCUXng;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$76as6dijPl5n2m0AtZPbXLM-ukM;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$8ua71O53dXrMSZy5W0bAg3kK7ho;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$C6YaaDDhV_SnUxYAgu9kKMJ4bvA;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$Fyqm87wrgGYc-KtVoeX41hP5jyE;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$KFmzvAqk_xZK5kvrW8MP3Y6A4FY;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$LocalService$_nYJRiVOgbON7mI191FIzNAk4Xs;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$LocalService$rEGrcIRCgYp-4kzr5xA12LKQX0E;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$Yf21B7QM1fRVFGIQy6MImYjka28;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$Zv37mcLTUXyG89YznyHzluaKNE0;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$_tfpDlf3MkHSDi8MNIOlvGgvLS8;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$eaG2e7SQKd8e2ZcXySkFGa1yxFk;
 Lcom/android/server/wm/-$$Lambda$WindowManagerService$pUqz7rqEpzd4geO4TXsDyOVZCOc;
 Lcom/android/server/wm/-$$Lambda$WindowManagerService$qCWPyJrU0wwX4tP-_QpfmersCVc;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$tOeHm8ndyhv8iLNQ_GHuZ7HhJdw;
+Lcom/android/server/wm/-$$Lambda$WindowManagerService$wmqs4RHTJSPc1AMchgkEBB8CALU;
 Lcom/android/server/wm/-$$Lambda$WindowToken$tFLHn4S6WuSXW1gp1kvT_sp7WC0;
 Lcom/android/server/wm/-$$Lambda$WindowTracing$lz89IHzR4nKO_ZtXtwyNGkRleMY;
+Lcom/android/server/wm/-$$Lambda$XcHmyRxMY5ULhjLiV-sIKnPtvOM;
 Lcom/android/server/wm/-$$Lambda$Z9QEXZevRsInPMEXX0zFWg8YGMQ;
+Lcom/android/server/wm/-$$Lambda$_-mEZ6EASUAbbjgZj87dfvxRN64;
 Lcom/android/server/wm/-$$Lambda$_jL5KNK44AQYPj1d8Hd3FYO0W-M;
 Lcom/android/server/wm/-$$Lambda$cJE-iQ28Rv-ThCcuht9wXeFzPgo;
+Lcom/android/server/wm/-$$Lambda$dwJG8BAnLlvKNGuDY9U3-haNY4M;
+Lcom/android/server/wm/-$$Lambda$h-x5kpt7iRsCHGk24gs4Sab2qLw;
+Lcom/android/server/wm/-$$Lambda$h9zRxk6xP2dliCTsIiNVg_lH9kA;
+Lcom/android/server/wm/-$$Lambda$hD1GQddqK6sJaBtwVBGHwmleilc;
 Lcom/android/server/wm/-$$Lambda$hT1kyMEAhvB1-Uxr0DFAlnuU3cQ;
+Lcom/android/server/wm/-$$Lambda$hwQLWout8wOWvnHXCxS5LJZGGvw;
 Lcom/android/server/wm/-$$Lambda$iQxeP_PsHHArcPSFabJ3FXyPKNc;
 Lcom/android/server/wm/-$$Lambda$ibmQVLjaQW2x74Wk8TcE0Og2MJM;
 Lcom/android/server/wm/-$$Lambda$j9nJq2XXOKyN4f0dfDaTjqmQRvg;
+Lcom/android/server/wm/-$$Lambda$ju_KnYxEFekr6LzoWamCeaO5FHQ;
+Lcom/android/server/wm/-$$Lambda$kMHOkFJdJNCG8WGqd9dfu58tyGo;
+Lcom/android/server/wm/-$$Lambda$oZvG727evJMxIwK1im7QJjcltfo;
 Lcom/android/server/wm/-$$Lambda$pAuPvwUqsKCejIrAPrx0ARZSqeY;
 Lcom/android/server/wm/-$$Lambda$qMFJUmfG50ZSjk7Tac67xBia0d4;
 Lcom/android/server/wm/-$$Lambda$swA_sUfSJdP8eC8AA9Iby3-SuOY;
 Lcom/android/server/wm/-$$Lambda$uwO6wQlqU3CG7OTdH7NBCKnHs64;
+Lcom/android/server/wm/-$$Lambda$vhwCX-wzYksBgFM46tASKUCeQRc;
+Lcom/android/server/wm/-$$Lambda$vyte-9pNBd6bQOP_6QpzB-cV8EM;
+Lcom/android/server/wm/-$$Lambda$x6Ib5GIrsWZg48HsPUVGxKBQJS4;
 Lcom/android/server/wm/-$$Lambda$yACUZqn1Ak-GL14-Nu3kHUSaLX0;
 Lcom/android/server/wm/-$$Lambda$yVRF8YoeNdTa8GR1wDStVsHu8xM;
 Lcom/android/server/wm/-$$Lambda$z5j5fiv3cZuY5AODkt3H3rhKimk;
 Lcom/android/server/wm/-$$Lambda$zP5AObb0-v-Zzwr-v8NXOg4Yt1c;
+Lcom/android/server/wm/-$$Lambda$zuO3rEvETpKsuJLTTdIHB2ijeho;
 Lcom/android/server/wm/-$$Lambda$zwLNi4Hz7werGBGptK8eYRpBWpw;
 Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver$MyHandler;
 Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;
+Lcom/android/server/wm/AccessibilityController;
 Lcom/android/server/wm/ActivityMetricsLaunchObserver;
 Lcom/android/server/wm/ActivityMetricsLaunchObserverRegistry;
+Lcom/android/server/wm/ActivityMetricsLogger$1;
+Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;
+Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
+Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;
 Lcom/android/server/wm/ActivityMetricsLogger;
+Lcom/android/server/wm/ActivityRecord$1;
+Lcom/android/server/wm/ActivityRecord$2;
+Lcom/android/server/wm/ActivityRecord$3;
+Lcom/android/server/wm/ActivityRecord$4;
+Lcom/android/server/wm/ActivityRecord$5;
 Lcom/android/server/wm/ActivityRecord$AddStartingWindow;
+Lcom/android/server/wm/ActivityRecord$AppSaturationInfo;
+Lcom/android/server/wm/ActivityRecord$CompatDisplayInsets;
 Lcom/android/server/wm/ActivityRecord$Token;
 Lcom/android/server/wm/ActivityRecord;
+Lcom/android/server/wm/ActivityResult;
 Lcom/android/server/wm/ActivityServiceConnectionsHolder;
+Lcom/android/server/wm/ActivityStack$1;
 Lcom/android/server/wm/ActivityStack$ActivityStackHandler;
 Lcom/android/server/wm/ActivityStack$ActivityState;
 Lcom/android/server/wm/ActivityStack$CheckBehindFullscreenActivityHelper;
 Lcom/android/server/wm/ActivityStack$EnsureVisibleActivitiesConfigHelper;
 Lcom/android/server/wm/ActivityStack$RemoveHistoryRecordsForApp;
 Lcom/android/server/wm/ActivityStack;
+Lcom/android/server/wm/ActivityStackSupervisor$1;
 Lcom/android/server/wm/ActivityStackSupervisor$ActivityStackSupervisorHandler;
 Lcom/android/server/wm/ActivityStackSupervisor$MoveTaskToFullscreenHelper;
 Lcom/android/server/wm/ActivityStackSupervisor$PendingActivityLaunch;
+Lcom/android/server/wm/ActivityStackSupervisor$WaitInfo;
 Lcom/android/server/wm/ActivityStackSupervisor;
 Lcom/android/server/wm/ActivityStartController$StartHandler;
 Lcom/android/server/wm/ActivityStartController;
@@ -27361,10 +45153,12 @@
 Lcom/android/server/wm/ActivityStarter$Factory;
 Lcom/android/server/wm/ActivityStarter$Request;
 Lcom/android/server/wm/ActivityStarter;
+Lcom/android/server/wm/ActivityTaskManagerInternal$ActivityTokens;
 Lcom/android/server/wm/ActivityTaskManagerInternal$ScreenObserver;
 Lcom/android/server/wm/ActivityTaskManagerInternal$SleepToken;
 Lcom/android/server/wm/ActivityTaskManagerInternal;
 Lcom/android/server/wm/ActivityTaskManagerService$1;
+Lcom/android/server/wm/ActivityTaskManagerService$2;
 Lcom/android/server/wm/ActivityTaskManagerService$FontScaleSettingObserver;
 Lcom/android/server/wm/ActivityTaskManagerService$H;
 Lcom/android/server/wm/ActivityTaskManagerService$Lifecycle;
@@ -27379,6 +45173,7 @@
 Lcom/android/server/wm/AppTaskImpl;
 Lcom/android/server/wm/AppTransition$1;
 Lcom/android/server/wm/AppTransition$2;
+Lcom/android/server/wm/AppTransition$3;
 Lcom/android/server/wm/AppTransition;
 Lcom/android/server/wm/AppTransitionController;
 Lcom/android/server/wm/AppWarnings$ConfigHandler;
@@ -27389,6 +45184,7 @@
 Lcom/android/server/wm/BarController$OnBarVisibilityChangedListener;
 Lcom/android/server/wm/BarController;
 Lcom/android/server/wm/BlackFrame;
+Lcom/android/server/wm/BoundsAnimationController$1;
 Lcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;
 Lcom/android/server/wm/BoundsAnimationController$BoundsAnimator;
 Lcom/android/server/wm/BoundsAnimationController;
@@ -27399,16 +45195,29 @@
 Lcom/android/server/wm/ConfigurationContainer$RemoteToken;
 Lcom/android/server/wm/ConfigurationContainer;
 Lcom/android/server/wm/ConfigurationContainerListener;
+Lcom/android/server/wm/DeprecatedTargetSdkVersionDialog;
 Lcom/android/server/wm/Dimmer$AlphaAnimationSpec;
 Lcom/android/server/wm/Dimmer$DimAnimatable;
 Lcom/android/server/wm/Dimmer$DimState;
 Lcom/android/server/wm/Dimmer$SurfaceAnimatorStarter;
 Lcom/android/server/wm/Dimmer;
+Lcom/android/server/wm/DisplayArea$1;
+Lcom/android/server/wm/DisplayArea$Root;
+Lcom/android/server/wm/DisplayArea$Tokens;
+Lcom/android/server/wm/DisplayArea$Type;
+Lcom/android/server/wm/DisplayArea;
+Lcom/android/server/wm/DisplayAreaPolicy$1;
+Lcom/android/server/wm/DisplayAreaPolicy$Default;
+Lcom/android/server/wm/DisplayAreaPolicy;
+Lcom/android/server/wm/DisplayContent$1;
 Lcom/android/server/wm/DisplayContent$AboveAppWindowContainers;
 Lcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;
 Lcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;
+Lcom/android/server/wm/DisplayContent$ImeContainer;
 Lcom/android/server/wm/DisplayContent$NonAppWindowContainers;
 Lcom/android/server/wm/DisplayContent$OnStackOrderChangedListener;
+Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;
+Lcom/android/server/wm/DisplayContent$TaskContainers;
 Lcom/android/server/wm/DisplayContent$TaskForResizePointSearchResult;
 Lcom/android/server/wm/DisplayContent$TaskStackContainers;
 Lcom/android/server/wm/DisplayContent$WindowContainers;
@@ -27418,6 +45227,7 @@
 Lcom/android/server/wm/DisplayPolicy$2;
 Lcom/android/server/wm/DisplayPolicy$3;
 Lcom/android/server/wm/DisplayPolicy$4;
+Lcom/android/server/wm/DisplayPolicy$HideNavInputEventReceiver;
 Lcom/android/server/wm/DisplayPolicy$PolicyHandler;
 Lcom/android/server/wm/DisplayPolicy;
 Lcom/android/server/wm/DisplayRotation$1;
@@ -27428,6 +45238,7 @@
 Lcom/android/server/wm/DisplayRotation$SettingsObserver;
 Lcom/android/server/wm/DisplayRotation;
 Lcom/android/server/wm/DisplayWindowListenerController;
+Lcom/android/server/wm/DisplayWindowSettings$1;
 Lcom/android/server/wm/DisplayWindowSettings$AtomicFileStorage;
 Lcom/android/server/wm/DisplayWindowSettings$Entry;
 Lcom/android/server/wm/DisplayWindowSettings$SettingPersister;
@@ -27437,27 +45248,40 @@
 Lcom/android/server/wm/DragDropController$DragHandler;
 Lcom/android/server/wm/DragDropController;
 Lcom/android/server/wm/DragInputEventReceiver;
+Lcom/android/server/wm/DragResizeMode;
 Lcom/android/server/wm/DragState$InputInterceptor;
 Lcom/android/server/wm/DragState;
+Lcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;
 Lcom/android/server/wm/EmbeddedWindowController;
+Lcom/android/server/wm/EmulatorDisplayOverlay;
 Lcom/android/server/wm/EnsureActivitiesVisibleHelper;
 Lcom/android/server/wm/EventLogTags;
+Lcom/android/server/wm/FactoryErrorDialog;
+Lcom/android/server/wm/HighRefreshRateBlacklist$1;
 Lcom/android/server/wm/HighRefreshRateBlacklist$OnPropertiesChangedListener;
 Lcom/android/server/wm/HighRefreshRateBlacklist;
 Lcom/android/server/wm/ImeInsetsSourceProvider;
 Lcom/android/server/wm/ImmersiveModeConfirmation$1;
+Lcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;
 Lcom/android/server/wm/ImmersiveModeConfirmation$H;
 Lcom/android/server/wm/ImmersiveModeConfirmation;
 Lcom/android/server/wm/InputConsumerImpl;
+Lcom/android/server/wm/InputManagerCallback$1;
 Lcom/android/server/wm/InputManagerCallback;
+Lcom/android/server/wm/InputMonitor$1;
 Lcom/android/server/wm/InputMonitor$EventReceiverInputConsumer;
 Lcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;
 Lcom/android/server/wm/InputMonitor$UpdateInputWindows;
 Lcom/android/server/wm/InputMonitor;
 Lcom/android/server/wm/InsetsControlTarget;
+Lcom/android/server/wm/InsetsPolicy$1;
 Lcom/android/server/wm/InsetsPolicy$BarWindow;
+Lcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener$InsetsPolicyAnimationControlCallbacks;
+Lcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener;
 Lcom/android/server/wm/InsetsPolicy$TransientControlTarget;
 Lcom/android/server/wm/InsetsPolicy;
+Lcom/android/server/wm/InsetsSourceProvider$1;
+Lcom/android/server/wm/InsetsSourceProvider$ControlAdapter;
 Lcom/android/server/wm/InsetsSourceProvider;
 Lcom/android/server/wm/InsetsStateController;
 Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;
@@ -27470,6 +45294,7 @@
 Lcom/android/server/wm/LaunchParamsController$LaunchParams;
 Lcom/android/server/wm/LaunchParamsController$LaunchParamsModifier;
 Lcom/android/server/wm/LaunchParamsController;
+Lcom/android/server/wm/LaunchParamsPersister$1;
 Lcom/android/server/wm/LaunchParamsPersister$CleanUpComponentQueueItem;
 Lcom/android/server/wm/LaunchParamsPersister$LaunchParamsWriteQueueItem;
 Lcom/android/server/wm/LaunchParamsPersister$PackageListObserver;
@@ -27480,15 +45305,18 @@
 Lcom/android/server/wm/Letterbox;
 Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;
 Lcom/android/server/wm/LocalAnimationAdapter;
+Lcom/android/server/wm/LockTaskController$1;
 Lcom/android/server/wm/LockTaskController$LockTaskToken;
 Lcom/android/server/wm/LockTaskController;
 Lcom/android/server/wm/MirrorActiveUids;
 Lcom/android/server/wm/PendingRemoteAnimationRegistry$Entry;
 Lcom/android/server/wm/PendingRemoteAnimationRegistry;
+Lcom/android/server/wm/PersisterQueue$1;
 Lcom/android/server/wm/PersisterQueue$LazyTaskWriterThread;
 Lcom/android/server/wm/PersisterQueue$Listener;
 Lcom/android/server/wm/PersisterQueue$WriteQueueItem;
 Lcom/android/server/wm/PersisterQueue;
+Lcom/android/server/wm/PinnedStackController$1;
 Lcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;
 Lcom/android/server/wm/PinnedStackController$PinnedStackListenerDeathHandler;
 Lcom/android/server/wm/PinnedStackController;
@@ -27515,19 +45343,27 @@
 Lcom/android/server/wm/RootActivityContainer$FinishDisabledPackageActivitiesHelper;
 Lcom/android/server/wm/RootActivityContainer$SleepTokenImpl;
 Lcom/android/server/wm/RootActivityContainer;
+Lcom/android/server/wm/RootWindowContainer$1;
+Lcom/android/server/wm/RootWindowContainer$FindTaskResult;
+Lcom/android/server/wm/RootWindowContainer$FinishDisabledPackageActivitiesHelper;
 Lcom/android/server/wm/RootWindowContainer$MyHandler;
+Lcom/android/server/wm/RootWindowContainer$SleepTokenImpl;
 Lcom/android/server/wm/RootWindowContainer;
 Lcom/android/server/wm/RunningTasks;
 Lcom/android/server/wm/SafeActivityOptions;
 Lcom/android/server/wm/ScreenRotationAnimation;
 Lcom/android/server/wm/SeamlessRotator;
 Lcom/android/server/wm/Session;
+Lcom/android/server/wm/ShellRoot;
+Lcom/android/server/wm/SnapshotStartingData;
 Lcom/android/server/wm/SplashScreenStartingData;
 Lcom/android/server/wm/StartingData;
 Lcom/android/server/wm/StatusBarController$1;
 Lcom/android/server/wm/StatusBarController;
+Lcom/android/server/wm/StrictModeFlash;
 Lcom/android/server/wm/SurfaceAnimationRunner$1;
 Lcom/android/server/wm/SurfaceAnimationRunner$AnimatorFactory;
+Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;
 Lcom/android/server/wm/SurfaceAnimationRunner$SfValueAnimator;
 Lcom/android/server/wm/SurfaceAnimationRunner;
 Lcom/android/server/wm/SurfaceAnimationThread;
@@ -27538,15 +45374,24 @@
 Lcom/android/server/wm/SystemGesturesPointerEventListener$Callbacks;
 Lcom/android/server/wm/SystemGesturesPointerEventListener$FlingGestureDetector;
 Lcom/android/server/wm/SystemGesturesPointerEventListener;
+Lcom/android/server/wm/Task$1;
+Lcom/android/server/wm/Task$FindRootHelper;
+Lcom/android/server/wm/Task$TaskActivitiesReport;
+Lcom/android/server/wm/Task$TaskFactory;
+Lcom/android/server/wm/Task$TaskToken;
 Lcom/android/server/wm/Task;
 Lcom/android/server/wm/TaskChangeNotificationController$MainHandler;
 Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 Lcom/android/server/wm/TaskChangeNotificationController;
 Lcom/android/server/wm/TaskLaunchParamsModifier;
+Lcom/android/server/wm/TaskOrganizerController$DeathRecipient;
+Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;
+Lcom/android/server/wm/TaskOrganizerController;
 Lcom/android/server/wm/TaskPersister$1;
 Lcom/android/server/wm/TaskPersister$ImageWriteQueueItem;
 Lcom/android/server/wm/TaskPersister$TaskWriteQueueItem;
 Lcom/android/server/wm/TaskPersister;
+Lcom/android/server/wm/TaskPositioner;
 Lcom/android/server/wm/TaskPositioningController;
 Lcom/android/server/wm/TaskSnapshotCache$CacheEntry;
 Lcom/android/server/wm/TaskSnapshotCache;
@@ -27564,27 +45409,40 @@
 Lcom/android/server/wm/TaskSnapshotSurface$Window;
 Lcom/android/server/wm/TaskSnapshotSurface;
 Lcom/android/server/wm/TaskTapPointerEventListener;
+Lcom/android/server/wm/TaskTile;
 Lcom/android/server/wm/UnknownAppVisibilityController;
+Lcom/android/server/wm/UnsupportedCompileSdkDialog;
+Lcom/android/server/wm/UnsupportedDisplaySizeDialog;
+Lcom/android/server/wm/ViewServer;
 Lcom/android/server/wm/VrController$1;
 Lcom/android/server/wm/VrController;
 Lcom/android/server/wm/WallpaperAnimationAdapter;
+Lcom/android/server/wm/WallpaperController$1;
 Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;
 Lcom/android/server/wm/WallpaperController;
 Lcom/android/server/wm/WallpaperVisibilityListeners;
 Lcom/android/server/wm/WallpaperWindowToken;
+Lcom/android/server/wm/Watermark;
 Lcom/android/server/wm/WindowAnimationSpec;
+Lcom/android/server/wm/WindowAnimator$1;
 Lcom/android/server/wm/WindowAnimator$DisplayContentsAnimator;
 Lcom/android/server/wm/WindowAnimator;
+Lcom/android/server/wm/WindowChangeAnimationSpec;
+Lcom/android/server/wm/WindowContainer$1;
 Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;
 Lcom/android/server/wm/WindowContainer$PreAssignChildLayersCallback;
+Lcom/android/server/wm/WindowContainer$RemoteToken;
 Lcom/android/server/wm/WindowContainer;
+Lcom/android/server/wm/WindowContainerThumbnail;
 Lcom/android/server/wm/WindowFrames;
 Lcom/android/server/wm/WindowList;
 Lcom/android/server/wm/WindowManagerConstants;
 Lcom/android/server/wm/WindowManagerGlobalLock;
 Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;
 Lcom/android/server/wm/WindowManagerInternal$IDragDropCallback;
+Lcom/android/server/wm/WindowManagerInternal$MagnificationCallbacks;
 Lcom/android/server/wm/WindowManagerInternal$OnHardKeyboardStatusChangeListener;
+Lcom/android/server/wm/WindowManagerInternal$WindowsForAccessibilityCallback;
 Lcom/android/server/wm/WindowManagerInternal;
 Lcom/android/server/wm/WindowManagerService$10;
 Lcom/android/server/wm/WindowManagerService$1;
@@ -27595,12 +45453,16 @@
 Lcom/android/server/wm/WindowManagerService$6;
 Lcom/android/server/wm/WindowManagerService$7;
 Lcom/android/server/wm/WindowManagerService$8;
+Lcom/android/server/wm/WindowManagerService$9;
 Lcom/android/server/wm/WindowManagerService$AppFreezeListener;
 Lcom/android/server/wm/WindowManagerService$H;
 Lcom/android/server/wm/WindowManagerService$LocalService;
 Lcom/android/server/wm/WindowManagerService$MousePositionTracker;
+Lcom/android/server/wm/WindowManagerService$RotationWatcher;
 Lcom/android/server/wm/WindowManagerService$SettingsObserver;
+Lcom/android/server/wm/WindowManagerService$WindowChangeListener;
 Lcom/android/server/wm/WindowManagerService;
+Lcom/android/server/wm/WindowManagerShellCommand;
 Lcom/android/server/wm/WindowManagerThreadPriorityBooster;
 Lcom/android/server/wm/WindowProcessController$ComputeOomAdjCallback;
 Lcom/android/server/wm/WindowProcessController;
@@ -27609,6 +45471,7 @@
 Lcom/android/server/wm/WindowState$1;
 Lcom/android/server/wm/WindowState$2;
 Lcom/android/server/wm/WindowState$3;
+Lcom/android/server/wm/WindowState$DeadWindowEventReceiver;
 Lcom/android/server/wm/WindowState$DeathRecipient;
 Lcom/android/server/wm/WindowState$MoveAnimationSpec;
 Lcom/android/server/wm/WindowState$PowerManagerWrapper;
@@ -27617,39 +45480,64 @@
 Lcom/android/server/wm/WindowState;
 Lcom/android/server/wm/WindowStateAnimator;
 Lcom/android/server/wm/WindowSurfaceController;
+Lcom/android/server/wm/WindowSurfacePlacer$1;
 Lcom/android/server/wm/WindowSurfacePlacer$Traverser;
 Lcom/android/server/wm/WindowSurfacePlacer;
 Lcom/android/server/wm/WindowToken;
 Lcom/android/server/wm/WindowTracing;
 Lcom/android/server/wm/animation/ClipRectLRAnimation;
 Lcom/android/server/wm/animation/ClipRectTBAnimation;
+Lcom/android/server/wm/animation/CurvedTranslateAnimation;
 Lcom/android/server/wm/utils/CoordinateTransforms;
 Lcom/android/server/wm/utils/DeviceConfigInterface$1;
 Lcom/android/server/wm/utils/DeviceConfigInterface;
 Lcom/android/server/wm/utils/DisplayRotationUtil;
 Lcom/android/server/wm/utils/InsetUtils;
+Lcom/android/server/wm/utils/RegionUtils;
 Lcom/android/server/wm/utils/RotationCache$RotationDependentComputation;
 Lcom/android/server/wm/utils/RotationCache;
 Lcom/android/server/wm/utils/WmDisplayCutout;
 Lcom/android/timezone/distro/DistroException;
+Lcom/android/timezone/distro/DistroVersion;
+Lcom/android/timezone/distro/FileUtils;
 Lcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$6ikxM-3KospNGDidAY7yA-rECHw;
 Lcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$B9wq4q5y7qahY6TuLMO_s8nPIwY;
 Lcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$J1AHa-Qs75WQr3stjbN97THbudE;
+Lcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$bprgjb2FWBxwWDJr-Q4ViVP0aJc;
+Lcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$elqG7IabJdUOCjFWiPV8vgrXnVI;
+Lcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$AppLaunchObserver$qed0q0aplGsIh0O7dSm6JWk8wZI;
 Lcom/google/android/startop/iorap/-$$Lambda$IorapForwardingService$miQO-RJhHA7C1W4BujwCS9blXFc;
+Lcom/google/android/startop/iorap/AppIntentEvent;
+Lcom/google/android/startop/iorap/AppLaunchEvent$1;
+Lcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunchCancelled;
 Lcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunchFinished;
 Lcom/google/android/startop/iorap/AppLaunchEvent$ActivityLaunched;
+Lcom/google/android/startop/iorap/AppLaunchEvent$ActivityRecordProtoParcelable;
 Lcom/google/android/startop/iorap/AppLaunchEvent$BaseWithActivityRecordData;
+Lcom/google/android/startop/iorap/AppLaunchEvent$IntentFailed;
+Lcom/google/android/startop/iorap/AppLaunchEvent$IntentProtoParcelable;
 Lcom/google/android/startop/iorap/AppLaunchEvent$IntentStarted;
+Lcom/google/android/startop/iorap/AppLaunchEvent$ReportFullyDrawn;
 Lcom/google/android/startop/iorap/AppLaunchEvent;
+Lcom/google/android/startop/iorap/EventSequenceValidator$State;
+Lcom/google/android/startop/iorap/EventSequenceValidator;
 Lcom/google/android/startop/iorap/IIorap$Stub$Proxy;
 Lcom/google/android/startop/iorap/IIorap$Stub;
 Lcom/google/android/startop/iorap/IIorap;
+Lcom/google/android/startop/iorap/ITaskListener$Stub$Proxy;
 Lcom/google/android/startop/iorap/ITaskListener$Stub;
 Lcom/google/android/startop/iorap/ITaskListener;
 Lcom/google/android/startop/iorap/IorapForwardingService$1;
 Lcom/google/android/startop/iorap/IorapForwardingService$AppLaunchObserver;
 Lcom/google/android/startop/iorap/IorapForwardingService$BinderConnectionHandler;
+Lcom/google/android/startop/iorap/IorapForwardingService$IorapdJobService;
 Lcom/google/android/startop/iorap/IorapForwardingService$RemoteRunnable;
 Lcom/google/android/startop/iorap/IorapForwardingService$RemoteTaskListener;
 Lcom/google/android/startop/iorap/IorapForwardingService;
+Lcom/google/android/startop/iorap/JobScheduledEvent;
+Lcom/google/android/startop/iorap/PackageEvent;
+Lcom/google/android/startop/iorap/RequestId$1;
 Lcom/google/android/startop/iorap/RequestId;
+Lcom/google/android/startop/iorap/SystemServiceEvent;
+Lcom/google/android/startop/iorap/SystemServiceUserEvent;
+Lcom/google/android/startop/iorap/TaskResult;
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
index 1cb9313..872f0eb 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
@@ -82,6 +82,7 @@
 import com.android.server.autofill.AutofillManagerService.AutofillCompatState;
 import com.android.server.autofill.RemoteAugmentedAutofillService.RemoteAugmentedAutofillServiceCallbacks;
 import com.android.server.autofill.ui.AutoFillUI;
+import com.android.server.contentcapture.ContentCaptureManagerInternal;
 import com.android.server.infra.AbstractPerUserSystemService;
 import com.android.server.inputmethod.InputMethodManagerInternal;
 
@@ -118,6 +119,9 @@
     private final LocalLog mUiLatencyHistory;
     private final LocalLog mWtfHistory;
     private final FieldClassificationStrategy mFieldClassificationStrategy;
+
+    @GuardedBy("mLock")
+    @Nullable
     private RemoteInlineSuggestionRenderService mRemoteInlineSuggestionRenderService;
 
     /**
@@ -180,6 +184,8 @@
 
     private final InputMethodManagerInternal mInputMethodManagerInternal;
 
+    private final ContentCaptureManagerInternal mContentCaptureManagerInternal;
+
     AutofillManagerServiceImpl(AutofillManagerService master, Object lock,
             LocalLog uiLatencyHistory, LocalLog wtfHistory, int userId, AutoFillUI ui,
             AutofillCompatState autofillCompatState,
@@ -192,10 +198,22 @@
         mFieldClassificationStrategy = new FieldClassificationStrategy(getContext(), userId);
         mAutofillCompatState = autofillCompatState;
         mInputMethodManagerInternal = LocalServices.getService(InputMethodManagerInternal.class);
+        mContentCaptureManagerInternal = LocalServices.getService(
+                ContentCaptureManagerInternal.class);
 
         updateLocked(disabled);
     }
 
+    boolean sendActivityAssistDataToContentCapture(@NonNull IBinder activityToken,
+            @NonNull Bundle data) {
+        if (mContentCaptureManagerInternal != null) {
+            mContentCaptureManagerInternal.sendActivityAssistData(getUserId(), activityToken, data);
+            return true;
+        }
+
+        return false;
+    }
+
     @GuardedBy("mLock")
     void onBackKeyPressed() {
         final RemoteAugmentedAutofillService remoteService =
@@ -221,17 +239,8 @@
             sendStateToClients(/* resetClient= */ false);
         }
         updateRemoteAugmentedAutofillService();
+        updateRemoteInlineSuggestionRenderServiceLocked();
 
-        final ComponentName componentName = RemoteInlineSuggestionRenderService
-                .getServiceComponentName(getContext(), mUserId);
-        if (componentName != null) {
-            mRemoteInlineSuggestionRenderService = new RemoteInlineSuggestionRenderService(
-                    getContext(), componentName, InlineSuggestionRenderService.SERVICE_INTERFACE,
-                    mUserId, new InlineSuggestionRenderCallbacksImpl(),
-                    mMaster.isBindInstantServiceAllowed(), mMaster.verbose);
-        } else {
-            mRemoteInlineSuggestionRenderService = null;
-        }
         return enabledChanged;
     }
 
@@ -1629,7 +1638,29 @@
         return mFieldClassificationStrategy.getDefaultAlgorithm();
     }
 
-    RemoteInlineSuggestionRenderService getRemoteInlineSuggestionRenderService() {
+    private void updateRemoteInlineSuggestionRenderServiceLocked() {
+        if (mRemoteInlineSuggestionRenderService != null) {
+            if (sVerbose) {
+                Slog.v(TAG, "updateRemoteInlineSuggestionRenderService(): "
+                        + "destroying old remote service");
+            }
+            mRemoteInlineSuggestionRenderService = null;
+        }
+
+        mRemoteInlineSuggestionRenderService = getRemoteInlineSuggestionRenderServiceLocked();
+    }
+
+    RemoteInlineSuggestionRenderService getRemoteInlineSuggestionRenderServiceLocked() {
+        final ComponentName componentName = RemoteInlineSuggestionRenderService
+                .getServiceComponentName(getContext(), mUserId);
+
+        if (mRemoteInlineSuggestionRenderService == null) {
+            mRemoteInlineSuggestionRenderService = new RemoteInlineSuggestionRenderService(
+                    getContext(), componentName, InlineSuggestionRenderService.SERVICE_INTERFACE,
+                    mUserId, new InlineSuggestionRenderCallbacksImpl(),
+                    mMaster.isBindInstantServiceAllowed(), mMaster.verbose);
+        }
+
         return mRemoteInlineSuggestionRenderService;
     }
 
diff --git a/services/autofill/java/com/android/server/autofill/InlineSuggestionSession.java b/services/autofill/java/com/android/server/autofill/InlineSuggestionSession.java
new file mode 100644
index 0000000..6daa106
--- /dev/null
+++ b/services/autofill/java/com/android/server/autofill/InlineSuggestionSession.java
@@ -0,0 +1,172 @@
+/*
+ * 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.autofill;
+
+import static com.android.server.autofill.Helper.sDebug;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.ComponentName;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.util.Log;
+import android.view.autofill.AutofillId;
+import android.view.inputmethod.InlineSuggestionsRequest;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.view.IInlineSuggestionsRequestCallback;
+import com.android.internal.view.IInlineSuggestionsResponseCallback;
+import com.android.internal.view.InlineSuggestionsRequestInfo;
+import com.android.server.inputmethod.InputMethodManagerInternal;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Maintains an inline suggestion autofill session.
+ *
+ * <p> This class is thread safe.
+ */
+final class InlineSuggestionSession {
+
+    private static final String TAG = "InlineSuggestionSession";
+    private static final int INLINE_REQUEST_TIMEOUT_MS = 1000;
+
+    @NonNull
+    private final InputMethodManagerInternal mInputMethodManagerInternal;
+    private final int mUserId;
+    @NonNull
+    private final ComponentName mComponentName;
+    @NonNull
+    private final Object mLock;
+
+    @GuardedBy("mLock")
+    @Nullable
+    private CompletableFuture<ImeResponse> mPendingImeResponse;
+
+    InlineSuggestionSession(InputMethodManagerInternal inputMethodManagerInternal,
+            int userId, ComponentName componentName) {
+        mInputMethodManagerInternal = inputMethodManagerInternal;
+        mUserId = userId;
+        mComponentName = componentName;
+        mLock = new Object();
+    }
+
+    public void createRequest(@NonNull AutofillId currentViewId) {
+        synchronized (mLock) {
+            cancelCurrentRequest();
+            mPendingImeResponse = new CompletableFuture<>();
+            // TODO(b/146454892): pipe the uiExtras from the ExtServices.
+            mInputMethodManagerInternal.onCreateInlineSuggestionsRequest(
+                    mUserId,
+                    new InlineSuggestionsRequestInfo(mComponentName, currentViewId, new Bundle()),
+                    new InlineSuggestionsRequestCallbackImpl(mPendingImeResponse));
+        }
+    }
+
+    @Nullable
+    public ImeResponse waitAndGetImeResponse() {
+        CompletableFuture<ImeResponse> pendingImeResponse = getPendingImeResponse();
+        if (pendingImeResponse == null || pendingImeResponse.isCancelled()) {
+            return null;
+        }
+        try {
+            return pendingImeResponse.get(INLINE_REQUEST_TIMEOUT_MS, TimeUnit.MILLISECONDS);
+        } catch (TimeoutException e) {
+            Log.w(TAG, "Exception getting inline suggestions request in time: " + e);
+        } catch (CancellationException e) {
+            Log.w(TAG, "Inline suggestions request cancelled");
+        } catch (InterruptedException | ExecutionException e) {
+            throw new RuntimeException(e);
+        }
+        return null;
+    }
+
+    private void cancelCurrentRequest() {
+        CompletableFuture<ImeResponse> pendingImeResponse = getPendingImeResponse();
+        if (pendingImeResponse != null) {
+            pendingImeResponse.cancel(true);
+        }
+    }
+
+    @Nullable
+    @GuardedBy("mLock")
+    private CompletableFuture<ImeResponse> getPendingImeResponse() {
+        synchronized (mLock) {
+            return mPendingImeResponse;
+        }
+    }
+
+    private static final class InlineSuggestionsRequestCallbackImpl
+            extends IInlineSuggestionsRequestCallback.Stub {
+
+        private final CompletableFuture<ImeResponse> mResponse;
+
+        private InlineSuggestionsRequestCallbackImpl(CompletableFuture<ImeResponse> response) {
+            mResponse = response;
+        }
+
+        @Override
+        public void onInlineSuggestionsUnsupported() throws RemoteException {
+            if (sDebug) {
+                Log.d(TAG, "onInlineSuggestionsUnsupported() called.");
+            }
+            mResponse.cancel(true);
+        }
+
+        @Override
+        public void onInlineSuggestionsRequest(InlineSuggestionsRequest request,
+                IInlineSuggestionsResponseCallback callback) throws RemoteException {
+            if (sDebug) {
+                Log.d(TAG, "onInlineSuggestionsRequest() received: " + request);
+            }
+            if (request != null && callback != null) {
+                mResponse.complete(new ImeResponse(request, callback));
+            } else {
+                mResponse.cancel(true);
+            }
+        }
+    }
+
+    /**
+     * A data class wrapping IME responses for the inline suggestion request.
+     */
+    public static class ImeResponse {
+        @NonNull
+        private final InlineSuggestionsRequest mRequest;
+
+        @NonNull
+        private final IInlineSuggestionsResponseCallback mCallback;
+
+        ImeResponse(@NonNull InlineSuggestionsRequest request,
+                @NonNull IInlineSuggestionsResponseCallback callback) {
+            mRequest = request;
+            mCallback = callback;
+        }
+
+        public InlineSuggestionsRequest getRequest() {
+            return mRequest;
+        }
+
+        public IInlineSuggestionsResponseCallback getCallback() {
+            return mCallback;
+        }
+    }
+}
diff --git a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java
index 880c401..1eb7692 100644
--- a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java
+++ b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java
@@ -146,7 +146,8 @@
             @Nullable AutofillValue focusedValue,
             @Nullable InlineSuggestionsRequest inlineSuggestionsRequest,
             @Nullable IInlineSuggestionsResponseCallback inlineSuggestionsCallback,
-            @NonNull Runnable onErrorCallback) {
+            @NonNull Runnable onErrorCallback,
+            @NonNull RemoteInlineSuggestionRenderService remoteRenderService) {
         long requestTime = SystemClock.elapsedRealtime();
         AtomicReference<ICancellationSignal> cancellationRef = new AtomicReference<>();
 
@@ -166,9 +167,9 @@
                                 public void onSuccess(@Nullable Dataset[] inlineSuggestionsData) {
                                     mCallbacks.resetLastResponse();
                                     maybeRequestShowInlineSuggestions(sessionId,
-                                            inlineSuggestionsData, focusedId,
-                                            inlineSuggestionsCallback, client,
-                                            onErrorCallback);
+                                            inlineSuggestionsRequest, inlineSuggestionsData,
+                                            focusedId, inlineSuggestionsCallback, client,
+                                            onErrorCallback, remoteRenderService);
                                     requestAutofill.complete(null);
                                 }
 
@@ -231,10 +232,13 @@
     }
 
     private void maybeRequestShowInlineSuggestions(int sessionId,
-            @Nullable Dataset[] inlineSuggestionsData, @NonNull AutofillId focusedId,
+            @Nullable InlineSuggestionsRequest request, @Nullable Dataset[] inlineSuggestionsData,
+            @NonNull AutofillId focusedId,
             @Nullable IInlineSuggestionsResponseCallback inlineSuggestionsCallback,
-            @NonNull IAutoFillManagerClient client, @NonNull Runnable onErrorCallback) {
-        if (ArrayUtils.isEmpty(inlineSuggestionsData) || inlineSuggestionsCallback == null) {
+            @NonNull IAutoFillManagerClient client, @NonNull Runnable onErrorCallback,
+            @NonNull RemoteInlineSuggestionRenderService remoteRenderService) {
+        if (ArrayUtils.isEmpty(inlineSuggestionsData) || inlineSuggestionsCallback == null
+                || request == null) {
             return;
         }
         mCallbacks.setLastResponse(sessionId);
@@ -242,7 +246,7 @@
         try {
             inlineSuggestionsCallback.onInlineSuggestionsResponse(
                     InlineSuggestionFactory.createAugmentedInlineSuggestionsResponse(
-                            inlineSuggestionsData, focusedId, mContext,
+                            request, inlineSuggestionsData, focusedId, mContext,
                             dataset -> {
                                 mCallbacks.logAugmentedAutofillSelected(sessionId,
                                         dataset.getId());
@@ -252,7 +256,7 @@
                                 } catch (RemoteException e) {
                                     Slog.w(TAG, "Encounter exception autofilling the values");
                                 }
-                            }, onErrorCallback));
+                            }, onErrorCallback, remoteRenderService));
         } catch (RemoteException e) {
             Slog.w(TAG, "Exception sending inline suggestions response back to IME.");
         }
diff --git a/services/autofill/java/com/android/server/autofill/RemoteInlineSuggestionRenderService.java b/services/autofill/java/com/android/server/autofill/RemoteInlineSuggestionRenderService.java
index 31dc23f..5d5af53 100644
--- a/services/autofill/java/com/android/server/autofill/RemoteInlineSuggestionRenderService.java
+++ b/services/autofill/java/com/android/server/autofill/RemoteInlineSuggestionRenderService.java
@@ -36,7 +36,10 @@
 
 import com.android.internal.infra.AbstractMultiplePendingRequestsRemoteService;
 
-final class RemoteInlineSuggestionRenderService extends
+/**
+ * Remote service to help connect to InlineSuggestionRenderService in ExtServices.
+ */
+public final class RemoteInlineSuggestionRenderService extends
         AbstractMultiplePendingRequestsRemoteService<RemoteInlineSuggestionRenderService,
                 IInlineSuggestionRenderService> {
 
@@ -81,9 +84,11 @@
      * Called by {@link Session} to generate a call to the
      * {@link RemoteInlineSuggestionRenderService} to request rendering a slice .
      */
-    void renderSuggestion(@NonNull IInlineSuggestionUiCallback callback,
-            @NonNull InlinePresentation presentation, int width, int height) {
-        scheduleAsyncRequest((s) -> s.renderSuggestion(callback, presentation, width, height));
+    public void renderSuggestion(@NonNull IInlineSuggestionUiCallback callback,
+            @NonNull InlinePresentation presentation, int width, int height,
+            @Nullable IBinder hostInputToken) {
+        scheduleAsyncRequest(
+                (s) -> s.renderSuggestion(callback, presentation, width, height, hostInputToken));
     }
 
     @Nullable
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 7e5123c..f544517 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -100,7 +100,6 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.util.ArrayUtils;
-import com.android.internal.view.IInlineSuggestionsRequestCallback;
 import com.android.internal.view.IInlineSuggestionsResponseCallback;
 import com.android.server.autofill.ui.AutoFillUI;
 import com.android.server.autofill.ui.InlineSuggestionFactory;
@@ -114,11 +113,6 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
@@ -159,9 +153,6 @@
     /** uid the session is for */
     public final int uid;
 
-    /** user id the session is for */
-    public final int userId;
-
     /** ID of the task associated with this session's activity */
     public final int taskId;
 
@@ -310,11 +301,8 @@
     @GuardedBy("mLock")
     private boolean mForAugmentedAutofillOnly;
 
-    @NonNull
-    private final InputMethodManagerInternal mInputMethodManagerInternal;
-
     @Nullable
-    private InlineSuggestionsRequestCallbackImpl mInlineSuggestionsRequestCallback;
+    private final InlineSuggestionSession mInlineSuggestionSession;
 
     /**
      * Receiver of assist data from the app's {@link Activity}.
@@ -415,14 +403,16 @@
                 final ArrayList<FillContext> contexts =
                         mergePreviousSessionLocked(/* forSave= */ false);
 
-                final InlineSuggestionsRequest suggestionsRequest =
-                        mInlineSuggestionsRequestCallback != null
-                                ? mInlineSuggestionsRequestCallback.getRequest() : null;
+                final InlineSuggestionSession.ImeResponse imeResponse =
+                        mInlineSuggestionSession.waitAndGetImeResponse();
 
                 request = new FillRequest(requestId, contexts, mClientState, flags,
-                        suggestionsRequest);
+                        imeResponse != null ? imeResponse.getRequest() : null);
             }
 
+            if (mActivityToken != null) {
+                mService.sendActivityAssistDataToContentCapture(mActivityToken, resultData);
+            }
             mRemoteFillService.onFillRequest(request);
         }
 
@@ -615,75 +605,12 @@
     private void maybeRequestInlineSuggestionsRequestThenFillLocked(@NonNull ViewState viewState,
             int newState, int flags) {
         if (isInlineSuggestionsEnabled()) {
-            mInlineSuggestionsRequestCallback = new InlineSuggestionsRequestCallbackImpl();
-            mInputMethodManagerInternal.onCreateInlineSuggestionsRequest(userId,
-                    mComponentName, mCurrentViewId, mInlineSuggestionsRequestCallback);
+            mInlineSuggestionSession.createRequest(mCurrentViewId);
         }
 
         requestNewFillResponseLocked(viewState, newState, flags);
     }
 
-    private static final class InlineSuggestionsRequestCallbackImpl
-            extends IInlineSuggestionsRequestCallback.Stub {
-        private static final int INLINE_REQUEST_TIMEOUT_MS = 1000;
-
-        private final CompletableFuture<InlineSuggestionsRequest> mRequest;
-        private final CompletableFuture<IInlineSuggestionsResponseCallback> mResponseCallback;
-
-        private InlineSuggestionsRequestCallbackImpl() {
-            mRequest = new CompletableFuture<>();
-            mResponseCallback = new CompletableFuture<>();
-        }
-
-        @Override
-        public void onInlineSuggestionsUnsupported() throws RemoteException {
-            if (sDebug) {
-                Log.d(TAG, "inline suggestions request unsupported, "
-                        + "falling back to regular autofill");
-            }
-            mRequest.cancel(true);
-            mResponseCallback.cancel(true);
-        }
-
-        @Override
-        public void onInlineSuggestionsRequest(InlineSuggestionsRequest request,
-                IInlineSuggestionsResponseCallback callback) throws RemoteException {
-            if (sDebug) {
-                Log.d(TAG, "onInlineSuggestionsRequest() received: " + request);
-            }
-            mRequest.complete(request);
-            mResponseCallback.complete(callback);
-        }
-
-        @Nullable
-        private InlineSuggestionsRequest getRequest() {
-            try {
-                return mRequest.get(INLINE_REQUEST_TIMEOUT_MS, TimeUnit.MILLISECONDS);
-            } catch (TimeoutException e) {
-                Log.w(TAG, "Exception getting inline suggestions request in time: " + e);
-            } catch (CancellationException e) {
-                Log.w(TAG, "Inline suggestions request cancelled");
-            } catch (InterruptedException | ExecutionException e) {
-                throw new RuntimeException(e);
-            }
-            return null;
-        }
-
-        @Nullable
-        private IInlineSuggestionsResponseCallback getResponseCallback() {
-            try {
-                return mResponseCallback.get(INLINE_REQUEST_TIMEOUT_MS, TimeUnit.MILLISECONDS);
-            } catch (TimeoutException e) {
-                Log.w(TAG, "Exception getting inline suggestions callback in time: " + e);
-            } catch (CancellationException e) {
-                Log.w(TAG, "Inline suggestions callback cancelled");
-            } catch (InterruptedException | ExecutionException e) {
-                throw new RuntimeException(e);
-            }
-            return null;
-        }
-    }
-
     /**
      * Reads a new structure and then request a new fill response from the fill service.
      */
@@ -763,7 +690,6 @@
         mFlags = flags;
         this.taskId = taskId;
         this.uid = uid;
-        this.userId = userId;
         mStartTime = SystemClock.elapsedRealtime();
         mService = service;
         mLock = lock;
@@ -782,7 +708,8 @@
         mForAugmentedAutofillOnly = forAugmentedAutofillOnly;
         setClientLocked(client);
 
-        mInputMethodManagerInternal = inputMethodManagerInternal;
+        mInlineSuggestionSession = new InlineSuggestionSession(inputMethodManagerInternal, userId,
+                componentName);
 
         mMetricsLogger.write(newLogMaker(MetricsEvent.AUTOFILL_SESSION_STARTED)
                 .addTaggedData(MetricsEvent.FIELD_AUTOFILL_FLAGS, flags));
@@ -1091,7 +1018,8 @@
 
     // FillServiceCallbacks
     @Override
-    public void authenticate(int requestId, int datasetIndex, IntentSender intent, Bundle extras) {
+    public void authenticate(int requestId, int datasetIndex, IntentSender intent, Bundle extras,
+            boolean authenticateInline) {
         if (sDebug) {
             Slog.d(TAG, "authenticate(): requestId=" + requestId + "; datasetIdx=" + datasetIndex
                     + "; intentSender=" + intent);
@@ -1115,7 +1043,7 @@
         final int authenticationId = AutofillManager.makeAuthenticationId(requestId, datasetIndex);
         mHandler.sendMessage(obtainMessage(
                 Session::startAuthentication,
-                this, authenticationId, intent, fillInIntent));
+                this, authenticationId, intent, fillInIntent, authenticateInline));
     }
 
     // VultureCallback
@@ -2509,65 +2437,9 @@
                     forceRemoveSelfLocked(AutofillManager.STATE_UNKNOWN_COMPAT_MODE);
                     return;
                 }
-
                 if (!Objects.equals(value, viewState.getCurrentValue())) {
-                    if ((value == null || value.isEmpty())
-                            && viewState.getCurrentValue() != null
-                            && viewState.getCurrentValue().isText()
-                            && viewState.getCurrentValue().getTextValue() != null
-                            && getSaveInfoLocked() != null) {
-                        final int length = viewState.getCurrentValue().getTextValue().length();
-                        if (sDebug) {
-                            Slog.d(TAG, "updateLocked(" + id + "): resetting value that was "
-                                    + length + " chars long");
-                        }
-                        final LogMaker log = newLogMaker(MetricsEvent.AUTOFILL_VALUE_RESET)
-                                .addTaggedData(MetricsEvent.FIELD_AUTOFILL_PREVIOUS_LENGTH, length);
-                        mMetricsLogger.write(log);
-                    }
-
-                    // Always update the internal state.
-                    viewState.setCurrentValue(value);
-
-                    // Must check if this update was caused by autofilling the view, in which
-                    // case we just update the value, but not the UI.
-                    final AutofillValue filledValue = viewState.getAutofilledValue();
-                    if (filledValue != null) {
-                        if (filledValue.equals(value)) {
-                            if (sVerbose) {
-                                Slog.v(TAG, "ignoring autofilled change on id " + id);
-                            }
-                            viewState.resetState(ViewState.STATE_CHANGED);
-                            return;
-                        }
-                        else {
-                            if ((viewState.id.equals(this.mCurrentViewId)) &&
-                                    (viewState.getState() & ViewState.STATE_AUTOFILLED) != 0) {
-                                // Remove autofilled state once field is changed after autofilling.
-                                if (sVerbose) {
-                                    Slog.v(TAG, "field changed after autofill on id " + id);
-                                }
-                                viewState.resetState(ViewState.STATE_AUTOFILLED);
-                                final ViewState currentView = mViewStates.get(mCurrentViewId);
-                                currentView.maybeCallOnFillReady(flags);
-                            }
-                        }
-                    }
-
-                    // Update the internal state...
-                    viewState.setState(ViewState.STATE_CHANGED);
-
-                    //..and the UI
-                    final String filterText;
-                    if (value == null || !value.isText()) {
-                        filterText = null;
-                    } else {
-                        final CharSequence text = value.getTextValue();
-                        // Text should never be null, but it doesn't hurt to check to avoid a
-                        // system crash...
-                        filterText = (text == null) ? null : text.toString();
-                    }
-                    getUiForShowing().filterFillUi(filterText, this);
+                    logIfViewClearedLocked(id, value, viewState);
+                    updateViewStateAndUiOnValueChangedLocked(id, value, viewState, flags);
                 }
                 break;
             case ACTION_VIEW_ENTERED:
@@ -2646,6 +2518,68 @@
         return ArrayUtils.contains(response.getIgnoredIds(), id);
     }
 
+    @GuardedBy("mLock")
+    private void logIfViewClearedLocked(AutofillId id, AutofillValue value, ViewState viewState) {
+        if ((value == null || value.isEmpty())
+                && viewState.getCurrentValue() != null
+                && viewState.getCurrentValue().isText()
+                && viewState.getCurrentValue().getTextValue() != null
+                && getSaveInfoLocked() != null) {
+            final int length = viewState.getCurrentValue().getTextValue().length();
+            if (sDebug) {
+                Slog.d(TAG, "updateLocked(" + id + "): resetting value that was "
+                        + length + " chars long");
+            }
+            final LogMaker log = newLogMaker(MetricsEvent.AUTOFILL_VALUE_RESET)
+                    .addTaggedData(MetricsEvent.FIELD_AUTOFILL_PREVIOUS_LENGTH, length);
+            mMetricsLogger.write(log);
+        }
+    }
+
+    @GuardedBy("mLock")
+    private void updateViewStateAndUiOnValueChangedLocked(AutofillId id, AutofillValue value,
+            ViewState viewState, int flags) {
+        viewState.setCurrentValue(value);
+
+        final String filterText;
+        if (value == null || !value.isText()) {
+            filterText = null;
+        } else {
+            final CharSequence text = value.getTextValue();
+            // Text should never be null, but it doesn't hurt to check to avoid a
+            // system crash...
+            filterText = (text == null) ? null : text.toString();
+        }
+
+        final AutofillValue filledValue = viewState.getAutofilledValue();
+        if (filledValue != null) {
+            if (filledValue.equals(value)) {
+                // When the update is caused by autofilling the view, just update the
+                // value, not the UI.
+                if (sVerbose) {
+                    Slog.v(TAG, "ignoring autofilled change on id " + id);
+                }
+                viewState.resetState(ViewState.STATE_CHANGED);
+                return;
+            } else if ((viewState.id.equals(this.mCurrentViewId))
+                    && (viewState.getState() & ViewState.STATE_AUTOFILLED) != 0) {
+                // Remove autofilled state once field is changed after autofilling.
+                if (sVerbose) {
+                    Slog.v(TAG, "field changed after autofill on id " + id);
+                }
+                viewState.resetState(ViewState.STATE_AUTOFILLED);
+                final ViewState currentView = mViewStates.get(mCurrentViewId);
+                currentView.maybeCallOnFillReady(flags);
+            }
+        } else if (viewState.id.equals(this.mCurrentViewId)
+                && (viewState.getState() & ViewState.STATE_INLINE_SHOWN) != 0) {
+            requestShowInlineSuggestionsLocked(viewState.getResponse(), filterText);
+        }
+
+        viewState.setState(ViewState.STATE_CHANGED);
+        getUiForShowing().filterFillUi(filterText, this);
+    }
+
     @Override
     public void onFillReady(@NonNull FillResponse response, @NonNull AutofillId filledId,
             @Nullable AutofillValue value) {
@@ -2674,11 +2608,15 @@
         }
 
         if (response.supportsInlineSuggestions()) {
-            if (requestShowInlineSuggestions(response)) {
-                //TODO(b/137800469): Fix it to log showed only when IME asks for inflation, rather
-                // than here where framework sends back the response.
-                mService.logDatasetShown(id, mClientState);
-                return;
+            synchronized (mLock) {
+                if (requestShowInlineSuggestionsLocked(response, filterText)) {
+                    final ViewState currentView = mViewStates.get(mCurrentViewId);
+                    currentView.setState(ViewState.STATE_INLINE_SHOWN);
+                    //TODO(b/137800469): Fix it to log showed only when IME asks for inflation,
+                    // rather than here where framework sends back the response.
+                    mService.logDatasetShown(id, mClientState);
+                    return;
+                }
             }
         }
 
@@ -2716,30 +2654,28 @@
     /**
      * Returns whether we made a request to show inline suggestions.
      */
-    private boolean requestShowInlineSuggestions(FillResponse response) {
-        final IInlineSuggestionsResponseCallback inlineContentCallback =
-                mInlineSuggestionsRequestCallback != null
-                        ? mInlineSuggestionsRequestCallback.getResponseCallback() : null;
-        if (inlineContentCallback == null) {
+    private boolean requestShowInlineSuggestionsLocked(@NonNull FillResponse response,
+            @Nullable String filterText) {
+        final List<Dataset> datasets = response.getDatasets();
+
+        final InlineSuggestionSession.ImeResponse imeResponse =
+                mInlineSuggestionSession.waitAndGetImeResponse();
+        if (imeResponse == null) {
             Log.w(TAG, "Session input method callback is not set yet");
             return false;
         }
 
-        final List<Dataset> datasets = response.getDatasets();
-        if (datasets == null) {
-            Log.w(TAG, "response returned null datasets");
-            return false;
-        }
-
+        final InlineSuggestionsRequest request = imeResponse.getRequest();
         InlineSuggestionsResponse inlineSuggestionsResponse =
-                InlineSuggestionFactory.createInlineSuggestionsResponse(response.getRequestId(),
-                        datasets.toArray(new Dataset[]{}), mCurrentViewId, mContext, this, () -> {
-                    synchronized (mLock) {
-                        requestHideFillUi(mCurrentViewId);
-                    }
-                });
-        try  {
-            inlineContentCallback.onInlineSuggestionsResponse(inlineSuggestionsResponse);
+                InlineSuggestionFactory.createInlineSuggestionsResponse(request,
+                        response, filterText, response.getInlineActions(), mCurrentViewId, mContext,
+                        this, () -> {
+                            synchronized (mLock) {
+                                requestHideFillUi(mCurrentViewId);
+                            }
+                        }, mService.getRemoteInlineSuggestionRenderServiceLocked());
+        try {
+            imeResponse.getCallback().onInlineSuggestionsResponse(inlineSuggestionsResponse);
         } catch (RemoteException e) {
             Log.w(TAG, "onFillReady() remote error calling onInlineSuggestionsResponse()");
             return false;
@@ -3021,18 +2957,27 @@
 
         final AutofillId focusedId = AutofillId.withoutSession(mCurrentViewId);
 
+        // There are 3 cases when augmented autofill should ask IME for a new request:
+        // 1. standard autofill provider is None
+        // 2. standard autofill provider doesn't support inline (and returns null response)
+        // 3. standard autofill provider supports inline, but isn't called because the field
+        // doesn't want autofill
+        if (mForAugmentedAutofillOnly || !isInlineSuggestionsEnabled()) {
+            if (sDebug) Slog.d(TAG, "Create inline request for augmented autofill");
+            mInlineSuggestionSession.createRequest(mCurrentViewId);
+        }
+        InlineSuggestionSession.ImeResponse imeResponse =
+                mInlineSuggestionSession.waitAndGetImeResponse();
         final InlineSuggestionsRequest inlineSuggestionsRequest =
-                mInlineSuggestionsRequestCallback != null
-                        ? mInlineSuggestionsRequestCallback.getRequest() : null;
+                imeResponse != null ? imeResponse.getRequest() : null;
         final IInlineSuggestionsResponseCallback inlineSuggestionsResponseCallback =
-                mInlineSuggestionsRequestCallback != null
-                        ? mInlineSuggestionsRequestCallback.getResponseCallback() : null;
+                imeResponse != null ? imeResponse.getCallback() : null;
         remoteService.onRequestAutofillLocked(id, mClient, taskId, mComponentName, focusedId,
                 currentValue, inlineSuggestionsRequest, inlineSuggestionsResponseCallback, () -> {
                     synchronized (mLock) {
                         cancelAugmentedAutofillLocked();
                     }
-                });
+                }, mService.getRemoteInlineSuggestionRenderServiceLocked());
 
         if (mAugmentedAutofillDestroyer == null) {
             mAugmentedAutofillDestroyer = () -> remoteService.onDestroyAutofillWindowsRequest();
@@ -3211,7 +3156,8 @@
             }
             final int authenticationId = AutofillManager.makeAuthenticationId(requestId,
                     datasetIndex);
-            startAuthentication(authenticationId, dataset.getAuthentication(), fillInIntent);
+            startAuthentication(authenticationId, dataset.getAuthentication(), fillInIntent,
+                    /* authenticateInline= */false);
 
         }
     }
@@ -3235,10 +3181,11 @@
     }
 
     private void startAuthentication(int authenticationId, IntentSender intent,
-            Intent fillInIntent) {
+            Intent fillInIntent, boolean authenticateInline) {
         try {
             synchronized (mLock) {
-                mClient.authenticate(id, authenticationId, intent, fillInIntent);
+                mClient.authenticate(id, authenticationId, intent, fillInIntent,
+                        authenticateInline);
             }
         } catch (RemoteException e) {
             Slog.e(TAG, "Error launching auth intent", e);
diff --git a/services/autofill/java/com/android/server/autofill/ViewState.java b/services/autofill/java/com/android/server/autofill/ViewState.java
index 84886f8..f7c24f0 100644
--- a/services/autofill/java/com/android/server/autofill/ViewState.java
+++ b/services/autofill/java/com/android/server/autofill/ViewState.java
@@ -74,6 +74,8 @@
     public static final int STATE_AUTOFILLED_ONCE = 0x800;
     /** View triggered the latest augmented autofill request. */
     public static final int STATE_TRIGGERED_AUGMENTED_AUTOFILL = 0x1000;
+    /** Inline suggestions were shown for this View. */
+    public static final int STATE_INLINE_SHOWN = 0x2000;
 
     public final AutofillId id;
 
diff --git a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
index 26bb7c3..71c3c16 100644
--- a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
+++ b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
@@ -79,7 +79,7 @@
 
     public interface AutoFillUiCallback {
         void authenticate(int requestId, int datasetIndex, @NonNull IntentSender intent,
-                @Nullable Bundle extras);
+                @Nullable Bundle extras, boolean authenticateInline);
         void fill(int requestId, int datasetIndex, @NonNull Dataset dataset);
         void save();
         void cancelSave();
@@ -217,7 +217,8 @@
                     if (mCallback != null) {
                         mCallback.authenticate(response.getRequestId(),
                                 AutofillManager.AUTHENTICATION_ID_DATASET_ID_UNDEFINED,
-                                response.getAuthentication(), response.getClientState());
+                                response.getAuthentication(), response.getClientState(),
+                                /* authenticateInline= */ false);
                     }
                 }
 
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 5796142..5dc43ef 100644
--- a/services/autofill/java/com/android/server/autofill/ui/FillUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/FillUi.java
@@ -313,6 +313,8 @@
                         Slog.e(TAG, "Error inflating remote views", e);
                         continue;
                     }
+                    // TODO: Extract the shared filtering logic here and in FillUi to a common
+                    //  method.
                     final DatasetFieldFilter filter = dataset.getFilter(index);
                     Pattern filterPattern = null;
                     String valueText = null;
@@ -602,6 +604,7 @@
          * Returns whether this item matches the value input by the user so it can be included
          * in the filtered datasets.
          */
+        // TODO: Extract the shared filtering logic here and in FillUi to a common method.
         public boolean matches(CharSequence filterText) {
             if (TextUtils.isEmpty(filterText)) {
                 // Always show item when the user input is empty
diff --git a/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionFactory.java b/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionFactory.java
index 38a5b5b..a8886fc 100644
--- a/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionFactory.java
+++ b/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionFactory.java
@@ -17,27 +17,41 @@
 package com.android.server.autofill.ui;
 
 import static com.android.server.autofill.Helper.sDebug;
+import static com.android.server.autofill.Helper.sVerbose;
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
+import android.os.IBinder;
 import android.os.RemoteException;
 import android.service.autofill.Dataset;
+import android.service.autofill.FillResponse;
+import android.service.autofill.IInlineSuggestionUiCallback;
 import android.service.autofill.InlinePresentation;
+import android.text.TextUtils;
 import android.util.Slog;
 import android.view.SurfaceControl;
-import android.view.View;
 import android.view.autofill.AutofillId;
+import android.view.autofill.AutofillManager;
+import android.view.autofill.AutofillValue;
+import android.view.inline.InlinePresentationSpec;
 import android.view.inputmethod.InlineSuggestion;
 import android.view.inputmethod.InlineSuggestionInfo;
+import android.view.inputmethod.InlineSuggestionsRequest;
 import android.view.inputmethod.InlineSuggestionsResponse;
+import android.widget.Toast;
 
-import com.android.internal.util.function.QuadFunction;
 import com.android.internal.view.inline.IInlineContentCallback;
 import com.android.internal.view.inline.IInlineContentProvider;
+import com.android.server.LocalServices;
 import com.android.server.UiThread;
+import com.android.server.autofill.RemoteInlineSuggestionRenderService;
+import com.android.server.wm.WindowManagerInternal;
 
 import java.util.ArrayList;
+import java.util.List;
+import java.util.function.BiConsumer;
+import java.util.regex.Pattern;
 
 public final class InlineSuggestionFactory {
     private static final String TAG = "InlineSuggestionFactory";
@@ -53,50 +67,85 @@
     }
 
     /**
-     * Creates an {@link InlineSuggestionsResponse} with the {@code datasets} provided by
-     * augmented autofill service.
+     * Creates an {@link InlineSuggestionsResponse} with the {@code datasets} provided by the
+     * autofill service, potentially filtering the datasets.
+     */
+    public static InlineSuggestionsResponse createInlineSuggestionsResponse(
+            @NonNull InlineSuggestionsRequest request, @NonNull FillResponse response,
+            @Nullable String filterText,
+            @Nullable List<InlinePresentation> inlineActions,
+            @NonNull AutofillId autofillId,
+            @NonNull Context context,
+            @NonNull AutoFillUI.AutoFillUiCallback client,
+            @NonNull Runnable onErrorCallback,
+            @Nullable RemoteInlineSuggestionRenderService remoteRenderService) {
+        if (sDebug) Slog.d(TAG, "createInlineSuggestionsResponse called");
+        final BiConsumer<Dataset, Integer> onClickFactory;
+        if (response.getAuthentication() != null) {
+            onClickFactory = (dataset, datasetIndex) -> client.authenticate(response.getRequestId(),
+                    datasetIndex, response.getAuthentication(), response.getClientState(),
+                    /* authenticateInline= */ true);
+        } else {
+            onClickFactory = (dataset, datasetIndex) ->
+                    client.fill(response.getRequestId(), datasetIndex, dataset);
+        }
+
+        final List<Dataset> datasetList = response.getDatasets();
+        final Dataset[] datasets = datasetList == null
+                ? null
+                : datasetList.toArray(new Dataset[]{});
+
+        return createInlineSuggestionsResponseInternal(/* isAugmented= */ false, request, response,
+                datasets, filterText, inlineActions, autofillId, context, onErrorCallback,
+                onClickFactory, remoteRenderService);
+    }
+
+    /**
+     * Creates an {@link InlineSuggestionsResponse} with the {@code datasets} provided by augmented
+     * autofill service.
      */
     public static InlineSuggestionsResponse createAugmentedInlineSuggestionsResponse(
+            @NonNull InlineSuggestionsRequest request,
             @NonNull Dataset[] datasets,
             @NonNull AutofillId autofillId,
             @NonNull Context context,
             @NonNull InlineSuggestionUiCallback inlineSuggestionUiCallback,
-            @NonNull Runnable onErrorCallback) {
-        return createInlineSuggestionsResponseInternal(datasets, autofillId,
-                context, onErrorCallback, (dataset, inlinePresentation, inlineSuggestionUi,
-                        filedIndex) -> createAugmentedInlineSuggestion(dataset,
-                    inlinePresentation, inlineSuggestionUi, inlineSuggestionUiCallback));
-    }
-
-    /**
-     * Creates an {@link InlineSuggestionsResponse} with the {@code datasets} provided by the
-     * autofill service.
-     */
-    public static InlineSuggestionsResponse createInlineSuggestionsResponse(int requestId,
-            @NonNull Dataset[] datasets,
-            @NonNull AutofillId autofillId,
-            @NonNull Context context,
-            @NonNull AutoFillUI.AutoFillUiCallback client,
-            @NonNull Runnable onErrorCallback) {
-        return createInlineSuggestionsResponseInternal(datasets, autofillId,
-                context, onErrorCallback, (dataset, inlinePresentation, inlineSuggestionUi,
-                        filedIndex) -> createInlineSuggestion(requestId, dataset, filedIndex,
-                        inlinePresentation, inlineSuggestionUi, client));
+            @NonNull Runnable onErrorCallback,
+            @Nullable RemoteInlineSuggestionRenderService remoteRenderService) {
+        if (sDebug) Slog.d(TAG, "createAugmentedInlineSuggestionsResponse called");
+        return createInlineSuggestionsResponseInternal(/* isAugmented= */ true, request,
+                /* fillResponse= */ null, datasets, /* filterText= */ null,
+                /* inlineActions= */ null, autofillId, context, onErrorCallback,
+                (dataset, fieldIndex) ->
+                        inlineSuggestionUiCallback.autofill(dataset), remoteRenderService);
     }
 
     private static InlineSuggestionsResponse createInlineSuggestionsResponseInternal(
-            @NonNull Dataset[] datasets,
-            @NonNull AutofillId autofillId,
-            @NonNull Context context,
-            @NonNull Runnable onErrorCallback,
-            @NonNull QuadFunction<Dataset, InlinePresentation, InlineSuggestionUi,
-                    Integer, InlineSuggestion> suggestionFactory) {
-        if (sDebug) Slog.d(TAG, "createAugmentedInlineSuggestionsResponse called");
+            boolean isAugmented, @NonNull InlineSuggestionsRequest request,
+            @Nullable FillResponse response, @Nullable Dataset[] datasets,
+            @Nullable String filterText,
+            @Nullable List<InlinePresentation> inlineActions, @NonNull AutofillId autofillId,
+            @NonNull Context context, @NonNull Runnable onErrorCallback,
+            @NonNull BiConsumer<Dataset, Integer> onClickFactory,
+            @Nullable RemoteInlineSuggestionRenderService remoteRenderService) {
 
         final ArrayList<InlineSuggestion> inlineSuggestions = new ArrayList<>();
-        final InlineSuggestionUi inlineSuggestionUi = new InlineSuggestionUi(context,
-                onErrorCallback);
-        for (Dataset dataset : datasets) {
+        if (response.getAuthentication() != null) {
+            InlineSuggestion inlineAuthSuggestion = createInlineAuthSuggestion(response,
+                    remoteRenderService, onClickFactory, onErrorCallback,
+                    request.getHostInputToken());
+            inlineSuggestions.add(inlineAuthSuggestion);
+
+            return new InlineSuggestionsResponse(inlineSuggestions);
+        }
+
+        if (datasets == null) {
+            Slog.w(TAG, "Datasets should not be null here");
+            return null;
+        }
+
+        for (int datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {
+            final Dataset dataset = datasets[datasetIndex];
             final int fieldIndex = dataset.getFieldIds().indexOf(autofillId);
             if (fieldIndex < 0) {
                 Slog.w(TAG, "AutofillId=" + autofillId + " not found in dataset");
@@ -108,72 +157,194 @@
                 Slog.w(TAG, "InlinePresentation not found in dataset");
                 return null;
             }
-            InlineSuggestion inlineSuggestion = suggestionFactory.apply(dataset,
-                    inlinePresentation, inlineSuggestionUi, fieldIndex);
+            if (!includeDataset(dataset, fieldIndex, filterText)) {
+                continue;
+            }
+            InlineSuggestion inlineSuggestion = createInlineSuggestion(isAugmented, dataset,
+                    fieldIndex, mergedInlinePresentation(request, datasetIndex, inlinePresentation),
+                    onClickFactory, remoteRenderService, onErrorCallback,
+                    request.getHostInputToken());
+
             inlineSuggestions.add(inlineSuggestion);
         }
+        if (inlineActions != null) {
+            for (InlinePresentation inlinePresentation : inlineActions) {
+                final InlineSuggestion inlineAction = createInlineAction(isAugmented, context,
+                        mergedInlinePresentation(request, 0, inlinePresentation),
+                        remoteRenderService, onErrorCallback, request.getHostInputToken());
+                inlineSuggestions.add(inlineAction);
+            }
+        }
         return new InlineSuggestionsResponse(inlineSuggestions);
     }
 
-    private static InlineSuggestion createAugmentedInlineSuggestion(@NonNull Dataset dataset,
+    // TODO: Extract the shared filtering logic here and in FillUi to a common method.
+    private static boolean includeDataset(Dataset dataset, int fieldIndex,
+            @Nullable String filterText) {
+        // Show everything when the user input is empty.
+        if (TextUtils.isEmpty(filterText)) {
+            return true;
+        }
+
+        final String constraintLowerCase = filterText.toString().toLowerCase();
+
+        // Use the filter provided by the service, if available.
+        final Dataset.DatasetFieldFilter filter = dataset.getFilter(fieldIndex);
+        if (filter != null) {
+            Pattern filterPattern = filter.pattern;
+            if (filterPattern == null) {
+                if (sVerbose) {
+                    Slog.v(TAG, "Explicitly disabling filter for dataset id" + dataset.getId());
+                }
+                return true;
+            }
+            return filterPattern.matcher(constraintLowerCase).matches();
+        }
+
+        final AutofillValue value = dataset.getFieldValues().get(fieldIndex);
+        if (value == null || !value.isText()) {
+            return dataset.getAuthentication() == null;
+        }
+        final String valueText = value.getTextValue().toString().toLowerCase();
+        return valueText.toLowerCase().startsWith(constraintLowerCase);
+    }
+
+
+    private static InlineSuggestion createInlineAction(boolean isAugmented,
+            @NonNull Context context,
             @NonNull InlinePresentation inlinePresentation,
-            @NonNull InlineSuggestionUi inlineSuggestionUi,
-            @NonNull InlineSuggestionUiCallback inlineSuggestionUiCallback) {
+            @Nullable RemoteInlineSuggestionRenderService remoteRenderService,
+            @NonNull Runnable onErrorCallback, @Nullable IBinder hostInputToken) {
         // TODO(b/146453195): fill in the autofill hint properly.
         final InlineSuggestionInfo inlineSuggestionInfo = new InlineSuggestionInfo(
                 inlinePresentation.getInlinePresentationSpec(),
-                InlineSuggestionInfo.SOURCE_PLATFORM, new String[]{""},
+                isAugmented ? InlineSuggestionInfo.SOURCE_PLATFORM
+                        : InlineSuggestionInfo.SOURCE_AUTOFILL, new String[]{""},
+                InlineSuggestionInfo.TYPE_ACTION);
+        final Runnable onClickAction = () -> {
+            Toast.makeText(context, "icon clicked", Toast.LENGTH_SHORT).show();
+        };
+        return new InlineSuggestion(inlineSuggestionInfo,
+                createInlineContentProvider(inlinePresentation, onClickAction, onErrorCallback,
+                        remoteRenderService, hostInputToken));
+    }
+
+    private static InlineSuggestion createInlineSuggestion(boolean isAugmented,
+            @NonNull Dataset dataset, int datasetIndex,
+            @NonNull InlinePresentation inlinePresentation,
+            @NonNull BiConsumer<Dataset, Integer> onClickFactory,
+            @NonNull RemoteInlineSuggestionRenderService remoteRenderService,
+            @NonNull Runnable onErrorCallback, @Nullable IBinder hostInputToken) {
+        // TODO(b/146453195): fill in the autofill hint properly.
+        final InlineSuggestionInfo inlineSuggestionInfo = new InlineSuggestionInfo(
+                inlinePresentation.getInlinePresentationSpec(),
+                isAugmented ? InlineSuggestionInfo.SOURCE_PLATFORM
+                        : InlineSuggestionInfo.SOURCE_AUTOFILL, new String[]{""},
                 InlineSuggestionInfo.TYPE_SUGGESTION);
-        final View.OnClickListener onClickListener = v ->
-            inlineSuggestionUiCallback.autofill(dataset);
+
         final InlineSuggestion inlineSuggestion = new InlineSuggestion(inlineSuggestionInfo,
-                createInlineContentProvider(inlinePresentation, inlineSuggestionUi,
-                        onClickListener));
+                createInlineContentProvider(inlinePresentation,
+                        () -> onClickFactory.accept(dataset, datasetIndex), onErrorCallback,
+                        remoteRenderService, hostInputToken));
+
         return inlineSuggestion;
     }
 
-    private static InlineSuggestion createInlineSuggestion(int requestId,
-            @NonNull Dataset dataset,
-            int fieldIndex,
-            @NonNull InlinePresentation inlinePresentation,
-            @NonNull InlineSuggestionUi inlineSuggestionUi,
-            @NonNull AutoFillUI.AutoFillUiCallback client) {
-        // TODO(b/146453195): fill in the autofill hint properly.
+    private static InlineSuggestion createInlineAuthSuggestion(@NonNull FillResponse response,
+            @NonNull RemoteInlineSuggestionRenderService remoteRenderService,
+            @NonNull BiConsumer<Dataset, Integer> onClickFactory, @NonNull Runnable onErrorCallback,
+            @Nullable IBinder hostInputToken) {
+        final InlinePresentation inlinePresentation = response.getInlinePresentation();
         final InlineSuggestionInfo inlineSuggestionInfo = new InlineSuggestionInfo(
                 inlinePresentation.getInlinePresentationSpec(),
-                InlineSuggestionInfo.SOURCE_AUTOFILL, new String[]{""},
-                InlineSuggestionInfo.TYPE_SUGGESTION);
-        final View.OnClickListener onClickListener = v -> {
-            client.fill(requestId, fieldIndex, dataset);
-        };
-        final InlineSuggestion inlineSuggestion = new InlineSuggestion(inlineSuggestionInfo,
-                createInlineContentProvider(inlinePresentation, inlineSuggestionUi,
-                        onClickListener));
-        return inlineSuggestion;
+                InlineSuggestionInfo.SOURCE_AUTOFILL, null, InlineSuggestionInfo.TYPE_SUGGESTION);
+
+        return new InlineSuggestion(inlineSuggestionInfo,
+                createInlineContentProvider(inlinePresentation,
+                        () -> onClickFactory.accept(null,
+                                AutofillManager.AUTHENTICATION_ID_DATASET_ID_UNDEFINED),
+                        onErrorCallback, remoteRenderService, hostInputToken));
+    }
+
+    /**
+     * Returns an {@link InlinePresentation} with the style spec from the request/host, and
+     * everything else from the provided {@code inlinePresentation}.
+     */
+    private static InlinePresentation mergedInlinePresentation(
+            @NonNull InlineSuggestionsRequest request,
+            int index, @NonNull InlinePresentation inlinePresentation) {
+        final List<InlinePresentationSpec> specs = request.getPresentationSpecs();
+        if (specs.isEmpty()) {
+            return inlinePresentation;
+        }
+        InlinePresentationSpec specFromHost = specs.get(Math.min(specs.size() - 1, index));
+        InlinePresentationSpec mergedInlinePresentation = new InlinePresentationSpec.Builder(
+                inlinePresentation.getInlinePresentationSpec().getMinSize(),
+                inlinePresentation.getInlinePresentationSpec().getMaxSize()).setStyle(
+                specFromHost.getStyle()).build();
+        return new InlinePresentation(inlinePresentation.getSlice(), mergedInlinePresentation,
+                inlinePresentation.isPinned());
     }
 
     private static IInlineContentProvider.Stub createInlineContentProvider(
-            @NonNull InlinePresentation inlinePresentation,
-            @NonNull InlineSuggestionUi inlineSuggestionUi,
-            @Nullable View.OnClickListener onClickListener) {
+            @NonNull InlinePresentation inlinePresentation, @Nullable Runnable onClickAction,
+            @NonNull Runnable onErrorCallback,
+            @Nullable RemoteInlineSuggestionRenderService remoteRenderService,
+            @Nullable IBinder hostInputToken) {
         return new IInlineContentProvider.Stub() {
             @Override
-            public void provideContent(int width, int height,
-                    IInlineContentCallback callback) {
+            public void provideContent(int width, int height, IInlineContentCallback callback) {
                 UiThread.getHandler().post(() -> {
-                    SurfaceControl sc = inlineSuggestionUi.inflate(inlinePresentation, width,
-                            height,
-                            onClickListener);
-                    try {
-                        callback.onContent(sc);
-                    } catch (RemoteException e) {
-                        Slog.w(TAG, "Encounter exception calling back with inline content.");
+                    final IInlineSuggestionUiCallback uiCallback = createInlineSuggestionUiCallback(
+                            callback, onClickAction, onErrorCallback);
+
+                    if (remoteRenderService == null) {
+                        Slog.e(TAG, "RemoteInlineSuggestionRenderService is null");
+                        return;
                     }
+
+                    remoteRenderService.renderSuggestion(uiCallback, inlinePresentation,
+                            width, height, hostInputToken);
                 });
             }
         };
     }
 
+    private static IInlineSuggestionUiCallback.Stub createInlineSuggestionUiCallback(
+            @NonNull IInlineContentCallback callback, @NonNull Runnable onAutofillCallback,
+            @NonNull Runnable onErrorCallback) {
+        return new IInlineSuggestionUiCallback.Stub() {
+            @Override
+            public void onAutofill() throws RemoteException {
+                onAutofillCallback.run();
+            }
+
+            @Override
+            public void onContent(SurfaceControl surface)
+                    throws RemoteException {
+                callback.onContent(surface);
+            }
+
+            @Override
+            public void onError() throws RemoteException {
+                onErrorCallback.run();
+            }
+
+            @Override
+            public void onTransferTouchFocusToImeWindow(IBinder sourceInputToken, int displayId)
+                    throws RemoteException {
+                //TODO(b/149574510): Move logic to IMMS
+                final WindowManagerInternal windowManagerInternal = LocalServices.getService(
+                        WindowManagerInternal.class);
+                if (!windowManagerInternal.transferTouchFocusToImeWindow(sourceInputToken,
+                        displayId)) {
+                    Slog.e(TAG, "Cannot transfer touch focus from suggestion to IME");
+                    onErrorCallback.run();
+                }
+            }
+        };
+    }
+
     private InlineSuggestionFactory() {
     }
-}
+}
\ No newline at end of file
diff --git a/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionRoot.java b/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionRoot.java
deleted file mode 100644
index 8d476d7..0000000
--- a/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionRoot.java
+++ /dev/null
@@ -1,82 +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.autofill.ui;
-
-import android.annotation.NonNull;
-import android.annotation.SuppressLint;
-import android.content.Context;
-import android.util.Log;
-import android.util.MathUtils;
-import android.view.MotionEvent;
-import android.view.ViewConfiguration;
-import android.widget.FrameLayout;
-
-import com.android.server.LocalServices;
-import com.android.server.wm.WindowManagerInternal;
-
-/**
- * This class is the root view for an inline suggestion. It is responsible for
- * detecting the click on the item and to also transfer input focus to the IME
- * window if we detect the user is scrolling.
- */
- // TODO(b/146453086) Move to ExtServices and add @SystemApi to transfer touch focus
-@SuppressLint("ViewConstructor")
-class InlineSuggestionRoot extends FrameLayout {
-    private static final String LOG_TAG = InlineSuggestionRoot.class.getSimpleName();
-
-    private final @NonNull Runnable mOnErrorCallback;
-    private final int mTouchSlop;
-
-    private float mDownX;
-    private float mDownY;
-
-    InlineSuggestionRoot(@NonNull Context context, @NonNull Runnable onErrorCallback) {
-        super(context);
-        mOnErrorCallback = onErrorCallback;
-        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
-    }
-
-    @Override
-    @SuppressLint("ClickableViewAccessibility")
-    public boolean onTouchEvent(@NonNull MotionEvent event) {
-        switch (event.getActionMasked()) {
-            case MotionEvent.ACTION_DOWN: {
-                mDownX = event.getX();
-                mDownY = event.getY();
-            } break;
-
-            case MotionEvent.ACTION_MOVE: {
-                final float distance = MathUtils.dist(mDownX, mDownY,
-                        event.getX(), event.getY());
-                if (distance > mTouchSlop) {
-                    transferTouchFocusToImeWindow();
-                }
-            } break;
-        }
-        return super.onTouchEvent(event);
-    }
-
-    private void transferTouchFocusToImeWindow() {
-        final WindowManagerInternal windowManagerInternal = LocalServices.getService(
-                WindowManagerInternal.class);
-        if (!windowManagerInternal.transferTouchFocusToImeWindow(getViewRootImpl().getInputToken(),
-                getContext().getDisplayId())) {
-            Log.e(LOG_TAG, "Cannot transfer touch focus from suggestion to IME");
-            mOnErrorCallback.run();
-        }
-    }
-}
diff --git a/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionUi.java b/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionUi.java
deleted file mode 100644
index bf148a6..0000000
--- a/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionUi.java
+++ /dev/null
@@ -1,257 +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.autofill.ui;
-
-import static android.app.slice.SliceItem.FORMAT_IMAGE;
-import static android.app.slice.SliceItem.FORMAT_TEXT;
-
-import android.annotation.MainThread;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.app.slice.Slice;
-import android.app.slice.SliceItem;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.graphics.PixelFormat;
-import android.graphics.drawable.Icon;
-import android.graphics.fonts.SystemFonts;
-import android.os.IBinder;
-import android.service.autofill.InlinePresentation;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.ContextThemeWrapper;
-import android.view.LayoutInflater;
-import android.view.SurfaceControl;
-import android.view.SurfaceControlViewHost;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.internal.R;
-
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * This is a temporary inline suggestion UI inflater which will be replaced by the ExtServices
- * implementation.
- *
- * TODO(b/146453086): remove this class once autofill ext service is implemented.
- *
- * @hide
- */
-public class InlineSuggestionUi {
-
-    private static final String TAG = "InlineSuggestionUi";
-
-    // The pattern to match the value can be obtained by calling {@code Resources#getResourceName
-    // (int)}. This name is a single string of the form "package:type/entry".
-    private static final Pattern RESOURCE_NAME_PATTERN = Pattern.compile("([^:]+):([^/]+)/(\\S+)");
-
-    private final @NonNull Context mContext;
-    private final @NonNull Runnable mOnErrorCallback;
-
-    InlineSuggestionUi(@NonNull Context context, @NonNull Runnable onErrorCallback) {
-        this.mContext = context;
-        mOnErrorCallback = onErrorCallback;
-    }
-
-    /**
-     * Returns a {@link SurfaceControl} with the inflated content embedded in it.
-     */
-    @MainThread
-    @Nullable
-    public SurfaceControl inflate(@NonNull InlinePresentation inlinePresentation, int width,
-            int height, @Nullable View.OnClickListener onClickListener) {
-        Log.d(TAG, "Inflating the inline suggestion UI");
-
-        //TODO(b/137800469): Pass in inputToken from IME.
-        final SurfaceControlViewHost wvr = new SurfaceControlViewHost(mContext,
-                mContext.getDisplay(), (IBinder) null);
-        final SurfaceControl sc = wvr.getSurfacePackage().getSurfaceControl();
-
-        Context contextThemeWrapper = getContextThemeWrapper(mContext,
-                inlinePresentation.getInlinePresentationSpec().getStyle());
-        if (contextThemeWrapper == null) {
-            contextThemeWrapper = getDefaultContextThemeWrapper(mContext);
-        }
-        final View suggestionView = renderSlice(inlinePresentation.getSlice(),
-                contextThemeWrapper);
-
-        final InlineSuggestionRoot suggestionRoot = new InlineSuggestionRoot(
-                mContext, mOnErrorCallback);
-        suggestionRoot.addView(suggestionView);
-        suggestionRoot.setOnClickListener(onClickListener);
-
-        WindowManager.LayoutParams lp =
-                new WindowManager.LayoutParams(width, height,
-                        WindowManager.LayoutParams.TYPE_APPLICATION, 0,
-                        PixelFormat.TRANSPARENT);
-        wvr.addView(suggestionRoot, lp);
-        return sc;
-    }
-
-    private static View renderSlice(Slice slice, Context context) {
-        final LayoutInflater inflater = LayoutInflater.from(context);
-        final ViewGroup suggestionView =
-                (ViewGroup) inflater.inflate(R.layout.autofill_inline_suggestion, null);
-
-        final ImageView startIconView =
-                suggestionView.findViewById(R.id.autofill_inline_suggestion_start_icon);
-        final TextView titleView =
-                suggestionView.findViewById(R.id.autofill_inline_suggestion_title);
-        final TextView subtitleView =
-                suggestionView.findViewById(R.id.autofill_inline_suggestion_subtitle);
-        final ImageView endIconView =
-                suggestionView.findViewById(R.id.autofill_inline_suggestion_end_icon);
-
-        boolean hasStartIcon = false;
-        boolean hasEndIcon = false;
-        boolean hasSubtitle = false;
-        final List<SliceItem> sliceItems = slice.getItems();
-        for (int i = 0; i < sliceItems.size(); i++) {
-            final SliceItem sliceItem = sliceItems.get(i);
-            if (sliceItem.getFormat().equals(FORMAT_IMAGE)) {
-                final Icon sliceIcon = sliceItem.getIcon();
-                if (i == 0) { // start icon
-                    startIconView.setImageIcon(sliceIcon);
-                    hasStartIcon = true;
-                } else { // end icon
-                    endIconView.setImageIcon(sliceIcon);
-                    hasEndIcon = true;
-                }
-            } else if (sliceItem.getFormat().equals(FORMAT_TEXT)) {
-                final List<String> sliceHints = sliceItem.getHints();
-                final String sliceText = sliceItem.getText().toString();
-                if (sliceHints.contains("inline_title")) { // title
-                    titleView.setText(sliceText);
-                } else { // subtitle
-                    subtitleView.setText(sliceText);
-                    hasSubtitle = true;
-                }
-            }
-        }
-        if (!hasStartIcon) {
-            startIconView.setVisibility(View.GONE);
-        }
-        if (!hasEndIcon) {
-            endIconView.setVisibility(View.GONE);
-        }
-        if (!hasSubtitle) {
-            subtitleView.setVisibility(View.GONE);
-        }
-
-        return suggestionView;
-    }
-
-    private Context getDefaultContextThemeWrapper(@NonNull Context context) {
-        Resources.Theme theme = context.getResources().newTheme();
-        theme.applyStyle(android.R.style.Theme_AutofillInlineSuggestion, true);
-        return new ContextThemeWrapper(context, theme);
-    }
-
-    /**
-     * Returns a context wrapping the theme in the provided {@code style}, or null if {@code
-     * style} doesn't pass validation.
-     */
-    @Nullable
-    private static Context getContextThemeWrapper(@NonNull Context context,
-            @Nullable String style) {
-        if (style == null) {
-            return null;
-        }
-        Matcher matcher = RESOURCE_NAME_PATTERN.matcher(style);
-        if (!matcher.matches()) {
-            Log.d(TAG, "Can not parse the style=" + style);
-            return null;
-        }
-        String packageName = matcher.group(1);
-        String type = matcher.group(2);
-        String entry = matcher.group(3);
-        if (TextUtils.isEmpty(packageName) || TextUtils.isEmpty(type) || TextUtils.isEmpty(entry)) {
-            Log.d(TAG, "Can not proceed with empty field values in the style=" + style);
-            return null;
-        }
-        Resources resources = null;
-        try {
-            resources = context.getPackageManager().getResourcesForApplication(
-                    packageName);
-        } catch (PackageManager.NameNotFoundException e) {
-            return null;
-        }
-        int resId = resources.getIdentifier(entry, type, packageName);
-        if (resId == Resources.ID_NULL) {
-            return null;
-        }
-        Resources.Theme theme = resources.newTheme();
-        theme.applyStyle(resId, true);
-        if (!validateBaseTheme(theme, resId)) {
-            Log.d(TAG, "Provided theme is not a child of Theme.InlineSuggestion, ignoring it.");
-            return null;
-        }
-        if (!validateFontFamilyForTextViewStyles(theme)) {
-            Log.d(TAG,
-                    "Provided theme specifies a font family that is not system font, ignoring it.");
-            return null;
-        }
-        return new ContextThemeWrapper(context, theme);
-    }
-
-    private static boolean validateFontFamilyForTextViewStyles(Resources.Theme theme) {
-        return validateFontFamily(theme, android.R.attr.autofillInlineSuggestionTitle)
-                && validateFontFamily(theme, android.R.attr.autofillInlineSuggestionSubtitle);
-    }
-
-    private static boolean validateFontFamily(Resources.Theme theme, int styleAttr) {
-        TypedArray ta = null;
-        try {
-            ta = theme.obtainStyledAttributes(null, new int[]{android.R.attr.fontFamily},
-                    styleAttr,
-                    0);
-            if (ta.getIndexCount() == 0) {
-                return true;
-            }
-            String fontFamily = ta.getString(ta.getIndex(0));
-            return SystemFonts.getRawSystemFallbackMap().containsKey(fontFamily);
-        } finally {
-            if (ta != null) {
-                ta.recycle();
-            }
-        }
-    }
-
-    private static boolean validateBaseTheme(Resources.Theme theme, int styleAttr) {
-        TypedArray ta = null;
-        try {
-            ta = theme.obtainStyledAttributes(null,
-                    new int[]{android.R.attr.isAutofillInlineSuggestionTheme}, styleAttr, 0);
-            if (ta.getIndexCount() == 0) {
-                return false;
-            }
-            return ta.getBoolean(ta.getIndex(0), false);
-        } finally {
-            if (ta != null) {
-                ta.recycle();
-            }
-        }
-    }
-}
diff --git a/services/backup/java/com/android/server/backup/UserBackupManagerService.java b/services/backup/java/com/android/server/backup/UserBackupManagerService.java
index e3d2dcc..6247a63 100644
--- a/services/backup/java/com/android/server/backup/UserBackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/UserBackupManagerService.java
@@ -1080,12 +1080,8 @@
         }
     }
 
-    public Map<String, Set<String>> getExcludedRestoreKeys(String... packages) {
-        return mBackupPreferences.getExcludedRestoreKeysForPackages(packages);
-    }
-
-    public Map<String, Set<String>> getAllExcludedRestoreKeys() {
-        return mBackupPreferences.getAllExcludedRestoreKeys();
+    public Set<String> getExcludedRestoreKeys(String packageName) {
+        return mBackupPreferences.getExcludedRestoreKeysForPackage(packageName);
     }
 
     /** Used for generating random salts or passwords. */
@@ -3356,8 +3352,7 @@
                                 restoreSet,
                                 packageName,
                                 token,
-                                listener,
-                                getExcludedRestoreKeys(packageName));
+                                listener);
                 mBackupHandler.sendMessage(msg);
             } catch (Exception e) {
                 // Calling into the transport broke; back off and proceed with the installation.
diff --git a/services/backup/java/com/android/server/backup/UserBackupPreferences.java b/services/backup/java/com/android/server/backup/UserBackupPreferences.java
index 41b9719..bb8bf52 100644
--- a/services/backup/java/com/android/server/backup/UserBackupPreferences.java
+++ b/services/backup/java/com/android/server/backup/UserBackupPreferences.java
@@ -48,16 +48,7 @@
         mEditor.commit();
     }
 
-    Map<String, Set<String>> getExcludedRestoreKeysForPackages(String... packages) {
-        Map<String, Set<String>> excludedKeys = new HashMap<>();
-        for (String packageName : packages) {
-            excludedKeys.put(packageName,
-                    mPreferences.getStringSet(packageName, Collections.emptySet()));
-        }
-        return excludedKeys;
-    }
-
-    Map<String, Set<String>> getAllExcludedRestoreKeys() {
-        return (Map<String, Set<String>>) mPreferences.getAll();
+    Set<String> getExcludedRestoreKeysForPackage(String packageName) {
+        return mPreferences.getStringSet(packageName, Collections.emptySet());
     }
 }
diff --git a/services/backup/java/com/android/server/backup/internal/BackupHandler.java b/services/backup/java/com/android/server/backup/internal/BackupHandler.java
index 05396f3..87a8e49 100644
--- a/services/backup/java/com/android/server/backup/internal/BackupHandler.java
+++ b/services/backup/java/com/android/server/backup/internal/BackupHandler.java
@@ -299,8 +299,7 @@
                                 params.pmToken,
                                 params.isSystemRestore,
                                 params.filterSet,
-                                params.listener,
-                                params.excludedKeys);
+                                params.listener);
 
                 synchronized (backupManagerService.getPendingRestores()) {
                     if (backupManagerService.isRestoreInProgress()) {
diff --git a/services/backup/java/com/android/server/backup/params/RestoreParams.java b/services/backup/java/com/android/server/backup/params/RestoreParams.java
index 09b7e35..a6fea6c 100644
--- a/services/backup/java/com/android/server/backup/params/RestoreParams.java
+++ b/services/backup/java/com/android/server/backup/params/RestoreParams.java
@@ -37,7 +37,6 @@
     public final boolean isSystemRestore;
     @Nullable public final String[] filterSet;
     public final OnTaskFinishedListener listener;
-    public final Map<String, Set<String>> excludedKeys;
 
     /**
      * No kill after restore.
@@ -48,8 +47,7 @@
             IBackupManagerMonitor monitor,
             long token,
             PackageInfo packageInfo,
-            OnTaskFinishedListener listener,
-            Map<String, Set<String>> excludedKeys) {
+            OnTaskFinishedListener listener) {
         return new RestoreParams(
                 transportClient,
                 observer,
@@ -59,8 +57,7 @@
                 /* pmToken */ 0,
                 /* isSystemRestore */ false,
                 /* filterSet */ null,
-                listener,
-                excludedKeys);
+                listener);
     }
 
     /**
@@ -73,8 +70,7 @@
             long token,
             String packageName,
             int pmToken,
-            OnTaskFinishedListener listener,
-            Map<String, Set<String>> excludedKeys) {
+            OnTaskFinishedListener listener) {
         String[] filterSet = {packageName};
         return new RestoreParams(
                 transportClient,
@@ -85,8 +81,7 @@
                 pmToken,
                 /* isSystemRestore */ false,
                 filterSet,
-                listener,
-                excludedKeys);
+                listener);
     }
 
     /**
@@ -97,8 +92,7 @@
             IRestoreObserver observer,
             IBackupManagerMonitor monitor,
             long token,
-            OnTaskFinishedListener listener,
-            Map<String, Set<String>> excludedKeys) {
+            OnTaskFinishedListener listener) {
         return new RestoreParams(
                 transportClient,
                 observer,
@@ -108,8 +102,7 @@
                 /* pmToken */ 0,
                 /* isSystemRestore */ true,
                 /* filterSet */ null,
-                listener,
-                excludedKeys);
+                listener);
     }
 
     /**
@@ -122,8 +115,7 @@
             long token,
             String[] filterSet,
             boolean isSystemRestore,
-            OnTaskFinishedListener listener,
-            Map<String, Set<String>> excludedKeys) {
+            OnTaskFinishedListener listener) {
         return new RestoreParams(
                 transportClient,
                 observer,
@@ -133,8 +125,7 @@
                 /* pmToken */ 0,
                 isSystemRestore,
                 filterSet,
-                listener,
-                excludedKeys);
+                listener);
     }
 
     private RestoreParams(
@@ -146,8 +137,7 @@
             int pmToken,
             boolean isSystemRestore,
             @Nullable String[] filterSet,
-            OnTaskFinishedListener listener,
-            Map<String, Set<String>> excludedKeys) {
+            OnTaskFinishedListener listener) {
         this.transportClient = transportClient;
         this.observer = observer;
         this.monitor = monitor;
@@ -157,6 +147,5 @@
         this.isSystemRestore = isSystemRestore;
         this.filterSet = filterSet;
         this.listener = listener;
-        this.excludedKeys = excludedKeys;
     }
 }
diff --git a/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java b/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java
index c0f76c3..5a57cdc 100644
--- a/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java
+++ b/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java
@@ -178,8 +178,7 @@
                                                 observer,
                                                 monitor,
                                                 token,
-                                                listener,
-                                                mBackupManagerService.getAllExcludedRestoreKeys()),
+                                                listener),
                                 "RestoreSession.restoreAll()");
                     } finally {
                         Binder.restoreCallingIdentity(oldId);
@@ -272,8 +271,7 @@
                                                 token,
                                                 packages,
                                                 /* isSystemRestore */ packages.length > 1,
-                                                listener,
-                                                mBackupManagerService.getExcludedRestoreKeys(packages)),
+                                                listener),
                                 "RestoreSession.restorePackages(" + packages.length + " packages)");
                     } finally {
                         Binder.restoreCallingIdentity(oldId);
@@ -365,8 +363,7 @@
                                     monitor,
                                     token,
                                     app,
-                                    listener,
-                                    mBackupManagerService.getExcludedRestoreKeys(app.packageName)),
+                                    listener),
                     "RestoreSession.restorePackage(" + packageName + ")");
         } finally {
             Binder.restoreCallingIdentity(oldId);
diff --git a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
index f90d936..3c37f73 100644
--- a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
+++ b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
@@ -155,8 +155,6 @@
     // When finished call listener
     private final OnTaskFinishedListener mListener;
 
-    private final Map<String, Set<String>> mExcludedKeys;
-
     // Key/value: bookkeeping about staged data and files for agent access
     private File mBackupDataName;
     private File mStageName;
@@ -168,14 +166,14 @@
     private final BackupAgentTimeoutParameters mAgentTimeoutParameters;
 
     @VisibleForTesting
-    PerformUnifiedRestoreTask(Map<String, Set<String>> excludedKeys) {
-        mExcludedKeys = excludedKeys;
+    PerformUnifiedRestoreTask(UserBackupManagerService backupManagerService) {
         mListener = null;
         mAgentTimeoutParameters = null;
         mTransportClient = null;
         mTransportManager = null;
         mEphemeralOpToken = 0;
         mUserId = 0;
+        this.backupManagerService = backupManagerService;
     }
 
     // This task can assume that the wakelock is properly held for it and doesn't have to worry
@@ -190,8 +188,7 @@
             int pmToken,
             boolean isFullSystemRestore,
             @Nullable String[] filterSet,
-            OnTaskFinishedListener listener,
-            Map<String, Set<String>> excludedKeys) {
+            OnTaskFinishedListener listener) {
         this.backupManagerService = backupManagerService;
         mUserId = backupManagerService.getUserId();
         mTransportManager = backupManagerService.getTransportManager();
@@ -213,8 +210,6 @@
                 backupManagerService.getAgentTimeoutParameters(),
                 "Timeout parameters cannot be null");
 
-        mExcludedKeys = excludedKeys;
-
         if (targetPackage != null) {
             // Single package restore
             mAcceptSet = new ArrayList<>();
@@ -791,8 +786,9 @@
                 !getExcludedKeysForPackage(PLATFORM_PACKAGE_NAME).isEmpty();
     }
 
-    private Set<String> getExcludedKeysForPackage(String packageName) {
-        return mExcludedKeys.getOrDefault(packageName, Collections.emptySet());
+    @VisibleForTesting
+    Set<String> getExcludedKeysForPackage(String packageName) {
+        return backupManagerService.getExcludedRestoreKeys(packageName);
     }
 
     @VisibleForTesting
diff --git a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java
index 31ea5fa..9a33fc9 100644
--- a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java
+++ b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java
@@ -998,6 +998,11 @@
 
                     sendErrorSignal(mClientAdapterReference, serviceAdapterReference,
                             ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
+                } finally {
+                    synchronized (parentService.mLock) {
+                        parentService.mPackagesWithShareRequests
+                                .remove(mDataShareRequest.getPackageName());
+                    }
                 }
             });
 
diff --git a/services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java b/services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java
index 583c5b5..32bca35 100644
--- a/services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java
+++ b/services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java
@@ -426,18 +426,26 @@
     public boolean sendActivityAssistDataLocked(@NonNull IBinder activityToken,
             @NonNull Bundle data) {
         final int id = getSessionId(activityToken);
+        final Bundle assistData = data.getBundle(ASSIST_KEY_DATA);
+        final AssistStructure assistStructure = data.getParcelable(ASSIST_KEY_STRUCTURE);
+        final AssistContent assistContent = data.getParcelable(ASSIST_KEY_CONTENT);
+        final SnapshotData snapshotData = new SnapshotData(assistData,
+                assistStructure, assistContent);
         if (id != NO_SESSION_ID) {
             final ContentCaptureServerSession session = mSessions.get(id);
-            final Bundle assistData = data.getBundle(ASSIST_KEY_DATA);
-            final AssistStructure assistStructure = data.getParcelable(ASSIST_KEY_STRUCTURE);
-            final AssistContent assistContent = data.getParcelable(ASSIST_KEY_CONTENT);
-            final SnapshotData snapshotData = new SnapshotData(assistData,
-                    assistStructure, assistContent);
             session.sendActivitySnapshotLocked(snapshotData);
             return true;
-        } else {
-            Slog.e(TAG, "Failed to notify activity assist data for activity: " + activityToken);
         }
+
+        // We want to send an activity snapshot regardless of whether a content capture session is
+        // present or not since a content capture session is not required for this functionality
+        if (mRemoteService != null) {
+            mRemoteService.onActivitySnapshotRequest(NO_SESSION_ID, snapshotData);
+            Slog.d(TAG, "Notified activity assist data for activity: "
+                    + activityToken + " without a session Id");
+            return true;
+        }
+
         return false;
     }
 
diff --git a/services/core/Android.bp b/services/core/Android.bp
index a603fa9..228d9be 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -98,7 +98,7 @@
         "android.hardware.tv.cec-V1.0-java",
         "android.hardware.vibrator-java",
         "app-compat-annotations",
-        "framework-tethering",
+        "framework-tethering-stubs",
     ],
 
     required: [
@@ -113,10 +113,11 @@
         "android.hardware.broadcastradio-V2.0-java",
         "android.hardware.health-V1.0-java",
         "android.hardware.health-V2.0-java",
+        "android.hardware.health-V2.1-java",
         "android.hardware.light-java",
         "android.hardware.weaver-V1.0-java",
-        "android.hardware.biometrics.face-V1.0-java",
-        "android.hardware.biometrics.fingerprint-V2.1-java",
+        "android.hardware.biometrics.face-V1.1-java",
+        "android.hardware.biometrics.fingerprint-V2.2-java",
         "android.hardware.oemlock-V1.0-java",
         "android.hardware.configstore-V1.0-java",
         "android.hardware.contexthub-V1.0-java",
diff --git a/services/core/java/android/app/usage/UsageStatsManagerInternal.java b/services/core/java/android/app/usage/UsageStatsManagerInternal.java
index 5c2cbfa..f688759 100644
--- a/services/core/java/android/app/usage/UsageStatsManagerInternal.java
+++ b/services/core/java/android/app/usage/UsageStatsManagerInternal.java
@@ -216,13 +216,11 @@
     /**
      * Returns the events for the user in the given time period.
      *
-     * @param obfuscateInstantApps whether instant app package names need to be obfuscated in the
-     *     result.
-     * @param hideShortcutInvocationEvents whether the {@link UsageEvents.Event#SHORTCUT_INVOCATION}
-     *     events need to be excluded from the result.
+     * @param flags defines the visibility of certain usage events - see flags defined in
+     * {@link UsageEvents}.
      */
     public abstract UsageEvents queryEventsForUser(@UserIdInt int userId, long beginTime,
-            long endTime, boolean obfuscateInstantApps, boolean hideShortcutInvocationEvents);
+            long endTime, int flags);
 
     /**
      * Used to persist the last time a job was run for this app, in order to make decisions later
diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java
index bdcd832..0f8d57e 100644
--- a/services/core/java/android/content/pm/PackageManagerInternal.java
+++ b/services/core/java/android/content/pm/PackageManagerInternal.java
@@ -29,8 +29,7 @@
 import android.content.pm.PackageManager.ComponentInfoFlags;
 import android.content.pm.PackageManager.PackageInfoFlags;
 import android.content.pm.PackageManager.ResolveInfoFlags;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ComponentParseUtils;
+import android.content.pm.parsing.component.ParsedMainComponent;
 import android.os.Bundle;
 import android.os.PersistableBundle;
 import android.util.ArrayMap;
@@ -38,6 +37,8 @@
 import android.util.SparseArray;
 
 import com.android.server.pm.PackageList;
+import com.android.server.pm.PackageSetting;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import java.io.IOException;
 import java.lang.annotation.Retention;
@@ -69,6 +70,25 @@
     public static final int PACKAGE_COMPANION = 14;
     public static final int PACKAGE_RETAIL_DEMO = 15;
 
+    @IntDef(flag = true, prefix = "RESOLVE_", value = {
+            RESOLVE_NON_BROWSER_ONLY,
+            RESOLVE_NON_RESOLVER_ONLY
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface PrivateResolveFlags {}
+
+    /**
+     * Internal {@link #resolveIntent(Intent, String, int, int, int, boolean, int)} flag:
+     * only match components that contain a generic web intent filter.
+     */
+    public static final int RESOLVE_NON_BROWSER_ONLY = 0x00000001;
+
+    /**
+     * Internal {@link #resolveIntent(Intent, String, int, int, int, boolean, int)} flag: do not
+     * match to the resolver.
+     */
+    public static final int RESOLVE_NON_RESOLVER_ONLY = 0x00000002;
+
     @IntDef(value = {
             INTEGRITY_VERIFICATION_ALLOW,
             INTEGRITY_VERIFICATION_REJECT,
@@ -396,6 +416,7 @@
      * @param origIntent The original intent that triggered ephemeral resolution
      * @param resolvedType The resolved type of the intent
      * @param callingPkg The app requesting the ephemeral application
+     * @param callingFeatureId The feature in the package
      * @param isRequesterInstantApp Whether or not the app requesting the ephemeral application
      *                              is an instant app
      * @param verificationBundle Optional bundle to pass to the installer for additional
@@ -404,7 +425,8 @@
      */
     public abstract void requestInstantAppResolutionPhaseTwo(AuxiliaryResolveInfo responseObj,
             Intent origIntent, String resolvedType, String callingPkg,
-            boolean isRequesterInstantApp, Bundle verificationBundle, int userId);
+            @Nullable String callingFeatureId, boolean isRequesterInstantApp,
+            Bundle verificationBundle, int userId);
 
     /**
      * Grants implicit access based on an interaction between two apps. This grants the target app
@@ -505,7 +527,8 @@
      * Resolves an activity intent, allowing instant apps to be resolved.
      */
     public abstract ResolveInfo resolveIntent(Intent intent, String resolvedType,
-            int flags, int userId, boolean resolveForStart, int filterCallingUid);
+            int flags, @PrivateResolveFlags int privateResolveFlags, int userId,
+            boolean resolveForStart, int filterCallingUid);
 
     /**
     * Resolves a service intent, allowing instant apps to be resolved.
@@ -564,9 +587,7 @@
      */
     public abstract @Nullable AndroidPackage getPackage(@NonNull String packageName);
 
-    // TODO(b/135203078): PackageSetting can't be referenced directly. Should move to a server side
-    //  internal PM which is aware of PS.
-    public abstract @Nullable Object getPackageSetting(String packageName);
+    public abstract @Nullable PackageSetting getPackageSetting(String packageName);
 
     /**
      * Returns a package for the given UID. If the UID is part of a shared user ID, one
@@ -603,18 +624,17 @@
      */
     public abstract void removePackageListObserver(@NonNull PackageListObserver observer);
 
-    // TODO(b/135203078): PackageSetting can't be referenced directly
     /**
      * Returns a package object for the disabled system package name.
      */
-    public abstract @Nullable Object getDisabledSystemPackage(@NonNull String packageName);
+    public abstract @Nullable PackageSetting getDisabledSystemPackage(@NonNull String packageName);
 
     /**
      * Returns the package name for the disabled system package.
      *
      * This is equivalent to
      * {@link #getDisabledSystemPackage(String)}
-     *     .{@link com.android.server.pm.PackageSetting#pkg}
+     *     .{@link PackageSetting#pkg}
      *     .{@link AndroidPackage#getPackageName()}
      */
     public abstract @Nullable String getDisabledSystemPackageName(@NonNull String packageName);
@@ -655,7 +675,7 @@
     /**
      * Returns whether or not access to the application should be filtered.
      *
-     * @see #filterAppAccess(android.content.pm.PackageParser.Package, int, int)
+     * @see #filterAppAccess(AndroidPackage, int, int)
      */
     public abstract boolean filterAppAccess(
             @NonNull String packageName, int callingUid, int userId);
@@ -741,21 +761,29 @@
             throws IOException;
 
     /** Returns {@code true} if the specified component is enabled and matches the given flags. */
-    public abstract boolean isEnabledAndMatches(
-            @NonNull ComponentParseUtils.ParsedComponent component, int flags, int userId);
+    public abstract boolean isEnabledAndMatches(@NonNull ParsedMainComponent component, int flags,
+            int userId);
 
     /** Returns {@code true} if the given user requires extra badging for icons. */
     public abstract boolean userNeedsBadging(int userId);
 
     /**
      * Perform the given action for each package.
-     * Note that packages lock will be held while performin the actions.
+     * Note that packages lock will be held while performing the actions.
      *
      * @param actionLocked action to be performed
      */
     public abstract void forEachPackage(Consumer<AndroidPackage> actionLocked);
 
     /**
+     * Perform the given action for each {@link PackageSetting}.
+     * Note that packages lock will be held while performing the actions.
+     *
+     * @param actionLocked action to be performed
+     */
+    public abstract void forEachPackageSetting(Consumer<PackageSetting> actionLocked);
+
+    /**
      * Perform the given action for each installed package for a user.
      * Note that packages lock will be held while performin the actions.
      */
@@ -923,4 +951,9 @@
      */
     public abstract void setIntegrityVerificationResult(int verificationId,
             @IntegrityVerificationResult int verificationResult);
+
+    /**
+     * Returns MIME types contained in {@code mimeGroup} from {@code packageName} package
+     */
+    public abstract List<String> getMimeGroup(String packageName, String mimeGroup);
 }
diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java
index c8894e7..f1f5005 100644
--- a/services/core/java/com/android/server/BatteryService.java
+++ b/services/core/java/com/android/server/BatteryService.java
@@ -27,8 +27,10 @@
 import android.database.ContentObserver;
 import android.hardware.health.V1_0.HealthInfo;
 import android.hardware.health.V2_0.IHealth;
-import android.hardware.health.V2_0.IHealthInfoCallback;
 import android.hardware.health.V2_0.Result;
+import android.hardware.health.V2_1.BatteryCapacityLevel;
+import android.hardware.health.V2_1.Constants;
+import android.hardware.health.V2_1.IHealthInfoCallback;
 import android.hidl.manager.V1_0.IServiceManager;
 import android.hidl.manager.V1_0.IServiceNotification;
 import android.metrics.LogMaker;
@@ -145,6 +147,7 @@
 
     private HealthInfo mHealthInfo;
     private final HealthInfo mLastHealthInfo = new HealthInfo();
+    private android.hardware.health.V2_1.HealthInfo mHealthInfo2p1;
     private boolean mBatteryLevelCritical;
     private int mLastBatteryStatus;
     private int mLastBatteryHealth;
@@ -359,6 +362,9 @@
     }
 
     private boolean shouldShutdownLocked() {
+        if (mHealthInfo2p1.batteryCapacityLevel != BatteryCapacityLevel.UNSUPPORTED) {
+            return (mHealthInfo2p1.batteryCapacityLevel == BatteryCapacityLevel.CRITICAL);
+        }
         if (mHealthInfo.batteryLevel > 0) {
             return false;
         }
@@ -416,22 +422,23 @@
         }
     }
 
-    private void update(android.hardware.health.V2_0.HealthInfo info) {
+    private void update(android.hardware.health.V2_1.HealthInfo info) {
         traceBegin("HealthInfoUpdate");
 
         Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryChargeCounter",
-                info.legacy.batteryChargeCounter);
+                info.legacy.legacy.batteryChargeCounter);
         Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryCurrent",
-                info.legacy.batteryCurrent);
+                info.legacy.legacy.batteryCurrent);
 
         synchronized (mLock) {
             if (!mUpdatesStopped) {
-                mHealthInfo = info.legacy;
+                mHealthInfo = info.legacy.legacy;
+                mHealthInfo2p1 = info;
                 // Process the new values.
                 processValuesLocked(false);
                 mLock.notifyAll(); // for any waiters on new info
             } else {
-                copy(mLastHealthInfo, info.legacy);
+                copy(mLastHealthInfo, info.legacy.legacy);
             }
         }
         traceEnd();
@@ -485,7 +492,8 @@
             mBatteryStats.setBatteryState(mHealthInfo.batteryStatus, mHealthInfo.batteryHealth,
                     mPlugType, mHealthInfo.batteryLevel, mHealthInfo.batteryTemperature,
                     mHealthInfo.batteryVoltage, mHealthInfo.batteryChargeCounter,
-                    mHealthInfo.batteryFullCharge);
+                    mHealthInfo.batteryFullCharge,
+                    mHealthInfo2p1.batteryChargeTimeToFullNowSeconds);
         } catch (RemoteException e) {
             // Should never happen.
         }
@@ -1123,8 +1131,21 @@
     private final class HealthHalCallback extends IHealthInfoCallback.Stub
             implements HealthServiceWrapper.Callback {
         @Override public void healthInfoChanged(android.hardware.health.V2_0.HealthInfo props) {
+            android.hardware.health.V2_1.HealthInfo propsLatest =
+                    new android.hardware.health.V2_1.HealthInfo();
+            propsLatest.legacy = props;
+
+            propsLatest.batteryCapacityLevel = BatteryCapacityLevel.UNSUPPORTED;
+            propsLatest.batteryChargeTimeToFullNowSeconds =
+                Constants.BATTERY_CHARGE_TIME_TO_FULL_NOW_SECONDS_UNSUPPORTED;
+
+            BatteryService.this.update(propsLatest);
+        }
+
+        @Override public void healthInfoChanged_2_1(android.hardware.health.V2_1.HealthInfo props) {
             BatteryService.this.update(props);
         }
+
         // on new service registered
         @Override public void onRegistration(IHealth oldService, IHealth newService,
                 String instance) {
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index 311a494..a4a42bc 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -69,6 +69,7 @@
 import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.util.Slog;
+import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
@@ -196,6 +197,12 @@
                     + " due to " + getEnableDisableReasonString(mReason) + " by " + mPackageName;
         }
 
+        void dump(ProtoOutputStream proto) {
+            proto.write(BluetoothManagerServiceDumpProto.ActiveLog.TIMESTAMP_MS, mTimestamp);
+            proto.write(BluetoothManagerServiceDumpProto.ActiveLog.ENABLE, mEnable);
+            proto.write(BluetoothManagerServiceDumpProto.ActiveLog.PACKAGE_NAME, mPackageName);
+            proto.write(BluetoothManagerServiceDumpProto.ActiveLog.REASON, mReason);
+        }
     }
 
     private final LinkedList<ActiveLog> mActiveLogs = new LinkedList<>();
@@ -2408,56 +2415,56 @@
         if (!DumpUtils.checkDumpPermission(mContext, TAG, writer)) {
             return;
         }
+        if ((args.length > 0) && args[0].startsWith("--proto")) {
+            dumpProto(fd);
+            return;
+        }
         String errorMsg = null;
 
-        boolean protoOut = (args.length > 0) && args[0].startsWith("--proto");
+        writer.println("Bluetooth Status");
+        writer.println("  enabled: " + isEnabled());
+        writer.println("  state: " + BluetoothAdapter.nameForState(mState));
+        writer.println("  address: " + mAddress);
+        writer.println("  name: " + mName);
+        if (mEnable) {
+            long onDuration = SystemClock.elapsedRealtime() - mLastEnabledTime;
+            String onDurationString = String.format(Locale.US, "%02d:%02d:%02d.%03d",
+                    (int) (onDuration / (1000 * 60 * 60)),
+                    (int) ((onDuration / (1000 * 60)) % 60), (int) ((onDuration / 1000) % 60),
+                    (int) (onDuration % 1000));
+            writer.println("  time since enabled: " + onDurationString);
+        }
 
-        if (!protoOut) {
-            writer.println("Bluetooth Status");
-            writer.println("  enabled: " + isEnabled());
-            writer.println("  state: " + BluetoothAdapter.nameForState(mState));
-            writer.println("  address: " + mAddress);
-            writer.println("  name: " + mName);
-            if (mEnable) {
-                long onDuration = SystemClock.elapsedRealtime() - mLastEnabledTime;
-                String onDurationString = String.format(Locale.US, "%02d:%02d:%02d.%03d",
-                        (int) (onDuration / (1000 * 60 * 60)),
-                        (int) ((onDuration / (1000 * 60)) % 60), (int) ((onDuration / 1000) % 60),
-                        (int) (onDuration % 1000));
-                writer.println("  time since enabled: " + onDurationString);
+        if (mActiveLogs.size() == 0) {
+            writer.println("\nBluetooth never enabled!");
+        } else {
+            writer.println("\nEnable log:");
+            for (ActiveLog log : mActiveLogs) {
+                writer.println("  " + log);
             }
+        }
 
-            if (mActiveLogs.size() == 0) {
-                writer.println("\nBluetooth never enabled!");
-            } else {
-                writer.println("\nEnable log:");
-                for (ActiveLog log : mActiveLogs) {
-                    writer.println("  " + log);
-                }
-            }
+        writer.println(
+                "\nBluetooth crashed " + mCrashes + " time" + (mCrashes == 1 ? "" : "s"));
+        if (mCrashes == CRASH_LOG_MAX_SIZE) {
+            writer.println("(last " + CRASH_LOG_MAX_SIZE + ")");
+        }
+        for (Long time : mCrashTimestamps) {
+            writer.println("  " + timeToLog(time));
+        }
 
-            writer.println(
-                    "\nBluetooth crashed " + mCrashes + " time" + (mCrashes == 1 ? "" : "s"));
-            if (mCrashes == CRASH_LOG_MAX_SIZE) {
-                writer.println("(last " + CRASH_LOG_MAX_SIZE + ")");
-            }
-            for (Long time : mCrashTimestamps) {
-                writer.println("  " + timeToLog(time));
-            }
+        writer.println("\n" + mBleApps.size() + " BLE app" + (mBleApps.size() == 1 ? "" : "s")
+                + " registered");
+        for (ClientDeathRecipient app : mBleApps.values()) {
+            writer.println("  " + app.getPackageName());
+        }
 
-            writer.println("\n" + mBleApps.size() + " BLE app" + (mBleApps.size() == 1 ? "" : "s")
-                    + "registered");
-            for (ClientDeathRecipient app : mBleApps.values()) {
-                writer.println("  " + app.getPackageName());
-            }
-
-            writer.println("");
-            writer.flush();
-            if (args.length == 0) {
-                // Add arg to produce output
-                args = new String[1];
-                args[0] = "--print";
-            }
+        writer.println("");
+        writer.flush();
+        if (args.length == 0) {
+            // Add arg to produce output
+            args = new String[1];
+            args[0] = "--print";
         }
 
         if (mBluetoothBinder == null) {
@@ -2470,14 +2477,42 @@
             }
         }
         if (errorMsg != null) {
-            // Silently return if we are extracting metrics in Protobuf format
-            if (protoOut) {
-                return;
-            }
             writer.println(errorMsg);
         }
     }
 
+    private void dumpProto(FileDescriptor fd) {
+        final ProtoOutputStream proto = new ProtoOutputStream(fd);
+        proto.write(BluetoothManagerServiceDumpProto.ENABLED, isEnabled());
+        proto.write(BluetoothManagerServiceDumpProto.STATE, mState);
+        proto.write(BluetoothManagerServiceDumpProto.STATE_NAME,
+                BluetoothAdapter.nameForState(mState));
+        proto.write(BluetoothManagerServiceDumpProto.ADDRESS, mAddress);
+        proto.write(BluetoothManagerServiceDumpProto.NAME, mName);
+        if (mEnable) {
+            proto.write(BluetoothManagerServiceDumpProto.LAST_ENABLED_TIME_MS, mLastEnabledTime);
+        }
+        proto.write(BluetoothManagerServiceDumpProto.CURR_TIMESTAMP_MS,
+                SystemClock.elapsedRealtime());
+        for (ActiveLog log : mActiveLogs) {
+            long token = proto.start(BluetoothManagerServiceDumpProto.ACTIVE_LOGS);
+            log.dump(proto);
+            proto.end(token);
+        }
+        proto.write(BluetoothManagerServiceDumpProto.NUM_CRASHES, mCrashes);
+        proto.write(BluetoothManagerServiceDumpProto.CRASH_LOG_MAXED,
+                mCrashes == CRASH_LOG_MAX_SIZE);
+        for (Long time : mCrashTimestamps) {
+            proto.write(BluetoothManagerServiceDumpProto.CRASH_TIMESTAMPS_MS, time);
+        }
+        proto.write(BluetoothManagerServiceDumpProto.NUM_BLE_APPS, mBleApps.size());
+        for (ClientDeathRecipient app : mBleApps.values()) {
+            proto.write(BluetoothManagerServiceDumpProto.BLE_APP_PACKAGE_NAMES,
+                    app.getPackageName());
+        }
+        proto.flush();
+    }
+
     private static String getEnableDisableReasonString(int reason) {
         switch (reason) {
             case BluetoothProtoEnums.ENABLE_DISABLE_REASON_APPLICATION_REQUEST:
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 6726170..f7eabac 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -64,6 +64,7 @@
 import android.content.res.Configuration;
 import android.database.ContentObserver;
 import android.net.CaptivePortal;
+import android.net.CaptivePortalData;
 import android.net.ConnectionInfo;
 import android.net.ConnectivityDiagnosticsManager.ConnectivityReport;
 import android.net.ConnectivityDiagnosticsManager.DataStallReport;
@@ -153,7 +154,6 @@
 import android.security.KeyStore;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
-import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.LocalLog;
 import android.util.Log;
@@ -193,6 +193,7 @@
 import com.android.server.connectivity.NetworkDiagnostics;
 import com.android.server.connectivity.NetworkNotificationManager;
 import com.android.server.connectivity.NetworkNotificationManager.NotificationType;
+import com.android.server.connectivity.NetworkRanker;
 import com.android.server.connectivity.PermissionMonitor;
 import com.android.server.connectivity.ProxyTracker;
 import com.android.server.connectivity.Vpn;
@@ -229,6 +230,7 @@
 import java.util.Objects;
 import java.util.Set;
 import java.util.SortedSet;
+import java.util.StringJoiner;
 import java.util.TreeSet;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -545,6 +547,14 @@
     public static final int EVENT_PROBE_STATUS_CHANGED = 46;
 
     /**
+     * Event for NetworkMonitor to inform ConnectivityService that captive portal data has changed.
+     * arg1 = unused
+     * arg2 = netId
+     * obj = captive portal data
+     */
+    private static final int EVENT_CAPPORT_DATA_CHANGED = 47;
+
+    /**
      * Argument for {@link #EVENT_PROVISIONING_NOTIFICATION} to indicate that the notification
      * should be shown.
      */
@@ -577,6 +587,7 @@
     final ConnectivityDiagnosticsHandler mConnectivityDiagnosticsHandler;
 
     private final DnsManager mDnsManager;
+    private final NetworkRanker mNetworkRanker;
 
     private boolean mSystemReady;
     private Intent mInitialBroadcast;
@@ -602,7 +613,7 @@
 
     private Set<String> mWolSupportedInterfaces;
 
-    private TelephonyManager mTelephonyManager;
+    private final TelephonyManager mTelephonyManager;
     private final AppOpsManager mAppOpsManager;
 
     private final LocationPermissionChecker mLocationPermissionChecker;
@@ -725,9 +736,9 @@
         private void maybeLogBroadcast(NetworkAgentInfo nai, DetailedState state, int type,
                 boolean isDefaultNetwork) {
             if (DBG) {
-                log("Sending " + state +
-                        " broadcast for type " + type + " " + nai.name() +
-                        " isDefaultNetwork=" + isDefaultNetwork);
+                log("Sending " + state
+                        + " broadcast for type " + type + " " + nai.toShortString()
+                        + " isDefaultNetwork=" + isDefaultNetwork);
             }
         }
 
@@ -807,14 +818,6 @@
             }
         }
 
-        private String naiToString(NetworkAgentInfo nai) {
-            String name = nai.name();
-            String state = (nai.networkInfo != null) ?
-                    nai.networkInfo.getState() + "/" + nai.networkInfo.getDetailedState() :
-                    "???/???";
-            return name + " " + state;
-        }
-
         public void dump(IndentingPrintWriter pw) {
             pw.println("mLegacyTypeTracker:");
             pw.increaseIndent();
@@ -829,7 +832,7 @@
                 for (int type = 0; type < mTypeLists.length; type++) {
                     if (mTypeLists[type] == null || mTypeLists[type].isEmpty()) continue;
                     for (NetworkAgentInfo nai : mTypeLists[type]) {
-                        pw.println(type + " " + naiToString(nai));
+                        pw.println(type + " " + nai.toShortString());
                     }
                 }
             }
@@ -961,9 +964,11 @@
         mDeps = Objects.requireNonNull(deps, "missing Dependencies");
         mSystemProperties = mDeps.getSystemProperties();
         mNetIdManager = mDeps.makeNetIdManager();
+        mContext = Objects.requireNonNull(context, "missing Context");
 
         mMetricsLog = logger;
         mDefaultRequest = createDefaultInternetRequestForTransport(-1, NetworkRequest.Type.REQUEST);
+        mNetworkRanker = new NetworkRanker();
         NetworkRequestInfo defaultNRI = new NetworkRequestInfo(null, mDefaultRequest, new Binder());
         mNetworkRequests.put(mDefaultRequest, defaultNRI);
         mNetworkRequestInfoLogs.log("REGISTER " + defaultNRI);
@@ -989,7 +994,6 @@
 
         mLingerDelayMs = mSystemProperties.getInt(LINGER_DELAY_PROPERTY, DEFAULT_LINGER_DELAY_MS);
 
-        mContext = Objects.requireNonNull(context, "missing Context");
         mNMS = Objects.requireNonNull(netManager, "missing INetworkManagementService");
         mStatsService = Objects.requireNonNull(statsService, "missing INetworkStatsService");
         mPolicyManager = Objects.requireNonNull(policyManager, "missing INetworkPolicyManager");
@@ -1169,6 +1173,7 @@
             int transportType, NetworkRequest.Type type) {
         final NetworkCapabilities netCap = new NetworkCapabilities();
         netCap.addCapability(NET_CAPABILITY_INTERNET);
+        netCap.setRequestorUidAndPackageName(Process.myUid(), mContext.getPackageName());
         if (transportType > -1) {
             netCap.addTransportType(transportType);
         }
@@ -1699,10 +1704,12 @@
         return newLp;
     }
 
-    private void restrictRequestUidsForCaller(NetworkCapabilities nc) {
+    private void restrictRequestUidsForCallerAndSetRequestorInfo(NetworkCapabilities nc,
+            int callerUid, String callerPackageName) {
         if (!checkSettingsPermission()) {
-            nc.setSingleUid(Binder.getCallingUid());
+            nc.setSingleUid(callerUid);
         }
+        nc.setRequestorUidAndPackageName(callerUid, callerPackageName);
         nc.setAdministratorUids(Collections.EMPTY_LIST);
 
         // Clear owner UID; this can never come from an app.
@@ -2793,7 +2800,7 @@
                         nai.everCaptivePortalDetected |= visible;
                         if (nai.lastCaptivePortalDetected &&
                             Settings.Global.CAPTIVE_PORTAL_MODE_AVOID == getCaptivePortalMode()) {
-                            if (DBG) log("Avoiding captive portal network: " + nai.name());
+                            if (DBG) log("Avoiding captive portal network: " + nai.toShortString());
                             nai.asyncChannel.sendMessage(
                                     NetworkAgent.CMD_PREVENT_AUTOMATIC_RECONNECT);
                             teardownUnneededNetwork(nai);
@@ -2826,6 +2833,12 @@
                     updatePrivateDns(nai, (PrivateDnsConfig) msg.obj);
                     break;
                 }
+                case EVENT_CAPPORT_DATA_CHANGED: {
+                    final NetworkAgentInfo nai = getNetworkAgentInfoForNetId(msg.arg2);
+                    if (nai == null) break;
+                    handleCaptivePortalDataUpdate(nai, (CaptivePortalData) msg.obj);
+                    break;
+                }
             }
             return true;
         }
@@ -2852,7 +2865,7 @@
                 final String logMsg = !TextUtils.isEmpty(redirectUrl)
                         ? " with redirect to " + redirectUrl
                         : "";
-                log(nai.name() + " validation " + (valid ? "passed" : "failed") + logMsg);
+                log(nai.toShortString() + " validation " + (valid ? "passed" : "failed") + logMsg);
             }
             if (valid != nai.lastValidated) {
                 if (wasDefault) {
@@ -2993,6 +3006,13 @@
         }
 
         @Override
+        public void notifyCaptivePortalDataChanged(CaptivePortalData data) {
+            mTrackerHandler.sendMessage(mTrackerHandler.obtainMessage(
+                    EVENT_CAPPORT_DATA_CHANGED,
+                    0, mNetId, data));
+        }
+
+        @Override
         public void showProvisioningNotification(String action, String packageName) {
             final Intent intent = new Intent(action);
             intent.setPackage(packageName);
@@ -3120,23 +3140,39 @@
         handleUpdateLinkProperties(nai, new LinkProperties(nai.linkProperties));
     }
 
-    private void updateLingerState(NetworkAgentInfo nai, long now) {
+    private void handleCaptivePortalDataUpdate(@NonNull final NetworkAgentInfo nai,
+            @Nullable final CaptivePortalData data) {
+        nai.captivePortalData = data;
+        // CaptivePortalData will be merged into LinkProperties from NetworkAgentInfo
+        handleUpdateLinkProperties(nai, new LinkProperties(nai.linkProperties));
+    }
+
+    /**
+     * Updates the linger state from the network requests inside the NAI.
+     * @param nai the agent info to update
+     * @param now the timestamp of the event causing this update
+     * @return whether the network was lingered as a result of this update
+     */
+    private boolean updateLingerState(@NonNull final NetworkAgentInfo nai, final long now) {
         // 1. Update the linger timer. If it's changed, reschedule or cancel the alarm.
         // 2. If the network was lingering and there are now requests, unlinger it.
         // 3. If this network is unneeded (which implies it is not lingering), and there is at least
         //    one lingered request, start lingering.
         nai.updateLingerTimer();
         if (nai.isLingering() && nai.numForegroundNetworkRequests() > 0) {
-            if (DBG) log("Unlingering " + nai.name());
+            if (DBG) log("Unlingering " + nai.toShortString());
             nai.unlinger();
             logNetworkEvent(nai, NetworkEvent.NETWORK_UNLINGER);
         } else if (unneeded(nai, UnneededFor.LINGER) && nai.getLingerExpiry() > 0) {
-            int lingerTime = (int) (nai.getLingerExpiry() - now);
-            if (DBG) log("Lingering " + nai.name() + " for " + lingerTime + "ms");
+            if (DBG) {
+                final int lingerTime = (int) (nai.getLingerExpiry() - now);
+                log("Lingering " + nai.toShortString() + " for " + lingerTime + "ms");
+            }
             nai.linger();
             logNetworkEvent(nai, NetworkEvent.NETWORK_LINGER);
-            notifyNetworkCallbacks(nai, ConnectivityManager.CALLBACK_LOSING, lingerTime);
+            return true;
         }
+        return false;
     }
 
     private void handleAsyncChannelHalfConnect(Message msg) {
@@ -3194,7 +3230,7 @@
     private void disconnectAndDestroyNetwork(NetworkAgentInfo nai) {
         ensureRunningOnConnectivityServiceThread();
         if (DBG) {
-            log(nai.name() + " got DISCONNECTED, was satisfying " + nai.numNetworkRequests());
+            log(nai.toShortString() + " disconnected, was satisfying " + nai.numNetworkRequests());
         }
         // Clear all notifications of this network.
         mNotifier.clearNotification(nai.network.netId);
@@ -3252,7 +3288,7 @@
             mDefaultNetworkNai = null;
             updateDataActivityTracking(null /* newNetwork */, nai);
             notifyLockdownVpn(nai);
-            ensureNetworkTransitionWakelock(nai.name());
+            ensureNetworkTransitionWakelock(nai.toShortString());
         }
         mLegacyTypeTracker.remove(nai, wasDefault);
         if (!nai.networkCapabilities.hasTransport(TRANSPORT_VPN)) {
@@ -3394,16 +3430,16 @@
             // there is hope for it to become one if it validated, then it is needed.
             ensureRunningOnConnectivityServiceThread();
             if (nri.request.isRequest() && nai.satisfies(nri.request) &&
-                    (nai.isSatisfyingRequest(nri.request.requestId) ||
-                    // Note that this catches two important cases:
-                    // 1. Unvalidated cellular will not be reaped when unvalidated WiFi
-                    //    is currently satisfying the request.  This is desirable when
-                    //    cellular ends up validating but WiFi does not.
-                    // 2. Unvalidated WiFi will not be reaped when validated cellular
-                    //    is currently satisfying the request.  This is desirable when
-                    //    WiFi ends up validating and out scoring cellular.
-                    nri.mSatisfier.getCurrentScore()
-                            < nai.getCurrentScoreAsValidated())) {
+                    (nai.isSatisfyingRequest(nri.request.requestId)
+                    // Note that canPossiblyBeat catches two important cases:
+                    // 1. Unvalidated slow networks will not be reaped when an unvalidated fast
+                    // network is currently satisfying the request. This is desirable for example
+                    // when cellular ends up validating but WiFi/Ethernet does not.
+                    // 2. Fast networks will not be reaped when a validated slow network is
+                    // currently satisfying the request. This is desirable for example when
+                    // Ethernet ends up validating and out scoring WiFi, or WiFi/Ethernet ends
+                    // up validating and out scoring cellular.
+                            || nai.canPossiblyBeat(nri.mSatisfier))) {
                 return false;
             }
         }
@@ -3475,14 +3511,17 @@
                 boolean wasBackgroundNetwork = nai.isBackgroundNetwork();
                 nai.removeRequest(nri.request.requestId);
                 if (VDBG || DDBG) {
-                    log(" Removing from current network " + nai.name() +
-                            ", leaving " + nai.numNetworkRequests() + " requests.");
+                    log(" Removing from current network " + nai.toShortString()
+                            + ", leaving " + nai.numNetworkRequests() + " requests.");
                 }
                 // If there are still lingered requests on this network, don't tear it down,
                 // but resume lingering instead.
-                updateLingerState(nai, SystemClock.elapsedRealtime());
+                final long now = SystemClock.elapsedRealtime();
+                if (updateLingerState(nai, now)) {
+                    notifyNetworkLosing(nai, now);
+                }
                 if (unneeded(nai, UnneededFor.TEARDOWN)) {
-                    if (DBG) log("no live requests for " + nai.name() + "; disconnecting");
+                    if (DBG) log("no live requests for " + nai.toShortString() + "; disconnecting");
                     teardownUnneededNetwork(nai);
                 } else {
                     wasKept = true;
@@ -3739,6 +3778,7 @@
             if (nm == null) return;
 
             if (request == CaptivePortal.APP_REQUEST_REEVALUATION_REQUIRED) {
+                checkNetworkStackPermission();
                 nm.forceReevaluation(Binder.getCallingUid());
             }
         }
@@ -3777,8 +3817,9 @@
         return avoidBadWifi();
     }
 
-
     private void rematchForAvoidBadWifiUpdate() {
+        ensureRunningOnConnectivityServiceThread();
+        mixInAllNetworkScores();
         rematchAllNetworksAndRequests();
         for (NetworkAgentInfo nai: mNetworkAgentInfos.values()) {
             if (nai.networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
@@ -3817,7 +3858,7 @@
         pw.increaseIndent();
         for (NetworkAgentInfo nai : networksSortedById()) {
             if (nai.avoidUnvalidated) {
-                pw.println(nai.name());
+                pw.println(nai.toShortString());
             }
         }
         pw.decreaseIndent();
@@ -3929,7 +3970,7 @@
 
     private void handleNetworkUnvalidated(NetworkAgentInfo nai) {
         NetworkCapabilities nc = nai.networkCapabilities;
-        if (DBG) log("handleNetworkUnvalidated " + nai.name() + " cap=" + nc);
+        if (DBG) log("handleNetworkUnvalidated " + nai.toShortString() + " cap=" + nc);
 
         if (!nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
             return;
@@ -4750,7 +4791,7 @@
                 return false;
             }
 
-            return vpn.startAlwaysOnVpn();
+            return vpn.startAlwaysOnVpn(mKeyStore);
         }
     }
 
@@ -4765,7 +4806,7 @@
                 Slog.w(TAG, "User " + userId + " has no Vpn configuration");
                 return false;
             }
-            return vpn.isAlwaysOnPackageSupported(packageName);
+            return vpn.isAlwaysOnPackageSupported(packageName, mKeyStore);
         }
     }
 
@@ -4786,11 +4827,11 @@
                 Slog.w(TAG, "User " + userId + " has no Vpn configuration");
                 return false;
             }
-            if (!vpn.setAlwaysOnPackage(packageName, lockdown, lockdownWhitelist)) {
+            if (!vpn.setAlwaysOnPackage(packageName, lockdown, lockdownWhitelist, mKeyStore)) {
                 return false;
             }
             if (!startAlwaysOnVpn(userId)) {
-                vpn.setAlwaysOnPackage(null, false, null);
+                vpn.setAlwaysOnPackage(null, false, null, mKeyStore);
                 return false;
             }
         }
@@ -4976,7 +5017,7 @@
                 loge("Starting user already has a VPN");
                 return;
             }
-            userVpn = new Vpn(mHandler.getLooper(), mContext, mNMS, userId);
+            userVpn = new Vpn(mHandler.getLooper(), mContext, mNMS, userId, mKeyStore);
             mVpns.put(userId, userVpn);
             if (mUserManager.getUserInfo(userId).isPrimary() && LockdownVpnTracker.isEnabled()) {
                 updateLockdownVpn();
@@ -5047,7 +5088,7 @@
             if (TextUtils.equals(vpn.getAlwaysOnPackage(), packageName)) {
                 Slog.d(TAG, "Restarting always-on VPN package " + packageName + " for user "
                         + userId);
-                vpn.startAlwaysOnVpn();
+                vpn.startAlwaysOnVpn(mKeyStore);
             }
         }
     }
@@ -5069,7 +5110,7 @@
             if (TextUtils.equals(vpn.getAlwaysOnPackage(), packageName) && !isReplacing) {
                 Slog.d(TAG, "Removing always-on VPN package " + packageName + " for user "
                         + userId);
-                vpn.setAlwaysOnPackage(null, false, null);
+                vpn.setAlwaysOnPackage(null, false, null, mKeyStore);
             }
         }
     }
@@ -5304,7 +5345,7 @@
     // This checks that the passed capabilities either do not request a
     // specific SSID/SignalStrength, or the calling app has permission to do so.
     private void ensureSufficientPermissionsForRequest(NetworkCapabilities nc,
-            int callerPid, int callerUid) {
+            int callerPid, int callerUid, String callerPackageName) {
         if (null != nc.getSSID() && !checkSettingsPermission(callerPid, callerUid)) {
             throw new SecurityException("Insufficient permissions to request a specific SSID");
         }
@@ -5314,6 +5355,7 @@
             throw new SecurityException(
                     "Insufficient permissions to request a specific signal strength");
         }
+        mAppOpsManager.checkPackage(callerUid, callerPackageName);
     }
 
     private ArrayList<Integer> getSignalStrengthThresholds(NetworkAgentInfo nai) {
@@ -5343,7 +5385,7 @@
                 detail = reason;
             }
             log(String.format("updateSignalStrengthThresholds: %s, sending %s to %s",
-                    detail, Arrays.toString(thresholdsArray.toArray()), nai.name()));
+                    detail, Arrays.toString(thresholdsArray.toArray()), nai.toShortString()));
         }
 
         nai.asyncChannel.sendMessage(
@@ -5360,7 +5402,6 @@
             return;
         }
         MatchAllNetworkSpecifier.checkNotMatchAllNetworkSpecifier(ns);
-        ns.assertValidFromUid(Binder.getCallingUid());
     }
 
     private void ensureValid(NetworkCapabilities nc) {
@@ -5372,7 +5413,9 @@
 
     @Override
     public NetworkRequest requestNetwork(NetworkCapabilities networkCapabilities,
-            Messenger messenger, int timeoutMs, IBinder binder, int legacyType) {
+            Messenger messenger, int timeoutMs, IBinder binder, int legacyType,
+            @NonNull String callingPackageName) {
+        final int callingUid = Binder.getCallingUid();
         final NetworkRequest.Type type = (networkCapabilities == null)
                 ? NetworkRequest.Type.TRACK_DEFAULT
                 : NetworkRequest.Type.REQUEST;
@@ -5380,7 +5423,7 @@
         // the default network request. This allows callers to keep track of
         // the system default network.
         if (type == NetworkRequest.Type.TRACK_DEFAULT) {
-            networkCapabilities = createDefaultNetworkCapabilitiesForUid(Binder.getCallingUid());
+            networkCapabilities = createDefaultNetworkCapabilitiesForUid(callingUid);
             enforceAccessPermission();
         } else {
             networkCapabilities = new NetworkCapabilities(networkCapabilities);
@@ -5392,13 +5435,14 @@
         }
         ensureRequestableCapabilities(networkCapabilities);
         ensureSufficientPermissionsForRequest(networkCapabilities,
-                Binder.getCallingPid(), Binder.getCallingUid());
+                Binder.getCallingPid(), callingUid, callingPackageName);
         // Set the UID range for this request to the single UID of the requester, or to an empty
         // set of UIDs if the caller has the appropriate permission and UIDs have not been set.
         // This will overwrite any allowed UIDs in the requested capabilities. Though there
         // are no visible methods to set the UIDs, an app could use reflection to try and get
         // networks for other apps so it's essential that the UIDs are overwritten.
-        restrictRequestUidsForCaller(networkCapabilities);
+        restrictRequestUidsForCallerAndSetRequestorInfo(networkCapabilities,
+                callingUid, callingPackageName);
 
         if (timeoutMs < 0) {
             throw new IllegalArgumentException("Bad timeout specified");
@@ -5473,16 +5517,18 @@
 
     @Override
     public NetworkRequest pendingRequestForNetwork(NetworkCapabilities networkCapabilities,
-            PendingIntent operation) {
+            PendingIntent operation, @NonNull String callingPackageName) {
         Objects.requireNonNull(operation, "PendingIntent cannot be null.");
+        final int callingUid = Binder.getCallingUid();
         networkCapabilities = new NetworkCapabilities(networkCapabilities);
         enforceNetworkRequestPermissions(networkCapabilities);
         enforceMeteredApnPolicy(networkCapabilities);
         ensureRequestableCapabilities(networkCapabilities);
         ensureSufficientPermissionsForRequest(networkCapabilities,
-                Binder.getCallingPid(), Binder.getCallingUid());
+                Binder.getCallingPid(), callingUid, callingPackageName);
         ensureValidNetworkSpecifier(networkCapabilities);
-        restrictRequestUidsForCaller(networkCapabilities);
+        restrictRequestUidsForCallerAndSetRequestorInfo(networkCapabilities,
+                callingUid, callingPackageName);
 
         NetworkRequest networkRequest = new NetworkRequest(networkCapabilities, TYPE_NONE,
                 nextNetworkRequestId(), NetworkRequest.Type.REQUEST);
@@ -5530,15 +5576,16 @@
 
     @Override
     public NetworkRequest listenForNetwork(NetworkCapabilities networkCapabilities,
-            Messenger messenger, IBinder binder) {
+            Messenger messenger, IBinder binder, @NonNull String callingPackageName) {
+        final int callingUid = Binder.getCallingUid();
         if (!hasWifiNetworkListenPermission(networkCapabilities)) {
             enforceAccessPermission();
         }
 
         NetworkCapabilities nc = new NetworkCapabilities(networkCapabilities);
         ensureSufficientPermissionsForRequest(networkCapabilities,
-                Binder.getCallingPid(), Binder.getCallingUid());
-        restrictRequestUidsForCaller(nc);
+                Binder.getCallingPid(), callingUid, callingPackageName);
+        restrictRequestUidsForCallerAndSetRequestorInfo(nc, callingUid, callingPackageName);
         // Apps without the CHANGE_NETWORK_STATE permission can't use background networks, so
         // make all their listens include NET_CAPABILITY_FOREGROUND. That way, they will get
         // onLost and onAvailable callbacks when networks move in and out of the background.
@@ -5558,17 +5605,17 @@
 
     @Override
     public void pendingListenForNetwork(NetworkCapabilities networkCapabilities,
-            PendingIntent operation) {
+            PendingIntent operation, @NonNull String callingPackageName) {
         Objects.requireNonNull(operation, "PendingIntent cannot be null.");
+        final int callingUid = Binder.getCallingUid();
         if (!hasWifiNetworkListenPermission(networkCapabilities)) {
             enforceAccessPermission();
         }
         ensureValid(networkCapabilities);
         ensureSufficientPermissionsForRequest(networkCapabilities,
-                Binder.getCallingPid(), Binder.getCallingUid());
-
+                Binder.getCallingPid(), callingUid, callingPackageName);
         final NetworkCapabilities nc = new NetworkCapabilities(networkCapabilities);
-        restrictRequestUidsForCaller(nc);
+        restrictRequestUidsForCallerAndSetRequestorInfo(nc, callingUid, callingPackageName);
 
         NetworkRequest networkRequest = new NetworkRequest(nc, TYPE_NONE, nextNetworkRequestId(),
                 NetworkRequest.Type.LISTEN);
@@ -5821,6 +5868,10 @@
 
         updateWakeOnLan(newLp);
 
+        // Captive portal data is obtained from NetworkMonitor and stored in NetworkAgentInfo,
+        // it is not contained in LinkProperties sent from NetworkAgents so needs to be merged here.
+        newLp.setCaptivePortalData(networkAgent.captivePortalData);
+
         // TODO - move this check to cover the whole function
         if (!Objects.equals(newLp, oldLp)) {
             synchronized (networkAgent) {
@@ -6251,9 +6302,9 @@
         // newLp is already a defensive copy.
         newLp.ensureDirectlyConnectedRoutes();
         if (VDBG || DDBG) {
-            log("Update of LinkProperties for " + nai.name() +
-                    "; created=" + nai.created +
-                    "; everConnected=" + nai.everConnected);
+            log("Update of LinkProperties for " + nai.toShortString()
+                    + "; created=" + nai.created
+                    + "; everConnected=" + nai.everConnected);
         }
         updateLinkProperties(nai, newLp, new LinkProperties(nai.linkProperties));
     }
@@ -6423,7 +6474,7 @@
             loge("Unknown NetworkAgentInfo in handleLingerComplete");
             return;
         }
-        if (DBG) log("handleLingerComplete for " + oldNetwork.name());
+        if (DBG) log("handleLingerComplete for " + oldNetwork.toShortString());
 
         // If we get here it means that the last linger timeout for this network expired. So there
         // must be no other active linger timers, and we must stop lingering.
@@ -6496,18 +6547,7 @@
     }
 
     // An accumulator class to gather the list of changes that result from a rematch.
-    // TODO : enrich to represent an entire set of changes to apply.
     private static class NetworkReassignment {
-        static class NetworkBgStatePair {
-            @NonNull final NetworkAgentInfo mNetwork;
-            final boolean mOldBackground;
-            NetworkBgStatePair(@NonNull final NetworkAgentInfo network,
-                    final boolean oldBackground) {
-                mNetwork = network;
-                mOldBackground = oldBackground;
-            }
-        }
-
         static class RequestReassignment {
             @NonNull public final NetworkRequestInfo mRequest;
             @Nullable public final NetworkAgentInfo mOldNetwork;
@@ -6519,44 +6559,34 @@
                 mOldNetwork = oldNetwork;
                 mNewNetwork = newNetwork;
             }
+
+            public String toString() {
+                return mRequest.request.requestId + " : "
+                        + (null != mOldNetwork ? mOldNetwork.network.netId : "null")
+                        + " → " + (null != mNewNetwork ? mNewNetwork.network.netId : "null");
+            }
         }
 
-        @NonNull private final Set<NetworkBgStatePair> mRematchedNetworks = new ArraySet<>();
-        @NonNull private final Map<NetworkRequestInfo, RequestReassignment> mReassignments =
-                new ArrayMap<>();
-
-        @NonNull Iterable<NetworkBgStatePair> getRematchedNetworks() {
-            return mRematchedNetworks;
-        }
+        @NonNull private final ArrayList<RequestReassignment> mReassignments = new ArrayList<>();
 
         @NonNull Iterable<RequestReassignment> getRequestReassignments() {
-            return mReassignments.values();
+            return mReassignments;
         }
 
         void addRequestReassignment(@NonNull final RequestReassignment reassignment) {
-            final RequestReassignment oldChange = mReassignments.get(reassignment.mRequest);
-            if (null == oldChange) {
-                mReassignments.put(reassignment.mRequest, reassignment);
-                return;
+            if (!Build.IS_USER) {
+                // The code is never supposed to add two reassignments of the same request. Make
+                // sure this stays true, but without imposing this expensive check on all
+                // reassignments on all user devices.
+                for (final RequestReassignment existing : mReassignments) {
+                    if (existing.mRequest.equals(reassignment.mRequest)) {
+                        throw new IllegalStateException("Trying to reassign ["
+                                + reassignment + "] but already have ["
+                                + existing + "]");
+                    }
+                }
             }
-            if (oldChange.mNewNetwork != reassignment.mOldNetwork) {
-                throw new IllegalArgumentException("Reassignment <" + reassignment.mRequest + "> ["
-                        + reassignment.mOldNetwork + " -> " + reassignment.mNewNetwork
-                        + "] conflicts with ["
-                        + oldChange.mOldNetwork + " -> " + oldChange.mNewNetwork + "]");
-            }
-            // There was already a note to reassign this request from a network A to a network B,
-            // and a reassignment is added from network B to some other network C. The following
-            // synthesizes the merged reassignment that goes A -> C. An interesting (but not
-            // special) case to think about is when B is null, which can happen when the rematch
-            // loop notices the current satisfier doesn't satisfy the request any more, but
-            // hasn't yet encountered another network that could.
-            mReassignments.put(reassignment.mRequest, new RequestReassignment(reassignment.mRequest,
-                    oldChange.mOldNetwork, reassignment.mNewNetwork));
-        }
-
-        void addRematchedNetwork(@NonNull final NetworkBgStatePair network) {
-            mRematchedNetworks.add(network);
+            mReassignments.add(reassignment);
         }
 
         // Will return null if this reassignment does not change the network assigned to
@@ -6568,125 +6598,80 @@
             }
             return null;
         }
-    }
 
-    // TODO : remove this when it's useless
-    @NonNull private NetworkReassignment computeInitialReassignment() {
-        final NetworkReassignment change = new NetworkReassignment();
-        for (NetworkRequestInfo nri : mNetworkRequests.values()) {
-            change.addRequestReassignment(new NetworkReassignment.RequestReassignment(nri,
-                    nri.mSatisfier, nri.mSatisfier));
+        public String toString() {
+            final StringJoiner sj = new StringJoiner(", " /* delimiter */,
+                    "NetReassign [" /* prefix */, "]" /* suffix */);
+            if (mReassignments.isEmpty()) return sj.add("no changes").toString();
+            for (final RequestReassignment rr : getRequestReassignments()) {
+                sj.add(rr.toString());
+            }
+            return sj.toString();
         }
-        return change;
+
+        public String debugString() {
+            final StringBuilder sb = new StringBuilder();
+            sb.append("NetworkReassignment :");
+            if (mReassignments.isEmpty()) return sb.append(" no changes").toString();
+            for (final RequestReassignment rr : getRequestReassignments()) {
+                sb.append("\n  ").append(rr);
+            }
+            return sb.append("\n").toString();
+        }
     }
 
-    private ArrayMap<NetworkRequestInfo, NetworkAgentInfo> computeRequestReassignmentForNetwork(
-            @NonNull final NetworkReassignment changes,
-            @NonNull final NetworkAgentInfo newNetwork) {
-        final int score = newNetwork.getCurrentScore();
-        final ArrayMap<NetworkRequestInfo, NetworkAgentInfo> reassignedRequests = new ArrayMap<>();
-        for (NetworkRequestInfo nri : mNetworkRequests.values()) {
-            // Process requests in the first pass and listens in the second pass. This allows us to
-            // change a network's capabilities depending on which requests it has. This is only
-            // correct if the change in capabilities doesn't affect whether the network satisfies
-            // requests or not, and doesn't affect the network's score.
-            if (nri.request.isListen()) continue;
-
-            // The reassignment has been seeded with the initial assignment, therefore
-            // getReassignment can't be null and mNewNetwork is only null if there was no
-            // satisfier in the first place or there was an explicit reassignment to null.
-            final NetworkAgentInfo currentNetwork = changes.getReassignment(nri).mNewNetwork;
-            final boolean satisfies = newNetwork.satisfies(nri.request);
-            if (newNetwork == currentNetwork && satisfies) continue;
-
-            // check if it satisfies the NetworkCapabilities
-            if (VDBG) log("  checking if request is satisfied: " + nri.request);
-            if (satisfies) {
-                // next check if it's better than any current network we're using for
-                // this request
+    private void updateSatisfiersForRematchRequest(@NonNull final NetworkRequestInfo nri,
+            @Nullable final NetworkAgentInfo previousSatisfier,
+            @Nullable final NetworkAgentInfo newSatisfier,
+            final long now) {
+        if (newSatisfier != null) {
+            if (VDBG) log("rematch for " + newSatisfier.toShortString());
+            if (previousSatisfier != null) {
                 if (VDBG || DDBG) {
-                    log("currentScore = "
-                            + (currentNetwork != null ? currentNetwork.getCurrentScore() : 0)
-                            + ", newScore = " + score);
+                    log("   accepting network in place of " + previousSatisfier.toShortString());
                 }
-                if (currentNetwork == null || currentNetwork.getCurrentScore() < score) {
-                    reassignedRequests.put(nri, newNetwork);
-                }
-            } else if (newNetwork == currentNetwork) {
-                reassignedRequests.put(nri, null);
+                previousSatisfier.removeRequest(nri.request.requestId);
+                previousSatisfier.lingerRequest(nri.request, now, mLingerDelayMs);
+            } else {
+                if (VDBG || DDBG) log("   accepting network in place of null");
             }
+            newSatisfier.unlingerRequest(nri.request);
+            if (!newSatisfier.addRequest(nri.request)) {
+                Slog.wtf(TAG, "BUG: " + newSatisfier.toShortString() + " already has "
+                        + nri.request);
+            }
+        } else {
+            if (DBG) {
+                log("Network " + previousSatisfier.toShortString() + " stopped satisfying"
+                        + " request " + nri.request.requestId);
+            }
+            previousSatisfier.removeRequest(nri.request.requestId);
         }
-        return reassignedRequests;
+        nri.mSatisfier = newSatisfier;
     }
 
-    // Handles a network appearing or improving its score.
-    //
-    // - Evaluates all current NetworkRequests that can be
-    //   satisfied by newNetwork, and reassigns to newNetwork
-    //   any such requests for which newNetwork is the best.
-    //
-    // - Writes into the passed reassignment object all changes that should be done for
-    //   rematching this network with all requests, to be applied later.
-    //
-    // TODO : stop writing to the passed reassignment. This is temporarily more useful, but
-    // it's unidiomatic Java and it's hard to read.
-    //
-    // @param changes a currently-building list of changes to write to
-    // @param newNetwork is the network to be matched against NetworkRequests.
-    // @param now the time the rematch starts, as returned by SystemClock.elapsedRealtime();
-    private void rematchNetworkAndRequests(@NonNull final NetworkReassignment changes,
-            @NonNull final NetworkAgentInfo newNetwork, final long now) {
+    @NonNull
+    private NetworkReassignment computeNetworkReassignment() {
         ensureRunningOnConnectivityServiceThread();
-        if (!newNetwork.everConnected) return;
+        final NetworkReassignment changes = new NetworkReassignment();
 
-        changes.addRematchedNetwork(new NetworkReassignment.NetworkBgStatePair(newNetwork,
-                newNetwork.isBackgroundNetwork()));
-
-        if (VDBG || DDBG) log("rematching " + newNetwork.name());
-
-        final ArrayMap<NetworkRequestInfo, NetworkAgentInfo> reassignedRequests =
-                computeRequestReassignmentForNetwork(changes, newNetwork);
-
-        // Find and migrate to this Network any NetworkRequests for
-        // which this network is now the best.
-        for (final Map.Entry<NetworkRequestInfo, NetworkAgentInfo> entry :
-                reassignedRequests.entrySet()) {
-            final NetworkRequestInfo nri = entry.getKey();
-            final NetworkAgentInfo previousSatisfier = nri.mSatisfier;
-            final NetworkAgentInfo newSatisfier = entry.getValue();
-            changes.addRequestReassignment(new NetworkReassignment.RequestReassignment(
-                    nri, previousSatisfier, newSatisfier));
-            if (newSatisfier != null) {
-                if (VDBG) log("rematch for " + newSatisfier.name());
-                if (previousSatisfier != null) {
-                    if (VDBG || DDBG) {
-                        log("   accepting network in place of " + previousSatisfier.name());
-                    }
-                    previousSatisfier.removeRequest(nri.request.requestId);
-                    previousSatisfier.lingerRequest(nri.request, now, mLingerDelayMs);
-                } else {
-                    if (VDBG || DDBG) log("   accepting network in place of null");
-                }
-                newSatisfier.unlingerRequest(nri.request);
-                if (!newSatisfier.addRequest(nri.request)) {
-                    Slog.wtf(TAG, "BUG: " + newSatisfier.name() + " already has " + nri.request);
-                }
-            } else {
-                // If "newNetwork" is listed as satisfying "nri" but no longer satisfies "nri",
-                // mark it as no longer satisfying "nri".  Because networks are processed by
-                // rematchAllNetworksAndRequests() in descending score order, "currentNetwork" will
-                // match "newNetwork" before this loop will encounter a "currentNetwork" with higher
-                // score than "newNetwork" and where "currentNetwork" no longer satisfies "nri".
-                // This means this code doesn't have to handle the case where "currentNetwork" no
-                // longer satisfies "nri" when "currentNetwork" does not equal "newNetwork".
-                if (DBG) {
-                    log("Network " + newNetwork.name() + " stopped satisfying" +
-                            " request " + nri.request.requestId);
-                }
-                newNetwork.removeRequest(nri.request.requestId);
-            }
-            nri.mSatisfier = newSatisfier;
+        // Gather the list of all relevant agents and sort them by score.
+        final ArrayList<NetworkAgentInfo> nais = new ArrayList<>();
+        for (final NetworkAgentInfo nai : mNetworkAgentInfos.values()) {
+            if (!nai.everConnected) continue;
+            nais.add(nai);
         }
+
+        for (final NetworkRequestInfo nri : mNetworkRequests.values()) {
+            if (nri.request.isListen()) continue;
+            final NetworkAgentInfo bestNetwork = mNetworkRanker.getBestNetwork(nri.request, nais);
+            if (bestNetwork != nri.mSatisfier) {
+                // bestNetwork may be null if no network can satisfy this request.
+                changes.addRequestReassignment(new NetworkReassignment.RequestReassignment(
+                        nri, nri.mSatisfier, bestNetwork));
+            }
+        }
+        return changes;
     }
 
     /**
@@ -6694,25 +6679,38 @@
      * being disconnected.
      */
     private void rematchAllNetworksAndRequests() {
-        // TODO: This may be slow, and should be optimized. Unfortunately at this moment the
-        // processing is network-major instead of request-major (the code iterates through all
-        // networks, then for each it iterates for all requests), which is a problem for re-scoring
-        // requests. Once the code has switched to a request-major iteration style, this can
-        // be optimized to only do the processing needed.
+        // TODO: This may be slow, and should be optimized.
         final long now = SystemClock.elapsedRealtime();
-        final NetworkAgentInfo oldDefaultNetwork = getDefaultNetwork();
+        final NetworkReassignment changes = computeNetworkReassignment();
+        if (VDBG || DDBG) {
+            log(changes.debugString());
+        } else if (DBG) {
+            log(changes.toString()); // Shorter form, only one line of log
+        }
+        applyNetworkReassignment(changes, now);
+    }
 
-        final NetworkAgentInfo[] nais = mNetworkAgentInfos.values().toArray(
-                new NetworkAgentInfo[mNetworkAgentInfos.size()]);
-        // Rematch higher scoring networks first to prevent requests first matching a lower
-        // scoring network and then a higher scoring network, which could produce multiple
-        // callbacks.
-        Arrays.sort(nais);
-        final NetworkReassignment changes = computeInitialReassignment();
+    private void applyNetworkReassignment(@NonNull final NetworkReassignment changes,
+            final long now) {
+        final Collection<NetworkAgentInfo> nais = mNetworkAgentInfos.values();
+
+        // Since most of the time there are only 0 or 1 background networks, it would probably
+        // be more efficient to just use an ArrayList here. TODO : measure performance
+        final ArraySet<NetworkAgentInfo> oldBgNetworks = new ArraySet<>();
         for (final NetworkAgentInfo nai : nais) {
-            rematchNetworkAndRequests(changes, nai, now);
+            if (nai.isBackgroundNetwork()) oldBgNetworks.add(nai);
         }
 
+        // First, update the lists of satisfied requests in the network agents. This is necessary
+        // because some code later depends on this state to be correct, most prominently computing
+        // the linger status.
+        for (final NetworkReassignment.RequestReassignment event :
+                changes.getRequestReassignments()) {
+            updateSatisfiersForRematchRequest(event.mRequest, event.mOldNetwork,
+                    event.mNewNetwork, now);
+        }
+
+        final NetworkAgentInfo oldDefaultNetwork = getDefaultNetwork();
         final NetworkRequestInfo defaultRequestInfo = mNetworkRequests.get(mDefaultRequest);
         final NetworkReassignment.RequestReassignment reassignment =
                 changes.getReassignment(defaultRequestInfo);
@@ -6737,8 +6735,6 @@
         // before LegacyTypeTracker sends legacy broadcasts
         for (final NetworkReassignment.RequestReassignment event :
                 changes.getRequestReassignments()) {
-            if (event.mOldNetwork == event.mNewNetwork) continue;
-
             // Tell NetworkProviders about the new score, so they can stop
             // trying to connect if they know they cannot match it.
             // TODO - this could get expensive if there are a lot of outstanding requests for this
@@ -6753,24 +6749,37 @@
             }
         }
 
-        for (final NetworkReassignment.NetworkBgStatePair event : changes.getRematchedNetworks()) {
-            // Process listen requests and update capabilities if the background state has
-            // changed for this network. For consistency with previous behavior, send onLost
-            // callbacks before onAvailable.
-            processNewlyLostListenRequests(event.mNetwork);
-            if (event.mOldBackground != event.mNetwork.isBackgroundNetwork()) {
-                applyBackgroundChangeForRematch(event.mNetwork);
-            }
-            processNewlySatisfiedListenRequests(event.mNetwork);
-        }
-
+        // Update the linger state before processing listen callbacks, because the background
+        // computation depends on whether the network is lingering. Don't send the LOSING callbacks
+        // just yet though, because they have to be sent after the listens are processed to keep
+        // backward compatibility.
+        final ArrayList<NetworkAgentInfo> lingeredNetworks = new ArrayList<>();
         for (final NetworkAgentInfo nai : nais) {
             // Rematching may have altered the linger state of some networks, so update all linger
             // timers. updateLingerState reads the state from the network agent and does nothing
             // if the state has not changed : the source of truth is controlled with
             // NetworkAgentInfo#lingerRequest and NetworkAgentInfo#unlingerRequest, which have been
             // called while rematching the individual networks above.
-            updateLingerState(nai, now);
+            if (updateLingerState(nai, now)) {
+                lingeredNetworks.add(nai);
+            }
+        }
+
+        for (final NetworkAgentInfo nai : nais) {
+            if (!nai.everConnected) continue;
+            final boolean oldBackground = oldBgNetworks.contains(nai);
+            // Process listen requests and update capabilities if the background state has
+            // changed for this network. For consistency with previous behavior, send onLost
+            // callbacks before onAvailable.
+            processNewlyLostListenRequests(nai);
+            if (oldBackground != nai.isBackgroundNetwork()) {
+                applyBackgroundChangeForRematch(nai);
+            }
+            processNewlySatisfiedListenRequests(nai);
+        }
+
+        for (final NetworkAgentInfo nai : lingeredNetworks) {
+            notifyNetworkLosing(nai, now);
         }
 
         updateLegacyTypeTrackerAndVpnLockdownForRematch(oldDefaultNetwork, newDefaultNetwork, nais);
@@ -6786,9 +6795,11 @@
                     // and became unneeded due to another network improving its score to the
                     // point where this network will no longer be able to satisfy any requests
                     // even if it validates.
-                    updateLingerState(nai, now);
+                    if (updateLingerState(nai, now)) {
+                        notifyNetworkLosing(nai, now);
+                    }
                 } else {
-                    if (DBG) log("Reaping " + nai.name());
+                    if (DBG) log("Reaping " + nai.toShortString());
                     teardownUnneededNetwork(nai);
                 }
             }
@@ -6816,7 +6827,7 @@
     private void updateLegacyTypeTrackerAndVpnLockdownForRematch(
             @Nullable final NetworkAgentInfo oldDefaultNetwork,
             @Nullable final NetworkAgentInfo newDefaultNetwork,
-            @NonNull final NetworkAgentInfo[] nais) {
+            @NonNull final Collection<NetworkAgentInfo> nais) {
         if (oldDefaultNetwork != newDefaultNetwork) {
             // Maintain the illusion : since the legacy API only understands one network at a time,
             // if the default network changed, apps should see a disconnected broadcast for the
@@ -6855,7 +6866,9 @@
         // they may get old info. Reverse this after the old startUsing api is removed.
         // This is on top of the multiple intent sequencing referenced in the todo above.
         for (NetworkAgentInfo nai : nais) {
-            addNetworkToLegacyTypeTracker(nai);
+            if (nai.everConnected) {
+                addNetworkToLegacyTypeTracker(nai);
+            }
         }
     }
 
@@ -6919,6 +6932,15 @@
             // worry about multiple different substates of CONNECTED.
             newInfo.setDetailedState(NetworkInfo.DetailedState.SUSPENDED, info.getReason(),
                     info.getExtraInfo());
+        } else if (!suspended && info.getDetailedState() == NetworkInfo.DetailedState.SUSPENDED) {
+            // SUSPENDED state is currently only overridden from CONNECTED state. In the case the
+            // network agent is created, then goes to suspended, then goes out of suspended without
+            // ever setting connected. Check if network agent is ever connected to update the state.
+            newInfo.setDetailedState(nai.everConnected
+                    ? NetworkInfo.DetailedState.CONNECTED
+                    : NetworkInfo.DetailedState.CONNECTING,
+                    info.getReason(),
+                    info.getExtraInfo());
         }
         newInfo.setRoaming(!nai.networkCapabilities.hasCapability(NET_CAPABILITY_NOT_ROAMING));
         return newInfo;
@@ -6936,8 +6958,8 @@
         notifyLockdownVpn(networkAgent);
 
         if (DBG) {
-            log(networkAgent.name() + " EVENT_NETWORK_INFO_CHANGED, going from " +
-                    oldInfo.getState() + " to " + state);
+            log(networkAgent.toShortString() + " EVENT_NETWORK_INFO_CHANGED, going from "
+                    + oldInfo.getState() + " to " + state);
         }
 
         if (!networkAgent.created
@@ -6955,7 +6977,7 @@
             networkAgent.everConnected = true;
 
             if (networkAgent.linkProperties == null) {
-                Slog.wtf(TAG, networkAgent.name() + " connected with null LinkProperties");
+                Slog.wtf(TAG, networkAgent.toShortString() + " connected with null LinkProperties");
             }
 
             // NetworkCapabilities need to be set before sending the private DNS config to
@@ -7014,9 +7036,45 @@
         }
     }
 
+    /**
+     * Re-mixin all network scores.
+     * This is called when some global setting like avoidBadWifi has changed.
+     * TODO : remove this when all usages have been removed.
+     */
+    private void mixInAllNetworkScores() {
+        ensureRunningOnConnectivityServiceThread();
+        for (final NetworkAgentInfo nai : mNetworkAgentInfos.values()) {
+            nai.setNetworkScore(mixInNetworkScore(nai, nai.getNetworkScore()));
+        }
+    }
+
+    /**
+     * Mix in the Connectivity-managed parts of the NetworkScore.
+     * @param nai The NAI this score applies to.
+     * @param sourceScore the score sent by the network agent, or the previous score of this NAI.
+     * @return A new score with the Connectivity-managed parts mixed in.
+     */
+    @NonNull
+    private NetworkScore mixInNetworkScore(@NonNull final NetworkAgentInfo nai,
+            @NonNull final NetworkScore sourceScore) {
+        final NetworkScore.Builder score = new NetworkScore.Builder(sourceScore);
+
+        // TODO : this should be done in Telephony. It should be handled per-network because
+        // it's a carrier-dependent config.
+        if (nai.networkCapabilities.hasTransport(TRANSPORT_CELLULAR)) {
+            if (mMultinetworkPolicyTracker.getAvoidBadWifi()) {
+                score.clearPolicy(NetworkScore.POLICY_IGNORE_ON_WIFI);
+            } else {
+                score.addPolicy(NetworkScore.POLICY_IGNORE_ON_WIFI);
+            }
+        }
+
+        return score.build();
+    }
+
     private void updateNetworkScore(NetworkAgentInfo nai, NetworkScore ns) {
-        if (VDBG || DDBG) log("updateNetworkScore for " + nai.name() + " to " + ns);
-        nai.setNetworkScore(ns);
+        if (VDBG || DDBG) log("updateNetworkScore for " + nai.toShortString() + " to " + ns);
+        nai.setNetworkScore(mixInNetworkScore(nai, ns));
         rematchAllNetworksAndRequests();
         sendUpdatedScoreToFactories(nai);
     }
@@ -7039,6 +7097,12 @@
         callCallbackForRequest(nri, nai, ConnectivityManager.CALLBACK_AVAILABLE, blocked ? 1 : 0);
     }
 
+    // Notify the requests on this NAI that the network is now lingered.
+    private void notifyNetworkLosing(@NonNull final NetworkAgentInfo nai, final long now) {
+        final int lingerTime = (int) (nai.getLingerExpiry() - now);
+        notifyNetworkCallbacks(nai, ConnectivityManager.CALLBACK_LOSING, lingerTime);
+    }
+
     /**
      * Notify of the blocked state apps with a registered callback matching a given NAI.
      *
@@ -7155,14 +7219,12 @@
     protected void notifyNetworkCallbacks(NetworkAgentInfo networkAgent, int notifyType, int arg1) {
         if (VDBG || DDBG) {
             String notification = ConnectivityManager.getCallbackName(notifyType);
-            log("notifyType " + notification + " for " + networkAgent.name());
+            log("notifyType " + notification + " for " + networkAgent.toShortString());
         }
         for (int i = 0; i < networkAgent.numNetworkRequests(); i++) {
             NetworkRequest nr = networkAgent.requestAt(i);
             NetworkRequestInfo nri = mNetworkRequests.get(nr);
             if (VDBG) log(" sending notification for " + nr);
-            // TODO: if we're in the middle of a rematch, can we send a CAP_CHANGED callback for
-            // a network that no longer satisfies the listen?
             if (nri.mPendingIntent == null) {
                 callCallbackForRequest(nri, networkAgent, notifyType, arg1);
             } else {
@@ -7494,6 +7556,13 @@
      */
     public int getConnectionOwnerUid(ConnectionInfo connectionInfo) {
         final Vpn vpn = enforceActiveVpnOrNetworkStackPermission();
+
+        // Only VpnService based VPNs should be able to get this information.
+        if (vpn != null && vpn.getActiveAppVpnType() != VpnManager.TYPE_VPN_SERVICE) {
+            throw new SecurityException(
+                    "getConnectionOwnerUid() not allowed for non-VpnService VPNs");
+        }
+
         if (connectionInfo.protocol != IPPROTO_TCP && connectionInfo.protocol != IPPROTO_UDP) {
             throw new IllegalArgumentException("Unsupported protocol " + connectionInfo.protocol);
         }
@@ -7782,7 +7851,13 @@
             @NonNull NetworkAgentInfo nai, long timestampMillis, int detectionMethod,
             @NonNull PersistableBundle extras) {
         final DataStallReport report =
-                new DataStallReport(nai.network, timestampMillis, detectionMethod, extras);
+                new DataStallReport(
+                        nai.network,
+                        timestampMillis,
+                        detectionMethod,
+                        nai.linkProperties,
+                        nai.networkCapabilities,
+                        extras);
         final List<IConnectivityDiagnosticsCallback> results =
                 getMatchingPermissionedCallbacks(nai);
         for (final IConnectivityDiagnosticsCallback cb : results) {
@@ -7859,12 +7934,13 @@
             throw new IllegalArgumentException("ConnectivityManager.TYPE_* are deprecated."
                     + " Please use NetworkCapabilities instead.");
         }
-        mAppOpsManager.checkPackage(Binder.getCallingUid(), callingPackageName);
+        final int callingUid = Binder.getCallingUid();
+        mAppOpsManager.checkPackage(callingUid, callingPackageName);
 
         // This NetworkCapabilities is only used for matching to Networks. Clear out its owner uid
         // and administrator uids to be safe.
         final NetworkCapabilities nc = new NetworkCapabilities(request.networkCapabilities);
-        restrictRequestUidsForCaller(nc);
+        restrictRequestUidsForCallerAndSetRequestorInfo(nc, callingUid, callingPackageName);
 
         final NetworkRequest requestWithId =
                 new NetworkRequest(
diff --git a/services/core/java/com/android/server/DynamicSystemService.java b/services/core/java/com/android/server/DynamicSystemService.java
index c60460f..41207c9 100644
--- a/services/core/java/com/android/server/DynamicSystemService.java
+++ b/services/core/java/com/android/server/DynamicSystemService.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.gsi.AvbPublicKey;
 import android.gsi.GsiProgress;
 import android.gsi.IGsiService;
 import android.gsi.IGsid;
@@ -227,4 +228,13 @@
             throw new RuntimeException(e.toString());
         }
     }
+
+    @Override
+    public boolean getAvbPublicKey(AvbPublicKey dst) {
+        try {
+            return getGsiService().getAvbPublicKey(dst) == 0;
+        } catch (RemoteException e) {
+            throw new RuntimeException(e.toString());
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/GraphicsStatsService.java b/services/core/java/com/android/server/GraphicsStatsService.java
deleted file mode 100644
index 5179fa7..0000000
--- a/services/core/java/com/android/server/GraphicsStatsService.java
+++ /dev/null
@@ -1,542 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server;
-
-import android.app.AlarmManager;
-import android.app.AppOpsManager;
-import android.content.Context;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.os.Binder;
-import android.os.Environment;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.IBinder;
-import android.os.MemoryFile;
-import android.os.Message;
-import android.os.ParcelFileDescriptor;
-import android.os.Process;
-import android.os.RemoteException;
-import android.os.Trace;
-import android.os.UserHandle;
-import android.util.Log;
-import android.view.IGraphicsStats;
-import android.view.IGraphicsStatsCallback;
-
-import com.android.internal.util.DumpUtils;
-import com.android.internal.util.FastPrintWriter;
-
-import java.io.File;
-import java.io.FileDescriptor;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.HashSet;
-import java.util.TimeZone;
-
-/**
- * This service's job is to collect aggregate rendering profile data. It
- * does this by allowing rendering processes to request an ashmem buffer
- * to place their stats into.
- *
- * Buffers are rotated on a daily (in UTC) basis and only the 3 most-recent days
- * are kept.
- *
- * The primary consumer of this is incident reports and automated metric checking. It is not
- * intended for end-developer consumption, for that we have gfxinfo.
- *
- * Buffer rotation process:
- * 1) Alarm fires
- * 2) onRotateGraphicsStatsBuffer() is sent to all active processes
- * 3) Upon receiving the callback, the process will stop using the previous ashmem buffer and
- *    request a new one.
- * 4) When that request is received we now know that the ashmem region is no longer in use so
- *    it gets queued up for saving to disk and a new ashmem region is created and returned
- *    for the process to use.
- *
- *  @hide */
-public class GraphicsStatsService extends IGraphicsStats.Stub {
-    public static final String GRAPHICS_STATS_SERVICE = "graphicsstats";
-
-    private static final String TAG = "GraphicsStatsService";
-
-    private static final int SAVE_BUFFER = 1;
-    private static final int DELETE_OLD = 2;
-
-    private static final int AID_STATSD = 1066; // Statsd uid is set to 1066 forever.
-
-    // This isn't static because we need this to happen after registerNativeMethods, however
-    // the class is loaded (and thus static ctor happens) before that occurs.
-    private final int ASHMEM_SIZE = nGetAshmemSize();
-    private final byte[] ZERO_DATA = new byte[ASHMEM_SIZE];
-
-    private final Context mContext;
-    private final AppOpsManager mAppOps;
-    private final AlarmManager mAlarmManager;
-    private final Object mLock = new Object();
-    private ArrayList<ActiveBuffer> mActive = new ArrayList<>();
-    private File mGraphicsStatsDir;
-    private final Object mFileAccessLock = new Object();
-    private Handler mWriteOutHandler;
-    private boolean mRotateIsScheduled = false;
-
-    public GraphicsStatsService(Context context) {
-        mContext = context;
-        mAppOps = context.getSystemService(AppOpsManager.class);
-        mAlarmManager = context.getSystemService(AlarmManager.class);
-        File systemDataDir = new File(Environment.getDataDirectory(), "system");
-        mGraphicsStatsDir = new File(systemDataDir, "graphicsstats");
-        mGraphicsStatsDir.mkdirs();
-        if (!mGraphicsStatsDir.exists()) {
-            throw new IllegalStateException("Graphics stats directory does not exist: "
-                    + mGraphicsStatsDir.getAbsolutePath());
-        }
-        HandlerThread bgthread = new HandlerThread("GraphicsStats-disk", Process.THREAD_PRIORITY_BACKGROUND);
-        bgthread.start();
-
-        mWriteOutHandler = new Handler(bgthread.getLooper(), new Handler.Callback() {
-            @Override
-            public boolean handleMessage(Message msg) {
-                switch (msg.what) {
-                    case SAVE_BUFFER:
-                        saveBuffer((HistoricalBuffer) msg.obj);
-                        break;
-                    case DELETE_OLD:
-                        deleteOldBuffers();
-                        break;
-                }
-                return true;
-            }
-        });
-        nativeInit();
-    }
-
-    /**
-     * Current rotation policy is to rotate at midnight UTC. We don't specify RTC_WAKEUP because
-     * rotation can be delayed if there's otherwise no activity. However exact is used because
-     * we don't want the system to delay it by TOO much.
-     */
-    private void scheduleRotateLocked() {
-        if (mRotateIsScheduled) {
-            return;
-        }
-        mRotateIsScheduled = true;
-        Calendar calendar = normalizeDate(System.currentTimeMillis());
-        calendar.add(Calendar.DATE, 1);
-        mAlarmManager.setExact(AlarmManager.RTC, calendar.getTimeInMillis(), TAG, this::onAlarm,
-                mWriteOutHandler);
-    }
-
-    private void onAlarm() {
-        // We need to make a copy since some of the callbacks won't be proxy and thus
-        // can result in a re-entrant acquisition of mLock that would result in a modification
-        // of mActive during iteration.
-        ActiveBuffer[] activeCopy;
-        synchronized (mLock) {
-            mRotateIsScheduled = false;
-            scheduleRotateLocked();
-            activeCopy = mActive.toArray(new ActiveBuffer[0]);
-        }
-        for (ActiveBuffer active : activeCopy) {
-            try {
-                active.mCallback.onRotateGraphicsStatsBuffer();
-            } catch (RemoteException e) {
-                Log.w(TAG, String.format("Failed to notify '%s' (pid=%d) to rotate buffers",
-                        active.mInfo.packageName, active.mPid), e);
-            }
-        }
-        // Give a few seconds for everyone to rotate before doing the cleanup
-        mWriteOutHandler.sendEmptyMessageDelayed(DELETE_OLD, 10000);
-    }
-
-    @Override
-    public ParcelFileDescriptor requestBufferForProcess(String packageName, IGraphicsStatsCallback token)
-            throws RemoteException {
-        int uid = Binder.getCallingUid();
-        int pid = Binder.getCallingPid();
-        ParcelFileDescriptor pfd = null;
-        long callingIdentity = Binder.clearCallingIdentity();
-        try {
-            mAppOps.checkPackage(uid, packageName);
-            PackageInfo info = mContext.getPackageManager().getPackageInfoAsUser(
-                    packageName,
-                    0,
-                    UserHandle.getUserId(uid));
-            synchronized (mLock) {
-                pfd = requestBufferForProcessLocked(token, uid, pid, packageName,
-                        info.getLongVersionCode());
-            }
-        } catch (PackageManager.NameNotFoundException ex) {
-            throw new RemoteException("Unable to find package: '" + packageName + "'");
-        } finally {
-            Binder.restoreCallingIdentity(callingIdentity);
-        }
-        return pfd;
-    }
-
-    // If lastFullDay is true, pullGraphicsStats returns stats for the last complete day/24h period
-    // that does not include today. If lastFullDay is false, pullGraphicsStats returns stats for the
-    // current day.
-    // This method is invoked from native code only.
-    @SuppressWarnings({"UnusedDeclaration"})
-    private long pullGraphicsStats(boolean lastFullDay) throws RemoteException {
-        int uid = Binder.getCallingUid();
-
-        // DUMP and PACKAGE_USAGE_STATS permissions are required to invoke this method.
-        // TODO: remove exception for statsd daemon after required permissions are granted. statsd
-        // TODO: should have these permissions granted by data/etc/platform.xml, but it does not.
-        if (uid != AID_STATSD) {
-            StringWriter sw = new StringWriter();
-            PrintWriter pw = new FastPrintWriter(sw);
-            if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, TAG, pw)) {
-                pw.flush();
-                throw new RemoteException(sw.toString());
-            }
-        }
-
-        long callingIdentity = Binder.clearCallingIdentity();
-        try {
-            return pullGraphicsStatsImpl(lastFullDay);
-        } finally {
-            Binder.restoreCallingIdentity(callingIdentity);
-        }
-    }
-
-    private long pullGraphicsStatsImpl(boolean lastFullDay) {
-        long targetDay;
-        if (lastFullDay) {
-            // Get stats from yesterday. Stats stay constant, because the day is over.
-            targetDay = normalizeDate(System.currentTimeMillis() - 86400000).getTimeInMillis();
-        } else {
-            // Get stats from today. Stats may change as more apps are run today.
-            targetDay = normalizeDate(System.currentTimeMillis()).getTimeInMillis();
-        }
-
-        // Find active buffers for targetDay.
-        ArrayList<HistoricalBuffer> buffers;
-        synchronized (mLock) {
-            buffers = new ArrayList<>(mActive.size());
-            for (int i = 0; i < mActive.size(); i++) {
-                ActiveBuffer buffer = mActive.get(i);
-                if (buffer.mInfo.startTime == targetDay) {
-                    try {
-                        buffers.add(new HistoricalBuffer(buffer));
-                    } catch (IOException ex) {
-                        // Ignore
-                    }
-                }
-            }
-        }
-
-        // Dump active and historic buffers for targetDay in a serialized
-        // GraphicsStatsServiceDumpProto proto.
-        long dump = nCreateDump(-1, true);
-        try {
-            synchronized (mFileAccessLock) {
-                HashSet<File> skipList = dumpActiveLocked(dump, buffers);
-                buffers.clear();
-                String subPath = String.format("%d", targetDay);
-                File dateDir = new File(mGraphicsStatsDir, subPath);
-                if (dateDir.exists()) {
-                    for (File pkg : dateDir.listFiles()) {
-                        for (File version : pkg.listFiles()) {
-                            File data = new File(version, "total");
-                            if (skipList.contains(data)) {
-                                continue;
-                            }
-                            nAddToDump(dump, data.getAbsolutePath());
-                        }
-                    }
-                }
-            }
-        } finally {
-            return nFinishDumpInMemory(dump);
-        }
-    }
-
-    private ParcelFileDescriptor getPfd(MemoryFile file) {
-        try {
-            if (!file.getFileDescriptor().valid()) {
-                throw new IllegalStateException("Invalid file descriptor");
-            }
-            return ParcelFileDescriptor.dup(file.getFileDescriptor());
-        } catch (IOException ex) {
-            throw new IllegalStateException("Failed to get PFD from memory file", ex);
-        }
-    }
-
-    private ParcelFileDescriptor requestBufferForProcessLocked(IGraphicsStatsCallback token,
-            int uid, int pid, String packageName, long versionCode) throws RemoteException {
-        ActiveBuffer buffer = fetchActiveBuffersLocked(token, uid, pid, packageName, versionCode);
-        scheduleRotateLocked();
-        return getPfd(buffer.mProcessBuffer);
-    }
-
-    private Calendar normalizeDate(long timestamp) {
-        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
-        calendar.setTimeInMillis(timestamp);
-        calendar.set(Calendar.HOUR_OF_DAY, 0);
-        calendar.set(Calendar.MINUTE, 0);
-        calendar.set(Calendar.SECOND, 0);
-        calendar.set(Calendar.MILLISECOND, 0);
-        return calendar;
-    }
-
-    private File pathForApp(BufferInfo info) {
-        String subPath = String.format("%d/%s/%d/total",
-                normalizeDate(info.startTime).getTimeInMillis(), info.packageName, info.versionCode);
-        return new File(mGraphicsStatsDir, subPath);
-    }
-
-    private void saveBuffer(HistoricalBuffer buffer) {
-        if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) {
-            Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "saving graphicsstats for " + buffer.mInfo.packageName);
-        }
-        synchronized (mFileAccessLock) {
-            File path = pathForApp(buffer.mInfo);
-            File parent = path.getParentFile();
-            parent.mkdirs();
-            if (!parent.exists()) {
-                Log.w(TAG, "Unable to create path: '" + parent.getAbsolutePath() + "'");
-                return;
-            }
-            nSaveBuffer(path.getAbsolutePath(), buffer.mInfo.packageName, buffer.mInfo.versionCode,
-                    buffer.mInfo.startTime, buffer.mInfo.endTime, buffer.mData);
-        }
-        Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
-    }
-
-    private void deleteRecursiveLocked(File file) {
-        if (file.isDirectory()) {
-            for (File child : file.listFiles()) {
-                deleteRecursiveLocked(child);
-            }
-        }
-        if (!file.delete()) {
-            Log.w(TAG, "Failed to delete '" + file.getAbsolutePath() + "'!");
-        }
-    }
-
-    private void deleteOldBuffers() {
-        Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "deleting old graphicsstats buffers");
-        synchronized (mFileAccessLock) {
-            File[] files = mGraphicsStatsDir.listFiles();
-            if (files == null || files.length <= 3) {
-                return;
-            }
-            long[] sortedDates = new long[files.length];
-            for (int i = 0; i < files.length; i++) {
-                try {
-                    sortedDates[i] = Long.parseLong(files[i].getName());
-                } catch (NumberFormatException ex) {
-                    // Skip unrecognized folders
-                }
-            }
-            if (sortedDates.length <= 3) {
-                return;
-            }
-            Arrays.sort(sortedDates);
-            for (int i = 0; i < sortedDates.length - 3; i++) {
-                deleteRecursiveLocked(new File(mGraphicsStatsDir, Long.toString(sortedDates[i])));
-            }
-        }
-        Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
-    }
-
-    private void addToSaveQueue(ActiveBuffer buffer) {
-        try {
-            HistoricalBuffer data = new HistoricalBuffer(buffer);
-            Message.obtain(mWriteOutHandler, SAVE_BUFFER, data).sendToTarget();
-        } catch (IOException e) {
-            Log.w(TAG, "Failed to copy graphicsstats from " + buffer.mInfo.packageName, e);
-        }
-        buffer.closeAllBuffers();
-    }
-
-    private void processDied(ActiveBuffer buffer) {
-        synchronized (mLock) {
-            mActive.remove(buffer);
-        }
-        addToSaveQueue(buffer);
-    }
-
-    private ActiveBuffer fetchActiveBuffersLocked(IGraphicsStatsCallback token, int uid, int pid,
-            String packageName, long versionCode) throws RemoteException {
-        int size = mActive.size();
-        long today = normalizeDate(System.currentTimeMillis()).getTimeInMillis();
-        for (int i = 0; i < size; i++) {
-            ActiveBuffer buffer = mActive.get(i);
-            if (buffer.mPid == pid
-                    && buffer.mUid == uid) {
-                // If the buffer is too old we remove it and return a new one
-                if (buffer.mInfo.startTime < today) {
-                    buffer.binderDied();
-                    break;
-                } else {
-                    return buffer;
-                }
-            }
-        }
-        // Didn't find one, need to create it
-        try {
-            ActiveBuffer buffers = new ActiveBuffer(token, uid, pid, packageName, versionCode);
-            mActive.add(buffers);
-            return buffers;
-        } catch (IOException ex) {
-            throw new RemoteException("Failed to allocate space");
-        }
-    }
-
-    private HashSet<File> dumpActiveLocked(long dump, ArrayList<HistoricalBuffer> buffers) {
-        HashSet<File> skipFiles = new HashSet<>(buffers.size());
-        for (int i = 0; i < buffers.size(); i++) {
-            HistoricalBuffer buffer = buffers.get(i);
-            File path = pathForApp(buffer.mInfo);
-            skipFiles.add(path);
-            nAddToDump(dump, path.getAbsolutePath(), buffer.mInfo.packageName,
-                    buffer.mInfo.versionCode,  buffer.mInfo.startTime, buffer.mInfo.endTime,
-                    buffer.mData);
-        }
-        return skipFiles;
-    }
-
-    private void dumpHistoricalLocked(long dump, HashSet<File> skipFiles) {
-        for (File date : mGraphicsStatsDir.listFiles()) {
-            for (File pkg : date.listFiles()) {
-                for (File version : pkg.listFiles()) {
-                    File data = new File(version, "total");
-                    if (skipFiles.contains(data)) {
-                        continue;
-                    }
-                    nAddToDump(dump, data.getAbsolutePath());
-                }
-            }
-        }
-    }
-
-    @Override
-    protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
-        if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, TAG, fout)) return;
-        boolean dumpProto = false;
-        for (String str : args) {
-            if ("--proto".equals(str)) {
-                dumpProto = true;
-                break;
-            }
-        }
-        ArrayList<HistoricalBuffer> buffers;
-        synchronized (mLock) {
-            buffers = new ArrayList<>(mActive.size());
-            for (int i = 0; i < mActive.size(); i++) {
-                try {
-                    buffers.add(new HistoricalBuffer(mActive.get(i)));
-                } catch (IOException ex) {
-                    // Ignore
-                }
-            }
-        }
-        long dump = nCreateDump(fd.getInt$(), dumpProto);
-        try {
-            synchronized (mFileAccessLock) {
-                HashSet<File> skipList = dumpActiveLocked(dump, buffers);
-                buffers.clear();
-                dumpHistoricalLocked(dump, skipList);
-            }
-        } finally {
-            nFinishDump(dump);
-        }
-    }
-
-    @Override
-    protected void finalize() throws Throwable {
-        nativeDestructor();
-    }
-
-    private native void nativeInit();
-    private static native void nativeDestructor();
-
-    private static native int nGetAshmemSize();
-    private static native long nCreateDump(int outFd, boolean isProto);
-    private static native void nAddToDump(long dump, String path, String packageName,
-            long versionCode, long startTime, long endTime, byte[] data);
-    private static native void nAddToDump(long dump, String path);
-    private static native void nFinishDump(long dump);
-    private static native long nFinishDumpInMemory(long dump);
-    private static native void nSaveBuffer(String path, String packageName, long versionCode,
-            long startTime, long endTime, byte[] data);
-
-    private final class BufferInfo {
-        final String packageName;
-        final long versionCode;
-        long startTime;
-        long endTime;
-
-        BufferInfo(String packageName, long versionCode, long startTime) {
-            this.packageName = packageName;
-            this.versionCode = versionCode;
-            this.startTime = startTime;
-        }
-    }
-
-    private final class ActiveBuffer implements DeathRecipient {
-        final BufferInfo mInfo;
-        final int mUid;
-        final int mPid;
-        final IGraphicsStatsCallback mCallback;
-        final IBinder mToken;
-        MemoryFile mProcessBuffer;
-
-        ActiveBuffer(IGraphicsStatsCallback token, int uid, int pid, String packageName,
-                long versionCode)
-                throws RemoteException, IOException {
-            mInfo = new BufferInfo(packageName, versionCode, System.currentTimeMillis());
-            mUid = uid;
-            mPid = pid;
-            mCallback = token;
-            mToken = mCallback.asBinder();
-            mToken.linkToDeath(this, 0);
-            mProcessBuffer = new MemoryFile("GFXStats-" + pid, ASHMEM_SIZE);
-            mProcessBuffer.writeBytes(ZERO_DATA, 0, 0, ASHMEM_SIZE);
-        }
-
-        @Override
-        public void binderDied() {
-            mToken.unlinkToDeath(this, 0);
-            processDied(this);
-        }
-
-        void closeAllBuffers() {
-            if (mProcessBuffer != null) {
-                mProcessBuffer.close();
-                mProcessBuffer = null;
-            }
-        }
-    }
-
-    private final class HistoricalBuffer {
-        final BufferInfo mInfo;
-        final byte[] mData = new byte[ASHMEM_SIZE];
-        HistoricalBuffer(ActiveBuffer active) throws IOException {
-            mInfo = active.mInfo;
-            mInfo.endTime = System.currentTimeMillis();
-            active.mProcessBuffer.readBytes(mData, 0, 0, ASHMEM_SIZE);
-        }
-    }
-}
diff --git a/services/core/java/com/android/server/IntentResolver.java b/services/core/java/com/android/server/IntentResolver.java
index deb94bd..7ec2a34 100644
--- a/services/core/java/com/android/server/IntentResolver.java
+++ b/services/core/java/com/android/server/IntentResolver.java
@@ -16,6 +16,7 @@
 
 package com.android.server;
 
+import android.annotation.NonNull;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.net.Uri;
@@ -44,29 +45,30 @@
 /**
  * {@hide}
  */
-public abstract class IntentResolver<F extends IntentFilter, R extends Object> {
+public abstract class IntentResolver<F, R extends Object> {
     final private static String TAG = "IntentResolver";
     final private static boolean DEBUG = false;
     final private static boolean localLOGV = DEBUG || false;
     final private static boolean localVerificationLOGV = DEBUG || false;
 
     public void addFilter(F f) {
+        IntentFilter intentFilter = getIntentFilter(f);
         if (localLOGV) {
             Slog.v(TAG, "Adding filter: " + f);
-            f.dump(new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM), "      ");
+            intentFilter.dump(new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM), "      ");
             Slog.v(TAG, "    Building Lookup Maps:");
         }
 
         mFilters.add(f);
-        int numS = register_intent_filter(f, f.schemesIterator(),
+        int numS = register_intent_filter(f, intentFilter.schemesIterator(),
                 mSchemeToFilter, "      Scheme: ");
         int numT = register_mime_types(f, "      Type: ");
         if (numS == 0 && numT == 0) {
-            register_intent_filter(f, f.actionsIterator(),
+            register_intent_filter(f, intentFilter.actionsIterator(),
                     mActionToFilter, "      Action: ");
         }
         if (numT != 0) {
-            register_intent_filter(f, f.actionsIterator(),
+            register_intent_filter(f, intentFilter.actionsIterator(),
                     mTypedActionToFilter, "      TypedAction: ");
         }
     }
@@ -153,7 +155,7 @@
                 if (cur == null) {
                     break;
                 }
-                if (filterEquals(cur, matching)) {
+                if (filterEquals(getIntentFilter(cur), matching)) {
                     if (res == null) {
                         res = new ArrayList<>();
                     }
@@ -178,7 +180,7 @@
         } else {
             ArrayList<F> res = null;
             for (F cur : mFilters) {
-                if (filterEquals(cur, matching)) {
+                if (filterEquals(getIntentFilter(cur), matching)) {
                     if (res == null) {
                         res = new ArrayList<>();
                     }
@@ -194,22 +196,23 @@
         mFilters.remove(f);
     }
 
-    void removeFilterInternal(F f) {
+    protected void removeFilterInternal(F f) {
+        IntentFilter intentFilter = getIntentFilter(f);
         if (localLOGV) {
             Slog.v(TAG, "Removing filter: " + f);
-            f.dump(new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM), "      ");
+            intentFilter.dump(new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM), "      ");
             Slog.v(TAG, "    Cleaning Lookup Maps:");
         }
 
-        int numS = unregister_intent_filter(f, f.schemesIterator(),
+        int numS = unregister_intent_filter(f, intentFilter.schemesIterator(),
                 mSchemeToFilter, "      Scheme: ");
         int numT = unregister_mime_types(f, "      Type: ");
         if (numS == 0 && numT == 0) {
-            unregister_intent_filter(f, f.actionsIterator(),
+            unregister_intent_filter(f, intentFilter.actionsIterator(),
                     mActionToFilter, "      Action: ");
         }
         if (numT != 0) {
-            unregister_intent_filter(f, f.actionsIterator(),
+            unregister_intent_filter(f, intentFilter.actionsIterator(),
                     mTypedActionToFilter, "      TypedAction: ");
         }
     }
@@ -272,7 +275,7 @@
                         if (printer == null) {
                             printer = new PrintWriterPrinter(out);
                         }
-                        filter.dump(printer, fprefix + "  ");
+                        getIntentFilter(filter).dump(printer, fprefix + "  ");
                     }
                 }
             }
@@ -527,7 +530,7 @@
      * @see android.content.IntentFilter#getAutoVerify()
      */
     protected boolean isFilterVerified(F filter) {
-        return filter.isVerified();
+        return getIntentFilter(filter).isVerified();
     }
 
     /**
@@ -591,7 +594,7 @@
     }
 
     private final int register_mime_types(F filter, String prefix) {
-        final Iterator<String> i = filter.typesIterator();
+        final Iterator<String> i = getIntentFilter(filter).typesIterator();
         if (i == null) {
             return 0;
         }
@@ -622,7 +625,7 @@
     }
 
     private final int unregister_mime_types(F filter, String prefix) {
-        final Iterator<String> i = filter.typesIterator();
+        final Iterator<String> i = getIntentFilter(filter).typesIterator();
         if (i == null) {
             return 0;
         }
@@ -651,7 +654,7 @@
         return num;
     }
 
-    private final int register_intent_filter(F filter, Iterator<String> i,
+    protected final int register_intent_filter(F filter, Iterator<String> i,
             ArrayMap<String, F[]> dest, String prefix) {
         if (i == null) {
             return 0;
@@ -667,7 +670,7 @@
         return num;
     }
 
-    private final int unregister_intent_filter(F filter, Iterator<String> i,
+    protected final int unregister_intent_filter(F filter, Iterator<String> i,
             ArrayMap<String, F[]> dest, String prefix) {
         if (i == null) {
             return 0;
@@ -762,12 +765,14 @@
             }
 
             // Are we verified ?
-            if (filter.getAutoVerify()) {
+            IntentFilter intentFilter = getIntentFilter(filter);
+            if (intentFilter.getAutoVerify()) {
                 if (localVerificationLOGV || debug) {
                     Slog.v(TAG, "  Filter verified: " + isFilterVerified(filter));
-                    int authorities = filter.countDataAuthorities();
+                    int authorities = intentFilter.countDataAuthorities();
                     for (int z = 0; z < authorities; z++) {
-                        Slog.v(TAG, "   " + filter.getDataAuthority(z).getHost());
+                        Slog.v(TAG, "   " + intentFilter.getDataAuthority(z)
+                                .getHost());
                     }
                 }
             }
@@ -780,12 +785,12 @@
                 continue;
             }
 
-            match = filter.match(action, resolvedType, scheme, data, categories, TAG);
+            match = intentFilter.match(action, resolvedType, scheme, data, categories, TAG);
             if (match >= 0) {
                 if (debug) Slog.v(TAG, "  Filter matched!  match=0x" +
                         Integer.toHexString(match) + " hasDefault="
-                        + filter.hasCategory(Intent.CATEGORY_DEFAULT));
-                if (!defaultOnly || filter.hasCategory(Intent.CATEGORY_DEFAULT)) {
+                        + intentFilter.hasCategory(Intent.CATEGORY_DEFAULT));
+                if (!defaultOnly || intentFilter.hasCategory(Intent.CATEGORY_DEFAULT)) {
                     final R oneResult = newResult(filter, match, userId);
                     if (debug) Slog.v(TAG, "    Created result: " + oneResult);
                     if (oneResult != null) {
@@ -793,7 +798,7 @@
                         if (debug) {
                             dumpFilter(logPrintWriter, "    ", filter);
                             logPrintWriter.flush();
-                            filter.dump(logPrinter, "    ");
+                            intentFilter.dump(logPrinter, "    ");
                         }
                     }
                 } else {
@@ -836,7 +841,7 @@
     /**
      * All filters that have been registered.
      */
-    private final ArraySet<F> mFilters = new ArraySet<F>();
+    protected final ArraySet<F> mFilters = new ArraySet<F>();
 
     /**
      * All of the MIME types that have been registered, such as "image/jpeg",
@@ -875,4 +880,11 @@
      * All of the actions that have been registered and specified a MIME type.
      */
     private final ArrayMap<String, F[]> mTypedActionToFilter = new ArrayMap<String, F[]>();
+
+    /**
+     * Rather than refactoring the entire class, this allows the input {@link F} to be a type
+     * other than {@link IntentFilter}, transforming it whenever necessary. It is valid to use
+     * {@link IntentFilter} directly as {@link F} and just return {@param input}.
+     */
+    protected abstract IntentFilter getIntentFilter(@NonNull F input);
 }
diff --git a/services/core/java/com/android/server/IpSecService.java b/services/core/java/com/android/server/IpSecService.java
index c987620..9540f43 100644
--- a/services/core/java/com/android/server/IpSecService.java
+++ b/services/core/java/com/android/server/IpSecService.java
@@ -1556,16 +1556,16 @@
         }
 
         Objects.requireNonNull(callingPackage, "Null calling package cannot create IpSec tunnels");
-        switch (getAppOpsManager().noteOp(TUNNEL_OP, Binder.getCallingUid(), callingPackage)) {
-            case AppOpsManager.MODE_DEFAULT:
-                mContext.enforceCallingOrSelfPermission(
-                        android.Manifest.permission.MANAGE_IPSEC_TUNNELS, "IpSecService");
-                break;
-            case AppOpsManager.MODE_ALLOWED:
-                return;
-            default:
-                throw new SecurityException("Request to ignore AppOps for non-legacy API");
+
+        // OP_MANAGE_IPSEC_TUNNELS will return MODE_ERRORED by default, including for the system
+        // server. If the appop is not granted, require that the caller has the MANAGE_IPSEC_TUNNELS
+        // permission or is the System Server.
+        if (AppOpsManager.MODE_ALLOWED == getAppOpsManager().noteOpNoThrow(
+                TUNNEL_OP, Binder.getCallingUid(), callingPackage)) {
+            return;
         }
+        mContext.enforceCallingOrSelfPermission(
+                android.Manifest.permission.MANAGE_IPSEC_TUNNELS, "IpSecService");
     }
 
     private void createOrUpdateTransform(
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java
index 0ab8af6a..5db5115 100644
--- a/services/core/java/com/android/server/LocationManagerService.java
+++ b/services/core/java/com/android/server/LocationManagerService.java
@@ -27,9 +27,13 @@
 import static android.location.LocationManager.PASSIVE_PROVIDER;
 import static android.os.PowerManager.locationPowerSaveModeToString;
 
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+
 import android.Manifest;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.UserIdInt;
+import android.app.ActivityManager;
 import android.app.AppOpsManager;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
@@ -42,7 +46,9 @@
 import android.location.GeocoderParams;
 import android.location.Geofence;
 import android.location.GnssMeasurementCorrections;
+import android.location.GnssRequest;
 import android.location.IBatchedLocationCallback;
+import android.location.IGnssAntennaInfoListener;
 import android.location.IGnssMeasurementsListener;
 import android.location.IGnssNavigationMessageListener;
 import android.location.IGnssStatusListener;
@@ -73,7 +79,6 @@
 import android.text.TextUtils;
 import android.util.EventLog;
 import android.util.Log;
-import android.util.Slog;
 import android.util.SparseArray;
 import android.util.TimeUtils;
 
@@ -104,6 +109,7 @@
 import com.android.server.location.PassiveProvider;
 import com.android.server.location.SettingsHelper;
 import com.android.server.location.UserInfoHelper;
+import com.android.server.location.UserInfoHelper.UserListener;
 import com.android.server.location.gnss.GnssManagerService;
 import com.android.server.pm.permission.PermissionManagerServiceInternal;
 
@@ -122,7 +128,6 @@
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.TimeUnit;
 
 /**
  * The service class that manages LocationProviders and issues location
@@ -152,7 +157,7 @@
             if (phase == PHASE_SYSTEM_SERVICES_READY) {
                 // the location service must be functioning after this boot phase
                 mService.onSystemReady();
-            } else if (phase == SystemService.PHASE_THIRD_PARTY_APPS_CAN_START) {
+            } else if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) {
                 // some providers rely on third party code, so we wait to initialize
                 // providers until third party code is allowed to run
                 mService.onSystemThirdPartyAppsCanStart();
@@ -177,6 +182,9 @@
     // The maximum interval a location request can have and still be considered "high power".
     private static final long HIGH_POWER_INTERVAL_MS = 5 * 60 * 1000;
 
+    // The fastest interval that applications can receive coarse locations
+    private static final long FASTEST_COARSE_INTERVAL_MS = 10 * 60 * 1000;
+
     // maximum age of a location before it is no longer considered "current"
     private static final long MAX_CURRENT_LOCATION_AGE_MS = 10 * 1000;
 
@@ -206,7 +214,6 @@
     private PowerManager mPowerManager;
 
     private GeofenceManager mGeofenceManager;
-    private LocationFudger mLocationFudger;
     private GeocoderProxy mGeocodeProvider;
 
     @GuardedBy("mLock")
@@ -226,16 +233,6 @@
 
     private final LocationRequestStatistics mRequestStatistics = new LocationRequestStatistics();
 
-    // mapping from provider name to last known location
-    @GuardedBy("mLock")
-    private final HashMap<String, Location> mLastLocation = new HashMap<>();
-
-    // same as mLastLocation, but is not updated faster than LocationFudger.FASTEST_INTERVAL_MS.
-    // locations stored here are not fudged for coarse permissions.
-    @GuardedBy("mLock")
-    private final HashMap<String, Location> mLastLocationCoarseInterval =
-            new HashMap<>();
-
     @GuardedBy("mLock")
     @PowerManager.LocationPowerSaveMode
     private int mBatterySaverMode;
@@ -252,7 +249,7 @@
         mAppForegroundHelper = new AppForegroundHelper(mContext);
         mLocationUsageLogger = new LocationUsageLogger();
 
-        // set up passive provider -  we do this early because it has no dependencies on system
+        // set up passive provider - we do this early because it has no dependencies on system
         // services or external code that isn't ready yet, and because this allows the variable to
         // be final. other more complex providers are initialized later, when system services are
         // ready
@@ -279,18 +276,10 @@
         mSettingsHelper.onSystemReady();
         mAppForegroundHelper.onSystemReady();
 
-        if (GnssManagerService.isGnssSupported()) {
-            mGnssManagerService = new GnssManagerService(mContext, mSettingsHelper,
-                    mAppForegroundHelper, mLocationUsageLogger);
-            mGnssManagerService.onSystemReady();
-        }
-
         synchronized (mLock) {
             mPackageManager = mContext.getPackageManager();
             mAppOps = mContext.getSystemService(AppOpsManager.class);
             mPowerManager = mContext.getSystemService(PowerManager.class);
-
-            mLocationFudger = new LocationFudger(mContext, mHandler);
             mGeofenceManager = new GeofenceManager(mContext, mSettingsHelper);
 
             PowerManagerInternal localPowerManager =
@@ -374,10 +363,11 @@
                 }
             }, UserHandle.ALL, intentFilter, null, mHandler);
 
-            // switching the user from null to current here performs the bulk of the initialization
-            // work. the user being changed will cause a reload of all user specific settings, which
-            // causes initialization, and propagates changes until a steady state is reached
-            onUserChanged(UserHandle.USER_NULL, mUserInfoHelper.getCurrentUserId());
+            // initialize the current users. we would get the user started notifications for these
+            // users eventually anyways, but this takes care of it as early as possible.
+            for (int userId: mUserInfoHelper.getCurrentUserIds()) {
+                onUserChanged(userId, UserListener.USER_STARTED);
+            }
         }
     }
 
@@ -425,7 +415,7 @@
         }
 
         if (D) {
-            Slog.d(TAG,
+            Log.d(TAG,
                     "Battery Saver location mode changed from "
                             + locationPowerSaveModeToString(mBatterySaverMode) + " to "
                             + locationPowerSaveModeToString(newLocationMode));
@@ -454,15 +444,15 @@
             Log.d(TAG, "[u" + userId + "] location enabled = " + enabled);
         }
 
-        synchronized (mLock) {
-            Intent intent = new Intent(LocationManager.MODE_CHANGED_ACTION)
-                    .putExtra(LocationManager.EXTRA_LOCATION_ENABLED, enabled)
-                    .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY)
-                    .addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-            mContext.sendBroadcastAsUser(intent, UserHandle.of(userId));
+        Intent intent = new Intent(LocationManager.MODE_CHANGED_ACTION)
+                .putExtra(LocationManager.EXTRA_LOCATION_ENABLED, enabled)
+                .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY)
+                .addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+        mContext.sendBroadcastAsUser(intent, UserHandle.of(userId));
 
+        synchronized (mLock) {
             for (LocationProviderManager manager : mProviderManagers) {
-            manager.onEnabledChangedLocked(userId);
+                manager.onEnabledChangedLocked(userId);
             }
         }
     }
@@ -536,12 +526,6 @@
 
     @GuardedBy("mLock")
     private void initializeProvidersLocked() {
-        if (mGnssManagerService != null) {
-            LocationProviderManager gnssManager = new LocationProviderManager(GPS_PROVIDER);
-            mProviderManagers.add(gnssManager);
-            gnssManager.setRealProvider(mGnssManagerService.getGnssLocationProvider());
-        }
-
         LocationProviderProxy networkProvider = LocationProviderProxy.createAndRegister(
                 mContext,
                 NETWORK_LOCATION_SERVICE_ACTION,
@@ -552,7 +536,7 @@
             mProviderManagers.add(networkManager);
             networkManager.setRealProvider(networkProvider);
         } else {
-            Slog.w(TAG, "no network location provider found");
+            Log.w(TAG, "no network location provider found");
         }
 
         // ensure that a fused provider exists which will work in direct boot
@@ -572,14 +556,13 @@
             mProviderManagers.add(fusedManager);
             fusedManager.setRealProvider(fusedProvider);
         } else {
-            Slog.e(TAG, "no fused location provider found",
-                    new IllegalStateException("Location service needs a fused location provider"));
+            Log.e(TAG, "no fused location provider found");
         }
 
         // bind to geocoder provider
         mGeocodeProvider = GeocoderProxy.createAndRegister(mContext);
         if (mGeocodeProvider == null) {
-            Slog.e(TAG, "no geocoder provider found");
+            Log.e(TAG, "no geocoder provider found");
         }
 
         // bind to geofence proxy
@@ -588,7 +571,7 @@
             if (gpsGeofenceHardware != null) {
                 GeofenceProxy provider = GeofenceProxy.createAndBind(mContext, gpsGeofenceHardware);
                 if (provider == null) {
-                    Slog.d(TAG, "unable to bind to GeofenceProxy");
+                    Log.e(TAG, "unable to bind to GeofenceProxy");
                 }
             }
         }
@@ -617,22 +600,52 @@
                     Integer.parseInt(fragments[9]) /* accuracy */);
             addTestProvider(name, properties, mContext.getOpPackageName());
         }
+
+        // initialize gnss last because it has no awareness of boot phases and blindly assumes that
+        // all other location providers are loaded at initialization
+        if (GnssManagerService.isGnssSupported()) {
+            mGnssManagerService = new GnssManagerService(mContext, mSettingsHelper,
+                    mAppForegroundHelper, mLocationUsageLogger);
+            mGnssManagerService.onSystemReady();
+
+            LocationProviderManager gnssManager = new LocationProviderManager(GPS_PROVIDER);
+            mProviderManagers.add(gnssManager);
+            gnssManager.setRealProvider(mGnssManagerService.getGnssLocationProvider());
+        }
     }
 
-    private void onUserChanged(int oldUserId, int newUserId) {
-        if (D) {
-            Log.d(TAG, "foreground user is changing to " + newUserId);
-        }
-
-        synchronized (mLock) {
-            for (LocationProviderManager manager : mProviderManagers) {
-                // update LOCATION_PROVIDERS_ALLOWED for best effort backwards compatibility
-                mSettingsHelper.setLocationProviderAllowed(manager.getName(),
-                        manager.isEnabled(newUserId), newUserId);
-
-                manager.onEnabledChangedLocked(oldUserId);
-                manager.onEnabledChangedLocked(newUserId);
-            }
+    private void onUserChanged(@UserIdInt int userId, @UserListener.UserChange int change) {
+        switch (change) {
+            case UserListener.USER_SWITCHED:
+                if (D) {
+                    Log.d(TAG, "user " + userId + " current status changed");
+                }
+                synchronized (mLock) {
+                    for (LocationProviderManager manager : mProviderManagers) {
+                        manager.onEnabledChangedLocked(userId);
+                    }
+                }
+                break;
+            case UserListener.USER_STARTED:
+                if (D) {
+                    Log.d(TAG, "user " + userId + " started");
+                }
+                synchronized (mLock) {
+                    for (LocationProviderManager manager : mProviderManagers) {
+                        manager.onUserStarted(userId);
+                    }
+                }
+                break;
+            case UserListener.USER_STOPPED:
+                if (D) {
+                    Log.d(TAG, "user " + userId + " stopped");
+                }
+                synchronized (mLock) {
+                    for (LocationProviderManager manager : mProviderManagers) {
+                        manager.onUserStopped(userId);
+                    }
+                }
+                break;
         }
     }
 
@@ -643,25 +656,32 @@
 
         private final String mName;
 
-        // acquiring mLock makes operations on mProvider atomic, but is otherwise unnecessary
-        protected final MockableLocationProvider mProvider;
+        private final LocationFudger mLocationFudger;
 
-        // enabled state for parent user ids, no entry implies false. location state is only kept
-        // for parent user ids, the location state for a profile user id is assumed to be the same
-        // as for the parent. if querying this structure, ensure that the user id being used is a
-        // parent id or the results may be incorrect.
+        // if the provider is enabled for a given user id - null or not present means unknown
         @GuardedBy("mLock")
         private final SparseArray<Boolean> mEnabled;
 
+        // last location for a given user
+        @GuardedBy("mLock")
+        private final SparseArray<Location> mLastLocation;
+
+        // last coarse location for a given user
+        @GuardedBy("mLock")
+        private final SparseArray<Location> mLastCoarseLocation;
+
+        // acquiring mLock makes operations on mProvider atomic, but is otherwise unnecessary
+        protected final MockableLocationProvider mProvider;
+
         private LocationProviderManager(String name) {
             mName = name;
-            mEnabled = new SparseArray<>(1);
+            mLocationFudger = new LocationFudger(mSettingsHelper.getCoarseLocationAccuracyM());
+            mEnabled = new SparseArray<>(2);
+            mLastLocation = new SparseArray<>(2);
+            mLastCoarseLocation = new SparseArray<>(2);
 
             // initialize last since this lets our reference escape
             mProvider = new MockableLocationProvider(mLock, this);
-
-            // we can assume all users start with disabled location state since the initial state
-            // of all providers is disabled. no need to initialize mEnabled further.
         }
 
         public String getName() {
@@ -677,7 +697,30 @@
         }
 
         public void setMockProvider(@Nullable MockProvider provider) {
-            mProvider.setMockProvider(provider);
+            synchronized (mLock) {
+                mProvider.setMockProvider(provider);
+
+                // when removing a mock provider, also clear any mock last locations and reset the
+                // location fudger. the mock provider could have been used to infer the current
+                // location fudger offsets.
+                if (provider == null) {
+                    for (int i = 0; i < mLastLocation.size(); i++) {
+                        Location lastLocation = mLastLocation.valueAt(i);
+                        if (lastLocation != null && lastLocation.isFromMockProvider()) {
+                            mLastLocation.setValueAt(i, null);
+                        }
+                    }
+
+                    for (int i = 0; i < mLastCoarseLocation.size(); i++) {
+                        Location lastCoarseLocation = mLastCoarseLocation.valueAt(i);
+                        if (lastCoarseLocation != null && lastCoarseLocation.isFromMockProvider()) {
+                            mLastCoarseLocation.setValueAt(i, null);
+                        }
+                    }
+
+                    mLocationFudger.resetOffsets();
+                }
+            }
         }
 
         public Set<String> getPackages() {
@@ -689,6 +732,45 @@
             return mProvider.getState().properties;
         }
 
+        @Nullable
+        public Location getLastFineLocation(int userId) {
+            synchronized (mLock) {
+                return mLastLocation.get(userId);
+            }
+        }
+
+        @Nullable
+        public Location getLastCoarseLocation(int userId) {
+            synchronized (mLock) {
+                return mLastCoarseLocation.get(userId);
+            }
+        }
+
+        public void injectLastLocation(Location location, int userId) {
+            synchronized (mLock) {
+                if (mLastLocation.get(userId) == null) {
+                    setLastLocation(location, userId);
+                }
+            }
+        }
+
+        private void setLastLocation(Location location, int userId) {
+            synchronized (mLock) {
+                mLastLocation.put(userId, location);
+
+                // update last coarse interval only if enough time has passed
+                long timeDeltaMs = Long.MAX_VALUE;
+                Location coarseLocation = mLastCoarseLocation.get(userId);
+                if (coarseLocation != null) {
+                    timeDeltaMs = NANOSECONDS.toMillis(location.getElapsedRealtimeNanos())
+                            - NANOSECONDS.toMillis(coarseLocation.getElapsedRealtimeNanos());
+                }
+                if (timeDeltaMs > FASTEST_COARSE_INTERVAL_MS) {
+                    mLastCoarseLocation.put(userId, mLocationFudger.createCoarse(location));
+                }
+            }
+        }
+
         public void setMockProviderAllowed(boolean enabled) {
             synchronized (mLock) {
                 if (!mProvider.isMock()) {
@@ -741,23 +823,31 @@
             // don't validate mock locations
             if (!location.isFromMockProvider()) {
                 if (location.getLatitude() == 0 && location.getLongitude() == 0) {
-                    Slog.w(TAG, "blocking 0,0 location from " + mName + " provider");
+                    Log.w(TAG, "blocking 0,0 location from " + mName + " provider");
                     return;
                 }
             }
 
-            handleLocationChangedLocked(location, this);
+            if (!location.isComplete()) {
+                Log.w(TAG, "blocking incomplete location from " + mName + " provider");
+                return;
+            }
+
+            // update last location if the provider is enabled or if servicing a bypass request
+            boolean locationSettingsIgnored = mProvider.getCurrentRequest().locationSettingsIgnored;
+            for (int userId : mUserInfoHelper.getCurrentUserIds()) {
+                if (locationSettingsIgnored || isEnabled(userId)) {
+                    setLastLocation(location, userId);
+                }
+            }
+
+            handleLocationChangedLocked(this, location, mLocationFudger.createCoarse(location));
         }
 
         @GuardedBy("mLock")
         @Override
         public void onReportLocation(List<Location> locations) {
-            if (mGnssManagerService == null) {
-                return;
-            }
-
-            if (!GPS_PROVIDER.equals(mName) || !isEnabled()) {
-                Slog.w(TAG, "reportLocationBatch() called without user permission");
+            if (mGnssManagerService == null || !GPS_PROVIDER.equals(mName)) {
                 return;
             }
 
@@ -768,10 +858,7 @@
         @Override
         public void onStateChanged(State oldState, State newState) {
             if (oldState.allowed != newState.allowed) {
-                // it would be more correct to call this for all users, but we know this can
-                // only affect the current user since providers are disabled for non-current
-                // users
-                onEnabledChangedLocked(mUserInfoHelper.getCurrentUserId());
+                onEnabledChangedLocked(UserHandle.USER_ALL);
             }
         }
 
@@ -779,37 +866,74 @@
             mProvider.requestSetAllowed(allowed);
         }
 
-        public boolean isEnabled() {
-            return isEnabled(mUserInfoHelper.getCurrentUserId());
+        public void onUserStarted(int userId) {
+            synchronized (mLock) {
+                // clear the user's enabled state in order to force a reevalution of whether the
+                // provider is enabled or disabled for the given user. we clear the user's state
+                // first to ensure that a user starting never causes any change notifications. it's
+                // possible for us to observe a user before we observe it's been started (for
+                // example, another component gets a user started notification before us and
+                // registers a location request immediately), which would cause us to already have
+                // some state in place. when we eventually do get the user started notification
+                // ourselves we don't want to send a change notification based on the prior state
+                mEnabled.put(userId, null);
+                onEnabledChangedLocked(userId);
+            }
+        }
+
+        public void onUserStopped(int userId) {
+            synchronized (mLock) {
+                mEnabled.remove(userId);
+                mLastLocation.remove(userId);
+                mLastCoarseLocation.remove(userId);
+            }
         }
 
         public boolean isEnabled(int userId) {
+            if (userId == UserHandle.USER_NULL) {
+                // used during initialization - ignore since many lower level operations (checking
+                // settings for instance) do not support the null user
+                return false;
+            }
+
             synchronized (mLock) {
-                // normalize user id to always refer to parent since profile state is always the
-                // same as parent state
-                userId = mUserInfoHelper.getParentUserId(userId);
-                return mEnabled.get(userId, Boolean.FALSE);
+                Boolean enabled = mEnabled.get(userId);
+                if (enabled == null) {
+                    // this generally shouldn't occur, but might be possible due to race conditions
+                    // on when we are notified of new users
+                    Log.w(TAG, mName + " provider saw user " + userId + " unexpectedly");
+                    onEnabledChangedLocked(userId);
+                    enabled = Objects.requireNonNull(mEnabled.get(userId));
+                }
+
+                return enabled;
             }
         }
 
         @GuardedBy("mLock")
         public void onEnabledChangedLocked(int userId) {
             if (userId == UserHandle.USER_NULL) {
-                // only used during initialization - we don't care about the null user
+                // used during initialization - ignore since many lower level operations (checking
+                // settings for instance) do not support the null user
+                return;
+            } else if (userId == UserHandle.USER_ALL) {
+                // we know enabled changes can only happen for current users since providers are
+                // always disabled for all non-current users
+                for (int currentUserId : mUserInfoHelper.getCurrentUserIds()) {
+                    onEnabledChangedLocked(currentUserId);
+                }
                 return;
             }
 
-            // normalize user id to always refer to parent since profile state is always the same
-            // as parent state
-            userId = mUserInfoHelper.getParentUserId(userId);
-
             // if any property that contributes to "enabled" here changes state, it MUST result
             // in a direct or indrect call to onEnabledChangedLocked. this allows the provider to
             // guarantee that it will always eventually reach the correct state.
-            boolean enabled = (userId == mUserInfoHelper.getCurrentUserId())
-                    && mSettingsHelper.isLocationEnabled(userId) && mProvider.getState().allowed;
+            boolean enabled = mProvider.getState().allowed
+                    && mUserInfoHelper.isCurrentUserId(userId)
+                    && mSettingsHelper.isLocationEnabled(userId);
 
-            if (enabled == isEnabled(userId)) {
+            Boolean wasEnabled = mEnabled.get(userId);
+            if (wasEnabled != null && wasEnabled == enabled) {
                 return;
             }
 
@@ -819,28 +943,29 @@
                 Log.d(TAG, "[u" + userId + "] " + mName + " provider enabled = " + enabled);
             }
 
-            // fused and passive provider never get public updates for legacy reasons
-            if (!FUSED_PROVIDER.equals(mName) && !PASSIVE_PROVIDER.equals(mName)) {
-                // update LOCATION_PROVIDERS_ALLOWED for best effort backwards compatibility
-                mSettingsHelper.setLocationProviderAllowed(mName, enabled, userId);
-
-                Intent intent = new Intent(LocationManager.PROVIDERS_CHANGED_ACTION)
-                        .putExtra(LocationManager.EXTRA_PROVIDER_NAME, mName)
-                        .putExtra(LocationManager.EXTRA_PROVIDER_ENABLED, enabled)
-                        .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY)
-                        .addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-                mContext.sendBroadcastAsUser(intent, UserHandle.of(userId));
+            // clear last locations if we become disabled and if not servicing a bypass request
+            if (!enabled && !mProvider.getCurrentRequest().locationSettingsIgnored) {
+                mLastLocation.put(userId, null);
+                mLastCoarseLocation.put(userId, null);
             }
 
-            if (!enabled) {
-                // If any provider has been disabled, clear all last locations for all
-                // providers. This is to be on the safe side in case a provider has location
-                // derived from this disabled provider.
-                mLastLocation.clear();
-                mLastLocationCoarseInterval.clear();
+            // update LOCATION_PROVIDERS_ALLOWED for best effort backwards compatibility
+            mSettingsHelper.setLocationProviderAllowed(mName, enabled, userId);
+
+            // do not send change notifications if we just saw this user for the first time
+            if (wasEnabled != null) {
+                // fused and passive provider never get public updates for legacy reasons
+                if (!FUSED_PROVIDER.equals(mName) && !PASSIVE_PROVIDER.equals(mName)) {
+                    Intent intent = new Intent(LocationManager.PROVIDERS_CHANGED_ACTION)
+                            .putExtra(LocationManager.EXTRA_PROVIDER_NAME, mName)
+                            .putExtra(LocationManager.EXTRA_PROVIDER_ENABLED, enabled)
+                            .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY)
+                            .addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+                    mContext.sendBroadcastAsUser(intent, UserHandle.of(userId));
+                }
             }
 
-            updateProviderEnabledLocked(this);
+            updateProviderEnabledLocked(this, enabled);
         }
 
         public void dump(FileDescriptor fd, IndentingPrintWriter pw, String[] args) {
@@ -853,7 +978,11 @@
 
                 pw.increaseIndent();
 
-                pw.println("enabled=" + isEnabled());
+                // for now we only dump for the parent user
+                int userId = mUserInfoHelper.getCurrentUserIds()[0];
+                pw.println("last location=" + mLastLocation.get(userId));
+                pw.println("last coarse location=" + mLastCoarseLocation.get(userId));
+                pw.println("enabled=" + isEnabled(userId));
             }
 
             mProvider.dump(fd, pw, args);
@@ -1002,7 +1131,8 @@
                     if (manager == null) {
                         continue;
                     }
-                    if (!manager.isEnabled() && !isSettingsExempt(updateRecord)) {
+                    if (!manager.isEnabled(UserHandle.getUserId(mCallerIdentity.mUid))
+                            && !isSettingsExempt(updateRecord)) {
                         continue;
                     }
 
@@ -1322,7 +1452,7 @@
         }
 
         throw new SecurityException("uid " + Binder.getCallingUid() + " does not have "
-            + ACCESS_COARSE_LOCATION + " or " + ACCESS_FINE_LOCATION + ".");
+                + ACCESS_COARSE_LOCATION + " or " + ACCESS_FINE_LOCATION + ".");
     }
 
     private void enforceCallingOrSelfPackageName(String packageName) {
@@ -1418,7 +1548,7 @@
                 if (FUSED_PROVIDER.equals(name)) {
                     continue;
                 }
-                if (enabledOnly && !manager.isEnabled()) {
+                if (enabledOnly && !manager.isEnabled(UserHandle.getCallingUserId())) {
                     continue;
                 }
                 if (criteria != null
@@ -1460,15 +1590,12 @@
     }
 
     @GuardedBy("mLock")
-    private void updateProviderEnabledLocked(LocationProviderManager manager) {
-        boolean enabled = manager.isEnabled();
-
+    private void updateProviderEnabledLocked(LocationProviderManager manager, boolean enabled) {
         ArrayList<Receiver> deadReceivers = null;
-
         ArrayList<UpdateRecord> records = mRecordsByProvider.get(manager.getName());
         if (records != null) {
             for (UpdateRecord record : records) {
-                if (!mUserInfoHelper.isCurrentUserOrProfile(
+                if (!mUserInfoHelper.isCurrentUserId(
                         UserHandle.getUserId(record.mReceiver.mCallerIdentity.mUid))) {
                     continue;
                 }
@@ -1526,8 +1653,8 @@
             // initialize the low power mode to true and set to false if any of the records requires
             providerRequest.setLowPowerMode(true);
             for (UpdateRecord record : records) {
-                if (!mUserInfoHelper.isCurrentUserOrProfile(
-                        UserHandle.getUserId(record.mReceiver.mCallerIdentity.mUid))) {
+                int userId = UserHandle.getUserId(record.mReceiver.mCallerIdentity.mUid);
+                if (!mUserInfoHelper.isCurrentUserId(userId)) {
                     continue;
                 }
                 if (!checkLocationAccess(
@@ -1539,7 +1666,7 @@
                 }
                 final boolean isBatterySaverDisablingLocation = shouldThrottleRequests
                         || (isForegroundOnlyMode && !record.mIsForegroundUid);
-                if (!manager.isEnabled() || isBatterySaverDisablingLocation) {
+                if (!manager.isEnabled(userId) || isBatterySaverDisablingLocation) {
                     if (isSettingsExempt(record)) {
                         providerRequest.setLocationSettingsIgnored(true);
                         providerRequest.setLowPowerMode(false);
@@ -1585,7 +1712,7 @@
                 // TODO: overflow
                 long thresholdInterval = (providerRequest.getInterval() + 1000) * 3 / 2;
                 for (UpdateRecord record : records) {
-                    if (mUserInfoHelper.isCurrentUserOrProfile(
+                    if (mUserInfoHelper.isCurrentUserId(
                             UserHandle.getUserId(record.mReceiver.mCallerIdentity.mUid))) {
                         LocationRequest locationRequest = record.mRequest;
 
@@ -1695,19 +1822,16 @@
                 mStackTrace = new Throwable();
             }
 
-            ArrayList<UpdateRecord> records = mRecordsByProvider.get(provider);
-            if (records == null) {
-                records = new ArrayList<>();
-                mRecordsByProvider.put(provider, records);
-            }
+            ArrayList<UpdateRecord> records = mRecordsByProvider.computeIfAbsent(provider,
+                    k -> new ArrayList<>());
             if (!records.contains(this)) {
                 records.add(this);
             }
 
             // Update statistics for historical location requests by package/provider
             mRequestStatistics.startRequesting(
-                    mReceiver.mCallerIdentity.mPackageName, provider, request.getInterval(),
-                    mIsForegroundUid);
+                    mReceiver.mCallerIdentity.mPackageName, mReceiver.mCallerIdentity.mFeatureId,
+                    provider, request.getInterval(), mIsForegroundUid);
         }
 
         /**
@@ -1716,7 +1840,8 @@
         private void updateForeground(boolean isForeground) {
             mIsForegroundUid = isForeground;
             mRequestStatistics.updateForeground(
-                    mReceiver.mCallerIdentity.mPackageName, mProvider, isForeground);
+                    mReceiver.mCallerIdentity.mPackageName, mReceiver.mCallerIdentity.mFeatureId,
+                    mProvider, isForeground);
         }
 
         /**
@@ -1724,7 +1849,8 @@
          */
         private void disposeLocked(boolean removeReceiver) {
             String packageName = mReceiver.mCallerIdentity.mPackageName;
-            mRequestStatistics.stopRequesting(packageName, mProvider);
+            mRequestStatistics.stopRequesting(packageName, mReceiver.mCallerIdentity.mFeatureId,
+                    mProvider);
 
             mLocationUsageLogger.logLocationApiUsage(
                     LocationStatsEnums.USAGE_ENDED,
@@ -1759,6 +1885,10 @@
             StringBuilder b = new StringBuilder("UpdateRecord[");
             b.append(mProvider).append(" ");
             b.append(mReceiver.mCallerIdentity.mPackageName);
+            String featureId = mReceiver.mCallerIdentity.mFeatureId;
+            if (featureId != null) {
+                b.append(" ").append(featureId).append(" ");
+            }
             b.append("(").append(mReceiver.mCallerIdentity.mUid);
             if (mIsForegroundUid) {
                 b.append(" foreground");
@@ -1835,11 +1965,11 @@
                     break;
             }
             // throttle
-            if (sanitizedRequest.getInterval() < LocationFudger.FASTEST_INTERVAL_MS) {
-                sanitizedRequest.setInterval(LocationFudger.FASTEST_INTERVAL_MS);
+            if (sanitizedRequest.getInterval() < FASTEST_COARSE_INTERVAL_MS) {
+                sanitizedRequest.setInterval(FASTEST_COARSE_INTERVAL_MS);
             }
-            if (sanitizedRequest.getFastestInterval() < LocationFudger.FASTEST_INTERVAL_MS) {
-                sanitizedRequest.setFastestInterval(LocationFudger.FASTEST_INTERVAL_MS);
+            if (sanitizedRequest.getFastestInterval() < FASTEST_COARSE_INTERVAL_MS) {
+                sanitizedRequest.setFastestInterval(FASTEST_COARSE_INTERVAL_MS);
             }
         }
         // make getFastestInterval() the minimum of interval and fastest interval
@@ -1914,7 +2044,7 @@
                     receiver = getReceiverLocked(listener, pid, uid, packageName, featureId,
                             workSource, hideFromAppOps, listenerIdentifier);
                 }
-                requestLocationUpdatesLocked(sanitizedRequest, receiver, uid, packageName);
+                requestLocationUpdatesLocked(sanitizedRequest, receiver);
             } finally {
                 Binder.restoreCallingIdentity(identity);
             }
@@ -1922,8 +2052,7 @@
     }
 
     @GuardedBy("mLock")
-    private void requestLocationUpdatesLocked(LocationRequest request, Receiver receiver,
-            int uid, String packageName) {
+    private void requestLocationUpdatesLocked(LocationRequest request, Receiver receiver) {
         // Figure out the provider. Either its explicitly request (legacy use cases), or
         // use the fused provider
         if (request == null) request = DEFAULT_LOCATION_REQUEST;
@@ -1938,20 +2067,14 @@
         }
 
         UpdateRecord record = new UpdateRecord(name, request, receiver);
-        if (D) {
-            Log.d(TAG, "request " + Integer.toHexString(System.identityHashCode(receiver))
-                    + " " + name + " " + request + " from " + packageName + "(" + uid + " "
-                    + (record.mIsForegroundUid ? "foreground" : "background")
-                    + (isThrottlingExempt(receiver.mCallerIdentity)
-                    ? " [whitelisted]" : "") + ")");
-        }
 
         UpdateRecord oldRecord = receiver.mUpdateRecords.put(name, record);
         if (oldRecord != null) {
             oldRecord.disposeLocked(false);
         }
 
-        if (!manager.isEnabled() && !isSettingsExempt(record)) {
+        int userId = UserHandle.getUserId(receiver.mCallerIdentity.mUid);
+        if (!manager.isEnabled(userId) && !isSettingsExempt(record)) {
             // Notify the listener that updates are currently disabled - but only if the request
             // does not ignore location settings
             receiver.callProviderEnabledLocked(name, false);
@@ -2028,91 +2151,65 @@
     }
 
     @Override
-    public Location getLastLocation(LocationRequest r, String packageName, String featureId) {
+    public Location getLastLocation(LocationRequest request, String packageName, String featureId) {
+        if (request == null) {
+            request = DEFAULT_LOCATION_REQUEST;
+        }
+
         enforceCallingOrSelfLocationPermission();
         enforceCallingOrSelfPackageName(packageName);
 
-        synchronized (mLock) {
-            LocationRequest request = r != null ? r : DEFAULT_LOCATION_REQUEST;
-            int allowedResolutionLevel = getCallerAllowedResolutionLevel();
-            // no need to sanitize this request, as only the provider name is used
-
-            final int pid = Binder.getCallingPid();
-            final int uid = Binder.getCallingUid();
-            final long identity = Binder.clearCallingIdentity();
-            try {
-                if (mSettingsHelper.isLocationPackageBlacklisted(UserHandle.getUserId(uid),
-                        packageName)) {
-                    if (D) {
-                        Log.d(TAG, "not returning last loc for blacklisted app: "
-                                + packageName);
-                    }
-                    return null;
-                }
-
-                // Figure out the provider. Either its explicitly request (deprecated API's),
-                // or use the fused provider
-                String name = request.getProvider();
-                if (name == null) name = LocationManager.FUSED_PROVIDER;
-                LocationProviderManager manager = getLocationProviderManager(name);
-                if (manager == null) return null;
-
-                // only the current user or location providers may get location this way
-                if (!mUserInfoHelper.isCurrentUserOrProfile(UserHandle.getUserId(uid))
-                        && !mLocalService.isProviderPackage(packageName)) {
-                    return null;
-                }
-
-                if (!manager.isEnabled()) {
-                    return null;
-                }
-
-                Location location;
-                if (allowedResolutionLevel < RESOLUTION_LEVEL_FINE) {
-                    // Make sure that an app with coarse permissions can't get frequent location
-                    // updates by calling LocationManager.getLastKnownLocation repeatedly.
-                    location = mLastLocationCoarseInterval.get(name);
-                } else {
-                    location = mLastLocation.get(name);
-                }
-                if (location == null) {
-                    return null;
-                }
-
-                // Don't return stale location to apps with foreground-only location permission.
-                String op = resolutionLevelToOpStr(allowedResolutionLevel);
-                long locationAgeMs = TimeUnit.NANOSECONDS.toMillis(
-                        SystemClock.elapsedRealtime() - location.getElapsedRealtimeNanos());
-                if (locationAgeMs > mSettingsHelper.getMaxLastLocationAgeMs()
-                        && (mAppOps.unsafeCheckOp(op, uid, packageName)
-                        == AppOpsManager.MODE_FOREGROUND)) {
-                    return null;
-                }
-
-                Location lastLocation = null;
-                if (allowedResolutionLevel < RESOLUTION_LEVEL_FINE) {
-                    Location noGPSLocation = location.getExtraLocation(
-                            Location.EXTRA_NO_GPS_LOCATION);
-                    if (noGPSLocation != null) {
-                        lastLocation = new Location(mLocationFudger.getOrCreate(noGPSLocation));
-                    }
-                } else {
-                    lastLocation = new Location(location);
-                }
-                // Don't report location access if there is no last location to deliver.
-                if (lastLocation != null) {
-                    if (!reportLocationAccessNoThrow(pid, uid, packageName, featureId,
-                            allowedResolutionLevel, null)) {
-                        if (D) {
-                            Log.d(TAG, "not returning last loc for no op app: " + packageName);
-                        }
-                        lastLocation = null;
-                    }
-                }
-                return lastLocation;
-            } finally {
-                Binder.restoreCallingIdentity(identity);
+        int allowedResolutionLevel = getCallerAllowedResolutionLevel();
+        if (!reportLocationAccessNoThrow(Binder.getCallingPid(), Binder.getCallingUid(),
+                packageName, featureId, allowedResolutionLevel, null)) {
+            if (D) {
+                Log.d(TAG, "not returning last loc for no op app: " + packageName);
             }
+            return null;
+        }
+
+        int userId = UserHandle.getCallingUserId();
+
+        if (mSettingsHelper.isLocationPackageBlacklisted(userId, packageName)) {
+            return null;
+        }
+
+        if (!mUserInfoHelper.isCurrentUserId(userId)) {
+            return null;
+        }
+
+        synchronized (mLock) {
+            LocationProviderManager manager = getLocationProviderManager(request.getProvider());
+            if (manager == null) {
+                return null;
+            }
+
+            if (!manager.isEnabled(userId) && !request.isLocationSettingsIgnored()) {
+                return null;
+            }
+
+            Location location;
+            if (allowedResolutionLevel < RESOLUTION_LEVEL_FINE) {
+                location = manager.getLastCoarseLocation(userId);
+            } else {
+                location = manager.getLastFineLocation(userId);
+            }
+            if (location == null) {
+                return null;
+            }
+
+            // Don't return stale location to apps with foreground-only location permission.
+            String op = resolutionLevelToOpStr(allowedResolutionLevel);
+            long locationAgeMs = NANOSECONDS.toMillis(
+                    SystemClock.elapsedRealtime() - location.getElapsedRealtimeNanos());
+            if (locationAgeMs > mSettingsHelper.getMaxLastLocationAgeMs()
+                    && (mAppOps.unsafeCheckOp(op, Binder.getCallingUid(), packageName)
+                    == AppOpsManager.MODE_FOREGROUND)) {
+                return null;
+            }
+
+            // make a defensive copy - the client could be in the same process as us
+            return new Location(location);
         }
     }
 
@@ -2123,7 +2220,7 @@
         // side effect of validating locationRequest and packageName
         Location lastLocation = getLastLocation(locationRequest, packageName, featureId);
         if (lastLocation != null) {
-            long locationAgeMs = TimeUnit.NANOSECONDS.toMillis(
+            long locationAgeMs = NANOSECONDS.toMillis(
                     SystemClock.elapsedRealtimeNanos() - lastLocation.getElapsedRealtimeNanos());
 
             if (locationAgeMs < MAX_CURRENT_LOCATION_AGE_MS) {
@@ -2158,38 +2255,36 @@
     @Override
     public LocationTime getGnssTimeMillis() {
         synchronized (mLock) {
-            Location location = mLastLocation.get(LocationManager.GPS_PROVIDER);
+            LocationProviderManager gpsManager = getLocationProviderManager(GPS_PROVIDER);
+            if (gpsManager == null) {
+                return null;
+            }
+
+            Location location = gpsManager.getLastFineLocation(UserHandle.getCallingUserId());
             if (location == null) {
                 return null;
             }
+
             long currentNanos = SystemClock.elapsedRealtimeNanos();
-            long deltaMs = (currentNanos - location.getElapsedRealtimeNanos()) / 1000000L;
+            long deltaMs = NANOSECONDS.toMillis(
+                    currentNanos - location.getElapsedRealtimeNanos());
             return new LocationTime(location.getTime() + deltaMs, currentNanos);
         }
     }
 
     @Override
-    public boolean injectLocation(Location location) {
-        mContext.enforceCallingPermission(android.Manifest.permission.LOCATION_HARDWARE,
-                "Location Hardware permission not granted to inject location");
-        mContext.enforceCallingPermission(ACCESS_FINE_LOCATION,
-                "Access Fine Location permission not granted to inject Location");
+    public void injectLocation(Location location) {
+        mContext.enforceCallingPermission(android.Manifest.permission.LOCATION_HARDWARE, null);
+        mContext.enforceCallingPermission(ACCESS_FINE_LOCATION, null);
 
+        Preconditions.checkArgument(location.isComplete());
+
+        int userId = UserHandle.getCallingUserId();
         synchronized (mLock) {
             LocationProviderManager manager = getLocationProviderManager(location.getProvider());
-            if (manager == null || !manager.isEnabled()) {
-                return false;
+            if (manager != null && manager.isEnabled(userId)) {
+                manager.injectLastLocation(Objects.requireNonNull(location), userId);
             }
-
-            // NOTE: If last location is already available, location is not injected.  If
-            // provider's normal source (like a GPS chipset) have already provided an output
-            // there is no need to inject this location.
-            if (mLastLocation.get(manager.getName()) != null) {
-                return false;
-            }
-
-            updateLastLocationLocked(location, manager.getName());
-            return true;
         }
     }
 
@@ -2286,12 +2381,14 @@
     }
 
     @Override
-    public boolean addGnssMeasurementsListener(IGnssMeasurementsListener listener,
-            String packageName, String featureId, String listenerIdentifier) {
+    public boolean addGnssMeasurementsListener(@Nullable GnssRequest request,
+            IGnssMeasurementsListener listener,
+            String packageName, String featureId,
+            String listenerIdentifier) {
         Objects.requireNonNull(listenerIdentifier);
 
         return mGnssManagerService != null && mGnssManagerService.addGnssMeasurementsListener(
-                listener, packageName, featureId, listenerIdentifier);
+                request, listener, packageName, featureId, listenerIdentifier);
     }
 
     @Override
@@ -2318,6 +2415,22 @@
     }
 
     @Override
+    public boolean addGnssAntennaInfoListener(IGnssAntennaInfoListener listener,
+            String packageName, String featureId, String listenerIdentifier) {
+        Objects.requireNonNull(listenerIdentifier);
+
+        return mGnssManagerService != null && mGnssManagerService.addGnssAntennaInfoListener(
+                listener, packageName, featureId, listenerIdentifier);
+    }
+
+    @Override
+    public void removeGnssAntennaInfoListener(IGnssAntennaInfoListener listener) {
+        if (mGnssManagerService != null) {
+            mGnssManagerService.removeGnssAntennaInfoListener(listener);
+        }
+    }
+
+    @Override
     public boolean addGnssNavigationMessageListener(IGnssNavigationMessageListener listener,
             String packageName, String featureId, String listenerIdentifier) {
         Objects.requireNonNull(listenerIdentifier);
@@ -2418,30 +2531,33 @@
     }
 
     @Override
-    public boolean isLocationEnabledForUser(int userId) {
+    public void setLocationEnabledForUser(boolean enabled, int userId) {
         if (UserHandle.getCallingUserId() != userId) {
             mContext.enforceCallingOrSelfPermission(Manifest.permission.INTERACT_ACROSS_USERS,
                     null);
         }
+        mContext.enforceCallingOrSelfPermission(Manifest.permission.WRITE_SECURE_SETTINGS,
+                "Requires WRITE_SECURE_SETTINGS permission");
+        mSettingsHelper.setLocationEnabled(enabled, userId);
+    }
 
+    @Override
+    public boolean isLocationEnabledForUser(int userId) {
+        userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
+                userId, false, false, "isLocationEnabledForUser", null);
         return mSettingsHelper.isLocationEnabled(userId);
     }
 
     @Override
-    public boolean isProviderEnabledForUser(String providerName, int userId) {
-        if (UserHandle.getCallingUserId() != userId) {
-            mContext.enforceCallingOrSelfPermission(Manifest.permission.INTERACT_ACROSS_USERS,
-                    null);
-        }
+    public boolean isProviderEnabledForUser(String provider, int userId) {
+        userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
+                userId, false, false, "isProviderEnabledForUser", null);
 
         // Fused provider is accessed indirectly via criteria rather than the provider-based APIs,
         // so we discourage its use
-        if (FUSED_PROVIDER.equals(providerName)) return false;
+        if (FUSED_PROVIDER.equals(provider)) return false;
 
-        synchronized (mLock) {
-            LocationProviderManager manager = getLocationProviderManager(providerName);
-            return manager != null && manager.isEnabled(userId);
-        }
+        return mLocalService.isProviderEnabledForUser(provider, userId);
     }
 
     @GuardedBy("mLock")
@@ -2454,7 +2570,7 @@
 
         // Check whether sufficient time has passed
         long minTime = record.mRealRequest.getFastestInterval();
-        long deltaMs = TimeUnit.NANOSECONDS.toMillis(
+        long deltaMs = NANOSECONDS.toMillis(
                 loc.getElapsedRealtimeNanos() - lastLoc.getElapsedRealtimeNanos());
         if (deltaMs < minTime - MAX_PROVIDER_SCHEDULING_JITTER_MS) {
             return false;
@@ -2478,62 +2594,23 @@
     }
 
     @GuardedBy("mLock")
-    private void handleLocationChangedLocked(Location location, LocationProviderManager manager) {
+    private void handleLocationChangedLocked(LocationProviderManager manager, Location location,
+            Location coarseLocation) {
         if (!mProviderManagers.contains(manager)) {
             Log.w(TAG, "received location from unknown provider: " + manager.getName());
             return;
         }
-        if (!location.isComplete()) {
-            Log.w(TAG, "dropping incomplete location from " + manager.getName() + " provider: "
-                    + location);
-            return;
-        }
 
         // notify passive provider
         if (manager != mPassiveManager) {
-            mPassiveManager.updateLocation(new Location(location));
+            mPassiveManager.updateLocation(location);
         }
 
-        if (D) Log.d(TAG, "incoming location: " + location);
         long now = SystemClock.elapsedRealtime();
 
-
-        // only update last location for locations that come from enabled providers
-        if (manager.isEnabled()) {
-            updateLastLocationLocked(location, manager.getName());
-        }
-
-        // Update last known coarse interval location if enough time has passed.
-        Location lastLocationCoarseInterval = mLastLocationCoarseInterval.get(
-                manager.getName());
-        if (lastLocationCoarseInterval == null) {
-            lastLocationCoarseInterval = new Location(location);
-
-            if (manager.isEnabled()) {
-                mLastLocationCoarseInterval.put(manager.getName(), lastLocationCoarseInterval);
-            }
-        }
-        long timeDeltaMs = TimeUnit.NANOSECONDS.toMillis(location.getElapsedRealtimeNanos()
-                - lastLocationCoarseInterval.getElapsedRealtimeNanos());
-        if (timeDeltaMs > LocationFudger.FASTEST_INTERVAL_MS) {
-            lastLocationCoarseInterval.set(location);
-        }
-        // Don't ever return a coarse location that is more recent than the allowed update
-        // interval (i.e. don't allow an app to keep registering and unregistering for
-        // location updates to overcome the minimum interval).
-        Location noGPSLocation =
-                lastLocationCoarseInterval.getExtraLocation(Location.EXTRA_NO_GPS_LOCATION);
-
-        // Skip if there are no UpdateRecords for this provider.
         ArrayList<UpdateRecord> records = mRecordsByProvider.get(manager.getName());
         if (records == null || records.size() == 0) return;
 
-        // Fetch coarse location
-        Location coarseLocation = null;
-        if (noGPSLocation != null) {
-            coarseLocation = mLocationFudger.getOrCreate(noGPSLocation);
-        }
-
         ArrayList<Receiver> deadReceivers = null;
         ArrayList<UpdateRecord> deadUpdateRecords = null;
 
@@ -2541,22 +2618,23 @@
         for (UpdateRecord r : records) {
             Receiver receiver = r.mReceiver;
             boolean receiverDead = false;
+            int userId = UserHandle.getUserId(receiver.mCallerIdentity.mUid);
 
-            if (!manager.isEnabled() && !isSettingsExempt(r)) {
+
+            if (!manager.isEnabled(userId) && !isSettingsExempt(r)) {
                 continue;
             }
 
-            int receiverUserId = UserHandle.getUserId(receiver.mCallerIdentity.mUid);
-            if (!mUserInfoHelper.isCurrentUserOrProfile(receiverUserId)
+            if (!mUserInfoHelper.isCurrentUserId(userId)
                     && !isProviderPackage(receiver.mCallerIdentity.mPackageName)) {
                 if (D) {
-                    Log.d(TAG, "skipping loc update for background user " + receiverUserId +
-                            " (app: " + receiver.mCallerIdentity.mPackageName + ")");
+                    Log.d(TAG, "skipping loc update for background user " + userId
+                            + " (app: " + receiver.mCallerIdentity.mPackageName + ")");
                 }
                 continue;
             }
 
-            if (mSettingsHelper.isLocationPackageBlacklisted(receiverUserId,
+            if (mSettingsHelper.isLocationPackageBlacklisted(userId,
                     receiver.mCallerIdentity.mPackageName)) {
                 if (D) {
                     Log.d(TAG, "skipping loc update for blacklisted app: " +
@@ -2571,39 +2649,30 @@
             } else {
                 notifyLocation = location;  // use fine location
             }
-            if (notifyLocation != null) {
-                Location lastLoc = r.mLastFixBroadcast;
-                if ((lastLoc == null)
-                        || shouldBroadcastSafeLocked(notifyLocation, lastLoc, r, now)) {
-                    if (lastLoc == null) {
-                        lastLoc = new Location(notifyLocation);
-                        r.mLastFixBroadcast = lastLoc;
-                    } else {
-                        lastLoc.set(notifyLocation);
+            if (shouldBroadcastSafeLocked(notifyLocation, r.mLastFixBroadcast, r, now)) {
+                r.mLastFixBroadcast = notifyLocation;
+                // Report location access before delivering location to the client. This will
+                // note location delivery to appOps, so it should be called only when a
+                // location is really being delivered to the client.
+                if (!reportLocationAccessNoThrow(
+                        receiver.mCallerIdentity.mPid,
+                        receiver.mCallerIdentity.mUid,
+                        receiver.mCallerIdentity.mPackageName,
+                        receiver.mCallerIdentity.mFeatureId,
+                        receiver.mAllowedResolutionLevel,
+                        "Location sent to " + receiver.mCallerIdentity.mListenerIdentifier)) {
+                    if (D) {
+                        Log.d(TAG, "skipping loc update for no op app: "
+                                + receiver.mCallerIdentity.mPackageName);
                     }
-                    // Report location access before delivering location to the client. This will
-                    // note location delivery to appOps, so it should be called only when a
-                    // location is really being delivered to the client.
-                    if (!reportLocationAccessNoThrow(
-                            receiver.mCallerIdentity.mPid,
-                            receiver.mCallerIdentity.mUid,
-                            receiver.mCallerIdentity.mPackageName,
-                            receiver.mCallerIdentity.mFeatureId,
-                            receiver.mAllowedResolutionLevel,
-                            "Location sent to " + receiver.mCallerIdentity.mListenerIdentifier)) {
-                        if (D) {
-                            Log.d(TAG, "skipping loc update for no op app: "
-                                    + receiver.mCallerIdentity.mPackageName);
-                        }
-                        continue;
-                    }
-                    if (!receiver.callLocationChangedLocked(notifyLocation)) {
-                        Slog.w(TAG, "RemoteException calling onLocationChanged on "
-                                + receiver);
-                        receiverDead = true;
-                    }
-                    r.mRealRequest.decrementNumUpdates();
+                    continue;
                 }
+                if (!receiver.callLocationChangedLocked(notifyLocation)) {
+                    Log.w(TAG, "RemoteException calling onLocationChanged on "
+                            + receiver);
+                    receiverDead = true;
+                }
+                r.mRealRequest.decrementNumUpdates();
             }
 
             // track expired records
@@ -2640,30 +2709,6 @@
         }
     }
 
-    @GuardedBy("mLock")
-    private void updateLastLocationLocked(Location location, String provider) {
-        Location noGPSLocation = location.getExtraLocation(Location.EXTRA_NO_GPS_LOCATION);
-        Location lastNoGPSLocation;
-        Location lastLocation = mLastLocation.get(provider);
-        if (lastLocation == null) {
-            lastLocation = new Location(provider);
-            mLastLocation.put(provider, lastLocation);
-        } else {
-            lastNoGPSLocation = lastLocation.getExtraLocation(Location.EXTRA_NO_GPS_LOCATION);
-            if (noGPSLocation == null && lastNoGPSLocation != null) {
-                // New location has no no-GPS location: adopt last no-GPS location. This is set
-                // directly into location because we do not want to notify COARSE clients.
-                Bundle extras = location.getExtras();
-                if (extras == null) {
-                    extras = new Bundle();
-                }
-                extras.putParcelable(Location.EXTRA_NO_GPS_LOCATION, lastNoGPSLocation);
-                location.setExtras(extras);
-            }
-        }
-        lastLocation.set(location);
-    }
-
     // Geocoder
 
     @Override
@@ -2733,14 +2778,15 @@
             manager.setMockProvider(null);
             if (!manager.hasProvider()) {
                 mProviderManagers.remove(manager);
-                mLastLocation.remove(manager.getName());
-                mLastLocationCoarseInterval.remove(manager.getName());
             }
         }
     }
 
     @Override
     public void setTestProviderLocation(String provider, Location location, String packageName) {
+        Preconditions.checkArgument(location.isComplete(),
+                "incomplete location object, missing timestamp or accuracy?");
+
         if (mAppOps.checkOp(AppOpsManager.OP_MOCK_LOCATION, Binder.getCallingUid(), packageName)
                 != AppOpsManager.MODE_ALLOWED) {
             return;
@@ -2841,31 +2887,17 @@
 
             ipw.println("Historical Records by Provider:");
             ipw.increaseIndent();
-            TreeMap<PackageProviderKey, PackageStatistics> sorted = new TreeMap<>();
-            sorted.putAll(mRequestStatistics.statistics);
+            TreeMap<PackageProviderKey, PackageStatistics> sorted = new TreeMap<>(
+                    mRequestStatistics.statistics);
             for (Map.Entry<PackageProviderKey, PackageStatistics> entry
                     : sorted.entrySet()) {
                 PackageProviderKey key = entry.getKey();
-                ipw.println(key.providerName + ": " + key.packageName + ": " + entry.getValue());
+                ipw.println(key.mPackageName + ": " + key.mProviderName + ": " + entry.getValue());
             }
             ipw.decreaseIndent();
 
             mRequestStatistics.history.dump(ipw);
 
-            ipw.println("Last Known Locations:");
-            ipw.increaseIndent();
-            for (Map.Entry<String, Location> entry : mLastLocation.entrySet()) {
-                ipw.println(entry.getKey() + ": " + entry.getValue());
-            }
-            ipw.decreaseIndent();
-
-            ipw.println("Last Known Coarse Locations:");
-            ipw.increaseIndent();
-            for (Map.Entry<String, Location> entry : mLastLocationCoarseInterval.entrySet()) {
-                ipw.println(entry.getKey() + ": " + entry.getValue());
-            }
-            ipw.decreaseIndent();
-
             if (mGeofenceManager != null) {
                 ipw.println("Geofences:");
                 ipw.increaseIndent();
@@ -2877,21 +2909,16 @@
                 ipw.println("Location Controller Extra Package: " + mExtraLocationControllerPackage
                         + (mExtraLocationControllerPackageEnabled ? " [enabled]" : "[disabled]"));
             }
+        }
 
-            if (mLocationFudger != null) {
-                ipw.println("Location Fudger:");
-                ipw.increaseIndent();
-                mLocationFudger.dump(fd, ipw, args);
-                ipw.decreaseIndent();
-            }
+        ipw.println("Location Providers:");
+        ipw.increaseIndent();
+        for (LocationProviderManager manager : mProviderManagers) {
+            manager.dump(fd, ipw, args);
+        }
+        ipw.decreaseIndent();
 
-            ipw.println("Location Providers:");
-            ipw.increaseIndent();
-            for (LocationProviderManager manager : mProviderManagers) {
-                manager.dump(fd, ipw, args);
-            }
-            ipw.decreaseIndent();
-
+        synchronized (mLock) {
             if (mGnssManagerService != null) {
                 ipw.println("GNSS:");
                 ipw.increaseIndent();
@@ -2916,6 +2943,18 @@
         }
 
         @Override
+        public boolean isProviderEnabledForUser(@NonNull String provider, int userId) {
+            synchronized (mLock) {
+                LocationProviderManager manager = getLocationProviderManager(provider);
+                if (manager == null) {
+                    return false;
+                }
+
+                return manager.isEnabled(userId);
+            }
+        }
+
+        @Override
         public boolean isProviderPackage(String packageName) {
             for (LocationProviderManager manager : mProviderManagers) {
                 if (manager.getPackages().contains(packageName)) {
diff --git a/services/core/java/com/android/server/LocationManagerServiceUtils.java b/services/core/java/com/android/server/LocationManagerServiceUtils.java
index 372e91e..ba1c81c 100644
--- a/services/core/java/com/android/server/LocationManagerServiceUtils.java
+++ b/services/core/java/com/android/server/LocationManagerServiceUtils.java
@@ -17,6 +17,7 @@
 package com.android.server;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.util.Log;
@@ -37,22 +38,31 @@
     /**
      * Listener that can be linked to a binder.
      * @param <TListener> listener type
+     * @param <TRequest> request type
      */
-    public static class LinkedListener<TListener> extends
+    public static class LinkedListener<TRequest, TListener> extends
             LinkedListenerBase {
+        @Nullable protected final TRequest mRequest;
         private final TListener mListener;
         private final Consumer<TListener> mBinderDeathCallback;
 
         public LinkedListener(
+                @Nullable TRequest request,
                 @NonNull TListener listener,
                 String listenerName,
                 @NonNull CallerIdentity callerIdentity,
                 @NonNull Consumer<TListener> binderDeathCallback) {
             super(callerIdentity, listenerName);
             mListener = listener;
+            mRequest = request;
             mBinderDeathCallback = binderDeathCallback;
         }
 
+        @Nullable
+        public TRequest getRequest() {
+            return mRequest;
+        }
+
         @Override
         public void binderDied() {
             if (D) Log.d(TAG, "Remote " + mListenerName + " died.");
diff --git a/services/core/java/com/android/server/PinnerService.java b/services/core/java/com/android/server/PinnerService.java
index 135f6f3..93859b3 100644
--- a/services/core/java/com/android/server/PinnerService.java
+++ b/services/core/java/com/android/server/PinnerService.java
@@ -103,7 +103,7 @@
     private static boolean PROP_PIN_CAMERA =
             DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_RUNTIME_NATIVE_BOOT,
                                     "pin_camera",
-                                    SystemProperties.getBoolean("pinner.pin_camera", true));
+                                    SystemProperties.getBoolean("pinner.pin_camera", false));
     // Pin using pinlist.meta when pinning apps.
     private static boolean PROP_PIN_PINLIST = SystemProperties.getBoolean(
             "pinner.use_pinlist", true);
@@ -272,10 +272,11 @@
     private void handlePinOnStart() {
         final String bootImage = SystemProperties.get("dalvik.vm.boot-image", "");
         String[] filesToPin = null;
-        if (bootImage.endsWith("apex.art")) {
-            // Use the files listed for that specific boot image
+        if (bootImage.endsWith("boot-image.prof")) {
+            // Use the files listed for that specific boot image.
+            // TODO: find a better way to know we're using the JIT zygote configuration.
             filesToPin = mContext.getResources().getStringArray(
-                  com.android.internal.R.array.config_apexBootImagePinnerServiceFiles);
+                  com.android.internal.R.array.config_jitzygoteBootImagePinnerServiceFiles);
         } else {
             // Files to pin come from the overlay and can be specified per-device config
             filesToPin = mContext.getResources().getStringArray(
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index a08bdb2..d86b223 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -28,6 +28,10 @@
 import static android.app.AppOpsManager.OP_READ_EXTERNAL_STORAGE;
 import static android.app.AppOpsManager.OP_REQUEST_INSTALL_PACKAGES;
 import static android.app.AppOpsManager.OP_WRITE_EXTERNAL_STORAGE;
+import static android.content.pm.PackageManager.MATCH_ANY_USER;
+import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE;
+import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
+import static android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 import static android.os.ParcelFileDescriptor.MODE_READ_WRITE;
 import static android.os.storage.OnObbStateChangeListener.ERROR_ALREADY_MOUNTED;
@@ -136,6 +140,7 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.app.IAppOpsCallback;
 import com.android.internal.app.IAppOpsService;
+import com.android.internal.content.PackageMonitor;
 import com.android.internal.os.AppFuseMount;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.os.FuseUnavailableMountException;
@@ -149,6 +154,7 @@
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.internal.util.Preconditions;
 import com.android.internal.widget.LockPatternUtils;
+import com.android.server.SystemService.TargetUser;
 import com.android.server.pm.Installer;
 import com.android.server.storage.AppFuseBridge;
 import com.android.server.storage.StorageSessionController;
@@ -184,6 +190,7 @@
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
+import java.util.Set;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -224,6 +231,7 @@
      * disables FuseDaemon. If {@code 0}, uses the default value from the build system.
      */
     private static final String FUSE_ENABLED = "fuse_enabled";
+    private static final boolean DEFAULT_FUSE_ENABLED = true;
 
     public static class Lifecycle extends SystemService {
         private StorageManagerService mStorageManagerService;
@@ -269,6 +277,11 @@
         public void onStopUser(int userHandle) {
             mStorageManagerService.onStopUser(userHandle);
         }
+
+        @Override
+        public void onStartUser(TargetUser user) {
+            mStorageManagerService.snapshotAndMonitorLegacyStorageAppOp(user.getUserHandle());
+        }
     }
 
     private static final boolean DEBUG_EVENTS = false;
@@ -342,9 +355,43 @@
      */
     private final Object mPackagesLock = new Object();
 
+    /**
+     * mLocalUnlockedUsers affects the return value of isUserUnlocked.  If
+     * any value in the array changes, then the binder cache for
+     * isUserUnlocked must be invalidated.  When adding mutating methods to
+     * WatchedLockedUsers, be sure to invalidate the cache in the new
+     * methods.
+     */
+    private class WatchedLockedUsers {
+        private int[] users = EmptyArray.INT;
+        public WatchedLockedUsers() {
+        }
+        public void append(int userId) {
+            users = ArrayUtils.appendInt(users, userId);
+            invalidateIsUserUnlockedCache();
+        }
+        public void remove(int userId) {
+            users = ArrayUtils.removeInt(users, userId);
+            invalidateIsUserUnlockedCache();
+        }
+        public boolean contains(int userId) {
+            return ArrayUtils.contains(users, userId);
+        }
+        public int[] all() {
+            return users;
+        }
+        @Override
+        public String toString() {
+            return Arrays.toString(users);
+        }
+        private void invalidateIsUserUnlockedCache() {
+            UserManager.invalidateIsUserUnlockedCache();
+        }
+    }
+
     /** Set of users that we know are unlocked. */
     @GuardedBy("mLock")
-    private int[] mLocalUnlockedUsers = EmptyArray.INT;
+    private WatchedLockedUsers mLocalUnlockedUsers = new WatchedLockedUsers();
     /** Set of users that system knows are unlocked. */
     @GuardedBy("mLock")
     private int[] mSystemUnlockedUsers = EmptyArray.INT;
@@ -543,6 +590,12 @@
 
     private final boolean mIsFuseEnabled;
 
+    @GuardedBy("mLock")
+    private final Set<Integer> mUidsWithLegacyExternalStorage = new ArraySet<>();
+    // Not guarded by lock, always used on the ActivityManager thread
+    private final Map<Integer, PackageMonitor> mPackageMonitorsForUser = new ArrayMap<>();
+
+
     class ObbState implements IBinder.DeathRecipient {
         public ObbState(String rawPath, String canonicalPath, int callingUid,
                 IObbActionListener token, int nonce, String volId) {
@@ -1110,6 +1163,10 @@
         } catch (Exception e) {
             Slog.wtf(TAG, e);
         }
+        PackageMonitor monitor = mPackageMonitorsForUser.remove(userId);
+        if (monitor != null) {
+            monitor.unregister();
+        }
     }
 
     private boolean supportsBlockCheckpoint() throws RemoteException {
@@ -1265,13 +1322,6 @@
                     vol.state = newState;
                     onVolumeStateChangedLocked(vol, oldState, newState);
                 }
-                try {
-                    if (vol.type == VolumeInfo.TYPE_PRIVATE && state == VolumeInfo.STATE_MOUNTED) {
-                        mInstaller.onPrivateVolumeMounted(vol.getFsUuid());
-                    }
-                } catch (Installer.InstallerException e) {
-                    Slog.i(TAG, "Failed when private volume mounted " + vol, e);
-                }
             }
         }
 
@@ -1623,7 +1673,7 @@
         // If there is no value in the property yet (first boot after data wipe), this value may be
         // incorrect until #updateFusePropFromSettings where we set the correct value and reboot if
         // different
-        mIsFuseEnabled = SystemProperties.getBoolean(PROP_FUSE, false);
+        mIsFuseEnabled = SystemProperties.getBoolean(PROP_FUSE, DEFAULT_FUSE_ENABLED);
         mContext = context;
         mResolver = mContext.getContentResolver();
         mCallbacks = new Callbacks(FgThread.get().getLooper());
@@ -1686,23 +1736,17 @@
      *  and updates PROP_FUSE (reboots if changed).
      */
     private void updateFusePropFromSettings() {
-        boolean defaultFuseFlag = false;
-        boolean settingsFuseFlag = SystemProperties.getBoolean(PROP_SETTINGS_FUSE, defaultFuseFlag);
-        Slog.d(TAG, "FUSE flags. Settings: " + settingsFuseFlag + ". Default: " + defaultFuseFlag);
-
-        if (TextUtils.isEmpty(SystemProperties.get(PROP_SETTINGS_FUSE))) {
-            // Set default value of PROP_SETTINGS_FUSE and PROP_FUSE if it
-            // is unset (neither true nor false).
-            // This happens only on the first boot after wiping data partition
-            SystemProperties.set(PROP_SETTINGS_FUSE, Boolean.toString(defaultFuseFlag));
-            SystemProperties.set(PROP_FUSE, Boolean.toString(defaultFuseFlag));
-            return;
-        }
+        boolean settingsFuseFlag = SystemProperties.getBoolean(PROP_SETTINGS_FUSE,
+                DEFAULT_FUSE_ENABLED);
+        Slog.d(TAG, "FUSE flags. Settings: " + settingsFuseFlag
+                + ". Default: " + DEFAULT_FUSE_ENABLED);
 
         if (mIsFuseEnabled != settingsFuseFlag) {
             Slog.i(TAG, "Toggling persist.sys.fuse to " + settingsFuseFlag);
+            // Set prop_fuse to match prop_settings_fuse because it is used by native daemons like
+            // init, zygote, installd and vold
             SystemProperties.set(PROP_FUSE, Boolean.toString(settingsFuseFlag));
-            // Perform hard reboot to kick policy into place
+            // Then perform hard reboot to kick policy into place
             mContext.getSystemService(PowerManager.class).reboot("fuse_prop");
         }
     }
@@ -1814,6 +1858,49 @@
         }
     }
 
+    private void updateLegacyStorageApps(String packageName, int uid, boolean hasLegacy) {
+        synchronized (mLock) {
+            if (hasLegacy) {
+                Slog.v(TAG, "Package " + packageName + " has legacy storage");
+                mUidsWithLegacyExternalStorage.add(uid);
+            } else {
+                // TODO(b/149391976): Handle shared user id. Check if there's any other
+                // installed app with legacy external storage before removing
+                Slog.v(TAG, "Package " + packageName + " does not have legacy storage");
+                mUidsWithLegacyExternalStorage.remove(uid);
+            }
+        }
+    }
+
+    private void snapshotAndMonitorLegacyStorageAppOp(UserHandle user) {
+        int userId = user.getIdentifier();
+
+        // TODO(b/149391976): Use mIAppOpsService.getPackagesForOps instead of iterating below
+        // It should improve performance but the AppOps method doesn't return any app here :(
+        // This operation currently takes about ~20ms on a freshly flashed device
+        for (ApplicationInfo ai : mPmInternal.getInstalledApplications(MATCH_DIRECT_BOOT_AWARE
+                        | MATCH_DIRECT_BOOT_UNAWARE | MATCH_UNINSTALLED_PACKAGES | MATCH_ANY_USER,
+                        userId, Process.myUid())) {
+            try {
+                boolean hasLegacy = mIAppOpsService.checkOperation(OP_LEGACY_STORAGE, ai.uid,
+                        ai.packageName) == MODE_ALLOWED;
+                updateLegacyStorageApps(ai.packageName, ai.uid, hasLegacy);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Failed to check legacy op for package " + ai.packageName, e);
+            }
+        }
+
+        PackageMonitor monitor = new PackageMonitor() {
+                @Override
+                public void onPackageRemoved(String packageName, int uid) {
+                    updateLegacyStorageApps(packageName, uid, false);
+                }
+            };
+        // TODO(b/149391976): Use different handler?
+        monitor.register(mContext, user, true, mHandler);
+        mPackageMonitorsForUser.put(userId, monitor);
+    }
+
     private static long getLastAccessTime(AppOpsManager manager,
             int uid, String packageName, int[] ops) {
         long maxTime = 0;
@@ -2033,8 +2120,6 @@
 
     private void unmount(VolumeInfo vol) {
         try {
-            mVold.unmount(vol.id);
-            mStorageSessionController.onVolumeUnmount(vol);
             try {
                 if (vol.type == VolumeInfo.TYPE_PRIVATE) {
                     mInstaller.onPrivateVolumeRemoved(vol.getFsUuid());
@@ -2042,6 +2127,8 @@
             } catch (Installer.InstallerException e) {
                 Slog.e(TAG, "Failed unmount mirror data", e);
             }
+            mVold.unmount(vol.id);
+            mStorageSessionController.onVolumeUnmount(vol);
         } catch (Exception e) {
             Slog.wtf(TAG, e);
         }
@@ -3042,7 +3129,7 @@
         }
 
         synchronized (mLock) {
-            mLocalUnlockedUsers = ArrayUtils.appendInt(mLocalUnlockedUsers, userId);
+            mLocalUnlockedUsers.append(userId);
         }
     }
 
@@ -3058,14 +3145,14 @@
         }
 
         synchronized (mLock) {
-            mLocalUnlockedUsers = ArrayUtils.removeInt(mLocalUnlockedUsers, userId);
+            mLocalUnlockedUsers.remove(userId);
         }
     }
 
     @Override
     public boolean isUserKeyUnlocked(int userId) {
         synchronized (mLock) {
-            return ArrayUtils.contains(mLocalUnlockedUsers, userId);
+            return mLocalUnlockedUsers.contains(userId);
         }
     }
 
@@ -3081,6 +3168,15 @@
 
         try {
             mVold.prepareUserStorage(volumeUuid, userId, serialNumber, flags);
+            // After preparing user storage, we should check if we should mount data mirror again,
+            // and we do it for user 0 only as we only need to do once for all users.
+            if (volumeUuid != null) {
+                final StorageManager storage = mContext.getSystemService(StorageManager.class);
+                VolumeInfo info = storage.findVolumeByUuid(volumeUuid);
+                if (info != null && userId == 0 && info.type == VolumeInfo.TYPE_PRIVATE) {
+                    mInstaller.tryMountDataMirror(volumeUuid);
+                }
+            }
         } catch (Exception e) {
             Slog.wtf(TAG, e);
         }
@@ -3242,7 +3338,7 @@
                         + " does not match calling user id " + userId);
             }
             try {
-                mVold.setupAppDir(appPath, matcher.group(1), callingUid);
+                mVold.setupAppDir(appPath, callingUid);
             } catch (RemoteException e) {
                 throw new IllegalStateException("Failed to prepare " + appPath + ": " + e);
             }
@@ -3944,7 +4040,7 @@
             if (mIsFuseEnabled && hasMtp) {
                 ApplicationInfo ai = mIPackageManager.getApplicationInfo(packageName,
                         0, UserHandle.getUserId(uid));
-                if (ai.isSignedWithPlatformKey()) {
+                if (ai != null && ai.isSignedWithPlatformKey()) {
                     // Platform processes hosting the MTP server should be able to write in Android/
                     return Zygote.MOUNT_EXTERNAL_ANDROID_WRITABLE;
                 }
@@ -3999,7 +4095,7 @@
             if (!hasLegacy && !mIsFuseEnabled) {
                 ApplicationInfo ai = mIPackageManager.getApplicationInfo(packageName,
                         0, UserHandle.getUserId(uid));
-                hasLegacy = ai.hasRequestedLegacyExternalStorage();
+                hasLegacy = (ai != null && ai.hasRequestedLegacyExternalStorage());
             }
 
             if (hasLegacy && hasWrite) {
@@ -4177,7 +4273,7 @@
             }
 
             pw.println();
-            pw.println("Local unlocked users: " + Arrays.toString(mLocalUnlockedUsers));
+            pw.println("Local unlocked users: " + mLocalUnlockedUsers);
             pw.println("System unlocked users: " + Arrays.toString(mSystemUnlockedUsers));
 
             final ContentResolver cr = mContext.getContentResolver();
@@ -4250,6 +4346,42 @@
             mPolicies.add(policy);
         }
 
+        /**
+         * Check if fuse is running in target user, if it's running then setup its obb directories.
+         * TODO: System server should store a list of active pids that obb is not mounted and use it.
+         */
+        @Override
+        public void prepareObbDirs(int userId, Set<String> packageList, String processName) {
+            String fuseRunningUsersList = SystemProperties.get("vold.fuse_running_users", "");
+            String[] fuseRunningUsers = fuseRunningUsersList.split(",");
+            boolean fuseReady = false;
+            String targetUserId = String.valueOf(userId);
+            for (String user : fuseRunningUsers) {
+                if (targetUserId.equals(user)) {
+                    fuseReady = true;
+                }
+            }
+            if (fuseReady) {
+                try {
+                    final IVold vold = IVold.Stub.asInterface(
+                            ServiceManager.getServiceOrThrow("vold"));
+                    for (String pkg : packageList) {
+                        final String obbDir =
+                                String.format("/storage/emulated/%d/Android/obb", userId);
+                        final String packageObbDir = String.format("%s/%s/", obbDir, pkg);
+
+                        // Create package obb dir if it doesn't exist.
+                        File file = new File(packageObbDir);
+                        if (!file.exists()) {
+                            vold.setupAppDir(packageObbDir, mPmInternal.getPackage(pkg).getUid());
+                        }
+                    }
+                } catch (ServiceManager.ServiceNotFoundException | RemoteException e) {
+                    Slog.e(TAG, "Unable to create obb directories for " + processName, e);
+                }
+            }
+        }
+
         @Override
         public void onExternalStoragePolicyChanged(int uid, String packageName) {
             final int mountMode = getExternalStorageMountMode(uid, packageName);
@@ -4306,6 +4438,32 @@
             mHandler.obtainMessage(H_RESET).sendToTarget();
         }
 
+        @Override
+        public boolean hasLegacyExternalStorage(int uid) {
+            synchronized (mLock) {
+                return mUidsWithLegacyExternalStorage.contains(uid);
+            }
+        }
+
+        @Override
+        public void prepareAppDataAfterInstall(String packageName, int uid) {
+            int userId = UserHandle.getUserId(uid);
+            final Environment.UserEnvironment userEnv = new Environment.UserEnvironment(userId);
+
+            // The installer may have downloaded OBBs for this newly installed application;
+            // make sure the OBB dir for the application is setup correctly, if it exists.
+            File[] packageObbDirs = userEnv.buildExternalStorageAppObbDirs(packageName);
+            for (File packageObbDir : packageObbDirs) {
+                try {
+                    mVold.fixupAppDir(packageObbDir.getCanonicalPath() + "/", uid);
+                } catch (IOException e) {
+                    Log.e(TAG, "Failed to get canonical path for " + packageName);
+                } catch (RemoteException e) {
+                    Log.e(TAG, "Failed to fixup app dir for " + packageName);
+                }
+            }
+        }
+
         public boolean hasExternalStorage(int uid, String packageName) {
             // No need to check for system uid. This avoids a deadlock between
             // PackageManagerService and AppOpsService.
@@ -4351,8 +4509,11 @@
                             // volumes, USB OTGs that are rarely mounted. The app will get the
                             // external_storage gid on next organic restart.
                             killAppForOpChange(code, uid, packageName);
-                            return;
                         }
+                        return;
+                    case OP_LEGACY_STORAGE:
+                        updateLegacyStorageApps(packageName, uid, mode == MODE_ALLOWED);
+                        return;
                 }
             }
 
diff --git a/services/core/java/com/android/server/SystemService.java b/services/core/java/com/android/server/SystemService.java
index e3c7325..aabe98b 100644
--- a/services/core/java/com/android/server/SystemService.java
+++ b/services/core/java/com/android/server/SystemService.java
@@ -168,6 +168,11 @@
         public int getUserIdentifier() {
             return mUserInfo.id;
         }
+
+        @Override
+        public String toString() {
+            return Integer.toString(getUserIdentifier());
+        }
     }
 
     /**
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index cbf6c27..f85fc28 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -61,6 +61,7 @@
 import android.telephony.CellSignalStrengthWcdma;
 import android.telephony.DataFailCause;
 import android.telephony.DisconnectCause;
+import android.telephony.DisplayInfo;
 import android.telephony.LocationAccessPolicy;
 import android.telephony.PhoneCapability;
 import android.telephony.PhoneStateListener;
@@ -205,6 +206,8 @@
 
     private boolean[] mUserMobileDataState;
 
+    private DisplayInfo[] mDisplayInfos;
+
     private SignalStrength[] mSignalStrength;
 
     private boolean[] mMessageWaiting;
@@ -285,16 +288,17 @@
                 PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR
                         | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
                         | PhoneStateListener.LISTEN_EMERGENCY_NUMBER_LIST
+                        | PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED;
+
+    static final int ENFORCE_PRECISE_PHONE_STATE_PERMISSION_MASK =
+                PhoneStateListener.LISTEN_PRECISE_CALL_STATE
+                        | PhoneStateListener.LISTEN_PRECISE_DATA_CONNECTION_STATE
+                        | PhoneStateListener.LISTEN_CALL_DISCONNECT_CAUSES
+                        | PhoneStateListener.LISTEN_CALL_ATTRIBUTES_CHANGED
+                        | PhoneStateListener.LISTEN_IMS_CALL_DISCONNECT_CAUSES
                         | PhoneStateListener.LISTEN_REGISTRATION_FAILURE
                         | PhoneStateListener.LISTEN_BARRING_INFO;
 
-    static final int PRECISE_PHONE_STATE_PERMISSION_MASK =
-                PhoneStateListener.LISTEN_PRECISE_CALL_STATE
-                | PhoneStateListener.LISTEN_PRECISE_DATA_CONNECTION_STATE
-                | PhoneStateListener.LISTEN_CALL_DISCONNECT_CAUSES
-                | PhoneStateListener.LISTEN_CALL_ATTRIBUTES_CHANGED
-                | PhoneStateListener.LISTEN_IMS_CALL_DISCONNECT_CAUSES;
-
     static final int READ_ACTIVE_EMERGENCY_SESSION_PERMISSION_MASK =
             PhoneStateListener.LISTEN_OUTGOING_EMERGENCY_CALL
                     | PhoneStateListener.LISTEN_OUTGOING_EMERGENCY_SMS;
@@ -443,6 +447,7 @@
         mCallAttributes = copyOf(mCallAttributes, mNumPhones);
         mOutgoingCallEmergencyNumber = copyOf(mOutgoingCallEmergencyNumber, mNumPhones);
         mOutgoingSmsEmergencyNumber = copyOf(mOutgoingSmsEmergencyNumber, mNumPhones);
+        mDisplayInfos = copyOf(mDisplayInfos, mNumPhones);
 
         // ds -> ss switch.
         if (mNumPhones < oldNumPhones) {
@@ -482,6 +487,7 @@
             mBackgroundCallState[i] = PreciseCallState.PRECISE_CALL_STATE_IDLE;
             mPreciseDataConnectionStates.add(new HashMap<Integer, PreciseDataConnectionState>());
             mBarringInfo.add(i, new BarringInfo());
+            mDisplayInfos[i] = null;
         }
     }
 
@@ -540,6 +546,7 @@
         mOutgoingCallEmergencyNumber = new EmergencyNumber[numPhones];
         mOutgoingSmsEmergencyNumber = new EmergencyNumber[numPhones];
         mBarringInfo = new ArrayList<>();
+        mDisplayInfos = new DisplayInfo[numPhones];
         for (int i = 0; i < numPhones; i++) {
             mCallState[i] =  TelephonyManager.CALL_STATE_IDLE;
             mDataActivity[i] = TelephonyManager.DATA_ACTIVITY_NONE;
@@ -568,6 +575,7 @@
             mBackgroundCallState[i] = PreciseCallState.PRECISE_CALL_STATE_IDLE;
             mPreciseDataConnectionStates.add(new HashMap<Integer, PreciseDataConnectionState>());
             mBarringInfo.add(i, new BarringInfo());
+            mDisplayInfos[i] = null;
         }
 
         mAppOps = mContext.getSystemService(AppOpsManager.class);
@@ -978,6 +986,15 @@
                             remove(r.binder);
                         }
                     }
+                    if ((events & PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED) != 0) {
+                        try {
+                            if (mDisplayInfos[phoneId] != null) {
+                                r.callback.onDisplayInfoChanged(mDisplayInfos[phoneId]);
+                            }
+                        } catch (RemoteException ex) {
+                            remove(r.binder);
+                        }
+                    }
                     if ((events & PhoneStateListener.LISTEN_EMERGENCY_NUMBER_LIST) != 0) {
                         try {
                             r.callback.onEmergencyNumberListChanged(mEmergencyNumberList);
@@ -1501,6 +1518,45 @@
         }
     }
 
+    /**
+     * Notify display network info changed.
+     *
+     * @param phoneId Phone id
+     * @param subId Subscription id
+     * @param displayInfo Display network info
+     *
+     * @see PhoneStateListener#onDisplayInfoChanged(DisplayInfo)
+     */
+    public void notifyDisplayInfoChanged(int phoneId, int subId,
+                                         @NonNull DisplayInfo displayInfo) {
+        if (!checkNotifyPermission("notifyDisplayInfoChanged()")) {
+            return;
+        }
+        if (VDBG) {
+            log("notifyDisplayInfoChanged: PhoneId=" + phoneId
+                    + " subId=" + subId + " displayInfo=" + displayInfo);
+        }
+        synchronized (mRecords) {
+            if (validatePhoneId(phoneId)) {
+                if (mDisplayInfos[phoneId] != null) {
+                    mDisplayInfos[phoneId] = displayInfo;
+                    for (Record r : mRecords) {
+                        if (r.matchPhoneStateListenerEvent(
+                                PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED)
+                                && idMatch(r.subId, subId, phoneId)) {
+                            try {
+                                r.callback.onDisplayInfoChanged(displayInfo);
+                            } catch (RemoteException ex) {
+                                mRemoveList.add(r.binder);
+                            }
+                        }
+                    }
+                }
+            }
+            handleRemoveListLocked();
+        }
+    }
+
     public void notifyCallForwardingChanged(boolean cfi) {
         notifyCallForwardingChangedForSubscriber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, cfi);
     }
@@ -2535,7 +2591,7 @@
             }
         }
 
-        if ((events & PRECISE_PHONE_STATE_PERMISSION_MASK) != 0) {
+        if ((events & ENFORCE_PRECISE_PHONE_STATE_PERMISSION_MASK) != 0) {
             // check if calling app has either permission READ_PRECISE_PHONE_STATE
             // or with carrier privileges
             try {
@@ -2730,6 +2786,20 @@
             }
         }
 
+        if ((events & PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED) != 0) {
+            try {
+                if (VDBG) {
+                    log("checkPossibleMissNotify: onDisplayInfoChanged phoneId="
+                            + phoneId + " dpi=" + mDisplayInfos[phoneId]);
+                }
+                if (mDisplayInfos[phoneId] != null) {
+                    r.callback.onDisplayInfoChanged(mDisplayInfos[phoneId]);
+                }
+            } catch (RemoteException ex) {
+                mRemoveList.add(r.binder);
+            }
+        }
+
         if ((events & PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR) != 0) {
             try {
                 if (VDBG) {
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index b994e6c..6763c51 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -302,15 +302,19 @@
     private final ContentObserver mDarkThemeObserver = new ContentObserver(mHandler) {
         @Override
         public void onChange(boolean selfChange, Uri uri) {
-            int mode = Secure.getIntForUser(getContext().getContentResolver(), Secure.UI_NIGHT_MODE,
-                    mNightMode, 0);
-            if (mode == MODE_NIGHT_AUTO || mode == MODE_NIGHT_CUSTOM) {
-                mode = MODE_NIGHT_YES;
-            }
-            SystemProperties.set(SYSTEM_PROPERTY_DEVICE_THEME, Integer.toString(mode));
+            updateSystemProperties();
         }
     };
 
+    private void updateSystemProperties() {
+        int mode = Secure.getIntForUser(getContext().getContentResolver(), Secure.UI_NIGHT_MODE,
+                mNightMode, 0);
+        if (mode == MODE_NIGHT_AUTO || mode == MODE_NIGHT_CUSTOM) {
+            mode = MODE_NIGHT_YES;
+        }
+        SystemProperties.set(SYSTEM_PROPERTY_DEVICE_THEME, Integer.toString(mode));
+    }
+
     @Override
     public void onSwitchUser(int userHandle) {
         super.onSwitchUser(userHandle);
@@ -392,6 +396,7 @@
 
         context.getContentResolver().registerContentObserver(Secure.getUriFor(Secure.UI_NIGHT_MODE),
                 false, mDarkThemeObserver, 0);
+        updateSystemProperties();
     }
 
     @VisibleForTesting
@@ -1261,8 +1266,9 @@
             if (Sandman.shouldStartDockApp(getContext(), homeIntent)) {
                 try {
                     int result = ActivityTaskManager.getService().startActivityWithConfig(
-                            null, getContext().getBasePackageName(), homeIntent, null, null, null,
-                            0, 0, mConfiguration, null, UserHandle.USER_CURRENT);
+                            null, getContext().getBasePackageName(), getContext().getFeatureId(),
+                            homeIntent, null, null, null, 0, 0, mConfiguration, null,
+                            UserHandle.USER_CURRENT);
                     if (ActivityManager.isStartResultSuccessful(result)) {
                         dockAppStarted = true;
                     } else if (result != ActivityManager.START_INTENT_NOT_RESOLVED) {
diff --git a/services/core/java/com/android/server/UserspaceRebootLogger.java b/services/core/java/com/android/server/UserspaceRebootLogger.java
new file mode 100644
index 0000000..74f113f
--- /dev/null
+++ b/services/core/java/com/android/server/UserspaceRebootLogger.java
@@ -0,0 +1,136 @@
+/*
+ * 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;
+
+import static com.android.internal.util.FrameworkStatsLog.USERSPACE_REBOOT_REPORTED__OUTCOME__FAILED_SHUTDOWN_SEQUENCE_ABORTED;
+import static com.android.internal.util.FrameworkStatsLog.USERSPACE_REBOOT_REPORTED__OUTCOME__FAILED_USERDATA_REMOUNT;
+import static com.android.internal.util.FrameworkStatsLog.USERSPACE_REBOOT_REPORTED__OUTCOME__FAILED_USERSPACE_REBOOT_WATCHDOG_TRIGGERED;
+import static com.android.internal.util.FrameworkStatsLog.USERSPACE_REBOOT_REPORTED__OUTCOME__OUTCOME_UNKNOWN;
+import static com.android.internal.util.FrameworkStatsLog.USERSPACE_REBOOT_REPORTED__OUTCOME__SUCCESS;
+import static com.android.internal.util.FrameworkStatsLog.USERSPACE_REBOOT_REPORTED__USER_ENCRYPTION_STATE__LOCKED;
+import static com.android.internal.util.FrameworkStatsLog.USERSPACE_REBOOT_REPORTED__USER_ENCRYPTION_STATE__UNLOCKED;
+
+import android.os.SystemClock;
+import android.os.SystemProperties;
+import android.util.Slog;
+
+import com.android.internal.util.FrameworkStatsLog;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Utility class to help abstract logging {@code UserspaceRebootReported} atom.
+ */
+public final class UserspaceRebootLogger {
+
+    private static final String TAG = "UserspaceRebootLogger";
+
+    private static final String USERSPACE_REBOOT_SHOULD_LOG_PROPERTY =
+            "persist.sys.userspace_reboot.log.should_log";
+    private static final String USERSPACE_REBOOT_LAST_STARTED_PROPERTY =
+            "sys.userspace_reboot.log.last_started";
+    private static final String USERSPACE_REBOOT_LAST_FINISHED_PROPERTY =
+            "sys.userspace_reboot.log.last_finished";
+    private static final String BOOT_REASON_PROPERTY = "sys.boot.reason";
+
+    private UserspaceRebootLogger() {}
+
+    /**
+     * Modifies internal state to note that {@code UserspaceRebootReported} atom needs to be
+     * logged on the next successful boot.
+     */
+    public static void noteUserspaceRebootWasRequested() {
+        SystemProperties.set(USERSPACE_REBOOT_SHOULD_LOG_PROPERTY, "1");
+        SystemProperties.set(USERSPACE_REBOOT_LAST_STARTED_PROPERTY,
+                String.valueOf(SystemClock.elapsedRealtime()));
+    }
+
+    /**
+     * Updates internal state on boot after successful userspace reboot.
+     *
+     * <p>Should be called right before framework sets {@code sys.boot_completed} property.
+     */
+    public static void noteUserspaceRebootSuccess() {
+        SystemProperties.set(USERSPACE_REBOOT_LAST_FINISHED_PROPERTY,
+                String.valueOf(SystemClock.elapsedRealtime()));
+    }
+
+    /**
+     * Returns {@code true} if {@code UserspaceRebootReported} atom should be logged.
+     */
+    public static boolean shouldLogUserspaceRebootEvent() {
+        return SystemProperties.getBoolean(USERSPACE_REBOOT_SHOULD_LOG_PROPERTY, false);
+    }
+
+    /**
+     * Asynchronously logs {@code UserspaceRebootReported} on the given {@code executor}.
+     *
+     * <p>Should be called in the end of {@link
+     * com.android.server.am.ActivityManagerService#finishBooting()} method, after framework have
+     * tried to proactivelly unlock storage of the primary user.
+     */
+    public static void logEventAsync(boolean userUnlocked, Executor executor) {
+        final int outcome = computeOutcome();
+        final long durationMillis;
+        if (outcome == USERSPACE_REBOOT_REPORTED__OUTCOME__SUCCESS) {
+            durationMillis = SystemProperties.getLong(USERSPACE_REBOOT_LAST_FINISHED_PROPERTY, 0)
+                    - SystemProperties.getLong(USERSPACE_REBOOT_LAST_STARTED_PROPERTY, 0);
+        } else {
+            durationMillis = 0;
+        }
+        final int encryptionState =
+                userUnlocked
+                    ? USERSPACE_REBOOT_REPORTED__USER_ENCRYPTION_STATE__UNLOCKED
+                    : USERSPACE_REBOOT_REPORTED__USER_ENCRYPTION_STATE__LOCKED;
+        executor.execute(
+                () -> {
+                    Slog.i(TAG, "Logging UserspaceRebootReported atom: { outcome: " + outcome
+                            + " durationMillis: " + durationMillis + " encryptionState: "
+                            + encryptionState + " }");
+                    FrameworkStatsLog.write(FrameworkStatsLog.USERSPACE_REBOOT_REPORTED, outcome,
+                            durationMillis, encryptionState);
+                    SystemProperties.set(USERSPACE_REBOOT_SHOULD_LOG_PROPERTY, "");
+                });
+    }
+
+    private static int computeOutcome() {
+        if (SystemProperties.getLong(USERSPACE_REBOOT_LAST_STARTED_PROPERTY, -1) != -1) {
+            return USERSPACE_REBOOT_REPORTED__OUTCOME__SUCCESS;
+        }
+        String reason = SystemProperties.get(BOOT_REASON_PROPERTY, "");
+        if (reason.startsWith("reboot,")) {
+            reason = reason.substring("reboot".length());
+        }
+        switch (reason) {
+            case "userspace_failed,watchdog_fork":
+                // Since fork happens before shutdown sequence, attribute it to
+                // USERSPACE_REBOOT_REPORTED__OUTCOME__FAILED_SHUTDOWN_SEQUENCE_ABORTED.
+            case "userspace_failed,shutdown_aborted":
+                return USERSPACE_REBOOT_REPORTED__OUTCOME__FAILED_SHUTDOWN_SEQUENCE_ABORTED;
+            case "userspace_failed,init_user0_failed":
+                // init_user0 will fail if userdata wasn't remounted correctly, attribute to
+                // USERSPACE_REBOOT_REPORTED__OUTCOME__FAILED_USERDATA_REMOUNT.
+            case "mount_userdata_failed":
+                return USERSPACE_REBOOT_REPORTED__OUTCOME__FAILED_USERDATA_REMOUNT;
+            case "userspace_failed,watchdog_triggered":
+                return
+                    USERSPACE_REBOOT_REPORTED__OUTCOME__FAILED_USERSPACE_REBOOT_WATCHDOG_TRIGGERED;
+            default:
+                return USERSPACE_REBOOT_REPORTED__OUTCOME__OUTCOME_UNKNOWN;
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/VibratorService.java b/services/core/java/com/android/server/VibratorService.java
index f7d7d6c..0f1a652 100644
--- a/services/core/java/com/android/server/VibratorService.java
+++ b/services/core/java/com/android/server/VibratorService.java
@@ -42,11 +42,13 @@
 import android.os.IBinder;
 import android.os.IExternalVibratorService;
 import android.os.IVibratorService;
+import android.os.IVibratorStateListener;
 import android.os.PowerManager;
 import android.os.PowerManager.ServiceType;
 import android.os.PowerManagerInternal;
 import android.os.PowerSaveState;
 import android.os.Process;
+import android.os.RemoteCallbackList;
 import android.os.RemoteException;
 import android.os.ResultReceiver;
 import android.os.ServiceManager;
@@ -59,7 +61,6 @@
 import android.os.VibrationEffect;
 import android.os.Vibrator;
 import android.os.WorkSource;
-import android.provider.DeviceConfig;
 import android.provider.Settings;
 import android.provider.Settings.SettingNotFoundException;
 import android.util.DebugUtils;
@@ -86,7 +87,6 @@
     private static final String TAG = "VibratorService";
     private static final boolean DEBUG = false;
     private static final String EXTERNAL_VIBRATOR_SERVICE = "external_vibrator_service";
-    private static final String RAMPING_RINGER_ENABLED = "ramping_ringer_enabled";
 
     private static final long[] DOUBLE_CLICK_EFFECT_FALLBACK_TIMINGS = { 0, 30, 100, 30 };
 
@@ -166,7 +166,11 @@
     private ExternalVibration mCurrentExternalVibration;
     private boolean mVibratorUnderExternalControl;
     private boolean mLowPowerMode;
+    @GuardedBy("mLock")
     private boolean mIsVibrating;
+    @GuardedBy("mLock")
+    private final RemoteCallbackList<IVibratorStateListener> mVibratorStateListeners =
+                new RemoteCallbackList<>();
     private int mHapticFeedbackIntensity;
     private int mNotificationIntensity;
     private int mRingIntensity;
@@ -522,6 +526,75 @@
     }
 
     @Override // Binder call
+    public boolean isVibrating() {
+        if (!hasPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)) {
+            throw new SecurityException("Requires ACCESS_VIBRATOR_STATE permission");
+        }
+        synchronized (mLock) {
+            return mIsVibrating;
+        }
+    }
+
+    @GuardedBy("mLock")
+    private void notifyStateListenerLocked(IVibratorStateListener listener) {
+        try {
+            listener.onVibrating(mIsVibrating);
+        } catch (RemoteException | RuntimeException e) {
+            Slog.e(TAG, "Vibrator callback failed to call", e);
+        }
+    }
+
+    @GuardedBy("mLock")
+    private void notifyStateListenersLocked() {
+        final int length = mVibratorStateListeners.beginBroadcast();
+        try {
+            for (int i = 0; i < length; i++) {
+                final IVibratorStateListener listener =
+                        mVibratorStateListeners.getBroadcastItem(i);
+                notifyStateListenerLocked(listener);
+            }
+        } finally {
+            mVibratorStateListeners.finishBroadcast();
+        }
+    }
+
+    @Override // Binder call
+    public boolean registerVibratorStateListener(IVibratorStateListener listener) {
+        if (!hasPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)) {
+            throw new SecurityException("Requires ACCESS_VIBRATOR_STATE permission");
+        }
+        synchronized (mLock) {
+            final long token = Binder.clearCallingIdentity();
+            try {
+                if (!mVibratorStateListeners.register(listener)) {
+                    return false;
+                }
+                // Notify its callback after new client registered.
+                notifyStateListenerLocked(listener);
+                return true;
+            } finally {
+                Binder.restoreCallingIdentity(token);
+            }
+        }
+    }
+
+    @Override // Binder call
+    @GuardedBy("mLock")
+    public boolean unregisterVibratorStateListener(IVibratorStateListener listener) {
+        if (!hasPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)) {
+            throw new SecurityException("Requires ACCESS_VIBRATOR_STATE permission");
+        }
+        synchronized (mLock) {
+            final long token = Binder.clearCallingIdentity();
+            try {
+                return mVibratorStateListeners.unregister(listener);
+            } finally {
+                Binder.restoreCallingIdentity(token);
+            }
+        }
+    }
+
+    @Override // Binder call
     public boolean hasAmplitudeControl() {
         synchronized (mInputDeviceVibrators) {
             // Input device vibrators don't support amplitude controls yet, but are still used over
@@ -977,9 +1050,7 @@
                 mContext.getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, 0) != 0) {
             return ringerMode != AudioManager.RINGER_MODE_SILENT;
         } else if (Settings.Global.getInt(
-                    mContext.getContentResolver(), Settings.Global.APPLY_RAMPING_RINGER, 0) != 0
-                && DeviceConfig.getBoolean(
-                    DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_ENABLED, false)) {
+                    mContext.getContentResolver(), Settings.Global.APPLY_RAMPING_RINGER, 0) != 0) {
             return ringerMode != AudioManager.RINGER_MODE_SILENT;
         } else {
             return ringerMode == AudioManager.RINGER_MODE_VIBRATE;
@@ -1373,7 +1444,10 @@
             FrameworkStatsLog.write_non_chained(FrameworkStatsLog.VIBRATOR_STATE_CHANGED, uid, null,
                     FrameworkStatsLog.VIBRATOR_STATE_CHANGED__STATE__ON, millis);
             mCurVibUid = uid;
-            mIsVibrating = true;
+            if (!mIsVibrating) {
+                mIsVibrating = true;
+                notifyStateListenersLocked();
+            }
         } catch (RemoteException e) {
         }
     }
@@ -1387,7 +1461,10 @@
             } catch (RemoteException e) { }
             mCurVibUid = -1;
         }
-        mIsVibrating = false;
+        if (mIsVibrating) {
+            mIsVibrating = false;
+            notifyStateListenersLocked();
+        }
     }
 
     private void setVibratorUnderExternalControl(boolean externalControl) {
@@ -1414,6 +1491,8 @@
             pw.print("  mCurrentExternalVibration=" + mCurrentExternalVibration);
             pw.println("  mVibratorUnderExternalControl=" + mVibratorUnderExternalControl);
             pw.println("  mIsVibrating=" + mIsVibrating);
+            pw.println("  mVibratorStateListeners Count=" +
+                            mVibratorStateListeners.getRegisteredCallbackCount());
             pw.println("  mLowPowerMode=" + mLowPowerMode);
             pw.println("  mHapticFeedbackIntensity=" + mHapticFeedbackIntensity);
             pw.println("  mNotificationIntensity=" + mNotificationIntensity);
diff --git a/services/core/java/com/android/server/adb/AdbDebuggingManager.java b/services/core/java/com/android/server/adb/AdbDebuggingManager.java
index 1099413..f16e3ce 100644
--- a/services/core/java/com/android/server/adb/AdbDebuggingManager.java
+++ b/services/core/java/com/android/server/adb/AdbDebuggingManager.java
@@ -29,6 +29,7 @@
 import android.content.res.Resources;
 import android.database.ContentObserver;
 import android.debug.AdbProtoEnums;
+import android.debug.AdbTransportType;
 import android.net.LocalSocket;
 import android.net.LocalSocketAddress;
 import android.net.Uri;
@@ -722,13 +723,21 @@
     }
 
     /**
-     * When {@code enabled} is {@code true}, this allows ADB debugging and starts the ADB hanler
-     * thread. When {@code enabled} is {@code false}, this disallows ADB debugging and shuts
-     * down the handler thread.
+     * When {@code enabled} is {@code true}, this allows ADB debugging and starts the ADB handler
+     * thread. When {@code enabled} is {@code false}, this disallows ADB debugging for the given
+     * @{code transportType}. See {@link IAdbTransport} for all available transport types.
+     * If all transport types are disabled, the ADB handler thread will shut down.
      */
-    public void setAdbEnabled(boolean enabled) {
-        mHandler.sendEmptyMessage(enabled ? AdbDebuggingHandler.MESSAGE_ADB_ENABLED
-                                          : AdbDebuggingHandler.MESSAGE_ADB_DISABLED);
+    public void setAdbEnabled(boolean enabled, byte transportType) {
+        if (transportType == AdbTransportType.USB) {
+            mHandler.sendEmptyMessage(enabled ? AdbDebuggingHandler.MESSAGE_ADB_ENABLED
+                                              : AdbDebuggingHandler.MESSAGE_ADB_DISABLED);
+        } else if (transportType == AdbTransportType.WIFI) {
+            // TODO(joshuaduong): Not implemented
+        } else {
+            throw new IllegalArgumentException(
+                    "setAdbEnabled called with unimplemented transport type=" + transportType);
+        }
     }
 
     /**
diff --git a/services/core/java/com/android/server/adb/AdbService.java b/services/core/java/com/android/server/adb/AdbService.java
index c125b1b..f2a8615 100644
--- a/services/core/java/com/android/server/adb/AdbService.java
+++ b/services/core/java/com/android/server/adb/AdbService.java
@@ -15,19 +15,23 @@
  */
 package com.android.server.adb;
 
+import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
+
+import android.annotation.NonNull;
+import android.annotation.UserIdInt;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.database.ContentObserver;
 import android.debug.AdbManagerInternal;
+import android.debug.AdbTransportType;
 import android.debug.IAdbManager;
 import android.debug.IAdbTransport;
+import android.debug.PairDevice;
 import android.hardware.usb.UsbManager;
+import android.net.Uri;
 import android.os.Binder;
-import android.os.Handler;
 import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
 import android.os.RemoteException;
 import android.os.SystemProperties;
 import android.provider.Settings;
@@ -38,7 +42,6 @@
 import android.util.Slog;
 import android.util.proto.ProtoOutputStream;
 
-
 import com.android.internal.util.DumpUtils;
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.internal.util.dump.DualDumpOutputStream;
@@ -50,6 +53,7 @@
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.Collections;
+import java.util.Map;
 
 /**
  * The Android Debug Bridge (ADB) service. This controls the availability of ADB and authorization
@@ -77,7 +81,8 @@
             if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {
                 mAdbService.systemReady();
             } else if (phase == SystemService.PHASE_BOOT_COMPLETED) {
-                mAdbService.bootCompleted();
+                FgThread.getHandler().sendMessage(obtainMessage(
+                        AdbService::bootCompleted, mAdbService));
             }
         }
     }
@@ -94,8 +99,14 @@
         }
 
         @Override
-        public boolean isAdbEnabled() {
-            return mAdbEnabled;
+        public boolean isAdbEnabled(byte transportType) {
+            if (transportType == AdbTransportType.USB) {
+                return mIsAdbUsbEnabled;
+            } else if (transportType == AdbTransportType.WIFI) {
+                return mIsAdbWifiEnabled;
+            }
+            throw new IllegalArgumentException(
+                    "isAdbEnabled called with unimplemented transport type=" + transportType);
         }
 
         @Override
@@ -109,77 +120,60 @@
         }
     }
 
-    private final class AdbHandler extends Handler {
-        AdbHandler(Looper looper) {
-            super(looper);
-            try {
-                /*
-                 * Use the normal bootmode persistent prop to maintain state of adb across
-                 * all boot modes.
-                 */
-                mAdbEnabled = containsFunction(
-                        SystemProperties.get(USB_PERSISTENT_CONFIG_PROPERTY, ""),
-                        UsbManager.USB_FUNCTION_ADB);
+    private void initAdbState() {
+        try {
+            /*
+             * Use the normal bootmode persistent prop to maintain state of adb across
+             * all boot modes.
+             */
+            mIsAdbUsbEnabled = containsFunction(
+                    SystemProperties.get(USB_PERSISTENT_CONFIG_PROPERTY, ""),
+                    UsbManager.USB_FUNCTION_ADB);
+            // TODO(joshuaduong): Read the adb wifi state from a persistent system
+            // property (persist.sys.adb.wifi).
+            mIsAdbWifiEnabled = false;
 
-                // register observer to listen for settings changes
-                mContentResolver.registerContentObserver(
-                        Settings.Global.getUriFor(Settings.Global.ADB_ENABLED),
-                        false, new AdbSettingsObserver());
-            } catch (Exception e) {
-                Slog.e(TAG, "Error initializing AdbHandler", e);
-            }
-        }
-
-        private boolean containsFunction(String functions, String function) {
-            int index = functions.indexOf(function);
-            if (index < 0) return false;
-            if (index > 0 && functions.charAt(index - 1) != ',') return false;
-            int charAfter = index + function.length();
-            if (charAfter < functions.length() && functions.charAt(charAfter) != ',') return false;
-            return true;
-        }
-
-        public void sendMessage(int what, boolean arg) {
-            removeMessages(what);
-            Message m = Message.obtain(this, what);
-            m.arg1 = (arg ? 1 : 0);
-            sendMessage(m);
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MSG_ENABLE_ADB:
-                    setAdbEnabled(msg.arg1 == 1);
-                    break;
-                case MSG_BOOT_COMPLETED:
-                    if (mDebuggingManager != null) {
-                        mDebuggingManager.setAdbEnabled(mAdbEnabled);
-                    }
-                    break;
-            }
+            // register observer to listen for settings changes
+            mContentResolver.registerContentObserver(
+                    Settings.Global.getUriFor(Settings.Global.ADB_ENABLED),
+                    false, new AdbSettingsObserver());
+        } catch (Exception e) {
+            Slog.e(TAG, "Error in initAdbState", e);
         }
     }
 
+    private static boolean containsFunction(String functions, String function) {
+        int index = functions.indexOf(function);
+        if (index < 0) return false;
+        if (index > 0 && functions.charAt(index - 1) != ',') return false;
+        int charAfter = index + function.length();
+        if (charAfter < functions.length() && functions.charAt(charAfter) != ',') return false;
+        return true;
+    }
+
     private class AdbSettingsObserver extends ContentObserver {
+        private final Uri mAdbUsbUri = Settings.Global.getUriFor(Settings.Global.ADB_ENABLED);
+
         AdbSettingsObserver() {
             super(null);
         }
 
         @Override
-        public void onChange(boolean selfChange) {
-            boolean enable = (Settings.Global.getInt(mContentResolver,
-                    Settings.Global.ADB_ENABLED, 0) > 0);
-            mHandler.sendMessage(MSG_ENABLE_ADB, enable);
+        public void onChange(boolean selfChange, @NonNull Uri uri, @UserIdInt int userId) {
+            if (mAdbUsbUri.equals(uri)) {
+                boolean shouldEnable = (Settings.Global.getInt(mContentResolver,
+                        Settings.Global.ADB_ENABLED, 0) > 0);
+                FgThread.getHandler().sendMessage(obtainMessage(
+                        AdbService::setAdbEnabled, AdbService.this, shouldEnable,
+                            AdbTransportType.USB));
+            }
+            // TODO(joshuaduong): Add condition for WIFI transport
         }
     }
 
     private static final String TAG = "AdbService";
     private static final boolean DEBUG = false;
 
-    private static final int MSG_ENABLE_ADB = 1;
-    private static final int MSG_BOOT_COMPLETED = 2;
-
     /**
      * The persistent property which stores whether adb is enabled or not.
      * May also contain vendor-specific default functions for testing purposes.
@@ -188,10 +182,10 @@
 
     private final Context mContext;
     private final ContentResolver mContentResolver;
-    private final AdbService.AdbHandler mHandler;
     private final ArrayMap<IBinder, IAdbTransport> mTransports = new ArrayMap<>();
 
-    private boolean mAdbEnabled;
+    private boolean mIsAdbUsbEnabled;
+    private boolean mIsAdbWifiEnabled;
     private AdbDebuggingManager mDebuggingManager;
 
     private AdbService(Context context) {
@@ -204,8 +198,7 @@
             mDebuggingManager = new AdbDebuggingManager(context);
         }
 
-        mHandler = new AdbHandler(FgThread.get().getLooper());
-
+        initAdbState();
         LocalServices.addService(AdbManagerInternal.class, new AdbManagerInternalImpl());
     }
 
@@ -219,7 +212,7 @@
         // make sure the ADB_ENABLED setting value matches the current state
         try {
             Settings.Global.putInt(mContentResolver,
-                    Settings.Global.ADB_ENABLED, mAdbEnabled ? 1 : 0);
+                    Settings.Global.ADB_ENABLED, mIsAdbUsbEnabled ? 1 : 0);
         } catch (SecurityException e) {
             // If UserManager.DISALLOW_DEBUGGING_FEATURES is on, that this setting can't be changed.
             Slog.d(TAG, "ADB_ENABLED is restricted.");
@@ -231,7 +224,10 @@
      */
     public void bootCompleted() {
         if (DEBUG) Slog.d(TAG, "boot completed");
-        mHandler.sendEmptyMessage(MSG_BOOT_COMPLETED);
+        if (mDebuggingManager != null) {
+            mDebuggingManager.setAdbEnabled(mIsAdbUsbEnabled, AdbTransportType.USB);
+            mDebuggingManager.setAdbEnabled(mIsAdbWifiEnabled, AdbTransportType.WIFI);
+        }
     }
 
     @Override
@@ -285,24 +281,82 @@
                 PackageManager.FEATURE_CAMERA_ANY);
     }
 
-    private void setAdbEnabled(boolean enable) {
-        if (DEBUG) Slog.d(TAG, "setAdbEnabled(" + enable + "), mAdbEnabled=" + mAdbEnabled);
+    @Override
+    public void allowWirelessDebugging(boolean alwaysAllow, String bssid) {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEBUGGING, null);
+        // TODO(joshuaduong): NOT IMPLEMENTED
+    }
 
-        if (enable == mAdbEnabled) {
+    @Override
+    public void denyWirelessDebugging() {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEBUGGING, null);
+        // TODO(joshuaduong): NOT IMPLEMENTED
+    }
+
+    @Override
+    public Map<String, PairDevice> getPairedDevices() {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEBUGGING, null);
+        // TODO(joshuaduong): NOT IMPLEMENTED
+        return null;
+    }
+
+    @Override
+    public void unpairDevice(String fingerprint) {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEBUGGING, null);
+        // TODO(joshuaduong): NOT IMPLEMENTED
+    }
+
+    @Override
+    public void enablePairingByPairingCode() {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEBUGGING, null);
+        // TODO(joshuaduong): NOT IMPLEMENTED
+    }
+
+    @Override
+    public void enablePairingByQrCode(String serviceName, String password) {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEBUGGING, null);
+        // TODO(joshuaduong): NOT IMPLEMENTED
+    }
+
+    @Override
+    public void disablePairing() {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEBUGGING, null);
+        // TODO(joshuaduong): NOT IMPLEMENTED
+    }
+
+    @Override
+    public int getAdbWirelessPort() {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEBUGGING, null);
+        // TODO(joshuaduong): NOT IMPLEMENTED
+        return 0;
+    }
+
+    private void setAdbEnabled(boolean enable, byte transportType) {
+        if (DEBUG) {
+            Slog.d(TAG, "setAdbEnabled(" + enable + "), mIsAdbUsbEnabled=" + mIsAdbUsbEnabled
+                    + ", mIsAdbWifiEnabled=" + mIsAdbWifiEnabled + ", transportType="
+                        + transportType);
+        }
+
+        if (transportType == AdbTransportType.USB && enable != mIsAdbUsbEnabled) {
+            mIsAdbUsbEnabled = enable;
+        } else if (transportType == AdbTransportType.WIFI && enable != mIsAdbWifiEnabled) {
+            mIsAdbWifiEnabled = enable;
+        } else {
+            // No change
             return;
         }
-        mAdbEnabled = enable;
 
         for (IAdbTransport transport : mTransports.values()) {
             try {
-                transport.onAdbEnabled(enable);
+                transport.onAdbEnabled(enable, transportType);
             } catch (RemoteException e) {
                 Slog.w(TAG, "Unable to send onAdbEnabled to transport " + transport.toString());
             }
         }
 
         if (mDebuggingManager != null) {
-            mDebuggingManager.setAdbEnabled(enable);
+            mDebuggingManager.setAdbEnabled(enable, transportType);
         }
     }
 
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 982466d..50f43b5 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -49,6 +49,7 @@
 import android.app.PendingIntent;
 import android.app.Service;
 import android.app.ServiceStartArgs;
+import android.app.admin.DevicePolicyEventLogger;
 import android.appwidget.AppWidgetManagerInternal;
 import android.content.ComponentName;
 import android.content.ComponentName.WithComponentName;
@@ -79,6 +80,8 @@
 import android.os.TransactionTooLargeException;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.stats.devicepolicy.DevicePolicyEnums;
+import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.EventLog;
@@ -187,6 +190,9 @@
 
     AppWidgetManagerInternal mAppWidgetManagerInternal;
 
+    // white listed packageName.
+    ArraySet<String> mWhiteListAllowWhileInUsePermissionInFgs = new ArraySet<>();
+
     final Runnable mLastAnrDumpClearer = new Runnable() {
         @Override public void run() {
             synchronized (mAm) {
@@ -389,6 +395,20 @@
         AppStateTracker ast = LocalServices.getService(AppStateTracker.class);
         ast.addListener(new ForcedStandbyListener());
         mAppWidgetManagerInternal = LocalServices.getService(AppWidgetManagerInternal.class);
+        setWhiteListAllowWhileInUsePermissionInFgs();
+    }
+
+    private void setWhiteListAllowWhileInUsePermissionInFgs() {
+        final String attentionServicePackageName =
+                mAm.mContext.getPackageManager().getAttentionServicePackageName();
+        if (!TextUtils.isEmpty(attentionServicePackageName)) {
+            mWhiteListAllowWhileInUsePermissionInFgs.add(attentionServicePackageName);
+        }
+        final String systemCaptionsServicePackageName =
+                mAm.mContext.getPackageManager().getSystemCaptionsServicePackageName();
+        if (!TextUtils.isEmpty(systemCaptionsServicePackageName)) {
+            mWhiteListAllowWhileInUsePermissionInFgs.add(systemCaptionsServicePackageName);
+        }
     }
 
     ServiceRecord getServiceByNameLocked(ComponentName name, int callingUser) {
@@ -417,22 +437,23 @@
     }
 
     private boolean appRestrictedAnyInBackground(final int uid, final String packageName) {
-        final int mode = mAm.mAppOpsService.checkOperation(
+        final int mode = mAm.getAppOpsManager().checkOpNoThrow(
                 AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, uid, packageName);
         return (mode != AppOpsManager.MODE_ALLOWED);
     }
 
     ComponentName startServiceLocked(IApplicationThread caller, Intent service, String resolvedType,
-            int callingPid, int callingUid, boolean fgRequired, String callingPackage, final int userId)
+            int callingPid, int callingUid, boolean fgRequired, String callingPackage,
+            @Nullable String callingFeatureId, final int userId)
             throws TransactionTooLargeException {
         return startServiceLocked(caller, service, resolvedType, callingPid, callingUid, fgRequired,
-                callingPackage, userId, false);
+                callingPackage, callingFeatureId, userId, false);
     }
 
     ComponentName startServiceLocked(IApplicationThread caller, Intent service, String resolvedType,
             int callingPid, int callingUid, boolean fgRequired, String callingPackage,
-            final int userId, boolean allowBackgroundActivityStarts)
-            throws TransactionTooLargeException {
+            @Nullable String callingFeatureId, final int userId,
+            boolean allowBackgroundActivityStarts) throws TransactionTooLargeException {
         if (DEBUG_DELAYED_STARTS) Slog.v(TAG_SERVICE, "startService: " + service
                 + " type=" + resolvedType + " args=" + service.getExtras());
 
@@ -488,7 +509,7 @@
         // If this is a direct-to-foreground start, make sure it is allowed as per the app op.
         boolean forceSilentAbort = false;
         if (fgRequired) {
-            final int mode = mAm.mAppOpsService.checkOperation(
+            final int mode = mAm.getAppOpsManager().checkOpNoThrow(
                     AppOpsManager.OP_START_FOREGROUND, r.appInfo.uid, r.packageName);
             switch (mode) {
                 case AppOpsManager.MODE_ALLOWED:
@@ -566,7 +587,7 @@
         // review is completed.
 
         // XXX This is not dealing with fgRequired!
-        if (!requestStartTargetPermissionsReviewIfNeededLocked(r, callingPackage,
+        if (!requestStartTargetPermissionsReviewIfNeededLocked(r, callingPackage, callingFeatureId,
                 callingUid, service, callerFg, userId)) {
             return null;
         }
@@ -673,8 +694,8 @@
     }
 
     private boolean requestStartTargetPermissionsReviewIfNeededLocked(ServiceRecord r,
-            String callingPackage, int callingUid, Intent service, boolean callerFg,
-            final int userId) {
+            String callingPackage, @Nullable String callingFeatureId, int callingUid,
+            Intent service, boolean callerFg, final int userId) {
         if (mAm.getPackageManagerInternalLocked().isPermissionsReviewRequired(
                 r.packageName, r.userId)) {
 
@@ -686,7 +707,7 @@
             }
 
             IIntentSender target = mAm.mPendingIntentController.getIntentSender(
-                    ActivityManager.INTENT_SENDER_SERVICE, callingPackage,
+                    ActivityManager.INTENT_SENDER_SERVICE, callingPackage, callingFeatureId,
                     callingUid, userId, null, null, 0, new Intent[]{service},
                     new String[]{service.resolveType(mAm.mContext.getContentResolver())},
                     PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT
@@ -1287,7 +1308,7 @@
             }
             // Instant apps need permission to create foreground services.
             if (r.appInfo.isInstantApp()) {
-                final int mode = mAm.mAppOpsService.checkOperation(
+                final int mode = mAm.getAppOpsManager().checkOpNoThrow(
                         AppOpsManager.OP_INSTANT_APP_START_FOREGROUND,
                         r.appInfo.uid,
                         r.appInfo.packageName);
@@ -1354,7 +1375,7 @@
 
             try {
                 boolean ignoreForeground = false;
-                final int mode = mAm.mAppOpsService.checkOperation(
+                final int mode = mAm.getAppOpsManager().checkOpNoThrow(
                         AppOpsManager.OP_START_FOREGROUND, r.appInfo.uid, r.packageName);
                 switch (mode) {
                     case AppOpsManager.MODE_ALLOWED:
@@ -1893,6 +1914,8 @@
                 requestServiceBindingLocked(s, b.intent, callerFg, false);
             }
 
+            maybeLogBindCrossProfileService(userId, callingPackage, callerApp.info.uid);
+
             getServiceMapLocked(s.userId).ensureNotStartingBackgroundLocked(s);
 
         } finally {
@@ -1902,6 +1925,21 @@
         return 1;
     }
 
+    private void maybeLogBindCrossProfileService(
+            int userId, String callingPackage, int callingUid) {
+        if (UserHandle.isCore(callingUid)) {
+            return;
+        }
+        final int callingUserId = UserHandle.getCallingUserId();
+        if (callingUserId == userId
+                || !mAm.mUserController.isSameProfileGroup(callingUserId, userId)) {
+            return;
+        }
+        DevicePolicyEventLogger.createEvent(DevicePolicyEnums.BIND_CROSS_PROFILE_SERVICE)
+                .setStrings(callingPackage)
+                .write();
+    }
+
     void publishServiceLocked(ServiceRecord r, Intent intent, IBinder service) {
         final long origId = Binder.clearCallingIdentity();
         try {
@@ -2289,7 +2327,7 @@
                 return new ServiceLookupResult(null, r.permission);
             } else if (r.permission != null && callingPackage != null) {
                 final int opCode = AppOpsManager.permissionToOpCode(r.permission);
-                if (opCode != AppOpsManager.OP_NONE && mAm.mAppOpsService.checkOperation(
+                if (opCode != AppOpsManager.OP_NONE && mAm.getAppOpsManager().checkOpNoThrow(
                         opCode, callingUid, callingPackage) != AppOpsManager.MODE_ALLOWED) {
                     Slog.w(TAG, "Appop Denial: Accessing service " + r.shortInstanceName
                             + " from pid=" + callingPid
@@ -4633,6 +4671,12 @@
             return true;
         }
 
+        final boolean isWhiteListedPackage =
+                mWhiteListAllowWhileInUsePermissionInFgs.contains(callingPackage);
+        if (isWhiteListedPackage) {
+            return true;
+        }
+
         r.mInfoDenyWhileInUsePermissionInFgs =
                 "Background FGS start while-in-use permission restriction [callingPackage: "
                 + callingPackage
diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java
index fabe92db..8fbe923 100644
--- a/services/core/java/com/android/server/am/ActivityManagerConstants.java
+++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java
@@ -19,12 +19,16 @@
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_POWER_QUICK;
 
 import android.app.ActivityThread;
+import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.pm.UserInfo;
 import android.database.ContentObserver;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Handler;
+import android.os.UserHandle;
+import android.os.UserManager;
 import android.provider.DeviceConfig;
 import android.provider.DeviceConfig.OnPropertiesChangedListener;
 import android.provider.DeviceConfig.Properties;
@@ -33,6 +37,7 @@
 import android.util.ArraySet;
 import android.util.KeyValueListParser;
 import android.util.Slog;
+import android.util.SparseArray;
 
 import java.io.PrintWriter;
 import java.util.Arrays;
@@ -289,6 +294,12 @@
     // started, the restriction is on while-in-use permissions.)
     volatile boolean mFlagBackgroundFgsStartRestrictionEnabled = true;
 
+    /**
+     * UserId to Assistant ComponentName mapping.
+     * Per user Assistant ComponentName is from {@link android.provider.Settings.Secure#ASSISTANT}
+     */
+    SparseArray<ComponentName> mAssistants = new SparseArray<>();
+
     private final ActivityManagerService mService;
     private ContentResolver mResolver;
     private final KeyValueListParser mParser = new KeyValueListParser(',');
@@ -364,6 +375,8 @@
                 Settings.Global.getUriFor(
                         Settings.Global.FOREGROUND_SERVICE_STARTS_LOGGING_ENABLED);
 
+    private static final Uri ASSISTANT_URI = Settings.Secure.getUriFor(Settings.Secure.ASSISTANT);
+
     private static final Uri ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS_URI =
             Settings.Global.getUriFor(Settings.Global.ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS);
 
@@ -430,6 +443,8 @@
         mResolver.registerContentObserver(ACTIVITY_STARTS_LOGGING_ENABLED_URI, false, this);
         mResolver.registerContentObserver(FOREGROUND_SERVICE_STARTS_LOGGING_ENABLED_URI,
                 false, this);
+        mResolver.registerContentObserver(ASSISTANT_URI, false, this,
+                UserHandle.USER_ALL);
         if (mSystemServerAutomaticHeapDumpEnabled) {
             mResolver.registerContentObserver(ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS_URI,
                     false, this);
@@ -445,6 +460,7 @@
         // The following read from Settings.
         updateActivityStartsLoggingEnabled();
         updateForegroundServiceStartsLoggingEnabled();
+        updateAssistant();
     }
 
     private void loadDeviceConfigConstants() {
@@ -476,6 +492,8 @@
             updateForegroundServiceStartsLoggingEnabled();
         } else if (ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS_URI.equals(uri)) {
             updateEnableAutomaticSystemServerHeapDumps();
+        } else if (ASSISTANT_URI.equals(uri)) {
+            updateAssistant();
         }
     }
 
@@ -573,6 +591,31 @@
                 Settings.Global.FOREGROUND_SERVICE_STARTS_LOGGING_ENABLED, 1) == 1;
     }
 
+    private void updateAssistant() {
+        final List<UserInfo> users =
+                mService.mContext.getSystemService(UserManager.class).getUsers();
+        SparseArray<ComponentName> componentNames = new SparseArray<>();
+        for (int i = 0; i < users.size(); i++) {
+            final int userId = users.get(i).id;
+            final String str = Settings.Secure.getStringForUser(mResolver,
+                    Settings.Secure.ASSISTANT, userId);
+            if (!TextUtils.isEmpty(str)) {
+                componentNames.put(userId, ComponentName.unflattenFromString(str));
+            }
+        }
+        synchronized (mService) {
+            for (int i = 0; i < mAssistants.size(); i++) {
+                mService.mServices.mWhiteListAllowWhileInUsePermissionInFgs.remove(
+                        mAssistants.valueAt(i).getPackageName());
+            }
+            mAssistants = componentNames;
+            for (int i = 0; i < mAssistants.size(); i++) {
+                mService.mServices.mWhiteListAllowWhileInUsePermissionInFgs.add(
+                        mAssistants.valueAt(i).getPackageName());
+            }
+        }
+    }
+
     private void updateBackgroundFgsStartsRestriction() {
         mFlagBackgroundFgsStartRestrictionEnabled = DeviceConfig.getBoolean(
                 DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
@@ -581,9 +624,6 @@
     }
 
     private void updateOomAdjUpdatePolicy() {
-
-
-
         OOMADJ_UPDATE_QUICK = DeviceConfig.getInt(
                 DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                 KEY_OOMADJ_UPDATE_POLICY,
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 12b1cbf..6bf5aa3 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -278,6 +278,7 @@
 import android.provider.DeviceConfig.Properties;
 import android.provider.Settings;
 import android.server.ServerProtoEnums;
+import android.sysprop.InitProperties;
 import android.sysprop.VoldProperties;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
@@ -347,6 +348,7 @@
 import com.android.server.SystemService;
 import com.android.server.SystemServiceManager;
 import com.android.server.ThreadPriorityBooster;
+import com.android.server.UserspaceRebootLogger;
 import com.android.server.Watchdog;
 import com.android.server.am.ActivityManagerServiceDumpProcessesProto.UidObserverRegistrationProto;
 import com.android.server.appop.AppOpsService;
@@ -466,18 +468,9 @@
     // How long we wait for a launched process to attach to the activity manager
     // before we decide it's never going to come up for real.
     static final int PROC_START_TIMEOUT = 10*1000;
-    // How long we wait for an attached process to publish its content providers
-    // before we decide it must be hung.
-    static final int CONTENT_PROVIDER_PUBLISH_TIMEOUT = 10*1000;
-
     // How long we wait to kill an application zygote, after the last process using
     // it has gone away.
     static final int KILL_APP_ZYGOTE_DELAY_MS = 5 * 1000;
-    /**
-     * How long we wait for an provider to be published. Should be longer than
-     * {@link #CONTENT_PROVIDER_PUBLISH_TIMEOUT}.
-     */
-    static final int CONTENT_PROVIDER_WAIT_TIMEOUT = 20 * 1000;
 
     // How long we wait for a launched process to attach to the activity manager
     // before we decide it's never going to come up for real, when the process was
@@ -1052,6 +1045,11 @@
         }
 
         @Override
+        protected IntentFilter getIntentFilter(@NonNull BroadcastFilter input) {
+            return input;
+        }
+
+        @Override
         protected BroadcastFilter[] newArray(int size) {
             return new BroadcastFilter[size];
         }
@@ -1240,6 +1238,7 @@
      * Information about and control over application operations
      */
     final AppOpsService mAppOpsService;
+    private AppOpsManager mAppOpsManager;
 
     /**
      * List of initialization arguments to pass to all processes when binding applications to them.
@@ -2109,7 +2108,7 @@
                 new IAppOpsCallback.Stub() {
                     @Override public void opChanged(int op, int uid, String packageName) {
                         if (op == AppOpsManager.OP_RUN_IN_BACKGROUND && packageName != null) {
-                            if (mAppOpsService.checkOperation(op, uid, packageName)
+                            if (getAppOpsManager().checkOpNoThrow(op, uid, packageName)
                                     != AppOpsManager.MODE_ALLOWED) {
                                 runInBackgroundDisabled(uid);
                             }
@@ -2281,6 +2280,20 @@
         }
     }
 
+    private void maybeLogUserspaceRebootEvent() {
+        if (!UserspaceRebootLogger.shouldLogUserspaceRebootEvent()) {
+            return;
+        }
+        final int userId = mUserController.getCurrentUserId();
+        if (userId != UserHandle.USER_SYSTEM) {
+            // Only log for user0.
+            return;
+        }
+        // TODO(b/148767783): should we check all profiles under user0?
+        UserspaceRebootLogger.logEventAsync(StorageManager.isUserKeyUnlocked(userId),
+                BackgroundThread.getExecutor());
+    }
+
     /**
      * Encapsulates global settings related to hidden API enforcement behaviour, including tracking
      * the latest value via a content observer.
@@ -2400,6 +2413,13 @@
         }
     }
 
+    AppOpsManager getAppOpsManager() {
+        if (mAppOpsManager == null) {
+            mAppOpsManager = mContext.getSystemService(AppOpsManager.class);
+        }
+        return mAppOpsManager;
+    }
+
     /**
      * Provides the basic functionality for activity task related tests when a handler thread is
      * given to initialize the dependency members.
@@ -2617,7 +2637,7 @@
         mProcessCpuThread.start();
 
         mBatteryStatsService.publish();
-        mAppOpsService.publish(mContext);
+        mAppOpsService.publish();
         Slog.d("AppOps", "AppOpsService published");
         LocalServices.addService(ActivityManagerInternal.class, mInternal);
         mActivityTaskManager.onActivityManagerInternalAdded();
@@ -2908,7 +2928,7 @@
     @Override
     public void batterySendBroadcast(Intent intent) {
         synchronized (this) {
-            broadcastIntentLocked(null, null, intent, null, null, 0, null, null, null,
+            broadcastIntentLocked(null, null, null, intent, null, null, 0, null, null, null,
                     OP_NONE, null, false, false, -1, SYSTEM_UID, Binder.getCallingUid(),
                     Binder.getCallingPid(), UserHandle.USER_ALL);
         }
@@ -3512,30 +3532,56 @@
 
     }
 
+    /**
+     * @deprecated use {@link #startActivityWithFeature} instead
+     */
+    @Deprecated
     @Override
     public int startActivity(IApplicationThread caller, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
             int startFlags, ProfilerInfo profilerInfo, Bundle bOptions) {
-        return mActivityTaskManager.startActivity(caller, callingPackage, intent, resolvedType,
-                resultTo, resultWho, requestCode, startFlags, profilerInfo, bOptions);
+        return mActivityTaskManager.startActivity(caller, callingPackage, null, intent,
+                resolvedType, resultTo, resultWho, requestCode, startFlags, profilerInfo, bOptions);
     }
 
     @Override
+    public int startActivityWithFeature(IApplicationThread caller, String callingPackage,
+            String callingFeatureId, Intent intent, String resolvedType, IBinder resultTo,
+            String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo,
+            Bundle bOptions) {
+        return mActivityTaskManager.startActivity(caller, callingPackage, callingFeatureId, intent,
+                resolvedType, resultTo, resultWho, requestCode, startFlags, profilerInfo, bOptions);
+    }
+
+    /**
+     * @deprecated use {@link #startActivityAsUserWithFeature} instead
+     */
+    @Deprecated
+    @Override
     public final int startActivityAsUser(IApplicationThread caller, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
             int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId) {
+        return startActivityAsUserWithFeature(caller, callingPackage, null, intent, resolvedType,
+                resultTo, resultWho, requestCode, startFlags, profilerInfo, bOptions, userId);
+    }
 
-            return mActivityTaskManager.startActivityAsUser(caller, callingPackage, intent,
-                    resolvedType, resultTo, resultWho, requestCode, startFlags, profilerInfo,
-                    bOptions, userId);
+    @Override
+    public final int startActivityAsUserWithFeature(IApplicationThread caller,
+            String callingPackage, String callingFeatureId, Intent intent, String resolvedType,
+            IBinder resultTo, String resultWho, int requestCode, int startFlags,
+            ProfilerInfo profilerInfo, Bundle bOptions, int userId) {
+        return mActivityTaskManager.startActivityAsUser(caller, callingPackage,
+                    callingFeatureId, intent, resolvedType, resultTo, resultWho, requestCode,
+                    startFlags, profilerInfo, bOptions, userId);
     }
 
     WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage,
-            Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
-            int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId) {
-            return mActivityTaskManager.startActivityAndWait(caller, callingPackage, intent,
-                    resolvedType, resultTo, resultWho, requestCode, startFlags, profilerInfo,
-                    bOptions, userId);
+            @Nullable String callingFeatureId, Intent intent, String resolvedType, IBinder resultTo,
+            String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo,
+            Bundle bOptions, int userId) {
+            return mActivityTaskManager.startActivityAndWait(caller, callingPackage,
+                    callingFeatureId, intent, resolvedType, resultTo, resultWho, requestCode,
+                    startFlags, profilerInfo, bOptions, userId);
     }
 
     @Override
@@ -4106,12 +4152,12 @@
                     intent.putExtra(Intent.EXTRA_USER_HANDLE, resolvedUserId);
                     if (isInstantApp) {
                         intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName);
-                        broadcastIntentInPackage("android", SYSTEM_UID, uid, pid, intent, null,
-                                null, 0, null, null, permission.ACCESS_INSTANT_APPS, null, false,
-                                false, resolvedUserId, false);
+                        broadcastIntentInPackage("android", null, SYSTEM_UID, uid, pid, intent,
+                                null, null, 0, null, null, permission.ACCESS_INSTANT_APPS, null,
+                                false, false, resolvedUserId, false);
                     } else {
-                        broadcastIntentInPackage("android", SYSTEM_UID, uid, pid, intent, null,
-                                null, 0, null, null, null, null, false, false, resolvedUserId,
+                        broadcastIntentInPackage("android", null, SYSTEM_UID, uid, pid, intent,
+                                null, null, 0, null, null, null, null, false, false, resolvedUserId,
                                 false);
                     }
 
@@ -4559,7 +4605,7 @@
         }
         intent.putExtra(Intent.EXTRA_UID, uid);
         intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(uid));
-        broadcastIntentLocked(null, null, intent,
+        broadcastIntentLocked(null, null, null, intent,
                 null, null, 0, null, null, null, OP_NONE,
                 null, false, false, MY_PID, SYSTEM_UID, Binder.getCallingUid(),
                 Binder.getCallingPid(), UserHandle.getUserId(uid));
@@ -4816,7 +4862,7 @@
     }
 
     @GuardedBy("this")
-    private final boolean attachApplicationLocked(IApplicationThread thread,
+    private boolean attachApplicationLocked(@NonNull IApplicationThread thread,
             int pid, int callingUid, long startSeq) {
 
         // Find the application record that is being attached...  either via
@@ -4934,7 +4980,8 @@
         if (providers != null && checkAppInLaunchingProvidersLocked(app)) {
             Message msg = mHandler.obtainMessage(CONTENT_PROVIDER_PUBLISH_TIMEOUT_MSG);
             msg.obj = app;
-            mHandler.sendMessageDelayed(msg, CONTENT_PROVIDER_PUBLISH_TIMEOUT);
+            mHandler.sendMessageDelayed(msg,
+                    ContentResolver.CONTENT_PROVIDER_PUBLISH_TIMEOUT_MILLIS);
         }
 
         checkTime(startTime, "attachApplicationLocked: before bindApplication");
@@ -5237,6 +5284,9 @@
 
     @Override
     public final void attachApplication(IApplicationThread thread, long startSeq) {
+        if (thread == null) {
+            throw new SecurityException("Invalid application interface");
+        }
         synchronized (this) {
             int callingPid = Binder.getCallingPid();
             final int callingUid = Binder.getCallingUid();
@@ -5327,6 +5377,12 @@
             // Start looking for apps that are abusing wake locks.
             Message nmsg = mHandler.obtainMessage(CHECK_EXCESSIVE_POWER_USE_MSG);
             mHandler.sendMessageDelayed(nmsg, mConstants.POWER_CHECK_INTERVAL);
+            // Check if we are performing userspace reboot before setting sys.boot_completed to
+            // avoid race with init reseting sys.init.userspace_reboot.in_progress once sys
+            // .boot_completed is 1.
+            if (InitProperties.userspace_reboot_in_progress().orElse(false)) {
+                UserspaceRebootLogger.noteUserspaceRebootSuccess();
+            }
             // Tell anyone interested that we are done booting!
             SystemProperties.set("sys.boot_completed", "1");
 
@@ -5347,6 +5403,7 @@
                             }
                         }
                     });
+            maybeLogUserspaceRebootEvent();
             mUserController.scheduleStartProfiles();
         }
         // UART is on if init's console service is running, send a warning notification.
@@ -5416,12 +5473,23 @@
         }
     }
 
+    /**
+     * @deprecated Use {@link #getIntentSenderWithFeature} instead
+     */
+    @Deprecated
     @Override
     public IIntentSender getIntentSender(int type,
             String packageName, IBinder token, String resultWho,
             int requestCode, Intent[] intents, String[] resolvedTypes,
             int flags, Bundle bOptions, int userId) {
+        return getIntentSenderWithFeature(type, packageName, null, token, resultWho, requestCode,
+                intents, resolvedTypes, flags, bOptions, userId);
+    }
 
+    @Override
+    public IIntentSender getIntentSenderWithFeature(int type, String packageName, String featureId,
+            IBinder token, String resultWho, int requestCode, Intent[] intents,
+            String[] resolvedTypes, int flags, Bundle bOptions, int userId) {
         // NOTE: The service lock isn't held in this method because nothing in the method requires
         // the service lock to be held.
 
@@ -5483,12 +5551,13 @@
             }
 
             if (type == ActivityManager.INTENT_SENDER_ACTIVITY_RESULT) {
-                return mAtmInternal.getIntentSender(type, packageName, callingUid, userId,
-                        token, resultWho, requestCode, intents, resolvedTypes, flags, bOptions);
+                return mAtmInternal.getIntentSender(type, packageName, featureId, callingUid,
+                        userId, token, resultWho, requestCode, intents, resolvedTypes, flags,
+                        bOptions);
             }
-            return mPendingIntentController.getIntentSender(type, packageName, callingUid,
-                    userId, token, resultWho, requestCode, intents, resolvedTypes, flags,
-                    bOptions);
+            return mPendingIntentController.getIntentSender(type, packageName, featureId,
+                    callingUid, userId, token, resultWho, requestCode, intents, resolvedTypes,
+                    flags, bOptions);
         } catch (RemoteException e) {
             throw new SecurityException(e);
         }
@@ -6054,8 +6123,8 @@
             return ActivityManager.APP_START_MODE_DELAYED;
         }
         // Not in the RESTRICTED bucket so policy is based on AppOp check.
-        int appop = mAppOpsService.noteOperation(AppOpsManager.OP_RUN_IN_BACKGROUND,
-                uid, packageName, null, false, "");
+        int appop = getAppOpsManager().noteOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND,
+                uid, packageName, null, "");
         if (DEBUG_BACKGROUND_CHECK) {
             Slog.i(TAG, "Legacy app " + uid + "/" + packageName + " bg appop " + appop);
         }
@@ -7087,7 +7156,7 @@
                     } finally {
                         Binder.restoreCallingIdentity(ident);
                     }
-                } else if (dyingProc == cpr.proc) {
+                } else if (dyingProc == cpr.proc && dyingProc != null) {
                     // The old stable connection's client should be killed during proc cleaning up,
                     // so do not re-use the old ContentProviderRecord, otherwise the new clients
                     // could get killed unexpectedly.
@@ -7201,7 +7270,8 @@
         }
 
         // Wait for the provider to be published...
-        final long timeout = SystemClock.uptimeMillis() + CONTENT_PROVIDER_WAIT_TIMEOUT;
+        final long timeout =
+                SystemClock.uptimeMillis() + ContentResolver.CONTENT_PROVIDER_WAIT_TIMEOUT_MILLIS;
         boolean timedOut = false;
         synchronized (cpr) {
             while (cpr.provider == null) {
@@ -7238,12 +7308,14 @@
             }
         }
         if (timedOut) {
-            // Note we do it afer releasing the lock.
+            // Note we do it after releasing the lock.
             String callerName = "unknown";
-            synchronized (this) {
-                final ProcessRecord record = mProcessList.getLRURecordForAppLocked(caller);
-                if (record != null) {
-                    callerName = record.processName;
+            if (caller != null) {
+                synchronized (this) {
+                    final ProcessRecord record = mProcessList.getLRURecordForAppLocked(caller);
+                    if (record != null) {
+                        callerName = record.processName;
+                    }
                 }
             }
 
@@ -7877,6 +7949,8 @@
                     }
                     resultCallback.sendResult(result);
                 }));
+            } else {
+                resultCallback.sendResult(Bundle.EMPTY);
             }
         } catch (RemoteException e) {
             Log.w(TAG, "Content provider dead retrieving " + uri, e);
@@ -7961,7 +8035,7 @@
     }
 
     boolean isBackgroundRestrictedNoCheck(final int uid, final String packageName) {
-        final int mode = mAppOpsService.checkOperation(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
+        final int mode = getAppOpsManager().checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
                 uid, packageName);
         return mode != AppOpsManager.MODE_ALLOWED;
     }
@@ -8318,6 +8392,9 @@
 
     @Override
     public void setActivityController(IActivityController controller, boolean imAMonkey) {
+        if (controller != null) {
+            Binder.allowBlocking(controller.asBinder());
+        }
         mActivityTaskManager.setActivityController(controller, imAMonkey);
     }
 
@@ -9439,14 +9516,14 @@
                     intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
                             | Intent.FLAG_RECEIVER_FOREGROUND);
                     intent.putExtra(Intent.EXTRA_USER_HANDLE, currentUserId);
-                    broadcastIntentLocked(null, null, intent,
+                    broadcastIntentLocked(null, null, null, intent,
                             null, null, 0, null, null, null, OP_NONE,
                             null, false, false, MY_PID, SYSTEM_UID, callingUid, callingPid,
                             currentUserId);
                     intent = new Intent(Intent.ACTION_USER_STARTING);
                     intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
                     intent.putExtra(Intent.EXTRA_USER_HANDLE, currentUserId);
-                    broadcastIntentLocked(null, null, intent, null,
+                    broadcastIntentLocked(null, null, null, intent, null,
                             new IIntentReceiver.Stub() {
                                 @Override
                                 public void performReceive(Intent intent, int resultCode,
@@ -11071,10 +11148,12 @@
         }
 
         if (dumpAll || dumpPackage != null) {
+            final SparseArray<ProcessRecord> pidToProcess = new SparseArray<>();
             synchronized (mPidsSelfLocked) {
                 boolean printed = false;
                 for (int i=0; i<mPidsSelfLocked.size(); i++) {
                     ProcessRecord r = mPidsSelfLocked.valueAt(i);
+                    pidToProcess.put(r.pid, r);
                     if (dumpPackage != null && !r.pkgList.containsKey(dumpPackage)) {
                         continue;
                     }
@@ -11088,6 +11167,32 @@
                         pw.print(": "); pw.println(mPidsSelfLocked.valueAt(i));
                 }
             }
+
+            synchronized (sActiveProcessInfoSelfLocked) {
+                boolean printed = false;
+                for (int i = 0; i < sActiveProcessInfoSelfLocked.size(); i++) {
+                    ProcessInfo info = sActiveProcessInfoSelfLocked.valueAt(i);
+                    ProcessRecord r = pidToProcess.get(sActiveProcessInfoSelfLocked.keyAt(i));
+                    if (r != null && dumpPackage != null && !r.pkgList.containsKey(dumpPackage)) {
+                        continue;
+                    }
+                    if (!printed) {
+                        if (needSep) pw.println();
+                        needSep = true;
+                        pw.println("  Active process infos:");
+                        printed = true;
+                    }
+                    pw.print("    Pinfo PID #"); pw.print(sActiveProcessInfoSelfLocked.keyAt(i));
+                    pw.println(":");
+                    pw.print("      name="); pw.println(info.name);
+                    if (info.deniedPermissions != null) {
+                        for (int j = 0; j < info.deniedPermissions.size(); j++) {
+                            pw.print("      deny: ");
+                            pw.println(info.deniedPermissions.valueAt(i));
+                        }
+                    }
+                }
+            }
         }
 
         if (mImportantProcesses.size() > 0) {
@@ -14585,7 +14690,8 @@
 
     @Override
     public ComponentName startService(IApplicationThread caller, Intent service,
-            String resolvedType, boolean requireForeground, String callingPackage, int userId)
+            String resolvedType, boolean requireForeground, String callingPackage,
+            String callingFeatureId, int userId)
             throws TransactionTooLargeException {
         enforceNotIsolatedCaller("startService");
         // Refuse possible leaked file descriptors
@@ -14607,7 +14713,7 @@
             try {
                 res = mServices.startServiceLocked(caller, service,
                         resolvedType, callingPid, callingUid,
-                        requireForeground, callingPackage, userId);
+                        requireForeground, callingPackage, callingFeatureId, userId);
             } finally {
                 Binder.restoreCallingIdentity(origId);
             }
@@ -15085,9 +15191,20 @@
         return didSomething;
     }
 
+    /**
+     * @deprecated Use {@link #registerReceiverWithFeature}
+     */
+    @Deprecated
     public Intent registerReceiver(IApplicationThread caller, String callerPackage,
             IIntentReceiver receiver, IntentFilter filter, String permission, int userId,
             int flags) {
+        return registerReceiverWithFeature(caller, callerPackage, null, receiver, filter,
+                permission, userId, flags);
+    }
+
+    public Intent registerReceiverWithFeature(IApplicationThread caller, String callerPackage,
+            String callerFeatureId, IIntentReceiver receiver, IntentFilter filter,
+            String permission, int userId, int flags) {
         enforceNotIsolatedCaller("registerReceiver");
         ArrayList<Intent> stickyIntents = null;
         ProcessRecord callerApp = null;
@@ -15223,7 +15340,7 @@
                         + " was previously registered for user " + rl.userId
                         + " callerPackage is " + callerPackage);
             }
-            BroadcastFilter bf = new BroadcastFilter(filter, rl, callerPackage,
+            BroadcastFilter bf = new BroadcastFilter(filter, rl, callerPackage, callerFeatureId,
                     permission, callingUid, userId, instantApp, visibleToInstantApps);
             if (rl.containsFilter(filter)) {
                 Slog.w(TAG, "Receiver with filter " + filter
@@ -15248,7 +15365,7 @@
                     Intent intent = allSticky.get(i);
                     BroadcastQueue queue = broadcastQueueForIntent(intent);
                     BroadcastRecord r = new BroadcastRecord(queue, intent, null,
-                            null, -1, -1, false, null, null, OP_NONE, null, receivers,
+                            null, null, -1, -1, false, null, null, OP_NONE, null, receivers,
                             null, 0, null, null, false, true, true, -1, false,
                             false /* only PRE_BOOT_COMPLETED should be exempt, no stickies */);
                     queue.enqueueParallelBroadcastLocked(r);
@@ -15478,20 +15595,20 @@
 
     @GuardedBy("this")
     final int broadcastIntentLocked(ProcessRecord callerApp,
-            String callerPackage, Intent intent, String resolvedType,
+            String callerPackage, String callerFeatureId, Intent intent, String resolvedType,
             IIntentReceiver resultTo, int resultCode, String resultData,
             Bundle resultExtras, String[] requiredPermissions, int appOp, Bundle bOptions,
             boolean ordered, boolean sticky, int callingPid, int callingUid, int realCallingUid,
             int realCallingPid, int userId) {
-        return broadcastIntentLocked(callerApp, callerPackage, intent, resolvedType, resultTo,
-            resultCode, resultData, resultExtras, requiredPermissions, appOp, bOptions, ordered,
-            sticky, callingPid, callingUid, realCallingUid, realCallingPid, userId,
-            false /* allowBackgroundActivityStarts */);
+        return broadcastIntentLocked(callerApp, callerPackage, callerFeatureId, intent,
+                resolvedType, resultTo, resultCode, resultData, resultExtras, requiredPermissions,
+                appOp, bOptions, ordered, sticky, callingPid, callingUid, realCallingUid,
+                realCallingPid, userId, false /* allowBackgroundActivityStarts */);
     }
 
     @GuardedBy("this")
-    final int broadcastIntentLocked(ProcessRecord callerApp,
-            String callerPackage, Intent intent, String resolvedType,
+    final int broadcastIntentLocked(ProcessRecord callerApp, String callerPackage,
+            @Nullable String callerFeatureId, Intent intent, String resolvedType,
             IIntentReceiver resultTo, int resultCode, String resultData,
             Bundle resultExtras, String[] requiredPermissions, int appOp, Bundle bOptions,
             boolean ordered, boolean sticky, int callingPid, int callingUid, int realCallingUid,
@@ -16028,8 +16145,8 @@
                         isProtectedBroadcast, registeredReceivers);
             }
             final BroadcastQueue queue = broadcastQueueForIntent(intent);
-            BroadcastRecord r = new BroadcastRecord(queue, intent, callerApp,
-                    callerPackage, callingPid, callingUid, callerInstantApp, resolvedType,
+            BroadcastRecord r = new BroadcastRecord(queue, intent, callerApp, callerPackage,
+                    callerFeatureId, callingPid, callingUid, callerInstantApp, resolvedType,
                     requiredPermissions, appOp, brOptions, registeredReceivers, resultTo,
                     resultCode, resultData, resultExtras, ordered, sticky, false, userId,
                     allowBackgroundActivityStarts, timeoutExempt);
@@ -16125,8 +16242,8 @@
         if ((receivers != null && receivers.size() > 0)
                 || resultTo != null) {
             BroadcastQueue queue = broadcastQueueForIntent(intent);
-            BroadcastRecord r = new BroadcastRecord(queue, intent, callerApp,
-                    callerPackage, callingPid, callingUid, callerInstantApp, resolvedType,
+            BroadcastRecord r = new BroadcastRecord(queue, intent, callerApp, callerPackage,
+                    callerFeatureId, callingPid, callingUid, callerInstantApp, resolvedType,
                     requiredPermissions, appOp, brOptions, receivers, resultTo, resultCode,
                     resultData, resultExtras, ordered, sticky, false, userId,
                     allowBackgroundActivityStarts, timeoutExempt);
@@ -16245,11 +16362,25 @@
         return intent;
     }
 
+    /**
+     * @deprecated Use {@link #broadcastIntentWithFeature}
+     */
+    @Deprecated
     public final int broadcastIntent(IApplicationThread caller,
             Intent intent, String resolvedType, IIntentReceiver resultTo,
             int resultCode, String resultData, Bundle resultExtras,
             String[] requiredPermissions, int appOp, Bundle bOptions,
             boolean serialized, boolean sticky, int userId) {
+        return broadcastIntentWithFeature(caller, null, intent, resolvedType, resultTo, resultCode,
+                resultData, resultExtras, requiredPermissions, appOp, bOptions, serialized, sticky,
+                userId);
+    }
+
+    public final int broadcastIntentWithFeature(IApplicationThread caller, String callingFeatureId,
+            Intent intent, String resolvedType, IIntentReceiver resultTo,
+            int resultCode, String resultData, Bundle resultExtras,
+            String[] requiredPermissions, int appOp, Bundle bOptions,
+            boolean serialized, boolean sticky, int userId) {
         enforceNotIsolatedCaller("broadcastIntent");
         synchronized(this) {
             intent = verifyBroadcastLocked(intent);
@@ -16261,7 +16392,7 @@
             final long origId = Binder.clearCallingIdentity();
             try {
                 return broadcastIntentLocked(callerApp,
-                        callerApp != null ? callerApp.info.packageName : null,
+                        callerApp != null ? callerApp.info.packageName : null, callingFeatureId,
                         intent, resolvedType, resultTo, resultCode, resultData, resultExtras,
                         requiredPermissions, appOp, bOptions, serialized, sticky,
                         callingPid, callingUid, callingUid, callingPid, userId);
@@ -16271,9 +16402,9 @@
         }
     }
 
-    int broadcastIntentInPackage(String packageName, int uid, int realCallingUid,
-            int realCallingPid, Intent intent, String resolvedType, IIntentReceiver resultTo,
-            int resultCode, String resultData, Bundle resultExtras,
+    int broadcastIntentInPackage(String packageName, @Nullable String featureId, int uid,
+            int realCallingUid, int realCallingPid, Intent intent, String resolvedType,
+            IIntentReceiver resultTo, int resultCode, String resultData, Bundle resultExtras,
             String requiredPermission, Bundle bOptions, boolean serialized, boolean sticky,
             int userId, boolean allowBackgroundActivityStarts) {
         synchronized(this) {
@@ -16283,11 +16414,10 @@
             String[] requiredPermissions = requiredPermission == null ? null
                     : new String[] {requiredPermission};
             try {
-                return broadcastIntentLocked(null, packageName, intent, resolvedType,
-                        resultTo, resultCode, resultData, resultExtras,
-                        requiredPermissions, OP_NONE, bOptions, serialized,
-                        sticky, -1, uid, realCallingUid, realCallingPid, userId,
-                        allowBackgroundActivityStarts);
+                return broadcastIntentLocked(null, packageName, featureId, intent, resolvedType,
+                        resultTo, resultCode, resultData, resultExtras, requiredPermissions,
+                        OP_NONE, bOptions, serialized, sticky, -1, uid, realCallingUid,
+                        realCallingPid, userId, allowBackgroundActivityStarts);
             } finally {
                 Binder.restoreCallingIdentity(origId);
             }
@@ -18891,23 +19021,24 @@
         }
 
         @Override
-        public int broadcastIntentInPackage(String packageName, int uid, int realCallingUid,
-                int realCallingPid, Intent intent, String resolvedType, IIntentReceiver resultTo,
-                int resultCode, String resultData, Bundle resultExtras, String requiredPermission,
-                Bundle bOptions, boolean serialized, boolean sticky, int userId,
-                boolean allowBackgroundActivityStarts) {
+        public int broadcastIntentInPackage(String packageName, @Nullable String featureId, int uid,
+                int realCallingUid, int realCallingPid, Intent intent, String resolvedType,
+                IIntentReceiver resultTo, int resultCode, String resultData, Bundle resultExtras,
+                String requiredPermission, Bundle bOptions, boolean serialized, boolean sticky,
+                int userId, boolean allowBackgroundActivityStarts) {
             synchronized (ActivityManagerService.this) {
-                return ActivityManagerService.this.broadcastIntentInPackage(packageName, uid,
-                        realCallingUid, realCallingPid, intent, resolvedType, resultTo, resultCode,
-                        resultData, resultExtras, requiredPermission, bOptions, serialized, sticky,
-                        userId, allowBackgroundActivityStarts);
+                return ActivityManagerService.this.broadcastIntentInPackage(packageName, featureId,
+                        uid, realCallingUid, realCallingPid, intent, resolvedType, resultTo,
+                        resultCode, resultData, resultExtras, requiredPermission, bOptions,
+                        serialized, sticky, userId, allowBackgroundActivityStarts);
             }
         }
 
         @Override
         public ComponentName startServiceInPackage(int uid, Intent service, String resolvedType,
-                boolean fgRequired, String callingPackage, int userId,
-                boolean allowBackgroundActivityStarts) throws TransactionTooLargeException {
+                boolean fgRequired, String callingPackage, @Nullable String callingFeatureId,
+                int userId, boolean allowBackgroundActivityStarts)
+                throws TransactionTooLargeException {
             synchronized(ActivityManagerService.this) {
                 if (DEBUG_SERVICE) Slog.v(TAG_SERVICE,
                         "startServiceInPackage: " + service + " type=" + resolvedType);
@@ -18915,8 +19046,8 @@
                 ComponentName res;
                 try {
                     res = mServices.startServiceLocked(null, service,
-                            resolvedType, -1, uid, fgRequired, callingPackage, userId,
-                            allowBackgroundActivityStarts);
+                            resolvedType, -1, uid, fgRequired, callingPackage,
+                            callingFeatureId, userId, allowBackgroundActivityStarts);
                 } finally {
                     Binder.restoreCallingIdentity(origId);
                 }
@@ -19009,7 +19140,7 @@
                         | Intent.FLAG_RECEIVER_REPLACE_PENDING
                         | Intent.FLAG_RECEIVER_FOREGROUND
                         | Intent.FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS);
-                broadcastIntentLocked(null, null, intent, null, null, 0, null, null, null,
+                broadcastIntentLocked(null, null, null, intent, null, null, 0, null, null, null,
                         OP_NONE, null, false, false, MY_PID, SYSTEM_UID, Binder.getCallingUid(),
                         Binder.getCallingPid(), UserHandle.USER_ALL);
                 if ((changes & ActivityInfo.CONFIG_LOCALE) != 0) {
@@ -19020,7 +19151,7 @@
                     if (initLocale || !mProcessesReady) {
                         intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
                     }
-                    broadcastIntentLocked(null, null, intent, null, null, 0, null, null, null,
+                    broadcastIntentLocked(null, null, null, intent, null, null, 0, null, null, null,
                             OP_NONE, null, false, false, MY_PID, SYSTEM_UID, Binder.getCallingUid(),
                             Binder.getCallingPid(), UserHandle.USER_ALL);
                 }
@@ -19035,7 +19166,7 @@
                     // Typically only app stores will have this permission.
                     String[] permissions =
                             new String[] { android.Manifest.permission.INSTALL_PACKAGES };
-                    broadcastIntentLocked(null, null, intent, null, null, 0, null, null,
+                    broadcastIntentLocked(null, null, null, intent, null, null, 0, null, null,
                             permissions, OP_NONE, null, false, false, MY_PID, SYSTEM_UID,
                             Binder.getCallingUid(), Binder.getCallingPid(), UserHandle.USER_ALL);
                 }
@@ -19060,7 +19191,7 @@
                     intent.putExtra("reason", reason);
                 }
 
-                broadcastIntentLocked(null, null, intent, null, null, 0, null, null, null,
+                broadcastIntentLocked(null, null, null, intent, null, null, 0, null, null, null,
                         OP_NONE, null, false, false, -1, SYSTEM_UID, Binder.getCallingUid(),
                         Binder.getCallingPid(), UserHandle.USER_ALL);
             }
@@ -19370,6 +19501,13 @@
     }
 
     /**
+     * Force the settings cache to be loaded
+     */
+    void refreshSettingsCache() {
+        mCoreSettingsObserver.onChange(true);
+    }
+
+    /**
      * Kill processes for the user with id userId and that depend on the package named packageName
      */
     @Override
@@ -19510,7 +19648,7 @@
         }
 
         public AppOpsService getAppOpsService(File file, Handler handler) {
-            return new AppOpsService(file, handler);
+            return new AppOpsService(file, handler, getContext());
         }
 
         public Handler getUiHandler(ActivityManagerService service) {
diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
index 53a967b..c7f5f63 100644
--- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
+++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
@@ -306,6 +306,8 @@
                     return runWaitForBroadcastIdle(pw);
                 case "compat":
                     return runCompat(pw);
+                case "refresh-settings-cache":
+                    return runRefreshSettingsCache();
                 default:
                     return handleDefaultCommands(cmd);
             }
@@ -534,13 +536,13 @@
                 options.setLockTaskEnabled(true);
             }
             if (mWaitOption) {
-                result = mInternal.startActivityAndWait(null, SHELL_PACKAGE_NAME, intent, mimeType,
-                        null, null, 0, mStartFlags, profilerInfo,
+                result = mInternal.startActivityAndWait(null, SHELL_PACKAGE_NAME, null, intent,
+                        mimeType, null, null, 0, mStartFlags, profilerInfo,
                         options != null ? options.toBundle() : null, mUserId);
                 res = result.result;
             } else {
-                res = mInternal.startActivityAsUser(null, SHELL_PACKAGE_NAME, intent, mimeType,
-                        null, null, 0, mStartFlags, profilerInfo,
+                res = mInternal.startActivityAsUserWithFeature(null, SHELL_PACKAGE_NAME, null,
+                        intent, mimeType, null, null, 0, mStartFlags, profilerInfo,
                         options != null ? options.toBundle() : null, mUserId);
             }
             final long endTime = SystemClock.uptimeMillis();
@@ -652,7 +654,7 @@
         pw.println("Starting service: " + intent);
         pw.flush();
         ComponentName cn = mInterface.startService(null, intent, intent.getType(),
-                asForeground, SHELL_PACKAGE_NAME, mUserId);
+                asForeground, SHELL_PACKAGE_NAME, null, mUserId);
         if (cn == null) {
             err.println("Error: Not found; no service started.");
             return -1;
@@ -742,8 +744,9 @@
         pw.println("Broadcasting: " + intent);
         pw.flush();
         Bundle bundle = mBroadcastOptions == null ? null : mBroadcastOptions.toBundle();
-        mInterface.broadcastIntent(null, intent, null, receiver, 0, null, null, requiredPermissions,
-                android.app.AppOpsManager.OP_NONE, bundle, true, false, mUserId);
+        mInterface.broadcastIntentWithFeature(null, null, intent, null, receiver, 0, null, null,
+                requiredPermissions, android.app.AppOpsManager.OP_NONE, bundle, true, false,
+                mUserId);
         receiver.waitForFinish();
         return 0;
     }
@@ -2940,6 +2943,11 @@
         return 0;
     }
 
+    int runRefreshSettingsCache() throws RemoteException {
+        mInternal.refreshSettingsCache();
+        return 0;
+    }
+
     private int runCompat(PrintWriter pw) throws RemoteException {
         final PlatformCompat platformCompat = (PlatformCompat)
                 ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE);
diff --git a/services/core/java/com/android/server/am/AppErrors.java b/services/core/java/com/android/server/am/AppErrors.java
index 145f91b..789f719 100644
--- a/services/core/java/com/android/server/am/AppErrors.java
+++ b/services/core/java/com/android/server/am/AppErrors.java
@@ -798,7 +798,6 @@
         boolean showBackground = Settings.Secure.getInt(mContext.getContentResolver(),
                 Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0;
 
-        final String packageName;
         final int userId;
         synchronized (mService) {
             final ProcessRecord proc = data.proc;
@@ -807,7 +806,6 @@
                 Slog.e(TAG, "handleShowAppErrorUi: proc is null");
                 return;
             }
-            packageName = proc.info.packageName;
             userId = proc.userId;
             if (proc.getDialogController().hasCrashDialogs()) {
                 Slog.e(TAG, "App already has crash dialog: " + proc);
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index ed6ace3..119394f 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -1135,7 +1135,7 @@
     @Override
     public void setBatteryState(final int status, final int health, final int plugType,
             final int level, final int temp, final int volt, final int chargeUAh,
-            final int chargeFullUAh) {
+            final int chargeFullUAh, final long chargeTimeToFullSeconds) {
         enforceCallingPermission();
 
         // BatteryService calls us here and we may update external state. It would be wrong
@@ -1147,7 +1147,7 @@
                     // The battery state has not changed, so we don't need to sync external
                     // stats immediately.
                     mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt,
-                            chargeUAh, chargeFullUAh);
+                            chargeUAh, chargeFullUAh, chargeTimeToFullSeconds);
                     return;
                 }
             }
@@ -1160,7 +1160,7 @@
             mWorker.scheduleRunnable(() -> {
                 synchronized (mStats) {
                     mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt,
-                            chargeUAh, chargeFullUAh);
+                            chargeUAh, chargeFullUAh, chargeTimeToFullSeconds);
                 }
             });
         });
diff --git a/services/core/java/com/android/server/am/BroadcastFilter.java b/services/core/java/com/android/server/am/BroadcastFilter.java
index 1ec8db0..578db6f 100644
--- a/services/core/java/com/android/server/am/BroadcastFilter.java
+++ b/services/core/java/com/android/server/am/BroadcastFilter.java
@@ -27,6 +27,7 @@
     // Back-pointer to the list this filter is in.
     final ReceiverList receiverList;
     final String packageName;
+    final String featureId;
     final String requiredPermission;
     final int owningUid;
     final int owningUserId;
@@ -34,11 +35,12 @@
     final boolean visibleToInstantApp;
 
     BroadcastFilter(IntentFilter _filter, ReceiverList _receiverList,
-            String _packageName, String _requiredPermission, int _owningUid, int _userId,
+            String _packageName, String _featureId, String _requiredPermission, int _owningUid, int _userId,
             boolean _instantApp, boolean _visibleToInstantApp) {
         super(_filter);
         receiverList = _receiverList;
         packageName = _packageName;
+        featureId = _featureId;
         requiredPermission = _requiredPermission;
         owningUid = _owningUid;
         owningUserId = _userId;
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index 6697b5a..26ef707 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -648,10 +648,10 @@
                 skip = true;
             } else {
                 final int opCode = AppOpsManager.permissionToOpCode(filter.requiredPermission);
-                // TODO moltmann: Set featureId from caller
                 if (opCode != AppOpsManager.OP_NONE
-                        && mService.mAppOpsService.noteOperation(opCode, r.callingUid,
-                        r.callerPackage, null, false, "") != AppOpsManager.MODE_ALLOWED) {
+                        && mService.getAppOpsManager().noteOpNoThrow(opCode, r.callingUid,
+                        r.callerPackage, r.callerFeatureId, "")
+                        != AppOpsManager.MODE_ALLOWED) {
                     Slog.w(TAG, "Appop Denial: broadcasting "
                             + r.intent.toString()
                             + " from " + r.callerPackage + " (pid="
@@ -681,10 +681,9 @@
                     break;
                 }
                 int appOp = AppOpsManager.permissionToOpCode(requiredPermission);
-                // TODO moltmann: Set featureId from caller
                 if (appOp != AppOpsManager.OP_NONE && appOp != r.appOp
-                        && mService.mAppOpsService.noteOperation(appOp,
-                        filter.receiverList.uid, filter.packageName, null, false, "")
+                        && mService.getAppOpsManager().noteOpNoThrow(appOp,
+                        filter.receiverList.uid, filter.packageName, filter.featureId, "")
                         != AppOpsManager.MODE_ALLOWED) {
                     Slog.w(TAG, "Appop Denial: receiving "
                             + r.intent.toString()
@@ -714,10 +713,9 @@
                 skip = true;
             }
         }
-        // TODO moltmann: Set featureId from caller
         if (!skip && r.appOp != AppOpsManager.OP_NONE
-                && mService.mAppOpsService.noteOperation(r.appOp,
-                filter.receiverList.uid, filter.packageName, null, false, "")
+                && mService.getAppOpsManager().noteOpNoThrow(r.appOp,
+                filter.receiverList.uid, filter.packageName, filter.featureId, "")
                 != AppOpsManager.MODE_ALLOWED) {
             Slog.w(TAG, "Appop Denial: receiving "
                     + r.intent.toString()
@@ -863,7 +861,8 @@
         if (callerForeground && receiverRecord.intent.getComponent() != null) {
             IIntentSender target = mService.mPendingIntentController.getIntentSender(
                     ActivityManager.INTENT_SENDER_BROADCAST, receiverRecord.callerPackage,
-                    receiverRecord.callingUid, receiverRecord.userId, null, null, 0,
+                    receiverRecord.callerFeatureId, receiverRecord.callingUid,
+                    receiverRecord.userId, null, null, 0,
                     new Intent[]{receiverRecord.intent},
                     new String[]{receiverRecord.intent.resolveType(mService.mContext
                             .getContentResolver())},
@@ -1371,10 +1370,9 @@
             skip = true;
         } else if (!skip && info.activityInfo.permission != null) {
             final int opCode = AppOpsManager.permissionToOpCode(info.activityInfo.permission);
-            // TODO moltmann: Set featureId from caller
             if (opCode != AppOpsManager.OP_NONE
-                    && mService.mAppOpsService.noteOperation(opCode, r.callingUid, r.callerPackage,
-                    null, false, "") != AppOpsManager.MODE_ALLOWED) {
+                    && mService.getAppOpsManager().noteOpNoThrow(opCode, r.callingUid, r.callerPackage,
+                    r.callerFeatureId, "") != AppOpsManager.MODE_ALLOWED) {
                 Slog.w(TAG, "Appop Denial: broadcasting "
                         + r.intent.toString()
                         + " from " + r.callerPackage + " (pid="
@@ -1410,11 +1408,10 @@
                     break;
                 }
                 int appOp = AppOpsManager.permissionToOpCode(requiredPermission);
-                // TODO moltmann: Set featureId from caller
                 if (appOp != AppOpsManager.OP_NONE && appOp != r.appOp
-                        && mService.mAppOpsService.noteOperation(appOp,
-                        info.activityInfo.applicationInfo.uid, info.activityInfo.packageName, null,
-                        false, "")
+                        && mService.getAppOpsManager().noteOpNoThrow(appOp,
+                        info.activityInfo.applicationInfo.uid, info.activityInfo.packageName,
+                        null /* default featureId */, "")
                         != AppOpsManager.MODE_ALLOWED) {
                     Slog.w(TAG, "Appop Denial: receiving "
                             + r.intent + " to "
@@ -1428,11 +1425,10 @@
                 }
             }
         }
-        // TODO moltmann: Set featureId from caller
         if (!skip && r.appOp != AppOpsManager.OP_NONE
-                && mService.mAppOpsService.noteOperation(r.appOp,
-                info.activityInfo.applicationInfo.uid, info.activityInfo.packageName, null, false,
-                "")
+                && mService.getAppOpsManager().noteOpNoThrow(r.appOp,
+                info.activityInfo.applicationInfo.uid, info.activityInfo.packageName,
+                null  /* default featureId */, "")
                 != AppOpsManager.MODE_ALLOWED) {
             Slog.w(TAG, "Appop Denial: receiving "
                     + r.intent + " to "
diff --git a/services/core/java/com/android/server/am/BroadcastRecord.java b/services/core/java/com/android/server/am/BroadcastRecord.java
index f263886..8ef67f9 100644
--- a/services/core/java/com/android/server/am/BroadcastRecord.java
+++ b/services/core/java/com/android/server/am/BroadcastRecord.java
@@ -16,6 +16,7 @@
 
 package com.android.server.am;
 
+import android.annotation.Nullable;
 import android.app.AppOpsManager;
 import android.app.BroadcastOptions;
 import android.content.ComponentName;
@@ -51,6 +52,7 @@
     final ComponentName targetComp; // original component name set on the intent
     final ProcessRecord callerApp; // process that sent this
     final String callerPackage; // who sent this
+    final @Nullable String callerFeatureId; // which feature in the package sent this
     final int callingPid;   // the pid of who sent this
     final int callingUid;   // the uid of who sent this
     final boolean callerInstantApp; // caller is an Instant App?
@@ -233,7 +235,8 @@
 
     BroadcastRecord(BroadcastQueue _queue,
             Intent _intent, ProcessRecord _callerApp, String _callerPackage,
-            int _callingPid, int _callingUid, boolean _callerInstantApp, String _resolvedType,
+            @Nullable String _callerFeatureId, int _callingPid, int _callingUid,
+            boolean _callerInstantApp, String _resolvedType,
             String[] _requiredPermissions, int _appOp, BroadcastOptions _options, List _receivers,
             IIntentReceiver _resultTo, int _resultCode, String _resultData, Bundle _resultExtras,
             boolean _serialized, boolean _sticky, boolean _initialSticky, int _userId,
@@ -246,6 +249,7 @@
         targetComp = _intent.getComponent();
         callerApp = _callerApp;
         callerPackage = _callerPackage;
+        callerFeatureId = _callerFeatureId;
         callingPid = _callingPid;
         callingUid = _callingUid;
         callerInstantApp = _callerInstantApp;
@@ -280,6 +284,7 @@
 
         callerApp = from.callerApp;
         callerPackage = from.callerPackage;
+        callerFeatureId = from.callerFeatureId;
         callingPid = from.callingPid;
         callingUid = from.callingUid;
         callerInstantApp = from.callerInstantApp;
@@ -343,8 +348,8 @@
         }
 
         // build a new BroadcastRecord around that single-target list
-        BroadcastRecord split = new BroadcastRecord(queue, intent, callerApp,
-                callerPackage, callingPid, callingUid, callerInstantApp, resolvedType,
+        BroadcastRecord split = new BroadcastRecord(queue, intent, callerApp, callerPackage,
+                callerFeatureId, callingPid, callingUid, callerInstantApp, resolvedType,
                 requiredPermissions, appOp, options, splitReceivers, resultTo, resultCode,
                 resultData, resultExtras, ordered, sticky, initialSticky, userId,
                 allowBackgroundActivityStarts, timeoutExempt);
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java
index d047a3c..eec68dc 100644
--- a/services/core/java/com/android/server/am/CachedAppOptimizer.java
+++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java
@@ -946,6 +946,15 @@
                 }
 
                 EventLog.writeEvent(EventLogTags.AM_FREEZE, pid, name);
+
+                // See above for why we're not taking mPhenotypeFlagLock here
+                if (mRandom.nextFloat() < mFreezerStatsdSampleRate) {
+                    FrameworkStatsLog.write(FrameworkStatsLog.APP_FREEZE_CHANGED,
+                            FrameworkStatsLog.APP_FREEZE_CHANGED__ACTION__FREEZE_APP,
+                            pid,
+                            name,
+                            unfrozenDuration);
+                }
             }
         }
 
@@ -994,6 +1003,16 @@
                 }
 
                 EventLog.writeEvent(EventLogTags.AM_UNFREEZE, pid, name);
+
+                // See above for why we're not taking mPhenotypeFlagLock here
+                if (mRandom.nextFloat() < mFreezerStatsdSampleRate) {
+                    FrameworkStatsLog.write(
+                            FrameworkStatsLog.APP_FREEZE_CHANGED,
+                            FrameworkStatsLog.APP_FREEZE_CHANGED__ACTION__UNFREEZE_APP,
+                            pid,
+                            name,
+                            frozenDuration);
+                }
             }
         }
     }
diff --git a/services/core/java/com/android/server/am/CarUserSwitchingDialog.java b/services/core/java/com/android/server/am/CarUserSwitchingDialog.java
index 60754fb..a6811e3 100644
--- a/services/core/java/com/android/server/am/CarUserSwitchingDialog.java
+++ b/services/core/java/com/android/server/am/CarUserSwitchingDialog.java
@@ -30,7 +30,6 @@
 import android.graphics.PorterDuffXfermode;
 import android.graphics.Rect;
 import android.graphics.RectF;
-import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.UserManager;
 import android.provider.Settings;
@@ -57,8 +56,6 @@
             String switchingToSystemUserMessage) {
         super(service, context, oldUser, newUser, aboveSystem, switchingFromSystemUserMessage,
                 switchingToSystemUserMessage);
-
-        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
     }
 
     @Override
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java
index a651d9d..a2ae678 100644
--- a/services/core/java/com/android/server/am/OomAdjuster.java
+++ b/services/core/java/com/android/server/am/OomAdjuster.java
@@ -1994,12 +1994,11 @@
         if (app.hasForegroundServices()) {
             capability |= capabilityFromFGS;
         } else if (!ActivityManager.isProcStateBackground(procState)) {
-            // procState higher than PROCESS_STATE_TRANSIENT_BACKGROUND implicitly has
+            // procState higher than PROCESS_STATE_BOUND_FOREGROUND_SERVICE implicitly has
             // camera/microphone capability
             if (procState == PROCESS_STATE_FOREGROUND_SERVICE && procStateFromFGSClient) {
                 // if the FGS state is passed down from client, do not grant implicit capabilities.
             } else {
-                //TODO: remove this line when enforcing the feature.
                 capability |= PROCESS_CAPABILITY_ALL_IMPLICIT;
             }
         }
diff --git a/services/core/java/com/android/server/am/PendingIntentController.java b/services/core/java/com/android/server/am/PendingIntentController.java
index df76713..eacf088 100644
--- a/services/core/java/com/android/server/am/PendingIntentController.java
+++ b/services/core/java/com/android/server/am/PendingIntentController.java
@@ -23,6 +23,7 @@
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
 
+import android.annotation.Nullable;
 import android.app.Activity;
 import android.app.ActivityManagerInternal;
 import android.app.AppGlobals;
@@ -88,9 +89,9 @@
         }
     }
 
-    public PendingIntentRecord getIntentSender(int type, String packageName, int callingUid,
-            int userId, IBinder token, String resultWho, int requestCode, Intent[] intents,
-            String[] resolvedTypes, int flags, Bundle bOptions) {
+    public PendingIntentRecord getIntentSender(int type, String packageName,
+            @Nullable String featureId, int callingUid, int userId, IBinder token, String resultWho,
+            int requestCode, Intent[] intents, String[] resolvedTypes, int flags, Bundle bOptions) {
         synchronized (mLock) {
             if (DEBUG_MU) Slog.v(TAG_MU, "getIntentSender(): uid=" + callingUid);
 
@@ -109,8 +110,8 @@
             flags &= ~(PendingIntent.FLAG_NO_CREATE | PendingIntent.FLAG_CANCEL_CURRENT
                     | PendingIntent.FLAG_UPDATE_CURRENT);
 
-            PendingIntentRecord.Key key = new PendingIntentRecord.Key(type, packageName, token,
-                    resultWho, requestCode, intents, resolvedTypes, flags,
+            PendingIntentRecord.Key key = new PendingIntentRecord.Key(type, packageName, featureId,
+                    token, resultWho, requestCode, intents, resolvedTypes, flags,
                     SafeActivityOptions.fromBundle(bOptions), userId);
             WeakReference<PendingIntentRecord> ref;
             ref = mIntentSenderRecords.get(key);
diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java
index 3ba2210..d54d2d7 100644
--- a/services/core/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/core/java/com/android/server/am/PendingIntentRecord.java
@@ -17,14 +17,16 @@
 package com.android.server.am;
 
 import static android.app.ActivityManager.START_SUCCESS;
+
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
 
+import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.app.ActivityOptions;
-import android.content.IIntentSender;
-import android.content.IIntentReceiver;
 import android.app.PendingIntent;
+import android.content.IIntentReceiver;
+import android.content.IIntentSender;
 import android.content.Intent;
 import android.os.Binder;
 import android.os.Bundle;
@@ -72,6 +74,7 @@
     final static class Key {
         final int type;
         final String packageName;
+        final String featureId;
         final IBinder activity;
         final String who;
         final int requestCode;
@@ -86,10 +89,11 @@
 
         private static final int ODD_PRIME_NUMBER = 37;
 
-        Key(int _t, String _p, IBinder _a, String _w,
+        Key(int _t, String _p, @Nullable String _featureId, IBinder _a, String _w,
                 int _r, Intent[] _i, String[] _it, int _f, SafeActivityOptions _o, int _userId) {
             type = _t;
             packageName = _p;
+            featureId = _featureId;
             activity = _a;
             who = _w;
             requestCode = _r;
@@ -140,6 +144,9 @@
                 if (!Objects.equals(packageName, other.packageName)) {
                     return false;
                 }
+                if (!Objects.equals(featureId, other.featureId)) {
+                    return false;
+                }
                 if (activity != other.activity) {
                     return false;
                 }
@@ -175,7 +182,8 @@
         }
 
         public String toString() {
-            return "Key{" + typeName() + " pkg=" + packageName
+            return "Key{" + typeName()
+                + " pkg=" + packageName + (featureId != null ? "/" + featureId : "")
                 + " intent="
                 + (requestIntent != null
                         ? requestIntent.toShortString(false, true, false, false) : "<null>")
@@ -403,19 +411,20 @@
 
                         if (key.allIntents != null && key.allIntents.length > 1) {
                             res = controller.mAtmInternal.startActivitiesInPackage(
-                                    uid, callingPid, callingUid, key.packageName, allIntents,
-                                    allResolvedTypes, resultTo, mergedOptions, userId,
+                                    uid, callingPid, callingUid, key.packageName, key.featureId,
+                                    allIntents, allResolvedTypes, resultTo, mergedOptions, userId,
                                     false /* validateIncomingUser */,
                                     this /* originatingPendingIntent */,
                                     mAllowBgActivityStartsForActivitySender.contains(whitelistToken));
                         } else {
-                            res = controller.mAtmInternal.startActivityInPackage(
-                                    uid, callingPid, callingUid, key.packageName, finalIntent,
+                            res = controller.mAtmInternal.startActivityInPackage(uid, callingPid,
+                                    callingUid, key.packageName, key.featureId, finalIntent,
                                     resolvedType, resultTo, resultWho, requestCode, 0,
                                     mergedOptions, userId, null, "PendingIntentRecord",
                                     false /* validateIncomingUser */,
                                     this /* originatingPendingIntent */,
-                                    mAllowBgActivityStartsForActivitySender.contains(whitelistToken));
+                                    mAllowBgActivityStartsForActivitySender.contains(
+                                            whitelistToken));
                         }
                     } catch (RuntimeException e) {
                         Slog.w(TAG, "Unable to send startActivity intent", e);
@@ -430,11 +439,12 @@
                         // If a completion callback has been requested, require
                         // that the broadcast be delivered synchronously
                         int sent = controller.mAmInternal.broadcastIntentInPackage(key.packageName,
-                                uid, callingUid, callingPid, finalIntent, resolvedType,
-                                finishedReceiver, code, null, null, requiredPermission, options,
-                                (finishedReceiver != null), false, userId,
+                                key.featureId, uid, callingUid, callingPid, finalIntent,
+                                resolvedType, finishedReceiver, code, null, null,
+                                requiredPermission, options, (finishedReceiver != null), false,
+                                userId,
                                 mAllowBgActivityStartsForBroadcastSender.contains(whitelistToken)
-                                || allowTrampoline);
+                                        || allowTrampoline);
                         if (sent == ActivityManager.BROADCAST_SUCCESS) {
                             sendFinish = false;
                         }
@@ -447,7 +457,7 @@
                     try {
                         controller.mAmInternal.startServiceInPackage(uid, finalIntent, resolvedType,
                                 key.type == ActivityManager.INTENT_SENDER_FOREGROUND_SERVICE,
-                                key.packageName, userId,
+                                key.packageName, key.featureId, userId,
                                 mAllowBgActivityStartsForServiceSender.contains(whitelistToken)
                                 || allowTrampoline);
                     } catch (RuntimeException e) {
@@ -496,6 +506,7 @@
     public void dump(PrintWriter pw, String prefix) {
         pw.print(prefix); pw.print("uid="); pw.print(uid);
                 pw.print(" packageName="); pw.print(key.packageName);
+                pw.print(" featureId="); pw.print(key.featureId);
                 pw.print(" type="); pw.print(key.typeName());
                 pw.print(" flags=0x"); pw.println(Integer.toHexString(key.flags));
         if (key.activity != null || key.who != null) {
@@ -545,6 +556,10 @@
         sb.append(Integer.toHexString(System.identityHashCode(this)));
         sb.append(' ');
         sb.append(key.packageName);
+        if (key.featureId != null) {
+            sb.append('/');
+            sb.append(key.featureId);
+        }
         sb.append(' ');
         sb.append(key.typeName());
         if (whitelistDuration != null) {
diff --git a/services/core/java/com/android/server/am/PreBootBroadcaster.java b/services/core/java/com/android/server/am/PreBootBroadcaster.java
index beb0e47..747e8a8 100644
--- a/services/core/java/com/android/server/am/PreBootBroadcaster.java
+++ b/services/core/java/com/android/server/am/PreBootBroadcaster.java
@@ -108,8 +108,8 @@
 
         mIntent.setComponent(componentName);
         synchronized (mService) {
-            mService.broadcastIntentLocked(null, null, mIntent, null, this, 0, null, null, null,
-                    AppOpsManager.OP_NONE, null, true, false, ActivityManagerService.MY_PID,
+            mService.broadcastIntentLocked(null, null, null, mIntent, null, this, 0, null, null,
+                    null, AppOpsManager.OP_NONE, null, true, false, ActivityManagerService.MY_PID,
                     Process.SYSTEM_UID, Binder.getCallingUid(), Binder.getCallingPid(), mUserId);
         }
     }
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java
index dcada89..0dc44f7 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -59,6 +59,8 @@
 import android.app.ApplicationExitInfo.SubReason;
 import android.app.IApplicationThread;
 import android.app.IUidObserver;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledAfter;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -78,11 +80,13 @@
 import android.os.DropBoxManager;
 import android.os.Handler;
 import android.os.IBinder;
+import android.os.IVold;
 import android.os.Looper;
 import android.os.Message;
 import android.os.PowerManager;
 import android.os.Process;
 import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.StrictMode;
 import android.os.SystemClock;
 import android.os.SystemProperties;
@@ -119,6 +123,7 @@
 import com.android.server.wm.ActivityServiceConnectionsHolder;
 import com.android.server.wm.WindowManagerService;
 
+import dalvik.annotation.compat.VersionCodes;
 import dalvik.system.VMRuntime;
 
 import java.io.File;
@@ -139,10 +144,14 @@
 public final class ProcessList {
     static final String TAG = TAG_WITH_CLASS_NAME ? "ProcessList" : TAG_AM;
 
-    // A device config to control the minimum target SDK to enable app data isolation
+    // A system property to control if app data isolation is enabled.
     static final String ANDROID_APP_DATA_ISOLATION_ENABLED_PROPERTY =
             "persist.zygote.app_data_isolation";
 
+    // A system property to control if obb app data isolation is enabled in vold.
+    static final String ANDROID_VOLD_APP_DATA_ISOLATION_ENABLED_PROPERTY =
+            "persist.sys.vold_app_data_isolation_enabled";
+
     // A device config to control the minimum target SDK to enable app data isolation
     static final String ANDROID_APP_DATA_ISOLATION_MIN_SDK = "android_app_data_isolation_min_sdk";
 
@@ -327,6 +336,15 @@
      */
     private static final int PROC_KILL_TIMEOUT = 2000; // 2 seconds;
 
+    /**
+     * Native heap allocations will now have a non-zero tag in the most significant byte.
+     * @see <a href="https://source.android.com/devices/tech/debug/tagged-pointers">Tagged
+     * Pointers</a>
+     */
+    @ChangeId
+    @EnabledAfter(targetSdkVersion = VersionCodes.Q)
+    private static final long NATIVE_HEAP_POINTER_TAGGING = 135754954; // This is a bug id.
+
     ActivityManagerService mService = null;
 
     // To kill process groups asynchronously
@@ -367,6 +385,8 @@
 
     private boolean mAppDataIsolationEnabled = false;
 
+    private boolean mVoldAppDataIsolationEnabled = false;
+
     private ArrayList<String> mAppDataIsolationWhitelistedApps;
 
     /**
@@ -679,6 +699,8 @@
         // want some apps enabled while some apps disabled
         mAppDataIsolationEnabled =
                 SystemProperties.getBoolean(ANDROID_APP_DATA_ISOLATION_ENABLED_PROPERTY, true);
+        mVoldAppDataIsolationEnabled = SystemProperties.getBoolean(
+                ANDROID_VOLD_APP_DATA_ISOLATION_ENABLED_PROPERTY, false);
         mAppDataIsolationWhitelistedApps = new ArrayList<>(
                 SystemConfig.getInstance().getAppDataIsolationWhitelistedApps());
 
@@ -1577,7 +1599,19 @@
             // For DownloadProviders and MTP: To grant access to /sdcard/Android/
             // And a special case for the FUSE daemon since it runs an MTP server and should have
             // access to Android/
+            // Note that we must add in the user id, because sdcardfs synthesizes this permission
+            // based on the user
             gidList.add(UserHandle.getUid(UserHandle.getUserId(uid), Process.SDCARD_RW_GID));
+
+            // For devices without sdcardfs, these GIDs are needed instead; note that we
+            // consciously don't add the user_id in the GID, since these apps are anyway
+            // isolated to only their own user
+            gidList.add(Process.EXT_DATA_RW_GID);
+            gidList.add(Process.EXT_OBB_RW_GID);
+        }
+        if (mountExternal == Zygote.MOUNT_EXTERNAL_INSTALLER) {
+            // For devices without sdcardfs, this GID is needed to allow installers access to OBBs
+            gidList.add(Process.EXT_OBB_RW_GID);
         }
         if (mountExternal == Zygote.MOUNT_EXTERNAL_PASS_THROUGH) {
             // For the FUSE daemon: To grant access to the lower filesystem.
@@ -1756,6 +1790,13 @@
                 runtimeFlags |= Zygote.USE_APP_IMAGE_STARTUP_CACHE;
             }
 
+            // Enable heap pointer tagging, unless disabled by the app manifest, target sdk level,
+            // or the compat feature.
+            if (app.info.allowsNativeHeapPointerTagging()
+                    && mPlatformCompat.isChangeEnabled(NATIVE_HEAP_POINTER_TAGGING, app.info)) {
+                runtimeFlags |= Zygote.MEMORY_TAG_LEVEL_TBI;
+            }
+
             String invokeWith = null;
             if ((app.info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
                 // Debuggable apps may include a wrapper script with their library directory.
@@ -2082,6 +2123,13 @@
                         app.info.packageName, app.userId);
                 pkgDataInfoMap = getPackageAppDataInfoMap(pmInt, sharedPackages.length == 0
                         ? new String[]{app.info.packageName} : sharedPackages, uid);
+
+                if (mVoldAppDataIsolationEnabled) {
+                    StorageManagerInternal storageManagerInternal = LocalServices.getService(
+                                StorageManagerInternal.class);
+                    storageManagerInternal.prepareObbDirs(UserHandle.getUserId(uid),
+                            pkgDataInfoMap.keySet(), app.processName);
+                }
             } else {
                 pkgDataInfoMap = null;
             }
diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java
index 2b4d15e..e63da9b 100644
--- a/services/core/java/com/android/server/am/ProcessRecord.java
+++ b/services/core/java/com/android/server/am/ProcessRecord.java
@@ -371,6 +371,15 @@
             }
         }
         pw.println("}");
+        if (processInfo != null) {
+            pw.print(prefix); pw.println("processInfo:");
+            if (processInfo.deniedPermissions != null) {
+                for (int i = 0; i < processInfo.deniedPermissions.size(); i++) {
+                    pw.print(prefix); pw.print("  deny: ");
+                    pw.println(processInfo.deniedPermissions.valueAt(i));
+                }
+            }
+        }
         pw.print(prefix); pw.print("mRequiredAbi="); pw.print(mRequiredAbi);
                 pw.print(" instructionSet="); pw.println(instructionSet);
         if (info.className != null) {
@@ -1901,8 +1910,7 @@
             mWaitDialog = null;
         }
 
-        void forAllDialogs(List<? extends BaseErrorDialog> dialogs,
-                Consumer<BaseErrorDialog> c) {
+        void forAllDialogs(List<? extends BaseErrorDialog> dialogs, Consumer<BaseErrorDialog> c) {
             for (int i = dialogs.size() - 1; i >= 0; i--) {
                 c.accept(dialogs.get(i));
             }
@@ -1911,42 +1919,72 @@
         void showCrashDialogs(AppErrorDialog.Data data) {
             List<Context> contexts = getDisplayContexts(false /* lastUsedOnly */);
             mCrashDialogs = new ArrayList<>();
-
             for (int i = contexts.size() - 1; i >= 0; i--) {
                 final Context c = contexts.get(i);
                 mCrashDialogs.add(new AppErrorDialog(c, mService, data));
             }
-            mService.mUiHandler.post(() -> mCrashDialogs.forEach(Dialog::show));
+            mService.mUiHandler.post(() -> {
+                List<AppErrorDialog> dialogs;
+                synchronized (mService) {
+                    dialogs = mCrashDialogs;
+                }
+                if (dialogs != null) {
+                    forAllDialogs(dialogs, Dialog::show);
+                }
+            });
         }
 
         void showAnrDialogs(AppNotRespondingDialog.Data data) {
             List<Context> contexts = getDisplayContexts(isSilentAnr() /* lastUsedOnly */);
             mAnrDialogs = new ArrayList<>();
-
             for (int i = contexts.size() - 1; i >= 0; i--) {
                 final Context c = contexts.get(i);
                 mAnrDialogs.add(new AppNotRespondingDialog(mService, c, data));
             }
-            mService.mUiHandler.post(() -> mAnrDialogs.forEach(Dialog::show));
+            mService.mUiHandler.post(() -> {
+                List<AppNotRespondingDialog> dialogs;
+                synchronized (mService) {
+                    dialogs = mAnrDialogs;
+                }
+                if (dialogs != null) {
+                    forAllDialogs(dialogs, Dialog::show);
+                }
+            });
         }
 
         void showViolationDialogs(AppErrorResult res) {
             List<Context> contexts = getDisplayContexts(false /* lastUsedOnly */);
             mViolationDialogs = new ArrayList<>();
-
             for (int i = contexts.size() - 1; i >= 0; i--) {
                 final Context c = contexts.get(i);
                 mViolationDialogs.add(
                         new StrictModeViolationDialog(c, mService, res, ProcessRecord.this));
             }
-            mService.mUiHandler.post(() -> mViolationDialogs.forEach(Dialog::show));
+            mService.mUiHandler.post(() -> {
+                List<StrictModeViolationDialog> dialogs;
+                synchronized (mService) {
+                    dialogs = mViolationDialogs;
+                }
+                if (dialogs != null) {
+                    forAllDialogs(dialogs, Dialog::show);
+                }
+            });
         }
 
         void showDebugWaitingDialogs() {
             List<Context> contexts = getDisplayContexts(true /* lastUsedOnly */);
             final Context c = contexts.get(0);
             mWaitDialog = new AppWaitingForDebuggerDialog(mService, c, ProcessRecord.this);
-            mService.mUiHandler.post(() -> mWaitDialog.show());
+
+            mService.mUiHandler.post(() -> {
+                Dialog dialog;
+                synchronized (mService) {
+                    dialog = mWaitDialog;
+                }
+                if (dialog != null) {
+                    dialog.show();
+                }
+            });
         }
 
         /**
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index c75ee04..fb48db4 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -30,6 +30,7 @@
 import static android.os.Process.SHELL_UID;
 import static android.os.Process.SYSTEM_UID;
 
+import static com.android.internal.util.FrameworkStatsLog.BOOT_TIME_EVENT_ELAPSED_TIME__EVENT__FRAMEWORK_LOCKED_BOOT_COMPLETED;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_MU;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
@@ -92,8 +93,8 @@
 import com.android.internal.R;
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.FrameworkStatsLog;
 import com.android.internal.widget.LockPatternUtils;
 import com.android.server.FgThread;
 import com.android.server.LocalServices;
@@ -398,13 +399,14 @@
             // Do not report secondary users, runtime restarts or first boot/upgrade
             if (userId == UserHandle.USER_SYSTEM
                     && !mInjector.isRuntimeRestarted() && !mInjector.isFirstBootOrUpgrade()) {
-                int uptimeSeconds = (int)(SystemClock.elapsedRealtime() / 1000);
-                MetricsLogger.histogram(mInjector.getContext(),
-                        "framework_locked_boot_completed", uptimeSeconds);
-                final int MAX_UPTIME_SECONDS = 120;
-                if (uptimeSeconds > MAX_UPTIME_SECONDS) {
+                final long elapsedTimeMs = SystemClock.elapsedRealtime();
+                FrameworkStatsLog.write(FrameworkStatsLog.BOOT_TIME_EVENT_ELAPSED_TIME_REPORTED,
+                        BOOT_TIME_EVENT_ELAPSED_TIME__EVENT__FRAMEWORK_LOCKED_BOOT_COMPLETED,
+                        elapsedTimeMs);
+                final long maxElapsedTimeMs = 120_000;
+                if (elapsedTimeMs > maxElapsedTimeMs) {
                     Slog.wtf("SystemServerTiming",
-                            "finishUserBoot took too long. uptimeSeconds=" + uptimeSeconds);
+                            "finishUserBoot took too long. elapsedTimeMs=" + elapsedTimeMs);
                 }
             }
 
@@ -414,6 +416,7 @@
                 Intent intent = new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED, null);
                 intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
                 intent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT
+                        | Intent.FLAG_RECEIVER_OFFLOAD
                         | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
                 mInjector.broadcastIntent(intent, null, resultTo, 0, null, null,
                         new String[]{android.Manifest.permission.RECEIVE_BOOT_COMPLETED},
@@ -617,9 +620,10 @@
         // Do not report secondary users, runtime restarts or first boot/upgrade
         if (userId == UserHandle.USER_SYSTEM
                 && !mInjector.isRuntimeRestarted() && !mInjector.isFirstBootOrUpgrade()) {
-            int uptimeSeconds = (int) (SystemClock.elapsedRealtime() / 1000);
-            MetricsLogger.histogram(mInjector.getContext(), "framework_boot_completed",
-                    uptimeSeconds);
+            final long elapsedTimeMs = SystemClock.elapsedRealtime();
+            FrameworkStatsLog.write(FrameworkStatsLog.BOOT_TIME_EVENT_ELAPSED_TIME_REPORTED,
+                    FrameworkStatsLog.BOOT_TIME_EVENT_ELAPSED_TIME__EVENT__FRAMEWORK_BOOT_COMPLETED,
+                    elapsedTimeMs);
         }
         final Intent bootIntent = new Intent(Intent.ACTION_BOOT_COMPLETED, null);
         bootIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
@@ -2447,10 +2451,10 @@
                 int realCallingPid, @UserIdInt int userId) {
             // TODO b/64165549 Verify that mLock is not held before calling AMS methods
             synchronized (mService) {
-                return mService.broadcastIntentLocked(null, null, intent, resolvedType, resultTo,
-                        resultCode, resultData, resultExtras, requiredPermissions, appOp, bOptions,
-                        ordered, sticky, callingPid, callingUid, realCallingUid, realCallingPid,
-                        userId);
+                return mService.broadcastIntentLocked(null, null, null, intent, resolvedType,
+                        resultTo, resultCode, resultData, resultExtras, requiredPermissions, appOp,
+                        bOptions, ordered, sticky, callingPid, callingUid, realCallingUid,
+                        realCallingPid, userId);
             }
         }
 
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index a0589c5..7462f7f 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -19,17 +19,22 @@
 import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_CAMERA;
 import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION;
 import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_MICROPHONE;
+import static android.app.AppOpsManager.CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE;
 import static android.app.AppOpsManager.FILTER_BY_FEATURE_ID;
 import static android.app.AppOpsManager.FILTER_BY_OP_NAMES;
 import static android.app.AppOpsManager.FILTER_BY_PACKAGE_NAME;
 import static android.app.AppOpsManager.FILTER_BY_UID;
 import static android.app.AppOpsManager.HistoricalOpsRequestFilter;
+import static android.app.AppOpsManager.KEY_BG_STATE_SETTLE_TIME;
+import static android.app.AppOpsManager.KEY_FG_SERVICE_STATE_SETTLE_TIME;
+import static android.app.AppOpsManager.KEY_TOP_STATE_SETTLE_TIME;
 import static android.app.AppOpsManager.MODE_ALLOWED;
 import static android.app.AppOpsManager.NoteOpEvent;
 import static android.app.AppOpsManager.OP_CAMERA;
 import static android.app.AppOpsManager.OP_COARSE_LOCATION;
 import static android.app.AppOpsManager.OP_FLAGS_ALL;
 import static android.app.AppOpsManager.OP_FLAG_SELF;
+import static android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXIED;
 import static android.app.AppOpsManager.OP_NONE;
 import static android.app.AppOpsManager.OP_PLAY_AUDIO;
 import static android.app.AppOpsManager.OP_RECORD_AUDIO;
@@ -41,17 +46,25 @@
 import static android.app.AppOpsManager.UID_STATE_MAX_LAST_NON_RESTRICTED;
 import static android.app.AppOpsManager.UID_STATE_PERSISTENT;
 import static android.app.AppOpsManager.UID_STATE_TOP;
+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;
 import static android.app.AppOpsManager.makeKey;
 import static android.app.AppOpsManager.modeToName;
 import static android.app.AppOpsManager.opToName;
+import static android.app.AppOpsManager.opToPublicName;
 import static android.app.AppOpsManager.resolveFirstUnrestrictedUidState;
 import static android.content.Intent.ACTION_PACKAGE_REMOVED;
 import static android.content.Intent.EXTRA_REPLACING;
 import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS;
-import static android.os.Process.STATSD_UID;
+import static android.content.pm.PermissionInfo.PROTECTION_FLAG_APPOP;
+import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED;
+import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM;
+
+import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS;
+
+import static java.lang.Long.max;
 
 import android.Manifest;
 import android.annotation.IntRange;
@@ -70,6 +83,9 @@
 import android.app.AppOpsManagerInternal;
 import android.app.AppOpsManagerInternal.CheckOpsDelegate;
 import android.app.AsyncNotedAppOp;
+import android.app.RuntimeAppOpAccessMessage;
+import android.app.SyncNotedAppOp;
+import android.compat.Compatibility;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -77,12 +93,12 @@
 import android.content.IntentFilter;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.IPackageManager;
+import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManagerInternal;
 import android.content.pm.PermissionInfo;
 import android.content.pm.UserInfo;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ComponentParseUtils.ParsedFeature;
+import android.content.pm.parsing.component.ParsedFeature;
 import android.database.ContentObserver;
 import android.hardware.camera2.CameraDevice.CAMERA_AUDIO_RESTRICTION;
 import android.net.Uri;
@@ -127,9 +143,9 @@
 import com.android.internal.app.IAppOpsCallback;
 import com.android.internal.app.IAppOpsNotedCallback;
 import com.android.internal.app.IAppOpsService;
+import com.android.internal.app.MessageSamplingConfig;
 import com.android.internal.os.Zygote;
 import com.android.internal.util.ArrayUtils;
-import com.android.internal.util.CollectionUtils;
 import com.android.internal.util.DumpUtils;
 import com.android.internal.util.FastXmlSerializer;
 import com.android.internal.util.Preconditions;
@@ -138,6 +154,8 @@
 import com.android.server.LocalServices;
 import com.android.server.LockGuard;
 import com.android.server.SystemServerInitThreadPool;
+import com.android.server.pm.PackageList;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import libcore.util.EmptyArray;
 
@@ -154,6 +172,8 @@
 import java.io.PrintWriter;
 import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -163,6 +183,8 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.function.Consumer;
 
 public class AppOpsService extends IAppOpsService.Stub {
     static final String TAG = "AppOps";
@@ -216,7 +238,7 @@
     //TODO: remove this when development is done.
     private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_LOCATION = 1 << 31;
 
-    Context mContext;
+    final Context mContext;
     final AtomicFile mFile;
     final Handler mHandler;
 
@@ -291,11 +313,42 @@
     @GuardedBy("this")
     private CheckOpsDelegate mCheckOpsDelegate;
 
-    @GuardedBy("this")
-    private SparseArray<List<Integer>> mSwitchOpToOps;
+    /**
+      * Reverse lookup for {@link AppOpsManager#opToSwitch(int)}. Initialized once and never
+      * changed
+      */
+    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;
+
+    /** Appop sampled for message collection in the current session */
+    @GuardedBy("this")
+    private int mSampledAppOpCode = OP_NONE;
+
+    /** Maximum distance for appop to be considered for message collection in the current session */
+    @GuardedBy("this")
+    private int mAcceptableLeftDistance = 0;
+
+    /** Number of messages collected for sampled package and appop in the current session */
+    @GuardedBy("this")
+    private float mMessagesCollectedCount;
+
+    /** List of rarely used packages priorities for message collection */
+    @GuardedBy("this")
+    private ArraySet<String> mRarelyUsedPackages = new ArraySet<>();
+
+    /** Sampling strategy used for current session */
+    @GuardedBy("this")
+    @AppOpsManager.SamplingStrategy
+    private int mSamplingStrategy;
+
+    /** Last runtime permission access message collected and ready for reporting */
+    @GuardedBy("this")
+    private RuntimeAppOpAccessMessage mCollectedRuntimePermissionMessage;
     /**
      * An unsynchronized pool of {@link OpEventProxyInfo} objects.
      */
@@ -343,30 +396,25 @@
      */
     @VisibleForTesting
     final class Constants extends ContentObserver {
-        // Key names stored in the settings value.
-        private static final String KEY_TOP_STATE_SETTLE_TIME = "top_state_settle_time";
-        private static final String KEY_FG_SERVICE_STATE_SETTLE_TIME
-                = "fg_service_state_settle_time";
-        private static final String KEY_BG_STATE_SETTLE_TIME = "bg_state_settle_time";
 
         /**
          * How long we want for a drop in uid state from top to settle before applying it.
          * @see Settings.Global#APP_OPS_CONSTANTS
-         * @see #KEY_TOP_STATE_SETTLE_TIME
+         * @see AppOpsManager#KEY_TOP_STATE_SETTLE_TIME
          */
         public long TOP_STATE_SETTLE_TIME;
 
         /**
          * How long we want for a drop in uid state from foreground to settle before applying it.
          * @see Settings.Global#APP_OPS_CONSTANTS
-         * @see #KEY_FG_SERVICE_STATE_SETTLE_TIME
+         * @see AppOpsManager#KEY_FG_SERVICE_STATE_SETTLE_TIME
          */
         public long FG_SERVICE_STATE_SETTLE_TIME;
 
         /**
          * How long we want for a drop in uid state from background to settle before applying it.
          * @see Settings.Global#APP_OPS_CONSTANTS
-         * @see #KEY_BG_STATE_SETTLE_TIME
+         * @see AppOpsManager#KEY_BG_STATE_SETTLE_TIME
          */
         public long BG_STATE_SETTLE_TIME;
 
@@ -404,9 +452,9 @@
                     Slog.e(TAG, "Bad app ops settings", e);
                 }
                 TOP_STATE_SETTLE_TIME = mParser.getDurationMillis(
-                        KEY_TOP_STATE_SETTLE_TIME, 30 * 1000L);
+                        KEY_TOP_STATE_SETTLE_TIME, 5 * 1000L);
                 FG_SERVICE_STATE_SETTLE_TIME = mParser.getDurationMillis(
-                        KEY_FG_SERVICE_STATE_SETTLE_TIME, 10 * 1000L);
+                        KEY_FG_SERVICE_STATE_SETTLE_TIME, 5 * 1000L);
                 BG_STATE_SETTLE_TIME = mParser.getDurationMillis(
                         KEY_BG_STATE_SETTLE_TIME, 1 * 1000L);
             }
@@ -488,9 +536,8 @@
                                 // The FGS has the location capability, but due to FGS BG start
                                 // restriction it lost the capability, use temp location capability
                                 // to mark this case.
-                                // TODO change to MODE_IGNORED when enforcing the feature.
                                 maybeShowWhileInUseDebugToast(op, mode);
-                                return AppOpsManager.MODE_ALLOWED;
+                                return AppOpsManager.MODE_IGNORED;
                             } else {
                                 return AppOpsManager.MODE_IGNORED;
                             }
@@ -498,17 +545,15 @@
                             if ((capability & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) {
                                 return AppOpsManager.MODE_ALLOWED;
                             } else {
-                                //TODO change to MODE_IGNORED when enforcing the feature.
                                 maybeShowWhileInUseDebugToast(op, mode);
-                                return AppOpsManager.MODE_ALLOWED;
+                                return AppOpsManager.MODE_IGNORED;
                             }
                         case OP_RECORD_AUDIO:
                             if ((capability & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) {
                                 return AppOpsManager.MODE_ALLOWED;
                             } else {
-                                //TODO change to MODE_IGNORED when enforcing the feature.
                                 maybeShowWhileInUseDebugToast(op, mode);
-                                return AppOpsManager.MODE_ALLOWED;
+                                return AppOpsManager.MODE_IGNORED;
                             }
                         default:
                             return AppOpsManager.MODE_ALLOWED;
@@ -523,17 +568,15 @@
                         if ((capability & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) {
                             return AppOpsManager.MODE_ALLOWED;
                         } else {
-                            //TODO change to MODE_IGNORED when enforcing the feature.
                             maybeShowWhileInUseDebugToast(op, mode);
-                            return AppOpsManager.MODE_ALLOWED;
+                            return AppOpsManager.MODE_IGNORED;
                         }
                     case OP_RECORD_AUDIO:
                         if ((capability & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) {
                             return AppOpsManager.MODE_ALLOWED;
                         } else {
-                            //TODO change to MODE_IGNORED when enforcing the feature.
                             maybeShowWhileInUseDebugToast(op, mode);
-                            return AppOpsManager.MODE_ALLOWED;
+                            return AppOpsManager.MODE_IGNORED;
                         }
                     default:
                         return MODE_ALLOWED;
@@ -1191,17 +1234,22 @@
     final AudioRestrictionManager mAudioRestrictionManager = new AudioRestrictionManager();
 
     final class ModeCallback implements DeathRecipient {
+        /** If mWatchedOpCode==ALL_OPS notify for ops affected by the switch-op */
+        public static final int ALL_OPS = -2;
+
         final IAppOpsCallback mCallback;
         final int mWatchingUid;
         final int mFlags;
+        final int mWatchedOpCode;
         final int mCallingUid;
         final int mCallingPid;
 
-        ModeCallback(IAppOpsCallback callback, int watchingUid, int flags, int callingUid,
-                int callingPid) {
+        ModeCallback(IAppOpsCallback callback, int watchingUid, int flags, int watchedOp,
+                int callingUid, int callingPid) {
             mCallback = callback;
             mWatchingUid = watchingUid;
             mFlags = flags;
+            mWatchedOpCode = watchedOp;
             mCallingUid = callingUid;
             mCallingPid = callingPid;
             try {
@@ -1224,6 +1272,17 @@
             UserHandle.formatUid(sb, mWatchingUid);
             sb.append(" flags=0x");
             sb.append(Integer.toHexString(mFlags));
+            switch (mWatchedOpCode) {
+                case OP_NONE:
+                    break;
+                case ALL_OPS:
+                    sb.append(" op=(all)");
+                    break;
+                default:
+                    sb.append(" op=");
+                    sb.append(opToName(mWatchedOpCode));
+                    break;
+            }
             sb.append(" from uid=");
             UserHandle.formatUid(sb, mCallingUid);
             sb.append(" pid=");
@@ -1337,16 +1396,23 @@
         featureOp.onClientDeath(clientId);
     }
 
-    public AppOpsService(File storagePath, Handler handler) {
+    public AppOpsService(File storagePath, Handler handler, Context context) {
+        mContext = context;
+
         LockGuard.installLock(this, LockGuard.INDEX_APP_OPS);
         mFile = new AtomicFile(storagePath, "appops");
         mHandler = handler;
         mConstants = new Constants(mHandler);
         readState();
+
+        for (int switchedCode = 0; switchedCode < _NUM_OP; switchedCode++) {
+            int switchCode = AppOpsManager.opToSwitch(switchedCode);
+            mSwitchedOps.put(switchCode,
+                    ArrayUtils.appendInt(mSwitchedOps.get(switchCode), switchedCode));
+        }
     }
 
-    public void publish(Context context) {
-        mContext = context;
+    public void publish() {
         ServiceManager.addService(Context.APP_OPS_SERVICE, asBinder());
         LocalServices.addService(AppOpsManagerInternal.class, mAppOpsManagerInternal);
     }
@@ -1512,6 +1578,38 @@
             }
         }, packageSuspendFilter);
 
+        final IntentFilter packageAddedFilter = new IntentFilter();
+        packageAddedFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
+        packageAddedFilter.addDataScheme("package");
+        mContext.registerReceiver(new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                final Uri data = intent.getData();
+
+                final String packageName = data.getSchemeSpecificPart();
+                PackageInfo pi = LocalServices.getService(
+                        PackageManagerInternal.class).getPackageInfo(packageName,
+                        PackageManager.GET_PERMISSIONS, Process.myUid(), mContext.getUserId());
+                if (isSamplingTarget(pi)) {
+                    synchronized (this) {
+                        mRarelyUsedPackages.add(packageName);
+                    }
+                }
+            }
+        }, packageAddedFilter);
+
+        List<String> packageNames = getPackageNamesForSampling();
+        synchronized (this) {
+            resamplePackageAndAppOpLocked(packageNames);
+        }
+
+        AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() {
+            @Override
+            public void run() {
+                initializeRarelyUsedPackagesList(new ArraySet<>(packageNames));
+            }
+        });
+
         PackageManagerInternal packageManagerInternal = LocalServices.getService(
                 PackageManagerInternal.class);
         packageManagerInternal.setExternalSourcesPolicy(
@@ -1616,6 +1714,19 @@
         }
     }
 
+    /**
+     * Update the pending state for the uid
+     *
+     * @param currentTime The current elapsed real time
+     * @param uid The uid that has a pending state
+     */
+    private void updatePendingState(long currentTime, int uid) {
+        synchronized (this) {
+            mLastRealtime = max(currentTime, mLastRealtime);
+            updatePendingStateIfNeededLocked(mUidStates.get(uid));
+        }
+    }
+
     public void updateUidProcState(int uid, int procState,
             @ActivityManager.ProcessCapability int capability) {
         synchronized (this) {
@@ -1647,7 +1758,12 @@
                     } else {
                         settleTime = mConstants.BG_STATE_SETTLE_TIME;
                     }
-                    uidState.pendingStateCommitTime = SystemClock.elapsedRealtime() + settleTime;
+                    final long commitTime = SystemClock.elapsedRealtime() + settleTime;
+                    uidState.pendingStateCommitTime = commitTime;
+
+                    mHandler.sendMessageDelayed(
+                            PooledLambda.obtainMessage(AppOpsService::updatePendingState, this,
+                                    commitTime + 1, uid), settleTime + 1);
                 }
 
                 if (uidState.pkgOps != null) {
@@ -1849,9 +1965,9 @@
 
         ActivityManagerInternal ami = LocalServices.getService(ActivityManagerInternal.class);
         boolean isCallerInstrumented = ami.isUidCurrentlyInstrumented(Binder.getCallingUid());
-        boolean isCallerStatsCollector = Binder.getCallingUid() == STATSD_UID;
+        boolean isCallerSystem = Binder.getCallingPid() == Process.myPid();
 
-        if (!isCallerStatsCollector && !isCallerInstrumented) {
+        if (!isCallerSystem && !isCallerInstrumented) {
             mHandler.post(() -> callback.sendResult(new Bundle()));
             return;
         }
@@ -1966,7 +2082,7 @@
     }
 
     private void setUidMode(int code, int uid, int mode,
-            @Nullable IAppOpsCallback callbackToIgnore) {
+            @Nullable IAppOpsCallback permissionPolicyCallback) {
         if (DEBUG) {
             Slog.i(TAG, "uid " + uid + " OP_" + opToName(code) + " := " + modeToName(mode)
                     + " by uid " + Binder.getCallingUid());
@@ -1976,7 +2092,9 @@
         verifyIncomingOp(code);
         code = AppOpsManager.opToSwitch(code);
 
-        updatePermissionRevokedCompat(uid, code, mode);
+        if (permissionPolicyCallback == null) {
+            updatePermissionRevokedCompat(uid, code, mode);
+        }
 
         synchronized (this) {
             final int defaultMode = AppOpsManager.opToDefaultMode(code);
@@ -2014,6 +2132,19 @@
             uidState.evalForegroundOps(mOpModeWatchers);
         }
 
+        notifyOpChangedForAllPkgsInUid(code, uid, false, permissionPolicyCallback);
+        notifyOpChangedSync(code, uid, null, mode);
+    }
+
+    /**
+     * Notify that an op changed for all packages in an uid.
+     *
+     * @param code The op that changed
+     * @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) {
         String[] uidPackageNames = getPackagesForUid(uid);
         ArrayMap<ModeCallback, ArraySet<String>> callbackSpecs = null;
 
@@ -2023,6 +2154,10 @@
                 final int callbackCount = callbacks.size();
                 for (int i = 0; i < callbackCount; i++) {
                     ModeCallback callback = callbacks.valueAt(i);
+                    if (onlyForeground && (callback.mFlags & WATCH_FOREGROUND_CHANGES) == 0) {
+                        continue;
+                    }
+
                     ArraySet<String> changedPackages = new ArraySet<>();
                     Collections.addAll(changedPackages, uidPackageNames);
                     if (callbackSpecs == null) {
@@ -2041,6 +2176,10 @@
                     final int callbackCount = callbacks.size();
                     for (int i = 0; i < callbackCount; i++) {
                         ModeCallback callback = callbacks.valueAt(i);
+                        if (onlyForeground && (callback.mFlags & WATCH_FOREGROUND_CHANGES) == 0) {
+                            continue;
+                        }
+
                         ArraySet<String> changedPackages = callbackSpecs.get(callback);
                         if (changedPackages == null) {
                             changedPackages = new ArraySet<>();
@@ -2057,7 +2196,6 @@
         }
 
         if (callbackSpecs == null) {
-            notifyOpChangedSync(code, uid, null, mode);
             return;
         }
 
@@ -2079,23 +2217,24 @@
                 }
             }
         }
-
-        notifyOpChangedSync(code, uid, null, mode);
     }
 
     private void updatePermissionRevokedCompat(int uid, int switchCode, int mode) {
         PackageManager packageManager = mContext.getPackageManager();
+        if (packageManager == null) {
+            // This can only happen during early boot. At this time the permission state and appop
+            // state are in sync
+            return;
+        }
+
         String[] packageNames = packageManager.getPackagesForUid(uid);
         if (ArrayUtils.isEmpty(packageNames)) {
             return;
         }
         String packageName = packageNames[0];
 
-        List<Integer> ops = getSwitchOpToOps().get(switchCode);
-        int opsSize = CollectionUtils.size(ops);
-        for (int i = 0; i < opsSize; i++) {
-            int code = ops.get(i);
-
+        int[] ops = mSwitchedOps.get(switchCode);
+        for (int code : ops) {
             String permissionName = AppOpsManager.opToPermission(code);
             if (permissionName == null) {
                 continue;
@@ -2173,25 +2312,6 @@
         }
     }
 
-    @NonNull
-    private SparseArray<List<Integer>> getSwitchOpToOps() {
-        synchronized (this) {
-            if (mSwitchOpToOps == null) {
-                mSwitchOpToOps = new SparseArray<>();
-                for (int op = 0; op < _NUM_OP; op++) {
-                    int switchOp = AppOpsManager.opToSwitch(op);
-                    List<Integer> ops = mSwitchOpToOps.get(switchOp);
-                    if (ops == null) {
-                        ops = new ArrayList<>();
-                        mSwitchOpToOps.put(switchOp, ops);
-                    }
-                    ops.add(op);
-                }
-            }
-            return mSwitchOpToOps;
-        }
-    }
-
     private void notifyOpChangedSync(int code, int uid, @NonNull String packageName, int mode) {
         final StorageManagerInternal storageManagerInternal =
                 LocalServices.getService(StorageManagerInternal.class);
@@ -2214,7 +2334,7 @@
     }
 
     private void setMode(int code, int uid, @NonNull String packageName, int mode,
-            @Nullable IAppOpsCallback callbackToIgnore) {
+            @Nullable IAppOpsCallback permissionPolicyCallback) {
         enforceManageAppOpsModes(Binder.getCallingPid(), Binder.getCallingUid(), uid);
         verifyIncomingOp(code);
         ArraySet<ModeCallback> repCbs = null;
@@ -2258,8 +2378,8 @@
                         }
                         repCbs.addAll(cbs);
                     }
-                    if (repCbs != null && callbackToIgnore != null) {
-                        repCbs.remove(mModeWatchers.get(callbackToIgnore.asBinder()));
+                    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
@@ -2292,16 +2412,29 @@
         if (uid != UID_ANY && callback.mWatchingUid >= 0 && callback.mWatchingUid != uid) {
             return;
         }
-        // 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 {
-            callback.mCallback.opChanged(code, uid, packageName);
-        } catch (RemoteException e) {
-            /* ignore */
-        } finally {
-            Binder.restoreCallingIdentity(identity);
+
+        // See CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE
+        int[] switchedCodes;
+        if (callback.mWatchedOpCode == ALL_OPS) {
+            switchedCodes = mSwitchedOps.get(code);
+        } else if (callback.mWatchedOpCode == OP_NONE) {
+            switchedCodes = new int[]{code};
+        } else {
+            switchedCodes = new int[]{callback.mWatchedOpCode};
+        }
+
+        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 {
+                callback.mCallback.opChanged(switchedCode, uid, packageName);
+            } catch (RemoteException e) {
+                /* ignore */
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
     }
 
@@ -2496,17 +2629,32 @@
             return;
         }
         synchronized (this) {
-            op = (op != AppOpsManager.OP_NONE) ? AppOpsManager.opToSwitch(op) : op;
+            int switchOp = (op != AppOpsManager.OP_NONE) ? AppOpsManager.opToSwitch(op) : op;
+
+            // See CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE
+            int notifiedOps;
+            if (Compatibility.isChangeEnabled(
+                    CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE)) {
+                if (op == OP_NONE) {
+                    notifiedOps = ALL_OPS;
+                } else {
+                    notifiedOps = op;
+                }
+            } else {
+                notifiedOps = switchOp;
+            }
+
             ModeCallback cb = mModeWatchers.get(callback.asBinder());
             if (cb == null) {
-                cb = new ModeCallback(callback, watchedUid, flags, callingUid, callingPid);
+                cb = new ModeCallback(callback, watchedUid, flags, notifiedOps, callingUid,
+                        callingPid);
                 mModeWatchers.put(callback.asBinder(), cb);
             }
-            if (op != AppOpsManager.OP_NONE) {
-                ArraySet<ModeCallback> cbs = mOpModeWatchers.get(op);
+            if (switchOp != AppOpsManager.OP_NONE) {
+                ArraySet<ModeCallback> cbs = mOpModeWatchers.get(switchOp);
                 if (cbs == null) {
                     cbs = new ArraySet<>();
-                    mOpModeWatchers.put(op, cbs);
+                    mOpModeWatchers.put(switchOp, cbs);
                 }
                 cbs.add(cb);
             }
@@ -2959,6 +3107,9 @@
                         featureId, message, System.currentTimeMillis());
                 final boolean[] wasNoteForwarded = {false};
 
+                reportRuntimeAppOpAccessMessageAsyncLocked(uid, packageName, opCode, featureId,
+                        message);
+
                 if (callbacks != null) {
                     callbacks.broadcast((cb) -> {
                         try {
@@ -3295,7 +3446,8 @@
             return false;
         }
 
-        return permInfo.getProtection() == PROTECTION_DANGEROUS;
+        return permInfo.getProtection() == PROTECTION_DANGEROUS
+                || (permInfo.getProtectionFlags() & PROTECTION_FLAG_APPOP) != 0;
     }
 
     private void verifyIncomingUid(int uid) {
@@ -3325,6 +3477,18 @@
             uidState = new UidState(uid);
             mUidStates.put(uid, uidState);
         } else {
+            updatePendingStateIfNeededLocked(uidState);
+        }
+        return uidState;
+    }
+
+    /**
+     * Check if the pending state should be updated and do so if needed
+     *
+     * @param uidState The uidState that might have a pending state
+     */
+    private void updatePendingStateIfNeededLocked(@NonNull UidState uidState) {
+        if (uidState != null) {
             if (uidState.pendingStateCommitTime != 0) {
                 if (uidState.pendingStateCommitTime < mLastRealtime) {
                     commitUidPendingStateLocked(uidState);
@@ -3336,7 +3500,6 @@
                 }
             }
         }
-        return uidState;
     }
 
     private void commitUidPendingStateLocked(UidState uidState) {
@@ -3356,24 +3519,28 @@
                         && uidState.appWidgetVisible == uidState.pendingAppWidgetVisible) {
                     continue;
                 }
-                final ArraySet<ModeCallback> callbacks = mOpModeWatchers.get(code);
-                if (callbacks != null) {
-                    for (int cbi = callbacks.size() - 1; cbi >= 0; cbi--) {
-                        final ModeCallback callback = callbacks.valueAt(cbi);
-                        if ((callback.mFlags & AppOpsManager.WATCH_FOREGROUND_CHANGES) == 0
-                                || !callback.isWatchingUid(uidState.uid)) {
-                            continue;
-                        }
-                        boolean doAllPackages = uidState.opModes != null
-                                && uidState.opModes.indexOfKey(code) >= 0
-                                && uidState.opModes.get(code) == AppOpsManager.MODE_FOREGROUND;
-                        if (uidState.pkgOps != null) {
+
+                if (uidState.opModes != null
+                        && uidState.opModes.indexOfKey(code) >= 0
+                        && uidState.opModes.get(code) == AppOpsManager.MODE_FOREGROUND) {
+                    mHandler.sendMessage(PooledLambda.obtainMessage(
+                            AppOpsService::notifyOpChangedForAllPkgsInUid,
+                            this, code, uidState.uid, true, null));
+                } else {
+                    final ArraySet<ModeCallback> callbacks = mOpModeWatchers.get(code);
+                    if (callbacks != null) {
+                        for (int cbi = callbacks.size() - 1; cbi >= 0; cbi--) {
+                            final ModeCallback callback = callbacks.valueAt(cbi);
+                            if ((callback.mFlags & AppOpsManager.WATCH_FOREGROUND_CHANGES) == 0
+                                    || !callback.isWatchingUid(uidState.uid)) {
+                                continue;
+                            }
                             for (int pkgi = uidState.pkgOps.size() - 1; pkgi >= 0; pkgi--) {
                                 final Op op = uidState.pkgOps.valueAt(pkgi).get(code);
                                 if (op == null) {
                                     continue;
                                 }
-                                if (doAllPackages || op.mode == AppOpsManager.MODE_FOREGROUND) {
+                                if (op.mode == AppOpsManager.MODE_FOREGROUND) {
                                     mHandler.sendMessage(PooledLambda.obtainMessage(
                                             AppOpsService::notifyOpChanged,
                                             this, callback, code, uidState.uid,
@@ -3798,11 +3965,7 @@
             if (tagName.equals("op")) {
                 final int code = Integer.parseInt(parser.getAttributeValue(null, "n"));
                 final int mode = Integer.parseInt(parser.getAttributeValue(null, "m"));
-                UidState uidState = getUidStateLocked(uid, true);
-                if (uidState.opModes == null) {
-                    uidState.opModes = new SparseIntArray();
-                }
-                uidState.opModes.put(code, mode);
+                setUidMode(code, uid, mode);
             } else {
                 Slog.w(TAG, "Unknown element under <uid-ops>: "
                         + parser.getName());
@@ -5411,6 +5574,227 @@
         mHistoricalRegistry.clearHistory();
     }
 
+    /**
+     * Report runtime access to AppOp together with message (including stack trace)
+     *
+     * @param packageName The package which reported the op
+     * @param notedAppOp contains code of op and featureId provided by developer
+     * @param message Message describing AppOp access (can be stack trace)
+     *
+     * @return Config for future sampling to reduce amount of reporting
+     */
+    @Override
+    public MessageSamplingConfig reportRuntimeAppOpAccessMessageAndGetConfig(
+            String packageName, SyncNotedAppOp notedAppOp, String message) {
+        int uid = Binder.getCallingUid();
+        Objects.requireNonNull(packageName);
+        synchronized (this) {
+            switchPackageIfRarelyUsedLocked(packageName);
+            if (!packageName.equals(mSampledPackage)) {
+                return new MessageSamplingConfig(OP_NONE, 0,
+                        Instant.now().plus(1, ChronoUnit.HOURS).toEpochMilli());
+            }
+
+            Objects.requireNonNull(notedAppOp);
+            Objects.requireNonNull(message);
+
+            reportRuntimeAppOpAccessMessageInternalLocked(uid, packageName,
+                    AppOpsManager.strOpToOp(notedAppOp.getOp()),
+                    notedAppOp.getFeatureId(), message);
+
+            return new MessageSamplingConfig(mSampledAppOpCode, mAcceptableLeftDistance,
+                    Instant.now().plus(1, ChronoUnit.HOURS).toEpochMilli());
+        }
+    }
+
+    /**
+     * Report runtime access to AppOp together with message (entry point for reporting
+     * asynchronous access)
+     * @param uid Uid of the package which reported the op
+     * @param packageName The package which reported the op
+     * @param opCode Code of AppOp
+     * @param featureId FeautreId of AppOp reported
+     * @param message Message describing AppOp access (can be stack trace)
+     */
+    private void reportRuntimeAppOpAccessMessageAsyncLocked(int uid,
+            @NonNull String packageName, int opCode, @Nullable String featureId,
+            @NonNull String message) {
+        switchPackageIfRarelyUsedLocked(packageName);
+        if (!Objects.equals(mSampledPackage, packageName)) {
+            return;
+        }
+        reportRuntimeAppOpAccessMessageInternalLocked(uid, packageName, opCode, featureId, message);
+    }
+
+    /**
+     * Decides whether reported message is within the range of watched AppOps and picks it for
+     * reporting uniformly at random across all received messages.
+     */
+    private void reportRuntimeAppOpAccessMessageInternalLocked(int uid,
+            @NonNull String packageName, int opCode, @Nullable String featureId,
+            @NonNull String message) {
+        int newLeftDistance = AppOpsManager.leftCircularDistance(opCode,
+                mSampledAppOpCode, _NUM_OP);
+
+        if (mAcceptableLeftDistance < newLeftDistance) {
+            return;
+        }
+
+        if (mAcceptableLeftDistance > newLeftDistance) {
+            mAcceptableLeftDistance = newLeftDistance;
+            mMessagesCollectedCount = 0.0f;
+        }
+
+        mMessagesCollectedCount += 1.0f;
+        if (ThreadLocalRandom.current().nextFloat() <= 1.0f / mMessagesCollectedCount) {
+            mCollectedRuntimePermissionMessage = new RuntimeAppOpAccessMessage(uid, opCode,
+                    packageName, featureId, message, mSamplingStrategy);
+        }
+        return;
+    }
+
+    /** Pulls current AppOps access report and resamples package and app op to watch */
+    @Override
+    public @Nullable RuntimeAppOpAccessMessage collectRuntimeAppOpAccessMessage() {
+        mContext.enforcePermission(android.Manifest.permission.GET_APP_OPS_STATS,
+                Binder.getCallingPid(), Binder.getCallingUid(), null);
+        RuntimeAppOpAccessMessage result;
+        List<String> packageNames = getPackageNamesForSampling();
+        synchronized (this) {
+            result = mCollectedRuntimePermissionMessage;
+            resamplePackageAndAppOpLocked(packageNames);
+        }
+        return result;
+    }
+
+    /**
+     * Checks if package is in the list of rarely used package and starts watching the new package
+     * to collect incoming message.
+     * @param packageName
+     */
+    private void switchPackageIfRarelyUsedLocked(@NonNull String packageName) {
+        if (mRarelyUsedPackages.contains(packageName)) {
+            mRarelyUsedPackages.remove(packageName);
+            if (ThreadLocalRandom.current().nextFloat() < 0.5f) {
+                mSamplingStrategy = RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED;
+                resampleAppOpForPackageLocked(packageName);
+            }
+        }
+    }
+
+    /** Resamples package and appop to watch from the list provided. */
+    private void resamplePackageAndAppOpLocked(@NonNull List<String> packageNames) {
+        if (!packageNames.isEmpty()) {
+            mSamplingStrategy = RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM;
+            resampleAppOpForPackageLocked(packageNames.get(
+                    ThreadLocalRandom.current().nextInt(packageNames.size())));
+        }
+    }
+
+    /** Resamples appop for the chosen package and initializes sampling state */
+    private void resampleAppOpForPackageLocked(@NonNull String packageName) {
+        mMessagesCollectedCount = 0.0f;
+        mSampledAppOpCode = ThreadLocalRandom.current().nextInt(_NUM_OP);
+        mAcceptableLeftDistance = _NUM_OP;
+        mSampledPackage = packageName;
+        mCollectedRuntimePermissionMessage = null;
+    }
+
+    /**
+     * Creates list of rarely used packages - packages which were not used over last week or
+     * which declared but did not use permissions over last week.
+     *  */
+    private void initializeRarelyUsedPackagesList(@NonNull ArraySet<String> candidates) {
+        AppOpsManager appOps = mContext.getSystemService(AppOpsManager.class);
+        List<String> runtimeAppOpsList = getRuntimeAppOpsList();
+        AppOpsManager.HistoricalOpsRequest histOpsRequest =
+                new AppOpsManager.HistoricalOpsRequest.Builder(
+                        Instant.now().minus(7, ChronoUnit.DAYS).toEpochMilli(),
+                        Long.MAX_VALUE).setOpNames(runtimeAppOpsList).setFlags(
+                        OP_FLAG_SELF | OP_FLAG_TRUSTED_PROXIED).build();
+        appOps.getHistoricalOps(histOpsRequest, AsyncTask.THREAD_POOL_EXECUTOR,
+                new Consumer<HistoricalOps>() {
+                    @Override
+                    public void accept(HistoricalOps histOps) {
+                        int uidCount = histOps.getUidCount();
+                        for (int uidIdx = 0; uidIdx < uidCount; uidIdx++) {
+                            final AppOpsManager.HistoricalUidOps uidOps = histOps.getUidOpsAt(
+                                    uidIdx);
+                            int pkgCount = uidOps.getPackageCount();
+                            for (int pkgIdx = 0; pkgIdx < pkgCount; pkgIdx++) {
+                                String packageName = uidOps.getPackageOpsAt(
+                                        pkgIdx).getPackageName();
+                                if (!candidates.contains(packageName)) {
+                                    continue;
+                                }
+                                AppOpsManager.HistoricalPackageOps packageOps =
+                                        uidOps.getPackageOpsAt(pkgIdx);
+                                if (packageOps.getOpCount() != 0) {
+                                    candidates.remove(packageName);
+                                }
+                            }
+                        }
+                        synchronized (this) {
+                            mRarelyUsedPackages = candidates;
+                        }
+                    }
+                });
+    }
+
+    /** List of app ops related to runtime permissions */
+    private List<String> getRuntimeAppOpsList() {
+        ArrayList<String> result = new ArrayList();
+        for (int i = 0; i < _NUM_OP; i++) {
+            if (shouldCollectNotes(i)) {
+                result.add(opToPublicName(i));
+            }
+        }
+        return result;
+    }
+
+    /** Returns list of packages to be used for package sampling */
+    private @NonNull List<String> getPackageNamesForSampling() {
+        List<String> packageNames = new ArrayList<>();
+        PackageManagerInternal packageManagerInternal = LocalServices.getService(
+                PackageManagerInternal.class);
+        PackageList packages = packageManagerInternal.getPackageList();
+        for (String packageName : packages.getPackageNames()) {
+            PackageInfo pkg = packageManagerInternal.getPackageInfo(packageName,
+                    PackageManager.GET_PERMISSIONS, Process.myUid(), mContext.getUserId());
+            if (isSamplingTarget(pkg)) {
+                packageNames.add(pkg.packageName);
+            }
+        }
+        return packageNames;
+    }
+
+    /** Checks whether package should be included in sampling pool */
+    private boolean isSamplingTarget(@Nullable PackageInfo pkg) {
+        if (pkg == null) {
+            return false;
+        }
+        if (pkg.applicationInfo.targetSdkVersion <= Build.VERSION_CODES.Q) {
+            return false;
+        }
+
+        String[] requestedPermissions = pkg.requestedPermissions;
+        if (requestedPermissions == null) {
+            return false;
+        }
+        for (String permission : requestedPermissions) {
+            PermissionInfo permissionInfo;
+            try {
+                permissionInfo = mContext.getPackageManager().getPermissionInfo(permission, 0);
+            } catch (PackageManager.NameNotFoundException ignored) {
+                continue;
+            }
+            if (permissionInfo.getProtection() == PROTECTION_DANGEROUS) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private void removeUidsForUserLocked(int userHandle) {
         for (int i = mUidStates.size() - 1; i >= 0; --i) {
             final int uid = mUidStates.keyAt(i);
@@ -5649,15 +6033,15 @@
         }
 
         @Override
-        public void setUidModeIgnoringCallback(int code, int uid, int mode,
-                @Nullable IAppOpsCallback callbackToIgnore) {
-            setUidMode(code, uid, mode, callbackToIgnore);
+        public void setUidModeFromPermissionPolicy(int code, int uid, int mode,
+                @Nullable IAppOpsCallback callback) {
+            setUidMode(code, uid, mode, callback);
         }
 
         @Override
-        public void setModeIgnoringCallback(int code, int uid, @NonNull String packageName,
-                int mode, @Nullable IAppOpsCallback callbackToIgnore) {
-            setMode(code, uid, packageName, mode, callbackToIgnore);
+        public void setModeFromPermissionPolicy(int code, int uid, @NonNull String packageName,
+                int mode, @Nullable IAppOpsCallback callback) {
+            setMode(code, uid, packageName, mode, callback);
         }
     }
 }
diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
index 60f420e..b546120 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
@@ -24,11 +24,12 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
-import android.media.AudioDeviceAddress;
+import android.media.AudioDeviceAttributes;
 import android.media.AudioManager;
 import android.media.AudioRoutesInfo;
 import android.media.AudioSystem;
 import android.media.IAudioRoutesObserver;
+import android.media.IStrategyPreferredDeviceDispatcher;
 import android.os.Binder;
 import android.os.Handler;
 import android.os.IBinder;
@@ -402,7 +403,7 @@
     }
 
     /*package*/ int setPreferredDeviceForStrategySync(int strategy,
-                                                      @NonNull AudioDeviceAddress device) {
+                                                      @NonNull AudioDeviceAttributes device) {
         return mDeviceInventory.setPreferredDeviceForStrategySync(strategy, device);
     }
 
@@ -410,6 +411,16 @@
         return mDeviceInventory.removePreferredDeviceForStrategySync(strategy);
     }
 
+    /*package*/ void registerStrategyPreferredDeviceDispatcher(
+            @NonNull IStrategyPreferredDeviceDispatcher dispatcher) {
+        mDeviceInventory.registerStrategyPreferredDeviceDispatcher(dispatcher);
+    }
+
+    /*package*/ void unregisterStrategyPreferredDeviceDispatcher(
+            @NonNull IStrategyPreferredDeviceDispatcher dispatcher) {
+        mDeviceInventory.unregisterStrategyPreferredDeviceDispatcher(dispatcher);
+    }
+
     //---------------------------------------------------------------------
     // Communication with (to) AudioService
     //TODO check whether the AudioService methods are candidates to move here
@@ -543,7 +554,8 @@
         sendLMsgNoDelay(MSG_L_SCOCLIENT_DIED, SENDMSG_QUEUE, obj);
     }
 
-    /*package*/ void postSaveSetPreferredDeviceForStrategy(int strategy, AudioDeviceAddress device)
+    /*package*/ void postSaveSetPreferredDeviceForStrategy(int strategy,
+                                                           AudioDeviceAttributes device)
     {
         sendILMsgNoDelay(MSG_IL_SAVE_PREF_DEVICE_FOR_STRATEGY, SENDMSG_QUEUE, strategy, device);
     }
@@ -904,7 +916,7 @@
                 } break;
                 case MSG_IL_SAVE_PREF_DEVICE_FOR_STRATEGY: {
                     final int strategy = msg.arg1;
-                    final AudioDeviceAddress device = (AudioDeviceAddress) msg.obj;
+                    final AudioDeviceAttributes device = (AudioDeviceAttributes) msg.obj;
                     mDeviceInventory.onSaveSetPreferredDevice(strategy, device);
                 } break;
                 case MSG_I_SAVE_REMOVE_PREF_DEVICE_FOR_STRATEGY: {
diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
index 75d9dd8..c17ed3e 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
@@ -16,6 +16,7 @@
 package com.android.server.audio;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.bluetooth.BluetoothA2dp;
 import android.bluetooth.BluetoothAdapter;
@@ -23,7 +24,7 @@
 import android.bluetooth.BluetoothHearingAid;
 import android.bluetooth.BluetoothProfile;
 import android.content.Intent;
-import android.media.AudioDeviceAddress;
+import android.media.AudioDeviceAttributes;
 import android.media.AudioDevicePort;
 import android.media.AudioFormat;
 import android.media.AudioManager;
@@ -31,6 +32,7 @@
 import android.media.AudioRoutesInfo;
 import android.media.AudioSystem;
 import android.media.IAudioRoutesObserver;
+import android.media.IStrategyPreferredDeviceDispatcher;
 import android.os.Binder;
 import android.os.RemoteCallbackList;
 import android.os.RemoteException;
@@ -75,7 +77,7 @@
     private final ArrayMap<Integer, String> mApmConnectedDevices = new ArrayMap<>();
 
     // List of preferred devices for strategies
-    private final ArrayMap<Integer, AudioDeviceAddress> mPreferredDevices = new ArrayMap<>();
+    private final ArrayMap<Integer, AudioDeviceAttributes> mPreferredDevices = new ArrayMap<>();
 
     // the wrapper for AudioSystem static methods, allows us to spy AudioSystem
     private final @NonNull AudioSystemAdapter mAudioSystem;
@@ -87,6 +89,10 @@
     final RemoteCallbackList<IAudioRoutesObserver> mRoutesObservers =
             new RemoteCallbackList<IAudioRoutesObserver>();
 
+    // Monitoring of strategy-preferred device
+    final RemoteCallbackList<IStrategyPreferredDeviceDispatcher> mPrefDevDispatchers =
+            new RemoteCallbackList<IStrategyPreferredDeviceDispatcher>();
+
     /*package*/ AudioDeviceInventory(@NonNull AudioDeviceBroker broker) {
         mDeviceBroker = broker;
         mAudioSystem = AudioSystemAdapter.getDefaultAdapter();
@@ -468,19 +474,21 @@
         }
     }
 
-    /*package*/ void onSaveSetPreferredDevice(int strategy, @NonNull AudioDeviceAddress device) {
+    /*package*/ void onSaveSetPreferredDevice(int strategy, @NonNull AudioDeviceAttributes device) {
         mPreferredDevices.put(strategy, device);
+        dispatchPreferredDevice(strategy, device);
     }
 
     /*package*/ void onSaveRemovePreferredDevice(int strategy) {
         mPreferredDevices.remove(strategy);
+        dispatchPreferredDevice(strategy, null);
     }
 
     //------------------------------------------------------------
     //
 
     /*package*/ int setPreferredDeviceForStrategySync(int strategy,
-                                                      @NonNull AudioDeviceAddress device) {
+                                                      @NonNull AudioDeviceAttributes device) {
         final long identity = Binder.clearCallingIdentity();
         final int status = mAudioSystem.setPreferredDeviceForStrategy(strategy, device);
         Binder.restoreCallingIdentity(identity);
@@ -502,6 +510,16 @@
         return status;
     }
 
+    /*package*/ void registerStrategyPreferredDeviceDispatcher(
+            @NonNull IStrategyPreferredDeviceDispatcher dispatcher) {
+        mPrefDevDispatchers.register(dispatcher);
+    }
+
+    /*package*/ void unregisterStrategyPreferredDeviceDispatcher(
+            @NonNull IStrategyPreferredDeviceDispatcher dispatcher) {
+        mPrefDevDispatchers.unregister(dispatcher);
+    }
+
     /**
      * Implements the communication with AudioSystem to (dis)connect a device in the native layers
      * @param connect true if connection
@@ -702,6 +720,10 @@
                 delay = 0;
             }
             mDeviceBroker.postSetHearingAidConnectionState(state, device, delay);
+            if (state == BluetoothHearingAid.STATE_CONNECTED) {
+                mDeviceBroker.setForceUse_Async(AudioSystem.FOR_MEDIA, AudioSystem.FORCE_NONE,
+                                "HEARING_AID set to CONNECTED");
+            }
             return delay;
         }
     }
@@ -1090,6 +1112,17 @@
         }
     }
 
+    private void dispatchPreferredDevice(int strategy, @Nullable AudioDeviceAttributes device) {
+        final int nbDispatchers = mPrefDevDispatchers.beginBroadcast();
+        for (int i = 0; i < nbDispatchers; i++) {
+            try {
+                mPrefDevDispatchers.getBroadcastItem(i).dispatchPrefDeviceChanged(strategy, device);
+            } catch (RemoteException e) {
+            }
+        }
+        mPrefDevDispatchers.finishBroadcast();
+    }
+
     //----------------------------------------------------------
     // For tests only
 
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 82a2f01..f3d42ad 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -21,7 +21,6 @@
 import static android.media.AudioManager.RINGER_MODE_SILENT;
 import static android.media.AudioManager.RINGER_MODE_VIBRATE;
 import static android.media.AudioManager.STREAM_SYSTEM;
-import static android.media.audiopolicy.AudioMixingRule.RULE_MATCH_ATTRIBUTE_USAGE;
 import static android.os.Process.FIRST_APPLICATION_UID;
 import static android.provider.Settings.Secure.VOLUME_HUSH_MUTE;
 import static android.provider.Settings.Secure.VOLUME_HUSH_OFF;
@@ -31,6 +30,7 @@
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.UserIdInt;
 import android.app.ActivityManager;
 import android.app.ActivityManagerInternal;
 import android.app.AppGlobals;
@@ -65,7 +65,7 @@
 import android.hidl.manager.V1_0.IServiceManager;
 import android.media.AudioAttributes;
 import android.media.AudioAttributes.AttributeSystemUsage;
-import android.media.AudioDeviceAddress;
+import android.media.AudioDeviceAttributes;
 import android.media.AudioDeviceInfo;
 import android.media.AudioFocusInfo;
 import android.media.AudioFocusRequest;
@@ -83,6 +83,7 @@
 import android.media.IPlaybackConfigDispatcher;
 import android.media.IRecordingConfigDispatcher;
 import android.media.IRingtonePlayer;
+import android.media.IStrategyPreferredDeviceDispatcher;
 import android.media.IVolumeController;
 import android.media.MediaExtractor;
 import android.media.MediaFormat;
@@ -90,7 +91,6 @@
 import android.media.VolumePolicy;
 import android.media.audiofx.AudioEffect;
 import android.media.audiopolicy.AudioMix;
-import android.media.audiopolicy.AudioMixingRule.AudioMixMatchCriterion;
 import android.media.audiopolicy.AudioPolicy;
 import android.media.audiopolicy.AudioPolicyConfig;
 import android.media.audiopolicy.AudioProductStrategy;
@@ -129,6 +129,7 @@
 import android.util.MathUtils;
 import android.util.PrintWriterPrinter;
 import android.util.Slog;
+import android.util.SparseArray;
 import android.util.SparseIntArray;
 import android.view.KeyEvent;
 import android.view.accessibility.AccessibilityManager;
@@ -158,6 +159,7 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Objects;
 import java.util.Set;
@@ -248,6 +250,7 @@
     // AudioHandler messages
     private static final int MSG_SET_DEVICE_VOLUME = 0;
     private static final int MSG_PERSIST_VOLUME = 1;
+    private static final int MSG_PERSIST_VOLUME_GROUP = 2;
     private static final int MSG_PERSIST_RINGER_MODE = 3;
     private static final int MSG_AUDIO_SERVER_DIED = 4;
     private static final int MSG_PLAY_SOUND_EFFECT = 5;
@@ -781,6 +784,10 @@
         mSettingsObserver = new SettingsObserver();
         createStreamStates();
 
+        // must be called after createStreamStates() as it uses MUSIC volume as default if no
+        // persistent data
+        initVolumeGroupStates();
+
         // mSafeUsbMediaVolumeIndex must be initialized after createStreamStates() because it
         // relies on audio policy having correct ranges for volume indexes.
         mSafeUsbMediaVolumeIndex = getSafeUsbMediaVolumeIndex();
@@ -996,11 +1003,14 @@
         mDeviceBroker.onAudioServerDied();
 
         // Restore call state
-        if (AudioSystem.setPhoneState(mMode) ==  AudioSystem.AUDIO_STATUS_OK) {
-            mModeLogger.log(new AudioEventLogger.StringEvent(
-                "onAudioServerDied causes setPhoneState(" + AudioSystem.modeToString(mMode) + ")"));
+        synchronized (mDeviceBroker.mSetModeLock) {
+            if (AudioSystem.setPhoneState(mMode, getModeOwnerUid())
+                    ==  AudioSystem.AUDIO_STATUS_OK) {
+                mModeLogger.log(new AudioEventLogger.StringEvent(
+                        "onAudioServerDied causes setPhoneState(" + AudioSystem.modeToString(mMode)
+                        + ", uid=" + getModeOwnerUid() + ")"));
+            }
         }
-
         final int forSys;
         synchronized (mSettingsLock) {
             forSys = mCameraSoundForced ?
@@ -1019,6 +1029,9 @@
             streamState.applyAllVolumes();
         }
 
+        // Restore audio volume groups
+        restoreVolumeGroups();
+
         // Restore mono mode
         updateMasterMono(mContentResolver);
 
@@ -1064,6 +1077,15 @@
                             + AudioSystem.audioSystemErrorToString(status)
                             + " when connecting mixes for policy " + policy.toLogFriendlyString());
                     policy.release();
+                } else {
+                    final int deviceAffinitiesStatus = policy.setupDeviceAffinities();
+                    if (deviceAffinitiesStatus != AudioSystem.SUCCESS) {
+                        Log.e(TAG, "onAudioServerDied: error "
+                                + AudioSystem.audioSystemErrorToString(deviceAffinitiesStatus)
+                                + " when connecting device affinities for policy "
+                                + policy.toLogFriendlyString());
+                        policy.release();
+                    }
                 }
             }
         }
@@ -1712,7 +1734,7 @@
     // IPC methods
     ///////////////////////////////////////////////////////////////////////////
     /** @see AudioManager#setPreferredDeviceForStrategy(AudioProductStrategy, AudioDeviceInfo) */
-    public int setPreferredDeviceForStrategy(int strategy, AudioDeviceAddress device) {
+    public int setPreferredDeviceForStrategy(int strategy, AudioDeviceAttributes device) {
         if (device == null) {
             return AudioSystem.ERROR;
         }
@@ -1721,7 +1743,7 @@
                 "setPreferredDeviceForStrategy u/pid:%d/%d strat:%d dev:%s",
                 Binder.getCallingUid(), Binder.getCallingPid(), strategy, device.toString());
         sDeviceLogger.log(new AudioEventLogger.StringEvent(logString).printLog(TAG));
-        if (device.getRole() == AudioDeviceAddress.ROLE_INPUT) {
+        if (device.getRole() == AudioDeviceAttributes.ROLE_INPUT) {
             Log.e(TAG, "Unsupported input routing in " + logString);
             return AudioSystem.ERROR;
         }
@@ -1749,9 +1771,9 @@
     }
 
     /** @see AudioManager#getPreferredDeviceForStrategy(AudioProductStrategy) */
-    public AudioDeviceAddress getPreferredDeviceForStrategy(int strategy) {
+    public AudioDeviceAttributes getPreferredDeviceForStrategy(int strategy) {
         enforceModifyAudioRoutingPermission();
-        AudioDeviceAddress[] devices = new AudioDeviceAddress[1];
+        AudioDeviceAttributes[] devices = new AudioDeviceAttributes[1];
         final long identity = Binder.clearCallingIdentity();
         final int status = AudioSystem.getPreferredDeviceForStrategy(strategy, devices);
         Binder.restoreCallingIdentity(identity);
@@ -1764,8 +1786,28 @@
         }
     }
 
+    /** @see AudioManager#addOnPreferredDeviceForStrategyChangedListener(Executor, AudioManager.OnPreferredDeviceForStrategyChangedListener) */
+    public void registerStrategyPreferredDeviceDispatcher(
+            @Nullable IStrategyPreferredDeviceDispatcher dispatcher) {
+        if (dispatcher == null) {
+            return;
+        }
+        enforceModifyAudioRoutingPermission();
+        mDeviceBroker.registerStrategyPreferredDeviceDispatcher(dispatcher);
+    }
+
+    /** @see AudioManager#removeOnPreferredDeviceForStrategyChangedListener(AudioManager.OnPreferredDeviceForStrategyChangedListener) */
+    public void unregisterStrategyPreferredDeviceDispatcher(
+            @Nullable IStrategyPreferredDeviceDispatcher dispatcher) {
+        if (dispatcher == null) {
+            return;
+        }
+        enforceModifyAudioRoutingPermission();
+        mDeviceBroker.unregisterStrategyPreferredDeviceDispatcher(dispatcher);
+    }
+
     /** @see AudioManager#getDevicesForAttributes(AudioAttributes) */
-    public @NonNull ArrayList<AudioDeviceAddress> getDevicesForAttributes(
+    public @NonNull ArrayList<AudioDeviceAttributes> getDevicesForAttributes(
             @NonNull AudioAttributes attributes) {
         Objects.requireNonNull(attributes);
         enforceModifyAudioRoutingPermission();
@@ -2269,20 +2311,20 @@
                                             String callingPackage) {
         enforceModifyAudioRoutingPermission();
         Objects.requireNonNull(attr, "attr must not be null");
-        // @todo not hold the caller context, post message
-        int stream = AudioProductStrategy.getLegacyStreamTypeForStrategyWithAudioAttributes(attr);
-        final int device = getDeviceForStream(stream);
-
-        int oldIndex = AudioSystem.getVolumeIndexForAttributes(attr, device);
-
-        AudioSystem.setVolumeIndexForAttributes(attr, index, device);
-
         final int volumeGroup = getVolumeGroupIdForAttributes(attr);
-        final AudioVolumeGroup avg = getAudioVolumeGroupById(volumeGroup);
-        if (avg == null) {
+        if (sVolumeGroupStates.indexOfKey(volumeGroup) < 0) {
+            Log.e(TAG, ": no volume group found for attributes " + attr.toString());
             return;
         }
-        for (final int groupedStream : avg.getLegacyStreamTypes()) {
+        final VolumeGroupState vgs = sVolumeGroupStates.get(volumeGroup);
+
+        sVolumeLogger.log(new VolumeEvent(VolumeEvent.VOL_SET_GROUP_VOL, attr, vgs.name(),
+                index/*val1*/, flags/*val2*/, callingPackage));
+
+        vgs.setVolumeIndex(index, flags);
+
+        // For legacy reason, propagate to all streams associated to this volume group
+        for (final int groupedStream : vgs.getLegacyStreamTypes()) {
             setStreamVolume(groupedStream, index, flags, callingPackage, callingPackage,
                             Binder.getCallingUid());
         }
@@ -2304,10 +2346,12 @@
     public int getVolumeIndexForAttributes(@NonNull AudioAttributes attr) {
         enforceModifyAudioRoutingPermission();
         Objects.requireNonNull(attr, "attr must not be null");
-        int stream = AudioProductStrategy.getLegacyStreamTypeForStrategyWithAudioAttributes(attr);
-        final int device = getDeviceForStream(stream);
-
-        return AudioSystem.getVolumeIndexForAttributes(attr, device);
+        final int volumeGroup = getVolumeGroupIdForAttributes(attr);
+        if (sVolumeGroupStates.indexOfKey(volumeGroup) < 0) {
+            throw new IllegalArgumentException("No volume group for attributes " + attr);
+        }
+        final VolumeGroupState vgs = sVolumeGroupStates.get(volumeGroup);
+        return vgs.getVolumeIndex();
     }
 
     /** @see AudioManager#getMaxVolumeIndexForAttributes(attr) */
@@ -3395,14 +3439,30 @@
         return modeOwnerPid;
     }
 
+    /**
+     * Return the uid of the current audio mode owner
+     * @return 0 if nobody owns the mode
+     */
+    /*package*/ int getModeOwnerUid() {
+        int modeOwnerUid = 0;
+        try {
+            modeOwnerUid = mSetModeDeathHandlers.get(0).getUid();
+        } catch (Exception e) {
+            // nothing to do, modeOwnerUid is not modified
+        }
+        return modeOwnerUid;
+    }
+
     private class SetModeDeathHandler implements IBinder.DeathRecipient {
-        private IBinder mCb; // To be notified of client's death
-        private int mPid;
+        private final IBinder mCb; // To be notified of client's death
+        private final int mPid;
+        private final int mUid;
         private int mMode = AudioSystem.MODE_NORMAL; // Current mode set by this client
 
-        SetModeDeathHandler(IBinder cb, int pid) {
+        SetModeDeathHandler(IBinder cb, int pid, int uid) {
             mCb = cb;
             mPid = pid;
+            mUid = uid;
         }
 
         public void binderDied() {
@@ -3415,7 +3475,7 @@
                 if (index < 0) {
                     Log.w(TAG, "unregistered setMode() client died");
                 } else {
-                    newModeOwnerPid = setModeInt(AudioSystem.MODE_NORMAL, mCb, mPid, TAG);
+                    newModeOwnerPid = setModeInt(AudioSystem.MODE_NORMAL, mCb, mPid, mUid, TAG);
                 }
             }
             // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all
@@ -3440,6 +3500,10 @@
         public IBinder getBinder() {
             return mCb;
         }
+
+        public int getUid() {
+            return mUid;
+        }
     }
 
     /** @see AudioManager#setMode(int) */
@@ -3488,7 +3552,8 @@
                         + " without permission or being mode owner");
                 return;
             }
-            newModeOwnerPid = setModeInt(mode, cb, callingPid, callingPackage);
+            newModeOwnerPid = setModeInt(
+                mode, cb, callingPid, Binder.getCallingUid(), callingPackage);
         }
         // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all
         // SCO connections not started by the application changing the mode when pid changes
@@ -3500,9 +3565,11 @@
     // setModeInt() returns a valid PID if the audio mode was successfully set to
     // any mode other than NORMAL.
     @GuardedBy("mDeviceBroker.mSetModeLock")
-    private int setModeInt(int mode, IBinder cb, int pid, String caller) {
-        if (DEBUG_MODE) { Log.v(TAG, "setModeInt(mode=" + mode + ", pid=" + pid + ", caller="
-                + caller + ")"); }
+    private int setModeInt(int mode, IBinder cb, int pid, int uid, String caller) {
+        if (DEBUG_MODE) {
+            Log.v(TAG, "setModeInt(mode=" + mode + ", pid=" + pid
+                    + ", uid=" + uid + ", caller=" + caller + ")");
+        }
         int newModeOwnerPid = 0;
         if (cb == null) {
             Log.e(TAG, "setModeInt() called with null binder");
@@ -3539,7 +3606,7 @@
                 }
             } else {
                 if (hdlr == null) {
-                    hdlr = new SetModeDeathHandler(cb, pid);
+                    hdlr = new SetModeDeathHandler(cb, pid, uid);
                 }
                 // Register for client death notification
                 try {
@@ -3557,7 +3624,7 @@
 
             if (actualMode != mMode) {
                 final long identity = Binder.clearCallingIdentity();
-                status = AudioSystem.setPhoneState(actualMode);
+                status = AudioSystem.setPhoneState(actualMode, getModeOwnerUid());
                 Binder.restoreCallingIdentity(identity);
                 if (status == AudioSystem.AUDIO_STATUS_OK) {
                     if (DEBUG_MODE) { Log.v(TAG, " mode successfully set to " + actualMode); }
@@ -3735,6 +3802,8 @@
                 enforceSafeMediaVolume(TAG);
             }
         }
+
+        readVolumeGroupsSettings();
     }
 
     /** @see AudioManager#setSpeakerphoneOn(boolean) */
@@ -4635,6 +4704,310 @@
     ///////////////////////////////////////////////////////////////////////////
     // Inner classes
     ///////////////////////////////////////////////////////////////////////////
+    /**
+     * Key is the AudioManager VolumeGroupId
+     * Value is the VolumeGroupState
+     */
+    private static final SparseArray<VolumeGroupState> sVolumeGroupStates = new SparseArray<>();
+
+    private void initVolumeGroupStates() {
+        for (final AudioVolumeGroup avg : getAudioVolumeGroups()) {
+            try {
+                // if no valid attributes, this volume group is not controllable, throw exception
+                ensureValidAttributes(avg);
+            } catch (IllegalArgumentException e) {
+                // Volume Groups without attributes are not controllable through set/get volume
+                // using attributes. Do not append them.
+                Log.d(TAG, "volume group " + avg.name() + " for internal policy needs");
+                continue;
+            }
+            sVolumeGroupStates.append(avg.getId(), new VolumeGroupState(avg));
+        }
+        for (int i = 0; i < sVolumeGroupStates.size(); i++) {
+            final VolumeGroupState vgs = sVolumeGroupStates.valueAt(i);
+            vgs.applyAllVolumes();
+        }
+    }
+
+    private void ensureValidAttributes(AudioVolumeGroup avg) {
+        boolean hasAtLeastOneValidAudioAttributes = avg.getAudioAttributes().stream()
+                .anyMatch(aa -> !aa.equals(AudioProductStrategy.sDefaultAttributes));
+        if (!hasAtLeastOneValidAudioAttributes) {
+            throw new IllegalArgumentException("Volume Group " + avg.name()
+                    + " has no valid audio attributes");
+        }
+    }
+
+    private void readVolumeGroupsSettings() {
+        Log.v(TAG, "readVolumeGroupsSettings");
+        for (int i = 0; i < sVolumeGroupStates.size(); i++) {
+            final VolumeGroupState vgs = sVolumeGroupStates.valueAt(i);
+            vgs.readSettings();
+            vgs.applyAllVolumes();
+        }
+    }
+
+    // Called upon crash of AudioServer
+    private void restoreVolumeGroups() {
+        Log.v(TAG, "restoreVolumeGroups");
+        for (int i = 0; i < sVolumeGroupStates.size(); i++) {
+            final VolumeGroupState vgs = sVolumeGroupStates.valueAt(i);
+            vgs.applyAllVolumes();
+        }
+    }
+
+    private void dumpVolumeGroups(PrintWriter pw) {
+        pw.println("\nVolume Groups (device: index)");
+        for (int i = 0; i < sVolumeGroupStates.size(); i++) {
+            final VolumeGroupState vgs = sVolumeGroupStates.valueAt(i);
+            vgs.dump(pw);
+            pw.println("");
+        }
+    }
+
+    // NOTE: Locking order for synchronized objects related to volume management:
+    //  1     mSettingsLock
+    //  2       VolumeGroupState.class
+    private class VolumeGroupState {
+        private final AudioVolumeGroup mAudioVolumeGroup;
+        private final SparseIntArray mIndexMap = new SparseIntArray(8);
+        private int mIndexMin;
+        private int mIndexMax;
+        private int mLegacyStreamType = AudioSystem.STREAM_DEFAULT;
+        private int mPublicStreamType = AudioSystem.STREAM_MUSIC;
+        private AudioAttributes mAudioAttributes = AudioProductStrategy.sDefaultAttributes;
+
+        // No API in AudioSystem to get a device from strategy or from attributes.
+        // Need a valid public stream type to use current API getDeviceForStream
+        private int getDeviceForVolume() {
+            return getDeviceForStream(mPublicStreamType);
+        }
+
+        private VolumeGroupState(AudioVolumeGroup avg) {
+            mAudioVolumeGroup = avg;
+            Log.v(TAG, "VolumeGroupState for " + avg.toString());
+            for (final AudioAttributes aa : avg.getAudioAttributes()) {
+                if (!aa.equals(AudioProductStrategy.sDefaultAttributes)) {
+                    mAudioAttributes = aa;
+                    break;
+                }
+            }
+            final int[] streamTypes = mAudioVolumeGroup.getLegacyStreamTypes();
+            if (streamTypes.length != 0) {
+                // Uses already initialized MIN / MAX if a stream type is attached to group
+                mLegacyStreamType = streamTypes[0];
+                for (final int streamType : streamTypes) {
+                    if (streamType != AudioSystem.STREAM_DEFAULT
+                            && streamType < AudioSystem.getNumStreamTypes()) {
+                        mPublicStreamType = streamType;
+                        break;
+                    }
+                }
+                mIndexMin = MIN_STREAM_VOLUME[mPublicStreamType];
+                mIndexMax = MAX_STREAM_VOLUME[mPublicStreamType];
+            } else if (!avg.getAudioAttributes().isEmpty()) {
+                mIndexMin = AudioSystem.getMinVolumeIndexForAttributes(mAudioAttributes);
+                mIndexMax = AudioSystem.getMaxVolumeIndexForAttributes(mAudioAttributes);
+            } else {
+                Log.e(TAG, "volume group: " + mAudioVolumeGroup.name()
+                        + " has neither valid attributes nor valid stream types assigned");
+                return;
+            }
+            // Load volume indexes from data base
+            readSettings();
+        }
+
+        public @NonNull int[] getLegacyStreamTypes() {
+            return mAudioVolumeGroup.getLegacyStreamTypes();
+        }
+
+        public String name() {
+            return mAudioVolumeGroup.name();
+        }
+
+        public int getVolumeIndex() {
+            return getIndex(getDeviceForVolume());
+        }
+
+        public void setVolumeIndex(int index, int flags) {
+            if (mUseFixedVolume) {
+                return;
+            }
+            setVolumeIndex(index, getDeviceForVolume(), flags);
+        }
+
+        private void setVolumeIndex(int index, int device, int flags) {
+            // Set the volume index
+            setVolumeIndexInt(index, device, flags);
+
+            // Update local cache
+            mIndexMap.put(device, index);
+
+            // update data base - post a persist volume group msg
+            sendMsg(mAudioHandler,
+                    MSG_PERSIST_VOLUME_GROUP,
+                    SENDMSG_QUEUE,
+                    device,
+                    0,
+                    this,
+                    PERSIST_DELAY);
+        }
+
+        private void setVolumeIndexInt(int index, int device, int flags) {
+            // Set the volume index
+            AudioSystem.setVolumeIndexForAttributes(mAudioAttributes, index, device);
+        }
+
+        public int getIndex(int device) {
+            synchronized (VolumeGroupState.class) {
+                int index = mIndexMap.get(device, -1);
+                // there is always an entry for AudioSystem.DEVICE_OUT_DEFAULT
+                return (index != -1) ? index : mIndexMap.get(AudioSystem.DEVICE_OUT_DEFAULT);
+            }
+        }
+
+        public boolean hasIndexForDevice(int device) {
+            synchronized (VolumeGroupState.class) {
+                return (mIndexMap.get(device, -1) != -1);
+            }
+        }
+
+        public int getMaxIndex() {
+            return mIndexMax;
+        }
+
+        public int getMinIndex() {
+            return mIndexMin;
+        }
+
+        public void applyAllVolumes() {
+            synchronized (VolumeGroupState.class) {
+                if (mLegacyStreamType != AudioSystem.STREAM_DEFAULT) {
+                    // No-op to avoid regression with stream based volume management
+                    return;
+                }
+                // apply device specific volumes first
+                int index;
+                for (int i = 0; i < mIndexMap.size(); i++) {
+                    final int device = mIndexMap.keyAt(i);
+                    if (device != AudioSystem.DEVICE_OUT_DEFAULT) {
+                        index = mIndexMap.valueAt(i);
+                        Log.v(TAG, "applyAllVolumes: restore index " + index + " for group "
+                                + mAudioVolumeGroup.name() + " and device "
+                                + AudioSystem.getOutputDeviceName(device));
+                        setVolumeIndexInt(index, device, 0 /*flags*/);
+                    }
+                }
+                // apply default volume last: by convention , default device volume will be used
+                index = getIndex(AudioSystem.DEVICE_OUT_DEFAULT);
+                Log.v(TAG, "applyAllVolumes: restore default device index " + index + " for group "
+                        + mAudioVolumeGroup.name());
+                setVolumeIndexInt(index, AudioSystem.DEVICE_OUT_DEFAULT, 0 /*flags*/);
+            }
+        }
+
+        private void persistVolumeGroup(int device) {
+            if (mUseFixedVolume) {
+                return;
+            }
+            Log.v(TAG, "persistVolumeGroup: storing index " + getIndex(device) + " for group "
+                    + mAudioVolumeGroup.name() + " and device "
+                    + AudioSystem.getOutputDeviceName(device));
+            boolean success = Settings.System.putIntForUser(mContentResolver,
+                    getSettingNameForDevice(device),
+                    getIndex(device),
+                    UserHandle.USER_CURRENT);
+            if (!success) {
+                Log.e(TAG, "persistVolumeGroup failed for group " +  mAudioVolumeGroup.name());
+            }
+        }
+
+        public void readSettings() {
+            synchronized (VolumeGroupState.class) {
+                // First clear previously loaded (previous user?) settings
+                mIndexMap.clear();
+                // force maximum volume on all streams if fixed volume property is set
+                if (mUseFixedVolume) {
+                    mIndexMap.put(AudioSystem.DEVICE_OUT_DEFAULT, mIndexMax);
+                    return;
+                }
+                for (int device : AudioSystem.DEVICE_OUT_ALL_SET) {
+                    // retrieve current volume for device
+                    // if no volume stored for current volume group and device, use default volume
+                    // if default device, continue otherwise
+                    int defaultIndex = (device == AudioSystem.DEVICE_OUT_DEFAULT)
+                            ? AudioSystem.DEFAULT_STREAM_VOLUME[mPublicStreamType] : -1;
+                    int index;
+                    String name = getSettingNameForDevice(device);
+                    index = Settings.System.getIntForUser(
+                            mContentResolver, name, defaultIndex, UserHandle.USER_CURRENT);
+                    if (index == -1) {
+                        Log.e(TAG, "readSettings: No index stored for group "
+                                + mAudioVolumeGroup.name() + ", device " + name);
+                        continue;
+                    }
+                    Log.v(TAG, "readSettings: found stored index " + getValidIndex(index)
+                             + " for group " + mAudioVolumeGroup.name() + ", device: " + name);
+                    mIndexMap.put(device, getValidIndex(index));
+                }
+            }
+        }
+
+        private int getValidIndex(int index) {
+            if (index < mIndexMin) {
+                return mIndexMin;
+            } else if (mUseFixedVolume || index > mIndexMax) {
+                return mIndexMax;
+            }
+            return index;
+        }
+
+        public @NonNull String getSettingNameForDevice(int device) {
+            final String suffix = AudioSystem.getOutputDeviceName(device);
+            if (suffix.isEmpty()) {
+                return mAudioVolumeGroup.name();
+            }
+            return mAudioVolumeGroup.name() + "_" + AudioSystem.getOutputDeviceName(device);
+        }
+
+        private void dump(PrintWriter pw) {
+            pw.println("- VOLUME GROUP " + mAudioVolumeGroup.name() + ":");
+            pw.print("   Min: ");
+            pw.println(mIndexMin);
+            pw.print("   Max: ");
+            pw.println(mIndexMax);
+            pw.print("   Current: ");
+            for (int i = 0; i < mIndexMap.size(); i++) {
+                if (i > 0) {
+                    pw.print(", ");
+                }
+                final int device = mIndexMap.keyAt(i);
+                pw.print(Integer.toHexString(device));
+                final String deviceName = device == AudioSystem.DEVICE_OUT_DEFAULT ? "default"
+                        : AudioSystem.getOutputDeviceName(device);
+                if (!deviceName.isEmpty()) {
+                    pw.print(" (");
+                    pw.print(deviceName);
+                    pw.print(")");
+                }
+                pw.print(": ");
+                pw.print(mIndexMap.valueAt(i));
+            }
+            pw.println();
+            pw.print("   Devices: ");
+            int n = 0;
+            final int devices = getDeviceForVolume();
+            for (int device : AudioSystem.DEVICE_OUT_ALL_SET) {
+                if ((devices & device) == device) {
+                    if (n++ > 0) {
+                        pw.print(", ");
+                    }
+                    pw.print(AudioSystem.getOutputDeviceName(device));
+                }
+            }
+        }
+    }
+
 
     // NOTE: Locking order for synchronized objects related to volume or ringer mode management:
     //  1 mScoclient OR mSafeMediaVolumeState
@@ -5279,6 +5652,11 @@
                     persistVolume((VolumeStreamState) msg.obj, msg.arg1);
                     break;
 
+                case MSG_PERSIST_VOLUME_GROUP:
+                    final VolumeGroupState vgs = (VolumeGroupState) msg.obj;
+                    vgs.persistVolumeGroup(msg.arg1);
+                    break;
+
                 case MSG_PERSIST_RINGER_MODE:
                     // note that the value persisted is the current ringer mode, not the
                     // value of ringer mode as of the time the request was made to persist
@@ -6293,7 +6671,7 @@
     static final int LOG_NB_EVENTS_DYN_POLICY = 10;
 
     final private AudioEventLogger mModeLogger = new AudioEventLogger(LOG_NB_EVENTS_PHONE_STATE,
-            "phone state (logged after successfull call to AudioSystem.setPhoneState(int))");
+            "phone state (logged after successful call to AudioSystem.setPhoneState(int, int))");
 
     // logs for wired + A2DP device connections:
     // - wired: logged before onSetWiredDeviceConnectionState() is executed
@@ -6376,6 +6754,7 @@
         }
         mMediaFocusControl.dump(pw);
         dumpStreamStates(pw);
+        dumpVolumeGroups(pw);
         dumpRingerMode(pw);
         pw.println("\nAudio routes:");
         pw.print("  mMainType=0x"); pw.println(Integer.toHexString(
@@ -6805,8 +7184,9 @@
 
         boolean requireValidProjection = false;
         boolean requireCaptureAudioOrMediaOutputPerm = false;
-        boolean requireVoiceComunicationOutputPerm = false;
         boolean requireModifyRouting = false;
+        ArrayList<AudioMix> voiceCommunicationCaptureMixes = null;
+
 
         if (hasFocusAccess || isVolumeController) {
             requireModifyRouting |= true;
@@ -6815,23 +7195,29 @@
             requireModifyRouting |= true;
         }
         for (AudioMix mix : policyConfig.getMixes()) {
-            // If mix is trying to capture USAGE_VOICE_COMMUNICATION using playback capture
-            if (isVoiceCommunicationPlaybackCaptureMix(mix)) {
-                // then it must have CAPTURE_USAGE_VOICE_COMMUNICATION_OUTPUT permission
-                requireVoiceComunicationOutputPerm |= true;
-            }
-            // If mix is requesting privileged capture and is capturing at
-            // least one usage which is not USAGE_VOICE_COMMUNICATION.
-            if (mix.getRule().allowPrivilegedPlaybackCapture()
-                    && isNonVoiceCommunicationCaptureMix(mix)) {
+            // If mix is requesting privileged capture
+            if (mix.getRule().allowPrivilegedPlaybackCapture()) {
                 // then it must have CAPTURE_MEDIA_OUTPUT or CAPTURE_AUDIO_OUTPUT permission
                 requireCaptureAudioOrMediaOutputPerm |= true;
+
                 // and its format must be low quality enough
                 String error = mix.canBeUsedForPrivilegedCapture(mix.getFormat());
                 if (error != null) {
                     Log.e(TAG, error);
                     return false;
                 }
+
+                // If mix is trying to excplicitly capture USAGE_VOICE_COMMUNICATION
+                if (mix.containsMatchAttributeRuleForUsage(
+                        AudioAttributes.USAGE_VOICE_COMMUNICATION)) {
+                    // then it must have CAPTURE_USAGE_VOICE_COMMUNICATION_OUTPUT permission
+                    // Note that for UID, USERID or EXCLDUE rules, the capture will be silenced
+                    // in AudioPolicyMix
+                    if (voiceCommunicationCaptureMixes == null) {
+                        voiceCommunicationCaptureMixes = new ArrayList<AudioMix>();
+                    }
+                    voiceCommunicationCaptureMixes.add(mix);
+                }
             }
 
             // If mix is RENDER|LOOPBACK, then an audio MediaProjection is enough
@@ -6851,12 +7237,18 @@
             return false;
         }
 
-        if (requireVoiceComunicationOutputPerm
-                && !callerHasPermission(
-                        android.Manifest.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT)) {
-            Log.e(TAG, "Privileged audio capture for voice communication requires "
-                      + "CAPTURE_VOICE_COMMUNICATION_OUTPUT system permission");
-            return false;
+        if (voiceCommunicationCaptureMixes != null && voiceCommunicationCaptureMixes.size() > 0) {
+            if (!callerHasPermission(
+                    android.Manifest.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT)) {
+                Log.e(TAG, "Privileged audio capture for voice communication requires "
+                        + "CAPTURE_VOICE_COMMUNICATION_OUTPUT system permission");
+                return false;
+            }
+
+            // If permission check succeeded, we set the flag in each of the mixing rules
+            for (AudioMix mix : voiceCommunicationCaptureMixes) {
+                mix.getRule().setVoiceCommunicationCaptureAllowed(true);
+            }
         }
 
         if (requireValidProjection && !canProjectAudio(projection)) {
@@ -6872,41 +7264,6 @@
         return true;
     }
 
-    /**
-    * Checks whether a given AudioMix is used for playback capture
-    * (has the ROUTE_FLAG_LOOP_BACK_RENDER flag) and has a matching
-    * criterion for USAGE_VOICE_COMMUNICATION.
-    */
-    private boolean isVoiceCommunicationPlaybackCaptureMix(AudioMix mix) {
-        if (mix.getRouteFlags() != mix.ROUTE_FLAG_LOOP_BACK_RENDER) {
-            return false;
-        }
-
-        for (AudioMixMatchCriterion criterion : mix.getRule().getCriteria()) {
-            if (criterion.getRule() == RULE_MATCH_ATTRIBUTE_USAGE
-                    && criterion.getAudioAttributes().getUsage()
-                    == AudioAttributes.USAGE_VOICE_COMMUNICATION) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-    * Checks whether a given AudioMix has a matching
-    * criterion for a usage which is not USAGE_VOICE_COMMUNICATION.
-    */
-    private boolean isNonVoiceCommunicationCaptureMix(AudioMix mix) {
-        for (AudioMixMatchCriterion criterion : mix.getRule().getCriteria()) {
-            if (criterion.getRule() == RULE_MATCH_ATTRIBUTE_USAGE
-                    && criterion.getAudioAttributes().getUsage()
-                    != AudioAttributes.USAGE_VOICE_COMMUNICATION) {
-                return true;
-            }
-        }
-        return false;
-    }
-
     private boolean callerHasPermission(String permission) {
         return mContext.checkCallingPermission(permission) == PackageManager.PERMISSION_GRANTED;
     }
@@ -7552,22 +7909,16 @@
 
         int setUidDeviceAffinities(int uid, @NonNull int[] types, @NonNull String[] addresses) {
             final Integer Uid = new Integer(uid);
-            int res;
             if (mUidDeviceAffinities.remove(Uid) != null) {
-                final long identity = Binder.clearCallingIdentity();
-                res = AudioSystem.removeUidDeviceAffinities(uid);
-                Binder.restoreCallingIdentity(identity);
-                if (res != AudioSystem.SUCCESS) {
+                if (removeUidDeviceAffinitiesFromSystem(uid) != AudioSystem.SUCCESS) {
                     Log.e(TAG, "AudioSystem. removeUidDeviceAffinities(" + uid + ") failed, "
                             + " cannot call AudioSystem.setUidDeviceAffinities");
                     return AudioManager.ERROR;
                 }
             }
-            final long identity = Binder.clearCallingIdentity();
-            res = AudioSystem.setUidDeviceAffinities(uid, types, addresses);
-            Binder.restoreCallingIdentity(identity);
-            if (res == AudioSystem.SUCCESS) {
-                mUidDeviceAffinities.put(Uid, new AudioDeviceArray(types, addresses));
+            AudioDeviceArray deviceArray = new AudioDeviceArray(types, addresses);
+            if (setUidDeviceAffinitiesOnSystem(uid, deviceArray) == AudioSystem.SUCCESS) {
+                mUidDeviceAffinities.put(Uid, deviceArray);
                 return AudioManager.SUCCESS;
             }
             Log.e(TAG, "AudioSystem. setUidDeviceAffinities(" + uid + ") failed");
@@ -7576,10 +7927,7 @@
 
         int removeUidDeviceAffinities(int uid) {
             if (mUidDeviceAffinities.remove(new Integer(uid)) != null) {
-                final long identity = Binder.clearCallingIdentity();
-                final int res = AudioSystem.removeUidDeviceAffinities(uid);
-                Binder.restoreCallingIdentity(identity);
-                if (res == AudioSystem.SUCCESS) {
+                if (removeUidDeviceAffinitiesFromSystem(uid) == AudioSystem.SUCCESS) {
                     return AudioManager.SUCCESS;
                 }
             }
@@ -7587,26 +7935,41 @@
             return AudioManager.ERROR;
         }
 
+        @AudioSystem.AudioSystemError private int removeUidDeviceAffinitiesFromSystem(int uid) {
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                return AudioSystem.removeUidDeviceAffinities(uid);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @AudioSystem.AudioSystemError private int setUidDeviceAffinitiesOnSystem(int uid,
+                AudioDeviceArray deviceArray) {
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                return AudioSystem.setUidDeviceAffinities(uid, deviceArray.mDeviceTypes,
+                        deviceArray.mDeviceAddresses);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
         int setUserIdDeviceAffinities(int userId,
                 @NonNull int[] types, @NonNull String[] addresses) {
             final Integer UserId = new Integer(userId);
-            int res;
             if (mUserIdDeviceAffinities.remove(UserId) != null) {
-                final long identity = Binder.clearCallingIdentity();
-                res = AudioSystem.removeUserIdDeviceAffinities(UserId);
-                Binder.restoreCallingIdentity(identity);
-                if (res != AudioSystem.SUCCESS) {
+                if (removeUserIdDeviceAffinitiesFromSystem(userId) != AudioSystem.SUCCESS) {
                     Log.e(TAG, "AudioSystem. removeUserIdDeviceAffinities("
                             + UserId + ") failed, "
                             + " cannot call AudioSystem.setUserIdDeviceAffinities");
                     return AudioManager.ERROR;
                 }
             }
-            final long identity = Binder.clearCallingIdentity();
-            res = AudioSystem.setUserIdDeviceAffinities(userId, types, addresses);
-            Binder.restoreCallingIdentity(identity);
-            if (res == AudioSystem.SUCCESS) {
-                mUserIdDeviceAffinities.put(UserId, new AudioDeviceArray(types, addresses));
+            AudioDeviceArray audioDeviceArray = new AudioDeviceArray(types, addresses);
+            if (setUserIdDeviceAffinitiesOnSystem(userId, audioDeviceArray)
+                    == AudioSystem.SUCCESS) {
+                mUserIdDeviceAffinities.put(UserId, audioDeviceArray);
                 return AudioManager.SUCCESS;
             }
             Log.e(TAG, "AudioSystem.setUserIdDeviceAffinities(" + userId + ") failed");
@@ -7615,10 +7978,7 @@
 
         int removeUserIdDeviceAffinities(int userId) {
             if (mUserIdDeviceAffinities.remove(new Integer(userId)) != null) {
-                final long identity = Binder.clearCallingIdentity();
-                final int res = AudioSystem.removeUserIdDeviceAffinities(userId);
-                Binder.restoreCallingIdentity(identity);
-                if (res == AudioSystem.SUCCESS) {
+                if (removeUserIdDeviceAffinitiesFromSystem(userId) == AudioSystem.SUCCESS) {
                     return AudioManager.SUCCESS;
                 }
             }
@@ -7626,9 +7986,76 @@
             return AudioManager.ERROR;
         }
 
+        @AudioSystem.AudioSystemError private int removeUserIdDeviceAffinitiesFromSystem(
+                @UserIdInt int userId) {
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                return AudioSystem.removeUserIdDeviceAffinities(userId);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @AudioSystem.AudioSystemError private int setUserIdDeviceAffinitiesOnSystem(
+                @UserIdInt int userId, AudioDeviceArray deviceArray) {
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                return AudioSystem.setUserIdDeviceAffinities(userId, deviceArray.mDeviceTypes,
+                        deviceArray.mDeviceAddresses);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @AudioSystem.AudioSystemError int setupDeviceAffinities() {
+            for (Map.Entry<Integer, AudioDeviceArray> uidEntry : mUidDeviceAffinities.entrySet()) {
+                int uidStatus = removeUidDeviceAffinitiesFromSystem(uidEntry.getKey());
+                if (uidStatus != AudioSystem.SUCCESS) {
+                    Log.e(TAG,
+                            "setupDeviceAffinities failed to remove device affinity for uid "
+                                    + uidEntry.getKey());
+                    return uidStatus;
+                }
+                uidStatus = setUidDeviceAffinitiesOnSystem(uidEntry.getKey(), uidEntry.getValue());
+                if (uidStatus != AudioSystem.SUCCESS) {
+                    Log.e(TAG,
+                            "setupDeviceAffinities failed to set device affinity for uid "
+                                    + uidEntry.getKey());
+                    return uidStatus;
+                }
+            }
+
+            for (Map.Entry<Integer, AudioDeviceArray> userIdEntry :
+                    mUserIdDeviceAffinities.entrySet()) {
+                int userIdStatus = removeUserIdDeviceAffinitiesFromSystem(userIdEntry.getKey());
+                if (userIdStatus != AudioSystem.SUCCESS) {
+                    Log.e(TAG,
+                            "setupDeviceAffinities failed to remove device affinity for userId "
+                                    + userIdEntry.getKey());
+                    return userIdStatus;
+                }
+                userIdStatus = setUserIdDeviceAffinitiesOnSystem(userIdEntry.getKey(),
+                                userIdEntry.getValue());
+                if (userIdStatus != AudioSystem.SUCCESS) {
+                    Log.e(TAG,
+                            "setupDeviceAffinities failed to set device affinity for userId "
+                                    + userIdEntry.getKey());
+                    return userIdStatus;
+                }
+            }
+            return AudioSystem.SUCCESS;
+        }
+
         /** @return human readable debug informations summarizing the state of the object. */
         public String toLogFriendlyString() {
             String textDump = super.toLogFriendlyString();
+            textDump += " Uid Device Affinities:\n";
+            String spacer = "     ";
+            textDump += logFriendlyAttributeDeviceArrayMap("Uid",
+                    mUidDeviceAffinities, spacer);
+            textDump += " UserId Device Affinities:\n";
+            textDump += logFriendlyAttributeDeviceArrayMap("UserId",
+                    mUserIdDeviceAffinities, spacer);
             textDump += " Proxy:\n";
             textDump += "   is focus policy= " + mIsFocusPolicy + "\n";
             if (mIsFocusPolicy) {
@@ -7639,6 +8066,24 @@
             textDump += "   media projection= " + mProjection + "\n";
             return textDump;
         }
+
+        private String logFriendlyAttributeDeviceArrayMap(String attribute,
+                Map<Integer, AudioDeviceArray> map, String spacer) {
+            final StringBuilder stringBuilder = new StringBuilder();
+            for (Map.Entry<Integer, AudioDeviceArray> mapEntry : map.entrySet()) {
+                stringBuilder.append(spacer).append(attribute).append(": ")
+                        .append(mapEntry.getKey()).append("\n");
+                AudioDeviceArray deviceArray = mapEntry.getValue();
+                String deviceSpacer = spacer + "   ";
+                for (int i = 0; i < deviceArray.mDeviceTypes.length; i++) {
+                    stringBuilder.append(deviceSpacer).append("Type: 0x")
+                            .append(Integer.toHexString(deviceArray.mDeviceTypes[i]))
+                            .append(" Address: ").append(deviceArray.mDeviceAddresses[i])
+                                    .append("\n");
+                }
+            }
+            return stringBuilder.toString();
+        }
     };
 
     //======================
diff --git a/services/core/java/com/android/server/audio/AudioServiceEvents.java b/services/core/java/com/android/server/audio/AudioServiceEvents.java
index fcd8701..add620e 100644
--- a/services/core/java/com/android/server/audio/AudioServiceEvents.java
+++ b/services/core/java/com/android/server/audio/AudioServiceEvents.java
@@ -16,6 +16,7 @@
 
 package com.android.server.audio;
 
+import android.media.AudioAttributes;
 import android.media.AudioManager;
 import android.media.AudioSystem;
 
@@ -97,12 +98,15 @@
         static final int VOL_ADJUST_VOL_UID = 5;
         static final int VOL_VOICE_ACTIVITY_HEARING_AID = 6;
         static final int VOL_MODE_CHANGE_HEARING_AID = 7;
+        static final int VOL_SET_GROUP_VOL = 8;
 
         final int mOp;
         final int mStream;
         final int mVal1;
         final int mVal2;
         final String mCaller;
+        final String mGroupName;
+        final AudioAttributes mAudioAttributes;
 
         /** used for VOL_ADJUST_VOL_UID,
          *           VOL_ADJUST_SUGG_VOL,
@@ -114,6 +118,8 @@
             mVal1 = val1;
             mVal2 = val2;
             mCaller = caller;
+            mGroupName = null;
+            mAudioAttributes = null;
         }
 
         /** used for VOL_SET_HEARING_AID_VOL*/
@@ -124,6 +130,8 @@
             // unused
             mStream = -1;
             mCaller = null;
+            mGroupName = null;
+            mAudioAttributes = null;
         }
 
         /** used for VOL_SET_AVRCP_VOL */
@@ -134,6 +142,8 @@
             mVal2 = 0;
             mStream = -1;
             mCaller = null;
+            mGroupName = null;
+            mAudioAttributes = null;
         }
 
         /** used for VOL_VOICE_ACTIVITY_HEARING_AID */
@@ -144,6 +154,8 @@
             mVal2 = voiceActive ? 1 : 0;
             // unused
             mCaller = null;
+            mGroupName = null;
+            mAudioAttributes = null;
         }
 
         /** used for VOL_MODE_CHANGE_HEARING_AID */
@@ -154,6 +166,19 @@
             mVal2 = mode;
             // unused
             mCaller = null;
+            mGroupName = null;
+            mAudioAttributes = null;
+        }
+
+        /** used for VOL_SET_GROUP_VOL */
+        VolumeEvent(int op, AudioAttributes aa, String group, int index, int flags, String caller) {
+            mOp = op;
+            mStream = -1;
+            mVal1 = index;
+            mVal2 = flags;
+            mCaller = caller;
+            mGroupName = group;
+            mAudioAttributes = aa;
         }
 
         @Override
@@ -208,6 +233,14 @@
                             .append(") causes setting HEARING_AID volume to idx:").append(mVal1)
                             .append(" stream:").append(AudioSystem.streamToString(mStream))
                             .toString();
+                case VOL_SET_GROUP_VOL:
+                    return new StringBuilder("setVolumeIndexForAttributes(attr:")
+                            .append(mAudioAttributes.toString())
+                            .append(" group: ").append(mGroupName)
+                            .append(" index:").append(mVal1)
+                            .append(" flags:0x").append(Integer.toHexString(mVal2))
+                            .append(") from ").append(mCaller)
+                            .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 9d06b42..9f8f9f8 100644
--- a/services/core/java/com/android/server/audio/AudioSystemAdapter.java
+++ b/services/core/java/com/android/server/audio/AudioSystemAdapter.java
@@ -17,7 +17,7 @@
 package com.android.server.audio;
 
 import android.annotation.NonNull;
-import android.media.AudioDeviceAddress;
+import android.media.AudioDeviceAttributes;
 import android.media.AudioSystem;
 import android.util.Log;
 
@@ -86,12 +86,12 @@
     }
 
     /**
-     * Same as {@link AudioSystem#setPreferredDeviceForStrategy(int, AudioDeviceAddress)}
+     * Same as {@link AudioSystem#setPreferredDeviceForStrategy(int, AudioDeviceAttributes)}
      * @param strategy
      * @param device
      * @return
      */
-    public int setPreferredDeviceForStrategy(int strategy, @NonNull AudioDeviceAddress device) {
+    public int setPreferredDeviceForStrategy(int strategy, @NonNull AudioDeviceAttributes device) {
         return AudioSystem.setPreferredDeviceForStrategy(strategy, device);
     }
 
@@ -138,7 +138,8 @@
         }
 
         @Override
-        public int setPreferredDeviceForStrategy(int strategy, @NonNull AudioDeviceAddress device) {
+        public int setPreferredDeviceForStrategy(int strategy,
+                                                 @NonNull AudioDeviceAttributes device) {
             return AudioSystem.AUDIO_STATUS_OK;
         }
 
diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java
index 0d88388..204f072 100644
--- a/services/core/java/com/android/server/biometrics/AuthService.java
+++ b/services/core/java/com/android/server/biometrics/AuthService.java
@@ -30,6 +30,7 @@
 
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.hardware.biometrics.BiometricPrompt;
 import android.hardware.biometrics.IAuthService;
 import android.hardware.biometrics.IBiometricAuthenticator;
 import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback;
@@ -38,6 +39,7 @@
 import android.hardware.face.IFaceService;
 import android.hardware.fingerprint.IFingerprintService;
 import android.hardware.iris.IIrisService;
+import android.os.Binder;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.RemoteException;
@@ -99,6 +101,33 @@
         public String[] getConfiguration(Context context) {
             return context.getResources().getStringArray(R.array.config_biometric_sensors);
         }
+
+        /**
+         * Allows us to mock FingerprintService for testing
+         */
+        @VisibleForTesting
+        public IFingerprintService getFingerprintService() {
+            return IFingerprintService.Stub.asInterface(
+                    ServiceManager.getService(Context.FINGERPRINT_SERVICE));
+        }
+
+        /**
+         * Allows us to mock FaceService for testing
+         */
+        @VisibleForTesting
+        public IFaceService getFaceService() {
+            return IFaceService.Stub.asInterface(
+                    ServiceManager.getService(Context.FACE_SERVICE));
+        }
+
+        /**
+         * Allows us to mock IrisService for testing
+         */
+        @VisibleForTesting
+        public IIrisService getIrisService() {
+            return IIrisService.Stub.asInterface(
+                    ServiceManager.getService(Context.IRIS_SERVICE));
+        }
     }
 
     private final class AuthServiceImpl extends IAuthService.Stub {
@@ -106,14 +135,12 @@
         public void authenticate(IBinder token, long sessionId, int userId,
                 IBiometricServiceReceiver receiver, String opPackageName, Bundle bundle)
                 throws RemoteException {
-            final int callingUserId = UserHandle.getCallingUserId();
 
-            // In the BiometricServiceBase, do the AppOps and foreground check.
+            // Only allow internal clients to authenticate with a different userId.
+            final int callingUserId = UserHandle.getCallingUserId();
             if (userId == callingUserId) {
-                // Check the USE_BIOMETRIC permission here.
                 checkPermission();
             } else {
-                // Only allow internal clients to authenticate with a different userId
                 Slog.w(TAG, "User " + callingUserId + " is requesting authentication of userid: "
                         + userId);
                 checkInternalPermission();
@@ -124,13 +151,56 @@
                 return;
             }
 
-            mBiometricService.authenticate(token, sessionId, userId, receiver, opPackageName,
-                    bundle);
+            // Only allow internal clients to enable non-public options.
+            if (bundle.getBoolean(BiometricPrompt.EXTRA_DISALLOW_BIOMETRICS_IF_POLICY_EXISTS)
+                    || bundle.getBoolean(BiometricPrompt.KEY_USE_DEFAULT_TITLE, false)
+                    || bundle.getCharSequence(BiometricPrompt.KEY_DEVICE_CREDENTIAL_TITLE) != null
+                    || bundle.getCharSequence(
+                            BiometricPrompt.KEY_DEVICE_CREDENTIAL_SUBTITLE) != null
+                    || bundle.getCharSequence(
+                            BiometricPrompt.KEY_DEVICE_CREDENTIAL_DESCRIPTION) != null) {
+                checkInternalPermission();
+            }
+
+            final int callingUid = Binder.getCallingUid();
+            final int callingPid = Binder.getCallingPid();
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                mBiometricService.authenticate(
+                        token, sessionId, userId, receiver, opPackageName, bundle, callingUid,
+                        callingPid, callingUserId);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void cancelAuthentication(IBinder token, String opPackageName)
+                throws RemoteException {
+            checkPermission();
+
+            if (token == null || opPackageName == null) {
+                Slog.e(TAG, "Unable to authenticate, one or more null arguments");
+                return;
+            }
+
+            final int callingUid = Binder.getCallingUid();
+            final int callingPid = Binder.getCallingPid();
+            final int callingUserId = UserHandle.getCallingUserId();
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                mBiometricService.cancelAuthentication(token, opPackageName, callingUid,
+                        callingPid, callingUserId);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
 
         @Override
         public int canAuthenticate(String opPackageName, int userId,
                 @Authenticators.Types int authenticators) throws RemoteException {
+
+            // Only allow internal clients to call canAuthenticate with a different userId.
             final int callingUserId = UserHandle.getCallingUserId();
             Slog.d(TAG, "canAuthenticate, userId: " + userId + ", callingUserId: " + callingUserId
                     + ", authenticators: " + authenticators);
@@ -139,33 +209,61 @@
             } else {
                 checkPermission();
             }
-            return mBiometricService.canAuthenticate(opPackageName, userId, authenticators);
+
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                return mBiometricService.canAuthenticate(
+                        opPackageName, userId, callingUserId, authenticators);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
 
         @Override
         public boolean hasEnrolledBiometrics(int userId, String opPackageName)
                 throws RemoteException {
             checkInternalPermission();
-            return mBiometricService.hasEnrolledBiometrics(userId, opPackageName);
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                return mBiometricService.hasEnrolledBiometrics(userId, opPackageName);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
 
         @Override
-        public void registerEnabledOnKeyguardCallback(IBiometricEnabledOnKeyguardCallback callback)
-                throws RemoteException {
+        public void registerEnabledOnKeyguardCallback(
+                IBiometricEnabledOnKeyguardCallback callback) throws RemoteException {
             checkInternalPermission();
-            mBiometricService.registerEnabledOnKeyguardCallback(callback);
+            final int callingUserId = UserHandle.getCallingUserId();
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                mBiometricService.registerEnabledOnKeyguardCallback(callback, callingUserId);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
 
         @Override
         public void setActiveUser(int userId) throws RemoteException {
             checkInternalPermission();
-            mBiometricService.setActiveUser(userId);
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                mBiometricService.setActiveUser(userId);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
 
         @Override
         public void resetLockout(byte[] token) throws RemoteException {
             checkInternalPermission();
-            mBiometricService.resetLockout(token);
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                mBiometricService.resetLockout(token);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
     }
 
@@ -178,11 +276,25 @@
 
         mInjector = injector;
         mImpl = new AuthServiceImpl();
-        final PackageManager pm = context.getPackageManager();
+    }
+
+    @Override
+    public void onStart() {
+        mBiometricService = mInjector.getBiometricService();
+
+        final String[] configs = mInjector.getConfiguration(getContext());
+        for (String config : configs) {
+            try {
+                registerAuthenticator(new SensorConfig(config));
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote exception", e);
+            }
+        }
+
+        mInjector.publishBinderService(this, mImpl);
     }
 
     private void registerAuthenticator(SensorConfig config) throws RemoteException {
-
         Slog.d(TAG, "Registering ID: " + config.mId
                 + " Modality: " + config.mModality
                 + " Strength: " + config.mStrength);
@@ -191,18 +303,36 @@
 
         switch (config.mModality) {
             case TYPE_FINGERPRINT:
-                authenticator = new FingerprintAuthenticator(IFingerprintService.Stub.asInterface(
-                        ServiceManager.getService(Context.FINGERPRINT_SERVICE)));
+                final IFingerprintService fingerprintService = mInjector.getFingerprintService();
+                if (fingerprintService == null) {
+                    Slog.e(TAG, "Attempting to register with null FingerprintService. Please check"
+                            + " your device configuration.");
+                    return;
+                }
+
+                authenticator = new FingerprintAuthenticator(fingerprintService);
                 break;
 
             case TYPE_FACE:
-                authenticator = new FaceAuthenticator(IFaceService.Stub.asInterface(
-                        ServiceManager.getService(Context.FACE_SERVICE)));
+                final IFaceService faceService = mInjector.getFaceService();
+                if (faceService == null) {
+                    Slog.e(TAG, "Attempting to register with null FaceService. Please check your"
+                            + " device configuration.");
+                    return;
+                }
+
+                authenticator = new FaceAuthenticator(faceService);
                 break;
 
             case TYPE_IRIS:
-                authenticator = new IrisAuthenticator(IIrisService.Stub.asInterface(
-                        ServiceManager.getService(Context.IRIS_SERVICE)));
+                final IIrisService irisService = mInjector.getIrisService();
+                if (irisService == null) {
+                    Slog.e(TAG, "Attempting to register with null IrisService. Please check your"
+                            + " device configuration.");
+                    return;
+                }
+
+                authenticator = new IrisAuthenticator(irisService);
                 break;
 
             default:
@@ -214,23 +344,6 @@
                 authenticator);
     }
 
-    @Override
-    public void onStart() {
-        mBiometricService = mInjector.getBiometricService();
-
-        final String[] configs = mInjector.getConfiguration(getContext());
-
-        for (int i = 0; i < configs.length; i++) {
-            try {
-                registerAuthenticator(new SensorConfig(configs[i]));
-            } catch (RemoteException e) {
-                Slog.e(TAG, "Remote exception", e);
-            }
-
-        }
-
-        mInjector.publishBinderService(this, mImpl);
-    }
 
     private void checkInternalPermission() {
         getContext().enforceCallingOrSelfPermission(USE_BIOMETRIC_INTERNAL,
diff --git a/services/core/java/com/android/server/biometrics/AuthenticationClient.java b/services/core/java/com/android/server/biometrics/AuthenticationClient.java
index 766e5c4..7bbda9f 100644
--- a/services/core/java/com/android/server/biometrics/AuthenticationClient.java
+++ b/services/core/java/com/android/server/biometrics/AuthenticationClient.java
@@ -20,11 +20,14 @@
 import android.hardware.biometrics.BiometricAuthenticator;
 import android.hardware.biometrics.BiometricConstants;
 import android.hardware.biometrics.BiometricsProtoEnums;
+import android.hardware.biometrics.IBiometricNativeHandle;
 import android.os.IBinder;
+import android.os.NativeHandle;
 import android.os.RemoteException;
 import android.security.KeyStore;
 import android.util.Slog;
 
+import java.io.IOException;
 import java.util.ArrayList;
 
 /**
@@ -41,6 +44,7 @@
     public static final int LOCKOUT_PERMANENT = 2;
 
     private final boolean mRequireConfirmation;
+    private final NativeHandle mWindowId;
 
     // We need to track this state since it's possible for applications to request for
     // authentication while the device is already locked out. In that case, the client is created
@@ -69,11 +73,25 @@
     public AuthenticationClient(Context context, Constants constants,
             BiometricServiceBase.DaemonWrapper daemon, long halDeviceId, IBinder token,
             BiometricServiceBase.ServiceListener listener, int targetUserId, int groupId, long opId,
-            boolean restricted, String owner, int cookie, boolean requireConfirmation) {
+            boolean restricted, String owner, int cookie, boolean requireConfirmation,
+            IBiometricNativeHandle windowId) {
         super(context, constants, daemon, halDeviceId, token, listener, targetUserId, groupId,
                 restricted, owner, cookie);
         mOpId = opId;
         mRequireConfirmation = requireConfirmation;
+        mWindowId = Utils.dupNativeHandle(windowId);
+    }
+
+    @Override
+    public void destroy() {
+        if (mWindowId != null && mWindowId.getFileDescriptors() != null) {
+            try {
+                mWindowId.close();
+            } catch (IOException e) {
+                Slog.e(getLogTag(), "Failed to close windowId NativeHandle: ", e);
+            }
+        }
+        super.destroy();
     }
 
     protected long getStartTimeMs() {
@@ -233,7 +251,7 @@
         onStart();
         try {
             mStartTimeMs = System.currentTimeMillis();
-            final int result = getDaemonWrapper().authenticate(mOpId, getGroupId());
+            final int result = getDaemonWrapper().authenticate(mOpId, getGroupId(), mWindowId);
             if (result != 0) {
                 Slog.w(getLogTag(), "startAuthentication failed, result=" + result);
                 mMetricsLogger.histogram(mConstants.tagAuthStartError(), result);
diff --git a/services/core/java/com/android/server/biometrics/BiometricService.java b/services/core/java/com/android/server/biometrics/BiometricService.java
index 07fc9b7..3f6e88d 100644
--- a/services/core/java/com/android/server/biometrics/BiometricService.java
+++ b/services/core/java/com/android/server/biometrics/BiometricService.java
@@ -16,15 +16,14 @@
 
 package com.android.server.biometrics;
 
-import static android.Manifest.permission.USE_BIOMETRIC;
 import static android.Manifest.permission.USE_BIOMETRIC_INTERNAL;
-import static android.Manifest.permission.USE_FINGERPRINT;
 import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE;
 import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRINT;
 import static android.hardware.biometrics.BiometricAuthenticator.TYPE_IRIS;
 import static android.hardware.biometrics.BiometricAuthenticator.TYPE_NONE;
 import static android.hardware.biometrics.BiometricManager.Authenticators;
 
+import android.annotation.IntDef;
 import android.app.ActivityManager;
 import android.app.IActivityManager;
 import android.app.UserSwitchObserver;
@@ -32,7 +31,6 @@
 import android.app.trust.ITrustManager;
 import android.content.ContentResolver;
 import android.content.Context;
-import android.content.pm.PackageManager;
 import android.database.ContentObserver;
 import android.hardware.biometrics.BiometricAuthenticator;
 import android.hardware.biometrics.BiometricConstants;
@@ -83,6 +81,25 @@
     static final String TAG = "BiometricService";
     private static final boolean DEBUG = true;
 
+    private static final int BIOMETRIC_NO_HARDWARE = 0;
+    private static final int BIOMETRIC_OK = 1;
+    private static final int BIOMETRIC_DISABLED_BY_DEVICE_POLICY = 2;
+    private static final int BIOMETRIC_INSUFFICIENT_STRENGTH = 3;
+    private static final int BIOMETRIC_INSUFFICIENT_STRENGTH_AFTER_DOWNGRADE = 4;
+    private static final int BIOMETRIC_HARDWARE_NOT_DETECTED = 5;
+    private static final int BIOMETRIC_NOT_ENROLLED = 6;
+    private static final int BIOMETRIC_NOT_ENABLED_FOR_APPS = 7;
+
+    @IntDef({BIOMETRIC_NO_HARDWARE,
+            BIOMETRIC_OK,
+            BIOMETRIC_DISABLED_BY_DEVICE_POLICY,
+            BIOMETRIC_INSUFFICIENT_STRENGTH,
+            BIOMETRIC_INSUFFICIENT_STRENGTH_AFTER_DOWNGRADE,
+            BIOMETRIC_HARDWARE_NOT_DETECTED,
+            BIOMETRIC_NOT_ENROLLED,
+            BIOMETRIC_NOT_ENABLED_FOR_APPS})
+    @interface BiometricStatus {}
+
     private static final int MSG_ON_AUTHENTICATION_SUCCEEDED = 2;
     private static final int MSG_ON_AUTHENTICATION_REJECTED = 3;
     private static final int MSG_ON_ERROR = 4;
@@ -206,7 +223,7 @@
         }
 
         boolean isAllowDeviceCredential() {
-            return Utils.isDeviceCredentialAllowed(mBundle);
+            return Utils.isCredentialRequested(mBundle);
         }
     }
 
@@ -318,7 +335,10 @@
                     SomeArgs args = (SomeArgs) msg.obj;
                     handleCancelAuthentication(
                             (IBinder) args.arg1 /* token */,
-                            (String) args.arg2 /* opPackageName */);
+                            (String) args.arg2 /* opPackageName */,
+                            args.argi1 /* callingUid */,
+                            args.argi2 /* callingPid */,
+                            args.argi3 /* callingUserId */);
                     args.recycle();
                     break;
                 }
@@ -372,16 +392,20 @@
          * strength.
          * @return a bitfield, see {@link Authenticators}
          */
-        public int getActualStrength() {
+        int getActualStrength() {
             return OEMStrength | updatedStrength;
         }
 
+        boolean isDowngraded() {
+            return OEMStrength != updatedStrength;
+        }
+
         /**
          * Stores the updated strength, which takes effect whenever {@link #getActualStrength()}
          * is checked.
          * @param newStrength
          */
-        public void updateStrength(int newStrength) {
+        void updateStrength(int newStrength) {
             String log = "updateStrength: Before(" + toString() + ")";
             updatedStrength = newStrength;
             log += " After(" + toString() + ")";
@@ -543,8 +567,7 @@
     final IBiometricServiceReceiverInternal mInternalReceiver =
             new IBiometricServiceReceiverInternal.Stub() {
         @Override
-        public void onAuthenticationSucceeded(boolean requireConfirmation, byte[] token)
-                throws RemoteException {
+        public void onAuthenticationSucceeded(boolean requireConfirmation, byte[] token) {
             SomeArgs args = SomeArgs.obtain();
             args.arg1 = requireConfirmation;
             args.arg2 = token;
@@ -552,8 +575,7 @@
         }
 
         @Override
-        public void onAuthenticationFailed()
-                throws RemoteException {
+        public void onAuthenticationFailed() {
             Slog.v(TAG, "onAuthenticationFailed");
             mHandler.obtainMessage(MSG_ON_AUTHENTICATION_REJECTED).sendToTarget();
         }
@@ -624,22 +646,9 @@
 
         @Override // Binder call
         public void authenticate(IBinder token, long sessionId, int userId,
-                IBiometricServiceReceiver receiver, String opPackageName, Bundle bundle)
-                throws RemoteException {
-            final int callingUid = Binder.getCallingUid();
-            final int callingPid = Binder.getCallingPid();
-            final int callingUserId = UserHandle.getCallingUserId();
-
-            // In the BiometricServiceBase, check do the AppOps and foreground check.
-            if (userId == callingUserId) {
-                // Check the USE_BIOMETRIC permission here.
-                checkPermission();
-            } else {
-                // Only allow internal clients to authenticate with a different userId
-                Slog.w(TAG, "User " + callingUserId + " is requesting authentication of userid: "
-                        + userId);
-                checkInternalPermission();
-            }
+                IBiometricServiceReceiver receiver, String opPackageName, Bundle bundle,
+                int callingUid, int callingPid, int callingUserId) {
+            checkInternalPermission();
 
             if (token == null || receiver == null || opPackageName == null || bundle == null) {
                 Slog.e(TAG, "Unable to authenticate, one or more null arguments");
@@ -650,19 +659,10 @@
                 throw new SecurityException("Invalid authenticator configuration");
             }
 
-            if (bundle.getBoolean(BiometricPrompt.EXTRA_DISALLOW_BIOMETRICS_IF_POLICY_EXISTS)) {
-                checkInternalPermission();
-            }
-
             Utils.combineAuthenticatorBundles(bundle);
 
-            // Check the usage of this in system server. Need to remove this check if it becomes a
-            // public API.
-            final boolean useDefaultTitle =
-                    bundle.getBoolean(BiometricPrompt.KEY_USE_DEFAULT_TITLE, false);
-            if (useDefaultTitle) {
-                checkInternalPermission();
-                // Set the default title if necessary
+            // Set the default title if necessary.
+            if (bundle.getBoolean(BiometricPrompt.KEY_USE_DEFAULT_TITLE, false)) {
                 if (TextUtils.isEmpty(bundle.getCharSequence(BiometricPrompt.KEY_TITLE))) {
                     bundle.putCharSequence(BiometricPrompt.KEY_TITLE,
                             getContext().getString(R.string.biometric_dialog_default_title));
@@ -684,28 +684,27 @@
         }
 
         @Override // Binder call
-        public void cancelAuthentication(IBinder token, String opPackageName)
-                throws RemoteException {
-            checkPermission();
+        public void cancelAuthentication(IBinder token, String opPackageName,
+                int callingUid, int callingPid, int callingUserId) {
+            checkInternalPermission();
 
             SomeArgs args = SomeArgs.obtain();
             args.arg1 = token;
             args.arg2 = opPackageName;
+            args.argi1 = callingUid;
+            args.argi2 = callingPid;
+            args.argi3 = callingUserId;
             mHandler.obtainMessage(MSG_CANCEL_AUTHENTICATION, args).sendToTarget();
         }
 
         @Override // Binder call
-        public int canAuthenticate(String opPackageName, int userId,
+        public int canAuthenticate(String opPackageName, int userId, int callingUserId,
                 @Authenticators.Types int authenticators) {
-            Slog.d(TAG, "canAuthenticate: User=" + userId
-                    + ", Caller=" + UserHandle.getCallingUserId()
-                    + ", Authenticators=" + authenticators);
+            checkInternalPermission();
 
-            if (userId != UserHandle.getCallingUserId()) {
-                checkInternalPermission();
-            } else {
-                checkPermission();
-            }
+            Slog.d(TAG, "canAuthenticate: User=" + userId
+                    + ", Caller=" + callingUserId
+                    + ", Authenticators=" + authenticators);
 
             if (!Utils.isValidAuthenticatorConfig(authenticators)) {
                 throw new SecurityException("Invalid authenticator configuration");
@@ -715,14 +714,11 @@
             bundle.putInt(BiometricPrompt.KEY_AUTHENTICATORS_ALLOWED, authenticators);
 
             int biometricConstantsResult = BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE;
-            final long ident = Binder.clearCallingIdentity();
             try {
                 biometricConstantsResult = checkAndGetAuthenticators(userId, bundle, opPackageName,
                         false /* checkDevicePolicyManager */).second;
             } catch (RemoteException e) {
                 Slog.e(TAG, "Remote exception", e);
-            } finally {
-                Binder.restoreCallingIdentity(ident);
             }
 
             return Utils.biometricConstantsToBiometricManager(biometricConstantsResult);
@@ -732,7 +728,6 @@
         public boolean hasEnrolledBiometrics(int userId, String opPackageName) {
             checkInternalPermission();
 
-            final long ident = Binder.clearCallingIdentity();
             try {
                 for (AuthenticatorWrapper authenticator : mAuthenticators) {
                     if (authenticator.impl.hasEnrolledTemplates(userId, opPackageName)) {
@@ -741,9 +736,8 @@
                 }
             } catch (RemoteException e) {
                 Slog.e(TAG, "Remote exception", e);
-            } finally {
-                Binder.restoreCallingIdentity(ident);
             }
+
             return false;
         }
 
@@ -788,17 +782,19 @@
             }
 
             mAuthenticators.add(new AuthenticatorWrapper(id, modality, strength, authenticator));
+
+            mBiometricStrengthController.updateStrengths();
         }
 
         @Override // Binder call
-        public void registerEnabledOnKeyguardCallback(IBiometricEnabledOnKeyguardCallback callback)
-                throws RemoteException {
+        public void registerEnabledOnKeyguardCallback(
+                IBiometricEnabledOnKeyguardCallback callback, int callingUserId) {
             checkInternalPermission();
+
             mEnabledOnKeyguardCallbacks.add(new EnabledOnKeyguardCallback(callback));
             try {
                 callback.onChanged(BiometricSourceType.FACE,
-                        mSettingObserver.getFaceEnabledOnKeyguard(),
-                        UserHandle.getCallingUserId());
+                        mSettingObserver.getFaceEnabledOnKeyguard(), callingUserId);
             } catch (RemoteException e) {
                 Slog.w(TAG, "Remote exception", e);
             }
@@ -807,30 +803,26 @@
         @Override // Binder call
         public void setActiveUser(int userId) {
             checkInternalPermission();
-            final long ident = Binder.clearCallingIdentity();
+
             try {
                 for (AuthenticatorWrapper authenticator : mAuthenticators) {
                     authenticator.impl.setActiveUser(userId);
                 }
             } catch (RemoteException e) {
                 Slog.e(TAG, "Remote exception", e);
-            } finally {
-                Binder.restoreCallingIdentity(ident);
             }
         }
 
         @Override // Binder call
         public void resetLockout(byte[] token) {
             checkInternalPermission();
-            final long ident = Binder.clearCallingIdentity();
+
             try {
                 for (AuthenticatorWrapper authenticator : mAuthenticators) {
                     authenticator.impl.resetLockout(token);
                 }
             } catch (RemoteException e) {
                 Slog.e(TAG, "Remote exception", e);
-            } finally {
-                Binder.restoreCallingIdentity(ident);
             }
         }
     }
@@ -840,14 +832,6 @@
                 "Must have USE_BIOMETRIC_INTERNAL permission");
     }
 
-    private void checkPermission() {
-        if (getContext().checkCallingOrSelfPermission(USE_FINGERPRINT)
-                != PackageManager.PERMISSION_GRANTED) {
-            getContext().enforceCallingOrSelfPermission(USE_BIOMETRIC,
-                    "Must have USE_BIOMETRIC permission");
-        }
-    }
-
     /**
      * Class for injecting dependencies into BiometricService.
      * TODO(b/141025588): Replace with a dependency injection framework (e.g. Guice, Dagger).
@@ -1007,6 +991,79 @@
         return isBiometricDisabled;
     }
 
+    private static int biometricStatusToBiometricConstant(@BiometricStatus int status) {
+        switch (status) {
+            case BIOMETRIC_NO_HARDWARE:
+                return BiometricConstants.BIOMETRIC_ERROR_HW_NOT_PRESENT;
+            case BIOMETRIC_OK:
+                return BiometricConstants.BIOMETRIC_SUCCESS;
+            case BIOMETRIC_DISABLED_BY_DEVICE_POLICY:
+                return BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE;
+            case BIOMETRIC_INSUFFICIENT_STRENGTH:
+                return BiometricConstants.BIOMETRIC_ERROR_HW_NOT_PRESENT;
+            case BIOMETRIC_INSUFFICIENT_STRENGTH_AFTER_DOWNGRADE:
+                return BiometricConstants.BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED;
+            case BIOMETRIC_HARDWARE_NOT_DETECTED:
+                return BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE;
+            case BIOMETRIC_NOT_ENROLLED:
+                return BiometricConstants.BIOMETRIC_ERROR_NO_BIOMETRICS;
+            case BIOMETRIC_NOT_ENABLED_FOR_APPS:
+                return BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE;
+            default:
+                return BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE;
+        }
+    }
+
+    /**
+     * Returns the status of the authenticator, with errors returned in a specific priority order.
+     * For example, {@link #BIOMETRIC_INSUFFICIENT_STRENGTH_AFTER_DOWNGRADE} is only returned
+     * if it has enrollments, and is enabled for apps.
+     *
+     * We should only return the modality if the authenticator should be exposed. e.g.
+     * BIOMETRIC_NOT_ENROLLED_FOR_APPS should not expose the authenticator's type.
+     *
+     * @return A Pair with `first` being modality, and `second` being @BiometricStatus
+     */
+    private Pair<Integer, Integer> getStatusForBiometricAuthenticator(
+            AuthenticatorWrapper authenticator, int userId, String opPackageName,
+            boolean checkDevicePolicyManager, int requestedStrength) {
+        if (checkDevicePolicyManager) {
+            if (isBiometricDisabledByDevicePolicy(authenticator.modality, userId)) {
+                return new Pair<>(TYPE_NONE, BIOMETRIC_DISABLED_BY_DEVICE_POLICY);
+            }
+        }
+
+        final boolean wasStrongEnough =
+                Utils.isAtLeastStrength(authenticator.OEMStrength, requestedStrength);
+        final boolean isStrongEnough =
+                Utils.isAtLeastStrength(authenticator.getActualStrength(), requestedStrength);
+
+        if (wasStrongEnough && !isStrongEnough) {
+            return new Pair<>(authenticator.modality,
+                    BIOMETRIC_INSUFFICIENT_STRENGTH_AFTER_DOWNGRADE);
+        } else if (!wasStrongEnough) {
+            return new Pair<>(TYPE_NONE, BIOMETRIC_INSUFFICIENT_STRENGTH);
+        }
+
+        try {
+            if (!authenticator.impl.isHardwareDetected(opPackageName)) {
+                return new Pair<>(authenticator.modality, BIOMETRIC_HARDWARE_NOT_DETECTED);
+            }
+
+            if (!authenticator.impl.hasEnrolledTemplates(userId, opPackageName)) {
+                return new Pair<>(authenticator.modality, BIOMETRIC_NOT_ENROLLED);
+            }
+        } catch (RemoteException e) {
+            return new Pair<>(authenticator.modality, BIOMETRIC_HARDWARE_NOT_DETECTED);
+        }
+
+        if (!isEnabledForApp(authenticator.modality, userId)) {
+            return new Pair<>(TYPE_NONE, BIOMETRIC_NOT_ENABLED_FOR_APPS);
+        }
+
+        return new Pair<>(authenticator.modality, BIOMETRIC_OK);
+    }
+
     /**
      * Depending on the requested authentication (credential/biometric combination), checks their
      * availability.
@@ -1029,10 +1086,9 @@
     private Pair<Integer, Integer> checkAndGetAuthenticators(int userId, Bundle bundle,
             String opPackageName, boolean checkDevicePolicyManager) throws RemoteException {
 
-        final boolean biometricRequested = Utils.isBiometricAllowed(bundle);
-        final boolean credentialRequested = Utils.isDeviceCredentialAllowed(bundle);
+        final boolean biometricRequested = Utils.isBiometricRequested(bundle);
+        final boolean credentialRequested = Utils.isCredentialRequested(bundle);
 
-        final boolean biometricOk;
         final boolean credentialOk = mTrustManager.isDeviceSecure(userId);
 
         // Assuming that biometric authenticators are listed in priority-order, the rest of this
@@ -1041,96 +1097,56 @@
         // the correct error. Error strings that are modality-specific should also respect the
         // priority-order.
 
-        // Find first biometric authenticator that's strong enough, detected, enrolled, and enabled.
-        boolean disabledByDevicePolicy = false;
-        boolean hasSufficientStrength = false;
-        boolean isHardwareDetected = false;
-        boolean hasTemplatesEnrolled = false;
-        boolean enabledForApps = false;
+        int firstBiometricModality = TYPE_NONE;
+        @BiometricStatus int firstBiometricStatus = BIOMETRIC_NO_HARDWARE;
 
-        int modality = TYPE_NONE;
-        int firstHwAvailable = TYPE_NONE;
+        int biometricModality = TYPE_NONE;
+        @BiometricStatus int biometricStatus = BIOMETRIC_NO_HARDWARE;
+
         for (AuthenticatorWrapper authenticator : mAuthenticators) {
-            final int actualStrength = authenticator.getActualStrength();
             final int requestedStrength = Utils.getPublicBiometricStrength(bundle);
+            Pair<Integer, Integer> result = getStatusForBiometricAuthenticator(
+                    authenticator, userId, opPackageName, checkDevicePolicyManager,
+                    requestedStrength);
 
-            if (isBiometricDisabledByDevicePolicy(authenticator.modality, userId)) {
-                disabledByDevicePolicy = true;
-                continue;
-            }
-            disabledByDevicePolicy = false;
+            biometricStatus = result.second;
 
-            if (!Utils.isAtLeastStrength(actualStrength, requestedStrength)) {
-                continue;
-            }
-            hasSufficientStrength = true;
+            Slog.d(TAG, "Authenticator ID: " + authenticator.id
+                    + " Modality: " + authenticator.modality
+                    + " ReportedModality: " + result.first
+                    + " Status: " + biometricStatus);
 
-            if (!authenticator.impl.isHardwareDetected(opPackageName)) {
-                continue;
-            }
-            isHardwareDetected = true;
-
-            if (firstHwAvailable == TYPE_NONE) {
-                // Store the first one since we want to return the error in correct
-                // priority order.
-                firstHwAvailable = authenticator.modality;
+            if (firstBiometricModality == TYPE_NONE) {
+                firstBiometricModality = result.first;
+                firstBiometricStatus = biometricStatus;
             }
 
-            if (!authenticator.impl.hasEnrolledTemplates(userId, opPackageName)) {
-                continue;
+            if (biometricStatus == BIOMETRIC_OK) {
+                biometricModality = result.first;
+                break;
             }
-            hasTemplatesEnrolled = true;
-
-            if (!isEnabledForApp(authenticator.modality, userId)) {
-                continue;
-            }
-            enabledForApps = true;
-            modality = authenticator.modality;
-            break;
         }
 
-        biometricOk = !disabledByDevicePolicy
-                && hasSufficientStrength && isHardwareDetected
-                && hasTemplatesEnrolled && enabledForApps;
-
-        Slog.d(TAG, "checkAndGetAuthenticators: user=" + userId
-                + " checkDevicePolicyManager=" + checkDevicePolicyManager
-                + " isHardwareDetected=" + isHardwareDetected
-                + " hasTemplatesEnrolled=" + hasTemplatesEnrolled
-                + " enabledForApps=" + enabledForApps
-                + " disabledByDevicePolicy=" + disabledByDevicePolicy);
-
         if (biometricRequested && credentialRequested) {
-            if (credentialOk || biometricOk) {
-                if (!biometricOk) {
+            if (credentialOk || biometricStatus == BIOMETRIC_OK) {
+                if (biometricStatus != BIOMETRIC_OK) {
                     // If there's a problem with biometrics but device credential is
                     // allowed, only show credential UI.
                     bundle.putInt(BiometricPrompt.KEY_AUTHENTICATORS_ALLOWED,
                             Authenticators.DEVICE_CREDENTIAL);
                 }
-                return new Pair<>(modality, BiometricConstants.BIOMETRIC_SUCCESS);
+                return new Pair<>(biometricModality, BiometricConstants.BIOMETRIC_SUCCESS);
             } else {
-                return new Pair<>(firstHwAvailable,
+                return new Pair<>(firstBiometricModality,
                         BiometricConstants.BIOMETRIC_ERROR_NO_BIOMETRICS);
             }
         } else if (biometricRequested) {
-            if (biometricOk) {
-                return new Pair<>(modality, BiometricConstants.BIOMETRIC_SUCCESS);
-            } else if (disabledByDevicePolicy) {
-                return new Pair<>(TYPE_NONE, BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE);
-            } else if (!hasSufficientStrength) {
-                return new Pair<>(TYPE_NONE, BiometricConstants.BIOMETRIC_ERROR_HW_NOT_PRESENT);
-            } else if (!isHardwareDetected) {
-                return new Pair<>(firstHwAvailable,
-                        BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE);
-            } else if (!hasTemplatesEnrolled) {
-                return new Pair<>(firstHwAvailable,
-                        BiometricConstants.BIOMETRIC_ERROR_NO_BIOMETRICS);
-            } else if (!enabledForApps) {
-                return new Pair<>(TYPE_NONE, BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE);
+            if (biometricStatus == BIOMETRIC_OK) {
+                return new Pair<>(biometricModality,
+                        biometricStatusToBiometricConstant(biometricStatus));
             } else {
-                Slog.e(TAG, "Unexpected case");
-                return new Pair<>(TYPE_NONE, BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE);
+                return new Pair<>(firstBiometricModality,
+                        biometricStatusToBiometricConstant(firstBiometricStatus));
             }
         } else if (credentialRequested) {
             if (credentialOk) {
@@ -1403,16 +1419,14 @@
             return;
         }
 
-        if (acquiredInfo != BiometricConstants.BIOMETRIC_ACQUIRED_GOOD) {
-            if (message == null) {
-                Slog.w(TAG, "Ignoring null message: " + acquiredInfo);
-                return;
-            }
-            try {
-                mStatusBarService.onBiometricHelp(message);
-            } catch (RemoteException e) {
-                Slog.e(TAG, "Remote exception", e);
-            }
+        if (message == null) {
+            Slog.w(TAG, "Ignoring null message: " + acquiredInfo);
+            return;
+        }
+        try {
+            mStatusBarService.onBiometricHelp(message);
+        } catch (RemoteException e) {
+            Slog.e(TAG, "Remote exception", e);
         }
     }
 
@@ -1440,7 +1454,9 @@
                     mCurrentAuthSession.mClientReceiver.onDialogDismissed(reason);
                     // Cancel authentication. Skip the token/package check since we are cancelling
                     // from system server. The interface is permission protected so this is fine.
-                    cancelInternal(null /* token */, null /* package */, false /* fromClient */);
+                    cancelInternal(null /* token */, null /* package */,
+                            mCurrentAuthSession.mCallingUid, mCurrentAuthSession.mCallingPid,
+                            mCurrentAuthSession.mCallingUserId, false /* fromClient */);
                     break;
 
                 case BiometricPrompt.DISMISSED_REASON_USER_CANCEL:
@@ -1451,7 +1467,9 @@
                     );
                     // Cancel authentication. Skip the token/package check since we are cancelling
                     // from system server. The interface is permission protected so this is fine.
-                    cancelInternal(null /* token */, null /* package */, false /* fromClient */);
+                    cancelInternal(null /* token */, null /* package */, Binder.getCallingUid(),
+                            Binder.getCallingPid(), UserHandle.getCallingUserId(),
+                            false /* fromClient */);
                     break;
 
                 case BiometricPrompt.DISMISSED_REASON_SERVER_REQUESTED:
@@ -1501,7 +1519,9 @@
 
         // Cancel authentication. Skip the token/package check since we are cancelling
         // from system server. The interface is permission protected so this is fine.
-        cancelInternal(null /* token */, null /* package */, false /* fromClient */);
+        cancelInternal(null /* token */, null /* package */, Binder.getCallingUid(),
+                Binder.getCallingPid(), UserHandle.getCallingUserId(),
+                false /* fromClient */);
 
         mCurrentAuthSession.mState = STATE_SHOWING_DEVICE_CREDENTIAL;
     }
@@ -1671,7 +1691,8 @@
         }
     }
 
-    private void handleCancelAuthentication(IBinder token, String opPackageName) {
+    private void handleCancelAuthentication(IBinder token, String opPackageName, int callingUid,
+            int callingPid, int callingUserId) {
         if (token == null || opPackageName == null) {
             Slog.e(TAG, "Unable to cancel, one or more null arguments");
             return;
@@ -1694,14 +1715,13 @@
                 Slog.e(TAG, "Remote exception", e);
             }
         } else {
-            cancelInternal(token, opPackageName, true /* fromClient */);
+            cancelInternal(token, opPackageName, callingUid, callingPid, callingUserId,
+                    true /* fromClient */);
         }
     }
 
-    void cancelInternal(IBinder token, String opPackageName, boolean fromClient) {
-        final int callingUid = Binder.getCallingUid();
-        final int callingPid = Binder.getCallingPid();
-        final int callingUserId = UserHandle.getCallingUserId();
+    void cancelInternal(IBinder token, String opPackageName, int callingUid, int callingPid,
+            int callingUserId, boolean fromClient) {
 
         if (mCurrentAuthSession == null) {
             Slog.w(TAG, "Skipping cancelInternal");
diff --git a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
index 687d935..0e70994 100644
--- a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
+++ b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
@@ -32,6 +32,7 @@
 import android.hardware.biometrics.BiometricAuthenticator;
 import android.hardware.biometrics.BiometricConstants;
 import android.hardware.biometrics.BiometricsProtoEnums;
+import android.hardware.biometrics.IBiometricNativeHandle;
 import android.hardware.biometrics.IBiometricService;
 import android.hardware.biometrics.IBiometricServiceLockoutResetCallback;
 import android.hardware.biometrics.IBiometricServiceReceiverInternal;
@@ -43,6 +44,7 @@
 import android.os.IBinder;
 import android.os.IHwBinder;
 import android.os.IRemoteCallback;
+import android.os.NativeHandle;
 import android.os.PowerManager;
 import android.os.Process;
 import android.os.RemoteException;
@@ -220,9 +222,10 @@
 
         public AuthenticationClientImpl(Context context, DaemonWrapper daemon, long halDeviceId,
                 IBinder token, ServiceListener listener, int targetUserId, int groupId, long opId,
-                boolean restricted, String owner, int cookie, boolean requireConfirmation) {
+                boolean restricted, String owner, int cookie, boolean requireConfirmation,
+                IBiometricNativeHandle windowId) {
             super(context, getConstants(), daemon, halDeviceId, token, listener, targetUserId,
-                    groupId, opId, restricted, owner, cookie, requireConfirmation);
+                    groupId, opId, restricted, owner, cookie, requireConfirmation, windowId);
         }
 
         @Override
@@ -283,10 +286,10 @@
         public EnrollClientImpl(Context context, DaemonWrapper daemon, long halDeviceId,
                 IBinder token, ServiceListener listener, int userId, int groupId,
                 byte[] cryptoToken, boolean restricted, String owner,
-                final int[] disabledFeatures, int timeoutSec) {
+                final int[] disabledFeatures, int timeoutSec, IBiometricNativeHandle windowId) {
             super(context, getConstants(), daemon, halDeviceId, token, listener,
                     userId, groupId, cryptoToken, restricted, owner, getBiometricUtils(),
-                    disabledFeatures, timeoutSec);
+                    disabledFeatures, timeoutSec, windowId);
         }
 
         @Override
@@ -472,12 +475,13 @@
      */
     protected interface DaemonWrapper {
         int ERROR_ESRCH = 3; // Likely HAL is dead. see errno.h.
-        int authenticate(long operationId, int groupId) throws RemoteException;
+        int authenticate(long operationId, int groupId, NativeHandle windowId)
+                throws RemoteException;
         int cancel() throws RemoteException;
         int remove(int groupId, int biometricId) throws RemoteException;
         int enumerate() throws RemoteException;
         int enroll(byte[] token, int groupId, int timeout,
-                ArrayList<Integer> disabledFeatures) throws RemoteException;
+                ArrayList<Integer> disabledFeatures, NativeHandle windowId) throws RemoteException;
         void resetLockout(byte[] token) throws RemoteException;
     }
 
diff --git a/services/core/java/com/android/server/biometrics/BiometricStrengthController.java b/services/core/java/com/android/server/biometrics/BiometricStrengthController.java
index 4e16189..ca7ca5b 100644
--- a/services/core/java/com/android/server/biometrics/BiometricStrengthController.java
+++ b/services/core/java/com/android/server/biometrics/BiometricStrengthController.java
@@ -29,7 +29,7 @@
  * Class for maintaining and updating the strengths for biometric sensors. Strengths can only
  * be downgraded from the device's default, and never upgraded.
  */
-public class BiometricStrengthController implements DeviceConfig.OnPropertiesChangedListener {
+public class BiometricStrengthController {
     private static final String TAG = "BiometricStrengthController";
 
     private final BiometricService mService;
@@ -41,7 +41,7 @@
      * "id1:strength1,id2:strength2,id3:strength3"
      *
      * where strength is one of the values defined in
-     * {@link android.hardware.biometrics.Authenticators}
+     * {@link android.hardware.biometrics.BiometricManager.Authenticators}
      *
      * Both id and strength should be int, otherwise Exception will be thrown when parsing and the
      * downgrade will fail.
@@ -53,30 +53,28 @@
      */
     public static final String DEFAULT_BIOMETRIC_STRENGTHS = null;
 
-    BiometricStrengthController(@NonNull BiometricService service) {
-        mService = service;
-    }
-
-    void startListening() {
-        DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_BIOMETRICS,
-                BackgroundThread.getExecutor(), this);
-        updateStrengths();
-    }
-
-    @Override
-    public void onPropertiesChanged(@NonNull DeviceConfig.Properties properties) {
+    private DeviceConfig.OnPropertiesChangedListener mDeviceConfigListener = properties -> {
         for (String name : properties.getKeyset()) {
             if (KEY_BIOMETRIC_STRENGTHS.equals(name)) {
                 updateStrengths();
             }
         }
+    };
+
+    public BiometricStrengthController(@NonNull BiometricService service) {
+        mService = service;
+    }
+
+    public void startListening() {
+        DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_BIOMETRICS,
+                BackgroundThread.getExecutor(), mDeviceConfigListener);
     }
 
     /**
      * Updates the strengths of authenticators in BiometricService if a matching ID's configuration
      * has been changed.
      */
-    private void updateStrengths() {
+    public void updateStrengths() {
         final Map<Integer, Integer> idToStrength = getIdToStrengthMap();
         if (idToStrength == null) {
             return;
diff --git a/services/core/java/com/android/server/biometrics/EnrollClient.java b/services/core/java/com/android/server/biometrics/EnrollClient.java
index 7ebb7c0..684795e 100644
--- a/services/core/java/com/android/server/biometrics/EnrollClient.java
+++ b/services/core/java/com/android/server/biometrics/EnrollClient.java
@@ -20,10 +20,13 @@
 import android.hardware.biometrics.BiometricAuthenticator;
 import android.hardware.biometrics.BiometricConstants;
 import android.hardware.biometrics.BiometricsProtoEnums;
+import android.hardware.biometrics.IBiometricNativeHandle;
 import android.os.IBinder;
+import android.os.NativeHandle;
 import android.os.RemoteException;
 import android.util.Slog;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 
@@ -35,6 +38,7 @@
     private final BiometricUtils mBiometricUtils;
     private final int[] mDisabledFeatures;
     private final int mTimeoutSec;
+    private final NativeHandle mWindowId;
 
     private long mEnrollmentStartTimeMs;
 
@@ -44,13 +48,26 @@
             BiometricServiceBase.DaemonWrapper daemon, long halDeviceId, IBinder token,
             BiometricServiceBase.ServiceListener listener, int userId, int groupId,
             byte[] cryptoToken, boolean restricted, String owner, BiometricUtils utils,
-            final int[] disabledFeatures, int timeoutSec) {
+            final int[] disabledFeatures, int timeoutSec, IBiometricNativeHandle windowId) {
         super(context, constants, daemon, halDeviceId, token, listener, userId, groupId, restricted,
                 owner, 0 /* cookie */);
         mBiometricUtils = utils;
         mCryptoToken = Arrays.copyOf(cryptoToken, cryptoToken.length);
         mDisabledFeatures = Arrays.copyOf(disabledFeatures, disabledFeatures.length);
         mTimeoutSec = timeoutSec;
+        mWindowId = Utils.dupNativeHandle(windowId);
+    }
+
+    @Override
+    public void destroy() {
+        if (mWindowId != null && mWindowId.getFileDescriptors() != null) {
+            try {
+                mWindowId.close();
+            } catch (IOException e) {
+                Slog.e(getLogTag(), "Failed to close windowId NativeHandle: ", e);
+            }
+        }
+        super.destroy();
     }
 
     @Override
@@ -102,7 +119,7 @@
             }
 
             final int result = getDaemonWrapper().enroll(mCryptoToken, getGroupId(), mTimeoutSec,
-                    disabledFeatures);
+                    disabledFeatures, mWindowId);
             if (result != 0) {
                 Slog.w(getLogTag(), "startEnroll failed, result=" + result);
                 mMetricsLogger.histogram(mConstants.tagEnrollStartError(), result);
diff --git a/services/core/java/com/android/server/biometrics/LoggableMonitor.java b/services/core/java/com/android/server/biometrics/LoggableMonitor.java
index c03c77f..c50ab17 100644
--- a/services/core/java/com/android/server/biometrics/LoggableMonitor.java
+++ b/services/core/java/com/android/server/biometrics/LoggableMonitor.java
@@ -20,6 +20,7 @@
 import android.hardware.biometrics.BiometricConstants;
 import android.hardware.biometrics.BiometricsProtoEnums;
 import android.hardware.face.FaceManager;
+import android.hardware.fingerprint.FingerprintManager;
 import android.util.Slog;
 
 import com.android.internal.util.FrameworkStatsLog;
@@ -69,8 +70,12 @@
 
     protected final void logOnAcquired(Context context, int acquiredInfo, int vendorCode,
             int targetUserId) {
-        if (statsModality() == BiometricsProtoEnums.MODALITY_FACE) {
-            if (acquiredInfo == FaceManager.FACE_ACQUIRED_START) {
+
+        final boolean isFace = statsModality() == BiometricsProtoEnums.MODALITY_FACE;
+        final boolean isFingerprint = statsModality() == BiometricsProtoEnums.MODALITY_FINGERPRINT;
+        if (isFace || isFingerprint) {
+            if ((isFingerprint && acquiredInfo == FingerprintManager.FINGERPRINT_ACQUIRED_START)
+                    || (isFace && acquiredInfo == FaceManager.FACE_ACQUIRED_START)) {
                 mFirstAcquireTimeMs = System.currentTimeMillis();
             }
         } else if (acquiredInfo == BiometricConstants.BIOMETRIC_ACQUIRED_GOOD) {
@@ -124,7 +129,7 @@
                 error,
                 vendorCode,
                 Utils.isDebugEnabled(context, targetUserId),
-                latency);
+                sanitizeLatency(latency));
     }
 
     protected final void logOnAuthenticated(Context context, boolean authenticated,
@@ -165,7 +170,7 @@
                 statsClient(),
                 requireConfirmation,
                 authState,
-                latency,
+                sanitizeLatency(latency),
                 Utils.isDebugEnabled(context, targetUserId));
     }
 
@@ -183,8 +188,16 @@
         FrameworkStatsLog.write(FrameworkStatsLog.BIOMETRIC_ENROLLED,
                 statsModality(),
                 targetUserId,
-                latency,
+                sanitizeLatency(latency),
                 enrollSuccessful);
     }
 
+    private long sanitizeLatency(long latency) {
+        if (latency < 0) {
+            Slog.w(TAG, "found a negative latency : " + latency);
+            return -1;
+        }
+        return latency;
+    }
+
 }
diff --git a/services/core/java/com/android/server/biometrics/Utils.java b/services/core/java/com/android/server/biometrics/Utils.java
index 389763b..8f3fd36 100644
--- a/services/core/java/com/android/server/biometrics/Utils.java
+++ b/services/core/java/com/android/server/biometrics/Utils.java
@@ -23,12 +23,17 @@
 import android.hardware.biometrics.BiometricManager;
 import android.hardware.biometrics.BiometricPrompt;
 import android.hardware.biometrics.BiometricPrompt.AuthenticationResultType;
+import android.hardware.biometrics.IBiometricNativeHandle;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.NativeHandle;
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.Slog;
 
+import java.io.FileDescriptor;
+import java.io.IOException;
+
 public class Utils {
     public static boolean isDebugEnabled(Context context, int targetUserId) {
         if (targetUserId == UserHandle.USER_NULL) {
@@ -75,7 +80,7 @@
      * @param authenticators composed of one or more values from {@link Authenticators}
      * @return true if device credential is allowed.
      */
-    public static boolean isDeviceCredentialAllowed(@Authenticators.Types int authenticators) {
+    public static boolean isCredentialRequested(@Authenticators.Types int authenticators) {
         return (authenticators & Authenticators.DEVICE_CREDENTIAL) != 0;
     }
 
@@ -83,8 +88,8 @@
      * @param bundle should be first processed by {@link #combineAuthenticatorBundles(Bundle)}
      * @return true if device credential is allowed.
      */
-    public static boolean isDeviceCredentialAllowed(Bundle bundle) {
-        return isDeviceCredentialAllowed(bundle.getInt(BiometricPrompt.KEY_AUTHENTICATORS_ALLOWED));
+    public static boolean isCredentialRequested(Bundle bundle) {
+        return isCredentialRequested(bundle.getInt(BiometricPrompt.KEY_AUTHENTICATORS_ALLOWED));
     }
 
     /**
@@ -115,7 +120,7 @@
      * @param bundle should be first processed by {@link #combineAuthenticatorBundles(Bundle)}
      * @return true if biometric authentication is allowed.
      */
-    public static boolean isBiometricAllowed(Bundle bundle) {
+    public static boolean isBiometricRequested(Bundle bundle) {
         return getPublicBiometricStrength(bundle) != 0;
     }
 
@@ -164,7 +169,7 @@
         // should be set.
         final int biometricBits = authenticators & Authenticators.BIOMETRIC_MIN_STRENGTH;
         if (biometricBits == Authenticators.EMPTY_SET
-                && isDeviceCredentialAllowed(authenticators)) {
+                && isCredentialRequested(authenticators)) {
             return true;
         } else if (biometricBits == Authenticators.BIOMETRIC_STRONG) {
             return true;
@@ -204,6 +209,9 @@
             case BiometricConstants.BIOMETRIC_ERROR_HW_NOT_PRESENT:
                 biometricManagerCode = BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE;
                 break;
+            case BiometricConstants.BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED:
+                biometricManagerCode = BiometricManager.BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED;
+                break;
             default:
                 Slog.e(BiometricService.TAG, "Unhandled result code: " + biometricConstantsCode);
                 biometricManagerCode = BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE;
@@ -237,4 +245,31 @@
                 throw new IllegalArgumentException("Unsupported dismissal reason: " + reason);
         }
     }
+
+    /**
+     * Converts an {@link IBiometricNativeHandle} to a {@link NativeHandle} by duplicating the
+     * the underlying file descriptors.
+     *
+     * Both the original and new handle must be closed after use.
+     *
+     * @param h {@link IBiometricNativeHandle} received as a binder call argument. Usually used to
+     *          identify a WindowManager window. Can be null.
+     * @return A {@link NativeHandle} representation of {@code h}. Will be null if either {@code h}
+     *          or its contents are null.
+     */
+    public static NativeHandle dupNativeHandle(IBiometricNativeHandle h) {
+        NativeHandle handle = null;
+        if (h != null && h.fds != null && h.ints != null) {
+            FileDescriptor[] fds = new FileDescriptor[h.fds.length];
+            for (int i = 0; i < h.fds.length; ++i) {
+                try {
+                    fds[i] = h.fds[i].dup().getFileDescriptor();
+                } catch (IOException e) {
+                    return null;
+                }
+            }
+            handle = new NativeHandle(fds, h.ints, true /* own */);
+        }
+        return handle;
+    }
 }
diff --git a/services/core/java/com/android/server/biometrics/face/FaceService.java b/services/core/java/com/android/server/biometrics/face/FaceService.java
index b512475..31c3d4d 100644
--- a/services/core/java/com/android/server/biometrics/face/FaceService.java
+++ b/services/core/java/com/android/server/biometrics/face/FaceService.java
@@ -34,6 +34,7 @@
 import android.hardware.biometrics.BiometricAuthenticator;
 import android.hardware.biometrics.BiometricConstants;
 import android.hardware.biometrics.BiometricsProtoEnums;
+import android.hardware.biometrics.IBiometricNativeHandle;
 import android.hardware.biometrics.IBiometricServiceLockoutResetCallback;
 import android.hardware.biometrics.IBiometricServiceReceiverInternal;
 import android.hardware.biometrics.face.V1_0.IBiometricsFace;
@@ -214,9 +215,10 @@
         public FaceAuthClient(Context context,
                 DaemonWrapper daemon, long halDeviceId, IBinder token,
                 ServiceListener listener, int targetUserId, int groupId, long opId,
-                boolean restricted, String owner, int cookie, boolean requireConfirmation) {
+                boolean restricted, String owner, int cookie, boolean requireConfirmation,
+                IBiometricNativeHandle windowId) {
             super(context, daemon, halDeviceId, token, listener, targetUserId, groupId, opId,
-                    restricted, owner, cookie, requireConfirmation);
+                    restricted, owner, cookie, requireConfirmation, windowId);
         }
 
         @Override
@@ -373,7 +375,7 @@
         @Override // Binder call
         public void enroll(int userId, final IBinder token, final byte[] cryptoToken,
                 final IFaceServiceReceiver receiver, final String opPackageName,
-                final int[] disabledFeatures) {
+                final int[] disabledFeatures, IBiometricNativeHandle windowId) {
             checkPermission(MANAGE_BIOMETRIC);
             updateActiveGroup(userId, opPackageName);
 
@@ -384,7 +386,7 @@
             final EnrollClientImpl client = new EnrollClientImpl(getContext(), mDaemonWrapper,
                     mHalDeviceId, token, new ServiceListenerImpl(receiver), mCurrentUserId,
                     0 /* groupId */, cryptoToken, restricted, opPackageName, disabledFeatures,
-                    ENROLL_TIMEOUT_SEC) {
+                    ENROLL_TIMEOUT_SEC, windowId) {
 
                 @Override
                 public int[] getAcquireIgnorelist() {
@@ -411,6 +413,14 @@
         }
 
         @Override // Binder call
+        public void enrollRemotely(int userId, final IBinder token, final byte[] cryptoToken,
+                final IFaceServiceReceiver receiver, final String opPackageName,
+                final int[] disabledFeatures) {
+            checkPermission(MANAGE_BIOMETRIC);
+            // TODO(b/145027036): Implement this.
+        }
+
+        @Override // Binder call
         public void cancelEnrollment(final IBinder token) {
             checkPermission(MANAGE_BIOMETRIC);
             cancelEnrollmentInternal(token);
@@ -426,7 +436,7 @@
             final AuthenticationClientImpl client = new FaceAuthClient(getContext(),
                     mDaemonWrapper, mHalDeviceId, token, new ServiceListenerImpl(receiver),
                     mCurrentUserId, 0 /* groupId */, opId, restricted, opPackageName,
-                    0 /* cookie */, false /* requireConfirmation */);
+                    0 /* cookie */, false /* requireConfirmation */, null /* windowId */);
             authenticateInternal(client, opId, opPackageName);
         }
 
@@ -442,7 +452,7 @@
                     mDaemonWrapper, mHalDeviceId, token,
                     new BiometricPromptServiceListenerImpl(wrapperReceiver),
                     mCurrentUserId, 0 /* groupId */, opId, restricted, opPackageName, cookie,
-                    requireConfirmation);
+                    requireConfirmation, null /* windowId */);
             authenticateInternal(client, opId, opPackageName, callingUid, callingPid,
                     callingUserId);
         }
@@ -985,7 +995,8 @@
      */
     private final DaemonWrapper mDaemonWrapper = new DaemonWrapper() {
         @Override
-        public int authenticate(long operationId, int groupId) throws RemoteException {
+        public int authenticate(long operationId, int groupId, NativeHandle windowId)
+                throws RemoteException {
             IBiometricsFace daemon = getFaceDaemon();
             if (daemon == null) {
                 Slog.w(TAG, "authenticate(): no face HAL!");
@@ -1026,7 +1037,7 @@
 
         @Override
         public int enroll(byte[] cryptoToken, int groupId, int timeout,
-                ArrayList<Integer> disabledFeatures) throws RemoteException {
+                ArrayList<Integer> disabledFeatures, NativeHandle windowId) throws RemoteException {
             IBiometricsFace daemon = getFaceDaemon();
             if (daemon == null) {
                 Slog.w(TAG, "enroll(): no face HAL!");
@@ -1036,7 +1047,17 @@
             for (int i = 0; i < cryptoToken.length; i++) {
                 token.add(cryptoToken[i]);
             }
-            return daemon.enroll(token, timeout, disabledFeatures);
+            android.hardware.biometrics.face.V1_1.IBiometricsFace daemon11 =
+                    android.hardware.biometrics.face.V1_1.IBiometricsFace.castFrom(
+                            daemon);
+            if (daemon11 != null) {
+                return daemon11.enroll_1_1(token, timeout, disabledFeatures, windowId);
+            } else if (windowId == null) {
+                return daemon.enroll(token, timeout, disabledFeatures);
+            } else {
+                Slog.e(TAG, "enroll(): windowId is only supported in @1.1 HAL");
+                return ERROR_ESRCH;
+            }
         }
 
         @Override
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintAuthenticator.java b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintAuthenticator.java
index 6150de1..7a4e62e 100644
--- a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintAuthenticator.java
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintAuthenticator.java
@@ -38,7 +38,7 @@
             String opPackageName, int cookie, int callingUid, int callingPid, int callingUserId)
             throws RemoteException {
         mFingerprintService.prepareForAuthentication(token, sessionId, userId, wrapperReceiver,
-                opPackageName, cookie, callingUid, callingPid, callingUserId);
+                opPackageName, cookie, callingUid, callingPid, callingUserId, null /* windowId */);
     }
 
     @Override
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
index 44797ad..0a61988 100644
--- a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
@@ -37,10 +37,11 @@
 import android.hardware.biometrics.BiometricAuthenticator;
 import android.hardware.biometrics.BiometricConstants;
 import android.hardware.biometrics.BiometricsProtoEnums;
+import android.hardware.biometrics.IBiometricNativeHandle;
 import android.hardware.biometrics.IBiometricServiceLockoutResetCallback;
 import android.hardware.biometrics.IBiometricServiceReceiverInternal;
 import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint;
-import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprintClientCallback;
+import android.hardware.biometrics.fingerprint.V2_2.IBiometricsFingerprintClientCallback;
 import android.hardware.fingerprint.Fingerprint;
 import android.hardware.fingerprint.FingerprintManager;
 import android.hardware.fingerprint.IFingerprintClientActiveCallback;
@@ -50,6 +51,7 @@
 import android.os.Build;
 import android.os.Environment;
 import android.os.IBinder;
+import android.os.NativeHandle;
 import android.os.RemoteException;
 import android.os.SELinux;
 import android.os.SystemClock;
@@ -132,9 +134,9 @@
                 DaemonWrapper daemon, long halDeviceId, IBinder token,
                 ServiceListener listener, int targetUserId, int groupId, long opId,
                 boolean restricted, String owner, int cookie,
-                boolean requireConfirmation) {
+                boolean requireConfirmation, IBiometricNativeHandle windowId) {
             super(context, daemon, halDeviceId, token, listener, targetUserId, groupId, opId,
-                    restricted, owner, cookie, requireConfirmation);
+                    restricted, owner, cookie, requireConfirmation, windowId);
         }
 
         @Override
@@ -198,7 +200,7 @@
         @Override // Binder call
         public void enroll(final IBinder token, final byte[] cryptoToken, final int userId,
                 final IFingerprintServiceReceiver receiver, final int flags,
-                final String opPackageName) {
+                final String opPackageName, IBiometricNativeHandle windowId) {
             checkPermission(MANAGE_FINGERPRINT);
 
             final boolean restricted = isRestricted();
@@ -206,7 +208,7 @@
             final EnrollClientImpl client = new EnrollClientImpl(getContext(), mDaemonWrapper,
                     mHalDeviceId, token, new ServiceListenerImpl(receiver), mCurrentUserId, groupId,
                     cryptoToken, restricted, opPackageName, new int[0] /* disabledFeatures */,
-                    ENROLL_TIMEOUT_SEC) {
+                    ENROLL_TIMEOUT_SEC, windowId) {
                 @Override
                 public boolean shouldVibrate() {
                     return true;
@@ -230,20 +232,22 @@
         @Override // Binder call
         public void authenticate(final IBinder token, final long opId, final int groupId,
                 final IFingerprintServiceReceiver receiver, final int flags,
-                final String opPackageName) {
+                final String opPackageName, IBiometricNativeHandle windowId) {
             updateActiveGroup(groupId, opPackageName);
             final boolean restricted = isRestricted();
             final AuthenticationClientImpl client = new FingerprintAuthClient(getContext(),
                     mDaemonWrapper, mHalDeviceId, token, new ServiceListenerImpl(receiver),
                     mCurrentUserId, groupId, opId, restricted, opPackageName,
-                    0 /* cookie */, false /* requireConfirmation */);
+                    0 /* cookie */, false /* requireConfirmation */,
+                    windowId);
             authenticateInternal(client, opId, opPackageName);
         }
 
         @Override // Binder call
         public void prepareForAuthentication(IBinder token, long opId, int groupId,
                 IBiometricServiceReceiverInternal wrapperReceiver, String opPackageName,
-                int cookie, int callingUid, int callingPid, int callingUserId) {
+                int cookie, int callingUid, int callingPid, int callingUserId,
+                IBiometricNativeHandle windowId) {
             checkPermission(MANAGE_BIOMETRIC);
             updateActiveGroup(groupId, opPackageName);
             final boolean restricted = true; // BiometricPrompt is always restricted
@@ -251,7 +255,8 @@
                     mDaemonWrapper, mHalDeviceId, token,
                     new BiometricPromptServiceListenerImpl(wrapperReceiver),
                     mCurrentUserId, groupId, opId, restricted, opPackageName, cookie,
-                    false /* requireConfirmation */);
+                    false /* requireConfirmation */,
+                    windowId);
             authenticateInternal(client, opId, opPackageName, callingUid, callingPid,
                     callingUserId);
         }
@@ -596,6 +601,11 @@
 
         @Override
         public void onAcquired(final long deviceId, final int acquiredInfo, final int vendorCode) {
+            onAcquired_2_2(deviceId, acquiredInfo, vendorCode);
+        }
+
+        @Override
+        public void onAcquired_2_2(long deviceId, int acquiredInfo, int vendorCode) {
             mHandler.post(() -> {
                 FingerprintService.super.handleAcquired(deviceId, acquiredInfo, vendorCode);
             });
@@ -654,13 +664,24 @@
      */
     private final DaemonWrapper mDaemonWrapper = new DaemonWrapper() {
         @Override
-        public int authenticate(long operationId, int groupId) throws RemoteException {
+        public int authenticate(long operationId, int groupId, NativeHandle windowId)
+                throws RemoteException {
             IBiometricsFingerprint daemon = getFingerprintDaemon();
             if (daemon == null) {
                 Slog.w(TAG, "authenticate(): no fingerprint HAL!");
                 return ERROR_ESRCH;
             }
-            return daemon.authenticate(operationId, groupId);
+            android.hardware.biometrics.fingerprint.V2_2.IBiometricsFingerprint daemon22 =
+                    android.hardware.biometrics.fingerprint.V2_2.IBiometricsFingerprint.castFrom(
+                            daemon);
+            if (daemon22 != null) {
+                return daemon22.authenticate_2_2(operationId, groupId, windowId);
+            } else if (windowId == null) {
+                return daemon.authenticate(operationId, groupId);
+            } else {
+                Slog.e(TAG, "authenticate(): windowId is only supported in @2.2 HAL");
+                return ERROR_ESRCH;
+            }
         }
 
         @Override
@@ -695,13 +716,27 @@
 
         @Override
         public int enroll(byte[] cryptoToken, int groupId, int timeout,
-                ArrayList<Integer> disabledFeatures) throws RemoteException {
+                ArrayList<Integer> disabledFeatures, NativeHandle windowId) throws RemoteException {
             IBiometricsFingerprint daemon = getFingerprintDaemon();
             if (daemon == null) {
                 Slog.w(TAG, "enroll(): no fingerprint HAL!");
                 return ERROR_ESRCH;
             }
-            return daemon.enroll(cryptoToken, groupId, timeout);
+            android.hardware.biometrics.fingerprint.V2_2.IBiometricsFingerprint daemon22 =
+                    android.hardware.biometrics.fingerprint.V2_2.IBiometricsFingerprint.castFrom(
+                            daemon);
+            if (daemon22 != null) {
+                ArrayList<Byte> cryptoTokenAsList = new ArrayList<>(cryptoToken.length);
+                for (byte b : cryptoToken) {
+                    cryptoTokenAsList.add(b);
+                }
+                return daemon22.enroll_2_2(cryptoTokenAsList, groupId, timeout, windowId);
+            } else if (windowId == null) {
+                return daemon.enroll(cryptoToken, groupId, timeout);
+            } else {
+                Slog.e(TAG, "enroll(): windowId is only supported in @2.2 HAL");
+                return ERROR_ESRCH;
+            }
         }
 
         @Override
diff --git a/services/core/java/com/android/server/broadcastradio/hal2/Convert.java b/services/core/java/com/android/server/broadcastradio/hal2/Convert.java
index 1a1845a..cbfa87f 100644
--- a/services/core/java/com/android/server/broadcastradio/hal2/Convert.java
+++ b/services/core/java/com/android/server/broadcastradio/hal2/Convert.java
@@ -274,8 +274,18 @@
         return hwSel;
     }
 
-    static @NonNull ProgramSelector programSelectorFromHal(
+    private static boolean isEmpty(
             @NonNull android.hardware.broadcastradio.V2_0.ProgramSelector sel) {
+        if (sel.primaryId.type != 0) return false;
+        if (sel.primaryId.value != 0) return false;
+        if (sel.secondaryIds.size() != 0) return false;
+        return true;
+    }
+
+    static @Nullable ProgramSelector programSelectorFromHal(
+            @NonNull android.hardware.broadcastradio.V2_0.ProgramSelector sel) {
+        if (isEmpty(sel)) return null;
+
         ProgramSelector.Identifier[] secondaryIds = sel.secondaryIds.stream().
                 map(Convert::programIdentifierFromHal).map(Objects::requireNonNull).
                 toArray(ProgramSelector.Identifier[]::new);
@@ -363,7 +373,7 @@
                 collect(Collectors.toList());
 
         return new RadioManager.ProgramInfo(
-                programSelectorFromHal(info.selector),
+                Objects.requireNonNull(programSelectorFromHal(info.selector)),
                 programIdentifierFromHal(info.logicallyTunedTo),
                 programIdentifierFromHal(info.physicallyTunedTo),
                 relatedContent,
@@ -401,7 +411,7 @@
     public static @NonNull android.hardware.radio.Announcement announcementFromHal(
             @NonNull Announcement hwAnnouncement) {
         return new android.hardware.radio.Announcement(
-            programSelectorFromHal(hwAnnouncement.selector),
+            Objects.requireNonNull(programSelectorFromHal(hwAnnouncement.selector)),
             hwAnnouncement.type,
             vendorInfoFromHal(hwAnnouncement.vendorInfo)
         );
diff --git a/services/core/java/com/android/server/compat/CompatChange.java b/services/core/java/com/android/server/compat/CompatChange.java
index 2eec419..8687f35 100644
--- a/services/core/java/com/android/server/compat/CompatChange.java
+++ b/services/core/java/com/android/server/compat/CompatChange.java
@@ -17,6 +17,7 @@
 package com.android.server.compat;
 
 import android.annotation.Nullable;
+import android.compat.annotation.ChangeId;
 import android.compat.annotation.EnabledAfter;
 import android.content.pm.ApplicationInfo;
 
@@ -39,6 +40,13 @@
 public final class CompatChange extends CompatibilityChangeInfo {
 
     /**
+     * A change ID to be used only in the CTS test for this SystemApi
+     */
+    @ChangeId
+    @EnabledAfter(targetSdkVersion = 1234) // Needs to be > test APK targetSdkVersion.
+    private static final long CTS_SYSTEM_API_CHANGEID = 149391281; // This is a bug id.
+
+    /**
      * Callback listener for when compat changes are updated for a package.
      * See {@link #registerListener(ChangeListener)} for more details.
      */
diff --git a/services/core/java/com/android/server/compat/CompatConfig.java b/services/core/java/com/android/server/compat/CompatConfig.java
index 7f7c9c4..3f03e09 100644
--- a/services/core/java/com/android/server/compat/CompatConfig.java
+++ b/services/core/java/com/android/server/compat/CompatConfig.java
@@ -16,6 +16,7 @@
 
 package com.android.server.compat;
 
+import android.app.compat.ChangeIdStateCache;
 import android.compat.Compatibility.ChangeConfig;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
@@ -80,6 +81,7 @@
     void addChange(CompatChange change) {
         synchronized (mChanges) {
             mChanges.put(change.getId(), change);
+            invalidateCache();
         }
     }
 
@@ -172,6 +174,7 @@
                 addChange(c);
             }
             c.addPackageOverride(packageName, enabled);
+            invalidateCache();
         }
         return alreadyKnown;
     }
@@ -228,6 +231,7 @@
                 // Should never occur, since validator is in the same process.
                 throw new RuntimeException("Unable to call override validator!", e);
             }
+            invalidateCache();
         }
         return overrideExists;
     }
@@ -250,6 +254,7 @@
                 addOverride(changeId, packageName, false);
 
             }
+            invalidateCache();
         }
     }
 
@@ -279,6 +284,7 @@
                     throw new RuntimeException("Unable to call override validator!", e);
                 }
             }
+            invalidateCache();
         }
     }
 
@@ -406,4 +412,8 @@
     IOverrideValidator getOverrideValidator() {
         return mOverrideValidator;
     }
+
+    private void invalidateCache() {
+        ChangeIdStateCache.invalidate();
+    }
 }
diff --git a/services/core/java/com/android/server/compat/PlatformCompat.java b/services/core/java/com/android/server/compat/PlatformCompat.java
index af47430..821653a 100644
--- a/services/core/java/com/android/server/compat/PlatformCompat.java
+++ b/services/core/java/com/android/server/compat/PlatformCompat.java
@@ -235,8 +235,8 @@
 
     @Override
     protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        checkCompatChangeReadAndLogPermission();
         if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, "platform_compat", pw)) return;
+        checkCompatChangeReadAndLogPermission();
         mCompatConfig.dumpConfig(pw);
     }
 
diff --git a/services/core/java/com/android/server/compat/TEST_MAPPING b/services/core/java/com/android/server/compat/TEST_MAPPING
new file mode 100644
index 0000000..0c30c79
--- /dev/null
+++ b/services/core/java/com/android/server/compat/TEST_MAPPING
@@ -0,0 +1,21 @@
+{
+    "presubmit": [
+        // Unit tests
+        {
+            "name": "FrameworksServicesTests",
+            "options": [
+                {
+                    "include-filter": "com.android.server.compat"
+                }
+            ]
+        },
+        // Tests for the TestRule
+        {
+            "name": "PlatformCompatGating"
+        },
+        // CTS tests
+        {
+            "name": "CtsAppCompatHostTestCases#"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/services/core/java/com/android/server/connectivity/KeepaliveTracker.java b/services/core/java/com/android/server/connectivity/KeepaliveTracker.java
index af8a366..5059a48 100644
--- a/services/core/java/com/android/server/connectivity/KeepaliveTracker.java
+++ b/services/core/java/com/android/server/connectivity/KeepaliveTracker.java
@@ -325,7 +325,7 @@
             mSlot = slot;
             int error = isValid();
             if (error == SUCCESS) {
-                Log.d(TAG, "Starting keepalive " + mSlot + " on " + mNai.name());
+                Log.d(TAG, "Starting keepalive " + mSlot + " on " + mNai.toShortString());
                 switch (mType) {
                     case TYPE_NATT:
                         mNai.asyncChannel.sendMessage(
@@ -365,7 +365,8 @@
                     Log.e(TAG, "Cannot stop unowned keepalive " + mSlot + " on " + mNai.network);
                 }
             }
-            Log.d(TAG, "Stopping keepalive " + mSlot + " on " + mNai.name() + ": " + reason);
+            Log.d(TAG, "Stopping keepalive " + mSlot + " on " + mNai.toShortString()
+                    + ": " + reason);
             switch (mStartedState) {
                 case NOT_STARTED:
                     // Remove the reference of the keepalive that meet error before starting,
@@ -476,7 +477,7 @@
     }
 
     public void handleStopKeepalive(NetworkAgentInfo nai, int slot, int reason) {
-        String networkName = (nai == null) ? "(null)" : nai.name();
+        final String networkName = NetworkAgentInfo.toShortString(nai);
         HashMap <Integer, KeepaliveInfo> networkKeepalives = mKeepalives.get(nai);
         if (networkKeepalives == null) {
             Log.e(TAG, "Attempt to stop keepalive on nonexistent network " + networkName);
@@ -493,7 +494,7 @@
     }
 
     private void cleanupStoppedKeepalive(NetworkAgentInfo nai, int slot) {
-        String networkName = (nai == null) ? "(null)" : nai.name();
+        final String networkName = NetworkAgentInfo.toShortString(nai);
         HashMap<Integer, KeepaliveInfo> networkKeepalives = mKeepalives.get(nai);
         if (networkKeepalives == null) {
             Log.e(TAG, "Attempt to remove keepalive on nonexistent network " + networkName);
@@ -540,7 +541,7 @@
         } catch(NullPointerException e) {}
         if (ki == null) {
             Log.e(TAG, "Event " + message.what + "," + slot + "," + reason
-                    + " for unknown keepalive " + slot + " on " + nai.name());
+                    + " for unknown keepalive " + slot + " on " + nai.toShortString());
             return;
         }
 
@@ -562,7 +563,7 @@
         if (KeepaliveInfo.STARTING == ki.mStartedState) {
             if (SUCCESS == reason) {
                 // Keepalive successfully started.
-                Log.d(TAG, "Started keepalive " + slot + " on " + nai.name());
+                Log.d(TAG, "Started keepalive " + slot + " on " + nai.toShortString());
                 ki.mStartedState = KeepaliveInfo.STARTED;
                 try {
                     ki.mCallback.onStarted(slot);
@@ -570,14 +571,14 @@
                     Log.w(TAG, "Discarded onStarted(" + slot + ") callback");
                 }
             } else {
-                Log.d(TAG, "Failed to start keepalive " + slot + " on " + nai.name()
+                Log.d(TAG, "Failed to start keepalive " + slot + " on " + nai.toShortString()
                         + ": " + reason);
                 // The message indicated some error trying to start: do call handleStopKeepalive.
                 handleStopKeepalive(nai, slot, reason);
             }
         } else if (KeepaliveInfo.STOPPING == ki.mStartedState) {
             // The message indicated result of stopping : clean up keepalive slots.
-            Log.d(TAG, "Stopped keepalive " + slot + " on " + nai.name()
+            Log.d(TAG, "Stopped keepalive " + slot + " on " + nai.toShortString()
                     + " stopped: " + reason);
             ki.mStartedState = KeepaliveInfo.NOT_STARTED;
             cleanupStoppedKeepalive(nai, slot);
@@ -733,7 +734,7 @@
         pw.println("Socket keepalives:");
         pw.increaseIndent();
         for (NetworkAgentInfo nai : mKeepalives.keySet()) {
-            pw.println(nai.name());
+            pw.println(nai.toShortString());
             pw.increaseIndent();
             for (int slot : mKeepalives.get(nai).keySet()) {
                 KeepaliveInfo ki = mKeepalives.get(nai).get(slot);
diff --git a/services/core/java/com/android/server/connectivity/LingerMonitor.java b/services/core/java/com/android/server/connectivity/LingerMonitor.java
index 7071510..04c000f 100644
--- a/services/core/java/com/android/server/connectivity/LingerMonitor.java
+++ b/services/core/java/com/android/server/connectivity/LingerMonitor.java
@@ -200,8 +200,9 @@
         }
 
         if (DBG) {
-            Log.d(TAG, "Notifying switch from=" + fromNai.name() + " to=" + toNai.name() +
-                    " type=" + sNotifyTypeNames.get(notifyType, "unknown(" + notifyType + ")"));
+            Log.d(TAG, "Notifying switch from=" + fromNai.toShortString()
+                    + " to=" + toNai.toShortString()
+                    + " type=" + sNotifyTypeNames.get(notifyType, "unknown(" + notifyType + ")"));
         }
 
         mNotifications.put(fromNai.network.netId, toNai.network.netId);
@@ -222,10 +223,10 @@
     public void noteLingerDefaultNetwork(@NonNull final NetworkAgentInfo fromNai,
             @Nullable final NetworkAgentInfo toNai) {
         if (VDBG) {
-            Log.d(TAG, "noteLingerDefaultNetwork from=" + fromNai.name() +
-                    " everValidated=" + fromNai.everValidated +
-                    " lastValidated=" + fromNai.lastValidated +
-                    " to=" + toNai.name());
+            Log.d(TAG, "noteLingerDefaultNetwork from=" + fromNai.toShortString()
+                    + " everValidated=" + fromNai.everValidated
+                    + " lastValidated=" + fromNai.lastValidated
+                    + " to=" + toNai.toShortString());
         }
 
         // If we are currently notifying the user because the device switched to fromNai, now that
@@ -270,7 +271,8 @@
         // TODO: should we do this?
         if (everNotified(fromNai)) {
             if (VDBG) {
-                Log.d(TAG, "Not notifying handover from " + fromNai.name() + ", already notified");
+                Log.d(TAG, "Not notifying handover from " + fromNai.toShortString()
+                        + ", already notified");
             }
             return;
         }
diff --git a/services/core/java/com/android/server/connectivity/Nat464Xlat.java b/services/core/java/com/android/server/connectivity/Nat464Xlat.java
index f636d67..82465f8 100644
--- a/services/core/java/com/android/server/connectivity/Nat464Xlat.java
+++ b/services/core/java/com/android/server/connectivity/Nat464Xlat.java
@@ -174,7 +174,7 @@
         try {
             mNMService.registerObserver(this);
         } catch (RemoteException e) {
-            Slog.e(TAG, "Can't register interface observer for clat on " + mNetwork.name());
+            Slog.e(TAG, "Can't register iface observer for clat on " + mNetwork.toShortString());
             return;
         }
 
diff --git a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
index 3cfe916..3860904 100644
--- a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
+++ b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
@@ -16,8 +16,14 @@
 
 package com.android.server.connectivity;
 
+import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
+import static android.net.NetworkCapabilities.transportNamesOf;
+
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.Context;
+import android.net.CaptivePortalData;
 import android.net.IDnsResolver;
 import android.net.INetd;
 import android.net.INetworkMonitor;
@@ -164,6 +170,10 @@
     // Set to true when partial connectivity was detected.
     public boolean partialConnectivity;
 
+    // Captive portal info of the network, if any.
+    // Obtained by ConnectivityService and merged into NetworkAgent-provided information.
+    public CaptivePortalData captivePortalData;
+
     // Networks are lingered when they become unneeded as a result of their NetworkRequests being
     // satisfied by a higher-scoring network. so as to allow communication to wrap up before the
     // network is taken down.  This usually only happens to the default network. Lingering ends with
@@ -372,7 +382,7 @@
             // Should only happen if the requestId wraps. If that happens lots of other things will
             // be broken as well.
             Log.wtf(TAG, String.format("Duplicate requestId for %s and %s on %s",
-                    networkRequest, existing, name()));
+                    networkRequest, existing, toShortString()));
             updateRequestCounts(REMOVE, existing);
         }
         mNetworkRequests.put(networkRequest.requestId, networkRequest);
@@ -467,24 +477,16 @@
         return networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN);
     }
 
-    private int getCurrentScore(boolean pretendValidated) {
-        // TODO: We may want to refactor this into a NetworkScore class that takes a base score from
-        // the NetworkAgent and signals from the NetworkAgent and uses those signals to modify the
-        // score.  The NetworkScore class would provide a nice place to centralize score constants
-        // so they are not scattered about the transports.
-
+    /** Gets the current score */
+    public int getCurrentScore() {
         // If this network is explicitly selected and the user has decided to use it even if it's
-        // unvalidated, give it the maximum score. Also give it the maximum score if it's explicitly
-        // selected and we're trying to see what its score could be. This ensures that we don't tear
-        // down an explicitly selected network before the user gets a chance to prefer it when
-        // a higher-scoring network (e.g., Ethernet) is available.
-        if (networkAgentConfig.explicitlySelected
-                && (networkAgentConfig.acceptUnvalidated || pretendValidated)) {
+        // unvalidated, give it the maximum score.
+        if (networkAgentConfig.explicitlySelected && networkAgentConfig.acceptUnvalidated) {
             return ConnectivityConstants.EXPLICITLY_SELECTED_NETWORK_SCORE;
         }
 
         int score = mNetworkScore.getLegacyScore();
-        if (!lastValidated && !pretendValidated && !ignoreWifiUnvalidationPenalty() && !isVPN()) {
+        if (!lastValidated && !ignoreWifiUnvalidationPenalty() && !isVPN()) {
             score -= ConnectivityConstants.UNVALIDATED_SCORE_PENALTY;
         }
         if (score < 0) score = 0;
@@ -500,18 +502,6 @@
         return isWifi && !avoidBadWifi && everValidated;
     }
 
-    // Get the current score for this Network.  This may be modified from what the
-    // NetworkAgent sent, as it has modifiers applied to it.
-    public int getCurrentScore() {
-        return getCurrentScore(false);
-    }
-
-    // Get the current score for this Network as if it was validated.  This may be modified from
-    // what the NetworkAgent sent, as it has modifiers applied to it.
-    public int getCurrentScoreAsValidated() {
-        return getCurrentScore(true);
-    }
-
     public void setNetworkScore(@NonNull NetworkScore ns) {
         mNetworkScore = ns;
     }
@@ -542,11 +532,11 @@
             // Cannot happen. Once a request is lingering on a particular network, we cannot
             // re-linger it unless that network becomes the best for that request again, in which
             // case we should have unlingered it.
-            Log.wtf(TAG, this.name() + ": request " + request.requestId + " already lingered");
+            Log.wtf(TAG, toShortString() + ": request " + request.requestId + " already lingered");
         }
         final long expiryMs = now + duration;
         LingerTimer timer = new LingerTimer(request, expiryMs);
-        if (VDBG) Log.d(TAG, "Adding LingerTimer " + timer + " to " + this.name());
+        if (VDBG) Log.d(TAG, "Adding LingerTimer " + timer + " to " + toShortString());
         mLingerTimers.add(timer);
         mLingerTimerForRequest.put(request.requestId, timer);
     }
@@ -558,7 +548,7 @@
     public boolean unlingerRequest(NetworkRequest request) {
         LingerTimer timer = mLingerTimerForRequest.get(request.requestId);
         if (timer != null) {
-            if (VDBG) Log.d(TAG, "Removing LingerTimer " + timer + " from " + this.name());
+            if (VDBG) Log.d(TAG, "Removing LingerTimer " + timer + " from " + toShortString());
             mLingerTimers.remove(timer);
             mLingerTimerForRequest.remove(request.requestId);
             return true;
@@ -621,6 +611,41 @@
         mLingering = false;
     }
 
+    /**
+     * Returns whether this NAI has any chance of ever beating this other agent.
+     *
+     * The chief use case of this is the decision to tear down this network. ConnectivityService
+     * tears down networks that don't satisfy any request, unless they have a chance to beat any
+     * existing satisfier.
+     *
+     * @param other the agent to beat
+     * @return whether this should be given more time to try and beat the other agent
+     * TODO : remove this and migrate to a ranker-based approach
+     */
+    public boolean canPossiblyBeat(@NonNull final NetworkAgentInfo other) {
+        // Any explicitly selected network should be held on.
+        if (networkAgentConfig.explicitlySelected) return true;
+        // An outscored exiting network should be torn down.
+        if (mNetworkScore.isExiting()) return false;
+        // If this network is validated it can be torn down as it can't hope to be better than
+        // it already is.
+        if (networkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED)) return false;
+        // If neither network is validated, keep both until at least one does.
+        if (!other.networkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED)) return true;
+        // If this network is not metered but the other is, it should be preferable if it validates.
+        if (networkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED)
+                && !other.networkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED)) {
+            return true;
+        }
+
+        // If the control comes here :
+        // • This network is neither exiting or explicitly selected
+        // • This network is not validated, but the other is
+        // • This network is metered, or both networks are unmetered
+        // Keep it if it's expected to be faster than the other., should it validate.
+        return mNetworkScore.probablyFasterThan(other.mNetworkScore);
+    }
+
     public void dumpLingerTimers(PrintWriter pw) {
         for (LingerTimer timer : mLingerTimers) { pw.println(timer); }
     }
@@ -645,9 +670,16 @@
                 + "}";
     }
 
-    public String name() {
-        return "NetworkAgentInfo [" + networkInfo.getTypeName() + " (" +
-                networkInfo.getSubtypeName() + ") - " + Objects.toString(network) + "]";
+    /**
+     * Show a short string representing a Network.
+     *
+     * This is often not enough for debugging purposes for anything complex, but the full form
+     * is very long and hard to read, so this is useful when there isn't a lot of ambiguity.
+     * This represents the network with something like "[100 WIFI|VPN]" or "[108 MOBILE]".
+     */
+    public String toShortString() {
+        return "[" + network.netId + " "
+                + transportNamesOf(networkCapabilities.getTransportTypes()) + "]";
     }
 
     // Enables sorting in descending order of score.
@@ -655,4 +687,12 @@
     public int compareTo(NetworkAgentInfo other) {
         return other.getCurrentScore() - getCurrentScore();
     }
+
+    /**
+     * Null-guarding version of NetworkAgentInfo#toShortString()
+     */
+    @NonNull
+    public static String toShortString(@Nullable final NetworkAgentInfo nai) {
+        return null != nai ? nai.toShortString() : "[null]";
+    }
 }
diff --git a/services/core/java/com/android/server/connectivity/NetworkRanker.java b/services/core/java/com/android/server/connectivity/NetworkRanker.java
new file mode 100644
index 0000000..80d46e0
--- /dev/null
+++ b/services/core/java/com/android/server/connectivity/NetworkRanker.java
@@ -0,0 +1,114 @@
+/*
+ * 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.connectivity;
+
+import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
+import static android.net.NetworkCapabilities.TRANSPORT_VPN;
+import static android.net.NetworkScore.POLICY_IGNORE_ON_WIFI;
+
+import static com.android.internal.util.FunctionalUtils.findFirst;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.net.NetworkCapabilities;
+import android.net.NetworkRequest;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * A class that knows how to find the best network matching a request out of a list of networks.
+ */
+public class NetworkRanker {
+    public NetworkRanker() { }
+
+    /**
+     * Find the best network satisfying this request among the list of passed networks.
+     */
+    @Nullable
+    public NetworkAgentInfo getBestNetwork(@NonNull final NetworkRequest request,
+            @NonNull final Collection<NetworkAgentInfo> nais) {
+        final ArrayList<NetworkAgentInfo> candidates = new ArrayList<>(nais);
+        candidates.removeIf(nai -> !nai.satisfies(request));
+
+        // Enforce policy. The order in which the policy is computed is essential, because each
+        // step may remove some of the candidates. For example, filterValidated drops non-validated
+        // networks in presence of validated networks for INTERNET requests, but the bad wifi
+        // avoidance policy takes priority over this, so it must be done before.
+        filterVpn(candidates);
+        filterExplicitlySelected(candidates);
+        filterBadWifiAvoidance(candidates);
+        filterValidated(request, candidates);
+
+        NetworkAgentInfo bestNetwork = null;
+        int bestScore = Integer.MIN_VALUE;
+        for (final NetworkAgentInfo nai : candidates) {
+            final int score = nai.getNetworkScore().getLegacyScore();
+            if (score > bestScore) {
+                bestNetwork = nai;
+                bestScore = score;
+            }
+        }
+        return bestNetwork;
+    }
+
+    // If a network is a VPN it has priority.
+    private void filterVpn(@NonNull final ArrayList<NetworkAgentInfo> candidates) {
+        final NetworkAgentInfo vpn = findFirst(candidates,
+                nai -> nai.networkCapabilities.hasTransport(TRANSPORT_VPN));
+        if (null == vpn) return; // No VPN : this policy doesn't apply.
+        candidates.removeIf(nai -> !nai.networkCapabilities.hasTransport(TRANSPORT_VPN));
+    }
+
+    // If some network is explicitly selected and set to accept unvalidated connectivity, then
+    // drop all networks that are not explicitly selected.
+    private void filterExplicitlySelected(
+            @NonNull final ArrayList<NetworkAgentInfo> candidates) {
+        final NetworkAgentInfo explicitlySelected = findFirst(candidates,
+                nai -> nai.networkAgentConfig.explicitlySelected
+                        && nai.networkAgentConfig.acceptUnvalidated);
+        if (null == explicitlySelected) return; // No explicitly selected network accepting unvalid
+        candidates.removeIf(nai -> !nai.networkAgentConfig.explicitlySelected);
+    }
+
+    // If some network with wifi transport is present, drop all networks with POLICY_IGNORE_ON_WIFI.
+    private void filterBadWifiAvoidance(@NonNull final ArrayList<NetworkAgentInfo> candidates) {
+        final NetworkAgentInfo wifi = findFirst(candidates,
+                nai -> nai.networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
+                        && nai.everValidated
+                        // Horrible hack : there is old UI that will let a user say they want to
+                        // override the policy only for this network only at this time and it
+                        // feeds into the following member. This old UI should probably be removed
+                        // but for now keep backward compatibility.
+                        && !nai.avoidUnvalidated);
+        if (null == wifi) return; // No wifi : this policy doesn't apply
+        candidates.removeIf(nai -> nai.getNetworkScore().hasPolicy(POLICY_IGNORE_ON_WIFI));
+    }
+
+    // If some network is validated and the request asks for INTERNET, drop all networks that are
+    // not validated.
+    private void filterValidated(@NonNull final NetworkRequest request,
+            @NonNull final ArrayList<NetworkAgentInfo> candidates) {
+        if (!request.hasCapability(NET_CAPABILITY_INTERNET)) return;
+        final NetworkAgentInfo validated = findFirst(candidates,
+                nai -> nai.networkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED));
+        if (null == validated) return; // No validated network
+        candidates.removeIf(nai ->
+                !nai.networkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED));
+    }
+}
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index cb88c4e..e484ca0 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -48,8 +48,12 @@
 import android.content.pm.UserInfo;
 import android.net.ConnectivityManager;
 import android.net.INetworkManagementEventObserver;
+import android.net.Ikev2VpnProfile;
 import android.net.IpPrefix;
 import android.net.IpSecManager;
+import android.net.IpSecManager.IpSecTunnelInterface;
+import android.net.IpSecManager.UdpEncapsulationSocket;
+import android.net.IpSecTransform;
 import android.net.LinkAddress;
 import android.net.LinkProperties;
 import android.net.LocalSocket;
@@ -65,6 +69,12 @@
 import android.net.UidRange;
 import android.net.VpnManager;
 import android.net.VpnService;
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.ChildSessionConfiguration;
+import android.net.ipsec.ike.ChildSessionParams;
+import android.net.ipsec.ike.IkeSession;
+import android.net.ipsec.ike.IkeSessionCallback;
+import android.net.ipsec.ike.IkeSessionParams;
 import android.os.Binder;
 import android.os.Build.VERSION_CODES;
 import android.os.Bundle;
@@ -113,6 +123,7 @@
 import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.nio.charset.StandardCharsets;
+import java.security.GeneralSecurityException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -122,6 +133,9 @@
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
@@ -176,14 +190,14 @@
 
     private final Context mContext;
     private final NetworkInfo mNetworkInfo;
-    private String mPackage;
+    @VisibleForTesting protected String mPackage;
     private int mOwnerUID;
     private boolean mIsPackageTargetingAtLeastQ;
     private String mInterface;
     private Connection mConnection;
 
     /** Tracks the runners for all VPN types managed by the platform (eg. LegacyVpn, PlatformVpn) */
-    private VpnRunner mVpnRunner;
+    @VisibleForTesting protected VpnRunner mVpnRunner;
 
     private PendingIntent mStatusIntent;
     private volatile boolean mEnableTeardown = true;
@@ -196,19 +210,20 @@
     @VisibleForTesting
     protected final NetworkCapabilities mNetworkCapabilities;
     private final SystemServices mSystemServices;
+    private final Ikev2SessionCreator mIkev2SessionCreator;
 
     /**
      * Whether to keep the connection active after rebooting, or upgrading or reinstalling. This
      * only applies to {@link VpnService} connections.
      */
-    private boolean mAlwaysOn = false;
+    @VisibleForTesting protected boolean mAlwaysOn = false;
 
     /**
      * Whether to disable traffic outside of this VPN even when the VPN is not connected. System
      * apps can still bypass by choosing explicit networks. Has no effect if {@link mAlwaysOn} is
-     * not set.
+     * not set. Applies to all types of VPNs.
      */
-    private boolean mLockdown = false;
+    @VisibleForTesting protected boolean mLockdown = false;
 
     /**
      * Set of packages in addition to the VPN app itself that can access the network directly when
@@ -237,18 +252,21 @@
     private final int mUserHandle;
 
     public Vpn(Looper looper, Context context, INetworkManagementService netService,
-            @UserIdInt int userHandle) {
-        this(looper, context, netService, userHandle, new SystemServices(context));
+            @UserIdInt int userHandle, @NonNull KeyStore keyStore) {
+        this(looper, context, netService, userHandle, keyStore,
+                new SystemServices(context), new Ikev2SessionCreator());
     }
 
     @VisibleForTesting
     protected Vpn(Looper looper, Context context, INetworkManagementService netService,
-            int userHandle, SystemServices systemServices) {
+            int userHandle, @NonNull KeyStore keyStore, SystemServices systemServices,
+            Ikev2SessionCreator ikev2SessionCreator) {
         mContext = context;
         mNetd = netService;
         mUserHandle = userHandle;
         mLooper = looper;
         mSystemServices = systemServices;
+        mIkev2SessionCreator = ikev2SessionCreator;
 
         mPackage = VpnConfig.LEGACY_VPN;
         mOwnerUID = getAppUid(mPackage, mUserHandle);
@@ -267,7 +285,7 @@
         mNetworkCapabilities.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN);
         updateCapabilities(null /* defaultNetwork */);
 
-        loadAlwaysOnPackage();
+        loadAlwaysOnPackage(keyStore);
     }
 
     /**
@@ -419,23 +437,36 @@
     /**
      * Checks if a VPN app supports always-on mode.
      *
-     * In order to support the always-on feature, an app has to
+     * <p>In order to support the always-on feature, an app has to either have an installed
+     * PlatformVpnProfile, or:
+     *
      * <ul>
-     *     <li>target {@link VERSION_CODES#N API 24} or above, and
-     *     <li>not opt out through the {@link VpnService#SERVICE_META_DATA_SUPPORTS_ALWAYS_ON}
-     *         meta-data field.
+     *   <li>target {@link VERSION_CODES#N API 24} or above, and
+     *   <li>not opt out through the {@link VpnService#SERVICE_META_DATA_SUPPORTS_ALWAYS_ON}
+     *       meta-data field.
      * </ul>
      *
      * @param packageName the canonical package name of the VPN app
+     * @param keyStore the keystore instance to use for checking if the app has a Platform VPN
+     *     profile installed.
      * @return {@code true} if and only if the VPN app exists and supports always-on mode
      */
-    public boolean isAlwaysOnPackageSupported(String packageName) {
+    public boolean isAlwaysOnPackageSupported(String packageName, @NonNull KeyStore keyStore) {
         enforceSettingsPermission();
 
         if (packageName == null) {
             return false;
         }
 
+        final long oldId = Binder.clearCallingIdentity();
+        try {
+            if (getVpnProfilePrivileged(packageName, keyStore) != null) {
+                return true;
+            }
+        } finally {
+            Binder.restoreCallingIdentity(oldId);
+        }
+
         PackageManager pm = mContext.getPackageManager();
         ApplicationInfo appInfo = null;
         try {
@@ -467,27 +498,31 @@
     }
 
     /**
-     * Configures an always-on VPN connection through a specific application.
-     * This connection is automatically granted and persisted after a reboot.
+     * Configures an always-on VPN connection through a specific application. This connection is
+     * automatically granted and persisted after a reboot.
      *
-     * <p>The designated package should exist and declare a {@link VpnService} in its
-     *    manifest guarded by {@link android.Manifest.permission.BIND_VPN_SERVICE},
-     *    otherwise the call will fail.
+     * <p>The designated package should either have a PlatformVpnProfile installed, or declare a
+     * {@link VpnService} in its manifest guarded by {@link
+     * android.Manifest.permission.BIND_VPN_SERVICE}, otherwise the call will fail.
      *
      * <p>Note that this method does not check if the VPN app supports always-on mode. The check is
-     *    delayed to {@link #startAlwaysOnVpn()}, which is always called immediately after this
-     *    method in {@link android.net.IConnectivityManager#setAlwaysOnVpnPackage}.
+     * delayed to {@link #startAlwaysOnVpn()}, which is always called immediately after this method
+     * in {@link android.net.IConnectivityManager#setAlwaysOnVpnPackage}.
      *
      * @param packageName the package to designate as always-on VPN supplier.
      * @param lockdown whether to prevent traffic outside of a VPN, for example while connecting.
      * @param lockdownWhitelist packages to be whitelisted from lockdown.
+     * @param keyStore the Keystore instance to use for checking of PlatformVpnProfile(s)
      * @return {@code true} if the package has been set as always-on, {@code false} otherwise.
      */
     public synchronized boolean setAlwaysOnPackage(
-            String packageName, boolean lockdown, List<String> lockdownWhitelist) {
+            @Nullable String packageName,
+            boolean lockdown,
+            @Nullable List<String> lockdownWhitelist,
+            @NonNull KeyStore keyStore) {
         enforceControlPermissionOrInternalCaller();
 
-        if (setAlwaysOnPackageInternal(packageName, lockdown, lockdownWhitelist)) {
+        if (setAlwaysOnPackageInternal(packageName, lockdown, lockdownWhitelist, keyStore)) {
             saveAlwaysOnPackage();
             return true;
         }
@@ -495,20 +530,22 @@
     }
 
     /**
-     * Configures an always-on VPN connection through a specific application, the same as
-     * {@link #setAlwaysOnPackage}.
+     * Configures an always-on VPN connection through a specific application, the same as {@link
+     * #setAlwaysOnPackage}.
      *
-     * Does not perform permission checks. Does not persist any of the changes to storage.
+     * <p>Does not perform permission checks. Does not persist any of the changes to storage.
      *
      * @param packageName the package to designate as always-on VPN supplier.
      * @param lockdown whether to prevent traffic outside of a VPN, for example while connecting.
      * @param lockdownWhitelist packages to be whitelisted from lockdown. This is only used if
-     *        {@code lockdown} is {@code true}. Packages must not contain commas.
+     *     {@code lockdown} is {@code true}. Packages must not contain commas.
+     * @param keyStore the system keystore instance to check for profiles
      * @return {@code true} if the package has been set as always-on, {@code false} otherwise.
      */
     @GuardedBy("this")
     private boolean setAlwaysOnPackageInternal(
-            String packageName, boolean lockdown, List<String> lockdownWhitelist) {
+            @Nullable String packageName, boolean lockdown,
+            @Nullable List<String> lockdownWhitelist, @NonNull KeyStore keyStore) {
         if (VpnConfig.LEGACY_VPN.equals(packageName)) {
             Log.w(TAG, "Not setting legacy VPN \"" + packageName + "\" as always-on.");
             return false;
@@ -524,11 +561,18 @@
         }
 
         if (packageName != null) {
-            // TODO: Give the minimum permission possible; if there is a Platform VPN profile, only
-            // grant ACTIVATE_PLATFORM_VPN.
-            // Pre-authorize new always-on VPN package. Grant the full ACTIVATE_VPN appop, allowing
-            // both VpnService and Platform VPNs.
-            if (!setPackageAuthorization(packageName, VpnManager.TYPE_VPN_SERVICE)) {
+            final VpnProfile profile;
+            final long oldId = Binder.clearCallingIdentity();
+            try {
+                profile = getVpnProfilePrivileged(packageName, keyStore);
+            } finally {
+                Binder.restoreCallingIdentity(oldId);
+            }
+
+            // Pre-authorize new always-on VPN package.
+            final int grantType =
+                    (profile == null) ? VpnManager.TYPE_VPN_SERVICE : VpnManager.TYPE_VPN_PLATFORM;
+            if (!setPackageAuthorization(packageName, grantType)) {
                 return false;
             }
             mAlwaysOn = true;
@@ -593,11 +637,9 @@
         }
     }
 
-    /**
-     * Load the always-on package and lockdown config from Settings.Secure
-     */
+    /** Load the always-on package and lockdown config from Settings. */
     @GuardedBy("this")
-    private void loadAlwaysOnPackage() {
+    private void loadAlwaysOnPackage(@NonNull KeyStore keyStore) {
         final long token = Binder.clearCallingIdentity();
         try {
             final String alwaysOnPackage = mSystemServices.settingsSecureGetStringForUser(
@@ -608,17 +650,21 @@
                     Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN_WHITELIST, mUserHandle);
             final List<String> whitelistedPackages = TextUtils.isEmpty(whitelistString)
                     ? Collections.emptyList() : Arrays.asList(whitelistString.split(","));
-            setAlwaysOnPackageInternal(alwaysOnPackage, alwaysOnLockdown, whitelistedPackages);
+            setAlwaysOnPackageInternal(
+                    alwaysOnPackage, alwaysOnLockdown, whitelistedPackages, keyStore);
         } finally {
             Binder.restoreCallingIdentity(token);
         }
     }
 
     /**
+     * Starts the currently selected always-on VPN
+     *
+     * @param keyStore the keyStore instance for looking up PlatformVpnProfile(s)
      * @return {@code true} if the service was started, the service was already connected, or there
-     *         was no always-on VPN to start. {@code false} otherwise.
+     *     was no always-on VPN to start. {@code false} otherwise.
      */
-    public boolean startAlwaysOnVpn() {
+    public boolean startAlwaysOnVpn(@NonNull KeyStore keyStore) {
         final String alwaysOnPackage;
         synchronized (this) {
             alwaysOnPackage = getAlwaysOnPackage();
@@ -627,8 +673,8 @@
                 return true;
             }
             // Remove always-on VPN if it's not supported.
-            if (!isAlwaysOnPackageSupported(alwaysOnPackage)) {
-                setAlwaysOnPackage(null, false, null);
+            if (!isAlwaysOnPackageSupported(alwaysOnPackage, keyStore)) {
+                setAlwaysOnPackage(null, false, null, keyStore);
                 return false;
             }
             // Skip if the service is already established. This isn't bulletproof: it's not bound
@@ -639,10 +685,25 @@
             }
         }
 
-        // Tell the OS that background services in this app need to be allowed for
-        // a short time, so we can bootstrap the VPN service.
         final long oldId = Binder.clearCallingIdentity();
         try {
+            // Prefer VPN profiles, if any exist.
+            VpnProfile profile = getVpnProfilePrivileged(alwaysOnPackage, keyStore);
+            if (profile != null) {
+                startVpnProfilePrivileged(profile, alwaysOnPackage,
+                        null /* keyStore for private key retrieval - unneeded */);
+
+                // If the above startVpnProfilePrivileged() call returns, the Ikev2VpnProfile was
+                // correctly parsed, and the VPN has started running in a different thread. The only
+                // other possibility is that the above call threw an exception, which will be
+                // caught below, and returns false (clearing the always-on VPN). Once started, the
+                // Platform VPN cannot permanently fail, and is resilient to temporary failures. It
+                // will continue retrying until shut down by the user, or always-on is toggled off.
+                return true;
+            }
+
+            // Tell the OS that background services in this app need to be allowed for
+            // a short time, so we can bootstrap the VPN service.
             DeviceIdleInternal idleController =
                     LocalServices.getService(DeviceIdleInternal.class);
             idleController.addPowerSaveTempWhitelistApp(Process.myUid(), alwaysOnPackage,
@@ -657,6 +718,9 @@
                 Log.e(TAG, "VpnService " + serviceIntent + " failed to start", e);
                 return false;
             }
+        } catch (Exception e) {
+            Log.e(TAG, "Error starting always-on VPN", e);
+            return false;
         } finally {
             Binder.restoreCallingIdentity(oldId);
         }
@@ -749,11 +813,13 @@
 
     private boolean isCurrentPreparedPackage(String packageName) {
         // We can't just check that packageName matches mPackage, because if the app was uninstalled
-        // and reinstalled it will no longer be prepared. Instead check the UID.
-        return getAppUid(packageName, mUserHandle) == mOwnerUID;
+        // and reinstalled it will no longer be prepared. Similarly if there is a shared UID, the
+        // calling package may not be the same as the prepared package. Check both UID and package.
+        return getAppUid(packageName, mUserHandle) == mOwnerUID && mPackage.equals(packageName);
     }
 
     /** Prepare the VPN for the given package. Does not perform permission checks. */
+    @GuardedBy("this")
     private void prepareInternal(String newPackage) {
         long token = Binder.clearCallingIdentity();
         try {
@@ -775,10 +841,10 @@
                     // ignore
                 }
                 mContext.unbindService(mConnection);
-                mConnection = null;
+                cleanupVpnStateLocked();
             } else if (mVpnRunner != null) {
+                // cleanupVpnStateLocked() is called from mVpnRunner.exit()
                 mVpnRunner.exit();
-                mVpnRunner = null;
             }
 
             try {
@@ -979,7 +1045,11 @@
         }
         lp.setDomains(buffer.toString().trim());
 
-        // TODO: Stop setting the MTU in jniCreate and set it here.
+        if (mConfig.mtu > 0) {
+            lp.setMtu(mConfig.mtu);
+        }
+
+        // TODO: Stop setting the MTU in jniCreate
 
         return lp;
     }
@@ -1085,7 +1155,6 @@
      */
     public synchronized ParcelFileDescriptor establish(VpnConfig config) {
         // Check if the caller is already prepared.
-        UserManager mgr = UserManager.get(mContext);
         if (Binder.getCallingUid() != mOwnerUID) {
             return null;
         }
@@ -1099,10 +1168,7 @@
         long token = Binder.clearCallingIdentity();
         try {
             // Restricted users are not allowed to create VPNs, they are tied to Owner
-            UserInfo user = mgr.getUserInfo(mUserHandle);
-            if (user.isRestricted()) {
-                throw new SecurityException("Restricted users cannot establish VPNs");
-            }
+            enforceNotRestrictedUser();
 
             ResolveInfo info = AppGlobals.getPackageManager().resolveService(intent,
                     null, 0, mUserHandle);
@@ -1524,24 +1590,30 @@
         public void interfaceRemoved(String interfaze) {
             synchronized (Vpn.this) {
                 if (interfaze.equals(mInterface) && jniCheck(interfaze) == 0) {
-                    mStatusIntent = null;
-                    mNetworkCapabilities.setUids(null);
-                    mConfig = null;
-                    mInterface = null;
                     if (mConnection != null) {
                         mContext.unbindService(mConnection);
-                        mConnection = null;
-                        agentDisconnect();
+                        cleanupVpnStateLocked();
                     } else if (mVpnRunner != null) {
-                        // agentDisconnect must be called from mVpnRunner.exit()
+                        // cleanupVpnStateLocked() is called from mVpnRunner.exit()
                         mVpnRunner.exit();
-                        mVpnRunner = null;
                     }
                 }
             }
         }
     };
 
+    private void cleanupVpnStateLocked() {
+        mStatusIntent = null;
+        mNetworkCapabilities.setUids(null);
+        mConfig = null;
+        mInterface = null;
+
+        // Unconditionally clear both VpnService and VpnRunner fields.
+        mVpnRunner = null;
+        mConnection = null;
+        agentDisconnect();
+    }
+
     private void enforceControlPermission() {
         mContext.enforceCallingPermission(Manifest.permission.CONTROL_VPN, "Unauthorized Caller");
     }
@@ -1654,6 +1726,25 @@
     }
 
     /**
+     * Gets the currently running App-based VPN type
+     *
+     * @return the {@link VpnManager.VpnType}. {@link VpnManager.TYPE_VPN_NONE} if not running an
+     *     app-based VPN. While VpnService-based VPNs are always app VPNs and LegacyVpn is always
+     *     Settings-based, the Platform VPNs can be initiated by both apps and Settings.
+     */
+    public synchronized int getActiveAppVpnType() {
+        if (VpnConfig.LEGACY_VPN.equals(mPackage)) {
+            return VpnManager.TYPE_VPN_NONE;
+        }
+
+        if (mVpnRunner != null && mVpnRunner instanceof IkeV2VpnRunner) {
+            return VpnManager.TYPE_VPN_PLATFORM;
+        } else {
+            return VpnManager.TYPE_VPN_SERVICE;
+        }
+    }
+
+    /**
      * @param uid The target uid.
      *
      * @return {@code true} if {@code uid} is included in one of the mBlockedUidsAsToldToNetd
@@ -1781,6 +1872,17 @@
         throw new IllegalStateException("Unable to find IPv4 default gateway");
     }
 
+    private void enforceNotRestrictedUser() {
+        Binder.withCleanCallingIdentity(() -> {
+            final UserManager mgr = UserManager.get(mContext);
+            final UserInfo user = mgr.getUserInfo(mUserHandle);
+
+            if (user.isRestricted()) {
+                throw new SecurityException("Restricted users cannot configure VPNs");
+            }
+        });
+    }
+
     /**
      * Start legacy VPN, controlling native daemons as needed. Creates a
      * secondary thread to perform connection work, returning quickly.
@@ -1843,6 +1945,27 @@
         // Prepare arguments for racoon.
         String[] racoon = null;
         switch (profile.type) {
+            case VpnProfile.TYPE_IKEV2_IPSEC_RSA:
+                // Secret key is still just the alias (not the actual private key). The private key
+                // is retrieved from the KeyStore during conversion of the VpnProfile to an
+                // Ikev2VpnProfile.
+                profile.ipsecSecret = Ikev2VpnProfile.PREFIX_KEYSTORE_ALIAS + privateKey;
+                profile.ipsecUserCert = userCert;
+                // Fallthrough
+            case VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS:
+                profile.ipsecCaCert = caCert;
+
+                // Start VPN profile
+                startVpnProfilePrivileged(profile, VpnConfig.LEGACY_VPN, keyStore);
+                return;
+            case VpnProfile.TYPE_IKEV2_IPSEC_PSK:
+                // Ikev2VpnProfiles expect a base64-encoded preshared key.
+                profile.ipsecSecret =
+                        Ikev2VpnProfile.encodeForIpsecSecret(profile.ipsecSecret.getBytes());
+
+                // Start VPN profile
+                startVpnProfilePrivileged(profile, VpnConfig.LEGACY_VPN, keyStore);
+                return;
             case VpnProfile.TYPE_L2TP_IPSEC_PSK:
                 racoon = new String[] {
                     iface, profile.server, "udppsk", profile.ipsecIdentifier,
@@ -2001,33 +2124,376 @@
 
         public abstract void run();
 
-        protected abstract void exit();
+        /**
+         * Disconnects the NetworkAgent and cleans up all state related to the VpnRunner.
+         *
+         * <p>All outer Vpn instance state is cleaned up in cleanupVpnStateLocked()
+         */
+        protected abstract void exitVpnRunner();
+
+        /**
+         * Triggers the cleanup of the VpnRunner, and additionally cleans up Vpn instance-wide state
+         *
+         * <p>This method ensures that simple calls to exit() will always clean up global state
+         * properly.
+         */
+        protected final void exit() {
+            synchronized (Vpn.this) {
+                exitVpnRunner();
+                cleanupVpnStateLocked();
+            }
+        }
     }
 
-    private class IkeV2VpnRunner extends VpnRunner {
-        private static final String TAG = "IkeV2VpnRunner";
+    interface IkeV2VpnRunnerCallback {
+        void onDefaultNetworkChanged(@NonNull Network network);
 
-        private final IpSecManager mIpSecManager;
-        private final VpnProfile mProfile;
+        void onChildOpened(
+                @NonNull Network network, @NonNull ChildSessionConfiguration childConfig);
 
-        IkeV2VpnRunner(VpnProfile profile) {
+        void onChildTransformCreated(
+                @NonNull Network network, @NonNull IpSecTransform transform, int direction);
+
+        void onSessionLost(@NonNull Network network);
+    }
+
+    /**
+     * Internal class managing IKEv2/IPsec VPN connectivity
+     *
+     * <p>The IKEv2 VPN will listen to, and run based on the lifecycle of Android's default Network.
+     * As a new default is selected, old IKE sessions will be torn down, and a new one will be
+     * started.
+     *
+     * <p>This class uses locking minimally - the Vpn instance lock is only ever held when fields of
+     * the outer class are modified. As such, care must be taken to ensure that no calls are added
+     * that might modify the outer class' state without acquiring a lock.
+     *
+     * <p>The overall structure of the Ikev2VpnRunner is as follows:
+     *
+     * <ol>
+     *   <li>Upon startup, a NetworkRequest is registered with ConnectivityManager. This is called
+     *       any time a new default network is selected
+     *   <li>When a new default is connected, an IKE session is started on that Network. If there
+     *       were any existing IKE sessions on other Networks, they are torn down before starting
+     *       the new IKE session
+     *   <li>Upon establishment, the onChildTransformCreated() callback is called twice, one for
+     *       each direction, and finally onChildOpened() is called
+     *   <li>Upon the onChildOpened() call, the VPN is fully set up.
+     *   <li>Subsequent Network changes result in new onDefaultNetworkChanged() callbacks. See (2).
+     * </ol>
+     */
+    class IkeV2VpnRunner extends VpnRunner implements IkeV2VpnRunnerCallback {
+        @NonNull private static final String TAG = "IkeV2VpnRunner";
+
+        @NonNull private final IpSecManager mIpSecManager;
+        @NonNull private final Ikev2VpnProfile mProfile;
+        @NonNull private final ConnectivityManager.NetworkCallback mNetworkCallback;
+
+        /**
+         * Executor upon which ALL callbacks must be run.
+         *
+         * <p>This executor MUST be a single threaded executor, in order to ensure the consistency
+         * of the mutable Ikev2VpnRunner fields. The Ikev2VpnRunner is built mostly lock-free by
+         * virtue of everything being serialized on this executor.
+         */
+        @NonNull private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
+
+        /** Signal to ensure shutdown is honored even if a new Network is connected. */
+        private boolean mIsRunning = true;
+
+        @Nullable private UdpEncapsulationSocket mEncapSocket;
+        @Nullable private IpSecTunnelInterface mTunnelIface;
+        @Nullable private IkeSession mSession;
+        @Nullable private Network mActiveNetwork;
+
+        IkeV2VpnRunner(@NonNull Ikev2VpnProfile profile) {
             super(TAG);
             mProfile = profile;
-
-            // TODO: move this to startVpnRunnerPrivileged()
-            mConfig = new VpnConfig();
-            mIpSecManager = mContext.getSystemService(IpSecManager.class);
+            mIpSecManager = (IpSecManager) mContext.getSystemService(Context.IPSEC_SERVICE);
+            mNetworkCallback = new VpnIkev2Utils.Ikev2VpnNetworkCallback(TAG, this);
         }
 
         @Override
         public void run() {
-            // TODO: Build IKE config, start IKE session
+            // Explicitly use only the network that ConnectivityService thinks is the "best." In
+            // other words, only ever use the currently selected default network. This does mean
+            // that in both onLost() and onConnected(), any old sessions MUST be torn down. This
+            // does NOT include VPNs.
+            final ConnectivityManager cm = ConnectivityManager.from(mContext);
+            cm.requestNetwork(cm.getDefaultRequest(), mNetworkCallback);
+        }
+
+        private boolean isActiveNetwork(@Nullable Network network) {
+            return Objects.equals(mActiveNetwork, network) && mIsRunning;
+        }
+
+        /**
+         * Called when an IKE Child session has been opened, signalling completion of the startup.
+         *
+         * <p>This method is only ever called once per IkeSession, and MUST run on the mExecutor
+         * thread in order to ensure consistency of the Ikev2VpnRunner fields.
+         */
+        public void onChildOpened(
+                @NonNull Network network, @NonNull ChildSessionConfiguration childConfig) {
+            if (!isActiveNetwork(network)) {
+                Log.d(TAG, "onOpened called for obsolete network " + network);
+
+                // Do nothing; this signals that either: (1) a new/better Network was found,
+                // and the Ikev2VpnRunner has switched to it in onDefaultNetworkChanged, or (2) this
+                // IKE session was already shut down (exited, or an error was encountered somewhere
+                // else). In both cases, all resources and sessions are torn down via
+                // resetIkeState().
+                return;
+            }
+
+            try {
+                final String interfaceName = mTunnelIface.getInterfaceName();
+                final int maxMtu = mProfile.getMaxMtu();
+                final List<LinkAddress> internalAddresses = childConfig.getInternalAddresses();
+
+                final Collection<RouteInfo> newRoutes = VpnIkev2Utils.getRoutesFromTrafficSelectors(
+                        childConfig.getOutboundTrafficSelectors());
+                for (final LinkAddress address : internalAddresses) {
+                    mTunnelIface.addAddress(address.getAddress(), address.getPrefixLength());
+                }
+
+                final NetworkAgent networkAgent;
+                final LinkProperties lp;
+
+                synchronized (Vpn.this) {
+                    mInterface = interfaceName;
+                    mConfig.mtu = maxMtu;
+                    mConfig.interfaze = mInterface;
+
+                    mConfig.addresses.clear();
+                    mConfig.addresses.addAll(internalAddresses);
+
+                    mConfig.routes.clear();
+                    mConfig.routes.addAll(newRoutes);
+
+                    // TODO: Add DNS servers from negotiation
+
+                    networkAgent = mNetworkAgent;
+
+                    // The below must be done atomically with the mConfig update, otherwise
+                    // isRunningLocked() will be racy.
+                    if (networkAgent == null) {
+                        if (isSettingsVpnLocked()) {
+                            prepareStatusIntent();
+                        }
+                        agentConnect();
+                        return; // Link properties are already sent.
+                    }
+
+                    lp = makeLinkProperties(); // Accesses VPN instance fields; must be locked
+                }
+
+                networkAgent.sendLinkProperties(lp);
+            } catch (Exception e) {
+                Log.d(TAG, "Error in ChildOpened for network " + network, e);
+                onSessionLost(network);
+            }
+        }
+
+        /**
+         * Called when an IPsec transform has been created, and should be applied.
+         *
+         * <p>This method is called multiple times over the lifetime of an IkeSession (or default
+         * network), and is MUST always be called on the mExecutor thread in order to ensure
+         * consistency of the Ikev2VpnRunner fields.
+         */
+        public void onChildTransformCreated(
+                @NonNull Network network, @NonNull IpSecTransform transform, int direction) {
+            if (!isActiveNetwork(network)) {
+                Log.d(TAG, "ChildTransformCreated for obsolete network " + network);
+
+                // Do nothing; this signals that either: (1) a new/better Network was found,
+                // and the Ikev2VpnRunner has switched to it in onDefaultNetworkChanged, or (2) this
+                // IKE session was already shut down (exited, or an error was encountered somewhere
+                // else). In both cases, all resources and sessions are torn down via
+                // resetIkeState().
+                return;
+            }
+
+            try {
+                // Transforms do not need to be persisted; the IkeSession will keep
+                // them alive for us
+                mIpSecManager.applyTunnelModeTransform(mTunnelIface, direction, transform);
+            } catch (IOException e) {
+                Log.d(TAG, "Transform application failed for network " + network, e);
+                onSessionLost(network);
+            }
+        }
+
+        /**
+         * Called when a new default network is connected.
+         *
+         * <p>The Ikev2VpnRunner will unconditionally switch to the new network, killing the old IKE
+         * state in the process, and starting a new IkeSession instance.
+         *
+         * <p>This method is called multiple times over the lifetime of the Ikev2VpnRunner, and is
+         * called on the ConnectivityService thread. Thus, the actual work MUST be proxied to the
+         * mExecutor thread in order to ensure consistency of the Ikev2VpnRunner fields.
+         */
+        public void onDefaultNetworkChanged(@NonNull Network network) {
+            Log.d(TAG, "Starting IKEv2/IPsec session on new network: " + network);
+
+            // Proxy to the Ikev2VpnRunner (single-thread) executor to ensure consistency in lieu
+            // of locking.
+            mExecutor.execute(() -> {
+                try {
+                    if (!mIsRunning) {
+                        Log.d(TAG, "onDefaultNetworkChanged after exit");
+                        return; // VPN has been shut down.
+                    }
+
+                    // Without MOBIKE, we have no way to seamlessly migrate. Close on old
+                    // (non-default) network, and start the new one.
+                    resetIkeState();
+                    mActiveNetwork = network;
+
+                    // TODO(b/149356682): Update this based on new IKE API
+                    mEncapSocket = mIpSecManager.openUdpEncapsulationSocket();
+
+                    // TODO(b/149356682): Update this based on new IKE API
+                    final IkeSessionParams ikeSessionParams =
+                            VpnIkev2Utils.buildIkeSessionParams(mProfile, mEncapSocket);
+                    final ChildSessionParams childSessionParams =
+                            VpnIkev2Utils.buildChildSessionParams();
+
+                    // TODO: Remove the need for adding two unused addresses with
+                    // IPsec tunnels.
+                    mTunnelIface =
+                            mIpSecManager.createIpSecTunnelInterface(
+                                    ikeSessionParams.getServerAddress() /* unused */,
+                                    ikeSessionParams.getServerAddress() /* unused */,
+                                    network);
+                    mNetd.setInterfaceUp(mTunnelIface.getInterfaceName());
+
+                    // Socket must be bound to prevent network switches from causing
+                    // the IKE teardown to fail/timeout.
+                    // TODO(b/149356682): Update this based on new IKE API
+                    network.bindSocket(mEncapSocket.getFileDescriptor());
+
+                    mSession = mIkev2SessionCreator.createIkeSession(
+                            mContext,
+                            ikeSessionParams,
+                            childSessionParams,
+                            mExecutor,
+                            new VpnIkev2Utils.IkeSessionCallbackImpl(
+                                    TAG, IkeV2VpnRunner.this, network),
+                            new VpnIkev2Utils.ChildSessionCallbackImpl(
+                                    TAG, IkeV2VpnRunner.this, network));
+                    Log.d(TAG, "Ike Session started for network " + network);
+                } catch (Exception e) {
+                    Log.i(TAG, "Setup failed for network " + network + ". Aborting", e);
+                    onSessionLost(network);
+                }
+            });
+        }
+
+        /**
+         * Handles loss of a session
+         *
+         * <p>The loss of a session might be due to an onLost() call, the IKE session getting torn
+         * down for any reason, or an error in updating state (transform application, VPN setup)
+         *
+         * <p>This method MUST always be called on the mExecutor thread in order to ensure
+         * consistency of the Ikev2VpnRunner fields.
+         */
+        public void onSessionLost(@NonNull Network network) {
+            if (!isActiveNetwork(network)) {
+                Log.d(TAG, "onSessionLost() called for obsolete network " + network);
+
+                // Do nothing; this signals that either: (1) a new/better Network was found,
+                // and the Ikev2VpnRunner has switched to it in onDefaultNetworkChanged, or (2) this
+                // IKE session was already shut down (exited, or an error was encountered somewhere
+                // else). In both cases, all resources and sessions are torn down via
+                // onSessionLost() and resetIkeState().
+                return;
+            }
+
+            mActiveNetwork = null;
+
+            // Close all obsolete state, but keep VPN alive incase a usable network comes up.
+            // (Mirrors VpnService behavior)
+            Log.d(TAG, "Resetting state for network: " + network);
+
+            synchronized (Vpn.this) {
+                // Since this method handles non-fatal errors only, set mInterface to null to
+                // prevent the NetworkManagementEventObserver from killing this VPN based on the
+                // interface going down (which we expect).
+                mInterface = null;
+                mConfig.interfaze = null;
+
+                // Set as unroutable to prevent traffic leaking while the interface is down.
+                if (mConfig != null && mConfig.routes != null) {
+                    final List<RouteInfo> oldRoutes = new ArrayList<>(mConfig.routes);
+
+                    mConfig.routes.clear();
+                    for (final RouteInfo route : oldRoutes) {
+                        mConfig.routes.add(new RouteInfo(route.getDestination(), RTN_UNREACHABLE));
+                    }
+                    if (mNetworkAgent != null) {
+                        mNetworkAgent.sendLinkProperties(makeLinkProperties());
+                    }
+                }
+            }
+
+            resetIkeState();
+        }
+
+        /**
+         * Cleans up all IKE state
+         *
+         * <p>This method MUST always be called on the mExecutor thread in order to ensure
+         * consistency of the Ikev2VpnRunner fields.
+         */
+        private void resetIkeState() {
+            if (mTunnelIface != null) {
+                // No need to call setInterfaceDown(); the IpSecInterface is being fully torn down.
+                mTunnelIface.close();
+                mTunnelIface = null;
+            }
+            if (mSession != null) {
+                mSession.kill(); // Kill here to make sure all resources are released immediately
+                mSession = null;
+            }
+
+            // TODO(b/149356682): Update this based on new IKE API
+            if (mEncapSocket != null) {
+                try {
+                    mEncapSocket.close();
+                } catch (IOException e) {
+                    Log.e(TAG, "Failed to close encap socket", e);
+                }
+                mEncapSocket = null;
+            }
+        }
+
+        /**
+         * Cleans up all Ikev2VpnRunner internal state
+         *
+         * <p>This method MUST always be called on the mExecutor thread in order to ensure
+         * consistency of the Ikev2VpnRunner fields.
+         */
+        private void shutdownVpnRunner() {
+            mActiveNetwork = null;
+            mIsRunning = false;
+
+            resetIkeState();
+
+            final ConnectivityManager cm = ConnectivityManager.from(mContext);
+            cm.unregisterNetworkCallback(mNetworkCallback);
+
+            mExecutor.shutdown();
         }
 
         @Override
-        public void exit() {
-            // TODO: Teardown IKE session & any resources.
-            agentDisconnect();
+        public void exitVpnRunner() {
+            mExecutor.execute(() -> {
+                shutdownVpnRunner();
+            });
         }
     }
 
@@ -2123,10 +2589,9 @@
 
         /** Tears down this LegacyVpn connection */
         @Override
-        public void exit() {
+        public void exitVpnRunner() {
             // We assume that everything is reset after stopping the daemons.
             interrupt();
-            agentDisconnect();
             try {
                 mContext.unregisterReceiver(mBroadcastReceiver);
             } catch (IllegalArgumentException e) {}
@@ -2399,6 +2864,7 @@
         checkNotNull(keyStore, "KeyStore missing");
 
         verifyCallingUidAndPackage(packageName);
+        enforceNotRestrictedUser();
 
         final byte[] encodedProfile = profile.encode();
         if (encodedProfile.length > MAX_VPN_PROFILE_SIZE_BYTES) {
@@ -2422,6 +2888,10 @@
         return isVpnProfilePreConsented(mContext, packageName);
     }
 
+    private boolean isCurrentIkev2VpnLocked(@NonNull String packageName) {
+        return isCurrentPreparedPackage(packageName) && mVpnRunner instanceof IkeV2VpnRunner;
+    }
+
     /**
      * Deletes an app-provisioned VPN profile.
      *
@@ -2434,9 +2904,21 @@
         checkNotNull(keyStore, "KeyStore missing");
 
         verifyCallingUidAndPackage(packageName);
+        enforceNotRestrictedUser();
 
         Binder.withCleanCallingIdentity(
                 () -> {
+                    // If this profile is providing the current VPN, turn it off, disabling
+                    // always-on as well if enabled.
+                    if (isCurrentIkev2VpnLocked(packageName)) {
+                        if (mAlwaysOn) {
+                            // Will transitively call prepareInternal(VpnConfig.LEGACY_VPN).
+                            setAlwaysOnPackage(null, false, null, keyStore);
+                        } else {
+                            prepareInternal(VpnConfig.LEGACY_VPN);
+                        }
+                    }
+
                     keyStore.delete(getProfileNameForPackage(packageName), Process.SYSTEM_UID);
                 });
     }
@@ -2476,6 +2958,8 @@
         checkNotNull(packageName, "No package name provided");
         checkNotNull(keyStore, "KeyStore missing");
 
+        enforceNotRestrictedUser();
+
         // Prepare VPN for startup
         if (!prepare(packageName, null /* newPackage */, VpnManager.TYPE_VPN_PLATFORM)) {
             throw new SecurityException("User consent not granted for package " + packageName);
@@ -2488,12 +2972,58 @@
                         throw new IllegalArgumentException("No profile found for " + packageName);
                     }
 
-                    startVpnProfilePrivileged(profile);
+                    startVpnProfilePrivileged(profile, packageName,
+                            null /* keyStore for private key retrieval - unneeded */);
                 });
     }
 
-    private void startVpnProfilePrivileged(@NonNull VpnProfile profile) {
-        // TODO: Start PlatformVpnRunner
+    private synchronized void startVpnProfilePrivileged(
+            @NonNull VpnProfile profile, @NonNull String packageName, @Nullable KeyStore keyStore) {
+        // Make sure VPN is prepared. This method can be called by user apps via startVpnProfile(),
+        // by the Setting app via startLegacyVpn(), or by ConnectivityService via
+        // startAlwaysOnVpn(), so this is the common place to prepare the VPN. This also has the
+        // nice property of ensuring there are no other VpnRunner instances running.
+        prepareInternal(packageName);
+        updateState(DetailedState.CONNECTING, "startPlatformVpn");
+
+        try {
+            // Build basic config
+            mConfig = new VpnConfig();
+            if (VpnConfig.LEGACY_VPN.equals(packageName)) {
+                mConfig.legacy = true;
+                mConfig.session = profile.name;
+                mConfig.user = profile.key;
+
+                // TODO: Add support for configuring meteredness via Settings. Until then, use a
+                // safe default.
+                mConfig.isMetered = true;
+            } else {
+                mConfig.user = packageName;
+                mConfig.isMetered = profile.isMetered;
+            }
+            mConfig.startTime = SystemClock.elapsedRealtime();
+            mConfig.proxyInfo = profile.proxy;
+
+            switch (profile.type) {
+                case VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS:
+                case VpnProfile.TYPE_IKEV2_IPSEC_PSK:
+                case VpnProfile.TYPE_IKEV2_IPSEC_RSA:
+                    mVpnRunner =
+                            new IkeV2VpnRunner(Ikev2VpnProfile.fromVpnProfile(profile, keyStore));
+                    mVpnRunner.start();
+                    break;
+                default:
+                    updateState(DetailedState.FAILED, "Invalid platform VPN type");
+                    Log.d(TAG, "Unknown VPN profile type: " + profile.type);
+                    break;
+            }
+        } catch (IOException | GeneralSecurityException e) {
+            // Reset mConfig
+            mConfig = null;
+
+            updateState(DetailedState.FAILED, "VPN startup failed");
+            throw new IllegalArgumentException("VPN startup failed", e);
+        }
     }
 
     /**
@@ -2507,13 +3037,37 @@
     public synchronized void stopVpnProfile(@NonNull String packageName) {
         checkNotNull(packageName, "No package name provided");
 
-        // To stop the VPN profile, the caller must be the current prepared package. Otherwise,
-        // the app is not prepared, and we can just return.
-        if (!isCurrentPreparedPackage(packageName)) {
-            // TODO: Also check to make sure that the running VPN is a VPN profile.
-            return;
-        }
+        enforceNotRestrictedUser();
 
-        prepareInternal(VpnConfig.LEGACY_VPN);
+        // To stop the VPN profile, the caller must be the current prepared package and must be
+        // running an Ikev2VpnProfile.
+        if (isCurrentIkev2VpnLocked(packageName)) {
+            prepareInternal(VpnConfig.LEGACY_VPN);
+        }
+    }
+
+    /**
+     * Proxy to allow testing
+     *
+     * @hide
+     */
+    @VisibleForTesting
+    public static class Ikev2SessionCreator {
+        /** Creates a IKE session */
+        public IkeSession createIkeSession(
+                @NonNull Context context,
+                @NonNull IkeSessionParams ikeSessionParams,
+                @NonNull ChildSessionParams firstChildSessionParams,
+                @NonNull Executor userCbExecutor,
+                @NonNull IkeSessionCallback ikeSessionCallback,
+                @NonNull ChildSessionCallback firstChildSessionCallback) {
+            return new IkeSession(
+                    context,
+                    ikeSessionParams,
+                    firstChildSessionParams,
+                    userCbExecutor,
+                    ikeSessionCallback,
+                    firstChildSessionCallback);
+        }
     }
 }
diff --git a/services/core/java/com/android/server/connectivity/VpnIkev2Utils.java b/services/core/java/com/android/server/connectivity/VpnIkev2Utils.java
new file mode 100644
index 0000000..33fc32b
--- /dev/null
+++ b/services/core/java/com/android/server/connectivity/VpnIkev2Utils.java
@@ -0,0 +1,390 @@
+/*
+ * 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.connectivity;
+
+import static android.net.ConnectivityManager.NetworkCallback;
+import static android.net.ipsec.ike.SaProposal.DH_GROUP_1024_BIT_MODP;
+import static android.net.ipsec.ike.SaProposal.DH_GROUP_2048_BIT_MODP;
+import static android.net.ipsec.ike.SaProposal.ENCRYPTION_ALGORITHM_AES_CBC;
+import static android.net.ipsec.ike.SaProposal.ENCRYPTION_ALGORITHM_AES_GCM_12;
+import static android.net.ipsec.ike.SaProposal.ENCRYPTION_ALGORITHM_AES_GCM_16;
+import static android.net.ipsec.ike.SaProposal.ENCRYPTION_ALGORITHM_AES_GCM_8;
+import static android.net.ipsec.ike.SaProposal.INTEGRITY_ALGORITHM_AES_XCBC_96;
+import static android.net.ipsec.ike.SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA1_96;
+import static android.net.ipsec.ike.SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA2_256_128;
+import static android.net.ipsec.ike.SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA2_384_192;
+import static android.net.ipsec.ike.SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA2_512_256;
+import static android.net.ipsec.ike.SaProposal.KEY_LEN_AES_128;
+import static android.net.ipsec.ike.SaProposal.KEY_LEN_AES_192;
+import static android.net.ipsec.ike.SaProposal.KEY_LEN_AES_256;
+import static android.net.ipsec.ike.SaProposal.PSEUDORANDOM_FUNCTION_AES128_XCBC;
+import static android.net.ipsec.ike.SaProposal.PSEUDORANDOM_FUNCTION_HMAC_SHA1;
+
+import android.annotation.NonNull;
+import android.net.Ikev2VpnProfile;
+import android.net.InetAddresses;
+import android.net.IpPrefix;
+import android.net.IpSecManager.UdpEncapsulationSocket;
+import android.net.IpSecTransform;
+import android.net.Network;
+import android.net.RouteInfo;
+import android.net.eap.EapSessionConfig;
+import android.net.ipsec.ike.ChildSaProposal;
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.ChildSessionConfiguration;
+import android.net.ipsec.ike.ChildSessionParams;
+import android.net.ipsec.ike.IkeFqdnIdentification;
+import android.net.ipsec.ike.IkeIdentification;
+import android.net.ipsec.ike.IkeIpv4AddrIdentification;
+import android.net.ipsec.ike.IkeIpv6AddrIdentification;
+import android.net.ipsec.ike.IkeKeyIdIdentification;
+import android.net.ipsec.ike.IkeRfc822AddrIdentification;
+import android.net.ipsec.ike.IkeSaProposal;
+import android.net.ipsec.ike.IkeSessionCallback;
+import android.net.ipsec.ike.IkeSessionConfiguration;
+import android.net.ipsec.ike.IkeSessionParams;
+import android.net.ipsec.ike.IkeTrafficSelector;
+import android.net.ipsec.ike.TunnelModeChildSessionParams;
+import android.net.ipsec.ike.exceptions.IkeException;
+import android.net.ipsec.ike.exceptions.IkeProtocolException;
+import android.net.util.IpRange;
+import android.system.OsConstants;
+import android.util.Log;
+
+import com.android.internal.net.VpnProfile;
+import com.android.internal.util.HexDump;
+
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * Utility class to build and convert IKEv2/IPsec parameters.
+ *
+ * @hide
+ */
+public class VpnIkev2Utils {
+    static IkeSessionParams buildIkeSessionParams(
+            @NonNull Ikev2VpnProfile profile, @NonNull UdpEncapsulationSocket socket) {
+        // TODO(b/149356682): Update this based on new IKE API. Only numeric addresses supported
+        //                    until then. All others throw IAE (caught by caller).
+        final InetAddress serverAddr = InetAddresses.parseNumericAddress(profile.getServerAddr());
+        final IkeIdentification localId = parseIkeIdentification(profile.getUserIdentity());
+        final IkeIdentification remoteId = parseIkeIdentification(profile.getServerAddr());
+
+        // TODO(b/149356682): Update this based on new IKE API.
+        final IkeSessionParams.Builder ikeOptionsBuilder =
+                new IkeSessionParams.Builder()
+                        .setServerAddress(serverAddr)
+                        .setUdpEncapsulationSocket(socket)
+                        .setLocalIdentification(localId)
+                        .setRemoteIdentification(remoteId);
+        setIkeAuth(profile, ikeOptionsBuilder);
+
+        for (final IkeSaProposal ikeProposal : getIkeSaProposals()) {
+            ikeOptionsBuilder.addSaProposal(ikeProposal);
+        }
+
+        return ikeOptionsBuilder.build();
+    }
+
+    static ChildSessionParams buildChildSessionParams() {
+        final TunnelModeChildSessionParams.Builder childOptionsBuilder =
+                new TunnelModeChildSessionParams.Builder();
+
+        for (final ChildSaProposal childProposal : getChildSaProposals()) {
+            childOptionsBuilder.addSaProposal(childProposal);
+        }
+
+        childOptionsBuilder.addInternalAddressRequest(OsConstants.AF_INET);
+        childOptionsBuilder.addInternalAddressRequest(OsConstants.AF_INET6);
+        childOptionsBuilder.addInternalDnsServerRequest(OsConstants.AF_INET);
+        childOptionsBuilder.addInternalDnsServerRequest(OsConstants.AF_INET6);
+
+        return childOptionsBuilder.build();
+    }
+
+    private static void setIkeAuth(
+            @NonNull Ikev2VpnProfile profile, @NonNull IkeSessionParams.Builder builder) {
+        switch (profile.getType()) {
+            case VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS:
+                final EapSessionConfig eapConfig =
+                        new EapSessionConfig.Builder()
+                                .setEapMsChapV2Config(profile.getUsername(), profile.getPassword())
+                                .build();
+                builder.setAuthEap(profile.getServerRootCaCert(), eapConfig);
+                break;
+            case VpnProfile.TYPE_IKEV2_IPSEC_PSK:
+                builder.setAuthPsk(profile.getPresharedKey());
+                break;
+            case VpnProfile.TYPE_IKEV2_IPSEC_RSA:
+                builder.setAuthDigitalSignature(
+                        profile.getServerRootCaCert(),
+                        profile.getUserCert(),
+                        profile.getRsaPrivateKey());
+                break;
+            default:
+                throw new IllegalArgumentException("Unknown auth method set");
+        }
+    }
+
+    private static List<IkeSaProposal> getIkeSaProposals() {
+        // TODO: filter this based on allowedAlgorithms
+        final List<IkeSaProposal> proposals = new ArrayList<>();
+
+        // Encryption Algorithms: Currently only AES_CBC is supported.
+        final IkeSaProposal.Builder normalModeBuilder = new IkeSaProposal.Builder();
+
+        // Currently only AES_CBC is supported.
+        normalModeBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_CBC, KEY_LEN_AES_256);
+        normalModeBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_CBC, KEY_LEN_AES_192);
+        normalModeBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_CBC, KEY_LEN_AES_128);
+
+        // Authentication/Integrity Algorithms
+        normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_512_256);
+        normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_384_192);
+        normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_256_128);
+        normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_AES_XCBC_96);
+        normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA1_96);
+
+        // Add AEAD options
+        final IkeSaProposal.Builder aeadBuilder = new IkeSaProposal.Builder();
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_16, KEY_LEN_AES_256);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_12, KEY_LEN_AES_256);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_8, KEY_LEN_AES_256);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_16, KEY_LEN_AES_192);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_12, KEY_LEN_AES_192);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_8, KEY_LEN_AES_192);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_16, KEY_LEN_AES_128);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_12, KEY_LEN_AES_128);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_8, KEY_LEN_AES_128);
+
+        // Add dh, prf for both builders
+        for (final IkeSaProposal.Builder builder : Arrays.asList(normalModeBuilder, aeadBuilder)) {
+            builder.addDhGroup(DH_GROUP_2048_BIT_MODP);
+            builder.addDhGroup(DH_GROUP_1024_BIT_MODP);
+            builder.addPseudorandomFunction(PSEUDORANDOM_FUNCTION_AES128_XCBC);
+            builder.addPseudorandomFunction(PSEUDORANDOM_FUNCTION_HMAC_SHA1);
+        }
+
+        proposals.add(normalModeBuilder.build());
+        proposals.add(aeadBuilder.build());
+        return proposals;
+    }
+
+    private static List<ChildSaProposal> getChildSaProposals() {
+        // TODO: filter this based on allowedAlgorithms
+        final List<ChildSaProposal> proposals = new ArrayList<>();
+
+        // Add non-AEAD options
+        final ChildSaProposal.Builder normalModeBuilder = new ChildSaProposal.Builder();
+
+        // Encryption Algorithms: Currently only AES_CBC is supported.
+        normalModeBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_CBC, KEY_LEN_AES_256);
+        normalModeBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_CBC, KEY_LEN_AES_192);
+        normalModeBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_CBC, KEY_LEN_AES_128);
+
+        // Authentication/Integrity Algorithms
+        normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_512_256);
+        normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_384_192);
+        normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_256_128);
+        normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA1_96);
+
+        // Add AEAD options
+        final ChildSaProposal.Builder aeadBuilder = new ChildSaProposal.Builder();
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_16, KEY_LEN_AES_256);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_12, KEY_LEN_AES_256);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_8, KEY_LEN_AES_256);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_16, KEY_LEN_AES_192);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_12, KEY_LEN_AES_192);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_8, KEY_LEN_AES_192);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_16, KEY_LEN_AES_128);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_12, KEY_LEN_AES_128);
+        aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_8, KEY_LEN_AES_128);
+
+        proposals.add(normalModeBuilder.build());
+        proposals.add(aeadBuilder.build());
+        return proposals;
+    }
+
+    static class IkeSessionCallbackImpl implements IkeSessionCallback {
+        private final String mTag;
+        private final Vpn.IkeV2VpnRunnerCallback mCallback;
+        private final Network mNetwork;
+
+        IkeSessionCallbackImpl(String tag, Vpn.IkeV2VpnRunnerCallback callback, Network network) {
+            mTag = tag;
+            mCallback = callback;
+            mNetwork = network;
+        }
+
+        @Override
+        public void onOpened(@NonNull IkeSessionConfiguration ikeSessionConfig) {
+            Log.d(mTag, "IkeOpened for network " + mNetwork);
+            // Nothing to do here.
+        }
+
+        @Override
+        public void onClosed() {
+            Log.d(mTag, "IkeClosed for network " + mNetwork);
+            mCallback.onSessionLost(mNetwork); // Server requested session closure. Retry?
+        }
+
+        @Override
+        public void onClosedExceptionally(@NonNull IkeException exception) {
+            Log.d(mTag, "IkeClosedExceptionally for network " + mNetwork, exception);
+            mCallback.onSessionLost(mNetwork);
+        }
+
+        @Override
+        public void onError(@NonNull IkeProtocolException exception) {
+            Log.d(mTag, "IkeError for network " + mNetwork, exception);
+            // Non-fatal, log and continue.
+        }
+    }
+
+    static class ChildSessionCallbackImpl implements ChildSessionCallback {
+        private final String mTag;
+        private final Vpn.IkeV2VpnRunnerCallback mCallback;
+        private final Network mNetwork;
+
+        ChildSessionCallbackImpl(String tag, Vpn.IkeV2VpnRunnerCallback callback, Network network) {
+            mTag = tag;
+            mCallback = callback;
+            mNetwork = network;
+        }
+
+        @Override
+        public void onOpened(@NonNull ChildSessionConfiguration childConfig) {
+            Log.d(mTag, "ChildOpened for network " + mNetwork);
+            mCallback.onChildOpened(mNetwork, childConfig);
+        }
+
+        @Override
+        public void onClosed() {
+            Log.d(mTag, "ChildClosed for network " + mNetwork);
+            mCallback.onSessionLost(mNetwork);
+        }
+
+        @Override
+        public void onClosedExceptionally(@NonNull IkeException exception) {
+            Log.d(mTag, "ChildClosedExceptionally for network " + mNetwork, exception);
+            mCallback.onSessionLost(mNetwork);
+        }
+
+        @Override
+        public void onIpSecTransformCreated(@NonNull IpSecTransform transform, int direction) {
+            Log.d(mTag, "ChildTransformCreated; Direction: " + direction + "; network " + mNetwork);
+            mCallback.onChildTransformCreated(mNetwork, transform, direction);
+        }
+
+        @Override
+        public void onIpSecTransformDeleted(@NonNull IpSecTransform transform, int direction) {
+            // Nothing to be done; no references to the IpSecTransform are held by the
+            // Ikev2VpnRunner (or this callback class), and this transform will be closed by the
+            // IKE library.
+            Log.d(mTag,
+                    "ChildTransformDeleted; Direction: " + direction + "; for network " + mNetwork);
+        }
+    }
+
+    static class Ikev2VpnNetworkCallback extends NetworkCallback {
+        private final String mTag;
+        private final Vpn.IkeV2VpnRunnerCallback mCallback;
+
+        Ikev2VpnNetworkCallback(String tag, Vpn.IkeV2VpnRunnerCallback callback) {
+            mTag = tag;
+            mCallback = callback;
+        }
+
+        @Override
+        public void onAvailable(@NonNull Network network) {
+            Log.d(mTag, "Starting IKEv2/IPsec session on new network: " + network);
+            mCallback.onDefaultNetworkChanged(network);
+        }
+
+        @Override
+        public void onLost(@NonNull Network network) {
+            Log.d(mTag, "Tearing down; lost network: " + network);
+            mCallback.onSessionLost(network);
+        }
+    }
+
+    /**
+     * Identity parsing logic using similar logic to open source implementations of IKEv2
+     *
+     * <p>This method does NOT support using type-prefixes (eg 'fqdn:' or 'keyid'), or ASN.1 encoded
+     * identities.
+     */
+    private static IkeIdentification parseIkeIdentification(@NonNull String identityStr) {
+        // TODO: Add identity formatting to public API javadocs.
+        if (identityStr.contains("@")) {
+            if (identityStr.startsWith("@#")) {
+                // KEY_ID
+                final String hexStr = identityStr.substring(2);
+                return new IkeKeyIdIdentification(HexDump.hexStringToByteArray(hexStr));
+            } else if (identityStr.startsWith("@@")) {
+                // RFC822 (USER_FQDN)
+                return new IkeRfc822AddrIdentification(identityStr.substring(2));
+            } else if (identityStr.startsWith("@")) {
+                // FQDN
+                return new IkeFqdnIdentification(identityStr.substring(1));
+            } else {
+                // RFC822 (USER_FQDN)
+                return new IkeRfc822AddrIdentification(identityStr);
+            }
+        } else if (InetAddresses.isNumericAddress(identityStr)) {
+            final InetAddress addr = InetAddresses.parseNumericAddress(identityStr);
+            if (addr instanceof Inet4Address) {
+                // IPv4
+                return new IkeIpv4AddrIdentification((Inet4Address) addr);
+            } else if (addr instanceof Inet6Address) {
+                // IPv6
+                return new IkeIpv6AddrIdentification((Inet6Address) addr);
+            } else {
+                throw new IllegalArgumentException("IP version not supported");
+            }
+        } else {
+            if (identityStr.contains(":")) {
+                // KEY_ID
+                return new IkeKeyIdIdentification(identityStr.getBytes());
+            } else {
+                // FQDN
+                return new IkeFqdnIdentification(identityStr);
+            }
+        }
+    }
+
+    static Collection<RouteInfo> getRoutesFromTrafficSelectors(
+            List<IkeTrafficSelector> trafficSelectors) {
+        final HashSet<RouteInfo> routes = new HashSet<>();
+
+        for (final IkeTrafficSelector selector : trafficSelectors) {
+            for (final IpPrefix prefix :
+                    new IpRange(selector.startingAddress, selector.endingAddress).asIpPrefixes()) {
+                routes.add(new RouteInfo(prefix, null));
+            }
+        }
+
+        return routes;
+    }
+}
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index 6d130d9..4a1afb2 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -1216,7 +1216,7 @@
         for (SyncOperation op: ops) {
             if (op.isPeriodic && op.target.matchesSpec(target)) {
                 periodicSyncs.add(new PeriodicSync(op.target.account, op.target.provider,
-                        op.extras, op.periodMillis / 1000, op.flexMillis / 1000));
+                        op.getClonedExtras(), op.periodMillis / 1000, op.flexMillis / 1000));
             }
         }
 
@@ -1478,7 +1478,7 @@
             Slog.e(TAG, "Can't schedule null sync operation.");
             return;
         }
-        if (!syncOperation.ignoreBackoff()) {
+        if (!syncOperation.hasIgnoreBackoff()) {
             Pair<Long, Long> backoff = mSyncStorageEngine.getBackoff(syncOperation.target);
             if (backoff == null) {
                 Slog.e(TAG, "Couldn't find backoff values for "
@@ -1631,7 +1631,7 @@
             getSyncStorageEngine().markPending(syncOperation.target, true);
         }
 
-        if (syncOperation.extras.getBoolean(ContentResolver.SYNC_EXTRAS_REQUIRE_CHARGING)) {
+        if (syncOperation.hasRequireCharging()) {
             b.setRequiresCharging(true);
         }
 
@@ -1686,7 +1686,7 @@
         List<SyncOperation> ops = getAllPendingSyncs();
         for (SyncOperation op: ops) {
             if (!op.isPeriodic && op.target.matchesSpec(info)
-                    && syncExtrasEquals(extras, op.extras, false)) {
+                    && op.areExtrasEqual(extras, /*includeSyncSettings=*/ false)) {
                 cancelJob(op, "cancelScheduledSyncOperation");
             }
         }
@@ -1704,15 +1704,9 @@
             Log.d(TAG, "encountered error(s) during the sync: " + syncResult + ", " + operation);
         }
 
-        // The SYNC_EXTRAS_IGNORE_BACKOFF only applies to the first attempt to sync a given
-        // request. Retries of the request will always honor the backoff, so clear the
-        // flag in case we retry this request.
-        if (operation.extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, false)) {
-            operation.extras.remove(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF);
-        }
+        operation.enableBackoff();
 
-        if (operation.extras.getBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false)
-                && !syncResult.syncAlreadyInProgress) {
+        if (operation.hasDoNotRetry() && !syncResult.syncAlreadyInProgress) {
             // syncAlreadyInProgress flag is set by AbstractThreadedSyncAdapter. The sync adapter
             // has no way of knowing that a sync error occured. So we DO retry if the error is
             // syncAlreadyInProgress.
@@ -1720,10 +1714,9 @@
                 Log.d(TAG, "not retrying sync operation because SYNC_EXTRAS_DO_NOT_RETRY was specified "
                         + operation);
             }
-        } else if (operation.extras.getBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, false)
-                && !syncResult.syncAlreadyInProgress) {
+        } else if (operation.isUpload() && !syncResult.syncAlreadyInProgress) {
             // If this was an upward sync then schedule a two-way sync immediately.
-            operation.extras.remove(ContentResolver.SYNC_EXTRAS_UPLOAD);
+            operation.enableTwoWaySync();
             if (isLoggable) {
                 Log.d(TAG, "retrying sync operation as a two-way sync because an upload-only sync "
                         + "encountered an error: " + operation);
@@ -3326,7 +3319,7 @@
             List<SyncOperation> ops = getAllPendingSyncs();
             for (SyncOperation op: ops) {
                 if (op.isPeriodic && op.target.matchesSpec(target)
-                        && syncExtrasEquals(op.extras, extras, true /* includeSyncSettings */)) {
+                        && op.areExtrasEqual(extras, /*includeSyncSettings=*/ true)) {
                     maybeUpdateSyncPeriodH(op, pollFrequencyMillis, flexMillis);
                     return;
                 }
@@ -3408,7 +3401,7 @@
             List<SyncOperation> ops = getAllPendingSyncs();
             for (SyncOperation op: ops) {
                 if (op.isPeriodic && op.target.matchesSpec(target)
-                        && syncExtrasEquals(op.extras, extras, true /* includeSyncSettings */)) {
+                        && op.areExtrasEqual(extras, /*includeSyncSettings=*/ true)) {
                     removePeriodicSyncInternalH(op, why);
                 }
             }
@@ -3559,16 +3552,18 @@
                 activeSyncContext.mIsLinkedToDeath = true;
                 syncAdapter.linkToDeath(activeSyncContext, 0);
 
-                mLogger.log("Sync start: account=" + syncOperation.target.account,
-                        " authority=", syncOperation.target.provider,
-                        " reason=", SyncOperation.reasonToString(null, syncOperation.reason),
-                        " extras=", SyncOperation.extrasToString(syncOperation.extras),
-                        " adapter=", activeSyncContext.mSyncAdapter);
+                if (mLogger.enabled()) {
+                    mLogger.log("Sync start: account=" + syncOperation.target.account,
+                            " authority=", syncOperation.target.provider,
+                            " reason=", SyncOperation.reasonToString(null, syncOperation.reason),
+                            " extras=", syncOperation.getExtrasAsString(),
+                            " adapter=", activeSyncContext.mSyncAdapter);
+                }
 
                 activeSyncContext.mSyncAdapter = ISyncAdapter.Stub.asInterface(syncAdapter);
                 activeSyncContext.mSyncAdapter
                         .startSync(activeSyncContext, syncOperation.target.provider,
-                                syncOperation.target.account, syncOperation.extras);
+                                syncOperation.target.account, syncOperation.getClonedExtras());
 
                 mLogger.log("Sync is running now...");
             } catch (RemoteException remoteExc) {
@@ -3602,9 +3597,8 @@
                         continue;
                     }
                     if (extras != null &&
-                            !syncExtrasEquals(activeSyncContext.mSyncOperation.extras,
-                                    extras,
-                                    false /* no config settings */)) {
+                            !activeSyncContext.mSyncOperation.areExtrasEqual(extras,
+                                    /*includeSyncSettings=*/ false)) {
                         continue;
                     }
                     SyncJobService.callJobFinished(activeSyncContext.mSyncOperation.jobId, false,
diff --git a/services/core/java/com/android/server/content/SyncOperation.java b/services/core/java/com/android/server/content/SyncOperation.java
index 2abc2e6..09b7828 100644
--- a/services/core/java/com/android/server/content/SyncOperation.java
+++ b/services/core/java/com/android/server/content/SyncOperation.java
@@ -74,7 +74,14 @@
     /** Where this sync was initiated. */
     public final int syncSource;
     public final boolean allowParallelSyncs;
-    public final Bundle extras;
+
+    /**
+     * Sync extras. Note, DO NOT modify this bundle directly. When changing the content, always
+     * create a copy, update it, set it in this field. This is to avoid concurrent modifications
+     * when other threads are reading it.
+     */
+    private volatile Bundle mImmutableExtras;
+
     public final boolean isPeriodic;
     /** jobId of the periodic SyncOperation that initiated this one */
     public final int sourcePeriodicId;
@@ -118,20 +125,21 @@
 
     public SyncOperation(SyncOperation op, long periodMillis, long flexMillis) {
         this(op.target, op.owningUid, op.owningPackage, op.reason, op.syncSource,
-                new Bundle(op.extras), op.allowParallelSyncs, op.isPeriodic, op.sourcePeriodicId,
+                op.mImmutableExtras, op.allowParallelSyncs, op.isPeriodic, op.sourcePeriodicId,
                 periodMillis, flexMillis, ContentResolver.SYNC_EXEMPTION_NONE);
     }
 
     public SyncOperation(SyncStorageEngine.EndPoint info, int owningUid, String owningPackage,
-                         int reason, int source, Bundle extras, boolean allowParallelSyncs,
-                         boolean isPeriodic, int sourcePeriodicId, long periodMillis,
-                         long flexMillis, @SyncExemption int syncExemptionFlag) {
+            int reason, int source, Bundle extras,
+            boolean allowParallelSyncs,
+            boolean isPeriodic, int sourcePeriodicId, long periodMillis,
+            long flexMillis, @SyncExemption int syncExemptionFlag) {
         this.target = info;
         this.owningUid = owningUid;
         this.owningPackage = owningPackage;
         this.reason = reason;
         this.syncSource = source;
-        this.extras = new Bundle(extras);
+        this.mImmutableExtras = new Bundle(extras);
         this.allowParallelSyncs = allowParallelSyncs;
         this.isPeriodic = isPeriodic;
         this.sourcePeriodicId = sourcePeriodicId;
@@ -148,7 +156,7 @@
             return null;
         }
         SyncOperation op = new SyncOperation(target, owningUid, owningPackage, reason, syncSource,
-                new Bundle(extras), allowParallelSyncs, false, jobId /* sourcePeriodicId */,
+                mImmutableExtras, allowParallelSyncs, false, jobId /* sourcePeriodicId */,
                 periodMillis, flexMillis, ContentResolver.SYNC_EXEMPTION_NONE);
         return op;
     }
@@ -160,7 +168,10 @@
         reason = other.reason;
         syncSource = other.syncSource;
         allowParallelSyncs = other.allowParallelSyncs;
-        extras = new Bundle(other.extras);
+
+        // Since we treat this field as immutable, it's okay to use a shallow copy here.
+        // No need to create a copy.
+        mImmutableExtras = other.mImmutableExtras;
         wakeLockName = other.wakeLockName();
         isPeriodic = other.isPeriodic;
         sourcePeriodicId = other.sourcePeriodicId;
@@ -173,7 +184,8 @@
     /**
      * All fields are stored in a corresponding key in the persistable bundle.
      *
-     * {@link #extras} is a Bundle and can contain parcelable objects. But only the type Account
+     * {@link #mImmutableExtras} is a Bundle and can contain parcelable objects.
+     * But only the type Account
      * is allowed {@link ContentResolver#validateSyncExtrasBundle(Bundle)} that can't be stored in
      * a PersistableBundle. For every value of type Account with key 'key', we store a
      * PersistableBundle containing account information at key 'ACCOUNT:key'. The Account object
@@ -188,7 +200,9 @@
         PersistableBundle jobInfoExtras = new PersistableBundle();
 
         PersistableBundle syncExtrasBundle = new PersistableBundle();
-        for (String key: extras.keySet()) {
+
+        final Bundle extras = mImmutableExtras;
+        for (String key : extras.keySet()) {
             Object value = extras.get(key);
             if (value instanceof Account) {
                 Account account = (Account) value;
@@ -327,7 +341,7 @@
 
     boolean matchesPeriodicOperation(SyncOperation other) {
         return target.matchesSpec(other.target)
-                && SyncManager.syncExtrasEquals(extras, other.extras, true)
+                && SyncManager.syncExtrasEquals(mImmutableExtras, other.mImmutableExtras, true)
                 && periodMillis == other.periodMillis && flexMillis == other.flexMillis;
     }
 
@@ -345,6 +359,7 @@
     }
 
     private String toKey() {
+        final Bundle extras = mImmutableExtras;
         StringBuilder sb = new StringBuilder();
         sb.append("provider: ").append(target.provider);
         sb.append(" account {name=" + target.account.name
@@ -372,6 +387,7 @@
 
     String dump(PackageManager pm, boolean shorter, SyncAdapterStateFetcher appStates,
             boolean logSafe) {
+        final Bundle extras = mImmutableExtras;
         StringBuilder sb = new StringBuilder();
         sb.append("JobId=").append(jobId)
                 .append(" ")
@@ -468,33 +484,67 @@
     }
 
     boolean isInitialization() {
-        return extras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, false);
+        return mImmutableExtras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, false);
     }
 
     boolean isExpedited() {
-        return extras.getBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false);
+        return mImmutableExtras.getBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false);
     }
 
-    boolean ignoreBackoff() {
-        return extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, false);
+    boolean isUpload() {
+        return mImmutableExtras.getBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, false);
+    }
+
+    /**
+     * Disable SYNC_EXTRAS_UPLOAD, so it will be a two-way (normal) sync.
+     */
+    void enableTwoWaySync() {
+        removeExtra(ContentResolver.SYNC_EXTRAS_UPLOAD);
+    }
+
+    boolean hasIgnoreBackoff() {
+        return mImmutableExtras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, false);
+    }
+
+    /**
+     * Disable SYNC_EXTRAS_IGNORE_BACKOFF.
+     *
+     * The SYNC_EXTRAS_IGNORE_BACKOFF only applies to the first attempt to sync a given
+     * request. Retries of the request will always honor the backoff, so clear the
+     * flag in case we retry this request.
+     */
+    void enableBackoff() {
+        removeExtra(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF);
+    }
+
+    boolean hasDoNotRetry() {
+        return mImmutableExtras.getBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false);
     }
 
     boolean isNotAllowedOnMetered() {
-        return extras.getBoolean(ContentResolver.SYNC_EXTRAS_DISALLOW_METERED, false);
+        return mImmutableExtras.getBoolean(ContentResolver.SYNC_EXTRAS_DISALLOW_METERED, false);
     }
 
     boolean isManual() {
-        return extras.getBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false);
+        return mImmutableExtras.getBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false);
     }
 
     boolean isIgnoreSettings() {
-        return extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, false);
+        return mImmutableExtras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, false);
+    }
+
+    boolean hasRequireCharging() {
+        return mImmutableExtras.getBoolean(ContentResolver.SYNC_EXTRAS_REQUIRE_CHARGING, false);
     }
 
     boolean isAppStandbyExempted() {
         return syncExemptionFlag != ContentResolver.SYNC_EXEMPTION_NONE;
     }
 
+    boolean areExtrasEqual(Bundle other, boolean includeSyncSettings) {
+        return SyncManager.syncExtrasEquals(mImmutableExtras, other, includeSyncSettings);
+    }
+
     static void extrasToStringBuilder(Bundle bundle, StringBuilder sb) {
         if (bundle == null) {
             sb.append("null");
@@ -507,7 +557,7 @@
         sb.append("]");
     }
 
-    static String extrasToString(Bundle bundle) {
+    private static String extrasToString(Bundle bundle) {
         final StringBuilder sb = new StringBuilder();
         extrasToStringBuilder(bundle, sb);
         return sb.toString();
@@ -531,4 +581,25 @@
         logArray[3] = target.account.name.hashCode();
         return logArray;
     }
+
+    /**
+     * Removes a sync extra. Note do not call it from multiple threads simultaneously.
+     */
+    private void removeExtra(String key) {
+        final Bundle b = mImmutableExtras;
+        if (!b.containsKey(key)) {
+            return;
+        }
+        final Bundle clone = new Bundle(b);
+        clone.remove(key);
+        mImmutableExtras = clone;
+    }
+
+    public Bundle getClonedExtras() {
+        return new Bundle(mImmutableExtras);
+    }
+
+    public String getExtrasAsString() {
+        return extrasToString(mImmutableExtras);
+    }
 }
diff --git a/services/core/java/com/android/server/content/SyncStorageEngine.java b/services/core/java/com/android/server/content/SyncStorageEngine.java
index dea47db..8c510b7 100644
--- a/services/core/java/com/android/server/content/SyncStorageEngine.java
+++ b/services/core/java/com/android/server/content/SyncStorageEngine.java
@@ -137,7 +137,7 @@
     /**
      * String names for the sync source types.
      *
-     * KEEP THIS AND {@link SyncStatusInfo#SOURCE_COUNT} IN SYNC.
+     * KEEP THIS AND {@link SyncStatusInfo}.SOURCE_COUNT IN SYNC.
      */
     public static final String[] SOURCES = {
             "OTHER",
@@ -1117,7 +1117,7 @@
                 Slog.v(TAG, "setActiveSync: account="
                         + " auth=" + activeSyncContext.mSyncOperation.target
                         + " src=" + activeSyncContext.mSyncOperation.syncSource
-                        + " extras=" + activeSyncContext.mSyncOperation.extras);
+                        + " extras=" + activeSyncContext.mSyncOperation.getExtrasAsString());
             }
             final EndPoint info = activeSyncContext.mSyncOperation.target;
             AuthorityInfo authorityInfo = getOrCreateAuthorityLocked(
@@ -1179,7 +1179,7 @@
             item.eventTime = now;
             item.source = op.syncSource;
             item.reason = op.reason;
-            item.extras = op.extras;
+            item.extras = op.getClonedExtras();
             item.event = EVENT_START;
             item.syncExemptionFlag = op.syncExemptionFlag;
             mSyncHistory.add(0, item);
@@ -1738,7 +1738,7 @@
 
     /**
      * Ensure the old pending.bin is deleted, as it has been changed to pending.xml.
-     * pending.xml was used starting in KLP.
+     * pending.xml was used starting in KitKat.
      * @param syncDir directory where the sync files are located.
      */
     private void maybeDeleteLegacyPendingInfoLocked(File syncDir) {
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
index c99774a..6178e6c 100644
--- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java
+++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
@@ -21,6 +21,7 @@
 import android.app.ActivityTaskManager;
 import android.app.IActivityTaskManager;
 import android.app.TaskStackListener;
+import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.hardware.Sensor;
@@ -41,6 +42,7 @@
 import android.util.Slog;
 import android.util.TimeUtils;
 
+import com.android.internal.BrightnessSynchronizer;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.BackgroundThread;
 import com.android.server.EventLogTags;
@@ -89,6 +91,8 @@
     // The minimum and maximum screen brightnesses.
     private final int mScreenBrightnessRangeMinimum;
     private final int mScreenBrightnessRangeMaximum;
+    private final float mScreenBrightnessRangeMinimumFloat;
+    private final float mScreenBrightnessRangeMaximumFloat;
 
     // How much to scale doze brightness by (should be (0, 1.0]).
     private final float mDozeScaleFactor;
@@ -174,7 +178,7 @@
     // that we can quickly revert to the previous auto-brightness level
     // while the light sensor warms up.
     // Use -1 if there is no current auto-brightness value available.
-    private int mScreenAutoBrightness = -1;
+    private int mScreenAutoBrightness = PowerManager.BRIGHTNESS_INVALID;
 
     // The current display policy. This is useful, for example,  for knowing when we're dozing,
     // where the light sensor may not be available.
@@ -204,39 +208,44 @@
     private TaskStackListenerImpl mTaskStackListener;
     private IActivityTaskManager mActivityTaskManager;
     private PackageManager mPackageManager;
+    private Context mContext;
 
     private final Injector mInjector;
 
     AutomaticBrightnessController(Callbacks callbacks, Looper looper,
             SensorManager sensorManager, Sensor lightSensor, BrightnessMappingStrategy mapper,
-            int lightSensorWarmUpTime, int brightnessMin, int brightnessMax, float dozeScaleFactor,
-            int lightSensorRate, int initialLightSensorRate, long brighteningLightDebounceConfig,
-            long darkeningLightDebounceConfig, boolean resetAmbientLuxAfterWarmUpConfig,
-            HysteresisLevels ambientBrightnessThresholds,
-            HysteresisLevels screenBrightnessThresholds,
-            PackageManager packageManager) {
+            int lightSensorWarmUpTime, float brightnessMin, float brightnessMax,
+            float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate,
+            long brighteningLightDebounceConfig, long darkeningLightDebounceConfig,
+            boolean resetAmbientLuxAfterWarmUpConfig, HysteresisLevels ambientBrightnessThresholds,
+            HysteresisLevels screenBrightnessThresholds, Context context) {
         this(new Injector(), callbacks, looper, sensorManager, lightSensor, mapper,
                 lightSensorWarmUpTime, brightnessMin, brightnessMax, dozeScaleFactor,
                 lightSensorRate, initialLightSensorRate, brighteningLightDebounceConfig,
                 darkeningLightDebounceConfig, resetAmbientLuxAfterWarmUpConfig,
-                ambientBrightnessThresholds, screenBrightnessThresholds, packageManager);
+                ambientBrightnessThresholds, screenBrightnessThresholds, context);
     }
 
     @VisibleForTesting
     AutomaticBrightnessController(Injector injector, Callbacks callbacks, Looper looper,
             SensorManager sensorManager, Sensor lightSensor, BrightnessMappingStrategy mapper,
-            int lightSensorWarmUpTime, int brightnessMin, int brightnessMax, float dozeScaleFactor,
-            int lightSensorRate, int initialLightSensorRate, long brighteningLightDebounceConfig,
-            long darkeningLightDebounceConfig, boolean resetAmbientLuxAfterWarmUpConfig,
-            HysteresisLevels ambientBrightnessThresholds,
-            HysteresisLevels screenBrightnessThresholds,
-            PackageManager packageManager) {
+            int lightSensorWarmUpTime, float brightnessMin, float brightnessMax,
+            float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate,
+            long brighteningLightDebounceConfig, long darkeningLightDebounceConfig,
+            boolean resetAmbientLuxAfterWarmUpConfig, HysteresisLevels ambientBrightnessThresholds,
+            HysteresisLevels screenBrightnessThresholds, Context context) {
         mInjector = injector;
+        mContext = context;
         mCallbacks = callbacks;
         mSensorManager = sensorManager;
         mBrightnessMapper = mapper;
-        mScreenBrightnessRangeMinimum = brightnessMin;
-        mScreenBrightnessRangeMaximum = brightnessMax;
+        mScreenBrightnessRangeMinimum =
+                BrightnessSynchronizer.brightnessFloatToInt(mContext, brightnessMin);
+        mScreenBrightnessRangeMaximum =
+                com.android.internal.BrightnessSynchronizer.brightnessFloatToInt(
+                        mContext, brightnessMax);
+        mScreenBrightnessRangeMinimumFloat = brightnessMin;
+        mScreenBrightnessRangeMaximumFloat = brightnessMax;
         mLightSensorWarmUpTimeConfig = lightSensorWarmUpTime;
         mDozeScaleFactor = dozeScaleFactor;
         mNormalLightSensorRate = lightSensorRate;
@@ -261,7 +270,7 @@
         }
 
         mActivityTaskManager = ActivityTaskManager.getService();
-        mPackageManager = packageManager;
+        mPackageManager = mContext.getPackageManager();
         mTaskStackListener = new TaskStackListenerImpl();
         mForegroundAppPackageName = null;
         mPendingForegroundAppPackageName = null;
@@ -291,7 +300,7 @@
             return -1;
         }
         if (mDisplayPolicy == DisplayPowerRequest.POLICY_DOZE) {
-            return (int) (mScreenAutoBrightness * mDozeScaleFactor);
+            return Math.round(mScreenAutoBrightness * mDozeScaleFactor);
         }
         return mScreenAutoBrightness;
     }
@@ -473,7 +482,7 @@
         } else if (mLightSensorEnabled) {
             mLightSensorEnabled = false;
             mAmbientLuxValid = !mResetAmbientLuxAfterWarmUpConfig;
-            mScreenAutoBrightness = -1;
+            mScreenAutoBrightness = PowerManager.BRIGHTNESS_INVALID;
             mRecentLightSamples = 0;
             mAmbientLightRingBuffer.clear();
             mCurrentLightSensorRate = -1;
@@ -722,10 +731,8 @@
 
         float value = mBrightnessMapper.getBrightness(mAmbientLux, mForegroundAppPackageName,
                 mForegroundAppCategory);
-
-        int newScreenAutoBrightness = Math.round(clampScreenBrightness(
-                value * PowerManager.BRIGHTNESS_ON));
-
+        int newScreenAutoBrightness = BrightnessSynchronizer.brightnessFloatToInt(
+                mContext, clampScreenBrightnessFloat(value));
         // If screenAutoBrightness is set, we should have screen{Brightening,Darkening}Threshold,
         // in which case we ignore the new screen brightness if it doesn't differ enough from the
         // previous one.
@@ -759,11 +766,19 @@
         }
     }
 
+    // Clamps values with float range [1.0-255.0]
+    // TODO(brightnessfloat): convert everything that uses this to float system
     private float clampScreenBrightness(float value) {
         return MathUtils.constrain(value,
                 mScreenBrightnessRangeMinimum, mScreenBrightnessRangeMaximum);
     }
 
+    // Clamps values with float range [0.0-1.0]
+    private float clampScreenBrightnessFloat(float value) {
+        return MathUtils.constrain(value,
+                mScreenBrightnessRangeMinimumFloat, mScreenBrightnessRangeMaximumFloat);
+    }
+
     private void prepareBrightnessAdjustmentSample() {
         if (!mBrightnessAdjustmentSamplePending) {
             mBrightnessAdjustmentSamplePending = true;
diff --git a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
index 6ff2767..a099606 100644
--- a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
+++ b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
@@ -28,6 +28,7 @@
 import android.util.Slog;
 import android.util.Spline;
 
+import com.android.internal.BrightnessSynchronizer;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.Preconditions;
 import com.android.server.display.utils.Plog;
@@ -342,9 +343,9 @@
     }
 
     protected static float normalizeAbsoluteBrightness(int brightness) {
-        brightness = MathUtils.constrain(brightness,
-                PowerManager.BRIGHTNESS_OFF, PowerManager.BRIGHTNESS_ON);
-        return (float) brightness / PowerManager.BRIGHTNESS_ON;
+        return BrightnessSynchronizer.brightnessIntToFloat(brightness,
+                PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON,
+                PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX);
     }
 
     private Pair<float[], float[]> insertControlPoint(
diff --git a/services/core/java/com/android/server/display/DisplayBlanker.java b/services/core/java/com/android/server/display/DisplayBlanker.java
index 816dc13..d294898 100644
--- a/services/core/java/com/android/server/display/DisplayBlanker.java
+++ b/services/core/java/com/android/server/display/DisplayBlanker.java
@@ -20,5 +20,5 @@
  * Interface used to update the actual display state.
  */
 public interface DisplayBlanker {
-    void requestDisplayState(int state, int brightness);
+    void requestDisplayState(int state, float brightness);
 }
diff --git a/services/core/java/com/android/server/display/DisplayDevice.java b/services/core/java/com/android/server/display/DisplayDevice.java
index e69a3b8b..63a8d7c 100644
--- a/services/core/java/com/android/server/display/DisplayDevice.java
+++ b/services/core/java/com/android/server/display/DisplayDevice.java
@@ -129,11 +129,11 @@
      * Sets the display state, if supported.
      *
      * @param state The new display state.
-     * @param brightness The new display brightness.
+     * @param brightnessState The new display brightnessState.
      * @return A runnable containing work to be deferred until after we have
      * exited the critical section, or null if none.
      */
-    public Runnable requestDisplayStateLocked(int state, int brightness) {
+    public Runnable requestDisplayStateLocked(int state, float brightnessState) {
         return null;
     }
 
diff --git a/services/core/java/com/android/server/display/DisplayDeviceInfo.java b/services/core/java/com/android/server/display/DisplayDeviceInfo.java
index ac41434..18adc0b 100644
--- a/services/core/java/com/android/server/display/DisplayDeviceInfo.java
+++ b/services/core/java/com/android/server/display/DisplayDeviceInfo.java
@@ -16,6 +16,7 @@
 
 package com.android.server.display;
 
+import android.hardware.display.DeviceProductInfo;
 import android.hardware.display.DisplayViewport;
 import android.util.DisplayMetrics;
 import android.view.Display;
@@ -288,6 +289,13 @@
     public DisplayAddress address;
 
     /**
+     * Product-specific information about the display or the directly connected device on the
+     * display chain. For example, if the display is transitively connected, this field may contain
+     * product information about the intermediate device.
+     */
+    public DeviceProductInfo deviceProductInfo;
+
+    /**
      * Display state.
      */
     public int state = Display.STATE_ON;
@@ -360,6 +368,7 @@
                 || rotation != other.rotation
                 || type != other.type
                 || !Objects.equals(address, other.address)
+                || !Objects.equals(deviceProductInfo, other.deviceProductInfo)
                 || ownerUid != other.ownerUid
                 || !Objects.equals(ownerPackageName, other.ownerPackageName)) {
             diff |= DIFF_OTHER;
@@ -396,6 +405,7 @@
         rotation = other.rotation;
         type = other.type;
         address = other.address;
+        deviceProductInfo = other.deviceProductInfo;
         state = other.state;
         ownerUid = other.ownerUid;
         ownerPackageName = other.ownerPackageName;
@@ -429,6 +439,7 @@
         if (address != null) {
             sb.append(", address ").append(address);
         }
+        sb.append(", deviceProductInfo ").append(deviceProductInfo);
         sb.append(", state ").append(Display.stateToString(state));
         if (ownerUid != 0 || ownerPackageName != null) {
             sb.append(", owner ").append(ownerPackageName);
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 71ade62..1ff8a94 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -121,7 +121,7 @@
  * The display manager service relies on a collection of {@link DisplayAdapter} components,
  * for discovering and configuring physical display devices attached to the system.
  * There are separate display adapters for each manner that devices are attached:
- * one display adapter for built-in local displays, one for simulated non-functional
+ * one display adapter for physical displays, one for simulated non-functional
  * displays when the system is headless, one for simulated overlay displays used for
  * development, one for wifi displays, etc.
  * </p><p>
@@ -231,8 +231,8 @@
     private int mGlobalDisplayState = Display.STATE_ON;
 
     // The overall display brightness.
-    // For now, this only applies to the built-in display but we may split it up eventually.
-    private int mGlobalDisplayBrightness = PowerManager.BRIGHTNESS_DEFAULT;
+    // For now, this only applies to the default display but we may split it up eventually.
+    private float mGlobalDisplayBrightness;
 
     // Set to true when there are pending display changes that have yet to be applied
     // to the surface flinger state.
@@ -340,7 +340,8 @@
         mMinimumBrightnessSpline = Spline.createSpline(lux, nits);
 
         PowerManager pm = mContext.getSystemService(PowerManager.class);
-        mGlobalDisplayBrightness = pm.getDefaultScreenBrightnessSetting();
+        mGlobalDisplayBrightness = pm.getBrightnessConstraint(
+                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT);
         mCurrentUserId = UserHandle.USER_SYSTEM;
         ColorSpace[] colorSpaces = SurfaceControl.getCompositionColorSpaces();
         mWideColorSpace = colorSpaces[1];
@@ -539,16 +540,16 @@
         }
     }
 
-    private void requestGlobalDisplayStateInternal(int state, int brightness) {
+    private void requestGlobalDisplayStateInternal(int state, float brightnessState) {
         if (state == Display.STATE_UNKNOWN) {
             state = Display.STATE_ON;
         }
         if (state == Display.STATE_OFF) {
-            brightness = PowerManager.BRIGHTNESS_OFF;
-        } else if (brightness < 0) {
-            brightness = PowerManager.BRIGHTNESS_DEFAULT;
-        } else if (brightness > PowerManager.BRIGHTNESS_ON) {
-            brightness = PowerManager.BRIGHTNESS_ON;
+            brightnessState = PowerManager.BRIGHTNESS_OFF_FLOAT;
+        } else if (brightnessState < PowerManager.BRIGHTNESS_MIN || Float.isNaN(brightnessState)) {
+            brightnessState = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+        } else if (brightnessState > PowerManager.BRIGHTNESS_MAX) {
+            brightnessState = PowerManager.BRIGHTNESS_MAX;
         }
 
         synchronized (mTempDisplayStateWorkQueue) {
@@ -558,15 +559,15 @@
                 // may happen as a side-effect of displays changing state.
                 synchronized (mSyncRoot) {
                     if (mGlobalDisplayState == state
-                            && mGlobalDisplayBrightness == brightness) {
+                            && mGlobalDisplayBrightness == brightnessState) {
                         return; // no change
                     }
 
                     Trace.traceBegin(Trace.TRACE_TAG_POWER, "requestGlobalDisplayState("
                             + Display.stateToString(state)
-                            + ", brightness=" + brightness + ")");
+                            + ", brightness=" + brightnessState + ")");
                     mGlobalDisplayState = state;
-                    mGlobalDisplayBrightness = brightness;
+                    mGlobalDisplayBrightness = brightnessState;
                     applyGlobalDisplayStateLocked(mTempDisplayStateWorkQueue);
                 }
 
@@ -1023,7 +1024,8 @@
         // by the display power controller (if known).
         DisplayDeviceInfo info = device.getDisplayDeviceInfoLocked();
         if ((info.flags & DisplayDeviceInfo.FLAG_NEVER_BLANK) == 0) {
-            return device.requestDisplayStateLocked(mGlobalDisplayState, mGlobalDisplayBrightness);
+            return device.requestDisplayStateLocked(
+                    mGlobalDisplayState, mGlobalDisplayBrightness);
         }
         return null;
     }
@@ -2300,7 +2302,7 @@
         }
 
         @Override // Binder call
-        public void setTemporaryBrightness(int brightness) {
+        public void setTemporaryBrightness(float brightness) {
             mContext.enforceCallingOrSelfPermission(
                     Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS,
                     "Permission required to set the display's brightness");
@@ -2419,7 +2421,7 @@
             synchronized (mSyncRoot) {
                 DisplayBlanker blanker = new DisplayBlanker() {
                     @Override
-                    public void requestDisplayState(int state, int brightness) {
+                    public void requestDisplayState(int state, float brightness) {
                         // The order of operations is important for legacy reasons.
                         if (state == Display.STATE_OFF) {
                             requestGlobalDisplayStateInternal(state, brightness);
diff --git a/services/core/java/com/android/server/display/DisplayManagerShellCommand.java b/services/core/java/com/android/server/display/DisplayManagerShellCommand.java
index e87ad41..0c6c797 100644
--- a/services/core/java/com/android/server/display/DisplayManagerShellCommand.java
+++ b/services/core/java/com/android/server/display/DisplayManagerShellCommand.java
@@ -108,8 +108,8 @@
                 "Permission required to set the display's brightness");
         final long token = Binder.clearCallingIdentity();
         try {
-            Settings.System.putIntForUser(context.getContentResolver(),
-                    Settings.System.SCREEN_BRIGHTNESS, (int) (brightness * 255),
+            Settings.System.putFloatForUser(context.getContentResolver(),
+                    Settings.System.SCREEN_BRIGHTNESS_FLOAT, brightness,
                     UserHandle.USER_CURRENT);
         } finally {
             Binder.restoreCallingIdentity(token);
diff --git a/services/core/java/com/android/server/display/DisplayModeDirector.java b/services/core/java/com/android/server/display/DisplayModeDirector.java
index 96532f4..8bbeabf 100644
--- a/services/core/java/com/android/server/display/DisplayModeDirector.java
+++ b/services/core/java/com/android/server/display/DisplayModeDirector.java
@@ -946,9 +946,9 @@
      * {@link R.array#config_ambientThresholdsOfPeakRefreshRate}.
      */
     private class BrightnessObserver extends ContentObserver {
+        // TODO: brightnessfloat: change this to the float setting
         private final Uri mDisplayBrightnessSetting =
                 Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);
-
         private final static int LIGHT_SENSOR_RATE_MS = 250;
         private int[] mDisplayBrightnessThresholds;
         private int[] mAmbientBrightnessThresholds;
@@ -1174,7 +1174,7 @@
 
             return false;
         }
-
+        // TODO: brightnessfloat: make it use float not int
         private void onBrightnessChangedLocked() {
             int brightness = Settings.System.getInt(mContext.getContentResolver(),
                     Settings.System.SCREEN_BRIGHTNESS, -1);
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index f1655f0..197842e 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -51,6 +51,7 @@
 import android.util.TimeUtils;
 import android.view.Display;
 
+import com.android.internal.BrightnessSynchronizer;
 import com.android.internal.app.IBatteryStats;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -102,7 +103,8 @@
     private static final boolean USE_COLOR_FADE_ON_ANIMATION = false;
 
     // The minimum reduction in brightness when dimmed.
-    private static final int SCREEN_DIM_MINIMUM_REDUCTION = 10;
+    private static final float SCREEN_DIM_MINIMUM_REDUCTION_FLOAT = 0.04f;
+    private static final float SCREEN_ANIMATION_RATE_MINIMUM = 0.0f;
 
     private static final int COLOR_FADE_ON_ANIMATION_DURATION_MILLIS = 250;
     private static final int COLOR_FADE_OFF_ANIMATION_DURATION_MILLIS = 400;
@@ -169,28 +171,27 @@
     private Sensor mProximitySensor;
 
     // The doze screen brightness.
-    private final int mScreenBrightnessDozeConfig;
+    private final float mScreenBrightnessDozeConfig;
 
     // The dim screen brightness.
-    private final int mScreenBrightnessDimConfig;
+    private final float mScreenBrightnessDimConfig;
 
     // The minimum allowed brightness.
-    private final int mScreenBrightnessRangeMinimum;
+    private final float mScreenBrightnessRangeMinimum;
 
     // The maximum allowed brightness.
-    private final int mScreenBrightnessRangeMaximum;
+    private final float mScreenBrightnessRangeMaximum;
 
-    // The default screen brightness.
-    private final int mScreenBrightnessDefault;
+    private final float mScreenBrightnessDefault;
 
     // The minimum allowed brightness while in VR.
-    private final int mScreenBrightnessForVrRangeMinimum;
+    private final float mScreenBrightnessForVrRangeMinimum;
 
     // The maximum allowed brightness while in VR.
-    private final int mScreenBrightnessForVrRangeMaximum;
+    private final float mScreenBrightnessForVrRangeMaximum;
 
     // The default screen brightness for VR.
-    private final int mScreenBrightnessForVrDefault;
+    private final float mScreenBrightnessForVrDefault;
 
     // True if auto-brightness should be used.
     private boolean mUseSoftwareAutoBrightnessConfig;
@@ -317,8 +318,9 @@
     private BrightnessReason mBrightnessReasonTemp = new BrightnessReason();
 
     // Brightness animation ramp rates in brightness units per second
-    private final int mBrightnessRampRateFast;
-    private final int mBrightnessRampRateSlow;
+    private final float mBrightnessRampRateSlow = 0.2352941f;
+    private final float mBrightnessRampRateFast = 0.7058823f;
+
 
     // Whether or not to skip the initial brightness ramps into STATE_ON.
     private final boolean mSkipScreenOnBrightnessRamp;
@@ -333,7 +335,7 @@
     private int mSkipRampState = RAMP_STATE_SKIP_NONE;
 
     // The first autobrightness value set when entering RAMP_STATE_SKIP_INITIAL.
-    private int mInitialAutoBrightness;
+    private float mInitialAutoBrightness;
 
     // The controller for the automatic brightness level.
     private AutomaticBrightnessController mAutomaticBrightnessController;
@@ -348,24 +350,24 @@
 
     // The last brightness that was set by the user and not temporary. Set to -1 when a brightness
     // has yet to be recorded.
-    private int mLastUserSetScreenBrightness;
+    private float mLastUserSetScreenBrightness;
 
     // The screen brightenss setting has changed but not taken effect yet. If this is different
     // from the current screen brightness setting then this is coming from something other than us
     // and should be considered a user interaction.
-    private int mPendingScreenBrightnessSetting;
+    private float mPendingScreenBrightnessSetting;
 
     // The last observed screen brightness setting, either set by us or by the settings app on
     // behalf of the user.
-    private int mCurrentScreenBrightnessSetting;
+    private float mCurrentScreenBrightnessSetting;
 
     // The temporary screen brightness. Typically set when a user is interacting with the
-    // brightness slider but hasn't settled on a choice yet. Set to -1 when there's no temporary
-    // brightness set.
-    private int mTemporaryScreenBrightness;
+    // brightness slider but hasn't settled on a choice yet. Set to
+    // PowerManager.BRIGHNTESS_INVALID_FLOAT when there's no temporary brightness set.
+    private float mTemporaryScreenBrightness;
 
     // The current screen brightness while in VR mode.
-    private int mScreenBrightnessForVr;
+    private float mScreenBrightnessForVr;
 
     // The last auto brightness adjustment that was set by the user and not temporary. Set to
     // Float.NaN when an auto-brightness adjustment hasn't been recorded yet.
@@ -384,6 +386,8 @@
     private ObjectAnimator mColorFadeOffAnimator;
     private RampAnimator<DisplayPowerState> mScreenBrightnessRampAnimator;
 
+    private BrightnessSynchronizer mBrightnessSynchronizer;
+
     /**
      * Creates the display power controller.
      */
@@ -394,37 +398,39 @@
         mBrightnessTracker = new BrightnessTracker(context, null);
         mSettingsObserver = new SettingsObserver(mHandler);
         mCallbacks = callbacks;
-
+        mBrightnessSynchronizer = new BrightnessSynchronizer(context);
         mBatteryStats = BatteryStatsService.getService();
         mSensorManager = sensorManager;
         mWindowManagerPolicy = LocalServices.getService(WindowManagerPolicy.class);
         mBlanker = blanker;
         mContext = context;
 
+        PowerManager pm =  context.getSystemService(PowerManager.class);
         final Resources resources = context.getResources();
-        final int screenBrightnessSettingMinimum = clampAbsoluteBrightness(resources.getInteger(
-                com.android.internal.R.integer.config_screenBrightnessSettingMinimum));
+        final float screenBrightnessSettingMinimumFloat = clampAbsoluteBrightness(
+                pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM));
 
-        mScreenBrightnessDozeConfig = clampAbsoluteBrightness(resources.getInteger(
-                com.android.internal.R.integer.config_screenBrightnessDoze));
+        // DOZE AND DIM SETTINGS
+        mScreenBrightnessDozeConfig = clampAbsoluteBrightness(
+                pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DOZE));
+        mScreenBrightnessDimConfig = clampAbsoluteBrightness(
+                pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DIM));
 
-        mScreenBrightnessDimConfig = clampAbsoluteBrightness(resources.getInteger(
-                com.android.internal.R.integer.config_screenBrightnessDim));
-
+        // NORMAL SCREEN SETTINGS
         mScreenBrightnessRangeMinimum =
-                Math.min(screenBrightnessSettingMinimum, mScreenBrightnessDimConfig);
+                Math.min(screenBrightnessSettingMinimumFloat, mScreenBrightnessDimConfig);
+        mScreenBrightnessRangeMaximum = clampAbsoluteBrightness(
+                pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM));
+        mScreenBrightnessDefault = clampAbsoluteBrightness(
+                pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT));
 
-        mScreenBrightnessRangeMaximum = clampAbsoluteBrightness(resources.getInteger(
-                    com.android.internal.R.integer.config_screenBrightnessSettingMaximum));
-        mScreenBrightnessDefault = clampAbsoluteBrightness(resources.getInteger(
-                    com.android.internal.R.integer.config_screenBrightnessSettingDefault));
-
-        mScreenBrightnessForVrRangeMinimum = clampAbsoluteBrightness(resources.getInteger(
-                    com.android.internal.R.integer.config_screenBrightnessForVrSettingMinimum));
-        mScreenBrightnessForVrRangeMaximum = clampAbsoluteBrightness(resources.getInteger(
-                    com.android.internal.R.integer.config_screenBrightnessForVrSettingMaximum));
-        mScreenBrightnessForVrDefault = clampAbsoluteBrightness(resources.getInteger(
-                    com.android.internal.R.integer.config_screenBrightnessForVrSettingDefault));
+        // VR SETTINGS
+        mScreenBrightnessForVrDefault = clampAbsoluteBrightness(
+                pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_VR));
+        mScreenBrightnessForVrRangeMaximum = clampAbsoluteBrightness(
+                pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM_VR));
+        mScreenBrightnessForVrRangeMinimum = clampAbsoluteBrightness(
+                pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM_VR));
 
         mUseSoftwareAutoBrightnessConfig = resources.getBoolean(
                 com.android.internal.R.bool.config_automatic_brightness_available);
@@ -432,10 +438,6 @@
         mAllowAutoBrightnessWhileDozingConfig = resources.getBoolean(
                 com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing);
 
-        mBrightnessRampRateFast = resources.getInteger(
-                com.android.internal.R.integer.config_brightness_ramp_rate_fast);
-        mBrightnessRampRateSlow = resources.getInteger(
-                com.android.internal.R.integer.config_brightness_ramp_rate_slow);
         mSkipScreenOnBrightnessRamp = resources.getBoolean(
                 com.android.internal.R.bool.config_skipScreenOnBrightnessRamp);
 
@@ -496,7 +498,7 @@
                         mScreenBrightnessRangeMaximum, dozeScaleFactor, lightSensorRate,
                         initialLightSensorRate, brighteningLightDebounce, darkeningLightDebounce,
                         autoBrightnessResetAmbientLuxAfterWarmUp, ambientBrightnessThresholds,
-                        screenBrightnessThresholds, context.getPackageManager());
+                        screenBrightnessThresholds, context);
             } else {
                 mUseSoftwareAutoBrightnessConfig = false;
             }
@@ -519,14 +521,13 @@
                         TYPICAL_PROXIMITY_THRESHOLD);
             }
         }
-
         mCurrentScreenBrightnessSetting = getScreenBrightnessSetting();
         mScreenBrightnessForVr = getScreenBrightnessForVrSetting();
         mAutoBrightnessAdjustment = getAutoBrightnessAdjustmentSetting();
-        mTemporaryScreenBrightness = -1;
-        mPendingScreenBrightnessSetting = -1;
-        mTemporaryAutoBrightnessAdjustment = Float.NaN;
-        mPendingAutoBrightnessAdjustment = Float.NaN;
+        mTemporaryScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+        mPendingScreenBrightnessSetting = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+        mTemporaryAutoBrightnessAdjustment = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+        mPendingAutoBrightnessAdjustment = PowerManager.BRIGHTNESS_INVALID_FLOAT;
 
         DisplayWhiteBalanceSettings displayWhiteBalanceSettings = null;
         DisplayWhiteBalanceController displayWhiteBalanceController = null;
@@ -681,28 +682,28 @@
         }
 
         mScreenBrightnessRampAnimator = new RampAnimator<DisplayPowerState>(
-                mPowerState, DisplayPowerState.SCREEN_BRIGHTNESS);
+                mPowerState, DisplayPowerState.SCREEN_BRIGHTNESS_FLOAT);
         mScreenBrightnessRampAnimator.setListener(mRampAnimatorListener);
 
         // Initialize screen state for battery stats.
         try {
             mBatteryStats.noteScreenState(mPowerState.getScreenState());
-            mBatteryStats.noteScreenBrightness(mPowerState.getScreenBrightness());
+            mBatteryStats.noteScreenBrightness(BrightnessSynchronizer.brightnessFloatToInt(mContext,
+                    mPowerState.getScreenBrightness()));
         } catch (RemoteException ex) {
             // same process
         }
-
         // Initialize all of the brightness tracking state
-        final float brightness = convertToNits(mPowerState.getScreenBrightness());
+        final float brightness = convertToNits(BrightnessSynchronizer.brightnessFloatToInt(mContext,
+                mPowerState.getScreenBrightness()));
         if (brightness >= 0.0f) {
             mBrightnessTracker.start(brightness);
         }
-
         mContext.getContentResolver().registerContentObserver(
-                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),
+                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FLOAT),
                 false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL);
         mContext.getContentResolver().registerContentObserver(
-                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FOR_VR),
+                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT),
                 false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL);
         mContext.getContentResolver().registerContentObserver(
                 Settings.System.getUriFor(Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ),
@@ -776,8 +777,9 @@
 
         // Compute the basic display state using the policy.
         // We might override this below based on other factors.
+        // Initialise brightness as invalid.
         int state;
-        int brightness = PowerManager.BRIGHTNESS_DEFAULT;
+        float brightnessState = PowerManager.BRIGHTNESS_INVALID_FLOAT;
         boolean performScreenOffTransition = false;
         switch (mPowerRequest.policy) {
             case DisplayPowerRequest.POLICY_OFF:
@@ -791,7 +793,7 @@
                     state = Display.STATE_DOZE;
                 }
                 if (!mAllowAutoBrightnessWhileDozingConfig) {
-                    brightness = mPowerRequest.dozeScreenBrightness;
+                    brightnessState = mPowerRequest.dozeScreenBrightness;
                     mBrightnessReasonTemp.setReason(BrightnessReason.REASON_DOZE);
                 }
                 break;
@@ -843,20 +845,20 @@
         animateScreenStateChange(state, performScreenOffTransition);
         state = mPowerState.getScreenState();
 
-        // Use zero brightness when screen is off.
         if (state == Display.STATE_OFF) {
-            brightness = PowerManager.BRIGHTNESS_OFF;
+            brightnessState = PowerManager.BRIGHTNESS_OFF_FLOAT;
             mBrightnessReasonTemp.setReason(BrightnessReason.REASON_SCREEN_OFF);
         }
 
         // Always use the VR brightness when in the VR state.
         if (state == Display.STATE_VR) {
-            brightness = mScreenBrightnessForVr;
+            brightnessState = mScreenBrightnessForVr;
             mBrightnessReasonTemp.setReason(BrightnessReason.REASON_VR);
         }
 
-        if (brightness < 0 && mPowerRequest.screenBrightnessOverride > 0) {
-            brightness = mPowerRequest.screenBrightnessOverride;
+        if ((Float.isNaN(brightnessState))
+                && isValidBrightnessValue(mPowerRequest.screenBrightnessOverride)) {
+            brightnessState = mPowerRequest.screenBrightnessOverride;
             mBrightnessReasonTemp.setReason(BrightnessReason.REASON_OVERRIDE);
             mAppliedScreenBrightnessOverride = true;
         } else {
@@ -867,15 +869,15 @@
                 mAllowAutoBrightnessWhileDozingConfig && Display.isDozeState(state);
         final boolean autoBrightnessEnabled = mPowerRequest.useAutoBrightness
                     && (state == Display.STATE_ON || autoBrightnessEnabledInDoze)
-                    && brightness < 0
+                    && Float.isNaN(brightnessState)
                     && mAutomaticBrightnessController != null;
 
         final boolean userSetBrightnessChanged = updateUserSetScreenBrightness();
 
         // Use the temporary screen brightness if there isn't an override, either from
         // WindowManager or based on the display state.
-        if (mTemporaryScreenBrightness > 0) {
-            brightness = mTemporaryScreenBrightness;
+        if (isValidBrightnessValue(mTemporaryScreenBrightness)) {
+            brightnessState = mTemporaryScreenBrightness;
             mAppliedTemporaryBrightness = true;
             mBrightnessReasonTemp.setReason(BrightnessReason.REASON_TEMPORARY);
         } else {
@@ -898,14 +900,13 @@
             brightnessAdjustmentFlags = BrightnessReason.ADJUSTMENT_AUTO;
             mAppliedTemporaryAutoBrightnessAdjustment = false;
         }
-
         // Apply brightness boost.
         // We do this here after deciding whether auto-brightness is enabled so that we don't
         // disable the light sensor during this temporary state.  That way when boost ends we will
         // be able to resume normal auto-brightness behavior without any delay.
         if (mPowerRequest.boostScreenBrightness
-                && brightness != PowerManager.BRIGHTNESS_OFF) {
-            brightness = PowerManager.BRIGHTNESS_ON;
+                && brightnessState != PowerManager.BRIGHTNESS_OFF_FLOAT) {
+            brightnessState = PowerManager.BRIGHTNESS_MAX;
             mBrightnessReasonTemp.setReason(BrightnessReason.REASON_BOOST);
             mAppliedBrightnessBoost = true;
         } else {
@@ -914,16 +915,15 @@
 
         // If the brightness is already set then it's been overridden by something other than the
         // user, or is a temporary adjustment.
-        boolean userInitiatedChange = brightness < 0
+        boolean userInitiatedChange = (Float.isNaN(brightnessState))
                 && (autoBrightnessAdjustmentChanged || userSetBrightnessChanged);
-
         boolean hadUserBrightnessPoint = false;
         // Configure auto-brightness.
         if (mAutomaticBrightnessController != null) {
             hadUserBrightnessPoint = mAutomaticBrightnessController.hasUserDataPoints();
             mAutomaticBrightnessController.configure(autoBrightnessEnabled,
                     mBrightnessConfiguration,
-                    mLastUserSetScreenBrightness / (float) PowerManager.BRIGHTNESS_ON,
+                    mLastUserSetScreenBrightness,
                     userSetBrightnessChanged, autoBrightnessAdjustment,
                     autoBrightnessAdjustmentChanged, mPowerRequest.policy);
         }
@@ -934,17 +934,18 @@
 
         // Apply auto-brightness.
         boolean slowChange = false;
-        if (brightness < 0) {
+        if (Float.isNaN(brightnessState)) {
             float newAutoBrightnessAdjustment = autoBrightnessAdjustment;
             if (autoBrightnessEnabled) {
-                brightness = mAutomaticBrightnessController.getAutomaticScreenBrightness();
+                brightnessState = BrightnessSynchronizer.brightnessIntToFloat(
+                mContext, mAutomaticBrightnessController.getAutomaticScreenBrightness());
                 newAutoBrightnessAdjustment =
                         mAutomaticBrightnessController.getAutomaticScreenBrightnessAdjustment();
             }
-
-            if (brightness >= 0) {
+            if (isValidBrightnessValue(brightnessState)
+                    || brightnessState == PowerManager.BRIGHTNESS_OFF_FLOAT) {
                 // Use current auto-brightness value and slowly adjust to changes.
-                brightness = clampScreenBrightness(brightness);
+                brightnessState = clampScreenBrightness(brightnessState);
                 if (mAppliedAutoBrightness && !autoBrightnessAdjustmentChanged) {
                     slowChange = true; // slowly adapt to auto-brightness
                 }
@@ -952,7 +953,7 @@
                 // before applying the low power or dim transformations so that the slider
                 // accurately represents the full possible range, even if they range changes what
                 // it means in absolute terms.
-                putScreenBrightnessSetting(brightness);
+                putScreenBrightnessSetting(brightnessState);
                 mAppliedAutoBrightness = true;
                 mBrightnessReasonTemp.setReason(BrightnessReason.REASON_AUTOMATIC);
             } else {
@@ -970,24 +971,25 @@
             mAppliedAutoBrightness = false;
             brightnessAdjustmentFlags = 0;
         }
-
         // Use default brightness when dozing unless overridden.
-        if (brightness < 0 && Display.isDozeState(state)) {
-            brightness = mScreenBrightnessDozeConfig;
+        if ((Float.isNaN(brightnessState))
+                && Display.isDozeState(state)) {
+            brightnessState = mScreenBrightnessDozeConfig;
             mBrightnessReasonTemp.setReason(BrightnessReason.REASON_DOZE_DEFAULT);
         }
 
         // Apply manual brightness.
-        if (brightness < 0) {
-            brightness = clampScreenBrightness(mCurrentScreenBrightnessSetting);
+        if (Float.isNaN(brightnessState)) {
+            brightnessState = clampScreenBrightness(mCurrentScreenBrightnessSetting);
             mBrightnessReasonTemp.setReason(BrightnessReason.REASON_MANUAL);
         }
 
         // Apply dimming by at least some minimum amount when user activity
         // timeout is about to expire.
         if (mPowerRequest.policy == DisplayPowerRequest.POLICY_DIM) {
-            if (brightness > mScreenBrightnessRangeMinimum) {
-                brightness = Math.max(Math.min(brightness - SCREEN_DIM_MINIMUM_REDUCTION,
+            if (brightnessState > mScreenBrightnessRangeMinimum) {
+                brightnessState = Math.max(Math.min(brightnessState
+                                - SCREEN_DIM_MINIMUM_REDUCTION_FLOAT,
                         mScreenBrightnessDimConfig), mScreenBrightnessRangeMinimum);
                 mBrightnessReasonTemp.addModifier(BrightnessReason.MODIFIER_DIMMED);
             }
@@ -999,15 +1001,15 @@
             slowChange = false;
             mAppliedDimming = false;
         }
-
         // If low power mode is enabled, scale brightness by screenLowPowerBrightnessFactor
         // as long as it is above the minimum threshold.
         if (mPowerRequest.lowPowerMode) {
-            if (brightness > mScreenBrightnessRangeMinimum) {
+            if (brightnessState > mScreenBrightnessRangeMinimum) {
                 final float brightnessFactor =
                         Math.min(mPowerRequest.screenLowPowerBrightnessFactor, 1);
-                final int lowPowerBrightness = (int) (brightness * brightnessFactor);
-                brightness = Math.max(lowPowerBrightness, mScreenBrightnessRangeMinimum);
+                final float lowPowerBrightnessFloat = (brightnessState * brightnessFactor);
+                brightnessState = Math.max(lowPowerBrightnessFloat,
+                        mScreenBrightnessRangeMinimum);
                 mBrightnessReasonTemp.addModifier(BrightnessReason.MODIFIER_LOW_POWER);
             }
             if (!mAppliedLowPower) {
@@ -1025,11 +1027,12 @@
             if (mSkipScreenOnBrightnessRamp) {
                 if (state == Display.STATE_ON) {
                     if (mSkipRampState == RAMP_STATE_SKIP_NONE && mDozing) {
-                        mInitialAutoBrightness = brightness;
+                        mInitialAutoBrightness = brightnessState;
                         mSkipRampState = RAMP_STATE_SKIP_INITIAL;
                     } else if (mSkipRampState == RAMP_STATE_SKIP_INITIAL
                             && mUseSoftwareAutoBrightnessConfig
-                            && brightness != mInitialAutoBrightness) {
+                            && !BrightnessSynchronizer.floatEquals(brightnessState,
+                            mInitialAutoBrightness)) {
                         mSkipRampState = RAMP_STATE_SKIP_AUTOBRIGHT;
                     } else if (mSkipRampState == RAMP_STATE_SKIP_AUTOBRIGHT) {
                         mSkipRampState = RAMP_STATE_SKIP_NONE;
@@ -1056,9 +1059,9 @@
                     mAppliedTemporaryBrightness || mAppliedTemporaryAutoBrightnessAdjustment;
             if (initialRampSkip || hasBrightnessBuckets
                     || wasOrWillBeInVr || !isDisplayContentVisible || brightnessIsTemporary) {
-                animateScreenBrightness(brightness, 0);
+                animateScreenBrightness(brightnessState, SCREEN_ANIMATION_RATE_MINIMUM);
             } else {
-                animateScreenBrightness(brightness,
+                animateScreenBrightness(brightnessState,
                         slowChange ? mBrightnessRampRateSlow : mBrightnessRampRateFast);
             }
 
@@ -1069,14 +1072,16 @@
                     // slider event so notify as if the system changed the brightness.
                     userInitiatedChange = false;
                 }
-                notifyBrightnessChanged(brightness, userInitiatedChange, hadUserBrightnessPoint);
+                notifyBrightnessChanged(
+                        BrightnessSynchronizer.brightnessFloatToInt(mContext, brightnessState),
+                        userInitiatedChange, hadUserBrightnessPoint);
             }
 
         }
 
         // Log any changes to what is currently driving the brightness setting.
         if (!mBrightnessReasonTemp.equals(mBrightnessReason) || brightnessAdjustmentFlags != 0) {
-            Slog.v(TAG, "Brightness [" + brightness + "] reason changing to: '"
+            Slog.v(TAG, "Brightness [" + brightnessState + "] reason changing to: '"
                     + mBrightnessReasonTemp.toString(brightnessAdjustmentFlags)
                     + "', previous reason: '" + mBrightnessReason + "'.");
             mBrightnessReason.set(mBrightnessReasonTemp);
@@ -1161,9 +1166,9 @@
         msg.sendToTarget();
     }
 
-    public void setTemporaryBrightness(int brightness) {
+    public void setTemporaryBrightness(float brightness) {
         Message msg = mHandler.obtainMessage(MSG_SET_TEMPORARY_BRIGHTNESS,
-                brightness, 0 /*unused*/);
+                Float.floatToIntBits(brightness), 0 /*unused*/);
         msg.sendToTarget();
     }
 
@@ -1282,24 +1287,38 @@
         mReportedScreenStateToPolicy = state;
     }
 
-    private int clampScreenBrightnessForVr(int value) {
+    private float clampScreenBrightnessForVr(float value) {
         return MathUtils.constrain(
-                value, mScreenBrightnessForVrRangeMinimum, mScreenBrightnessForVrRangeMaximum);
+                value, mScreenBrightnessForVrRangeMinimum,
+                mScreenBrightnessForVrRangeMaximum);
     }
 
-    private int clampScreenBrightness(int value) {
+    private float clampScreenBrightness(float value) {
+        if (Float.isNaN(value)) {
+            return mScreenBrightnessRangeMinimum;
+        }
         return MathUtils.constrain(
                 value, mScreenBrightnessRangeMinimum, mScreenBrightnessRangeMaximum);
     }
 
-    private void animateScreenBrightness(int target, int rate) {
+    // Checks whether the brightness is within the valid brightness range, not including the off or
+    // invalid states.
+    private boolean isValidBrightnessValue(float brightnessState) {
+        return brightnessState >= mScreenBrightnessRangeMinimum
+                && brightnessState <= mScreenBrightnessRangeMaximum;
+    }
+
+    private void animateScreenBrightness(float target, float rate) {
         if (DEBUG) {
             Slog.d(TAG, "Animating brightness: target=" + target +", rate=" + rate);
         }
         if (mScreenBrightnessRampAnimator.animateTo(target, rate)) {
-            Trace.traceCounter(Trace.TRACE_TAG_POWER, "TargetScreenBrightness", target);
+            Trace.traceCounter(Trace.TRACE_TAG_POWER, "TargetScreenBrightness", (int) target);
             try {
-                mBatteryStats.noteScreenBrightness(target);
+                // TODO(brightnessfloat): change BatteryStats to use float
+                mBatteryStats.noteScreenBrightness(
+                        BrightnessSynchronizer.brightnessFloatToInt(
+                        mContext, target));
             } catch (RemoteException ex) {
                 // same process
             }
@@ -1578,6 +1597,7 @@
 
     private void handleSettingsChange(boolean userSwitch) {
         mPendingScreenBrightnessSetting = getScreenBrightnessSetting();
+
         if (userSwitch) {
             // Don't treat user switches as user initiated change.
             mCurrentScreenBrightnessSetting = mPendingScreenBrightnessSetting;
@@ -1598,24 +1618,24 @@
         return Float.isNaN(adj) ? 0.0f : clampAutoBrightnessAdjustment(adj);
     }
 
-    private int getScreenBrightnessSetting() {
-        final int brightness = Settings.System.getIntForUser(mContext.getContentResolver(),
-                Settings.System.SCREEN_BRIGHTNESS, mScreenBrightnessDefault,
+    private float getScreenBrightnessSetting() {
+        final float brightness = Settings.System.getFloatForUser(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_FLOAT, mScreenBrightnessDefault,
                 UserHandle.USER_CURRENT);
         return clampAbsoluteBrightness(brightness);
     }
 
-    private int getScreenBrightnessForVrSetting() {
-        final int brightness = Settings.System.getIntForUser(mContext.getContentResolver(),
-                Settings.System.SCREEN_BRIGHTNESS_FOR_VR, mScreenBrightnessForVrDefault,
+    private float getScreenBrightnessForVrSetting() {
+        final float brightnessFloat = Settings.System.getFloatForUser(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT, mScreenBrightnessForVrDefault,
                 UserHandle.USER_CURRENT);
-        return clampScreenBrightnessForVr(brightness);
+        return clampScreenBrightnessForVr(brightnessFloat);
     }
 
-    private void putScreenBrightnessSetting(int brightness) {
-        mCurrentScreenBrightnessSetting = brightness;
-        Settings.System.putIntForUser(mContext.getContentResolver(),
-                Settings.System.SCREEN_BRIGHTNESS, brightness, UserHandle.USER_CURRENT);
+    private void putScreenBrightnessSetting(float brightnessValue) {
+        mCurrentScreenBrightnessSetting = brightnessValue;
+        Settings.System.putFloatForUser(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_FLOAT, brightnessValue, UserHandle.USER_CURRENT);
     }
 
     private void putAutoBrightnessAdjustmentSetting(float adjustment) {
@@ -1638,18 +1658,19 @@
     }
 
     private boolean updateUserSetScreenBrightness() {
-        if (mPendingScreenBrightnessSetting < 0) {
+        if ((Float.isNaN(mPendingScreenBrightnessSetting)
+                || mPendingScreenBrightnessSetting < 0.0f)) {
             return false;
         }
         if (mCurrentScreenBrightnessSetting == mPendingScreenBrightnessSetting) {
-            mPendingScreenBrightnessSetting = -1;
-            mTemporaryScreenBrightness = -1;
+            mPendingScreenBrightnessSetting = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+            mTemporaryScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
             return false;
         }
         mCurrentScreenBrightnessSetting = mPendingScreenBrightnessSetting;
         mLastUserSetScreenBrightness = mPendingScreenBrightnessSetting;
-        mPendingScreenBrightnessSetting = -1;
-        mTemporaryScreenBrightness = -1;
+        mPendingScreenBrightnessSetting = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+        mTemporaryScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
         return true;
     }
 
@@ -1728,8 +1749,6 @@
         pw.println("Display Power Controller Configuration:");
         pw.println("  mScreenBrightnessDozeConfig=" + mScreenBrightnessDozeConfig);
         pw.println("  mScreenBrightnessDimConfig=" + mScreenBrightnessDimConfig);
-        pw.println("  mScreenBrightnessRangeMinimum=" + mScreenBrightnessRangeMinimum);
-        pw.println("  mScreenBrightnessRangeMaximum=" + mScreenBrightnessRangeMaximum);
         pw.println("  mScreenBrightnessDefault=" + mScreenBrightnessDefault);
         pw.println("  mScreenBrightnessForVrRangeMinimum=" + mScreenBrightnessForVrRangeMinimum);
         pw.println("  mScreenBrightnessForVrRangeMaximum=" + mScreenBrightnessForVrRangeMaximum);
@@ -1737,8 +1756,6 @@
         pw.println("  mUseSoftwareAutoBrightnessConfig=" + mUseSoftwareAutoBrightnessConfig);
         pw.println("  mAllowAutoBrightnessWhileDozingConfig=" +
                 mAllowAutoBrightnessWhileDozingConfig);
-        pw.println("  mBrightnessRampRateFast=" + mBrightnessRampRateFast);
-        pw.println("  mBrightnessRampRateSlow=" + mBrightnessRampRateSlow);
         pw.println("  mSkipScreenOnBrightnessRamp=" + mSkipScreenOnBrightnessRamp);
         pw.println("  mColorFadeFadesConfig=" + mColorFadeFadesConfig);
         pw.println("  mColorFadeEnabled=" + mColorFadeEnabled);
@@ -1767,15 +1784,15 @@
         pw.println("  mPendingProximityDebounceTime="
                 + TimeUtils.formatUptime(mPendingProximityDebounceTime));
         pw.println("  mScreenOffBecauseOfProximity=" + mScreenOffBecauseOfProximity);
-        pw.println("  mLastUserSetScreenBrightness=" + mLastUserSetScreenBrightness);
-        pw.println("  mCurrentScreenBrightnessSetting=" + mCurrentScreenBrightnessSetting);
-        pw.println("  mPendingScreenBrightnessSetting=" + mPendingScreenBrightnessSetting);
-        pw.println("  mTemporaryScreenBrightness=" + mTemporaryScreenBrightness);
+        pw.println("  mLastUserSetScreenBrightnessFloat=" + mLastUserSetScreenBrightness);
+        pw.println("  mPendingScreenBrightnessSettingFloat="
+                + mPendingScreenBrightnessSetting);
+        pw.println("  mTemporaryScreenBrightnessFloat=" + mTemporaryScreenBrightness);
         pw.println("  mAutoBrightnessAdjustment=" + mAutoBrightnessAdjustment);
         pw.println("  mBrightnessReason=" + mBrightnessReason);
         pw.println("  mTemporaryAutoBrightnessAdjustment=" + mTemporaryAutoBrightnessAdjustment);
         pw.println("  mPendingAutoBrightnessAdjustment=" + mPendingAutoBrightnessAdjustment);
-        pw.println("  mScreenBrightnessForVr=" + mScreenBrightnessForVr);
+        pw.println("  mScreenBrightnessForVrFloat=" + mScreenBrightnessForVr);
         pw.println("  mAppliedAutoBrightness=" + mAppliedAutoBrightness);
         pw.println("  mAppliedDimming=" + mAppliedDimming);
         pw.println("  mAppliedLowPower=" + mAppliedLowPower);
@@ -1783,7 +1800,6 @@
         pw.println("  mAppliedTemporaryBrightness=" + mAppliedTemporaryBrightness);
         pw.println("  mDozing=" + mDozing);
         pw.println("  mSkipRampState=" + skipRampStateToString(mSkipRampState));
-        pw.println("  mInitialAutoBrightness=" + mInitialAutoBrightness);
         pw.println("  mScreenOnBlockStartRealTime=" + mScreenOnBlockStartRealTime);
         pw.println("  mScreenOffBlockStartRealTime=" + mScreenOffBlockStartRealTime);
         pw.println("  mPendingScreenOnUnblocker=" + mPendingScreenOnUnblocker);
@@ -1869,6 +1885,11 @@
         return MathUtils.constrain(value, PowerManager.BRIGHTNESS_OFF, PowerManager.BRIGHTNESS_ON);
     }
 
+    private static float clampAbsoluteBrightness(float value) {
+        return MathUtils.constrain(value, PowerManager.BRIGHTNESS_MIN,
+                PowerManager.BRIGHTNESS_MAX);
+    }
+
     private static float clampAutoBrightnessAdjustment(float value) {
         return MathUtils.constrain(value, -1.0f, 1.0f);
     }
@@ -1908,7 +1929,7 @@
 
                 case MSG_SET_TEMPORARY_BRIGHTNESS:
                     // TODO: Should we have a a timeout for the temporary brightness?
-                    mTemporaryScreenBrightness = msg.arg1;
+                    mTemporaryScreenBrightness = Float.intBitsToFloat(msg.arg1);
                     updatePowerState();
                     break;
 
diff --git a/services/core/java/com/android/server/display/DisplayPowerState.java b/services/core/java/com/android/server/display/DisplayPowerState.java
index 763f56f..24e1b4e 100644
--- a/services/core/java/com/android/server/display/DisplayPowerState.java
+++ b/services/core/java/com/android/server/display/DisplayPowerState.java
@@ -22,11 +22,12 @@
 import android.os.PowerManager;
 import android.os.Trace;
 import android.util.FloatProperty;
-import android.util.IntProperty;
 import android.util.Slog;
 import android.view.Choreographer;
 import android.view.Display;
 
+import com.android.internal.BrightnessSynchronizer;
+
 import java.io.PrintWriter;
 
 /**
@@ -59,7 +60,7 @@
     private final PhotonicModulator mPhotonicModulator;
 
     private int mScreenState;
-    private int mScreenBrightness;
+    private float mScreenBrightness;
     private boolean mScreenReady;
     private boolean mScreenUpdatePending;
 
@@ -85,7 +86,7 @@
         // will reset the brightness to a new level immediately before the changes
         // actually have a chance to be applied.
         mScreenState = Display.STATE_ON;
-        mScreenBrightness = PowerManager.BRIGHTNESS_ON;
+        mScreenBrightness = PowerManager.BRIGHTNESS_MAX;
         scheduleScreenUpdate();
 
         mColorFadePrepared = false;
@@ -106,18 +107,19 @@
         }
     };
 
-    public static final IntProperty<DisplayPowerState> SCREEN_BRIGHTNESS =
-            new IntProperty<DisplayPowerState>("screenBrightness") {
-        @Override
-        public void setValue(DisplayPowerState object, int value) {
-            object.setScreenBrightness(value);
-        }
 
-        @Override
-        public Integer get(DisplayPowerState object) {
-            return object.getScreenBrightness();
-        }
-    };
+    public static final FloatProperty<DisplayPowerState> SCREEN_BRIGHTNESS_FLOAT =
+            new FloatProperty<DisplayPowerState>("screenBrightnessFloat") {
+                @Override
+                public void setValue(DisplayPowerState object, float value) {
+                    object.setScreenBrightness(value);
+                }
+
+                @Override
+                public Float get(DisplayPowerState object) {
+                    return object.getScreenBrightness();
+                }
+            };
 
     /**
      * Sets whether the screen is on, off, or dozing.
@@ -146,7 +148,7 @@
      *
      * @param brightness The brightness, ranges from 0 (minimum / off) to 255 (brightest).
      */
-    public void setScreenBrightness(int brightness) {
+    public void setScreenBrightness(float brightness) {
         if (mScreenBrightness != brightness) {
             if (DEBUG) {
                 Slog.d(TAG, "setScreenBrightness: brightness=" + brightness);
@@ -163,7 +165,7 @@
     /**
      * Gets the screen brightness.
      */
-    public int getScreenBrightness() {
+    public float getScreenBrightness() {
         return mScreenBrightness;
     }
 
@@ -308,9 +310,9 @@
         public void run() {
             mScreenUpdatePending = false;
 
-            int brightness = mScreenState != Display.STATE_OFF
-                    && mColorFadeLevel > 0f ? mScreenBrightness : 0;
-            if (mPhotonicModulator.setState(mScreenState, brightness)) {
+            float brightnessState = mScreenState != Display.STATE_OFF
+                    && mColorFadeLevel > 0f ? mScreenBrightness : PowerManager.BRIGHTNESS_OFF_FLOAT;
+            if (mPhotonicModulator.setState(mScreenState, brightnessState)) {
                 if (DEBUG) {
                     Slog.d(TAG, "Screen ready");
                 }
@@ -345,14 +347,14 @@
      */
     private final class PhotonicModulator extends Thread {
         private static final int INITIAL_SCREEN_STATE = Display.STATE_OFF; // unknown, assume off
-        private static final int INITIAL_BACKLIGHT = -1; // unknown
+        private static final float INITIAL_BACKLIGHT_FLOAT = PowerManager.BRIGHTNESS_INVALID_FLOAT;
 
         private final Object mLock = new Object();
 
         private int mPendingState = INITIAL_SCREEN_STATE;
-        private int mPendingBacklight = INITIAL_BACKLIGHT;
+        private float mPendingBacklight = INITIAL_BACKLIGHT_FLOAT;
         private int mActualState = INITIAL_SCREEN_STATE;
-        private int mActualBacklight = INITIAL_BACKLIGHT;
+        private float mActualBacklight = INITIAL_BACKLIGHT_FLOAT;
         private boolean mStateChangeInProgress;
         private boolean mBacklightChangeInProgress;
 
@@ -360,19 +362,19 @@
             super("PhotonicModulator");
         }
 
-        public boolean setState(int state, int backlight) {
+        public boolean setState(int state, float brightnessState) {
             synchronized (mLock) {
                 boolean stateChanged = state != mPendingState;
-                boolean backlightChanged = backlight != mPendingBacklight;
+                boolean backlightChanged = !BrightnessSynchronizer.floatEquals(
+                        brightnessState, mPendingBacklight);
                 if (stateChanged || backlightChanged) {
                     if (DEBUG) {
                         Slog.d(TAG, "Requesting new screen state: state="
-                                + Display.stateToString(state) + ", backlight=" + backlight);
+                                + Display.stateToString(state) + ", backlight=" + brightnessState);
                     }
 
                     mPendingState = state;
-                    mPendingBacklight = backlight;
-
+                    mPendingBacklight = brightnessState;
                     boolean changeInProgress = mStateChangeInProgress || mBacklightChangeInProgress;
                     mStateChangeInProgress = stateChanged || mStateChangeInProgress;
                     mBacklightChangeInProgress = backlightChanged || mBacklightChangeInProgress;
@@ -404,13 +406,14 @@
                 // Get pending change.
                 final int state;
                 final boolean stateChanged;
-                final int backlight;
+                final float brightnessState;
                 final boolean backlightChanged;
                 synchronized (mLock) {
                     state = mPendingState;
                     stateChanged = (state != mActualState);
-                    backlight = mPendingBacklight;
-                    backlightChanged = (backlight != mActualBacklight);
+                    brightnessState = mPendingBacklight;
+                    backlightChanged = !BrightnessSynchronizer.floatEquals(
+                            brightnessState, mActualBacklight);
                     if (!stateChanged) {
                         // State changed applied, notify outer class.
                         postScreenUpdateThreadSafe();
@@ -426,15 +429,15 @@
                         continue;
                     }
                     mActualState = state;
-                    mActualBacklight = backlight;
+                    mActualBacklight = brightnessState;
                 }
 
                 // Apply pending change.
                 if (DEBUG) {
                     Slog.d(TAG, "Updating screen state: state="
-                            + Display.stateToString(state) + ", backlight=" + backlight);
+                            + Display.stateToString(state) + ", backlight=" + brightnessState);
                 }
-                mBlanker.requestDisplayState(state, backlight);
+                mBlanker.requestDisplayState(state, brightnessState);
             }
         }
     }
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index fc9542a..e578ac1 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -35,9 +35,9 @@
 import android.view.DisplayAddress;
 import android.view.DisplayCutout;
 import android.view.DisplayEventReceiver;
-import android.view.Surface;
 import android.view.SurfaceControl;
 
+import com.android.internal.BrightnessSynchronizer;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.util.function.pooled.PooledLambda;
 import com.android.server.LocalServices;
@@ -52,7 +52,7 @@
 import java.util.Objects;
 
 /**
- * A display adapter for the local displays managed by Surface Flinger.
+ * A display adapter for the local displays managed by SurfaceFlinger.
  * <p>
  * Display adapters are guarded by the {@link DisplayManagerService.SyncRoot} lock.
  * </p>
@@ -128,10 +128,10 @@
             LocalDisplayDevice device = mDevices.get(physicalDisplayId);
             if (device == null) {
                 // Display was added.
-                final boolean isInternal = mDevices.size() == 0;
+                final boolean isDefaultDisplay = mDevices.size() == 0;
                 device = new LocalDisplayDevice(displayToken, physicalDisplayId, info,
                         configs, activeConfig, configSpecs, colorModes, activeColorMode,
-                        hdrCapabilities, isInternal);
+                        hdrCapabilities, isDefaultDisplay);
                 mDevices.put(physicalDisplayId, device);
                 sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_ADDED);
             } else if (device.updateDisplayProperties(configs, activeConfig,
@@ -174,12 +174,12 @@
         private final LogicalLight mBacklight;
         private final SparseArray<DisplayModeRecord> mSupportedModes = new SparseArray<>();
         private final ArrayList<Integer> mSupportedColorModes = new ArrayList<>();
-        private final boolean mIsInternal;
+        private final boolean mIsDefaultDisplay;
 
         private DisplayDeviceInfo mInfo;
         private boolean mHavePendingChanges;
         private int mState = Display.STATE_UNKNOWN;
-        private int mBrightness = PowerManager.BRIGHTNESS_DEFAULT;
+        private float mBrightnessState = PowerManager.BRIGHTNESS_INVALID_FLOAT;
         private int mDefaultModeId;
         private int mActiveModeId;
         private boolean mActiveModeInvalid;
@@ -206,15 +206,15 @@
                 SurfaceControl.DisplayInfo info, SurfaceControl.DisplayConfig[] configs,
                 int activeConfigId, SurfaceControl.DesiredDisplayConfigSpecs configSpecs,
                 int[] colorModes, int activeColorMode, Display.HdrCapabilities hdrCapabilities,
-                boolean isInternal) {
+                boolean isDefaultDisplay) {
             super(LocalDisplayAdapter.this, displayToken, UNIQUE_ID_PREFIX + physicalDisplayId);
             mPhysicalDisplayId = physicalDisplayId;
-            mIsInternal = isInternal;
+            mIsDefaultDisplay = isDefaultDisplay;
             mDisplayInfo = info;
             updateDisplayProperties(configs, activeConfigId, configSpecs, colorModes,
                     activeColorMode, hdrCapabilities);
             mSidekickInternal = LocalServices.getService(SidekickInternal.class);
-            if (mIsInternal) {
+            if (mIsDefaultDisplay) {
                 LightsManager lights = LocalServices.getService(LightsManager.class);
                 mBacklight = lights.getLight(LightsManager.LIGHT_ID_BACKLIGHT);
             } else {
@@ -513,6 +513,7 @@
                 mInfo.densityDpi = (int) (mDisplayInfo.density * 160 + 0.5f);
                 mInfo.xDpi = config.xDpi;
                 mInfo.yDpi = config.yDpi;
+                mInfo.deviceProductInfo = mDisplayInfo.deviceProductInfo;
 
                 // Assume that all built-in displays that have secure output (eg. HDCP) also
                 // support compositing from gralloc protected buffers.
@@ -522,11 +523,10 @@
                 }
 
                 final Resources res = getOverlayContext().getResources();
-                if (mIsInternal) {
-                    mInfo.name = res.getString(
-                            com.android.internal.R.string.display_manager_built_in_display_name);
-                    mInfo.flags |= DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY
-                            | DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
+
+                if (mIsDefaultDisplay) {
+                    mInfo.flags |= DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY;
+
                     if (res.getBoolean(com.android.internal.R.bool.config_mainBuiltInDisplayIsRound)
                             || (Build.IS_EMULATOR
                             && SystemProperties.getBoolean(PROPERTY_EMULATOR_CIRCULAR, false))) {
@@ -538,28 +538,7 @@
                     }
                     mInfo.displayCutout = DisplayCutout.fromResourcesRectApproximation(res,
                             mInfo.width, mInfo.height);
-                    mInfo.type = Display.TYPE_BUILT_IN;
-                    mInfo.touch = DisplayDeviceInfo.TOUCH_INTERNAL;
                 } else {
-                    mInfo.displayCutout = null;
-                    mInfo.type = Display.TYPE_HDMI;
-                    mInfo.flags |= DisplayDeviceInfo.FLAG_PRESENTATION;
-                    mInfo.name = getContext().getResources().getString(
-                            com.android.internal.R.string.display_manager_hdmi_display_name);
-                    mInfo.touch = DisplayDeviceInfo.TOUCH_EXTERNAL;
-
-                    // For demonstration purposes, allow rotation of the external display.
-                    // In the future we might allow the user to configure this directly.
-                    if ("portrait".equals(SystemProperties.get("persist.demo.hdmirotation"))) {
-                        mInfo.rotation = Surface.ROTATION_270;
-                    }
-
-                    // For demonstration purposes, allow rotation of the external display
-                    // to follow the built-in display.
-                    if (SystemProperties.getBoolean("persist.demo.hdmirotates", false)) {
-                        mInfo.flags |= DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
-                    }
-
                     if (!res.getBoolean(
                                 com.android.internal.R.bool.config_localDisplaysMirrorContent)) {
                         mInfo.flags |= DisplayDeviceInfo.FLAG_OWN_CONTENT_ONLY;
@@ -569,17 +548,33 @@
                         mInfo.flags |= DisplayDeviceInfo.FLAG_PRIVATE;
                     }
                 }
+
+                if (mDisplayInfo.isInternal) {
+                    mInfo.type = Display.TYPE_INTERNAL;
+                    mInfo.touch = DisplayDeviceInfo.TOUCH_INTERNAL;
+                    mInfo.flags |= DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
+                    mInfo.name = res.getString(
+                            com.android.internal.R.string.display_manager_built_in_display_name);
+                } else {
+                    mInfo.type = Display.TYPE_EXTERNAL;
+                    mInfo.touch = DisplayDeviceInfo.TOUCH_EXTERNAL;
+                    mInfo.flags |= DisplayDeviceInfo.FLAG_PRESENTATION;
+                    mInfo.name = getContext().getResources().getString(
+                            com.android.internal.R.string.display_manager_hdmi_display_name);
+                }
             }
             return mInfo;
         }
 
         @Override
-        public Runnable requestDisplayStateLocked(final int state, final int brightness) {
+        public Runnable requestDisplayStateLocked(final int state, final float brightnessState) {
             // Assume that the brightness is off if the display is being turned off.
-            assert state != Display.STATE_OFF || brightness == PowerManager.BRIGHTNESS_OFF;
-
+            assert state != Display.STATE_OFF || BrightnessSynchronizer.floatEquals(
+                    brightnessState, PowerManager.BRIGHTNESS_OFF_FLOAT);
             final boolean stateChanged = (mState != state);
-            final boolean brightnessChanged = (mBrightness != brightness) && mBacklight != null;
+            final boolean brightnessChanged = (!BrightnessSynchronizer.floatEquals(
+                    mBrightnessState, brightnessState))
+                    && mBacklight != null;
             if (stateChanged || brightnessChanged) {
                 final long physicalDisplayId = mPhysicalDisplayId;
                 final IBinder token = getDisplayTokenLocked();
@@ -591,7 +586,7 @@
                 }
 
                 if (brightnessChanged) {
-                    mBrightness = brightness;
+                    mBrightnessState = brightnessState;
                 }
 
                 // Defer actually setting the display state until after we have exited
@@ -630,10 +625,9 @@
                             vrModeChange = true;
                         }
 
-
                         // Apply brightness changes given that we are in a non-suspended state.
                         if (brightnessChanged || vrModeChange) {
-                            setDisplayBrightness(brightness);
+                            setDisplayBrightness(brightnessState);
                         }
 
                         // Enter the final desired state, possibly suspended.
@@ -694,7 +688,7 @@
                         }
                     }
 
-                    private void setDisplayBrightness(int brightness) {
+                    private void setDisplayBrightness(float brightness) {
                         if (DEBUG) {
                             Slog.d(TAG, "setDisplayBrightness("
                                     + "id=" + physicalDisplayId
@@ -704,26 +698,33 @@
                         Trace.traceBegin(Trace.TRACE_TAG_POWER, "setDisplayBrightness("
                                 + "id=" + physicalDisplayId + ", brightness=" + brightness + ")");
                         try {
-                            if (mHalBrightnessSupport) {
-                                mBacklight.setBrightnessFloat(
-                                        displayBrightnessToHalBrightness(brightness));
-                            } else {
-                                mBacklight.setBrightness(brightness);
+                            // TODO: make it float
+                            if (isHalBrightnessRangeSpecified()) {
+                                brightness = displayBrightnessToHalBrightness(
+                                        BrightnessSynchronizer.brightnessFloatToInt(getContext(),
+                                                brightness));
                             }
+                            mBacklight.setBrightness(brightness);
                             Trace.traceCounter(Trace.TRACE_TAG_POWER,
-                                    "ScreenBrightness", brightness);
+                                    "ScreenBrightness",
+                                    BrightnessSynchronizer.brightnessFloatToInt(
+                                            getContext(), brightness));
                         } finally {
                             Trace.traceEnd(Trace.TRACE_TAG_POWER);
                         }
                     }
 
+                    private boolean isHalBrightnessRangeSpecified() {
+                        return !(mSystemBrightnessToNits == null || mNitsToHalBrightness == null);
+                    }
+
                     /**
                      * Converts brightness range from the framework's brightness space to the
                      * Hal brightness space if the HAL brightness space has been provided via
                      * a display device configuration file.
                      */
                     private float displayBrightnessToHalBrightness(int brightness) {
-                        if (mSystemBrightnessToNits == null || mNitsToHalBrightness == null) {
+                        if (!isHalBrightnessRangeSpecified()) {
                             return PowerManager.BRIGHTNESS_INVALID_FLOAT;
                         }
 
@@ -887,12 +888,12 @@
             pw.println("mActiveColorMode=" + mActiveColorMode);
             pw.println("mDefaultModeId=" + mDefaultModeId);
             pw.println("mState=" + Display.stateToString(mState));
-            pw.println("mBrightness=" + mBrightness);
+            pw.println("mBrightnessState=" + mBrightnessState);
             pw.println("mBacklight=" + mBacklight);
             pw.println("mAllmSupported=" + mAllmSupported);
             pw.println("mAllmRequested=" + mAllmRequested);
-            pw.println("mGameContentTypeSupported" + mGameContentTypeSupported);
-            pw.println("mGameContentTypeRequested" + mGameContentTypeRequested);
+            pw.println("mGameContentTypeSupported=" + mGameContentTypeSupported);
+            pw.println("mGameContentTypeRequested=" + mGameContentTypeRequested);
             pw.println("mDisplayInfo=" + mDisplayInfo);
             pw.println("mDisplayConfigs=");
             for (int i = 0; i < mDisplayConfigs.length; i++) {
@@ -902,14 +903,7 @@
             for (int i = 0; i < mSupportedModes.size(); i++) {
                 pw.println("  " + mSupportedModes.valueAt(i));
             }
-            pw.print("mSupportedColorModes=[");
-            for (int i = 0; i < mSupportedColorModes.size(); i++) {
-                if (i != 0) {
-                    pw.print(", ");
-                }
-                pw.print(mSupportedColorModes.get(i));
-            }
-            pw.println("]");
+            pw.print("mSupportedColorModes=" + mSupportedColorModes.toString());
         }
 
         private int findDisplayConfigIdLocked(int modeId) {
diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java
index 0c9445a..ac81a6c 100644
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -269,6 +269,7 @@
 
             mBaseDisplayInfo.type = deviceInfo.type;
             mBaseDisplayInfo.address = deviceInfo.address;
+            mBaseDisplayInfo.deviceProductInfo = deviceInfo.deviceProductInfo;
             mBaseDisplayInfo.name = deviceInfo.name;
             mBaseDisplayInfo.uniqueId = deviceInfo.uniqueId;
             mBaseDisplayInfo.appWidth = maskedWidth;
diff --git a/services/core/java/com/android/server/display/RampAnimator.java b/services/core/java/com/android/server/display/RampAnimator.java
index d71269f..7916d81 100644
--- a/services/core/java/com/android/server/display/RampAnimator.java
+++ b/services/core/java/com/android/server/display/RampAnimator.java
@@ -17,21 +17,23 @@
 package com.android.server.display;
 
 import android.animation.ValueAnimator;
-import android.util.IntProperty;
+import android.util.FloatProperty;
 import android.view.Choreographer;
 
+import com.android.internal.BrightnessSynchronizer;
+
 /**
  * A custom animator that progressively updates a property value at
  * a given variable rate until it reaches a particular target value.
  */
 final class RampAnimator<T> {
     private final T mObject;
-    private final IntProperty<T> mProperty;
+    private final FloatProperty<T> mProperty;
     private final Choreographer mChoreographer;
 
-    private int mCurrentValue;
-    private int mTargetValue;
-    private int mRate;
+    private float mCurrentValue;
+    private float mTargetValue;
+    private float mRate;
 
     private boolean mAnimating;
     private float mAnimatedValue; // higher precision copy of mCurrentValue
@@ -41,7 +43,7 @@
 
     private Listener mListener;
 
-    public RampAnimator(T object, IntProperty<T> property) {
+    public RampAnimator(T object, FloatProperty<T> property) {
         mObject = object;
         mProperty = property;
         mChoreographer = Choreographer.getInstance();
@@ -57,7 +59,8 @@
      * @param rate The convergence rate in units per second, or 0 to set the value immediately.
      * @return True if the target differs from the previous target.
      */
-    public boolean animateTo(int target, int rate) {
+    public boolean animateTo(float target, float rate) {
+
         // Immediately jump to the target the first time.
         if (mFirstTime || rate <= 0) {
             if (mFirstTime || target != mCurrentValue) {
@@ -152,14 +155,12 @@
                     mAnimatedValue = Math.max(mAnimatedValue - amount, mTargetValue);
                 }
             }
-            final int oldCurrentValue = mCurrentValue;
-            mCurrentValue = Math.round(mAnimatedValue);
-
-            if (oldCurrentValue != mCurrentValue) {
+            final float oldCurrentValue = mCurrentValue;
+            mCurrentValue = mAnimatedValue;
+            if (!BrightnessSynchronizer.floatEquals(oldCurrentValue, mCurrentValue)) {
                 mProperty.setValue(mObject, mCurrentValue);
             }
-
-            if (mTargetValue != mCurrentValue) {
+            if (!BrightnessSynchronizer.floatEquals(mTargetValue, mCurrentValue)) {
                 postAnimationCallback();
             } else {
                 mAnimating = false;
diff --git a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
index 1ca8dd3..f4f2ead 100644
--- a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
@@ -265,7 +265,7 @@
         }
 
         @Override
-        public Runnable requestDisplayStateLocked(int state, int brightness) {
+        public Runnable requestDisplayStateLocked(int state, float brightnessState) {
             if (state != mDisplayState) {
                 mDisplayState = state;
                 if (state == Display.STATE_OFF) {
diff --git a/services/core/java/com/android/server/display/WifiDisplayController.java b/services/core/java/com/android/server/display/WifiDisplayController.java
index 2992f1e..a7e1a28 100644
--- a/services/core/java/com/android/server/display/WifiDisplayController.java
+++ b/services/core/java/com/android/server/display/WifiDisplayController.java
@@ -291,7 +291,7 @@
                 mWfdEnabling = true;
 
                 WifiP2pWfdInfo wfdInfo = new WifiP2pWfdInfo();
-                wfdInfo.setWfdEnabled(true);
+                wfdInfo.setEnabled(true);
                 wfdInfo.setDeviceType(WifiP2pWfdInfo.DEVICE_TYPE_WFD_SOURCE);
                 wfdInfo.setSessionAvailable(true);
                 wfdInfo.setControlPort(DEFAULT_CONTROL_PORT);
@@ -323,7 +323,7 @@
             // WFD should be disabled.
             if (mWfdEnabled || mWfdEnabling) {
                 WifiP2pWfdInfo wfdInfo = new WifiP2pWfdInfo();
-                wfdInfo.setWfdEnabled(false);
+                wfdInfo.setEnabled(false);
                 mWifiP2pManager.setWfdInfo(mWifiP2pChannel, wfdInfo, new ActionListener() {
                     @Override
                     public void onSuccess() {
@@ -1044,7 +1044,7 @@
     private static boolean isWifiDisplay(WifiP2pDevice device) {
         WifiP2pWfdInfo wfdInfo = device.getWfdInfo();
         return wfdInfo != null
-                && wfdInfo.isWfdEnabled()
+                && wfdInfo.isEnabled()
                 && isPrimarySinkDeviceType(wfdInfo.getDeviceType());
     }
 
diff --git a/services/core/java/com/android/server/firewall/IntentFirewall.java b/services/core/java/com/android/server/firewall/IntentFirewall.java
index c2af29c..1139d28 100644
--- a/services/core/java/com/android/server/firewall/IntentFirewall.java
+++ b/services/core/java/com/android/server/firewall/IntentFirewall.java
@@ -16,6 +16,7 @@
 
 package com.android.server.firewall;
 
+import android.annotation.NonNull;
 import android.app.AppGlobals;
 import android.content.ComponentName;
 import android.content.Intent;
@@ -521,6 +522,11 @@
             return;
         }
 
+        @Override
+        protected IntentFilter getIntentFilter(@NonNull FirewallIntentFilter input) {
+            return input;
+        }
+
         public void queryByComponent(ComponentName componentName, List<Rule> candidateRules) {
             Rule[] rules = mRulesByComponent.get(componentName);
             if (rules != null) {
diff --git a/services/core/java/com/android/server/hdmi/Constants.java b/services/core/java/com/android/server/hdmi/Constants.java
index 648e07a..ac3a653 100644
--- a/services/core/java/com/android/server/hdmi/Constants.java
+++ b/services/core/java/com/android/server/hdmi/Constants.java
@@ -395,7 +395,7 @@
     static final String PROPERTY_PREFERRED_ADDRESS_TV = "persist.sys.hdmi.addr.tv";
 
     // TODO(OEM): Set this to false to keep the playback device in sleep upon hotplug event.
-    //            True by default.
+    //            False by default.
     static final String PROPERTY_WAKE_ON_HOTPLUG = "ro.hdmi.wake_on_hotplug";
 
     /**
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecController.java b/services/core/java/com/android/server/hdmi/HdmiCecController.java
index 6174e54..b84d322 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecController.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecController.java
@@ -77,7 +77,7 @@
 
     private static final int NUM_LOGICAL_ADDRESS = 16;
 
-    private static final int MAX_CEC_MESSAGE_HISTORY = 200;
+    private static final int MAX_HDMI_MESSAGE_HISTORY = 250;
 
     // Predicate for whether the given logical address is remote device's one or not.
     private final Predicate<Integer> mRemoteDeviceAddressPredicate = new Predicate<Integer>() {
@@ -111,9 +111,9 @@
     // Stores the local CEC devices in the system. Device type is used for key.
     private final SparseArray<HdmiCecLocalDevice> mLocalDevices = new SparseArray<>();
 
-    // Stores recent CEC messages history for debugging purpose.
-    private final ArrayBlockingQueue<MessageHistoryRecord> mMessageHistory =
-            new ArrayBlockingQueue<>(MAX_CEC_MESSAGE_HISTORY);
+    // Stores recent CEC messages and HDMI Hotplug event history for debugging purpose.
+    private final ArrayBlockingQueue<Dumpable> mMessageHistory =
+            new ArrayBlockingQueue<>(MAX_HDMI_MESSAGE_HISTORY);
 
     private final NativeWrapper mNativeWrapperImpl;
 
@@ -618,7 +618,7 @@
     void sendCommand(final HdmiCecMessage cecMessage,
             final HdmiControlService.SendMessageCallback callback) {
         assertRunOnServiceThread();
-        addMessageToHistory(false /* isReceived */, cecMessage);
+        addCecMessageToHistory(false /* isReceived */, cecMessage);
         runOnIoThread(new Runnable() {
             @Override
             public void run() {
@@ -658,7 +658,7 @@
         assertRunOnServiceThread();
         HdmiCecMessage command = HdmiCecMessageBuilder.of(srcAddress, dstAddress, body);
         HdmiLogger.debug("[R]:" + command);
-        addMessageToHistory(true /* isReceived */, command);
+        addCecMessageToHistory(true /* isReceived */, command);
         onReceiveCommand(command);
     }
 
@@ -669,16 +669,26 @@
     private void handleHotplug(int port, boolean connected) {
         assertRunOnServiceThread();
         HdmiLogger.debug("Hotplug event:[port:%d, connected:%b]", port, connected);
+        addHotplugEventToHistory(port, connected);
         mService.onHotplug(port, connected);
     }
 
     @ServiceThreadOnly
-    private void addMessageToHistory(boolean isReceived, HdmiCecMessage message) {
+    private void addHotplugEventToHistory(int port, boolean connected) {
         assertRunOnServiceThread();
-        MessageHistoryRecord record = new MessageHistoryRecord(isReceived, message);
-        if (!mMessageHistory.offer(record)) {
+        addEventToHistory(new HotplugHistoryRecord(port, connected));
+    }
+
+    @ServiceThreadOnly
+    private void addCecMessageToHistory(boolean isReceived, HdmiCecMessage message) {
+        assertRunOnServiceThread();
+        addEventToHistory(new MessageHistoryRecord(isReceived, message));
+    }
+
+    private void addEventToHistory(Dumpable event) {
+        if (!mMessageHistory.offer(event)) {
             mMessageHistory.poll();
-            mMessageHistory.offer(record);
+            mMessageHistory.offer(event);
         }
     }
 
@@ -689,10 +699,11 @@
             mLocalDevices.valueAt(i).dump(pw);
             pw.decreaseIndent();
         }
+
         pw.println("CEC message history:");
         pw.increaseIndent();
         final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        for (MessageHistoryRecord record : mMessageHistory) {
+        for (Dumpable record : mMessageHistory) {
             record.dump(pw, sdf);
         }
         pw.decreaseIndent();
@@ -792,17 +803,27 @@
         }
     }
 
-    private final class MessageHistoryRecord {
-        private final long mTime;
+    private abstract static class Dumpable {
+        protected final long mTime;
+
+        Dumpable() {
+            mTime = System.currentTimeMillis();
+        }
+
+        abstract void dump(IndentingPrintWriter pw, SimpleDateFormat sdf);
+    }
+
+    private static final class MessageHistoryRecord extends Dumpable {
         private final boolean mIsReceived; // true if received message and false if sent message
         private final HdmiCecMessage mMessage;
 
-        public MessageHistoryRecord(boolean isReceived, HdmiCecMessage message) {
-            mTime = System.currentTimeMillis();
+        MessageHistoryRecord(boolean isReceived, HdmiCecMessage message) {
+            super();
             mIsReceived = isReceived;
             mMessage = message;
         }
 
+        @Override
         void dump(final IndentingPrintWriter pw, SimpleDateFormat sdf) {
             pw.print(mIsReceived ? "[R]" : "[S]");
             pw.print(" time=");
@@ -811,4 +832,26 @@
             pw.println(mMessage);
         }
     }
+
+    private static final class HotplugHistoryRecord extends Dumpable {
+        private final int mPort;
+        private final boolean mConnected;
+
+        HotplugHistoryRecord(int port, boolean connected) {
+            super();
+            mPort = port;
+            mConnected = connected;
+        }
+
+        @Override
+        void dump(final IndentingPrintWriter pw, SimpleDateFormat sdf) {
+            pw.print("[H]");
+            pw.print(" time=");
+            pw.print(sdf.format(new Date(mTime)));
+            pw.print(" hotplug port=");
+            pw.print(mPort);
+            pw.print(" connected=");
+            pw.println(mConnected);
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java
index dde873b..e5a08d3 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java
@@ -70,6 +70,9 @@
 
     private static final String TAG = "HdmiCecLocalDeviceAudioSystem";
 
+    private static final boolean WAKE_ON_HOTPLUG =
+            SystemProperties.getBoolean(Constants.PROPERTY_WAKE_ON_HOTPLUG, false);
+
     // Whether the System Audio Control feature is enabled or not. True by default.
     @GuardedBy("mLock")
     private boolean mSystemAudioControlFeatureEnabled;
@@ -318,7 +321,7 @@
     @ServiceThreadOnly
     void onHotplug(int portId, boolean connected) {
         assertRunOnServiceThread();
-        if (connected) {
+        if (WAKE_ON_HOTPLUG && connected) {
             mService.wakeUp();
         }
         if (mService.getPortInfo(portId).getType() == HdmiPortInfo.PORT_OUTPUT) {
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
index 0944324..5541b11 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
@@ -45,7 +45,7 @@
     private static final String TAG = "HdmiCecLocalDevicePlayback";
 
     private static final boolean WAKE_ON_HOTPLUG =
-            SystemProperties.getBoolean(Constants.PROPERTY_WAKE_ON_HOTPLUG, true);
+            SystemProperties.getBoolean(Constants.PROPERTY_WAKE_ON_HOTPLUG, false);
 
     private static final boolean SET_MENU_LANGUAGE =
             HdmiProperties.set_menu_language().orElse(false);
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index 7c2ec78..d9e3025 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -105,32 +105,57 @@
  */
 public class HdmiControlService extends SystemService {
     private static final String TAG = "HdmiControlService";
-    private final Locale HONG_KONG = new Locale("zh", "HK");
-    private final Locale MACAU = new Locale("zh", "MO");
+    private static final Locale HONG_KONG = new Locale("zh", "HK");
+    private static final Locale MACAU = new Locale("zh", "MO");
 
-    private static final Map<String, String> mTerminologyToBibliographicMap;
-    static {
-        mTerminologyToBibliographicMap = new HashMap<>();
+    private static final Map<String, String> sTerminologyToBibliographicMap =
+            createsTerminologyToBibliographicMap();
+
+    private static Map<String, String> createsTerminologyToBibliographicMap() {
+        Map<String, String> temp = new HashMap<>();
         // NOTE: (TERMINOLOGY_CODE, BIBLIOGRAPHIC_CODE)
-        mTerminologyToBibliographicMap.put("sqi", "alb"); // Albanian
-        mTerminologyToBibliographicMap.put("hye", "arm"); // Armenian
-        mTerminologyToBibliographicMap.put("eus", "baq"); // Basque
-        mTerminologyToBibliographicMap.put("mya", "bur"); // Burmese
-        mTerminologyToBibliographicMap.put("ces", "cze"); // Czech
-        mTerminologyToBibliographicMap.put("nld", "dut"); // Dutch
-        mTerminologyToBibliographicMap.put("kat", "geo"); // Georgian
-        mTerminologyToBibliographicMap.put("deu", "ger"); // German
-        mTerminologyToBibliographicMap.put("ell", "gre"); // Greek
-        mTerminologyToBibliographicMap.put("fra", "fre"); // French
-        mTerminologyToBibliographicMap.put("isl", "ice"); // Icelandic
-        mTerminologyToBibliographicMap.put("mkd", "mac"); // Macedonian
-        mTerminologyToBibliographicMap.put("mri", "mao"); // Maori
-        mTerminologyToBibliographicMap.put("msa", "may"); // Malay
-        mTerminologyToBibliographicMap.put("fas", "per"); // Persian
-        mTerminologyToBibliographicMap.put("ron", "rum"); // Romanian
-        mTerminologyToBibliographicMap.put("slk", "slo"); // Slovak
-        mTerminologyToBibliographicMap.put("bod", "tib"); // Tibetan
-        mTerminologyToBibliographicMap.put("cym", "wel"); // Welsh
+        temp.put("sqi", "alb"); // Albanian
+        temp.put("hye", "arm"); // Armenian
+        temp.put("eus", "baq"); // Basque
+        temp.put("mya", "bur"); // Burmese
+        temp.put("ces", "cze"); // Czech
+        temp.put("nld", "dut"); // Dutch
+        temp.put("kat", "geo"); // Georgian
+        temp.put("deu", "ger"); // German
+        temp.put("ell", "gre"); // Greek
+        temp.put("fra", "fre"); // French
+        temp.put("isl", "ice"); // Icelandic
+        temp.put("mkd", "mac"); // Macedonian
+        temp.put("mri", "mao"); // Maori
+        temp.put("msa", "may"); // Malay
+        temp.put("fas", "per"); // Persian
+        temp.put("ron", "rum"); // Romanian
+        temp.put("slk", "slo"); // Slovak
+        temp.put("bod", "tib"); // Tibetan
+        temp.put("cym", "wel"); // Welsh
+        return Collections.unmodifiableMap(temp);
+    }
+
+    @VisibleForTesting static String localeToMenuLanguage(Locale locale) {
+        if (locale.equals(Locale.TAIWAN) || locale.equals(HONG_KONG) || locale.equals(MACAU)) {
+            // Android always returns "zho" for all Chinese variants.
+            // Use "bibliographic" code defined in CEC639-2 for traditional
+            // Chinese used in Taiwan/Hong Kong/Macau.
+            return "chi";
+        } else {
+            String language = locale.getISO3Language();
+
+            // locale.getISO3Language() returns terminology code and need to
+            // send it as bibliographic code instead since the Bibliographic
+            // codes of ISO/FDIS 639-2 shall be used.
+            // NOTE: Chinese also has terminology/bibliographic code "zho" and "chi"
+            // But, as it depends on the locale, is not handled here.
+            if (sTerminologyToBibliographicMap.containsKey(language)) {
+                language = sTerminologyToBibliographicMap.get(language);
+            }
+
+            return language;
+        }
     }
 
     static final String PERMISSION = "android.permission.HDMI_CEC";
@@ -208,8 +233,8 @@
                     }
                     break;
                 case Intent.ACTION_CONFIGURATION_CHANGED:
-                    String language = getMenuLanguage();
-                    if (!mLanguage.equals(language)) {
+                    String language = HdmiControlService.localeToMenuLanguage(Locale.getDefault());
+                    if (!mMenuLanguage.equals(language)) {
                         onLanguageChanged(language);
                     }
                     break;
@@ -221,28 +246,6 @@
             }
         }
 
-        private String getMenuLanguage() {
-            Locale locale = Locale.getDefault();
-            if (locale.equals(Locale.TAIWAN) || locale.equals(HONG_KONG) || locale.equals(MACAU)) {
-                // Android always returns "zho" for all Chinese variants.
-                // Use "bibliographic" code defined in CEC639-2 for traditional
-                // Chinese used in Taiwan/Hong Kong/Macau.
-                return "chi";
-            } else {
-                String language = locale.getISO3Language();
-
-                // locale.getISO3Language() returns terminology code and need to
-                // send it as bibliographic code instead since the Bibliographic
-                // codes of ISO/FDIS 639-2 shall be used.
-                // NOTE: Chinese also has terminology/bibliographic code "zho" and "chi"
-                // But, as it depends on the locale, is not handled here.
-                if (mTerminologyToBibliographicMap.containsKey(language)) {
-                    language = mTerminologyToBibliographicMap.get(language);
-                }
-
-                return language;
-            }
-        }
     }
 
     // A thread to handle synchronous IO of CEC and MHL control service.
@@ -339,7 +342,7 @@
     private int mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
 
     @ServiceThreadOnly
-    private String mLanguage = Locale.getDefault().getISO3Language();
+    private String mMenuLanguage = localeToMenuLanguage(Locale.getDefault());
 
     @ServiceThreadOnly
     private boolean mStandbyMessageReceived = false;
@@ -759,7 +762,7 @@
     private void initializeCec(int initiatedBy) {
         mAddressAllocated = false;
         mCecController.setOption(OptionKey.SYSTEM_CEC_CONTROL, true);
-        mCecController.setLanguage(mLanguage);
+        mCecController.setLanguage(mMenuLanguage);
         initializeLocalDevices(initiatedBy);
     }
 
@@ -2818,7 +2821,7 @@
     @ServiceThreadOnly
     private void onLanguageChanged(String language) {
         assertRunOnServiceThread();
-        mLanguage = language;
+        mMenuLanguage = language;
 
         if (isTvDeviceEnabled()) {
             tv().broadcastMenuLanguage(language);
@@ -2826,10 +2829,19 @@
         }
     }
 
+    /**
+     * Gets the CEC menu language.
+     *
+     * <p>This is the ISO/FDIS 639-2 3 letter language code sent in the CEC message @{code <Set Menu
+     * Language>}.
+     * See HDMI 1.4b section CEC 13.6.2
+     *
+     * @see {@link Locale#getISO3Language()}
+     */
     @ServiceThreadOnly
     String getLanguage() {
         assertRunOnServiceThread();
-        return mLanguage;
+        return mMenuLanguage;
     }
 
     private void disableDevices(PendingActionClearedCallback callback) {
@@ -2838,7 +2850,6 @@
                 device.disableDevice(mStandbyMessageReceived, callback);
             }
         }
-
         mMhlController.clearAllLocalDevices();
     }
 
diff --git a/services/core/java/com/android/server/incremental/IncrementalManagerService.java b/services/core/java/com/android/server/incremental/IncrementalManagerService.java
index 64f25dd..a8121cc 100644
--- a/services/core/java/com/android/server/incremental/IncrementalManagerService.java
+++ b/services/core/java/com/android/server/incremental/IncrementalManagerService.java
@@ -142,16 +142,6 @@
         }
     }
 
-    // TODO: remove this
-    @Override
-    public void newFileForDataLoader(int mountId, byte[] fileId, byte[] metadata) {
-        IDataLoader dataLoader = mDataLoaderManager.getDataLoader(mountId);
-        if (dataLoader == null) {
-            Slog.e(TAG, "Failed to retrieve data loader for ID=" + mountId);
-            return;
-        }
-    }
-
     @Override
     public void showHealthBlockedUI(int mountId) {
         // TODO(b/136132412): implement this
diff --git a/services/core/java/com/android/server/incremental/IncrementalManagerShellCommand.java b/services/core/java/com/android/server/incremental/IncrementalManagerShellCommand.java
index b0e2e64..6a5e963 100644
--- a/services/core/java/com/android/server/incremental/IncrementalManagerShellCommand.java
+++ b/services/core/java/com/android/server/incremental/IncrementalManagerShellCommand.java
@@ -16,9 +16,7 @@
 
 package com.android.server.incremental;
 
-import static android.content.pm.InstallationFile.FILE_TYPE_OBB;
 import static android.content.pm.PackageInstaller.LOCATION_DATA_APP;
-import static android.content.pm.PackageInstaller.LOCATION_MEDIA_OBB;
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
@@ -183,10 +181,8 @@
             session = packageInstaller.openSession(sessionId);
             for (int i = 0; i < numFiles; i++) {
                 InstallationFile file = installationFiles.get(i);
-                final int location = file.getFileType() == FILE_TYPE_OBB ? LOCATION_MEDIA_OBB
-                        : LOCATION_DATA_APP;
-                session.addFile(location, file.getName(), file.getSize(), file.getMetadata(),
-                        null);
+                session.addFile(file.getLocation(), file.getName(), file.getLengthBytes(),
+                        file.getMetadata(), file.getSignature());
             }
             session.commit(localReceiver.getIntentSender());
             final Intent result = localReceiver.getResult();
@@ -304,7 +300,8 @@
                     }
                     final byte[] metadata = String.valueOf(index).getBytes(
                             StandardCharsets.UTF_8);
-                    fileList.add(new InstallationFile(name, size, metadata));
+                    fileList.add(
+                            new InstallationFile(LOCATION_DATA_APP, name, size, metadata, null));
                     break;
                 }
                 default:
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index a8f706c..ca06b47 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -79,6 +79,7 @@
 import android.view.KeyEvent;
 import android.view.PointerIcon;
 import android.view.Surface;
+import android.view.VerifiedInputEvent;
 import android.view.ViewConfiguration;
 import android.widget.Toast;
 
@@ -214,6 +215,7 @@
     private static native int nativeInjectInputEvent(long ptr, InputEvent event,
             int injectorPid, int injectorUid, int syncMode, int timeoutMillis,
             int policyFlags);
+    private static native VerifiedInputEvent nativeVerifyInputEvent(long ptr, InputEvent event);
     private static native void nativeToggleCapsLock(long ptr, int deviceId);
     private static native void nativeSetInputWindows(long ptr, InputWindowHandle[] windowHandles,
             int displayId);
@@ -672,6 +674,11 @@
         }
     }
 
+    @Override // Binder call
+    public VerifiedInputEvent verifyInputEvent(InputEvent event) {
+        return nativeVerifyInputEvent(mPtr, event);
+    }
+
     /**
      * Gets information about the input device with the specified id.
      * @param deviceId The device id.
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java
index 9f76e1e..eac2d24 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java
@@ -18,12 +18,11 @@
 
 import android.annotation.NonNull;
 import android.annotation.UserIdInt;
-import android.content.ComponentName;
-import android.view.autofill.AutofillId;
 import android.view.inputmethod.InlineSuggestionsRequest;
 import android.view.inputmethod.InputMethodInfo;
 
 import com.android.internal.view.IInlineSuggestionsRequestCallback;
+import com.android.internal.view.InlineSuggestionsRequestInfo;
 import com.android.server.LocalServices;
 
 import java.util.Collections;
@@ -74,13 +73,11 @@
      * Called by the Autofill Frameworks to request an {@link InlineSuggestionsRequest} from
      * the input method.
      *
-     * @param componentName {@link ComponentName} of current app/activity.
-     * @param autofillId {@link AutofillId} of currently focused field.
+     * @param requestInfo information needed to create an {@link InlineSuggestionsRequest}.
      * @param cb {@link IInlineSuggestionsRequestCallback} used to pass back the request object.
      */
     public abstract void onCreateInlineSuggestionsRequest(@UserIdInt int userId,
-            ComponentName componentName, AutofillId autofillId,
-            IInlineSuggestionsRequestCallback cb);
+            InlineSuggestionsRequestInfo requestInfo, IInlineSuggestionsRequestCallback cb);
 
     /**
      * Force switch to the enabled input method by {@code imeId} for current user. If the input
@@ -124,7 +121,7 @@
 
                 @Override
                 public void onCreateInlineSuggestionsRequest(int userId,
-                        ComponentName componentName, AutofillId autofillId,
+                        InlineSuggestionsRequestInfo requestInfo,
                         IInlineSuggestionsRequestCallback cb) {
                 }
 
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 47622f3..d7cb192 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -109,7 +109,6 @@
 import android.view.Window;
 import android.view.WindowManager.LayoutParams;
 import android.view.WindowManager.LayoutParams.SoftInputModeFlags;
-import android.view.autofill.AutofillId;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InlineSuggestionsRequest;
 import android.view.inputmethod.InputBinding;
@@ -150,6 +149,7 @@
 import com.android.internal.view.IInputMethodManager;
 import com.android.internal.view.IInputMethodSession;
 import com.android.internal.view.IInputSessionCallback;
+import com.android.internal.view.InlineSuggestionsRequestInfo;
 import com.android.internal.view.InputBindResult;
 import com.android.server.EventLogTags;
 import com.android.server.LocalServices;
@@ -1812,16 +1812,14 @@
 
     @GuardedBy("mMethodMap")
     private void onCreateInlineSuggestionsRequestLocked(@UserIdInt int userId,
-            ComponentName componentName, AutofillId autofillId,
-            IInlineSuggestionsRequestCallback callback) {
+            InlineSuggestionsRequestInfo requestInfo, IInlineSuggestionsRequestCallback callback) {
         final InputMethodInfo imi = mMethodMap.get(mCurMethodId);
         try {
             if (userId == mSettings.getCurrentUserId() && imi != null
                     && imi.isInlineSuggestionsEnabled() && mCurMethod != null) {
                 executeOrSendMessage(mCurMethod,
-                        mCaller.obtainMessageOOOO(MSG_INLINE_SUGGESTIONS_REQUEST, mCurMethod,
-                                componentName, autofillId,
-                                new InlineSuggestionsRequestCallbackDecorator(callback,
+                        mCaller.obtainMessageOOO(MSG_INLINE_SUGGESTIONS_REQUEST, mCurMethod,
+                                requestInfo, new InlineSuggestionsRequestCallbackDecorator(callback,
                                         imi.getPackageName())));
             } else {
                 callback.onInlineSuggestionsUnsupported();
@@ -3972,13 +3970,13 @@
             // ---------------------------------------------------------------
             case MSG_INLINE_SUGGESTIONS_REQUEST:
                 args = (SomeArgs) msg.obj;
-                final ComponentName componentName = (ComponentName) args.arg2;
-                final AutofillId autofillId = (AutofillId) args.arg3;
+                final InlineSuggestionsRequestInfo requestInfo =
+                        (InlineSuggestionsRequestInfo) args.arg2;
                 final IInlineSuggestionsRequestCallback callback =
-                        (IInlineSuggestionsRequestCallback) args.arg4;
+                        (IInlineSuggestionsRequestCallback) args.arg3;
                 try {
-                    ((IInputMethod) args.arg1).onCreateInlineSuggestionsRequest(componentName,
-                            autofillId, callback);
+                    ((IInputMethod) args.arg1).onCreateInlineSuggestionsRequest(requestInfo,
+                            callback);
                 } catch (RemoteException e) {
                     Slog.w(TAG, "RemoteException calling onCreateInlineSuggestionsRequest(): " + e);
                 }
@@ -4549,10 +4547,10 @@
     }
 
     private void onCreateInlineSuggestionsRequest(@UserIdInt int userId,
-            ComponentName componentName, AutofillId autofillId,
+            InlineSuggestionsRequestInfo requestInfo,
             IInlineSuggestionsRequestCallback callback) {
         synchronized (mMethodMap) {
-            onCreateInlineSuggestionsRequestLocked(userId, componentName, autofillId, callback);
+            onCreateInlineSuggestionsRequestLocked(userId, requestInfo, callback);
         }
     }
 
@@ -4620,9 +4618,9 @@
         }
 
         @Override
-        public void onCreateInlineSuggestionsRequest(int userId, ComponentName componentName,
-                AutofillId autofillId, IInlineSuggestionsRequestCallback cb) {
-            mService.onCreateInlineSuggestionsRequest(userId, componentName, autofillId, cb);
+        public void onCreateInlineSuggestionsRequest(int userId,
+                InlineSuggestionsRequestInfo requestInfo, IInlineSuggestionsRequestCallback cb) {
+            mService.onCreateInlineSuggestionsRequest(userId, requestInfo, cb);
         }
 
         @Override
diff --git a/services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java
index 54af694..4904061 100644
--- a/services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java
@@ -63,7 +63,6 @@
 import android.util.SparseArray;
 import android.view.InputChannel;
 import android.view.WindowManager.LayoutParams.SoftInputModeFlags;
-import android.view.autofill.AutofillId;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputConnectionInspector.MissingMethodFlags;
 import android.view.inputmethod.InputMethodInfo;
@@ -88,6 +87,7 @@
 import com.android.internal.view.IInputMethodClient;
 import com.android.internal.view.IInputMethodManager;
 import com.android.internal.view.IInputMethodSession;
+import com.android.internal.view.InlineSuggestionsRequestInfo;
 import com.android.internal.view.InputBindResult;
 import com.android.server.LocalServices;
 import com.android.server.SystemService;
@@ -192,7 +192,7 @@
 
                         @Override
                         public void onCreateInlineSuggestionsRequest(int userId,
-                                ComponentName componentName, AutofillId autofillId,
+                                InlineSuggestionsRequestInfo requestInfo,
                                 IInlineSuggestionsRequestCallback cb) {
                             try {
                                 //TODO(b/137800469): support multi client IMEs.
diff --git a/services/core/java/com/android/server/inputmethod/OWNERS b/services/core/java/com/android/server/inputmethod/OWNERS
new file mode 100644
index 0000000..25ef9fa
--- /dev/null
+++ b/services/core/java/com/android/server/inputmethod/OWNERS
@@ -0,0 +1,6 @@
+set noparent
+
+ogunwale@google.com
+yukawa@google.com
+tarandeep@google.com
+lumark@google.com
diff --git a/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java b/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java
index 9754b6d..63054cf 100644
--- a/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java
+++ b/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java
@@ -23,6 +23,7 @@
 import static android.content.integrity.AppIntegrityManager.EXTRA_STATUS;
 import static android.content.integrity.AppIntegrityManager.STATUS_FAILURE;
 import static android.content.integrity.AppIntegrityManager.STATUS_SUCCESS;
+import static android.content.integrity.InstallerAllowedByManifestFormula.INSTALLER_CERTIFICATE_NOT_EVALUATED;
 import static android.content.integrity.IntegrityUtils.getHexDigest;
 import static android.content.pm.PackageManager.EXTRA_VERIFICATION_ID;
 
@@ -39,13 +40,18 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManagerInternal;
+import android.content.pm.PackageParser;
+import android.content.pm.PackageUserState;
 import android.content.pm.ParceledListSlice;
 import android.content.pm.Signature;
+import android.content.pm.SigningInfo;
+import android.content.pm.parsing.ParsingPackageUtils;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.HandlerThread;
+import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.Slog;
 
@@ -56,6 +62,9 @@
 import com.android.server.integrity.engine.RuleEvaluationEngine;
 import com.android.server.integrity.model.IntegrityCheckResult;
 import com.android.server.integrity.model.RuleMetadata;
+import com.android.server.pm.parsing.PackageInfoUtils;
+import com.android.server.pm.parsing.PackageParser2;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
@@ -67,6 +76,7 @@
 import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
@@ -87,7 +97,7 @@
      * This string will be used as the "installer" for formula evaluation when the app is being
      * installed via ADB.
      */
-    private static final String ADB_INSTALLER = "adb";
+    public static final String ADB_INSTALLER = "adb";
 
     private static final String TAG = "AppIntegrityManagerServiceImpl";
 
@@ -98,8 +108,6 @@
     private static final String ALLOWED_INSTALLER_DELIMITER = ",";
     private static final String INSTALLER_PACKAGE_CERT_DELIMITER = "\\|";
 
-    private static final String INSTALLER_CERT_NOT_APPLICABLE = "";
-
     // Access to files inside mRulesDir is protected by mRulesLock;
     private final Context mContext;
     private final Handler mHandler;
@@ -121,11 +129,11 @@
                 IntegrityFileManager.getInstance(),
                 handlerThread.getThreadHandler(),
                 Settings.Global.getInt(
-                                    context.getContentResolver(),
-                                    Settings.Global.INTEGRITY_CHECK_INCLUDES_RULE_PROVIDER,
-                                    0)
-                            == 1
-                );
+                        context.getContentResolver(),
+                        Settings.Global.INTEGRITY_CHECK_INCLUDES_RULE_PROVIDER,
+                        0)
+                        == 1
+        );
     }
 
     @VisibleForTesting
@@ -260,26 +268,30 @@
                 return;
             }
 
-            String appCert = getCertificateFingerprint(packageInfo);
+            List<String> appCertificates = getCertificateFingerprint(packageInfo);
+            List<String> installerCertificates =
+                    getInstallerCertificateFingerprint(installerPackageName);
+
+            Slog.w(TAG, appCertificates.toString());
 
             AppInstallMetadata.Builder builder = new AppInstallMetadata.Builder();
 
             builder.setPackageName(getPackageNameNormalized(packageName));
-            builder.setAppCertificate(appCert == null ? "" : appCert);
+            builder.setAppCertificates(appCertificates);
             builder.setVersionCode(intent.getLongExtra(EXTRA_LONG_VERSION_CODE, -1));
             builder.setInstallerName(getPackageNameNormalized(installerPackageName));
-            builder.setInstallerCertificate(
-                    getInstallerCertificateFingerprint(installerPackageName));
+            builder.setInstallerCertificates(installerCertificates);
             builder.setIsPreInstalled(isSystemApp(packageName));
+            builder.setAllowedInstallersAndCert(getAllowedInstallers(packageInfo));
 
             AppInstallMetadata appInstallMetadata = builder.build();
-            Map<String, String> allowedInstallers = getAllowedInstallers(packageInfo);
 
             Slog.i(
                     TAG,
-                    "To be verified: " + appInstallMetadata + " installers " + allowedInstallers);
+                    "To be verified: " + appInstallMetadata + " installers " + getAllowedInstallers(
+                            packageInfo));
             IntegrityCheckResult result =
-                    mEvaluationEngine.evaluate(appInstallMetadata, allowedInstallers);
+                    mEvaluationEngine.evaluate(appInstallMetadata);
             Slog.i(
                     TAG,
                     "Integrity check result: "
@@ -290,7 +302,7 @@
             FrameworkStatsLog.write(
                     FrameworkStatsLog.INTEGRITY_CHECK_RESULT_REPORTED,
                     packageName,
-                    appCert,
+                    appCertificates.toString(),
                     appInstallMetadata.getVersionCode(),
                     installerPackageName,
                     result.getLoggingResponse(),
@@ -320,7 +332,7 @@
      * Verify the UID and return the installer package name.
      *
      * @return the package name of the installer, or null if it cannot be determined or it is
-     *     installed via adb.
+     * installed via adb.
      */
     @Nullable
     private String getInstallerPackageName(Intent intent) {
@@ -399,25 +411,29 @@
         }
     }
 
-    private String getCertificateFingerprint(@NonNull PackageInfo packageInfo) {
-        return getFingerprint(getSignature(packageInfo));
-    }
-
-    private String getInstallerCertificateFingerprint(String installer) {
+    private List<String> getInstallerCertificateFingerprint(String installer) {
         if (installer.equals(ADB_INSTALLER) || installer.equals(UNKNOWN_INSTALLER)) {
-            return INSTALLER_CERT_NOT_APPLICABLE;
+            return Collections.emptyList();
         }
         try {
             PackageInfo installerInfo =
                     mContext.getPackageManager()
-                            .getPackageInfo(installer, PackageManager.GET_SIGNATURES);
+                            .getPackageInfo(installer, PackageManager.GET_SIGNING_CERTIFICATES);
             return getCertificateFingerprint(installerInfo);
         } catch (PackageManager.NameNotFoundException e) {
             Slog.i(TAG, "Installer package " + installer + " not found.");
-            return "";
+            return Collections.emptyList();
         }
     }
 
+    private List<String> getCertificateFingerprint(@NonNull PackageInfo packageInfo) {
+        ArrayList<String> certificateFingerprints = new ArrayList();
+        for (Signature signature : getSignatures(packageInfo)) {
+            certificateFingerprints.add(getFingerprint(signature));
+        }
+        return certificateFingerprints;
+    }
+
     /** Get the allowed installers and their associated certificate hashes from <meta-data> tag. */
     private Map<String, String> getAllowedInstallers(@NonNull PackageInfo packageInfo) {
         Map<String, String> packageCertMap = new HashMap<>();
@@ -434,9 +450,9 @@
                         String packageName = getPackageNameNormalized(packageAndCert[0]);
                         String cert = packageAndCert[1];
                         packageCertMap.put(packageName, cert);
-                    } else if (packageAndCert.length == 1
-                            && packageAndCert[0].equals(ADB_INSTALLER)) {
-                        packageCertMap.put(ADB_INSTALLER, INSTALLER_CERT_NOT_APPLICABLE);
+                    } else if (packageAndCert.length == 1) {
+                        packageCertMap.put(getPackageNameNormalized(packageAndCert[0]),
+                                INSTALLER_CERTIFICATE_NOT_EVALUATED);
                     }
                 }
             }
@@ -445,12 +461,15 @@
         return packageCertMap;
     }
 
-    private static Signature getSignature(@NonNull PackageInfo packageInfo) {
-        if (packageInfo.signatures == null || packageInfo.signatures.length < 1) {
+    private static Signature[] getSignatures(@NonNull PackageInfo packageInfo) {
+        SigningInfo signingInfo = packageInfo.signingInfo;
+
+        if (signingInfo == null || signingInfo.getApkContentsSigners().length < 1) {
             throw new IllegalArgumentException("Package signature not found in " + packageInfo);
         }
-        // Only the first element is guaranteed to be present.
-        return packageInfo.signatures[0];
+
+        // We are only interested in evaluating the active signatures.
+        return signingInfo.getApkContentsSigners();
     }
 
     private static String getFingerprint(Signature cert) {
@@ -489,20 +508,14 @@
         if (installationPath == null) {
             throw new IllegalArgumentException("Installation path is null, package not found");
         }
-        PackageInfo packageInfo;
+
+        PackageParser2 parser = new PackageParser2(null, false, null, null, null);
         try {
-            // The installation path will be a directory for a multi-apk install on L+
-            if (installationPath.isDirectory()) {
-                packageInfo = getMultiApkInfo(installationPath);
-            } else {
-                packageInfo =
-                        mContext.getPackageManager()
-                                .getPackageArchiveInfo(
-                                        installationPath.getPath(),
-                                        PackageManager.GET_SIGNATURES
-                                                | PackageManager.GET_META_DATA);
-            }
-            return packageInfo;
+            ParsedPackage pkg = parser.parsePackage(installationPath, 0, false);
+            int flags = PackageManager.GET_SIGNING_CERTIFICATES | PackageManager.GET_META_DATA;
+            pkg.setSigningDetails(ParsingPackageUtils.collectCertificates(pkg, false));
+            return PackageInfoUtils.generate(pkg, null, flags, 0, 0, null, new PackageUserState(),
+                    UserHandle.getCallingUserId(), null);
         } catch (Exception e) {
             throw new IllegalArgumentException("Exception reading " + dataUri, e);
         }
@@ -515,7 +528,8 @@
                 mContext.getPackageManager()
                         .getPackageArchiveInfo(
                                 baseFile.getAbsolutePath(),
-                                PackageManager.GET_SIGNATURES | PackageManager.GET_META_DATA);
+                                PackageManager.GET_SIGNING_CERTIFICATES
+                                        | PackageManager.GET_META_DATA);
 
         if (basePackageInfo == null) {
             for (File apkFile : multiApkDirectory.listFiles()) {
diff --git a/services/core/java/com/android/server/integrity/TEST_MAPPING b/services/core/java/com/android/server/integrity/TEST_MAPPING
index b45b4ea..ca7f396 100644
--- a/services/core/java/com/android/server/integrity/TEST_MAPPING
+++ b/services/core/java/com/android/server/integrity/TEST_MAPPING
@@ -5,12 +5,6 @@
       "options": [
         {
           "include-filter": "com.android.server.integrity."
-        },
-        {
-          "include-annotation": "android.platform.test.annotations.Presubmit"
-        },
-        {
-          "exclude-annotation": "androidx.test.filters.FlakyTest"
         }
       ]
     }
diff --git a/services/core/java/com/android/server/integrity/engine/RuleEvaluationEngine.java b/services/core/java/com/android/server/integrity/engine/RuleEvaluationEngine.java
index 79e69e1..61da45d 100644
--- a/services/core/java/com/android/server/integrity/engine/RuleEvaluationEngine.java
+++ b/services/core/java/com/android/server/integrity/engine/RuleEvaluationEngine.java
@@ -17,9 +17,6 @@
 package com.android.server.integrity.engine;
 
 import android.content.integrity.AppInstallMetadata;
-import android.content.integrity.AtomicFormula;
-import android.content.integrity.CompoundFormula;
-import android.content.integrity.IntegrityFormula;
 import android.content.integrity.Rule;
 import android.util.Slog;
 
@@ -28,10 +25,8 @@
 import com.android.server.integrity.model.IntegrityCheckResult;
 
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
-import java.util.Map;
-import java.util.Optional;
 
 /**
  * The engine used to evaluate rules against app installs.
@@ -69,16 +64,15 @@
      * @return result of the integrity check
      */
     public IntegrityCheckResult evaluate(
-            AppInstallMetadata appInstallMetadata, Map<String, String> allowedInstallers) {
+            AppInstallMetadata appInstallMetadata) {
         List<Rule> rules = loadRules(appInstallMetadata);
-        allowedInstallersRule(allowedInstallers).ifPresent(rules::add);
         return RuleEvaluator.evaluateRules(rules, appInstallMetadata);
     }
 
     private List<Rule> loadRules(AppInstallMetadata appInstallMetadata) {
         if (!mIntegrityFileManager.initialized()) {
-            Slog.w(TAG, "Integrity rule files are not available. Evaluating only manifest rules.");
-            return new ArrayList<>();
+            Slog.w(TAG, "Integrity rule files are not available.");
+            return Collections.emptyList();
         }
 
         try {
@@ -88,41 +82,4 @@
             return new ArrayList<>();
         }
     }
-
-    private static Optional<Rule> allowedInstallersRule(Map<String, String> allowedInstallers) {
-        if (allowedInstallers.isEmpty()) {
-            return Optional.empty();
-        }
-
-        List<IntegrityFormula> formulas = new ArrayList<>(allowedInstallers.size());
-        allowedInstallers.forEach(
-                (installer, cert) -> {
-                    formulas.add(allowedInstallerFormula(installer, cert));
-                });
-
-        // We need this special case since OR-formulas require at least two operands.
-        IntegrityFormula allInstallersFormula =
-                formulas.size() == 1
-                        ? formulas.get(0)
-                        : new CompoundFormula(CompoundFormula.OR, formulas);
-
-        return Optional.of(
-                new Rule(
-                        new CompoundFormula(
-                                CompoundFormula.NOT, Arrays.asList(allInstallersFormula)),
-                        Rule.DENY));
-    }
-
-    private static IntegrityFormula allowedInstallerFormula(String installer, String cert) {
-        return new CompoundFormula(
-                CompoundFormula.AND,
-                Arrays.asList(
-                        new AtomicFormula.StringAtomicFormula(
-                                AtomicFormula.INSTALLER_NAME,
-                                installer,
-                                /* isHashedValue= */ false),
-                        new AtomicFormula.StringAtomicFormula(
-                                AtomicFormula.INSTALLER_CERTIFICATE, cert, /* isHashedValue= */
-                                false)));
-    }
 }
diff --git a/services/core/java/com/android/server/integrity/engine/RuleLoader.java b/services/core/java/com/android/server/integrity/engine/RuleLoader.java
deleted file mode 100644
index 4ba2bfb..0000000
--- a/services/core/java/com/android/server/integrity/engine/RuleLoader.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.server.integrity.engine;
-
-import android.content.integrity.Rule;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A helper class for loading rules to the rule evaluation engine.
- *
- * <p>Expose fine-grained APIs for loading rules to be passed to the rule evaluation engine.
- *
- * <p>It supports:
- * <ul>
- *     <li>Loading rules based on some keys, such as PACKAGE_NAME and APP_CERT.</li>
- * </ul>
- *
- * <p>It does NOT support:
- * <ul>
- *     <li>Loading the list of all rules.</li>
- *     <li>Merging rules resulting from different APIs.</li>
- * </ul>
- */
-final class RuleLoader {
-
-    List<Rule> loadRulesByPackageName(String packageName) {
-        // TODO: Add logic based on rule storage.
-        return new ArrayList<>();
-    }
-
-    List<Rule> loadRulesByAppCertificate(String appCertificate) {
-        // TODO: Add logic based on rule storage.
-        return new ArrayList<>();
-    }
-
-    List<Rule> loadRulesByInstallerName(String installerName) {
-        // TODO: Add logic based on rule storage.
-        return new ArrayList<>();
-    }
-
-    List<Rule> loadRulesByInstallerCertificate(String installerCertificate) {
-        // TODO: Add logic based on rule storage.
-        return new ArrayList<>();
-    }
-}
diff --git a/services/core/java/com/android/server/integrity/model/ComponentBitSize.java b/services/core/java/com/android/server/integrity/model/ComponentBitSize.java
index c389963..94e6708 100644
--- a/services/core/java/com/android/server/integrity/model/ComponentBitSize.java
+++ b/services/core/java/com/android/server/integrity/model/ComponentBitSize.java
@@ -29,13 +29,14 @@
     public static final int KEY_BITS = 4;
     public static final int OPERATOR_BITS = 3;
     public static final int CONNECTOR_BITS = 2;
-    public static final int SEPARATOR_BITS = 2;
+    public static final int SEPARATOR_BITS = 3;
     public static final int VALUE_SIZE_BITS = 8;
     public static final int IS_HASHED_BITS = 1;
 
     public static final int ATOMIC_FORMULA_START = 0;
     public static final int COMPOUND_FORMULA_START = 1;
     public static final int COMPOUND_FORMULA_END = 2;
+    public static final int INSTALLER_ALLOWED_BY_MANIFEST_START = 3;
 
     public static final int DEFAULT_FORMAT_VERSION = 1;
     public static final int SIGNAL_BIT = 1;
diff --git a/services/core/java/com/android/server/integrity/parser/RuleBinaryParser.java b/services/core/java/com/android/server/integrity/parser/RuleBinaryParser.java
index 4b8efaf..a290eb3 100644
--- a/services/core/java/com/android/server/integrity/parser/RuleBinaryParser.java
+++ b/services/core/java/com/android/server/integrity/parser/RuleBinaryParser.java
@@ -23,6 +23,7 @@
 import static com.android.server.integrity.model.ComponentBitSize.CONNECTOR_BITS;
 import static com.android.server.integrity.model.ComponentBitSize.EFFECT_BITS;
 import static com.android.server.integrity.model.ComponentBitSize.FORMAT_VERSION_BITS;
+import static com.android.server.integrity.model.ComponentBitSize.INSTALLER_ALLOWED_BY_MANIFEST_START;
 import static com.android.server.integrity.model.ComponentBitSize.IS_HASHED_BITS;
 import static com.android.server.integrity.model.ComponentBitSize.KEY_BITS;
 import static com.android.server.integrity.model.ComponentBitSize.OPERATOR_BITS;
@@ -35,6 +36,7 @@
 
 import android.content.integrity.AtomicFormula;
 import android.content.integrity.CompoundFormula;
+import android.content.integrity.InstallerAllowedByManifestFormula;
 import android.content.integrity.IntegrityFormula;
 import android.content.integrity.Rule;
 
@@ -66,8 +68,7 @@
     }
 
     private List<Rule> parseRules(
-            RandomAccessInputStream randomAccessInputStream,
-            List<RuleIndexRange> indexRanges)
+            RandomAccessInputStream randomAccessInputStream, List<RuleIndexRange> indexRanges)
             throws IOException {
 
         // Read the rule binary file format version.
@@ -94,8 +95,7 @@
     }
 
     private List<Rule> parseIndexedRules(
-            RandomAccessInputStream randomAccessInputStream,
-            List<RuleIndexRange> indexRanges)
+            RandomAccessInputStream randomAccessInputStream, List<RuleIndexRange> indexRanges)
             throws IOException {
         List<Rule> parsedRules = new ArrayList<>();
 
@@ -140,6 +140,8 @@
                 return parseCompoundFormula(bitInputStream);
             case COMPOUND_FORMULA_END:
                 return null;
+            case INSTALLER_ALLOWED_BY_MANIFEST_START:
+                return new InstallerAllowedByManifestFormula();
             default:
                 throw new IllegalArgumentException(
                         String.format("Unknown formula separator: %s", separator));
@@ -168,6 +170,7 @@
             case AtomicFormula.APP_CERTIFICATE:
             case AtomicFormula.INSTALLER_NAME:
             case AtomicFormula.INSTALLER_CERTIFICATE:
+            case AtomicFormula.STAMP_CERTIFICATE_HASH:
                 boolean isHashedValue = bitInputStream.getNext(IS_HASHED_BITS) == 1;
                 int valueSize = bitInputStream.getNext(VALUE_SIZE_BITS);
                 String stringValue = getStringValue(bitInputStream, valueSize, isHashedValue);
@@ -179,6 +182,7 @@
                 long longValue = (upper << 32) | lower;
                 return new AtomicFormula.LongAtomicFormula(key, operator, longValue);
             case AtomicFormula.PRE_INSTALLED:
+            case AtomicFormula.STAMP_TRUSTED:
                 boolean booleanValue = getBooleanValue(bitInputStream);
                 return new AtomicFormula.BooleanAtomicFormula(key, booleanValue);
             default:
diff --git a/services/core/java/com/android/server/integrity/parser/RuleIndexingController.java b/services/core/java/com/android/server/integrity/parser/RuleIndexingController.java
index 87eee4e..60e8cce 100644
--- a/services/core/java/com/android/server/integrity/parser/RuleIndexingController.java
+++ b/services/core/java/com/android/server/integrity/parser/RuleIndexingController.java
@@ -63,10 +63,12 @@
                 searchIndexingKeysRangeContainingKey(
                         sPackageNameBasedIndexes, appInstallMetadata.getPackageName()));
 
-        // Add the range for app certificate indexes rules.
-        indexRanges.add(
-                searchIndexingKeysRangeContainingKey(
-                        sAppCertificateBasedIndexes, appInstallMetadata.getAppCertificate()));
+        // Add the range for app certificate indexes rules of all certificates.
+        for (String appCertificate : appInstallMetadata.getAppCertificates()) {
+            indexRanges.add(
+                    searchIndexingKeysRangeContainingKey(
+                            sAppCertificateBasedIndexes, appCertificate));
+        }
 
         // Add the range for unindexed rules.
         indexRanges.add(
diff --git a/services/core/java/com/android/server/integrity/serializer/RuleBinarySerializer.java b/services/core/java/com/android/server/integrity/serializer/RuleBinarySerializer.java
index 00e0545..8ba5870 100644
--- a/services/core/java/com/android/server/integrity/serializer/RuleBinarySerializer.java
+++ b/services/core/java/com/android/server/integrity/serializer/RuleBinarySerializer.java
@@ -23,6 +23,7 @@
 import static com.android.server.integrity.model.ComponentBitSize.DEFAULT_FORMAT_VERSION;
 import static com.android.server.integrity.model.ComponentBitSize.EFFECT_BITS;
 import static com.android.server.integrity.model.ComponentBitSize.FORMAT_VERSION_BITS;
+import static com.android.server.integrity.model.ComponentBitSize.INSTALLER_ALLOWED_BY_MANIFEST_START;
 import static com.android.server.integrity.model.ComponentBitSize.KEY_BITS;
 import static com.android.server.integrity.model.ComponentBitSize.OPERATOR_BITS;
 import static com.android.server.integrity.model.ComponentBitSize.SEPARATOR_BITS;
@@ -36,6 +37,7 @@
 
 import android.content.integrity.AtomicFormula;
 import android.content.integrity.CompoundFormula;
+import android.content.integrity.InstallerAllowedByManifestFormula;
 import android.content.integrity.IntegrityFormula;
 import android.content.integrity.IntegrityUtils;
 import android.content.integrity.Rule;
@@ -202,6 +204,8 @@
             serializeAtomicFormula((AtomicFormula) formula, bitOutputStream);
         } else if (formula instanceof CompoundFormula) {
             serializeCompoundFormula((CompoundFormula) formula, bitOutputStream);
+        } else if (formula instanceof InstallerAllowedByManifestFormula) {
+            bitOutputStream.setNext(SEPARATOR_BITS, INSTALLER_ALLOWED_BY_MANIFEST_START);
         } else {
             throw new IllegalArgumentException(
                     String.format("Invalid formula type: %s", formula.getClass()));
diff --git a/services/core/java/com/android/server/integrity/serializer/RuleIndexingDetailsIdentifier.java b/services/core/java/com/android/server/integrity/serializer/RuleIndexingDetailsIdentifier.java
index 6f7d172..e723559 100644
--- a/services/core/java/com/android/server/integrity/serializer/RuleIndexingDetailsIdentifier.java
+++ b/services/core/java/com/android/server/integrity/serializer/RuleIndexingDetailsIdentifier.java
@@ -84,6 +84,7 @@
                 return getIndexingDetailsForStringAtomicFormula(
                         (AtomicFormula.StringAtomicFormula) formula);
             case IntegrityFormula.LONG_ATOMIC_FORMULA_TAG:
+            case IntegrityFormula.INSTALLER_ALLOWED_BY_MANIFEST_FORMULA_TAG:
             case IntegrityFormula.BOOLEAN_ATOMIC_FORMULA_TAG:
                 // Package name and app certificate related formulas are string atomic formulas.
                 return new RuleIndexingDetails(NOT_INDEXED);
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
index 5683e69..a42dec8 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -40,6 +40,7 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.Preconditions;
+import com.android.internal.BrightnessSynchronizer;
 import com.android.server.SystemService;
 
 import java.util.ArrayList;
@@ -249,28 +250,21 @@
         }
 
         @Override
-        public void setBrightnessFloat(float brightness) {
-            if (!Float.isNaN(brightness)) {
-                setBrightness(brightness, 0, BRIGHTNESS_MODE_USER);
-            }
-        }
-
-        @Override
-        public void setBrightness(int brightness) {
+        public void setBrightness(float brightness) {
             setBrightness(brightness, BRIGHTNESS_MODE_USER);
         }
 
         @Override
-        public void setBrightness(int brightness, int brightnessMode) {
-            setBrightness(Float.NaN, brightness, brightnessMode);
-        }
-
-        private void setBrightness(float brightnessFloat, int brightness, int brightnessMode) {
+        public void setBrightness(float brightness, int brightnessMode) {
+            if (Float.isNaN(brightness)) {
+                Slog.w(TAG, "Brightness is not valid: " + brightness);
+                return;
+            }
             synchronized (this) {
                 // LOW_PERSISTENCE cannot be manually set
                 if (brightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE) {
                     Slog.w(TAG, "setBrightness with LOW_PERSISTENCE unexpected #" + mHwLight.id
-                            + ": brightness=0x" + Integer.toHexString(brightness));
+                            + ": brightness=" + brightness);
                     return;
                 }
                 // Ideally, we'd like to set the brightness mode through the SF/HWC as well, but
@@ -278,6 +272,7 @@
                 // anything but USER or the device shouldBeInLowPersistenceMode().
                 if (brightnessMode == BRIGHTNESS_MODE_USER && !shouldBeInLowPersistenceMode()
                         && mSurfaceControlMaximumBrightness == 255) {
+                    // New system
                     // TODO: the last check should be mSurfaceControlMaximumBrightness != 0; the
                     // reason we enforce 255 right now is to stay consistent with the old path. In
                     // the future, the framework should be refactored so that brightness is a float
@@ -286,17 +281,12 @@
                     if (DEBUG) {
                         Slog.d(TAG, "Using new setBrightness path!");
                     }
-
-                    if (!Float.isNaN(brightnessFloat)) {
-                        SurfaceControl.setDisplayBrightness(mDisplayToken, brightnessFloat);
-                    } else if (brightness == 0) {
-                        SurfaceControl.setDisplayBrightness(mDisplayToken, -1.0f);
-                    } else {
-                        SurfaceControl.setDisplayBrightness(mDisplayToken,
-                                (float) (brightness - 1) / (mSurfaceControlMaximumBrightness - 1));
-                    }
+                    SurfaceControl.setDisplayBrightness(mDisplayToken, brightness);
                 } else {
-                    int color = brightness & 0x000000ff;
+                    // Old system
+                    int brightnessInt = BrightnessSynchronizer.brightnessFloatToInt(
+                            getContext(), brightness);
+                    int color = brightnessInt & 0x000000ff;
                     color = 0xff000000 | (color << 16) | (color << 8) | color;
                     setLightLocked(color, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
                 }
diff --git a/services/core/java/com/android/server/lights/LogicalLight.java b/services/core/java/com/android/server/lights/LogicalLight.java
index 33dfbb4..7491cec 100644
--- a/services/core/java/com/android/server/lights/LogicalLight.java
+++ b/services/core/java/com/android/server/lights/LogicalLight.java
@@ -57,18 +57,12 @@
     /**
      * Set the brightness of a display.
      */
-    public abstract void setBrightness(int brightness);
+    public abstract void setBrightness(float brightness);
 
     /**
      * Set the brightness and mode of a display.
      */
-    public abstract void setBrightness(int brightness, int brightnessMode);
-
-    /**
-     * Set the brightness of a display using the brightness range defines in a
-     * display-device-configuration file.
-     */
-    public abstract void setBrightnessFloat(float brightness);
+    public abstract void setBrightness(float brightness, int brightnessMode);
 
     /**
      * Set the color of a light.
diff --git a/services/core/java/com/android/server/location/AbstractLocationProvider.java b/services/core/java/com/android/server/location/AbstractLocationProvider.java
index 997f21c..433ec43 100644
--- a/services/core/java/com/android/server/location/AbstractLocationProvider.java
+++ b/services/core/java/com/android/server/location/AbstractLocationProvider.java
@@ -16,6 +16,8 @@
 
 package com.android.server.location;
 
+import static com.android.internal.util.function.pooled.PooledLambda.obtainRunnable;
+
 import android.annotation.Nullable;
 import android.content.Context;
 import android.location.Location;
@@ -335,7 +337,8 @@
      */
     public final void setRequest(ProviderRequest request) {
         // all calls into the provider must be moved onto the provider thread to prevent deadlock
-        mExecutor.execute(() -> onSetRequest(request));
+        mExecutor.execute(obtainRunnable(AbstractLocationProvider::onSetRequest, this, request)
+                .recycleOnUse());
     }
 
     /**
@@ -348,7 +351,13 @@
      */
     public final void sendExtraCommand(int uid, int pid, String command, Bundle extras) {
         // all calls into the provider must be moved onto the provider thread to prevent deadlock
-        mExecutor.execute(() -> onExtraCommand(uid, pid, command, extras));
+
+        // the integer boxing done here likely cancels out any gains from removing lambda
+        // allocation, but since this an infrequently used api with no real performance needs, we
+        // we use pooled lambdas anyways for consistency.
+        mExecutor.execute(
+                obtainRunnable(AbstractLocationProvider::onExtraCommand, this, uid, pid, command,
+                        extras).recycleOnUse());
     }
 
     /**
@@ -361,7 +370,9 @@
      */
     public final void requestSetAllowed(boolean allowed) {
         // all calls into the provider must be moved onto the provider thread to prevent deadlock
-        mExecutor.execute(() -> onRequestSetAllowed(allowed));
+        mExecutor.execute(
+                obtainRunnable(AbstractLocationProvider::onRequestSetAllowed, this, allowed)
+                        .recycleOnUse());
     }
 
     /**
diff --git a/services/core/java/com/android/server/location/ContextHubService.java b/services/core/java/com/android/server/location/ContextHubService.java
index e79eddf..48b2270 100644
--- a/services/core/java/com/android/server/location/ContextHubService.java
+++ b/services/core/java/com/android/server/location/ContextHubService.java
@@ -18,14 +18,16 @@
 
 import android.app.PendingIntent;
 import android.content.Context;
+import android.database.ContentObserver;
 import android.hardware.contexthub.V1_0.AsyncEventType;
 import android.hardware.contexthub.V1_0.ContextHub;
 import android.hardware.contexthub.V1_0.ContextHubMsg;
 import android.hardware.contexthub.V1_0.HubAppInfo;
-import android.hardware.contexthub.V1_0.IContexthub;
 import android.hardware.contexthub.V1_0.IContexthubCallback;
 import android.hardware.contexthub.V1_0.Result;
 import android.hardware.contexthub.V1_0.TransactionResult;
+import android.hardware.contexthub.V1_1.Setting;
+import android.hardware.contexthub.V1_1.SettingValue;
 import android.hardware.location.ContextHubInfo;
 import android.hardware.location.ContextHubMessage;
 import android.hardware.location.ContextHubTransaction;
@@ -40,8 +42,11 @@
 import android.hardware.location.NanoAppInstanceInfo;
 import android.hardware.location.NanoAppMessage;
 import android.hardware.location.NanoAppState;
+import android.location.LocationManager;
 import android.os.RemoteCallbackList;
 import android.os.RemoteException;
+import android.os.UserHandle;
+import android.provider.Settings;
 import android.util.Log;
 import android.util.proto.ProtoOutputStream;
 
@@ -56,7 +61,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.NoSuchElementException;
 
 /**
  * @hide
@@ -92,7 +96,7 @@
             new RemoteCallbackList<>();
 
     // Proxy object to communicate with the Context Hub HAL
-    private final IContexthub mContextHubProxy;
+    private final IContextHubWrapper mContextHubWrapper;
 
     // The manager for transaction queue
     private final ContextHubTransactionManager mTransactionManager;
@@ -145,8 +149,8 @@
     public ContextHubService(Context context) {
         mContext = context;
 
-        mContextHubProxy = getContextHubProxy();
-        if (mContextHubProxy == null) {
+        mContextHubWrapper = getContextHubWrapper();
+        if (mContextHubWrapper == null) {
             mTransactionManager = null;
             mClientManager = null;
             mDefaultClientMap = Collections.emptyMap();
@@ -155,13 +159,13 @@
             return;
         }
 
-        mClientManager = new ContextHubClientManager(mContext, mContextHubProxy);
+        mClientManager = new ContextHubClientManager(mContext, mContextHubWrapper.getHub());
         mTransactionManager = new ContextHubTransactionManager(
-                mContextHubProxy, mClientManager, mNanoAppStateManager);
+                mContextHubWrapper.getHub(), mClientManager, mNanoAppStateManager);
 
         List<ContextHub> hubList;
         try {
-            hubList = mContextHubProxy.getHubs();
+            hubList = mContextHubWrapper.getHub().getHubs();
         } catch (RemoteException e) {
             Log.e(TAG, "RemoteException while getting Context Hub info", e);
             hubList = Collections.emptyList();
@@ -178,7 +182,7 @@
             defaultClientMap.put(contextHubId, client);
 
             try {
-                mContextHubProxy.registerCallback(
+                mContextHubWrapper.getHub().registerCallback(
                         contextHubId, new ContextHubServiceCallback(contextHubId));
             } catch (RemoteException e) {
                 Log.e(TAG, "RemoteException while registering service callback for hub (ID = "
@@ -190,6 +194,19 @@
             queryNanoAppsInternal(contextHubId);
         }
         mDefaultClientMap = Collections.unmodifiableMap(defaultClientMap);
+
+        if (mContextHubWrapper.supportsSettingNotifications()) {
+            sendLocationSettingUpdate();
+            mContext.getContentResolver().registerContentObserver(
+                    Settings.Secure.getUriFor(Settings.Secure.LOCATION_MODE),
+                    true /* notifyForDescendants */,
+                    new ContentObserver(null /* handler */) {
+                        @Override
+                        public void onChange(boolean selfChange) {
+                            sendLocationSettingUpdate();
+                        }
+                    }, UserHandle.USER_ALL);
+        }
     }
 
     /**
@@ -239,19 +256,15 @@
     }
 
     /**
-     * @return the IContexthub proxy interface
+     * @return the IContextHubWrapper interface
      */
-    private IContexthub getContextHubProxy() {
-        IContexthub proxy = null;
-        try {
-            proxy = IContexthub.getService(true /* retry */);
-        } catch (RemoteException e) {
-            Log.e(TAG, "RemoteException while attaching to Context Hub HAL proxy", e);
-        } catch (NoSuchElementException e) {
-            Log.i(TAG, "Context Hub HAL service not found");
+    private IContextHubWrapper getContextHubWrapper() {
+        IContextHubWrapper wrapper = IContextHubWrapper.maybeConnectTo1_1();
+        if (wrapper == null) {
+            wrapper = IContextHubWrapper.maybeConnectTo1_0();
         }
 
-        return proxy;
+        return wrapper;
     }
 
     @Override
@@ -355,7 +368,7 @@
     @Override
     public int loadNanoApp(int contextHubHandle, NanoApp nanoApp) throws RemoteException {
         checkPermissions();
-        if (mContextHubProxy == null) {
+        if (mContextHubWrapper == null) {
             return -1;
         }
         if (!isValidContextHubId(contextHubHandle)) {
@@ -382,7 +395,7 @@
     @Override
     public int unloadNanoApp(int nanoAppHandle) throws RemoteException {
         checkPermissions();
-        if (mContextHubProxy == null) {
+        if (mContextHubWrapper == null) {
             return -1;
         }
 
@@ -444,7 +457,7 @@
      * @throws IllegalStateException if the transaction queue is full
      */
     private int queryNanoAppsInternal(int contextHubId) {
-        if (mContextHubProxy == null) {
+        if (mContextHubWrapper == null) {
             return Result.UNKNOWN_FAILURE;
         }
 
@@ -461,7 +474,7 @@
     public int sendMessage(int contextHubHandle, int nanoAppHandle, ContextHubMessage msg)
             throws RemoteException {
         checkPermissions();
-        if (mContextHubProxy == null) {
+        if (mContextHubWrapper == null) {
             return -1;
         }
         if (msg == null) {
@@ -563,6 +576,8 @@
      */
     private void handleHubEventCallback(int contextHubId, int eventType) {
         if (eventType == AsyncEventType.RESTARTED) {
+            sendLocationSettingUpdate();
+
             mTransactionManager.onHubReset();
             queryNanoAppsInternal(contextHubId);
 
@@ -870,12 +885,12 @@
      * @param callback        the client transaction callback interface
      * @param transactionType the type of the transaction
      *
-     * @return {@code true} if mContextHubProxy and contextHubId is valid, {@code false} otherwise
+     * @return {@code true} if mContextHubWrapper and contextHubId is valid, {@code false} otherwise
      */
     private boolean checkHalProxyAndContextHubId(
             int contextHubId, IContextHubTransactionCallback callback,
             @ContextHubTransaction.Type int transactionType) {
-        if (mContextHubProxy == null) {
+        if (mContextHubWrapper == null) {
             try {
                 callback.onTransactionComplete(
                         ContextHubTransaction.RESULT_FAILED_HAL_UNAVAILABLE);
@@ -898,4 +913,15 @@
 
         return true;
     }
+
+    /**
+     * Obtains the latest location setting value and notifies the Contexthub.
+     */
+    private void sendLocationSettingUpdate() {
+        boolean enabled = mContext.getSystemService(LocationManager.class)
+                .isLocationEnabledForUser(UserHandle.CURRENT);
+
+        mContextHubWrapper.onSettingChanged(Setting.LOCATION,
+                enabled ? SettingValue.ENABLED : SettingValue.DISABLED);
+    }
 }
diff --git a/services/core/java/com/android/server/location/GnssAntennaInfoProvider.java b/services/core/java/com/android/server/location/GnssAntennaInfoProvider.java
new file mode 100644
index 0000000..bc50ebc
--- /dev/null
+++ b/services/core/java/com/android/server/location/GnssAntennaInfoProvider.java
@@ -0,0 +1,146 @@
+/*
+ * 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.location;
+
+import android.content.Context;
+import android.location.GnssAntennaInfo;
+import android.location.IGnssAntennaInfoListener;
+import android.os.Handler;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.util.List;
+
+/**
+ * An base implementation for GNSS antenna info provider. It abstracts out the responsibility of
+ * handling listeners, while still allowing technology specific implementations to be built.
+ *
+ * @hide
+ */
+public abstract class GnssAntennaInfoProvider
+        extends RemoteListenerHelper<Void, IGnssAntennaInfoListener> {
+    private static final String TAG = "GnssAntennaInfoProvider";
+    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+    private final GnssAntennaInfoProviderNative mNative;
+
+    private boolean mIsListeningStarted;
+
+    protected GnssAntennaInfoProvider(Context context, Handler handler) {
+        this(context, handler, new GnssAntennaInfoProviderNative());
+    }
+
+    @VisibleForTesting
+    public GnssAntennaInfoProvider(
+            Context context, Handler handler, GnssAntennaInfoProviderNative aNative) {
+        super(context, handler, TAG);
+        mNative = aNative;
+    }
+
+    void resumeIfStarted() {
+        if (DEBUG) {
+            Log.d(TAG, "resumeIfStarted");
+        }
+        if (mIsListeningStarted) {
+            mNative.startAntennaInfoListening();
+        }
+    }
+
+
+    @Override
+    public boolean isAvailableInPlatform() {
+        return mNative.isAntennaInfoSupported();
+    }
+
+    @Override
+    protected int registerWithService() {
+        boolean started = mNative.startAntennaInfoListening();
+        if (started) {
+            mIsListeningStarted = true;
+            return RemoteListenerHelper.RESULT_SUCCESS;
+        }
+        return RemoteListenerHelper.RESULT_INTERNAL_ERROR;
+    }
+
+    @Override
+    protected void unregisterFromService() {
+        boolean stopped = mNative.stopAntennaInfoListening();
+        if (stopped) {
+            mIsListeningStarted = false;
+        }
+    }
+
+    /** Handle GNSS capabilities update from the GNSS HAL implementation. */
+    public void onCapabilitiesUpdated(boolean isAntennaInfoSupported) {
+        setSupported(isAntennaInfoSupported);
+        updateResult();
+    }
+
+    /** Handle GNSS enabled changes.*/
+    public void onGpsEnabledChanged() {
+        tryUpdateRegistrationWithService();
+        updateResult();
+    }
+
+    @Override
+    protected ListenerOperation<IGnssAntennaInfoListener> getHandlerOperation(int result) {
+        return (IGnssAntennaInfoListener listener,
+                CallerIdentity callerIdentity) -> {
+                // Do nothing, as GnssAntennaInfo.Callback does not have an onStatusChanged method.
+        };
+    }
+
+    /** Handle Gnss Antenna Info report. */
+    public void onGnssAntennaInfoAvailable(final List<GnssAntennaInfo> gnssAntennaInfos) {
+        foreach((IGnssAntennaInfoListener listener, CallerIdentity callerIdentity) -> {
+            if (!hasPermission(mContext, callerIdentity)) {
+                logPermissionDisabledEventNotReported(
+                        TAG, callerIdentity.mPackageName, "GNSS antenna info");
+                return;
+            }
+            listener.onGnssAntennaInfoReceived(gnssAntennaInfos);
+        });
+    }
+
+    /**
+     * Wrapper class for native methods. This is mocked for testing.
+     */
+    @VisibleForTesting
+    public static class GnssAntennaInfoProviderNative {
+
+        public boolean isAntennaInfoSupported() {
+            return native_is_antenna_info_supported();
+        }
+
+        /** Start antenna info listening. */
+        public boolean startAntennaInfoListening() {
+            return native_start_antenna_info_listening();
+        }
+
+        /** Stop antenna info listening. */
+        public boolean stopAntennaInfoListening() {
+            return native_stop_antenna_info_listening();
+        }
+    }
+
+    private static native boolean native_is_antenna_info_supported();
+
+    private static native boolean native_start_antenna_info_listening();
+
+    private static native boolean native_stop_antenna_info_listening();
+}
diff --git a/services/core/java/com/android/server/location/GnssCapabilitiesProvider.java b/services/core/java/com/android/server/location/GnssCapabilitiesProvider.java
index 88ff6e7..5c8507f 100644
--- a/services/core/java/com/android/server/location/GnssCapabilitiesProvider.java
+++ b/services/core/java/com/android/server/location/GnssCapabilitiesProvider.java
@@ -77,6 +77,9 @@
         if (hasCapability(topHalCapabilities, GnssLocationProvider.GPS_CAPABILITY_NAV_MESSAGES)) {
             gnssCapabilities |= GnssCapabilities.NAV_MESSAGES;
         }
+        if (hasCapability(topHalCapabilities, GnssLocationProvider.GPS_CAPABILITY_ANTENNA_INFO)) {
+            gnssCapabilities |= GnssCapabilities.ANTENNA_INFO;
+        }
 
         synchronized (this) {
             mGnssCapabilities &= ~GNSS_CAPABILITIES_TOP_HAL;
diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java
index bcac473..5f44e04 100644
--- a/services/core/java/com/android/server/location/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/GnssLocationProvider.java
@@ -29,6 +29,7 @@
 import android.hardware.location.GeofenceHardwareImpl;
 import android.location.Criteria;
 import android.location.FusedBatchOptions;
+import android.location.GnssAntennaInfo;
 import android.location.GnssMeasurementsEvent;
 import android.location.GnssNavigationMessage;
 import android.location.GnssStatus;
@@ -182,6 +183,7 @@
     public static final int GPS_CAPABILITY_LOW_POWER_MODE = 0x0000100;
     public static final int GPS_CAPABILITY_SATELLITE_BLACKLIST = 0x0000200;
     public static final int GPS_CAPABILITY_MEASUREMENT_CORRECTIONS = 0x0000400;
+    public static final int GPS_CAPABILITY_ANTENNA_INFO = 0x0000800;
 
     // The AGPS SUPL mode
     private static final int AGPS_SUPL_MODE_MSA = 0x02;
@@ -397,6 +399,7 @@
     private final GnssStatusListenerHelper mGnssStatusListenerHelper;
     private final GnssMeasurementsProvider mGnssMeasurementsProvider;
     private final GnssMeasurementCorrectionsProvider mGnssMeasurementCorrectionsProvider;
+    private final GnssAntennaInfoProvider mGnssAntennaInfoProvider;
     private final GnssNavigationMessageProvider mGnssNavigationMessageProvider;
     private final LocationChangeListener mNetworkLocationListener = new NetworkLocationListener();
     private final LocationChangeListener mFusedLocationListener = new FusedLocationListener();
@@ -469,6 +472,10 @@
         return mGnssMeasurementCorrectionsProvider;
     }
 
+    public GnssAntennaInfoProvider getGnssAntennaInfoProvider() {
+        return mGnssAntennaInfoProvider;
+    }
+
     public GnssNavigationMessageProvider getGnssNavigationMessageProvider() {
         return mGnssNavigationMessageProvider;
     }
@@ -693,6 +700,13 @@
 
         mGnssMeasurementCorrectionsProvider = new GnssMeasurementCorrectionsProvider(mHandler);
 
+        mGnssAntennaInfoProvider = new GnssAntennaInfoProvider(mContext, mHandler) {
+            @Override
+            protected boolean isGpsEnabled() {
+                return GnssLocationProvider.this.isGpsEnabled();
+            }
+        };
+
         mGnssNavigationMessageProvider = new GnssNavigationMessageProvider(mContext, mHandler) {
             @Override
             protected boolean isGpsEnabled() {
@@ -992,6 +1006,7 @@
 
             mGnssMeasurementsProvider.onGpsEnabledChanged();
             mGnssNavigationMessageProvider.onGpsEnabledChanged();
+            mGnssAntennaInfoProvider.onGpsEnabledChanged();
             mGnssBatchingProvider.enable();
             if (mGnssVisibilityControl != null) {
                 mGnssVisibilityControl.onGpsEnabledChanged(/* isEnabled= */ true);
@@ -1018,6 +1033,7 @@
         // do this before releasing wakelock
         native_cleanup();
 
+        mGnssAntennaInfoProvider.onGpsEnabledChanged();
         mGnssMeasurementsProvider.onGpsEnabledChanged();
         mGnssNavigationMessageProvider.onGpsEnabledChanged();
     }
@@ -1563,6 +1579,11 @@
     }
 
     @NativeEntryPoint
+    private void reportAntennaInfo(List<GnssAntennaInfo> antennaInfos) {
+        mHandler.post(() -> mGnssAntennaInfoProvider.onGnssAntennaInfoAvailable(antennaInfos));
+    }
+
+    @NativeEntryPoint
     private void reportNavigationMessage(GnssNavigationMessage event) {
         if (!mItarSpeedLimitExceeded) {
             // send to handler to allow native to return quickly
@@ -1585,6 +1606,8 @@
             mGnssNavigationMessageProvider.onCapabilitiesUpdated(
                     hasCapability(GPS_CAPABILITY_NAV_MESSAGES));
             restartRequests();
+            mGnssAntennaInfoProvider.onCapabilitiesUpdated(
+                    hasCapability(GPS_CAPABILITY_ANTENNA_INFO));
 
             mGnssCapabilitiesProvider.setTopHalCapabilities(mTopHalCapabilities);
         });
@@ -1606,6 +1629,7 @@
         Log.i(TAG, "restartRequests");
 
         restartLocationRequest();
+        mGnssAntennaInfoProvider.resumeIfStarted();
         mGnssMeasurementsProvider.resumeIfStarted();
         mGnssNavigationMessageProvider.resumeIfStarted();
         mGnssBatchingProvider.resumeIfStarted();
@@ -2198,6 +2222,8 @@
         s.append(" ago)").append('\n');
         s.append("mFixInterval=").append(mFixInterval).append('\n');
         s.append("mLowPowerMode=").append(mLowPowerMode).append('\n');
+        s.append("mGnssAntennaInfoProvider.isRegistered()=")
+                .append(mGnssAntennaInfoProvider.isRegistered()).append('\n');
         s.append("mGnssMeasurementsProvider.isRegistered()=")
                 .append(mGnssMeasurementsProvider.isRegistered()).append('\n');
         s.append("mGnssNavigationMessageProvider.isRegistered()=")
@@ -2218,6 +2244,7 @@
         if (hasCapability(GPS_CAPABILITY_MEASUREMENT_CORRECTIONS)) {
             s.append("MEASUREMENT_CORRECTIONS ");
         }
+        if (hasCapability(GPS_CAPABILITY_ANTENNA_INFO)) s.append("ANTENNA_INFO ");
         s.append(")\n");
         if (hasCapability(GPS_CAPABILITY_MEASUREMENT_CORRECTIONS)) {
             s.append("SubHal=MEASUREMENT_CORRECTIONS[");
diff --git a/services/core/java/com/android/server/location/GnssMeasurementsProvider.java b/services/core/java/com/android/server/location/GnssMeasurementsProvider.java
index 55e427f..6ba5f07 100644
--- a/services/core/java/com/android/server/location/GnssMeasurementsProvider.java
+++ b/services/core/java/com/android/server/location/GnssMeasurementsProvider.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.location.GnssMeasurementsEvent;
+import android.location.GnssRequest;
 import android.location.IGnssMeasurementsListener;
 import android.os.Handler;
 import android.os.RemoteException;
@@ -33,14 +34,14 @@
  * @hide
  */
 public abstract class GnssMeasurementsProvider
-        extends RemoteListenerHelper<IGnssMeasurementsListener> {
-    private static final String TAG = "GnssMeasurementsProvider";
+        extends RemoteListenerHelper<GnssRequest, IGnssMeasurementsListener> {
+    private static final String TAG = "GnssMeasProvider";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     private final GnssMeasurementProviderNative mNative;
 
-    private boolean mIsCollectionStarted;
-    private boolean mEnableFullTracking;
+    private boolean mStartedCollection;
+    private boolean mStartedFullTracking;
 
     protected GnssMeasurementsProvider(Context context, Handler handler) {
         this(context, handler, new GnssMeasurementProviderNative());
@@ -57,8 +58,8 @@
         if (DEBUG) {
             Log.d(TAG, "resumeIfStarted");
         }
-        if (mIsCollectionStarted) {
-            mNative.startMeasurementCollection(mEnableFullTracking);
+        if (mStartedCollection) {
+            mNative.startMeasurementCollection(mStartedFullTracking);
         }
     }
 
@@ -67,18 +68,35 @@
         return mNative.isMeasurementSupported();
     }
 
-    @Override
-    protected int registerWithService() {
+    private boolean getMergedFullTracking() {
         int devOptions = Settings.Secure.getInt(mContext.getContentResolver(),
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0);
-        int fullTrackingToggled = Settings.Global.getInt(mContext.getContentResolver(),
+        int enableFullTracking = Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.ENABLE_GNSS_RAW_MEAS_FULL_TRACKING, 0);
-        boolean enableFullTracking = (devOptions == 1 /* Developer Mode enabled */)
-                && (fullTrackingToggled == 1 /* Raw Measurements Full Tracking enabled */);
+        boolean enableFullTrackingBySetting = (devOptions == 1 /* Developer Mode enabled */)
+                && (enableFullTracking == 1 /* Raw Measurements Full Tracking enabled */);
+        if (enableFullTrackingBySetting) {
+            return true;
+        }
+
+        synchronized (mListenerMap) {
+            for (IdentifiedListener identifiedListener : mListenerMap.values()) {
+                GnssRequest request = identifiedListener.getRequest();
+                if (request != null && request.isFullTracking()) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    protected int registerWithService() {
+        boolean enableFullTracking = getMergedFullTracking();
         boolean result = mNative.startMeasurementCollection(enableFullTracking);
         if (result) {
-            mIsCollectionStarted = true;
-            mEnableFullTracking = enableFullTracking;
+            mStartedCollection = true;
+            mStartedFullTracking = enableFullTracking;
             return RemoteListenerHelper.RESULT_SUCCESS;
         } else {
             return RemoteListenerHelper.RESULT_INTERNAL_ERROR;
@@ -89,7 +107,7 @@
     protected void unregisterFromService() {
         boolean stopped = mNative.stopMeasurementCollection();
         if (stopped) {
-            mIsCollectionStarted = false;
+            mStartedCollection = false;
         }
     }
 
diff --git a/services/core/java/com/android/server/location/GnssNavigationMessageProvider.java b/services/core/java/com/android/server/location/GnssNavigationMessageProvider.java
index 983d1da..fb901e8 100644
--- a/services/core/java/com/android/server/location/GnssNavigationMessageProvider.java
+++ b/services/core/java/com/android/server/location/GnssNavigationMessageProvider.java
@@ -33,7 +33,7 @@
  * @hide
  */
 public abstract class GnssNavigationMessageProvider
-        extends RemoteListenerHelper<IGnssNavigationMessageListener> {
+        extends RemoteListenerHelper<Void, IGnssNavigationMessageListener> {
     private static final String TAG = "GnssNavigationMessageProvider";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
diff --git a/services/core/java/com/android/server/location/GnssStatusListenerHelper.java b/services/core/java/com/android/server/location/GnssStatusListenerHelper.java
index eaf63c8..1d16c03 100644
--- a/services/core/java/com/android/server/location/GnssStatusListenerHelper.java
+++ b/services/core/java/com/android/server/location/GnssStatusListenerHelper.java
@@ -24,7 +24,8 @@
 /**
  * Implementation of a handler for {@link IGnssStatusListener}.
  */
-public abstract class GnssStatusListenerHelper extends RemoteListenerHelper<IGnssStatusListener> {
+public abstract class GnssStatusListenerHelper extends
+        RemoteListenerHelper<Void, IGnssStatusListener> {
     private static final String TAG = "GnssStatusListenerHelper";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
diff --git a/services/core/java/com/android/server/location/IContextHubWrapper.java b/services/core/java/com/android/server/location/IContextHubWrapper.java
new file mode 100644
index 0000000..79fa5c7
--- /dev/null
+++ b/services/core/java/com/android/server/location/IContextHubWrapper.java
@@ -0,0 +1,141 @@
+/*
+ * 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.location;
+
+import android.annotation.Nullable;
+import android.hardware.contexthub.V1_1.Setting;
+import android.hardware.contexthub.V1_1.SettingValue;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.util.NoSuchElementException;
+
+/**
+ * @hide
+ */
+public abstract class IContextHubWrapper {
+    private static final String TAG = "IContextHubWrapper";
+
+    /**
+     * Attempts to connect to the Contexthub HAL 1.0 service, if it exists.
+     *
+     * @return A valid IContextHubWrapper if the connection was successful, null otherwise.
+     */
+    @Nullable
+    public static IContextHubWrapper maybeConnectTo1_0() {
+        android.hardware.contexthub.V1_0.IContexthub proxy = null;
+        try {
+            proxy = android.hardware.contexthub.V1_0.IContexthub.getService(true /* retry */);
+        } catch (RemoteException e) {
+            Log.e(TAG, "RemoteException while attaching to Context Hub HAL proxy", e);
+        } catch (NoSuchElementException e) {
+            Log.i(TAG, "Context Hub HAL service not found");
+        }
+
+        ContextHubWrapperV1_0 wrapper = null;
+        if (proxy != null) {
+            wrapper = new ContextHubWrapperV1_0(proxy);
+        }
+
+        return wrapper;
+    }
+
+    /**
+     * Attempts to connect to the Contexthub HAL 1.1 service, if it exists.
+     *
+     * @return A valid IContextHubWrapper if the connection was successful, null otherwise.
+     */
+    @Nullable
+    public static IContextHubWrapper maybeConnectTo1_1() {
+        android.hardware.contexthub.V1_1.IContexthub proxy = null;
+        try {
+            proxy = android.hardware.contexthub.V1_1.IContexthub.getService(true /* retry */);
+        } catch (RemoteException e) {
+            Log.e(TAG, "RemoteException while attaching to Context Hub HAL proxy", e);
+        } catch (NoSuchElementException e) {
+            Log.i(TAG, "Context Hub HAL service not found");
+        }
+
+        ContextHubWrapperV1_1 wrapper = null;
+        if (proxy != null) {
+            wrapper = new ContextHubWrapperV1_1(proxy);
+        }
+
+        return wrapper;
+    }
+
+    /**
+     * @return A valid instance of Contexthub HAL 1.0.
+     */
+    public abstract android.hardware.contexthub.V1_0.IContexthub getHub();
+
+    /**
+     * @return True if this version of the Contexthub HAL supports setting notifications.
+     */
+    public abstract boolean supportsSettingNotifications();
+
+    /**
+     * Notifies the Contexthub implementation of a user setting change.
+     *
+     * @param setting The user setting that has changed. MUST be one of the values from the
+     *     {@link Setting} enum
+     * @param newValue The value of the user setting that changed. MUST be one of the values
+     *     from the {@link SettingValue} enum.
+     */
+    public abstract void onSettingChanged(byte setting, byte newValue);
+
+    private static class ContextHubWrapperV1_0 extends IContextHubWrapper {
+        private android.hardware.contexthub.V1_0.IContexthub mHub;
+
+        ContextHubWrapperV1_0(android.hardware.contexthub.V1_0.IContexthub hub) {
+            mHub = hub;
+        }
+
+        public android.hardware.contexthub.V1_0.IContexthub getHub() {
+            return mHub;
+        }
+
+        public boolean supportsSettingNotifications() {
+            return false;
+        }
+
+        public void onSettingChanged(byte setting, byte newValue) {}
+    }
+
+    private static class ContextHubWrapperV1_1 extends IContextHubWrapper {
+        private android.hardware.contexthub.V1_1.IContexthub mHub;
+
+        ContextHubWrapperV1_1(android.hardware.contexthub.V1_1.IContexthub hub) {
+            mHub = hub;
+        }
+
+        public android.hardware.contexthub.V1_0.IContexthub getHub() {
+            return mHub;
+        }
+
+        public boolean supportsSettingNotifications() {
+            return true;
+        }
+
+        public void onSettingChanged(byte setting, byte newValue) {
+            try {
+                mHub.onSettingChanged(setting, newValue);
+            } catch  (RemoteException e) {
+                Log.e(TAG, "Failed to send setting change to Contexthub", e);
+            }
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/location/LocationFudger.java b/services/core/java/com/android/server/location/LocationFudger.java
index 04c7714..1f458ed 100644
--- a/services/core/java/com/android/server/location/LocationFudger.java
+++ b/services/core/java/com/android/server/location/LocationFudger.java
@@ -16,297 +16,172 @@
 
 package com.android.server.location;
 
-import android.content.Context;
-import android.database.ContentObserver;
+import android.annotation.Nullable;
 import android.location.Location;
-import android.os.Bundle;
-import android.os.Handler;
 import android.os.SystemClock;
-import android.provider.Settings;
-import android.util.Log;
 
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
+
 import java.security.SecureRandom;
-
+import java.time.Clock;
+import java.util.Random;
 
 /**
- * Contains the logic to obfuscate (fudge) locations for coarse applications.
- *
- * <p>The goal is just to prevent applications with only
- * the coarse location permission from receiving a fine location.
+ * Contains the logic to obfuscate (fudge) locations for coarse applications. The goal is just to
+ * prevent applications with only the coarse location permission from receiving a fine location.
  */
 public class LocationFudger {
-    private static final boolean D = false;
-    private static final String TAG = "LocationFudge";
 
-    /**
-     * Default coarse accuracy in meters.
-     */
-    private static final float DEFAULT_ACCURACY_IN_METERS = 2000.0f;
+    // minimum accuracy a coarsened location can have
+    private static final float MIN_ACCURACY_M = 200.0f;
 
-    /**
-     * Minimum coarse accuracy in meters.
-     */
-    private static final float MINIMUM_ACCURACY_IN_METERS = 200.0f;
+    // how often random offsets are updated
+    @VisibleForTesting
+    static final long OFFSET_UPDATE_INTERVAL_MS = 60 * 60 * 1000;
 
-    /**
-     * Secure settings key for coarse accuracy.
-     */
-    private static final String COARSE_ACCURACY_CONFIG_NAME = "locationCoarseAccuracy";
-
-    /**
-     * This is the fastest interval that applications can receive coarse
-     * locations.
-     */
-    public static final long FASTEST_INTERVAL_MS = 10 * 60 * 1000;  // 10 minutes
-
-    /**
-     * The duration until we change the random offset.
-     */
-    private static final long CHANGE_INTERVAL_MS = 60 * 60 * 1000;  // 1 hour
-
-    /**
-     * The percentage that we change the random offset at every interval.
-     *
-     * <p>0.0 indicates the random offset doesn't change. 1.0
-     * indicates the random offset is completely replaced every interval.
-     */
+    // the percentage that we change the random offset at every interval. 0.0 indicates the random
+    // offset doesn't change. 1.0 indicates the random offset is completely replaced every interval
     private static final double CHANGE_PER_INTERVAL = 0.03;  // 3% change
 
-    // Pre-calculated weights used to move the random offset.
-    //
-    // The goal is to iterate on the previous offset, but keep
-    // the resulting standard deviation the same. The variance of
-    // two gaussian distributions summed together is equal to the
-    // sum of the variance of each distribution. So some quick
-    // algebra results in the following sqrt calculation to
-    // weigh in a new offset while keeping the final standard
-    // deviation unchanged.
+    // weights used to move the random offset. the goal is to iterate on the previous offset, but
+    // keep the resulting standard deviation the same. the variance of two gaussian distributions
+    // summed together is equal to the sum of the variance of each distribution. so some quick
+    // algebra results in the following sqrt calculation to weight in a new offset while keeping the
+    // final standard deviation unchanged.
     private static final double NEW_WEIGHT = CHANGE_PER_INTERVAL;
-    private static final double PREVIOUS_WEIGHT = Math.sqrt(1 - NEW_WEIGHT * NEW_WEIGHT);
+    private static final double OLD_WEIGHT = Math.sqrt(1 - NEW_WEIGHT * NEW_WEIGHT);
 
-    /**
-     * This number actually varies because the earth is not round, but
-     * 111,000 meters is considered generally acceptable.
-     */
-    private static final int APPROXIMATE_METERS_PER_DEGREE_AT_EQUATOR = 111000;
+    // this number actually varies because the earth is not round, but 111,000 meters is considered
+    // generally acceptable
+    private static final int APPROXIMATE_METERS_PER_DEGREE_AT_EQUATOR = 111_000;
 
-    /**
-     * Maximum latitude.
-     *
-     * <p>We pick a value 1 meter away from 90.0 degrees in order
-     * to keep cosine(MAX_LATITUDE) to a non-zero value, so that we avoid
-     * divide by zero fails.
-     */
-    private static final double MAX_LATITUDE = 90.0 -
-            (1.0 / APPROXIMATE_METERS_PER_DEGREE_AT_EQUATOR);
+    // we pick a value 1 meter away from 90.0 degrees in order to keep cosine(MAX_LATITUDE) to a
+    // non-zero value, so that we avoid divide by zero errors
+    private static final double MAX_LATITUDE =
+            90.0 - (1.0 / APPROXIMATE_METERS_PER_DEGREE_AT_EQUATOR);
 
-    private final Object mLock = new Object();
-    private final SecureRandom mRandom = new SecureRandom();
+    private final float mAccuracyM;
+    private final Clock mClock;
+    private final Random mRandom;
 
-    /**
-     * Used to monitor coarse accuracy secure setting for changes.
-     */
-    private final ContentObserver mSettingsObserver;
+    @GuardedBy("this")
+    private double mLatitudeOffsetM;
+    @GuardedBy("this")
+    private double mLongitudeOffsetM;
+    @GuardedBy("this")
+    private long mNextUpdateRealtimeMs;
 
-    /**
-     * Used to resolve coarse accuracy setting.
-     */
-    private final Context mContext;
+    @GuardedBy("this")
+    @Nullable private Location mCachedFineLocation;
+    @GuardedBy("this")
+    @Nullable private Location mCachedCoarseLocation;
 
-    // all fields below protected by mLock
-    private double mOffsetLatitudeMeters;
-    private double mOffsetLongitudeMeters;
-    private long mNextInterval;
+    public LocationFudger(float accuracyM) {
+        this(accuracyM, SystemClock.elapsedRealtimeClock(), new SecureRandom());
+    }
 
-    /**
-     * Best location accuracy allowed for coarse applications.
-     * This value should only be set by {@link #setAccuracyInMetersLocked(float)}.
-     */
-    private float mAccuracyInMeters;
+    @VisibleForTesting
+    LocationFudger(float accuracyM, Clock clock, Random random) {
+        mClock = clock;
+        mRandom = random;
+        mAccuracyM = Math.max(accuracyM, MIN_ACCURACY_M);
 
-    /**
-     * The distance between grids for snap-to-grid. See {@link #createCoarse}.
-     * This value should only be set by {@link #setAccuracyInMetersLocked(float)}.
-     */
-    private double mGridSizeInMeters;
-
-    /**
-     * Standard deviation of the (normally distributed) random offset applied
-     * to coarse locations. It does not need to be as large as
-     * {@link #COARSE_ACCURACY_METERS} because snap-to-grid is the primary obfuscation
-     * method. See further details in the implementation.
-     * This value should only be set by {@link #setAccuracyInMetersLocked(float)}.
-     */
-    private double mStandardDeviationInMeters;
-
-    public LocationFudger(Context context, Handler handler) {
-        mContext = context;
-        mSettingsObserver = new ContentObserver(handler) {
-            @Override
-            public void onChange(boolean selfChange) {
-                setAccuracyInMeters(loadCoarseAccuracy());
-            }
-        };
-        mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor(
-                COARSE_ACCURACY_CONFIG_NAME), false, mSettingsObserver);
-
-        float accuracy = loadCoarseAccuracy();
-        synchronized (mLock) {
-            setAccuracyInMetersLocked(accuracy);
-            mOffsetLatitudeMeters = nextOffsetLocked();
-            mOffsetLongitudeMeters = nextOffsetLocked();
-            mNextInterval = SystemClock.elapsedRealtime() + CHANGE_INTERVAL_MS;
-        }
+        resetOffsets();
     }
 
     /**
-     * Get the cached coarse location, or generate a new one and cache it.
+     * Resets the random offsets completely.
      */
-    public Location getOrCreate(Location location) {
-        synchronized (mLock) {
-            Location coarse = location.getExtraLocation(Location.EXTRA_COARSE_LOCATION);
-            if (coarse == null) {
-                return addCoarseLocationExtraLocked(location);
-            }
-            if (coarse.getAccuracy() < mAccuracyInMeters) {
-                return addCoarseLocationExtraLocked(location);
-            }
-            return coarse;
-        }
-    }
-
-    private Location addCoarseLocationExtraLocked(Location location) {
-        Location coarse = createCoarseLocked(location);
-        Bundle extras = location.getExtras();
-        if (extras == null) {
-            extras = new Bundle();
-        }
-        extras.putParcelable(Location.EXTRA_COARSE_LOCATION, coarse);
-        location.setExtras(extras);
-        return coarse;
+    public void resetOffsets() {
+        mLatitudeOffsetM = nextRandomOffset();
+        mLongitudeOffsetM = nextRandomOffset();
+        mNextUpdateRealtimeMs = mClock.millis() + OFFSET_UPDATE_INTERVAL_MS;
     }
 
     /**
-     * Create a coarse location.
+     * Create a coarse location using two technique, random offsets and snap-to-grid.
      *
-     * <p>Two techniques are used: random offsets and snap-to-grid.
-     *
-     * <p>First we add a random offset. This mitigates against detecting
-     * grid transitions. Without a random offset it is possible to detect
-     * a users position very accurately when they cross a grid boundary.
-     * The random offset changes very slowly over time, to mitigate against
-     * taking many location samples and averaging them out.
-     *
-     * <p>Second we snap-to-grid (quantize). This has the nice property of
-     * producing stable results, and mitigating against taking many samples
-     * to average out a random offset.
+     * First we add a random offset to mitigate against detecting grid transitions. Without a random
+     * offset it is possible to detect a user's position quite accurately when they cross a grid
+     * boundary. The random offset changes very slowly over time, to mitigate against taking many
+     * location samples and averaging them out. Second we snap-to-grid (quantize). This has the nice
+     * property of producing stable results, and mitigating against taking many samples to average
+     * out a random offset.
      */
-    private Location createCoarseLocked(Location fine) {
+    public Location createCoarse(Location fine) {
+        synchronized (this) {
+            if (fine == mCachedFineLocation) {
+                return new Location(mCachedCoarseLocation);
+            }
+        }
+
+        // update the offsets in use
+        updateOffsets();
+
         Location coarse = new Location(fine);
 
-        // clean all the optional information off the location, because
-        // this can leak detailed location information
+        // clear any fields that could leak more detailed location information
         coarse.removeBearing();
         coarse.removeSpeed();
         coarse.removeAltitude();
         coarse.setExtras(null);
 
-        double lat = coarse.getLatitude();
-        double lon = coarse.getLongitude();
+        double latitude = wrapLatitude(coarse.getLatitude());
+        double longitude = wrapLongitude(coarse.getLongitude());
 
-        // wrap
-        lat = wrapLatitude(lat);
-        lon = wrapLongitude(lon);
+        // add offsets - update longitude first using the non-offset latitude
+        longitude += wrapLongitude(metersToDegreesLongitude(mLongitudeOffsetM, latitude));
+        latitude += wrapLatitude(metersToDegreesLatitude(mLatitudeOffsetM));
 
-        // Step 1) apply a random offset
+        // quantize location by snapping to a grid. this is the primary means of obfuscation. it
+        // gives nice consistent results and is very effective at hiding the true location (as long
+        // as you are not sitting on a grid boundary, which the random offsets mitigate).
         //
-        // The goal of the random offset is to prevent the application
-        // from determining that the device is on a grid boundary
-        // when it crosses from one grid to the next.
-        //
-        // We apply the offset even if the location already claims to be
-        // inaccurate, because it may be more accurate than claimed.
-        updateRandomOffsetLocked();
-        // perform lon first whilst lat is still within bounds
-        lon += metersToDegreesLongitude(mOffsetLongitudeMeters, lat);
-        lat += metersToDegreesLatitude(mOffsetLatitudeMeters);
-        if (D) Log.d(TAG, String.format("applied offset of %.0f, %.0f (meters)",
-                mOffsetLongitudeMeters, mOffsetLatitudeMeters));
+        // note that we quantize the latitude first, since the longitude quantization depends on the
+        // latitude value and so leaks information about the latitude
+        double latGranularity = metersToDegreesLatitude(mAccuracyM);
+        latitude = wrapLatitude(Math.round(latitude / latGranularity) * latGranularity);
+        double lonGranularity = metersToDegreesLongitude(mAccuracyM, latitude);
+        longitude = wrapLongitude(Math.round(longitude / lonGranularity) * lonGranularity);
 
-        // wrap
-        lat = wrapLatitude(lat);
-        lon = wrapLongitude(lon);
+        coarse.setLatitude(latitude);
+        coarse.setLongitude(longitude);
+        coarse.setAccuracy(Math.max(mAccuracyM, coarse.getAccuracy()));
 
-        // Step 2) Snap-to-grid (quantize)
-        //
-        // This is the primary means of obfuscation. It gives nice consistent
-        // results and is very effective at hiding the true location
-        // (as long as you are not sitting on a grid boundary, which
-        // step 1 mitigates).
-        //
-        // Note we quantize the latitude first, since the longitude
-        // quantization depends on the latitude value and so leaks information
-        // about the latitude
-        double latGranularity = metersToDegreesLatitude(mGridSizeInMeters);
-        lat = Math.round(lat / latGranularity) * latGranularity;
-        double lonGranularity = metersToDegreesLongitude(mGridSizeInMeters, lat);
-        lon = Math.round(lon / lonGranularity) * lonGranularity;
+        synchronized (this) {
+            mCachedFineLocation = fine;
+            mCachedCoarseLocation = coarse;
+        }
 
-        // wrap again
-        lat = wrapLatitude(lat);
-        lon = wrapLongitude(lon);
-
-        // apply
-        coarse.setLatitude(lat);
-        coarse.setLongitude(lon);
-        coarse.setAccuracy(Math.max(mAccuracyInMeters, coarse.getAccuracy()));
-
-        if (D) Log.d(TAG, "fudged " + fine + " to " + coarse);
-        return coarse;
+        return new Location(mCachedCoarseLocation);
     }
 
     /**
-     * Update the random offset over time.
+     * Update the random offsets over time.
      *
-     * <p>If the random offset was new for every location
-     * fix then an application can more easily average location results
-     * over time,
-     * especially when the location is near a grid boundary. On the
-     * other hand if the random offset is constant then if an application
-     * found a way to reverse engineer the offset they would be able
-     * to detect location at grid boundaries very accurately. So
-     * we choose a random offset and then very slowly move it, to
-     * make both approaches very hard.
-     *
-     * <p>The random offset does not need to be large, because snap-to-grid
-     * is the primary obfuscation mechanism. It just needs to be large
-     * enough to stop information leakage as we cross grid boundaries.
+     * If the random offset was reset for every location fix then an application could more easily
+     * average location results over time, especially when the location is near a grid boundary. On
+     * the other hand if the random offset is constant then if an application finds a way to reverse
+     * engineer the offset they would be able to detect location at grid boundaries very accurately.
+     * So we choose a random offset and then very slowly move it, to make both approaches very hard.
+     * The random offset does not need to be large, because snap-to-grid is the primary obfuscation
+     * mechanism. It just needs to be large enough to stop information leakage as we cross grid
+     * boundaries.
      */
-    private void updateRandomOffsetLocked() {
-        long now = SystemClock.elapsedRealtime();
-        if (now < mNextInterval) {
+    private synchronized void updateOffsets() {
+        long now = mClock.millis();
+        if (now < mNextUpdateRealtimeMs) {
             return;
         }
 
-        if (D) Log.d(TAG, String.format("old offset: %.0f, %.0f (meters)",
-                mOffsetLongitudeMeters, mOffsetLatitudeMeters));
-
-        // ok, need to update the random offset
-        mNextInterval = now + CHANGE_INTERVAL_MS;
-
-        mOffsetLatitudeMeters *= PREVIOUS_WEIGHT;
-        mOffsetLatitudeMeters += NEW_WEIGHT * nextOffsetLocked();
-        mOffsetLongitudeMeters *= PREVIOUS_WEIGHT;
-        mOffsetLongitudeMeters += NEW_WEIGHT * nextOffsetLocked();
-
-        if (D) Log.d(TAG, String.format("new offset: %.0f, %.0f (meters)",
-                mOffsetLongitudeMeters, mOffsetLatitudeMeters));
+        mLatitudeOffsetM = (OLD_WEIGHT * mLatitudeOffsetM) + (NEW_WEIGHT * nextRandomOffset());
+        mLongitudeOffsetM = (OLD_WEIGHT * mLongitudeOffsetM) + (NEW_WEIGHT * nextRandomOffset());
+        mNextUpdateRealtimeMs = now + OFFSET_UPDATE_INTERVAL_MS;
     }
 
-    private double nextOffsetLocked() {
-        return mRandom.nextGaussian() * mStandardDeviationInMeters;
+    private double nextRandomOffset() {
+        return mRandom.nextGaussian() * (mAccuracyM / 4.0);
     }
 
     private static double wrapLatitude(double lat) {
@@ -334,56 +209,8 @@
         return distance / APPROXIMATE_METERS_PER_DEGREE_AT_EQUATOR;
     }
 
-    /**
-     * Requires latitude since longitudinal distances change with distance from equator.
-     */
+    // requires latitude since longitudinal distances change with distance from equator.
     private static double metersToDegreesLongitude(double distance, double lat) {
         return distance / APPROXIMATE_METERS_PER_DEGREE_AT_EQUATOR / Math.cos(Math.toRadians(lat));
     }
-
-    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        pw.println(String.format("offset: %.0f, %.0f (meters)", mOffsetLongitudeMeters,
-                mOffsetLatitudeMeters));
-    }
-
-    /**
-     * This is the main control: call this to set the best location accuracy
-     * allowed for coarse applications and all derived values.
-     */
-    private void setAccuracyInMetersLocked(float accuracyInMeters) {
-        mAccuracyInMeters = Math.max(accuracyInMeters, MINIMUM_ACCURACY_IN_METERS);
-        if (D) {
-            Log.d(TAG, "setAccuracyInMetersLocked: new accuracy = " + mAccuracyInMeters);
-        }
-        mGridSizeInMeters = mAccuracyInMeters;
-        mStandardDeviationInMeters = mGridSizeInMeters / 4.0;
-    }
-
-    /**
-     * Same as setAccuracyInMetersLocked without the pre-lock requirement.
-     */
-    private void setAccuracyInMeters(float accuracyInMeters) {
-        synchronized (mLock) {
-            setAccuracyInMetersLocked(accuracyInMeters);
-        }
-    }
-
-    /**
-     * Loads the coarse accuracy value from secure settings.
-     */
-    private float loadCoarseAccuracy() {
-        String newSetting = Settings.Secure.getString(mContext.getContentResolver(),
-                COARSE_ACCURACY_CONFIG_NAME);
-        if (D) {
-            Log.d(TAG, "loadCoarseAccuracy: newSetting = \"" + newSetting + "\"");
-        }
-        if (newSetting == null) {
-            return DEFAULT_ACCURACY_IN_METERS;
-        }
-        try {
-            return Float.parseFloat(newSetting);
-        } catch (NumberFormatException e) {
-            return DEFAULT_ACCURACY_IN_METERS;
-        }
-    }
 }
diff --git a/services/core/java/com/android/server/location/LocationRequestStatistics.java b/services/core/java/com/android/server/location/LocationRequestStatistics.java
index b1913389..dcdf48b 100644
--- a/services/core/java/com/android/server/location/LocationRequestStatistics.java
+++ b/services/core/java/com/android/server/location/LocationRequestStatistics.java
@@ -16,6 +16,7 @@
 
 package com.android.server.location;
 
+import android.annotation.Nullable;
 import android.os.SystemClock;
 import android.util.Log;
 import android.util.TimeUtils;
@@ -25,6 +26,7 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Objects;
 
 /**
  * Holds statistics for location requests (active requests by provider).
@@ -43,13 +45,14 @@
     /**
      * Signals that a package has started requesting locations.
      *
-     * @param packageName Name of package that has requested locations.
+     * @param packageName  Name of package that has requested locations.
+     * @param featureId    Feature id associated with the request.
      * @param providerName Name of provider that is requested (e.g. "gps").
-     * @param intervalMs The interval that is requested in ms.
+     * @param intervalMs   The interval that is requested in ms.
      */
-    public void startRequesting(String packageName, String providerName, long intervalMs,
-            boolean isForeground) {
-        PackageProviderKey key = new PackageProviderKey(packageName, providerName);
+    public void startRequesting(String packageName, @Nullable String featureId, String providerName,
+            long intervalMs, boolean isForeground) {
+        PackageProviderKey key = new PackageProviderKey(packageName, featureId, providerName);
         PackageStatistics stats = statistics.get(key);
         if (stats == null) {
             stats = new PackageStatistics();
@@ -57,32 +60,36 @@
         }
         stats.startRequesting(intervalMs);
         stats.updateForeground(isForeground);
-        history.addRequest(packageName, providerName, intervalMs);
+        history.addRequest(packageName, featureId, providerName, intervalMs);
     }
 
     /**
      * Signals that a package has stopped requesting locations.
      *
-     * @param packageName Name of package that has stopped requesting locations.
+     * @param packageName  Name of package that has stopped requesting locations.
+     * @param featureId    Feature id associated with the request.
      * @param providerName Provider that is no longer being requested.
      */
-    public void stopRequesting(String packageName, String providerName) {
-        PackageProviderKey key = new PackageProviderKey(packageName, providerName);
+    public void stopRequesting(String packageName, @Nullable String featureId,
+            String providerName) {
+        PackageProviderKey key = new PackageProviderKey(packageName, featureId, providerName);
         PackageStatistics stats = statistics.get(key);
         if (stats != null) {
             stats.stopRequesting();
         }
-        history.removeRequest(packageName, providerName);
+        history.removeRequest(packageName, featureId, providerName);
     }
 
     /**
      * Signals that a package possibly switched background/foreground.
      *
-     * @param packageName Name of package that has stopped requesting locations.
+     * @param packageName  Name of package that has stopped requesting locations.
+     * @param featureId    Feature id associated with the request.
      * @param providerName Provider that is no longer being requested.
      */
-    public void updateForeground(String packageName, String providerName, boolean isForeground) {
-        PackageProviderKey key = new PackageProviderKey(packageName, providerName);
+    public void updateForeground(String packageName, @Nullable String featureId,
+            String providerName, boolean isForeground) {
+        PackageProviderKey key = new PackageProviderKey(packageName, featureId, providerName);
         PackageStatistics stats = statistics.get(key);
         if (stats != null) {
             stats.updateForeground(isForeground);
@@ -90,30 +97,37 @@
     }
 
     /**
-     * A key that holds both package and provider names.
+     * A key that holds package, feature id, and provider names.
      */
     public static class PackageProviderKey implements Comparable<PackageProviderKey> {
         /**
          * Name of package requesting location.
          */
-        public final String packageName;
+        public final String mPackageName;
+        /**
+         * Feature id associated with the request, which can be used to attribute location access to
+         * different parts of the application.
+         */
+        @Nullable
+        public final String mFeatureId;
         /**
          * Name of provider being requested (e.g. "gps").
          */
-        public final String providerName;
+        public final String mProviderName;
 
-        PackageProviderKey(String packageName, String providerName) {
-            this.packageName = packageName;
-            this.providerName = providerName;
+        PackageProviderKey(String packageName, @Nullable String featureId, String providerName) {
+            this.mPackageName = packageName;
+            this.mFeatureId = featureId;
+            this.mProviderName = providerName;
         }
 
         @Override
         public int compareTo(PackageProviderKey other) {
-            final int providerCompare = providerName.compareTo(other.providerName);
+            final int providerCompare = mProviderName.compareTo(other.mProviderName);
             if (providerCompare != 0) {
                 return providerCompare;
             } else {
-                return packageName.compareTo(other.packageName);
+                return mProviderName.compareTo(other.mProviderName);
             }
         }
 
@@ -124,13 +138,18 @@
             }
 
             PackageProviderKey otherKey = (PackageProviderKey) other;
-            return packageName.equals(otherKey.packageName)
-                    && providerName.equals(otherKey.providerName);
+            return mPackageName.equals(otherKey.mPackageName)
+                    && mProviderName.equals(otherKey.mProviderName)
+                    && Objects.equals(mFeatureId, otherKey.mFeatureId);
         }
 
         @Override
         public int hashCode() {
-            return packageName.hashCode() + 31 * providerName.hashCode();
+            int hash = mPackageName.hashCode() + 31 * mProviderName.hashCode();
+            if (mFeatureId != null) {
+                hash += mFeatureId.hashCode() + 31 * hash;
+            }
+            return hash;
         }
     }
 
@@ -147,17 +166,18 @@
          * Append an added location request to the history
          */
         @VisibleForTesting
-        void addRequest(String packageName, String providerName, long intervalMs) {
-            addRequestSummary(new RequestSummary(packageName, providerName, intervalMs));
+        void addRequest(String packageName, @Nullable String featureId, String providerName,
+                long intervalMs) {
+            addRequestSummary(new RequestSummary(packageName, featureId, providerName, intervalMs));
         }
 
         /**
          * Append a removed location request to the history
          */
         @VisibleForTesting
-        void removeRequest(String packageName, String providerName) {
+        void removeRequest(String packageName, @Nullable String featureId, String providerName) {
             addRequestSummary(new RequestSummary(
-                    packageName, providerName, RequestSummary.REQUEST_ENDED_INTERVAL));
+                    packageName, featureId, providerName, RequestSummary.REQUEST_ENDED_INTERVAL));
         }
 
         private void addRequestSummary(RequestSummary summary) {
@@ -193,6 +213,12 @@
          * Name of package requesting location.
          */
         private final String mPackageName;
+
+        /**
+         * Feature id associated with the request for identifying subsystem of an application.
+         */
+        @Nullable
+        private final String mFeatureId;
         /**
          * Name of provider being requested (e.g. "gps").
          */
@@ -211,8 +237,10 @@
          */
         static final long REQUEST_ENDED_INTERVAL = -1;
 
-        RequestSummary(String packageName, String providerName, long intervalMillis) {
+        RequestSummary(String packageName, @Nullable String featureId, String providerName,
+                long intervalMillis) {
             this.mPackageName = packageName;
+            this.mFeatureId = featureId;
             this.mProviderName = providerName;
             this.mIntervalMillis = intervalMillis;
             this.mElapsedRealtimeMillis = SystemClock.elapsedRealtime();
@@ -225,6 +253,9 @@
                     .append(mIntervalMillis == REQUEST_ENDED_INTERVAL ? "- " : "+ ")
                     .append(String.format("%7s", mProviderName)).append(" request from ")
                     .append(mPackageName);
+            if (mFeatureId != null) {
+                s.append(" with feature ").append(mFeatureId);
+            }
             if (mIntervalMillis != REQUEST_ENDED_INTERVAL) {
                 s.append(" at interval ").append(mIntervalMillis / 1000).append(" seconds");
             }
@@ -246,14 +277,15 @@
         private long mFastestIntervalMs;
         // The slowest interval this package has ever requested.
         private long mSlowestIntervalMs;
-        // The total time this app has requested location (not including currently running requests).
+        // The total time this app has requested location (not including currently running
+        // requests).
         private long mTotalDurationMs;
 
         // Time when this package most recently went to foreground, requesting location. 0 means
         // not currently in foreground.
         private long mLastForegroundElapsedTimeMs;
-        // The time this app has requested location (not including currently running requests), while
-        // in foreground.
+        // The time this app has requested location (not including currently running requests),
+        // while in foreground.
         private long mForegroundDurationMs;
 
         // Time when package last went dormant (stopped requesting location)
@@ -328,7 +360,7 @@
          */
         public long getForegroundDurationMs() {
             long currentDurationMs = mForegroundDurationMs;
-            if (mLastForegroundElapsedTimeMs != 0 ) {
+            if (mLastForegroundElapsedTimeMs != 0) {
                 currentDurationMs
                         += SystemClock.elapsedRealtime() - mLastForegroundElapsedTimeMs;
             }
diff --git a/services/core/java/com/android/server/location/MockableLocationProvider.java b/services/core/java/com/android/server/location/MockableLocationProvider.java
index b0e1330..f43669e 100644
--- a/services/core/java/com/android/server/location/MockableLocationProvider.java
+++ b/services/core/java/com/android/server/location/MockableLocationProvider.java
@@ -237,6 +237,10 @@
      * Dumps the current provider implementation.
      */
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+        // holding the owner lock outside this could lead to deadlock since we don't run dump on the
+        // executor specified by the provider, we run it directly
+        Preconditions.checkState(!Thread.holdsLock(mOwnerLock));
+
         AbstractLocationProvider provider;
         synchronized (mOwnerLock) {
             provider = mProvider;
diff --git a/services/core/java/com/android/server/location/RemoteListenerHelper.java b/services/core/java/com/android/server/location/RemoteListenerHelper.java
index 01522739..11f0685 100644
--- a/services/core/java/com/android/server/location/RemoteListenerHelper.java
+++ b/services/core/java/com/android/server/location/RemoteListenerHelper.java
@@ -17,6 +17,7 @@
 package com.android.server.location;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.app.AppOpsManager;
 import android.content.Context;
 import android.os.Handler;
@@ -32,9 +33,10 @@
 /**
  * A helper class that handles operations in remote listeners.
  *
+ * @param <TRequest> the type of request.
  * @param <TListener> the type of GNSS data listener.
  */
-public abstract class RemoteListenerHelper<TListener extends IInterface> {
+public abstract class RemoteListenerHelper<TRequest, TListener extends IInterface> {
 
     protected static final int RESULT_SUCCESS = 0;
     protected static final int RESULT_NOT_AVAILABLE = 1;
@@ -47,7 +49,7 @@
     protected final Handler mHandler;
     private final String mTag;
 
-    private final Map<IBinder, IdentifiedListener> mListenerMap = new HashMap<>();
+    protected final Map<IBinder, IdentifiedListener> mListenerMap = new HashMap<>();
 
     protected final Context mContext;
     protected final AppOpsManager mAppOps;
@@ -75,7 +77,8 @@
     /**
      * Adds GNSS data listener {@code listener} with caller identify {@code callerIdentify}.
      */
-    public void addListener(@NonNull TListener listener, CallerIdentity callerIdentity) {
+    public void addListener(@Nullable TRequest request, @NonNull TListener listener,
+            CallerIdentity callerIdentity) {
         Objects.requireNonNull(listener, "Attempted to register a 'null' listener.");
         IBinder binder = listener.asBinder();
         synchronized (mListenerMap) {
@@ -84,7 +87,7 @@
                 return;
             }
 
-            IdentifiedListener identifiedListener = new IdentifiedListener(listener,
+            IdentifiedListener identifiedListener = new IdentifiedListener(request, listener,
                     callerIdentity);
             mListenerMap.put(binder, identifiedListener);
 
@@ -257,14 +260,22 @@
         return RESULT_SUCCESS;
     }
 
-    private class IdentifiedListener {
+    protected class IdentifiedListener {
+        @Nullable private final TRequest mRequest;
         private final TListener mListener;
         private final CallerIdentity mCallerIdentity;
 
-        private IdentifiedListener(@NonNull TListener listener, CallerIdentity callerIdentity) {
+        private IdentifiedListener(@Nullable TRequest request, @NonNull TListener listener,
+                CallerIdentity callerIdentity) {
             mListener = listener;
+            mRequest = request;
             mCallerIdentity = callerIdentity;
         }
+
+        @Nullable
+        protected TRequest getRequest() {
+            return mRequest;
+        }
     }
 
     private class HandlerRunnable implements Runnable {
diff --git a/services/core/java/com/android/server/location/SettingsHelper.java b/services/core/java/com/android/server/location/SettingsHelper.java
index 9163490..5fe21bd 100644
--- a/services/core/java/com/android/server/location/SettingsHelper.java
+++ b/services/core/java/com/android/server/location/SettingsHelper.java
@@ -23,9 +23,13 @@
 import static android.provider.Settings.Global.LOCATION_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS;
 import static android.provider.Settings.Global.LOCATION_IGNORE_SETTINGS_PACKAGE_WHITELIST;
 import static android.provider.Settings.Global.LOCATION_LAST_LOCATION_MAX_AGE_MILLIS;
+import static android.provider.Settings.Secure.LOCATION_COARSE_ACCURACY_M;
 import static android.provider.Settings.Secure.LOCATION_MODE;
 import static android.provider.Settings.Secure.LOCATION_MODE_OFF;
 
+import static com.android.server.LocationManagerService.D;
+import static com.android.server.LocationManagerService.TAG;
+
 import android.app.ActivityManager;
 import android.content.Context;
 import android.database.ContentObserver;
@@ -36,6 +40,7 @@
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.ArraySet;
+import android.util.Log;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.IndentingPrintWriter;
@@ -88,6 +93,7 @@
     private static final long DEFAULT_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS =
             30 * 60 * 1000;
     private static final long DEFAULT_MAX_LAST_LOCATION_AGE_MS = 20 * 60 * 1000;
+    private static final float DEFAULT_COARSE_LOCATION_ACCURACY_M = 2000.0f;
 
     private final Context mContext;
 
@@ -135,6 +141,24 @@
     }
 
     /**
+     * Set location enabled for a user.
+     */
+    public void setLocationEnabled(boolean enabled, int userId) {
+        long identity = Binder.clearCallingIdentity();
+        try {
+            Settings.Secure.putIntForUser(
+                    mContext.getContentResolver(),
+                    Settings.Secure.LOCATION_MODE,
+                    enabled
+                        ? Settings.Secure.LOCATION_MODE_ON
+                        : Settings.Secure.LOCATION_MODE_OFF,
+                    userId);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    /**
      * Add a listener for changes to the location enabled setting. Callbacks occur on an unspecified
      * thread.
      */
@@ -250,19 +274,45 @@
      * Retrieve the background throttling proximity alert interval.
      */
     public long getBackgroundThrottleProximityAlertIntervalMs() {
-        return Settings.Global.getLong(mContext.getContentResolver(),
-                LOCATION_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS,
-                DEFAULT_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS);
+        long identity = Binder.clearCallingIdentity();
+        try {
+            return Settings.Global.getLong(mContext.getContentResolver(),
+                    LOCATION_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS,
+                    DEFAULT_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     /**
      * Retrieve maximum age of the last location.
      */
     public long getMaxLastLocationAgeMs() {
-        return Settings.Global.getLong(
-                mContext.getContentResolver(),
-                LOCATION_LAST_LOCATION_MAX_AGE_MILLIS,
-                DEFAULT_MAX_LAST_LOCATION_AGE_MS);
+        long identity = Binder.clearCallingIdentity();
+        try {
+            return Settings.Global.getLong(
+                    mContext.getContentResolver(),
+                    LOCATION_LAST_LOCATION_MAX_AGE_MILLIS,
+                    DEFAULT_MAX_LAST_LOCATION_AGE_MS);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    /**
+     * Retrieve the accuracy for coarsening location, ie, the grid size used for snap-to-grid
+     * coarsening.
+     */
+    public float getCoarseLocationAccuracyM() {
+        long identity = Binder.clearCallingIdentity();
+        try {
+            return Settings.Secure.getFloat(
+                    mContext.getContentResolver(),
+                    LOCATION_COARSE_ACCURACY_M,
+                    DEFAULT_COARSE_LOCATION_ACCURACY_M);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     /**
@@ -377,6 +427,10 @@
 
         @Override
         public void onChange(boolean selfChange, Uri uri, int userId) {
+            if (D) {
+                Log.d(TAG, "location setting changed [u" + userId + "]: " + uri);
+            }
+
             for (UserSettingChangedListener listener : mListeners) {
                 listener.onSettingChanged(userId);
             }
diff --git a/services/core/java/com/android/server/location/TEST_MAPPING b/services/core/java/com/android/server/location/TEST_MAPPING
index 2e21fa6..214d2f3 100644
--- a/services/core/java/com/android/server/location/TEST_MAPPING
+++ b/services/core/java/com/android/server/location/TEST_MAPPING
@@ -1,10 +1,19 @@
 {
   "presubmit": [
     {
+      "name": "CtsLocationFineTestCases"
+    },
+    {
       "name": "CtsLocationCoarseTestCases"
     },
     {
       "name": "CtsLocationNoneTestCases"
+    },
+    {
+      "name": "FrameworksMockingServicesTests",
+      "options": [{
+        "include-filter": "com.android.server.location"
+      }]
     }
   ]
 }
\ No newline at end of file
diff --git a/services/core/java/com/android/server/location/UserInfoHelper.java b/services/core/java/com/android/server/location/UserInfoHelper.java
index 94f3a88..28f3f47 100644
--- a/services/core/java/com/android/server/location/UserInfoHelper.java
+++ b/services/core/java/com/android/server/location/UserInfoHelper.java
@@ -16,6 +16,12 @@
 
 package com.android.server.location;
 
+import static android.os.UserManager.DISALLOW_SHARE_LOCATION;
+
+import static com.android.server.LocationManagerService.D;
+import static com.android.server.LocationManagerService.TAG;
+
+import android.annotation.IntDef;
 import android.annotation.Nullable;
 import android.annotation.UserIdInt;
 import android.app.ActivityManager;
@@ -23,11 +29,11 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.pm.UserInfo;
 import android.os.Binder;
 import android.os.Build;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.util.Log;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.ArrayUtils;
@@ -36,6 +42,8 @@
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.Arrays;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -47,15 +55,24 @@
     /**
      * Listener for current user changes.
      */
-    public interface UserChangedListener {
+    public interface UserListener {
+
+        int USER_SWITCHED = 1;
+        int USER_STARTED = 2;
+        int USER_STOPPED = 3;
+
+        @IntDef({USER_SWITCHED, USER_STARTED, USER_STOPPED})
+        @Retention(RetentionPolicy.SOURCE)
+        @interface UserChange {}
+
         /**
-         * Called when the current user changes.
+         * Called when something has changed about the given user.
          */
-        void onUserChanged(@UserIdInt int oldUserId, @UserIdInt int newUserId);
+        void onUserChanged(@UserIdInt int userId, @UserChange int change);
     }
 
     private final Context mContext;
-    private final CopyOnWriteArrayList<UserChangedListener> mListeners;
+    private final CopyOnWriteArrayList<UserListener> mListeners;
 
     @GuardedBy("this")
     @Nullable private UserManager mUserManager;
@@ -86,6 +103,8 @@
 
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction(Intent.ACTION_USER_SWITCHED);
+        intentFilter.addAction(Intent.ACTION_USER_STARTED);
+        intentFilter.addAction(Intent.ACTION_USER_STOPPED);
         intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_ADDED);
         intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
 
@@ -96,12 +115,24 @@
                 if (action == null) {
                     return;
                 }
+                int userId;
                 switch (action) {
                     case Intent.ACTION_USER_SWITCHED:
-                        int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
-                                UserHandle.USER_NULL);
+                        userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
                         if (userId != UserHandle.USER_NULL) {
-                            onUserChanged(userId);
+                            onCurrentUserChanged(userId);
+                        }
+                        break;
+                    case Intent.ACTION_USER_STARTED:
+                        userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
+                        if (userId != UserHandle.USER_NULL) {
+                            onUserStarted(userId);
+                        }
+                        break;
+                    case Intent.ACTION_USER_STOPPED:
+                        userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
+                        if (userId != UserHandle.USER_NULL) {
+                            onUserStopped(userId);
                         }
                         break;
                     case Intent.ACTION_MANAGED_PROFILE_ADDED:
@@ -118,27 +149,52 @@
     /**
      * Adds a listener for user changed events. Callbacks occur on an unspecified thread.
      */
-    public void addListener(UserChangedListener listener) {
+    public void addListener(UserListener listener) {
         mListeners.add(listener);
     }
 
     /**
      * Removes a listener for user changed events.
      */
-    public void removeListener(UserChangedListener listener) {
+    public void removeListener(UserListener listener) {
         mListeners.remove(listener);
     }
 
-    private void onUserChanged(@UserIdInt int newUserId) {
+    private void onCurrentUserChanged(@UserIdInt int newUserId) {
         if (newUserId == mCurrentUserId) {
             return;
         }
 
+        if (D) {
+            Log.d(TAG, "current user switched from u" + mCurrentUserId + " to u" + newUserId);
+        }
+
         int oldUserId = mCurrentUserId;
         mCurrentUserId = newUserId;
 
-        for (UserChangedListener listener : mListeners) {
-            listener.onUserChanged(oldUserId, newUserId);
+        onUserChanged(oldUserId, UserListener.USER_SWITCHED);
+        onUserChanged(newUserId, UserListener.USER_SWITCHED);
+    }
+
+    private void onUserStarted(@UserIdInt int userId) {
+        if (D) {
+            Log.d(TAG, "u" + userId + " started");
+        }
+
+        onUserChanged(userId, UserListener.USER_STARTED);
+    }
+
+    private void onUserStopped(@UserIdInt int userId) {
+        if (D) {
+            Log.d(TAG, "u" + userId + " stopped");
+        }
+
+        onUserChanged(userId, UserListener.USER_STOPPED);
+    }
+
+    private void onUserChanged(@UserIdInt int userId, @UserListener.UserChange int change) {
+        for (UserListener listener : mListeners) {
+            listener.onUserChanged(userId, change);
         }
     }
 
@@ -151,53 +207,23 @@
     }
 
     /**
-     * Returns the user id of the current user.
+     * Returns an array of current user ids. This will always include the current user, and will
+     * also include any profiles of the current user.
      */
-    @UserIdInt
-    public int getCurrentUserId() {
-        return mCurrentUserId;
+    public int[] getCurrentUserIds() {
+        return getProfileUserIdsForParentUser(mCurrentUserId);
     }
 
     /**
      * Returns true if the given user id is either the current user or a profile of the current
      * user.
      */
-    public boolean isCurrentUserOrProfile(@UserIdInt int userId) {
+    public boolean isCurrentUserId(@UserIdInt int userId) {
         int currentUserId = mCurrentUserId;
         return userId == currentUserId || ArrayUtils.contains(
                 getProfileUserIdsForParentUser(currentUserId), userId);
     }
 
-    /**
-     * Returns the parent user id of the given user id, or the user id itself if the user id either
-     * is a parent or has no profiles.
-     */
-    @UserIdInt
-    public int getParentUserId(@UserIdInt int userId) {
-        synchronized (this) {
-            if (userId == mCachedParentUserId || ArrayUtils.contains(mCachedProfileUserIds,
-                    userId)) {
-                return mCachedParentUserId;
-            }
-
-            Preconditions.checkState(mUserManager != null);
-        }
-
-        int parentUserId;
-
-        long identity = Binder.clearCallingIdentity();
-        try {
-            UserInfo userInfo = mUserManager.getProfileParent(userId);
-            parentUserId = userInfo != null ? userInfo.id : userId;
-        } finally {
-            Binder.restoreCallingIdentity(identity);
-        }
-
-        // force profiles into cache
-        getProfileUserIdsForParentUser(parentUserId);
-        return parentUserId;
-    }
-
     @GuardedBy("this")
     private synchronized int[] getProfileUserIdsForParentUser(@UserIdInt int parentUserId) {
         if (parentUserId != mCachedParentUserId) {
@@ -225,8 +251,22 @@
      * Dump info for debugging.
      */
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        int currentUserId = mCurrentUserId;
-        pw.println("Current User: " + currentUserId + " " + Arrays.toString(
-                getProfileUserIdsForParentUser(currentUserId)));
+        boolean systemRunning;
+        synchronized (this) {
+            systemRunning = mUserManager != null;
+        }
+
+        if (systemRunning) {
+            int[] currentUserIds = getProfileUserIdsForParentUser(mCurrentUserId);
+            pw.println("current users: " + Arrays.toString(currentUserIds));
+            for (int userId : currentUserIds) {
+                if (mUserManager.hasUserRestrictionForUser(DISALLOW_SHARE_LOCATION,
+                        UserHandle.of(userId))) {
+                    pw.println("  u" + userId + " restricted");
+                }
+            }
+        } else {
+            pw.println("current user: " + mCurrentUserId);
+        }
     }
 }
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 2bab9fa..b57c261 100644
--- a/services/core/java/com/android/server/location/gnss/GnssManagerService.java
+++ b/services/core/java/com/android/server/location/gnss/GnssManagerService.java
@@ -17,6 +17,7 @@
 package com.android.server.location.gnss;
 
 import static android.app.AppOpsManager.OP_FINE_LOCATION;
+import static android.location.LocationManager.GPS_PROVIDER;
 
 import android.Manifest;
 import android.annotation.NonNull;
@@ -25,7 +26,9 @@
 import android.content.Context;
 import android.location.GnssCapabilities;
 import android.location.GnssMeasurementCorrections;
+import android.location.GnssRequest;
 import android.location.IBatchedLocationCallback;
+import android.location.IGnssAntennaInfoListener;
 import android.location.IGnssMeasurementsListener;
 import android.location.IGnssNavigationMessageListener;
 import android.location.IGnssStatusListener;
@@ -38,6 +41,7 @@
 import android.os.IInterface;
 import android.os.Process;
 import android.os.RemoteException;
+import android.os.UserHandle;
 import android.stats.location.LocationStatsEnums;
 import android.util.ArrayMap;
 import android.util.Log;
@@ -51,6 +55,7 @@
 import com.android.server.LocationManagerServiceUtils.LinkedListenerBase;
 import com.android.server.location.AppForegroundHelper;
 import com.android.server.location.CallerIdentity;
+import com.android.server.location.GnssAntennaInfoProvider;
 import com.android.server.location.GnssBatchingProvider;
 import com.android.server.location.GnssCapabilitiesProvider;
 import com.android.server.location.GnssLocationProvider;
@@ -87,6 +92,7 @@
     private final GnssStatusListenerHelper mGnssStatusProvider;
     private final GnssMeasurementsProvider mGnssMeasurementsProvider;
     private final GnssMeasurementCorrectionsProvider mGnssMeasurementCorrectionsProvider;
+    private final GnssAntennaInfoProvider mGnssAntennaInfoProvider;
     private final GnssNavigationMessageProvider mGnssNavigationMessageProvider;
     private final GnssLocationProvider.GnssSystemInfoProvider mGnssSystemInfoProvider;
     private final GnssLocationProvider.GnssMetricsProvider mGnssMetricsProvider;
@@ -96,15 +102,20 @@
     private final IGpsGeofenceHardware mGpsGeofenceProxy;
 
     @GuardedBy("mGnssMeasurementsListeners")
-    private final ArrayMap<IBinder, LinkedListener<IGnssMeasurementsListener>>
+    private final ArrayMap<IBinder, LinkedListener<GnssRequest, IGnssMeasurementsListener>>
             mGnssMeasurementsListeners = new ArrayMap<>();
 
+    @GuardedBy("mGnssAntennaInfoListeners")
+    private final ArrayMap<IBinder,
+            LinkedListener<Void, IGnssAntennaInfoListener>>
+            mGnssAntennaInfoListeners = new ArrayMap<>();
+
     @GuardedBy("mGnssNavigationMessageListeners")
-    private final ArrayMap<IBinder, LinkedListener<IGnssNavigationMessageListener>>
+    private final ArrayMap<IBinder, LinkedListener<Void, IGnssNavigationMessageListener>>
             mGnssNavigationMessageListeners = new ArrayMap<>();
 
     @GuardedBy("mGnssStatusListeners")
-    private final ArrayMap<IBinder, LinkedListener<IGnssStatusListener>>
+    private final ArrayMap<IBinder, LinkedListener<Void, IGnssStatusListener>>
             mGnssStatusListeners = new ArrayMap<>();
 
     @GuardedBy("this")
@@ -118,7 +129,8 @@
     @Nullable private IBatchedLocationCallback mGnssBatchingCallback;
 
     @GuardedBy("mGnssBatchingLock")
-    @Nullable private LinkedListener<IBatchedLocationCallback> mGnssBatchingDeathCallback;
+    @Nullable
+    private LinkedListener<Void, IBatchedLocationCallback> mGnssBatchingDeathCallback;
 
     @GuardedBy("mGnssBatchingLock")
     private boolean mGnssBatchingInProgress = false;
@@ -147,6 +159,7 @@
         mGnssLocationProvider = gnssLocationProvider;
         mGnssStatusProvider = mGnssLocationProvider.getGnssStatusProvider();
         mGnssMeasurementsProvider = mGnssLocationProvider.getGnssMeasurementsProvider();
+        mGnssAntennaInfoProvider = mGnssLocationProvider.getGnssAntennaInfoProvider();
         mGnssMeasurementCorrectionsProvider =
                 mGnssLocationProvider.getGnssMeasurementCorrectionsProvider();
         mGnssNavigationMessageProvider = mGnssLocationProvider.getGnssNavigationMessageProvider();
@@ -203,9 +216,6 @@
      * {@link android.location.GnssCapabilities}.
      */
     public long getGnssCapabilities(String packageName) {
-        mContext.enforceCallingPermission(Manifest.permission.LOCATION_HARDWARE, null);
-        mContext.enforceCallingPermission(Manifest.permission.ACCESS_FINE_LOCATION, null);
-
         if (!checkLocationAppOp(packageName)) {
             return GnssCapabilities.INVALID_CAPABILITIES;
         }
@@ -272,6 +282,7 @@
             mGnssBatchingCallback = callback;
             mGnssBatchingDeathCallback =
                     new LinkedListener<>(
+                            /* request= */ null,
                             callback,
                             "BatchedLocationCallback",
                             callerIdentity,
@@ -354,38 +365,49 @@
                     uid,
                     foreground);
         }
+        synchronized (mGnssAntennaInfoListeners) {
+            updateListenersOnForegroundChangedLocked(
+                    mGnssAntennaInfoListeners,
+                    mGnssAntennaInfoProvider,
+                    IGnssAntennaInfoListener.Stub::asInterface,
+                    uid,
+                    foreground);
+        }
     }
 
-    private <TListener extends IInterface> void updateListenersOnForegroundChangedLocked(
-            Map<IBinder, ? extends LinkedListenerBase> gnssDataListeners,
-            RemoteListenerHelper<TListener> gnssDataProvider,
+    private <TRequest, TListener extends IInterface> void updateListenersOnForegroundChangedLocked(
+            Map<IBinder, LinkedListener<TRequest, TListener>> gnssDataListeners,
+            RemoteListenerHelper<TRequest, TListener> gnssDataProvider,
             Function<IBinder, TListener> mapBinderToListener,
             int uid,
             boolean foreground) {
-        for (Map.Entry<IBinder, ? extends LinkedListenerBase> entry :
+        for (Map.Entry<IBinder, LinkedListener<TRequest, TListener>> entry :
                 gnssDataListeners.entrySet()) {
-            LinkedListenerBase linkedListener = entry.getValue();
+            LinkedListener<TRequest, TListener> linkedListener = entry.getValue();
             CallerIdentity callerIdentity = linkedListener.getCallerIdentity();
+            TRequest request = linkedListener.getRequest();
             if (callerIdentity.mUid != uid) {
                 continue;
             }
 
             TListener listener = mapBinderToListener.apply(entry.getKey());
             if (foreground || isThrottlingExempt(callerIdentity)) {
-                gnssDataProvider.addListener(listener, callerIdentity);
+                gnssDataProvider.addListener(request, listener, callerIdentity);
             } else {
                 gnssDataProvider.removeListener(listener);
             }
         }
     }
 
-    private <TListener extends IInterface> boolean addGnssDataListenerLocked(
+    private <TListener extends IInterface, TRequest> boolean addGnssDataListenerLocked(
+            @Nullable TRequest request,
             TListener listener,
             String packageName,
             @Nullable String featureId,
             @NonNull String listenerIdentifier,
-            RemoteListenerHelper<TListener> gnssDataProvider,
-            ArrayMap<IBinder, LinkedListener<TListener>> gnssDataListeners,
+            RemoteListenerHelper<TRequest, TListener> gnssDataProvider,
+            ArrayMap<IBinder,
+                    LinkedListener<TRequest, TListener>> gnssDataListeners,
             Consumer<TListener> binderDeathCallback) {
         mContext.enforceCallingPermission(Manifest.permission.ACCESS_FINE_LOCATION, null);
 
@@ -395,7 +417,7 @@
 
         CallerIdentity callerIdentity = new CallerIdentity(Binder.getCallingUid(),
                 Binder.getCallingPid(), packageName, featureId, listenerIdentifier);
-        LinkedListener<TListener> linkedListener = new LinkedListener<>(listener,
+        LinkedListener<TRequest, TListener> linkedListener = new LinkedListener<>(request, listener,
                 listenerIdentifier, callerIdentity, binderDeathCallback);
         IBinder binder = listener.asBinder();
         if (!linkedListener.linkToListenerDeathNotificationLocked(binder)) {
@@ -419,15 +441,15 @@
         }
         if (mAppForegroundHelper.isAppForeground(callerIdentity.mUid)
                 || isThrottlingExempt(callerIdentity)) {
-            gnssDataProvider.addListener(listener, callerIdentity);
+            gnssDataProvider.addListener(request, listener, callerIdentity);
         }
         return true;
     }
 
-    private <TListener extends IInterface> void removeGnssDataListenerLocked(
+    private <TRequest, TListener extends IInterface> void removeGnssDataListenerLocked(
             TListener listener,
-            RemoteListenerHelper<TListener> gnssDataProvider,
-            ArrayMap<IBinder, LinkedListener<TListener>> gnssDataListeners) {
+            RemoteListenerHelper<TRequest, TListener> gnssDataProvider,
+            ArrayMap<IBinder, LinkedListener<TRequest, TListener>> gnssDataListeners) {
         if (gnssDataProvider == null) {
             Log.e(
                     TAG,
@@ -437,7 +459,7 @@
         }
 
         IBinder binder = listener.asBinder();
-        LinkedListener<TListener> linkedListener =
+        LinkedListener<TRequest, TListener> linkedListener =
                 gnssDataListeners.remove(binder);
         if (linkedListener == null) {
             return;
@@ -467,6 +489,7 @@
             @Nullable String featureId) {
         synchronized (mGnssStatusListeners) {
             return addGnssDataListenerLocked(
+                    /* request= */ null,
                     listener,
                     packageName,
                     featureId,
@@ -489,11 +512,17 @@
     /**
      * Adds a GNSS measurements listener.
      */
-    public boolean addGnssMeasurementsListener(
-            IGnssMeasurementsListener listener, String packageName, @Nullable String featureId,
+    public boolean addGnssMeasurementsListener(@Nullable GnssRequest request,
+            IGnssMeasurementsListener listener, String packageName,
+            @Nullable String featureId,
             @NonNull String listenerIdentifier) {
+        if (request != null && request.isFullTracking()) {
+            mContext.enforceCallingOrSelfPermission(android.Manifest.permission.LOCATION_HARDWARE,
+                    null);
+        }
         synchronized (mGnssMeasurementsListeners) {
             return addGnssDataListenerLocked(
+                    request,
                     listener,
                     packageName,
                     featureId,
@@ -531,6 +560,41 @@
     }
 
     /**
+     * Adds a GNSS Antenna Info listener.
+     *
+     * @param listener    called when GNSS antenna info is received
+     * @param packageName name of requesting package
+     * @return true if listener is successfully added, false otherwise
+     */
+    public boolean addGnssAntennaInfoListener(
+            IGnssAntennaInfoListener listener, String packageName,
+            @Nullable String featureId, @NonNull String listenerIdentifier) {
+        synchronized (mGnssAntennaInfoListeners) {
+            return addGnssDataListenerLocked(
+                    /* request= */ null,
+                    listener,
+                    packageName,
+                    featureId,
+                    listenerIdentifier,
+                    mGnssAntennaInfoProvider,
+                    mGnssAntennaInfoListeners,
+                    this::removeGnssAntennaInfoListener);
+        }
+    }
+
+    /**
+     * Removes a GNSS Antenna Info listener.
+     *
+     * @param listener called when GNSS antenna info is received
+     */
+    public void removeGnssAntennaInfoListener(IGnssAntennaInfoListener listener) {
+        synchronized (mGnssAntennaInfoListeners) {
+            removeGnssDataListenerLocked(
+                    listener, mGnssAntennaInfoProvider, mGnssAntennaInfoListeners);
+        }
+    }
+
+    /**
      * Adds a GNSS navigation message listener.
      */
     public boolean addGnssNavigationMessageListener(
@@ -538,6 +602,7 @@
             @Nullable String featureId, @NonNull String listenerIdentifier) {
         synchronized (mGnssNavigationMessageListeners) {
             return addGnssDataListenerLocked(
+                    /* request= */ null,
                     listener,
                     packageName,
                     featureId,
@@ -574,18 +639,26 @@
      */
     public void onReportLocation(List<Location> locations) {
         IBatchedLocationCallback gnssBatchingCallback;
+        LinkedListener<Void, IBatchedLocationCallback> gnssBatchingDeathCallback;
         synchronized (mGnssBatchingLock) {
             gnssBatchingCallback = mGnssBatchingCallback;
+            gnssBatchingDeathCallback = mGnssBatchingDeathCallback;
         }
 
-        if (gnssBatchingCallback == null) {
+        if (gnssBatchingCallback == null || gnssBatchingDeathCallback == null) {
+            return;
+        }
+
+        int userId = UserHandle.getUserId(gnssBatchingDeathCallback.getCallerIdentity().mUid);
+        if (!mLocationManagerInternal.isProviderEnabledForUser(GPS_PROVIDER, userId)) {
+            Log.w(TAG, "reportLocationBatch() called without user permission");
             return;
         }
 
         try {
             gnssBatchingCallback.onLocationBatch(locations);
         } catch (RemoteException e) {
-            Log.e(TAG, "mGnssBatchingCallback.onLocationBatch failed", e);
+            Log.e(TAG, "reportLocationBatch() failed", e);
         }
     }
 
diff --git a/services/core/java/com/android/server/locksettings/RebootEscrowManager.java b/services/core/java/com/android/server/locksettings/RebootEscrowManager.java
index e991f96..c9e356e 100644
--- a/services/core/java/com/android/server/locksettings/RebootEscrowManager.java
+++ b/services/core/java/com/android/server/locksettings/RebootEscrowManager.java
@@ -150,6 +150,7 @@
     private RebootEscrowKey getAndClearRebootEscrowKey() {
         IRebootEscrow rebootEscrow = mInjector.getRebootEscrow();
         if (rebootEscrow == null) {
+            Slog.w(TAG, "Had reboot escrow data for users, but RebootEscrow HAL is unavailable");
             return null;
         }
 
@@ -197,11 +198,12 @@
 
             mCallbacks.onRebootEscrowRestored(escrowData.getSpVersion(),
                     escrowData.getSyntheticPassword(), userId);
+            Slog.i(TAG, "Restored reboot escrow data for user " + userId);
             return true;
         } catch (IOException e) {
             Slog.w(TAG, "Could not load reboot escrow data for user " + userId, e);
+            return false;
         }
-        return false;
     }
 
     void callToRebootEscrowIfNeeded(@UserIdInt int userId, byte spVersion,
@@ -212,16 +214,13 @@
 
         IRebootEscrow rebootEscrow = mInjector.getRebootEscrow();
         if (rebootEscrow == null) {
-            mRebootEscrowWanted = false;
-            setRebootEscrowReady(false);
+            Slog.w(TAG, "Reboot escrow requested, but RebootEscrow HAL is unavailable");
             return;
         }
 
         RebootEscrowKey escrowKey = generateEscrowKeyIfNeeded();
         if (escrowKey == null) {
             Slog.e(TAG, "Could not generate escrow key");
-            mRebootEscrowWanted = false;
-            setRebootEscrowReady(false);
             return;
         }
 
@@ -250,6 +249,7 @@
             try {
                 key = RebootEscrowKey.generate();
             } catch (IOException e) {
+                Slog.w(TAG, "Could not generate reboot escrow key");
                 return null;
             }
 
@@ -286,6 +286,7 @@
 
         IRebootEscrow rebootEscrow = mInjector.getRebootEscrow();
         if (rebootEscrow == null) {
+            Slog.w(TAG, "Escrow marked as ready, but RebootEscrow HAL is unavailable");
             return false;
         }
 
@@ -295,6 +296,7 @@
         }
 
         if (escrowKey == null) {
+            Slog.e(TAG, "Escrow key is null, but escrow was marked as ready");
             return false;
         }
 
@@ -302,8 +304,9 @@
         try {
             rebootEscrow.storeKey(escrowKey.getKeyBytes());
             armedRebootEscrow = true;
+            Slog.i(TAG, "Reboot escrow key stored with RebootEscrow HAL");
         } catch (RemoteException e) {
-            Slog.w(TAG, "Failed escrow secret to RebootEscrow HAL", e);
+            Slog.e(TAG, "Failed escrow secret to RebootEscrow HAL", e);
         }
         return armedRebootEscrow;
     }
diff --git a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java
index b726e57..ac49fa2 100644
--- a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java
+++ b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java
@@ -590,8 +590,8 @@
             throw new IllegalStateException("Failed to create new SID for user", e);
         }
         if (response.getResponseCode() != GateKeeperResponse.RESPONSE_OK) {
-            Slog.e(TAG, "Fail to create new SID for user " + userId);
-            return;
+            throw new IllegalStateException("Fail to create new SID for user " + userId
+                    + " response: " + response.getResponseCode());
         }
         saveSyntheticPasswordHandle(response.getPayload(), userId);
     }
diff --git a/services/core/java/com/android/server/media/BluetoothRouteProvider.java b/services/core/java/com/android/server/media/BluetoothRouteProvider.java
index 669f1ac..33e01bd 100644
--- a/services/core/java/com/android/server/media/BluetoothRouteProvider.java
+++ b/services/core/java/com/android/server/media/BluetoothRouteProvider.java
@@ -27,8 +27,8 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.media.AudioManager;
 import android.media.MediaRoute2Info;
-import android.text.TextUtils;
 import android.util.Slog;
 import android.util.SparseBooleanArray;
 
@@ -48,6 +48,8 @@
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     final Map<String, BluetoothRouteInfo> mBluetoothRoutes = new HashMap<>();
     @SuppressWarnings("WeakerAccess") /* synthetic access */
+    BluetoothRouteInfo mSelectedRoute = null;
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
     BluetoothA2dp mA2dpProfile;
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     BluetoothHearingAid mHearingAidProfile;
@@ -55,13 +57,12 @@
     private final Context mContext;
     private final BluetoothAdapter mBluetoothAdapter;
     private final BluetoothRoutesUpdatedListener mListener;
+    private final AudioManager mAudioManager;
     private final Map<String, BluetoothEventReceiver> mEventReceiverMap = new HashMap<>();
     private final IntentFilter mIntentFilter = new IntentFilter();
     private final BroadcastReceiver mBroadcastReceiver = new BluetoothBroadcastReceiver();
     private final BluetoothProfileListener mProfileListener = new BluetoothProfileListener();
 
-    private BluetoothDevice mActiveDevice = null;
-
     static synchronized BluetoothRouteProvider getInstance(@NonNull Context context,
             @NonNull BluetoothRoutesUpdatedListener listener) {
         Objects.requireNonNull(context);
@@ -82,6 +83,7 @@
         mContext = context;
         mBluetoothAdapter = btAdapter;
         mListener = listener;
+        mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
         buildBluetoothRoutes();
 
         mBluetoothAdapter.getProfileProxy(mContext, mProfileListener, BluetoothProfile.A2DP);
@@ -105,27 +107,21 @@
     }
 
     /**
-     * Clears the active device for all known profiles.
+     * Transfers to a given bluetooth route.
+     * The dedicated BT device with the route would be activated.
+     *
+     * @param routeId the id of the Bluetooth device. {@code null} denotes to clear the use of
+     *               BT routes.
      */
-    public void clearActiveDevices() {
-        BluetoothA2dp a2dpProfile = mA2dpProfile;
-        BluetoothHearingAid hearingAidProfile = mHearingAidProfile;
-        if (a2dpProfile != null) {
-            a2dpProfile.setActiveDevice(null);
+    public void transferTo(@Nullable String routeId) {
+        if (routeId == null) {
+            clearActiveDevices();
+            return;
         }
-        if (hearingAidProfile != null) {
-            hearingAidProfile.setActiveDevice(null);
-        }
-    }
 
-    /**
-     * Sets the active device.
-     * @param deviceId the id of the Bluetooth device
-     */
-    public void setActiveDevice(@NonNull String deviceId) {
-        BluetoothRouteInfo btRouteInfo = mBluetoothRoutes.get(deviceId);
+        BluetoothRouteInfo btRouteInfo = mBluetoothRoutes.get(routeId);
         if (btRouteInfo == null) {
-            Slog.w(TAG, "setActiveDevice: unknown device id=" + deviceId);
+            Slog.w(TAG, "setActiveDevice: unknown route id=" + routeId);
             return;
         }
         BluetoothA2dp a2dpProfile = mA2dpProfile;
@@ -141,6 +137,20 @@
         }
     }
 
+    /**
+     * Clears the active device for all known profiles.
+     */
+    private void clearActiveDevices() {
+        BluetoothA2dp a2dpProfile = mA2dpProfile;
+        BluetoothHearingAid hearingAidProfile = mHearingAidProfile;
+        if (a2dpProfile != null) {
+            a2dpProfile.setActiveDevice(null);
+        }
+        if (hearingAidProfile != null) {
+            hearingAidProfile.setActiveDevice(null);
+        }
+    }
+
     private void addEventReceiver(String action, BluetoothEventReceiver eventReceiver) {
         mEventReceiverMap.put(action, eventReceiver);
         mIntentFilter.addAction(action);
@@ -156,7 +166,22 @@
         }
     }
 
-    @NonNull List<MediaRoute2Info> getBluetoothRoutes() {
+    @Nullable
+    MediaRoute2Info getSelectedRoute() {
+        return (mSelectedRoute == null) ? null : mSelectedRoute.route;
+    }
+
+    @NonNull
+    List<MediaRoute2Info> getTransferableRoutes() {
+        List<MediaRoute2Info> routes = getAllBluetoothRoutes();
+        if (mSelectedRoute != null) {
+            routes.remove(mSelectedRoute.route);
+        }
+        return routes;
+    }
+
+    @NonNull
+    List<MediaRoute2Info> getAllBluetoothRoutes() {
         ArrayList<MediaRoute2Info> routes = new ArrayList<>();
         for (BluetoothRouteInfo btRoute : mBluetoothRoutes.values()) {
             routes.add(btRoute.route);
@@ -164,49 +189,57 @@
         return routes;
     }
 
-    @Nullable String getActiveDeviceAddress() {
-        BluetoothDevice device = mActiveDevice;
-        if (device == null) {
-            return null;
-        }
-        return device.getAddress();
+    boolean setSelectedRouteVolume(int volume) {
+        if (mSelectedRoute == null) return false;
+        mSelectedRoute.route = new MediaRoute2Info.Builder(mSelectedRoute.route)
+                .setVolume(volume)
+                .build();
+        return true;
     }
 
     private void notifyBluetoothRoutesUpdated() {
         if (mListener != null) {
-            mListener.onBluetoothRoutesUpdated(getBluetoothRoutes());
+            mListener.onBluetoothRoutesUpdated(getAllBluetoothRoutes());
         }
     }
 
     private BluetoothRouteInfo createBluetoothRoute(BluetoothDevice device) {
         BluetoothRouteInfo newBtRoute = new BluetoothRouteInfo();
         newBtRoute.btDevice = device;
+        // Current / Max volume will be set when connected.
+        // TODO: Is there any BT device which has fixed volume?
         newBtRoute.route = new MediaRoute2Info.Builder(device.getAddress(), device.getName())
                 .addFeature(MediaRoute2Info.FEATURE_LIVE_AUDIO)
                 .setConnectionState(MediaRoute2Info.CONNECTION_STATE_DISCONNECTED)
                 .setDescription(mContext.getResources().getText(
                         R.string.bluetooth_a2dp_audio_route_name).toString())
                 .setDeviceType(MediaRoute2Info.DEVICE_TYPE_BLUETOOTH)
+                .setVolumeHandling(MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE)
                 .build();
         newBtRoute.connectedProfiles = new SparseBooleanArray();
         return newBtRoute;
     }
 
-    private void setRouteConnectionStateForDevice(BluetoothDevice device,
+    private void setRouteConnectionState(@NonNull BluetoothRouteInfo btRoute,
             @MediaRoute2Info.ConnectionState int state) {
-        if (device == null) {
-            Slog.w(TAG, "setRouteConnectionStateForDevice: device shouldn't be null");
-            return;
-        }
-        BluetoothRouteInfo btRoute = mBluetoothRoutes.get(device.getAddress());
         if (btRoute == null) {
-            Slog.w(TAG, "setRouteConnectionStateForDevice: route shouldn't be null");
+            Slog.w(TAG, "setRouteConnectionState: route shouldn't be null");
             return;
         }
-        if (btRoute.route.getConnectionState() != state) {
-            btRoute.route = new MediaRoute2Info.Builder(btRoute.route)
-                    .setConnectionState(state).build();
+        if (btRoute.route.getConnectionState() == state) {
+            return;
         }
+
+        // Update volume when the connection state is changed.
+        MediaRoute2Info.Builder builder = new MediaRoute2Info.Builder(btRoute.route)
+                .setConnectionState(state);
+
+        if (state == MediaRoute2Info.CONNECTION_STATE_CONNECTED) {
+            int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
+            int currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
+            builder.setVolumeMax(maxVolume).setVolume(currentVolume);
+        }
+        btRoute.route = builder.build();
     }
 
     interface BluetoothRoutesUpdatedListener {
@@ -244,8 +277,8 @@
                     mBluetoothRoutes.put(device.getAddress(), btRoute);
                 }
                 if (activeDevices.contains(device)) {
-                    mActiveDevice = device;
-                    setRouteConnectionStateForDevice(device,
+                    mSelectedRoute = btRoute;
+                    setRouteConnectionState(mSelectedRoute,
                             MediaRoute2Info.CONNECTION_STATE_CONNECTED);
                 }
 
@@ -328,20 +361,18 @@
         public void onReceive(Context context, Intent intent, BluetoothDevice device) {
             switch (intent.getAction()) {
                 case BluetoothA2dp.ACTION_ACTIVE_DEVICE_CHANGED:
-                    String prevActiveDeviceAddress =
-                            (mActiveDevice == null) ? null : mActiveDevice.getAddress();
-                    String curActiveDeviceAddress =
-                            (device == null) ? null : device.getAddress();
-                    if (!TextUtils.equals(prevActiveDeviceAddress, curActiveDeviceAddress)) {
-                        if (mActiveDevice != null) {
-                            setRouteConnectionStateForDevice(mActiveDevice,
+                    if (mSelectedRoute == null
+                            || !mSelectedRoute.btDevice.equals(device)) {
+                        if (mSelectedRoute != null) {
+                            setRouteConnectionState(mSelectedRoute,
                                     MediaRoute2Info.CONNECTION_STATE_DISCONNECTED);
                         }
-                        if (device != null) {
-                            setRouteConnectionStateForDevice(device,
+                        mSelectedRoute = (device == null) ? null
+                                : mBluetoothRoutes.get(device.getAddress());
+                        if (mSelectedRoute != null) {
+                            setRouteConnectionState(mSelectedRoute,
                                     MediaRoute2Info.CONNECTION_STATE_CONNECTED);
                         }
-                        mActiveDevice = device;
                         notifyBluetoothRoutesUpdated();
                     }
                     break;
@@ -370,10 +401,8 @@
                     btRoute.connectedProfiles.delete(profile);
                     if (btRoute.connectedProfiles.size() == 0) {
                         mBluetoothRoutes.remove(device.getAddress());
-                        if (mActiveDevice != null
-                                && TextUtils.equals(mActiveDevice.getAddress(),
-                                device.getAddress())) {
-                            mActiveDevice = null;
+                        if (mSelectedRoute != null && mSelectedRoute.btDevice.equals(device)) {
+                            mSelectedRoute = null;
                         }
                         notifyBluetoothRoutesUpdated();
                     }
diff --git a/services/core/java/com/android/server/media/MediaButtonReceiverHolder.java b/services/core/java/com/android/server/media/MediaButtonReceiverHolder.java
new file mode 100644
index 0000000..58c2707
--- /dev/null
+++ b/services/core/java/com/android/server/media/MediaButtonReceiverHolder.java
@@ -0,0 +1,360 @@
+/*
+ * 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 com.android.server.media;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ComponentInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.os.Handler;
+import android.os.UserHandle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.KeyEvent;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.List;
+
+/**
+ * Holds the media button receiver, and also provides helper methods around it.
+ */
+final class MediaButtonReceiverHolder {
+    public static final int COMPONENT_TYPE_INVALID = 0;
+    public static final int COMPONENT_TYPE_BROADCAST = 1;
+    public static final int COMPONENT_TYPE_ACTIVITY = 2;
+    public static final int COMPONENT_TYPE_SERVICE = 3;
+
+    @IntDef(value = {
+            COMPONENT_TYPE_INVALID,
+            COMPONENT_TYPE_BROADCAST,
+            COMPONENT_TYPE_ACTIVITY,
+            COMPONENT_TYPE_SERVICE,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface ComponentType {}
+
+    private static final String TAG = "PendingIntentHolder";
+    private static final boolean DEBUG_KEY_EVENT = MediaSessionService.DEBUG_KEY_EVENT;
+    private static final String COMPONENT_NAME_USER_ID_DELIM = ",";
+
+    private final int mUserId;
+    private final PendingIntent mPendingIntent;
+    private final ComponentName mComponentName;
+    private final String mPackageName;
+    @ComponentType
+    private final int mComponentType;
+
+    /**
+     * Unflatten from string which is previously flattened string via flattenToString().
+     * <p>
+     * It's used to store and restore media button receiver across the boot, by keeping the intent's
+     * component name to the persistent storage.
+     *
+     * @param mediaButtonReceiverInfo previously flattened string via flattenToString()
+     * @return new instance if the string was valid. {@code null} otherwise.
+     */
+    public static MediaButtonReceiverHolder unflattenFromString(
+            Context context, String mediaButtonReceiverInfo) {
+        if (TextUtils.isEmpty(mediaButtonReceiverInfo)) {
+            return null;
+        }
+        String[] tokens = mediaButtonReceiverInfo.split(COMPONENT_NAME_USER_ID_DELIM);
+        if (tokens == null || (tokens.length != 2 && tokens.length != 3)) {
+            return null;
+        }
+        ComponentName componentName = ComponentName.unflattenFromString(tokens[0]);
+        int userId = Integer.parseInt(tokens[1]);
+        // Guess component type if the OS version is updated from the older version.
+        int componentType = (tokens.length == 3)
+                ?  Integer.parseInt(tokens[2])
+                : getComponentType(context, componentName);
+        return new MediaButtonReceiverHolder(userId, null, componentName, componentType);
+    }
+
+    /**
+     * Creates a new instance.
+     *
+     * @param context context
+     * @param userId userId
+     * @param pendingIntent pending intent
+     * @return Can be {@code null} if pending intent was null.
+     */
+    public static MediaButtonReceiverHolder create(Context context, int userId,
+            PendingIntent pendingIntent) {
+        if (pendingIntent == null) {
+            return null;
+        }
+        ComponentName componentName = (pendingIntent != null && pendingIntent.getIntent() != null)
+                ? pendingIntent.getIntent().getComponent() : null;
+        if (componentName != null) {
+            // Explicit intent, where component name is in the PendingIntent.
+            return new MediaButtonReceiverHolder(userId, pendingIntent, componentName,
+                    getComponentType(context, componentName));
+        }
+
+        // Implicit intent, where component name isn't in the PendingIntent. Try resolve.
+        PackageManager pm = context.getPackageManager();
+        Intent intent = pendingIntent.getIntent();
+        if ((componentName = resolveImplicitServiceIntent(pm, intent)) != null) {
+            return new MediaButtonReceiverHolder(
+                    userId, pendingIntent, componentName, COMPONENT_TYPE_SERVICE);
+        } else if ((componentName = resolveManifestDeclaredBroadcastReceiverIntent(pm, intent))
+                != null) {
+            return new MediaButtonReceiverHolder(
+                    userId, pendingIntent, componentName, COMPONENT_TYPE_BROADCAST);
+        } else if ((componentName = resolveImplicitActivityIntent(pm, intent)) != null) {
+            return new MediaButtonReceiverHolder(
+                    userId, pendingIntent, componentName, COMPONENT_TYPE_ACTIVITY);
+        }
+
+        // Failed to resolve target component for the pending intent. It's unlikely to be usable.
+        // However, the pending intent would be still used, just to follow the legacy behavior.
+        Log.w(TAG, "Unresolvable implicit intent is set, pi=" + pendingIntent);
+        String packageName = (pendingIntent != null && pendingIntent.getIntent() != null)
+                ? pendingIntent.getIntent().getPackage() : null;
+        return new MediaButtonReceiverHolder(userId, pendingIntent,
+                packageName != null ? packageName : "");
+    }
+
+    private MediaButtonReceiverHolder(int userId, PendingIntent pendingIntent,
+            ComponentName componentName, @ComponentType int componentType) {
+        mUserId = userId;
+        mPendingIntent = pendingIntent;
+        mComponentName = componentName;
+        mPackageName = componentName.getPackageName();
+        mComponentType = componentType;
+    }
+
+    private MediaButtonReceiverHolder(int userId, PendingIntent pendingIntent, String packageName) {
+        mUserId = userId;
+        mPendingIntent = pendingIntent;
+        mComponentName = null;
+        mPackageName = packageName;
+        mComponentType = COMPONENT_TYPE_INVALID;
+    }
+
+    /**
+     * @return the user id
+     */
+    public int getUserId() {
+        return mUserId;
+    }
+
+    /**
+     * @return package name that the media button receiver would be sent to.
+     */
+    @NonNull
+    public String getPackageName() {
+        return mPackageName;
+    }
+
+    /**
+     * Sends the media key event to the media button receiver.
+     * <p>
+     * This prioritizes using use pending intent for sending media key event.
+     *
+     * @param context context to be used to call PendingIntent#send
+     * @param keyEvent keyEvent to send
+     * @param resultCode result code to be used to call PendingIntent#send
+     *                   Ignored if there's no valid pending intent.
+     * @param onFinishedListener callback to be used to get result of PendingIntent#send.
+     *                           Ignored if there's no valid pending intent.
+     * @param handler handler to be used to call onFinishedListener
+     *                Ignored if there's no valid pending intent.
+     * @see PendingIntent#send(Context, int, Intent, PendingIntent.OnFinished, Handler)
+     */
+    public boolean send(Context context, KeyEvent keyEvent, String callingPackageName,
+            int resultCode, PendingIntent.OnFinished onFinishedListener, Handler handler) {
+        Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+        mediaButtonIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+        mediaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
+        // TODO: Find a way to also send PID/UID in secure way.
+        mediaButtonIntent.putExtra(Intent.EXTRA_PACKAGE_NAME, callingPackageName);
+
+        if (mPendingIntent != null) {
+            if (DEBUG_KEY_EVENT) {
+                Log.d(TAG, "Sending " + keyEvent + " to the last known PendingIntent "
+                        + mPendingIntent);
+            }
+            try {
+                mPendingIntent.send(
+                        context, resultCode, mediaButtonIntent, onFinishedListener, handler);
+            } catch (PendingIntent.CanceledException e) {
+                Log.w(TAG, "Error sending key event to media button receiver " + mPendingIntent, e);
+                return false;
+            }
+        } else if (mComponentName != null) {
+            if (DEBUG_KEY_EVENT) {
+                Log.d(TAG, "Sending " + keyEvent + " to the restored intent "
+                        + mComponentName + ", type=" + mComponentType);
+            }
+            mediaButtonIntent.setComponent(mComponentName);
+            UserHandle userHandle = UserHandle.of(mUserId);
+            try {
+                switch (mComponentType) {
+                    case COMPONENT_TYPE_ACTIVITY:
+                        context.startActivityAsUser(mediaButtonIntent, userHandle);
+                        break;
+                    case COMPONENT_TYPE_SERVICE:
+                        context.startForegroundServiceAsUser(mediaButtonIntent,
+                                userHandle);
+                        break;
+                    default:
+                        // Legacy behavior for other cases.
+                        context.sendBroadcastAsUser(mediaButtonIntent, userHandle);
+                }
+            } catch (Exception e) {
+                Log.w(TAG, "Error sending media button to the restored intent "
+                        + mComponentName + ", type=" + mComponentType, e);
+                return false;
+            }
+        } else {
+            // Leave log, just in case.
+            Log.e(TAG, "Shouldn't be happen -- pending intent or component name must be set");
+            return false;
+        }
+        return true;
+    }
+
+
+    @Override
+    public String toString() {
+        if (mPendingIntent != null) {
+            return "MBR {pi=" + mPendingIntent + ", type=" + mComponentType + "}";
+        }
+        return "Restored MBR {component=" + mComponentName + ", type=" + mComponentType + "}";
+    }
+
+    /**
+     * @return flattened string. Can be empty string if the MBR is created with implicit intent.
+     */
+    public String flattenToString() {
+        if (mComponentName == null) {
+            // We don't know which component would receive the key event.
+            return "";
+        }
+        return String.join(COMPONENT_NAME_USER_ID_DELIM,
+                mComponentName.toString(),
+                String.valueOf(mUserId),
+                String.valueOf(mComponentType));
+    }
+
+    /**
+     * Gets the type of the component
+     *
+     * @param context context
+     * @param componentName component name
+     * @return A component type
+     */
+    @ComponentType
+    private static int getComponentType(Context context, ComponentName componentName) {
+        if (componentName == null) {
+            return COMPONENT_TYPE_INVALID;
+        }
+        PackageManager pm = context.getPackageManager();
+        try {
+            ActivityInfo activityInfo = pm.getActivityInfo(componentName,
+                    PackageManager.MATCH_DIRECT_BOOT_AWARE
+                            | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
+                            | PackageManager.GET_ACTIVITIES);
+            if (activityInfo != null) {
+                return COMPONENT_TYPE_ACTIVITY;
+            }
+        } catch (PackageManager.NameNotFoundException e) {
+        }
+        try {
+            ServiceInfo serviceInfo = pm.getServiceInfo(componentName,
+                    PackageManager.MATCH_DIRECT_BOOT_AWARE
+                            | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
+                            | PackageManager.GET_SERVICES);
+            if (serviceInfo != null) {
+                return COMPONENT_TYPE_SERVICE;
+            }
+        } catch (PackageManager.NameNotFoundException e) {
+        }
+        // Pick legacy behavior for BroadcastReceiver or unknown.
+        return COMPONENT_TYPE_BROADCAST;
+    }
+
+    private static ComponentName resolveImplicitServiceIntent(PackageManager pm, Intent intent) {
+        // Flag explanations.
+        // - MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE:
+        //     filter apps regardless of the phone's locked/unlocked state.
+        // - GET_SERVICES: Return service
+        return createComponentName(pm.resolveService(intent,
+                PackageManager.MATCH_DIRECT_BOOT_AWARE
+                        | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
+                        | PackageManager.GET_SERVICES));
+    }
+
+    private static ComponentName resolveManifestDeclaredBroadcastReceiverIntent(
+            PackageManager pm, Intent intent) {
+        // Flag explanations.
+        // - MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE:
+        //     filter apps regardless of the phone's locked/unlocked state.
+        List<ResolveInfo> resolveInfos = pm.queryBroadcastReceivers(intent,
+                PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
+        return (resolveInfos != null && !resolveInfos.isEmpty())
+                ? createComponentName(resolveInfos.get(0)) : null;
+    }
+
+    private static ComponentName resolveImplicitActivityIntent(PackageManager pm, Intent intent) {
+        // Flag explanations.
+        // - MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE:
+        //     Filter apps regardless of the phone's locked/unlocked state.
+        // - MATCH_DEFAULT_ONLY:
+        //     Implicit intent receiver should be set as default. Only needed for activity.
+        // - GET_ACTIVITIES: Return activity
+        return createComponentName(pm.resolveActivity(intent,
+                PackageManager.MATCH_DIRECT_BOOT_AWARE
+                        | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
+                        | PackageManager.MATCH_DEFAULT_ONLY
+                        | PackageManager.GET_ACTIVITIES));
+    }
+
+    private static ComponentName createComponentName(ResolveInfo resolveInfo) {
+        if (resolveInfo == null) {
+            return null;
+        }
+        ComponentInfo componentInfo;
+        // Code borrowed from ResolveInfo#getComponentInfo().
+        if (resolveInfo.activityInfo != null) {
+            componentInfo = resolveInfo.activityInfo;
+        } else if (resolveInfo.serviceInfo != null) {
+            componentInfo = resolveInfo.serviceInfo;
+        } else {
+            // We're not interested in content provider.
+            return null;
+        }
+        // Code borrowed from ComponentInfo#getComponentName().
+        try {
+            return new ComponentName(componentInfo.packageName, componentInfo.name);
+        } catch (IllegalArgumentException | NullPointerException e) {
+            // This may be happen if resolveActivity() end up with matching multiple activities.
+            // see PackageManager#resolveActivity().
+            return null;
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/media/MediaRoute2Provider.java b/services/core/java/com/android/server/media/MediaRoute2Provider.java
index 8358884..9b1824f 100644
--- a/services/core/java/com/android/server/media/MediaRoute2Provider.java
+++ b/services/core/java/com/android/server/media/MediaRoute2Provider.java
@@ -19,7 +19,6 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.ComponentName;
-import android.content.Intent;
 import android.media.MediaRoute2ProviderInfo;
 import android.media.RouteDiscoveryPreference;
 import android.media.RoutingSessionInfo;
@@ -48,7 +47,7 @@
         mUniqueId = componentName.flattenToShortString();
     }
 
-    public void setCallback(MediaRoute2ProviderProxy.Callback callback) {
+    public void setCallback(MediaRoute2ProviderServiceProxy.Callback callback) {
         mCallback = callback;
     }
 
@@ -61,8 +60,8 @@
     public abstract void deselectRoute(String sessionId, String routeId);
     public abstract void transferToRoute(String sessionId, String routeId);
 
-    public abstract void sendControlRequest(String routeId, Intent request);
-    public abstract void requestSetVolume(String routeId, int volume);
+    public abstract void setRouteVolume(String routeId, int volume);
+    public abstract void setSessionVolume(String sessionId, int volume);
 
     @NonNull
     public String getUniqueId() {
diff --git a/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java b/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java
deleted file mode 100644
index d08fb71..0000000
--- a/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java
+++ /dev/null
@@ -1,590 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.server.media;
-
-import android.annotation.NonNull;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.media.IMediaRoute2Provider;
-import android.media.IMediaRoute2ProviderClient;
-import android.media.MediaRoute2ProviderInfo;
-import android.media.MediaRoute2ProviderService;
-import android.media.RouteDiscoveryPreference;
-import android.media.RoutingSessionInfo;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.IBinder.DeathRecipient;
-import android.os.RemoteException;
-import android.os.UserHandle;
-import android.util.Log;
-import android.util.Slog;
-
-import java.io.PrintWriter;
-import java.lang.ref.WeakReference;
-import java.util.Objects;
-
-/**
- * Maintains a connection to a particular media route provider service.
- */
-// TODO: Need to revisit the bind/unbind/connect/disconnect logic in this class.
-final class MediaRoute2ProviderProxy extends MediaRoute2Provider implements ServiceConnection {
-    private static final String TAG = "MR2ProviderProxy";
-    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-
-    private final Context mContext;
-    private final int mUserId;
-    private final Handler mHandler;
-
-    // Connection state
-    private boolean mRunning;
-    private boolean mBound;
-    private Connection mActiveConnection;
-    private boolean mConnectionReady;
-
-    MediaRoute2ProviderProxy(@NonNull Context context, @NonNull ComponentName componentName,
-            int userId) {
-        super(componentName);
-        mContext = Objects.requireNonNull(context, "Context must not be null.");
-        mUserId = userId;
-        mHandler = new Handler();
-    }
-
-    public void dump(PrintWriter pw, String prefix) {
-        pw.println(prefix + "Proxy");
-        pw.println(prefix + "  mUserId=" + mUserId);
-        pw.println(prefix + "  mRunning=" + mRunning);
-        pw.println(prefix + "  mBound=" + mBound);
-        pw.println(prefix + "  mActiveConnection=" + mActiveConnection);
-        pw.println(prefix + "  mConnectionReady=" + mConnectionReady);
-    }
-
-    @Override
-    public void requestCreateSession(String packageName, String routeId, long requestId,
-            Bundle sessionHints) {
-        if (mConnectionReady) {
-            mActiveConnection.requestCreateSession(
-                    packageName, routeId, requestId, sessionHints);
-            updateBinding();
-        }
-    }
-
-    @Override
-    public void releaseSession(String sessionId) {
-        if (mConnectionReady) {
-            mActiveConnection.releaseSession(sessionId);
-            updateBinding();
-        }
-    }
-
-    @Override
-    public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference) {
-        if (mConnectionReady) {
-            mActiveConnection.updateDiscoveryPreference(discoveryPreference);
-            updateBinding();
-        }
-    }
-
-    @Override
-    public void selectRoute(String sessionId, String routeId) {
-        if (mConnectionReady) {
-            mActiveConnection.selectRoute(sessionId, routeId);
-        }
-    }
-
-    @Override
-    public void deselectRoute(String sessionId, String routeId) {
-        if (mConnectionReady) {
-            mActiveConnection.deselectRoute(sessionId, routeId);
-        }
-    }
-
-    @Override
-    public void transferToRoute(String sessionId, String routeId) {
-        if (mConnectionReady) {
-            mActiveConnection.transferToRoute(sessionId, routeId);
-        }
-    }
-
-    @Override
-    public void sendControlRequest(String routeId, Intent request) {
-        if (mConnectionReady) {
-            mActiveConnection.sendControlRequest(routeId, request);
-            updateBinding();
-        }
-    }
-
-    @Override
-    public void requestSetVolume(String routeId, int volume) {
-        if (mConnectionReady) {
-            mActiveConnection.requestSetVolume(routeId, volume);
-            updateBinding();
-        }
-    }
-
-    public boolean hasComponentName(String packageName, String className) {
-        return mComponentName.getPackageName().equals(packageName)
-                && mComponentName.getClassName().equals(className);
-    }
-
-    public void start() {
-        if (!mRunning) {
-            if (DEBUG) {
-                Slog.d(TAG, this + ": Starting");
-            }
-            mRunning = true;
-            updateBinding();
-        }
-    }
-
-    public void stop() {
-        if (mRunning) {
-            if (DEBUG) {
-                Slog.d(TAG, this + ": Stopping");
-            }
-            mRunning = false;
-            updateBinding();
-        }
-    }
-
-    public void rebindIfDisconnected() {
-        if (mActiveConnection == null && shouldBind()) {
-            unbind();
-            bind();
-        }
-    }
-
-    private void updateBinding() {
-        if (shouldBind()) {
-            bind();
-        } else {
-            unbind();
-        }
-    }
-
-    private boolean shouldBind() {
-        //TODO: Binding could be delayed until it's necessary.
-        if (mRunning) {
-            return true;
-        }
-        return false;
-    }
-
-    private void bind() {
-        if (!mBound) {
-            if (DEBUG) {
-                Slog.d(TAG, this + ": Binding");
-            }
-
-            Intent service = new Intent(MediaRoute2ProviderService.SERVICE_INTERFACE);
-            service.setComponent(mComponentName);
-            try {
-                mBound = mContext.bindServiceAsUser(service, this,
-                        Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE,
-                        new UserHandle(mUserId));
-                if (!mBound && DEBUG) {
-                    Slog.d(TAG, this + ": Bind failed");
-                }
-            } catch (SecurityException ex) {
-                if (DEBUG) {
-                    Slog.d(TAG, this + ": Bind failed", ex);
-                }
-            }
-        }
-    }
-
-    private void unbind() {
-        if (mBound) {
-            if (DEBUG) {
-                Slog.d(TAG, this + ": Unbinding");
-            }
-
-            mBound = false;
-            disconnect();
-            mContext.unbindService(this);
-        }
-    }
-
-    @Override
-    public void onServiceConnected(ComponentName name, IBinder service) {
-        if (DEBUG) {
-            Slog.d(TAG, this + ": Connected");
-        }
-
-        if (mBound) {
-            disconnect();
-
-            IMediaRoute2Provider provider = IMediaRoute2Provider.Stub.asInterface(service);
-            if (provider != null) {
-                Connection connection = new Connection(provider);
-                if (connection.register()) {
-                    mActiveConnection = connection;
-                } else {
-                    if (DEBUG) {
-                        Slog.d(TAG, this + ": Registration failed");
-                    }
-                }
-            } else {
-                Slog.e(TAG, this + ": Service returned invalid remote display provider binder");
-            }
-        }
-    }
-
-    @Override
-    public void onServiceDisconnected(ComponentName name) {
-        if (DEBUG) {
-            Slog.d(TAG, this + ": Service disconnected");
-        }
-        disconnect();
-    }
-
-    @Override
-    public void onBindingDied(ComponentName name) {
-        if (DEBUG) {
-            Slog.d(TAG, this + ": Service binding died");
-        }
-        // TODO: Investigate whether it tries to bind endlessly when the service is
-        //       badly implemented.
-        if (shouldBind()) {
-            unbind();
-            bind();
-        }
-    }
-
-    private void onConnectionReady(Connection connection) {
-        if (mActiveConnection == connection) {
-            mConnectionReady = true;
-        }
-    }
-
-    private void onConnectionDied(Connection connection) {
-        if (mActiveConnection == connection) {
-            if (DEBUG) {
-                Slog.d(TAG, this + ": Service connection died");
-            }
-            disconnect();
-        }
-    }
-
-    private void onProviderStateUpdated(Connection connection,
-            MediaRoute2ProviderInfo providerInfo) {
-        if (mActiveConnection != connection) {
-            return;
-        }
-        if (DEBUG) {
-            Slog.d(TAG, this + ": State changed ");
-        }
-        setAndNotifyProviderState(providerInfo);
-    }
-
-    private void onSessionCreated(Connection connection, RoutingSessionInfo sessionInfo,
-            long requestId) {
-        if (mActiveConnection != connection) {
-            return;
-        }
-
-        if (sessionInfo == null) {
-            Slog.w(TAG, "onSessionCreated: Ignoring null sessionInfo sent from " + mComponentName);
-            return;
-        }
-
-        sessionInfo = new RoutingSessionInfo.Builder(sessionInfo)
-                .setProviderId(getUniqueId())
-                .build();
-
-        boolean duplicateSessionAlreadyExists = false;
-        synchronized (mLock) {
-            for (int i = 0; i < mSessionInfos.size(); i++) {
-                if (mSessionInfos.get(i).getId().equals(sessionInfo.getId())) {
-                    duplicateSessionAlreadyExists = true;
-                    break;
-                }
-            }
-            mSessionInfos.add(sessionInfo);
-        }
-
-        if (duplicateSessionAlreadyExists) {
-            Slog.w(TAG, "onSessionCreated: Duplicate session already exists. Ignoring.");
-            return;
-        }
-
-        mCallback.onSessionCreated(this, sessionInfo, requestId);
-    }
-
-    private void onSessionCreationFailed(Connection connection, long requestId) {
-        if (mActiveConnection != connection) {
-            return;
-        }
-
-        if (requestId == MediaRoute2ProviderService.REQUEST_ID_UNKNOWN) {
-            Slog.w(TAG, "onSessionCreationFailed: Ignoring requestId REQUEST_ID_UNKNOWN");
-            return;
-        }
-
-        mCallback.onSessionCreationFailed(this, requestId);
-    }
-
-    private void onSessionUpdated(Connection connection, RoutingSessionInfo sessionInfo) {
-        if (mActiveConnection != connection) {
-            return;
-        }
-        if (sessionInfo == null) {
-            Slog.w(TAG, "onSessionUpdated: Ignoring null sessionInfo sent from "
-                    + mComponentName);
-            return;
-        }
-
-        sessionInfo = new RoutingSessionInfo.Builder(sessionInfo)
-                .setProviderId(getUniqueId())
-                .build();
-
-        boolean found = false;
-        synchronized (mLock) {
-            for (int i = 0; i < mSessionInfos.size(); i++) {
-                if (mSessionInfos.get(i).getId().equals(sessionInfo.getId())) {
-                    mSessionInfos.set(i, sessionInfo);
-                    found = true;
-                    break;
-                }
-            }
-        }
-
-        if (!found) {
-            Slog.w(TAG, "onSessionUpdated: Matching session info not found");
-            return;
-        }
-
-        mCallback.onSessionUpdated(this, sessionInfo);
-    }
-
-    private void onSessionReleased(Connection connection, RoutingSessionInfo sessionInfo) {
-        if (mActiveConnection != connection) {
-            return;
-        }
-        if (sessionInfo == null) {
-            Slog.w(TAG, "onSessionReleased: Ignoring null sessionInfo sent from " + mComponentName);
-            return;
-        }
-
-        sessionInfo = new RoutingSessionInfo.Builder(sessionInfo)
-                .setProviderId(getUniqueId())
-                .build();
-
-        boolean found = false;
-        synchronized (mLock) {
-            for (int i = 0; i < mSessionInfos.size(); i++) {
-                if (mSessionInfos.get(i).getId().equals(sessionInfo.getId())) {
-                    mSessionInfos.remove(i);
-                    found = true;
-                    break;
-                }
-            }
-        }
-
-        if (!found) {
-            Slog.w(TAG, "onSessionReleased: Matching session info not found");
-            return;
-        }
-
-        mCallback.onSessionReleased(this, sessionInfo);
-    }
-
-    private void disconnect() {
-        if (mActiveConnection != null) {
-            mConnectionReady = false;
-            mActiveConnection.dispose();
-            mActiveConnection = null;
-            setAndNotifyProviderState(null);
-        }
-    }
-
-    @Override
-    public String toString() {
-        return "Service connection " + mComponentName.flattenToShortString();
-    }
-
-    private final class Connection implements DeathRecipient {
-        private final IMediaRoute2Provider mProvider;
-        private final ProviderClient mClient;
-
-        Connection(IMediaRoute2Provider provider) {
-            mProvider = provider;
-            mClient = new ProviderClient(this);
-        }
-
-        public boolean register() {
-            try {
-                mProvider.asBinder().linkToDeath(this, 0);
-                mProvider.setClient(mClient);
-                mHandler.post(() -> onConnectionReady(Connection.this));
-                return true;
-            } catch (RemoteException ex) {
-                binderDied();
-            }
-            return false;
-        }
-
-        public void dispose() {
-            mProvider.asBinder().unlinkToDeath(this, 0);
-            mClient.dispose();
-        }
-
-        public void requestCreateSession(String packageName, String routeId, long requestId,
-                Bundle sessionHints) {
-            try {
-                mProvider.requestCreateSession(packageName, routeId, requestId, sessionHints);
-            } catch (RemoteException ex) {
-                Slog.e(TAG, "Failed to deliver request to create a session.", ex);
-            }
-        }
-
-        public void releaseSession(String sessionId) {
-            try {
-                mProvider.releaseSession(sessionId);
-            } catch (RemoteException ex) {
-                Slog.e(TAG, "Failed to deliver request to release a session.", ex);
-            }
-        }
-
-        public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference) {
-            try {
-                mProvider.updateDiscoveryPreference(discoveryPreference);
-            } catch (RemoteException ex) {
-                Slog.e(TAG, "updateDiscoveryPreference(): Failed to deliver request.");
-            }
-        }
-
-        public void selectRoute(String sessionId, String routeId) {
-            try {
-                mProvider.selectRoute(sessionId, routeId);
-            } catch (RemoteException ex) {
-                Slog.e(TAG, "Failed to deliver request to select a route for a session.", ex);
-            }
-        }
-
-        public void deselectRoute(String sessionId, String routeId) {
-            try {
-                mProvider.deselectRoute(sessionId, routeId);
-            } catch (RemoteException ex) {
-                Slog.e(TAG, "Failed to deliver request to deselect a route from a session.", ex);
-            }
-        }
-
-        public void transferToRoute(String sessionId, String routeId) {
-            try {
-                mProvider.transferToRoute(sessionId, routeId);
-            } catch (RemoteException ex) {
-                Slog.e(TAG, "Failed to deliver request to transfer a session to a route.", ex);
-            }
-        }
-
-        public void sendControlRequest(String routeId, Intent request) {
-            try {
-                mProvider.notifyControlRequestSent(routeId, request);
-            } catch (RemoteException ex) {
-                Slog.e(TAG, "Failed to deliver request to send control request.", ex);
-            }
-        }
-
-        public void requestSetVolume(String routeId, int volume) {
-            try {
-                mProvider.requestSetVolume(routeId, volume);
-            } catch (RemoteException ex) {
-                Slog.e(TAG, "Failed to deliver request to request set volume.", ex);
-            }
-        }
-
-        @Override
-        public void binderDied() {
-            mHandler.post(() -> onConnectionDied(Connection.this));
-        }
-
-        void postProviderStateUpdated(MediaRoute2ProviderInfo providerInfo) {
-            mHandler.post(() -> onProviderStateUpdated(Connection.this, providerInfo));
-        }
-
-        void postSessionCreated(RoutingSessionInfo sessionInfo, long requestId) {
-            mHandler.post(() -> onSessionCreated(Connection.this, sessionInfo, requestId));
-        }
-
-        void postSessionCreationFailed(long requestId) {
-            mHandler.post(() -> onSessionCreationFailed(Connection.this, requestId));
-        }
-
-        void postSessionUpdated(RoutingSessionInfo sessionInfo) {
-            mHandler.post(() -> onSessionUpdated(Connection.this, sessionInfo));
-        }
-
-        void postSessionReleased(RoutingSessionInfo sessionInfo) {
-            mHandler.post(() -> onSessionReleased(Connection.this, sessionInfo));
-        }
-    }
-
-    private static final class ProviderClient extends IMediaRoute2ProviderClient.Stub  {
-        private final WeakReference<Connection> mConnectionRef;
-
-        ProviderClient(Connection connection) {
-            mConnectionRef = new WeakReference<>(connection);
-        }
-
-        public void dispose() {
-            mConnectionRef.clear();
-        }
-
-        @Override
-        public void updateState(MediaRoute2ProviderInfo providerInfo) {
-            Connection connection = mConnectionRef.get();
-            if (connection != null) {
-                connection.postProviderStateUpdated(providerInfo);
-            }
-        }
-
-        @Override
-        public void notifySessionCreated(RoutingSessionInfo sessionInfo, long requestId) {
-            Connection connection = mConnectionRef.get();
-            if (connection != null) {
-                connection.postSessionCreated(sessionInfo, requestId);
-            }
-        }
-
-        @Override
-        public void notifySessionCreationFailed(long requestId) {
-            Connection connection = mConnectionRef.get();
-            if (connection != null) {
-                connection.postSessionCreationFailed(requestId);
-            }
-        }
-
-        @Override
-        public void notifySessionUpdated(RoutingSessionInfo sessionInfo) {
-            Connection connection = mConnectionRef.get();
-            if (connection != null) {
-                connection.postSessionUpdated(sessionInfo);
-            }
-        }
-
-        @Override
-        public void notifySessionReleased(RoutingSessionInfo sessionInfo) {
-            Connection connection = mConnectionRef.get();
-            if (connection != null) {
-                connection.postSessionReleased(sessionInfo);
-            }
-        }
-    }
-}
diff --git a/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java b/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java
new file mode 100644
index 0000000..60934e0
--- /dev/null
+++ b/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java
@@ -0,0 +1,598 @@
+/*
+ * 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.
+ */
+
+package com.android.server.media;
+
+import android.annotation.NonNull;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.media.IMediaRoute2ProviderService;
+import android.media.IMediaRoute2ProviderServiceCallback;
+import android.media.MediaRoute2ProviderInfo;
+import android.media.MediaRoute2ProviderService;
+import android.media.RouteDiscoveryPreference;
+import android.media.RoutingSessionInfo;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.IBinder.DeathRecipient;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.util.Log;
+import android.util.Slog;
+
+import java.io.PrintWriter;
+import java.lang.ref.WeakReference;
+import java.util.Objects;
+
+/**
+ * Maintains a connection to a particular {@link MediaRoute2ProviderService}.
+ */
+// TODO: Need to revisit the bind/unbind/connect/disconnect logic in this class.
+final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider
+        implements ServiceConnection {
+    private static final String TAG = "MR2ProviderSvcProxy";
+    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+    private final Context mContext;
+    private final int mUserId;
+    private final Handler mHandler;
+
+    // Connection state
+    private boolean mRunning;
+    private boolean mBound;
+    private Connection mActiveConnection;
+    private boolean mConnectionReady;
+
+    MediaRoute2ProviderServiceProxy(@NonNull Context context, @NonNull ComponentName componentName,
+            int userId) {
+        super(componentName);
+        mContext = Objects.requireNonNull(context, "Context must not be null.");
+        mUserId = userId;
+        mHandler = new Handler(Looper.myLooper());
+    }
+
+    public void dump(PrintWriter pw, String prefix) {
+        pw.println(prefix + "Proxy");
+        pw.println(prefix + "  mUserId=" + mUserId);
+        pw.println(prefix + "  mRunning=" + mRunning);
+        pw.println(prefix + "  mBound=" + mBound);
+        pw.println(prefix + "  mActiveConnection=" + mActiveConnection);
+        pw.println(prefix + "  mConnectionReady=" + mConnectionReady);
+    }
+
+    @Override
+    public void requestCreateSession(String packageName, String routeId, long requestId,
+            Bundle sessionHints) {
+        if (mConnectionReady) {
+            mActiveConnection.requestCreateSession(packageName, routeId, requestId, sessionHints);
+            updateBinding();
+        }
+    }
+
+    @Override
+    public void releaseSession(String sessionId) {
+        if (mConnectionReady) {
+            mActiveConnection.releaseSession(sessionId);
+            updateBinding();
+        }
+    }
+
+    @Override
+    public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference) {
+        if (mConnectionReady) {
+            mActiveConnection.updateDiscoveryPreference(discoveryPreference);
+            updateBinding();
+        }
+    }
+
+    @Override
+    public void selectRoute(String sessionId, String routeId) {
+        if (mConnectionReady) {
+            mActiveConnection.selectRoute(sessionId, routeId);
+        }
+    }
+
+    @Override
+    public void deselectRoute(String sessionId, String routeId) {
+        if (mConnectionReady) {
+            mActiveConnection.deselectRoute(sessionId, routeId);
+        }
+    }
+
+    @Override
+    public void transferToRoute(String sessionId, String routeId) {
+        if (mConnectionReady) {
+            mActiveConnection.transferToRoute(sessionId, routeId);
+        }
+    }
+
+    @Override
+    public void setRouteVolume(String routeId, int volume) {
+        if (mConnectionReady) {
+            mActiveConnection.setRouteVolume(routeId, volume);
+            updateBinding();
+        }
+    }
+
+    @Override
+    public void setSessionVolume(String sessionId, int volume) {
+        if (mConnectionReady) {
+            mActiveConnection.setSessionVolume(sessionId, volume);
+            updateBinding();
+        }
+    }
+
+    public boolean hasComponentName(String packageName, String className) {
+        return mComponentName.getPackageName().equals(packageName)
+                && mComponentName.getClassName().equals(className);
+    }
+
+    public void start() {
+        if (!mRunning) {
+            if (DEBUG) {
+                Slog.d(TAG, this + ": Starting");
+            }
+            mRunning = true;
+            updateBinding();
+        }
+    }
+
+    public void stop() {
+        if (mRunning) {
+            if (DEBUG) {
+                Slog.d(TAG, this + ": Stopping");
+            }
+            mRunning = false;
+            updateBinding();
+        }
+    }
+
+    public void rebindIfDisconnected() {
+        if (mActiveConnection == null && shouldBind()) {
+            unbind();
+            bind();
+        }
+    }
+
+    private void updateBinding() {
+        if (shouldBind()) {
+            bind();
+        } else {
+            unbind();
+        }
+    }
+
+    private boolean shouldBind() {
+        //TODO: Binding could be delayed until it's necessary.
+        if (mRunning) {
+            return true;
+        }
+        return false;
+    }
+
+    private void bind() {
+        if (!mBound) {
+            if (DEBUG) {
+                Slog.d(TAG, this + ": Binding");
+            }
+
+            Intent service = new Intent(MediaRoute2ProviderService.SERVICE_INTERFACE);
+            service.setComponent(mComponentName);
+            try {
+                mBound = mContext.bindServiceAsUser(service, this,
+                        Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE,
+                        new UserHandle(mUserId));
+                if (!mBound && DEBUG) {
+                    Slog.d(TAG, this + ": Bind failed");
+                }
+            } catch (SecurityException ex) {
+                if (DEBUG) {
+                    Slog.d(TAG, this + ": Bind failed", ex);
+                }
+            }
+        }
+    }
+
+    private void unbind() {
+        if (mBound) {
+            if (DEBUG) {
+                Slog.d(TAG, this + ": Unbinding");
+            }
+
+            mBound = false;
+            disconnect();
+            mContext.unbindService(this);
+        }
+    }
+
+    @Override
+    public void onServiceConnected(ComponentName name, IBinder service) {
+        if (DEBUG) {
+            Slog.d(TAG, this + ": Connected");
+        }
+
+        if (mBound) {
+            disconnect();
+            IMediaRoute2ProviderService serviceBinder =
+                    IMediaRoute2ProviderService.Stub.asInterface(service);
+            if (serviceBinder != null) {
+                Connection connection = new Connection(serviceBinder);
+                if (connection.register()) {
+                    mActiveConnection = connection;
+                } else {
+                    if (DEBUG) {
+                        Slog.d(TAG, this + ": Registration failed");
+                    }
+                }
+            } else {
+                Slog.e(TAG, this + ": Service returned invalid binder");
+            }
+        }
+    }
+
+    @Override
+    public void onServiceDisconnected(ComponentName name) {
+        if (DEBUG) {
+            Slog.d(TAG, this + ": Service disconnected");
+        }
+        disconnect();
+    }
+
+    @Override
+    public void onBindingDied(ComponentName name) {
+        if (DEBUG) {
+            Slog.d(TAG, this + ": Service binding died");
+        }
+        // TODO: Investigate whether it tries to bind endlessly when the service is
+        //       badly implemented.
+        if (shouldBind()) {
+            unbind();
+            bind();
+        }
+    }
+
+    private void onConnectionReady(Connection connection) {
+        if (mActiveConnection == connection) {
+            mConnectionReady = true;
+        }
+    }
+
+    private void onConnectionDied(Connection connection) {
+        if (mActiveConnection == connection) {
+            if (DEBUG) {
+                Slog.d(TAG, this + ": Service connection died");
+            }
+            disconnect();
+        }
+    }
+
+    private void onProviderStateUpdated(Connection connection,
+            MediaRoute2ProviderInfo providerInfo) {
+        if (mActiveConnection != connection) {
+            return;
+        }
+        if (DEBUG) {
+            Slog.d(TAG, this + ": State changed ");
+        }
+        setAndNotifyProviderState(providerInfo);
+    }
+
+    private void onSessionCreated(Connection connection, RoutingSessionInfo sessionInfo,
+            long requestId) {
+        if (mActiveConnection != connection) {
+            return;
+        }
+
+        if (sessionInfo == null) {
+            Slog.w(TAG, "onSessionCreated: Ignoring null sessionInfo sent from " + mComponentName);
+            return;
+        }
+
+        sessionInfo = new RoutingSessionInfo.Builder(sessionInfo)
+                .setProviderId(getUniqueId())
+                .build();
+
+        boolean duplicateSessionAlreadyExists = false;
+        synchronized (mLock) {
+            for (int i = 0; i < mSessionInfos.size(); i++) {
+                if (mSessionInfos.get(i).getId().equals(sessionInfo.getId())) {
+                    duplicateSessionAlreadyExists = true;
+                    break;
+                }
+            }
+            mSessionInfos.add(sessionInfo);
+        }
+
+        if (duplicateSessionAlreadyExists) {
+            Slog.w(TAG, "onSessionCreated: Duplicate session already exists. Ignoring.");
+            return;
+        }
+
+        mCallback.onSessionCreated(this, sessionInfo, requestId);
+    }
+
+    private void onSessionCreationFailed(Connection connection, long requestId) {
+        if (mActiveConnection != connection) {
+            return;
+        }
+
+        if (requestId == MediaRoute2ProviderService.REQUEST_ID_UNKNOWN) {
+            Slog.w(TAG, "onSessionCreationFailed: Ignoring requestId REQUEST_ID_UNKNOWN");
+            return;
+        }
+
+        mCallback.onSessionCreationFailed(this, requestId);
+    }
+
+    private void onSessionUpdated(Connection connection, RoutingSessionInfo sessionInfo) {
+        if (mActiveConnection != connection) {
+            return;
+        }
+        if (sessionInfo == null) {
+            Slog.w(TAG, "onSessionUpdated: Ignoring null sessionInfo sent from "
+                    + mComponentName);
+            return;
+        }
+
+        sessionInfo = new RoutingSessionInfo.Builder(sessionInfo)
+                .setProviderId(getUniqueId())
+                .build();
+
+        boolean found = false;
+        synchronized (mLock) {
+            for (int i = 0; i < mSessionInfos.size(); i++) {
+                if (mSessionInfos.get(i).getId().equals(sessionInfo.getId())) {
+                    mSessionInfos.set(i, sessionInfo);
+                    found = true;
+                    break;
+                }
+            }
+        }
+
+        if (!found) {
+            Slog.w(TAG, "onSessionUpdated: Matching session info not found");
+            return;
+        }
+
+        mCallback.onSessionUpdated(this, sessionInfo);
+    }
+
+    private void onSessionReleased(Connection connection, RoutingSessionInfo sessionInfo) {
+        if (mActiveConnection != connection) {
+            return;
+        }
+        if (sessionInfo == null) {
+            Slog.w(TAG, "onSessionReleased: Ignoring null sessionInfo sent from " + mComponentName);
+            return;
+        }
+
+        sessionInfo = new RoutingSessionInfo.Builder(sessionInfo)
+                .setProviderId(getUniqueId())
+                .build();
+
+        boolean found = false;
+        synchronized (mLock) {
+            for (int i = 0; i < mSessionInfos.size(); i++) {
+                if (mSessionInfos.get(i).getId().equals(sessionInfo.getId())) {
+                    mSessionInfos.remove(i);
+                    found = true;
+                    break;
+                }
+            }
+        }
+
+        if (!found) {
+            Slog.w(TAG, "onSessionReleased: Matching session info not found");
+            return;
+        }
+
+        mCallback.onSessionReleased(this, sessionInfo);
+    }
+
+    private void disconnect() {
+        if (mActiveConnection != null) {
+            mConnectionReady = false;
+            mActiveConnection.dispose();
+            mActiveConnection = null;
+            setAndNotifyProviderState(null);
+            synchronized (mLock) {
+                for (RoutingSessionInfo sessionInfo : mSessionInfos) {
+                    mCallback.onSessionReleased(this, sessionInfo);
+                }
+                mSessionInfos.clear();
+            }
+        }
+    }
+
+    @Override
+    public String toString() {
+        return "Service connection " + mComponentName.flattenToShortString();
+    }
+
+    private final class Connection implements DeathRecipient {
+        private final IMediaRoute2ProviderService mService;
+        private final ServiceCallbackStub mCallbackStub;
+
+        Connection(IMediaRoute2ProviderService serviceBinder) {
+            mService = serviceBinder;
+            mCallbackStub = new ServiceCallbackStub(this);
+        }
+
+        public boolean register() {
+            try {
+                mService.asBinder().linkToDeath(this, 0);
+                mService.setCallback(mCallbackStub);
+                mHandler.post(() -> onConnectionReady(Connection.this));
+                return true;
+            } catch (RemoteException ex) {
+                binderDied();
+            }
+            return false;
+        }
+
+        public void dispose() {
+            mService.asBinder().unlinkToDeath(this, 0);
+            mCallbackStub.dispose();
+        }
+
+        public void requestCreateSession(String packageName, String routeId, long requestId,
+                Bundle sessionHints) {
+            try {
+                mService.requestCreateSession(packageName, routeId, requestId, sessionHints);
+            } catch (RemoteException ex) {
+                Slog.e(TAG, "requestCreateSession: Failed to deliver request.");
+            }
+        }
+
+        public void releaseSession(String sessionId) {
+            try {
+                mService.releaseSession(sessionId);
+            } catch (RemoteException ex) {
+                Slog.e(TAG, "releaseSession: Failed to deliver request.");
+            }
+        }
+
+        public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference) {
+            try {
+                mService.updateDiscoveryPreference(discoveryPreference);
+            } catch (RemoteException ex) {
+                Slog.e(TAG, "updateDiscoveryPreference: Failed to deliver request.");
+            }
+        }
+
+        public void selectRoute(String sessionId, String routeId) {
+            try {
+                mService.selectRoute(sessionId, routeId);
+            } catch (RemoteException ex) {
+                Slog.e(TAG, "selectRoute: Failed to deliver request.", ex);
+            }
+        }
+
+        public void deselectRoute(String sessionId, String routeId) {
+            try {
+                mService.deselectRoute(sessionId, routeId);
+            } catch (RemoteException ex) {
+                Slog.e(TAG, "deselectRoute: Failed to deliver request.", ex);
+            }
+        }
+
+        public void transferToRoute(String sessionId, String routeId) {
+            try {
+                mService.transferToRoute(sessionId, routeId);
+            } catch (RemoteException ex) {
+                Slog.e(TAG, "transferToRoute: Failed to deliver request.", ex);
+            }
+        }
+
+        public void setRouteVolume(String routeId, int volume) {
+            try {
+                mService.setRouteVolume(routeId, volume);
+            } catch (RemoteException ex) {
+                Slog.e(TAG, "setRouteVolume: Failed to deliver request.", ex);
+            }
+        }
+
+        public void setSessionVolume(String sessionId, int volume) {
+            try {
+                mService.setSessionVolume(sessionId, volume);
+            } catch (RemoteException ex) {
+                Slog.e(TAG, "setSessionVolume: Failed to deliver request.", ex);
+            }
+        }
+
+        @Override
+        public void binderDied() {
+            mHandler.post(() -> onConnectionDied(Connection.this));
+        }
+
+        void postProviderStateUpdated(MediaRoute2ProviderInfo providerInfo) {
+            mHandler.post(() -> onProviderStateUpdated(Connection.this, providerInfo));
+        }
+
+        void postSessionCreated(RoutingSessionInfo sessionInfo, long requestId) {
+            mHandler.post(() -> onSessionCreated(Connection.this, sessionInfo, requestId));
+        }
+
+        void postSessionCreationFailed(long requestId) {
+            mHandler.post(() -> onSessionCreationFailed(Connection.this, requestId));
+        }
+
+        void postSessionUpdated(RoutingSessionInfo sessionInfo) {
+            mHandler.post(() -> onSessionUpdated(Connection.this, sessionInfo));
+        }
+
+        void postSessionReleased(RoutingSessionInfo sessionInfo) {
+            mHandler.post(() -> onSessionReleased(Connection.this, sessionInfo));
+        }
+    }
+
+    private static final class ServiceCallbackStub extends
+            IMediaRoute2ProviderServiceCallback.Stub {
+        private final WeakReference<Connection> mConnectionRef;
+
+        ServiceCallbackStub(Connection connection) {
+            mConnectionRef = new WeakReference<>(connection);
+        }
+
+        public void dispose() {
+            mConnectionRef.clear();
+        }
+
+        @Override
+        public void updateState(MediaRoute2ProviderInfo providerInfo) {
+            Connection connection = mConnectionRef.get();
+            if (connection != null) {
+                connection.postProviderStateUpdated(providerInfo);
+            }
+        }
+
+        @Override
+        public void notifySessionCreated(RoutingSessionInfo sessionInfo, long requestId) {
+            Connection connection = mConnectionRef.get();
+            if (connection != null) {
+                connection.postSessionCreated(sessionInfo, requestId);
+            }
+        }
+
+        @Override
+        public void notifySessionCreationFailed(long requestId) {
+            Connection connection = mConnectionRef.get();
+            if (connection != null) {
+                connection.postSessionCreationFailed(requestId);
+            }
+        }
+
+        @Override
+        public void notifySessionUpdated(RoutingSessionInfo sessionInfo) {
+            Connection connection = mConnectionRef.get();
+            if (connection != null) {
+                connection.postSessionUpdated(sessionInfo);
+            }
+        }
+
+        @Override
+        public void notifySessionReleased(RoutingSessionInfo sessionInfo) {
+            Connection connection = mConnectionRef.get();
+            if (connection != null) {
+                connection.postSessionReleased(sessionInfo);
+            }
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/media/MediaRoute2ProviderWatcher.java b/services/core/java/com/android/server/media/MediaRoute2ProviderWatcher.java
index c95119d..fe118e5 100644
--- a/services/core/java/com/android/server/media/MediaRoute2ProviderWatcher.java
+++ b/services/core/java/com/android/server/media/MediaRoute2ProviderWatcher.java
@@ -16,6 +16,7 @@
 
 package com.android.server.media;
 
+import android.annotation.NonNull;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -47,7 +48,7 @@
     private final int mUserId;
     private final PackageManager mPackageManager;
 
-    private final ArrayList<MediaRoute2ProviderProxy> mProviders = new ArrayList<>();
+    private final ArrayList<MediaRoute2ProviderServiceProxy> mProxies = new ArrayList<>();
     private boolean mRunning;
 
     MediaRoute2ProviderWatcher(Context context,
@@ -63,7 +64,7 @@
         pw.println(prefix + "Watcher");
         pw.println(prefix + "  mUserId=" + mUserId);
         pw.println(prefix + "  mRunning=" + mRunning);
-        pw.println(prefix + "  mProviders.size()=" + mProviders.size());
+        pw.println(prefix + "  mProxies.size()=" + mProxies.size());
     }
 
     public void start() {
@@ -94,8 +95,8 @@
             mHandler.removeCallbacks(mScanPackagesRunnable);
 
             // Stop all providers.
-            for (int i = mProviders.size() - 1; i >= 0; i--) {
-                mProviders.get(i).stop();
+            for (int i = mProxies.size() - 1; i >= 0; i--) {
+                mProxies.get(i).stop();
             }
         }
     }
@@ -115,38 +116,38 @@
             if (serviceInfo != null) {
                 int sourceIndex = findProvider(serviceInfo.packageName, serviceInfo.name);
                 if (sourceIndex < 0) {
-                    MediaRoute2ProviderProxy provider =
-                            new MediaRoute2ProviderProxy(mContext,
+                    MediaRoute2ProviderServiceProxy proxy =
+                            new MediaRoute2ProviderServiceProxy(mContext,
                             new ComponentName(serviceInfo.packageName, serviceInfo.name),
                             mUserId);
-                    provider.start();
-                    mProviders.add(targetIndex++, provider);
-                    mCallback.onAddProvider(provider);
+                    proxy.start();
+                    mProxies.add(targetIndex++, proxy);
+                    mCallback.onAddProviderService(proxy);
                 } else if (sourceIndex >= targetIndex) {
-                    MediaRoute2ProviderProxy provider = mProviders.get(sourceIndex);
-                    provider.start(); // restart the provider if needed
-                    provider.rebindIfDisconnected();
-                    Collections.swap(mProviders, sourceIndex, targetIndex++);
+                    MediaRoute2ProviderServiceProxy proxy = mProxies.get(sourceIndex);
+                    proxy.start(); // restart the proxy if needed
+                    proxy.rebindIfDisconnected();
+                    Collections.swap(mProxies, sourceIndex, targetIndex++);
                 }
             }
         }
 
         // Remove providers for missing services.
-        if (targetIndex < mProviders.size()) {
-            for (int i = mProviders.size() - 1; i >= targetIndex; i--) {
-                MediaRoute2ProviderProxy provider = mProviders.get(i);
-                mCallback.onRemoveProvider(provider);
-                mProviders.remove(provider);
-                provider.stop();
+        if (targetIndex < mProxies.size()) {
+            for (int i = mProxies.size() - 1; i >= targetIndex; i--) {
+                MediaRoute2ProviderServiceProxy proxy = mProxies.get(i);
+                mCallback.onRemoveProviderService(proxy);
+                mProxies.remove(proxy);
+                proxy.stop();
             }
         }
     }
 
     private int findProvider(String packageName, String className) {
-        int count = mProviders.size();
+        int count = mProxies.size();
         for (int i = 0; i < count; i++) {
-            MediaRoute2ProviderProxy provider = mProviders.get(i);
-            if (provider.hasComponentName(packageName, className)) {
+            MediaRoute2ProviderServiceProxy proxy = mProxies.get(i);
+            if (proxy.hasComponentName(packageName, className)) {
                 return i;
             }
         }
@@ -171,7 +172,7 @@
     };
 
     public interface Callback {
-        void onAddProvider(MediaRoute2ProviderProxy provider);
-        void onRemoveProvider(MediaRoute2ProviderProxy provider);
+        void onAddProviderService(@NonNull MediaRoute2ProviderServiceProxy proxy);
+        void onRemoveProviderService(@NonNull MediaRoute2ProviderServiceProxy proxy);
     }
 }
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index b113322..3588916 100644
--- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
@@ -25,9 +25,8 @@
 import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.content.Context;
-import android.content.Intent;
 import android.content.pm.PackageManager;
-import android.media.IMediaRouter2Client;
+import android.media.IMediaRouter2;
 import android.media.IMediaRouter2Manager;
 import android.media.MediaRoute2Info;
 import android.media.MediaRoute2ProviderInfo;
@@ -73,12 +72,12 @@
 
     private final Context mContext;
     private final Object mLock = new Object();
-    final AtomicInteger mNextClientId = new AtomicInteger(1);
+    final AtomicInteger mNextRouterOrManagerId = new AtomicInteger(1);
 
     @GuardedBy("mLock")
     private final SparseArray<UserRecord> mUserRecords = new SparseArray<>();
     @GuardedBy("mLock")
-    private final ArrayMap<IBinder, Client2Record> mAllClientRecords = new ArrayMap<>();
+    private final ArrayMap<IBinder, RouterRecord> mAllRouterRecords = new ArrayMap<>();
     @GuardedBy("mLock")
     private final ArrayMap<IBinder, ManagerRecord> mAllManagerRecords = new ArrayMap<>();
     @GuardedBy("mLock")
@@ -88,6 +87,11 @@
         mContext = context;
     }
 
+    ////////////////////////////////////////////////////////////////
+    ////  Calls from MediaRouter2
+    ////   - Should not have @NonNull/@Nullable on any arguments
+    ////////////////////////////////////////////////////////////////
+
     @NonNull
     public List<MediaRoute2Info> getSystemRoutes() {
         final int uid = Binder.getCallingUid();
@@ -136,9 +140,11 @@
         }
     }
 
-    public void registerClient(@NonNull IMediaRouter2Client client,
-            @NonNull String packageName) {
-        Objects.requireNonNull(client, "client must not be null");
+    public void registerRouter2(IMediaRouter2 router, String packageName) {
+        Objects.requireNonNull(router, "router must not be null");
+        if (TextUtils.isEmpty(packageName)) {
+            throw new IllegalArgumentException("packageName must not be empty");
+        }
 
         final int uid = Binder.getCallingUid();
         final int pid = Binder.getCallingPid();
@@ -149,30 +155,186 @@
         final long token = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
-                registerClient2Locked(client, uid, pid, packageName, userId, trusted);
+                registerRouter2Locked(router, uid, pid, packageName, userId, trusted);
             }
         } finally {
             Binder.restoreCallingIdentity(token);
         }
     }
 
-    public void unregisterClient(@NonNull IMediaRouter2Client client) {
-        Objects.requireNonNull(client, "client must not be null");
+    public void unregisterRouter2(IMediaRouter2 router) {
+        Objects.requireNonNull(router, "router must not be null");
 
         final long token = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
-                unregisterClient2Locked(client, false);
+                unregisterRouter2Locked(router, false);
             }
         } finally {
             Binder.restoreCallingIdentity(token);
         }
     }
 
-    public void registerManager(@NonNull IMediaRouter2Manager manager,
-            @NonNull String packageName) {
+    public void setDiscoveryRequestWithRouter2(IMediaRouter2 router,
+            RouteDiscoveryPreference preference) {
+        Objects.requireNonNull(router, "router must not be null");
+        Objects.requireNonNull(preference, "preference must not be null");
+
+        final long token = Binder.clearCallingIdentity();
+        try {
+            synchronized (mLock) {
+                RouterRecord routerRecord = mAllRouterRecords.get(router.asBinder());
+                if (routerRecord == null) {
+                    Slog.w(TAG, "Ignoring updating discoveryRequest of null routerRecord.");
+                    return;
+                }
+                setDiscoveryRequestWithRouter2Locked(routerRecord, preference);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    public void setRouteVolumeWithRouter2(IMediaRouter2 router,
+            MediaRoute2Info route, int volume) {
+        Objects.requireNonNull(router, "router must not be null");
+        Objects.requireNonNull(route, "route must not be null");
+
+        final long token = Binder.clearCallingIdentity();
+        try {
+            synchronized (mLock) {
+                setRouteVolumeWithRouter2Locked(router, route, volume);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    public void requestCreateSessionWithRouter2(IMediaRouter2 router, MediaRoute2Info route,
+            int requestId, Bundle sessionHints) {
+        Objects.requireNonNull(router, "router must not be null");
+        Objects.requireNonNull(route, "route must not be null");
+
+        final long token = Binder.clearCallingIdentity();
+        try {
+            synchronized (mLock) {
+                requestCreateSessionWithRouter2Locked(router, route, requestId, sessionHints);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    public void selectRouteWithRouter2(IMediaRouter2 router, String uniqueSessionId,
+            MediaRoute2Info route) {
+        Objects.requireNonNull(router, "router must not be null");
+        Objects.requireNonNull(route, "route must not be null");
+        if (TextUtils.isEmpty(uniqueSessionId)) {
+            throw new IllegalArgumentException("uniqueSessionId must not be empty");
+        }
+
+        final long token = Binder.clearCallingIdentity();
+        try {
+            synchronized (mLock) {
+                selectRouteWithRouter2Locked(router, uniqueSessionId, route);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+
+    public void deselectRouteWithRouter2(IMediaRouter2 router, String uniqueSessionId,
+            MediaRoute2Info route) {
+        Objects.requireNonNull(router, "router must not be null");
+        Objects.requireNonNull(route, "route must not be null");
+        if (TextUtils.isEmpty(uniqueSessionId)) {
+            throw new IllegalArgumentException("uniqueSessionId must not be empty");
+        }
+
+        final long token = Binder.clearCallingIdentity();
+        try {
+            synchronized (mLock) {
+                deselectRouteWithRouter2Locked(router, uniqueSessionId, route);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    public void transferToRouteWithRouter2(IMediaRouter2 router, String uniqueSessionId,
+            MediaRoute2Info route) {
+        Objects.requireNonNull(router, "router must not be null");
+        Objects.requireNonNull(route, "route must not be null");
+        if (TextUtils.isEmpty(uniqueSessionId)) {
+            throw new IllegalArgumentException("uniqueSessionId must not be empty");
+        }
+
+        final long token = Binder.clearCallingIdentity();
+        try {
+            synchronized (mLock) {
+                transferToRouteWithRouter2Locked(router, uniqueSessionId, route);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    public void setSessionVolumeWithRouter2(IMediaRouter2 router, String uniqueSessionId,
+            int volume) {
+        Objects.requireNonNull(router, "router must not be null");
+        Objects.requireNonNull(uniqueSessionId, "uniqueSessionId must not be null");
+
+        final long token = Binder.clearCallingIdentity();
+        try {
+            synchronized (mLock) {
+                setSessionVolumeWithRouter2Locked(router, uniqueSessionId, volume);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    public void releaseSessionWithRouter2(IMediaRouter2 router, String uniqueSessionId) {
+        Objects.requireNonNull(router, "router must not be null");
+        if (TextUtils.isEmpty(uniqueSessionId)) {
+            throw new IllegalArgumentException("uniqueSessionId must not be empty");
+        }
+
+        final long token = Binder.clearCallingIdentity();
+        try {
+            synchronized (mLock) {
+                releaseSessionWithRouter2Locked(router, uniqueSessionId);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    ////////////////////////////////////////////////////////////////
+    ////  Calls from MediaRouter2Manager
+    ////   - Should not have @NonNull/@Nullable on any arguments
+    ////////////////////////////////////////////////////////////////
+
+    @NonNull
+    public List<RoutingSessionInfo> getActiveSessions(IMediaRouter2Manager manager) {
         Objects.requireNonNull(manager, "manager must not be null");
-        //TODO: should check permission
+        final long token = Binder.clearCallingIdentity();
+        try {
+            synchronized (mLock) {
+                return getActiveSessionsLocked(manager);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    public void registerManager(IMediaRouter2Manager manager, String packageName) {
+        Objects.requireNonNull(manager, "manager must not be null");
+        if (TextUtils.isEmpty(packageName)) {
+            throw new IllegalArgumentException("packageName must not be empty");
+        }
+
         final boolean trusted = true;
 
         final int uid = Binder.getCallingUid();
@@ -189,7 +351,7 @@
         }
     }
 
-    public void unregisterManager(@NonNull IMediaRouter2Manager manager) {
+    public void unregisterManager(IMediaRouter2Manager manager) {
         Objects.requireNonNull(manager, "manager must not be null");
 
         final long token = Binder.clearCallingIdentity();
@@ -202,151 +364,7 @@
         }
     }
 
-    public void requestCreateSession(IMediaRouter2Client client, MediaRoute2Info route,
-            int requestId, Bundle sessionHints) {
-        Objects.requireNonNull(client, "client must not be null");
-        Objects.requireNonNull(route, "route must not be null");
-
-        final long token = Binder.clearCallingIdentity();
-        try {
-            synchronized (mLock) {
-                requestCreateSessionLocked(client, route, requestId, sessionHints);
-            }
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
-    }
-
-    public void selectRoute(IMediaRouter2Client client, String uniqueSessionId,
-            MediaRoute2Info route) {
-        Objects.requireNonNull(client, "client must not be null");
-        Objects.requireNonNull(route, "route must not be null");
-        if (TextUtils.isEmpty(uniqueSessionId)) {
-            throw new IllegalArgumentException("uniqueSessionId must not be empty");
-        }
-
-        final long token = Binder.clearCallingIdentity();
-        try {
-            synchronized (mLock) {
-                selectRouteLocked(client, uniqueSessionId, route);
-            }
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
-    }
-
-
-    public void deselectRoute(IMediaRouter2Client client, String uniqueSessionId,
-            MediaRoute2Info route) {
-        Objects.requireNonNull(client, "client must not be null");
-        Objects.requireNonNull(route, "route must not be null");
-        if (TextUtils.isEmpty(uniqueSessionId)) {
-            throw new IllegalArgumentException("uniqueSessionId must not be empty");
-        }
-
-        final long token = Binder.clearCallingIdentity();
-        try {
-            synchronized (mLock) {
-                deselectRouteLocked(client, uniqueSessionId, route);
-            }
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
-    }
-
-    public void transferToRoute(IMediaRouter2Client client, String uniqueSessionId,
-            MediaRoute2Info route) {
-        Objects.requireNonNull(client, "client must not be null");
-        Objects.requireNonNull(route, "route must not be null");
-        if (TextUtils.isEmpty(uniqueSessionId)) {
-            throw new IllegalArgumentException("uniqueSessionId must not be empty");
-        }
-
-        final long token = Binder.clearCallingIdentity();
-        try {
-            synchronized (mLock) {
-                transferToRouteLocked(client, uniqueSessionId, route);
-            }
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
-    }
-
-    public void releaseSession(IMediaRouter2Client client, String uniqueSessionId) {
-        Objects.requireNonNull(client, "client must not be null");
-        if (TextUtils.isEmpty(uniqueSessionId)) {
-            throw new IllegalArgumentException("uniqueSessionId must not be empty");
-        }
-
-        final long token = Binder.clearCallingIdentity();
-        try {
-            synchronized (mLock) {
-                releaseSessionLocked(client, uniqueSessionId);
-            }
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
-    }
-
-    public void sendControlRequest(@NonNull IMediaRouter2Client client,
-            @NonNull MediaRoute2Info route, @NonNull Intent request) {
-        Objects.requireNonNull(client, "client must not be null");
-        Objects.requireNonNull(route, "route must not be null");
-        Objects.requireNonNull(request, "request must not be null");
-
-        final long token = Binder.clearCallingIdentity();
-        try {
-            synchronized (mLock) {
-                sendControlRequestLocked(client, route, request);
-            }
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
-    }
-
-    public void setDiscoveryRequest2(@NonNull IMediaRouter2Client client,
-            @NonNull RouteDiscoveryPreference preference) {
-        Objects.requireNonNull(client, "client must not be null");
-        Objects.requireNonNull(preference, "preference must not be null");
-
-        final long token = Binder.clearCallingIdentity();
-        try {
-            synchronized (mLock) {
-                Client2Record clientRecord = mAllClientRecords.get(client.asBinder());
-                setDiscoveryRequestLocked(clientRecord, preference);
-            }
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
-    }
-
-    public void requestSetVolume2(IMediaRouter2Client client, MediaRoute2Info route, int volume) {
-        Objects.requireNonNull(client, "client must not be null");
-        Objects.requireNonNull(route, "route must not be null");
-
-        final long token = Binder.clearCallingIdentity();
-        try {
-            synchronized (mLock) {
-                requestSetVolumeLocked(client, route, volume);
-            }
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
-    }
-
-    public void requestCreateClientSession(IMediaRouter2Manager manager, String packageName,
-            MediaRoute2Info route, int requestId) {
-        final long token = Binder.clearCallingIdentity();
-        try {
-            synchronized (mLock) {
-                requestClientCreateSessionLocked(manager, packageName, route, requestId);
-            }
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
-    }
-
-    public void requestSetVolume2Manager(IMediaRouter2Manager manager,
+    public void setRouteVolumeWithManager(IMediaRouter2Manager manager,
             MediaRoute2Info route, int volume) {
         Objects.requireNonNull(manager, "manager must not be null");
         Objects.requireNonNull(route, "route must not be null");
@@ -354,66 +372,111 @@
         final long token = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
-                requestSetVolumeLocked(manager, route, volume);
+                setRouteVolumeWithManagerLocked(manager, route, volume);
             }
         } finally {
             Binder.restoreCallingIdentity(token);
         }
     }
 
-    @NonNull
-    public List<RoutingSessionInfo> getActiveSessions(IMediaRouter2Manager manager) {
+    public void requestCreateSessionWithManager(IMediaRouter2Manager manager, String packageName,
+            MediaRoute2Info route, int requestId) {
+        Objects.requireNonNull(manager, "manager must not be null");
+        if (TextUtils.isEmpty(packageName)) {
+            throw new IllegalArgumentException("packageName must not be empty");
+        }
+
         final long token = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
-                return getActiveSessionsLocked(manager);
+                requestCreateSessionWithManagerLocked(manager, packageName, route, requestId);
             }
         } finally {
             Binder.restoreCallingIdentity(token);
         }
     }
 
-    public void selectClientRoute(IMediaRouter2Manager manager, String sessionId,
+    public void selectRouteWithManager(IMediaRouter2Manager manager, String uniqueSessionId,
             MediaRoute2Info route) {
+        Objects.requireNonNull(manager, "manager must not be null");
+        if (TextUtils.isEmpty(uniqueSessionId)) {
+            throw new IllegalArgumentException("uniqueSessionId must not be empty");
+        }
+        Objects.requireNonNull(route, "route must not be null");
+
         final long token = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
-                selectClientRouteLocked(manager, sessionId, route);
+                selectRouteWithManagerLocked(manager, uniqueSessionId, route);
             }
         } finally {
             Binder.restoreCallingIdentity(token);
         }
     }
 
-    public void deselectClientRoute(IMediaRouter2Manager manager, String sessionId,
+    public void deselectRouteWithManager(IMediaRouter2Manager manager, String uniqueSessionId,
             MediaRoute2Info route) {
+        Objects.requireNonNull(manager, "manager must not be null");
+        if (TextUtils.isEmpty(uniqueSessionId)) {
+            throw new IllegalArgumentException("uniqueSessionId must not be empty");
+        }
+        Objects.requireNonNull(route, "route must not be null");
+
         final long token = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
-                deselectClientRouteLocked(manager, sessionId, route);
+                deselectRouteWithManagerLocked(manager, uniqueSessionId, route);
             }
         } finally {
             Binder.restoreCallingIdentity(token);
         }
     }
 
-    public void transferToClientRoute(IMediaRouter2Manager manager, String sessionId,
+    public void transferToRouteWithManager(IMediaRouter2Manager manager, String uniqueSessionId,
             MediaRoute2Info route) {
+        Objects.requireNonNull(manager, "manager must not be null");
+        if (TextUtils.isEmpty(uniqueSessionId)) {
+            throw new IllegalArgumentException("uniqueSessionId must not be empty");
+        }
+        Objects.requireNonNull(route, "route must not be null");
+
         final long token = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
-                transferClientRouteLocked(manager, sessionId, route);
+                transferToRouteWithManagerLocked(manager, uniqueSessionId, route);
             }
         } finally {
             Binder.restoreCallingIdentity(token);
         }
     }
 
-    public void releaseClientSession(IMediaRouter2Manager manager, String sessionId) {
+    public void setSessionVolumeWithManager(IMediaRouter2Manager manager,
+            String uniqueSessionId, int volume) {
+        Objects.requireNonNull(manager, "manager must not be null");
+        if (TextUtils.isEmpty(uniqueSessionId)) {
+            throw new IllegalArgumentException("uniqueSessionId must not be empty");
+        }
+
         final long token = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
-                releaseClientSessionLocked(manager, sessionId);
+                setSessionVolumeWithManagerLocked(manager, uniqueSessionId, volume);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    public void releaseSessionWithManager(IMediaRouter2Manager manager, String uniqueSessionId) {
+        Objects.requireNonNull(manager, "manager must not be null");
+        if (TextUtils.isEmpty(uniqueSessionId)) {
+            throw new IllegalArgumentException("uniqueSessionId must not be empty");
+        }
+
+        final long token = Binder.clearCallingIdentity();
+        try {
+            synchronized (mLock) {
+                releaseSessionWithManagerLocked(manager, uniqueSessionId);
             }
         } finally {
             Binder.restoreCallingIdentity(token);
@@ -444,235 +507,180 @@
         }
     }
 
-    void clientDied(Client2Record clientRecord) {
+    void routerDied(@NonNull RouterRecord routerRecord) {
         synchronized (mLock) {
-            unregisterClient2Locked(clientRecord.mClient, true);
+            unregisterRouter2Locked(routerRecord.mRouter, true);
         }
     }
 
-    void managerDied(ManagerRecord managerRecord) {
+    void managerDied(@NonNull ManagerRecord managerRecord) {
         synchronized (mLock) {
             unregisterManagerLocked(managerRecord.mManager, true);
         }
     }
 
-    private void registerClient2Locked(IMediaRouter2Client client,
-            int uid, int pid, String packageName, int userId, boolean trusted) {
-        final IBinder binder = client.asBinder();
-        if (mAllClientRecords.get(binder) == null) {
+    ////////////////////////////////////////////////////////////////
+    ////  ***Locked methods related to MediaRouter2
+    ////   - Should have @NonNull/@Nullable on all arguments
+    ////////////////////////////////////////////////////////////////
 
-            UserRecord userRecord = getOrCreateUserRecordLocked(userId);
-            Client2Record clientRecord = new Client2Record(userRecord, client, uid, pid,
-                    packageName, trusted);
-            try {
-                binder.linkToDeath(clientRecord, 0);
-            } catch (RemoteException ex) {
-                throw new RuntimeException("Media router client died prematurely.", ex);
-            }
+    private void registerRouter2Locked(@NonNull IMediaRouter2 router, int uid, int pid,
+            @NonNull String packageName, int userId, boolean trusted) {
+        final IBinder binder = router.asBinder();
+        if (mAllRouterRecords.get(binder) != null) {
+            Slog.w(TAG, "Same router already exists. packageName=" + packageName);
+            return;
+        }
 
-            userRecord.mClientRecords.add(clientRecord);
-            mAllClientRecords.put(binder, clientRecord);
+        UserRecord userRecord = getOrCreateUserRecordLocked(userId);
+        RouterRecord routerRecord = new RouterRecord(
+                userRecord, router, uid, pid, packageName, trusted);
+        try {
+            binder.linkToDeath(routerRecord, 0);
+        } catch (RemoteException ex) {
+            throw new RuntimeException("MediaRouter2 died prematurely.", ex);
+        }
 
-            userRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::notifyRoutesToClient, userRecord.mHandler, client));
+        userRecord.mRouterRecords.add(routerRecord);
+        mAllRouterRecords.put(binder, routerRecord);
+
+        userRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::notifyRoutesToRouter, userRecord.mHandler, router));
+    }
+
+    private void unregisterRouter2Locked(@NonNull IMediaRouter2 router, boolean died) {
+        RouterRecord routerRecord = mAllRouterRecords.remove(router.asBinder());
+        if (routerRecord == null) {
+            Slog.w(TAG, "Ignoring unregistering unknown router2");
+            return;
+        }
+
+        UserRecord userRecord = routerRecord.mUserRecord;
+        userRecord.mRouterRecords.remove(routerRecord);
+        //TODO: update discovery request
+        routerRecord.dispose();
+        disposeUserIfNeededLocked(userRecord); // since router removed from user
+    }
+
+    private void setDiscoveryRequestWithRouter2Locked(@NonNull RouterRecord routerRecord,
+            @NonNull RouteDiscoveryPreference discoveryRequest) {
+        if (routerRecord.mDiscoveryPreference.equals(discoveryRequest)) {
+            return;
+        }
+        routerRecord.mDiscoveryPreference = discoveryRequest;
+        routerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::notifyPreferredFeaturesChangedToManagers,
+                        routerRecord.mUserRecord.mHandler, routerRecord));
+        routerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::updateDiscoveryPreference,
+                        routerRecord.mUserRecord.mHandler));
+    }
+
+    private void setRouteVolumeWithRouter2Locked(@NonNull IMediaRouter2 router,
+            @NonNull MediaRoute2Info route, int volume) {
+        final IBinder binder = router.asBinder();
+        RouterRecord routerRecord = mAllRouterRecords.get(binder);
+
+        if (routerRecord != null) {
+            routerRecord.mUserRecord.mHandler.sendMessage(
+                    obtainMessage(UserHandler::setRouteVolumeOnHandler,
+                            routerRecord.mUserRecord.mHandler, route, volume));
         }
     }
 
-    private void unregisterClient2Locked(IMediaRouter2Client client, boolean died) {
-        Client2Record clientRecord = mAllClientRecords.remove(client.asBinder());
-        if (clientRecord != null) {
-            UserRecord userRecord = clientRecord.mUserRecord;
-            userRecord.mClientRecords.remove(clientRecord);
-            //TODO: update discovery request
-            clientRecord.dispose();
-            disposeUserIfNeededLocked(userRecord); // since client removed from user
+    private void requestCreateSessionWithRouter2Locked(@NonNull IMediaRouter2 router,
+            @NonNull MediaRoute2Info route, int requestId, @Nullable Bundle sessionHints) {
+        final IBinder binder = router.asBinder();
+        final RouterRecord routerRecord = mAllRouterRecords.get(binder);
+
+        if (routerRecord == null) {
+            return;
         }
+
+        long uniqueRequestId = toUniqueRequestId(routerRecord.mRouterId, requestId);
+        routerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::requestCreateSessionOnHandler,
+                        routerRecord.mUserRecord.mHandler,
+                        routerRecord, route, uniqueRequestId, sessionHints));
     }
 
-    private void requestCreateSessionLocked(@NonNull IMediaRouter2Client client,
-            @NonNull MediaRoute2Info route, long requestId, @Nullable Bundle sessionHints) {
-        final IBinder binder = client.asBinder();
-        final Client2Record clientRecord = mAllClientRecords.get(binder);
+    private void selectRouteWithRouter2Locked(@NonNull IMediaRouter2 router,
+            @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+        final IBinder binder = router.asBinder();
+        final RouterRecord routerRecord = mAllRouterRecords.get(binder);
 
-        // client id is not assigned yet
-        if (toClientId(requestId) == 0) {
-            requestId = toUniqueRequestId(clientRecord.mClientId, toClientRequestId(requestId));
+        if (routerRecord == null) {
+            return;
         }
 
-        if (clientRecord != null) {
-            clientRecord.mUserRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::requestCreateSessionOnHandler,
-                            clientRecord.mUserRecord.mHandler,
-                            clientRecord, route, requestId, sessionHints));
-        }
+        routerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::selectRouteOnHandler,
+                        routerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId, route));
     }
 
-    private void selectRouteLocked(@NonNull IMediaRouter2Client client, String uniqueSessionId,
-            @NonNull MediaRoute2Info route) {
-        final IBinder binder = client.asBinder();
-        final Client2Record clientRecord = mAllClientRecords.get(binder);
+    private void deselectRouteWithRouter2Locked(@NonNull IMediaRouter2 router,
+            @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+        final IBinder binder = router.asBinder();
+        final RouterRecord routerRecord = mAllRouterRecords.get(binder);
 
-        if (clientRecord != null) {
-            clientRecord.mUserRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::selectRouteOnHandler,
-                            clientRecord.mUserRecord.mHandler,
-                            clientRecord, uniqueSessionId, route));
+        if (routerRecord == null) {
+            return;
         }
+
+        routerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::deselectRouteOnHandler,
+                        routerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId, route));
     }
 
-    private void deselectRouteLocked(@NonNull IMediaRouter2Client client, String uniqueSessionId,
-            @NonNull MediaRoute2Info route) {
-        final IBinder binder = client.asBinder();
-        final Client2Record clientRecord = mAllClientRecords.get(binder);
+    private void transferToRouteWithRouter2Locked(@NonNull IMediaRouter2 router,
+            @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+        final IBinder binder = router.asBinder();
+        final RouterRecord routerRecord = mAllRouterRecords.get(binder);
 
-        if (clientRecord != null) {
-            clientRecord.mUserRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::deselectRouteOnHandler,
-                            clientRecord.mUserRecord.mHandler,
-                            clientRecord, uniqueSessionId, route));
+        if (routerRecord == null) {
+            return;
         }
+
+        routerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::transferToRouteOnHandler,
+                        routerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId, route));
     }
 
-    private void transferToRouteLocked(@NonNull IMediaRouter2Client client, String uniqueSessionId,
-            @NonNull MediaRoute2Info route) {
-        final IBinder binder = client.asBinder();
-        final Client2Record clientRecord = mAllClientRecords.get(binder);
+    private void setSessionVolumeWithRouter2Locked(@NonNull IMediaRouter2 router,
+            @NonNull String uniqueSessionId, int volume) {
+        final IBinder binder = router.asBinder();
+        RouterRecord routerRecord = mAllRouterRecords.get(binder);
 
-        if (clientRecord != null) {
-            clientRecord.mUserRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::transferToRouteOnHandler,
-                            clientRecord.mUserRecord.mHandler,
-                            clientRecord, uniqueSessionId, route));
+        if (routerRecord == null) {
+            return;
         }
+
+        routerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::setSessionVolumeOnHandler,
+                        routerRecord.mUserRecord.mHandler, uniqueSessionId, volume));
     }
 
-    private void releaseSessionLocked(@NonNull IMediaRouter2Client client, String uniqueSessionId) {
-        final IBinder binder = client.asBinder();
-        final Client2Record clientRecord = mAllClientRecords.get(binder);
+    private void releaseSessionWithRouter2Locked(@NonNull IMediaRouter2 router,
+            @NonNull String uniqueSessionId) {
+        final IBinder binder = router.asBinder();
+        final RouterRecord routerRecord = mAllRouterRecords.get(binder);
 
-        if (clientRecord != null) {
-            clientRecord.mUserRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::releaseSessionOnHandler,
-                            clientRecord.mUserRecord.mHandler,
-                            clientRecord, uniqueSessionId));
+        if (routerRecord == null) {
+            return;
         }
+
+        routerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::releaseSessionOnHandler,
+                        routerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId));
     }
 
-    private void setDiscoveryRequestLocked(Client2Record clientRecord,
-            RouteDiscoveryPreference discoveryRequest) {
-        if (clientRecord != null) {
-            if (clientRecord.mDiscoveryPreference.equals(discoveryRequest)) {
-                return;
-            }
+    ////////////////////////////////////////////////////////////
+    ////  ***Locked methods related to MediaRouter2Manager
+    ////   - Should have @NonNull/@Nullable on all arguments
+    ////////////////////////////////////////////////////////////
 
-            clientRecord.mDiscoveryPreference = discoveryRequest;
-            clientRecord.mUserRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::updateClientUsage,
-                            clientRecord.mUserRecord.mHandler, clientRecord));
-            clientRecord.mUserRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::updateDiscoveryPreference,
-                            clientRecord.mUserRecord.mHandler));
-        }
-    }
-
-    private void sendControlRequestLocked(IMediaRouter2Client client, MediaRoute2Info route,
-            Intent request) {
-        final IBinder binder = client.asBinder();
-        Client2Record clientRecord = mAllClientRecords.get(binder);
-
-        if (clientRecord != null) {
-            clientRecord.mUserRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::sendControlRequest,
-                            clientRecord.mUserRecord.mHandler, route, request));
-        }
-    }
-
-    private void requestSetVolumeLocked(IMediaRouter2Client client, MediaRoute2Info route,
-            int volume) {
-        final IBinder binder = client.asBinder();
-        Client2Record clientRecord = mAllClientRecords.get(binder);
-
-        if (clientRecord != null) {
-            clientRecord.mUserRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::requestSetVolume,
-                            clientRecord.mUserRecord.mHandler, route, volume));
-        }
-    }
-
-    private void registerManagerLocked(IMediaRouter2Manager manager,
-            int uid, int pid, String packageName, int userId, boolean trusted) {
-        final IBinder binder = manager.asBinder();
-        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
-        if (managerRecord == null) {
-            UserRecord userRecord = getOrCreateUserRecordLocked(userId);
-            managerRecord = new ManagerRecord(userRecord, manager, uid, pid, packageName, trusted);
-            try {
-                binder.linkToDeath(managerRecord, 0);
-            } catch (RemoteException ex) {
-                throw new RuntimeException("Media router manager died prematurely.", ex);
-            }
-
-            userRecord.mManagerRecords.add(managerRecord);
-            mAllManagerRecords.put(binder, managerRecord);
-
-            userRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::notifyRoutesToManager,
-                            userRecord.mHandler, manager));
-
-            for (Client2Record clientRecord : userRecord.mClientRecords) {
-                // TODO: Do not use updateClientUsage since it updates all managers.
-                // Instead, Notify only to the manager that is currently being registered.
-
-                // TODO: UserRecord <-> ClientRecord, why do they reference each other?
-                // How about removing mUserRecord from clientRecord?
-                clientRecord.mUserRecord.mHandler.sendMessage(
-                        obtainMessage(UserHandler::updateClientUsage,
-                            clientRecord.mUserRecord.mHandler, clientRecord));
-            }
-        }
-    }
-
-    private void unregisterManagerLocked(IMediaRouter2Manager manager, boolean died) {
-        ManagerRecord managerRecord = mAllManagerRecords.remove(manager.asBinder());
-        if (managerRecord != null) {
-            UserRecord userRecord = managerRecord.mUserRecord;
-            userRecord.mManagerRecords.remove(managerRecord);
-            managerRecord.dispose();
-            disposeUserIfNeededLocked(userRecord); // since manager removed from user
-        }
-    }
-
-    private void requestClientCreateSessionLocked(IMediaRouter2Manager manager,
-            String packageName, MediaRoute2Info route, int requestId) {
-        ManagerRecord managerRecord = mAllManagerRecords.get(manager.asBinder());
-        if (managerRecord != null) {
-            Client2Record clientRecord =
-                    managerRecord.mUserRecord.findClientRecordLocked(packageName);
-            if (clientRecord == null) {
-                Slog.w(TAG, "Ignoring session creation for unknown client.");
-            }
-            long uniqueRequestId = toUniqueRequestId(managerRecord.mClientId, requestId);
-            if (clientRecord != null && managerRecord.mTrusted) {
-                //TODO: Use client's OnCreateSessionListener to send proper session hints.
-                requestCreateSessionLocked(clientRecord.mClient, route,
-                        uniqueRequestId, null /* sessionHints */);
-            }
-        }
-    }
-
-    private void requestSetVolumeLocked(IMediaRouter2Manager manager, MediaRoute2Info route,
-            int volume) {
-        final IBinder binder = manager.asBinder();
-        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
-
-        if (managerRecord != null) {
-            managerRecord.mUserRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::requestSetVolume,
-                            managerRecord.mUserRecord.mHandler, route, volume));
-        }
-    }
-
-    private List<RoutingSessionInfo> getActiveSessionsLocked(IMediaRouter2Manager manager) {
+    private List<RoutingSessionInfo> getActiveSessionsLocked(
+            @NonNull IMediaRouter2Manager manager) {
         final IBinder binder = manager.asBinder();
         ManagerRecord managerRecord = mAllManagerRecords.get(binder);
 
@@ -688,6 +696,177 @@
         return sessionInfos;
     }
 
+    private void registerManagerLocked(@NonNull IMediaRouter2Manager manager,
+            int uid, int pid, @NonNull String packageName, int userId, boolean trusted) {
+        final IBinder binder = manager.asBinder();
+        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+        if (managerRecord != null) {
+            Slog.w(TAG, "Same manager already exists. packageName=" + packageName);
+            return;
+        }
+
+        UserRecord userRecord = getOrCreateUserRecordLocked(userId);
+        managerRecord = new ManagerRecord(userRecord, manager, uid, pid, packageName, trusted);
+        try {
+            binder.linkToDeath(managerRecord, 0);
+        } catch (RemoteException ex) {
+            throw new RuntimeException("Media router manager died prematurely.", ex);
+        }
+
+        userRecord.mManagerRecords.add(managerRecord);
+        mAllManagerRecords.put(binder, managerRecord);
+
+        userRecord.mHandler.sendMessage(obtainMessage(UserHandler::notifyRoutesToManager,
+                userRecord.mHandler, manager));
+
+        for (RouterRecord routerRecord : userRecord.mRouterRecords) {
+            // TODO: Do not use notifyPreferredFeaturesChangedToManagers since it updates all
+            // managers. Instead, Notify only to the manager that is currently being registered.
+
+            // TODO: UserRecord <-> routerRecord, why do they reference each other?
+            // How about removing mUserRecord from routerRecord?
+            routerRecord.mUserRecord.mHandler.sendMessage(
+                    obtainMessage(UserHandler::notifyPreferredFeaturesChangedToManagers,
+                        routerRecord.mUserRecord.mHandler, routerRecord));
+        }
+    }
+
+    private void unregisterManagerLocked(@NonNull IMediaRouter2Manager manager, boolean died) {
+        ManagerRecord managerRecord = mAllManagerRecords.remove(manager.asBinder());
+        if (managerRecord == null) {
+            return;
+        }
+        UserRecord userRecord = managerRecord.mUserRecord;
+        userRecord.mManagerRecords.remove(managerRecord);
+        managerRecord.dispose();
+        disposeUserIfNeededLocked(userRecord); // since manager removed from user
+    }
+
+    private void setRouteVolumeWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+            @NonNull MediaRoute2Info route, int volume) {
+        final IBinder binder = manager.asBinder();
+        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+        if (managerRecord == null) {
+            return;
+        }
+        managerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::setRouteVolumeOnHandler,
+                        managerRecord.mUserRecord.mHandler, route, volume));
+    }
+
+    private void requestCreateSessionWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+            @NonNull String packageName, @NonNull MediaRoute2Info route, int requestId) {
+        ManagerRecord managerRecord = mAllManagerRecords.get(manager.asBinder());
+        if (managerRecord == null || !managerRecord.mTrusted) {
+            return;
+        }
+
+        RouterRecord routerRecord = managerRecord.mUserRecord.findRouterRecordLocked(packageName);
+        if (routerRecord == null) {
+            Slog.w(TAG, "Ignoring session creation for unknown router.");
+            return;
+        }
+
+        long uniqueRequestId = toUniqueRequestId(managerRecord.mManagerId, requestId);
+        //TODO: Use MediaRouter2's OnCreateSessionListener to send proper session hints.
+        routerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::requestCreateSessionOnHandler,
+                        routerRecord.mUserRecord.mHandler,
+                        routerRecord, route, uniqueRequestId, null /* sessionHints */));
+    }
+
+    private void selectRouteWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+            @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+        final IBinder binder = manager.asBinder();
+        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+        if (managerRecord == null) {
+            return;
+        }
+
+        // Can be null if the session is system's.
+        RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
+                .findRouterforSessionLocked(uniqueSessionId);
+
+        managerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::selectRouteOnHandler,
+                        managerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId, route));
+    }
+
+    private void deselectRouteWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+            @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+        final IBinder binder = manager.asBinder();
+        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+        if (managerRecord == null) {
+            return;
+        }
+
+        // Can be null if the session is system's.
+        RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
+                .findRouterforSessionLocked(uniqueSessionId);
+
+        managerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::deselectRouteOnHandler,
+                        managerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId, route));
+    }
+
+    private void transferToRouteWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+            @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+        final IBinder binder = manager.asBinder();
+        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+        if (managerRecord == null) {
+            return;
+        }
+
+        // Can be null if the session is system's.
+        RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
+                .findRouterforSessionLocked(uniqueSessionId);
+
+        managerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::transferToRouteOnHandler,
+                        managerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId, route));
+    }
+
+    private void setSessionVolumeWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+            @NonNull String uniqueSessionId, int volume) {
+        final IBinder binder = manager.asBinder();
+        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+        if (managerRecord == null) {
+            return;
+        }
+
+        managerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::setSessionVolumeOnHandler,
+                        managerRecord.mUserRecord.mHandler, uniqueSessionId, volume));
+    }
+
+    private void releaseSessionWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+            @NonNull String uniqueSessionId) {
+        final IBinder binder = manager.asBinder();
+        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+        if (managerRecord == null) {
+            return;
+        }
+
+        RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
+                .findRouterforSessionLocked(uniqueSessionId);
+
+        managerRecord.mUserRecord.mHandler.sendMessage(
+                obtainMessage(UserHandler::releaseSessionOnHandler,
+                        managerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId));
+    }
+
+    ////////////////////////////////////////////////////////////
+    ////  ***Locked methods used by both router2 and manager
+    ////   - Should have @NonNull/@Nullable on all arguments
+    ////////////////////////////////////////////////////////////
+
     private UserRecord getOrCreateUserRecordLocked(int userId) {
         UserRecord userRecord = mUserRecords.get(userId);
         if (userRecord == null) {
@@ -701,85 +880,13 @@
         return userRecord;
     }
 
-    private void selectClientRouteLocked(IMediaRouter2Manager manager, String sessionId,
-            MediaRoute2Info route) {
-        final IBinder binder = manager.asBinder();
-        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
-
-        if (managerRecord == null) {
-            Slog.w(TAG, "selectClientRouteLocked: Ignoring unknown manager.");
-            return;
-        }
-        Client2Record clientRecord = managerRecord.mUserRecord.mHandler
-                .findClientforSessionLocked(sessionId);
-
-        managerRecord.mUserRecord.mHandler.sendMessage(
-                obtainMessage(UserHandler::selectRouteOnHandler,
-                            managerRecord.mUserRecord.mHandler,
-                            clientRecord, sessionId, route));
-    }
-
-    private void deselectClientRouteLocked(IMediaRouter2Manager manager, String sessionId,
-            MediaRoute2Info route) {
-        final IBinder binder = manager.asBinder();
-        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
-
-        if (managerRecord == null) {
-            Slog.w(TAG, "deselectClientRouteLocked: Ignoring unknown manager.");
-            return;
-        }
-        Client2Record clientRecord = managerRecord.mUserRecord.mHandler
-                .findClientforSessionLocked(sessionId);
-
-        managerRecord.mUserRecord.mHandler.sendMessage(
-                obtainMessage(UserHandler::deselectRouteOnHandler,
-                        managerRecord.mUserRecord.mHandler,
-                        clientRecord, sessionId, route));
-    }
-
-    private void transferClientRouteLocked(IMediaRouter2Manager manager, String sessionId,
-            MediaRoute2Info route) {
-        final IBinder binder = manager.asBinder();
-        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
-
-        if (managerRecord == null) {
-            Slog.w(TAG, "transferClientRouteLocked: Ignoring unknown manager.");
-            return;
-        }
-        Client2Record clientRecord = managerRecord.mUserRecord.mHandler
-                .findClientforSessionLocked(sessionId);
-
-        managerRecord.mUserRecord.mHandler.sendMessage(
-                obtainMessage(UserHandler::transferToRouteOnHandler,
-                        managerRecord.mUserRecord.mHandler,
-                        clientRecord, sessionId, route));
-    }
-
-    private void releaseClientSessionLocked(IMediaRouter2Manager manager, String sessionId) {
-        final IBinder binder = manager.asBinder();
-        ManagerRecord managerRecord = mAllManagerRecords.get(binder);
-
-        if (managerRecord == null) {
-            Slog.w(TAG, "releaseClientSessionLocked: Ignoring unknown manager.");
-            return;
-        }
-
-        Client2Record clientRecord = managerRecord.mUserRecord.mHandler
-                .findClientforSessionLocked(sessionId);
-
-        managerRecord.mUserRecord.mHandler.sendMessage(
-                obtainMessage(UserHandler::releaseSessionOnHandler,
-                        managerRecord.mUserRecord.mHandler,
-                        clientRecord, sessionId));
-    }
-
-    private void disposeUserIfNeededLocked(UserRecord userRecord) {
+    private void disposeUserIfNeededLocked(@NonNull UserRecord userRecord) {
         // If there are no records left and the user is no longer current then go ahead
         // and purge the user record and all of its associated state.  If the user is current
         // then leave it alone since we might be connected to a route or want to query
         // the same route information again soon.
         if (userRecord.mUserId != mCurrentUserId
-                && userRecord.mClientRecords.isEmpty()
+                && userRecord.mRouterRecords.isEmpty()
                 && userRecord.mManagerRecords.isEmpty()) {
             if (DEBUG) {
                 Slog.d(TAG, userRecord + ": Disposed");
@@ -789,22 +896,22 @@
         }
     }
 
-    static long toUniqueRequestId(int clientId, int requestId) {
-        return ((long) clientId << 32) | requestId;
+    static long toUniqueRequestId(int routerOrManagerId, int originalRequestId) {
+        return ((long) routerOrManagerId << 32) | originalRequestId;
     }
 
-    static int toClientId(long uniqueRequestId) {
+    static int toRouterOrManagerId(long uniqueRequestId) {
         return (int) (uniqueRequestId >> 32);
     }
 
-    static int toClientRequestId(long uniqueRequestId) {
+    static int toOriginalRequestId(long uniqueRequestId) {
         return (int) uniqueRequestId;
     }
 
     final class UserRecord {
         public final int mUserId;
         //TODO: make records private for thread-safety
-        final ArrayList<Client2Record> mClientRecords = new ArrayList<>();
+        final ArrayList<RouterRecord> mRouterRecords = new ArrayList<>();
         final ArrayList<ManagerRecord> mManagerRecords = new ArrayList<>();
         RouteDiscoveryPreference mCompositeDiscoveryPreference = RouteDiscoveryPreference.EMPTY;
         final UserHandler mHandler;
@@ -814,50 +921,50 @@
             mHandler = new UserHandler(MediaRouter2ServiceImpl.this, this);
         }
 
-        // TODO: This assumes that only one client exists in a package. Is it true?
-        Client2Record findClientRecordLocked(String packageName) {
-            for (Client2Record clientRecord : mClientRecords) {
-                if (TextUtils.equals(clientRecord.mPackageName, packageName)) {
-                    return clientRecord;
+        // TODO: This assumes that only one router exists in a package. Is it true?
+        RouterRecord findRouterRecordLocked(String packageName) {
+            for (RouterRecord routerRecord : mRouterRecords) {
+                if (TextUtils.equals(routerRecord.mPackageName, packageName)) {
+                    return routerRecord;
                 }
             }
             return null;
         }
     }
 
-    final class Client2Record implements IBinder.DeathRecipient {
+    final class RouterRecord implements IBinder.DeathRecipient {
         public final UserRecord mUserRecord;
         public final String mPackageName;
         public final List<Integer> mSelectRouteSequenceNumbers;
-        public final IMediaRouter2Client mClient;
+        public final IMediaRouter2 mRouter;
         public final int mUid;
         public final int mPid;
         public final boolean mTrusted;
-        public final int mClientId;
+        public final int mRouterId;
 
         public RouteDiscoveryPreference mDiscoveryPreference;
         public MediaRoute2Info mSelectedRoute;
 
-        Client2Record(UserRecord userRecord, IMediaRouter2Client client,
+        RouterRecord(UserRecord userRecord, IMediaRouter2 router,
                 int uid, int pid, String packageName, boolean trusted) {
             mUserRecord = userRecord;
             mPackageName = packageName;
             mSelectRouteSequenceNumbers = new ArrayList<>();
             mDiscoveryPreference = RouteDiscoveryPreference.EMPTY;
-            mClient = client;
+            mRouter = router;
             mUid = uid;
             mPid = pid;
             mTrusted = trusted;
-            mClientId = mNextClientId.getAndIncrement();
+            mRouterId = mNextRouterOrManagerId.getAndIncrement();
         }
 
         public void dispose() {
-            mClient.asBinder().unlinkToDeath(this, 0);
+            mRouter.asBinder().unlinkToDeath(this, 0);
         }
 
         @Override
         public void binderDied() {
-            clientDied(this);
+            routerDied(this);
         }
     }
 
@@ -868,7 +975,7 @@
         public final int mPid;
         public final String mPackageName;
         public final boolean mTrusted;
-        public final int mClientId;
+        public final int mManagerId;
 
         ManagerRecord(UserRecord userRecord, IMediaRouter2Manager manager,
                 int uid, int pid, String packageName, boolean trusted) {
@@ -878,7 +985,7 @@
             mPid = pid;
             mPackageName = packageName;
             mTrusted = trusted;
-            mClientId = mNextClientId.getAndIncrement();
+            mManagerId = mNextRouterOrManagerId.getAndIncrement();
         }
 
         public void dispose() {
@@ -919,11 +1026,11 @@
         private final List<MediaRoute2ProviderInfo> mLastProviderInfos = new ArrayList<>();
         private final CopyOnWriteArrayList<SessionCreationRequest> mSessionCreationRequests =
                 new CopyOnWriteArrayList<>();
-        private final Map<String, Client2Record> mSessionToClientMap = new ArrayMap<>();
+        private final Map<String, RouterRecord> mSessionToRouterMap = new ArrayMap<>();
 
         private boolean mRunning;
 
-        UserHandler(MediaRouter2ServiceImpl service, UserRecord userRecord) {
+        UserHandler(@NonNull MediaRouter2ServiceImpl service, @NonNull UserRecord userRecord) {
             super(Looper.getMainLooper(), null, true);
             mServiceRef = new WeakReference<>(service);
             mUserRecord = userRecord;
@@ -949,15 +1056,15 @@
         }
 
         @Override
-        public void onAddProvider(MediaRoute2ProviderProxy provider) {
-            provider.setCallback(this);
-            mMediaProviders.add(provider);
-            provider.updateDiscoveryPreference(mUserRecord.mCompositeDiscoveryPreference);
+        public void onAddProviderService(@NonNull MediaRoute2ProviderServiceProxy proxy) {
+            proxy.setCallback(this);
+            mMediaProviders.add(proxy);
+            proxy.updateDiscoveryPreference(mUserRecord.mCompositeDiscoveryPreference);
         }
 
         @Override
-        public void onRemoveProvider(MediaRoute2ProviderProxy provider) {
-            mMediaProviders.remove(provider);
+        public void onRemoveProviderService(@NonNull MediaRoute2ProviderServiceProxy proxy) {
+            mMediaProviders.remove(proxy);
         }
 
         @Override
@@ -987,19 +1094,19 @@
         }
 
         @Override
-        public void onSessionReleased(MediaRoute2Provider provider,
-                RoutingSessionInfo sessionInfo) {
+        public void onSessionReleased(@NonNull MediaRoute2Provider provider,
+                @NonNull RoutingSessionInfo sessionInfo) {
             sendMessage(PooledLambda.obtainMessage(UserHandler::onSessionReleasedOnHandler,
                     this, provider, sessionInfo));
         }
 
         @Nullable
-        public Client2Record findClientforSessionLocked(@NonNull String sessionId) {
-            return mSessionToClientMap.get(sessionId);
+        public RouterRecord findRouterforSessionLocked(@NonNull String uniqueSessionId) {
+            return mSessionToRouterMap.get(uniqueSessionId);
         }
 
         //TODO: notify session info updates
-        private void onProviderStateChangedOnHandler(MediaRoute2Provider provider) {
+        private void onProviderStateChangedOnHandler(@NonNull MediaRoute2Provider provider) {
             int providerIndex = getProviderInfoIndex(provider.getUniqueId());
             MediaRoute2ProviderInfo providerInfo = provider.getProviderInfo();
             MediaRoute2ProviderInfo prevInfo =
@@ -1011,16 +1118,16 @@
                 mLastProviderInfos.add(providerInfo);
                 Collection<MediaRoute2Info> addedRoutes = providerInfo.getRoutes();
                 if (addedRoutes.size() > 0) {
-                    sendMessage(PooledLambda.obtainMessage(UserHandler::notifyRoutesAddedToClients,
-                            this, getClients(), new ArrayList<>(addedRoutes)));
+                    sendMessage(PooledLambda.obtainMessage(UserHandler::notifyRoutesAddedToRouters,
+                            this, getRouters(), new ArrayList<>(addedRoutes)));
                 }
             } else if (providerInfo == null) {
                 mLastProviderInfos.remove(prevInfo);
                 Collection<MediaRoute2Info> removedRoutes = prevInfo.getRoutes();
                 if (removedRoutes.size() > 0) {
                     sendMessage(PooledLambda.obtainMessage(
-                            UserHandler::notifyRoutesRemovedToClients,
-                            this, getClients(), new ArrayList<>(removedRoutes)));
+                            UserHandler::notifyRoutesRemovedToRouters,
+                            this, getRouters(), new ArrayList<>(removedRoutes)));
                 }
             } else {
                 mLastProviderInfos.set(providerIndex, providerInfo);
@@ -1054,24 +1161,24 @@
                     }
                 }
 
-                List<IMediaRouter2Client> clients = getClients();
+                List<IMediaRouter2> routers = getRouters();
                 List<IMediaRouter2Manager> managers = getManagers();
                 if (addedRoutes.size() > 0) {
-                    notifyRoutesAddedToClients(clients, addedRoutes);
+                    notifyRoutesAddedToRouters(routers, addedRoutes);
                     notifyRoutesAddedToManagers(managers, addedRoutes);
                 }
                 if (removedRoutes.size() > 0) {
-                    notifyRoutesRemovedToClients(clients, removedRoutes);
+                    notifyRoutesRemovedToRouters(routers, removedRoutes);
                     notifyRoutesRemovedToManagers(managers, removedRoutes);
                 }
                 if (changedRoutes.size() > 0) {
-                    notifyRoutesChangedToClients(clients, changedRoutes);
+                    notifyRoutesChangedToRouters(routers, changedRoutes);
                     notifyRoutesChangedToManagers(managers, changedRoutes);
                 }
             }
         }
 
-        private int getProviderInfoIndex(String providerId) {
+        private int getProviderInfoIndex(@NonNull String providerId) {
             for (int i = 0; i < mLastProviderInfos.size(); i++) {
                 MediaRoute2ProviderInfo providerInfo = mLastProviderInfos.get(i);
                 if (TextUtils.equals(providerInfo.getUniqueId(), providerId)) {
@@ -1081,29 +1188,30 @@
             return -1;
         }
 
-        private void requestCreateSessionOnHandler(Client2Record clientRecord,
-                MediaRoute2Info route, long requestId, @Nullable Bundle sessionHints) {
+        private void requestCreateSessionOnHandler(@NonNull RouterRecord routerRecord,
+                @NonNull MediaRoute2Info route, long requestId, @Nullable Bundle sessionHints) {
 
             final MediaRoute2Provider provider = findProvider(route.getProviderId());
             if (provider == null) {
                 Slog.w(TAG, "Ignoring session creation request since no provider found for"
                         + " given route=" + route);
-                notifySessionCreationFailed(clientRecord, toClientRequestId(requestId));
+                notifySessionCreationFailed(routerRecord, toOriginalRequestId(requestId));
                 return;
             }
 
             // TODO: Apply timeout for each request (How many seconds should we wait?)
             SessionCreationRequest request =
-                    new SessionCreationRequest(clientRecord, route, requestId);
+                    new SessionCreationRequest(routerRecord, route, requestId);
             mSessionCreationRequests.add(request);
 
-            provider.requestCreateSession(clientRecord.mPackageName, route.getOriginalId(),
+            provider.requestCreateSession(routerRecord.mPackageName, route.getOriginalId(),
                     requestId, sessionHints);
         }
 
-        private void selectRouteOnHandler(@Nullable Client2Record clientRecord,
-                String uniqueSessionId, MediaRoute2Info route) {
-            if (!checkArgumentsForSessionControl(clientRecord, uniqueSessionId, route,
+        // routerRecord can be null if the session is system's.
+        private void selectRouteOnHandler(@Nullable RouterRecord routerRecord,
+                @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+            if (!checkArgumentsForSessionControl(routerRecord, uniqueSessionId, route,
                     "selecting")) {
                 return;
             }
@@ -1117,9 +1225,10 @@
             provider.selectRoute(getOriginalId(uniqueSessionId), route.getOriginalId());
         }
 
-        private void deselectRouteOnHandler(@Nullable Client2Record clientRecord,
-                String uniqueSessionId, MediaRoute2Info route) {
-            if (!checkArgumentsForSessionControl(clientRecord, uniqueSessionId, route,
+        // routerRecord can be null if the session is system's.
+        private void deselectRouteOnHandler(@Nullable RouterRecord routerRecord,
+                @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+            if (!checkArgumentsForSessionControl(routerRecord, uniqueSessionId, route,
                     "deselecting")) {
                 return;
             }
@@ -1133,9 +1242,10 @@
             provider.deselectRoute(getOriginalId(uniqueSessionId), route.getOriginalId());
         }
 
-        private void transferToRouteOnHandler(Client2Record clientRecord,
-                String uniqueSessionId, MediaRoute2Info route) {
-            if (!checkArgumentsForSessionControl(clientRecord, uniqueSessionId, route,
+        // routerRecord can be null if the session is system's.
+        private void transferToRouteOnHandler(@Nullable RouterRecord routerRecord,
+                @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+            if (!checkArgumentsForSessionControl(routerRecord, uniqueSessionId, route,
                     "transferring to")) {
                 return;
             }
@@ -1146,17 +1256,12 @@
             if (provider == null) {
                 return;
             }
-            provider.transferToRoute(getOriginalId(uniqueSessionId),
-                    route.getOriginalId());
+            provider.transferToRoute(getOriginalId(uniqueSessionId), route.getOriginalId());
         }
 
-        private boolean checkArgumentsForSessionControl(@Nullable Client2Record clientRecord,
-                String uniqueSessionId, MediaRoute2Info route, @NonNull String description) {
-            if (route == null) {
-                Slog.w(TAG, "Ignoring " + description + " null route");
-                return false;
-            }
-
+        private boolean checkArgumentsForSessionControl(@Nullable RouterRecord routerRecord,
+                @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route,
+                @NonNull String description) {
             final String providerId = route.getProviderId();
             final MediaRoute2Provider provider = findProvider(providerId);
             if (provider == null) {
@@ -1165,27 +1270,21 @@
                 return false;
             }
 
-            if (TextUtils.isEmpty(uniqueSessionId)) {
-                Slog.w(TAG, "Ignoring " + description + " route with empty unique session ID. "
-                        + "route=" + route);
-                return false;
-            }
-
-            // Bypass checking client if it's the system session (clientRecord should be null)
+            // Bypass checking router if it's the system session (routerRecord should be null)
             if (TextUtils.equals(getProviderId(uniqueSessionId), mSystemProvider.getUniqueId())) {
                 return true;
             }
 
             //TODO: Handle RCN case.
-            if (clientRecord == null) {
-                Slog.w(TAG, "Ignoring " + description + " route from unknown client.");
+            if (routerRecord == null) {
+                Slog.w(TAG, "Ignoring " + description + " route from unknown router.");
                 return false;
             }
 
-            Client2Record matchingRecord = mSessionToClientMap.get(uniqueSessionId);
-            if (matchingRecord != clientRecord) {
-                Slog.w(TAG, "Ignoring " + description + " route from non-matching client. "
-                        + "packageName=" + clientRecord.mPackageName + " route=" + route);
+            RouterRecord matchingRecord = mSessionToRouterMap.get(uniqueSessionId);
+            if (matchingRecord != routerRecord) {
+                Slog.w(TAG, "Ignoring " + description + " route from non-matching router. "
+                        + "packageName=" + routerRecord.mPackageName + " route=" + route);
                 return false;
             }
 
@@ -1199,17 +1298,12 @@
             return true;
         }
 
-        private void releaseSessionOnHandler(@NonNull Client2Record clientRecord,
-                String uniqueSessionId) {
-            if (TextUtils.isEmpty(uniqueSessionId)) {
-                Slog.w(TAG, "Ignoring releasing session with empty unique session ID.");
-                return;
-            }
-
-            final Client2Record matchingRecord = mSessionToClientMap.get(uniqueSessionId);
-            if (matchingRecord != clientRecord) {
-                Slog.w(TAG, "Ignoring releasing session from non-matching client."
-                        + " packageName=" + clientRecord.mPackageName
+        private void releaseSessionOnHandler(@NonNull RouterRecord routerRecord,
+                @NonNull String uniqueSessionId) {
+            final RouterRecord matchingRecord = mSessionToRouterMap.get(uniqueSessionId);
+            if (matchingRecord != routerRecord) {
+                Slog.w(TAG, "Ignoring releasing session from non-matching router."
+                        + " packageName=" + routerRecord.mPackageName
                         + " uniqueSessionId=" + uniqueSessionId);
                 return;
             }
@@ -1240,7 +1334,6 @@
 
         private void onSessionCreatedOnHandler(@NonNull MediaRoute2Provider provider,
                 @NonNull RoutingSessionInfo sessionInfo, long requestId) {
-
             notifySessionCreatedToManagers(getManagers(), sessionInfo);
 
             if (requestId == MediaRoute2ProviderService.REQUEST_ID_UNKNOWN) {
@@ -1269,27 +1362,27 @@
 
             if (sessionInfo == null) {
                 // Failed
-                notifySessionCreationFailed(matchingRequest.mClientRecord,
-                        toClientRequestId(requestId));
+                notifySessionCreationFailed(matchingRequest.mRouterRecord,
+                        toOriginalRequestId(requestId));
                 return;
             }
 
             String originalRouteId = matchingRequest.mRoute.getId();
-            Client2Record client2Record = matchingRequest.mClientRecord;
+            RouterRecord routerRecord = matchingRequest.mRouterRecord;
 
             if (!sessionInfo.getSelectedRoutes().contains(originalRouteId)) {
                 Slog.w(TAG, "Created session doesn't match the original request."
                         + " originalRouteId=" + originalRouteId
                         + ", requestId=" + requestId + ", sessionInfo=" + sessionInfo);
-                notifySessionCreationFailed(matchingRequest.mClientRecord,
-                        toClientRequestId(requestId));
+                notifySessionCreationFailed(matchingRequest.mRouterRecord,
+                        toOriginalRequestId(requestId));
                 return;
             }
 
             // Succeeded
-            notifySessionCreated(matchingRequest.mClientRecord,
-                    sessionInfo, toClientRequestId(requestId));
-            mSessionToClientMap.put(sessionInfo.getId(), client2Record);
+            notifySessionCreated(matchingRequest.mRouterRecord,
+                    sessionInfo, toOriginalRequestId(requestId));
+            mSessionToRouterMap.put(sessionInfo.getId(), routerRecord);
         }
 
         private void onSessionCreationFailedOnHandler(@NonNull MediaRoute2Provider provider,
@@ -1312,8 +1405,8 @@
             }
 
             mSessionCreationRequests.remove(matchingRequest);
-            notifySessionCreationFailed(matchingRequest.mClientRecord,
-                    toClientRequestId(requestId));
+            notifySessionCreationFailed(matchingRequest.mRouterRecord,
+                    toOriginalRequestId(requestId));
         }
 
         private void onSessionInfoChangedOnHandler(@NonNull MediaRoute2Provider provider,
@@ -1321,23 +1414,22 @@
             List<IMediaRouter2Manager> managers = getManagers();
             notifySessionInfosChangedToManagers(managers);
 
-            // For system provider, notify all clients.
+            // For system provider, notify all routers.
             if (provider == mSystemProvider) {
                 MediaRouter2ServiceImpl service = mServiceRef.get();
                 if (service == null) {
                     return;
                 }
-                notifySessionInfoChangedToClients(getClients(), sessionInfo);
+                notifySessionInfoChangedToRouters(getRouters(), sessionInfo);
                 return;
             }
 
-            Client2Record client2Record = mSessionToClientMap.get(
-                    sessionInfo.getId());
-            if (client2Record == null) {
-                Slog.w(TAG, "No matching client found for session=" + sessionInfo);
+            RouterRecord routerRecord = mSessionToRouterMap.get(sessionInfo.getId());
+            if (routerRecord == null) {
+                Slog.w(TAG, "No matching router found for session=" + sessionInfo);
                 return;
             }
-            notifySessionInfoChanged(client2Record, sessionInfo);
+            notifySessionInfoChanged(routerRecord, sessionInfo);
         }
 
         private void onSessionReleasedOnHandler(@NonNull MediaRoute2Provider provider,
@@ -1345,79 +1437,83 @@
             List<IMediaRouter2Manager> managers = getManagers();
             notifySessionInfosChangedToManagers(managers);
 
-            Client2Record client2Record = mSessionToClientMap.get(sessionInfo.getId());
-            if (client2Record == null) {
-                Slog.w(TAG, "No matching client found for session=" + sessionInfo);
+            RouterRecord routerRecord = mSessionToRouterMap.get(sessionInfo.getId());
+            if (routerRecord == null) {
+                Slog.w(TAG, "No matching router found for session=" + sessionInfo);
                 return;
             }
-            notifySessionReleased(client2Record, sessionInfo);
+            notifySessionReleased(routerRecord, sessionInfo);
         }
 
-        private void notifySessionCreated(Client2Record clientRecord,
-                RoutingSessionInfo sessionInfo, int requestId) {
+        private void notifySessionCreated(@NonNull RouterRecord routerRecord,
+                @NonNull RoutingSessionInfo sessionInfo, int requestId) {
             try {
-                clientRecord.mClient.notifySessionCreated(sessionInfo, requestId);
+                routerRecord.mRouter.notifySessionCreated(sessionInfo, requestId);
             } catch (RemoteException ex) {
-                Slog.w(TAG, "Failed to notify client of the session creation."
-                        + " Client probably died.", ex);
+                Slog.w(TAG, "Failed to notify router of the session creation."
+                        + " Router probably died.", ex);
             }
         }
 
-        private void notifySessionCreationFailed(Client2Record clientRecord, int requestId) {
+        private void notifySessionCreationFailed(@NonNull RouterRecord routerRecord,
+                int requestId) {
             try {
-                clientRecord.mClient.notifySessionCreated(/* sessionInfo= */ null, requestId);
+                routerRecord.mRouter.notifySessionCreated(/* sessionInfo= */ null, requestId);
             } catch (RemoteException ex) {
-                Slog.w(TAG, "Failed to notify client of the session creation failure."
-                        + " Client probably died.", ex);
+                Slog.w(TAG, "Failed to notify router of the session creation failure."
+                        + " Router probably died.", ex);
             }
         }
 
-        private void notifySessionInfoChanged(Client2Record clientRecord,
-                RoutingSessionInfo sessionInfo) {
+        private void notifySessionInfoChanged(@NonNull RouterRecord routerRecord,
+                @NonNull RoutingSessionInfo sessionInfo) {
             try {
-                clientRecord.mClient.notifySessionInfoChanged(sessionInfo);
+                routerRecord.mRouter.notifySessionInfoChanged(sessionInfo);
             } catch (RemoteException ex) {
-                Slog.w(TAG, "Failed to notify client of the session info change."
-                        + " Client probably died.", ex);
+                Slog.w(TAG, "Failed to notify router of the session info change."
+                        + " Router probably died.", ex);
             }
         }
 
-        private void notifySessionReleased(Client2Record clientRecord,
-                RoutingSessionInfo sessionInfo) {
+        private void notifySessionReleased(@NonNull RouterRecord routerRecord,
+                @NonNull RoutingSessionInfo sessionInfo) {
             try {
-                clientRecord.mClient.notifySessionReleased(sessionInfo);
+                routerRecord.mRouter.notifySessionReleased(sessionInfo);
             } catch (RemoteException ex) {
-                Slog.w(TAG, "Failed to notify client of the session release."
-                        + " Client probably died.", ex);
+                Slog.w(TAG, "Failed to notify router of the session release."
+                        + " Router probably died.", ex);
             }
         }
 
-        private void sendControlRequest(MediaRoute2Info route, Intent request) {
+        private void setRouteVolumeOnHandler(@NonNull MediaRoute2Info route, int volume) {
             final MediaRoute2Provider provider = findProvider(route.getProviderId());
             if (provider != null) {
-                provider.sendControlRequest(route.getOriginalId(), request);
+                provider.setRouteVolume(route.getOriginalId(), volume);
             }
         }
 
-        private void requestSetVolume(MediaRoute2Info route, int volume) {
-            final MediaRoute2Provider provider = findProvider(route.getProviderId());
-            if (provider != null) {
-                provider.requestSetVolume(route.getOriginalId(), volume);
+        private void setSessionVolumeOnHandler(@NonNull String uniqueSessionId, int volume) {
+            final MediaRoute2Provider provider = findProvider(getProviderId(uniqueSessionId));
+            if (provider == null) {
+                Slog.w(TAG, "setSessionVolume: couldn't find provider for session "
+                        + "id=" + uniqueSessionId);
+                return;
             }
+            provider.setSessionVolume(getOriginalId(uniqueSessionId), volume);
         }
 
-        private List<IMediaRouter2Client> getClients() {
-            final List<IMediaRouter2Client> clients = new ArrayList<>();
+        private List<IMediaRouter2> getRouters() {
+            final List<IMediaRouter2> routers = new ArrayList<>();
             MediaRouter2ServiceImpl service = mServiceRef.get();
             if (service == null) {
-                return clients;
+                return routers;
             }
             synchronized (service.mLock) {
-                for (Client2Record clientRecord : mUserRecord.mClientRecords) {
-                    clients.add(clientRecord.mClient);
+                for (RouterRecord routerRecord : mUserRecord.mRouterRecords) {
+                    routers.add(routerRecord.mRouter);
                 }
             }
-            return clients;
+            return routers;
         }
 
         private List<IMediaRouter2Manager> getManagers() {
@@ -1434,7 +1530,7 @@
             return managers;
         }
 
-        private void notifyRoutesToClient(IMediaRouter2Client client) {
+        private void notifyRoutesToRouter(@NonNull IMediaRouter2 router) {
             List<MediaRoute2Info> routes = new ArrayList<>();
             for (MediaRoute2ProviderInfo providerInfo : mLastProviderInfos) {
                 routes.addAll(providerInfo.getRoutes());
@@ -1443,57 +1539,57 @@
                 return;
             }
             try {
-                client.notifyRoutesAdded(routes);
+                router.notifyRoutesAdded(routes);
             } catch (RemoteException ex) {
-                Slog.w(TAG, "Failed to notify all routes. Client probably died.", ex);
+                Slog.w(TAG, "Failed to notify all routes. Router probably died.", ex);
             }
         }
 
-        private void notifyRoutesAddedToClients(List<IMediaRouter2Client> clients,
-                List<MediaRoute2Info> routes) {
-            for (IMediaRouter2Client client : clients) {
+        private void notifyRoutesAddedToRouters(@NonNull List<IMediaRouter2> routers,
+                @NonNull List<MediaRoute2Info> routes) {
+            for (IMediaRouter2 router : routers) {
                 try {
-                    client.notifyRoutesAdded(routes);
+                    router.notifyRoutesAdded(routes);
                 } catch (RemoteException ex) {
-                    Slog.w(TAG, "Failed to notify routes added. Client probably died.", ex);
+                    Slog.w(TAG, "Failed to notify routes added. Router probably died.", ex);
                 }
             }
         }
 
-        private void notifyRoutesRemovedToClients(List<IMediaRouter2Client> clients,
-                List<MediaRoute2Info> routes) {
-            for (IMediaRouter2Client client : clients) {
+        private void notifyRoutesRemovedToRouters(@NonNull List<IMediaRouter2> routers,
+                @NonNull List<MediaRoute2Info> routes) {
+            for (IMediaRouter2 router : routers) {
                 try {
-                    client.notifyRoutesRemoved(routes);
+                    router.notifyRoutesRemoved(routes);
                 } catch (RemoteException ex) {
-                    Slog.w(TAG, "Failed to notify routes removed. Client probably died.", ex);
+                    Slog.w(TAG, "Failed to notify routes removed. Router probably died.", ex);
                 }
             }
         }
 
-        private void notifyRoutesChangedToClients(List<IMediaRouter2Client> clients,
-                List<MediaRoute2Info> routes) {
-            for (IMediaRouter2Client client : clients) {
+        private void notifyRoutesChangedToRouters(@NonNull List<IMediaRouter2> routers,
+                @NonNull List<MediaRoute2Info> routes) {
+            for (IMediaRouter2 router : routers) {
                 try {
-                    client.notifyRoutesChanged(routes);
+                    router.notifyRoutesChanged(routes);
                 } catch (RemoteException ex) {
-                    Slog.w(TAG, "Failed to notify routes changed. Client probably died.", ex);
+                    Slog.w(TAG, "Failed to notify routes changed. Router probably died.", ex);
                 }
             }
         }
 
-        private void notifySessionInfoChangedToClients(List<IMediaRouter2Client> clients,
-                RoutingSessionInfo sessionInfo) {
-            for (IMediaRouter2Client client : clients) {
+        private void notifySessionInfoChangedToRouters(@NonNull List<IMediaRouter2> routers,
+                @NonNull RoutingSessionInfo sessionInfo) {
+            for (IMediaRouter2 router : routers) {
                 try {
-                    client.notifySessionInfoChanged(sessionInfo);
+                    router.notifySessionInfoChanged(sessionInfo);
                 } catch (RemoteException ex) {
-                    Slog.w(TAG, "Failed to notify session info changed. Client probably died.", ex);
+                    Slog.w(TAG, "Failed to notify session info changed. Router probably died.", ex);
                 }
             }
         }
 
-        private void notifyRoutesToManager(IMediaRouter2Manager manager) {
+        private void notifyRoutesToManager(@NonNull IMediaRouter2Manager manager) {
             List<MediaRoute2Info> routes = new ArrayList<>();
             for (MediaRoute2ProviderInfo providerInfo : mLastProviderInfos) {
                 routes.addAll(providerInfo.getRoutes());
@@ -1508,8 +1604,8 @@
             }
         }
 
-        private void notifyRoutesAddedToManagers(List<IMediaRouter2Manager> managers,
-                List<MediaRoute2Info> routes) {
+        private void notifyRoutesAddedToManagers(@NonNull List<IMediaRouter2Manager> managers,
+                @NonNull List<MediaRoute2Info> routes) {
             for (IMediaRouter2Manager manager : managers) {
                 try {
                     manager.notifyRoutesAdded(routes);
@@ -1519,8 +1615,8 @@
             }
         }
 
-        private void notifyRoutesRemovedToManagers(List<IMediaRouter2Manager> managers,
-                List<MediaRoute2Info> routes) {
+        private void notifyRoutesRemovedToManagers(@NonNull List<IMediaRouter2Manager> managers,
+                @NonNull List<MediaRoute2Info> routes) {
             for (IMediaRouter2Manager manager : managers) {
                 try {
                     manager.notifyRoutesRemoved(routes);
@@ -1530,8 +1626,8 @@
             }
         }
 
-        private void notifyRoutesChangedToManagers(List<IMediaRouter2Manager> managers,
-                List<MediaRoute2Info> routes) {
+        private void notifyRoutesChangedToManagers(@NonNull List<IMediaRouter2Manager> managers,
+                @NonNull List<MediaRoute2Info> routes) {
             for (IMediaRouter2Manager manager : managers) {
                 try {
                     manager.notifyRoutesChanged(routes);
@@ -1541,8 +1637,8 @@
             }
         }
 
-        private void notifySessionCreatedToManagers(List<IMediaRouter2Manager> managers,
-                RoutingSessionInfo sessionInfo) {
+        private void notifySessionCreatedToManagers(@NonNull List<IMediaRouter2Manager> managers,
+                @NonNull RoutingSessionInfo sessionInfo) {
             for (IMediaRouter2Manager manager : managers) {
                 try {
                     manager.notifySessionCreated(sessionInfo);
@@ -1553,7 +1649,8 @@
             }
         }
 
-        private void notifySessionInfosChangedToManagers(List<IMediaRouter2Manager> managers) {
+        private void notifySessionInfosChangedToManagers(
+                @NonNull List<IMediaRouter2Manager> managers) {
             for (IMediaRouter2Manager manager : managers) {
                 try {
                     manager.notifySessionsUpdated();
@@ -1564,7 +1661,7 @@
             }
         }
 
-        private void updateClientUsage(Client2Record clientRecord) {
+        private void notifyPreferredFeaturesChangedToManagers(@NonNull RouterRecord routerRecord) {
             MediaRouter2ServiceImpl service = mServiceRef.get();
             if (service == null) {
                 return;
@@ -1577,10 +1674,11 @@
             }
             for (IMediaRouter2Manager manager : managers) {
                 try {
-                    manager.notifyPreferredFeaturesChanged(clientRecord.mPackageName,
-                            clientRecord.mDiscoveryPreference.getPreferredFeatures());
+                    manager.notifyPreferredFeaturesChanged(routerRecord.mPackageName,
+                            routerRecord.mDiscoveryPreference.getPreferredFeatures());
                 } catch (RemoteException ex) {
-                    Slog.w(TAG, "Failed to update client usage. Manager probably died.", ex);
+                    Slog.w(TAG, "Failed to notify preferred features changed."
+                            + " Manager probably died.", ex);
                 }
             }
         }
@@ -1592,8 +1690,8 @@
             }
             List<RouteDiscoveryPreference> discoveryPreferences = new ArrayList<>();
             synchronized (service.mLock) {
-                for (Client2Record clientRecord : mUserRecord.mClientRecords) {
-                    discoveryPreferences.add(clientRecord.mDiscoveryPreference);
+                for (RouterRecord routerRecord : mUserRecord.mRouterRecords) {
+                    discoveryPreferences.add(routerRecord.mDiscoveryPreference);
                 }
                 mUserRecord.mCompositeDiscoveryPreference =
                         new RouteDiscoveryPreference.Builder(discoveryPreferences)
@@ -1604,7 +1702,7 @@
             }
         }
 
-        private MediaRoute2Provider findProvider(String providerId) {
+        private MediaRoute2Provider findProvider(@Nullable String providerId) {
             for (MediaRoute2Provider provider : mMediaProviders) {
                 if (TextUtils.equals(provider.getUniqueId(), providerId)) {
                     return provider;
@@ -1614,13 +1712,13 @@
         }
 
         final class SessionCreationRequest {
-            public final Client2Record mClientRecord;
+            public final RouterRecord mRouterRecord;
             public final MediaRoute2Info mRoute;
             public final long mRequestId;
 
-            SessionCreationRequest(@NonNull Client2Record clientRecord,
+            SessionCreationRequest(@NonNull RouterRecord routerRecord,
                     @NonNull MediaRoute2Info route, long requestId) {
-                mClientRecord = clientRecord;
+                mRouterRecord = routerRecord;
                 mRoute = route;
                 mRequestId = requestId;
             }
diff --git a/services/core/java/com/android/server/media/MediaRouterService.java b/services/core/java/com/android/server/media/MediaRouterService.java
index 57f0328..580fc52 100644
--- a/services/core/java/com/android/server/media/MediaRouterService.java
+++ b/services/core/java/com/android/server/media/MediaRouterService.java
@@ -30,7 +30,7 @@
 import android.media.AudioSystem;
 import android.media.IAudioRoutesObserver;
 import android.media.IAudioService;
-import android.media.IMediaRouter2Client;
+import android.media.IMediaRouter2;
 import android.media.IMediaRouter2Manager;
 import android.media.IMediaRouterClient;
 import android.media.IMediaRouterService;
@@ -450,57 +450,78 @@
 
     // Binder call
     @Override
-    public void registerClient2(IMediaRouter2Client client, String packageName) {
+    public void registerRouter2(IMediaRouter2 router, String packageName) {
         final int uid = Binder.getCallingUid();
         if (!validatePackageName(uid, packageName)) {
             throw new SecurityException("packageName must match the calling uid");
         }
-        mService2.registerClient(client, packageName);
+        mService2.registerRouter2(router, packageName);
     }
 
     // Binder call
     @Override
-    public void unregisterClient2(IMediaRouter2Client client) {
-        mService2.unregisterClient(client);
+    public void unregisterRouter2(IMediaRouter2 router) {
+        mService2.unregisterRouter2(router);
     }
 
     // Binder call
     @Override
-    public void requestCreateSession(IMediaRouter2Client client, MediaRoute2Info route,
+    public void setDiscoveryRequestWithRouter2(IMediaRouter2 router,
+            RouteDiscoveryPreference request) {
+        mService2.setDiscoveryRequestWithRouter2(router, request);
+    }
+
+    // Binder call
+    @Override
+    public void setRouteVolumeWithRouter2(IMediaRouter2 router,
+            MediaRoute2Info route, int volume) {
+        mService2.setRouteVolumeWithRouter2(router, route, volume);
+    }
+
+    // Binder call
+    @Override
+    public void requestCreateSessionWithRouter2(IMediaRouter2 router, MediaRoute2Info route,
             int requestId, Bundle sessionHints) {
-        mService2.requestCreateSession(client, route, requestId, sessionHints);
+        mService2.requestCreateSessionWithRouter2(router, route, requestId, sessionHints);
     }
 
     // Binder call
     @Override
-    public void selectRoute(IMediaRouter2Client client, String sessionId, MediaRoute2Info route) {
-        mService2.selectRoute(client, sessionId, route);
-    }
-
-    // Binder call
-    @Override
-    public void deselectRoute(IMediaRouter2Client client, String sessionId, MediaRoute2Info route) {
-        mService2.deselectRoute(client, sessionId, route);
-    }
-
-    // Binder call
-    @Override
-    public void transferToRoute(IMediaRouter2Client client, String sessionId,
+    public void selectRouteWithRouter2(IMediaRouter2 router, String sessionId,
             MediaRoute2Info route) {
-        mService2.transferToRoute(client, sessionId, route);
+        mService2.selectRouteWithRouter2(router, sessionId, route);
     }
 
     // Binder call
     @Override
-    public void releaseSession(IMediaRouter2Client client, String sessionId) {
-        mService2.releaseSession(client, sessionId);
+    public void deselectRouteWithRouter2(IMediaRouter2 router, String sessionId,
+            MediaRoute2Info route) {
+        mService2.deselectRouteWithRouter2(router, sessionId, route);
     }
 
     // Binder call
     @Override
-    public void sendControlRequest(IMediaRouter2Client client, MediaRoute2Info route,
-            Intent request) {
-        mService2.sendControlRequest(client, route, request);
+    public void transferToRouteWithRouter2(IMediaRouter2 router, String sessionId,
+            MediaRoute2Info route) {
+        mService2.transferToRouteWithRouter2(router, sessionId, route);
+    }
+
+    // Binder call
+    @Override
+    public void setSessionVolumeWithRouter2(IMediaRouter2 router, String sessionId, int volume) {
+        mService2.setSessionVolumeWithRouter2(router, sessionId, volume);
+    }
+
+    // Binder call
+    @Override
+    public void releaseSessionWithRouter2(IMediaRouter2 router, String sessionId) {
+        mService2.releaseSessionWithRouter2(router, sessionId);
+    }
+
+    // Binder call
+    @Override
+    public List<RoutingSessionInfo> getActiveSessions(IMediaRouter2Manager manager) {
+        return mService2.getActiveSessions(manager);
     }
 
     // Binder call
@@ -521,60 +542,50 @@
 
     // Binder call
     @Override
-    public void requestCreateClientSession(IMediaRouter2Manager manager, String packageName,
-            MediaRoute2Info route, int requestId) {
-        mService2.requestCreateClientSession(manager, packageName, route, requestId);
-    }
-    // Binder call
-    @Override
-    public void setDiscoveryRequest2(IMediaRouter2Client client, RouteDiscoveryPreference request) {
-        mService2.setDiscoveryRequest2(client, request);
-    }
-
-    // Binder call
-    @Override
-    public void requestSetVolume2(IMediaRouter2Client client, MediaRoute2Info route, int volume) {
-        mService2.requestSetVolume2(client, route, volume);
-    }
-
-    // Binder call
-    @Override
-    public void requestSetVolume2Manager(IMediaRouter2Manager manager,
+    public void setRouteVolumeWithManager(IMediaRouter2Manager manager,
             MediaRoute2Info route, int volume) {
-        mService2.requestSetVolume2Manager(manager, route, volume);
+        mService2.setRouteVolumeWithManager(manager, route, volume);
     }
 
     // Binder call
     @Override
-    public List<RoutingSessionInfo> getActiveSessions(IMediaRouter2Manager manager) {
-        return mService2.getActiveSessions(manager);
+    public void requestCreateSessionWithManager(IMediaRouter2Manager manager, String packageName,
+            MediaRoute2Info route, int requestId) {
+        mService2.requestCreateSessionWithManager(manager, packageName, route, requestId);
     }
 
     // Binder call
     @Override
-    public void selectClientRoute(IMediaRouter2Manager manager, String sessionId,
+    public void selectRouteWithManager(IMediaRouter2Manager manager, String sessionId,
             MediaRoute2Info route) {
-        mService2.selectClientRoute(manager, sessionId, route);
+        mService2.selectRouteWithManager(manager, sessionId, route);
     }
 
     // Binder call
     @Override
-    public void deselectClientRoute(IMediaRouter2Manager manager, String sessionId,
+    public void deselectRouteWithManager(IMediaRouter2Manager manager, String sessionId,
             MediaRoute2Info route) {
-        mService2.deselectClientRoute(manager, sessionId, route);
+        mService2.deselectRouteWithManager(manager, sessionId, route);
     }
 
     // Binder call
     @Override
-    public void transferToClientRoute(IMediaRouter2Manager manager, String sessionId,
+    public void transferToRouteWithManager(IMediaRouter2Manager manager, String sessionId,
             MediaRoute2Info route) {
-        mService2.transferToClientRoute(manager, sessionId, route);
+        mService2.transferToRouteWithManager(manager, sessionId, route);
     }
 
     // Binder call
     @Override
-    public void releaseClientSession(IMediaRouter2Manager manager, String sessionId) {
-        mService2.releaseClientSession(manager, sessionId);
+    public void setSessionVolumeWithManager(IMediaRouter2Manager manager,
+            String sessionId, int volume) {
+        mService2.setSessionVolumeWithManager(manager, sessionId, volume);
+    }
+
+    // Binder call
+    @Override
+    public void releaseSessionWithManager(IMediaRouter2Manager manager, String sessionId) {
+        mService2.releaseSessionWithManager(manager, sessionId);
     }
 
     void restoreBluetoothA2dp() {
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java
index 7bcbcd4..9f47b34 100644
--- a/services/core/java/com/android/server/media/MediaSessionRecord.java
+++ b/services/core/java/com/android/server/media/MediaSessionRecord.java
@@ -127,7 +127,7 @@
             new ArrayList<>();
 
     private long mFlags;
-    private PendingIntent mMediaButtonReceiver;
+    private MediaButtonReceiverHolder mMediaButtonReceiverHolder;
     private PendingIntent mLaunchIntent;
 
     // TransportPerformer fields
@@ -220,8 +220,8 @@
      *
      * @return The pending intent set by the app or null.
      */
-    public PendingIntent getMediaButtonReceiver() {
-        return mMediaButtonReceiver;
+    public MediaButtonReceiverHolder getMediaButtonReceiver() {
+        return mMediaButtonReceiverHolder;
     }
 
     /**
@@ -471,7 +471,7 @@
                 + ", userId=" + mUserId);
         pw.println(indent + "package=" + mPackageName);
         pw.println(indent + "launchIntent=" + mLaunchIntent);
-        pw.println(indent + "mediaButtonReceiver=" + mMediaButtonReceiver);
+        pw.println(indent + "mediaButtonReceiver=" + mMediaButtonReceiverHolder);
         pw.println(indent + "active=" + mIsActive);
         pw.println(indent + "flags=" + mFlags);
         pw.println(indent + "rating type=" + mRatingType);
@@ -833,12 +833,14 @@
 
         @Override
         public void setMediaButtonReceiver(PendingIntent pi) throws RemoteException {
-            if ((mPolicies & SessionPolicyProvider.SESSION_POLICY_IGNORE_BUTTON_RECEIVER) == 1) {
-                return;
-            }
-            mMediaButtonReceiver = pi;
             final long token = Binder.clearCallingIdentity();
             try {
+                if ((mPolicies & SessionPolicyProvider.SESSION_POLICY_IGNORE_BUTTON_RECEIVER)
+                        != 0) {
+                    return;
+                }
+                mMediaButtonReceiverHolder =
+                        MediaButtonReceiverHolder.create(mContext, mUserId, pi);
                 mService.onMediaButtonReceiverChanged(MediaSessionRecord.this);
             } finally {
                 Binder.restoreCallingIdentity(token);
@@ -1529,5 +1531,4 @@
             msg.sendToTarget();
         }
     }
-
 }
diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java
index 88b884e..7ffac06 100644
--- a/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -18,22 +18,17 @@
 
 import static android.os.UserHandle.USER_ALL;
 
-import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.app.INotificationManager;
 import android.app.KeyguardManager;
 import android.app.PendingIntent;
-import android.app.PendingIntent.CanceledException;
 import android.content.ActivityNotFoundException;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ParceledListSlice;
-import android.content.pm.ServiceInfo;
 import android.content.pm.UserInfo;
 import android.database.ContentObserver;
 import android.media.AudioManager;
@@ -99,7 +94,7 @@
     private static final String TAG = "MediaSessionService";
     static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
     // Leave log for key event always.
-    private static final boolean DEBUG_KEY_EVENT = true;
+    static final boolean DEBUG_KEY_EVENT = true;
 
     private static final int WAKELOCK_TIMEOUT = 5000;
     private static final int MEDIA_KEY_LISTENER_TIMEOUT = 1000;
@@ -760,12 +755,6 @@
      * <p>The contents of this object is guarded by {@link #mLock}.
      */
     final class FullUserRecord implements MediaSessionStack.OnMediaButtonSessionChangedListener {
-        public static final int COMPONENT_TYPE_INVALID = 0;
-        public static final int COMPONENT_TYPE_BROADCAST = 1;
-        public static final int COMPONENT_TYPE_ACTIVITY = 2;
-        public static final int COMPONENT_TYPE_SERVICE = 3;
-        private static final String COMPONENT_NAME_USER_ID_DELIM = ",";
-
         private final int mFullUserId;
         private final MediaSessionStack mPriorityStack;
         private final HashMap<IBinder, OnMediaKeyEventDispatchedListenerRecord>
@@ -774,10 +763,7 @@
                 mOnMediaKeyEventSessionChangedListeners = new HashMap<>();
         private final SparseIntArray mUidToSessionCount = new SparseIntArray();
 
-        private PendingIntent mLastMediaButtonReceiver;
-        private ComponentName mRestoredMediaButtonReceiver;
-        private int mRestoredMediaButtonReceiverComponentType;
-        private int mRestoredMediaButtonReceiverUserId;
+        private MediaButtonReceiverHolder mLastMediaButtonReceiverHolder;
 
         private IOnVolumeKeyLongPressListener mOnVolumeKeyLongPressListener;
         private int mOnVolumeKeyLongPressListenerUid;
@@ -794,21 +780,9 @@
             // Restore the remembered media button receiver before the boot.
             String mediaButtonReceiverInfo = Settings.Secure.getStringForUser(mContentResolver,
                     Settings.System.MEDIA_BUTTON_RECEIVER, mFullUserId);
-            if (mediaButtonReceiverInfo == null) {
-                return;
-            }
-            String[] tokens = mediaButtonReceiverInfo.split(COMPONENT_NAME_USER_ID_DELIM);
-            if (tokens == null || (tokens.length != 2 && tokens.length != 3)) {
-                return;
-            }
-            mRestoredMediaButtonReceiver = ComponentName.unflattenFromString(tokens[0]);
-            mRestoredMediaButtonReceiverUserId = Integer.parseInt(tokens[1]);
-            if (tokens.length == 3) {
-                mRestoredMediaButtonReceiverComponentType = Integer.parseInt(tokens[2]);
-            } else {
-                mRestoredMediaButtonReceiverComponentType =
-                        getComponentType(mRestoredMediaButtonReceiver);
-            }
+            mLastMediaButtonReceiverHolder =
+                    MediaButtonReceiverHolder.unflattenFromString(
+                            mContext, mediaButtonReceiverInfo);
         }
 
         public void destroySessionsForUserLocked(int userId) {
@@ -892,10 +866,7 @@
                     : mOnMediaKeyEventSessionChangedListeners.values()) {
                 pw.println(indent + "  from " + getCallingPackageName(cr.uid));
             }
-            pw.println(indent + "Last MediaButtonReceiver: " + mLastMediaButtonReceiver);
-            pw.println(indent + "Restored MediaButtonReceiver: " + mRestoredMediaButtonReceiver);
-            pw.println(indent + "Restored MediaButtonReceiverComponentType: "
-                    + mRestoredMediaButtonReceiverComponentType);
+            pw.println(indent + "Last MediaButtonReceiver: " + mLastMediaButtonReceiverHolder);
             mPriorityStack.dump(pw, indent);
         }
 
@@ -924,25 +895,12 @@
                 return;
             }
             MediaSessionRecord sessionRecord = (MediaSessionRecord) record;
-            PendingIntent receiver = sessionRecord.getMediaButtonReceiver();
-            mLastMediaButtonReceiver = receiver;
-            mRestoredMediaButtonReceiver = null;
-            mRestoredMediaButtonReceiverComponentType = COMPONENT_TYPE_INVALID;
-
-            String mediaButtonReceiverInfo = "";
-            if (receiver != null) {
-                ComponentName component = receiver.getIntent().getComponent();
-                if (component != null
-                        && record.getPackageName().equals(component.getPackageName())) {
-                    String componentName = component.flattenToString();
-                    int componentType = getComponentType(component);
-                    mediaButtonReceiverInfo = String.join(COMPONENT_NAME_USER_ID_DELIM,
-                            componentName, String.valueOf(record.getUserId()),
-                            String.valueOf(componentType));
-                }
-            }
+            mLastMediaButtonReceiverHolder = sessionRecord.getMediaButtonReceiver();
+            String mediaButtonReceiverInfo = (mLastMediaButtonReceiverHolder == null)
+                    ? "" : mLastMediaButtonReceiverHolder.flattenToString();
             Settings.Secure.putStringForUser(mContentResolver,
-                    Settings.System.MEDIA_BUTTON_RECEIVER, mediaButtonReceiverInfo,
+                    Settings.System.MEDIA_BUTTON_RECEIVER,
+                    mediaButtonReceiverInfo,
                     mFullUserId);
         }
 
@@ -958,15 +916,9 @@
                     } else {
                         // TODO(jaewan): Implement
                     }
-                } else if (mCurrentFullUserRecord.mLastMediaButtonReceiver != null) {
-                    callback.onMediaKeyEventSessionChanged(
-                            mCurrentFullUserRecord.mLastMediaButtonReceiver
-                                    .getIntent().getComponent().getPackageName(),
-                            null);
-                } else if (mCurrentFullUserRecord.mRestoredMediaButtonReceiver != null) {
-                    callback.onMediaKeyEventSessionChanged(
-                            mCurrentFullUserRecord.mRestoredMediaButtonReceiver.getPackageName(),
-                            null);
+                } else if (mCurrentFullUserRecord.mLastMediaButtonReceiverHolder != null) {
+                    String packageName = mLastMediaButtonReceiverHolder.getPackageName();
+                    callback.onMediaKeyEventSessionChanged(packageName, null);
                 }
             } catch (RemoteException e) {
                 Log.w(TAG, "Failed to pushAddressedPlayerChangedLocked", e);
@@ -985,35 +937,6 @@
                     ? mGlobalPrioritySession : mPriorityStack.getMediaButtonSession();
         }
 
-        private int getComponentType(@Nullable ComponentName componentName) {
-            if (componentName == null) {
-                return COMPONENT_TYPE_INVALID;
-            }
-            PackageManager pm = mContext.getPackageManager();
-            try {
-                ActivityInfo activityInfo = pm.getActivityInfo(componentName,
-                        PackageManager.MATCH_DIRECT_BOOT_AWARE
-                                | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
-                                | PackageManager.GET_ACTIVITIES);
-                if (activityInfo != null) {
-                    return COMPONENT_TYPE_ACTIVITY;
-                }
-            } catch (NameNotFoundException e) {
-            }
-            try {
-                ServiceInfo serviceInfo = pm.getServiceInfo(componentName,
-                        PackageManager.MATCH_DIRECT_BOOT_AWARE
-                                | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
-                                | PackageManager.GET_SERVICES);
-                if (serviceInfo != null) {
-                    return COMPONENT_TYPE_SERVICE;
-                }
-            } catch (NameNotFoundException e) {
-            }
-            // Pick legacy behavior for BroadcastReceiver or unknown.
-            return COMPONENT_TYPE_BROADCAST;
-        }
-
         final class OnMediaKeyEventDispatchedListenerRecord implements IBinder.DeathRecipient {
             public final IOnMediaKeyEventDispatchedListener callback;
             public final int uid;
@@ -2166,79 +2089,31 @@
                 } catch (RemoteException e) {
                     Log.w(TAG, "Failed to send callback", e);
                 }
-            } else if (mCurrentFullUserRecord.mLastMediaButtonReceiver != null
-                    || mCurrentFullUserRecord.mRestoredMediaButtonReceiver != null) {
+            } else if (mCurrentFullUserRecord.mLastMediaButtonReceiverHolder != null) {
                 if (needWakeLock) {
                     mKeyEventReceiver.acquireWakeLockLocked();
                 }
-                Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
-                mediaButtonIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-                mediaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
-                // TODO: Find a way to also send PID/UID in secure way.
-                String callerPackageName =
+                String callingPackageName =
                         (asSystemService) ? mContext.getPackageName() : packageName;
-                mediaButtonIntent.putExtra(Intent.EXTRA_PACKAGE_NAME, callerPackageName);
-                try {
-                    if (mCurrentFullUserRecord.mLastMediaButtonReceiver != null) {
-                        PendingIntent receiver = mCurrentFullUserRecord.mLastMediaButtonReceiver;
-                        if (DEBUG_KEY_EVENT) {
-                            Log.d(TAG, "Sending " + keyEvent
-                                    + " to the last known PendingIntent " + receiver);
-                        }
-                        receiver.send(mContext,
-                                needWakeLock ? mKeyEventReceiver.mLastTimeoutId : -1,
-                                mediaButtonIntent, mKeyEventReceiver, mHandler);
-                        ComponentName componentName = mCurrentFullUserRecord
-                                .mLastMediaButtonReceiver.getIntent().getComponent();
-                        if (componentName != null) {
-                            for (FullUserRecord.OnMediaKeyEventDispatchedListenerRecord cr
-                                    : mCurrentFullUserRecord
-                                    .mOnMediaKeyEventDispatchedListeners.values()) {
-                                cr.callback.onMediaKeyEventDispatched(keyEvent,
-                                        componentName.getPackageName(), null);
-                            }
-                        }
-                    } else {
-                        ComponentName receiver =
-                                mCurrentFullUserRecord.mRestoredMediaButtonReceiver;
-                        int componentType = mCurrentFullUserRecord
-                                .mRestoredMediaButtonReceiverComponentType;
-                        UserHandle userHandle = UserHandle.of(mCurrentFullUserRecord
-                                .mRestoredMediaButtonReceiverUserId);
-                        if (DEBUG_KEY_EVENT) {
-                            Log.d(TAG, "Sending " + keyEvent + " to the restored intent "
-                                    + receiver + ", type=" + componentType);
-                        }
-                        mediaButtonIntent.setComponent(receiver);
+
+                MediaButtonReceiverHolder mediaButtonReceiverHolder =
+                        mCurrentFullUserRecord.mLastMediaButtonReceiverHolder;
+
+                boolean sent = mediaButtonReceiverHolder.send(
+                        mContext, keyEvent, callingPackageName,
+                        needWakeLock ? mKeyEventReceiver.mLastTimeoutId : -1, mKeyEventReceiver,
+                        mHandler);
+                if (sent) {
+                    String pkgName = mediaButtonReceiverHolder.getPackageName();
+                    for (FullUserRecord.OnMediaKeyEventDispatchedListenerRecord cr
+                            : mCurrentFullUserRecord
+                            .mOnMediaKeyEventDispatchedListeners.values()) {
                         try {
-                            switch (componentType) {
-                                case FullUserRecord.COMPONENT_TYPE_ACTIVITY:
-                                    mContext.startActivityAsUser(mediaButtonIntent, userHandle);
-                                    break;
-                                case FullUserRecord.COMPONENT_TYPE_SERVICE:
-                                    mContext.startForegroundServiceAsUser(mediaButtonIntent,
-                                            userHandle);
-                                    break;
-                                default:
-                                    // Legacy behavior for other cases.
-                                    mContext.sendBroadcastAsUser(mediaButtonIntent, userHandle);
-                            }
-                        } catch (Exception e) {
-                            Log.w(TAG, "Error sending media button to the restored intent "
-                                    + receiver + ", type=" + componentType, e);
-                        }
-                        for (FullUserRecord.OnMediaKeyEventDispatchedListenerRecord cr
-                                : mCurrentFullUserRecord
-                                .mOnMediaKeyEventDispatchedListeners.values()) {
-                            cr.callback.onMediaKeyEventDispatched(keyEvent,
-                                    receiver.getPackageName(), null);
+                            cr.callback.onMediaKeyEventDispatched(keyEvent, pkgName, null);
+                        } catch (RemoteException e) {
+                            Log.w(TAG, "Failed notify key event dispatch, uid=" + cr.uid, e);
                         }
                     }
-                } catch (CanceledException e) {
-                    Log.i(TAG, "Error sending key event to media button receiver "
-                            + mCurrentFullUserRecord.mLastMediaButtonReceiver, e);
-                } catch (RemoteException e) {
-                    Log.w(TAG, "Failed to send callback", e);
                 }
             }
         }
diff --git a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
index 888f7ce..f7e1398 100644
--- a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
+++ b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
@@ -19,10 +19,11 @@
 import static android.media.MediaRoute2Info.FEATURE_LIVE_AUDIO;
 import static android.media.MediaRoute2Info.FEATURE_LIVE_VIDEO;
 
-import android.annotation.NonNull;
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.media.AudioManager;
 import android.media.AudioRoutesInfo;
 import android.media.IAudioRoutesObserver;
@@ -41,13 +42,12 @@
 
 import com.android.internal.R;
 
-import java.util.Collections;
-import java.util.List;
 import java.util.Objects;
 
 /**
  * Provides routes for local playbacks such as phone speaker, wired headset, or Bluetooth speakers.
  */
+// TODO: check thread safety. We may need to use lock to protect variables.
 class SystemMediaRoute2Provider extends MediaRoute2Provider {
     private static final String TAG = "MR2SystemProvider";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -62,20 +62,19 @@
     private final BluetoothRouteProvider mBtRouteProvider;
 
     private static ComponentName sComponentName = new ComponentName(
-            SystemMediaRoute2Provider.class.getPackageName$(),
+            SystemMediaRoute2Provider.class.getPackage().getName(),
             SystemMediaRoute2Provider.class.getName());
 
+    private String mSelectedRouteId;
     MediaRoute2Info mDefaultRoute;
-    @NonNull List<MediaRoute2Info> mBluetoothRoutes = Collections.EMPTY_LIST;
     final AudioRoutesInfo mCurAudioRoutesInfo = new AudioRoutesInfo();
 
     final IAudioRoutesObserver.Stub mAudioRoutesObserver = new IAudioRoutesObserver.Stub() {
         @Override
         public void dispatchAudioRoutesChanged(final AudioRoutesInfo newRoutes) {
-            mHandler.post(new Runnable() {
-                @Override public void run() {
-                    updateAudioRoutes(newRoutes);
-                }
+            mHandler.post(() -> {
+                updateDefaultRoute(newRoutes);
+                notifyProviderState();
             });
         }
     };
@@ -92,11 +91,15 @@
         mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
         mAudioService = IAudioService.Stub.asInterface(
                 ServiceManager.getService(Context.AUDIO_SERVICE));
+        AudioRoutesInfo newAudioRoutes = null;
+        try {
+            newAudioRoutes = mAudioService.startWatchingRoutes(mAudioRoutesObserver);
+        } catch (RemoteException e) {
+        }
+        updateDefaultRoute(newAudioRoutes);
 
-        initializeDefaultRoute();
         mBtRouteProvider = BluetoothRouteProvider.getInstance(context, (routes) -> {
-            mBluetoothRoutes = routes;
-            publishRoutes();
+            publishProviderState();
 
             boolean sessionInfoChanged;
             synchronized (mLock) {
@@ -106,7 +109,18 @@
                 notifySessionInfoUpdated();
             }
         });
-        initializeSessionInfo();
+
+        mHandler.post(() -> notifyProviderState());
+
+        //TODO: clean up this
+        // This is required because it is not instantiated in the main thread and
+        // BluetoothRoutesUpdatedListener can be called before here
+        synchronized (mLock) {
+            updateSessionInfosIfNeededLocked();
+        }
+
+        mContext.registerReceiver(new VolumeChangeReceiver(),
+                new IntentFilter(AudioManager.VOLUME_CHANGED_ACTION));
     }
 
     @Override
@@ -137,81 +151,40 @@
     @Override
     public void transferToRoute(String sessionId, String routeId) {
         if (TextUtils.equals(routeId, mDefaultRoute.getId())) {
-            mBtRouteProvider.clearActiveDevices();
+            mBtRouteProvider.transferTo(null);
         } else {
-            mBtRouteProvider.setActiveDevice(routeId);
+            mBtRouteProvider.transferTo(routeId);
         }
     }
 
-    //TODO: implement method
     @Override
-    public void sendControlRequest(@NonNull String routeId, @NonNull Intent request) {
+    public void setRouteVolume(String routeId, int volume) {
+        if (!TextUtils.equals(routeId, mSelectedRouteId)) {
+            return;
+        }
+        mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0);
     }
 
-    //TODO: implement method
     @Override
-    public void requestSetVolume(String routeId, int volume) {
+    public void setSessionVolume(String sessionId, int volume) {
+        // Do nothing since we don't support grouping volume yet.
     }
 
-    private void initializeDefaultRoute() {
-        mDefaultRoute = new MediaRoute2Info.Builder(
-                DEFAULT_ROUTE_ID,
-                mContext.getResources().getText(R.string.default_audio_route_name).toString())
-                .setVolumeHandling(mAudioManager.isVolumeFixed()
-                        ? MediaRoute2Info.PLAYBACK_VOLUME_FIXED
-                        : MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE)
-                .setVolumeMax(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC))
-                .setVolume(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC))
-                .addFeature(FEATURE_LIVE_AUDIO)
-                .addFeature(FEATURE_LIVE_VIDEO)
-                .build();
-
-        AudioRoutesInfo newAudioRoutes = null;
-        try {
-            newAudioRoutes = mAudioService.startWatchingRoutes(mAudioRoutesObserver);
-        } catch (RemoteException e) {
-        }
-        if (newAudioRoutes != null) {
-            // This will select the active BT route if there is one and the current
-            // selected route is the default system route, or if there is no selected
-            // route yet.
-            updateAudioRoutes(newAudioRoutes);
-        }
-    }
-
-    private void initializeSessionInfo() {
-        mBluetoothRoutes = mBtRouteProvider.getBluetoothRoutes();
-
-        MediaRoute2ProviderInfo.Builder builder = new MediaRoute2ProviderInfo.Builder();
-        builder.addRoute(mDefaultRoute);
-        for (MediaRoute2Info route : mBluetoothRoutes) {
-            builder.addRoute(route);
-        }
-        setProviderState(builder.build());
-        mHandler.post(() -> notifyProviderState());
-
-        //TODO: clean up this
-        // This is required because it is not instantiated in the main thread and
-        // BluetoothRoutesUpdatedListener can be called before this function
-        synchronized (mLock) {
-            updateSessionInfosIfNeededLocked();
-        }
-    }
-
-    private void updateAudioRoutes(AudioRoutesInfo newRoutes) {
+    private void updateDefaultRoute(AudioRoutesInfo newRoutes) {
         int name = R.string.default_audio_route_name;
-        mCurAudioRoutesInfo.mainType = newRoutes.mainType;
-        if ((newRoutes.mainType & AudioRoutesInfo.MAIN_HEADPHONES) != 0
-                || (newRoutes.mainType & AudioRoutesInfo.MAIN_HEADSET) != 0) {
-            name = com.android.internal.R.string.default_audio_route_name_headphones;
-        } else if ((newRoutes.mainType & AudioRoutesInfo.MAIN_DOCK_SPEAKERS) != 0) {
-            name = com.android.internal.R.string.default_audio_route_name_dock_speakers;
-        } else if ((newRoutes.mainType & AudioRoutesInfo.MAIN_HDMI) != 0) {
-            name = com.android.internal.R.string.default_audio_route_name_hdmi;
-        } else if ((newRoutes.mainType & AudioRoutesInfo.MAIN_USB) != 0) {
-            name = com.android.internal.R.string.default_audio_route_name_usb;
+        if (newRoutes != null) {
+            mCurAudioRoutesInfo.mainType = newRoutes.mainType;
+            if ((newRoutes.mainType & AudioRoutesInfo.MAIN_HEADPHONES) != 0
+                    || (newRoutes.mainType & AudioRoutesInfo.MAIN_HEADSET) != 0) {
+                name = com.android.internal.R.string.default_audio_route_name_headphones;
+            } else if ((newRoutes.mainType & AudioRoutesInfo.MAIN_DOCK_SPEAKERS) != 0) {
+                name = com.android.internal.R.string.default_audio_route_name_dock_speakers;
+            } else if ((newRoutes.mainType & AudioRoutesInfo.MAIN_HDMI) != 0) {
+                name = com.android.internal.R.string.default_audio_route_name_hdmi;
+            } else if ((newRoutes.mainType & AudioRoutesInfo.MAIN_USB) != 0) {
+                name = com.android.internal.R.string.default_audio_route_name_usb;
+            }
         }
-
         mDefaultRoute = new MediaRoute2Info.Builder(
                 DEFAULT_ROUTE_ID, mContext.getResources().getText(name).toString())
                 .setVolumeHandling(mAudioManager.isVolumeFixed()
@@ -221,36 +194,47 @@
                 .setVolume(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC))
                 .addFeature(FEATURE_LIVE_AUDIO)
                 .addFeature(FEATURE_LIVE_VIDEO)
+                .setConnectionState(MediaRoute2Info.CONNECTION_STATE_CONNECTED)
                 .build();
+        updateProviderState();
+    }
 
-        publishRoutes();
+    private void updateProviderState() {
+        MediaRoute2ProviderInfo.Builder builder = new MediaRoute2ProviderInfo.Builder();
+        builder.addRoute(mDefaultRoute);
+        if (mBtRouteProvider != null) {
+            for (MediaRoute2Info route : mBtRouteProvider.getAllBluetoothRoutes()) {
+                builder.addRoute(route);
+            }
+        }
+        setProviderState(builder.build());
     }
 
     /**
      * Updates the mSessionInfo. Returns true if the session info is changed.
      */
     boolean updateSessionInfosIfNeededLocked() {
+        // Prevent to execute this method before mBtRouteProvider is created.
+        if (mBtRouteProvider == null) return false;
         RoutingSessionInfo oldSessionInfo = mSessionInfos.isEmpty() ? null : mSessionInfos.get(0);
 
         RoutingSessionInfo.Builder builder = new RoutingSessionInfo.Builder(
                 SYSTEM_SESSION_ID, "" /* clientPackageName */)
                 .setSystemSession(true);
-        String activeBtDeviceAddress = mBtRouteProvider.getActiveDeviceAddress();
 
-        if (!TextUtils.isEmpty(activeBtDeviceAddress)) {
-            // Bluetooth route. Set the route ID with the device's address.
-            builder.addSelectedRoute(activeBtDeviceAddress);
-            builder.addTransferrableRoute(mDefaultRoute.getId());
+        MediaRoute2Info selectedRoute = mBtRouteProvider.getSelectedRoute();
+        if (selectedRoute == null) {
+            selectedRoute = mDefaultRoute;
         } else {
-            // Default device
-            builder.addSelectedRoute(mDefaultRoute.getId());
+            builder.addTransferableRoute(mDefaultRoute.getId());
+        }
+        mSelectedRouteId = selectedRoute.getId();
+        builder.addSelectedRoute(mSelectedRouteId);
+
+        for (MediaRoute2Info route : mBtRouteProvider.getTransferableRoutes()) {
+            builder.addTransferableRoute(route.getId());
         }
 
-        for (MediaRoute2Info route : mBluetoothRoutes) {
-            if (!TextUtils.equals(activeBtDeviceAddress, route.getId())) {
-                builder.addTransferrableRoute(route.getId());
-            }
-        }
 
         RoutingSessionInfo newSessionInfo = builder.setProviderId(mUniqueId).build();
         if (Objects.equals(oldSessionInfo, newSessionInfo)) {
@@ -262,13 +246,9 @@
         }
     }
 
-    void publishRoutes() {
-        MediaRoute2ProviderInfo.Builder builder = new MediaRoute2ProviderInfo.Builder();
-        builder.addRoute(mDefaultRoute);
-        for (MediaRoute2Info route : mBluetoothRoutes) {
-            builder.addRoute(route);
-        }
-        setAndNotifyProviderState(builder.build());
+    void publishProviderState() {
+        updateProviderState();
+        notifyProviderState();
     }
 
     void notifySessionInfoUpdated() {
@@ -278,4 +258,34 @@
         }
         mCallback.onSessionUpdated(this, sessionInfo);
     }
+
+    private class VolumeChangeReceiver extends BroadcastReceiver {
+        // This will be called in the main thread.
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (!intent.getAction().equals(AudioManager.VOLUME_CHANGED_ACTION)) {
+                return;
+            }
+
+            final int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1);
+            if (streamType != AudioManager.STREAM_MUSIC) {
+                return;
+            }
+
+            final int newVolume = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_VALUE, 0);
+            final int oldVolume = intent.getIntExtra(
+                    AudioManager.EXTRA_PREV_VOLUME_STREAM_VALUE, 0);
+
+            if (newVolume != oldVolume) {
+                if (TextUtils.equals(mDefaultRoute.getId(), mSelectedRouteId)) {
+                    mDefaultRoute = new MediaRoute2Info.Builder(mDefaultRoute)
+                            .setVolume(newVolume)
+                            .build();
+                } else {
+                    mBtRouteProvider.setSelectedRouteVolume(newVolume);
+                }
+                publishProviderState();
+            }
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerInternal.java b/services/core/java/com/android/server/net/NetworkPolicyManagerInternal.java
index b24a938..563dcf7 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerInternal.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerInternal.java
@@ -130,7 +130,7 @@
             Set<String> packageNames, int userId);
 
     /**
-     *  Notifies that any of the {@link AbstractNetworkStatsProvider} has reached its quota
+     *  Notifies that the specified {@link AbstractNetworkStatsProvider} has reached its quota
      *  which was set through {@link AbstractNetworkStatsProvider#setLimit(String, long)}.
      *
      * @param tag the human readable identifier of the custom network stats provider.
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index bb954ab..aacb46e9 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -4588,13 +4588,13 @@
                     final long quota = ((long) msg.arg1 << 32) | (msg.arg2 & 0xFFFFFFFFL);
                     removeInterfaceQuota(iface);
                     setInterfaceQuota(iface, quota);
-                    mNetworkStats.setStatsProviderLimit(iface, quota);
+                    mNetworkStats.setStatsProviderLimitAsync(iface, quota);
                     return true;
                 }
                 case MSG_REMOVE_INTERFACE_QUOTA: {
                     final String iface = (String) msg.obj;
                     removeInterfaceQuota(iface);
-                    mNetworkStats.setStatsProviderLimit(iface, QUOTA_UNLIMITED);
+                    mNetworkStats.setStatsProviderLimitAsync(iface, QUOTA_UNLIMITED);
                     return true;
                 }
                 case MSG_RESET_FIREWALL_RULES_BY_UID: {
diff --git a/services/core/java/com/android/server/net/NetworkStatsManagerInternal.java b/services/core/java/com/android/server/net/NetworkStatsManagerInternal.java
index 6d72cb5..0cb0bc2c 100644
--- a/services/core/java/com/android/server/net/NetworkStatsManagerInternal.java
+++ b/services/core/java/com/android/server/net/NetworkStatsManagerInternal.java
@@ -40,5 +40,5 @@
      * Set the quota limit to all registered custom network stats providers.
      * Note that invocation of any interface will be sent to all providers.
      */
-    public abstract void setStatsProviderLimit(@NonNull String iface, long quota);
+    public abstract void setStatsProviderLimitAsync(@NonNull String iface, long quota);
 }
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index 1dcff07..ee5a4fe 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -155,6 +155,8 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Collect and persist detailed network statistics, and provide this data to
@@ -255,7 +257,6 @@
     }
 
     private final Object mStatsLock = new Object();
-    private final Object mStatsProviderLock = new Object();
 
     /** Set of currently active ifaces. */
     @GuardedBy("mStatsLock")
@@ -280,8 +281,11 @@
     private final DropBoxNonMonotonicObserver mNonMonotonicObserver =
             new DropBoxNonMonotonicObserver();
 
+    private static final int MAX_STATS_PROVIDER_POLL_WAIT_TIME_MS = 100;
     private final RemoteCallbackList<NetworkStatsProviderCallbackImpl> mStatsProviderCbList =
             new RemoteCallbackList<>();
+    /** Semaphore used to wait for stats provider to respond to request stats update. */
+    private final Semaphore mStatsProviderSem = new Semaphore(0, true);
 
     @GuardedBy("mStatsLock")
     private NetworkStatsRecorder mDevRecorder;
@@ -1249,7 +1253,7 @@
         final NetworkStats uidSnapshot = getNetworkStatsUidDetail(INTERFACES_ALL);
         Trace.traceEnd(TRACE_TAG_NETWORK);
         Trace.traceBegin(TRACE_TAG_NETWORK, "snapshotXt");
-        final NetworkStats xtSnapshot = getNetworkStatsXt();
+        final NetworkStats xtSnapshot = readNetworkStatsSummaryXt();
         Trace.traceEnd(TRACE_TAG_NETWORK);
         Trace.traceBegin(TRACE_TAG_NETWORK, "snapshotDev");
         final NetworkStats devSnapshot = readNetworkStatsSummaryDev();
@@ -1337,6 +1341,25 @@
         final boolean persistUid = (flags & FLAG_PERSIST_UID) != 0;
         final boolean persistForce = (flags & FLAG_PERSIST_FORCE) != 0;
 
+        // Request asynchronous stats update from all providers for next poll. And wait a bit of
+        // time to allow providers report-in given that normally binder call should be fast.
+        // TODO: request with a valid token.
+        Trace.traceBegin(TRACE_TAG_NETWORK, "provider.requestStatsUpdate");
+        final int registeredCallbackCount = mStatsProviderCbList.getRegisteredCallbackCount();
+        mStatsProviderSem.drainPermits();
+        invokeForAllStatsProviderCallbacks((cb) -> cb.mProvider.requestStatsUpdate(0 /* unused */));
+        try {
+            mStatsProviderSem.tryAcquire(registeredCallbackCount,
+                    MAX_STATS_PROVIDER_POLL_WAIT_TIME_MS, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException e) {
+            // Strictly speaking it's possible a provider happened to deliver between the timeout
+            // and the log, and that doesn't matter too much as this is just a debug log.
+            Log.d(TAG, "requestStatsUpdate - providers responded "
+                    + mStatsProviderSem.availablePermits()
+                    + "/" + registeredCallbackCount + " : " + e);
+        }
+        Trace.traceEnd(TRACE_TAG_NETWORK);
+
         // TODO: consider marking "untrusted" times in historical stats
         final long currentTime = mClock.millis();
 
@@ -1374,10 +1397,6 @@
             performSampleLocked();
         }
 
-        // request asynchronous stats update from all providers for next poll.
-        // TODO: request with a valid token.
-        invokeForAllStatsProviderCallbacks((cb) -> cb.mProvider.requestStatsUpdate(0 /* unused */));
-
         // finally, dispatch updated event to any listeners
         final Intent updatedIntent = new Intent(ACTION_NETWORK_STATS_UPDATED);
         updatedIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
@@ -1501,8 +1520,8 @@
         }
 
         @Override
-        public void setStatsProviderLimit(@NonNull String iface, long quota) {
-            Slog.v(TAG, "setStatsProviderLimit(" + iface + "," + quota + ")");
+        public void setStatsProviderLimitAsync(@NonNull String iface, long quota) {
+            Slog.v(TAG, "setStatsProviderLimitAsync(" + iface + "," + quota + ")");
             invokeForAllStatsProviderCallbacks((cb) -> cb.mProvider.setLimit(iface, quota));
         }
     }
@@ -1610,6 +1629,22 @@
             pw.decreaseIndent();
             pw.println();
 
+            pw.println("Stats Providers:");
+            pw.increaseIndent();
+            invokeForAllStatsProviderCallbacks((cb) -> {
+                pw.println(cb.mTag + " Xt:");
+                pw.increaseIndent();
+                pw.print(cb.getCachedStats(STATS_PER_IFACE).toString());
+                pw.decreaseIndent();
+                if (includeUid) {
+                    pw.println(cb.mTag + " Uid:");
+                    pw.increaseIndent();
+                    pw.print(cb.getCachedStats(STATS_PER_UID).toString());
+                    pw.decreaseIndent();
+                }
+            });
+            pw.decreaseIndent();
+
             pw.println("Dev stats:");
             pw.increaseIndent();
             mDevRecorder.dumpLocked(pw, fullHistory);
@@ -1707,18 +1742,6 @@
                 mUseBpfTrafficStats);
         uidSnapshot.combineAllValues(tetherSnapshot);
 
-        final TelephonyManager telephonyManager = (TelephonyManager) mContext.getSystemService(
-                Context.TELEPHONY_SERVICE);
-
-        // fold video calling data usage stats into uid snapshot
-        final NetworkStats vtStats = telephonyManager.getVtDataUsage(STATS_PER_UID);
-        if (vtStats != null) {
-            vtStats.filter(UID_ALL, ifaces, TAG_ALL);
-            mStatsFactory.apply464xlatAdjustments(uidSnapshot, vtStats,
-                    mUseBpfTrafficStats);
-            uidSnapshot.combineAllValues(vtStats);
-        }
-
         // get a stale copy of uid stats snapshot provided by providers.
         final NetworkStats providerStats = getNetworkStatsFromProviders(STATS_PER_UID);
         providerStats.filter(UID_ALL, ifaces, TAG_ALL);
@@ -1731,24 +1754,6 @@
     }
 
     /**
-     * Return snapshot of current XT statistics with video calling data usage statistics.
-     */
-    private NetworkStats getNetworkStatsXt() throws RemoteException {
-        final NetworkStats xtSnapshot = readNetworkStatsSummaryXt();
-
-        final TelephonyManager telephonyManager = (TelephonyManager) mContext.getSystemService(
-                Context.TELEPHONY_SERVICE);
-
-        // Merge video calling data usage into XT
-        final NetworkStats vtSnapshot = telephonyManager.getVtDataUsage(STATS_PER_IFACE);
-        if (vtSnapshot != null) {
-            xtSnapshot.combineAllValues(vtSnapshot);
-        }
-
-        return xtSnapshot;
-    }
-
-    /**
      * Return snapshot of current tethering statistics. Will return empty
      * {@link NetworkStats} if any problems are encountered.
      */
@@ -1767,9 +1772,9 @@
      * {@code unregister()} of the returned callback.
      *
      * @param tag a human readable identifier of the custom network stats provider.
-     * @param provider the binder interface of
-     *                 {@link android.net.netstats.provider.AbstractNetworkStatsProvider} that
-     *                 needs to be registered to the system.
+     * @param provider the {@link INetworkStatsProvider} binder corresponding to the
+     *                 {@link android.net.netstats.provider.AbstractNetworkStatsProvider} to be
+     *                 registered.
      *
      * @return a binder interface of
      *         {@link android.net.netstats.provider.NetworkStatsProviderCallback}, which can be
@@ -1782,7 +1787,8 @@
         Objects.requireNonNull(tag, "tag is null");
         try {
             NetworkStatsProviderCallbackImpl callback = new NetworkStatsProviderCallbackImpl(
-                            tag, provider, mAlertObserver, mStatsProviderCbList);
+                    tag, provider, mStatsProviderSem, mAlertObserver,
+                    mStatsProviderCbList);
             mStatsProviderCbList.register(callback);
             Log.d(TAG, "registerNetworkStatsProvider from " + callback.mTag + " uid/pid="
                     + getCallingUid() + "/" + getCallingPid());
@@ -1807,7 +1813,7 @@
 
     private void invokeForAllStatsProviderCallbacks(
             @NonNull ThrowingConsumer<NetworkStatsProviderCallbackImpl, RemoteException> task) {
-        synchronized (mStatsProviderCbList) {
+        synchronized (mStatsLock) {
             final int length = mStatsProviderCbList.beginBroadcast();
             try {
                 for (int i = 0; i < length; i++) {
@@ -1828,25 +1834,30 @@
     private static class NetworkStatsProviderCallbackImpl extends INetworkStatsProviderCallback.Stub
             implements IBinder.DeathRecipient {
         @NonNull final String mTag;
-        @NonNull private final Object mProviderStatsLock = new Object();
+
         @NonNull final INetworkStatsProvider mProvider;
+        @NonNull private final Semaphore mSemaphore;
         @NonNull final INetworkManagementEventObserver mAlertObserver;
         @NonNull final RemoteCallbackList<NetworkStatsProviderCallbackImpl> mStatsProviderCbList;
 
+        @NonNull private final Object mProviderStatsLock = new Object();
+
         @GuardedBy("mProviderStatsLock")
-        // STATS_PER_IFACE and STATS_PER_UID
+        // Track STATS_PER_IFACE and STATS_PER_UID separately.
         private final NetworkStats mIfaceStats = new NetworkStats(0L, 0);
         @GuardedBy("mProviderStatsLock")
         private final NetworkStats mUidStats = new NetworkStats(0L, 0);
 
         NetworkStatsProviderCallbackImpl(
                 @NonNull String tag, @NonNull INetworkStatsProvider provider,
+                @NonNull Semaphore semaphore,
                 @NonNull INetworkManagementEventObserver alertObserver,
                 @NonNull RemoteCallbackList<NetworkStatsProviderCallbackImpl> cbList)
                 throws RemoteException {
             mTag = tag;
             mProvider = provider;
             mProvider.asBinder().linkToDeath(this, 0);
+            mSemaphore = semaphore;
             mAlertObserver = alertObserver;
             mStatsProviderCbList = cbList;
         }
@@ -1865,7 +1876,8 @@
                     default:
                         throw new IllegalArgumentException("Invalid type: " + how);
                 }
-                // Return a defensive copy instead of local reference.
+                // Callers might be able to mutate the returned object. Return a defensive copy
+                // instead of local reference.
                 return stats.clone();
             }
         }
@@ -1879,6 +1891,7 @@
                 if (ifaceStats != null) mIfaceStats.combineAllValues(ifaceStats);
                 if (uidStats != null) mUidStats.combineAllValues(uidStats);
             }
+            mSemaphore.release();
         }
 
         @Override
diff --git a/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java b/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java
index e8cb163..dbaf824 100644
--- a/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java
+++ b/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java
@@ -170,6 +170,16 @@
         mFileWriteHandler.post(rpr);
     }
 
+    public void deleteNotificationHistoryItem(String pkg, long postedTime) {
+        RemoveNotificationRunnable rnr = new RemoveNotificationRunnable(pkg, postedTime);
+        mFileWriteHandler.post(rnr);
+    }
+
+    public void deleteConversation(String pkg, String conversationId) {
+        RemoveConversationRunnable rcr = new RemoveConversationRunnable(pkg, conversationId);
+        mFileWriteHandler.post(rcr);
+    }
+
     public void addNotification(final HistoricalNotification notification) {
         synchronized (mLock) {
             mBuffer.addNewNotificationToWrite(notification);
@@ -226,6 +236,9 @@
 
     public void disableHistory() {
         synchronized (mLock) {
+            for (AtomicFile file : mHistoryFiles) {
+                file.delete();
+            }
             mHistoryDir.delete();
             mHistoryFiles.clear();
         }
@@ -244,6 +257,10 @@
                 final AtomicFile currentOldestFile = mHistoryFiles.get(i);
                 final long creationTime =
                         mFileAttrProvider.getCreationTime(currentOldestFile.getBaseFile());
+                if (DEBUG) {
+                    Slog.d(TAG, "Pruning " + currentOldestFile.getBaseFile().getName()
+                            + " created on " + creationTime);
+                }
                 if (creationTime <= retentionBoundary.getTimeInMillis()) {
                     if (DEBUG) {
                         Slog.d(TAG, "Removed " + currentOldestFile.getBaseFile().getName());
@@ -367,6 +384,92 @@
         }
     }
 
+    final class RemoveNotificationRunnable implements Runnable {
+        private String mPkg;
+        private long mPostedTime;
+        private NotificationHistory mNotificationHistory;
+
+        public RemoveNotificationRunnable(String pkg, long postedTime) {
+            mPkg = pkg;
+            mPostedTime = postedTime;
+        }
+
+        @VisibleForTesting
+        void setNotificationHistory(NotificationHistory nh) {
+            mNotificationHistory = nh;
+        }
+
+        @Override
+        public void run() {
+            if (DEBUG) Slog.d(TAG, "RemoveNotificationRunnable");
+            synchronized (mLock) {
+                // Remove from pending history
+                mBuffer.removeNotificationFromWrite(mPkg, mPostedTime);
+
+                Iterator<AtomicFile> historyFileItr = mHistoryFiles.iterator();
+                while (historyFileItr.hasNext()) {
+                    final AtomicFile af = historyFileItr.next();
+                    try {
+                        NotificationHistory notificationHistory = mNotificationHistory != null
+                                ? mNotificationHistory
+                                : new NotificationHistory();
+                        readLocked(af, notificationHistory,
+                                new NotificationHistoryFilter.Builder().build());
+                        if(notificationHistory.removeNotificationFromWrite(mPkg, mPostedTime)) {
+                            writeLocked(af, notificationHistory);
+                        }
+                    } catch (Exception e) {
+                        Slog.e(TAG, "Cannot clean up file on notification removal "
+                                + af.getBaseFile().getName(), e);
+                    }
+                }
+            }
+        }
+    }
+
+    final class RemoveConversationRunnable implements Runnable {
+        private String mPkg;
+        private String mConversationId;
+        private NotificationHistory mNotificationHistory;
+
+        public RemoveConversationRunnable(String pkg, String conversationId) {
+            mPkg = pkg;
+            mConversationId = conversationId;
+        }
+
+        @VisibleForTesting
+        void setNotificationHistory(NotificationHistory nh) {
+            mNotificationHistory = nh;
+        }
+
+        @Override
+        public void run() {
+            if (DEBUG) Slog.d(TAG, "RemoveConversationRunnable");
+            synchronized (mLock) {
+                // Remove from pending history
+                mBuffer.removeConversationFromWrite(mPkg, mConversationId);
+
+                Iterator<AtomicFile> historyFileItr = mHistoryFiles.iterator();
+                while (historyFileItr.hasNext()) {
+                    final AtomicFile af = historyFileItr.next();
+                    try {
+                        NotificationHistory notificationHistory = mNotificationHistory != null
+                                ? mNotificationHistory
+                                : new NotificationHistory();
+                        readLocked(af, notificationHistory,
+                                new NotificationHistoryFilter.Builder().build());
+                        if(notificationHistory.removeConversationFromWrite(mPkg, mConversationId)) {
+                            writeLocked(af, notificationHistory);
+                        }
+                    } catch (Exception e) {
+                        Slog.e(TAG, "Cannot clean up file on conversation removal "
+                                + af.getBaseFile().getName(), e);
+                    }
+                }
+            }
+        }
+    }
+
     public static final class NotificationHistoryFileAttrProvider implements
             NotificationHistoryDatabase.FileAttrProvider {
         final static String TAG = "NotifHistoryFileDate";
diff --git a/services/core/java/com/android/server/notification/NotificationHistoryManager.java b/services/core/java/com/android/server/notification/NotificationHistoryManager.java
index 41bc29f..88e0dc6 100644
--- a/services/core/java/com/android/server/notification/NotificationHistoryManager.java
+++ b/services/core/java/com/android/server/notification/NotificationHistoryManager.java
@@ -130,7 +130,7 @@
         }
     }
 
-    public void onPackageRemoved(int userId, String packageName) {
+    public void onPackageRemoved(@UserIdInt int userId, String packageName) {
         synchronized (mLock) {
             if (!mUserUnlockedStates.get(userId, false)) {
                 if (mHistoryEnabled.get(userId, false)) {
@@ -150,6 +150,38 @@
         }
     }
 
+    public void deleteNotificationHistoryItem(String pkg, int uid, long postedTime) {
+        synchronized (mLock) {
+            int userId = UserHandle.getUserId(uid);
+            final NotificationHistoryDatabase userHistory =
+                    getUserHistoryAndInitializeIfNeededLocked(userId);
+            // TODO: it shouldn't be possible to delete a notification entry while the user is
+            // locked but we should handle it
+            if (userHistory == null) {
+                Slog.w(TAG, "Attempted to remove notif for locked/gone/disabled user "
+                        + userId);
+                return;
+            }
+            userHistory.deleteNotificationHistoryItem(pkg, postedTime);
+        }
+    }
+
+    public void deleteConversation(String pkg, int uid, String conversationId) {
+        synchronized (mLock) {
+            int userId = UserHandle.getUserId(uid);
+            final NotificationHistoryDatabase userHistory =
+                    getUserHistoryAndInitializeIfNeededLocked(userId);
+            // TODO: it shouldn't be possible to delete a notification entry while the user is
+            // locked but we should handle it
+            if (userHistory == null) {
+                Slog.w(TAG, "Attempted to remove conversation for locked/gone/disabled user "
+                        + userId);
+                return;
+            }
+            userHistory.deleteConversation(pkg, conversationId);
+        }
+    }
+
     // TODO: wire this up to AMS when power button is long pressed
     public void triggerWriteToDisk() {
         synchronized (mLock) {
diff --git a/services/core/java/com/android/server/notification/NotificationHistoryProtoHelper.java b/services/core/java/com/android/server/notification/NotificationHistoryProtoHelper.java
index 2831d37..7ba993b 100644
--- a/services/core/java/com/android/server/notification/NotificationHistoryProtoHelper.java
+++ b/services/core/java/com/android/server/notification/NotificationHistoryProtoHelper.java
@@ -19,6 +19,7 @@
 import android.app.NotificationHistory.HistoricalNotification;
 import android.content.res.Resources;
 import android.graphics.drawable.Icon;
+import android.text.TextUtils;
 import android.util.Slog;
 import android.util.proto.ProtoInputStream;
 import android.util.proto.ProtoOutputStream;
@@ -141,6 +142,16 @@
                     loadIcon(parser, notification, pkg);
                     parser.end(iconToken);
                     break;
+                case (int) Notification.CONVERSATION_ID_INDEX:
+                    String conversationId =
+                            stringPool.get(parser.readInt(Notification.CONVERSATION_ID_INDEX) - 1);
+                    notification.setConversationId(conversationId);
+                    break;
+                case (int) Notification.CONVERSATION_ID:
+                    conversationId = parser.readString(Notification.CONVERSATION_ID);
+                    notification.setConversationId(conversationId);
+                    stringPool.add(conversationId);
+                    break;
                 case ProtoInputStream.NO_MORE_FIELDS:
                     return notification.build();
             }
@@ -271,6 +282,17 @@
                     + ") not found in string cache");
             proto.write(Notification.CHANNEL_ID, notification.getChannelId());
         }
+        if (!TextUtils.isEmpty(notification.getConversationId())) {
+            final int conversationIdIndex = Arrays.binarySearch(
+                    stringPool, notification.getConversationId());
+            if (conversationIdIndex >= 0) {
+                proto.write(Notification.CONVERSATION_ID_INDEX, conversationIdIndex + 1);
+            } else {
+                Slog.w(TAG, "notification conversation id (" + notification.getConversationId()
+                        + ") not found in string cache");
+                proto.write(Notification.CONVERSATION_ID, notification.getConversationId());
+            }
+        }
         proto.write(Notification.UID, notification.getUid());
         proto.write(Notification.USER_ID, notification.getUserId());
         proto.write(Notification.POSTED_TIME_MS, notification.getPostedTimeMs());
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index f071135..0d402e5 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -94,6 +94,9 @@
 
 import static com.android.internal.util.FrameworkStatsLog.BUBBLE_DEVELOPER_ERROR_REPORTED__ERROR__ACTIVITY_INFO_MISSING;
 import static com.android.internal.util.FrameworkStatsLog.BUBBLE_DEVELOPER_ERROR_REPORTED__ERROR__ACTIVITY_INFO_NOT_RESIZABLE;
+import static com.android.internal.util.FrameworkStatsLog.PACKAGE_NOTIFICATION_CHANNEL_GROUP_PREFERENCES;
+import static com.android.internal.util.FrameworkStatsLog.PACKAGE_NOTIFICATION_CHANNEL_PREFERENCES;
+import static com.android.internal.util.FrameworkStatsLog.PACKAGE_NOTIFICATION_PREFERENCES;
 import static com.android.server.am.PendingIntentRecord.FLAG_ACTIVITY_SENDER;
 import static com.android.server.am.PendingIntentRecord.FLAG_BROADCAST_SENDER;
 import static com.android.server.am.PendingIntentRecord.FLAG_SERVICE_SENDER;
@@ -129,6 +132,7 @@
 import android.app.PendingIntent;
 import android.app.Person;
 import android.app.RemoteInput;
+import android.app.StatsManager;
 import android.app.StatusBarManager;
 import android.app.UriGrantsManager;
 import android.app.admin.DeviceAdminInfo;
@@ -185,6 +189,7 @@
 import android.os.ShellCallback;
 import android.os.SystemClock;
 import android.os.SystemProperties;
+import android.os.Trace;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.os.VibrationEffect;
@@ -193,6 +198,7 @@
 import android.provider.Settings;
 import android.service.notification.Adjustment;
 import android.service.notification.Condition;
+import android.service.notification.ConversationChannelWrapper;
 import android.service.notification.IConditionProvider;
 import android.service.notification.INotificationListener;
 import android.service.notification.IStatusBarNotificationHolder;
@@ -219,6 +225,7 @@
 import android.util.Pair;
 import android.util.Slog;
 import android.util.SparseArray;
+import android.util.StatsEvent;
 import android.util.Xml;
 import android.util.proto.ProtoOutputStream;
 import android.view.accessibility.AccessibilityEvent;
@@ -472,6 +479,8 @@
     private AppOpsManager mAppOps;
     private UsageStatsManagerInternal mAppUsageStats;
     private DevicePolicyManagerInternal mDpm;
+    private StatsManager mStatsManager;
+    private StatsPullAtomCallbackImpl mPullAtomCallback;
 
     private Archive mArchive;
 
@@ -526,11 +535,11 @@
 
     private static class Archive {
         final int mBufferSize;
-        final ArrayDeque<StatusBarNotification> mBuffer;
+        final ArrayDeque<Pair<StatusBarNotification, Integer>> mBuffer;
 
         public Archive(int size) {
             mBufferSize = size;
-            mBuffer = new ArrayDeque<StatusBarNotification>(mBufferSize);
+            mBuffer = new ArrayDeque<>(mBufferSize);
         }
 
         public String toString() {
@@ -543,7 +552,7 @@
             return sb.toString();
         }
 
-        public void record(StatusBarNotification nr) {
+        public void record(StatusBarNotification nr, int reason) {
             if (mBuffer.size() == mBufferSize) {
                 mBuffer.removeFirst();
             }
@@ -551,21 +560,24 @@
             // We don't want to store the heavy bits of the notification in the archive,
             // but other clients in the system process might be using the object, so we
             // store a (lightened) copy.
-            mBuffer.addLast(nr.cloneLight());
+            mBuffer.addLast(new Pair<>(nr.cloneLight(), reason));
         }
 
-        public Iterator<StatusBarNotification> descendingIterator() {
+        public Iterator<Pair<StatusBarNotification, Integer>> descendingIterator() {
             return mBuffer.descendingIterator();
         }
 
-        public StatusBarNotification[] getArray(int count) {
+        public StatusBarNotification[] getArray(int count, boolean includeSnoozed) {
             if (count == 0) count = mBufferSize;
             final StatusBarNotification[] a
                     = new StatusBarNotification[Math.min(count, mBuffer.size())];
-            Iterator<StatusBarNotification> iter = descendingIterator();
+            Iterator<Pair<StatusBarNotification, Integer>> iter = descendingIterator();
             int i=0;
             while (iter.hasNext() && i < count) {
-                a[i++] = iter.next();
+                Pair<StatusBarNotification, Integer> pair = iter.next();
+                if (pair.second != REASON_SNOOZED || includeSnoozed) {
+                    a[i++] = pair.first;
+                }
             }
             return a;
         }
@@ -920,7 +932,7 @@
                 StatusBarNotification sbn = r.getSbn();
                 cancelNotification(callingUid, callingPid, sbn.getPackageName(), sbn.getTag(),
                         sbn.getId(), Notification.FLAG_AUTO_CANCEL,
-                        FLAG_FOREGROUND_SERVICE, false, r.getUserId(),
+                        FLAG_FOREGROUND_SERVICE | FLAG_BUBBLE, false, r.getUserId(),
                         REASON_CLICK, nv.rank, nv.count, null);
                 nv.recycle();
                 reportUserInteraction(r);
@@ -1043,7 +1055,7 @@
                         if (DBG) Slog.d(TAG, "Marking notification as visible " + nv.key);
                         reportSeen(r);
                     }
-                    r.setVisibility(true, nv.rank, nv.count);
+                    r.setVisibility(true, nv.rank, nv.count, mNotificationRecordLogger);
                     mAssistants.notifyAssistantVisibilityChangedLocked(r.getSbn(), true);
                     boolean isHun = (nv.location
                             == NotificationVisibility.NotificationLocation.LOCATION_FIRST_HEADS_UP);
@@ -1062,7 +1074,7 @@
                 for (NotificationVisibility nv : noLongerVisibleKeys) {
                     NotificationRecord r = mNotificationsByKey.get(nv.key);
                     if (r == null) continue;
-                    r.setVisibility(false, nv.rank, nv.count);
+                    r.setVisibility(false, nv.rank, nv.count, mNotificationRecordLogger);
                     mAssistants.notifyAssistantVisibilityChangedLocked(r.getSbn(), false);
                     nv.recycle();
                 }
@@ -1889,7 +1901,8 @@
             ActivityManager activityManager, GroupHelper groupHelper, IActivityManager am,
             UsageStatsManagerInternal appUsageStats, DevicePolicyManagerInternal dpm,
             IUriGrantsManager ugm, UriGrantsManagerInternal ugmInternal, AppOpsManager appOps,
-            UserManager userManager, NotificationHistoryManager historyManager) {
+            UserManager userManager, NotificationHistoryManager historyManager,
+            StatsManager statsManager) {
         mHandler = handler;
         Resources resources = getContext().getResources();
         mMaxPackageEnqueueRate = Settings.Global.getFloat(getContext().getContentResolver(),
@@ -2049,6 +2062,7 @@
         mStripRemoteViewsSizeBytes = getContext().getResources().getInteger(
                 com.android.internal.R.integer.config_notificationStripRemoteViewSizeBytes);
 
+        mStatsManager = statsManager;
     }
 
     @Override
@@ -2092,7 +2106,9 @@
                 LocalServices.getService(UriGrantsManagerInternal.class),
                 (AppOpsManager) getContext().getSystemService(Context.APP_OPS_SERVICE),
                 getContext().getSystemService(UserManager.class),
-                new NotificationHistoryManager(getContext(), handler));
+                new NotificationHistoryManager(getContext(), handler),
+                mStatsManager = (StatsManager) getContext().getSystemService(
+                        Context.STATS_MANAGER));
 
         // register for various Intents
         IntentFilter filter = new IntentFilter();
@@ -2167,6 +2183,57 @@
         }
     }
 
+    private void registerNotificationPreferencesPullers() {
+        mPullAtomCallback = new StatsPullAtomCallbackImpl();
+        mStatsManager.registerPullAtomCallback(
+                PACKAGE_NOTIFICATION_PREFERENCES,
+                null, // use default PullAtomMetadata values
+                BackgroundThread.getExecutor(),
+                mPullAtomCallback
+        );
+        mStatsManager.registerPullAtomCallback(
+                PACKAGE_NOTIFICATION_CHANNEL_PREFERENCES,
+                null, // use default PullAtomMetadata values
+                BackgroundThread.getExecutor(),
+                mPullAtomCallback
+        );
+        mStatsManager.registerPullAtomCallback(
+                PACKAGE_NOTIFICATION_CHANNEL_GROUP_PREFERENCES,
+                null, // use default PullAtomMetadata values
+                BackgroundThread.getExecutor(),
+                mPullAtomCallback
+        );
+    }
+
+    private class StatsPullAtomCallbackImpl implements StatsManager.StatsPullAtomCallback {
+        @Override
+        public int onPullAtom(int atomTag, List<StatsEvent> data) {
+            switch (atomTag) {
+                case PACKAGE_NOTIFICATION_PREFERENCES:
+                case PACKAGE_NOTIFICATION_CHANNEL_PREFERENCES:
+                case PACKAGE_NOTIFICATION_CHANNEL_GROUP_PREFERENCES:
+                    return pullNotificationStates(atomTag, data);
+                default:
+                    throw new UnsupportedOperationException("Unknown tagId=" + atomTag);
+            }
+        }
+    }
+
+    private int pullNotificationStates(int atomTag, List<StatsEvent> data) {
+        switch(atomTag) {
+            case PACKAGE_NOTIFICATION_PREFERENCES:
+                mPreferencesHelper.pullPackagePreferencesStats(data);
+                break;
+            case PACKAGE_NOTIFICATION_CHANNEL_PREFERENCES:
+                mPreferencesHelper.pullPackageChannelPreferencesStats(data);
+                break;
+            case PACKAGE_NOTIFICATION_CHANNEL_GROUP_PREFERENCES:
+                mPreferencesHelper.pullPackageChannelGroupPreferencesStats(data);
+                break;
+        }
+        return StatsManager.PULL_SUCCESS;
+    }
+
     private GroupHelper getGroupHelper() {
         mAutoGroupAtCount =
                 getContext().getResources().getInteger(R.integer.config_autoGroupAtCount);
@@ -2245,6 +2312,7 @@
             mRoleObserver.init();
             mLauncherAppsService =
                     (LauncherApps) getContext().getSystemService(Context.LAUNCHER_APPS_SERVICE);
+            registerNotificationPreferencesPullers();
         } else if (phase == SystemService.PHASE_THIRD_PARTY_APPS_CAN_START) {
             // This observer will force an update when observe is called, causing us to
             // bind to listener services.
@@ -2259,12 +2327,26 @@
 
     @Override
     public void onUnlockUser(@NonNull UserInfo userInfo) {
-        mHandler.post(() -> mHistoryManager.onUserUnlocked(userInfo.id));
+        mHandler.post(() -> {
+            Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "notifHistoryUnlockUser");
+            try {
+                mHistoryManager.onUserUnlocked(userInfo.id);
+            } finally {
+                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+            }
+        });
     }
 
     @Override
     public void onStopUser(@NonNull UserInfo userInfo) {
-        mHandler.post(() -> mHistoryManager.onUserStopped(userInfo.id));
+        mHandler.post(() -> {
+            Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "notifHistoryStopUser");
+            try {
+                mHistoryManager.onUserStopped(userInfo.id);
+            } finally {
+                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+            }
+        });
     }
 
     @GuardedBy("mNotificationLock")
@@ -2591,17 +2673,22 @@
             mAppUsageStats.reportInterruptiveNotification(r.getSbn().getPackageName(),
                     r.getChannel().getId(),
                     getRealUserId(r.getSbn().getUserId()));
-            mHistoryManager.addNotification(new HistoricalNotification.Builder()
-                    .setPackage(r.getSbn().getPackageName())
-                    .setUid(r.getSbn().getUid())
-                    .setChannelId(r.getChannel().getId())
-                    .setChannelName(r.getChannel().getName().toString())
-                    .setPostedTimeMs(System.currentTimeMillis())
-                    .setTitle(getHistoryTitle(r.getNotification()))
-                    .setText(getHistoryText(
-                            r.getSbn().getPackageContext(getContext()), r.getNotification()))
-                    .setIcon(r.getNotification().getSmallIcon())
-                    .build());
+            Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "notifHistoryAddItem");
+            try {
+                mHistoryManager.addNotification(new HistoricalNotification.Builder()
+                        .setPackage(r.getSbn().getPackageName())
+                        .setUid(r.getSbn().getUid())
+                        .setChannelId(r.getChannel().getId())
+                        .setChannelName(r.getChannel().getName().toString())
+                        .setPostedTimeMs(System.currentTimeMillis())
+                        .setTitle(getHistoryTitle(r.getNotification()))
+                        .setText(getHistoryText(
+                                r.getSbn().getPackageContext(getContext()), r.getNotification()))
+                        .setIcon(r.getNotification().getSmallIcon())
+                        .build());
+            } finally {
+                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+            }
             r.setRecordedInterruption(true);
         }
     }
@@ -2780,7 +2867,7 @@
                         if (!isSystemToast) {
                             int count = 0;
                             final int N = mToastQueue.size();
-                            for (int i=0; i<N; i++) {
+                            for (int i = 0; i < N; i++) {
                                 final ToastRecord r = mToastQueue.get(i);
                                 if (r.pkg.equals(pkg)) {
                                     count++;
@@ -2820,7 +2907,7 @@
 
             if (pkg == null || token == null) {
                 Slog.e(TAG, "Not cancelling notification. pkg=" + pkg + " token=" + token);
-                return ;
+                return;
             }
 
             synchronized (mToastQueue) {
@@ -2933,14 +3020,14 @@
 
         /**
          * Updates the enabled state for notifications for the given package (and uid).
-         * Additionally, this method marks the app importance as locked by the user, which means
+         * Additionally, this method marks the app importance as locked by the user, which
+         * means
          * that notifications from the app will <b>not</b> be considered for showing a
          * blocking helper.
          *
-         * @param pkg package that owns the notifications to update
-         * @param uid uid of the app providing notifications
+         * @param pkg     package that owns the notifications to update
+         * @param uid     uid of the app providing notifications
          * @param enabled whether notifications should be enabled for the app
-         *
          * @see #setNotificationsEnabledForPackage(String, int, boolean)
          */
         @Override
@@ -3031,6 +3118,12 @@
         }
 
         @Override
+        public void deleteNotificationHistoryItem(String pkg, int uid, long postedTime) {
+            checkCallerIsSystem();
+            mHistoryManager.deleteNotificationHistoryItem(pkg, uid, postedTime);
+        }
+
+        @Override
         public int getPackageImportance(String pkg) {
             checkCallerIsSystemOrSameApp(pkg);
             return mPreferencesHelper.getImportance(pkg, Binder.getCallingUid());
@@ -3215,9 +3308,10 @@
 
         @Override
         public NotificationChannel getNotificationChannelForPackage(String pkg, int uid,
-                String channelId, boolean includeDeleted) {
+                String channelId, String conversationId, boolean includeDeleted) {
             checkCallerIsSystem();
-            return mPreferencesHelper.getNotificationChannel(pkg, uid, channelId, includeDeleted);
+            return mPreferencesHelper.getConversationNotificationChannel(
+                    pkg, uid, channelId, conversationId, true, includeDeleted);
         }
 
         @Override
@@ -3346,6 +3440,27 @@
         }
 
         @Override
+        public ParceledListSlice<ConversationChannelWrapper> getConversations(
+                boolean onlyImportant) {
+            enforceSystemOrSystemUI("getConversations");
+            ArrayList<ConversationChannelWrapper> conversations =
+                    mPreferencesHelper.getConversations(onlyImportant);
+            for (ConversationChannelWrapper conversation : conversations) {
+                LauncherApps.ShortcutQuery query = new LauncherApps.ShortcutQuery()
+                        .setPackage(conversation.getPkg())
+                        .setQueryFlags(FLAG_MATCH_DYNAMIC | FLAG_MATCH_PINNED)
+                        .setShortcutIds(Arrays.asList(
+                                conversation.getNotificationChannel().getConversationId()));
+                List<ShortcutInfo> shortcuts = mLauncherAppsService.getShortcuts(
+                        query, UserHandle.of(UserHandle.getUserId(conversation.getUid())));
+                if (shortcuts != null && !shortcuts.isEmpty()) {
+                    conversation.setShortcutInfo(shortcuts.get(0));
+                }
+            }
+            return new ParceledListSlice<>(conversations);
+        }
+
+        @Override
         public ParceledListSlice<NotificationChannelGroup> getNotificationChannelGroupsForPackage(
                 String pkg, int uid, boolean includeDeleted) {
             enforceSystemOrSystemUI("getNotificationChannelGroupsForPackage");
@@ -3354,6 +3469,27 @@
         }
 
         @Override
+        public ParceledListSlice<ConversationChannelWrapper> getConversationsForPackage(String pkg,
+                int uid) {
+            enforceSystemOrSystemUI("getConversationsForPackage");
+            ArrayList<ConversationChannelWrapper> conversations =
+                    mPreferencesHelper.getConversations(pkg, uid);
+            for (ConversationChannelWrapper conversation : conversations) {
+                LauncherApps.ShortcutQuery query = new LauncherApps.ShortcutQuery()
+                        .setPackage(pkg)
+                        .setQueryFlags(FLAG_MATCH_DYNAMIC | FLAG_MATCH_PINNED)
+                        .setShortcutIds(Arrays.asList(
+                                conversation.getNotificationChannel().getConversationId()));
+                List<ShortcutInfo> shortcuts = mLauncherAppsService.getShortcuts(
+                        query, UserHandle.of(UserHandle.getUserId(uid)));
+                if (shortcuts != null && !shortcuts.isEmpty()) {
+                    conversation.setShortcutInfo(shortcuts.get(0));
+                }
+            }
+            return new ParceledListSlice<>(conversations);
+        }
+
+        @Override
         public NotificationChannelGroup getPopulatedNotificationChannelGroupForPackage(
                 String pkg, int uid, String groupId, boolean includeDeleted) {
             enforceSystemOrSystemUI("getPopulatedNotificationChannelGroupForPackage");
@@ -3609,7 +3745,8 @@
          */
         @Override
         @RequiresPermission(android.Manifest.permission.ACCESS_NOTIFICATIONS)
-        public StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count) {
+        public StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count,
+                boolean includeSnoozed) {
             // enforce() will ensure the calling uid has the correct permission
             getContext().enforceCallingOrSelfPermission(
                     android.Manifest.permission.ACCESS_NOTIFICATIONS,
@@ -3622,7 +3759,7 @@
             if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg)
                     == AppOpsManager.MODE_ALLOWED) {
                 synchronized (mArchive) {
-                    tmp = mArchive.getArray(count);
+                    tmp = mArchive.getArray(count, includeSnoozed);
                 }
             }
             return tmp;
@@ -3646,7 +3783,12 @@
             if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg)
                     == AppOpsManager.MODE_ALLOWED) {
                 IntArray currentUserIds = mUserProfiles.getCurrentProfileIds();
-                return mHistoryManager.readNotificationHistory(currentUserIds.toArray());
+                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "notifHistoryReadHistory");
+                try {
+                    return mHistoryManager.readNotificationHistory(currentUserIds.toArray());
+                } finally {
+                    Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+                }
             }
             return new NotificationHistory();
         }
@@ -3858,6 +4000,29 @@
         }
 
         /**
+         * Allows the notification assistant to un-snooze a single notification.
+         *
+         * @param token The binder for the listener, to check that the caller is allowed
+         */
+        @Override
+        public void unsnoozeNotificationFromSystemListener(INotificationListener token,
+                String key) {
+            long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mNotificationLock) {
+                    final ManagedServiceInfo info =
+                            mListeners.checkServiceTokenLocked(token);
+                    if (!info.isSystem) {
+                        throw new SecurityException("Not allowed to unsnooze before deadline");
+                    }
+                    unsnoozeNotificationInt(key, info);
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        /**
          * Allow an INotificationListener to simulate clearing (dismissing) a single notification.
          *
          * {@see com.android.server.StatusBarManagerService.NotificationCallbacks#onNotificationClear}
@@ -5170,10 +5335,10 @@
                     pw.println("  mMaxPackageEnqueueRate=" + mMaxPackageEnqueueRate);
                 }
                 pw.println("  mArchive=" + mArchive.toString());
-                Iterator<StatusBarNotification> iter = mArchive.descendingIterator();
+                Iterator<Pair<StatusBarNotification, Integer>> iter = mArchive.descendingIterator();
                 int j=0;
                 while (iter.hasNext()) {
-                    final StatusBarNotification sbn = iter.next();
+                    final StatusBarNotification sbn = iter.next().first;
                     if (filter != null && !filter.matches(sbn)) continue;
                     pw.println("    " + sbn);
                     if (++j >= 5) {
@@ -5511,6 +5676,22 @@
         mHandler.post(new EnqueueNotificationRunnable(userId, r, isAppForeground));
     }
 
+    public void onConversationRemoved(String pkg, int uid, String conversationId) {
+        checkCallerIsSystem();
+        Preconditions.checkStringNotEmpty(pkg);
+        Preconditions.checkStringNotEmpty(conversationId);
+
+        mHistoryManager.deleteConversation(pkg, uid, conversationId);
+        List<String> deletedChannelIds =
+                mPreferencesHelper.deleteConversation(pkg, uid, conversationId);
+        for (String channelId : deletedChannelIds) {
+            cancelAllNotificationsInt(MY_UID, MY_PID, pkg, channelId, 0, 0, true,
+                    UserHandle.getUserId(uid), REASON_CHANNEL_BANNED,
+                    null);
+        }
+        handleSavePolicyFile();
+    }
+
     @VisibleForTesting
     protected void fixNotification(Notification notification, String pkg, String tag, int id,
             int userId) throws NameNotFoundException {
@@ -6099,6 +6280,7 @@
         private final int mRank;
         private final int mCount;
         private final ManagedServiceInfo mListener;
+        private final long mWhen;
 
         CancelNotificationRunnable(final int callingUid, final int callingPid,
                 final String pkg, final String tag, final int id,
@@ -6118,6 +6300,7 @@
             this.mRank = rank;
             this.mCount = count;
             this.mListener = listener;
+            this.mWhen = System.currentTimeMillis();
         }
 
         @Override
@@ -6129,13 +6312,28 @@
             }
 
             synchronized (mNotificationLock) {
-                // If the notification is currently enqueued, repost this runnable so it has a
-                // chance to notify listeners
-                if ((findNotificationByListLocked(mEnqueuedNotifications, mPkg, mTag, mId, mUserId))
-                        != null) {
+                // Check to see if there is a notification in the enqueued list that hasn't had a
+                // chance to post yet.
+                List<NotificationRecord> enqueued = findEnqueuedNotificationsForCriteria(
+                        mPkg, mTag, mId, mUserId);
+                boolean repost = false;
+                if (enqueued.size() > 0) {
+                    // Found something, let's see what it was
+                    repost = true;
+                    // If all enqueues happened before this cancel then wait for them to happen,
+                    // otherwise we should let this cancel through so the next enqueue happens
+                    for (NotificationRecord r : enqueued) {
+                        if (r.mUpdateTimeMs > mWhen) {
+                            // At least one enqueue was posted after the cancel, so we're invalid
+                            return;
+                        }
+                    }
+                }
+                if (repost) {
                     mHandler.post(this);
                     return;
                 }
+
                 // Look for the notification in the posted list, since we already checked enqueued.
                 NotificationRecord r =
                         findNotificationByListLocked(mNotificationList, mPkg, mTag, mId, mUserId);
@@ -6154,6 +6352,10 @@
                     if ((r.getNotification().flags & mMustNotHaveFlags) != 0) {
                         return;
                     }
+                    if (r.getUpdateTimeMs() > mWhen) {
+                        // In this case, a post must have slipped by when this runnable reposted
+                        return;
+                    }
 
                     // Bubbled children get to stick around if the summary was manually cancelled
                     // (user removed) from systemui.
@@ -6347,7 +6549,7 @@
                         mUsageStats.registerPostedByApp(r);
                         r.setInterruptive(isVisuallyInterruptive(null, r));
                     } else {
-                        old = mNotificationList.get(index);
+                        old = mNotificationList.get(index);  // Potentially *changes* old
                         mNotificationList.set(index, r);
                         mUsageStats.registerUpdatedByApp(r, old);
                         // Make sure we don't lose the foreground service state.
@@ -6416,7 +6618,7 @@
                     maybeRecordInterruptionLocked(r);
 
                     // Log event to statsd
-                    mNotificationRecordLogger.logNotificationReported(r, old, position,
+                    mNotificationRecordLogger.maybeLogNotificationPosted(r, old, position,
                             buzzBeepBlinkLoggingCode);
                 } finally {
                     int N = mEnqueuedNotifications.size();
@@ -7434,13 +7636,15 @@
     }
 
     @GuardedBy("mNotificationLock")
-    private void cancelNotificationLocked(NotificationRecord r, boolean sendDelete, int reason,
+    private void cancelNotificationLocked(NotificationRecord r, boolean sendDelete,
+            @NotificationListenerService.NotificationCancelReason int reason,
             boolean wasPosted, String listenerName) {
         cancelNotificationLocked(r, sendDelete, reason, -1, -1, wasPosted, listenerName);
     }
 
     @GuardedBy("mNotificationLock")
-    private void cancelNotificationLocked(NotificationRecord r, boolean sendDelete, int reason,
+    private void cancelNotificationLocked(NotificationRecord r, boolean sendDelete,
+            @NotificationListenerService.NotificationCancelReason int reason,
             int rank, int count, boolean wasPosted, String listenerName) {
         final String canceledKey = r.getKey();
 
@@ -7544,7 +7748,7 @@
         }
 
         // Save it for users of getHistoricalNotifications()
-        mArchive.record(r.getSbn());
+        mArchive.record(r.getSbn(), reason);
 
         final long now = System.currentTimeMillis();
         final LogMaker logMaker = r.getItemLogMaker()
@@ -7558,6 +7762,10 @@
         EventLogTags.writeNotificationCanceled(canceledKey, reason,
                 r.getLifespanMs(now), r.getFreshnessMs(now), r.getExposureMs(now),
                 rank, count, listenerName);
+        if (wasPosted) {
+            mNotificationRecordLogger.logNotificationCancelled(r, reason,
+                    r.getStats().getDismissalSurface());
+        }
     }
 
     @VisibleForTesting
@@ -7859,7 +8067,8 @@
 
                     FlagChecker flagChecker = (int flags) -> {
                         int flagsToCheck = FLAG_ONGOING_EVENT | FLAG_NO_CLEAR;
-                        if (REASON_LISTENER_CANCEL_ALL == reason) {
+                        if (REASON_LISTENER_CANCEL_ALL == reason
+                                || REASON_CANCEL_ALL == reason) {
                             flagsToCheck |= FLAG_BUBBLE;
                         }
                         if ((flags & flagsToCheck) != 0) {
@@ -8069,6 +8278,29 @@
         return null;
     }
 
+    /**
+     * There may be multiple records that match your criteria. For instance if there have been
+     * multiple notifications posted which are enqueued for the same pkg, tag, id, userId. This
+     * method will find all of them in the given list
+     * @return
+     */
+    @GuardedBy("mNotificationLock")
+    private List<NotificationRecord> findEnqueuedNotificationsForCriteria(
+            String pkg, String tag, int id, int userId) {
+        final ArrayList<NotificationRecord> records = new ArrayList<>();
+        final int n = mEnqueuedNotifications.size();
+        for (int i = 0; i < n; i++) {
+            NotificationRecord r = mEnqueuedNotifications.get(i);
+            if (notificationMatchesUserId(r, userId)
+                    && r.getSbn().getId() == id
+                    && TextUtils.equals(r.getSbn().getTag(), tag)
+                    && r.getSbn().getPackageName().equals(pkg)) {
+                records.add(r);
+            }
+        }
+        return records;
+    }
+
     @GuardedBy("mNotificationLock")
     int indexOfNotificationLocked(String key) {
         final int N = mNotificationList.size();
@@ -8398,21 +8630,11 @@
 
     @VisibleForTesting
     boolean canUseManagedServices(String pkg, Integer userId, String requiredPermission) {
-        boolean canUseManagedServices = !mActivityManager.isLowRamDevice()
-                || mPackageManagerClient.hasSystemFeature(PackageManager.FEATURE_WATCH);
-
-        for (String whitelisted : getContext().getResources().getStringArray(
-                R.array.config_allowedManagedServicesOnLowRamDevices)) {
-            if (whitelisted.equals(pkg)) {
-                canUseManagedServices = true;
-                break;
-            }
-        }
-
+        boolean canUseManagedServices = true;
         if (requiredPermission != null) {
             try {
                 if (mPackageManager.checkPermission(requiredPermission, pkg, userId)
-                    != PackageManager.PERMISSION_GRANTED) {
+                        != PackageManager.PERMISSION_GRANTED) {
                     canUseManagedServices = false;
                 }
             } catch (RemoteException e) {
@@ -8701,7 +8923,9 @@
                 final StatusBarNotification sbn,
                 final boolean isVisible) {
             final String key = sbn.getKey();
-            Slog.d(TAG, "notifyAssistantVisibilityChangedLocked: " + key);
+            if (DBG) {
+                Slog.d(TAG, "notifyAssistantVisibilityChangedLocked: " + key);
+            }
             notifyAssistantLocked(
                     sbn,
                     false /* sameUserOnly */,
@@ -9256,7 +9480,7 @@
                 }
 
                 BackgroundThread.getHandler().post(() -> {
-                    if (hasCompanionDevice(serviceInfo)) {
+                    if (serviceInfo.isSystem || hasCompanionDevice(serviceInfo)) {
                         notifyNotificationChannelChanged(
                                 serviceInfo, pkg, user, channel, modificationType);
                     }
@@ -9276,7 +9500,7 @@
                 }
 
                 BackgroundThread.getHandler().post(() -> {
-                    if (hasCompanionDevice(serviceInfo)) {
+                    if (serviceInfo.isSystem || hasCompanionDevice(serviceInfo)) {
                         notifyNotificationChannelGroupChanged(
                                 serviceInfo, pkg, user, group, modificationType);
                     }
diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java
index 4785da9..f92e1fc 100644
--- a/services/core/java/com/android/server/notification/NotificationRecord.java
+++ b/services/core/java/com/android/server/notification/NotificationRecord.java
@@ -906,10 +906,15 @@
         return (int) (now - mInterruptionTimeMs);
     }
 
+    public long getUpdateTimeMs() {
+        return mUpdateTimeMs;
+    }
+
     /**
      * Set the visibility of the notification.
      */
-    public void setVisibility(boolean visible, int rank, int count) {
+    public void setVisibility(boolean visible, int rank, int count,
+            NotificationRecordLogger notificationRecordLogger) {
         final long now = System.currentTimeMillis();
         mVisibleSinceMs = visible ? now : mVisibleSinceMs;
         stats.onVisibilityChanged(visible);
@@ -927,6 +932,7 @@
                 getFreshnessMs(now),
                 0, // exposure time
                 rank);
+        notificationRecordLogger.logNotificationVisibility(this, visible);
     }
 
     /**
diff --git a/services/core/java/com/android/server/notification/NotificationRecordLogger.java b/services/core/java/com/android/server/notification/NotificationRecordLogger.java
index 8d8511f..eaca066f 100644
--- a/services/core/java/com/android/server/notification/NotificationRecordLogger.java
+++ b/services/core/java/com/android/server/notification/NotificationRecordLogger.java
@@ -16,11 +16,18 @@
 
 package com.android.server.notification;
 
+import static android.service.notification.NotificationListenerService.REASON_CANCEL;
+import static android.service.notification.NotificationListenerService.REASON_CLICK;
+import static android.service.notification.NotificationListenerService.REASON_TIMEOUT;
+
 import android.annotation.Nullable;
 import android.app.Notification;
 import android.app.Person;
 import android.os.Bundle;
+import android.service.notification.NotificationListenerService;
+import android.service.notification.NotificationStats;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.UiEvent;
 import com.android.internal.logging.UiEventLogger;
 
@@ -34,34 +41,184 @@
 public interface NotificationRecordLogger {
 
     /**
-     * Logs a NotificationReported atom reflecting the posting or update of a notification.
+     * May log a NotificationReported atom reflecting the posting or update of a notification.
      * @param r The new NotificationRecord. If null, no action is taken.
      * @param old The previous NotificationRecord.  Null if there was no previous record.
      * @param position The position at which this notification is ranked.
      * @param buzzBeepBlink Logging code reflecting whether this notification alerted the user.
      */
-    void logNotificationReported(@Nullable NotificationRecord r, @Nullable NotificationRecord old,
+    void maybeLogNotificationPosted(@Nullable NotificationRecord r,
+            @Nullable NotificationRecord old,
             int position, int buzzBeepBlink);
 
     /**
+     * Logs a notification cancel / dismiss event using UiEventReported (event ids from the
+     * NotificationCancelledEvents enum).
+     * @param r The NotificationRecord. If null, no action is taken.
+     * @param reason The reason the notification was canceled.
+     * @param dismissalSurface The surface the notification was dismissed from.
+     */
+    void logNotificationCancelled(@Nullable NotificationRecord r,
+            @NotificationListenerService.NotificationCancelReason int reason,
+            @NotificationStats.DismissalSurface int dismissalSurface);
+
+    /**
+     * Logs a notification visibility change event using UiEventReported (event ids from the
+     * NotificationEvents enum).
+     * @param r The NotificationRecord. If null, no action is taken.
+     * @param visible True if the notification became visible.
+     */
+    void logNotificationVisibility(@Nullable NotificationRecord r, boolean visible);
+
+    /**
      * The UiEvent enums that this class can log.
      */
-    enum NotificationReportedEvents implements UiEventLogger.UiEventEnum {
-        INVALID(0),
+    enum NotificationReportedEvent implements UiEventLogger.UiEventEnum {
         @UiEvent(doc = "New notification enqueued to post")
         NOTIFICATION_POSTED(162),
-        @UiEvent(doc = "Notification substantially updated")
+        @UiEvent(doc = "Notification substantially updated, or alerted again.")
         NOTIFICATION_UPDATED(163);
 
         private final int mId;
-        NotificationReportedEvents(int id) {
+        NotificationReportedEvent(int id) {
             mId = id;
         }
         @Override public int getId() {
             return mId;
         }
+
+        public static NotificationReportedEvent fromRecordPair(NotificationRecordPair p) {
+            return (p.old != null) ? NotificationReportedEvent.NOTIFICATION_UPDATED :
+                            NotificationReportedEvent.NOTIFICATION_POSTED;
+        }
     }
 
+    enum NotificationCancelledEvent implements UiEventLogger.UiEventEnum {
+        INVALID(0),
+        @UiEvent(doc = "Notification was canceled due to a notification click.")
+        NOTIFICATION_CANCEL_CLICK(164),
+        @UiEvent(doc = "Notification was canceled due to a user dismissal, surface not specified.")
+        NOTIFICATION_CANCEL_USER_OTHER(165),
+        @UiEvent(doc = "Notification was canceled due to a user dismiss-all (from the notification"
+                + " shade).")
+        NOTIFICATION_CANCEL_USER_CANCEL_ALL(166),
+        @UiEvent(doc = "Notification was canceled due to an inflation error.")
+        NOTIFICATION_CANCEL_ERROR(167),
+        @UiEvent(doc = "Notification was canceled by the package manager modifying the package.")
+        NOTIFICATION_CANCEL_PACKAGE_CHANGED(168),
+        @UiEvent(doc = "Notification was canceled by the owning user context being stopped.")
+        NOTIFICATION_CANCEL_USER_STOPPED(169),
+        @UiEvent(doc = "Notification was canceled by the user banning the package.")
+        NOTIFICATION_CANCEL_PACKAGE_BANNED(170),
+        @UiEvent(doc = "Notification was canceled by the app canceling this specific notification.")
+        NOTIFICATION_CANCEL_APP_CANCEL(171),
+        @UiEvent(doc = "Notification was canceled by the app cancelling all its notifications.")
+        NOTIFICATION_CANCEL_APP_CANCEL_ALL(172),
+        @UiEvent(doc = "Notification was canceled by a listener reporting a user dismissal.")
+        NOTIFICATION_CANCEL_LISTENER_CANCEL(173),
+        @UiEvent(doc = "Notification was canceled by a listener reporting a user dismiss all.")
+        NOTIFICATION_CANCEL_LISTENER_CANCEL_ALL(174),
+        @UiEvent(doc = "Notification was canceled because it was a member of a canceled group.")
+        NOTIFICATION_CANCEL_GROUP_SUMMARY_CANCELED(175),
+        @UiEvent(doc = "Notification was canceled because it was an invisible member of a group.")
+        NOTIFICATION_CANCEL_GROUP_OPTIMIZATION(176),
+        @UiEvent(doc = "Notification was canceled by the device administrator suspending the "
+                + "package.")
+        NOTIFICATION_CANCEL_PACKAGE_SUSPENDED(177),
+        @UiEvent(doc = "Notification was canceled by the owning managed profile being turned off.")
+        NOTIFICATION_CANCEL_PROFILE_TURNED_OFF(178),
+        @UiEvent(doc = "Autobundled summary notification was canceled because its group was "
+                + "unbundled")
+        NOTIFICATION_CANCEL_UNAUTOBUNDLED(179),
+        @UiEvent(doc = "Notification was canceled by the user banning the channel.")
+        NOTIFICATION_CANCEL_CHANNEL_BANNED(180),
+        @UiEvent(doc = "Notification was snoozed.")
+        NOTIFICATION_CANCEL_SNOOZED(181),
+        @UiEvent(doc = "Notification was canceled due to timeout")
+        NOTIFICATION_CANCEL_TIMEOUT(182),
+        // Values 183-189 reserved for future system dismissal reasons
+        @UiEvent(doc = "Notification was canceled due to user dismissal of a peeking notification.")
+        NOTIFICATION_CANCEL_USER_PEEK(190),
+        @UiEvent(doc = "Notification was canceled due to user dismissal from the always-on display")
+        NOTIFICATION_CANCEL_USER_AOD(191),
+        @UiEvent(doc = "Notification was canceled due to user dismissal from the notification"
+                + " shade.")
+        NOTIFICATION_CANCEL_USER_SHADE(192),
+        @UiEvent(doc = "Notification was canceled due to user dismissal from the lockscreen")
+        NOTIFICATION_CANCEL_USER_LOCKSCREEN(193);
+
+        private final int mId;
+        NotificationCancelledEvent(int id) {
+            mId = id;
+        }
+        @Override public int getId() {
+            return mId;
+        }
+
+        public static NotificationCancelledEvent fromCancelReason(
+                @NotificationListenerService.NotificationCancelReason int reason,
+                @NotificationStats.DismissalSurface int surface) {
+            // Shouldn't be possible to get a non-dismissed notification here.
+            if (surface == NotificationStats.DISMISSAL_NOT_DISMISSED) {
+                if (NotificationManagerService.DBG) {
+                    throw new IllegalArgumentException("Unexpected surface " + surface);
+                }
+                return INVALID;
+            }
+            // Most cancel reasons do not have a meaningful surface. Reason codes map directly
+            // to NotificationCancelledEvent codes.
+            if (surface == NotificationStats.DISMISSAL_OTHER) {
+                if ((REASON_CLICK <= reason) && (reason <= REASON_TIMEOUT)) {
+                    return NotificationCancelledEvent.values()[reason];
+                }
+                if (NotificationManagerService.DBG) {
+                    throw new IllegalArgumentException("Unexpected cancel reason " + reason);
+                }
+                return INVALID;
+            }
+            // User cancels have a meaningful surface, which we differentiate by. See b/149038335
+            // for caveats.
+            if (reason != REASON_CANCEL) {
+                if (NotificationManagerService.DBG) {
+                    throw new IllegalArgumentException("Unexpected cancel with surface " + reason);
+                }
+                return INVALID;
+            }
+            switch (surface) {
+                case NotificationStats.DISMISSAL_PEEK:
+                    return NOTIFICATION_CANCEL_USER_PEEK;
+                case NotificationStats.DISMISSAL_AOD:
+                    return NOTIFICATION_CANCEL_USER_AOD;
+                case NotificationStats.DISMISSAL_SHADE:
+                    return NOTIFICATION_CANCEL_USER_SHADE;
+                default:
+                    if (NotificationManagerService.DBG) {
+                        throw new IllegalArgumentException("Unexpected surface for user-dismiss "
+                                + reason);
+                    }
+                    return INVALID;
+            }
+        }
+    }
+
+    enum NotificationEvent implements UiEventLogger.UiEventEnum {
+        @UiEvent(doc = "Notification became visible.")
+        NOTIFICATION_OPEN(197),
+        @UiEvent(doc = "Notification stopped being visible.")
+        NOTIFICATION_CLOSE(198);
+
+        private final int mId;
+        NotificationEvent(int id) {
+            mId = id;
+        }
+        @Override public int getId() {
+            return mId;
+        }
+
+        public static NotificationEvent fromVisibility(boolean visible) {
+            return visible ? NOTIFICATION_OPEN : NOTIFICATION_CLOSE;
+        }
+    }
     /**
      * A helper for extracting logging information from one or two NotificationRecords.
      */
@@ -80,7 +237,7 @@
         /**
          * @return True if old is null, alerted, or important logged fields have changed.
          */
-        boolean shouldLog(int buzzBeepBlink) {
+        boolean shouldLogReported(int buzzBeepBlink) {
             if (r == null) {
                 return false;
             }
@@ -88,7 +245,8 @@
                 return true;
             }
 
-            return !(Objects.equals(r.getSbn().getChannelIdLogTag(), old.getSbn().getChannelIdLogTag())
+            return !(Objects.equals(r.getSbn().getChannelIdLogTag(),
+                        old.getSbn().getChannelIdLogTag())
                     && Objects.equals(r.getSbn().getGroupLogTag(), old.getSbn().getGroupLogTag())
                     && (r.getSbn().getNotification().isGroupSummary()
                         == old.getSbn().getNotification().isGroupSummary())
@@ -97,11 +255,6 @@
                     && (r.getImportance() == old.getImportance()));
         }
 
-        NotificationReportedEvents getUiEvent() {
-            return (old != null) ? NotificationReportedEvents.NOTIFICATION_UPDATED :
-                    NotificationReportedEvents.NOTIFICATION_POSTED;
-        }
-
         /**
          * @return hash code for the notification style class, or 0 if none exists.
          */
@@ -142,5 +295,39 @@
         int getInstanceId() {
             return (r.getSbn().getInstanceId() == null ? 0 : r.getSbn().getInstanceId().getId());
         }
+
+        /**
+         * @return Small hash of the notification ID, and tag (if present).
+         */
+        int getNotificationIdHash() {
+            return smallHash(Objects.hashCode(r.getSbn().getTag()) ^ r.getSbn().getId());
+        }
+
+        /**
+         * @return Small hash of the channel ID, if present, or 0 otherwise.
+         */
+        int getChannelIdHash() {
+            return smallHash(Objects.hashCode(r.getSbn().getNotification().getChannelId()));
+        }
+
+        /**
+         * @return Small hash of the group ID, respecting group override if present. 0 otherwise.
+         */
+        int getGroupIdHash() {
+            return smallHash(Objects.hashCode(r.getSbn().getGroup()));
+        }
+
+        // "Small" hashes will be in the range [0, MAX_HASH).
+        static final int MAX_HASH = (1 << 13);
+
+        /**
+         * Maps in to the range [0, MAX_HASH), keeping similar values distinct.
+         * @param in An arbitrary integer.
+         * @return in mod MAX_HASH, signs chosen to stay in the range [0, MAX_HASH).
+         */
+        @VisibleForTesting
+        static int smallHash(int in) {
+            return Math.floorMod(in, MAX_HASH);
+        }
     }
 }
diff --git a/services/core/java/com/android/server/notification/NotificationRecordLoggerImpl.java b/services/core/java/com/android/server/notification/NotificationRecordLoggerImpl.java
index 4974c30..9fcac25 100644
--- a/services/core/java/com/android/server/notification/NotificationRecordLoggerImpl.java
+++ b/services/core/java/com/android/server/notification/NotificationRecordLoggerImpl.java
@@ -16,6 +16,8 @@
 
 package com.android.server.notification;
 
+import com.android.internal.logging.UiEventLogger;
+import com.android.internal.logging.UiEventLoggerImpl;
 import com.android.internal.util.FrameworkStatsLog;
 
 /**
@@ -24,46 +26,59 @@
  */
 public class NotificationRecordLoggerImpl implements NotificationRecordLogger {
 
+    private UiEventLogger mUiEventLogger = new UiEventLoggerImpl();
+
     @Override
-    public void logNotificationReported(NotificationRecord r, NotificationRecord old,
+    public void maybeLogNotificationPosted(NotificationRecord r, NotificationRecord old,
             int position, int buzzBeepBlink) {
         NotificationRecordPair p = new NotificationRecordPair(r, old);
-        if (!p.shouldLog(buzzBeepBlink)) {
+        if (!p.shouldLogReported(buzzBeepBlink)) {
             return;
         }
         FrameworkStatsLog.write(FrameworkStatsLog.NOTIFICATION_REPORTED,
-                /* int32 event_id = 1 */ p.getUiEvent().getId(),
+                /* int32 event_id = 1 */ NotificationReportedEvent.fromRecordPair(p).getId(),
                 /* int32 uid = 2 */ r.getUid(),
                 /* string package_name = 3 */ r.getSbn().getPackageName(),
                 /* int32 instance_id = 4 */ p.getInstanceId(),
-                /* int32 notification_id = 5 */ r.getSbn().getId(),
-                /* string notification_tag = 6 */ r.getSbn().getTag(),
-                /* string channel_id = 7 */ r.getSbn().getChannelIdLogTag(),
-                /* string group_id = 8 */ r.getSbn().getGroupLogTag(),
-                /* int32 group_instance_id = 9 */ 0, // TODO generate and fill instance ids
-                /* bool is_group_summary = 10 */ r.getSbn().getNotification().isGroupSummary(),
-                /* string category = 11 */ r.getSbn().getNotification().category,
-                /* int32 style = 12 */ p.getStyle(),
-                /* int32 num_people = 13 */ p.getNumPeople(),
-                /* int32 position = 14 */ position,
-                /* android.stats.sysui.NotificationImportance importance = 15 */ r.getImportance(),
-                /* int32 alerting = 16 */ buzzBeepBlink,
-                /* NotificationImportanceExplanation importance_source = 17 */
+                /* int32 notification_id_hash = 5 */ p.getNotificationIdHash(),
+                /* int32 channel_id_hash = 6 */ p.getChannelIdHash(),
+                /* string group_id_hash = 7 */ p.getGroupIdHash(),
+                /* int32 group_instance_id = 8 */ 0, // TODO generate and fill instance ids
+                /* bool is_group_summary = 9 */ r.getSbn().getNotification().isGroupSummary(),
+                /* string category = 10 */ r.getSbn().getNotification().category,
+                /* int32 style = 11 */ p.getStyle(),
+                /* int32 num_people = 12 */ p.getNumPeople(),
+                /* int32 position = 13 */ position,
+                /* android.stats.sysui.NotificationImportance importance = 14 */ r.getImportance(),
+                /* int32 alerting = 15 */ buzzBeepBlink,
+                /* NotificationImportanceExplanation importance_source = 16 */
                 r.getImportanceExplanationCode(),
-                /* android.stats.sysui.NotificationImportance importance_initial = 18 */
+                /* android.stats.sysui.NotificationImportance importance_initial = 17 */
                 r.getInitialImportance(),
-                /* NotificationImportanceExplanation importance_initial_source = 19 */
+                /* NotificationImportanceExplanation importance_initial_source = 18 */
                 r.getInitialImportanceExplanationCode(),
-                /* android.stats.sysui.NotificationImportance importance_asst = 20 */
+                /* android.stats.sysui.NotificationImportance importance_asst = 19 */
                 r.getAssistantImportance(),
-                /* int32 assistant_hash = 21 */ p.getAssistantHash(),
-                /* float assistant_ranking_score = 22 */ 0  // TODO connect up ranking score
+                /* int32 assistant_hash = 20 */ p.getAssistantHash(),
+                /* float assistant_ranking_score = 21 */ 0 // TODO connect up ranking score
         );
     }
 
+    @Override
+    public void logNotificationCancelled(NotificationRecord r, int reason, int dismissalSurface) {
+        log(NotificationCancelledEvent.fromCancelReason(reason, dismissalSurface), r);
+    }
 
+    @Override
+    public void logNotificationVisibility(NotificationRecord r, boolean visible) {
+        log(NotificationEvent.fromVisibility(visible), r);
+    }
 
-
-
-
+    void log(UiEventLogger.UiEventEnum event, NotificationRecord r) {
+        if (r == null) {
+            return;
+        }
+        mUiEventLogger.logWithInstanceId(event, r.getUid(), r.getSbn().getPackageName(),
+                r.getSbn().getInstanceId());
+    }
 }
diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java
index fe39322..b8186ed 100644
--- a/services/core/java/com/android/server/notification/PreferencesHelper.java
+++ b/services/core/java/com/android/server/notification/PreferencesHelper.java
@@ -20,6 +20,10 @@
 import static android.app.NotificationManager.IMPORTANCE_NONE;
 import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
 
+import static com.android.internal.util.FrameworkStatsLog.PACKAGE_NOTIFICATION_CHANNEL_GROUP_PREFERENCES;
+import static com.android.internal.util.FrameworkStatsLog.PACKAGE_NOTIFICATION_CHANNEL_PREFERENCES;
+import static com.android.internal.util.FrameworkStatsLog.PACKAGE_NOTIFICATION_PREFERENCES;
+
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -36,6 +40,7 @@
 import android.os.Build;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.service.notification.ConversationChannelWrapper;
 import android.service.notification.NotificationListenerService;
 import android.service.notification.RankingHelperProto;
 import android.text.TextUtils;
@@ -45,6 +50,7 @@
 import android.util.Pair;
 import android.util.Slog;
 import android.util.SparseBooleanArray;
+import android.util.StatsEvent;
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.R;
@@ -79,6 +85,10 @@
     @VisibleForTesting
     static final int NOTIFICATION_CHANNEL_COUNT_LIMIT = 5000;
 
+    private static final int NOTIFICATION_PREFERENCES_PULL_LIMIT = 1000;
+    private static final int NOTIFICATION_CHANNEL_PULL_LIMIT = 2000;
+    private static final int NOTIFICATION_CHANNEL_GROUP_PULL_LIMIT = 1000;
+
     @VisibleForTesting
     static final String TAG_RANKING = "ranking";
     private static final String TAG_PACKAGE = "package";
@@ -1176,6 +1186,110 @@
         return groups;
     }
 
+    public ArrayList<ConversationChannelWrapper> getConversations(boolean onlyImportant) {
+        synchronized (mPackagePreferences) {
+            ArrayList<ConversationChannelWrapper> conversations = new ArrayList<>();
+
+            for (PackagePreferences p : mPackagePreferences.values()) {
+                int N = p.channels.size();
+                for (int i = 0; i < N; i++) {
+                    final NotificationChannel nc = p.channels.valueAt(i);
+                    if (!TextUtils.isEmpty(nc.getConversationId()) && !nc.isDeleted()
+                            && (nc.isImportantConversation() || !onlyImportant)) {
+                        ConversationChannelWrapper conversation = new ConversationChannelWrapper();
+                        conversation.setPkg(p.pkg);
+                        conversation.setUid(p.uid);
+                        conversation.setNotificationChannel(nc);
+                        conversation.setParentChannelLabel(
+                                p.channels.get(nc.getParentChannelId()).getName());
+                        boolean blockedByGroup = false;
+                        if (nc.getGroup() != null) {
+                            NotificationChannelGroup group = p.groups.get(nc.getGroup());
+                            if (group != null) {
+                                if (group.isBlocked()) {
+                                    blockedByGroup = true;
+                                } else {
+                                    conversation.setGroupLabel(group.getName());
+                                }
+                            }
+                        }
+                        if (!blockedByGroup) {
+                            conversations.add(conversation);
+                        }
+                    }
+                }
+            }
+
+            return conversations;
+        }
+    }
+
+    public ArrayList<ConversationChannelWrapper> getConversations(String pkg, int uid) {
+        Objects.requireNonNull(pkg);
+        synchronized (mPackagePreferences) {
+            PackagePreferences r = getPackagePreferencesLocked(pkg, uid);
+            if (r == null) {
+                return new ArrayList<>();
+            }
+            ArrayList<ConversationChannelWrapper> conversations = new ArrayList<>();
+            int N = r.channels.size();
+            for (int i = 0; i < N; i++) {
+                final NotificationChannel nc = r.channels.valueAt(i);
+                if (!TextUtils.isEmpty(nc.getConversationId()) && !nc.isDeleted()) {
+                    ConversationChannelWrapper conversation = new ConversationChannelWrapper();
+                    conversation.setPkg(r.pkg);
+                    conversation.setUid(r.uid);
+                    conversation.setNotificationChannel(nc);
+                    conversation.setParentChannelLabel(
+                            r.channels.get(nc.getParentChannelId()).getName());
+                    boolean blockedByGroup = false;
+                    if (nc.getGroup() != null) {
+                        NotificationChannelGroup group = r.groups.get(nc.getGroup());
+                        if (group != null) {
+                            if (group.isBlocked()) {
+                                blockedByGroup = true;
+                            } else {
+                                conversation.setGroupLabel(group.getName());
+                            }
+                        }
+                    }
+                    if (!blockedByGroup) {
+                        conversations.add(conversation);
+                    }
+                }
+            }
+
+            return conversations;
+        }
+    }
+
+    public @NonNull List<String> deleteConversation(String pkg, int uid, String conversationId) {
+        synchronized (mPackagePreferences) {
+            List<String> deletedChannelIds = new ArrayList<>();
+            PackagePreferences r = getPackagePreferencesLocked(pkg, uid);
+            if (r == null) {
+                return deletedChannelIds;
+            }
+            int N = r.channels.size();
+            for (int i = 0; i < N; i++) {
+                final NotificationChannel nc = r.channels.valueAt(i);
+                if (conversationId.equals(nc.getConversationId())) {
+                    nc.setDeleted(true);
+                    LogMaker lm = getChannelLog(nc, pkg);
+                    lm.setType(
+                            com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_CLOSE);
+                    MetricsLogger.action(lm);
+
+                    deletedChannelIds.add(nc.getId());
+                }
+            }
+            if (!deletedChannelIds.isEmpty() && mAreChannelsBypassingDnd) {
+                updateChannelsBypassingDnd(mContext.getUserId());
+            }
+            return deletedChannelIds;
+        }
+    }
+
     @Override
     public ParceledListSlice<NotificationChannel> getNotificationChannels(String pkg, int uid,
             boolean includeDeleted) {
@@ -1644,6 +1758,88 @@
         }
     }
 
+    /**
+     * Fills out {@link PackageNotificationPreferences} proto and wraps it in a {@link StatsEvent}.
+     */
+    public void pullPackagePreferencesStats(List<StatsEvent> events) {
+        synchronized (mPackagePreferences) {
+            for (int i = 0; i < mPackagePreferences.size(); i++) {
+                if (i > NOTIFICATION_PREFERENCES_PULL_LIMIT) {
+                    break;
+                }
+                StatsEvent.Builder event = StatsEvent.newBuilder()
+                        .setAtomId(PACKAGE_NOTIFICATION_PREFERENCES);
+                final PackagePreferences r = mPackagePreferences.valueAt(i);
+                event.writeInt(r.uid);
+                event.writeInt(r.importance);
+                event.writeInt(r.visibility);
+                event.writeInt(r.lockedAppFields);
+                events.add(event.build());
+            }
+        }
+    }
+
+    /**
+     * Fills out {@link PackageNotificationChannelPreferences} proto and wraps it in a
+     * {@link StatsEvent}.
+     */
+    public void pullPackageChannelPreferencesStats(List<StatsEvent> events) {
+        synchronized (mPackagePreferences) {
+            int totalChannelsPulled = 0;
+            for (int i = 0; i < mPackagePreferences.size(); i++) {
+                if (totalChannelsPulled > NOTIFICATION_CHANNEL_PULL_LIMIT) {
+                    break;
+                }
+                final PackagePreferences r = mPackagePreferences.valueAt(i);
+                for (NotificationChannel channel : r.channels.values()) {
+                    if (++totalChannelsPulled > NOTIFICATION_CHANNEL_PULL_LIMIT) {
+                        break;
+                    }
+                    StatsEvent.Builder event = StatsEvent.newBuilder()
+                            .setAtomId(PACKAGE_NOTIFICATION_CHANNEL_PREFERENCES);
+                    event.writeInt(r.uid);
+                    event.writeString(channel.getId());
+                    event.writeString(channel.getName().toString());
+                    event.writeString(channel.getDescription());
+                    event.writeInt(channel.getImportance());
+                    event.writeInt(channel.getUserLockedFields());
+                    event.writeBoolean(channel.isDeleted());
+                    events.add(event.build());
+                }
+            }
+        }
+    }
+
+    /**
+     * Fills out {@link PackageNotificationChannelGroupPreferences} proto and wraps it in a
+     * {@link StatsEvent}.
+     */
+    public void pullPackageChannelGroupPreferencesStats(List<StatsEvent> events) {
+        synchronized (mPackagePreferences) {
+            int totalGroupsPulled = 0;
+            for (int i = 0; i < mPackagePreferences.size(); i++) {
+                if (totalGroupsPulled > NOTIFICATION_CHANNEL_GROUP_PULL_LIMIT) {
+                    break;
+                }
+                final PackagePreferences r = mPackagePreferences.valueAt(i);
+                for (NotificationChannelGroup groupChannel : r.groups.values()) {
+                    if (++totalGroupsPulled > NOTIFICATION_CHANNEL_GROUP_PULL_LIMIT) {
+                        break;
+                    }
+                    StatsEvent.Builder event = StatsEvent.newBuilder()
+                            .setAtomId(PACKAGE_NOTIFICATION_CHANNEL_GROUP_PREFERENCES);
+                    event.writeInt(r.uid);
+                    event.writeString(groupChannel.getId());
+                    event.writeString(groupChannel.getName().toString());
+                    event.writeString(groupChannel.getDescription());
+                    event.writeBoolean(groupChannel.isBlocked());
+                    event.writeInt(groupChannel.getUserLockedFields());
+                    events.add(event.build());
+                }
+            }
+        }
+    }
+
     public JSONObject dumpJson(NotificationManagerService.DumpFilter filter) {
         JSONObject ranking = new JSONObject();
         JSONArray PackagePreferencess = new JSONArray();
diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java
index 661297a..bae1dd3 100644
--- a/services/core/java/com/android/server/notification/SnoozeHelper.java
+++ b/services/core/java/com/android/server/notification/SnoozeHelper.java
@@ -16,6 +16,7 @@
 package com.android.server.notification;
 
 import android.annotation.NonNull;
+import android.annotation.UserIdInt;
 import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
@@ -42,7 +43,9 @@
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.sql.Array;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
@@ -77,26 +80,26 @@
     private static final String REPOST_ACTION = SnoozeHelper.class.getSimpleName() + ".EVALUATE";
     private static final int REQUEST_CODE_REPOST = 1;
     private static final String REPOST_SCHEME = "repost";
-    private static final String EXTRA_KEY = "key";
+    static final String EXTRA_KEY = "key";
     private static final String EXTRA_USER_ID = "userId";
 
     private final Context mContext;
     private AlarmManager mAm;
     private final ManagedServices.UserProfiles mUserProfiles;
 
-    // User id : package name : notification key : record.
-    private ArrayMap<Integer, ArrayMap<String, ArrayMap<String, NotificationRecord>>>
+    // User id | package name : notification key : record.
+    private ArrayMap<String, ArrayMap<String, NotificationRecord>>
             mSnoozedNotifications = new ArrayMap<>();
-    // User id : package name : notification key : time-milliseconds .
+    // User id | package name : notification key : time-milliseconds .
     // This member stores persisted snoozed notification trigger times. it persists through reboots
     // It should have the notifications that haven't expired or re-posted yet
-    private ArrayMap<Integer, ArrayMap<String, ArrayMap<String, Long>>>
+    private final ArrayMap<String, ArrayMap<String, Long>>
             mPersistedSnoozedNotifications = new ArrayMap<>();
-    // User id : package name : notification key : creation ID .
+    // User id | package name : notification key : creation ID .
     // This member stores persisted snoozed notification trigger context for the assistant
     // it persists through reboots.
     // It should have the notifications that haven't expired or re-posted yet
-    private ArrayMap<Integer, ArrayMap<String, ArrayMap<String, String>>>
+    private final ArrayMap<String, ArrayMap<String, String>>
             mPersistedSnoozedNotificationsWithContext = new ArrayMap<>();
     // notification key : package.
     private ArrayMap<String, String> mPackages = new ArrayMap<>();
@@ -115,6 +118,10 @@
         mUserProfiles = userProfiles;
     }
 
+    private String getPkgKey(@UserIdInt int userId, String pkg) {
+        return userId + "|" + pkg;
+    }
+
     void cleanupPersistedContext(String key){
         int userId = mUsers.get(key);
         String pkg = mPackages.get(key);
@@ -144,15 +151,13 @@
     }
 
     protected boolean isSnoozed(int userId, String pkg, String key) {
-        return mSnoozedNotifications.containsKey(userId)
-                && mSnoozedNotifications.get(userId).containsKey(pkg)
-                && mSnoozedNotifications.get(userId).get(pkg).containsKey(key);
+        return mSnoozedNotifications.containsKey(getPkgKey(userId, pkg))
+                && mSnoozedNotifications.get(getPkgKey(userId, pkg)).containsKey(key);
     }
 
     protected Collection<NotificationRecord> getSnoozed(int userId, String pkg) {
-        if (mSnoozedNotifications.containsKey(userId)
-                && mSnoozedNotifications.get(userId).containsKey(pkg)) {
-            return mSnoozedNotifications.get(userId).get(pkg).values();
+        if (mSnoozedNotifications.containsKey(getPkgKey(userId, pkg))) {
+            return mSnoozedNotifications.get(getPkgKey(userId, pkg)).values();
         }
         return Collections.EMPTY_LIST;
     }
@@ -161,14 +166,14 @@
     ArrayList<NotificationRecord> getNotifications(String pkg,
             String groupKey, Integer userId) {
         ArrayList<NotificationRecord> records =  new ArrayList<>();
-        if (mSnoozedNotifications.containsKey(userId)
-                && mSnoozedNotifications.get(userId).containsKey(pkg)) {
-            ArrayMap<String, NotificationRecord> packages =
-                    mSnoozedNotifications.get(userId).get(pkg);
-            for (int i = 0; i < packages.size(); i++) {
-                String currentGroupKey = packages.valueAt(i).getSbn().getGroup();
+        ArrayMap<String, NotificationRecord> allRecords =
+                mSnoozedNotifications.get(getPkgKey(userId, pkg));
+        if (allRecords != null) {
+            for (int i = 0; i < allRecords.size(); i++) {
+                NotificationRecord r = allRecords.valueAt(i);
+                String currentGroupKey = r.getSbn().getGroup();
                 if (currentGroupKey.equals(groupKey)) {
-                    records.add(packages.valueAt(i));
+                    records.add(r);
                 }
             }
         }
@@ -176,47 +181,30 @@
     }
 
     protected NotificationRecord getNotification(String key) {
-        List<NotificationRecord> snoozedForUser = new ArrayList<>();
-        IntArray userIds = mUserProfiles.getCurrentProfileIds();
-        if (userIds != null) {
-            final int userIdsSize = userIds.size();
-            for (int i = 0; i < userIdsSize; i++) {
-                final ArrayMap<String, ArrayMap<String, NotificationRecord>> snoozedPkgs =
-                        mSnoozedNotifications.get(userIds.get(i));
-                if (snoozedPkgs != null) {
-                    final int snoozedPkgsSize = snoozedPkgs.size();
-                    for (int j = 0; j < snoozedPkgsSize; j++) {
-                        final ArrayMap<String, NotificationRecord> records = snoozedPkgs.valueAt(j);
-                        if (records != null) {
-                            return records.get(key);
-                        }
-                    }
-                }
-            }
+        if (!mUsers.containsKey(key) || !mPackages.containsKey(key)) {
+            Slog.w(TAG, "Snoozed data sets no longer agree for " + key);
+            return null;
         }
-        return null;
+        int userId = mUsers.get(key);
+        String pkg = mPackages.get(key);
+        ArrayMap<String, NotificationRecord> snoozed =
+                mSnoozedNotifications.get(getPkgKey(userId, pkg));
+        if (snoozed == null) {
+            return null;
+        }
+        return snoozed.get(key);
     }
 
     protected @NonNull List<NotificationRecord> getSnoozed() {
-        List<NotificationRecord> snoozedForUser = new ArrayList<>();
-        IntArray userIds = mUserProfiles.getCurrentProfileIds();
-        if (userIds != null) {
-            final int N = userIds.size();
-            for (int i = 0; i < N; i++) {
-                final ArrayMap<String, ArrayMap<String, NotificationRecord>> snoozedPkgs =
-                        mSnoozedNotifications.get(userIds.get(i));
-                if (snoozedPkgs != null) {
-                    final int M = snoozedPkgs.size();
-                    for (int j = 0; j < M; j++) {
-                        final ArrayMap<String, NotificationRecord> records = snoozedPkgs.valueAt(j);
-                        if (records != null) {
-                            snoozedForUser.addAll(records.values());
-                        }
-                    }
-                }
-            }
+        // caller filters records based on the current user profiles and listener access, so just
+        // return everything
+        List<NotificationRecord> snoozed= new ArrayList<>();
+        for (String userPkgKey : mSnoozedNotifications.keySet()) {
+            ArrayMap<String, NotificationRecord> snoozedRecords =
+                    mSnoozedNotifications.get(userPkgKey);
+            snoozed.addAll(snoozedRecords.values());
         }
-        return snoozedForUser;
+        return snoozed;
     }
 
     /**
@@ -261,120 +249,88 @@
     }
 
     private <T> void storeRecord(String pkg, String key, Integer userId,
-            ArrayMap<Integer, ArrayMap<String, ArrayMap<String, T>>> targets, T object) {
+            ArrayMap<String, ArrayMap<String, T>> targets, T object) {
 
-        ArrayMap<String, ArrayMap<String, T>> records =
-                targets.get(userId);
-        if (records == null) {
-            records = new ArrayMap<>();
+        ArrayMap<String, T> keyToValue = targets.get(getPkgKey(userId, pkg));
+        if (keyToValue == null) {
+            keyToValue = new ArrayMap<>();
         }
-        ArrayMap<String, T> pkgRecords = records.get(pkg);
-        if (pkgRecords == null) {
-            pkgRecords = new ArrayMap<>();
-        }
-        pkgRecords.put(key, object);
-        records.put(pkg, pkgRecords);
-        targets.put(userId, records);
+        keyToValue.put(key, object);
+        targets.put(getPkgKey(userId, pkg), keyToValue);
 
     }
 
     private <T> T removeRecord(String pkg, String key, Integer userId,
-            ArrayMap<Integer, ArrayMap<String, ArrayMap<String, T>>> targets) {
+            ArrayMap<String, ArrayMap<String, T>> targets) {
         T object = null;
-
-        ArrayMap<String, ArrayMap<String, T>> records =
-                targets.get(userId);
-        if (records == null) {
+        ArrayMap<String, T> keyToValue = targets.get(getPkgKey(userId, pkg));
+        if (keyToValue == null) {
             return null;
         }
-        ArrayMap<String, T> pkgRecords = records.get(pkg);
-        if (pkgRecords == null) {
-            return null;
-        }
-        object = pkgRecords.remove(key);
-        if (pkgRecords.size() == 0) {
-            records.remove(pkg);
-        }
-        if (records.size() == 0) {
-            targets.remove(userId);
+        object = keyToValue.remove(key);
+        if (keyToValue.size() == 0) {
+            targets.remove(getPkgKey(userId, pkg));
         }
         return object;
     }
 
     protected boolean cancel(int userId, String pkg, String tag, int id) {
-        if (mSnoozedNotifications.containsKey(userId)) {
-            ArrayMap<String, NotificationRecord> recordsForPkg =
-                    mSnoozedNotifications.get(userId).get(pkg);
-            if (recordsForPkg != null) {
-                final Set<Map.Entry<String, NotificationRecord>> records = recordsForPkg.entrySet();
-                for (Map.Entry<String, NotificationRecord> record : records) {
-                    final StatusBarNotification sbn = record.getValue().getSbn();
-                    if (Objects.equals(sbn.getTag(), tag) && sbn.getId() == id) {
-                        record.getValue().isCanceled = true;
-                        return true;
-                    }
+        ArrayMap<String, NotificationRecord> recordsForPkg =
+                mSnoozedNotifications.get(getPkgKey(userId, pkg));
+        if (recordsForPkg != null) {
+            final Set<Map.Entry<String, NotificationRecord>> records = recordsForPkg.entrySet();
+            for (Map.Entry<String, NotificationRecord> record : records) {
+                final StatusBarNotification sbn = record.getValue().getSbn();
+                if (Objects.equals(sbn.getTag(), tag) && sbn.getId() == id) {
+                    record.getValue().isCanceled = true;
+                    return true;
                 }
             }
         }
         return false;
     }
 
-    protected boolean cancel(int userId, boolean includeCurrentProfiles) {
-        int[] userIds = {userId};
-        if (includeCurrentProfiles) {
-            userIds = mUserProfiles.getCurrentProfileIds().toArray();
+    protected void cancel(int userId, boolean includeCurrentProfiles) {
+        if (mSnoozedNotifications.size() == 0) {
+            return;
         }
-        final int N = userIds.length;
-        for (int i = 0; i < N; i++) {
-            final ArrayMap<String, ArrayMap<String, NotificationRecord>> snoozedPkgs =
-                    mSnoozedNotifications.get(userIds[i]);
-            if (snoozedPkgs != null) {
-                final int M = snoozedPkgs.size();
-                for (int j = 0; j < M; j++) {
-                    final ArrayMap<String, NotificationRecord> records = snoozedPkgs.valueAt(j);
-                    if (records != null) {
-                        int P = records.size();
-                        for (int k = 0; k < P; k++) {
-                            records.valueAt(k).isCanceled = true;
-                        }
-                    }
+        IntArray userIds = new IntArray();
+        userIds.add(userId);
+        if (includeCurrentProfiles) {
+            userIds = mUserProfiles.getCurrentProfileIds();
+        }
+        for (ArrayMap<String, NotificationRecord> snoozedRecords : mSnoozedNotifications.values()) {
+            for (NotificationRecord r : snoozedRecords.values()) {
+                if (userIds.binarySearch(r.getUserId()) >= 0) {
+                    r.isCanceled = true;
                 }
-                return true;
             }
         }
-        return false;
     }
 
     protected boolean cancel(int userId, String pkg) {
-        if (mSnoozedNotifications.containsKey(userId)) {
-            if (mSnoozedNotifications.get(userId).containsKey(pkg)) {
-                ArrayMap<String, NotificationRecord> records =
-                        mSnoozedNotifications.get(userId).get(pkg);
-                int N = records.size();
-                for (int i = 0; i < N; i++) {
-                    records.valueAt(i).isCanceled = true;
-                }
-                return true;
-            }
+        ArrayMap<String, NotificationRecord> records =
+                mSnoozedNotifications.get(getPkgKey(userId, pkg));
+        if (records == null) {
+            return false;
         }
-        return false;
+        int N = records.size();
+        for (int i = 0; i < N; i++) {
+            records.valueAt(i).isCanceled = true;
+        }
+        return true;
     }
 
     /**
      * Updates the notification record so the most up to date information is shown on re-post.
      */
     protected void update(int userId, NotificationRecord record) {
-        ArrayMap<String, ArrayMap<String, NotificationRecord>> records =
-                mSnoozedNotifications.get(userId);
+        ArrayMap<String, NotificationRecord> records =
+                mSnoozedNotifications.get(getPkgKey(userId, record.getSbn().getPackageName()));
         if (records == null) {
             return;
         }
-        ArrayMap<String, NotificationRecord> pkgRecords = records.get(record.getSbn().getPackageName());
-        if (pkgRecords == null) {
-            return;
-        }
-        NotificationRecord existing = pkgRecords.get(record.getKey());
-        pkgRecords.put(record.getKey(), record);
+        records.put(record.getKey(), record);
     }
 
     protected void repost(String key) {
@@ -386,20 +342,18 @@
 
     protected void repost(String key, int userId) {
         final String pkg = mPackages.remove(key);
-        ArrayMap<String, ArrayMap<String, NotificationRecord>> records =
-                mSnoozedNotifications.get(userId);
+        ArrayMap<String, NotificationRecord> records =
+                mSnoozedNotifications.get(getPkgKey(userId, pkg));
         if (records == null) {
             return;
         }
-        ArrayMap<String, NotificationRecord> pkgRecords = records.get(pkg);
-        if (pkgRecords == null) {
-            return;
-        }
-        final NotificationRecord record = pkgRecords.remove(key);
+        final NotificationRecord record = records.remove(key);
         mPackages.remove(key);
         mUsers.remove(key);
 
         if (record != null && !record.isCanceled) {
+            final PendingIntent pi = createPendingIntent(pkg, record.getKey(), userId);
+            mAm.cancel(pi);
             MetricsLogger.action(record.getLogMaker()
                     .setCategory(MetricsProto.MetricsEvent.NOTIFICATION_SNOOZED)
                     .setType(MetricsProto.MetricsEvent.TYPE_OPEN));
@@ -408,55 +362,46 @@
     }
 
     protected void repostGroupSummary(String pkg, int userId, String groupKey) {
-        if (mSnoozedNotifications.containsKey(userId)) {
-            ArrayMap<String, ArrayMap<String, NotificationRecord>> keysByPackage
-                    = mSnoozedNotifications.get(userId);
+        ArrayMap<String, NotificationRecord> recordsByKey
+                = mSnoozedNotifications.get(getPkgKey(userId, pkg));
+        if (recordsByKey == null) {
+            return;
+        }
 
-            if (keysByPackage != null && keysByPackage.containsKey(pkg)) {
-                ArrayMap<String, NotificationRecord> recordsByKey = keysByPackage.get(pkg);
+        String groupSummaryKey = null;
+        int N = recordsByKey.size();
+        for (int i = 0; i < N; i++) {
+            final NotificationRecord potentialGroupSummary = recordsByKey.valueAt(i);
+            if (potentialGroupSummary.getSbn().isGroup()
+                    && potentialGroupSummary.getNotification().isGroupSummary()
+                    && groupKey.equals(potentialGroupSummary.getGroupKey())) {
+                groupSummaryKey = potentialGroupSummary.getKey();
+                break;
+            }
+        }
 
-                if (recordsByKey != null) {
-                    String groupSummaryKey = null;
-                    int N = recordsByKey.size();
-                    for (int i = 0; i < N; i++) {
-                        final NotificationRecord potentialGroupSummary = recordsByKey.valueAt(i);
-                        if (potentialGroupSummary.getSbn().isGroup()
-                                && potentialGroupSummary.getNotification().isGroupSummary()
-                                && groupKey.equals(potentialGroupSummary.getGroupKey())) {
-                            groupSummaryKey = potentialGroupSummary.getKey();
-                            break;
-                        }
-                    }
+        if (groupSummaryKey != null) {
+            NotificationRecord record = recordsByKey.remove(groupSummaryKey);
+            mPackages.remove(groupSummaryKey);
+            mUsers.remove(groupSummaryKey);
 
-                    if (groupSummaryKey != null) {
-                        NotificationRecord record = recordsByKey.remove(groupSummaryKey);
-                        mPackages.remove(groupSummaryKey);
-                        mUsers.remove(groupSummaryKey);
-
-                        if (record != null && !record.isCanceled) {
-                            MetricsLogger.action(record.getLogMaker()
-                                    .setCategory(MetricsProto.MetricsEvent.NOTIFICATION_SNOOZED)
-                                    .setType(MetricsProto.MetricsEvent.TYPE_OPEN));
-                            mCallback.repost(userId, record);
-                        }
-                    }
-                }
+            if (record != null && !record.isCanceled) {
+                MetricsLogger.action(record.getLogMaker()
+                        .setCategory(MetricsProto.MetricsEvent.NOTIFICATION_SNOOZED)
+                        .setType(MetricsProto.MetricsEvent.TYPE_OPEN));
+                mCallback.repost(userId, record);
             }
         }
     }
 
     protected void clearData(int userId, String pkg) {
-        ArrayMap<String, ArrayMap<String, NotificationRecord>> records =
-                mSnoozedNotifications.get(userId);
+        ArrayMap<String, NotificationRecord> records =
+                mSnoozedNotifications.get(getPkgKey(userId, pkg));
         if (records == null) {
             return;
         }
-        ArrayMap<String, NotificationRecord> pkgRecords = records.get(pkg);
-        if (pkgRecords == null) {
-            return;
-        }
-        for (int i = pkgRecords.size() - 1; i >= 0; i--) {
-            final NotificationRecord r = pkgRecords.removeAt(i);
+        for (int i = records.size() - 1; i >= 0; i--) {
+            final NotificationRecord r = records.removeAt(i);
             if (r != null) {
                 mPackages.remove(r.getKey());
                 mUsers.remove(r.getKey());
@@ -495,22 +440,36 @@
 
     public void dump(PrintWriter pw, NotificationManagerService.DumpFilter filter) {
         pw.println("\n  Snoozed notifications:");
-        for (int userId : mSnoozedNotifications.keySet()) {
+        for (String userPkgKey : mSnoozedNotifications.keySet()) {
             pw.print(INDENT);
-            pw.println("user: " + userId);
-            ArrayMap<String, ArrayMap<String, NotificationRecord>> snoozedPkgs =
-                    mSnoozedNotifications.get(userId);
-            for (String pkg : snoozedPkgs.keySet()) {
+            pw.println("key: " + userPkgKey);
+            ArrayMap<String, NotificationRecord> snoozedRecords =
+                    mSnoozedNotifications.get(userPkgKey);
+            Set<String> snoozedKeys = snoozedRecords.keySet();
+            for (String key : snoozedKeys) {
                 pw.print(INDENT);
                 pw.print(INDENT);
-                pw.println("package: " + pkg);
-                Set<String> snoozedKeys = snoozedPkgs.get(pkg).keySet();
-                for (String key : snoozedKeys) {
-                    pw.print(INDENT);
-                    pw.print(INDENT);
-                    pw.print(INDENT);
-                    pw.println(key);
-                }
+                pw.print(INDENT);
+                pw.println(key);
+            }
+        }
+        pw.println("\n Pending snoozed notifications");
+        for (String userPkgKey : mPersistedSnoozedNotifications.keySet()) {
+            pw.print(INDENT);
+            pw.println("key: " + userPkgKey);
+            ArrayMap<String, Long> snoozedRecords =
+                    mPersistedSnoozedNotifications.get(userPkgKey);
+            if (snoozedRecords == null) {
+                continue;
+            }
+            Set<String> snoozedKeys = snoozedRecords.keySet();
+            for (String key : snoozedKeys) {
+                pw.print(INDENT);
+                pw.print(INDENT);
+                pw.print(INDENT);
+                pw.print(key);
+                pw.print(INDENT);
+                pw.println(snoozedRecords.get(key));
             }
         }
     }
@@ -538,41 +497,34 @@
         void insert(T t) throws IOException;
     }
     private <T> void writeXml(XmlSerializer out,
-            ArrayMap<Integer, ArrayMap<String, ArrayMap<String, T>>> targets, String tag,
+            ArrayMap<String, ArrayMap<String, T>> targets, String tag,
             Inserter<T> attributeInserter)
             throws IOException {
         synchronized (targets) {
             final int M = targets.size();
             for (int i = 0; i < M; i++) {
-                final ArrayMap<String, ArrayMap<String, T>> packages =
-                        targets.valueAt(i);
-                if (packages == null) {
-                    continue;
-                }
-                final int N = packages.size();
-                for (int j = 0; j < N; j++) {
-                    final ArrayMap<String, T> keyToValue = packages.valueAt(j);
-                    if (keyToValue == null) {
-                        continue;
-                    }
-                    final int O = keyToValue.size();
-                    for (int k = 0; k < O; k++) {
-                        T value = keyToValue.valueAt(k);
+                String userIdPkgKey = targets.keyAt(i);
+                // T is a String (snoozed until context) or Long (snoozed until time)
+                ArrayMap<String, T> keyToValue = targets.valueAt(i);
+                for (int j = 0; j < keyToValue.size(); j++) {
+                    String key = keyToValue.keyAt(j);
+                    T value = keyToValue.valueAt(j);
 
-                        out.startTag(null, tag);
+                    out.startTag(null, tag);
 
-                        attributeInserter.insert(value);
+                    attributeInserter.insert(value);
 
-                        out.attribute(null, XML_SNOOZED_NOTIFICATION_VERSION_LABEL,
-                                XML_SNOOZED_NOTIFICATION_VERSION);
-                        out.attribute(null, XML_SNOOZED_NOTIFICATION_KEY, keyToValue.keyAt(k));
-                        out.attribute(null, XML_SNOOZED_NOTIFICATION_PKG, packages.keyAt(j));
-                        out.attribute(null, XML_SNOOZED_NOTIFICATION_USER_ID,
-                                targets.keyAt(i).toString());
+                    out.attribute(null, XML_SNOOZED_NOTIFICATION_VERSION_LABEL,
+                            XML_SNOOZED_NOTIFICATION_VERSION);
+                    out.attribute(null, XML_SNOOZED_NOTIFICATION_KEY, key);
 
-                        out.endTag(null, tag);
+                    String pkg = mPackages.get(key);
+                    int userId = mUsers.get(key);
+                    out.attribute(null, XML_SNOOZED_NOTIFICATION_PKG, pkg);
+                    out.attribute(null, XML_SNOOZED_NOTIFICATION_USER_ID,
+                            String.valueOf(userId));
 
-                    }
+                    out.endTag(null, tag);
                 }
             }
         }
@@ -606,7 +558,6 @@
                             }
                             scheduleRepost(pkg, key, userId, time - System.currentTimeMillis());
                         }
-                        continue;
                     }
                     if (tag.equals(XML_SNOOZED_NOTIFICATION_CONTEXT)) {
                         final String creationId = parser.getAttributeValue(
@@ -615,18 +566,9 @@
                             storeRecord(pkg, key, userId, mPersistedSnoozedNotificationsWithContext,
                                     creationId);
                         }
-                        continue;
                     }
-
-
                 } catch (Exception e) {
-                    //we dont cre if it is a number format exception or a null pointer exception.
-                    //we just want to debug it and continue with our lives
-                    if (DEBUG) {
-                        Slog.d(TAG,
-                                "Exception in reading snooze data from policy xml: "
-                                        + e.getMessage());
-                    }
+                    Slog.e(TAG,  "Exception in reading snooze data from policy xml", e);
                 }
             }
         }
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 3b564c3..f45e66e 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -19,6 +19,7 @@
 import static android.app.NotificationManager.AUTOMATIC_RULE_STATUS_DISABLED;
 import static android.app.NotificationManager.AUTOMATIC_RULE_STATUS_ENABLED;
 import static android.app.NotificationManager.AUTOMATIC_RULE_STATUS_REMOVED;
+import static android.app.NotificationManager.Policy.PRIORITY_SENDERS_ANY;
 
 import android.app.AppOpsManager;
 import android.app.AutomaticZenRule;
@@ -1011,21 +1012,23 @@
 
     @VisibleForTesting
     protected void applyRestrictions() {
+        final boolean zenOn = mZenMode != Global.ZEN_MODE_OFF;
         final boolean zenPriorityOnly = mZenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
         final boolean zenSilence = mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS;
         final boolean zenAlarmsOnly = mZenMode == Global.ZEN_MODE_ALARMS;
-        final boolean allowCalls = mConsolidatedPolicy.allowCalls();
+        final boolean allowCalls = mConsolidatedPolicy.allowCalls()
+                && mConsolidatedPolicy.allowCallsFrom() == PRIORITY_SENDERS_ANY;
         final boolean allowRepeatCallers = mConsolidatedPolicy.allowRepeatCallers();
         final boolean allowSystem = mConsolidatedPolicy.allowSystem();
         final boolean allowMedia = mConsolidatedPolicy.allowMedia();
         final boolean allowAlarms = mConsolidatedPolicy.allowAlarms();
 
         // notification restrictions
-        final boolean muteNotifications =
-                (mSuppressedEffects & SUPPRESSED_EFFECT_NOTIFICATIONS) != 0;
+        final boolean muteNotifications = zenOn
+                || (mSuppressedEffects & SUPPRESSED_EFFECT_NOTIFICATIONS) != 0;
         // call restrictions
         final boolean muteCalls = zenAlarmsOnly
-                || (zenPriorityOnly && !allowCalls && !allowRepeatCallers)
+                || (zenPriorityOnly && !(allowCalls || allowRepeatCallers))
                 || (mSuppressedEffects & SUPPRESSED_EFFECT_CALLS) != 0;
         // alarm restrictions
         final boolean muteAlarms = zenPriorityOnly && !allowAlarms;
diff --git a/services/core/java/com/android/server/om/OverlayManagerService.java b/services/core/java/com/android/server/om/OverlayManagerService.java
index 3c31f6a..f221285 100644
--- a/services/core/java/com/android/server/om/OverlayManagerService.java
+++ b/services/core/java/com/android/server/om/OverlayManagerService.java
@@ -62,6 +62,7 @@
 import android.util.Slog;
 import android.util.SparseArray;
 
+import com.android.internal.content.om.OverlayConfig;
 import com.android.server.FgThread;
 import com.android.server.IoThread;
 import com.android.server.LocalServices;
@@ -248,7 +249,8 @@
             IdmapManager im = new IdmapManager(mPackageManager);
             mSettings = new OverlayManagerSettings();
             mImpl = new OverlayManagerServiceImpl(mPackageManager, im, mSettings,
-                    getDefaultOverlayPackages(), new OverlayChangeListener());
+                    OverlayConfig.getSystemInstance(), getDefaultOverlayPackages(),
+                    new OverlayChangeListener());
             mActorEnforcer = new OverlayActorEnforcer(mPackageManager);
 
             final IntentFilter packageFilter = new IntentFilter();
@@ -835,7 +837,7 @@
                     case "basecodepath":
                     case "state":
                     case "isenabled":
-                    case "isstatic":
+                    case "ismutable":
                     case "priority":
                     case "category":
                         dumpState.setField(arg);
@@ -913,9 +915,9 @@
                 }
 
                 try {
-                    ActivityManager.getService().broadcastIntent(null, intent, null, null, 0,
-                            null, null, null, android.app.AppOpsManager.OP_NONE, null, false, false,
-                            userId);
+                    ActivityManager.getService().broadcastIntentWithFeature(null, null, intent,
+                            null, null, 0, null, null, null, android.app.AppOpsManager.OP_NONE,
+                            null, false, false, userId);
                 } catch (RemoteException e) {
                     // Intentionally left empty.
                 }
diff --git a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java
index 9623542..2493057 100644
--- a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java
+++ b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java
@@ -18,7 +18,7 @@
 
 import static android.content.om.OverlayInfo.STATE_DISABLED;
 import static android.content.om.OverlayInfo.STATE_ENABLED;
-import static android.content.om.OverlayInfo.STATE_ENABLED_STATIC;
+import static android.content.om.OverlayInfo.STATE_ENABLED_IMMUTABLE;
 import static android.content.om.OverlayInfo.STATE_MISSING_TARGET;
 import static android.content.om.OverlayInfo.STATE_NO_IDMAP;
 import static android.content.om.OverlayInfo.STATE_OVERLAY_IS_BEING_REPLACED;
@@ -37,6 +37,7 @@
 import android.util.ArraySet;
 import android.util.Slog;
 
+import com.android.internal.content.om.OverlayConfig;
 import com.android.internal.util.ArrayUtils;
 
 import java.io.PrintWriter;
@@ -69,6 +70,7 @@
     private final PackageManagerHelper mPackageManager;
     private final IdmapManager mIdmapManager;
     private final OverlayManagerSettings mSettings;
+    private final OverlayConfig mOverlayConfig;
     private final String[] mDefaultOverlays;
     private final OverlayChangeListener mListener;
 
@@ -83,7 +85,7 @@
      * should either scrap the overlay manager's previous settings or merge the old
      * settings with the new.
      */
-    private static boolean mustReinitializeOverlay(@NonNull final PackageInfo theTruth,
+    private boolean mustReinitializeOverlay(@NonNull final PackageInfo theTruth,
             @Nullable final OverlayInfo oldSettings) {
         if (oldSettings == null) {
             return true;
@@ -94,27 +96,35 @@
         if (!Objects.equals(theTruth.targetOverlayableName, oldSettings.targetOverlayableName)) {
             return true;
         }
-        if (theTruth.isStaticOverlayPackage() != oldSettings.isStatic) {
+
+        boolean isMutable = isPackageConfiguredMutable(theTruth.packageName);
+        if (isMutable != oldSettings.isMutable) {
             return true;
         }
-        // a change in priority is only relevant for static RROs: specifically,
-        // a regular RRO should not have its state reset only because a change
-        // in priority
-        if (theTruth.isStaticOverlayPackage()
-                && theTruth.overlayPriority != oldSettings.priority) {
+
+        if (getPackageConfiguredPriority(theTruth.packageName) != oldSettings.priority) {
             return true;
         }
+
+        // If an immutable overlay changes its configured enabled state, reinitialize the overlay.
+        if (!isMutable && isPackageConfiguredEnabled(theTruth.packageName)
+                != oldSettings.isEnabled()) {
+            return true;
+        }
+
         return false;
     }
 
     OverlayManagerServiceImpl(@NonNull final PackageManagerHelper packageManager,
             @NonNull final IdmapManager idmapManager,
             @NonNull final OverlayManagerSettings settings,
+            @NonNull final OverlayConfig overlayConfig,
             @NonNull final String[] defaultOverlays,
             @NonNull final OverlayChangeListener listener) {
         mPackageManager = packageManager;
         mIdmapManager = idmapManager;
         mSettings = settings;
+        mOverlayConfig = overlayConfig;
         mDefaultOverlays = defaultOverlays;
         mListener = listener;
     }
@@ -162,8 +172,9 @@
                         overlayPackage.overlayTarget,
                         overlayPackage.targetOverlayableName,
                         overlayPackage.applicationInfo.getBaseCodePath(),
-                        overlayPackage.isStaticOverlayPackage(),
-                        overlayPackage.overlayPriority,
+                        isPackageConfiguredMutable(overlayPackage.packageName),
+                        isPackageConfiguredEnabled(overlayPackage.packageName),
+                        getPackageConfiguredPriority(overlayPackage.packageName),
                         overlayPackage.overlayCategory);
             }
 
@@ -374,7 +385,9 @@
         mSettings.init(packageName, userId, overlayPackage.overlayTarget,
                 overlayPackage.targetOverlayableName,
                 overlayPackage.applicationInfo.getBaseCodePath(),
-                overlayPackage.isStaticOverlayPackage(), overlayPackage.overlayPriority,
+                isPackageConfiguredMutable(overlayPackage.packageName),
+                isPackageConfiguredEnabled(overlayPackage.packageName),
+                getPackageConfiguredPriority(overlayPackage.packageName),
                 overlayPackage.overlayCategory);
         try {
             if (updateState(overlayPackage.overlayTarget, packageName, userId, 0)) {
@@ -439,8 +452,10 @@
                     mListener.onOverlaysChanged(pkg.overlayTarget, userId);
                 }
                 mSettings.init(packageName, userId, pkg.overlayTarget, pkg.targetOverlayableName,
-                        pkg.applicationInfo.getBaseCodePath(), pkg.isStaticOverlayPackage(),
-                        pkg.overlayPriority, pkg.overlayCategory);
+                        pkg.applicationInfo.getBaseCodePath(),
+                        isPackageConfiguredMutable(pkg.packageName),
+                        isPackageConfiguredEnabled(pkg.packageName),
+                        getPackageConfiguredPriority(pkg.packageName), pkg.overlayCategory);
             }
 
             if (updateState(pkg.overlayTarget, packageName, userId, 0)) {
@@ -492,13 +507,13 @@
             return false;
         }
 
-        // Ignore static overlays.
-        if (overlayPackage.isStaticOverlayPackage()) {
-            return false;
-        }
-
         try {
             final OverlayInfo oi = mSettings.getOverlayInfo(packageName, userId);
+            if (!oi.isMutable) {
+                // Ignore immutable overlays.
+                return false;
+            }
+
             boolean modified = mSettings.setEnabled(packageName, userId, enable);
             modified |= updateState(oi.targetPackageName, oi.packageName, userId, 0);
 
@@ -534,7 +549,8 @@
             // Disable all other overlays.
             allOverlays.remove(oi);
             for (int i = 0; i < allOverlays.size(); i++) {
-                final String disabledOverlayPackageName = allOverlays.get(i).packageName;
+                final OverlayInfo disabledInfo = allOverlays.get(i);
+                final String disabledOverlayPackageName = disabledInfo.packageName;
                 final PackageInfo disabledOverlayPackageInfo = mPackageManager.getPackageInfo(
                         disabledOverlayPackageName, userId);
                 if (disabledOverlayPackageInfo == null) {
@@ -542,8 +558,8 @@
                     continue;
                 }
 
-                if (disabledOverlayPackageInfo.isStaticOverlayPackage()) {
-                    // Don't touch static overlays.
+                if (!disabledInfo.isMutable) {
+                    // Don't touch immutable overlays.
                     continue;
                 }
                 if (withinCategory && !Objects.equals(disabledOverlayPackageInfo.overlayCategory,
@@ -570,12 +586,16 @@
         }
     }
 
-    private boolean isPackageUpdatableOverlay(@NonNull final String packageName, final int userId) {
-        final PackageInfo overlayPackage = mPackageManager.getPackageInfo(packageName, userId);
-        if (overlayPackage == null || overlayPackage.isStaticOverlayPackage()) {
-            return false;
-        }
-        return true;
+    private boolean isPackageConfiguredMutable(@NonNull final String packageName) {
+        return mOverlayConfig.isMutable(packageName);
+    }
+
+    private int getPackageConfiguredPriority(@NonNull final String packageName) {
+        return mOverlayConfig.getPriority(packageName);
+    }
+
+    private boolean isPackageConfiguredEnabled(@NonNull final String packageName) {
+        return mOverlayConfig.isEnabled(packageName);
     }
 
     boolean setPriority(@NonNull final String packageName,
@@ -585,7 +605,7 @@
                     + newParentPackageName + " userId=" + userId);
         }
 
-        if (!isPackageUpdatableOverlay(packageName, userId)) {
+        if (!isPackageConfiguredMutable(packageName)) {
             return false;
         }
 
@@ -605,7 +625,7 @@
             Slog.d(TAG, "setHighestPriority packageName=" + packageName + " userId=" + userId);
         }
 
-        if (!isPackageUpdatableOverlay(packageName, userId)) {
+        if (!isPackageConfiguredMutable(packageName)) {
             return false;
         }
 
@@ -625,7 +645,7 @@
             Slog.d(TAG, "setLowestPriority packageName=" + packageName + " userId=" + userId);
         }
 
-        if (!isPackageUpdatableOverlay(packageName, userId)) {
+        if (!isPackageConfiguredMutable(packageName)) {
             return false;
         }
 
@@ -682,10 +702,10 @@
         final PackageInfo overlayPackage = mPackageManager.getPackageInfo(overlayPackageName,
                 userId);
 
-        // Static RROs targeting to "android", ie framework-res.apk, are handled by native layers.
+        // Immutable RROs targeting to "android", ie framework-res.apk, are handled by native layers.
         if (targetPackage != null && overlayPackage != null
                 && !("android".equals(targetPackageName)
-                    && overlayPackage.isStaticOverlayPackage())) {
+                    && !isPackageConfiguredMutable(overlayPackageName))) {
             mIdmapManager.createIdmap(targetPackage, overlayPackage, userId);
         }
 
@@ -737,10 +757,6 @@
             return STATE_NO_IDMAP;
         }
 
-        if (overlayPackage.isStaticOverlayPackage()) {
-            return STATE_ENABLED_STATIC;
-        }
-
         final boolean enabled = mSettings.getEnabled(overlayPackage.packageName, userId);
         return enabled ? STATE_ENABLED : STATE_DISABLED;
     }
diff --git a/services/core/java/com/android/server/om/OverlayManagerSettings.java b/services/core/java/com/android/server/om/OverlayManagerSettings.java
index b7346d4..6bccdfc 100644
--- a/services/core/java/com/android/server/om/OverlayManagerSettings.java
+++ b/services/core/java/com/android/server/om/OverlayManagerSettings.java
@@ -67,32 +67,27 @@
     private final ArrayList<SettingsItem> mItems = new ArrayList<>();
 
     void init(@NonNull final String packageName, final int userId,
-            @NonNull final String targetPackageName,  @Nullable final String targetOverlayableName,
-            @NonNull final String baseCodePath, boolean isStatic, int priority,
+            @NonNull final String targetPackageName, @Nullable final String targetOverlayableName,
+            @NonNull final String baseCodePath, boolean isMutable, boolean isEnabled, int priority,
             @Nullable String overlayCategory) {
         remove(packageName, userId);
         final SettingsItem item =
                 new SettingsItem(packageName, userId, targetPackageName, targetOverlayableName,
-                        baseCodePath, isStatic, priority, overlayCategory);
-        if (isStatic) {
-            // All static overlays are always enabled.
-            item.setEnabled(true);
+                        baseCodePath, OverlayInfo.STATE_UNKNOWN, isEnabled, isMutable, priority,
+                        overlayCategory);
 
-            int i;
-            for (i = mItems.size() - 1; i >= 0; i--) {
-                SettingsItem parentItem = mItems.get(i);
-                if (parentItem.mIsStatic && parentItem.mPriority <= priority) {
-                    break;
-                }
+        int i;
+        for (i = mItems.size() - 1; i >= 0; i--) {
+            SettingsItem parentItem = mItems.get(i);
+            if (parentItem.mPriority <= priority) {
+                break;
             }
-            int pos = i + 1;
-            if (pos == mItems.size()) {
-                mItems.add(item);
-            } else {
-                mItems.add(pos, item);
-            }
-        } else {
+        }
+        int pos = i + 1;
+        if (pos == mItems.size()) {
             mItems.add(item);
+        } else {
+            mItems.add(pos, item);
         }
     }
 
@@ -182,19 +177,19 @@
 
     List<OverlayInfo> getOverlaysForTarget(@NonNull final String targetPackageName,
             final int userId) {
-        // Static RROs targeting "android" are loaded from AssetManager, and so they should be
+        // Immutable RROs targeting "android" are loaded from AssetManager, and so they should be
         // ignored in OverlayManagerService.
         return selectWhereTarget(targetPackageName, userId)
-                .filter((i) -> !(i.isStatic() && "android".equals(i.getTargetPackageName())))
+                .filter((i) -> i.isMutable() || !"android".equals(i.getTargetPackageName()))
                 .map(SettingsItem::getOverlayInfo)
                 .collect(Collectors.toList());
     }
 
     ArrayMap<String, List<OverlayInfo>> getOverlaysForUser(final int userId) {
-        // Static RROs targeting "android" are loaded from AssetManager, and so they should be
+        // Immutable RROs targeting "android" are loaded from AssetManager, and so they should be
         // ignored in OverlayManagerService.
         return selectWhereUser(userId)
-                .filter((i) -> !(i.isStatic() && "android".equals(i.getTargetPackageName())))
+                .filter((i) -> i.isMutable() || !"android".equals(i.getTargetPackageName()))
                 .map(SettingsItem::getOverlayInfo)
                 .collect(Collectors.groupingBy(info -> info.targetPackageName, ArrayMap::new,
                         Collectors.toList()));
@@ -320,7 +315,7 @@
         pw.println("mBaseCodePath..........: " + item.getBaseCodePath());
         pw.println("mState.................: " + OverlayInfo.stateToString(item.getState()));
         pw.println("mIsEnabled.............: " + item.isEnabled());
-        pw.println("mIsStatic..............: " + item.isStatic());
+        pw.println("mIsMutable.............: " + item.isMutable());
         pw.println("mPriority..............: " + item.mPriority);
         pw.println("mCategory..............: " + item.mCategory);
 
@@ -352,8 +347,8 @@
             case "isenabled":
                 pw.println(item.mIsEnabled);
                 break;
-            case "isstatic":
-                pw.println(item.mIsStatic);
+            case "ismutable":
+                pw.println(item.mIsMutable);
                 break;
             case "priority":
                 pw.println(item.mPriority);
@@ -446,7 +441,7 @@
             final String category = XmlUtils.readStringAttribute(parser, ATTR_CATEGORY);
 
             return new SettingsItem(packageName, userId, targetPackageName, targetOverlayableName,
-                    baseCodePath, state, isEnabled, isStatic, priority, category);
+                    baseCodePath, state, isEnabled, !isStatic, priority, category);
         }
 
         public static void persist(@NonNull final ArrayList<SettingsItem> table,
@@ -478,7 +473,7 @@
             XmlUtils.writeStringAttribute(xml, ATTR_BASE_CODE_PATH, item.mBaseCodePath);
             XmlUtils.writeIntAttribute(xml, ATTR_STATE, item.mState);
             XmlUtils.writeBooleanAttribute(xml, ATTR_IS_ENABLED, item.mIsEnabled);
-            XmlUtils.writeBooleanAttribute(xml, ATTR_IS_STATIC, item.mIsStatic);
+            XmlUtils.writeBooleanAttribute(xml, ATTR_IS_STATIC, !item.mIsMutable);
             XmlUtils.writeIntAttribute(xml, ATTR_PRIORITY, item.mPriority);
             XmlUtils.writeStringAttribute(xml, ATTR_CATEGORY, item.mCategory);
             xml.endTag(null, TAG_ITEM);
@@ -494,36 +489,28 @@
         private @OverlayInfo.State int mState;
         private boolean mIsEnabled;
         private OverlayInfo mCache;
-        private boolean mIsStatic;
+        private boolean mIsMutable;
         private int mPriority;
         private String mCategory;
 
         SettingsItem(@NonNull final String packageName, final int userId,
                 @NonNull final String targetPackageName,
                 @Nullable final String targetOverlayableName, @NonNull final String baseCodePath,
-                final @OverlayInfo.State int state, final boolean isEnabled, final boolean isStatic,
-                final int priority,  @Nullable String category) {
+                final @OverlayInfo.State int state, final boolean isEnabled,
+                final boolean isMutable, final int priority,  @Nullable String category) {
             mPackageName = packageName;
             mUserId = userId;
             mTargetPackageName = targetPackageName;
             mTargetOverlayableName = targetOverlayableName;
             mBaseCodePath = baseCodePath;
             mState = state;
-            mIsEnabled = isEnabled || isStatic;
+            mIsEnabled = isEnabled;
             mCategory = category;
             mCache = null;
-            mIsStatic = isStatic;
+            mIsMutable = isMutable;
             mPriority = priority;
         }
 
-        SettingsItem(@NonNull final String packageName, final int userId,
-                @NonNull final String targetPackageName,
-                @Nullable final String targetOverlayableName, @NonNull final String baseCodePath,
-                final boolean isStatic, final int priority, @Nullable String category) {
-            this(packageName, userId, targetPackageName, targetOverlayableName, baseCodePath,
-                    OverlayInfo.STATE_UNKNOWN, false, isStatic, priority, category);
-        }
-
         private String getTargetPackageName() {
             return mTargetPackageName;
         }
@@ -567,7 +554,7 @@
         }
 
         private boolean setEnabled(boolean enable) {
-            if (mIsStatic) {
+            if (!mIsMutable) {
                 return false;
             }
 
@@ -591,7 +578,7 @@
         private OverlayInfo getOverlayInfo() {
             if (mCache == null) {
                 mCache = new OverlayInfo(mPackageName, mTargetPackageName, mTargetOverlayableName,
-                        mCategory, mBaseCodePath, mState, mUserId, mPriority, mIsStatic);
+                        mCategory, mBaseCodePath, mState, mUserId, mPriority, mIsMutable);
             }
             return mCache;
         }
@@ -600,8 +587,8 @@
             mCache = null;
         }
 
-        private boolean isStatic() {
-            return mIsStatic;
+        private boolean isMutable() {
+            return mIsMutable;
         }
 
         private int getPriority() {
diff --git a/services/core/java/com/android/server/om/OverlayManagerShellCommand.java b/services/core/java/com/android/server/om/OverlayManagerShellCommand.java
index eb43275..bf99bd6 100644
--- a/services/core/java/com/android/server/om/OverlayManagerShellCommand.java
+++ b/services/core/java/com/android/server/om/OverlayManagerShellCommand.java
@@ -181,7 +181,7 @@
     private void printListOverlay(PrintWriter out, OverlayInfo oi) {
         String status;
         switch (oi.state) {
-            case OverlayInfo.STATE_ENABLED_STATIC:
+            case OverlayInfo.STATE_ENABLED_IMMUTABLE:
             case OverlayInfo.STATE_ENABLED:
                 status = "[x]";
                 break;
diff --git a/services/core/java/com/android/server/om/OverlayReferenceMapper.java b/services/core/java/com/android/server/om/OverlayReferenceMapper.java
index 8bea119..cadb8e4 100644
--- a/services/core/java/com/android/server/om/OverlayReferenceMapper.java
+++ b/services/core/java/com/android/server/om/OverlayReferenceMapper.java
@@ -18,16 +18,14 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.content.pm.parsing.AndroidPackage;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 import android.text.TextUtils;
-import android.util.ArraySet;
 import android.util.Pair;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.CollectionUtils;
 import com.android.server.SystemConfig;
-import com.android.server.pm.PackageSetting;
 
 import java.util.Collections;
 import java.util.HashMap;
diff --git a/services/core/java/com/android/server/people/PeopleServiceInternal.java b/services/core/java/com/android/server/people/PeopleServiceInternal.java
index c5b868f..31fa4d1 100644
--- a/services/core/java/com/android/server/people/PeopleServiceInternal.java
+++ b/services/core/java/com/android/server/people/PeopleServiceInternal.java
@@ -17,6 +17,8 @@
 package com.android.server.people;
 
 import android.annotation.NonNull;
+import android.annotation.UserIdInt;
+import android.os.CancellationSignal;
 import android.service.appprediction.IPredictionService;
 
 /**
@@ -25,16 +27,23 @@
 public abstract class PeopleServiceInternal extends IPredictionService.Stub {
 
     /**
+     * Prunes the data for the specified user. Called by {@link
+     * com.android.server.people.data.DataMaintenanceService} when the device is idle.
+     */
+    public abstract void pruneDataForUser(@UserIdInt int userId,
+            @NonNull CancellationSignal signal);
+
+    /**
      * The number conversation infos will be dynamic, based on the currently installed apps on the
      * device. All of which should be combined into a single blob to be backed up.
      */
-    public abstract byte[] backupConversationInfos(@NonNull int userId);
+    public abstract byte[] backupConversationInfos(@UserIdInt int userId);
 
     /**
      * Multiple conversation infos may exist in the restore payload, child classes are required to
      * manage the restoration based on how individual conversation infos were originally combined
      * during backup.
      */
-    public abstract void restoreConversationInfos(@NonNull int userId, @NonNull String key,
+    public abstract void restoreConversationInfos(@UserIdInt int userId, @NonNull String key,
             @NonNull byte[] payload);
 }
diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java
index 42bc464..d12e03d 100644
--- a/services/core/java/com/android/server/pm/ApexManager.java
+++ b/services/core/java/com/android/server/pm/ApexManager.java
@@ -32,10 +32,10 @@
 import android.content.pm.PackageInstaller;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageParser;
-import android.content.pm.parsing.AndroidPackage;
 import android.os.Environment;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.Trace;
 import android.sysprop.ApexProperties;
 import android.util.ArrayMap;
 import android.util.ArraySet;
@@ -46,6 +46,8 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.util.IndentingPrintWriter;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.utils.TimingsTraceAndSlog;
 
 import com.google.android.collect.Lists;
 
@@ -375,8 +377,11 @@
 
         @Override
         public List<ActiveApexInfo> getActiveApexInfos() {
+            final TimingsTraceAndSlog t = new TimingsTraceAndSlog(TAG + "Timing",
+                    Trace.TRACE_TAG_APEX_MANAGER);
             synchronized (mLock) {
                 if (mActiveApexInfosCache == null) {
+                    t.traceBegin("getActiveApexInfos_noCache");
                     try {
                         mActiveApexInfosCache = new ArraySet<>();
                         final ApexInfo[] activePackages = mApexService.getActivePackages();
@@ -387,6 +392,7 @@
                     } catch (RemoteException e) {
                         Slog.e(TAG, "Unable to retrieve packages from apexservice", e);
                     }
+                    t.traceEnd();
                 }
                 if (mActiveApexInfosCache != null) {
                     return new ArrayList<>(mActiveApexInfosCache);
diff --git a/services/core/java/com/android/server/pm/AppsFilter.java b/services/core/java/com/android/server/pm/AppsFilter.java
index 3ad1207..1205a33 100644
--- a/services/core/java/com/android/server/pm/AppsFilter.java
+++ b/services/core/java/com/android/server/pm/AppsFilter.java
@@ -26,14 +26,13 @@
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageParser;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ComponentParseUtils;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivity;
-import android.content.pm.parsing.ComponentParseUtils.ParsedComponent;
-import android.content.pm.parsing.ComponentParseUtils.ParsedIntentInfo;
-import android.content.pm.parsing.ComponentParseUtils.ParsedProvider;
-import android.content.pm.parsing.ComponentParseUtils.ParsedService;
-import android.net.Uri;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedComponent;
+import android.content.pm.parsing.component.ParsedInstrumentation;
+import android.content.pm.parsing.component.ParsedIntentInfo;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedService;
+import android.os.Binder;
 import android.os.Process;
 import android.os.Trace;
 import android.os.UserHandle;
@@ -50,6 +49,7 @@
 import com.android.internal.util.ArrayUtils;
 import com.android.server.FgThread;
 import com.android.server.om.OverlayReferenceMapper;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import java.io.PrintWriter;
 import java.util.List;
@@ -69,7 +69,6 @@
     // Logs all filtering instead of enforcing
     private static final boolean DEBUG_ALLOW_ALL = false;
     private static final boolean DEBUG_LOGGING = false;
-    private static final boolean FEATURE_ENABLED_BY_DEFAULT = false;
 
     /**
      * This contains a list of app UIDs that are implicitly queryable because another app explicitly
@@ -86,10 +85,10 @@
     private final SparseSetArray<Integer> mQueriesViaPackage = new SparseSetArray<>();
 
     /**
-     * A mapping from the set of App IDs that query others via intent to the list
-     * of packages that the intents resolve to.
+     * A mapping from the set of App IDs that query others via component match to the list
+     * of packages that the they resolve to.
      */
-    private final SparseSetArray<Integer> mQueriesViaIntent = new SparseSetArray<>();
+    private final SparseSetArray<Integer> mQueriesViaComponent = new SparseSetArray<>();
 
     /**
      * A set of App IDs that are always queryable by any package, regardless of their manifest
@@ -135,7 +134,8 @@
     private static class FeatureConfigImpl implements FeatureConfig {
         private static final String FILTERING_ENABLED_NAME = "package_query_filtering_enabled";
         private final PackageManagerService.Injector mInjector;
-        private volatile boolean mFeatureEnabled = FEATURE_ENABLED_BY_DEFAULT;
+        private volatile boolean mFeatureEnabled =
+                PackageManager.APP_ENUMERATION_ENABLED_BY_DEFAULT;
 
         private FeatureConfigImpl(PackageManagerService.Injector injector) {
             mInjector = injector;
@@ -145,14 +145,14 @@
         public void onSystemReady() {
             mFeatureEnabled = DeviceConfig.getBoolean(
                     NAMESPACE_PACKAGE_MANAGER_SERVICE, FILTERING_ENABLED_NAME,
-                    FEATURE_ENABLED_BY_DEFAULT);
+                    PackageManager.APP_ENUMERATION_ENABLED_BY_DEFAULT);
             DeviceConfig.addOnPropertiesChangedListener(
                     NAMESPACE_PACKAGE_MANAGER_SERVICE, FgThread.getExecutor(),
                     properties -> {
                         if (properties.getKeyset().contains(FILTERING_ENABLED_NAME)) {
                             synchronized (FeatureConfigImpl.this) {
                                 mFeatureEnabled = properties.getBoolean(FILTERING_ENABLED_NAME,
-                                        FEATURE_ENABLED_BY_DEFAULT);
+                                        PackageManager.APP_ENUMERATION_ENABLED_BY_DEFAULT);
                             }
                         }
                     });
@@ -171,11 +171,13 @@
         @Override
         public boolean packageIsEnabled(AndroidPackage pkg) {
             Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "packageIsEnabled");
+            final long token = Binder.clearCallingIdentity();
             try {
                 // TODO(b/135203078): Do not use toAppInfo
                 return mInjector.getCompatibility().isChangeEnabled(
                         PackageManager.FILTER_APPLICATION_QUERY, pkg.toAppInfoWithoutState());
             } finally {
+                Binder.restoreCallingIdentity(token);
                 Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
             }
         }
@@ -203,22 +205,25 @@
     }
 
     /** Returns true if the querying package may query for the potential target package */
-    private static boolean canQueryViaIntent(AndroidPackage querying,
+    private static boolean canQueryViaComponents(AndroidPackage querying,
             AndroidPackage potentialTarget) {
-        if (querying.getQueriesIntents() == null) {
-            return false;
-        }
-        for (Intent intent : querying.getQueriesIntents()) {
-            if (matches(intent, potentialTarget)) {
-                return true;
+        if (!querying.getQueriesIntents().isEmpty()) {
+            for (Intent intent : querying.getQueriesIntents()) {
+                if (matchesIntentFilters(intent, potentialTarget)) {
+                    return true;
+                }
             }
         }
+        if (!querying.getQueriesProviders().isEmpty()
+                && matchesProviders(querying.getQueriesProviders(), potentialTarget)) {
+            return true;
+        }
         return false;
     }
 
     private static boolean canQueryViaPackage(AndroidPackage querying,
             AndroidPackage potentialTarget) {
-        return querying.getQueriesPackages() != null
+        return !querying.getQueriesPackages().isEmpty()
                 && querying.getQueriesPackages().contains(potentialTarget.getPackageName());
     }
 
@@ -235,27 +240,28 @@
         return false;
     }
 
-    private static boolean matches(Intent intent, AndroidPackage potentialTarget) {
+    private static boolean matchesProviders(
+            Set<String> queriesAuthorities, AndroidPackage potentialTarget) {
         for (int p = ArrayUtils.size(potentialTarget.getProviders()) - 1; p >= 0; p--) {
             ParsedProvider provider = potentialTarget.getProviders().get(p);
             if (!provider.isExported()) {
                 continue;
             }
-            final Uri data = intent.getData();
-            if (!"content".equalsIgnoreCase(intent.getScheme()) || data == null
-                    || provider.getAuthority() == null) {
-                continue;
-            }
-            StringTokenizer authorities = new StringTokenizer(provider.getAuthority(), ";", false);
+            StringTokenizer authorities = new StringTokenizer(provider.getAuthority(), ";",
+                    false);
             while (authorities.hasMoreElements()) {
-                if (Objects.equals(authorities.nextElement(), data.getAuthority())) {
+                if (queriesAuthorities.contains(authorities.nextToken())) {
                     return true;
                 }
             }
         }
+        return false;
+    }
+
+    private static boolean matchesIntentFilters(Intent intent, AndroidPackage potentialTarget) {
         for (int s = ArrayUtils.size(potentialTarget.getServices()) - 1; s >= 0; s--) {
             ParsedService service = potentialTarget.getServices().get(s);
-            if (!service.exported) {
+            if (!service.isExported()) {
                 continue;
             }
             if (matchesAnyFilter(intent, service)) {
@@ -264,7 +270,7 @@
         }
         for (int a = ArrayUtils.size(potentialTarget.getActivities()) - 1; a >= 0; a--) {
             ParsedActivity activity = potentialTarget.getActivities().get(a);
-            if (!activity.exported) {
+            if (!activity.isExported()) {
                 continue;
             }
             if (matchesAnyFilter(intent, activity)) {
@@ -273,7 +279,7 @@
         }
         for (int r = ArrayUtils.size(potentialTarget.getReceivers()) - 1; r >= 0; r--) {
             ParsedActivity receiver = potentialTarget.getReceivers().get(r);
-            if (!receiver.exported) {
+            if (!receiver.isExported()) {
                 continue;
             }
             if (matchesAnyFilter(intent, receiver)) {
@@ -283,9 +289,8 @@
         return false;
     }
 
-    private static boolean matchesAnyFilter(
-            Intent intent, ParsedComponent<? extends ParsedIntentInfo> component) {
-        List<? extends ParsedIntentInfo> intents = component.intents;
+    private static boolean matchesAnyFilter(Intent intent, ParsedComponent component) {
+        List<ParsedIntentInfo> intents = component.getIntents();
         for (int i = ArrayUtils.size(intents) - 1; i >= 0; i--) {
             IntentFilter intentFilter = intents.get(i);
             if (intentFilter.match(intent.getAction(), intent.getType(), intent.getScheme(),
@@ -365,8 +370,8 @@
                 final AndroidPackage existingPkg = existingSetting.pkg;
                 // let's evaluate the ability of already added packages to see this new package
                 if (!newIsForceQueryable) {
-                    if (canQueryViaIntent(existingPkg, newPkg)) {
-                        mQueriesViaIntent.add(existingSetting.appId, newPkgSetting.appId);
+                    if (canQueryViaComponents(existingPkg, newPkg)) {
+                        mQueriesViaComponent.add(existingSetting.appId, newPkgSetting.appId);
                     }
                     if (canQueryViaPackage(existingPkg, newPkg)
                             || canQueryAsInstaller(existingSetting, newPkg)) {
@@ -375,8 +380,8 @@
                 }
                 // now we'll evaluate our new package's ability to see existing packages
                 if (!mForceQueryable.contains(existingSetting.appId)) {
-                    if (canQueryViaIntent(newPkg, existingPkg)) {
-                        mQueriesViaIntent.add(newPkgSetting.appId, existingSetting.appId);
+                    if (canQueryViaComponents(newPkg, existingPkg)) {
+                        mQueriesViaComponent.add(newPkgSetting.appId, existingSetting.appId);
                     }
                     if (canQueryViaPackage(newPkg, existingPkg)
                             || canQueryAsInstaller(newPkgSetting, existingPkg)) {
@@ -424,9 +429,9 @@
             }
         }
 
-        mQueriesViaIntent.remove(setting.appId);
-        for (int i = mQueriesViaIntent.size() - 1; i >= 0; i--) {
-            mQueriesViaIntent.remove(mQueriesViaIntent.keyAt(i), setting.appId);
+        mQueriesViaComponent.remove(setting.appId);
+        for (int i = mQueriesViaComponent.size() - 1; i >= 0; i--) {
+            mQueriesViaComponent.remove(mQueriesViaComponent.keyAt(i), setting.appId);
         }
         mQueriesViaPackage.remove(setting.appId);
         for (int i = mQueriesViaPackage.size() - 1; i >= 0; i--) {
@@ -591,10 +596,10 @@
                 Trace.endSection();
             }
             try {
-                Trace.beginSection("mQueriesViaIntent");
-                if (mQueriesViaIntent.contains(callingAppId, targetAppId)) {
+                Trace.beginSection("mQueriesViaComponent");
+                if (mQueriesViaComponent.contains(callingAppId, targetAppId)) {
                     if (DEBUG_LOGGING) {
-                        log(callingSetting, targetPkgSetting, "queries intent");
+                        log(callingSetting, targetPkgSetting, "queries component");
                     }
                     return false;
                 }
@@ -667,8 +672,7 @@
             String targetName) {
         try {
             Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "callingPkgInstruments");
-            final List<ComponentParseUtils.ParsedInstrumentation> inst =
-                    callingPkgSetting.pkg.getInstrumentations();
+            final List<ParsedInstrumentation> inst = callingPkgSetting.pkg.getInstrumentations();
             for (int i = ArrayUtils.size(inst) - 1; i >= 0; i--) {
                 if (Objects.equals(inst.get(i).getTargetPackage(), targetName)) {
                     if (DEBUG_LOGGING) {
@@ -729,7 +733,7 @@
         pw.println("  queries via package name:");
         dumpQueriesMap(pw, filteringAppId, mQueriesViaPackage, "    ", expandPackages);
         pw.println("  queries via intent:");
-        dumpQueriesMap(pw, filteringAppId, mQueriesViaIntent, "    ", expandPackages);
+        dumpQueriesMap(pw, filteringAppId, mQueriesViaComponent, "    ", expandPackages);
         pw.println("  queryable via interaction:");
         for (int user : users) {
             pw.append("    User ").append(Integer.toString(user)).println(":");
diff --git a/services/core/java/com/android/server/pm/ComponentResolver.java b/services/core/java/com/android/server/pm/ComponentResolver.java
index 13bd7e5..85810e3 100644
--- a/services/core/java/com/android/server/pm/ComponentResolver.java
+++ b/services/core/java/com/android/server/pm/ComponentResolver.java
@@ -22,28 +22,27 @@
 import static com.android.server.pm.PackageManagerService.DEBUG_PACKAGE_SCANNING;
 import static com.android.server.pm.PackageManagerService.DEBUG_REMOVE;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.ComponentName;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
 import android.content.pm.AuxiliaryResolveInfo;
 import android.content.pm.InstantAppResolveInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManagerInternal;
+import android.content.pm.PackageManagerInternal.PrivateResolveFlags;
 import android.content.pm.PackageUserState;
 import android.content.pm.ProviderInfo;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivity;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivityIntentInfo;
-import android.content.pm.parsing.ComponentParseUtils.ParsedProvider;
-import android.content.pm.parsing.ComponentParseUtils.ParsedProviderIntentInfo;
-import android.content.pm.parsing.ComponentParseUtils.ParsedService;
-import android.content.pm.parsing.ComponentParseUtils.ParsedServiceIntentInfo;
-import android.content.pm.parsing.PackageInfoUtils;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedComponent;
+import android.content.pm.parsing.component.ParsedIntentInfo;
+import android.content.pm.parsing.component.ParsedMainComponent;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedService;
 import android.os.UserHandle;
 import android.util.ArrayMap;
 import android.util.ArraySet;
@@ -56,6 +55,8 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.ArrayUtils;
 import com.android.server.IntentResolver;
+import com.android.server.pm.parsing.PackageInfoUtils;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -189,8 +190,11 @@
      * of these during boot as we need to inspect at all of the intent filters on the
      * /system partition in order to know which component is the setup wizard. This can
      * only ever be non-empty if {@link #mDeferProtectedFilters} is {@code true}.
+     *
+     * This is a pair of component package name to actual filter, because we don't store the
+     * name inside the filter. It's technically independent of the component it's contained in.
      */
-    private List<ParsedActivityIntentInfo> mProtectedFilters;
+    private List<Pair<ParsedMainComponent, ParsedIntentInfo>> mProtectedFilters;
 
     ComponentResolver(UserManagerService userManager,
             PackageManagerInternal packageManagerInternal,
@@ -229,9 +233,11 @@
     }
 
     @Nullable
-    List<ResolveInfo> queryActivities(Intent intent, String resolvedType, int flags, int userId) {
+    List<ResolveInfo> queryActivities(Intent intent, String resolvedType, int flags,
+            @PrivateResolveFlags int privateResolveFlags, int userId) {
         synchronized (mLock) {
-            return mActivities.queryIntent(intent, resolvedType, flags, userId);
+            return mActivities.queryIntent(
+                    intent, resolvedType, flags, privateResolveFlags, userId);
         }
     }
 
@@ -295,7 +301,7 @@
                     continue;
                 }
                 final ProviderInfo info = PackageInfoUtils.generateProviderInfo(
-                        pkg, p, flags, ps.readUserState(userId), userId);
+                        pkg, p, flags, ps.readUserState(userId), userId, ps);
                 if (info == null) {
                     continue;
                 }
@@ -325,7 +331,7 @@
                 return null;
             }
             return PackageInfoUtils.generateProviderInfo(pkg, p, flags,
-                    ps.readUserState(userId), userId);
+                    ps.readUserState(userId), userId, ps);
         }
     }
 
@@ -350,12 +356,12 @@
                     continue;
                 }
 
-                if (safeMode && (pkg.getFlags() & ApplicationInfo.FLAG_SYSTEM) == 0) {
+                if (safeMode && !pkg.isSystem()) {
                     continue;
                 }
                 final ProviderInfo info =
                         PackageInfoUtils.generateProviderInfo(pkg, p, 0,
-                                ps.readUserState(userId), userId);
+                                ps.readUserState(userId), userId, ps);
                 if (info == null) {
                     continue;
                 }
@@ -368,7 +374,7 @@
     @Nullable
     List<ResolveInfo> queryReceivers(Intent intent, String resolvedType, int flags, int userId) {
         synchronized (mLock) {
-            return mReceivers.queryIntent(intent, resolvedType, flags, userId);
+            return mReceivers.queryIntent(intent, resolvedType, flags, 0, userId);
         }
     }
 
@@ -411,7 +417,7 @@
 
     /** Add all components defined in the given package to the internal structures. */
     void addAllComponents(AndroidPackage pkg, boolean chatty) {
-        final ArrayList<ParsedActivityIntentInfo> newIntents = new ArrayList<>();
+        final ArrayList<Pair<ParsedActivity, ParsedIntentInfo>> newIntents = new ArrayList<>();
         synchronized (mLock) {
             addActivitiesLocked(pkg, newIntents, chatty);
             addReceiversLocked(pkg, chatty);
@@ -424,14 +430,14 @@
                         PACKAGE_SETUP_WIZARD, UserHandle.USER_SYSTEM));
 
         for (int i = newIntents.size() - 1; i >= 0; --i) {
-            final ParsedActivityIntentInfo intentInfo = newIntents.get(i);
+            final Pair<ParsedActivity, ParsedIntentInfo> pair = newIntents.get(i);
             final PackageSetting disabledPkgSetting = (PackageSetting) sPackageManagerInternal
-                    .getDisabledSystemPackage(intentInfo.getPackageName());
+                    .getDisabledSystemPackage(pair.first.getPackageName());
             final AndroidPackage disabledPkg =
                     disabledPkgSetting == null ? null : disabledPkgSetting.pkg;
             final List<ParsedActivity> systemActivities =
                     disabledPkg != null ? disabledPkg.getActivities() : null;
-            adjustPriority(systemActivities, intentInfo, setupWizardPackage);
+            adjustPriority(systemActivities, pair.first, pair.second, setupWizardPackage);
         }
     }
 
@@ -455,7 +461,8 @@
         if (mProtectedFilters == null || mProtectedFilters.size() == 0) {
             return;
         }
-        final List<ParsedActivityIntentInfo> protectedFilters = mProtectedFilters;
+        final List<Pair<ParsedMainComponent, ParsedIntentInfo>> protectedFilters =
+                mProtectedFilters;
         mProtectedFilters = null;
 
         // expect single setupwizard package
@@ -468,13 +475,17 @@
                     + " All protected intents capped to priority 0");
         }
         for (int i = protectedFilters.size() - 1; i >= 0; --i) {
-            final ParsedActivityIntentInfo filter = protectedFilters.get(i);
-            if (filter.getPackageName().equals(setupWizardPackage)) {
+            final Pair<ParsedMainComponent, ParsedIntentInfo> pair = protectedFilters.get(i);
+            ParsedMainComponent component = pair.first;
+            ParsedIntentInfo filter = pair.second;
+            String packageName = component.getPackageName();
+            String className = component.getClassName();
+            if (packageName.equals(setupWizardPackage)) {
                 if (DEBUG_FILTERS) {
                     Slog.i(TAG, "Found setup wizard;"
                             + " allow priority " + filter.getPriority() + ";"
-                            + " package: " + filter.getPackageName()
-                            + " activity: " + filter.getClassName()
+                            + " package: " + packageName
+                            + " activity: " + className
                             + " priority: " + filter.getPriority());
                 }
                 // skip setup wizard; allow it to keep the high priority filter
@@ -482,8 +493,8 @@
             }
             if (DEBUG_FILTERS) {
                 Slog.i(TAG, "Protected action; cap priority to 0;"
-                        + " package: " + filter.getPackageName()
-                        + " activity: " + filter.getClassName()
+                        + " package: " + packageName
+                        + " activity: " + className
                         + " origPrio: " + filter.getPriority());
             }
             filter.setPriority(0);
@@ -536,7 +547,7 @@
                 printedSomething = true;
             }
             pw.print("  ");
-            ComponentName.printShortString(pw, p.getPackageName(), p.className);
+            ComponentName.printShortString(pw, p.getPackageName(), p.getName());
             pw.println(":");
             pw.print("    ");
             pw.println(p.toString());
@@ -571,24 +582,11 @@
         if (dumpState.onTitlePrinted()) pw.println();
         pw.println("Service permissions:");
 
-        final Iterator<ParsedServiceIntentInfo> filterIterator = mServices.filterIterator();
+        final Iterator<Pair<ParsedService, ParsedIntentInfo>> filterIterator =
+                mServices.filterIterator();
         while (filterIterator.hasNext()) {
-            final ParsedServiceIntentInfo info = filterIterator.next();
-
-            ParsedService service = null;
-
-            AndroidPackage pkg = sPackageManagerInternal.getPackage(info.getPackageName());
-            if (pkg != null && pkg.getServices() != null) {
-                for (ParsedService parsedService : pkg.getServices()) {
-                    if (Objects.equals(parsedService.className, info.getClassName())) {
-                        service = parsedService;
-                    }
-                }
-            }
-
-            if (service == null) {
-                continue;
-            }
+            final Pair<ParsedService, ParsedIntentInfo> pair = filterIterator.next();
+            ParsedService service = pair.first;
 
             final String permission = service.getPermission();
             if (permission != null) {
@@ -602,7 +600,7 @@
 
     @GuardedBy("mLock")
     private void addActivitiesLocked(AndroidPackage pkg,
-            List<ParsedActivityIntentInfo> newIntents, boolean chatty) {
+            List<Pair<ParsedActivity, ParsedIntentInfo>> newIntents, boolean chatty) {
         final int activitiesSize = ArrayUtils.size(pkg.getActivities());
         StringBuilder r = null;
         for (int i = 0; i < activitiesSize; i++) {
@@ -667,7 +665,7 @@
                         final String packageName =
                                 component != null ? component.getPackageName() : "?";
                         Slog.w(TAG, "Skipping provider name " + names[j]
-                                + " (in package " + pkg.getAppInfoPackageName() + ")"
+                                + " (in package " + pkg.getPackageName() + ")"
                                 + ": name already used by " + packageName);
                     }
                 }
@@ -732,8 +730,8 @@
      * <em>WARNING</em> for performance reasons, the passed in intentList WILL BE
      * MODIFIED. Do not pass in a list that should not be changed.
      */
-    private static <T> void getIntentListSubset(List<ParsedActivityIntentInfo> intentList,
-            Function<ParsedActivityIntentInfo, Iterator<T>> generator, Iterator<T> searchIterator) {
+    private static <T> void getIntentListSubset(List<ParsedIntentInfo> intentList,
+            Function<ParsedIntentInfo, Iterator<T>> generator, Iterator<T> searchIterator) {
         // loop through the set of actions; every one must be found in the intent filter
         while (searchIterator.hasNext()) {
             // we must have at least one filter in the list to consider a match
@@ -744,9 +742,9 @@
             final T searchAction = searchIterator.next();
 
             // loop through the set of intent filters
-            final Iterator<ParsedActivityIntentInfo> intentIter = intentList.iterator();
+            final Iterator<ParsedIntentInfo> intentIter = intentList.iterator();
             while (intentIter.hasNext()) {
-                final ParsedActivityIntentInfo intentInfo = intentIter.next();
+                final ParsedIntentInfo intentInfo = intentIter.next();
                 boolean selectionFound = false;
 
                 // loop through the intent filter's selection criteria; at least one
@@ -769,7 +767,7 @@
         }
     }
 
-    private static boolean isProtectedAction(ParsedActivityIntentInfo filter) {
+    private static boolean isProtectedAction(ParsedIntentInfo filter) {
         final Iterator<String> actionsIter = filter.actionsIterator();
         while (actionsIter != null && actionsIter.hasNext()) {
             final String filterAction = actionsIter.next();
@@ -789,14 +787,14 @@
             if (sysActivity.getName().equals(activityInfo.getName())) {
                 return sysActivity;
             }
-            if (sysActivity.getName().equals(activityInfo.targetActivity)) {
+            if (sysActivity.getName().equals(activityInfo.getTargetActivity())) {
                 return sysActivity;
             }
-            if (sysActivity.targetActivity != null) {
-                if (sysActivity.targetActivity.equals(activityInfo.getName())) {
+            if (sysActivity.getTargetActivity() != null) {
+                if (sysActivity.getTargetActivity().equals(activityInfo.getName())) {
                     return sysActivity;
                 }
-                if (sysActivity.targetActivity.equals(activityInfo.targetActivity)) {
+                if (sysActivity.getTargetActivity().equals(activityInfo.getTargetActivity())) {
                     return sysActivity;
                 }
             }
@@ -817,23 +815,24 @@
      * <em>NOTE:</em> There is one exception. For security reasons, the setup wizard is
      * allowed to obtain any priority on any action.
      */
-    private void adjustPriority(List<ParsedActivity> systemActivities,
-            ParsedActivityIntentInfo intent, String setupWizardPackage) {
+    private void adjustPriority(List<ParsedActivity> systemActivities, ParsedActivity activity,
+            ParsedIntentInfo intent, String setupWizardPackage) {
         // nothing to do; priority is fine as-is
         if (intent.getPriority() <= 0) {
             return;
         }
 
-        AndroidPackage pkg = sPackageManagerInternal.getPackage(intent.getPackageName());
+        String packageName = activity.getPackageName();
+        AndroidPackage pkg = sPackageManagerInternal.getPackage(packageName);
 
-        final boolean privilegedApp =
-                ((pkg.getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0);
+        final boolean privilegedApp = pkg.isPrivileged();
+        String className = activity.getClassName();
         if (!privilegedApp) {
             // non-privileged applications can never define a priority >0
             if (DEBUG_FILTERS) {
                 Slog.i(TAG, "Non-privileged app; cap priority to 0;"
-                        + " package: " + pkg.getPackageName()
-                        + " activity: " + intent.getClassName()
+                        + " package: " + packageName
+                        + " activity: " + className
                         + " origPrio: " + intent.getPriority());
             }
             intent.setPriority(0);
@@ -854,11 +853,11 @@
                     if (mProtectedFilters == null) {
                         mProtectedFilters = new ArrayList<>();
                     }
-                    mProtectedFilters.add(intent);
+                    mProtectedFilters.add(Pair.create(activity, intent));
                     if (DEBUG_FILTERS) {
                         Slog.i(TAG, "Protected action; save for later;"
-                                + " package: " + pkg.getPackageName()
-                                + " activity: " + intent.getClassName()
+                                + " package: " + packageName
+                                + " activity: " + className
                                 + " origPrio: " + intent.getPriority());
                     }
                     return;
@@ -867,12 +866,12 @@
                         Slog.i(TAG, "No setup wizard;"
                                 + " All protected intents capped to priority 0");
                     }
-                    if (intent.getPackageName().equals(setupWizardPackage)) {
+                    if (packageName.equals(setupWizardPackage)) {
                         if (DEBUG_FILTERS) {
                             Slog.i(TAG, "Found setup wizard;"
                                     + " allow priority " + intent.getPriority() + ";"
-                                    + " package: " + intent.getPackageName()
-                                    + " activity: " + intent.getClassName()
+                                    + " package: " + packageName
+                                    + " activity: " + className
                                     + " priority: " + intent.getPriority());
                         }
                         // setup wizard gets whatever it wants
@@ -880,8 +879,8 @@
                     }
                     if (DEBUG_FILTERS) {
                         Slog.i(TAG, "Protected action; cap priority to 0;"
-                                + " package: " + intent.getPackageName()
-                                + " activity: " + intent.getClassName()
+                                + " package: " + packageName
+                                + " activity: " + className
                                 + " origPrio: " + intent.getPriority());
                     }
                     intent.setPriority(0);
@@ -894,27 +893,13 @@
 
         // privileged app unbundled update ... try to find the same activity
 
-        ParsedActivity foundActivity = null;
-        ParsedActivity activity = null;
-
-        if (pkg.getActivities() != null) {
-            for (ParsedActivity parsedProvider : pkg.getActivities()) {
-                if (Objects.equals(parsedProvider.className, intent.getClassName())) {
-                    activity = parsedProvider;
-                }
-            }
-        }
-
-        if (activity != null) {
-            foundActivity = findMatchingActivity(systemActivities, activity);
-        }
-
+        ParsedActivity foundActivity = findMatchingActivity(systemActivities, activity);
         if (foundActivity == null) {
             // this is a new activity; it cannot obtain >0 priority
             if (DEBUG_FILTERS) {
                 Slog.i(TAG, "New activity; cap priority to 0;"
-                        + " package: " + pkg.getPackageName()
-                        + " activity: " + intent.getClassName()
+                        + " package: " + packageName
+                        + " activity: " + className
                         + " origPrio: " + intent.getPriority());
             }
             intent.setPriority(0);
@@ -924,8 +909,8 @@
         // found activity, now check for filter equivalence
 
         // a shallow copy is enough; we modify the list, not its contents
-        final List<ParsedActivityIntentInfo> intentListCopy =
-                new ArrayList<>(foundActivity.intents);
+        final List<ParsedIntentInfo> intentListCopy =
+                new ArrayList<>(foundActivity.getIntents());
 
         // find matching action subsets
         final Iterator<String> actionsIterator = intent.actionsIterator();
@@ -935,8 +920,8 @@
                 // no more intents to match; we're not equivalent
                 if (DEBUG_FILTERS) {
                     Slog.i(TAG, "Mismatched action; cap priority to 0;"
-                            + " package: " + pkg.getPackageName()
-                            + " activity: " + intent.getClassName()
+                            + " package: " + packageName
+                            + " activity: " + className
                             + " origPrio: " + intent.getPriority());
                 }
                 intent.setPriority(0);
@@ -953,8 +938,8 @@
                 // no more intents to match; we're not equivalent
                 if (DEBUG_FILTERS) {
                     Slog.i(TAG, "Mismatched category; cap priority to 0;"
-                            + " package: " + pkg.getPackageName()
-                            + " activity: " + intent.getClassName()
+                            + " package: " + packageName
+                            + " activity: " + className
                             + " origPrio: " + intent.getPriority());
                 }
                 intent.setPriority(0);
@@ -970,8 +955,8 @@
                 // no more intents to match; we're not equivalent
                 if (DEBUG_FILTERS) {
                     Slog.i(TAG, "Mismatched scheme; cap priority to 0;"
-                            + " package: " + pkg.getPackageName()
-                            + " activity: " + intent.getClassName()
+                            + " package: " + packageName
+                            + " activity: " + className
                             + " origPrio: " + intent.getPriority());
                 }
                 intent.setPriority(0);
@@ -989,8 +974,8 @@
                 // no more intents to match; we're not equivalent
                 if (DEBUG_FILTERS) {
                     Slog.i(TAG, "Mismatched authority; cap priority to 0;"
-                            + " package: " + pkg.getPackageName()
-                            + " activity: " + intent.getClassName()
+                            + " package: " + packageName
+                            + " activity: " + className
                             + " origPrio: " + intent.getPriority());
                 }
                 intent.setPriority(0);
@@ -1007,8 +992,8 @@
             if (DEBUG_FILTERS) {
                 Slog.i(TAG, "Found matching filter(s);"
                         + " cap priority to " + cappedPriority + ";"
-                        + " package: " + pkg.getPackageName()
-                        + " activity: " + intent.getClassName()
+                        + " package: " + packageName
+                        + " activity: " + className
                         + " origPrio: " + intent.getPriority());
             }
             intent.setPriority(cappedPriority);
@@ -1142,8 +1127,109 @@
         }
     }
 
+    private abstract static class MimeGroupsAwareIntentResolver<F extends Pair<?
+            extends ParsedComponent, ParsedIntentInfo>, R>
+            extends IntentResolver<F, R> {
+        private ArrayMap<String, F[]> mMimeGroupToFilter = new ArrayMap<>();
+        private boolean mIsUpdatingMimeGroup = false;
+
+        @Override
+        public void addFilter(F f) {
+            IntentFilter intentFilter = getIntentFilter(f);
+            applyMimeGroups(f);
+            super.addFilter(f);
+
+            if (!mIsUpdatingMimeGroup) {
+                register_intent_filter(f, intentFilter.mimeGroupsIterator(), mMimeGroupToFilter,
+                        "      MimeGroup: ");
+            }
+        }
+
+        @Override
+        protected void removeFilterInternal(F f) {
+            IntentFilter intentFilter = getIntentFilter(f);
+            if (!mIsUpdatingMimeGroup) {
+                unregister_intent_filter(f, intentFilter.mimeGroupsIterator(), mMimeGroupToFilter,
+                        "      MimeGroup: ");
+            }
+
+            super.removeFilterInternal(f);
+            intentFilter.clearDynamicDataTypes();
+        }
+
+        /**
+         * Updates MIME group by applying changes to all IntentFilters
+         * that contain the group and repopulating m*ToFilter maps accordingly
+         *
+         * @param packageName package to which MIME group belongs
+         * @param mimeGroup MIME group to update
+         * @return true, if any intent filters were changed due to this update
+         */
+        public boolean updateMimeGroup(String packageName, String mimeGroup) {
+            F[] filters = mMimeGroupToFilter.get(mimeGroup);
+            int n = filters != null ? filters.length : 0;
+
+            mIsUpdatingMimeGroup = true;
+            boolean hasChanges = false;
+            F filter;
+            for (int i = 0; i < n && (filter = filters[i]) != null; i++) {
+                if (isPackageForFilter(packageName, filter)) {
+                    hasChanges |= updateFilter(filter);
+                }
+            }
+            mIsUpdatingMimeGroup = false;
+            return hasChanges;
+        }
+
+        private boolean updateFilter(F f) {
+            IntentFilter filter = getIntentFilter(f);
+            List<String> oldTypes = filter.dataTypes();
+            removeFilter(f);
+            addFilter(f);
+            List<String> newTypes = filter.dataTypes();
+            return !equalLists(oldTypes, newTypes);
+        }
+
+        private boolean equalLists(List<String> first, List<String> second) {
+            if (first == null) {
+                return second == null;
+            } else if (second == null) {
+                return false;
+            }
+
+            if (first.size() != second.size()) {
+                return false;
+            }
+
+            Collections.sort(first);
+            Collections.sort(second);
+            return first.equals(second);
+        }
+
+        private void applyMimeGroups(F f) {
+            IntentFilter filter = getIntentFilter(f);
+
+            for (int i = filter.countMimeGroups() - 1; i >= 0; i--) {
+                List<String> mimeTypes = sPackageManagerInternal.getMimeGroup(
+                        f.first.getPackageName(), filter.getMimeGroup(i));
+
+                for (int typeIndex = mimeTypes.size() - 1; typeIndex >= 0; typeIndex--) {
+                    String mimeType = mimeTypes.get(typeIndex);
+
+                    try {
+                        filter.addDynamicDataType(mimeType);
+                    } catch (IntentFilter.MalformedMimeTypeException e) {
+                        if (DEBUG) {
+                            Slog.w(TAG, "Malformed mime type: " + mimeType, e);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     private static class ActivityIntentResolver
-            extends IntentResolver<ParsedActivityIntentInfo, ResolveInfo> {
+            extends MimeGroupsAwareIntentResolver<Pair<ParsedActivity, ParsedIntentInfo>, ResolveInfo> {
 
         @Override
         public List<ResolveInfo> queryIntent(Intent intent, String resolvedType,
@@ -1154,11 +1240,12 @@
         }
 
         List<ResolveInfo> queryIntent(Intent intent, String resolvedType, int flags,
-                int userId) {
+                int privateResolveFlags, int userId) {
             if (!sUserManager.exists(userId)) {
                 return null;
             }
             mFlags = flags;
+            mPrivateResolveFlags = privateResolveFlags;
             return super.queryIntent(intent, resolvedType,
                     (flags & PackageManager.MATCH_DEFAULT_ONLY) != 0,
                     userId);
@@ -1175,15 +1262,18 @@
             mFlags = flags;
             final boolean defaultOnly = (flags & PackageManager.MATCH_DEFAULT_ONLY) != 0;
             final int activitiesSize = packageActivities.size();
-            ArrayList<ParsedActivityIntentInfo[]> listCut = new ArrayList<>(activitiesSize);
+            ArrayList<Pair<ParsedActivity, ParsedIntentInfo>[]> listCut =
+                    new ArrayList<>(activitiesSize);
 
-            List<ParsedActivityIntentInfo> intentFilters;
+            List<ParsedIntentInfo> intentFilters;
             for (int i = 0; i < activitiesSize; ++i) {
-                intentFilters = packageActivities.get(i).intents;
-                if (intentFilters != null && intentFilters.size() > 0) {
-                    ParsedActivityIntentInfo[] array =
-                            new ParsedActivityIntentInfo[intentFilters.size()];
-                    intentFilters.toArray(array);
+                ParsedActivity activity = packageActivities.get(i);
+                intentFilters = activity.getIntents();
+                if (!intentFilters.isEmpty()) {
+                    Pair<ParsedActivity, ParsedIntentInfo>[] array = newArray(intentFilters.size());
+                    for (int arrayIndex = 0; arrayIndex < intentFilters.size(); arrayIndex++) {
+                        array[arrayIndex] = Pair.create(activity, intentFilters.get(arrayIndex));
+                    }
                     listCut.add(array);
                 }
             }
@@ -1191,22 +1281,17 @@
         }
 
         private void addActivity(ParsedActivity a, String type,
-                List<ParsedActivityIntentInfo> newIntents) {
+                List<Pair<ParsedActivity, ParsedIntentInfo>> newIntents) {
             mActivities.put(a.getComponentName(), a);
             if (DEBUG_SHOW_INFO) {
-                final CharSequence label = a.nonLocalizedLabel != null
-                        ? a.nonLocalizedLabel
-                        : a.getName();
-                Log.v(TAG, "  " + type + " " + label + ":");
-            }
-            if (DEBUG_SHOW_INFO) {
+                Log.v(TAG, "  " + type + ":");
                 Log.v(TAG, "    Class=" + a.getName());
             }
-            final int intentsSize = a.intents.size();
+            final int intentsSize = a.getIntents().size();
             for (int j = 0; j < intentsSize; j++) {
-                ParsedActivityIntentInfo intent = a.intents.get(j);
+                ParsedIntentInfo intent = a.getIntents().get(j);
                 if (newIntents != null && "activity".equals(type)) {
-                    newIntents.add(intent);
+                    newIntents.add(Pair.create(a, intent));
                 }
                 if (DEBUG_SHOW_INFO) {
                     Log.v(TAG, "    IntentFilter:");
@@ -1215,36 +1300,34 @@
                 if (!intent.debugCheck()) {
                     Log.w(TAG, "==> For Activity " + a.getName());
                 }
-                addFilter(intent);
+                addFilter(Pair.create(a, intent));
             }
         }
 
         private void removeActivity(ParsedActivity a, String type) {
             mActivities.remove(a.getComponentName());
             if (DEBUG_SHOW_INFO) {
-                Log.v(TAG, "  " + type + " "
-                        + (a.nonLocalizedLabel != null ? a.nonLocalizedLabel
-                                : a.getName()) + ":");
+                Log.v(TAG, "  " + type + ":");
                 Log.v(TAG, "    Class=" + a.getName());
             }
-            final int intentsSize = a.intents.size();
+            final int intentsSize = a.getIntents().size();
             for (int j = 0; j < intentsSize; j++) {
-                ParsedActivityIntentInfo intent = a.intents.get(j);
+                ParsedIntentInfo intent = a.getIntents().get(j);
                 if (DEBUG_SHOW_INFO) {
                     Log.v(TAG, "    IntentFilter:");
                     intent.dump(new LogPrinter(Log.VERBOSE, TAG), "      ");
                 }
-                removeFilter(intent);
+                removeFilter(Pair.create(a, intent));
             }
         }
 
         @Override
-        protected boolean allowFilterResult(
-                ParsedActivityIntentInfo filter, List<ResolveInfo> dest) {
+        protected boolean allowFilterResult(Pair<ParsedActivity, ParsedIntentInfo> filter,
+                List<ResolveInfo> dest) {
             for (int i = dest.size() - 1; i >= 0; --i) {
                 ActivityInfo destAi = dest.get(i).activityInfo;
-                if (Objects.equals(destAi.name, filter.getClassName())
-                        && Objects.equals(destAi.packageName, filter.getPackageName())) {
+                if (Objects.equals(destAi.name, filter.first.getName())
+                        && Objects.equals(destAi.packageName, filter.first.getPackageName())) {
                     return false;
                 }
             }
@@ -1252,39 +1335,23 @@
         }
 
         @Override
-        protected ParsedActivityIntentInfo[] newArray(int size) {
-            return new ParsedActivityIntentInfo[size];
+        protected Pair<ParsedActivity, ParsedIntentInfo>[] newArray(int size) {
+            //noinspection unchecked
+            return (Pair<ParsedActivity, ParsedIntentInfo>[]) new Pair<?, ?>[size];
         }
 
         @Override
-        protected boolean isFilterStopped(ParsedActivityIntentInfo filter, int userId) {
-            if (!sUserManager.exists(userId)) return true;
-
-            AndroidPackage pkg = sPackageManagerInternal.getPackage(filter.getPackageName());
-            if (pkg == null) {
-                return false;
-            }
-
-            PackageSetting ps = (PackageSetting) sPackageManagerInternal.getPackageSetting(
-                    filter.getPackageName());
-            if (ps == null) {
-                return false;
-            }
-
-            // System apps are never considered stopped for purposes of
-            // filtering, because there may be no way for the user to
-            // actually re-launch them.
-            return (ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) == 0
-                    && ps.getStopped(userId);
+        protected boolean isFilterStopped(Pair<ParsedActivity, ParsedIntentInfo> filter, int userId) {
+            return ComponentResolver.isFilterStopped(filter, userId);
         }
 
         @Override
         protected boolean isPackageForFilter(String packageName,
-                ParsedActivityIntentInfo info) {
-            return packageName.equals(info.getPackageName());
+                Pair<ParsedActivity, ParsedIntentInfo> info) {
+            return packageName.equals(info.first.getPackageName());
         }
 
-        private void log(String reason, ParsedActivityIntentInfo info, int match,
+        private void log(String reason, ParsedIntentInfo info, int match,
                 int userId) {
             Slog.w(TAG, reason
                     + "; match: "
@@ -1294,8 +1361,11 @@
         }
 
         @Override
-        protected ResolveInfo newResult(ParsedActivityIntentInfo info,
+        protected ResolveInfo newResult(Pair<ParsedActivity, ParsedIntentInfo> pair,
                 int match, int userId) {
+            ParsedActivity activity = pair.first;
+            ParsedIntentInfo info = pair.second;
+
             if (!sUserManager.exists(userId)) {
                 if (DEBUG) {
                     log("User doesn't exist", info, match, userId);
@@ -1303,27 +1373,11 @@
                 return null;
             }
 
-            ParsedActivity activity = null;
-
-            AndroidPackage pkg = sPackageManagerInternal.getPackage(info.getPackageName());
+            AndroidPackage pkg = sPackageManagerInternal.getPackage(activity.getPackageName());
             if (pkg == null) {
                 return null;
             }
 
-            // TODO(b/135203078): Consider more efficient ways of doing this.
-            List<ParsedActivity> activities = getResolveList(pkg);
-            if (activities != null) {
-                for (ParsedActivity parsedActivity : activities) {
-                    if (Objects.equals(parsedActivity.className, info.getClassName())) {
-                        activity = parsedActivity;
-                    }
-                }
-            }
-
-            if (activity == null) {
-                return null;
-            }
-
             if (!sPackageManagerInternal.isEnabledAndMatches(activity, mFlags, userId)) {
                 if (DEBUG) {
                     log("!PackageManagerInternal.isEnabledAndMatches; mFlags="
@@ -1333,7 +1387,7 @@
                 return null;
             }
             PackageSetting ps = (PackageSetting) sPackageManagerInternal.getPackageSetting(
-                    info.getPackageName());
+                    activity.getPackageName());
             if (ps == null) {
                 if (DEBUG) {
                     log("info.activity.owner.mExtras == null", info, match, userId);
@@ -1341,8 +1395,8 @@
                 return null;
             }
             final PackageUserState userState = ps.readUserState(userId);
-            ActivityInfo ai =
-                    PackageInfoUtils.generateActivityInfo(pkg, activity, mFlags, userState, userId);
+            ActivityInfo ai = PackageInfoUtils.generateActivityInfo(pkg, activity, mFlags,
+                    userState, userId, ps);
             if (ai == null) {
                 if (DEBUG) {
                     log("Failed to create ActivityInfo based on " + activity, info, match,
@@ -1388,6 +1442,11 @@
                 }
                 return null;
             }
+            final boolean matchNonBrowserOnly =
+                    (mPrivateResolveFlags & PackageManagerInternal.RESOLVE_NON_BROWSER_ONLY) != 0;
+            if (matchNonBrowserOnly && info.handleAllWebDataURI()) {
+                return null;
+            }
             final ResolveInfo res = new ResolveInfo();
             res.activityInfo = ai;
             if ((mFlags & PackageManager.GET_RESOLVED_FILTER) != 0) {
@@ -1395,19 +1454,20 @@
             }
             res.handleAllWebDataURI = info.handleAllWebDataURI();
             res.priority = info.getPriority();
-            res.preferredOrder = pkg.getPreferredOrder();
+            // TODO(b/135203078): This field was unwritten and does nothing
+//            res.preferredOrder = pkg.getPreferredOrder();
             //System.out.println("Result: " + res.activityInfo.className +
             //                   " = " + res.priority);
             res.match = match;
-            res.isDefault = info.hasDefault;
-            res.labelRes = info.labelRes;
-            res.nonLocalizedLabel = info.nonLocalizedLabel;
+            res.isDefault = info.isHasDefault();
+            res.labelRes = info.getLabelRes();
+            res.nonLocalizedLabel = info.getNonLocalizedLabel();
             if (sPackageManagerInternal.userNeedsBadging(userId)) {
                 res.noResourceId = true;
             } else {
-                res.icon = info.icon;
+                res.icon = info.getIcon();
             }
-            res.iconResourceId = info.icon;
+            res.iconResourceId = info.getIcon();
             res.system = res.activityInfo.applicationInfo.isSystemApp();
             res.isInstantAppAvailable = userState.instantApp;
             return res;
@@ -1420,43 +1480,44 @@
 
         @Override
         protected void dumpFilter(PrintWriter out, String prefix,
-                ParsedActivityIntentInfo filter) {
-            ParsedActivity activity = null;
-
-            AndroidPackage pkg = sPackageManagerInternal.getPackage(filter.getPackageName());
-            if (pkg != null && pkg.getActivities() != null) {
-                for (ParsedActivity parsedActivity : pkg.getActivities()) {
-                    if (Objects.equals(parsedActivity.className, filter.getClassName())) {
-                        activity = parsedActivity;
-                    }
-                }
-            }
+                Pair<ParsedActivity, ParsedIntentInfo> pair) {
+            ParsedActivity activity = pair.first;
+            ParsedIntentInfo filter = pair.second;
 
             out.print(prefix);
             out.print(Integer.toHexString(System.identityHashCode(activity)));
             out.print(' ');
-            ComponentName.printShortString(out, filter.getPackageName(), filter.getClassName());
+            ComponentName.printShortString(out, activity.getPackageName(),
+                    activity.getClassName());
             out.print(" filter ");
             out.println(Integer.toHexString(System.identityHashCode(filter)));
         }
 
         @Override
-        protected Object filterToLabel(ParsedActivityIntentInfo filter) {
+        protected Object filterToLabel(Pair<ParsedActivity, ParsedIntentInfo> filter) {
             return filter;
         }
 
         protected void dumpFilterLabel(PrintWriter out, String prefix, Object label, int count) {
-            ParsedActivityIntentInfo activity = (ParsedActivityIntentInfo) label;
+            @SuppressWarnings("unchecked") Pair<ParsedActivity, ParsedIntentInfo> pair =
+                    (Pair<ParsedActivity, ParsedIntentInfo>) label;
             out.print(prefix);
-            out.print(Integer.toHexString(System.identityHashCode(activity)));
+            out.print(Integer.toHexString(System.identityHashCode(pair.first)));
             out.print(' ');
-            ComponentName.printShortString(out, activity.getPackageName(), activity.getClassName());
+            ComponentName.printShortString(out, pair.first.getPackageName(),
+                    pair.first.getClassName());
             if (count > 1) {
                 out.print(" ("); out.print(count); out.print(" filters)");
             }
             out.println();
         }
 
+        @Override
+        protected IntentFilter getIntentFilter(
+                @NonNull Pair<ParsedActivity, ParsedIntentInfo> input) {
+            return input.second;
+        }
+
         protected List<ParsedActivity> getResolveList(AndroidPackage pkg) {
             return pkg.getActivities();
         }
@@ -1465,6 +1526,7 @@
         private final ArrayMap<ComponentName, ParsedActivity> mActivities =
                 new ArrayMap<>();
         private int mFlags;
+        private int mPrivateResolveFlags;
     }
 
     // Both receivers and activities share a class, but point to different get methods
@@ -1477,7 +1539,7 @@
     }
 
     private static final class ProviderIntentResolver
-            extends IntentResolver<ParsedProviderIntentInfo, ResolveInfo> {
+            extends MimeGroupsAwareIntentResolver<Pair<ParsedProvider, ParsedIntentInfo>, ResolveInfo> {
         @Override
         public List<ResolveInfo> queryIntent(Intent intent, String resolvedType,
                 boolean defaultOnly, int userId) {
@@ -1509,15 +1571,18 @@
             mFlags = flags;
             final boolean defaultOnly = (flags & PackageManager.MATCH_DEFAULT_ONLY) != 0;
             final int providersSize = packageProviders.size();
-            ArrayList<ParsedProviderIntentInfo[]> listCut = new ArrayList<>(providersSize);
+            ArrayList<Pair<ParsedProvider, ParsedIntentInfo>[]> listCut =
+                    new ArrayList<>(providersSize);
 
-            List<ParsedProviderIntentInfo> intentFilters;
+            List<ParsedIntentInfo> intentFilters;
             for (int i = 0; i < providersSize; ++i) {
-                intentFilters = packageProviders.get(i).getIntents();
-                if (intentFilters != null && intentFilters.size() > 0) {
-                    ParsedProviderIntentInfo[] array =
-                            new ParsedProviderIntentInfo[intentFilters.size()];
-                    intentFilters.toArray(array);
+                ParsedProvider provider = packageProviders.get(i);
+                intentFilters = provider.getIntents();
+                if (!intentFilters.isEmpty()) {
+                    Pair<ParsedProvider, ParsedIntentInfo>[] array = newArray(intentFilters.size());
+                    for (int arrayIndex = 0; arrayIndex < intentFilters.size(); arrayIndex++) {
+                        array[arrayIndex] = Pair.create(provider, intentFilters.get(arrayIndex));
+                    }
                     listCut.add(array);
                 }
             }
@@ -1532,17 +1597,13 @@
 
             mProviders.put(p.getComponentName(), p);
             if (DEBUG_SHOW_INFO) {
-                Log.v(TAG, "  "
-                        + (p.nonLocalizedLabel != null
-                                ? p.nonLocalizedLabel
-                                : p.getName())
-                        + ":");
+                Log.v(TAG, "  provider:");
                 Log.v(TAG, "    Class=" + p.getName());
             }
             final int intentsSize = p.getIntents().size();
             int j;
             for (j = 0; j < intentsSize; j++) {
-                ParsedProviderIntentInfo intent = p.getIntents().get(j);
+                ParsedIntentInfo intent = p.getIntents().get(j);
                 if (DEBUG_SHOW_INFO) {
                     Log.v(TAG, "    IntentFilter:");
                     intent.dump(new LogPrinter(Log.VERBOSE, TAG), "      ");
@@ -1550,37 +1611,35 @@
                 if (!intent.debugCheck()) {
                     Log.w(TAG, "==> For Provider " + p.getName());
                 }
-                addFilter(intent);
+                addFilter(Pair.create(p, intent));
             }
         }
 
         void removeProvider(ParsedProvider p) {
             mProviders.remove(p.getComponentName());
             if (DEBUG_SHOW_INFO) {
-                Log.v(TAG, "  " + (p.nonLocalizedLabel != null
-                        ? p.nonLocalizedLabel
-                        : p.getName()) + ":");
+                Log.v(TAG, "  provider:");
                 Log.v(TAG, "    Class=" + p.getName());
             }
             final int intentsSize = p.getIntents().size();
             int j;
             for (j = 0; j < intentsSize; j++) {
-                ParsedProviderIntentInfo intent = p.getIntents().get(j);
+                ParsedIntentInfo intent = p.getIntents().get(j);
                 if (DEBUG_SHOW_INFO) {
                     Log.v(TAG, "    IntentFilter:");
                     intent.dump(new LogPrinter(Log.VERBOSE, TAG), "      ");
                 }
-                removeFilter(intent);
+                removeFilter(Pair.create(p, intent));
             }
         }
 
         @Override
-        protected boolean allowFilterResult(
-                ParsedProviderIntentInfo filter, List<ResolveInfo> dest) {
+        protected boolean allowFilterResult(Pair<ParsedProvider, ParsedIntentInfo> filter,
+                List<ResolveInfo> dest) {
             for (int i = dest.size() - 1; i >= 0; i--) {
                 ProviderInfo destPi = dest.get(i).providerInfo;
-                if (Objects.equals(destPi.name, filter.getClassName())
-                        && Objects.equals(destPi.packageName, filter.getPackageName())) {
+                if (Objects.equals(destPi.name, filter.first.getClassName())
+                        && Objects.equals(destPi.packageName, filter.first.getPackageName())) {
                     return false;
                 }
             }
@@ -1588,59 +1647,35 @@
         }
 
         @Override
-        protected ParsedProviderIntentInfo[] newArray(int size) {
-            return new ParsedProviderIntentInfo[size];
+        protected Pair<ParsedProvider, ParsedIntentInfo>[] newArray(int size) {
+            //noinspection unchecked
+            return (Pair<ParsedProvider, ParsedIntentInfo>[]) new Pair<?, ?>[size];
         }
 
         @Override
-        protected boolean isFilterStopped(ParsedProviderIntentInfo filter, int userId) {
-            if (!sUserManager.exists(userId)) {
-                return true;
-            }
-
-            AndroidPackage pkg = sPackageManagerInternal.getPackage(filter.getPackageName());
-            if (pkg == null) {
-                return false;
-            }
-
-            PackageSetting ps = (PackageSetting) sPackageManagerInternal.getPackageSetting(
-                    filter.getPackageName());
-            if (ps == null) {
-                return false;
-            }
-
-            // System apps are never considered stopped for purposes of
-            // filtering, because there may be no way for the user to
-            // actually re-launch them.
-            return (ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) == 0
-                    && ps.getStopped(userId);
+        protected boolean isFilterStopped(Pair<ParsedProvider, ParsedIntentInfo> filter,
+                int userId) {
+            return ComponentResolver.isFilterStopped(filter, userId);
         }
 
         @Override
         protected boolean isPackageForFilter(String packageName,
-                ParsedProviderIntentInfo info) {
-            return packageName.equals(info.getPackageName());
+                Pair<ParsedProvider, ParsedIntentInfo> info) {
+            return packageName.equals(info.first.getPackageName());
         }
 
         @Override
-        protected ResolveInfo newResult(ParsedProviderIntentInfo filter,
+        protected ResolveInfo newResult(Pair<ParsedProvider, ParsedIntentInfo> pair,
                 int match, int userId) {
             if (!sUserManager.exists(userId)) {
                 return null;
             }
 
-            ParsedProvider provider = null;
+            ParsedProvider provider = pair.first;
+            ParsedIntentInfo filter = pair.second;
 
-            AndroidPackage pkg = sPackageManagerInternal.getPackage(filter.getPackageName());
-            if (pkg != null && pkg.getProviders() != null) {
-                for (ParsedProvider parsedProvider : pkg.getProviders()) {
-                    if (Objects.equals(parsedProvider.className, filter.getClassName())) {
-                        provider = parsedProvider;
-                    }
-                }
-            }
-
-            if (provider == null) {
+            AndroidPackage pkg = sPackageManagerInternal.getPackage(provider.getPackageName());
+            if (pkg == null) {
                 return null;
             }
 
@@ -1649,7 +1684,7 @@
             }
 
             PackageSetting ps = (PackageSetting) sPackageManagerInternal.getPackageSetting(
-                    filter.getPackageName());
+                    provider.getPackageName());
             if (ps == null) {
                 return null;
             }
@@ -1671,8 +1706,8 @@
             if (userState.instantApp && ps.isUpdateAvailable()) {
                 return null;
             }
-            ProviderInfo pi = PackageInfoUtils.generateProviderInfo(pkg, provider,
-                    mFlags, userState, userId);
+            ProviderInfo pi = PackageInfoUtils.generateProviderInfo(pkg, provider, mFlags,
+                    userState, userId, ps);
             if (pi == null) {
                 return null;
             }
@@ -1682,12 +1717,13 @@
                 res.filter = filter;
             }
             res.priority = filter.getPriority();
-            res.preferredOrder = pkg.getPreferredOrder();
+            // TODO(b/135203078): This field was unwritten and does nothing
+//            res.preferredOrder = pkg.getPreferredOrder();
             res.match = match;
-            res.isDefault = filter.hasDefault;
-            res.labelRes = filter.labelRes;
-            res.nonLocalizedLabel = filter.nonLocalizedLabel;
-            res.icon = filter.icon;
+            res.isDefault = filter.isHasDefault();
+            res.labelRes = filter.getLabelRes();
+            res.nonLocalizedLabel = filter.getNonLocalizedLabel();
+            res.icon = filter.getIcon();
             res.system = res.providerInfo.applicationInfo.isSystemApp();
             return res;
         }
@@ -1699,37 +1735,31 @@
 
         @Override
         protected void dumpFilter(PrintWriter out, String prefix,
-                ParsedProviderIntentInfo filter) {
-            ParsedProvider provider = null;
-
-            AndroidPackage pkg = sPackageManagerInternal.getPackage(filter.getPackageName());
-            if (pkg != null && pkg.getProviders() != null) {
-                for (ParsedProvider parsedProvider : pkg.getProviders()) {
-                    if (Objects.equals(parsedProvider.className, filter.getClassName())) {
-                        provider = parsedProvider;
-                    }
-                }
-            }
+                Pair<ParsedProvider, ParsedIntentInfo> pair) {
+            ParsedProvider provider = pair.first;
+            ParsedIntentInfo filter = pair.second;
 
             out.print(prefix);
             out.print(Integer.toHexString(System.identityHashCode(provider)));
             out.print(' ');
-            ComponentName.printShortString(out, filter.getPackageName(), filter.getClassName());
+            ComponentName.printShortString(out, provider.getPackageName(), provider.getClassName());
             out.print(" filter ");
             out.println(Integer.toHexString(System.identityHashCode(filter)));
         }
 
         @Override
-        protected Object filterToLabel(ParsedProviderIntentInfo filter) {
+        protected Object filterToLabel(Pair<ParsedProvider, ParsedIntentInfo> filter) {
             return filter;
         }
 
         protected void dumpFilterLabel(PrintWriter out, String prefix, Object label, int count) {
-            final ParsedProviderIntentInfo provider = (ParsedProviderIntentInfo) label;
+            @SuppressWarnings("unchecked") final Pair<ParsedProvider, ParsedIntentInfo> pair =
+                    (Pair<ParsedProvider, ParsedIntentInfo>) label;
             out.print(prefix);
-            out.print(Integer.toHexString(System.identityHashCode(provider)));
+            out.print(Integer.toHexString(System.identityHashCode(pair.first)));
             out.print(' ');
-            ComponentName.printShortString(out, provider.getPackageName(), provider.getClassName());
+            ComponentName.printShortString(out, pair.first.getPackageName(),
+                    pair.first.getClassName());
             if (count > 1) {
                 out.print(" (");
                 out.print(count);
@@ -1738,12 +1768,18 @@
             out.println();
         }
 
+        @Override
+        protected IntentFilter getIntentFilter(
+                @NonNull Pair<ParsedProvider, ParsedIntentInfo> input) {
+            return input.second;
+        }
+
         private final ArrayMap<ComponentName, ParsedProvider> mProviders = new ArrayMap<>();
         private int mFlags;
     }
 
     private static final class ServiceIntentResolver
-            extends IntentResolver<ParsedServiceIntentInfo, ResolveInfo> {
+            extends MimeGroupsAwareIntentResolver<Pair<ParsedService, ParsedIntentInfo>, ResolveInfo> {
         @Override
         public List<ResolveInfo> queryIntent(Intent intent, String resolvedType,
                 boolean defaultOnly, int userId) {
@@ -1769,15 +1805,18 @@
             mFlags = flags;
             final boolean defaultOnly = (flags & PackageManager.MATCH_DEFAULT_ONLY) != 0;
             final int servicesSize = packageServices.size();
-            ArrayList<ParsedServiceIntentInfo[]> listCut = new ArrayList<>(servicesSize);
+            ArrayList<Pair<ParsedService, ParsedIntentInfo>[]> listCut =
+                    new ArrayList<>(servicesSize);
 
-            List<ParsedServiceIntentInfo> intentFilters;
+            List<ParsedIntentInfo> intentFilters;
             for (int i = 0; i < servicesSize; ++i) {
-                intentFilters = packageServices.get(i).intents;
-                if (intentFilters != null && intentFilters.size() > 0) {
-                    ParsedServiceIntentInfo[] array =
-                            new ParsedServiceIntentInfo[intentFilters.size()];
-                    intentFilters.toArray(array);
+                ParsedService service = packageServices.get(i);
+                intentFilters = service.getIntents();
+                if (intentFilters.size() > 0) {
+                    Pair<ParsedService, ParsedIntentInfo>[] array = newArray(intentFilters.size());
+                    for (int arrayIndex = 0; arrayIndex < intentFilters.size(); arrayIndex++) {
+                        array[arrayIndex] = Pair.create(service, intentFilters.get(arrayIndex));
+                    }
                     listCut.add(array);
                 }
             }
@@ -1787,15 +1826,13 @@
         void addService(ParsedService s) {
             mServices.put(s.getComponentName(), s);
             if (DEBUG_SHOW_INFO) {
-                Log.v(TAG, "  "
-                        + (s.nonLocalizedLabel != null
-                        ? s.nonLocalizedLabel : s.getName()) + ":");
+                Log.v(TAG, "  service:");
                 Log.v(TAG, "    Class=" + s.getName());
             }
-            final int intentsSize = s.intents.size();
+            final int intentsSize = s.getIntents().size();
             int j;
             for (j = 0; j < intentsSize; j++) {
-                ParsedServiceIntentInfo intent = s.intents.get(j);
+                ParsedIntentInfo intent = s.getIntents().get(j);
                 if (DEBUG_SHOW_INFO) {
                     Log.v(TAG, "    IntentFilter:");
                     intent.dump(new LogPrinter(Log.VERBOSE, TAG), "      ");
@@ -1803,36 +1840,35 @@
                 if (!intent.debugCheck()) {
                     Log.w(TAG, "==> For Service " + s.getName());
                 }
-                addFilter(intent);
+                addFilter(Pair.create(s, intent));
             }
         }
 
         void removeService(ParsedService s) {
             mServices.remove(s.getComponentName());
             if (DEBUG_SHOW_INFO) {
-                Log.v(TAG, "  " + (s.nonLocalizedLabel != null
-                        ? s.nonLocalizedLabel : s.getName()) + ":");
+                Log.v(TAG, "  service:");
                 Log.v(TAG, "    Class=" + s.getName());
             }
-            final int intentsSize = s.intents.size();
+            final int intentsSize = s.getIntents().size();
             int j;
             for (j = 0; j < intentsSize; j++) {
-                ParsedServiceIntentInfo intent = s.intents.get(j);
+                ParsedIntentInfo intent = s.getIntents().get(j);
                 if (DEBUG_SHOW_INFO) {
                     Log.v(TAG, "    IntentFilter:");
                     intent.dump(new LogPrinter(Log.VERBOSE, TAG), "      ");
                 }
-                removeFilter(intent);
+                removeFilter(Pair.create(s, intent));
             }
         }
 
         @Override
-        protected boolean allowFilterResult(
-                ParsedServiceIntentInfo filter, List<ResolveInfo> dest) {
+        protected boolean allowFilterResult(Pair<ParsedService, ParsedIntentInfo> filter,
+                List<ResolveInfo> dest) {
             for (int i = dest.size() - 1; i >= 0; --i) {
                 ServiceInfo destAi = dest.get(i).serviceInfo;
-                if (Objects.equals(destAi.name, filter.getClassName())
-                        && Objects.equals(destAi.packageName, filter.getPackageName())) {
+                if (Objects.equals(destAi.name, filter.first.getClassName())
+                        && Objects.equals(destAi.packageName, filter.first.getPackageName())) {
                     return false;
                 }
             }
@@ -1840,55 +1876,32 @@
         }
 
         @Override
-        protected ParsedServiceIntentInfo[] newArray(int size) {
-            return new ParsedServiceIntentInfo[size];
+        protected Pair<ParsedService, ParsedIntentInfo>[] newArray(int size) {
+            //noinspection unchecked
+            return (Pair<ParsedService, ParsedIntentInfo>[]) new Pair<?, ?>[size];
         }
 
         @Override
-        protected boolean isFilterStopped(ParsedServiceIntentInfo filter, int userId) {
-            if (!sUserManager.exists(userId)) return true;
-
-            AndroidPackage pkg = sPackageManagerInternal.getPackage(filter.getPackageName());
-            if (pkg == null) {
-                return false;
-            }
-
-            PackageSetting ps = (PackageSetting) sPackageManagerInternal.getPackageSetting(
-                    filter.getPackageName());
-            if (ps == null) {
-                return false;
-            }
-
-            // System apps are never considered stopped for purposes of
-            // filtering, because there may be no way for the user to
-            // actually re-launch them.
-            return (ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) == 0
-                    && ps.getStopped(userId);
+        protected boolean isFilterStopped(Pair<ParsedService, ParsedIntentInfo> filter, int userId) {
+            return ComponentResolver.isFilterStopped(filter, userId);
         }
 
         @Override
         protected boolean isPackageForFilter(String packageName,
-                ParsedServiceIntentInfo info) {
-            return packageName.equals(info.getPackageName());
+                Pair<ParsedService, ParsedIntentInfo> info) {
+            return packageName.equals(info.first.getPackageName());
         }
 
         @Override
-        protected ResolveInfo newResult(ParsedServiceIntentInfo filter,
-                int match, int userId) {
+        protected ResolveInfo newResult(Pair<ParsedService, ParsedIntentInfo> pair, int match,
+                int userId) {
             if (!sUserManager.exists(userId)) return null;
 
-            ParsedService service = null;
+            ParsedService service = pair.first;
+            ParsedIntentInfo filter = pair.second;
 
-            AndroidPackage pkg = sPackageManagerInternal.getPackage(filter.getPackageName());
-            if (pkg != null && pkg.getServices() != null) {
-                for (ParsedService parsedService : pkg.getServices()) {
-                    if (Objects.equals(parsedService.className, filter.getClassName())) {
-                        service = parsedService;
-                    }
-                }
-            }
-
-            if (service == null) {
+            AndroidPackage pkg = sPackageManagerInternal.getPackage(service.getPackageName());
+            if (pkg == null) {
                 return null;
             }
 
@@ -1897,13 +1910,13 @@
             }
 
             PackageSetting ps = (PackageSetting) sPackageManagerInternal.getPackageSetting(
-                    filter.getPackageName());
+                    service.getPackageName());
             if (ps == null) {
                 return null;
             }
             final PackageUserState userState = ps.readUserState(userId);
             ServiceInfo si = PackageInfoUtils.generateServiceInfo(pkg, service, mFlags,
-                    userState, userId);
+                    userState, userId, ps);
             if (si == null) {
                 return null;
             }
@@ -1930,12 +1943,13 @@
                 res.filter = filter;
             }
             res.priority = filter.getPriority();
-            res.preferredOrder = pkg.getPreferredOrder();
+            // TODO(b/135203078): This field was unwritten and does nothing
+//            res.preferredOrder = pkg.getPreferredOrder();
             res.match = match;
-            res.isDefault = filter.hasDefault;
-            res.labelRes = filter.labelRes;
-            res.nonLocalizedLabel = filter.nonLocalizedLabel;
-            res.icon = filter.icon;
+            res.isDefault = filter.isHasDefault();
+            res.labelRes = filter.getLabelRes();
+            res.nonLocalizedLabel = filter.getNonLocalizedLabel();
+            res.icon = filter.getIcon();
             res.system = res.serviceInfo.applicationInfo.isSystemApp();
             return res;
         }
@@ -1947,25 +1961,17 @@
 
         @Override
         protected void dumpFilter(PrintWriter out, String prefix,
-                ParsedServiceIntentInfo filter) {
-            ParsedService service = null;
-
-            AndroidPackage pkg = sPackageManagerInternal.getPackage(filter.getPackageName());
-            if (pkg != null && pkg.getServices() != null) {
-                for (ParsedService parsedService : pkg.getServices()) {
-                    if (Objects.equals(parsedService.className, filter.getClassName())) {
-                        service = parsedService;
-                    }
-                }
-            }
+                Pair<ParsedService, ParsedIntentInfo> pair) {
+            ParsedService service = pair.first;
+            ParsedIntentInfo filter = pair.second;
 
             out.print(prefix);
             out.print(Integer.toHexString(System.identityHashCode(service)));
             out.print(' ');
-            ComponentName.printShortString(out, filter.getPackageName(), filter.getClassName());
+            ComponentName.printShortString(out, service.getPackageName(), service.getClassName());
             out.print(" filter ");
             out.print(Integer.toHexString(System.identityHashCode(filter)));
-            if (service != null && service.getPermission() != null) {
+            if (service.getPermission() != null) {
                 out.print(" permission "); out.println(service.getPermission());
             } else {
                 out.println();
@@ -1973,22 +1979,30 @@
         }
 
         @Override
-        protected Object filterToLabel(ParsedServiceIntentInfo filter) {
+        protected Object filterToLabel(Pair<ParsedService, ParsedIntentInfo> filter) {
             return filter;
         }
 
         protected void dumpFilterLabel(PrintWriter out, String prefix, Object label, int count) {
-            final ParsedServiceIntentInfo service = (ParsedServiceIntentInfo) label;
+            @SuppressWarnings("unchecked") final Pair<ParsedService, ParsedIntentInfo> pair =
+                    (Pair<ParsedService, ParsedIntentInfo>) label;
             out.print(prefix);
-            out.print(Integer.toHexString(System.identityHashCode(service)));
+            out.print(Integer.toHexString(System.identityHashCode(pair.first)));
             out.print(' ');
-            ComponentName.printShortString(out, service.getPackageName(), service.getClassName());
+            ComponentName.printShortString(out, pair.first.getPackageName(),
+                    pair.first.getClassName());
             if (count > 1) {
                 out.print(" ("); out.print(count); out.print(" filters)");
             }
             out.println();
         }
 
+        @Override
+        protected IntentFilter getIntentFilter(
+                @NonNull Pair<ParsedService, ParsedIntentInfo> input) {
+            return input.second;
+        }
+
         // Keys are String (activity class name), values are Activity.
         private final ArrayMap<ComponentName, ParsedService> mServices = new ArrayMap<>();
         private int mFlags;
@@ -2075,11 +2089,40 @@
                 i--;
             }
         }
+
+        @Override
+        protected IntentFilter getIntentFilter(
+                @NonNull AuxiliaryResolveInfo.AuxiliaryFilter input) {
+            return input;
+        }
+    }
+
+    private static boolean isFilterStopped(Pair<? extends ParsedComponent, ParsedIntentInfo> pair,
+            int userId) {
+        if (!sUserManager.exists(userId)) {
+            return true;
+        }
+
+        AndroidPackage pkg = sPackageManagerInternal.getPackage(pair.first.getPackageName());
+        if (pkg == null) {
+            return false;
+        }
+
+        PackageSetting ps = (PackageSetting) sPackageManagerInternal.getPackageSetting(
+                pair.first.getPackageName());
+        if (ps == null) {
+            return false;
+        }
+
+        // System apps are never considered stopped for purposes of
+        // filtering, because there may be no way for the user to
+        // actually re-launch them.
+        return !ps.isSystem() && ps.getStopped(userId);
     }
 
     /** Generic to create an {@link Iterator} for a data type */
     static class IterGenerator<E> {
-        public Iterator<E> generate(ParsedActivityIntentInfo info) {
+        public Iterator<E> generate(ParsedIntentInfo info) {
             return null;
         }
     }
@@ -2087,7 +2130,7 @@
     /** Create an {@link Iterator} for intent actions */
     static class ActionIterGenerator extends IterGenerator<String> {
         @Override
-        public Iterator<String> generate(ParsedActivityIntentInfo info) {
+        public Iterator<String> generate(ParsedIntentInfo info) {
             return info.actionsIterator();
         }
     }
@@ -2095,7 +2138,7 @@
     /** Create an {@link Iterator} for intent categories */
     static class CategoriesIterGenerator extends IterGenerator<String> {
         @Override
-        public Iterator<String> generate(ParsedActivityIntentInfo info) {
+        public Iterator<String> generate(ParsedIntentInfo info) {
             return info.categoriesIterator();
         }
     }
@@ -2103,7 +2146,7 @@
     /** Create an {@link Iterator} for intent schemes */
     static class SchemesIterGenerator extends IterGenerator<String> {
         @Override
-        public Iterator<String> generate(ParsedActivityIntentInfo info) {
+        public Iterator<String> generate(ParsedIntentInfo info) {
             return info.schemesIterator();
         }
     }
@@ -2111,8 +2154,21 @@
     /** Create an {@link Iterator} for intent authorities */
     static class AuthoritiesIterGenerator extends IterGenerator<IntentFilter.AuthorityEntry> {
         @Override
-        public Iterator<IntentFilter.AuthorityEntry> generate(ParsedActivityIntentInfo info) {
+        public Iterator<IntentFilter.AuthorityEntry> generate(ParsedIntentInfo info) {
             return info.authoritiesIterator();
         }
     }
+
+    /**
+     * Removes MIME type from the group, by delegating to IntentResolvers
+     * @return true if any intent filters were changed due to this update
+     */
+    boolean updateMimeGroup(String packageName, String group) {
+        boolean hasChanges = mActivities.updateMimeGroup(packageName, group);
+        hasChanges |= mProviders.updateMimeGroup(packageName, group);
+        hasChanges |= mReceivers.updateMimeGroup(packageName, group);
+        hasChanges |= mServices.updateMimeGroup(packageName, group);
+
+        return hasChanges;
+    }
 }
diff --git a/services/core/java/com/android/server/pm/CrossProfileAppsService.java b/services/core/java/com/android/server/pm/CrossProfileAppsService.java
index 027a302..486282a 100644
--- a/services/core/java/com/android/server/pm/CrossProfileAppsService.java
+++ b/services/core/java/com/android/server/pm/CrossProfileAppsService.java
@@ -16,6 +16,7 @@
 package com.android.server.pm;
 
 import android.content.Context;
+import android.content.pm.CrossProfileAppsInternal;
 
 import com.android.server.SystemService;
 
@@ -30,5 +31,6 @@
     @Override
     public void onStart() {
         publishBinderService(Context.CROSS_PROFILE_APPS_SERVICE, mServiceImpl);
+        publishLocalService(CrossProfileAppsInternal.class, mServiceImpl.getLocalService());
     }
 }
diff --git a/services/core/java/com/android/server/pm/CrossProfileAppsServiceImpl.java b/services/core/java/com/android/server/pm/CrossProfileAppsServiceImpl.java
index 74d2efe..ec9b37d 100644
--- a/services/core/java/com/android/server/pm/CrossProfileAppsServiceImpl.java
+++ b/services/core/java/com/android/server/pm/CrossProfileAppsServiceImpl.java
@@ -37,6 +37,7 @@
 import android.content.Intent;
 import android.content.PermissionChecker;
 import android.content.pm.ActivityInfo;
+import android.content.pm.CrossProfileAppsInternal;
 import android.content.pm.ICrossProfileApps;
 import android.content.pm.IPackageManager;
 import android.content.pm.PackageInfo;
@@ -46,7 +47,6 @@
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.stats.devicepolicy.DevicePolicyEnums;
@@ -54,10 +54,10 @@
 import android.util.Slog;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.app.IAppOpsService;
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.FunctionalUtils.ThrowingRunnable;
+import com.android.internal.util.FunctionalUtils.ThrowingSupplier;
 import com.android.server.LocalServices;
-import com.android.server.appop.AppOpsService;
 import com.android.server.wm.ActivityTaskManagerInternal;
 
 import java.util.ArrayList;
@@ -67,9 +67,10 @@
 public class CrossProfileAppsServiceImpl extends ICrossProfileApps.Stub {
     private static final String TAG = "CrossProfileAppsService";
 
+    private final LocalService mLocalService = new LocalService();
+
     private Context mContext;
     private Injector mInjector;
-    private AppOpsService mAppOpsService;
 
     public CrossProfileAppsServiceImpl(Context context) {
         this(context, new InjectorImpl(context));
@@ -100,6 +101,7 @@
     public void startActivityAsUser(
             IApplicationThread caller,
             String callingPackage,
+            String callingFeatureId,
             ComponentName component,
             @UserIdInt int userId,
             boolean launchMainActivity) throws RemoteException {
@@ -165,7 +167,9 @@
         launchIntent.setPackage(null);
         launchIntent.setComponent(component);
         mInjector.getActivityTaskManagerInternal().startActivityAsUser(
-                caller, callingPackage, launchIntent,
+                caller, callingPackage, callingFeatureId, launchIntent,
+                /* resultTo= */ null,
+                Intent.FLAG_ACTIVITY_NEW_TASK,
                 launchMainActivity
                         ? ActivityOptions.makeOpenCrossProfileAppsAnimation().toBundle()
                         : null,
@@ -176,8 +180,10 @@
     public void startActivityAsUserByIntent(
             IApplicationThread caller,
             String callingPackage,
+            String callingFeatureId,
             Intent intent,
-            @UserIdInt int userId) throws RemoteException {
+            @UserIdInt int userId,
+            IBinder callingActivity) throws RemoteException {
         Objects.requireNonNull(callingPackage);
         Objects.requireNonNull(intent);
         Objects.requireNonNull(intent.getComponent(), "The intent must have a Component set");
@@ -203,7 +209,7 @@
         }
 
         if (callerUserId != userId) {
-            if (!hasInteractAcrossProfilesPermission(callingPackage)) {
+            if (!hasCallerGotInteractAcrossProfilesPermission(callingPackage)) {
                 throw new SecurityException("Attempt to launch activity without required "
                         + android.Manifest.permission.INTERACT_ACROSS_PROFILES + " permission"
                         + " or target user is not in the same profile group.");
@@ -212,21 +218,37 @@
 
         verifyActivityCanHandleIntent(launchIntent, callingUid, userId);
 
-        mInjector.getActivityTaskManagerInternal().startActivityAsUser(
-                caller, callingPackage, launchIntent, /* options= */ null, userId);
+        mInjector.getActivityTaskManagerInternal()
+                .startActivityAsUser(
+                        caller,
+                        callingPackage,
+                        callingFeatureId,
+                        launchIntent,
+                        callingActivity,
+                        /* startFlags= */ 0,
+                        /* options= */ null,
+                        userId);
+        logStartActivityByIntent(callingPackage);
+    }
+
+    private void logStartActivityByIntent(String packageName) {
+        DevicePolicyEventLogger
+                .createEvent(DevicePolicyEnums.START_ACTIVITY_BY_INTENT)
+                .setStrings(packageName)
+                .setBoolean(isCallingUserAManagedProfile())
+                .write();
     }
 
     @Override
     public boolean canRequestInteractAcrossProfiles(String callingPackage) {
         Objects.requireNonNull(callingPackage);
         verifyCallingPackage(callingPackage);
-        return canRequestInteractAcrossProfilesUnchecked(
-                callingPackage, mInjector.getCallingUserId());
+        return canRequestInteractAcrossProfilesUnchecked(callingPackage);
     }
 
-    private boolean canRequestInteractAcrossProfilesUnchecked(
-            String packageName, @UserIdInt int userId) {
-        List<UserHandle> targetUserProfiles = getTargetUserProfilesUnchecked(packageName, userId);
+    private boolean canRequestInteractAcrossProfilesUnchecked(String packageName) {
+        List<UserHandle> targetUserProfiles =
+                getTargetUserProfilesUnchecked(packageName, mInjector.getCallingUserId());
         if (targetUserProfiles.isEmpty()) {
             return false;
         }
@@ -258,37 +280,23 @@
         if (targetUserProfiles.isEmpty()) {
             return false;
         }
-
-        return hasInteractAcrossProfilesPermission(callingPackage);
+        return hasCallerGotInteractAcrossProfilesPermission(callingPackage);
     }
 
-    private boolean hasInteractAcrossProfilesPermission(String callingPackage) {
-        final int callingUid = mInjector.getCallingUid();
-        final int callingPid = mInjector.getCallingPid();
-        return isPermissionGranted(Manifest.permission.INTERACT_ACROSS_USERS_FULL, callingUid)
-                || isPermissionGranted(Manifest.permission.INTERACT_ACROSS_USERS, callingUid)
-                || PermissionChecker.checkPermissionForPreflight(
-                        mContext,
-                        Manifest.permission.INTERACT_ACROSS_PROFILES,
-                        callingPid,
-                        callingUid,
-                        callingPackage) == PermissionChecker.PERMISSION_GRANTED;
+    private boolean hasCallerGotInteractAcrossProfilesPermission(String callingPackage) {
+        return hasInteractAcrossProfilesPermission(
+                callingPackage, mInjector.getCallingUid(), mInjector.getCallingPid());
     }
 
     private boolean isCrossProfilePackageWhitelisted(String packageName) {
-        final long ident = mInjector.clearCallingIdentity();
-        try {
-            return mInjector.getDevicePolicyManagerInternal()
-                    .getAllCrossProfilePackages().contains(packageName);
-        } finally {
-            mInjector.restoreCallingIdentity(ident);
-        }
+        return mInjector.withCleanCallingIdentity(() ->
+                mInjector.getDevicePolicyManagerInternal()
+                        .getAllCrossProfilePackages().contains(packageName));
     }
 
     private List<UserHandle> getTargetUserProfilesUnchecked(
             String packageName, @UserIdInt int userId) {
-        final long ident = mInjector.clearCallingIdentity();
-        try {
+        return mInjector.withCleanCallingIdentity(() -> {
             final int[] enabledProfileIds =
                     mInjector.getUserManager().getEnabledProfileIds(userId);
 
@@ -303,15 +311,12 @@
                 targetProfiles.add(UserHandle.of(profileId));
             }
             return targetProfiles;
-        } finally {
-            mInjector.restoreCallingIdentity(ident);
-        }
+        });
     }
 
     private boolean isPackageEnabled(String packageName, @UserIdInt int userId) {
         final int callingUid = mInjector.getCallingUid();
-        final long ident = mInjector.clearCallingIdentity();
-        try {
+        return mInjector.withCleanCallingIdentity(() -> {
             final PackageInfo info = mInjector.getPackageManagerInternal()
                     .getPackageInfo(
                             packageName,
@@ -319,15 +324,12 @@
                             callingUid,
                             userId);
             return info != null && info.applicationInfo.enabled;
-        } finally {
-            mInjector.restoreCallingIdentity(ident);
-        }
+        });
     }
 
     private void verifyActivityCanHandleIntent(
             Intent launchIntent, int callingUid, @UserIdInt int userId) {
-        final long ident = mInjector.clearCallingIdentity();
-        try {
+        mInjector.withCleanCallingIdentity(() -> {
             final List<ResolveInfo> activities =
                     mInjector.getPackageManagerInternal().queryIntentActivities(
                             launchIntent,
@@ -340,9 +342,7 @@
                 return;
             }
             throw new SecurityException("Activity cannot handle intent");
-        } finally {
-            mInjector.restoreCallingIdentity(ident);
-        }
+        });
     }
 
     /**
@@ -351,8 +351,7 @@
      */
     private void verifyActivityCanHandleIntentAndExported(
             Intent launchIntent, ComponentName component, int callingUid, @UserIdInt int userId) {
-        final long ident = mInjector.clearCallingIdentity();
-        try {
+        mInjector.withCleanCallingIdentity(() -> {
             final List<ResolveInfo> apps =
                     mInjector.getPackageManagerInternal().queryIntentActivities(
                             launchIntent,
@@ -371,11 +370,15 @@
             }
             throw new SecurityException("Attempt to launch activity without "
                     + " category Intent.CATEGORY_LAUNCHER or activity is not exported" + component);
-        } finally {
-            mInjector.restoreCallingIdentity(ident);
-        }
+        });
     }
 
+    /**
+     * See {@link android.content.pm.CrossProfileApps#setInteractAcrossProfilesAppOp(String, int)}.
+     *
+     * <p>Logs metrics. Use {@link #setInteractAcrossProfilesAppOpUnchecked(String, int, boolean)}
+     * to avoid permission checks or to specify not to log metrics.
+     */
     @Override
     public void setInteractAcrossProfilesAppOp(String packageName, @Mode int newMode) {
         final int callingUid = mInjector.getCallingUid();
@@ -385,7 +388,18 @@
                     "INTERACT_ACROSS_USERS or INTERACT_ACROSS_USERS_FULL is required to set the"
                             + " app-op for interacting across profiles.");
         }
-        final int callingUserId = mInjector.getCallingUserId();
+        if (!isPermissionGranted(Manifest.permission.MANAGE_APP_OPS_MODES, callingUid)
+                && !isPermissionGranted(
+                        Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES, callingUid)) {
+            throw new SecurityException(
+                    "MANAGE_APP_OPS_MODES or CONFIGURE_INTERACT_ACROSS_PROFILES is required to set"
+                            + " the app-op for interacting across profiles.");
+        }
+        setInteractAcrossProfilesAppOpUnchecked(packageName, newMode, /* logMetrics= */ true);
+    }
+
+    private void setInteractAcrossProfilesAppOpUnchecked(
+            String packageName, @Mode int newMode, boolean logMetrics) {
         if (newMode == AppOpsManager.MODE_ALLOWED
                 && !canConfigureInteractAcrossProfiles(packageName)) {
             // The user should not be prompted for apps that cannot request to interact across
@@ -395,19 +409,19 @@
             return;
         }
         final int[] profileIds =
-                mInjector.getUserManager().getProfileIds(callingUserId, /* enabledOnly= */ false);
+                mInjector.getUserManager()
+                        .getProfileIds(mInjector.getCallingUserId(), /* enabledOnly= */ false);
         for (int profileId : profileIds) {
             if (!isPackageInstalled(packageName, profileId)) {
                 continue;
             }
-            setInteractAcrossProfilesAppOpForUser(packageName, newMode, profileId);
+            setInteractAcrossProfilesAppOpForUser(packageName, newMode, profileId, logMetrics);
         }
     }
 
     private boolean isPackageInstalled(String packageName, @UserIdInt int userId) {
         final int callingUid = mInjector.getCallingUid();
-        final long identity = mInjector.clearCallingIdentity();
-        try {
+        return mInjector.withCleanCallingIdentity(() -> {
             final PackageInfo info =
                     mInjector.getPackageManagerInternal()
                             .getPackageInfo(
@@ -416,22 +430,20 @@
                                     callingUid,
                                     userId);
             return info != null;
-        } finally {
-            mInjector.restoreCallingIdentity(identity);
-        }
+        });
     }
 
     private void setInteractAcrossProfilesAppOpForUser(
-            String packageName, @Mode int newMode, @UserIdInt int userId) {
+            String packageName, @Mode int newMode, @UserIdInt int userId, boolean logMetrics) {
         try {
-            setInteractAcrossProfilesAppOpForUserOrThrow(packageName, newMode, userId);
+            setInteractAcrossProfilesAppOpForUserOrThrow(packageName, newMode, userId, logMetrics);
         } catch (PackageManager.NameNotFoundException e) {
             Slog.e(TAG, "Missing package " + packageName + " on user ID " + userId, e);
         }
     }
 
     private void setInteractAcrossProfilesAppOpForUserOrThrow(
-            String packageName, @Mode int newMode, @UserIdInt int userId)
+            String packageName, @Mode int newMode, @UserIdInt int userId, boolean logMetrics)
             throws PackageManager.NameNotFoundException {
         final int uid = mInjector.getPackageManager()
                 .getPackageUidAsUser(packageName, /* flags= */ 0, userId);
@@ -440,19 +452,53 @@
                     + packageName + " on user ID " + userId);
             return;
         }
-        mInjector.getAppOpsManager()
-                .setMode(OP_INTERACT_ACROSS_PROFILES,
-                        uid,
-                        packageName,
-                        newMode);
+        final int callingUid = mInjector.getCallingUid();
+        if (isPermissionGranted(
+                Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES, callingUid)) {
+            // Clear calling identity since the CONFIGURE_INTERACT_ACROSS_PROFILES permission allows
+            // this particular app-op to be modified without the broader app-op permissions.
+            mInjector.withCleanCallingIdentity(() ->
+                    mInjector.getAppOpsManager()
+                            .setMode(OP_INTERACT_ACROSS_PROFILES, uid, packageName, newMode));
+        } else {
+            mInjector.getAppOpsManager()
+                    .setMode(OP_INTERACT_ACROSS_PROFILES, uid, packageName, newMode);
+        }
         sendCanInteractAcrossProfilesChangedBroadcast(packageName, uid, UserHandle.of(userId));
+        maybeLogSetInteractAcrossProfilesAppOp(packageName, newMode, userId, logMetrics, uid);
     }
 
+    private void maybeLogSetInteractAcrossProfilesAppOp(
+            String packageName,
+            @Mode int newMode,
+            @UserIdInt int userId,
+            boolean logMetrics,
+            int uid) {
+        if (!logMetrics) {
+            return;
+        }
+        if (userId != mInjector.getCallingUserId()) {
+            // Only log once per profile group by checking for the calling user ID.
+            return;
+        }
+        DevicePolicyEventLogger
+                .createEvent(DevicePolicyEnums.SET_INTERACT_ACROSS_PROFILES_APP_OP)
+                .setStrings(packageName)
+                .setInt(newMode)
+                .setBoolean(appDeclaresCrossProfileAttribute(uid))
+                .write();
+    }
+
+    /**
+     * Returns whether the given app-op mode is equivalent to the currently-set app-op of the given
+     * package name and UID. Clears identity to avoid permission checks, so ensure the caller does
+     * any necessary permission checks.
+     */
     private boolean currentModeEquals(@Mode int otherMode, String packageName, int uid) {
         final String op =
                 AppOpsManager.permissionToOp(Manifest.permission.INTERACT_ACROSS_PROFILES);
-        return otherMode ==
-                mInjector.getAppOpsManager().unsafeCheckOpNoThrow(op, uid, packageName);
+        return mInjector.withCleanCallingIdentity(() -> otherMode
+                == mInjector.getAppOpsManager().unsafeCheckOpNoThrow(op, uid, packageName));
     }
 
     private void sendCanInteractAcrossProfilesChangedBroadcast(
@@ -493,8 +539,7 @@
     }
 
     private boolean hasOtherProfileWithPackageInstalled(String packageName, @UserIdInt int userId) {
-        final long ident = mInjector.clearCallingIdentity();
-        try {
+        return mInjector.withCleanCallingIdentity(() -> {
             final int[] profileIds =
                     mInjector.getUserManager().getProfileIds(userId, /* enabledOnly= */ false);
             for (int profileId : profileIds) {
@@ -502,10 +547,8 @@
                     return true;
                 }
             }
-        } finally {
-            mInjector.restoreCallingIdentity(ident);
-        }
-        return false;
+            return false;
+        });
     }
 
     @Override
@@ -524,13 +567,13 @@
         setInteractAcrossProfilesAppOp(packageName, AppOpsManager.opToDefaultMode(op));
     }
 
+    CrossProfileAppsInternal getLocalService() {
+        return mLocalService;
+    }
+
     private boolean isSameProfileGroup(@UserIdInt int callerUserId, @UserIdInt int userId) {
-        final long ident = mInjector.clearCallingIdentity();
-        try {
-            return mInjector.getUserManager().isSameProfileGroup(callerUserId, userId);
-        } finally {
-            mInjector.restoreCallingIdentity(ident);
-        }
+        return mInjector.withCleanCallingIdentity(() ->
+                mInjector.getUserManager().isSameProfileGroup(callerUserId, userId));
     }
 
     /**
@@ -545,12 +588,27 @@
                 permission, uid, /* owningUid= */-1, /* exported= */ true);
     }
 
-    private AppOpsService getAppOpsService() {
-        if (mAppOpsService == null) {
-            IBinder b = ServiceManager.getService(Context.APP_OPS_SERVICE);
-            mAppOpsService = (AppOpsService) IAppOpsService.Stub.asInterface(b);
+    private boolean isCallingUserAManagedProfile() {
+        return isManagedProfile(mInjector.getCallingUserId());
+    }
+
+    private boolean isManagedProfile(@UserIdInt int userId) {
+        return mInjector.withCleanCallingIdentity(()
+                -> mContext.getSystemService(UserManager.class).isManagedProfile(userId));
+    }
+
+    private boolean hasInteractAcrossProfilesPermission(String packageName, int uid, int pid) {
+        if (isPermissionGranted(Manifest.permission.INTERACT_ACROSS_USERS_FULL, uid)
+                || isPermissionGranted(Manifest.permission.INTERACT_ACROSS_USERS, uid)) {
+            return true;
         }
-        return mAppOpsService;
+        return PermissionChecker.PERMISSION_GRANTED
+                == PermissionChecker.checkPermissionForPreflight(
+                        mContext,
+                        Manifest.permission.INTERACT_ACROSS_PROFILES,
+                        pid,
+                        uid,
+                        packageName);
     }
 
     private static class InjectorImpl implements Injector {
@@ -560,42 +618,62 @@
             mContext = context;
         }
 
+        @Override
         public int getCallingUid() {
             return Binder.getCallingUid();
         }
 
+        @Override
         public int getCallingPid() {
             return Binder.getCallingPid();
         }
 
+        @Override
         public int getCallingUserId() {
             return UserHandle.getCallingUserId();
         }
 
+        @Override
         public UserHandle getCallingUserHandle() {
             return Binder.getCallingUserHandle();
         }
 
+        @Override
         public long clearCallingIdentity() {
             return Binder.clearCallingIdentity();
         }
 
+        @Override
         public void restoreCallingIdentity(long token) {
             Binder.restoreCallingIdentity(token);
         }
 
+        @Override
+        public void withCleanCallingIdentity(ThrowingRunnable action) {
+            Binder.withCleanCallingIdentity(action);
+        }
+
+        @Override
+        public final <T> T withCleanCallingIdentity(ThrowingSupplier<T> action) {
+            return Binder.withCleanCallingIdentity(action);
+        }
+
+        @Override
         public UserManager getUserManager() {
             return mContext.getSystemService(UserManager.class);
         }
 
+        @Override
         public PackageManagerInternal getPackageManagerInternal() {
             return LocalServices.getService(PackageManagerInternal.class);
         }
 
+        @Override
         public PackageManager getPackageManager() {
             return mContext.getPackageManager();
         }
 
+        @Override
         public AppOpsManager getAppOpsManager() {
             return mContext.getSystemService(AppOpsManager.class);
         }
@@ -646,6 +724,10 @@
 
         void restoreCallingIdentity(long token);
 
+        void withCleanCallingIdentity(ThrowingRunnable action);
+
+        <T> T withCleanCallingIdentity(ThrowingSupplier<T> action);
+
         UserManager getUserManager();
 
         PackageManagerInternal getPackageManagerInternal();
@@ -666,4 +748,29 @@
 
         int checkComponentPermission(String permission, int uid, int owningUid, boolean exported);
     }
+
+    class LocalService extends CrossProfileAppsInternal {
+
+        @Override
+        public boolean verifyPackageHasInteractAcrossProfilePermission(
+                String packageName, @UserIdInt int userId)
+                throws PackageManager.NameNotFoundException {
+            final int uid = Objects.requireNonNull(
+                    mInjector.getPackageManager().getApplicationInfoAsUser(
+                            Objects.requireNonNull(packageName), /* flags= */ 0, userId)).uid;
+            return verifyUidHasInteractAcrossProfilePermission(packageName, uid);
+        }
+
+        @Override
+        public boolean verifyUidHasInteractAcrossProfilePermission(String packageName, int uid) {
+            Objects.requireNonNull(packageName);
+            return hasInteractAcrossProfilesPermission(
+                    packageName, uid, PermissionChecker.PID_UNKNOWN);
+        }
+
+        @Override
+        public List<UserHandle> getTargetUserProfiles(String packageName, int userId) {
+            return getTargetUserProfilesUnchecked(packageName, userId);
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/pm/CrossProfileIntentResolver.java b/services/core/java/com/android/server/pm/CrossProfileIntentResolver.java
index 0e0096d..8e6b89a 100644
--- a/services/core/java/com/android/server/pm/CrossProfileIntentResolver.java
+++ b/services/core/java/com/android/server/pm/CrossProfileIntentResolver.java
@@ -18,6 +18,9 @@
 package com.android.server.pm;
 
 
+import android.annotation.NonNull;
+import android.content.IntentFilter;
+
 import com.android.server.IntentResolver;
 import java.util.List;
 
@@ -40,4 +43,9 @@
     protected void sortResults(List<CrossProfileIntentFilter> results) {
         //We don't sort the results
     }
+
+    @Override
+    protected IntentFilter getIntentFilter(@NonNull CrossProfileIntentFilter input) {
+        return input;
+    }
 }
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java
index b98bb08..8ad3e9d 100644
--- a/services/core/java/com/android/server/pm/Installer.java
+++ b/services/core/java/com/android/server/pm/Installer.java
@@ -611,10 +611,10 @@
     /**
      * Bind mount private volume CE and DE mirror storage.
      */
-    public void onPrivateVolumeMounted(String volumeUuid) throws InstallerException {
+    public void tryMountDataMirror(String volumeUuid) throws InstallerException {
         if (!checkBeforeRemote()) return;
         try {
-            mInstalld.onPrivateVolumeMounted(volumeUuid);
+            mInstalld.tryMountDataMirror(volumeUuid);
         } catch (Exception e) {
             throw InstallerException.from(e);
         }
diff --git a/services/core/java/com/android/server/pm/InstantAppRegistry.java b/services/core/java/com/android/server/pm/InstantAppRegistry.java
index bcfe577..cf85b0f 100644
--- a/services/core/java/com/android/server/pm/InstantAppRegistry.java
+++ b/services/core/java/com/android/server/pm/InstantAppRegistry.java
@@ -24,8 +24,6 @@
 import android.content.pm.InstantAppInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageParser;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.PackageInfoUtils;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
@@ -52,6 +50,8 @@
 import com.android.internal.os.SomeArgs;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.XmlUtils;
+import com.android.server.pm.parsing.PackageInfoUtils;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import libcore.io.IoUtils;
 import libcore.util.HexEncoding;
@@ -694,12 +694,13 @@
             final int packageCount = mService.mPackages.size();
             for (int i = 0; i < packageCount; i++) {
                 final AndroidPackage pkg = mService.mPackages.valueAt(i);
-                if (now - pkg.getLatestPackageUseTimeInMills() < maxInstalledCacheDuration) {
+                final PackageSetting ps = mService.getPackageSetting(pkg.getPackageName());
+                if (ps == null) {
                     continue;
                 }
 
-                final PackageSetting ps = mService.getPackageSetting(pkg.getPackageName());
-                if (ps == null) {
+                if (now - ps.getPkgState().getLatestPackageUseTimeInMills()
+                        < maxInstalledCacheDuration) {
                     continue;
                 }
 
@@ -733,30 +734,28 @@
                     } else if (rhsPkg == null) {
                         return 1;
                     } else {
-                        if (lhsPkg.getLatestPackageUseTimeInMills() >
-                                rhsPkg.getLatestPackageUseTimeInMills()) {
+                        final PackageSetting lhsPs = mService.getPackageSetting(
+                                lhsPkg.getPackageName());
+                        if (lhsPs == null) {
+                            return 0;
+                        }
+
+                        final PackageSetting rhsPs = mService.getPackageSetting(
+                                rhsPkg.getPackageName());
+                        if (rhsPs == null) {
+                            return 0;
+                        }
+
+                        if (lhsPs.getPkgState().getLatestPackageUseTimeInMills() >
+                                rhsPs.getPkgState().getLatestPackageUseTimeInMills()) {
                             return 1;
-                        } else if (lhsPkg.getLatestPackageUseTimeInMills() <
-                                rhsPkg.getLatestPackageUseTimeInMills()) {
+                        } else if (lhsPs.getPkgState().getLatestPackageUseTimeInMills() <
+                                rhsPs.getPkgState().getLatestPackageUseTimeInMills()) {
                             return -1;
+                        } else if (lhsPs.firstInstallTime > rhsPs.firstInstallTime) {
+                            return 1;
                         } else {
-                            final PackageSetting lhsPs = mService.getPackageSetting(
-                                    lhsPkg.getPackageName());
-                            if (lhsPs == null) {
-                                return 0;
-                            }
-
-                            final PackageSetting rhsPs = mService.getPackageSetting(
-                                    rhsPkg.getPackageName());
-                            if (rhsPs == null) {
-                                return 0;
-                            }
-
-                            if (lhsPs.firstInstallTime > rhsPs.firstInstallTime) {
-                                return 1;
-                            } else {
-                                return -1;
-                            }
+                            return -1;
                         }
                     }
                 });
@@ -869,10 +868,9 @@
         // TODO(b/135203078): This may be broken due to inner mutability problems that were broken
         //  as part of moving to PackageInfoUtils. Flags couldn't be determined.
         ApplicationInfo appInfo = PackageInfoUtils.generateApplicationInfo(ps.pkg, 0,
-                ps.readUserState(userId), userId);
+                ps.readUserState(userId), userId, ps);
         if (addApplicationInfo) {
-            return new InstantAppInfo(appInfo,
-                    requestedPermissions, grantedPermissions);
+            return new InstantAppInfo(appInfo, requestedPermissions, grantedPermissions);
         } else {
             return new InstantAppInfo(appInfo.packageName,
                     appInfo.loadLabel(mService.mContext.getPackageManager()),
diff --git a/services/core/java/com/android/server/pm/InstantAppResolver.java b/services/core/java/com/android/server/pm/InstantAppResolver.java
index 8333ae5..0b0f139 100644
--- a/services/core/java/com/android/server/pm/InstantAppResolver.java
+++ b/services/core/java/com/android/server/pm/InstantAppResolver.java
@@ -222,6 +222,7 @@
                         sanitizedIntent,
                         failureIntent,
                         requestObj.callingPackage,
+                        requestObj.callingFeatureId,
                         requestObj.verificationBundle,
                         requestObj.resolvedType,
                         requestObj.userId,
@@ -266,6 +267,7 @@
             @NonNull Intent sanitizedIntent,
             @Nullable Intent failureIntent,
             @NonNull String callingPackage,
+            @Nullable String callingFeatureId,
             @Nullable Bundle verificationBundle,
             @NonNull String resolvedType,
             int userId,
@@ -308,9 +310,10 @@
                         onFailureIntent = failureIntent;
                     }
                     final IIntentSender failureIntentTarget = ActivityManager.getService()
-                            .getIntentSender(
+                            .getIntentSenderWithFeature(
                                     ActivityManager.INTENT_SENDER_ACTIVITY, callingPackage,
-                                    null /*token*/, null /*resultWho*/, 1 /*requestCode*/,
+                                    callingFeatureId, null /*token*/, null /*resultWho*/,
+                                    1 /*requestCode*/,
                                     new Intent[] { onFailureIntent },
                                     new String[] { resolvedType },
                                     PendingIntent.FLAG_CANCEL_CURRENT
@@ -328,9 +331,10 @@
             successIntent.setLaunchToken(token);
             try {
                 final IIntentSender successIntentTarget = ActivityManager.getService()
-                        .getIntentSender(
+                        .getIntentSenderWithFeature(
                                 ActivityManager.INTENT_SENDER_ACTIVITY, callingPackage,
-                                null /*token*/, null /*resultWho*/, 0 /*requestCode*/,
+                                callingFeatureId, null /*token*/, null /*resultWho*/,
+                                0 /*requestCode*/,
                                 new Intent[] { successIntent },
                                 new String[] { resolvedType },
                                 PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT
diff --git a/services/core/java/com/android/server/pm/InstructionSets.java b/services/core/java/com/android/server/pm/InstructionSets.java
index 0a065eb..2d42107 100644
--- a/services/core/java/com/android/server/pm/InstructionSets.java
+++ b/services/core/java/com/android/server/pm/InstructionSets.java
@@ -16,12 +16,14 @@
 
 package com.android.server.pm;
 
-import android.content.pm.parsing.AndroidPackage;
 import android.os.Build;
 import android.os.SystemProperties;
 import android.text.TextUtils;
 import android.util.ArraySet;
 
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
+
 import dalvik.system.VMRuntime;
 
 import java.util.ArrayList;
@@ -109,13 +111,4 @@
 
         return VMRuntime.getInstructionSet(abis.primary);
     }
-
-    public static String getPrimaryInstructionSet(AndroidPackage pkg) {
-        if (pkg.getPrimaryCpuAbi() == null) {
-            return getPreferredInstructionSet();
-        }
-
-        return VMRuntime.getInstructionSet(pkg.getPrimaryCpuAbi());
-    }
-
 }
diff --git a/services/core/java/com/android/server/pm/IntentFilterVerificationState.java b/services/core/java/com/android/server/pm/IntentFilterVerificationState.java
index c97d85d..9dc545a 100644
--- a/services/core/java/com/android/server/pm/IntentFilterVerificationState.java
+++ b/services/core/java/com/android/server/pm/IntentFilterVerificationState.java
@@ -17,7 +17,7 @@
 package com.android.server.pm;
 
 import android.content.pm.PackageManager;
-import android.content.pm.parsing.ComponentParseUtils;
+import android.content.pm.parsing.component.ParsedIntentInfo;
 import android.util.ArraySet;
 import android.util.Slog;
 
@@ -35,7 +35,7 @@
 
     private int mState;
 
-    private ArrayList<ComponentParseUtils.ParsedActivityIntentInfo> mFilters = new ArrayList<>();
+    private ArrayList<ParsedIntentInfo> mFilters = new ArrayList<>();
     private ArraySet<String> mHosts = new ArraySet<>();
     private int mUserId;
 
@@ -66,7 +66,7 @@
         setState(STATE_VERIFICATION_PENDING);
     }
 
-    public ArrayList<ComponentParseUtils.ParsedActivityIntentInfo> getFilters() {
+    public ArrayList<ParsedIntentInfo> getFilters() {
         return mFilters;
     }
 
@@ -123,7 +123,7 @@
         return false;
     }
 
-    public void addFilter(ComponentParseUtils.ParsedActivityIntentInfo filter) {
+    public void addFilter(ParsedIntentInfo filter) {
         mFilters.add(filter);
         mHosts.addAll(filter.getHostsList());
     }
diff --git a/services/core/java/com/android/server/pm/KeySetManagerService.java b/services/core/java/com/android/server/pm/KeySetManagerService.java
index f9cfee1..dabcc35 100644
--- a/services/core/java/com/android/server/pm/KeySetManagerService.java
+++ b/services/core/java/com/android/server/pm/KeySetManagerService.java
@@ -21,14 +21,13 @@
 import static com.android.server.pm.PackageManagerService.SCAN_INITIAL;
 
 import android.content.pm.PackageParser;
-import android.content.pm.parsing.AndroidPackage;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Base64;
 import android.util.LongSparseArray;
 import android.util.Slog;
 
-import com.android.internal.util.Preconditions;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java
index 3e64e98..261caba 100644
--- a/services/core/java/com/android/server/pm/LauncherAppsService.java
+++ b/services/core/java/com/android/server/pm/LauncherAppsService.java
@@ -17,6 +17,7 @@
 package com.android.server.pm;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.annotation.UserIdInt;
 import android.app.ActivityManager;
 import android.app.ActivityManagerInternal;
@@ -49,7 +50,6 @@
 import android.content.pm.ShortcutServiceInternal;
 import android.content.pm.ShortcutServiceInternal.ShortcutChangeListener;
 import android.content.pm.UserInfo;
-import android.content.pm.parsing.AndroidPackage;
 import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Binder;
@@ -74,6 +74,7 @@
 import com.android.internal.util.ArrayUtils;
 import com.android.server.LocalServices;
 import com.android.server.SystemService;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 import com.android.server.wm.ActivityTaskManagerInternal;
 
 import java.util.ArrayList;
@@ -305,6 +306,10 @@
             final int callingUserId = injectCallingUserId();
 
             if (targetUserId == callingUserId) return true;
+            if (injectHasInteractAcrossUsersFullPermission(injectBinderCallingPid(),
+                    injectBinderCallingUid())) {
+                return true;
+            }
 
             long ident = injectClearCallingIdentity();
             try {
@@ -661,6 +666,32 @@
             }
         }
 
+        private void ensureStrictAccessShortcutsPermission(@NonNull String callingPackage) {
+            verifyCallingPackage(callingPackage);
+            if (!injectHasAccessShortcutsPermission(injectBinderCallingPid(),
+                    injectBinderCallingUid())) {
+                throw new SecurityException("Caller can't access shortcut information");
+            }
+        }
+
+        /**
+         * Returns true if the caller has the "ACCESS_SHORTCUTS" permission.
+         */
+        @VisibleForTesting
+        boolean injectHasAccessShortcutsPermission(int callingPid, int callingUid) {
+            return mContext.checkPermission(android.Manifest.permission.ACCESS_SHORTCUTS,
+                    callingPid, callingUid) == PackageManager.PERMISSION_GRANTED;
+        }
+
+        /**
+         * Returns true if the caller has the "INTERACT_ACROSS_USERS_FULL" permission.
+         */
+        @VisibleForTesting
+        boolean injectHasInteractAcrossUsersFullPermission(int callingPid, int callingUid) {
+            return mContext.checkPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL,
+                    callingPid, callingUid) == PackageManager.PERMISSION_GRANTED;
+        }
+
         @Override
         public ParceledListSlice getShortcuts(String callingPackage, long changedSince,
                 String packageName, List shortcutIds, List<LocusId> locusIds,
@@ -710,6 +741,30 @@
         }
 
         @Override
+        public void cacheShortcuts(String callingPackage, String packageName, List<String> ids,
+                UserHandle targetUser) {
+            ensureStrictAccessShortcutsPermission(callingPackage);
+            if (!canAccessProfile(targetUser.getIdentifier(), "Cannot cache shortcuts")) {
+                return;
+            }
+
+            mShortcutServiceInternal.cacheShortcuts(getCallingUserId(),
+                    callingPackage, packageName, ids, targetUser.getIdentifier());
+        }
+
+        @Override
+        public void uncacheShortcuts(String callingPackage, String packageName, List<String> ids,
+                UserHandle targetUser) {
+            ensureStrictAccessShortcutsPermission(callingPackage);
+            if (!canAccessProfile(targetUser.getIdentifier(), "Cannot uncache shortcuts")) {
+                return;
+            }
+
+            mShortcutServiceInternal.uncacheShortcuts(getCallingUserId(),
+                    callingPackage, packageName, ids, targetUser.getIdentifier());
+        }
+
+        @Override
         public int getShortcutIconResId(String callingPackage, String packageName, String id,
                 int targetUserId) {
             ensureShortcutPermission(callingPackage);
@@ -741,8 +796,9 @@
         }
 
         @Override
-        public boolean startShortcut(String callingPackage, String packageName, String shortcutId,
-                Rect sourceBounds, Bundle startActivityOptions, int targetUserId) {
+        public boolean startShortcut(String callingPackage, String packageName, String featureId,
+                String shortcutId, Rect sourceBounds, Bundle startActivityOptions,
+                int targetUserId) {
             verifyCallingPackage(callingPackage);
             if (!canAccessProfile(targetUserId, "Cannot start activity")) {
                 return false;
@@ -766,15 +822,16 @@
             intents[0].setSourceBounds(sourceBounds);
 
             return startShortcutIntentsAsPublisher(
-                    intents, packageName, startActivityOptions, targetUserId);
+                    intents, packageName, featureId, startActivityOptions, targetUserId);
         }
 
         private boolean startShortcutIntentsAsPublisher(@NonNull Intent[] intents,
-                @NonNull String publisherPackage, Bundle startActivityOptions, int userId) {
+                @NonNull String publisherPackage, @Nullable String publishedFeatureId,
+                Bundle startActivityOptions, int userId) {
             final int code;
             try {
                 code = mActivityTaskManagerInternal.startActivitiesAsPackage(publisherPackage,
-                        userId, intents, startActivityOptions);
+                        publishedFeatureId, userId, intents, startActivityOptions);
                 if (ActivityManager.isStartResultSuccessful(code)) {
                     return true; // Success
                 } else {
@@ -829,8 +886,8 @@
 
         @Override
         public void startSessionDetailsActivityAsUser(IApplicationThread caller,
-                String callingPackage, SessionInfo sessionInfo, Rect sourceBounds,
-                Bundle opts, UserHandle userHandle) throws RemoteException {
+                String callingPackage, String callingFeatureId, SessionInfo sessionInfo,
+                Rect sourceBounds, Bundle opts, UserHandle userHandle) throws RemoteException {
             int userId = userHandle.getIdentifier();
             if (!canAccessProfile(userId, "Cannot start details activity")) {
                 return;
@@ -846,13 +903,14 @@
                             .authority(callingPackage).build());
             i.setSourceBounds(sourceBounds);
 
-            mActivityTaskManagerInternal.startActivityAsUser(caller, callingPackage, i, opts,
+            mActivityTaskManagerInternal.startActivityAsUser(caller, callingPackage,
+                    callingFeatureId, i, /* resultTo= */ null, Intent.FLAG_ACTIVITY_NEW_TASK, opts,
                     userId);
         }
 
         @Override
         public void startActivityAsUser(IApplicationThread caller, String callingPackage,
-                ComponentName component, Rect sourceBounds,
+                String callingFeatureId, ComponentName component, Rect sourceBounds,
                 Bundle opts, UserHandle user) throws RemoteException {
             if (!canAccessProfile(user.getIdentifier(), "Cannot start activity")) {
                 return;
@@ -906,12 +964,13 @@
                 Binder.restoreCallingIdentity(ident);
             }
             mActivityTaskManagerInternal.startActivityAsUser(caller, callingPackage,
-                    launchIntent, opts, user.getIdentifier());
+                    callingFeatureId, launchIntent, /* resultTo= */ null,
+                    Intent.FLAG_ACTIVITY_NEW_TASK, opts, user.getIdentifier());
         }
 
         @Override
         public void showAppDetailsAsUser(IApplicationThread caller,
-                String callingPackage, ComponentName component,
+                String callingPackage, String callingFeatureId, ComponentName component,
                 Rect sourceBounds, Bundle opts, UserHandle user) throws RemoteException {
             if (!canAccessProfile(user.getIdentifier(), "Cannot show app details")) {
                 return;
@@ -929,7 +988,8 @@
                 Binder.restoreCallingIdentity(ident);
             }
             mActivityTaskManagerInternal.startActivityAsUser(caller, callingPackage,
-                    intent, opts, user.getIdentifier());
+                    callingFeatureId, intent, /* resultTo= */ null, Intent.FLAG_ACTIVITY_NEW_TASK,
+                    opts, user.getIdentifier());
         }
 
         /** Checks if user is a profile of or same as listeningUser.
diff --git a/services/core/java/com/android/server/pm/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java
index ae7a4a7..2df4a92 100644
--- a/services/core/java/com/android/server/pm/OtaDexoptService.java
+++ b/services/core/java/com/android/server/pm/OtaDexoptService.java
@@ -22,7 +22,6 @@
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.pm.IOtaDexopt;
-import android.content.pm.parsing.AndroidPackage;
 import android.os.Environment;
 import android.os.RemoteException;
 import android.os.ResultReceiver;
@@ -35,13 +34,17 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.server.pm.Installer.InstallerException;
 import com.android.server.pm.dex.DexoptOptions;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
 
 import java.io.File;
 import java.io.FileDescriptor;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -118,31 +121,33 @@
         if (mDexoptCommands != null) {
             throw new IllegalStateException("already called prepare()");
         }
-        final List<AndroidPackage> important;
-        final List<AndroidPackage> others;
+        final List<PackageSetting> important;
+        final List<PackageSetting> others;
         synchronized (mPackageManagerService.mLock) {
             // Important: the packages we need to run with ab-ota compiler-reason.
             important = PackageManagerServiceUtils.getPackagesForDexopt(
-                    mPackageManagerService.mPackages.values(), mPackageManagerService,
+                    mPackageManagerService.mSettings.mPackages.values(), mPackageManagerService,
                     DEBUG_DEXOPT);
             // Others: we should optimize this with the (first-)boot compiler-reason.
-            others = new ArrayList<>(mPackageManagerService.mPackages.values());
+            others = new ArrayList<>(mPackageManagerService.mSettings.mPackages.values());
             others.removeAll(important);
+            others.removeIf(PackageManagerServiceUtils.REMOVE_IF_NULL_PKG);
 
             // Pre-size the array list by over-allocating by a factor of 1.5.
             mDexoptCommands = new ArrayList<>(3 * mPackageManagerService.mPackages.size() / 2);
         }
 
-        for (AndroidPackage p : important) {
-            mDexoptCommands.addAll(generatePackageDexopts(p, PackageManagerService.REASON_AB_OTA));
+        for (PackageSetting pkgSetting : important) {
+            mDexoptCommands.addAll(generatePackageDexopts(pkgSetting.pkg, pkgSetting,
+                    PackageManagerService.REASON_AB_OTA));
         }
-        for (AndroidPackage p : others) {
+        for (PackageSetting pkgSetting : others) {
             // We assume here that there are no core apps left.
-            if (p.isCoreApp()) {
+            if (pkgSetting.pkg.isCoreApp()) {
                 throw new IllegalStateException("Found a core app that's not important");
             }
-            mDexoptCommands.addAll(
-                    generatePackageDexopts(p, PackageManagerService.REASON_FIRST_BOOT));
+            mDexoptCommands.addAll(generatePackageDexopts(pkgSetting.pkg, pkgSetting,
+                            PackageManagerService.REASON_FIRST_BOOT));
         }
         completeSize = mDexoptCommands.size();
 
@@ -150,8 +155,8 @@
         if (spaceAvailable < BULK_DELETE_THRESHOLD) {
             Log.i(TAG, "Low on space, deleting oat files in an attempt to free up space: "
                     + PackageManagerServiceUtils.packagesToString(others));
-            for (AndroidPackage pkg : others) {
-                mPackageManagerService.deleteOatArtifactsOfPackage(pkg.getPackageName());
+            for (PackageSetting pkg : others) {
+                mPackageManagerService.deleteOatArtifactsOfPackage(pkg.name);
             }
         }
         long spaceAvailableNow = getAvailableSpace();
@@ -161,16 +166,18 @@
         if (DEBUG_DEXOPT) {
             try {
                 // Output some data about the packages.
-                AndroidPackage lastUsed = Collections.max(important,
-                        (pkg1, pkg2) -> Long.compare(
-                                pkg1.getLatestForegroundPackageUseTimeInMills(),
-                                pkg2.getLatestForegroundPackageUseTimeInMills()));
+                PackageSetting lastUsed = Collections.max(important,
+                        (pkgSetting1, pkgSetting2) -> Long.compare(
+                                pkgSetting1.getPkgState()
+                                        .getLatestForegroundPackageUseTimeInMills(),
+                                pkgSetting2.getPkgState()
+                                        .getLatestForegroundPackageUseTimeInMills()));
                 Log.d(TAG, "A/B OTA: lastUsed time = "
-                        + lastUsed.getLatestForegroundPackageUseTimeInMills());
+                        + lastUsed.getPkgState().getLatestForegroundPackageUseTimeInMills());
                 Log.d(TAG, "A/B OTA: deprioritized packages:");
-                for (AndroidPackage pkg : others) {
-                    Log.d(TAG, "  " + pkg.getPackageName() + " - "
-                            + pkg.getLatestForegroundPackageUseTimeInMills());
+                for (PackageSetting pkgSetting : others) {
+                    Log.d(TAG, "  " + pkgSetting.name + " - "
+                            + pkgSetting.getPkgState().getLatestForegroundPackageUseTimeInMills());
                 }
             } catch (Exception ignored) {
             }
@@ -263,7 +270,7 @@
      * Generate all dexopt commands for the given package.
      */
     private synchronized List<String> generatePackageDexopts(AndroidPackage pkg,
-            int compilationReason) {
+            PackageSetting pkgSetting, int compilationReason) {
         // Intercept and collect dexopt requests
         final List<String> commands = new ArrayList<String>();
         final Installer collectingInstaller = new Installer(mContext, true) {
@@ -333,7 +340,7 @@
         PackageDexOptimizer optimizer = new OTADexoptPackageDexOptimizer(
                 collectingInstaller, mPackageManagerService.mInstallLock, mContext);
 
-        optimizer.performDexOpt(pkg,
+        optimizer.performDexOpt(pkg, pkgSetting,
                 null /* ISAs */,
                 null /* CompilerStats.PackageStats */,
                 mPackageManagerService.getDexManager().getPackageUseInfoOrDefault(
@@ -386,9 +393,12 @@
                 continue;
             }
 
-            final String[] instructionSets = getAppDexInstructionSets(pkg.getPrimaryCpuAbi(),
-                    pkg.getSecondaryCpuAbi());
-            final List<String> paths = pkg.getAllCodePathsExcludingResourceOnly();
+            PackageSetting pkgSetting = mPackageManagerService.getPackageSetting(pkg.getPackageName());
+            final String[] instructionSets = getAppDexInstructionSets(
+                    AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting),
+                    AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting));
+            final List<String> paths =
+                    AndroidPackageUtils.getAllCodePathsExcludingResourceOnly(pkg);
             final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
             for (String dexCodeInstructionSet : dexCodeInstructionSets) {
                 for (String path : paths) {
diff --git a/services/core/java/com/android/server/pm/PackageAbiHelper.java b/services/core/java/com/android/server/pm/PackageAbiHelper.java
index d7c161c..e355bb9 100644
--- a/services/core/java/com/android/server/pm/PackageAbiHelper.java
+++ b/services/core/java/com/android/server/pm/PackageAbiHelper.java
@@ -17,11 +17,12 @@
 package com.android.server.pm;
 
 import android.annotation.Nullable;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ParsedPackage;
 import android.util.Pair;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
 
 import java.io.File;
 import java.util.Set;
@@ -33,7 +34,8 @@
      * Derive and get the location of native libraries for the given package,
      * which varies depending on where and how the package was installed.
      */
-    NativeLibraryPaths getNativeLibraryPaths(AndroidPackage pkg, File appLib32InstallDir);
+    NativeLibraryPaths getNativeLibraryPaths(AndroidPackage pkg, PackageSetting pkgSetting,
+            File appLib32InstallDir);
 
     /**
      * Calculate the abis for a bundled app. These can uniquely be determined from the contents of
@@ -48,9 +50,8 @@
      *
      * If {@code extractLibs} is true, native libraries are extracted from the app if required.
      */
-    Pair<Abis, NativeLibraryPaths> derivePackageAbi(
-            AndroidPackage pkg, String cpuAbiOverride, boolean extractLibs)
-            throws PackageManagerException;
+    Pair<Abis, NativeLibraryPaths> derivePackageAbi(AndroidPackage pkg, boolean isUpdatedSystemApp,
+            String cpuAbiOverride, boolean extractLibs) throws PackageManagerException;
 
     /**
      * Calculates adjusted ABIs for a set of packages belonging to a shared user so that they all
@@ -113,8 +114,9 @@
             this.secondary = secondary;
         }
 
-        Abis(AndroidPackage pkg) {
-            this(pkg.getPrimaryCpuAbi(), pkg.getSecondaryCpuAbi());
+        Abis(AndroidPackage pkg, PackageSetting pkgSetting)  {
+            this(AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting),
+                    AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting));
         }
 
         public void applyTo(ParsedPackage pkg) {
diff --git a/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java b/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java
index e550bae..0bd8b28 100644
--- a/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java
+++ b/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java
@@ -27,9 +27,7 @@
 import static com.android.server.pm.InstructionSets.getPrimaryInstructionSet;
 
 import android.annotation.Nullable;
-import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.parsing.AndroidPackage;
 import android.os.Build;
 import android.os.Environment;
 import android.os.FileUtils;
@@ -40,6 +38,8 @@
 
 import com.android.internal.content.NativeLibraryHelper;
 import com.android.internal.util.ArrayUtils;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
 
 import dalvik.system.VMRuntime;
 
@@ -131,11 +131,11 @@
     }
 
     @Override
-    public NativeLibraryPaths getNativeLibraryPaths(
-            AndroidPackage pkg, File appLib32InstallDir) {
-        return getNativeLibraryPaths(new Abis(pkg), appLib32InstallDir, pkg.getCodePath(),
-                pkg.getBaseCodePath(), pkg.isSystemApp(),
-                pkg.isUpdatedSystemApp());
+    public NativeLibraryPaths getNativeLibraryPaths(AndroidPackage pkg, PackageSetting pkgSetting,
+            File appLib32InstallDir) {
+        return getNativeLibraryPaths(new Abis(pkg, pkgSetting), appLib32InstallDir,
+                pkg.getCodePath(), pkg.getBaseCodePath(), pkg.isSystem(),
+                pkgSetting.getPkgState().isUpdatedSystemApp());
     }
 
     private static NativeLibraryPaths getNativeLibraryPaths(final Abis abis,
@@ -273,7 +273,7 @@
             // ABI that's higher on the list, i.e, a device that's configured to prefer
             // 64 bit apps will see a 64 bit primary ABI,
 
-            if ((pkg.getFlags() & ApplicationInfo.FLAG_MULTIARCH) == 0) {
+            if (!pkg.isMultiArch()) {
                 Slog.e(PackageManagerService.TAG,
                         "Package " + pkg + " has multiple bundled libs, but is not multiarch.");
             }
@@ -293,18 +293,21 @@
     }
 
     @Override
-    public Pair<Abis, NativeLibraryPaths> derivePackageAbi(
-            AndroidPackage pkg, String cpuAbiOverride, boolean extractLibs)
+    public Pair<Abis, NativeLibraryPaths> derivePackageAbi(AndroidPackage pkg,
+            boolean isUpdatedSystemApp, String cpuAbiOverride, boolean extractLibs)
             throws PackageManagerException {
         // Give ourselves some initial paths; we'll come back for another
         // pass once we've determined ABI below.
-        final NativeLibraryPaths initialLibraryPaths = getNativeLibraryPaths(new Abis(pkg),
+        String pkgRawPrimaryCpuAbi = AndroidPackageUtils.getRawPrimaryCpuAbi(pkg);
+        String pkgRawSecondaryCpuAbi = AndroidPackageUtils.getRawSecondaryCpuAbi(pkg);
+        final NativeLibraryPaths initialLibraryPaths = getNativeLibraryPaths(
+                new Abis(pkgRawPrimaryCpuAbi, pkgRawSecondaryCpuAbi),
                 PackageManagerService.sAppLib32InstallDir, pkg.getCodePath(),
-                pkg.getBaseCodePath(), pkg.isSystemApp(),
-                pkg.isUpdatedSystemApp());
+                pkg.getBaseCodePath(), pkg.isSystem(),
+                isUpdatedSystemApp);
 
         // We shouldn't attempt to extract libs from system app when it was not updated.
-        if (PackageManagerService.isSystemApp(pkg) && !pkg.isUpdatedSystemApp()) {
+        if (pkg.isSystem() && !isUpdatedSystemApp) {
             extractLibs = false;
         }
 
@@ -317,7 +320,7 @@
 
         NativeLibraryHelper.Handle handle = null;
         try {
-            handle = NativeLibraryHelper.Handle.create(pkg);
+            handle = AndroidPackageUtils.createNativeLibraryHandle(pkg);
             // TODO(multiArch): This can be null for apps that didn't go through the
             // usual installation process. We can calculate it again, like we
             // do during install time.
@@ -329,33 +332,15 @@
             // Null out the abis so that they can be recalculated.
             primaryCpuAbi = null;
             secondaryCpuAbi = null;
-            if ((pkg.getFlags() & ApplicationInfo.FLAG_MULTIARCH) != 0) {
-                // Warn if we've set an abiOverride for multi-lib packages..
-                // By definition, we need to copy both 32 and 64 bit libraries for
-                // such packages.
-                if (pkg.getCpuAbiOverride() != null
-                        && !NativeLibraryHelper.CLEAR_ABI_OVERRIDE.equals(
-                        pkg.getCpuAbiOverride())) {
-                    Slog.w(PackageManagerService.TAG,
-                            "Ignoring abiOverride for multi arch application.");
-                }
-
+            if (pkg.isMultiArch()) {
                 int abi32 = PackageManager.NO_NATIVE_LIBRARIES;
                 int abi64 = PackageManager.NO_NATIVE_LIBRARIES;
                 if (Build.SUPPORTED_32_BIT_ABIS.length > 0) {
                     if (extractLibs) {
-                        if (onIncremental) {
-                            Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER,
-                                    "incrementalNativeBinaries");
-                            abi32 = NativeLibraryHelper.configureNativeBinariesForSupportedAbi(pkg,
-                                    handle, nativeLibraryRoot, Build.SUPPORTED_32_BIT_ABIS,
-                                    useIsaSpecificSubdirs);
-                        } else {
-                            Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "copyNativeBinaries");
-                            abi32 = NativeLibraryHelper.copyNativeBinariesForSupportedAbi(handle,
-                                    nativeLibraryRoot, Build.SUPPORTED_32_BIT_ABIS,
-                                    useIsaSpecificSubdirs);
-                        }
+                        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "copyNativeBinaries");
+                        abi32 = NativeLibraryHelper.copyNativeBinariesForSupportedAbi(handle,
+                                nativeLibraryRoot, Build.SUPPORTED_32_BIT_ABIS,
+                                useIsaSpecificSubdirs, onIncremental);
                     } else {
                         Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "findSupportedAbi");
                         abi32 = NativeLibraryHelper.findSupportedAbi(
@@ -365,7 +350,7 @@
                 }
 
                 // Shared library native code should be in the APK zip aligned
-                if (abi32 >= 0 && pkg.isLibrary() && extractLibs) {
+                if (abi32 >= 0 && AndroidPackageUtils.isLibrary(pkg) && extractLibs) {
                     throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR,
                             "Shared library native lib extraction not supported");
                 }
@@ -375,18 +360,10 @@
 
                 if (Build.SUPPORTED_64_BIT_ABIS.length > 0) {
                     if (extractLibs) {
-                        if (onIncremental) {
-                            Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER,
-                                    "incrementalNativeBinaries");
-                            abi64 = NativeLibraryHelper.configureNativeBinariesForSupportedAbi(pkg,
-                                    handle, nativeLibraryRoot, Build.SUPPORTED_64_BIT_ABIS,
-                                    useIsaSpecificSubdirs);
-                        } else {
-                            Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "copyNativeBinaries");
-                            abi64 = NativeLibraryHelper.copyNativeBinariesForSupportedAbi(handle,
-                                    nativeLibraryRoot, Build.SUPPORTED_64_BIT_ABIS,
-                                    useIsaSpecificSubdirs);
-                        }
+                        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "copyNativeBinaries");
+                        abi64 = NativeLibraryHelper.copyNativeBinariesForSupportedAbi(handle,
+                                nativeLibraryRoot, Build.SUPPORTED_64_BIT_ABIS,
+                                useIsaSpecificSubdirs, onIncremental);
                     } else {
                         Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "findSupportedAbi");
                         abi64 = NativeLibraryHelper.findSupportedAbi(
@@ -400,7 +377,7 @@
 
                 if (abi64 >= 0) {
                     // Shared library native libs should be in the APK zip aligned
-                    if (extractLibs && pkg.isLibrary()) {
+                    if (extractLibs && AndroidPackageUtils.isLibrary(pkg)) {
                         throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR,
                                 "Shared library native lib extraction not supported");
                     }
@@ -437,15 +414,9 @@
 
                 final int copyRet;
                 if (extractLibs) {
-                    if (onIncremental) {
-                        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "incrementalNativeBinaries");
-                        copyRet = NativeLibraryHelper.configureNativeBinariesForSupportedAbi(pkg,
-                                handle, nativeLibraryRoot, abiList, useIsaSpecificSubdirs);
-                    } else {
-                        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "copyNativeBinaries");
-                        copyRet = NativeLibraryHelper.copyNativeBinariesForSupportedAbi(handle,
-                                nativeLibraryRoot, abiList, useIsaSpecificSubdirs);
-                    }
+                    Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "copyNativeBinaries");
+                    copyRet = NativeLibraryHelper.copyNativeBinariesForSupportedAbi(handle,
+                            nativeLibraryRoot, abiList, useIsaSpecificSubdirs, onIncremental);
                 } else {
                     Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "findSupportedAbi");
                     copyRet = NativeLibraryHelper.findSupportedAbi(handle, abiList);
@@ -459,7 +430,7 @@
 
                 if (copyRet >= 0) {
                     // Shared libraries that have native libs must be multi-architecture
-                    if (pkg.isLibrary()) {
+                    if (AndroidPackageUtils.isLibrary(pkg)) {
                         throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR,
                                 "Shared library with native libs must be multiarch");
                     }
@@ -483,9 +454,8 @@
         final Abis abis = new Abis(primaryCpuAbi, secondaryCpuAbi);
         return new Pair<>(abis,
                 getNativeLibraryPaths(abis, PackageManagerService.sAppLib32InstallDir,
-                        pkg.getCodePath(), pkg.getBaseCodePath(),
-                        pkg.isSystemApp(),
-                        pkg.isUpdatedSystemApp()));
+                        pkg.getCodePath(), pkg.getBaseCodePath(), pkg.isSystem(),
+                        isUpdatedSystemApp));
     }
 
     /**
@@ -506,9 +476,11 @@
     public String getAdjustedAbiForSharedUser(
             Set<PackageSetting> packagesForUser, AndroidPackage scannedPackage) {
         String requiredInstructionSet = null;
-        if (scannedPackage != null && scannedPackage.getPrimaryCpuAbi() != null) {
-            requiredInstructionSet = VMRuntime.getInstructionSet(
-                    scannedPackage.getPrimaryCpuAbi());
+        if (scannedPackage != null) {
+            String pkgRawPrimaryCpuAbi = AndroidPackageUtils.getRawPrimaryCpuAbi(scannedPackage);
+            if (pkgRawPrimaryCpuAbi != null) {
+                requiredInstructionSet = VMRuntime.getInstructionSet(pkgRawPrimaryCpuAbi);
+            }
         }
 
         PackageSetting requirer = null;
@@ -555,7 +527,7 @@
         } else {
             // requirer == null implies that we're updating all ABIs in the set to
             // match scannedPackage.
-            adjustedAbi = scannedPackage.getPrimaryCpuAbi();
+            adjustedAbi = AndroidPackageUtils.getRawPrimaryCpuAbi(scannedPackage);
         }
         return adjustedAbi;
     }
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
index 2b42221..e625aef 100644
--- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java
+++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
@@ -38,13 +38,13 @@
 import static dalvik.system.DexFile.getSafeModeCompilerFilter;
 import static dalvik.system.DexFile.isProfileGuidedCompilerFilter;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.SharedLibraryInfo;
 import android.content.pm.dex.ArtManager;
 import android.content.pm.dex.DexMetadataHelper;
-import android.content.pm.parsing.AndroidPackage;
 import android.os.FileUtils;
 import android.os.PowerManager;
 import android.os.SystemClock;
@@ -63,6 +63,8 @@
 import com.android.server.pm.dex.DexoptOptions;
 import com.android.server.pm.dex.DexoptUtils;
 import com.android.server.pm.dex.PackageDexUsage;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
 
 import dalvik.system.DexFile;
 
@@ -112,7 +114,7 @@
 
     static boolean canOptimizePackage(AndroidPackage pkg) {
         // We do not dexopt a package with no code.
-        if ((pkg.getFlags() & ApplicationInfo.FLAG_HAS_CODE) == 0) {
+        if (!pkg.isHasCode()) {
             return false;
         }
 
@@ -126,7 +128,7 @@
      * <p>Calls to {@link com.android.server.pm.Installer#dexopt} on {@link #mInstaller} are
      * synchronized on {@link #mInstallLock}.
      */
-    int performDexOpt(AndroidPackage pkg,
+    int performDexOpt(AndroidPackage pkg, @NonNull PackageSetting pkgSetting,
             String[] instructionSets, CompilerStats.PackageStats packageStats,
             PackageDexUsage.PackageUseInfo packageUseInfo, DexoptOptions options) {
         if (pkg.getUid() == -1) {
@@ -139,7 +141,7 @@
         synchronized (mInstallLock) {
             final long acquireTime = acquireWakeLockLI(pkg.getUid());
             try {
-                return performDexOptLI(pkg, instructionSets,
+                return performDexOptLI(pkg, pkgSetting, instructionSets,
                         packageStats, packageUseInfo, options);
             } finally {
                 releaseWakeLockLI(acquireTime);
@@ -152,19 +154,21 @@
      * It assumes the install lock is held.
      */
     @GuardedBy("mInstallLock")
-    private int performDexOptLI(AndroidPackage pkg,
+    private int performDexOptLI(AndroidPackage pkg, @NonNull PackageSetting pkgSetting,
             String[] targetInstructionSets, CompilerStats.PackageStats packageStats,
             PackageDexUsage.PackageUseInfo packageUseInfo, DexoptOptions options) {
-        final List<SharedLibraryInfo> sharedLibraries = pkg.getUsesLibraryInfos();
+        final List<SharedLibraryInfo> sharedLibraries = pkgSetting.getPkgState()
+                .getUsesLibraryInfos();
         final String[] instructionSets = targetInstructionSets != null ?
-                targetInstructionSets : getAppDexInstructionSets(pkg.getPrimaryCpuAbi(),
-                pkg.getSecondaryCpuAbi());
+                targetInstructionSets : getAppDexInstructionSets(
+                AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting),
+                AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting));
         final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
-        final List<String> paths = pkg.getAllCodePaths();
+        final List<String> paths = AndroidPackageUtils.getAllCodePaths(pkg);
 
         int sharedGid = UserHandle.getSharedAppGid(pkg.getUid());
         if (sharedGid == -1) {
-            Slog.wtf(TAG, "Well this is awkward; package " + pkg.getAppInfoName() + " had UID "
+            Slog.wtf(TAG, "Well this is awkward; package " + pkg.getPackageName() + " had UID "
                     + pkg.getUid(), new Throwable());
             sharedGid = android.os.Process.NOBODY_UID;
         }
@@ -173,7 +177,7 @@
         // For each code path in the package, this array contains the class loader context that
         // needs to be passed to dexopt in order to ensure correct optimizations.
         boolean[] pathsWithCode = new boolean[paths.size()];
-        pathsWithCode[0] = (pkg.getFlags() & ApplicationInfo.FLAG_HAS_CODE) != 0;
+        pathsWithCode[0] = pkg.isHasCode();
         for (int i = 1; i < paths.size(); i++) {
             pathsWithCode[i] = (pkg.getSplitFlags()[i - 1] & ApplicationInfo.FLAG_HAS_CODE) != 0;
         }
@@ -232,10 +236,10 @@
 
             // Get the dexopt flags after getRealCompilerFilter to make sure we get the correct
             // flags.
-            final int dexoptFlags = getDexFlags(pkg, compilerFilter, options);
+            final int dexoptFlags = getDexFlags(pkg, pkgSetting, compilerFilter, options);
 
             for (String dexCodeIsa : dexCodeInstructionSets) {
-                int newResult = dexOptPath(pkg, path, dexCodeIsa, compilerFilter,
+                int newResult = dexOptPath(pkg, pkgSetting, path, dexCodeIsa, compilerFilter,
                         profileUpdated, classLoaderContexts[i], dexoptFlags, sharedGid,
                         packageStats, options.isDowngrade(), profileName, dexMetadataPath,
                         options.getCompilationReason());
@@ -260,8 +264,8 @@
      *      DEX_OPT_SKIPPED if the path does not need to be deopt-ed.
      */
     @GuardedBy("mInstallLock")
-    private int dexOptPath(AndroidPackage pkg, String path, String isa,
-            String compilerFilter, boolean profileUpdated, String classLoaderContext,
+    private int dexOptPath(AndroidPackage pkg, @NonNull PackageSetting pkgSetting, String path,
+            String isa, String compilerFilter, boolean profileUpdated, String classLoaderContext,
             int dexoptFlags, int uid, CompilerStats.PackageStats packageStats, boolean downgrade,
             String profileName, String dexMetadataPath, int compilationReason) {
         int dexoptNeeded = getDexoptNeeded(path, isa, compilerFilter, classLoaderContext,
@@ -270,10 +274,11 @@
             return DEX_OPT_SKIPPED;
         }
 
-        String oatDir = getPackageOatDirIfSupported(pkg);
+        String oatDir = getPackageOatDirIfSupported(pkg,
+                pkgSetting.getPkgState().isUpdatedSystemApp());
 
         Log.i(TAG, "Running dexopt (dexoptNeeded=" + dexoptNeeded + ") on: " + path
-                + " pkg=" + pkg.getAppInfoPackageName() + " isa=" + isa
+                + " pkg=" + pkg.getPackageName() + " isa=" + isa
                 + " dexoptFlags=" + printDexoptFlags(dexoptFlags)
                 + " targetFilter=" + compilerFilter + " oatDir=" + oatDir
                 + " classLoaderContext=" + classLoaderContext);
@@ -284,9 +289,10 @@
             // TODO: Consider adding 2 different APIs for primary and secondary dexopt.
             // installd only uses downgrade flag for secondary dex files and ignores it for
             // primary dex files.
+            String seInfo = AndroidPackageUtils.getSeInfo(pkg, pkgSetting);
             mInstaller.dexopt(path, uid, pkg.getPackageName(), isa, dexoptNeeded, oatDir,
                     dexoptFlags, compilerFilter, pkg.getVolumeUuid(), classLoaderContext,
-                    pkg.getSeInfo(), false /* downgrade*/, pkg.getTargetSdkVersion(),
+                    seInfo, false /* downgrade*/, pkg.getTargetSdkVersion(),
                     profileName, dexMetadataPath,
                     getAugmentedReasonName(compilationReason, dexMetadataPath != null));
 
@@ -449,13 +455,14 @@
     /**
      * Dumps the dexopt state of the given package {@code pkg} to the given {@code PrintWriter}.
      */
-    void dumpDexoptState(IndentingPrintWriter pw, AndroidPackage pkg,
+    void dumpDexoptState(IndentingPrintWriter pw, AndroidPackage pkg, PackageSetting pkgSetting,
             PackageDexUsage.PackageUseInfo useInfo) {
-        final String[] instructionSets = getAppDexInstructionSets(pkg.getPrimaryCpuAbi(),
-                pkg.getSecondaryCpuAbi());
+        final String[] instructionSets = getAppDexInstructionSets(
+                AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting),
+                AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting));
         final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
 
-        final List<String> paths = pkg.getAllCodePathsExcludingResourceOnly();
+        final List<String> paths = AndroidPackageUtils.getAllCodePathsExcludingResourceOnly(pkg);
 
         for (String path : paths) {
             pw.println("path: " + path);
@@ -546,7 +553,7 @@
     private String getRealCompilerFilter(AndroidPackage pkg, String targetCompilerFilter,
             boolean isUsedByOtherApps) {
         // When an app or priv app is configured to run out of box, only verify it.
-        if (pkg.isEmbeddedDexUsed()
+        if (pkg.isUseEmbeddedDex()
                 || (pkg.isPrivileged()
                     && DexManager.isPackageSelectedToRunOob(pkg.getPackageName()))) {
             return "verify";
@@ -562,8 +569,7 @@
         // PackageDexOptimizer#canOptimizePackage or PackageManagerService#getOptimizablePackages
         // but that would have the downside of possibly producing a big odex files which would
         // be ignored anyway.
-        boolean vmSafeModeOrDebuggable = ((pkg.getFlags() & ApplicationInfo.FLAG_VM_SAFE_MODE) != 0)
-                || ((pkg.getFlags() & ApplicationInfo.FLAG_DEBUGGABLE) != 0);
+        boolean vmSafeModeOrDebuggable = pkg.isVmSafeMode() || pkg.isDebuggable();
 
         if (vmSafeModeOrDebuggable) {
             return getSafeModeCompilerFilter(targetCompilerFilter);
@@ -583,14 +589,15 @@
     }
 
     private int getDexFlags(ApplicationInfo info, String compilerFilter, DexoptOptions options) {
-        return getDexFlags(info.flags, info.getHiddenApiEnforcementPolicy(),
-                info.splitDependencies, info.requestsIsolatedSplitLoading(), compilerFilter,
-                options);
+        return getDexFlags((info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0,
+                info.getHiddenApiEnforcementPolicy(), info.splitDependencies,
+                info.requestsIsolatedSplitLoading(), compilerFilter, options);
     }
-    private int getDexFlags(AndroidPackage pkg, String compilerFilter,
-            DexoptOptions options) {
-        return getDexFlags(pkg.getFlags(), pkg.getHiddenApiEnforcementPolicy(),
-                pkg.getSplitDependencies(), pkg.requestsIsolatedSplitLoading(), compilerFilter,
+    private int getDexFlags(AndroidPackage pkg, @NonNull PackageSetting pkgSetting,
+            String compilerFilter, DexoptOptions options) {
+        return getDexFlags(pkg.isDebuggable(),
+                AndroidPackageUtils.getHiddenApiEnforcementPolicy(pkg, pkgSetting),
+                pkg.getSplitDependencies(), pkg.isIsolatedSplitLoading(), compilerFilter,
                 options);
     }
 
@@ -598,10 +605,9 @@
      * Computes the dex flags that needs to be pass to installd for the given package and compiler
      * filter.
      */
-    private int getDexFlags(int flags, int hiddenApiEnforcementPolicy,
+    private int getDexFlags(boolean debuggable, int hiddenApiEnforcementPolicy,
             SparseArray<int[]> splitDependencies, boolean requestsIsolatedSplitLoading,
             String compilerFilter, DexoptOptions options) {
-        boolean debuggable = (flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
         // Profile guide compiled oat files should not be public unles they are based
         // on profiles from dex metadata archives.
         // The flag isDexoptInstallWithDexMetadata applies only on installs when we know that
@@ -699,8 +705,8 @@
      * not needed or unsupported for the package.
      */
     @Nullable
-    private String getPackageOatDirIfSupported(AndroidPackage pkg) {
-        if (!pkg.canHaveOatDir()) {
+    private String getPackageOatDirIfSupported(AndroidPackage pkg, boolean isUpdatedSystemApp) {
+        if (!AndroidPackageUtils.canHaveOatDir(pkg, isUpdatedSystemApp)) {
             return null;
         }
         File codePath = new File(pkg.getCodePath());
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index 9116c40..33ef2d4 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -129,6 +129,13 @@
     /** Upper bound on number of historical sessions for a UID */
     private static final long MAX_HISTORICAL_SESSIONS = 1048576;
 
+    /**
+     * Allow verification-skipping if it's a development app installed through ADB with
+     * disable verification flag specified.
+     */
+    private static final int ADB_DEV_MODE = PackageManager.INSTALL_FROM_ADB
+            | PackageManager.INSTALL_ALLOW_TEST;
+
     private final Context mContext;
     private final PackageManagerService mPm;
     private final ApexManager mApexManager;
@@ -531,8 +538,10 @@
             params.installFlags &= ~PackageManager.INSTALL_REQUEST_DOWNGRADE;
         }
 
-        if (callingUid != Process.SYSTEM_UID) {
-            // Only system_server can use INSTALL_DISABLE_VERIFICATION.
+        if (callingUid != Process.SYSTEM_UID
+                && (params.installFlags & ADB_DEV_MODE) != ADB_DEV_MODE) {
+            // Only system_server or tools under specific conditions (test app installed
+            // through ADB, and verification disabled flag specified) can disable verification.
             params.installFlags &= ~PackageManager.INSTALL_DISABLE_VERIFICATION;
         }
 
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 0cf8b42..41988d6 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -81,7 +81,6 @@
 import android.content.pm.PackageParser.PackageLite;
 import android.content.pm.PackageParser.PackageParserException;
 import android.content.pm.dex.DexMetadataHelper;
-import android.content.pm.parsing.AndroidPackage;
 import android.content.pm.parsing.ApkLiteParseUtils;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -101,6 +100,7 @@
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.incremental.IncrementalFileStorages;
+import android.os.incremental.IncrementalManager;
 import android.os.storage.StorageManager;
 import android.provider.Settings.Secure;
 import android.stats.devicepolicy.DevicePolicyEnums;
@@ -126,6 +126,7 @@
 import com.android.server.LocalServices;
 import com.android.server.pm.Installer.InstallerException;
 import com.android.server.pm.dex.DexManager;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 import com.android.server.security.VerityUtils;
 
 import libcore.io.IoUtils;
@@ -214,7 +215,7 @@
 
     private static final String PROPERTY_NAME_INHERIT_NATIVE = "pi.inherit_native_on_dont_kill";
     private static final int[] EMPTY_CHILD_SESSION_ARRAY = EmptyArray.INT;
-    private static final FileInfo[] EMPTY_FILE_INFO_ARRAY = {};
+    private static final InstallationFile[] EMPTY_INSTALLATION_FILE_ARRAY = {};
 
     private static final String SYSTEM_DATA_LOADER_PACKAGE = "android";
 
@@ -309,33 +310,8 @@
     @GuardedBy("mLock")
     private int mParentSessionId;
 
-    static class FileInfo {
-        public final int location;
-        public final String name;
-        public final Long lengthBytes;
-        public final byte[] metadata;
-        public final byte[] signature;
-
-        public static FileInfo added(int location, String name, Long lengthBytes, byte[] metadata,
-                byte[] signature) {
-            return new FileInfo(location, name, lengthBytes, metadata, signature);
-        }
-
-        public static FileInfo removed(int location, String name) {
-            return new FileInfo(location, name, -1L, null, null);
-        }
-
-        FileInfo(int location, String name, Long lengthBytes, byte[] metadata, byte[] signature) {
-            this.location = location;
-            this.name = name;
-            this.lengthBytes = lengthBytes;
-            this.metadata = metadata;
-            this.signature = signature;
-        }
-    }
-
     @GuardedBy("mLock")
-    private ArrayList<FileInfo> mFiles = new ArrayList<>();
+    private ArrayList<InstallationFile> mFiles = new ArrayList<>();
 
     @GuardedBy("mLock")
     private boolean mStagedSessionApplied;
@@ -508,7 +484,7 @@
             PackageSessionProvider sessionProvider, Looper looper, StagingManager stagingManager,
             int sessionId, int userId, int installerUid, @NonNull InstallSource installSource,
             SessionParams params, long createdMillis,
-            File stageDir, String stageCid, FileInfo[] files, boolean prepared,
+            File stageDir, String stageCid, InstallationFile[] files, boolean prepared,
             boolean committed, boolean sealed,
             @Nullable int[] childSessionIds, int parentSessionId, boolean isReady,
             boolean isFailed, boolean isApplied, int stagedSessionErrorCode,
@@ -539,7 +515,7 @@
         this.mParentSessionId = parentSessionId;
 
         if (files != null) {
-            for (FileInfo file : files) {
+            for (InstallationFile file : files) {
                 mFiles.add(file);
             }
         }
@@ -563,18 +539,21 @@
                 throw new IllegalArgumentException(
                         "DataLoader installation of APEX modules is not allowed.");
             }
-        }
-
-        if (isStreamingInstallation()) {
-            if (!isIncrementalInstallationAllowed(mPackageName)) {
-                throw new IllegalArgumentException(
-                        "Incremental installation of this package is not allowed.");
-            }
             if (this.params.dataLoaderParams.getComponentName().getPackageName()
                     == SYSTEM_DATA_LOADER_PACKAGE) {
                 assertShellOrSystemCalling("System data loaders");
             }
         }
+
+        if (isIncrementalInstallation()) {
+            if (!IncrementalManager.isAllowed()) {
+                throw new IllegalArgumentException("Incremental installation not allowed.");
+            }
+            if (!isIncrementalInstallationAllowed(mPackageName)) {
+                throw new IllegalArgumentException(
+                        "Incremental installation of this package is not allowed.");
+            }
+        }
     }
 
     public SessionInfo generateInfo() {
@@ -738,7 +717,7 @@
 
         String[] result = new String[mFiles.size()];
         for (int i = 0, size = mFiles.size(); i < size; ++i) {
-            result[i] = mFiles.get(i).name;
+            result[i] = mFiles.get(i).getName();
         }
         return result;
     }
@@ -1190,12 +1169,13 @@
      */
     private static boolean isIncrementalInstallationAllowed(String packageName) {
         final PackageManagerInternal pmi = LocalServices.getService(PackageManagerInternal.class);
-        final AndroidPackage existingPackage = pmi.getPackage(packageName);
-        if (existingPackage == null) {
+        final PackageSetting existingPkgSetting = pmi.getPackageSetting(packageName);
+        if (existingPkgSetting == null || existingPkgSetting.pkg == null) {
             return true;
         }
 
-        return !PackageManagerService.isSystemApp(existingPackage);
+        return !existingPkgSetting.pkg.isSystem()
+                && !existingPkgSetting.getPkgState().isUpdatedSystemApp();
     }
 
     /**
@@ -1681,10 +1661,7 @@
                 mInternalProgress = 0.5f;
                 computeProgressLocked(true);
 
-                // Unpack native libraries for non-incremental installation
-                if (!isIncrementalInstallation()) {
-                    extractNativeLibraries(stageDir, params.abiOverride, mayInheritNativeLibs());
-                }
+                extractNativeLibraries(stageDir, params.abiOverride, mayInheritNativeLibs());
             }
 
             // We've reached point of no return; call into PMS to install the stage.
@@ -2260,7 +2237,7 @@
         Slog.d(TAG, "Copied " + fromFiles.size() + " files into " + toDir);
     }
 
-    private static void extractNativeLibraries(File packageDir, String abiOverride, boolean inherit)
+    private void extractNativeLibraries(File packageDir, String abiOverride, boolean inherit)
             throws PackageManagerException {
         final File libDir = new File(packageDir, NativeLibraryHelper.LIB_DIR_NAME);
         if (!inherit) {
@@ -2272,7 +2249,7 @@
         try {
             handle = NativeLibraryHelper.Handle.create(packageDir);
             final int res = NativeLibraryHelper.copyNativeBinariesWithOverride(handle, libDir,
-                    abiOverride);
+                    abiOverride, isIncrementalInstallation());
             if (res != PackageManager.INSTALL_SUCCEEDED) {
                 throw new PackageManagerException(res,
                         "Failed to extract native libraries, res=" + res);
@@ -2413,12 +2390,16 @@
             throw new IllegalStateException(
                     "Cannot add files to non-data loader installation session.");
         }
-        if (!isIncrementalInstallation()) {
+        if (isStreamingInstallation()) {
             if (location != LOCATION_DATA_APP) {
                 throw new IllegalArgumentException(
                         "Non-incremental installation only supports /data/app placement: " + name);
             }
         }
+        if (metadata == null) {
+            throw new IllegalArgumentException(
+                    "DataLoader installation requires valid metadata: " + name);
+        }
         // Use installer provided name for now; we always rename later
         if (!FileUtils.isValidExtFilename(name)) {
             throw new IllegalArgumentException("Invalid name: " + name);
@@ -2428,7 +2409,7 @@
             assertCallerIsOwnerOrRootLocked();
             assertPreparedAndNotSealedLocked("addFile");
 
-            mFiles.add(FileInfo.added(location, name, lengthBytes, metadata, signature));
+            mFiles.add(new InstallationFile(location, name, lengthBytes, metadata, signature));
         }
     }
 
@@ -2446,7 +2427,7 @@
             assertCallerIsOwnerOrRootLocked();
             assertPreparedAndNotSealedLocked("removeFile");
 
-            mFiles.add(FileInfo.removed(location, getRemoveMarkerName(name)));
+            mFiles.add(new InstallationFile(location, getRemoveMarkerName(name), -1, null, null));
         }
     }
 
@@ -2464,32 +2445,20 @@
         }
 
         final List<InstallationFile> addedFiles = new ArrayList<>(mFiles.size());
-        for (FileInfo file : mFiles) {
-            if (sAddedFilter.accept(new File(this.stageDir, file.name))) {
-                addedFiles.add(new InstallationFile(
-                        file.name, file.lengthBytes, file.metadata));
+        for (InstallationFile file : mFiles) {
+            if (sAddedFilter.accept(new File(this.stageDir, file.getName()))) {
+                addedFiles.add(file);
             }
         }
         final List<String> removedFiles = new ArrayList<>(mFiles.size());
-        for (FileInfo file : mFiles) {
-            if (sRemovedFilter.accept(new File(this.stageDir, file.name))) {
-                String name = file.name.substring(
-                        0, file.name.length() - REMOVE_MARKER_EXTENSION.length());
+        for (InstallationFile file : mFiles) {
+            if (sRemovedFilter.accept(new File(this.stageDir, file.getName()))) {
+                String name = file.getName().substring(
+                        0, file.getName().length() - REMOVE_MARKER_EXTENSION.length());
                 removedFiles.add(name);
             }
         }
 
-        // TODO(b/136132412): update with new APIs
-        if (isIncrementalInstallation()) {
-            try {
-                mIncrementalFileStorages = IncrementalFileStorages.initialize(mContext,
-                        stageDir, params.dataLoaderParams, addedFiles);
-                return true;
-            } catch (IOException e) {
-                throw new PackageManagerException(e);
-            }
-        }
-
         final DataLoaderManager dataLoaderManager = mContext.getSystemService(
                 DataLoaderManager.class);
         if (dataLoaderManager == null) {
@@ -2497,6 +2466,7 @@
                     "Failed to find data loader manager service");
         }
 
+        final boolean manualStartAndDestroy = !isIncrementalInstallation();
         IDataLoaderStatusListener listener = new IDataLoaderStatusListener.Stub() {
             @Override
             public void onStatusChanged(int dataLoaderId, int status) {
@@ -2516,7 +2486,11 @@
 
                     switch (status) {
                         case IDataLoaderStatusListener.DATA_LOADER_CREATED: {
-                            dataLoader.start();
+                            if (manualStartAndDestroy) {
+                                // IncrementalFileStorages will call start after all files are
+                                // created in IncFS.
+                                dataLoader.start();
+                            }
                             break;
                         }
                         case IDataLoaderStatusListener.DATA_LOADER_STARTED: {
@@ -2531,7 +2505,9 @@
                             } else {
                                 dispatchStreamValidateAndCommit();
                             }
-                            dataLoader.destroy();
+                            if (manualStartAndDestroy) {
+                                dataLoader.destroy();
+                            }
                             break;
                         }
                         case IDataLoaderStatusListener.DATA_LOADER_IMAGE_NOT_READY: {
@@ -2539,7 +2515,9 @@
                             onSessionVerificationFailure(
                                     new PackageManagerException(INSTALL_FAILED_MEDIA_UNAVAILABLE,
                                             "Failed to prepare image."));
-                            dataLoader.destroy();
+                            if (manualStartAndDestroy) {
+                                dataLoader.destroy();
+                            }
                             break;
                         }
                     }
@@ -2553,6 +2531,17 @@
             }
         };
 
+        if (!manualStartAndDestroy) {
+            try {
+                mIncrementalFileStorages = IncrementalFileStorages.initialize(mContext,
+                        stageDir, params.dataLoaderParams, listener, addedFiles);
+                return false;
+            } catch (IOException e) {
+                throw new PackageManagerException(INSTALL_FAILED_MEDIA_UNAVAILABLE, e.getMessage(),
+                        e.getCause());
+            }
+        }
+
         final FileSystemConnector connector = new FileSystemConnector(addedFiles);
         final FileSystemControlParcel control = new FileSystemControlParcel();
         control.callback = connector;
@@ -2973,13 +2962,13 @@
                 writeIntAttribute(out, ATTR_SESSION_ID, childSessionId);
                 out.endTag(null, TAG_CHILD_SESSION);
             }
-            for (FileInfo fileInfo : mFiles) {
+            for (InstallationFile file : mFiles) {
                 out.startTag(null, TAG_SESSION_FILE);
-                writeIntAttribute(out, ATTR_LOCATION, fileInfo.location);
-                writeStringAttribute(out, ATTR_NAME, fileInfo.name);
-                writeLongAttribute(out, ATTR_LENGTH_BYTES, fileInfo.lengthBytes);
-                writeByteArrayAttribute(out, ATTR_METADATA, fileInfo.metadata);
-                writeByteArrayAttribute(out, ATTR_SIGNATURE, fileInfo.signature);
+                writeIntAttribute(out, ATTR_LOCATION, file.getLocation());
+                writeStringAttribute(out, ATTR_NAME, file.getName());
+                writeLongAttribute(out, ATTR_LENGTH_BYTES, file.getLengthBytes());
+                writeByteArrayAttribute(out, ATTR_METADATA, file.getMetadata());
+                writeByteArrayAttribute(out, ATTR_SIGNATURE, file.getSignature());
                 out.endTag(null, TAG_SESSION_FILE);
             }
         }
@@ -3091,7 +3080,7 @@
         List<String> grantedRuntimePermissions = new ArrayList<>();
         List<String> whitelistedRestrictedPermissions = new ArrayList<>();
         List<Integer> childSessionIds = new ArrayList<>();
-        List<FileInfo> files = new ArrayList<>();
+        List<InstallationFile> files = new ArrayList<>();
         int outerDepth = in.getDepth();
         int type;
         while ((type = in.next()) != XmlPullParser.END_DOCUMENT
@@ -3110,7 +3099,7 @@
                 childSessionIds.add(readIntAttribute(in, ATTR_SESSION_ID, SessionInfo.INVALID_ID));
             }
             if (TAG_SESSION_FILE.equals(in.getName())) {
-                files.add(new FileInfo(
+                files.add(new InstallationFile(
                         readIntAttribute(in, ATTR_LOCATION, 0),
                         readStringAttribute(in, ATTR_NAME),
                         readLongAttribute(in, ATTR_LENGTH_BYTES, -1),
@@ -3138,16 +3127,16 @@
             childSessionIdsArray = EMPTY_CHILD_SESSION_ARRAY;
         }
 
-        FileInfo[] fileInfosArray = null;
+        InstallationFile[] fileArray = null;
         if (!files.isEmpty()) {
-            fileInfosArray = files.toArray(EMPTY_FILE_INFO_ARRAY);
+            fileArray = files.toArray(EMPTY_INSTALLATION_FILE_ARRAY);
         }
 
         InstallSource installSource = InstallSource.create(installInitiatingPackageName,
                 installOriginatingPackageName, installerPackageName);
         return new PackageInstallerSession(callback, context, pm, sessionProvider,
                 installerThread, stagingManager, sessionId, userId, installerUid,
-                installSource, params, createdMillis, stageDir, stageCid, fileInfosArray,
+                installSource, params, createdMillis, stageDir, stageCid, fileArray,
                 prepared, committed, sealed, childSessionIdsArray, parentSessionId,
                 isReady, isFailed, isApplied, stagedSessionErrorCode, stagedSessionErrorMessage);
     }
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index c8585907..a464ca7 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -179,12 +179,15 @@
 import android.content.pm.PackageManager.ModuleInfoFlags;
 import android.content.pm.PackageManagerInternal;
 import android.content.pm.PackageManagerInternal.PackageListObserver;
+import android.content.pm.PackageManagerInternal.PrivateResolveFlags;
 import android.content.pm.PackageParser;
 import android.content.pm.PackageParser.PackageLite;
 import android.content.pm.PackageParser.PackageParserException;
 import android.content.pm.PackageParser.ParseFlags;
 import android.content.pm.PackageParser.SigningDetails;
 import android.content.pm.PackageParser.SigningDetails.SignatureSchemeVersion;
+import android.content.pm.PackagePartitions;
+import android.content.pm.PackagePartitions.SystemPartition;
 import android.content.pm.PackageStats;
 import android.content.pm.PackageUserState;
 import android.content.pm.ParceledListSlice;
@@ -206,20 +209,17 @@
 import android.content.pm.dex.ArtManager;
 import android.content.pm.dex.DexMetadataHelper;
 import android.content.pm.dex.IArtManager;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ApkParseUtils;
-import android.content.pm.parsing.ComponentParseUtils;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivity;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivityIntentInfo;
-import android.content.pm.parsing.ComponentParseUtils.ParsedComponent;
-import android.content.pm.parsing.ComponentParseUtils.ParsedInstrumentation;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermission;
-import android.content.pm.parsing.ComponentParseUtils.ParsedProvider;
-import android.content.pm.parsing.ComponentParseUtils.ParsedService;
-import android.content.pm.parsing.PackageImpl;
-import android.content.pm.parsing.PackageInfoUtils;
-import android.content.pm.parsing.ParsedPackage;
-import android.content.pm.parsing.library.PackageBackwardCompatibility;
+import android.content.pm.parsing.PackageInfoWithoutStateUtils;
+import android.content.pm.parsing.ParsingPackageRead;
+import android.content.pm.parsing.ParsingPackageUtils;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedInstrumentation;
+import android.content.pm.parsing.component.ParsedIntentInfo;
+import android.content.pm.parsing.component.ParsedMainComponent;
+import android.content.pm.parsing.component.ParsedPermission;
+import android.content.pm.parsing.component.ParsedProcess;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedService;
 import android.content.res.Resources;
 import android.content.rollback.IRollbackManager;
 import android.database.ContentObserver;
@@ -305,6 +305,7 @@
 import com.android.internal.app.ResolverActivity;
 import com.android.internal.content.NativeLibraryHelper;
 import com.android.internal.content.PackageHelper;
+import com.android.internal.content.om.OverlayConfig;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.os.SomeArgs;
 import com.android.internal.os.Zygote;
@@ -337,6 +338,13 @@
 import com.android.server.pm.dex.DexoptOptions;
 import com.android.server.pm.dex.PackageDexUsage;
 import com.android.server.pm.dex.ViewCompiler;
+import com.android.server.pm.parsing.PackageInfoUtils;
+import com.android.server.pm.parsing.PackageParser2;
+import com.android.server.pm.parsing.library.PackageBackwardCompatibility;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
 import com.android.server.pm.permission.BasePermission;
 import com.android.server.pm.permission.PermissionManagerService;
 import com.android.server.pm.permission.PermissionManagerServiceInternal;
@@ -792,22 +800,12 @@
      * specificity (the more generic, the earlier in the list a partition appears).
      */
     @VisibleForTesting(visibility = Visibility.PRIVATE)
-    public static final List<SystemPartition> SYSTEM_PARTITIONS = Collections.unmodifiableList(
-            Arrays.asList(
-                    new SystemPartition(Environment.getRootDirectory(), 0 /* scanFlag */,
-                            false /* hasOverlays */),
-                    new SystemPartition(Environment.getVendorDirectory(), SCAN_AS_VENDOR,
-                            true /* hasOverlays */),
-                    new SystemPartition(Environment.getOdmDirectory(), SCAN_AS_ODM,
-                            true /* hasOverlays */),
-                    new SystemPartition(Environment.getOemDirectory(), SCAN_AS_OEM,
-                            true /* hasOverlays */),
-                    new SystemPartition(Environment.getProductDirectory(), SCAN_AS_PRODUCT,
-                            true /* hasOverlays */),
-                    new SystemPartition(Environment.getSystemExtDirectory(), SCAN_AS_SYSTEM_EXT,
-                            true /* hasOverlays */)));
+    public static final List<ScanPartition> SYSTEM_PARTITIONS = Collections.unmodifiableList(
+            PackagePartitions.getOrderedPartitions(ScanPartition::new));
 
-    private final List<SystemPartition> mDirsToScanAsSystem;
+    private final List<ScanPartition> mDirsToScanAsSystem;
+
+    private final OverlayConfig mOverlayConfig;
 
     /**
      * Unit tests will instantiate, extend and/or mock to mock dependencies / behaviors.
@@ -1017,13 +1015,13 @@
 
     private final AppsFilter mAppsFilter;
 
-    class PackageParserCallback implements PackageParser.Callback {
+    class PackageParserCallback extends PackageParser2.Callback {
         @Override public final boolean hasFeature(String feature) {
             return PackageManagerService.this.hasSystemFeature(feature, 0);
         }
     }
 
-    final PackageParser.Callback mPackageParserCallback = new PackageParserCallback();
+    final PackageParser2.Callback mPackageParserCallback = new PackageParserCallback();
 
     // Currently known shared libraries.
     final ArrayMap<String, LongSparseArray<SharedLibraryInfo>> mSharedLibraries = new ArrayMap<>();
@@ -1086,7 +1084,7 @@
     boolean mResolverReplaced = false;
 
     private final @Nullable ComponentName mIntentFilterVerifierComponent;
-    private final @Nullable IntentFilterVerifier<ParsedActivityIntentInfo> mIntentFilterVerifier;
+    private final @Nullable IntentFilterVerifier<ParsedIntentInfo> mIntentFilterVerifier;
 
     private int mIntentFilterVerificationToken = 0;
 
@@ -1147,7 +1145,7 @@
         void receiveVerificationResponse(int verificationId);
     }
 
-    private class IntentVerifierProxy implements IntentFilterVerifier<ParsedActivityIntentInfo> {
+    private class IntentVerifierProxy implements IntentFilterVerifier<ParsedIntentInfo> {
         private Context mContext;
         private ComponentName mIntentFilterVerifierComponent;
         private ArrayList<Integer> mCurrentIntentFilterVerifications = new ArrayList<>();
@@ -1172,11 +1170,11 @@
 
                 String packageName = ivs.getPackageName();
 
-                ArrayList<ParsedActivityIntentInfo> filters = ivs.getFilters();
+                ArrayList<ParsedIntentInfo> filters = ivs.getFilters();
                 final int filterCount = filters.size();
                 ArraySet<String> domainsSet = new ArraySet<>();
                 for (int m=0; m<filterCount; m++) {
-                    ParsedActivityIntentInfo filter = filters.get(m);
+                    ParsedIntentInfo filter = filters.get(m);
                     domainsSet.addAll(filter.getHostsList());
                 }
                 synchronized (mLock) {
@@ -1228,14 +1226,14 @@
 
             final boolean verified = ivs.isVerified();
 
-            ArrayList<ParsedActivityIntentInfo> filters = ivs.getFilters();
+            ArrayList<ParsedIntentInfo> filters = ivs.getFilters();
             final int count = filters.size();
             if (DEBUG_DOMAIN_VERIFICATION) {
                 Slog.i(TAG, "Received verification response " + verificationId
                         + " for " + count + " filters, verified=" + verified);
             }
             for (int n=0; n<count; n++) {
-                ParsedActivityIntentInfo filter = filters.get(n);
+                ParsedIntentInfo filter = filters.get(n);
                 filter.setVerified(verified);
 
                 if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG, "IntentFilter " + filter.toString()
@@ -1348,7 +1346,7 @@
 
         @Override
         public boolean addOneIntentFilterVerification(int verifierUid, int userId, int verificationId,
-                ParsedActivityIntentInfo filter, String packageName) {
+                ParsedIntentInfo filter, String packageName) {
             if (!hasValidDomains(filter)) {
                 return false;
             }
@@ -1377,7 +1375,7 @@
         }
     }
 
-    private static boolean hasValidDomains(ParsedActivityIntentInfo filter) {
+    private static boolean hasValidDomains(ParsedIntentInfo filter) {
         return filter.hasCategory(Intent.CATEGORY_BROWSABLE)
                 && (filter.hasDataScheme(IntentFilter.SCHEME_HTTP) ||
                         filter.hasDataScheme(IntentFilter.SCHEME_HTTPS));
@@ -2039,7 +2037,7 @@
                 mInstantAppRegistry.onPackageInstalledLPw(res.pkg, res.newUsers);
             }
 
-            final String packageName = res.pkg.getAppInfoPackageName();
+            final String packageName = res.pkg.getPackageName();
 
             // Determine the set of users who are adding this package for
             // the first time vs. those who are seeing an update.
@@ -2089,7 +2087,7 @@
                 // Send added for users that see the package for the first time
                 // sendPackageAddedForNewUsers also deals with system apps
                 int appId = UserHandle.getAppId(res.uid);
-                boolean isSystem = res.pkg.isSystemApp();
+                boolean isSystem = res.pkg.isSystem();
                 sendPackageAddedForNewUsers(packageName, isSystem || virtualPreload,
                         virtualPreload /*startReceiver*/, appId, firstUserIds, firstInstantUserIds);
 
@@ -2153,7 +2151,7 @@
                             null /*package*/, null /*extras*/, 0 /*flags*/,
                             packageName /*targetPackage*/,
                             null /*finishedReceiver*/, updateUserIds, instantUserIds);
-                } else if (launchedForRestore && !isSystemApp(res.pkg)) {
+                } else if (launchedForRestore && !res.pkg.isSystem()) {
                     // First-install and we did a restore, so we're responsible for the
                     // first-launch broadcast.
                     if (DEBUG_BACKUP) {
@@ -2165,14 +2163,14 @@
                 }
 
                 // Send broadcast package appeared if external for all users
-                if (isExternal(res.pkg)) {
+                if (res.pkg.isExternalStorage()) {
                     if (!update) {
                         final StorageManager storage = mInjector.getStorageManager();
                         VolumeInfo volume =
                                 storage.findVolumeByUuid(
                                         res.pkg.getStorageUuid().toString());
                         int packageExternalStorageType =
-                                getPackageExternalStorageType(volume, isExternal(res.pkg));
+                                getPackageExternalStorageType(volume, res.pkg.isExternalStorage());
                         // If the package was installed externally, log it.
                         if (packageExternalStorageType != StorageEnums.UNKNOWN) {
                             FrameworkStatsLog.write(
@@ -2505,15 +2503,18 @@
                 packageName -> {
                     synchronized (m.mInstallLock) {
                         final AndroidPackage pkg;
+                        final PackageSetting ps;
                         final SharedUserSetting sharedUser;
+                        final String oldSeInfo;
                         synchronized (m.mLock) {
-                            PackageSetting ps = m.mSettings.getPackageLPr(packageName);
+                            ps = m.mSettings.getPackageLPr(packageName);
                             if (ps == null) {
                                 Slog.e(TAG, "Failed to find package setting " + packageName);
                                 return;
                             }
                             pkg = ps.pkg;
-                            sharedUser = ps.sharedUser;
+                            sharedUser = ps.getSharedUser();
+                            oldSeInfo = AndroidPackageUtils.getSeInfo(pkg, ps);
                         }
 
                         if (pkg == null) {
@@ -2523,10 +2524,10 @@
                         final String newSeInfo = SELinuxMMAC.getSeInfo(pkg, sharedUser,
                                 m.mInjector.getCompatibility());
 
-                        if (!newSeInfo.equals(pkg.getSeInfo())) {
+                        if (!newSeInfo.equals(oldSeInfo)) {
                             Slog.i(TAG, "Updating seInfo for package " + packageName + " from: "
-                                    + pkg.getSeInfo() + " to: " + newSeInfo);
-                            pkg.mutate().setSeInfo(newSeInfo);
+                                    + oldSeInfo + " to: " + newSeInfo);
+                            ps.getPkgState().setOverrideSeInfo(newSeInfo);
                             m.prepareAppDataAfterInstallLIF(pkg);
                         }
                     }
@@ -2588,66 +2589,44 @@
         }
     }
 
-    @VisibleForTesting(visibility = Visibility.PRIVATE)
-    public static class SystemPartition {
-        public final File folder;
+    @VisibleForTesting
+    public static class ScanPartition extends SystemPartition {
+        @ScanFlags
         public final int scanFlag;
-        public final File appFolder;
-        @Nullable
-        public final File privAppFolder;
-        @Nullable
-        public final File overlayFolder;
 
-
-        private static boolean shouldScanPrivApps(@ScanFlags int scanFlags) {
-            if ((scanFlags & SCAN_AS_OEM) != 0) {
-                return false;
-            }
-            if (scanFlags == 0) {  // /system partition
-                return true;
-            }
-            if ((scanFlags
-                    & (SCAN_AS_VENDOR | SCAN_AS_ODM | SCAN_AS_PRODUCT | SCAN_AS_SYSTEM_EXT)) != 0) {
-                return true;
-            }
-            if ((scanFlags & SCAN_AS_APK_IN_APEX) != 0) {
-                return true;
-            }
-            return false;
+        public ScanPartition(@NonNull SystemPartition partition) {
+            super(partition);
+            scanFlag = scanFlagForPartition(partition);
         }
 
-        private SystemPartition(File folder, int scanFlag, boolean hasOverlays) {
-            this.folder = folder;
-            this.scanFlag = scanFlag;
-            this.appFolder = toCanonical(new File(folder, "app"));
-            this.privAppFolder = shouldScanPrivApps(scanFlag)
-                    ? toCanonical(new File(folder, "priv-app"))
-                    : null;
-            this.overlayFolder = hasOverlays ? toCanonical(new File(folder, "overlay")) : null;
+        /**
+         * Creates a partition containing the same folders as the original partition but with a
+         * different root folder. The new partition will include the scan flags of the original
+         * partition along with any specified additional scan flags.
+         */
+        public ScanPartition(@NonNull File folder, @NonNull ScanPartition original,
+                @ScanFlags int additionalScanFlag) {
+            super(folder, original);
+            this.scanFlag = original.scanFlag | additionalScanFlag;
         }
 
-        public boolean containsPrivApp(File scanFile) {
-            return FileUtils.contains(privAppFolder, scanFile);
-        }
-
-        public boolean containsApp(File scanFile) {
-            return FileUtils.contains(appFolder, scanFile);
-        }
-
-        public boolean containsPath(String path) {
-            return path.startsWith(folder.getPath() + "/");
-        }
-
-        public boolean containsPrivPath(String path) {
-            return privAppFolder != null && path.startsWith(privAppFolder.getPath() + "/");
-        }
-
-        private static File toCanonical(File dir) {
-            try {
-                return dir.getCanonicalFile();
-            } catch (IOException e) {
-                // failed to look up canonical path, continue with original one
-                return dir;
+        private static int scanFlagForPartition(PackagePartitions.SystemPartition partition) {
+            switch (partition.type) {
+                case PackagePartitions.PARTITION_SYSTEM:
+                    return 0;
+                case PackagePartitions.PARTITION_VENDOR:
+                    return SCAN_AS_VENDOR;
+                case PackagePartitions.PARTITION_ODM:
+                    return SCAN_AS_ODM;
+                case PackagePartitions.PARTITION_OEM:
+                    return SCAN_AS_OEM;
+                case PackagePartitions.PARTITION_PRODUCT:
+                    return SCAN_AS_PRODUCT;
+                case PackagePartitions.PARTITION_SYSTEM_EXT:
+                    return SCAN_AS_SYSTEM_EXT;
+                default:
+                    throw new IllegalStateException("Unable to determine scan flag for "
+                            + partition.folder);
             }
         }
     }
@@ -2751,7 +2730,7 @@
         mDirsToScanAsSystem = new ArrayList<>();
         mDirsToScanAsSystem.addAll(SYSTEM_PARTITIONS);
         mDirsToScanAsSystem.addAll(mApexManager.getActiveApexInfos().stream()
-                .map(ai -> resolveApexToSystemPartition(ai))
+                .map(PackageManagerService::resolveApexToScanPartition)
                 .filter(Objects::nonNull).collect(Collectors.toList()));
         Slog.d(TAG,
                 "Directories scanned as system partitions: [" + mDirsToScanAsSystem.stream().map(
@@ -2887,12 +2866,8 @@
             final int systemParseFlags = mDefParseFlags | PackageParser.PARSE_IS_SYSTEM_DIR;
             final int systemScanFlags = scanFlags | SCAN_AS_SYSTEM;
 
-            PackageParser packageParser = new PackageParser();
-            packageParser.setSeparateProcesses(mSeparateProcesses);
-            packageParser.setOnlyCoreApps(mOnlyCore);
-            packageParser.setDisplayMetrics(mMetrics);
-            packageParser.setCacheDir(mCacheDir);
-            packageParser.setCallback(mPackageParserCallback);
+            PackageParser2 packageParser = new PackageParser2(mSeparateProcesses, mOnlyCore,
+                    mMetrics, mCacheDir, mPackageParserCallback);
 
             ExecutorService executorService = ParallelPackageParser.makeExecutorService();
             // Collect vendor/product/system_ext overlay packages. (Do this before scanning
@@ -2900,11 +2875,11 @@
             // For security and version matching reason, only consider overlay packages if they
             // reside in the right directory.
             for (int i = mDirsToScanAsSystem.size() - 1; i >= 0; i--) {
-                final SystemPartition partition = mDirsToScanAsSystem.get(i);
-                if (partition.overlayFolder == null) {
+                final ScanPartition partition = mDirsToScanAsSystem.get(i);
+                if (partition.getOverlayFolder() == null) {
                     continue;
                 }
-                scanDirTracedLI(partition.overlayFolder, systemParseFlags,
+                scanDirTracedLI(partition.getOverlayFolder(), systemParseFlags,
                         systemScanFlags | partition.scanFlag, 0,
                         packageParser, executorService);
             }
@@ -2917,17 +2892,22 @@
                         "Failed to load frameworks package; check log for warnings");
             }
             for (int i = 0, size = mDirsToScanAsSystem.size(); i < size; i++) {
-                final SystemPartition partition = mDirsToScanAsSystem.get(i);
-                if (partition.privAppFolder != null) {
-                    scanDirTracedLI(partition.privAppFolder, systemParseFlags,
+                final ScanPartition partition = mDirsToScanAsSystem.get(i);
+                if (partition.getPrivAppFolder() != null) {
+                    scanDirTracedLI(partition.getPrivAppFolder(), systemParseFlags,
                             systemScanFlags | SCAN_AS_PRIVILEGED | partition.scanFlag, 0,
                             packageParser, executorService);
                 }
-                scanDirTracedLI(partition.appFolder, systemParseFlags,
+                scanDirTracedLI(partition.getAppFolder(), systemParseFlags,
                         systemScanFlags | partition.scanFlag, 0,
                         packageParser, executorService);
             }
 
+            // Parse overlay configuration files to set default enable state, mutability, and
+            // priority of system overlays.
+            mOverlayConfig = OverlayConfig.initializeSystemInstance(
+                    consumer -> mPmInternal.forEachPackage(
+                            pkg -> consumer.accept(pkg, pkg.isSystem())));
 
             // Prune any system packages that no longer exist.
             final List<String> possiblyDeletedUpdatedSystemApps = new ArrayList<>();
@@ -3069,7 +3049,7 @@
                         // special privileges
                         removePackageLI(pkg, true);
                         try {
-                            final File codePath = new File(pkg.getAppInfoCodePath());
+                            final File codePath = new File(pkg.getCodePath());
                             scanPackageTracedLI(codePath, 0, scanFlags, 0, null);
                         } catch (PackageManagerException e) {
                             Slog.e(TAG, "Failed to parse updated, ex-system package: "
@@ -3105,7 +3085,7 @@
                         @ParseFlags int reparseFlags = 0;
                         @ScanFlags int rescanFlags = 0;
                         for (int i1 = 0, size = mDirsToScanAsSystem.size(); i1 < size; i1++) {
-                            SystemPartition partition = mDirsToScanAsSystem.get(i1);
+                            final ScanPartition partition = mDirsToScanAsSystem.get(i1);
                             if (partition.containsPrivApp(scanFile)) {
                                 reparseFlags = systemParseFlags;
                                 rescanFlags = systemScanFlags | SCAN_AS_PRIVILEGED
@@ -3174,7 +3154,7 @@
 
             // Now that we know all of the shared libraries, update all clients to have
             // the correct library paths.
-            updateAllSharedLibrariesLocked(null, Collections.unmodifiableMap(mPackages));
+            updateAllSharedLibrariesLocked(null, null, Collections.unmodifiableMap(mPackages));
 
             for (SharedUserSetting setting : mSettings.getAllSharedUsersLPw()) {
                 // NOTE: We ignore potential failures here during a system scan (like
@@ -3202,7 +3182,7 @@
 
             // Now that we know all the packages we are keeping,
             // read and update their last usage times.
-            mPackageUsage.read(mPackages);
+            mPackageUsage.read(mSettings.mPackages);
             mCompilerStats.read();
 
             EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_SCAN_END,
@@ -3501,7 +3481,8 @@
      * APK will be installed and the package will be disabled. To recover from this situation,
      * the user will need to go into system settings and re-enable the package.
      */
-    private boolean enableCompressedPackage(AndroidPackage stubPkg) {
+    private boolean enableCompressedPackage(AndroidPackage stubPkg,
+            @NonNull PackageSetting stubPkgSetting) {
         final int parseFlags = mDefParseFlags | PackageParser.PARSE_CHATTY
                 | PackageParser.PARSE_ENFORCE_CODE;
         synchronized (mInstallLock) {
@@ -3512,7 +3493,7 @@
                 synchronized (mLock) {
                     prepareAppDataAfterInstallLIF(pkg);
                     try {
-                        updateSharedLibrariesLocked(pkg, null,
+                        updateSharedLibrariesLocked(pkg, stubPkgSetting, null, null,
                                 Collections.unmodifiableMap(mPackages));
                     } catch (PackageManagerException e) {
                         Slog.e(TAG, "updateAllSharedLibrariesLPw failed: ", e);
@@ -3627,7 +3608,7 @@
             try {
                 handle = NativeLibraryHelper.Handle.create(dstCodePath);
                 ret = NativeLibraryHelper.copyNativeBinariesWithOverride(handle, libraryRoot,
-                        null /*abiOverride*/);
+                        null /*abiOverride*/, false /*isIncremental*/);
             } catch (IOException e) {
                 logCriticalInfo(Log.ERROR, "Failed to extract native libraries"
                         + "; pkg: " + packageName);
@@ -4035,15 +4016,13 @@
                 }
 
                 ArraySet<String> domains = null;
-                if (pkg.getActivities() != null) {
-                    for (ParsedActivity a : pkg.getActivities()) {
-                        for (ParsedActivityIntentInfo filter : a.intents) {
-                            if (hasValidDomains(filter)) {
-                                if (domains == null) {
-                                    domains = new ArraySet<>();
-                                }
-                                domains.addAll(filter.getHostsList());
+                for (ParsedActivity a : pkg.getActivities()) {
+                    for (ParsedIntentInfo filter : a.getIntents()) {
+                        if (hasValidDomains(filter)) {
+                            if (domains == null) {
+                                domains = new ArraySet<>();
                             }
+                            domains.addAll(filter.getHostsList());
                         }
                     }
                 }
@@ -4171,7 +4150,7 @@
                     ? Collections.emptySet() : permissionsState.getPermissions(userId);
 
             PackageInfo packageInfo = PackageInfoUtils.generate(p, gids, flags,
-                    ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId);
+                    ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId, ps);
 
             if (packageInfo == null) {
                 return null;
@@ -4233,7 +4212,7 @@
                 throw new SecurityException("Package " + packageName + " is currently frozen!");
             }
 
-            if (!userKeyUnlocked && !ps.pkg.isEncryptionAware()) {
+            if (!userKeyUnlocked && !AndroidPackageUtils.isEncryptionAware(ps.pkg)) {
                 throw new SecurityException("Package " + packageName + " is not encryption aware!");
             }
         }
@@ -4314,7 +4293,7 @@
             }
 
             AndroidPackage p = mPackages.get(packageName);
-            if (matchFactoryOnly && p != null && !isSystemApp(p)) {
+            if (matchFactoryOnly && p != null && !p.isSystem()) {
                 return null;
             }
             if (DEBUG_PACKAGE_INFO)
@@ -4369,9 +4348,9 @@
                 return false;
             }
             final boolean visibleToInstantApp =
-                    (activity.flags & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0;
+                    (activity.getFlags() & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0;
             final boolean explicitlyVisibleToInstantApp =
-                    (activity.flags & ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP) == 0;
+                    (activity.getFlags() & ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP) == 0;
             return visibleToInstantApp && explicitlyVisibleToInstantApp;
         } else if (type == TYPE_RECEIVER) {
             final ParsedActivity activity = mComponentResolver.getReceiver(component);
@@ -4379,20 +4358,18 @@
                 return false;
             }
             final boolean visibleToInstantApp =
-                    (activity.flags & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0;
+                    (activity.getFlags() & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0;
             final boolean explicitlyVisibleToInstantApp =
-                    (activity.flags & ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP) == 0;
+                    (activity.getFlags() & ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP) == 0;
             return visibleToInstantApp && !explicitlyVisibleToInstantApp;
         } else if (type == TYPE_SERVICE) {
             final ParsedService service = mComponentResolver.getService(component);
             return service != null
-                    ? (service.flags & ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0
-                    : false;
+                    && (service.getFlags() & ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0;
         } else if (type == TYPE_PROVIDER) {
             final ParsedProvider provider = mComponentResolver.getProvider(component);
             return provider != null
-                    ? (provider.getFlags() & ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0
-                    : false;
+                    && (provider.getFlags() & ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0;
         } else if (type == TYPE_UNKNOWN) {
             return isComponentVisibleToInstantApp(component);
         }
@@ -4599,8 +4576,8 @@
         // reader
         synchronized (mLock) {
             final AndroidPackage p = mPackages.get(packageName);
-            if (p != null && p.isMatch(flags)) {
-                PackageSetting ps = getPackageSetting(p.getPackageName());
+            if (p != null && AndroidPackageUtils.isMatchForSystemOnly(p, flags)) {
+                PackageSetting ps = getPackageSettingInternal(p.getPackageName(), callingUid);
                 if (shouldFilterApplicationLocked(ps, callingUid, userId)) {
                     return -1;
                 }
@@ -4629,7 +4606,7 @@
         // reader
         synchronized (mLock) {
             final AndroidPackage p = mPackages.get(packageName);
-            if (p != null && p.isMatch(flags)) {
+            if (p != null && AndroidPackageUtils.isMatchForSystemOnly(p, flags)) {
                 PackageSetting ps = getPackageSetting(p.getPackageName());
                 if (shouldFilterApplicationLocked(ps, callingUid, userId)) {
                     return null;
@@ -4681,7 +4658,7 @@
                 return null;
             }
             ApplicationInfo ai = PackageInfoUtils.generateApplicationInfo(ps.pkg, flags,
-                    ps.readUserState(userId), userId);
+                    ps.readUserState(userId), userId, ps);
             if (ai != null) {
                 ai.packageName = resolveExternalPackageNameLPr(ps.pkg);
             }
@@ -4733,7 +4710,7 @@
                 }
                 // Note: isEnabledLP() does not apply here - always return info
                 ApplicationInfo ai = PackageInfoUtils.generateApplicationInfo(
-                        p, flags, ps.readUserState(userId), userId);
+                        p, flags, ps.readUserState(userId), userId, ps);
                 if (ai != null) {
                     ai.packageName = resolveExternalPackageNameLPr(p);
                 }
@@ -5117,7 +5094,7 @@
                     return null;
                 }
                 return PackageInfoUtils.generateActivityInfo(pkg,
-                        a, flags, ps.readUserState(userId), userId);
+                        a, flags, ps.readUserState(userId), userId, ps);
             }
             if (mResolveComponentName.equals(component)) {
                 return PackageParser.generateActivityInfo(
@@ -5165,8 +5142,8 @@
                     ps, callingUid, component, TYPE_ACTIVITY, callingUserId)) {
                 return false;
             }
-            for (int i=0; i<a.intents.size(); i++) {
-                if (a.intents.get(i).match(intent.getAction(), resolvedType, intent.getScheme(),
+            for (int i=0; i< a.getIntents().size(); i++) {
+                if (a.getIntents().get(i).match(intent.getAction(), resolvedType, intent.getScheme(),
                         intent.getData(), intent.getCategories(), TAG) >= 0) {
                     return true;
                 }
@@ -5204,7 +5181,7 @@
                     return null;
                 }
                 return PackageInfoUtils.generateActivityInfo(pkg,
-                        a, flags, ps.readUserState(userId), userId);
+                        a, flags, ps.readUserState(userId), userId, ps);
             }
         }
         return null;
@@ -5425,7 +5402,7 @@
                     return null;
                 }
                 return PackageInfoUtils.generateServiceInfo(pkg,
-                        s, flags, ps.readUserState(userId), userId);
+                        s, flags, ps.readUserState(userId), userId, ps);
             }
         }
         return null;
@@ -5459,7 +5436,7 @@
                     return null;
                 }
                 PackageUserState state = ps.readUserState(userId);
-                return PackageInfoUtils.generateProviderInfo(pkg, p, flags, state, userId);
+                return PackageInfoUtils.generateProviderInfo(pkg, p, flags, state, userId, ps);
             }
         }
         return null;
@@ -5924,7 +5901,10 @@
      */
     @Override
     public String[] getPackagesForUid(int uid) {
-        final int callingUid = Binder.getCallingUid();
+        return getPackagesForUidInternal(uid, Binder.getCallingUid());
+    }
+
+    private String[] getPackagesForUidInternal(int uid, int callingUid) {
         final boolean isCallerInstantApp = getInstantAppPackageName(callingUid) != null;
         final int userId = UserHandle.getUserId(uid);
         final int appId = UserHandle.getAppId(uid);
@@ -6125,8 +6105,8 @@
     @Override
     public ResolveInfo resolveIntent(Intent intent, String resolvedType,
             int flags, int userId) {
-        return resolveIntentInternal(intent, resolvedType, flags, userId, false,
-                Binder.getCallingUid());
+        return resolveIntentInternal(intent, resolvedType, flags, 0 /*privateResolveFlags*/,
+                userId, false, Binder.getCallingUid());
     }
 
     /**
@@ -6134,8 +6114,9 @@
      * However, if {@code resolveForStart} is {@code true}, all instant apps are visible
      * since we need to allow the system to start any installed application.
      */
-    private ResolveInfo resolveIntentInternal(Intent intent, String resolvedType,
-            int flags, int userId, boolean resolveForStart, int filterCallingUid) {
+    private ResolveInfo resolveIntentInternal(Intent intent, String resolvedType, int flags,
+            @PrivateResolveFlags int privateResolveFlags, int userId, boolean resolveForStart,
+            int filterCallingUid) {
         try {
             Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "resolveIntent");
 
@@ -6147,11 +6128,13 @@
 
             Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "queryIntentActivities");
             final List<ResolveInfo> query = queryIntentActivitiesInternal(intent, resolvedType,
-                    flags, filterCallingUid, userId, resolveForStart, true /*allowDynamicSplits*/);
+                    flags, privateResolveFlags, filterCallingUid, userId, resolveForStart,
+                    true /*allowDynamicSplits*/);
             Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
 
             final ResolveInfo bestChoice =
-                    chooseBestActivity(intent, resolvedType, flags, query, userId);
+                    chooseBestActivity(
+                            intent, resolvedType, flags, privateResolveFlags, query, userId);
             return bestChoice;
         } finally {
             Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
@@ -6298,17 +6281,18 @@
 
     private void requestInstantAppResolutionPhaseTwo(AuxiliaryResolveInfo responseObj,
             Intent origIntent, String resolvedType, String callingPackage,
-            boolean isRequesterInstantApp, Bundle verificationBundle, int userId) {
+            @Nullable String callingFeatureId, boolean isRequesterInstantApp,
+            Bundle verificationBundle, int userId) {
         final Message msg = mHandler.obtainMessage(INSTANT_APP_RESOLUTION_PHASE_TWO,
                 new InstantAppRequest(responseObj, origIntent, resolvedType,
-                        callingPackage, isRequesterInstantApp, userId, verificationBundle,
+                        callingPackage, callingFeatureId, isRequesterInstantApp, userId, verificationBundle,
                         false /*resolveForStart*/, responseObj.hostDigestPrefixSecure,
                         responseObj.token));
         mHandler.sendMessage(msg);
     }
 
     private ResolveInfo chooseBestActivity(Intent intent, String resolvedType,
-            int flags, List<ResolveInfo> query, int userId) {
+            int flags, int privateResolveFlags, List<ResolveInfo> query, int userId) {
         if (query != null) {
             final int N = query.size();
             if (N == 1) {
@@ -6350,6 +6334,10 @@
                         }
                     }
                 }
+                if ((privateResolveFlags
+                        & PackageManagerInternal.RESOLVE_NON_RESOLVER_ONLY) != 0) {
+                    return null;
+                }
                 ri = new ResolveInfo(mResolveInfo);
                 ri.activityInfo = new ActivityInfo(ri.activityInfo);
                 ri.activityInfo.labelRes = ResolverActivity.getLabelRes(intent.getAction());
@@ -6694,6 +6682,9 @@
             // cross-profile app linking works only towards the parent.
             final int callingUid = Binder.getCallingUid();
             final UserInfo parent = getProfileParent(sourceUserId);
+            if (parent == null) {
+                return false;
+            }
             synchronized (mLock) {
                 int flags = updateFlagsForResolve(0, parent.id, callingUid,
                         false /*includeInstantApps*/);
@@ -6760,13 +6751,13 @@
     private @NonNull List<ResolveInfo> queryIntentActivitiesInternal(Intent intent,
             String resolvedType, int flags, int userId) {
         return queryIntentActivitiesInternal(
-                intent, resolvedType, flags, Binder.getCallingUid(), userId,
-                false /*resolveForStart*/, true /*allowDynamicSplits*/);
+                intent, resolvedType, flags, 0 /*privateResolveFlags*/, Binder.getCallingUid(),
+                userId, false /*resolveForStart*/, true /*allowDynamicSplits*/);
     }
 
     private @NonNull List<ResolveInfo> queryIntentActivitiesInternal(Intent intent,
-            String resolvedType, int flags, int filterCallingUid, int userId,
-            boolean resolveForStart, boolean allowDynamicSplits) {
+            String resolvedType, int flags, @PrivateResolveFlags int privateResolveFlags,
+            int filterCallingUid, int userId, boolean resolveForStart, boolean allowDynamicSplits) {
         if (!mUserManager.exists(userId)) return Collections.emptyList();
         final String instantAppPkgName = getInstantAppPackageName(filterCallingUid);
         mPermissionManager.enforceCrossUserPermission(Binder.getCallingUid(), userId,
@@ -6851,7 +6842,7 @@
 
                 // Check for results in the current profile.
                 result = filterIfNotSystemUser(mComponentResolver.queryActivities(
-                        intent, resolvedType, flags, userId), userId);
+                        intent, resolvedType, flags, privateResolveFlags, userId), userId);
                 addInstant = isInstantAppResolutionAllowed(intent, result, userId,
                         false /*skipPackageCheck*/);
                 // Check for cross profile results.
@@ -6950,7 +6941,7 @@
                         | PackageManager.GET_RESOLVED_FILTER
                         | PackageManager.MATCH_INSTANT
                         | PackageManager.MATCH_VISIBLE_TO_INSTANT_APP_ONLY,
-                    userId);
+                    0, userId);
             for (int i = instantApps.size() - 1; i >= 0; --i) {
                 final ResolveInfo info = instantApps.get(i);
                 final String packageName = info.activityInfo.packageName;
@@ -6987,10 +6978,10 @@
                 Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "resolveEphemeral");
                 String token = UUID.randomUUID().toString();
                 InstantAppDigest digest = InstantAppResolver.parseDigest(intent);
-                final InstantAppRequest requestObject = new InstantAppRequest(
-                        null /*responseObj*/, intent /*origIntent*/, resolvedType,
-                        null /*callingPackage*/, isRequesterInstantApp,
-                        userId, null /*verificationBundle*/, resolveForStart,
+                final InstantAppRequest requestObject = new InstantAppRequest(null /*responseObj*/,
+                        intent /*origIntent*/, resolvedType, null /*callingPackage*/,
+                        null /*callingFeatureId*/, isRequesterInstantApp, userId,
+                        null /*verificationBundle*/, resolveForStart,
                         digest.getDigestPrefixSecure(), token);
                 auxiliaryResponse = InstantAppResolver.doInstantAppResolutionPhaseOne(
                         mInstantAppResolverConnection, requestObject);
@@ -7054,7 +7045,7 @@
             return null;
         }
         List<ResolveInfo> resultTargetUser = mComponentResolver.queryActivities(intent,
-                resolvedType, flags, parentUserId);
+                resolvedType, flags, 0, parentUserId);
 
         if (resultTargetUser == null || resultTargetUser.isEmpty()) {
             return null;
@@ -7239,8 +7230,9 @@
         failureActivityIntent.setPackage(packageName);
         // IMPORTANT: disallow dynamic splits to avoid an infinite loop
         final List<ResolveInfo> result = queryIntentActivitiesInternal(
-                failureActivityIntent, null /*resolvedType*/, 0 /*flags*/, filterCallingUid, userId,
-                false /*resolveForStart*/, false /*allowDynamicSplits*/);
+                failureActivityIntent, null /*resolvedType*/, 0 /*flags*/,
+                0 /*privateResolveFlags*/, filterCallingUid, userId, false /*resolveForStart*/,
+                false /*allowDynamicSplits*/);
         final int NR = result.size();
         if (NR > 0) {
             for (int i = 0; i < NR; i++) {
@@ -7495,7 +7487,7 @@
             String resolvedType, int flags, int sourceUserId) {
         int targetUserId = filter.getTargetUserId();
         List<ResolveInfo> resultTargetUser = mComponentResolver.queryActivities(intent,
-                resolvedType, flags, targetUserId);
+                resolvedType, flags, 0, targetUserId);
         if (resultTargetUser != null && isUserEnabled(targetUserId)) {
             // If all the matches in the target profile are suspended, return null.
             for (int i = resultTargetUser.size() - 1; i >= 0; i--) {
@@ -8282,7 +8274,7 @@
                             continue;
                         }
                         ai = PackageInfoUtils.generateApplicationInfo(ps.pkg, effectiveFlags,
-                                ps.readUserState(userId), userId);
+                                ps.readUserState(userId), userId, ps);
                         if (ai != null) {
                             ai.packageName = resolveExternalPackageNameLPr(ps.pkg);
                         }
@@ -8308,7 +8300,7 @@
                             continue;
                         }
                         ApplicationInfo ai = PackageInfoUtils.generateApplicationInfo(p, flags,
-                                ps.readUserState(userId), userId);
+                                ps.readUserState(userId), userId, ps);
                         if (ai != null) {
                             ai.packageName = resolveExternalPackageNameLPr(p);
                             list.add(ai);
@@ -8461,13 +8453,13 @@
                 final boolean matchesAware = ((flags & MATCH_DIRECT_BOOT_AWARE) != 0)
                         && p.isDirectBootAware();
 
-                if ((p.getFlags() & ApplicationInfo.FLAG_PERSISTENT) != 0
-                        && (!mSafeMode || isSystemApp(p))
+                if (p.isPersistent()
+                        && (!mSafeMode || p.isSystem())
                         && (matchesUnaware || matchesAware)) {
                     PackageSetting ps = mSettings.mPackages.get(p.getPackageName());
                     if (ps != null) {
                         ApplicationInfo ai = PackageInfoUtils.generateApplicationInfo(p, flags,
-                                ps.readUserState(userId), userId);
+                                ps.readUserState(userId), userId, ps);
                         if (ai != null) {
                             finalList.add(ai);
                         }
@@ -8573,7 +8565,7 @@
                 return null;
             }
             final ParsedInstrumentation i = mInstrumentation.get(component);
-            return PackageInfoUtils.generateInstrumentationInfo(i, pkg, flags);
+            return PackageInfoUtils.generateInstrumentationInfo(i, pkg, flags, callingUserId, ps);
         }
     }
 
@@ -8586,11 +8578,12 @@
         if (shouldFilterApplicationLocked(ps, callingUid, callingUserId)) {
             return ParceledListSlice.emptyList();
         }
-        return new ParceledListSlice<>(queryInstrumentationInternal(targetPackage, flags));
+        return new ParceledListSlice<>(queryInstrumentationInternal(targetPackage, flags,
+                callingUserId));
     }
 
     private @NonNull List<InstrumentationInfo> queryInstrumentationInternal(String targetPackage,
-            int flags) {
+            int flags, int userId) {
         ArrayList<InstrumentationInfo> finalList = new ArrayList<>();
 
         // reader
@@ -8600,10 +8593,12 @@
                 final ParsedInstrumentation p = i.next();
                 if (targetPackage == null
                         || targetPackage.equals(p.getTargetPackage())) {
-                    AndroidPackage pkg = mPackages.get(p.getPackageName());
+                    String packageName = p.getPackageName();
+                    AndroidPackage pkg = mPackages.get(packageName);
+                    PackageSetting pkgSetting = getPackageSetting(packageName);
                     if (pkg != null) {
                         InstrumentationInfo ii = PackageInfoUtils.generateInstrumentationInfo(p,
-                                pkg, flags);
+                                pkg, flags, userId, pkgSetting);
                         if (ii != null) {
                             finalList.add(ii);
                         }
@@ -8616,7 +8611,7 @@
     }
 
     private void scanDirTracedLI(File scanDir, final int parseFlags, int scanFlags,
-            long currentTime, PackageParser packageParser, ExecutorService executorService) {
+            long currentTime, PackageParser2 packageParser, ExecutorService executorService) {
         Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "scanDir [" + scanDir.getAbsolutePath() + "]");
         try {
             scanDirLI(scanDir, parseFlags, scanFlags, currentTime, packageParser, executorService);
@@ -8626,7 +8621,7 @@
     }
 
     private void scanDirLI(File scanDir, int parseFlags, int scanFlags, long currentTime,
-            PackageParser packageParser, ExecutorService executorService) {
+            PackageParser2 packageParser, ExecutorService executorService) {
         final File[] files = scanDir.listFiles();
         if (ArrayUtils.isEmpty(files)) {
             Log.d(TAG, "No files in app dir " + scanDir);
@@ -8730,7 +8725,8 @@
 
         try {
             Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "collectCertificates");
-            ApkParseUtils.collectCertificates(parsedPackage, skipVerify);
+            parsedPackage.setSigningDetails(
+                    ParsingPackageUtils.collectCertificates(parsedPackage, skipVerify));
         } catch (PackageParserException e) {
             throw PackageManagerException.from(e);
         } finally {
@@ -8784,16 +8780,13 @@
     private AndroidPackage scanPackageLI(File scanFile, int parseFlags, int scanFlags,
             long currentTime, UserHandle user) throws PackageManagerException {
         if (DEBUG_INSTALL) Slog.d(TAG, "Parsing: " + scanFile);
-        PackageParser pp = new PackageParser();
-        pp.setSeparateProcesses(mSeparateProcesses);
-        pp.setOnlyCoreApps(mOnlyCore);
-        pp.setDisplayMetrics(mMetrics);
-        pp.setCallback(mPackageParserCallback);
+        PackageParser2 pp = new PackageParser2(mSeparateProcesses, mOnlyCore, mMetrics, null,
+                mPackageParserCallback);
 
         Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "parsePackage");
         final ParsedPackage parsedPackage;
         try {
-            parsedPackage = pp.parseParsedPackage(scanFile, parseFlags, false);
+            parsedPackage = pp.parsePackage(scanFile, parseFlags, false);
         } catch (PackageParserException e) {
             throw PackageManagerException.from(e);
         } finally {
@@ -8879,18 +8872,6 @@
         final boolean pkgAlreadyExists;
         PackageSetting pkgSetting;
 
-        // NOTE: installPackageLI() has the same code to setup the package's
-        // application info. This probably should be done lower in the call
-        // stack [such as scanPackageOnly()]. However, we verify the application
-        // info prior to that [in scanPackageNew()] and thus have to setup
-        // the application info early.
-        // TODO(b/135203078): Remove all of these application info calls
-        parsedPackage.setApplicationVolumeUuid(parsedPackage.getVolumeUuid())
-                .setApplicationInfoCodePath(parsedPackage.getCodePath())
-                .setApplicationInfoResourcePath(parsedPackage.getCodePath())
-                .setApplicationInfoBaseResourcePath(parsedPackage.getBaseCodePath())
-                .setApplicationInfoSplitResourcePaths(parsedPackage.getSplitCodePaths());
-
         synchronized (mLock) {
             renamedPkgName = mSettings.getRenamedPackageLPr(parsedPackage.getRealPackage());
             final String realPkgName = getRealPackageName(parsedPackage, renamedPkgName);
@@ -8943,8 +8924,8 @@
                     final ScanRequest request = new ScanRequest(parsedPackage, sharedUserSetting,
                             null, disabledPkgSetting /* pkgSetting */,
                             null /* disabledPkgSetting */, null /* originalPkgSetting */,
-                            null, parseFlags, scanFlags, isPlatformPackage, user);
-                    applyPolicy(parsedPackage, parseFlags, scanFlags, mPlatformPackage);
+                            null, parseFlags, scanFlags, isPlatformPackage, user, null);
+                    applyPolicy(parsedPackage, parseFlags, scanFlags, mPlatformPackage, true);
                     final ScanResult scanResult =
                             scanPackageOnlyLI(request, mInjector, mFactoryTest, -1L);
                     if (scanResult.existingSettingCopied && scanResult.request.pkgSetting != null) {
@@ -9078,7 +9059,7 @@
         }
 
         final ScanResult scanResult = scanPackageNewLI(parsedPackage, parseFlags, scanFlags
-                | SCAN_UPDATE_SIGNATURE, currentTime, user);
+                | SCAN_UPDATE_SIGNATURE, currentTime, user, null);
         if (scanResult.success) {
             synchronized (mLock) {
                 boolean appIdCreated = false;
@@ -9218,9 +9199,15 @@
             return;
         }
 
-        List<AndroidPackage> pkgs;
+        List<PackageSetting> pkgSettings;
         synchronized (mLock) {
-            pkgs = PackageManagerServiceUtils.getPackagesForDexopt(mPackages.values(), this);
+            pkgSettings = PackageManagerServiceUtils.getPackagesForDexopt(
+                    mSettings.mPackages.values(), this);
+        }
+
+        List<AndroidPackage> pkgs = new ArrayList<>(pkgSettings.size());
+        for (int index = 0; index < pkgSettings.size(); index++) {
+            pkgs.add(pkgSettings.get(index).pkg);
         }
 
         final long startTime = System.nanoTime();
@@ -9265,7 +9252,7 @@
 
             boolean useProfileForDexopt = false;
 
-            if ((isFirstBoot() || isDeviceUpgrading()) && isSystemApp(pkg)) {
+            if ((isFirstBoot() || isDeviceUpgrading()) && pkg.isSystem()) {
                 // Copy over initial preopt profiles since we won't get any JIT samples for methods
                 // that are already compiled.
                 File profileFile = new File(getPrebuildProfilePath(pkg));
@@ -9419,16 +9406,16 @@
 
     @GuardedBy("mLock")
     private void notifyPackageUseLocked(String packageName, int reason) {
-        final AndroidPackage p = mPackages.get(packageName);
-        if (p == null) {
+        final PackageSetting pkgSetting = mSettings.getPackageLPr(packageName);
+        if (pkgSetting == null) {
             return;
         }
-        p.mutate().setLastPackageUsageTimeInMills(reason, System.currentTimeMillis());
+        pkgSetting.getPkgState().setLastPackageUsageTimeInMills(reason, System.currentTimeMillis());
     }
 
     @Override
-    public void notifyDexLoad(String loadingPackageName, List<String> classLoaderNames,
-            List<String> classPaths, String loaderIsa) {
+    public void notifyDexLoad(String loadingPackageName, Map<String, String> classLoaderContextMap,
+            String loaderIsa) {
         int userId = UserHandle.getCallingUserId();
         ApplicationInfo ai = getApplicationInfo(loadingPackageName, /*flags*/ 0, userId);
         if (ai == null) {
@@ -9436,7 +9423,7 @@
                 + loadingPackageName + ", user=" + userId);
             return;
         }
-        mDexManager.notifyDexLoad(ai, classLoaderNames, classPaths, loaderIsa, userId);
+        mDexManager.notifyDexLoad(ai, classLoaderContextMap, loaderIsa, userId);
     }
 
     @Override
@@ -9551,19 +9538,21 @@
     // if the package can now be considered up to date for the given filter.
     private int performDexOptInternal(DexoptOptions options) {
         AndroidPackage p;
+        PackageSetting pkgSetting;
         synchronized (mLock) {
             p = mPackages.get(options.getPackageName());
-            if (p == null) {
+            pkgSetting = mSettings.getPackageLPr(options.getPackageName());
+            if (p == null || pkgSetting == null) {
                 // Package could not be found. Report failure.
                 return PackageDexOptimizer.DEX_OPT_FAILED;
             }
-            mPackageUsage.maybeWriteAsync(mPackages);
+            mPackageUsage.maybeWriteAsync(mSettings.mPackages);
             mCompilerStats.maybeWriteAsync();
         }
         long callingId = Binder.clearCallingIdentity();
         try {
             synchronized (mInstallLock) {
-                return performDexOptInternalWithDependenciesLI(p, options);
+                return performDexOptInternalWithDependenciesLI(p, pkgSetting, options);
             }
         } finally {
             Binder.restoreCallingIdentity(callingId);
@@ -9583,7 +9572,7 @@
     }
 
     private int performDexOptInternalWithDependenciesLI(AndroidPackage p,
-            DexoptOptions options) {
+            @NonNull PackageSetting pkgSetting, DexoptOptions options) {
         // Select the dex optimizer based on the force parameter.
         // Note: The force option is rarely used (cmdline input for testing, mostly), so it's OK to
         //       allocate an object here.
@@ -9598,9 +9587,10 @@
         // at boot, or background job), the passed 'targetCompilerFilter' stays the same,
         // and the first package that uses the library will dexopt it. The
         // others will see that the compiled code for the library is up to date.
-        Collection<SharedLibraryInfo> deps = findSharedLibraries(p);
-        final String[] instructionSets = getAppDexInstructionSets(p.getPrimaryCpuAbi(),
-                p.getSecondaryCpuAbi());
+        Collection<SharedLibraryInfo> deps = findSharedLibraries(pkgSetting);
+        final String[] instructionSets = getAppDexInstructionSets(
+                AndroidPackageUtils.getPrimaryCpuAbi(p, pkgSetting),
+                AndroidPackageUtils.getSecondaryCpuAbi(p, pkgSetting));
         if (!deps.isEmpty()) {
             DexoptOptions libraryOptions = new DexoptOptions(options.getPackageName(),
                     options.getCompilationReason(), options.getCompilerFilter(),
@@ -9608,12 +9598,14 @@
                     options.getFlags() | DexoptOptions.DEXOPT_AS_SHARED_LIBRARY);
             for (SharedLibraryInfo info : deps) {
                 AndroidPackage depPackage = null;
+                PackageSetting depPackageSetting = null;
                 synchronized (mLock) {
                     depPackage = mPackages.get(info.getPackageName());
+                    depPackageSetting = mSettings.getPackageLPr(info.getPackageName());
                 }
-                if (depPackage != null) {
+                if (depPackage != null && depPackageSetting != null) {
                     // TODO: Analyze and investigate if we (should) profile libraries.
-                    pdo.performDexOpt(depPackage, instructionSets,
+                    pdo.performDexOpt(depPackage, depPackageSetting, instructionSets,
                             getOrCreateCompilerPackageStats(depPackage),
                             mDexManager.getPackageUseInfoOrDefault(depPackage.getPackageName()),
                             libraryOptions);
@@ -9622,7 +9614,8 @@
                 }
             }
         }
-        return pdo.performDexOpt(p, instructionSets,
+
+        return pdo.performDexOpt(p, pkgSetting, instructionSets,
                 getOrCreateCompilerPackageStats(p),
                 mDexManager.getPackageUseInfoOrDefault(p.getPackageName()), options);
     }
@@ -9665,11 +9658,11 @@
         }
     }
 
-    private static List<SharedLibraryInfo> findSharedLibraries(AndroidPackage p) {
-        if (p.getUsesLibraryInfos() != null) {
+    private static List<SharedLibraryInfo> findSharedLibraries(PackageSetting pkgSetting) {
+        if (!pkgSetting.getPkgState().getUsesLibraryInfos().isEmpty()) {
             ArrayList<SharedLibraryInfo> retValue = new ArrayList<>();
             Set<String> collectedNames = new HashSet<>();
-            for (SharedLibraryInfo info : p.getUsesLibraryInfos()) {
+            for (SharedLibraryInfo info : pkgSetting.getPkgState().getUsesLibraryInfos()) {
                 findSharedLibrariesRecursive(info, retValue, collectedNames);
             }
             return retValue;
@@ -9692,15 +9685,16 @@
         }
     }
 
-    List<AndroidPackage> findSharedNonSystemLibraries(AndroidPackage pkg) {
-        List<SharedLibraryInfo> deps = findSharedLibraries(pkg);
+    List<PackageSetting> findSharedNonSystemLibraries(PackageSetting pkgSetting) {
+        List<SharedLibraryInfo> deps = findSharedLibraries(pkgSetting);
         if (!deps.isEmpty()) {
-            ArrayList<AndroidPackage> retValue = new ArrayList<>();
+            List<PackageSetting> retValue = new ArrayList<>();
             synchronized (mLock) {
                 for (SharedLibraryInfo info : deps) {
-                    AndroidPackage depPackage = mPackages.get(info.getPackageName());
-                    if (depPackage != null) {
-                        retValue.add(depPackage);
+                    PackageSetting depPackageSetting =
+                            mSettings.getPackageLPr(info.getPackageName());
+                    if (depPackageSetting != null && depPackageSetting.pkg != null) {
+                        retValue.add(depPackageSetting);
                     }
                 }
             }
@@ -9772,7 +9766,7 @@
     }
 
     public void shutdown() {
-        mPackageUsage.writeNow(mPackages);
+        mPackageUsage.writeNow(mSettings.mPackages);
         mCompilerStats.writeNow();
         mDexManager.writePackageDexUsageNow();
         PackageWatchdog.getInstance(mContext).writeNow();
@@ -9818,9 +9812,11 @@
         enforceSystemOrRoot("forceDexOpt");
 
         AndroidPackage pkg;
+        PackageSetting pkgSetting;
         synchronized (mLock) {
             pkg = mPackages.get(packageName);
-            if (pkg == null) {
+            pkgSetting = mSettings.getPackageLPr(packageName);
+            if (pkg == null || pkgSetting == null) {
                 throw new IllegalArgumentException("Unknown package: " + packageName);
             }
         }
@@ -9830,8 +9826,7 @@
 
             // Whoever is calling forceDexOpt wants a compiled package.
             // Don't use profiles since that may cause compilation to be skipped.
-            final int res = performDexOptInternalWithDependenciesLI(
-                    pkg,
+            final int res = performDexOptInternalWithDependenciesLI(pkg, pkgSetting,
                     new DexoptOptions(packageName,
                             getDefaultCompilerFilter(),
                             DexoptOptions.DEXOPT_FORCE | DexoptOptions.DEXOPT_BOOT_COMPLETE));
@@ -9967,7 +9962,7 @@
         // Or:
         // - Package manager is in a state where package isn't scanned yet. This will
         //   get called again after scanning to fix the dependencies.
-        if (pkg.isLibrary()) {
+        if (AndroidPackageUtils.isLibrary(pkg)) {
             if (pkg.getStaticSharedLibName() != null) {
                 SharedLibraryInfo definedLibrary = getSharedLibraryInfoLPr(
                         pkg.getStaticSharedLibName(), pkg.getStaticSharedLibVersion());
@@ -9988,40 +9983,44 @@
 
     @GuardedBy("mLock")
     private void addSharedLibraryLPr(AndroidPackage pkg, Set<String> usesLibraryFiles,
-            SharedLibraryInfo libInfo, AndroidPackage changingLib) {
+            SharedLibraryInfo libInfo, @Nullable AndroidPackage changingLib,
+            @Nullable PackageSetting changingLibSetting) {
         if (libInfo.getPath() != null) {
             usesLibraryFiles.add(libInfo.getPath());
             return;
         }
-        AndroidPackage p = mPackages.get(libInfo.getPackageName());
+        AndroidPackage pkgForCodePaths = mPackages.get(libInfo.getPackageName());
+        PackageSetting pkgSetting = mSettings.getPackageLPr(libInfo.getPackageName());
         if (changingLib != null && changingLib.getPackageName().equals(libInfo.getPackageName())) {
             // If we are doing this while in the middle of updating a library apk,
             // then we need to make sure to use that new apk for determining the
             // dependencies here.  (We haven't yet finished committing the new apk
             // to the package manager state.)
-            if (p == null || p.getPackageName().equals(changingLib.getPackageName())) {
-                p = changingLib;
+            if (pkgForCodePaths == null
+                    || pkgForCodePaths.getPackageName().equals(changingLib.getPackageName())) {
+                pkgForCodePaths = changingLib;
+                pkgSetting = changingLibSetting;
             }
         }
-        if (p != null) {
-            usesLibraryFiles.addAll(p.getAllCodePaths());
+        if (pkgForCodePaths != null) {
+            usesLibraryFiles.addAll(AndroidPackageUtils.getAllCodePaths(pkgForCodePaths));
             // If the package provides libraries, add the dependency to them.
-            applyDefiningSharedLibraryUpdateLocked(pkg, libInfo, (definingLibrary, dependency) -> {
-                definingLibrary.addDependency(dependency);
-            });
-            if (p.getUsesLibraryFiles() != null) {
-                Collections.addAll(usesLibraryFiles, p.getUsesLibraryFiles());
+            applyDefiningSharedLibraryUpdateLocked(pkg, libInfo, SharedLibraryInfo::addDependency);
+            if (pkgSetting != null) {
+                usesLibraryFiles.addAll(pkgSetting.getPkgState().getUsesLibraryFiles());
             }
         }
     }
 
     @GuardedBy("mLock")
-    private void updateSharedLibrariesLocked(AndroidPackage pkg,
-            AndroidPackage changingLib, Map<String, AndroidPackage> availablePackages)
-                    throws PackageManagerException {
-        final ArrayList<SharedLibraryInfo> sharedLibraryInfos =
-                collectSharedLibraryInfos(pkg, availablePackages, mSharedLibraries, null);
-        executeSharedLibrariesUpdateLPr(pkg, changingLib, sharedLibraryInfos);
+    private void updateSharedLibrariesLocked(AndroidPackage pkg, PackageSetting pkgSetting,
+            @Nullable AndroidPackage changingLib, @Nullable PackageSetting changingLibSetting,
+            Map<String, AndroidPackage> availablePackages)
+            throws PackageManagerException {
+        final ArrayList<SharedLibraryInfo> sharedLibraryInfos = collectSharedLibraryInfos(
+                pkgSetting.pkg, availablePackages, mSharedLibraries, null);
+        executeSharedLibrariesUpdateLPr(pkg, pkgSetting, changingLib, changingLibSetting,
+                sharedLibraryInfos);
     }
 
     private static ArrayList<SharedLibraryInfo> collectSharedLibraryInfos(AndroidPackage pkg,
@@ -10036,18 +10035,18 @@
         // that libraries are searched in the correct order) and must have no
         // duplicates.
         ArrayList<SharedLibraryInfo> usesLibraryInfos = null;
-        if (pkg.getUsesLibraries() != null) {
+        if (!pkg.getUsesLibraries().isEmpty()) {
             usesLibraryInfos = collectSharedLibraryInfos(pkg.getUsesLibraries(), null, null,
                     pkg.getPackageName(), true, pkg.getTargetSdkVersion(), null,
                     availablePackages, existingLibraries, newLibraries);
         }
-        if (pkg.getUsesStaticLibraries() != null) {
+        if (!pkg.getUsesStaticLibraries().isEmpty()) {
             usesLibraryInfos = collectSharedLibraryInfos(pkg.getUsesStaticLibraries(),
                     pkg.getUsesStaticLibrariesVersions(), pkg.getUsesStaticLibrariesCertDigests(),
                     pkg.getPackageName(), true, pkg.getTargetSdkVersion(), usesLibraryInfos,
                     availablePackages, existingLibraries, newLibraries);
         }
-        if (pkg.getUsesOptionalLibraries() != null) {
+        if (!pkg.getUsesOptionalLibraries().isEmpty()) {
             usesLibraryInfos = collectSharedLibraryInfos(pkg.getUsesOptionalLibraries(),
                     null, null, pkg.getPackageName(), false, pkg.getTargetSdkVersion(),
                     usesLibraryInfos, availablePackages, existingLibraries, newLibraries);
@@ -10056,25 +10055,27 @@
     }
 
     private void executeSharedLibrariesUpdateLPr(AndroidPackage pkg,
-            AndroidPackage changingLib, ArrayList<SharedLibraryInfo> usesLibraryInfos) {
+            @NonNull PackageSetting pkgSetting, @Nullable AndroidPackage changingLib,
+            @Nullable PackageSetting changingLibSetting,
+            ArrayList<SharedLibraryInfo> usesLibraryInfos) {
         // If the package provides libraries, clear their old dependencies.
         // This method will set them up again.
         applyDefiningSharedLibraryUpdateLocked(pkg, null, (definingLibrary, dependency) -> {
             definingLibrary.clearDependencies();
         });
         if (usesLibraryInfos != null) {
-            pkg.mutate().setUsesLibraryInfos(usesLibraryInfos);
+            pkgSetting.getPkgState().setUsesLibraryInfos(usesLibraryInfos);
             // Use LinkedHashSet to preserve the order of files added to
             // usesLibraryFiles while eliminating duplicates.
             Set<String> usesLibraryFiles = new LinkedHashSet<>();
             for (SharedLibraryInfo libInfo : usesLibraryInfos) {
-                addSharedLibraryLPr(pkg, usesLibraryFiles, libInfo, changingLib);
+                addSharedLibraryLPr(pkg, usesLibraryFiles, libInfo, changingLib,
+                        changingLibSetting);
             }
-            pkg.mutate().setUsesLibraryFiles(usesLibraryFiles.toArray(
-                    new String[usesLibraryFiles.size()]));
+            pkgSetting.getPkgState().setUsesLibraryFiles(new ArrayList<>(usesLibraryFiles));
         } else {
-            pkg.mutate().setUsesLibraryInfos(null)
-                    .setUsesLibraryFiles(null);
+            pkgSetting.getPkgState().setUsesLibraryInfos(Collections.emptyList())
+                    .setUsesLibraryFiles(Collections.emptyList());
         }
     }
 
@@ -10190,27 +10191,32 @@
 
     @GuardedBy("mLock")
     private ArrayList<AndroidPackage> updateAllSharedLibrariesLocked(
-            AndroidPackage updatedPkg,
+            @Nullable AndroidPackage updatedPkg, @Nullable PackageSetting updatedPkgSetting,
             Map<String, AndroidPackage> availablePackages) {
         ArrayList<AndroidPackage> resultList = null;
         // Set of all descendants of a library; used to eliminate cycles
         ArraySet<String> descendants = null;
         // The current list of packages that need updating
-        ArrayList<AndroidPackage> needsUpdating = null;
-        if (updatedPkg != null) {
+        List<Pair<AndroidPackage, PackageSetting>> needsUpdating = null;
+        if (updatedPkg != null && updatedPkgSetting != null) {
             needsUpdating = new ArrayList<>(1);
-            needsUpdating.add(updatedPkg);
+            needsUpdating.add(Pair.create(updatedPkg, updatedPkgSetting));
         }
         do {
-            final AndroidPackage changingPkg =
+            final Pair<AndroidPackage, PackageSetting> changingPkgPair =
                     (needsUpdating == null) ? null : needsUpdating.remove(0);
+            final AndroidPackage changingPkg = changingPkgPair != null
+                    ? changingPkgPair.first : null;
+            final PackageSetting changingPkgSetting = changingPkgPair != null
+                    ? changingPkgPair.second : null;
             for (int i = mPackages.size() - 1; i >= 0; --i) {
                 final AndroidPackage pkg = mPackages.valueAt(i);
+                final PackageSetting pkgSetting = mSettings.getPackageLPr(pkg.getPackageName());
                 if (changingPkg != null
                         && !hasString(pkg.getUsesLibraries(), changingPkg.getLibraryNames())
                         && !hasString(pkg.getUsesOptionalLibraries(), changingPkg.getLibraryNames())
                         && !ArrayUtils.contains(pkg.getUsesStaticLibraries(),
-                                changingPkg.getStaticSharedLibName())) {
+                        changingPkg.getStaticSharedLibName())) {
                     continue;
                 }
                 if (resultList == null) {
@@ -10224,19 +10230,20 @@
                     }
                     if (!descendants.contains(pkg.getPackageName())) {
                         descendants.add(pkg.getPackageName());
-                        needsUpdating.add(pkg);
+                        needsUpdating.add(Pair.create(pkg, pkgSetting));
                     }
                 }
                 try {
-                    updateSharedLibrariesLocked(pkg, changingPkg, availablePackages);
+                    updateSharedLibrariesLocked(pkg, pkgSetting, changingPkg,
+                            changingPkgSetting, availablePackages);
                 } catch (PackageManagerException e) {
                     // If a system app update or an app and a required lib missing we
                     // delete the package and for updated system apps keep the data as
                     // it is better for the user to reinstall than to be in an limbo
                     // state. Also libs disappearing under an app should never happen
                     // - just in case.
-                    if (!pkg.isSystem() || pkg.isUpdatedSystemApp()) {
-                        final int flags = pkg.isUpdatedSystemApp()
+                    if (!pkg.isSystem() || pkgSetting.getPkgState().isUpdatedSystemApp()) {
+                        final int flags = pkgSetting.getPkgState().isUpdatedSystemApp()
                                 ? PackageManager.DELETE_KEEP_DATA : 0;
                         deletePackageLIF(pkg.getPackageName(), null, true,
                                 mUserManager.getUserIds(), flags, null,
@@ -10252,10 +10259,11 @@
     @GuardedBy({"mInstallLock", "mLock"})
     private ScanResult scanPackageTracedLI(ParsedPackage parsedPackage,
             final @ParseFlags int parseFlags, @ScanFlags int scanFlags, long currentTime,
-            @Nullable UserHandle user) throws PackageManagerException {
+            @Nullable UserHandle user, String cpuAbiOverride) throws PackageManagerException {
         Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "scanPackage");
         try {
-            return scanPackageNewLI(parsedPackage, parseFlags, scanFlags, currentTime, user);
+            return scanPackageNewLI(parsedPackage, parseFlags, scanFlags, currentTime, user,
+                    cpuAbiOverride);
         } finally {
             Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
         }
@@ -10330,6 +10338,9 @@
         @Nullable public final UserHandle user;
         /** Whether or not the platform package is being scanned */
         public final boolean isPlatformPackage;
+        /** Override value for package ABI if set during install */
+        @Nullable
+        public final String cpuAbiOverride;
         public ScanRequest(
                 @NonNull ParsedPackage parsedPackage,
                 @Nullable SharedUserSetting sharedUserSetting,
@@ -10341,7 +10352,8 @@
                 @ParseFlags int parseFlags,
                 @ScanFlags int scanFlags,
                 boolean isPlatformPackage,
-                @Nullable UserHandle user) {
+                @Nullable UserHandle user,
+                @Nullable String cpuAbiOverride) {
             this.parsedPackage = parsedPackage;
             this.oldPkg = oldPkg;
             this.pkgSetting = pkgSetting;
@@ -10354,6 +10366,7 @@
             this.scanFlags = scanFlags;
             this.isPlatformPackage = isPlatformPackage;
             this.user = user;
+            this.cpuAbiOverride = cpuAbiOverride;
         }
     }
 
@@ -10461,7 +10474,7 @@
     @GuardedBy({"mInstallLock", "mLock"})
     private ScanResult scanPackageNewLI(@NonNull ParsedPackage parsedPackage,
             final @ParseFlags int parseFlags, @ScanFlags int scanFlags, long currentTime,
-            @Nullable UserHandle user) throws PackageManagerException {
+            @Nullable UserHandle user, String cpuAbiOverride) throws PackageManagerException {
 
         final String renamedPkgName = mSettings.getRenamedPackageLPr(
                 parsedPackage.getRealPackage());
@@ -10482,7 +10495,13 @@
 
         scanFlags = adjustScanFlags(scanFlags, pkgSetting, disabledPkgSetting, user, parsedPackage);
         synchronized (mLock) {
-            applyPolicy(parsedPackage, parseFlags, scanFlags, mPlatformPackage);
+            boolean isUpdatedSystemApp;
+            if (pkgSetting != null) {
+                isUpdatedSystemApp = pkgSetting.getPkgState().isUpdatedSystemApp();
+            } else {
+                isUpdatedSystemApp = disabledPkgSetting != null;
+            }
+            applyPolicy(parsedPackage, parseFlags, scanFlags, mPlatformPackage, isUpdatedSystemApp);
             assertPackageIsValid(parsedPackage, parseFlags, scanFlags);
 
             SharedUserSetting sharedUserSetting = null;
@@ -10502,7 +10521,8 @@
             final ScanRequest request = new ScanRequest(parsedPackage, sharedUserSetting,
                     pkgSetting == null ? null : pkgSetting.pkg, pkgSetting, disabledPkgSetting,
                     originalPkgSetting, realPkgName, parseFlags, scanFlags,
-                    Objects.equals(parsedPackage.getPackageName(), platformPackageName), user);
+                    Objects.equals(parsedPackage.getPackageName(), platformPackageName), user,
+                    cpuAbiOverride);
             return scanPackageOnlyLI(request, mInjector, mFactoryTest, currentTime);
         }
     }
@@ -10604,7 +10624,8 @@
         }
 
         if (reconciledPkg.collectedSharedLibraryInfos != null) {
-            executeSharedLibrariesUpdateLPr(pkg, null, reconciledPkg.collectedSharedLibraryInfos);
+            executeSharedLibrariesUpdateLPr(pkg, pkgSetting, null, null,
+                    reconciledPkg.collectedSharedLibraryInfos);
         }
 
         final KeySetManagerService ksms = mSettings.mKeySetManagerService;
@@ -10617,7 +10638,7 @@
         }
         pkgSetting.signatures.mSigningDetails = reconciledPkg.signingDetails;
 
-        if (pkg.getAdoptPermissions() != null) {
+        if (!pkg.getAdoptPermissions().isEmpty()) {
             // This package wants to adopt ownership of permissions from
             // another package.
             for (int i = pkg.getAdoptPermissions().size() - 1; i >= 0; i--) {
@@ -10671,8 +10692,7 @@
     /** Returns {@code true} if the package has been renamed. Otherwise, {@code false}. */
     private static boolean isPackageRenamed(@NonNull AndroidPackage pkg,
             @Nullable String renamedPkgName) {
-        return pkg.getOriginalPackages() != null
-                && pkg.getOriginalPackages().contains(renamedPkgName);
+        return pkg.getOriginalPackages().contains(renamedPkgName);
     }
 
     /**
@@ -10724,8 +10744,7 @@
      */
     private static void ensurePackageRenamed(@NonNull ParsedPackage parsedPackage,
             @NonNull String renamedPackageName) {
-        if (parsedPackage.getOriginalPackages() == null
-                || !parsedPackage.getOriginalPackages().contains(renamedPackageName)
+        if (!parsedPackage.getOriginalPackages().contains(renamedPackageName)
                 || parsedPackage.getPackageName().equals(renamedPackageName)) {
             return;
         }
@@ -10754,19 +10773,21 @@
                 }
 
                 ps.primaryCpuAbiString = adjustedAbi;
-                if (ps.pkg != null && !TextUtils.equals(adjustedAbi, ps.pkg.getPrimaryCpuAbi())) {
-                    ps.pkg.mutate().setPrimaryCpuAbi(adjustedAbi);
-                    if (DEBUG_ABI_SELECTION) {
-                        Slog.i(TAG,
-                                "Adjusting ABI for " + ps.name + " to " + adjustedAbi
-                                        + " (scannedPackage="
-                                        + (scannedPackage != null ? scannedPackage : "null")
-                                        + ")");
+                if (ps.pkg != null) {
+                    if (!TextUtils.equals(adjustedAbi,
+                            AndroidPackageUtils.getRawPrimaryCpuAbi(ps.pkg))) {
+                        if (DEBUG_ABI_SELECTION) {
+                            Slog.i(TAG,
+                                    "Adjusting ABI for " + ps.name + " to " + adjustedAbi
+                                            + " (scannedPackage="
+                                            + (scannedPackage != null ? scannedPackage : "null")
+                                            + ")");
+                        }
+                        if (changedAbiCodePath == null) {
+                            changedAbiCodePath = new ArrayList<>();
+                        }
+                        changedAbiCodePath.add(ps.codePathString);
                     }
-                    if (changedAbiCodePath == null) {
-                        changedAbiCodePath = new ArrayList<>();
-                    }
-                    changedAbiCodePath.add(ps.codePathString);
                 }
             }
         }
@@ -10776,6 +10797,8 @@
     /**
      * Sets the enabled state of components configured through {@link SystemConfig}.
      * This modifies the {@link PackageSetting} object.
+     *
+     * TODO(b/135203078): Move this to package parsing
      **/
     static void configurePackageComponents(AndroidPackage pkg) {
         final ArrayMap<String, Boolean> componentsEnabledStates = SystemConfig.getInstance()
@@ -10786,7 +10809,7 @@
 
         for (int i = ArrayUtils.size(pkg.getActivities()) - 1; i >= 0; i--) {
             final ParsedActivity component = pkg.getActivities().get(i);
-            final Boolean enabled = componentsEnabledStates.get(component.className);
+            final Boolean enabled = componentsEnabledStates.get(component.getName());
             if (enabled != null) {
                 component.setEnabled(enabled);
             }
@@ -10794,7 +10817,7 @@
 
         for (int i = ArrayUtils.size(pkg.getReceivers()) - 1; i >= 0; i--) {
             final ParsedActivity component = pkg.getReceivers().get(i);
-            final Boolean enabled = componentsEnabledStates.get(component.className);
+            final Boolean enabled = componentsEnabledStates.get(component.getName());
             if (enabled != null) {
                 component.setEnabled(enabled);
             }
@@ -10802,7 +10825,7 @@
 
         for (int i = ArrayUtils.size(pkg.getProviders()) - 1; i >= 0; i--) {
             final ParsedProvider component = pkg.getProviders().get(i);
-            final Boolean enabled = componentsEnabledStates.get(component.className);
+            final Boolean enabled = componentsEnabledStates.get(component.getName());
             if (enabled != null) {
                 component.setEnabled(enabled);
             }
@@ -10810,7 +10833,7 @@
 
         for (int i = ArrayUtils.size(pkg.getServices()) - 1; i >= 0; i--) {
             final ParsedService component = pkg.getServices().get(i);
-            final Boolean enabled = componentsEnabledStates.get(component.className);
+            final Boolean enabled = componentsEnabledStates.get(component.getName());
             if (enabled != null) {
                 component.setEnabled(enabled);
             }
@@ -10858,8 +10881,8 @@
         }
 
         // Initialize package source and resource directories
-        final File destCodeFile = new File(parsedPackage.getAppInfoCodePath());
-        final File destResourceFile = new File(parsedPackage.getAppInfoResourcePath());
+        final File destCodeFile = new File(parsedPackage.getCodePath());
+        final File destResourceFile = new File(parsedPackage.getCodePath());
 
         // We keep references to the derived CPU Abis from settings in oder to reuse
         // them in the case where we're not upgrading or booting for the first time.
@@ -10888,10 +10911,13 @@
         }
 
         String[] usesStaticLibraries = null;
-        if (parsedPackage.getUsesStaticLibraries() != null) {
+        if (!parsedPackage.getUsesStaticLibraries().isEmpty()) {
             usesStaticLibraries = new String[parsedPackage.getUsesStaticLibraries().size()];
             parsedPackage.getUsesStaticLibraries().toArray(usesStaticLibraries);
         }
+        // TODO(b/135203078): Remove appInfoFlag usage in favor of individually assigned booleans
+        //  to avoid adding something that's unsupported due to lack of state, since it's called
+        //  with null.
         final boolean createNewPackage = (pkgSetting == null);
         if (createNewPackage) {
             final boolean instantApp = (scanFlags & SCAN_AS_INSTANT_APP) != 0;
@@ -10900,16 +10926,18 @@
             pkgSetting = Settings.createNewSetting(parsedPackage.getPackageName(),
                     originalPkgSetting, disabledPkgSetting, realPkgName, sharedUserSetting,
                     destCodeFile, destResourceFile, parsedPackage.getNativeLibraryRootDir(),
-                    parsedPackage.getPrimaryCpuAbi(), parsedPackage.getSecondaryCpuAbi(),
-                    parsedPackage.getVersionCode(), parsedPackage.getFlags(),
-                    parsedPackage.getPrivateFlags(), user, true /*allowInstall*/, instantApp,
+                    AndroidPackageUtils.getRawPrimaryCpuAbi(parsedPackage),
+                    AndroidPackageUtils.getRawSecondaryCpuAbi(parsedPackage),
+                    parsedPackage.getVersionCode(),
+                    PackageInfoWithoutStateUtils.appInfoFlags(parsedPackage),
+                    PackageInfoWithoutStateUtils.appInfoPrivateFlags(parsedPackage),
+                    user, true /*allowInstall*/, instantApp,
                     virtualPreload, UserManagerService.getInstance(), usesStaticLibraries,
-                    parsedPackage.getUsesStaticLibrariesVersions());
+                    parsedPackage.getUsesStaticLibrariesVersions(), parsedPackage.getMimeGroups());
         } else {
             // make a deep copy to avoid modifying any existing system state.
             pkgSetting = new PackageSetting(pkgSetting);
-            // TODO(b/135203078): Remove entirely. Set package directly.
-            parsedPackage.setPackageSettingCallback(pkgSetting);
+            pkgSetting.pkg = parsedPackage;
 
             // REMOVE SharedUserSetting from method; update in a separate call.
             //
@@ -10918,10 +10946,13 @@
             // to null here, only to reset them at a later point.
             Settings.updatePackageSetting(pkgSetting, disabledPkgSetting, sharedUserSetting,
                     destCodeFile, destResourceFile, parsedPackage.getNativeLibraryDir(),
-                    parsedPackage.getPrimaryCpuAbi(), parsedPackage.getSecondaryCpuAbi(),
-                    parsedPackage.getFlags(), parsedPackage.getPrivateFlags(),
+                    AndroidPackageUtils.getRawPrimaryCpuAbi(parsedPackage),
+                    AndroidPackageUtils.getRawSecondaryCpuAbi(parsedPackage),
+                    PackageInfoWithoutStateUtils.appInfoFlags(parsedPackage),
+                    PackageInfoWithoutStateUtils.appInfoPrivateFlags(parsedPackage),
                     UserManagerService.getInstance(),
-                    usesStaticLibraries, parsedPackage.getUsesStaticLibrariesVersions());
+                    usesStaticLibraries, parsedPackage.getUsesStaticLibrariesVersions(),
+                    parsedPackage.getMimeGroups());
         }
         if (createNewPackage && originalPkgSetting != null) {
             // This is the initial transition from the original package, so,
@@ -10947,35 +10978,28 @@
         if (disabledPkgSetting != null
                 || (0 != (scanFlags & SCAN_NEW_INSTALL)
                 && pkgSetting != null && pkgSetting.isSystem())) {
-            parsedPackage.mutate().setUpdatedSystemApp(true);
+            pkgSetting.getPkgState().setUpdatedSystemApp(true);
         }
 
         parsedPackage
                 .setSeInfo(SELinuxMMAC.getSeInfo(parsedPackage, sharedUserSetting,
                         injector.getCompatibility()))
                 .setSeInfoUser(SELinuxUtil.assignSeinfoUser(pkgSetting.readUserState(
-                        userId == UserHandle.USER_ALL ? UserHandle.USER_SYSTEM : userId)))
-                .setProcessName(fixProcessName(parsedPackage.getPackageName(),
-                        parsedPackage.getProcessName()));
-
-        if (!isPlatformPackage) {
-            // Get all of our default paths setup
-            parsedPackage.initForUser(UserHandle.USER_SYSTEM);
-        }
+                        userId == UserHandle.USER_ALL ? UserHandle.USER_SYSTEM : userId)));
 
         if (parsedPackage.isSystem()) {
             configurePackageComponents(parsedPackage);
         }
 
-        final String cpuAbiOverride = deriveAbiOverride(parsedPackage.getCpuAbiOverride(),
-                pkgSetting);
+        final String cpuAbiOverride = deriveAbiOverride(request.cpuAbiOverride, pkgSetting);
 
         if ((scanFlags & SCAN_NEW_INSTALL) == 0) {
             if (needToDeriveAbi) {
                 Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "derivePackageAbi");
-                final boolean extractNativeLibs = !parsedPackage.isLibrary();
+                final boolean extractNativeLibs = !AndroidPackageUtils.isLibrary(parsedPackage);
                 final Pair<PackageAbiHelper.Abis, PackageAbiHelper.NativeLibraryPaths> derivedAbi =
-                        packageAbiHelper.derivePackageAbi(parsedPackage, cpuAbiOverride,
+                        packageAbiHelper.derivePackageAbi(parsedPackage,
+                                pkgSetting.getPkgState().isUpdatedSystemApp(), cpuAbiOverride,
                                 extractNativeLibs);
                 derivedAbi.first.applyTo(parsedPackage);
                 derivedAbi.second.applyTo(parsedPackage);
@@ -10984,14 +11008,16 @@
                 // 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.
-                if (isSystemApp(parsedPackage) && !parsedPackage.isUpdatedSystemApp() &&
-                        parsedPackage.getPrimaryCpuAbi() == null) {
+
+                String pkgRawPrimaryCpuAbi = AndroidPackageUtils.getRawPrimaryCpuAbi(parsedPackage);
+                if (parsedPackage.isSystem() && !pkgSetting.getPkgState().isUpdatedSystemApp() &&
+                        pkgRawPrimaryCpuAbi == null) {
                     final PackageAbiHelper.Abis abis = packageAbiHelper.getBundledAppAbis(
                             parsedPackage);
                     abis.applyTo(parsedPackage);
                     abis.applyTo(pkgSetting);
                     final PackageAbiHelper.NativeLibraryPaths nativeLibraryPaths =
-                            packageAbiHelper.getNativeLibraryPaths(parsedPackage,
+                            packageAbiHelper.getNativeLibraryPaths(parsedPackage, pkgSetting,
                                     sAppLib32InstallDir);
                     nativeLibraryPaths.applyTo(parsedPackage);
                 }
@@ -11003,13 +11029,16 @@
                         .setSecondaryCpuAbi(secondaryCpuAbiFromSettings);
 
                 final PackageAbiHelper.NativeLibraryPaths nativeLibraryPaths =
-                        packageAbiHelper.getNativeLibraryPaths(parsedPackage, sAppLib32InstallDir);
+                        packageAbiHelper.getNativeLibraryPaths(parsedPackage,
+                                pkgSetting, sAppLib32InstallDir);
                 nativeLibraryPaths.applyTo(parsedPackage);
 
                 if (DEBUG_ABI_SELECTION) {
                     Slog.i(TAG, "Using ABIS and native lib paths from settings : " +
-                            parsedPackage.getPackageName() + " " + parsedPackage.getPrimaryCpuAbi()
-                            + ", " + parsedPackage.getSecondaryCpuAbi());
+                            parsedPackage.getPackageName() + " " +
+                            AndroidPackageUtils.getRawPrimaryCpuAbi(parsedPackage)
+                            + ", " 
+                            + AndroidPackageUtils.getRawSecondaryCpuAbi(parsedPackage));
                 }
             }
         } else {
@@ -11026,7 +11055,8 @@
             // 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.getNativeLibraryPaths(parsedPackage, sAppLib32InstallDir);
+                    packageAbiHelper.getNativeLibraryPaths(parsedPackage, pkgSetting,
+                            sAppLib32InstallDir);
             nativeLibraryPaths.applyTo(parsedPackage);
         }
 
@@ -11044,20 +11074,16 @@
         // would've already compiled the app without taking the package setting into
         // account.
         if ((scanFlags & SCAN_NO_DEX) == 0 && (scanFlags & SCAN_NEW_INSTALL) != 0) {
-            if (cpuAbiOverride == null && parsedPackage.getPackageName() != null) {
+            if (cpuAbiOverride == null) {
                 Slog.w(TAG, "Ignoring persisted ABI override " + cpuAbiOverride +
                         " for package " + parsedPackage.getPackageName());
             }
         }
 
-        pkgSetting.primaryCpuAbiString = parsedPackage.getPrimaryCpuAbi();
-        pkgSetting.secondaryCpuAbiString = parsedPackage.getSecondaryCpuAbi();
+        pkgSetting.primaryCpuAbiString = AndroidPackageUtils.getRawPrimaryCpuAbi(parsedPackage);
+        pkgSetting.secondaryCpuAbiString = AndroidPackageUtils.getRawSecondaryCpuAbi(parsedPackage);
         pkgSetting.cpuAbiOverrideString = cpuAbiOverride;
 
-        // Copy the derived override back to the parsed package, so that we can
-        // update the package settings accordingly.
-        parsedPackage.setCpuAbiOverride(cpuAbiOverride);
-
         if (DEBUG_ABI_SELECTION) {
             Slog.d(TAG, "Resolved nativeLibraryRoot for " + parsedPackage.getPackageName()
                     + " to root=" + parsedPackage.getNativeLibraryRootDir() + ", isa="
@@ -11070,8 +11096,8 @@
 
         if (DEBUG_ABI_SELECTION) {
             Log.d(TAG, "Abis for package[" + parsedPackage.getPackageName() + "] are" +
-                    " primary=" + parsedPackage.getPrimaryCpuAbi() +
-                    " secondary=" + parsedPackage.getSecondaryCpuAbi());
+                    " primary=" + AndroidPackageUtils.getRawPrimaryCpuAbi(parsedPackage) +
+                    " secondary=" + AndroidPackageUtils.getRawSecondaryCpuAbi(parsedPackage));
         }
 
         if ((scanFlags & SCAN_BOOTING) == 0 && pkgSetting.sharedUser != null) {
@@ -11113,13 +11139,13 @@
         }
         pkgSetting.setTimeStamp(scanFileTime);
         // TODO(b/135203078): Remove, move to constructor
-        parsedPackage.setPackageSettingCallback(pkgSetting);
-        pkgSetting.pkgFlags = parsedPackage.getFlags();
+        pkgSetting.pkg = parsedPackage;
+        pkgSetting.pkgFlags = PackageInfoUtils.appInfoFlags(parsedPackage, pkgSetting);
         if (parsedPackage.getLongVersionCode() != pkgSetting.versionCode) {
             pkgSetting.versionCode = parsedPackage.getLongVersionCode();
         }
         // Update volume if needed
-        final String volumeUuid = parsedPackage.getApplicationInfoVolumeUuid();
+        final String volumeUuid = parsedPackage.getVolumeUuid();
         if (!Objects.equals(volumeUuid, pkgSetting.volumeUuid)) {
             Slog.i(PackageManagerService.TAG,
                     "Update" + (pkgSetting.isSystem() ? " system" : "")
@@ -11131,14 +11157,15 @@
 
         SharedLibraryInfo staticSharedLibraryInfo = null;
         if (!TextUtils.isEmpty(parsedPackage.getStaticSharedLibName())) {
-            staticSharedLibraryInfo = SharedLibraryInfo.createForStatic(parsedPackage);
+            staticSharedLibraryInfo =
+                    AndroidPackageUtils.createSharedLibraryForStatic(parsedPackage);
         }
         List<SharedLibraryInfo> dynamicSharedLibraryInfos = null;
         if (!ArrayUtils.isEmpty(parsedPackage.getLibraryNames())) {
             dynamicSharedLibraryInfos = new ArrayList<>(parsedPackage.getLibraryNames().size());
             for (String name : parsedPackage.getLibraryNames()) {
                 dynamicSharedLibraryInfos.add(
-                        SharedLibraryInfo.createForDynamic(parsedPackage, name));
+                        AndroidPackageUtils.createSharedLibraryForDynamic(parsedPackage, name));
             }
         }
 
@@ -11176,7 +11203,7 @@
      */
     private static void assertCodePolicy(AndroidPackage pkg)
             throws PackageManagerException {
-        final boolean shouldHaveCode = (pkg.getFlags() & ApplicationInfo.FLAG_HAS_CODE) != 0;
+        final boolean shouldHaveCode = pkg.isHasCode();
         if (shouldHaveCode && !apkHasCode(pkg.getBaseCodePath())) {
             throw new PackageManagerException(INSTALL_FAILED_INVALID_APK,
                     "Package " + pkg.getBaseCodePath() + " code is missing");
@@ -11202,7 +11229,8 @@
      * ideally be static, but, it requires locks to read system state.
      */
     private static void applyPolicy(ParsedPackage parsedPackage, final @ParseFlags int parseFlags,
-            final @ScanFlags int scanFlags, AndroidPackage platformPkg) {
+            final @ScanFlags int scanFlags, AndroidPackage platformPkg,
+            boolean isUpdatedSystemApp) {
         if ((scanFlags & SCAN_AS_SYSTEM) != 0) {
             parsedPackage.setSystem(true);
             // TODO(b/135203078): Can this be done in PackageParser? Or just inferred when the flag
@@ -11211,7 +11239,7 @@
                 parsedPackage.setAllComponentsDirectBootAware(true);
             }
             if (compressedFileExists(parsedPackage.getCodePath())) {
-                parsedPackage.setIsStub(true);
+                parsedPackage.setStub(true);
             }
         } else {
             parsedPackage
@@ -11246,14 +11274,14 @@
                 ) == PackageManager.SIGNATURE_MATCH))
         );
 
-        if (!isSystemApp(parsedPackage)) {
+        if (!parsedPackage.isSystem()) {
             // Only system apps can use these features.
             parsedPackage.clearOriginalPackages()
                     .setRealPackage(null)
                     .clearAdoptPermissions();
         }
 
-        PackageBackwardCompatibility.modifySharedLibraries(parsedPackage);
+        PackageBackwardCompatibility.modifySharedLibraries(parsedPackage, isUpdatedSystemApp);
     }
 
     private static @NonNull <T> T assertNotNull(@Nullable T object, String message)
@@ -11264,19 +11292,19 @@
         return object;
     }
 
-    private <T extends ComponentParseUtils.ParsedMainComponent>
+    private <T extends ParsedMainComponent>
             void assertPackageProcesses(AndroidPackage pkg, List<T> components,
-            ArrayMap<String, ComponentParseUtils.ParsedProcess> procs, String compName)
+            Map<String, ParsedProcess> procs, String compName)
             throws PackageManagerException {
         if (components == null) {
             return;
         }
         for (int i = components.size() - 1; i >= 0; i--) {
-            final ComponentParseUtils.ParsedMainComponent<?> component = components.get(i);
+            final ParsedMainComponent component = components.get(i);
             if (!procs.containsKey(component.getProcessName())) {
                 throw new PackageManagerException(
                         INSTALL_FAILED_PROCESS_NOT_DEFINED,
-                        "Can't install because " + compName + " " + component.className
+                        "Can't install because " + compName + " " + component.getClassName()
                                 + "'s process attribute " + component.getProcessName()
                                 + " (in package " + pkg.getPackageName()
                                 + ") is not included in the <processes> list");
@@ -11300,8 +11328,7 @@
             assertCodePolicy(pkg);
         }
 
-        if (pkg.getAppInfoCodePath() == null ||
-                pkg.getAppInfoResourcePath() == null) {
+        if (pkg.getCodePath() == null) {
             // Bail out. The resource and code paths haven't been set.
             throw new PackageManagerException(INSTALL_FAILED_INVALID_APK,
                     "Code and resource paths haven't been set correctly");
@@ -11384,49 +11411,49 @@
                 }
 
                 // Static shared libs cannot declare activities
-                if (pkg.getActivities() != null && !pkg.getActivities().isEmpty()) {
+                if (!pkg.getActivities().isEmpty()) {
                     throw new PackageManagerException(
                             "Static shared libs cannot declare activities");
                 }
 
                 // Static shared libs cannot declare services
-                if (pkg.getServices() != null && !pkg.getServices().isEmpty()) {
+                if (!pkg.getServices().isEmpty()) {
                     throw new PackageManagerException(
                             "Static shared libs cannot declare services");
                 }
 
                 // Static shared libs cannot declare providers
-                if (pkg.getProviders() != null && !pkg.getProviders().isEmpty()) {
+                if (!pkg.getProviders().isEmpty()) {
                     throw new PackageManagerException(
                             "Static shared libs cannot declare content providers");
                 }
 
                 // Static shared libs cannot declare receivers
-                if (pkg.getReceivers() != null && !pkg.getReceivers().isEmpty()) {
+                if (!pkg.getReceivers().isEmpty()) {
                     throw new PackageManagerException(
                             "Static shared libs cannot declare broadcast receivers");
                 }
 
                 // Static shared libs cannot declare permission groups
-                if (pkg.getPermissionGroups() != null && !pkg.getPermissionGroups().isEmpty()) {
+                if (!pkg.getPermissionGroups().isEmpty()) {
                     throw new PackageManagerException(
                             "Static shared libs cannot declare permission groups");
                 }
 
                 // Static shared libs cannot declare features
-                if (pkg.getFeatures() != null && !pkg.getFeatures().isEmpty()) {
+                if (!pkg.getFeatures().isEmpty()) {
                     throw new PackageManagerException(
                             "Static shared libs cannot declare features");
                 }
 
                 // Static shared libs cannot declare permissions
-                if (pkg.getPermissions() != null && !pkg.getPermissions().isEmpty()) {
+                if (!pkg.getPermissions().isEmpty()) {
                     throw new PackageManagerException(
                             "Static shared libs cannot declare permissions");
                 }
 
                 // Static shared libs cannot declare protected broadcasts
-                if (pkg.getProtectedBroadcasts() != null) {
+                if (!pkg.getProtectedBroadcasts().isEmpty()) {
                     throw new PackageManagerException(
                             "Static shared libs cannot declare protected broadcasts");
                 }
@@ -11488,12 +11515,11 @@
                                     + " and requiring known paths " + known.codePathString
                                     + " & " + known.resourcePathString);
                         }
-                        if (!pkg.getAppInfoCodePath().equals(known.codePathString)
-                                || !pkg.getAppInfoResourcePath().equals(
-                                        known.resourcePathString)) {
+                        if (!pkg.getCodePath().equals(known.codePathString)
+                                || !pkg.getCodePath().equals(known.resourcePathString)) {
                             throw new PackageManagerException(INSTALL_FAILED_PACKAGE_CHANGED,
                                     "Application package " + pkg.getPackageName()
-                                    + " found at " + pkg.getAppInfoCodePath()
+                                    + " found at " + pkg.getCodePath()
                                     + " but expected at " + known.codePathString
                                     + "; ignoring.");
                         }
@@ -11515,8 +11541,8 @@
 
             // If this package has defined explicit processes, then ensure that these are
             // the only processes used by its components.
-            final ArrayMap<String, ComponentParseUtils.ParsedProcess> procs = pkg.getProcesses();
-            if (procs != null) {
+            final Map<String, ParsedProcess> procs = pkg.getProcesses();
+            if (!procs.isEmpty()) {
                 if (!procs.containsKey(pkg.getProcessName())) {
                     throw new PackageManagerException(
                             INSTALL_FAILED_PROCESS_NOT_DEFINED,
@@ -11563,50 +11589,17 @@
                     // We are scanning a system overlay. This can be the first scan of the
                     // system/vendor/oem partition, or an update to the system overlay.
                     if ((parseFlags & PackageParser.PARSE_IS_SYSTEM_DIR) == 0) {
-                        // This must be an update to a system overlay.
-                        final PackageSetting previousPkg = assertNotNull(
-                                mSettings.getPackageLPr(pkg.getPackageName()),
-                                "previous package state not present");
-
-                        // previousPkg.pkg may be null: the package will be not be scanned if the
-                        // package manager knows there is a newer version on /data.
-                        // TODO[b/79435695]: Find a better way to keep track of the "static"
-                        // property for RROs instead of having to parse packages on /system
-                        AndroidPackage ppkg = previousPkg.pkg;
-                        if (ppkg == null) {
-                            try {
-                                final PackageParser pp = new PackageParser();
-                                // TODO(b/135203078): Do we really need to parse here? Maybe use
-                                //  a shortened path?
-                                ppkg = pp.parseParsedPackage(previousPkg.codePath,
-                                        parseFlags | PackageParser.PARSE_IS_SYSTEM_DIR,
-                                        false)
-                                        .hideAsFinal();
-                            } catch (PackageParserException e) {
-                                Slog.w(TAG, "failed to parse " + previousPkg.codePath, e);
-                            }
-                        }
-
-                        // Static overlays cannot be updated.
-                        if (ppkg != null && ppkg.isOverlayIsStatic()) {
+                        // This must be an update to a system overlay. Immutable overlays cannot be
+                        // upgraded.
+                        Objects.requireNonNull(mOverlayConfig,
+                                "Parsing non-system dir before overlay configs are initialized");
+                        if (!mOverlayConfig.isMutable(pkg.getPackageName())) {
                             throw new PackageManagerException("Overlay "
                                     + pkg.getPackageName()
                                     + " is static and cannot be upgraded.");
-                        // Non-static overlays cannot be converted to static overlays.
-                        } else if (pkg.isOverlayIsStatic()) {
-                            throw new PackageManagerException("Overlay "
-                                    + pkg.getPackageName()
-                                    + " cannot be upgraded into a static overlay.");
                         }
                     }
                 } else {
-                    // The overlay is a non-system overlay. Non-system overlays cannot be static.
-                    if (pkg.isOverlayIsStatic()) {
-                        throw new PackageManagerException("Overlay "
-                                + pkg.getPackageName()
-                                + " is static but not pre-installed.");
-                    }
-
                     // A non-preloaded overlay packages must have targetSdkVersion >= Q, or be
                     // signed with the platform certificate. Check this in increasing order of
                     // computational cost.
@@ -11803,14 +11796,16 @@
                         reconciledPkg.getCombinedAvailablePackages();
                 try {
                     // Shared libraries for the package need to be updated.
-                    updateSharedLibrariesLocked(pkg, null, combinedSigningDetails);
+                    updateSharedLibrariesLocked(pkg, pkgSetting, null, null,
+                            combinedSigningDetails);
                 } catch (PackageManagerException e) {
                     Slog.e(TAG, "updateSharedLibrariesLPr failed: ", e);
                 }
                 // Update all applications that use this library. Skip when booting
                 // since this will be done after all packages are scaned.
                 if ((scanFlags & SCAN_BOOTING) == 0) {
-                    clientLibPkgs = updateAllSharedLibrariesLocked(pkg, combinedSigningDetails);
+                    clientLibPkgs = updateAllSharedLibrariesLocked(pkg, pkgSetting,
+                            combinedSigningDetails);
                 }
             }
         }
@@ -11835,7 +11830,7 @@
         if (clientLibPkgs != null) {
             for (int i=0; i<clientLibPkgs.size(); i++) {
                 AndroidPackage clientPkg = clientLibPkgs.get(i);
-                killApplication(clientPkg.getAppInfoPackageName(),
+                killApplication(clientPkg.getPackageName(),
                         clientPkg.getUid(), "update lib");
             }
         }
@@ -11849,7 +11844,7 @@
             // Add the new setting to mSettings
             mSettings.insertPackageSettingLPw(pkgSetting, pkg);
             // Add the new setting to mPackages
-            mPackages.put(pkg.getAppInfoPackageName(), pkg);
+            mPackages.put(pkg.getPackageName(), pkg);
             if ((scanFlags & SCAN_AS_APK_IN_APEX) != 0) {
                 mApexManager.registerApkInApex(pkg);
             }
@@ -11897,7 +11892,7 @@
                 if (DEBUG_PACKAGE_SCANNING) Log.d(TAG, "  Instrumentation: " + r);
             }
 
-            if (pkg.getProtectedBroadcasts() != null) {
+            if (!pkg.getProtectedBroadcasts().isEmpty()) {
                 synchronized (mProtectedBroadcasts) {
                     mProtectedBroadcasts.addAll(pkg.getProtectedBroadcasts());
                 }
@@ -11929,8 +11924,8 @@
             // Set up information for custom user intent resolution activity.
             mResolveActivity.applicationInfo = pkg.toAppInfoWithoutState();
             mResolveActivity.name = mCustomResolverComponentName.getClassName();
-            mResolveActivity.packageName = pkg.getAppInfoPackageName();
-            mResolveActivity.processName = pkg.getAppInfoProcessName();
+            mResolveActivity.packageName = pkg.getPackageName();
+            mResolveActivity.processName = pkg.getProcessName();
             mResolveActivity.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
             mResolveActivity.flags = ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS |
                     ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS;
@@ -12048,21 +12043,19 @@
         }
 
         r = null;
-        if ((pkg.getFlags() & ApplicationInfo.FLAG_SYSTEM) != 0) {
+        if (pkg.isSystem()) {
             // Only system apps can hold shared libraries.
-            if (pkg.getLibraryNames() != null) {
-                final int libraryNamesSize = pkg.getLibraryNames().size();
-                for (i = 0; i < libraryNamesSize; i++) {
-                    String name = pkg.getLibraryNames().get(i);
-                    if (removeSharedLibraryLPw(name, 0)) {
-                        if (DEBUG_REMOVE && chatty) {
-                            if (r == null) {
-                                r = new StringBuilder(256);
-                            } else {
-                                r.append(' ');
-                            }
-                            r.append(name);
+            final int libraryNamesSize = pkg.getLibraryNames().size();
+            for (i = 0; i < libraryNamesSize; i++) {
+                String name = pkg.getLibraryNames().get(i);
+                if (removeSharedLibraryLPw(name, 0)) {
+                    if (DEBUG_REMOVE && chatty) {
+                        if (r == null) {
+                            r = new StringBuilder(256);
+                        } else {
+                            r.append(' ');
                         }
+                        r.append(name);
                     }
                 }
             }
@@ -12206,7 +12199,7 @@
                         + intent.toShortString(false, true, false, false)
                         + " " + intent.getExtras(), here);
             }
-            am.broadcastIntent(null, intent, null, finishedReceiver,
+            am.broadcastIntentWithFeature(null, null, intent, null, finishedReceiver,
                     0, null, null, requiredPermissions, android.app.AppOpsManager.OP_NONE,
                     null, finishedReceiver != null, false, id);
         }
@@ -12368,8 +12361,9 @@
                 lockedBcIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
             }
             final String[] requiredPermissions = {Manifest.permission.RECEIVE_BOOT_COMPLETED};
-            am.broadcastIntent(null, lockedBcIntent, null, null, 0, null, null, requiredPermissions,
-                    android.app.AppOpsManager.OP_NONE, null, false, false, userId);
+            am.broadcastIntentWithFeature(null, null, lockedBcIntent, null, null, 0, null, null,
+                    requiredPermissions, android.app.AppOpsManager.OP_NONE, null, false, false,
+                    userId);
 
             // Deliver BOOT_COMPLETED only if user is unlocked
             if (mUserManager.isUserUnlockingOrUnlocked(userId)) {
@@ -12377,8 +12371,9 @@
                 if (includeStopped) {
                     bcIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
                 }
-                am.broadcastIntent(null, bcIntent, null, null, 0, null, null, requiredPermissions,
-                        android.app.AppOpsManager.OP_NONE, null, false, false, userId);
+                am.broadcastIntentWithFeature(null, null, bcIntent, null, null, 0, null, null,
+                        requiredPermissions, android.app.AppOpsManager.OP_NONE, null, false, false,
+                        userId);
             }
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
@@ -12471,18 +12466,12 @@
             if (pkgSetting == null || !pkgSetting.isSystem()) {
                 return;
             }
-            AndroidPackage pkg = pkgSetting.pkg;
-            if (pkg != null) {
-                pkg.mutate().setHiddenUntilInstalled(hidden);
-            }
+            pkgSetting.getPkgState().setHiddenUntilInstalled(hidden);
             final PackageSetting disabledPs = mSettings.getDisabledSystemPkgLPr(packageName);
             if (disabledPs == null) {
                 return;
             }
-            pkg = disabledPs.pkg;
-            if (pkg != null) {
-                pkg.mutate().setHiddenUntilInstalled(hidden);
-            }
+            disabledPs.getPkgState().setHiddenUntilInstalled(hidden);
         }
     }
 
@@ -13350,42 +13339,53 @@
      *
      * @return true if verification should be performed
      */
-    private boolean isVerificationEnabled(int userId, int installFlags, int installerUid) {
+    private boolean isVerificationEnabled(
+            PackageInfoLite pkgInfoLite, int userId, int installFlags, int installerUid) {
         if (!DEFAULT_VERIFY_ENABLE) {
             return false;
         }
 
-        if ((installFlags & PackageManager.INSTALL_DISABLE_VERIFICATION) != 0) {
-            return false;
-        }
-
         // Check if installing from ADB
         if ((installFlags & PackageManager.INSTALL_FROM_ADB) != 0) {
             if (isUserRestricted(userId, UserManager.ENSURE_VERIFY_APPS)) {
                 return true;
             }
-            // Check if the developer does not want package verification for ADB installs
+            // Check if the developer wants to skip verification for ADB installs
+            if ((installFlags & PackageManager.INSTALL_DISABLE_VERIFICATION) != 0) {
+                synchronized (mLock) {
+                    if (mSettings.mPackages.get(pkgInfoLite.packageName) == null) {
+                        // Always verify fresh install
+                        return true;
+                    }
+                }
+                // Only skip when apk is debuggable
+                return !pkgInfoLite.debuggable;
+            }
             return Global.getInt(mContext.getContentResolver(),
                     Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1) != 0;
-        } else {
-            // only when not installed from ADB, skip verification for instant apps when
-            // the installer and verifier are the same.
-            if ((installFlags & PackageManager.INSTALL_INSTANT_APP) != 0) {
-                if (mInstantAppInstallerActivity != null
-                        && mInstantAppInstallerActivity.packageName.equals(
-                                mRequiredVerifierPackage)) {
-                    try {
-                        mInjector.getAppOpsManager()
-                                .checkPackage(installerUid, mRequiredVerifierPackage);
-                        if (DEBUG_VERIFY) {
-                            Slog.i(TAG, "disable verification for instant app");
-                        }
-                        return false;
-                    } catch (SecurityException ignore) { }
-                }
-            }
-            return true;
         }
+
+        if ((installFlags & PackageManager.INSTALL_DISABLE_VERIFICATION) != 0) {
+            return false;
+        }
+
+        // only when not installed from ADB, skip verification for instant apps when
+        // the installer and verifier are the same.
+        if ((installFlags & PackageManager.INSTALL_INSTANT_APP) != 0) {
+            if (mInstantAppInstallerActivity != null
+                    && mInstantAppInstallerActivity.packageName.equals(
+                            mRequiredVerifierPackage)) {
+                try {
+                    mInjector.getAppOpsManager()
+                            .checkPackage(installerUid, mRequiredVerifierPackage);
+                    if (DEBUG_VERIFY) {
+                        Slog.i(TAG, "disable verification for instant app");
+                    }
+                    return false;
+                } catch (SecurityException ignore) { }
+            }
+        }
+        return true;
     }
 
     /**
@@ -13493,15 +13493,15 @@
             ArrayList<IntentFilter> result = new ArrayList<>();
             for (int n=0; n<count; n++) {
                 ParsedActivity activity = pkg.getActivities().get(n);
-                if (activity.intents != null && activity.intents.size() > 0) {
-                    result.addAll(activity.intents);
+                if (activity.getIntents() != null && activity.getIntents().size() > 0) {
+                    result.addAll(activity.getIntents());
                 }
             }
             return new ParceledListSlice<IntentFilter>(result) {
                 @Override
                 protected void writeElement(IntentFilter parcelable, Parcel dest, int callFlags) {
                     // IntentFilter has final Parcelable methods, so redirect to the subclass
-                    ((ParsedActivityIntentInfo) parcelable).writeIntentInfoToParcel(dest,
+                    ((ParsedIntentInfo) parcelable).writeIntentInfoToParcel(dest,
                             callFlags);
                 }
             };
@@ -13686,9 +13686,8 @@
         // package has not opted out of backup participation.
         final boolean update = res.removedInfo != null
                 && res.removedInfo.removedPackage != null;
-        final int flags = (res.pkg == null) ? 0 : res.pkg.getFlags();
-        boolean doRestore = !update
-                && ((flags & ApplicationInfo.FLAG_ALLOW_BACKUP) != 0);
+        boolean allowBackup = res.pkg != null && res.pkg.isAllowBackup();
+        boolean doRestore = !update && allowBackup;
 
         // Set up the post-install work request bookkeeping.  This will be used
         // and cleaned up by the post-install event handling regardless of whether
@@ -13756,7 +13755,7 @@
             try {
                 if (bm.isUserReadyForBackup(userId)) {
                     bm.restoreAtInstallForUser(
-                            userId, res.pkg.getAppInfoPackageName(), token);
+                            userId, res.pkg.getPackageName(), token);
                 } else {
                     Slog.w(TAG, "User " + userId + " is not ready. Restore at install "
                             + "didn't take place.");
@@ -13784,8 +13783,7 @@
         IRollbackManager rm = IRollbackManager.Stub.asInterface(
                 ServiceManager.getService(Context.ROLLBACK_SERVICE));
 
-        final String packageName = res.pkg.getAppInfoPackageName();
-        final String seInfo = res.pkg.getSeInfo();
+        final String packageName = res.pkg.getPackageName();
         final int[] allUsers = mUserManager.getUserIds();
         final int[] installedUsers;
 
@@ -13809,6 +13807,7 @@
                 || (data.args.installFlags & PackageManager.INSTALL_REQUEST_DOWNGRADE) != 0);
 
         if (ps != null && doSnapshotOrRestore) {
+            final String seInfo = AndroidPackageUtils.getSeInfo(res.pkg, ps);
             try {
                 rm.snapshotAndRestoreUserData(packageName, installedUsers, appId, ceDataInode,
                         seInfo, token);
@@ -13844,7 +13843,7 @@
                 if (data.res.returnCode != PackageManager.INSTALL_SUCCEEDED) {
                     continue;
                 }
-                if (packageName.equals(data.res.pkg.getAppInfoPackageName())) {
+                if (packageName.equals(data.res.pkg.getPackageName())) {
                     // right package; but is it for the right user?
                     for (int uIndex = 0; uIndex < data.res.newUsers.length; uIndex++) {
                         if (userId == data.res.newUsers[uIndex]) {
@@ -14229,7 +14228,7 @@
 
                 if (dataOwnerPkg != null) {
                     if (!PackageManagerServiceUtils.isDowngradePermitted(installFlags,
-                            dataOwnerPkg.getFlags())) {
+                            dataOwnerPkg.isDebuggable())) {
                         try {
                             checkDowngrade(dataOwnerPkg, pkgLite);
                         } catch (PackageManagerException e) {
@@ -14242,7 +14241,7 @@
                 if (installedPkg != null) {
                     if ((installFlags & PackageManager.INSTALL_REPLACE_EXISTING) != 0) {
                         // Check for updated system application.
-                        if ((installedPkg.getFlags() & ApplicationInfo.FLAG_SYSTEM) != 0) {
+                        if (installedPkg.isSystem()) {
                             return PackageHelper.RECOMMEND_INSTALL_INTERNAL;
                         } else {
                             // If current upgrade specifies particular preference
@@ -14253,7 +14252,7 @@
                                 // App explictly prefers external. Let policy decide
                             } else {
                                 // Prefer previous location
-                                if (isExternal(installedPkg)) {
+                                if (installedPkg.isExternalStorage()) {
                                     return PackageHelper.RECOMMEND_INSTALL_EXTERNAL;
                                 }
                                 return PackageHelper.RECOMMEND_INSTALL_INTERNAL;
@@ -14549,7 +14548,7 @@
                     verificationInfo == null ? -1 : verificationInfo.installerUid;
             if (!origin.existing && requiredUid != -1
                     && isVerificationEnabled(
-                    verifierUser.getIdentifier(), installFlags, installerUid)) {
+                            pkgLite, verifierUser.getIdentifier(), installFlags, installerUid)) {
                 final Intent verification = new Intent(
                         Intent.ACTION_PACKAGE_NEEDS_VERIFICATION);
                 verification.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
@@ -14690,8 +14689,7 @@
         void handleVerificationFinished() {
             if (!mVerificationCompleted) {
                 mVerificationCompleted = true;
-                if (mIntegrityVerificationCompleted || mRet != INSTALL_SUCCEEDED) {
-                    mIntegrityVerificationCompleted = true;
+                if (mIntegrityVerificationCompleted) {
                     handleReturnCode();
                 }
                 // integrity verification still pending.
@@ -14701,8 +14699,7 @@
         void handleIntegrityVerificationFinished() {
             if (!mIntegrityVerificationCompleted) {
                 mIntegrityVerificationCompleted = true;
-                if (mVerificationCompleted || mRet != INSTALL_SUCCEEDED) {
-                    mVerificationCompleted = true;
+                if (mVerificationCompleted) {
                     handleReturnCode();
                 }
                 // verifier still pending
@@ -14959,12 +14956,13 @@
                 return ret;
             }
 
+            final boolean isIncremental = isIncrementalPath(codeFile.getAbsolutePath());
             final File libraryRoot = new File(codeFile, LIB_DIR_NAME);
             NativeLibraryHelper.Handle handle = null;
             try {
                 handle = NativeLibraryHelper.Handle.create(codeFile);
                 ret = NativeLibraryHelper.copyNativeBinariesWithOverride(handle, libraryRoot,
-                        abiOverride);
+                        abiOverride, isIncremental);
             } catch (IOException e) {
                 Slog.e(TAG, "Copying native libraries failed", e);
                 ret = PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
@@ -15030,14 +15028,6 @@
             parsedPackage.setSplitCodePaths(FileUtils.rewriteAfterRename(beforeCodeFile,
                     afterCodeFile, parsedPackage.getSplitCodePaths()));
 
-            // Reflect the rename in app info
-            // TODO(b/135203078): Remove all of these application info calls
-            parsedPackage.setApplicationVolumeUuid(parsedPackage.getVolumeUuid())
-                    .setApplicationInfoCodePath(parsedPackage.getCodePath())
-                    .setApplicationInfoResourcePath(parsedPackage.getCodePath())
-                    .setApplicationInfoBaseResourcePath(parsedPackage.getBaseCodePath())
-                    .setApplicationInfoSplitResourcePaths(parsedPackage.getSplitCodePaths());
-
             return true;
         }
 
@@ -15147,14 +15137,6 @@
                 return false;
             }
 
-            // Reflect the move in app info
-            // TODO(b/135203078): Remove all of these application info calls
-            parsedPackage.setApplicationVolumeUuid(parsedPackage.getVolumeUuid())
-                    .setApplicationInfoCodePath(parsedPackage.getCodePath())
-                    .setApplicationInfoResourcePath(parsedPackage.getCodePath())
-                    .setApplicationInfoBaseResourcePath(parsedPackage.getBaseCodePath())
-                    .setApplicationInfoSplitResourcePaths(parsedPackage.getSplitCodePaths());
-
             return true;
         }
 
@@ -15188,10 +15170,13 @@
 
                 // We purposefully exclude FLAG_STORAGE_EXTERNAL here, since
                 // this task was only focused on moving data on internal storage.
+                // We don't want ART profiles cleared, because they don't move,
+                // so we would be deleting the only copy (b/149200535).
+                final int flags = FLAG_STORAGE_DE | FLAG_STORAGE_CE
+                        | Installer.FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES;
                 for (int userId : userIds) {
                     try {
-                        mInstaller.destroyAppData(volumeUuid, move.packageName, userId,
-                                StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE, 0);
+                        mInstaller.destroyAppData(volumeUuid, move.packageName, userId, flags, 0);
                     } catch (InstallerException e) {
                         Slog.w(TAG, String.valueOf(e));
                     }
@@ -15347,7 +15332,7 @@
             final PackageSetting ps = mSettings.mPackages.get(pkgName);
             final int userId = installArgs.user.getIdentifier();
             if (ps != null) {
-                if (isSystemApp(pkg)) {
+                if (pkg.isSystem()) {
                     if (DEBUG_INSTALL) {
                         Slog.d(TAG, "Implicitly enabling system package on upgrade: " + pkgName);
                     }
@@ -15376,8 +15361,8 @@
                 }
 
                 // Retrieve the overlays for shared libraries of the package.
-                if (pkg.getUsesLibraryInfos() != null) {
-                    for (SharedLibraryInfo sharedLib : pkg.getUsesLibraryInfos()) {
+                if (!ps.getPkgState().getUsesLibraryInfos().isEmpty()) {
+                    for (SharedLibraryInfo sharedLib : ps.getPkgState().getUsesLibraryInfos()) {
                         for (int currentUserId : UserManagerService.getInstance().getUserIds()) {
                             if (!sharedLib.isDynamic()) {
                                 // TODO(146804378): Support overlaying static shared libraries
@@ -15849,13 +15834,13 @@
         if (scanResult.staticSharedLibraryInfo != null) {
             return Collections.singletonList(scanResult.staticSharedLibraryInfo);
         }
-        final boolean hasDynamicLibraries =
-                (parsedPackage.getFlags() & ApplicationInfo.FLAG_SYSTEM) != 0
+        final boolean hasDynamicLibraries = parsedPackage.isSystem()
                         && scanResult.dynamicSharedLibraryInfos != null;
         if (!hasDynamicLibraries) {
             return null;
         }
-        final boolean isUpdatedSystemApp = parsedPackage.isUpdatedSystemApp();
+        final boolean isUpdatedSystemApp = scanResult.pkgSetting.getPkgState()
+                .isUpdatedSystemApp();
         // We may not yet have disabled the updated package yet, so be sure to grab the
         // current setting if that's the case.
         final PackageSetting updatedSystemPs = isUpdatedSystemApp
@@ -15952,10 +15937,13 @@
                         // which means we are replacing another update that is already
                         // installed.  We need to make sure to delete the older one's .apk.
                         res.removedInfo.args = createInstallArgsForExisting(
-                                oldPackage.getAppInfoCodePath(),
-                                oldPackage.getAppInfoResourcePath(),
-                                getAppDexInstructionSets(oldPackage.getPrimaryCpuAbi(),
-                                        oldPackage.getSecondaryCpuAbi()));
+                                oldPackage.getCodePath(),
+                                oldPackage.getCodePath(),
+                                getAppDexInstructionSets(
+                                        AndroidPackageUtils.getPrimaryCpuAbi(oldPackage,
+                                                deletedPkgSetting),
+                                        AndroidPackageUtils.getSecondaryCpuAbi(oldPackage,
+                                                deletedPkgSetting)));
                     } else {
                         res.removedInfo.args = null;
                     }
@@ -15974,14 +15962,14 @@
 
                     // If deleted package lived in a container, give users a chance to
                     // relinquish resources before killing.
-                    if (oldPackage.isForwardLocked() || isExternal(oldPackage)) {
+                    if (oldPackage.isExternalStorage()) {
                         if (DEBUG_INSTALL) {
                             Slog.i(TAG, "upgrading pkg " + oldPackage
                                     + " is ASEC-hosted -> UNAVAILABLE");
                         }
                         final int[] uidArray = new int[]{oldPackage.getUid()};
                         final ArrayList<String> pkgList = new ArrayList<>(1);
-                        pkgList.add(oldPackage.getAppInfoPackageName());
+                        pkgList.add(oldPackage.getPackageName());
                         sendResourcesChangedBroadcast(false, true, pkgList, uidArray, null);
                     }
 
@@ -16088,7 +16076,7 @@
                     final ScanResult result = scanPackageTracedLI(
                             prepareResult.packageToScan, prepareResult.parseFlags,
                             prepareResult.scanFlags, System.currentTimeMillis(),
-                            request.args.user);
+                            request.args.user, request.args.abiOverride);
                     if (null != preparedScans.put(result.pkgSetting.pkg.getPackageName(), result)) {
                         request.installResult.setError(
                                 PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE,
@@ -16221,7 +16209,7 @@
             final boolean performDexopt =
                     (!instantApp || Global.getInt(mContext.getContentResolver(),
                     Global.INSTANT_APP_DEXOPT_ENABLED, 0) != 0)
-                    && ((pkg.getFlags() & ApplicationInfo.FLAG_DEBUGGABLE) == 0)
+                    && !pkg.isDebuggable()
                     && (!onIncremental);
 
             if (performDexopt) {
@@ -16241,7 +16229,7 @@
                         REASON_INSTALL,
                         DexoptOptions.DEXOPT_BOOT_COMPLETE
                                 | DexoptOptions.DEXOPT_INSTALL_WITH_DEX_METADATA_FILE);
-                mPackageDexOptimizer.performDexOpt(pkg,
+                mPackageDexOptimizer.performDexOpt(pkg, reconciledPkg.pkgSetting,
                         null /* instructionSets */,
                         getOrCreateCompilerPackageStats(pkg),
                         mDexManager.getPackageUseInfoOrDefault(packageName),
@@ -16358,16 +16346,14 @@
                 | PackageParser.PARSE_ENFORCE_CODE
                 | (onExternal ? PackageParser.PARSE_EXTERNAL_STORAGE : 0);
 
-        PackageParser pp = new PackageParser();
-        pp.setSeparateProcesses(mSeparateProcesses);
-        pp.setDisplayMetrics(mMetrics);
-        pp.setCallback(mPackageParserCallback);
+        PackageParser2 pp = new PackageParser2(mSeparateProcesses, false, mMetrics, null,
+                mPackageParserCallback);
 
         Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "parsePackage");
         ParsedPackage parsedPackage;
         try {
-            parsedPackage = pp.parseParsedPackage(tmpPackageFile, parseFlags, false);
-            DexMetadataHelper.validatePackageDexMetadata(parsedPackage);
+            parsedPackage = pp.parsePackage(tmpPackageFile, parseFlags, false);
+            AndroidPackageUtils.validatePackageDexMetadata(parsedPackage);
         } catch (PackageParserException e) {
             throw new PrepareFailure("Failed parse during installPackageLI", e);
         } finally {
@@ -16402,16 +16388,8 @@
             }
         }
 
-        // If package doesn't declare API override, mark that we have an install
-        // time CPU ABI override.
-        // TODO(b/135203078): Isn't this always true because cpuAbiOverride isn't assigned during
-        //  parsing?
-        if (TextUtils.isEmpty(parsedPackage.getCpuAbiOverride())) {
-            parsedPackage.setCpuAbiOverride(args.abiOverride);
-        }
-
         String pkgName = res.name = parsedPackage.getPackageName();
-        if ((parsedPackage.getFlags() & ApplicationInfo.FLAG_TEST_ONLY) != 0) {
+        if (parsedPackage.isTestOnly()) {
             if ((installFlags & PackageManager.INSTALL_ALLOW_TEST) == 0) {
                 throw new PrepareFailure(INSTALL_FAILED_TEST_ONLY, "installPackageLI");
             }
@@ -16423,7 +16401,8 @@
                 parsedPackage.setSigningDetails(args.signingDetails);
             } else {
                 // TODO(b/136132412): skip for Incremental installation
-                ApkParseUtils.collectCertificates(parsedPackage, false /* skipVerify */);
+                parsedPackage.setSigningDetails(
+                        ParsingPackageUtils.collectCertificates(parsedPackage, false /* skipVerify */));
             }
         } catch (PackageParserException e) {
             throw new PrepareFailure("Failed collect during installPackageLI", e);
@@ -16445,8 +16424,7 @@
             // Check if installing already existing package
             if ((installFlags & PackageManager.INSTALL_REPLACE_EXISTING) != 0) {
                 String oldName = mSettings.getRenamedPackageLPr(pkgName);
-                if (parsedPackage.getOriginalPackages() != null
-                        && parsedPackage.getOriginalPackages().contains(oldName)
+                if (parsedPackage.getOriginalPackages().contains(oldName)
                         && mPackages.containsKey(oldName)) {
                     // This package is derived from an original package,
                     // and this device has been updating from that original
@@ -16481,7 +16459,7 @@
                                         + " target SDK " + oldTargetSdk + " does.");
                     }
                     // Prevent persistent apps from being updated
-                    if (((oldPackage.getFlags() & ApplicationInfo.FLAG_PERSISTENT) != 0)
+                    if (oldPackage.isPersistent()
                             && ((installFlags & PackageManager.INSTALL_STAGED) == 0)) {
                         throw new PrepareFailure(PackageManager.INSTALL_FAILED_INVALID_APK,
                                 "Package " + oldPackage.getPackageName() + " is a persistent app. "
@@ -16536,7 +16514,7 @@
                 }
 
                 if (ps.pkg != null) {
-                    systemApp = (ps.pkg.getFlags() & ApplicationInfo.FLAG_SYSTEM) != 0;
+                    systemApp = ps.pkg.isSystem();
                 }
                 res.origUsers = ps.queryInstalledUsers(mUserManager.getUserIds(), true);
             }
@@ -16548,12 +16526,12 @@
                 final BasePermission bp = mPermissionManager.getPermissionTEMP(perm.getName());
 
                 // Don't allow anyone but the system to define ephemeral permissions.
-                if ((perm.protectionLevel & PermissionInfo.PROTECTION_FLAG_INSTANT) != 0
+                if ((perm.getProtectionLevel() & PermissionInfo.PROTECTION_FLAG_INSTANT) != 0
                         && !systemApp) {
                     Slog.w(TAG, "Non-System package " + parsedPackage.getPackageName()
                             + " attempting to delcare ephemeral permission "
                             + perm.getName() + "; Removing ephemeral.");
-                    perm.protectionLevel &= ~PermissionInfo.PROTECTION_FLAG_INSTANT;
+                    perm.setProtectionLevel(perm.getProtectionLevel() & ~PermissionInfo.PROTECTION_FLAG_INSTANT);
                 }
 
                 // Check whether the newly-scanned package wants to define an already-defined perm
@@ -16614,14 +16592,14 @@
                         // type as this would allow a privilege escalation where an app adds a
                         // normal/signature permission in other app's group and later redefines
                         // it as dangerous leading to the group auto-grant.
-                        if ((perm.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+                        if ((perm.getProtectionLevel() & PermissionInfo.PROTECTION_MASK_BASE)
                                 == PermissionInfo.PROTECTION_DANGEROUS) {
                             if (bp != null && !bp.isRuntime()) {
                                 Slog.w(TAG, "Package " + parsedPackage.getPackageName()
                                         + " trying to change a non-runtime permission "
                                         + perm.getName()
                                         + " to runtime; keeping old protection level");
-                                perm.protectionLevel = bp.getProtectionLevel();
+                                perm.setProtectionLevel(bp.getProtectionLevel());
                             }
                         }
                     }
@@ -16664,12 +16642,22 @@
             scanFlags |= SCAN_NO_DEX;
 
             try {
-                String abiOverride = (TextUtils.isEmpty(parsedPackage.getCpuAbiOverride())
-                        ? args.abiOverride : parsedPackage.getCpuAbiOverride());
-                final boolean extractNativeLibs = !parsedPackage.isLibrary();
+                final boolean extractNativeLibs = !AndroidPackageUtils.isLibrary(parsedPackage);
+                PackageSetting pkgSetting;
+                synchronized (mLock) {
+                    pkgSetting = mSettings.getPackageLPr(pkgName);
+                }
+                String abiOverride =
+                        (pkgSetting == null || TextUtils.isEmpty(pkgSetting.cpuAbiOverrideString)
+                        ? args.abiOverride : pkgSetting.cpuAbiOverrideString);
+                boolean isUpdatedSystemAppFromExistingSetting = pkgSetting != null
+                        && pkgSetting.getPkgState().isUpdatedSystemApp();
+                AndroidPackage oldPackage = mPackages.get(pkgName);
+                boolean isUpdatedSystemAppInferred = oldPackage != null && oldPackage.isSystem();
                 final Pair<PackageAbiHelper.Abis, PackageAbiHelper.NativeLibraryPaths>
-                        derivedAbi = mInjector.getAbiHelper().derivePackageAbi(
-                                parsedPackage, abiOverride, extractNativeLibs);
+                        derivedAbi = mInjector.getAbiHelper().derivePackageAbi(parsedPackage,
+                        isUpdatedSystemAppFromExistingSetting || isUpdatedSystemAppInferred,
+                        abiOverride, extractNativeLibs);
                 derivedAbi.first.applyTo(parsedPackage);
                 derivedAbi.second.applyTo(parsedPackage);
             } catch (PackageManagerException pme) {
@@ -16844,14 +16832,14 @@
                     res.removedInfo.installReasons.put(userId, ps.getInstallReason(userId));
                 }
 
-                sysPkg = (isSystemApp(oldPackage));
+                sysPkg = oldPackage.isSystem();
                 if (sysPkg) {
                     // Set the system/privileged/oem/vendor/product flags as needed
-                    final boolean privileged = isPrivilegedApp(oldPackage);
-                    final boolean oem = isOemApp(oldPackage);
-                    final boolean vendor = isVendorApp(oldPackage);
-                    final boolean product = isProductApp(oldPackage);
-                    final boolean odm = isOdmApp(oldPackage);
+                    final boolean privileged = oldPackage.isPrivileged();
+                    final boolean oem = oldPackage.isOem();
+                    final boolean vendor = oldPackage.isVendor();
+                    final boolean product = oldPackage.isProduct();
+                    final boolean odm = oldPackage.isOdm();
                     final @ParseFlags int systemParseFlags = parseFlags;
                     final @ScanFlags int systemScanFlags = scanFlags
                             | SCAN_AS_SYSTEM
@@ -16866,7 +16854,7 @@
                                 + ", old=" + oldPackage);
                     }
                     res.setReturnCode(PackageManager.INSTALL_SUCCEEDED);
-                    parsedPackage.setUpdatedSystemApp(true);
+                    ps.getPkgState().setUpdatedSystemApp(true);
                     targetParseFlags = systemParseFlags;
                     targetScanFlags = systemScanFlags;
                 } else { // non system replace
@@ -17033,7 +17021,7 @@
         Message msg = mHandler.obtainMessage(START_INTENT_FILTER_VERIFICATIONS);
         msg.obj = new IFVerificationParams(
                 pkg.getPackageName(),
-                hasDomainURLs(pkg),
+                pkg.isHasDomainUrls(),
                 pkg.getActivities(),
                 replacing,
                 userId,
@@ -17085,11 +17073,12 @@
             // examine handling policy even if not re-verifying.
             boolean needToVerify = false;
             for (ParsedActivity a : activities) {
-                for (ParsedActivityIntentInfo filter : a.intents) {
+                for (ParsedIntentInfo filter : a.getIntents()) {
                     if (filter.handlesWebUris(true)) {
                         handlesWebUris = true;
                     }
-                    if (filter.needsVerification() && needsNetworkVerificationLPr(filter)) {
+                    if (filter.needsVerification()
+                            && needsNetworkVerificationLPr(a.getPackageName())) {
                         if (DEBUG_DOMAIN_VERIFICATION) {
                             Slog.d(TAG,
                                     "Intent filter needs verification, so processing all filters");
@@ -17109,8 +17098,9 @@
             if (needToVerify) {
                 final int verificationId = mIntentFilterVerificationToken++;
                 for (ParsedActivity a : activities) {
-                    for (ParsedActivityIntentInfo filter : a.intents) {
-                        if (filter.handlesWebUris(true) && needsNetworkVerificationLPr(filter)) {
+                    for (ParsedIntentInfo filter : a.getIntents()) {
+                        if (filter.handlesWebUris(true)
+                                && needsNetworkVerificationLPr(a.getPackageName())) {
                             if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG,
                                     "Verification needed for IntentFilter:" + filter.toString());
                             mIntentFilterVerifier.addOneIntentFilterVerification(
@@ -17145,9 +17135,7 @@
     }
 
     @GuardedBy("mLock")
-    private boolean needsNetworkVerificationLPr(ParsedActivityIntentInfo filter) {
-        final String packageName = filter.getPackageName();
-
+    private boolean needsNetworkVerificationLPr(String packageName) {
         IntentFilterVerificationInfo ivi = mSettings.getIntentFilterVerificationLPr(
                 packageName);
         if (ivi == null) {
@@ -17166,47 +17154,10 @@
         }
     }
 
-    private static boolean isExternal(AndroidPackage pkg) {
-        return (pkg.getFlags() & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
-    }
-
     private static boolean isExternal(PackageSetting ps) {
         return (ps.pkgFlags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
     }
 
-    static boolean isSystemApp(AndroidPackage pkg) {
-        return (pkg.getFlags() & ApplicationInfo.FLAG_SYSTEM) != 0;
-    }
-
-    private static boolean isPrivilegedApp(AndroidPackage pkg) {
-        return (pkg.getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0;
-    }
-
-    private static boolean isOemApp(AndroidPackage pkg) {
-        return (pkg.getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_OEM) != 0;
-    }
-
-    private static boolean isVendorApp(AndroidPackage pkg) {
-        return (pkg.getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_VENDOR) != 0;
-    }
-
-    private static boolean isProductApp(AndroidPackage pkg) {
-        return (pkg.getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_PRODUCT) != 0;
-    }
-
-    private static boolean isSystemExtApp(AndroidPackage pkg) {
-        return (pkg.getPrivateFlags()
-                & ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT) != 0;
-    }
-
-    private static boolean isOdmApp(AndroidPackage pkg) {
-        return (pkg.getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_ODM) != 0;
-    }
-
-    private static boolean hasDomainURLs(AndroidPackage pkg) {
-        return (pkg.getPrivateFlags() & ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS) != 0;
-    }
-
     private static boolean isSystemApp(PackageSetting ps) {
         return (ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0;
     }
@@ -17216,7 +17167,7 @@
     }
 
     private VersionInfo getSettingsVersionForPackage(AndroidPackage pkg) {
-        if (isExternal(pkg)) {
+        if (pkg.isExternalStorage()) {
             if (TextUtils.isEmpty(pkg.getVolumeUuid())) {
                 return mSettings.getExternalVersion();
             } else {
@@ -17365,6 +17316,13 @@
 
     @GuardedBy("mLock")
     private String resolveInternalPackageNameLPr(String packageName, long versionCode) {
+        final int callingUid = Binder.getCallingUid();
+        return resolveInternalPackageNameInternalLocked(packageName, versionCode,
+                callingUid);
+    }
+
+    private String resolveInternalPackageNameInternalLocked(
+            String packageName, long versionCode, int callingUid) {
         // Handle renamed packages
         String normalizedPackageName = mSettings.getRenamedPackageLPr(packageName);
         packageName = normalizedPackageName != null ? normalizedPackageName : packageName;
@@ -17378,12 +17336,12 @@
 
         // Figure out which lib versions the caller can see
         LongSparseLongArray versionsCallerCanSee = null;
-        final int callingAppId = UserHandle.getAppId(Binder.getCallingUid());
+        final int callingAppId = UserHandle.getAppId(callingUid);
         if (callingAppId != Process.SYSTEM_UID && callingAppId != Process.SHELL_UID
                 && callingAppId != Process.ROOT_UID) {
             versionsCallerCanSee = new LongSparseLongArray();
             String libName = versionedLib.valueAt(0).getName();
-            String[] uidPackages = getPackagesForUid(Binder.getCallingUid());
+            String[] uidPackages = getPackagesForUidInternal(callingUid, callingUid);
             if (uidPackages != null) {
                 for (String uidPackage : uidPackages) {
                     PackageSetting ps = mSettings.getPackageLPr(uidPackage);
@@ -17669,10 +17627,11 @@
             final AndroidPackage stubPkg =
                     (disabledSystemPs == null) ? null : disabledSystemPs.pkg;
             if (stubPkg != null && stubPkg.isStub()) {
+                final PackageSetting stubPs;
                 synchronized (mLock) {
                     // restore the enabled state of the stub; the state is overwritten when
                     // the stub is uninstalled
-                    final PackageSetting stubPs = mSettings.mPackages.get(stubPkg.getPackageName());
+                    stubPs = mSettings.getPackageLPr(stubPkg.getPackageName());
                     if (stubPs != null) {
                         stubPs.setEnabled(origEnabledState, userId, "android");
                     }
@@ -17683,7 +17642,7 @@
                         Slog.i(TAG, "Enabling system stub after removal; pkg: "
                                 + stubPkg.getPackageName());
                     }
-                    enableCompressedPackage(stubPkg);
+                    enableCompressedPackage(stubPkg, stubPs);
                 }
             }
         }
@@ -17945,14 +17904,13 @@
         }
     }
 
-    private static @Nullable SystemPartition resolveApexToSystemPartition(
+    private static @Nullable ScanPartition resolveApexToScanPartition(
             ApexManager.ActiveApexInfo apexInfo) {
         for (int i = 0, size = SYSTEM_PARTITIONS.size(); i < size; i++) {
-            SystemPartition sp = SYSTEM_PARTITIONS.get(i);
+            ScanPartition sp = SYSTEM_PARTITIONS.get(i);
             if (apexInfo.preInstalledApexPath.getAbsolutePath().startsWith(
                     sp.folder.getAbsolutePath())) {
-                return new SystemPartition(apexInfo.apexDirectory,
-                        sp.scanFlag | SCAN_AS_APK_IN_APEX, false /* hasOverlays */);
+                return new ScanPartition(apexInfo.apexDirectory, sp, SCAN_AS_APK_IN_APEX);
             }
         }
         return null;
@@ -18053,7 +18011,7 @@
                 | PackageParser.PARSE_IS_SYSTEM_DIR;
         @ScanFlags int scanFlags = SCAN_AS_SYSTEM;
         for (int i = 0, size = mDirsToScanAsSystem.size(); i < size; i++) {
-            SystemPartition partition = mDirsToScanAsSystem.get(i);
+            ScanPartition partition = mDirsToScanAsSystem.get(i);
             if (partition.containsPath(codePathString)) {
                 scanFlags |= partition.scanFlag;
                 if (partition.containsPrivPath(codePathString)) {
@@ -18067,9 +18025,12 @@
         final AndroidPackage pkg =
                 scanPackageTracedLI(codePath, parseFlags, scanFlags, 0 /*currentTime*/, null);
 
+        PackageSetting pkgSetting = mSettings.getPackageLPr(pkg.getPackageName());
+
         try {
             // update shared libraries for the newly re-installed system package
-            updateSharedLibrariesLocked(pkg, null, Collections.unmodifiableMap(mPackages));
+            updateSharedLibrariesLocked(pkg, pkgSetting, null, null,
+                    Collections.unmodifiableMap(mPackages));
         } catch (PackageManagerException e) {
             Slog.e(TAG, "updateAllSharedLibrariesLPw failed: " + e.getMessage());
         }
@@ -18403,15 +18364,7 @@
                     FLAG_STORAGE_DE | FLAG_STORAGE_CE | FLAG_STORAGE_EXTERNAL);
             clearDefaultBrowserIfNeededForUser(ps.name, nextUserId);
             removeKeystoreDataIfNeeded(mInjector.getUserManagerInternal(), nextUserId, ps.appId);
-            final SparseBooleanArray changedUsers = new SparseBooleanArray();
-            clearPackagePreferredActivitiesLPw(ps.name, changedUsers, nextUserId);
-            if (changedUsers.size() > 0) {
-                updateDefaultHomeNotLocked(changedUsers);
-                postPreferredActivityChangedBroadcast(nextUserId);
-                synchronized (mLock) {
-                    scheduleWritePackageRestrictionsLocked(nextUserId);
-                }
-            }
+            clearPackagePreferredActivities(ps.name, nextUserId);
             mPermissionManager.resetRuntimePermissions(pkg, nextUserId);
         }
 
@@ -18508,10 +18461,11 @@
 
         // Try finding details about the requested package
         AndroidPackage pkg;
+        PackageSetting ps;
         synchronized (mLock) {
             pkg = mPackages.get(packageName);
+            ps = mSettings.mPackages.get(packageName);
             if (pkg == null) {
-                final PackageSetting ps = mSettings.mPackages.get(packageName);
                 if (ps != null) {
                     pkg = ps.pkg;
                 }
@@ -18538,7 +18492,7 @@
         } else {
             flags = 0;
         }
-        prepareAppDataContentsLIF(pkg, userId, flags);
+        prepareAppDataContentsLIF(pkg, ps, userId, flags);
 
         return true;
     }
@@ -18769,7 +18723,7 @@
             intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
             intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
             try {
-                am.broadcastIntent(null, intent, null, null,
+                am.broadcastIntentWithFeature(null, null, intent, null, null,
                         0, null, null, null, android.app.AppOpsManager.OP_NONE,
                         null, false, false, userId);
             } catch (RemoteException e) {
@@ -18900,13 +18854,19 @@
             }
         }
         int callingUserId = UserHandle.getCallingUserId();
+        clearPackagePreferredActivities(packageName, callingUserId);
+    }
+
+    /** This method takes a specific user id as well as UserHandle.USER_ALL. */
+    private void clearPackagePreferredActivities(String packageName, int userId) {
         final SparseBooleanArray changedUsers = new SparseBooleanArray();
-        clearPackagePreferredActivitiesLPw(packageName, changedUsers, callingUserId);
+
+        clearPackagePreferredActivitiesLPw(packageName, changedUsers, userId);
         if (changedUsers.size() > 0) {
             updateDefaultHomeNotLocked(changedUsers);
-            postPreferredActivityChangedBroadcast(callingUserId);
+            postPreferredActivityChangedBroadcast(userId);
             synchronized (mLock) {
-                scheduleWritePackageRestrictionsLocked(callingUserId);
+                scheduleWritePackageRestrictionsLocked(userId);
             }
         }
     }
@@ -19989,7 +19949,7 @@
             if (isSystemStub
                     && (newState == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
                             || newState == PackageManager.COMPONENT_ENABLED_STATE_ENABLED)) {
-                if (!enableCompressedPackage(deletedPkg)) {
+                if (!enableCompressedPackage(deletedPkg, pkgSetting)) {
                     return;
                 }
             }
@@ -20006,7 +19966,7 @@
                 // We're dealing with a component level state change
                 // First, verify that this is a valid class name.
                 AndroidPackage pkg = pkgSetting.pkg;
-                if (pkg == null || !pkg.hasComponentClassName(className)) {
+                if (pkg == null || !AndroidPackageUtils.hasComponentClassName(pkg, className)) {
                     if (pkg != null &&
                             pkg.getTargetSdkVersion() >=
                                     Build.VERSION_CODES.JELLY_BEAN) {
@@ -21239,24 +21199,27 @@
         ipw.println();
         ipw.println("Dexopt state:");
         ipw.increaseIndent();
-        Collection<AndroidPackage> packages;
+        Collection<PackageSetting> pkgSettings;
         if (packageName != null) {
-            AndroidPackage targetPackage = mPackages.get(packageName);
-            if (targetPackage != null) {
-                packages = Collections.singletonList(targetPackage);
+            PackageSetting targetPkgSetting = mSettings.mPackages.get(packageName);
+            if (targetPkgSetting != null) {
+                pkgSettings = Collections.singletonList(targetPkgSetting);
             } else {
                 ipw.println("Unable to find package: " + packageName);
                 return;
             }
         } else {
-            packages = mPackages.values();
+            pkgSettings = mSettings.mPackages.values();
         }
 
-        for (AndroidPackage pkg : packages) {
-            ipw.println("[" + pkg.getPackageName() + "]");
+        for (PackageSetting pkgSetting : pkgSettings) {
+            if (pkgSetting.pkg == null) {
+                continue;
+            }
+            ipw.println("[" + pkgSetting.name + "]");
             ipw.increaseIndent();
-            mPackageDexOptimizer.dumpDexoptState(ipw, pkg,
-                    mDexManager.getPackageUseInfoOrDefault(pkg.getPackageName()));
+            mPackageDexOptimizer.dumpDexoptState(ipw, pkgSetting.pkg, pkgSetting,
+                    mDexManager.getPackageUseInfoOrDefault(pkgSetting.pkg.getPackageName()));
             ipw.decreaseIndent();
         }
     }
@@ -21362,7 +21325,7 @@
         final int[] packageUids = new int[size];
         for (int i = 0; i < size; i++) {
             final AndroidPackage pkg = packages.get(i);
-            packageNames[i] = pkg.getAppInfoPackageName();
+            packageNames[i] = pkg.getPackageName();
             packageUids[i] = pkg.getUid();
         }
         sendResourcesChangedBroadcast(mediaStatus, replacing, packageNames, packageUids,
@@ -21759,6 +21722,7 @@
         }
 
         UserManagerInternal umInternal = mInjector.getUserManagerInternal();
+        StorageManagerInternal smInternal = mInjector.getStorageManagerInternal();
         for (UserInfo user : mUserManager.getUsers(false /*excludeDying*/)) {
             final int flags;
             if (umInternal.isUserUnlockingOrUnlocked(user.id)) {
@@ -21772,6 +21736,13 @@
             if (ps.getInstalled(user.id)) {
                 // TODO: when user data is locked, mark that we're still dirty
                 prepareAppDataLIF(pkg, user.id, flags);
+
+                if (umInternal.isUserUnlockingOrUnlocked(user.id)) {
+                    // Prepare app data on external storage; currently this is used to
+                    // setup any OBB dirs that were created by the installer correctly.
+                    int uid = UserHandle.getUid(user.id, UserHandle.getAppId(pkg.getUid()));
+                    smInternal.prepareAppDataAfterInstall(pkg.getPackageName(), uid);
+                }
             }
         }
     }
@@ -21818,16 +21789,17 @@
 
         final int appId = UserHandle.getAppId(pkg.getUid());
 
-        Preconditions.checkNotNull(pkg.getSeInfo());
+        String pkgSeInfo = AndroidPackageUtils.getSeInfo(pkg, ps);
 
-        final String seInfo =
-                pkg.getSeInfo() + (pkg.getSeInfoUser() != null ? pkg.getSeInfoUser() : "");
+        Preconditions.checkNotNull(pkgSeInfo);
+
+        final String seInfo = pkgSeInfo + (pkg.getSeInfoUser() != null ? pkg.getSeInfoUser() : "");
         long ceDataInode = -1;
         try {
             ceDataInode = mInstaller.createAppData(volumeUuid, packageName, userId, flags,
                     appId, seInfo, pkg.getTargetSdkVersion());
         } catch (InstallerException e) {
-            if (pkg.isSystemApp()) {
+            if (pkg.isSystem()) {
                 logCriticalInfo(Log.ERROR, "Failed to create app data for " + packageName
                         + ", but trying to recover: " + e);
                 destroyAppDataLeafLIF(pkg, userId, flags);
@@ -21872,18 +21844,20 @@
             }
         }
 
-        prepareAppDataContentsLeafLIF(pkg, userId, flags);
+        prepareAppDataContentsLeafLIF(pkg, ps, userId, flags);
     }
 
-    private void prepareAppDataContentsLIF(AndroidPackage pkg, int userId, int flags) {
+    private void prepareAppDataContentsLIF(AndroidPackage pkg, @Nullable PackageSetting pkgSetting,
+            int userId, int flags) {
         if (pkg == null) {
             Slog.wtf(TAG, "Package was null!", new Throwable());
             return;
         }
-        prepareAppDataContentsLeafLIF(pkg, userId, flags);
+        prepareAppDataContentsLeafLIF(pkg, pkgSetting, userId, flags);
     }
 
-    private void prepareAppDataContentsLeafLIF(AndroidPackage pkg, int userId, int flags) {
+    private void prepareAppDataContentsLeafLIF(AndroidPackage pkg,
+            @Nullable PackageSetting pkgSetting, int userId, int flags) {
         final String volumeUuid = pkg.getVolumeUuid();
         final String packageName = pkg.getPackageName();
 
@@ -21891,7 +21865,8 @@
             // Create a native library symlink only if we have native libraries
             // and if the native libraries are 32 bit libraries. We do not provide
             // this symlink for 64 bit libraries.
-            if (pkg.getPrimaryCpuAbi() != null && !VMRuntime.is64BitAbi(pkg.getPrimaryCpuAbi())) {
+            String primaryCpuAbi = AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting);
+            if (primaryCpuAbi != null && !VMRuntime.is64BitAbi(primaryCpuAbi)) {
                 final String nativeLibPath = pkg.getNativeLibraryDir();
                 try {
                     mInstaller.linkNativeLibraryDirectory(volumeUuid, packageName,
@@ -22080,7 +22055,7 @@
                     || shouldFilterApplicationLocked(ps, callingUid, user.getIdentifier())) {
                 throw new PackageManagerException(MOVE_FAILED_DOESNT_EXIST, "Missing package");
             }
-            if (pkg.isSystemApp()) {
+            if (pkg.isSystem()) {
                 throw new PackageManagerException(MOVE_FAILED_SYSTEM_PACKAGE,
                         "Cannot move system application");
             }
@@ -22106,7 +22081,7 @@
                 throw new PackageManagerException(MOVE_FAILED_INTERNAL_ERROR,
                         "Package already moved to " + volumeUuid);
             }
-            if (pkg.isInternal() && isPackageDeviceAdminOnAnyUser(packageName)) {
+            if (!pkg.isExternalStorage() && isPackageDeviceAdminOnAnyUser(packageName)) {
                 throw new PackageManagerException(MOVE_FAILED_DEVICE_ADMIN,
                         "Device admin cannot be moved");
             }
@@ -22116,12 +22091,12 @@
                         "Failed to move already frozen package");
             }
 
-            isCurrentLocationExternal = isExternal(pkg);
+            isCurrentLocationExternal = pkg.isExternalStorage();
             codeFile = new File(pkg.getCodePath());
             installSource = ps.installSource;
             packageAbiOverride = ps.cpuAbiOverrideString;
             appId = UserHandle.getAppId(pkg.getUid());
-            seinfo = pkg.getSeInfo();
+            seinfo = AndroidPackageUtils.getSeInfo(pkg, ps);
             label = String.valueOf(pm.getApplicationLabel(pkg.toAppInfoWithoutState()));
             targetSdkVersion = pkg.getTargetSdkVersion();
             freezer = freezePackage(packageName, "movePackageInternal");
@@ -22296,15 +22271,15 @@
 
         final StorageManager storage = mInjector.getStorageManager();;
         VolumeInfo volume = storage.findVolumeByUuid(pkg.getStorageUuid().toString());
-        int packageExternalStorageType = getPackageExternalStorageType(volume, isExternal(pkg));
+        int packageExternalStorageType = getPackageExternalStorageType(volume, pkg.isExternalStorage());
 
-        if (!isPreviousLocationExternal && isExternal(pkg)) {
+        if (!isPreviousLocationExternal && pkg.isExternalStorage()) {
             // Move from internal to external storage.
             FrameworkStatsLog.write(FrameworkStatsLog.APP_MOVED_STORAGE_REPORTED,
                     packageExternalStorageType,
                     FrameworkStatsLog.APP_MOVED_STORAGE_REPORTED__MOVE_TYPE__TO_EXTERNAL,
                     packageName);
-        } else if (isPreviousLocationExternal && !isExternal(pkg)) {
+        } else if (isPreviousLocationExternal && !pkg.isExternalStorage()) {
             // Move from external to internal storage.
             FrameworkStatsLog.write(FrameworkStatsLog.APP_MOVED_STORAGE_REPORTED,
                     packageExternalStorageType,
@@ -22988,7 +22963,7 @@
         @Override
         public AndroidPackage getPackage(int uid) {
             synchronized (mLock) {
-                final String[] packageNames = getPackagesForUid(uid);
+                final String[] packageNames = getPackagesForUidInternal(uid, Process.SYSTEM_UID);
                 AndroidPackage pkg = null;
                 final int numPackages = packageNames == null ? 0 : packageNames.length;
                 for (int i = 0; pkg == null && i < numPackages; i++) {
@@ -23028,7 +23003,7 @@
         }
 
         @Override
-        public Object getDisabledSystemPackage(@NonNull String packageName) {
+        public PackageSetting getDisabledSystemPackage(@NonNull String packageName) {
             synchronized (mLock) {
                 return mSettings.getDisabledSystemPkgLPr(packageName);
             }
@@ -23298,7 +23273,7 @@
         public List<ResolveInfo> queryIntentActivities(
                 Intent intent, String resolvedType, int flags, int filterCallingUid, int userId) {
             return PackageManagerService.this
-                    .queryIntentActivitiesInternal(intent, resolvedType, flags, filterCallingUid,
+                    .queryIntentActivitiesInternal(intent, resolvedType, flags, 0, filterCallingUid,
                             userId, false /*resolveForStart*/, true /*allowDynamicSplits*/);
         }
 
@@ -23378,7 +23353,7 @@
         }
 
         @Override
-        public boolean isEnabledAndMatches(ParsedComponent component, int flags, int userId) {
+        public boolean isEnabledAndMatches(ParsedMainComponent component, int flags, int userId) {
             synchronized (mLock) {
                 AndroidPackage pkg = getPackage(component.getPackageName());
                 return mSettings.isEnabledAndMatchLPr(pkg, component, flags, userId);
@@ -23413,9 +23388,10 @@
         @Override
         public void requestInstantAppResolutionPhaseTwo(AuxiliaryResolveInfo responseObj,
                 Intent origIntent, String resolvedType, String callingPackage,
-                boolean isRequesterInstantApp, Bundle verificationBundle, int userId) {
-            PackageManagerService.this.requestInstantAppResolutionPhaseTwo(
-                    responseObj, origIntent, resolvedType, callingPackage, isRequesterInstantApp,
+                @Nullable String callingFeatureId, boolean isRequesterInstantApp,
+                Bundle verificationBundle, int userId) {
+            PackageManagerService.this.requestInstantAppResolutionPhaseTwo(responseObj, origIntent,
+                    resolvedType, callingPackage, callingFeatureId, isRequesterInstantApp,
                     verificationBundle, userId);
         }
 
@@ -23469,11 +23445,7 @@
         public boolean isPackagePersistent(String packageName) {
             synchronized (mLock) {
                 AndroidPackage pkg = mPackages.get(packageName);
-                return pkg != null
-                        ? ((pkg.getFlags() & (ApplicationInfo.FLAG_SYSTEM
-                                        | ApplicationInfo.FLAG_PERSISTENT)) ==
-                                (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_PERSISTENT))
-                        : false;
+                return pkg != null && pkg.isSystem() && pkg.isPersistent();
             }
         }
 
@@ -23583,9 +23555,11 @@
 
         @Override
         public ResolveInfo resolveIntent(Intent intent, String resolvedType,
-                int flags, int userId, boolean resolveForStart, int filterCallingUid) {
+                int flags, int privateResolveFlags, int userId, boolean resolveForStart,
+                int filterCallingUid) {
             return resolveIntentInternal(
-                    intent, resolvedType, flags, userId, resolveForStart, filterCallingUid);
+                    intent, resolvedType, flags, privateResolveFlags, userId, resolveForStart,
+                    filterCallingUid);
         }
 
         @Override
@@ -23702,6 +23676,15 @@
         }
 
         @Override
+        public void forEachPackageSetting(Consumer<PackageSetting> actionLocked) {
+            synchronized (mLock) {
+                for (int index = 0; index < mSettings.mPackages.size(); index++) {
+                    actionLocked.accept(mSettings.mPackages.valueAt(index));
+                }
+            }
+        }
+
+        @Override
         public void forEachInstalledPackage(@NonNull Consumer<AndroidPackage> actionLocked,
                 @UserIdInt int userId) {
             PackageManagerService.this.forEachInstalledPackage(actionLocked, userId);
@@ -23905,6 +23888,11 @@
             msg.obj = verificationResult;
             mHandler.sendMessage(msg);
         }
+
+        @Override
+        public List<String> getMimeGroup(String packageName, String mimeGroup) {
+            return PackageManagerService.this.getMimeGroup(packageName, mimeGroup);
+        }
     }
 
     @GuardedBy("mLock")
@@ -24001,9 +23989,13 @@
 
     @Nullable
     public PackageSetting getPackageSetting(String packageName) {
+        return getPackageSettingInternal(packageName, Binder.getCallingUid());
+    }
+
+    private PackageSetting getPackageSettingInternal(String packageName, int callingUid) {
         synchronized (mLock) {
-            packageName = resolveInternalPackageNameLPr(
-                    packageName, PackageManager.VERSION_CODE_HIGHEST);
+            packageName = resolveInternalPackageNameInternalLocked(
+                    packageName, PackageManager.VERSION_CODE_HIGHEST, callingUid);
             return mSettings.mPackages.get(packageName);
         }
     }
@@ -24188,15 +24180,18 @@
     boolean canHaveOatDir(String packageName) {
         synchronized (mLock) {
             AndroidPackage p = mPackages.get(packageName);
-            if (p == null) {
+            PackageSetting pkgSetting = mSettings.getPackageLPr(packageName);
+            if (p == null || pkgSetting == null) {
                 return false;
             }
-            return p.canHaveOatDir();
+            return AndroidPackageUtils.canHaveOatDir(p,
+                    pkgSetting.getPkgState().isUpdatedSystemApp());
         }
     }
 
-    private String getOatDir(AndroidPackage pkg) {
-        if (!pkg.canHaveOatDir()) {
+    private String getOatDir(AndroidPackage pkg, @NonNull PackageSetting pkgSetting) {
+        if (!AndroidPackageUtils.canHaveOatDir(pkg,
+                pkgSetting.getPkgState().isUpdatedSystemApp())) {
             return null;
         }
         File codePath = new File(pkg.getCodePath());
@@ -24211,13 +24206,16 @@
         final List<String> codePaths;
         final String oatDir;
         final AndroidPackage pkg;
+        final PackageSetting pkgSetting;
         synchronized (mLock) {
             pkg = mPackages.get(packageName);
+            pkgSetting = mSettings.getPackageLPr(packageName);
         }
-        instructionSets = getAppDexInstructionSets(pkg.getPrimaryCpuAbi(),
-                pkg.getSecondaryCpuAbi());
-        codePaths = pkg.getAllCodePaths();
-        oatDir = getOatDir(pkg);
+        instructionSets = getAppDexInstructionSets(
+                AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting),
+                AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting));
+        codePaths = AndroidPackageUtils.getAllCodePaths(pkg);
+        oatDir = getOatDir(pkg, pkgSetting);
 
         for (String codePath : codePaths) {
             for (String isa : instructionSets) {
@@ -24244,8 +24242,8 @@
                 if (PackageManagerServiceUtils
                         .isUnusedSinceTimeInMillis(ps.firstInstallTime, currentTimeInMillis,
                                 downgradeTimeThresholdMillis, packageUseInfo,
-                                pkg.getLatestPackageUseTimeInMills(),
-                                pkg.getLatestForegroundPackageUseTimeInMills())) {
+                                ps.getPkgState().getLatestPackageUseTimeInMills(),
+                                ps.getPkgState().getLatestForegroundPackageUseTimeInMills())) {
                     unusedPackages.add(pkg.getPackageName());
                 }
             }
@@ -24325,8 +24323,9 @@
                 Manifest.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY,
             };
             try {
-                am.broadcastIntent(null, intent, null, null, 0, null, null, requiredPermissions,
-                        android.app.AppOpsManager.OP_NONE, null, false, false, UserHandle.USER_ALL);
+                am.broadcastIntentWithFeature(null, null, intent, null, null, 0, null, null,
+                        requiredPermissions, android.app.AppOpsManager.OP_NONE, null, false, false,
+                        UserHandle.USER_ALL);
             } catch (RemoteException e) {
                 throw e.rethrowFromSystemServer();
             }
@@ -24335,6 +24334,38 @@
         }
     }
 
+    private void applyMimeGroupChanges(String packageName, String mimeGroup) {
+        if (mComponentResolver.updateMimeGroup(packageName, mimeGroup)) {
+            clearPackagePreferredActivities(packageName, UserHandle.USER_ALL);
+        }
+
+        mPmInternal.writeSettings(false);
+    }
+
+    @Override
+    public void setMimeGroup(String packageName, String mimeGroup, List<String> mimeTypes) {
+        boolean changed = mSettings.mPackages.get(packageName)
+                .setMimeGroup(mimeGroup, mimeTypes);
+
+        if (changed) {
+            applyMimeGroupChanges(packageName, mimeGroup);
+        }
+    }
+
+    @Override
+    public void clearMimeGroup(String packageName, String mimeGroup) {
+        boolean changed = mSettings.mPackages.get(packageName).clearMimeGroup(mimeGroup);
+
+        if (changed) {
+            applyMimeGroupChanges(packageName, mimeGroup);
+        }
+    }
+
+    @Override
+    public List<String> getMimeGroup(String packageName, String mimeGroup) {
+        return mSettings.mPackages.get(packageName).getMimeGroup(mimeGroup);
+    }
+
     static class ActiveInstallSession {
         private final String mPackageName;
         private final File mStagedDir;
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
index 71a5545..91afd84 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
@@ -40,8 +40,7 @@
 import android.content.pm.PackageParser.PackageParserException;
 import android.content.pm.ResolveInfo;
 import android.content.pm.Signature;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ApkParseUtils;
+import android.content.pm.parsing.ParsingPackageUtils;
 import android.os.Build;
 import android.os.Debug;
 import android.os.Environment;
@@ -66,6 +65,7 @@
 import com.android.server.EventLogTags;
 import com.android.server.pm.dex.DexManager;
 import com.android.server.pm.dex.PackageDexUsage;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 import com.android.server.pm.permission.PermissionsState;
 
 import dalvik.system.VMRuntime;
@@ -94,6 +94,8 @@
 import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.function.Predicate;
 import java.util.zip.GZIPInputStream;
 
@@ -105,6 +107,9 @@
 public class PackageManagerServiceUtils {
     private final static long SEVEN_DAYS_IN_MILLISECONDS = 7 * 24 * 60 * 60 * 1000;
 
+    public final static Predicate<PackageSetting> REMOVE_IF_NULL_PKG =
+            pkgSetting -> pkgSetting.pkg == null;
+
     private static ArraySet<String> getPackageNamesForIntent(Intent intent, int userId) {
         List<ResolveInfo> ris = null;
         try {
@@ -124,40 +129,43 @@
     // Sort a list of apps by their last usage, most recently used apps first. The order of
     // packages without usage data is undefined (but they will be sorted after the packages
     // that do have usage data).
-    public static void sortPackagesByUsageDate(List<AndroidPackage> pkgs,
+    public static void sortPackagesByUsageDate(List<PackageSetting> pkgSettings,
             PackageManagerService packageManagerService) {
         if (!packageManagerService.isHistoricalPackageUsageAvailable()) {
             return;
         }
 
-        Collections.sort(pkgs, (pkg1, pkg2) ->
-                Long.compare(pkg2.getLatestForegroundPackageUseTimeInMills(),
-                        pkg1.getLatestForegroundPackageUseTimeInMills()));
+        Collections.sort(pkgSettings, (pkgSetting1, pkgSetting2) ->
+                Long.compare(
+                        pkgSetting2.getPkgState().getLatestForegroundPackageUseTimeInMills(),
+                        pkgSetting1.getPkgState().getLatestForegroundPackageUseTimeInMills())
+        );
     }
 
     // Apply the given {@code filter} to all packages in {@code packages}. If tested positive, the
     // package will be removed from {@code packages} and added to {@code result} with its
     // dependencies. If usage data is available, the positive packages will be sorted by usage
     // data (with {@code sortTemp} as temporary storage).
-    private static void applyPackageFilter(Predicate<AndroidPackage> filter,
-            Collection<AndroidPackage> result,
-            Collection<AndroidPackage> packages,
-            @NonNull List<AndroidPackage> sortTemp,
+    private static void applyPackageFilter(
+            Predicate<PackageSetting> filter,
+            Collection<PackageSetting> result,
+            Collection<PackageSetting> packages,
+            @NonNull List<PackageSetting> sortTemp,
             PackageManagerService packageManagerService) {
-        for (AndroidPackage pkg : packages) {
-            if (filter.test(pkg)) {
-                sortTemp.add(pkg);
+        for (PackageSetting pkgSetting : packages) {
+            if (filter.test(pkgSetting)) {
+                sortTemp.add(pkgSetting);
             }
         }
 
         sortPackagesByUsageDate(sortTemp, packageManagerService);
         packages.removeAll(sortTemp);
 
-        for (AndroidPackage pkg : sortTemp) {
-            result.add(pkg);
+        for (PackageSetting pkgSetting : sortTemp) {
+            result.add(pkgSetting);
 
-            Collection<AndroidPackage> deps =
-                    packageManagerService.findSharedNonSystemLibraries(pkg);
+            List<PackageSetting> deps =
+                    packageManagerService.findSharedNonSystemLibraries(pkgSetting);
             if (!deps.isEmpty()) {
                 deps.removeAll(result);
                 result.addAll(deps);
@@ -170,74 +178,79 @@
 
     // Sort apps by importance for dexopt ordering. Important apps are given
     // more priority in case the device runs out of space.
-    public static List<AndroidPackage> getPackagesForDexopt(
-            Collection<AndroidPackage> packages,
+    public static List<PackageSetting> getPackagesForDexopt(
+            Collection<PackageSetting> packages,
             PackageManagerService packageManagerService) {
         return getPackagesForDexopt(packages, packageManagerService, DEBUG_DEXOPT);
     }
 
-    public static List<AndroidPackage> getPackagesForDexopt(
-            Collection<AndroidPackage> packages,
+    public static List<PackageSetting> getPackagesForDexopt(
+            Collection<PackageSetting> pkgSettings,
             PackageManagerService packageManagerService,
             boolean debug) {
-        ArrayList<AndroidPackage> remainingPkgs = new ArrayList<>(packages);
-        LinkedList<AndroidPackage> result = new LinkedList<>();
-        ArrayList<AndroidPackage> sortTemp = new ArrayList<>(remainingPkgs.size());
+        List<PackageSetting> result = new LinkedList<>();
+        ArrayList<PackageSetting> remainingPkgSettings = new ArrayList<>(pkgSettings);
+
+        // First, remove all settings without available packages
+        remainingPkgSettings.removeIf(REMOVE_IF_NULL_PKG);
+
+        ArrayList<PackageSetting> sortTemp = new ArrayList<>(remainingPkgSettings.size());
 
         // Give priority to core apps.
-        applyPackageFilter((pkg) -> pkg.isCoreApp(), result, remainingPkgs, sortTemp,
+        applyPackageFilter(pkgSetting -> pkgSetting.pkg.isCoreApp(), result, remainingPkgSettings, sortTemp,
                 packageManagerService);
 
         // Give priority to system apps that listen for pre boot complete.
         Intent intent = new Intent(Intent.ACTION_PRE_BOOT_COMPLETED);
         final ArraySet<String> pkgNames = getPackageNamesForIntent(intent, UserHandle.USER_SYSTEM);
-        applyPackageFilter((pkg) -> pkgNames.contains(pkg.getPackageName()), result, remainingPkgs,
-                sortTemp, packageManagerService);
+        applyPackageFilter(pkgSetting -> pkgNames.contains(pkgSetting.name), result,
+                remainingPkgSettings, sortTemp, packageManagerService);
 
         // Give priority to apps used by other apps.
         DexManager dexManager = packageManagerService.getDexManager();
-        applyPackageFilter((pkg) ->
-                dexManager.getPackageUseInfoOrDefault(pkg.getPackageName())
+        applyPackageFilter(pkgSetting ->
+                dexManager.getPackageUseInfoOrDefault(pkgSetting.name)
                         .isAnyCodePathUsedByOtherApps(),
-                result, remainingPkgs, sortTemp, packageManagerService);
+                result, remainingPkgSettings, sortTemp, packageManagerService);
 
         // Filter out packages that aren't recently used, add all remaining apps.
         // TODO: add a property to control this?
-        Predicate<AndroidPackage> remainingPredicate;
-        if (!remainingPkgs.isEmpty() && packageManagerService.isHistoricalPackageUsageAvailable()) {
+        Predicate<PackageSetting> remainingPredicate;
+        if (!remainingPkgSettings.isEmpty() && packageManagerService.isHistoricalPackageUsageAvailable()) {
             if (debug) {
                 Log.i(TAG, "Looking at historical package use");
             }
             // Get the package that was used last.
-            AndroidPackage lastUsed = Collections.max(remainingPkgs, (pkg1, pkg2) ->
-                    Long.compare(pkg1.getLatestForegroundPackageUseTimeInMills(),
-                            pkg2.getLatestForegroundPackageUseTimeInMills()));
+            PackageSetting lastUsed = Collections.max(remainingPkgSettings,
+                    (pkgSetting1, pkgSetting2) -> Long.compare(
+                            pkgSetting1.getPkgState().getLatestForegroundPackageUseTimeInMills(),
+                            pkgSetting2.getPkgState().getLatestForegroundPackageUseTimeInMills()));
             if (debug) {
-                Log.i(TAG, "Taking package " + lastUsed.getPackageName()
+                Log.i(TAG, "Taking package " + lastUsed.name
                         + " as reference in time use");
             }
-            long estimatedPreviousSystemUseTime =
-                    lastUsed.getLatestForegroundPackageUseTimeInMills();
+            long estimatedPreviousSystemUseTime = lastUsed.getPkgState()
+                    .getLatestForegroundPackageUseTimeInMills();
             // Be defensive if for some reason package usage has bogus data.
             if (estimatedPreviousSystemUseTime != 0) {
                 final long cutoffTime = estimatedPreviousSystemUseTime - SEVEN_DAYS_IN_MILLISECONDS;
-                remainingPredicate =
-                        (pkg) -> pkg.getLatestForegroundPackageUseTimeInMills() >= cutoffTime;
+                remainingPredicate = pkgSetting -> pkgSetting.getPkgState()
+                        .getLatestForegroundPackageUseTimeInMills() >= cutoffTime;
             } else {
                 // No meaningful historical info. Take all.
-                remainingPredicate = (pkg) -> true;
+                remainingPredicate = pkgSetting -> true;
             }
-            sortPackagesByUsageDate(remainingPkgs, packageManagerService);
+            sortPackagesByUsageDate(remainingPkgSettings, packageManagerService);
         } else {
             // No historical info. Take all.
-            remainingPredicate = (pkg) -> true;
+            remainingPredicate = pkgSetting -> true;
         }
-        applyPackageFilter(remainingPredicate, result, remainingPkgs, sortTemp,
+        applyPackageFilter(remainingPredicate, result, remainingPkgSettings, sortTemp,
                 packageManagerService);
 
         if (debug) {
             Log.i(TAG, "Packages to be dexopted: " + packagesToString(result));
-            Log.i(TAG, "Packages skipped from dexopt: " + packagesToString(remainingPkgs));
+            Log.i(TAG, "Packages skipped from dexopt: " + packagesToString(remainingPkgSettings));
         }
 
         return result;
@@ -290,13 +303,13 @@
         }
     }
 
-    public static String packagesToString(Collection<AndroidPackage> c) {
+    public static String packagesToString(List<PackageSetting> pkgSettings) {
         StringBuilder sb = new StringBuilder();
-        for (AndroidPackage pkg : c) {
+        for (int index = 0; index < pkgSettings.size(); index++) {
             if (sb.length() > 0) {
                 sb.append(", ");
             }
-            sb.append(pkg.getPackageName());
+            sb.append(pkgSettings.get(index).name);
         }
         return sb.toString();
     }
@@ -543,23 +556,16 @@
      */
     private static boolean matchSignatureInSystem(PackageSetting pkgSetting,
             PackageSetting disabledPkgSetting) {
-        try {
-            ApkParseUtils.collectCertificates(disabledPkgSetting.pkg, true /* skipVerify */);
-            if (pkgSetting.signatures.mSigningDetails.checkCapability(
-                    disabledPkgSetting.signatures.mSigningDetails,
-                    PackageParser.SigningDetails.CertCapabilities.INSTALLED_DATA)
-                    || disabledPkgSetting.signatures.mSigningDetails.checkCapability(
-                            pkgSetting.signatures.mSigningDetails,
-                            PackageParser.SigningDetails.CertCapabilities.ROLLBACK)) {
-                return true;
-            } else {
-                logCriticalInfo(Log.ERROR, "Updated system app mismatches cert on /system: " +
-                        pkgSetting.name);
-                return false;
-            }
-        } catch (PackageParserException e) {
-            logCriticalInfo(Log.ERROR, "Failed to collect cert for " + pkgSetting.name + ": " +
-                    e.getMessage());
+        if (pkgSetting.signatures.mSigningDetails.checkCapability(
+                disabledPkgSetting.signatures.mSigningDetails,
+                PackageParser.SigningDetails.CertCapabilities.INSTALLED_DATA)
+                || disabledPkgSetting.signatures.mSigningDetails.checkCapability(
+                pkgSetting.signatures.mSigningDetails,
+                PackageParser.SigningDetails.CertCapabilities.ROLLBACK)) {
+            return true;
+        } else {
+            logCriticalInfo(Log.ERROR, "Updated system app mismatches cert on /system: " +
+                    pkgSetting.name);
             return false;
         }
     }
@@ -578,7 +584,9 @@
 
     /** Returns true if standard APK Verity is enabled. */
     static boolean isApkVerityEnabled() {
-        return SystemProperties.getInt("ro.apk_verity.mode", FSVERITY_DISABLED) == FSVERITY_ENABLED;
+        return Build.VERSION.FIRST_SDK_INT >= Build.VERSION_CODES.R
+                || SystemProperties.getInt("ro.apk_verity.mode", FSVERITY_DISABLED)
+                        == FSVERITY_ENABLED;
     }
 
     static boolean isLegacyApkVerityEnabled() {
@@ -640,8 +648,8 @@
             }
         }
         // Check for shared user signatures
-        if (pkgSetting.sharedUser != null
-                && pkgSetting.sharedUser.signatures.mSigningDetails
+        if (pkgSetting.getSharedUser() != null
+                && pkgSetting.getSharedUser().signatures.mSigningDetails
                         != PackageParser.SigningDetails.UNKNOWN) {
 
             // Already existing package. Make sure signatures match.  In case of signing certificate
@@ -651,24 +659,24 @@
             // with being sharedUser with the existing signing cert.
             boolean match =
                     parsedSignatures.checkCapability(
-                            pkgSetting.sharedUser.signatures.mSigningDetails,
+                            pkgSetting.getSharedUser().signatures.mSigningDetails,
                             PackageParser.SigningDetails.CertCapabilities.SHARED_USER_ID)
-                    || pkgSetting.sharedUser.signatures.mSigningDetails.checkCapability(
+                    || pkgSetting.getSharedUser().signatures.mSigningDetails.checkCapability(
                             parsedSignatures,
                             PackageParser.SigningDetails.CertCapabilities.SHARED_USER_ID);
             if (!match && compareCompat) {
                 match = matchSignaturesCompat(
-                        packageName, pkgSetting.sharedUser.signatures, parsedSignatures);
+                        packageName, pkgSetting.getSharedUser().signatures, parsedSignatures);
             }
             if (!match && compareRecover) {
                 match =
                         matchSignaturesRecover(packageName,
-                                pkgSetting.sharedUser.signatures.mSigningDetails,
+                                pkgSetting.getSharedUser().signatures.mSigningDetails,
                                 parsedSignatures,
                                 PackageParser.SigningDetails.CertCapabilities.SHARED_USER_ID)
                         || matchSignaturesRecover(packageName,
                                 parsedSignatures,
-                                pkgSetting.sharedUser.signatures.mSigningDetails,
+                                pkgSetting.getSharedUser().signatures.mSigningDetails,
                                 PackageParser.SigningDetails.CertCapabilities.SHARED_USER_ID);
                 compatMatch |= match;
             }
@@ -676,7 +684,7 @@
                 throw new PackageManagerException(INSTALL_FAILED_SHARED_USER_INCOMPATIBLE,
                         "Package " + packageName
                         + " has no signatures that match those in shared user "
-                        + pkgSetting.sharedUser.name + "; ignoring!");
+                        + pkgSetting.getSharedUser().name + "; ignoring!");
             }
         }
         return compatMatch;
@@ -794,6 +802,7 @@
         ret.verifiers = pkg.verifiers;
         ret.recommendedInstallLocation = recommendedInstallLocation;
         ret.multiArch = pkg.multiArch;
+        ret.debuggable = pkg.debuggable;
 
         return ret;
     }
@@ -820,11 +829,11 @@
      * Checks whenever downgrade of an app is permitted.
      *
      * @param installFlags flags of the current install.
-     * @param applicationFlags flags of the currently installed version of the app.
+     * @param isAppDebuggable if the currently installed version of the app is debuggable.
      * @return {@code true} if downgrade is permitted according to the {@code installFlags} and
      *         {@code applicationFlags}.
      */
-    public static boolean isDowngradePermitted(int installFlags, int applicationFlags) {
+    public static boolean isDowngradePermitted(int installFlags, boolean isAppDebuggable) {
         // If installed, the package will get access to data left on the device by its
         // predecessor. As a security measure, this is permitted only if this is not a
         // version downgrade or if the predecessor package is marked as debuggable and
@@ -846,9 +855,7 @@
         if (!downgradeRequested) {
             return false;
         }
-        final boolean isDebuggable =
-                Build.IS_DEBUGGABLE || ((applicationFlags
-                        & ApplicationInfo.FLAG_DEBUGGABLE) != 0);
+        final boolean isDebuggable = Build.IS_DEBUGGABLE || isAppDebuggable;
         if (isDebuggable) {
             return true;
         }
@@ -912,8 +919,8 @@
      */
     public static PermissionsState getPermissionsState(
             PackageManagerInternal packageManagerInternal, AndroidPackage pkg) {
-        final PackageSetting packageSetting =
-                (PackageSetting) packageManagerInternal.getPackageSetting(pkg.getPackageName());
+        final PackageSetting packageSetting = packageManagerInternal.getPackageSetting(
+                pkg.getPackageName());
         if (packageSetting == null) {
             return null;
         }
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index bb69680..f1e403b 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -88,6 +88,7 @@
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.os.incremental.V4Signature;
 import android.os.storage.StorageManager;
 import android.permission.IPermissionManager;
 import android.system.ErrnoException;
@@ -118,6 +119,7 @@
 import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
@@ -134,7 +136,6 @@
 class PackageManagerShellCommand extends ShellCommand {
     /** Path for streaming APK content */
     private static final String STDIN_PATH = "-";
-    private static final byte[] STDIN_PATH_BYTES = "-".getBytes(StandardCharsets.UTF_8);
     /** Path where ART profiles snapshots are dumped for the shell user */
     private final static String ART_PROFILE_SNAPSHOT_DEBUG_LOCATION = "/data/misc/profman/";
     private static final int DEFAULT_WAIT_MS = 60 * 1000;
@@ -181,6 +182,8 @@
                     return runInstall();
                 case "install-streaming":
                     return runStreamingInstall();
+                case "install-incremental":
+                    return runIncrementalInstall();
                 case "install-abandon":
                 case "install-destroy":
                     return runInstallAbandon();
@@ -1163,7 +1166,16 @@
         final InstallParams params = makeInstallParams();
         if (params.sessionParams.dataLoaderParams == null) {
             params.sessionParams.setDataLoaderParams(
-                    PackageManagerShellCommandDataLoader.getDataLoaderParams(this));
+                    PackageManagerShellCommandDataLoader.getStreamingDataLoaderParams(this));
+        }
+        return doRunInstall(params);
+    }
+
+    private int runIncrementalInstall() throws RemoteException {
+        final InstallParams params = makeInstallParams();
+        if (params.sessionParams.dataLoaderParams == null) {
+            params.sessionParams.setDataLoaderParams(
+                    PackageManagerShellCommandDataLoader.getIncrementalDataLoaderParams(this));
         }
         return doRunInstall(params);
     }
@@ -2757,6 +2769,9 @@
                 case "--no-wait":
                     params.mWaitForStagedSessionReady = false;
                     break;
+                case "--skip-verification":
+                    sessionParams.installFlags |= PackageManager.INSTALL_DISABLE_VERIFICATION;
+                    break;
                 default:
                     throw new IllegalArgumentException("Unknown option " + opt);
             }
@@ -2973,8 +2988,10 @@
         try {
             // 1. Single file from stdin.
             if (args.isEmpty() || STDIN_PATH.equals(args.get(0))) {
-                String name = "base." + (isApex ? "apex" : "apk");
-                session.addFile(LOCATION_DATA_APP, name, sessionSizeBytes, STDIN_PATH_BYTES, null);
+                final String name = "base." + (isApex ? "apex" : "apk");
+                final String metadata = "-" + name;
+                session.addFile(LOCATION_DATA_APP, name, sessionSizeBytes,
+                        metadata.getBytes(StandardCharsets.UTF_8), null);
                 return 0;
             }
 
@@ -2983,32 +3000,76 @@
 
                 // 2. File with specified size read from stdin.
                 if (delimLocation != -1) {
-                    String name = arg.substring(0, delimLocation);
-                    String sizeStr = arg.substring(delimLocation + 1);
-                    long sizeBytes;
+                    final String[] fileDesc = arg.split(":");
+                    String name = null;
+                    long sizeBytes = -1;
+                    String metadata;
+                    byte[] signature = null;
+
+                    try {
+                        if (fileDesc.length > 0) {
+                            name = fileDesc[0];
+                        }
+                        if (fileDesc.length > 1) {
+                            sizeBytes = Long.parseUnsignedLong(fileDesc[1]);
+                        }
+                        if (fileDesc.length > 2 && !TextUtils.isEmpty(fileDesc[2])) {
+                            metadata = fileDesc[2];
+                        } else {
+                            metadata = name;
+                        }
+                        if (fileDesc.length > 3) {
+                            signature = Base64.getDecoder().decode(fileDesc[3]);
+                        }
+                    } catch (IllegalArgumentException e) {
+                        getErrPrintWriter().println(
+                                "Unable to parse file parameters: " + arg + ", reason: " + e);
+                        return 1;
+                    }
 
                     if (TextUtils.isEmpty(name)) {
                         getErrPrintWriter().println("Empty file name in: " + arg);
                         return 1;
                     }
+
+                    if (signature != null) {
+                        // Streaming/adb mode.
+                        metadata = "+" + metadata;
+                    } else {
+                        // Singleshot read from stdin.
+                        metadata = "-" + metadata;
+                    }
+
                     try {
-                        sizeBytes = Long.parseUnsignedLong(sizeStr);
-                    } catch (NumberFormatException e) {
-                        getErrPrintWriter().println("Unable to parse size from: " + arg);
+                        if (V4Signature.readFrom(signature) == null) {
+                            getErrPrintWriter().println("V4 signature is invalid in: " + arg);
+                            return 1;
+                        }
+                    } catch (Exception e) {
+                        getErrPrintWriter().println("V4 signature is invalid: " + e + " in " + arg);
                         return 1;
                     }
 
-                    session.addFile(LOCATION_DATA_APP, name, sizeBytes, STDIN_PATH_BYTES, null);
+                    session.addFile(LOCATION_DATA_APP, name, sizeBytes,
+                            metadata.getBytes(StandardCharsets.UTF_8), signature);
                     continue;
                 }
 
                 // 3. Local file.
                 final String inPath = arg;
 
-                String name = new File(inPath).getName();
-                byte[] metadata = inPath.getBytes(StandardCharsets.UTF_8);
+                final File file = new File(inPath);
+                final String name = file.getName();
+                final long size = file.length();
+                final byte[] metadata = inPath.getBytes(StandardCharsets.UTF_8);
 
-                session.addFile(LOCATION_DATA_APP, name, -1, metadata, null);
+                // Try to load a v4 signature for the APK.
+                final V4Signature v4signature = V4Signature.readFrom(
+                        new File(inPath + V4Signature.EXT));
+                final byte[] v4signatureBytes =
+                        (v4signature != null) ? v4signature.toByteArray() : null;
+
+                session.addFile(LOCATION_DATA_APP, name, size, metadata, v4signatureBytes);
             }
             return 0;
         } finally {
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommandDataLoader.java b/services/core/java/com/android/server/pm/PackageManagerShellCommandDataLoader.java
index 5dca9e1..8f30e7d 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommandDataLoader.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommandDataLoader.java
@@ -20,6 +20,7 @@
 import android.content.ComponentName;
 import android.content.pm.DataLoaderParams;
 import android.content.pm.InstallationFile;
+import android.content.pm.PackageInstaller;
 import android.os.ParcelFileDescriptor;
 import android.os.ShellCommand;
 import android.service.dataloader.DataLoaderService;
@@ -54,7 +55,9 @@
 
     private static final String STDIN_PATH = "-";
 
-    static DataLoaderParams getDataLoaderParams(ShellCommand shellCommand) {
+    private static String getDataLoaderParamsArgs(ShellCommand shellCommand) {
+        nativeInitialize();
+
         int commandId;
         synchronized (sShellCommands) {
             // Clean up old references.
@@ -78,8 +81,17 @@
             sShellCommands.put(commandId, new WeakReference<>(shellCommand));
         }
 
-        final String args = SHELL_COMMAND_ID_PREFIX + commandId;
-        return DataLoaderParams.forStreaming(new ComponentName(PACKAGE, CLASS), args);
+        return SHELL_COMMAND_ID_PREFIX + commandId;
+    }
+
+    static DataLoaderParams getStreamingDataLoaderParams(ShellCommand shellCommand) {
+        return DataLoaderParams.forStreaming(new ComponentName(PACKAGE, CLASS),
+                getDataLoaderParamsArgs(shellCommand));
+    }
+
+    static DataLoaderParams getIncrementalDataLoaderParams(ShellCommand shellCommand) {
+        return DataLoaderParams.forIncremental(new ComponentName(PACKAGE, CLASS),
+                getDataLoaderParamsArgs(shellCommand), null);
     }
 
     private static int extractShellCommandId(String args) {
@@ -102,7 +114,7 @@
         }
     }
 
-    static class DataLoader implements DataLoaderService.DataLoader {
+    private static class DataLoader implements DataLoaderService.DataLoader {
         private DataLoaderParams mParams = null;
         private FileSystemConnector mConnector = null;
 
@@ -117,33 +129,22 @@
         @Override
         public boolean onPrepareImage(@NonNull Collection<InstallationFile> addedFiles,
                 @NonNull Collection<String> removedFiles) {
-            final int commandId = extractShellCommandId(mParams.getArguments());
-            if (commandId == INVALID_SHELL_COMMAND_ID) {
-                return false;
-            }
-
-            final WeakReference<ShellCommand> shellCommandRef;
-            synchronized (sShellCommands) {
-                shellCommandRef = sShellCommands.get(commandId, null);
-            }
-            final ShellCommand shellCommand =
-                    shellCommandRef != null ? shellCommandRef.get() : null;
+            ShellCommand shellCommand = lookupShellCommand(mParams.getArguments());
             if (shellCommand == null) {
                 Slog.e(TAG, "Missing shell command.");
                 return false;
             }
             try {
-                for (InstallationFile fileInfo : addedFiles) {
-                    String filePath = new String(fileInfo.getMetadata(), StandardCharsets.UTF_8);
-                    if (STDIN_PATH.equals(filePath) || TextUtils.isEmpty(filePath)) {
-                        final ParcelFileDescriptor inFd = ParcelFileDescriptor.dup(
-                                shellCommand.getInFileDescriptor());
-                        mConnector.writeData(fileInfo.getName(), 0, fileInfo.getSize(), inFd);
+                for (InstallationFile file : addedFiles) {
+                    String filePath = new String(file.getMetadata(), StandardCharsets.UTF_8);
+                    if (TextUtils.isEmpty(filePath) || filePath.startsWith(STDIN_PATH)) {
+                        final ParcelFileDescriptor inFd = getStdInPFD(shellCommand);
+                        mConnector.writeData(file.getName(), 0, file.getLengthBytes(), inFd);
                     } else {
                         ParcelFileDescriptor incomingFd = null;
                         try {
-                            incomingFd = shellCommand.openFileForSystem(filePath, "r");
-                            mConnector.writeData(fileInfo.getName(), 0, incomingFd.getStatSize(),
+                            incomingFd = getLocalFile(shellCommand, filePath);
+                            mConnector.writeData(file.getName(), 0, incomingFd.getStatSize(),
                                     incomingFd);
                         } finally {
                             IoUtils.closeQuietly(incomingFd);
@@ -158,8 +159,45 @@
         }
     }
 
-    @Override
-    public DataLoaderService.DataLoader onCreateDataLoader() {
-        return new DataLoader();
+    static ShellCommand lookupShellCommand(String args) {
+        final int commandId = extractShellCommandId(args);
+        if (commandId == INVALID_SHELL_COMMAND_ID) {
+            return null;
+        }
+
+        final WeakReference<ShellCommand> shellCommandRef;
+        synchronized (sShellCommands) {
+            shellCommandRef = sShellCommands.get(commandId, null);
+        }
+        final ShellCommand shellCommand =
+                shellCommandRef != null ? shellCommandRef.get() : null;
+
+        return shellCommand;
     }
+
+    static ParcelFileDescriptor getStdInPFD(ShellCommand shellCommand) {
+        try {
+            return ParcelFileDescriptor.dup(shellCommand.getInFileDescriptor());
+        } catch (IOException e) {
+            Slog.e(TAG, "Exception while obtaining STDIN fd", e);
+            return null;
+        }
+    }
+
+    static ParcelFileDescriptor getLocalFile(ShellCommand shellCommand, String filePath) {
+        return shellCommand.openFileForSystem(filePath, "r");
+    }
+
+    @Override
+    public DataLoaderService.DataLoader onCreateDataLoader(
+            @NonNull DataLoaderParams dataLoaderParams) {
+        if (dataLoaderParams.getType() == PackageInstaller.DATA_LOADER_TYPE_STREAMING) {
+            // This DataLoader only supports streaming installations.
+            return new DataLoader();
+        }
+        return null;
+    }
+
+    /* Native methods */
+    private static native void nativeInitialize();
 }
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index bbc0dc9..2bd1a26 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -16,24 +16,31 @@
 
 package com.android.server.pm;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.UserInfo;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ParsedPackage;
 import android.service.pm.PackageProto;
+import android.util.ArrayMap;
+import android.util.ArraySet;
 import android.util.proto.ProtoOutputStream;
 
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 import com.android.server.pm.permission.PermissionsState;
+import com.android.server.pm.pkg.PackageStateUnserialized;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * Settings data for a particular package we know about.
  */
-public final class PackageSetting extends PackageSettingBase implements
-        ParsedPackage.PackageSettingCallback {
+public class PackageSetting extends PackageSettingBase {
     int appId;
 
     public AndroidPackage pkg;
@@ -50,17 +57,29 @@
      */
     private int sharedUserId;
 
+    /**
+     *  Maps mime group name to the set of Mime types in a group. Mime groups declared
+     *  by app are populated with empty sets at construction.
+     *  Mime groups can not be created/removed at runtime, thus keys in this map should not change
+     */
+    @Nullable
+    Map<String, ArraySet<String>> mimeGroups;
+
+    @NonNull
+    private PackageStateUnserialized pkgState = new PackageStateUnserialized();
+
     PackageSetting(String name, String realName, File codePath, File resourcePath,
             String legacyNativeLibraryPathString, String primaryCpuAbiString,
             String secondaryCpuAbiString, String cpuAbiOverrideString,
             long pVersionCode, int pkgFlags, int privateFlags,
             int sharedUserId, String[] usesStaticLibraries,
-            long[] usesStaticLibrariesVersions) {
+            long[] usesStaticLibrariesVersions, Map<String, ArraySet<String>> mimeGroups) {
         super(name, realName, codePath, resourcePath, legacyNativeLibraryPathString,
                 primaryCpuAbiString, secondaryCpuAbiString, cpuAbiOverrideString,
                 pVersionCode, pkgFlags, privateFlags,
                 usesStaticLibraries, usesStaticLibrariesVersions);
         this.sharedUserId = sharedUserId;
+        copyMimeGroups(mimeGroups);
     }
 
     /**
@@ -110,6 +129,53 @@
         pkg = orig.pkg;
         sharedUser = orig.sharedUser;
         sharedUserId = orig.sharedUserId;
+        copyMimeGroups(orig.mimeGroups);
+    }
+
+    private void copyMimeGroups(@Nullable Map<String, ArraySet<String>> newMimeGroups) {
+        if (newMimeGroups == null) {
+            mimeGroups = null;
+            return;
+        }
+
+        mimeGroups = new ArrayMap<>(newMimeGroups.size());
+        for (String mimeGroup : newMimeGroups.keySet()) {
+            ArraySet<String> mimeTypes = newMimeGroups.get(mimeGroup);
+
+            if (mimeTypes != null) {
+                mimeGroups.put(mimeGroup, new ArraySet<>(mimeTypes));
+            } else {
+                mimeGroups.put(mimeGroup, new ArraySet<>());
+            }
+        }
+    }
+
+    /**
+     * Updates declared MIME groups, removing no longer declared groups
+     * and keeping previous state of MIME groups
+     */
+    void updateMimeGroups(@Nullable Set<String> newMimeGroupNames) {
+        if (newMimeGroupNames == null) {
+            mimeGroups = null;
+            return;
+        }
+
+        if (mimeGroups == null) {
+            // set mimeGroups to empty map to avoid repeated null-checks in the next loop
+            mimeGroups = Collections.emptyMap();
+        }
+
+        ArrayMap<String, ArraySet<String>> updatedMimeGroups =
+                new ArrayMap<>(newMimeGroupNames.size());
+
+        for (String mimeGroup : newMimeGroupNames) {
+            if (mimeGroups.containsKey(mimeGroup)) {
+                updatedMimeGroups.put(mimeGroup, mimeGroups.get(mimeGroup));
+            } else {
+                updatedMimeGroups.put(mimeGroup, new ArraySet<>());
+            }
+        }
+        mimeGroups = updatedMimeGroups;
     }
 
     @Override
@@ -160,10 +226,6 @@
         return (pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0;
     }
 
-    public boolean isUpdatedSystem() {
-        return (pkgFlags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
-    }
-
     @Override
     public boolean isSharedUser() {
         return sharedUser != null;
@@ -176,6 +238,41 @@
         return true;
     }
 
+    public boolean setMimeGroup(String mimeGroup, List<String> mimeTypes) {
+        ArraySet<String> oldMimeTypes = getMimeGroupInternal(mimeGroup);
+        if (oldMimeTypes == null) {
+            return false;
+        }
+
+        ArraySet<String> newMimeTypes = new ArraySet<>(mimeTypes);
+        boolean hasChanges = !newMimeTypes.equals(oldMimeTypes);
+        mimeGroups.put(mimeGroup, newMimeTypes);
+        return hasChanges;
+    }
+
+    public boolean clearMimeGroup(String mimeGroup) {
+        ArraySet<String> mimeTypes = getMimeGroupInternal(mimeGroup);
+
+        if (mimeTypes == null || mimeTypes.isEmpty()) {
+            return false;
+        }
+
+        mimeTypes.clear();
+        return true;
+    }
+
+    public List<String> getMimeGroup(String mimeGroup) {
+        ArraySet<String> mimeTypes = getMimeGroupInternal(mimeGroup);
+        if (mimeTypes == null) {
+            return null;
+        }
+        return new ArrayList<>(mimeTypes);
+    }
+
+    private ArraySet<String> getMimeGroupInternal(String mimeGroup) {
+        return mimeGroups != null ? mimeGroups.get(mimeGroup) : null;
+    }
+
     public void dumpDebug(ProtoOutputStream proto, long fieldId, List<UserInfo> users) {
         final long packageToken = proto.start(fieldId);
         proto.write(PackageProto.NAME, (realName != null ? realName : name));
@@ -221,11 +318,13 @@
         pkg = other.pkg;
         sharedUserId = other.sharedUserId;
         sharedUser = other.sharedUser;
+
+        Set<String> mimeGroupNames = other.mimeGroups != null ? other.mimeGroups.keySet() : null;
+        updateMimeGroups(mimeGroupNames);
     }
 
-    // TODO(b/135203078): Move to constructor
-    @Override
-    public void setAndroidPackage(AndroidPackage pkg) {
-        this.pkg = pkg;
+    @NonNull
+    public PackageStateUnserialized getPkgState() {
+        return pkgState;
     }
 }
diff --git a/services/core/java/com/android/server/pm/PackageSettingBase.java b/services/core/java/com/android/server/pm/PackageSettingBase.java
index 7d95b19..18bc879 100644
--- a/services/core/java/com/android/server/pm/PackageSettingBase.java
+++ b/services/core/java/com/android/server/pm/PackageSettingBase.java
@@ -78,12 +78,12 @@
     /**
      * The primary CPU abi for this package.
      */
-    String primaryCpuAbiString;
+    public String primaryCpuAbiString;
 
     /**
      * The secondary CPU abi for this package.
      */
-    String secondaryCpuAbiString;
+    public String secondaryCpuAbiString;
 
     /**
      * The install time CPU override, if any. This value is written at install time
diff --git a/services/core/java/com/android/server/pm/PackageUsage.java b/services/core/java/com/android/server/pm/PackageUsage.java
index ce2c9e7..ef37a20 100644
--- a/services/core/java/com/android/server/pm/PackageUsage.java
+++ b/services/core/java/com/android/server/pm/PackageUsage.java
@@ -20,11 +20,12 @@
 import static android.os.Process.SYSTEM_UID;
 
 import android.content.pm.PackageManager;
-import android.content.pm.parsing.AndroidPackage;
 import android.os.FileUtils;
 import android.util.AtomicFile;
 import android.util.Log;
 
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+
 import libcore.io.IoUtils;
 
 import java.io.BufferedInputStream;
@@ -36,7 +37,7 @@
 import java.nio.charset.StandardCharsets;
 import java.util.Map;
 
-class PackageUsage extends AbstractStatsBase<Map<String, AndroidPackage>> {
+class PackageUsage extends AbstractStatsBase<Map<String, PackageSetting>> {
 
     private static final String USAGE_FILE_MAGIC = "PACKAGE_USAGE__VERSION_";
     private static final String USAGE_FILE_MAGIC_VERSION_1 = USAGE_FILE_MAGIC + "1";
@@ -52,7 +53,7 @@
     }
 
     @Override
-    protected void writeInternal(Map<String, AndroidPackage> packages) {
+    protected void writeInternal(Map<String, PackageSetting> pkgSettings) {
         AtomicFile file = getFile();
         FileOutputStream f = null;
         try {
@@ -66,13 +67,14 @@
             sb.append('\n');
             out.write(sb.toString().getBytes(StandardCharsets.US_ASCII));
 
-            for (AndroidPackage pkg : packages.values()) {
-                if (pkg.getLatestPackageUseTimeInMills() == 0L) {
+            for (PackageSetting pkgSetting : pkgSettings.values()) {
+                if (pkgSetting.getPkgState().getLatestPackageUseTimeInMills() == 0L) {
                     continue;
                 }
                 sb.setLength(0);
-                sb.append(pkg.getPackageName());
-                for (long usageTimeInMillis : pkg.getLastPackageUsageTimeInMills()) {
+                sb.append(pkgSetting.name);
+                for (long usageTimeInMillis : pkgSetting.getPkgState()
+                        .getLastPackageUsageTimeInMills()) {
                     sb.append(' ');
                     sb.append(usageTimeInMillis);
                 }
@@ -90,7 +92,7 @@
     }
 
     @Override
-    protected void readInternal(Map<String, AndroidPackage> packages) {
+    protected void readInternal(Map<String, PackageSetting> pkgSettings) {
         AtomicFile file = getFile();
         BufferedInputStream in = null;
         try {
@@ -101,9 +103,9 @@
             if (firstLine == null) {
                 // Empty file. Do nothing.
             } else if (USAGE_FILE_MAGIC_VERSION_1.equals(firstLine)) {
-                readVersion1LP(packages, in, sb);
+                readVersion1LP(pkgSettings, in, sb);
             } else {
-                readVersion0LP(packages, in, sb, firstLine);
+                readVersion0LP(pkgSettings, in, sb, firstLine);
             }
         } catch (FileNotFoundException expected) {
             mIsHistoricalPackageUsageAvailable = false;
@@ -114,7 +116,7 @@
         }
     }
 
-    private void readVersion0LP(Map<String, AndroidPackage> packages, InputStream in,
+    private void readVersion0LP(Map<String, PackageSetting> pkgSettings, InputStream in,
             StringBuffer sb, String firstLine)
             throws IOException {
         // Initial version of the file had no version number and stored one
@@ -128,8 +130,8 @@
             }
 
             String packageName = tokens[0];
-            AndroidPackage pkg = packages.get(packageName);
-            if (pkg == null) {
+            PackageSetting pkgSetting = pkgSettings.get(packageName);
+            if (pkgSetting == null) {
                 continue;
             }
 
@@ -137,12 +139,12 @@
             for (int reason = 0;
                     reason < PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT;
                     reason++) {
-                pkg.mutate().setLastPackageUsageTimeInMills(reason, timestamp);
+                pkgSetting.getPkgState().setLastPackageUsageTimeInMills(reason, timestamp);
             }
         }
     }
 
-    private void readVersion1LP(Map<String, AndroidPackage> packages, InputStream in,
+    private void readVersion1LP(Map<String, PackageSetting> pkgSettings, InputStream in,
             StringBuffer sb) throws IOException {
         // Version 1 of the file started with the corresponding version
         // number and then stored a package name and eight timestamps per line.
@@ -154,15 +156,15 @@
             }
 
             String packageName = tokens[0];
-            AndroidPackage pkg = packages.get(packageName);
-            if (pkg == null) {
+            PackageSetting pkgSetting = pkgSettings.get(packageName);
+            if (pkgSetting == null) {
                 continue;
             }
 
             for (int reason = 0;
                     reason < PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT;
                     reason++) {
-                pkg.mutate().setLastPackageUsageTimeInMills(reason,
+                pkgSetting.getPkgState().setLastPackageUsageTimeInMills(reason,
                         parseAsLong(tokens[reason + 1]));
             }
         }
diff --git a/services/core/java/com/android/server/pm/ParallelPackageParser.java b/services/core/java/com/android/server/pm/ParallelPackageParser.java
index 448dad0..21334c0 100644
--- a/services/core/java/com/android/server/pm/ParallelPackageParser.java
+++ b/services/core/java/com/android/server/pm/ParallelPackageParser.java
@@ -19,12 +19,13 @@
 import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
 
 import android.content.pm.PackageParser;
-import android.content.pm.parsing.ParsedPackage;
 import android.os.Process;
 import android.os.Trace;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.ConcurrentUtils;
+import com.android.server.pm.parsing.PackageParser2;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
 
 import java.io.File;
 import java.util.concurrent.ArrayBlockingQueue;
@@ -50,11 +51,11 @@
                 Process.THREAD_PRIORITY_FOREGROUND);
     }
 
-    private final PackageParser mPackageParser;
+    private final PackageParser2 mPackageParser;
 
     private final ExecutorService mExecutorService;
 
-    ParallelPackageParser(PackageParser packageParser, ExecutorService executorService) {
+    ParallelPackageParser(PackageParser2 packageParser, ExecutorService executorService) {
         mPackageParser = packageParser;
         mExecutorService = executorService;
     }
@@ -125,6 +126,6 @@
     @VisibleForTesting
     protected ParsedPackage parsePackage(File scanFile, int parseFlags)
             throws PackageParser.PackageParserException {
-        return mPackageParser.parseParsedPackage(scanFile, parseFlags, true);
+        return mPackageParser.parsePackage(scanFile, parseFlags, true);
     }
 }
diff --git a/services/core/java/com/android/server/pm/PersistentPreferredIntentResolver.java b/services/core/java/com/android/server/pm/PersistentPreferredIntentResolver.java
index ef29cb3..08a87d8 100644
--- a/services/core/java/com/android/server/pm/PersistentPreferredIntentResolver.java
+++ b/services/core/java/com/android/server/pm/PersistentPreferredIntentResolver.java
@@ -16,6 +16,9 @@
 
 package com.android.server.pm;
 
+import android.annotation.NonNull;
+import android.content.IntentFilter;
+
 import com.android.server.IntentResolver;
 
 public class PersistentPreferredIntentResolver
@@ -26,6 +29,11 @@
     }
 
     @Override
+    protected IntentFilter getIntentFilter(@NonNull PersistentPreferredActivity input) {
+        return input;
+    }
+
+    @Override
     protected boolean isPackageForFilter(String packageName, PersistentPreferredActivity filter) {
         return packageName.equals(filter.mComponent.getPackageName());
     }
diff --git a/services/core/java/com/android/server/pm/PreferredIntentResolver.java b/services/core/java/com/android/server/pm/PreferredIntentResolver.java
index bce24d7..a261e29 100644
--- a/services/core/java/com/android/server/pm/PreferredIntentResolver.java
+++ b/services/core/java/com/android/server/pm/PreferredIntentResolver.java
@@ -16,6 +16,9 @@
 
 package com.android.server.pm;
 
+import android.annotation.NonNull;
+import android.content.IntentFilter;
+
 import java.io.PrintWriter;
 
 import com.android.server.IntentResolver;
@@ -37,4 +40,9 @@
             PreferredActivity filter) {
         filter.mPref.dump(out, prefix, filter);
     }
+
+    @Override
+    protected IntentFilter getIntentFilter(@NonNull PreferredActivity input) {
+        return input;
+    }
 }
diff --git a/services/core/java/com/android/server/pm/SELinuxMMAC.java b/services/core/java/com/android/server/pm/SELinuxMMAC.java
index 466f19c..67e1994 100644
--- a/services/core/java/com/android/server/pm/SELinuxMMAC.java
+++ b/services/core/java/com/android/server/pm/SELinuxMMAC.java
@@ -18,15 +18,14 @@
 
 import android.compat.annotation.ChangeId;
 import android.compat.annotation.EnabledAfter;
-import android.content.pm.PackageParser;
 import android.content.pm.PackageParser.SigningDetails;
 import android.content.pm.Signature;
-import android.content.pm.parsing.AndroidPackage;
 import android.os.Environment;
 import android.util.Slog;
 import android.util.Xml;
 
 import com.android.server.compat.PlatformCompat;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import libcore.io.IoUtils;
 
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index fbea595..6c2ace8 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -49,10 +49,12 @@
 import android.content.pm.SuspendDialogInfo;
 import android.content.pm.UserInfo;
 import android.content.pm.VerifierDeviceIdentity;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ComponentParseUtils;
-import android.content.pm.parsing.ComponentParseUtils.ParsedComponent;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermission;
+import android.content.pm.parsing.PackageInfoWithoutStateUtils;
+import android.content.pm.parsing.component.ParsedComponent;
+import android.content.pm.parsing.component.ParsedIntentInfo;
+import android.content.pm.parsing.component.ParsedMainComponent;
+import android.content.pm.parsing.component.ParsedPermission;
+import android.content.pm.parsing.component.ParsedProcess;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Build;
@@ -76,6 +78,7 @@
 import android.util.AtomicFile;
 import android.util.Log;
 import android.util.LogPrinter;
+import android.util.Pair;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
@@ -96,6 +99,9 @@
 import com.android.permission.persistence.RuntimePermissionsState;
 import com.android.server.LocalServices;
 import com.android.server.pm.Installer.InstallerException;
+import com.android.server.pm.parsing.PackageInfoUtils;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
 import com.android.server.pm.permission.BasePermission;
 import com.android.server.pm.permission.PermissionSettings;
 import com.android.server.pm.permission.PermissionsState;
@@ -226,6 +232,8 @@
     @Deprecated
     private static final String TAG_SUSPENDED_LAUNCHER_EXTRAS = "suspended-launcher-extras";
     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";
 
     public static final String ATTR_NAME = "name";
     public static final String ATTR_PACKAGE = "package";
@@ -266,6 +274,7 @@
     private static final String ATTR_VOLUME_UUID = "volumeUuid";
     private static final String ATTR_SDK_VERSION = "sdkVersion";
     private static final String ATTR_DATABASE_VERSION = "databaseVersion";
+    private static final String ATTR_VALUE = "value";
 
     private final Object mLock;
 
@@ -476,10 +485,9 @@
         }
         final PackageSetting dp = mDisabledSysPackages.get(name);
         // always make sure the system package code and resource paths dont change
-        if (dp == null && p.pkg != null && p.pkg.isSystem() && !p.pkg.isUpdatedSystemApp()) {
-            if(p.pkg != null) {
-                p.pkg.mutate().setUpdatedSystemApp(true);
-            }
+        if (dp == null && p.pkg != null && p.pkg.isSystem()
+                && !p.getPkgState().isUpdatedSystemApp()) {
+            p.getPkgState().setUpdatedSystemApp(true);
             final PackageSetting disabled;
             if (replaced) {
                 // a little trick...  when we install the new package, we don't
@@ -503,16 +511,12 @@
             Log.w(PackageManagerService.TAG, "Package " + name + " is not disabled");
             return null;
         }
-        // Reset flag in ApplicationInfo object
-        if(p.pkg != null) {
-            p.pkg.mutate().setUpdatedSystemApp(false);
-        }
+        p.getPkgState().setUpdatedSystemApp(false);
         PackageSetting ret = addPackageLPw(name, p.realName, p.codePath, p.resourcePath,
                 p.legacyNativeLibraryPathString, p.primaryCpuAbiString,
                 p.secondaryCpuAbiString, p.cpuAbiOverrideString,
                 p.appId, p.versionCode, p.pkgFlags, p.pkgPrivateFlags,
-                p.usesStaticLibraries,
-                p.usesStaticLibrariesVersions);
+                p.usesStaticLibraries, p.usesStaticLibrariesVersions, p.mimeGroups);
         mDisabledSysPackages.remove(name);
         return ret;
     }
@@ -529,7 +533,7 @@
             String legacyNativeLibraryPathString, String primaryCpuAbiString,
             String secondaryCpuAbiString, String cpuAbiOverrideString, int uid, long vc, int
             pkgFlags, int pkgPrivateFlags, String[] usesStaticLibraries,
-            long[] usesStaticLibraryNames) {
+            long[] usesStaticLibraryNames, Map<String, ArraySet<String>> mimeGroups) {
         PackageSetting p = mPackages.get(name);
         if (p != null) {
             if (p.appId == uid) {
@@ -542,7 +546,8 @@
         p = new PackageSetting(name, realName, codePath, resourcePath,
                 legacyNativeLibraryPathString, primaryCpuAbiString, secondaryCpuAbiString,
                 cpuAbiOverrideString, vc, pkgFlags, pkgPrivateFlags,
-                0 /*userId*/, usesStaticLibraries, usesStaticLibraryNames);
+                0 /*userId*/, usesStaticLibraries, usesStaticLibraryNames,
+                mimeGroups);
         p.appId = uid;
         if (registerExistingAppIdLPw(uid, p, name)) {
             mPackages.put(name, p);
@@ -605,7 +610,8 @@
             String secondaryCpuAbi, long versionCode, int pkgFlags, int pkgPrivateFlags,
             UserHandle installUser, boolean allowInstall, boolean instantApp,
             boolean virtualPreload, UserManagerService userManager,
-            String[] usesStaticLibraries, long[] usesStaticLibrariesVersions) {
+            String[] usesStaticLibraries, long[] usesStaticLibrariesVersions,
+            Set<String> mimeGroupNames) {
         final PackageSetting pkgSetting;
         if (originalPkg != null) {
             if (PackageManagerService.DEBUG_UPGRADE) Log.v(PackageManagerService.TAG, "Package "
@@ -631,7 +637,7 @@
                     legacyNativeLibraryPath, primaryCpuAbi, secondaryCpuAbi,
                     null /*cpuAbiOverrideString*/, versionCode, pkgFlags, pkgPrivateFlags,
                     0 /*sharedUserId*/, usesStaticLibraries,
-                    usesStaticLibrariesVersions);
+                    usesStaticLibrariesVersions, createMimeGroups(mimeGroupNames));
             pkgSetting.setTimeStamp(codePath.lastModified());
             pkgSetting.sharedUser = sharedUser;
             // If this is not a system app, it starts out stopped.
@@ -704,6 +710,14 @@
         return pkgSetting;
     }
 
+    private static Map<String, ArraySet<String>> createMimeGroups(Set<String> mimeGroupNames) {
+        if (mimeGroupNames == null) {
+            return null;
+        }
+
+        return new KeySetToValueMap<>(mimeGroupNames, new ArraySet<>());
+    }
+
     /**
      * Updates the given package setting using the provided information.
      * <p>
@@ -715,7 +729,8 @@
             @Nullable String legacyNativeLibraryPath, @Nullable String primaryCpuAbi,
             @Nullable String secondaryCpuAbi, int pkgFlags, int pkgPrivateFlags,
             @NonNull UserManagerService userManager,
-            @Nullable String[] usesStaticLibraries, @Nullable long[] usesStaticLibrariesVersions)
+            @Nullable String[] usesStaticLibraries, @Nullable long[] usesStaticLibrariesVersions,
+            @Nullable Set<String> mimeGroupNames)
                     throws PackageManagerException {
         final String pkgName = pkgSetting.name;
         if (pkgSetting.sharedUser != sharedUser) {
@@ -801,6 +816,7 @@
             pkgSetting.usesStaticLibraries = null;
             pkgSetting.usesStaticLibrariesVersions = null;
         }
+        pkgSetting.updateMimeGroups(mimeGroupNames);
     }
 
     /**
@@ -2659,15 +2675,19 @@
 
             StringBuilder sb = new StringBuilder();
             for (final PackageSetting pkg : mPackages.values()) {
-                if (pkg.pkg == null || pkg.pkg.getDataDir() == null) {
+                // TODO(b/135203078): This doesn't handle multiple users
+                final String dataPath = pkg.pkg == null ? null :
+                        PackageInfoWithoutStateUtils.getDataDir(pkg.pkg,
+                                UserHandle.USER_SYSTEM).getAbsolutePath();
+
+                if (pkg.pkg == null || dataPath == null) {
                     if (!"android".equals(pkg.name)) {
                         Slog.w(TAG, "Skipping " + pkg + " due to missing metadata");
                     }
                     continue;
                 }
 
-                final String dataPath = pkg.pkg.getDataDir();
-                final boolean isDebug = (pkg.pkg.getFlags() & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
+                final boolean isDebug = pkg.pkg.isDebuggable();
                 final int[] gids = pkg.getPermissionsState().computeGids(userIds);
 
                 // Avoid any application that has a space in its path.
@@ -2698,7 +2718,7 @@
                 sb.append(isDebug ? " 1 " : " 0 ");
                 sb.append(dataPath);
                 sb.append(" ");
-                sb.append(pkg.pkg.getSeInfo());
+                sb.append(AndroidPackageUtils.getSeInfo(pkg.pkg, pkg));
                 sb.append(" ");
                 if (gids != null && gids.length > 0) {
                     sb.append(gids[0]);
@@ -2855,6 +2875,7 @@
         writeUpgradeKeySetsLPr(serializer, pkg.keySetData);
         writeKeySetAliasesLPr(serializer, pkg.keySetData);
         writeDomainVerificationsLPr(serializer, pkg.verificationInfo);
+        writeMimeGroupLPr(serializer, pkg.mimeGroups);
 
         serializer.endTag(null, "package");
     }
@@ -3139,14 +3160,14 @@
         final PackageManagerInternal pmInternal =
                 LocalServices.getService(PackageManagerInternal.class);
         for (PackageSetting ps : mPackages.values()) {
-            if ((ps.pkgFlags&ApplicationInfo.FLAG_SYSTEM) != 0 && ps.pkg != null
-                    && ps.pkg.getPreferredActivityFilters() != null) {
-                List<ComponentParseUtils.ParsedActivityIntentInfo> intents
+            if ((ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0 && ps.pkg != null
+                    && !ps.pkg.getPreferredActivityFilters().isEmpty()) {
+                List<Pair<String, ParsedIntentInfo>> intents
                         = ps.pkg.getPreferredActivityFilters();
                 for (int i=0; i<intents.size(); i++) {
-                    ComponentParseUtils.ParsedActivityIntentInfo aii = intents.get(i);
-                    applyDefaultPreferredActivityLPw(pmInternal, aii, new ComponentName(
-                                    ps.name, aii.getClassName()), userId);
+                    Pair<String, ParsedIntentInfo> pair = intents.get(i);
+                    applyDefaultPreferredActivityLPw(pmInternal, pair.second, new ComponentName(
+                            ps.name, pair.first), userId);
                 }
             }
         }
@@ -3506,7 +3527,7 @@
         PackageSetting ps = new PackageSetting(name, realName, new File(codePathStr),
                 new File(resourcePathStr), legacyNativeLibraryPathStr, primaryCpuAbiStr,
                 secondaryCpuAbiStr, cpuAbiOverrideStr, versionCode, pkgFlags, pkgPrivateFlags,
-                0 /*sharedUserId*/, null, null);
+                0 /*sharedUserId*/, null, null, null);
         String timeStampStr = parser.getAttributeValue(null, "ft");
         if (timeStampStr != null) {
             try {
@@ -3745,8 +3766,8 @@
                 packageSetting = addPackageLPw(name.intern(), realName, new File(codePathStr),
                         new File(resourcePathStr), legacyNativeLibraryPathStr, primaryCpuAbiString,
                         secondaryCpuAbiString, cpuAbiOverrideString, userId, versionCode, pkgFlags,
-                        pkgPrivateFlags,
-                        null /*usesStaticLibraries*/, null /*usesStaticLibraryVersions*/);
+                        pkgPrivateFlags, null /*usesStaticLibraries*/,
+                        null /*usesStaticLibraryVersions*/, null /*mimeGroups*/);
                 if (PackageManagerService.DEBUG_SETTINGS)
                     Log.i(PackageManagerService.TAG, "Reading package " + name + ": userId="
                             + userId + " pkg=" + packageSetting);
@@ -3764,9 +3785,10 @@
                     packageSetting = new PackageSetting(name.intern(), realName, new File(
                             codePathStr), new File(resourcePathStr), legacyNativeLibraryPathStr,
                             primaryCpuAbiString, secondaryCpuAbiString, cpuAbiOverrideString,
-                            versionCode, pkgFlags, pkgPrivateFlags,
-                            sharedUserId,
-                            null /*usesStaticLibraries*/, null /*usesStaticLibraryVersions*/);
+                            versionCode, pkgFlags, pkgPrivateFlags, sharedUserId,
+                            null /*usesStaticLibraries*/,
+                            null /*usesStaticLibraryVersions*/,
+                            null /*mimeGroups*/);
                     packageSetting.setTimeStamp(timeStamp);
                     packageSetting.firstInstallTime = firstInstallTime;
                     packageSetting.lastUpdateTime = lastUpdateTime;
@@ -3880,6 +3902,8 @@
                             packageSetting.installSource.setInitiatingPackageSignatures(signatures);
                 } else if (tagName.equals(TAG_DOMAIN_VERIFICATION)) {
                     readDomainVerificationLPw(parser, packageSetting);
+                } else if (tagName.equals(TAG_MIME_GROUP)) {
+                    packageSetting.mimeGroups = readMimeGroupLPw(parser, packageSetting.mimeGroups);
                 } else {
                     PackageManagerService.reportSettingsProblem(Log.WARN,
                             "Unknown element under <package>: " + parser.getName());
@@ -3903,6 +3927,67 @@
         }
     }
 
+    private Map<String, ArraySet<String>> readMimeGroupLPw(XmlPullParser parser,
+            Map<String, ArraySet<String>> mimeGroups) throws XmlPullParserException, IOException {
+        String groupName = parser.getAttributeValue(null, ATTR_NAME);
+        if (groupName == null) {
+            XmlUtils.skipCurrentTag(parser);
+            return mimeGroups;
+        }
+
+        if (mimeGroups == null) {
+            mimeGroups = new ArrayMap<>();
+        }
+
+        ArraySet<String> mimeTypes = mimeGroups.get(groupName);
+        if (mimeTypes == null) {
+            mimeTypes = new ArraySet<>();
+            mimeGroups.put(groupName, mimeTypes);
+        }
+        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(TAG_MIME_TYPE)) {
+                String typeName = parser.getAttributeValue(null, ATTR_VALUE);
+                if (typeName != null) {
+                    mimeTypes.add(typeName);
+                }
+            } else {
+                PackageManagerService.reportSettingsProblem(Log.WARN,
+                        "Unknown element under <mime-group>: " + parser.getName());
+                XmlUtils.skipCurrentTag(parser);
+            }
+        }
+
+        return mimeGroups;
+    }
+
+    private void writeMimeGroupLPr(XmlSerializer serializer,
+            Map<String, ArraySet<String>> mimeGroups) throws IOException {
+        if (mimeGroups == null) {
+            return;
+        }
+
+        for (String mimeGroup: mimeGroups.keySet()) {
+            serializer.startTag(null, TAG_MIME_GROUP);
+            serializer.attribute(null, ATTR_NAME, mimeGroup);
+
+            for (String mimeType: mimeGroups.get(mimeGroup)) {
+                serializer.startTag(null, TAG_MIME_TYPE);
+                serializer.attribute(null, ATTR_VALUE, mimeType);
+                serializer.endTag(null, TAG_MIME_TYPE);
+            }
+
+            serializer.endTag(null, TAG_MIME_GROUP);
+        }
+    }
+
     private void readDisabledComponentsLPw(PackageSettingBase packageSetting, XmlPullParser parser,
             int userId) throws IOException, XmlPullParserException {
         int outerDepth = parser.getDepth();
@@ -4050,7 +4135,7 @@
                 final boolean shouldInstall = ps.isSystem() &&
                         (skipPackageWhitelist || installablePackages.contains(ps.name)) &&
                         !ArrayUtils.contains(disallowedPackages, ps.name) &&
-                        !ps.pkg.isHiddenUntilInstalled();
+                        !ps.getPkgState().isHiddenUntilInstalled();
                 // Only system apps are initially installed.
                 ps.setInstalled(shouldInstall, userHandle);
                 if (!shouldInstall) {
@@ -4061,7 +4146,7 @@
                 volumeUuids[i] = ps.volumeUuid;
                 names[i] = ps.name;
                 appIds[i] = ps.appId;
-                seinfos[i] = ps.pkg.getSeInfo();
+                seinfos[i] = AndroidPackageUtils.getSeInfo(ps.pkg, ps);
                 targetSdkVersions[i] = ps.pkg.getTargetSdkVersion();
             }
         }
@@ -4202,7 +4287,7 @@
         return userState.isMatch(componentInfo, flags);
     }
 
-    boolean isEnabledAndMatchLPr(AndroidPackage pkg, ParsedComponent component, int flags,
+    boolean isEnabledAndMatchLPr(AndroidPackage pkg, ParsedMainComponent component, int flags,
             int userId) {
         final PackageSetting ps = mPackages.get(component.getPackageName());
         if (ps == null) return false;
@@ -4393,6 +4478,7 @@
             ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT, "SYSTEM_EXT",
             ApplicationInfo.PRIVATE_FLAG_VIRTUAL_PRELOAD, "VIRTUAL_PRELOAD",
             ApplicationInfo.PRIVATE_FLAG_ODM, "ODM",
+            ApplicationInfo.PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING, "PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING",
     };
 
     void dumpVersionLPr(IndentingPrintWriter pw) {
@@ -4516,54 +4602,60 @@
             pw.print(prefix); pw.print("  apkSigningVersion="); pw.println(apkSigningVersion);
             // TODO(b/135203078): Is there anything to print here with AppInfo removed?
             pw.print(prefix); pw.print("  applicationInfo=");
-            pw.println(pkg.toAppInfoWithoutState().toString());
-            pw.print(prefix); pw.print("  flags="); printFlags(pw, pkg.getFlags(),
-                    FLAG_DUMP_SPEC); pw.println();
-            if (pkg.getPrivateFlags() != 0) {
+            pw.println(pkg.toAppInfoToString());
+            pw.print(prefix); pw.print("  flags=");
+            printFlags(pw, PackageInfoUtils.appInfoFlags(pkg, ps), FLAG_DUMP_SPEC); pw.println();
+            int privateFlags = PackageInfoUtils.appInfoPrivateFlags(pkg, ps);
+            if (privateFlags != 0) {
                 pw.print(prefix); pw.print("  privateFlags="); printFlags(pw,
-                        pkg.getPrivateFlags(), PRIVATE_FLAG_DUMP_SPEC); pw.println();
+                        privateFlags, PRIVATE_FLAG_DUMP_SPEC); pw.println();
             }
-            pw.print(prefix); pw.print("  forceQueryable="); pw.println(ps.pkg.isForceQueryable());
-            if (ps.pkg.getQueriesPackages() != null) {
+            pw.print(prefix); pw.print("  forceQueryable="); pw.print(ps.pkg.isForceQueryable());
+            if (ps.forceQueryableOverride) {
+                pw.print(" (override=true)");
+            }
+            pw.println();
+            if (ps.pkg.getQueriesPackages().isEmpty()) {
                 pw.append(prefix).append("  queriesPackages=").println(ps.pkg.getQueriesPackages());
             }
-            if (ps.pkg.getQueriesIntents() != null) {
+            if (!ps.pkg.getQueriesIntents().isEmpty()) {
                 pw.append(prefix).append("  queriesIntents=").println(ps.pkg.getQueriesIntents());
             }
-            pw.print(prefix); pw.print("  dataDir="); pw.println(ps.pkg.getDataDir());
+            File dataDir = PackageInfoWithoutStateUtils.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.getFlags() & ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS) != 0) {
+            if (pkg.isSupportsSmallScreens()) {
                 if (!first)
                     pw.print(", ");
                 first = false;
                 pw.print("small");
             }
-            if ((pkg.getFlags() & ApplicationInfo.FLAG_SUPPORTS_NORMAL_SCREENS) != 0) {
+            if (pkg.isSupportsNormalScreens()) {
                 if (!first)
                     pw.print(", ");
                 first = false;
                 pw.print("medium");
             }
-            if ((pkg.getFlags() & ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS) != 0) {
+            if (pkg.isSupportsLargeScreens()) {
                 if (!first)
                     pw.print(", ");
                 first = false;
                 pw.print("large");
             }
-            if ((pkg.getFlags() & ApplicationInfo.FLAG_SUPPORTS_XLARGE_SCREENS) != 0) {
+            if (pkg.isSupportsExtraLargeScreens()) {
                 if (!first)
                     pw.print(", ");
                 first = false;
                 pw.print("xlarge");
             }
-            if ((pkg.getFlags() & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) != 0) {
+            if (pkg.isResizeable()) {
                 if (!first)
                     pw.print(", ");
                 first = false;
                 pw.print("resizeable");
             }
-            if ((pkg.getFlags() & ApplicationInfo.FLAG_SUPPORTS_SCREEN_DENSITIES) != 0) {
+            if (pkg.isAnyDensity()) {
                 if (!first)
                     pw.print(", ");
                 first = false;
@@ -4585,18 +4677,17 @@
                 pw.print(" version:"); pw.println(pkg.getStaticSharedLibVersion());
             }
 
-            final List<String> usesLibraries = pkg.getUsesLibraries();
-            if (usesLibraries != null && usesLibraries.size() > 0) {
+            List<String> usesLibraries = pkg.getUsesLibraries();
+            if (usesLibraries.size() > 0) {
                 pw.print(prefix); pw.println("  usesLibraries:");
                 for (int i=0; i< usesLibraries.size(); i++) {
                     pw.print(prefix); pw.print("    "); pw.println(usesLibraries.get(i));
                 }
             }
 
-            final List<String> usesStaticLibraries = pkg.getUsesStaticLibraries();
-            final long[] usesStaticLibrariesVersions = pkg.getUsesStaticLibrariesVersions();
-            if (usesStaticLibraries != null
-                    && usesStaticLibraries.size() > 0) {
+            List<String> usesStaticLibraries = pkg.getUsesStaticLibraries();
+            long[] usesStaticLibrariesVersions = pkg.getUsesStaticLibrariesVersions();
+            if (usesStaticLibraries.size() > 0) {
                 pw.print(prefix); pw.println("  usesStaticLibraries:");
                 for (int i=0; i< usesStaticLibraries.size(); i++) {
                     pw.print(prefix); pw.print("    ");
@@ -4605,9 +4696,8 @@
                 }
             }
 
-            final List<String> usesOptionalLibraries = pkg.getUsesOptionalLibraries();
-            if (usesOptionalLibraries != null
-                    && usesOptionalLibraries.size() > 0) {
+            List<String> usesOptionalLibraries = pkg.getUsesOptionalLibraries();
+            if (usesOptionalLibraries.size() > 0) {
                 pw.print(prefix); pw.println("  usesOptionalLibraries:");
                 for (int i=0; i< usesOptionalLibraries.size(); i++) {
                     pw.print(prefix); pw.print("    ");
@@ -4615,24 +4705,22 @@
                 }
             }
 
-            final String[] usesLibraryFiles = pkg.getUsesLibraryFiles();
-            if (usesLibraryFiles != null
-                    && usesLibraryFiles.length > 0) {
+            List<String> usesLibraryFiles = ps.getPkgState().getUsesLibraryFiles();
+            if (usesLibraryFiles.size() > 0) {
                 pw.print(prefix); pw.println("  usesLibraryFiles:");
-                for (int i=0; i< usesLibraryFiles.length; i++) {
-                    pw.print(prefix); pw.print("    "); pw.println(usesLibraryFiles[i]);
+                for (int i=0; i< usesLibraryFiles.size(); i++) {
+                    pw.print(prefix); pw.print("    "); pw.println(usesLibraryFiles.get(i));
                 }
             }
-            final ArrayMap<String, ComponentParseUtils.ParsedProcess> procs = pkg.getProcesses();
-            if (procs != null) {
+            final Map<String, ParsedProcess> procs = pkg.getProcesses();
+            if (!procs.isEmpty()) {
                 pw.print(prefix); pw.println("  processes:");
-                for (int i = 0; i < procs.size(); i++) {
-                    final ComponentParseUtils.ParsedProcess proc = procs.valueAt(i);
-                    pw.print(prefix); pw.print("    "); pw.println(proc.name);
-                    if (proc.deniedPermissions != null) {
-                        for (int j = 0; j < proc.deniedPermissions.size(); j++) {
+                for (ParsedProcess proc : procs.values()) {
+                    pw.print(prefix); pw.print("    "); pw.println(proc.getName());
+                    if (proc.getDeniedPermissions() != null) {
+                        for (String deniedPermission : proc.getDeniedPermissions()) {
                             pw.print(prefix); pw.print("      deny: ");
-                            pw.println(proc.deniedPermissions.valueAt(j));
+                            pw.println(deniedPermission);
                         }
                     }
                 }
@@ -4667,7 +4755,7 @@
             pw.print(prefix); pw.print("  overlayCategory="); pw.println(pkg.getOverlayCategory());
         }
 
-        if (pkg != null && pkg.getPermissions() != null && pkg.getPermissions().size() > 0) {
+        if (pkg != null && !pkg.getPermissions().isEmpty()) {
             final List<ParsedPermission> perms = pkg.getPermissions();
             pw.print(prefix); pw.println("  declared permissions:");
             for (int i=0; i<perms.size(); i++) {
@@ -4678,14 +4766,14 @@
                 }
                 pw.print(prefix); pw.print("    "); pw.print(perm.getName());
                 pw.print(": prot=");
-                pw.print(PermissionInfo.protectionToString(perm.protectionLevel));
-                if ((perm.flags&PermissionInfo.FLAG_COSTS_MONEY) != 0) {
+                pw.print(PermissionInfo.protectionToString(perm.getProtectionLevel()));
+                if ((perm.getFlags() &PermissionInfo.FLAG_COSTS_MONEY) != 0) {
                     pw.print(", COSTS_MONEY");
                 }
-                if ((perm.flags&PermissionInfo.FLAG_REMOVED) != 0) {
+                if ((perm.getFlags() &PermissionInfo.FLAG_REMOVED) != 0) {
                     pw.print(", HIDDEN");
                 }
-                if ((perm.flags&PermissionInfo.FLAG_INSTALLED) != 0) {
+                if ((perm.getFlags() &PermissionInfo.FLAG_INSTALLED) != 0) {
                     pw.print(", INSTALLED");
                 }
                 pw.println();
@@ -5111,6 +5199,77 @@
         }
     }
 
+    private static class KeySetToValueMap<K, V> implements Map<K, V> {
+        @NonNull
+        private final Set<K> mKeySet;
+        private final V mValue;
+
+        KeySetToValueMap(@NonNull Set<K> keySet, V value) {
+            mKeySet = keySet;
+            mValue = value;
+        }
+
+        @Override
+        public int size() {
+            return mKeySet.size();
+        }
+
+        @Override
+        public boolean isEmpty() {
+            return mKeySet.isEmpty();
+        }
+
+        @Override
+        public boolean containsKey(Object key) {
+            return mKeySet.contains(key);
+        }
+
+        @Override
+        public boolean containsValue(Object value) {
+            return mValue == value;
+        }
+
+        @Override
+        public V get(Object key) {
+            return mValue;
+        }
+
+        @Override
+        public V put(K key, V value) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public V remove(Object key) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public void putAll(Map<? extends K, ? extends V> m) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public void clear() {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public Set<K> keySet() {
+            return mKeySet;
+        }
+
+        @Override
+        public Collection<V> values() {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public Set<Entry<K, V>> entrySet() {
+            throw new UnsupportedOperationException();
+        }
+    }
+
     private final class RuntimePermissionPersistence {
         private static final long WRITE_PERMISSIONS_DELAY_MILLIS = 200;
         private static final long MAX_WRITE_PERMISSIONS_DELAY_MILLIS = 2000;
@@ -5228,9 +5387,7 @@
                         List<RuntimePermissionsState.PermissionState> permissions =
                                 getPermissionsFromPermissionsState(
                                         packageSetting.getPermissionsState(), userId);
-                        if (permissions != null) {
-                            packagePermissions.put(packageName, permissions);
-                        }
+                        packagePermissions.put(packageName, permissions);
                     }
                 }
 
@@ -5243,9 +5400,7 @@
                     List<RuntimePermissionsState.PermissionState> permissions =
                             getPermissionsFromPermissionsState(
                                     sharedUserSetting.getPermissionsState(), userId);
-                    if (permissions != null) {
-                        sharedUserPermissions.put(sharedUserName, permissions);
-                    }
+                    sharedUserPermissions.put(sharedUserName, permissions);
                 }
 
                 runtimePermissions = new RuntimePermissionsState(version, fingerprint,
@@ -5255,15 +5410,11 @@
             mPersistence.write(runtimePermissions, UserHandle.of(userId));
         }
 
-        @Nullable
+        @NonNull
         private List<RuntimePermissionsState.PermissionState> getPermissionsFromPermissionsState(
                 @NonNull PermissionsState permissionsState, @UserIdInt int userId) {
             List<PermissionState> permissionStates = permissionsState.getRuntimePermissionStates(
                     userId);
-            if (permissionStates.isEmpty()) {
-                return null;
-            }
-
             List<RuntimePermissionsState.PermissionState> permissions =
                     new ArrayList<>();
             int permissionStatesSize = permissionStates.size();
@@ -5335,31 +5486,60 @@
             boolean defaultPermissionsGranted = Build.FINGERPRINT.equals(fingerprint);
             mDefaultPermissionsGranted.put(userId, defaultPermissionsGranted);
 
-            for (Map.Entry<String, List<RuntimePermissionsState.PermissionState>> entry
-                    : runtimePermissions.getPackagePermissions().entrySet()) {
-                String packageName = entry.getKey();
-                List<RuntimePermissionsState.PermissionState> permissions = entry.getValue();
+            boolean isUpgradeToR = getInternalVersion().sdkVersion < Build.VERSION_CODES.R;
 
-                PackageSetting packageSetting = mPackages.get(packageName);
-                if (packageSetting == null) {
-                    Slog.w(PackageManagerService.TAG, "Unknown package:" + packageName);
-                    continue;
+            Map<String, List<RuntimePermissionsState.PermissionState>> packagePermissions =
+                    runtimePermissions.getPackagePermissions();
+            int packagesSize = mPackages.size();
+            for (int i = 0; i < packagesSize; i++) {
+                String packageName = mPackages.keyAt(i);
+                PackageSetting packageSetting = mPackages.valueAt(i);
+
+                List<RuntimePermissionsState.PermissionState> permissions =
+                        packagePermissions.get(packageName);
+                if (permissions != null) {
+                    readPermissionsStateLpr(permissions, packageSetting.getPermissionsState(),
+                            userId);
+                } else if (packageSetting.sharedUser == null && !isUpgradeToR) {
+                    Slog.w(TAG, "Missing permission state for package: " + packageName);
+                    generateFallbackPermissionsStateLpr(
+                            packageSetting.pkg.getRequestedPermissions(),
+                            packageSetting.pkg.getTargetSdkVersion(),
+                            packageSetting.getPermissionsState(), userId);
                 }
-                readPermissionsStateLpr(permissions, packageSetting.getPermissionsState(), userId);
             }
 
-            for (Map.Entry<String, List<RuntimePermissionsState.PermissionState>> entry
-                    : runtimePermissions.getSharedUserPermissions().entrySet()) {
-                String sharedUserName = entry.getKey();
-                List<RuntimePermissionsState.PermissionState> permissions = entry.getValue();
+            Map<String, List<RuntimePermissionsState.PermissionState>> sharedUserPermissions =
+                    runtimePermissions.getSharedUserPermissions();
+            int sharedUsersSize = mSharedUsers.size();
+            for (int i = 0; i < sharedUsersSize; i++) {
+                String sharedUserName = mSharedUsers.keyAt(i);
+                SharedUserSetting sharedUserSetting = mSharedUsers.valueAt(i);
 
-                SharedUserSetting sharedUserSetting = mSharedUsers.get(sharedUserName);
-                if (sharedUserSetting == null) {
-                    Slog.w(PackageManagerService.TAG, "Unknown shared user:" + sharedUserName);
-                    continue;
+                List<RuntimePermissionsState.PermissionState> permissions =
+                        sharedUserPermissions.get(sharedUserName);
+                if (permissions != null) {
+                    readPermissionsStateLpr(permissions, sharedUserSetting.getPermissionsState(),
+                            userId);
+                } else if (!isUpgradeToR) {
+                    Slog.w(TAG, "Missing permission state for shared user: " + sharedUserName);
+                    ArraySet<String> requestedPermissions = new ArraySet<>();
+                    int targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
+                    int sharedUserPackagesSize = sharedUserSetting.packages.size();
+                    for (int packagesI = 0; packagesI < sharedUserPackagesSize; packagesI++) {
+                        PackageSetting packageSetting = sharedUserSetting.packages.valueAt(
+                                packagesI);
+                        if (packageSetting == null || packageSetting.pkg == null
+                                || !packageSetting.getInstalled(userId)) {
+                            continue;
+                        }
+                        AndroidPackage pkg = packageSetting.pkg;
+                        requestedPermissions.addAll(pkg.getRequestedPermissions());
+                        targetSdkVersion = Math.min(targetSdkVersion, pkg.getTargetSdkVersion());
+                    }
+                    generateFallbackPermissionsStateLpr(requestedPermissions, targetSdkVersion,
+                            sharedUserSetting.getPermissionsState(), userId);
                 }
-                readPermissionsStateLpr(permissions, sharedUserSetting.getPermissionsState(),
-                        userId);
             }
         }
 
@@ -5390,6 +5570,30 @@
             }
         }
 
+        private void generateFallbackPermissionsStateLpr(
+                @NonNull Collection<String> requestedPermissions, int targetSdkVersion,
+                @NonNull PermissionsState permissionsState, @UserIdInt int userId) {
+            for (String permissionName : requestedPermissions) {
+                BasePermission permission = mPermissions.getPermission(permissionName);
+                if (Objects.equals(permission.getSourcePackageName(), PLATFORM_PACKAGE_NAME)
+                        && permission.isRuntime() && !permission.isRemoved()) {
+                    if (permission.isHardOrSoftRestricted() || permission.isImmutablyRestricted()) {
+                        permissionsState.updatePermissionFlags(permission, userId,
+                                PackageManager.FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT,
+                                PackageManager.FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT);
+                    }
+                    if (targetSdkVersion < Build.VERSION_CODES.M) {
+                        permissionsState.updatePermissionFlags(permission, userId,
+                                PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED
+                                        | PackageManager.FLAG_PERMISSION_REVOKED_COMPAT,
+                                PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED
+                                        | PackageManager.FLAG_PERMISSION_REVOKED_COMPAT);
+                        permissionsState.grantRuntimePermission(permission, userId);
+                    }
+                }
+            }
+        }
+
         @GuardedBy("Settings.this.mLock")
         private void readLegacyStateForUserSyncLPr(int userId) {
             File permissionsFile = getUserRuntimePermissionsFile(userId);
diff --git a/services/core/java/com/android/server/pm/SharedUserSetting.java b/services/core/java/com/android/server/pm/SharedUserSetting.java
index b9bb9e0..6103f558 100644
--- a/services/core/java/com/android/server/pm/SharedUserSetting.java
+++ b/services/core/java/com/android/server/pm/SharedUserSetting.java
@@ -18,19 +18,20 @@
 
 import android.annotation.Nullable;
 import android.content.pm.ApplicationInfo;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ComponentParseUtils;
+import android.content.pm.parsing.component.ParsedProcess;
 import android.service.pm.PackageServiceDumpProto;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import libcore.util.EmptyArray;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Settings data for a particular shared user ID we know about.
@@ -53,7 +54,7 @@
     final PackageSignatures signatures = new PackageSignatures();
     Boolean signaturesChanged;
 
-    ArrayMap<String, ComponentParseUtils.ParsedProcess> processes;
+    ArrayMap<String, ParsedProcess> processes;
 
     SharedUserSetting(String _name, int _pkgFlags, int _pkgPrivateFlags) {
         super(_pkgFlags, _pkgPrivateFlags);
@@ -76,18 +77,18 @@
         proto.end(token);
     }
 
-    void addProcesses(ArrayMap<String, ComponentParseUtils.ParsedProcess> newProcs) {
+    void addProcesses(Map<String, ParsedProcess> newProcs) {
         if (newProcs != null) {
             final int numProcs = newProcs.size();
             if (processes == null) {
                 processes = new ArrayMap<>(numProcs);
             }
-            for (int i = 0; i < numProcs; i++) {
-                ComponentParseUtils.ParsedProcess newProc = newProcs.valueAt(i);
-                ComponentParseUtils.ParsedProcess proc = processes.get(newProc.name);
+            for (String key : newProcs.keySet()) {
+                ParsedProcess newProc = newProcs.get(key);
+                ParsedProcess proc = processes.get(newProc.getName());
                 if (proc == null) {
-                    proc = new ComponentParseUtils.ParsedProcess(newProc);
-                    processes.put(newProc.name, proc);
+                    proc = new ParsedProcess(newProc);
+                    processes.put(newProc.getName(), proc);
                 } else {
                     proc.addStateFrom(newProc);
                 }
@@ -159,19 +160,24 @@
      * restrictive selinux domain.
      */
     public void fixSeInfoLocked() {
-        final List<AndroidPackage> pkgList = getPackages();
-        if (pkgList == null || pkgList.size() == 0) {
+        if (packages == null || packages.size() == 0) {
             return;
         }
-
-        for (AndroidPackage pkg : pkgList) {
-            if (pkg.getTargetSdkVersion() < seInfoTargetSdkVersion) {
-                seInfoTargetSdkVersion = pkg.getTargetSdkVersion();
+        for (PackageSetting ps : packages) {
+            if ((ps == null) || (ps.pkg == null)) {
+                continue;
+            }
+            if (ps.pkg.getTargetSdkVersion() < seInfoTargetSdkVersion) {
+                seInfoTargetSdkVersion = ps.pkg.getTargetSdkVersion();
             }
         }
-        for (AndroidPackage pkg : pkgList) {
-            final boolean isPrivileged = isPrivileged() | pkg.isPrivileged();
-            pkg.mutate().setSeInfo(SELinuxMMAC.getSeInfo(pkg, isPrivileged,
+
+        for (PackageSetting ps : packages) {
+            if ((ps == null) || (ps.pkg == null)) {
+                continue;
+            }
+            final boolean isPrivileged = isPrivileged() | ps.pkg.isPrivileged();
+            ps.getPkgState().setOverrideSeInfo(SELinuxMMAC.getSeInfo(ps.pkg, isPrivileged,
                     seInfoTargetSdkVersion));
         }
     }
@@ -182,7 +188,10 @@
     public void updateProcesses() {
         processes = null;
         for (int i = packages.size() - 1; i >= 0; i--) {
-            addProcesses(packages.valueAt(i).pkg.getProcesses());
+            final AndroidPackage pkg = packages.valueAt(i).pkg;
+            if (pkg != null) {
+                addProcesses(pkg.getProcesses());
+            }
         }
     }
 
@@ -218,9 +227,9 @@
             final int numProcs = sharedUser.processes.size();
             this.processes = new ArrayMap<>(numProcs);
             for (int i = 0; i < numProcs; i++) {
-                ComponentParseUtils.ParsedProcess proc =
-                        new ComponentParseUtils.ParsedProcess(sharedUser.processes.valueAt(i));
-                this.processes.put(proc.name, proc);
+                ParsedProcess proc =
+                        new ParsedProcess(sharedUser.processes.valueAt(i));
+                this.processes.put(proc.getName(), proc);
             }
         } else {
             this.processes = null;
diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java
index d16c074..12f7d5c 100644
--- a/services/core/java/com/android/server/pm/ShortcutService.java
+++ b/services/core/java/com/android/server/pm/ShortcutService.java
@@ -1704,7 +1704,7 @@
             ShortcutInfo.validateIcon(shortcut.getIcon());
         }
 
-        shortcut.replaceFlags(0);
+        shortcut.replaceFlags(shortcut.getFlags() & ShortcutInfo.FLAG_LONG_LIVED);
     }
 
     private void fixUpIncomingShortcutInfo(@NonNull ShortcutInfo shortcut, boolean forUpdate) {
@@ -2758,6 +2758,75 @@
         }
 
         @Override
+        public void cacheShortcuts(int launcherUserId,
+                @NonNull String callingPackage, @NonNull String packageName,
+                @NonNull List<String> shortcutIds, int userId) {
+            updateCachedShortcutsInternal(launcherUserId, callingPackage, packageName, shortcutIds,
+                    userId, /* doCache= */ true);
+        }
+
+        @Override
+        public void uncacheShortcuts(int launcherUserId,
+                @NonNull String callingPackage, @NonNull String packageName,
+                @NonNull List<String> shortcutIds, int userId) {
+            updateCachedShortcutsInternal(launcherUserId, callingPackage, packageName, shortcutIds,
+                    userId, /* doCache= */ false);
+        }
+
+        @Override
+        public List<ShortcutManager.ShareShortcutInfo> getShareTargets(
+                @NonNull String callingPackage, @NonNull IntentFilter intentFilter, int userId) {
+            return ShortcutService.this.getShareTargets(
+                    callingPackage, intentFilter, userId).getList();
+        }
+
+        private void updateCachedShortcutsInternal(int launcherUserId,
+                @NonNull String callingPackage, @NonNull String packageName,
+                @NonNull List<String> shortcutIds, int userId, boolean doCache) {
+            // Calling permission must be checked by LauncherAppsImpl.
+            Preconditions.checkStringNotEmpty(packageName, "packageName");
+            Objects.requireNonNull(shortcutIds, "shortcutIds");
+
+            synchronized (mLock) {
+                throwIfUserLockedL(userId);
+                throwIfUserLockedL(launcherUserId);
+
+                final int idSize = shortcutIds.size();
+                final ShortcutPackage sp = getUserShortcutsLocked(userId)
+                        .getPackageShortcutsIfExists(packageName);
+                if (idSize == 0 || sp == null) {
+                    return;
+                }
+
+                for (int i = 0; i < idSize; i++) {
+                    final String id = Preconditions.checkStringNotEmpty(shortcutIds.get(i));
+                    final ShortcutInfo si = sp.findShortcutById(id);
+                    if (si == null || doCache == si.isCached()) {
+                        continue;
+                    }
+
+                    if (doCache) {
+                        if (si.isDynamic() && si.isLongLived()) {
+                            si.addFlags(ShortcutInfo.FLAG_CACHED);
+                        } else {
+                            Log.w(TAG, "Only dynamic long lived shortcuts can get cached. Ignoring"
+                                    + "shortcut " + si.getId());
+                        }
+                    } else {
+                        if (si.isDynamic()) {
+                            si.clearFlags(ShortcutInfo.FLAG_CACHED);
+                        } else {
+                            sp.deleteLongLivedWithId(id, /*ignoreInvisible=*/ true);
+                        }
+                    }
+                }
+            }
+            packageShortcutsChanged(packageName, userId);
+
+            verifyStates();
+        }
+
+        @Override
         public Intent[] createShortcutIntents(int launcherUserId,
                 @NonNull String callingPackage,
                 @NonNull String packageName, @NonNull String shortcutId, int userId,
diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java
index 8935453..fe99229 100644
--- a/services/core/java/com/android/server/pm/StagingManager.java
+++ b/services/core/java/com/android/server/pm/StagingManager.java
@@ -29,6 +29,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.IntentSender;
+import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageInstaller;
 import android.content.pm.PackageInstaller.SessionInfo;
@@ -39,7 +40,6 @@
 import android.content.pm.PackageParser.SigningDetails;
 import android.content.pm.PackageParser.SigningDetails.SignatureSchemeVersion;
 import android.content.pm.ParceledListSlice;
-import android.content.pm.parsing.AndroidPackage;
 import android.content.rollback.IRollbackManager;
 import android.content.rollback.RollbackInfo;
 import android.content.rollback.RollbackManager;
@@ -57,6 +57,7 @@
 import android.os.UserManagerInternal;
 import android.os.storage.IStorageManager;
 import android.os.storage.StorageManager;
+import android.text.TextUtils;
 import android.util.IntArray;
 import android.util.Slog;
 import android.util.SparseArray;
@@ -67,6 +68,9 @@
 import com.android.internal.content.PackageHelper;
 import com.android.internal.os.BackgroundThread;
 import com.android.server.LocalServices;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
+import com.android.server.rollback.WatchdogRollbackLogger;
 
 import java.io.File;
 import java.io.IOException;
@@ -99,6 +103,10 @@
     @GuardedBy("mStagedSessions")
     private final SparseIntArray mSessionRollbackIds = new SparseIntArray();
 
+    @GuardedBy("mFailedPackageNames")
+    private final List<String> mFailedPackageNames = new ArrayList<>();
+    private String mNativeFailureReason;
+
     StagingManager(PackageInstallerService pi, Context context) {
         mPi = pi;
         mContext = context;
@@ -278,8 +286,10 @@
             throws PackageManagerException {
         final long activeVersion = activePackage.applicationInfo.longVersionCode;
         final long newVersionCode = newPackage.applicationInfo.longVersionCode;
+        boolean isAppDebuggable = (activePackage.applicationInfo.flags
+                & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
         final boolean allowsDowngrade = PackageManagerServiceUtils.isDowngradePermitted(
-                session.params.installFlags, activePackage.applicationInfo.flags);
+                session.params.installFlags, isAppDebuggable);
         if (activeVersion > newVersionCode && !allowsDowngrade) {
             if (!mApexManager.abortStagedSession(session.sessionId)) {
                 Slog.e(TAG, "Failed to abort apex session " + session.sessionId);
@@ -420,11 +430,10 @@
                     + "for snapshotting/restoring user data.");
             return;
         }
-        final String seInfo = pkg.getSeInfo();
 
         int appId = -1;
         long ceDataInode = -1;
-        final PackageSetting ps = (PackageSetting) mPmi.getPackageSetting(packageName);
+        final PackageSetting ps = mPmi.getPackageSetting(packageName);
         if (ps != null) {
             appId = ps.appId;
             ceDataInode = ps.getCeDataInode(UserHandle.USER_SYSTEM);
@@ -432,6 +441,7 @@
             // an update, and hence need to restore data for all installed users.
             final int[] installedUsers = ps.queryInstalledUsers(allUsers, true);
 
+            final String seInfo = AndroidPackageUtils.getSeInfo(pkg, ps);
             try {
                 rm.snapshotAndRestoreUserData(packageName, installedUsers, appId, ceDataInode,
                         seInfo, 0 /*token*/);
@@ -441,6 +451,22 @@
         }
     }
 
+    /**
+     *  Prepares for the logging of apexd reverts by storing the native failure reason if necessary,
+     *  and adding the package name of the session which apexd reverted to the list of reverted
+     *  session package names.
+     *  Logging needs to wait until the ACTION_BOOT_COMPLETED broadcast is sent.
+     */
+    private void prepareForLoggingApexdRevert(@NonNull PackageInstallerSession session,
+            @NonNull String nativeFailureReason) {
+        synchronized (mFailedPackageNames) {
+            mNativeFailureReason = nativeFailureReason;
+            if (session.getPackageName() != null) {
+                mFailedPackageNames.add(session.getPackageName());
+            }
+        }
+    }
+
     private void resumeSession(@NonNull PackageInstallerSession session) {
         Slog.d(TAG, "Resuming session " + session.sessionId);
 
@@ -450,6 +476,12 @@
             // Check with apexservice whether the apex packages have been activated.
             apexSessionInfo = mApexManager.getStagedSessionInfo(session.sessionId);
 
+            // Prepare for logging a native crash during boot, if one occurred.
+            if (apexSessionInfo != null && !TextUtils.isEmpty(
+                    apexSessionInfo.crashingNativeProcess)) {
+                prepareForLoggingApexdRevert(session, apexSessionInfo.crashingNativeProcess);
+            }
+
             if (apexSessionInfo != null && apexSessionInfo.isVerified) {
                 // Session has been previously submitted to apexd, but didn't complete all the
                 // pre-reboot verification, perhaps because the device rebooted in the meantime.
@@ -955,12 +987,23 @@
         }
     }
 
+    private void logFailedApexSessionsIfNecessary() {
+        synchronized (mFailedPackageNames) {
+            if (!mFailedPackageNames.isEmpty()) {
+                WatchdogRollbackLogger.logApexdRevert(mContext,
+                        mFailedPackageNames, mNativeFailureReason);
+            }
+        }
+    }
+
     void systemReady() {
         // Register the receiver of boot completed intent for staging manager.
         mContext.registerReceiver(new BroadcastReceiver() {
             @Override
             public void onReceive(Context ctx, Intent intent) {
                 mPreRebootVerificationHandler.readyToStart();
+                BackgroundThread.getExecutor().execute(
+                        () -> logFailedApexSessionsIfNecessary());
                 ctx.unregisterReceiver(this);
             }
         }, new IntentFilter(Intent.ACTION_BOOT_COMPLETED));
diff --git a/services/core/java/com/android/server/pm/TEST_MAPPING b/services/core/java/com/android/server/pm/TEST_MAPPING
index f5f4009..97f9548 100644
--- a/services/core/java/com/android/server/pm/TEST_MAPPING
+++ b/services/core/java/com/android/server/pm/TEST_MAPPING
@@ -10,6 +10,12 @@
       "name": "CtsCompilationTestCases"
     },
     {
+      "name": "AppEnumerationTests"
+    },
+    {
+      "name": "CtsMatchFlagTestCases"
+    },
+    {
       "name": "FrameworksServicesTests",
       "options": [
         {
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 0cb8f495..df3c83a 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -35,13 +35,16 @@
 import android.app.KeyguardManager;
 import android.app.PendingIntent;
 import android.app.admin.DevicePolicyEventLogger;
+import android.app.admin.DevicePolicyManagerInternal;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.IntentSender;
+import android.content.pm.CrossProfileAppsInternal;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.PackageManagerInternal;
 import android.content.pm.ShortcutServiceInternal;
 import android.content.pm.UserInfo;
 import android.content.pm.UserInfo.UserInfoFlag;
@@ -258,6 +261,10 @@
     /** Installs system packages based on user-type. */
     private final UserSystemPackageInstaller mSystemPackageInstaller;
 
+    private PackageManagerInternal mPmInternal;
+    private CrossProfileAppsInternal mCrossProfileAppsInternal;
+    private DevicePolicyManagerInternal mDevicePolicyManagerInternal;
+
     /**
      * Internal non-parcelable wrapper for UserInfo that is not exposed to other system apps.
      */
@@ -430,7 +437,7 @@
     /**
      * Start an {@link IntentSender} when user is unlocked after disabling quiet mode.
      *
-     * @see {@link #requestQuietModeEnabled(String, boolean, int, IntentSender)}
+     * @see #requestQuietModeEnabled(String, boolean, int, IntentSender, int)
      */
     private class DisableQuietModeUserUnlockedCallback extends IProgressListener.Stub {
         private final IntentSender mTarget;
@@ -462,8 +469,42 @@
     @GuardedBy("mUsersLock")
     private boolean mForceEphemeralUsers;
 
+    /**
+     * The member mUserStates affects the return value of isUserUnlocked.
+     * If any value in mUserStates changes, then the binder cache for
+     * isUserUnlocked must be invalidated.  When adding mutating methods to
+     * WatchedUserStates, be sure to invalidate the cache in the new
+     * methods.
+     */
+    private class WatchedUserStates {
+        final SparseIntArray states;
+        public WatchedUserStates() {
+            states = new SparseIntArray();
+        }
+        public int get(int userId) {
+            return states.get(userId);
+        }
+        public int get(int userId, int fallback) {
+            return states.indexOfKey(userId) >= 0 ? states.get(userId) : fallback;
+        }
+        public void put(int userId, int state) {
+            states.put(userId, state);
+            invalidateIsUserUnlockedCache();
+        }
+        public void delete(int userId) {
+            states.delete(userId);
+            invalidateIsUserUnlockedCache();
+        }
+        @Override
+        public String toString() {
+            return states.toString();
+        }
+        private void invalidateIsUserUnlockedCache() {
+            UserManager.invalidateIsUserUnlockedCache();
+        }
+    }
     @GuardedBy("mUserStates")
-    private final SparseIntArray mUserStates = new SparseIntArray();
+    private final WatchedUserStates mUserStates = new WatchedUserStates();
 
     private static UserManagerService sInstance;
 
@@ -910,6 +951,8 @@
         intent.putExtra(Intent.EXTRA_QUIET_MODE, inQuietMode);
         intent.putExtra(Intent.EXTRA_USER, profileHandle);
         intent.putExtra(Intent.EXTRA_USER_HANDLE, profileHandle.getIdentifier());
+        getDevicePolicyManagerInternal().broadcastIntentToCrossProfileManifestReceiversAsUser(
+                intent, parentHandle, /* requiresPermission= */ true);
         intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
         mContext.sendBroadcastAsUser(intent, parentHandle);
     }
@@ -924,7 +967,16 @@
                     "target should only be specified when we are disabling quiet mode.");
         }
 
-        ensureCanModifyQuietMode(callingPackage, Binder.getCallingUid(), userId, target != null);
+        final boolean dontAskCredential =
+                (flags & UserManager.QUIET_MODE_DISABLE_DONT_ASK_CREDENTIAL) != 0;
+        final boolean onlyIfCredentialNotRequired =
+                (flags & UserManager.QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED) != 0;
+        if (dontAskCredential && onlyIfCredentialNotRequired) {
+            throw new IllegalArgumentException("invalid flags: " + flags);
+        }
+
+        ensureCanModifyQuietMode(
+                callingPackage, Binder.getCallingUid(), userId, target != null, dontAskCredential);
         final long identity = Binder.clearCallingIdentity();
         try {
             if (enableQuietMode) {
@@ -933,11 +985,11 @@
                 return true;
             }
             mLockPatternUtils.tryUnlockWithCachedUnifiedChallenge(userId);
-            boolean needToShowConfirmCredential =
-                    mLockPatternUtils.isSecure(userId)
-                            && !StorageManager.isUserKeyUnlocked(userId);
+            final boolean needToShowConfirmCredential = !dontAskCredential
+                    && mLockPatternUtils.isSecure(userId)
+                    && !StorageManager.isUserKeyUnlocked(userId);
             if (needToShowConfirmCredential) {
-                if ((flags & UserManager.QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED) != 0) {
+                if (onlyIfCredentialNotRequired) {
                     return false;
                 }
                 showConfirmCredentialToDisableQuietMode(userId, target);
@@ -964,7 +1016,7 @@
      * {@link Manifest.permission#MANAGE_USERS}.
      */
     private void ensureCanModifyQuietMode(String callingPackage, int callingUid,
-            @UserIdInt int targetUserId, boolean startIntent) {
+            @UserIdInt int targetUserId, boolean startIntent, boolean dontAskCredential) {
         if (hasManageUsersPermission()) {
             return;
         }
@@ -972,6 +1024,10 @@
             throw new SecurityException("MANAGE_USERS permission is required to start intent "
                     + "after disabling quiet mode.");
         }
+        if (dontAskCredential) {
+            throw new SecurityException("MANAGE_USERS permission is required to disable quiet "
+                    + "mode without credentials.");
+        }
         if (!isSameProfileGroupNoChecks(UserHandle.getUserId(callingUid), targetUserId)) {
             throw new SecurityException("MANAGE_USERS permission is required to modify quiet mode "
                     + "for a different profile group.");
@@ -1901,7 +1957,7 @@
 
     @Override
     public boolean hasBaseUserRestriction(String restrictionKey, @UserIdInt int userId) {
-        checkManageUsersPermission("hasBaseUserRestriction");
+        checkManageOrCreateUsersPermission("hasBaseUserRestriction");
         if (!UserRestrictionsUtils.isValidRestriction(restrictionKey)) {
             return false;
         }
@@ -3811,11 +3867,15 @@
 
     private void sendProfileRemovedBroadcast(int parentUserId, int removedUserId) {
         Intent managedProfileIntent = new Intent(Intent.ACTION_MANAGED_PROFILE_REMOVED);
-        managedProfileIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY |
-                Intent.FLAG_RECEIVER_FOREGROUND);
         managedProfileIntent.putExtra(Intent.EXTRA_USER, new UserHandle(removedUserId));
         managedProfileIntent.putExtra(Intent.EXTRA_USER_HANDLE, removedUserId);
-        mContext.sendBroadcastAsUser(managedProfileIntent, new UserHandle(parentUserId), null);
+        final UserHandle parentHandle = new UserHandle(parentUserId);
+        getDevicePolicyManagerInternal().broadcastIntentToCrossProfileManifestReceiversAsUser(
+                managedProfileIntent, parentHandle, /* requiresPermission= */ false);
+        managedProfileIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
+                | Intent.FLAG_RECEIVER_FOREGROUND);
+        mContext.sendBroadcastAsUser(managedProfileIntent, parentHandle,
+                /* receiverPermission= */null);
     }
 
     @Override
@@ -4801,6 +4861,11 @@
                     || (state == UserState.STATE_RUNNING_UNLOCKED);
         }
 
+        /**
+         * The return values of this method are cached in clients.  If the
+         * logic in this function changes then the cache invalidation code
+         * may need to be revisited.
+         */
         @Override
         public boolean isUserUnlocked(@UserIdInt int userId) {
             int state;
@@ -5056,7 +5121,7 @@
     }
 
     /**
-     * Check if the calling package name matches with the calling UID, throw
+     * Checks if the calling package name matches with the calling UID, throw
      * {@link SecurityException} if not.
      */
     private void verifyCallingPackage(String callingPackage, int callingUid) {
@@ -5066,4 +5131,30 @@
                     + " does not match the calling uid " + callingUid);
         }
     }
+
+    /** Retrieves the internal package manager interface. */
+    private PackageManagerInternal getPackageManagerInternal() {
+        // Don't need to synchonize; worst-case scenario LocalServices will be called twice.
+        if (mPmInternal == null) {
+            mPmInternal = LocalServices.getService(PackageManagerInternal.class);
+        }
+        return mPmInternal;
+    }
+
+    /** Retrieve the internal cross profile apps interface. */
+    private CrossProfileAppsInternal getCrossProfileAppsInternal() {
+        if (mCrossProfileAppsInternal == null) {
+            mCrossProfileAppsInternal = LocalServices.getService(CrossProfileAppsInternal.class);
+        }
+        return mCrossProfileAppsInternal;
+    }
+
+    /** Returns the internal device policy manager interface. */
+    private DevicePolicyManagerInternal getDevicePolicyManagerInternal() {
+        if (mDevicePolicyManagerInternal == null) {
+            mDevicePolicyManagerInternal =
+                    LocalServices.getService(DevicePolicyManagerInternal.class);
+        }
+        return mDevicePolicyManagerInternal;
+    }
 }
diff --git a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java
index 91bd7ae..67b1008 100644
--- a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java
+++ b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java
@@ -783,6 +783,7 @@
                 break;
 
             case android.provider.Settings.System.SCREEN_BRIGHTNESS:
+            case android.provider.Settings.System.SCREEN_BRIGHTNESS_FLOAT:
             case android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE:
                 if (callingUid == Process.SYSTEM_UID) {
                     return false;
diff --git a/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java b/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java
index 77bb48e..d6480d3 100644
--- a/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java
+++ b/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java
@@ -22,7 +22,6 @@
 import android.annotation.UserIdInt;
 import android.content.pm.PackageManagerInternal;
 import android.content.pm.PackageParser;
-import android.content.pm.parsing.AndroidPackage;
 import android.content.res.Resources;
 import android.os.SystemProperties;
 import android.os.UserHandle;
@@ -33,6 +32,7 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.server.LocalServices;
 import com.android.server.SystemConfig;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import java.io.PrintWriter;
 import java.lang.annotation.Retention;
@@ -89,7 +89,7 @@
      * <ul>
      * <li> 0  - disable whitelist (install all system packages; no logging)</li>
      * <li> 1  - enforce (only install system packages if they are whitelisted)</li>
-     * <li> 2  - log (log when a non-whitelisted package is run)</li>
+     * <li> 2  - log (log non-whitelisted packages)</li>
      * <li> 4  - for all users: implicitly whitelist any package not mentioned in the whitelist</li>
      * <li> 8  - for SYSTEM: implicitly whitelist any package not mentioned in the whitelist</li>
      * <li> 16 - ignore OTAs (don't install system packages during OTAs)</li>
@@ -190,13 +190,14 @@
         // Install/uninstall system packages per user.
         for (int userId : mUm.getUserIds()) {
             final Set<String> userWhitelist = getInstallablePackagesForUserId(userId);
-            pmInt.forEachPackage(pkg -> {
-                if (!pkg.isSystem()) {
+            pmInt.forEachPackageSetting(pkgSetting -> {
+                AndroidPackage pkg = pkgSetting.pkg;
+                if (pkg == null || !pkg.isSystem()) {
                     return;
                 }
                 final boolean install =
                         (userWhitelist == null || userWhitelist.contains(pkg.getPackageName()))
-                        && !pkg.isHiddenUntilInstalled();
+                                && !pkgSetting.getPkgState().isHiddenUntilInstalled();
                 if (isConsideredUpgrade && !isFirstBoot && !install) {
                     return; // To be careful, we don’t uninstall apps during OTAs
                 }
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 0caab6d..51e07faf 100644
--- a/services/core/java/com/android/server/pm/dex/ArtManagerService.java
+++ b/services/core/java/com/android/server/pm/dex/ArtManagerService.java
@@ -31,7 +31,7 @@
 import android.content.pm.dex.DexMetadataHelper;
 import android.content.pm.dex.ISnapshotRuntimeProfileCallback;
 import android.content.pm.dex.PackageOptimizationInfo;
-import android.content.pm.parsing.AndroidPackage;
+import android.content.pm.parsing.PackageInfoWithoutStateUtils;
 import android.os.Binder;
 import android.os.Build;
 import android.os.Handler;
@@ -54,6 +54,7 @@
 import com.android.server.pm.Installer;
 import com.android.server.pm.Installer.InstallerException;
 import com.android.server.pm.PackageManagerServiceCompilerMapping;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import dalvik.system.DexFile;
 import dalvik.system.VMRuntime;
@@ -482,8 +483,10 @@
         try {
             final String packageName = pkg.getPackageName();
             final String apkPath = pkg.getBaseCodePath();
-            final String outDexFile = pkg.getDataDir() + "/code_cache/compiled_view.dex";
-            if (pkg.isPrivileged() || pkg.isEmbeddedDexUsed()
+            // TODO(b/143971007): Use a cross-user directory
+            File dataDir = PackageInfoWithoutStateUtils.getDataDir(pkg, UserHandle.myUserId());
+            final String outDexFile = dataDir.getAbsolutePath() + "/code_cache/compiled_view.dex";
+            if (pkg.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
@@ -516,7 +519,7 @@
      */
     private ArrayMap<String, String> getPackageProfileNames(AndroidPackage pkg) {
         ArrayMap<String, String> result = new ArrayMap<>();
-        if ((pkg.getFlags() & ApplicationInfo.FLAG_HAS_CODE) != 0) {
+        if (pkg.isHasCode()) {
             result.put(pkg.getBaseCodePath(), ArtManager.getProfileName(null));
         }
 
diff --git a/services/core/java/com/android/server/pm/dex/DexManager.java b/services/core/java/com/android/server/pm/dex/DexManager.java
index df24c013..117cc5e 100644
--- a/services/core/java/com/android/server/pm/dex/DexManager.java
+++ b/services/core/java/com/android/server/pm/dex/DexManager.java
@@ -41,6 +41,8 @@
 import com.android.server.pm.PackageManagerService;
 import com.android.server.pm.PackageManagerServiceUtils;
 
+import dalvik.system.VMRuntime;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
@@ -136,22 +138,15 @@
      * return as fast as possible.
      *
      * @param loadingAppInfo the package performing the load
-     * @param classLoadersNames the names of the class loaders present in the loading chain. The
-     *    list encodes the class loader chain in the natural order. The first class loader has
-     *    the second one as its parent and so on. The dex files present in the class path of the
-     *    first class loader will be recorded in the usage file.
-     * @param classPaths the class paths corresponding to the class loaders names from
-     *     {@param classLoadersNames}. The the first element corresponds to the first class loader
-     *     and so on. A classpath is represented as a list of dex files separated by
-     *     {@code File.pathSeparator}, or null if the class loader's classpath is not known.
-     *     The dex files found in the first class path will be recorded in the usage file.
+     * @param classLoaderContextMap a map from file paths to dex files that have been loaded to
+     *     the class loader context that was used to load them.
      * @param loaderIsa the ISA of the app loading the dex files
      * @param loaderUserId the user id which runs the code loading the dex files
      */
-    public void notifyDexLoad(ApplicationInfo loadingAppInfo, List<String> classLoadersNames,
-            List<String> classPaths, String loaderIsa, int loaderUserId) {
+    public void notifyDexLoad(ApplicationInfo loadingAppInfo,
+            Map<String, String> classLoaderContextMap, String loaderIsa, int loaderUserId) {
         try {
-            notifyDexLoadInternal(loadingAppInfo, classLoadersNames, classPaths, loaderIsa,
+            notifyDexLoadInternal(loadingAppInfo, classLoaderContextMap, loaderIsa,
                     loaderUserId);
         } catch (Exception e) {
             Slog.w(TAG, "Exception while notifying dex load for package " +
@@ -161,46 +156,23 @@
 
     @VisibleForTesting
     /*package*/ void notifyDexLoadInternal(ApplicationInfo loadingAppInfo,
-            List<String> classLoaderNames, List<String> classPaths, String loaderIsa,
+            Map<String, String> classLoaderContextMap, String loaderIsa,
             int loaderUserId) {
-        if (classLoaderNames.size() != classPaths.size()) {
-            Slog.wtf(TAG, "Bad call to noitfyDexLoad: args have different size");
+        if (classLoaderContextMap == null) {
             return;
         }
-        if (classLoaderNames.isEmpty()) {
+        if (classLoaderContextMap.isEmpty()) {
             Slog.wtf(TAG, "Bad call to notifyDexLoad: class loaders list is empty");
             return;
         }
         if (!PackageManagerServiceUtils.checkISA(loaderIsa)) {
-            Slog.w(TAG, "Loading dex files " + classPaths + " in unsupported ISA: " +
-                    loaderIsa + "?");
+            Slog.w(TAG, "Loading dex files " + classLoaderContextMap.keySet()
+                    + " in unsupported ISA: " + loaderIsa + "?");
             return;
         }
 
-        // The first classpath should never be null because the first classloader
-        // should always be an instance of BaseDexClassLoader.
-        String firstClassPath = classPaths.get(0);
-        if (firstClassPath == null) {
-            return;
-        }
-        // The classpath is represented as a list of dex files separated by File.pathSeparator.
-        String[] dexPathsToRegister = firstClassPath.split(File.pathSeparator);
-
-        // Encode the class loader contexts for the dexPathsToRegister.
-        String[] classLoaderContexts = DexoptUtils.processContextForDexLoad(
-                classLoaderNames, classPaths);
-
-        // A null classLoaderContexts means that there are unsupported class loaders in the
-        // chain.
-        if (classLoaderContexts == null) {
-            if (DEBUG) {
-                Slog.i(TAG, loadingAppInfo.packageName +
-                        " uses unsupported class loader in " + classLoaderNames);
-            }
-        }
-
-        int dexPathIndex = 0;
-        for (String dexPath : dexPathsToRegister) {
+        for (Map.Entry<String, String> mapping : classLoaderContextMap.entrySet()) {
+            String dexPath = mapping.getKey();
             // Find the owning package name.
             DexSearchResult searchResult = getDexPackage(loadingAppInfo, dexPath, loaderUserId);
 
@@ -222,7 +194,6 @@
                     // If the dex file is the primary apk (or a split) and not isUsedByOtherApps
                     // do not record it. This case does not bring any new usable information
                     // and can be safely skipped.
-                    dexPathIndex++;
                     continue;
                 }
 
@@ -232,13 +203,13 @@
                             searchResult.mOwningPackageName, loadingAppInfo.packageName);
                 }
 
-                if (classLoaderContexts != null) {
-
+                String classLoaderContext = mapping.getValue();
+                if (classLoaderContext != null
+                        && VMRuntime.isValidClassLoaderContext(classLoaderContext)) {
                     // Record dex file usage. If the current usage is a new pattern (e.g. new
                     // secondary, or UsedByOtherApps), record will return true and we trigger an
                     // async write to disk to make sure we don't loose the data in case of a reboot.
 
-                    String classLoaderContext = classLoaderContexts[dexPathIndex];
                     if (mPackageDexUsage.record(searchResult.mOwningPackageName,
                             dexPath, loaderUserId, loaderIsa, isUsedByOtherApps, primaryOrSplit,
                             loadingAppInfo.packageName, classLoaderContext)) {
@@ -252,7 +223,6 @@
                     Slog.i(TAG, "Could not find owning package for dex file: " + dexPath);
                 }
             }
-            dexPathIndex++;
         }
     }
 
diff --git a/services/core/java/com/android/server/pm/dex/DexoptUtils.java b/services/core/java/com/android/server/pm/dex/DexoptUtils.java
index 6e6b137..6807388 100644
--- a/services/core/java/com/android/server/pm/dex/DexoptUtils.java
+++ b/services/core/java/com/android/server/pm/dex/DexoptUtils.java
@@ -18,7 +18,7 @@
 
 import android.content.pm.ApplicationInfo;
 import android.content.pm.SharedLibraryInfo;
-import android.content.pm.parsing.AndroidPackage;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 import android.util.Slog;
 import android.util.SparseArray;
 
@@ -77,7 +77,7 @@
         }
 
         String baseApkContextClassLoader = encodeClassLoader(
-                "", pkg.getAppInfoClassLoaderName(), sharedLibrariesContext);
+                "", pkg.getClassLoaderName(), sharedLibrariesContext);
         if (pkg.getSplitCodePaths() == null) {
             // The application has no splits.
             return new String[] {baseApkContextClassLoader};
@@ -101,7 +101,7 @@
 
         SparseArray<int[]> splitDependencies = pkg.getSplitDependencies();
 
-        if (!pkg.requestsIsolatedSplitLoading()
+        if (!pkg.isIsolatedSplitLoading()
                 || splitDependencies == null
                 || splitDependencies.size() == 0) {
             // If the app didn't request for the splits to be loaded in isolation or if it does not
@@ -111,7 +111,7 @@
             for (int i = 1; i < classLoaderContexts.length; i++) {
                 if (pathsWithCode[i]) {
                     classLoaderContexts[i] = encodeClassLoader(
-                            classpath, pkg.getAppInfoClassLoaderName(), sharedLibrariesContext);
+                            classpath, pkg.getClassLoaderName(), sharedLibrariesContext);
                 } else {
                     classLoaderContexts[i] = null;
                 }
diff --git a/services/core/java/com/android/server/pm/dex/PackageDexUsage.java b/services/core/java/com/android/server/pm/dex/PackageDexUsage.java
index e68c238..08763e7 100644
--- a/services/core/java/com/android/server/pm/dex/PackageDexUsage.java
+++ b/services/core/java/com/android/server/pm/dex/PackageDexUsage.java
@@ -83,8 +83,9 @@
             "=UnknownClassLoaderContext=";
 
     // The marker used for unsupported class loader contexts (no longer written, may occur in old
-    // files so discarded on read).
-    private static final String UNSUPPORTED_CLASS_LOADER_CONTEXT =
+    // files so discarded on read). Note: this matches
+    // ClassLoaderContext::kUnsupportedClassLoaderContextEncoding in the runtime.
+    /*package*/ static final String UNSUPPORTED_CLASS_LOADER_CONTEXT =
             "=UnsupportedClassLoaderContext=";
 
     /**
@@ -133,6 +134,9 @@
         if (classLoaderContext == null) {
             throw new IllegalArgumentException("Null classLoaderContext");
         }
+        if (classLoaderContext.equals(UNSUPPORTED_CLASS_LOADER_CONTEXT)) {
+            return false;
+        }
 
         synchronized (mPackageUseInfoMap) {
             PackageUseInfo packageUseInfo = mPackageUseInfoMap.get(owningPackageName);
@@ -843,10 +847,11 @@
             boolean updateLoadingPackages = mLoadingPackages.addAll(dexUseInfo.mLoadingPackages);
 
             String oldClassLoaderContext = mClassLoaderContext;
-            if (UNKNOWN_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext)) {
+            if (isUnknownOrUnsupportedContext(mClassLoaderContext)) {
                 // Can happen if we read a previous version.
                 mClassLoaderContext = dexUseInfo.mClassLoaderContext;
-            } else if (!Objects.equals(mClassLoaderContext, dexUseInfo.mClassLoaderContext)) {
+            } else if (!isUnknownOrUnsupportedContext(dexUseInfo.mClassLoaderContext)
+                        && !Objects.equals(mClassLoaderContext, dexUseInfo.mClassLoaderContext)) {
                 // We detected a context change.
                 mClassLoaderContext = VARIABLE_CLASS_LOADER_CONTEXT;
             }
@@ -857,6 +862,13 @@
                     || !Objects.equals(oldClassLoaderContext, mClassLoaderContext);
         }
 
+        private static boolean isUnknownOrUnsupportedContext(String context) {
+            // TODO: Merge UNKNOWN_CLASS_LOADER_CONTEXT & UNSUPPORTED_CLASS_LOADER_CONTEXT cases
+            // into UNSUPPORTED_CLASS_LOADER_CONTEXT.
+            return UNKNOWN_CLASS_LOADER_CONTEXT.equals(context)
+                    || UNSUPPORTED_CLASS_LOADER_CONTEXT.equals(context);
+        }
+
         public boolean isUsedByOtherApps() {
             return mIsUsedByOtherApps;
         }
@@ -878,7 +890,7 @@
         public boolean isUnknownClassLoaderContext() {
             // The class loader context may be unknown if we loaded the data from a previous version
             // which didn't save the context.
-            return UNKNOWN_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext);
+            return isUnknownOrUnsupportedContext(mClassLoaderContext);
         }
 
         public boolean isVariableClassLoaderContext() {
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 b7443f3..5506a52 100644
--- a/services/core/java/com/android/server/pm/dex/ViewCompiler.java
+++ b/services/core/java/com/android/server/pm/dex/ViewCompiler.java
@@ -16,12 +16,16 @@
 
 package com.android.server.pm.dex;
 
-import android.content.pm.parsing.AndroidPackage;
+import android.content.pm.parsing.PackageInfoWithoutStateUtils;
 import android.os.Binder;
+import android.os.UserHandle;
 import android.util.Log;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.server.pm.Installer;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+
+import java.io.File;
 
 public class ViewCompiler {
     private final Object mInstallLock;
@@ -37,7 +41,9 @@
         try {
             final String packageName = pkg.getPackageName();
             final String apkPath = pkg.getBaseCodePath();
-            final String outDexFile = pkg.getDataDir() + "/code_cache/compiled_view.dex";
+            // TODO(b/143971007): Use a cross-user directory
+            File dataDir = PackageInfoWithoutStateUtils.getDataDir(pkg, UserHandle.myUserId());
+            final String outDexFile = dataDir.getAbsolutePath() + "/code_cache/compiled_view.dex";
             Log.i("PackageManager", "Compiling layouts in " + packageName + " (" + apkPath +
                 ") to " + outDexFile);
             long callingId = Binder.clearCallingIdentity();
diff --git a/services/core/java/com/android/server/pm/parsing/PackageCacher.java b/services/core/java/com/android/server/pm/parsing/PackageCacher.java
new file mode 100644
index 0000000..e5e1b0b
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/PackageCacher.java
@@ -0,0 +1,200 @@
+/*
+ * 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.parsing;
+
+import android.annotation.NonNull;
+import android.content.pm.PackageParserCacheHelper;
+import android.os.Parcel;
+import android.system.ErrnoException;
+import android.system.Os;
+import android.system.OsConstants;
+import android.system.StructStat;
+import android.util.Slog;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import libcore.io.IoUtils;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class PackageCacher {
+
+    private static final String TAG = "PackageCacher";
+
+    /**
+     * Total number of packages that were read from the cache.  We use it only for logging.
+     */
+    public static final AtomicInteger sCachedPackageReadCount = new AtomicInteger();
+
+    @NonNull
+    private File mCacheDir;
+
+    public PackageCacher(@NonNull File cacheDir) {
+        this.mCacheDir = cacheDir;
+    }
+
+    /**
+     * Returns the cache key for a specified {@code packageFile} and {@code flags}.
+     */
+    private String getCacheKey(File packageFile, int flags) {
+        StringBuilder sb = new StringBuilder(packageFile.getName());
+        sb.append('-');
+        sb.append(flags);
+
+        return sb.toString();
+    }
+
+    @VisibleForTesting
+    protected ParsedPackage fromCacheEntry(byte[] bytes) {
+        return fromCacheEntryStatic(bytes);
+    }
+
+    /** static version of {@link #fromCacheEntry} for unit tests. */
+    @VisibleForTesting
+    public static ParsedPackage fromCacheEntryStatic(byte[] bytes) {
+        final Parcel p = Parcel.obtain();
+        p.unmarshall(bytes, 0, bytes.length);
+        p.setDataPosition(0);
+
+        final PackageParserCacheHelper.ReadHelper helper = new PackageParserCacheHelper.ReadHelper(p);
+        helper.startAndInstall();
+
+        // TODO(b/135203078): Hide PackageImpl constructor?
+        ParsedPackage pkg = new PackageImpl(p);
+
+        p.recycle();
+
+        sCachedPackageReadCount.incrementAndGet();
+
+        return pkg;
+    }
+
+    @VisibleForTesting
+    protected byte[] toCacheEntry(ParsedPackage pkg) {
+        return toCacheEntryStatic(pkg);
+
+    }
+
+    /** static version of {@link #toCacheEntry} for unit tests. */
+    @VisibleForTesting
+    public static byte[] toCacheEntryStatic(ParsedPackage pkg) {
+        final Parcel p = Parcel.obtain();
+        final PackageParserCacheHelper.WriteHelper helper = new PackageParserCacheHelper.WriteHelper(p);
+
+        pkg.writeToParcel(p, 0 /* flags */);
+
+        helper.finishAndUninstall();
+
+        byte[] serialized = p.marshall();
+        p.recycle();
+
+        return serialized;
+    }
+
+    /**
+     * Given a {@code packageFile} and a {@code cacheFile} returns whether the
+     * cache file is up to date based on the mod-time of both files.
+     */
+    private static boolean isCacheUpToDate(File packageFile, File cacheFile) {
+        try {
+            // NOTE: We don't use the File.lastModified API because it has the very
+            // non-ideal failure mode of returning 0 with no excepions thrown.
+            // The nio2 Files API is a little better but is considerably more expensive.
+            final StructStat pkg = Os.stat(packageFile.getAbsolutePath());
+            final StructStat cache = Os.stat(cacheFile.getAbsolutePath());
+            return pkg.st_mtime < cache.st_mtime;
+        } catch (ErrnoException ee) {
+            // The most common reason why stat fails is that a given cache file doesn't
+            // exist. We ignore that here. It's easy to reason that it's safe to say the
+            // cache isn't up to date if we see any sort of exception here.
+            //
+            // (1) Exception while stating the package file : This should never happen,
+            // and if it does, we do a full package parse (which is likely to throw the
+            // same exception).
+            // (2) Exception while stating the cache file : If the file doesn't exist, the
+            // cache is obviously out of date. If the file *does* exist, we can't read it.
+            // We will attempt to delete and recreate it after parsing the package.
+            if (ee.errno != OsConstants.ENOENT) {
+                Slog.w("Error while stating package cache : ", ee);
+            }
+
+            return false;
+        }
+    }
+
+    /**
+     * Returns the cached parse result for {@code packageFile} for parse flags {@code flags},
+     * or {@code null} if no cached result exists.
+     */
+    public ParsedPackage getCachedResult(File packageFile, int flags) {
+        final String cacheKey = getCacheKey(packageFile, flags);
+        final File cacheFile = new File(mCacheDir, cacheKey);
+
+        try {
+            // If the cache is not up to date, return null.
+            if (!isCacheUpToDate(packageFile, cacheFile)) {
+                return null;
+            }
+
+            final byte[] bytes = IoUtils.readFileAsByteArray(cacheFile.getAbsolutePath());
+            return fromCacheEntry(bytes);
+        } catch (Throwable e) {
+            Slog.w(TAG, "Error reading package cache: ", e);
+
+            // If something went wrong while reading the cache entry, delete the cache file
+            // so that we regenerate it the next time.
+            cacheFile.delete();
+            return null;
+        }
+    }
+
+    /**
+     * Caches the parse result for {@code packageFile} with flags {@code flags}.
+     */
+    public void cacheResult(File packageFile, int flags, ParsedPackage parsed) {
+        try {
+            final String cacheKey = getCacheKey(packageFile, flags);
+            final File cacheFile = new File(mCacheDir, cacheKey);
+
+            if (cacheFile.exists()) {
+                if (!cacheFile.delete()) {
+                    Slog.e(TAG, "Unable to delete cache file: " + cacheFile);
+                }
+            }
+
+            final byte[] cacheEntry = toCacheEntry(parsed);
+
+            if (cacheEntry == null) {
+                return;
+            }
+
+            try (FileOutputStream fos = new FileOutputStream(cacheFile)) {
+                fos.write(cacheEntry);
+            } catch (IOException ioe) {
+                Slog.w(TAG, "Error writing cache entry.", ioe);
+                cacheFile.delete();
+            }
+        } catch (Throwable e) {
+            Slog.w(TAG, "Error saving package cache.", e);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
new file mode 100644
index 0000000..23bdf5f
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
@@ -0,0 +1,483 @@
+/*
+ * 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.parsing;
+
+import android.annotation.CheckResult;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.apex.ApexInfo;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ComponentInfo;
+import android.content.pm.InstrumentationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageItemInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageUserState;
+import android.content.pm.PermissionGroupInfo;
+import android.content.pm.PermissionInfo;
+import android.content.pm.ProcessInfo;
+import android.content.pm.ProviderInfo;
+import android.content.pm.ServiceInfo;
+import android.content.pm.SharedLibraryInfo;
+import android.content.pm.parsing.PackageInfoWithoutStateUtils;
+import android.content.pm.parsing.component.ComponentParseUtils;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedComponent;
+import android.content.pm.parsing.component.ParsedInstrumentation;
+import android.content.pm.parsing.component.ParsedMainComponent;
+import android.content.pm.parsing.component.ParsedPermission;
+import android.content.pm.parsing.component.ParsedPermissionGroup;
+import android.content.pm.parsing.component.ParsedProcess;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedService;
+import android.os.UserHandle;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.Pair;
+
+import com.android.internal.util.ArrayUtils;
+import com.android.server.pm.PackageSetting;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
+import com.android.server.pm.pkg.PackageStateUnserialized;
+
+import libcore.util.EmptyArray;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+
+/**
+ * Methods that use a {@link PackageSetting} use it to override information provided from the raw
+ * package, or to provide information that would otherwise be missing. Null can be passed if none
+ * of the state values should be applied.
+ *
+ * @hide
+ **/
+public class PackageInfoUtils {
+
+    /**
+     * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage.
+     */
+    @Nullable
+    public static PackageInfo generate(AndroidPackage pkg, int[] gids,
+            @PackageManager.PackageInfoFlags int flags, long firstInstallTime, long lastUpdateTime,
+            Set<String> grantedPermissions, PackageUserState state, int userId,
+            @Nullable PackageSetting pkgSetting) {
+        return generateWithComponents(pkg, gids, flags, firstInstallTime, lastUpdateTime,
+                grantedPermissions, state, userId, null, pkgSetting);
+    }
+
+    /**
+     * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage.
+     */
+    @Nullable
+    public static PackageInfo generate(AndroidPackage pkg, ApexInfo apexInfo, int flags,
+            @Nullable PackageSetting pkgSetting) {
+        return generateWithComponents(pkg, EmptyArray.INT, flags, 0, 0, Collections.emptySet(),
+                new PackageUserState(), UserHandle.getCallingUserId(), apexInfo, pkgSetting);
+    }
+
+    /**
+     * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage.
+     */
+    private static PackageInfo generateWithComponents(AndroidPackage pkg, int[] gids,
+            @PackageManager.PackageInfoFlags int flags, long firstInstallTime, long lastUpdateTime,
+            Set<String> grantedPermissions, PackageUserState state, int userId,
+            @Nullable ApexInfo apexInfo, @Nullable PackageSetting pkgSetting) {
+        ApplicationInfo applicationInfo = generateApplicationInfo(pkg, flags, state, userId,
+                pkgSetting);
+        if (applicationInfo == null) {
+            return null;
+        }
+
+        PackageInfo info = PackageInfoWithoutStateUtils.generateWithoutComponents(pkg, gids, flags,
+                firstInstallTime, lastUpdateTime, grantedPermissions, state, userId, apexInfo,
+                applicationInfo);
+        if (info == null) {
+            return null;
+        }
+
+        info.isStub = pkg.isStub();
+        info.coreApp = pkg.isCoreApp();
+
+        if ((flags & PackageManager.GET_ACTIVITIES) != 0) {
+            final int N = pkg.getActivities().size();
+            if (N > 0) {
+                int num = 0;
+                final ActivityInfo[] res = new ActivityInfo[N];
+                for (int i = 0; i < N; i++) {
+                    final ParsedActivity a = pkg.getActivities().get(i);
+                    if (ComponentParseUtils.isMatch(state, pkg.isSystem(), pkg.isEnabled(), a,
+                            flags)) {
+                        if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(
+                                a.getName())) {
+                            continue;
+                        }
+                        res[num++] = generateActivityInfo(pkg, a, flags, state,
+                                applicationInfo, userId, pkgSetting);
+                    }
+                }
+                info.activities = ArrayUtils.trimToSize(res, num);
+            }
+        }
+        if ((flags & PackageManager.GET_RECEIVERS) != 0) {
+            final int size = pkg.getReceivers().size();
+            if (size > 0) {
+                int num = 0;
+                final ActivityInfo[] res = new ActivityInfo[size];
+                for (int i = 0; i < size; i++) {
+                    final ParsedActivity a = pkg.getReceivers().get(i);
+                    if (ComponentParseUtils.isMatch(state, pkg.isSystem(), pkg.isEnabled(), a,
+                            flags)) {
+                        res[num++] = generateActivityInfo(pkg, a, flags, state, applicationInfo,
+                                userId, pkgSetting);
+                    }
+                }
+                info.receivers = ArrayUtils.trimToSize(res, num);
+            }
+        }
+        if ((flags & PackageManager.GET_SERVICES) != 0) {
+            final int size = pkg.getServices().size();
+            if (size > 0) {
+                int num = 0;
+                final ServiceInfo[] res = new ServiceInfo[size];
+                for (int i = 0; i < size; i++) {
+                    final ParsedService s = pkg.getServices().get(i);
+                    if (ComponentParseUtils.isMatch(state, pkg.isSystem(), pkg.isEnabled(), s,
+                            flags)) {
+                        res[num++] = generateServiceInfo(pkg, s, flags, state, applicationInfo,
+                                userId, pkgSetting);
+                    }
+                }
+                info.services = ArrayUtils.trimToSize(res, num);
+            }
+        }
+        if ((flags & PackageManager.GET_PROVIDERS) != 0) {
+            final int size = pkg.getProviders().size();
+            if (size > 0) {
+                int num = 0;
+                final ProviderInfo[] res = new ProviderInfo[size];
+                for (int i = 0; i < size; i++) {
+                    final ParsedProvider pr = pkg.getProviders()
+                            .get(i);
+                    if (ComponentParseUtils.isMatch(state, pkg.isSystem(), pkg.isEnabled(), pr,
+                            flags)) {
+                        res[num++] = generateProviderInfo(pkg, pr, flags, state, applicationInfo,
+                                userId, pkgSetting);
+                    }
+                }
+                info.providers = ArrayUtils.trimToSize(res, num);
+            }
+        }
+        if ((flags & PackageManager.GET_INSTRUMENTATION) != 0) {
+            int N = pkg.getInstrumentations().size();
+            if (N > 0) {
+                info.instrumentation = new InstrumentationInfo[N];
+                for (int i = 0; i < N; i++) {
+                    info.instrumentation[i] = generateInstrumentationInfo(
+                            pkg.getInstrumentations().get(i), pkg, flags, userId, pkgSetting);
+                }
+            }
+        }
+
+        return info;
+    }
+
+    /**
+     * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage.
+     */
+    @Nullable
+    public static ApplicationInfo generateApplicationInfo(AndroidPackage pkg,
+            @PackageManager.ApplicationInfoFlags int flags, PackageUserState state, int userId,
+            @Nullable PackageSetting pkgSetting) {
+        // TODO(b/135203078): Consider cases where we don't have a PkgSetting
+        if (pkg == null) {
+            return null;
+        }
+
+        if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)
+                || !AndroidPackageUtils.isMatchForSystemOnly(pkg, flags)) {
+            return null;
+        }
+
+        ApplicationInfo info = PackageInfoWithoutStateUtils.generateApplicationInfo(pkg, flags,
+                state, userId);
+        if (info == null) {
+            return null;
+        }
+
+        if (pkgSetting != null) {
+            // TODO(b/135203078): Remove PackageParser1/toAppInfoWithoutState and clean all this up
+            PackageStateUnserialized pkgState = pkgSetting.getPkgState();
+            info.hiddenUntilInstalled = pkgState.isHiddenUntilInstalled();
+            List<String> usesLibraryFiles = pkgState.getUsesLibraryFiles();
+            List<SharedLibraryInfo> usesLibraryInfos = pkgState.getUsesLibraryInfos();
+            info.sharedLibraryFiles = usesLibraryFiles.isEmpty()
+                    ? null : usesLibraryFiles.toArray(new String[0]);
+            info.sharedLibraryInfos = usesLibraryInfos.isEmpty() ? null : usesLibraryInfos;
+        }
+
+        info.flags |= appInfoFlags(pkg, pkgSetting);
+        info.privateFlags |= appInfoPrivateFlags(pkg, pkgSetting);
+        return info;
+    }
+
+    /**
+     * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage.
+     */
+    @Nullable
+    public static ActivityInfo generateActivityInfo(AndroidPackage pkg, ParsedActivity a,
+            @PackageManager.ComponentInfoFlags int flags, PackageUserState state, int userId,
+            @Nullable PackageSetting pkgSetting) {
+        return generateActivityInfo(pkg, a, flags, state, null, userId, pkgSetting);
+    }
+
+    /**
+     * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage.
+     */
+    @Nullable
+    private static ActivityInfo generateActivityInfo(AndroidPackage pkg, ParsedActivity a,
+            @PackageManager.ComponentInfoFlags int flags, PackageUserState state,
+            @Nullable ApplicationInfo applicationInfo, int userId,
+            @Nullable PackageSetting pkgSetting) {
+        if (a == null) return null;
+        if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) {
+            return null;
+        }
+        if (applicationInfo == null) {
+            applicationInfo = generateApplicationInfo(pkg, flags, state, userId, pkgSetting);
+        }
+        ActivityInfo info = PackageInfoWithoutStateUtils.generateActivityInfo(pkg, a, flags, state,
+                applicationInfo, userId);
+        if (info == null) {
+            return null;
+        }
+
+        assignSharedFieldsForComponentInfo(info, a, pkgSetting);
+        return info;
+    }
+
+    /**
+     * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage.
+     */
+    @Nullable
+    public static ServiceInfo generateServiceInfo(AndroidPackage pkg, ParsedService s,
+            @PackageManager.ComponentInfoFlags int flags, PackageUserState state, int userId,
+            @Nullable PackageSetting pkgSetting) {
+        return generateServiceInfo(pkg, s, flags, state, null, userId, pkgSetting);
+    }
+
+    /**
+     * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage.
+     */
+    @Nullable
+    private static ServiceInfo generateServiceInfo(AndroidPackage pkg, ParsedService s,
+            @PackageManager.ComponentInfoFlags int flags, PackageUserState state,
+            @Nullable ApplicationInfo applicationInfo, int userId,
+            @Nullable PackageSetting pkgSetting) {
+        if (s == null) return null;
+        if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) {
+            return null;
+        }
+        if (applicationInfo == null) {
+            applicationInfo = generateApplicationInfo(pkg, flags, state, userId, pkgSetting);
+        }
+        ServiceInfo info = PackageInfoWithoutStateUtils.generateServiceInfo(pkg, s, flags, state,
+                applicationInfo, userId);
+        if (info == null) {
+            return null;
+        }
+
+        assignSharedFieldsForComponentInfo(info, s, pkgSetting);
+        return info;
+    }
+
+    /**
+     * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage.
+     */
+    @Nullable
+    public static ProviderInfo generateProviderInfo(AndroidPackage pkg, ParsedProvider p,
+            @PackageManager.ComponentInfoFlags int flags, PackageUserState state, int userId,
+            @Nullable PackageSetting pkgSetting) {
+        return generateProviderInfo(pkg, p, flags, state, null, userId, pkgSetting);
+    }
+
+    /**
+     * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage.
+     */
+    @Nullable
+    private static ProviderInfo generateProviderInfo(AndroidPackage pkg, ParsedProvider p,
+            @PackageManager.ComponentInfoFlags int flags, PackageUserState state,
+            @Nullable ApplicationInfo applicationInfo, int userId,
+            @Nullable PackageSetting pkgSetting) {
+        if (p == null) return null;
+        if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) {
+            return null;
+        }
+        if (applicationInfo == null) {
+            applicationInfo = generateApplicationInfo(pkg, flags, state, userId, pkgSetting);
+        }
+        ProviderInfo info = PackageInfoWithoutStateUtils.generateProviderInfo(pkg, p, flags, state,
+                applicationInfo, userId);
+        if (info == null) {
+            return null;
+        }
+
+        assignSharedFieldsForComponentInfo(info, p, pkgSetting);
+        return info;
+    }
+
+    /**
+     * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage.
+     */
+    @Nullable
+    public static InstrumentationInfo generateInstrumentationInfo(ParsedInstrumentation i,
+            AndroidPackage pkg, @PackageManager.ComponentInfoFlags int flags, int userId,
+            @Nullable PackageSetting pkgSetting) {
+        if (i == null) return null;
+
+        InstrumentationInfo info =
+                PackageInfoWithoutStateUtils.generateInstrumentationInfo(i, pkg, flags, userId);
+        if (info == null) {
+            return null;
+        }
+
+        // TODO(b/135203078): Add setting related state
+        info.primaryCpuAbi = AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting);
+        info.secondaryCpuAbi = AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting);
+        info.nativeLibraryDir = pkg.getNativeLibraryDir();
+        info.secondaryNativeLibraryDir = pkg.getSecondaryNativeLibraryDir();
+
+        assignStateFieldsForPackageItemInfo(info, i, pkgSetting);
+
+        return info;
+    }
+
+    // TODO(b/135203078): Determine if permission methods need to pass in a non-null PackageSetting
+    //  os that checkUseInstalledOrHidden filter can apply
+    @Nullable
+    public static PermissionInfo generatePermissionInfo(ParsedPermission p,
+            @PackageManager.ComponentInfoFlags int flags) {
+        // TODO(b/135203078): Remove null checks and make all usages @NonNull
+        if (p == null) return null;
+
+        // For now, permissions don't have state-adjustable fields; return directly
+        return PackageInfoWithoutStateUtils.generatePermissionInfo(p, flags);
+    }
+
+    @Nullable
+    public static PermissionGroupInfo generatePermissionGroupInfo(ParsedPermissionGroup pg,
+            @PackageManager.ComponentInfoFlags int flags) {
+        if (pg == null) return null;
+
+        // For now, permissions don't have state-adjustable fields; return directly
+        return PackageInfoWithoutStateUtils.generatePermissionGroupInfo(pg, flags);
+    }
+
+    @Nullable
+    public static ArrayMap<String, ProcessInfo> generateProcessInfo(
+            Map<String, ParsedProcess> procs, @PackageManager.ComponentInfoFlags int flags) {
+        if (procs == null) {
+            return null;
+        }
+
+        final int numProcs = procs.size();
+        ArrayMap<String, ProcessInfo> retProcs = new ArrayMap<>(numProcs);
+        for (String key : procs.keySet()) {
+            ParsedProcess proc = procs.get(key);
+            retProcs.put(proc.getName(), new ProcessInfo(proc.getName(),
+                    new ArraySet<>(proc.getDeniedPermissions())));
+        }
+        return retProcs;
+    }
+
+    /**
+     * Returns true if the package is installed and not hidden, or if the caller
+     * explicitly wanted all uninstalled and hidden packages as well.
+     */
+    private static boolean checkUseInstalledOrHidden(AndroidPackage pkg,
+            PackageSetting pkgSetting, PackageUserState state,
+            @PackageManager.PackageInfoFlags int flags) {
+        // Returns false if the package is hidden system app until installed.
+        if ((flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) == 0
+                && !state.installed
+                && pkgSetting != null
+                && pkgSetting.getPkgState().isHiddenUntilInstalled()) {
+            return false;
+        }
+
+        // If available for the target user, or trying to match uninstalled packages and it's
+        // a system app.
+        return state.isAvailable(flags)
+                || (pkg.isSystem()
+                && ((flags & PackageManager.MATCH_KNOWN_PACKAGES) != 0
+                || (flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) != 0));
+    }
+
+    private static void assignSharedFieldsForComponentInfo(@NonNull ComponentInfo componentInfo,
+            @NonNull ParsedMainComponent mainComponent, @Nullable PackageSetting pkgSetting) {
+        assignStateFieldsForPackageItemInfo(componentInfo, mainComponent, pkgSetting);
+        componentInfo.descriptionRes = mainComponent.getDescriptionRes();
+        componentInfo.directBootAware = mainComponent.isDirectBootAware();
+        componentInfo.enabled = mainComponent.isEnabled();
+        componentInfo.splitName = mainComponent.getSplitName();
+    }
+
+    private static void assignStateFieldsForPackageItemInfo(
+            @NonNull PackageItemInfo packageItemInfo, @NonNull ParsedComponent component,
+            @Nullable PackageSetting pkgSetting) {
+        // TODO(b/135203078): Add setting related state
+    }
+
+    @CheckResult
+    private static int flag(boolean hasFlag, int flag) {
+        return hasFlag ? flag : 0;
+    }
+
+    /** @see ApplicationInfo#flags */
+    public static int appInfoFlags(AndroidPackage pkg, @Nullable PackageSetting pkgSetting) {
+        // TODO(b/135203078): Add setting related state
+        // @formatter:off
+        int flags = PackageInfoWithoutStateUtils.appInfoFlags(pkg)
+                | flag(pkg.isSystem(), ApplicationInfo.FLAG_SYSTEM)
+                | flag(pkg.isFactoryTest(), ApplicationInfo.FLAG_FACTORY_TEST);
+        if (pkgSetting != null) {
+            flags |= flag(pkgSetting.getPkgState().isUpdatedSystemApp(), ApplicationInfo.FLAG_UPDATED_SYSTEM_APP);
+        }
+        return flags;
+        // @formatter:on
+    }
+
+    /** @see ApplicationInfo#privateFlags */
+    public static int appInfoPrivateFlags(AndroidPackage pkg, @Nullable PackageSetting pkgSetting) {
+        // TODO(b/135203078): Add setting related state
+        // @formatter:off
+        return PackageInfoWithoutStateUtils.appInfoPrivateFlags(pkg)
+                | flag(pkg.isSystemExt(), ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT)
+                | flag(pkg.isPrivileged(), ApplicationInfo.PRIVATE_FLAG_PRIVILEGED)
+                | flag(pkg.isOem(), ApplicationInfo.PRIVATE_FLAG_OEM)
+                | flag(pkg.isVendor(), ApplicationInfo.PRIVATE_FLAG_VENDOR)
+                | flag(pkg.isProduct(), ApplicationInfo.PRIVATE_FLAG_PRODUCT)
+                | flag(pkg.isOdm(), ApplicationInfo.PRIVATE_FLAG_ODM)
+                | flag(pkg.isSignedWithPlatformKey(), ApplicationInfo.PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY);
+        // @formatter:on
+    }
+}
diff --git a/services/core/java/com/android/server/pm/parsing/PackageParser2.java b/services/core/java/com/android/server/pm/parsing/PackageParser2.java
new file mode 100644
index 0000000..f99791a
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/PackageParser2.java
@@ -0,0 +1,138 @@
+/*
+ * 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.parsing;
+
+import android.annotation.AnyThread;
+import android.annotation.Nullable;
+import android.content.pm.PackageParser;
+import android.content.pm.PackageParser.PackageParserException;
+import android.content.pm.parsing.ParsingPackage;
+import android.content.pm.parsing.ParsingPackageUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+import android.content.pm.parsing.result.ParseTypeImpl;
+import android.content.res.TypedArray;
+import android.os.Build;
+import android.os.SystemClock;
+import android.util.DisplayMetrics;
+import android.util.Slog;
+
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import java.io.File;
+
+/**
+ * The v2 of {@link PackageParser} for use when parsing is initiated in the server and must
+ * contain state contained by the server.
+ */
+public class PackageParser2 {
+
+    private static final String TAG = "PackageParser2";
+
+    private static final boolean LOG_PARSE_TIMINGS = Build.IS_DEBUGGABLE;
+    private static final int LOG_PARSE_TIMINGS_THRESHOLD_MS = 100;
+
+    private ThreadLocal<ParseTypeImpl> mSharedResult = ThreadLocal.withInitial(ParseTypeImpl::new);
+
+    private final String[] mSeparateProcesses;
+    private final boolean mOnlyCoreApps;
+    private final DisplayMetrics mDisplayMetrics;
+
+    @Nullable
+    protected PackageCacher mCacher;
+
+    private ParsingPackageUtils parsingUtils;
+
+    /**
+     * @param onlyCoreApps Flag indicating this parser should only consider apps with
+     *                     {@code coreApp} manifest attribute to be valid apps. This is useful when
+     *                     creating a minimalist boot environment.
+     */
+    public PackageParser2(String[] separateProcesses, boolean onlyCoreApps,
+            DisplayMetrics displayMetrics, @Nullable File cacheDir, Callback callback) {
+        mSeparateProcesses = separateProcesses;
+        mOnlyCoreApps = onlyCoreApps;
+
+        if (displayMetrics == null) {
+            mDisplayMetrics = new DisplayMetrics();
+            mDisplayMetrics.setToDefaults();
+        } else {
+            mDisplayMetrics = displayMetrics;
+        }
+
+        mCacher = cacheDir == null ? null : new PackageCacher(cacheDir);
+        // TODO(b/135203078): Remove nullability of callback
+        callback = callback != null ? callback : new Callback() {
+            @Override
+            public boolean hasFeature(String feature) {
+                return false;
+            }
+        };
+
+        parsingUtils = new ParsingPackageUtils(onlyCoreApps, separateProcesses, displayMetrics, callback);
+    }
+
+    /**
+     * TODO(b/135203078): Document new package parsing
+     */
+    @AnyThread
+    public ParsedPackage parsePackage(File packageFile, int flags, boolean useCaches)
+            throws PackageParserException {
+        if (useCaches && mCacher != null) {
+            ParsedPackage parsed = mCacher.getCachedResult(packageFile, flags);
+            if (parsed != null) {
+                return parsed;
+            }
+        }
+
+        long parseTime = LOG_PARSE_TIMINGS ? SystemClock.uptimeMillis() : 0;
+        ParseInput input = mSharedResult.get().reset();
+        ParseResult<ParsingPackage> result = parsingUtils.parsePackage(input, packageFile, flags);
+        if (result.isError()) {
+            throw new PackageParserException(result.getErrorCode(), result.getErrorMessage(),
+                    result.getException());
+        }
+
+        ParsedPackage parsed = (ParsedPackage) result.getResult().hideAsParsed();
+
+        long cacheTime = LOG_PARSE_TIMINGS ? SystemClock.uptimeMillis() : 0;
+        if (mCacher != null) {
+            mCacher.cacheResult(packageFile, flags, parsed);
+        }
+        if (LOG_PARSE_TIMINGS) {
+            parseTime = cacheTime - parseTime;
+            cacheTime = SystemClock.uptimeMillis() - cacheTime;
+            if (parseTime + cacheTime > LOG_PARSE_TIMINGS_THRESHOLD_MS) {
+                Slog.i(TAG, "Parse times for '" + packageFile + "': parse=" + parseTime
+                        + "ms, update_cache=" + cacheTime + " ms");
+            }
+        }
+
+        return parsed;
+    }
+
+    public static abstract class Callback implements ParsingPackageUtils.Callback {
+
+        @Override
+        public final ParsingPackage startParsingPackage(String packageName, String baseCodePath,
+                String codePath, TypedArray manifestArray, boolean isCoreApp) {
+            return PackageImpl.forParsing(packageName, baseCodePath, codePath, manifestArray,
+                    isCoreApp);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/parsing/library/AndroidHidlUpdater.java b/services/core/java/com/android/server/pm/parsing/library/AndroidHidlUpdater.java
new file mode 100644
index 0000000..ebb96bb
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/library/AndroidHidlUpdater.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 com.android.server.pm.parsing.library;
+
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_HIDL_BASE;
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_HIDL_MANAGER;
+
+import android.os.Build;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+/**
+ * Updates a package to ensure that if it targets <= P that the android.hidl.base-V1.0-java
+ * and android.hidl.manager-V1.0-java libraries are included by default.
+ *
+ * TODO(b/135203078): See if this class can be removed, thus removing the isUpdatedSystemApp param
+ *
+ * @hide
+ */
+@VisibleForTesting
+public class AndroidHidlUpdater extends PackageSharedLibraryUpdater {
+
+    @Override
+    public void updatePackage(ParsedPackage parsedPackage, boolean isUpdatedSystemApp) {
+        // This was the default <= P and is maintained for backwards compatibility.
+        boolean isLegacy = parsedPackage.getTargetSdkVersion() <= Build.VERSION_CODES.P;
+        // Only system apps use these libraries
+        boolean isSystem = parsedPackage.isSystem() || isUpdatedSystemApp;
+
+        if (isLegacy && isSystem) {
+            prefixRequiredLibrary(parsedPackage, ANDROID_HIDL_BASE);
+            prefixRequiredLibrary(parsedPackage, ANDROID_HIDL_MANAGER);
+        } else {
+            removeLibrary(parsedPackage, ANDROID_HIDL_BASE);
+            removeLibrary(parsedPackage, ANDROID_HIDL_MANAGER);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/parsing/library/AndroidTestBaseUpdater.java b/services/core/java/com/android/server/pm/parsing/library/AndroidTestBaseUpdater.java
new file mode 100644
index 0000000..432394a
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/library/AndroidTestBaseUpdater.java
@@ -0,0 +1,89 @@
+/*
+ * 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.parsing.library;
+
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_BASE;
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_RUNNER;
+
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledAfter;
+import android.content.Context;
+import android.os.Build;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.compat.IPlatformCompat;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+/**
+ * Updates a package to ensure that if it targets <= Q that the android.test.base library is
+ * included by default.
+ *
+ * <p>This is separated out so that it can be conditionally included at build time depending on
+ * whether android.test.base is on the bootclasspath or not. In order to include this at
+ * build time, and remove android.test.base from the bootclasspath pass
+ * REMOVE_ATB_FROM_BCP=true on the build command line, otherwise this class will not be included
+ * and the
+ *
+ * @hide
+ */
+@VisibleForTesting
+public class AndroidTestBaseUpdater extends PackageSharedLibraryUpdater {
+    private static final String TAG = "AndroidTestBaseUpdater";
+
+    /**
+     * Remove android.test.base library for apps that target SDK R or more and do not depend on
+     * android.test.runner (as it depends on classes from the android.test.base library).
+     */
+    @ChangeId
+    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
+    private static final long REMOVE_ANDROID_TEST_BASE = 133396946L;
+
+    private static boolean isChangeEnabled(AndroidPackage pkg) {
+        // Do not ask platform compat for system apps to prevent a boot time regression in tests.
+        // b/142558883.
+        if (!pkg.isSystem()) {
+            IPlatformCompat platformCompat = IPlatformCompat.Stub.asInterface(
+                    ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
+            try {
+                return platformCompat.isChangeEnabled(REMOVE_ANDROID_TEST_BASE,
+                        pkg.toAppInfoWithoutState());
+            } catch (RemoteException | NullPointerException e) {
+                Log.e(TAG, "Failed to get a response from PLATFORM_COMPAT_SERVICE", e);
+            }
+        }
+        // Fall back to previous behaviour.
+        return pkg.getTargetSdkVersion() > Build.VERSION_CODES.Q;
+    }
+
+    @Override
+    public void updatePackage(ParsedPackage pkg, boolean isUpdatedSystemApp) {
+        // Packages targeted at <= Q expect the classes in the android.test.base library
+        // to be accessible so this maintains backward compatibility by adding the
+        // android.test.base library to those packages.
+        if (!isChangeEnabled(pkg)) {
+            prefixRequiredLibrary(pkg, ANDROID_TEST_BASE);
+        } else {
+            // If a package already depends on android.test.runner then add a dependency on
+            // android.test.base because android.test.runner depends on classes from the
+            // android.test.base library.
+            prefixImplicitDependency(pkg, ANDROID_TEST_RUNNER, ANDROID_TEST_BASE);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/parsing/library/OrgApacheHttpLegacyUpdater.java b/services/core/java/com/android/server/pm/parsing/library/OrgApacheHttpLegacyUpdater.java
new file mode 100644
index 0000000..7de457e
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/library/OrgApacheHttpLegacyUpdater.java
@@ -0,0 +1,48 @@
+/*
+ * 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.parsing.library;
+
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY;
+
+import android.os.Build;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+/**
+ * Updates a package to ensure that if it targets < P that the org.apache.http.legacy library is
+ * included by default.
+ *
+ * @hide
+ */
+@VisibleForTesting
+public class OrgApacheHttpLegacyUpdater extends PackageSharedLibraryUpdater {
+
+    private static boolean apkTargetsApiLevelLessThanOrEqualToOMR1(AndroidPackage pkg) {
+        return pkg.getTargetSdkVersion() < Build.VERSION_CODES.P;
+    }
+
+    @Override
+    public void updatePackage(ParsedPackage parsedPackage, boolean isUpdatedSystemApp) {
+        // Packages targeted at <= O_MR1 expect the classes in the org.apache.http.legacy library
+        // to be accessible so this maintains backward compatibility by adding the
+        // org.apache.http.legacy library to those packages.
+        if (apkTargetsApiLevelLessThanOrEqualToOMR1(parsedPackage)) {
+            prefixRequiredLibrary(parsedPackage, ORG_APACHE_HTTP_LEGACY);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/parsing/library/PackageBackwardCompatibility.java b/services/core/java/com/android/server/pm/parsing/library/PackageBackwardCompatibility.java
new file mode 100644
index 0000000..1d018c4
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/library/PackageBackwardCompatibility.java
@@ -0,0 +1,184 @@
+/*
+ * 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.parsing.library;
+
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_BASE;
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_MOCK;
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_RUNNER;
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY;
+
+import android.content.pm.PackageParser;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Modifies {@link ParsedPackage} in order to maintain backwards compatibility.
+ *
+ * @hide
+ */
+@VisibleForTesting
+public class PackageBackwardCompatibility extends PackageSharedLibraryUpdater {
+
+    private static final String TAG = PackageBackwardCompatibility.class.getSimpleName();
+
+    private static final PackageBackwardCompatibility INSTANCE;
+
+    static {
+        final List<PackageSharedLibraryUpdater> packageUpdaters = new ArrayList<>();
+
+        // Automatically add the org.apache.http.legacy library to the app classpath if the app
+        // targets < P.
+        packageUpdaters.add(new OrgApacheHttpLegacyUpdater());
+
+        packageUpdaters.add(new AndroidHidlUpdater());
+
+        // Add this before adding AndroidTestBaseUpdater so that android.test.base comes before
+        // android.test.mock.
+        packageUpdaters.add(new AndroidTestRunnerSplitUpdater());
+
+        boolean bootClassPathContainsATB = !addUpdaterForAndroidTestBase(packageUpdaters);
+
+        PackageSharedLibraryUpdater[] updaterArray = packageUpdaters
+                .toArray(new PackageSharedLibraryUpdater[0]);
+        INSTANCE = new PackageBackwardCompatibility(
+                bootClassPathContainsATB, updaterArray);
+    }
+
+    /**
+     * Attempt to load and add the optional updater that will only be available when
+     * REMOVE_ATB_FROM_BCP=true. If that could not be found then add the default updater that
+     * will remove any references to org.apache.http.library from the package so that
+     * it does not try and load the library when it is on the bootclasspath.
+     *
+     * TODO:(b/135203078): Find a better way to do this.
+     */
+    private static boolean addUpdaterForAndroidTestBase(
+            List<PackageSharedLibraryUpdater> packageUpdaters) {
+        boolean hasClass = false;
+        String className = "android.content.pm.AndroidTestBaseUpdater";
+        try {
+            Class clazz = (PackageParser.class.getClassLoader().loadClass(className));
+            hasClass = clazz != null;
+            Log.i(TAG, "Loaded " + className);
+        } catch (ClassNotFoundException e) {
+            Log.i(TAG, "Could not find " + className + ", ignoring");
+        }
+
+        if (hasClass) {
+            packageUpdaters.add(new AndroidTestBaseUpdater());
+        } else {
+            packageUpdaters.add(new RemoveUnnecessaryAndroidTestBaseLibrary());
+        }
+        return hasClass;
+    }
+
+    @VisibleForTesting
+    public static PackageSharedLibraryUpdater getInstance() {
+        return INSTANCE;
+    }
+
+    private final boolean mBootClassPathContainsATB;
+
+    private final PackageSharedLibraryUpdater[] mPackageUpdaters;
+
+    private PackageBackwardCompatibility(
+            boolean bootClassPathContainsATB, PackageSharedLibraryUpdater[] packageUpdaters) {
+        this.mBootClassPathContainsATB = bootClassPathContainsATB;
+        this.mPackageUpdaters = packageUpdaters;
+    }
+
+    /**
+     * Modify the shared libraries in the supplied {@link ParsedPackage} to maintain backwards
+     * compatibility.
+     *
+     * @param parsedPackage the {@link ParsedPackage} to modify.
+     */
+    @VisibleForTesting
+    public static void modifySharedLibraries(ParsedPackage parsedPackage,
+            boolean isUpdatedSystemApp) {
+        INSTANCE.updatePackage(parsedPackage, isUpdatedSystemApp);
+    }
+
+    @Override
+    public void updatePackage(ParsedPackage parsedPackage, boolean isUpdatedSystemApp) {
+        for (PackageSharedLibraryUpdater packageUpdater : mPackageUpdaters) {
+            packageUpdater.updatePackage(parsedPackage, isUpdatedSystemApp);
+        }
+    }
+
+    /**
+     * True if the android.test.base is on the bootclasspath, false otherwise.
+     */
+    @VisibleForTesting
+    public static boolean bootClassPathContainsATB() {
+        return INSTANCE.mBootClassPathContainsATB;
+    }
+
+    /**
+     * Add android.test.mock dependency for any APK that depends on android.test.runner.
+     *
+     * <p>This is needed to maintain backwards compatibility as in previous versions of Android the
+     * android.test.runner library included the classes from android.test.mock which have since
+     * been split out into a separate library.
+     *
+     * @hide
+     */
+    @VisibleForTesting
+    public static class AndroidTestRunnerSplitUpdater extends PackageSharedLibraryUpdater {
+
+        @Override
+        public void updatePackage(ParsedPackage parsedPackage, boolean isUpdatedSystemApp) {
+            // android.test.runner has a dependency on android.test.mock so if android.test.runner
+            // is present but android.test.mock is not then add android.test.mock.
+            prefixImplicitDependency(parsedPackage, ANDROID_TEST_RUNNER, ANDROID_TEST_MOCK);
+        }
+    }
+
+    /**
+     * Remove any usages of org.apache.http.legacy from the shared library as the library is on the
+     * bootclasspath.
+     */
+    @VisibleForTesting
+    public static class RemoveUnnecessaryOrgApacheHttpLegacyLibrary
+            extends PackageSharedLibraryUpdater {
+
+        @Override
+        public void updatePackage(ParsedPackage parsedPackage, boolean isUpdatedSystemApp) {
+            removeLibrary(parsedPackage, ORG_APACHE_HTTP_LEGACY);
+        }
+
+    }
+
+    /**
+     * Remove any usages of android.test.base from the shared library as the library is on the
+     * bootclasspath.
+     */
+    @VisibleForTesting
+    public static class RemoveUnnecessaryAndroidTestBaseLibrary
+            extends PackageSharedLibraryUpdater {
+
+        @Override
+        public void updatePackage(ParsedPackage parsedPackage, boolean isUpdatedSystemApp) {
+            removeLibrary(parsedPackage, ANDROID_TEST_BASE);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/parsing/library/PackageSharedLibraryUpdater.java b/services/core/java/com/android/server/pm/parsing/library/PackageSharedLibraryUpdater.java
new file mode 100644
index 0000000..123b808
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/library/PackageSharedLibraryUpdater.java
@@ -0,0 +1,97 @@
+/*
+ * 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.parsing.library;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.ArrayUtils;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Base for classes that update a {@link ParsedPackage}'s shared libraries.
+ *
+ * @hide
+ */
+@VisibleForTesting
+public abstract class PackageSharedLibraryUpdater {
+
+    /**
+     * Update the package's shared libraries.
+     *
+     * @param parsedPackage the package to update.
+     */
+    public abstract void updatePackage(ParsedPackage parsedPackage, boolean isUpdatedSystemApp);
+
+    static void removeLibrary(ParsedPackage parsedPackage, String libraryName) {
+        parsedPackage.removeUsesLibrary(libraryName)
+                .removeUsesOptionalLibrary(libraryName);
+    }
+
+    static @NonNull
+            <T> ArrayList<T> prefix(@Nullable ArrayList<T> cur, T val) {
+        if (cur == null) {
+            cur = new ArrayList<>();
+        }
+        cur.add(0, val);
+        return cur;
+    }
+
+    private static boolean isLibraryPresent(List<String> usesLibraries,
+            List<String> usesOptionalLibraries, String apacheHttpLegacy) {
+        return ArrayUtils.contains(usesLibraries, apacheHttpLegacy)
+                || ArrayUtils.contains(usesOptionalLibraries, apacheHttpLegacy);
+    }
+
+    /**
+     * Add an implicit dependency.
+     *
+     * <p>If the package has an existing dependency on {@code existingLibrary} then prefix it with
+     * the {@code implicitDependency} if it is not already in the list of libraries.
+     *
+     * @param parsedPackage the {@link ParsedPackage} to update.
+     * @param existingLibrary the existing library.
+     * @param implicitDependency the implicit dependency to add
+     */
+    void prefixImplicitDependency(ParsedPackage parsedPackage, String existingLibrary,
+            String implicitDependency) {
+        List<String> usesLibraries = parsedPackage.getUsesLibraries();
+        List<String> usesOptionalLibraries = parsedPackage.getUsesOptionalLibraries();
+
+        if (!isLibraryPresent(usesLibraries, usesOptionalLibraries, implicitDependency)) {
+            if (ArrayUtils.contains(usesLibraries, existingLibrary)) {
+                parsedPackage.addUsesLibrary(0, implicitDependency);
+            } else if (ArrayUtils.contains(usesOptionalLibraries, existingLibrary)) {
+                parsedPackage.addUsesOptionalLibrary(0, implicitDependency);
+            }
+        }
+    }
+
+    void prefixRequiredLibrary(ParsedPackage parsedPackage, String libraryName) {
+        List<String> usesLibraries = parsedPackage.getUsesLibraries();
+        List<String> usesOptionalLibraries = parsedPackage.getUsesOptionalLibraries();
+
+        boolean alreadyPresent = isLibraryPresent(
+                usesLibraries, usesOptionalLibraries, libraryName);
+        if (!alreadyPresent) {
+            parsedPackage.addUsesLibrary(0, libraryName);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/parsing/library/SharedLibraryNames.java b/services/core/java/com/android/server/pm/parsing/library/SharedLibraryNames.java
new file mode 100644
index 0000000..f62f014
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/library/SharedLibraryNames.java
@@ -0,0 +1,36 @@
+/*
+ * 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.parsing.library;
+
+/**
+ * A set of shared library names
+ *
+ * @hide
+ */
+public class SharedLibraryNames {
+
+    static final String ANDROID_HIDL_BASE = "android.hidl.base-V1.0-java";
+
+    static final String ANDROID_HIDL_MANAGER = "android.hidl.manager-V1.0-java";
+
+    static final String ANDROID_TEST_BASE = "android.test.base";
+
+    static final String ANDROID_TEST_MOCK = "android.test.mock";
+
+    static final String ANDROID_TEST_RUNNER = "android.test.runner";
+
+    public static final String ORG_APACHE_HTTP_LEGACY = "org.apache.http.legacy";
+}
diff --git a/core/java/android/content/pm/parsing/AndroidPackage.aidl b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.aidl
similarity index 100%
rename from core/java/android/content/pm/parsing/AndroidPackage.aidl
rename to services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.aidl
diff --git a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java
new file mode 100644
index 0000000..7929579
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java
@@ -0,0 +1,311 @@
+/*
+ * 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.parsing.pkg;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageParser;
+import android.content.pm.PermissionGroupInfo;
+import android.content.pm.SharedLibraryInfo;
+import android.content.pm.parsing.ParsingPackageRead;
+import android.content.pm.parsing.component.ParsedFeature;
+import android.content.pm.parsing.component.ParsedIntentInfo;
+import android.content.pm.parsing.component.ParsedPermissionGroup;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.util.ArraySet;
+import android.util.Pair;
+
+import com.android.internal.R;
+
+import java.security.PublicKey;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+
+/**
+ * The last state of a package during parsing/install before it is available in
+ * {@link com.android.server.pm.PackageManagerService#mPackages}.
+ *
+ * It is the responsibility of the caller to understand what data is available at what step of the
+ * parsing or install process.
+ *
+ * TODO(b/135203078): Nullability annotations
+ * TODO(b/135203078): Remove get/setAppInfo differences
+ *
+ * @hide
+ */
+public interface AndroidPackage extends PkgAppInfo, PkgPackageInfo, ParsingPackageRead, Parcelable {
+
+    /**
+     * The names of packages to adopt ownership of permissions from, parsed under
+     * {@link PackageParser#TAG_ADOPT_PERMISSIONS}.
+     * @see R.styleable#AndroidManifestOriginalPackage_name
+     */
+    @NonNull
+    List<String> getAdoptPermissions();
+
+    /** Path of base APK */
+    @NonNull
+    String getBaseCodePath();
+
+    /** Revision code of base APK */
+    int getBaseRevisionCode();
+
+    /**
+     * Path where this package was found on disk. For monolithic packages
+     * this is path to single base APK file; for cluster packages this is
+     * path to the cluster directory.
+     */
+    @NonNull
+    String getCodePath();
+
+    /**
+     * Permissions requested but not in the manifest. These may have been split or migrated from
+     * previous versions/definitions.
+     */
+    @NonNull
+    List<String> getImplicitPermissions();
+
+    /**
+     * For use with {@link com.android.server.pm.KeySetManagerService}. Parsed in
+     * {@link PackageParser#TAG_KEY_SETS}.
+     * @see R.styleable#AndroidManifestKeySet
+     * @see R.styleable#AndroidManifestPublicKey
+     */
+    @NonNull
+    Map<String, ArraySet<PublicKey>> getKeySetMapping();
+
+    /**
+     * Library names this package is declared as, for use by other packages with "uses-library".
+     * @see R.styleable#AndroidManifestLibrary
+     */
+    @NonNull
+    List<String> getLibraryNames();
+
+    /**
+     * The package name as declared in the manifest, since the package can be renamed. For example,
+     * static shared libs use synthetic package names.
+     */
+    @NonNull
+    String getManifestPackageName();
+
+    /**
+     * We store the application meta-data independently to avoid multiple unwanted references
+     * TODO(b/135203078): What does this comment mean?
+     * TODO(b/135203078): Make all the Bundles immutable (and non-null by shared empty reference?)
+     */
+    @Nullable
+    Bundle getMetaData();
+
+    /**
+     * For system use to migrate from an old package name to a new one, moving over data
+     * if available.
+     * @see R.styleable#AndroidManifestOriginalPackage}
+     */
+    @NonNull
+    List<String> getOriginalPackages();
+
+    /**
+     * Map of overlayable name to actor name.
+     */
+    @NonNull
+    Map<String, String> getOverlayables();
+
+    /**
+     * The name of the package as used to identify it in the system. This may be adjusted by the
+     * system from the value declared in the manifest, and may not correspond to a Java code
+     * package.
+     * @see ApplicationInfo#packageName
+     * @see PackageInfo#packageName
+     */
+    @NonNull
+    String getPackageName();
+
+    /**
+     * @see PermissionGroupInfo
+     */
+    @NonNull
+    List<ParsedPermissionGroup> getPermissionGroups();
+
+    @NonNull
+    List<ParsedFeature> getFeatures();
+
+    /**
+     * Used to determine the default preferred handler of an {@link Intent}.
+     *
+     * Map of component className to intent info inside that component.
+     * TODO(b/135203078): Is this actually used/working?
+     */
+    @NonNull
+    List<Pair<String, ParsedIntentInfo>> getPreferredActivityFilters();
+
+    /**
+     * System protected broadcasts.
+     * @see R.styleable#AndroidManifestProtectedBroadcast
+     */
+    @NonNull
+    List<String> getProtectedBroadcasts();
+
+    /**
+     * Intents that this package may query or require and thus requires visibility into.
+     * @see R.styleable#AndroidManifestQueriesIntent
+     */
+    @NonNull
+    List<Intent> getQueriesIntents();
+
+    /**
+     * Other packages that this package may query or require and thus requires visibility into.
+     * @see R.styleable#AndroidManifestQueriesPackage
+     */
+    @NonNull
+    List<String> getQueriesPackages();
+
+    /**
+     * If a system app declares {@link #getOriginalPackages()}, and the app was previously installed
+     * under one of those original package names, the {@link #getPackageName()} system identifier
+     * will be changed to that previously installed name. This will then be non-null, set to the
+     * manifest package name, for tracking the package under its true name.
+     *
+     * TODO(b/135203078): Remove this in favor of checking originalPackages.isEmpty and
+     *  getManifestPackageName
+     */
+    @Nullable
+    String getRealPackage();
+
+    /**
+     * SHA-512 hash of the only APK that can be used to update a system package.
+     * @see R.styleable#AndroidManifestRestrictUpdate
+     */
+    @Nullable
+    byte[] getRestrictUpdateHash();
+
+    /**
+     * The signature data of all APKs in this package, which must be exactly the same across the
+     * base and splits.
+     */
+    PackageParser.SigningDetails getSigningDetails();
+
+    /**
+     * TODO(b/135203078): Move split stuff to an inner data class
+     * @see ApplicationInfo#splitNames
+     * @see PackageInfo#splitNames
+     */
+    @Nullable
+    String[] getSplitNames();
+
+    /** Flags of any split APKs; ordered by parsed splitName */
+    @Nullable
+    int[] getSplitFlags();
+
+    /** @see R.styleable#AndroidManifestStaticLibrary_name */
+    @Nullable
+    String getStaticSharedLibName();
+
+    /** @see R.styleable#AndroidManifestStaticLibrary_version */
+    long getStaticSharedLibVersion();
+
+    /**
+     * {@link android.os.storage.StorageManager#convert(String)} version of
+     * {@link #getVolumeUuid()}.
+     * TODO(b/135203078): All usages call toString() on this. Can the string be returned directly,
+     *  or does the parsing logic in StorageManager have to run?
+     */
+    UUID getStorageUuid();
+
+    /**
+     * For use with {@link com.android.server.pm.KeySetManagerService}. Parsed in
+     * {@link PackageParser#TAG_KEY_SETS}.
+     * @see R.styleable#AndroidManifestUpgradeKeySet
+     */
+    @NonNull
+    Set<String> getUpgradeKeySets();
+
+    /** @see R.styleable#AndroidManifestUsesLibrary */
+    @NonNull
+    List<String> getUsesLibraries();
+
+    /**
+     * Like {@link #getUsesLibraries()}, but marked optional by setting
+     * {@link R.styleable#AndroidManifestUsesLibrary_required} to false . Application is expected
+     * to handle absence manually.
+     * @see R.styleable#AndroidManifestUsesLibrary
+     */
+    @NonNull
+    List<String> getUsesOptionalLibraries();
+
+    /**
+     * TODO(b/135203078): Move static library stuff to an inner data class
+     * @see R.styleable#AndroidManifestUsesStaticLibrary
+     */
+    @NonNull
+    List<String> getUsesStaticLibraries();
+
+    /** @see R.styleable#AndroidManifestUsesStaticLibrary_certDigest */
+    @Nullable
+    String[][] getUsesStaticLibrariesCertDigests();
+
+    /** @see R.styleable#AndroidManifestUsesStaticLibrary_version */
+    @Nullable
+    long[] getUsesStaticLibrariesVersions();
+
+    /** @see R.styleable#AndroidManifestApplication_forceQueryable */
+    boolean isForceQueryable();
+
+    boolean isCrossProfile();
+
+    /**
+     * The install time abi override to choose 32bit abi's when multiple abi's
+     * are present. This is only meaningfull for multiarch applications.
+     */
+    boolean isUse32BitAbi();
+
+    /**
+     * Set if the any of components are visible to instant applications.
+     * @see R.styleable#AndroidManifestActivity_visibleToInstantApps
+     * @see R.styleable#AndroidManifestProvider_visibleToInstantApps
+     * @see R.styleable#AndroidManifestService_visibleToInstantApps
+     */
+    boolean isVisibleToInstantApps();
+
+    /**
+     * Generates an {@link ApplicationInfo} object with only the data available in this object.
+     *
+     * TODO(b/135203078): Actually add this
+     * This does not contain any system or user state data, and should be avoided. Prefer
+     * com.android.server.pm.parsing.PackageInfoUtils#generateApplicationInfo(
+     * AndroidPackage, int, PackageUserState, int, com.android.server.pm.PackageSetting)
+     *
+     * @deprecated Access AndroidPackage fields directly.
+     */
+    @Deprecated
+    @NonNull
+    ApplicationInfo toAppInfoWithoutState();
+
+    /**
+     * TODO(b/135203078): Remove usages?
+     * @return a mock of what the previous package.applicationInfo would've returned for logging
+     * @deprecated don't use this in any new code, just print package name directly
+     */
+    @Deprecated
+    @NonNull
+    String toAppInfoToString();
+}
diff --git a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java
new file mode 100644
index 0000000..780b234
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java
@@ -0,0 +1,291 @@
+/*
+ * 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.parsing.pkg;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageParser;
+import android.content.pm.PackageParser.PackageParserException;
+import android.content.pm.SharedLibraryInfo;
+import android.content.pm.VersionedPackage;
+import android.content.pm.dex.DexMetadataHelper;
+import android.content.pm.parsing.ParsingPackageRead;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedInstrumentation;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedService;
+import android.text.TextUtils;
+
+import com.android.internal.content.NativeLibraryHelper;
+import com.android.internal.util.ArrayUtils;
+import com.android.server.SystemConfig;
+import com.android.server.pm.PackageSetting;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/** @hide */
+public class AndroidPackageUtils {
+
+    private AndroidPackageUtils() {
+    }
+
+    public static List<String> getAllCodePathsExcludingResourceOnly(
+            AndroidPackage aPkg) {
+        PackageImpl pkg = (PackageImpl) aPkg;
+        ArrayList<String> paths = new ArrayList<>();
+        if (pkg.isHasCode()) {
+            paths.add(pkg.getBaseCodePath());
+        }
+        String[] splitCodePaths = pkg.getSplitCodePaths();
+        if (!ArrayUtils.isEmpty(splitCodePaths)) {
+            for (int i = 0; i < splitCodePaths.length; i++) {
+                if ((pkg.getSplitFlags()[i] & ApplicationInfo.FLAG_HAS_CODE) != 0) {
+                    paths.add(splitCodePaths[i]);
+                }
+            }
+        }
+        return paths;
+    }
+
+    /**
+     * @return a list of the base and split code paths.
+     */
+    public static List<String> getAllCodePaths(AndroidPackage aPkg) {
+        PackageImpl pkg = (PackageImpl) aPkg;
+        ArrayList<String> paths = new ArrayList<>();
+        paths.add(pkg.getBaseCodePath());
+
+        String[] splitCodePaths = pkg.getSplitCodePaths();
+        if (!ArrayUtils.isEmpty(splitCodePaths)) {
+            Collections.addAll(paths, splitCodePaths);
+        }
+        return paths;
+    }
+
+    public static SharedLibraryInfo createSharedLibraryForStatic(AndroidPackage pkg) {
+        return new SharedLibraryInfo(null, pkg.getPackageName(),
+                AndroidPackageUtils.getAllCodePaths(pkg),
+                pkg.getStaticSharedLibName(),
+                pkg.getStaticSharedLibVersion(),
+                SharedLibraryInfo.TYPE_STATIC,
+                new VersionedPackage(pkg.getManifestPackageName(),
+                        pkg.getLongVersionCode()),
+                null, null);
+    }
+
+    public static SharedLibraryInfo createSharedLibraryForDynamic(AndroidPackage pkg, String name) {
+        return new SharedLibraryInfo(null, pkg.getPackageName(),
+                AndroidPackageUtils.getAllCodePaths(pkg), name,
+                SharedLibraryInfo.VERSION_UNDEFINED,
+                SharedLibraryInfo.TYPE_DYNAMIC, new VersionedPackage(pkg.getPackageName(),
+                pkg.getLongVersionCode()),
+                null, null);
+    }
+
+    /**
+     * Return the dex metadata files for the given package as a map
+     * [code path -> dex metadata path].
+     *
+     * NOTE: involves I/O checks.
+     */
+    public static Map<String, String> getPackageDexMetadata(AndroidPackage pkg) {
+        return DexMetadataHelper.buildPackageApkToDexMetadataMap
+                (AndroidPackageUtils.getAllCodePaths(pkg));
+    }
+
+    /**
+     * Validate the dex metadata files installed for the given package.
+     *
+     * @throws PackageParserException in case of errors.
+     */
+    public static void validatePackageDexMetadata(AndroidPackage pkg)
+            throws PackageParserException {
+        Collection<String> apkToDexMetadataList = getPackageDexMetadata(pkg).values();
+        for (String dexMetadata : apkToDexMetadataList) {
+            DexMetadataHelper.validateDexMetadataFile(dexMetadata);
+        }
+    }
+
+    public static NativeLibraryHelper.Handle createNativeLibraryHandle(AndroidPackage pkg)
+            throws IOException {
+        return NativeLibraryHelper.Handle.create(
+                AndroidPackageUtils.getAllCodePaths(pkg),
+                pkg.isMultiArch(),
+                pkg.isExtractNativeLibs(),
+                pkg.isDebuggable()
+        );
+    }
+
+    public static boolean canHaveOatDir(AndroidPackage pkg, boolean isUpdatedSystemApp) {
+        // The following app types CANNOT have oat directory
+        // - non-updated system apps
+        return !pkg.isSystem() || isUpdatedSystemApp;
+    }
+
+    public static boolean hasComponentClassName(AndroidPackage pkg, String className) {
+        List<ParsedActivity> activities = pkg.getActivities();
+        int activitiesSize = activities.size();
+        for (int index = 0; index < activitiesSize; index++) {
+            if (Objects.equals(className, activities.get(index).getName())) {
+                return true;
+            }
+        }
+
+        List<ParsedActivity> receivers = pkg.getReceivers();
+        int receiversSize = receivers.size();
+        for (int index = 0; index < receiversSize; index++) {
+            if (Objects.equals(className, receivers.get(index).getName())) {
+                return true;
+            }
+        }
+
+        List<ParsedProvider> providers = pkg.getProviders();
+        int providersSize = providers.size();
+        for (int index = 0; index < providersSize; index++) {
+            if (Objects.equals(className, providers.get(index).getName())) {
+                return true;
+            }
+        }
+
+        List<ParsedService> services = pkg.getServices();
+        int servicesSize = services.size();
+        for (int index = 0; index < servicesSize; index++) {
+            if (Objects.equals(className, services.get(index).getName())) {
+                return true;
+            }
+        }
+
+        List<ParsedInstrumentation> instrumentations = pkg.getInstrumentations();
+        int instrumentationsSize = instrumentations.size();
+        for (int index = 0; index < instrumentationsSize; index++) {
+            if (Objects.equals(className, instrumentations.get(index).getName())) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    public static boolean isEncryptionAware(AndroidPackage pkg) {
+        return pkg.isDirectBootAware() || pkg.isPartiallyDirectBootAware();
+    }
+
+    public static boolean isLibrary(AndroidPackage pkg) {
+        // TODO(b/135203078): Can parsing just enforce these always match?
+        return pkg.getStaticSharedLibName() != null || !pkg.getLibraryNames().isEmpty();
+    }
+
+    public static int getHiddenApiEnforcementPolicy(AndroidPackage pkg,
+            @NonNull PackageSetting pkgSetting) {
+        boolean isAllowedToUseHiddenApis;
+        if (pkg.isSignedWithPlatformKey()) {
+            isAllowedToUseHiddenApis = true;
+        } else if (pkg.isSystem() || pkgSetting.getPkgState().isUpdatedSystemApp()) {
+            isAllowedToUseHiddenApis = pkg.isUsesNonSdkApi()
+                    || SystemConfig.getInstance().getHiddenApiWhitelistedApps().contains(
+                    pkg.getPackageName());
+        } else {
+            isAllowedToUseHiddenApis = false;
+        }
+
+        if (isAllowedToUseHiddenApis) {
+            return ApplicationInfo.HIDDEN_API_ENFORCEMENT_DISABLED;
+        }
+
+        // TODO(b/135203078): Handle maybeUpdateHiddenApiEnforcementPolicy. Right now it's done
+        //  entirely through ApplicationInfo and shouldn't touch this specific class, but that
+        //  may not always hold true.
+//        if (mHiddenApiPolicy != ApplicationInfo.HIDDEN_API_ENFORCEMENT_DEFAULT) {
+//            return mHiddenApiPolicy;
+//        }
+        return ApplicationInfo.HIDDEN_API_ENFORCEMENT_ENABLED;
+    }
+
+    public static int getIcon(ParsingPackageRead pkg) {
+        return (PackageParser.sUseRoundIcon && pkg.getRoundIconRes() != 0)
+                ? pkg.getRoundIconRes() : pkg.getIconRes();
+    }
+
+    public static long getLongVersionCode(AndroidPackage pkg) {
+        return PackageInfo.composeLongVersionCode(pkg.getVersionCodeMajor(), pkg.getVersionCode());
+    }
+
+    public static boolean isMatchForSystemOnly(AndroidPackage pkg, int flags) {
+        if ((flags & PackageManager.MATCH_SYSTEM_ONLY) != 0) {
+            return pkg.isSystem();
+        }
+        return true;
+    }
+
+    public static String getPrimaryCpuAbi(AndroidPackage pkg, @Nullable PackageSetting pkgSetting) {
+        if (pkgSetting == null || TextUtils.isEmpty(pkgSetting.primaryCpuAbiString)) {
+            return pkg.getPrimaryCpuAbi();
+        }
+
+        return pkgSetting.primaryCpuAbiString;
+    }
+
+    public static String getSecondaryCpuAbi(AndroidPackage pkg,
+            @Nullable PackageSetting pkgSetting) {
+        if (pkgSetting == null || TextUtils.isEmpty(pkgSetting.secondaryCpuAbiString)) {
+            return pkg.getSecondaryCpuAbi();
+        }
+
+        return pkgSetting.secondaryCpuAbiString;
+    }
+
+    /**
+     * Returns the primary ABI as parsed from the package. Used only during parsing and derivation.
+     * Otherwise prefer {@link #getPrimaryCpuAbi(AndroidPackage, PackageSetting)}.
+     *
+     * TODO(b/135203078): Actually hide the method
+     * Placed in the utility to hide the method on the interface.
+     */
+    public static String getRawPrimaryCpuAbi(AndroidPackage pkg) {
+        return pkg.getPrimaryCpuAbi();
+    }
+
+    /**
+     * Returns the secondary ABI as parsed from the package. Used only during parsing and
+     * derivation. Otherwise prefer {@link #getSecondaryCpuAbi(AndroidPackage, PackageSetting)}.
+     *
+     * TODO(b/135203078): Actually hide the method
+     * Placed in the utility to hide the method on the interface.
+     */
+    public static String getRawSecondaryCpuAbi(AndroidPackage pkg) {
+        return pkg.getSecondaryCpuAbi();
+    }
+
+    public static String getSeInfo(AndroidPackage pkg, @Nullable PackageSetting pkgSetting) {
+        if (pkgSetting != null) {
+            String overrideSeInfo = pkgSetting.getPkgState().getOverrideSeInfo();
+            if (!TextUtils.isEmpty(overrideSeInfo)) {
+                return overrideSeInfo;
+            }
+        }
+        return pkg.getSeInfo();
+    }
+}
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
new file mode 100644
index 0000000..2b508ea
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java
@@ -0,0 +1,752 @@
+/*
+ * 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.parsing.pkg;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageParser;
+import android.content.pm.SharedLibraryInfo;
+import android.content.pm.parsing.ParsingPackage;
+import android.content.pm.parsing.ParsingPackageImpl;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedMainComponent;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedService;
+import android.content.res.TypedArray;
+import android.os.Environment;
+import android.os.Parcel;
+import android.os.UserHandle;
+import android.os.storage.StorageManager;
+import android.text.TextUtils;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.CollectionUtils;
+import com.android.internal.util.DataClass;
+import com.android.internal.util.Parcelling;
+import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;
+import com.android.server.pm.parsing.PackageInfoUtils;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Extensions to {@link ParsingPackageImpl} including fields/state contained in the system server
+ * and not exposed to the core SDK.
+ *
+ * Many of the fields contained here will eventually be moved inside
+ * {@link com.android.server.pm.PackageSetting} or {@link android.content.pm.PackageUserState}.
+ *
+ * @hide
+ */
+public final class PackageImpl extends ParsingPackageImpl implements ParsedPackage, AndroidPackage {
+
+    public static PackageImpl forParsing(@NonNull String packageName, @NonNull String baseCodePath,
+            @NonNull String codePath, @NonNull TypedArray manifestArray, boolean isCoreApp) {
+        return new PackageImpl(packageName, baseCodePath, codePath, manifestArray, isCoreApp);
+    }
+
+    /**
+     * Mock an unavailable {@link AndroidPackage} to use when
+     * removing
+     * a package from the system.
+     * This can occur if the package was installed on a storage device that has since been removed.
+     * Since the infrastructure uses {@link AndroidPackage}, but
+     * for
+     * this case only cares about
+     * volumeUuid, just fake it rather than having separate method paths.
+     */
+    public static AndroidPackage buildFakeForDeletion(String packageName, String volumeUuid) {
+        return ((ParsedPackage) PackageImpl.forTesting(packageName)
+                .setVolumeUuid(volumeUuid)
+                .hideAsParsed())
+                .hideAsFinal();
+    }
+
+    @VisibleForTesting
+    public static ParsingPackage forTesting(String packageName) {
+        return forTesting(packageName, "");
+    }
+
+    @VisibleForTesting
+    public static ParsingPackage forTesting(String packageName, String baseCodePath) {
+        return new PackageImpl(packageName, baseCodePath, baseCodePath, null, false);
+    }
+
+    @NonNull
+    @DataClass.ParcelWith(ForInternedString.class)
+    private final String manifestPackageName;
+
+    private boolean stub;
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    protected String nativeLibraryDir;
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    protected String nativeLibraryRootDir;
+
+    private boolean nativeLibraryRootRequiresIsa;
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    protected String primaryCpuAbi;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    protected String secondaryCpuAbi;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    protected String secondaryNativeLibraryDir;
+
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    protected String seInfo;
+    @Nullable
+    @DataClass.ParcelWith(ForInternedString.class)
+    protected String seInfoUser;
+
+    private boolean coreApp;
+
+    private boolean system;
+    private boolean factoryTest;
+
+    private boolean systemExt;
+    private boolean privileged;
+    private boolean oem;
+    private boolean vendor;
+    private boolean product;
+    private boolean odm;
+
+    private boolean signedWithPlatformKey;
+
+    /**
+     * This is an appId, the uid if the userId is == USER_SYSTEM
+     */
+    private int uid = -1;
+
+    @VisibleForTesting
+    public PackageImpl(@NonNull String packageName, @NonNull String baseCodePath,
+            @NonNull String codePath, @Nullable TypedArray manifestArray, boolean isCoreApp) {
+        super(packageName, baseCodePath, codePath, manifestArray);
+        this.manifestPackageName = this.packageName;
+        this.coreApp = isCoreApp;
+    }
+
+    @Override
+    public ParsedPackage hideAsParsed() {
+        return this;
+    }
+
+    @Override
+    public AndroidPackage hideAsFinal() {
+        // TODO(b/135203078): Lock as immutable
+        return this;
+    }
+
+    @Override
+    public long getLongVersionCode() {
+        return PackageInfo.composeLongVersionCode(versionCodeMajor, versionCode);
+    }
+
+    @Override
+    public PackageImpl removePermission(int index) {
+        this.permissions.remove(index);
+        return this;
+    }
+
+    @Override
+    public PackageImpl addUsesOptionalLibrary(int index, String libraryName) {
+        this.usesOptionalLibraries = CollectionUtils.add(usesOptionalLibraries, index,
+                TextUtils.safeIntern(libraryName));
+        return this;
+    }
+
+    @Override
+    public PackageImpl addUsesLibrary(int index, String libraryName) {
+        this.usesLibraries = CollectionUtils.add(usesLibraries, index,
+                TextUtils.safeIntern(libraryName));
+        return this;
+    }
+
+    @Override
+    public PackageImpl removeUsesLibrary(String libraryName) {
+        this.usesLibraries = CollectionUtils.remove(this.usesLibraries, libraryName);
+        return this;
+    }
+
+    @Override
+    public PackageImpl removeUsesOptionalLibrary(String libraryName) {
+        super.removeUsesOptionalLibrary(libraryName);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setSigningDetails(@Nullable PackageParser.SigningDetails value) {
+        super.setSigningDetails(value);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setRestrictUpdateHash(@Nullable byte... value) {
+        super.setRestrictUpdateHash(value);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setRealPackage(@Nullable String realPackage) {
+        super.setRealPackage(realPackage);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setPersistent(boolean value) {
+        super.setPersistent(value);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setDefaultToDeviceProtectedStorage(boolean value) {
+        super.setDefaultToDeviceProtectedStorage(value);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setDirectBootAware(boolean value) {
+        super.setDirectBootAware(value);
+        return this;
+    }
+
+    @Override
+    public PackageImpl clearProtectedBroadcasts() {
+        protectedBroadcasts.clear();
+        return this;
+    }
+
+    @Override
+    public PackageImpl clearOriginalPackages() {
+        originalPackages.clear();
+        return this;
+    }
+
+    @Override
+    public PackageImpl clearAdoptPermissions() {
+        adoptPermissions.clear();
+        return this;
+    }
+
+    @Override
+    public PackageImpl setCodePath(@NonNull String value) {
+        this.codePath = value;
+        return this;
+    }
+
+    // TODO(b/135203078): Move PackageManagerService#renameStaticSharedLibraryPackage
+    //  into initial package parsing
+    @Override
+    public PackageImpl setPackageName(@NonNull String packageName) {
+        this.packageName = TextUtils.safeIntern(packageName);
+
+        int permissionsSize = permissions.size();
+        for (int index = 0; index < permissionsSize; index++) {
+            permissions.get(index).setPackageName(this.packageName);
+        }
+
+        int permissionGroupsSize = permissionGroups.size();
+        for (int index = 0; index < permissionGroupsSize; index++) {
+            permissionGroups.get(index).setPackageName(this.packageName);
+        }
+
+        int activitiesSize = activities.size();
+        for (int index = 0; index < activitiesSize; index++) {
+            activities.get(index).setPackageName(this.packageName);
+        }
+
+        int receiversSize = receivers.size();
+        for (int index = 0; index < receiversSize; index++) {
+            receivers.get(index).setPackageName(this.packageName);
+        }
+
+        int providersSize = providers.size();
+        for (int index = 0; index < providersSize; index++) {
+            providers.get(index).setPackageName(this.packageName);
+        }
+
+        int servicesSize = services.size();
+        for (int index = 0; index < servicesSize; index++) {
+            services.get(index).setPackageName(this.packageName);
+        }
+
+        int instrumentationsSize = instrumentations.size();
+        for (int index = 0; index < instrumentationsSize; index++) {
+            instrumentations.get(index).setPackageName(this.packageName);
+        }
+
+        return this;
+    }
+
+    @Override
+    public PackageImpl setAllComponentsDirectBootAware(boolean allComponentsDirectBootAware) {
+        int activitiesSize = activities.size();
+        for (int index = 0; index < activitiesSize; index++) {
+            activities.get(index).setDirectBootAware(allComponentsDirectBootAware);
+        }
+
+        int receiversSize = receivers.size();
+        for (int index = 0; index < receiversSize; index++) {
+            receivers.get(index).setDirectBootAware(allComponentsDirectBootAware);
+        }
+
+        int providersSize = providers.size();
+        for (int index = 0; index < providersSize; index++) {
+            providers.get(index).setDirectBootAware(allComponentsDirectBootAware);
+        }
+
+        int servicesSize = services.size();
+        for (int index = 0; index < servicesSize; index++) {
+            services.get(index).setDirectBootAware(allComponentsDirectBootAware);
+        }
+
+        return this;
+    }
+
+    @Override
+    public PackageImpl setBaseCodePath(@NonNull String baseCodePath) {
+        this.baseCodePath = TextUtils.safeIntern(baseCodePath);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setNativeLibraryDir(@Nullable String nativeLibraryDir) {
+        this.nativeLibraryDir = TextUtils.safeIntern(nativeLibraryDir);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setNativeLibraryRootDir(@Nullable String nativeLibraryRootDir) {
+        this.nativeLibraryRootDir = TextUtils.safeIntern(nativeLibraryRootDir);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setPrimaryCpuAbi(@Nullable String primaryCpuAbi) {
+        this.primaryCpuAbi = TextUtils.safeIntern(primaryCpuAbi);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setSecondaryCpuAbi(@Nullable String secondaryCpuAbi) {
+        this.secondaryCpuAbi = TextUtils.safeIntern(secondaryCpuAbi);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setSecondaryNativeLibraryDir(@Nullable String secondaryNativeLibraryDir) {
+        this.secondaryNativeLibraryDir = TextUtils.safeIntern(secondaryNativeLibraryDir);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setSeInfo(@Nullable String seInfo) {
+        this.seInfo = TextUtils.safeIntern(seInfo);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setSeInfoUser(@Nullable String seInfoUser) {
+        this.seInfoUser = TextUtils.safeIntern(seInfoUser);
+        return this;
+    }
+
+    @Override
+    public PackageImpl setSplitCodePaths(@Nullable String[] splitCodePaths) {
+        this.splitCodePaths = splitCodePaths;
+        if (splitCodePaths != null) {
+            int size = splitCodePaths.length;
+            for (int index = 0; index < size; index++) {
+                this.splitCodePaths[index] = TextUtils.safeIntern(this.splitCodePaths[index]);
+            }
+        }
+        return this;
+    }
+
+    @Override
+    public PackageImpl capPermissionPriorities() {
+        int size = permissionGroups.size();
+        for (int index = size - 1; index >= 0; --index) {
+            // TODO(b/135203078): Builder/immutability
+            permissionGroups.get(index).setPriority(0);
+        }
+        return this;
+    }
+
+    @Override
+    public PackageImpl markNotActivitiesAsNotExportedIfSingleUser() {
+        // ignore export request for single user receivers
+        int receiversSize = receivers.size();
+        for (int index = 0; index < receiversSize; index++) {
+            ParsedActivity receiver = receivers.get(index);
+            if ((receiver.getFlags() & ActivityInfo.FLAG_SINGLE_USER) != 0) {
+                receiver.setExported(false);
+            }
+        }
+
+        // ignore export request for single user services
+        int servicesSize = services.size();
+        for (int index = 0; index < servicesSize; index++) {
+            ParsedService service = services.get(index);
+            if ((service.getFlags() & ActivityInfo.FLAG_SINGLE_USER) != 0) {
+                service.setExported(false);
+            }
+        }
+
+        // ignore export request for single user providers
+        int providersSize = providers.size();
+        for (int index = 0; index < providersSize; index++) {
+            ParsedProvider provider = providers.get(index);
+            if ((provider.getFlags() & ActivityInfo.FLAG_SINGLE_USER) != 0) {
+                provider.setExported(false);
+            }
+        }
+
+        return this;
+    }
+
+    @Override
+    public UUID getStorageUuid() {
+        return StorageManager.convert(volumeUuid);
+    }
+
+    @Deprecated
+    @Override
+    public String toAppInfoToString() {
+        return "ApplicationInfo{"
+                + Integer.toHexString(System.identityHashCode(this))
+                + " " + getPackageName() + "}";
+    }
+
+    @Override
+    public ParsedPackage setCoreApp(boolean coreApp) {
+        this.coreApp = coreApp;
+        return this;
+    }
+
+    @Override
+    public ParsedPackage setVersionCode(int versionCode) {
+        this.versionCode = versionCode;
+        return this;
+    }
+
+    @Override
+    public ParsedPackage setVersionCodeMajor(int versionCodeMajor) {
+        this.versionCodeMajor = versionCodeMajor;
+        return this;
+    }
+
+    @Override
+    public ApplicationInfo toAppInfoWithoutState() {
+        ApplicationInfo appInfo = super.toAppInfoWithoutState();
+        appInfo.flags = PackageInfoUtils.appInfoFlags(this, null);
+        appInfo.privateFlags = PackageInfoUtils.appInfoPrivateFlags(this, null);
+        appInfo.nativeLibraryDir = nativeLibraryDir;
+        appInfo.nativeLibraryRootDir = nativeLibraryRootDir;
+        appInfo.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa;
+        appInfo.primaryCpuAbi = primaryCpuAbi;
+        appInfo.secondaryCpuAbi = secondaryCpuAbi;
+        appInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir;
+        appInfo.seInfo = seInfo;
+        appInfo.seInfoUser = seInfoUser;
+        appInfo.uid = uid;
+        return appInfo;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        super.writeToParcel(dest, flags);
+        sForString.parcel(this.manifestPackageName, dest, flags);
+        dest.writeBoolean(this.stub);
+        sForString.parcel(this.nativeLibraryDir, dest, flags);
+        sForString.parcel(this.nativeLibraryRootDir, dest, flags);
+        dest.writeBoolean(this.nativeLibraryRootRequiresIsa);
+        sForString.parcel(this.primaryCpuAbi, dest, flags);
+        sForString.parcel(this.secondaryCpuAbi, dest, flags);
+        sForString.parcel(this.secondaryNativeLibraryDir, dest, flags);
+        sForString.parcel(this.seInfo, dest, flags);
+        sForString.parcel(this.seInfoUser, dest, flags);
+        dest.writeInt(this.uid);
+        dest.writeBoolean(this.coreApp);
+        dest.writeBoolean(this.system);
+        dest.writeBoolean(this.factoryTest);
+        dest.writeBoolean(this.systemExt);
+        dest.writeBoolean(this.privileged);
+        dest.writeBoolean(this.oem);
+        dest.writeBoolean(this.vendor);
+        dest.writeBoolean(this.product);
+        dest.writeBoolean(this.odm);
+        dest.writeBoolean(this.signedWithPlatformKey);
+    }
+
+    public PackageImpl(Parcel in) {
+        super(in);
+        this.manifestPackageName = sForString.unparcel(in);
+        this.stub = in.readBoolean();
+        this.nativeLibraryDir = sForString.unparcel(in);
+        this.nativeLibraryRootDir = sForString.unparcel(in);
+        this.nativeLibraryRootRequiresIsa = in.readBoolean();
+        this.primaryCpuAbi = sForString.unparcel(in);
+        this.secondaryCpuAbi = sForString.unparcel(in);
+        this.secondaryNativeLibraryDir = sForString.unparcel(in);
+        this.seInfo = sForString.unparcel(in);
+        this.seInfoUser = sForString.unparcel(in);
+        this.uid = in.readInt();
+        this.coreApp = in.readBoolean();
+        this.system = in.readBoolean();
+        this.factoryTest = in.readBoolean();
+        this.systemExt = in.readBoolean();
+        this.privileged = in.readBoolean();
+        this.oem = in.readBoolean();
+        this.vendor = in.readBoolean();
+        this.product = in.readBoolean();
+        this.odm = in.readBoolean();
+        this.signedWithPlatformKey = in.readBoolean();
+    }
+
+    public static final Creator<PackageImpl> CREATOR = new Creator<PackageImpl>() {
+        @Override
+        public PackageImpl createFromParcel(Parcel source) {
+            return new PackageImpl(source);
+        }
+
+        @Override
+        public PackageImpl[] newArray(int size) {
+            return new PackageImpl[size];
+        }
+    };
+
+    @NonNull
+    @Override
+    public String getManifestPackageName() {
+        return manifestPackageName;
+    }
+
+    @DataClass.Generated.Member
+    public boolean isStub() {
+        return stub;
+    }
+
+    @Nullable
+    @Override
+    public String getNativeLibraryDir() {
+        return nativeLibraryDir;
+    }
+
+    @Nullable
+    @Override
+    public String getNativeLibraryRootDir() {
+        return nativeLibraryRootDir;
+    }
+
+    @Override
+    public boolean isNativeLibraryRootRequiresIsa() {
+        return nativeLibraryRootRequiresIsa;
+    }
+
+    @Nullable
+    @Override
+    public String getPrimaryCpuAbi() {
+        return primaryCpuAbi;
+    }
+
+    @Nullable
+    @Override
+    public String getSecondaryCpuAbi() {
+        return secondaryCpuAbi;
+    }
+
+    @Nullable
+    @Override
+    public String getSecondaryNativeLibraryDir() {
+        return secondaryNativeLibraryDir;
+    }
+
+    @Nullable
+    @Override
+    public String getSeInfo() {
+        return seInfo;
+    }
+
+    @Nullable
+    @Override
+    public String getSeInfoUser() {
+        return seInfoUser;
+    }
+
+    @Override
+    public boolean isCoreApp() {
+        return coreApp;
+    }
+
+    @Override
+    public boolean isSystem() {
+        return system;
+    }
+
+    @Override
+    public boolean isFactoryTest() {
+        return factoryTest;
+    }
+
+    @Override
+    public boolean isSystemExt() {
+        return systemExt;
+    }
+
+    @Override
+    public boolean isPrivileged() {
+        return privileged;
+    }
+
+    @Override
+    public boolean isOem() {
+        return oem;
+    }
+
+    @Override
+    public boolean isVendor() {
+        return vendor;
+    }
+
+    @Override
+    public boolean isProduct() {
+        return product;
+    }
+
+    @Override
+    public boolean isOdm() {
+        return odm;
+    }
+
+    @Override
+    public boolean isSignedWithPlatformKey() {
+        return signedWithPlatformKey;
+    }
+
+    /**
+     * This is an appId, the uid if the userId is == USER_SYSTEM
+     */
+    @Override
+    public int getUid() {
+        return uid;
+    }
+
+    @DataClass.Generated.Member
+    public PackageImpl setStub(boolean value) {
+        stub = value;
+        return this;
+    }
+
+    @Override
+    public PackageImpl setNativeLibraryRootRequiresIsa(boolean value) {
+        nativeLibraryRootRequiresIsa = value;
+        return this;
+    }
+
+    @Override
+    public PackageImpl setSystem(boolean value) {
+        system = value;
+        return this;
+    }
+
+    @Override
+    public PackageImpl setFactoryTest(boolean value) {
+        factoryTest = value;
+        return this;
+    }
+
+    @Override
+    public PackageImpl setSystemExt(boolean value) {
+        systemExt = value;
+        return this;
+    }
+
+    @Override
+    public PackageImpl setPrivileged(boolean value) {
+        privileged = value;
+        return this;
+    }
+
+    @Override
+    public PackageImpl setOem(boolean value) {
+        oem = value;
+        return this;
+    }
+
+    @Override
+    public PackageImpl setVendor(boolean value) {
+        vendor = value;
+        return this;
+    }
+
+    @Override
+    public PackageImpl setProduct(boolean value) {
+        product = value;
+        return this;
+    }
+
+    @Override
+    public PackageImpl setOdm(boolean value) {
+        odm = value;
+        return this;
+    }
+
+    @Override
+    public PackageImpl setSignedWithPlatformKey(boolean value) {
+        signedWithPlatformKey = value;
+        return this;
+    }
+
+    /**
+     * This is an appId, the uid if the userId is == USER_SYSTEM
+     */
+    @Override
+    public PackageImpl setUid(int value) {
+        uid = value;
+        return this;
+    }
+
+    @DataClass.Generated(
+            time = 1580517688900L,
+            codegenVersion = "1.0.14",
+            sourceFile = "frameworks/base/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java",
+            inputSignatures = "private final @android.annotation.NonNull @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String manifestPackageName\nprivate  boolean stub\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String nativeLibraryDir\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String nativeLibraryRootDir\nprivate  boolean nativeLibraryRootRequiresIsa\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String primaryCpuAbi\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String secondaryCpuAbi\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String secondaryNativeLibraryDir\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String seInfo\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String seInfoUser\nprivate  boolean system\nprivate  boolean factoryTest\nprivate  boolean systemExt\nprivate  boolean privileged\nprivate  boolean oem\nprivate  boolean vendor\nprivate  boolean product\nprivate  boolean odm\nprivate  boolean signedWithPlatformKey\nprivate  int uid\npublic static final  com.android.server.pm.parsing.pkg.Creator<com.android.server.pm.parsing.pkg.PackageImpl> CREATOR\npublic static  com.android.server.pm.parsing.pkg.PackageImpl forParsing(java.lang.String,java.lang.String,java.lang.String,android.content.res.TypedArray,boolean)\npublic static  com.android.server.pm.parsing.pkg.AndroidPackage buildFakeForDeletion(java.lang.String,java.lang.String)\npublic static @com.android.internal.annotations.VisibleForTesting android.content.pm.parsing.ParsingPackage forTesting(java.lang.String)\npublic static @com.android.internal.annotations.VisibleForTesting android.content.pm.parsing.ParsingPackage forTesting(java.lang.String,java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.ParsedPackage hideAsParsed()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.AndroidPackage hideAsFinal()\npublic @java.lang.Override long getLongVersionCode()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl removePermission(int)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl addUsesOptionalLibrary(int,java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl addUsesLibrary(int,java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl removeUsesLibrary(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl removeUsesOptionalLibrary(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSigningDetails(android.content.pm.PackageParser.SigningDetails)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setRestrictUpdateHash(byte)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setRealPackage(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setPersistent(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setDefaultToDeviceProtectedStorage(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setDirectBootAware(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl clearProtectedBroadcasts()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl clearOriginalPackages()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl clearAdoptPermissions()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setCodePath(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setPackageName(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setAllComponentsDirectBootAware(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setBaseCodePath(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setNativeLibraryDir(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setNativeLibraryRootDir(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setPrimaryCpuAbi(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSecondaryCpuAbi(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSecondaryNativeLibraryDir(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSeInfo(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSeInfoUser(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSplitCodePaths(java.lang.String[])\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl capPermissionPriorities()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl markNotActivitiesAsNotExportedIfSingleUser()\npublic @java.lang.Override java.util.UUID getStorageUuid()\npublic @java.lang.Deprecated @java.lang.Override java.lang.String toAppInfoToString()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.ParsedPackage setCoreApp(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.ParsedPackage setVersionCode(int)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.ParsedPackage setVersionCodeMajor(int)\npublic @java.lang.Override android.content.pm.ApplicationInfo toAppInfoWithoutState()\npublic @java.lang.Override int describeContents()\npublic @java.lang.Override void writeToParcel(android.os.Parcel,int)\nclass PackageImpl extends android.content.pm.parsing.ParsingPackageImpl implements [com.android.server.pm.parsing.pkg.ParsedPackage, com.android.server.pm.parsing.pkg.AndroidPackage]\n@com.android.internal.util.DataClass(genConstructor=false, genParcelable=false, genAidl=false, genBuilder=false, genHiddenConstructor=false, genCopyConstructor=false)")
+    @Deprecated
+    private void __metadata() {}
+
+
+    //@formatter:on
+    // End of generated code
+
+}
diff --git a/services/core/java/com/android/server/pm/parsing/pkg/ParsedPackage.java b/services/core/java/com/android/server/pm/parsing/pkg/ParsedPackage.java
new file mode 100644
index 0000000..2660f2b
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/pkg/ParsedPackage.java
@@ -0,0 +1,120 @@
+/*
+ * 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.parsing.pkg;
+
+import android.annotation.Nullable;
+import android.content.pm.PackageParser;
+
+/**
+ * Methods used for mutation after direct package parsing, mostly done inside
+ * {@link com.android.server.pm.PackageManagerService}.
+ *
+ * Java disallows defining this as an inner interface, so this must be a separate file.
+ *
+ * @hide
+ */
+public interface ParsedPackage extends AndroidPackage {
+
+    AndroidPackage hideAsFinal();
+
+    ParsedPackage addUsesLibrary(int index, String libraryName);
+
+    ParsedPackage addUsesOptionalLibrary(int index, String libraryName);
+
+    ParsedPackage capPermissionPriorities();
+
+    ParsedPackage clearAdoptPermissions();
+
+    ParsedPackage clearOriginalPackages();
+
+    ParsedPackage clearProtectedBroadcasts();
+
+    ParsedPackage setBaseCodePath(String baseCodePath);
+
+    ParsedPackage setCodePath(String codePath);
+
+    ParsedPackage setNativeLibraryDir(String nativeLibraryDir);
+
+    ParsedPackage setNativeLibraryRootDir(String nativeLibraryRootDir);
+
+    ParsedPackage setPackageName(String packageName);
+
+    ParsedPackage setPrimaryCpuAbi(String primaryCpuAbi);
+
+    ParsedPackage setRealPackage(@Nullable String realPackage);
+
+    ParsedPackage setSecondaryCpuAbi(String secondaryCpuAbi);
+
+    ParsedPackage setSigningDetails(PackageParser.SigningDetails signingDetails);
+
+    ParsedPackage setSplitCodePaths(String[] splitCodePaths);
+
+    ParsedPackage setNativeLibraryRootRequiresIsa(boolean nativeLibraryRootRequiresIsa);
+
+    ParsedPackage setAllComponentsDirectBootAware(boolean allComponentsDirectBootAware);
+
+    ParsedPackage setFactoryTest(boolean factoryTest);
+
+    ParsedPackage markNotActivitiesAsNotExportedIfSingleUser();
+
+    ParsedPackage setOdm(boolean odm);
+
+    ParsedPackage setOem(boolean oem);
+
+    ParsedPackage setPrivileged(boolean privileged);
+
+    ParsedPackage setProduct(boolean product);
+
+    ParsedPackage setSignedWithPlatformKey(boolean signedWithPlatformKey);
+
+    ParsedPackage setSystem(boolean system);
+
+    ParsedPackage setSystemExt(boolean systemExt);
+
+    ParsedPackage setVendor(boolean vendor);
+
+    ParsedPackage removePermission(int index);
+
+    ParsedPackage removeUsesLibrary(String libraryName);
+
+    ParsedPackage removeUsesOptionalLibrary(String libraryName);
+
+    ParsedPackage setCoreApp(boolean coreApp);
+
+    ParsedPackage setStub(boolean isStub);
+
+    ParsedPackage setRestrictUpdateHash(byte[] restrictUpdateHash);
+
+    ParsedPackage setSeInfo(String seInfo);
+
+    ParsedPackage setSeInfoUser(String seInfoUser);
+
+    ParsedPackage setSecondaryNativeLibraryDir(String secondaryNativeLibraryDir);
+
+    ParsedPackage setUid(int uid);
+
+    ParsedPackage setVersionCode(int versionCode);
+
+    ParsedPackage setVersionCodeMajor(int versionCodeMajor);
+
+    // TODO(b/135203078): Move logic earlier in parse chain so nothing needs to be reverted
+    ParsedPackage setDefaultToDeviceProtectedStorage(boolean defaultToDeviceProtectedStorage);
+
+    ParsedPackage setDirectBootAware(boolean directBootAware);
+
+    ParsedPackage setPersistent(boolean persistent);
+}
diff --git a/services/core/java/com/android/server/pm/parsing/pkg/PkgAppInfo.java b/services/core/java/com/android/server/pm/parsing/pkg/PkgAppInfo.java
new file mode 100644
index 0000000..0cb425f
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/pkg/PkgAppInfo.java
@@ -0,0 +1,493 @@
+/*
+ * 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.parsing.pkg;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.ApplicationInfo;
+import android.util.SparseArray;
+
+import com.android.internal.R;
+
+/**
+ * Container for fields that are eventually exposed through {@link ApplicationInfo}.
+ *
+ * Done to separate the meaningless, re-directed JavaDoc for methods and to separate what's
+ * exposed vs not exposed to core.
+ *
+ * @hide
+ */
+interface PkgAppInfo {
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_CANT_SAVE_STATE */
+    boolean isCantSaveState();
+
+    /**
+     * @see ApplicationInfo#appComponentFactory
+     * @see R.styleable#AndroidManifestApplication_appComponentFactory
+     */
+    @Nullable
+    String getAppComponentFactory();
+
+    /**
+     * @see ApplicationInfo#backupAgentName
+     * @see R.styleable#AndroidManifestApplication_backupAgent
+     */
+    @Nullable
+    String getBackupAgentName();
+
+    /**
+     * @see ApplicationInfo#banner
+     * @see R.styleable#AndroidManifestApplication_banner
+     */
+    int getBanner();
+
+    /**
+     * @see ApplicationInfo#category
+     * @see R.styleable#AndroidManifestApplication_appCategory
+     */
+    int getCategory();
+
+    /**
+     * @see ApplicationInfo#classLoaderName
+     * @see R.styleable#AndroidManifestApplication_classLoader
+     */
+    @Nullable
+    String getClassLoaderName();
+
+    /**
+     * @see ApplicationInfo#className
+     * @see R.styleable#AndroidManifestApplication_name
+     */
+    @Nullable
+    String getClassName();
+
+    /**
+     * @see ApplicationInfo#compatibleWidthLimitDp
+     * @see R.styleable#AndroidManifestSupportsScreens_compatibleWidthLimitDp
+     */
+    int getCompatibleWidthLimitDp();
+
+    /**
+     * @see ApplicationInfo#compileSdkVersion
+     * @see R.styleable#AndroidManifest_compileSdkVersion
+     */
+    int getCompileSdkVersion();
+
+    /**
+     * @see ApplicationInfo#compileSdkVersionCodename
+     * @see R.styleable#AndroidManifest_compileSdkVersionCodename
+     */
+    @Nullable
+    String getCompileSdkVersionCodeName();
+
+    /**
+     * @see ApplicationInfo#descriptionRes
+     * @see R.styleable#AndroidManifestApplication_description
+     */
+    int getDescriptionRes();
+
+    /**
+     * @see ApplicationInfo#fullBackupContent
+     * @see R.styleable#AndroidManifestApplication_fullBackupContent
+     */
+    int getFullBackupContent();
+
+    /**
+     * @see ApplicationInfo#iconRes
+     * @see R.styleable#AndroidManifestApplication_icon
+     */
+    int getIconRes();
+
+    /**
+     * @see ApplicationInfo#labelRes
+     * @see R.styleable#AndroidManifestApplication_label
+     */
+    int getLabelRes();
+
+    /**
+     * @see ApplicationInfo#largestWidthLimitDp
+     * @see R.styleable#AndroidManifestSupportsScreens_largestWidthLimitDp
+     */
+    int getLargestWidthLimitDp();
+
+    /**
+     * @see ApplicationInfo#logo
+     * @see R.styleable#AndroidManifestApplication_logo
+     */
+    int getLogo();
+
+    /**
+     * @see ApplicationInfo#manageSpaceActivityName
+     * @see R.styleable#AndroidManifestApplication_manageSpaceActivity
+     */
+    @Nullable
+    String getManageSpaceActivityName();
+
+    /**
+     * @see ApplicationInfo#maxAspectRatio
+     * @see R.styleable#AndroidManifestApplication_maxAspectRatio
+     */
+    float getMaxAspectRatio();
+
+    /**
+     * @see ApplicationInfo#minAspectRatio
+     * @see R.styleable#AndroidManifestApplication_minAspectRatio
+     */
+    float getMinAspectRatio();
+
+    /**
+     * @see ApplicationInfo#minSdkVersion
+     * @see R.styleable#AndroidManifestUsesSdk_minSdkVersion
+     */
+    int getMinSdkVersion();
+
+    /** @see ApplicationInfo#nativeLibraryDir */
+    @Nullable
+    String getNativeLibraryDir();
+
+    /** @see ApplicationInfo#nativeLibraryRootDir */
+    @Nullable
+    String getNativeLibraryRootDir();
+
+    /**
+     * @see ApplicationInfo#networkSecurityConfigRes
+     * @see R.styleable#AndroidManifestApplication_networkSecurityConfig
+     */
+    int getNetworkSecurityConfigRes();
+
+    /**
+     * If {@link R.styleable#AndroidManifestApplication_label} is a string literal, this is it.
+     * Otherwise, it's stored as {@link #getLabelRes()}.
+     * @see ApplicationInfo#nonLocalizedLabel
+     * @see R.styleable#AndroidManifestApplication_label
+     */
+    @Nullable
+    CharSequence getNonLocalizedLabel();
+
+    /**
+     * @see ApplicationInfo#permission
+     * @see R.styleable#AndroidManifestApplication_permission
+     */
+    @Nullable
+    String getPermission();
+
+    /**
+     * TODO(b/135203078): Hide this in the utility, should never be accessed directly
+     * @see ApplicationInfo#primaryCpuAbi
+     */
+    @Nullable
+    String getPrimaryCpuAbi();
+
+    /**
+     * @see ApplicationInfo#processName
+     * @see R.styleable#AndroidManifestApplication_process
+     */
+    @NonNull
+    String getProcessName();
+
+    /**
+     * @see ApplicationInfo#requiresSmallestWidthDp
+     * @see R.styleable#AndroidManifestSupportsScreens_requiresSmallestWidthDp
+     */
+    int getRequiresSmallestWidthDp();
+
+    /**
+     * @see ApplicationInfo#roundIconRes
+     * @see R.styleable#AndroidManifestApplication_roundIcon
+     */
+    int getRoundIconRes();
+
+    /** @see ApplicationInfo#seInfo */
+    @Nullable
+    String getSeInfo();
+
+    /** @see ApplicationInfo#seInfoUser */
+    @Nullable
+    String getSeInfoUser();
+
+    /** @see ApplicationInfo#secondaryCpuAbi */
+    @Nullable
+    String getSecondaryCpuAbi();
+
+    /** @see ApplicationInfo#secondaryNativeLibraryDir */
+    @Nullable
+    String getSecondaryNativeLibraryDir();
+
+    /**
+     * @see ApplicationInfo#installLocation
+     * @see R.styleable#AndroidManifest_installLocation
+     */
+    int getInstallLocation();
+
+    /**
+     * @see ApplicationInfo#splitClassLoaderNames
+     * @see R.styleable#AndroidManifestApplication_classLoader
+     */
+    @Nullable
+    String[] getSplitClassLoaderNames();
+
+    /** @see ApplicationInfo#splitSourceDirs */
+    @Nullable
+    String[] getSplitCodePaths();
+
+    /** @see ApplicationInfo#splitDependencies */
+    @Nullable
+    SparseArray<int[]> getSplitDependencies();
+
+    /**
+     * @see ApplicationInfo#targetSandboxVersion
+     * @see R.styleable#AndroidManifest_targetSandboxVersion
+     */
+    @Deprecated
+    int getTargetSandboxVersion();
+
+    /**
+     * @see ApplicationInfo#targetSdkVersion
+     * @see R.styleable#AndroidManifestUsesSdk_targetSdkVersion
+     */
+    int getTargetSdkVersion();
+
+    /**
+     * @see ApplicationInfo#taskAffinity
+     * @see R.styleable#AndroidManifestApplication_taskAffinity
+     */
+    @Nullable
+    String getTaskAffinity();
+
+    /**
+     * @see ApplicationInfo#theme
+     * @see R.styleable#AndroidManifestApplication_theme
+     */
+    int getTheme();
+
+    /**
+     * @see ApplicationInfo#uiOptions
+     * @see R.styleable#AndroidManifestApplication_uiOptions
+     */
+    int getUiOptions();
+
+    /** @see ApplicationInfo#uid */
+    int getUid();
+
+    /** @see ApplicationInfo#longVersionCode */
+    long getLongVersionCode();
+
+    /** @see ApplicationInfo#versionCode */
+    @Deprecated
+    int getVersionCode();
+
+    /** @see ApplicationInfo#volumeUuid */
+    @Nullable
+    String getVolumeUuid();
+
+    /** @see ApplicationInfo#zygotePreloadName */
+    @Nullable
+    String getZygotePreloadName();
+
+    /** @see ApplicationInfo#FLAG_HAS_CODE */
+    boolean isHasCode();
+
+    /** @see ApplicationInfo#FLAG_ALLOW_TASK_REPARENTING */
+    boolean isAllowTaskReparenting();
+
+    /** @see ApplicationInfo#FLAG_MULTIARCH */
+    boolean isMultiArch();
+
+    /** @see ApplicationInfo#FLAG_EXTRACT_NATIVE_LIBS */
+    boolean isExtractNativeLibs();
+
+    /** @see ApplicationInfo#FLAG_DEBUGGABLE */
+    boolean isDebuggable();
+
+    /** @see ApplicationInfo#FLAG_VM_SAFE_MODE */
+    boolean isVmSafeMode();
+
+    /** @see ApplicationInfo#FLAG_PERSISTENT */
+    boolean isPersistent();
+
+    /** @see ApplicationInfo#FLAG_ALLOW_BACKUP */
+    boolean isAllowBackup();
+
+    /** @see ApplicationInfo#FLAG_TEST_ONLY */
+    boolean isTestOnly();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION */
+    boolean isResizeableActivityViaSdkVersion();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_HAS_DOMAIN_URLS */
+    boolean isHasDomainUrls();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE */
+    boolean isRequestLegacyExternalStorage();
+
+    /** @see ApplicationInfo#FLAG_HARDWARE_ACCELERATED */
+    boolean isBaseHardwareAccelerated();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE */
+    boolean isDefaultToDeviceProtectedStorage();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_DIRECT_BOOT_AWARE */
+    boolean isDirectBootAware();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE */
+    boolean isPartiallyDirectBootAware();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_USE_EMBEDDED_DEX */
+    boolean isUseEmbeddedDex();
+
+    /** @see ApplicationInfo#FLAG_EXTERNAL_STORAGE */
+    boolean isExternalStorage();
+
+    /** @see ApplicationInfo#nativeLibraryRootRequiresIsa */
+    boolean isNativeLibraryRootRequiresIsa();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_ODM */
+    boolean isOdm();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_OEM */
+    boolean isOem();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_PRIVILEGED */
+    boolean isPrivileged();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_PRODUCT */
+    boolean isProduct();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_PROFILEABLE_BY_SHELL */
+    boolean isProfileableByShell();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_STATIC_SHARED_LIBRARY */
+    boolean isStaticSharedLibrary();
+
+    /** @see ApplicationInfo#FLAG_SYSTEM */
+    boolean isSystem();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_SYSTEM_EXT */
+    boolean isSystemExt();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_VENDOR */
+    boolean isVendor();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_ISOLATED_SPLIT_LOADING */
+    boolean isIsolatedSplitLoading();
+
+    /**
+     * @see ApplicationInfo#enabled
+     * @see R.styleable#AndroidManifestApplication_enabled
+     */
+    boolean isEnabled();
+
+    /**
+     * @see ApplicationInfo#PRIVATE_FLAG_IS_RESOURCE_OVERLAY
+     * @see ApplicationInfo#isResourceOverlay()
+     */
+    boolean isOverlay();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_USES_NON_SDK_API */
+    boolean isUsesNonSdkApi();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY */
+    boolean isSignedWithPlatformKey();
+
+    /** @see ApplicationInfo#FLAG_KILL_AFTER_RESTORE */
+    boolean isKillAfterRestore();
+
+    /** @see ApplicationInfo#FLAG_RESTORE_ANY_VERSION */
+    boolean isRestoreAnyVersion();
+
+    /** @see ApplicationInfo#FLAG_FULL_BACKUP_ONLY */
+    boolean isFullBackupOnly();
+
+    /** @see ApplicationInfo#FLAG_ALLOW_CLEAR_USER_DATA */
+    boolean isAllowClearUserData();
+
+    /** @see ApplicationInfo#FLAG_LARGE_HEAP */
+    boolean isLargeHeap();
+
+    /** @see ApplicationInfo#FLAG_USES_CLEARTEXT_TRAFFIC */
+    boolean isUsesCleartextTraffic();
+
+    /** @see ApplicationInfo#FLAG_SUPPORTS_RTL */
+    boolean isSupportsRtl();
+
+    /** @see ApplicationInfo#FLAG_IS_GAME */
+    @Deprecated
+    boolean isGame();
+
+    /** @see ApplicationInfo#FLAG_FACTORY_TEST */
+    boolean isFactoryTest();
+
+    /**
+     * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >=
+     * {@link android.os.Build.VERSION_CODES#DONUT}.
+     * @see R.styleable#AndroidManifestSupportsScreens_smallScreens
+     * @see ApplicationInfo#FLAG_SUPPORTS_SMALL_SCREENS
+     */
+    boolean isSupportsSmallScreens();
+
+    /**
+     * If omitted from manifest, returns true.
+     * @see R.styleable#AndroidManifestSupportsScreens_normalScreens
+     * @see ApplicationInfo#FLAG_SUPPORTS_NORMAL_SCREENS
+     */
+    boolean isSupportsNormalScreens();
+
+    /**
+     * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >=
+     * {@link android.os.Build.VERSION_CODES#DONUT}.
+     * @see R.styleable#AndroidManifestSupportsScreens_largeScreens
+     * @see ApplicationInfo#FLAG_SUPPORTS_LARGE_SCREENS
+     */
+    boolean isSupportsLargeScreens();
+
+    /**
+     * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >=
+     * {@link android.os.Build.VERSION_CODES#GINGERBREAD}.
+     * @see R.styleable#AndroidManifestSupportsScreens_xlargeScreens
+     * @see ApplicationInfo#FLAG_SUPPORTS_XLARGE_SCREENS
+     */
+    boolean isSupportsExtraLargeScreens();
+
+    /**
+     * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >=
+     * {@link android.os.Build.VERSION_CODES#DONUT}.
+     * @see R.styleable#AndroidManifestSupportsScreens_resizeable
+     * @see ApplicationInfo#FLAG_RESIZEABLE_FOR_SCREENS
+     */
+    boolean isResizeable();
+
+    /**
+     * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >=
+     * {@link android.os.Build.VERSION_CODES#DONUT}.
+     * @see R.styleable#AndroidManifestSupportsScreens_anyDensity
+     * @see ApplicationInfo#FLAG_SUPPORTS_SCREEN_DENSITIES
+     */
+    boolean isAnyDensity();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_BACKUP_IN_FOREGROUND */
+    boolean isBackupInForeground();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_ALLOW_CLEAR_USER_DATA_ON_FAILED_RESTORE */
+    boolean isAllowClearUserDataOnFailedRestore();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE */
+    boolean isAllowAudioPlaybackCapture();
+
+    /** @see ApplicationInfo#PRIVATE_FLAG_HAS_FRAGILE_USER_DATA */
+    boolean isHasFragileUserData();
+}
diff --git a/services/core/java/com/android/server/pm/parsing/pkg/PkgPackageInfo.java b/services/core/java/com/android/server/pm/parsing/pkg/PkgPackageInfo.java
new file mode 100644
index 0000000..89330a9
--- /dev/null
+++ b/services/core/java/com/android/server/pm/parsing/pkg/PkgPackageInfo.java
@@ -0,0 +1,225 @@
+/*
+ * 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.parsing.pkg;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ConfigurationInfo;
+import android.content.pm.FeatureGroupInfo;
+import android.content.pm.FeatureInfo;
+import android.content.pm.InstrumentationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PermissionInfo;
+import android.content.pm.ProviderInfo;
+import android.content.pm.ServiceInfo;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedInstrumentation;
+import android.content.pm.parsing.component.ParsedPermission;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedService;
+
+import com.android.internal.R;
+
+import java.util.List;
+
+/**
+ * Container for fields that are eventually exposed through {@link PackageInfo}.
+ *
+ * Done to separate the meaningless, re-directed JavaDoc for methods and to separate what's
+ * exposed vs not exposed to core.
+ *
+ * @hide
+ */
+interface PkgPackageInfo {
+
+    /**
+     * @see PackageInfo#overlayCategory
+     * @see R.styleable#AndroidManifestResourceOverlay_category
+     */
+    @Nullable
+    String getOverlayCategory();
+
+    /**
+     * @see PackageInfo#overlayPriority
+     * @see R.styleable#AndroidManifestResourceOverlay_priority
+     */
+    int getOverlayPriority();
+
+    /**
+     * @see PackageInfo#overlayTarget
+     * @see R.styleable#AndroidManifestResourceOverlay_targetPackage
+     */
+    @Nullable
+    String getOverlayTarget();
+
+    /**
+     * @see PackageInfo#targetOverlayableName
+     * @see R.styleable#AndroidManifestResourceOverlay_targetName
+     */
+    @Nullable
+    String getOverlayTargetName();
+
+    /**
+     * @see PackageInfo#sharedUserId
+     * @see R.styleable#AndroidManifest_sharedUserId
+     */
+    @Deprecated
+    @Nullable
+    String getSharedUserId();
+
+    /**
+     * @see PackageInfo#sharedUserLabel
+     * @see R.styleable#AndroidManifest_sharedUserLabel
+     */
+    @Deprecated
+    int getSharedUserLabel();
+
+    /**
+     * The required account type without which this application will not function.
+     *
+     * @see PackageInfo#requiredAccountType
+     * @see R.styleable#AndroidManifestApplication_requiredAccountType
+     */
+    @Nullable
+    String getRequiredAccountType();
+
+    /**
+     * The restricted account authenticator type that is used by this application
+     *
+     * @see PackageInfo#restrictedAccountType
+     * @see R.styleable#AndroidManifestApplication_restrictedAccountType
+     */
+    @Nullable
+    String getRestrictedAccountType();
+
+    /** @see PackageInfo#splitRevisionCodes */
+    int[] getSplitRevisionCodes();
+
+    /** @see PackageInfo#getLongVersionCode() */
+    long getLongVersionCode();
+
+    /** @see PackageInfo#versionCode */
+    @Deprecated
+    int getVersionCode();
+
+    /** @see PackageInfo#versionCodeMajor */
+    int getVersionCodeMajor();
+
+    /** @see PackageInfo#versionName */
+    @Nullable
+    String getVersionName();
+
+    /** @see PackageInfo#mOverlayIsStatic */
+    boolean isOverlayIsStatic();
+
+    /**
+     * @see PackageInfo#requiredForAllUsers
+     * @see R.styleable#AndroidManifestApplication_requiredForAllUsers
+     */
+    boolean isRequiredForAllUsers();
+
+    /**
+     * @see PackageInfo#reqFeatures
+     * @see R.styleable#AndroidManifestUsesFeature
+     */
+    @NonNull
+    List<FeatureInfo> getReqFeatures();
+
+    /**
+     * @see PackageInfo#configPreferences
+     * @see R.styleable#AndroidManifestUsesConfiguration
+     */
+    @NonNull
+    List<ConfigurationInfo> getConfigPreferences();
+
+    /**
+     * @see PackageInfo#featureGroups
+     * @see R.styleable#AndroidManifestUsesFeature
+     */
+    @NonNull
+    List<FeatureGroupInfo> getFeatureGroups();
+
+    /**
+     * Whether or not the package is a stub and must be replaced by the full version.
+     *
+     * @see PackageInfo#isStub
+     */
+    boolean isStub();
+
+    /**
+     * For marking packages required for a minimal boot state, through the "coreApp" manifest
+     * attribute.
+     * @see PackageInfo#coreApp
+     */
+    boolean isCoreApp();
+
+    /**
+     * All the permissions declared. This is an effective set, and may include permissions
+     * transformed from split/migrated permissions from previous versions, so may not be exactly
+     * what the package declares in its manifest.
+     * @see PackageInfo#requestedPermissions
+     * @see R.styleable#AndroidManifestUsesPermission
+     */
+    @NonNull
+    List<String> getRequestedPermissions();
+
+    /**
+     * @see ActivityInfo
+     * @see PackageInfo#activities
+     */
+    @NonNull
+    List<ParsedActivity> getActivities();
+
+    /**
+     * @see InstrumentationInfo
+     * @see PackageInfo#instrumentation
+     */
+    @NonNull
+    List<ParsedInstrumentation> getInstrumentations();
+
+    /**
+     * @see PermissionInfo
+     * @see PackageInfo#permissions
+     */
+    @NonNull
+    List<ParsedPermission> getPermissions();
+
+    /**
+     * @see ProviderInfo
+     * @see PackageInfo#providers
+     */
+    @NonNull
+    List<ParsedProvider> getProviders();
+
+    /**
+     * Since they share several attributes, receivers are parsed as {@link ParsedActivity}, even
+     * though they represent different functionality.
+     * TODO(b/135203078): Reconsider this and maybe make ParsedReceiver so it's not so confusing
+     * @see ActivityInfo
+     * @see PackageInfo#receivers
+     */
+    @NonNull
+    List<ParsedActivity> getReceivers();
+
+    /**
+     * @see ServiceInfo
+     * @see PackageInfo#services
+     */
+    @NonNull
+    List<ParsedService> getServices();
+}
diff --git a/services/core/java/com/android/server/pm/permission/BasePermission.java b/services/core/java/com/android/server/pm/permission/BasePermission.java
index e323c98..f8e5082 100644
--- a/services/core/java/com/android/server/pm/permission/BasePermission.java
+++ b/services/core/java/com/android/server/pm/permission/BasePermission.java
@@ -32,9 +32,7 @@
 import android.content.pm.PackageManagerInternal;
 import android.content.pm.PermissionInfo;
 import android.content.pm.Signature;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermission;
-import android.content.pm.parsing.PackageInfoUtils;
+import android.content.pm.parsing.component.ParsedPermission;
 import android.os.UserHandle;
 import android.util.Log;
 import android.util.Slog;
@@ -43,6 +41,8 @@
 import com.android.server.pm.PackageManagerService;
 import com.android.server.pm.PackageSetting;
 import com.android.server.pm.PackageSettingBase;
+import com.android.server.pm.parsing.PackageInfoUtils;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlSerializer;
@@ -172,12 +172,12 @@
         return 0;
     }
 
-    public boolean isPermission(@NonNull ParsedPermission perm) {
+    public boolean isPermission(ParsedPermission perm) {
         if (this.perm == null) {
             return false;
         }
         return Objects.equals(this.perm.getPackageName(), perm.getPackageName())
-                && Objects.equals(this.perm.className, perm.className);
+                && Objects.equals(this.perm.getName(), perm.getName());
     }
 
     public boolean isDynamic() {
@@ -195,24 +195,24 @@
     }
 
     public boolean isRemoved() {
-        return perm != null && (perm.flags & PermissionInfo.FLAG_REMOVED) != 0;
+        return perm != null && (perm.getFlags() & PermissionInfo.FLAG_REMOVED) != 0;
     }
 
     public boolean isSoftRestricted() {
-        return perm != null && (perm.flags & PermissionInfo.FLAG_SOFT_RESTRICTED) != 0;
+        return perm != null && (perm.getFlags() & PermissionInfo.FLAG_SOFT_RESTRICTED) != 0;
     }
 
     public boolean isHardRestricted() {
-        return perm != null && (perm.flags & PermissionInfo.FLAG_HARD_RESTRICTED) != 0;
+        return perm != null && (perm.getFlags() & PermissionInfo.FLAG_HARD_RESTRICTED) != 0;
     }
 
     public boolean isHardOrSoftRestricted() {
-        return perm != null && (perm.flags & (PermissionInfo.FLAG_HARD_RESTRICTED
+        return perm != null && (perm.getFlags() & (PermissionInfo.FLAG_HARD_RESTRICTED
                 | PermissionInfo.FLAG_SOFT_RESTRICTED)) != 0;
     }
 
     public boolean isImmutablyRestricted() {
-        return perm != null && (perm.flags & PermissionInfo.FLAG_IMMUTABLY_RESTRICTED) != 0;
+        return perm != null && (perm.getFlags() & PermissionInfo.FLAG_IMMUTABLY_RESTRICTED) != 0;
     }
 
     public boolean isSignature() {
@@ -326,15 +326,8 @@
             final BasePermission tree = findPermissionTree(permissionTrees, name);
             if (tree != null && tree.perm != null) {
                 sourcePackageSetting = tree.sourcePackageSetting;
-                perm = new ParsedPermission(tree.perm);
-                perm.protectionLevel = pendingPermissionInfo.protectionLevel;
-                perm.flags = pendingPermissionInfo.flags;
-                perm.setGroup(pendingPermissionInfo.group);
-                perm.backgroundPermission = pendingPermissionInfo.backgroundPermission;
-                perm.descriptionRes = pendingPermissionInfo.descriptionRes;
-                perm.requestRes = pendingPermissionInfo.requestRes;
-                perm.setPackageName(tree.perm.getPackageName());
-                perm.setName(name);
+                perm = new ParsedPermission(tree.perm, pendingPermissionInfo,
+                        tree.perm.getPackageName(), name);
                 uid = tree.uid;
             }
         }
@@ -364,7 +357,7 @@
             if (pkg.isSystem()) {
                 if (bp.type == BasePermission.TYPE_BUILTIN && bp.perm == null) {
                     // It's a built-in permission and no owner, take ownership now
-                    p.flags |= PermissionInfo.FLAG_INSTALLED;
+                    p.setFlags(p.getFlags() | PermissionInfo.FLAG_INSTALLED);
                     bp.sourcePackageSetting = pkgSetting;
                     bp.perm = p;
                     bp.uid = pkg.getUid();
@@ -387,7 +380,7 @@
                 final BasePermission tree = findPermissionTree(permissionTrees, p.getName());
                 if (tree == null
                         || tree.sourcePackageName.equals(p.getPackageName())) {
-                    p.flags |= PermissionInfo.FLAG_INSTALLED;
+                    p.setFlags(p.getFlags() | PermissionInfo.FLAG_INSTALLED);
                     bp.sourcePackageSetting = pkgSetting;
                     bp.perm = p;
                     bp.uid = pkg.getUid();
@@ -421,8 +414,8 @@
             r.append(p.getName());
         }
         if (bp.perm != null && Objects.equals(bp.perm.getPackageName(), p.getPackageName())
-                && Objects.equals(bp.perm.className, p.className)) {
-            bp.protectionLevel = p.protectionLevel;
+                && Objects.equals(bp.perm.getName(), p.getName())) {
+            bp.protectionLevel = p.getProtectionLevel();
         }
         if (PackageManagerService.DEBUG_PACKAGE_SCANNING && r != null) {
             Log.d(TAG, "  Permissions: " + r);
@@ -572,9 +565,9 @@
         if (type == BasePermission.TYPE_DYNAMIC) {
             if (perm != null || pendingPermissionInfo != null) {
                 serializer.attribute(null, "type", "dynamic");
-                int icon = perm != null ? perm.icon : pendingPermissionInfo.icon;
+                int icon = perm != null ? perm.getIcon() : pendingPermissionInfo.icon;
                 CharSequence nonLocalizedLabel = perm != null
-                        ? perm.nonLocalizedLabel
+                        ? perm.getNonLocalizedLabel()
                         : pendingPermissionInfo.nonLocalizedLabel;
 
                 if (icon != 0) {
@@ -602,11 +595,11 @@
     }
 
     private static boolean comparePermissionInfos(ParsedPermission pi1, PermissionInfo pi2) {
-        if (pi1.icon != pi2.icon) return false;
-        if (pi1.logo != pi2.logo) return false;
-        if (pi1.protectionLevel != pi2.protectionLevel) return false;
+        if (pi1.getIcon() != pi2.icon) return false;
+        if (pi1.getLogo() != pi2.logo) return false;
+        if (pi1.getProtectionLevel() != pi2.protectionLevel) return false;
         if (!compareStrings(pi1.getName(), pi2.name)) return false;
-        if (!compareStrings(pi1.nonLocalizedLabel, pi2.nonLocalizedLabel)) return false;
+        if (!compareStrings(pi1.getNonLocalizedLabel(), pi2.nonLocalizedLabel)) return false;
         // We'll take care of setting this one.
         if (!compareStrings(pi1.getPackageName(), pi2.packageName)) return false;
         // These are not currently stored in settings.
@@ -644,9 +637,9 @@
                 pw.println(PermissionInfo.protectionToString(protectionLevel));
         if (perm != null) {
             pw.print("    perm="); pw.println(perm);
-            if ((perm.flags & PermissionInfo.FLAG_INSTALLED) == 0
-                    || (perm.flags & PermissionInfo.FLAG_REMOVED) != 0) {
-                pw.print("    flags=0x"); pw.println(Integer.toHexString(perm.flags));
+            if ((perm.getFlags() & PermissionInfo.FLAG_INSTALLED) == 0
+                    || (perm.getFlags() & PermissionInfo.FLAG_REMOVED) != 0) {
+                pw.print("    flags=0x"); pw.println(Integer.toHexString(perm.getFlags()));
             }
         }
         if (sourcePackageSetting != null) {
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 e6eaf21..9c945d5 100644
--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -150,6 +150,12 @@
         ALWAYS_LOCATION_PERMISSIONS.add(Manifest.permission.ACCESS_BACKGROUND_LOCATION);
     }
 
+    private static final Set<String> FOREGROUND_LOCATION_PERMISSIONS = new ArraySet<>();
+    static {
+        ALWAYS_LOCATION_PERMISSIONS.add(Manifest.permission.ACCESS_FINE_LOCATION);
+        ALWAYS_LOCATION_PERMISSIONS.add(Manifest.permission.ACCESS_COARSE_LOCATION);
+    }
+
     private static final Set<String> COARSE_BACKGROUND_LOCATION_PERMISSIONS = new ArraySet<>();
     static {
         COARSE_BACKGROUND_LOCATION_PERMISSIONS.add(Manifest.permission.ACCESS_COARSE_LOCATION);
@@ -587,11 +593,6 @@
                         DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE, userId),
                 userId, CONTACTS_PERMISSIONS);
 
-        // Maps
-        grantPermissionsToSystemPackage(
-                getDefaultSystemHandlerActivityPackageForCategory(Intent.CATEGORY_APP_MAPS, userId),
-                userId, ALWAYS_LOCATION_PERMISSIONS);
-
         // Email
         grantPermissionsToSystemPackage(
                 getDefaultSystemHandlerActivityPackageForCategory(
@@ -609,7 +610,7 @@
             }
         }
         grantPermissionsToPackage(browserPackage, userId, false /* ignoreSystemPackage */,
-                true /*whitelistRestrictedPermissions*/, ALWAYS_LOCATION_PERMISSIONS);
+                true /*whitelistRestrictedPermissions*/, FOREGROUND_LOCATION_PERMISSIONS);
 
         // Voice interaction
         if (voiceInteractPackageNames != null) {
diff --git a/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java b/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java
index b809951..976ce1f 100644
--- a/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java
+++ b/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java
@@ -36,6 +36,8 @@
 
     private static final String LOG_TAG = OneTimePermissionUserManager.class.getSimpleName();
 
+    private static final boolean DEBUG = true;
+
     private final @NonNull Context mContext;
     private final @NonNull ActivityManager mActivityManager;
     private final @NonNull AlarmManager mAlarmManager;
@@ -156,6 +158,14 @@
 
         private PackageInactivityListener(int uid, @NonNull String packageName, long timeout,
                 int importanceToResetTimer, int importanceToKeepSessionAlive) {
+
+            if (DEBUG) {
+                Log.d(LOG_TAG,
+                        "Start tracking " + packageName + ". uid=" + uid + " timeout=" + timeout
+                                + " importanceToResetTimer=" + importanceToResetTimer
+                                + " importanceToKeepSessionAlive=" + importanceToKeepSessionAlive);
+            }
+
             mUid = uid;
             mPackageName = packageName;
             mTimeout = timeout;
@@ -182,6 +192,12 @@
             if (uid != mUid) {
                 return;
             }
+
+
+            if (DEBUG) {
+                Log.d(LOG_TAG, "Importance changed for " + mPackageName + " (" + mUid + ")."
+                        + " importance=" + importance);
+            }
             synchronized (mInnerLock) {
                 if (importance > IMPORTANCE_CACHED) {
                     onPackageInactiveLocked();
@@ -257,8 +273,15 @@
             mIsFinished = true;
             cancelAlarmLocked();
             mContext.getMainThreadHandler().post(
-                    () -> mPermissionControllerManager.notifyOneTimePermissionSessionTimeout(
-                            mPackageName));
+                    () -> {
+                        if (DEBUG) {
+                            Log.d(LOG_TAG, "One time session expired for "
+                                    + mPackageName + " (" + mUid + ").");
+                        }
+
+                        mPermissionControllerManager.notifyOneTimePermissionSessionTimeout(
+                                mPackageName);
+                    });
             mActivityManager.removeOnUidImportanceListener(mStartTimerListener);
             mActivityManager.removeOnUidImportanceListener(mSessionKillableListener);
             mActivityManager.removeOnUidImportanceListener(mGoneListener);
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 1fc2dd5..980aaed 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -71,10 +71,8 @@
 import android.content.pm.ParceledListSlice;
 import android.content.pm.PermissionGroupInfo;
 import android.content.pm.PermissionInfo;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermission;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermissionGroup;
-import android.content.pm.parsing.PackageInfoUtils;
+import android.content.pm.parsing.component.ParsedPermission;
+import android.content.pm.parsing.component.ParsedPermissionGroup;
 import android.content.pm.permission.SplitPermissionInfoParcelable;
 import android.metrics.LogMaker;
 import android.os.Binder;
@@ -129,6 +127,8 @@
 import com.android.server.pm.PackageSetting;
 import com.android.server.pm.SharedUserSetting;
 import com.android.server.pm.UserManagerService;
+import com.android.server.pm.parsing.PackageInfoUtils;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 import com.android.server.pm.permission.PermissionManagerServiceInternal.DefaultBrowserProvider;
 import com.android.server.pm.permission.PermissionManagerServiceInternal.DefaultDialerProvider;
 import com.android.server.pm.permission.PermissionManagerServiceInternal.DefaultHomeProvider;
@@ -1282,7 +1282,7 @@
         }
 
         if (bp.isSoftRestricted() && !SoftRestrictedPermissionPolicy.forPermission(mContext,
-                pkg.toAppInfoWithoutState(), UserHandle.of(userId), permName)
+                pkg.toAppInfoWithoutState(), pkg, UserHandle.of(userId), permName)
                 .mayGrantPermission()) {
             Log.e(TAG, "Cannot grant soft restricted permission " + permName + " for package "
                     + packageName);
@@ -1878,6 +1878,7 @@
             return false;
         }
 
+        final long token = Binder.clearCallingIdentity();
         try {
             if (permName.equals(Manifest.permission.ACCESS_BACKGROUND_LOCATION)
                     && mPlatformCompat.isChangeEnabledByPackageName(BACKGROUND_RATIONALE_CHANGE_ID,
@@ -1886,6 +1887,8 @@
             }
         } catch (RemoteException e) {
             Log.e(TAG, "Unable to check if compatibility change is enabled.", e);
+        } finally {
+            Binder.restoreCallingIdentity(token);
         }
 
         return (flags & PackageManager.FLAG_PERMISSION_USER_SET) != 0;
@@ -2079,9 +2082,9 @@
         for (int i = 0; i < numOldPackagePermissions; i++) {
             final ParsedPermission permission = oldPackage.getPermissions().get(i);
 
-            if (permission.parsedPermissionGroup != null) {
+            if (permission.getParsedPermissionGroup() != null) {
                 oldPermissionNameToGroupName.put(permission.getName(),
-                        permission.parsedPermissionGroup.getName());
+                        permission.getParsedPermissionGroup().getName());
             }
         }
 
@@ -2095,8 +2098,9 @@
 
             if ((newProtection & PermissionInfo.PROTECTION_DANGEROUS) != 0) {
                 final String permissionName = newPermission.getName();
-                final String newPermissionGroupName = newPermission.parsedPermissionGroup == null
-                        ? null : newPermission.parsedPermissionGroup.getName();
+                final String newPermissionGroupName =
+                        newPermission.getParsedPermissionGroup() == null
+                                ? null : newPermission.getParsedPermissionGroup().getName();
                 final String oldPermissionGroupName = oldPermissionNameToGroupName.get(
                         permissionName);
 
@@ -2141,7 +2145,7 @@
             ParsedPermission p = pkg.getPermissions().get(i);
 
             // Assume by default that we did not install this permission into the system.
-            p.flags &= ~PermissionInfo.FLAG_INSTALLED;
+            p.setFlags(p.getFlags() & ~PermissionInfo.FLAG_INSTALLED);
 
             synchronized (PermissionManagerService.this.mLock) {
                 // Now that permission groups have a special meaning, we ignore permission
@@ -2149,16 +2153,16 @@
                 // permissions for one app being granted to someone just because they happen
                 // to be in a group defined by another app (before this had no implications).
                 if (pkg.getTargetSdkVersion() > Build.VERSION_CODES.LOLLIPOP_MR1) {
-                    p.parsedPermissionGroup = mSettings.mPermissionGroups.get(p.getGroup());
+                    p.setParsedPermissionGroup(mSettings.mPermissionGroups.get(p.getGroup()));
                     // Warn for a permission in an unknown group.
                     if (DEBUG_PERMISSIONS
-                            && p.getGroup() != null && p.parsedPermissionGroup == null) {
+                            && p.getGroup() != null && p.getParsedPermissionGroup() == null) {
                         Slog.i(TAG, "Permission " + p.getName() + " from package "
                                 + p.getPackageName() + " in an unknown group " + p.getGroup());
                     }
                 }
 
-                if (p.tree) {
+                if (p.isTree()) {
                     final BasePermission bp = BasePermission.createOrUpdate(
                             mPackageManagerInt,
                             mSettings.getPermissionTreeLocked(p.getName()), p, pkg,
@@ -2406,14 +2410,16 @@
                     }
                 }
 
+                // TODO(b/140256621): The package instant app method has been removed
+                //  as part of work in b/135203078, so this has been commented out in the meantime
                 // Limit ephemeral apps to ephemeral allowed permissions.
-                if (pkg.isInstantApp() && !bp.isInstant()) {
-                    if (DEBUG_PERMISSIONS) {
-                        Log.i(TAG, "Denying non-ephemeral permission " + bp.getName()
-                                + " for package " + pkg.getPackageName());
-                    }
-                    continue;
-                }
+//                if (/*pkg.isInstantApp()*/ false && !bp.isInstant()) {
+//                    if (DEBUG_PERMISSIONS) {
+//                        Log.i(TAG, "Denying non-ephemeral permission " + bp.getName()
+//                                + " for package " + pkg.getPackageName());
+//                    }
+//                    continue;
+//                }
 
                 if (bp.isRuntimeOnly() && !appSupportsRuntimePermissions) {
                     if (DEBUG_PERMISSIONS) {
@@ -2447,7 +2453,7 @@
                     }
                 } else if (bp.isSignature()) {
                     // For all apps signature permissions are install time ones.
-                    allowedSig = grantSignaturePermission(perm, pkg, bp, origPermissions);
+                    allowedSig = grantSignaturePermission(perm, pkg, ps, bp, origPermissions);
                     if (allowedSig) {
                         grant = GRANT_INSTALL;
                     }
@@ -2761,7 +2767,8 @@
                             Slog.i(TAG, "Un-granting permission " + perm
                                     + " from package " + pkg.getPackageName()
                                     + " (protectionLevel=" + bp.getProtectionLevel()
-                                    + " flags=0x" + Integer.toHexString(pkg.getFlags())
+                                    + " flags=0x"
+                                    + Integer.toHexString(PackageInfoUtils.appInfoFlags(pkg, ps))
                                     + ")");
                         }
                     } else if (bp.isAppOp()) {
@@ -2773,7 +2780,8 @@
                             Slog.i(TAG, "Not granting permission " + perm
                                     + " to package " + pkg.getPackageName()
                                     + " (protectionLevel=" + bp.getProtectionLevel()
-                                    + " flags=0x" + Integer.toHexString(pkg.getFlags())
+                                    + " flags=0x"
+                                    + Integer.toHexString(PackageInfoUtils.appInfoFlags(pkg, ps))
                                     + ")");
                         }
                     }
@@ -2781,7 +2789,7 @@
             }
 
             if ((changedInstallPermission || replace) && !ps.areInstallPermissionsFixed() &&
-                    !ps.isSystem() || ps.isUpdatedSystem()) {
+                    !ps.isSystem() || !ps.getPkgState().isUpdatedSystemApp()) {
                 // This is the first that we have heard about this package, so the
                 // permissions we have now selected are fixed until explicitly
                 // changed.
@@ -2931,7 +2939,7 @@
      */
     private @NonNull int[] checkIfLegacyStorageOpsNeedToBeUpdated(
             @NonNull AndroidPackage pkg, boolean replace, @NonNull int[] updatedUserIds) {
-        if (replace && pkg.hasRequestedLegacyExternalStorage() && (
+        if (replace && pkg.isRequestLegacyExternalStorage() && (
                 pkg.getRequestedPermissions().contains(READ_EXTERNAL_STORAGE)
                         || pkg.getRequestedPermissions().contains(WRITE_EXTERNAL_STORAGE))) {
             return UserManagerService.getInstance().getUserIds();
@@ -3124,7 +3132,7 @@
     }
 
     private boolean grantSignaturePermission(String perm, AndroidPackage pkg,
-            BasePermission bp, PermissionsState origPermissions) {
+            PackageSetting pkgSetting, BasePermission bp, PermissionsState origPermissions) {
         boolean oemPermission = bp.isOEM();
         boolean vendorPrivilegedPermission = bp.isVendorPrivileged();
         boolean privilegedPermission = bp.isPrivileged() || bp.isVendorPrivileged();
@@ -3136,7 +3144,7 @@
                 && !platformPackage && platformPermission) {
             if (!hasPrivappWhitelistEntry(perm, pkg)) {
                 // Only report violations for apps on system image
-                if (!mSystemReady && !pkg.isUpdatedSystemApp()) {
+                if (!mSystemReady && !pkgSetting.getPkgState().isUpdatedSystemApp()) {
                     // it's only a reportable violation if the permission isn't explicitly denied
                     ArraySet<String> deniedPermissions = null;
                     if (pkg.isVendor()) {
@@ -3202,8 +3210,8 @@
             if (pkg.isSystem()) {
                 // For updated system applications, a privileged/oem permission
                 // is granted only if it had been defined by the original application.
-                if (pkg.isUpdatedSystemApp()) {
-                    final PackageSetting disabledPs = (PackageSetting) mPackageManagerInt
+                if (pkgSetting.getPkgState().isUpdatedSystemApp()) {
+                    final PackageSetting disabledPs = mPackageManagerInt
                             .getDisabledSystemPackage(pkg.getPackageName());
                     final AndroidPackage disabledPkg = disabledPs == null ? null : disabledPs.pkg;
                     if (disabledPs != null
@@ -3609,7 +3617,7 @@
             return EmptyArray.INT;
         }
         for (AndroidPackage pkg : pkgList) {
-            if (pkg.getRequestedPermissions() == null) {
+            if (pkg.getRequestedPermissions().isEmpty()) {
                 continue;
             }
             final int requestedPermCount = pkg.getRequestedPermissions().size();
@@ -3717,9 +3725,9 @@
                 // Only system declares background permissions, hence mapping does never change.
                 mBackgroundPermissions = new ArrayMap<>();
                 for (BasePermission bp : mSettings.getAllPermissionsLocked()) {
-                    if (bp.perm != null && bp.perm.backgroundPermission != null) {
+                    if (bp.perm != null && bp.perm.getBackgroundPermission() != null) {
                         String fgPerm = bp.name;
-                        String bgPerm = bp.perm.backgroundPermission;
+                        String bgPerm = bp.perm.getBackgroundPermission();
 
                         List<String> fgPerms = mBackgroundPermissions.get(bgPerm);
                         if (fgPerms == null) {
@@ -4231,7 +4239,7 @@
         if (pkg == null) {
             return StorageManager.UUID_PRIVATE_INTERNAL;
         }
-        if (pkg.isExternal()) {
+        if (pkg.isExternalStorage()) {
             if (TextUtils.isEmpty(pkg.getVolumeUuid())) {
                 return StorageManager.UUID_PRIMARY_PHYSICAL;
             } else {
@@ -4243,7 +4251,7 @@
     }
 
     private static boolean hasPermission(AndroidPackage pkg, String permName) {
-        if (pkg.getPermissions() == null) {
+        if (pkg.getPermissions().isEmpty()) {
             return false;
         }
 
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 58a9f42..048e487 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
@@ -22,9 +22,10 @@
 import android.annotation.UserIdInt;
 import android.content.pm.PackageManager;
 import android.content.pm.PermissionInfo;
-import android.content.pm.parsing.AndroidPackage;
 import android.permission.PermissionManagerInternal;
 
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Consumer;
diff --git a/services/core/java/com/android/server/pm/permission/PermissionSettings.java b/services/core/java/com/android/server/pm/permission/PermissionSettings.java
index 254b720..355e243 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionSettings.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionSettings.java
@@ -18,7 +18,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.content.pm.parsing.ComponentParseUtils;
+import android.content.pm.parsing.component.ParsedPermissionGroup;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Log;
@@ -65,7 +65,7 @@
      * name to permission group object.
      */
     @GuardedBy("mLock")
-    final ArrayMap<String, ComponentParseUtils.ParsedPermissionGroup> mPermissionGroups =
+    final ArrayMap<String, ParsedPermissionGroup> mPermissionGroups =
             new ArrayMap<>();
 
     /**
diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java b/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java
new file mode 100644
index 0000000..c008d93
--- /dev/null
+++ b/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java
@@ -0,0 +1,196 @@
+/*
+ * 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 static java.util.Collections.emptyList;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageParser;
+import android.content.pm.SharedLibraryInfo;
+
+import com.android.internal.util.DataClass;
+import com.android.server.pm.PackageSetting;
+
+import java.util.List;
+
+/**
+ * For use by {@link PackageSetting} to maintain functionality that used to exist in
+ * {@link PackageParser.Package}.
+ *
+ * It is assumed that anything inside the package was not cached or written to disk, so none of
+ * these fields are either. They must be set on every boot from other state on the device.
+ */
+@DataClass(genSetters = true, genConstructor = false, genBuilder = false)
+public class PackageStateUnserialized {
+
+    private boolean hiddenUntilInstalled;
+
+    @NonNull
+    private List<SharedLibraryInfo> usesLibraryInfos = emptyList();
+
+    @NonNull
+    private List<String> usesLibraryFiles = emptyList();
+
+    private boolean updatedSystemApp;
+
+    @NonNull
+    private volatile long[] lastPackageUsageTimeInMills;
+
+    @Nullable
+    private String overrideSeInfo;
+
+    private long[] lazyInitLastPackageUsageTimeInMills() {
+        return new long[PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT];
+    }
+
+    public PackageStateUnserialized setLastPackageUsageTimeInMills(int reason, long time) {
+        getLastPackageUsageTimeInMills()[reason] = time;
+        return this;
+    }
+
+    public long getLatestPackageUseTimeInMills() {
+        long latestUse = 0L;
+        for (long use : getLastPackageUsageTimeInMills()) {
+            latestUse = Math.max(latestUse, use);
+        }
+        return latestUse;
+    }
+
+    public long getLatestForegroundPackageUseTimeInMills() {
+        int[] foregroundReasons = {
+                PackageManager.NOTIFY_PACKAGE_USE_ACTIVITY,
+                PackageManager.NOTIFY_PACKAGE_USE_FOREGROUND_SERVICE
+        };
+
+        long latestUse = 0L;
+        for (int reason : foregroundReasons) {
+            latestUse = Math.max(latestUse, getLastPackageUsageTimeInMills()[reason]);
+        }
+        return latestUse;
+    }
+
+
+
+    // Code below generated by codegen v1.0.14.
+    //
+    // DO NOT MODIFY!
+    // CHECKSTYLE:OFF Generated code
+    //
+    // To regenerate run:
+    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.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 boolean isHiddenUntilInstalled() {
+        return hiddenUntilInstalled;
+    }
+
+    @DataClass.Generated.Member
+    public @NonNull List<SharedLibraryInfo> getUsesLibraryInfos() {
+        return usesLibraryInfos;
+    }
+
+    @DataClass.Generated.Member
+    public @NonNull List<String> getUsesLibraryFiles() {
+        return usesLibraryFiles;
+    }
+
+    @DataClass.Generated.Member
+    public boolean isUpdatedSystemApp() {
+        return updatedSystemApp;
+    }
+
+    @DataClass.Generated.Member
+    public @NonNull long[] getLastPackageUsageTimeInMills() {
+        long[] _lastPackageUsageTimeInMills = lastPackageUsageTimeInMills;
+        if (_lastPackageUsageTimeInMills == null) {
+            synchronized(this) {
+                _lastPackageUsageTimeInMills = lastPackageUsageTimeInMills;
+                if (_lastPackageUsageTimeInMills == null) {
+                    _lastPackageUsageTimeInMills = lastPackageUsageTimeInMills = lazyInitLastPackageUsageTimeInMills();
+                }
+            }
+        }
+        return _lastPackageUsageTimeInMills;
+    }
+
+    @DataClass.Generated.Member
+    public @Nullable String getOverrideSeInfo() {
+        return overrideSeInfo;
+    }
+
+    @DataClass.Generated.Member
+    public PackageStateUnserialized setHiddenUntilInstalled(boolean value) {
+        hiddenUntilInstalled = value;
+        return this;
+    }
+
+    @DataClass.Generated.Member
+    public PackageStateUnserialized setUsesLibraryInfos(@NonNull List<SharedLibraryInfo> value) {
+        usesLibraryInfos = value;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, usesLibraryInfos);
+        return this;
+    }
+
+    @DataClass.Generated.Member
+    public PackageStateUnserialized setUsesLibraryFiles(@NonNull List<String> value) {
+        usesLibraryFiles = value;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, usesLibraryFiles);
+        return this;
+    }
+
+    @DataClass.Generated.Member
+    public PackageStateUnserialized setUpdatedSystemApp(boolean value) {
+        updatedSystemApp = value;
+        return this;
+    }
+
+    @DataClass.Generated.Member
+    public PackageStateUnserialized setLastPackageUsageTimeInMills(@NonNull long... value) {
+        lastPackageUsageTimeInMills = value;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, lastPackageUsageTimeInMills);
+        return this;
+    }
+
+    @DataClass.Generated.Member
+    public PackageStateUnserialized setOverrideSeInfo(@Nullable String value) {
+        overrideSeInfo = value;
+        return this;
+    }
+
+    @DataClass.Generated(
+            time = 1580422870209L,
+            codegenVersion = "1.0.14",
+            sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java",
+            inputSignatures = "private  boolean hiddenUntilInstalled\nprivate @android.annotation.NonNull java.util.List<android.content.pm.SharedLibraryInfo> usesLibraryInfos\nprivate @android.annotation.NonNull java.util.List<java.lang.String> usesLibraryFiles\nprivate  boolean updatedSystemApp\nprivate volatile @android.annotation.NonNull long[] lastPackageUsageTimeInMills\n @android.annotation.Nullable java.lang.String overrideSeInfo\nprivate  long[] lazyInitLastPackageUsageTimeInMills()\npublic  com.android.server.pm.pkg.PackageStateUnserialized setLastPackageUsageTimeInMills(int,long)\npublic  long getLatestPackageUseTimeInMills()\npublic  long getLatestForegroundPackageUseTimeInMills()\nclass PackageStateUnserialized extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genSetters=true, genConstructor=false, genBuilder=false)")
+    @Deprecated
+    private void __metadata() {}
+
+
+    //@formatter:on
+    // End of generated code
+
+}
diff --git a/services/core/java/com/android/server/policy/PermissionPolicyService.java b/services/core/java/com/android/server/policy/PermissionPolicyService.java
index 2c7795a..139c844 100644
--- a/services/core/java/com/android/server/policy/PermissionPolicyService.java
+++ b/services/core/java/com/android/server/policy/PermissionPolicyService.java
@@ -39,7 +39,6 @@
 import android.content.pm.PackageManagerInternal;
 import android.content.pm.PackageManagerInternal.PackageListObserver;
 import android.content.pm.PermissionInfo;
-import android.content.pm.parsing.AndroidPackage;
 import android.os.Build;
 import android.os.Process;
 import android.os.RemoteException;
@@ -65,6 +64,7 @@
 import com.android.server.FgThread;
 import com.android.server.LocalServices;
 import com.android.server.SystemService;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 import com.android.server.pm.permission.PermissionManagerServiceInternal;
 import com.android.server.policy.PermissionPolicyInternal.OnInitializedCallback;
 
@@ -163,7 +163,7 @@
                 if (perm.isSoftRestricted()) {
                     SoftRestrictedPermissionPolicy policy =
                             SoftRestrictedPermissionPolicy.forPermission(null, null, null,
-                                    perm.name);
+                                    null, perm.name);
                     int extraAppOp = policy.getExtraAppOpCode();
                     if (extraAppOp != OP_NONE) {
                         appOpsService.startWatchingMode(extraAppOp, null, mAppOpsCallback);
@@ -506,17 +506,18 @@
         /**
          * Note: Called with the package lock held. Do <u>not</u> call into app-op manager.
          */
-        private void addAppOps(@NonNull PackageInfo packageInfo, @NonNull String permissionName) {
+        private void addAppOps(@NonNull PackageInfo packageInfo, @NonNull AndroidPackage pkg,
+                @NonNull String permissionName) {
             PermissionInfo permissionInfo = mRuntimePermissionInfos.get(permissionName);
             if (permissionInfo == null) {
                 return;
             }
-            addPermissionAppOp(packageInfo, permissionInfo);
-            addExtraAppOp(packageInfo, permissionInfo);
+            addPermissionAppOp(packageInfo, pkg, permissionInfo);
+            addExtraAppOp(packageInfo, pkg, permissionInfo);
         }
 
         private void addPermissionAppOp(@NonNull PackageInfo packageInfo,
-                @NonNull PermissionInfo permissionInfo) {
+                @NonNull AndroidPackage pkg, @NonNull PermissionInfo permissionInfo) {
             if (!permissionInfo.isRuntime()) {
                 return;
             }
@@ -539,13 +540,13 @@
             }
 
             int appOpMode;
-            boolean shouldGrantAppOp = shouldGrantAppOp(packageInfo, permissionInfo);
+            boolean shouldGrantAppOp = shouldGrantAppOp(packageInfo, pkg, permissionInfo);
             if (shouldGrantAppOp) {
                 if (permissionInfo.backgroundPermission != null) {
                     PermissionInfo backgroundPermissionInfo = mRuntimePermissionInfos.get(
                             permissionInfo.backgroundPermission);
                     boolean shouldGrantBackgroundAppOp = backgroundPermissionInfo != null
-                            && shouldGrantAppOp(packageInfo, backgroundPermissionInfo);
+                            && shouldGrantAppOp(packageInfo, pkg, backgroundPermissionInfo);
                     appOpMode = shouldGrantBackgroundAppOp ? MODE_ALLOWED : MODE_FOREGROUND;
                 } else {
                     appOpMode = MODE_ALLOWED;
@@ -570,7 +571,7 @@
         }
 
         private boolean shouldGrantAppOp(@NonNull PackageInfo packageInfo,
-                @NonNull PermissionInfo permissionInfo) {
+                @NonNull AndroidPackage pkg, @NonNull PermissionInfo permissionInfo) {
             String permissionName = permissionInfo.name;
             String packageName = packageInfo.packageName;
             boolean isGranted = mPackageManager.checkPermission(permissionName, packageName)
@@ -595,14 +596,15 @@
             } else if (permissionInfo.isSoftRestricted()) {
                 SoftRestrictedPermissionPolicy policy =
                         SoftRestrictedPermissionPolicy.forPermission(mContext,
-                                packageInfo.applicationInfo, mContext.getUser(), permissionName);
+                                packageInfo.applicationInfo, pkg, mContext.getUser(),
+                                permissionName);
                 return policy.mayGrantPermission();
             } else {
                 return true;
             }
         }
 
-        private void addExtraAppOp(@NonNull PackageInfo packageInfo,
+        private void addExtraAppOp(@NonNull PackageInfo packageInfo, @NonNull AndroidPackage pkg,
                 @NonNull PermissionInfo permissionInfo) {
             if (!permissionInfo.isSoftRestricted()) {
                 return;
@@ -611,7 +613,7 @@
             String permissionName = permissionInfo.name;
             SoftRestrictedPermissionPolicy policy =
                     SoftRestrictedPermissionPolicy.forPermission(mContext,
-                            packageInfo.applicationInfo, mContext.getUser(), permissionName);
+                            packageInfo.applicationInfo, pkg, mContext.getUser(), permissionName);
             int extraOpCode = policy.getExtraAppOpCode();
             if (extraOpCode == OP_NONE) {
                 return;
@@ -639,19 +641,23 @@
          * @param pkgName The package to add for later processing.
          */
         void addPackage(@NonNull String pkgName) {
-            final PackageInfo pkg;
+            PackageManagerInternal pmInternal =
+                    LocalServices.getService(PackageManagerInternal.class);
+            final PackageInfo pkgInfo;
+            final AndroidPackage pkg;
             try {
-                pkg = mPackageManager.getPackageInfo(pkgName, GET_PERMISSIONS);
+                pkgInfo = mPackageManager.getPackageInfo(pkgName, GET_PERMISSIONS);
+                pkg = pmInternal.getPackage(pkgName);
             } catch (NameNotFoundException e) {
                 return;
             }
 
-            if (pkg.requestedPermissions == null) {
+            if (pkgInfo == null || pkg == null || pkgInfo.requestedPermissions == null) {
                 return;
             }
 
-            for (String permission : pkg.requestedPermissions) {
-                addAppOps(pkg, permission);
+            for (String permission : pkgInfo.requestedPermissions) {
+                addAppOps(pkgInfo, pkg, permission);
             }
         }
 
@@ -673,7 +679,7 @@
                     opCode), uid, packageName);
             if (currentMode != MODE_ALLOWED) {
                 if (currentMode != MODE_IGNORED) {
-                    mAppOpsManagerInternal.setUidModeIgnoringCallback(opCode, uid, MODE_IGNORED,
+                    mAppOpsManagerInternal.setUidModeFromPermissionPolicy(opCode, uid, MODE_IGNORED,
                             mAppOpsCallback);
                 }
                 return true;
@@ -686,7 +692,7 @@
             final int oldMode = mAppOpsManager.unsafeCheckOpRaw(AppOpsManager.opToPublicName(
                     opCode), uid, packageName);
             if (oldMode != mode) {
-                mAppOpsManagerInternal.setUidModeIgnoringCallback(opCode, uid, mode,
+                mAppOpsManagerInternal.setUidModeFromPermissionPolicy(opCode, uid, mode,
                         mAppOpsCallback);
                 final int newMode = mAppOpsManager.unsafeCheckOpRaw(AppOpsManager.opToPublicName(
                         opCode), uid, packageName);
@@ -694,7 +700,7 @@
                     // Work around incorrectly-set package mode. It never makes sense for app ops
                     // related to runtime permissions, but can get in the way and we have to reset
                     // it.
-                    mAppOpsManagerInternal.setModeIgnoringCallback(opCode, uid, packageName,
+                    mAppOpsManagerInternal.setModeFromPermissionPolicy(opCode, uid, packageName,
                             AppOpsManager.opToDefaultMode(opCode), mAppOpsCallback);
                 }
             }
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index ede04f3..19e6062 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -45,7 +45,6 @@
 import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
 import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
 import static android.view.WindowManager.LayoutParams.LAST_SYSTEM_WINDOW;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR;
 import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
@@ -2058,11 +2057,8 @@
 
     /** {@inheritDoc} */
     @Override
-    public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp) {
-        final int type = attrs.type;
-        final boolean isRoundedCornerOverlay =
-                (attrs.privateFlags & PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY) != 0;
-
+    public int checkAddPermission(int type, boolean isRoundedCornerOverlay, String packageName,
+            int[] outAppOp) {
         if (isRoundedCornerOverlay && mContext.checkCallingOrSelfPermission(INTERNAL_SYSTEM_WINDOW)
                 != PERMISSION_GRANTED) {
             return ADD_PERMISSION_DENIED;
@@ -2119,7 +2115,7 @@
         ApplicationInfo appInfo;
         try {
             appInfo = mPackageManager.getApplicationInfoAsUser(
-                            attrs.packageName,
+                            packageName,
                             0 /* flags */,
                             UserHandle.getUserId(callingUid));
         } catch (PackageManager.NameNotFoundException e) {
@@ -2139,7 +2135,7 @@
 
         // check if user has enabled this operation. SecurityException will be thrown if this app
         // has not been allowed by the user
-        final int mode = mAppOpsManager.noteOpNoThrow(outAppOp[0], callingUid, attrs.packageName);
+        final int mode = mAppOpsManager.noteOpNoThrow(outAppOp[0], callingUid, packageName);
         switch (mode) {
             case AppOpsManager.MODE_ALLOWED:
             case AppOpsManager.MODE_IGNORED:
@@ -2729,21 +2725,23 @@
                             Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL,
                             UserHandle.USER_CURRENT_OR_SELF);
                 }
-
-                int min = mPowerManager.getMinimumScreenBrightnessSetting();
-                int max = mPowerManager.getMaximumScreenBrightnessSetting();
-                int step = (max - min + BRIGHTNESS_STEPS - 1) / BRIGHTNESS_STEPS * direction;
-                int brightness = Settings.System.getIntForUser(mContext.getContentResolver(),
-                        Settings.System.SCREEN_BRIGHTNESS,
-                        mPowerManager.getDefaultScreenBrightnessSetting(),
+                float minFloat = mPowerManager.getBrightnessConstraint(
+                        PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
+                float maxFloat = mPowerManager.getBrightnessConstraint(
+                        PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM);
+                float stepFloat = (maxFloat - minFloat) / BRIGHTNESS_STEPS * direction;
+                float brightnessFloat = Settings.System.getFloatForUser(
+                        mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_FLOAT,
+                        mPowerManager.getBrightnessConstraint(
+                                PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT),
                         UserHandle.USER_CURRENT_OR_SELF);
-                brightness += step;
+                brightnessFloat += stepFloat;
                 // Make sure we don't go beyond the limits.
-                brightness = Math.min(max, brightness);
-                brightness = Math.max(min, brightness);
+                brightnessFloat = Math.min(maxFloat, brightnessFloat);
+                brightnessFloat = Math.max(minFloat, brightnessFloat);
 
-                Settings.System.putIntForUser(mContext.getContentResolver(),
-                        Settings.System.SCREEN_BRIGHTNESS, brightness,
+                Settings.System.putFloatForUser(mContext.getContentResolver(),
+                        Settings.System.SCREEN_BRIGHTNESS_FLOAT, brightnessFloat,
                         UserHandle.USER_CURRENT_OR_SELF);
                 startActivityAsUser(new Intent(Intent.ACTION_SHOW_BRIGHTNESS_DIALOG),
                         UserHandle.CURRENT_OR_SELF);
@@ -5195,7 +5193,8 @@
                     final Intent dock = createHomeDockIntent();
                     if (dock != null) {
                         int result = ActivityTaskManager.getService()
-                                .startActivityAsUser(null, mContext.getBasePackageName(), dock,
+                                .startActivityAsUser(null, mContext.getBasePackageName(),
+                                        mContext.getFeatureId(), dock,
                                         dock.resolveTypeIfNeeded(mContext.getContentResolver()),
                                         null, null, 0,
                                         ActivityManager.START_FLAG_ONLY_IF_NEEDED,
@@ -5206,7 +5205,8 @@
                     }
                 }
                 int result = ActivityTaskManager.getService()
-                        .startActivityAsUser(null, mContext.getBasePackageName(), mHomeIntent,
+                        .startActivityAsUser(null, mContext.getBasePackageName(),
+                                mContext.getFeatureId(), mHomeIntent,
                                 mHomeIntent.resolveTypeIfNeeded(mContext.getContentResolver()),
                                 null, null, 0,
                                 ActivityManager.START_FLAG_ONLY_IF_NEEDED,
diff --git a/services/core/java/com/android/server/policy/SoftRestrictedPermissionPolicy.java b/services/core/java/com/android/server/policy/SoftRestrictedPermissionPolicy.java
index 81ec466..90babcd 100644
--- a/services/core/java/com/android/server/policy/SoftRestrictedPermissionPolicy.java
+++ b/services/core/java/com/android/server/policy/SoftRestrictedPermissionPolicy.java
@@ -27,16 +27,25 @@
 import static android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 
-import static java.lang.Integer.min;
-
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.AppOpsManager;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledAfter;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
-import android.os.Build;
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.UserHandle;
+import android.os.storage.StorageManagerInternal;
+import android.util.Log;
+
+import com.android.internal.compat.IPlatformCompat;
+import com.android.server.LocalServices;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 /**
  * The behavior of soft restricted permissions is different for each permission. This class collects
@@ -46,6 +55,27 @@
  * {@link com.android.packageinstaller.permission.utils.SoftRestrictedPermissionPolicy}
  */
 public abstract class SoftRestrictedPermissionPolicy {
+    /**
+     * Enables scoped storage, with exceptions for apps that explicitly request legacy access, or
+     * apps that hold the {@code android.Manifest.permission#WRITE_MEDIA_STORAGE} permission.
+     * See https://developer.android.com/training/data-storage#scoped-storage for more information.
+     */
+    @ChangeId
+    // This change is enabled for apps with targetSDK > {@link android.os.Build.VERSION_CODES.P}
+    @EnabledAfter(targetSdkVersion = android.os.Build.VERSION_CODES.P)
+    static final long ENABLE_SCOPED_STORAGE = 144914977L;
+
+    /**
+     * Enforces scoped storage for all apps, preventing individual apps from opting out. This change
+     * has precedence over {@code ENABLE_SCOPED_STORAGE}.
+     */
+    @ChangeId
+    // This change is enabled for apps with targetSDK > {@link android.os.Build.VERSION_CODES.Q}.
+    @EnabledAfter(targetSdkVersion = android.os.Build.VERSION_CODES.Q)
+    static final long REQUIRE_SCOPED_STORAGE = 131432978L;
+
+    private static final String LOG_TAG = SoftRestrictedPermissionPolicy.class.getSimpleName();
+
     private static final int FLAGS_PERMISSION_RESTRICTION_ANY_EXEMPT =
             FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT
                     | FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT
@@ -60,41 +90,6 @@
             };
 
     /**
-     * TargetSDK is per package. To make sure two apps int the same shared UID do not fight over
-     * what to set, always compute the combined targetSDK.
-     *
-     * @param context A context
-     * @param appInfo The app that is changed
-     * @param user The user the app belongs to
-     *
-     * @return The minimum targetSDK of all apps sharing the uid of the app
-     */
-    private static int getMinimumTargetSDK(@NonNull Context context,
-            @NonNull ApplicationInfo appInfo, @NonNull UserHandle user) {
-        PackageManager pm = context.getPackageManager();
-
-        int minimumTargetSDK = appInfo.targetSdkVersion;
-
-        String[] uidPkgs = pm.getPackagesForUid(appInfo.uid);
-        if (uidPkgs != null) {
-            for (String uidPkg : uidPkgs) {
-                if (!uidPkg.equals(appInfo.packageName)) {
-                    ApplicationInfo uidPkgInfo;
-                    try {
-                        uidPkgInfo = pm.getApplicationInfoAsUser(uidPkg, 0, user);
-                    } catch (PackageManager.NameNotFoundException e) {
-                        continue;
-                    }
-
-                    minimumTargetSDK = min(minimumTargetSDK, uidPkgInfo.targetSdkVersion);
-                }
-            }
-        }
-
-        return minimumTargetSDK;
-    }
-
-    /**
      * Get the policy for a soft restricted permission.
      *
      * @param context A context to use
@@ -105,8 +100,8 @@
      * @return The policy for this permission
      */
     public static @NonNull SoftRestrictedPermissionPolicy forPermission(@NonNull Context context,
-            @Nullable ApplicationInfo appInfo, @Nullable UserHandle user,
-            @NonNull String permission) {
+            @Nullable ApplicationInfo appInfo, @Nullable AndroidPackage pkg,
+            @Nullable UserHandle user, @NonNull String permission) {
         switch (permission) {
             // Storage uses a special app op to decide the mount state and supports soft restriction
             // where the restricted state allows the permission but only for accessing the medial
@@ -114,26 +109,37 @@
             case READ_EXTERNAL_STORAGE: {
                 final boolean isWhiteListed;
                 boolean shouldApplyRestriction;
-                final int targetSDK;
                 final boolean hasRequestedLegacyExternalStorage;
+                final boolean shouldPreserveLegacyExternalStorage;
                 final boolean hasWriteMediaStorageGrantedForUid;
+                final boolean isScopedStorageEnabled;
 
                 if (appInfo != null) {
                     PackageManager pm = context.getPackageManager();
+                    StorageManagerInternal smInternal =
+                            LocalServices.getService(StorageManagerInternal.class);
                     int flags = pm.getPermissionFlags(permission, appInfo.packageName, user);
                     isWhiteListed = (flags & FLAGS_PERMISSION_RESTRICTION_ANY_EXEMPT) != 0;
-                    shouldApplyRestriction = (flags & FLAG_PERMISSION_APPLY_RESTRICTION) != 0;
-                    targetSDK = getMinimumTargetSDK(context, appInfo, user);
                     hasRequestedLegacyExternalStorage = hasUidRequestedLegacyExternalStorage(
                             appInfo.uid, context);
                     hasWriteMediaStorageGrantedForUid = hasWriteMediaStorageGrantedForUid(
                             appInfo.uid, context);
+                    final boolean isScopedStorageRequired =
+                            isChangeEnabledForUid(context, appInfo, user, REQUIRE_SCOPED_STORAGE);
+                    isScopedStorageEnabled =
+                            isChangeEnabledForUid(context, appInfo, user, ENABLE_SCOPED_STORAGE)
+                            || isScopedStorageRequired;
+                    shouldPreserveLegacyExternalStorage = pkg.hasPreserveLegacyExternalStorage()
+                            && smInternal.hasLegacyExternalStorage(appInfo.uid);
+                    shouldApplyRestriction = (flags & FLAG_PERMISSION_APPLY_RESTRICTION) != 0
+                            || (isScopedStorageRequired && !shouldPreserveLegacyExternalStorage);
                 } else {
                     isWhiteListed = false;
                     shouldApplyRestriction = false;
-                    targetSDK = 0;
                     hasRequestedLegacyExternalStorage = false;
+                    shouldPreserveLegacyExternalStorage = false;
                     hasWriteMediaStorageGrantedForUid = false;
+                    isScopedStorageEnabled = false;
                 }
 
                 // We have a check in PermissionPolicyService.PermissionToOpSynchroniser.setUidMode
@@ -143,7 +149,7 @@
                 return new SoftRestrictedPermissionPolicy() {
                     @Override
                     public boolean mayGrantPermission() {
-                        return isWhiteListed || targetSDK >= Build.VERSION_CODES.Q;
+                        return isWhiteListed || isScopedStorageEnabled;
                     }
                     @Override
                     public int getExtraAppOpCode() {
@@ -151,9 +157,10 @@
                     }
                     @Override
                     public boolean mayAllowExtraAppOp() {
-                        return !shouldApplyRestriction && targetSDK <= Build.VERSION_CODES.Q
+                        return !shouldApplyRestriction
                                 && (hasRequestedLegacyExternalStorage
-                                        || hasWriteMediaStorageGrantedForUid);
+                                        || hasWriteMediaStorageGrantedForUid
+                                        || shouldPreserveLegacyExternalStorage);
                     }
                     @Override
                     public boolean mayDenyExtraAppOpIfGranted() {
@@ -163,22 +170,26 @@
             }
             case WRITE_EXTERNAL_STORAGE: {
                 final boolean isWhiteListed;
-                final int targetSDK;
+                final boolean isScopedStorageEnabled;
 
                 if (appInfo != null) {
                     final int flags = context.getPackageManager().getPermissionFlags(permission,
                             appInfo.packageName, user);
                     isWhiteListed = (flags & FLAGS_PERMISSION_RESTRICTION_ANY_EXEMPT) != 0;
-                    targetSDK = getMinimumTargetSDK(context, appInfo, user);
+                    final boolean isScopedStorageRequired =
+                            isChangeEnabledForUid(context, appInfo, user, REQUIRE_SCOPED_STORAGE);
+                    isScopedStorageEnabled =
+                            isChangeEnabledForUid(context, appInfo, user, ENABLE_SCOPED_STORAGE)
+                            || isScopedStorageRequired;
                 } else {
                     isWhiteListed = false;
-                    targetSDK = 0;
+                    isScopedStorageEnabled = false;
                 }
 
                 return new SoftRestrictedPermissionPolicy() {
                     @Override
                     public boolean mayGrantPermission() {
-                        return isWhiteListed || targetSDK >= Build.VERSION_CODES.Q;
+                        return isWhiteListed || isScopedStorageEnabled;
                     }
                 };
             }
@@ -187,6 +198,62 @@
         }
     }
 
+    /**
+     * Checks whether an AppCompat change is enabled for all packages sharing a UID with the
+     * provided application.
+     *
+     * @param context A context to use.
+     * @param appInfo The application for which to check whether the compat change is enabled.
+     * @param user The user the app belongs to.
+     * @param changeId A {@link android.compat.annotation.ChangeId} corresponding to the change.
+     *
+     * @return true if this change is enabled for all apps sharing the UID of the provided app,
+     *         false otherwise.
+     */
+    private static boolean isChangeEnabledForUid(@NonNull Context context,
+            @NonNull ApplicationInfo appInfo, @NonNull UserHandle user, long changeId) {
+        PackageManager pm = context.getPackageManager();
+
+        String[] uidPackages = pm.getPackagesForUid(appInfo.uid);
+        if (uidPackages != null) {
+            for (String uidPackage : uidPackages) {
+                ApplicationInfo uidPackageInfo;
+                try {
+                    uidPackageInfo = pm.getApplicationInfoAsUser(uidPackage, 0, user);
+                } catch (PackageManager.NameNotFoundException e) {
+                    continue;
+                }
+                if (!isChangeEnabled(uidPackageInfo, changeId)) {
+                    // At least one package sharing this UID does not have this change enabled.
+                    return false;
+                }
+            }
+            // All packages sharing this UID returned true for {@link #isChangeEnabled()}.
+            return true;
+        } else {
+            Log.w(LOG_TAG, "Check for change " + changeId + " for uid " + appInfo.uid
+                    + " produced no packages. Defaulting to using the information for "
+                    + appInfo.packageName + " only.");
+            return isChangeEnabled(appInfo, changeId);
+        }
+    }
+
+    private static boolean isChangeEnabled(@NonNull ApplicationInfo appInfo, long changeId) {
+        IBinder binder = ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE);
+        IPlatformCompat platformCompat = IPlatformCompat.Stub.asInterface(binder);
+
+        final long callingId = Binder.clearCallingIdentity();
+
+        try {
+            return platformCompat.isChangeEnabled(changeId, appInfo);
+        } catch (RemoteException e) {
+            Log.e(LOG_TAG, "Check for change " + changeId + " failed. Defaulting to enabled.", e);
+            return true;
+        } finally {
+            Binder.restoreCallingIdentity(callingId);
+        }
+    }
+
     private static boolean hasUidRequestedLegacyExternalStorage(int uid, @NonNull Context context) {
         PackageManager packageManager = context.getPackageManager();
         String[] packageNames = packageManager.getPackagesForUid(uid);
diff --git a/services/core/java/com/android/server/policy/TEST_MAPPING b/services/core/java/com/android/server/policy/TEST_MAPPING
index 484017b..094e70f 100644
--- a/services/core/java/com/android/server/policy/TEST_MAPPING
+++ b/services/core/java/com/android/server/policy/TEST_MAPPING
@@ -36,6 +36,9 @@
         },
         {
           "include-filter": "android.permission2.cts.RestrictedStoragePermissionSharedUidTest"
+        },
+        {
+          "include-filter": "android.permission2.cts.RestrictedStoragePermissionTest"
         }
       ]
     },
diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java
index e81214e..9d417c9 100644
--- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java
+++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java
@@ -75,7 +75,6 @@
 import android.graphics.Rect;
 import android.os.Bundle;
 import android.os.IBinder;
-import android.os.Looper;
 import android.os.RemoteException;
 import android.util.Slog;
 import android.util.proto.ProtoOutputStream;
@@ -83,7 +82,6 @@
 import android.view.IApplicationToken;
 import android.view.IDisplayFoldListener;
 import android.view.IWindowManager;
-import android.view.InputEventReceiver;
 import android.view.KeyEvent;
 import android.view.WindowManager;
 import android.view.WindowManagerGlobal;
@@ -471,6 +469,10 @@
          * Remove the input consumer from the window manager.
          */
         void dismiss();
+        /**
+         * Dispose the input consumer and input receiver from UI thread.
+         */
+        void dispose();
     }
 
     /**
@@ -505,12 +507,6 @@
         public static final int CAMERA_LENS_COVERED = 1;
 
         /**
-         * Add a input consumer which will consume all input events going to any window below it.
-         */
-        public InputConsumer createInputConsumer(Looper looper, String name,
-                InputEventReceiver.Factory inputEventReceiverFactory, int displayId);
-
-        /**
          * Returns a code that describes the current state of the lid switch.
          */
         public int getLidState();
@@ -690,17 +686,25 @@
             WindowManagerFuncs windowManagerFuncs);
 
     /**
-     * Check permissions when adding a window.
+     * Check permissions when adding a window or a window token from
+     * {@link android.app.WindowContext}.
      *
-     * @param attrs The window's LayoutParams.
+     * @param type The window type
+     * @param isRoundedCornerOverlay {@code true} to indicate the adding window is
+     *                                           round corner overlay.
+     * @param packageName package name
      * @param outAppOp First element will be filled with the app op corresponding to
      *                 this window, or OP_NONE.
      *
      * @return {@link WindowManagerGlobal#ADD_OKAY} if the add can proceed;
      *      else an error code, usually
      *      {@link WindowManagerGlobal#ADD_PERMISSION_DENIED}, to abort the add.
+     *
+     * @see IWindowManager#addWindowTokenWithOptions(IBinder, int, int, Bundle, String)
+     * @see WindowManager.LayoutParams#PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY
      */
-    public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp);
+    int checkAddPermission(int type, boolean isRoundedCornerOverlay, String packageName,
+            int[] outAppOp);
 
     /**
      * After the window manager has computed the current configuration based
@@ -870,6 +874,10 @@
         }
     }
 
+    default int getMaxWindowLayer() {
+        return 35;
+    }
+
     /**
      * Return how to Z-order sub-windows in relation to the window they are attached to.
      * Return positive to have them ordered in front, negative for behind.
diff --git a/services/core/java/com/android/server/power/AttentionDetector.java b/services/core/java/com/android/server/power/AttentionDetector.java
index cc72dd6..1ab6ade 100644
--- a/services/core/java/com/android/server/power/AttentionDetector.java
+++ b/services/core/java/com/android/server/power/AttentionDetector.java
@@ -17,7 +17,7 @@
 package com.android.server.power;
 
 import static android.provider.DeviceConfig.NAMESPACE_ATTENTION_MANAGER_SERVICE;
-import static android.provider.Settings.System.ADAPTIVE_SLEEP;
+import static android.provider.Settings.Secure.ADAPTIVE_SLEEP;
 
 import android.Manifest;
 import android.app.ActivityManager;
@@ -152,8 +152,8 @@
 
     @VisibleForTesting
     void updateEnabledFromSettings(Context context) {
-        mIsSettingEnabled = Settings.System.getIntForUser(context.getContentResolver(),
-                Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT) == 1;
+        mIsSettingEnabled = Settings.Secure.getIntForUser(context.getContentResolver(),
+                Settings.Secure.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT) == 1;
     }
 
     public void systemReady(Context context) {
@@ -173,8 +173,8 @@
             // Shouldn't happen since in-process.
         }
 
-        context.getContentResolver().registerContentObserver(Settings.System.getUriFor(
-                Settings.System.ADAPTIVE_SLEEP),
+        context.getContentResolver().registerContentObserver(Settings.Secure.getUriFor(
+                Settings.Secure.ADAPTIVE_SLEEP),
                 false, new ContentObserver(new Handler(context.getMainLooper())) {
                     @Override
                     public void onChange(boolean selfChange) {
@@ -194,7 +194,7 @@
         if (!isAttentionServiceSupported() || !serviceHasSufficientPermissions()) {
             // Turns off adaptive sleep in settings for all users if attention service is not
             // available. The setting itself should also be grayed out in this case.
-            Settings.System.putInt(mContentResolver, ADAPTIVE_SLEEP, 0);
+            Settings.Secure.putInt(mContentResolver, ADAPTIVE_SLEEP, 0);
             return nextScreenDimming;
         }
 
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 4d13658..8483c77 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -25,6 +25,7 @@
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.annotation.UserIdInt;
 import android.app.ActivityManager;
 import android.app.SynchronousUserSwitchObserver;
@@ -83,6 +84,7 @@
 import android.util.proto.ProtoOutputStream;
 import android.view.Display;
 
+import com.android.internal.BrightnessSynchronizer;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.IAppOpsService;
 import com.android.internal.app.IBatteryStats;
@@ -94,6 +96,7 @@
 import com.android.server.ServiceThread;
 import com.android.server.SystemService;
 import com.android.server.UiThread;
+import com.android.server.UserspaceRebootLogger;
 import com.android.server.Watchdog;
 import com.android.server.am.BatteryStatsService;
 import com.android.server.lights.LightsManager;
@@ -192,6 +195,9 @@
     // This should perhaps be a setting.
     private static final int SCREEN_BRIGHTNESS_BOOST_TIMEOUT = 5 * 1000;
 
+    // Float.NaN cannot be stored in config.xml so -2 is used instead
+    private static final float INVALID_BRIGHTNESS_IN_CONFIG = -2f;
+
     // How long a partial wake lock must be held until we consider it a long wake lock.
     static final long MIN_LONG_WAKE_CHECK_INTERVAL = 60*1000;
 
@@ -236,8 +242,8 @@
     private final ServiceThread mHandlerThread;
     private final PowerManagerHandler mHandler;
     private final AmbientDisplayConfiguration mAmbientDisplayConfiguration;
-    private final BatterySaverPolicy mBatterySaverPolicy;
     private final BatterySaverController mBatterySaverController;
+    private final BatterySaverPolicy mBatterySaverPolicy;
     private final BatterySaverStateMachine mBatterySaverStateMachine;
     private final BatterySavingStats mBatterySavingStats;
     private final AttentionDetector mAttentionDetector;
@@ -269,7 +275,8 @@
 
     // Indicates whether the device is awake or asleep or somewhere in between.
     // This is distinct from the screen power state, which is managed separately.
-    private int mWakefulness;
+    // Do not access directly; always use {@link #setWakefulness} and {@link getWakefulness}.
+    private int mWakefulnessRaw;
     private boolean mWakefulnessChanging;
 
     // True if the sandman has just been summoned for the first time since entering the
@@ -485,13 +492,17 @@
     private boolean mProximityPositive;
 
     // Screen brightness setting limits.
-    private int mScreenBrightnessSettingMinimum;
-    private int mScreenBrightnessSettingMaximum;
-    private int mScreenBrightnessSettingDefault;
-
-    // The screen brightness setting, from 0 to 255.
-    // Use -1 if no value has been set.
-    private int mScreenBrightnessSetting;
+    private float mScreenBrightnessSettingMinimum;
+    private float mScreenBrightnessSettingMaximum;
+    private float mScreenBrightnessSettingDefault;
+    public final float mScreenBrightnessMinimum;
+    public final float mScreenBrightnessMaximum;
+    public final float mScreenBrightnessDefault;
+    public final float mScreenBrightnessDoze;
+    public final float mScreenBrightnessDim;
+    public final float mScreenBrightnessMinimumVr;
+    public final float mScreenBrightnessMaximumVr;
+    public final float mScreenBrightnessDefaultVr;
 
     // The screen brightness mode.
     // One of the Settings.System.SCREEN_BRIGHTNESS_MODE_* constants.
@@ -502,6 +513,9 @@
     // Use -1 to disable.
     private int mScreenBrightnessOverrideFromWindowManager = -1;
 
+    private float mScreenBrightnessOverrideFromWindowManagerFloat =
+            PowerManager.BRIGHTNESS_INVALID_FLOAT;
+
     // The window manager has determined the user to be inactive via other means.
     // Set this to false to disable.
     private boolean mUserInactiveOverrideFromWindowManager;
@@ -521,6 +535,8 @@
     // The screen brightness to use while dozing.
     private int mDozeScreenBrightnessOverrideFromDreamManager = PowerManager.BRIGHTNESS_DEFAULT;
 
+    private float mDozeScreenBrightnessOverrideFromDreamManagerFloat =
+            PowerManager.BRIGHTNESS_INVALID_FLOAT;
     // Keep display state when dozing.
     private boolean mDrawWakeLockOverrideFromSidekick;
 
@@ -749,6 +765,13 @@
             return new BatterySaverPolicy(lock, context, batterySavingStats);
         }
 
+        BatterySaverController createBatterySaverController(
+                Object lock, Context context, BatterySaverPolicy batterySaverPolicy,
+                BatterySavingStats batterySavingStats) {
+            return new BatterySaverController(lock, context, BackgroundThread.get().getLooper(),
+                    batterySaverPolicy, batterySavingStats);
+        }
+
         NativeWrapper createNativeWrapper() {
             return new NativeWrapper();
         }
@@ -779,6 +802,10 @@
                 }
             };
         }
+
+        void invalidateIsInteractiveCaches() {
+            PowerManager.invalidateIsInteractiveCaches();
+        }
     }
 
     final Constants mConstants;
@@ -818,15 +845,99 @@
         mBatterySavingStats = new BatterySavingStats(mLock);
         mBatterySaverPolicy =
                 mInjector.createBatterySaverPolicy(mLock, mContext, mBatterySavingStats);
-        mBatterySaverController = new BatterySaverController(mLock, mContext,
-                BackgroundThread.get().getLooper(), mBatterySaverPolicy,
-                mBatterySavingStats);
+        mBatterySaverController = mInjector.createBatterySaverController(mLock, mContext,
+                mBatterySaverPolicy, mBatterySavingStats);
         mBatterySaverStateMachine = new BatterySaverStateMachine(
                 mLock, mContext, mBatterySaverController);
 
         mInattentiveSleepWarningOverlayController =
                 mInjector.createInattentiveSleepWarningController();
 
+        // Save brightness values:
+        // Get float values from config.
+        // Store float if valid
+        // Otherwise, get int values and convert to float and then store.
+        final float min = mContext.getResources().getFloat(com.android.internal.R.dimen
+                .config_screenBrightnessSettingMinimumFloat);
+        final float max = mContext.getResources().getFloat(com.android.internal.R.dimen
+                .config_screenBrightnessSettingMaximumFloat);
+        final float def = mContext.getResources().getFloat(com.android.internal.R.dimen
+                .config_screenBrightnessSettingDefaultFloat);
+        final float doze = mContext.getResources().getFloat(com.android.internal.R.dimen
+                .config_screenBrightnessDozeFloat);
+        final float dim = mContext.getResources().getFloat(com.android.internal.R.dimen
+                .config_screenBrightnessDimFloat);
+
+        if (min == INVALID_BRIGHTNESS_IN_CONFIG || max == INVALID_BRIGHTNESS_IN_CONFIG
+                || def == INVALID_BRIGHTNESS_IN_CONFIG) {
+            mScreenBrightnessMinimum = BrightnessSynchronizer.brightnessIntToFloat(
+                    mContext.getResources().getInteger(com.android.internal.R.integer
+                            .config_screenBrightnessSettingMinimum),
+                    PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON,
+                    PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX);
+            mScreenBrightnessMaximum = BrightnessSynchronizer.brightnessIntToFloat(
+                    mContext.getResources().getInteger(com.android.internal.R.integer
+                            .config_screenBrightnessSettingMaximum),
+                    PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON,
+                    PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX);
+            mScreenBrightnessDefault = BrightnessSynchronizer.brightnessIntToFloat(
+                    mContext.getResources().getInteger(com.android.internal.R.integer
+                            .config_screenBrightnessSettingDefault),
+                    PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON,
+                    PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX);
+        } else {
+            mScreenBrightnessMinimum = min;
+            mScreenBrightnessMaximum = max;
+            mScreenBrightnessDefault = def;
+        }
+        if (doze == INVALID_BRIGHTNESS_IN_CONFIG) {
+            mScreenBrightnessDoze = BrightnessSynchronizer.brightnessIntToFloat(
+                    mContext.getResources().getInteger(com.android.internal.R.integer
+                            .config_screenBrightnessDoze), PowerManager.BRIGHTNESS_OFF + 1,
+                    PowerManager.BRIGHTNESS_ON, PowerManager.BRIGHTNESS_MIN,
+                    PowerManager.BRIGHTNESS_MAX);
+        } else {
+            mScreenBrightnessDoze = doze;
+        }
+        if (dim == INVALID_BRIGHTNESS_IN_CONFIG) {
+            mScreenBrightnessDim = BrightnessSynchronizer.brightnessIntToFloat(
+                    mContext.getResources().getInteger(com.android.internal.R.integer
+                            .config_screenBrightnessDim), PowerManager.BRIGHTNESS_OFF + 1,
+                    PowerManager.BRIGHTNESS_ON, PowerManager.BRIGHTNESS_MIN,
+                    PowerManager.BRIGHTNESS_MAX);
+        } else {
+            mScreenBrightnessDim = dim;
+        }
+
+        final float vrMin = mContext.getResources().getFloat(com.android.internal.R.dimen
+                .config_screenBrightnessSettingForVrMinimumFloat);
+        final float vrMax = mContext.getResources().getFloat(com.android.internal.R.dimen
+                .config_screenBrightnessSettingForVrMaximumFloat);
+        final float vrDef = mContext.getResources().getFloat(com.android.internal.R.dimen
+                .config_screenBrightnessSettingForVrDefaultFloat);
+        if (vrMin == INVALID_BRIGHTNESS_IN_CONFIG || vrMax == INVALID_BRIGHTNESS_IN_CONFIG
+                || vrDef == INVALID_BRIGHTNESS_IN_CONFIG) {
+            mScreenBrightnessMinimumVr = BrightnessSynchronizer.brightnessIntToFloat(
+                    mContext.getResources().getInteger(com.android.internal.R.integer
+                            .config_screenBrightnessForVrSettingMinimum),
+                    PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON,
+                    PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX);
+            mScreenBrightnessMaximumVr = BrightnessSynchronizer.brightnessIntToFloat(
+                    mContext.getResources().getInteger(com.android.internal.R.integer
+                            .config_screenBrightnessForVrSettingMaximum),
+                    PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON,
+                    PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX);
+            mScreenBrightnessDefaultVr = BrightnessSynchronizer.brightnessIntToFloat(
+                    mContext.getResources().getInteger(com.android.internal.R.integer
+                            .config_screenBrightnessForVrSettingDefault),
+                    PowerManager.BRIGHTNESS_OFF + 1, PowerManager.BRIGHTNESS_ON,
+                    PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX);
+        } else {
+            mScreenBrightnessMinimumVr = vrMin;
+            mScreenBrightnessMaximumVr = vrMax;
+            mScreenBrightnessDefaultVr = vrDef;
+        }
+
         synchronized (mLock) {
             mWakeLockSuspendBlocker =
                     mInjector.createSuspendBlocker(this, "PowerManagerService.WakeLocks");
@@ -839,13 +950,14 @@
             mHalAutoSuspendModeEnabled = false;
             mHalInteractiveModeEnabled = true;
 
-            mWakefulness = WAKEFULNESS_AWAKE;
+            mWakefulnessRaw = WAKEFULNESS_AWAKE;
             sQuiescent = mSystemProperties.get(SYSTEM_PROPERTY_QUIESCENT, "0").equals("1");
 
             mNativeWrapper.nativeInit(this);
             mNativeWrapper.nativeSetAutoSuspend(false);
             mNativeWrapper.nativeSetInteractive(true);
             mNativeWrapper.nativeSetFeature(POWER_FEATURE_DOUBLE_TAP_TO_WAKE, 0);
+            mInjector.invalidateIsInteractiveCaches();
         }
     }
 
@@ -895,9 +1007,12 @@
             mAttentionDetector.systemReady(mContext);
 
             PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
-            mScreenBrightnessSettingMinimum = pm.getMinimumScreenBrightnessSetting();
-            mScreenBrightnessSettingMaximum = pm.getMaximumScreenBrightnessSetting();
-            mScreenBrightnessSettingDefault = pm.getDefaultScreenBrightnessSetting();
+            mScreenBrightnessSettingMinimum = pm.getBrightnessConstraint(
+                    PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
+            mScreenBrightnessSettingMaximum = pm.getBrightnessConstraint(
+                    PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM);
+            mScreenBrightnessSettingDefault = pm.getBrightnessConstraint(
+                    PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT);
 
             SensorManager sensorManager = new SystemSensorManager(mContext, mHandler.getLooper());
 
@@ -1464,8 +1579,8 @@
                 mOverriddenTimeout = -1;
             }
 
-            if (mWakefulness == WAKEFULNESS_ASLEEP
-                    || mWakefulness == WAKEFULNESS_DOZING
+            if (getWakefulnessLocked() == WAKEFULNESS_ASLEEP
+                    || getWakefulnessLocked() == WAKEFULNESS_DOZING
                     || (flags & PowerManager.USER_ACTIVITY_FLAG_INDIRECT) != 0) {
                 return false;
             }
@@ -1521,7 +1636,7 @@
             Slog.d(TAG, "wakeUpNoUpdateLocked: eventTime=" + eventTime + ", uid=" + reasonUid);
         }
 
-        if (eventTime < mLastSleepTime || mWakefulness == WAKEFULNESS_AWAKE
+        if (eventTime < mLastSleepTime || getWakefulnessLocked() == WAKEFULNESS_AWAKE
                 || mForceSuspendActive || !mSystemReady) {
             return false;
         }
@@ -1531,7 +1646,7 @@
         Trace.traceBegin(Trace.TRACE_TAG_POWER, "wakeUp");
         try {
             Slog.i(TAG, "Waking up from "
-                    + PowerManagerInternal.wakefulnessToString(mWakefulness)
+                    + PowerManagerInternal.wakefulnessToString(getWakefulnessLocked())
                     + " (uid=" + reasonUid
                     + ", reason=" + PowerManager.wakeReasonToString(reason)
                     + ", details=" + details
@@ -1577,8 +1692,8 @@
         }
 
         if (eventTime < mLastWakeTime
-                || mWakefulness == WAKEFULNESS_ASLEEP
-                || mWakefulness == WAKEFULNESS_DOZING
+                || getWakefulnessLocked() == WAKEFULNESS_ASLEEP
+                || getWakefulnessLocked() == WAKEFULNESS_DOZING
                 || !mSystemReady
                 || !mBootCompleted) {
             return false;
@@ -1635,7 +1750,7 @@
             Slog.d(TAG, "napNoUpdateLocked: eventTime=" + eventTime + ", uid=" + uid);
         }
 
-        if (eventTime < mLastWakeTime || mWakefulness != WAKEFULNESS_AWAKE
+        if (eventTime < mLastWakeTime || getWakefulnessLocked() != WAKEFULNESS_AWAKE
                 || !mBootCompleted || !mSystemReady) {
             return false;
         }
@@ -1659,7 +1774,7 @@
                     + ", uid=" + uid);
         }
 
-        if (eventTime < mLastWakeTime || mWakefulness == WAKEFULNESS_ASLEEP
+        if (eventTime < mLastWakeTime || getWakefulnessLocked() == WAKEFULNESS_ASLEEP
                 || !mBootCompleted || !mSystemReady) {
             return false;
         }
@@ -1678,13 +1793,15 @@
 
     @VisibleForTesting
     void setWakefulnessLocked(int wakefulness, int reason, long eventTime) {
-        if (mWakefulness != wakefulness) {
-            mWakefulness = wakefulness;
+        if (getWakefulnessLocked() != wakefulness) {
+            // Under lock, invalidate before set ensures caches won't return stale values.
+            mInjector.invalidateIsInteractiveCaches();
+            mWakefulnessRaw = wakefulness;
             mWakefulnessChanging = true;
             mDirty |= DIRTY_WAKEFULNESS;
 
             // This is only valid while we are in wakefulness dozing. Set to false otherwise.
-            mDozeStartInProgress &= (mWakefulness == WAKEFULNESS_DOZING);
+            mDozeStartInProgress &= (getWakefulnessLocked() == WAKEFULNESS_DOZING);
 
             if (mNotifier != null) {
                 mNotifier.onWakefulnessChangeStarted(wakefulness, reason, eventTime);
@@ -1694,8 +1811,8 @@
     }
 
     @VisibleForTesting
-    int getWakefulness() {
-        return mWakefulness;
+    int getWakefulnessLocked() {
+        return mWakefulnessRaw;
     }
 
     /**
@@ -1713,17 +1830,18 @@
 
     private void finishWakefulnessChangeIfNeededLocked() {
         if (mWakefulnessChanging && mDisplayReady) {
-            if (mWakefulness == WAKEFULNESS_DOZING
+            if (getWakefulnessLocked() == WAKEFULNESS_DOZING
                     && (mWakeLockSummary & WAKE_LOCK_DOZE) == 0) {
                 return; // wait until dream has enabled dozing
             } else {
                 // Doze wakelock acquired (doze started) or device is no longer dozing.
                 mDozeStartInProgress = false;
             }
-            if (mWakefulness == WAKEFULNESS_DOZING || mWakefulness == WAKEFULNESS_ASLEEP) {
+            if (getWakefulnessLocked() == WAKEFULNESS_DOZING
+                    || getWakefulnessLocked() == WAKEFULNESS_ASLEEP) {
                 logSleepTimeoutRecapturedLocked();
             }
-            if (mWakefulness == WAKEFULNESS_AWAKE) {
+            if (getWakefulnessLocked() == WAKEFULNESS_AWAKE) {
                 Trace.asyncTraceEnd(Trace.TRACE_TAG_POWER, TRACE_SCREEN_ON, 0);
                 final int latencyMs = (int) (SystemClock.uptimeMillis() - mLastWakeTime);
                 if (latencyMs >= SCREEN_ON_LATENCY_WARNING_MS) {
@@ -1903,7 +2021,7 @@
         }
 
         // If already dreaming and becoming powered, then don't wake.
-        if (mIsPowered && mWakefulness == WAKEFULNESS_DREAMING) {
+        if (mIsPowered && getWakefulnessLocked() == WAKEFULNESS_DREAMING) {
             return false;
         }
 
@@ -1913,7 +2031,7 @@
         }
 
         // On Always On Display, SystemUI shows the charging indicator
-        if (mAlwaysOnEnabled && mWakefulness == WAKEFULNESS_DOZING) {
+        if (mAlwaysOnEnabled && getWakefulnessLocked() == WAKEFULNESS_DOZING) {
             return false;
         }
 
@@ -1978,7 +2096,7 @@
 
             if (DEBUG_SPEW) {
                 Slog.d(TAG, "updateWakeLockSummaryLocked: mWakefulness="
-                        + PowerManagerInternal.wakefulnessToString(mWakefulness)
+                        + PowerManagerInternal.wakefulnessToString(getWakefulnessLocked())
                         + ", mWakeLockSummary=0x" + Integer.toHexString(mWakeLockSummary));
             }
         }
@@ -1986,23 +2104,23 @@
 
     private int adjustWakeLockSummaryLocked(int wakeLockSummary) {
         // Cancel wake locks that make no sense based on the current state.
-        if (mWakefulness != WAKEFULNESS_DOZING) {
+        if (getWakefulnessLocked() != WAKEFULNESS_DOZING) {
             wakeLockSummary &= ~(WAKE_LOCK_DOZE | WAKE_LOCK_DRAW);
         }
-        if (mWakefulness == WAKEFULNESS_ASLEEP
+        if (getWakefulnessLocked() == WAKEFULNESS_ASLEEP
                 || (wakeLockSummary & WAKE_LOCK_DOZE) != 0) {
             wakeLockSummary &= ~(WAKE_LOCK_SCREEN_BRIGHT | WAKE_LOCK_SCREEN_DIM
                     | WAKE_LOCK_BUTTON_BRIGHT);
-            if (mWakefulness == WAKEFULNESS_ASLEEP) {
+            if (getWakefulnessLocked() == WAKEFULNESS_ASLEEP) {
                 wakeLockSummary &= ~WAKE_LOCK_PROXIMITY_SCREEN_OFF;
             }
         }
 
         // Infer implied wake locks where necessary based on the current state.
         if ((wakeLockSummary & (WAKE_LOCK_SCREEN_BRIGHT | WAKE_LOCK_SCREEN_DIM)) != 0) {
-            if (mWakefulness == WAKEFULNESS_AWAKE) {
+            if (getWakefulnessLocked() == WAKEFULNESS_AWAKE) {
                 wakeLockSummary |= WAKE_LOCK_CPU | WAKE_LOCK_STAY_AWAKE;
-            } else if (mWakefulness == WAKEFULNESS_DREAMING) {
+            } else if (getWakefulnessLocked() == WAKEFULNESS_DREAMING) {
                 wakeLockSummary |= WAKE_LOCK_CPU;
             }
         }
@@ -2110,9 +2228,9 @@
             mHandler.removeMessages(MSG_USER_ACTIVITY_TIMEOUT);
 
             long nextTimeout = 0;
-            if (mWakefulness == WAKEFULNESS_AWAKE
-                    || mWakefulness == WAKEFULNESS_DREAMING
-                    || mWakefulness == WAKEFULNESS_DOZING) {
+            if (getWakefulnessLocked() == WAKEFULNESS_AWAKE
+                    || getWakefulnessLocked() == WAKEFULNESS_DREAMING
+                    || getWakefulnessLocked() == WAKEFULNESS_DOZING) {
                 final long attentiveTimeout = getAttentiveTimeoutLocked();
                 final long sleepTimeout = getSleepTimeoutLocked(attentiveTimeout);
                 final long screenOffTimeout = getScreenOffTimeoutLocked(sleepTimeout,
@@ -2196,7 +2314,7 @@
 
             if (DEBUG_SPEW) {
                 Slog.d(TAG, "updateUserActivitySummaryLocked: mWakefulness="
-                        + PowerManagerInternal.wakefulnessToString(mWakefulness)
+                        + PowerManagerInternal.wakefulnessToString(getWakefulnessLocked())
                         + ", mUserActivitySummary=0x" + Integer.toHexString(mUserActivitySummary)
                         + ", nextTimeout=" + TimeUtils.formatUptime(nextTimeout));
             }
@@ -2265,7 +2383,7 @@
                 mInattentiveSleepWarningOverlayController.show();
                 nextTimeout = goToSleepTime;
             } else {
-                if (DEBUG && mWakefulness != WAKEFULNESS_ASLEEP) {
+                if (DEBUG && getWakefulnessLocked() != WAKEFULNESS_ASLEEP) {
                     Slog.i(TAG, "Going to sleep now due to long user inactivity");
                 }
             }
@@ -2283,7 +2401,7 @@
             return false;
         }
 
-        if (mWakefulness != WAKEFULNESS_AWAKE) {
+        if (getWakefulnessLocked() != WAKEFULNESS_AWAKE) {
             mInattentiveSleepWarningOverlayController.dismiss(false);
             return true;
         } else if (attentiveTimeout < 0 || isBeingKeptFromShowingInattentiveSleepWarningLocked()
@@ -2385,8 +2503,9 @@
         boolean changed = false;
         if ((dirty & (DIRTY_WAKE_LOCKS | DIRTY_USER_ACTIVITY | DIRTY_BOOT_COMPLETED
                 | DIRTY_WAKEFULNESS | DIRTY_STAY_ON | DIRTY_PROXIMITY_POSITIVE
-                | DIRTY_DOCK_STATE | DIRTY_ATTENTIVE)) != 0) {
-            if (mWakefulness == WAKEFULNESS_AWAKE && isItBedTimeYetLocked()) {
+                | DIRTY_DOCK_STATE | DIRTY_ATTENTIVE | DIRTY_SETTINGS
+                | DIRTY_SCREEN_BRIGHTNESS_BOOST)) != 0) {
+            if (getWakefulnessLocked() == WAKEFULNESS_AWAKE && isItBedTimeYetLocked()) {
                 if (DEBUG_SPEW) {
                     Slog.d(TAG, "updateWakefulnessLocked: Bed time...");
                 }
@@ -2509,7 +2628,7 @@
         final int wakefulness;
         synchronized (mLock) {
             mSandmanScheduled = false;
-            wakefulness = mWakefulness;
+            wakefulness = getWakefulnessLocked();
             if (mSandmanSummoned && mDisplayReady) {
                 startDreaming = canDreamLocked() || canDozeLocked();
                 mSandmanSummoned = false;
@@ -2551,7 +2670,7 @@
 
             // If preconditions changed, wait for the next iteration to determine
             // whether the dream should continue (or be restarted).
-            if (mSandmanSummoned || mWakefulness != wakefulness) {
+            if (mSandmanSummoned || getWakefulnessLocked() != wakefulness) {
                 return; // wait for next cycle
             }
 
@@ -2613,7 +2732,7 @@
      * Returns true if the device is allowed to dream in its current state.
      */
     private boolean canDreamLocked() {
-        if (mWakefulness != WAKEFULNESS_DREAMING
+        if (getWakefulnessLocked() != WAKEFULNESS_DREAMING
                 || !mDreamsSupportedConfig
                 || !mDreamsEnabledSetting
                 || !mDisplayPowerRequest.isBrightOrDim()
@@ -2645,7 +2764,7 @@
      * Returns true if the device is allowed to doze in its current state.
      */
     private boolean canDozeLocked() {
-        return mWakefulness == WAKEFULNESS_DOZING;
+        return getWakefulnessLocked() == WAKEFULNESS_DOZING;
     }
 
     /**
@@ -2672,7 +2791,7 @@
 
             // Determine appropriate screen brightness and auto-brightness adjustments.
             final boolean autoBrightness;
-            final int screenBrightnessOverride;
+            final float screenBrightnessOverride;
             if (!mBootCompleted) {
                 // Keep the brightness steady during boot. This requires the
                 // bootloader brightness and the default brightness to be identical.
@@ -2680,11 +2799,11 @@
                 screenBrightnessOverride = mScreenBrightnessSettingDefault;
             } else if (isValidBrightness(mScreenBrightnessOverrideFromWindowManager)) {
                 autoBrightness = false;
-                screenBrightnessOverride = mScreenBrightnessOverrideFromWindowManager;
+                screenBrightnessOverride = mScreenBrightnessOverrideFromWindowManagerFloat;
             } else {
                 autoBrightness = (mScreenBrightnessModeSetting ==
                         Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
-                screenBrightnessOverride = -1;
+                screenBrightnessOverride = PowerManager.BRIGHTNESS_INVALID_FLOAT;
             }
 
             // Update display power request.
@@ -2707,10 +2826,11 @@
                     }
                 }
                 mDisplayPowerRequest.dozeScreenBrightness =
-                        mDozeScreenBrightnessOverrideFromDreamManager;
+                        mDozeScreenBrightnessOverrideFromDreamManagerFloat;
             } else {
                 mDisplayPowerRequest.dozeScreenState = Display.STATE_UNKNOWN;
-                mDisplayPowerRequest.dozeScreenBrightness = PowerManager.BRIGHTNESS_DEFAULT;
+                mDisplayPowerRequest.dozeScreenBrightness =
+                        PowerManager.BRIGHTNESS_INVALID_FLOAT;
             }
 
             mDisplayReady = mDisplayManagerInternal.requestPowerState(mDisplayPowerRequest,
@@ -2720,7 +2840,7 @@
             if (DEBUG_SPEW) {
                 Slog.d(TAG, "updateDisplayPowerStateLocked: mDisplayReady=" + mDisplayReady
                         + ", policy=" + mDisplayPowerRequest.policy
-                        + ", mWakefulness=" + mWakefulness
+                        + ", mWakefulness=" + getWakefulnessLocked()
                         + ", mWakeLockSummary=0x" + Integer.toHexString(mWakeLockSummary)
                         + ", mUserActivitySummary=0x" + Integer.toHexString(mUserActivitySummary)
                         + ", mBootCompleted=" + mBootCompleted
@@ -2766,11 +2886,11 @@
 
     @VisibleForTesting
     int getDesiredScreenPolicyLocked() {
-        if (mWakefulness == WAKEFULNESS_ASLEEP || sQuiescent) {
+        if (getWakefulnessLocked() == WAKEFULNESS_ASLEEP || sQuiescent) {
             return DisplayPowerRequest.POLICY_OFF;
         }
 
-        if (mWakefulness == WAKEFULNESS_DOZING) {
+        if (getWakefulnessLocked() == WAKEFULNESS_DOZING) {
             if ((mWakeLockSummary & WAKE_LOCK_DOZE) != 0) {
                 return DisplayPowerRequest.POLICY_DOZE;
             }
@@ -2974,7 +3094,7 @@
         // Here we wait for mWakefulnessChanging to become false since the wakefulness
         // transition to DOZING isn't considered "changed" until the doze wake lock is
         // acquired.
-        if (mWakefulness == WAKEFULNESS_DOZING && mDozeStartInProgress) {
+        if (getWakefulnessLocked() == WAKEFULNESS_DOZING && mDozeStartInProgress) {
             return true;
         }
 
@@ -3014,7 +3134,7 @@
 
     private boolean isInteractiveInternal() {
         synchronized (mLock) {
-            return PowerManagerInternal.isInteractive(mWakefulness);
+            return PowerManagerInternal.isInteractive(getWakefulnessLocked());
         }
     }
 
@@ -3051,7 +3171,10 @@
     }
 
     private void shutdownOrRebootInternal(final @HaltMode int haltMode, final boolean confirm,
-            final String reason, boolean wait) {
+            @Nullable final String reason, boolean wait) {
+        if (PowerManager.REBOOT_USERSPACE.equals(reason)) {
+            UserspaceRebootLogger.noteUserspaceRebootWasRequested();
+        }
         if (mHandler == null || !mSystemReady) {
             if (RescueParty.isAttemptingFactoryReset()) {
                 // If we're stuck in a really low-level reboot loop, and a
@@ -3387,7 +3510,7 @@
 
     private void boostScreenBrightnessInternal(long eventTime, int uid) {
         synchronized (mLock) {
-            if (!mSystemReady || mWakefulness == WAKEFULNESS_ASLEEP
+            if (!mSystemReady || getWakefulnessLocked() == WAKEFULNESS_ASLEEP
                     || eventTime < mLastScreenBrightnessBoostTime) {
                 return;
             }
@@ -3426,10 +3549,13 @@
         }
     }
 
+    // TODO(brightnessfloat): change to float
     private void setScreenBrightnessOverrideFromWindowManagerInternal(int brightness) {
         synchronized (mLock) {
             if (mScreenBrightnessOverrideFromWindowManager != brightness) {
                 mScreenBrightnessOverrideFromWindowManager = brightness;
+                mScreenBrightnessOverrideFromWindowManagerFloat =
+                        BrightnessSynchronizer.brightnessIntToFloat(mContext, brightness);
                 mDirty |= DIRTY_SETTINGS;
                 updatePowerStateLocked();
             }
@@ -3462,6 +3588,9 @@
                     || mDozeScreenBrightnessOverrideFromDreamManager != screenBrightness) {
                 mDozeScreenStateOverrideFromDreamManager = screenState;
                 mDozeScreenBrightnessOverrideFromDreamManager = screenBrightness;
+                mDozeScreenBrightnessOverrideFromDreamManagerFloat =
+                        BrightnessSynchronizer.brightnessIntToFloat(mContext,
+                                mDozeScreenBrightnessOverrideFromDreamManager);
                 mDirty |= DIRTY_SETTINGS;
                 updatePowerStateLocked();
             }
@@ -3611,7 +3740,8 @@
             pw.println("Power Manager State:");
             mConstants.dump(pw);
             pw.println("  mDirty=0x" + Integer.toHexString(mDirty));
-            pw.println("  mWakefulness=" + PowerManagerInternal.wakefulnessToString(mWakefulness));
+            pw.println("  mWakefulness="
+                    + PowerManagerInternal.wakefulnessToString(getWakefulnessLocked()));
             pw.println("  mWakefulnessChanging=" + mWakefulnessChanging);
             pw.println("  mIsPowered=" + mIsPowered);
             pw.println("  mPlugType=" + mPlugType);
@@ -3715,10 +3845,9 @@
                     + mMaximumScreenOffTimeoutFromDeviceAdmin + " (enforced="
                     + isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked() + ")");
             pw.println("  mStayOnWhilePluggedInSetting=" + mStayOnWhilePluggedInSetting);
-            pw.println("  mScreenBrightnessSetting=" + mScreenBrightnessSetting);
             pw.println("  mScreenBrightnessModeSetting=" + mScreenBrightnessModeSetting);
-            pw.println("  mScreenBrightnessOverrideFromWindowManager="
-                    + mScreenBrightnessOverrideFromWindowManager);
+            pw.println("  mScreenBrightnessOverrideFromWindowManagerFloat="
+                    + mScreenBrightnessOverrideFromWindowManagerFloat);
             pw.println("  mUserActivityTimeoutOverrideFromWindowManager="
                     + mUserActivityTimeoutOverrideFromWindowManager);
             pw.println("  mUserInactiveOverrideFromWindowManager="
@@ -3728,9 +3857,9 @@
             pw.println("  mDrawWakeLockOverrideFromSidekick=" + mDrawWakeLockOverrideFromSidekick);
             pw.println("  mDozeScreenBrightnessOverrideFromDreamManager="
                     + mDozeScreenBrightnessOverrideFromDreamManager);
-            pw.println("  mScreenBrightnessSettingMinimum=" + mScreenBrightnessSettingMinimum);
-            pw.println("  mScreenBrightnessSettingMaximum=" + mScreenBrightnessSettingMaximum);
-            pw.println("  mScreenBrightnessSettingDefault=" + mScreenBrightnessSettingDefault);
+            pw.println("  mScreenBrightnessSettingMinimumFloat=" + mScreenBrightnessSettingMinimum);
+            pw.println("  mScreenBrightnessSettingMaximumFloat=" + mScreenBrightnessSettingMaximum);
+            pw.println("  mScreenBrightnessSettingDefaultFloat=" + mScreenBrightnessSettingDefault);
             pw.println("  mDoubleTapWakeEnabled=" + mDoubleTapWakeEnabled);
             pw.println("  mIsVrModeEnabled=" + mIsVrModeEnabled);
             pw.println("  mForegroundProfile=" + mForegroundProfile);
@@ -3823,7 +3952,7 @@
         synchronized (mLock) {
             mConstants.dumpProto(proto);
             proto.write(PowerManagerServiceDumpProto.DIRTY, mDirty);
-            proto.write(PowerManagerServiceDumpProto.WAKEFULNESS, mWakefulness);
+            proto.write(PowerManagerServiceDumpProto.WAKEFULNESS, getWakefulnessLocked());
             proto.write(PowerManagerServiceDumpProto.IS_WAKEFULNESS_CHANGING, mWakefulnessChanging);
             proto.write(PowerManagerServiceDumpProto.IS_POWERED, mIsPowered);
             proto.write(PowerManagerServiceDumpProto.PLUG_TYPE, mPlugType);
@@ -4056,7 +4185,7 @@
             proto.write(
                     PowerServiceSettingsAndConfigurationDumpProto
                             .SCREEN_BRIGHTNESS_OVERRIDE_FROM_WINDOW_MANAGER,
-                    mScreenBrightnessOverrideFromWindowManager);
+                    mScreenBrightnessOverrideFromWindowManagerFloat);
             proto.write(
                     PowerServiceSettingsAndConfigurationDumpProto
                             .USER_ACTIVITY_TIMEOUT_OVERRIDE_FROM_WINDOW_MANAGER_MS,
@@ -4738,6 +4867,29 @@
             }
         }
 
+        public float getBrightnessConstraint(int constraint) {
+            switch (constraint) {
+                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM:
+                    return mScreenBrightnessMinimum;
+                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM:
+                    return mScreenBrightnessMaximum;
+                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT:
+                    return mScreenBrightnessDefault;
+                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DIM:
+                    return mScreenBrightnessDim;
+                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DOZE:
+                    return mScreenBrightnessDoze;
+                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM_VR:
+                    return mScreenBrightnessMinimumVr;
+                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM_VR:
+                    return mScreenBrightnessMaximumVr;
+                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_VR:
+                    return mScreenBrightnessDefaultVr;
+                default:
+                    return PowerManager.BRIGHTNESS_INVALID_FLOAT;
+            }
+        }
+
         @Override // Binder call
         public boolean isInteractive() {
             final long ident = Binder.clearCallingIdentity();
@@ -4908,7 +5060,7 @@
          * @param wait If true, this call waits for the reboot to complete and does not return.
          */
         @Override // Binder call
-        public void reboot(boolean confirm, String reason, boolean wait) {
+        public void reboot(boolean confirm, @Nullable String reason, boolean wait) {
             mContext.enforceCallingOrSelfPermission(android.Manifest.permission.REBOOT, null);
             if (PowerManager.REBOOT_RECOVERY.equals(reason)
                     || PowerManager.REBOOT_RECOVERY_UPDATE.equals(reason)) {
diff --git a/services/core/java/com/android/server/power/PreRebootLogger.java b/services/core/java/com/android/server/power/PreRebootLogger.java
new file mode 100644
index 0000000..cda00b4
--- /dev/null
+++ b/services/core/java/com/android/server/power/PreRebootLogger.java
@@ -0,0 +1,133 @@
+/*
+ * 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 android.annotation.NonNull;
+import android.content.Context;
+import android.os.Environment;
+import android.os.IBinder;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.provider.Settings;
+import android.util.Slog;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.ArrayUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+
+/**
+ * Provides utils to dump/wipe pre-reboot information.
+ */
+final class PreRebootLogger {
+    private static final String TAG = "PreRebootLogger";
+    private static final String PREREBOOT_DIR = "prereboot";
+
+    private static final String[] BUFFERS_TO_DUMP = {"system"};
+    private static final String[] SERVICES_TO_DUMP = {Context.ROLLBACK_SERVICE, "package"};
+
+    private static final Object sLock = new Object();
+
+    /**
+     * Process pre-reboot information. Dump pre-reboot information to {@link #PREREBOOT_DIR} if
+     * enabled {@link Settings.Global#ADB_ENABLED}; wipe dumped information otherwise.
+     */
+    static void log(Context context) {
+        log(context, getDumpDir());
+    }
+
+    @VisibleForTesting
+    static void log(Context context, @NonNull File dumpDir) {
+        if (Settings.Global.getInt(
+                context.getContentResolver(), Settings.Global.ADB_ENABLED, 0) == 1) {
+            Slog.d(TAG, "Dumping pre-reboot information...");
+            dump(dumpDir);
+        } else {
+            Slog.d(TAG, "Wiping pre-reboot information...");
+            wipe(dumpDir);
+        }
+    }
+
+    private static void dump(@NonNull File dumpDir) {
+        synchronized (sLock) {
+            for (String buffer : BUFFERS_TO_DUMP) {
+                dumpLogsLocked(dumpDir, buffer);
+            }
+            for (String service : SERVICES_TO_DUMP) {
+                dumpServiceLocked(dumpDir, service);
+            }
+        }
+    }
+
+    private static void wipe(@NonNull File dumpDir) {
+        synchronized (sLock) {
+            for (File file : dumpDir.listFiles()) {
+                file.delete();
+            }
+        }
+    }
+
+    private static File getDumpDir() {
+        final File dumpDir = new File(Environment.getDataMiscDirectory(), PREREBOOT_DIR);
+        if (!dumpDir.exists() || !dumpDir.isDirectory()) {
+            throw new UnsupportedOperationException("Pre-reboot dump directory not found");
+        }
+        return dumpDir;
+    }
+
+    @GuardedBy("sLock")
+    private static void dumpLogsLocked(@NonNull File dumpDir, @NonNull String buffer) {
+        try {
+            final File dumpFile = new File(dumpDir, buffer);
+            if (dumpFile.createNewFile()) {
+                dumpFile.setWritable(true /* writable */, true /* ownerOnly */);
+            } else {
+                // Wipes dumped information in existing file before recording new information.
+                new FileWriter(dumpFile, false).flush();
+            }
+
+            final String[] cmdline =
+                    {"logcat", "-d", "-b", buffer, "-f", dumpFile.getAbsolutePath()};
+            Runtime.getRuntime().exec(cmdline).waitFor();
+        } catch (IOException | InterruptedException e) {
+            Slog.d(TAG, "Dump system log buffer before reboot fail", e);
+        }
+    }
+
+    @GuardedBy("sLock")
+    private static void dumpServiceLocked(@NonNull File dumpDir, @NonNull String serviceName) {
+        final IBinder binder = ServiceManager.checkService(serviceName);
+        if (binder == null) {
+            return;
+        }
+
+        try {
+            final File dumpFile = new File(dumpDir, serviceName);
+            final ParcelFileDescriptor fd = ParcelFileDescriptor.open(dumpFile,
+                    ParcelFileDescriptor.MODE_CREATE | ParcelFileDescriptor.MODE_TRUNCATE
+                            | ParcelFileDescriptor.MODE_WRITE_ONLY);
+            binder.dump(fd.getFileDescriptor(), ArrayUtils.emptyArray(String.class));
+        } catch (FileNotFoundException | RemoteException e) {
+            Slog.d(TAG, String.format("Dump %s service before reboot fail", serviceName), e);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java
index cc1cddd..bc722f1 100644
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -44,6 +44,7 @@
 import android.telephony.TelephonyManager;
 import android.util.ArrayMap;
 import android.util.Log;
+import android.util.Slog;
 import android.util.TimingsTraceLog;
 import android.view.WindowManager;
 
@@ -446,6 +447,15 @@
             SystemProperties.set(REBOOT_SAFEMODE_PROPERTY, "1");
         }
 
+        shutdownTimingLog.traceBegin("DumpPreRebootInfo");
+        try {
+            Slog.i(TAG, "Logging pre-reboot information...");
+            PreRebootLogger.log(mContext);
+        } catch (Exception e) {
+            Slog.e(TAG, "Failed to log pre-reboot information", e);
+        }
+        shutdownTimingLog.traceEnd(); // DumpPreRebootInfo
+
         metricStarted(METRIC_SEND_BROADCAST);
         shutdownTimingLog.traceBegin("SendShutdownBroadcast");
         Log.i(TAG, "Sending shutdown broadcast...");
diff --git a/services/core/java/com/android/server/power/ThermalManagerService.java b/services/core/java/com/android/server/power/ThermalManagerService.java
index 491c5ab..da3cbf9 100644
--- a/services/core/java/com/android/server/power/ThermalManagerService.java
+++ b/services/core/java/com/android/server/power/ThermalManagerService.java
@@ -16,15 +16,18 @@
 
 package com.android.server.power;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
 import android.hardware.thermal.V1_0.ThermalStatus;
 import android.hardware.thermal.V1_0.ThermalStatusCode;
 import android.hardware.thermal.V1_1.IThermalCallback;
 import android.hardware.thermal.V2_0.IThermalChangedCallback;
+import android.hardware.thermal.V2_0.TemperatureThreshold;
 import android.hardware.thermal.V2_0.ThrottlingSeverity;
 import android.os.Binder;
 import android.os.CoolingDevice;
+import android.os.Handler;
 import android.os.HwBinder;
 import android.os.IThermalEventListener;
 import android.os.IThermalService;
@@ -36,6 +39,7 @@
 import android.os.ResultReceiver;
 import android.os.ShellCallback;
 import android.os.ShellCommand;
+import android.os.SystemClock;
 import android.os.Temperature;
 import android.util.ArrayMap;
 import android.util.EventLog;
@@ -43,6 +47,7 @@
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.os.BackgroundThread;
 import com.android.internal.util.DumpUtils;
 import com.android.server.EventLogTags;
 import com.android.server.FgThread;
@@ -54,6 +59,7 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -100,6 +106,9 @@
     /** Hal ready. */
     private final AtomicBoolean mHalReady = new AtomicBoolean();
 
+    /** Watches temperatures to forecast when throttling will occur */
+    private final TemperatureWatcher mTemperatureWatcher = new TemperatureWatcher();
+
     /** Invalid throttling status */
     private static final int INVALID_THROTTLING = Integer.MIN_VALUE;
 
@@ -154,6 +163,7 @@
                 onTemperatureChanged(temperatures.get(i), false);
             }
             onTemperatureMapChangedLocked();
+            mTemperatureWatcher.updateSevereThresholds();
             mHalReady.set(true);
         }
     }
@@ -462,6 +472,15 @@
             }
         }
 
+        @Override
+        public float getThermalHeadroom(int forecastSeconds) {
+            if (!mHalReady.get()) {
+                return Float.NaN;
+            }
+
+            return mTemperatureWatcher.getForecast(forecastSeconds);
+        }
+
         private void dumpItemsLocked(PrintWriter pw, String prefix,
                 Collection<?> items) {
             for (Iterator iterator = items.iterator(); iterator.hasNext();) {
@@ -616,6 +635,10 @@
         protected abstract List<CoolingDevice> getCurrentCoolingDevices(boolean shouldFilter,
                 int type);
 
+        @NonNull
+        protected abstract List<TemperatureThreshold> getTemperatureThresholds(boolean shouldFilter,
+                int type);
+
         protected abstract boolean connectToHal();
 
         protected abstract void dump(PrintWriter pw, String prefix);
@@ -728,6 +751,12 @@
         }
 
         @Override
+        protected List<TemperatureThreshold> getTemperatureThresholds(boolean shouldFilter,
+                int type) {
+            return new ArrayList<>();
+        }
+
+        @Override
         protected boolean connectToHal() {
             synchronized (mHalLock) {
                 try {
@@ -857,6 +886,12 @@
         }
 
         @Override
+        protected List<TemperatureThreshold> getTemperatureThresholds(boolean shouldFilter,
+                int type) {
+            return new ArrayList<>();
+        }
+
+        @Override
         protected boolean connectToHal() {
             synchronized (mHalLock) {
                 try {
@@ -975,6 +1010,32 @@
         }
 
         @Override
+        protected List<TemperatureThreshold> getTemperatureThresholds(boolean shouldFilter,
+                int type) {
+            synchronized (mHalLock) {
+                List<TemperatureThreshold> ret = new ArrayList<>();
+                if (mThermalHal20 == null) {
+                    return ret;
+                }
+                try {
+                    mThermalHal20.getTemperatureThresholds(shouldFilter, type,
+                            (status, thresholds) -> {
+                                if (ThermalStatusCode.SUCCESS == status.code) {
+                                    ret.addAll(thresholds);
+                                } else {
+                                    Slog.e(TAG,
+                                            "Couldn't get temperature thresholds because of HAL "
+                                                    + "error: " + status.debugMessage);
+                                }
+                            });
+                } catch (RemoteException e) {
+                    Slog.e(TAG, "Couldn't getTemperatureThresholds, reconnecting...", e);
+                }
+                return ret;
+            }
+        }
+
+        @Override
         protected boolean connectToHal() {
             synchronized (mHalLock) {
                 try {
@@ -1001,4 +1062,190 @@
         }
     }
 
+    private class TemperatureWatcher {
+        private final Handler mHandler = BackgroundThread.getHandler();
+
+        /** Map of skin temperature sensor name to a corresponding list of samples */
+        @GuardedBy("mSamples")
+        private final ArrayMap<String, ArrayList<Sample>> mSamples = new ArrayMap<>();
+
+        /** Map of skin temperature sensor name to the corresponding SEVERE temperature threshold */
+        @GuardedBy("mSamples")
+        private ArrayMap<String, Float> mSevereThresholds = new ArrayMap<>();
+
+        @GuardedBy("mSamples")
+        private long mLastForecastCallTimeMillis = 0;
+
+        void updateSevereThresholds() {
+            synchronized (mSamples) {
+                List<TemperatureThreshold> thresholds =
+                        mHalWrapper.getTemperatureThresholds(true, Temperature.TYPE_SKIN);
+                for (int t = 0; t < thresholds.size(); ++t) {
+                    TemperatureThreshold threshold = thresholds.get(t);
+                    if (threshold.hotThrottlingThresholds.length <= ThrottlingSeverity.SEVERE) {
+                        continue;
+                    }
+                    float temperature =
+                            threshold.hotThrottlingThresholds[ThrottlingSeverity.SEVERE];
+                    if (!Float.isNaN(temperature)) {
+                        mSevereThresholds.put(threshold.name,
+                                threshold.hotThrottlingThresholds[ThrottlingSeverity.SEVERE]);
+                    }
+                }
+            }
+        }
+
+        private static final int INACTIVITY_THRESHOLD_MILLIS = 10000;
+        private static final int RING_BUFFER_SIZE = 30;
+
+        private void updateTemperature() {
+            synchronized (mSamples) {
+                if (SystemClock.elapsedRealtime() - mLastForecastCallTimeMillis
+                        < INACTIVITY_THRESHOLD_MILLIS) {
+                    // Trigger this again after a second as long as forecast has been called more
+                    // recently than the inactivity timeout
+                    mHandler.postDelayed(this::updateTemperature, 1000);
+                } else {
+                    // Otherwise, we've been idle for at least 10 seconds, so we should
+                    // shut down
+                    mSamples.clear();
+                    return;
+                }
+
+                long now = SystemClock.elapsedRealtime();
+                List<Temperature> temperatures = mHalWrapper.getCurrentTemperatures(true,
+                        Temperature.TYPE_SKIN);
+
+                for (int t = 0; t < temperatures.size(); ++t) {
+                    Temperature temperature = temperatures.get(t);
+
+                    // Filter out invalid temperatures. If this results in no values being stored at
+                    // all, the mSamples.empty() check in getForecast() will catch it.
+                    if (Float.isNaN(temperature.getValue())) {
+                        continue;
+                    }
+
+                    ArrayList<Sample> samples = mSamples.computeIfAbsent(temperature.getName(),
+                            k -> new ArrayList<>(RING_BUFFER_SIZE));
+                    if (samples.size() == RING_BUFFER_SIZE) {
+                        samples.remove(0);
+                    }
+                    samples.add(new Sample(now, temperature.getValue()));
+                }
+            }
+        }
+
+        /**
+         * Calculates the trend using a linear regression. As the samples are degrees Celsius with
+         * associated timestamps in milliseconds, the slope is in degrees Celsius per millisecond.
+         */
+        private float getSlopeOf(List<Sample> samples) {
+            long sumTimes = 0L;
+            float sumTemperatures = 0.0f;
+            for (int s = 0; s < samples.size(); ++s) {
+                Sample sample = samples.get(s);
+                sumTimes += sample.time;
+                sumTemperatures += sample.temperature;
+            }
+            long meanTime = sumTimes / samples.size();
+            float meanTemperature = sumTemperatures / samples.size();
+
+            long sampleVariance = 0L;
+            float sampleCovariance = 0.0f;
+            for (int s = 0; s < samples.size(); ++s) {
+                Sample sample = samples.get(s);
+                long timeDelta = sample.time - meanTime;
+                float temperatureDelta = sample.temperature - meanTemperature;
+                sampleVariance += timeDelta * timeDelta;
+                sampleCovariance += timeDelta * temperatureDelta;
+            }
+
+            return sampleCovariance / sampleVariance;
+        }
+
+        /**
+         * Used to determine the temperature corresponding to 0.0. Given that 1.0 is pinned at the
+         * temperature corresponding to the SEVERE threshold, we set 0.0 to be that temperature
+         * minus DEGREES_BETWEEN_ZERO_AND_ONE.
+         */
+        private static final float DEGREES_BETWEEN_ZERO_AND_ONE = 30.0f;
+
+        private float normalizeTemperature(float temperature, float severeThreshold) {
+            synchronized (mSamples) {
+                float zeroNormalized = severeThreshold - DEGREES_BETWEEN_ZERO_AND_ONE;
+                if (temperature <= zeroNormalized) {
+                    return 0.0f;
+                }
+                float delta = temperature - zeroNormalized;
+                return delta / DEGREES_BETWEEN_ZERO_AND_ONE;
+            }
+        }
+
+        private static final int MINIMUM_SAMPLE_COUNT = 3;
+
+        float getForecast(int forecastSeconds) {
+            synchronized (mSamples) {
+                mLastForecastCallTimeMillis = System.currentTimeMillis();
+                if (mSamples.isEmpty()) {
+                    updateTemperature();
+                }
+
+                // If somehow things take much longer than expected or there are no temperatures
+                // to sample, return early
+                if (mSamples.isEmpty()) {
+                    Slog.e(TAG, "No temperature samples found");
+                    return Float.NaN;
+                }
+
+                // If we don't have any thresholds, we can't normalize the temperatures,
+                // so return early
+                if (mSevereThresholds.isEmpty()) {
+                    Slog.e(TAG, "No temperature thresholds found");
+                    return Float.NaN;
+                }
+
+                float maxNormalized = Float.NaN;
+                for (Map.Entry<String, ArrayList<Sample>> entry : mSamples.entrySet()) {
+                    String name = entry.getKey();
+                    ArrayList<Sample> samples = entry.getValue();
+
+                    Float threshold = mSevereThresholds.get(name);
+                    if (threshold == null) {
+                        Slog.e(TAG, "No threshold found for " + name);
+                        continue;
+                    }
+
+                    float currentTemperature = samples.get(0).temperature;
+
+                    if (samples.size() < MINIMUM_SAMPLE_COUNT) {
+                        // Don't try to forecast, just use the latest one we have
+                        float normalized = normalizeTemperature(currentTemperature, threshold);
+                        if (Float.isNaN(maxNormalized) || normalized > maxNormalized) {
+                            maxNormalized = normalized;
+                        }
+                        continue;
+                    }
+
+                    float slope = getSlopeOf(samples);
+                    float normalized = normalizeTemperature(
+                            currentTemperature + slope * forecastSeconds * 1000, threshold);
+                    if (Float.isNaN(maxNormalized) || normalized > maxNormalized) {
+                        maxNormalized = normalized;
+                    }
+                }
+
+                return maxNormalized;
+            }
+        }
+
+        private class Sample {
+            public long time;
+            public float temperature;
+
+            Sample(long time, float temperature) {
+                this.time = time;
+                this.temperature = temperature;
+            }
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java b/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java
index 4142e6f..beba106 100644
--- a/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java
+++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java
@@ -38,7 +38,6 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.ArrayUtils;
-import com.android.internal.util.Preconditions;
 import com.android.server.EventLogTags;
 import com.android.server.LocalServices;
 import com.android.server.power.PowerManagerService;
@@ -76,11 +75,19 @@
     @GuardedBy("mLock")
     private final ArrayList<LowPowerModeListener> mListeners = new ArrayList<>();
 
+    /**
+     * Do not access directly; always use {@link #setFullEnabledLocked}
+     * and {@link #getFullEnabledLocked}
+     */
     @GuardedBy("mLock")
-    private boolean mFullEnabled;
+    private boolean mFullEnabledRaw;
 
+    /**
+     * Do not access directly; always use {@link #setAdaptiveEnabledLocked} and
+     * {@link #getAdaptiveEnabledLocked}.
+     */
     @GuardedBy("mLock")
-    private boolean mAdaptiveEnabled;
+    private boolean mAdaptiveEnabledRaw;
 
     @GuardedBy("mLock")
     private boolean mIsPluggedIn;
@@ -208,6 +215,7 @@
         mPlugins = new Plugin[] {
                 new BatterySaverLocationPlugin(mContext)
         };
+        PowerManager.invalidatePowerSaveModeCaches();
     }
 
     /**
@@ -294,10 +302,10 @@
     @VisibleForTesting
     public void enableBatterySaver(boolean enable, int reason) {
         synchronized (mLock) {
-            if (mFullEnabled == enable) {
+            if (getFullEnabledLocked() == enable) {
                 return;
             }
-            mFullEnabled = enable;
+            setFullEnabledLocked(enable);
 
             if (updatePolicyLevelLocked()) {
                 mHandler.postStateChanged(/*sendBroadcast=*/ true, reason);
@@ -306,9 +314,9 @@
     }
 
     private boolean updatePolicyLevelLocked() {
-        if (mFullEnabled) {
+        if (getFullEnabledLocked()) {
             return mBatterySaverPolicy.setPolicyLevel(BatterySaverPolicy.POLICY_LEVEL_FULL);
-        } else if (mAdaptiveEnabled) {
+        } else if (getAdaptiveEnabledLocked()) {
             return mBatterySaverPolicy.setPolicyLevel(BatterySaverPolicy.POLICY_LEVEL_ADAPTIVE);
         } else {
             return mBatterySaverPolicy.setPolicyLevel(BatterySaverPolicy.POLICY_LEVEL_OFF);
@@ -321,8 +329,8 @@
      */
     public boolean isEnabled() {
         synchronized (mLock) {
-            return mFullEnabled
-                    || (mAdaptiveEnabled && mBatterySaverPolicy.shouldAdvertiseIsEnabled());
+            return getFullEnabledLocked() || (getAdaptiveEnabledLocked()
+                    && mBatterySaverPolicy.shouldAdvertiseIsEnabled());
         }
     }
 
@@ -332,19 +340,19 @@
      */
     private boolean isPolicyEnabled() {
         synchronized (mLock) {
-            return mFullEnabled || mAdaptiveEnabled;
+            return getFullEnabledLocked() || getAdaptiveEnabledLocked();
         }
     }
 
     boolean isFullEnabled() {
         synchronized (mLock) {
-            return mFullEnabled;
+            return getFullEnabledLocked();
         }
     }
 
     boolean isAdaptiveEnabled() {
         synchronized (mLock) {
-            return mAdaptiveEnabled;
+            return getAdaptiveEnabledLocked();
         }
     }
 
@@ -375,10 +383,10 @@
     }
 
     boolean setAdaptivePolicyEnabledLocked(boolean enabled, int reason) {
-        if (mAdaptiveEnabled == enabled) {
+        if (getAdaptiveEnabledLocked() == enabled) {
             return false;
         }
-        mAdaptiveEnabled = enabled;
+        setAdaptiveEnabledLocked(enabled);
         if (updatePolicyLevelLocked()) {
             mHandler.postStateChanged(/*sendBroadcast=*/ true, reason);
             return true;
@@ -427,19 +435,19 @@
         final ArrayMap<String, String> fileValues;
 
         synchronized (mLock) {
-            enabled = mFullEnabled || mAdaptiveEnabled;
+            enabled = getFullEnabledLocked() || getAdaptiveEnabledLocked();
 
             EventLogTags.writeBatterySaverMode(
                     mFullPreviouslyEnabled ? 1 : 0, // Previously off or on.
                     mAdaptivePreviouslyEnabled ? 1 : 0, // Previously off or on.
-                    mFullEnabled ? 1 : 0, // Now off or on.
-                    mAdaptiveEnabled ? 1 : 0, // Now off or on.
+                    getFullEnabledLocked() ? 1 : 0, // Now off or on.
+                    getAdaptiveEnabledLocked() ? 1 : 0, // Now off or on.
                     isInteractive ?  1 : 0, // Device interactive state.
                     enabled ? mBatterySaverPolicy.toEventLogString() : "",
                     reason);
 
-            mFullPreviouslyEnabled = mFullEnabled;
-            mAdaptivePreviouslyEnabled = mAdaptiveEnabled;
+            mFullPreviouslyEnabled = getFullEnabledLocked();
+            mAdaptivePreviouslyEnabled = getAdaptiveEnabledLocked();
 
             listeners = mListeners.toArray(new LowPowerModeListener[0]);
 
@@ -518,10 +526,40 @@
                 return;
             }
             mBatterySavingStats.transitionState(
-                    mFullEnabled ? BatterySaverState.ON :
-                            (mAdaptiveEnabled ? BatterySaverState.ADAPTIVE : BatterySaverState.OFF),
-                    isInteractive ? InteractiveState.INTERACTIVE : InteractiveState.NON_INTERACTIVE,
-                    dozeMode);
+                    getFullEnabledLocked() ? BatterySaverState.ON :
+                            (getAdaptiveEnabledLocked() ? BatterySaverState.ADAPTIVE :
+                            BatterySaverState.OFF),
+                            isInteractive ? InteractiveState.INTERACTIVE :
+                            InteractiveState.NON_INTERACTIVE,
+                            dozeMode);
         }
     }
+
+    @GuardedBy("mLock")
+    private void setFullEnabledLocked(boolean value) {
+        if (mFullEnabledRaw == value) {
+            return;
+        }
+        PowerManager.invalidatePowerSaveModeCaches();
+        mFullEnabledRaw = value;
+    }
+
+    /** Non-blocking getter exists as a reminder not to directly modify the cached field */
+    private boolean getFullEnabledLocked() {
+        return mFullEnabledRaw;
+    }
+
+    @GuardedBy("mLock")
+    private void setAdaptiveEnabledLocked(boolean value) {
+        if (mAdaptiveEnabledRaw == value) {
+            return;
+        }
+        PowerManager.invalidatePowerSaveModeCaches();
+        mAdaptiveEnabledRaw = value;
+    }
+
+    /** Non-blocking getter exists as a reminder not to directly modify the cached field */
+    private boolean getAdaptiveEnabledLocked() {
+        return mAdaptiveEnabledRaw;
+    }
 }
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 38bdc62..233417d 100644
--- a/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
+++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
@@ -219,8 +219,12 @@
     static final int POLICY_LEVEL_ADAPTIVE = 1;
     static final int POLICY_LEVEL_FULL = 2;
 
+    /**
+     * Do not access directly; always use {@link #setPolicyLevel}
+     * and {@link #getPolicyLevelLocked}
+     */
     @GuardedBy("mLock")
-    private int mPolicyLevel = POLICY_LEVEL_OFF;
+    private int mPolicyLevelRaw = POLICY_LEVEL_OFF;
 
     private final Context mContext;
     private final ContentResolver mContentResolver;
@@ -290,6 +294,11 @@
         return R.string.config_batterySaverDeviceSpecificConfig;
     }
 
+    @VisibleForTesting
+    void invalidatePowerSaveModeCaches() {
+        PowerManager.invalidatePowerSaveModeCaches();
+    }
+
     @Override
     public void onChange(boolean selfChange, Uri uri) {
         refreshSettings();
@@ -373,14 +382,14 @@
         boolean changed = false;
         Policy newFullPolicy = Policy.fromSettings(setting, deviceSpecificSetting,
                 DEFAULT_FULL_POLICY);
-        if (mPolicyLevel == POLICY_LEVEL_FULL && !mFullPolicy.equals(newFullPolicy)) {
+        if (getPolicyLevelLocked() == POLICY_LEVEL_FULL && !mFullPolicy.equals(newFullPolicy)) {
             changed = true;
         }
         mFullPolicy = newFullPolicy;
 
         mDefaultAdaptivePolicy = Policy.fromSettings(adaptiveSetting, adaptiveDeviceSpecificSetting,
                 DEFAULT_ADAPTIVE_POLICY);
-        if (mPolicyLevel == POLICY_LEVEL_ADAPTIVE
+        if (getPolicyLevelLocked() == POLICY_LEVEL_ADAPTIVE
                 && !mAdaptivePolicy.equals(mDefaultAdaptivePolicy)) {
             changed = true;
         }
@@ -882,14 +891,14 @@
      */
     boolean setPolicyLevel(@PolicyLevel int level) {
         synchronized (mLock) {
-            if (mPolicyLevel == level) {
+            if (getPolicyLevelLocked() == level) {
                 return false;
             }
             switch (level) {
                 case POLICY_LEVEL_FULL:
                 case POLICY_LEVEL_ADAPTIVE:
                 case POLICY_LEVEL_OFF:
-                    mPolicyLevel = level;
+                    setPolicyLevelLocked(level);
                     break;
                 default:
                     Slog.wtf(TAG, "setPolicyLevel invalid level given: " + level);
@@ -911,7 +920,7 @@
         }
 
         mAdaptivePolicy = p;
-        if (mPolicyLevel == POLICY_LEVEL_ADAPTIVE) {
+        if (getPolicyLevelLocked() == POLICY_LEVEL_ADAPTIVE) {
             updatePolicyDependenciesLocked();
             return true;
         }
@@ -924,7 +933,7 @@
     }
 
     private Policy getCurrentPolicyLocked() {
-        switch (mPolicyLevel) {
+        switch (getPolicyLevelLocked()) {
             case POLICY_LEVEL_FULL:
                 return mFullPolicy;
             case POLICY_LEVEL_ADAPTIVE:
@@ -985,7 +994,7 @@
             pw.println("    value: " + mAdaptiveDeviceSpecificSettings);
 
             pw.println("  mAccessibilityEnabled=" + mAccessibilityEnabled);
-            pw.println("  mPolicyLevel=" + mPolicyLevel);
+            pw.println("  mPolicyLevel=" + getPolicyLevelLocked());
 
             dumpPolicyLocked(pw, "  ", "full", mFullPolicy);
             dumpPolicyLocked(pw, "  ", "default adaptive", mDefaultAdaptivePolicy);
@@ -1067,4 +1076,20 @@
             updatePolicyDependenciesLocked();
         }
     }
+
+    /** Non-blocking getter exists as a reminder not to modify cached fields directly */
+    @GuardedBy("mLock")
+    private int getPolicyLevelLocked() {
+        return mPolicyLevelRaw;
+    }
+
+    @GuardedBy("mLock")
+    private void setPolicyLevelLocked(int level) {
+        if (mPolicyLevelRaw == level) {
+            return;
+        }
+        // Under lock, invalidate before set ensures caches won't return stale values.
+        invalidatePowerSaveModeCaches();
+        mPolicyLevelRaw = level;
+    }
 }
diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySaverStateMachine.java b/services/core/java/com/android/server/power/batterysaver/BatterySaverStateMachine.java
index 4b3746b..42aaec9 100644
--- a/services/core/java/com/android/server/power/batterysaver/BatterySaverStateMachine.java
+++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverStateMachine.java
@@ -176,8 +176,10 @@
     @GuardedBy("mLock")
     private int mSettingBatterySaverStickyAutoDisableThreshold;
 
-    /** Config flag to track default disable threshold for Dynamic Power Savings enabled battery
-     * saver. */
+    /**
+     * Config flag to track default disable threshold for Dynamic Power Savings enabled battery
+     * saver.
+     */
     @GuardedBy("mLock")
     private final int mDynamicPowerSavingsDefaultDisableThreshold;
 
@@ -192,8 +194,9 @@
     @GuardedBy("mLock")
     private int mSettingAutomaticBatterySaver;
 
-    /** When to disable battery saver again if it was enabled due to an external suggestion.
-     *  Corresponds to Settings.Global.DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD.
+    /**
+     * When to disable battery saver again if it was enabled due to an external suggestion.
+     * Corresponds to Settings.Global.DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD.
      */
     @GuardedBy("mLock")
     private int mDynamicPowerSavingsDisableThreshold;
@@ -203,7 +206,7 @@
      * Updates when Settings.Global.DYNAMIC_POWER_SAVINGS_ENABLED changes.
      */
     @GuardedBy("mLock")
-    private boolean mDynamicPowerSavingsBatterySaver;
+    private boolean mDynamicPowerSavingsEnableBatterySaver;
 
     /**
      * Last reason passed to {@link #enableBatterySaverLocked}.
@@ -265,7 +268,7 @@
     /** @return true if the dynamic mode should be used */
     private boolean isDynamicModeActiveLocked() {
         return mSettingAutomaticBatterySaver == PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC
-                && mDynamicPowerSavingsBatterySaver;
+                && mDynamicPowerSavingsEnableBatterySaver;
     }
 
     /**
@@ -428,7 +431,7 @@
         final boolean dynamicPowerSavingsThresholdChanged =
                 mDynamicPowerSavingsDisableThreshold != dynamicPowerSavingsDisableThreshold;
         final boolean dynamicPowerSavingsBatterySaverChanged =
-                mDynamicPowerSavingsBatterySaver != dynamicPowerSavingsBatterySaver;
+                mDynamicPowerSavingsEnableBatterySaver != dynamicPowerSavingsBatterySaver;
 
         if (!(enabledChanged || stickyChanged || thresholdChanged || automaticModeChanged
                 || stickyAutoDisableEnabledChanged || stickyAutoDisableThresholdChanged
@@ -443,7 +446,7 @@
         mSettingBatterySaverStickyAutoDisableThreshold = stickyAutoDisableThreshold;
         mSettingAutomaticBatterySaver = automaticBatterySaver;
         mDynamicPowerSavingsDisableThreshold = dynamicPowerSavingsDisableThreshold;
-        mDynamicPowerSavingsBatterySaver = dynamicPowerSavingsBatterySaver;
+        mDynamicPowerSavingsEnableBatterySaver = dynamicPowerSavingsBatterySaver;
 
         if (thresholdChanged) {
             // To avoid spamming the event log, we throttle logging here.
@@ -923,6 +926,8 @@
             pw.print("  mIsBatteryLevelLow=");
             pw.println(mIsBatteryLevelLow);
 
+            pw.print("  mSettingAutomaticBatterySaver=");
+            pw.println(mSettingAutomaticBatterySaver);
             pw.print("  mSettingBatterySaverEnabled=");
             pw.println(mSettingBatterySaverEnabled);
             pw.print("  mSettingBatterySaverEnabledSticky=");
@@ -936,6 +941,13 @@
             pw.print("  mBatterySaverStickyBehaviourDisabled=");
             pw.println(mBatterySaverStickyBehaviourDisabled);
 
+            pw.print("  mDynamicPowerSavingsDefaultDisableThreshold=");
+            pw.println(mDynamicPowerSavingsDefaultDisableThreshold);
+            pw.print("  mDynamicPowerSavingsDisableThreshold=");
+            pw.println(mDynamicPowerSavingsDisableThreshold);
+            pw.print("  mDynamicPowerSavingsEnableBatterySaver=");
+            pw.println(mDynamicPowerSavingsEnableBatterySaver);
+
             pw.print("  mLastAdaptiveBatterySaverChangedExternallyElapsed=");
             pw.println(mLastAdaptiveBatterySaverChangedExternallyElapsed);
         }
@@ -964,6 +976,8 @@
             proto.write(BatterySaverStateMachineProto.BATTERY_LEVEL, mBatteryLevel);
             proto.write(BatterySaverStateMachineProto.IS_BATTERY_LEVEL_LOW, mIsBatteryLevelLow);
 
+            proto.write(BatterySaverStateMachineProto.SETTING_AUTOMATIC_TRIGGER,
+                    mSettingAutomaticBatterySaver);
             proto.write(BatterySaverStateMachineProto.SETTING_BATTERY_SAVER_ENABLED,
                     mSettingBatterySaverEnabled);
             proto.write(BatterySaverStateMachineProto.SETTING_BATTERY_SAVER_ENABLED_STICKY,
@@ -979,6 +993,16 @@
                     mSettingBatterySaverStickyAutoDisableThreshold);
 
             proto.write(
+                    BatterySaverStateMachineProto.DEFAULT_DYNAMIC_DISABLE_THRESHOLD,
+                    mDynamicPowerSavingsDefaultDisableThreshold);
+            proto.write(
+                    BatterySaverStateMachineProto.DYNAMIC_DISABLE_THRESHOLD,
+                    mDynamicPowerSavingsDisableThreshold);
+            proto.write(
+                    BatterySaverStateMachineProto.DYNAMIC_BATTERY_SAVER_ENABLED,
+                    mDynamicPowerSavingsEnableBatterySaver);
+
+            proto.write(
                     BatterySaverStateMachineProto
                             .LAST_ADAPTIVE_BATTERY_SAVER_CHANGED_EXTERNALLY_ELAPSED,
                     mLastAdaptiveBatterySaverChangedExternallyElapsed);
diff --git a/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java b/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java
index 7164a30..e0701e8 100644
--- a/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java
+++ b/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java
@@ -359,20 +359,23 @@
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.RECOVERY, null);
 
         if (!mPreparedForReboot) {
+            Slog.i(TAG, "Reboot requested before prepare completed");
             return false;
         }
 
-        if (updateToken != null && updateToken.equals(mUnattendedRebootToken)) {
-            if (!mInjector.getLockSettingsService().armRebootEscrow()) {
-                return false;
-            }
-
-            PowerManager pm = mInjector.getPowerManager();
-            pm.reboot(reason);
-            return true;
+        if (updateToken != null && !updateToken.equals(mUnattendedRebootToken)) {
+            Slog.i(TAG, "Reboot requested after preparation, but with mismatching token");
+            return false;
         }
 
-        return false;
+        if (!mInjector.getLockSettingsService().armRebootEscrow()) {
+            Slog.w(TAG, "Failure to escrow key for reboot");
+            return false;
+        }
+
+        PowerManager pm = mInjector.getPowerManager();
+        pm.reboot(reason);
+        return true;
     }
 
     /**
diff --git a/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java b/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java
index e77839c..524ae54 100644
--- a/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java
+++ b/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java
@@ -224,6 +224,13 @@
     }
 
     /**
+     * Deletes all device-encrypted apex data snapshots for the given rollback id.
+     */
+    public void destroyApexDeSnapshots(int rollbackId) {
+        mApexManager.destroyDeSnapshots(rollbackId);
+    }
+
+    /**
      * Commits the pending backups and restores for a given {@code userId} and {@code rollback}. If
      * the rollback has a pending backup, it is updated with a mapping from {@code userId} to inode
      * of the CE user data snapshot.
diff --git a/services/core/java/com/android/server/rollback/Rollback.java b/services/core/java/com/android/server/rollback/Rollback.java
index 4d7af9c..7b96777 100644
--- a/services/core/java/com/android/server/rollback/Rollback.java
+++ b/services/core/java/com/android/server/rollback/Rollback.java
@@ -44,7 +44,6 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.IndentingPrintWriter;
-import com.android.server.pm.ApexManager;
 
 import java.io.File;
 import java.io.IOException;
@@ -662,7 +661,7 @@
                 }
             }
             if (containsApex) {
-                ApexManager.getInstance().destroyDeSnapshots(info.getRollbackId());
+                dataHelper.destroyApexDeSnapshots(info.getRollbackId());
             }
 
             RollbackStore.deleteRollback(this);
diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
index 8bd9533..f9981d0 100644
--- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
+++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
@@ -19,6 +19,7 @@
 import android.Manifest;
 import android.annotation.AnyThread;
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.annotation.UserIdInt;
 import android.annotation.WorkerThread;
 import android.app.AppOpsManager;
@@ -50,7 +51,6 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.DeviceConfig;
-import android.util.ArraySet;
 import android.util.IntArray;
 import android.util.Log;
 import android.util.LongArrayQueue;
@@ -121,10 +121,6 @@
     @GuardedBy("mLock")
     private final SparseBooleanArray mAllocatedRollbackIds = new SparseBooleanArray();
 
-    // Rollbacks we are in the process of enabling.
-    @GuardedBy("mLock")
-    private final Set<Rollback> mNewRollbacks = new ArraySet<>();
-
     // The list of all rollbacks, including available and committed rollbacks.
     @GuardedBy("mLock")
     private final List<Rollback> mRollbacks;
@@ -168,8 +164,16 @@
         // Load rollback data from device storage.
         synchronized (mLock) {
             mRollbacks = mRollbackStore.loadRollbacks();
-            for (Rollback rollback : mRollbacks) {
-                mAllocatedRollbackIds.put(rollback.info.getRollbackId(), true);
+            if (!context.getPackageManager().isDeviceUpgrading()) {
+                for (Rollback rollback : mRollbacks) {
+                    mAllocatedRollbackIds.put(rollback.info.getRollbackId(), true);
+                }
+            } else {
+                // Delete rollbacks when build fingerprint has changed.
+                for (Rollback rollback : mRollbacks) {
+                    rollback.delete(mAppDataRollbackHelper);
+                }
+                mRollbacks.clear();
             }
         }
 
@@ -240,17 +244,14 @@
                         Slog.v(TAG, "broadcast=ACTION_CANCEL_ENABLE_ROLLBACK token=" + token);
                     }
                     synchronized (mLock) {
-                        Rollback found = null;
-                        for (Rollback newRollback : mNewRollbacks) {
-                            if (newRollback.hasToken(token)) {
-                                found = newRollback;
+                        for (int i = 0; i < mRollbacks.size(); ++i) {
+                            Rollback rollback = mRollbacks.get(i);
+                            if (rollback.hasToken(token) && rollback.isEnabling()) {
+                                mRollbacks.remove(i);
+                                rollback.delete(mAppDataRollbackHelper);
                                 break;
                             }
                         }
-                        if (found != null) {
-                            mNewRollbacks.remove(found);
-                            found.delete(mAppDataRollbackHelper);
-                        }
                     }
                 }
             }
@@ -442,15 +443,6 @@
                     rollback.delete(mAppDataRollbackHelper);
                 }
             }
-            Iterator<Rollback> iter2 = mNewRollbacks.iterator();
-            while (iter2.hasNext()) {
-                Rollback newRollback = iter2.next();
-                if (newRollback.includesPackage(packageName)) {
-                    iter2.remove();
-                    newRollback.delete(mAppDataRollbackHelper);
-                }
-
-            }
         }
     }
 
@@ -804,13 +796,12 @@
 
         Rollback newRollback;
         synchronized (mLock) {
-            // See if we already have a NewRollback that contains this package
-            // session. If not, create a NewRollback for the parent session
+            // See if we already have a Rollback that contains this package
+            // session. If not, create a new Rollback for the parent session
             // that we will use for all the packages in the session.
-            newRollback = getNewRollbackForPackageSessionLocked(packageSession.getSessionId());
+            newRollback = getRollbackForSessionLocked(packageSession.getSessionId());
             if (newRollback == null) {
                 newRollback = createNewRollbackLocked(parentSession);
-                mNewRollbacks.add(newRollback);
             }
         }
         newRollback.addToken(token);
@@ -818,34 +809,6 @@
         return enableRollbackForPackageSession(newRollback, packageSession);
     }
 
-    @WorkerThread
-    private void removeRollbackForPackageSessionId(int sessionId) {
-        if (LOCAL_LOGV) {
-            Slog.v(TAG, "removeRollbackForPackageSessionId=" + sessionId);
-        }
-
-        synchronized (mLock) {
-            Rollback newRollback = getNewRollbackForPackageSessionLocked(sessionId);
-            if (newRollback != null) {
-                Slog.w(TAG, "Delete new rollback id=" + newRollback.info.getRollbackId()
-                        + " for session id=" + sessionId);
-                mNewRollbacks.remove(newRollback);
-                newRollback.delete(mAppDataRollbackHelper);
-            }
-            Iterator<Rollback> iter = mRollbacks.iterator();
-            while (iter.hasNext()) {
-                Rollback rollback = iter.next();
-                if (rollback.getStagedSessionId() == sessionId) {
-                    Slog.w(TAG, "Delete rollback id=" + rollback.info.getRollbackId()
-                            + " for session id=" + sessionId);
-                    iter.remove();
-                    rollback.delete(mAppDataRollbackHelper);
-                    break;
-                }
-            }
-        }
-    }
-
     /**
      * Do code and userdata backups to enable rollback of the given session.
      * In case of multiPackage sessions, <code>session</code> should be one of
@@ -905,14 +868,6 @@
             return false;
         }
 
-        ApplicationInfo appInfo = pkgInfo.applicationInfo;
-        boolean success = rollback.enableForPackage(packageName, newPackage.versionCode,
-                pkgInfo.getLongVersionCode(), isApex, appInfo.sourceDir,
-                appInfo.splitSourceDirs, session.rollbackDataPolicy);
-        if (!success) {
-            return success;
-        }
-
         if (isApex) {
             // Check if this apex contains apks inside it. If true, then they should be added as
             // a RollbackPackageInfo into this rollback
@@ -930,12 +885,24 @@
                     Slog.e(TAG, apkInApex + " is not installed");
                     return false;
                 }
-                success = rollback.enableForPackageInApex(
-                        apkInApex, apkPkgInfo.getLongVersionCode(), session.rollbackDataPolicy);
-                if (!success) return success;
+                if (!rollback.enableForPackageInApex(
+                        apkInApex, apkPkgInfo.getLongVersionCode(), session.rollbackDataPolicy)) {
+                    return false;
+                }
             }
         }
-        return true;
+
+        /**
+         * The order is important here! Always enable the embedded apk-in-apex (if any) before
+         * enabling the embedding apex. Otherwise the rollback object might be in an inconsistent
+         * state where an embedding apex is successfully enabled while one of its embedded
+         * apk-in-apex failed. Note {@link Rollback#allPackagesEnabled()} won't behave correctly if
+         * a rollback object is inconsistent because it doesn't count apk-in-apex.
+         */
+        ApplicationInfo appInfo = pkgInfo.applicationInfo;
+        return rollback.enableForPackage(packageName, newPackage.versionCode,
+                pkgInfo.getLongVersionCode(), isApex, appInfo.sourceDir,
+                appInfo.splitSourceDirs, session.rollbackDataPolicy);
     }
 
     @Override
@@ -966,15 +933,10 @@
                     + " users=" + Arrays.toString(userIds));
         }
         synchronized (mLock) {
-            // staged installs
             for (int i = 0; i < mRollbacks.size(); i++) {
                 Rollback rollback = mRollbacks.get(i);
                 rollback.snapshotUserData(packageName, userIds, mAppDataRollbackHelper);
             }
-            // non-staged installs
-            for (Rollback rollback : mNewRollbacks) {
-                rollback.snapshotUserData(packageName, userIds, mAppDataRollbackHelper);
-            }
         }
     }
 
@@ -1023,8 +985,6 @@
             if (!session.isMultiPackage()) {
                 if (!enableRollbackForPackageSession(newRollback, session)) {
                     Slog.e(TAG, "Unable to enable rollback for session: " + sessionId);
-                    result.offer(-1);
-                    return;
                 }
             } else {
                 for (int childSessionId : session.getChildSessionIds()) {
@@ -1032,22 +992,19 @@
                             installer.getSessionInfo(childSessionId);
                     if (childSession == null) {
                         Slog.e(TAG, "No matching child install session for: " + childSessionId);
-                        result.offer(-1);
-                        return;
+                        break;
                     }
                     if (!enableRollbackForPackageSession(newRollback, childSession)) {
                         Slog.e(TAG, "Unable to enable rollback for session: " + sessionId);
-                        result.offer(-1);
-                        return;
+                        break;
                     }
                 }
             }
 
-            Rollback rollback = completeEnableRollback(newRollback);
-            if (rollback == null) {
+            if (!completeEnableRollback(newRollback)) {
                 result.offer(-1);
             } else {
-                result.offer(rollback.info.getRollbackId());
+                result.offer(newRollback.info.getRollbackId());
             }
         });
 
@@ -1196,39 +1153,38 @@
             }
 
             if (success) {
-                Rollback newRollback;
+                Rollback rollback;
                 synchronized (mLock) {
-                    newRollback = getNewRollbackForPackageSessionLocked(sessionId);
-                    if (newRollback != null && newRollback.notifySessionWithSuccess()) {
-                        mNewRollbacks.remove(newRollback);
-                    } else {
-                        // Not all child sessions finished with success.
-                        // Don't enable the rollback yet.
-                        newRollback = null;
-                    }
+                    rollback = getRollbackForSessionLocked(sessionId);
                 }
-
-                if (newRollback != null) {
-                    Rollback rollback = completeEnableRollback(newRollback);
-                    if (rollback != null && !rollback.isStaged()) {
-                        makeRollbackAvailable(rollback);
-                    }
+                if (rollback != null && !rollback.isStaged() && rollback.isEnabling()
+                        && rollback.notifySessionWithSuccess()
+                        && completeEnableRollback(rollback)) {
+                    makeRollbackAvailable(rollback);
                 }
             } else {
-                removeRollbackForPackageSessionId(sessionId);
+                synchronized (mLock) {
+                    Rollback rollback = getRollbackForSessionLocked(sessionId);
+                    if (rollback != null && rollback.isEnabling()) {
+                        Slog.w(TAG, "Delete rollback id=" + rollback.info.getRollbackId()
+                                + " for failed session id=" + sessionId);
+                        mRollbacks.remove(rollback);
+                        rollback.delete(mAppDataRollbackHelper);
+                    }
+                }
             }
         }
     }
 
     /**
-     * Add a rollback to the list of rollbacks. This should be called after rollback has been
-     * enabled for all packages in the rollback. It does not make the rollback available yet.
+     * Persist a rollback as enable-completed. It does not make the rollback available yet.
+     * This rollback will be deleted and removed from {@link #mRollbacks} should any error happens.
      *
-     * @return the Rollback instance for a successfully enable-completed rollback,
-     * or null on error.
+     * @return {code true} if {code rollback} is successfully enable-completed,
+     * or {code false} otherwise.
      */
     @WorkerThread
-    private Rollback completeEnableRollback(Rollback rollback) {
+    private boolean completeEnableRollback(Rollback rollback) {
         if (LOCAL_LOGV) {
             Slog.v(TAG, "completeEnableRollback id=" + rollback.info.getRollbackId());
         }
@@ -1239,26 +1195,24 @@
         // rollback for the embedded apk-in-apex, if any.
         if (!rollback.allPackagesEnabled()) {
             Slog.e(TAG, "Failed to enable rollback for all packages in session.");
+            mRollbacks.remove(rollback);
             rollback.delete(mAppDataRollbackHelper);
-            return null;
+            return false;
         }
 
+        // Note: There is a small window of time between when
+        // the session has been committed by the package
+        // manager and when we make the rollback available
+        // here. Presumably the window is small enough that
+        // nobody will want to roll back the newly installed
+        // package before we make the rollback available.
+        // TODO: We'll lose the rollback if the
+        // device reboots between when the session is
+        // committed and this point. Revisit this after
+        // adding support for rollback of staged installs.
         rollback.saveRollback();
-        synchronized (mLock) {
-            // Note: There is a small window of time between when
-            // the session has been committed by the package
-            // manager and when we make the rollback available
-            // here. Presumably the window is small enough that
-            // nobody will want to roll back the newly installed
-            // package before we make the rollback available.
-            // TODO: We'll lose the rollback if the
-            // device reboots between when the session is
-            // committed and this point. Revisit this after
-            // adding support for rollback of staged installs.
-            mRollbacks.add(rollback);
-        }
 
-        return rollback;
+        return true;
     }
 
     @WorkerThread
@@ -1338,6 +1292,10 @@
         }
     }
 
+    /**
+     * Creates and returns a Rollback according to the given SessionInfo
+     * and adds it to {@link #mRollbacks}.
+     */
     @WorkerThread
     @GuardedBy("mLock")
     private Rollback createNewRollbackLocked(PackageInstaller.SessionInfo parentSession) {
@@ -1372,22 +1330,24 @@
                     installerPackageName, packageSessionIds);
         }
 
+        mRollbacks.add(rollback);
         return rollback;
     }
 
     /**
-     * Returns the NewRollback associated with the given package session.
-     * Returns null if no NewRollback is found for the given package
-     * session.
+     * Returns the Rollback associated with the given session if parent or child session id matches.
+     * Returns null if not found.
      */
     @WorkerThread
     @GuardedBy("mLock")
-    Rollback getNewRollbackForPackageSessionLocked(int packageSessionId) {
-        // We expect mNewRollbacks to be a very small list; linear search
-        // should be plenty fast.
-        for (Rollback newRollback: mNewRollbacks) {
-            if (newRollback.containsSessionId(packageSessionId)) {
-                return newRollback;
+    @Nullable
+    private Rollback getRollbackForSessionLocked(int sessionId) {
+        // We expect mRollbacks to be a very small list; linear search should be plenty fast.
+        for (int i = 0; i < mRollbacks.size(); ++i) {
+            Rollback rollback = mRollbacks.get(i);
+            if (rollback.getStagedSessionId() == sessionId
+                    || rollback.containsSessionId(sessionId)) {
+                return rollback;
             }
         }
         return null;
diff --git a/services/core/java/com/android/server/rollback/WatchdogRollbackLogger.java b/services/core/java/com/android/server/rollback/WatchdogRollbackLogger.java
index 46ec2f8..1be6f22 100644
--- a/services/core/java/com/android/server/rollback/WatchdogRollbackLogger.java
+++ b/services/core/java/com/android/server/rollback/WatchdogRollbackLogger.java
@@ -20,7 +20,12 @@
 import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_NOT_RESPONDING;
 import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_EXPLICIT_HEALTH_CHECK;
 import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH;
+import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH_DURING_BOOT;
 import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_UNKNOWN;
+import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED;
+import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE;
+import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE;
+import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS;
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -33,7 +38,6 @@
 import android.content.rollback.RollbackInfo;
 import android.util.ArraySet;
 import android.util.Slog;
-import android.util.StatsLog;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.FrameworkStatsLog;
@@ -58,8 +62,8 @@
     private static String getLoggingParentName(Context context, @NonNull String packageName) {
         PackageManager packageManager = context.getPackageManager();
         try {
-            ApplicationInfo ai = packageManager.getApplicationInfo(packageName,
-                    PackageManager.GET_META_DATA);
+            int flags = PackageManager.MATCH_APEX | PackageManager.GET_META_DATA;
+            ApplicationInfo ai = packageManager.getPackageInfo(packageName, flags).applicationInfo;
             if (ai.metaData == null) {
                 return null;
             }
@@ -95,6 +99,22 @@
         return loggingParent;
     }
 
+
+    /**
+     * Gets the set of parent packages for a given set of failed package names. In the case that
+     * multiple sessions have failed, we want to log failure for each of the parent packages.
+     * Even if multiple failed packages have the same parent, we only log the parent package once.
+     */
+    private static Set<VersionedPackage> getLogPackages(Context context,
+            @NonNull List<String> failedPackageNames) {
+        Set<VersionedPackage> parentPackages = new ArraySet<>();
+        for (String failedPackageName: failedPackageNames) {
+            parentPackages.add(getLogPackage(context, new VersionedPackage(failedPackageName, 0)));
+        }
+        return parentPackages;
+    }
+
+
     static void logRollbackStatusOnBoot(Context context, int rollbackId,
             List<RollbackInfo> recentlyCommittedRollbacks) {
         PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
@@ -142,19 +162,36 @@
         for (VersionedPackage oldLoggingPackage : oldLoggingPackages) {
             if (sessionInfo.isStagedSessionApplied()) {
                 logEvent(oldLoggingPackage,
-                        FrameworkStatsLog
-                                .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS,
+                        WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS,
                         WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_UNKNOWN, "");
             } else if (sessionInfo.isStagedSessionFailed()) {
                 logEvent(oldLoggingPackage,
-                        FrameworkStatsLog
-                                .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE,
+                        WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE,
                         WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_UNKNOWN, "");
             }
         }
     }
 
     /**
+     * Logs that one or more apexd reverts have occurred, along with the crashing native process
+     * that caused apexd to revert during boot.
+     *
+     * @param context the context to use when determining the log packages
+     * @param failedPackageNames a list of names of packages which were reverted
+     * @param failingNativeProcess the crashing native process which caused a revert
+     */
+    public static void logApexdRevert(Context context, @NonNull List<String> failedPackageNames,
+            @NonNull String failingNativeProcess) {
+        Set<VersionedPackage> logPackages = getLogPackages(context, failedPackageNames);
+        for (VersionedPackage logPackage: logPackages) {
+            logEvent(logPackage,
+                    WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS,
+                    WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH_DURING_BOOT,
+                    failingNativeProcess);
+        }
+    }
+
+    /**
      * Log a Watchdog rollback event to statsd.
      *
      * @param logPackage the package to associate the rollback with.
@@ -169,12 +206,25 @@
                 + " rollbackReason: " + rollbackReasonToString(rollbackReason)
                 + " failedPackageName: " + failingPackageName);
         if (logPackage != null) {
-            StatsLog.logWatchdogRollbackOccurred(type, logPackage.getPackageName(),
-                    logPackage.getVersionCode(), rollbackReason, failingPackageName);
+            FrameworkStatsLog.write(
+                    FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED,
+                    type,
+                    logPackage.getPackageName(),
+                    logPackage.getVersionCode(),
+                    rollbackReason,
+                    failingPackageName,
+                    new byte[]{});
         } else {
             // In the case that the log package is null, still log an empty string as an
             // indication that retrieving the logging parent failed.
-            StatsLog.logWatchdogRollbackOccurred(type, "", 0, rollbackReason, failingPackageName);
+            FrameworkStatsLog.write(
+                    FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED,
+                    type,
+                    "",
+                    0,
+                    rollbackReason,
+                    failingPackageName,
+                    new byte[]{});
         }
     }
 
@@ -196,14 +246,13 @@
 
     private static String rollbackTypeToString(int type) {
         switch (type) {
-            case FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE:
+            case WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE:
                 return "ROLLBACK_INITIATE";
-            case FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS:
+            case WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS:
                 return "ROLLBACK_SUCCESS";
-            case FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE:
+            case WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE:
                 return "ROLLBACK_FAILURE";
-            case FrameworkStatsLog
-                        .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED:
+            case WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED:
                 return "ROLLBACK_BOOT_TRIGGERED";
             default:
                 return "UNKNOWN";
@@ -212,16 +261,16 @@
 
     private static String rollbackReasonToString(int reason) {
         switch (reason) {
-            case FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH:
+            case WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH:
                 return "REASON_NATIVE_CRASH";
-            case FrameworkStatsLog
-                    .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_EXPLICIT_HEALTH_CHECK:
+            case WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_EXPLICIT_HEALTH_CHECK:
                 return "REASON_EXPLICIT_HEALTH_CHECK";
-            case FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_CRASH:
+            case WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_CRASH:
                 return "REASON_APP_CRASH";
-            case FrameworkStatsLog
-                        .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_NOT_RESPONDING:
+            case WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_NOT_RESPONDING:
                 return "REASON_APP_NOT_RESPONDING";
+            case WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH_DURING_BOOT:
+                return "REASON_NATIVE_CRASH_DURING_BOOT";
             default:
                 return "UNKNOWN";
         }
diff --git a/services/core/java/com/android/server/security/FileIntegrityService.java b/services/core/java/com/android/server/security/FileIntegrityService.java
index e90c02a..8cf2d03 100644
--- a/services/core/java/com/android/server/security/FileIntegrityService.java
+++ b/services/core/java/com/android/server/security/FileIntegrityService.java
@@ -20,6 +20,7 @@
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.os.Build;
 import android.os.IBinder;
 import android.os.Process;
 import android.os.SystemProperties;
@@ -55,7 +56,8 @@
     private final IBinder mService = new IFileIntegrityService.Stub() {
         @Override
         public boolean isApkVeritySupported() {
-            return SystemProperties.getInt("ro.apk_verity.mode", 0) == 2;
+            return Build.VERSION.FIRST_SDK_INT >= Build.VERSION_CODES.R
+                    || SystemProperties.getInt("ro.apk_verity.mode", 0) == 2;
         }
 
         @Override
diff --git a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Enforcer.java b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Enforcer.java
new file mode 100644
index 0000000..870d909
--- /dev/null
+++ b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Enforcer.java
@@ -0,0 +1,169 @@
+/*
+ * 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.soundtrigger_middleware;
+
+import android.hardware.soundtrigger.V2_1.ISoundTriggerHw;
+import android.hardware.soundtrigger.V2_1.ISoundTriggerHwCallback;
+import android.hardware.soundtrigger.V2_3.ModelParameterRange;
+import android.hardware.soundtrigger.V2_3.Properties;
+import android.hardware.soundtrigger.V2_3.RecognitionConfig;
+import android.os.IHwBinder;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A decorator around a HAL, which adds some checks that the HAL is behaving as expected.
+ * This is not necessarily a strict enforcement for the HAL contract, but a place to add checks for
+ * common HAL malfunctions, to help track them and assist in debugging.
+ *
+ * The class is not thread-safe.
+ */
+public class SoundTriggerHw2Enforcer implements ISoundTriggerHw2 {
+    static final String TAG = "SoundTriggerHw2Enforcer";
+
+    final ISoundTriggerHw2 mUnderlying;
+    Map<Integer, Boolean> mModelStates = new HashMap<>();
+
+    public SoundTriggerHw2Enforcer(
+            ISoundTriggerHw2 underlying) {
+        mUnderlying = underlying;
+    }
+
+    @Override
+    public Properties getProperties() {
+        return mUnderlying.getProperties();
+    }
+
+    @Override
+    public int loadSoundModel(ISoundTriggerHw.SoundModel soundModel, Callback callback,
+            int cookie) {
+        int handle = mUnderlying.loadSoundModel(soundModel, new CallbackEnforcer(callback), cookie);
+        mModelStates.put(handle, false);
+        return handle;
+    }
+
+    @Override
+    public int loadPhraseSoundModel(ISoundTriggerHw.PhraseSoundModel soundModel, Callback callback,
+            int cookie) {
+        int handle = mUnderlying.loadPhraseSoundModel(soundModel, new CallbackEnforcer(callback),
+                cookie);
+        mModelStates.put(handle, false);
+        return handle;
+    }
+
+    @Override
+    public void unloadSoundModel(int modelHandle) {
+        mUnderlying.unloadSoundModel(modelHandle);
+        mModelStates.remove(modelHandle);
+    }
+
+    @Override
+    public void stopRecognition(int modelHandle) {
+        mUnderlying.stopRecognition(modelHandle);
+        mModelStates.replace(modelHandle, false);
+    }
+
+    @Override
+    public void stopAllRecognitions() {
+        mUnderlying.stopAllRecognitions();
+        for (Map.Entry<Integer, Boolean> entry : mModelStates.entrySet()) {
+            entry.setValue(false);
+        }
+    }
+
+    @Override
+    public void startRecognition(int modelHandle, RecognitionConfig config, Callback callback,
+            int cookie) {
+        mUnderlying.startRecognition(modelHandle, config, new CallbackEnforcer(callback), cookie);
+        mModelStates.replace(modelHandle, true);
+    }
+
+    @Override
+    public void getModelState(int modelHandle) {
+        mUnderlying.getModelState(modelHandle);
+    }
+
+    @Override
+    public int getModelParameter(int modelHandle, int param) {
+        return mUnderlying.getModelParameter(modelHandle, param);
+    }
+
+    @Override
+    public void setModelParameter(int modelHandle, int param, int value) {
+        mUnderlying.setModelParameter(modelHandle, param, value);
+    }
+
+    @Override
+    public ModelParameterRange queryParameter(int modelHandle, int param) {
+        return mUnderlying.queryParameter(modelHandle, param);
+    }
+
+    @Override
+    public boolean linkToDeath(IHwBinder.DeathRecipient recipient, long cookie) {
+        return mUnderlying.linkToDeath(recipient, cookie);
+    }
+
+    @Override
+    public boolean unlinkToDeath(IHwBinder.DeathRecipient recipient) {
+        return mUnderlying.unlinkToDeath(recipient);
+    }
+
+    @Override
+    public String interfaceDescriptor() throws RemoteException {
+        return mUnderlying.interfaceDescriptor();
+    }
+
+    private class CallbackEnforcer implements Callback {
+        private final Callback mUnderlying;
+
+        private CallbackEnforcer(
+                Callback underlying) {
+            mUnderlying = underlying;
+        }
+
+        @Override
+        public void recognitionCallback(ISoundTriggerHwCallback.RecognitionEvent event,
+                int cookie) {
+            int model = event.header.model;
+            if (!mModelStates.getOrDefault(model, false)) {
+                Log.wtfStack(TAG, "Unexpected recognition event for model: " + model);
+            }
+            if (event.header.status
+                    != android.media.soundtrigger_middleware.RecognitionStatus.FORCED) {
+                mModelStates.replace(model, false);
+            }
+            mUnderlying.recognitionCallback(event, cookie);
+        }
+
+        @Override
+        public void phraseRecognitionCallback(ISoundTriggerHwCallback.PhraseRecognitionEvent event,
+                int cookie) {
+            int model = event.common.header.model;
+            if (!mModelStates.getOrDefault(model, false)) {
+                Log.wtfStack(TAG, "Unexpected recognition event for model: " + model);
+            }
+            if (event.common.header.status
+                    != android.media.soundtrigger_middleware.RecognitionStatus.FORCED) {
+                mModelStates.replace(model, false);
+            }
+            mUnderlying.phraseRecognitionCallback(event, cookie);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java
index 372c1f5..aa1558e 100644
--- a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java
+++ b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java
@@ -169,7 +169,7 @@
     }
 
     @Override
-    public synchronized  void serviceDied(long cookie) {
+    public synchronized void serviceDied(long cookie) {
         Log.w(TAG, String.format("Underlying HAL driver died."));
         for (Session session : mActiveSessions) {
             session.moduleDied();
@@ -191,7 +191,7 @@
      * Attached to the HAL service via factory.
      */
     private void attachToHal() {
-        mHalService = new SoundTriggerHw2Compat(mHalFactory.create());
+        mHalService = new SoundTriggerHw2Enforcer(new SoundTriggerHw2Compat(mHalFactory.create()));
         mHalService.linkToDeath(this, 0);
     }
 
@@ -248,44 +248,77 @@
         @Override
         public int loadModel(@NonNull SoundModel model) {
             Log.d(TAG, String.format("loadModel(model=%s)", model));
-            synchronized (SoundTriggerModule.this) {
-                checkValid();
-                if (mNumLoadedModels == mProperties.maxSoundModels) {
-                    throw new RecoverableException(Status.RESOURCE_CONTENTION,
-                            "Maximum number of models loaded.");
+
+            // We must do this outside the lock, to avoid possible deadlocks with the remote process
+            // that provides the audio sessions, which may also be calling into us.
+            SoundTriggerMiddlewareImpl.AudioSessionProvider.AudioSession audioSession =
+                    mAudioSessionProvider.acquireSession();
+
+            try {
+                synchronized (SoundTriggerModule.this) {
+                    checkValid();
+                    if (mNumLoadedModels == mProperties.maxSoundModels) {
+                        throw new RecoverableException(Status.RESOURCE_CONTENTION,
+                                "Maximum number of models loaded.");
+                    }
+                    Model loadedModel = new Model();
+                    int result = loadedModel.load(model, audioSession);
+                    ++mNumLoadedModels;
+                    return result;
                 }
-                Model loadedModel = new Model();
-                int result = loadedModel.load(model);
-                ++mNumLoadedModels;
-                return result;
+            } catch (Exception e) {
+                // We must do this outside the lock, to avoid possible deadlocks with the remote
+                // process that provides the audio sessions, which may also be calling into us.
+                mAudioSessionProvider.releaseSession(audioSession.mSessionHandle);
+                throw e;
             }
         }
 
         @Override
         public int loadPhraseModel(@NonNull PhraseSoundModel model) {
             Log.d(TAG, String.format("loadPhraseModel(model=%s)", model));
-            synchronized (SoundTriggerModule.this) {
-                checkValid();
-                if (mNumLoadedModels == mProperties.maxSoundModels) {
-                    throw new RecoverableException(Status.RESOURCE_CONTENTION,
-                            "Maximum number of models loaded.");
+
+            // We must do this outside the lock, to avoid possible deadlocks with the remote process
+            // that provides the audio sessions, which may also be calling into us.
+            SoundTriggerMiddlewareImpl.AudioSessionProvider.AudioSession audioSession =
+                    mAudioSessionProvider.acquireSession();
+
+            try {
+                synchronized (SoundTriggerModule.this) {
+                    checkValid();
+                    if (mNumLoadedModels == mProperties.maxSoundModels) {
+                        throw new RecoverableException(Status.RESOURCE_CONTENTION,
+                                "Maximum number of models loaded.");
+                    }
+                    Model loadedModel = new Model();
+                    int result = loadedModel.load(model, audioSession);
+                    ++mNumLoadedModels;
+                    Log.d(TAG, String.format("loadPhraseModel()->%d", result));
+                    return result;
                 }
-                Model loadedModel = new Model();
-                int result = loadedModel.load(model);
-                ++mNumLoadedModels;
-                Log.d(TAG, String.format("loadPhraseModel()->%d", result));
-                return result;
+            } catch (Exception e) {
+                // We must do this outside the lock, to avoid possible deadlocks with the remote
+                // process that provides the audio sessions, which may also be calling into us.
+                mAudioSessionProvider.releaseSession(audioSession.mSessionHandle);
+                throw e;
             }
         }
 
         @Override
         public void unloadModel(int modelHandle) {
             Log.d(TAG, String.format("unloadModel(handle=%d)", modelHandle));
+
+            int sessionId;
+
             synchronized (SoundTriggerModule.this) {
                 checkValid();
-                mLoadedModels.get(modelHandle).unload();
+                sessionId = mLoadedModels.get(modelHandle).unload();
                 --mNumLoadedModels;
             }
+
+            // We must do this outside the lock, to avoid possible deadlocks with the remote process
+            // that provides the audio sessions, which may also be calling into us.
+            mAudioSessionProvider.releaseSession(sessionId);
         }
 
         @Override
@@ -413,45 +446,40 @@
                 SoundTriggerModule.this.notifyAll();
             }
 
-            private int load(@NonNull SoundModel model) {
+            private int load(@NonNull SoundModel model,
+                    SoundTriggerMiddlewareImpl.AudioSessionProvider.AudioSession audioSession) {
                 mModelType = model.type;
+                mSession = audioSession;
                 ISoundTriggerHw.SoundModel hidlModel = ConversionUtil.aidl2hidlSoundModel(model);
 
-                mSession = mAudioSessionProvider.acquireSession();
-                try {
-                    mHandle = mHalService.loadSoundModel(hidlModel, this, 0);
-                } catch (Exception e) {
-                    mAudioSessionProvider.releaseSession(mSession.mSessionHandle);
-                    throw e;
-                }
-
+                mHandle = mHalService.loadSoundModel(hidlModel, this, 0);
                 setState(ModelState.LOADED);
                 mLoadedModels.put(mHandle, this);
                 return mHandle;
             }
 
-            private int load(@NonNull PhraseSoundModel model) {
+            private int load(@NonNull PhraseSoundModel model,
+                    SoundTriggerMiddlewareImpl.AudioSessionProvider.AudioSession audioSession) {
                 mModelType = model.common.type;
+                mSession = audioSession;
                 ISoundTriggerHw.PhraseSoundModel hidlModel =
                         ConversionUtil.aidl2hidlPhraseSoundModel(model);
 
-                mSession = mAudioSessionProvider.acquireSession();
-                try {
-                    mHandle = mHalService.loadPhraseSoundModel(hidlModel, this, 0);
-                } catch (Exception e) {
-                    mAudioSessionProvider.releaseSession(mSession.mSessionHandle);
-                    throw e;
-                }
+                mHandle = mHalService.loadPhraseSoundModel(hidlModel, this, 0);
 
                 setState(ModelState.LOADED);
                 mLoadedModels.put(mHandle, this);
                 return mHandle;
             }
 
-            private void unload() {
-                mAudioSessionProvider.releaseSession(mSession.mSessionHandle);
+            /**
+             * Unloads the model.
+             * @return The audio session handle.
+             */
+            private int unload() {
                 mHalService.unloadSoundModel(mHandle);
                 mLoadedModels.remove(mHandle);
+                return mSession.mSessionHandle;
             }
 
             private void startRecognition(@NonNull RecognitionConfig config) {
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 5c79f6e..47a26f5 100644
--- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
+++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
@@ -16,7 +16,8 @@
 
 package com.android.server.stats.pull;
 
-import static android.app.AppOpsManager.OP_FLAGS_ALL_TRUSTED;
+import static android.app.AppOpsManager.OP_FLAG_SELF;
+import static android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXIED;
 import static android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED;
 import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS;
 import static android.os.Debug.getIonHeapsSizeKb;
@@ -184,6 +185,7 @@
 
     private static final int MAX_BATTERY_STATS_HELPER_FREQUENCY_MS = 1000;
     private static final int CPU_TIME_PER_THREAD_FREQ_MAX_NUM_FREQUENCIES = 8;
+    private static final int OP_FLAGS_PULLED = OP_FLAG_SELF | OP_FLAG_TRUSTED_PROXIED;
 
     private final Object mNetworkStatsLock = new Object();
     @GuardedBy("mNetworkStatsLock")
@@ -2838,8 +2840,8 @@
             AppOpsManager appOps = mContext.getSystemService(AppOpsManager.class);
 
             CompletableFuture<HistoricalOps> ops = new CompletableFuture<>();
-            HistoricalOpsRequest histOpsRequest =
-                    new HistoricalOpsRequest.Builder(0, Long.MAX_VALUE).build();
+            HistoricalOpsRequest histOpsRequest = new HistoricalOpsRequest.Builder(0,
+                    Long.MAX_VALUE).setFlags(OP_FLAGS_PULLED).build();
             appOps.getHistoricalOps(histOpsRequest, mContext.getMainExecutor(), ops::complete);
 
             HistoricalOps histOps = ops.get(EXTERNAL_STATS_SYNC_TIMEOUT_MILLIS,
@@ -2851,19 +2853,19 @@
                 for (int pkgIdx = 0; pkgIdx < uidOps.getPackageCount(); pkgIdx++) {
                     final HistoricalPackageOps packageOps = uidOps.getPackageOpsAt(pkgIdx);
                     for (int opIdx = 0; opIdx < packageOps.getOpCount(); opIdx++) {
-                        final AppOpsManager.HistoricalOp op  = packageOps.getOpAt(opIdx);
+                        final AppOpsManager.HistoricalOp op = packageOps.getOpAt(opIdx);
 
                         StatsEvent.Builder e = StatsEvent.newBuilder();
                         e.setAtomId(atomTag);
                         e.writeInt(uid);
                         e.writeString(packageOps.getPackageName());
                         e.writeInt(op.getOpCode());
-                        e.writeLong(op.getForegroundAccessCount(OP_FLAGS_ALL_TRUSTED));
-                        e.writeLong(op.getBackgroundAccessCount(OP_FLAGS_ALL_TRUSTED));
-                        e.writeLong(op.getForegroundRejectCount(OP_FLAGS_ALL_TRUSTED));
-                        e.writeLong(op.getBackgroundRejectCount(OP_FLAGS_ALL_TRUSTED));
-                        e.writeLong(op.getForegroundAccessDuration(OP_FLAGS_ALL_TRUSTED));
-                        e.writeLong(op.getBackgroundAccessDuration(OP_FLAGS_ALL_TRUSTED));
+                        e.writeLong(op.getForegroundAccessCount(OP_FLAGS_PULLED));
+                        e.writeLong(op.getBackgroundAccessCount(OP_FLAGS_PULLED));
+                        e.writeLong(op.getForegroundRejectCount(OP_FLAGS_PULLED));
+                        e.writeLong(op.getBackgroundRejectCount(OP_FLAGS_PULLED));
+                        e.writeLong(op.getForegroundAccessDuration(OP_FLAGS_PULLED));
+                        e.writeLong(op.getBackgroundAccessDuration(OP_FLAGS_PULLED));
 
                         String perm = AppOpsManager.opToPermission(op.getOpCode());
                         if (perm == null) {
diff --git a/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java b/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java
index 34d2c16..8164526 100644
--- a/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java
+++ b/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java
@@ -36,7 +36,7 @@
 import android.service.textclassifier.TextClassifierService;
 import android.service.textclassifier.TextClassifierService.ConnectionState;
 import android.text.TextUtils;
-import android.util.LruCache;
+import android.util.ArrayMap;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.view.textclassifier.ConversationActions;
@@ -65,6 +65,7 @@
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Queue;
 
@@ -146,11 +147,7 @@
     private final Object mLock;
     @GuardedBy("mLock")
     final SparseArray<UserState> mUserStates = new SparseArray<>();
-    // SystemTextClassifier.onDestroy() is not guaranteed to be called, use LruCache here
-    // to avoid leak.
-    @GuardedBy("mLock")
-    private final LruCache<TextClassificationSessionId, TextClassificationContext>
-            mSessionContextCache = new LruCache<>(40);
+    private final SessionCache mSessionCache;
     private final TextClassificationConstants mSettings;
     @Nullable
     private final String mDefaultTextClassifierPackage;
@@ -165,6 +162,7 @@
         PackageManager packageManager = mContext.getPackageManager();
         mDefaultTextClassifierPackage = packageManager.getDefaultTextClassifierPackageName();
         mSystemTextClassifierPackage = packageManager.getSystemTextClassifierPackageName();
+        mSessionCache = new SessionCache(mLock);
     }
 
     private void startListenSettings() {
@@ -314,7 +312,7 @@
                 classificationContext.getUseDefaultTextClassifier(),
                 service -> {
                     service.onCreateTextClassificationSession(classificationContext, sessionId);
-                    mSessionContextCache.put(sessionId, classificationContext);
+                    mSessionCache.put(sessionId, classificationContext);
                 },
                 "onCreateTextClassificationSession",
                 NO_OP_CALLBACK);
@@ -326,14 +324,14 @@
         Objects.requireNonNull(sessionId);
 
         synchronized (mLock) {
-            TextClassificationContext textClassificationContext =
-                    mSessionContextCache.get(sessionId);
+            final StrippedTextClassificationContext textClassificationContext =
+                    mSessionCache.get(sessionId);
             final int userId = textClassificationContext != null
-                    ? textClassificationContext.getUserId()
+                    ? textClassificationContext.userId
                     : UserHandle.getCallingUserId();
             final boolean useDefaultTextClassifier =
                     textClassificationContext != null
-                            ? textClassificationContext.getUseDefaultTextClassifier()
+                            ? textClassificationContext.useDefaultTextClassifier
                             : true;
             handleRequest(
                     userId,
@@ -342,7 +340,7 @@
                     useDefaultTextClassifier,
                     service -> {
                         service.onDestroyTextClassificationSession(sessionId);
-                        mSessionContextCache.remove(sessionId);
+                        mSessionCache.remove(sessionId);
                     },
                     "onDestroyTextClassificationSession",
                     NO_OP_CALLBACK);
@@ -409,7 +407,7 @@
                     pw.decreaseIndent();
                 }
             }
-            pw.println("Number of active sessions: " + mSessionContextCache.size());
+            pw.println("Number of active sessions: " + mSessionCache.size());
         }
     }
 
@@ -568,6 +566,81 @@
         }
     }
 
+    /**
+     * Stores the stripped down version of {@link TextClassificationContext}s, i.e. {@link
+     * StrippedTextClassificationContext},  keyed by {@link TextClassificationSessionId}. Sessions
+     * are cleaned up automatically when the client process is dead.
+     */
+    static final class SessionCache {
+        @NonNull
+        private final Object mLock;
+        @NonNull
+        @GuardedBy("mLock")
+        private final Map<TextClassificationSessionId, StrippedTextClassificationContext> mCache =
+                new ArrayMap<>();
+        @NonNull
+        @GuardedBy("mLock")
+        private final Map<TextClassificationSessionId, DeathRecipient> mDeathRecipients =
+                new ArrayMap<>();
+
+        SessionCache(@NonNull Object lock) {
+            mLock = Objects.requireNonNull(lock);
+        }
+
+        void put(@NonNull TextClassificationSessionId sessionId,
+                @NonNull TextClassificationContext textClassificationContext) {
+            synchronized (mLock) {
+                mCache.put(sessionId,
+                        new StrippedTextClassificationContext(textClassificationContext));
+                try {
+                    DeathRecipient deathRecipient = () -> remove(sessionId);
+                    sessionId.getToken().linkToDeath(deathRecipient, /* flags= */ 0);
+                    mDeathRecipients.put(sessionId, deathRecipient);
+                } catch (RemoteException e) {
+                    Slog.w(LOG_TAG, "SessionCache: Failed to link to death", e);
+                }
+            }
+        }
+
+        @Nullable
+        StrippedTextClassificationContext get(@NonNull TextClassificationSessionId sessionId) {
+            Objects.requireNonNull(sessionId);
+            synchronized (mLock) {
+                return mCache.get(sessionId);
+            }
+        }
+
+        void remove(@NonNull TextClassificationSessionId sessionId) {
+            Objects.requireNonNull(sessionId);
+            synchronized (mLock) {
+                DeathRecipient deathRecipient = mDeathRecipients.get(sessionId);
+                if (deathRecipient != null) {
+                    sessionId.getToken().unlinkToDeath(deathRecipient, /* flags= */ 0);
+                }
+                mDeathRecipients.remove(sessionId);
+                mCache.remove(sessionId);
+            }
+        }
+
+        int size() {
+            synchronized (mLock) {
+                return mCache.size();
+            }
+        }
+    }
+
+    /** A stripped down version of {@link TextClassificationContext}. */
+    static class StrippedTextClassificationContext {
+        @UserIdInt
+        public final int userId;
+        public final boolean useDefaultTextClassifier;
+
+        StrippedTextClassificationContext(TextClassificationContext textClassificationContext) {
+            userId = textClassificationContext.getUserId();
+            useDefaultTextClassifier = textClassificationContext.getUseDefaultTextClassifier();
+        }
+    }
+
     private final class UserState {
         @UserIdInt
         final int mUserId;
@@ -596,7 +669,8 @@
                 return mDefaultServiceState;
             }
             String textClassifierServicePackageOverride =
-                    mSettings.getTextClassifierServicePackageOverride();
+                    Binder.withCleanCallingIdentity(
+                            mSettings::getTextClassifierServicePackageOverride);
             if (!TextUtils.isEmpty(textClassifierServicePackageOverride)) {
                 if (textClassifierServicePackageOverride.equals(mDefaultTextClassifierPackage)) {
                     return mDefaultServiceState;
diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java
index 8c54fa9..88de340 100644
--- a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java
+++ b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java
@@ -87,11 +87,15 @@
     private static final long SYSTEM_CLOCK_PARANOIA_THRESHOLD_MILLIS = 2 * 1000;
 
     /**
-     * The number of previous telephony suggestions to keep for each ID (for use during debugging).
+     * The number of suggestions to keep. These are logged in bug reports to assist when debugging
+     * issues with detection.
      */
-    private static final int KEEP_SUGGESTION_HISTORY_SIZE = 30;
+    private static final int KEEP_SUGGESTION_HISTORY_SIZE = 10;
 
-    // A log for changes made to the system clock and why.
+    /**
+     * A log that records the decisions / decision metadata that affected the device's system clock
+     * time. This is logged in bug reports to assist with debugging issues with detection.
+     */
     @NonNull
     private final LocalLog mTimeChangesLog = new LocalLog(30, false /* useLocalTimestamps */);
 
@@ -140,7 +144,18 @@
         if (!validateSuggestionTime(timeSuggestion.getUtcTime(), timeSuggestion)) {
             return;
         }
-        mLastNetworkSuggestion.set(timeSuggestion);
+
+        // The caller submits suggestions with the best available information when there are network
+        // changes. The best available information may have been cached and if they were all stored
+        // this would lead to duplicates showing up in the suggestion history. The suggestions may
+        // be made for different reasons but there is not a significant benefit to storing the same
+        // suggestion information again. doAutoTimeDetection() should still be called: this ensures
+        // the suggestion and device state are always re-evaluated, which might produce a different
+        // detected time if, for example, the age of all suggestions are considered.
+        NetworkTimeSuggestion lastNetworkSuggestion = mLastNetworkSuggestion.get();
+        if (lastNetworkSuggestion == null || !lastNetworkSuggestion.equals(timeSuggestion)) {
+            mLastNetworkSuggestion.set(timeSuggestion);
+        }
 
         // Now perform auto time detection. The new suggestion may be used to modify the system
         // clock.
diff --git a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategyImpl.java b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategyImpl.java
index 652dbe15..cc33fb0 100644
--- a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategyImpl.java
+++ b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategyImpl.java
@@ -161,16 +161,17 @@
     public static final int TELEPHONY_SCORE_USAGE_THRESHOLD = TELEPHONY_SCORE_MEDIUM;
 
     /**
-     * The number of previous telephony suggestions to keep for each ID (for use during debugging).
+     * The number of suggestions to keep. These are logged in bug reports to assist when debugging
+     * issues with detection.
      */
-    private static final int KEEP_TELEPHONY_SUGGESTION_HISTORY_SIZE = 30;
+    private static final int KEEP_SUGGESTION_HISTORY_SIZE = 10;
 
     @NonNull
     private final Callback mCallback;
 
     /**
-     * A log that records the decisions / decision metadata that affected the device's time zone
-     * (for use during debugging).
+     * A log that records the decisions / decision metadata that affected the device's time zone.
+     * This is logged in bug reports to assist with debugging issues with detection.
      */
     @NonNull
     private final LocalLog mTimeZoneChangesLog = new LocalLog(30, false /* useLocalTimestamps */);
@@ -182,8 +183,7 @@
      */
     @GuardedBy("this")
     private ArrayMapWithHistory<Integer, QualifiedTelephonyTimeZoneSuggestion>
-            mSuggestionBySlotIndex =
-            new ArrayMapWithHistory<>(KEEP_TELEPHONY_SUGGESTION_HISTORY_SIZE);
+            mSuggestionBySlotIndex = new ArrayMapWithHistory<>(KEEP_SUGGESTION_HISTORY_SIZE);
 
     /**
      * Creates a new instance of {@link TimeZoneDetectorStrategyImpl}.
diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/ClientProfile.java b/services/core/java/com/android/server/tv/tunerresourcemanager/ClientProfile.java
new file mode 100644
index 0000000..bad2b78
--- /dev/null
+++ b/services/core/java/com/android/server/tv/tunerresourcemanager/ClientProfile.java
@@ -0,0 +1,212 @@
+/*
+ * 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 com.android.server.tv.tunerresourcemanager;
+
+/**
+  * A client profile object used by the Tuner Resource Manager to record the registered clients'
+  * information.
+  *
+  * @hide
+  */
+public final class ClientProfile {
+    public static final int INVALID_GROUP_ID = -1;
+    /**
+     * Client id sent to the client when registering with
+     * {@link #registerClientProfile(ResourceClientProfile, TunerResourceManagerCallback, int[])}
+     */
+    private final int mClientId;
+
+    /**
+     * see {@link ResourceClientProfile}
+     */
+    private final String mTvInputSessionId;
+
+    /**
+     * see {@link ResourceClientProfile}
+     */
+    private final int mUseCase;
+
+    /**
+     * Process id queried from {@link TvInputManager#}
+     */
+    private final int mProcessId;
+
+    /**
+     * All the clients that share the same resource would be under the same group id.
+     *
+     * <p>If a client's resource is to be reclaimed, all other clients under the same group id
+     * also lose their resources.
+     */
+    private int mGroupId = INVALID_GROUP_ID;
+
+    /**
+     * Optional nice value for TRM to reduce client’s priority.
+     */
+    private int mNiceValue;
+
+    /**
+     * Optional arbitrary priority value given by the client.
+     *
+     * <p>This value can override the default priorotiy calculated from
+     * the client profile.
+     */
+    private int mPriority;
+
+    private ClientProfile(ClientProfileBuilder builder) {
+        this.mClientId = builder.mClientId;
+        this.mTvInputSessionId = builder.mTvInputSessionId;
+        this.mUseCase = builder.mUseCase;
+        this.mProcessId = builder.mProcessId;
+        this.mGroupId = builder.mGroupId;
+        this.mNiceValue = builder.mNiceValue;
+        this.mPriority = builder.mPriority;
+    }
+
+    public int getClientId() {
+        return mClientId;
+    }
+
+    public String getTvInputSessionId() {
+        return mTvInputSessionId;
+    }
+
+    public int getUseCase() {
+        return mUseCase;
+    }
+
+    public int getProcessId() {
+        return mProcessId;
+    }
+
+    public int getGroupId() {
+        return mGroupId;
+    }
+
+    public int getPriority() {
+        return mPriority;
+    }
+
+    public int getNiceValue() {
+        return mNiceValue;
+    }
+
+    public void setGroupId(int groupId) {
+        mGroupId = groupId;
+    }
+
+    public void setPriority(int priority) {
+        mPriority = priority;
+    }
+
+    public void setNiceValue(int niceValue) {
+        mNiceValue = niceValue;
+    }
+
+    @Override
+    public String toString() {
+        return "ClientProfile: " + this.mClientId + ", " + this.mTvInputSessionId + ", "
+                + this.mUseCase + ", " + this.mProcessId;
+    }
+
+    /**
+    * Builder class for {@link ClientProfile}.
+    */
+    public static class ClientProfileBuilder {
+        private final int mClientId;
+        private String mTvInputSessionId;
+        private int mUseCase;
+        private int mProcessId;
+        private int mGroupId;
+        private int mNiceValue;
+        private int mPriority;
+
+        ClientProfileBuilder(int clientId) {
+            this.mClientId = clientId;
+        }
+
+        /**
+          * Builder for {@link ClientProfile}.
+          *
+          * @param useCase the useCase of the client.
+          */
+        public ClientProfileBuilder useCase(int useCase) {
+            this.mUseCase = useCase;
+            return this;
+        }
+
+        /**
+          * Builder for {@link ClientProfile}.
+          *
+          * @param tvInputSessionId the id of the tv input session.
+          */
+        public ClientProfileBuilder tvInputSessionId(String tvInputSessionId) {
+            this.mTvInputSessionId = tvInputSessionId;
+            return this;
+        }
+
+        /**
+          * Builder for {@link ClientProfile}.
+          *
+          * @param processId the id of process.
+          */
+        public ClientProfileBuilder processId(int processId) {
+            this.mProcessId = processId;
+            return this;
+        }
+
+
+        /**
+          * Builder for {@link ClientProfile}.
+          *
+          * @param groupId the id of the group that shares the same resource.
+          */
+        public ClientProfileBuilder groupId(int groupId) {
+            this.mGroupId = groupId;
+            return this;
+        }
+
+        /**
+          * Builder for {@link ClientProfile}.
+          *
+          * @param niceValue the nice value of the client.
+          */
+        public ClientProfileBuilder niceValue(int niceValue) {
+            this.mNiceValue = niceValue;
+            return this;
+        }
+
+        /**
+          * Builder for {@link ClientProfile}.
+          *
+          * @param priority the priority value of the client.
+          */
+        public ClientProfileBuilder priority(int priority) {
+            this.mPriority = priority;
+            return this;
+        }
+
+        /**
+          * Build a {@link ClientProfile}.
+          *
+          * @return {@link ClientProfile}.
+          */
+        public ClientProfile build() {
+            ClientProfile clientProfile = new ClientProfile(this);
+            return clientProfile;
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java
new file mode 100644
index 0000000..49a7045
--- /dev/null
+++ b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java
@@ -0,0 +1,258 @@
+/*
+ * 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 com.android.server.tv.tunerresourcemanager;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.media.tv.TvInputManager;
+import android.media.tv.tunerresourcemanager.CasSessionRequest;
+import android.media.tv.tunerresourcemanager.IResourcesReclaimListener;
+import android.media.tv.tunerresourcemanager.ITunerResourceManager;
+import android.media.tv.tunerresourcemanager.ResourceClientProfile;
+import android.media.tv.tunerresourcemanager.TunerFrontendInfo;
+import android.media.tv.tunerresourcemanager.TunerFrontendRequest;
+import android.media.tv.tunerresourcemanager.TunerLnbRequest;
+import android.media.tv.tunerresourcemanager.TunerResourceManager;
+import android.os.RemoteException;
+import android.util.Log;
+import android.util.Slog;
+import android.util.SparseArray;
+
+import com.android.server.SystemService;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+  * This class provides a system service that manages the TV tuner resources.
+  *
+  * @hide
+  */
+public class TunerResourceManagerService extends SystemService {
+    private static final String TAG = "TunerResourceManagerService";
+    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+    private SparseArray<ClientProfile> mClientProfiles = new SparseArray<>();
+    private SparseArray<IResourcesReclaimListener> mListeners = new SparseArray<>();
+    private int mNextUnusedFrontendId = 0;
+    private List<Integer> mReleasedClientId = new ArrayList<Integer>();
+    private List<Integer> mAvailableFrontendIds = new ArrayList<Integer>();
+
+    private TvInputManager mManager;
+
+    public TunerResourceManagerService(@Nullable Context context) {
+        super(context);
+    }
+
+    @Override
+    public void onStart() {
+        publishBinderService(Context.TV_TUNER_RESOURCE_MGR_SERVICE, new BinderService());
+        mManager = (TvInputManager) getContext()
+                .getSystemService(Context.TV_INPUT_SERVICE);
+    }
+
+    private final class BinderService extends ITunerResourceManager.Stub {
+        @Override
+        public void registerClientProfile(@NonNull ResourceClientProfile profile,
+                            @NonNull IResourcesReclaimListener listener,
+                            @NonNull int[] clientId) {
+            if (DEBUG) {
+                Slog.d(TAG, "registerClientProfile(clientProfile=" + profile + ")");
+            }
+
+            // TODO tell if the client already exists
+            if (mReleasedClientId.isEmpty()) {
+                clientId[0] = mNextUnusedFrontendId++;
+            } else {
+                clientId[0] = mReleasedClientId.get(0);
+                mReleasedClientId.remove(0);
+            }
+
+            if (mManager == null) {
+                Slog.e(TAG, "TvInputManager is null. Can't register client profile.");
+                return;
+            }
+
+            int callingPid = mManager.getClientPid(profile.getTvInputSessionId());
+
+            ClientProfile clientProfile = new ClientProfile.ClientProfileBuilder(
+                    clientId[0])
+                    .tvInputSessionId(profile.getTvInputSessionId())
+                    .useCase(profile.getUseCase())
+                    .processId(callingPid)
+                    .build();
+            mClientProfiles.append(clientId[0], clientProfile);
+            mListeners.append(clientId[0], listener);
+        }
+
+        @Override
+        public void unregisterClientProfile(int clientId) {
+            if (DEBUG) {
+                Slog.d(TAG, "unregisterClientProfile(clientId=" + clientId + ")");
+            }
+
+            mClientProfiles.remove(clientId);
+            mListeners.remove(clientId);
+            mReleasedClientId.add(clientId);
+        }
+
+        @Override
+        public boolean updateClientPriority(int clientId, int priority, int niceValue) {
+            if (DEBUG) {
+                Slog.d(TAG, "updateClientPriority(clientId=" + clientId
+                        + ", priority=" + priority + ", niceValue=" + niceValue + ")");
+            }
+
+            ClientProfile profile = mClientProfiles.get(clientId);
+            if (profile == null) {
+                Slog.e(TAG, "Can not find client profile with id " + clientId
+                        + " when trying to update the client priority.");
+                return false;
+            }
+
+            profile.setPriority(priority);
+            profile.setNiceValue(niceValue);
+
+            return true;
+        }
+
+        @Override
+        public void setFrontendInfoList(@NonNull TunerFrontendInfo[] infos)
+                throws RemoteException {
+            if (infos == null || infos.length == 0) {
+                Slog.d(TAG, "Can't update with empty frontend info");
+                return;
+            }
+
+            if (DEBUG) {
+                Slog.d(TAG, "updateFrontendInfo:");
+                for (int i = 0; i < infos.length; i++) {
+                    Slog.d(TAG, infos[i].toString());
+                }
+            }
+        }
+
+        @Override
+        public void updateCasInfo(int casSystemId, int maxSessionNum) {
+            if (DEBUG) {
+                Slog.d(TAG, "updateCasInfo(casSystemId="
+                        + casSystemId + ", maxSessionNum=" + maxSessionNum + ")");
+            }
+        }
+
+        @Override
+        public void setLnbInfoList(int[] lnbIds) {
+            if (DEBUG) {
+                for (int i = 0; i < lnbIds.length; i++) {
+                    Slog.d(TAG, "updateLnbInfo(lnbId=" + lnbIds[i] + ")");
+                }
+            }
+        }
+
+        @Override
+        public boolean requestFrontend(@NonNull TunerFrontendRequest request,
+                                       @NonNull int[] frontendId) throws RemoteException {
+            if (DEBUG) {
+                Slog.d(TAG, "requestFrontend(request=" + request + ")");
+            }
+
+            frontendId[0] = TunerResourceManager.INVALID_FRONTEND_ID;
+
+            if (getContext() == null) {
+                Slog.e(TAG, "Can not find context when requesting frontend");
+                return false;
+            }
+
+            if (mClientProfiles.get(request.getClientId()) == null) {
+                Slog.e(TAG, "Request from unregistered client. Id: "
+                        + request.getClientId());
+                return false;
+            }
+
+            String sessionId = mClientProfiles.get(request.getClientId())
+                    .getTvInputSessionId();
+
+            if (DEBUG) {
+                Slog.d(TAG, "session Id:" + sessionId + ")");
+            }
+
+            if (DEBUG) {
+                Slog.d(TAG, "No available Frontend found.");
+            }
+
+            return false;
+        }
+
+        @Override
+        public void shareFrontend(int selfClientId, int targetClientId) {
+            if (DEBUG) {
+                Slog.d(TAG, "shareFrontend from "
+                        + selfClientId + " with " + targetClientId);
+            }
+        }
+
+        @Override
+        public boolean requestCasSession(@NonNull CasSessionRequest request,
+                    @NonNull int[] sessionResourceId) {
+            if (DEBUG) {
+                Slog.d(TAG, "requestCasSession(request=" + request + ")");
+            }
+
+            return true;
+        }
+
+        @Override
+        public boolean requestLnb(@NonNull TunerLnbRequest request, @NonNull int[] lnbId) {
+            if (DEBUG) {
+                Slog.d(TAG, "requestLnb(request=" + request + ")");
+            }
+            return true;
+        }
+
+        @Override
+        public void releaseFrontend(int frontendId) {
+            if (DEBUG) {
+                Slog.d(TAG, "releaseFrontend(id=" + frontendId + ")");
+            }
+        }
+
+        @Override
+        public void releaseCasSession(int sessionResourceId) {
+            if (DEBUG) {
+                Slog.d(TAG, "releaseCasSession(sessionResourceId=" + sessionResourceId + ")");
+            }
+        }
+
+        @Override
+        public void releaseLnb(int lnbId) {
+            if (DEBUG) {
+                Slog.d(TAG, "releaseLnb(lnbId=" + lnbId + ")");
+            }
+        }
+
+        @Override
+        public boolean isHigherPriority(ResourceClientProfile challengerProfile,
+                ResourceClientProfile holderProfile) {
+            if (DEBUG) {
+                Slog.d(TAG, "isHigherPriority(challengerProfile=" + challengerProfile
+                        + ", holderProfile=" + challengerProfile + ")");
+            }
+            return true;
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
index 0502d0b..68a7188 100644
--- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
@@ -581,6 +581,9 @@
 
     /**
      * Notifies the tracker that all windows of the app have been drawn.
+     *
+     * @return Non-null info if the activity was pending to draw, otherwise it might have been set
+     *         to invisible (removed from active transition) or it was already drawn.
      */
     @Nullable
     TransitionInfoSnapshot notifyWindowsDrawn(@NonNull ActivityRecord r, long timestampNs) {
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index a54f5d4..4cc4851 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -362,6 +362,7 @@
     private static final String TAG_PERSISTABLEBUNDLE = "persistable_bundle";
     private static final String ATTR_LAUNCHEDFROMUID = "launched_from_uid";
     private static final String ATTR_LAUNCHEDFROMPACKAGE = "launched_from_package";
+    private static final String ATTR_LAUNCHEDFROMFEATURE = "launched_from_feature";
     private static final String ATTR_RESOLVEDTYPE = "resolved_type";
     private static final String ATTR_COMPONENTSPECIFIED = "component_specified";
     static final String ACTIVITY_ICON_SUFFIX = "_activity_icon_";
@@ -422,6 +423,7 @@
     final int launchedFromPid; // always the pid who started the activity.
     final int launchedFromUid; // always the uid who started the activity.
     final String launchedFromPackage; // always the package who started the activity.
+    final @Nullable String launchedFromFeatureId; // always the feature in launchedFromPackage
     final Intent intent;    // the original intent that generated us
     final String shortComponentName; // the short component name of the intent
     final String resolvedType; // as per original caller;
@@ -773,6 +775,7 @@
                 pw.print(" processName="); pw.println(processName);
         pw.print(prefix); pw.print("launchedFromUid="); pw.print(launchedFromUid);
                 pw.print(" launchedFromPackage="); pw.print(launchedFromPackage);
+                pw.print(" launchedFromFeature="); pw.print(launchedFromFeatureId);
                 pw.print(" userId="); pw.println(mUserId);
         pw.print(prefix); pw.print("app="); pw.println(app);
         pw.print(prefix); pw.println(intent.toInsecureString());
@@ -1483,9 +1486,10 @@
     }
 
     ActivityRecord(ActivityTaskManagerService _service, WindowProcessController _caller,
-            int _launchedFromPid, int _launchedFromUid, String _launchedFromPackage, Intent _intent,
-            String _resolvedType, ActivityInfo aInfo, Configuration _configuration,
-            ActivityRecord _resultTo, String _resultWho, int _reqCode, boolean _componentSpecified,
+            int _launchedFromPid, int _launchedFromUid, String _launchedFromPackage,
+            @Nullable String _launchedFromFeature, Intent _intent, String _resolvedType,
+            ActivityInfo aInfo, Configuration _configuration, ActivityRecord _resultTo,
+            String _resultWho, int _reqCode, boolean _componentSpecified,
             boolean _rootVoiceInteraction, ActivityStackSupervisor supervisor,
             ActivityOptions options, ActivityRecord sourceRecord) {
         super(_service.mWindowManager, new Token(_intent).asBinder(), TYPE_APPLICATION, true,
@@ -1564,6 +1568,7 @@
         launchedFromPid = _launchedFromPid;
         launchedFromUid = _launchedFromUid;
         launchedFromPackage = _launchedFromPackage;
+        launchedFromFeatureId = _launchedFromFeature;
         shortComponentName = _intent.getComponent().flattenToShortString();
         resolvedType = _resolvedType;
         componentSpecified = _componentSpecified;
@@ -1718,10 +1723,9 @@
                 // The snapshot of home is only used once because it won't be updated while screen
                 // is on (see {@link TaskSnapshotController#screenTurningOff}).
                 mWmService.mTaskSnapshotController.removeSnapshotCache(task.mTaskId);
-                // TODO(b/9684093): Use more general condition to specify the case.
-                if (mDisplayContent.mAppTransition
-                        .getAppTransition() != WindowManager.TRANSIT_KEYGUARD_GOING_AWAY) {
-                    // Only use snapshot of home as starting window when unlocking.
+                if ((mDisplayContent.mAppTransition.getTransitFlags()
+                        & WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION) == 0) {
+                    // Only use snapshot of home as starting window when unlocking directly.
                     return false;
                 }
             }
@@ -2284,7 +2288,7 @@
      * @return Whether AppOps allows this package to enter picture-in-picture.
      */
     private boolean checkEnterPictureInPictureAppOpsState() {
-        return mAtmService.getAppOpsService().checkOperation(
+        return mAtmService.getAppOpsManager().checkOpNoThrow(
                 OP_PICTURE_IN_PICTURE, info.applicationInfo.uid, packageName) == MODE_ALLOWED;
     }
 
@@ -2674,7 +2678,8 @@
         // DisplayContent#topRunningActivity().
         final ActivityRecord next = display.topRunningActivity();
         final boolean isLastStackOverEmptyHome =
-                next == null && stack.isFocusedStackOnDisplay() && display.getRootHomeTask() != null;
+                next == null && stack.isFocusedStackOnDisplay()
+                        && display.getOrCreateRootHomeTask() != null;
         if (isLastStackOverEmptyHome) {
             // Don't destroy activity immediately if this is the last activity on the display and
             // the display contains home stack. Although there is no next activity at the moment,
@@ -5196,11 +5201,17 @@
         }
         final TransitionInfoSnapshot info = mStackSupervisor
                 .getActivityMetricsLogger().notifyWindowsDrawn(this, timestampNs);
-        final int windowsDrawnDelayMs = info != null ? info.windowsDrawnDelayMs : INVALID_DELAY;
-        final @LaunchState int launchState = info != null ? info.getLaunchState() : -1;
-        mStackSupervisor.reportActivityLaunchedLocked(false /* timeout */, this,
-                windowsDrawnDelayMs, launchState);
-        mStackSupervisor.stopWaitingForActivityVisible(this, windowsDrawnDelayMs);
+        final boolean validInfo = info != null;
+        final int windowsDrawnDelayMs = validInfo ? info.windowsDrawnDelayMs : INVALID_DELAY;
+        final @LaunchState int launchState = validInfo ? info.getLaunchState() : -1;
+        // The activity may have been requested to be invisible (another activity has been launched)
+        // so there is no valid info. But if it is the current top activity (e.g. sleeping), the
+        // invalid state is still reported to make sure the waiting result is notified.
+        if (validInfo || this == mDisplayContent.topRunningActivity()) {
+            mStackSupervisor.reportActivityLaunchedLocked(false /* timeout */, this,
+                    windowsDrawnDelayMs, launchState);
+            mStackSupervisor.stopWaitingForActivityVisible(this, windowsDrawnDelayMs);
+        }
         finishLaunchTickingLocked();
         if (task != null) {
             task.hasBeenVisible = true;
@@ -6212,6 +6223,13 @@
         return mRemoteAnimationDefinition;
     }
 
+    @Override
+    void applyFixedRotationTransform(DisplayInfo info, DisplayFrames displayFrames,
+            Configuration config) {
+        super.applyFixedRotationTransform(info, displayFrames, config);
+        ensureActivityConfiguration(0 /* globalChanges */, false /* preserveWindow */);
+    }
+
     void setRequestedOrientation(int requestedOrientation) {
         setOrientation(requestedOrientation, mayFreezeScreenLocked());
         mAtmService.getTaskChangeNotificationController().notifyActivityRequestedOrientationChanged(
@@ -6450,11 +6468,20 @@
 
     @Override
     void resolveOverrideConfiguration(Configuration newParentConfiguration) {
-        Configuration resolvedConfig = getResolvedOverrideConfiguration();
+        super.resolveOverrideConfiguration(newParentConfiguration);
+        final Configuration resolvedConfig = getResolvedOverrideConfiguration();
+        if (isFixedRotationTransforming()) {
+            // The resolved configuration is applied with rotated display configuration. If this
+            // activity matches its parent (the following resolving procedures are no-op), then it
+            // can use the resolved configuration directly. Otherwise (e.g. fixed aspect ratio),
+            // the rotated configuration is used as parent configuration to compute the actual
+            // resolved configuration. It is like putting the activity in a rotated container.
+            mTmpConfig.setTo(resolvedConfig);
+            newParentConfiguration = mTmpConfig;
+        }
         if (mCompatDisplayInsets != null) {
             resolveSizeCompatModeConfiguration(newParentConfiguration);
         } else {
-            super.resolveOverrideConfiguration(newParentConfiguration);
             // We ignore activities' requested orientation in multi-window modes. Task level may
             // take them into consideration when calculating bounds.
             if (getParent() != null && getParent().inMultiWindowMode()) {
@@ -6483,7 +6510,6 @@
      * inheriting the parent bounds.
      */
     private void resolveSizeCompatModeConfiguration(Configuration newParentConfiguration) {
-        super.resolveOverrideConfiguration(newParentConfiguration);
         final Configuration resolvedConfig = getResolvedOverrideConfiguration();
         final Rect resolvedBounds = resolvedConfig.windowConfiguration.getBounds();
 
@@ -6657,28 +6683,26 @@
         mTmpPrevBounds.set(getBounds());
         super.onConfigurationChanged(newParentConfig);
 
-        final Rect overrideBounds = getResolvedOverrideBounds();
-        if (task != null && !overrideBounds.isEmpty()
-                // If the changes come from change-listener, the incoming parent configuration is
-                // still the old one. Make sure their orientations are the same to reduce computing
-                // the compatibility bounds for the intermediate state.
-                && (task.getConfiguration().orientation == newParentConfig.orientation)) {
-            final Rect taskBounds = task.getBounds();
-            // Since we only center the activity horizontally, if only the fixed height is smaller
-            // than its container, the override bounds don't need to take effect.
-            if ((overrideBounds.width() != taskBounds.width()
-                    || overrideBounds.height() > taskBounds.height())) {
-                calculateCompatBoundsTransformation(newParentConfig);
-                updateSurfacePosition();
-            } else if (mSizeCompatBounds != null) {
+        if (shouldUseSizeCompatMode()) {
+            final Rect overrideBounds = getResolvedOverrideBounds();
+            if (task != null && !overrideBounds.isEmpty()) {
+                final Rect taskBounds = task.getBounds();
+                // Since we only center the activity horizontally, if only the fixed height is
+                // smaller than its container, the override bounds don't need to take effect.
+                if ((overrideBounds.width() != taskBounds.width()
+                        || overrideBounds.height() > taskBounds.height())) {
+                    calculateCompatBoundsTransformation(newParentConfig);
+                    updateSurfacePosition();
+                } else if (mSizeCompatBounds != null) {
+                    mSizeCompatBounds = null;
+                    mSizeCompatScale = 1f;
+                    updateSurfacePosition();
+                }
+            } else if (overrideBounds.isEmpty()) {
                 mSizeCompatBounds = null;
                 mSizeCompatScale = 1f;
                 updateSurfacePosition();
             }
-        } else if (overrideBounds.isEmpty()) {
-            mSizeCompatBounds = null;
-            mSizeCompatScale = 1f;
-            updateSurfacePosition();
         }
 
         final int newWinMode = getWindowingMode();
@@ -7282,6 +7306,9 @@
         if (launchedFromPackage != null) {
             out.attribute(null, ATTR_LAUNCHEDFROMPACKAGE, launchedFromPackage);
         }
+        if (launchedFromFeatureId != null) {
+            out.attribute(null, ATTR_LAUNCHEDFROMFEATURE, launchedFromFeatureId);
+        }
         if (resolvedType != null) {
             out.attribute(null, ATTR_RESOLVEDTYPE, resolvedType);
         }
@@ -7309,6 +7336,7 @@
         PersistableBundle persistentState = null;
         int launchedFromUid = 0;
         String launchedFromPackage = null;
+        String launchedFromFeature = null;
         String resolvedType = null;
         boolean componentSpecified = false;
         int userId = 0;
@@ -7327,6 +7355,8 @@
                 launchedFromUid = Integer.parseInt(attrValue);
             } else if (ATTR_LAUNCHEDFROMPACKAGE.equals(attrName)) {
                 launchedFromPackage = attrValue;
+            } else if (ATTR_LAUNCHEDFROMFEATURE.equals(attrName)) {
+                launchedFromFeature = attrValue;
             } else if (ATTR_RESOLVEDTYPE.equals(attrName)) {
                 resolvedType = attrValue;
             } else if (ATTR_COMPONENTSPECIFIED.equals(attrName)) {
@@ -7374,10 +7404,11 @@
                     " resolvedType=" + resolvedType);
         }
         final ActivityRecord r = new ActivityRecord(service, null /* caller */,
-                0 /* launchedFromPid */, launchedFromUid, launchedFromPackage, intent, resolvedType,
-                aInfo, service.getConfiguration(), null /* resultTo */, null /* resultWho */,
-                0 /* reqCode */, componentSpecified, false /* rootVoiceInteraction */,
-                stackSupervisor, null /* options */, null /* sourceRecord */);
+                0 /* launchedFromPid */, launchedFromUid, launchedFromPackage, launchedFromFeature,
+                intent, resolvedType, aInfo, service.getConfiguration(), null /* resultTo */,
+                null /* resultWho */, 0 /* reqCode */, componentSpecified,
+                false /* rootVoiceInteraction */, stackSupervisor, null /* options */,
+                null /* sourceRecord */);
 
         r.mPersistentState = persistentState;
         r.taskDescription = taskDescription;
@@ -7674,7 +7705,7 @@
         mainWindow.getContentInsets(insets);
         InsetUtils.addInsets(insets, getLetterboxInsets());
         return new RemoteAnimationTarget(task.mTaskId, record.getMode(),
-                record.mAdapter.mCapturedLeash, !task.fillsParent(),
+                record.mAdapter.mCapturedLeash, !fillsParent(),
                 mainWindow.mWinAnimator.mLastClipRect, insets,
                 getPrefixOrderIndex(), record.mAdapter.mPosition,
                 record.mAdapter.mStackBounds, task.getWindowConfiguration(),
@@ -7691,5 +7722,16 @@
             return;
         }
         win.getAnimationFrames(outFrame, outInsets, outStableInsets, outSurfaceInsets);
+        if (isFixedRotationTransforming()) {
+            // This activity has been rotated but the display is still in old rotation. Because the
+            // animation applies in display space coordinates, the rotated animation frames need to
+            // be unrotated to avoid being cropped.
+            unrotateAnimationFrames(outFrame, outInsets, outStableInsets, outSurfaceInsets);
+        }
+    }
+
+    void setPictureInPictureParams(PictureInPictureParams p) {
+        pictureInPictureArgs.copyOnlySet(p);
+        getTask().getRootTask().setPictureInPictureParams(p);
     }
 }
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java
index d380f8c..688f474 100644
--- a/services/core/java/com/android/server/wm/ActivityStack.java
+++ b/services/core/java/com/android/server/wm/ActivityStack.java
@@ -60,18 +60,6 @@
 import static android.view.WindowManager.TRANSIT_TASK_TO_BACK;
 import static android.view.WindowManager.TRANSIT_TASK_TO_FRONT;
 
-import static com.android.server.wm.TaskProto.ACTIVITIES;
-import static com.android.server.wm.TaskProto.ACTIVITY_TYPE;
-import static com.android.server.wm.TaskProto.BOUNDS;
-import static com.android.server.wm.TaskProto.DISPLAYED_BOUNDS;
-import static com.android.server.wm.TaskProto.DISPLAY_ID;
-import static com.android.server.wm.TaskProto.LAST_NON_FULLSCREEN_BOUNDS;
-import static com.android.server.wm.TaskProto.MIN_HEIGHT;
-import static com.android.server.wm.TaskProto.MIN_WIDTH;
-import static com.android.server.wm.TaskProto.ORIG_ACTIVITY;
-import static com.android.server.wm.TaskProto.REAL_ACTIVITY;
-import static com.android.server.wm.TaskProto.RESIZE_MODE;
-import static com.android.server.wm.TaskProto.RESUMED_ACTIVITY;
 import static com.android.server.wm.ActivityStack.ActivityState.PAUSED;
 import static com.android.server.wm.ActivityStack.ActivityState.PAUSING;
 import static com.android.server.wm.ActivityStack.ActivityState.RESUMED;
@@ -115,14 +103,27 @@
 import static com.android.server.wm.BoundsAnimationController.SCHEDULE_PIP_MODE_CHANGED_ON_END;
 import static com.android.server.wm.BoundsAnimationController.SCHEDULE_PIP_MODE_CHANGED_ON_START;
 import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_DOCKED_DIVIDER;
+import static com.android.server.wm.TaskProto.ACTIVITIES;
+import static com.android.server.wm.TaskProto.ACTIVITY_TYPE;
 import static com.android.server.wm.TaskProto.ADJUSTED_BOUNDS;
 import static com.android.server.wm.TaskProto.ADJUSTED_FOR_IME;
 import static com.android.server.wm.TaskProto.ADJUST_DIVIDER_AMOUNT;
 import static com.android.server.wm.TaskProto.ADJUST_IME_AMOUNT;
 import static com.android.server.wm.TaskProto.ANIMATING_BOUNDS;
+import static com.android.server.wm.TaskProto.BOUNDS;
+import static com.android.server.wm.TaskProto.CREATED_BY_ORGANIZER;
 import static com.android.server.wm.TaskProto.DEFER_REMOVAL;
+import static com.android.server.wm.TaskProto.DISPLAYED_BOUNDS;
+import static com.android.server.wm.TaskProto.DISPLAY_ID;
 import static com.android.server.wm.TaskProto.FILLS_PARENT;
+import static com.android.server.wm.TaskProto.LAST_NON_FULLSCREEN_BOUNDS;
 import static com.android.server.wm.TaskProto.MINIMIZE_AMOUNT;
+import static com.android.server.wm.TaskProto.MIN_HEIGHT;
+import static com.android.server.wm.TaskProto.MIN_WIDTH;
+import static com.android.server.wm.TaskProto.ORIG_ACTIVITY;
+import static com.android.server.wm.TaskProto.REAL_ACTIVITY;
+import static com.android.server.wm.TaskProto.RESIZE_MODE;
+import static com.android.server.wm.TaskProto.RESUMED_ACTIVITY;
 import static com.android.server.wm.TaskProto.ROOT_TASK_ID;
 import static com.android.server.wm.TaskProto.SURFACE_HEIGHT;
 import static com.android.server.wm.TaskProto.SURFACE_WIDTH;
@@ -135,6 +136,7 @@
 import static java.lang.Integer.MAX_VALUE;
 
 import android.annotation.IntDef;
+import android.annotation.Nullable;
 import android.app.Activity;
 import android.app.ActivityManager;
 import android.app.ActivityManagerInternal;
@@ -622,7 +624,7 @@
                 true /*neverRelinquishIdentity*/,
                 _taskDescription != null ? _taskDescription : new ActivityManager.TaskDescription(),
                 id, INVALID_TASK_ID, INVALID_TASK_ID, 0 /*taskAffiliationColor*/,
-                info.applicationInfo.uid, info.packageName, info.resizeMode,
+                info.applicationInfo.uid, info.packageName, null, info.resizeMode,
                 info.supportsPictureInPicture(), false /*_realActivitySuspended*/,
                 false /*userSetupComplete*/, INVALID_MIN_SIZE, INVALID_MIN_SIZE, info,
                 _voiceSession, _voiceInteractor, stack);
@@ -635,15 +637,16 @@
             String _lastDescription, long lastTimeMoved, boolean neverRelinquishIdentity,
             ActivityManager.TaskDescription _lastTaskDescription, int taskAffiliation,
             int prevTaskId, int nextTaskId, int taskAffiliationColor, int callingUid,
-            String callingPackage, int resizeMode, boolean supportsPictureInPicture,
-            boolean _realActivitySuspended, boolean userSetupComplete, int minWidth, int minHeight,
+            String callingPackage, @Nullable String callingFeatureId, int resizeMode,
+            boolean supportsPictureInPicture, boolean _realActivitySuspended,
+            boolean userSetupComplete, int minWidth, int minHeight,
             ActivityInfo info, IVoiceInteractionSession _voiceSession,
             IVoiceInteractor _voiceInteractor, ActivityStack stack) {
         super(atmService, id, _intent, _affinityIntent, _affinity, _rootAffinity,
                 _realActivity, _origActivity, _rootWasReset, _autoRemoveRecents, _askedCompatMode,
                 _userId, _effectiveUid, _lastDescription, lastTimeMoved, neverRelinquishIdentity,
                 _lastTaskDescription, taskAffiliation, prevTaskId, nextTaskId, taskAffiliationColor,
-                callingUid, callingPackage, resizeMode, supportsPictureInPicture,
+                callingUid, callingPackage, callingFeatureId, resizeMode, supportsPictureInPicture,
                 _realActivitySuspended, userSetupComplete, minWidth, minHeight, info, _voiceSession,
                 _voiceInteractor, stack);
 
@@ -729,53 +732,14 @@
                         newBounds);
                 hasNewOverrideBounds = true;
             }
-
-            // Use override windowing mode to prevent extra bounds changes if inheriting the mode.
-            if (overrideWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY
-                    || overrideWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) {
-                // If entering split screen or if something about the available split area changes,
-                // recalculate the split windows to match the new configuration.
-                if (rotationChanged || windowingModeChanged
-                        || prevDensity != getConfiguration().densityDpi
-                        || prevScreenW != getConfiguration().screenWidthDp
-                        || prevScreenH != getConfiguration().screenHeightDp) {
-                    calculateDockedBoundsForConfigChange(newParentConfig, newBounds);
-                    hasNewOverrideBounds = true;
-                }
-            }
         }
 
         if (windowingModeChanged) {
-            // Use override windowing mode to prevent extra bounds changes if inheriting the mode.
-            if (overrideWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
-                getStackDockedModeBounds(null /* dockedBounds */, null /* currentTempTaskBounds */,
-                        newBounds /* outStackBounds */, mTmpRect2 /* outTempTaskBounds */);
-                // immediately resize so docked bounds are available in onSplitScreenModeActivated
-                setTaskDisplayedBounds(null);
-                setTaskBounds(newBounds);
-                setBounds(newBounds);
-                newBounds.set(newBounds);
-            } else if (overrideWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) {
-                Rect dockedBounds = display.getRootSplitScreenPrimaryTask().getBounds();
-                final boolean isMinimizedDock =
-                        display.mDisplayContent.getDockedDividerController().isMinimizedDock();
-                if (isMinimizedDock) {
-                    Task topTask = display.getRootSplitScreenPrimaryTask().getTopMostTask();
-                    if (topTask != null) {
-                        dockedBounds = topTask.getBounds();
-                    }
-                }
-                getStackDockedModeBounds(dockedBounds, null /* currentTempTaskBounds */,
-                        newBounds /* outStackBounds */, mTmpRect2 /* outTempTaskBounds */);
-                hasNewOverrideBounds = true;
-            }
+            display.onStackWindowingModeChanged(this);
         }
         if (hasNewOverrideBounds) {
-            if (inSplitScreenPrimaryWindowingMode()) {
-                mStackSupervisor.resizeDockedStackLocked(new Rect(newBounds),
-                        null /* tempTaskBounds */, null /* tempTaskInsetBounds */,
-                        null /* tempOtherTaskBounds */, null /* tempOtherTaskInsetBounds */,
-                        PRESERVE_WINDOWS, true /* deferResume */);
+            if (inSplitScreenWindowingMode()) {
+                setBounds(newBounds);
             } else if (overrideWindowingMode != WINDOWING_MODE_PINNED) {
                 // For pinned stack, resize is now part of the {@link WindowContainerTransaction}
                 resize(new Rect(newBounds), null /* tempTaskBounds */,
@@ -826,6 +790,17 @@
         setWindowingMode(windowingMode, false /* animate */, false /* showRecents */,
                 false /* enteringSplitScreenMode */, false /* deferEnsuringVisibility */,
                 false /* creating */);
+        if (windowingMode == WINDOWING_MODE_PINNED) {
+            // This stack will be visible before SystemUI requests PiP animation to start, and if
+            // the selected animation type is fade in, this stack will be close first. If the
+            // animation does not start early, user may see this full screen window appear again
+            // after the closing transition finish, which could cause screen to flicker.
+            // Check if animation should start here in advance.
+            final BoundsAnimationController controller = getDisplay().mBoundsAnimationController;
+            if (controller.isAnimationTypeFadeIn()) {
+                setPinnedStackAlpha(0f);
+            }
+        }
     }
 
     /**
@@ -907,11 +882,7 @@
                 // warning toast about it.
                 mAtmService.getTaskChangeNotificationController()
                         .notifyActivityDismissingDockedStack();
-                final ActivityStack primarySplitStack = display.getRootSplitScreenPrimaryTask();
-                primarySplitStack.setWindowingModeInSurfaceTransaction(WINDOWING_MODE_UNDEFINED,
-                        false /* animate */, false /* showRecents */,
-                        false /* enteringSplitScreenMode */, true /* deferEnsuringVisibility */,
-                        primarySplitStack == this ? creating : false);
+                display.onSplitScreenModeDismissed();
             }
         }
 
@@ -1205,7 +1176,7 @@
                     display.getTopStackInWindowingMode(WINDOWING_MODE_FULLSCREEN);
             if (topFullScreenStack != null) {
                 final ActivityStack primarySplitScreenStack = display.getRootSplitScreenPrimaryTask();
-                if (display.getIndexOf(topFullScreenStack)
+                if (primarySplitScreenStack != null && display.getIndexOf(topFullScreenStack)
                         > display.getIndexOf(primarySplitScreenStack)) {
                     primarySplitScreenStack.moveToFront(reason + " splitScreenToTop");
                 }
@@ -2841,6 +2812,11 @@
 
     boolean navigateUpTo(ActivityRecord srec, Intent destIntent, int resultCode,
             Intent resultData) {
+        if (!srec.attachedToProcess()) {
+            // Nothing to do if the caller is not attached, because this method should be called
+            // from an alive activity.
+            return false;
+        }
         final Task task = srec.getTask();
 
         if (!mChildren.contains(task) || !task.hasChild(srec)) {
@@ -2902,14 +2878,14 @@
         resultData = resultDataHolder[0];
 
         if (parent != null && foundParentInTask) {
+            final int callingUid = srec.info.applicationInfo.uid;
             final int parentLaunchMode = parent.info.launchMode;
             final int destIntentFlags = destIntent.getFlags();
             if (parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE ||
                     parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TASK ||
                     parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TOP ||
                     (destIntentFlags & Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) {
-                parent.deliverNewIntentLocked(srec.info.applicationInfo.uid, destIntent,
-                        srec.packageName);
+                parent.deliverNewIntentLocked(callingUid, destIntent, srec.packageName);
             } else {
                 try {
                     ActivityInfo aInfo = AppGlobals.getPackageManager().getActivityInfo(
@@ -2922,10 +2898,11 @@
                             .setActivityInfo(aInfo)
                             .setResultTo(parent.appToken)
                             .setCallingPid(-1)
-                            .setCallingUid(parent.launchedFromUid)
-                            .setCallingPackage(parent.launchedFromPackage)
+                            .setCallingUid(callingUid)
+                            .setCallingPackage(srec.packageName)
+                            .setCallingFeatureId(parent.launchedFromFeatureId)
                             .setRealCallingPid(-1)
-                            .setRealCallingUid(parent.launchedFromUid)
+                            .setRealCallingUid(callingUid)
                             .setComponentSpecified(true)
                             .execute();
                     foundParentInTask = res == ActivityManager.START_SUCCESS;
@@ -3980,17 +3957,6 @@
                 ? ((WindowContainer) oldParent).getDisplayContent() : null;
         super.onParentChanged(newParent, oldParent);
 
-        if (display != null && inSplitScreenPrimaryWindowingMode()
-                // only do this for the base stack
-                && !newParent.inSplitScreenPrimaryWindowingMode()) {
-            // If we created a docked stack we want to resize it so it resizes all other stacks
-            // in the system.
-            getStackDockedModeBounds(null /* dockedBounds */, null /* currentTempTaskBounds */,
-                    mTmpRect /* outStackBounds */, mTmpRect2 /* outTempTaskBounds */);
-            mStackSupervisor.resizeDockedStackLocked(getRequestedOverrideBounds(), mTmpRect,
-                    mTmpRect2, null, null, PRESERVE_WINDOWS);
-        }
-
         // Resume next focusable stack after reparenting to another display if we aren't removing
         // the prevous display.
         if (oldDisplay != null && oldDisplay.isRemoving()) {
@@ -4936,6 +4902,12 @@
     }
 
     @Override
+    public SurfaceControl getParentSurfaceControl() {
+        // Tile is a "virtual" parent, so we need to intercept the parent surface here
+        return mTile != null ? mTile.getSurfaceControl() : super.getParentSurfaceControl();
+    }
+
+    @Override
     void removeImmediately() {
         // TODO(task-hierarchy): remove this override when tiles are in hierarchy
         if (mTile != null) {
@@ -4988,6 +4960,10 @@
         if (!matchParentBounds()) {
             final Rect bounds = getRequestedOverrideBounds();
             bounds.dumpDebug(proto, BOUNDS);
+        } else if (getStack().getTile() != null) {
+            // use tile's bounds here for cts.
+            final Rect bounds = getStack().getTile().getRequestedOverrideBounds();
+            bounds.dumpDebug(proto, BOUNDS);
         }
         getOverrideDisplayedBounds().dumpDebug(proto, DISPLAYED_BOUNDS);
         mAdjustedBounds.dumpDebug(proto, ADJUSTED_BOUNDS);
@@ -5007,6 +4983,8 @@
             proto.write(SURFACE_HEIGHT, mSurfaceControl.getHeight());
         }
 
+        proto.write(CREATED_BY_ORGANIZER, this instanceof TaskTile);
+
         proto.end(token);
     }
 }
diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
index a513ef8..70cd01b 100644
--- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
@@ -88,6 +88,7 @@
 import static com.android.server.wm.WindowContainer.POSITION_TOP;
 
 import android.Manifest;
+import android.annotation.Nullable;
 import android.app.Activity;
 import android.app.ActivityManager;
 import android.app.ActivityManagerInternal;
@@ -107,6 +108,7 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.PackageManagerInternal;
 import android.content.pm.ResolveInfo;
 import android.content.pm.UserInfo;
 import android.content.res.Configuration;
@@ -260,7 +262,9 @@
     /** Short cut */
     private WindowManagerService mWindowManager;
 
-     /** Common synchronization logic used to save things to disks. */
+    private AppOpsManager mAppOpsManager;
+
+    /** Common synchronization logic used to save things to disks. */
     PersisterQueue mPersisterQueue;
     LaunchParamsPersister mLaunchParamsPersister;
     private LaunchParamsController mLaunchParamsController;
@@ -752,6 +756,14 @@
                         || (intent.getFlags() & Intent.FLAG_ACTIVITY_MATCH_EXTERNAL) != 0) {
                 modifiedFlags |= PackageManager.MATCH_INSTANT;
             }
+            int privateResolveFlags  = 0;
+            if (intent.isWebIntent()
+                        && (intent.getFlags() & Intent.FLAG_ACTIVITY_REQUIRE_NON_BROWSER) != 0) {
+                privateResolveFlags |= PackageManagerInternal.RESOLVE_NON_BROWSER_ONLY;
+            }
+            if ((intent.getFlags() & Intent.FLAG_ACTIVITY_REQUIRE_DEFAULT) != 0) {
+                privateResolveFlags |= PackageManagerInternal.RESOLVE_NON_RESOLVER_ONLY;
+            }
 
             // In order to allow cross-profile lookup, we clear the calling identity here.
             // Note the binder identity won't affect the result, but filterCallingUid will.
@@ -761,7 +773,8 @@
             final long token = Binder.clearCallingIdentity();
             try {
                 return mService.getPackageManagerInternalLocked().resolveIntent(
-                        intent, resolvedType, modifiedFlags, userId, true, filterCallingUid);
+                        intent, resolvedType, modifiedFlags, privateResolveFlags, userId, true,
+                        filterCallingUid);
             } finally {
                 Binder.restoreCallingIdentity(token);
             }
@@ -1047,8 +1060,8 @@
 
     boolean checkStartAnyActivityPermission(Intent intent, ActivityInfo aInfo, String resultWho,
             int requestCode, int callingPid, int callingUid, String callingPackage,
-            boolean ignoreTargetSecurity, boolean launchingInTask,
-            WindowProcessController callerApp, ActivityRecord resultRecord,
+            @Nullable String callingFeatureId, boolean ignoreTargetSecurity,
+            boolean launchingInTask, WindowProcessController callerApp, ActivityRecord resultRecord,
             ActivityStack resultStack) {
         final boolean isCallerRecents = mService.getRecentTasks() != null
                 && mService.getRecentTasks().isCallerRecents(callingUid);
@@ -1060,10 +1073,10 @@
             // existing task, then also allow the activity to be fully relaunched.
             return true;
         }
-        final int componentRestriction = getComponentRestrictionForCallingPackage(
-                aInfo, callingPackage, callingPid, callingUid, ignoreTargetSecurity);
+        final int componentRestriction = getComponentRestrictionForCallingPackage(aInfo,
+                callingPackage, callingFeatureId, callingPid, callingUid, ignoreTargetSecurity);
         final int actionRestriction = getActionRestrictionForCallingPackage(
-                intent.getAction(), callingPackage, callingPid, callingUid);
+                intent.getAction(), callingPackage, callingFeatureId, callingPid, callingUid);
         if (componentRestriction == ACTIVITY_RESTRICTION_PERMISSION
                 || actionRestriction == ACTIVITY_RESTRICTION_PERMISSION) {
             if (resultRecord != null) {
@@ -1194,8 +1207,16 @@
         }
     }
 
+    private AppOpsManager getAppOpsManager() {
+        if (mAppOpsManager == null) {
+            mAppOpsManager = mService.mContext.getSystemService(AppOpsManager.class);
+        }
+        return mAppOpsManager;
+    }
+
     private int getComponentRestrictionForCallingPackage(ActivityInfo activityInfo,
-            String callingPackage, int callingPid, int callingUid, boolean ignoreTargetSecurity) {
+            String callingPackage, @Nullable String callingFeatureId, int callingPid,
+            int callingUid, boolean ignoreTargetSecurity) {
         if (!ignoreTargetSecurity && mService.checkComponentPermission(activityInfo.permission,
                 callingPid, callingUid, activityInfo.applicationInfo.uid, activityInfo.exported)
                 == PERMISSION_DENIED) {
@@ -1211,9 +1232,8 @@
             return ACTIVITY_RESTRICTION_NONE;
         }
 
-        // TODO moltmann b/136595429: Set featureId from caller
-        if (mService.getAppOpsService().noteOperation(opCode, callingUid,
-                callingPackage, /* featureId */ null, false, "") != AppOpsManager.MODE_ALLOWED) {
+        if (getAppOpsManager().noteOpNoThrow(opCode, callingUid,
+                callingPackage, callingFeatureId, "") != AppOpsManager.MODE_ALLOWED) {
             if (!ignoreTargetSecurity) {
                 return ACTIVITY_RESTRICTION_APPOP;
             }
@@ -1222,8 +1242,8 @@
         return ACTIVITY_RESTRICTION_NONE;
     }
 
-    private int getActionRestrictionForCallingPackage(String action,
-            String callingPackage, int callingPid, int callingUid) {
+    private int getActionRestrictionForCallingPackage(String action, String callingPackage,
+            @Nullable String callingFeatureId, int callingPid, int callingUid) {
         if (action == null) {
             return ACTIVITY_RESTRICTION_NONE;
         }
@@ -1256,9 +1276,8 @@
             return ACTIVITY_RESTRICTION_NONE;
         }
 
-        // TODO moltmann b/136595429: Set featureId from caller
-        if (mService.getAppOpsService().noteOperation(opCode, callingUid,
-                callingPackage, /* featureId */ null, false, "") != AppOpsManager.MODE_ALLOWED) {
+        if (getAppOpsManager().noteOpNoThrow(opCode, callingUid,
+                callingPackage, callingFeatureId, "") != AppOpsManager.MODE_ALLOWED) {
             return ACTIVITY_RESTRICTION_APPOP;
         }
 
@@ -2438,7 +2457,9 @@
                 // split-screen in split-screen.
                 mService.getTaskChangeNotificationController()
                         .notifyActivityDismissingDockedStack();
-                moveTasksToFullscreenStackLocked(dockedStack, actualStack == dockedStack);
+                dockedStack.getDisplay().onSplitScreenModeDismissed();
+                dockedStack.getDisplay().ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS,
+                        true /* notifyClients */);
             }
             return;
         }
@@ -2701,6 +2722,7 @@
             SafeActivityOptions options) {
         Task task = null;
         final String callingPackage;
+        final String callingFeatureId;
         final Intent intent;
         final int userId;
         int activityType = ACTIVITY_TYPE_UNDEFINED;
@@ -2780,11 +2802,12 @@
                 return ActivityManager.START_TASK_TO_FRONT;
             }
             callingPackage = task.mCallingPackage;
+            callingFeatureId = task.mCallingFeatureId;
             intent = task.intent;
             intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
             userId = task.mUserId;
-            return mService.getActivityStartController().startActivityInPackage(
-                    task.mCallingUid, callingPid, callingUid, callingPackage, intent, null, null,
+            return mService.getActivityStartController().startActivityInPackage(task.mCallingUid,
+                    callingPid, callingUid, callingPackage, callingFeatureId, intent, null, null,
                     null, 0, 0, options, userId, task, "startActivityFromRecents",
                     false /* validateIncomingUser */, null /* originatingPendingIntent */,
                     false /* allowBackgroundActivityStart */);
@@ -2798,7 +2821,7 @@
                 final DisplayContent display = task.getStack().getDisplay();
                 final ActivityStack topSecondaryStack =
                         display.getTopStackInWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
-                if (topSecondaryStack.isActivityTypeHome()) {
+                if (topSecondaryStack != null && topSecondaryStack.isActivityTypeHome()) {
                     // If the home activity is the top split-screen secondary stack, then the
                     // primary split-screen stack is in the minimized mode which means it can't
                     // receive input keys, so we should move the focused app to the home app so that
diff --git a/services/core/java/com/android/server/wm/ActivityStartController.java b/services/core/java/com/android/server/wm/ActivityStartController.java
index f35ba9e..881dc81 100644
--- a/services/core/java/com/android/server/wm/ActivityStartController.java
+++ b/services/core/java/com/android/server/wm/ActivityStartController.java
@@ -26,6 +26,7 @@
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
 
+import android.annotation.Nullable;
 import android.app.ActivityOptions;
 import android.app.IApplicationThread;
 import android.content.ComponentName;
@@ -278,10 +279,11 @@
     }
 
     final int startActivityInPackage(int uid, int realCallingPid, int realCallingUid,
-            String callingPackage, Intent intent, String resolvedType, IBinder resultTo,
-            String resultWho, int requestCode, int startFlags, SafeActivityOptions options,
-            int userId, Task inTask, String reason, boolean validateIncomingUser,
-            PendingIntentRecord originatingPendingIntent, boolean allowBackgroundActivityStart) {
+            String callingPackage, @Nullable String callingFeatureId, Intent intent,
+            String resolvedType, IBinder resultTo, String resultWho, int requestCode,
+            int startFlags, SafeActivityOptions options, int userId, Task inTask, String reason,
+            boolean validateIncomingUser, PendingIntentRecord originatingPendingIntent,
+            boolean allowBackgroundActivityStart) {
 
         userId = checkTargetUser(userId, validateIncomingUser, realCallingPid, realCallingUid,
                 reason);
@@ -292,6 +294,7 @@
                 .setRealCallingPid(realCallingPid)
                 .setRealCallingUid(realCallingUid)
                 .setCallingPackage(callingPackage)
+                .setCallingFeatureId(callingFeatureId)
                 .setResolvedType(resolvedType)
                 .setResultTo(resultTo)
                 .setResultWho(resultWho)
@@ -310,19 +313,20 @@
      *
      * @param uid Make a call as if this UID did.
      * @param callingPackage Make a call as if this package did.
+     * @param callingFeatureId Make a call as if this feature in the package did.
      * @param intents Intents to start.
      * @param userId Start the intents on this user.
      * @param validateIncomingUser Set true to skip checking {@code userId} with the calling UID.
      * @param originatingPendingIntent PendingIntentRecord that originated this activity start or
      *        null if not originated by PendingIntent
      */
-    final int startActivitiesInPackage(int uid, String callingPackage, Intent[] intents,
-            String[] resolvedTypes, IBinder resultTo, SafeActivityOptions options, int userId,
-            boolean validateIncomingUser, PendingIntentRecord originatingPendingIntent,
-            boolean allowBackgroundActivityStart) {
+    final int startActivitiesInPackage(int uid, String callingPackage,
+            @Nullable String callingFeatureId, Intent[] intents, String[] resolvedTypes,
+            IBinder resultTo, SafeActivityOptions options, int userId, boolean validateIncomingUser,
+            PendingIntentRecord originatingPendingIntent, boolean allowBackgroundActivityStart) {
         return startActivitiesInPackage(uid, 0 /* realCallingPid */, -1 /* realCallingUid */,
-            callingPackage, intents, resolvedTypes, resultTo, options, userId, validateIncomingUser,
-            originatingPendingIntent, allowBackgroundActivityStart);
+                callingPackage, callingFeatureId, intents, resolvedTypes, resultTo, options, userId,
+                validateIncomingUser, originatingPendingIntent, allowBackgroundActivityStart);
     }
 
     /**
@@ -339,9 +343,9 @@
      *        null if not originated by PendingIntent
      */
     final int startActivitiesInPackage(int uid, int realCallingPid, int realCallingUid,
-            String callingPackage, Intent[] intents, String[] resolvedTypes, IBinder resultTo,
-            SafeActivityOptions options, int userId, boolean validateIncomingUser,
-            PendingIntentRecord originatingPendingIntent,
+            String callingPackage, @Nullable String callingFeatureId, Intent[] intents,
+            String[] resolvedTypes, IBinder resultTo, SafeActivityOptions options, int userId,
+            boolean validateIncomingUser, PendingIntentRecord originatingPendingIntent,
             boolean allowBackgroundActivityStart) {
 
         final String reason = "startActivityInPackage";
@@ -350,14 +354,14 @@
                 Binder.getCallingUid(), reason);
 
         // TODO: Switch to user app stacks here.
-        return startActivities(null, uid, realCallingPid, realCallingUid, callingPackage, intents,
-                resolvedTypes, resultTo, options, userId, reason, originatingPendingIntent,
-                allowBackgroundActivityStart);
+        return startActivities(null, uid, realCallingPid, realCallingUid, callingPackage,
+                callingFeatureId, intents, resolvedTypes, resultTo, options, userId, reason,
+                originatingPendingIntent, allowBackgroundActivityStart);
     }
 
     int startActivities(IApplicationThread caller, int callingUid, int incomingRealCallingPid,
-            int incomingRealCallingUid, String callingPackage, Intent[] intents,
-            String[] resolvedTypes, IBinder resultTo, SafeActivityOptions options,
+            int incomingRealCallingUid, String callingPackage, @Nullable String callingFeatureId,
+            Intent[] intents, String[] resolvedTypes, IBinder resultTo, SafeActivityOptions options,
             int userId, String reason, PendingIntentRecord originatingPendingIntent,
             boolean allowBackgroundActivityStart) {
         if (intents == null) {
@@ -435,6 +439,7 @@
                         .setCallingPid(callingPid)
                         .setCallingUid(callingUid)
                         .setCallingPackage(callingPackage)
+                        .setCallingFeatureId(callingFeatureId)
                         .setRealCallingPid(realCallingPid)
                         .setRealCallingUid(realCallingUid)
                         .setActivityOptions(checkedOptions)
diff --git a/services/core/java/com/android/server/wm/ActivityStartInterceptor.java b/services/core/java/com/android/server/wm/ActivityStartInterceptor.java
index 76aa1d1..1009771 100644
--- a/services/core/java/com/android/server/wm/ActivityStartInterceptor.java
+++ b/services/core/java/com/android/server/wm/ActivityStartInterceptor.java
@@ -34,6 +34,7 @@
 
 import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME;
 
+import android.annotation.Nullable;
 import android.app.ActivityOptions;
 import android.app.KeyguardManager;
 import android.app.admin.DevicePolicyManagerInternal;
@@ -85,6 +86,7 @@
     private int mUserId;
     private int mStartFlags;
     private String mCallingPackage;
+    private @Nullable String mCallingFeatureId;
 
     /*
      * Per-intent states that were load from ActivityStarter and are subject to modifications
@@ -120,19 +122,20 @@
      * method should not be changed during intercept.
      */
     void setStates(int userId, int realCallingPid, int realCallingUid, int startFlags,
-            String callingPackage) {
+            String callingPackage, @Nullable String callingFeatureId) {
         mRealCallingPid = realCallingPid;
         mRealCallingUid = realCallingUid;
         mUserId = userId;
         mStartFlags = startFlags;
         mCallingPackage = callingPackage;
+        mCallingFeatureId = callingFeatureId;
     }
 
     private IntentSender createIntentSenderForOriginalIntent(int callingUid, int flags) {
         Bundle activityOptions = deferCrossProfileAppsAnimationIfNecessary();
         final IIntentSender target = mService.getIntentSenderLocked(
-                INTENT_SENDER_ACTIVITY, mCallingPackage, callingUid, mUserId, null /*token*/,
-                null /*resultCode*/, 0 /*requestCode*/,
+                INTENT_SENDER_ACTIVITY, mCallingPackage, mCallingFeatureId, callingUid, mUserId,
+                null /*token*/, null /*resultCode*/, 0 /*requestCode*/,
                 new Intent[] { mIntent }, new String[] { mResolvedType },
                 flags, activityOptions);
         return new IntentSender(target);
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index c7270f2..2a2ab4b 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -318,6 +318,7 @@
         int callingPid = DEFAULT_CALLING_PID;
         int callingUid = DEFAULT_CALLING_UID;
         String callingPackage;
+        @Nullable String callingFeatureId;
         int realCallingPid = DEFAULT_REAL_CALLING_PID;
         int realCallingUid = DEFAULT_REAL_CALLING_UID;
         int startFlags;
@@ -367,6 +368,7 @@
             callingPid = DEFAULT_CALLING_PID;
             callingUid = DEFAULT_CALLING_UID;
             callingPackage = null;
+            callingFeatureId = null;
             realCallingPid = DEFAULT_REAL_CALLING_PID;
             realCallingUid = DEFAULT_REAL_CALLING_UID;
             startFlags = 0;
@@ -405,6 +407,7 @@
             callingPid = request.callingPid;
             callingUid = request.callingUid;
             callingPackage = request.callingPackage;
+            callingFeatureId = request.callingFeatureId;
             realCallingPid = request.realCallingPid;
             realCallingUid = request.realCallingUid;
             startFlags = request.startFlags;
@@ -693,9 +696,10 @@
         }
 
         final IIntentSender target = mService.getIntentSenderLocked(
-                ActivityManager.INTENT_SENDER_ACTIVITY, "android" /* packageName */, appCallingUid,
-                mRequest.userId, null /* token */, null /* resultWho*/, 0 /* requestCode*/,
-                new Intent[] { mRequest.intent }, new String[] { mRequest.resolvedType },
+                ActivityManager.INTENT_SENDER_ACTIVITY, "android" /* packageName */,
+                null /* featureId */, appCallingUid, mRequest.userId, null /* token */,
+                null /* resultWho*/, 0 /* requestCode*/, new Intent[]{mRequest.intent},
+                new String[]{mRequest.resolvedType},
                 PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT,
                 null /* bOptions */);
 
@@ -807,6 +811,7 @@
         int callingPid = request.callingPid;
         int callingUid = request.callingUid;
         String callingPackage = request.callingPackage;
+        String callingFeatureId = request.callingFeatureId;
         final int realCallingPid = request.realCallingPid;
         final int realCallingUid = request.realCallingUid;
         final int startFlags = request.startFlags;
@@ -882,6 +887,7 @@
                 // we want the final activity to consider it to have been launched by the
                 // previous app activity.
                 callingPackage = sourceRecord.launchedFromPackage;
+                callingFeatureId = sourceRecord.launchedFromFeatureId;
             }
         }
 
@@ -949,8 +955,8 @@
         }
 
         boolean abort = !mSupervisor.checkStartAnyActivityPermission(intent, aInfo, resultWho,
-                requestCode, callingPid, callingUid, callingPackage, request.ignoreTargetSecurity,
-                inTask != null, callerApp, resultRecord, resultStack);
+                requestCode, callingPid, callingUid, callingPackage, callingFeatureId,
+                request.ignoreTargetSecurity, inTask != null, callerApp, resultRecord, resultStack);
         abort |= !mService.mIntentFirewall.checkStartActivity(intent, callingUid,
                 callingPid, resolvedType, aInfo.applicationInfo);
         abort |= !mService.getPermissionPolicyInternal().checkStartActivity(intent, callingUid,
@@ -990,7 +996,8 @@
             }
         }
 
-        mInterceptor.setStates(userId, realCallingPid, realCallingUid, startFlags, callingPackage);
+        mInterceptor.setStates(userId, realCallingPid, realCallingUid, startFlags, callingPackage,
+                callingFeatureId);
         if (mInterceptor.intercept(intent, rInfo, aInfo, resolvedType, inTask, callingPid,
                 callingUid, checkedOptions)) {
             // activity start was intercepted, e.g. because the target user is currently in quiet
@@ -1023,7 +1030,7 @@
             if (mService.getPackageManagerInternalLocked().isPermissionsReviewRequired(
                     aInfo.packageName, userId)) {
                 final IIntentSender target = mService.getIntentSenderLocked(
-                        ActivityManager.INTENT_SENDER_ACTIVITY, callingPackage,
+                        ActivityManager.INTENT_SENDER_ACTIVITY, callingPackage, callingFeatureId,
                         callingUid, userId, null, null, 0, new Intent[]{intent},
                         new String[]{resolvedType}, PendingIntent.FLAG_CANCEL_CURRENT
                                 | PendingIntent.FLAG_ONE_SHOT, null);
@@ -1081,7 +1088,7 @@
         // app [on install success].
         if (rInfo != null && rInfo.auxiliaryInfo != null) {
             intent = createLaunchIntent(rInfo.auxiliaryInfo, request.ephemeralIntent,
-                    callingPackage, verificationBundle, resolvedType, userId);
+                    callingPackage, callingFeatureId, verificationBundle, resolvedType, userId);
             resolvedType = null;
             callingUid = realCallingUid;
             callingPid = realCallingPid;
@@ -1090,9 +1097,10 @@
         }
 
         final ActivityRecord r = new ActivityRecord(mService, callerApp, callingPid, callingUid,
-                callingPackage, intent, resolvedType, aInfo, mService.getGlobalConfiguration(),
-                resultRecord, resultWho, requestCode, request.componentSpecified,
-                voiceSession != null, mSupervisor, checkedOptions, sourceRecord);
+                callingPackage, callingFeatureId, intent, resolvedType, aInfo,
+                mService.getGlobalConfiguration(), resultRecord, resultWho, requestCode,
+                request.componentSpecified, voiceSession != null, mSupervisor, checkedOptions,
+                sourceRecord);
         mLastStartActivityRecord = r;
 
         if (r.appTimeTracker == null && sourceRecord != null) {
@@ -1302,21 +1310,22 @@
      * Creates a launch intent for the given auxiliary resolution data.
      */
     private @NonNull Intent createLaunchIntent(@Nullable AuxiliaryResolveInfo auxiliaryResponse,
-            Intent originalIntent, String callingPackage, Bundle verificationBundle,
-            String resolvedType, int userId) {
+            Intent originalIntent, String callingPackage, @Nullable String callingFeatureId,
+            Bundle verificationBundle, String resolvedType, int userId) {
         if (auxiliaryResponse != null && auxiliaryResponse.needsPhaseTwo) {
             // request phase two resolution
             PackageManagerInternal packageManager = mService.getPackageManagerInternalLocked();
             boolean isRequesterInstantApp = packageManager.isInstantApp(callingPackage, userId);
             packageManager.requestInstantAppResolutionPhaseTwo(
                     auxiliaryResponse, originalIntent, resolvedType, callingPackage,
-                    isRequesterInstantApp, verificationBundle, userId);
+                    callingFeatureId, isRequesterInstantApp, verificationBundle, userId);
         }
         return InstantAppResolver.buildEphemeralInstallerIntent(
                 originalIntent,
                 InstantAppResolver.sanitizeIntent(originalIntent),
                 auxiliaryResponse == null ? null : auxiliaryResponse.failureIntent,
                 callingPackage,
+                callingFeatureId,
                 verificationBundle,
                 resolvedType,
                 userId,
@@ -1365,7 +1374,7 @@
                     break;
                 case WINDOWING_MODE_SPLIT_SCREEN_PRIMARY:
                     final ActivityStack homeStack =
-                            startedActivityStack.getDisplay().getRootHomeTask();
+                            startedActivityStack.getDisplay().getOrCreateRootHomeTask();
                     if (homeStack != null && homeStack.shouldBeVisible(null /* starting */)) {
                         mService.mWindowManager.showRecentApps();
                     }
@@ -1804,12 +1813,12 @@
      */
     private int deliverToCurrentTopIfNeeded(ActivityStack topStack) {
         final ActivityRecord top = topStack.topRunningNonDelayedActivityLocked(mNotTop);
-        final boolean dontStart = top != null && mStartActivity.resultTo == null
+        final boolean dontStart = top != null
                 && top.mActivityComponent.equals(mStartActivity.mActivityComponent)
                 && top.mUserId == mStartActivity.mUserId
                 && top.attachedToProcess()
                 && ((mLaunchFlags & FLAG_ACTIVITY_SINGLE_TOP) != 0
-                || isLaunchModeOneOf(LAUNCH_SINGLE_TOP, LAUNCH_SINGLE_TASK))
+                    || isLaunchModeOneOf(LAUNCH_SINGLE_TOP, LAUNCH_SINGLE_TASK))
                 // This allows home activity to automatically launch on secondary display when
                 // display added, if home was the top activity on default display, instead of
                 // sending new intent to the home activity on default display.
@@ -2040,8 +2049,6 @@
                 && !isLaunchModeOneOf(LAUNCH_SINGLE_TASK, LAUNCH_SINGLE_INSTANCE)
                 && (mLaunchFlags & FLAG_ACTIVITY_NEW_DOCUMENT) != 0;
 
-        sendNewTaskResultRequestIfNeeded();
-
         if ((mLaunchFlags & FLAG_ACTIVITY_NEW_DOCUMENT) != 0 && r.resultTo == null) {
             mLaunchFlags |= FLAG_ACTIVITY_NEW_TASK;
         }
@@ -2223,6 +2230,8 @@
                 mLaunchFlags |= FLAG_ACTIVITY_NEW_TASK;
             }
         }
+
+        sendNewTaskResultRequestIfNeeded();
     }
 
     private void computeSourceStack() {
@@ -2575,6 +2584,11 @@
         return this;
     }
 
+    ActivityStarter setCallingFeatureId(String callingFeatureId) {
+        mRequest.callingFeatureId = callingFeatureId;
+        return this;
+    }
+
     /**
      * Sets the pid of the caller who requested to launch the activity.
      *
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
index 25f6d6f..6522294 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
@@ -182,14 +182,15 @@
     public abstract void notifySingleTaskDisplayDrawn(int displayId);
 
     /**
-     * Start activity {@code intents} as if {@code packageName} on user {@code userId} did it.
+     * Start activity {@code intents} as if {@code packageName/featureId} on user {@code userId} did
+     * it.
      *
      * - DO NOT call it with the calling UID cleared.
      * - All the necessary caller permission checks must be done at callsites.
      *
      * @return error codes used by {@link IActivityManager#startActivity} and its siblings.
      */
-    public abstract int startActivitiesAsPackage(String packageName,
+    public abstract int startActivitiesAsPackage(String packageName, String featureId,
             int userId, Intent[] intents, Bundle bOptions);
 
     /**
@@ -199,6 +200,7 @@
      * @param realCallingPid PID of the real caller.
      * @param realCallingUid UID of the real caller.
      * @param callingPackage Make a call as if this package did.
+     * @param callingFeatureId Make a call as if this feature in the package did.
      * @param intents Intents to start.
      * @param userId Start the intents on this user.
      * @param validateIncomingUser Set true to skip checking {@code userId} with the calling UID.
@@ -208,16 +210,17 @@
      *        from originatingPendingIntent
      */
     public abstract int startActivitiesInPackage(int uid, int realCallingPid, int realCallingUid,
-            String callingPackage, Intent[] intents, String[] resolvedTypes, IBinder resultTo,
-            SafeActivityOptions options, int userId, boolean validateIncomingUser,
-            PendingIntentRecord originatingPendingIntent,
+            String callingPackage, @Nullable String callingFeatureId, Intent[] intents,
+            String[] resolvedTypes, IBinder resultTo, SafeActivityOptions options, int userId,
+            boolean validateIncomingUser, PendingIntentRecord originatingPendingIntent,
             boolean allowBackgroundActivityStart);
 
     public abstract int startActivityInPackage(int uid, int realCallingPid, int realCallingUid,
-            String callingPackage, Intent intent, String resolvedType, IBinder resultTo,
-            String resultWho, int requestCode, int startFlags, SafeActivityOptions options,
-            int userId, Task inTask, String reason, boolean validateIncomingUser,
-            PendingIntentRecord originatingPendingIntent, boolean allowBackgroundActivityStart);
+            String callingPackage, @Nullable String callingFeaturId, Intent intent,
+            String resolvedType, IBinder resultTo, String resultWho, int requestCode,
+            int startFlags, SafeActivityOptions options, int userId, Task inTask, String reason,
+            boolean validateIncomingUser, PendingIntentRecord originatingPendingIntent,
+            boolean allowBackgroundActivityStart);
 
     /**
      * Start activity {@code intent} without calling user-id check.
@@ -228,7 +231,8 @@
      * @return error codes used by {@link IActivityManager#startActivity} and its siblings.
      */
     public abstract int startActivityAsUser(IApplicationThread caller, String callingPackage,
-            Intent intent, @Nullable Bundle options, int userId);
+            @Nullable String callingFeatureId, Intent intent, @Nullable IBinder resultTo,
+            int startFlags, @Nullable Bundle options, int userId);
 
     /**
      * Called when Keyguard flags might have changed.
@@ -388,7 +392,7 @@
     public abstract ActivityTokens getTopActivityForTask(int taskId);
 
     public abstract IIntentSender getIntentSender(int type, String packageName,
-            int callingUid, int userId, IBinder token, String resultWho,
+            @Nullable String featureId, int callingUid, int userId, IBinder token, String resultWho,
             int requestCode, Intent[] intents, String[] resolvedTypes, int flags,
             Bundle bOptions);
 
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 5f3e3a3..882d5c7 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -37,7 +37,6 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
 import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
@@ -229,12 +228,12 @@
 import android.view.IRecentsAnimationRunner;
 import android.view.RemoteAnimationAdapter;
 import android.view.RemoteAnimationDefinition;
+import android.view.WindowContainerTransaction;
 import android.view.WindowManager;
 
 import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.AssistUtils;
-import com.android.internal.app.IAppOpsService;
 import com.android.internal.app.IVoiceInteractor;
 import com.android.internal.app.ProcessMap;
 import com.android.internal.logging.MetricsLogger;
@@ -264,7 +263,6 @@
 import com.android.server.am.PendingIntentController;
 import com.android.server.am.PendingIntentRecord;
 import com.android.server.am.UserState;
-import com.android.server.appop.AppOpsService;
 import com.android.server.firewall.IntentFirewall;
 import com.android.server.inputmethod.InputMethodSystemProperty;
 import com.android.server.pm.UserManagerService;
@@ -378,7 +376,7 @@
     RootWindowContainer mRootWindowContainer;
     WindowManagerService mWindowManager;
     private UserManagerService mUserManager;
-    private AppOpsService mAppOpsService;
+    private AppOpsManager mAppOpsManager;
     /** All active uids in the system. */
     private final MirrorActiveUids mActiveUids = new MirrorActiveUids();
     private final SparseArray<String> mPendingTempWhitelist = new SparseArray<>();
@@ -891,12 +889,11 @@
         return mUserManager;
     }
 
-    AppOpsService getAppOpsService() {
-        if (mAppOpsService == null) {
-            IBinder b = ServiceManager.getService(Context.APP_OPS_SERVICE);
-            mAppOpsService = (AppOpsService) IAppOpsService.Stub.asInterface(b);
+    AppOpsManager getAppOpsManager() {
+        if (mAppOpsManager == null) {
+            mAppOpsManager = mContext.getSystemService(AppOpsManager.class);
         }
-        return mAppOpsService;
+        return mAppOpsManager;
     }
 
     boolean hasUserRestriction(String restriction, int userId) {
@@ -904,8 +901,8 @@
     }
 
     boolean hasSystemAlertWindowPermission(int callingUid, int callingPid, String callingPackage) {
-        final int mode = getAppOpsService().noteOperation(AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
-                callingUid, callingPackage, /* featureId */ null, false, "");
+        final int mode = getAppOpsManager().noteOpNoThrow(AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
+                callingUid, callingPackage, /* featureId */ null, "");
         if (mode == AppOpsManager.MODE_DEFAULT) {
             return checkPermission(Manifest.permission.SYSTEM_ALERT_WINDOW, callingPid, callingUid)
                     == PERMISSION_GRANTED;
@@ -1025,41 +1022,43 @@
 
     @Override
     public final int startActivity(IApplicationThread caller, String callingPackage,
-            Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
-            int startFlags, ProfilerInfo profilerInfo, Bundle bOptions) {
-        return startActivityAsUser(caller, callingPackage, intent, resolvedType, resultTo,
-                resultWho, requestCode, startFlags, profilerInfo, bOptions,
+            String callingFeatureId, Intent intent, String resolvedType, IBinder resultTo,
+            String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo,
+            Bundle bOptions) {
+        return startActivityAsUser(caller, callingPackage, callingFeatureId, intent, resolvedType,
+                resultTo, resultWho, requestCode, startFlags, profilerInfo, bOptions,
                 UserHandle.getCallingUserId());
     }
 
     @Override
     public final int startActivities(IApplicationThread caller, String callingPackage,
-            Intent[] intents, String[] resolvedTypes, IBinder resultTo, Bundle bOptions,
-            int userId) {
+            String callingFeatureId, Intent[] intents, String[] resolvedTypes, IBinder resultTo,
+            Bundle bOptions, int userId) {
         assertPackageMatchesCallingUid(callingPackage);
         final String reason = "startActivities";
         enforceNotIsolatedCaller(reason);
         userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, reason);
         // TODO: Switch to user app stacks here.
         return getActivityStartController().startActivities(caller, -1, 0, -1, callingPackage,
-                intents, resolvedTypes, resultTo, SafeActivityOptions.fromBundle(bOptions), userId,
-                reason, null /* originatingPendingIntent */,
-                false /* allowBackgroundActivityStart */);
+                callingFeatureId, intents, resolvedTypes, resultTo,
+                SafeActivityOptions.fromBundle(bOptions), userId, reason,
+                null /* originatingPendingIntent */, false /* allowBackgroundActivityStart */);
     }
 
     @Override
     public int startActivityAsUser(IApplicationThread caller, String callingPackage,
-            Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
-            int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId) {
-        return startActivityAsUser(caller, callingPackage, intent, resolvedType, resultTo,
-                resultWho, requestCode, startFlags, profilerInfo, bOptions, userId,
+            String callingFeatureId, Intent intent, String resolvedType, IBinder resultTo,
+            String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo,
+            Bundle bOptions, int userId) {
+        return startActivityAsUser(caller, callingPackage, callingFeatureId, intent, resolvedType,
+                resultTo, resultWho, requestCode, startFlags, profilerInfo, bOptions, userId,
                 true /*validateIncomingUser*/);
     }
 
     private int startActivityAsUser(IApplicationThread caller, String callingPackage,
-            Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
-            int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId,
-            boolean validateIncomingUser) {
+            @Nullable String callingFeatureId, Intent intent, String resolvedType,
+            IBinder resultTo, String resultWho, int requestCode, int startFlags,
+            ProfilerInfo profilerInfo, Bundle bOptions, int userId, boolean validateIncomingUser) {
         assertPackageMatchesCallingUid(callingPackage);
         enforceNotIsolatedCaller("startActivityAsUser");
 
@@ -1070,6 +1069,7 @@
         return getActivityStartController().obtainStarter(intent, "startActivityAsUser")
                 .setCaller(caller)
                 .setCallingPackage(callingPackage)
+                .setCallingFeatureId(callingFeatureId)
                 .setResolvedType(resolvedType)
                 .setResultTo(resultTo)
                 .setResultWho(resultWho)
@@ -1215,6 +1215,7 @@
                     .setCallingPid(-1)
                     .setCallingUid(r.launchedFromUid)
                     .setCallingPackage(r.launchedFromPackage)
+                    .setCallingFeatureId(r.launchedFromFeatureId)
                     .setRealCallingPid(-1)
                     .setRealCallingUid(r.launchedFromUid)
                     .setActivityOptions(options)
@@ -1231,8 +1232,9 @@
 
     @Override
     public final WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage,
-            Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
-            int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId) {
+            String callingFeatureId, Intent intent, String resolvedType, IBinder resultTo,
+            String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo,
+            Bundle bOptions, int userId) {
         assertPackageMatchesCallingUid(callingPackage);
         final WaitResult res = new WaitResult();
         enforceNotIsolatedCaller("startActivityAndWait");
@@ -1242,6 +1244,7 @@
         getActivityStartController().obtainStarter(intent, "startActivityAndWait")
                 .setCaller(caller)
                 .setCallingPackage(callingPackage)
+                .setCallingFeatureId(callingFeatureId)
                 .setResolvedType(resolvedType)
                 .setResultTo(resultTo)
                 .setResultWho(resultWho)
@@ -1257,8 +1260,9 @@
 
     @Override
     public final int startActivityWithConfig(IApplicationThread caller, String callingPackage,
-            Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
-            int startFlags, Configuration config, Bundle bOptions, int userId) {
+            String callingFeatureId, Intent intent, String resolvedType, IBinder resultTo,
+            String resultWho, int requestCode, int startFlags, Configuration config,
+            Bundle bOptions, int userId) {
         assertPackageMatchesCallingUid(callingPackage);
         enforceNotIsolatedCaller("startActivityWithConfig");
         userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId,
@@ -1267,6 +1271,7 @@
         return getActivityStartController().obtainStarter(intent, "startActivityWithConfig")
                 .setCaller(caller)
                 .setCallingPackage(callingPackage)
+                .setCallingFeatureId(callingFeatureId)
                 .setResolvedType(resolvedType)
                 .setResultTo(resultTo)
                 .setResultWho(resultWho)
@@ -1317,6 +1322,7 @@
         final ActivityRecord sourceRecord;
         final int targetUid;
         final String targetPackage;
+        final String targetFeatureId;
         final boolean isResolver;
         synchronized (mGlobalLock) {
             if (resultTo == null) {
@@ -1384,6 +1390,7 @@
             }
             targetUid = sourceRecord.launchedFromUid;
             targetPackage = sourceRecord.launchedFromPackage;
+            targetFeatureId = sourceRecord.launchedFromFeatureId;
             isResolver = sourceRecord.isResolverOrChildActivity();
         }
 
@@ -1396,6 +1403,7 @@
             return getActivityStartController().obtainStarter(intent, "startActivityAsCaller")
                     .setCallingUid(targetUid)
                     .setCallingPackage(targetPackage)
+                    .setCallingFeatureId(targetFeatureId)
                     .setResolvedType(resolvedType)
                     .setResultTo(resultTo)
                     .setResultWho(resultWho)
@@ -1431,8 +1439,8 @@
     }
 
     @Override
-    public int startVoiceActivity(String callingPackage, int callingPid, int callingUid,
-            Intent intent, String resolvedType, IVoiceInteractionSession session,
+    public int startVoiceActivity(String callingPackage, String callingFeatureId, int callingPid,
+            int callingUid, Intent intent, String resolvedType, IVoiceInteractionSession session,
             IVoiceInteractor interactor, int startFlags, ProfilerInfo profilerInfo,
             Bundle bOptions, int userId) {
         assertPackageMatchesCallingUid(callingPackage);
@@ -1445,6 +1453,7 @@
         return getActivityStartController().obtainStarter(intent, "startVoiceActivity")
                 .setCallingUid(callingUid)
                 .setCallingPackage(callingPackage)
+                .setCallingFeatureId(callingFeatureId)
                 .setResolvedType(resolvedType)
                 .setVoiceSession(session)
                 .setVoiceInteractor(interactor)
@@ -1457,8 +1466,9 @@
     }
 
     @Override
-    public int startAssistantActivity(String callingPackage, int callingPid, int callingUid,
-            Intent intent, String resolvedType, Bundle bOptions, int userId) {
+    public int startAssistantActivity(String callingPackage, @NonNull String callingFeatureId,
+            int callingPid, int callingUid, Intent intent, String resolvedType, Bundle bOptions,
+            int userId) {
         assertPackageMatchesCallingUid(callingPackage);
         mAmInternal.enforceCallingPermission(BIND_VOICE_INTERACTION, "startAssistantActivity()");
         userId = handleIncomingUser(callingPid, callingUid, userId, "startAssistantActivity");
@@ -1466,6 +1476,7 @@
         return getActivityStartController().obtainStarter(intent, "startAssistantActivity")
                 .setCallingUid(callingUid)
                 .setCallingPackage(callingPackage)
+                .setCallingFeatureId(callingFeatureId)
                 .setResolvedType(resolvedType)
                 .setActivityOptions(bOptions)
                 .setUserId(userId)
@@ -1489,13 +1500,14 @@
         try {
             synchronized (mGlobalLock) {
                 final ComponentName recentsComponent = mRecentTasks.getRecentsComponent();
+                final String recentsFeatureId = mRecentTasks.getRecentsComponentFeatureId();
                 final int recentsUid = mRecentTasks.getRecentsComponentUid();
                 final WindowProcessController caller = getProcessController(callingPid, callingUid);
 
                 // Start a new recents animation
                 final RecentsAnimation anim = new RecentsAnimation(this, mStackSupervisor,
                         getActivityStartController(), mWindowManager, intent, recentsComponent,
-                        recentsUid, caller);
+                        recentsFeatureId, recentsUid, caller);
                 if (recentsAnimationRunner == null) {
                     anim.preloadRecentsActivity();
                 } else {
@@ -2257,6 +2269,9 @@
         synchronized (mGlobalLock) {
             final long ident = Binder.clearCallingIdentity();
             try {
+                if (WindowConfiguration.isSplitScreenWindowingMode(windowingMode)) {
+                    return setTaskWindowingModeSplitScreen(taskId, windowingMode, toTop);
+                }
                 final Task task = mRootWindowContainer.anyTaskForId(taskId,
                         MATCH_TASK_IN_STACKS_ONLY);
                 if (task == null) {
@@ -2274,10 +2289,16 @@
                 }
 
                 final ActivityStack stack = task.getStack();
+                // Convert some windowing-mode changes into root-task reparents for split-screen.
+                if (stack.getTile() != null) {
+                    stack.getDisplay().onSplitScreenModeDismissed();
+                }
                 if (toTop) {
                     stack.moveToFront("setTaskWindowingMode", task);
                 }
                 stack.setWindowingMode(windowingMode);
+                stack.getDisplay().ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS,
+                        true /* notifyClients */);
                 return true;
             } finally {
                 Binder.restoreCallingIdentity(ident);
@@ -2707,36 +2728,8 @@
         synchronized (mGlobalLock) {
             final long ident = Binder.clearCallingIdentity();
             try {
-                if (isInLockTaskMode()) {
-                    Slog.w(TAG, "setTaskWindowingModeSplitScreenPrimary: Is in lock task mode="
-                            + getLockTaskModeState());
-                    return false;
-                }
-
-                final Task task = mRootWindowContainer.anyTaskForId(taskId,
-                        MATCH_TASK_IN_STACKS_ONLY);
-                if (task == null) {
-                    Slog.w(TAG, "setTaskWindowingModeSplitScreenPrimary: No task for id=" + taskId);
-                    return false;
-                }
-                if (!task.isActivityTypeStandardOrUndefined()) {
-                    throw new IllegalArgumentException("setTaskWindowingMode: Attempt to move"
-                            + " non-standard task " + taskId + " to split-screen windowing mode");
-                }
-
-                if (DEBUG_STACK) Slog.d(TAG_STACK,
-                        "setTaskWindowingModeSplitScreenPrimary: moving task=" + taskId
-                                + " to createMode=" + createMode + " toTop=" + toTop);
-                mWindowManager.setDockedStackCreateStateLocked(createMode, initialBounds);
-                final int windowingMode = task.getWindowingMode();
-                final ActivityStack stack = task.getStack();
-                if (toTop) {
-                    stack.moveToFront("setTaskWindowingModeSplitScreenPrimary", task);
-                }
-                stack.setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, animate, showRecents,
-                        false /* enteringSplitScreenMode */, false /* deferEnsuringVisibility */,
-                        false /* creating */);
-                return windowingMode != task.getWindowingMode();
+                return setTaskWindowingModeSplitScreen(taskId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY,
+                        toTop);
             } finally {
                 Binder.restoreCallingIdentity(ident);
             }
@@ -2744,6 +2737,49 @@
     }
 
     /**
+     * Moves the specified task into a split-screen tile.
+     */
+    private boolean setTaskWindowingModeSplitScreen(int taskId, int windowingMode, boolean toTop) {
+        if (!WindowConfiguration.isSplitScreenWindowingMode(windowingMode)) {
+            throw new IllegalArgumentException("Calling setTaskWindowingModeSplitScreen with non"
+                    + "split-screen mode: " + windowingMode);
+        }
+        if (isInLockTaskMode()) {
+            Slog.w(TAG, "setTaskWindowingModeSplitScreen: Is in lock task mode="
+                    + getLockTaskModeState());
+            return false;
+        }
+
+        final Task task = mRootWindowContainer.anyTaskForId(taskId,
+                MATCH_TASK_IN_STACKS_ONLY);
+        if (task == null) {
+            Slog.w(TAG, "setTaskWindowingModeSplitScreenPrimary: No task for id=" + taskId);
+            return false;
+        }
+        if (!task.isActivityTypeStandardOrUndefined()) {
+            throw new IllegalArgumentException("setTaskWindowingMode: Attempt to move"
+                    + " non-standard task " + taskId + " to split-screen windowing mode");
+        }
+
+        final int prevMode = task.getWindowingMode();
+        final ActivityStack stack = task.getStack();
+        TaskTile tile = null;
+        for (int i = stack.getDisplay().getStackCount() - 1; i >= 0; --i) {
+            tile = stack.getDisplay().getStackAt(i).asTile();
+            if (tile != null && tile.getWindowingMode() == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
+                break;
+            }
+        }
+        if (tile == null) {
+            throw new IllegalStateException("Can't enter split without associated tile");
+        }
+        WindowContainerTransaction wct = new WindowContainerTransaction();
+        wct.reparent(stack.mRemoteToken, tile.mRemoteToken, toTop);
+        mTaskOrganizerController.applyContainerTransaction(wct, null);
+        return prevMode != task.getWindowingMode();
+    }
+
+    /**
      * Removes stacks in the input windowing modes from the system if they are of activity type
      * ACTIVITY_TYPE_STANDARD or ACTIVITY_TYPE_UNDEFINED
      */
@@ -2795,6 +2831,7 @@
         }
     }
 
+    // TODO(148895075): deprecate and replace with task equivalents
     @Override
     public List<ActivityManager.StackInfo> getAllStackInfos() {
         enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getAllStackInfos()");
@@ -2821,6 +2858,7 @@
         }
     }
 
+    // TODO(148895075): deprecate and replace with task equivalents
     @Override
     public List<ActivityManager.StackInfo> getAllStackInfosOnDisplay(int displayId) {
         enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getAllStackInfos()");
@@ -3949,46 +3987,6 @@
     }
 
     /**
-     * Dismisses split-screen multi-window mode.
-     * @param toTop If true the current primary split-screen stack will be placed or left on top.
-     */
-    @Override
-    public void dismissSplitScreenMode(boolean toTop) {
-        enforceCallerIsRecentsOrHasPermission(
-                MANAGE_ACTIVITY_STACKS, "dismissSplitScreenMode()");
-        final long ident = Binder.clearCallingIdentity();
-        try {
-            synchronized (mGlobalLock) {
-                final ActivityStack stack =
-                        mRootWindowContainer.getDefaultDisplay().getRootSplitScreenPrimaryTask();
-                if (stack == null) {
-                    Slog.w(TAG, "dismissSplitScreenMode: primary split-screen stack not found.");
-                    return;
-                }
-
-                if (toTop) {
-                    // Caller wants the current split-screen primary stack to be the top stack after
-                    // it goes fullscreen, so move it to the front.
-                    stack.moveToFront("dismissSplitScreenMode");
-                } else {
-                    // In this case the current split-screen primary stack shouldn't be the top
-                    // stack after it goes fullscreen, so we move the focus to the top-most
-                    // split-screen secondary stack next to it.
-                    final ActivityStack otherStack = stack.getDisplay().getTopStackInWindowingMode(
-                            WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
-                    if (otherStack != null) {
-                        otherStack.moveToFront("dismissSplitScreenMode_other");
-                    }
-                }
-
-                stack.setWindowingMode(WINDOWING_MODE_UNDEFINED);
-            }
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-    }
-
-    /**
      * Dismisses Pip
      * @param animate True if the dismissal should be animated.
      * @param animationDuration The duration of the resize animation in milliseconds or -1 if the
@@ -4153,7 +4151,7 @@
                             return;
                         }
                         // Only update the saved args from the args that are set
-                        r.pictureInPictureArgs.copyOnlySet(params);
+                        r.setPictureInPictureParams(params);
                         final float aspectRatio = r.pictureInPictureArgs.getAspectRatio();
                         final List<RemoteAction> actions = r.pictureInPictureArgs.getActions();
                         // Adjust the source bounds by the insets for the transition down
@@ -4201,7 +4199,7 @@
                         "setPictureInPictureParams", token, params);
 
                 // Only update the saved args from the args that are set
-                r.pictureInPictureArgs.copyOnlySet(params);
+                r.setPictureInPictureParams(params);
                 if (r.inPinnedWindowingMode()) {
                     // If the activity is already in picture-in-picture, update the pinned stack now
                     // if it is not already expanding to fullscreen. Otherwise, the arguments will
@@ -5554,11 +5552,20 @@
         if (mLastResumedActivity != null && r.mUserId != mLastResumedActivity.mUserId) {
             mAmInternal.sendForegroundProfileChanged(r.mUserId);
         }
+        final Task prevTask = mLastResumedActivity != null ? mLastResumedActivity.getTask() : null;
+
         updateResumedAppTrace(r);
         mLastResumedActivity = r;
 
         r.getDisplay().setFocusedApp(r, true);
 
+        if (prevTask == null || task != prevTask) {
+            if (prevTask != null) {
+                mTaskChangeNotificationController.notifyTaskFocusChanged(prevTask.mTaskId, false);
+            }
+            mTaskChangeNotificationController.notifyTaskFocusChanged(task.mTaskId, true);
+        }
+
         applyUpdateLockStateLocked(r);
         applyUpdateVrModeLocked(r);
 
@@ -5773,9 +5780,9 @@
 
     }
 
-    IIntentSender getIntentSenderLocked(int type, String packageName, int callingUid, int userId,
-            IBinder token, String resultWho, int requestCode, Intent[] intents,
-            String[] resolvedTypes, int flags, Bundle bOptions) {
+    IIntentSender getIntentSenderLocked(int type, String packageName, String featureId,
+            int callingUid, int userId, IBinder token, String resultWho, int requestCode,
+            Intent[] intents, String[] resolvedTypes, int flags, Bundle bOptions) {
 
         ActivityRecord activity = null;
         if (type == ActivityManager.INTENT_SENDER_ACTIVITY_RESULT) {
@@ -5791,8 +5798,8 @@
         }
 
         final PendingIntentRecord rec = mPendingIntentController.getIntentSender(type, packageName,
-                callingUid, userId, token, resultWho, requestCode, intents, resolvedTypes, flags,
-                bOptions);
+                featureId, callingUid, userId, token, resultWho, requestCode, intents,
+                resolvedTypes, flags, bOptions);
         final boolean noCreate = (flags & PendingIntent.FLAG_NO_CREATE) != 0;
         if (noCreate) {
             return rec;
@@ -6180,8 +6187,8 @@
         }
 
         @Override
-        public int startActivitiesAsPackage(String packageName, int userId, Intent[] intents,
-                Bundle bOptions) {
+        public int startActivitiesAsPackage(String packageName, @Nullable String featureId,
+                int userId, Intent[] intents, Bundle bOptions) {
             Objects.requireNonNull(intents, "intents");
             final String[] resolvedTypes = new String[intents.length];
 
@@ -6206,7 +6213,7 @@
             }
 
             return getActivityStartController().startActivitiesInPackage(
-                    packageUid, packageName,
+                    packageUid, packageName, featureId,
                     intents, resolvedTypes, null /* resultTo */,
                     SafeActivityOptions.fromBundle(bOptions), userId,
                     false /* validateIncomingUser */, null /* originatingPendingIntent */,
@@ -6215,43 +6222,44 @@
 
         @Override
         public int startActivitiesInPackage(int uid, int realCallingPid, int realCallingUid,
-                String callingPackage, Intent[] intents, String[] resolvedTypes, IBinder resultTo,
-                SafeActivityOptions options, int userId, boolean validateIncomingUser,
-                PendingIntentRecord originatingPendingIntent,
+                String callingPackage, @Nullable String callingFeatureId, Intent[] intents,
+                String[] resolvedTypes, IBinder resultTo, SafeActivityOptions options, int userId,
+                boolean validateIncomingUser, PendingIntentRecord originatingPendingIntent,
                 boolean allowBackgroundActivityStart) {
             assertPackageMatchesCallingUid(callingPackage);
             synchronized (mGlobalLock) {
                 return getActivityStartController().startActivitiesInPackage(uid, realCallingPid,
-                        realCallingUid, callingPackage, intents, resolvedTypes, resultTo, options,
-                        userId, validateIncomingUser, originatingPendingIntent,
+                        realCallingUid, callingPackage, callingFeatureId, intents, resolvedTypes,
+                        resultTo, options, userId, validateIncomingUser, originatingPendingIntent,
                         allowBackgroundActivityStart);
             }
         }
 
         @Override
         public int startActivityInPackage(int uid, int realCallingPid, int realCallingUid,
-                String callingPackage, Intent intent, String resolvedType, IBinder resultTo,
-                String resultWho, int requestCode, int startFlags, SafeActivityOptions options,
-                int userId, Task inTask, String reason, boolean validateIncomingUser,
-                PendingIntentRecord originatingPendingIntent,
+                String callingPackage, @Nullable String callingFeatureId, Intent intent,
+                String resolvedType, IBinder resultTo, String resultWho, int requestCode,
+                int startFlags, SafeActivityOptions options, int userId, Task inTask, String reason,
+                boolean validateIncomingUser, PendingIntentRecord originatingPendingIntent,
                 boolean allowBackgroundActivityStart) {
             assertPackageMatchesCallingUid(callingPackage);
             synchronized (mGlobalLock) {
                 return getActivityStartController().startActivityInPackage(uid, realCallingPid,
-                        realCallingUid, callingPackage, intent, resolvedType, resultTo, resultWho,
-                        requestCode, startFlags, options, userId, inTask, reason,
-                        validateIncomingUser, originatingPendingIntent,
+                        realCallingUid, callingPackage, callingFeatureId, intent, resolvedType,
+                        resultTo, resultWho, requestCode, startFlags, options, userId, inTask,
+                        reason, validateIncomingUser, originatingPendingIntent,
                         allowBackgroundActivityStart);
             }
         }
 
         @Override
-        public int startActivityAsUser(IApplicationThread caller, String callerPacakge,
-                Intent intent, Bundle options, int userId) {
+        public int startActivityAsUser(IApplicationThread caller, String callerPackage,
+                @Nullable String callerFeatureId, Intent intent, @Nullable IBinder resultTo,
+                int startFlags, Bundle options, int userId) {
             return ActivityTaskManagerService.this.startActivityAsUser(
-                    caller, callerPacakge, intent,
+                    caller, callerPackage, callerFeatureId, intent,
                     intent.resolveTypeIfNeeded(mContext.getContentResolver()),
-                    null, null, 0, Intent.FLAG_ACTIVITY_NEW_TASK, null, options, userId,
+                    resultTo, null, 0, startFlags, null, options, userId,
                     false /*validateIncomingUser*/);
         }
 
@@ -6685,12 +6693,12 @@
 
         @Override
         public IIntentSender getIntentSender(int type, String packageName,
-                int callingUid, int userId, IBinder token, String resultWho,
-                int requestCode, Intent[] intents, String[] resolvedTypes, int flags,
-                Bundle bOptions) {
+                @Nullable String featureId, int callingUid, int userId, IBinder token,
+                String resultWho, int requestCode, Intent[] intents, String[] resolvedTypes,
+                int flags, Bundle bOptions) {
             synchronized (mGlobalLock) {
-                return getIntentSenderLocked(type, packageName, callingUid, userId, token,
-                        resultWho, requestCode, intents, resolvedTypes, flags, bOptions);
+                return getIntentSenderLocked(type, packageName, featureId, callingUid, userId,
+                        token, resultWho, requestCode, intents, resolvedTypes, flags, bOptions);
             }
         }
 
diff --git a/services/core/java/com/android/server/wm/AppTaskImpl.java b/services/core/java/com/android/server/wm/AppTaskImpl.java
index 16a7564..8fa8119 100644
--- a/services/core/java/com/android/server/wm/AppTaskImpl.java
+++ b/services/core/java/com/android/server/wm/AppTaskImpl.java
@@ -125,7 +125,7 @@
     }
 
     @Override
-    public int startActivity(IBinder whoThread, String callingPackage,
+    public int startActivity(IBinder whoThread, String callingPackage, String callingFeatureId,
             Intent intent, String resolvedType, Bundle bOptions) {
         checkCaller();
         mService.assertPackageMatchesCallingUid(callingPackage);
@@ -148,6 +148,7 @@
         return mService.getActivityStartController().obtainStarter(intent, "AppTaskImpl")
                 .setCaller(appThread)
                 .setCallingPackage(callingPackage)
+                .setCallingFeatureId(callingFeatureId)
                 .setResolvedType(resolvedType)
                 .setActivityOptions(bOptions)
                 .setUserId(callingUser)
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index 014cb76..8cf0881 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -528,6 +528,12 @@
         }
     }
 
+    private void notifyAppTransitionTimeoutLocked() {
+        for (int i = 0; i < mListeners.size(); i++) {
+            mListeners.get(i).onAppTransitionTimeoutLocked();
+        }
+    }
+
     private int notifyAppTransitionStartingLocked(int transit, long duration,
             long statusBarAnimationStartTime, long statusBarAnimationDuration) {
         int redoLayout = 0;
@@ -2300,6 +2306,7 @@
             if (dc == null) {
                 return;
             }
+            notifyAppTransitionTimeoutLocked();
             if (isTransitionSet() || !dc.mOpeningApps.isEmpty() || !dc.mClosingApps.isEmpty()
                     || !dc.mChangingApps.isEmpty()) {
                 ProtoLog.v(WM_DEBUG_APP_TRANSITIONS,
diff --git a/services/core/java/com/android/server/wm/AppTransitionController.java b/services/core/java/com/android/server/wm/AppTransitionController.java
index f72020e..3f4e791 100644
--- a/services/core/java/com/android/server/wm/AppTransitionController.java
+++ b/services/core/java/com/android/server/wm/AppTransitionController.java
@@ -713,7 +713,11 @@
 
         final WindowState wallpaperTarget = mWallpaperControllerLocked.getWallpaperTarget();
         final boolean showWallpaper = wallpaperTarget != null
-                && (wallpaperTarget.mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0;
+                && ((wallpaperTarget.mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0
+                // Update task open transition to wallpaper transition when wallpaper is visible.
+                // (i.e.launching app info activity from recent tasks)
+                || ((transit == TRANSIT_TASK_OPEN || transit == TRANSIT_TASK_TO_FRONT)
+                && mWallpaperControllerLocked.isWallpaperVisible()));
         // If wallpaper is animating or wallpaperTarget doesn't have SHOW_WALLPAPER flag set,
         // don't consider upgrading to wallpaper transition.
         final WindowState oldWallpaper =
diff --git a/services/core/java/com/android/server/wm/BLASTSyncEngine.java b/services/core/java/com/android/server/wm/BLASTSyncEngine.java
new file mode 100644
index 0000000..94decc7
--- /dev/null
+++ b/services/core/java/com/android/server/wm/BLASTSyncEngine.java
@@ -0,0 +1,122 @@
+/*
+ * 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.wm;
+
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.util.Slog;
+import android.view.ITaskOrganizer;
+import android.view.SurfaceControl;
+
+import java.util.HashMap;
+
+/**
+ * Utility class for collecting and merging transactions from various sources asynchronously.
+ * For example to use to synchronously resize all the children of a window container
+ *   1. Open a new sync set, and pass the listener that will be invoked
+ *        int id startSyncSet(TransactionReadyListener)
+ *      the returned ID will be eventually passed to the TransactionReadyListener in combination
+ *      with the prepared transaction. You also use it to refer to the operation in future steps.
+ *   2. Ask each child to participate:
+ *       addToSyncSet(int id, WindowContainer wc)
+ *      if the child thinks it will be affected by a configuration change (a.k.a. has a visible
+ *      window in its sub hierarchy, then we will increment a counter of expected callbacks
+ *      At this point the containers hierarchy will redirect pendingTransaction and sub hierarchy
+ *      updates in to the sync engine.
+ *   3. Apply your configuration changes to the window containers.
+ *   4. Tell the engine that the sync set is ready
+ *       setReady(int id)
+ *   5. If there were no sub windows anywhere in the hierarchy to wait on, then
+ *      transactionReady is immediately invoked, otherwise all the windows are poked
+ *      to redraw and to deliver a buffer to WMS#finishDrawing.
+ *      Once all this drawing is complete the combined transaction of all the buffers
+ *      and pending transaction hierarchy changes will be delivered to the TransactionReadyListener
+ */
+class BLASTSyncEngine {
+    private static final String TAG = "BLASTSyncEngine";
+
+    interface TransactionReadyListener {
+        void transactionReady(int mSyncId, SurfaceControl.Transaction mergedTransaction);
+    };
+
+    // Holds state associated with a single synchronous set of operations.
+    class SyncState implements TransactionReadyListener {
+        int mSyncId;
+        SurfaceControl.Transaction mMergedTransaction;
+        int mRemainingTransactions;
+        TransactionReadyListener mListener;
+        boolean mReady = false;
+
+        private void tryFinish() {
+            if (mRemainingTransactions == 0 && mReady) {
+                mListener.transactionReady(mSyncId, mMergedTransaction);
+                mPendingSyncs.remove(mSyncId);
+            }
+        }
+
+        public void transactionReady(int mSyncId, SurfaceControl.Transaction mergedTransaction) {
+            mRemainingTransactions--;
+            mMergedTransaction.merge(mergedTransaction);
+            tryFinish();
+        }
+
+        void setReady() {
+            mReady = true;
+            tryFinish();
+        }
+
+        boolean addToSync(WindowContainer wc) {
+            if (wc.prepareForSync(this, mSyncId)) {
+                mRemainingTransactions++;
+                return true;
+            }
+            return false;
+        }
+
+        SyncState(TransactionReadyListener l, int id) {
+            mListener = l;
+            mSyncId = id;
+            mMergedTransaction = new SurfaceControl.Transaction();
+            mRemainingTransactions = 0;
+        }
+    };
+
+    int mNextSyncId = 0;
+
+    final HashMap<Integer, SyncState> mPendingSyncs = new HashMap();
+
+    BLASTSyncEngine() {
+    }
+
+    int startSyncSet(TransactionReadyListener listener) {
+        final int id = mNextSyncId++;
+        final SyncState s = new SyncState(listener, id);
+        mPendingSyncs.put(id, s);
+        return id;
+    }
+
+    boolean addToSyncSet(int id, WindowContainer wc) {
+        final SyncState st = mPendingSyncs.get(id);
+        return st.addToSync(wc);
+    }
+
+    // TODO(b/148476626): TIMEOUTS!
+    void setReady(int id) {
+        final SyncState st = mPendingSyncs.get(id);
+        st.setReady();
+    }
+}
diff --git a/services/core/java/com/android/server/wm/BoundsAnimationController.java b/services/core/java/com/android/server/wm/BoundsAnimationController.java
index 9b464c2..5385e2f 100644
--- a/services/core/java/com/android/server/wm/BoundsAnimationController.java
+++ b/services/core/java/com/android/server/wm/BoundsAnimationController.java
@@ -552,6 +552,10 @@
         return animationType;
     }
 
+    boolean isAnimationTypeFadeIn() {
+        return mAnimationType == FADE_IN;
+    }
+
     public Handler getHandler() {
         return mHandler;
     }
diff --git a/services/core/java/com/android/server/wm/ConfigurationContainer.java b/services/core/java/com/android/server/wm/ConfigurationContainer.java
index 9bd380a..33dd9cf 100644
--- a/services/core/java/com/android/server/wm/ConfigurationContainer.java
+++ b/services/core/java/com/android/server/wm/ConfigurationContainer.java
@@ -113,13 +113,6 @@
      * @see #mFullConfiguration
      */
     public void onConfigurationChanged(Configuration newParentConfig) {
-        onConfigurationChanged(newParentConfig, true /*forwardToChildren*/);
-    }
-
-    // TODO(root-unify): Consolidate with onConfigurationChanged() method above once unification is
-    //  done. This is only currently need during the process of unification where we don't want
-    //  configuration forwarded to a child from both parents.
-    public void onConfigurationChanged(Configuration newParentConfig, boolean forwardToChildren) {
         mResolvedTmpConfig.setTo(mResolvedOverrideConfiguration);
         resolveOverrideConfiguration(newParentConfig);
         mFullConfiguration.setTo(newParentConfig);
@@ -141,11 +134,9 @@
             mChangeListeners.get(i).onMergedOverrideConfigurationChanged(
                     mMergedOverrideConfiguration);
         }
-        if (forwardToChildren) {
-            for (int i = getChildCount() - 1; i >= 0; --i) {
-                final ConfigurationContainer child = getChildAt(i);
-                child.onConfigurationChanged(mFullConfiguration);
-            }
+        for (int i = getChildCount() - 1; i >= 0; --i) {
+            final ConfigurationContainer child = getChildAt(i);
+            child.onConfigurationChanged(mFullConfiguration);
         }
     }
 
diff --git a/services/core/java/com/android/server/wm/DisplayArea.java b/services/core/java/com/android/server/wm/DisplayArea.java
index b3edc91..0d365b1 100644
--- a/services/core/java/com/android/server/wm/DisplayArea.java
+++ b/services/core/java/com/android/server/wm/DisplayArea.java
@@ -102,6 +102,11 @@
     }
 
     @Override
+    public String toString() {
+        return mName + "@" + System.identityHashCode(this);
+    }
+
+    @Override
     public final void dumpDebug(ProtoOutputStream proto, long fieldId, int logLevel) {
         final long token = proto.start(fieldId);
         super.dumpDebug(proto, WINDOW_CONTAINER, logLevel);
diff --git a/services/core/java/com/android/server/wm/DisplayAreaPolicy.java b/services/core/java/com/android/server/wm/DisplayAreaPolicy.java
index 06e7b48..0ec0c7b 100644
--- a/services/core/java/com/android/server/wm/DisplayAreaPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayAreaPolicy.java
@@ -16,7 +16,8 @@
 
 package com.android.server.wm;
 
-import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
+import android.content.res.Resources;
+import android.text.TextUtils;
 
 import com.android.server.wm.DisplayContent.TaskContainers;
 
@@ -40,11 +41,23 @@
     /**
      * The Tasks container. Tasks etc. are automatically added to this container.
      */
-    protected final TaskContainers mTaskContainers;
+    protected final DisplayArea<? extends ActivityStack> mTaskContainers;
 
-    DisplayAreaPolicy(WindowManagerService wmService,
+    /**
+     * Construct a new {@link DisplayAreaPolicy}
+     *
+     * @param wmService the window manager service instance
+     * @param content the display content for which the policy applies
+     * @param root the root display area under which the policy operates
+     * @param imeContainer the ime container that the policy must attach
+     * @param taskContainers the task container that the policy must attach
+     *
+     * @see #attachDisplayAreas()
+     */
+    protected DisplayAreaPolicy(WindowManagerService wmService,
             DisplayContent content, DisplayArea.Root root,
-            DisplayArea<? extends WindowContainer> imeContainer, TaskContainers taskContainers) {
+            DisplayArea<? extends WindowContainer> imeContainer,
+            DisplayArea<? extends ActivityStack> taskContainers) {
         mWmService = wmService;
         mContent = content;
         mRoot = root;
@@ -69,54 +82,52 @@
      */
     public abstract void addWindow(WindowToken token);
 
-    /**
-     * Default policy that has no special features.
-     */
-    public static class Default extends DisplayAreaPolicy {
-
-        public Default(WindowManagerService wmService, DisplayContent content,
-                DisplayArea.Root root,
+    /** Provider for platform-default display area policy. */
+    static final class DefaultProvider implements DisplayAreaPolicy.Provider {
+        @Override
+        public DisplayAreaPolicy instantiate(WindowManagerService wmService,
+                DisplayContent content, DisplayArea.Root root,
                 DisplayArea<? extends WindowContainer> imeContainer,
                 TaskContainers taskContainers) {
-            super(wmService, content, root, imeContainer, taskContainers);
+            return new DisplayAreaPolicyBuilder()
+                    .build(wmService, content, root, imeContainer, taskContainers);
         }
+    }
 
-        private final DisplayArea.Tokens mBelow = new DisplayArea.Tokens(mWmService,
-                DisplayArea.Type.BELOW_TASKS, "BelowTasks");
-        private final DisplayArea<DisplayArea> mAbove = new DisplayArea<>(mWmService,
-                DisplayArea.Type.ABOVE_TASKS, "AboveTasks");
-        private final DisplayArea.Tokens mAboveBelowIme = new DisplayArea.Tokens(mWmService,
-                DisplayArea.Type.ABOVE_TASKS, "AboveTasksBelowIme");
-        private final DisplayArea.Tokens mAboveAboveIme = new DisplayArea.Tokens(mWmService,
-                DisplayArea.Type.ABOVE_TASKS, "AboveTasksAboveIme");
+    /**
+     * Provider for {@link DisplayAreaPolicy} instances.
+     *
+     * By implementing this interface and overriding the
+     * {@code config_deviceSpecificDisplayAreaPolicyProvider}, a device-specific implementations
+     * of {@link DisplayAreaPolicy} can be supplied.
+     */
+    public interface Provider {
+        /**
+         * Instantiate a new DisplayAreaPolicy.
+         *
+         * @see DisplayAreaPolicy#DisplayAreaPolicy
+         */
+        DisplayAreaPolicy instantiate(WindowManagerService wmService,
+                DisplayContent content, DisplayArea.Root root,
+                DisplayArea<? extends WindowContainer> imeContainer,
+                TaskContainers taskContainers);
 
-        @Override
-        public void attachDisplayAreas() {
-            mRoot.addChild(mBelow, 0);
-            mRoot.addChild(mTaskContainers, 1);
-            mRoot.addChild(mAbove, 2);
-
-            mAbove.addChild(mAboveBelowIme, 0);
-            mAbove.addChild(mImeContainer, 1);
-            mAbove.addChild(mAboveAboveIme, 2);
-        }
-
-        @Override
-        public void addWindow(WindowToken token) {
-            switch (DisplayArea.Type.typeOf(token)) {
-                case ABOVE_TASKS:
-                    if (token.getWindowLayerFromType()
-                            < mWmService.mPolicy.getWindowLayerFromTypeLw(TYPE_INPUT_METHOD)) {
-                        mAboveBelowIme.addChild(token);
-                    } else {
-                        mAboveAboveIme.addChild(token);
-                    }
-                    break;
-                case BELOW_TASKS:
-                    mBelow.addChild(token);
-                    break;
-                default:
-                    throw new IllegalArgumentException("don't know how to sort " + token);
+        /**
+         * Instantiate the device-specific {@link Provider}.
+         */
+        static Provider fromResources(Resources res) {
+            String name = res.getString(
+                    com.android.internal.R.string.config_deviceSpecificDisplayAreaPolicyProvider);
+            if (TextUtils.isEmpty(name)) {
+                return new DisplayAreaPolicy.DefaultProvider();
+            }
+            try {
+                return (Provider) Class.forName(name).newInstance();
+            } catch (ReflectiveOperationException | ClassCastException e) {
+                throw new IllegalStateException("Couldn't instantiate class " + name
+                        + " for config_deviceSpecificDisplayAreaPolicyProvider:"
+                        + " make sure it has a public zero-argument constructor"
+                        + " and implements DisplayAreaPolicy.Provider", e);
             }
         }
     }
diff --git a/services/core/java/com/android/server/wm/DisplayAreaPolicyBuilder.java b/services/core/java/com/android/server/wm/DisplayAreaPolicyBuilder.java
new file mode 100644
index 0000000..885456a
--- /dev/null
+++ b/services/core/java/com/android/server/wm/DisplayAreaPolicyBuilder.java
@@ -0,0 +1,371 @@
+/*
+ * 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.wm;
+
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
+import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
+import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
+import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
+import static android.view.WindowManagerPolicyConstants.APPLICATION_LAYER;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.server.policy.WindowManagerPolicy;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A builder for instantiating a complex {@link DisplayAreaPolicy}
+ *
+ * <p>Given a set of features (that each target a set of window types), it builds the necessary
+ * DisplayArea hierarchy.
+ *
+ * <p>Example: <br />
+ *
+ * <pre>
+ *     // Feature for targeting everything below the magnification overlay:
+ *     new DisplayAreaPolicyBuilder(...)
+ *             .addFeature(new Feature.Builder(..., "Magnification")
+ *                     .upTo(TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY)
+ *                     .build())
+ *             .build(...)
+ *
+ *     // Builds a policy with the following hierarchy:
+ *      - DisplayArea.Root
+ *        - Magnification
+ *          - DisplayArea.Tokens (Wallpapers are attached here)
+ *          - TaskContainers
+ *          - DisplayArea.Tokens (windows above Tasks up to IME are attached here)
+ *          - ImeContainers
+ *          - DisplayArea.Tokens (windows above IME up to TYPE_ACCESSIBILITY_OVERLAY attached here)
+ *        - DisplayArea.Tokens (TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY and up are attached here)
+ *
+ * </pre>
+ *
+ * // TODO(display-area): document more complex scenarios where we need multiple areas per feature.
+ */
+class DisplayAreaPolicyBuilder {
+
+    private final ArrayList<Feature> mFeatures = new ArrayList<>();
+
+    /**
+     * A feature that requires {@link DisplayArea DisplayArea(s)}.
+     */
+    static class Feature {
+        private final String mName;
+        private final boolean[] mWindowLayers;
+
+        private Feature(String name, boolean[] windowLayers) {
+            mName = name;
+            mWindowLayers = windowLayers;
+        }
+
+        static class Builder {
+            private final WindowManagerPolicy mPolicy;
+            private final String mName;
+            private final boolean[] mLayers;
+
+            /**
+             * Build a new feature that applies to a set of window types as specified by the builder
+             * methods.
+             *
+             * <p>The set of types is updated iteratively in the order of the method invocations.
+             * For example, {@code all().except(TYPE_STATUS_BAR)} expresses that a feature should
+             * apply to all types except TYPE_STATUS_BAR.
+             *
+             * The builder starts out with the feature not applying to any types.
+             *
+             * @param name the name of the feature.
+             */
+            Builder(WindowManagerPolicy policy, String name) {
+                mPolicy = policy;
+                mName = name;
+                mLayers = new boolean[mPolicy.getMaxWindowLayer()];
+            }
+
+            /**
+             * Set that the feature applies to all window types.
+             */
+            Builder all() {
+                Arrays.fill(mLayers, true);
+                return this;
+            }
+
+            /**
+             * Set that the feature applies to the given window types.
+             */
+            Builder and(int... types) {
+                for (int i = 0; i < types.length; i++) {
+                    int type = types[i];
+                    set(type, true);
+                }
+                return this;
+            }
+
+            /**
+             * Set that the feature does not apply to the given window types.
+             */
+            Builder except(int... types) {
+                for (int i = 0; i < types.length; i++) {
+                    int type = types[i];
+                    set(type, false);
+                }
+                return this;
+            }
+
+            /**
+             * Set that the feature applies window types that are layerd at or below the layer of
+             * the given window type.
+             */
+            Builder upTo(int typeInclusive) {
+                final int max = layerFromType(typeInclusive, false);
+                for (int i = 0; i < max; i++) {
+                    mLayers[i] = true;
+                }
+                set(typeInclusive, true);
+                return this;
+            }
+
+            Feature build() {
+                return new Feature(mName, mLayers.clone());
+            }
+
+            private void set(int type, boolean value) {
+                mLayers[layerFromType(type, true)] = value;
+                if (type == TYPE_APPLICATION_OVERLAY) {
+                    mLayers[layerFromType(type, true)] = value;
+                    mLayers[layerFromType(TYPE_SYSTEM_ALERT, false)] = value;
+                    mLayers[layerFromType(TYPE_SYSTEM_OVERLAY, false)] = value;
+                    mLayers[layerFromType(TYPE_SYSTEM_ERROR, false)] = value;
+                }
+            }
+
+            private int layerFromType(int type, boolean internalWindows) {
+                return mPolicy.getWindowLayerFromTypeLw(type, internalWindows);
+            }
+        }
+    }
+
+    static class Result extends DisplayAreaPolicy {
+        private static final int LEAF_TYPE_TASK_CONTAINERS = 1;
+        private static final int LEAF_TYPE_IME_CONTAINERS = 2;
+        private static final int LEAF_TYPE_TOKENS = 0;
+
+        private final int mMaxWindowLayer = mWmService.mPolicy.getMaxWindowLayer();
+
+        private final ArrayList<Feature> mFeatures;
+        private final Map<Feature, List<DisplayArea<? extends WindowContainer>>> mAreas;
+        private final DisplayArea.Tokens[] mAreaForLayer = new DisplayArea.Tokens[mMaxWindowLayer];
+
+        Result(WindowManagerService wmService, DisplayContent content, DisplayArea.Root root,
+                DisplayArea<? extends WindowContainer> imeContainer,
+                DisplayArea<? extends ActivityStack> taskStacks, ArrayList<Feature> features) {
+            super(wmService, content, root, imeContainer, taskStacks);
+            mFeatures = features;
+            mAreas = new HashMap<>(features.size());
+            for (int i = 0; i < mFeatures.size(); i++) {
+                mAreas.put(mFeatures.get(i), new ArrayList<>());
+            }
+        }
+
+        @Override
+        public void attachDisplayAreas() {
+            // This method constructs the layer hierarchy with the following properties:
+            // (1) Every feature maps to a set of DisplayAreas
+            // (2) After adding a window, for every feature the window's type belongs to,
+            //     it is a descendant of one of the corresponding DisplayAreas of the feature.
+            // (3) Z-order is maintained, i.e. if z-range(area) denotes the set of layers of windows
+            //     within a DisplayArea:
+            //      for every pair of DisplayArea siblings (a,b), where a is below b, it holds that
+            //      max(z-range(a)) <= min(z-range(b))
+            //
+            // The algorithm below iteratively creates such a hierarchy:
+            //  - Initially, all windows are attached to the root.
+            //  - For each feature we create a set of DisplayAreas, by looping over the layers
+            //    - if the feature does apply to the current layer, we need to find a DisplayArea
+            //      for it to satisfy (2)
+            //      - we can re-use the previous layer's area if:
+            //         the current feature also applies to the previous layer, (to satisfy (3))
+            //         and the last feature that applied to the previous layer is the same as
+            //           the last feature that applied to the current layer (to satisfy (2))
+            //      - otherwise we create a new DisplayArea below the last feature that applied
+            //        to the current layer
+
+
+            PendingArea[] areaForLayer = new PendingArea[mMaxWindowLayer];
+            final PendingArea root = new PendingArea(null, 0, null);
+            Arrays.fill(areaForLayer, root);
+
+            final int size = mFeatures.size();
+            for (int i = 0; i < size; i++) {
+                PendingArea featureArea = null;
+                for (int layer = 0; layer < mMaxWindowLayer; layer++) {
+                    final Feature feature = mFeatures.get(i);
+                    if (feature.mWindowLayers[layer]) {
+                        if (featureArea == null || featureArea.mParent != areaForLayer[layer]) {
+                            // No suitable DisplayArea - create a new one under the previous area
+                            // for this layer.
+                            featureArea = new PendingArea(feature, layer, areaForLayer[layer]);
+                            areaForLayer[layer].mChildren.add(featureArea);
+                        }
+                        areaForLayer[layer] = featureArea;
+                    } else {
+                        featureArea = null;
+                    }
+                }
+            }
+
+            PendingArea leafArea = null;
+            int leafType = LEAF_TYPE_TOKENS;
+            for (int layer = 0; layer < mMaxWindowLayer; layer++) {
+                int type = typeOfLayer(mWmService.mPolicy, layer);
+                if (leafArea == null || leafArea.mParent != areaForLayer[layer]
+                        || type != leafType) {
+                    leafArea = new PendingArea(null, layer, areaForLayer[layer]);
+                    areaForLayer[layer].mChildren.add(leafArea);
+                    leafType = type;
+                    if (leafType == LEAF_TYPE_TASK_CONTAINERS) {
+                        leafArea.mExisting = mTaskContainers;
+                    } else if (leafType == LEAF_TYPE_IME_CONTAINERS) {
+                        leafArea.mExisting = mImeContainer;
+                    }
+                }
+                leafArea.mMaxLayer = layer;
+            }
+            root.computeMaxLayer();
+            root.instantiateChildren(mRoot, mAreaForLayer, 0, mAreas);
+        }
+
+        @Override
+        public void addWindow(WindowToken token) {
+            DisplayArea.Tokens area = findAreaForToken(token);
+            area.addChild(token);
+        }
+
+        @VisibleForTesting
+        DisplayArea.Tokens findAreaForToken(WindowToken token) {
+            int windowLayerFromType = token.getWindowLayerFromType();
+            if (windowLayerFromType == APPLICATION_LAYER) {
+                // TODO(display-area): Better handle AboveAppWindows in APPLICATION_LAYER
+                windowLayerFromType += 1;
+            } else if (token.mRoundedCornerOverlay) {
+                windowLayerFromType = mMaxWindowLayer - 1;
+            }
+            return mAreaForLayer[windowLayerFromType];
+        }
+
+        public List<DisplayArea<? extends WindowContainer>> getDisplayAreas(Feature feature) {
+            return mAreas.get(feature);
+        }
+
+        private static int typeOfLayer(WindowManagerPolicy policy, int layer) {
+            if (layer == APPLICATION_LAYER) {
+                return LEAF_TYPE_TASK_CONTAINERS;
+            } else if (layer == policy.getWindowLayerFromTypeLw(TYPE_INPUT_METHOD)
+                    || layer == policy.getWindowLayerFromTypeLw(TYPE_INPUT_METHOD_DIALOG)) {
+                return LEAF_TYPE_IME_CONTAINERS;
+            } else {
+                return LEAF_TYPE_TOKENS;
+            }
+        }
+    }
+
+    DisplayAreaPolicyBuilder addFeature(Feature feature) {
+        mFeatures.add(feature);
+        return this;
+    }
+
+    Result build(WindowManagerService wmService,
+            DisplayContent content, DisplayArea.Root root,
+            DisplayArea<? extends WindowContainer> imeContainer,
+            DisplayArea<? extends ActivityStack> taskContainers) {
+
+        return new Result(wmService, content, root, imeContainer, taskContainers, new ArrayList<>(
+                mFeatures));
+    }
+
+    static class PendingArea {
+        final int mMinLayer;
+        final ArrayList<PendingArea> mChildren = new ArrayList<>();
+        final Feature mFeature;
+        final PendingArea mParent;
+        int mMaxLayer;
+        DisplayArea mExisting;
+
+        PendingArea(Feature feature,
+                int minLayer,
+                PendingArea parent) {
+            mMinLayer = minLayer;
+            mFeature = feature;
+            mParent = parent;
+        }
+
+        int computeMaxLayer() {
+            for (int i = 0; i < mChildren.size(); i++) {
+                mMaxLayer = Math.max(mMaxLayer, mChildren.get(i).computeMaxLayer());
+            }
+            return mMaxLayer;
+        }
+
+        void instantiateChildren(DisplayArea<DisplayArea> parent,
+                DisplayArea.Tokens[] areaForLayer, int level, Map<Feature, List<DisplayArea<?
+                extends WindowContainer>>> areas) {
+            mChildren.sort(Comparator.comparingInt(pendingArea -> pendingArea.mMinLayer));
+            for (int i = 0; i < mChildren.size(); i++) {
+                final PendingArea child = mChildren.get(i);
+                final DisplayArea area = child.createArea(parent, areaForLayer);
+                parent.addChild(area, WindowContainer.POSITION_TOP);
+                if (mFeature != null) {
+                    areas.get(mFeature).add(area);
+                }
+                child.instantiateChildren(area, areaForLayer, level + 1, areas);
+            }
+        }
+
+        private DisplayArea createArea(DisplayArea<DisplayArea> parent,
+                DisplayArea.Tokens[] areaForLayer) {
+            if (mExisting != null) {
+                return mExisting;
+            }
+            DisplayArea.Type type;
+            if (mMinLayer > APPLICATION_LAYER) {
+                type = DisplayArea.Type.ABOVE_TASKS;
+            } else if (mMaxLayer < APPLICATION_LAYER) {
+                type = DisplayArea.Type.BELOW_TASKS;
+            } else {
+                type = DisplayArea.Type.ANY;
+            }
+            if (mFeature == null) {
+                final DisplayArea.Tokens leaf = new DisplayArea.Tokens(parent.mWmService, type,
+                        "Leaf:" + mMinLayer + ":" + mMaxLayer);
+                for (int i = mMinLayer; i <= mMaxLayer; i++) {
+                    areaForLayer[i] = leaf;
+                }
+                return leaf;
+            } else {
+                return new DisplayArea(parent.mWmService, type, mFeature.mName + ":"
+                        + mMinLayer + ":" + mMaxLayer);
+            }
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 810aa34..e60ab3f 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -16,9 +16,7 @@
 
 package com.android.server.wm;
 
-import static android.app.ActivityTaskManager.INVALID_STACK_ID;
 import static android.app.ActivityTaskManager.INVALID_TASK_ID;
-import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
@@ -32,6 +30,7 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+import static android.app.WindowConfiguration.isSplitScreenWindowingMode;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_BEHIND;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
@@ -56,9 +55,6 @@
 import static android.view.View.GONE;
 import static android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
 import static android.view.View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
-import static android.view.WindowManager.DOCKED_BOTTOM;
-import static android.view.WindowManager.DOCKED_INVALID;
-import static android.view.WindowManager.DOCKED_TOP;
 import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
 import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
 import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
@@ -84,9 +80,6 @@
 import static android.view.WindowManager.TRANSIT_TASK_OPEN;
 import static android.view.WindowManager.TRANSIT_TASK_TO_FRONT;
 
-import static com.android.server.wm.DisplayContentProto.FOCUSED_ROOT_TASK_ID;
-import static com.android.server.wm.DisplayContentProto.RESUMED_ACTIVITY;
-import static com.android.server.wm.DisplayContentProto.SINGLE_TASK_INSTANCE;
 import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM;
 import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_CONFIG;
 import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
@@ -105,12 +98,15 @@
 import static com.android.server.wm.DisplayContentProto.DOCKED_STACK_DIVIDER_CONTROLLER;
 import static com.android.server.wm.DisplayContentProto.DPI;
 import static com.android.server.wm.DisplayContentProto.FOCUSED_APP;
+import static com.android.server.wm.DisplayContentProto.FOCUSED_ROOT_TASK_ID;
 import static com.android.server.wm.DisplayContentProto.ID;
 import static com.android.server.wm.DisplayContentProto.OPENING_APPS;
 import static com.android.server.wm.DisplayContentProto.OVERLAY_WINDOWS;
+import static com.android.server.wm.DisplayContentProto.RESUMED_ACTIVITY;
 import static com.android.server.wm.DisplayContentProto.ROOT_DISPLAY_AREA;
 import static com.android.server.wm.DisplayContentProto.ROTATION;
 import static com.android.server.wm.DisplayContentProto.SCREEN_ROTATION_ANIMATION;
+import static com.android.server.wm.DisplayContentProto.SINGLE_TASK_INSTANCE;
 import static com.android.server.wm.DisplayContentProto.TASKS;
 import static com.android.server.wm.DisplayContentProto.WINDOW_CONTAINER;
 import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_ADD_REMOVE;
@@ -259,6 +255,7 @@
         implements WindowManagerPolicy.DisplayContentInfo {
     private static final String TAG = TAG_WITH_CLASS_NAME ? "DisplayContent" : TAG_WM;
     private static final String TAG_STACK = TAG + POSTFIX_STACK;
+    private static final int NO_ROTATION = -1;
 
     /** The default scaling mode that scales content automatically. */
     static final int FORCE_SCALING_MODE_AUTO = 0;
@@ -304,8 +301,7 @@
 
     private final DisplayArea.Root mRootDisplayArea = new DisplayArea.Root(mWmService);
 
-    private final DisplayAreaPolicy mDisplayAreaPolicy = new DisplayAreaPolicy.Default(
-            mWmService, this, mRootDisplayArea, mImeWindowsContainers, mTaskContainers);
+    private final DisplayAreaPolicy mDisplayAreaPolicy;
 
     private WindowState mTmpWindow;
     private WindowState mTmpWindow2;
@@ -516,6 +512,13 @@
      */
     ActivityRecord mFocusedApp = null;
 
+    /**
+     * The launching activity which is using fixed rotation transformation.
+     *
+     * @see #handleTopActivityLaunchingInDifferentOrientation
+     */
+    ActivityRecord mFixedRotationLaunchingApp;
+
     /** Windows added since {@link #mCurrentFocus} was set to null. Used for ANR blaming. */
     final ArrayList<WindowState> mWinAddedSinceNullFocus = new ArrayList<>();
 
@@ -1027,6 +1030,8 @@
         super.addChild(mWindowContainers, null);
         super.addChild(mOverlayContainers, null);
 
+        mDisplayAreaPolicy = mWmService.mDisplayAreaPolicyProvider.instantiate(
+                mWmService, this, mRootDisplayArea, mImeWindowsContainers, mTaskContainers);
         mWindowContainers.addChildren();
 
         // Sets the display content for the children.
@@ -1307,6 +1312,9 @@
         if (mDisplayRotation.isWaitingForRemoteRotation()) {
             return;
         }
+        // Clear the record because the display will sync to current rotation.
+        mFixedRotationLaunchingApp = null;
+
         final boolean configUpdated = updateDisplayOverrideConfigurationLocked();
         if (configUpdated) {
             return;
@@ -1366,7 +1374,7 @@
      *         {@link #sendNewConfiguration} if the method returns {@code true}.
      */
     boolean updateOrientation() {
-        return mDisplayRotation.updateOrientation(getOrientation(), false /* forceUpdate */);
+        return updateOrientation(false /* forceUpdate */);
     }
 
     /**
@@ -1389,7 +1397,7 @@
         }
 
         Configuration config = null;
-        if (mDisplayRotation.updateOrientation(getOrientation(), forceUpdate)) {
+        if (updateOrientation(forceUpdate)) {
             // If we changed the orientation but mOrientationChangeComplete is already true,
             // we used seamless rotation, and we don't need to freeze the screen.
             if (freezeDisplayToken != null && !mWmService.mRoot.mOrientationChangeComplete) {
@@ -1420,6 +1428,140 @@
         return config;
     }
 
+    private boolean updateOrientation(boolean forceUpdate) {
+        final int orientation = getOrientation();
+        // The last orientation source is valid only after getOrientation.
+        final WindowContainer orientationSource = getLastOrientationSource();
+        final ActivityRecord r =
+                orientationSource != null ? orientationSource.asActivityRecord() : null;
+        // Currently there is no use case from non-activity.
+        if (r != null && handleTopActivityLaunchingInDifferentOrientation(r)) {
+            mFixedRotationLaunchingApp = r;
+            // Display orientation should be deferred until the top fixed rotation is finished.
+            return false;
+        }
+        return mDisplayRotation.updateOrientation(orientation, forceUpdate);
+    }
+
+    /** @return a valid rotation if the activity can use different orientation than the display. */
+    @Surface.Rotation
+    private int rotationForActivityInDifferentOrientation(@NonNull ActivityRecord r) {
+        if (!mWmService.mIsFixedRotationTransformEnabled) {
+            return NO_ROTATION;
+        }
+        if (r.inMultiWindowMode()
+                || r.getRequestedConfigurationOrientation() == getConfiguration().orientation) {
+            return NO_ROTATION;
+        }
+        final int currentRotation = getRotation();
+        final int rotation = mDisplayRotation.rotationForOrientation(r.getRequestedOrientation(),
+                currentRotation);
+        if (rotation == currentRotation) {
+            return NO_ROTATION;
+        }
+        return rotation;
+    }
+
+    /**
+     * We need to keep display rotation fixed for a while when the activity in different orientation
+     * is launching until the launch animation is done to avoid showing the previous activity
+     * inadvertently in a wrong orientation.
+     *
+     * @return {@code true} if the fixed rotation is started.
+     */
+    private boolean handleTopActivityLaunchingInDifferentOrientation(@NonNull ActivityRecord r) {
+        if (!mWmService.mIsFixedRotationTransformEnabled) {
+            return false;
+        }
+        if (r.isFinishingFixedRotationTransform()) {
+            return false;
+        }
+        if (r.hasFixedRotationTransform()) {
+            // It has been set and not yet finished.
+            return true;
+        }
+        if (!mAppTransition.isTransitionSet()) {
+            // Apply normal rotation animation in case of the activity set different requested
+            // orientation without activity switch.
+            return false;
+        }
+        if (!mOpeningApps.contains(r)
+                // Without screen rotation, the rotation behavior of non-top visible activities is
+                // undefined. So the fixed rotated activity needs to cover the screen.
+                && r.findMainWindow() != mDisplayPolicy.getTopFullscreenOpaqueWindow()) {
+            return false;
+        }
+        final int rotation = rotationForActivityInDifferentOrientation(r);
+        if (rotation == NO_ROTATION) {
+            return false;
+        }
+        if (!r.getParent().matchParentBounds()) {
+            // Because the fixed rotated configuration applies to activity directly, if its parent
+            // has it own policy for bounds, the activity bounds based on parent is unknown.
+            return false;
+        }
+
+        startFixedRotationTransform(r, rotation);
+        mAppTransition.registerListenerLocked(new WindowManagerInternal.AppTransitionListener() {
+            void done() {
+                r.clearFixedRotationTransform();
+                mAppTransition.unregisterListener(this);
+            }
+
+            @Override
+            public void onAppTransitionFinishedLocked(IBinder token) {
+                if (token == r.token) {
+                    done();
+                }
+            }
+
+            @Override
+            public void onAppTransitionCancelledLocked(int transit) {
+                done();
+            }
+
+            @Override
+            public void onAppTransitionTimeoutLocked() {
+                done();
+            }
+        });
+        return true;
+    }
+
+    /** @return {@code true} if the display orientation will be changed. */
+    boolean continueUpdateOrientationForDiffOrienLaunchingApp(WindowToken token) {
+        if (token != mFixedRotationLaunchingApp) {
+            return false;
+        }
+        if (updateOrientation()) {
+            sendNewConfiguration();
+            return true;
+        }
+        return false;
+    }
+
+    private void startFixedRotationTransform(WindowToken token, int rotation) {
+        mTmpConfiguration.unset();
+        final DisplayInfo info = computeScreenConfiguration(mTmpConfiguration, rotation);
+        final WmDisplayCutout cutout = calculateDisplayCutoutForRotation(rotation);
+        final DisplayFrames displayFrames = new DisplayFrames(mDisplayId, info, cutout);
+        token.applyFixedRotationTransform(info, displayFrames, mTmpConfiguration);
+    }
+
+    /**
+     * If the provided {@link ActivityRecord} can be displayed in an orientation different from the
+     * display's, it will be rotated to match its requested orientation.
+     *
+     * @see #rotationForActivityInDifferentOrientation(ActivityRecord).
+     * @see WindowToken#applyFixedRotationTransform(DisplayInfo, DisplayFrames, Configuration)
+     */
+    void rotateInDifferentOrientationIfNeeded(ActivityRecord activityRecord) {
+        int rotation = rotationForActivityInDifferentOrientation(activityRecord);
+        if (rotation != NO_ROTATION) {
+            startFixedRotationTransform(activityRecord, rotation);
+        }
+    }
+
     /**
      * Update rotation of the display.
      *
@@ -1621,6 +1763,63 @@
     }
 
     /**
+     * Compute display info and configuration according to the given rotation without changing
+     * current display.
+     */
+    DisplayInfo computeScreenConfiguration(Configuration outConfig, int rotation) {
+        final boolean rotated = (rotation == ROTATION_90 || rotation == ROTATION_270);
+        final int dw = rotated ? mBaseDisplayHeight : mBaseDisplayWidth;
+        final int dh = rotated ? mBaseDisplayWidth : mBaseDisplayHeight;
+        outConfig.windowConfiguration.getBounds().set(0, 0, dw, dh);
+
+        final int uiMode = getConfiguration().uiMode;
+        final DisplayCutout displayCutout =
+                calculateDisplayCutoutForRotation(rotation).getDisplayCutout();
+        computeScreenAppConfiguration(outConfig, dw, dh, rotation, uiMode, displayCutout);
+
+        final DisplayInfo displayInfo = new DisplayInfo(mDisplayInfo);
+        displayInfo.rotation = rotation;
+        displayInfo.logicalWidth = dw;
+        displayInfo.logicalHeight = dh;
+        final Rect appBounds = outConfig.windowConfiguration.getAppBounds();
+        displayInfo.appWidth = appBounds.width();
+        displayInfo.appHeight = appBounds.height();
+        displayInfo.displayCutout = displayCutout.isEmpty() ? null : displayCutout;
+        computeSizeRangesAndScreenLayout(displayInfo, rotated, uiMode, dw, dh,
+                mDisplayMetrics.density, outConfig);
+        return displayInfo;
+    }
+
+    /** Compute configuration related to application without changing current display. */
+    private void computeScreenAppConfiguration(Configuration outConfig, int dw, int dh,
+            int rotation, int uiMode, DisplayCutout displayCutout) {
+        final int appWidth = mDisplayPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode,
+                displayCutout);
+        final int appHeight = mDisplayPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode,
+                displayCutout);
+        mDisplayPolicy.getNonDecorInsetsLw(rotation, dw, dh, displayCutout, mTmpRect);
+        final int leftInset = mTmpRect.left;
+        final int topInset = mTmpRect.top;
+        // AppBounds at the root level should mirror the app screen size.
+        outConfig.windowConfiguration.setAppBounds(leftInset /* left */, topInset /* top */,
+                leftInset + appWidth /* right */, topInset + appHeight /* bottom */);
+        outConfig.windowConfiguration.setRotation(rotation);
+        outConfig.orientation = (dw <= dh) ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE;
+
+        final float density = mDisplayMetrics.density;
+        outConfig.screenWidthDp = (int) (mDisplayPolicy.getConfigDisplayWidth(dw, dh, rotation,
+                uiMode, displayCutout) / density);
+        outConfig.screenHeightDp = (int) (mDisplayPolicy.getConfigDisplayHeight(dw, dh, rotation,
+                uiMode, displayCutout) / density);
+        outConfig.compatScreenWidthDp = (int) (outConfig.screenWidthDp / mCompatibleScreenScale);
+        outConfig.compatScreenHeightDp = (int) (outConfig.screenHeightDp / mCompatibleScreenScale);
+
+        final boolean rotated = (rotation == ROTATION_90 || rotation == ROTATION_270);
+        outConfig.compatSmallestScreenWidthDp = computeCompatSmallestWidth(rotated, uiMode, dw,
+                dh, displayCutout);
+    }
+
+    /**
      * Compute display configuration based on display properties and policy settings.
      * Do not call if mDisplayReady == false.
      */
@@ -1628,42 +1827,19 @@
         final DisplayInfo displayInfo = updateDisplayAndOrientation(config.uiMode, config);
         calculateBounds(displayInfo, mTmpBounds);
         config.windowConfiguration.setBounds(mTmpBounds);
+        config.windowConfiguration.setWindowingMode(getWindowingMode());
+        config.windowConfiguration.setDisplayWindowingMode(getWindowingMode());
 
         final int dw = displayInfo.logicalWidth;
         final int dh = displayInfo.logicalHeight;
-        config.orientation = (dw <= dh) ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE;
-        config.windowConfiguration.setWindowingMode(getWindowingMode());
-        config.windowConfiguration.setDisplayWindowingMode(getWindowingMode());
-        config.windowConfiguration.setRotation(displayInfo.rotation);
-
-        final float density = mDisplayMetrics.density;
-        config.screenWidthDp =
-                (int)(mDisplayPolicy.getConfigDisplayWidth(dw, dh, displayInfo.rotation,
-                        config.uiMode, displayInfo.displayCutout) / density);
-        config.screenHeightDp =
-                (int)(mDisplayPolicy.getConfigDisplayHeight(dw, dh, displayInfo.rotation,
-                        config.uiMode, displayInfo.displayCutout) / density);
-
-        mDisplayPolicy.getNonDecorInsetsLw(displayInfo.rotation, dw, dh,
-                displayInfo.displayCutout, mTmpRect);
-        final int leftInset = mTmpRect.left;
-        final int topInset = mTmpRect.top;
-        // appBounds at the root level should mirror the app screen size.
-        config.windowConfiguration.setAppBounds(leftInset /* left */, topInset /* top */,
-                leftInset + displayInfo.appWidth /* right */,
-                topInset + displayInfo.appHeight /* bottom */);
-        final boolean rotated = (displayInfo.rotation == Surface.ROTATION_90
-                || displayInfo.rotation == Surface.ROTATION_270);
+        computeScreenAppConfiguration(config, dw, dh, displayInfo.rotation, config.uiMode,
+                displayInfo.displayCutout);
 
         config.screenLayout = (config.screenLayout & ~Configuration.SCREENLAYOUT_ROUND_MASK)
                 | ((displayInfo.flags & Display.FLAG_ROUND) != 0
                 ? Configuration.SCREENLAYOUT_ROUND_YES
                 : Configuration.SCREENLAYOUT_ROUND_NO);
 
-        config.compatScreenWidthDp = (int)(config.screenWidthDp / mCompatibleScreenScale);
-        config.compatScreenHeightDp = (int)(config.screenHeightDp / mCompatibleScreenScale);
-        config.compatSmallestScreenWidthDp = computeCompatSmallestWidth(rotated, config.uiMode, dw,
-                dh, displayInfo.displayCutout);
         config.densityDpi = displayInfo.logicalDensityDpi;
 
         config.colorMode =
@@ -1937,6 +2113,20 @@
         return mTaskContainers.getRootHomeTask();
     }
 
+    /**
+     * Returns the existing home stack or creates and returns a new one if it should exist for the
+     * display.
+     */
+    @Nullable
+    ActivityStack getOrCreateRootHomeTask() {
+        ActivityStack homeTask = getRootHomeTask();
+        if (homeTask == null && supportsSystemDecorations() && !isUntrustedVirtualDisplay()) {
+            homeTask = createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME,
+                    false /* onTop */);
+        }
+        return homeTask;
+    }
+
     /** @return The primary split-screen task, and {@code null} otherwise. */
     ActivityStack getRootSplitScreenPrimaryTask() {
         return mTaskContainers.getRootSplitScreenPrimaryTask();
@@ -2096,19 +2286,19 @@
     /**
      * In the general case, the orientation is computed from the above app windows first. If none of
      * the above app windows specify orientation, the orientation is computed from the child window
-     * container, e.g. {@link AppWindowToken#getOrientation(int)}.
+     * container, e.g. {@link ActivityRecord#getOrientation(int)}.
      */
     @ScreenOrientation
     @Override
     int getOrientation() {
-        final WindowManagerPolicy policy = mWmService.mPolicy;
+        mLastOrientationSource = null;
 
         if (mIgnoreRotationForApps) {
             return SCREEN_ORIENTATION_USER;
         }
 
         if (mWmService.mDisplayFrozen) {
-            if (policy.isKeyguardLocked()) {
+            if (mWmService.mPolicy.isKeyguardLocked()) {
                 // Use the last orientation the while the display is frozen with the keyguard
                 // locked. This could be the keyguard forced orientation or from a SHOW_WHEN_LOCKED
                 // window. We don't want to check the show when locked window directly though as
@@ -2120,7 +2310,9 @@
                 return getLastOrientation();
             }
         }
-        return mRootDisplayArea.getOrientation();
+        final int rootOrientation = mRootDisplayArea.getOrientation();
+        mLastOrientationSource = mRootDisplayArea.getLastOrientationSource();
+        return rootOrientation;
     }
 
     void updateDisplayInfo() {
@@ -2612,54 +2804,9 @@
 
     void adjustForImeIfNeeded() {
         final WindowState imeWin = mInputMethodWindow;
-        final boolean imeVisible = imeWin != null && imeWin.isVisibleLw() && imeWin.isDisplayedLw()
-                && !mDividerControllerLocked.isImeHideRequested();
-        final ActivityStack dockedStack = getRootSplitScreenPrimaryTask();
-        final boolean dockVisible = dockedStack != null;
-        final Task topDockedTask = dockVisible ? dockedStack.getTask((t) -> true): null;
-        final ActivityStack imeTargetStack = mWmService.getImeFocusStackLocked();
-        final int imeDockSide = (dockVisible && imeTargetStack != null) ?
-                imeTargetStack.getDockSide() : DOCKED_INVALID;
-        final boolean imeOnTop = (imeDockSide == DOCKED_TOP);
-        final boolean imeOnBottom = (imeDockSide == DOCKED_BOTTOM);
+        final boolean imeVisible = imeWin != null && imeWin.isVisibleLw()
+                && imeWin.isDisplayedLw();
         final int imeHeight = mDisplayFrames.getInputMethodWindowVisibleHeight();
-        final boolean imeHeightChanged = imeVisible &&
-                imeHeight != mDividerControllerLocked.getImeHeightAdjustedFor();
-
-        // This includes a case where the docked stack is unminimizing and IME is visible for the
-        // bottom side stack. The condition prevents adjusting the override task bounds for IME to
-        // the minimized docked stack bounds.
-        final boolean dockMinimized = mDividerControllerLocked.isMinimizedDock()
-                || (topDockedTask != null && imeOnBottom && !dockedStack.isAdjustedForIme()
-                && dockedStack.getBounds().height() < topDockedTask.getBounds().height());
-
-        // The divider could be adjusted for IME position, or be thinner than usual,
-        // or both. There are three possible cases:
-        // - If IME is visible, and focus is on top, divider is not moved for IME but thinner.
-        // - If IME is visible, and focus is on bottom, divider is moved for IME and thinner.
-        // - If IME is not visible, divider is not moved and is normal width.
-
-        if (imeVisible && dockVisible && (imeOnTop || imeOnBottom) && !dockMinimized) {
-            for (int i = mTaskContainers.getChildCount() - 1; i >= 0; --i) {
-                final ActivityStack stack = mTaskContainers.getChildAt(i);
-                final boolean isDockedOnBottom = stack.getDockSide() == DOCKED_BOTTOM;
-                if (stack.isVisible() && (imeOnBottom || isDockedOnBottom)
-                        && stack.inSplitScreenWindowingMode()) {
-                    stack.setAdjustedForIme(imeWin, imeOnBottom && imeHeightChanged);
-                } else {
-                    stack.resetAdjustedForIme(false);
-                }
-            }
-            mDividerControllerLocked.setAdjustedForIme(
-                    imeOnBottom /*ime*/, true /*divider*/, true /*animate*/, imeWin, imeHeight);
-        } else {
-            for (int i = mTaskContainers.getChildCount() - 1; i >= 0; --i) {
-                final ActivityStack stack = mTaskContainers.getChildAt(i);
-                stack.resetAdjustedForIme(!dockVisible);
-            }
-            mDividerControllerLocked.setAdjustedForIme(
-                    false /*ime*/, false /*divider*/, dockVisible /*animate*/, imeWin, imeHeight);
-        }
         mPinnedStackControllerLocked.setAdjustedForIme(imeVisible, imeHeight);
     }
 
@@ -3254,9 +3401,9 @@
             mWmService.mAtmInternal.onImeWindowSetOnDisplay(imePid,
                     mInputMethodWindow.getDisplayId());
         }
-        computeImeTarget(true /* updateImeTarget */);
         mInsetsStateController.getSourceProvider(ITYPE_IME).setWindow(win,
                 null /* frameProvider */, null /* imeFrameProvider */);
+        computeImeTarget(true /* updateImeTarget */);
     }
 
     /**
@@ -3415,6 +3562,10 @@
         if (target != null && target.getDisplayContent().canShowIme()) {
             return target;
         }
+        return getImeFallback();
+    }
+
+    WindowState getImeFallback() {
 
         // host is in non-default display that doesn't support system decor, default to
         // default display's StatusBar to control IME.
@@ -3439,20 +3590,25 @@
         mInputMethodTarget = target;
         mInputMethodTargetWaitingAnim = targetWaitingAnim;
         assignWindowLayers(false /* setLayoutNeeded */);
-        mInputMethodControlTarget = computeImeControlTarget();
-        mInsetsStateController.onImeControlTargetChanged(mInputMethodControlTarget);
+        updateImeControlTarget(mInputMethodTarget);
         updateImeParent();
     }
 
     /**
      * IME control target is the window that controls the IME visibility and animation.
      * This window is same as the window on which startInput is called.
-     * @param target the window that receives IME control.
+     * @param target the window that receives IME control. This is ignored if we aren't attaching
+     *               the IME to an app (eg. when in multi-window mode).
      *
      * @see #getImeControlTarget()
      */
-    void updateImeControlTarget(WindowState target) {
-        mInputMethodControlTarget = target;
+    void updateImeControlTarget(InsetsControlTarget target) {
+        if (!isImeAttachedToApp() && mRemoteInsetsControlTarget != null) {
+            mInputMethodControlTarget = mRemoteInsetsControlTarget;
+        } else {
+            // Otherwise, we just use the ime target
+            mInputMethodControlTarget = target;
+        }
         mInsetsStateController.onImeControlTargetChanged(mInputMethodControlTarget);
     }
 
@@ -3485,19 +3641,6 @@
         return mWindowContainers.getSurfaceControl();
     }
 
-    /**
-     * Computes which control-target the IME should be attached to.
-     */
-    @VisibleForTesting
-    InsetsControlTarget computeImeControlTarget() {
-        if (!isImeAttachedToApp() && mRemoteInsetsControlTarget != null) {
-            return mRemoteInsetsControlTarget;
-        }
-
-        // Otherwise, we just use the ime target
-        return mInputMethodTarget;
-    }
-
     void setLayoutNeeded() {
         if (DEBUG_LAYOUT) Slog.w(TAG_WM, "setLayoutNeeded: callers=" + Debug.getCallers(3));
         mLayoutNeeded = true;
@@ -3816,6 +3959,10 @@
         }
         prepareSurfaces();
 
+        // This should be called after the insets have been dispatched to clients and we have
+        // committed finish drawing windows.
+        mInsetsStateController.getImeSourceProvider().checkShowImePostLayout();
+
         mLastHasContent = mTmpApplySurfaceChangesTransactionState.displayHasContent;
         mWmService.mDisplayManagerInternal.setDisplayProperties(mDisplayId,
                 mLastHasContent,
@@ -3879,7 +4026,7 @@
         }
     }
 
-    /** @returns the orientation of the display when it's rotation is ROTATION_0. */
+    /** @return the orientation of the display when it's rotation is ROTATION_0. */
     int getNaturalOrientation() {
         return mBaseDisplayWidth < mBaseDisplayHeight
                 ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE;
@@ -4254,9 +4401,6 @@
         }
 
         ActivityStack getRootHomeTask() {
-            if (mRootHomeTask == null && mDisplayId == DEFAULT_DISPLAY) {
-                Slog.e(TAG_WM, "getHomeStack: Returning null from this=" + this);
-            }
             return mRootHomeTask;
         }
 
@@ -4323,8 +4467,6 @@
                     }
                 } else {
                     mRootSplitScreenPrimaryTask = stack;
-                    mDisplayContent.onSplitScreenModeActivated();
-                    mDividerControllerLocked.notifyDockedStackExistsChanged(true);
                 }
             }
         }
@@ -4336,11 +4478,6 @@
                 mRootPinnedTask = null;
             } else if (stack == mRootSplitScreenPrimaryTask) {
                 mRootSplitScreenPrimaryTask = null;
-                mDisplayContent.onSplitScreenModeDismissed();
-                // Re-set the split-screen create mode whenever the split-screen stack is removed.
-                mWmService.setDockedStackCreateStateLocked(
-                        SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT, null /* initialBounds */);
-                mDividerControllerLocked.notifyDockedStackExistsChanged(false);
             }
         }
 
@@ -5659,7 +5796,8 @@
         return activityType == ACTIVITY_TYPE_STANDARD
                 && (windowingMode == WINDOWING_MODE_FULLSCREEN
                 || windowingMode == WINDOWING_MODE_FREEFORM
-                || windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+                || windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY
+                || windowingMode == WINDOWING_MODE_MULTI_WINDOW);
     }
 
     /**
@@ -5755,6 +5893,33 @@
         return createStackUnchecked(windowingMode, activityType, stackId, onTop, info, intent);
     }
 
+    /** @return the tile to create the next stack in. */
+    private TaskTile updateLaunchTile(int windowingMode) {
+        if (!isSplitScreenWindowingMode(windowingMode)) {
+            // Only split-screen windowing modes interact with tiles.
+            return null;
+        }
+        for (int i = getStackCount() - 1; i >= 0; --i) {
+            final TaskTile t = getStackAt(i).asTile();
+            if (t == null || t.getRequestedOverrideWindowingMode() != windowingMode) {
+                continue;
+            }
+            // If not already set, pick a launch tile which is not the one we are launching
+            // into.
+            if (mLaunchTile == null) {
+                for (int j = 0, n = getStackCount(); j < n; ++j) {
+                    TaskTile tt = getStackAt(j).asTile();
+                    if (tt != t) {
+                        mLaunchTile = tt;
+                        break;
+                    }
+                }
+            }
+            return t;
+        }
+        return mLaunchTile;
+    }
+
     @VisibleForTesting
     ActivityStack createStackUnchecked(int windowingMode, int activityType,
             int stackId, boolean onTop, ActivityInfo info, Intent intent) {
@@ -5767,13 +5932,20 @@
             info.applicationInfo = new ApplicationInfo();
         }
 
+        TaskTile tile = updateLaunchTile(windowingMode);
+        if (tile != null) {
+            // Since this stack will be put into a tile, its windowingMode will be inherited.
+            windowingMode = WINDOWING_MODE_UNDEFINED;
+        }
         final ActivityStack stack = new ActivityStack(this, stackId,
                 mRootWindowContainer.mStackSupervisor, activityType, info, intent);
         addStack(stack, onTop ? POSITION_TOP : POSITION_BOTTOM);
         stack.setWindowingMode(windowingMode, false /* animate */, false /* showRecents */,
                 false /* enteringSplitScreenMode */, false /* deferEnsuringVisibility */,
                 true /* creating */);
-
+        if (tile != null) {
+            tile.addChild(stack, 0 /* index */);
+        }
         return stack;
     }
 
@@ -5993,20 +6165,19 @@
     void onSplitScreenModeDismissed() {
         mAtmService.deferWindowLayout();
         try {
-            // Adjust the windowing mode of any stack in secondary split-screen to fullscreen.
+            mLaunchTile = null;
             for (int i = getStackCount() - 1; i >= 0; --i) {
-                final ActivityStack otherStack = getStackAt(i);
-                if (!otherStack.inSplitScreenSecondaryWindowingMode()) {
-                    continue;
+                final TaskTile t = getStackAt(i).asTile();
+                if (t != null) {
+                    t.removeAllChildren();
                 }
-                otherStack.setWindowingMode(WINDOWING_MODE_UNDEFINED, false /* animate */,
-                        false /* showRecents */, false /* enteringSplitScreenMode */,
-                        true /* deferEnsuringVisibility */, false /* creating */);
             }
+            mDividerControllerLocked.setMinimizedDockedStack(false /* minimized */,
+                    false /* animate */);
         } finally {
             final ActivityStack topFullscreenStack =
                     getTopStackInWindowingMode(WINDOWING_MODE_FULLSCREEN);
-            final ActivityStack homeStack = getRootHomeTask();
+            final ActivityStack homeStack = getOrCreateRootHomeTask();
             if (topFullscreenStack != null && homeStack != null && !isTopStack(homeStack)) {
                 // Whenever split-screen is dismissed we want the home stack directly behind the
                 // current top fullscreen stack so it shows up when the top stack is finished.
@@ -6020,27 +6191,6 @@
         }
     }
 
-    void onSplitScreenModeActivated() {
-        mAtmService.deferWindowLayout();
-        try {
-            // Adjust the windowing mode of any affected by split-screen to split-screen secondary.
-            final ActivityStack splitScreenPrimaryStack = getRootSplitScreenPrimaryTask();
-            for (int i = getStackCount() - 1; i >= 0; --i) {
-                final ActivityStack otherStack = getStackAt(i);
-                if (otherStack == splitScreenPrimaryStack
-                        || !otherStack.affectedBySplitScreenResize()) {
-                    continue;
-                }
-                otherStack.setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY,
-                        false /* animate */, false /* showRecents */,
-                        true /* enteringSplitScreenMode */, true /* deferEnsuringVisibility */,
-                        false /* creating */);
-            }
-        } finally {
-            mAtmService.continueWindowLayout();
-        }
-    }
-
     /**
      * Returns true if the {@param windowingMode} is supported based on other parameters passed in.
      * @param windowingMode The windowing mode we are checking support for.
@@ -6572,7 +6722,7 @@
     }
 
     void moveHomeStackToFront(String reason) {
-        final ActivityStack homeStack = getRootHomeTask();
+        final ActivityStack homeStack = getOrCreateRootHomeTask();
         if (homeStack != null) {
             homeStack.moveToFront(reason);
         }
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index c78707a..e443fe4 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -24,7 +24,7 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
 import static android.content.res.Configuration.UI_MODE_TYPE_CAR;
 import static android.content.res.Configuration.UI_MODE_TYPE_MASK;
-import static android.view.Display.TYPE_BUILT_IN;
+import static android.view.Display.TYPE_INTERNAL;
 import static android.view.InsetsState.ITYPE_BOTTOM_GESTURES;
 import static android.view.InsetsState.ITYPE_BOTTOM_TAPPABLE_ELEMENT;
 import static android.view.InsetsState.ITYPE_LEFT_GESTURES;
@@ -57,8 +57,8 @@
 import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
 import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
 import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
+import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
-import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_DRAW_BAR_BACKGROUNDS;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR;
@@ -145,7 +145,6 @@
 import android.util.Slog;
 import android.view.DisplayCutout;
 import android.view.Gravity;
-import android.view.IApplicationToken;
 import android.view.InputChannel;
 import android.view.InputDevice;
 import android.view.InputEvent;
@@ -333,8 +332,6 @@
     private WindowState mFocusedWindow;
     private WindowState mLastFocusedWindow;
 
-    IApplicationToken mFocusedApp;
-
     // The states of decor windows from the last layout. These are used to generate another display
     // layout in different bounds but with the same states.
     private boolean mLastNavVisible;
@@ -855,7 +852,7 @@
             case TYPE_WALLPAPER:
                 // Dreams and wallpapers don't have an app window token and can thus not be
                 // letterboxed. Hence always let them extend under the cutout.
-                attrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
+                attrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
                 break;
             case TYPE_NOTIFICATION_SHADE:
                 // If the Keyguard is in a hidden state (occluded by another window), we force to
@@ -937,17 +934,17 @@
      * @return If ok, WindowManagerImpl.ADD_OKAY.  If too many singletons,
      * WindowManagerImpl.ADD_MULTIPLE_SINGLETON
      */
-    int validateAddingWindowLw(WindowManager.LayoutParams attrs) {
+    int validateAddingWindowLw(WindowManager.LayoutParams attrs, int callingPid, int callingUid) {
         if ((attrs.privateFlags & PRIVATE_FLAG_IS_SCREEN_DECOR) != 0) {
-            mContext.enforceCallingOrSelfPermission(
-                    android.Manifest.permission.STATUS_BAR_SERVICE,
+            mContext.enforcePermission(
+                    android.Manifest.permission.STATUS_BAR_SERVICE, callingPid, callingUid,
                     "DisplayPolicy");
         }
 
         switch (attrs.type) {
             case TYPE_STATUS_BAR:
-                mContext.enforceCallingOrSelfPermission(
-                        android.Manifest.permission.STATUS_BAR_SERVICE,
+                mContext.enforcePermission(
+                        android.Manifest.permission.STATUS_BAR_SERVICE, callingPid, callingUid,
                         "DisplayPolicy");
                 if (mStatusBar != null) {
                     if (mStatusBar.isAlive()) {
@@ -956,8 +953,8 @@
                 }
                 break;
             case TYPE_NOTIFICATION_SHADE:
-                mContext.enforceCallingOrSelfPermission(
-                        android.Manifest.permission.STATUS_BAR_SERVICE,
+                mContext.enforcePermission(
+                        android.Manifest.permission.STATUS_BAR_SERVICE, callingPid, callingUid,
                         "DisplayPolicy");
                 if (mNotificationShade != null) {
                     if (mNotificationShade.isAlive()) {
@@ -966,8 +963,8 @@
                 }
                 break;
             case TYPE_NAVIGATION_BAR:
-                mContext.enforceCallingOrSelfPermission(
-                        android.Manifest.permission.STATUS_BAR_SERVICE,
+                mContext.enforcePermission(
+                        android.Manifest.permission.STATUS_BAR_SERVICE, callingPid, callingUid,
                         "DisplayPolicy");
                 if (mNavigationBar != null) {
                     if (mNavigationBar.isAlive()) {
@@ -977,16 +974,17 @@
                 break;
             case TYPE_NAVIGATION_BAR_PANEL:
                 // Check for permission if the caller is not the recents component.
-                if (!mService.mAtmInternal.isCallerRecents(Binder.getCallingUid())) {
-                    mContext.enforceCallingOrSelfPermission(
-                            android.Manifest.permission.STATUS_BAR_SERVICE, "DisplayPolicy");
+                if (!mService.mAtmInternal.isCallerRecents(callingUid)) {
+                    mContext.enforcePermission(
+                            android.Manifest.permission.STATUS_BAR_SERVICE, callingPid, callingUid,
+                            "DisplayPolicy");
                 }
                 break;
             case TYPE_STATUS_BAR_PANEL:
             case TYPE_STATUS_BAR_SUB_PANEL:
             case TYPE_VOICE_INTERACTION_STARTING:
-                mContext.enforceCallingOrSelfPermission(
-                        android.Manifest.permission.STATUS_BAR_SERVICE,
+                mContext.enforcePermission(
+                        android.Manifest.permission.STATUS_BAR_SERVICE, callingPid, callingUid,
                         "DisplayPolicy");
                 break;
         }
@@ -1185,6 +1183,11 @@
 
         if (transit == TRANSIT_PREVIEW_DONE) {
             if (win.hasAppShownWindows()) {
+                if (win.isActivityTypeHome()) {
+                    // Dismiss the starting window as soon as possible to avoid the crossfade out
+                    // with old content because home is easier to have different UI states.
+                    return ANIMATION_NONE;
+                }
                 if (DEBUG_ANIM) Slog.i(TAG, "**** STARTING EXIT");
                 return R.anim.app_starting_exit;
             }
@@ -1432,7 +1435,7 @@
         }
     }
 
-    private void simulateLayoutDecorWindow(WindowState win, DisplayFrames displayFrames, int uiMode,
+    private void simulateLayoutDecorWindow(WindowState win, DisplayFrames displayFrames,
             InsetsState insetsState, WindowFrames simulatedWindowFrames, Runnable layout) {
         win.setSimulatedWindowFrames(simulatedWindowFrames);
         try {
@@ -1456,7 +1459,7 @@
         final WindowFrames simulatedWindowFrames = new WindowFrames();
         if (mNavigationBar != null) {
             simulateLayoutDecorWindow(
-                    mNavigationBar, displayFrames, uiMode, insetsState, simulatedWindowFrames,
+                    mNavigationBar, displayFrames, insetsState, simulatedWindowFrames,
                     () -> layoutNavigationBar(displayFrames, uiMode, mLastNavVisible,
                             mLastNavTranslucent, mLastNavAllowedHidden,
                             mLastNotificationShadeForcesShowingNavigation,
@@ -1464,7 +1467,7 @@
         }
         if (mStatusBar != null) {
             simulateLayoutDecorWindow(
-                    mStatusBar, displayFrames, uiMode, insetsState, simulatedWindowFrames,
+                    mStatusBar, displayFrames, insetsState, simulatedWindowFrames,
                     () -> layoutStatusBar(displayFrames, mLastSystemUiFlags,
                             false /* isRealLayout */));
         }
@@ -1511,15 +1514,16 @@
         // nav bar and ensure the application doesn't see the event.
         if (navVisible || navAllowedHidden) {
             if (mInputConsumer != null) {
+                mInputConsumer.dismiss();
                 mHandler.sendMessage(
                         mHandler.obtainMessage(MSG_DISPOSE_INPUT_CONSUMER, mInputConsumer));
                 mInputConsumer = null;
             }
         } else if (mInputConsumer == null && mStatusBar != null && canHideNavigationBar()) {
-            mInputConsumer = mService.createInputConsumer(mHandler.getLooper(),
+            mInputConsumer = mDisplayContent.getInputMonitor().createInputConsumer(
+                    mHandler.getLooper(),
                     INPUT_CONSUMER_NAVIGATION,
-                    HideNavInputEventReceiver::new,
-                    displayFrames.mDisplayId);
+                    HideNavInputEventReceiver::new);
             // As long as mInputConsumer is active, hover events are not dispatched to the app
             // and the pointer icon is likely to become stale. Hide it to avoid confusion.
             InputManager.getInstance().setPointerIconType(PointerIcon.TYPE_NULL);
@@ -1537,7 +1541,7 @@
         if (updateSysUiVisibility) {
             updateSystemUiVisibilityLw();
         }
-        layoutScreenDecorWindows(displayFrames, null /* transientFrames */);
+        layoutScreenDecorWindows(displayFrames, null /* simulatedFrames */);
         postAdjustDisplayFrames(displayFrames);
         mLastNavVisible = navVisible;
         mLastNavTranslucent = navTranslucent;
@@ -1940,6 +1944,7 @@
         final int requestedSysUiFl = PolicyControl.getSystemUiVisibility(null, attrs);
         final int sysUiFl = requestedSysUiFl | getImpliedSysUiFlagsForLayout(attrs);
 
+        displayFrames = win.getDisplayFrames(displayFrames);
         final WindowFrames windowFrames = win.getWindowFrames();
 
         sTmpLastParentFrame.set(windowFrames.mParentFrame);
@@ -2298,15 +2303,24 @@
         // cropped / shifted to the displayFrame in WindowState.
         final boolean floatingInScreenWindow = !attrs.isFullscreen() && layoutInScreen
                 && type != TYPE_BASE_APPLICATION;
-
         // Ensure that windows with a DEFAULT or NEVER display cutout mode are laid out in
         // the cutout safe zone.
-        if (cutoutMode == LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
-                || cutoutMode == LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER) {
+        if (cutoutMode != LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS) {
             final Rect displayCutoutSafeExceptMaybeBars = sTmpDisplayCutoutSafeExceptMaybeBarsRect;
             displayCutoutSafeExceptMaybeBars.set(displayFrames.mDisplayCutoutSafe);
+            if (cutoutMode == LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES) {
+                if (displayFrames.mDisplayWidth < displayFrames.mDisplayHeight) {
+                    displayCutoutSafeExceptMaybeBars.top = Integer.MIN_VALUE;
+                    displayCutoutSafeExceptMaybeBars.bottom = Integer.MAX_VALUE;
+                } else {
+                    displayCutoutSafeExceptMaybeBars.left = Integer.MIN_VALUE;
+                    displayCutoutSafeExceptMaybeBars.right = Integer.MAX_VALUE;
+                }
+            }
+
             if (layoutInScreen && layoutInsetDecor && !requestedFullscreen
-                    && cutoutMode == LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT) {
+                    && (cutoutMode == LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
+                    || cutoutMode == LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES)) {
                 // At the top we have the status bar, so apps that are
                 // LAYOUT_IN_SCREEN | LAYOUT_INSET_DECOR but not FULLSCREEN
                 // already expect that there's an inset there and we don't need to exclude
@@ -2314,7 +2328,8 @@
                 displayCutoutSafeExceptMaybeBars.top = Integer.MIN_VALUE;
             }
             if (layoutInScreen && layoutInsetDecor && !requestedHideNavigation
-                    && cutoutMode == LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT) {
+                    && (cutoutMode == LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
+                    || cutoutMode == LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES)) {
                 // Same for the navigation bar.
                 switch (mNavigationBarPosition) {
                     case NAV_BAR_BOTTOM:
@@ -2975,11 +2990,12 @@
 
     /**
      * Return corner radius in pixels that should be used on windows in order to cover the display.
-     * The radius is only valid for built-in displays since the one who configures window corner
-     * radius cannot know the corner radius of non-built-in display.
+     *
+     * The radius is only valid for internal displays, since the corner radius of external displays
+     * is not known at build time when window corners are configured.
      */
     float getWindowCornerRadius() {
-        return mDisplayContent.getDisplay().getType() == TYPE_BUILT_IN
+        return mDisplayContent.getDisplay().getType() == TYPE_INTERNAL
                 ? ScreenDecorationsUtils.getWindowCornerRadius(mContext.getResources()) : 0f;
     }
 
@@ -3173,7 +3189,7 @@
 
     private void disposeInputConsumer(InputConsumer inputConsumer) {
         if (inputConsumer != null) {
-            inputConsumer.dismiss();
+            inputConsumer.dispose();
         }
     }
 
@@ -3276,7 +3292,6 @@
                 && mLastBehavior == behavior
                 && mLastFocusIsFullscreen == isFullscreen
                 && mLastFocusIsImmersive == isImmersive
-                && mFocusedApp == win.getAppToken()
                 && mLastNonDockedStackBounds.equals(mNonDockedStackBounds)
                 && mLastDockedStackBounds.equals(mDockedStackBounds)) {
             return 0;
@@ -3293,7 +3308,6 @@
         mLastBehavior = behavior;
         mLastFocusIsFullscreen = isFullscreen;
         mLastFocusIsImmersive = isImmersive;
-        mFocusedApp = win.getAppToken();
         mLastNonDockedStackBounds.set(mNonDockedStackBounds);
         mLastDockedStackBounds.set(mDockedStackBounds);
         final Rect fullscreenStackBounds = new Rect(mNonDockedStackBounds);
@@ -3792,9 +3806,6 @@
         if (mFocusedWindow != null) {
             pw.print(prefix); pw.print("mFocusedWindow="); pw.println(mFocusedWindow);
         }
-        if (mFocusedApp != null) {
-            pw.print(prefix); pw.print("mFocusedApp="); pw.println(mFocusedApp);
-        }
         if (mTopFullscreenOpaqueWindowState != null) {
             pw.print(prefix); pw.print("mTopFullscreenOpaqueWindowState=");
             pw.println(mTopFullscreenOpaqueWindowState);
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java
index efe79b3..64c5faa 100644
--- a/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -484,9 +484,11 @@
             prepareNormalRotationAnimation();
         }
 
-        // The display is frozen now, give a remote handler (system ui) some time to reposition
-        // things.
-        startRemoteRotation(oldRotation, mRotation);
+        // TODO(b/147469351): Remove the restriction.
+        if (mDisplayContent.mFixedRotationLaunchingApp == null) {
+            // Give a remote handler (system ui) some time to reposition things.
+            startRemoteRotation(oldRotation, mRotation);
+        }
 
         return true;
     }
@@ -525,8 +527,16 @@
             }
             mService.mH.removeCallbacks(mDisplayRotationHandlerTimeout);
             mIsWaitingForRemoteRotation = false;
-            mDisplayContent.sendNewConfiguration();
-            mService.mAtmService.mTaskOrganizerController.applyContainerTransaction(t);
+            mService.mAtmService.deferWindowLayout();
+            try {
+                mDisplayContent.sendNewConfiguration();
+                if (t != null) {
+                    mService.mAtmService.mTaskOrganizerController.applyContainerTransaction(t,
+                            null /* organizer */);
+                }
+            } finally {
+                mService.mAtmService.continueWindowLayout();
+            }
         }
     }
 
@@ -549,7 +559,15 @@
     @VisibleForTesting
     boolean shouldRotateSeamlessly(int oldRotation, int newRotation, boolean forceUpdate) {
         final WindowState w = mDisplayPolicy.getTopFullscreenOpaqueWindow();
-        if (w == null || w != mDisplayContent.mCurrentFocus) {
+        if (w == null) {
+            return false;
+        }
+        // Display doesn't need to be frozen because application has been started in correct
+        // rotation already, so the rest of the windows can use seamless rotation.
+        if (w.mToken.hasFixedRotationTransform()) {
+            return true;
+        }
+        if (w != mDisplayContent.mCurrentFocus) {
             return false;
         }
         // We only enable seamless rotation if the top window has requested it and is in the
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java
index 872379e..6431e11 100644
--- a/services/core/java/com/android/server/wm/DockedStackDividerController.java
+++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java
@@ -745,7 +745,7 @@
      * @param minimizedDock Whether the docked stack is currently minimized.
      * @param animate Whether to animate the change.
      */
-    private void setMinimizedDockedStack(boolean minimizedDock, boolean animate) {
+    void setMinimizedDockedStack(boolean minimizedDock, boolean animate) {
         final boolean wasMinimized = mMinimizedDock;
         mMinimizedDock = minimizedDock;
         if (minimizedDock == wasMinimized) {
diff --git a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
index 3ff1b95..7255968 100644
--- a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
@@ -39,13 +39,6 @@
     }
 
     /**
-     * Called when Insets have been dispatched to client. This gets called just after onPostLayout.
-     */
-    void onPostInsetsDispatched() {
-        checkShowImePostLayout();
-    }
-
-    /**
      * Called from {@link WindowManagerInternal#showImePostLayout} when {@link InputMethodService}
      * requests to show IME on {@param imeTarget}.
      *
@@ -80,7 +73,7 @@
         };
     }
 
-    private void checkShowImePostLayout() {
+    void checkShowImePostLayout() {
         // check if IME is drawn
         if (mIsImeLayoutDrawn
                 || (mImeTargetFromIme != null
@@ -125,6 +118,7 @@
 
         return (!dcTarget.isClosing() && mImeTargetFromIme == dcTarget)
                 || (mImeTargetFromIme != null && dcTarget.getParentWindow() == mImeTargetFromIme
-                && dcTarget.mSubLayer > mImeTargetFromIme.mSubLayer);
+                        && dcTarget.mSubLayer > mImeTargetFromIme.mSubLayer)
+                || mImeTargetFromIme == mDisplayContent.getImeFallback();
     }
 }
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java
index faa6e52..b638e49 100644
--- a/services/core/java/com/android/server/wm/InputMonitor.java
+++ b/services/core/java/com/android/server/wm/InputMonitor.java
@@ -103,9 +103,17 @@
         @Override
         public void dismiss() {
             synchronized (mService.mGlobalLock) {
-                if (mInputMonitor.destroyInputConsumer(mWindowHandle.name)) {
-                    mInputEventReceiver.dispose();
-                }
+                mInputMonitor.mInputConsumers.remove(mName);
+                hide(mInputMonitor.mInputTransaction);
+                mInputMonitor.updateInputWindowsLw(true /* force */);
+            }
+        }
+
+        @Override
+        public void dispose() {
+            synchronized (mService.mGlobalLock) {
+                disposeChannelsLw();
+                mInputEventReceiver.dispose();
             }
         }
     }
@@ -415,18 +423,18 @@
     }
 
     private final class UpdateInputForAllWindowsConsumer implements Consumer<WindowState> {
-        InputConsumerImpl navInputConsumer;
-        InputConsumerImpl pipInputConsumer;
-        InputConsumerImpl wallpaperInputConsumer;
-        InputConsumerImpl recentsAnimationInputConsumer;
+        InputConsumerImpl mNavInputConsumer;
+        InputConsumerImpl mPipInputConsumer;
+        InputConsumerImpl mWallpaperInputConsumer;
+        InputConsumerImpl mRecentsAnimationInputConsumer;
 
-        private boolean mAddInputConsumerHandle;
+        private boolean mAddNavInputConsumerHandle;
         private boolean mAddPipInputConsumerHandle;
         private boolean mAddWallpaperInputConsumerHandle;
         private boolean mAddRecentsAnimationInputConsumerHandle;
 
-        boolean inDrag;
-        WallpaperController wallpaperController;
+        boolean mInDrag;
+        WallpaperController mWallpaperController;
 
         // An invalid window handle that tells SurfaceFlinger not update the input info.
         final InputWindowHandle mInvalidInputWindow = new InputWindowHandle(null, mDisplayId);
@@ -434,20 +442,20 @@
         private void updateInputWindows(boolean inDrag) {
             Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateInputWindows");
 
-            navInputConsumer = getInputConsumer(INPUT_CONSUMER_NAVIGATION);
-            pipInputConsumer = getInputConsumer(INPUT_CONSUMER_PIP);
-            wallpaperInputConsumer = getInputConsumer(INPUT_CONSUMER_WALLPAPER);
-            recentsAnimationInputConsumer = getInputConsumer(INPUT_CONSUMER_RECENTS_ANIMATION);
+            mNavInputConsumer = getInputConsumer(INPUT_CONSUMER_NAVIGATION);
+            mPipInputConsumer = getInputConsumer(INPUT_CONSUMER_PIP);
+            mWallpaperInputConsumer = getInputConsumer(INPUT_CONSUMER_WALLPAPER);
+            mRecentsAnimationInputConsumer = getInputConsumer(INPUT_CONSUMER_RECENTS_ANIMATION);
 
-            mAddInputConsumerHandle = navInputConsumer != null;
-            mAddPipInputConsumerHandle = pipInputConsumer != null;
-            mAddWallpaperInputConsumerHandle = wallpaperInputConsumer != null;
-            mAddRecentsAnimationInputConsumerHandle = recentsAnimationInputConsumer != null;
+            mAddNavInputConsumerHandle = mNavInputConsumer != null;
+            mAddPipInputConsumerHandle = mPipInputConsumer != null;
+            mAddWallpaperInputConsumerHandle = mWallpaperInputConsumer != null;
+            mAddRecentsAnimationInputConsumerHandle = mRecentsAnimationInputConsumer != null;
 
             mTmpRect.setEmpty();
             mDisableWallpaperTouchEvents = false;
-            this.inDrag = inDrag;
-            wallpaperController = mDisplayContent.mWallpaperController;
+            mInDrag = inDrag;
+            mWallpaperController = mDisplayContent.mWallpaperController;
 
             resetInputConsumers(mInputTransaction);
 
@@ -455,7 +463,7 @@
                     true /* traverseTopToBottom */);
 
             if (mAddWallpaperInputConsumerHandle) {
-                wallpaperInputConsumer.show(mInputTransaction, 0);
+                mWallpaperInputConsumer.show(mInputTransaction, 0);
             }
 
             if (mApplyImmediately) {
@@ -494,8 +502,8 @@
                 if (recentsAnimationController != null
                         && recentsAnimationController.shouldApplyInputConsumer(w.mActivityRecord)) {
                     if (recentsAnimationController.updateInputConsumerForApp(
-                            recentsAnimationInputConsumer.mWindowHandle, hasFocus)) {
-                        recentsAnimationInputConsumer.show(mInputTransaction, w);
+                            mRecentsAnimationInputConsumer.mWindowHandle, hasFocus)) {
+                        mRecentsAnimationInputConsumer.show(mInputTransaction, w);
                         mAddRecentsAnimationInputConsumerHandle = false;
                     }
                 }
@@ -505,25 +513,25 @@
                 if (mAddPipInputConsumerHandle) {
                     // Update the bounds of the Pip input consumer to match the window bounds.
                     w.getBounds(mTmpRect);
-                    pipInputConsumer.layout(mInputTransaction, mTmpRect);
+                    mPipInputConsumer.layout(mInputTransaction, mTmpRect);
 
                     // The touchable region is relative to the surface top-left
                     mTmpRect.offsetTo(0, 0);
-                    pipInputConsumer.mWindowHandle.touchableRegion.set(mTmpRect);
-                    pipInputConsumer.show(mInputTransaction, w);
+                    mPipInputConsumer.mWindowHandle.touchableRegion.set(mTmpRect);
+                    mPipInputConsumer.show(mInputTransaction, w);
                     mAddPipInputConsumerHandle = false;
                 }
             }
 
-            if (mAddInputConsumerHandle) {
-                navInputConsumer.show(mInputTransaction, w);
-                mAddInputConsumerHandle = false;
+            if (mAddNavInputConsumerHandle) {
+                mNavInputConsumer.show(mInputTransaction, w);
+                mAddNavInputConsumerHandle = false;
             }
 
             if (mAddWallpaperInputConsumerHandle) {
                 if (w.mAttrs.type == TYPE_WALLPAPER && w.isVisibleLw()) {
                     // Add the wallpaper input consumer above the first visible wallpaper.
-                    wallpaperInputConsumer.show(mInputTransaction, w);
+                    mWallpaperInputConsumer.show(mInputTransaction, w);
                     mAddWallpaperInputConsumerHandle = false;
                 }
             }
@@ -531,13 +539,13 @@
             if ((privateFlags & PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS) != 0) {
                 mDisableWallpaperTouchEvents = true;
             }
-            final boolean hasWallpaper = wallpaperController.isWallpaperTarget(w)
+            final boolean hasWallpaper = mWallpaperController.isWallpaperTarget(w)
                     && !mService.mPolicy.isKeyguardShowing()
                     && !mDisableWallpaperTouchEvents;
 
             // If there's a drag in progress and 'child' is a potential drop target,
             // make sure it's been told about the drag
-            if (inDrag && isVisible && w.getDisplayContent().isDefaultDisplay) {
+            if (mInDrag && isVisible && w.getDisplayContent().isDefaultDisplay) {
                 mService.mDragDropController.sendDragStartedIfNeededLocked(w);
             }
 
diff --git a/services/core/java/com/android/server/wm/InsetsPolicy.java b/services/core/java/com/android/server/wm/InsetsPolicy.java
index d0179ad..b663336 100644
--- a/services/core/java/com/android/server/wm/InsetsPolicy.java
+++ b/services/core/java/com/android/server/wm/InsetsPolicy.java
@@ -41,9 +41,10 @@
 import android.view.SurfaceControl;
 import android.view.SyncRtSurfaceTransactionApplier;
 import android.view.ViewRootImpl;
-import android.view.WindowInsetsAnimationCallback;
+import android.view.WindowInsetsAnimation;
 import android.view.WindowInsetsAnimationControlListener;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.server.DisplayThread;
 
 /**
@@ -107,11 +108,11 @@
             changed = true;
         }
         if (changed) {
-            startAnimation(mShowingTransientTypes, true, () -> {
+            mPolicy.getStatusBarManagerInternal().showTransient(mDisplayContent.getDisplayId(),
+                    mShowingTransientTypes.toArray());
+            updateBarControlTarget(mFocusedWin);
+            startAnimation(true /* show */, () -> {
                 synchronized (mDisplayContent.mWmService.mGlobalLock) {
-                    mPolicy.getStatusBarManagerInternal().showTransient(
-                            mDisplayContent.getDisplayId(),
-                            mShowingTransientTypes.toArray());
                     mStateController.notifyInsetsChanged();
                 }
             });
@@ -122,7 +123,7 @@
         if (mShowingTransientTypes.size() == 0) {
             return;
         }
-        startAnimation(mShowingTransientTypes, false, () -> {
+        startAnimation(false /* show */, () -> {
             synchronized (mDisplayContent.mWmService.mGlobalLock) {
                 mShowingTransientTypes.clear();
                 mStateController.notifyInsetsChanged();
@@ -268,18 +269,20 @@
         return isDockedStackVisible || isFreeformStackVisible || isResizing;
     }
 
-    private void startAnimation(IntArray internalTypes, boolean show, Runnable callback) {
+    @VisibleForTesting
+    void startAnimation(boolean show, Runnable callback) {
         int typesReady = 0;
         final SparseArray<InsetsSourceControl> controls = new SparseArray<>();
-        updateBarControlTarget(mFocusedWin);
-        for (int i = internalTypes.size() - 1; i >= 0; i--) {
+        final IntArray showingTransientTypes = mShowingTransientTypes;
+        for (int i = showingTransientTypes.size() - 1; i >= 0; i--) {
             InsetsSourceProvider provider =
-                    mStateController.getSourceProvider(internalTypes.get(i));
-            if (provider == null) continue;
-            InsetsSourceControl control = provider.getControl(provider.getControlTarget());
-            if (control == null || control.getLeash() == null) continue;
-            typesReady |= InsetsState.toPublicType(internalTypes.get(i));
-            controls.put(control.getType(), control);
+                    mStateController.getSourceProvider(showingTransientTypes.get(i));
+            InsetsSourceControl control = provider.getControl(mTransientControlTarget);
+            if (control == null || control.getLeash() == null) {
+                continue;
+            }
+            typesReady |= InsetsState.toPublicType(showingTransientTypes.get(i));
+            controls.put(control.getType(), new InsetsSourceControl(control));
         }
         controlAnimationUnchecked(typesReady, controls, show, callback);
     }
@@ -335,7 +338,6 @@
             private InsetsPolicyAnimationControlListener mListener;
 
             InsetsPolicyAnimationControlCallbacks(InsetsPolicyAnimationControlListener listener) {
-                super();
                 mListener = listener;
             }
 
@@ -353,9 +355,11 @@
                         InsetsController.INTERPOLATOR, true,
                         show ? LAYOUT_INSETS_DURING_ANIMATION_SHOWN
                                 : LAYOUT_INSETS_DURING_ANIMATION_HIDDEN);
+                SurfaceAnimationThread.getHandler().post(
+                        () -> mListener.onReady(mAnimationControl, typesReady));
             }
 
-            /** Called on SurfaceAnimationThread lock without global WM lock held. */
+            /** Called on SurfaceAnimationThread without global WM lock held. */
             @Override
             public void scheduleApplyChangeInsets() {
                 InsetsState state = getState();
@@ -384,7 +388,7 @@
                 return overrideState;
             }
 
-            /** Called on SurfaceAnimationThread lock without global WM lock held. */
+            /** Called on SurfaceAnimationThread without global WM lock held. */
             @Override
             public void applySurfaceParams(
                     final SyncRtSurfaceTransactionApplier.SurfaceParams... params) {
@@ -396,14 +400,12 @@
                 t.apply();
             }
 
-            /** Called on SurfaceAnimationThread lock without global WM lock held. */
             @Override
             public void startAnimation(InsetsAnimationControlImpl controller,
                     WindowInsetsAnimationControlListener listener, int types,
-                    WindowInsetsAnimationCallback.InsetsAnimation animation,
-                    WindowInsetsAnimationCallback.AnimationBounds bounds,
+                    WindowInsetsAnimation animation,
+                    WindowInsetsAnimation.Bounds bounds,
                     int layoutDuringAnimation) {
-                SurfaceAnimationThread.getHandler().post(() -> listener.onReady(controller, types));
             }
         }
     }
diff --git a/services/core/java/com/android/server/wm/InsetsSourceProvider.java b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
index 0418afaf..0d3f6b9 100644
--- a/services/core/java/com/android/server/wm/InsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
@@ -59,6 +59,7 @@
     private final InsetsSourceControl mFakeControl;
     private @Nullable InsetsSourceControl mControl;
     private @Nullable InsetsControlTarget mControlTarget;
+    private @Nullable InsetsControlTarget mPendingControlTarget;
     private @Nullable InsetsControlTarget mFakeControlTarget;
 
     private @Nullable ControlAdapter mAdapter;
@@ -140,8 +141,9 @@
             mSource.setVisibleFrame(null);
         } else if (mControllable) {
             mWin.setControllableInsetProvider(this);
-            if (mControlTarget != null) {
-                updateControlForTarget(mControlTarget, true /* force */);
+            if (mPendingControlTarget != null) {
+                updateControlForTarget(mPendingControlTarget, true /* force */);
+                mPendingControlTarget = null;
             }
         }
     }
@@ -240,8 +242,12 @@
             target = target.getWindow().getImeControlTarget();
         }
 
+        if (mWin != null && mWin.getSurfaceControl() == null) {
+            // if window doesn't have a surface, set it null and return.
+            setWindow(null, null, null);
+        }
         if (mWin == null) {
-            mControlTarget = target;
+            mPendingControlTarget = target;
             return;
         }
         if (target == mControlTarget && !force) {
diff --git a/services/core/java/com/android/server/wm/InsetsStateController.java b/services/core/java/com/android/server/wm/InsetsStateController.java
index caaa430..a8fe349 100644
--- a/services/core/java/com/android/server/wm/InsetsStateController.java
+++ b/services/core/java/com/android/server/wm/InsetsStateController.java
@@ -16,6 +16,7 @@
 
 package com.android.server.wm;
 
+import static android.view.InsetsState.ITYPE_CAPTION_BAR;
 import static android.view.InsetsState.ITYPE_IME;
 import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
 import static android.view.InsetsState.ITYPE_STATUS_BAR;
@@ -89,6 +90,12 @@
         if (type == ITYPE_NAVIGATION_BAR) {
             state.removeSource(ITYPE_IME);
             state.removeSource(ITYPE_STATUS_BAR);
+            state.removeSource(ITYPE_CAPTION_BAR);
+        }
+
+        // Status bar doesn't get influenced by caption bar
+        if (type == ITYPE_STATUS_BAR) {
+            state.removeSource(ITYPE_CAPTION_BAR);
         }
 
         // IME needs different frames for certain cases (e.g. navigation bar in gesture nav).
@@ -161,7 +168,6 @@
             mLastState.set(mState, true /* copySources */);
             notifyInsetsChanged();
         }
-        getImeSourceProvider().onPostInsetsDispatched();
     }
 
     void onInsetsModified(InsetsControlTarget windowState, InsetsState state) {
@@ -212,18 +218,18 @@
     /**
      * Called when the focused window that is able to control the system bars changes.
      *
-     * @param topControlling The target that is now able to control the top bar appearance
-     *                       and visibility.
+     * @param statusControlling The target that is now able to control the status bar appearance
+     *                          and visibility.
      * @param navControlling The target that is now able to control the nav bar appearance
      *                       and visibility.
      */
-    void onBarControlTargetChanged(@Nullable InsetsControlTarget topControlling,
-            @Nullable InsetsControlTarget fakeTopControlling,
+    void onBarControlTargetChanged(@Nullable InsetsControlTarget statusControlling,
+            @Nullable InsetsControlTarget fakeStatusControlling,
             @Nullable InsetsControlTarget navControlling,
             @Nullable InsetsControlTarget fakeNavControlling) {
-        onControlChanged(ITYPE_STATUS_BAR, topControlling);
+        onControlChanged(ITYPE_STATUS_BAR, statusControlling);
         onControlChanged(ITYPE_NAVIGATION_BAR, navControlling);
-        onControlFakeTargetChanged(ITYPE_STATUS_BAR, fakeTopControlling);
+        onControlFakeTargetChanged(ITYPE_STATUS_BAR, fakeStatusControlling);
         onControlFakeTargetChanged(ITYPE_NAVIGATION_BAR, fakeNavControlling);
         notifyPendingInsetsControlChanged();
     }
diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java
index 00947d7..44034ed 100644
--- a/services/core/java/com/android/server/wm/KeyguardController.java
+++ b/services/core/java/com/android/server/wm/KeyguardController.java
@@ -31,14 +31,14 @@
 import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_TO_SHADE;
 import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_WITH_WALLPAPER;
 
+import static com.android.server.wm.ActivityStackSupervisor.PRESERVE_WINDOWS;
+import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
+import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
 import static com.android.server.wm.KeyguardControllerProto.AOD_SHOWING;
 import static com.android.server.wm.KeyguardControllerProto.KEYGUARD_OCCLUDED_STATES;
 import static com.android.server.wm.KeyguardControllerProto.KEYGUARD_SHOWING;
 import static com.android.server.wm.KeyguardOccludedProto.DISPLAY_ID;
 import static com.android.server.wm.KeyguardOccludedProto.KEYGUARD_OCCLUDED;
-import static com.android.server.wm.ActivityStackSupervisor.PRESERVE_WINDOWS;
-import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
-import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
 
 import android.os.IBinder;
 import android.os.RemoteException;
@@ -411,8 +411,7 @@
             if (stack == null) {
                 return;
             }
-            mStackSupervisor.moveTasksToFullscreenStackLocked(stack,
-                    stack.isFocusedStackOnDisplay());
+            mRootWindowContainer.getDefaultDisplay().onSplitScreenModeDismissed();
         }
     }
 
diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java
index a9dc36d..3771b3e 100644
--- a/services/core/java/com/android/server/wm/RecentTasks.java
+++ b/services/core/java/com/android/server/wm/RecentTasks.java
@@ -42,6 +42,7 @@
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
 
+import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.app.ActivityTaskManager;
 import android.app.AppGlobals;
@@ -155,6 +156,7 @@
      */
     private int mRecentsUid = -1;
     private ComponentName mRecentsComponent = null;
+    private @Nullable String mFeatureId;
 
     /**
      * Mapping of user id -> whether recent tasks have been loaded for that user.
@@ -418,6 +420,13 @@
     }
 
     /**
+     * @return the featureId for the recents component.
+     */
+    @Nullable String getRecentsComponentFeatureId() {
+        return mFeatureId;
+    }
+
+    /**
      * @return the uid for the recents component.
      */
     int getRecentsComponentUid() {
diff --git a/services/core/java/com/android/server/wm/RecentsAnimation.java b/services/core/java/com/android/server/wm/RecentsAnimation.java
index 9770947..b0492be 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimation.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimation.java
@@ -63,6 +63,7 @@
     private final DisplayContent mDefaultDisplay;
     private final Intent mTargetIntent;
     private final ComponentName mRecentsComponent;
+    private final @Nullable String mRecentsFeatureId;
     private final int mRecentsUid;
     private final @Nullable WindowProcessController mCaller;
     private final int mUserId;
@@ -80,8 +81,8 @@
 
     RecentsAnimation(ActivityTaskManagerService atm, ActivityStackSupervisor stackSupervisor,
             ActivityStartController activityStartController, WindowManagerService wm,
-            Intent targetIntent, ComponentName recentsComponent, int recentsUid,
-            @Nullable WindowProcessController caller) {
+            Intent targetIntent, ComponentName recentsComponent, @Nullable String recentsFeatureId,
+            int recentsUid, @Nullable WindowProcessController caller) {
         mService = atm;
         mStackSupervisor = stackSupervisor;
         mDefaultDisplay = mService.mRootWindowContainer.getDefaultDisplay();
@@ -89,6 +90,7 @@
         mWindowManager = wm;
         mTargetIntent = targetIntent;
         mRecentsComponent = recentsComponent;
+        mRecentsFeatureId = recentsFeatureId;
         mRecentsUid = recentsUid;
         mCaller = caller;
         mUserId = atm.getCurrentUserId();
@@ -456,6 +458,7 @@
                 .obtainStarter(mTargetIntent, reason)
                 .setCallingUid(mRecentsUid)
                 .setCallingPackage(mRecentsComponent.getPackageName())
+                .setCallingFeatureId(mRecentsFeatureId)
                 .setActivityOptions(new SafeActivityOptions(options))
                 .setUserId(mUserId)
                 .execute();
diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index 944e0ae..e923e64 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimationController.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java
@@ -20,7 +20,6 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 import static android.view.RemoteAnimationTarget.MODE_CLOSING;
 import static android.view.RemoteAnimationTarget.MODE_OPENING;
-import static android.view.WindowManager.DOCKED_INVALID;
 import static android.view.WindowManager.INPUT_CONSUMER_RECENTS_ANIMATION;
 import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
 
@@ -34,6 +33,7 @@
 import static com.android.server.wm.WindowManagerInternal.AppTransitionListener;
 
 import android.annotation.IntDef;
+import android.annotation.NonNull;
 import android.app.ActivityManager.TaskSnapshot;
 import android.app.WindowConfiguration;
 import android.graphics.Point;
@@ -414,15 +414,15 @@
         }
 
         // Save the minimized home height
-        final ActivityStack dockedStack =
-                mDisplayContent.getRootSplitScreenPrimaryTask();
-        mDisplayContent.getDockedDividerController().getHomeStackBoundsInDockedMode(
-                mDisplayContent.getConfiguration(),
-                dockedStack == null ? DOCKED_INVALID : dockedStack.getDockSide(),
-                mMinimizedHomeBounds);
+        mMinimizedHomeBounds = mDisplayContent.getRootHomeTask().getBounds();
 
         mService.mWindowPlacerLocked.performSurfacePlacement();
 
+        // If the target activity has a fixed orientation which is different from the current top
+        // activity, it will be rotated before being shown so we avoid a screen rotation
+        // animation when showing the Recents view.
+        mDisplayContent.rotateInDifferentOrientationIfNeeded(mTargetActivityRecord);
+
         // Notify that the animation has started
         if (mStatusBar != null) {
             mStatusBar.onRecentsAnimationStateChanged(true /* running */);
@@ -695,6 +695,9 @@
                 mDisplayContent.mAppTransition.notifyAppTransitionFinishedLocked(
                         mTargetActivityRecord.token);
             }
+            if (mTargetActivityRecord.hasFixedRotationTransform()) {
+                mTargetActivityRecord.clearFixedRotationTransform();
+            }
         }
 
         // Notify that the animation has ended
@@ -748,8 +751,10 @@
     }
 
     boolean isWallpaperVisible(WindowState w) {
-        return w != null && w.mAttrs.type == TYPE_BASE_APPLICATION && w.mActivityRecord != null
-                && mTargetActivityRecord == w.mActivityRecord && isTargetOverWallpaper();
+        return w != null && w.mAttrs.type == TYPE_BASE_APPLICATION &&
+                ((w.mActivityRecord != null && mTargetActivityRecord == w.mActivityRecord)
+                        || isAnimatingTask(w.getTask()))
+                && isTargetOverWallpaper();
     }
 
     /**
@@ -826,6 +831,19 @@
         return task != null && isAnimatingTask(task) && !isTargetApp(windowState.mActivityRecord);
     }
 
+    /**
+     * If the animation target ActivityRecord has a fixed rotation ({@link
+     * WindowToken#hasFixedRotationTransform()}, the provided wallpaper will be rotated accordingly.
+     *
+     * This avoids any screen rotation animation when animating to the Recents view.
+     */
+    void applyFixedRotationTransformIfNeeded(@NonNull WindowToken wallpaper) {
+        if (mTargetActivityRecord == null) {
+            return;
+        }
+        wallpaper.applyFixedRotationTransform(mTargetActivityRecord);
+    }
+
     @VisibleForTesting
     class TaskAnimationAdapter implements AnimationAdapter {
 
@@ -842,8 +860,8 @@
             mTask = task;
             mIsRecentTaskInvisible = isRecentTaskInvisible;
             final WindowContainer container = mTask.getParent();
-            container.getRelativeDisplayedPosition(mPosition);
             mBounds.set(container.getDisplayedBounds());
+            mPosition.set(mBounds.left, mBounds.top);
         }
 
         RemoteAnimationTarget createRemoteAnimationTarget() {
diff --git a/services/core/java/com/android/server/wm/ResetTargetTaskHelper.java b/services/core/java/com/android/server/wm/ResetTargetTaskHelper.java
index 2f61ca0..63346b9 100644
--- a/services/core/java/com/android/server/wm/ResetTargetTaskHelper.java
+++ b/services/core/java/com/android/server/wm/ResetTargetTaskHelper.java
@@ -67,7 +67,7 @@
 
         final PooledConsumer c = PooledLambda.obtainConsumer(
                 ResetTargetTaskHelper::processTask, this, PooledLambda.__(Task.class));
-        targetTask.mWmService.mRoot.forAllTasks(c);
+        targetTask.mWmService.mRoot.forAllTasks(c, true /*traverseTopToBottom*/, mTargetStack);
         c.recycle();
 
         processPendingReparentActivities();
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 2fdcbc90..2596452 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -1998,8 +1998,6 @@
         removeStacksInWindowingModes(WINDOWING_MODE_PINNED);
 
         mUserStackInFront.put(mCurrentUser, focusStackId);
-        final int restoreStackId =
-                mUserStackInFront.get(userId, getDefaultDisplay().getRootHomeTask().getRootTaskId());
         mCurrentUser = userId;
 
         mStackSupervisor.mStartingUsers.add(uss);
@@ -2008,16 +2006,13 @@
             for (int stackNdx = display.getStackCount() - 1; stackNdx >= 0; --stackNdx) {
                 final ActivityStack stack = display.getStackAt(stackNdx);
                 stack.switchUser(userId);
-                Task task = stack.getTopMostTask();
-                if (task != null && task != stack) {
-                    stack.positionChildAtTop(task);
-                }
             }
         }
 
+        final int restoreStackId = mUserStackInFront.get(userId);
         ActivityStack stack = getStack(restoreStackId);
         if (stack == null) {
-            stack = getDefaultDisplay().getRootHomeTask();
+            stack = getDefaultDisplay().getOrCreateRootHomeTask();
         }
         final boolean homeInFront = stack.isActivityTypeHome();
         if (stack.isOnHomeDisplay()) {
@@ -2039,8 +2034,11 @@
      */
     void updateUserStack(int userId, ActivityStack stack) {
         if (userId != mCurrentUser) {
-            mUserStackInFront.put(userId, stack != null ? stack.getRootTaskId()
-                    : getDefaultDisplay().getRootHomeTask().getRootTaskId());
+            if (stack == null) {
+                stack = getDefaultDisplay().getOrCreateRootHomeTask();
+            }
+
+            mUserStackInFront.put(userId, stack.getRootTaskId());
         }
     }
 
@@ -3323,6 +3321,14 @@
      * @return {@code true} if the top activity looks like it belongs to {@param userId}.
      */
     private void taskTopActivityIsUser(Task task, @UserIdInt int userId) {
+        // TODO(b/80414790): having utilities to loop for all leaf tasks from caller vs. checking
+        //  leaf tasks here.
+        if (!task.isLeafTask()) {
+            // No op if not a leaf task since we don't want to report root tasks to
+            // TaskStackListeners.
+            return;
+        }
+
         // To handle the case that work app is in the task but just is not the top one.
         final ActivityRecord activityRecord = task.getTopNonFinishingActivity();
         final ActivityRecord resultTo = (activityRecord != null ? activityRecord.resultTo : null);
diff --git a/services/core/java/com/android/server/wm/SeamlessRotator.java b/services/core/java/com/android/server/wm/SeamlessRotator.java
index c621c48..024da88 100644
--- a/services/core/java/com/android/server/wm/SeamlessRotator.java
+++ b/services/core/java/com/android/server/wm/SeamlessRotator.java
@@ -20,6 +20,7 @@
 import static android.view.Surface.ROTATION_90;
 
 import android.graphics.Matrix;
+import android.graphics.Rect;
 import android.os.IBinder;
 import android.view.DisplayInfo;
 import android.view.Surface.Rotation;
@@ -27,6 +28,7 @@
 import android.view.SurfaceControl.Transaction;
 
 import com.android.server.wm.utils.CoordinateTransforms;
+import com.android.server.wm.utils.InsetUtils;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -45,34 +47,51 @@
     private final float[] mFloat9 = new float[9];
     private final int mOldRotation;
     private final int mNewRotation;
+    private final int mRotationDelta;
+    private final int mW;
+    private final int mH;
 
     public SeamlessRotator(@Rotation int oldRotation, @Rotation int newRotation, DisplayInfo info) {
         mOldRotation = oldRotation;
         mNewRotation = newRotation;
+        mRotationDelta = DisplayContent.deltaRotation(oldRotation, newRotation);
 
         final boolean flipped = info.rotation == ROTATION_90 || info.rotation == ROTATION_270;
-        final int h = flipped ? info.logicalWidth : info.logicalHeight;
-        final int w = flipped ? info.logicalHeight : info.logicalWidth;
+        mH = flipped ? info.logicalWidth : info.logicalHeight;
+        mW = flipped ? info.logicalHeight : info.logicalWidth;
 
         final Matrix tmp = new Matrix();
-        CoordinateTransforms.transformLogicalToPhysicalCoordinates(oldRotation, w, h, mTransform);
-        CoordinateTransforms.transformPhysicalToLogicalCoordinates(newRotation, w, h, tmp);
+        CoordinateTransforms.transformLogicalToPhysicalCoordinates(oldRotation, mW, mH, mTransform);
+        CoordinateTransforms.transformPhysicalToLogicalCoordinates(newRotation, mW, mH, tmp);
         mTransform.postConcat(tmp);
     }
 
     /**
-     * Applies a transform to the {@link WindowState} surface that undoes the effect of the global
-     * display rotation.
+     * Applies a transform to the {@link WindowContainer} surface that undoes the effect of the
+     * global display rotation.
      */
-    public void unrotate(Transaction transaction, WindowState win) {
+    public void unrotate(Transaction transaction, WindowContainer win) {
         transaction.setMatrix(win.getSurfaceControl(), mTransform, mFloat9);
-
         // WindowState sets the position of the window so transform the position and update it.
         final float[] winSurfacePos = {win.mLastSurfacePosition.x, win.mLastSurfacePosition.y};
         mTransform.mapPoints(winSurfacePos);
         transaction.setPosition(win.getSurfaceControl(), winSurfacePos[0], winSurfacePos[1]);
     }
 
+    /** Rotates the frame from {@link #mNewRotation} to {@link #mOldRotation}. */
+    void unrotateFrame(Rect inOut) {
+        if (mRotationDelta == ROTATION_90) {
+            inOut.set(inOut.top, mH - inOut.right, inOut.bottom, mH - inOut.left);
+        } else if (mRotationDelta == ROTATION_270) {
+            inOut.set(mW - inOut.bottom, inOut.left, mW - inOut.top, inOut.right);
+        }
+    }
+
+    /** Rotates the insets from {@link #mNewRotation} to {@link #mOldRotation}. */
+    void unrotateInsets(Rect inOut) {
+        InsetUtils.rotateInsets(inOut, mRotationDelta);
+    }
+
     /**
      * Returns the rotation of the display before it started rotating.
      *
@@ -95,10 +114,8 @@
      * it.
      */
     public void finish(WindowState win, boolean timeout) {
-        mTransform.reset();
         final Transaction t = win.getPendingTransaction();
-        t.setMatrix(win.mSurfaceControl, mTransform, mFloat9);
-        t.setPosition(win.mSurfaceControl, win.mLastSurfacePosition.x, win.mLastSurfacePosition.y);
+        finish(t, win);
         if (win.mWinAnimator.mSurfaceController != null && !timeout) {
             t.deferTransactionUntil(win.mSurfaceControl,
                     win.getDeferTransactionBarrier(), win.getFrameNumber());
@@ -107,6 +124,13 @@
         }
     }
 
+    /** Removes the transform and restore to the original last position. */
+    void finish(Transaction t, WindowContainer win) {
+        mTransform.reset();
+        t.setMatrix(win.mSurfaceControl, mTransform, mFloat9);
+        t.setPosition(win.mSurfaceControl, win.mLastSurfacePosition.x, win.mLastSurfacePosition.y);
+    }
+
     public void dump(PrintWriter pw) {
         pw.print("{old="); pw.print(mOldRotation); pw.print(", new="); pw.print(mNewRotation);
         pw.print("}");
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 87c91ef..c7f2cc7 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -79,11 +79,6 @@
 import static com.android.server.wm.ActivityTaskManagerService.TAG_STACK;
 import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_DOCKED_DIVIDER;
 import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_ADD_REMOVE;
-import static com.android.server.wm.TaskProto.DISPLAYED_BOUNDS;
-import static com.android.server.wm.TaskProto.FILLS_PARENT;
-import static com.android.server.wm.TaskProto.SURFACE_HEIGHT;
-import static com.android.server.wm.TaskProto.SURFACE_WIDTH;
-import static com.android.server.wm.TaskProto.WINDOW_CONTAINER;
 import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN;
 import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK;
@@ -104,6 +99,7 @@
 import android.app.ActivityOptions;
 import android.app.ActivityTaskManager;
 import android.app.AppGlobals;
+import android.app.PictureInPictureParams;
 import android.app.TaskInfo;
 import android.app.WindowConfiguration;
 import android.content.ComponentName;
@@ -125,7 +121,6 @@
 import android.service.voice.IVoiceInteractionSession;
 import android.util.DisplayMetrics;
 import android.util.Slog;
-import android.util.proto.ProtoOutputStream;
 import android.view.DisplayInfo;
 import android.view.ITaskOrganizer;
 import android.view.RemoteAnimationTarget;
@@ -189,6 +184,7 @@
     private static final String ATTR_TASK_AFFILIATION_COLOR = "task_affiliation_color";
     private static final String ATTR_CALLING_UID = "calling_uid";
     private static final String ATTR_CALLING_PACKAGE = "calling_package";
+    private static final String ATTR_CALLING_FEATURE_ID = "calling_feature_id";
     private static final String ATTR_SUPPORTS_PICTURE_IN_PICTURE = "supports_picture_in_picture";
     private static final String ATTR_RESIZE_MODE = "resize_mode";
     private static final String ATTR_NON_FULLSCREEN_BOUNDS = "non_fullscreen_bounds";
@@ -203,6 +199,7 @@
     static final int INVALID_MIN_SIZE = -1;
     private float mShadowRadius = 0;
     private final Rect mLastSurfaceCrop = new Rect();
+    private static final boolean ENABLE_FREEFORM_COMPOSITOR_SHADOWS = false;
 
     /**
      * The modes to control how the stack is moved to the front when calling {@link Task#reparent}.
@@ -302,6 +299,7 @@
     // For relaunching the task from recents as though it was launched by the original launcher.
     int mCallingUid;
     String mCallingPackage;
+    String mCallingFeatureId;
 
     private final Rect mTmpStableBounds = new Rect();
     private final Rect mTmpNonDecorBounds = new Rect();
@@ -467,6 +465,11 @@
      */
     ITaskOrganizer mTaskOrganizer;
 
+    /**
+     * Last Picture-in-Picture params applicable to the task. Updated when the app
+     * enters Picture-in-Picture or when setPictureInPictureParams is called.
+     */
+    PictureInPictureParams mPictureInPictureParams = new PictureInPictureParams.Builder().build();
 
     /**
      * Don't use constructor directly. Use {@link #create(ActivityTaskManagerService, int,
@@ -483,8 +486,8 @@
                 true /*neverRelinquishIdentity*/,
                 _taskDescription != null ? _taskDescription : new TaskDescription(),
                 _taskId, INVALID_TASK_ID, INVALID_TASK_ID, 0 /*taskAffiliationColor*/,
-                info.applicationInfo.uid, info.packageName, info.resizeMode,
-                info.supportsPictureInPicture(), false /*_realActivitySuspended*/,
+                info.applicationInfo.uid, info.packageName, null /* default featureId */,
+                info.resizeMode, info.supportsPictureInPicture(), false /*_realActivitySuspended*/,
                 false /*userSetupComplete*/, INVALID_MIN_SIZE, INVALID_MIN_SIZE, info,
                 _voiceSession, _voiceInteractor, stack);
     }
@@ -506,18 +509,17 @@
     }
 
     /** Don't use constructor directly. This is only used by XML parser. */
-    Task(ActivityTaskManagerService atmService, int _taskId, Intent _intent,
-            Intent _affinityIntent, String _affinity, String _rootAffinity,
-            ComponentName _realActivity, ComponentName _origActivity, boolean _rootWasReset,
-            boolean _autoRemoveRecents, boolean _askedCompatMode, int _userId,
-            int _effectiveUid, String _lastDescription,
+    Task(ActivityTaskManagerService atmService, int _taskId, Intent _intent, Intent _affinityIntent,
+            String _affinity, String _rootAffinity, ComponentName _realActivity,
+            ComponentName _origActivity, boolean _rootWasReset, boolean _autoRemoveRecents,
+            boolean _askedCompatMode, int _userId, int _effectiveUid, String _lastDescription,
             long lastTimeMoved, boolean neverRelinquishIdentity,
             TaskDescription _lastTaskDescription, int taskAffiliation, int prevTaskId,
             int nextTaskId, int taskAffiliationColor, int callingUid, String callingPackage,
-            int resizeMode, boolean supportsPictureInPicture, boolean _realActivitySuspended,
-            boolean userSetupComplete, int minWidth, int minHeight, ActivityInfo info,
-            IVoiceInteractionSession _voiceSession, IVoiceInteractor _voiceInteractor,
-            ActivityStack stack) {
+            @Nullable String callingFeatureId, int resizeMode, boolean supportsPictureInPicture,
+            boolean _realActivitySuspended, boolean userSetupComplete, int minWidth, int minHeight,
+            ActivityInfo info, IVoiceInteractionSession _voiceSession,
+            IVoiceInteractor _voiceInteractor, ActivityStack stack) {
         super(atmService.mWindowManager);
 
         EventLogTags.writeWmTaskCreated(_taskId, stack != null ? getRootTaskId() : INVALID_TASK_ID);
@@ -556,6 +558,7 @@
         mNextAffiliateTaskId = nextTaskId;
         mCallingUid = callingUid;
         mCallingPackage = callingPackage;
+        mCallingFeatureId = callingFeatureId;
         mResizeMode = resizeMode;
         if (info != null) {
             setIntent(_intent, info);
@@ -902,6 +905,7 @@
     void setIntent(ActivityRecord r) {
         mCallingUid = r.launchedFromUid;
         mCallingPackage = r.launchedFromPackage;
+        mCallingFeatureId = r.launchedFromFeatureId;
         setIntent(r.intent, r.info);
         setLockTaskAuth(r);
 
@@ -1357,6 +1361,7 @@
             isPersistable = r.isPersistable();
             mCallingUid = r.launchedFromUid;
             mCallingPackage = r.launchedFromPackage;
+            mCallingFeatureId = r.launchedFromFeatureId;
             // Clamp to [1, max].
             maxRecents = Math.min(Math.max(r.info.maxRecents, 1),
                     ActivityTaskManager.getMaxAppRecentsLimitStatic());
@@ -1433,18 +1438,27 @@
     }
 
     /**
-     * @return whether or not there are ONLY task overlay activities in the stack.
+     * @return whether or not there are ONLY task overlay activities in the task.
      *         If {@param includeFinishing} is set, then don't ignore finishing activities in the
      *         check. If there are no task overlay activities, this call returns false.
      */
     boolean onlyHasTaskOverlayActivities(boolean includeFinishing) {
-        if (getChildCount() == 0) {
-            return false;
+        int count = 0;
+        for (int i = getChildCount() - 1; i >= 0; i--) {
+            final ActivityRecord r = getChildAt(i).asActivityRecord();
+            if (r == null) {
+                // Has a child that is other than Activity.
+                return false;
+            }
+            if (!includeFinishing && r.finishing) {
+                continue;
+            }
+            if (!r.isTaskOverlay()) {
+                return false;
+            }
+            count++;
         }
-        if (includeFinishing) {
-            return getActivity((r) -> r.isTaskOverlay()) != null;
-        }
-        return getActivity((r) -> !r.finishing && r.isTaskOverlay()) != null;
+        return count > 0;
     }
 
     private boolean autoRemoveFromRecents() {
@@ -2131,12 +2145,6 @@
                     // For floating tasks, calculate the smallest width from the bounds of the task
                     inOutConfig.smallestScreenWidthDp = (int) (
                             Math.min(mTmpFullBounds.width(), mTmpFullBounds.height()) / density);
-                } else if (WindowConfiguration.isSplitScreenWindowingMode(windowingMode)) {
-                    // Iterating across all screen orientations, and return the minimum of the task
-                    // width taking into account that the bounds might change because the snap
-                    // algorithm snaps to a different value
-                    inOutConfig.smallestScreenWidthDp =
-                            getSmallestScreenWidthDpForDockedBounds(mTmpFullBounds);
                 }
                 // otherwise, it will just inherit
             }
@@ -2371,6 +2379,15 @@
         return getRootTask() == this;
     }
 
+    boolean isLeafTask() {
+        for (int i = mChildren.size() - 1; i >= 0; --i) {
+            if (mChildren.get(i).asTask() != null) {
+                return false;
+            }
+        }
+        return true;
+    }
+
     int getDescendantTaskCount() {
         final int[] currentCount = {0};
         final PooledConsumer c = PooledLambda.obtainConsumer((t, count) -> { count[0]++; },
@@ -2531,8 +2548,10 @@
     }
 
     private void updateSurfaceCrop() {
+        // TODO(b/149585281) remove when root task has the correct bounds for freeform
         // Only update the crop if we are drawing shadows on the task.
-        if (mSurfaceControl == null || !mWmService.mRenderShadowsInCompositor) {
+        if (mSurfaceControl == null || !mWmService.mRenderShadowsInCompositor
+                || !isRootTask() || !ENABLE_FREEFORM_COMPOSITOR_SHADOWS) {
             return;
         }
 
@@ -2956,8 +2975,14 @@
     }
 
     @Override
+    void onSurfaceShown(SurfaceControl.Transaction t) {
+        super.onSurfaceShown(t);
+        t.unsetColor(mSurfaceControl);
+    }
+
+    @Override
     SurfaceControl.Builder makeSurface() {
-        return super.makeSurface().setMetadata(METADATA_TASK_ID, mTaskId);
+        return super.makeSurface().setColorLayer().setMetadata(METADATA_TASK_ID, mTaskId);
     }
 
     boolean isTaskAnimating() {
@@ -3048,17 +3073,11 @@
         return matchParentBounds();
     }
 
+    @Override
     void forAllTasks(Consumer<Task> callback, boolean traverseTopToBottom, Task excludedTask) {
-        if (traverseTopToBottom) {
-            super.forAllTasks(callback, traverseTopToBottom);
-            if (excludedTask != this) {
-                callback.accept(this);
-            }
-        } else {
-            super.forAllTasks(callback, traverseTopToBottom);
-            if (excludedTask != this) {
-                callback.accept(this);
-            }
+        super.forAllTasks(callback, traverseTopToBottom, excludedTask);
+        if (excludedTask != this) {
+            callback.accept(this);
         }
     }
 
@@ -3195,12 +3214,22 @@
         info.lastActiveTime = lastActiveTime;
         info.taskDescription = new ActivityManager.TaskDescription(getTaskDescription());
         info.supportsSplitScreenMultiWindow = supportsSplitScreenWindowingMode();
-        info.resizeMode = mResizeMode;
         info.configuration.setTo(getConfiguration());
         info.token = mRemoteToken;
         // Get's the first non-undefined activity type among this and children. Can't use
         // configuration.windowConfiguration because that would only be this level.
         info.topActivityType = getActivityType();
+
+        //TODO (AM refactor): Just use local once updateEffectiveIntent is run during all child
+        //                    order changes.
+        final Task top = getTopMostTask();
+        info.resizeMode = top != null ? top.mResizeMode : mResizeMode;
+
+        if (mPictureInPictureParams.empty()) {
+            info.pictureInPictureParams = null;
+        } else {
+            info.pictureInPictureParams = mPictureInPictureParams;
+        }
     }
 
     /**
@@ -3222,6 +3251,10 @@
         return this;
     }
 
+    TaskTile asTile() {
+        return null;
+    }
+
     // TODO(task-merge): Figure-out how this should work with hierarchy tasks.
     boolean shouldBeVisible(ActivityRecord starting) {
         return true;
@@ -3233,6 +3266,7 @@
         pw.print(" mCallingUid="); UserHandle.formatUid(pw, mCallingUid);
         pw.print(" mUserSetupComplete="); pw.print(mUserSetupComplete);
         pw.print(" mCallingPackage="); pw.println(mCallingPackage);
+        pw.print(" mCallingFeatureId="); pw.println(mCallingFeatureId);
         if (affinity != null || rootAffinity != null) {
             pw.print(prefix); pw.print("affinity="); pw.print(affinity);
             if (affinity == null || !affinity.equals(rootAffinity)) {
@@ -3442,6 +3476,8 @@
         out.attribute(null, ATTR_NEXT_AFFILIATION, String.valueOf(mNextAffiliateTaskId));
         out.attribute(null, ATTR_CALLING_UID, String.valueOf(mCallingUid));
         out.attribute(null, ATTR_CALLING_PACKAGE, mCallingPackage == null ? "" : mCallingPackage);
+        out.attribute(null, ATTR_CALLING_FEATURE_ID,
+                mCallingFeatureId == null ? "" : mCallingFeatureId);
         out.attribute(null, ATTR_RESIZE_MODE, String.valueOf(mResizeMode));
         out.attribute(null, ATTR_SUPPORTS_PICTURE_IN_PICTURE,
                 String.valueOf(mSupportsPictureInPicture));
@@ -3555,16 +3591,17 @@
                 long lastTimeMoved, boolean neverRelinquishIdentity,
                 TaskDescription lastTaskDescription, int taskAffiliation, int prevTaskId,
                 int nextTaskId, int taskAffiliationColor, int callingUid, String callingPackage,
-                int resizeMode, boolean supportsPictureInPicture, boolean realActivitySuspended,
+                @Nullable String callingFeatureId, int resizeMode,
+                boolean supportsPictureInPicture, boolean realActivitySuspended,
                 boolean userSetupComplete, int minWidth, int minHeight, ActivityStack stack) {
             return new ActivityStack(service, taskId, intent, affinityIntent, affinity,
                     rootAffinity, realActivity, origActivity, rootWasReset, autoRemoveRecents,
                     askedCompatMode, userId, effectiveUid, lastDescription,
                     lastTimeMoved, neverRelinquishIdentity, lastTaskDescription, taskAffiliation,
                     prevTaskId, nextTaskId, taskAffiliationColor, callingUid, callingPackage,
-                    resizeMode, supportsPictureInPicture, realActivitySuspended, userSetupComplete,
-                    minWidth, minHeight, null /*ActivityInfo*/, null /*_voiceSession*/,
-                    null /*_voiceInteractor*/, stack);
+                    callingFeatureId, resizeMode, supportsPictureInPicture, realActivitySuspended,
+                    userSetupComplete, minWidth, minHeight, null /*ActivityInfo*/,
+                    null /*_voiceSession*/, null /*_voiceInteractor*/, stack);
         }
 
         Task restoreFromXml(XmlPullParser in, ActivityStackSupervisor stackSupervisor)
@@ -3597,6 +3634,7 @@
             int nextTaskId = INVALID_TASK_ID;
             int callingUid = -1;
             String callingPackage = "";
+            String callingFeatureId = null;
             int resizeMode = RESIZE_MODE_FORCE_RESIZEABLE;
             boolean supportsPictureInPicture = false;
             Rect lastNonFullscreenBounds = null;
@@ -3677,6 +3715,9 @@
                     case ATTR_CALLING_PACKAGE:
                         callingPackage = attrValue;
                         break;
+                    case ATTR_CALLING_FEATURE_ID:
+                        callingFeatureId = attrValue;
+                        break;
                     case ATTR_RESIZE_MODE:
                         resizeMode = Integer.parseInt(attrValue);
                         break;
@@ -3778,8 +3819,8 @@
                     autoRemoveRecents, askedCompatMode, userId, effectiveUid, lastDescription,
                     lastTimeOnTop, neverRelinquishIdentity, taskDescription,
                     taskAffiliation, prevTaskId, nextTaskId, taskAffiliationColor, callingUid,
-                    callingPackage, resizeMode, supportsPictureInPicture, realActivitySuspended,
-                    userSetupComplete, minWidth, minHeight, null /*stack*/);
+                    callingPackage, callingFeatureId, resizeMode, supportsPictureInPicture,
+                    realActivitySuspended, userSetupComplete, minWidth, minHeight, null /*stack*/);
             task.mLastNonFullscreenBounds = lastNonFullscreenBounds;
             task.setBounds(lastNonFullscreenBounds);
 
@@ -3900,7 +3941,8 @@
             return dipToPixel(PINNED_WINDOWING_MODE_ELEVATION_IN_DIP,
                     mDisplayContent.getDisplayMetrics());
         }
-        if (inFreeformWindowingMode()) {
+        // TODO(b/149585281) remove when root task has the correct bounds for freeform
+        if (ENABLE_FREEFORM_COMPOSITOR_SHADOWS && inFreeformWindowingMode()) {
             final int elevation = taskIsFocused
                     ? DECOR_SHADOW_FOCUSED_HEIGHT_IN_DIP : DECOR_SHADOW_UNFOCUSED_HEIGHT_IN_DIP;
             return dipToPixel(elevation, mDisplayContent.getDisplayMetrics());
@@ -3915,7 +3957,7 @@
      */
     private void updateShadowsRadius(boolean taskIsFocused,
             SurfaceControl.Transaction pendingTransaction) {
-        if (!mWmService.mRenderShadowsInCompositor) return;
+        if (!mWmService.mRenderShadowsInCompositor || !isRootTask()) return;
 
         final float newShadowRadius = getShadowRadius(taskIsFocused);
         if (mShadowRadius != newShadowRadius) {
@@ -3931,4 +3973,10 @@
     void onWindowFocusChanged(boolean hasFocus) {
         updateShadowsRadius(hasFocus, getPendingTransaction());
     }
+
+    void setPictureInPictureParams(PictureInPictureParams p) {
+        mPictureInPictureParams.copyOnlySet(p);
+        mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(
+                this, true /* force */);
+    }
 }
diff --git a/services/core/java/com/android/server/wm/TaskChangeNotificationController.java b/services/core/java/com/android/server/wm/TaskChangeNotificationController.java
index 2dde0ba..f715d8f 100644
--- a/services/core/java/com/android/server/wm/TaskChangeNotificationController.java
+++ b/services/core/java/com/android/server/wm/TaskChangeNotificationController.java
@@ -59,6 +59,7 @@
     private static final int NOTIFY_TASK_LIST_UPDATED_LISTENERS_MSG = 24;
     private static final int NOTIFY_SINGLE_TASK_DISPLAY_EMPTY = 25;
     private static final int NOTIFY_TASK_LIST_FROZEN_UNFROZEN_MSG = 26;
+    private static final int NOTIFY_TASK_FOCUS_CHANGED_MSG = 27;
 
     // Delay in notifying task stack change listeners (in millis)
     private static final int NOTIFY_TASK_STACK_CHANGE_LISTENERS_DELAY = 100;
@@ -179,6 +180,10 @@
         l.onRecentTaskListFrozenChanged(m.arg1 != 0);
     };
 
+    private final TaskStackConsumer mNotifyTaskFocusChanged = (l, m) -> {
+        l.onTaskFocusChanged(m.arg1, m.arg2 != 0);
+    };
+
     @FunctionalInterface
     public interface TaskStackConsumer {
         void accept(ITaskStackListener t, Message m) throws RemoteException;
@@ -273,6 +278,9 @@
                 case NOTIFY_TASK_LIST_FROZEN_UNFROZEN_MSG:
                     forAllRemoteListeners(mNotifyTaskListFrozen, msg);
                     break;
+                case NOTIFY_TASK_FOCUS_CHANGED_MSG:
+                    forAllRemoteListeners(mNotifyTaskFocusChanged, msg);
+                    break;
             }
         }
     }
@@ -565,4 +573,12 @@
         forAllLocalListeners(mNotifyTaskListFrozen, msg);
         msg.sendToTarget();
     }
+
+    /** @see ITaskStackListener#onTaskFocusChanged(int, boolean) */
+    void notifyTaskFocusChanged(int taskId, boolean focused) {
+        final Message msg = mHandler.obtainMessage(NOTIFY_TASK_FOCUS_CHANGED_MSG,
+                taskId, focused ? 1 : 0);
+        forAllLocalListeners(mNotifyTaskFocusChanged, msg);
+        msg.sendToTarget();
+    }
 }
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index 0733a72..4d5621c 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -23,6 +23,8 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
 
 import static com.android.server.wm.ActivityStackSupervisor.PRESERVE_WINDOWS;
+import static com.android.server.wm.WindowContainer.POSITION_BOTTOM;
+import static com.android.server.wm.WindowContainer.POSITION_TOP;
 
 import android.annotation.Nullable;
 import android.app.ActivityManager.RunningTaskInfo;
@@ -38,14 +40,17 @@
 import android.util.Slog;
 import android.view.ITaskOrganizer;
 import android.view.IWindowContainer;
+import android.view.SurfaceControl;
 import android.view.WindowContainerTransaction;
 
+import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.function.pooled.PooledConsumer;
 import com.android.internal.util.function.pooled.PooledLambda;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.WeakHashMap;
 
@@ -53,7 +58,8 @@
  * Stores the TaskOrganizers associated with a given windowing mode and
  * their associated state.
  */
-class TaskOrganizerController extends ITaskOrganizerController.Stub {
+class TaskOrganizerController extends ITaskOrganizerController.Stub
+    implements BLASTSyncEngine.TransactionReadyListener {
     private static final String TAG = "TaskOrganizerController";
 
     /** Flag indicating that an applied transaction may have effected lifecycle */
@@ -164,6 +170,8 @@
     private final WeakHashMap<Task, RunningTaskInfo> mLastSentTaskInfos = new WeakHashMap<>();
     private final ArrayList<Task> mPendingTaskInfoChanges = new ArrayList<>();
 
+    private final BLASTSyncEngine mBLASTSyncEngine = new BLASTSyncEngine();
+
     final ActivityTaskManagerService mService;
 
     RunningTaskInfo mTmpTaskInfo;
@@ -223,7 +231,7 @@
     }
 
     void onTaskAppeared(ITaskOrganizer organizer, Task task) {
-        TaskOrganizerState state = mTaskOrganizerStates.get(organizer.asBinder());
+        final TaskOrganizerState state = mTaskOrganizerStates.get(organizer.asBinder());
         state.addTask(task);
     }
 
@@ -371,6 +379,84 @@
         }
     }
 
+    @Override
+    public List<RunningTaskInfo> getChildTasks(IWindowContainer parent,
+            @Nullable int[] activityTypes) {
+        enforceStackPermission("getChildTasks()");
+        final long ident = Binder.clearCallingIdentity();
+        try {
+            synchronized (mGlobalLock) {
+                if (parent == null) {
+                    throw new IllegalArgumentException("Can't get children of null parent");
+                }
+                final WindowContainer container = WindowContainer.fromBinder(parent.asBinder());
+                if (container == null) {
+                    Slog.e(TAG, "Can't get children of " + parent + " because it is not valid.");
+                    return null;
+                }
+                // For now, only support returning children of persistent root tasks (of which the
+                // only current implementation is TaskTile).
+                if (!(container instanceof TaskTile)) {
+                    Slog.w(TAG, "Can only get children of root tasks created via createRootTask");
+                    return null;
+                }
+                ArrayList<RunningTaskInfo> out = new ArrayList<>();
+                // Tiles aren't real parents, so we need to go through stacks on the display to
+                // ensure correct ordering.
+                final DisplayContent dc = container.getDisplayContent();
+                for (int i = dc.getStackCount() - 1; i >= 0; --i) {
+                    final ActivityStack as = dc.getStackAt(i);
+                    if (as.getTile() == container) {
+                        if (activityTypes != null
+                                && !ArrayUtils.contains(activityTypes, as.getActivityType())) {
+                            continue;
+                        }
+                        final RunningTaskInfo info = new RunningTaskInfo();
+                        as.fillTaskInfo(info);
+                        out.add(info);
+                    }
+                }
+                return out;
+            }
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    @Override
+    public List<RunningTaskInfo> getRootTasks(int displayId, @Nullable int[] activityTypes) {
+        enforceStackPermission("getRootTasks()");
+        final long ident = Binder.clearCallingIdentity();
+        try {
+            synchronized (mGlobalLock) {
+                final DisplayContent dc =
+                        mService.mRootWindowContainer.getDisplayContent(displayId);
+                if (dc == null) {
+                    throw new IllegalArgumentException("Display " + displayId + " doesn't exist");
+                }
+                ArrayList<RunningTaskInfo> out = new ArrayList<>();
+                for (int i = dc.getStackCount() - 1; i >= 0; --i) {
+                    final ActivityStack task = dc.getStackAt(i);
+                    if (task.getTile() != null) {
+                        // a tile is supposed to look like a parent, so don't include their
+                        // "children" here. They can be accessed via getChildTasks()
+                        continue;
+                    }
+                    if (activityTypes != null
+                            && !ArrayUtils.contains(activityTypes, task.getActivityType())) {
+                        continue;
+                    }
+                    final RunningTaskInfo info = new RunningTaskInfo();
+                    task.fillTaskInfo(info);
+                    out.add(info);
+                }
+                return out;
+            }
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
     private int sanitizeAndApplyChange(WindowContainer container,
             WindowContainerTransaction.Change change) {
         if (!(container instanceof Task)) {
@@ -401,6 +487,58 @@
         return effects;
     }
 
+    private int sanitizeAndApplyHierarchyOp(WindowContainer container,
+            WindowContainerTransaction.HierarchyOp hop) {
+        if (!(container instanceof Task)) {
+            throw new IllegalArgumentException("Invalid container in hierarchy op");
+        }
+        if (container.getDisplayContent() == null) {
+            Slog.w(TAG, "Container is no longer attached: " + container);
+            return 0;
+        }
+        if (hop.isReparent()) {
+            // special case for tiles since they are "virtual" parents
+            if (container instanceof ActivityStack && ((ActivityStack) container).isRootTask()) {
+                ActivityStack as = (ActivityStack) container;
+                TaskTile newParent = hop.getNewParent() == null ? null
+                        : (TaskTile) WindowContainer.fromBinder(hop.getNewParent());
+                if (as.getTile() != newParent) {
+                    if (as.getTile() != null) {
+                        as.getTile().removeChild(as);
+                    }
+                    if (newParent != null) {
+                        if (!as.affectedBySplitScreenResize()) {
+                            return 0;
+                        }
+                        newParent.addChild(as, POSITION_TOP);
+                    }
+                }
+                if (hop.getToTop()) {
+                    as.getDisplay().positionStackAtTop(as, false /* includingParents */);
+                } else {
+                    as.getDisplay().positionStackAtBottom(as);
+                }
+            } else if (container instanceof Task) {
+                throw new RuntimeException("Reparenting leaf Tasks is not supported now.");
+            }
+        } else {
+            // Ugh, of course ActivityStack has its own special reorder logic...
+            if (container instanceof ActivityStack && ((ActivityStack) container).isRootTask()) {
+                ActivityStack as = (ActivityStack) container;
+                if (hop.getToTop()) {
+                    as.getDisplay().positionStackAtTop(as, false /* includingParents */);
+                } else {
+                    as.getDisplay().positionStackAtBottom(as);
+                }
+            } else {
+                container.getParent().positionChildAt(
+                        hop.getToTop() ? POSITION_TOP : POSITION_BOTTOM,
+                        container, false /* includingParents */);
+            }
+        }
+        return TRANSACT_EFFECTS_LIFECYCLE;
+    }
+
     private void resizePinnedStackIfNeeded(ConfigurationContainer container, int configMask,
             int windowMask, Configuration config) {
         if ((container instanceof ActivityStack)
@@ -429,15 +567,35 @@
     }
 
     @Override
-    public void applyContainerTransaction(WindowContainerTransaction t) {
+    public int applyContainerTransaction(WindowContainerTransaction t, ITaskOrganizer organizer) {
         enforceStackPermission("applyContainerTransaction()");
+        int syncId = -1;
         if (t == null) {
-            return;
+            throw new IllegalArgumentException(
+                    "Null transaction passed to applyContainerTransaction");
         }
         long ident = Binder.clearCallingIdentity();
         try {
             synchronized (mGlobalLock) {
                 int effects = 0;
+
+                /**
+                 * If organizer is non-null we are looking to synchronize this transaction
+                 * by collecting all the results in to a SurfaceFlinger transaction and
+                 * then delivering that to the given organizers transaction ready callback.
+                 * See {@link BLASTSyncEngine} for the details of the operation. But at
+                 * a high level we create a sync operation with a given ID and an associated
+                 * organizer. Then we notify each WindowContainer in this WindowContainer
+                 * transaction that it is participating in a sync operation with that
+                 * ID. Once everything is notified we tell the BLASTSyncEngine
+                 * "setSyncReady" which means that we have added everything
+                 * to the set. At any point after this, all the WindowContainers
+                 * will eventually finish applying their changes and notify the
+                 * BLASTSyncEngine which will deliver the Transaction to the organizer.
+                 */
+                if (organizer != null) {
+                    syncId = startSyncWithOrganizer(organizer);
+                }
                 mService.deferWindowLayout();
                 try {
                     ArraySet<WindowContainer> haveConfigChanges = new ArraySet<>();
@@ -446,15 +604,25 @@
                     while (entries.hasNext()) {
                         final Map.Entry<IBinder, WindowContainerTransaction.Change> entry =
                                 entries.next();
-                        final WindowContainer wc = WindowContainer.RemoteToken.fromBinder(
-                                entry.getKey()).getContainer();
+                        final WindowContainer wc = WindowContainer.fromBinder(entry.getKey());
                         int containerEffect = applyWindowContainerChange(wc, entry.getValue());
                         effects |= containerEffect;
+
                         // Lifecycle changes will trigger ensureConfig for everything.
                         if ((effects & TRANSACT_EFFECTS_LIFECYCLE) == 0
                                 && (containerEffect & TRANSACT_EFFECTS_CLIENT_CONFIG) != 0) {
                             haveConfigChanges.add(wc);
                         }
+                        if (syncId >= 0) {
+                            mBLASTSyncEngine.addToSyncSet(syncId, wc);
+                        }
+                    }
+                    // Hierarchy changes
+                    final List<WindowContainerTransaction.HierarchyOp> hops = t.getHierarchyOps();
+                    for (int i = 0, n = hops.size(); i < n; ++i) {
+                        final WindowContainerTransaction.HierarchyOp hop = hops.get(i);
+                        final WindowContainer wc = WindowContainer.fromBinder(hop.getContainer());
+                        effects |= sanitizeAndApplyHierarchyOp(wc, hop);
                     }
                     if ((effects & TRANSACT_EFFECTS_LIFECYCLE) != 0) {
                         // Already calls ensureActivityConfig
@@ -475,10 +643,38 @@
                     }
                 } finally {
                     mService.continueWindowLayout();
+                    if (syncId >= 0) {
+                        setSyncReady(syncId);
+                    }
                 }
             }
         } finally {
             Binder.restoreCallingIdentity(ident);
         }
+        return syncId;
+    }
+
+    @Override
+    public void transactionReady(int id, SurfaceControl.Transaction sc) {
+        final ITaskOrganizer organizer = mTaskOrganizersByPendingSyncId.get(id);
+        if (organizer == null) {
+            Slog.e(TAG, "Got transaction complete for unexpected ID");
+        }
+        try {
+            organizer.transactionReady(id, sc);
+        } catch (RemoteException e) {
+        }
+
+        mTaskOrganizersByPendingSyncId.remove(id);
+    }
+
+    int startSyncWithOrganizer(ITaskOrganizer organizer) {
+        int id = mBLASTSyncEngine.startSyncSet(this);
+        mTaskOrganizersByPendingSyncId.put(id, organizer);
+        return id;
+    }
+
+    void setSyncReady(int id) {
+        mBLASTSyncEngine.setReady(id);
     }
 }
diff --git a/services/core/java/com/android/server/wm/TaskPositioner.java b/services/core/java/com/android/server/wm/TaskPositioner.java
index 8bbb0d7..b5892b9 100644
--- a/services/core/java/com/android/server/wm/TaskPositioner.java
+++ b/services/core/java/com/android/server/wm/TaskPositioner.java
@@ -20,6 +20,11 @@
 import static android.app.ActivityTaskManager.RESIZE_MODE_USER_FORCED;
 import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
 
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_BOTTOM;
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_LEFT;
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_NONE;
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_RIGHT;
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_TOP;
 import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_FREEFORM;
 import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_ORIENTATION;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_POSITIONING;
@@ -29,7 +34,6 @@
 import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_HEIGHT_IN_DP;
 import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_WIDTH_IN_DP;
 
-import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.app.IActivityTaskManager;
 import android.graphics.Point;
@@ -55,11 +59,10 @@
 import android.view.WindowManager;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.policy.TaskResizingAlgorithm;
+import com.android.internal.policy.TaskResizingAlgorithm.CtrlType;
 import com.android.server.protolog.common.ProtoLog;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
 class TaskPositioner implements IBinder.DeathRecipient {
     private static final boolean DEBUG_ORIENTATION_VIOLATIONS = false;
     private static final String TAG_LOCAL = "TaskPositioner";
@@ -67,33 +70,10 @@
 
     private static Factory sFactory;
 
-    @IntDef(flag = true,
-            value = {
-                    CTRL_NONE,
-                    CTRL_LEFT,
-                    CTRL_RIGHT,
-                    CTRL_TOP,
-                    CTRL_BOTTOM
-            })
-    @Retention(RetentionPolicy.SOURCE)
-    @interface CtrlType {}
-
-    private static final int CTRL_NONE   = 0x0;
-    private static final int CTRL_LEFT   = 0x1;
-    private static final int CTRL_RIGHT  = 0x2;
-    private static final int CTRL_TOP    = 0x4;
-    private static final int CTRL_BOTTOM = 0x8;
-
     public static final float RESIZING_HINT_ALPHA = 0.5f;
 
     public static final int RESIZING_HINT_DURATION_MS = 0;
 
-    // The minimal aspect ratio which needs to be met to count as landscape (or 1/.. for portrait).
-    // Note: We do not use the 1.33 from the CDD here since the user is allowed to use what ever
-    // aspect he desires.
-    @VisibleForTesting
-    static final float MIN_ASPECT = 1.2f;
-
     private final WindowManagerService mService;
     private final IActivityTaskManager mActivityManager;
     private WindowPositionerEventReceiver mInputEventReceiver;
@@ -477,122 +457,13 @@
      */
     @VisibleForTesting
     void resizeDrag(float x, float y) {
-        // This is a resizing operation.
-        // We need to keep various constraints:
-        // 1. mMinVisible[Width/Height] <= [width/height] <= mMaxVisibleSize.[x/y]
-        // 2. The orientation is kept - if required.
-        final int deltaX = Math.round(x - mStartDragX);
-        final int deltaY = Math.round(y - mStartDragY);
-        int left = mWindowOriginalBounds.left;
-        int top = mWindowOriginalBounds.top;
-        int right = mWindowOriginalBounds.right;
-        int bottom = mWindowOriginalBounds.bottom;
-
-        // Calculate the resulting width and height of the drag operation.
-        int width = right - left;
-        int height = bottom - top;
-        if ((mCtrlType & CTRL_LEFT) != 0) {
-            width = Math.max(mMinVisibleWidth, width - deltaX);
-        } else if ((mCtrlType & CTRL_RIGHT) != 0) {
-            width = Math.max(mMinVisibleWidth, width + deltaX);
-        }
-        if ((mCtrlType & CTRL_TOP) != 0) {
-            height = Math.max(mMinVisibleHeight, height - deltaY);
-        } else if ((mCtrlType & CTRL_BOTTOM) != 0) {
-            height = Math.max(mMinVisibleHeight, height + deltaY);
-        }
-
-        // If we have to preserve the orientation - check that we are doing so.
-        final float aspect = (float) width / (float) height;
-        if (mPreserveOrientation && ((mStartOrientationWasLandscape && aspect < MIN_ASPECT)
-                || (!mStartOrientationWasLandscape && aspect > (1.0 / MIN_ASPECT)))) {
-            // Calculate 2 rectangles fulfilling all requirements for either X or Y being the major
-            // drag axis. What ever is producing the bigger rectangle will be chosen.
-            int width1;
-            int width2;
-            int height1;
-            int height2;
-            if (mStartOrientationWasLandscape) {
-                // Assuming that the width is our target we calculate the height.
-                width1 = Math.max(mMinVisibleWidth, Math.min(mMaxVisibleSize.x, width));
-                height1 = Math.min(height, Math.round((float)width1 / MIN_ASPECT));
-                if (height1 < mMinVisibleHeight) {
-                    // If the resulting height is too small we adjust to the minimal size.
-                    height1 = mMinVisibleHeight;
-                    width1 = Math.max(mMinVisibleWidth,
-                            Math.min(mMaxVisibleSize.x, Math.round((float)height1 * MIN_ASPECT)));
-                }
-                // Assuming that the height is our target we calculate the width.
-                height2 = Math.max(mMinVisibleHeight, Math.min(mMaxVisibleSize.y, height));
-                width2 = Math.max(width, Math.round((float)height2 * MIN_ASPECT));
-                if (width2 < mMinVisibleWidth) {
-                    // If the resulting width is too small we adjust to the minimal size.
-                    width2 = mMinVisibleWidth;
-                    height2 = Math.max(mMinVisibleHeight,
-                            Math.min(mMaxVisibleSize.y, Math.round((float)width2 / MIN_ASPECT)));
-                }
-            } else {
-                // Assuming that the width is our target we calculate the height.
-                width1 = Math.max(mMinVisibleWidth, Math.min(mMaxVisibleSize.x, width));
-                height1 = Math.max(height, Math.round((float)width1 * MIN_ASPECT));
-                if (height1 < mMinVisibleHeight) {
-                    // If the resulting height is too small we adjust to the minimal size.
-                    height1 = mMinVisibleHeight;
-                    width1 = Math.max(mMinVisibleWidth,
-                            Math.min(mMaxVisibleSize.x, Math.round((float)height1 / MIN_ASPECT)));
-                }
-                // Assuming that the height is our target we calculate the width.
-                height2 = Math.max(mMinVisibleHeight, Math.min(mMaxVisibleSize.y, height));
-                width2 = Math.min(width, Math.round((float)height2 / MIN_ASPECT));
-                if (width2 < mMinVisibleWidth) {
-                    // If the resulting width is too small we adjust to the minimal size.
-                    width2 = mMinVisibleWidth;
-                    height2 = Math.max(mMinVisibleHeight,
-                            Math.min(mMaxVisibleSize.y, Math.round((float)width2 * MIN_ASPECT)));
-                }
-            }
-
-            // Use the bigger of the two rectangles if the major change was positive, otherwise
-            // do the opposite.
-            final boolean grows = width > (right - left) || height > (bottom - top);
-            if (grows == (width1 * height1 > width2 * height2)) {
-                width = width1;
-                height = height1;
-            } else {
-                width = width2;
-                height = height2;
-            }
-        }
-
-        // Update mWindowDragBounds to the new drag size.
-        updateDraggedBounds(left, top, right, bottom, width, height);
+        updateDraggedBounds(TaskResizingAlgorithm.resizeDrag(x, y, mStartDragX, mStartDragY,
+                mWindowOriginalBounds, mCtrlType, mMinVisibleWidth, mMinVisibleHeight,
+                mMaxVisibleSize, mPreserveOrientation, mStartOrientationWasLandscape));
     }
 
-    /**
-     * Given the old coordinates and the new width and height, update the mWindowDragBounds.
-     *
-     * @param left      The original left bound before the user started dragging.
-     * @param top       The original top bound before the user started dragging.
-     * @param right     The original right bound before the user started dragging.
-     * @param bottom    The original bottom bound before the user started dragging.
-     * @param newWidth  The new dragged width.
-     * @param newHeight The new dragged height.
-     */
-    void updateDraggedBounds(int left, int top, int right, int bottom, int newWidth,
-                             int newHeight) {
-        // Generate the final bounds by keeping the opposite drag edge constant.
-        if ((mCtrlType & CTRL_LEFT) != 0) {
-            left = right - newWidth;
-        } else { // Note: The right might have changed - if we pulled at the right or not.
-            right = left + newWidth;
-        }
-        if ((mCtrlType & CTRL_TOP) != 0) {
-            top = bottom - newHeight;
-        } else { // Note: The height might have changed - if we pulled at the bottom or not.
-            bottom = top + newHeight;
-        }
-
-        mWindowDragBounds.set(left, top, right, bottom);
+    private void updateDraggedBounds(Rect newBounds) {
+        mWindowDragBounds.set(newBounds);
 
         checkBoundsForOrientationViolations(mWindowDragBounds);
     }
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java
index 10d6823..d8091ed 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotController.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java
@@ -559,8 +559,10 @@
                         }
                     });
                     // Allow taking snapshot of home when turning screen off to reduce the delay of
-                    // unlocking/waking to home.
-                    snapshotTasks(mTmpTasks, true /* allowSnapshotHome */);
+                    // waking from secure lock to home.
+                    final boolean allowSnapshotHome =
+                            mService.mPolicy.isKeyguardSecure(mService.mCurrentUserId);
+                    snapshotTasks(mTmpTasks, allowSnapshotHome);
                 }
             } finally {
                 listener.onScreenOff();
diff --git a/services/core/java/com/android/server/wm/TaskTile.java b/services/core/java/com/android/server/wm/TaskTile.java
index add11d6..74d5c33 100644
--- a/services/core/java/com/android/server/wm/TaskTile.java
+++ b/services/core/java/com/android/server/wm/TaskTile.java
@@ -31,7 +31,6 @@
 import android.graphics.Rect;
 import android.os.IBinder;
 import android.util.Slog;
-import android.view.SurfaceControl;
 
 import java.util.ArrayList;
 import java.util.Comparator;
@@ -60,10 +59,11 @@
                 System.currentTimeMillis(), true /*neverRelinquishIdentity*/,
                 new ActivityManager.TaskDescription(), id, INVALID_TASK_ID, INVALID_TASK_ID,
                 0 /*taskAffiliationColor*/, 0 /*callingUid*/, "" /*callingPackage*/,
-                RESIZE_MODE_RESIZEABLE, false /*supportsPictureInPicture*/,
-                false /*_realActivitySuspended*/, false /*userSetupComplete*/, INVALID_MIN_SIZE,
-                INVALID_MIN_SIZE, createEmptyActivityInfo(), null /*voiceSession*/,
-                null /*voiceInteractor*/, null /*stack*/);
+                null /*callingFeatureId*/, RESIZE_MODE_RESIZEABLE,
+                false /*supportsPictureInPicture*/, false /*_realActivitySuspended*/,
+                false /*userSetupComplete*/, INVALID_MIN_SIZE, INVALID_MIN_SIZE,
+                createEmptyActivityInfo(), null /*voiceSession*/, null /*voiceInteractor*/,
+                null /*stack*/);
         getRequestedOverrideConfiguration().windowConfiguration.setWindowingMode(windowingMode);
     }
 
@@ -77,30 +77,9 @@
         // Virtual parent, so don't notify children.
     }
 
-    /**
-     * If there is a disconnection, this will clean up any vestigial surfaces left on the tile
-     * leash by moving known children to a new surfacecontrol and then removing the old one.
-     */
-    void cleanupSurfaces() {
-        if (mSurfaceControl == null) {
-            return;
-        }
-        SurfaceControl oldSurface = mSurfaceControl;
-        WindowContainer parentWin = getParent();
-        if (parentWin == null) {
-            return;
-        }
-        mSurfaceControl = parentWin.makeChildSurface(null).setName("TaskTile " + mTaskId + " - "
-                    + getRequestedOverrideWindowingMode()).setContainerLayer().build();
-        SurfaceControl.Transaction t = parentWin.getPendingTransaction();
-        t.show(mSurfaceControl);
-        for (int i = 0; i < mChildren.size(); ++i) {
-            if (mChildren.get(i).getSurfaceControl() == null) {
-                continue;
-            }
-            mChildren.get(i).reparentSurfaceControl(t, mSurfaceControl);
-        }
-        t.remove(oldSurface);
+    @Override
+    TaskTile asTile() {
+        return this;
     }
 
     @Override
@@ -214,6 +193,12 @@
         super.removeImmediately();
     }
 
+    @Override
+    void taskOrganizerDied() {
+        super.taskOrganizerDied();
+        removeImmediately();
+    }
+
     static TaskTile forToken(IBinder token) {
         try {
             return (TaskTile) ((TaskToken) token).getContainer();
diff --git a/services/core/java/com/android/server/wm/WallpaperWindowToken.java b/services/core/java/com/android/server/wm/WallpaperWindowToken.java
index d23bf97..1e22141 100644
--- a/services/core/java/com/android/server/wm/WallpaperWindowToken.java
+++ b/services/core/java/com/android/server/wm/WallpaperWindowToken.java
@@ -122,10 +122,37 @@
             mDisplayContent.setLayoutNeeded();
         }
 
-        final DisplayInfo displayInfo = mDisplayContent.getDisplayInfo();
+        final WallpaperController wallpaperController = mDisplayContent.mWallpaperController;
+
+        if (visible) {
+            final WindowState wallpaperTarget = wallpaperController.getWallpaperTarget();
+            final RecentsAnimationController recentsAnimationController =
+                    mWmService.getRecentsAnimationController();
+            if (wallpaperTarget != null
+                    && recentsAnimationController != null
+                    && recentsAnimationController.isAnimatingTask(wallpaperTarget.getTask())) {
+                // If the Recents animation is running, and the wallpaper target is the animating
+                // task we want the wallpaper to be rotated in the same orientation as the
+                // RecentsAnimation's target (e.g the launcher)
+                recentsAnimationController.applyFixedRotationTransformIfNeeded(this);
+            } else if (wallpaperTarget != null
+                    && wallpaperTarget.mToken.hasFixedRotationTransform()) {
+                // If the wallpaper target has a fixed rotation, we want the wallpaper to follow its
+                // rotation
+                applyFixedRotationTransform(wallpaperTarget.mToken);
+            } else if (hasFixedRotationTransform()) {
+                clearFixedRotationTransform();
+            }
+        }
+
+        DisplayInfo displayInfo = getFixedRotationTransformDisplayInfo();
+        if (displayInfo == null) {
+            displayInfo = mDisplayContent.getDisplayInfo();
+        }
+
         final int dw = displayInfo.logicalWidth;
         final int dh = displayInfo.logicalHeight;
-        final WallpaperController wallpaperController = mDisplayContent.mWallpaperController;
+
         for (int wallpaperNdx = mChildren.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) {
             final WindowState wallpaper = mChildren.get(wallpaperNdx);
 
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index 8672315..da996dc 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -94,7 +94,8 @@
  * changes are made to this class.
  */
 class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<E>
-        implements Comparable<WindowContainer>, Animatable {
+        implements Comparable<WindowContainer>, Animatable,
+                   BLASTSyncEngine.TransactionReadyListener {
 
     private static final String TAG = TAG_WITH_CLASS_NAME ? "WindowContainer" : TAG_WM;
 
@@ -140,6 +141,12 @@
     @ActivityInfo.ScreenOrientation
     protected int mOrientation = SCREEN_ORIENTATION_UNSPECIFIED;
 
+    /**
+     * The window container which decides its orientation since the last time
+     * {@link #getOrientation(int) was called.
+     */
+    protected WindowContainer mLastOrientationSource;
+
     private final Pools.SynchronizedPool<ForAllWindowsConsumerWrapper> mConsumerWrapperPool =
             new Pools.SynchronizedPool<>(3);
 
@@ -260,6 +267,12 @@
      */
     RemoteToken mRemoteToken = null;
 
+    BLASTSyncEngine mBLASTSyncEngine = new BLASTSyncEngine();
+    SurfaceControl.Transaction mBLASTSyncTransaction = new SurfaceControl.Transaction();
+    boolean mUsingBLASTSyncTransaction = false;
+    BLASTSyncEngine.TransactionReadyListener mWaitingListener;
+    int mWaitingSyncId;
+
     WindowContainer(WindowManagerService wms) {
         mWmService = wms;
         mPendingTransaction = wms.mTransactionFactory.get();
@@ -358,6 +371,7 @@
             // build a surface.
             setSurfaceControl(makeSurface().build());
             getPendingTransaction().show(mSurfaceControl);
+            onSurfaceShown(getPendingTransaction());
             updateSurfacePosition();
         } else {
             // If we have a surface but a new parent, we just need to perform a reparent. Go through
@@ -376,6 +390,13 @@
         scheduleAnimation();
     }
 
+    /**
+     * Called when the surface is shown for the first time.
+     */
+    void onSurfaceShown(Transaction t) {
+        // do nothing
+    }
+
     // Temp. holders for a chain of containers we are currently processing.
     private final LinkedList<WindowContainer> mTmpChain1 = new LinkedList<>();
     private final LinkedList<WindowContainer> mTmpChain2 = new LinkedList<>();
@@ -1046,6 +1067,7 @@
      * @return The orientation as specified by this branch or the window hierarchy.
      */
     int getOrientation(int candidate) {
+        mLastOrientationSource = null;
         if (!fillsParent()) {
             // Ignore containers that don't completely fill their parents.
             return SCREEN_ORIENTATION_UNSET;
@@ -1057,6 +1079,7 @@
         // if none of the children have a better candidate for the orientation.
         if (mOrientation != SCREEN_ORIENTATION_UNSET
                 && mOrientation != SCREEN_ORIENTATION_UNSPECIFIED) {
+            mLastOrientationSource = this;
             return mOrientation;
         }
 
@@ -1072,6 +1095,7 @@
                 // can find one. Else return SCREEN_ORIENTATION_BEHIND so the caller can choose to
                 // look behind this container.
                 candidate = orientation;
+                mLastOrientationSource = wc;
                 continue;
             }
 
@@ -1085,6 +1109,7 @@
                 ProtoLog.v(WM_DEBUG_ORIENTATION, "%s is requesting orientation %d (%s)",
                         wc.toString(), orientation,
                         ActivityInfo.screenOrientationToString(orientation));
+                mLastOrientationSource = wc;
                 return orientation;
             }
         }
@@ -1093,6 +1118,22 @@
     }
 
     /**
+     * @return The deepest source which decides the orientation of this window container since the
+     *         last time {@link #getOrientation(int) was called.
+     */
+    @Nullable
+    WindowContainer getLastOrientationSource() {
+        final WindowContainer source = mLastOrientationSource;
+        if (source != null && source != this) {
+            final WindowContainer nextSource = source.getLastOrientationSource();
+            if (nextSource != null) {
+                return nextSource;
+            }
+        }
+        return source;
+    }
+
+    /**
      * Returns true if this container is opaque and fills all the space made available by its parent
      * container.
      *
@@ -1418,6 +1459,19 @@
         }
     }
 
+    void forAllTasks(Consumer<Task> callback, boolean traverseTopToBottom, Task excludedTask) {
+        final int count = mChildren.size();
+        if (traverseTopToBottom) {
+            for (int i = count - 1; i >= 0; --i) {
+                mChildren.get(i).forAllTasks(callback, traverseTopToBottom, excludedTask);
+            }
+        } else {
+            for (int i = 0; i < count; i++) {
+                mChildren.get(i).forAllTasks(callback, traverseTopToBottom, excludedTask);
+            }
+        }
+    }
+
     Task getTaskAbove(Task t) {
         return getTask(
                 (above) -> true, t, false /*includeBoundary*/, false /*traverseTopToBottom*/);
@@ -1837,6 +1891,10 @@
 
     @Override
     public Transaction getPendingTransaction() {
+        if (mUsingBLASTSyncTransaction) {
+            return mBLASTSyncTransaction;
+        }
+
         final DisplayContent displayContent = getDisplayContent();
         if (displayContent != null && displayContent != this) {
             return displayContent.getPendingTransaction();
@@ -1884,7 +1942,7 @@
 
     @Override
     public Builder makeAnimationLeash() {
-        return makeSurface();
+        return makeSurface().setContainerLayer();
     }
 
     @Override
@@ -2285,6 +2343,10 @@
         return mRemoteToken;
     }
 
+    static WindowContainer fromBinder(IBinder binder) {
+        return RemoteToken.fromBinder(binder).getContainer();
+    }
+
     static class RemoteToken extends IWindowContainer.Stub {
         final WeakReference<WindowContainer> mWeakRef;
 
@@ -2316,4 +2378,38 @@
             return sb.toString();
         }
     }
+
+    @Override
+    public void transactionReady(int mSyncId, SurfaceControl.Transaction mergedTransaction) {
+        mergedTransaction.merge(mBLASTSyncTransaction);
+        mUsingBLASTSyncTransaction = false;
+
+        mWaitingListener.transactionReady(mWaitingSyncId, mergedTransaction);
+
+        mWaitingListener = null;
+        mWaitingSyncId = -1;
+    }
+
+    boolean prepareForSync(BLASTSyncEngine.TransactionReadyListener waitingListener,
+            int waitingId) {
+        boolean willSync = false;
+        if (!isVisible()) {
+            return willSync;
+        }
+        mUsingBLASTSyncTransaction = true;
+
+        int localId = mBLASTSyncEngine.startSyncSet(this);
+        for (int i = 0; i < mChildren.size(); i++) {
+            final WindowContainer child = mChildren.get(i);
+            willSync = mBLASTSyncEngine.addToSyncSet(localId, child) | willSync;
+        }
+
+        // Make sure to set these before we call setReady in case the sync was a no-op
+        mWaitingSyncId = waitingId;
+        mWaitingListener = waitingListener;
+
+        mBLASTSyncEngine.setReady(localId);
+
+        return willSync;
+    }
 }
diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java
index 59eee9c..240f566 100644
--- a/services/core/java/com/android/server/wm/WindowManagerInternal.java
+++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java
@@ -120,6 +120,11 @@
         public void onAppTransitionCancelledLocked(int transit) {}
 
         /**
+         * Called when an app transition is timed out.
+         */
+        public void onAppTransitionTimeoutLocked() {}
+
+        /**
          * Called when an app transition gets started
          *
          * @param transit transition type indicating what kind of transition gets run, must be one
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 6e1f46bb..68b8348 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -65,6 +65,7 @@
 import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
 import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
 import static android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE;
+import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION;
 import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION;
 import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG;
 import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
@@ -187,6 +188,7 @@
 import android.os.Trace;
 import android.os.UserHandle;
 import android.os.WorkSource;
+import android.provider.DeviceConfig;
 import android.provider.Settings;
 import android.service.vr.IVrManager;
 import android.service.vr.IVrStateCallbacks;
@@ -229,7 +231,6 @@
 import android.view.InputChannel;
 import android.view.InputDevice;
 import android.view.InputEvent;
-import android.view.InputEventReceiver;
 import android.view.InputWindowHandle;
 import android.view.InsetsState;
 import android.view.KeyEvent;
@@ -309,6 +310,8 @@
         implements Watchdog.Monitor, WindowManagerPolicy.WindowManagerFuncs {
     private static final String TAG = TAG_WITH_CLASS_NAME ? "WindowManagerService" : TAG_WM;
 
+    private static final String WM_USE_BLAST_ADAPTER_FLAG = "wm_use_blast_adapter";
+
     static final int LAYOUT_REPEAT_THRESHOLD = 4;
 
     static final boolean PROFILE_ORIENTATION = false;
@@ -409,10 +412,16 @@
 
     private static final int ANIMATION_COMPLETED_TIMEOUT_MS = 5000;
 
+    // TODO(b/143053092): Remove the settings if it becomes stable.
+    private static final String FIXED_ROTATION_TRANSFORM_SETTING_NAME = "fixed_rotation_transform";
+    boolean mIsFixedRotationTransformEnabled;
+
     final WindowManagerConstants mConstants;
 
     final WindowTracing mWindowTracing;
 
+    final DisplayAreaPolicy.Provider mDisplayAreaPolicyProvider;
+
     final private KeyguardDisableHandler mKeyguardDisableHandler;
     // TODO: eventually unify all keyguard state in a common place instead of having it spread over
     // AM's KeyguardController and the policy's KeyguardServiceDelegate.
@@ -623,6 +632,9 @@
     // The root of the device window hierarchy.
     RootWindowContainer mRoot;
 
+    // Whether the system should use BLAST for ViewRootImpl
+    final boolean mUseBLAST;
+
     int mDockedStackCreateMode = SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT;
     Rect mDockedStackCreateBounds;
 
@@ -730,6 +742,8 @@
                 DEVELOPMENT_ENABLE_SIZECOMPAT_FREEFORM);
         private final Uri mRenderShadowsInCompositorUri = Settings.Global.getUriFor(
                 DEVELOPMENT_RENDER_SHADOWS_IN_COMPOSITOR);
+        private final Uri mFixedRotationTransformUri = Settings.Global.getUriFor(
+                FIXED_ROTATION_TRANSFORM_SETTING_NAME);
 
         public SettingsObserver() {
             super(new Handler());
@@ -754,6 +768,8 @@
                     UserHandle.USER_ALL);
             resolver.registerContentObserver(mRenderShadowsInCompositorUri, false, this,
                     UserHandle.USER_ALL);
+            resolver.registerContentObserver(mFixedRotationTransformUri, false, this,
+                    UserHandle.USER_ALL);
         }
 
         @Override
@@ -797,6 +813,11 @@
                 return;
             }
 
+            if (mFixedRotationTransformUri.equals(uri)) {
+                updateFixedRotationTransform();
+                return;
+            }
+
             @UpdateAnimationScaleMode
             final int mode;
             if (mWindowAnimationScaleUri.equals(uri)) {
@@ -813,6 +834,12 @@
             mH.sendMessage(m);
         }
 
+        void loadSettings() {
+            updateSystemUiSettings();
+            updatePointerLocation();
+            updateFixedRotationTransform();
+        }
+
         void updateSystemUiSettings() {
             boolean changed;
             synchronized (mGlobalLock) {
@@ -876,11 +903,16 @@
 
             mAtmService.mSizeCompatFreeform = sizeCompatFreeform;
         }
+
+        void updateFixedRotationTransform() {
+            mIsFixedRotationTransformEnabled = Settings.Global.getInt(mContext.getContentResolver(),
+                    FIXED_ROTATION_TRANSFORM_SETTING_NAME, 0) != 0;
+        }
     }
 
     private void setShadowRenderer() {
         mRenderShadowsInCompositor = Settings.Global.getInt(mContext.getContentResolver(),
-                DEVELOPMENT_RENDER_SHADOWS_IN_COMPOSITOR, 0) != 0;
+                DEVELOPMENT_RENDER_SHADOWS_IN_COMPOSITOR, 1) != 0;
     }
 
     PowerManager mPowerManager;
@@ -1137,6 +1169,11 @@
         mAnimator = new WindowAnimator(this);
         mRoot = new RootWindowContainer(this);
 
+        mUseBLAST = SystemProperties.getBoolean(
+                    String.join(".", "persist.device_config",
+                    DeviceConfig.NAMESPACE_WINDOW_MANAGER_NATIVE_BOOT,
+                    WM_USE_BLAST_ADAPTER_FLAG), false);
+
         mWindowPlacerLocked = new WindowSurfacePlacer(this);
         mTaskSnapshotController = new TaskSnapshotController(this);
 
@@ -1255,6 +1292,10 @@
 
         LocalServices.addService(WindowManagerInternal.class, new LocalService());
         mEmbeddedWindowController = new EmbeddedWindowController(mGlobalLock);
+
+        mDisplayAreaPolicyProvider = DisplayAreaPolicy.Provider.fromResources(
+                mContext.getResources());
+
         setGlobalShadowSettings();
     }
 
@@ -1321,14 +1362,18 @@
             DisplayCutout.ParcelableWrapper outDisplayCutout, InputChannel outInputChannel,
             InsetsState outInsetsState) {
         int[] appOp = new int[1];
-        int res = mPolicy.checkAddPermission(attrs, appOp);
+        final boolean isRoundedCornerOverlay = (attrs.privateFlags
+                & PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY) != 0;
+        int res = mPolicy.checkAddPermission(attrs.type, isRoundedCornerOverlay, attrs.packageName,
+                appOp);
         if (res != WindowManagerGlobal.ADD_OKAY) {
             return res;
         }
 
         WindowState parentWindow = null;
-        long origId;
         final int callingUid = Binder.getCallingUid();
+        final int callingPid = Binder.getCallingPid();
+        final long origId = Binder.clearCallingIdentity();
         final int type = attrs.type;
 
         synchronized (mGlobalLock) {
@@ -1377,6 +1422,13 @@
                 return WindowManagerGlobal.ADD_PERMISSION_DENIED;
             }
 
+            if (type == TYPE_PRESENTATION && !displayContent.getDisplay().isPublicPresentation()) {
+                ProtoLog.w(WM_ERROR,
+                        "Attempted to add presentation window to a non-suitable display.  "
+                                + "Aborting.");
+                return WindowManagerGlobal.ADD_INVALID_DISPLAY;
+            }
+
             ActivityRecord activity = null;
             final boolean hasParent = parentWindow != null;
             // Use existing parent window token for child windows since they go in the same token
@@ -1395,8 +1447,6 @@
                     return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
                 }
                 final IBinder binder = attrs.token != null ? attrs.token : client.asBinder();
-                final boolean isRoundedCornerOverlay =
-                        (attrs.privateFlags & PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY) != 0;
                 token = new WindowToken(this, binder, type, false, displayContent,
                         session.mCanAddInternalSystemWindow, isRoundedCornerOverlay);
             } else if (rootType >= FIRST_APPLICATION_WINDOW
@@ -1489,10 +1539,9 @@
             }
 
             final DisplayPolicy displayPolicy = displayContent.getDisplayPolicy();
-            displayPolicy.adjustWindowParamsLw(win, win.mAttrs, Binder.getCallingPid(),
-                    Binder.getCallingUid());
+            displayPolicy.adjustWindowParamsLw(win, win.mAttrs, callingPid, callingUid);
 
-            res = displayPolicy.validateAddingWindowLw(attrs);
+            res = displayPolicy.validateAddingWindowLw(attrs, callingPid, callingUid);
             if (res != WindowManagerGlobal.ADD_OKAY) {
                 return res;
             }
@@ -1544,8 +1593,6 @@
                 displayContent.mTapExcludedWindows.add(win);
             }
 
-            origId = Binder.clearCallingIdentity();
-
             win.attach();
             mWindowMap.put(client.asBinder(), win);
             win.initAppOpsState();
@@ -1629,7 +1676,7 @@
                     outFrame, outContentInsets, outStableInsets, outDisplayCutout)) {
                 res |= WindowManagerGlobal.ADD_FLAG_ALWAYS_CONSUME_SYSTEM_BARS;
             }
-            outInsetsState.set(displayContent.getInsetsPolicy().getInsetsForDispatch(win),
+            outInsetsState.set(win.getInsetsState(),
                     win.mClient instanceof IWindow.Stub /* copySource */);
 
             if (mInTouchMode) {
@@ -2367,7 +2414,7 @@
                     outStableInsets);
             outCutout.set(win.getWmDisplayCutout().getDisplayCutout());
             outBackdropFrame.set(win.getBackdropFrame(win.getFrameLw()));
-            outInsetsState.set(displayContent.getInsetsPolicy().getInsetsForDispatch(win),
+            outInsetsState.set(win.getInsetsState(),
                     win.mClient instanceof IWindow.Stub /* copySource */);
             if (DEBUG) {
                 Slog.v(TAG_WM, "Relayout given client " + client.asBinder()
@@ -2505,7 +2552,7 @@
                 WindowState win = windowForClientLocked(session, client, false);
                 ProtoLog.d(WM_DEBUG_ADD_REMOVE, "finishDrawingWindow: %s mDrawState=%s",
                         win, (win != null ? win.mWinAnimator.drawStateToString() : "null"));
-                if (win != null && win.mWinAnimator.finishDrawingLocked(postDrawTransaction)) {
+                if (win != null && win.finishDrawing(postDrawTransaction)) {
                     if ((win.mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0) {
                         win.getDisplayContent().pendingLayoutChanges |=
                                 WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
@@ -2545,43 +2592,48 @@
         final boolean callerCanManageAppTokens =
                 checkCallingPermission(MANAGE_APP_TOKENS, "addWindowToken()");
         if (!callerCanManageAppTokens) {
-            // TODO(window-context): refactor checkAddPermission to not take attrs.
-            LayoutParams attrs = new LayoutParams(type);
-            attrs.packageName = packageName;
-            final int res = mPolicy.checkAddPermission(attrs, new int[1]);
+            final int res = mPolicy.checkAddPermission(type, false /* isRoundedCornerOverlay */,
+                    packageName, new int[1]);
             if (res != ADD_OKAY) {
                 return res;
             }
         }
 
-        synchronized (mGlobalLock) {
-            if (!callerCanManageAppTokens) {
-                if (!unprivilegedAppCanCreateTokenWith(null, Binder.getCallingUid(), type, type,
-                        null, packageName) || packageName == null) {
-                    throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
+        final int callingUid = Binder.getCallingUid();
+        final long origId = Binder.clearCallingIdentity();
+        try {
+            synchronized (mGlobalLock) {
+                if (!callerCanManageAppTokens) {
+                    if (packageName == null || !unprivilegedAppCanCreateTokenWith(
+                            null /* parentWindow */, callingUid, type, type, null /* tokenForLog */,
+                            packageName)) {
+                        throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
+                    }
+                }
+
+                final DisplayContent dc = getDisplayContentOrCreate(displayId, null /* token */);
+                if (dc == null) {
+                    ProtoLog.w(WM_ERROR, "addWindowToken: Attempted to add token: %s"
+                            + " for non-exiting displayId=%d", binder, displayId);
+                    return WindowManagerGlobal.ADD_INVALID_DISPLAY;
+                }
+
+                WindowToken token = dc.getWindowToken(binder);
+                if (token != null) {
+                    ProtoLog.w(WM_ERROR, "addWindowToken: Attempted to add binder token: %s"
+                            + " for already created window token: %s"
+                            + " displayId=%d", binder, token, displayId);
+                    return WindowManagerGlobal.ADD_DUPLICATE_ADD;
+                }
+                // TODO(window-container): Clean up dead tokens
+                if (type == TYPE_WALLPAPER) {
+                    new WallpaperWindowToken(this, binder, true, dc, callerCanManageAppTokens);
+                } else {
+                    new WindowToken(this, binder, type, true, dc, callerCanManageAppTokens);
                 }
             }
-
-            final DisplayContent dc = getDisplayContentOrCreate(displayId, null /* token */);
-            if (dc == null) {
-                ProtoLog.w(WM_ERROR, "addWindowToken: Attempted to add token: %s"
-                        + " for non-exiting displayId=%d", binder, displayId);
-                return WindowManagerGlobal.ADD_INVALID_DISPLAY;
-            }
-
-            WindowToken token = dc.getWindowToken(binder);
-            if (token != null) {
-                ProtoLog.w(WM_ERROR, "addWindowToken: Attempted to add binder token: %s"
-                        + " for already created window token: %s"
-                        + " displayId=%d", binder, token, displayId);
-                return WindowManagerGlobal.ADD_DUPLICATE_ADD;
-            }
-            // TODO(window-container): Clean up dead tokens
-            if (type == TYPE_WALLPAPER) {
-                new WallpaperWindowToken(this, binder, true, dc, callerCanManageAppTokens);
-            } else {
-                new WindowToken(this, binder, type, true, dc, callerCanManageAppTokens);
-            }
+        } finally {
+            Binder.restoreCallingIdentity(origId);
         }
         return WindowManagerGlobal.ADD_OKAY;
     }
@@ -4547,8 +4599,7 @@
         mTaskSnapshotController.systemReady();
         mHasWideColorGamutSupport = queryWideColorGamutSupport();
         mHasHdrSupport = queryHdrSupport();
-        UiThread.getHandler().post(mSettingsObserver::updateSystemUiSettings);
-        UiThread.getHandler().post(mSettingsObserver::updatePointerLocation);
+        UiThread.getHandler().post(mSettingsObserver::loadSettings);
         IVrManager vrManager = IVrManager.Stub.asInterface(
                 ServiceManager.getService(Context.VR_SERVICE));
         if (vrManager != null) {
@@ -5051,6 +5102,11 @@
     }
 
     @Override
+    public boolean useBLAST() {
+        return mUseBLAST;
+    }
+
+    @Override
     public void getInitialDisplaySize(int displayId, Point size) {
         synchronized (mGlobalLock) {
             final DisplayContent displayContent = mRoot.getDisplayContent(displayId);
@@ -5687,6 +5743,12 @@
 
     @Override
     public void setForceShowSystemBars(boolean show) {
+        boolean isAutomotive = mContext.getPackageManager().hasSystemFeature(
+                PackageManager.FEATURE_AUTOMOTIVE);
+        if (!isAutomotive) {
+            throw new UnsupportedOperationException("Force showing system bars is only supported"
+                    + "for Automotive use cases.");
+        }
         if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR)
                 != PackageManager.PERMISSION_GRANTED) {
             throw new SecurityException("Caller does not hold permission "
@@ -5736,20 +5798,6 @@
     }
 
     @Override
-    public WindowManagerPolicy.InputConsumer createInputConsumer(Looper looper, String name,
-            InputEventReceiver.Factory inputEventReceiverFactory, int displayId) {
-        synchronized (mGlobalLock) {
-            DisplayContent displayContent = mRoot.getDisplayContent(displayId);
-            if (displayContent != null) {
-                return displayContent.getInputMonitor().createInputConsumer(looper, name,
-                        inputEventReceiverFactory);
-            } else {
-                return null;
-            }
-        }
-    }
-
-    @Override
     public void createInputConsumer(IBinder token, String name, int displayId,
             InputChannel inputChannel) {
         synchronized (mGlobalLock) {
@@ -6831,34 +6879,32 @@
             throw new SecurityException("Requires INTERNAL_SYSTEM_WINDOW permission");
         }
 
-        synchronized (mGlobalLock) {
-            final DisplayContent displayContent = getDisplayContentOrCreate(displayId, null);
-            if (displayContent == null) {
-                ProtoLog.w(WM_ERROR,
-                        "Attempted to set windowing mode to a display that does not exist: %d",
-                        displayId);
-                return;
-            }
-
-            int lastWindowingMode = displayContent.getWindowingMode();
-            mDisplayWindowSettings.setWindowingModeLocked(displayContent, mode);
-
-            displayContent.reconfigureDisplayLocked();
-
-            if (lastWindowingMode != displayContent.getWindowingMode()) {
-                // reconfigure won't detect this change in isolation because the windowing mode is
-                // already set on the display, so fire off a new config now.
-
-                final long origId = Binder.clearCallingIdentity();
-                try {
-                    // direct call since lock is shared.
-                    displayContent.sendNewConfiguration();
-                } finally {
-                    Binder.restoreCallingIdentity(origId);
+        final long origId = Binder.clearCallingIdentity();
+        try {
+            synchronized (mGlobalLock) {
+                final DisplayContent displayContent = getDisplayContentOrCreate(displayId, null);
+                if (displayContent == null) {
+                    ProtoLog.w(WM_ERROR,
+                            "Attempted to set windowing mode to a display that does not exist: %d",
+                            displayId);
+                    return;
                 }
-                // Now that all configurations are updated, execute pending transitions
-                displayContent.executeAppTransition();
+
+                int lastWindowingMode = displayContent.getWindowingMode();
+                mDisplayWindowSettings.setWindowingModeLocked(displayContent, mode);
+
+                displayContent.reconfigureDisplayLocked();
+
+                if (lastWindowingMode != displayContent.getWindowingMode()) {
+                    // reconfigure won't detect this change in isolation because the windowing mode
+                    // is already set on the display, so fire off a new config now.
+                    displayContent.sendNewConfiguration();
+                    // Now that all configurations are updated, execute pending transitions.
+                    displayContent.executeAppTransition();
+                }
             }
+        } finally {
+            Binder.restoreCallingIdentity(origId);
         }
     }
 
@@ -6886,18 +6932,22 @@
             throw new SecurityException("Requires INTERNAL_SYSTEM_WINDOW permission");
         }
 
-        synchronized (mGlobalLock) {
-            final DisplayContent displayContent = getDisplayContentOrCreate(displayId, null);
-            if (displayContent == null) {
-                ProtoLog.w(WM_ERROR,
-                        "Attempted to set remove mode to a display that does not exist: %d",
-                        displayId);
-                return;
+        final long origId = Binder.clearCallingIdentity();
+        try {
+            synchronized (mGlobalLock) {
+                final DisplayContent displayContent = getDisplayContentOrCreate(displayId, null);
+                if (displayContent == null) {
+                    ProtoLog.w(WM_ERROR,
+                            "Attempted to set remove mode to a display that does not exist: %d",
+                            displayId);
+                    return;
+                }
+
+                mDisplayWindowSettings.setRemoveContentModeLocked(displayContent, mode);
+                displayContent.reconfigureDisplayLocked();
             }
-
-            mDisplayWindowSettings.setRemoveContentModeLocked(displayContent, mode);
-
-            displayContent.reconfigureDisplayLocked();
+        } finally {
+            Binder.restoreCallingIdentity(origId);
         }
     }
 
@@ -7305,9 +7355,11 @@
                 Slog.w(TAG_WM, "updateInputMethodTargetWindow: imeToken=" + imeToken
                         + " imeTargetWindowToken=" + imeTargetWindowToken);
             }
-            final WindowState imeTarget = mWindowMap.get(imeTargetWindowToken);
-            if (imeTarget != null) {
-                imeTarget.getDisplayContent().updateImeControlTarget(imeTarget);
+            synchronized (mGlobalLock) {
+                final WindowState imeTarget = mWindowMap.get(imeTargetWindowToken);
+                if (imeTarget != null) {
+                    imeTarget.getDisplayContent().updateImeControlTarget(imeTarget);
+                }
             }
         }
 
@@ -7440,15 +7492,14 @@
             synchronized (mGlobalLock) {
                 final DisplayContent dc = mRoot.getDisplayContent(displayId);
                 if (dc != null) {
-                    WindowState imeTarget = dc.getImeControlTarget();
-                    if (imeTarget == null) {
+                    InsetsControlTarget imeControlTarget = dc.mInputMethodControlTarget;
+                    if (imeControlTarget == null) {
                         return;
                     }
                     // If there was a pending IME show(), reset it as IME has been
                     // requested to be hidden.
-                    imeTarget.getDisplayContent().getInsetsStateController().getImeSourceProvider()
-                            .abortShowImePostLayout();
-                    imeTarget.hideInsets(WindowInsets.Type.ime(), true /* fromIme */);
+                    dc.getInsetsStateController().getImeSourceProvider().abortShowImePostLayout();
+                    imeControlTarget.hideInsets(WindowInsets.Type.ime(), true /* fromIme */);
                 }
             }
         }
@@ -8015,7 +8066,11 @@
             int displayId, Rect outContentInsets, Rect outStableInsets,
             DisplayCutout.ParcelableWrapper displayCutout) {
         synchronized (mGlobalLock) {
-            final DisplayContent dc = mRoot.getDisplayContent(displayId);
+            final DisplayContent dc = mRoot.getDisplayContentOrCreate(displayId);
+            if (dc == null) {
+                throw new WindowManager.InvalidDisplayException("Display#" + displayId
+                        + "could not be found!");
+            }
             final WindowToken windowToken = dc.getWindowToken(attrs.token);
             final ActivityRecord activity;
             if (windowToken != null && windowToken.asActivityRecord() != null) {
diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java
index 87b04b2..03dc4c9 100644
--- a/services/core/java/com/android/server/wm/WindowProcessController.java
+++ b/services/core/java/com/android/server/wm/WindowProcessController.java
@@ -178,7 +178,7 @@
     private long mLastActivityFinishTime;
 
     // Last configuration that was reported to the process.
-    private final Configuration mLastReportedConfiguration;
+    private final Configuration mLastReportedConfiguration = new Configuration();
     // Configuration that is waiting to be dispatched to the process.
     private Configuration mPendingConfiguration;
     private final Configuration mNewOverrideConfig = new Configuration();
@@ -192,7 +192,7 @@
     /** Whether our process is currently running a {@link IRemoteAnimationRunner} */
     private boolean mRunningRemoteAnimation;
 
-    public WindowProcessController(ActivityTaskManagerService atm, ApplicationInfo info,
+    public WindowProcessController(@NonNull ActivityTaskManagerService atm, ApplicationInfo info,
             String name, int uid, int userId, Object owner, WindowProcessListener listener) {
         mInfo = info;
         mName = name;
@@ -201,11 +201,8 @@
         mOwner = owner;
         mListener = listener;
         mAtm = atm;
-        mLastReportedConfiguration = new Configuration();
         mDisplayId = INVALID_DISPLAY;
-        if (atm != null) {
-            onConfigurationChanged(atm.getGlobalConfiguration());
-        }
+        onConfigurationChanged(atm.getGlobalConfiguration());
     }
 
     public void setPid(int pid) {
@@ -220,6 +217,13 @@
     public void setThread(IApplicationThread thread) {
         synchronized (mAtm.mGlobalLockWithoutBoost) {
             mThread = thread;
+            // In general this is called from attaching application, so the last configuration
+            // has been sent to client by {@link android.app.IApplicationThread#bindApplication}.
+            // If this process is system server, it is fine because system is booting and a new
+            // configuration will update when display is ready.
+            if (thread != null) {
+                setLastReportedConfiguration(getConfiguration());
+            }
         }
     }
 
@@ -1060,7 +1064,6 @@
         mNewOverrideConfig.setTo(mergedOverrideConfig);
         mNewOverrideConfig.windowConfiguration.setActivityType(ACTIVITY_TYPE_UNDEFINED);
         super.onRequestedOverrideConfigurationChanged(mNewOverrideConfig);
-        updateConfiguration();
     }
 
     private void updateConfiguration() {
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 42e5bbc..b250083 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -696,6 +696,11 @@
             return;
         }
 
+        if (mToken.hasFixedRotationTransform()) {
+            // The transform of its surface is handled by fixed rotation.
+            return;
+        }
+
         if (mPendingSeamlessRotate != null) {
             oldRotation = mPendingSeamlessRotate.getOldRotation();
         }
@@ -1000,6 +1005,7 @@
         final boolean isFullscreenAndFillsDisplay = !inMultiWindowMode() && matchesDisplayBounds();
         final boolean windowsAreFloating = task != null && task.isFloating();
         final DisplayContent dc = getDisplayContent();
+        final DisplayInfo displayInfo = getDisplayInfo();
         final WindowFrames windowFrames = getLayoutingWindowFrames();
 
         mInsetFrame.set(getBounds());
@@ -1086,7 +1092,7 @@
             layoutXDiff = mInsetFrame.left - windowFrames.mContainingFrame.left;
             layoutYDiff = mInsetFrame.top - windowFrames.mContainingFrame.top;
             layoutContainingFrame = mInsetFrame;
-            mTmpRect.set(0, 0, dc.getDisplayInfo().logicalWidth, dc.getDisplayInfo().logicalHeight);
+            mTmpRect.set(0, 0, displayInfo.logicalWidth, displayInfo.logicalHeight);
             subtractInsets(windowFrames.mDisplayFrame, layoutContainingFrame, layoutDisplayFrame,
                     mTmpRect);
             if (!layoutInParentFrame()) {
@@ -1161,9 +1167,8 @@
                     windowFrames.mDisplayFrame);
             windowFrames.calculateDockedDividerInsets(c.getDisplayCutout().getSafeInsets());
         } else {
-            getDisplayContent().getBounds(mTmpRect);
-            windowFrames.calculateInsets(
-                    windowsAreFloating, isFullscreenAndFillsDisplay, mTmpRect);
+            windowFrames.calculateInsets(windowsAreFloating, isFullscreenAndFillsDisplay,
+                    getDisplayFrames(dc.mDisplayFrames).mUnrestricted);
         }
 
         windowFrames.setDisplayCutout(
@@ -1186,12 +1191,8 @@
 
         if (mIsWallpaper && (fw != windowFrames.mFrame.width()
                 || fh != windowFrames.mFrame.height())) {
-            final DisplayContent displayContent = getDisplayContent();
-            if (displayContent != null) {
-                final DisplayInfo displayInfo = displayContent.getDisplayInfo();
-                getDisplayContent().mWallpaperController.updateWallpaperOffset(this,
-                        displayInfo.logicalWidth, displayInfo.logicalHeight, false);
-            }
+            dc.mWallpaperController.updateWallpaperOffset(this,
+                    displayInfo.logicalWidth, displayInfo.logicalHeight, false /* sync */);
         }
 
         // Calculate relative frame
@@ -1467,9 +1468,28 @@
         }
     }
 
+    DisplayFrames getDisplayFrames(DisplayFrames originalFrames) {
+        final DisplayFrames diplayFrames = mToken.getFixedRotationTransformDisplayFrames();
+        if (diplayFrames != null) {
+            return diplayFrames;
+        }
+        return originalFrames;
+    }
+
     DisplayInfo getDisplayInfo() {
-        final DisplayContent displayContent = getDisplayContent();
-        return displayContent != null ? displayContent.getDisplayInfo() : null;
+        final DisplayInfo displayInfo = mToken.getFixedRotationTransformDisplayInfo();
+        if (displayInfo != null) {
+            return displayInfo;
+        }
+        return getDisplayContent().getDisplayInfo();
+    }
+
+    InsetsState getInsetsState() {
+        final InsetsState insetsState = mToken.getFixedRotationTransformInsetsState();
+        if (insetsState != null) {
+            return insetsState;
+        }
+        return getDisplayContent().getInsetsPolicy().getInsetsForDispatch(this);
     }
 
     @Override
@@ -1989,6 +2009,11 @@
     }
 
     private boolean matchesDisplayBounds() {
+        final Rect displayBounds = mToken.getFixedRotationTransformDisplayBounds();
+        if (displayBounds != null) {
+            // If the rotated display bounds are available, the window bounds are also rotated.
+            return displayBounds.equals(getBounds());
+        }
         return getDisplayContent().getBounds().equals(getBounds());
     }
 
@@ -2661,18 +2686,6 @@
                             mWmService.mTaskSnapshotController.onAppDied(win.mActivityRecord);
                         }
                         win.removeIfPossible(shouldKeepVisibleDeadAppWindow());
-                        if (win.mAttrs.type == TYPE_DOCK_DIVIDER) {
-                            // The owner of the docked divider died :( We reset the docked stack,
-                            // just in case they have the divider at an unstable position. Better
-                            // also reset drag resizing state, because the owner can't do it
-                            // anymore.
-                            final ActivityStack stack =
-                                    dc.getRootSplitScreenPrimaryTask();
-                            if (stack != null) {
-                                stack.resetDockedStackToMiddle();
-                            }
-                            resetSplitScreenResizing = true;
-                        }
                     } else if (mHasSurface) {
                         Slog.e(TAG, "!!! LEAK !!! Window removed but surface still valid.");
                         WindowState.this.removeIfPossible();
@@ -4785,7 +4798,7 @@
         if (!displayContent.isDefaultDisplay && !displayContent.supportsSystemDecorations()) {
             // On a different display there is no system decor. Crop the window
             // by the screen boundaries.
-            final DisplayInfo displayInfo = displayContent.getDisplayInfo();
+            final DisplayInfo displayInfo = getDisplayInfo();
             policyCrop.set(0, 0, mWindowFrames.mCompatFrame.width(),
                     mWindowFrames.mCompatFrame.height());
             policyCrop.intersect(-mWindowFrames.mCompatFrame.left, -mWindowFrames.mCompatFrame.top,
@@ -5011,7 +5024,7 @@
             return;
         }
 
-        final DisplayInfo displayInfo = getDisplayContent().getDisplayInfo();
+        final DisplayInfo displayInfo = getDisplayInfo();
         anim.initialize(mWindowFrames.mFrame.width(), mWindowFrames.mFrame.height(),
                 displayInfo.appWidth, displayInfo.appHeight);
         anim.restrictDuration(MAX_ANIMATION_DURATION);
@@ -5549,7 +5562,7 @@
     }
 
     /**
-     * If the transient frame is set, the computed result won't be used in real layout. So this
+     * If the simulated frame is set, the computed result won't be used in real layout. So this
      * frames must be cleared when the simulated computation is done.
      */
     void setSimulatedWindowFrames(WindowFrames windowFrames) {
@@ -5689,4 +5702,30 @@
     SurfaceControl getDeferTransactionBarrier() {
         return mWinAnimator.getDeferTransactionBarrier();
     }
+
+    @Override
+    boolean prepareForSync(BLASTSyncEngine.TransactionReadyListener waitingListener,
+            int waitingId) {
+        // TODO(b/148871522): Support child window
+        mWaitingListener = waitingListener;
+        mWaitingSyncId = waitingId;
+        mUsingBLASTSyncTransaction = true;
+        return true;
+    }
+
+    boolean finishDrawing(SurfaceControl.Transaction postDrawTransaction) {
+        if (!mUsingBLASTSyncTransaction) {
+            return mWinAnimator.finishDrawingLocked(postDrawTransaction);
+        }
+        if (postDrawTransaction == null) {
+            postDrawTransaction = new SurfaceControl.Transaction();
+        }
+        postDrawTransaction.merge(mBLASTSyncTransaction);
+        mWaitingListener.transactionReady(mWaitingSyncId, postDrawTransaction);
+        mUsingBLASTSyncTransaction = false;
+
+        mWaitingSyncId = 0;
+        mWaitingListener = null;
+        return mWinAnimator.finishDrawingLocked(null);
+    }
 }
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index 43cd66d..48c7812 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -36,15 +36,20 @@
 import static com.android.server.wm.WindowTokenProto.WINDOW_CONTAINER;
 
 import android.annotation.CallSuper;
+import android.content.res.Configuration;
+import android.graphics.Rect;
 import android.os.Debug;
 import android.os.IBinder;
 import android.util.proto.ProtoOutputStream;
+import android.view.DisplayInfo;
+import android.view.InsetsState;
 import android.view.SurfaceControl;
 
 import com.android.server.policy.WindowManagerPolicy;
 import com.android.server.protolog.common.ProtoLog;
 
 import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.Comparator;
 
 /**
@@ -84,6 +89,57 @@
     /** The owner has {@link android.Manifest.permission#MANAGE_APP_TOKENS} */
     final boolean mOwnerCanManageAppTokens;
 
+    private FixedRotationTransformState mFixedRotationTransformState;
+
+    /**
+     * Used to fix the transform of the token to be rotated to a rotation different than it's
+     * display. The window frames and surfaces corresponding to this token will be layouted and
+     * rotated by the given rotated display info, frames and insets.
+     */
+    private static class FixedRotationTransformState {
+        final DisplayInfo mDisplayInfo;
+        final DisplayFrames mDisplayFrames;
+        final InsetsState mInsetsState;
+        final Configuration mRotatedOverrideConfiguration;
+        final SeamlessRotator mRotator;
+        final ArrayList<WindowContainer<?>> mRotatedContainers = new ArrayList<>();
+        boolean mIsTransforming = true;
+
+        FixedRotationTransformState(DisplayInfo rotatedDisplayInfo,
+                DisplayFrames rotatedDisplayFrames, InsetsState rotatedInsetsState,
+                Configuration rotatedConfig, int currentRotation) {
+            mDisplayInfo = rotatedDisplayInfo;
+            mDisplayFrames = rotatedDisplayFrames;
+            mInsetsState = rotatedInsetsState;
+            mRotatedOverrideConfiguration = rotatedConfig;
+            // This will use unrotate as rotate, so the new and old rotation are inverted.
+            mRotator = new SeamlessRotator(rotatedDisplayInfo.rotation, currentRotation,
+                    rotatedDisplayInfo);
+        }
+
+        /**
+         * Transforms the window container from the next rotation to the current rotation for
+         * showing the window in a display with different rotation.
+         */
+        void transform(WindowContainer<?> container) {
+            mRotator.unrotate(container.getPendingTransaction(), container);
+            if (!mRotatedContainers.contains(container)) {
+                mRotatedContainers.add(container);
+            }
+        }
+
+        /**
+         * Resets the transformation of the window containers which have been rotated. This should
+         * be called when the window has the same rotation as display.
+         */
+        void resetTransform() {
+            for (int i = mRotatedContainers.size() - 1; i >= 0; i--) {
+                final WindowContainer<?> c = mRotatedContainers.get(i);
+                mRotator.finish(c.getPendingTransaction(), c);
+            }
+        }
+    }
+
     /**
      * Compares two child window of this token and returns -1 if the first is lesser than the
      * second in terms of z-order and 1 otherwise.
@@ -274,6 +330,120 @@
         return builder;
     }
 
+    boolean hasFixedRotationTransform() {
+        return mFixedRotationTransformState != null;
+    }
+
+    boolean isFinishingFixedRotationTransform() {
+        return mFixedRotationTransformState != null
+                && !mFixedRotationTransformState.mIsTransforming;
+    }
+
+    boolean isFixedRotationTransforming() {
+        return mFixedRotationTransformState != null
+                && mFixedRotationTransformState.mIsTransforming;
+    }
+
+    DisplayInfo getFixedRotationTransformDisplayInfo() {
+        return isFixedRotationTransforming() ? mFixedRotationTransformState.mDisplayInfo : null;
+    }
+
+    DisplayFrames getFixedRotationTransformDisplayFrames() {
+        return isFixedRotationTransforming() ? mFixedRotationTransformState.mDisplayFrames : null;
+    }
+
+    Rect getFixedRotationTransformDisplayBounds() {
+        return isFixedRotationTransforming()
+                ? mFixedRotationTransformState.mRotatedOverrideConfiguration.windowConfiguration
+                        .getBounds()
+                : null;
+    }
+
+    InsetsState getFixedRotationTransformInsetsState() {
+        return isFixedRotationTransforming() ? mFixedRotationTransformState.mInsetsState : null;
+    }
+
+    /** Applies the rotated layout environment to this token in the simulated rotated display. */
+    void applyFixedRotationTransform(DisplayInfo info, DisplayFrames displayFrames,
+            Configuration config) {
+        if (mFixedRotationTransformState != null) {
+            return;
+        }
+        final InsetsState insetsState = new InsetsState();
+        mDisplayContent.getDisplayPolicy().simulateLayoutDisplay(displayFrames, insetsState,
+                mDisplayContent.getConfiguration().uiMode);
+        mFixedRotationTransformState = new FixedRotationTransformState(info, displayFrames,
+                insetsState, new Configuration(config), mDisplayContent.getRotation());
+        onConfigurationChanged(getParent().getConfiguration());
+    }
+
+    /**
+     * Copies the {@link FixedRotationTransformState} (if any) from the other WindowToken to this
+     * one.
+     */
+    void applyFixedRotationTransform(WindowToken other) {
+        final FixedRotationTransformState fixedRotationState = other.mFixedRotationTransformState;
+        if (fixedRotationState != null) {
+            applyFixedRotationTransform(fixedRotationState.mDisplayInfo,
+                    fixedRotationState.mDisplayFrames,
+                    fixedRotationState.mRotatedOverrideConfiguration);
+        }
+    }
+
+    /** Clears the transformation and continue updating the orientation change of display. */
+    void clearFixedRotationTransform() {
+        if (mFixedRotationTransformState == null) {
+            return;
+        }
+        mFixedRotationTransformState.resetTransform();
+        // Clear the flag so if the display will be updated to the same orientation, the transform
+        // won't take effect. The state is cleared at the end, because it is used to indicate that
+        // other windows can use seamless rotation when applying rotation to display.
+        mFixedRotationTransformState.mIsTransforming = false;
+        final boolean changed =
+                mDisplayContent.continueUpdateOrientationForDiffOrienLaunchingApp(this);
+        // If it is not the launching app or the display is not rotated, make sure the merged
+        // override configuration is restored from parent.
+        if (!changed) {
+            onMergedOverrideConfigurationChanged();
+        }
+        mFixedRotationTransformState = null;
+    }
+
+    @Override
+    void resolveOverrideConfiguration(Configuration newParentConfig) {
+        super.resolveOverrideConfiguration(newParentConfig);
+        if (isFixedRotationTransforming()) {
+            // Apply the rotated configuration to current resolved configuration, so the merged
+            // override configuration can update to the same state.
+            getResolvedOverrideConfiguration().updateFrom(
+                    mFixedRotationTransformState.mRotatedOverrideConfiguration);
+        }
+    }
+
+    @Override
+    void updateSurfacePosition() {
+        super.updateSurfacePosition();
+        if (isFixedRotationTransforming()) {
+            // The window is layouted in a simulated rotated display but the real display hasn't
+            // rotated, so here transforms its surface to fit in the real display.
+            mFixedRotationTransformState.transform(this);
+        }
+    }
+
+    /**
+     * Converts the rotated animation frames and insets back to display space for local animation.
+     * It should only be called when {@link #hasFixedRotationTransform} is true.
+     */
+    void unrotateAnimationFrames(Rect outFrame, Rect outInsets, Rect outStableInsets,
+            Rect outSurfaceInsets) {
+        final SeamlessRotator rotator = mFixedRotationTransformState.mRotator;
+        rotator.unrotateFrame(outFrame);
+        rotator.unrotateInsets(outInsets);
+        rotator.unrotateInsets(outStableInsets);
+        rotator.unrotateInsets(outSurfaceInsets);
+    }
+
     @CallSuper
     @Override
     public void dumpDebug(ProtoOutputStream proto, long fieldId,
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index 390068e..e888f2a 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -2,6 +2,7 @@
     name: "libservices.core",
     defaults: ["libservices.core-libs"],
 
+    cpp_std: "c++2a",
     cflags: [
         "-Wall",
         "-Werror",
@@ -13,7 +14,6 @@
     ],
 
     srcs: [
-        ":graphicsstats_proto",
         ":lib_alarmManagerService_native",
         "BroadcastRadio/JavaRef.cpp",
         "BroadcastRadio/NativeCallbackThread.cpp",
@@ -53,10 +53,10 @@
         "com_android_server_UsbHostManager.cpp",
         "com_android_server_VibratorService.cpp",
         "com_android_server_PersistentDataBlockService.cpp",
-        "com_android_server_GraphicsStatsService.cpp",
         "com_android_server_am_CachedAppOptimizer.cpp",
         "com_android_server_am_LowMemDetector.cpp",
         "com_android_server_incremental_IncrementalManagerService.cpp",
+        "com_android_server_pm_PackageManagerShellCommandDataLoader.cpp",
         "onload.cpp",
         ":lib_networkStatsFactory_native",
     ],
@@ -107,8 +107,7 @@
         "libinputflinger",
         "libinputflinger_base",
         "libinputservice",
-        "libprotobuf-cpp-lite",
-        "libprotoutil",
+        "libstatshidl",
         "libstatspull",
         "libstatssocket",
         "libstatslog",
@@ -128,6 +127,8 @@
         "libnetdbpf",
         "libnetdutils",
         "libpsi",
+        "libdataloader",
+        "libincfs",
         "android.hardware.audio.common@2.0",
         "android.hardware.broadcastradio@1.0",
         "android.hardware.broadcastradio@1.1",
@@ -155,6 +156,7 @@
         "android.hardware.vr@1.0",
         "android.frameworks.schedulerservice@1.0",
         "android.frameworks.sensorservice@1.0",
+        "android.frameworks.stats@1.0",
         "android.system.suspend@1.0",
         "service.incremental",
         "suspend_control_aidl_interface-cpp",
diff --git a/services/core/jni/com_android_server_GraphicsStatsService.cpp b/services/core/jni/com_android_server_GraphicsStatsService.cpp
deleted file mode 100644
index aa7067e..0000000
--- a/services/core/jni/com_android_server_GraphicsStatsService.cpp
+++ /dev/null
@@ -1,292 +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.
- */
-
-#define LOG_TAG "GraphicsStatsService"
-
-#include <jni.h>
-#include <log/log.h>
-#include <nativehelper/JNIHelp.h>
-#include <nativehelper/ScopedPrimitiveArray.h>
-#include <nativehelper/ScopedUtfChars.h>
-#include <JankTracker.h>
-#include <service/GraphicsStatsService.h>
-#include <stats_pull_atom_callback.h>
-#include <stats_event.h>
-#include <statslog.h>
-#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
-#include <android/util/ProtoOutputStream.h>
-#include "android/graphics/Utils.h"
-#include "core_jni_helpers.h"
-#include "protos/graphicsstats.pb.h"
-#include <cstring>
-#include <memory>
-
-namespace android {
-
-using namespace android::uirenderer;
-
-static jint getAshmemSize(JNIEnv*, jobject) {
-    return sizeof(ProfileData);
-}
-
-static jlong createDump(JNIEnv*, jobject, jint fd, jboolean isProto) {
-    GraphicsStatsService::Dump* dump = GraphicsStatsService::createDump(fd, isProto
-            ? GraphicsStatsService::DumpType::Protobuf : GraphicsStatsService::DumpType::Text);
-    return reinterpret_cast<jlong>(dump);
-}
-
-static void addToDump(JNIEnv* env, jobject, jlong dumpPtr, jstring jpath, jstring jpackage,
-        jlong versionCode, jlong startTime, jlong endTime, jbyteArray jdata) {
-    std::string path;
-    const ProfileData* data = nullptr;
-    LOG_ALWAYS_FATAL_IF(jdata == nullptr && jpath == nullptr, "Path and data can't both be null");
-    ScopedByteArrayRO buffer{env};
-    if (jdata != nullptr) {
-        buffer.reset(jdata);
-        LOG_ALWAYS_FATAL_IF(buffer.size() != sizeof(ProfileData),
-                "Buffer size %zu doesn't match expected %zu!", buffer.size(), sizeof(ProfileData));
-        data = reinterpret_cast<const ProfileData*>(buffer.get());
-    }
-    if (jpath != nullptr) {
-        ScopedUtfChars pathChars(env, jpath);
-        LOG_ALWAYS_FATAL_IF(pathChars.size() <= 0 || !pathChars.c_str(), "Failed to get path chars");
-        path.assign(pathChars.c_str(), pathChars.size());
-    }
-    ScopedUtfChars packageChars(env, jpackage);
-    LOG_ALWAYS_FATAL_IF(packageChars.size() <= 0 || !packageChars.c_str(), "Failed to get path chars");
-    GraphicsStatsService::Dump* dump = reinterpret_cast<GraphicsStatsService::Dump*>(dumpPtr);
-    LOG_ALWAYS_FATAL_IF(!dump, "null passed for dump pointer");
-
-    const std::string package(packageChars.c_str(), packageChars.size());
-    GraphicsStatsService::addToDump(dump, path, package, versionCode, startTime, endTime, data);
-}
-
-static void addFileToDump(JNIEnv* env, jobject, jlong dumpPtr, jstring jpath) {
-    ScopedUtfChars pathChars(env, jpath);
-    LOG_ALWAYS_FATAL_IF(pathChars.size() <= 0 || !pathChars.c_str(), "Failed to get path chars");
-    const std::string path(pathChars.c_str(), pathChars.size());
-    GraphicsStatsService::Dump* dump = reinterpret_cast<GraphicsStatsService::Dump*>(dumpPtr);
-    GraphicsStatsService::addToDump(dump, path);
-}
-
-static void finishDump(JNIEnv*, jobject, jlong dumpPtr) {
-    GraphicsStatsService::Dump* dump = reinterpret_cast<GraphicsStatsService::Dump*>(dumpPtr);
-    GraphicsStatsService::finishDump(dump);
-}
-
-static jlong finishDumpInMemory(JNIEnv* env, jobject, jlong dumpPtr) {
-    GraphicsStatsService::Dump* dump = reinterpret_cast<GraphicsStatsService::Dump*>(dumpPtr);
-    std::vector<uint8_t>* result = new std::vector<uint8_t>();
-    GraphicsStatsService::finishDumpInMemory(dump,
-        [](void* buffer, int bufferOffset, int bufferSize, int totalSize, void* param1, void* param2) {
-            std::vector<uint8_t>* outBuffer = reinterpret_cast<std::vector<uint8_t>*>(param2);
-            if (outBuffer->size() < totalSize) {
-                outBuffer->resize(totalSize);
-            }
-            std::memcpy(outBuffer->data() + bufferOffset, buffer, bufferSize);
-        }, env, result);
-    return reinterpret_cast<jlong>(result);
-}
-
-static void saveBuffer(JNIEnv* env, jobject clazz, jstring jpath, jstring jpackage,
-        jlong versionCode, jlong startTime, jlong endTime, jbyteArray jdata) {
-    ScopedByteArrayRO buffer(env, jdata);
-    LOG_ALWAYS_FATAL_IF(buffer.size() != sizeof(ProfileData),
-            "Buffer size %zu doesn't match expected %zu!", buffer.size(), sizeof(ProfileData));
-    ScopedUtfChars pathChars(env, jpath);
-    LOG_ALWAYS_FATAL_IF(pathChars.size() <= 0 || !pathChars.c_str(), "Failed to get path chars");
-    ScopedUtfChars packageChars(env, jpackage);
-    LOG_ALWAYS_FATAL_IF(packageChars.size() <= 0 || !packageChars.c_str(), "Failed to get path chars");
-
-    const std::string path(pathChars.c_str(), pathChars.size());
-    const std::string package(packageChars.c_str(), packageChars.size());
-    const ProfileData* data = reinterpret_cast<const ProfileData*>(buffer.get());
-    GraphicsStatsService::saveBuffer(path, package, versionCode, startTime, endTime, data);
-}
-
-static jobject gGraphicsStatsServiceObject = nullptr;
-static jmethodID gGraphicsStatsService_pullGraphicsStatsMethodID;
-
-static JNIEnv* getJNIEnv() {
-    JavaVM* vm = AndroidRuntime::getJavaVM();
-    JNIEnv* env = nullptr;
-    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
-        if (vm->AttachCurrentThreadAsDaemon(&env, nullptr) != JNI_OK) {
-            LOG_ALWAYS_FATAL("Failed to AttachCurrentThread!");
-        }
-    }
-    return env;
-}
-
-using namespace google::protobuf;
-
-// Field ids taken from FrameTimingHistogram message in atoms.proto
-#define TIME_MILLIS_BUCKETS_FIELD_NUMBER 1
-#define FRAME_COUNTS_FIELD_NUMBER 2
-
-static void writeCpuHistogram(AStatsEvent* event,
-                              const uirenderer::protos::GraphicsStatsProto& stat) {
-    util::ProtoOutputStream proto;
-    for (int bucketIndex = 0; bucketIndex < stat.histogram_size(); bucketIndex++) {
-        auto& bucket = stat.histogram(bucketIndex);
-        proto.write(android::util::FIELD_TYPE_INT32 | android::util::FIELD_COUNT_REPEATED |
-                            TIME_MILLIS_BUCKETS_FIELD_NUMBER /* field id */,
-                    (int)bucket.render_millis());
-    }
-    for (int bucketIndex = 0; bucketIndex < stat.histogram_size(); bucketIndex++) {
-        auto& bucket = stat.histogram(bucketIndex);
-        proto.write(android::util::FIELD_TYPE_INT64 | android::util::FIELD_COUNT_REPEATED |
-                            FRAME_COUNTS_FIELD_NUMBER /* field id */,
-                    (long long)bucket.frame_count());
-    }
-    std::vector<uint8_t> outVector;
-    proto.serializeToVector(&outVector);
-    AStatsEvent_writeByteArray(event, outVector.data(), outVector.size());
-}
-
-static void writeGpuHistogram(AStatsEvent* event,
-                              const uirenderer::protos::GraphicsStatsProto& stat) {
-    util::ProtoOutputStream proto;
-    for (int bucketIndex = 0; bucketIndex < stat.gpu_histogram_size(); bucketIndex++) {
-        auto& bucket = stat.gpu_histogram(bucketIndex);
-        proto.write(android::util::FIELD_TYPE_INT32 | android::util::FIELD_COUNT_REPEATED |
-                            TIME_MILLIS_BUCKETS_FIELD_NUMBER /* field id */,
-                    (int)bucket.render_millis());
-    }
-    for (int bucketIndex = 0; bucketIndex < stat.gpu_histogram_size(); bucketIndex++) {
-        auto& bucket = stat.gpu_histogram(bucketIndex);
-        proto.write(android::util::FIELD_TYPE_INT64 | android::util::FIELD_COUNT_REPEATED |
-                            FRAME_COUNTS_FIELD_NUMBER /* field id */,
-                    (long long)bucket.frame_count());
-    }
-    std::vector<uint8_t> outVector;
-    proto.serializeToVector(&outVector);
-    AStatsEvent_writeByteArray(event, outVector.data(), outVector.size());
-}
-
-// graphicsStatsPullCallback is invoked by statsd service to pull GRAPHICS_STATS atom.
-static AStatsManager_PullAtomCallbackReturn graphicsStatsPullCallback(int32_t atom_tag,
-                                                                      AStatsEventList* data,
-                                                                      void* cookie) {
-    JNIEnv* env = getJNIEnv();
-    if (!env) {
-        return false;
-    }
-    if (gGraphicsStatsServiceObject == nullptr) {
-        ALOGE("Failed to get graphicsstats service");
-        return AStatsManager_PULL_SKIP;
-    }
-
-    for (bool lastFullDay : {true, false}) {
-        jlong jdata = (jlong) env->CallLongMethod(
-                    gGraphicsStatsServiceObject,
-                    gGraphicsStatsService_pullGraphicsStatsMethodID,
-                    (jboolean)(lastFullDay ? JNI_TRUE : JNI_FALSE));
-        if (env->ExceptionCheck()) {
-            env->ExceptionDescribe();
-            env->ExceptionClear();
-            ALOGE("Failed to invoke graphicsstats service");
-            return AStatsManager_PULL_SKIP;
-        }
-        if (!jdata) {
-            // null means data is not available for that day.
-            continue;
-        }
-        android::uirenderer::protos::GraphicsStatsServiceDumpProto serviceDump;
-        std::vector<uint8_t>* buffer = reinterpret_cast<std::vector<uint8_t>*>(jdata);
-        std::unique_ptr<std::vector<uint8_t>> bufferRelease(buffer);
-        int dataSize = buffer->size();
-        if (!dataSize) {
-            // Data is not available for that day.
-            continue;
-        }
-        io::ArrayInputStream input{buffer->data(), dataSize};
-        bool success = serviceDump.ParseFromZeroCopyStream(&input);
-        if (!success) {
-            ALOGW("Parse failed on GraphicsStatsPuller error='%s' dataSize='%d'",
-                  serviceDump.InitializationErrorString().c_str(), dataSize);
-            return AStatsManager_PULL_SKIP;
-        }
-
-        for (int stat_index = 0; stat_index < serviceDump.stats_size(); stat_index++) {
-            auto& stat = serviceDump.stats(stat_index);
-            AStatsEvent* event = AStatsEventList_addStatsEvent(data);
-            AStatsEvent_setAtomId(event, android::util::GRAPHICS_STATS);
-            AStatsEvent_writeString(event, stat.package_name().c_str());
-            AStatsEvent_writeInt64(event, (int64_t)stat.version_code());
-            AStatsEvent_writeInt64(event, (int64_t)stat.stats_start());
-            AStatsEvent_writeInt64(event, (int64_t)stat.stats_end());
-            AStatsEvent_writeInt32(event, (int32_t)stat.pipeline());
-            AStatsEvent_writeInt32(event, (int32_t)stat.summary().total_frames());
-            AStatsEvent_writeInt32(event, (int32_t)stat.summary().missed_vsync_count());
-            AStatsEvent_writeInt32(event, (int32_t)stat.summary().high_input_latency_count());
-            AStatsEvent_writeInt32(event, (int32_t)stat.summary().slow_ui_thread_count());
-            AStatsEvent_writeInt32(event, (int32_t)stat.summary().slow_bitmap_upload_count());
-            AStatsEvent_writeInt32(event, (int32_t)stat.summary().slow_draw_count());
-            AStatsEvent_writeInt32(event, (int32_t)stat.summary().missed_deadline_count());
-            writeCpuHistogram(event, stat);
-            writeGpuHistogram(event, stat);
-            // TODO: fill in UI mainline module version, when the feature is available.
-            AStatsEvent_writeInt64(event, (int64_t)0);
-            AStatsEvent_writeBool(event, !lastFullDay);
-            AStatsEvent_build(event);
-        }
-    }
-    return AStatsManager_PULL_SUCCESS;
-}
-
-// Register a puller for GRAPHICS_STATS atom with the statsd service.
-static void nativeInit(JNIEnv* env, jobject javaObject) {
-    gGraphicsStatsServiceObject = env->NewGlobalRef(javaObject);
-    AStatsManager_PullAtomMetadata* metadata = AStatsManager_PullAtomMetadata_obtain();
-    AStatsManager_PullAtomMetadata_setCoolDownNs(metadata, 10 * 1000000);  // 10 milliseconds
-    AStatsManager_PullAtomMetadata_setTimeoutNs(metadata, 2 * NS_PER_SEC); // 2 seconds
-
-    AStatsManager_registerPullAtomCallback(android::util::GRAPHICS_STATS,
-                                           &graphicsStatsPullCallback, metadata, nullptr);
-
-    AStatsManager_PullAtomMetadata_release(metadata);
-}
-
-static void nativeDestructor(JNIEnv* env, jobject javaObject) {
-    AStatsManager_unregisterPullAtomCallback(android::util::GRAPHICS_STATS);
-    env->DeleteGlobalRef(gGraphicsStatsServiceObject);
-    gGraphicsStatsServiceObject = nullptr;
-}
-
-static const JNINativeMethod sMethods[] = {
-    { "nGetAshmemSize", "()I", (void*) getAshmemSize },
-    { "nCreateDump", "(IZ)J", (void*) createDump },
-    { "nAddToDump", "(JLjava/lang/String;Ljava/lang/String;JJJ[B)V", (void*) addToDump },
-    { "nAddToDump", "(JLjava/lang/String;)V", (void*) addFileToDump },
-    { "nFinishDump", "(J)V", (void*) finishDump },
-    { "nFinishDumpInMemory", "(J)J", (void*) finishDumpInMemory },
-    { "nSaveBuffer", "(Ljava/lang/String;Ljava/lang/String;JJJ[B)V", (void*) saveBuffer },
-    { "nativeInit", "()V", (void*) nativeInit },
-    { "nativeDestructor",   "()V",     (void*)nativeDestructor }
-};
-
-int register_android_server_GraphicsStatsService(JNIEnv* env)
-{
-    jclass graphicsStatsService_class = FindClassOrDie(env,
-            "com/android/server/GraphicsStatsService");
-    gGraphicsStatsService_pullGraphicsStatsMethodID = GetMethodIDOrDie(env,
-            graphicsStatsService_class, "pullGraphicsStats", "(Z)J");
-    return jniRegisterNativeMethods(env, "com/android/server/GraphicsStatsService",
-                                    sMethods, NELEM(sMethods));
-}
-
-} // namespace android
diff --git a/services/core/jni/com_android_server_SystemServer.cpp b/services/core/jni/com_android_server_SystemServer.cpp
index 67254b8..279ea4b 100644
--- a/services/core/jni/com_android_server_SystemServer.cpp
+++ b/services/core/jni/com_android_server_SystemServer.cpp
@@ -29,6 +29,7 @@
 #include <schedulerservice/SchedulingPolicyService.h>
 #include <sensorservice/SensorService.h>
 #include <sensorservicehidl/SensorManager.h>
+#include <stats/StatsHal.h>
 
 #include <bionic/malloc.h>
 #include <bionic/reserved_signals.h>
@@ -59,6 +60,8 @@
     using ::android::frameworks::schedulerservice::V1_0::implementation::SchedulingPolicyService;
     using ::android::frameworks::sensorservice::V1_0::ISensorManager;
     using ::android::frameworks::sensorservice::V1_0::implementation::SensorManager;
+    using ::android::frameworks::stats::V1_0::IStats;
+    using ::android::frameworks::stats::V1_0::implementation::StatsHal;
     using ::android::hardware::configureRpcThreadpool;
 
     status_t err;
@@ -75,6 +78,10 @@
     sp<ISchedulingPolicyService> schedulingService = new SchedulingPolicyService();
     err = schedulingService->registerAsService();
     ALOGE_IF(err != OK, "Cannot register %s: %d", ISchedulingPolicyService::descriptor, err);
+
+    sp<IStats> statsHal = new StatsHal();
+    err = statsHal->registerAsService();
+    ALOGE_IF(err != OK, "Cannot register %s: %d", IStats::descriptor, err);
 }
 
 static void android_server_SystemServer_initZygoteChildHeapProfiling(JNIEnv* /* env */,
diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp
index 49db3d5..8772edd 100644
--- a/services/core/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/core/jni/com_android_server_input_InputManagerService.cpp
@@ -50,13 +50,15 @@
 
 #include <inputflinger/InputManager.h>
 
+#include <android/graphics/GraphicsJNI.h>
 #include <android_os_MessageQueue.h>
+#include <android_view_InputChannel.h>
 #include <android_view_InputDevice.h>
 #include <android_view_KeyEvent.h>
 #include <android_view_MotionEvent.h>
-#include <android_view_InputChannel.h>
 #include <android_view_PointerIcon.h>
-#include <android/graphics/GraphicsJNI.h>
+#include <android_view_VerifiedKeyEvent.h>
+#include <android_view_VerifiedMotionEvent.h>
 
 #include <nativehelper/ScopedLocalFrame.h>
 #include <nativehelper/ScopedLocalRef.h>
@@ -1513,6 +1515,49 @@
     }
 }
 
+static jobject nativeVerifyInputEvent(JNIEnv* env, jclass /* clazz */, jlong ptr,
+                                      jobject inputEventObj) {
+    NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
+
+    if (env->IsInstanceOf(inputEventObj, gKeyEventClassInfo.clazz)) {
+        KeyEvent keyEvent;
+        status_t status = android_view_KeyEvent_toNative(env, inputEventObj, &keyEvent);
+        if (status) {
+            jniThrowRuntimeException(env, "Could not read contents of KeyEvent object.");
+            return nullptr;
+        }
+
+        std::unique_ptr<VerifiedInputEvent> verifiedEvent =
+                im->getInputManager()->getDispatcher()->verifyInputEvent(keyEvent);
+        if (verifiedEvent == nullptr) {
+            return nullptr;
+        }
+
+        return android_view_VerifiedKeyEvent(env,
+                                             static_cast<const VerifiedKeyEvent&>(*verifiedEvent));
+    } else if (env->IsInstanceOf(inputEventObj, gMotionEventClassInfo.clazz)) {
+        const MotionEvent* motionEvent = android_view_MotionEvent_getNativePtr(env, inputEventObj);
+        if (!motionEvent) {
+            jniThrowRuntimeException(env, "Could not read contents of MotionEvent object.");
+            return nullptr;
+        }
+
+        std::unique_ptr<VerifiedInputEvent> verifiedEvent =
+                im->getInputManager()->getDispatcher()->verifyInputEvent(*motionEvent);
+
+        if (verifiedEvent == nullptr) {
+            return nullptr;
+        }
+
+        return android_view_VerifiedMotionEvent(env,
+                                                static_cast<const VerifiedMotionEvent&>(
+                                                        *verifiedEvent));
+    } else {
+        jniThrowRuntimeException(env, "Invalid input event type.");
+        return nullptr;
+    }
+}
+
 static void nativeToggleCapsLock(JNIEnv* env, jclass /* clazz */,
          jlong ptr, jint deviceId) {
     NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
@@ -1735,90 +1780,61 @@
 // ----------------------------------------------------------------------------
 
 static const JNINativeMethod gInputManagerMethods[] = {
-    /* name, signature, funcPtr */
-    { "nativeInit",
-            "(Lcom/android/server/input/InputManagerService;Landroid/content/Context;Landroid/os/MessageQueue;)J",
-            (void*) nativeInit },
-    { "nativeStart", "(J)V",
-            (void*) nativeStart },
-    { "nativeSetDisplayViewports", "(J[Landroid/hardware/display/DisplayViewport;)V",
-            (void*) nativeSetDisplayViewports },
-    { "nativeGetScanCodeState", "(JIII)I",
-            (void*) nativeGetScanCodeState },
-    { "nativeGetKeyCodeState", "(JIII)I",
-            (void*) nativeGetKeyCodeState },
-    { "nativeGetSwitchState", "(JIII)I",
-            (void*) nativeGetSwitchState },
-    { "nativeHasKeys", "(JII[I[Z)Z",
-            (void*) nativeHasKeys },
-    { "nativeRegisterInputChannel",
-            "(JLandroid/view/InputChannel;)V",
-            (void*) nativeRegisterInputChannel },
-    { "nativeRegisterInputMonitor",
-            "(JLandroid/view/InputChannel;IZ)V",
-            (void*) nativeRegisterInputMonitor},
-    { "nativeUnregisterInputChannel", "(JLandroid/view/InputChannel;)V",
-            (void*) nativeUnregisterInputChannel },
-    { "nativePilferPointers", "(JLandroid/os/IBinder;)V",
-            (void*) nativePilferPointers },
-    { "nativeSetInputFilterEnabled", "(JZ)V",
-            (void*) nativeSetInputFilterEnabled },
-    { "nativeSetInTouchMode", "(JZ)V",
-            (void*) nativeSetInTouchMode },
-    { "nativeInjectInputEvent", "(JLandroid/view/InputEvent;IIIII)I",
-            (void*) nativeInjectInputEvent },
-    { "nativeToggleCapsLock", "(JI)V",
-            (void*) nativeToggleCapsLock },
-    { "nativeSetInputWindows", "(J[Landroid/view/InputWindowHandle;I)V",
-            (void*) nativeSetInputWindows },
-    { "nativeSetFocusedApplication", "(JILandroid/view/InputApplicationHandle;)V",
-            (void*) nativeSetFocusedApplication },
-    { "nativeSetFocusedDisplay", "(JI)V",
-            (void*) nativeSetFocusedDisplay },
-    { "nativeSetPointerCapture", "(JZ)V",
-            (void*) nativeSetPointerCapture },
-    { "nativeSetInputDispatchMode", "(JZZ)V",
-            (void*) nativeSetInputDispatchMode },
-    { "nativeSetSystemUiVisibility", "(JI)V",
-            (void*) nativeSetSystemUiVisibility },
-    { "nativeTransferTouchFocus", "(JLandroid/os/IBinder;Landroid/os/IBinder;)Z",
-            (void*) nativeTransferTouchFocus },
-    { "nativeSetPointerSpeed", "(JI)V",
-            (void*) nativeSetPointerSpeed },
-    { "nativeSetShowTouches", "(JZ)V",
-            (void*) nativeSetShowTouches },
-    { "nativeSetInteractive", "(JZ)V",
-            (void*) nativeSetInteractive },
-    { "nativeReloadCalibration", "(J)V",
-            (void*) nativeReloadCalibration },
-    { "nativeVibrate", "(JI[JII)V",
-            (void*) nativeVibrate },
-    { "nativeCancelVibrate", "(JII)V",
-            (void*) nativeCancelVibrate },
-    { "nativeReloadKeyboardLayouts", "(J)V",
-            (void*) nativeReloadKeyboardLayouts },
-    { "nativeReloadDeviceAliases", "(J)V",
-            (void*) nativeReloadDeviceAliases },
-    { "nativeDump", "(J)Ljava/lang/String;",
-            (void*) nativeDump },
-    { "nativeMonitor", "(J)V",
-            (void*) nativeMonitor },
-    { "nativeIsInputDeviceEnabled", "(JI)Z",
-            (void*) nativeIsInputDeviceEnabled },
-    { "nativeEnableInputDevice", "(JI)V",
-            (void*) nativeEnableInputDevice },
-    { "nativeDisableInputDevice", "(JI)V",
-            (void*) nativeDisableInputDevice },
-    { "nativeSetPointerIconType", "(JI)V",
-            (void*) nativeSetPointerIconType },
-    { "nativeReloadPointerIcons", "(J)V",
-            (void*) nativeReloadPointerIcons },
-    { "nativeSetCustomPointerIcon", "(JLandroid/view/PointerIcon;)V",
-            (void*) nativeSetCustomPointerIcon },
-    { "nativeCanDispatchToDisplay", "(JII)Z",
-            (void*) nativeCanDispatchToDisplay },
-    { "nativeNotifyPortAssociationsChanged", "(J)V",
-            (void*) nativeNotifyPortAssociationsChanged },
+        /* name, signature, funcPtr */
+        {"nativeInit",
+         "(Lcom/android/server/input/InputManagerService;Landroid/content/Context;Landroid/os/"
+         "MessageQueue;)J",
+         (void*)nativeInit},
+        {"nativeStart", "(J)V", (void*)nativeStart},
+        {"nativeSetDisplayViewports", "(J[Landroid/hardware/display/DisplayViewport;)V",
+         (void*)nativeSetDisplayViewports},
+        {"nativeGetScanCodeState", "(JIII)I", (void*)nativeGetScanCodeState},
+        {"nativeGetKeyCodeState", "(JIII)I", (void*)nativeGetKeyCodeState},
+        {"nativeGetSwitchState", "(JIII)I", (void*)nativeGetSwitchState},
+        {"nativeHasKeys", "(JII[I[Z)Z", (void*)nativeHasKeys},
+        {"nativeRegisterInputChannel", "(JLandroid/view/InputChannel;)V",
+         (void*)nativeRegisterInputChannel},
+        {"nativeRegisterInputMonitor", "(JLandroid/view/InputChannel;IZ)V",
+         (void*)nativeRegisterInputMonitor},
+        {"nativeUnregisterInputChannel", "(JLandroid/view/InputChannel;)V",
+         (void*)nativeUnregisterInputChannel},
+        {"nativePilferPointers", "(JLandroid/os/IBinder;)V", (void*)nativePilferPointers},
+        {"nativeSetInputFilterEnabled", "(JZ)V", (void*)nativeSetInputFilterEnabled},
+        {"nativeSetInTouchMode", "(JZ)V", (void*)nativeSetInTouchMode},
+        {"nativeInjectInputEvent", "(JLandroid/view/InputEvent;IIIII)I",
+         (void*)nativeInjectInputEvent},
+        {"nativeVerifyInputEvent", "(JLandroid/view/InputEvent;)Landroid/view/VerifiedInputEvent;",
+         (void*)nativeVerifyInputEvent},
+        {"nativeToggleCapsLock", "(JI)V", (void*)nativeToggleCapsLock},
+        {"nativeSetInputWindows", "(J[Landroid/view/InputWindowHandle;I)V",
+         (void*)nativeSetInputWindows},
+        {"nativeSetFocusedApplication", "(JILandroid/view/InputApplicationHandle;)V",
+         (void*)nativeSetFocusedApplication},
+        {"nativeSetFocusedDisplay", "(JI)V", (void*)nativeSetFocusedDisplay},
+        {"nativeSetPointerCapture", "(JZ)V", (void*)nativeSetPointerCapture},
+        {"nativeSetInputDispatchMode", "(JZZ)V", (void*)nativeSetInputDispatchMode},
+        {"nativeSetSystemUiVisibility", "(JI)V", (void*)nativeSetSystemUiVisibility},
+        {"nativeTransferTouchFocus", "(JLandroid/os/IBinder;Landroid/os/IBinder;)Z",
+         (void*)nativeTransferTouchFocus},
+        {"nativeSetPointerSpeed", "(JI)V", (void*)nativeSetPointerSpeed},
+        {"nativeSetShowTouches", "(JZ)V", (void*)nativeSetShowTouches},
+        {"nativeSetInteractive", "(JZ)V", (void*)nativeSetInteractive},
+        {"nativeReloadCalibration", "(J)V", (void*)nativeReloadCalibration},
+        {"nativeVibrate", "(JI[JII)V", (void*)nativeVibrate},
+        {"nativeCancelVibrate", "(JII)V", (void*)nativeCancelVibrate},
+        {"nativeReloadKeyboardLayouts", "(J)V", (void*)nativeReloadKeyboardLayouts},
+        {"nativeReloadDeviceAliases", "(J)V", (void*)nativeReloadDeviceAliases},
+        {"nativeDump", "(J)Ljava/lang/String;", (void*)nativeDump},
+        {"nativeMonitor", "(J)V", (void*)nativeMonitor},
+        {"nativeIsInputDeviceEnabled", "(JI)Z", (void*)nativeIsInputDeviceEnabled},
+        {"nativeEnableInputDevice", "(JI)V", (void*)nativeEnableInputDevice},
+        {"nativeDisableInputDevice", "(JI)V", (void*)nativeDisableInputDevice},
+        {"nativeSetPointerIconType", "(JI)V", (void*)nativeSetPointerIconType},
+        {"nativeReloadPointerIcons", "(J)V", (void*)nativeReloadPointerIcons},
+        {"nativeSetCustomPointerIcon", "(JLandroid/view/PointerIcon;)V",
+         (void*)nativeSetCustomPointerIcon},
+        {"nativeCanDispatchToDisplay", "(JII)Z", (void*)nativeCanDispatchToDisplay},
+        {"nativeNotifyPortAssociationsChanged", "(J)V", (void*)nativeNotifyPortAssociationsChanged},
 };
 
 #define FIND_CLASS(var, className) \
diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
index 1a8f1f9..36ed9a5 100644
--- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
+++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
@@ -26,17 +26,18 @@
 #include <android/hardware/gnss/1.0/IGnssMeasurement.h>
 #include <android/hardware/gnss/1.1/IGnssMeasurement.h>
 #include <android/hardware/gnss/2.0/IGnssMeasurement.h>
+#include <android/hardware/gnss/2.1/IGnssAntennaInfo.h>
 #include <android/hardware/gnss/2.1/IGnssMeasurement.h>
 #include <android/hardware/gnss/measurement_corrections/1.0/IMeasurementCorrections.h>
 #include <android/hardware/gnss/measurement_corrections/1.1/IMeasurementCorrections.h>
 #include <android/hardware/gnss/visibility_control/1.0/IGnssVisibilityControl.h>
 #include <nativehelper/JNIHelp.h>
-#include "jni.h"
-#include "hardware_legacy/power.h"
-#include "utils/Log.h"
-#include "utils/misc.h"
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/Log.h"
+#include "hardware_legacy/power.h"
+#include "jni.h"
+#include "utils/Log.h"
+#include "utils/misc.h"
 
 #include <arpa/inet.h>
 #include <cinttypes>
@@ -54,6 +55,11 @@
 static jclass class_gnssNavigationMessage;
 static jclass class_gnssClock;
 static jclass class_gnssConfiguration_halInterfaceVersion;
+static jclass class_gnssAntennaInfoBuilder;
+static jclass class_phaseCenterOffset;
+static jclass class_sphericalCorrections;
+static jclass class_arrayList;
+static jclass class_doubleArray;
 
 static jobject mCallbacksObj = nullptr;
 
@@ -78,6 +84,7 @@
 static jmethodID method_reportGeofencePauseStatus;
 static jmethodID method_reportGeofenceResumeStatus;
 static jmethodID method_reportMeasurementData;
+static jmethodID method_reportAntennaInfo;
 static jmethodID method_reportNavigationMessages;
 static jmethodID method_reportLocationBatch;
 static jmethodID method_reportGnssServiceDied;
@@ -114,6 +121,16 @@
 static jmethodID method_gnssClockCtor;
 static jmethodID method_gnssMeasurementCtor;
 static jmethodID method_halInterfaceVersionCtor;
+static jmethodID method_gnssAntennaInfoBuilderCtor;
+static jmethodID method_phaseCenterOffsetCtor;
+static jmethodID method_sphericalCorrectionsCtor;
+static jmethodID method_arrayListCtor;
+static jmethodID method_arrayListAdd;
+static jmethodID method_gnssAntennaInfoBuilderSetCarrierFrequencyMHz;
+static jmethodID method_gnssAntennaInfoBuilderSetPhaseCenterOffset;
+static jmethodID method_gnssAntennaInfoBuilderSetPhaseCenterVariationCorrections;
+static jmethodID method_gnssAntennaInfoBuilderSetSignalGainCorrections;
+static jmethodID method_gnssAntennaInfoBuilderBuild;
 
 /*
  * Save a pointer to JavaVm to attach/detach threads executing
@@ -171,6 +188,8 @@
 using IGnssConfiguration_V2_1 = android::hardware::gnss::V2_1::IGnssConfiguration;
 using IGnssDebug_V1_0 = android::hardware::gnss::V1_0::IGnssDebug;
 using IGnssDebug_V2_0 = android::hardware::gnss::V2_0::IGnssDebug;
+using IGnssAntennaInfo = android::hardware::gnss::V2_1::IGnssAntennaInfo;
+using IGnssAntennaInfoCallback = android::hardware::gnss::V2_1::IGnssAntennaInfoCallback;
 using IGnssMeasurement_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurement;
 using IGnssMeasurement_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurement;
 using IGnssMeasurement_V2_0 = android::hardware::gnss::V2_0::IGnssMeasurement;
@@ -241,6 +260,7 @@
 sp<IMeasurementCorrections_V1_0> gnssCorrectionsIface_V1_0 = nullptr;
 sp<IMeasurementCorrections_V1_1> gnssCorrectionsIface_V1_1 = nullptr;
 sp<IGnssVisibilityControl> gnssVisibilityControlIface = nullptr;
+sp<IGnssAntennaInfo> gnssAntennaInfoIface = nullptr;
 
 #define WAKE_LOCK_NAME  "GPS"
 
@@ -628,10 +648,12 @@
     Return<void> gnssSvStatusCb_2_0(const hidl_vec<IGnssCallback_V2_0::GnssSvInfo>& svInfoList) override {
         return gnssSvStatusCbImpl(svInfoList);
     }
+
+    // New in 2.1
     Return<void> gnssSvStatusCb_2_1(const hidl_vec<IGnssCallback_V2_1::GnssSvInfo>& svInfoList) override {
         return gnssSvStatusCbImpl(svInfoList);
     }
-    Return<void> gnssSetCapabilitesCbImpl(uint32_t capabilities, bool hasSubHalCapabilityFlags);
+    Return<void> gnssSetCapabilitiesCb_2_1(uint32_t capabilities) override;
 
     // TODO: Reconsider allocation cost vs threadsafety on these statics
     static const char* sNmeaString;
@@ -834,6 +856,10 @@
     return GnssCallback::gnssSetCapabilitesCb(capabilities);
 }
 
+Return<void> GnssCallback::gnssSetCapabilitiesCb_2_1(uint32_t capabilities) {
+    return GnssCallback::gnssSetCapabilitesCb(capabilities);
+}
+
 Return<void> GnssCallback::gnssAcquireWakelockCb() {
     acquire_wake_lock(PARTIAL_WAKE_LOCK, WAKE_LOCK_NAME);
     return Void();
@@ -1051,6 +1077,208 @@
 }
 
 /*
+ * GnssAntennaInfoCallback implements the callback methods required for the
+ * GnssAntennaInfo interface.
+ */
+struct GnssAntennaInfoCallback : public IGnssAntennaInfoCallback {
+    // Methods from V2_1::GnssAntennaInfoCallback follow.
+    Return<void> gnssAntennaInfoCb(
+            const hidl_vec<IGnssAntennaInfoCallback::GnssAntennaInfo>& gnssAntennaInfos);
+
+private:
+    jobject translateAllGnssAntennaInfos(
+            JNIEnv* env,
+            const hidl_vec<IGnssAntennaInfoCallback::GnssAntennaInfo>& gnssAntennaInfos);
+    jobject translateSingleGnssAntennaInfo(
+            JNIEnv* env, const IGnssAntennaInfoCallback::GnssAntennaInfo& gnssAntennaInfo);
+    jobject translatePhaseCenterOffset(
+            JNIEnv* env, const IGnssAntennaInfoCallback::GnssAntennaInfo& gnssAntennaInfo);
+    jobject translatePhaseCenterVariationCorrections(
+            JNIEnv* env, const IGnssAntennaInfoCallback::GnssAntennaInfo& gnssAntennaInfo);
+    jobject translateSignalGainCorrections(
+            JNIEnv* env, const IGnssAntennaInfoCallback::GnssAntennaInfo& gnssAntennaInfo);
+    jobjectArray translate2dDoubleArray(JNIEnv* env,
+                                        const hidl_vec<IGnssAntennaInfoCallback::Row>& array);
+    void translateAndReportGnssAntennaInfo(
+            const hidl_vec<IGnssAntennaInfoCallback::GnssAntennaInfo>& gnssAntennaInfos);
+    void reportAntennaInfo(JNIEnv* env, const jobject antennaInfosArray);
+};
+
+Return<void> GnssAntennaInfoCallback::gnssAntennaInfoCb(
+        const hidl_vec<IGnssAntennaInfoCallback::GnssAntennaInfo>& gnssAntennaInfos) {
+    translateAndReportGnssAntennaInfo(gnssAntennaInfos);
+    return Void();
+}
+
+jobjectArray GnssAntennaInfoCallback::translate2dDoubleArray(
+        JNIEnv* env, const hidl_vec<IGnssAntennaInfoCallback::Row>& array) {
+    jsize numRows = array.size();
+    if (numRows == 0) {
+        // Empty array
+        return NULL;
+    }
+    jsize numCols = array[0].row.size();
+    if (numCols <= 1) {
+        // phi angle separation is computed as 180.0 / (numColumns - 1), so can't be < 2.
+        return NULL;
+    }
+
+    // Allocate array of double arrays
+    jobjectArray returnArray = env->NewObjectArray(numRows, class_doubleArray, NULL);
+
+    // Create each double array
+    for (uint8_t i = 0; i < numRows; i++) {
+        jdoubleArray doubleArray = env->NewDoubleArray(numCols);
+        env->SetDoubleArrayRegion(doubleArray, (jsize)0, numCols, array[i].row.data());
+        env->SetObjectArrayElement(returnArray, (jsize)i, doubleArray);
+        env->DeleteLocalRef(doubleArray);
+    }
+    return returnArray;
+}
+
+jobject GnssAntennaInfoCallback::translateAllGnssAntennaInfos(
+        JNIEnv* env, const hidl_vec<IGnssAntennaInfoCallback::GnssAntennaInfo>& gnssAntennaInfos) {
+    jobject arrayList = env->NewObject(class_arrayList,
+                                       method_arrayListCtor); // Create new ArrayList instance
+
+    for (auto gnssAntennaInfo : gnssAntennaInfos) {
+        jobject gnssAntennaInfoObject = translateSingleGnssAntennaInfo(env, gnssAntennaInfo);
+
+        env->CallBooleanMethod(arrayList, method_arrayListAdd,
+                               gnssAntennaInfoObject); // Add the antennaInfo to the ArrayList
+
+        // Delete Local Refs
+        env->DeleteLocalRef(gnssAntennaInfoObject);
+    }
+    return arrayList;
+}
+
+jobject GnssAntennaInfoCallback::translatePhaseCenterOffset(
+        JNIEnv* env, const IGnssAntennaInfoCallback::GnssAntennaInfo& gnssAntennaInfo) {
+    jobject phaseCenterOffset =
+            env->NewObject(class_phaseCenterOffset, method_phaseCenterOffsetCtor,
+                           gnssAntennaInfo.phaseCenterOffsetCoordinateMillimeters.x,
+                           gnssAntennaInfo.phaseCenterOffsetCoordinateMillimeters.xUncertainty,
+                           gnssAntennaInfo.phaseCenterOffsetCoordinateMillimeters.y,
+                           gnssAntennaInfo.phaseCenterOffsetCoordinateMillimeters.yUncertainty,
+                           gnssAntennaInfo.phaseCenterOffsetCoordinateMillimeters.z,
+                           gnssAntennaInfo.phaseCenterOffsetCoordinateMillimeters.zUncertainty);
+
+    return phaseCenterOffset;
+}
+
+jobject GnssAntennaInfoCallback::translatePhaseCenterVariationCorrections(
+        JNIEnv* env, const IGnssAntennaInfoCallback::GnssAntennaInfo& gnssAntennaInfo) {
+    if (gnssAntennaInfo.phaseCenterVariationCorrectionMillimeters == NULL ||
+        gnssAntennaInfo.phaseCenterVariationCorrectionUncertaintyMillimeters == NULL) {
+        return NULL;
+    }
+
+    jobjectArray phaseCenterVariationCorrectionsArray =
+            translate2dDoubleArray(env, gnssAntennaInfo.phaseCenterVariationCorrectionMillimeters);
+    jobjectArray phaseCenterVariationCorrectionsUncertaintiesArray =
+            translate2dDoubleArray(env,
+                                   gnssAntennaInfo
+                                           .phaseCenterVariationCorrectionUncertaintyMillimeters);
+
+    if (phaseCenterVariationCorrectionsArray == NULL ||
+        phaseCenterVariationCorrectionsUncertaintiesArray == NULL) {
+        return NULL;
+    }
+
+    jobject phaseCenterVariationCorrections =
+            env->NewObject(class_sphericalCorrections, method_sphericalCorrectionsCtor,
+                           phaseCenterVariationCorrectionsArray,
+                           phaseCenterVariationCorrectionsUncertaintiesArray);
+
+    env->DeleteLocalRef(phaseCenterVariationCorrectionsArray);
+    env->DeleteLocalRef(phaseCenterVariationCorrectionsUncertaintiesArray);
+
+    return phaseCenterVariationCorrections;
+}
+
+jobject GnssAntennaInfoCallback::translateSignalGainCorrections(
+        JNIEnv* env, const IGnssAntennaInfoCallback::GnssAntennaInfo& gnssAntennaInfo) {
+    if (gnssAntennaInfo.signalGainCorrectionDbi == NULL ||
+        gnssAntennaInfo.signalGainCorrectionUncertaintyDbi == NULL) {
+        return NULL;
+    }
+    jobjectArray signalGainCorrectionsArray =
+            translate2dDoubleArray(env, gnssAntennaInfo.signalGainCorrectionDbi);
+    jobjectArray signalGainCorrectionsUncertaintiesArray =
+            translate2dDoubleArray(env, gnssAntennaInfo.signalGainCorrectionUncertaintyDbi);
+
+    if (signalGainCorrectionsArray == NULL || signalGainCorrectionsUncertaintiesArray == NULL) {
+        return NULL;
+    }
+
+    jobject signalGainCorrections =
+            env->NewObject(class_sphericalCorrections, method_sphericalCorrectionsCtor,
+                           signalGainCorrectionsArray, signalGainCorrectionsUncertaintiesArray);
+
+    env->DeleteLocalRef(signalGainCorrectionsArray);
+    env->DeleteLocalRef(signalGainCorrectionsUncertaintiesArray);
+
+    return signalGainCorrections;
+}
+
+jobject GnssAntennaInfoCallback::translateSingleGnssAntennaInfo(
+        JNIEnv* env, const IGnssAntennaInfoCallback::GnssAntennaInfo& gnssAntennaInfo) {
+    jobject phaseCenterOffset = translatePhaseCenterOffset(env, gnssAntennaInfo);
+
+    // Nullable
+    jobject phaseCenterVariationCorrections =
+            translatePhaseCenterVariationCorrections(env, gnssAntennaInfo);
+
+    // Nullable
+    jobject signalGainCorrections = translateSignalGainCorrections(env, gnssAntennaInfo);
+
+    // Get builder
+    jobject gnssAntennaInfoBuilderObject =
+            env->NewObject(class_gnssAntennaInfoBuilder, method_gnssAntennaInfoBuilderCtor);
+
+    // Set fields
+    env->CallObjectMethod(gnssAntennaInfoBuilderObject,
+                          method_gnssAntennaInfoBuilderSetCarrierFrequencyMHz,
+                          gnssAntennaInfo.carrierFrequencyMHz);
+    env->CallObjectMethod(gnssAntennaInfoBuilderObject,
+                          method_gnssAntennaInfoBuilderSetPhaseCenterOffset, phaseCenterOffset);
+    env->CallObjectMethod(gnssAntennaInfoBuilderObject,
+                          method_gnssAntennaInfoBuilderSetPhaseCenterVariationCorrections,
+                          phaseCenterVariationCorrections);
+    env->CallObjectMethod(gnssAntennaInfoBuilderObject,
+                          method_gnssAntennaInfoBuilderSetSignalGainCorrections,
+                          signalGainCorrections);
+
+    // build
+    jobject gnssAntennaInfoObject =
+            env->CallObjectMethod(gnssAntennaInfoBuilderObject, method_gnssAntennaInfoBuilderBuild);
+
+    // Delete Local Refs
+    env->DeleteLocalRef(phaseCenterOffset);
+    env->DeleteLocalRef(phaseCenterVariationCorrections);
+    env->DeleteLocalRef(signalGainCorrections);
+
+    return gnssAntennaInfoObject;
+}
+
+void GnssAntennaInfoCallback::translateAndReportGnssAntennaInfo(
+        const hidl_vec<IGnssAntennaInfoCallback::GnssAntennaInfo>& gnssAntennaInfos) {
+    JNIEnv* env = getJniEnv();
+
+    jobject arrayList = translateAllGnssAntennaInfos(env, gnssAntennaInfos);
+
+    reportAntennaInfo(env, arrayList);
+
+    env->DeleteLocalRef(arrayList);
+}
+
+void GnssAntennaInfoCallback::reportAntennaInfo(JNIEnv* env, const jobject antennaInfosArray) {
+    env->CallVoidMethod(mCallbacksObj, method_reportAntennaInfo, antennaInfosArray);
+    checkAndClearExceptionFromCallback(env, __FUNCTION__);
+}
+
+/*
  * GnssMeasurementCallback implements the callback methods required for the
  * GnssMeasurement interface.
  */
@@ -1708,6 +1936,7 @@
             "(II)V");
     method_reportGeofencePauseStatus = env->GetMethodID(clazz, "reportGeofencePauseStatus",
             "(II)V");
+    method_reportAntennaInfo = env->GetMethodID(clazz, "reportAntennaInfo", "(Ljava/util/List;)V");
     method_reportMeasurementData = env->GetMethodID(
             clazz,
             "reportMeasurementData",
@@ -1791,6 +2020,39 @@
     class_gnssMeasurement = (jclass) env->NewGlobalRef(gnssMeasurementClass);
     method_gnssMeasurementCtor = env->GetMethodID(class_gnssMeasurement, "<init>", "()V");
 
+    jclass gnssAntennaInfoBuilder = env->FindClass("android/location/GnssAntennaInfo$Builder");
+    class_gnssAntennaInfoBuilder = (jclass)env->NewGlobalRef(gnssAntennaInfoBuilder);
+    method_gnssAntennaInfoBuilderCtor =
+            env->GetMethodID(class_gnssAntennaInfoBuilder, "<init>", "()V");
+    method_gnssAntennaInfoBuilderSetCarrierFrequencyMHz =
+            env->GetMethodID(class_gnssAntennaInfoBuilder, "setCarrierFrequencyMHz",
+                             "(D)Landroid/location/GnssAntennaInfo$Builder;");
+    method_gnssAntennaInfoBuilderSetPhaseCenterOffset =
+            env->GetMethodID(class_gnssAntennaInfoBuilder, "setPhaseCenterOffset",
+                             "(Landroid/location/GnssAntennaInfo$PhaseCenterOffset;)"
+                             "Landroid/location/GnssAntennaInfo$Builder;");
+    method_gnssAntennaInfoBuilderSetPhaseCenterVariationCorrections =
+            env->GetMethodID(class_gnssAntennaInfoBuilder, "setPhaseCenterVariationCorrections",
+                             "(Landroid/location/GnssAntennaInfo$SphericalCorrections;)"
+                             "Landroid/location/GnssAntennaInfo$Builder;");
+    method_gnssAntennaInfoBuilderSetSignalGainCorrections =
+            env->GetMethodID(class_gnssAntennaInfoBuilder, "setSignalGainCorrections",
+                             "(Landroid/location/GnssAntennaInfo$SphericalCorrections;)"
+                             "Landroid/location/GnssAntennaInfo$Builder;");
+    method_gnssAntennaInfoBuilderBuild = env->GetMethodID(class_gnssAntennaInfoBuilder, "build",
+                                                          "()Landroid/location/GnssAntennaInfo;");
+
+    jclass phaseCenterOffsetClass =
+            env->FindClass("android/location/GnssAntennaInfo$PhaseCenterOffset");
+    class_phaseCenterOffset = (jclass)env->NewGlobalRef(phaseCenterOffsetClass);
+    method_phaseCenterOffsetCtor = env->GetMethodID(class_phaseCenterOffset, "<init>", "(DDDDDD)V");
+
+    jclass sphericalCorrectionsClass =
+            env->FindClass("android/location/GnssAntennaInfo$SphericalCorrections");
+    class_sphericalCorrections = (jclass)env->NewGlobalRef(sphericalCorrectionsClass);
+    method_sphericalCorrectionsCtor =
+            env->GetMethodID(class_sphericalCorrections, "<init>", "([[D[[D)V");
+
     jclass locationClass = env->FindClass("android/location/Location");
     class_location = (jclass) env->NewGlobalRef(locationClass);
     method_locationCtor = env->GetMethodID(class_location, "<init>", "(Ljava/lang/String;)V");
@@ -1809,6 +2071,14 @@
             (jclass) env->NewGlobalRef(gnssConfiguration_halInterfaceVersionClass);
     method_halInterfaceVersionCtor =
             env->GetMethodID(class_gnssConfiguration_halInterfaceVersion, "<init>", "(II)V");
+
+    jclass arrayListClass = env->FindClass("java/util/ArrayList");
+    class_arrayList = (jclass)env->NewGlobalRef(arrayListClass);
+    method_arrayListCtor = env->GetMethodID(class_arrayList, "<init>", "()V");
+    method_arrayListAdd = env->GetMethodID(class_arrayList, "add", "(Ljava/lang/Object;)Z");
+
+    jclass doubleArrayClass = env->FindClass("[D");
+    class_doubleArray = (jclass)env->NewGlobalRef(doubleArrayClass);
 }
 
 /* Initialization needed at system boot and whenever GNSS service dies. */
@@ -1935,6 +2205,15 @@
     }
 
     if (gnssHal_V2_1 != nullptr) {
+        auto gnssAntennaInfo = gnssHal_V2_1->getExtensionGnssAntennaInfo();
+        if (!gnssAntennaInfo.isOk()) {
+            ALOGD("Unable to get a handle to GnssAntennaInfo");
+        } else {
+            gnssAntennaInfoIface = gnssAntennaInfo;
+        }
+    }
+
+    if (gnssHal_V2_1 != nullptr) {
         auto gnssCorrections = gnssHal_V2_1->getExtensionMeasurementCorrections_1_1();
         if (!gnssCorrections.isOk()) {
             ALOGD("Unable to get a handle to GnssMeasurementCorrections 1.1 interface");
@@ -2725,6 +3004,52 @@
     return checkHidlReturn(result, "IGnssGeofencing resumeGeofence() failed.");
 }
 
+static jboolean android_location_GnssAntennaInfoProvider_is_antenna_info_supported(JNIEnv* env,
+                                                                                   jclass clazz) {
+    if (gnssAntennaInfoIface != nullptr) {
+        return JNI_TRUE;
+    }
+    return JNI_FALSE;
+}
+
+static jboolean android_location_GnssAntennaInfoProvider_start_antenna_info_listening(
+        JNIEnv* /* env */, jobject /* obj */) {
+    if (gnssAntennaInfoIface == nullptr) {
+        ALOGE("%s: IGnssAntennaInfo interface not available.", __func__);
+        return JNI_FALSE;
+    }
+
+    sp<GnssAntennaInfoCallback> cbIface = new GnssAntennaInfoCallback();
+
+    auto result = gnssAntennaInfoIface->setCallback(cbIface);
+
+    if (!checkHidlReturn(result, "IGnssAntennaInfo setCallback() failed.")) {
+        return JNI_FALSE;
+    }
+
+    IGnssAntennaInfo::GnssAntennaInfoStatus initRet = result;
+    if (initRet != IGnssAntennaInfo::GnssAntennaInfoStatus::SUCCESS) {
+        ALOGE("An error has been found on GnssAntennaInfoInterface::init, status=%d",
+              static_cast<int32_t>(initRet));
+        return JNI_FALSE;
+    } else {
+        ALOGD("gnss antenna info has been enabled");
+    }
+
+    return JNI_TRUE;
+}
+
+static jboolean android_location_GnssAntennaInfoProvider_stop_antenna_info_listening(
+        JNIEnv* /* env */, jobject /* obj */) {
+    if (gnssAntennaInfoIface == nullptr) {
+        ALOGE("%s: IGnssAntennaInfo interface not available.", __func__);
+        return JNI_FALSE;
+    }
+
+    auto result = gnssAntennaInfoIface->close();
+    return checkHidlReturn(result, "IGnssAntennaInfo close() failed.");
+}
+
 static jboolean android_location_GnssMeasurementsProvider_is_measurement_supported(
     JNIEnv* env, jclass clazz) {
     if (gnssMeasurementIface != nullptr) {
@@ -3286,6 +3611,19 @@
             reinterpret_cast<void *>(android_location_GnssBatchingProvider_cleanup_batching)},
 };
 
+static const JNINativeMethod sAntennaInfoMethods[] = {
+        /* name, signature, funcPtr */
+        {"native_is_antenna_info_supported", "()Z",
+         reinterpret_cast<void*>(
+                 android_location_GnssAntennaInfoProvider_is_antenna_info_supported)},
+        {"native_start_antenna_info_listening", "()Z",
+         reinterpret_cast<void*>(
+                 android_location_GnssAntennaInfoProvider_start_antenna_info_listening)},
+        {"native_stop_antenna_info_listening", "()Z",
+         reinterpret_cast<void*>(
+                 android_location_GnssAntennaInfoProvider_stop_antenna_info_listening)},
+};
+
 static const JNINativeMethod sGeofenceMethods[] = {
      /* name, signature, funcPtr */
     {"native_is_geofence_supported",
@@ -3407,6 +3745,8 @@
 };
 
 int register_android_server_location_GnssLocationProvider(JNIEnv* env) {
+    jniRegisterNativeMethods(env, "com/android/server/location/GnssAntennaInfoProvider",
+                             sAntennaInfoMethods, NELEM(sAntennaInfoMethods));
     jniRegisterNativeMethods(
             env,
             "com/android/server/location/GnssBatchingProvider",
diff --git a/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp b/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp
new file mode 100644
index 0000000..70a9c09
--- /dev/null
+++ b/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp
@@ -0,0 +1,799 @@
+/*
+ * 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.
+ */
+
+#define ATRACE_TAG ATRACE_TAG_ADB
+#define LOG_TAG "PackageManagerShellCommandDataLoader-jni"
+#include <android-base/logging.h>
+
+#include <android-base/file.h>
+#include <android-base/stringprintf.h>
+#include <android-base/unique_fd.h>
+#include <cutils/trace.h>
+#include <sys/eventfd.h>
+#include <sys/poll.h>
+
+#include <nativehelper/JNIHelp.h>
+
+#include <core_jni_helpers.h>
+#include <endian.h>
+
+#include "dataloader.h"
+
+#include <charconv>
+#include <chrono>
+#include <span>
+#include <string>
+#include <thread>
+#include <unordered_map>
+#include <unordered_set>
+
+namespace android {
+
+namespace {
+
+using android::base::borrowed_fd;
+using android::base::ReadFully;
+using android::base::unique_fd;
+
+using namespace std::literals;
+
+using BlockSize = int16_t;
+using FileIdx = int16_t;
+using BlockIdx = int32_t;
+using NumBlocks = int32_t;
+using CompressionType = int16_t;
+using RequestType = int16_t;
+using MagicType = uint32_t;
+
+static constexpr int BUFFER_SIZE = 256 * 1024;
+static constexpr int BLOCKS_COUNT = BUFFER_SIZE / INCFS_DATA_FILE_BLOCK_SIZE;
+
+static constexpr int COMMAND_SIZE = 4 + 2 + 2 + 4; // bytes
+static constexpr int HEADER_SIZE = 2 + 2 + 4 + 2;  // bytes
+static constexpr std::string_view OKAY = "OKAY"sv;
+static constexpr MagicType INCR = 0x52434e49; // BE INCR
+
+static constexpr auto PollTimeoutMs = 5000;
+
+struct JniIds {
+    jclass packageManagerShellCommandDataLoader;
+    jmethodID pmscdLookupShellCommand;
+    jmethodID pmscdGetStdInPFD;
+    jmethodID pmscdGetLocalFile;
+
+    jmethodID parcelFileDescriptorGetFileDescriptor;
+
+    jclass ioUtils;
+    jmethodID ioUtilsCloseQuietly;
+
+    JniIds(JNIEnv* env) {
+        packageManagerShellCommandDataLoader = (jclass)env->NewGlobalRef(
+                FindClassOrDie(env, "com/android/server/pm/PackageManagerShellCommandDataLoader"));
+        pmscdLookupShellCommand =
+                GetStaticMethodIDOrDie(env, packageManagerShellCommandDataLoader,
+                                       "lookupShellCommand",
+                                       "(Ljava/lang/String;)Landroid/os/ShellCommand;");
+        pmscdGetStdInPFD =
+                GetStaticMethodIDOrDie(env, packageManagerShellCommandDataLoader, "getStdInPFD",
+                                       "(Landroid/os/ShellCommand;)Landroid/os/"
+                                       "ParcelFileDescriptor;");
+        pmscdGetLocalFile =
+                GetStaticMethodIDOrDie(env, packageManagerShellCommandDataLoader, "getLocalFile",
+                                       "(Landroid/os/ShellCommand;Ljava/lang/String;)Landroid/os/"
+                                       "ParcelFileDescriptor;");
+
+        auto parcelFileDescriptor = FindClassOrDie(env, "android/os/ParcelFileDescriptor");
+        parcelFileDescriptorGetFileDescriptor =
+                GetMethodIDOrDie(env, parcelFileDescriptor, "getFileDescriptor",
+                                 "()Ljava/io/FileDescriptor;");
+
+        ioUtils = (jclass)env->NewGlobalRef(FindClassOrDie(env, "libcore/io/IoUtils"));
+        ioUtilsCloseQuietly = GetStaticMethodIDOrDie(env, ioUtils, "closeQuietly",
+                                                     "(Ljava/lang/AutoCloseable;)V");
+    }
+};
+
+const JniIds& jniIds(JNIEnv* env) {
+    static const JniIds ids(env);
+    return ids;
+}
+
+struct BlockHeader {
+    FileIdx fileIdx = -1;
+    CompressionType compressionType = -1;
+    BlockIdx blockIdx = -1;
+    BlockSize blockSize = -1;
+} __attribute__((packed));
+
+static_assert(sizeof(BlockHeader) == HEADER_SIZE);
+
+static constexpr RequestType EXIT = 0;
+static constexpr RequestType BLOCK_MISSING = 1;
+static constexpr RequestType PREFETCH = 2;
+
+struct RequestCommand {
+    MagicType magic;
+    RequestType requestType;
+    FileIdx fileIdx;
+    BlockIdx blockIdx;
+} __attribute__((packed));
+
+static_assert(COMMAND_SIZE == sizeof(RequestCommand));
+
+static bool sendRequest(int fd, RequestType requestType, FileIdx fileIdx = -1,
+                        BlockIdx blockIdx = -1) {
+    const RequestCommand command{.magic = INCR,
+                                 .requestType = static_cast<int16_t>(be16toh(requestType)),
+                                 .fileIdx = static_cast<int16_t>(be16toh(fileIdx)),
+                                 .blockIdx = static_cast<int32_t>(be32toh(blockIdx))};
+    return android::base::WriteFully(fd, &command, sizeof(command));
+}
+
+static int waitForDataOrSignal(int fd, int event_fd) {
+    struct pollfd pfds[2] = {{fd, POLLIN, 0}, {event_fd, POLLIN, 0}};
+    // Wait indefinitely until either data is ready or stop signal is received
+    int res = poll(pfds, 2, PollTimeoutMs);
+    if (res <= 0) {
+        return res;
+    }
+    // First check if there is a stop signal
+    if (pfds[1].revents == POLLIN) {
+        return event_fd;
+    }
+    // Otherwise check if incoming data is ready
+    if (pfds[0].revents == POLLIN) {
+        return fd;
+    }
+    return -1;
+}
+
+static bool readChunk(int fd, std::vector<uint8_t>& data) {
+    int32_t size;
+    if (!android::base::ReadFully(fd, &size, sizeof(size))) {
+        return false;
+    }
+    size = int32_t(be32toh(size));
+    if (size <= 0) {
+        return false;
+    }
+    data.resize(size);
+    return android::base::ReadFully(fd, data.data(), data.size());
+}
+
+BlockHeader readHeader(std::span<uint8_t>& data);
+
+static inline int32_t readBEInt32(borrowed_fd fd) {
+    int32_t result;
+    ReadFully(fd, &result, sizeof(result));
+    result = int32_t(be32toh(result));
+    return result;
+}
+
+static inline std::vector<char> readBytes(borrowed_fd fd) {
+    int32_t size = readBEInt32(fd);
+    std::vector<char> result(size);
+    ReadFully(fd, result.data(), size);
+    return result;
+}
+
+static inline int32_t skipIdSigHeaders(borrowed_fd fd) {
+    readBytes(fd);          // verityRootHash
+    readBytes(fd);          // v3Digest
+    readBytes(fd);          // pkcs7SignatureBlock
+    return readBEInt32(fd); // size of the verity tree
+}
+
+static inline IncFsSize verityTreeSizeForFile(IncFsSize fileSize) {
+    constexpr int SHA256_DIGEST_SIZE = 32;
+    constexpr int digest_size = SHA256_DIGEST_SIZE;
+    constexpr int hash_per_block = INCFS_DATA_FILE_BLOCK_SIZE / digest_size;
+
+    IncFsSize total_tree_block_count = 0;
+
+    auto block_count = 1 + (fileSize - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+    auto hash_block_count = block_count;
+    for (auto i = 0; hash_block_count > 1; i++) {
+        hash_block_count = (hash_block_count + hash_per_block - 1) / hash_per_block;
+        total_tree_block_count += hash_block_count;
+    }
+    return total_tree_block_count * INCFS_DATA_FILE_BLOCK_SIZE;
+}
+
+static inline unique_fd convertPfdToFdAndDup(JNIEnv* env, const JniIds& jni, jobject pfd) {
+    if (!pfd) {
+        ALOGE("Missing In ParcelFileDescriptor.");
+        return {};
+    }
+    auto managedFd = env->CallObjectMethod(pfd, jni.parcelFileDescriptorGetFileDescriptor);
+    if (!pfd) {
+        ALOGE("Missing In FileDescriptor.");
+        return {};
+    }
+    unique_fd result{dup(jniGetFDFromFileDescriptor(env, managedFd))};
+    // Can be closed after dup.
+    env->CallStaticVoidMethod(jni.ioUtils, jni.ioUtilsCloseQuietly, pfd);
+    return result;
+}
+
+struct InputDesc {
+    unique_fd fd;
+    IncFsSize size;
+    IncFsBlockKind kind = INCFS_BLOCK_KIND_DATA;
+    bool waitOnEof = false;
+    bool streaming = false;
+};
+using InputDescs = std::vector<InputDesc>;
+
+static inline InputDescs openInputs(JNIEnv* env, const JniIds& jni, jobject shellCommand,
+                                    IncFsSize size, IncFsSpan metadata) {
+    InputDescs result;
+    result.reserve(2);
+
+    if (metadata.size == 0 || *metadata.data == '-') {
+        // stdin
+        auto fd = convertPfdToFdAndDup(
+                env, jni,
+                env->CallStaticObjectMethod(jni.packageManagerShellCommandDataLoader,
+                                            jni.pmscdGetStdInPFD, shellCommand));
+        if (fd.ok()) {
+            result.push_back(InputDesc{
+                    .fd = std::move(fd),
+                    .size = size,
+                    .waitOnEof = true,
+            });
+        }
+        return result;
+    }
+    if (*metadata.data == '+') {
+        // verity tree from stdin, rest is streaming
+        auto fd = convertPfdToFdAndDup(
+                env, jni,
+                env->CallStaticObjectMethod(jni.packageManagerShellCommandDataLoader,
+                                            jni.pmscdGetStdInPFD, shellCommand));
+        if (fd.ok()) {
+            auto treeSize = verityTreeSizeForFile(size);
+            result.push_back(InputDesc{
+                    .fd = std::move(fd),
+                    .size = treeSize,
+                    .kind = INCFS_BLOCK_KIND_HASH,
+                    .waitOnEof = true,
+                    .streaming = true,
+            });
+        }
+        return result;
+    }
+
+    // local file and possibly signature
+    const std::string filePath(metadata.data, metadata.size);
+    const std::string idsigPath = filePath + ".idsig";
+
+    auto idsigFd = convertPfdToFdAndDup(
+            env, jni,
+            env->CallStaticObjectMethod(jni.packageManagerShellCommandDataLoader,
+                                        jni.pmscdGetLocalFile, shellCommand,
+                                        env->NewStringUTF(idsigPath.c_str())));
+    if (idsigFd.ok()) {
+        auto treeSize = verityTreeSizeForFile(size);
+        auto actualTreeSize = skipIdSigHeaders(idsigFd);
+        if (treeSize != actualTreeSize) {
+            ALOGE("Verity tree size mismatch: %d vs .idsig: %d.", int(treeSize),
+                  int(actualTreeSize));
+            return {};
+        }
+        result.push_back(InputDesc{
+                .fd = std::move(idsigFd),
+                .size = treeSize,
+                .kind = INCFS_BLOCK_KIND_HASH,
+        });
+    }
+
+    auto fileFd = convertPfdToFdAndDup(
+            env, jni,
+            env->CallStaticObjectMethod(jni.packageManagerShellCommandDataLoader,
+                                        jni.pmscdGetLocalFile, shellCommand,
+                                        env->NewStringUTF(filePath.c_str())));
+    if (fileFd.ok()) {
+        result.push_back(InputDesc{
+                .fd = std::move(fileFd),
+                .size = size,
+        });
+    }
+
+    return result;
+}
+
+static inline JNIEnv* GetJNIEnvironment(JavaVM* vm) {
+    JNIEnv* env;
+    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
+        return 0;
+    }
+    return env;
+}
+
+static inline JNIEnv* GetOrAttachJNIEnvironment(JavaVM* jvm) {
+    JNIEnv* env = GetJNIEnvironment(jvm);
+    if (!env) {
+        int result = jvm->AttachCurrentThread(&env, nullptr);
+        CHECK_EQ(result, JNI_OK) << "thread attach failed";
+        struct VmDetacher {
+            VmDetacher(JavaVM* vm) : mVm(vm) {}
+            ~VmDetacher() { mVm->DetachCurrentThread(); }
+
+        private:
+            JavaVM* const mVm;
+        };
+        static thread_local VmDetacher detacher(jvm);
+    }
+    return env;
+}
+
+class PackageManagerShellCommandDataLoaderDataLoader : public android::dataloader::DataLoader {
+public:
+    PackageManagerShellCommandDataLoaderDataLoader(JavaVM* jvm) : mJvm(jvm) { CHECK(mJvm); }
+
+private:
+    // Lifecycle.
+    bool onCreate(const android::dataloader::DataLoaderParams& params,
+                  android::dataloader::FilesystemConnectorPtr ifs,
+                  android::dataloader::StatusListenerPtr statusListener,
+                  android::dataloader::ServiceConnectorPtr,
+                  android::dataloader::ServiceParamsPtr) final {
+        CHECK(ifs) << "ifs can't be null";
+        CHECK(statusListener) << "statusListener can't be null";
+        mArgs = params.arguments();
+        mIfs = ifs;
+        mStatusListener = statusListener;
+        return true;
+    }
+    bool onStart() final { return true; }
+    void onStop() final {
+        mStopReceiving = true;
+        eventfd_write(mEventFd, 1);
+        if (mReceiverThread.joinable()) {
+            mReceiverThread.join();
+        }
+    }
+    void onDestroy() final {
+        ALOGE("Sending EXIT to server.");
+        sendRequest(mOutFd, EXIT);
+        // Make sure the receiver thread stopped.
+        CHECK(!mReceiverThread.joinable());
+
+        mInFd.reset();
+        mOutFd.reset();
+    }
+
+    // Installation.
+    bool onPrepareImage(const dataloader::DataLoaderInstallationFiles& addedFiles) final {
+        JNIEnv* env = GetOrAttachJNIEnvironment(mJvm);
+        const auto& jni = jniIds(env);
+
+        jobject shellCommand = env->CallStaticObjectMethod(jni.packageManagerShellCommandDataLoader,
+                                                           jni.pmscdLookupShellCommand,
+                                                           env->NewStringUTF(mArgs.c_str()));
+        if (!shellCommand) {
+            ALOGE("Missing shell command.");
+            return false;
+        }
+
+        std::vector<char> buffer;
+        buffer.reserve(BUFFER_SIZE);
+
+        std::vector<IncFsDataBlock> blocks;
+        blocks.reserve(BLOCKS_COUNT);
+
+        unique_fd streamingFd;
+        for (auto&& file : addedFiles) {
+            auto inputs = openInputs(env, jni, shellCommand, file.size, file.metadata);
+            if (inputs.empty()) {
+                ALOGE("Failed to open an input file for metadata: %.*s, final file name is: %s. "
+                      "Error %d",
+                      int(file.metadata.size), file.metadata.data, file.name, errno);
+                return false;
+            }
+
+            const auto fileId = IncFs_FileIdFromMetadata(file.metadata);
+            const auto incfsFd(mIfs->openWrite(fileId));
+            if (incfsFd < 0) {
+                ALOGE("Failed to open an IncFS file for metadata: %.*s, final file name is: %s. "
+                      "Error %d",
+                      int(file.metadata.size), file.metadata.data, file.name, errno);
+                return false;
+            }
+
+            for (auto&& input : inputs) {
+                if (input.streaming && !streamingFd.ok()) {
+                    streamingFd.reset(dup(input.fd));
+                }
+                if (!copyToIncFs(incfsFd, input.size, input.kind, input.fd, input.waitOnEof,
+                                 &buffer, &blocks)) {
+                    ALOGE("Failed to copy data to IncFS file for metadata: %.*s, final file name "
+                          "is: %s. "
+                          "Error %d",
+                          int(file.metadata.size), file.metadata.data, file.name, errno);
+                    return false;
+                }
+            }
+        }
+
+        if (streamingFd.ok()) {
+            ALOGE("onPrepareImage: done, proceeding to streaming.");
+            return initStreaming(std::move(streamingFd));
+        }
+
+        ALOGE("onPrepareImage: done.");
+        return true;
+    }
+
+    bool copyToIncFs(borrowed_fd incfsFd, IncFsSize size, IncFsBlockKind kind,
+                     borrowed_fd incomingFd, bool waitOnEof, std::vector<char>* buffer,
+                     std::vector<IncFsDataBlock>* blocks) {
+        IncFsSize remaining = size;
+        IncFsSize totalSize = 0;
+        IncFsBlockIndex blockIdx = 0;
+        while (remaining > 0) {
+            constexpr auto capacity = BUFFER_SIZE;
+            auto size = buffer->size();
+            if (capacity - size < INCFS_DATA_FILE_BLOCK_SIZE) {
+                if (!flashToIncFs(incfsFd, kind, false, &blockIdx, buffer, blocks)) {
+                    return false;
+                }
+                continue;
+            }
+
+            auto toRead = std::min<IncFsSize>(remaining, capacity - size);
+            buffer->resize(size + toRead);
+            auto read = ::read(incomingFd.get(), buffer->data() + size, toRead);
+            if (read == 0) {
+                if (waitOnEof) {
+                    // eof of stdin, waiting...
+                    ALOGE("eof of stdin, waiting...: %d, remaining: %d, block: %d, read: %d",
+                          int(totalSize), int(remaining), int(blockIdx), int(read));
+                    using namespace std::chrono_literals;
+                    std::this_thread::sleep_for(10ms);
+                    continue;
+                }
+                break;
+            }
+            if (read < 0) {
+                return false;
+            }
+
+            buffer->resize(size + read);
+            remaining -= read;
+            totalSize += read;
+        }
+        if (!buffer->empty() && !flashToIncFs(incfsFd, kind, true, &blockIdx, buffer, blocks)) {
+            return false;
+        }
+        return true;
+    }
+
+    bool flashToIncFs(borrowed_fd incfsFd, IncFsBlockKind kind, bool eof, IncFsBlockIndex* blockIdx,
+                      std::vector<char>* buffer, std::vector<IncFsDataBlock>* blocks) {
+        int consumed = 0;
+        const auto fullBlocks = buffer->size() / INCFS_DATA_FILE_BLOCK_SIZE;
+        for (int i = 0; i < fullBlocks; ++i) {
+            const auto inst = IncFsDataBlock{
+                    .fileFd = incfsFd.get(),
+                    .pageIndex = (*blockIdx)++,
+                    .compression = INCFS_COMPRESSION_KIND_NONE,
+                    .kind = kind,
+                    .dataSize = INCFS_DATA_FILE_BLOCK_SIZE,
+                    .data = buffer->data() + consumed,
+            };
+            blocks->push_back(inst);
+            consumed += INCFS_DATA_FILE_BLOCK_SIZE;
+        }
+        const auto remain = buffer->size() - fullBlocks * INCFS_DATA_FILE_BLOCK_SIZE;
+        if (remain && eof) {
+            const auto inst = IncFsDataBlock{
+                    .fileFd = incfsFd.get(),
+                    .pageIndex = (*blockIdx)++,
+                    .compression = INCFS_COMPRESSION_KIND_NONE,
+                    .kind = kind,
+                    .dataSize = static_cast<uint16_t>(remain),
+                    .data = buffer->data() + consumed,
+            };
+            blocks->push_back(inst);
+            consumed += remain;
+        }
+
+        auto res = mIfs->writeBlocks({blocks->data(), blocks->data() + blocks->size()});
+
+        blocks->clear();
+        buffer->erase(buffer->begin(), buffer->begin() + consumed);
+
+        if (res < 0) {
+            ALOGE("Failed to write block to IncFS: %d", int(res));
+            return false;
+        }
+        return true;
+    }
+
+    // Read tracing.
+    struct TracedRead {
+        uint64_t timestampUs;
+        android::dataloader::FileId fileId;
+        uint32_t firstBlockIdx;
+        uint32_t count;
+    };
+
+    void onPageReads(const android::dataloader::PageReads& pageReads) final {
+        auto trace = atrace_is_tag_enabled(ATRACE_TAG);
+        if (CC_LIKELY(!trace)) {
+            return;
+        }
+
+        TracedRead last = {};
+        for (auto&& read : pageReads) {
+            if (read.id != last.fileId || read.block != last.firstBlockIdx + last.count) {
+                traceRead(last);
+                last = TracedRead{
+                        .timestampUs = read.bootClockTsUs,
+                        .fileId = read.id,
+                        .firstBlockIdx = (uint32_t)read.block,
+                        .count = 1,
+                };
+            } else {
+                ++last.count;
+            }
+        }
+        traceRead(last);
+    }
+
+    void traceRead(const TracedRead& read) {
+        if (!read.count) {
+            return;
+        }
+
+        FileIdx fileIdx = convertFileIdToFileIndex(read.fileId);
+        auto str = android::base::StringPrintf("page_read: index=%lld count=%lld file=%d",
+                                               static_cast<long long>(read.firstBlockIdx),
+                                               static_cast<long long>(read.count),
+                                               static_cast<int>(fileIdx));
+        ATRACE_BEGIN(str.c_str());
+        ATRACE_END();
+    }
+
+    // Streaming.
+    bool initStreaming(unique_fd inout) {
+        mInFd.reset(dup(inout));
+        mOutFd.reset(dup(inout));
+        if (mInFd < 0 || mOutFd < 0) {
+            ALOGE("Failed to dup FDs.");
+            return false;
+        }
+
+        mEventFd.reset(eventfd(0, EFD_CLOEXEC));
+        if (mEventFd < 0) {
+            ALOGE("Failed to create eventfd.");
+            return false;
+        }
+
+        // Awaiting adb handshake.
+        char okay_buf[OKAY.size()];
+        if (!android::base::ReadFully(mInFd, okay_buf, OKAY.size())) {
+            ALOGE("Failed to receive OKAY. Abort.");
+            return false;
+        }
+        if (std::string_view(okay_buf, OKAY.size()) != OKAY) {
+            ALOGE("Received '%.*s', expecting '%.*s'", (int)OKAY.size(), okay_buf, (int)OKAY.size(),
+                  OKAY.data());
+            return false;
+        }
+
+        mReceiverThread = std::thread([this]() { receiver(); });
+        ALOGI("Started streaming...");
+        return true;
+    }
+
+    // IFS callbacks.
+    void onPendingReads(const dataloader::PendingReads& pendingReads) final {
+        CHECK(mIfs);
+        for (auto&& pendingRead : pendingReads) {
+            const android::dataloader::FileId& fileId = pendingRead.id;
+            const auto blockIdx = static_cast<BlockIdx>(pendingRead.block);
+            /*
+            ALOGI("Missing: %d", (int) blockIdx);
+            */
+            FileIdx fileIdx = convertFileIdToFileIndex(fileId);
+            if (fileIdx < 0) {
+                ALOGE("Failed to handle event for fileid=%s. Ignore.",
+                      android::incfs::toString(fileId).c_str());
+                continue;
+            }
+            if (mRequestedFiles.insert(fileIdx).second) {
+                if (!sendRequest(mOutFd, PREFETCH, fileIdx, blockIdx)) {
+                    ALOGE("Failed to request prefetch for fileid=%s. Ignore.",
+                          android::incfs::toString(fileId).c_str());
+                    mRequestedFiles.erase(fileIdx);
+                    mStatusListener->reportStatus(DATA_LOADER_NO_CONNECTION);
+                }
+            }
+            sendRequest(mOutFd, BLOCK_MISSING, fileIdx, blockIdx);
+        }
+    }
+
+    void receiver() {
+        std::vector<uint8_t> data;
+        std::vector<IncFsDataBlock> instructions;
+        std::unordered_map<FileIdx, unique_fd> writeFds;
+        while (!mStopReceiving) {
+            const int res = waitForDataOrSignal(mInFd, mEventFd);
+            if (res == 0) {
+                continue;
+            }
+            if (res < 0) {
+                ALOGE("Failed to poll. Abort.");
+                mStatusListener->reportStatus(DATA_LOADER_NO_CONNECTION);
+                break;
+            }
+            if (res == mEventFd) {
+                ALOGE("Received stop signal. Exit.");
+                break;
+            }
+            if (!readChunk(mInFd, data)) {
+                ALOGE("Failed to read a message. Abort.");
+                mStatusListener->reportStatus(DATA_LOADER_NO_CONNECTION);
+                break;
+            }
+            auto remainingData = std::span(data);
+            while (!remainingData.empty()) {
+                auto header = readHeader(remainingData);
+                if (header.fileIdx == -1 && header.compressionType == 0 && header.blockIdx == 0 &&
+                    header.blockSize == 0) {
+                    ALOGI("Stop signal received. Sending exit command (remaining bytes: %d).",
+                          int(remainingData.size()));
+
+                    sendRequest(mOutFd, EXIT);
+                    mStopReceiving = true;
+                    break;
+                }
+                if (header.fileIdx < 0 || header.blockSize <= 0 || header.compressionType < 0 ||
+                    header.blockIdx < 0) {
+                    ALOGE("invalid header received. Abort.");
+                    mStopReceiving = true;
+                    break;
+                }
+                const FileIdx fileIdx = header.fileIdx;
+                const android::dataloader::FileId fileId = convertFileIndexToFileId(fileIdx);
+                if (!android::incfs::isValidFileId(fileId)) {
+                    ALOGE("Unknown data destination for file ID %d. "
+                          "Ignore.",
+                          header.fileIdx);
+                    continue;
+                }
+
+                auto& writeFd = writeFds[fileIdx];
+                if (writeFd < 0) {
+                    writeFd = this->mIfs->openWrite(fileId);
+                    if (writeFd < 0) {
+                        ALOGE("Failed to open file %d for writing (%d). Aboring.", header.fileIdx,
+                              -writeFd);
+                        break;
+                    }
+                }
+
+                const auto inst = IncFsDataBlock{
+                        .fileFd = writeFd,
+                        .pageIndex = static_cast<IncFsBlockIndex>(header.blockIdx),
+                        .compression = static_cast<IncFsCompressionKind>(header.compressionType),
+                        .kind = INCFS_BLOCK_KIND_DATA,
+                        .dataSize = static_cast<uint16_t>(header.blockSize),
+                        .data = (const char*)remainingData.data(),
+                };
+                instructions.push_back(inst);
+                remainingData = remainingData.subspan(header.blockSize);
+            }
+            writeInstructions(instructions);
+        }
+        writeInstructions(instructions);
+    }
+
+    void writeInstructions(std::vector<IncFsDataBlock>& instructions) {
+        auto res = this->mIfs->writeBlocks(instructions);
+        if (res != instructions.size()) {
+            ALOGE("Dailed to write data to Incfs (res=%d when expecting %d)", res,
+                  int(instructions.size()));
+        }
+        instructions.clear();
+    }
+
+    FileIdx convertFileIdToFileIndex(android::dataloader::FileId fileId) {
+        // FileId is a string in format '+FileIdx\0'.
+        const char* meta = (const char*)&fileId;
+        if (*meta != '+') {
+            return -1;
+        }
+
+        int fileIdx;
+        auto res = std::from_chars(meta + 1, meta + sizeof(fileId), fileIdx);
+        if (res.ec != std::errc{} || fileIdx < std::numeric_limits<FileIdx>::min() ||
+            fileIdx > std::numeric_limits<FileIdx>::max()) {
+            return -1;
+        }
+
+        return FileIdx(fileIdx);
+    }
+
+    android::dataloader::FileId convertFileIndexToFileId(FileIdx fileIdx) {
+        IncFsFileId fileId = {};
+        char* meta = (char*)&fileId;
+        *meta = '+';
+        if (auto [p, ec] = std::to_chars(meta + 1, meta + sizeof(fileId), fileIdx);
+            ec != std::errc()) {
+            return {};
+        }
+        return fileId;
+    }
+
+    JavaVM* const mJvm;
+    std::string mArgs;
+    android::dataloader::FilesystemConnectorPtr mIfs = nullptr;
+    android::dataloader::StatusListenerPtr mStatusListener = nullptr;
+    android::base::unique_fd mInFd;
+    android::base::unique_fd mOutFd;
+    android::base::unique_fd mEventFd;
+    std::thread mReceiverThread;
+    std::atomic<bool> mStopReceiving = false;
+    /** Tracks which files have been requested */
+    std::unordered_set<FileIdx> mRequestedFiles;
+};
+
+BlockHeader readHeader(std::span<uint8_t>& data) {
+    BlockHeader header;
+    if (data.size() < sizeof(header)) {
+        return header;
+    }
+
+    header.fileIdx = static_cast<FileIdx>(be16toh(*reinterpret_cast<const uint16_t*>(&data[0])));
+    header.compressionType =
+            static_cast<CompressionType>(be16toh(*reinterpret_cast<const uint16_t*>(&data[2])));
+    header.blockIdx = static_cast<BlockIdx>(be32toh(*reinterpret_cast<const uint32_t*>(&data[4])));
+    header.blockSize =
+            static_cast<BlockSize>(be16toh(*reinterpret_cast<const uint16_t*>(&data[8])));
+    data = data.subspan(sizeof(header));
+
+    return header;
+}
+
+static void nativeInitialize(JNIEnv* env, jclass klass) {
+    jniIds(env);
+}
+
+static const JNINativeMethod method_table[] = {
+        {"nativeInitialize", "()V", (void*)nativeInitialize},
+};
+
+} // namespace
+
+int register_android_server_com_android_server_pm_PackageManagerShellCommandDataLoader(
+        JNIEnv* env) {
+    android::dataloader::DataLoader::initialize(
+            [](auto jvm, const auto& params) -> android::dataloader::DataLoaderPtr {
+                if (params.type() == DATA_LOADER_TYPE_INCREMENTAL) {
+                    // This DataLoader only supports incremental installations.
+                    return std::make_unique<PackageManagerShellCommandDataLoaderDataLoader>(jvm);
+                }
+                return {};
+            });
+    return jniRegisterNativeMethods(env,
+                                    "com/android/server/pm/PackageManagerShellCommandDataLoader",
+                                    method_table, NELEM(method_table));
+}
+
+} // namespace android
diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp
index 1202ad3..e575432 100644
--- a/services/core/jni/onload.cpp
+++ b/services/core/jni/onload.cpp
@@ -49,7 +49,7 @@
 int register_android_server_Watchdog(JNIEnv* env);
 int register_android_server_HardwarePropertiesManagerService(JNIEnv* env);
 int register_android_server_SyntheticPasswordManager(JNIEnv* env);
-int register_android_server_GraphicsStatsService(JNIEnv* env);
+int register_android_graphics_GraphicsStatsService(JNIEnv* env);
 int register_android_hardware_display_DisplayViewport(JNIEnv* env);
 int register_android_server_net_NetworkStatsFactory(JNIEnv* env);
 int register_android_server_net_NetworkStatsService(JNIEnv* env);
@@ -59,6 +59,7 @@
 int register_com_android_server_soundtrigger_middleware_AudioSessionProviderImpl(
         JNIEnv* env);
 int register_android_server_incremental_IncrementalManagerService(JNIEnv* env);
+int register_android_server_com_android_server_pm_PackageManagerShellCommandDataLoader(JNIEnv* env);
 int register_android_server_stats_pull_StatsPullAtomService(JNIEnv* env);
 };
 
@@ -102,7 +103,7 @@
     register_android_server_HardwarePropertiesManagerService(env);
     register_android_server_storage_AppFuse(env);
     register_android_server_SyntheticPasswordManager(env);
-    register_android_server_GraphicsStatsService(env);
+    register_android_graphics_GraphicsStatsService(env);
     register_android_hardware_display_DisplayViewport(env);
     register_android_server_net_NetworkStatsFactory(env);
     register_android_server_net_NetworkStatsService(env);
@@ -112,6 +113,7 @@
     register_com_android_server_soundtrigger_middleware_AudioSessionProviderImpl(
             env);
     register_android_server_incremental_IncrementalManagerService(env);
+    register_android_server_com_android_server_pm_PackageManagerShellCommandDataLoader(env);
     register_android_server_stats_pull_StatsPullAtomService(env);
     return JNI_VERSION_1_4;
 }
diff --git a/services/core/xsd/vts/Android.bp b/services/core/xsd/vts/Android.bp
index 5545656..636d110 100644
--- a/services/core/xsd/vts/Android.bp
+++ b/services/core/xsd/vts/Android.bp
@@ -31,4 +31,12 @@
         "-Wall",
         "-Werror",
     ],
+    data: [
+        ":default-permissions",
+    ],
+    test_suites: [
+        "general-tests",
+        "vts-core"
+    ],
+    test_config: "vts_defaultPermissions_validate_test.xml",
 }
diff --git a/services/core/xsd/vts/vts_defaultPermissions_validate_test.xml b/services/core/xsd/vts/vts_defaultPermissions_validate_test.xml
new file mode 100644
index 0000000..1ccacae
--- /dev/null
+++ b/services/core/xsd/vts/vts_defaultPermissions_validate_test.xml
@@ -0,0 +1,33 @@
+<?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.
+-->
+<configuration description="Runs vts_defaultPermissions_validate_test.">
+    <option name="test-suite-tag" value="apct" />
+    <option name="test-suite-tag" value="apct-native" />
+
+    <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer">
+    </target_preparer>
+
+    <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
+        <option name="cleanup" value="true" />
+        <option name="push" value="default-permissions.xsd->/data/local/tmp/default-permissions.xsd" />
+        <option name="push" value="vts_defaultPermissions_validate_test->/data/local/tmp/vts_defaultPermissions_validate_test" />
+    </target_preparer>
+
+    <test class="com.android.tradefed.testtype.GTest" >
+        <option name="native-test-device-path" value="/data/local/tmp" />
+        <option name="module-name" value="vts_defaultPermissions_validate_test" />
+    </test>
+</configuration>
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java
index 9b85a7b..eff222a 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java
@@ -82,4 +82,8 @@
     public long getManagedProfileMaximumTimeOff(ComponentName admin) {
         return 0;
     }
+
+    public boolean canProfileOwnerResetPasswordWhenLocked(int userId) {
+        return false;
+    }
 }
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 28e44f1..421bfa4 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -48,6 +48,7 @@
 import static android.app.admin.DevicePolicyManager.DELEGATION_NETWORK_LOGGING;
 import static android.app.admin.DevicePolicyManager.DELEGATION_PACKAGE_ACCESS;
 import static android.app.admin.DevicePolicyManager.DELEGATION_PERMISSION_GRANT;
+import static android.app.admin.DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE_PER_USER;
 import static android.app.admin.DevicePolicyManager.ID_TYPE_BASE_INFO;
 import static android.app.admin.DevicePolicyManager.ID_TYPE_IMEI;
 import static android.app.admin.DevicePolicyManager.ID_TYPE_INDIVIDUAL_ATTESTATION;
@@ -57,6 +58,7 @@
 import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_HOME;
 import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_NOTIFICATIONS;
 import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW;
+import static android.app.admin.DevicePolicyManager.NON_ORG_OWNED_PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER;
 import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
 import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC;
 import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC;
@@ -81,6 +83,8 @@
 import static android.app.admin.DevicePolicyManager.WIPE_EXTERNAL_STORAGE;
 import static android.app.admin.DevicePolicyManager.WIPE_RESET_PROTECTION_DATA;
 import static android.app.admin.DevicePolicyManager.WIPE_SILENTLY;
+import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE;
+import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
 import static android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES;
 import static android.provider.Settings.Global.PRIVATE_DNS_MODE;
 import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER;
@@ -92,6 +96,7 @@
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.PROVISIONING_ENTRY_POINT_ADB;
 import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
 import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW;
+import static com.android.server.am.ActivityManagerService.STOCK_PM_FLAGS;
 import static com.android.server.devicepolicy.TransferOwnershipMetadataManager.ADMIN_TYPE_DEVICE_OWNER;
 import static com.android.server.devicepolicy.TransferOwnershipMetadataManager.ADMIN_TYPE_PROFILE_OWNER;
 import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME;
@@ -162,6 +167,7 @@
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.CrossProfileApps;
+import android.content.pm.CrossProfileAppsInternal;
 import android.content.pm.IPackageDataObserver;
 import android.content.pm.IPackageManager;
 import android.content.pm.PackageInfo;
@@ -283,6 +289,7 @@
 import com.android.server.inputmethod.InputMethodManagerInternal;
 import com.android.server.net.NetworkPolicyManagerInternal;
 import com.android.server.pm.UserRestrictionsUtils;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 import com.android.server.storage.DeviceStorageMonitorInternal;
 import com.android.server.uri.UriGrantsManagerInternal;
 import com.android.server.wm.ActivityTaskManagerInternal;
@@ -408,6 +415,9 @@
     private static final String ATTR_APPLICATION_RESTRICTIONS_MANAGER
             = "application-restrictions-manager";
 
+    private static final String CALLED_FROM_PARENT = "calledFromParent";
+    private static final String NOT_CALLED_FROM_PARENT = "notCalledFromParent";
+
     // Comprehensive list of delegations.
     private static final String DELEGATIONS[] = {
         DELEGATION_CERT_INSTALL,
@@ -438,7 +448,7 @@
      *  System property whose value is either "true" or "false", indicating whether
      *  device owner is present.
      */
-    private static final String PROPERTY_DEVICE_OWNER_PRESENT = "ro.device_owner";
+    private static final String PROPERTY_DEVICE_OWNER_PRESENT = "ro.organization_owned";
 
     private static final int STATUS_BAR_DISABLE_MASK =
             StatusBarManager.DISABLE_EXPAND |
@@ -458,8 +468,6 @@
     // A collection of user restrictions that are deprecated and should simply be ignored.
     private static final Set<String> DEPRECATED_USER_RESTRICTIONS;
     private static final String AB_DEVICE_KEY = "ro.build.ab_update";
-    // Permissions related to location which must not be granted automatically
-    private static  final Set<String> LOCATION_PERMISSIONS;
 
     static {
         SECURE_SETTINGS_WHITELIST = new ArraySet<>();
@@ -492,6 +500,7 @@
 
         SYSTEM_SETTINGS_WHITELIST = new ArraySet<>();
         SYSTEM_SETTINGS_WHITELIST.add(Settings.System.SCREEN_BRIGHTNESS);
+        SYSTEM_SETTINGS_WHITELIST.add(Settings.System.SCREEN_BRIGHTNESS_FLOAT);
         SYSTEM_SETTINGS_WHITELIST.add(Settings.System.SCREEN_BRIGHTNESS_MODE);
         SYSTEM_SETTINGS_WHITELIST.add(Settings.System.SCREEN_OFF_TIMEOUT);
 
@@ -504,11 +513,6 @@
         DEPRECATED_USER_RESTRICTIONS = Sets.newHashSet(
                 UserManager.DISALLOW_ADD_MANAGED_PROFILE,
                 UserManager.DISALLOW_REMOVE_MANAGED_PROFILE);
-
-        LOCATION_PERMISSIONS = Sets.newHashSet(
-                permission.ACCESS_FINE_LOCATION,
-                permission.ACCESS_BACKGROUND_LOCATION,
-                permission.ACCESS_COARSE_LOCATION);
     }
 
     /**
@@ -520,7 +524,8 @@
 
     /** Keyguard features that are allowed to be set on a managed profile */
     private static final int PROFILE_KEYGUARD_FEATURES =
-            PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER | PROFILE_KEYGUARD_FEATURES_PROFILE_ONLY;
+            NON_ORG_OWNED_PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER
+                    | PROFILE_KEYGUARD_FEATURES_PROFILE_ONLY;
 
     private static final int DEVICE_ADMIN_DEACTIVATE_TIMEOUT = 10000;
 
@@ -560,6 +565,16 @@
     @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
     private static final long ADMIN_APP_PASSWORD_COMPLEXITY = 123562444L;
 
+    /**
+     * Admin apps targeting Android R+ may not use
+     * {@link android.app.admin.DevicePolicyManager#setSecureSetting} to change the deprecated
+     * {@link android.provider.Settings.Secure#LOCATION_MODE} setting. Instead they should use
+     * {@link android.app.admin.DevicePolicyManager#setLocationEnabled}.
+     */
+    @ChangeId
+    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
+    private static final long USE_SET_LOCATION_ENABLED = 117835097L;
+
     final Context mContext;
     final Injector mInjector;
     final IPackageManager mIPackageManager;
@@ -2276,6 +2291,11 @@
                     context, requestCode, intent, flags, options, user);
         }
 
+        PendingIntent pendingIntentGetBroadcast(
+                Context context, int requestCode, Intent intent, int flags) {
+            return PendingIntent.getBroadcast(context, requestCode, intent, flags);
+        }
+
         void registerContentObserver(Uri uri, boolean notifyForDescendents,
                 ContentObserver observer, int userHandle) {
             mContext.getContentResolver().registerContentObserver(uri, notifyForDescendents,
@@ -2530,7 +2550,7 @@
      * corporate owned device.
      */
     @GuardedBy("getLockObject()")
-    private void maybeMigrateToProfileOnOrganizationOwnedDeviceLocked() {
+    private void migrateToProfileOnOrganizationOwnedDeviceIfCompLocked() {
         logIfVerbose("Checking whether we need to migrate COMP ");
         final int doUserId = mOwners.getDeviceOwnerUserId();
         if (doUserId == UserHandle.USER_NULL) {
@@ -2593,6 +2613,11 @@
 
         // Note: KeyChain keys are not removed and will remain accessible for the apps that have
         // been given grants to use them.
+
+        DevicePolicyEventLogger
+                .createEvent(DevicePolicyEnums.COMP_TO_ORG_OWNED_PO_MIGRATED)
+                .setAdmin(poAdminComponent)
+                .write();
     }
 
     private void moveDoPoliciesToProfileParentAdmin(ActiveAdmin doAdmin, ActiveAdmin parentAdmin) {
@@ -2729,11 +2754,11 @@
         }
 
         if (!mInjector.systemPropertiesGet(PROPERTY_DEVICE_OWNER_PRESENT, "").isEmpty()) {
-            Slog.w(LOG_TAG, "Trying to set ro.device_owner, but it has already been set?");
+            Slog.w(LOG_TAG, "Trying to set ro.organization_owned, but it has already been set?");
         } else {
             final String value = Boolean.toString(hasDeviceOwner);
             mInjector.systemPropertiesSet(PROPERTY_DEVICE_OWNER_PRESENT, value);
-            Slog.i(LOG_TAG, "Set ro.device_owner property to " + value);
+            Slog.i(LOG_TAG, "Set ro.organization_owned property to " + value);
         }
     }
 
@@ -3853,7 +3878,7 @@
             case SystemService.PHASE_ACTIVITY_MANAGER_READY:
                 maybeStartSecurityLogMonitorOnActivityManagerReady();
                 synchronized (getLockObject()) {
-                    maybeMigrateToProfileOnOrganizationOwnedDeviceLocked();
+                    migrateToProfileOnOrganizationOwnedDeviceIfCompLocked();
                 }
                 final int userId = getManagedUserId(UserHandle.USER_SYSTEM);
                 if (userId >= 0) {
@@ -3964,7 +3989,7 @@
     @Override
     void handleStartUser(int userId) {
         updateScreenCaptureDisabled(userId,
-                getScreenCaptureDisabled(null, userId));
+                getScreenCaptureDisabled(null, userId, false));
         pushUserRestrictions(userId);
         // When system user is started (device boot), load cache for all users.
         // This is to mitigate the potential race between loading the cache and keyguard
@@ -4467,7 +4492,7 @@
                 .createEvent(DevicePolicyEnums.SET_PASSWORD_QUALITY)
                 .setAdmin(who)
                 .setInt(quality)
-                .setBoolean(parent)
+                .setStrings(parent ? CALLED_FROM_PARENT : NOT_CALLED_FROM_PARENT)
                 .write();
     }
 
@@ -4621,20 +4646,19 @@
      * </ul>
      *
      * @param userHandle the affected user for whom to get the active admins
-     * @param parent     whether the parent active admins should be included in the list of active
-     *                   admins or not
      * @return the list of active admins for the affected user
      */
-    private List<ActiveAdmin> getActiveAdminsForAffectedUser(int userHandle, boolean parent) {
-        if (!parent) {
+    @GuardedBy("getLockObject()")
+    private List<ActiveAdmin> getActiveAdminsForAffectedUserLocked(int userHandle) {
+        if (isManagedProfile(userHandle)) {
             return getUserDataUnchecked(userHandle).mAdminList;
         }
         ArrayList<ActiveAdmin> admins = new ArrayList<>();
         for (UserInfo userInfo : mUserManager.getProfiles(userHandle)) {
-            DevicePolicyData policy = getUserData(userInfo.id);
-            if (!userInfo.isManagedProfile()) {
+            DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
+            if (userInfo.id == userHandle) {
                 admins.addAll(policy.mAdminList);
-            } else {
+            } else if (userInfo.isManagedProfile()) {
                 // For managed profiles, policies set on the parent profile will be included
                 for (int i = 0; i < policy.mAdminList.size(); i++) {
                     ActiveAdmin admin = policy.mAdminList.get(i);
@@ -4642,6 +4666,8 @@
                         admins.add(admin.getParentActiveAdmin());
                     }
                 }
+            } else {
+                Slog.w(LOG_TAG, "Unknown user type: " + userInfo);
             }
         }
         return admins;
@@ -5255,8 +5281,9 @@
     public int getPasswordComplexity(boolean parent) {
         DevicePolicyEventLogger
                 .createEvent(DevicePolicyEnums.GET_USER_PASSWORD_COMPLEXITY_LEVEL)
-                .setStrings(mInjector.getPackageManager()
-                        .getPackagesForUid(mInjector.binderGetCallingUid()))
+                .setStrings(parent ? CALLED_FROM_PARENT : NOT_CALLED_FROM_PARENT,
+                        mInjector.getPackageManager().getPackagesForUid(
+                                mInjector.binderGetCallingUid()))
                 .write();
         final int callingUserId = mInjector.userHandleGetCallingUserId();
 
@@ -6930,6 +6957,7 @@
                 .createEvent(DevicePolicyEnums.WIPE_DATA_WITH_REASON)
                 .setAdmin(admin.info.getComponent())
                 .setInt(flags)
+                .setStrings(calledOnParentInstance ? CALLED_FROM_PARENT : NOT_CALLED_FROM_PARENT)
                 .write();
         String internalReason = String.format(
                 "DevicePolicyManager.wipeDataWithReason() from %s, organization-owned? %s",
@@ -7014,9 +7042,13 @@
             saveSettingsLocked(userId);
         }
 
-        mInjector.binderWithCleanCallingIdentity(() -> mContext.sendBroadcastAsUser(
-                new Intent(DevicePolicyManager.ACTION_RESET_PROTECTION_POLICY_CHANGED),
-                UserHandle.getUserHandleForUid(frpManagementAgentUid)));
+        final Intent intent = new Intent(
+                DevicePolicyManager.ACTION_RESET_PROTECTION_POLICY_CHANGED).addFlags(
+                Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_FOREGROUND);
+
+        mInjector.binderWithCleanCallingIdentity(() -> mContext.sendBroadcastAsUser(intent,
+                UserHandle.getUserHandleForUid(frpManagementAgentUid),
+                android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION));
 
         DevicePolicyEventLogger
                 .createEvent(DevicePolicyEnums.SET_FACTORY_RESET_PROTECTION)
@@ -7573,7 +7605,7 @@
      * Set whether the screen capture is disabled for the user managed by the specified admin.
      */
     @Override
-    public void setScreenCaptureDisabled(ComponentName who, boolean disabled) {
+    public void setScreenCaptureDisabled(ComponentName who, boolean disabled, boolean parent) {
         if (!mHasFeature) {
             return;
         }
@@ -7581,11 +7613,15 @@
         final int userHandle = UserHandle.getCallingUserId();
         synchronized (getLockObject()) {
             ActiveAdmin ap = getActiveAdminForCallerLocked(who,
-                    DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+                    DeviceAdminInfo.USES_POLICY_PROFILE_OWNER, parent);
+            if (parent) {
+                enforceProfileOwnerOfOrganizationOwnedDevice(ap);
+            }
             if (ap.disableScreenCapture != disabled) {
                 ap.disableScreenCapture = disabled;
                 saveSettingsLocked(userHandle);
-                updateScreenCaptureDisabled(userHandle, disabled);
+                final int affectedUserId = parent ? getProfileParentId(userHandle) : userHandle;
+                updateScreenCaptureDisabled(affectedUserId, disabled);
             }
         }
         DevicePolicyEventLogger
@@ -7600,20 +7636,24 @@
      * active admin (if given admin is null).
      */
     @Override
-    public boolean getScreenCaptureDisabled(ComponentName who, int userHandle) {
+    public boolean getScreenCaptureDisabled(ComponentName who, int userHandle, boolean parent) {
         if (!mHasFeature) {
             return false;
         }
         synchronized (getLockObject()) {
+            if (parent) {
+                final ActiveAdmin ap = getActiveAdminForCallerLocked(who,
+                        DeviceAdminInfo.USES_POLICY_ORGANIZATION_OWNED_PROFILE_OWNER, parent);
+                enforceProfileOwnerOfOrganizationOwnedDevice(ap);
+            }
             if (who != null) {
-                ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
-                return (admin != null) ? admin.disableScreenCapture : false;
+                ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
+                return (admin != null) && admin.disableScreenCapture;
             }
 
-            DevicePolicyData policy = getUserData(userHandle);
-            final int N = policy.mAdminList.size();
-            for (int i = 0; i < N; i++) {
-                ActiveAdmin admin = policy.mAdminList.get(i);
+            final int affectedUserId = parent ? getProfileParentId(userHandle) : userHandle;
+            List<ActiveAdmin> admins = getActiveAdminsForAffectedUserLocked(affectedUserId);
+            for (ActiveAdmin admin: admins) {
                 if (admin.disableScreenCapture) {
                     return true;
                 }
@@ -7624,14 +7664,11 @@
 
     private void updateScreenCaptureDisabled(int userHandle, boolean disabled) {
         mPolicyCache.setScreenCaptureDisabled(userHandle, disabled);
-        mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    mInjector.getIWindowManager().refreshScreenCaptureDisabled(userHandle);
-                } catch (RemoteException e) {
-                    Log.w(LOG_TAG, "Unable to notify WindowManager.", e);
-                }
+        mHandler.post(() -> {
+            try {
+                mInjector.getIWindowManager().refreshScreenCaptureDisabled(userHandle);
+            } catch (RemoteException e) {
+                Log.w(LOG_TAG, "Unable to notify WindowManager.", e);
             }
         });
     }
@@ -8089,6 +8126,7 @@
                 .createEvent(DevicePolicyEnums.SET_CAMERA_DISABLED)
                 .setAdmin(who)
                 .setBoolean(disabled)
+                .setStrings(parent ? CALLED_FROM_PARENT : NOT_CALLED_FROM_PARENT)
                 .write();
     }
 
@@ -8123,8 +8161,9 @@
                     return true;
                 }
             }
+            final int affectedUserId = parent ? getProfileParentId(userHandle) : userHandle;
             // Return the strictest policy across all participating admins.
-            List<ActiveAdmin> admins = getActiveAdminsForAffectedUser(userHandle, parent);
+            List<ActiveAdmin> admins = getActiveAdminsForAffectedUserLocked(affectedUserId);
             // Determine whether or not the device camera is disabled for any active admins.
             for (ActiveAdmin admin: admins) {
                 if (admin.disableCamera) {
@@ -8142,16 +8181,20 @@
         }
         Objects.requireNonNull(who, "ComponentName is null");
         final int userHandle = mInjector.userHandleGetCallingUserId();
-        if (isManagedProfile(userHandle)) {
-            if (parent) {
-                which = which & PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER;
-            } else {
-                which = which & PROFILE_KEYGUARD_FEATURES;
-            }
-        }
         synchronized (getLockObject()) {
             ActiveAdmin ap = getActiveAdminForCallerLocked(
                     who, DeviceAdminInfo.USES_POLICY_DISABLE_KEYGUARD_FEATURES, parent);
+            if (isManagedProfile(userHandle)) {
+                if (parent) {
+                    if (isProfileOwnerOfOrganizationOwnedDevice(ap)) {
+                        which = which & PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER;
+                    } else {
+                        which = which & NON_ORG_OWNED_PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER;
+                    }
+                } else {
+                    which = which & PROFILE_KEYGUARD_FEATURES;
+                }
+            }
             if (ap.disabledKeyguardFeatures != which) {
                 ap.disabledKeyguardFeatures = which;
                 saveSettingsLocked(userHandle);
@@ -8166,7 +8209,7 @@
                 .createEvent(DevicePolicyEnums.SET_KEYGUARD_DISABLED_FEATURES)
                 .setAdmin(who)
                 .setInt(which)
-                .setBoolean(parent)
+                .setStrings(parent ? CALLED_FROM_PARENT : NOT_CALLED_FROM_PARENT)
                 .write();
     }
 
@@ -8520,6 +8563,9 @@
     }
 
     private void clearOverrideApnUnchecked() {
+        if (!mHasTelephonyFeature) {
+            return;
+        }
         // Disable Override APNs and remove them from database.
         setOverrideApnsEnabledUnchecked(false);
         final List<ApnSetting> apns = getOverrideApnsUnchecked();
@@ -8880,9 +8926,12 @@
                 UserInfo parent = mUserManager.getProfileParent(userId);
                 Intent intent = new Intent(Intent.ACTION_MANAGED_PROFILE_ADDED);
                 intent.putExtra(Intent.EXTRA_USER, new UserHandle(userId));
+                UserHandle parentHandle = new UserHandle(parent.id);
+                mLocalService.broadcastIntentToCrossProfileManifestReceiversAsUser(intent,
+                        parentHandle, /* requiresPermission= */ true);
                 intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY |
                         Intent.FLAG_RECEIVER_FOREGROUND);
-                mContext.sendBroadcastAsUser(intent, new UserHandle(parent.id));
+                mContext.sendBroadcastAsUser(intent, parentHandle);
             });
         }
     }
@@ -9997,35 +10046,6 @@
         }
     }
 
-    private boolean checkCallerIsCurrentUserOrProfile() {
-        final int callingUserId = UserHandle.getCallingUserId();
-        final long token = mInjector.binderClearCallingIdentity();
-        try {
-            UserInfo currentUser;
-            UserInfo callingUser = getUserInfo(callingUserId);
-            try {
-                currentUser = mInjector.getIActivityManager().getCurrentUser();
-            } catch (RemoteException e) {
-                Slog.e(LOG_TAG, "Failed to talk to activity managed.", e);
-                return false;
-            }
-
-            if (callingUser.isManagedProfile() && callingUser.profileGroupId != currentUser.id) {
-                Slog.e(LOG_TAG, "Cannot set permitted input methods for managed profile "
-                        + "of a user that isn't the foreground user.");
-                return false;
-            }
-            if (!callingUser.isManagedProfile() && callingUserId != currentUser.id ) {
-                Slog.e(LOG_TAG, "Cannot set permitted input methods "
-                        + "of a user that isn't the foreground user.");
-                return false;
-            }
-        } finally {
-            mInjector.binderRestoreCallingIdentity(token);
-        }
-        return true;
-    }
-
     @Override
     public boolean setPermittedInputMethods(ComponentName who, List packageList) {
         if (!mHasFeature) {
@@ -10670,7 +10690,7 @@
         DevicePolicyEventLogger
                 .createEvent(eventId)
                 .setAdmin(who)
-                .setStrings(key)
+                .setStrings(key, parent ? CALLED_FROM_PARENT : NOT_CALLED_FROM_PARENT)
                 .write();
         if (SecurityLog.isLoggingEnabled()) {
             final int eventTag = enabledFromThisOwner
@@ -10814,8 +10834,8 @@
                 .createEvent(DevicePolicyEnums.SET_APPLICATION_HIDDEN)
                 .setAdmin(callerPackage)
                 .setBoolean(isDelegate)
-                .setBoolean(parent)
-                .setStrings(packageName, hidden ? "hidden" : "not_hidden")
+                .setStrings(packageName, hidden ? "hidden" : "not_hidden",
+                        parent ? CALLED_FROM_PARENT : NOT_CALLED_FROM_PARENT)
                 .write();
         return result;
     }
@@ -11017,14 +11037,21 @@
 
     @Override
     public void setAccountManagementDisabled(ComponentName who, String accountType,
-            boolean disabled) {
+            boolean disabled, boolean parent) {
         if (!mHasFeature) {
             return;
         }
         Objects.requireNonNull(who, "ComponentName is null");
         synchronized (getLockObject()) {
+            /*
+             * When called on the parent DPM instance (parent == true), affects active admin
+             * selection in two ways:
+             * * The ActiveAdmin must be of an org-owned profile owner.
+             * * The parent ActiveAdmin instance should be used for managing the restriction.
+             */
             ActiveAdmin ap = getActiveAdminForCallerLocked(who,
-                    DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+                    parent ? DeviceAdminInfo.USES_POLICY_ORGANIZATION_OWNED_PROFILE_OWNER
+                            : DeviceAdminInfo.USES_POLICY_PROFILE_OWNER, parent);
             if (disabled) {
                 ap.accountTypesWithManagementDisabled.add(accountType);
             } else {
@@ -11036,22 +11063,34 @@
 
     @Override
     public String[] getAccountTypesWithManagementDisabled() {
-        return getAccountTypesWithManagementDisabledAsUser(UserHandle.getCallingUserId());
+        return getAccountTypesWithManagementDisabledAsUser(UserHandle.getCallingUserId(), false);
     }
 
     @Override
-    public String[] getAccountTypesWithManagementDisabledAsUser(int userId) {
+    public String[] getAccountTypesWithManagementDisabledAsUser(int userId, boolean parent) {
         enforceFullCrossUsersPermission(userId);
         if (!mHasFeature) {
             return null;
         }
         synchronized (getLockObject()) {
-            DevicePolicyData policy = getUserData(userId);
-            final int N = policy.mAdminList.size();
-            ArraySet<String> resultSet = new ArraySet<>();
-            for (int i = 0; i < N; i++) {
-                ActiveAdmin admin = policy.mAdminList.get(i);
-                resultSet.addAll(admin.accountTypesWithManagementDisabled);
+            final ArraySet<String> resultSet = new ArraySet<>();
+
+            if (!parent) {
+                final DevicePolicyData policy = getUserData(userId);
+                for (ActiveAdmin admin : policy.mAdminList) {
+                    resultSet.addAll(admin.accountTypesWithManagementDisabled);
+                }
+            }
+
+            // Check if there's a profile owner of an org-owned device and the method is called for
+            // the parent user of this profile owner.
+            final ActiveAdmin orgOwnedAdmin =
+                    getProfileOwnerOfOrganizationOwnedDeviceLocked(userId);
+            final boolean shouldGetParentAccounts = orgOwnedAdmin != null && (parent
+                    || UserHandle.getUserId(orgOwnedAdmin.getUid()) != userId);
+            if (shouldGetParentAccounts) {
+                resultSet.addAll(
+                        orgOwnedAdmin.getParentActiveAdmin().accountTypesWithManagementDisabled);
             }
             return resultSet.toArray(new String[resultSet.size()]);
         }
@@ -11526,7 +11565,7 @@
     }
 
     @Override
-    public void setLockdownAdminConfiguredNetworks(ComponentName who, boolean lockdown) {
+    public void setConfiguredNetworksLockdownState(ComponentName who, boolean lockdown) {
         if (!mHasFeature) {
             return;
         }
@@ -11545,7 +11584,7 @@
     }
 
     @Override
-    public boolean isLockdownAdminConfiguredNetworks(ComponentName who) {
+    public boolean hasLockdownAdminConfiguredNetworks(ComponentName who) {
         if (!mHasFeature) {
             return false;
         }
@@ -11558,13 +11597,22 @@
 
     @Override
     public void setLocationEnabled(ComponentName who, boolean locationEnabled) {
-        Objects.requireNonNull(who, "ComponentName is null");
-        enforceDeviceOwner(who);
+        enforceDeviceOwner(Objects.requireNonNull(who));
 
-        UserHandle userHandle = mInjector.binderGetCallingUserHandle();
-        mInjector.binderWithCleanCallingIdentity(
-                () -> mInjector.getLocationManager().setLocationEnabledForUser(locationEnabled,
-                        userHandle));
+        UserHandle user = mInjector.binderGetCallingUserHandle();
+
+        mInjector.binderWithCleanCallingIdentity(() -> {
+            boolean wasLocationEnabled = mInjector.getLocationManager().isLocationEnabledForUser(
+                    user);
+            mInjector.getLocationManager().setLocationEnabledForUser(locationEnabled, user);
+
+            // make a best effort to only show the notification if the admin is actually changing
+            // something. this is subject to race conditions with settings changes, but those are
+            // unlikely to realistically interfere
+            if (wasLocationEnabled != locationEnabled) {
+                showLocationSettingsChangedNotification(user);
+            }
+        });
 
         DevicePolicyEventLogger
                 .createEvent(DevicePolicyEnums.SET_SECURE_SETTING)
@@ -11575,6 +11623,25 @@
                 .write();
     }
 
+    private void showLocationSettingsChangedNotification(UserHandle user) {
+        PendingIntent locationSettingsIntent = mInjector.pendingIntentGetActivityAsUser(mContext, 0,
+                new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
+                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK), PendingIntent.FLAG_UPDATE_CURRENT,
+                null, user);
+        Notification notification = new Notification.Builder(mContext,
+                SystemNotificationChannels.DEVICE_ADMIN)
+                .setSmallIcon(R.drawable.ic_info_outline)
+                .setContentTitle(mContext.getString(R.string.location_changed_notification_title))
+                .setContentText(mContext.getString(R.string.location_changed_notification_text))
+                .setColor(mContext.getColor(R.color.system_notification_accent_color))
+                .setShowWhen(true)
+                .setContentIntent(locationSettingsIntent)
+                .setAutoCancel(true)
+                .build();
+        mInjector.getNotificationManager().notify(SystemMessage.NOTE_LOCATION_CHANGED,
+                notification);
+    }
+
     @Override
     public void requestSetLocationProviderAllowed(ComponentName who, String provider,
             boolean providerAllowed) {
@@ -11598,6 +11665,11 @@
                 millis, "DevicePolicyManagerService: setTime");
         mInjector.binderWithCleanCallingIdentity(
                 () -> mInjector.getTimeDetector().suggestManualTime(manualTimeSuggestion));
+
+        DevicePolicyEventLogger
+                .createEvent(DevicePolicyEnums.SET_TIME)
+                .setAdmin(who)
+                .write();
         return true;
     }
 
@@ -11614,6 +11686,11 @@
                         timeZone, "DevicePolicyManagerService: setTimeZone");
         mInjector.binderWithCleanCallingIdentity(() ->
                 mInjector.getTimeZoneDetector().suggestManualTimeZone(manualTimeZoneSuggestion));
+
+        DevicePolicyEventLogger
+                .createEvent(DevicePolicyEnums.SET_TIME_ZONE)
+                .setAdmin(who)
+                .write();
         return true;
     }
 
@@ -11635,6 +11712,12 @@
                 throw new SecurityException(String.format(
                         "Permission denial: Profile owners cannot update %1$s", setting));
             }
+            if (setting.equals(Settings.Secure.LOCATION_MODE)
+                    && isSetSecureSettingLocationModeCheckEnabled(who.getPackageName(),
+                    callingUserId)) {
+                throw new UnsupportedOperationException(Settings.Secure.LOCATION_MODE + " is "
+                        + "deprecated. Please use setLocationEnabled() instead.");
+            }
             if (setting.equals(Settings.Secure.INSTALL_NON_MARKET_APPS)) {
                 if (getTargetSdk(who.getPackageName(), callingUserId) >= Build.VERSION_CODES.O) {
                     throw new UnsupportedOperationException(Settings.Secure.INSTALL_NON_MARKET_APPS
@@ -11679,6 +11762,9 @@
                     saveSettingsLocked(callingUserId);
                 }
                 mInjector.settingsSecurePutStringForUser(setting, value, callingUserId);
+                if (setting.equals(Settings.Secure.LOCATION_MODE)) {
+                    showLocationSettingsChangedNotification(UserHandle.of(callingUserId));
+                }
             });
         }
         DevicePolicyEventLogger
@@ -11688,6 +11774,16 @@
                 .write();
     }
 
+    private boolean isSetSecureSettingLocationModeCheckEnabled(String packageName, int userId) {
+        try {
+            return mIPlatformCompat.isChangeEnabledByPackageName(USE_SET_LOCATION_ENABLED,
+                    packageName, userId);
+        } catch (RemoteException e) {
+            Log.e(LOG_TAG, "Failed to get a response from PLATFORM_COMPAT_SERVICE", e);
+            return getTargetSdk(packageName, userId) > Build.VERSION_CODES.Q;
+        }
+    }
+
     @Override
     public void setMasterVolumeMuted(ComponentName who, boolean on) {
         Objects.requireNonNull(who, "ComponentName is null");
@@ -12187,6 +12283,105 @@
             return DevicePolicyManagerService.this.getAllCrossProfilePackages();
         }
 
+        /**
+         * Sends the {@code intent} to the packages with cross profile capabilities.
+         *
+         * <p>This means the application must have the {@code crossProfile} property and
+         * and at least one of the following permissions:
+         *
+         * <ul>
+         *     <li>{@link android.Manifest.permission.INTERACT_ACROSS_PROFILES}
+         *     <li>{@link android.Manifest.permission.INTERACT_ACROSS_USERS}
+         *     <li>{@link android.Manifest.permission.INTERACT_ACROSS_USERS_FULL} permission or the
+         *     {@link AppOpsManager.OP_INTERACT_ACROSS_PROFILES} app operation authorization.
+         * </ul>
+         *
+         * <p>Note: The intent itself is not modified but copied before use.
+         *
+         * @param intent Template for the intent sent to the packages.
+         * @param parentHandle Handle of the user that will receive the intents.
+         * @param requiresPermission If false, all packages with the {@code crossProfile} property
+         *                           will receive the intent.
+         */
+        @Override
+        public void broadcastIntentToCrossProfileManifestReceiversAsUser(Intent intent,
+                UserHandle parentHandle, boolean requiresPermission) {
+            Objects.requireNonNull(intent);
+            Objects.requireNonNull(parentHandle);
+            final int userId = parentHandle.getIdentifier();
+            Slog.i(LOG_TAG,
+                    String.format("Sending %s broadcast to manifest receivers.",
+                            intent.getAction()));
+            try {
+                final List<ResolveInfo> receivers = mIPackageManager.queryIntentReceivers(
+                        intent, /* resolvedType= */ null,
+                        STOCK_PM_FLAGS, parentHandle.getIdentifier()).getList();
+                for (ResolveInfo receiver : receivers) {
+                    final String packageName = receiver.getComponentInfo().packageName;
+                    if (checkCrossProfilePackagePermissions(packageName, userId,
+                            requiresPermission)) {
+                        Slog.i(LOG_TAG,
+                                String.format("Sending %s broadcast to %s.", intent.getAction(),
+                                        packageName));
+                        final Intent packageIntent = new Intent(intent)
+                                .setComponent(receiver.getComponentInfo().getComponentName())
+                                .addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
+                        mContext.sendBroadcastAsUser(packageIntent, parentHandle);
+                    }
+                }
+            } catch (RemoteException ex) {
+                Slog.w(LOG_TAG,
+                        String.format("Cannot get list of broadcast receivers for %s because: %s.",
+                                intent.getAction(), ex));
+            }
+        }
+
+        /**
+         * Checks whether the package {@code packageName} has the required permissions to receive
+         * cross-profile broadcasts on behalf of the user {@code userId}.
+         */
+        private boolean checkCrossProfilePackagePermissions(String packageName,
+                @UserIdInt int userId, boolean requiresPermission) {
+            final PackageManagerInternal pmInternal = LocalServices.getService(
+                    PackageManagerInternal.class);
+            final AndroidPackage androidPackage = pmInternal.getPackage(packageName);
+            if (androidPackage == null || !androidPackage.isCrossProfile()) {
+                return false;
+            }
+            if (!requiresPermission) {
+                return true;
+            }
+            if (!isPackageEnabled(packageName, userId)) {
+                return false;
+            }
+            try {
+                final CrossProfileAppsInternal crossProfileAppsService = LocalServices.getService(
+                        CrossProfileAppsInternal.class);
+                return crossProfileAppsService.verifyPackageHasInteractAcrossProfilePermission(
+                        packageName, userId);
+            } catch (NameNotFoundException ex) {
+                Slog.w(LOG_TAG,
+                        String.format("Cannot find the package %s to check for permissions.",
+                                packageName));
+                return false;
+            }
+        }
+
+        private boolean isPackageEnabled(String packageName, @UserIdInt int userId) {
+            final int callingUid = Binder.getCallingUid();
+            final long ident = Binder.clearCallingIdentity();
+            try {
+                final PackageInfo info = mInjector.getPackageManagerInternal()
+                        .getPackageInfo(
+                                packageName,
+                                MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE,
+                                callingUid,
+                                userId);
+                return info != null && info.applicationInfo.enabled;
+            } finally {
+                Binder.restoreCallingIdentity(ident);
+            }
+        }
     }
 
     private Intent createShowAdminSupportIntent(ComponentName admin, int userId) {
@@ -12531,14 +12726,6 @@
                             true);
                 }
 
-                // Prevent granting location-related permissions without user consent.
-                if (LOCATION_PERMISSIONS.contains(permission)
-                        && grantState == DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED
-                        && !isUnattendedManagedKioskUnchecked()) {
-                    callback.sendResult(null);
-                    return;
-                }
-
                 if (grantState == DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED
                         || grantState == DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED
                         || grantState == DevicePolicyManager.PERMISSION_GRANT_STATE_DEFAULT) {
@@ -14307,12 +14494,15 @@
             final int userHandle = mInjector.userHandleGetCallingUserId();
             getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
 
-            DevicePolicyData policy = getUserData(userHandle);
-            if (policy.mPasswordTokenHandle != 0) {
-                return mInjector.binderWithCleanCallingIdentity(
-                        () -> mLockPatternUtils.isEscrowTokenActive(policy.mPasswordTokenHandle,
-                                userHandle));
-            }
+            return isResetPasswordTokenActiveForUserLocked(userHandle);
+        }
+    }
+
+    private boolean isResetPasswordTokenActiveForUserLocked(int userHandle) {
+        DevicePolicyData policy = getUserData(userHandle);
+        if (policy.mPasswordTokenHandle != 0) {
+            return mInjector.binderWithCleanCallingIdentity(() ->
+                    mLockPatternUtils.isEscrowTokenActive(policy.mPasswordTokenHandle, userHandle));
         }
         return false;
     }
@@ -15044,15 +15234,27 @@
             final ActiveAdmin admin =
                     getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
             previousCrossProfilePackages = admin.mCrossProfilePackages;
+            if (packageNames.equals(previousCrossProfilePackages)) {
+                return;
+            }
             admin.mCrossProfilePackages = packageNames;
             saveSettingsLocked(mInjector.userHandleGetCallingUserId());
         }
+        logSetCrossProfilePackages(who, packageNames);
         final CrossProfileApps crossProfileApps = mContext.getSystemService(CrossProfileApps.class);
         mInjector.binderWithCleanCallingIdentity(
                 () -> crossProfileApps.resetInteractAcrossProfilesAppOps(
                         previousCrossProfilePackages, new HashSet<>(packageNames)));
     }
 
+    private void logSetCrossProfilePackages(ComponentName who, List<String> packageNames) {
+        DevicePolicyEventLogger
+                .createEvent(DevicePolicyEnums.SET_CROSS_PROFILE_PACKAGES)
+                .setAdmin(who)
+                .setStrings(packageNames.toArray(new String[packageNames.size()]))
+                .write();
+    }
+
     @Override
     public List<String> getCrossProfilePackages(ComponentName who) {
         if (!mHasFeature) {
@@ -15376,6 +15578,12 @@
 
         mInjector.binderWithCleanCallingIdentity(
                 () -> applyPersonalAppsSuspension(callingUserId, suspended));
+
+        DevicePolicyEventLogger
+                .createEvent(DevicePolicyEnums.SET_PERSONAL_APPS_SUSPENDED)
+                .setAdmin(who)
+                .setBoolean(suspended)
+                .write();
     }
 
     /**
@@ -15442,8 +15650,8 @@
 
     private void updateProfileOffAlarm(long profileOffDeadline) {
         final AlarmManager am = mInjector.getAlarmManager();
-        final PendingIntent pi = PendingIntent.getBroadcast(mContext, REQUEST_PROFILE_OFF_DEADLINE,
-                new Intent(ACTION_PROFILE_OFF_DEADLINE),
+        final PendingIntent pi = mInjector.pendingIntentGetBroadcast(
+                mContext, REQUEST_PROFILE_OFF_DEADLINE, new Intent(ACTION_PROFILE_OFF_DEADLINE),
                 PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
         am.cancel(pi);
         if (profileOffDeadline != 0) {
@@ -15547,9 +15755,16 @@
 
         mInjector.binderWithCleanCallingIdentity(
                 () -> updatePersonalAppSuspension(userId, mUserManager.isUserUnlocked()));
+
+        DevicePolicyEventLogger
+                .createEvent(DevicePolicyEnums.SET_MANAGED_PROFILE_MAXIMUM_TIME_OFF)
+                .setAdmin(who)
+                .setTimePeriod(timeoutMs)
+                .write();
     }
 
-    void enforceHandlesCheckPolicyComplianceIntent(@UserIdInt int userId, String packageName) {
+    private void enforceHandlesCheckPolicyComplianceIntent(
+            @UserIdInt int userId, String packageName) {
         mInjector.binderWithCleanCallingIdentity(() -> {
             final Intent intent = new Intent(DevicePolicyManager.ACTION_CHECK_POLICY_COMPLIANCE);
             intent.setPackage(packageName);
@@ -15571,4 +15786,34 @@
             return admin.mProfileMaximumTimeOff;
         }
     }
+
+    @Override
+    public boolean canProfileOwnerResetPasswordWhenLocked(int userId) {
+        enforceSystemCaller("call canProfileOwnerResetPasswordWhenLocked");
+        synchronized (getLockObject()) {
+            final ActiveAdmin poAdmin = getProfileOwnerAdminLocked(userId);
+            if (poAdmin == null
+                    || getEncryptionStatus() != ENCRYPTION_STATUS_ACTIVE_PER_USER
+                    || !isResetPasswordTokenActiveForUserLocked(userId)) {
+                return false;
+            }
+            final ApplicationInfo poAppInfo;
+            try {
+                poAppInfo = mIPackageManager.getApplicationInfo(
+                        poAdmin.info.getPackageName(), 0 /* flags */, userId);
+            } catch (RemoteException e) {
+                Slog.e(LOG_TAG, "Failed to query PO app info", e);
+                return false;
+            }
+            if (poAppInfo == null) {
+                Slog.wtf(LOG_TAG, "Cannot find AppInfo for profile owner");
+                return false;
+            }
+            if (!poAppInfo.isEncryptionAware()) {
+                return false;
+            }
+            Slog.d(LOG_TAG, "PO should be able to reset password from direct boot");
+            return true;
+        }
+    }
 }
diff --git a/services/incremental/Android.bp b/services/incremental/Android.bp
index 323e7f1..b13d330 100644
--- a/services/incremental/Android.bp
+++ b/services/incremental/Android.bp
@@ -43,6 +43,7 @@
         "service.incremental.proto",
         "libutils",
         "libvold_binder",
+        "libc++fs",
     ],
     shared_libs: [
         "libandroidfw",
diff --git a/services/incremental/BinderIncrementalService.cpp b/services/incremental/BinderIncrementalService.cpp
index 0941831..3fcb57a 100644
--- a/services/incremental/BinderIncrementalService.cpp
+++ b/services/incremental/BinderIncrementalService.cpp
@@ -16,6 +16,7 @@
 
 #include "BinderIncrementalService.h"
 
+#include <android-base/logging.h>
 #include <binder/IResultReceiver.h>
 #include <binder/PermissionCache.h>
 #include <incfs.h>
@@ -24,7 +25,6 @@
 #include "jni.h"
 #include "nativehelper/JNIHelp.h"
 #include "path.h"
-#include <android-base/logging.h>
 
 using namespace std::literals;
 using namespace android::incremental;
@@ -117,10 +117,9 @@
 
 binder::Status BinderIncrementalService::createStorage(const std::string& path,
                                                        const DataLoaderParamsParcel& params,
+                                                       const ::android::sp<::android::content::pm::IDataLoaderStatusListener>& listener,
                                                        int32_t createMode, int32_t* _aidl_return) {
-    *_aidl_return = mImpl.createStorage(path, const_cast<DataLoaderParamsParcel&&>(params),
-                                        android::incremental::IncrementalService::CreateOptions(
-                                                createMode));
+    *_aidl_return = mImpl.createStorage(path, const_cast<DataLoaderParamsParcel&&>(params), listener, android::incremental::IncrementalService::CreateOptions(createMode));
     return ok();
 }
 
@@ -277,6 +276,13 @@
     return ok();
 }
 
+binder::Status BinderIncrementalService::configureNativeBinaries(
+        int32_t storageId, const std::string& apkFullPath, const std::string& libDirRelativePath,
+        const std::string& abi, bool* _aidl_return) {
+    *_aidl_return = mImpl.configureNativeBinaries(storageId, apkFullPath, libDirRelativePath, abi);
+    return ok();
+}
+
 } // namespace android::os::incremental
 
 jlong Incremental_IncrementalService_Start() {
diff --git a/services/incremental/BinderIncrementalService.h b/services/incremental/BinderIncrementalService.h
index 8a09977..4075da6 100644
--- a/services/incremental/BinderIncrementalService.h
+++ b/services/incremental/BinderIncrementalService.h
@@ -28,19 +28,17 @@
 class BinderIncrementalService : public BnIncrementalService,
                                  public BinderService<BinderIncrementalService> {
 public:
-    BinderIncrementalService(const sp<IServiceManager> &sm);
+    BinderIncrementalService(const sp<IServiceManager>& sm);
 
-    static BinderIncrementalService *start();
-    static const char16_t *getServiceName() { return u"incremental_service"; }
-    status_t dump(int fd, const Vector<String16> &args) final;
+    static BinderIncrementalService* start();
+    static const char16_t* getServiceName() { return u"incremental_service"; }
+    status_t dump(int fd, const Vector<String16>& args) final;
 
     void onSystemReady();
     void onInvalidStorage(int mountId);
 
     binder::Status openStorage(const std::string& path, int32_t* _aidl_return) final;
-    binder::Status createStorage(const std::string& path,
-                                 const ::android::content::pm::DataLoaderParamsParcel& params,
-                                 int32_t createMode, int32_t* _aidl_return) final;
+    binder::Status createStorage(const ::std::string& path, const ::android::content::pm::DataLoaderParamsParcel& params, const ::android::sp<::android::content::pm::IDataLoaderStatusListener>& listener, int32_t createMode, int32_t* _aidl_return) final;
     binder::Status createLinkedStorage(const std::string& path, int32_t otherStorageId,
                                        int32_t createMode, int32_t* _aidl_return) final;
     binder::Status makeBindMount(int32_t storageId, const std::string& sourcePath,
@@ -70,6 +68,9 @@
                                    std::vector<uint8_t>* _aidl_return) final;
     binder::Status startLoading(int32_t storageId, bool* _aidl_return) final;
     binder::Status deleteStorage(int32_t storageId) final;
+    binder::Status configureNativeBinaries(int32_t storageId, const std::string& apkFullPath,
+                                           const std::string& libDirRelativePath,
+                                           const std::string& abi, bool* _aidl_return) final;
 
 private:
     android::incremental::IncrementalService mImpl;
diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp
index dbd97cf..980ae08 100644
--- a/services/incremental/IncrementalService.cpp
+++ b/services/incremental/IncrementalService.cpp
@@ -30,12 +30,12 @@
 #include <binder/BinderService.h>
 #include <binder/ParcelFileDescriptor.h>
 #include <binder/Status.h>
-#include <openssl/sha.h>
 #include <sys/stat.h>
 #include <uuid/uuid.h>
 #include <zlib.h>
 
 #include <ctime>
+#include <filesystem>
 #include <iterator>
 #include <span>
 #include <stack>
@@ -46,6 +46,7 @@
 
 using namespace std::literals;
 using namespace android::content::pm;
+namespace fs = std::filesystem;
 
 namespace android::incremental {
 
@@ -57,9 +58,13 @@
 struct Constants {
     static constexpr auto backing = "backing_store"sv;
     static constexpr auto mount = "mount"sv;
+    static constexpr auto mountKeyPrefix = "MT_"sv;
     static constexpr auto storagePrefix = "st"sv;
     static constexpr auto mountpointMdPrefix = ".mountpoint."sv;
     static constexpr auto infoMdName = ".info"sv;
+    static constexpr auto libDir = "lib"sv;
+    static constexpr auto libSuffix = ".so"sv;
+    static constexpr auto blockSize = 4096;
 };
 
 static const Constants& constants() {
@@ -102,7 +107,7 @@
     std::string res(path);
     std::replace(res.begin(), res.end(), '/', '_');
     std::replace(res.begin(), res.end(), '@', '_');
-    return res;
+    return std::string(constants().mountKeyPrefix) + res;
 }
 
 static std::pair<std::string, std::string> makeMountDir(std::string_view incrementalDir,
@@ -233,42 +238,29 @@
     if (!mIncrementalManager) {
         LOG(FATAL) << "IncrementalManager service is unavailable";
     }
-    // TODO(b/136132412): check that root dir should already exist
-    // TODO(b/136132412): enable mount existing dirs after SELinux rules are merged
-    // mountExistingImages();
+    mountExistingImages();
 }
 
 FileId IncrementalService::idFromMetadata(std::span<const uint8_t> metadata) {
-    incfs::FileId id = {};
-    if (size_t(metadata.size()) <= sizeof(id)) {
-        memcpy(&id, metadata.data(), metadata.size());
-    } else {
-        uint8_t buffer[SHA_DIGEST_LENGTH];
-        static_assert(sizeof(buffer) >= sizeof(id));
-
-        SHA_CTX ctx;
-        SHA1_Init(&ctx);
-        SHA1_Update(&ctx, metadata.data(), metadata.size());
-        SHA1_Final(buffer, &ctx);
-        memcpy(&id, buffer, sizeof(id));
-    }
-    return id;
+    return IncFs_FileIdFromMetadata({(const char*)metadata.data(), metadata.size()});
 }
 
 IncrementalService::~IncrementalService() = default;
 
 inline const char* toString(TimePoint t) {
     using SystemClock = std::chrono::system_clock;
-    time_t time = SystemClock::to_time_t(SystemClock::now() + std::chrono::duration_cast<SystemClock::duration>(t - Clock::now()));
+    time_t time = SystemClock::to_time_t(
+            SystemClock::now() +
+            std::chrono::duration_cast<SystemClock::duration>(t - Clock::now()));
     return std::ctime(&time);
 }
 
 inline const char* toString(IncrementalService::BindKind kind) {
     switch (kind) {
-    case IncrementalService::BindKind::Temporary:
-        return "Temporary";
-    case IncrementalService::BindKind::Permanent:
-        return "Permanent";
+        case IncrementalService::BindKind::Temporary:
+            return "Temporary";
+        case IncrementalService::BindKind::Permanent:
+            return "Permanent";
     }
 }
 
@@ -337,21 +329,14 @@
     }
 
     std::thread([this, mounts = std::move(mounts)]() {
-        std::vector<IfsMountPtr> failedLoaderMounts;
         for (auto&& ifs : mounts) {
-            if (prepareDataLoader(*ifs, nullptr)) {
+            if (prepareDataLoader(*ifs)) {
                 LOG(INFO) << "Successfully started data loader for mount " << ifs->mountId;
             } else {
+                // TODO(b/133435829): handle data loader start failures
                 LOG(WARNING) << "Failed to start data loader for mount " << ifs->mountId;
-                failedLoaderMounts.push_back(std::move(ifs));
             }
         }
-
-        while (!failedLoaderMounts.empty()) {
-            LOG(WARNING) << "Deleting failed mount " << failedLoaderMounts.back()->mountId;
-            deleteStorage(*failedLoaderMounts.back());
-            failedLoaderMounts.pop_back();
-        }
         mPrepareDataLoaders.set_value_at_thread_exit();
     }).detach();
     return mPrepareDataLoaders.get_future();
@@ -370,9 +355,9 @@
     }
 }
 
-StorageId IncrementalService::createStorage(std::string_view mountPoint,
-                                            DataLoaderParamsParcel&& dataLoaderParams,
-                                            CreateOptions options) {
+StorageId IncrementalService::createStorage(
+        std::string_view mountPoint, DataLoaderParamsParcel&& dataLoaderParams,
+        const DataLoaderStatusListener& dataLoaderStatusListener, CreateOptions options) {
     LOG(INFO) << "createStorage: " << mountPoint << " | " << int(options);
     if (!path::isAbsolute(mountPoint)) {
         LOG(ERROR) << "path is not absolute: " << mountPoint;
@@ -504,7 +489,7 @@
     // Done here as well, all data structures are in good state.
     secondCleanupOnFailure.release();
 
-    if (!prepareDataLoader(*ifs, &dataLoaderParams)) {
+    if (!prepareDataLoader(*ifs, &dataLoaderParams, &dataLoaderStatusListener)) {
         LOG(ERROR) << "prepareDataLoader() failed";
         deleteStorageLocked(*ifs, std::move(l));
         return kInvalidStorageId;
@@ -762,7 +747,6 @@
         if (params.metadata.data && params.metadata.size > 0) {
             metadataBytes.assign(params.metadata.data, params.metadata.data + params.metadata.size);
         }
-        mIncrementalManager->newFileForDataLoader(ifs->mountId, id, metadataBytes);
         return 0;
     }
     return -EINVAL;
@@ -835,9 +819,10 @@
         metadata::BindPoint bp;
         bp.set_storage_id(storage);
         bp.set_allocated_dest_path(&target);
-        bp.set_source_subdir(std::string(path::relativize(storageRoot, source)));
+        bp.set_allocated_source_subdir(&source);
         const auto metadata = bp.SerializeAsString();
         bp.release_dest_path();
+        bp.release_source_subdir();
         mdFileName = makeBindMdName();
         auto node =
                 mIncFs->makeFile(ifs.control, path::join(ifs.root, constants().mount, mdFileName),
@@ -952,25 +937,20 @@
 }
 
 void IncrementalService::mountExistingImages() {
-    auto d = std::unique_ptr<DIR, decltype(&::closedir)>(::opendir(mIncrementalDir.c_str()),
-                                                         ::closedir);
-    while (auto e = ::readdir(d.get())) {
-        if (e->d_type != DT_DIR) {
+    for (const auto& entry : fs::directory_iterator(mIncrementalDir)) {
+        const auto path = entry.path().u8string();
+        const auto name = entry.path().filename().u8string();
+        if (!base::StartsWith(name, constants().mountKeyPrefix)) {
             continue;
         }
-        if (e->d_name == "."sv || e->d_name == ".."sv) {
-            continue;
-        }
-        auto root = path::join(mIncrementalDir, e->d_name);
-        if (!mountExistingImage(root, e->d_name)) {
-            IncFsMount::cleanupFilesystem(root);
+        const auto root = path::join(mIncrementalDir, name);
+        if (!mountExistingImage(root, name)) {
+            IncFsMount::cleanupFilesystem(path);
         }
     }
 }
 
 bool IncrementalService::mountExistingImage(std::string_view root, std::string_view key) {
-    LOG(INFO) << "Trying to mount: " << key;
-
     auto mountTarget = path::join(root, constants().mount);
     const auto backing = path::join(root, constants().backing);
 
@@ -1054,22 +1034,13 @@
         return false;
     }
 
-    DataLoaderParamsParcel dlParams;
-    dlParams.type = (DataLoaderType)m.loader().type();
-    dlParams.packageName = std::move(*m.mutable_loader()->mutable_package_name());
-    dlParams.className = std::move(*m.mutable_loader()->mutable_class_name());
-    dlParams.arguments = std::move(*m.mutable_loader()->mutable_arguments());
-    if (!prepareDataLoader(*ifs, &dlParams)) {
-        deleteStorage(*ifs);
-        return false;
-    }
-
     mMounts[ifs->mountId] = std::move(ifs);
     return true;
 }
 
 bool IncrementalService::prepareDataLoader(IncrementalService::IncFsMount& ifs,
-                                           DataLoaderParamsParcel* params) {
+                                           DataLoaderParamsParcel* params,
+                                           const DataLoaderStatusListener* externalListener) {
     if (!mSystemReady.load(std::memory_order_relaxed)) {
         std::unique_lock l(ifs.lock);
         if (params) {
@@ -1112,7 +1083,8 @@
     fsControlParcel.incremental->pendingReads.reset(
             base::unique_fd(::dup(ifs.control.pendingReads)));
     fsControlParcel.incremental->log.reset(base::unique_fd(::dup(ifs.control.logs)));
-    sp<IncrementalDataLoaderListener> listener = new IncrementalDataLoaderListener(*this);
+    sp<IncrementalDataLoaderListener> listener =
+            new IncrementalDataLoaderListener(*this, *externalListener);
     bool created = false;
     auto status = mIncrementalManager->prepareDataLoader(ifs.mountId, fsControlParcel, *dlp,
                                                          listener, &created);
@@ -1124,8 +1096,129 @@
     return true;
 }
 
+// Extract lib filse from zip, create new files in incfs and write data to them
+bool IncrementalService::configureNativeBinaries(StorageId storage, std::string_view apkFullPath,
+                                                 std::string_view libDirRelativePath,
+                                                 std::string_view abi) {
+    const auto ifs = getIfs(storage);
+    // First prepare target directories if they don't exist yet
+    if (auto res = makeDirs(storage, libDirRelativePath, 0755)) {
+        LOG(ERROR) << "Failed to prepare target lib directory " << libDirRelativePath
+                   << " errno: " << res;
+        return false;
+    }
+
+    std::unique_ptr<ZipFileRO> zipFile(ZipFileRO::open(apkFullPath.data()));
+    if (!zipFile) {
+        LOG(ERROR) << "Failed to open zip file at " << apkFullPath;
+        return false;
+    }
+    void* cookie = nullptr;
+    const auto libFilePrefix = path::join(constants().libDir, abi);
+    if (!zipFile.get()->startIteration(&cookie, libFilePrefix.c_str() /* prefix */,
+                                       constants().libSuffix.data() /* suffix */)) {
+        LOG(ERROR) << "Failed to start zip iteration for " << apkFullPath;
+        return false;
+    }
+    ZipEntryRO entry = nullptr;
+    bool success = true;
+    while ((entry = zipFile.get()->nextEntry(cookie)) != nullptr) {
+        char fileName[PATH_MAX];
+        if (zipFile.get()->getEntryFileName(entry, fileName, sizeof(fileName))) {
+            continue;
+        }
+        const auto libName = path::basename(fileName);
+        const auto targetLibPath = path::join(libDirRelativePath, libName);
+        const auto targetLibPathAbsolute = normalizePathToStorage(ifs, storage, targetLibPath);
+        // If the extract file already exists, skip
+        struct stat st;
+        if (stat(targetLibPathAbsolute.c_str(), &st) == 0) {
+            LOG(INFO) << "Native lib file already exists: " << targetLibPath
+                      << "; skipping extraction";
+            continue;
+        }
+
+        uint32_t uncompressedLen;
+        if (!zipFile.get()->getEntryInfo(entry, nullptr, &uncompressedLen, nullptr, nullptr,
+                                         nullptr, nullptr)) {
+            LOG(ERROR) << "Failed to read native lib entry: " << fileName;
+            success = false;
+            break;
+        }
+
+        // Create new lib file without signature info
+        incfs::NewFileParams libFileParams{};
+        libFileParams.size = uncompressedLen;
+        libFileParams.verification.hashAlgorithm = INCFS_HASH_NONE;
+        // Metadata of the new lib file is its relative path
+        IncFsSpan libFileMetadata;
+        libFileMetadata.data = targetLibPath.c_str();
+        libFileMetadata.size = targetLibPath.size();
+        libFileParams.metadata = libFileMetadata;
+        incfs::FileId libFileId = idFromMetadata(targetLibPath);
+        if (auto res = makeFile(storage, targetLibPath, 0777, libFileId, libFileParams)) {
+            LOG(ERROR) << "Failed to make file for: " << targetLibPath << " errno: " << res;
+            success = false;
+            // If one lib file fails to be created, abort others as well
+            break;
+        }
+
+        // Write extracted data to new file
+        std::vector<uint8_t> libData(uncompressedLen);
+        if (!zipFile.get()->uncompressEntry(entry, &libData[0], uncompressedLen)) {
+            LOG(ERROR) << "Failed to extract native lib zip entry: " << fileName;
+            success = false;
+            break;
+        }
+        android::base::unique_fd writeFd(mIncFs->openWrite(ifs->control, libFileId));
+        if (writeFd < 0) {
+            LOG(ERROR) << "Failed to open write fd for: " << targetLibPath << " errno: " << writeFd;
+            success = false;
+            break;
+        }
+        const int numBlocks = uncompressedLen / constants().blockSize + 1;
+        std::vector<IncFsDataBlock> instructions;
+        auto remainingData = std::span(libData);
+        for (int i = 0; i < numBlocks - 1; i++) {
+            auto inst = IncFsDataBlock{
+                    .fileFd = writeFd,
+                    .pageIndex = static_cast<IncFsBlockIndex>(i),
+                    .compression = INCFS_COMPRESSION_KIND_NONE,
+                    .kind = INCFS_BLOCK_KIND_DATA,
+                    .dataSize = static_cast<uint16_t>(constants().blockSize),
+                    .data = reinterpret_cast<const char*>(remainingData.data()),
+            };
+            instructions.push_back(inst);
+            remainingData = remainingData.subspan(constants().blockSize);
+        }
+        // Last block
+        auto inst = IncFsDataBlock{
+                .fileFd = writeFd,
+                .pageIndex = static_cast<IncFsBlockIndex>(numBlocks - 1),
+                .compression = INCFS_COMPRESSION_KIND_NONE,
+                .kind = INCFS_BLOCK_KIND_DATA,
+                .dataSize = static_cast<uint16_t>(remainingData.size()),
+                .data = reinterpret_cast<const char*>(remainingData.data()),
+        };
+        instructions.push_back(inst);
+        size_t res = mIncFs->writeBlocks(instructions);
+        if (res != instructions.size()) {
+            LOG(ERROR) << "Failed to write data into: " << targetLibPath;
+            success = false;
+        }
+        instructions.clear();
+    }
+    zipFile.get()->endIteration(cookie);
+    return success;
+}
+
 binder::Status IncrementalService::IncrementalDataLoaderListener::onStatusChanged(MountId mountId,
                                                                                   int newStatus) {
+    if (externalListener) {
+        // Give an external listener a chance to act before we destroy something.
+        externalListener->onStatusChanged(mountId, newStatus);
+    }
+
     std::unique_lock l(incrementalService.mLock);
     const auto& ifs = incrementalService.getIfsLocked(mountId);
     if (!ifs) {
@@ -1167,6 +1260,12 @@
         case IDataLoaderStatusListener::DATA_LOADER_STOPPED: {
             break;
         }
+        case IDataLoaderStatusListener::DATA_LOADER_IMAGE_READY: {
+            break;
+        }
+        case IDataLoaderStatusListener::DATA_LOADER_IMAGE_NOT_READY: {
+            break;
+        }
         default: {
             LOG(WARNING) << "Unknown data loader status: " << newStatus
                          << " for mount: " << mountId;
diff --git a/services/incremental/IncrementalService.h b/services/incremental/IncrementalService.h
index dec9f64..75d066b 100644
--- a/services/incremental/IncrementalService.h
+++ b/services/incremental/IncrementalService.h
@@ -59,6 +59,8 @@
 using TimePoint = std::chrono::time_point<Clock>;
 using Seconds = std::chrono::seconds;
 
+using DataLoaderStatusListener = ::android::sp<::android::content::pm::IDataLoaderStatusListener>;
+
 class IncrementalService final {
 public:
     explicit IncrementalService(ServiceManagerWrapper&& sm, std::string_view rootDir);
@@ -94,7 +96,9 @@
 
     std::optional<std::future<void>> onSystemReady();
 
-    StorageId createStorage(std::string_view mountPoint, DataLoaderParamsParcel&& dataLoaderParams,
+    StorageId createStorage(std::string_view mountPoint,
+                            DataLoaderParamsParcel&& dataLoaderParams,
+                            const DataLoaderStatusListener& dataLoaderStatusListener,
                             CreateOptions options = CreateOptions::Default);
     StorageId createLinkedStorage(std::string_view mountPoint, StorageId linkedStorage,
                                   CreateOptions options = CreateOptions::Default);
@@ -122,20 +126,21 @@
     }
 
     RawMetadata getMetadata(StorageId storage, FileId node) const;
-    std::string getSignatureData(StorageId storage, FileId node) const;
 
     std::vector<std::string> listFiles(StorageId storage) const;
     bool startLoading(StorageId storage) const;
-
+    bool configureNativeBinaries(StorageId storage, std::string_view apkFullPath,
+                                 std::string_view libDirRelativePath, std::string_view abi);
     class IncrementalDataLoaderListener : public android::content::pm::BnDataLoaderStatusListener {
     public:
-        IncrementalDataLoaderListener(IncrementalService& incrementalService)
-              : incrementalService(incrementalService) {}
+        IncrementalDataLoaderListener(IncrementalService& incrementalService, DataLoaderStatusListener externalListener)
+              : incrementalService(incrementalService), externalListener(externalListener) {}
         // Callbacks interface
         binder::Status onStatusChanged(MountId mount, int newStatus) override;
 
     private:
         IncrementalService& incrementalService;
+        DataLoaderStatusListener externalListener;
     };
 
 private:
@@ -201,7 +206,7 @@
                            std::string&& source, std::string&& target, BindKind kind,
                            std::unique_lock<std::mutex>& mainLock);
 
-    bool prepareDataLoader(IncFsMount& ifs, DataLoaderParamsParcel* params);
+    bool prepareDataLoader(IncFsMount& ifs, DataLoaderParamsParcel* params = nullptr, const DataLoaderStatusListener* externalListener = nullptr);
     BindPathMap::const_iterator findStorageLocked(std::string_view path) const;
     StorageId findStorageId(std::string_view path) const;
 
diff --git a/services/incremental/ServiceWrappers.h b/services/incremental/ServiceWrappers.h
index f0b5672..6421583 100644
--- a/services/incremental/ServiceWrappers.h
+++ b/services/incremental/ServiceWrappers.h
@@ -60,8 +60,6 @@
                                              bool* _aidl_return) const = 0;
     virtual binder::Status startDataLoader(MountId mountId, bool* _aidl_return) const = 0;
     virtual binder::Status destroyDataLoader(MountId mountId) const = 0;
-    virtual binder::Status newFileForDataLoader(MountId mountId, FileId fileid,
-                                                const std::vector<uint8_t>& metadata) const = 0;
     virtual binder::Status showHealthBlockedUI(MountId mountId) const = 0;
 };
 
@@ -128,13 +126,6 @@
     binder::Status destroyDataLoader(MountId mountId) const override {
         return mInterface->destroyDataLoader(mountId);
     }
-    binder::Status newFileForDataLoader(MountId mountId, FileId fileid,
-                                        const std::vector<uint8_t>& metadata) const override {
-        return mInterface->newFileForDataLoader(mountId,
-                                                {(const uint8_t*)fileid.data,
-                                                 (const uint8_t*)fileid.data + sizeof(fileid.data)},
-                                                metadata);
-    }
     binder::Status showHealthBlockedUI(MountId mountId) const override {
         return mInterface->showHealthBlockedUI(mountId);
     }
diff --git a/services/incremental/test/IncrementalServiceTest.cpp b/services/incremental/test/IncrementalServiceTest.cpp
index 9cdc83e..3aa846c 100644
--- a/services/incremental/test/IncrementalServiceTest.cpp
+++ b/services/incremental/test/IncrementalServiceTest.cpp
@@ -266,34 +266,12 @@
     DataLoaderParamsParcel mDataLoaderParcel;
 };
 
-/*
-TEST_F(IncrementalServiceTest, testBootMountExistingImagesSuccess) {
-    TemporaryDir tempDir;
-    setUpExistingMountDir(tempDir.path);
-    mVold->mountIncFsSuccess();
-    mVold->bindMountSuccess();
-    mIncrementalManager->prepareDataLoaderSuccess();
-    ON_CALL(*mIncrementalManager, destroyDataLoader(_)).WillByDefault(Return(binder::Status::ok()));
-
-    EXPECT_CALL(*mVold, mountIncFs(_, _, _, _)).Times(1);
-    EXPECT_CALL(*mIncrementalManager, prepareDataLoader(_, _, _, _, _)).Times(1);
-
-    MockServiceManager serviceManager = MockServiceManager(mVold, mIncrementalManager, mIncFs);
-    std::unique_ptr<IncrementalService> incrementalService =
-            std::make_unique<IncrementalService>(serviceManager, tempDir.path);
-    auto finished = incrementalService->onSystemReady();
-    if (finished) {
-        finished->wait();
-    }
-}
-*/
-
 TEST_F(IncrementalServiceTest, testCreateStorageMountIncFsFails) {
     mVold->mountIncFsFails();
     EXPECT_CALL(*mIncrementalManager, prepareDataLoader(_, _, _, _, _)).Times(0);
     TemporaryDir tempDir;
     int storageId =
-            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel),
+            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel), {},
                                                IncrementalService::CreateOptions::CreateNew);
     ASSERT_LT(storageId, 0);
 }
@@ -303,7 +281,7 @@
     EXPECT_CALL(*mIncrementalManager, prepareDataLoader(_, _, _, _, _)).Times(0);
     TemporaryDir tempDir;
     int storageId =
-            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel),
+            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel), {},
                                                IncrementalService::CreateOptions::CreateNew);
     ASSERT_LT(storageId, 0);
 }
@@ -316,7 +294,7 @@
     EXPECT_CALL(*mVold, unmountIncFs(_));
     TemporaryDir tempDir;
     int storageId =
-            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel),
+            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel), {},
                                                IncrementalService::CreateOptions::CreateNew);
     ASSERT_LT(storageId, 0);
 }
@@ -330,7 +308,7 @@
     EXPECT_CALL(*mVold, unmountIncFs(_));
     TemporaryDir tempDir;
     int storageId =
-            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel),
+            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel), {},
                                                IncrementalService::CreateOptions::CreateNew);
     ASSERT_LT(storageId, 0);
 }
@@ -344,7 +322,7 @@
     EXPECT_CALL(*mVold, unmountIncFs(_)).Times(2);
     TemporaryDir tempDir;
     int storageId =
-            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel),
+            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel), {},
                                                IncrementalService::CreateOptions::CreateNew);
     ASSERT_LT(storageId, 0);
 }
@@ -358,7 +336,7 @@
     EXPECT_CALL(*mVold, unmountIncFs(_)).Times(2);
     TemporaryDir tempDir;
     int storageId =
-            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel),
+            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel), {},
                                                IncrementalService::CreateOptions::CreateNew);
     ASSERT_GE(storageId, 0);
     mIncrementalService->deleteStorage(storageId);
@@ -373,7 +351,7 @@
     EXPECT_CALL(*mVold, unmountIncFs(_)).Times(2);
     TemporaryDir tempDir;
     int storageId =
-            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel),
+            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel), {},
                                                IncrementalService::CreateOptions::CreateNew);
     ASSERT_GE(storageId, 0);
     mIncrementalManager->setDataLoaderStatusNotReady();
@@ -389,7 +367,7 @@
     EXPECT_CALL(*mVold, unmountIncFs(_)).Times(2);
     TemporaryDir tempDir;
     int storageId =
-            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel),
+            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel), {},
                                                IncrementalService::CreateOptions::CreateNew);
     ASSERT_GE(storageId, 0);
     mIncrementalManager->setDataLoaderStatusReady();
@@ -404,13 +382,13 @@
     mIncrementalManager->startDataLoaderSuccess();
     TemporaryDir tempDir;
     int storageId =
-            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel),
+            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel), {},
                                                IncrementalService::CreateOptions::CreateNew);
     std::string dir_path("test");
 
     std::string tempPath(tempDir.path);
     std::replace(tempPath.begin(), tempPath.end(), '/', '_');
-    std::string mount_dir = std::string(mRootDir.path) + "/" + tempPath.substr(1);
+    std::string mount_dir = std::string(mRootDir.path) + "/MT_" + tempPath.substr(1);
     std::string normalized_dir_path = mount_dir + "/mount/st_1_0/" + dir_path;
 
     // Expecting incfs to call makeDir on a path like:
@@ -428,7 +406,7 @@
     mIncrementalManager->startDataLoaderSuccess();
     TemporaryDir tempDir;
     int storageId =
-            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel),
+            mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel), {},
                                                IncrementalService::CreateOptions::CreateNew);
     auto first = "first"sv;
     auto second = "second"sv;
@@ -436,7 +414,7 @@
 
     std::string tempPath(tempDir.path);
     std::replace(tempPath.begin(), tempPath.end(), '/', '_');
-    std::string mount_dir = std::string(mRootDir.path) + "/" + tempPath.substr(1);
+    std::string mount_dir = std::string(mRootDir.path) + "/MT_" + tempPath.substr(1);
 
     InSequence seq;
     auto parent_path = std::string(first) + "/" + std::string(second);
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 036335c..569986c 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -41,6 +41,7 @@
 import android.content.res.Resources.Theme;
 import android.database.sqlite.SQLiteCompatibilityWalFlags;
 import android.database.sqlite.SQLiteGlobal;
+import android.graphics.GraphicsStatsService;
 import android.hardware.display.DisplayManagerInternal;
 import android.net.ConnectivityModuleConnector;
 import android.net.ITetheringConnector;
@@ -161,6 +162,7 @@
 import com.android.server.trust.TrustManagerService;
 import com.android.server.tv.TvInputManagerService;
 import com.android.server.tv.TvRemoteService;
+import com.android.server.tv.tunerresourcemanager.TunerResourceManagerService;
 import com.android.server.twilight.TwilightService;
 import com.android.server.uri.UriGrantsManagerService;
 import com.android.server.usage.UsageStatsService;
@@ -1739,7 +1741,7 @@
             mSystemServiceManager.startService(SensorNotificationService.class);
             t.traceEnd();
 
-            if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_CONTEXTHUB)) {
+            if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_CONTEXT_HUB)) {
                 t.traceBegin("StartContextHubSystemService");
                 mSystemServiceManager.startService(ContextHubSystemService.class);
                 t.traceEnd();
@@ -1853,6 +1855,8 @@
                     || mPackageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK)) {
                 t.traceBegin("StartTvInputManager");
                 mSystemServiceManager.startService(TvInputManagerService.class);
+                t.traceBegin("StartTunerResourceManager");
+                mSystemServiceManager.startService(TunerResourceManagerService.class);
                 t.traceEnd();
             }
 
diff --git a/services/people/java/com/android/server/people/PeopleService.java b/services/people/java/com/android/server/people/PeopleService.java
index 2d18a29..2499614 100644
--- a/services/people/java/com/android/server/people/PeopleService.java
+++ b/services/people/java/com/android/server/people/PeopleService.java
@@ -17,6 +17,7 @@
 package com.android.server.people;
 
 import android.annotation.NonNull;
+import android.annotation.UserIdInt;
 import android.app.prediction.AppPredictionContext;
 import android.app.prediction.AppPredictionSessionId;
 import android.app.prediction.AppTarget;
@@ -24,6 +25,7 @@
 import android.app.prediction.IPredictionCallback;
 import android.content.Context;
 import android.content.pm.ParceledListSlice;
+import android.os.CancellationSignal;
 import android.os.RemoteException;
 import android.util.ArrayMap;
 import android.util.Slog;
@@ -86,7 +88,7 @@
         @Override
         public void onCreatePredictionSession(AppPredictionContext context,
                 AppPredictionSessionId sessionId) {
-            mSessions.put(sessionId, new SessionInfo(context, mDataManager));
+            mSessions.put(sessionId, new SessionInfo(context, mDataManager, sessionId.getUserId()));
         }
 
         @Override
@@ -138,6 +140,21 @@
             });
         }
 
+        @Override
+        public void pruneDataForUser(@UserIdInt int userId, @NonNull CancellationSignal signal) {
+            mDataManager.pruneDataForUser(userId, signal);
+        }
+
+        @Override
+        public byte[] backupConversationInfos(@UserIdInt int userId) {
+            return new byte[0];
+        }
+
+        @Override
+        public void restoreConversationInfos(@UserIdInt int userId, @NonNull String key,
+                @NonNull byte[] payload) {
+        }
+
         @VisibleForTesting
         SessionInfo getSessionInfo(AppPredictionSessionId sessionId) {
             return mSessions.get(sessionId);
@@ -160,14 +177,5 @@
                 Slog.e(TAG, "Failed to calling callback" + e);
             }
         }
-
-        @Override
-        public byte[] backupConversationInfos(int userId) {
-            return new byte[0];
-        }
-
-        @Override
-        public void restoreConversationInfos(int userId, String key, byte[] payload) {
-        }
     }
 }
diff --git a/services/people/java/com/android/server/people/SessionInfo.java b/services/people/java/com/android/server/people/SessionInfo.java
index eaa0781..28612f1 100644
--- a/services/people/java/com/android/server/people/SessionInfo.java
+++ b/services/people/java/com/android/server/people/SessionInfo.java
@@ -16,6 +16,7 @@
 
 package com.android.server.people;
 
+import android.annotation.UserIdInt;
 import android.app.prediction.AppPredictionContext;
 import android.app.prediction.AppTarget;
 import android.app.prediction.IPredictionCallback;
@@ -38,9 +39,10 @@
     private final RemoteCallbackList<IPredictionCallback> mCallbacks =
             new RemoteCallbackList<>();
 
-    SessionInfo(AppPredictionContext predictionContext, DataManager dataManager) {
+    SessionInfo(AppPredictionContext predictionContext, DataManager dataManager,
+            @UserIdInt int callingUserId) {
         mAppTargetPredictor = AppTargetPredictor.create(predictionContext,
-                this::updatePredictions, dataManager);
+                this::updatePredictions, dataManager, callingUserId);
     }
 
     void addCallback(IPredictionCallback callback) {
diff --git a/services/people/java/com/android/server/people/data/AbstractProtoDiskReadWriter.java b/services/people/java/com/android/server/people/data/AbstractProtoDiskReadWriter.java
new file mode 100644
index 0000000..203e980
--- /dev/null
+++ b/services/people/java/com/android/server/people/data/AbstractProtoDiskReadWriter.java
@@ -0,0 +1,264 @@
+/*
+ * 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.people.data;
+
+import android.annotation.MainThread;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.WorkerThread;
+import android.text.format.DateUtils;
+import android.util.ArrayMap;
+import android.util.AtomicFile;
+import android.util.Slog;
+import android.util.proto.ProtoInputStream;
+import android.util.proto.ProtoOutputStream;
+
+import com.android.internal.annotations.GuardedBy;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Base class for reading and writing protobufs on disk from a root directory. Callers should
+ * ensure that the root directory is unlocked before doing I/O operations using this class.
+ *
+ * @param <T> is the data class representation of a protobuf.
+ */
+abstract class AbstractProtoDiskReadWriter<T> {
+
+    private static final String TAG = AbstractProtoDiskReadWriter.class.getSimpleName();
+    private static final long SHUTDOWN_DISK_WRITE_TIMEOUT = 5L * DateUtils.SECOND_IN_MILLIS;
+
+    private final File mRootDir;
+    private final ScheduledExecutorService mScheduledExecutorService;
+    private final long mWriteDelayMs;
+
+    @GuardedBy("this")
+    private ScheduledFuture<?> mScheduledFuture;
+
+    @GuardedBy("this")
+    private Map<String, T> mScheduledFileDataMap = new ArrayMap<>();
+
+    /**
+     * Child class shall provide a {@link ProtoStreamWriter} to facilitate the writing of data as a
+     * protobuf on disk.
+     */
+    abstract ProtoStreamWriter<T> protoStreamWriter();
+
+    /**
+     * Child class shall provide a {@link ProtoStreamReader} to facilitate the reading of protobuf
+     * data on disk.
+     */
+    abstract ProtoStreamReader<T> protoStreamReader();
+
+    AbstractProtoDiskReadWriter(@NonNull File rootDir, long writeDelayMs,
+            @NonNull ScheduledExecutorService scheduledExecutorService) {
+        mRootDir = rootDir;
+        mWriteDelayMs = writeDelayMs;
+        mScheduledExecutorService = scheduledExecutorService;
+    }
+
+    @WorkerThread
+    void delete(@NonNull String fileName) {
+        final File file = getFile(fileName);
+        if (!file.exists()) {
+            return;
+        }
+        if (!file.delete()) {
+            Slog.e(TAG, "Failed to delete file: " + file.getPath());
+        }
+    }
+
+    @WorkerThread
+    void writeTo(@NonNull String fileName, @NonNull T data) {
+        final File file = getFile(fileName);
+        final AtomicFile atomicFile = new AtomicFile(file);
+
+        FileOutputStream fileOutputStream = null;
+        try {
+            fileOutputStream = atomicFile.startWrite();
+        } catch (IOException e) {
+            Slog.e(TAG, "Failed to write to protobuf file.", e);
+            return;
+        }
+
+        try {
+            final ProtoOutputStream protoOutputStream = new ProtoOutputStream(fileOutputStream);
+            protoStreamWriter().write(protoOutputStream, data);
+            protoOutputStream.flush();
+            atomicFile.finishWrite(fileOutputStream);
+            fileOutputStream = null;
+        } finally {
+            // When fileInputStream is null (successful write), this will no-op.
+            atomicFile.failWrite(fileOutputStream);
+        }
+    }
+
+    @WorkerThread
+    @Nullable
+    T read(@NonNull String fileName) {
+        File[] files = mRootDir.listFiles(
+                pathname -> pathname.isFile() && pathname.getName().equals(fileName));
+        if (files == null || files.length == 0) {
+            return null;
+        } else if (files.length > 1) {
+            // This can't possibly happen, but sanity check.
+            Slog.w(TAG, "Found multiple files with the same name: " + Arrays.toString(files));
+        }
+        return parseFile(files[0]);
+    }
+
+    /**
+     * Reads all files in directory and returns a map with file names as keys and parsed file
+     * contents as values.
+     */
+    @WorkerThread
+    @Nullable
+    Map<String, T> readAll() {
+        File[] files = mRootDir.listFiles(File::isFile);
+        if (files == null) {
+            return null;
+        }
+
+        Map<String, T> results = new ArrayMap<>();
+        for (File file : files) {
+            T result = parseFile(file);
+            if (result != null) {
+                results.put(file.getName(), result);
+            }
+        }
+        return results;
+    }
+
+    /**
+     * Schedules the specified data to be flushed to a file in the future. Subsequent
+     * calls for the same file before the flush occurs will replace the previous data but will not
+     * reset when the flush will occur. All unique files will be flushed at the same time.
+     */
+    @MainThread
+    synchronized void scheduleSave(@NonNull String fileName, @NonNull T data) {
+        mScheduledFileDataMap.put(fileName, data);
+
+        if (mScheduledExecutorService.isShutdown()) {
+            Slog.e(TAG, "Worker is shutdown, failed to schedule data saving.");
+            return;
+        }
+
+        // Skip scheduling another flush when one is pending.
+        if (mScheduledFuture != null) {
+            return;
+        }
+
+        mScheduledFuture = mScheduledExecutorService.schedule(this::flushScheduledData,
+                mWriteDelayMs, TimeUnit.MILLISECONDS);
+    }
+
+    /**
+     * Saves specified data immediately on a background thread, and blocks until its completed. This
+     * is useful for when device is powering off.
+     */
+    @MainThread
+    synchronized void saveImmediately(@NonNull String fileName, @NonNull T data) {
+        if (mScheduledExecutorService.isShutdown()) {
+            return;
+        }
+        // Cancel existing future.
+        if (mScheduledFuture != null) {
+
+            // We shouldn't need to interrupt as this method and threaded task
+            // #flushScheduledData are both synchronized.
+            mScheduledFuture.cancel(true);
+        }
+
+        mScheduledFileDataMap.put(fileName, data);
+        // Submit flush and blocks until it completes. Blocking will prevent the device from
+        // shutting down before flushing completes.
+        Future<?> future = mScheduledExecutorService.submit(this::flushScheduledData);
+        try {
+            future.get(SHUTDOWN_DISK_WRITE_TIMEOUT, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            Slog.e(TAG, "Failed to save data immediately.", e);
+        }
+    }
+
+    @WorkerThread
+    private synchronized void flushScheduledData() {
+        if (mScheduledFileDataMap.isEmpty()) {
+            mScheduledFuture = null;
+            return;
+        }
+        for (String fileName : mScheduledFileDataMap.keySet()) {
+            T data = mScheduledFileDataMap.remove(fileName);
+            writeTo(fileName, data);
+        }
+        mScheduledFuture = null;
+    }
+
+    @WorkerThread
+    @Nullable
+    private T parseFile(@NonNull File file) {
+        final AtomicFile atomicFile = new AtomicFile(file);
+        try (FileInputStream fileInputStream = atomicFile.openRead()) {
+            final ProtoInputStream protoInputStream = new ProtoInputStream(fileInputStream);
+            return protoStreamReader().read(protoInputStream);
+        } catch (IOException e) {
+            Slog.e(TAG, "Failed to parse protobuf file.", e);
+        }
+        return null;
+    }
+
+    @NonNull
+    private File getFile(String fileName) {
+        return new File(mRootDir, fileName);
+    }
+
+    /**
+     * {@code ProtoStreamWriter} writes {@code T} fields to {@link ProtoOutputStream}.
+     *
+     * @param <T> is the data class representation of a protobuf.
+     */
+    interface ProtoStreamWriter<T> {
+
+        /**
+         * Writes {@code T} to {@link ProtoOutputStream}.
+         */
+        void write(@NonNull ProtoOutputStream protoOutputStream, @NonNull T data);
+    }
+
+    /**
+     * {@code ProtoStreamReader} reads {@link ProtoInputStream} and translate it to {@code T}.
+     *
+     * @param <T> is the data class representation of a protobuf.
+     */
+    interface ProtoStreamReader<T> {
+        /**
+         * Reads {@link ProtoInputStream} and translates it to {@code T}.
+         */
+        @Nullable
+        T read(@NonNull ProtoInputStream protoInputStream);
+    }
+}
diff --git a/services/people/java/com/android/server/people/data/CallLogQueryHelper.java b/services/people/java/com/android/server/people/data/CallLogQueryHelper.java
index d825b6b..45e0aac 100644
--- a/services/people/java/com/android/server/people/data/CallLogQueryHelper.java
+++ b/services/people/java/com/android/server/people/data/CallLogQueryHelper.java
@@ -107,7 +107,7 @@
         }
         @Event.EventType int eventType  = CALL_TYPE_TO_EVENT_TYPE.get(callType);
         Event event = new Event.Builder(date, eventType)
-                .setCallDetails(new Event.CallDetails(durationSeconds))
+                .setDurationSeconds((int) durationSeconds)
                 .build();
         mEventConsumer.accept(phoneNumber, event);
         return true;
diff --git a/services/people/java/com/android/server/people/data/ConversationInfo.java b/services/people/java/com/android/server/people/data/ConversationInfo.java
index bb97533..859cdf2 100644
--- a/services/people/java/com/android/server/people/data/ConversationInfo.java
+++ b/services/people/java/com/android/server/people/data/ConversationInfo.java
@@ -20,12 +20,18 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.LocusId;
+import android.content.LocusIdProto;
 import android.content.pm.ShortcutInfo;
 import android.content.pm.ShortcutInfo.ShortcutFlags;
 import android.net.Uri;
+import android.util.Slog;
+import android.util.proto.ProtoInputStream;
+import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.util.Preconditions;
+import com.android.server.people.ConversationInfoProto;
 
+import java.io.IOException;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.Objects;
@@ -35,7 +41,9 @@
  */
 public class ConversationInfo {
 
-    private static final int FLAG_VIP = 1;
+    private static final String TAG = ConversationInfo.class.getSimpleName();
+
+    private static final int FLAG_IMPORTANT = 1;
 
     private static final int FLAG_NOTIFICATION_SILENCED = 1 << 1;
 
@@ -50,7 +58,7 @@
     private static final int FLAG_DEMOTED = 1 << 6;
 
     @IntDef(flag = true, prefix = {"FLAG_"}, value = {
-            FLAG_VIP,
+            FLAG_IMPORTANT,
             FLAG_NOTIFICATION_SILENCED,
             FLAG_BUBBLED,
             FLAG_PERSON_IMPORTANT,
@@ -129,9 +137,14 @@
         return hasShortcutFlags(ShortcutInfo.FLAG_LONG_LIVED);
     }
 
-    /** Whether this conversation is marked as VIP by the user. */
-    public boolean isVip() {
-        return hasConversationFlags(FLAG_VIP);
+    /** Whether the shortcut for this conversation is cached in Shortcut Service. */
+    public boolean isShortcutCached() {
+        return hasShortcutFlags(ShortcutInfo.FLAG_CACHED);
+    }
+
+    /** Whether this conversation is marked as important by the user. */
+    public boolean isImportant() {
+        return hasConversationFlags(FLAG_IMPORTANT);
     }
 
     /** Whether the notifications for this conversation should be silenced. */
@@ -205,11 +218,14 @@
         if (isShortcutLongLived()) {
             sb.append("Liv");
         }
+        if (isShortcutCached()) {
+            sb.append("Cac");
+        }
         sb.append("]");
         sb.append(", conversationFlags=0x").append(Integer.toHexString(mConversationFlags));
         sb.append(" [");
-        if (isVip()) {
-            sb.append("Vip");
+        if (isImportant()) {
+            sb.append("Imp");
         }
         if (isNotificationSilenced()) {
             sb.append("Sil");
@@ -221,7 +237,7 @@
             sb.append("Dem");
         }
         if (isPersonImportant()) {
-            sb.append("Imp");
+            sb.append("PIm");
         }
         if (isPersonBot()) {
             sb.append("Bot");
@@ -241,6 +257,72 @@
         return (mConversationFlags & flags) == flags;
     }
 
+    /** Writes field members to {@link ProtoOutputStream}. */
+    void writeToProto(@NonNull ProtoOutputStream protoOutputStream) {
+        protoOutputStream.write(ConversationInfoProto.SHORTCUT_ID, mShortcutId);
+        if (mLocusId != null) {
+            long locusIdToken = protoOutputStream.start(ConversationInfoProto.LOCUS_ID_PROTO);
+            protoOutputStream.write(LocusIdProto.LOCUS_ID, mLocusId.getId());
+            protoOutputStream.end(locusIdToken);
+        }
+        if (mContactUri != null) {
+            protoOutputStream.write(ConversationInfoProto.CONTACT_URI, mContactUri.toString());
+        }
+        if (mNotificationChannelId != null) {
+            protoOutputStream.write(ConversationInfoProto.NOTIFICATION_CHANNEL_ID,
+                    mNotificationChannelId);
+        }
+        protoOutputStream.write(ConversationInfoProto.SHORTCUT_FLAGS, mShortcutFlags);
+        protoOutputStream.write(ConversationInfoProto.CONVERSATION_FLAGS, mConversationFlags);
+    }
+
+    /** Reads from {@link ProtoInputStream} and constructs a {@link ConversationInfo}. */
+    @NonNull
+    static ConversationInfo readFromProto(@NonNull ProtoInputStream protoInputStream)
+            throws IOException {
+        ConversationInfo.Builder builder = new ConversationInfo.Builder();
+        while (protoInputStream.nextField() != ProtoInputStream.NO_MORE_FIELDS) {
+            switch (protoInputStream.getFieldNumber()) {
+                case (int) ConversationInfoProto.SHORTCUT_ID:
+                    builder.setShortcutId(
+                            protoInputStream.readString(ConversationInfoProto.SHORTCUT_ID));
+                    break;
+                case (int) ConversationInfoProto.LOCUS_ID_PROTO:
+                    long locusIdToken = protoInputStream.start(
+                            ConversationInfoProto.LOCUS_ID_PROTO);
+                    while (protoInputStream.nextField()
+                            != ProtoInputStream.NO_MORE_FIELDS) {
+                        if (protoInputStream.getFieldNumber() == (int) LocusIdProto.LOCUS_ID) {
+                            builder.setLocusId(new LocusId(
+                                    protoInputStream.readString(LocusIdProto.LOCUS_ID)));
+                        }
+                    }
+                    protoInputStream.end(locusIdToken);
+                    break;
+                case (int) ConversationInfoProto.CONTACT_URI:
+                    builder.setContactUri(Uri.parse(protoInputStream.readString(
+                            ConversationInfoProto.CONTACT_URI)));
+                    break;
+                case (int) ConversationInfoProto.NOTIFICATION_CHANNEL_ID:
+                    builder.setNotificationChannelId(protoInputStream.readString(
+                            ConversationInfoProto.NOTIFICATION_CHANNEL_ID));
+                    break;
+                case (int) ConversationInfoProto.SHORTCUT_FLAGS:
+                    builder.setShortcutFlags(protoInputStream.readInt(
+                            ConversationInfoProto.SHORTCUT_FLAGS));
+                    break;
+                case (int) ConversationInfoProto.CONVERSATION_FLAGS:
+                    builder.setConversationFlags(protoInputStream.readInt(
+                            ConversationInfoProto.CONVERSATION_FLAGS));
+                    break;
+                default:
+                    Slog.w(TAG, "Could not read undefined field: "
+                            + protoInputStream.getFieldNumber());
+            }
+        }
+        return builder.build();
+    }
+
     /**
      * Builder class for {@link ConversationInfo} objects.
      */
@@ -318,8 +400,8 @@
             return this;
         }
 
-        Builder setVip(boolean value) {
-            return setConversationFlag(FLAG_VIP, value);
+        Builder setImportant(boolean value) {
+            return setConversationFlag(FLAG_IMPORTANT, value);
         }
 
         Builder setNotificationSilenced(boolean value) {
diff --git a/services/people/java/com/android/server/people/data/ConversationStore.java b/services/people/java/com/android/server/people/data/ConversationStore.java
index f17e1b9..3afb209 100644
--- a/services/people/java/com/android/server/people/data/ConversationStore.java
+++ b/services/people/java/com/android/server/people/data/ConversationStore.java
@@ -16,53 +16,128 @@
 
 package com.android.server.people.data;
 
+import android.annotation.MainThread;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.WorkerThread;
 import android.content.LocusId;
 import android.net.Uri;
+import android.text.TextUtils;
+import android.text.format.DateUtils;
 import android.util.ArrayMap;
+import android.util.Slog;
+import android.util.proto.ProtoInputStream;
 
+import com.android.internal.annotations.GuardedBy;
+import com.android.server.people.ConversationInfosProto;
+
+import com.google.android.collect.Lists;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ScheduledExecutorService;
 import java.util.function.Consumer;
 
-/** The store that stores and accesses the conversations data for a package. */
+/**
+ * The store that stores and accesses the conversations data for a package.
+ */
 class ConversationStore {
 
+    private static final String TAG = ConversationStore.class.getSimpleName();
+
+    private static final String CONVERSATIONS_FILE_NAME = "conversations";
+
+    private static final long DISK_WRITE_DELAY = 2L * DateUtils.MINUTE_IN_MILLIS;
+
     // Shortcut ID -> Conversation Info
+    @GuardedBy("this")
     private final Map<String, ConversationInfo> mConversationInfoMap = new ArrayMap<>();
 
     // Locus ID -> Shortcut ID
+    @GuardedBy("this")
     private final Map<LocusId, String> mLocusIdToShortcutIdMap = new ArrayMap<>();
 
     // Contact URI -> Shortcut ID
+    @GuardedBy("this")
     private final Map<Uri, String> mContactUriToShortcutIdMap = new ArrayMap<>();
 
     // Phone Number -> Shortcut ID
+    @GuardedBy("this")
     private final Map<String, String> mPhoneNumberToShortcutIdMap = new ArrayMap<>();
 
-    void addOrUpdate(@NonNull ConversationInfo conversationInfo) {
-        mConversationInfoMap.put(conversationInfo.getShortcutId(), conversationInfo);
+    // Notification Channel ID -> Shortcut ID
+    @GuardedBy("this")
+    private final Map<String, String> mNotifChannelIdToShortcutIdMap = new ArrayMap<>();
 
-        LocusId locusId = conversationInfo.getLocusId();
-        if (locusId != null) {
-            mLocusIdToShortcutIdMap.put(locusId, conversationInfo.getShortcutId());
-        }
+    private final ScheduledExecutorService mScheduledExecutorService;
+    private final File mPackageDir;
+    private final ContactsQueryHelper mHelper;
 
-        Uri contactUri = conversationInfo.getContactUri();
-        if (contactUri != null) {
-            mContactUriToShortcutIdMap.put(contactUri, conversationInfo.getShortcutId());
-        }
+    private ConversationInfosProtoDiskReadWriter mConversationInfosProtoDiskReadWriter;
 
-        String phoneNumber = conversationInfo.getContactPhoneNumber();
-        if (phoneNumber != null) {
-            mPhoneNumberToShortcutIdMap.put(phoneNumber, conversationInfo.getShortcutId());
+    ConversationStore(@NonNull File packageDir,
+            @NonNull ScheduledExecutorService scheduledExecutorService,
+            @NonNull ContactsQueryHelper helper) {
+        mScheduledExecutorService = scheduledExecutorService;
+        mPackageDir = packageDir;
+        mHelper = helper;
+    }
+
+    /**
+     * Loads conversations from disk to memory in a background thread. This should be called
+     * after the device powers on and the user has been unlocked.
+     */
+    @MainThread
+    void loadConversationsFromDisk() {
+        mScheduledExecutorService.submit(() -> {
+            synchronized (this) {
+                ConversationInfosProtoDiskReadWriter conversationInfosProtoDiskReadWriter =
+                        getConversationInfosProtoDiskReadWriter();
+                if (conversationInfosProtoDiskReadWriter == null) {
+                    return;
+                }
+                List<ConversationInfo> conversationsOnDisk =
+                        conversationInfosProtoDiskReadWriter.read(CONVERSATIONS_FILE_NAME);
+                if (conversationsOnDisk == null) {
+                    return;
+                }
+                for (ConversationInfo conversationInfo : conversationsOnDisk) {
+                    conversationInfo = restoreConversationPhoneNumber(conversationInfo);
+                    updateConversationsInMemory(conversationInfo);
+                }
+            }
+        });
+    }
+
+    /**
+     * Immediately flushes current conversations to disk. This should be called when device is
+     * powering off.
+     */
+    @MainThread
+    synchronized void saveConversationsToDisk() {
+        ConversationInfosProtoDiskReadWriter conversationInfosProtoDiskReadWriter =
+                getConversationInfosProtoDiskReadWriter();
+        if (conversationInfosProtoDiskReadWriter != null) {
+            conversationInfosProtoDiskReadWriter.saveConversationsImmediately(
+                    new ArrayList<>(mConversationInfoMap.values()));
         }
     }
 
-    void deleteConversation(@NonNull String shortcutId) {
+    @MainThread
+    synchronized void addOrUpdate(@NonNull ConversationInfo conversationInfo) {
+        updateConversationsInMemory(conversationInfo);
+        scheduleUpdateConversationsOnDisk();
+    }
+
+    @MainThread
+    @Nullable
+    synchronized ConversationInfo deleteConversation(@NonNull String shortcutId) {
         ConversationInfo conversationInfo = mConversationInfoMap.remove(shortcutId);
         if (conversationInfo == null) {
-            return;
+            return null;
         }
 
         LocusId locusId = conversationInfo.getLocusId();
@@ -79,31 +154,179 @@
         if (phoneNumber != null) {
             mPhoneNumberToShortcutIdMap.remove(phoneNumber);
         }
+
+        String notifChannelId = conversationInfo.getNotificationChannelId();
+        if (notifChannelId != null) {
+            mNotifChannelIdToShortcutIdMap.remove(notifChannelId);
+        }
+        scheduleUpdateConversationsOnDisk();
+        return conversationInfo;
     }
 
-    void forAllConversations(@NonNull Consumer<ConversationInfo> consumer) {
+    synchronized void forAllConversations(@NonNull Consumer<ConversationInfo> consumer) {
         for (ConversationInfo ci : mConversationInfoMap.values()) {
             consumer.accept(ci);
         }
     }
 
     @Nullable
-    ConversationInfo getConversation(@Nullable String shortcutId) {
+    synchronized ConversationInfo getConversation(@Nullable String shortcutId) {
         return shortcutId != null ? mConversationInfoMap.get(shortcutId) : null;
     }
 
     @Nullable
-    ConversationInfo getConversationByLocusId(@NonNull LocusId locusId) {
+    synchronized ConversationInfo getConversationByLocusId(@NonNull LocusId locusId) {
         return getConversation(mLocusIdToShortcutIdMap.get(locusId));
     }
 
     @Nullable
-    ConversationInfo getConversationByContactUri(@NonNull Uri contactUri) {
+    synchronized ConversationInfo getConversationByContactUri(@NonNull Uri contactUri) {
         return getConversation(mContactUriToShortcutIdMap.get(contactUri));
     }
 
     @Nullable
-    ConversationInfo getConversationByPhoneNumber(@NonNull String phoneNumber) {
+    synchronized ConversationInfo getConversationByPhoneNumber(@NonNull String phoneNumber) {
         return getConversation(mPhoneNumberToShortcutIdMap.get(phoneNumber));
     }
+
+    @Nullable
+    ConversationInfo getConversationByNotificationChannelId(@NonNull String notifChannelId) {
+        return getConversation(mNotifChannelIdToShortcutIdMap.get(notifChannelId));
+    }
+
+    @MainThread
+    private synchronized void updateConversationsInMemory(
+            @NonNull ConversationInfo conversationInfo) {
+        mConversationInfoMap.put(conversationInfo.getShortcutId(), conversationInfo);
+
+        LocusId locusId = conversationInfo.getLocusId();
+        if (locusId != null) {
+            mLocusIdToShortcutIdMap.put(locusId, conversationInfo.getShortcutId());
+        }
+
+        Uri contactUri = conversationInfo.getContactUri();
+        if (contactUri != null) {
+            mContactUriToShortcutIdMap.put(contactUri, conversationInfo.getShortcutId());
+        }
+
+        String phoneNumber = conversationInfo.getContactPhoneNumber();
+        if (phoneNumber != null) {
+            mPhoneNumberToShortcutIdMap.put(phoneNumber, conversationInfo.getShortcutId());
+        }
+
+        String notifChannelId = conversationInfo.getNotificationChannelId();
+        if (notifChannelId != null) {
+            mNotifChannelIdToShortcutIdMap.put(notifChannelId, conversationInfo.getShortcutId());
+        }
+    }
+
+    /** Schedules a dump of all conversations onto disk, overwriting existing values. */
+    @MainThread
+    private synchronized void scheduleUpdateConversationsOnDisk() {
+        ConversationInfosProtoDiskReadWriter conversationInfosProtoDiskReadWriter =
+                getConversationInfosProtoDiskReadWriter();
+        if (conversationInfosProtoDiskReadWriter != null) {
+            conversationInfosProtoDiskReadWriter.scheduleConversationsSave(
+                    new ArrayList<>(mConversationInfoMap.values()));
+        }
+    }
+
+    @Nullable
+    private ConversationInfosProtoDiskReadWriter getConversationInfosProtoDiskReadWriter() {
+        if (!mPackageDir.exists()) {
+            Slog.e(TAG, "Package data directory does not exist: " + mPackageDir.getAbsolutePath());
+            return null;
+        }
+        if (mConversationInfosProtoDiskReadWriter == null) {
+            mConversationInfosProtoDiskReadWriter = new ConversationInfosProtoDiskReadWriter(
+                    mPackageDir, CONVERSATIONS_FILE_NAME, DISK_WRITE_DELAY,
+                    mScheduledExecutorService);
+        }
+        return mConversationInfosProtoDiskReadWriter;
+    }
+
+    /**
+     * Conversation's phone number is not saved on disk, so it has to be fetched.
+     */
+    @WorkerThread
+    private ConversationInfo restoreConversationPhoneNumber(
+            @NonNull ConversationInfo conversationInfo) {
+        if (conversationInfo.getContactUri() != null) {
+            if (mHelper.query(conversationInfo.getContactUri().toString())) {
+                String phoneNumber = mHelper.getPhoneNumber();
+                if (!TextUtils.isEmpty(phoneNumber)) {
+                    conversationInfo = new ConversationInfo.Builder(
+                            conversationInfo).setContactPhoneNumber(
+                            phoneNumber).build();
+                }
+            }
+        }
+        return conversationInfo;
+    }
+
+    /** Reads and writes {@link ConversationInfo} on disk. */
+    static class ConversationInfosProtoDiskReadWriter extends
+            AbstractProtoDiskReadWriter<List<ConversationInfo>> {
+
+        private final String mConversationInfoFileName;
+
+        ConversationInfosProtoDiskReadWriter(@NonNull File baseDir,
+                @NonNull String conversationInfoFileName,
+                long writeDelayMs, @NonNull ScheduledExecutorService scheduledExecutorService) {
+            super(baseDir, writeDelayMs, scheduledExecutorService);
+            mConversationInfoFileName = conversationInfoFileName;
+        }
+
+        @Override
+        ProtoStreamWriter<List<ConversationInfo>> protoStreamWriter() {
+            return (protoOutputStream, data) -> {
+                for (ConversationInfo conversationInfo : data) {
+                    long token = protoOutputStream.start(ConversationInfosProto.CONVERSATION_INFOS);
+                    conversationInfo.writeToProto(protoOutputStream);
+                    protoOutputStream.end(token);
+                }
+            };
+        }
+
+        @Override
+        ProtoStreamReader<List<ConversationInfo>> protoStreamReader() {
+            return protoInputStream -> {
+                List<ConversationInfo> results = Lists.newArrayList();
+                try {
+                    while (protoInputStream.nextField() != ProtoInputStream.NO_MORE_FIELDS) {
+                        if (protoInputStream.getFieldNumber()
+                                != (int) ConversationInfosProto.CONVERSATION_INFOS) {
+                            continue;
+                        }
+                        long token = protoInputStream.start(
+                                ConversationInfosProto.CONVERSATION_INFOS);
+                        ConversationInfo conversationInfo = ConversationInfo.readFromProto(
+                                protoInputStream);
+                        protoInputStream.end(token);
+                        results.add(conversationInfo);
+                    }
+                } catch (IOException e) {
+                    Slog.e(TAG, "Failed to read protobuf input stream.", e);
+                }
+                return results;
+            };
+        }
+
+        /**
+         * Schedules a flush of the specified conversations to disk.
+         */
+        @MainThread
+        void scheduleConversationsSave(@NonNull List<ConversationInfo> conversationInfos) {
+            scheduleSave(mConversationInfoFileName, conversationInfos);
+        }
+
+        /**
+         * Saves the specified conversations immediately. This should be used when device is
+         * powering off.
+         */
+        @MainThread
+        void saveConversationsImmediately(@NonNull List<ConversationInfo> conversationInfos) {
+            saveImmediately(mConversationInfoFileName, conversationInfos);
+        }
+    }
 }
diff --git a/services/people/java/com/android/server/people/data/DataMaintenanceService.java b/services/people/java/com/android/server/people/data/DataMaintenanceService.java
new file mode 100644
index 0000000..58f0654
--- /dev/null
+++ b/services/people/java/com/android/server/people/data/DataMaintenanceService.java
@@ -0,0 +1,92 @@
+/*
+ * 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.people.data;
+
+import android.annotation.UserIdInt;
+import android.app.job.JobInfo;
+import android.app.job.JobParameters;
+import android.app.job.JobScheduler;
+import android.app.job.JobService;
+import android.content.ComponentName;
+import android.content.Context;
+import android.os.CancellationSignal;
+
+import com.android.server.LocalServices;
+import com.android.server.people.PeopleServiceInternal;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * This service runs periodically to ensure the data consistency and the retention policy for a
+ * specific user's data.
+ */
+public class DataMaintenanceService extends JobService {
+
+    private static final long JOB_RUN_INTERVAL = TimeUnit.HOURS.toMillis(24);
+
+    /** This job ID must be unique within the system server. */
+    private static final int BASE_JOB_ID = 0xC315BD7;  // 204561367
+
+    static void scheduleJob(Context context, @UserIdInt int userId) {
+        int jobId = getJobId(userId);
+        JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
+        if (jobScheduler.getPendingJob(jobId) == null) {
+            ComponentName component = new ComponentName(context, DataMaintenanceService.class);
+            JobInfo newJob = new JobInfo.Builder(jobId, component)
+                    .setRequiresDeviceIdle(true)
+                    .setPeriodic(JOB_RUN_INTERVAL)
+                    .build();
+            jobScheduler.schedule(newJob);
+        }
+    }
+
+    static void cancelJob(Context context, @UserIdInt int userId) {
+        JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
+        jobScheduler.cancel(getJobId(userId));
+    }
+
+    private CancellationSignal mSignal;
+
+    @Override
+    public boolean onStartJob(JobParameters params) {
+        int userId = getUserId(params.getJobId());
+        mSignal = new CancellationSignal();
+        new Thread(() -> {
+            PeopleServiceInternal peopleServiceInternal =
+                    LocalServices.getService(PeopleServiceInternal.class);
+            peopleServiceInternal.pruneDataForUser(userId, mSignal);
+            jobFinished(params, mSignal.isCanceled());
+        }).start();
+        return true;
+    }
+
+    @Override
+    public boolean onStopJob(JobParameters params) {
+        if (mSignal != null) {
+            mSignal.cancel();
+        }
+        return false;
+    }
+
+    private static int getJobId(@UserIdInt int userId) {
+        return BASE_JOB_ID + userId;
+    }
+
+    private static @UserIdInt int getUserId(int jobId) {
+        return jobId - BASE_JOB_ID;
+    }
+}
diff --git a/services/people/java/com/android/server/people/data/DataManager.java b/services/people/java/com/android/server/people/data/DataManager.java
index 43e7738..6b97c98 100644
--- a/services/people/java/com/android/server/people/data/DataManager.java
+++ b/services/people/java/com/android/server/people/data/DataManager.java
@@ -21,25 +21,25 @@
 import android.annotation.UserIdInt;
 import android.annotation.WorkerThread;
 import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
 import android.app.Person;
 import android.app.prediction.AppTarget;
 import android.app.prediction.AppTargetEvent;
-import android.app.usage.UsageEvents;
-import android.app.usage.UsageStatsManagerInternal;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.LauncherApps.ShortcutQuery;
+import android.content.pm.PackageManagerInternal;
 import android.content.pm.ShortcutInfo;
-import android.content.pm.ShortcutManager;
 import android.content.pm.ShortcutManager.ShareShortcutInfo;
 import android.content.pm.ShortcutServiceInternal;
 import android.content.pm.UserInfo;
 import android.database.ContentObserver;
 import android.net.Uri;
-import android.os.Binder;
+import android.os.CancellationSignal;
 import android.os.Handler;
 import android.os.Process;
 import android.os.RemoteException;
@@ -53,22 +53,27 @@
 import android.telecom.TelecomManager;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
+import android.util.ArraySet;
 import android.util.SparseArray;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.ChooserActivity;
+import com.android.internal.content.PackageMonitor;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.telephony.SmsApplication;
 import com.android.server.LocalServices;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
+import java.util.function.Function;
 
 /**
  * A class manages the lifecycle of the conversations and associated data, and exposes the methods
@@ -76,7 +81,6 @@
  */
 public class DataManager {
 
-    private static final String PLATFORM_PACKAGE_NAME = "android";
     private static final int MY_UID = Process.myUid();
     private static final int MY_PID = Process.myPid();
     private static final long QUERY_EVENTS_MAX_AGE_MS = DateUtils.DAY_IN_MILLIS;
@@ -85,6 +89,7 @@
     private final Context mContext;
     private final Injector mInjector;
     private final ScheduledExecutorService mUsageStatsQueryExecutor;
+    private final ScheduledExecutorService mDiskReadWriterExecutor;
 
     private final SparseArray<UserData> mUserDataArray = new SparseArray<>();
     private final SparseArray<BroadcastReceiver> mBroadcastReceivers = new SparseArray<>();
@@ -92,12 +97,12 @@
     private final SparseArray<ScheduledFuture<?>> mUsageStatsQueryFutures = new SparseArray<>();
     private final SparseArray<NotificationListenerService> mNotificationListeners =
             new SparseArray<>();
-    private final ContentObserver mCallLogContentObserver;
-    private final ContentObserver mMmsSmsContentObserver;
+    private final SparseArray<PackageMonitor> mPackageMonitors = new SparseArray<>();
+    private ContentObserver mCallLogContentObserver;
+    private ContentObserver mMmsSmsContentObserver;
 
     private ShortcutServiceInternal mShortcutServiceInternal;
-    private UsageStatsManagerInternal mUsageStatsManagerInternal;
-    private ShortcutManager mShortcutManager;
+    private PackageManagerInternal mPackageManagerInternal;
     private UserManager mUserManager;
 
     public DataManager(Context context) {
@@ -109,27 +114,28 @@
         mContext = context;
         mInjector = injector;
         mUsageStatsQueryExecutor = mInjector.createScheduledExecutor();
-        mCallLogContentObserver = new CallLogContentObserver(
-                BackgroundThread.getHandler());
-        mMmsSmsContentObserver = new MmsSmsContentObserver(
-                BackgroundThread.getHandler());
+        mDiskReadWriterExecutor = mInjector.createScheduledExecutor();
     }
 
     /** Initialization. Called when the system services are up running. */
     public void initialize() {
         mShortcutServiceInternal = LocalServices.getService(ShortcutServiceInternal.class);
-        mUsageStatsManagerInternal = LocalServices.getService(UsageStatsManagerInternal.class);
-        mShortcutManager = mContext.getSystemService(ShortcutManager.class);
+        mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class);
         mUserManager = mContext.getSystemService(UserManager.class);
 
         mShortcutServiceInternal.addListener(new ShortcutServiceListener());
+
+        IntentFilter shutdownIntentFilter = new IntentFilter(Intent.ACTION_SHUTDOWN);
+        BroadcastReceiver shutdownBroadcastReceiver = new ShutdownBroadcastReceiver();
+        mContext.registerReceiver(shutdownBroadcastReceiver, shutdownIntentFilter);
     }
 
     /** This method is called when a user is unlocked. */
     public void onUserUnlocked(int userId) {
         UserData userData = mUserDataArray.get(userId);
         if (userData == null) {
-            userData = new UserData(userId);
+            userData = new UserData(userId, mDiskReadWriterExecutor,
+                    mInjector.createContactsQueryHelper(mContext));
             mUserDataArray.put(userId, userData);
         }
         userData.setUserUnlocked();
@@ -160,23 +166,31 @@
         mNotificationListeners.put(userId, notificationListener);
         try {
             notificationListener.registerAsSystemService(mContext,
-                    new ComponentName(PLATFORM_PACKAGE_NAME, getClass().getSimpleName()),
-                    UserHandle.myUserId());
+                    new ComponentName(mContext, getClass()), userId);
         } catch (RemoteException e) {
             // Should never occur for local calls.
         }
 
+        PackageMonitor packageMonitor = new PerUserPackageMonitor();
+        packageMonitor.register(mContext, null, UserHandle.of(userId), true);
+        mPackageMonitors.put(userId, packageMonitor);
+
         if (userId == UserHandle.USER_SYSTEM) {
             // The call log and MMS/SMS messages are shared across user profiles. So only need to
             // register the content observers once for the primary user.
             // TODO: Register observers after the conversations and events being loaded from disk.
+            mCallLogContentObserver = new CallLogContentObserver(BackgroundThread.getHandler());
             mContext.getContentResolver().registerContentObserver(
                     CallLog.CONTENT_URI, /* notifyForDescendants= */ true,
                     mCallLogContentObserver, UserHandle.USER_SYSTEM);
+
+            mMmsSmsContentObserver = new MmsSmsContentObserver(BackgroundThread.getHandler());
             mContext.getContentResolver().registerContentObserver(
                     MmsSms.CONTENT_URI, /* notifyForDescendants= */ false,
                     mMmsSmsContentObserver, UserHandle.USER_SYSTEM);
         }
+
+        DataMaintenanceService.scheduleJob(mContext, userId);
     }
 
     /** This method is called when a user is stopped. */
@@ -201,18 +215,29 @@
                 // Should never occur for local calls.
             }
         }
-        if (userId == UserHandle.USER_SYSTEM) {
-            mContext.getContentResolver().unregisterContentObserver(mCallLogContentObserver);
-            mContext.getContentResolver().unregisterContentObserver(mMmsSmsContentObserver);
+        if (mPackageMonitors.indexOfKey(userId) >= 0) {
+            mPackageMonitors.get(userId).unregister();
         }
+        if (userId == UserHandle.USER_SYSTEM) {
+            if (mCallLogContentObserver != null) {
+                mContext.getContentResolver().unregisterContentObserver(mCallLogContentObserver);
+                mCallLogContentObserver = null;
+            }
+            if (mMmsSmsContentObserver != null) {
+                mContext.getContentResolver().unregisterContentObserver(mMmsSmsContentObserver);
+                mCallLogContentObserver = null;
+            }
+        }
+
+        DataMaintenanceService.cancelJob(mContext, userId);
     }
 
     /**
      * Iterates through all the {@link PackageData}s owned by the unlocked users who are in the
      * same profile group as the calling user.
      */
-    public void forAllPackages(Consumer<PackageData> consumer) {
-        List<UserInfo> users = mUserManager.getEnabledProfiles(mInjector.getCallingUserId());
+    void forPackagesInProfile(@UserIdInt int callingUserId, Consumer<PackageData> consumer) {
+        List<UserInfo> users = mUserManager.getEnabledProfiles(callingUserId);
         for (UserInfo userInfo : users) {
             UserData userData = getUnlockedUserData(userInfo.id);
             if (userData != null) {
@@ -244,8 +269,10 @@
      * Gets the {@link ShareShortcutInfo}s from all packages owned by the calling user that match
      * the specified {@link IntentFilter}.
      */
-    public List<ShareShortcutInfo> getShareShortcuts(@NonNull IntentFilter intentFilter) {
-        return mShortcutManager.getShareTargets(intentFilter);
+    public List<ShareShortcutInfo> getShareShortcuts(@NonNull IntentFilter intentFilter,
+            @UserIdInt int callingUserId) {
+        return mShortcutServiceInternal.getShareTargets(
+                mContext.getPackageName(), intentFilter, callingUserId);
     }
 
     /** Reports the {@link AppTargetEvent} from App Prediction Manager. */
@@ -268,9 +295,8 @@
                     || TextUtils.isEmpty(mimeType)) {
                 return;
             }
-            EventHistoryImpl eventHistory =
-                    packageData.getEventStore().getOrCreateShortcutEventHistory(
-                            shortcutInfo.getId());
+            EventHistoryImpl eventHistory = packageData.getEventStore().getOrCreateEventHistory(
+                    EventStore.CATEGORY_SHORTCUT_BASED, shortcutInfo.getId());
             @Event.EventType int eventType;
             if (mimeType.startsWith("text/")) {
                 eventType = Event.TYPE_SHARE_TEXT;
@@ -285,6 +311,45 @@
         }
     }
 
+    /** Prunes the data for the specified user. */
+    public void pruneDataForUser(@UserIdInt int userId, @NonNull CancellationSignal signal) {
+        UserData userData = getUnlockedUserData(userId);
+        if (userData == null || signal.isCanceled()) {
+            return;
+        }
+        pruneUninstalledPackageData(userData);
+
+        long currentTimeMillis = System.currentTimeMillis();
+        userData.forAllPackages(packageData -> {
+            if (signal.isCanceled()) {
+                return;
+            }
+            packageData.getEventStore().pruneOldEvents(currentTimeMillis);
+            if (!packageData.isDefaultDialer()) {
+                packageData.getEventStore().deleteEventHistories(EventStore.CATEGORY_CALL);
+            }
+            if (!packageData.isDefaultSmsApp()) {
+                packageData.getEventStore().deleteEventHistories(EventStore.CATEGORY_SMS);
+            }
+            packageData.pruneOrphanEvents();
+        });
+    }
+
+    private void pruneUninstalledPackageData(@NonNull UserData userData) {
+        Set<String> installApps = new ArraySet<>();
+        mPackageManagerInternal.forEachInstalledPackage(
+                pkg -> installApps.add(pkg.getPackageName()), userData.getUserId());
+        List<String> packagesToDelete = new ArrayList<>();
+        userData.forAllPackages(packageData -> {
+            if (!installApps.contains(packageData.getPackageName())) {
+                packagesToDelete.add(packageData.getPackageName());
+            }
+        });
+        for (String packageName : packagesToDelete) {
+            userData.deletePackageData(packageName);
+        }
+    }
+
     /** Gets a list of {@link ShortcutInfo}s with the given shortcut IDs. */
     private List<ShortcutInfo> getShortcuts(
             @NonNull String packageName, @UserIdInt int userId,
@@ -292,7 +357,7 @@
         @ShortcutQuery.QueryFlags int queryFlags = ShortcutQuery.FLAG_MATCH_DYNAMIC
                 | ShortcutQuery.FLAG_MATCH_PINNED | ShortcutQuery.FLAG_MATCH_PINNED_BY_ANY_LAUNCHER;
         return mShortcutServiceInternal.getShortcuts(
-                mInjector.getCallingUserId(), /*callingPackage=*/ PLATFORM_PACKAGE_NAME,
+                UserHandle.USER_SYSTEM, mContext.getPackageName(),
                 /*changedSince=*/ 0, packageName, shortcutIds, /*locusIds=*/ null,
                 /*componentName=*/ null, queryFlags, userId, MY_PID, MY_UID);
     }
@@ -316,7 +381,8 @@
     private void updateDefaultDialer(@NonNull UserData userData) {
         TelecomManager telecomManager = mContext.getSystemService(TelecomManager.class);
         String defaultDialer = telecomManager != null
-                ? telecomManager.getDefaultDialerPackage(userData.getUserId()) : null;
+                ? telecomManager.getDefaultDialerPackage(
+                        new UserHandle(userData.getUserId())) : null;
         userData.setDefaultDialer(defaultDialer);
     }
 
@@ -340,7 +406,8 @@
                 || packageData.getConversationStore().getConversation(shortcutId) == null) {
             return null;
         }
-        return packageData.getEventStore().getOrCreateShortcutEventHistory(shortcutId);
+        return packageData.getEventStore().getOrCreateEventHistory(
+                EventStore.CATEGORY_SHORTCUT_BASED, shortcutId);
     }
 
     @VisibleForTesting
@@ -386,36 +453,6 @@
     }
 
     @VisibleForTesting
-    @WorkerThread
-    void queryUsageStatsService(@UserIdInt int userId, long currentTime, long lastQueryTime) {
-        UsageEvents usageEvents = mUsageStatsManagerInternal.queryEventsForUser(
-                userId, lastQueryTime, currentTime, false, false);
-        if (usageEvents == null) {
-            return;
-        }
-        while (usageEvents.hasNextEvent()) {
-            UsageEvents.Event e = new UsageEvents.Event();
-            usageEvents.getNextEvent(e);
-
-            String packageName = e.getPackageName();
-            PackageData packageData = getPackage(packageName, userId);
-            if (packageData == null) {
-                continue;
-            }
-            if (e.getEventType() == UsageEvents.Event.SHORTCUT_INVOCATION) {
-                String shortcutId = e.getShortcutId();
-                if (packageData.getConversationStore().getConversation(shortcutId) != null) {
-                    EventHistoryImpl eventHistory =
-                            packageData.getEventStore().getOrCreateShortcutEventHistory(
-                                    shortcutId);
-                    eventHistory.addEvent(
-                            new Event(e.getTimeStamp(), Event.TYPE_SHORTCUT_INVOCATION));
-                }
-            }
-        }
-    }
-
-    @VisibleForTesting
     ContentObserver getContactsContentObserverForTesting(@UserIdInt int userId) {
         return mContactsContentObservers.get(userId);
     }
@@ -436,6 +473,11 @@
     }
 
     @VisibleForTesting
+    PackageMonitor getPackageMonitorForTesting(@UserIdInt int userId) {
+        return mPackageMonitors.get(userId);
+    }
+
+    @VisibleForTesting
     UserData getUserDataForTesting(@UserIdInt int userId) {
         return mUserDataArray.get(userId);
     }
@@ -522,7 +564,8 @@
                     return;
                 }
                 EventStore eventStore = defaultDialer.getEventStore();
-                eventStore.getOrCreateCallEventHistory(phoneNumber).addEvent(event);
+                eventStore.getOrCreateEventHistory(
+                        EventStore.CATEGORY_CALL, phoneNumber).addEvent(event);
             });
         }
     }
@@ -567,7 +610,8 @@
                     return;
                 }
                 EventStore eventStore = defaultSmsApp.getEventStore();
-                eventStore.getOrCreateSmsEventHistory(phoneNumber).addEvent(event);
+                eventStore.getOrCreateEventHistory(
+                        EventStore.CATEGORY_SMS, phoneNumber).addEvent(event);
             });
         }
     }
@@ -592,6 +636,14 @@
     private class NotificationListener extends NotificationListenerService {
 
         @Override
+        public void onNotificationPosted(StatusBarNotification sbn) {
+            EventHistoryImpl eventHistory = getEventHistoryIfEligible(sbn);
+            if (eventHistory != null) {
+                eventHistory.addEvent(new Event(sbn.getPostTime(), Event.TYPE_NOTIFICATION_POSTED));
+            }
+        }
+
+        @Override
         public void onNotificationRemoved(StatusBarNotification sbn, RankingMap rankingMap,
                 int reason) {
             if (reason != REASON_CLICK) {
@@ -604,6 +656,52 @@
             long currentTime = System.currentTimeMillis();
             eventHistory.addEvent(new Event(currentTime, Event.TYPE_NOTIFICATION_OPENED));
         }
+
+        @Override
+        public void onNotificationChannelModified(String pkg, UserHandle user,
+                NotificationChannel channel, int modificationType) {
+            PackageData packageData = getPackage(pkg, user.getIdentifier());
+            String shortcutId = channel.getConversationId();
+            if (packageData == null || shortcutId == null) {
+                return;
+            }
+            ConversationStore conversationStore = packageData.getConversationStore();
+            ConversationInfo conversationInfo = conversationStore.getConversation(shortcutId);
+            if (conversationInfo == null) {
+                return;
+            }
+            ConversationInfo.Builder builder = new ConversationInfo.Builder(conversationInfo);
+            switch (modificationType) {
+                case NOTIFICATION_CHANNEL_OR_GROUP_ADDED:
+                case NOTIFICATION_CHANNEL_OR_GROUP_UPDATED:
+                    builder.setNotificationChannelId(channel.getId());
+                    builder.setImportant(channel.isImportantConversation());
+                    builder.setDemoted(channel.isDemoted());
+                    builder.setNotificationSilenced(
+                            channel.getImportance() <= NotificationManager.IMPORTANCE_LOW);
+                    builder.setBubbled(channel.canBubble());
+                    break;
+                case NOTIFICATION_CHANNEL_OR_GROUP_DELETED:
+                    // If the notification channel is deleted, revert all the notification settings
+                    // to the default value.
+                    builder.setNotificationChannelId(null);
+                    builder.setImportant(false);
+                    builder.setDemoted(false);
+                    builder.setNotificationSilenced(false);
+                    builder.setBubbled(false);
+                    break;
+            }
+            conversationStore.addOrUpdate(builder.build());
+
+            if (modificationType == NOTIFICATION_CHANNEL_OR_GROUP_UPDATED
+                    && conversationInfo.isShortcutLongLived()
+                    && !conversationInfo.isShortcutCached()) {
+                mShortcutServiceInternal.cacheShortcuts(user.getIdentifier(),
+                        mContext.getPackageName(), pkg,
+                        Collections.singletonList(conversationInfo.getShortcutId()),
+                        user.getIdentifier());
+            }
+        }
     }
 
     /**
@@ -612,19 +710,20 @@
      */
     private class UsageStatsQueryRunnable implements Runnable {
 
-        private final int mUserId;
-        private long mLastQueryTime;
+        private final UsageStatsQueryHelper mUsageStatsQueryHelper;
+        private long mLastEventTimestamp;
 
         private UsageStatsQueryRunnable(int userId) {
-            mUserId = userId;
-            mLastQueryTime = System.currentTimeMillis() - QUERY_EVENTS_MAX_AGE_MS;
+            mUsageStatsQueryHelper = mInjector.createUsageStatsQueryHelper(userId,
+                    (packageName) -> getPackage(packageName, userId));
+            mLastEventTimestamp = System.currentTimeMillis() - QUERY_EVENTS_MAX_AGE_MS;
         }
 
         @Override
         public void run() {
-            long currentTime = System.currentTimeMillis();
-            queryUsageStatsService(mUserId, currentTime, mLastQueryTime);
-            mLastQueryTime = currentTime;
+            if (mUsageStatsQueryHelper.querySince(mLastEventTimestamp)) {
+                mLastEventTimestamp = mUsageStatsQueryHelper.getLastEventTimestamp();
+            }
         }
     }
 
@@ -654,6 +753,28 @@
         }
     }
 
+    private class PerUserPackageMonitor extends PackageMonitor {
+
+        @Override
+        public void onPackageRemoved(String packageName, int uid) {
+            super.onPackageRemoved(packageName, uid);
+
+            int userId = getChangingUserId();
+            UserData userData = getUnlockedUserData(userId);
+            if (userData != null) {
+                userData.deletePackageData(packageName);
+            }
+        }
+    }
+
+    private class ShutdownBroadcastReceiver extends BroadcastReceiver {
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            forAllUnlockedUsers(userData -> userData.forAllPackages(PackageData::saveToDisk));
+        }
+    }
+
     @VisibleForTesting
     static class Injector {
 
@@ -680,8 +801,9 @@
             return new SmsQueryHelper(context, eventConsumer);
         }
 
-        int getCallingUserId() {
-            return Binder.getCallingUserHandle().getIdentifier();
+        UsageStatsQueryHelper createUsageStatsQueryHelper(@UserIdInt int userId,
+                Function<String, PackageData> packageDataGetter) {
+            return new UsageStatsQueryHelper(userId, packageDataGetter);
         }
     }
 }
diff --git a/services/people/java/com/android/server/people/data/Event.java b/services/people/java/com/android/server/people/data/Event.java
index c2364a2..81411c0 100644
--- a/services/people/java/com/android/server/people/data/Event.java
+++ b/services/people/java/com/android/server/people/data/Event.java
@@ -18,14 +18,12 @@
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.text.format.DateFormat;
 import android.util.ArraySet;
 
-import com.android.internal.util.Preconditions;
-
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.Objects;
 import java.util.Set;
 
 /** An event representing the interaction with a specific conversation or app. */
@@ -55,6 +53,8 @@
 
     public static final int TYPE_CALL_MISSED = 12;
 
+    public static final int TYPE_IN_APP_CONVERSATION = 13;
+
     @IntDef(prefix = { "TYPE_" }, value = {
             TYPE_SHORTCUT_INVOCATION,
             TYPE_NOTIFICATION_POSTED,
@@ -68,6 +68,7 @@
             TYPE_CALL_OUTGOING,
             TYPE_CALL_INCOMING,
             TYPE_CALL_MISSED,
+            TYPE_IN_APP_CONVERSATION,
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface EventType {}
@@ -95,6 +96,7 @@
         CALL_EVENT_TYPES.add(TYPE_CALL_MISSED);
 
         ALL_EVENT_TYPES.add(TYPE_SHORTCUT_INVOCATION);
+        ALL_EVENT_TYPES.add(TYPE_IN_APP_CONVERSATION);
         ALL_EVENT_TYPES.addAll(NOTIFICATION_EVENT_TYPES);
         ALL_EVENT_TYPES.addAll(SHARE_EVENT_TYPES);
         ALL_EVENT_TYPES.addAll(SMS_EVENT_TYPES);
@@ -105,18 +107,18 @@
 
     private final int mType;
 
-    private final CallDetails mCallDetails;
+    private final int mDurationSeconds;
 
     Event(long timestamp, @EventType int type) {
         mTimestamp = timestamp;
         mType = type;
-        mCallDetails = null;
+        mDurationSeconds = 0;
     }
 
     private Event(@NonNull Builder builder) {
         mTimestamp = builder.mTimestamp;
         mType = builder.mType;
-        mCallDetails = builder.mCallDetails;
+        mDurationSeconds = builder.mDurationSeconds;
     }
 
     public long getTimestamp() {
@@ -128,12 +130,35 @@
     }
 
     /**
-     * Gets the {@link CallDetails} of the event. It is only available if the event type is one of
-     * {@code CALL_EVENT_TYPES}, otherwise, it's always {@code null}.
+     * Gets the duration of the event in seconds. It is only available for these events:
+     * <ul>
+     *     <li>{@link #TYPE_CALL_INCOMING}
+     *     <li>{@link #TYPE_CALL_OUTGOING}
+     *     <li>{@link #TYPE_IN_APP_CONVERSATION}
+     * </ul>
+     * <p>For the other event types, it always returns {@code 0}.
      */
-    @Nullable
-    public CallDetails getCallDetails() {
-        return mCallDetails;
+    public int getDurationSeconds() {
+        return mDurationSeconds;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof Event)) {
+            return false;
+        }
+        Event other = (Event) obj;
+        return mTimestamp == other.mTimestamp
+                && mType == other.mType
+                && mDurationSeconds == other.mDurationSeconds;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mTimestamp, mType, mDurationSeconds);
     }
 
     @Override
@@ -142,32 +167,13 @@
         sb.append("Event {");
         sb.append("timestamp=").append(DateFormat.format("yyyy-MM-dd HH:mm:ss", mTimestamp));
         sb.append(", type=").append(mType);
-        if (mCallDetails != null) {
-            sb.append(", callDetails=").append(mCallDetails);
+        if (mDurationSeconds > 0) {
+            sb.append(", durationSeconds=").append(mDurationSeconds);
         }
         sb.append("}");
         return sb.toString();
     }
 
-    /** Type-specific details of a call event. */
-    public static class CallDetails {
-
-        private final long mDurationSeconds;
-
-        CallDetails(long durationSeconds) {
-            mDurationSeconds = durationSeconds;
-        }
-
-        public long getDurationSeconds() {
-            return mDurationSeconds;
-        }
-
-        @Override
-        public String toString() {
-            return "CallDetails {durationSeconds=" + mDurationSeconds + "}";
-        }
-    }
-
     /** Builder class for {@link Event} objects. */
     static class Builder {
 
@@ -175,16 +181,15 @@
 
         private final int mType;
 
-        private CallDetails mCallDetails;
+        private int mDurationSeconds;
 
         Builder(long timestamp, @EventType int type) {
             mTimestamp = timestamp;
             mType = type;
         }
 
-        Builder setCallDetails(CallDetails callDetails) {
-            Preconditions.checkArgument(CALL_EVENT_TYPES.contains(mType));
-            mCallDetails = callDetails;
+        Builder setDurationSeconds(int durationSeconds) {
+            mDurationSeconds = durationSeconds;
             return this;
         }
 
diff --git a/services/people/java/com/android/server/people/data/EventHistoryImpl.java b/services/people/java/com/android/server/people/data/EventHistoryImpl.java
index 6b6bd7e..6bef1db 100644
--- a/services/people/java/com/android/server/people/data/EventHistoryImpl.java
+++ b/services/people/java/com/android/server/people/data/EventHistoryImpl.java
@@ -78,6 +78,17 @@
         mRecentEvents.add(event);
     }
 
+    void onDestroy() {
+        mEventIndexArray.clear();
+        mRecentEvents.clear();
+        // TODO: STOPSHIP: Delete the data files.
+    }
+
+    /** Deletes the events data that exceeds the retention period. */
+    void pruneOldEvents(long currentTimeMillis) {
+        // TODO: STOPSHIP: Delete the old events data files.
+    }
+
     @VisibleForTesting
     static class Injector {
 
diff --git a/services/people/java/com/android/server/people/data/EventIndex.java b/services/people/java/com/android/server/people/data/EventIndex.java
index b74a3fa..069ec0e 100644
--- a/services/people/java/com/android/server/people/data/EventIndex.java
+++ b/services/people/java/com/android/server/people/data/EventIndex.java
@@ -61,7 +61,7 @@
  */
 public class EventIndex {
 
-    private static final int LONG_SIZE_BITS = 64;
+    private static final int RETENTION_DAYS = 63;
 
     private static final int TIME_SLOT_ONE_DAY = 0;
 
@@ -202,7 +202,7 @@
             updateEventBitmaps(currentTime);
             for (int slotType = 0; slotType < TIME_SLOT_TYPES_COUNT; slotType++) {
                 int offset = diffTimeSlots(slotType, eventTime, currentTime);
-                if (offset < LONG_SIZE_BITS) {
+                if (offset < Long.SIZE) {
                     mEventBitmaps[slotType] |= (1L << offset);
                 }
             }
@@ -236,12 +236,16 @@
     private void updateEventBitmaps(long currentTimeMillis) {
         for (int slotType = 0; slotType < TIME_SLOT_TYPES_COUNT; slotType++) {
             int offset = diffTimeSlots(slotType, mLastUpdatedTime, currentTimeMillis);
-            if (offset < LONG_SIZE_BITS) {
+            if (offset < Long.SIZE) {
                 mEventBitmaps[slotType] <<= offset;
             } else {
                 mEventBitmaps[slotType] = 0L;
             }
         }
+
+        int bitsToClear = Long.SIZE - RETENTION_DAYS;
+        mEventBitmaps[TIME_SLOT_ONE_DAY] <<= bitsToClear;
+        mEventBitmaps[TIME_SLOT_ONE_DAY] >>>= bitsToClear;
         mLastUpdatedTime = currentTimeMillis;
     }
 
diff --git a/services/people/java/com/android/server/people/data/EventList.java b/services/people/java/com/android/server/people/data/EventList.java
index b267d66..d770f91 100644
--- a/services/people/java/com/android/server/people/data/EventList.java
+++ b/services/people/java/com/android/server/people/data/EventList.java
@@ -69,6 +69,10 @@
         return result;
     }
 
+    void clear() {
+        mEvents.clear();
+    }
+
     /** Returns the first index whose timestamp is greater or equal to the provided timestamp. */
     private int firstIndexOnOrAfter(long timestamp) {
         int result = mEvents.size();
diff --git a/services/people/java/com/android/server/people/data/EventStore.java b/services/people/java/com/android/server/people/data/EventStore.java
index d6b7a86..c8d44ac 100644
--- a/services/people/java/com/android/server/people/data/EventStore.java
+++ b/services/people/java/com/android/server/people/data/EventStore.java
@@ -16,99 +16,129 @@
 
 package com.android.server.people.data;
 
+import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.content.LocusId;
 import android.util.ArrayMap;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.function.Predicate;
 
 /** The store that stores and accesses the events data for a package. */
 class EventStore {
 
-    private final EventHistoryImpl mPackageEventHistory = new EventHistoryImpl();
+    /** The events that are queryable with a shortcut ID. */
+    static final int CATEGORY_SHORTCUT_BASED = 0;
 
-    // Shortcut ID -> Event History
-    private final Map<String, EventHistoryImpl> mShortcutEventHistoryMap = new ArrayMap<>();
+    /** The events that are queryable with a {@link android.content.LocusId}. */
+    static final int CATEGORY_LOCUS_ID_BASED = 1;
 
-    // Locus ID -> Event History
-    private final Map<LocusId, EventHistoryImpl> mLocusEventHistoryMap = new ArrayMap<>();
+    /** The phone call events that are queryable with a phone number. */
+    static final int CATEGORY_CALL = 2;
 
-    // Phone Number -> Event History
-    private final Map<String, EventHistoryImpl> mCallEventHistoryMap = new ArrayMap<>();
+    /** The SMS or MMS events that are queryable with a phone number. */
+    static final int CATEGORY_SMS = 3;
 
-    // Phone Number -> Event History
-    private final Map<String, EventHistoryImpl> mSmsEventHistoryMap = new ArrayMap<>();
+    /** The events that are queryable with an {@link android.app.Activity} class name. */
+    static final int CATEGORY_CLASS_BASED = 4;
 
-    /** Gets the package level {@link EventHistory}. */
-    @NonNull
-    EventHistory getPackageEventHistory() {
-        return mPackageEventHistory;
-    }
+    @IntDef(prefix = { "CATEGORY_" }, value = {
+            CATEGORY_SHORTCUT_BASED,
+            CATEGORY_LOCUS_ID_BASED,
+            CATEGORY_CALL,
+            CATEGORY_SMS,
+            CATEGORY_CLASS_BASED,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    @interface EventCategory {}
 
-    /** Gets the {@link EventHistory} for the specified {@code shortcutId} if exists. */
-    @Nullable
-    EventHistory getShortcutEventHistory(String shortcutId) {
-        return mShortcutEventHistoryMap.get(shortcutId);
-    }
+    private final List<Map<String, EventHistoryImpl>> mEventHistoryMaps = new ArrayList<>();
 
-    /** Gets the {@link EventHistory} for the specified {@code locusId} if exists. */
-    @Nullable
-    EventHistory getLocusEventHistory(LocusId locusId) {
-        return mLocusEventHistoryMap.get(locusId);
-    }
-
-    /** Gets the phone call {@link EventHistory} for the specified {@code phoneNumber} if exists. */
-    @Nullable
-    EventHistory getCallEventHistory(String phoneNumber) {
-        return mCallEventHistoryMap.get(phoneNumber);
-    }
-
-    /** Gets the SMS {@link EventHistory} for the specified {@code phoneNumber} if exists. */
-    @Nullable
-    EventHistory getSmsEventHistory(String phoneNumber) {
-        return mSmsEventHistoryMap.get(phoneNumber);
+    EventStore() {
+        mEventHistoryMaps.add(CATEGORY_SHORTCUT_BASED, new ArrayMap<>());
+        mEventHistoryMaps.add(CATEGORY_LOCUS_ID_BASED, new ArrayMap<>());
+        mEventHistoryMaps.add(CATEGORY_CALL, new ArrayMap<>());
+        mEventHistoryMaps.add(CATEGORY_SMS, new ArrayMap<>());
+        mEventHistoryMaps.add(CATEGORY_CLASS_BASED, new ArrayMap<>());
     }
 
     /**
-     * Gets the {@link EventHistoryImpl} for the specified {@code shortcutId} or creates a new
-     * instance and put it into the store if not exists. The caller needs to verify if a
-     * conversation with this shortcut ID exists before calling this method.
+     * Gets the {@link EventHistory} for the specified key if exists.
+     *
+     * @param key Category-specific key, it can be shortcut ID, locus ID, phone number, or class
+     *            name.
      */
-    @NonNull
-    EventHistoryImpl getOrCreateShortcutEventHistory(String shortcutId) {
-        return mShortcutEventHistoryMap.computeIfAbsent(shortcutId, key -> new EventHistoryImpl());
+    @Nullable
+    EventHistory getEventHistory(@EventCategory int category, String key) {
+        return mEventHistoryMaps.get(category).get(key);
     }
 
     /**
-     * Gets the {@link EventHistoryImpl} for the specified {@code locusId} or creates a new
-     * instance and put it into the store if not exists. The caller needs to ensure a conversation
-     * with this locus ID exists before calling this method.
+     * Gets the {@link EventHistoryImpl} for the specified ID or creates a new instance and put it
+     * into the store if not exists. The caller needs to verify if the associated conversation
+     * exists before calling this method.
+     *
+     * @param key Category-specific key, it can be shortcut ID, locus ID, phone number, or class
+     *            name.
      */
     @NonNull
-    EventHistoryImpl getOrCreateLocusEventHistory(LocusId locusId) {
-        return mLocusEventHistoryMap.computeIfAbsent(locusId, key -> new EventHistoryImpl());
+    EventHistoryImpl getOrCreateEventHistory(@EventCategory int category, String key) {
+        return mEventHistoryMaps.get(category).computeIfAbsent(key, k -> new EventHistoryImpl());
     }
 
     /**
-     * Gets the {@link EventHistoryImpl} for the specified {@code phoneNumber} for call events
-     * or creates a new instance and put it into the store if not exists. The caller needs to ensure
-     * a conversation with this phone number exists and this package is the default dialer
-     * before calling this method.
+     * Deletes the events and index data for the specified key.
+     *
+     * @param key Category-specific key, it can be shortcut ID, locus ID, phone number, or class
+     *            name.
      */
-    @NonNull
-    EventHistoryImpl getOrCreateCallEventHistory(String phoneNumber) {
-        return mCallEventHistoryMap.computeIfAbsent(phoneNumber, key -> new EventHistoryImpl());
+    void deleteEventHistory(@EventCategory int category, String key) {
+        EventHistoryImpl eventHistory = mEventHistoryMaps.get(category).remove(key);
+        if (eventHistory != null) {
+            eventHistory.onDestroy();
+        }
+    }
+
+    /** Deletes all the events and index data for the specified category from disk. */
+    void deleteEventHistories(@EventCategory int category) {
+        mEventHistoryMaps.get(category).clear();
+        // TODO: Implement this method to delete the data from disk.
+    }
+
+    /** Deletes the events data that exceeds the retention period. */
+    void pruneOldEvents(long currentTimeMillis) {
+        for (Map<String, EventHistoryImpl> map : mEventHistoryMaps) {
+            for (EventHistoryImpl eventHistory : map.values()) {
+                eventHistory.pruneOldEvents(currentTimeMillis);
+            }
+        }
     }
 
     /**
-     * Gets the {@link EventHistoryImpl} for the specified {@code phoneNumber} for SMS events
-     * or creates a new instance and put it into the store if not exists. The caller needs to ensure
-     * a conversation with this phone number exists and this package is the default SMS app
-     * before calling this method.
+     * Prunes the event histories whose key (shortcut ID, locus ID or phone number) does not match
+     * any conversations.
+     *
+     * @param keyChecker Check whether there exists a conversation contains this key.
      */
-    @NonNull
-    EventHistoryImpl getOrCreateSmsEventHistory(String phoneNumber) {
-        return mSmsEventHistoryMap.computeIfAbsent(phoneNumber, key -> new EventHistoryImpl());
+    void pruneOrphanEventHistories(@EventCategory int category, Predicate<String> keyChecker) {
+        Set<String> keys = mEventHistoryMaps.get(category).keySet();
+        List<String> keysToDelete = new ArrayList<>();
+        for (String key : keys) {
+            if (!keyChecker.test(key)) {
+                keysToDelete.add(key);
+            }
+        }
+        Map<String, EventHistoryImpl> eventHistoryMap = mEventHistoryMaps.get(category);
+        for (String key : keysToDelete) {
+            EventHistoryImpl eventHistory = eventHistoryMap.remove(key);
+            if (eventHistory != null) {
+                eventHistory.onDestroy();
+            }
+        }
     }
 }
diff --git a/services/people/java/com/android/server/people/data/PackageData.java b/services/people/java/com/android/server/people/data/PackageData.java
index 75b870c..c55f972 100644
--- a/services/people/java/com/android/server/people/data/PackageData.java
+++ b/services/people/java/com/android/server/people/data/PackageData.java
@@ -16,12 +16,20 @@
 
 package com.android.server.people.data;
 
+import static com.android.server.people.data.EventStore.CATEGORY_CALL;
+import static com.android.server.people.data.EventStore.CATEGORY_CLASS_BASED;
+import static com.android.server.people.data.EventStore.CATEGORY_LOCUS_ID_BASED;
+import static com.android.server.people.data.EventStore.CATEGORY_SHORTCUT_BASED;
+import static com.android.server.people.data.EventStore.CATEGORY_SMS;
+
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.UserIdInt;
 import android.content.LocusId;
 import android.text.TextUtils;
 
+import java.io.File;
+import java.util.concurrent.ScheduledExecutorService;
 import java.util.function.Consumer;
 import java.util.function.Predicate;
 
@@ -43,17 +51,36 @@
 
     private final Predicate<String> mIsDefaultSmsAppPredicate;
 
+    private final File mPackageDataDir;
+
     PackageData(@NonNull String packageName, @UserIdInt int userId,
             @NonNull Predicate<String> isDefaultDialerPredicate,
-            @NonNull Predicate<String> isDefaultSmsAppPredicate) {
+            @NonNull Predicate<String> isDefaultSmsAppPredicate,
+            @NonNull ScheduledExecutorService scheduledExecutorService,
+            @NonNull File perUserPeopleDataDir,
+            @NonNull ContactsQueryHelper helper) {
         mPackageName = packageName;
         mUserId = userId;
-        mConversationStore = new ConversationStore();
+
+        mPackageDataDir = new File(perUserPeopleDataDir, mPackageName);
+        mConversationStore = new ConversationStore(mPackageDataDir, scheduledExecutorService,
+                helper);
         mEventStore = new EventStore();
         mIsDefaultDialerPredicate = isDefaultDialerPredicate;
         mIsDefaultSmsAppPredicate = isDefaultSmsAppPredicate;
     }
 
+    /** Called when user is unlocked. */
+    void loadFromDisk() {
+        mPackageDataDir.mkdirs();
+        mConversationStore.loadConversationsFromDisk();
+    }
+
+    /** Called when device is shutting down. */
+    void saveToDisk() {
+        mConversationStore.saveConversationsToDisk();
+    }
+
     @NonNull
     public String getPackageName() {
         return mPackageName;
@@ -68,11 +95,6 @@
         mConversationStore.forAllConversations(consumer);
     }
 
-    @NonNull
-    public EventHistory getPackageLevelEventHistory() {
-        return getEventStore().getPackageEventHistory();
-    }
-
     /**
      * Gets the {@link ConversationInfo} for a given shortcut ID. Returns null if such as {@link
      * ConversationInfo} does not exist.
@@ -96,14 +118,16 @@
             return result;
         }
 
-        EventHistory shortcutEventHistory = getEventStore().getShortcutEventHistory(shortcutId);
+        EventHistory shortcutEventHistory = getEventStore().getEventHistory(
+                CATEGORY_SHORTCUT_BASED, shortcutId);
         if (shortcutEventHistory != null) {
             result.addEventHistory(shortcutEventHistory);
         }
 
         LocusId locusId = conversationInfo.getLocusId();
         if (locusId != null) {
-            EventHistory locusEventHistory = getEventStore().getLocusEventHistory(locusId);
+            EventHistory locusEventHistory = getEventStore().getEventHistory(
+                    CATEGORY_LOCUS_ID_BASED, locusId.getId());
             if (locusEventHistory != null) {
                 result.addEventHistory(locusEventHistory);
             }
@@ -114,13 +138,15 @@
             return result;
         }
         if (isDefaultDialer()) {
-            EventHistory callEventHistory = getEventStore().getCallEventHistory(phoneNumber);
+            EventHistory callEventHistory = getEventStore().getEventHistory(
+                    CATEGORY_CALL, phoneNumber);
             if (callEventHistory != null) {
                 result.addEventHistory(callEventHistory);
             }
         }
         if (isDefaultSmsApp()) {
-            EventHistory smsEventHistory = getEventStore().getSmsEventHistory(phoneNumber);
+            EventHistory smsEventHistory = getEventStore().getEventHistory(
+                    CATEGORY_SMS, phoneNumber);
             if (smsEventHistory != null) {
                 result.addEventHistory(smsEventHistory);
             }
@@ -128,6 +154,14 @@
         return result;
     }
 
+    /** Gets the {@link EventHistory} for a given Activity class. */
+    @NonNull
+    public EventHistory getClassLevelEventHistory(String className) {
+        EventHistory eventHistory = getEventStore().getEventHistory(
+                CATEGORY_CLASS_BASED, className);
+        return eventHistory != null ? eventHistory : new AggregateEventHistoryImpl();
+    }
+
     public boolean isDefaultDialer() {
         return mIsDefaultDialerPredicate.test(mPackageName);
     }
@@ -146,6 +180,47 @@
         return mEventStore;
     }
 
+    /**
+     * Deletes all the data (including conversation, events and index) for the specified
+     * conversation shortcut ID.
+     */
+    void deleteDataForConversation(String shortcutId) {
+        ConversationInfo conversationInfo = mConversationStore.deleteConversation(shortcutId);
+        if (conversationInfo == null) {
+            return;
+        }
+        mEventStore.deleteEventHistory(CATEGORY_SHORTCUT_BASED, shortcutId);
+        if (conversationInfo.getLocusId() != null) {
+            mEventStore.deleteEventHistory(
+                    CATEGORY_LOCUS_ID_BASED, conversationInfo.getLocusId().getId());
+        }
+        String phoneNumber = conversationInfo.getContactPhoneNumber();
+        if (!TextUtils.isEmpty(phoneNumber)) {
+            if (isDefaultDialer()) {
+                mEventStore.deleteEventHistory(CATEGORY_CALL, phoneNumber);
+            }
+            if (isDefaultSmsApp()) {
+                mEventStore.deleteEventHistory(CATEGORY_SMS, phoneNumber);
+            }
+        }
+    }
+
+    /** Prunes the events and index data that don't have a associated conversation. */
+    void pruneOrphanEvents() {
+        mEventStore.pruneOrphanEventHistories(CATEGORY_SHORTCUT_BASED,
+                key -> mConversationStore.getConversation(key) != null);
+        mEventStore.pruneOrphanEventHistories(CATEGORY_LOCUS_ID_BASED,
+                key -> mConversationStore.getConversationByLocusId(new LocusId(key)) != null);
+        if (isDefaultDialer()) {
+            mEventStore.pruneOrphanEventHistories(CATEGORY_CALL,
+                    key -> mConversationStore.getConversationByPhoneNumber(key) != null);
+        }
+        if (isDefaultSmsApp()) {
+            mEventStore.pruneOrphanEventHistories(CATEGORY_SMS,
+                    key -> mConversationStore.getConversationByPhoneNumber(key) != null);
+        }
+    }
+
     void onDestroy() {
         // TODO: STOPSHIP: Implements this method for the case of package being uninstalled.
     }
diff --git a/services/people/java/com/android/server/people/data/UsageStatsQueryHelper.java b/services/people/java/com/android/server/people/data/UsageStatsQueryHelper.java
new file mode 100644
index 0000000..72f1abb
--- /dev/null
+++ b/services/people/java/com/android/server/people/data/UsageStatsQueryHelper.java
@@ -0,0 +1,141 @@
+/*
+ * 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.people.data;
+
+import android.annotation.NonNull;
+import android.annotation.UserIdInt;
+import android.app.usage.UsageEvents;
+import android.app.usage.UsageStatsManagerInternal;
+import android.content.ComponentName;
+import android.content.LocusId;
+import android.text.format.DateUtils;
+import android.util.ArrayMap;
+
+import com.android.server.LocalServices;
+
+import java.util.Map;
+import java.util.function.Function;
+
+/** A helper class that queries {@link UsageStatsManagerInternal}. */
+class UsageStatsQueryHelper {
+
+    private final UsageStatsManagerInternal mUsageStatsManagerInternal;
+    private final int mUserId;
+    private final Function<String, PackageData> mPackageDataGetter;
+    // Activity name -> Conversation start event (LOCUS_ID_SET)
+    private final Map<ComponentName, UsageEvents.Event> mConvoStartEvents = new ArrayMap<>();
+    private long mLastEventTimestamp;
+
+    /**
+     * @param userId The user whose events are to be queried.
+     * @param packageDataGetter The function to get {@link PackageData} with a package name.
+     */
+    UsageStatsQueryHelper(@UserIdInt int userId,
+            Function<String, PackageData> packageDataGetter) {
+        mUsageStatsManagerInternal = LocalServices.getService(UsageStatsManagerInternal.class);
+        mUserId = userId;
+        mPackageDataGetter = packageDataGetter;
+    }
+
+    /**
+     * Queries {@link UsageStatsManagerInternal} for the recent events occurred since {@code
+     * sinceTime} and adds the derived {@link Event}s into the corresponding package's event store,
+     *
+     * @return true if the query runs successfully and at least one event is found.
+     */
+    boolean querySince(long sinceTime) {
+        UsageEvents usageEvents = mUsageStatsManagerInternal.queryEventsForUser(
+                mUserId, sinceTime, System.currentTimeMillis(), UsageEvents.SHOW_ALL_EVENT_DATA);
+        if (usageEvents == null) {
+            return false;
+        }
+        boolean hasEvents = false;
+        while (usageEvents.hasNextEvent()) {
+            UsageEvents.Event e = new UsageEvents.Event();
+            usageEvents.getNextEvent(e);
+
+            hasEvents = true;
+            mLastEventTimestamp = Math.max(mLastEventTimestamp, e.getTimeStamp());
+            String packageName = e.getPackageName();
+            PackageData packageData = mPackageDataGetter.apply(packageName);
+            if (packageData == null) {
+                continue;
+            }
+            switch (e.getEventType()) {
+                case UsageEvents.Event.SHORTCUT_INVOCATION:
+                    addEventByShortcutId(packageData, e.getShortcutId(),
+                            new Event(e.getTimeStamp(), Event.TYPE_SHORTCUT_INVOCATION));
+                    break;
+                case UsageEvents.Event.LOCUS_ID_SET:
+                    onInAppConversationEnded(packageData, e);
+                    LocusId locusId = e.getLocusId() != null ? new LocusId(e.getLocusId()) : null;
+                    if (locusId != null) {
+                        if (packageData.getConversationStore().getConversationByLocusId(locusId)
+                                != null) {
+                            ComponentName activityName =
+                                    new ComponentName(packageName, e.getClassName());
+                            mConvoStartEvents.put(activityName, e);
+                        }
+                    }
+                    break;
+                case UsageEvents.Event.ACTIVITY_PAUSED:
+                case UsageEvents.Event.ACTIVITY_STOPPED:
+                case UsageEvents.Event.ACTIVITY_DESTROYED:
+                    onInAppConversationEnded(packageData, e);
+                    break;
+            }
+        }
+        return hasEvents;
+    }
+
+    long getLastEventTimestamp() {
+        return mLastEventTimestamp;
+    }
+
+    private void onInAppConversationEnded(@NonNull PackageData packageData,
+            @NonNull UsageEvents.Event endEvent) {
+        ComponentName activityName =
+                new ComponentName(endEvent.getPackageName(), endEvent.getClassName());
+        UsageEvents.Event startEvent = mConvoStartEvents.remove(activityName);
+        if (startEvent == null || startEvent.getTimeStamp() >= endEvent.getTimeStamp()) {
+            return;
+        }
+        long durationMillis = endEvent.getTimeStamp() - startEvent.getTimeStamp();
+        Event event = new Event.Builder(startEvent.getTimeStamp(), Event.TYPE_IN_APP_CONVERSATION)
+                .setDurationSeconds((int) (durationMillis / DateUtils.SECOND_IN_MILLIS))
+                .build();
+        addEventByLocusId(packageData, new LocusId(startEvent.getLocusId()), event);
+    }
+
+    private void addEventByShortcutId(PackageData packageData, String shortcutId, Event event) {
+        if (packageData.getConversationStore().getConversation(shortcutId) == null) {
+            return;
+        }
+        EventHistoryImpl eventHistory = packageData.getEventStore().getOrCreateEventHistory(
+                EventStore.CATEGORY_SHORTCUT_BASED, shortcutId);
+        eventHistory.addEvent(event);
+    }
+
+    private void addEventByLocusId(PackageData packageData, LocusId locusId, Event event) {
+        if (packageData.getConversationStore().getConversationByLocusId(locusId) == null) {
+            return;
+        }
+        EventHistoryImpl eventHistory = packageData.getEventStore().getOrCreateEventHistory(
+                EventStore.CATEGORY_LOCUS_ID_BASED, locusId.getId());
+        eventHistory.addEvent(event);
+    }
+}
diff --git a/services/people/java/com/android/server/people/data/UserData.java b/services/people/java/com/android/server/people/data/UserData.java
index 4e8fd16..7ca4b6c 100644
--- a/services/people/java/com/android/server/people/data/UserData.java
+++ b/services/people/java/com/android/server/people/data/UserData.java
@@ -19,10 +19,13 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.UserIdInt;
+import android.os.Environment;
 import android.text.TextUtils;
 import android.util.ArrayMap;
 
+import java.io.File;
 import java.util.Map;
+import java.util.concurrent.ScheduledExecutorService;
 import java.util.function.Consumer;
 
 /** The data associated with a user profile. */
@@ -30,6 +33,12 @@
 
     private final @UserIdInt int mUserId;
 
+    private final File mPerUserPeopleDataDir;
+
+    private final ScheduledExecutorService mScheduledExecutorService;
+
+    private final ContactsQueryHelper mHelper;
+
     private boolean mIsUnlocked;
 
     private Map<String, PackageData> mPackageDataMap = new ArrayMap<>();
@@ -40,8 +49,12 @@
     @Nullable
     private String mDefaultSmsApp;
 
-    UserData(@UserIdInt int userId) {
+    UserData(@UserIdInt int userId, @NonNull ScheduledExecutorService scheduledExecutorService,
+            ContactsQueryHelper helper) {
         mUserId = userId;
+        mPerUserPeopleDataDir = new File(Environment.getDataSystemCeDirectory(mUserId), "people");
+        mScheduledExecutorService = scheduledExecutorService;
+        mHelper = helper;
     }
 
     @UserIdInt int getUserId() {
@@ -56,6 +69,13 @@
 
     void setUserUnlocked() {
         mIsUnlocked = true;
+
+        // Ensures per user root directory for people data is present, and attempt to load
+        // data from disk.
+        mPerUserPeopleDataDir.mkdirs();
+        for (PackageData packageData : mPackageDataMap.values()) {
+            packageData.loadFromDisk();
+        }
     }
 
     void setUserStopped() {
@@ -84,6 +104,14 @@
         return mPackageDataMap.get(packageName);
     }
 
+    /** Deletes the specified package data. */
+    void deletePackageData(@NonNull String packageName) {
+        PackageData packageData = mPackageDataMap.remove(packageName);
+        if (packageData != null) {
+            packageData.onDestroy();
+        }
+    }
+
     void setDefaultDialer(@Nullable String packageName) {
         mDefaultDialer = packageName;
     }
@@ -103,7 +131,8 @@
     }
 
     private PackageData createPackageData(String packageName) {
-        return new PackageData(packageName, mUserId, this::isDefaultDialer, this::isDefaultSmsApp);
+        return new PackageData(packageName, mUserId, this::isDefaultDialer, this::isDefaultSmsApp,
+                mScheduledExecutorService, mPerUserPeopleDataDir, mHelper);
     }
 
     private boolean isDefaultDialer(String packageName) {
diff --git a/services/people/java/com/android/server/people/prediction/AppTargetPredictor.java b/services/people/java/com/android/server/people/prediction/AppTargetPredictor.java
index 44f3e35..19cf8af 100644
--- a/services/people/java/com/android/server/people/prediction/AppTargetPredictor.java
+++ b/services/people/java/com/android/server/people/prediction/AppTargetPredictor.java
@@ -18,6 +18,7 @@
 
 import android.annotation.MainThread;
 import android.annotation.NonNull;
+import android.annotation.UserIdInt;
 import android.annotation.WorkerThread;
 import android.app.prediction.AppPredictionContext;
 import android.app.prediction.AppTarget;
@@ -42,25 +43,28 @@
     /** Creates a {@link AppTargetPredictor} instance based on the prediction context. */
     public static AppTargetPredictor create(@NonNull AppPredictionContext predictionContext,
             @NonNull Consumer<List<AppTarget>> updatePredictionsMethod,
-            @NonNull DataManager dataManager) {
+            @NonNull DataManager dataManager, @UserIdInt int callingUserId) {
         if (UI_SURFACE_SHARE.equals(predictionContext.getUiSurface())) {
             return new ShareTargetPredictor(
-                    predictionContext, updatePredictionsMethod, dataManager);
+                    predictionContext, updatePredictionsMethod, dataManager, callingUserId);
         }
-        return new AppTargetPredictor(predictionContext, updatePredictionsMethod, dataManager);
+        return new AppTargetPredictor(
+                predictionContext, updatePredictionsMethod, dataManager, callingUserId);
     }
 
     private final AppPredictionContext mPredictionContext;
     private final Consumer<List<AppTarget>> mUpdatePredictionsMethod;
     private final DataManager mDataManager;
+    final int mCallingUserId;
     private final ExecutorService mCallbackExecutor;
 
     AppTargetPredictor(@NonNull AppPredictionContext predictionContext,
             @NonNull Consumer<List<AppTarget>> updatePredictionsMethod,
-            @NonNull DataManager dataManager) {
+            @NonNull DataManager dataManager, @UserIdInt int callingUserId) {
         mPredictionContext = predictionContext;
         mUpdatePredictionsMethod = updatePredictionsMethod;
         mDataManager = dataManager;
+        mCallingUserId = callingUserId;
         mCallbackExecutor = Executors.newSingleThreadExecutor();
     }
 
diff --git a/services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java b/services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java
index 280ced3..90d8216 100644
--- a/services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java
+++ b/services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java
@@ -19,6 +19,7 @@
 import android.annotation.MainThread;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.UserIdInt;
 import android.annotation.WorkerThread;
 import android.app.prediction.AppPredictionContext;
 import android.app.prediction.AppTarget;
@@ -45,8 +46,8 @@
 
     ShareTargetPredictor(@NonNull AppPredictionContext predictionContext,
             @NonNull Consumer<List<AppTarget>> updatePredictionsMethod,
-            @NonNull DataManager dataManager) {
-        super(predictionContext, updatePredictionsMethod, dataManager);
+            @NonNull DataManager dataManager, @UserIdInt int callingUserId) {
+        super(predictionContext, updatePredictionsMethod, dataManager, callingUserId);
         mIntentFilter = predictionContext.getExtras().getParcelable(
                 ChooserActivity.APP_PREDICTION_INTENT_FILTER_KEY);
     }
@@ -84,7 +85,7 @@
     List<ShareTarget> getShareTargets() {
         List<ShareTarget> shareTargets = new ArrayList<>();
         List<ShareShortcutInfo> shareShortcuts =
-                getDataManager().getShareShortcuts(mIntentFilter);
+                getDataManager().getShareShortcuts(mIntentFilter, mCallingUserId);
 
         for (ShareShortcutInfo shareShortcut : shareShortcuts) {
             ShortcutInfo shortcutInfo = shareShortcut.getShortcutInfo();
diff --git a/services/robotests/src/com/android/server/location/GnssAntennaInfoProviderTest.java b/services/robotests/src/com/android/server/location/GnssAntennaInfoProviderTest.java
new file mode 100644
index 0000000..76f7ad6
--- /dev/null
+++ b/services/robotests/src/com/android/server/location/GnssAntennaInfoProviderTest.java
@@ -0,0 +1,94 @@
+/*
+ * 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.location;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.platform.test.annotations.Presubmit;
+
+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;
+
+/**
+ * Unit tests for {@link GnssAntennaInfoProvider}.
+ */
+@RunWith(RobolectricTestRunner.class)
+@Presubmit
+public class GnssAntennaInfoProviderTest {
+    @Mock
+    private GnssAntennaInfoProvider.GnssAntennaInfoProviderNative mMockNative;
+    private GnssAntennaInfoProvider mTestProvider;
+
+    /** Setup. */
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mMockNative.startAntennaInfoListening()).thenReturn(true);
+        when(mMockNative.stopAntennaInfoListening()).thenReturn(true);
+
+        mTestProvider = new GnssAntennaInfoProvider(RuntimeEnvironment.application,
+                new Handler(Looper.myLooper()), mMockNative) {
+            @Override
+            public boolean isGpsEnabled() {
+                return true;
+            }
+        };
+    }
+
+    /**
+     * Test that registerWithService calls the native startAntennaInfoListening method.
+     */
+    @Test
+    public void register_nativeStarted() {
+        mTestProvider.registerWithService();
+        verify(mMockNative, times(1)).startAntennaInfoListening();
+    }
+
+    /**
+     * Test that unregisterFromService calls the native stopAntennaInfoListening method.
+     */
+    @Test
+    public void unregister_nativeStopped() {
+        mTestProvider.registerWithService();
+        mTestProvider.unregisterFromService();
+        verify(mMockNative, times(1)).stopAntennaInfoListening();
+    }
+
+    /**
+     * Test that GnssAntennaInfoProvider.isAntennaInfoSupported() returns the result of the
+     * native isAntennaInfoSupported method.
+     */
+    @Test
+    public void isSupported_nativeIsSupported() {
+        when(mMockNative.isAntennaInfoSupported()).thenReturn(true);
+        assertThat(mTestProvider.isAvailableInPlatform()).isTrue();
+
+        when(mMockNative.isAntennaInfoSupported()).thenReturn(false);
+        assertThat(mTestProvider.isAvailableInPlatform()).isFalse();
+    }
+}
diff --git a/services/robotests/src/com/android/server/location/LocationRequestStatisticsTest.java b/services/robotests/src/com/android/server/location/LocationRequestStatisticsTest.java
index 4cbdbd17..2d0fe58 100644
--- a/services/robotests/src/com/android/server/location/LocationRequestStatisticsTest.java
+++ b/services/robotests/src/com/android/server/location/LocationRequestStatisticsTest.java
@@ -35,6 +35,7 @@
 @RunWith(RobolectricTestRunner.class)
 @Presubmit
 public class LocationRequestStatisticsTest {
+    private static final String FEATURE_ID = "featureId";
 
     /**
      * Check adding and removing requests & strings
@@ -43,17 +44,18 @@
     public void testRequestSummary() {
         LocationRequestStatistics.RequestSummary summary =
                 new LocationRequestStatistics.RequestSummary(
-                "com.example", "gps", 1000);
+                        "com.example", FEATURE_ID, "gps", 1000);
         StringWriter stringWriter = new StringWriter();
         summary.dump(new IndentingPrintWriter(new PrintWriter(stringWriter), "  "), 1234);
         assertThat(stringWriter.toString()).startsWith("At");
 
         StringWriter stringWriterRemove = new StringWriter();
         summary = new LocationRequestStatistics.RequestSummary(
-                "com.example", "gps",
+                "com.example", "gps", FEATURE_ID,
                 LocationRequestStatistics.RequestSummary.REQUEST_ENDED_INTERVAL);
         summary.dump(new IndentingPrintWriter(new PrintWriter(stringWriterRemove), "  "), 2345);
         assertThat(stringWriterRemove.toString()).contains("-");
+        assertThat(stringWriterRemove.toString()).contains(FEATURE_ID);
     }
 
     /**
@@ -62,11 +64,11 @@
     @Test
     public void testSummaryList() {
         LocationRequestStatistics statistics = new LocationRequestStatistics();
-        statistics.history.addRequest("com.example", "gps", 1000);
+        statistics.history.addRequest("com.example", FEATURE_ID, "gps", 1000);
         assertThat(statistics.history.mList.size()).isEqualTo(1);
         // Try (not) to overflow
         for (int i = 0; i < LocationRequestStatistics.RequestSummaryLimitedHistory.MAX_SIZE; i++) {
-            statistics.history.addRequest("com.example", "gps", 1000);
+            statistics.history.addRequest("com.example", FEATURE_ID, "gps", 1000);
         }
         assertThat(statistics.history.mList.size()).isEqualTo(
                 LocationRequestStatistics.RequestSummaryLimitedHistory.MAX_SIZE);
diff --git a/services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java b/services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java
index 1a7b1d3..fa0febd 100644
--- a/services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java
+++ b/services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java
@@ -46,8 +46,6 @@
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManagerInternal;
 import android.content.pm.ResolveInfo;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.PackageImpl;
 import android.os.Process;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -55,7 +53,12 @@
 
 import androidx.test.core.app.ApplicationProvider;
 
+import com.android.internal.util.FunctionalUtils.ThrowingRunnable;
+import com.android.internal.util.FunctionalUtils.ThrowingSupplier;
 import com.android.server.LocalServices;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
 import com.android.server.testing.shadows.ShadowApplicationPackageManager;
 import com.android.server.testing.shadows.ShadowUserManager;
 import com.android.server.wm.ActivityTaskManagerInternal;
@@ -133,7 +136,8 @@
                         eq(userId)))
                 .thenReturn(packageInfo);
         when(mPackageManagerInternal.getPackage(uid))
-                .thenReturn(PackageImpl.forParsing(CROSS_PROFILE_APP_PACKAGE_NAME));
+                .thenReturn(((ParsedPackage) PackageImpl.forTesting(CROSS_PROFILE_APP_PACKAGE_NAME)
+                        .hideAsParsed()).hideAsFinal());
     }
 
     private PackageInfo buildTestPackageInfo() {
@@ -190,6 +194,8 @@
     public void grantPermissions() {
         grantPermissions(
                 Manifest.permission.MANAGE_APP_OPS_MODES,
+                Manifest.permission.UPDATE_APP_OPS_STATS,
+                Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES,
                 Manifest.permission.INTERACT_ACROSS_USERS,
                 Manifest.permission.INTERACT_ACROSS_USERS_FULL);
     }
@@ -213,9 +219,26 @@
     }
 
     @Test
+    public void setInteractAcrossProfilesAppOp_noPermissions_throwsSecurityException() {
+        denyPermissions(
+                Manifest.permission.MANAGE_APP_OPS_MODES,
+                Manifest.permission.UPDATE_APP_OPS_STATS,
+                Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES,
+                Manifest.permission.INTERACT_ACROSS_USERS,
+                Manifest.permission.INTERACT_ACROSS_USERS_FULL);
+        try {
+            mCrossProfileAppsServiceImpl.setInteractAcrossProfilesAppOp(
+                    CROSS_PROFILE_APP_PACKAGE_NAME, MODE_ALLOWED);
+            fail();
+        } catch (SecurityException expected) {}
+    }
+
+    @Test
     public void setInteractAcrossProfilesAppOp_missingInteractAcrossUsersAndFull_throwsSecurityException() {
-        denyPermissions(Manifest.permission.INTERACT_ACROSS_USERS);
-        denyPermissions(Manifest.permission.INTERACT_ACROSS_USERS_FULL);
+        denyPermissions(
+                Manifest.permission.INTERACT_ACROSS_USERS,
+                Manifest.permission.INTERACT_ACROSS_USERS_FULL);
+        grantPermissions(Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES);
         try {
             mCrossProfileAppsServiceImpl.setInteractAcrossProfilesAppOp(
                     CROSS_PROFILE_APP_PACKAGE_NAME, MODE_ALLOWED);
@@ -231,8 +254,38 @@
     }
 
     @Test
+    public void setInteractAcrossProfilesAppOp_configureInteractAcrossProfilesPermissionWithoutAppOpsPermissions_setsAppOp() {
+        denyPermissions(
+                Manifest.permission.MANAGE_APP_OPS_MODES,
+                Manifest.permission.UPDATE_APP_OPS_STATS);
+        grantPermissions(
+                Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES,
+                Manifest.permission.INTERACT_ACROSS_USERS);
+
+        mCrossProfileAppsServiceImpl.setInteractAcrossProfilesAppOp(
+                CROSS_PROFILE_APP_PACKAGE_NAME, MODE_ALLOWED);
+
+        assertThat(getCrossProfileAppOp()).isEqualTo(MODE_ALLOWED);
+    }
+
+    @Test
+    public void setInteractAcrossProfilesAppOp_appOpsPermissionsWithoutConfigureInteractAcrossProfilesPermission_setsAppOp() {
+        denyPermissions(Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES);
+        grantPermissions(
+                Manifest.permission.MANAGE_APP_OPS_MODES,
+                Manifest.permission.UPDATE_APP_OPS_STATS,
+                Manifest.permission.INTERACT_ACROSS_USERS);
+
+        mCrossProfileAppsServiceImpl.setInteractAcrossProfilesAppOp(
+                CROSS_PROFILE_APP_PACKAGE_NAME, MODE_ALLOWED);
+
+        assertThat(getCrossProfileAppOp()).isEqualTo(MODE_ALLOWED);
+    }
+
+    @Test
     public void setInteractAcrossProfilesAppOp_setsAppOpWithUsersAndWithoutFull() {
         denyPermissions(Manifest.permission.INTERACT_ACROSS_USERS_FULL);
+        grantPermissions(Manifest.permission.INTERACT_ACROSS_USERS);
         mCrossProfileAppsServiceImpl.setInteractAcrossProfilesAppOp(
                 CROSS_PROFILE_APP_PACKAGE_NAME, MODE_ALLOWED);
         assertThat(getCrossProfileAppOp()).isEqualTo(MODE_ALLOWED);
@@ -241,6 +294,7 @@
     @Test
     public void setInteractAcrossProfilesAppOp_setsAppOpWithFullAndWithoutUsers() {
         denyPermissions(Manifest.permission.INTERACT_ACROSS_USERS);
+        grantPermissions(Manifest.permission.INTERACT_ACROSS_USERS_FULL);
         mCrossProfileAppsServiceImpl.setInteractAcrossProfilesAppOp(
                 CROSS_PROFILE_APP_PACKAGE_NAME, MODE_ALLOWED);
         assertThat(getCrossProfileAppOp()).isEqualTo(MODE_ALLOWED);
@@ -445,7 +499,9 @@
 
     private void declareCrossProfileAttributeOnCrossProfileApp(boolean value) {
         mockCrossProfileAndroidPackage(
-                PackageImpl.forParsing(CROSS_PROFILE_APP_PACKAGE_NAME).setCrossProfile(value));
+                ((ParsedPackage) PackageImpl.forTesting(CROSS_PROFILE_APP_PACKAGE_NAME)
+                        .setCrossProfile(value)
+                        .hideAsParsed()).hideAsFinal());
     }
 
     private class TestInjector implements CrossProfileAppsServiceImpl.Injector {
@@ -479,6 +535,16 @@
         public void restoreCallingIdentity(long token) {}
 
         @Override
+        public void withCleanCallingIdentity(ThrowingRunnable action) {
+            action.run();
+        }
+
+        @Override
+        public <T> T withCleanCallingIdentity(ThrowingSupplier<T> action) {
+            return action.get();
+        }
+
+        @Override
         public UserManager getUserManager() {
             return mUserManager;
         }
diff --git a/services/robotests/src/com/android/server/testing/shadows/ShadowPerformUnifiedRestoreTask.java b/services/robotests/src/com/android/server/testing/shadows/ShadowPerformUnifiedRestoreTask.java
index 223a98b..8daef5f 100644
--- a/services/robotests/src/com/android/server/testing/shadows/ShadowPerformUnifiedRestoreTask.java
+++ b/services/robotests/src/com/android/server/testing/shadows/ShadowPerformUnifiedRestoreTask.java
@@ -67,8 +67,7 @@
             int pmToken,
             boolean isFullSystemRestore,
             @Nullable String[] filterSet,
-            OnTaskFinishedListener listener,
-            Map<String, Set<String>> excludedKeys) {
+            OnTaskFinishedListener listener) {
         mBackupManagerService = backupManagerService;
         mPackage = targetPackage;
         mIsFullSystemRestore = isFullSystemRestore;
diff --git a/services/tests/mockingservicestests/Android.bp b/services/tests/mockingservicestests/Android.bp
index 339ff6b..ff34ebd 100644
--- a/services/tests/mockingservicestests/Android.bp
+++ b/services/tests/mockingservicestests/Android.bp
@@ -24,6 +24,7 @@
         "service-permission",
         "service-blobstore",
         "androidx.test.runner",
+        "androidx.test.ext.truth",
         "mockito-target-extended-minus-junit4",
         "platform-test-annotations",
         "truth-prebuilt",
diff --git a/services/tests/servicestests/assets/AppOpsUpgradeTest/appops-unversioned.xml b/services/tests/mockingservicestests/assets/AppOpsUpgradeTest/appops-unversioned.xml
similarity index 100%
rename from services/tests/servicestests/assets/AppOpsUpgradeTest/appops-unversioned.xml
rename to services/tests/mockingservicestests/assets/AppOpsUpgradeTest/appops-unversioned.xml
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/ApplicationExitInfoTest.java b/services/tests/mockingservicestests/src/com/android/server/am/ApplicationExitInfoTest.java
index 8d2a152..6083ce34 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/ApplicationExitInfoTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/ApplicationExitInfoTest.java
@@ -174,12 +174,12 @@
         final int app1ConnectiongGroup = 10;
         final int app1UidUser2 = 1010123;
         final int app1PidUser2 = 12347;
-        final int app1Pss1 = 34567;
-        final int app1Rss1 = 45678;
-        final int app1Pss2 = 34568;
-        final int app1Rss2 = 45679;
-        final int app1Pss3 = 34569;
-        final int app1Rss3 = 45680;
+        final long app1Pss1 = 34567;
+        final long app1Rss1 = 45678;
+        final long app1Pss2 = 34568;
+        final long app1Rss2 = 45679;
+        final long app1Pss3 = 34569;
+        final long app1Rss3 = 45680;
         final String app1ProcessName = "com.android.test.stub1:process";
         final String app1PackageName = "com.android.test.stub1";
 
@@ -344,8 +344,8 @@
         // Case 4: Create a process from another package with kill from lmkd
         final int app2UidUser2 = 1010234;
         final int app2PidUser2 = 12348;
-        final int app2Pss1 = 54321;
-        final int app2Rss1 = 65432;
+        final long app2Pss1 = 54321;
+        final long app2Rss1 = 65432;
         final String app2ProcessName = "com.android.test.stub2:process";
         final String app2PackageName = "com.android.test.stub2";
 
@@ -402,8 +402,8 @@
         final int app3UidUser2 = 1010345;
         final int app3PidUser2 = 12349;
         final int app3ConnectiongGroup = 4;
-        final int app3Pss1 = 54320;
-        final int app3Rss1 = 65430;
+        final long app3Pss1 = 54320;
+        final long app3Rss1 = 65430;
         final String app3ProcessName = "com.android.test.stub3:process";
         final String app3PackageName = "com.android.test.stub3";
         final String app3Description = "native crash";
@@ -529,8 +529,8 @@
         final int app3Uid = 10345;
         final int app3IsolatedUid = 99001; // it's an isolated process
         final int app3Pid = 12350;
-        final int app3Pss2 = 23232;
-        final int app3Rss2 = 32323;
+        final long app3Pss2 = 23232;
+        final long app3Rss2 = 32323;
         final String app3Description2 = "force close";
 
         sleep(1);
@@ -618,8 +618,8 @@
 
         sleep(1);
         final int app1IsolatedUidUser2 = 1099002; // isolated uid
-        final int app1Pss4 = 34343;
-        final int app1Rss4 = 43434;
+        final long app1Pss4 = 34343;
+        final long app1Rss4 = 43434;
         final long now8 = System.currentTimeMillis();
         sigNum = OsConstants.SIGKILL;
         doReturn(new Pair<Long, Object>(now8, makeSignalStatus(sigNum)))
@@ -673,8 +673,8 @@
         sleep(1);
         final int app1Pid2User2 = 56565;
         final int app1IsolatedUid2User2 = 1099003; // isolated uid
-        final int app1Pss5 = 34344;
-        final int app1Rss5 = 43435;
+        final long app1Pss5 = 34344;
+        final long app1Rss5 = 43435;
         final long now9 = System.currentTimeMillis();
         sigNum = OsConstants.SIGKILL;
         doReturn(new Pair<Long, Object>(now9, makeSignalStatus(sigNum)))
@@ -831,7 +831,7 @@
     }
 
     private ProcessRecord makeProcessRecord(int pid, int uid, int packageUid, Integer definingUid,
-            int connectionGroup, int procState, int pss, int rss,
+            int connectionGroup, int procState, long pss, long rss,
             String processName, String packageName) {
         ApplicationInfo ai = new ApplicationInfo();
         ai.packageName = packageName;
@@ -847,8 +847,8 @@
         app.connectionGroup = connectionGroup;
         app.setProcState = procState;
         app.lastMemInfo = spy(new Debug.MemoryInfo());
-        doReturn(pss).when(app.lastMemInfo).getTotalPss();
-        doReturn(rss).when(app.lastMemInfo).getTotalRss();
+        doReturn((int) pss).when(app.lastMemInfo).getTotalPss();
+        doReturn((int) rss).when(app.lastMemInfo).getTotalRss();
         return app;
     }
 
@@ -856,7 +856,7 @@
             Long timestamp, Integer pid, Integer uid, Integer packageUid,
             Integer definingUid, String processName, Integer connectionGroup,
             Integer reason, Integer subReason, Integer status,
-            Integer pss, Integer rss, Integer importance, String description) {
+            Long pss, Long rss, Integer importance, String description) {
         assertNotNull(info);
 
         if (timestamp != null) {
@@ -892,10 +892,10 @@
             assertEquals(status.intValue(), info.getStatus());
         }
         if (pss != null) {
-            assertEquals(pss.intValue(), info.getPss());
+            assertEquals(pss.longValue(), info.getPss());
         }
         if (rss != null) {
-            assertEquals(rss.intValue(), info.getRss());
+            assertEquals(rss.longValue(), info.getRss());
         }
         if (importance != null) {
             assertEquals(importance.intValue(), info.getImportance());
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/PendingIntentControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/am/PendingIntentControllerTest.java
index 3975f0b..e3453a0 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/PendingIntentControllerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/PendingIntentControllerTest.java
@@ -50,6 +50,7 @@
 @RunWith(AndroidJUnit4.class)
 public class PendingIntentControllerTest {
     private static final String TEST_PACKAGE_NAME = "test-package-1";
+    private static final String TEST_FEATURE_ID = "test-feature-1";
     private static final int TEST_CALLING_UID = android.os.Process.myUid();
     private static final Intent[] TEST_INTENTS = new Intent[]{new Intent("com.test.intent")};
 
@@ -87,8 +88,8 @@
 
     private PendingIntentRecord createPendingIntentRecord(int flags) {
         return mPendingIntentController.getIntentSender(ActivityManager.INTENT_SENDER_BROADCAST,
-                TEST_PACKAGE_NAME, TEST_CALLING_UID, 0, null, null, 0, TEST_INTENTS, null, flags,
-                null);
+                TEST_PACKAGE_NAME, TEST_FEATURE_ID, TEST_CALLING_UID, 0, null, null, 0,
+                TEST_INTENTS, null, flags, null);
     }
 
     @Test
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 155de3b..959dc05 100644
--- a/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsServiceTest.java
@@ -50,7 +50,6 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.pm.PackageManagerInternal;
-import android.content.pm.parsing.AndroidPackage;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.Process;
@@ -63,6 +62,7 @@
 
 import com.android.dx.mockito.inline.extended.StaticMockitoSession;
 import com.android.server.LocalServices;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import org.junit.After;
 import org.junit.Before;
@@ -101,9 +101,8 @@
     private StaticMockitoSession mMockingSession;
 
     private void setupAppOpsService() {
-        mAppOpsService = new AppOpsService(mAppOpsFile, mHandler);
+        mAppOpsService = new AppOpsService(mAppOpsFile, mHandler, spy(sContext));
         mAppOpsService.mHistoricalRegistry.systemReady(sContext.getContentResolver());
-        mAppOpsService.mContext = spy(sContext);
 
         // Always approve all permission checks
         doNothing().when(mAppOpsService.mContext).enforcePermission(anyString(), anyInt(),
diff --git a/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsUpgradeTest.java b/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsUpgradeTest.java
new file mode 100644
index 0000000..e48b671
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsUpgradeTest.java
@@ -0,0 +1,205 @@
+/*
+ * 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.appop;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.res.AssetManager;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.util.Log;
+import android.util.SparseArray;
+import android.util.Xml;
+
+import androidx.test.InstrumentationRegistry;
+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.xmlpull.v1.XmlPullParser;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * Tests app ops version upgrades
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class AppOpsUpgradeTest {
+    private static final String TAG = AppOpsUpgradeTest.class.getSimpleName();
+    private static final String APP_OPS_UNVERSIONED_ASSET_PATH =
+            "AppOpsUpgradeTest/appops-unversioned.xml";
+    private static final String APP_OPS_FILENAME = "appops-test.xml";
+    private static final int NON_DEFAULT_OPS_IN_FILE = 4;
+    private static final int CURRENT_VERSION = 1;
+
+    private File mAppOpsFile;
+    private Context mContext;
+    private Handler mHandler;
+
+    private void extractAppOpsFile() {
+        mAppOpsFile.getParentFile().mkdirs();
+        if (mAppOpsFile.exists()) {
+            mAppOpsFile.delete();
+        }
+        try (FileOutputStream out = new FileOutputStream(mAppOpsFile);
+             InputStream in = mContext.getAssets().open(APP_OPS_UNVERSIONED_ASSET_PATH,
+                     AssetManager.ACCESS_BUFFER)) {
+            byte[] buffer = new byte[4096];
+            int bytesRead;
+            while ((bytesRead = in.read(buffer)) >= 0) {
+                out.write(buffer, 0, bytesRead);
+            }
+            out.flush();
+            Log.d(TAG, "Successfully copied xml to " + mAppOpsFile.getAbsolutePath());
+        } catch (IOException exc) {
+            Log.e(TAG, "Exception while copying appops xml", exc);
+            fail();
+        }
+    }
+
+    private void assertSameModes(SparseArray<AppOpsService.UidState> uidStates, int op1, int op2) {
+        int numberOfNonDefaultOps = 0;
+        final int defaultModeOp1 = AppOpsManager.opToDefaultMode(op1);
+        final int defaultModeOp2 = AppOpsManager.opToDefaultMode(op2);
+        for(int i = 0; i < uidStates.size(); i++) {
+            final AppOpsService.UidState uidState = uidStates.valueAt(i);
+            if (uidState.opModes != null) {
+                final int uidMode1 = uidState.opModes.get(op1, defaultModeOp1);
+                final int uidMode2 = uidState.opModes.get(op2, defaultModeOp2);
+                assertEquals(uidMode1, uidMode2);
+                if (uidMode1 != defaultModeOp1) {
+                    numberOfNonDefaultOps++;
+                }
+            }
+            if (uidState.pkgOps == null) {
+                continue;
+            }
+            for (int j = 0; j < uidState.pkgOps.size(); j++) {
+                final AppOpsService.Ops ops = uidState.pkgOps.valueAt(j);
+                if (ops == null) {
+                    continue;
+                }
+                final AppOpsService.Op _op1 = ops.get(op1);
+                final AppOpsService.Op _op2 = ops.get(op2);
+                final int mode1 = (_op1 == null) ? defaultModeOp1 : _op1.getMode();
+                final int mode2 = (_op2 == null) ? defaultModeOp2 : _op2.getMode();
+                assertEquals(mode1, mode2);
+                if (mode1 != defaultModeOp1) {
+                    numberOfNonDefaultOps++;
+                }
+            }
+        }
+        assertEquals(numberOfNonDefaultOps, NON_DEFAULT_OPS_IN_FILE);
+    }
+
+    @Before
+    public void setUp() {
+        mContext = InstrumentationRegistry.getTargetContext();
+        mAppOpsFile = new File(mContext.getFilesDir(), APP_OPS_FILENAME);
+        extractAppOpsFile();
+        HandlerThread handlerThread = new HandlerThread(TAG);
+        handlerThread.start();
+        mHandler = new Handler(handlerThread.getLooper());
+    }
+
+    @Test
+    public void testUpgradeFromNoVersion() throws Exception {
+        AppOpsDataParser parser = new AppOpsDataParser(mAppOpsFile);
+        assertTrue(parser.parse());
+        assertEquals(AppOpsDataParser.NO_VERSION, parser.mVersion);
+
+        // Use mock context and package manager to fake permision package manager calls.
+        Context testContext = spy(mContext);
+
+        // Pretent everybody has all permissions
+        doNothing().when(testContext).enforcePermission(anyString(), anyInt(), anyInt(),
+                nullable(String.class));
+
+        PackageManager testPM = mock(PackageManager.class);
+        when(testContext.getPackageManager()).thenReturn(testPM);
+
+        // Stub out package calls to disable AppOpsService#updatePermissionRevokedCompat
+        when(testPM.getPackagesForUid(anyInt())).thenReturn(null);
+
+        AppOpsService testService = spy(
+                new AppOpsService(mAppOpsFile, mHandler, testContext)); // trigger upgrade
+        assertSameModes(testService.mUidStates, AppOpsManager.OP_RUN_IN_BACKGROUND,
+                AppOpsManager.OP_RUN_ANY_IN_BACKGROUND);
+        mHandler.removeCallbacks(testService.mWriteRunner);
+        testService.writeState();
+        assertTrue(parser.parse());
+        assertEquals(CURRENT_VERSION, parser.mVersion);
+    }
+
+    /**
+     * Class to parse data from the appops xml. Currently only parses and holds the version number.
+     * Other fields may be added as and when required for testing.
+     */
+    private static final class AppOpsDataParser {
+        static final int NO_VERSION = -1;
+        int mVersion;
+        private File mFile;
+
+        AppOpsDataParser(File file) {
+            mFile = file;
+            mVersion = NO_VERSION;
+        }
+
+        boolean parse() {
+            try (FileInputStream stream = new FileInputStream(mFile)) {
+                XmlPullParser parser = Xml.newPullParser();
+                parser.setInput(stream, StandardCharsets.UTF_8.name());
+                int type;
+                while ((type = parser.next()) != XmlPullParser.START_TAG
+                        && type != XmlPullParser.END_DOCUMENT) {
+                    ;
+                }
+                if (type != XmlPullParser.START_TAG) {
+                    throw new IllegalStateException("no start tag found");
+                }
+                final String versionString = parser.getAttributeValue(null, "v");
+                if (versionString != null) {
+                    mVersion = Integer.parseInt(versionString);
+                }
+            } catch (Exception e) {
+                Log.e(TAG, "Failed while parsing test appops xml", e);
+                return false;
+            }
+            return true;
+        }
+    }
+}
diff --git a/services/tests/mockingservicestests/src/com/android/server/blob/BlobStoreManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/blob/BlobStoreManagerServiceTest.java
index 16dde42..e5450a9 100644
--- a/services/tests/mockingservicestests/src/com/android/server/blob/BlobStoreManagerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/blob/BlobStoreManagerServiceTest.java
@@ -149,7 +149,7 @@
         final BlobMetadata blobMetadata2 = createBlobMetadataMock(blobId2, blobFile2, false);
         mUserBlobs.put(blobHandle2, blobMetadata2);
 
-        mService.addKnownIdsForTest(sessionId1, sessionId2, sessionId3, sessionId4,
+        mService.addActiveIdsForTest(sessionId1, sessionId2, sessionId3, sessionId4,
                 blobId1, blobId2);
 
         // Invoke test method
@@ -180,8 +180,10 @@
         assertThat(mUserBlobs.get(blobHandle1)).isNotNull();
         assertThat(mUserBlobs.get(blobHandle2)).isNull();
 
-        assertThat(mService.getKnownIdsForTest()).containsExactly(
+        assertThat(mService.getActiveIdsForTest()).containsExactly(
                 sessionId2, sessionId3, blobId1);
+        assertThat(mService.getKnownIdsForTest()).containsExactly(
+                sessionId1, sessionId2, sessionId3, sessionId4, blobId1, blobId2);
     }
 
     @Test
@@ -198,12 +200,12 @@
         doReturn(String.valueOf(testId3)).when(file3).getName();
 
         doReturn(new File[] {file1, file2, file3}).when(mBlobsDir).listFiles();
-        mService.addKnownIdsForTest(testId1, testId3);
+        mService.addActiveIdsForTest(testId1, testId3);
 
         // Invoke test method
         mService.handleIdleMaintenanceLocked();
 
-        // Verify unknown blobs are delete
+        // Verify unknown blobs are deleted
         verify(file1, never()).delete();
         verify(file2).delete();
         verify(file3, never()).delete();
@@ -216,8 +218,8 @@
         doReturn(System.currentTimeMillis() - SESSION_EXPIRY_TIMEOUT_MILLIS + 1000)
                 .when(sessionFile1).lastModified();
         final long sessionId1 = 342;
-        final BlobHandle blobHandle1 = mock(BlobHandle.class);
-        doReturn(System.currentTimeMillis() - 1000).when(blobHandle1).getExpiryTimeMillis();
+        final BlobHandle blobHandle1 = BlobHandle.createWithSha256("digest1".getBytes(),
+                "label1", System.currentTimeMillis() - 1000, "tag1");
         final BlobStoreSession session1 = createBlobStoreSessionMock(TEST_PKG1, TEST_UID1,
                 sessionId1, sessionFile1, blobHandle1);
         mUserSessions.append(sessionId1, session1);
@@ -226,8 +228,8 @@
         doReturn(System.currentTimeMillis() - 20000)
                 .when(sessionFile2).lastModified();
         final long sessionId2 = 4597;
-        final BlobHandle blobHandle2 = mock(BlobHandle.class);
-        doReturn(System.currentTimeMillis() + 20000).when(blobHandle2).getExpiryTimeMillis();
+        final BlobHandle blobHandle2 = BlobHandle.createWithSha256("digest2".getBytes(),
+                "label2", System.currentTimeMillis() + 20000, "tag2");
         final BlobStoreSession session2 = createBlobStoreSessionMock(TEST_PKG2, TEST_UID2,
                 sessionId2, sessionFile2, blobHandle2);
         mUserSessions.append(sessionId2, session2);
@@ -236,13 +238,13 @@
         doReturn(System.currentTimeMillis() - SESSION_EXPIRY_TIMEOUT_MILLIS - 2000)
                 .when(sessionFile3).lastModified();
         final long sessionId3 = 9484;
-        final BlobHandle blobHandle3 = mock(BlobHandle.class);
-        doReturn(System.currentTimeMillis() + 30000).when(blobHandle3).getExpiryTimeMillis();
+        final BlobHandle blobHandle3 = BlobHandle.createWithSha256("digest3".getBytes(),
+                "label3", System.currentTimeMillis() + 30000, "tag3");
         final BlobStoreSession session3 = createBlobStoreSessionMock(TEST_PKG3, TEST_UID3,
                 sessionId3, sessionFile3, blobHandle3);
         mUserSessions.append(sessionId3, session3);
 
-        mService.addKnownIdsForTest(sessionId1, sessionId2, sessionId3);
+        mService.addActiveIdsForTest(sessionId1, sessionId2, sessionId3);
 
         // Invoke test method
         mService.handleIdleMaintenanceLocked();
@@ -255,7 +257,9 @@
         assertThat(mUserSessions.size()).isEqualTo(1);
         assertThat(mUserSessions.get(sessionId2)).isNotNull();
 
-        assertThat(mService.getKnownIdsForTest()).containsExactly(sessionId2);
+        assertThat(mService.getActiveIdsForTest()).containsExactly(sessionId2);
+        assertThat(mService.getKnownIdsForTest()).containsExactly(
+                sessionId1, sessionId2, sessionId3);
     }
 
     @Test
@@ -282,7 +286,7 @@
         final BlobMetadata blobMetadata3 = createBlobMetadataMock(blobId3, blobFile3, false);
         mUserBlobs.put(blobHandle3, blobMetadata3);
 
-        mService.addKnownIdsForTest(blobId1, blobId2, blobId3);
+        mService.addActiveIdsForTest(blobId1, blobId2, blobId3);
 
         // Invoke test method
         mService.handleIdleMaintenanceLocked();
@@ -295,7 +299,8 @@
         assertThat(mUserBlobs.size()).isEqualTo(1);
         assertThat(mUserBlobs.get(blobHandle2)).isNotNull();
 
-        assertThat(mService.getKnownIdsForTest()).containsExactly(blobId2);
+        assertThat(mService.getActiveIdsForTest()).containsExactly(blobId2);
+        assertThat(mService.getKnownIdsForTest()).containsExactly(blobId1, blobId2, blobId3);
     }
 
     private BlobStoreSession createBlobStoreSessionMock(String ownerPackageName, int ownerUid,
diff --git a/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java
index e0e374b..00495f3 100644
--- a/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java
@@ -683,8 +683,6 @@
                 mService.new MaybeReadyJobQueueFunctor();
         mService.mConstants.MIN_READY_NON_ACTIVE_JOBS_COUNT = 5;
         mService.mConstants.MAX_NON_ACTIVE_JOB_BATCH_DELAY_MS = HOUR_IN_MILLIS;
-        mService.mConstants.MIN_CONNECTIVITY_COUNT = 2;
-        mService.mConstants.MIN_READY_JOBS_COUNT = 1;
 
         JobStatus job = createJobStatus(
                 "testRareJobBatching",
diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java
index 64da6f6..d7a3cfd 100644
--- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java
@@ -19,6 +19,12 @@
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
+import static com.android.server.job.JobSchedulerService.ACTIVE_INDEX;
+import static com.android.server.job.JobSchedulerService.FREQUENT_INDEX;
+import static com.android.server.job.JobSchedulerService.NEVER_INDEX;
+import static com.android.server.job.JobSchedulerService.RARE_INDEX;
+import static com.android.server.job.JobSchedulerService.RESTRICTED_INDEX;
+import static com.android.server.job.JobSchedulerService.WORKING_INDEX;
 import static com.android.server.job.controllers.JobStatus.CONSTRAINT_BACKGROUND_NOT_RESTRICTED;
 import static com.android.server.job.controllers.JobStatus.CONSTRAINT_BATTERY_NOT_LOW;
 import static com.android.server.job.controllers.JobStatus.CONSTRAINT_CHARGING;
@@ -34,13 +40,16 @@
 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.app.job.JobInfo;
 import android.app.usage.UsageStatsManagerInternal;
 import android.content.ComponentName;
 import android.content.pm.PackageManagerInternal;
+import android.net.Uri;
 import android.os.SystemClock;
 import android.provider.MediaStore;
+import android.util.SparseIntArray;
 
 import androidx.test.runner.AndroidJUnit4;
 
@@ -52,6 +61,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
 import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
@@ -61,7 +71,12 @@
 @RunWith(AndroidJUnit4.class)
 public class JobStatusTest {
     private static final double DELTA = 0.00001;
+    private static final String TEST_PACKAGE = "job.test.package";
+    private static final ComponentName TEST_JOB_COMPONENT = new ComponentName(TEST_PACKAGE, "test");
+    private static final Uri TEST_MEDIA_URI = Uri.parse("content://media/path/to/media");
 
+    @Mock
+    private JobSchedulerInternal mJobSchedulerInternal;
     private MockitoSession mMockingSession;
 
     @Before
@@ -71,7 +86,7 @@
                 .strictness(Strictness.LENIENT)
                 .mockStatic(LocalServices.class)
                 .startMocking();
-        doReturn(mock(JobSchedulerInternal.class))
+        doReturn(mJobSchedulerInternal)
                 .when(() -> LocalServices.getService(JobSchedulerInternal.class));
         doReturn(mock(PackageManagerInternal.class))
                 .when(() -> LocalServices.getService(PackageManagerInternal.class));
@@ -94,6 +109,82 @@
         }
     }
 
+    private static void assertEffectiveBucketForMediaExemption(JobStatus jobStatus,
+            boolean exemptionGranted) {
+        final SparseIntArray effectiveBucket = new SparseIntArray();
+        effectiveBucket.put(ACTIVE_INDEX, ACTIVE_INDEX);
+        effectiveBucket.put(WORKING_INDEX, WORKING_INDEX);
+        effectiveBucket.put(FREQUENT_INDEX, exemptionGranted ? WORKING_INDEX : FREQUENT_INDEX);
+        effectiveBucket.put(RARE_INDEX, exemptionGranted ? WORKING_INDEX : RARE_INDEX);
+        effectiveBucket.put(NEVER_INDEX, NEVER_INDEX);
+        effectiveBucket.put(RESTRICTED_INDEX, RESTRICTED_INDEX);
+        for (int i = 0; i < effectiveBucket.size(); i++) {
+            jobStatus.setStandbyBucket(effectiveBucket.keyAt(i));
+            assertEquals(effectiveBucket.valueAt(i), jobStatus.getEffectiveStandbyBucket());
+        }
+    }
+
+    @Test
+    public void testMediaBackupExemption_lateConstraint() {
+        final JobInfo triggerContentJob = new JobInfo.Builder(42, TEST_JOB_COMPONENT)
+                .addTriggerContentUri(new JobInfo.TriggerContentUri(TEST_MEDIA_URI, 0))
+                .setOverrideDeadline(12)
+                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
+                .build();
+        when(mJobSchedulerInternal.getMediaBackupPackage()).thenReturn(TEST_PACKAGE);
+        assertEffectiveBucketForMediaExemption(createJobStatus(triggerContentJob), false);
+    }
+
+    @Test
+    public void testMediaBackupExemption_noConnectivityConstraint() {
+        final JobInfo triggerContentJob = new JobInfo.Builder(42, TEST_JOB_COMPONENT)
+                .addTriggerContentUri(new JobInfo.TriggerContentUri(TEST_MEDIA_URI, 0))
+                .build();
+        when(mJobSchedulerInternal.getMediaBackupPackage()).thenReturn(TEST_PACKAGE);
+        assertEffectiveBucketForMediaExemption(createJobStatus(triggerContentJob), false);
+    }
+
+    @Test
+    public void testMediaBackupExemption_noContentTriggerConstraint() {
+        final JobInfo networkJob = new JobInfo.Builder(42, TEST_JOB_COMPONENT)
+                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
+                .build();
+        when(mJobSchedulerInternal.getMediaBackupPackage()).thenReturn(TEST_PACKAGE);
+        assertEffectiveBucketForMediaExemption(createJobStatus(networkJob), false);
+    }
+
+    @Test
+    public void testMediaBackupExemption_wrongSourcePackage() {
+        final JobInfo networkContentJob = new JobInfo.Builder(42, TEST_JOB_COMPONENT)
+                .addTriggerContentUri(new JobInfo.TriggerContentUri(TEST_MEDIA_URI, 0))
+                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
+                .build();
+        when(mJobSchedulerInternal.getMediaBackupPackage()).thenReturn("not.test.package");
+        assertEffectiveBucketForMediaExemption(createJobStatus(networkContentJob), false);
+    }
+
+    @Test
+    public void testMediaBackupExemption_nonMediaUri() {
+        final Uri nonMediaUri = Uri.parse("content://not-media/any/path");
+        final JobInfo networkContentJob = new JobInfo.Builder(42, TEST_JOB_COMPONENT)
+                .addTriggerContentUri(new JobInfo.TriggerContentUri(TEST_MEDIA_URI, 0))
+                .addTriggerContentUri(new JobInfo.TriggerContentUri(nonMediaUri, 0))
+                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
+                .build();
+        when(mJobSchedulerInternal.getMediaBackupPackage()).thenReturn(TEST_PACKAGE);
+        assertEffectiveBucketForMediaExemption(createJobStatus(networkContentJob), false);
+    }
+
+    @Test
+    public void testMediaBackupExemptionGranted() {
+        final JobInfo networkContentJob = new JobInfo.Builder(42, TEST_JOB_COMPONENT)
+                .addTriggerContentUri(new JobInfo.TriggerContentUri(TEST_MEDIA_URI, 0))
+                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
+                .build();
+        when(mJobSchedulerInternal.getMediaBackupPackage()).thenReturn(TEST_PACKAGE);
+        assertEffectiveBucketForMediaExemption(createJobStatus(networkContentJob), true);
+    }
+
     @Test
     public void testFraction() throws Exception {
         final long now = JobSchedulerService.sElapsedRealtimeClock.millis();
diff --git a/services/tests/mockingservicestests/src/com/android/server/location/LocationFudgerTest.java b/services/tests/mockingservicestests/src/com/android/server/location/LocationFudgerTest.java
new file mode 100644
index 0000000..f2246da
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/location/LocationFudgerTest.java
@@ -0,0 +1,165 @@
+/*
+ * 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.location;
+
+import static androidx.test.ext.truth.location.LocationSubject.assertThat;
+
+import static com.android.server.location.LocationUtils.createLocation;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.location.Location;
+import android.platform.test.annotations.Presubmit;
+import android.util.Log;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.time.Clock;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Random;
+
+@Presubmit
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class LocationFudgerTest {
+
+    private static final String TAG = "LocationFudgerTest";
+
+    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);
+
+    private Random mRandom;
+
+    private LocationFudger mFudger;
+
+    @Before
+    public void setUp() {
+        long seed = System.currentTimeMillis();
+        Log.i(TAG, "location random seed: " + seed);
+
+        mRandom = new Random(seed);
+        mFudger = new LocationFudger(
+                ACCURACY_M,
+                Clock.fixed(Instant.ofEpochMilli(0), ZoneId.systemDefault()),
+                mRandom);
+    }
+
+    @Test
+    public void testCoarsen() {
+        // test that the coarsened location is not the same as the fine location and no leaks
+        for (int i = 0; i < 100; i++) {
+            Location fine = createLocation("test", mRandom);
+            fine.setBearing(1);
+            fine.setSpeed(1);
+            fine.setAltitude(1);
+
+            Location coarse = mFudger.createCoarse(fine);
+
+            assertThat(coarse).isNotNull();
+            assertThat(coarse).isNotSameAs(fine);
+            assertThat(coarse.hasBearing()).isFalse();
+            assertThat(coarse.hasSpeed()).isFalse();
+            assertThat(coarse.hasAltitude()).isFalse();
+            assertThat(coarse.getAccuracy()).isEqualTo(ACCURACY_M);
+            assertThat(coarse.distanceTo(fine)).isGreaterThan(1F);
+            assertThat(coarse).isNearby(fine, MAX_COARSE_FUDGE_DISTANCE_M);
+        }
+    }
+
+    @Test
+    public void testCoarsen_Consistent() {
+        // test that coarsening the same location will always return the same coarse location
+        // (and thus that averaging to eliminate random noise won't work)
+        for (int i = 0; i < 100; i++) {
+            Location fine = createLocation("test", mRandom);
+            Location coarse = mFudger.createCoarse(fine);
+            assertThat(mFudger.createCoarse(new Location(fine))).isEqualTo(coarse);
+            assertThat(mFudger.createCoarse(new Location(fine))).isEqualTo(coarse);
+        }
+    }
+
+    @Test
+    public void testCoarsen_AvgMany() {
+        // test that a set of locations normally distributed around the user's real location still
+        // cannot be easily average to reveal the user's real location
+
+        int passed = 0;
+        int iterations = 100;
+        for (int j = 0; j < iterations; j++) {
+            Location fine = createLocation("test", mRandom);
+
+            // generate a point cloud around a single location
+            ArrayList<Location> finePoints = new ArrayList<>(100);
+            for (int i = 0; i < 100; i++) {
+                finePoints.add(step(fine, mRandom.nextGaussian() * ACCURACY_M));
+            }
+
+            // generate the coarsened version of that point cloud
+            ArrayList<Location> coarsePoints = new ArrayList<>(100);
+            for (int i = 0; i < 100; i++) {
+                coarsePoints.add(mFudger.createCoarse(finePoints.get(i)));
+            }
+
+            double avgFineLatitude = finePoints.stream().mapToDouble(
+                    Location::getLatitude).average()
+                    .orElseThrow(IllegalStateException::new);
+            double avgFineLongitude = finePoints.stream().mapToDouble(
+                    Location::getLongitude).average()
+                    .orElseThrow(IllegalStateException::new);
+            Location fineAvg = createLocation("test", avgFineLatitude, avgFineLongitude, 0);
+
+            double avgCoarseLatitude = coarsePoints.stream().mapToDouble(
+                    Location::getLatitude).average()
+                    .orElseThrow(IllegalStateException::new);
+            double avgCoarseLongitude = coarsePoints.stream().mapToDouble(
+                    Location::getLongitude).average()
+                    .orElseThrow(IllegalStateException::new);
+            Location coarseAvg = createLocation("test", avgCoarseLatitude, avgCoarseLongitude, 0);
+
+            if (coarseAvg.distanceTo(fine) > fineAvg.distanceTo(fine)) {
+                passed++;
+            }
+        }
+
+        // very generally speaking, the closer the initial fine point is to a grid point, the more
+        // accurate the coarsened average will be. we use 70% as a lower bound by -very- roughly
+        // taking the area within a grid where we expect a reasonable percentage of points generated
+        // by step() to fall in another grid square. this likely doesn't have much mathematical
+        // validity, but it serves as a sanity test as least.
+        assertThat(passed / (double) iterations).isGreaterThan(.70);
+    }
+
+    // step in a random direction by distance - assume cartesian
+    private Location step(Location input, double distanceM) {
+        double radians = mRandom.nextDouble() * 2 * Math.PI;
+        double deltaXM = Math.cos(radians) * distanceM;
+        double deltaYM = Math.sin(radians) * distanceM;
+        return createLocation("test",
+                input.getLatitude() + deltaXM / APPROXIMATE_METERS_PER_DEGREE_AT_EQUATOR,
+                input.getLongitude() + deltaYM / APPROXIMATE_METERS_PER_DEGREE_AT_EQUATOR,
+                0);
+    }
+}
diff --git a/services/tests/mockingservicestests/src/com/android/server/location/LocationUtils.java b/services/tests/mockingservicestests/src/com/android/server/location/LocationUtils.java
new file mode 100644
index 0000000..decb3a6
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/location/LocationUtils.java
@@ -0,0 +1,51 @@
+/*
+ * 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.location;
+
+import android.location.Location;
+import android.os.SystemClock;
+
+import java.util.Random;
+
+public final class LocationUtils {
+
+    private static final double MIN_LATITUDE = -90D;
+    private static final double MAX_LATITUDE = 90D;
+    private static final double MIN_LONGITUDE = -180D;
+    private static final double MAX_LONGITUDE = 180D;
+
+    private static final float MIN_ACCURACY = 1;
+    private static final float MAX_ACCURACY = 100;
+
+    public static Location createLocation(String provider, Random random) {
+        return createLocation(provider,
+                MIN_LATITUDE + random.nextDouble() * (MAX_LATITUDE - MIN_LATITUDE),
+                MIN_LONGITUDE + random.nextDouble() * (MAX_LONGITUDE - MIN_LONGITUDE),
+                MIN_ACCURACY + random.nextFloat() * (MAX_ACCURACY - MIN_ACCURACY));
+    }
+
+    public static Location createLocation(String provider, double latitude, double longitude,
+            float accuracy) {
+        Location location = new Location(provider);
+        location.setLatitude(latitude);
+        location.setLongitude(longitude);
+        location.setAccuracy(accuracy);
+        location.setTime(System.currentTimeMillis());
+        location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
+        return location;
+    }
+}
diff --git a/services/tests/mockingservicestests/src/com/android/server/location/UserInfoHelperTest.java b/services/tests/mockingservicestests/src/com/android/server/location/UserInfoHelperTest.java
index 389fdf9..71e79b3 100644
--- a/services/tests/mockingservicestests/src/com/android/server/location/UserInfoHelperTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/location/UserInfoHelperTest.java
@@ -26,6 +26,7 @@
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
 import android.app.ActivityManager;
@@ -43,6 +44,7 @@
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.dx.mockito.inline.extended.StaticMockitoSession;
+import com.android.server.location.UserInfoHelper.UserListener;
 
 import org.junit.After;
 import org.junit.Before;
@@ -117,62 +119,88 @@
         }
     }
 
+    private void startUser(int userId) {
+        Intent intent = new Intent(Intent.ACTION_USER_STARTED).putExtra(Intent.EXTRA_USER_HANDLE,
+                userId);
+        for (BroadcastReceiver broadcastReceiver : mBroadcastReceivers) {
+            broadcastReceiver.onReceive(mContext, intent);
+        }
+    }
+
+    private void stopUser(int userId) {
+        Intent intent = new Intent(Intent.ACTION_USER_STOPPED).putExtra(Intent.EXTRA_USER_HANDLE,
+                userId);
+        for (BroadcastReceiver broadcastReceiver : mBroadcastReceivers) {
+            broadcastReceiver.onReceive(mContext, intent);
+        }
+    }
+
     @Test
-    public void testListeners() {
-        UserInfoHelper.UserChangedListener listener = mock(
-                UserInfoHelper.UserChangedListener.class);
+    public void testListener_SwitchUser() {
+        UserListener listener = mock(UserListener.class);
         mHelper.addListener(listener);
 
         switchUser(USER1_ID);
         verify(listener, never()).onUserChanged(anyInt(), anyInt());
 
         switchUser(USER2_ID);
-        verify(listener).onUserChanged(USER1_ID, USER2_ID);
+        verify(listener, times(1)).onUserChanged(USER1_ID, UserListener.USER_SWITCHED);
+        verify(listener, times(1)).onUserChanged(USER2_ID, UserListener.USER_SWITCHED);
 
         switchUser(USER1_ID);
-        verify(listener).onUserChanged(USER2_ID, USER1_ID);
+        verify(listener, times(2)).onUserChanged(USER1_ID, UserListener.USER_SWITCHED);
+        verify(listener, times(2)).onUserChanged(USER2_ID, UserListener.USER_SWITCHED);
     }
 
     @Test
-    public void testCurrentUser() {
-        assertThat(mHelper.getCurrentUserId()).isEqualTo(USER1_ID);
+    public void testListener_StartUser() {
+        UserListener listener = mock(UserListener.class);
+        mHelper.addListener(listener);
+
+        startUser(USER1_ID);
+        verify(listener).onUserChanged(USER1_ID, UserListener.USER_STARTED);
+
+        startUser(USER2_ID);
+        verify(listener).onUserChanged(USER2_ID, UserListener.USER_STARTED);
+    }
+
+    @Test
+    public void testListener_StopUser() {
+        UserListener listener = mock(UserListener.class);
+        mHelper.addListener(listener);
+
+        stopUser(USER1_ID);
+        verify(listener).onUserChanged(USER1_ID, UserListener.USER_STOPPED);
+
+        stopUser(USER2_ID);
+        verify(listener).onUserChanged(USER2_ID, UserListener.USER_STOPPED);
+    }
+
+    @Test
+    public void testCurrentUserIds() {
+        assertThat(mHelper.getCurrentUserIds()).isEqualTo(USER1_PROFILES);
 
         switchUser(USER2_ID);
 
-        assertThat(mHelper.getCurrentUserId()).isEqualTo(USER2_ID);
+        assertThat(mHelper.getCurrentUserIds()).isEqualTo(USER2_PROFILES);
 
         switchUser(USER1_ID);
 
-        assertThat(mHelper.getCurrentUserId()).isEqualTo(USER1_ID);
+        assertThat(mHelper.getCurrentUserIds()).isEqualTo(USER1_PROFILES);
     }
 
     @Test
-    public void testIsCurrentUserOrProfile() {
-        assertThat(mHelper.isCurrentUserOrProfile(USER1_ID)).isTrue();
-        assertThat(mHelper.isCurrentUserOrProfile(USER1_MANAGED_ID)).isTrue();
-        assertThat(mHelper.isCurrentUserOrProfile(USER2_ID)).isFalse();
-        assertThat(mHelper.isCurrentUserOrProfile(USER2_MANAGED_ID)).isFalse();
+    public void testIsCurrentUserId() {
+        assertThat(mHelper.isCurrentUserId(USER1_ID)).isTrue();
+        assertThat(mHelper.isCurrentUserId(USER1_MANAGED_ID)).isTrue();
+        assertThat(mHelper.isCurrentUserId(USER2_ID)).isFalse();
+        assertThat(mHelper.isCurrentUserId(USER2_MANAGED_ID)).isFalse();
 
         switchUser(USER2_ID);
 
-        assertThat(mHelper.isCurrentUserOrProfile(USER1_ID)).isFalse();
-        assertThat(mHelper.isCurrentUserOrProfile(USER2_ID)).isTrue();
-        assertThat(mHelper.isCurrentUserOrProfile(USER1_MANAGED_ID)).isFalse();
-        assertThat(mHelper.isCurrentUserOrProfile(USER2_MANAGED_ID)).isTrue();
-    }
-
-    @Test
-    public void testGetParentUserId() {
-        assertThat(mHelper.getParentUserId(USER1_ID)).isEqualTo(USER1_ID);
-        assertThat(mHelper.getParentUserId(USER1_MANAGED_ID)).isEqualTo(USER1_ID);
-        assertThat(mHelper.getParentUserId(USER2_ID)).isEqualTo(USER2_ID);
-        assertThat(mHelper.getParentUserId(USER2_MANAGED_ID)).isEqualTo(USER2_ID);
-
-        switchUser(USER2_ID);
-
-        assertThat(mHelper.getParentUserId(USER1_ID)).isEqualTo(USER1_ID);
-        assertThat(mHelper.getParentUserId(USER2_ID)).isEqualTo(USER2_ID);
-        assertThat(mHelper.getParentUserId(USER1_MANAGED_ID)).isEqualTo(USER1_ID);
-        assertThat(mHelper.getParentUserId(USER2_MANAGED_ID)).isEqualTo(USER2_ID);
+        assertThat(mHelper.isCurrentUserId(USER1_ID)).isFalse();
+        assertThat(mHelper.isCurrentUserId(USER2_ID)).isTrue();
+        assertThat(mHelper.isCurrentUserId(USER1_MANAGED_ID)).isFalse();
+        assertThat(mHelper.isCurrentUserId(USER2_MANAGED_ID)).isTrue();
     }
 }
diff --git a/services/tests/mockingservicestests/src/com/android/server/testables/StaticMockFixtureRule.java b/services/tests/mockingservicestests/src/com/android/server/testables/StaticMockFixtureRule.java
index 8e9d7ee..3566aee 100644
--- a/services/tests/mockingservicestests/src/com/android/server/testables/StaticMockFixtureRule.java
+++ b/services/tests/mockingservicestests/src/com/android/server/testables/StaticMockFixtureRule.java
@@ -21,6 +21,7 @@
 import com.android.dx.mockito.inline.extended.StaticMockitoSession;
 import com.android.dx.mockito.inline.extended.StaticMockitoSessionBuilder;
 
+import org.junit.AssumptionViolatedException;
 import org.junit.rules.TestRule;
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
@@ -100,6 +101,11 @@
             }
 
             @Override
+            protected void skipped(AssumptionViolatedException e, Description description) {
+                tearDown(e);
+            }
+
+            @Override
             protected void failed(Throwable e, Description description) {
                 tearDown(e);
             }
diff --git a/services/tests/mockingservicestests/src/com/android/server/testables/StaticMockFixtureRuleTest.java b/services/tests/mockingservicestests/src/com/android/server/testables/StaticMockFixtureRuleTest.java
index b7e71de..8e0ccf0 100644
--- a/services/tests/mockingservicestests/src/com/android/server/testables/StaticMockFixtureRuleTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/testables/StaticMockFixtureRuleTest.java
@@ -16,8 +16,10 @@
 
 package com.android.server.testables;
 
+import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
@@ -30,6 +32,7 @@
 import com.android.dx.mockito.inline.extended.StaticMockitoSessionBuilder;
 
 import org.junit.After;
+import org.junit.AssumptionViolatedException;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.Description;
@@ -57,6 +60,8 @@
     @Mock private Supplier<StaticMockFixture> mSupplyA;
     @Mock private Supplier<StaticMockFixture> mSupplyB;
     @Mock private Statement mStatement;
+    @Mock private Statement mSkipStatement;
+    @Mock private Statement mThrowStatement;
     @Mock private Description mDescription;
 
     @Before
@@ -91,17 +96,22 @@
         when(mB1.setUpMockedClasses(any())).thenAnswer(invocation -> invocation.getArgument(0));
         doNothing().when(mB1).setUpMockBehaviors();
         doNothing().when(mStatement).evaluate();
+        doThrow(new AssumptionViolatedException("bad assumption, test should be skipped"))
+                .when(mSkipStatement).evaluate();
+        doThrow(new IllegalArgumentException("bad argument, test should be failed"))
+                .when(mThrowStatement).evaluate();
         doNothing().when(mA1).tearDown();
         doNothing().when(mB1).tearDown();
     }
 
     private InOrder mocksInOrder()  {
-        return inOrder(mSessionBuilder, mSession, mSupplyA, mSupplyB,
-                mA1, mA2, mB1, mB2, mStatement, mDescription);
+        return inOrder(mSessionBuilder, mSession, mSupplyA, mSupplyB, mA1, mA2, mB1, mB2,
+                mStatement, mSkipStatement, mThrowStatement, mDescription);
     }
 
     private void verifyNoMoreImportantMockInteractions()  {
-        verifyNoMoreInteractions(mSupplyA, mSupplyB, mA1, mA2, mB1, mB2, mStatement);
+        verifyNoMoreInteractions(mSupplyA, mSupplyB, mA1, mA2, mB1, mB2, mStatement,
+                mSkipStatement, mThrowStatement);
     }
 
     @Test
@@ -183,4 +193,66 @@
 
         verifyNoMoreImportantMockInteractions();
     }
+
+    @Test
+    public void testTearDownOnSkippedTests() throws Throwable {
+        InOrder inOrder = mocksInOrder();
+
+        StaticMockFixtureRule rule = new StaticMockFixtureRule(mA1, mB1) {
+            @Override public StaticMockitoSessionBuilder getSessionBuilder() {
+                return mSessionBuilder;
+            }
+        };
+        Statement skipStatement = rule.apply(mSkipStatement, mDescription);
+
+        inOrder.verify(mA1).setUpMockedClasses(any(StaticMockitoSessionBuilder.class));
+        inOrder.verify(mB1).setUpMockedClasses(any(StaticMockitoSessionBuilder.class));
+        inOrder.verify(mA1).setUpMockBehaviors();
+        inOrder.verify(mB1).setUpMockBehaviors();
+
+        try {
+            skipStatement.evaluate();
+            fail("AssumptionViolatedException should have been thrown");
+        } catch (AssumptionViolatedException e) {
+            // expected
+        }
+
+        inOrder.verify(mSkipStatement).evaluate();
+        // note: tearDown in reverse order
+        inOrder.verify(mB1).tearDown();
+        inOrder.verify(mA1).tearDown();
+
+        verifyNoMoreImportantMockInteractions();
+    }
+
+    @Test
+    public void testTearDownOnFailedTests() throws Throwable {
+        InOrder inOrder = mocksInOrder();
+
+        StaticMockFixtureRule rule = new StaticMockFixtureRule(mA1, mB1) {
+            @Override public StaticMockitoSessionBuilder getSessionBuilder() {
+                return mSessionBuilder;
+            }
+        };
+        Statement failStatement = rule.apply(mThrowStatement, mDescription);
+
+        inOrder.verify(mA1).setUpMockedClasses(any(StaticMockitoSessionBuilder.class));
+        inOrder.verify(mB1).setUpMockedClasses(any(StaticMockitoSessionBuilder.class));
+        inOrder.verify(mA1).setUpMockBehaviors();
+        inOrder.verify(mB1).setUpMockBehaviors();
+
+        try {
+            failStatement.evaluate();
+            fail("IllegalArgumentException should have been thrown");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+
+        inOrder.verify(mThrowStatement).evaluate();
+        // note: tearDown in reverse order
+        inOrder.verify(mB1).tearDown();
+        inOrder.verify(mA1).tearDown();
+
+        verifyNoMoreImportantMockInteractions();
+    }
 }
diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp
index f990810..d148c21 100644
--- a/services/tests/servicestests/Android.bp
+++ b/services/tests/servicestests/Android.bp
@@ -74,7 +74,6 @@
         "libbacktrace",
         "libbase",
         "libbinder",
-        "libbinderthreadstate",
         "libc++",
         "libcutils",
         "liblog",
@@ -94,6 +93,7 @@
     },
 
     data: [":JobTestApp"],
+    resource_zips: [":FrameworksServicesTests_apks_as_resources"],
 }
 
 java_library {
@@ -116,3 +116,28 @@
         "src/com/android/server/pm/SuspendPackagesTest.java",
     ],
 }
+
+// Rules to copy all the test apks to the intermediate raw resource directory
+java_genrule {
+    name: "FrameworksServicesTests_apks_as_resources",
+    srcs: [
+        ":FrameworksCoreTests_install_complete_package_info",
+        ":FrameworksServicesTests_install_intent_filters",
+        ":FrameworksServicesTests_install_split_base",
+        ":FrameworksServicesTests_install_split_feature_a",
+        ":FrameworksServicesTests_install_uses_sdk_0",
+        ":FrameworksServicesTests_install_uses_sdk_q0",
+        ":FrameworksServicesTests_install_uses_sdk_r",
+        ":FrameworksServicesTests_install_uses_sdk_r0",
+        ":FrameworksServicesTests_install_uses_sdk_r5",
+    ],
+    out: ["FrameworkServicesTests_apks_as_resources.res.zip"],
+    tools: ["soong_zip"],
+
+    cmd: "mkdir -p $(genDir)/res/raw && " +
+        "for i in $(in); do " +
+        "  x=$${i##*FrameworksCoreTests_}; cp $$i $(genDir)/res/raw/$${x%.apk};" +
+        "  x=$${i##*FrameworksServicesTests_}; cp $$i $(genDir)/res/raw/$${x%.apk};" +
+        "done && " +
+        "$(location soong_zip) -o $(out) -C $(genDir)/res -D $(genDir)/res",
+}
diff --git a/services/tests/servicestests/AndroidTest.xml b/services/tests/servicestests/AndroidTest.xml
index bbc6bdb..d34f783 100644
--- a/services/tests/servicestests/AndroidTest.xml
+++ b/services/tests/servicestests/AndroidTest.xml
@@ -26,11 +26,6 @@
         <option name="test-file-name" value="SimpleServiceTestApp.apk" />
     </target_preparer>
 
-    <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
-        <option name="cleanup" value="true" />
-        <option name="push" value="AppIntegrityManagerServiceTestApp.apk->/data/local/tmp/AppIntegrityManagerServiceTestApp.apk" />
-    </target_preparer>
-
     <option name="test-tag" value="FrameworksServicesTests" />
     <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
         <option name="package" value="com.android.frameworks.servicestests" />
diff --git a/services/tests/servicestests/apks/Android.bp b/services/tests/servicestests/apks/Android.bp
new file mode 100644
index 0000000..3e11604
--- /dev/null
+++ b/services/tests/servicestests/apks/Android.bp
@@ -0,0 +1,7 @@
+java_defaults {
+    name: "FrameworksServicesTests_apks_defaults",
+    sdk_version: "current",
+
+    // Every package should have a native library
+    jni_libs: ["libframeworks_coretests_jni"],
+}
diff --git a/services/tests/servicestests/apks/install-split-base/Android.bp b/services/tests/servicestests/apks/install-split-base/Android.bp
new file mode 100644
index 0000000..1b62aa2
--- /dev/null
+++ b/services/tests/servicestests/apks/install-split-base/Android.bp
@@ -0,0 +1,6 @@
+android_test_helper_app {
+    name: "FrameworksServicesTests_install_split_base",
+    defaults: ["FrameworksServicesTests_apks_defaults"],
+
+    srcs: ["**/*.java"],
+}
diff --git a/services/tests/servicestests/apks/install-split-base/AndroidManifest.xml b/services/tests/servicestests/apks/install-split-base/AndroidManifest.xml
new file mode 100644
index 0000000..2979395
--- /dev/null
+++ b/services/tests/servicestests/apks/install-split-base/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.frameworks.servicestests.install_split"
+        android:isolatedSplits="true">
+
+    <application android:label="ClassloaderSplitApp">
+        <activity android:name=".BaseActivity">
+            <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/coretests/apks/install-split-base/src/com/google/android/dexapis/splitapp/BaseActivity.java b/services/tests/servicestests/apks/install-split-base/src/com/google/android/dexapis/splitapp/BaseActivity.java
similarity index 100%
rename from core/tests/coretests/apks/install-split-base/src/com/google/android/dexapis/splitapp/BaseActivity.java
rename to services/tests/servicestests/apks/install-split-base/src/com/google/android/dexapis/splitapp/BaseActivity.java
diff --git a/services/tests/servicestests/apks/install-split-feature-a/Android.bp b/services/tests/servicestests/apks/install-split-feature-a/Android.bp
new file mode 100644
index 0000000..45d8917
--- /dev/null
+++ b/services/tests/servicestests/apks/install-split-feature-a/Android.bp
@@ -0,0 +1,11 @@
+android_test_helper_app {
+    name: "FrameworksServicesTests_install_split_feature_a",
+    defaults: ["FrameworksServicesTests_apks_defaults"],
+
+    srcs: ["**/*.java"],
+
+    aaptflags: [
+        "--custom-package com.google.android.dexapis.splitapp.feature_a",
+        "--package-id 0x80",
+    ],
+}
diff --git a/services/tests/servicestests/apks/install-split-feature-a/AndroidManifest.xml b/services/tests/servicestests/apks/install-split-feature-a/AndroidManifest.xml
new file mode 100644
index 0000000..a3dd55f
--- /dev/null
+++ b/services/tests/servicestests/apks/install-split-feature-a/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.frameworks.servicestests.install_split"
+        featureSplit="feature_a">
+
+    <application>
+        <activity android:name=".feature_a.FeatureAActivity">
+            <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/coretests/apks/install-split-feature-a/src/com/google/android/dexapis/splitapp/feature_a/FeatureAActivity.java b/services/tests/servicestests/apks/install-split-feature-a/src/com/google/android/dexapis/splitapp/feature_a/FeatureAActivity.java
similarity index 100%
rename from core/tests/coretests/apks/install-split-feature-a/src/com/google/android/dexapis/splitapp/feature_a/FeatureAActivity.java
rename to services/tests/servicestests/apks/install-split-feature-a/src/com/google/android/dexapis/splitapp/feature_a/FeatureAActivity.java
diff --git a/services/tests/servicestests/apks/install_intent_filters/Android.bp b/services/tests/servicestests/apks/install_intent_filters/Android.bp
new file mode 100644
index 0000000..59c8524
--- /dev/null
+++ b/services/tests/servicestests/apks/install_intent_filters/Android.bp
@@ -0,0 +1,7 @@
+android_test_helper_app {
+    name: "FrameworksServicesTests_install_intent_filters",
+    defaults: ["FrameworksServicesTests_apks_defaults"],
+
+    srcs: ["**/*.java"],
+}
+
diff --git a/services/tests/servicestests/apks/install_intent_filters/AndroidManifest.xml b/services/tests/servicestests/apks/install_intent_filters/AndroidManifest.xml
new file mode 100644
index 0000000..fc7134d2
--- /dev/null
+++ b/services/tests/servicestests/apks/install_intent_filters/AndroidManifest.xml
@@ -0,0 +1,51 @@
+<?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.
+  -->
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.frameworks.servicestests.install_intent_filters">
+
+<!--
+     This manifest declares an activity for testing intent filters.
+     The implementing class is an empty implementation.
+-->
+
+    <uses-feature
+        android:name="com.android.frameworks.servicestests.nonexistent" />
+    <uses-configuration
+        android:reqFiveWayNav="false" />
+
+    <instrumentation
+        android:name="android.test.InstrumentationTestRunner"
+        android:targetPackage="com.android.frameworks.coretests"
+        android:label="Frameworks Core Tests" />
+
+    <permission
+        android:label="test permission"
+        android:name="test_permission"
+        android:protectionLevel="normal" />
+
+    <application
+        android:hasCode="true">
+        <activity
+            android:name="com.android.frameworks.servicestests.TestActivity">
+            <intent-filter>
+                <action android:name="action1"/>
+                <data android:mimeGroup="mime_group_1"/>
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/services/tests/servicestests/apks/install_intent_filters/src/com/android/frameworks/servicestests/TestActivity.java b/services/tests/servicestests/apks/install_intent_filters/src/com/android/frameworks/servicestests/TestActivity.java
new file mode 100644
index 0000000..08a19aa
--- /dev/null
+++ b/services/tests/servicestests/apks/install_intent_filters/src/com/android/frameworks/servicestests/TestActivity.java
@@ -0,0 +1,23 @@
+/*
+ * 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.frameworks.coretests;
+
+import android.app.Activity;
+
+public class TestActivity extends Activity {
+
+}
diff --git a/services/tests/servicestests/apks/install_uses_sdk/Android.bp b/services/tests/servicestests/apks/install_uses_sdk/Android.bp
new file mode 100644
index 0000000..c24aa2b
--- /dev/null
+++ b/services/tests/servicestests/apks/install_uses_sdk/Android.bp
@@ -0,0 +1,39 @@
+android_test_helper_app {
+    name: "FrameworksServicesTests_install_uses_sdk_r0",
+    defaults: ["FrameworksServicesTests_apks_defaults"],
+    manifest: "AndroidManifest-r0.xml",
+
+    srcs: ["**/*.java"],
+}
+
+android_test_helper_app {
+    name: "FrameworksServicesTests_install_uses_sdk_r5",
+    defaults: ["FrameworksServicesTests_apks_defaults"],
+    manifest: "AndroidManifest-r5.xml",
+
+    srcs: ["**/*.java"],
+}
+
+android_test_helper_app {
+    name: "FrameworksServicesTests_install_uses_sdk_q0",
+    defaults: ["FrameworksServicesTests_apks_defaults"],
+    manifest: "AndroidManifest-q0.xml",
+
+    srcs: ["**/*.java"],
+}
+
+android_test_helper_app {
+    name: "FrameworksServicesTests_install_uses_sdk_r",
+    defaults: ["FrameworksServicesTests_apks_defaults"],
+    manifest: "AndroidManifest-r.xml",
+
+    srcs: ["**/*.java"],
+}
+
+android_test_helper_app {
+    name: "FrameworksServicesTests_install_uses_sdk_0",
+    defaults: ["FrameworksServicesTests_apks_defaults"],
+    manifest: "AndroidManifest-0.xml",
+
+    srcs: ["**/*.java"],
+}
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml
new file mode 100644
index 0000000..215384b
--- /dev/null
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.frameworks.servicestests.install_uses_sdk">
+
+    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
+        <!-- This is invalid, because there is no sdk version specified -->
+        <extension-sdk android:minExtensionVersion="5" />
+    </uses-sdk>
+
+    <application>
+    </application>
+</manifest>
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0.xml
new file mode 100644
index 0000000..c0e5867
--- /dev/null
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.frameworks.servicestests.install_uses_sdk">
+
+    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
+        <!-- This fails because 29 doesn't have an extension sdk -->
+        <extension-sdk android:sdkVersion="29" android:minExtensionVersion="0" />
+    </uses-sdk>
+
+    <application>
+    </application>
+</manifest>
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml
new file mode 100644
index 0000000..5d22577
--- /dev/null
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.frameworks.servicestests.install_uses_sdk">
+
+    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
+        <!-- This is invalid, because there is no minimum extension version specified -->
+        <extension-sdk android:sdkVersion="10000" />
+    </uses-sdk>
+
+    <application>
+    </application>
+</manifest>
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml
new file mode 100644
index 0000000..c1244f2
--- /dev/null
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.frameworks.servicestests.install_uses_sdk">
+
+    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
+        <extension-sdk android:sdkVersion="10000" android:minExtensionVersion="0" />
+    </uses-sdk>
+
+    <application>
+    </application>
+</manifest>
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml
new file mode 100644
index 0000000..3410938
--- /dev/null
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.frameworks.servicestests.install_uses_sdk">
+
+    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
+        <!-- This will fail to install, because minExtensionVersion is not met -->
+        <extension-sdk android:sdkVersion="10000" android:minExtensionVersion="5" />
+    </uses-sdk>
+
+    <application>
+    </application>
+</manifest>
diff --git a/core/tests/coretests/apks/install_uses_sdk/res/values/strings.xml b/services/tests/servicestests/apks/install_uses_sdk/res/values/strings.xml
similarity index 100%
rename from core/tests/coretests/apks/install_uses_sdk/res/values/strings.xml
rename to services/tests/servicestests/apks/install_uses_sdk/res/values/strings.xml
diff --git a/services/tests/servicestests/assets/AppIntegrityManagerServiceImplTest/AppIntegrityManagerServiceTestApp.apk b/services/tests/servicestests/assets/AppIntegrityManagerServiceImplTest/AppIntegrityManagerServiceTestApp.apk
new file mode 100644
index 0000000..cc1f68c
--- /dev/null
+++ b/services/tests/servicestests/assets/AppIntegrityManagerServiceImplTest/AppIntegrityManagerServiceTestApp.apk
Binary files differ
diff --git a/services/tests/servicestests/assets/AppIntegrityManagerServiceImplTest/DummyAppTwoCerts.apk b/services/tests/servicestests/assets/AppIntegrityManagerServiceImplTest/DummyAppTwoCerts.apk
new file mode 100644
index 0000000..9161d86
--- /dev/null
+++ b/services/tests/servicestests/assets/AppIntegrityManagerServiceImplTest/DummyAppTwoCerts.apk
Binary files differ
diff --git a/core/tests/coretests/res/raw/com_android_tzdata.apex b/services/tests/servicestests/res/raw/com_android_tzdata.apex
similarity index 100%
rename from core/tests/coretests/res/raw/com_android_tzdata.apex
rename to services/tests/servicestests/res/raw/com_android_tzdata.apex
Binary files differ
diff --git a/services/tests/servicestests/src/com/android/server/CachedDeviceStateServiceTest.java b/services/tests/servicestests/src/com/android/server/CachedDeviceStateServiceTest.java
index 2a78b6f..2c84f26 100644
--- a/services/tests/servicestests/src/com/android/server/CachedDeviceStateServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/CachedDeviceStateServiceTest.java
@@ -26,6 +26,7 @@
 import android.os.BatteryManager;
 import android.os.BatteryManagerInternal;
 import android.os.IPowerManager;
+import android.os.IThermalService;
 import android.os.OsProtoEnums;
 import android.os.PowerManager;
 import android.os.RemoteException;
@@ -52,13 +53,14 @@
 public class CachedDeviceStateServiceTest {
     @Mock private BatteryManagerInternal mBatteryManager;
     @Mock private IPowerManager mPowerManager;
+    @Mock private IThermalService mThermalService;
     private BroadcastInterceptingContext mContext;
 
     @Before
     public void setUp() throws RemoteException {
         MockitoAnnotations.initMocks(this);
         Context context = InstrumentationRegistry.getContext();
-        PowerManager powerManager = new PowerManager(context, mPowerManager, null);
+        PowerManager powerManager = new PowerManager(context, mPowerManager, mThermalService, null);
         mContext = new BroadcastInterceptingContext(context) {
             @Override
             public Object getSystemService(String name) {
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AbstractAccessibilityServiceConnectionTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AbstractAccessibilityServiceConnectionTest.java
index cf10559..ae8d554 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/AbstractAccessibilityServiceConnectionTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/AbstractAccessibilityServiceConnectionTest.java
@@ -47,6 +47,7 @@
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.nullValue;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
@@ -73,11 +74,11 @@
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.IPowerManager;
+import android.os.IThermalService;
 import android.os.PowerManager;
 import android.os.Process;
 import android.os.RemoteCallback;
 import android.os.RemoteException;
-import android.testing.DexmakerShareClassLoaderRule;
 import android.view.Display;
 import android.view.KeyEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -90,7 +91,6 @@
 import com.android.server.wm.WindowManagerInternal;
 
 import org.junit.Before;
-import org.junit.Rule;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
@@ -146,12 +146,9 @@
     private ArrayList<Integer> mDisplayList = new ArrayList<>(Arrays.asList(
             Display.DEFAULT_DISPLAY, SECONDARY_DISPLAY_ID));
 
-    // To mock package-private class.
-    @Rule public final DexmakerShareClassLoaderRule mDexmakerShareClassLoaderRule =
-            new DexmakerShareClassLoaderRule();
-
     @Mock private Context mMockContext;
     @Mock private IPowerManager mMockIPowerManager;
+    @Mock private IThermalService mMockIThermalService;
     @Mock private PackageManager mMockPackageManager;
     @Spy  private AccessibilityServiceInfo mSpyServiceInfo = new AccessibilityServiceInfo();
     @Mock private AccessibilitySecurityPolicy mMockSecurityPolicy;
@@ -179,7 +176,7 @@
                 .thenReturn(mMockMagnificationController);
 
         PowerManager powerManager =
-                new PowerManager(mMockContext, mMockIPowerManager, mHandler);
+                new PowerManager(mMockContext, mMockIPowerManager, mMockIThermalService, mHandler);
         when(mMockContext.getSystemService(Context.POWER_SERVICE)).thenReturn(powerManager);
         when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
         when(mMockPackageManager.hasSystemFeature(FEATURE_FINGERPRINT)).thenReturn(true);
@@ -703,14 +700,20 @@
 
     @Test
     public void takeScreenshot_returnNull() {
-        // no canTakeScreenshot, should return null.
-        when(mMockSecurityPolicy.canTakeScreenshotLocked(mServiceConnection)).thenReturn(false);
-        assertThat(mServiceConnection.takeScreenshot(Display.DEFAULT_DISPLAY), is(nullValue()));
-
         // no checkAccessibilityAccess, should return null.
         when(mMockSecurityPolicy.canTakeScreenshotLocked(mServiceConnection)).thenReturn(true);
         when(mMockSecurityPolicy.checkAccessibilityAccess(mServiceConnection)).thenReturn(false);
-        assertThat(mServiceConnection.takeScreenshot(Display.DEFAULT_DISPLAY), is(nullValue()));
+        mServiceConnection.takeScreenshot(Display.DEFAULT_DISPLAY, new RemoteCallback((result) -> {
+            assertNull(result);
+        }));
+    }
+
+    @Test (expected = SecurityException.class)
+    public void takeScreenshot_throwSecurityException() {
+        // no canTakeScreenshot, should throw security exception.
+        when(mMockSecurityPolicy.canTakeScreenshotLocked(mServiceConnection)).thenReturn(false);
+        mServiceConnection.takeScreenshot(Display.DEFAULT_DISPLAY, new RemoteCallback((result) -> {
+        }));
     }
 
     private void updateServiceInfo(AccessibilityServiceInfo serviceInfo, int eventType,
@@ -852,8 +855,5 @@
 
         @Override
         public void onFingerprintGesture(int gesture) {}
-
-        @Override
-        public void takeScreenshotWithCallback(int displayId, RemoteCallback callback) {}
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java
index fbb55fd..5a96347 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java
@@ -25,7 +25,9 @@
 import static org.hamcrest.Matchers.hasSize;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
+import static org.mockito.AdditionalAnswers.returnsFirstArg;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -133,6 +135,8 @@
         mA11ySecurityPolicy = new AccessibilitySecurityPolicy(mMockContext, mMockA11yUserManager);
         mA11ySecurityPolicy.setAccessibilityWindowManager(mMockA11yWindowManager);
         mA11ySecurityPolicy.setAppWidgetManager(mMockAppWidgetManager);
+
+        when(mMockA11yWindowManager.resolveParentWindowIdLocked(anyInt())).then(returnsFirstArg());
     }
 
     @Test
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java
index 9db5a08..10a86f9 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java
@@ -88,6 +88,10 @@
     private static final int DEFAULT_FOCUSED_INDEX = 1;
     private static final int SCREEN_WIDTH = 1080;
     private static final int SCREEN_HEIGHT = 1920;
+    private static final int INVALID_ID = AccessibilityWindowInfo.UNDEFINED_WINDOW_ID;
+    private static final int HOST_WINDOW_ID = 10;
+    private static final int EMBEDDED_WINDOW_ID = 11;
+    private static final int OTHER_WINDOW_ID = 12;
 
     private AccessibilityWindowManager mA11yWindowManager;
     // Window manager will support multiple focused window if config_perDisplayFocusEnabled is true,
@@ -117,6 +121,10 @@
     @Mock private AccessibilitySecurityPolicy mMockA11ySecurityPolicy;
     @Mock private AccessibilitySecurityPolicy.AccessibilityUserManager mMockA11yUserManager;
 
+    @Mock private IBinder mMockHostToken;
+    @Mock private IBinder mMockEmbeddedToken;
+    @Mock private IBinder mMockInvalidToken;
+
     @Before
     public void setUp() throws RemoteException {
         MockitoAnnotations.initMocks(this);
@@ -140,6 +148,8 @@
         // AccessibilityEventSender is invoked during onWindowsForAccessibilityChanged.
         // Resets it for mockito verify of further test case.
         Mockito.reset(mMockA11yEventSender);
+
+        registerLeashedTokenAndWindowId();
     }
 
     @After
@@ -407,6 +417,51 @@
     }
 
     @Test
+    public void resolveParentWindowId_windowIsNotEmbedded_shouldReturnGivenId()
+            throws RemoteException {
+        final int windowId = addAccessibilityInteractionConnection(Display.DEFAULT_DISPLAY, false,
+                Mockito.mock(IBinder.class), USER_SYSTEM_ID);
+        assertEquals(windowId, mA11yWindowManager.resolveParentWindowIdLocked(windowId));
+    }
+
+    @Test
+    public void resolveParentWindowId_windowIsNotRegistered_shouldReturnGivenId() {
+        final int windowId = -1;
+        assertEquals(windowId, mA11yWindowManager.resolveParentWindowIdLocked(windowId));
+    }
+
+    @Test
+    public void resolveParentWindowId_windowIsAssociated_shouldReturnParentWindowId()
+            throws RemoteException {
+        final IBinder mockHostToken = Mockito.mock(IBinder.class);
+        final IBinder mockEmbeddedToken = Mockito.mock(IBinder.class);
+        final int hostWindowId = addAccessibilityInteractionConnection(Display.DEFAULT_DISPLAY,
+                false, mockHostToken, USER_SYSTEM_ID);
+        final int embeddedWindowId = addAccessibilityInteractionConnection(Display.DEFAULT_DISPLAY,
+                false, mockEmbeddedToken, USER_SYSTEM_ID);
+        mA11yWindowManager.associateEmbeddedHierarchyLocked(mockHostToken, mockEmbeddedToken);
+        final int resolvedWindowId = mA11yWindowManager.resolveParentWindowIdLocked(
+                embeddedWindowId);
+        assertEquals(hostWindowId, resolvedWindowId);
+    }
+
+    @Test
+    public void resolveParentWindowId_windowIsDisassociated_shouldReturnGivenId()
+            throws RemoteException {
+        final IBinder mockHostToken = Mockito.mock(IBinder.class);
+        final IBinder mockEmbeddedToken = Mockito.mock(IBinder.class);
+        final int hostWindowId = addAccessibilityInteractionConnection(Display.DEFAULT_DISPLAY,
+                false, mockHostToken, USER_SYSTEM_ID);
+        final int embeddedWindowId = addAccessibilityInteractionConnection(Display.DEFAULT_DISPLAY,
+                false, mockEmbeddedToken, USER_SYSTEM_ID);
+        mA11yWindowManager.associateEmbeddedHierarchyLocked(mockHostToken, mockEmbeddedToken);
+        mA11yWindowManager.disassociateEmbeddedHierarchyLocked(mockEmbeddedToken);
+        final int resolvedWindowId = mA11yWindowManager.resolveParentWindowIdLocked(
+                embeddedWindowId);
+        assertEquals(embeddedWindowId, resolvedWindowId);
+    }
+
+    @Test
     public void computePartialInteractiveRegionForWindow_wholeVisible_returnWholeRegion() {
         // Updates top 2 z-order WindowInfo are whole visible.
         WindowInfo windowInfo = mWindowInfos.get(Display.DEFAULT_DISPLAY).get(0);
@@ -726,6 +781,64 @@
                 token.asBinder(), -1);
     }
 
+    @Test
+    public void getHostTokenLocked_hierarchiesAreAssociated_shouldReturnHostToken() {
+        mA11yWindowManager.associateLocked(mMockEmbeddedToken, mMockHostToken);
+        final IBinder hostToken = mA11yWindowManager.getHostTokenLocked(mMockEmbeddedToken);
+        assertEquals(hostToken, mMockHostToken);
+    }
+
+    @Test
+    public void getHostTokenLocked_hierarchiesAreNotAssociated_shouldReturnNull() {
+        final IBinder hostToken = mA11yWindowManager.getHostTokenLocked(mMockEmbeddedToken);
+        assertNull(hostToken);
+    }
+
+    @Test
+    public void getHostTokenLocked_embeddedHierarchiesAreDisassociated_shouldReturnNull() {
+        mA11yWindowManager.associateLocked(mMockEmbeddedToken, mMockHostToken);
+        mA11yWindowManager.disassociateLocked(mMockEmbeddedToken);
+        final IBinder hostToken = mA11yWindowManager.getHostTokenLocked(mMockEmbeddedToken);
+        assertNull(hostToken);
+    }
+
+    @Test
+    public void getHostTokenLocked_hostHierarchiesAreDisassociated_shouldReturnNull() {
+        mA11yWindowManager.associateLocked(mMockEmbeddedToken, mMockHostToken);
+        mA11yWindowManager.disassociateLocked(mMockHostToken);
+        final IBinder hostToken = mA11yWindowManager.getHostTokenLocked(mMockHostToken);
+        assertNull(hostToken);
+    }
+
+    @Test
+    public void getWindowIdLocked_windowIsRegistered_shouldReturnWindowId() {
+        final int windowId = mA11yWindowManager.getWindowIdLocked(mMockHostToken);
+        assertEquals(windowId, HOST_WINDOW_ID);
+    }
+
+    @Test
+    public void getWindowIdLocked_windowIsNotRegistered_shouldReturnInvalidWindowId() {
+        final int windowId = mA11yWindowManager.getWindowIdLocked(mMockInvalidToken);
+        assertEquals(windowId, INVALID_ID);
+    }
+
+    @Test
+    public void getTokenLocked_windowIsRegistered_shouldReturnToken() {
+        final IBinder token = mA11yWindowManager.getTokenLocked(HOST_WINDOW_ID);
+        assertEquals(token, mMockHostToken);
+    }
+
+    @Test
+    public void getTokenLocked_windowIsNotRegistered_shouldReturnNull() {
+        final IBinder token = mA11yWindowManager.getTokenLocked(OTHER_WINDOW_ID);
+        assertNull(token);
+    }
+
+    private void registerLeashedTokenAndWindowId() {
+        mA11yWindowManager.registerIdLocked(mMockHostToken, HOST_WINDOW_ID);
+        mA11yWindowManager.registerIdLocked(mMockEmbeddedToken, EMBEDDED_WINDOW_ID);
+    }
+
     private void startTrackingPerDisplay(int displayId) throws RemoteException {
         ArrayList<WindowInfo> windowInfosForDisplay = new ArrayList<>();
         // Adds RemoteAccessibilityConnection into AccessibilityWindowManager, and copy
@@ -784,6 +897,7 @@
                 IAccessibilityInteractionConnection.class);
         final IBinder mockConnectionBinder = Mockito.mock(IBinder.class);
         final IBinder mockWindowBinder = Mockito.mock(IBinder.class);
+        final IBinder mockLeashToken = Mockito.mock(IBinder.class);
         when(mockA11yConnection.asBinder()).thenReturn(mockConnectionBinder);
         when(mockWindowToken.asBinder()).thenReturn(mockWindowBinder);
         when(mMockA11ySecurityPolicy.isCallerInteractingAcrossUsers(userId))
@@ -792,11 +906,31 @@
                 .thenReturn(displayId);
 
         int windowId = mA11yWindowManager.addAccessibilityInteractionConnection(
-                mockWindowToken, mockA11yConnection, PACKAGE_NAME, userId);
+                mockWindowToken, mockLeashToken, mockA11yConnection, PACKAGE_NAME, userId);
         mA11yWindowTokens.put(windowId, mockWindowToken);
         return mockWindowToken;
     }
 
+    private int addAccessibilityInteractionConnection(int displayId, boolean bGlobal,
+            IBinder leashToken, int userId) throws RemoteException {
+        final IWindow mockWindowToken = Mockito.mock(IWindow.class);
+        final IAccessibilityInteractionConnection mockA11yConnection = Mockito.mock(
+                IAccessibilityInteractionConnection.class);
+        final IBinder mockConnectionBinder = Mockito.mock(IBinder.class);
+        final IBinder mockWindowBinder = Mockito.mock(IBinder.class);
+        when(mockA11yConnection.asBinder()).thenReturn(mockConnectionBinder);
+        when(mockWindowToken.asBinder()).thenReturn(mockWindowBinder);
+        when(mMockA11ySecurityPolicy.isCallerInteractingAcrossUsers(userId))
+                .thenReturn(bGlobal);
+        when(mMockWindowManagerInternal.getDisplayIdForWindow(mockWindowToken.asBinder()))
+                .thenReturn(displayId);
+
+        int windowId = mA11yWindowManager.addAccessibilityInteractionConnection(
+                mockWindowToken, leashToken, mockA11yConnection, PACKAGE_NAME, userId);
+        mA11yWindowTokens.put(windowId, mockWindowToken);
+        return windowId;
+    }
+
     private void addWindowInfo(ArrayList<WindowInfo> windowInfos, IWindow windowToken, int layer) {
         final WindowInfo windowInfo = WindowInfo.obtain();
         windowInfo.type = AccessibilityWindowInfo.TYPE_APPLICATION;
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/KeyEventDispatcherTest.java b/services/tests/servicestests/src/com/android/server/accessibility/KeyEventDispatcherTest.java
index 4123556..85b8fcb 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/KeyEventDispatcherTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/KeyEventDispatcherTest.java
@@ -34,6 +34,7 @@
 import android.content.Context;
 import android.os.Handler;
 import android.os.IPowerManager;
+import android.os.IThermalService;
 import android.os.Looper;
 import android.os.Message;
 import android.os.PowerManager;
@@ -73,6 +74,7 @@
     private KeyEventFilter mKeyEventFilter1;
     private KeyEventFilter mKeyEventFilter2;
     private IPowerManager mMockPowerManagerService;
+    private IThermalService mMockThermalService;
     private MessageCapturingHandler mMessageCapturingHandler;
     private ArgumentCaptor<Integer> mFilter1SequenceCaptor = ArgumentCaptor.forClass(Integer.class);
     private ArgumentCaptor<Integer> mFilter2SequenceCaptor = ArgumentCaptor.forClass(Integer.class);
@@ -82,10 +84,12 @@
         Looper looper = InstrumentationRegistry.getContext().getMainLooper();
         mInputEventsHandler = new MessageCapturingHandler(looper, null);
         mMockPowerManagerService = mock(IPowerManager.class);
+        mMockThermalService = mock(IThermalService.class);
         // TODO: It would be better to mock PowerManager rather than its binder, but the class is
         // final.
         PowerManager powerManager =
-                new PowerManager(mock(Context.class), mMockPowerManagerService, new Handler(looper));
+                new PowerManager(mock(Context.class), mMockPowerManagerService, mMockThermalService,
+                        new Handler(looper));
         mMessageCapturingHandler = new MessageCapturingHandler(looper, null);
         mKeyEventDispatcher = new KeyEventDispatcher(mInputEventsHandler, SEND_FRAMEWORK_KEY_EVENT,
                 mLock, powerManager, mMessageCapturingHandler);
diff --git a/services/tests/servicestests/src/com/android/server/am/BroadcastRecordTest.java b/services/tests/servicestests/src/com/android/server/am/BroadcastRecordTest.java
index 089a79b..a871ec6 100644
--- a/services/tests/servicestests/src/com/android/server/am/BroadcastRecordTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/BroadcastRecordTest.java
@@ -178,6 +178,7 @@
                 new Intent(),
                 null /* callerApp */,
                 null  /* callerPackage */,
+                null /* callerFeatureId */,
                 0 /* callingPid */,
                 0 /* callingUid */,
                 false /* callerInstantApp */,
diff --git a/services/tests/servicestests/src/com/android/server/appop/AppOpsUpgradeTest.java b/services/tests/servicestests/src/com/android/server/appop/AppOpsUpgradeTest.java
deleted file mode 100644
index 66d2bab..0000000
--- a/services/tests/servicestests/src/com/android/server/appop/AppOpsUpgradeTest.java
+++ /dev/null
@@ -1,183 +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.appop;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import android.app.AppOpsManager;
-import android.content.Context;
-import android.content.res.AssetManager;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.util.Log;
-import android.util.SparseArray;
-import android.util.Xml;
-
-import androidx.test.InstrumentationRegistry;
-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.xmlpull.v1.XmlPullParser;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-
-/**
- * Tests app ops version upgrades
- */
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class AppOpsUpgradeTest {
-    private static final String TAG = AppOpsUpgradeTest.class.getSimpleName();
-    private static final String APP_OPS_UNVERSIONED_ASSET_PATH =
-            "AppOpsUpgradeTest/appops-unversioned.xml";
-    private static final String APP_OPS_FILENAME = "appops-test.xml";
-    private static final int NON_DEFAULT_OPS_IN_FILE = 4;
-    private static final int CURRENT_VERSION = 1;
-
-    private File mAppOpsFile;
-    private Context mContext;
-    private Handler mHandler;
-
-    private void extractAppOpsFile() {
-        mAppOpsFile.getParentFile().mkdirs();
-        if (mAppOpsFile.exists()) {
-            mAppOpsFile.delete();
-        }
-        try (FileOutputStream out = new FileOutputStream(mAppOpsFile);
-             InputStream in = mContext.getAssets().open(APP_OPS_UNVERSIONED_ASSET_PATH,
-                     AssetManager.ACCESS_BUFFER)) {
-            byte[] buffer = new byte[4096];
-            int bytesRead;
-            while ((bytesRead = in.read(buffer)) >= 0) {
-                out.write(buffer, 0, bytesRead);
-            }
-            out.flush();
-            Log.d(TAG, "Successfully copied xml to " + mAppOpsFile.getAbsolutePath());
-        } catch (IOException exc) {
-            Log.e(TAG, "Exception while copying appops xml", exc);
-            fail();
-        }
-    }
-
-    private void assertSameModes(SparseArray<AppOpsService.UidState> uidStates, int op1, int op2) {
-        int numberOfNonDefaultOps = 0;
-        final int defaultModeOp1 = AppOpsManager.opToDefaultMode(op1);
-        final int defaultModeOp2 = AppOpsManager.opToDefaultMode(op2);
-        for(int i = 0; i < uidStates.size(); i++) {
-            final AppOpsService.UidState uidState = uidStates.valueAt(i);
-            if (uidState.opModes != null) {
-                final int uidMode1 = uidState.opModes.get(op1, defaultModeOp1);
-                final int uidMode2 = uidState.opModes.get(op2, defaultModeOp2);
-                assertEquals(uidMode1, uidMode2);
-                if (uidMode1 != defaultModeOp1) {
-                    numberOfNonDefaultOps++;
-                }
-            }
-            if (uidState.pkgOps == null) {
-                continue;
-            }
-            for (int j = 0; j < uidState.pkgOps.size(); j++) {
-                final AppOpsService.Ops ops = uidState.pkgOps.valueAt(j);
-                if (ops == null) {
-                    continue;
-                }
-                final AppOpsService.Op _op1 = ops.get(op1);
-                final AppOpsService.Op _op2 = ops.get(op2);
-                final int mode1 = (_op1 == null) ? defaultModeOp1 : _op1.getMode();
-                final int mode2 = (_op2 == null) ? defaultModeOp2 : _op2.getMode();
-                assertEquals(mode1, mode2);
-                if (mode1 != defaultModeOp1) {
-                    numberOfNonDefaultOps++;
-                }
-            }
-        }
-        assertEquals(numberOfNonDefaultOps, NON_DEFAULT_OPS_IN_FILE);
-    }
-
-    @Before
-    public void setUp() {
-        mContext = InstrumentationRegistry.getTargetContext();
-        mAppOpsFile = new File(mContext.getFilesDir(), APP_OPS_FILENAME);
-        extractAppOpsFile();
-        HandlerThread handlerThread = new HandlerThread(TAG);
-        handlerThread.start();
-        mHandler = new Handler(handlerThread.getLooper());
-    }
-
-    @Test
-    public void testUpgradeFromNoVersion() throws Exception {
-        AppOpsDataParser parser = new AppOpsDataParser(mAppOpsFile);
-        assertTrue(parser.parse());
-        assertEquals(AppOpsDataParser.NO_VERSION, parser.mVersion);
-        AppOpsService testService = new AppOpsService(mAppOpsFile, mHandler); // trigger upgrade
-        assertSameModes(testService.mUidStates, AppOpsManager.OP_RUN_IN_BACKGROUND,
-                AppOpsManager.OP_RUN_ANY_IN_BACKGROUND);
-        testService.mContext = mContext;
-        mHandler.removeCallbacks(testService.mWriteRunner);
-        testService.writeState();
-        assertTrue(parser.parse());
-        assertEquals(CURRENT_VERSION, parser.mVersion);
-    }
-
-    /**
-     * Class to parse data from the appops xml. Currently only parses and holds the version number.
-     * Other fields may be added as and when required for testing.
-     */
-    private static final class AppOpsDataParser {
-        static final int NO_VERSION = -1;
-        int mVersion;
-        private File mFile;
-
-        AppOpsDataParser(File file) {
-            mFile = file;
-            mVersion = NO_VERSION;
-        }
-
-        boolean parse() {
-            try (FileInputStream stream = new FileInputStream(mFile)) {
-                XmlPullParser parser = Xml.newPullParser();
-                parser.setInput(stream, StandardCharsets.UTF_8.name());
-                int type;
-                while ((type = parser.next()) != XmlPullParser.START_TAG
-                        && type != XmlPullParser.END_DOCUMENT) {
-                    ;
-                }
-                if (type != XmlPullParser.START_TAG) {
-                    throw new IllegalStateException("no start tag found");
-                }
-                final String versionString = parser.getAttributeValue(null, "v");
-                if (versionString != null) {
-                    mVersion = Integer.parseInt(versionString);
-                }
-            } catch (Exception e) {
-                Log.e(TAG, "Failed while parsing test appops xml", e);
-                return false;
-            }
-            return true;
-        }
-    }
-}
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 e90cb46..ac0cac1 100644
--- a/services/tests/servicestests/src/com/android/server/attention/AttentionManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/attention/AttentionManagerServiceTest.java
@@ -37,6 +37,7 @@
 import android.content.Context;
 import android.os.IBinder;
 import android.os.IPowerManager;
+import android.os.IThermalService;
 import android.os.PowerManager;
 import android.os.RemoteException;
 import android.provider.DeviceConfig;
@@ -74,6 +75,8 @@
     @Mock
     private IPowerManager mMockIPowerManager;
     @Mock
+    private IThermalService mMockIThermalService;
+    @Mock
     Context mContext;
 
     @Before
@@ -84,7 +87,7 @@
         // setup power manager mock
         PowerManager mPowerManager;
         doReturn(true).when(mMockIPowerManager).isInteractive();
-        mPowerManager = new PowerManager(mContext, mMockIPowerManager, null);
+        mPowerManager = new PowerManager(mContext, mMockIPowerManager, mMockIThermalService, null);
 
         Object mLock = new Object();
         // setup a spy on attention manager
diff --git a/services/tests/servicestests/src/com/android/server/backup/UserBackupPreferencesTest.java b/services/tests/servicestests/src/com/android/server/backup/UserBackupPreferencesTest.java
index d6efe35..5800aca 100644
--- a/services/tests/servicestests/src/com/android/server/backup/UserBackupPreferencesTest.java
+++ b/services/tests/servicestests/src/com/android/server/backup/UserBackupPreferencesTest.java
@@ -16,8 +16,6 @@
 
 package com.android.server.backup;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertTrue;
 
 import androidx.test.InstrumentationRegistry;
@@ -33,18 +31,15 @@
 import org.mockito.MockitoAnnotations;
 
 import java.util.Arrays;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 @Presubmit
 @RunWith(AndroidJUnit4.class)
 public class UserBackupPreferencesTest {
     private static final String EXCLUDED_PACKAGE_1 = "package1";
-    private static final String EXCLUDED_PACKAGE_2 = "package2";
     private static final List<String> EXCLUDED_KEYS_1 = Arrays.asList("key1", "key2");
-    private static final List<String> EXCLUDED_KEYS_2 = Arrays.asList("key1");
+    private static final List<String> EXCLUDED_KEYS_2 = Arrays.asList("key3");
 
     @Rule public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
 
@@ -60,27 +55,13 @@
     }
 
     @Test
-    public void testGetExcludedKeysForPackages_returnsExcludedKeys() {
+    public void testGetExcludedKeysForPackage_returnsExcludedKeys() {
         mExcludedRestoreKeysStorage.addExcludedKeys(EXCLUDED_PACKAGE_1, EXCLUDED_KEYS_1);
-        mExcludedRestoreKeysStorage.addExcludedKeys(EXCLUDED_PACKAGE_2, EXCLUDED_KEYS_2);
+        mExcludedRestoreKeysStorage.addExcludedKeys(EXCLUDED_PACKAGE_1, EXCLUDED_KEYS_2);
 
-        Map<String, Set<String>> excludedKeys =
-                mExcludedRestoreKeysStorage.getExcludedRestoreKeysForPackages(EXCLUDED_PACKAGE_1);
-        assertTrue(excludedKeys.containsKey(EXCLUDED_PACKAGE_1));
-        assertFalse(excludedKeys.containsKey(EXCLUDED_PACKAGE_2));
-        assertEquals(new HashSet<>(EXCLUDED_KEYS_1), excludedKeys.get(EXCLUDED_PACKAGE_1));
-    }
-
-    @Test
-    public void testGetExcludedKeysForPackages_withEmpty_list_returnsAllExcludedKeys() {
-        mExcludedRestoreKeysStorage.addExcludedKeys(EXCLUDED_PACKAGE_1, EXCLUDED_KEYS_1);
-        mExcludedRestoreKeysStorage.addExcludedKeys(EXCLUDED_PACKAGE_2, EXCLUDED_KEYS_2);
-
-        Map<String, Set<String>> excludedKeys =
-                mExcludedRestoreKeysStorage.getAllExcludedRestoreKeys();
-        assertTrue(excludedKeys.containsKey(EXCLUDED_PACKAGE_1));
-        assertTrue(excludedKeys.containsKey(EXCLUDED_PACKAGE_2));
-        assertEquals(new HashSet<>(EXCLUDED_KEYS_1), excludedKeys.get(EXCLUDED_PACKAGE_1));
-        assertEquals(new HashSet<>(EXCLUDED_KEYS_2), excludedKeys.get(EXCLUDED_PACKAGE_2));
+        Set<String> excludedKeys =
+                mExcludedRestoreKeysStorage.getExcludedRestoreKeysForPackage(EXCLUDED_PACKAGE_1);
+        assertTrue(excludedKeys.containsAll(EXCLUDED_KEYS_1));
+        assertTrue(excludedKeys.containsAll(EXCLUDED_KEYS_2));
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/backup/restore/PerformUnifiedRestoreTaskTest.java b/services/tests/servicestests/src/com/android/server/backup/restore/PerformUnifiedRestoreTaskTest.java
index 3d22043..017c939 100644
--- a/services/tests/servicestests/src/com/android/server/backup/restore/PerformUnifiedRestoreTaskTest.java
+++ b/services/tests/servicestests/src/com/android/server/backup/restore/PerformUnifiedRestoreTaskTest.java
@@ -20,7 +20,9 @@
 import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertTrue;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.when;
 
 import androidx.test.InstrumentationRegistry;
@@ -30,6 +32,8 @@
 import android.app.backup.BackupDataOutput;
 import android.platform.test.annotations.Presubmit;
 
+import com.android.server.backup.UserBackupManagerService;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -40,6 +44,7 @@
 import org.mockito.stubbing.Answer;
 
 import java.util.ArrayDeque;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -59,6 +64,7 @@
 
     @Mock private BackupDataInput mBackupDataInput;
     @Mock private BackupDataOutput mBackupDataOutput;
+    @Mock private UserBackupManagerService mBackupManagerService;
 
     private Set<String> mExcludedkeys = new HashSet<>();
     private Map<String, String> mBackupData = new HashMap<>();
@@ -99,6 +105,8 @@
                         return null;
                     }
                 });
+
+        mRestoreTask = new PerformUnifiedRestoreTask(mBackupManagerService);
     }
 
     private void populateTestData() {
@@ -114,8 +122,9 @@
 
     @Test
     public void testFilterExcludedKeys() throws Exception {
-        mRestoreTask = new PerformUnifiedRestoreTask(Collections.singletonMap(
-                PACKAGE_NAME, mExcludedkeys));
+        when(mBackupManagerService.getExcludedRestoreKeys(eq(PACKAGE_NAME))).thenReturn(
+                mExcludedkeys);
+
         mRestoreTask.filterExcludedKeys(PACKAGE_NAME, mBackupDataInput, mBackupDataOutput);
 
         // Verify only the correct were written into BackupDataOutput object.
@@ -125,32 +134,49 @@
     }
 
     @Test
+    public void testGetExcludedKeysForPackage_alwaysReturnsLatestKeys() {
+        Set<String> firstExcludedKeys = new HashSet<>(Collections.singletonList(EXCLUDED_KEY_1));
+        when(mBackupManagerService.getExcludedRestoreKeys(eq(PACKAGE_NAME))).thenReturn(
+                firstExcludedKeys);
+        assertEquals(firstExcludedKeys, mRestoreTask.getExcludedKeysForPackage(PACKAGE_NAME));
+
+
+        Set<String> secondExcludedKeys = new HashSet<>(Arrays.asList(EXCLUDED_KEY_1,
+                EXCLUDED_KEY_2));
+        when(mBackupManagerService.getExcludedRestoreKeys(eq(PACKAGE_NAME))).thenReturn(
+                secondExcludedKeys);
+        assertEquals(secondExcludedKeys, mRestoreTask.getExcludedKeysForPackage(PACKAGE_NAME));
+    }
+
+    @Test
     public void testStageBackupData_stageForNonSystemPackageWithKeysToExclude() {
-        mRestoreTask = new PerformUnifiedRestoreTask(Collections.singletonMap(
-                PACKAGE_NAME, mExcludedkeys));
+        when(mBackupManagerService.getExcludedRestoreKeys(eq(NON_SYSTEM_PACKAGE_NAME))).thenReturn(
+                mExcludedkeys);
 
         assertTrue(mRestoreTask.shouldStageBackupData(NON_SYSTEM_PACKAGE_NAME));
     }
 
     @Test
     public void testStageBackupData_stageForNonSystemPackageWithNoKeysToExclude() {
-        mRestoreTask = new PerformUnifiedRestoreTask(Collections.emptyMap());
+        when(mBackupManagerService.getExcludedRestoreKeys(any())).thenReturn(
+                Collections.emptySet());
 
         assertTrue(mRestoreTask.shouldStageBackupData(NON_SYSTEM_PACKAGE_NAME));
     }
 
     @Test
     public void testStageBackupData_doNotStageForSystemPackageWithNoKeysToExclude() {
-        mRestoreTask = new PerformUnifiedRestoreTask(Collections.emptyMap());
+        when(mBackupManagerService.getExcludedRestoreKeys(any())).thenReturn(
+                Collections.emptySet());
 
         assertFalse(mRestoreTask.shouldStageBackupData(SYSTEM_PACKAGE_NAME));
     }
 
     @Test
     public void testStageBackupData_stageForSystemPackageWithKeysToExclude() {
-        mRestoreTask = new PerformUnifiedRestoreTask(Collections.singletonMap(
-                PACKAGE_NAME, mExcludedkeys));
+        when(mBackupManagerService.getExcludedRestoreKeys(eq(SYSTEM_PACKAGE_NAME))).thenReturn(
+                mExcludedkeys);
 
-        assertTrue(mRestoreTask.shouldStageBackupData(NON_SYSTEM_PACKAGE_NAME));
+        assertTrue(mRestoreTask.shouldStageBackupData(SYSTEM_PACKAGE_NAME));
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java b/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java
index d38c80c..1c8b00f 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java
@@ -24,6 +24,7 @@
 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.verify;
 import static org.mockito.Mockito.when;
 
@@ -32,8 +33,12 @@
 import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback;
 import android.hardware.biometrics.IBiometricService;
 import android.hardware.biometrics.IBiometricServiceReceiver;
+import android.hardware.face.IFaceService;
+import android.hardware.fingerprint.IFingerprintService;
+import android.hardware.iris.IIrisService;
 import android.os.Binder;
 import android.os.Bundle;
+import android.os.UserHandle;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SmallTest;
@@ -61,6 +66,12 @@
     AuthService.Injector mInjector;
     @Mock
     IBiometricService mBiometricService;
+    @Mock
+    IFingerprintService mFingerprintService;
+    @Mock
+    IIrisService mIrisService;
+    @Mock
+    IFaceService mFaceService;
 
     @Before
     public void setUp() {
@@ -76,10 +87,28 @@
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
         when(mInjector.getBiometricService()).thenReturn(mBiometricService);
         when(mInjector.getConfiguration(any())).thenReturn(config);
-        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
-                .thenReturn(true);
-        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_IRIS)).thenReturn(true);
-        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FACE)).thenReturn(true);
+        when(mInjector.getFingerprintService()).thenReturn(mFingerprintService);
+        when(mInjector.getFaceService()).thenReturn(mFaceService);
+        when(mInjector.getIrisService()).thenReturn(mIrisService);
+    }
+
+    @Test
+    public void testRegisterNullService_doesNotRegister() throws Exception {
+
+        // Config contains Fingerprint, Iris, Face, but services are all null
+
+        when(mInjector.getFingerprintService()).thenReturn(null);
+        when(mInjector.getFaceService()).thenReturn(null);
+        when(mInjector.getIrisService()).thenReturn(null);
+
+        mAuthService = new AuthService(mContext, mInjector);
+        mAuthService.onStart();
+
+        verify(mBiometricService, never()).registerAuthenticator(
+                anyInt(),
+                anyInt(),
+                anyInt(),
+                any());
     }
 
 
@@ -108,7 +137,10 @@
                 eq(userId),
                 eq(mReceiver),
                 eq(TEST_OP_PACKAGE_NAME),
-                eq(bundle));
+                eq(bundle),
+                eq(Binder.getCallingUid()),
+                eq(Binder.getCallingPid()),
+                eq(UserHandle.getCallingUserId()));
     }
 
     @Test
@@ -119,7 +151,7 @@
         final int userId = 0;
         final int expectedResult = BIOMETRIC_SUCCESS;
         final int authenticators = 0;
-        when(mBiometricService.canAuthenticate(anyString(), anyInt(), anyInt()))
+        when(mBiometricService.canAuthenticate(anyString(), anyInt(), anyInt(), anyInt()))
                 .thenReturn(expectedResult);
 
         final int result = mAuthService.mImpl
@@ -130,6 +162,7 @@
         verify(mBiometricService).canAuthenticate(
                 eq(TEST_OP_PACKAGE_NAME),
                 eq(userId),
+                eq(UserHandle.getCallingUserId()),
                 eq(authenticators));
     }
 
@@ -168,7 +201,8 @@
         mAuthService.mImpl.registerEnabledOnKeyguardCallback(callback);
 
         waitForIdle();
-        verify(mBiometricService).registerEnabledOnKeyguardCallback(eq(callback));
+        verify(mBiometricService).registerEnabledOnKeyguardCallback(
+                eq(callback), eq(UserHandle.getCallingUserId()));
     }
 
     @Test
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java b/services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java
index 156cd6e..164ee31 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java
@@ -283,7 +283,7 @@
                 null /* authenticators */);
         waitForIdle();
         verify(mReceiver1).onError(
-                eq(BiometricAuthenticator.TYPE_NONE),
+                eq(BiometricAuthenticator.TYPE_FINGERPRINT),
                 eq(BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE),
                 eq(0 /* vendorCode */));
     }
@@ -947,7 +947,7 @@
                 false /* requireConfirmation */, null /* authenticators */);
 
         mBiometricService.mImpl.cancelAuthentication(mBiometricService.mCurrentAuthSession.mToken,
-                TEST_PACKAGE_NAME);
+                TEST_PACKAGE_NAME, 0 /* callingUId */, 0 /* callingPid */, 0 /* callingUserId */);
         waitForIdle();
 
         // Pretend that the HAL has responded to cancel with ERROR_CANCELED
@@ -1095,6 +1095,24 @@
     }
 
     @Test
+    public void testRegisterAuthenticator_updatesStrengths() throws Exception {
+        mBiometricService = new BiometricService(mContext, mInjector);
+        mBiometricService.onStart();
+
+        verify(mBiometricService.mBiometricStrengthController).startListening();
+        verify(mBiometricService.mBiometricStrengthController, never()).updateStrengths();
+
+        when(mFingerprintAuthenticator.hasEnrolledTemplates(anyInt(), any()))
+                .thenReturn(true);
+        when(mFingerprintAuthenticator.isHardwareDetected(any())).thenReturn(true);
+        mBiometricService.mImpl.registerAuthenticator(0 /* testId */,
+                BiometricAuthenticator.TYPE_FINGERPRINT, Authenticators.BIOMETRIC_STRONG,
+                mFingerprintAuthenticator);
+
+        verify(mBiometricService.mBiometricStrengthController).updateStrengths();
+    }
+
+    @Test
     public void testWithDowngradedAuthenticator() throws Exception {
         mBiometricService = new BiometricService(mContext, mInjector);
         mBiometricService.onStart();
@@ -1117,14 +1135,14 @@
 
         // STRONG-only auth is not available
         int authenticators = Authenticators.BIOMETRIC_STRONG;
-        assertEquals(BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE,
+        assertEquals(BiometricManager.BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED,
                 invokeCanAuthenticate(mBiometricService, authenticators));
         invokeAuthenticate(mBiometricService.mImpl, mReceiver1, false /* requireConfirmation */,
                 authenticators);
         waitForIdle();
         verify(mReceiver1).onError(
-                eq(BiometricAuthenticator.TYPE_NONE),
-                eq(BiometricPrompt.BIOMETRIC_ERROR_HW_NOT_PRESENT),
+                eq(BiometricAuthenticator.TYPE_FINGERPRINT),
+                eq(BiometricPrompt.BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED),
                 eq(0) /* vendorCode */);
 
         // Request for weak auth works
@@ -1154,7 +1172,7 @@
                 false /* requireConfirmation */,
                 authenticators);
         waitForIdle();
-        assertTrue(Utils.isDeviceCredentialAllowed(mBiometricService.mCurrentAuthSession.mBundle));
+        assertTrue(Utils.isCredentialRequested(mBiometricService.mCurrentAuthSession.mBundle));
         verify(mBiometricService.mStatusBarService).showAuthenticationDialog(
                 eq(mBiometricService.mCurrentAuthSession.mBundle),
                 any(IBiometricServiceReceiverInternal.class),
@@ -1162,6 +1180,28 @@
                 anyBoolean() /* requireConfirmation */,
                 anyInt() /* userId */,
                 eq(TEST_PACKAGE_NAME));
+
+        // Un-downgrading the authenticator allows successful strong auth
+        for (BiometricService.AuthenticatorWrapper wrapper : mBiometricService.mAuthenticators) {
+            if (wrapper.id == testId) {
+                wrapper.updateStrength(Authenticators.BIOMETRIC_STRONG);
+            }
+        }
+
+        resetReceiver();
+        authenticators = Authenticators.BIOMETRIC_STRONG;
+        assertEquals(BiometricManager.BIOMETRIC_SUCCESS,
+                invokeCanAuthenticate(mBiometricService, authenticators));
+        invokeAuthenticateAndStart(mBiometricService.mImpl, mReceiver1,
+                false /* requireConfirmation */, authenticators);
+        waitForIdle();
+        verify(mBiometricService.mStatusBarService).showAuthenticationDialog(
+                eq(mBiometricService.mCurrentAuthSession.mBundle),
+                any(IBiometricServiceReceiverInternal.class),
+                eq(BiometricAuthenticator.TYPE_FINGERPRINT /* biometricModality */),
+                anyBoolean() /* requireConfirmation */,
+                anyInt() /* userId */,
+                eq(TEST_PACKAGE_NAME));
     }
 
     @Test(expected = IllegalStateException.class)
@@ -1245,6 +1285,19 @@
     }
 
     @Test
+    public void testAuthentication_normalAppIgnoresDevicePolicy() throws Exception {
+        setupAuthForOnly(BiometricAuthenticator.TYPE_FINGERPRINT, Authenticators.BIOMETRIC_STRONG);
+        when(mDevicePolicyManager
+                .getKeyguardDisabledFeatures(any() /* admin */, anyInt() /* userHandle */))
+                .thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);
+        invokeAuthenticateAndStart(mBiometricService.mImpl, mReceiver1,
+                false /* requireConfirmation */, Authenticators.BIOMETRIC_STRONG);
+        waitForIdle();
+        assertEquals(mBiometricService.mCurrentAuthSession.mState,
+                BiometricService.STATE_AUTH_STARTED);
+    }
+
+    @Test
     public void testWorkAuthentication_faceWorksIfNotDisabledByDevicePolicyManager()
             throws Exception {
         setupAuthForOnly(BiometricAuthenticator.TYPE_FACE, Authenticators.BIOMETRIC_STRONG);
@@ -1290,7 +1343,8 @@
 
     private int invokeCanAuthenticate(BiometricService service, int authenticators)
             throws Exception {
-        return service.mImpl.canAuthenticate(TEST_PACKAGE_NAME, 0 /* userId */, authenticators);
+        return service.mImpl.canAuthenticate(
+                TEST_PACKAGE_NAME, 0 /* userId */, 0 /* callingUserId */, authenticators);
     }
 
     private void setupAuthForOnly(int modality, int strength) throws Exception {
@@ -1393,7 +1447,10 @@
                 receiver,
                 TEST_PACKAGE_NAME /* packageName */,
                 createTestBiometricPromptBundle(requireConfirmation, authenticators,
-                        false /* checkDevicePolicy */));
+                        false /* checkDevicePolicy */),
+                0 /* callingUid */,
+                0 /* callingPid */,
+                0 /* callingUserId */);
     }
 
     private static void invokeAuthenticateForWorkApp(IBiometricService.Stub service,
@@ -1405,7 +1462,10 @@
                 receiver,
                 TEST_PACKAGE_NAME /* packageName */,
                 createTestBiometricPromptBundle(false /* requireConfirmation */, authenticators,
-                        true /* checkDevicePolicy */));
+                        true /* checkDevicePolicy */),
+                0 /* callingUid */,
+                0 /* callingPid */,
+                0 /* callingUserId */);
     }
 
     private static Bundle createTestBiometricPromptBundle(
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/UtilsTest.java b/services/tests/servicestests/src/com/android/server/biometrics/UtilsTest.java
index 312ff2c..df242f3 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/UtilsTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/UtilsTest.java
@@ -91,31 +91,31 @@
     @Test
     public void testIsDeviceCredentialAllowed_withIntegerFlags() {
         int authenticators = 0;
-        assertFalse(Utils.isDeviceCredentialAllowed(authenticators));
+        assertFalse(Utils.isCredentialRequested(authenticators));
 
         authenticators |= Authenticators.DEVICE_CREDENTIAL;
-        assertTrue(Utils.isDeviceCredentialAllowed(authenticators));
+        assertTrue(Utils.isCredentialRequested(authenticators));
 
         authenticators |= Authenticators.BIOMETRIC_WEAK;
-        assertTrue(Utils.isDeviceCredentialAllowed(authenticators));
+        assertTrue(Utils.isCredentialRequested(authenticators));
     }
 
     @Test
     public void testIsDeviceCredentialAllowed_withBundle() {
         Bundle bundle = new Bundle();
-        assertFalse(Utils.isDeviceCredentialAllowed(bundle));
+        assertFalse(Utils.isCredentialRequested(bundle));
 
         int authenticators = 0;
         bundle.putInt(BiometricPrompt.KEY_AUTHENTICATORS_ALLOWED, authenticators);
-        assertFalse(Utils.isDeviceCredentialAllowed(bundle));
+        assertFalse(Utils.isCredentialRequested(bundle));
 
         authenticators |= Authenticators.DEVICE_CREDENTIAL;
         bundle.putInt(BiometricPrompt.KEY_AUTHENTICATORS_ALLOWED, authenticators);
-        assertTrue(Utils.isDeviceCredentialAllowed(bundle));
+        assertTrue(Utils.isCredentialRequested(bundle));
 
         authenticators |= Authenticators.BIOMETRIC_WEAK;
         bundle.putInt(BiometricPrompt.KEY_AUTHENTICATORS_ALLOWED, authenticators);
-        assertTrue(Utils.isDeviceCredentialAllowed(bundle));
+        assertTrue(Utils.isCredentialRequested(bundle));
     }
 
     @Test
@@ -140,14 +140,14 @@
         for (int i = 0; i <= 7; i++) {
             int authenticators = 1 << i;
             bundle.putInt(BiometricPrompt.KEY_AUTHENTICATORS_ALLOWED, authenticators);
-            assertTrue(Utils.isBiometricAllowed(bundle));
+            assertTrue(Utils.isBiometricRequested(bundle));
         }
 
         // The rest of the bits are not allowed to integrate with the public APIs
         for (int i = 8; i < 32; i++) {
             int authenticators = 1 << i;
             bundle.putInt(BiometricPrompt.KEY_AUTHENTICATORS_ALLOWED, authenticators);
-            assertFalse(Utils.isBiometricAllowed(bundle));
+            assertFalse(Utils.isBiometricRequested(bundle));
         }
     }
 
diff --git a/services/tests/servicestests/src/com/android/server/compat/CompatConfigTest.java b/services/tests/servicestests/src/com/android/server/compat/CompatConfigTest.java
index 407f67e..44f4ccf 100644
--- a/services/tests/servicestests/src/com/android/server/compat/CompatConfigTest.java
+++ b/services/tests/servicestests/src/com/android/server/compat/CompatConfigTest.java
@@ -24,6 +24,7 @@
 import static org.mockito.Mockito.when;
 import static org.testng.Assert.assertThrows;
 
+import android.app.compat.ChangeIdStateCache;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
@@ -74,6 +75,7 @@
         // Assume userdebug/eng non-final build
         when(mBuildClassifier.isDebuggableBuild()).thenReturn(true);
         when(mBuildClassifier.isFinalBuild()).thenReturn(false);
+        ChangeIdStateCache.disable();
     }
 
     @Test
diff --git a/services/tests/servicestests/src/com/android/server/compat/PlatformCompatTest.java b/services/tests/servicestests/src/com/android/server/compat/PlatformCompatTest.java
index ce5d6d9..53b90f2 100644
--- a/services/tests/servicestests/src/com/android/server/compat/PlatformCompatTest.java
+++ b/services/tests/servicestests/src/com/android/server/compat/PlatformCompatTest.java
@@ -19,6 +19,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
@@ -28,10 +29,12 @@
 
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.content.pm.PackageManagerInternal;
 
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.internal.compat.AndroidBuildClassifier;
+import com.android.server.LocalServices;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -48,6 +51,8 @@
     @Mock
     private PackageManager mPackageManager;
     @Mock
+    private PackageManagerInternal mPackageManagerInternal;
+    @Mock
     CompatChange.ChangeListener mListener1, mListener2;
     PlatformCompat mPlatformCompat;
     CompatConfig mCompatConfig;
@@ -57,14 +62,19 @@
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
+        android.app.compat.ChangeIdStateCache.disable();
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
         when(mPackageManager.getPackageUid(eq(PACKAGE_NAME), eq(0))).thenThrow(
                 new PackageManager.NameNotFoundException());
+        when(mPackageManagerInternal.getPackageUid(eq(PACKAGE_NAME), eq(0), anyInt()))
+            .thenReturn(-1);
         mCompatConfig = new CompatConfig(mBuildClassifier, mContext);
         mPlatformCompat = new PlatformCompat(mContext, mCompatConfig);
         // Assume userdebug/eng non-final build
         when(mBuildClassifier.isDebuggableBuild()).thenReturn(true);
         when(mBuildClassifier.isFinalBuild()).thenReturn(false);
+        LocalServices.removeServiceForTest(PackageManagerInternal.class);
+        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternal);
     }
 
     @Test
diff --git a/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java b/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java
index e37ed79..2cbc3f3 100644
--- a/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java
+++ b/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java
@@ -124,8 +124,9 @@
         SyncOperation op2 = SyncOperation.maybeCreateFromJobExtras(pb);
 
         assertTrue("Account fields in extras not persisted.",
-                account1.equals(op2.extras.get("acc")));
-        assertTrue("Fields in extras not persisted", "String".equals(op2.extras.getString("str")));
+                account1.equals(op2.getClonedExtras().get("acc")));
+        assertTrue("Fields in extras not persisted", "String".equals(
+                op2.getClonedExtras().getString("str")));
     }
 
     @SmallTest
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java
index 9574a08..40b0e71 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java
@@ -31,8 +31,11 @@
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.platform.test.annotations.Presubmit;
 import android.provider.Settings;
 
+import androidx.test.filters.SmallTest;
+
 import com.android.frameworks.servicestests.R;
 import com.android.server.LocalServices;
 import com.android.server.SystemService;
@@ -43,7 +46,7 @@
 import java.util.Map;
 import java.util.Set;
 
-// TODO (b/143516163): Fix old test cases and put into presubmit.
+// TODO (b/149818286): Fix old test cases and put the whole test into presubmit.
 public class DevicePolicyManagerServiceMigrationTest extends DpmTestBase {
 
     private static final String USER_TYPE_EMPTY = "";
@@ -343,6 +346,8 @@
         assertTrue(alreadySet.contains(UserManager.DISALLOW_BLUETOOTH_SHARING));
     }
 
+    @Presubmit
+    @SmallTest
     public void testCompMigrationUnAffiliated_skipped() throws Exception {
         prepareAdmin1AsDo();
         prepareAdminAnotherPackageAsPo(COPE_PROFILE_USER_ID);
@@ -354,6 +359,8 @@
         assertTrue(dpms.mOwners.hasDeviceOwner());
     }
 
+    @Presubmit
+    @SmallTest
     public void testCompMigrationAffiliated() throws Exception {
         prepareAdmin1AsDo();
         prepareAdmin1AsPo(COPE_PROFILE_USER_ID);
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java
index 3a8258b..853151f 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java
@@ -369,6 +369,12 @@
         }
 
         @Override
+        PendingIntent pendingIntentGetBroadcast(Context context, int requestCode,
+                Intent intent, int flags) {
+            return null;
+        }
+
+        @Override
         void registerContentObserver(Uri uri, boolean notifyForDescendents,
                 ContentObserver observer, int userHandle) {
             mContentObservers.put(new Pair<Uri, Integer>(uri, userHandle), observer);
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 39a749f..dbf2f14 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
@@ -26,6 +26,7 @@
 import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
 import static android.app.admin.DevicePolicyManager.WIPE_EUICC;
 import static android.app.admin.PasswordMetrics.computeForPassword;
+import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_DIRECT_BOOT_AWARE;
 
 import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
 import static com.android.internal.widget.LockPatternUtils.EscrowTokenStateChangeCallback;
@@ -96,7 +97,6 @@
 import android.util.ArraySet;
 import android.util.Pair;
 
-import androidx.test.filters.FlakyTest;
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.R;
@@ -2087,7 +2087,7 @@
 
         FactoryResetProtectionPolicy policy = new FactoryResetProtectionPolicy.Builder()
                 .setFactoryResetProtectionAccounts(new ArrayList<>())
-                .setFactoryResetProtectionDisabled(true)
+                .setFactoryResetProtectionEnabled(false)
                 .build();
         dpm.setFactoryResetProtectionPolicy(admin1, policy);
 
@@ -2098,14 +2098,15 @@
         verify(mContext.spiedContext).sendBroadcastAsUser(
                 MockUtils.checkIntentAction(
                         DevicePolicyManager.ACTION_RESET_PROTECTION_POLICY_CHANGED),
-                MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE));
+                MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE),
+                eq(android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION));
     }
 
     public void testSetFactoryResetProtectionPolicyFailWithPO() throws Exception {
         setupProfileOwner();
 
         FactoryResetProtectionPolicy policy = new FactoryResetProtectionPolicy.Builder()
-                .setFactoryResetProtectionDisabled(true)
+                .setFactoryResetProtectionEnabled(false)
                 .build();
 
         assertExpectException(SecurityException.class, null,
@@ -2145,7 +2146,8 @@
         verify(mContext.spiedContext).sendBroadcastAsUser(
                 MockUtils.checkIntentAction(
                         DevicePolicyManager.ACTION_RESET_PROTECTION_POLICY_CHANGED),
-                MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE));
+                MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE),
+                eq(android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION));
     }
 
     public void testGetFactoryResetProtectionPolicyWithFrpManagementAgent()
@@ -2157,7 +2159,7 @@
 
         FactoryResetProtectionPolicy policy = new FactoryResetProtectionPolicy.Builder()
                 .setFactoryResetProtectionAccounts(new ArrayList<>())
-                .setFactoryResetProtectionDisabled(true)
+                .setFactoryResetProtectionEnabled(false)
                 .build();
 
         dpm.setFactoryResetProtectionPolicy(admin1, policy);
@@ -2172,13 +2174,14 @@
         verify(mContext.spiedContext).sendBroadcastAsUser(
                 MockUtils.checkIntentAction(
                         DevicePolicyManager.ACTION_RESET_PROTECTION_POLICY_CHANGED),
-                MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE));
+                MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE),
+                eq(android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION));
     }
 
     private void assertPoliciesAreEqual(FactoryResetProtectionPolicy expectedPolicy,
             FactoryResetProtectionPolicy actualPolicy) {
-        assertThat(actualPolicy.isFactoryResetProtectionDisabled()).isEqualTo(
-                expectedPolicy.isFactoryResetProtectionDisabled());
+        assertThat(actualPolicy.isFactoryResetProtectionEnabled()).isEqualTo(
+                expectedPolicy.isFactoryResetProtectionEnabled());
         assertAccountsAreEqual(expectedPolicy.getFactoryResetProtectionAccounts(),
                 actualPolicy.getFactoryResetProtectionAccounts());
     }
@@ -2188,6 +2191,42 @@
         assertThat(actualAccounts).containsExactlyElementsIn(expectedAccounts);
     }
 
+    public void testSetKeyguardDisabledFeaturesWithDO() throws Exception {
+        mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;
+        setupDeviceOwner();
+
+        dpm.setKeyguardDisabledFeatures(admin1, DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA);
+
+        assertThat(dpm.getKeyguardDisabledFeatures(admin1)).isEqualTo(
+                DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA);
+    }
+
+    public void testSetKeyguardDisabledFeaturesWithPO() throws Exception {
+        setupProfileOwner();
+
+        dpm.setKeyguardDisabledFeatures(admin1, DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);
+
+        assertThat(dpm.getKeyguardDisabledFeatures(admin1)).isEqualTo(
+                DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);
+    }
+
+    public void testSetKeyguardDisabledFeaturesWithPOOfOrganizationOwnedDevice()
+            throws Exception {
+        final int MANAGED_PROFILE_USER_ID = DpmMockContext.CALLER_USER_HANDLE;
+        final int MANAGED_PROFILE_ADMIN_UID =
+                UserHandle.getUid(MANAGED_PROFILE_USER_ID, DpmMockContext.SYSTEM_UID);
+        mContext.binder.callingUid = MANAGED_PROFILE_ADMIN_UID;
+
+        addManagedProfile(admin1, MANAGED_PROFILE_ADMIN_UID, admin1);
+        configureProfileOwnerOfOrgOwnedDevice(admin1, DpmMockContext.CALLER_USER_HANDLE);
+
+        parentDpm.setKeyguardDisabledFeatures(admin1,
+                DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA);
+
+        assertThat(parentDpm.getKeyguardDisabledFeatures(admin1)).isEqualTo(
+                DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA);
+    }
+
     public void testSetApplicationHiddenWithDO() throws Exception {
         mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;
         setupDeviceOwner();
@@ -3781,35 +3820,35 @@
         assertEquals(-1, dpm.getLastSecurityLogRetrievalTime());
     }
 
-    public void testSetLockdownAdminConfiguredNetworksWithDO() throws Exception {
+    public void testSetConfiguredNetworksLockdownStateWithDO() throws Exception {
         mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;
         setupDeviceOwner();
-        dpm.setLockdownAdminConfiguredNetworks(admin1, true);
+        dpm.setConfiguredNetworksLockdownState(admin1, true);
         verify(getServices().settings).settingsGlobalPutInt(
                 Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN, 1);
 
-        dpm.setLockdownAdminConfiguredNetworks(admin1, false);
+        dpm.setConfiguredNetworksLockdownState(admin1, false);
         verify(getServices().settings).settingsGlobalPutInt(
                 Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN, 0);
     }
 
-    public void testSetLockdownAdminConfiguredNetworksWithPO() throws Exception {
+    public void testSetConfiguredNetworksLockdownStateWithPO() throws Exception {
         setupProfileOwner();
         assertExpectException(SecurityException.class, null,
-                () -> dpm.setLockdownAdminConfiguredNetworks(admin1, false));
+                () -> dpm.setConfiguredNetworksLockdownState(admin1, false));
         verify(getServices().settings, never()).settingsGlobalPutInt(
                 Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN, 0);
     }
 
-    public void testSetLockdownAdminConfiguredNetworksWithPOOfOrganizationOwnedDevice()
+    public void testSetConfiguredNetworksLockdownStateWithPOOfOrganizationOwnedDevice()
             throws Exception {
         setupProfileOwner();
         configureProfileOwnerOfOrgOwnedDevice(admin1, DpmMockContext.CALLER_USER_HANDLE);
-        dpm.setLockdownAdminConfiguredNetworks(admin1, true);
+        dpm.setConfiguredNetworksLockdownState(admin1, true);
         verify(getServices().settings).settingsGlobalPutInt(
                 Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN, 1);
 
-        dpm.setLockdownAdminConfiguredNetworks(admin1, false);
+        dpm.setConfiguredNetworksLockdownState(admin1, false);
         verify(getServices().settings).settingsGlobalPutInt(
                 Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN, 0);
     }
@@ -5689,6 +5728,9 @@
     }
 
     public void testGetPasswordComplexity_securityExceptionNotThrownForParentInstance() {
+        mContext.binder.callingUid = DpmMockContext.CALLER_UID;
+        when(getServices().packageManager.getPackagesForUid(DpmMockContext.CALLER_UID)).thenReturn(
+                new String[0]);
         mServiceContext.permissions.add(permission.REQUEST_PASSWORD_COMPLEXITY);
         setAsProfileOwner(admin1);
 
@@ -5698,12 +5740,18 @@
     }
 
     public void testGetPasswordComplexity_illegalStateExceptionIfLocked() {
+        mContext.binder.callingUid = DpmMockContext.CALLER_UID;
+        when(getServices().packageManager.getPackagesForUid(DpmMockContext.CALLER_UID)).thenReturn(
+                new String[0]);
         when(getServices().userManager.isUserUnlocked(DpmMockContext.CALLER_USER_HANDLE))
                 .thenReturn(false);
         assertThrows(IllegalStateException.class, () -> dpm.getPasswordComplexity());
     }
 
     public void testGetPasswordComplexity_securityExceptionWithoutPermissions() {
+        mContext.binder.callingUid = DpmMockContext.CALLER_UID;
+        when(getServices().packageManager.getPackagesForUid(DpmMockContext.CALLER_UID)).thenReturn(
+                new String[0]);
         when(getServices().userManager.isUserUnlocked(DpmMockContext.CALLER_USER_HANDLE))
                 .thenReturn(true);
         assertThrows(SecurityException.class, () -> dpm.getPasswordComplexity());
@@ -5711,6 +5759,9 @@
 
 
     public void testGetPasswordComplexity_currentUserNoPassword() {
+        mContext.binder.callingUid = DpmMockContext.CALLER_UID;
+        when(getServices().packageManager.getPackagesForUid(DpmMockContext.CALLER_UID)).thenReturn(
+                new String[0]);
         when(getServices().userManager.isUserUnlocked(DpmMockContext.CALLER_USER_HANDLE))
                 .thenReturn(true);
         mServiceContext.permissions.add(permission.REQUEST_PASSWORD_COMPLEXITY);
@@ -5721,6 +5772,9 @@
     }
 
     public void testGetPasswordComplexity_currentUserHasPassword() {
+        mContext.binder.callingUid = DpmMockContext.CALLER_UID;
+        when(getServices().packageManager.getPackagesForUid(DpmMockContext.CALLER_UID)).thenReturn(
+                new String[0]);
         when(getServices().userManager.isUserUnlocked(DpmMockContext.CALLER_USER_HANDLE))
                 .thenReturn(true);
         mServiceContext.permissions.add(permission.REQUEST_PASSWORD_COMPLEXITY);
@@ -5734,6 +5788,9 @@
     }
 
     public void testGetPasswordComplexity_unifiedChallengeReturnsParentUserPassword() {
+        mContext.binder.callingUid = DpmMockContext.CALLER_UID;
+        when(getServices().packageManager.getPackagesForUid(DpmMockContext.CALLER_UID)).thenReturn(
+                new String[0]);
         when(getServices().userManager.isUserUnlocked(DpmMockContext.CALLER_USER_HANDLE))
                 .thenReturn(true);
         mServiceContext.permissions.add(permission.REQUEST_PASSWORD_COMPLEXITY);
@@ -5992,6 +6049,86 @@
         assertTrue(dpm.isCommonCriteriaModeEnabled(admin1));
     }
 
+    public void testCanProfileOwnerResetPasswordWhenLocked_nonDirectBootAwarePo()
+            throws Exception {
+        setDeviceEncryptionPerUser();
+        setupProfileOwner();
+        setupPasswordResetToken();
+
+        mContext.binder.callingUid = DpmMockContext.SYSTEM_UID;
+        assertFalse("po is not direct boot aware",
+                dpm.canProfileOwnerResetPasswordWhenLocked(DpmMockContext.CALLER_USER_HANDLE));
+    }
+
+    public void testCanProfileOwnerResetPasswordWhenLocked_noActiveToken() throws Exception {
+        setDeviceEncryptionPerUser();
+        setupProfileOwner();
+        makeAdmin1DirectBootAware();
+
+        mContext.binder.callingUid = DpmMockContext.SYSTEM_UID;
+        assertFalse("po doesn't have an active password reset token",
+                dpm.canProfileOwnerResetPasswordWhenLocked(DpmMockContext.CALLER_USER_HANDLE));
+    }
+
+    public void testCanProfileOwnerResetPasswordWhenLocked_nonFbeDevice() throws Exception {
+        setupProfileOwner();
+        makeAdmin1DirectBootAware();
+        setupPasswordResetToken();
+
+        mContext.binder.callingUid = DpmMockContext.SYSTEM_UID;
+        assertFalse("device is not FBE",
+                dpm.canProfileOwnerResetPasswordWhenLocked(DpmMockContext.CALLER_USER_HANDLE));
+    }
+
+    public void testCanProfileOwnerResetPasswordWhenLocked() throws Exception {
+        setDeviceEncryptionPerUser();
+        setupProfileOwner();
+        makeAdmin1DirectBootAware();
+        setupPasswordResetToken();
+
+        mContext.binder.callingUid = DpmMockContext.SYSTEM_UID;
+        assertTrue("direct boot aware po with active password reset token",
+                dpm.canProfileOwnerResetPasswordWhenLocked(DpmMockContext.CALLER_USER_HANDLE));
+    }
+
+    private void setupPasswordResetToken() {
+        final byte[] token = new byte[32];
+        final long handle = 123456;
+
+        when(getServices().lockPatternUtils
+                .addEscrowToken(eq(token), eq(DpmMockContext.CALLER_USER_HANDLE),
+                        nullable(EscrowTokenStateChangeCallback.class)))
+                .thenReturn(handle);
+
+        dpm.setResetPasswordToken(admin1, token);
+
+        when(getServices().lockPatternUtils
+                .isEscrowTokenActive(eq(handle), eq(DpmMockContext.CALLER_USER_HANDLE)))
+                .thenReturn(true);
+
+        assertTrue("failed to activate token", dpm.isResetPasswordTokenActive(admin1));
+    }
+
+    private void makeAdmin1DirectBootAware()
+            throws PackageManager.NameNotFoundException, android.os.RemoteException {
+        Mockito.reset(getServices().ipackageManager);
+
+        final ApplicationInfo ai = DpmTestUtils.cloneParcelable(
+                mRealTestContext.getPackageManager().getApplicationInfo(
+                        admin1.getPackageName(),
+                        PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS));
+        ai.privateFlags = PRIVATE_FLAG_DIRECT_BOOT_AWARE;
+
+        doReturn(ai).when(getServices().ipackageManager).getApplicationInfo(
+                eq(admin1.getPackageName()),
+                anyInt(),
+                eq(DpmMockContext.CALLER_USER_HANDLE));
+    }
+
+    private void setDeviceEncryptionPerUser() {
+        when(getServices().storageManager.isFileBasedEncryptionEnabled()).thenReturn(true);
+    }
+
     private void setCrossProfileAppsList(String... packages) {
         when(mContext.getResources()
                 .getStringArray(eq(R.array.cross_profile_apps)))
@@ -6004,6 +6141,55 @@
                 .thenReturn(packages);
     }
 
+    public void testSetAccountTypesWithManagementDisabledOnManagedProfile() throws Exception {
+        setupProfileOwner();
+
+        final String accountType = "com.example.account.type";
+        int originalUid = mContext.binder.callingUid;
+        dpm.setAccountManagementDisabled(admin1, accountType, true);
+        assertThat(dpm.getAccountTypesWithManagementDisabled()).asList().containsExactly(
+                accountType);
+        mContext.binder.callingUid = DpmMockContext.ANOTHER_UID;
+        assertThat(dpm.getAccountTypesWithManagementDisabled()).isEmpty();
+        mContext.binder.callingUid = DpmMockContext.SYSTEM_UID;
+        assertThat(dpm.getAccountTypesWithManagementDisabled()).isEmpty();
+
+        mContext.binder.callingUid = originalUid;
+        dpm.setAccountManagementDisabled(admin1, accountType, false);
+        assertThat(dpm.getAccountTypesWithManagementDisabled()).isEmpty();
+    }
+
+    public void testSetAccountTypesWithManagementDisabledOnOrgOwnedManagedProfile()
+            throws Exception {
+        final int managedProfileUserId = 15;
+        final int managedProfileAdminUid = UserHandle.getUid(managedProfileUserId, 19436);
+
+        addManagedProfile(admin1, managedProfileAdminUid, admin1);
+        mContext.binder.callingUid = managedProfileAdminUid;
+
+        configureProfileOwnerOfOrgOwnedDevice(admin1, managedProfileUserId);
+
+        int originalUid = mContext.binder.callingUid;
+        final String accountType = "com.example.account.type";
+        dpm.getParentProfileInstance(admin1).setAccountManagementDisabled(admin1, accountType,
+                true);
+        assertThat(dpm.getAccountTypesWithManagementDisabled()).isEmpty();
+        mContext.binder.callingUid = DpmMockContext.ANOTHER_UID;
+        assertThat(dpm.getAccountTypesWithManagementDisabled()).asList().containsExactly(
+                accountType);
+        mContext.binder.callingUid = DpmMockContext.SYSTEM_UID;
+        assertThat(dpm.getAccountTypesWithManagementDisabled()).asList().containsExactly(
+                accountType);
+
+        mContext.binder.callingUid = originalUid;
+        dpm.getParentProfileInstance(admin1).setAccountManagementDisabled(admin1, accountType,
+                false);
+        mContext.binder.callingUid = DpmMockContext.ANOTHER_UID;
+        assertThat(dpm.getAccountTypesWithManagementDisabled()).isEmpty();
+        mContext.binder.callingUid = DpmMockContext.SYSTEM_UID;
+        assertThat(dpm.getAccountTypesWithManagementDisabled()).isEmpty();
+    }
+
     // admin1 is the outgoing DPC, adminAnotherPakcage is the incoming one.
     private void assertDeviceOwnershipRevertedWithFakeTransferMetadata() throws Exception {
         writeFakeTransferMetadataFile(UserHandle.USER_SYSTEM,
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/FactoryResetProtectionPolicyTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/FactoryResetProtectionPolicyTest.java
index bc853c6..e8818a3 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/FactoryResetProtectionPolicyTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/FactoryResetProtectionPolicyTest.java
@@ -62,7 +62,7 @@
 
         FactoryResetProtectionPolicy policy = new FactoryResetProtectionPolicy.Builder()
                 .setFactoryResetProtectionAccounts(accounts)
-                .setFactoryResetProtectionDisabled(true)
+                .setFactoryResetProtectionEnabled(false)
                 .build();
 
         testParcelAndUnparcel(policy);
@@ -77,7 +77,7 @@
 
         FactoryResetProtectionPolicy policy = new FactoryResetProtectionPolicy.Builder()
                 .setFactoryResetProtectionAccounts(accounts)
-                .setFactoryResetProtectionDisabled(true)
+                .setFactoryResetProtectionEnabled(false)
                 .build();
 
         testParcelAndUnparcel(policy);
@@ -133,8 +133,8 @@
 
     private void assertPoliciesAreEqual(FactoryResetProtectionPolicy expectedPolicy,
             FactoryResetProtectionPolicy actualPolicy) {
-        assertEquals(expectedPolicy.isFactoryResetProtectionDisabled(),
-                actualPolicy.isFactoryResetProtectionDisabled());
+        assertEquals(expectedPolicy.isFactoryResetProtectionEnabled(),
+                actualPolicy.isFactoryResetProtectionEnabled());
         assertAccountsAreEqual(expectedPolicy.getFactoryResetProtectionAccounts(),
                 actualPolicy.getFactoryResetProtectionAccounts());
     }
diff --git a/services/tests/servicestests/src/com/android/server/display/AutomaticBrightnessControllerTest.java b/services/tests/servicestests/src/com/android/server/display/AutomaticBrightnessControllerTest.java
index ca00116..234c987 100644
--- a/services/tests/servicestests/src/com/android/server/display/AutomaticBrightnessControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/AutomaticBrightnessControllerTest.java
@@ -25,7 +25,6 @@
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
-import android.content.pm.PackageManager;
 import android.hardware.Sensor;
 import android.hardware.SensorEventListener;
 import android.hardware.SensorManager;
@@ -46,9 +45,8 @@
 @SmallTest
 @RunWith(AndroidJUnit4.class)
 public class AutomaticBrightnessControllerTest {
-
-    private static final int BRIGHTNESS_MIN = 1;
-    private static final int BRIGHTNESS_MAX = 255;
+    private static final float BRIGHTNESS_MIN_FLOAT = 0.0f;
+    private static final float BRIGHTNESS_MAX_FLOAT = 1.0f;
     private static final int LIGHT_SENSOR_RATE = 20;
     private static final int INITIAL_LIGHT_SENSOR_RATE = 20;
     private static final int BRIGHTENING_LIGHT_DEBOUNCE_CONFIG = 0;
@@ -61,7 +59,6 @@
     @Mock BrightnessMappingStrategy mBrightnessMappingStrategy;
     @Mock HysteresisLevels mAmbientBrightnessThresholds;
     @Mock HysteresisLevels mScreenBrightnessThresholds;
-    @Mock PackageManager mPackageManager;
     @Mock Handler mNoopHandler;
 
     private static final int LIGHT_SENSOR_WARMUP_TIME = 0;
@@ -81,11 +78,11 @@
                     }
                 },
                 () -> { }, mContext.getMainLooper(), mSensorManager, lightSensor,
-                mBrightnessMappingStrategy, LIGHT_SENSOR_WARMUP_TIME, BRIGHTNESS_MIN,
-                BRIGHTNESS_MAX, DOZE_SCALE_FACTOR, LIGHT_SENSOR_RATE, INITIAL_LIGHT_SENSOR_RATE,
-                BRIGHTENING_LIGHT_DEBOUNCE_CONFIG, DARKENING_LIGHT_DEBOUNCE_CONFIG,
-                RESET_AMBIENT_LUX_AFTER_WARMUP_CONFIG, mAmbientBrightnessThresholds,
-                mScreenBrightnessThresholds, mPackageManager);
+                mBrightnessMappingStrategy, LIGHT_SENSOR_WARMUP_TIME, BRIGHTNESS_MIN_FLOAT,
+                BRIGHTNESS_MAX_FLOAT, DOZE_SCALE_FACTOR, LIGHT_SENSOR_RATE,
+                INITIAL_LIGHT_SENSOR_RATE, BRIGHTENING_LIGHT_DEBOUNCE_CONFIG,
+                DARKENING_LIGHT_DEBOUNCE_CONFIG, RESET_AMBIENT_LUX_AFTER_WARMUP_CONFIG,
+                mAmbientBrightnessThresholds, mScreenBrightnessThresholds, mContext);
         controller.setLoggingEnabled(true);
 
         // Configure the brightness controller and grab an instance of the sensor listener,
@@ -110,7 +107,7 @@
 
         // Set up system to return 5 as a brightness value
         float lux1 = 100.0f;
-        float normalizedBrightness1 = 0.02f;
+        float normalizedBrightness1 = 0.0158f; //float equivalent of 5 out of 255
         when(mAmbientBrightnessThresholds.getBrighteningThreshold(lux1))
                 .thenReturn(lux1);
         when(mAmbientBrightnessThresholds.getDarkeningThreshold(lux1))
@@ -156,7 +153,7 @@
 
         // Set up system to return 250 as a brightness value
         float lux1 = 100.0f;
-        float normalizedBrightness1 = 0.98f;
+        float normalizedBrightness1 = 0.981f; //float equivalent of 250 out of 255
         when(mAmbientBrightnessThresholds.getBrighteningThreshold(lux1))
                 .thenReturn(lux1);
         when(mAmbientBrightnessThresholds.getDarkeningThreshold(lux1))
diff --git a/services/tests/servicestests/src/com/android/server/display/DisplayManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/display/DisplayManagerServiceTest.java
index 8d5939a..7027185 100644
--- a/services/tests/servicestests/src/com/android/server/display/DisplayManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/DisplayManagerServiceTest.java
@@ -202,7 +202,7 @@
         assertEquals(1, displayIds.length);
         final int displayId = displayIds[0];
         DisplayInfo info = bs.getDisplayInfo(displayId);
-        assertEquals(info.type, Display.TYPE_BUILT_IN);
+        assertEquals(info.type, Display.TYPE_INTERNAL);
 
         displayManager.performTraversalInternal(mock(SurfaceControl.Transaction.class));
 
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java
index 50ed975..0551f2e 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java
@@ -76,6 +76,7 @@
     private boolean mMutingEnabled;
     private boolean mArcSupport;
     private HdmiPortInfo[] mHdmiPortInfo;
+    private boolean mWokenUp;
 
     @Before
     public void setUp() {
@@ -138,7 +139,9 @@
                 }
 
                 @Override
-                void wakeUp() {}
+                void wakeUp() {
+                    mWokenUp = true;
+                }
 
                 @Override
                 void invokeDeviceEventListeners(HdmiDeviceInfo device, int status) {
@@ -698,4 +701,18 @@
             .getCecDeviceInfo(differentDevice.getLogicalAddress())).isEqualTo(differentDevice);
         assertThat(mInvokeDeviceEventState).isEqualTo(DEVICE_EVENT_ADD_DEVICE);
     }
+
+    @Test
+    public void doNotWakeUpOnHotPlug_PlugIn() {
+        mWokenUp = false;
+        mHdmiCecLocalDeviceAudioSystem.onHotplug(0, true);
+        assertThat(mWokenUp).isFalse();
+    }
+
+    @Test
+    public void doNotWakeUpOnHotPlug_PlugOut() {
+        mWokenUp = false;
+        mHdmiCecLocalDeviceAudioSystem.onHotplug(0, false);
+        assertThat(mWokenUp).isFalse();
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java
index 0062a17..4a1af51 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java
@@ -47,6 +47,7 @@
     private TestLooper mTestLooper = new TestLooper();
     private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
     private int mPlaybackPhysicalAddress;
+    private boolean mWokenUp;
 
     @Before
     public void setUp() {
@@ -54,6 +55,7 @@
             new HdmiControlService(InstrumentationRegistry.getTargetContext()) {
                 @Override
                 void wakeUp() {
+                    mWokenUp = true;
                 }
 
                 @Override
@@ -135,4 +137,18 @@
         assertThat(mHdmiCecLocalDevicePlayback.handleSystemAudioModeStatus(message)).isTrue();
         assertThat(mHdmiCecLocalDevicePlayback.mService.isSystemAudioActivated()).isTrue();
     }
+
+    @Test
+    public void doNotWakeUpOnHotPlug_PlugIn() {
+        mWokenUp = false;
+        mHdmiCecLocalDevicePlayback.onHotplug(0, true);
+        assertThat(mWokenUp).isFalse();
+    }
+
+    @Test
+    public void doNotWakeUpOnHotPlug_PlugOut() {
+        mWokenUp = false;
+        mHdmiCecLocalDevicePlayback.onHotplug(0, false);
+        assertThat(mWokenUp).isFalse();
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceStaticTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceStaticTest.java
new file mode 100644
index 0000000..607cd81
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceStaticTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.hdmi;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.util.Locale;
+
+/**
+ * Tests for static methods of {@link HdmiControlService} class.
+ */
+@SmallTest
+@RunWith(JUnit4.class)
+public class HdmiControlServiceStaticTest {
+
+    @Test
+    public void localToMenuLanguage_english() {
+        assertThat(HdmiControlService.localeToMenuLanguage(Locale.ENGLISH)).isEqualTo("eng");
+    }
+
+    @Test
+    public void localToMenuLanguage_german() {
+        assertThat(HdmiControlService.localeToMenuLanguage(Locale.GERMAN)).isEqualTo("ger");
+    }
+
+    @Test
+    public void localToMenuLanguage_taiwan() {
+        assertThat(HdmiControlService.localeToMenuLanguage(Locale.TAIWAN)).isEqualTo("chi");
+    }
+
+    @Test
+    public void localToMenuLanguage_macau() {
+        assertThat(HdmiControlService.localeToMenuLanguage(new Locale("zh", "MO"))).isEqualTo(
+                "chi");
+    }
+
+    @Test
+    public void localToMenuLanguage_hongkong() {
+        assertThat(HdmiControlService.localeToMenuLanguage(new Locale("zh", "HK"))).isEqualTo(
+                "chi");
+    }
+
+    @Test
+    public void localToMenuLanguage_chinese() {
+        assertThat(HdmiControlService.localeToMenuLanguage(Locale.CHINESE)).isEqualTo("zho");
+    }
+
+}
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 9e98427..fa19814 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
@@ -34,6 +34,7 @@
 import android.hardware.hdmi.HdmiControlManager;
 import android.hardware.hdmi.HdmiPortInfo;
 import android.os.IPowerManager;
+import android.os.IThermalService;
 import android.os.Looper;
 import android.os.PowerManager;
 import android.os.RemoteException;
@@ -123,6 +124,7 @@
     private HdmiPortInfo[] mHdmiPortInfo;
 
     @Mock private IPowerManager mIPowerManagerMock;
+    @Mock private IThermalService mIThermalServiceMock;
 
     @Before
     public void setUp() throws Exception {
@@ -130,7 +132,8 @@
 
         mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
 
-        PowerManager powerManager = new PowerManager(mContextSpy, mIPowerManagerMock, null);
+        PowerManager powerManager = new PowerManager(mContextSpy, mIPowerManagerMock,
+                mIThermalServiceMock, null);
         when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenReturn(powerManager);
         when(mIPowerManagerMock.isInteractive()).thenReturn(true);
 
diff --git a/services/tests/servicestests/src/com/android/server/integrity/AppIntegrityManagerServiceImplTest.java b/services/tests/servicestests/src/com/android/server/integrity/AppIntegrityManagerServiceImplTest.java
index 4a7636a..be873bd 100644
--- a/services/tests/servicestests/src/com/android/server/integrity/AppIntegrityManagerServiceImplTest.java
+++ b/services/tests/servicestests/src/com/android/server/integrity/AppIntegrityManagerServiceImplTest.java
@@ -19,6 +19,7 @@
 import static android.content.integrity.AppIntegrityManager.EXTRA_STATUS;
 import static android.content.integrity.AppIntegrityManager.STATUS_FAILURE;
 import static android.content.integrity.AppIntegrityManager.STATUS_SUCCESS;
+import static android.content.integrity.InstallerAllowedByManifestFormula.INSTALLER_CERTIFICATE_NOT_EVALUATED;
 import static android.content.pm.PackageManager.EXTRA_VERIFICATION_ID;
 import static android.content.pm.PackageManager.EXTRA_VERIFICATION_INSTALLER_PACKAGE;
 import static android.content.pm.PackageManager.EXTRA_VERIFICATION_INSTALLER_UID;
@@ -39,6 +40,8 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -65,6 +68,7 @@
 import com.android.server.integrity.model.IntegrityCheckResult;
 import com.android.server.testutils.TestUtils;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -76,8 +80,9 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -85,7 +90,10 @@
 @RunWith(JUnit4.class)
 public class AppIntegrityManagerServiceImplTest {
     private static final String TEST_APP_PATH =
-            "/data/local/tmp/AppIntegrityManagerServiceTestApp.apk";
+            "AppIntegrityManagerServiceImplTest/AppIntegrityManagerServiceTestApp.apk";
+
+    private static final String TEST_APP_TWO_CERT_PATH =
+            "AppIntegrityManagerServiceImplTest/DummyAppTwoCerts.apk";
 
     private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
     private static final String VERSION = "version";
@@ -98,13 +106,16 @@
 
     // These are obtained by running the test and checking logcat.
     private static final String APP_CERT =
-            "301AA3CB081134501C45F1422ABC66C24224FD5DED5FDC8F17E697176FD866AA";
-    private static final String INSTALLER_CERT =
-            "301AA3CB081134501C45F1422ABC66C24224FD5DED5FDC8F17E697176FD866AA";
+            "C8A2E9BCCF597C2FB6DC66BEE293FC13F2FC47EC77BC6B2B0D52C11F51192AB8";
     // We use SHA256 for package names longer than 32 characters.
     private static final String INSTALLER_SHA256 =
             "30F41A7CBF96EE736A54DD6DF759B50ED3CC126ABCEF694E167C324F5976C227";
 
+    private static final String DUMMY_APP_TWO_CERTS_CERT_1 =
+            "C0369C2A1096632429DFA8433068AECEAD00BAC337CA92A175036D39CC9AFE94";
+    private static final String DUMMY_APP_TWO_CERTS_CERT_2 =
+            "94366E0A80F3A3F0D8171A15760B88E228CD6E1101F0414C98878724FBE70147";
+
     private static final String PLAY_STORE_PKG = "com.android.vending";
     private static final String ADB_INSTALLER = "adb";
     private static final String PLAY_STORE_CERT = "play_store_cert";
@@ -128,6 +139,7 @@
 
     private PackageManager mSpyPackageManager;
     private File mTestApk;
+    private File mTestApkTwoCerts;
 
     private final Context mRealContext = InstrumentationRegistry.getTargetContext();
     // under test
@@ -135,7 +147,15 @@
 
     @Before
     public void setup() throws Exception {
-        mTestApk = new File(TEST_APP_PATH);
+        mTestApk = File.createTempFile("AppIntegrity", ".apk");
+        try (InputStream inputStream = mRealContext.getAssets().open(TEST_APP_PATH)) {
+            Files.copy(inputStream, mTestApk.toPath(), REPLACE_EXISTING);
+        }
+
+        mTestApkTwoCerts = File.createTempFile("AppIntegrityTwoCerts", ".apk");
+        try (InputStream inputStream = mRealContext.getAssets().open(TEST_APP_TWO_CERT_PATH)) {
+            Files.copy(inputStream, mTestApkTwoCerts.toPath(), REPLACE_EXISTING);
+        }
 
         mService =
                 new AppIntegrityManagerServiceImpl(
@@ -154,6 +174,12 @@
         when(mIntegrityFileManager.initialized()).thenReturn(true);
     }
 
+    @After
+    public void tearDown() throws Exception {
+        mTestApk.delete();
+        mTestApkTwoCerts.delete();
+    }
+
     @Test
     public void updateRuleSet_notAuthorized() throws Exception {
         makeUsSystemApp();
@@ -211,7 +237,8 @@
         IntentSender mockReceiver = mock(IntentSender.class);
         List<Rule> rules =
                 Arrays.asList(
-                        new Rule(IntegrityFormula.PACKAGE_NAME.equalTo(PACKAGE_NAME), Rule.DENY));
+                        new Rule(IntegrityFormula.Application.packageNameEquals(PACKAGE_NAME),
+                                Rule.DENY));
 
         mService.updateRuleSet(VERSION, new ParceledListSlice<>(rules), mockReceiver);
         runJobInHandler();
@@ -230,7 +257,8 @@
         IntentSender mockReceiver = mock(IntentSender.class);
         List<Rule> rules =
                 Arrays.asList(
-                        new Rule(IntegrityFormula.PACKAGE_NAME.equalTo(PACKAGE_NAME), Rule.DENY));
+                        new Rule(IntegrityFormula.Application.packageNameEquals(PACKAGE_NAME),
+                                Rule.DENY));
 
         mService.updateRuleSet(VERSION, new ParceledListSlice<>(rules), mockReceiver);
         runJobInHandler();
@@ -266,30 +294,51 @@
         verify(mMockContext)
                 .registerReceiver(broadcastReceiverCaptor.capture(), any(), any(), any());
         Intent intent = makeVerificationIntent();
-        when(mRuleEvaluationEngine.evaluate(any(), any())).thenReturn(IntegrityCheckResult.allow());
+        when(mRuleEvaluationEngine.evaluate(any())).thenReturn(IntegrityCheckResult.allow());
 
         broadcastReceiverCaptor.getValue().onReceive(mMockContext, intent);
         runJobInHandler();
 
         ArgumentCaptor<AppInstallMetadata> metadataCaptor =
                 ArgumentCaptor.forClass(AppInstallMetadata.class);
-        Map<String, String> allowedInstallers = new HashMap<>();
-        ArgumentCaptor<Map<String, String>> allowedInstallersCaptor =
-                ArgumentCaptor.forClass(allowedInstallers.getClass());
         verify(mRuleEvaluationEngine)
-                .evaluate(metadataCaptor.capture(), allowedInstallersCaptor.capture());
+                .evaluate(metadataCaptor.capture());
         AppInstallMetadata appInstallMetadata = metadataCaptor.getValue();
-        allowedInstallers = allowedInstallersCaptor.getValue();
         assertEquals(PACKAGE_NAME, appInstallMetadata.getPackageName());
-        assertEquals(APP_CERT, appInstallMetadata.getAppCertificate());
+        assertThat(appInstallMetadata.getAppCertificates()).containsExactly(APP_CERT);
         assertEquals(INSTALLER_SHA256, appInstallMetadata.getInstallerName());
-        assertEquals(INSTALLER_CERT, appInstallMetadata.getInstallerCertificate());
+        // we cannot check installer cert because it seems to be device specific.
         assertEquals(VERSION_CODE, appInstallMetadata.getVersionCode());
         assertFalse(appInstallMetadata.isPreInstalled());
         // These are hardcoded in the test apk android manifest
+        Map<String, String> allowedInstallers =
+                appInstallMetadata.getAllowedInstallersAndCertificates();
         assertEquals(2, allowedInstallers.size());
         assertEquals(PLAY_STORE_CERT, allowedInstallers.get(PLAY_STORE_PKG));
-        assertEquals(ADB_CERT, allowedInstallers.get(ADB_INSTALLER));
+        assertEquals(INSTALLER_CERTIFICATE_NOT_EVALUATED, allowedInstallers.get(ADB_INSTALLER));
+    }
+
+    @Test
+    public void handleBroadcast_correctArgs_multipleCerts() throws Exception {
+        whitelistUsAsRuleProvider();
+        makeUsSystemApp();
+        ArgumentCaptor<BroadcastReceiver> broadcastReceiverCaptor =
+                ArgumentCaptor.forClass(BroadcastReceiver.class);
+        verify(mMockContext)
+                .registerReceiver(broadcastReceiverCaptor.capture(), any(), any(), any());
+        Intent intent = makeVerificationIntent();
+        intent.setDataAndType(Uri.fromFile(mTestApkTwoCerts), PACKAGE_MIME_TYPE);
+        when(mRuleEvaluationEngine.evaluate(any())).thenReturn(IntegrityCheckResult.allow());
+
+        broadcastReceiverCaptor.getValue().onReceive(mMockContext, intent);
+        runJobInHandler();
+
+        ArgumentCaptor<AppInstallMetadata> metadataCaptor =
+                ArgumentCaptor.forClass(AppInstallMetadata.class);
+        verify(mRuleEvaluationEngine).evaluate(metadataCaptor.capture());
+        AppInstallMetadata appInstallMetadata = metadataCaptor.getValue();
+        assertThat(appInstallMetadata.getAppCertificates()).containsExactly(
+                DUMMY_APP_TWO_CERTS_CERT_1, DUMMY_APP_TWO_CERTS_CERT_2);
     }
 
     @Test
@@ -301,7 +350,7 @@
         verify(mMockContext)
                 .registerReceiver(broadcastReceiverCaptor.capture(), any(), any(), any());
         Intent intent = makeVerificationIntent();
-        when(mRuleEvaluationEngine.evaluate(any(), any())).thenReturn(IntegrityCheckResult.allow());
+        when(mRuleEvaluationEngine.evaluate(any())).thenReturn(IntegrityCheckResult.allow());
 
         broadcastReceiverCaptor.getValue().onReceive(mMockContext, intent);
         runJobInHandler();
@@ -319,7 +368,7 @@
                 ArgumentCaptor.forClass(BroadcastReceiver.class);
         verify(mMockContext)
                 .registerReceiver(broadcastReceiverCaptor.capture(), any(), any(), any());
-        when(mRuleEvaluationEngine.evaluate(any(), any()))
+        when(mRuleEvaluationEngine.evaluate(any()))
                 .thenReturn(
                         IntegrityCheckResult.deny(
                                 Arrays.asList(
@@ -347,7 +396,7 @@
         verify(mMockContext)
                 .registerReceiver(broadcastReceiverCaptor.capture(), any(), any(), any());
         Intent intent = makeVerificationIntent();
-        when(mRuleEvaluationEngine.evaluate(any(), any())).thenReturn(IntegrityCheckResult.allow());
+        when(mRuleEvaluationEngine.evaluate(any())).thenReturn(IntegrityCheckResult.allow());
 
         broadcastReceiverCaptor.getValue().onReceive(mMockContext, intent);
         runJobInHandler();
@@ -375,7 +424,7 @@
         verify(mMockContext, atLeastOnce())
                 .registerReceiver(broadcastReceiverCaptor.capture(), any(), any(), any());
         Intent intent = makeVerificationIntent(TEST_FRAMEWORK_PACKAGE);
-        when(mRuleEvaluationEngine.evaluate(any(), any()))
+        when(mRuleEvaluationEngine.evaluate(any()))
                 .thenReturn(IntegrityCheckResult.deny(/* rule= */ null));
 
         broadcastReceiverCaptor.getValue().onReceive(mMockContext, intent);
@@ -390,7 +439,7 @@
     public void getCurrentRules() throws Exception {
         whitelistUsAsRuleProvider();
         makeUsSystemApp();
-        Rule rule = new Rule(IntegrityFormula.PACKAGE_NAME.equalTo("package"), Rule.DENY);
+        Rule rule = new Rule(IntegrityFormula.Application.packageNameEquals("package"), Rule.DENY);
         when(mIntegrityFileManager.readRules(any())).thenReturn(Arrays.asList(rule));
 
         assertThat(mService.getCurrentRules().getList()).containsExactly(rule);
@@ -423,7 +472,8 @@
         PackageInfo packageInfo =
                 mRealContext
                         .getPackageManager()
-                        .getPackageInfo(TEST_FRAMEWORK_PACKAGE, PackageManager.GET_SIGNATURES);
+                        .getPackageInfo(TEST_FRAMEWORK_PACKAGE,
+                                PackageManager.GET_SIGNING_CERTIFICATES);
         doReturn(packageInfo).when(mSpyPackageManager).getPackageInfo(eq(INSTALLER), anyInt());
         doReturn(1).when(mSpyPackageManager).getPackageUid(eq(INSTALLER), anyInt());
         return makeVerificationIntent(INSTALLER);
diff --git a/services/tests/servicestests/src/com/android/server/integrity/IntegrityFileManagerTest.java b/services/tests/servicestests/src/com/android/server/integrity/IntegrityFileManagerTest.java
index 86daf69..41be54a 100644
--- a/services/tests/servicestests/src/com/android/server/integrity/IntegrityFileManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/integrity/IntegrityFileManagerTest.java
@@ -141,10 +141,10 @@
         AppInstallMetadata appInstallMetadata =
                 new AppInstallMetadata.Builder()
                         .setPackageName(packageName)
-                        .setAppCertificate(packageCert)
+                        .setAppCertificates(Collections.singletonList(packageCert))
                         .setVersionCode(version)
                         .setInstallerName("abc")
-                        .setInstallerCertificate("abc")
+                        .setInstallerCertificates(Collections.singletonList("abc"))
                         .setIsPreInstalled(true)
                         .build();
         List<Rule> rulesFetched = mIntegrityFileManager.readRules(appInstallMetadata);
@@ -182,10 +182,10 @@
         AppInstallMetadata appInstallMetadata =
                 new AppInstallMetadata.Builder()
                         .setPackageName(installedPackageName)
-                        .setAppCertificate(installedAppCertificate)
+                        .setAppCertificates(Collections.singletonList(installedAppCertificate))
                         .setVersionCode(250)
                         .setInstallerName("abc")
-                        .setInstallerCertificate("abc")
+                        .setInstallerCertificates(Collections.singletonList("abc"))
                         .setIsPreInstalled(true)
                         .build();
         List<Rule> rulesFetched = mIntegrityFileManager.readRules(appInstallMetadata);
diff --git a/services/tests/servicestests/src/com/android/server/integrity/engine/RuleEvaluationEngineTest.java b/services/tests/servicestests/src/com/android/server/integrity/engine/RuleEvaluationEngineTest.java
index 26b2096..0488745 100644
--- a/services/tests/servicestests/src/com/android/server/integrity/engine/RuleEvaluationEngineTest.java
+++ b/services/tests/servicestests/src/com/android/server/integrity/engine/RuleEvaluationEngineTest.java
@@ -22,6 +22,8 @@
 import static org.mockito.Mockito.when;
 
 import android.content.integrity.AppInstallMetadata;
+import android.content.integrity.IntegrityFormula;
+import android.content.integrity.Rule;
 
 import com.android.server.integrity.IntegrityFileManager;
 import com.android.server.integrity.model.IntegrityCheckResult;
@@ -33,7 +35,6 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
@@ -60,34 +61,35 @@
 
         mEngine = new RuleEvaluationEngine(mIntegrityFileManager);
 
-        when(mIntegrityFileManager.readRules(any())).thenReturn(new ArrayList<>());
+        when(mIntegrityFileManager.readRules(any())).thenReturn(Collections.singletonList(new Rule(
+                IntegrityFormula.Installer.notAllowedByManifest(), Rule.DENY)));
+
+        when(mIntegrityFileManager.initialized()).thenReturn(true);
     }
 
     @Test
     public void testAllowedInstallers_empty() {
-        Map<String, String> allowedInstallers = Collections.emptyMap();
-
         AppInstallMetadata appInstallMetadata1 =
                 getAppInstallMetadataBuilder()
                         .setInstallerName(INSTALLER_1)
-                        .setInstallerCertificate(INSTALLER_1_CERT)
+                        .setInstallerCertificates(Collections.singletonList(INSTALLER_1_CERT))
                         .build();
         AppInstallMetadata appInstallMetadata2 =
                 getAppInstallMetadataBuilder()
                         .setInstallerName(INSTALLER_2)
-                        .setInstallerCertificate(INSTALLER_2_CERT)
+                        .setInstallerCertificates(Collections.singletonList(INSTALLER_2_CERT))
                         .build();
         AppInstallMetadata appInstallMetadata3 =
                 getAppInstallMetadataBuilder()
                         .setInstallerName(RANDOM_INSTALLER)
-                        .setInstallerCertificate(RANDOM_INSTALLER_CERT)
+                        .setInstallerCertificates(Collections.singletonList(RANDOM_INSTALLER_CERT))
                         .build();
 
-        assertThat(mEngine.evaluate(appInstallMetadata1, allowedInstallers).getEffect())
+        assertThat(mEngine.evaluate(appInstallMetadata1).getEffect())
                 .isEqualTo(IntegrityCheckResult.Effect.ALLOW);
-        assertThat(mEngine.evaluate(appInstallMetadata2, allowedInstallers).getEffect())
+        assertThat(mEngine.evaluate(appInstallMetadata2).getEffect())
                 .isEqualTo(IntegrityCheckResult.Effect.ALLOW);
-        assertThat(mEngine.evaluate(appInstallMetadata3, allowedInstallers).getEffect())
+        assertThat(mEngine.evaluate(appInstallMetadata3).getEffect())
                 .isEqualTo(IntegrityCheckResult.Effect.ALLOW);
     }
 
@@ -99,33 +101,37 @@
         AppInstallMetadata appInstallMetadata1 =
                 getAppInstallMetadataBuilder()
                         .setInstallerName(INSTALLER_1)
-                        .setInstallerCertificate(INSTALLER_1_CERT)
+                        .setInstallerCertificates(Collections.singletonList(INSTALLER_1_CERT))
+                        .setAllowedInstallersAndCert(allowedInstallers)
                         .build();
-        assertThat(mEngine.evaluate(appInstallMetadata1, allowedInstallers).getEffect())
+        assertThat(mEngine.evaluate(appInstallMetadata1).getEffect())
                 .isEqualTo(IntegrityCheckResult.Effect.ALLOW);
 
         AppInstallMetadata appInstallMetadata2 =
                 getAppInstallMetadataBuilder()
                         .setInstallerName(RANDOM_INSTALLER)
-                        .setInstallerCertificate(INSTALLER_1_CERT)
+                        .setAllowedInstallersAndCert(allowedInstallers)
+                        .setInstallerCertificates(Collections.singletonList(INSTALLER_1_CERT))
                         .build();
-        assertThat(mEngine.evaluate(appInstallMetadata2, allowedInstallers).getEffect())
+        assertThat(mEngine.evaluate(appInstallMetadata2).getEffect())
                 .isEqualTo(IntegrityCheckResult.Effect.DENY);
 
         AppInstallMetadata appInstallMetadata3 =
                 getAppInstallMetadataBuilder()
                         .setInstallerName(INSTALLER_1)
-                        .setInstallerCertificate(RANDOM_INSTALLER_CERT)
+                        .setAllowedInstallersAndCert(allowedInstallers)
+                        .setInstallerCertificates(Collections.singletonList(RANDOM_INSTALLER_CERT))
                         .build();
-        assertThat(mEngine.evaluate(appInstallMetadata3, allowedInstallers).getEffect())
+        assertThat(mEngine.evaluate(appInstallMetadata3).getEffect())
                 .isEqualTo(IntegrityCheckResult.Effect.DENY);
 
         AppInstallMetadata appInstallMetadata4 =
                 getAppInstallMetadataBuilder()
                         .setInstallerName(INSTALLER_1)
-                        .setInstallerCertificate(RANDOM_INSTALLER_CERT)
+                        .setAllowedInstallersAndCert(allowedInstallers)
+                        .setInstallerCertificates(Collections.singletonList(RANDOM_INSTALLER_CERT))
                         .build();
-        assertThat(mEngine.evaluate(appInstallMetadata4, allowedInstallers).getEffect())
+        assertThat(mEngine.evaluate(appInstallMetadata4).getEffect())
                 .isEqualTo(IntegrityCheckResult.Effect.DENY);
     }
 
@@ -138,57 +144,37 @@
         AppInstallMetadata appInstallMetadata1 =
                 getAppInstallMetadataBuilder()
                         .setInstallerName(INSTALLER_1)
-                        .setInstallerCertificate(INSTALLER_1_CERT)
+                        .setAllowedInstallersAndCert(allowedInstallers)
+                        .setInstallerCertificates(Collections.singletonList(INSTALLER_1_CERT))
                         .build();
-        assertThat(mEngine.evaluate(appInstallMetadata1, allowedInstallers).getEffect())
+        assertThat(mEngine.evaluate(appInstallMetadata1).getEffect())
                 .isEqualTo(IntegrityCheckResult.Effect.ALLOW);
 
         AppInstallMetadata appInstallMetadata2 =
                 getAppInstallMetadataBuilder()
                         .setInstallerName(INSTALLER_2)
-                        .setInstallerCertificate(INSTALLER_2_CERT)
+                        .setAllowedInstallersAndCert(allowedInstallers)
+                        .setInstallerCertificates(Collections.singletonList(INSTALLER_2_CERT))
                         .build();
-        assertThat(mEngine.evaluate(appInstallMetadata2, allowedInstallers).getEffect())
+        assertThat(mEngine.evaluate(appInstallMetadata2).getEffect())
                 .isEqualTo(IntegrityCheckResult.Effect.ALLOW);
 
         AppInstallMetadata appInstallMetadata3 =
                 getAppInstallMetadataBuilder()
                         .setInstallerName(INSTALLER_1)
-                        .setInstallerCertificate(INSTALLER_2_CERT)
+                        .setAllowedInstallersAndCert(allowedInstallers)
+                        .setInstallerCertificates(Collections.singletonList(INSTALLER_2_CERT))
                         .build();
-        assertThat(mEngine.evaluate(appInstallMetadata3, allowedInstallers).getEffect())
+        assertThat(mEngine.evaluate(appInstallMetadata3).getEffect())
                 .isEqualTo(IntegrityCheckResult.Effect.DENY);
 
         AppInstallMetadata appInstallMetadata4 =
                 getAppInstallMetadataBuilder()
                         .setInstallerName(INSTALLER_2)
-                        .setInstallerCertificate(INSTALLER_1_CERT)
+                        .setAllowedInstallersAndCert(allowedInstallers)
+                        .setInstallerCertificates(Collections.singletonList(INSTALLER_1_CERT))
                         .build();
-        assertThat(mEngine.evaluate(appInstallMetadata4, allowedInstallers).getEffect())
-                .isEqualTo(IntegrityCheckResult.Effect.DENY);
-    }
-
-    @Test
-    public void manifestBasedRuleEvaluationWorksEvenWhenIntegrityFilesAreUnavailable() {
-        when(mIntegrityFileManager.initialized()).thenReturn(false);
-
-        Map<String, String> allowedInstallers =
-                Collections.singletonMap(INSTALLER_1, INSTALLER_1_CERT);
-
-        AppInstallMetadata appInstallMetadata1 =
-                getAppInstallMetadataBuilder()
-                        .setInstallerName(INSTALLER_1)
-                        .setInstallerCertificate(INSTALLER_1_CERT)
-                        .build();
-        assertThat(mEngine.evaluate(appInstallMetadata1, allowedInstallers).getEffect())
-                .isEqualTo(IntegrityCheckResult.Effect.ALLOW);
-
-        AppInstallMetadata appInstallMetadata2 =
-                getAppInstallMetadataBuilder()
-                        .setInstallerName(RANDOM_INSTALLER)
-                        .setInstallerCertificate(INSTALLER_1_CERT)
-                        .build();
-        assertThat(mEngine.evaluate(appInstallMetadata2, allowedInstallers).getEffect())
+        assertThat(mEngine.evaluate(appInstallMetadata4).getEffect())
                 .isEqualTo(IntegrityCheckResult.Effect.DENY);
     }
 
@@ -196,8 +182,8 @@
     private AppInstallMetadata.Builder getAppInstallMetadataBuilder() {
         return new AppInstallMetadata.Builder()
                 .setPackageName("abc")
-                .setAppCertificate("abc")
-                .setInstallerCertificate("abc")
+                .setAppCertificates(Collections.singletonList("abc"))
+                .setInstallerCertificates(Collections.singletonList("abc"))
                 .setInstallerName("abc")
                 .setVersionCode(-1)
                 .setIsPreInstalled(true);
diff --git a/services/tests/servicestests/src/com/android/server/integrity/engine/RuleEvaluatorTest.java b/services/tests/servicestests/src/com/android/server/integrity/engine/RuleEvaluatorTest.java
index 7b53e5e..b271a77 100644
--- a/services/tests/servicestests/src/com/android/server/integrity/engine/RuleEvaluatorTest.java
+++ b/services/tests/servicestests/src/com/android/server/integrity/engine/RuleEvaluatorTest.java
@@ -48,7 +48,7 @@
     private static final AppInstallMetadata APP_INSTALL_METADATA =
             new AppInstallMetadata.Builder()
                     .setPackageName(PACKAGE_NAME_1)
-                    .setAppCertificate(APP_CERTIFICATE)
+                    .setAppCertificates(Collections.singletonList(APP_CERTIFICATE))
                     .setVersionCode(2)
                     .build();
 
diff --git a/services/tests/servicestests/src/com/android/server/integrity/parser/RuleBinaryParserTest.java b/services/tests/servicestests/src/com/android/server/integrity/parser/RuleBinaryParserTest.java
index 38cf562..ab21ab0 100644
--- a/services/tests/servicestests/src/com/android/server/integrity/parser/RuleBinaryParserTest.java
+++ b/services/tests/servicestests/src/com/android/server/integrity/parser/RuleBinaryParserTest.java
@@ -58,7 +58,7 @@
             getBits(COMPOUND_FORMULA_END, SEPARATOR_BITS);
     private static final String ATOMIC_FORMULA_START_BITS =
             getBits(ATOMIC_FORMULA_START, SEPARATOR_BITS);
-    private static final int INVALID_FORMULA_SEPARATOR_VALUE = 3;
+    private static final int INVALID_FORMULA_SEPARATOR_VALUE = (1 << SEPARATOR_BITS) - 1;
     private static final String INVALID_FORMULA_SEPARATOR_BITS =
             getBits(INVALID_FORMULA_SEPARATOR_VALUE, SEPARATOR_BITS);
 
@@ -73,7 +73,7 @@
     private static final String APP_CERTIFICATE = getBits(AtomicFormula.APP_CERTIFICATE, KEY_BITS);
     private static final String VERSION_CODE = getBits(AtomicFormula.VERSION_CODE, KEY_BITS);
     private static final String PRE_INSTALLED = getBits(AtomicFormula.PRE_INSTALLED, KEY_BITS);
-    private static final int INVALID_KEY_VALUE = 6;
+    private static final int INVALID_KEY_VALUE = 8;
     private static final String INVALID_KEY = getBits(INVALID_KEY_VALUE, KEY_BITS);
 
     private static final String EQ = getBits(AtomicFormula.EQ, OPERATOR_BITS);
diff --git a/services/tests/servicestests/src/com/android/server/integrity/parser/RuleIndexingControllerTest.java b/services/tests/servicestests/src/com/android/server/integrity/parser/RuleIndexingControllerTest.java
index 742952e..0784b7a 100644
--- a/services/tests/servicestests/src/com/android/server/integrity/parser/RuleIndexingControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/integrity/parser/RuleIndexingControllerTest.java
@@ -35,6 +35,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.ByteBuffer;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 @RunWith(JUnit4.class)
@@ -49,7 +51,7 @@
         AppInstallMetadata appInstallMetadata =
                 new AppInstallMetadata.Builder()
                         .setPackageName("ddd")
-                        .setAppCertificate("777")
+                        .setAppCertificates(Collections.singletonList("777"))
                         .build();
 
         List<RuleIndexRange> resultingIndexes =
@@ -63,6 +65,29 @@
     }
 
     @Test
+    public void verifyIndexRangeSearchIsCorrect_multipleAppCertificates() throws IOException {
+        InputStream inputStream = obtainDefaultIndexingMapForTest();
+
+        RuleIndexingController indexingController = new RuleIndexingController(inputStream);
+
+        AppInstallMetadata appInstallMetadata =
+                new AppInstallMetadata.Builder()
+                        .setPackageName("ddd")
+                        .setAppCertificates(Arrays.asList("777", "999"))
+                        .build();
+
+        List<RuleIndexRange> resultingIndexes =
+                indexingController.identifyRulesToEvaluate(appInstallMetadata);
+
+        assertThat(resultingIndexes)
+                .containsExactly(
+                        new RuleIndexRange(200, 300),
+                        new RuleIndexRange(700, 800),
+                        new RuleIndexRange(800, 900),
+                        new RuleIndexRange(900, 945));
+    }
+
+    @Test
     public void verifyIndexRangeSearchIsCorrect_keysInFirstAndLastBlock() throws IOException {
         InputStream inputStream = obtainDefaultIndexingMapForTest();
 
@@ -71,7 +96,7 @@
         AppInstallMetadata appInstallMetadata =
                 new AppInstallMetadata.Builder()
                         .setPackageName("bbb")
-                        .setAppCertificate("999")
+                        .setAppCertificates(Collections.singletonList("999"))
                         .build();
 
         List<RuleIndexRange> resultingIndexes =
@@ -93,7 +118,7 @@
         AppInstallMetadata appInstallMetadata =
                 new AppInstallMetadata.Builder()
                         .setPackageName("ccc")
-                        .setAppCertificate("444")
+                        .setAppCertificates(Collections.singletonList("444"))
                         .build();
 
         List<RuleIndexRange> resultingIndexes =
@@ -125,7 +150,7 @@
         AppInstallMetadata appInstallMetadata =
                 new AppInstallMetadata.Builder()
                         .setPackageName("ccc")
-                        .setAppCertificate("444")
+                        .setAppCertificates(Collections.singletonList("444"))
                         .build();
 
         List<RuleIndexRange> resultingIndexes =
diff --git a/services/tests/servicestests/src/com/android/server/integrity/serializer/RuleIndexingDetailsIdentifierTest.java b/services/tests/servicestests/src/com/android/server/integrity/serializer/RuleIndexingDetailsIdentifierTest.java
index 913aff7..ea9e6ff 100644
--- a/services/tests/servicestests/src/com/android/server/integrity/serializer/RuleIndexingDetailsIdentifierTest.java
+++ b/services/tests/servicestests/src/com/android/server/integrity/serializer/RuleIndexingDetailsIdentifierTest.java
@@ -112,6 +112,7 @@
                                     ATOMIC_FORMULA_WITH_VERSION_CODE,
                                     ATOMIC_FORMULA_WITH_ISPREINSTALLED)),
                     Rule.DENY);
+    public static final int INVALID_FORMULA_TAG = -1;
 
     @Test
     public void getIndexType_nullRule() {
@@ -290,7 +291,7 @@
         return new AtomicFormula(0) {
             @Override
             public int getTag() {
-                return 4;
+                return INVALID_FORMULA_TAG;
             }
 
             @Override
diff --git a/services/tests/servicestests/src/com/android/server/location/LocationRequestStatisticsTest.java b/services/tests/servicestests/src/com/android/server/location/LocationRequestStatisticsTest.java
index c45820e6..b6b8b82 100644
--- a/services/tests/servicestests/src/com/android/server/location/LocationRequestStatisticsTest.java
+++ b/services/tests/servicestests/src/com/android/server/location/LocationRequestStatisticsTest.java
@@ -1,17 +1,18 @@
 package com.android.server.location;
 
-import com.android.server.location.LocationRequestStatistics.PackageProviderKey;
-import com.android.server.location.LocationRequestStatistics.PackageStatistics;
-
 import android.os.SystemClock;
 import android.test.AndroidTestCase;
 
+import com.android.server.location.LocationRequestStatistics.PackageProviderKey;
+import com.android.server.location.LocationRequestStatistics.PackageStatistics;
+
 /**
  * Unit tests for {@link LocationRequestStatistics}.
  */
 public class LocationRequestStatisticsTest extends AndroidTestCase {
     private static final String PACKAGE1 = "package1";
     private static final String PACKAGE2 = "package2";
+    private static final String FEATURE_ID = "featureId";
     private static final String PROVIDER1 = "provider1";
     private static final String PROVIDER2 = "provider2";
     private static final long INTERVAL1 = 5000;
@@ -30,12 +31,13 @@
      * Tests that adding a single package works correctly.
      */
     public void testSinglePackage() {
-        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
+        mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
 
         assertEquals(1, mStatistics.statistics.size());
         PackageProviderKey key = mStatistics.statistics.keySet().iterator().next();
-        assertEquals(PACKAGE1, key.packageName);
-        assertEquals(PROVIDER1, key.providerName);
+        assertEquals(PACKAGE1, key.mPackageName);
+        assertEquals(PROVIDER1, key.mProviderName);
+        assertEquals(FEATURE_ID, key.mFeatureId);
         PackageStatistics stats = mStatistics.statistics.values().iterator().next();
         verifyStatisticsTimes(stats);
         assertEquals(INTERVAL1, stats.getFastestIntervalMs());
@@ -47,21 +49,22 @@
      * Tests that adding a single package works correctly when it is stopped and restarted.
      */
     public void testSinglePackage_stopAndRestart() {
-        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
-        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
-        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
+        mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
+        mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
+        mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
 
         assertEquals(1, mStatistics.statistics.size());
         PackageProviderKey key = mStatistics.statistics.keySet().iterator().next();
-        assertEquals(PACKAGE1, key.packageName);
-        assertEquals(PROVIDER1, key.providerName);
+        assertEquals(PACKAGE1, key.mPackageName);
+        assertEquals(FEATURE_ID, key.mFeatureId);
+        assertEquals(PROVIDER1, key.mProviderName);
         PackageStatistics stats = mStatistics.statistics.values().iterator().next();
         verifyStatisticsTimes(stats);
         assertEquals(INTERVAL1, stats.getFastestIntervalMs());
         assertEquals(INTERVAL1, stats.getSlowestIntervalMs());
         assertTrue(stats.isActive());
 
-        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+        mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
         assertFalse(stats.isActive());
     }
 
@@ -69,21 +72,22 @@
      * Tests that adding a single package works correctly when multiple intervals are used.
      */
     public void testSinglePackage_multipleIntervals() {
-        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
-        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL2, true);
+        mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
+        mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL2, true);
 
         assertEquals(1, mStatistics.statistics.size());
         PackageProviderKey key = mStatistics.statistics.keySet().iterator().next();
-        assertEquals(PACKAGE1, key.packageName);
-        assertEquals(PROVIDER1, key.providerName);
+        assertEquals(PACKAGE1, key.mPackageName);
+        assertEquals(PROVIDER1, key.mProviderName);
+        assertEquals(FEATURE_ID, key.mFeatureId);
         PackageStatistics stats = mStatistics.statistics.values().iterator().next();
         verifyStatisticsTimes(stats);
         assertEquals(INTERVAL1, stats.getFastestIntervalMs());
         assertTrue(stats.isActive());
 
-        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+        mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
         assertTrue(stats.isActive());
-        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+        mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
         assertFalse(stats.isActive());
     }
 
@@ -91,27 +95,27 @@
      * Tests that adding a single package works correctly when multiple providers are used.
      */
     public void testSinglePackage_multipleProviders() {
-        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
-        mStatistics.startRequesting(PACKAGE1, PROVIDER2, INTERVAL2, true);
+        mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
+        mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER2, INTERVAL2, true);
 
         assertEquals(2, mStatistics.statistics.size());
-        PackageProviderKey key1 = new PackageProviderKey(PACKAGE1, PROVIDER1);
+        PackageProviderKey key1 = new PackageProviderKey(PACKAGE1, FEATURE_ID, PROVIDER1);
         PackageStatistics stats1 = mStatistics.statistics.get(key1);
         verifyStatisticsTimes(stats1);
         assertEquals(INTERVAL1, stats1.getSlowestIntervalMs());
         assertEquals(INTERVAL1, stats1.getFastestIntervalMs());
         assertTrue(stats1.isActive());
-        PackageProviderKey key2 = new PackageProviderKey(PACKAGE1, PROVIDER2);
+        PackageProviderKey key2 = new PackageProviderKey(PACKAGE1, FEATURE_ID, PROVIDER2);
         PackageStatistics stats2 = mStatistics.statistics.get(key2);
         verifyStatisticsTimes(stats2);
         assertEquals(INTERVAL2, stats2.getSlowestIntervalMs());
         assertEquals(INTERVAL2, stats2.getFastestIntervalMs());
         assertTrue(stats2.isActive());
 
-        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+        mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
         assertFalse(stats1.isActive());
         assertTrue(stats2.isActive());
-        mStatistics.stopRequesting(PACKAGE1, PROVIDER2);
+        mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER2);
         assertFalse(stats1.isActive());
         assertFalse(stats2.isActive());
     }
@@ -120,46 +124,46 @@
      * Tests that adding multiple packages works correctly.
      */
     public void testMultiplePackages() {
-        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
-        mStatistics.startRequesting(PACKAGE1, PROVIDER2, INTERVAL1, true);
-        mStatistics.startRequesting(PACKAGE1, PROVIDER2, INTERVAL2, true);
-        mStatistics.startRequesting(PACKAGE2, PROVIDER1, INTERVAL1, true);
+        mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
+        mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER2, INTERVAL1, true);
+        mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER2, INTERVAL2, true);
+        mStatistics.startRequesting(PACKAGE2, FEATURE_ID, PROVIDER1, INTERVAL1, true);
 
         assertEquals(3, mStatistics.statistics.size());
-        PackageProviderKey key1 = new PackageProviderKey(PACKAGE1, PROVIDER1);
+        PackageProviderKey key1 = new PackageProviderKey(PACKAGE1, FEATURE_ID, PROVIDER1);
         PackageStatistics stats1 = mStatistics.statistics.get(key1);
         verifyStatisticsTimes(stats1);
         assertEquals(INTERVAL1, stats1.getSlowestIntervalMs());
         assertEquals(INTERVAL1, stats1.getFastestIntervalMs());
         assertTrue(stats1.isActive());
 
-        PackageProviderKey key2 = new PackageProviderKey(PACKAGE1, PROVIDER2);
+        PackageProviderKey key2 = new PackageProviderKey(PACKAGE1, FEATURE_ID, PROVIDER2);
         PackageStatistics stats2 = mStatistics.statistics.get(key2);
         verifyStatisticsTimes(stats2);
         assertEquals(INTERVAL2, stats2.getSlowestIntervalMs());
         assertEquals(INTERVAL1, stats2.getFastestIntervalMs());
         assertTrue(stats2.isActive());
 
-        PackageProviderKey key3 = new PackageProviderKey(PACKAGE2, PROVIDER1);
+        PackageProviderKey key3 = new PackageProviderKey(PACKAGE2, FEATURE_ID, PROVIDER1);
         PackageStatistics stats3 = mStatistics.statistics.get(key3);
         verifyStatisticsTimes(stats3);
         assertEquals(INTERVAL1, stats3.getSlowestIntervalMs());
         assertEquals(INTERVAL1, stats3.getFastestIntervalMs());
         assertTrue(stats3.isActive());
 
-        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+        mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
         assertFalse(stats1.isActive());
         assertTrue(stats2.isActive());
         assertTrue(stats3.isActive());
 
-        mStatistics.stopRequesting(PACKAGE1, PROVIDER2);
+        mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER2);
         assertFalse(stats1.isActive());
         assertTrue(stats2.isActive());
         assertTrue(stats3.isActive());
-        mStatistics.stopRequesting(PACKAGE1, PROVIDER2);
+        mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER2);
         assertFalse(stats2.isActive());
 
-        mStatistics.stopRequesting(PACKAGE2, PROVIDER1);
+        mStatistics.stopRequesting(PACKAGE2, FEATURE_ID, PROVIDER1);
         assertFalse(stats1.isActive());
         assertFalse(stats2.isActive());
         assertFalse(stats3.isActive());
@@ -169,14 +173,14 @@
      * Tests that switching foreground & background states accmulates time reasonably.
      */
     public void testForegroundBackground() {
-        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
-        mStatistics.startRequesting(PACKAGE1, PROVIDER2, INTERVAL1, true);
-        mStatistics.startRequesting(PACKAGE2, PROVIDER1, INTERVAL1, false);
+        mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
+        mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER2, INTERVAL1, true);
+        mStatistics.startRequesting(PACKAGE2, FEATURE_ID, PROVIDER1, INTERVAL1, false);
 
-        mStatistics.updateForeground(PACKAGE1, PROVIDER2, false);
-        mStatistics.updateForeground(PACKAGE2, PROVIDER1, true);
+        mStatistics.updateForeground(PACKAGE1, FEATURE_ID, PROVIDER2, false);
+        mStatistics.updateForeground(PACKAGE2, FEATURE_ID, PROVIDER1, true);
 
-        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+        mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
 
         for (PackageStatistics stats : mStatistics.statistics.values()) {
             verifyStatisticsTimes(stats);
diff --git a/services/tests/servicestests/src/com/android/server/location/gnss/GnssManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/location/gnss/GnssManagerServiceTest.java
index f16cf35..a99c982 100644
--- a/services/tests/servicestests/src/com/android/server/location/gnss/GnssManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/location/gnss/GnssManagerServiceTest.java
@@ -16,6 +16,8 @@
 
 package com.android.server.location.gnss;
 
+import static android.location.LocationManager.GPS_PROVIDER;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.any;
@@ -35,12 +37,16 @@
 import android.app.AppOpsManager;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.location.GnssAntennaInfo;
+import android.location.GnssAntennaInfo.SphericalCorrections;
 import android.location.GnssClock;
 import android.location.GnssMeasurementCorrections;
 import android.location.GnssMeasurementsEvent;
 import android.location.GnssNavigationMessage;
+import android.location.GnssRequest;
 import android.location.GnssSingleSatCorrection;
 import android.location.IBatchedLocationCallback;
+import android.location.IGnssAntennaInfoListener;
 import android.location.IGnssMeasurementsListener;
 import android.location.IGnssNavigationMessageListener;
 import android.location.IGnssStatusListener;
@@ -55,6 +61,8 @@
 
 import com.android.server.LocalServices;
 import com.android.server.location.AppForegroundHelper;
+import com.android.server.location.GnssAntennaInfoProvider;
+import com.android.server.location.GnssAntennaInfoProvider.GnssAntennaInfoProviderNative;
 import com.android.server.location.GnssBatchingProvider;
 import com.android.server.location.GnssCapabilitiesProvider;
 import com.android.server.location.GnssLocationProvider;
@@ -101,6 +109,7 @@
     private GnssMeasurementsProvider mTestGnssMeasurementsProvider;
     private GnssStatusListenerHelper mTestGnssStatusProvider;
     private GnssNavigationMessageProvider mTestGnssNavigationMessageProvider;
+    private GnssAntennaInfoProvider mTestGnssAntennaInfoProvider;
 
     // Managers and services
     @Mock
@@ -151,6 +160,8 @@
                 mMockContext, mMockHandler);
         mTestGnssNavigationMessageProvider = createGnssNavigationMessageProvider(
                 mMockContext, mMockHandler);
+        mTestGnssAntennaInfoProvider = createGnssAntennaInfoProvider(
+                mMockContext, mMockHandler);
 
         // Setup GnssLocationProvider to return providers
         when(mMockGnssLocationProvider.getGnssStatusProvider()).thenReturn(
@@ -169,6 +180,8 @@
                 mTestGnssNavigationMessageProvider);
         when(mMockGnssLocationProvider.getNetInitiatedListener()).thenReturn(
                 mNetInitiatedListener);
+        when(mMockGnssLocationProvider.getGnssAntennaInfoProvider()).thenReturn(
+                mTestGnssAntennaInfoProvider);
 
         // Setup GnssBatching provider
         when(mMockGnssBatchingProvider.start(anyLong(), anyBoolean())).thenReturn(true);
@@ -204,6 +217,12 @@
         return mockListener;
     }
 
+    private IGnssAntennaInfoListener createMockGnssAntennaInfoListener() {
+        IGnssAntennaInfoListener mockListener = mock(IGnssAntennaInfoListener.class);
+        overrideAsBinder(mockListener);
+        return mockListener;
+    }
+
     private IBatchedLocationCallback createMockBatchedLocationCallback() {
         IBatchedLocationCallback mockedCallback = mock(IBatchedLocationCallback.class);
         overrideAsBinder(mockedCallback);
@@ -224,6 +243,43 @@
                         Arrays.asList(gnssSingleSatCorrection)).build();
     }
 
+    private static List<GnssAntennaInfo> createDummyGnssAntennaInfos() {
+        double carrierFrequencyMHz = 13758.0;
+
+        GnssAntennaInfo.PhaseCenterOffset phaseCenterOffset = new
+                GnssAntennaInfo.PhaseCenterOffset(
+                4.3d,
+                1.4d,
+                2.10d,
+                2.1d,
+                3.12d,
+                0.5d);
+
+        double[][] phaseCenterVariationCorrectionsMillimeters = new double[10][10];
+        double[][] phaseCenterVariationCorrectionsUncertaintyMillimeters = new double[10][10];
+        SphericalCorrections
+                phaseCenterVariationCorrections =
+                new SphericalCorrections(
+                        phaseCenterVariationCorrectionsMillimeters,
+                        phaseCenterVariationCorrectionsUncertaintyMillimeters);
+
+        double[][] signalGainCorrectionsDbi = new double[10][10];
+        double[][] signalGainCorrectionsUncertaintyDbi = new double[10][10];
+        SphericalCorrections signalGainCorrections = new
+                SphericalCorrections(
+                signalGainCorrectionsDbi,
+                signalGainCorrectionsUncertaintyDbi);
+
+        List<GnssAntennaInfo> gnssAntennaInfos = new ArrayList();
+        gnssAntennaInfos.add(new GnssAntennaInfo.Builder()
+                .setCarrierFrequencyMHz(carrierFrequencyMHz)
+                .setPhaseCenterOffset(phaseCenterOffset)
+                .setPhaseCenterVariationCorrections(phaseCenterVariationCorrections)
+                .setSignalGainCorrections(signalGainCorrections)
+                .build());
+        return gnssAntennaInfos;
+    }
+
     private void enableLocationPermissions() {
         Mockito.doThrow(new SecurityException()).when(
                 mMockContext).enforceCallingPermission(
@@ -244,6 +300,9 @@
                     }
                     return AppOpsManager.MODE_ERRORED;
                 });
+
+        when(mLocationManagerInternal.isProviderEnabledForUser(eq(GPS_PROVIDER), anyInt()))
+                .thenReturn(true);
     }
 
     private void disableLocationPermissions() {
@@ -254,6 +313,9 @@
 
         when(mAppOpsManager.checkOp(anyInt(), anyInt(),
                 anyString())).thenReturn(AppOpsManager.MODE_ERRORED);
+
+        when(mLocationManagerInternal.isProviderEnabledForUser(eq(GPS_PROVIDER), anyInt()))
+                .thenReturn(false);
     }
 
     private GnssStatusListenerHelper createGnssStatusListenerHelper(Context context,
@@ -298,6 +360,18 @@
         };
     }
 
+    private GnssAntennaInfoProvider createGnssAntennaInfoProvider(Context context,
+            Handler handler) {
+        GnssAntennaInfoProviderNative mockGnssAntenaInfoProviderNative = mock(
+                GnssAntennaInfoProviderNative.class);
+        return new GnssAntennaInfoProvider(context, handler, mockGnssAntenaInfoProviderNative) {
+            @Override
+            protected boolean isGpsEnabled() {
+                return true;
+            }
+        };
+    }
+
     @Test
     public void getGnssYearOfHardwareTest() {
         final int gnssYearOfHardware = 2012;
@@ -319,14 +393,6 @@
     }
 
     @Test
-    public void getGnssCapabilitiesWithoutPermissionsTest() {
-        disableLocationPermissions();
-
-        assertThrows(SecurityException.class,
-                () -> mGnssManagerService.getGnssCapabilities("com.android.server"));
-    }
-
-    @Test
     public void getGnssCapabilitiesWithPermissionsTest() {
         final long mGnssCapabilities = 23132L;
         when(mMockGnssCapabilitiesProvider.getGnssCapabilities()).thenReturn(mGnssCapabilities);
@@ -466,6 +532,7 @@
         assertThrows(SecurityException.class,
                 () -> mGnssManagerService.removeGnssBatchingCallback());
 
+        enableLocationPermissions();
         mGnssManagerService.onReportLocation(mockLocationList);
 
         verify(mockBatchedLocationCallback, times(1)).onLocationBatch(mockLocationList);
@@ -563,7 +630,7 @@
 
         assertThrows(SecurityException.class,
                 () -> mGnssManagerService.addGnssMeasurementsListener(
-                        mockGnssMeasurementsListener,
+                        new GnssRequest.Builder().build(), mockGnssMeasurementsListener,
                         "com.android.server", "abcd123", "TestGnssMeasurementsListener"));
 
         mTestGnssMeasurementsProvider.onMeasurementsAvailable(gnssMeasurementsEvent);
@@ -580,8 +647,11 @@
 
         enableLocationPermissions();
 
-        assertThat(mGnssManagerService.addGnssMeasurementsListener(mockGnssMeasurementsListener,
-                "com.android.server", "abcd123", "TestGnssMeasurementsListener")).isEqualTo(true);
+        assertThat(mGnssManagerService.addGnssMeasurementsListener(
+                new GnssRequest.Builder().build(),
+                mockGnssMeasurementsListener,
+                "com.android.server", "abcd123",
+                "TestGnssMeasurementsListener")).isEqualTo(true);
 
         mTestGnssMeasurementsProvider.onMeasurementsAvailable(gnssMeasurementsEvent);
         verify(mockGnssMeasurementsListener, times(1)).onGnssMeasurementsReceived(
@@ -626,8 +696,10 @@
 
         enableLocationPermissions();
 
-        mGnssManagerService.addGnssMeasurementsListener(mockGnssMeasurementsListener,
-                "com.android.server", "abcd123", "TestGnssMeasurementsListener");
+        mGnssManagerService.addGnssMeasurementsListener(new GnssRequest.Builder().build(),
+                mockGnssMeasurementsListener,
+                "com.android.server", "abcd123",
+                "TestGnssMeasurementsListener");
 
         disableLocationPermissions();
 
@@ -648,8 +720,10 @@
 
         enableLocationPermissions();
 
-        mGnssManagerService.addGnssMeasurementsListener(mockGnssMeasurementsListener,
-                "com.android.server", "abcd123", "TestGnssMeasurementsListener");
+        mGnssManagerService.addGnssMeasurementsListener(new GnssRequest.Builder().build(),
+                mockGnssMeasurementsListener,
+                "com.android.server", "abcd123",
+                "TestGnssMeasurementsListener");
 
         disableLocationPermissions();
 
@@ -662,6 +736,82 @@
     }
 
     @Test
+    public void addGnssAntennaInfoListenerWithoutPermissionsTest() throws RemoteException {
+        IGnssAntennaInfoListener mockGnssAntennaInfoListener =
+                createMockGnssAntennaInfoListener();
+        List<GnssAntennaInfo> gnssAntennaInfos = createDummyGnssAntennaInfos();
+
+        disableLocationPermissions();
+
+        assertThrows(SecurityException.class,
+                () -> mGnssManagerService.addGnssAntennaInfoListener(
+                        mockGnssAntennaInfoListener,
+                        "com.android.server", "abcd123", "TestGnssAntennaInfoListener"));
+
+        mTestGnssAntennaInfoProvider.onGnssAntennaInfoAvailable(gnssAntennaInfos);
+        verify(mockGnssAntennaInfoListener, times(0))
+                .onGnssAntennaInfoReceived(gnssAntennaInfos);
+    }
+
+    @Test
+    public void addGnssAntennaInfoListenerWithPermissionsTest() throws RemoteException {
+        IGnssAntennaInfoListener mockGnssAntennaInfoListener =
+                createMockGnssAntennaInfoListener();
+        List<GnssAntennaInfo> gnssAntennaInfos = createDummyGnssAntennaInfos();
+
+        enableLocationPermissions();
+
+        assertThat(mGnssManagerService.addGnssAntennaInfoListener(mockGnssAntennaInfoListener,
+                "com.android.server", "abcd123", "TestGnssAntennaInfoListener")).isEqualTo(true);
+
+        mTestGnssAntennaInfoProvider.onGnssAntennaInfoAvailable(gnssAntennaInfos);
+        verify(mockGnssAntennaInfoListener, times(1))
+                .onGnssAntennaInfoReceived(gnssAntennaInfos);
+    }
+
+    @Test
+    public void removeGnssAntennaInfoListenerWithoutPermissionsTest() throws RemoteException {
+        IGnssAntennaInfoListener mockGnssAntennaInfoListener =
+                createMockGnssAntennaInfoListener();
+        List<GnssAntennaInfo> gnssAntennaInfos = createDummyGnssAntennaInfos();
+
+        enableLocationPermissions();
+
+        mGnssManagerService.addGnssAntennaInfoListener(
+                mockGnssAntennaInfoListener,
+                "com.android.server", "abcd123", "TestGnssAntennaInfoListener");
+
+        disableLocationPermissions();
+
+        mGnssManagerService.removeGnssAntennaInfoListener(
+                mockGnssAntennaInfoListener);
+
+        mTestGnssAntennaInfoProvider.onGnssAntennaInfoAvailable(gnssAntennaInfos);
+        verify(mockGnssAntennaInfoListener, times(0)).onGnssAntennaInfoReceived(
+                gnssAntennaInfos);
+    }
+
+    @Test
+    public void removeGnssAntennaInfoListenerWithPermissionsTest() throws RemoteException {
+        IGnssAntennaInfoListener mockGnssAntennaInfoListener =
+                createMockGnssAntennaInfoListener();
+        List<GnssAntennaInfo> gnssAntennaInfos = createDummyGnssAntennaInfos();
+
+        enableLocationPermissions();
+
+        mGnssManagerService.addGnssAntennaInfoListener(
+                mockGnssAntennaInfoListener,
+                "com.android.server", "abcd123", "TestGnssAntennaInfoListener");
+
+        mGnssManagerService.removeGnssAntennaInfoListener(
+                mockGnssAntennaInfoListener);
+
+        mTestGnssAntennaInfoProvider.onGnssAntennaInfoAvailable(gnssAntennaInfos);
+        verify(mockGnssAntennaInfoListener, times(0)).onGnssAntennaInfoReceived(
+                gnssAntennaInfos);
+    }
+
+    @Test
     public void addGnssNavigationMessageListenerWithoutPermissionsTest() throws RemoteException {
         IGnssNavigationMessageListener mockGnssNavigationMessageListener =
                 createMockGnssNavigationMessageListener();
diff --git a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java
index a1baf0e..7e3cfc8 100644
--- a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java
@@ -1779,7 +1779,7 @@
         // Get active mobile network in place
         expectMobileDefaults();
         mService.updateNetworks();
-        verify(mStatsService).setStatsProviderLimit(TEST_IFACE, Long.MAX_VALUE);
+        verify(mStatsService).setStatsProviderLimitAsync(TEST_IFACE, Long.MAX_VALUE);
 
         // Set limit to 10KB.
         setNetworkPolicies(new NetworkPolicy(
@@ -1788,7 +1788,7 @@
         postMsgAndWaitForCompletion();
 
         // Verifies that remaining quota is set to providers.
-        verify(mStatsService).setStatsProviderLimit(TEST_IFACE, 10000L - 4999L);
+        verify(mStatsService).setStatsProviderLimitAsync(TEST_IFACE, 10000L - 4999L);
 
         reset(mStatsService);
 
@@ -1810,7 +1810,7 @@
         postMsgAndWaitForCompletion();
         verify(mStatsService).forceUpdate();
         postMsgAndWaitForCompletion();
-        verify(mStatsService).setStatsProviderLimit(TEST_IFACE, 10000L - 4999L - 1999L);
+        verify(mStatsService).setStatsProviderLimitAsync(TEST_IFACE, 10000L - 4999L - 1999L);
     }
 
     /**
diff --git a/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplRebootTests.java b/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplRebootTests.java
new file mode 100644
index 0000000..c4fea77
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplRebootTests.java
@@ -0,0 +1,188 @@
+/*
+ * 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.om;
+
+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 android.content.om.OverlayInfo;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Arrays;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class OverlayManagerServiceImplRebootTests extends OverlayManagerServiceImplTestsBase {
+
+    private static final String OVERLAY = "com.dummy.overlay";
+    private static final String TARGET = "com.dummy.target";
+    private static final int USER = 0;
+
+    private static final String OVERLAY2 = OVERLAY + "2";
+
+    @Test
+    public void testUpdateOverlaysForUser() {
+        final OverlayManagerServiceImpl impl = getImpl();
+        installTargetPackage(TARGET, USER);
+        installTargetPackage("some.other.target", USER);
+        installOverlayPackage(OVERLAY, TARGET, USER);
+
+        // do nothing, expect no change
+        final List<String> a = impl.updateOverlaysForUser(USER);
+        assertEquals(1, a.size());
+        assertTrue(a.contains(TARGET));
+
+        // upgrade overlay, keep target
+        beginUpgradeOverlayPackage(OVERLAY, USER);
+        endUpgradeOverlayPackage(OVERLAY, TARGET, USER);
+
+        final List<String> b = impl.updateOverlaysForUser(USER);
+        assertEquals(1, b.size());
+        assertTrue(b.contains(TARGET));
+
+        // do nothing, expect no change
+        final List<String> c = impl.updateOverlaysForUser(USER);
+        assertEquals(1, c.size());
+        assertTrue(c.contains(TARGET));
+
+        // upgrade overlay, switch to new target
+        addOverlayPackage(OVERLAY, "some.other.target", USER, true, false, 0);
+        final List<String> d = impl.updateOverlaysForUser(USER);
+        assertEquals(2, d.size());
+        assertTrue(d.containsAll(Arrays.asList(TARGET, "some.other.target")));
+
+        // do nothing, expect no change
+        final List<String> f = impl.updateOverlaysForUser(USER);
+        assertEquals(1, f.size());
+        assertTrue(f.contains("some.other.target"));
+    }
+
+    @Test
+    public void testImmutableEnabledChange() {
+        final OverlayManagerServiceImpl impl = getImpl();
+        installTargetPackage(TARGET, USER);
+
+        addOverlayPackage(OVERLAY, TARGET, USER, false, false, 0);
+        impl.updateOverlaysForUser(USER);
+        final OverlayInfo o1 = impl.getOverlayInfo(OVERLAY, USER);
+        assertNotNull(o1);
+        assertFalse(o1.isEnabled());
+        assertFalse(o1.isMutable);
+
+        addOverlayPackage(OVERLAY, TARGET, USER, false, true, 0);
+        impl.updateOverlaysForUser(USER);
+        final OverlayInfo o2 = impl.getOverlayInfo(OVERLAY, USER);
+        assertNotNull(o2);
+        assertTrue(o2.isEnabled());
+        assertFalse(o2.isMutable);
+
+        addOverlayPackage(OVERLAY, TARGET, USER, false, false, 0);
+        impl.updateOverlaysForUser(USER);
+        final OverlayInfo o3 = impl.getOverlayInfo(OVERLAY, USER);
+        assertNotNull(o3);
+        assertFalse(o3.isEnabled());
+        assertFalse(o3.isMutable);
+    }
+
+    @Test
+    public void testMutableEnabledChangeHasNoEffect() {
+        final OverlayManagerServiceImpl impl = getImpl();
+        installTargetPackage(TARGET, USER);
+
+        addOverlayPackage(OVERLAY, TARGET, USER, true, false, 0);
+        impl.updateOverlaysForUser(USER);
+        final OverlayInfo o1 = impl.getOverlayInfo(OVERLAY, USER);
+        assertNotNull(o1);
+        assertFalse(o1.isEnabled());
+        assertTrue(o1.isMutable);
+
+        addOverlayPackage(OVERLAY, TARGET, USER, true, true, 0);
+        impl.updateOverlaysForUser(USER);
+        final OverlayInfo o2 = impl.getOverlayInfo(OVERLAY, USER);
+        assertNotNull(o2);
+        assertFalse(o2.isEnabled());
+        assertTrue(o2.isMutable);
+
+        addOverlayPackage(OVERLAY, TARGET, USER, true, false, 0);
+        impl.updateOverlaysForUser(USER);
+        final OverlayInfo o3 = impl.getOverlayInfo(OVERLAY, USER);
+        assertNotNull(o3);
+        assertFalse(o3.isEnabled());
+        assertTrue(o3.isMutable);
+    }
+
+    @Test
+    public void testMutabilityChange() {
+        final OverlayManagerServiceImpl impl = getImpl();
+        installTargetPackage(TARGET, USER);
+
+        addOverlayPackage(OVERLAY, TARGET, USER, false, true, 0);
+        impl.updateOverlaysForUser(USER);
+        final OverlayInfo o1 = impl.getOverlayInfo(OVERLAY, USER);
+        assertNotNull(o1);
+        assertTrue(o1.isEnabled());
+        assertFalse(o1.isMutable);
+
+        addOverlayPackage(OVERLAY, TARGET, USER, true, false, 0);
+        impl.updateOverlaysForUser(USER);
+        final OverlayInfo o2 = impl.getOverlayInfo(OVERLAY, USER);
+        assertNotNull(o2);
+        assertFalse(o2.isEnabled());
+        assertTrue(o2.isMutable);
+
+        addOverlayPackage(OVERLAY, TARGET, USER, false, false, 0);
+        impl.updateOverlaysForUser(USER);
+        final OverlayInfo o3 = impl.getOverlayInfo(OVERLAY, USER);
+        assertNotNull(o3);
+        assertFalse(o3.isEnabled());
+        assertFalse(o3.isMutable);
+    }
+
+    @Test
+    public void testPriorityChange() {
+        final OverlayManagerServiceImpl impl = getImpl();
+        installTargetPackage(TARGET, USER);
+
+        addOverlayPackage(OVERLAY, TARGET, USER, false, true, 0);
+        addOverlayPackage(OVERLAY2, TARGET, USER, false, true, 1);
+        impl.updateOverlaysForUser(USER);
+
+        final OverlayInfo o1 = impl.getOverlayInfo(OVERLAY, USER);
+        final OverlayInfo o2 = impl.getOverlayInfo(OVERLAY2, USER);
+        assertNotNull(o1);
+        assertNotNull(o2);
+        assertEquals(0, o1.priority);
+        assertEquals(1, o2.priority);
+
+        addOverlayPackage(OVERLAY, TARGET, USER, false, true, 1);
+        addOverlayPackage(OVERLAY2, TARGET, USER, false, true, 0);
+        impl.updateOverlaysForUser(USER);
+
+        final OverlayInfo o3 = impl.getOverlayInfo(OVERLAY, USER);
+        final OverlayInfo o4 = impl.getOverlayInfo(OVERLAY2, USER);
+        assertNotNull(o3);
+        assertNotNull(o4);
+        assertEquals(1, o3.priority);
+        assertEquals(0, o4.priority);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTests.java b/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTests.java
index c566dfc..a428a97 100644
--- a/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTests.java
+++ b/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTests.java
@@ -24,6 +24,9 @@
 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.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import android.annotation.NonNull;
 import android.content.om.OverlayInfo;
@@ -33,6 +36,8 @@
 
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.internal.content.om.OverlayConfig;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -45,10 +50,7 @@
 import java.util.Set;
 
 @RunWith(AndroidJUnit4.class)
-public class OverlayManagerServiceImplTests {
-    private OverlayManagerServiceImpl mImpl;
-    private DummyDeviceState mState;
-    private DummyListener mListener;
+public class OverlayManagerServiceImplTests extends OverlayManagerServiceImplTestsBase {
 
     private static final String OVERLAY = "com.dummy.overlay";
     private static final String TARGET = "com.dummy.target";
@@ -61,25 +63,14 @@
     private static final String OVERLAY3 = OVERLAY + "3";
     private static final int USER3 = USER2 + 1;
 
-
-    @Before
-    public void setUp() throws Exception {
-        mState = new DummyDeviceState();
-        mListener = new DummyListener();
-        DummyPackageManagerHelper pmh = new DummyPackageManagerHelper(mState);
-        mImpl = new OverlayManagerServiceImpl(pmh,
-                new DummyIdmapManager(mState, pmh),
-                new OverlayManagerSettings(),
-                new String[0],
-                mListener);
-    }
-
     // tests: basics
 
     @Test
     public void testGetOverlayInfo() throws Exception {
-        installOverlayPackage(OVERLAY, TARGET, USER, false);
-        final OverlayInfo oi = mImpl.getOverlayInfo(OVERLAY, USER);
+        installOverlayPackage(OVERLAY, TARGET, USER);
+
+        final OverlayManagerServiceImpl impl = getImpl();
+        final OverlayInfo oi = impl.getOverlayInfo(OVERLAY, USER);
         assertNotNull(oi);
         assertEquals(oi.packageName, OVERLAY);
         assertEquals(oi.targetPackageName, TARGET);
@@ -88,87 +79,91 @@
 
     @Test
     public void testGetOverlayInfosForTarget() throws Exception {
-        installOverlayPackage(OVERLAY, TARGET, USER, false);
-        installOverlayPackage(OVERLAY2, TARGET, USER, false);
+        installOverlayPackage(OVERLAY, TARGET, USER);
+        installOverlayPackage(OVERLAY2, TARGET, USER);
+        installOverlayPackage(OVERLAY3, TARGET, USER2);
 
-        installOverlayPackage(OVERLAY3, TARGET, USER2, false);
-
-        final List<OverlayInfo> ois = mImpl.getOverlayInfosForTarget(TARGET, USER);
+        final OverlayManagerServiceImpl impl = getImpl();
+        final List<OverlayInfo> ois = impl.getOverlayInfosForTarget(TARGET, USER);
         assertEquals(ois.size(), 2);
-        assertTrue(ois.contains(mImpl.getOverlayInfo(OVERLAY, USER)));
-        assertTrue(ois.contains(mImpl.getOverlayInfo(OVERLAY2, USER)));
+        assertTrue(ois.contains(impl.getOverlayInfo(OVERLAY, USER)));
+        assertTrue(ois.contains(impl.getOverlayInfo(OVERLAY2, USER)));
 
-        final List<OverlayInfo> ois2 = mImpl.getOverlayInfosForTarget(TARGET, USER2);
+        final List<OverlayInfo> ois2 = impl.getOverlayInfosForTarget(TARGET, USER2);
         assertEquals(ois2.size(), 1);
-        assertTrue(ois2.contains(mImpl.getOverlayInfo(OVERLAY3, USER2)));
+        assertTrue(ois2.contains(impl.getOverlayInfo(OVERLAY3, USER2)));
 
-        final List<OverlayInfo> ois3 = mImpl.getOverlayInfosForTarget(TARGET, USER3);
+        final List<OverlayInfo> ois3 = impl.getOverlayInfosForTarget(TARGET, USER3);
         assertNotNull(ois3);
         assertEquals(ois3.size(), 0);
 
-        final List<OverlayInfo> ois4 = mImpl.getOverlayInfosForTarget("no.such.overlay", USER);
+        final List<OverlayInfo> ois4 = impl.getOverlayInfosForTarget("no.such.overlay", USER);
         assertNotNull(ois4);
         assertEquals(ois4.size(), 0);
     }
 
     @Test
     public void testGetOverlayInfosForUser() throws Exception {
-        installOverlayPackage(OVERLAY, TARGET, USER, false);
-        installOverlayPackage(OVERLAY2, TARGET, USER, false);
-        installOverlayPackage(OVERLAY3, TARGET2, USER, false);
+        installTargetPackage(TARGET, USER);
+        installOverlayPackage(OVERLAY, TARGET, USER);
+        installOverlayPackage(OVERLAY2, TARGET, USER);
+        installOverlayPackage(OVERLAY3, TARGET2, USER);
 
-        final Map<String, List<OverlayInfo>> everything = mImpl.getOverlaysForUser(USER);
+        final OverlayManagerServiceImpl impl = getImpl();
+        final Map<String, List<OverlayInfo>> everything = impl.getOverlaysForUser(USER);
         assertEquals(everything.size(), 2);
 
         final List<OverlayInfo> ois = everything.get(TARGET);
         assertNotNull(ois);
         assertEquals(ois.size(), 2);
-        assertTrue(ois.contains(mImpl.getOverlayInfo(OVERLAY, USER)));
-        assertTrue(ois.contains(mImpl.getOverlayInfo(OVERLAY2, USER)));
+        assertTrue(ois.contains(impl.getOverlayInfo(OVERLAY, USER)));
+        assertTrue(ois.contains(impl.getOverlayInfo(OVERLAY2, USER)));
 
         final List<OverlayInfo> ois2 = everything.get(TARGET2);
         assertNotNull(ois2);
         assertEquals(ois2.size(), 1);
-        assertTrue(ois2.contains(mImpl.getOverlayInfo(OVERLAY3, USER)));
+        assertTrue(ois2.contains(impl.getOverlayInfo(OVERLAY3, USER)));
 
-        final Map<String, List<OverlayInfo>> everything2 = mImpl.getOverlaysForUser(USER2);
+        final Map<String, List<OverlayInfo>> everything2 = impl.getOverlaysForUser(USER2);
         assertNotNull(everything2);
         assertEquals(everything2.size(), 0);
     }
 
     @Test
     public void testPriority() throws Exception {
-        installOverlayPackage(OVERLAY, TARGET, USER, false);
-        installOverlayPackage(OVERLAY2, TARGET, USER, false);
-        installOverlayPackage(OVERLAY3, TARGET, USER, false);
+        installOverlayPackage(OVERLAY, TARGET, USER);
+        installOverlayPackage(OVERLAY2, TARGET, USER);
+        installOverlayPackage(OVERLAY3, TARGET, USER);
 
-        final OverlayInfo o1 = mImpl.getOverlayInfo(OVERLAY, USER);
-        final OverlayInfo o2 = mImpl.getOverlayInfo(OVERLAY2, USER);
-        final OverlayInfo o3 = mImpl.getOverlayInfo(OVERLAY3, USER);
+        final OverlayManagerServiceImpl impl = getImpl();
+        final OverlayInfo o1 = impl.getOverlayInfo(OVERLAY, USER);
+        final OverlayInfo o2 = impl.getOverlayInfo(OVERLAY2, USER);
+        final OverlayInfo o3 = impl.getOverlayInfo(OVERLAY3, USER);
 
         assertOverlayInfoList(TARGET, USER, o1, o2, o3);
 
-        assertTrue(mImpl.setLowestPriority(OVERLAY3, USER));
+        assertTrue(impl.setLowestPriority(OVERLAY3, USER));
         assertOverlayInfoList(TARGET, USER, o3, o1, o2);
 
-        assertTrue(mImpl.setHighestPriority(OVERLAY3, USER));
+        assertTrue(impl.setHighestPriority(OVERLAY3, USER));
         assertOverlayInfoList(TARGET, USER, o1, o2, o3);
 
-        assertTrue(mImpl.setPriority(OVERLAY, OVERLAY2, USER));
+        assertTrue(impl.setPriority(OVERLAY, OVERLAY2, USER));
         assertOverlayInfoList(TARGET, USER, o2, o1, o3);
     }
 
     @Test
     public void testOverlayInfoStateTransitions() throws Exception {
-        assertNull(mImpl.getOverlayInfo(OVERLAY, USER));
+        final OverlayManagerServiceImpl impl = getImpl();
+        assertNull(impl.getOverlayInfo(OVERLAY, USER));
 
-        installOverlayPackage(OVERLAY, TARGET, USER, true);
+        installOverlayPackage(OVERLAY, TARGET, USER);
         assertState(STATE_MISSING_TARGET, OVERLAY, USER);
 
         installTargetPackage(TARGET, USER);
         assertState(STATE_DISABLED, OVERLAY, USER);
 
-        mImpl.setEnabled(OVERLAY, true, USER);
+        impl.setEnabled(OVERLAY, true, USER);
         assertState(STATE_ENABLED, OVERLAY, USER);
 
         // target upgrades do not change the state of the overlay
@@ -186,319 +181,48 @@
     }
 
     @Test
-    public void testUpdateOverlaysForUser() throws Exception {
-        installTargetPackage(TARGET, USER);
-        installTargetPackage("some.other.target", USER);
-        installOverlayPackage(OVERLAY, TARGET, USER, true);
-
-        // do nothing, expect no change
-        List<String> a = mImpl.updateOverlaysForUser(USER);
-        assertEquals(1, a.size());
-        assertTrue(a.contains(TARGET));
-
-        // upgrade overlay, keep target
-        upgradeOverlayPackage(OVERLAY, TARGET, USER, true);
-        List<String> b = mImpl.updateOverlaysForUser(USER);
-        assertEquals(1, b.size());
-        assertTrue(b.contains(TARGET));
-
-        // do nothing, expect no change
-        List<String> c = mImpl.updateOverlaysForUser(USER);
-        assertEquals(1, c.size());
-        assertTrue(c.contains(TARGET));
-
-        // upgrade overlay, switch to new target
-        upgradeOverlayPackage(OVERLAY, "some.other.target", USER, true);
-        List<String> d = mImpl.updateOverlaysForUser(USER);
-        assertEquals(2, d.size());
-        assertTrue(d.containsAll(Arrays.asList(TARGET, "some.other.target")));
-
-        // do nothing, expect no change
-        List<String> e = mImpl.updateOverlaysForUser(USER);
-        assertEquals(1, e.size());
-        assertTrue(e.contains("some.other.target"));
-    }
-
-    @Test
     public void testOnOverlayPackageUpgraded() throws Exception {
+        final OverlayManagerServiceImpl impl = getImpl();
+        final DummyListener listener = getListener();
         installTargetPackage(TARGET, USER);
-        installOverlayPackage(OVERLAY, TARGET, USER, true);
-        mImpl.onOverlayPackageReplacing(OVERLAY, USER);
-        mListener.count = 0;
-        mImpl.onOverlayPackageReplaced(OVERLAY, USER);
-        assertEquals(1, mListener.count);
+        installOverlayPackage(OVERLAY, TARGET, USER);
+        impl.onOverlayPackageReplacing(OVERLAY, USER);
+        listener.count = 0;
+        impl.onOverlayPackageReplaced(OVERLAY, USER);
+        assertEquals(1, listener.count);
 
         // upgrade to a version where the overlay has changed its target
-        upgradeOverlayPackage(OVERLAY, "some.other.target", USER, true);
-        mImpl.onOverlayPackageReplacing(OVERLAY, USER);
-        mListener.count = 0;
-        mImpl.onOverlayPackageReplaced(OVERLAY, USER);
+        beginUpgradeOverlayPackage(OVERLAY, USER);
+        listener.count = 0;
+        endUpgradeOverlayPackage(OVERLAY, "some.other.target", USER);
         // expect once for the old target package, once for the new target package
-        assertEquals(2, mListener.count);
+        assertEquals(2, listener.count);
 
-        upgradeOverlayPackage(OVERLAY, "some.other.target", USER, true);
-        mImpl.onOverlayPackageReplacing(OVERLAY, USER);
-        mListener.count = 0;
-        mImpl.onOverlayPackageReplaced(OVERLAY, USER);
-        assertEquals(1, mListener.count);
+        beginUpgradeOverlayPackage(OVERLAY, USER);
+        listener.count = 0;
+        endUpgradeOverlayPackage(OVERLAY, "some.other.target", USER);
+        assertEquals(1, listener.count);
     }
 
     // tests: listener interface
 
     @Test
     public void testListener() throws Exception {
-        installOverlayPackage(OVERLAY, TARGET, USER, true);
-        assertEquals(1, mListener.count);
-        mListener.count = 0;
+        final OverlayManagerServiceImpl impl = getImpl();
+        final DummyListener listener = getListener();
+        installOverlayPackage(OVERLAY, TARGET, USER);
+        assertEquals(1, listener.count);
+        listener.count = 0;
 
         installTargetPackage(TARGET, USER);
-        assertEquals(1, mListener.count);
-        mListener.count = 0;
+        assertEquals(1, listener.count);
+        listener.count = 0;
 
-        mImpl.setEnabled(OVERLAY, true, USER);
-        assertEquals(1, mListener.count);
-        mListener.count = 0;
+        impl.setEnabled(OVERLAY, true, USER);
+        assertEquals(1, listener.count);
+        listener.count = 0;
 
-        mImpl.setEnabled(OVERLAY, true, USER);
-        assertEquals(0, mListener.count);
-    }
-
-    // helper methods
-
-    private void assertState(int expected, final String overlayPackageName, int userId) {
-        int actual = mImpl.getOverlayInfo(OVERLAY, USER).state;
-        String msg = String.format("expected %s but was %s:",
-                OverlayInfo.stateToString(expected), OverlayInfo.stateToString(actual));
-        assertEquals(msg, expected, actual);
-    }
-
-    private void assertOverlayInfoList(final String targetPackageName, int userId,
-            OverlayInfo... overlayInfos) {
-        final List<OverlayInfo> expected =
-                mImpl.getOverlayInfosForTarget(targetPackageName, userId);
-        final List<OverlayInfo> actual = Arrays.asList(overlayInfos);
-        assertEquals(expected, actual);
-    }
-
-    private void installTargetPackage(String packageName, int userId) {
-        if (mState.select(packageName, userId) != null) {
-            throw new IllegalStateException("package already installed");
-        }
-        mState.add(packageName, null, userId, false);
-        mImpl.onTargetPackageAdded(packageName, userId);
-    }
-
-    private void beginUpgradeTargetPackage(String packageName, int userId) {
-        if (mState.select(packageName, userId) == null) {
-            throw new IllegalStateException("package not installed");
-        }
-        mState.add(packageName, null, userId, false);
-        mImpl.onTargetPackageReplacing(packageName, userId);
-    }
-
-    private void endUpgradeTargetPackage(String packageName, int userId) {
-        if (mState.select(packageName, userId) == null) {
-            throw new IllegalStateException("package not installed");
-        }
-        mState.add(packageName, null, userId, false);
-        mImpl.onTargetPackageReplaced(packageName, userId);
-    }
-
-    private void uninstallTargetPackage(String packageName, int userId) {
-        if (mState.select(packageName, userId) == null) {
-            throw new IllegalStateException("package not installed");
-        }
-        mState.remove(packageName, userId);
-        mImpl.onTargetPackageRemoved(packageName, userId);
-    }
-
-    private void installOverlayPackage(String packageName, String targetPackageName, int userId,
-            boolean canCreateIdmap) {
-        if (mState.select(packageName, userId) != null) {
-            throw new IllegalStateException("package already installed");
-        }
-        mState.add(packageName, targetPackageName, userId, canCreateIdmap);
-        mImpl.onOverlayPackageAdded(packageName, userId);
-    }
-
-    private void upgradeOverlayPackage(String packageName, String targetPackageName, int userId,
-            boolean canCreateIdmap) {
-        DummyDeviceState.Package pkg = mState.select(packageName, userId);
-        if (pkg == null) {
-            throw new IllegalStateException("package not installed, cannot upgrade");
-        }
-        pkg.targetPackageName = targetPackageName;
-        pkg.canCreateIdmap = canCreateIdmap;
-    }
-
-    private void uninstallOverlayPackage(String packageName, int userId) {
-        // implement this when adding support for downloadable overlays
-        throw new IllegalArgumentException("not implemented");
-    }
-
-    private static final class DummyDeviceState {
-        private List<Package> mPackages = new ArrayList<>();
-
-        public void add(String packageName, String targetPackageName, int userId,
-                boolean canCreateIdmap) {
-            remove(packageName, userId);
-            Package pkg = new Package();
-            pkg.packageName = packageName;
-            pkg.targetPackageName = targetPackageName;
-            pkg.userId = userId;
-            pkg.canCreateIdmap = canCreateIdmap;
-            mPackages.add(pkg);
-        }
-
-        public void remove(String packageName, int userId) {
-            final Iterator<Package> iter = mPackages.iterator();
-            while (iter.hasNext()) {
-                final Package pkg = iter.next();
-                if (pkg.packageName.equals(packageName) && pkg.userId == userId) {
-                    iter.remove();
-                    return;
-                }
-            }
-        }
-
-        public List<Package> select(int userId) {
-            List<Package> out = new ArrayList<>();
-            final int packageCount = mPackages.size();
-            for (int i = 0; i < packageCount; i++) {
-                final Package pkg = mPackages.get(i);
-                if (pkg.userId == userId) {
-                    out.add(pkg);
-                }
-            }
-            return out;
-        }
-
-        public Package select(String packageName, int userId) {
-            final int packageCount = mPackages.size();
-            for (int i = 0; i < packageCount; i++) {
-                final Package pkg = mPackages.get(i);
-                if (pkg.packageName.equals(packageName) && pkg.userId == userId) {
-                    return pkg;
-                }
-            }
-            return null;
-        }
-
-        private static final class Package {
-            public String packageName;
-            public int userId;
-            public String targetPackageName;
-            public boolean canCreateIdmap;
-        }
-    }
-
-    private static final class DummyPackageManagerHelper implements
-            OverlayManagerServiceImpl.PackageManagerHelper {
-        private final DummyDeviceState mState;
-
-        DummyPackageManagerHelper(DummyDeviceState state) {
-            mState = state;
-        }
-
-        @Override
-        public PackageInfo getPackageInfo(@NonNull String packageName, int userId) {
-            final DummyDeviceState.Package pkg = mState.select(packageName, userId);
-            if (pkg == null) {
-                return null;
-            }
-            ApplicationInfo ai = new ApplicationInfo();
-            ai.sourceDir = String.format("%s/%s/base.apk",
-                    pkg.targetPackageName == null ? "/system/app/" : "/vendor/overlay/",
-                    pkg.packageName);
-            PackageInfo pi = new PackageInfo();
-            pi.applicationInfo = ai;
-            pi.packageName = pkg.packageName;
-            pi.overlayTarget = pkg.targetPackageName;
-            pi.overlayCategory = "dummy-category-" + pkg.targetPackageName;
-            return pi;
-        }
-
-        @Override
-        public boolean signaturesMatching(@NonNull String packageName1,
-                @NonNull String packageName2, int userId) {
-            return false;
-        }
-
-        @Override
-        public List<PackageInfo> getOverlayPackages(int userId) {
-            List<PackageInfo> out = new ArrayList<>();
-            final List<DummyDeviceState.Package> packages = mState.select(userId);
-            final int packageCount = packages.size();
-            for (int i = 0; i < packageCount; i++) {
-                final DummyDeviceState.Package pkg = packages.get(i);
-                if (pkg.targetPackageName != null) {
-                    out.add(getPackageInfo(pkg.packageName, pkg.userId));
-                }
-            }
-            return out;
-        }
-    }
-
-    private static class DummyIdmapManager extends IdmapManager {
-        private final DummyDeviceState mState;
-        private Set<String> mIdmapFiles = new ArraySet<>();
-
-        DummyIdmapManager(DummyDeviceState state, DummyPackageManagerHelper packageManagerHelper) {
-            super(packageManagerHelper);
-            mState = state;
-        }
-
-        @Override
-        boolean createIdmap(@NonNull final PackageInfo targetPackage,
-                @NonNull final PackageInfo overlayPackage, int userId) {
-            final DummyDeviceState.Package t = mState.select(targetPackage.packageName, userId);
-            if (t == null) {
-                return false;
-            }
-            final DummyDeviceState.Package o = mState.select(overlayPackage.packageName, userId);
-            if (o == null) {
-                return false;
-            }
-            if (!o.canCreateIdmap) {
-                return false;
-            }
-            final String key = createKey(overlayPackage.packageName, userId);
-            mIdmapFiles.add(key);
-            return true;
-        }
-
-        @Override
-        boolean removeIdmap(@NonNull final OverlayInfo oi, final int userId) {
-            final String key = createKey(oi.packageName, oi.userId);
-            if (!mIdmapFiles.contains(key)) {
-                return false;
-            }
-            mIdmapFiles.remove(key);
-            return true;
-        }
-
-        @Override
-        boolean idmapExists(@NonNull final OverlayInfo oi) {
-            final String key = createKey(oi.packageName, oi.userId);
-            return mIdmapFiles.contains(key);
-        }
-
-        @Override
-        boolean idmapExists(@NonNull final PackageInfo overlayPackage, final int userId) {
-            final String key = createKey(overlayPackage.packageName, userId);
-            return mIdmapFiles.contains(key);
-        }
-
-        private String createKey(@NonNull final String packageName, final int userId) {
-            return String.format("%s:%d", packageName, userId);
-        }
-    }
-
-    private static class DummyListener implements OverlayManagerServiceImpl.OverlayChangeListener {
-        public int count;
-
-        public void onOverlaysChanged(@NonNull String targetPackage, int userId) {
-            count++;
-        }
+        impl.setEnabled(OVERLAY, true, USER);
+        assertEquals(0, listener.count);
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTestsBase.java b/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTestsBase.java
new file mode 100644
index 0000000..a753aac
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTestsBase.java
@@ -0,0 +1,385 @@
+/*
+ * 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.om;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.annotation.NonNull;
+import android.content.om.OverlayInfo;
+import android.content.om.OverlayInfo.State;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.util.ArraySet;
+
+import com.android.internal.content.om.OverlayConfig;
+
+import org.junit.Before;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/** Base class for creating {@link OverlayManagerServiceImplTests} tests. */
+class OverlayManagerServiceImplTestsBase {
+    private OverlayManagerServiceImpl mImpl;
+    private DummyDeviceState mState;
+    private DummyListener mListener;
+
+    @Before
+    public void setUp() {
+        mState = new DummyDeviceState();
+        mListener = new DummyListener();
+        final DummyPackageManagerHelper pmh = new DummyPackageManagerHelper(mState);
+
+        mImpl = new OverlayManagerServiceImpl(pmh,
+                new DummyIdmapManager(mState, pmh),
+                new OverlayManagerSettings(),
+                mState.mOverlayConfig,
+                new String[0],
+                mListener);
+    }
+
+    public OverlayManagerServiceImpl getImpl() {
+        return mImpl;
+    }
+
+    public DummyListener getListener() {
+        return mListener;
+    }
+
+    void assertState(@State int expected, final String overlayPackageName, int userId) {
+        final OverlayInfo info = mImpl.getOverlayInfo(overlayPackageName, userId);
+        if (info == null) {
+            throw new IllegalStateException("package not installed");
+        }
+
+        final String msg = String.format("expected %s but was %s:",
+                OverlayInfo.stateToString(expected), OverlayInfo.stateToString(info.state));
+        assertEquals(msg, expected, info.state);
+    }
+
+    void assertOverlayInfoList(final String targetPackageName, int userId,
+            OverlayInfo... overlayInfos) {
+        final List<OverlayInfo> expected =
+                mImpl.getOverlayInfosForTarget(targetPackageName, userId);
+        final List<OverlayInfo> actual = Arrays.asList(overlayInfos);
+        assertEquals(expected, actual);
+    }
+
+    /**
+     * Creates an overlay configured through {@link OverlayConfig}.
+     *
+     * @throws IllegalStateException if the package is already installed
+     */
+    void addOverlayPackage(String packageName, String targetPackageName, int userId,
+            boolean mutable, boolean enabled, int priority) {
+        mState.addOverlay(packageName, targetPackageName, userId, mutable, enabled, priority);
+    }
+
+    /**
+     * Adds the target package to the device.
+     *
+     * This corresponds to when the OMS receives the
+     * {@link android.content.Intent#ACTION_PACKAGE_ADDED} broadcast.
+     *
+     * @throws IllegalStateException if the package is not currently installed
+     */
+    void installTargetPackage(String packageName, int userId) {
+        if (mState.select(packageName, userId) != null) {
+            throw new IllegalStateException("package already installed");
+        }
+        mState.addTarget(packageName, userId);
+        mImpl.onTargetPackageAdded(packageName, userId);
+    }
+
+    /**
+     * Begins upgrading the target package.
+     *
+     * This corresponds to when the OMS receives the
+     * {@link android.content.Intent#ACTION_PACKAGE_REMOVED} broadcast with the
+     * {@link android.content.Intent#EXTRA_REPLACING} extra.
+     *
+     * @throws IllegalStateException if the package is not currently installed
+     */
+    void beginUpgradeTargetPackage(String packageName, int userId) {
+        if (mState.select(packageName, userId) == null) {
+            throw new IllegalStateException("package not installed");
+        }
+        mImpl.onTargetPackageReplacing(packageName, userId);
+    }
+
+    /**
+     * Ends upgrading the target package.
+     *
+     * This corresponds to when the OMS receives the
+     * {@link android.content.Intent#ACTION_PACKAGE_ADDED} broadcast with the
+     * {@link android.content.Intent#EXTRA_REPLACING} extra.
+     *
+     * @throws IllegalStateException if the package is not currently installed
+     */
+    void endUpgradeTargetPackage(String packageName, int userId) {
+        if (mState.select(packageName, userId) == null) {
+            throw new IllegalStateException("package not installed");
+        }
+        mState.addTarget(packageName, userId);
+        mImpl.onTargetPackageReplaced(packageName, userId);
+    }
+
+    /**
+     * Removes the target package from the device.
+     *
+     * This corresponds to when the OMS receives the
+     * {@link android.content.Intent#ACTION_PACKAGE_REMOVED} broadcast.
+     *
+     * @throws IllegalStateException if the package is not currently installed
+     */
+    void uninstallTargetPackage(String packageName, int userId) {
+        if (mState.select(packageName, userId) == null) {
+            throw new IllegalStateException("package not installed");
+        }
+        mState.remove(packageName, userId);
+        mImpl.onTargetPackageRemoved(packageName, userId);
+    }
+
+    /**
+     * Adds the overlay package to the device.
+     *
+     * This corresponds to when the OMS receives the
+     * {@link android.content.Intent#ACTION_PACKAGE_ADDED} broadcast.
+     *
+     * @throws IllegalStateException if the package is already installed
+     */
+    void installOverlayPackage(String packageName, String targetPackageName, int userId) {
+        if (mState.select(packageName, userId) != null) {
+            throw new IllegalStateException("package already installed");
+        }
+        mState.addOverlay(packageName, targetPackageName, userId);
+        mImpl.onOverlayPackageAdded(packageName, userId);
+    }
+
+    /**
+     * Begins upgrading the overlay package.
+     *
+     * This corresponds to when the OMS receives the
+     * {@link android.content.Intent#ACTION_PACKAGE_REMOVED} broadcast with the
+     * {@link android.content.Intent#EXTRA_REPLACING} extra.
+     *
+     * @throws IllegalStateException if the package is not currently installed
+     */
+    void beginUpgradeOverlayPackage(String packageName, int userId) {
+        if (mState.select(packageName, userId) == null) {
+            throw new IllegalStateException("package not installed, cannot upgrade");
+        }
+
+        mImpl.onOverlayPackageReplacing(packageName, userId);
+    }
+
+    /**
+     * Ends upgrading the overlay package, potentially changing its target package.
+     *
+     * This corresponds to when the OMS receives the
+     * {@link android.content.Intent#ACTION_PACKAGE_ADDED} broadcast with the
+     * {@link android.content.Intent#EXTRA_REPLACING} extra.
+     *
+     * @throws IllegalStateException if the package is not currently installed
+     */
+    void endUpgradeOverlayPackage(String packageName, String targetPackageName, int userId) {
+        if (mState.select(packageName, userId) == null) {
+            throw new IllegalStateException("package not installed, cannot upgrade");
+        }
+
+        mState.addOverlay(packageName, targetPackageName, userId);
+        mImpl.onOverlayPackageReplaced(packageName, userId);
+    }
+
+    private static final class DummyDeviceState {
+        private List<Package> mPackages = new ArrayList<>();
+        private OverlayConfig mOverlayConfig = mock(OverlayConfig.class);
+
+        /** Adds a non-overlay to the device. */
+        public void addTarget(String packageName, int userId) {
+            remove(packageName, userId);
+            mPackages.add(new Package(packageName, userId, null, false, false, 0));
+        }
+
+        /** Adds an overlay to the device. */
+        public void addOverlay(String packageName, String targetPackageName, int userId) {
+            addOverlay(packageName, targetPackageName, userId, true, false, OverlayConfig.DEFAULT_PRIORITY);
+        }
+
+        /** Adds a configured overlay to the device. */
+        public void addOverlay(String packageName, String targetPackageName, int userId,
+                boolean mutable, boolean enabled, int priority) {
+            remove(packageName, userId);
+            mPackages.add(new Package(packageName, userId, targetPackageName, mutable, enabled,
+                    priority));
+            when(mOverlayConfig.getPriority(packageName)).thenReturn(priority);
+            when(mOverlayConfig.isEnabled(packageName)).thenReturn(enabled);
+            when(mOverlayConfig.isMutable(packageName)).thenReturn(mutable);
+        }
+
+        /** Remove a package from the device. */
+        public void remove(String packageName, int userId) {
+            final Iterator<Package> iter = mPackages.iterator();
+            while (iter.hasNext()) {
+                final Package pkg = iter.next();
+                if (pkg.packageName.equals(packageName) && pkg.userId == userId) {
+                    iter.remove();
+                    return;
+                }
+            }
+        }
+
+        /** Retrieves all packages on device for a particular user. */
+        public List<Package> select(int userId) {
+            return mPackages.stream().filter(p -> p.userId == userId).collect(Collectors.toList());
+        }
+
+        /** Retrieves the package with the specified package name for a particular user. */
+        public Package select(String packageName, int userId) {
+            return mPackages.stream().filter(
+                    p -> p.packageName.equals(packageName) && p.userId == userId)
+                    .findFirst().orElse(null);
+        }
+
+        private static final class Package {
+            public final String packageName;
+            public final int userId;
+            public final String targetPackageName;
+            public final boolean mutable;
+            public final boolean enabled;
+            public final int priority;
+
+            private Package(String packageName, int userId, String targetPackageName,
+                    boolean mutable, boolean enabled, int priority) {
+                this.packageName = packageName;
+                this.userId = userId;
+                this.targetPackageName = targetPackageName;
+                this.mutable = mutable;
+                this.enabled = enabled;
+                this.priority = priority;
+            }
+        }
+    }
+
+    static final class DummyPackageManagerHelper implements
+            OverlayManagerServiceImpl.PackageManagerHelper {
+        private final DummyDeviceState mState;
+
+        private DummyPackageManagerHelper(DummyDeviceState state) {
+            mState = state;
+        }
+
+        @Override
+        public PackageInfo getPackageInfo(@NonNull String packageName, int userId) {
+            final DummyDeviceState.Package pkg = mState.select(packageName, userId);
+            if (pkg == null) {
+                return null;
+            }
+            final ApplicationInfo ai = new ApplicationInfo();
+            ai.sourceDir = String.format("%s/%s/base.apk",
+                    pkg.targetPackageName == null ? "/system/app/" : "/vendor/overlay/",
+                    pkg.packageName);
+            PackageInfo pi = new PackageInfo();
+            pi.applicationInfo = ai;
+            pi.packageName = pkg.packageName;
+            pi.overlayTarget = pkg.targetPackageName;
+            pi.overlayCategory = "dummy-category-" + pkg.targetPackageName;
+            return pi;
+        }
+
+        @Override
+        public boolean signaturesMatching(@NonNull String packageName1,
+                @NonNull String packageName2, int userId) {
+            return false;
+        }
+
+        @Override
+        public List<PackageInfo> getOverlayPackages(int userId) {
+            return mState.select(userId).stream()
+                    .filter(p -> p.targetPackageName != null)
+                    .map(p -> getPackageInfo(p.packageName, p.userId))
+                    .collect(Collectors.toList());
+        }
+    }
+
+    static class DummyIdmapManager extends IdmapManager {
+        private final DummyDeviceState mState;
+        private Set<String> mIdmapFiles = new ArraySet<>();
+
+        private DummyIdmapManager(DummyDeviceState state,
+                DummyPackageManagerHelper packageManagerHelper) {
+            super(packageManagerHelper);
+            mState = state;
+        }
+
+        @Override
+        boolean createIdmap(@NonNull final PackageInfo targetPackage,
+                @NonNull final PackageInfo overlayPackage, int userId) {
+            final DummyDeviceState.Package t = mState.select(targetPackage.packageName, userId);
+            if (t == null) {
+                return false;
+            }
+            final DummyDeviceState.Package o = mState.select(overlayPackage.packageName, userId);
+            if (o == null) {
+                return false;
+            }
+            final String key = createKey(overlayPackage.packageName, userId);
+            mIdmapFiles.add(key);
+            return true;
+        }
+
+        @Override
+        boolean removeIdmap(@NonNull final OverlayInfo oi, final int userId) {
+            final String key = createKey(oi.packageName, oi.userId);
+            if (!mIdmapFiles.contains(key)) {
+                return false;
+            }
+            mIdmapFiles.remove(key);
+            return true;
+        }
+
+        @Override
+        boolean idmapExists(@NonNull final OverlayInfo oi) {
+            final String key = createKey(oi.packageName, oi.userId);
+            return mIdmapFiles.contains(key);
+        }
+
+        @Override
+        boolean idmapExists(@NonNull final PackageInfo overlayPackage, final int userId) {
+            final String key = createKey(overlayPackage.packageName, userId);
+            return mIdmapFiles.contains(key);
+        }
+
+        private String createKey(@NonNull final String packageName, final int userId) {
+            return String.format("%s:%d", packageName, userId);
+        }
+    }
+
+    static class DummyListener implements OverlayManagerServiceImpl.OverlayChangeListener {
+        public int count;
+
+        public void onOverlaysChanged(@NonNull String targetPackage, int userId) {
+            count++;
+        }
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/om/OverlayManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/om/OverlayManagerSettingsTests.java
index 8ff8b6e..146f60a 100644
--- a/services/tests/servicestests/src/com/android/server/om/OverlayManagerSettingsTests.java
+++ b/services/tests/servicestests/src/com/android/server/om/OverlayManagerSettingsTests.java
@@ -58,7 +58,7 @@
             STATE_DISABLED,
             0,
             0,
-            false);
+            true);
 
     private static final OverlayInfo OVERLAY_B0 = new OverlayInfo(
             "com.dummy.overlay_b",
@@ -69,7 +69,7 @@
             STATE_DISABLED,
             0,
             0,
-            false);
+            true);
 
     private static final OverlayInfo OVERLAY_C0 = new OverlayInfo(
             "com.dummy.overlay_c",
@@ -80,7 +80,7 @@
             STATE_DISABLED,
             0,
             0,
-            false);
+            true);
 
     private static final OverlayInfo OVERLAY_A1 = new OverlayInfo(
             "com.dummy.overlay_a",
@@ -91,7 +91,7 @@
             STATE_DISABLED,
             1,
             0,
-            false);
+            true);
 
     private static final OverlayInfo OVERLAY_B1 = new OverlayInfo(
             "com.dummy.overlay_b",
@@ -102,7 +102,7 @@
             STATE_DISABLED,
             1,
             0,
-            false);
+            true);
 
     @Before
     public void setUp() throws Exception {
@@ -238,7 +238,7 @@
                 STATE_DISABLED,
                 0,
                 0,
-                false);
+                true);
         insert(otherTarget);
         changed = mSettings.setPriority(OVERLAY_A0.packageName, otherTarget.packageName,
                 OVERLAY_A0.userId);
@@ -435,7 +435,7 @@
 
     private void insert(OverlayInfo oi) throws Exception {
         mSettings.init(oi.packageName, oi.userId, oi.targetPackageName, null, oi.baseCodePath,
-                false, 0, oi.category);
+                true, false,0, oi.category);
         mSettings.setState(oi.packageName, oi.userId, oi.state);
         mSettings.setEnabled(oi.packageName, oi.userId, false);
     }
diff --git a/services/tests/servicestests/src/com/android/server/om/OverlayReferenceMapperTests.kt b/services/tests/servicestests/src/com/android/server/om/OverlayReferenceMapperTests.kt
index ef12948..063cd5da 100644
--- a/services/tests/servicestests/src/com/android/server/om/OverlayReferenceMapperTests.kt
+++ b/services/tests/servicestests/src/com/android/server/om/OverlayReferenceMapperTests.kt
@@ -16,8 +16,8 @@
 
 package com.android.server.om
 
-import android.content.pm.parsing.AndroidPackage
 import android.net.Uri
+import com.android.server.pm.parsing.pkg.AndroidPackage
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Test
@@ -196,11 +196,13 @@
         whenever(packageName) { "$TARGET_PACKAGE_NAME$increment" }
         whenever(overlayables) { mapOf("overlayableName$increment" to ACTOR_NAME) }
         whenever(toString()) { "Package{$packageName}" }
+        whenever(isOverlay) { false }
     }
 
     private fun mockOverlay(increment: Int = 0) = mockThrowOnUnmocked<AndroidPackage> {
         whenever(packageName) { "$OVERLAY_PACKAGE_NAME$increment" }
         whenever(overlayables) { emptyMap<String, String>() }
         whenever(toString()) { "Package{$packageName}" }
+        whenever(isOverlay) { true }
     }
 }
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 4ae374a..9213e1f 100644
--- a/services/tests/servicestests/src/com/android/server/people/PeopleServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/people/PeopleServiceTest.java
@@ -51,6 +51,7 @@
     private static final String APP_PREDICTION_SHARE_UI_SURFACE = "share";
     private static final int APP_PREDICTION_TARGET_COUNT = 4;
     private static final String TEST_PACKAGE_NAME = "com.example";
+    private static final int USER_ID = 0;
 
     private PeopleServiceInternal mServiceInternal;
     private PeopleService.LocalService mLocalService;
@@ -73,7 +74,7 @@
         mServiceInternal = LocalServices.getService(PeopleServiceInternal.class);
         mLocalService = (PeopleService.LocalService) mServiceInternal;
 
-        mSessionId = new AppPredictionSessionId("abc");
+        mSessionId = new AppPredictionSessionId("abc", USER_ID);
         mPredictionContext = new AppPredictionContext.Builder(mContext)
                 .setUiSurface(APP_PREDICTION_SHARE_UI_SURFACE)
                 .setPredictedTargetCount(APP_PREDICTION_TARGET_COUNT)
diff --git a/services/tests/servicestests/src/com/android/server/people/data/CallLogQueryHelperTest.java b/services/tests/servicestests/src/com/android/server/people/data/CallLogQueryHelperTest.java
index 7a16d17..a545010 100644
--- a/services/tests/servicestests/src/com/android/server/people/data/CallLogQueryHelperTest.java
+++ b/services/tests/servicestests/src/com/android/server/people/data/CallLogQueryHelperTest.java
@@ -92,7 +92,7 @@
         assertEquals(1, events.size());
         assertEquals(Event.TYPE_CALL_INCOMING, events.get(0).getType());
         assertEquals(100L, events.get(0).getTimestamp());
-        assertEquals(30L, events.get(0).getCallDetails().getDurationSeconds());
+        assertEquals(30L, events.get(0).getDurationSeconds());
     }
 
     @Test
@@ -108,7 +108,7 @@
         assertEquals(1, events.size());
         assertEquals(Event.TYPE_CALL_OUTGOING, events.get(0).getType());
         assertEquals(100L, events.get(0).getTimestamp());
-        assertEquals(40L, events.get(0).getCallDetails().getDurationSeconds());
+        assertEquals(40L, events.get(0).getDurationSeconds());
     }
 
     @Test
@@ -124,7 +124,7 @@
         assertEquals(1, events.size());
         assertEquals(Event.TYPE_CALL_MISSED, events.get(0).getType());
         assertEquals(100L, events.get(0).getTimestamp());
-        assertEquals(0L, events.get(0).getCallDetails().getDurationSeconds());
+        assertEquals(0L, events.get(0).getDurationSeconds());
     }
 
     @Test
@@ -145,7 +145,7 @@
         assertEquals(100L, events.get(0).getTimestamp());
         assertEquals(Event.TYPE_CALL_OUTGOING, events.get(1).getType());
         assertEquals(110L, events.get(1).getTimestamp());
-        assertEquals(40L, events.get(1).getCallDetails().getDurationSeconds());
+        assertEquals(40L, events.get(1).getDurationSeconds());
     }
 
     private class EventConsumer implements BiConsumer<String, Event> {
diff --git a/services/tests/servicestests/src/com/android/server/people/data/ConversationInfoTest.java b/services/tests/servicestests/src/com/android/server/people/data/ConversationInfoTest.java
index 05a9a80..70d6cf8 100644
--- a/services/tests/servicestests/src/com/android/server/people/data/ConversationInfoTest.java
+++ b/services/tests/servicestests/src/com/android/server/people/data/ConversationInfoTest.java
@@ -46,8 +46,8 @@
                 .setContactUri(CONTACT_URI)
                 .setContactPhoneNumber(PHONE_NUMBER)
                 .setNotificationChannelId(NOTIFICATION_CHANNEL_ID)
-                .setShortcutFlags(ShortcutInfo.FLAG_LONG_LIVED)
-                .setVip(true)
+                .setShortcutFlags(ShortcutInfo.FLAG_LONG_LIVED | ShortcutInfo.FLAG_CACHED)
+                .setImportant(true)
                 .setNotificationSilenced(true)
                 .setBubbled(true)
                 .setDemoted(true)
@@ -62,7 +62,8 @@
         assertEquals(PHONE_NUMBER, conversationInfo.getContactPhoneNumber());
         assertEquals(NOTIFICATION_CHANNEL_ID, conversationInfo.getNotificationChannelId());
         assertTrue(conversationInfo.isShortcutLongLived());
-        assertTrue(conversationInfo.isVip());
+        assertTrue(conversationInfo.isShortcutCached());
+        assertTrue(conversationInfo.isImportant());
         assertTrue(conversationInfo.isNotificationSilenced());
         assertTrue(conversationInfo.isBubbled());
         assertTrue(conversationInfo.isDemoted());
@@ -83,7 +84,8 @@
         assertNull(conversationInfo.getContactPhoneNumber());
         assertNull(conversationInfo.getNotificationChannelId());
         assertFalse(conversationInfo.isShortcutLongLived());
-        assertFalse(conversationInfo.isVip());
+        assertFalse(conversationInfo.isShortcutCached());
+        assertFalse(conversationInfo.isImportant());
         assertFalse(conversationInfo.isNotificationSilenced());
         assertFalse(conversationInfo.isBubbled());
         assertFalse(conversationInfo.isDemoted());
@@ -101,7 +103,7 @@
                 .setContactPhoneNumber(PHONE_NUMBER)
                 .setNotificationChannelId(NOTIFICATION_CHANNEL_ID)
                 .setShortcutFlags(ShortcutInfo.FLAG_LONG_LIVED)
-                .setVip(true)
+                .setImportant(true)
                 .setNotificationSilenced(true)
                 .setBubbled(true)
                 .setPersonImportant(true)
@@ -110,7 +112,7 @@
                 .build();
 
         ConversationInfo destination = new ConversationInfo.Builder(source)
-                .setVip(false)
+                .setImportant(false)
                 .setContactStarred(false)
                 .build();
 
@@ -120,7 +122,7 @@
         assertEquals(PHONE_NUMBER, destination.getContactPhoneNumber());
         assertEquals(NOTIFICATION_CHANNEL_ID, destination.getNotificationChannelId());
         assertTrue(destination.isShortcutLongLived());
-        assertFalse(destination.isVip());
+        assertFalse(destination.isImportant());
         assertTrue(destination.isNotificationSilenced());
         assertTrue(destination.isBubbled());
         assertTrue(destination.isPersonImportant());
diff --git a/services/tests/servicestests/src/com/android/server/people/data/ConversationStoreTest.java b/services/tests/servicestests/src/com/android/server/people/data/ConversationStoreTest.java
index a40c6ab..03b5e38 100644
--- a/services/tests/servicestests/src/com/android/server/people/data/ConversationStoreTest.java
+++ b/services/tests/servicestests/src/com/android/server/people/data/ConversationStoreTest.java
@@ -21,31 +21,63 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import android.annotation.Nullable;
+import android.content.Context;
 import android.content.LocusId;
 import android.content.pm.ShortcutInfo;
 import android.net.Uri;
+import android.os.FileUtils;
+import android.text.format.DateUtils;
 import android.util.ArraySet;
 
+import androidx.test.InstrumentationRegistry;
+
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.io.File;
 import java.util.Set;
 
 @RunWith(JUnit4.class)
 public final class ConversationStoreTest {
 
     private static final String SHORTCUT_ID = "abc";
+    private static final String NOTIFICATION_CHANNEL_ID = "test : abc";
     private static final LocusId LOCUS_ID = new LocusId("def");
     private static final Uri CONTACT_URI = Uri.parse("tel:+1234567890");
     private static final String PHONE_NUMBER = "+1234567890";
 
+    private static final String SHORTCUT_ID_2 = "ghi";
+    private static final String NOTIFICATION_CHANNEL_ID_2 = "test : ghi";
+    private static final LocusId LOCUS_ID_2 = new LocusId("jkl");
+    private static final Uri CONTACT_URI_2 = Uri.parse("tel:+3234567890");
+    private static final String PHONE_NUMBER_2 = "+3234567890";
+
+    private static final String SHORTCUT_ID_3 = "mno";
+    private static final String NOTIFICATION_CHANNEL_ID_3 = "test : mno";
+    private static final LocusId LOCUS_ID_3 = new LocusId("pqr");
+    private static final Uri CONTACT_URI_3 = Uri.parse("tel:+9234567890");
+    private static final String PHONE_NUMBER_3 = "+9234567890";
+
+    private MockScheduledExecutorService mMockScheduledExecutorService;
+    private TestContactQueryHelper mTestContactQueryHelper;
     private ConversationStore mConversationStore;
+    private File mFile;
 
     @Before
     public void setUp() {
-        mConversationStore = new ConversationStore();
+        Context ctx = InstrumentationRegistry.getContext();
+        mFile = new File(ctx.getCacheDir(), "testdir");
+        mTestContactQueryHelper = new TestContactQueryHelper(ctx);
+        resetConversationStore();
+    }
+
+    @After
+    public void tearDown() {
+        FileUtils.deleteContentsAndDir(mFile);
     }
 
     @Test
@@ -59,16 +91,19 @@
 
     @Test
     public void testUpdateConversation() {
-        ConversationInfo original =
-                buildConversationInfo(SHORTCUT_ID, LOCUS_ID, CONTACT_URI, PHONE_NUMBER);
+        ConversationInfo original = buildConversationInfo(SHORTCUT_ID, LOCUS_ID, CONTACT_URI,
+                PHONE_NUMBER, null);
         mConversationStore.addOrUpdate(original);
         assertEquals(LOCUS_ID, mConversationStore.getConversation(SHORTCUT_ID).getLocusId());
+        assertNull(mConversationStore.getConversation(SHORTCUT_ID).getNotificationChannelId());
 
         LocusId newLocusId = new LocusId("ghi");
         ConversationInfo update = buildConversationInfo(
-                SHORTCUT_ID, newLocusId, CONTACT_URI, PHONE_NUMBER);
+                SHORTCUT_ID, newLocusId, CONTACT_URI, PHONE_NUMBER, NOTIFICATION_CHANNEL_ID);
         mConversationStore.addOrUpdate(update);
-        assertEquals(newLocusId, mConversationStore.getConversation(SHORTCUT_ID).getLocusId());
+        ConversationInfo updated = mConversationStore.getConversation(SHORTCUT_ID);
+        assertEquals(newLocusId, updated.getLocusId());
+        assertEquals(NOTIFICATION_CHANNEL_ID, updated.getNotificationChannelId());
     }
 
     @Test
@@ -97,8 +132,8 @@
 
     @Test
     public void testGetConversationByLocusId() {
-        ConversationInfo in =
-                buildConversationInfo(SHORTCUT_ID, LOCUS_ID, CONTACT_URI, PHONE_NUMBER);
+        ConversationInfo in = buildConversationInfo(SHORTCUT_ID, LOCUS_ID, CONTACT_URI,
+                PHONE_NUMBER, NOTIFICATION_CHANNEL_ID);
         mConversationStore.addOrUpdate(in);
         ConversationInfo out = mConversationStore.getConversationByLocusId(LOCUS_ID);
         assertNotNull(out);
@@ -110,8 +145,8 @@
 
     @Test
     public void testGetConversationByContactUri() {
-        ConversationInfo in =
-                buildConversationInfo(SHORTCUT_ID, LOCUS_ID, CONTACT_URI, PHONE_NUMBER);
+        ConversationInfo in = buildConversationInfo(SHORTCUT_ID, LOCUS_ID, CONTACT_URI,
+                PHONE_NUMBER, NOTIFICATION_CHANNEL_ID);
         mConversationStore.addOrUpdate(in);
         ConversationInfo out = mConversationStore.getConversationByContactUri(CONTACT_URI);
         assertNotNull(out);
@@ -123,8 +158,8 @@
 
     @Test
     public void testGetConversationByPhoneNumber() {
-        ConversationInfo in =
-                buildConversationInfo(SHORTCUT_ID, LOCUS_ID, CONTACT_URI, PHONE_NUMBER);
+        ConversationInfo in = buildConversationInfo(SHORTCUT_ID, LOCUS_ID, CONTACT_URI,
+                PHONE_NUMBER, NOTIFICATION_CHANNEL_ID);
         mConversationStore.addOrUpdate(in);
         ConversationInfo out = mConversationStore.getConversationByPhoneNumber(PHONE_NUMBER);
         assertNotNull(out);
@@ -134,20 +169,211 @@
         assertNull(mConversationStore.getConversationByPhoneNumber(PHONE_NUMBER));
     }
 
+    @Test
+    public void testGetConversationByNotificationChannelId() {
+        ConversationInfo in = buildConversationInfo(SHORTCUT_ID, LOCUS_ID, CONTACT_URI,
+                PHONE_NUMBER, NOTIFICATION_CHANNEL_ID);
+        mConversationStore.addOrUpdate(in);
+        ConversationInfo out = mConversationStore.getConversationByNotificationChannelId(
+                NOTIFICATION_CHANNEL_ID);
+        assertNotNull(out);
+        assertEquals(SHORTCUT_ID, out.getShortcutId());
+
+        mConversationStore.deleteConversation(SHORTCUT_ID);
+        assertNull(
+                mConversationStore.getConversationByNotificationChannelId(NOTIFICATION_CHANNEL_ID));
+    }
+
+    @Test
+    public void testDataPersistenceAndRestoration() {
+        // Add conversation infos, causing it to be loaded to disk.
+        ConversationInfo in1 = buildConversationInfo(SHORTCUT_ID, LOCUS_ID, CONTACT_URI,
+                PHONE_NUMBER, NOTIFICATION_CHANNEL_ID);
+        ConversationInfo in2 = buildConversationInfo(SHORTCUT_ID_2, LOCUS_ID_2, CONTACT_URI_2,
+                PHONE_NUMBER_2, NOTIFICATION_CHANNEL_ID_2);
+        ConversationInfo in3 = buildConversationInfo(SHORTCUT_ID_3, LOCUS_ID_3, CONTACT_URI_3,
+                PHONE_NUMBER_3, NOTIFICATION_CHANNEL_ID_3);
+        mConversationStore.addOrUpdate(in1);
+        mConversationStore.addOrUpdate(in2);
+        mConversationStore.addOrUpdate(in3);
+
+        long futuresExecuted = mMockScheduledExecutorService.fastForwardTime(
+                3L * DateUtils.MINUTE_IN_MILLIS);
+        assertEquals(1, futuresExecuted);
+
+        mMockScheduledExecutorService.resetTimeElapsedMillis();
+
+        // During restoration, we want to confirm that this conversation was removed.
+        mConversationStore.deleteConversation(SHORTCUT_ID_3);
+        mMockScheduledExecutorService.fastForwardTime(3L * DateUtils.MINUTE_IN_MILLIS);
+
+        mTestContactQueryHelper.setQueryResult(true, true);
+        mTestContactQueryHelper.setPhoneNumberResult(PHONE_NUMBER, PHONE_NUMBER_2);
+
+        resetConversationStore();
+        ConversationInfo out1 = mConversationStore.getConversation(SHORTCUT_ID);
+        ConversationInfo out2 = mConversationStore.getConversation(SHORTCUT_ID_2);
+        ConversationInfo out3 = mConversationStore.getConversation(SHORTCUT_ID_3);
+        mConversationStore.deleteConversation(SHORTCUT_ID);
+        mConversationStore.deleteConversation(SHORTCUT_ID_2);
+        mConversationStore.deleteConversation(SHORTCUT_ID_3);
+        assertEquals(in1, out1);
+        assertEquals(in2, out2);
+        assertNull(out3);
+    }
+
+    @Test
+    public void testDelayedDiskWrites() {
+        ConversationInfo in1 = buildConversationInfo(SHORTCUT_ID, LOCUS_ID, CONTACT_URI,
+                PHONE_NUMBER, NOTIFICATION_CHANNEL_ID);
+        ConversationInfo in2 = buildConversationInfo(SHORTCUT_ID_2, LOCUS_ID_2, CONTACT_URI_2,
+                PHONE_NUMBER_2, NOTIFICATION_CHANNEL_ID_2);
+        ConversationInfo in3 = buildConversationInfo(SHORTCUT_ID_3, LOCUS_ID_3, CONTACT_URI_3,
+                PHONE_NUMBER_3, NOTIFICATION_CHANNEL_ID_3);
+
+        mConversationStore.addOrUpdate(in1);
+        mMockScheduledExecutorService.fastForwardTime(3L * DateUtils.MINUTE_IN_MILLIS);
+        mMockScheduledExecutorService.resetTimeElapsedMillis();
+
+        // Should not see second conversation on disk because of disk write delay has not been
+        // reached.
+        mConversationStore.addOrUpdate(in2);
+        mMockScheduledExecutorService.fastForwardTime(DateUtils.MINUTE_IN_MILLIS);
+
+        mTestContactQueryHelper.setQueryResult(true);
+        mTestContactQueryHelper.setPhoneNumberResult(PHONE_NUMBER);
+
+        resetConversationStore();
+        ConversationInfo out1 = mConversationStore.getConversation(SHORTCUT_ID);
+        ConversationInfo out2 = mConversationStore.getConversation(SHORTCUT_ID_2);
+        assertEquals(in1, out1);
+        assertNull(out2);
+
+        mConversationStore.addOrUpdate(in2);
+        mMockScheduledExecutorService.fastForwardTime(3L * DateUtils.MINUTE_IN_MILLIS);
+        mMockScheduledExecutorService.resetTimeElapsedMillis();
+
+        mConversationStore.addOrUpdate(in3);
+        mMockScheduledExecutorService.fastForwardTime(3L * DateUtils.MINUTE_IN_MILLIS);
+
+        mTestContactQueryHelper.reset();
+        mTestContactQueryHelper.setQueryResult(true, true, true);
+        mTestContactQueryHelper.setPhoneNumberResult(PHONE_NUMBER, PHONE_NUMBER_2, PHONE_NUMBER_3);
+
+        resetConversationStore();
+        out1 = mConversationStore.getConversation(SHORTCUT_ID);
+        out2 = mConversationStore.getConversation(SHORTCUT_ID_2);
+        ConversationInfo out3 = mConversationStore.getConversation(SHORTCUT_ID_3);
+        assertEquals(in1, out1);
+        assertEquals(in2, out2);
+        assertEquals(in3, out3);
+    }
+
+    @Test
+    public void testMimicDevicePowerOff() {
+
+        // Even without fast forwarding time with our mock ScheduledExecutorService, we should
+        // see the conversations immediately saved to disk.
+        ConversationInfo in1 = buildConversationInfo(SHORTCUT_ID, LOCUS_ID, CONTACT_URI,
+                PHONE_NUMBER, NOTIFICATION_CHANNEL_ID);
+        ConversationInfo in2 = buildConversationInfo(SHORTCUT_ID_2, LOCUS_ID_2, CONTACT_URI_2,
+                PHONE_NUMBER_2, NOTIFICATION_CHANNEL_ID_2);
+
+        mConversationStore.addOrUpdate(in1);
+        mConversationStore.addOrUpdate(in2);
+        mConversationStore.saveConversationsToDisk();
+
+        // Ensure that futures were cancelled and the immediate flush occurred.
+        assertEquals(0, mMockScheduledExecutorService.getFutures().size());
+
+        // Expect to see 2 executes: loadConversationFromDisk and saveConversationsToDisk.
+        // loadConversationFromDisk gets called each time we call #resetConversationStore().
+        assertEquals(2, mMockScheduledExecutorService.getExecutes().size());
+
+        mTestContactQueryHelper.setQueryResult(true, true);
+        mTestContactQueryHelper.setPhoneNumberResult(PHONE_NUMBER, PHONE_NUMBER_2);
+
+        resetConversationStore();
+        ConversationInfo out1 = mConversationStore.getConversation(SHORTCUT_ID);
+        ConversationInfo out2 = mConversationStore.getConversation(SHORTCUT_ID_2);
+        assertEquals(in1, out1);
+        assertEquals(in2, out2);
+    }
+
+    private void resetConversationStore() {
+        mFile.mkdir();
+        mMockScheduledExecutorService = new MockScheduledExecutorService();
+        mConversationStore = new ConversationStore(mFile, mMockScheduledExecutorService,
+                mTestContactQueryHelper);
+        mConversationStore.loadConversationsFromDisk();
+    }
+
     private static ConversationInfo buildConversationInfo(String shortcutId) {
-        return buildConversationInfo(shortcutId, null, null, null);
+        return buildConversationInfo(shortcutId, null, null, null, null);
     }
 
     private static ConversationInfo buildConversationInfo(
-            String shortcutId, LocusId locusId, Uri contactUri, String phoneNumber) {
+            String shortcutId, LocusId locusId, Uri contactUri, String phoneNumber,
+            String notificationChannelId) {
         return new ConversationInfo.Builder()
                 .setShortcutId(shortcutId)
                 .setLocusId(locusId)
                 .setContactUri(contactUri)
                 .setContactPhoneNumber(phoneNumber)
+                .setNotificationChannelId(notificationChannelId)
                 .setShortcutFlags(ShortcutInfo.FLAG_LONG_LIVED)
-                .setVip(true)
+                .setImportant(true)
                 .setBubbled(true)
                 .build();
     }
+
+    private static class TestContactQueryHelper extends ContactsQueryHelper {
+
+        private int mQueryCalls;
+        private boolean[] mQueryResult;
+
+        private int mPhoneNumberCalls;
+        private String[] mPhoneNumberResult;
+
+        TestContactQueryHelper(Context context) {
+            super(context);
+
+            mQueryCalls = 0;
+            mPhoneNumberCalls = 0;
+        }
+
+        private void setQueryResult(boolean... values) {
+            mQueryResult = values;
+        }
+
+        private void setPhoneNumberResult(String... values) {
+            mPhoneNumberResult = values;
+        }
+
+        private void reset() {
+            mQueryCalls = 0;
+            mQueryResult = null;
+            mPhoneNumberCalls = 0;
+            mPhoneNumberResult = null;
+        }
+
+        @Override
+        boolean query(String contactUri) {
+            if (mQueryResult != null && mQueryCalls < mQueryResult.length) {
+                return mQueryResult[mQueryCalls++];
+            }
+            mQueryCalls++;
+            return false;
+        }
+
+        @Override
+        @Nullable
+        String getPhoneNumber() {
+            if (mPhoneNumberResult != null && mPhoneNumberCalls < mPhoneNumberResult.length) {
+                return mPhoneNumberResult[mPhoneNumberCalls++];
+            }
+            mPhoneNumberCalls++;
+            return null;
+        }
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java b/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java
index 9d2091a..f73a4b5 100644
--- a/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java
@@ -16,18 +16,22 @@
 
 package com.android.server.people.data;
 
-import static android.app.usage.UsageEvents.Event.SHORTCUT_INVOCATION;
+import static android.service.notification.NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_ADDED;
+import static android.service.notification.NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_DELETED;
+import static android.service.notification.NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_UPDATED;
 
 import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
 
 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.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -36,22 +40,25 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
 import android.app.Person;
+import android.app.job.JobScheduler;
 import android.app.prediction.AppTarget;
 import android.app.prediction.AppTargetEvent;
 import android.app.prediction.AppTargetId;
-import android.app.usage.UsageEvents;
 import android.app.usage.UsageStatsManagerInternal;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.pm.PackageManagerInternal;
 import android.content.pm.ShortcutInfo;
-import android.content.pm.ShortcutManager;
 import android.content.pm.ShortcutServiceInternal;
 import android.content.pm.UserInfo;
 import android.database.ContentObserver;
 import android.net.Uri;
+import android.os.CancellationSignal;
 import android.os.Looper;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -63,7 +70,9 @@
 import android.util.Range;
 
 import com.android.internal.app.ChooserActivity;
+import com.android.internal.content.PackageMonitor;
 import com.android.server.LocalServices;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
 
 import org.junit.After;
 import org.junit.Before;
@@ -77,10 +86,12 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.function.BiConsumer;
+import java.util.function.Consumer;
 
 @RunWith(JUnit4.class)
 public final class DataManagerTest {
@@ -92,23 +103,26 @@
     private static final String TEST_SHORTCUT_ID = "sc";
     private static final String CONTACT_URI = "content://com.android.contacts/contacts/lookup/123";
     private static final String PHONE_NUMBER = "+1234567890";
+    private static final String NOTIFICATION_CHANNEL_ID = "test : sc";
     private static final long MILLIS_PER_MINUTE = 1000L * 60L;
 
     @Mock private Context mContext;
     @Mock private ShortcutServiceInternal mShortcutServiceInternal;
     @Mock private UsageStatsManagerInternal mUsageStatsManagerInternal;
-    @Mock private ShortcutManager mShortcutManager;
+    @Mock private PackageManagerInternal mPackageManagerInternal;
     @Mock private UserManager mUserManager;
     @Mock private TelephonyManager mTelephonyManager;
     @Mock private TelecomManager mTelecomManager;
     @Mock private ContentResolver mContentResolver;
     @Mock private ScheduledExecutorService mExecutorService;
+    @Mock private JobScheduler mJobScheduler;
     @Mock private ScheduledFuture mScheduledFuture;
     @Mock private StatusBarNotification mStatusBarNotification;
     @Mock private Notification mNotification;
 
+    private NotificationChannel mNotificationChannel;
     private DataManager mDataManager;
-    private int mCallingUserId;
+    private CancellationSignal mCancellationSignal;
     private TestInjector mInjector;
 
     @Before
@@ -119,15 +133,21 @@
 
         addLocalServiceMock(UsageStatsManagerInternal.class, mUsageStatsManagerInternal);
 
+        addLocalServiceMock(PackageManagerInternal.class, mPackageManagerInternal);
+        AndroidPackage androidPackage = mock(AndroidPackage.class);
+        when(androidPackage.getPackageName()).thenReturn(TEST_PKG_NAME);
+        doAnswer(ans -> {
+            Consumer<AndroidPackage> callback = (Consumer<AndroidPackage>) ans.getArguments()[0];
+            callback.accept(androidPackage);
+            return null;
+        }).when(mPackageManagerInternal).forEachInstalledPackage(any(Consumer.class), anyInt());
+
         when(mContext.getMainLooper()).thenReturn(Looper.getMainLooper());
+        when(mContext.getPackageName()).thenReturn("android");
 
         Context originalContext = getInstrumentation().getTargetContext();
         when(mContext.getApplicationInfo()).thenReturn(originalContext.getApplicationInfo());
 
-        when(mContext.getSystemService(Context.SHORTCUT_SERVICE)).thenReturn(mShortcutManager);
-        when(mContext.getSystemServiceName(ShortcutManager.class)).thenReturn(
-                Context.SHORTCUT_SERVICE);
-
         when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
         when(mContext.getSystemServiceName(UserManager.class)).thenReturn(
                 Context.USER_SERVICE);
@@ -137,7 +157,12 @@
         when(mContext.getSystemService(Context.TELECOM_SERVICE)).thenReturn(mTelecomManager);
         when(mContext.getSystemServiceName(TelecomManager.class)).thenReturn(
                 Context.TELECOM_SERVICE);
-        when(mTelecomManager.getDefaultDialerPackage(anyInt())).thenReturn(TEST_PKG_NAME);
+        when(mTelecomManager.getDefaultDialerPackage(any(UserHandle.class)))
+                .thenReturn(TEST_PKG_NAME);
+
+        when(mContext.getSystemService(Context.JOB_SCHEDULER_SERVICE)).thenReturn(mJobScheduler);
+        when(mContext.getSystemServiceName(JobScheduler.class)).thenReturn(
+                Context.JOB_SCHEDULER_SERVICE);
 
         when(mExecutorService.scheduleAtFixedRate(any(Runnable.class), anyLong(), anyLong(), any(
                 TimeUnit.class))).thenReturn(mScheduledFuture);
@@ -154,9 +179,14 @@
         when(mStatusBarNotification.getNotification()).thenReturn(mNotification);
         when(mStatusBarNotification.getPackageName()).thenReturn(TEST_PKG_NAME);
         when(mStatusBarNotification.getUser()).thenReturn(UserHandle.of(USER_ID_PRIMARY));
+        when(mStatusBarNotification.getPostTime()).thenReturn(System.currentTimeMillis());
         when(mNotification.getShortcutId()).thenReturn(TEST_SHORTCUT_ID);
 
-        mCallingUserId = USER_ID_PRIMARY;
+        mNotificationChannel = new NotificationChannel(
+                NOTIFICATION_CHANNEL_ID, "test channel", NotificationManager.IMPORTANCE_DEFAULT);
+        mNotificationChannel.setConversationId("test", TEST_SHORTCUT_ID);
+
+        mCancellationSignal = new CancellationSignal();
 
         mInjector = new TestInjector();
         mDataManager = new DataManager(mContext, mInjector);
@@ -167,6 +197,7 @@
     public void tearDown() {
         LocalServices.removeServiceForTest(ShortcutServiceInternal.class);
         LocalServices.removeServiceForTest(UsageStatsManagerInternal.class);
+        LocalServices.removeServiceForTest(PackageManagerInternal.class);
     }
 
     @Test
@@ -184,9 +215,7 @@
         mDataManager.onShortcutAddedOrUpdated(
                 buildShortcutInfo("pkg_3", USER_ID_SECONDARY, "sc_3", buildPerson()));
 
-        List<ConversationInfo> conversations = new ArrayList<>();
-        mDataManager.forAllPackages(
-                packageData -> packageData.forAllConversations(conversations::add));
+        List<ConversationInfo> conversations = getConversationsInPrimary();
 
         // USER_ID_SECONDARY is not in the same profile group as USER_ID_PRIMARY.
         assertEquals(2, conversations.size());
@@ -212,18 +241,14 @@
         mDataManager.onShortcutAddedOrUpdated(
                 buildShortcutInfo("pkg_2", USER_ID_PRIMARY_MANAGED, "sc_2", buildPerson()));
 
-        List<ConversationInfo> conversations = new ArrayList<>();
-        mDataManager.forAllPackages(
-                packageData -> packageData.forAllConversations(conversations::add));
+        List<ConversationInfo> conversations = getConversationsInPrimary();
 
         // USER_ID_PRIMARY_MANAGED is not locked, so only USER_ID_PRIMARY's conversation is stored.
         assertEquals(1, conversations.size());
         assertEquals("sc_1", conversations.get(0).getShortcutId());
 
         mDataManager.onUserStopped(USER_ID_PRIMARY);
-        conversations.clear();
-        mDataManager.forAllPackages(
-                packageData -> packageData.forAllConversations(conversations::add));
+        conversations = getConversationsInPrimary();
         assertTrue(conversations.isEmpty());
     }
 
@@ -251,12 +276,8 @@
         IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SEND, "image/jpg");
         mDataManager.reportAppTargetEvent(appTargetEvent, intentFilter);
 
-        List<Range<Long>> activeShareTimeSlots = new ArrayList<>();
-        mDataManager.forAllPackages(packageData ->
-                activeShareTimeSlots.addAll(
-                        packageData.getEventHistory(TEST_SHORTCUT_ID)
-                                .getEventIndex(Event.TYPE_SHARE_IMAGE)
-                                .getActiveTimeSlots()));
+        List<Range<Long>> activeShareTimeSlots = getActiveSlotsForTestShortcut(
+                Event.SHARE_EVENT_TYPES);
         assertEquals(1, activeShareTimeSlots.size());
     }
 
@@ -277,9 +298,7 @@
                 USER_ID_PRIMARY);
         contentObserver.onChange(false, ContactsContract.Contacts.CONTENT_URI, USER_ID_PRIMARY);
 
-        List<ConversationInfo> conversations = new ArrayList<>();
-        mDataManager.forAllPackages(
-                packageData -> packageData.forAllConversations(conversations::add));
+        List<ConversationInfo> conversations = getConversationsInPrimary();
         assertEquals(1, conversations.size());
 
         assertEquals(TEST_SHORTCUT_ID, conversations.get(0).getShortcutId());
@@ -288,9 +307,26 @@
     }
 
     @Test
-    public void testNotificationListener() {
+    public void testNotificationPosted() {
         mDataManager.onUserUnlocked(USER_ID_PRIMARY);
-        mDataManager.onUserUnlocked(USER_ID_SECONDARY);
+
+        ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
+                buildPerson());
+        mDataManager.onShortcutAddedOrUpdated(shortcut);
+
+        NotificationListenerService listenerService =
+                mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY);
+
+        listenerService.onNotificationPosted(mStatusBarNotification);
+
+        List<Range<Long>> activeNotificationOpenTimeSlots = getActiveSlotsForTestShortcut(
+                Event.NOTIFICATION_EVENT_TYPES);
+        assertEquals(1, activeNotificationOpenTimeSlots.size());
+    }
+
+    @Test
+    public void testNotificationOpened() {
+        mDataManager.onUserUnlocked(USER_ID_PRIMARY);
 
         ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
                 buildPerson());
@@ -302,42 +338,89 @@
         listenerService.onNotificationRemoved(mStatusBarNotification, null,
                 NotificationListenerService.REASON_CLICK);
 
-        List<Range<Long>> activeNotificationOpenTimeSlots = new ArrayList<>();
-        mDataManager.forAllPackages(packageData ->
-                activeNotificationOpenTimeSlots.addAll(
-                        packageData.getEventHistory(TEST_SHORTCUT_ID)
-                                .getEventIndex(Event.TYPE_NOTIFICATION_OPENED)
-                                .getActiveTimeSlots()));
+        List<Range<Long>> activeNotificationOpenTimeSlots = getActiveSlotsForTestShortcut(
+                Event.NOTIFICATION_EVENT_TYPES);
         assertEquals(1, activeNotificationOpenTimeSlots.size());
     }
 
     @Test
-    public void testQueryUsageStatsService() {
-        UsageEvents.Event e = new UsageEvents.Event(SHORTCUT_INVOCATION,
-                System.currentTimeMillis());
-        e.mPackage = TEST_PKG_NAME;
-        e.mShortcutId = TEST_SHORTCUT_ID;
-        List<UsageEvents.Event> events = new ArrayList<>();
-        events.add(e);
-        UsageEvents usageEvents = new UsageEvents(events, new String[]{});
-        when(mUsageStatsManagerInternal.queryEventsForUser(anyInt(), anyLong(), anyLong(),
-                anyBoolean(), anyBoolean())).thenReturn(usageEvents);
-
+    public void testNotificationChannelCreated() {
         mDataManager.onUserUnlocked(USER_ID_PRIMARY);
+        mDataManager.onUserUnlocked(USER_ID_SECONDARY);
 
         ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
                 buildPerson());
         mDataManager.onShortcutAddedOrUpdated(shortcut);
 
-        mDataManager.queryUsageStatsService(USER_ID_PRIMARY, 0L, Long.MAX_VALUE);
+        NotificationListenerService listenerService =
+                mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY);
+        listenerService.onNotificationChannelModified(TEST_PKG_NAME, UserHandle.of(USER_ID_PRIMARY),
+                mNotificationChannel, NOTIFICATION_CHANNEL_OR_GROUP_ADDED);
 
-        List<Range<Long>> activeShortcutInvocationTimeSlots = new ArrayList<>();
-        mDataManager.forAllPackages(packageData ->
-                activeShortcutInvocationTimeSlots.addAll(
-                        packageData.getEventHistory(TEST_SHORTCUT_ID)
-                                .getEventIndex(Event.TYPE_SHORTCUT_INVOCATION)
-                                .getActiveTimeSlots()));
-        assertEquals(1, activeShortcutInvocationTimeSlots.size());
+        ConversationInfo conversationInfo = mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY)
+                .getConversationStore()
+                .getConversation(TEST_SHORTCUT_ID);
+        assertEquals(NOTIFICATION_CHANNEL_ID, conversationInfo.getNotificationChannelId());
+        assertFalse(conversationInfo.isImportant());
+        assertFalse(conversationInfo.isNotificationSilenced());
+        assertFalse(conversationInfo.isDemoted());
+    }
+
+    @Test
+    public void testNotificationChannelModified() {
+        mNotificationChannel.setImportantConversation(true);
+
+        mDataManager.onUserUnlocked(USER_ID_PRIMARY);
+        mDataManager.onUserUnlocked(USER_ID_SECONDARY);
+
+        ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
+                buildPerson());
+        mDataManager.onShortcutAddedOrUpdated(shortcut);
+
+        NotificationListenerService listenerService =
+                mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY);
+        listenerService.onNotificationChannelModified(TEST_PKG_NAME, UserHandle.of(USER_ID_PRIMARY),
+                mNotificationChannel, NOTIFICATION_CHANNEL_OR_GROUP_UPDATED);
+
+        ConversationInfo conversationInfo = mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY)
+                .getConversationStore()
+                .getConversation(TEST_SHORTCUT_ID);
+        assertEquals(NOTIFICATION_CHANNEL_ID, conversationInfo.getNotificationChannelId());
+        assertTrue(conversationInfo.isImportant());
+        assertFalse(conversationInfo.isNotificationSilenced());
+        assertFalse(conversationInfo.isDemoted());
+        verify(mShortcutServiceInternal).cacheShortcuts(
+                anyInt(), any(), eq(TEST_PKG_NAME),
+                eq(Collections.singletonList(TEST_SHORTCUT_ID)), eq(USER_ID_PRIMARY));
+    }
+
+    @Test
+    public void testNotificationChannelDeleted() {
+        mDataManager.onUserUnlocked(USER_ID_PRIMARY);
+        mDataManager.onUserUnlocked(USER_ID_SECONDARY);
+
+        ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
+                buildPerson());
+        mDataManager.onShortcutAddedOrUpdated(shortcut);
+
+        NotificationListenerService listenerService =
+                mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY);
+        listenerService.onNotificationChannelModified(TEST_PKG_NAME, UserHandle.of(USER_ID_PRIMARY),
+                mNotificationChannel, NOTIFICATION_CHANNEL_OR_GROUP_ADDED);
+        ConversationInfo conversationInfo = mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY)
+                .getConversationStore()
+                .getConversation(TEST_SHORTCUT_ID);
+        assertEquals(NOTIFICATION_CHANNEL_ID, conversationInfo.getNotificationChannelId());
+
+        listenerService.onNotificationChannelModified(TEST_PKG_NAME, UserHandle.of(USER_ID_PRIMARY),
+                mNotificationChannel, NOTIFICATION_CHANNEL_OR_GROUP_DELETED);
+        conversationInfo = mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY)
+                .getConversationStore()
+                .getConversation(TEST_SHORTCUT_ID);
+        assertNull(conversationInfo.getNotificationChannelId());
+        assertFalse(conversationInfo.isImportant());
+        assertFalse(conversationInfo.isNotificationSilenced());
+        assertFalse(conversationInfo.isDemoted());
     }
 
     @Test
@@ -359,12 +442,7 @@
         mInjector.mCallLogQueryHelper.mEventConsumer.accept(PHONE_NUMBER,
                 new Event(currentTimestamp - MILLIS_PER_MINUTE * 5L, Event.TYPE_CALL_MISSED));
 
-        List<Range<Long>> activeTimeSlots = new ArrayList<>();
-        mDataManager.forAllPackages(packageData ->
-                activeTimeSlots.addAll(
-                        packageData.getEventHistory(TEST_SHORTCUT_ID)
-                                .getEventIndex(Event.CALL_EVENT_TYPES)
-                                .getActiveTimeSlots()));
+        List<Range<Long>> activeTimeSlots = getActiveSlotsForTestShortcut(Event.CALL_EVENT_TYPES);
         assertEquals(3, activeTimeSlots.size());
     }
 
@@ -388,20 +466,108 @@
         mInjector.mMmsQueryHelper.mEventConsumer.accept(PHONE_NUMBER, outgoingSmsEvent);
         mInjector.mSmsQueryHelper.mEventConsumer.accept(PHONE_NUMBER, incomingSmsEvent);
 
-        List<Range<Long>> activeTimeSlots = new ArrayList<>();
-        mDataManager.forAllPackages(packageData ->
-                activeTimeSlots.addAll(
-                        packageData.getEventHistory(TEST_SHORTCUT_ID)
-                                .getEventIndex(Event.SMS_EVENT_TYPES)
-                                .getActiveTimeSlots()));
+        List<Range<Long>> activeTimeSlots = getActiveSlotsForTestShortcut(Event.SMS_EVENT_TYPES);
         assertEquals(2, activeTimeSlots.size());
     }
 
+    @Test
+    public void testDeleteUninstalledPackageDataOnPackageRemoved() {
+        mDataManager.onUserUnlocked(USER_ID_PRIMARY);
+
+        ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
+                buildPerson());
+        mDataManager.onShortcutAddedOrUpdated(shortcut);
+        assertNotNull(mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY));
+
+        PackageMonitor packageMonitor = mDataManager.getPackageMonitorForTesting(USER_ID_PRIMARY);
+        Intent intent = new Intent(Intent.ACTION_PACKAGE_REMOVED);
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, USER_ID_PRIMARY);
+        intent.setData(Uri.parse("package:" + TEST_PKG_NAME));
+        packageMonitor.onReceive(mContext, intent);
+        assertNull(mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY));
+    }
+
+    @Test
+    public void testPruneUninstalledPackageData() {
+        mDataManager.onUserUnlocked(USER_ID_PRIMARY);
+
+        ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
+                buildPerson());
+        mDataManager.onShortcutAddedOrUpdated(shortcut);
+        assertNotNull(mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY));
+
+        doAnswer(ans -> null).when(mPackageManagerInternal)
+                .forEachInstalledPackage(any(Consumer.class), anyInt());
+        mDataManager.pruneDataForUser(USER_ID_PRIMARY, mCancellationSignal);
+        assertNull(mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY));
+    }
+
+    @Test
+    public void testPruneCallEventsFromNonDialer() {
+        mDataManager.onUserUnlocked(USER_ID_PRIMARY);
+
+        ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
+                buildPerson());
+        mDataManager.onShortcutAddedOrUpdated(shortcut);
+
+        long currentTimestamp = System.currentTimeMillis();
+        mInjector.mCallLogQueryHelper.mEventConsumer.accept(PHONE_NUMBER,
+                new Event(currentTimestamp - MILLIS_PER_MINUTE, Event.TYPE_CALL_OUTGOING));
+
+        List<Range<Long>> activeTimeSlots = getActiveSlotsForTestShortcut(Event.CALL_EVENT_TYPES);
+        assertEquals(1, activeTimeSlots.size());
+
+        mDataManager.getUserDataForTesting(USER_ID_PRIMARY).setDefaultDialer(null);
+        mDataManager.pruneDataForUser(USER_ID_PRIMARY, mCancellationSignal);
+        activeTimeSlots = getActiveSlotsForTestShortcut(Event.CALL_EVENT_TYPES);
+        assertTrue(activeTimeSlots.isEmpty());
+    }
+
+    @Test
+    public void testPruneSmsEventsFromNonDefaultSmsApp() {
+        mDataManager.onUserUnlocked(USER_ID_PRIMARY);
+
+        ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
+                buildPerson());
+        mDataManager.onShortcutAddedOrUpdated(shortcut);
+        mDataManager.getUserDataForTesting(USER_ID_PRIMARY).setDefaultSmsApp(TEST_PKG_NAME);
+
+        long currentTimestamp = System.currentTimeMillis();
+        mInjector.mMmsQueryHelper.mEventConsumer.accept(PHONE_NUMBER,
+                new Event(currentTimestamp - MILLIS_PER_MINUTE, Event.TYPE_SMS_OUTGOING));
+
+        List<Range<Long>> activeTimeSlots = getActiveSlotsForTestShortcut(Event.SMS_EVENT_TYPES);
+        assertEquals(1, activeTimeSlots.size());
+
+        mDataManager.getUserDataForTesting(USER_ID_PRIMARY).setDefaultSmsApp(null);
+        mDataManager.pruneDataForUser(USER_ID_PRIMARY, mCancellationSignal);
+        activeTimeSlots = getActiveSlotsForTestShortcut(Event.SMS_EVENT_TYPES);
+        assertTrue(activeTimeSlots.isEmpty());
+    }
+
     private static <T> void addLocalServiceMock(Class<T> clazz, T mock) {
         LocalServices.removeServiceForTest(clazz);
         LocalServices.addService(clazz, mock);
     }
 
+    private List<ConversationInfo> getConversationsInPrimary() {
+        List<ConversationInfo> conversations = new ArrayList<>();
+        mDataManager.forPackagesInProfile(USER_ID_PRIMARY,
+                packageData -> packageData.forAllConversations(conversations::add));
+        return conversations;
+    }
+
+    private List<Range<Long>> getActiveSlotsForTestShortcut(
+            Set<Integer> eventTypes) {
+        List<Range<Long>> activeSlots = new ArrayList<>();
+        mDataManager.forPackagesInProfile(USER_ID_PRIMARY, packageData ->
+                activeSlots.addAll(
+                        packageData.getEventHistory(TEST_SHORTCUT_ID)
+                                .getEventIndex(eventTypes)
+                                .getActiveTimeSlots()));
+        return activeSlots;
+    }
+
     private ShortcutInfo buildShortcutInfo(String packageName, int userId, String id,
             @Nullable Person person) {
         Context mockContext = mock(Context.class);
@@ -410,6 +576,7 @@
         when(mockContext.getUser()).thenReturn(UserHandle.of(userId));
         ShortcutInfo.Builder builder = new ShortcutInfo.Builder(mockContext, id)
                 .setShortLabel(id)
+                .setLongLived(true)
                 .setIntent(new Intent("TestIntent"));
         if (person != null) {
             builder.setPersons(new Person[] {person});
@@ -572,10 +739,5 @@
             mSmsQueryHelper = new TestSmsQueryHelper(context, eventConsumer);
             return mSmsQueryHelper;
         }
-
-        @Override
-        int getCallingUserId() {
-            return mCallingUserId;
-        }
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/people/data/MockScheduledExecutorService.java b/services/tests/servicestests/src/com/android/server/people/data/MockScheduledExecutorService.java
new file mode 100644
index 0000000..8b8ba12
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/people/data/MockScheduledExecutorService.java
@@ -0,0 +1,238 @@
+/*
+ * 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.people.data;
+
+import com.android.internal.util.Preconditions;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Delayed;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Mock implementation of ScheduledExecutorService for testing. All commands will run
+ * synchronously. Commands passed to {@link #submit(Runnable)} and {@link #execute(Runnable)} will
+ * run immediately. Commands scheduled via {@link #schedule(Runnable, long, TimeUnit)} will run
+ * after calling {@link #fastForwardTime(long)}.
+ */
+class MockScheduledExecutorService implements ScheduledExecutorService {
+
+    private final List<Runnable> mExecutes = new ArrayList<>();
+    private final List<MockScheduledFuture<?>> mFutures = new ArrayList<>();
+    private long mTimeElapsedMillis = 0;
+
+    /**
+     * Advances fake time, runs all the commands for which the delay has expired.
+     */
+    long fastForwardTime(long millis) {
+        mTimeElapsedMillis += millis;
+        ImmutableList<MockScheduledFuture<?>> futuresCopy = ImmutableList.copyOf(mFutures);
+        mFutures.clear();
+        long totalExecuted = 0;
+        for (MockScheduledFuture<?> future : futuresCopy) {
+            if (future.getDelay() < mTimeElapsedMillis) {
+                future.getCommand().run();
+                mExecutes.add(future.getCommand());
+                totalExecuted += 1;
+            } else {
+                mFutures.add(future);
+            }
+        }
+        return totalExecuted;
+    }
+
+    List<Runnable> getExecutes() {
+        return mExecutes;
+    }
+
+    List<MockScheduledFuture<?>> getFutures() {
+        return mFutures;
+    }
+
+    void resetTimeElapsedMillis() {
+        mTimeElapsedMillis = 0;
+    }
+
+    /**
+     * Fakes a schedule execution of {@link Runnable}. The command will be executed by an explicit
+     * call to {@link #fastForwardTime(long)}.
+     */
+    @Override
+    public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) {
+        Preconditions.checkState(unit == TimeUnit.MILLISECONDS);
+        MockScheduledFuture<?> future = new MockScheduledFuture<>(command, delay, unit);
+        mFutures.add(future);
+        return future;
+    }
+
+    @Override
+    public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period,
+            TimeUnit unit) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay,
+            long delay, TimeUnit unit) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void shutdown() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public List<Runnable> shutdownNow() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean isShutdown() {
+        return false;
+    }
+
+    @Override
+    public boolean isTerminated() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public <T> Future<T> submit(Callable<T> task) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public <T> Future<T> submit(Runnable task, T result) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Future<?> submit(Runnable command) {
+        mExecutes.add(command);
+        MockScheduledFuture<?> future = new MockScheduledFuture<>(command, 0,
+                TimeUnit.MILLISECONDS);
+        future.getCommand().run();
+        return future;
+    }
+
+    @Override
+    public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
+            throws InterruptedException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout,
+            TimeUnit unit) throws InterruptedException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public <T> T invokeAny(Collection<? extends Callable<T>> tasks)
+            throws ExecutionException, InterruptedException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
+            throws ExecutionException, InterruptedException, TimeoutException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void execute(Runnable command) {
+        mExecutes.add(command);
+        command.run();
+    }
+
+    class MockScheduledFuture<V> implements ScheduledFuture<V> {
+
+        private final Runnable mCommand;
+        private final long mDelay;
+        private boolean mCancelled = false;
+
+        MockScheduledFuture(Runnable command, long delay, TimeUnit timeUnit) {
+            mCommand = command;
+            mDelay = delay;
+        }
+
+        public long getDelay() {
+            return mDelay;
+        }
+
+        public Runnable getCommand() {
+            return mCommand;
+        }
+
+        @Override
+        public long getDelay(TimeUnit unit) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public int compareTo(Delayed o) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public boolean cancel(boolean mayInterruptIfRunning) {
+            mCancelled = true;
+            return mFutures.remove(this);
+        }
+
+        @Override
+        public boolean isCancelled() {
+            return mCancelled;
+        }
+
+        @Override
+        public boolean isDone() {
+            return !mFutures.contains(this);
+        }
+
+        @Override
+        public V get() throws ExecutionException, InterruptedException {
+            return null;
+        }
+
+        @Override
+        public V get(long timeout, TimeUnit unit)
+                throws ExecutionException, InterruptedException, TimeoutException {
+            return null;
+        }
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/people/data/PackageDataTest.java b/services/tests/servicestests/src/com/android/server/people/data/PackageDataTest.java
index ec4789a..e52cdf5 100644
--- a/services/tests/servicestests/src/com/android/server/people/data/PackageDataTest.java
+++ b/services/tests/servicestests/src/com/android/server/people/data/PackageDataTest.java
@@ -20,15 +20,19 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import android.content.Context;
 import android.content.LocusId;
 import android.content.pm.ShortcutInfo;
 import android.net.Uri;
 
+import androidx.test.InstrumentationRegistry;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.io.File;
 import java.util.List;
 
 @RunWith(JUnit4.class)
@@ -52,8 +56,12 @@
 
     @Before
     public void setUp() {
+        Context ctx = InstrumentationRegistry.getContext();
+        File testDir = new File(ctx.getCacheDir(), "testdir");
+        testDir.mkdir();
         mPackageData = new PackageData(
-                PACKAGE_NAME, USER_ID, pkg -> mIsDefaultDialer, pkg -> mIsDefaultSmsApp);
+                PACKAGE_NAME, USER_ID, pkg -> mIsDefaultDialer, pkg -> mIsDefaultSmsApp,
+                new MockScheduledExecutorService(), testDir, new ContactsQueryHelper(ctx));
         ConversationInfo conversationInfo = new ConversationInfo.Builder()
                 .setShortcutId(SHORTCUT_ID)
                 .setLocusId(LOCUS_ID)
@@ -73,8 +81,10 @@
     @Test
     public void testGetEventHistory() {
         EventStore eventStore = mPackageData.getEventStore();
-        eventStore.getOrCreateShortcutEventHistory(SHORTCUT_ID).addEvent(mE1);
-        eventStore.getOrCreateLocusEventHistory(LOCUS_ID).addEvent(mE2);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_SHORTCUT_BASED, SHORTCUT_ID)
+                .addEvent(mE1);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_LOCUS_ID_BASED, LOCUS_ID.getId())
+                .addEvent(mE2);
 
         EventHistory eventHistory = mPackageData.getEventHistory(SHORTCUT_ID);
         List<Event> events = eventHistory.queryEvents(Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
@@ -88,9 +98,10 @@
         mIsDefaultDialer = true;
         mIsDefaultSmsApp = true;
         EventStore eventStore = mPackageData.getEventStore();
-        eventStore.getOrCreateShortcutEventHistory(SHORTCUT_ID).addEvent(mE1);
-        eventStore.getOrCreateCallEventHistory(PHONE_NUMBER).addEvent(mE3);
-        eventStore.getOrCreateSmsEventHistory(PHONE_NUMBER).addEvent(mE4);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_SHORTCUT_BASED, SHORTCUT_ID)
+                .addEvent(mE1);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_CALL, PHONE_NUMBER).addEvent(mE3);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_SMS, PHONE_NUMBER).addEvent(mE4);
 
         assertTrue(mPackageData.isDefaultDialer());
         assertTrue(mPackageData.isDefaultSmsApp());
@@ -105,9 +116,10 @@
     @Test
     public void testGetEventHistoryNotDefaultDialerOrSmsApp() {
         EventStore eventStore = mPackageData.getEventStore();
-        eventStore.getOrCreateShortcutEventHistory(SHORTCUT_ID).addEvent(mE1);
-        eventStore.getOrCreateCallEventHistory(PHONE_NUMBER).addEvent(mE3);
-        eventStore.getOrCreateSmsEventHistory(PHONE_NUMBER).addEvent(mE4);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_SHORTCUT_BASED, SHORTCUT_ID)
+                .addEvent(mE1);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_CALL, PHONE_NUMBER).addEvent(mE3);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_SMS, PHONE_NUMBER).addEvent(mE4);
 
         assertFalse(mPackageData.isDefaultDialer());
         assertFalse(mPackageData.isDefaultSmsApp());
@@ -117,6 +129,61 @@
         assertEventEquals(mE1, events.get(0));
     }
 
+    @Test
+    public void testDeleteConversationData() {
+        mIsDefaultDialer = true;
+        mIsDefaultSmsApp = true;
+        EventStore eventStore = mPackageData.getEventStore();
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_SHORTCUT_BASED, SHORTCUT_ID)
+                .addEvent(mE1);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_LOCUS_ID_BASED, LOCUS_ID.getId())
+                .addEvent(mE2);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_CALL, PHONE_NUMBER).addEvent(mE3);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_SMS, PHONE_NUMBER).addEvent(mE4);
+
+        EventHistory eventHistory = mPackageData.getEventHistory(SHORTCUT_ID);
+        List<Event> events = eventHistory.queryEvents(Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
+        assertEquals(4, events.size());
+
+        mPackageData.deleteDataForConversation(SHORTCUT_ID);
+
+        eventHistory = mPackageData.getEventHistory(SHORTCUT_ID);
+        events = eventHistory.queryEvents(Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
+        assertTrue(events.isEmpty());
+    }
+
+    @Test
+    public void testPruneOrphanEvents() {
+        mIsDefaultDialer = true;
+        mIsDefaultSmsApp = true;
+        EventStore eventStore = mPackageData.getEventStore();
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_SHORTCUT_BASED, SHORTCUT_ID)
+                .addEvent(mE1);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_LOCUS_ID_BASED, LOCUS_ID.getId())
+                .addEvent(mE2);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_CALL, PHONE_NUMBER).addEvent(mE3);
+        eventStore.getOrCreateEventHistory(EventStore.CATEGORY_SMS, PHONE_NUMBER).addEvent(mE4);
+
+        EventHistory eventHistory = mPackageData.getEventHistory(SHORTCUT_ID);
+        List<Event> events = eventHistory.queryEvents(Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
+        assertEquals(4, events.size());
+
+        ConversationInfo conversationInfo = new ConversationInfo.Builder()
+                .setShortcutId(SHORTCUT_ID)
+                .setLocusId(null)
+                .setContactUri(null)
+                .setContactPhoneNumber(null)
+                .setShortcutFlags(ShortcutInfo.FLAG_LONG_LIVED)
+                .build();
+        mPackageData.getConversationStore().addOrUpdate(conversationInfo);
+        mPackageData.pruneOrphanEvents();
+        eventHistory = mPackageData.getEventHistory(SHORTCUT_ID);
+        events = eventHistory.queryEvents(Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
+        assertEquals(1, events.size());
+        // Only the shortcut based event is kept. All the other events are deleted.
+        assertEventEquals(mE1, events.get(0));
+    }
+
     private void assertEventEquals(Event expected, Event actual) {
         assertEquals(expected.getTimestamp(), actual.getTimestamp());
         assertEquals(expected.getType(), actual.getType());
diff --git a/services/tests/servicestests/src/com/android/server/people/data/UsageStatsQueryHelperTest.java b/services/tests/servicestests/src/com/android/server/people/data/UsageStatsQueryHelperTest.java
new file mode 100644
index 0000000..d444466
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/people/data/UsageStatsQueryHelperTest.java
@@ -0,0 +1,294 @@
+/*
+ * 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.people.data;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.UserIdInt;
+import android.app.usage.UsageEvents;
+import android.app.usage.UsageStatsManagerInternal;
+import android.content.Context;
+import android.content.LocusId;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.server.LocalServices;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.function.Predicate;
+
+@RunWith(JUnit4.class)
+public final class UsageStatsQueryHelperTest {
+
+    private static final int USER_ID_PRIMARY = 0;
+    private static final String PKG_NAME = "pkg";
+    private static final String ACTIVITY_NAME = "TestActivity";
+    private static final String SHORTCUT_ID = "abc";
+    private static final LocusId LOCUS_ID_1 = new LocusId("locus_1");
+    private static final LocusId LOCUS_ID_2 = new LocusId("locus_2");
+
+    @Mock private UsageStatsManagerInternal mUsageStatsManagerInternal;
+
+    private TestPackageData mPackageData;
+    private UsageStatsQueryHelper mHelper;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        addLocalServiceMock(UsageStatsManagerInternal.class, mUsageStatsManagerInternal);
+
+        Context ctx = InstrumentationRegistry.getContext();
+        File testDir = new File(ctx.getCacheDir(), "testdir");
+        ScheduledExecutorService scheduledExecutorService = new MockScheduledExecutorService();
+        ContactsQueryHelper helper = new ContactsQueryHelper(ctx);
+
+        mPackageData = new TestPackageData(PKG_NAME, USER_ID_PRIMARY, pkg -> false, pkg -> false,
+                scheduledExecutorService, testDir, helper);
+        mPackageData.mConversationStore.mConversationInfo = new ConversationInfo.Builder()
+                .setShortcutId(SHORTCUT_ID)
+                .setLocusId(LOCUS_ID_1)
+                .build();
+
+        mHelper = new UsageStatsQueryHelper(USER_ID_PRIMARY, pkg -> mPackageData);
+    }
+
+    @After
+    public void tearDown() {
+        LocalServices.removeServiceForTest(UsageStatsManagerInternal.class);
+    }
+
+    @Test
+    public void testQueryNoEvents() {
+        assertFalse(mHelper.querySince(50L));
+    }
+
+    @Test
+    public void testQueryShortcutInvocationEvent() {
+        addUsageEvents(createShortcutInvocationEvent(100L));
+
+        assertTrue(mHelper.querySince(50L));
+        assertEquals(100L, mHelper.getLastEventTimestamp());
+        Event expectedEvent = new Event(100L, Event.TYPE_SHORTCUT_INVOCATION);
+        List<Event> events = mPackageData.mEventStore.mShortcutEventHistory.queryEvents(
+                Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
+        assertEquals(1, events.size());
+        assertEquals(expectedEvent, events.get(0));
+    }
+
+    @Test
+    public void testInAppConversationSwitch() {
+        addUsageEvents(
+                createLocusIdSetEvent(100_000L, LOCUS_ID_1.getId()),
+                createLocusIdSetEvent(110_000L, LOCUS_ID_2.getId()));
+
+        assertTrue(mHelper.querySince(50_000L));
+        assertEquals(110_000L, mHelper.getLastEventTimestamp());
+        List<Event> events = mPackageData.mEventStore.mLocusEventHistory.queryEvents(
+                Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
+        assertEquals(1, events.size());
+        assertEquals(createInAppConversationEvent(100_000L, 10), events.get(0));
+    }
+
+    @Test
+    public void testInAppConversationExplicitlyEnd() {
+        addUsageEvents(
+                createLocusIdSetEvent(100_000L, LOCUS_ID_1.getId()),
+                createLocusIdSetEvent(110_000L, null));
+
+        assertTrue(mHelper.querySince(50_000L));
+        assertEquals(110_000L, mHelper.getLastEventTimestamp());
+        List<Event> events = mPackageData.mEventStore.mLocusEventHistory.queryEvents(
+                Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
+        assertEquals(1, events.size());
+        assertEquals(createInAppConversationEvent(100_000L, 10), events.get(0));
+    }
+
+    @Test
+    public void testInAppConversationImplicitlyEnd() {
+        addUsageEvents(
+                createLocusIdSetEvent(100_000L, LOCUS_ID_1.getId()),
+                createActivityStoppedEvent(110_000L));
+
+        assertTrue(mHelper.querySince(50_000L));
+        assertEquals(110_000L, mHelper.getLastEventTimestamp());
+        List<Event> events = mPackageData.mEventStore.mLocusEventHistory.queryEvents(
+                Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
+        assertEquals(1, events.size());
+        assertEquals(createInAppConversationEvent(100_000L, 10), events.get(0));
+    }
+
+    @Test
+    public void testMultipleInAppConversations() {
+        addUsageEvents(
+                createLocusIdSetEvent(100_000L, LOCUS_ID_1.getId()),
+                createLocusIdSetEvent(110_000L, LOCUS_ID_2.getId()),
+                createLocusIdSetEvent(130_000L, LOCUS_ID_1.getId()),
+                createActivityStoppedEvent(160_000L));
+
+        assertTrue(mHelper.querySince(50_000L));
+        assertEquals(160_000L, mHelper.getLastEventTimestamp());
+        List<Event> events = mPackageData.mEventStore.mLocusEventHistory.queryEvents(
+                Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
+        assertEquals(3, events.size());
+        assertEquals(createInAppConversationEvent(100_000L, 10), events.get(0));
+        assertEquals(createInAppConversationEvent(110_000L, 20), events.get(1));
+        assertEquals(createInAppConversationEvent(130_000L, 30), events.get(2));
+    }
+
+    private void addUsageEvents(UsageEvents.Event... events) {
+        UsageEvents usageEvents = new UsageEvents(Arrays.asList(events), new String[]{});
+        when(mUsageStatsManagerInternal.queryEventsForUser(anyInt(), anyLong(), anyLong(),
+                eq(UsageEvents.SHOW_ALL_EVENT_DATA))).thenReturn(usageEvents);
+    }
+
+    private static <T> void addLocalServiceMock(Class<T> clazz, T mock) {
+        LocalServices.removeServiceForTest(clazz);
+        LocalServices.addService(clazz, mock);
+    }
+
+    private static UsageEvents.Event createShortcutInvocationEvent(long timestamp) {
+        UsageEvents.Event e = createUsageEvent(UsageEvents.Event.SHORTCUT_INVOCATION, timestamp);
+        e.mShortcutId = SHORTCUT_ID;
+        return e;
+    }
+
+    private static UsageEvents.Event createLocusIdSetEvent(long timestamp, String locusId) {
+        UsageEvents.Event e = createUsageEvent(UsageEvents.Event.LOCUS_ID_SET, timestamp);
+        e.mClass = ACTIVITY_NAME;
+        e.mLocusId = locusId;
+        return e;
+    }
+
+    private static UsageEvents.Event createActivityStoppedEvent(long timestamp) {
+        UsageEvents.Event e = createUsageEvent(UsageEvents.Event.ACTIVITY_STOPPED, timestamp);
+        e.mClass = ACTIVITY_NAME;
+        return e;
+    }
+
+    private static UsageEvents.Event createUsageEvent(int eventType, long timestamp) {
+        UsageEvents.Event e = new UsageEvents.Event(eventType, timestamp);
+        e.mPackage = PKG_NAME;
+        return e;
+    }
+
+    private static Event createInAppConversationEvent(long timestamp, int durationSeconds) {
+        return new Event.Builder(timestamp, Event.TYPE_IN_APP_CONVERSATION)
+                .setDurationSeconds(durationSeconds)
+                .build();
+    }
+
+    private static class TestConversationStore extends ConversationStore {
+
+        private ConversationInfo mConversationInfo;
+
+        TestConversationStore(File packageDir,
+                ScheduledExecutorService scheduledExecutorService,
+                ContactsQueryHelper helper) {
+            super(packageDir, scheduledExecutorService, helper);
+        }
+
+        @Override
+        @Nullable
+        ConversationInfo getConversation(@Nullable String shortcutId) {
+            return mConversationInfo;
+        }
+    }
+
+    private static class TestPackageData extends PackageData {
+
+        private final TestConversationStore mConversationStore;
+        private final TestEventStore mEventStore = new TestEventStore();
+
+        TestPackageData(@NonNull String packageName, @UserIdInt int userId,
+                @NonNull Predicate<String> isDefaultDialerPredicate,
+                @NonNull Predicate<String> isDefaultSmsAppPredicate,
+                @NonNull ScheduledExecutorService scheduledExecutorService, @NonNull File rootDir,
+                @NonNull ContactsQueryHelper helper) {
+            super(packageName, userId, isDefaultDialerPredicate, isDefaultSmsAppPredicate,
+                    scheduledExecutorService, rootDir, helper);
+            mConversationStore = new TestConversationStore(rootDir, scheduledExecutorService,
+                    helper);
+        }
+
+        @Override
+        @NonNull
+        ConversationStore getConversationStore() {
+            return mConversationStore;
+        }
+
+        @Override
+        @NonNull
+        EventStore getEventStore() {
+            return mEventStore;
+        }
+    }
+
+    private static class TestEventStore extends EventStore {
+
+        private final EventHistoryImpl mShortcutEventHistory = new TestEventHistoryImpl();
+        private final EventHistoryImpl mLocusEventHistory = new TestEventHistoryImpl();
+
+        @Override
+        @NonNull
+        EventHistoryImpl getOrCreateEventHistory(@EventCategory int category, String key) {
+            if (category == EventStore.CATEGORY_SHORTCUT_BASED) {
+                return mShortcutEventHistory;
+            } else if (category == EventStore.CATEGORY_LOCUS_ID_BASED) {
+                return mLocusEventHistory;
+            }
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    private static class TestEventHistoryImpl extends EventHistoryImpl {
+
+        private final List<Event> mEvents = new ArrayList<>();
+
+        @Override
+        @NonNull
+        public List<Event> queryEvents(Set<Integer> eventTypes, long startTime, long endTime) {
+            return mEvents;
+        }
+
+        @Override
+        void addEvent(Event event) {
+            mEvents.add(event);
+        }
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/people/prediction/ShareTargetPredictorTest.java b/services/tests/servicestests/src/com/android/server/people/prediction/ShareTargetPredictorTest.java
index 808906e..f498a94 100644
--- a/services/tests/servicestests/src/com/android/server/people/prediction/ShareTargetPredictorTest.java
+++ b/services/tests/servicestests/src/com/android/server/people/prediction/ShareTargetPredictorTest.java
@@ -20,6 +20,7 @@
 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.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -73,7 +74,7 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
-        when(mDataManager.getShareShortcuts(any())).thenReturn(mShareShortcuts);
+        when(mDataManager.getShareShortcuts(any(), anyInt())).thenReturn(mShareShortcuts);
         when(mDataManager.getPackage(PACKAGE_1, USER_ID)).thenReturn(mPackageData1);
         when(mDataManager.getPackage(PACKAGE_2, USER_ID)).thenReturn(mPackageData2);
 
@@ -82,7 +83,8 @@
                 .setPredictedTargetCount(NUM_PREDICTED_TARGETS)
                 .setExtras(new Bundle())
                 .build();
-        mPredictor = new ShareTargetPredictor(predictionContext, targets -> { }, mDataManager);
+        mPredictor = new ShareTargetPredictor(
+                predictionContext, targets -> { }, mDataManager, USER_ID);
     }
 
     @Test
diff --git a/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java b/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java
index 3e3f40d..5d5c714 100644
--- a/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java
@@ -29,21 +29,22 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageParser;
 import android.content.pm.Signature;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ComponentParseUtils;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivity;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivityIntentInfo;
-import android.content.pm.parsing.PackageImpl;
 import android.content.pm.parsing.ParsingPackage;
-import android.net.Uri;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedIntentInfo;
+import android.content.pm.parsing.component.ParsedProvider;
 import android.os.Build;
 import android.os.Process;
+import android.platform.test.annotations.Presubmit;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 
 import androidx.annotation.NonNull;
 
 import com.android.server.om.OverlayReferenceMapper;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -58,6 +59,7 @@
 import java.util.Map;
 import java.util.Set;
 
+@Presubmit
 @RunWith(JUnit4.class)
 public class AppsFilterTest {
 
@@ -73,7 +75,7 @@
     private ArrayMap<String, PackageSetting> mExisting = new ArrayMap<>();
 
     private static ParsingPackage pkg(String packageName) {
-        return PackageImpl.forParsing(packageName)
+        return PackageImpl.forTesting(packageName)
                 .setTargetSdkVersion(Build.VERSION_CODES.R);
     }
 
@@ -87,6 +89,17 @@
         return pkg;
     }
 
+    private static ParsingPackage pkgQueriesProvider(String packageName,
+            String... queriesAuthorities) {
+        ParsingPackage pkg = pkg(packageName);
+        if (queriesAuthorities != null) {
+            for (String authority : queriesAuthorities) {
+                pkg.addQueriesProvider(authority);
+            }
+        }
+        return pkg;
+    }
+
     private static ParsingPackage pkg(String packageName, String... queriesPackages) {
         ParsingPackage pkg = pkg(packageName);
         if (queriesPackages != null) {
@@ -101,7 +114,7 @@
         ParsedActivity activity = new ParsedActivity();
         activity.setPackageName(packageName);
         for (IntentFilter filter : filters) {
-            final ParsedActivityIntentInfo info = new ParsedActivityIntentInfo(packageName, null);
+            final ParsedIntentInfo info = new ParsedIntentInfo();
             if (filter.countActions() > 0) {
                 filter.actionsIterator().forEachRemaining(info::addAction);
             }
@@ -115,7 +128,7 @@
                 filter.schemesIterator().forEachRemaining(info::addDataScheme);
             }
             activity.addIntent(info);
-            activity.exported = true;
+            activity.setExported(true);
         }
 
         return pkg(packageName)
@@ -123,7 +136,7 @@
     }
 
     private static ParsingPackage pkgWithProvider(String packageName, String authority) {
-        ComponentParseUtils.ParsedProvider provider = new ComponentParseUtils.ParsedProvider();
+        ParsedProvider provider = new ParsedProvider();
         provider.setPackageName(packageName);
         provider.setExported(true);
         provider.setAuthority(authority);
@@ -172,8 +185,7 @@
         PackageSetting target = simulateAddPackage(appsFilter,
                 pkgWithProvider("com.some.package", "com.some.authority"), DUMMY_TARGET_UID);
         PackageSetting calling = simulateAddPackage(appsFilter,
-                pkg("com.some.other.package",
-                        new Intent().setData(Uri.parse("content://com.some.authority"))),
+                pkgQueriesProvider("com.some.other.package", "com.some.authority"),
                 DUMMY_CALLING_UID);
 
         assertFalse(appsFilter.shouldFilterApplication(DUMMY_CALLING_UID, calling, target, 0));
@@ -188,8 +200,7 @@
         PackageSetting target = simulateAddPackage(appsFilter,
                 pkgWithProvider("com.some.package", "com.some.authority"), DUMMY_TARGET_UID);
         PackageSetting calling = simulateAddPackage(appsFilter,
-                pkg("com.some.other.package",
-                        new Intent().setData(Uri.parse("content://com.some.other.authority"))),
+                pkgQueriesProvider("com.some.other.package", "com.some.other.authority"),
                 DUMMY_CALLING_UID);
 
         assertTrue(appsFilter.shouldFilterApplication(DUMMY_CALLING_UID, calling, target, 0));
@@ -205,8 +216,7 @@
                 pkgWithProvider("com.some.package", "com.some.authority;com.some.other.authority"),
                 DUMMY_TARGET_UID);
         PackageSetting calling = simulateAddPackage(appsFilter,
-                pkg("com.some.other.package",
-                        new Intent().setData(Uri.parse("content://com.some.authority"))),
+                pkgQueriesProvider("com.some.other.package", "com.some.authority"),
                 DUMMY_CALLING_UID);
 
         assertFalse(appsFilter.shouldFilterApplication(DUMMY_CALLING_UID, calling, target, 0));
@@ -266,7 +276,7 @@
         appsFilter.onSystemReady();
 
         PackageSetting target = simulateAddPackage(appsFilter,
-                        pkg("com.some.package").setForceQueryable(true), DUMMY_TARGET_UID);
+                pkg("com.some.package").setForceQueryable(true), DUMMY_TARGET_UID);
         PackageSetting calling = simulateAddPackage(appsFilter,
                 pkg("com.some.other.package"), DUMMY_CALLING_UID);
 
@@ -307,7 +317,8 @@
                 b -> b.setSigningDetails(frameworkSigningDetails));
         PackageSetting target = simulateAddPackage(appsFilter, pkg("com.some.package"),
                 DUMMY_TARGET_UID,
-                b -> b.setSigningDetails(frameworkSigningDetails));
+                b -> b.setSigningDetails(frameworkSigningDetails)
+                        .setPkgFlags(ApplicationInfo.FLAG_SYSTEM));
         PackageSetting calling = simulateAddPackage(appsFilter,
                 pkg("com.some.other.package"), DUMMY_CALLING_UID,
                 b -> b.setSigningDetails(otherSigningDetails));
@@ -427,7 +438,7 @@
         ParsingPackage target = pkg("com.some.package.target")
                 .addOverlayable("overlayableName", actorName);
         ParsingPackage overlay = pkg("com.some.package.overlay")
-                .setIsOverlay(true)
+                .setOverlay(true)
                 .setOverlayTarget(target.getPackageName())
                 .setOverlayTargetName("overlayableName");
         ParsingPackage actor = pkg("com.some.package.actor");
@@ -489,7 +500,7 @@
         ParsingPackage target = pkg("com.some.package.target")
                 .addOverlayable("overlayableName", actorName);
         ParsingPackage overlay = pkg("com.some.package.overlay")
-                .setIsOverlay(true)
+                .setOverlay(true)
                 .setOverlayTarget(target.getPackageName())
                 .setOverlayTargetName("overlayableName");
         ParsingPackage actorOne = pkg("com.some.package.actor.one");
@@ -608,7 +619,7 @@
 
     private PackageSetting simulateAddPackage(AppsFilter filter,
             ParsingPackage newPkgBuilder, int appId, @Nullable WithSettingBuilder action) {
-        AndroidPackage newPkg = newPkgBuilder.hideAsParsed().hideAsFinal();
+        AndroidPackage newPkg = ((ParsedPackage) newPkgBuilder.hideAsParsed()).hideAsFinal();
 
         final PackageSettingBuilder settingBuilder = new PackageSettingBuilder()
                 .setPackage(newPkg)
diff --git a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
index 3d190be..6c769485 100644
--- a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
@@ -24,6 +24,7 @@
 import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.set;
 
 import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.anyString;
@@ -556,6 +557,16 @@
         void injectRestoreCallingIdentity(long token) {
             mInjectedCallingUid = (int) token;
         }
+
+        @Override
+        boolean injectHasAccessShortcutsPermission(int callingPid, int callingUid) {
+            return true;
+        }
+
+        @Override
+        boolean injectHasInteractAcrossUsersFullPermission(int callingPid, int callingUid) {
+            return false;
+        }
     }
 
     protected class LauncherAppsTestable extends LauncherApps {
@@ -1617,6 +1628,22 @@
     }
 
     /**
+     * Make a long lived shortcut with an ID.
+     */
+    protected ShortcutInfo makeLongLivedShortcut(String id) {
+        final ShortcutInfo.Builder  b = new ShortcutInfo.Builder(mClientContext, id)
+                .setActivity(new ComponentName(mClientContext.getPackageName(), "main"))
+                .setShortLabel("title-" + id)
+                .setIntent(makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class))
+                .setLongLived(true);
+        final ShortcutInfo s = b.build();
+
+        s.setTimestamp(mInjectedCurrentTimeMillis); // HACK
+
+        return s;
+    }
+
+    /**
      * Make an intent.
      */
     protected Intent makeIntent(String action, Class<?> clazz, Object... bundleKeysAndValues) {
@@ -1707,6 +1734,7 @@
         final ArgumentCaptor<Intent[]> intentsCaptor = ArgumentCaptor.forClass(Intent[].class);
         verify(mMockActivityTaskManagerInternal).startActivitiesAsPackage(
                 eq(packageName),
+                isNull(),
                 eq(userId),
                 intentsCaptor.capture(),
                 anyOrNull(Bundle.class));
@@ -1765,6 +1793,7 @@
         // This shouldn't have been called.
         verify(mMockActivityTaskManagerInternal, times(0)).startActivitiesAsPackage(
                 anyString(),
+                isNull(),
                 anyInt(),
                 any(Intent[].class),
                 anyOrNull(Bundle.class));
diff --git a/services/tests/servicestests/src/com/android/server/pm/CrossProfileAppsServiceImplTest.java b/services/tests/servicestests/src/com/android/server/pm/CrossProfileAppsServiceImplTest.java
index 91cc9f3..e79b5af 100644
--- a/services/tests/servicestests/src/com/android/server/pm/CrossProfileAppsServiceImplTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/CrossProfileAppsServiceImplTest.java
@@ -23,6 +23,7 @@
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
+import android.content.pm.CrossProfileAppsInternal;
 import android.content.pm.IPackageManager;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
@@ -30,11 +31,15 @@
 import android.content.pm.PermissionInfo;
 import android.content.pm.ResolveInfo;
 import android.os.Bundle;
+import android.os.IBinder;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.platform.test.annotations.Presubmit;
 import android.util.SparseArray;
 
+import com.android.internal.util.FunctionalUtils.ThrowingRunnable;
+import com.android.internal.util.FunctionalUtils.ThrowingSupplier;
+import com.android.server.LocalServices;
 import com.android.server.wm.ActivityTaskManagerInternal;
 
 import org.junit.Before;
@@ -55,6 +60,7 @@
 @RunWith(MockitoJUnitRunner.class)
 public class CrossProfileAppsServiceImplTest {
     private static final String PACKAGE_ONE = "com.one";
+    private static final String FEATURE_ID = "feature.one";
     private static final int PACKAGE_ONE_UID = 1111;
     private static final ComponentName ACTIVITY_COMPONENT =
             new ComponentName("com.one", "test");
@@ -95,6 +101,7 @@
     @Before
     public void initCrossProfileAppsServiceImpl() {
         mTestInjector = new TestInjector();
+        LocalServices.removeServiceForTest(CrossProfileAppsInternal.class);
         mCrossProfileAppsServiceImpl = new CrossProfileAppsServiceImpl(mContext, mTestInjector);
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
     }
@@ -220,6 +227,7 @@
                         mCrossProfileAppsServiceImpl.startActivityAsUser(
                                 mIApplicationThread,
                                 PACKAGE_ONE,
+                                FEATURE_ID,
                                 ACTIVITY_COMPONENT,
                                 UserHandle.of(PRIMARY_USER).getIdentifier(),
                                 true));
@@ -228,7 +236,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         anyString(),
+                        nullable(String.class),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         anyInt());
     }
@@ -241,6 +252,7 @@
                         mCrossProfileAppsServiceImpl.startActivityAsUser(
                                 mIApplicationThread,
                                 PACKAGE_ONE,
+                                FEATURE_ID,
                                 ACTIVITY_COMPONENT,
                                 UserHandle.of(PRIMARY_USER).getIdentifier(),
                                 false));
@@ -249,7 +261,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         anyString(),
+                        nullable(String.class),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         anyInt());
     }
@@ -264,6 +279,7 @@
                         mCrossProfileAppsServiceImpl.startActivityAsUser(
                                 mIApplicationThread,
                                 PACKAGE_ONE,
+                                FEATURE_ID,
                                 ACTIVITY_COMPONENT,
                                 UserHandle.of(PROFILE_OF_PRIMARY_USER).getIdentifier(),
                                 true));
@@ -272,7 +288,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         anyString(),
+                        nullable(String.class),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         anyInt());
     }
@@ -287,6 +306,7 @@
                         mCrossProfileAppsServiceImpl.startActivityAsUser(
                                 mIApplicationThread,
                                 PACKAGE_ONE,
+                                FEATURE_ID,
                                 ACTIVITY_COMPONENT,
                                 UserHandle.of(PROFILE_OF_PRIMARY_USER).getIdentifier(),
                                 false));
@@ -295,7 +315,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         anyString(),
+                        nullable(String.class),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         anyInt());
     }
@@ -308,6 +331,7 @@
                         mCrossProfileAppsServiceImpl.startActivityAsUser(
                                 mIApplicationThread,
                                 PACKAGE_TWO,
+                                FEATURE_ID,
                                 ACTIVITY_COMPONENT,
                                 UserHandle.of(PROFILE_OF_PRIMARY_USER).getIdentifier(),
                                 true));
@@ -316,7 +340,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         anyString(),
+                        nullable(String.class),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         anyInt());
     }
@@ -329,6 +356,7 @@
                         mCrossProfileAppsServiceImpl.startActivityAsUser(
                                 mIApplicationThread,
                                 PACKAGE_TWO,
+                                FEATURE_ID,
                                 ACTIVITY_COMPONENT,
                                 UserHandle.of(PROFILE_OF_PRIMARY_USER).getIdentifier(),
                                 false));
@@ -337,7 +365,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         anyString(),
+                        nullable(String.class),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         anyInt());
     }
@@ -352,6 +383,7 @@
                         mCrossProfileAppsServiceImpl.startActivityAsUser(
                                 mIApplicationThread,
                                 PACKAGE_ONE,
+                                FEATURE_ID,
                                 ACTIVITY_COMPONENT,
                                 UserHandle.of(PROFILE_OF_PRIMARY_USER).getIdentifier(),
                                 true));
@@ -360,7 +392,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         anyString(),
+                        nullable(String.class),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         anyInt());
     }
@@ -380,6 +415,7 @@
                         mCrossProfileAppsServiceImpl.startActivityAsUser(
                                 mIApplicationThread,
                                 PACKAGE_ONE,
+                                FEATURE_ID,
                                 ACTIVITY_COMPONENT,
                                 UserHandle.of(PROFILE_OF_PRIMARY_USER).getIdentifier(),
                                 false));
@@ -388,7 +424,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         anyString(),
+                        nullable(String.class),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         anyInt());
     }
@@ -401,6 +440,7 @@
                         mCrossProfileAppsServiceImpl.startActivityAsUser(
                                 mIApplicationThread,
                                 PACKAGE_ONE,
+                                FEATURE_ID,
                                 new ComponentName(PACKAGE_TWO, "test"),
                                 UserHandle.of(PROFILE_OF_PRIMARY_USER).getIdentifier(),
                                 true));
@@ -409,7 +449,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         anyString(),
+                        nullable(String.class),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         anyInt());
     }
@@ -422,6 +465,7 @@
                         mCrossProfileAppsServiceImpl.startActivityAsUser(
                                 mIApplicationThread,
                                 PACKAGE_ONE,
+                                FEATURE_ID,
                                 new ComponentName(PACKAGE_TWO, "test"),
                                 UserHandle.of(PROFILE_OF_PRIMARY_USER).getIdentifier(),
                                 false));
@@ -430,7 +474,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         anyString(),
+                        nullable(String.class),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         anyInt());
     }
@@ -443,6 +490,7 @@
                         mCrossProfileAppsServiceImpl.startActivityAsUser(
                                 mIApplicationThread,
                                 PACKAGE_ONE,
+                                FEATURE_ID,
                                 ACTIVITY_COMPONENT,
                                 UserHandle.of(SECONDARY_USER).getIdentifier(),
                                 true));
@@ -451,7 +499,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         anyString(),
+                        nullable(String.class),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         anyInt());
     }
@@ -464,6 +515,7 @@
                         mCrossProfileAppsServiceImpl.startActivityAsUser(
                                 mIApplicationThread,
                                 PACKAGE_ONE,
+                                FEATURE_ID,
                                 ACTIVITY_COMPONENT,
                                 UserHandle.of(SECONDARY_USER).getIdentifier(),
                                 false));
@@ -472,7 +524,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         anyString(),
+                        nullable(String.class),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         anyInt());
     }
@@ -484,6 +539,7 @@
         mCrossProfileAppsServiceImpl.startActivityAsUser(
                 mIApplicationThread,
                 PACKAGE_ONE,
+                FEATURE_ID,
                 ACTIVITY_COMPONENT,
                 UserHandle.of(PRIMARY_USER).getIdentifier(),
                 true);
@@ -492,7 +548,10 @@
                 .startActivityAsUser(
                         nullable(IApplicationThread.class),
                         eq(PACKAGE_ONE),
+                        eq(FEATURE_ID),
                         any(Intent.class),
+                        nullable(IBinder.class),
+                        anyInt(),
                         nullable(Bundle.class),
                         eq(PRIMARY_USER));
     }
@@ -574,6 +633,16 @@
         }
 
         @Override
+        public void withCleanCallingIdentity(ThrowingRunnable action) {
+            action.run();
+        }
+
+        @Override
+        public <T> T withCleanCallingIdentity(ThrowingSupplier<T> action) {
+            return action.get();
+        }
+
+        @Override
         public UserManager getUserManager() {
             return mUserManager;
         }
diff --git a/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java
index 0273a1c..164bd72 100644
--- a/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java
@@ -40,7 +40,7 @@
         return new PackageSetting(name, name, new File(mContext.getCacheDir(), "fakeCodePath"),
                 new File(mContext.getCacheDir(), "fakeResPath"), "", "", "",
                 "", 1, 0, 0, 0 /*sharedUserId*/, null /*usesStaticLibraries*/,
-                null /*usesStaticLibrariesVersions*/);
+                null /*usesStaticLibrariesVersions*/, null /*mimeGroups*/);
     }
 
     @Override
diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java
index 85840e1..9cf6702 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java
@@ -88,7 +88,7 @@
                 new File("resourcePath"), "legacyNativeLibraryPathString",
                 "primaryCpuAbiString", "secondaryCpuAbiString",
                 "cpuAbiOverrideString", 0, 0, 0, 0,
-                null, null);
+                null, null, null);
         pri.populateUsers(new int[] {
                 1, 2, 3, 4, 5
         }, setting);
@@ -118,15 +118,15 @@
         String[] partitions = { "system", "vendor", "odm", "oem", "product", "system_ext" };
         String[] appdir = { "app", "priv-app" };
         for (int i = 0; i < partitions.length; i++) {
-            final PackageManagerService.SystemPartition systemPartition =
+            final PackageManagerService.ScanPartition scanPartition =
                     PackageManagerService.SYSTEM_PARTITIONS.get(i);
             for (int j = 0; j < appdir.length; j++) {
                 String canonical = new File("/" + partitions[i]).getCanonicalPath();
                 String path = String.format("%s/%s/A.apk", canonical, appdir[j]);
 
-                Assert.assertEquals(j == 1 && i != 3, systemPartition.containsPrivPath(path));
+                Assert.assertEquals(j == 1 && i != 3, scanPartition.containsPrivPath(path));
 
-                final int scanFlag = systemPartition.scanFlag;
+                final int scanFlag = scanPartition.scanFlag;
                 Assert.assertEquals(i == 1, scanFlag == PackageManagerService.SCAN_AS_VENDOR);
                 Assert.assertEquals(i == 2, scanFlag == PackageManagerService.SCAN_AS_ODM);
                 Assert.assertEquals(i == 3, scanFlag == PackageManagerService.SCAN_AS_OEM);
diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
index cf51fa3..acfe71a 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
@@ -431,7 +431,8 @@
                 ApplicationInfo.PRIVATE_FLAG_PRIVILEGED|ApplicationInfo.PRIVATE_FLAG_HIDDEN,
                 0,
                 null /*usesStaticLibraries*/,
-                null /*usesStaticLibrariesVersions*/);
+                null /*usesStaticLibrariesVersions*/,
+                null /*mimeGroups*/);
         final PackageSetting testPkgSetting01 = new PackageSetting(origPkgSetting01);
         verifySettingCopy(origPkgSetting01, testPkgSetting01);
     }
@@ -452,7 +453,8 @@
                 ApplicationInfo.PRIVATE_FLAG_PRIVILEGED|ApplicationInfo.PRIVATE_FLAG_HIDDEN,
                 0,
                 null /*usesStaticLibraries*/,
-                null /*usesStaticLibrariesVersions*/);
+                null /*usesStaticLibrariesVersions*/,
+                null /*mimeGroups*/);
         final PackageSetting testPkgSetting01 = new PackageSetting(
                 PACKAGE_NAME /*pkgName*/,
                 REAL_PACKAGE_NAME /*realPkgName*/,
@@ -467,7 +469,8 @@
                 0 /*pkgPrivateFlags*/,
                 0,
                 null /*usesStaticLibraries*/,
-                null /*usesStaticLibrariesVersions*/);
+                null /*usesStaticLibrariesVersions*/,
+                null /*mimeGroups*/);
         testPkgSetting01.copyFrom(origPkgSetting01);
         verifySettingCopy(origPkgSetting01, testPkgSetting01);
     }
@@ -494,7 +497,8 @@
                 0 /*pkgPrivateFlags*/,
                 UserManagerService.getInstance(),
                 null /*usesStaticLibraries*/,
-                null /*usesStaticLibrariesVersions*/);
+                null /*usesStaticLibrariesVersions*/,
+                null /*mimeGroups*/);
         assertThat(testPkgSetting01.primaryCpuAbiString, is("arm64-v8a"));
         assertThat(testPkgSetting01.secondaryCpuAbiString, is("armeabi"));
         assertThat(testPkgSetting01.pkgFlags, is(0));
@@ -527,7 +531,8 @@
                 ApplicationInfo.PRIVATE_FLAG_PRIVILEGED /*pkgPrivateFlags*/,
                 UserManagerService.getInstance(),
                 null /*usesStaticLibraries*/,
-                null /*usesStaticLibrariesVersions*/);
+                null /*usesStaticLibrariesVersions*/,
+                null /*mimeGroups*/);
         assertThat(testPkgSetting01.primaryCpuAbiString, is("arm64-v8a"));
         assertThat(testPkgSetting01.secondaryCpuAbiString, is("armeabi"));
         assertThat(testPkgSetting01.pkgFlags, is(ApplicationInfo.FLAG_SYSTEM));
@@ -566,7 +571,8 @@
                     0 /*pkgPrivateFlags*/,
                     UserManagerService.getInstance(),
                     null /*usesStaticLibraries*/,
-                    null /*usesStaticLibrariesVersions*/);
+                    null /*usesStaticLibrariesVersions*/,
+                    null /*mimeGroups*/);
             fail("Expected a PackageManagerException");
         } catch (PackageManagerException expected) {
         }
@@ -598,7 +604,8 @@
                 false /*virtualPreload*/,
                 UserManagerService.getInstance(),
                 null /*usesStaticLibraries*/,
-                null /*usesStaticLibrariesVersions*/);
+                null /*usesStaticLibrariesVersions*/,
+                null /*mimeGroups*/);
         assertThat(testPkgSetting01.codePath, is(UPDATED_CODE_PATH));
         assertThat(testPkgSetting01.name, is(PACKAGE_NAME));
         assertThat(testPkgSetting01.pkgFlags, is(ApplicationInfo.FLAG_SYSTEM));
@@ -637,7 +644,8 @@
                 false /*virtualPreload*/,
                 UserManagerService.getInstance(),
                 null /*usesStaticLibraries*/,
-                null /*usesStaticLibrariesVersions*/);
+                null /*usesStaticLibrariesVersions*/,
+                null /*mimeGroups*/);
         assertThat(testPkgSetting01.appId, is(0));
         assertThat(testPkgSetting01.codePath, is(INITIAL_CODE_PATH));
         assertThat(testPkgSetting01.name, is(PACKAGE_NAME));
@@ -682,7 +690,8 @@
                 false /*virtualPreload*/,
                 UserManagerService.getInstance(),
                 null /*usesStaticLibraries*/,
-                null /*usesStaticLibrariesVersions*/);
+                null /*usesStaticLibrariesVersions*/,
+                null /*mimeGroups*/);
         assertThat(testPkgSetting01.appId, is(10064));
         assertThat(testPkgSetting01.codePath, is(INITIAL_CODE_PATH));
         assertThat(testPkgSetting01.name, is(PACKAGE_NAME));
@@ -724,7 +733,8 @@
                 false /*virtualPreload*/,
                 UserManagerService.getInstance(),
                 null /*usesStaticLibraries*/,
-                null /*usesStaticLibrariesVersions*/);
+                null /*usesStaticLibrariesVersions*/,
+                null /*mimeGroups*/);
         assertThat(testPkgSetting01.appId, is(10064));
         assertThat(testPkgSetting01.codePath, is(UPDATED_CODE_PATH));
         assertThat(testPkgSetting01.name, is(PACKAGE_NAME));
@@ -795,6 +805,8 @@
                 testPkgSetting.legacyNativeLibraryPathString);
         assertThat(origPkgSetting.legacyNativeLibraryPathString,
                 is(testPkgSetting.legacyNativeLibraryPathString));
+        assertNotSame(origPkgSetting.mimeGroups, testPkgSetting.mimeGroups);
+        assertThat(origPkgSetting.mimeGroups, is(testPkgSetting.mimeGroups));
         assertNotSame(origPkgSetting.mPermissionsState, testPkgSetting.mPermissionsState);
         assertThat(origPkgSetting.mPermissionsState, is(testPkgSetting.mPermissionsState));
         assertThat(origPkgSetting.name, is(testPkgSetting.name));
@@ -854,7 +866,8 @@
                 0 /*privateFlags*/,
                 sharedUserId,
                 null /*usesStaticLibraries*/,
-                null /*usesStaticLibrariesVersions*/);
+                null /*usesStaticLibrariesVersions*/,
+                null /*mimeGroups*/);
     }
 
     private PackageSetting createPackageSetting(String packageName) {
@@ -872,7 +885,8 @@
                 0 /*privateFlags*/,
                 0,
                 null /*usesStaticLibraries*/,
-                null /*usesStaticLibrariesVersions*/);
+                null /*usesStaticLibrariesVersions*/,
+                null /*mimeGroups*/);
     }
 
     private @NonNull List<UserInfo> createFakeUsers() {
diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java
index 56ac7c5..d2ec500 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java
@@ -21,6 +21,7 @@
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
+import android.annotation.NonNull;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.ConfigurationInfo;
@@ -31,32 +32,34 @@
 import android.content.pm.PackageUserState;
 import android.content.pm.ProviderInfo;
 import android.content.pm.ServiceInfo;
-import android.content.pm.SharedLibraryInfo;
 import android.content.pm.Signature;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ComponentParseUtils;
-import android.content.pm.parsing.ComponentParseUtils.ParsedActivity;
-import android.content.pm.parsing.ComponentParseUtils.ParsedComponent;
-import android.content.pm.parsing.ComponentParseUtils.ParsedInstrumentation;
-import android.content.pm.parsing.ComponentParseUtils.ParsedIntentInfo;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermission;
-import android.content.pm.parsing.ComponentParseUtils.ParsedPermissionGroup;
-import android.content.pm.parsing.ComponentParseUtils.ParsedProvider;
-import android.content.pm.parsing.ComponentParseUtils.ParsedService;
-import android.content.pm.parsing.PackageImpl;
-import android.content.pm.parsing.PackageInfoUtils;
-import android.content.pm.parsing.ParsedPackage;
 import android.content.pm.parsing.ParsingPackage;
+import android.content.pm.parsing.component.ParsedActivity;
+import android.content.pm.parsing.component.ParsedComponent;
+import android.content.pm.parsing.component.ParsedInstrumentation;
+import android.content.pm.parsing.component.ParsedIntentInfo;
+import android.content.pm.parsing.component.ParsedPermission;
+import android.content.pm.parsing.component.ParsedPermissionGroup;
+import android.content.pm.parsing.component.ParsedProvider;
+import android.content.pm.parsing.component.ParsedService;
 import android.os.Bundle;
 import android.os.Parcel;
 import android.platform.test.annotations.Presubmit;
 import android.util.ArraySet;
+import android.util.DisplayMetrics;
 
+import androidx.annotation.Nullable;
 import androidx.test.filters.MediumTest;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.server.pm.parsing.PackageCacher;
+import com.android.server.pm.parsing.PackageInfoUtils;
+import com.android.server.pm.parsing.PackageParser2;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
 
 import org.junit.Before;
 import org.junit.Rule;
@@ -70,12 +73,12 @@
 import java.lang.reflect.Field;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+@Presubmit
 @RunWith(AndroidJUnit4.class)
 @MediumTest
 public class PackageParserTest {
@@ -96,13 +99,13 @@
 
     @Test
     public void testParse_noCache() throws Exception {
-        PackageParser pp = new CachePackageNameParser();
-        ParsedPackage pkg = pp.parseParsedPackage(FRAMEWORK, 0 /* parseFlags */,
+        CachePackageNameParser pp = new CachePackageNameParser(null, false, null, null, null);
+        ParsedPackage pkg = pp.parsePackage(FRAMEWORK, 0 /* parseFlags */,
                 false /* useCaches */);
         assertNotNull(pkg);
 
         pp.setCacheDir(mTmpDir);
-        pkg = pp.parseParsedPackage(FRAMEWORK, 0 /* parseFlags */,
+        pkg = pp.parsePackage(FRAMEWORK, 0 /* parseFlags */,
                 false /* useCaches */);
         assertNotNull(pkg);
 
@@ -113,39 +116,37 @@
 
     @Test
     public void testParse_withCache() throws Exception {
-        PackageParser pp = new CachePackageNameParser();
+        CachePackageNameParser pp = new CachePackageNameParser(null, false, null, null, null);
 
         pp.setCacheDir(mTmpDir);
         // The first parse will write this package to the cache.
-        pp.parseParsedPackage(FRAMEWORK, 0 /* parseFlags */, true /* useCaches */);
+        pp.parsePackage(FRAMEWORK, 0 /* parseFlags */, true /* useCaches */);
 
         // Now attempt to parse the package again, should return the
         // cached result.
-        ParsedPackage pkg = pp.parseParsedPackage(FRAMEWORK, 0 /* parseFlags */,
+        ParsedPackage pkg = pp.parsePackage(FRAMEWORK, 0 /* parseFlags */,
                 true /* useCaches */);
         assertEquals("cache_android", pkg.getPackageName());
 
         // Try again, with useCaches == false, shouldn't return the parsed
         // result.
-        pkg = pp.parseParsedPackage(FRAMEWORK, 0 /* parseFlags */, false /* useCaches */);
+        pkg = pp.parsePackage(FRAMEWORK, 0 /* parseFlags */, false /* useCaches */);
         assertEquals("android", pkg.getPackageName());
 
         // We haven't set a cache directory here : the parse should still succeed,
         // just not using the cached results.
-        pp = new CachePackageNameParser();
-        pkg = pp.parseParsedPackage(FRAMEWORK, 0 /* parseFlags */, true /* useCaches */);
+        pp = new CachePackageNameParser(null, false, null, null, null);
+        pkg = pp.parsePackage(FRAMEWORK, 0 /* parseFlags */, true /* useCaches */);
         assertEquals("android", pkg.getPackageName());
 
-        pkg = pp.parseParsedPackage(FRAMEWORK, 0 /* parseFlags */, false /* useCaches */);
+        pkg = pp.parsePackage(FRAMEWORK, 0 /* parseFlags */, false /* useCaches */);
         assertEquals("android", pkg.getPackageName());
     }
 
     @Test
     public void test_serializePackage() throws Exception {
-        PackageParser pp = new PackageParser();
-        pp.setCacheDir(mTmpDir);
-
-        ParsedPackage pkg = pp.parseParsedPackage(FRAMEWORK, 0 /* parseFlags */,
+        PackageParser2 pp = new PackageParser2(null, false, null, mTmpDir, null);
+        ParsedPackage pkg = pp.parsePackage(FRAMEWORK, 0 /* parseFlags */,
                 true /* useCaches */);
 
         Parcel p = Parcel.obtain();
@@ -161,7 +162,7 @@
     @SmallTest
     @Presubmit
     public void test_roundTripKnownFields() throws Exception {
-        ParsingPackage pkg = PackageImpl.forParsing("foo");
+        ParsingPackage pkg = PackageImpl.forTesting("foo");
         setKnownFields(pkg);
 
         Parcel p = Parcel.obtain();
@@ -174,7 +175,7 @@
 
     @Test
     public void test_stringInterning() throws Exception {
-        ParsingPackage pkg = PackageImpl.forParsing("foo");
+        ParsingPackage pkg = PackageImpl.forTesting("foo");
         setKnownFields(pkg);
 
         Parcel p = Parcel.obtain();
@@ -212,19 +213,44 @@
      * A trivial subclass of package parser that only caches the package name, and throws away
      * all other information.
      */
-    public static class CachePackageNameParser extends PackageParser {
-        @Override
-        public byte[] toCacheEntry(ParsedPackage pkg) {
-            return ("cache_" + pkg.getPackageName()).getBytes(StandardCharsets.UTF_8);
+    public static class CachePackageNameParser extends PackageParser2 {
+
+        CachePackageNameParser(String[] separateProcesses, boolean onlyCoreApps,
+                DisplayMetrics displayMetrics, @Nullable File cacheDir,
+                PackageParser2.Callback callback) {
+            super(separateProcesses, onlyCoreApps, displayMetrics, cacheDir, callback);
+            if (cacheDir != null) {
+                setCacheDir(cacheDir);
+            }
         }
 
-        @Override
-        public ParsedPackage fromCacheEntry(byte[] cacheEntry) {
-            return PackageImpl.forParsing(new String(cacheEntry, StandardCharsets.UTF_8))
-                    .hideAsParsed();
+        void setCacheDir(@NonNull File cacheDir) {
+            this.mCacher = new PackageCacher(cacheDir) {
+                @Override
+                public byte[] toCacheEntry(ParsedPackage pkg) {
+                    return ("cache_" + pkg.getPackageName()).getBytes(StandardCharsets.UTF_8);
+                }
+
+                @Override
+                public ParsedPackage fromCacheEntry(byte[] cacheEntry) {
+                    return ((ParsedPackage) PackageImpl.forTesting(
+                            new String(cacheEntry, StandardCharsets.UTF_8))
+                            .hideAsParsed());
+                }
+            };
         }
     }
 
+    private static PackageSetting mockPkgSetting(AndroidPackage pkg) {
+        return new PackageSetting(pkg.getPackageName(), pkg.getRealPackage(),
+                new File(pkg.getCodePath()), new File(pkg.getCodePath()), null,
+                pkg.getPrimaryCpuAbi(), pkg.getSecondaryCpuAbi(),
+                null, pkg.getVersionCode(),
+                PackageInfoUtils.appInfoFlags(pkg, null),
+                PackageInfoUtils.appInfoPrivateFlags(pkg, null),
+                pkg.getSharedUserLabel(), null, null, null);
+    }
+
     // NOTE: The equality assertions below are based on code autogenerated by IntelliJ.
 
     public static void assertPackagesEqual(AndroidPackage a, AndroidPackage b) {
@@ -232,7 +258,6 @@
         assertEquals(a.isBaseHardwareAccelerated(), b.isBaseHardwareAccelerated());
         assertEquals(a.getVersionCode(), b.getVersionCode());
         assertEquals(a.getSharedUserLabel(), b.getSharedUserLabel());
-        assertEquals(a.getPreferredOrder(), b.getPreferredOrder());
         assertEquals(a.getInstallLocation(), b.getInstallLocation());
         assertEquals(a.isCoreApp(), b.isCoreApp());
         assertEquals(a.isRequiredForAllUsers(), b.isRequiredForAllUsers());
@@ -249,9 +274,9 @@
         assertArrayEquals(a.getSplitFlags(), b.getSplitFlags());
 
         PackageInfo aInfo = PackageInfoUtils.generate(a, new int[]{}, 0, 0, 0,
-                Collections.emptySet(), new PackageUserState(), 0);
+                Collections.emptySet(), new PackageUserState(), 0, mockPkgSetting(a));
         PackageInfo bInfo = PackageInfoUtils.generate(b, new int[]{}, 0, 0, 0,
-                Collections.emptySet(), new PackageUserState(), 0);
+                Collections.emptySet(), new PackageUserState(), 0, mockPkgSetting(b));
         assertApplicationInfoEqual(aInfo.applicationInfo, bInfo.applicationInfo);
 
         assertEquals(ArrayUtils.size(a.getPermissions()), ArrayUtils.size(b.getPermissions()));
@@ -298,15 +323,13 @@
         assertEquals(a.getLibraryNames(), b.getLibraryNames());
         assertEquals(a.getUsesLibraries(), b.getUsesLibraries());
         assertEquals(a.getUsesOptionalLibraries(), b.getUsesOptionalLibraries());
-        assertArrayEquals(a.getUsesLibraryFiles(), b.getUsesLibraryFiles());
         assertEquals(a.getOriginalPackages(), b.getOriginalPackages());
         assertEquals(a.getRealPackage(), b.getRealPackage());
         assertEquals(a.getAdoptPermissions(), b.getAdoptPermissions());
-        assertBundleApproximateEquals(a.getAppMetaData(), b.getAppMetaData());
+        assertBundleApproximateEquals(a.getMetaData(), b.getMetaData());
         assertEquals(a.getVersionName(), b.getVersionName());
         assertEquals(a.getSharedUserId(), b.getSharedUserId());
         assertArrayEquals(a.getSigningDetails().signatures, b.getSigningDetails().signatures);
-        assertArrayEquals(a.getLastPackageUsageTimeInMills(), b.getLastPackageUsageTimeInMills());
         assertEquals(a.getRestrictedAccountType(), b.getRestrictedAccountType());
         assertEquals(a.getRequiredAccountType(), b.getRequiredAccountType());
         assertEquals(a.getOverlayTarget(), b.getOverlayTarget());
@@ -317,7 +340,6 @@
         assertEquals(a.getSigningDetails().publicKeys, b.getSigningDetails().publicKeys);
         assertEquals(a.getUpgradeKeySets(), b.getUpgradeKeySets());
         assertEquals(a.getKeySetMapping(), b.getKeySetMapping());
-        assertEquals(a.getCpuAbiOverride(), b.getCpuAbiOverride());
         assertArrayEquals(a.getRestrictUpdateHash(), b.getRestrictUpdateHash());
     }
 
@@ -333,44 +355,42 @@
         assertEquals(a.toString(), b.toString());
     }
 
-    private static void assertComponentsEqual(ParsedComponent<?> a,
-            ParsedComponent<?> b) {
-        assertEquals(a.className, b.className);
+    private static void assertComponentsEqual(ParsedComponent a, ParsedComponent b) {
+        assertEquals(a.getName(), b.getName());
         assertBundleApproximateEquals(a.getMetaData(), b.getMetaData());
         assertEquals(a.getComponentName(), b.getComponentName());
 
-        if (a.intents != null && b.intents != null) {
-            assertEquals(a.intents.size(), b.intents.size());
-        } else if (a.intents == null || b.intents == null) {
+        if (a.getIntents() != null && b.getIntents() != null) {
+            assertEquals(a.getIntents().size(), b.getIntents().size());
+        } else if (a.getIntents() == null || b.getIntents() == null) {
             return;
         }
 
-        for (int i = 0; i < a.intents.size(); ++i) {
-            ParsedIntentInfo aIntent = a.intents.get(i);
-            ParsedIntentInfo bIntent = b.intents.get(i);
+        for (int i = 0; i < a.getIntents().size(); ++i) {
+            ParsedIntentInfo aIntent = a.getIntents().get(i);
+            ParsedIntentInfo bIntent = b.getIntents().get(i);
 
-            assertEquals(aIntent.hasDefault, bIntent.hasDefault);
-            assertEquals(aIntent.labelRes, bIntent.labelRes);
-            assertEquals(aIntent.nonLocalizedLabel, bIntent.nonLocalizedLabel);
-            assertEquals(aIntent.icon, bIntent.icon);
+            assertEquals(aIntent.isHasDefault(), bIntent.isHasDefault());
+            assertEquals(aIntent.getLabelRes(), bIntent.getLabelRes());
+            assertEquals(aIntent.getNonLocalizedLabel(), bIntent.getNonLocalizedLabel());
+            assertEquals(aIntent.getIcon(), bIntent.getIcon());
         }
     }
 
-    private static void assertPermissionsEqual(ParsedPermission a,
-            ParsedPermission b) {
+    private static void assertPermissionsEqual(ParsedPermission a, ParsedPermission b) {
         assertComponentsEqual(a, b);
-        assertEquals(a.tree, b.tree);
+        assertEquals(a.isTree(), b.isTree());
 
         // Verify basic flags in PermissionInfo to make sure they're consistent. We don't perform
         // a full structural equality here because the code that serializes them isn't parser
         // specific and is tested elsewhere.
         assertEquals(a.getProtection(), b.getProtection());
         assertEquals(a.getGroup(), b.getGroup());
-        assertEquals(a.flags, b.flags);
+        assertEquals(a.getFlags(), b.getFlags());
 
-        if (a.parsedPermissionGroup != null && b.parsedPermissionGroup != null) {
-            assertPermissionGroupsEqual(a.parsedPermissionGroup, b.parsedPermissionGroup);
-        } else if (a.parsedPermissionGroup != null || b.parsedPermissionGroup != null) {
+        if (a.getParsedPermissionGroup() != null && b.getParsedPermissionGroup() != null) {
+            assertPermissionGroupsEqual(a.getParsedPermissionGroup(), b.getParsedPermissionGroup());
+        } else if (a.getParsedPermissionGroup() != null || b.getParsedPermissionGroup() != null) {
             throw new AssertionError();
         }
     }
@@ -382,6 +402,8 @@
         // Sanity check for InstrumentationInfo.
         assertEquals(a.getTargetPackage(), b.getTargetPackage());
         assertEquals(a.getTargetProcesses(), b.getTargetProcesses());
+        assertEquals(a.isHandleProfiling(), b.isHandleProfiling());
+        assertEquals(a.isFunctionalTest(), b.isFunctionalTest());
     }
 
     private static void assertServicesEqual(
@@ -393,10 +415,10 @@
         assertComponentsEqual(a, b);
 
         // Sanity check for ServiceInfo.
-        ServiceInfo aInfo = PackageInfoUtils.generateServiceInfo(aPkg, a, 0, new PackageUserState(),
-                0);
-        ServiceInfo bInfo = PackageInfoUtils.generateServiceInfo(bPkg, b, 0, new PackageUserState(),
-                0);
+        ServiceInfo aInfo = PackageInfoUtils.generateServiceInfo(aPkg, a, 0,
+                new PackageUserState(), 0, mockPkgSetting(aPkg));
+        ServiceInfo bInfo = PackageInfoUtils.generateServiceInfo(bPkg, b, 0,
+                new PackageUserState(), 0, mockPkgSetting(bPkg));
         assertApplicationInfoEqual(aInfo.applicationInfo, bInfo.applicationInfo);
         assertEquals(a.getName(), b.getName());
     }
@@ -411,9 +433,9 @@
 
         // Sanity check for ProviderInfo
         ProviderInfo aInfo = PackageInfoUtils.generateProviderInfo(aPkg, a, 0,
-                new PackageUserState(), 0);
+                new PackageUserState(), 0, mockPkgSetting(aPkg));
         ProviderInfo bInfo = PackageInfoUtils.generateProviderInfo(bPkg, b, 0,
-                new PackageUserState(), 0);
+                new PackageUserState(), 0, mockPkgSetting(bPkg));
         assertApplicationInfoEqual(aInfo.applicationInfo, bInfo.applicationInfo);
         assertEquals(a.getName(), b.getName());
     }
@@ -428,9 +450,9 @@
 
         // Sanity check for ActivityInfo.
         ActivityInfo aInfo = PackageInfoUtils.generateActivityInfo(aPkg, a, 0,
-                new PackageUserState(), 0);
+                new PackageUserState(), 0, mockPkgSetting(aPkg));
         ActivityInfo bInfo = PackageInfoUtils.generateActivityInfo(bPkg, b, 0,
-                new PackageUserState(), 0);
+                new PackageUserState(), 0, mockPkgSetting(bPkg));
         assertApplicationInfoEqual(aInfo.applicationInfo, bInfo.applicationInfo);
         assertEquals(a.getName(), b.getName());
     }
@@ -441,7 +463,7 @@
 
         // Sanity check for PermissionGroupInfo.
         assertEquals(a.getName(), b.getName());
-        assertEquals(a.descriptionRes, b.descriptionRes);
+        assertEquals(a.getDescriptionRes(), b.getDescriptionRes());
     }
 
     private static void assertApplicationInfoEqual(ApplicationInfo a, ApplicationInfo that) {
@@ -494,12 +516,11 @@
         bundle.putString("key", "value");
 
         ParsedPermission permission = new ParsedPermission();
-        permission.parsedPermissionGroup = new ParsedPermissionGroup();
+        permission.setParsedPermissionGroup(new ParsedPermissionGroup());
 
-        pkg.setBaseRevisionCode(100)
+        ((ParsedPackage) pkg.setBaseRevisionCode(100)
                 .setBaseHardwareAccelerated(true)
                 .setSharedUserLabel(100)
-                .setPreferredOrder(100)
                 .setInstallLocation(100)
                 .setRequiredForAllUsers(true)
                 .asSplit(
@@ -510,7 +531,6 @@
                 )
                 .setUse32BitAbi(true)
                 .setVolumeUuid("foo3")
-                .setCodePath("foo4")
                 .addPermission(permission)
                 .addPermissionGroup(new ParsedPermissionGroup())
                 .addActivity(new ParsedActivity())
@@ -532,7 +552,7 @@
                 .addOriginalPackage("foo14")
                 .setRealPackage("foo15")
                 .addAdoptPermission("foo16")
-                .setAppMetaData(bundle)
+                .setMetaData(bundle)
                 .setVersionName("foo17")
                 .setSharedUserId("foo18")
                 .setSigningDetails(
@@ -547,8 +567,7 @@
                 .setOverlayTarget("foo21")
                 .setOverlayPriority(100)
                 .setUpgradeKeySets(new ArraySet<>())
-                .addPreferredActivityFilter(
-                        new ComponentParseUtils.ParsedActivityIntentInfo("foo", "className"))
+                .addPreferredActivityFilter("className", new ParsedIntentInfo())
                 .addConfigPreference(new ConfigurationInfo())
                 .addReqFeature(new FeatureInfo())
                 .addFeatureGroup(new FeatureGroupInfo())
@@ -559,19 +578,14 @@
                 .setOverlayTargetName("foo26")
                 .setVisibleToInstantApps(true)
                 .setSplitHasCode(0, true)
-                .hideAsParsed()
+                .hideAsParsed())
                 .setBaseCodePath("foo5")
+                .setCodePath("foo4")
                 .setVersionCode(100)
-                .setCpuAbiOverride("foo22")
                 .setRestrictUpdateHash(new byte[16])
                 .setVersionCodeMajor(100)
                 .setCoreApp(true)
-                .hideAsFinal()
-                .mutate()
-                .setUsesLibraryInfos(Arrays.asList(
-                        new SharedLibraryInfo(null, null, null, null, 0L, 0, null, null, null)
-                ))
-                .setUsesLibraryFiles(new String[]{"foo13"});
+                .hideAsFinal();
     }
 
     private static void assertAllFieldsExist(ParsedPackage pkg) throws Exception {
diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageSettingBuilder.java b/services/tests/servicestests/src/com/android/server/pm/PackageSettingBuilder.java
index 338d5fa..d12ea894 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageSettingBuilder.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageSettingBuilder.java
@@ -18,10 +18,13 @@
 
 import android.content.pm.PackageParser;
 import android.content.pm.PackageUserState;
-import android.content.pm.parsing.AndroidPackage;
+import android.util.ArraySet;
 import android.util.SparseArray;
 
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+
 import java.io.File;
+import java.util.Map;
 
 public class PackageSettingBuilder {
     private String mName;
@@ -38,6 +41,7 @@
     private int mSharedUserId;
     private String[] mUsesStaticLibraries;
     private long[] mUsesStaticLibrariesVersions;
+    private Map<String, ArraySet<String>> mMimeGroups;
     private String mVolumeUuid;
     private SparseArray<PackageUserState> mUserStates = new SparseArray<>();
     private AndroidPackage mPkg;
@@ -127,6 +131,11 @@
         return this;
     }
 
+    public PackageSettingBuilder setMimeGroups(Map<String, ArraySet<String>> mimeGroups) {
+        this.mMimeGroups = mimeGroups;
+        return this;
+    }
+
     public PackageSettingBuilder setVolumeUuid(String volumeUuid) {
         this.mVolumeUuid = volumeUuid;
         return this;
@@ -156,7 +165,7 @@
                 new File(mCodePath), new File(mResourcePath),
                 mLegacyNativeLibraryPathString, mPrimaryCpuAbiString, mSecondaryCpuAbiString,
                 mCpuAbiOverrideString, mPVersionCode, mPkgFlags, mPrivateFlags, mSharedUserId,
-                mUsesStaticLibraries, mUsesStaticLibrariesVersions);
+                mUsesStaticLibraries, mUsesStaticLibrariesVersions, mMimeGroups);
         packageSetting.signatures = mSigningDetails != null
                 ? new PackageSignatures(mSigningDetails)
                 : new PackageSignatures();
diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageSignaturesTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageSignaturesTest.java
index 04e769d..55bc681 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageSignaturesTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageSignaturesTest.java
@@ -467,7 +467,7 @@
         File appPath = new File("/data/app/app");
         PackageSetting result = new PackageSetting("test.app", null, appPath, appPath,
                 "/data/app/app", null, null, null,
-                1, 940097092, 0, 0 /*userId*/, null, null);
+                1, 940097092, 0, 0 /*userId*/, null, null, null /*mimeGroups*/);
         return result;
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/pm/ParallelPackageParserTest.java b/services/tests/servicestests/src/com/android/server/pm/ParallelPackageParserTest.java
index da5986f7..9d3ac17 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ParallelPackageParserTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ParallelPackageParserTest.java
@@ -17,11 +17,14 @@
 package com.android.server.pm;
 
 import android.content.pm.PackageParser;
-import android.content.pm.parsing.ParsedPackage;
+import android.platform.test.annotations.Presubmit;
 import android.util.Log;
 
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.server.pm.parsing.PackageParser2;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
 import junit.framework.Assert;
 
 import org.junit.Before;
@@ -36,6 +39,7 @@
 /**
  * Tests for {@link ParallelPackageParser}
  */
+@Presubmit
 @RunWith(AndroidJUnit4.class)
 public class ParallelPackageParserTest {
     private static final String TAG = ParallelPackageParserTest.class.getSimpleName();
@@ -44,7 +48,7 @@
 
     @Before
     public void setUp() {
-        mParser = new TestParallelPackageParser(new PackageParser(),
+        mParser = new TestParallelPackageParser(new PackageParser2(null, false, null, null, null),
                 ParallelPackageParser.makeExecutorService());
     }
 
@@ -72,7 +76,7 @@
 
     private class TestParallelPackageParser extends ParallelPackageParser {
 
-        TestParallelPackageParser(PackageParser packageParser, ExecutorService executorService) {
+        TestParallelPackageParser(PackageParser2 packageParser, ExecutorService executorService) {
             super(packageParser, executorService);
         }
 
diff --git a/services/tests/servicestests/src/com/android/server/pm/SELinuxMMACTest.java b/services/tests/servicestests/src/com/android/server/pm/SELinuxMMACTest.java
index 30108c6..efc1c05 100644
--- a/services/tests/servicestests/src/com/android/server/pm/SELinuxMMACTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/SELinuxMMACTest.java
@@ -22,12 +22,13 @@
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.when;
 
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.PackageImpl;
 import android.os.Build;
 import android.platform.test.annotations.Presubmit;
 
 import com.android.server.compat.PlatformCompat;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -79,9 +80,9 @@
     }
 
     private AndroidPackage makePackage(int targetSdkVersion) {
-        return PackageImpl.forParsing(PACKAGE_NAME)
+        return ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
                 .setTargetSdkVersion(targetSdkVersion)
-                .hideAsParsed()
+                .hideAsParsed())
                 .hideAsFinal();
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/pm/ScanRequestBuilder.java b/services/tests/servicestests/src/com/android/server/pm/ScanRequestBuilder.java
index 11f154b..12fb400 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ScanRequestBuilder.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ScanRequestBuilder.java
@@ -16,10 +16,13 @@
 
 package com.android.server.pm;
 
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.ParsedPackage;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.os.UserHandle;
 
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
 class ScanRequestBuilder {
     private final ParsedPackage mPkg;
     private AndroidPackage mOldPkg;
@@ -32,6 +35,8 @@
     private int mScanFlags;
     private UserHandle mUser;
     private boolean mIsPlatformPackage;
+    @Nullable
+    private String mCpuAbiOverride;
 
     ScanRequestBuilder(ParsedPackage pkg) {
         this.mPkg = pkg;
@@ -97,10 +102,16 @@
         return this;
     }
 
+    @NonNull
+    public ScanRequestBuilder setCpuAbiOverride(@Nullable String cpuAbiOverride) {
+        this.mCpuAbiOverride = cpuAbiOverride;
+        return this;
+    }
+
     PackageManagerService.ScanRequest build() {
         return new PackageManagerService.ScanRequest(
                 mPkg, mSharedUserSetting, mOldPkg, mPkgSetting, mDisabledPkgSetting,
                 mOriginalPkgSetting, mRealPkgName, mParseFlags, mScanFlags, mIsPlatformPackage,
-                mUser);
+                mUser, mCpuAbiOverride);
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/pm/ScanTests.java b/services/tests/servicestests/src/com/android/server/pm/ScanTests.java
index 583cf58..09f946d 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ScanTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ScanTests.java
@@ -42,9 +42,6 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.SharedLibraryInfo;
-import android.content.pm.parsing.PackageImpl;
-import android.content.pm.parsing.PackageInfoUtils;
-import android.content.pm.parsing.ParsedPackage;
 import android.content.pm.parsing.ParsingPackage;
 import android.content.res.TypedArray;
 import android.os.Environment;
@@ -54,6 +51,10 @@
 import android.util.Pair;
 
 import com.android.server.compat.PlatformCompat;
+import com.android.server.pm.parsing.PackageInfoUtils;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
 
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
@@ -101,18 +102,18 @@
     @Before
     public void setupDefaultAbiBehavior() throws Exception {
         when(mMockPackageAbiHelper.derivePackageAbi(
-                any(ParsedPackage.class), nullable(String.class), anyBoolean()))
+                any(AndroidPackage.class), anyBoolean(), nullable(String.class), anyBoolean()))
                 .thenReturn(new Pair<>(
                         new PackageAbiHelper.Abis("derivedPrimary", "derivedSecondary"),
                         new PackageAbiHelper.NativeLibraryPaths(
                                 "derivedRootDir", true, "derivedNativeDir", "derivedNativeDir2")));
         when(mMockPackageAbiHelper.getNativeLibraryPaths(
-                any(ParsedPackage.class), any(File.class)))
+                any(AndroidPackage.class), any(PackageSetting.class), any(File.class)))
                 .thenReturn(new PackageAbiHelper.NativeLibraryPaths(
                         "getRootDir", true, "getNativeDir", "getNativeDir2"
                 ));
         when(mMockPackageAbiHelper.getBundledAppAbis(
-                any(ParsedPackage.class)))
+                any(AndroidPackage.class)))
                 .thenReturn(new PackageAbiHelper.Abis("bundledPrimary", "bundledSecondary"));
     }
 
@@ -223,10 +224,10 @@
 
     @Test
     public void installStaticSharedLibrary() throws Exception {
-        final ParsedPackage pkg = createBasicPackage("static.lib.pkg")
+        final ParsedPackage pkg = ((ParsedPackage) createBasicPackage("static.lib.pkg")
                 .setStaticSharedLibName("static.lib")
                 .setStaticSharedLibVersion(123L)
-                .hideAsParsed()
+                .hideAsParsed())
                 .setPackageName("static.lib.pkg.123")
                 .setVersionCodeMajor(1)
                 .setVersionCode(234)
@@ -255,10 +256,11 @@
 
     @Test
     public void installDynamicLibraries() throws Exception {
-        final ParsedPackage pkg = createBasicPackage("dynamic.lib.pkg")
+        final ParsedPackage pkg = ((ParsedPackage) createBasicPackage(
+                "dynamic.lib.pkg")
                 .addLibraryName("liba")
                 .addLibraryName("libb")
-                .hideAsParsed()
+                .hideAsParsed())
                 .setVersionCodeMajor(1)
                 .setVersionCode(234)
                 .setBaseCodePath("/some/path.apk")
@@ -304,9 +306,9 @@
                         .setVolumeUuid("someUuid")
                         .build();
 
-        final ParsedPackage basicPackage = createBasicPackage(DUMMY_PACKAGE_NAME)
-                .hideAsParsed()
-                .setApplicationVolumeUuid(UUID_TWO.toString());
+        final ParsedPackage basicPackage = ((ParsedPackage) createBasicPackage(DUMMY_PACKAGE_NAME)
+                .setVolumeUuid(UUID_TWO.toString())
+                .hideAsParsed());
 
 
         final PackageManagerService.ScanResult scanResult = executeScan(
@@ -321,9 +323,8 @@
                 createBasicPackageSettingBuilder(DUMMY_PACKAGE_NAME).build();
 
         final ParsedPackage basicPackage =
-                createBasicPackage(DUMMY_PACKAGE_NAME)
-                        .hideAsParsed()
-                        .setCpuAbiOverride("testOverride");
+                ((ParsedPackage) createBasicPackage(DUMMY_PACKAGE_NAME)
+                        .hideAsParsed());
 
 
         final PackageManagerService.ScanResult scanResult = executeScan(new ScanRequestBuilder(
@@ -341,7 +342,7 @@
                 createBasicPackageSettingBuilder("original.package").build();
 
         final ParsedPackage basicPackage =
-                createBasicPackage(DUMMY_PACKAGE_NAME)
+                (ParsedPackage) createBasicPackage(DUMMY_PACKAGE_NAME)
                         .hideAsParsed();
 
 
@@ -411,8 +412,9 @@
 
         final PackageManagerService.ScanResult scanResult = executeScan(scanRequest);
 
-        assertThat(scanResult.request.parsedPackage.getFlags(),
-                hasFlag(ApplicationInfo.FLAG_UPDATED_SYSTEM_APP));
+        int appInfoFlags = PackageInfoUtils.appInfoFlags(scanResult.request.parsedPackage,
+                scanResult.pkgSetting);
+        assertThat(appInfoFlags, hasFlag(ApplicationInfo.FLAG_UPDATED_SYSTEM_APP));
     }
 
     @Test
@@ -426,14 +428,15 @@
                 true /*isUnderFactoryTest*/,
                 System.currentTimeMillis());
 
-        assertThat(scanResult.request.parsedPackage.getFlags(),
-                hasFlag(ApplicationInfo.FLAG_FACTORY_TEST));
+        int appInfoFlags = PackageInfoUtils.appInfoFlags(scanResult.request.parsedPackage,
+                scanResult.request.pkgSetting);
+        assertThat(appInfoFlags, hasFlag(ApplicationInfo.FLAG_FACTORY_TEST));
     }
 
     @Test
     public void scanSystemApp_isOrphanedTrue() throws Exception {
-        final ParsedPackage pkg = createBasicPackage(DUMMY_PACKAGE_NAME)
-                .hideAsParsed()
+        final ParsedPackage pkg = ((ParsedPackage) createBasicPackage(DUMMY_PACKAGE_NAME)
+                .hideAsParsed())
                 .setSystem(true);
 
         final PackageManagerService.ScanRequest scanRequest =
@@ -474,10 +477,6 @@
                 System.currentTimeMillis());
     }
 
-    private static String createResourcePath(String packageName) {
-        return "/data/app/" + packageName + "-randompath/base.apk";
-    }
-
     private static String createCodePath(String packageName) {
         return "/data/app/" + packageName + "-randompath";
     }
@@ -486,11 +485,11 @@
         return new PackageSettingBuilder()
                 .setName(packageName)
                 .setCodePath(createCodePath(packageName))
-                .setResourcePath(createResourcePath(packageName));
+                .setResourcePath(createCodePath(packageName));
     }
 
     private static ScanRequestBuilder createBasicScanRequestBuilder(ParsingPackage pkg) {
-        return new ScanRequestBuilder(pkg.hideAsParsed())
+        return new ScanRequestBuilder((ParsedPackage) pkg.hideAsParsed())
                 .setUser(UserHandle.of(0));
     }
 
@@ -501,16 +500,15 @@
 
     private static ParsingPackage createBasicPackage(String packageName) {
         // TODO(b/135203078): Make this use PackageImpl.forParsing and separate the steps
-        return new PackageImpl(packageName, null, mock(TypedArray.class), false)
-                .setCodePath("/data/tmp/randompath")
-                .setApplicationInfoCodePath(createCodePath(packageName))
-                .setApplicationInfoResourcePath(createResourcePath(packageName))
-                .setApplicationVolumeUuid(UUID_ONE.toString())
-                .setBaseCodePath("/data/tmp/randompath/base.apk")
+        return (ParsingPackage) ((ParsedPackage) new PackageImpl(packageName,
+                "/data/tmp/randompath/base.apk", createCodePath(packageName),
+                mock(TypedArray.class), false)
+                .setVolumeUuid(UUID_ONE.toString())
                 .addUsesStaticLibrary("some.static.library")
                 .addUsesStaticLibraryVersion(234L)
                 .addUsesStaticLibrary("some.other.static.library")
                 .addUsesStaticLibraryVersion(456L)
+                .hideAsParsed())
                 .setNativeLibraryRootDir("/data/tmp/randompath/base.apk:/lib")
                 .setVersionCodeMajor(1)
                 .setVersionCode(2345);
@@ -524,7 +522,7 @@
         assertBasicPackageSetting(scanResult, packageName, isInstant, pkgSetting);
 
         final ApplicationInfo applicationInfo = PackageInfoUtils.generateApplicationInfo(
-                pkgSetting.pkg, 0, pkgSetting.readUserState(0), 0);
+                pkgSetting.pkg, 0, pkgSetting.readUserState(0), 0, pkgSetting);
         assertBasicApplicationInfo(scanResult, applicationInfo);
     }
 
@@ -537,7 +535,7 @@
         assertThat(pkgSetting.usesStaticLibrariesVersions, is(new long[]{234L, 456L}));
         assertThat(pkgSetting.pkg, is(scanResult.request.parsedPackage));
         assertThat(pkgSetting.codePath, is(new File(createCodePath(packageName))));
-        assertThat(pkgSetting.resourcePath, is(new File(createResourcePath(packageName))));
+        assertThat(pkgSetting.resourcePath, is(new File(createCodePath(packageName))));
         assertThat(pkgSetting.versionCode, is(PackageInfo.composeLongVersionCode(1, 2345)));
     }
 
@@ -559,7 +557,7 @@
     private static void assertAbiAndPathssDerived(PackageManagerService.ScanResult scanResult) {
         PackageSetting pkgSetting = scanResult.pkgSetting;
         final ApplicationInfo applicationInfo = PackageInfoUtils.generateApplicationInfo(
-                pkgSetting.pkg, 0, pkgSetting.readUserState(0), 0);
+                pkgSetting.pkg, 0, pkgSetting.readUserState(0), 0, pkgSetting);
         assertThat(applicationInfo.primaryCpuAbi, is("derivedPrimary"));
         assertThat(applicationInfo.secondaryCpuAbi, is("derivedSecondary"));
 
@@ -573,7 +571,7 @@
     private static void assertPathsNotDerived(PackageManagerService.ScanResult scanResult) {
         PackageSetting pkgSetting = scanResult.pkgSetting;
         final ApplicationInfo applicationInfo = PackageInfoUtils.generateApplicationInfo(
-                pkgSetting.pkg, 0, pkgSetting.readUserState(0), 0);
+                pkgSetting.pkg, 0, pkgSetting.readUserState(0), 0, pkgSetting);
         assertThat(applicationInfo.nativeLibraryRootDir, is("getRootDir"));
         assertThat(pkgSetting.legacyNativeLibraryPathString, is("getRootDir"));
         assertThat(applicationInfo.nativeLibraryRootRequiresIsa, is(true));
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 63da5fb..2936bdd 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
@@ -1240,7 +1240,7 @@
 
         runWithCaller(CALLING_PACKAGE_1, USER_0, () -> {
             assertTrue(mManager.setDynamicShortcuts(list(
-                    makeShortcut("s1"), makeShortcut("s2"), makeShortcut("s3"))));
+                    makeLongLivedShortcut("s1"), makeLongLivedShortcut("s2"), makeShortcut("s3"))));
         });
 
         // Pin 2 and 3
@@ -1250,9 +1250,12 @@
         });
 
         // Cache 1 and 2
+        runWithCaller(LAUNCHER_1, USER_0, () -> {
+            mLauncherApps.cacheShortcuts(CALLING_PACKAGE_1, list("s1", "s2"),
+                    HANDLE_USER_0);
+        });
+
         setCaller(CALLING_PACKAGE_1);
-        getCallerShortcut("s1").setCached();
-        getCallerShortcut("s2").setCached();
 
         // Get manifest shortcuts
         assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_MANIFEST),
@@ -1315,8 +1318,9 @@
 
     public void testCachedShortcuts() {
         runWithCaller(CALLING_PACKAGE_1, USER_0, () -> {
-            assertTrue(mManager.setDynamicShortcuts(list(makeShortcut("s1"), makeShortcut("s2"),
-                    makeShortcut("s3"), makeShortcut("s4"))));
+            assertTrue(mManager.setDynamicShortcuts(list(makeShortcut("s1"),
+                    makeLongLivedShortcut("s2"), makeLongLivedShortcut("s3"),
+                    makeLongLivedShortcut("s4"))));
         });
 
         // Pin s2
@@ -1325,11 +1329,13 @@
                     HANDLE_USER_0);
         });
 
-        // Cache 2, 3 and 4
+        // Cache some, but non long lived shortcuts will be ignored.
+        runWithCaller(LAUNCHER_1, USER_0, () -> {
+            mLauncherApps.cacheShortcuts(CALLING_PACKAGE_1, list("s1", "s2", "s4"),
+                    HANDLE_USER_0);
+        });
+
         setCaller(CALLING_PACKAGE_1);
-        getCallerShortcut("s2").setCached();
-        getCallerShortcut("s3").setCached();
-        getCallerShortcut("s4").setCached();
 
         // Get dynamic shortcuts
         assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_DYNAMIC),
@@ -1339,27 +1345,37 @@
                 "s2");
         // Get cached shortcuts
         assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_CACHED),
-                "s2", "s3", "s4");
+                "s2", "s4");
 
         // Remove a dynamic cached shortcut
-        mManager.removeDynamicShortcuts(list("s3"));
+        mManager.removeDynamicShortcuts(list("s4"));
         assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_DYNAMIC),
-                "s1", "s2", "s4");
+                "s1", "s2", "s3");
         assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_CACHED),
-                "s2", "s3", "s4");
+                "s2", "s4");
 
-        // Remove dynamic cached long lived shortcuts
-        mManager.removeLongLivedShortcuts(list("s3", "s4"));
-        assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_DYNAMIC),
-                "s1", "s2");
+        // uncache a non-dynamic shortcut. Should be removed.
+        runWithCaller(LAUNCHER_1, USER_0, () -> {
+            mLauncherApps.uncacheShortcuts(CALLING_PACKAGE_1, list("s4"),
+                    HANDLE_USER_0);
+        });
         assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_CACHED),
                 "s2");
 
+        // Cache another shortcut
+        runWithCaller(LAUNCHER_1, USER_0, () -> {
+            mLauncherApps.cacheShortcuts(CALLING_PACKAGE_1, list("s3"),
+                    HANDLE_USER_0);
+        });
+        assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_CACHED),
+                "s2", "s3");
+
         // Remove a dynamic cached pinned long lived shortcut
         mManager.removeLongLivedShortcuts(list("s2"));
         assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_DYNAMIC),
-                "s1");
-        assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_CACHED));
+                "s1", "s3");
+        assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_CACHED),
+                "s3");
         assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_PINNED),
                 "s2");
     }
@@ -1371,7 +1387,7 @@
         // Set up shortcuts.
 
         setCaller(CALLING_PACKAGE_1);
-        final ShortcutInfo s1_1 = makeShortcut("s1");
+        final ShortcutInfo s1_1 = makeLongLivedShortcut("s1");
         final ShortcutInfo s1_2 = makeShortcutWithLocusId("s2", makeLocusId("l1"));
 
         assertTrue(mManager.setDynamicShortcuts(list(s1_1, s1_2)));
@@ -1395,6 +1411,8 @@
 
         setCaller(CALLING_PACKAGE_3);
         final ShortcutInfo s3_2 = makeShortcutWithLocusId("s3", makeLocusId("l2"));
+        s3_2.setLongLived();
+
         assertTrue(mManager.setDynamicShortcuts(list(s3_2)));
 
         getCallerShortcut("s3").setTimestamp(START_TIME + 5000);
@@ -1535,26 +1553,20 @@
 
         // TODO More tests: pinned but dynamic.
 
-        // Cache some shortcuts
-        setCaller(CALLING_PACKAGE_1);
-        getCallerShortcut("s1").setCached();
-
-        setCaller(CALLING_PACKAGE_2);
-        getCallerShortcut("s4").setCached();
-
-        setCaller(CALLING_PACKAGE_3);
-        getCallerShortcut("s3").setCached();
-
         setCaller(LAUNCHER_1);
 
+        // Cache some shortcuts. Only long lived shortcuts can get cached.
+        mLauncherApps.cacheShortcuts(CALLING_PACKAGE_1, list("s1"), getCallingUser());
+        mLauncherApps.cacheShortcuts(CALLING_PACKAGE_3, list("s3"), getCallingUser());
+
         // Cached ones only
         assertShortcutIds(assertAllNotKeyFieldsOnly(
                 mLauncherApps.getShortcuts(buildQuery(
-                        /* time =*/ 0, CALLING_PACKAGE_2,
+                        /* time =*/ 0, CALLING_PACKAGE_3,
                         /* activity =*/ null,
                         ShortcutQuery.FLAG_MATCH_CACHED),
                         getCallingUser())),
-                "s4");
+                "s3");
 
         // All packages.
         assertShortcutIds(assertAllNotKeyFieldsOnly(
@@ -1563,7 +1575,7 @@
                         /* activity =*/ null,
                         ShortcutQuery.FLAG_MATCH_CACHED),
                         getCallingUser())),
-                "s1", "s4", "s3");
+                "s1", "s3");
 
         assertExpectException(
                 IllegalArgumentException.class, "package name must also be set", () -> {
@@ -1581,7 +1593,7 @@
                         /* activity =*/ null,
                         ShortcutQuery.FLAG_MATCH_CACHED),
                         getCallingUser())),
-                "s1", "s4", "s3");
+                "s1", "s3");
     }
 
     public void testGetShortcuts_shortcutKinds() throws Exception {
@@ -3132,7 +3144,7 @@
             // Not launchable.
             doReturn(ActivityManager.START_CLASS_NOT_FOUND)
                     .when(mMockActivityTaskManagerInternal).startActivitiesAsPackage(
-                    anyStringOrNull(), anyInt(),
+                    anyStringOrNull(), anyStringOrNull(), anyInt(),
                     anyOrNull(Intent[].class), anyOrNull(Bundle.class));
             assertStartShortcutThrowsException(CALLING_PACKAGE_1, "s1", USER_0,
                     ActivityNotFoundException.class);
@@ -3141,7 +3153,7 @@
             doReturn(ActivityManager.START_CLASS_NOT_FOUND)
                     .when(mMockActivityTaskManagerInternal)
                     .startActivitiesAsPackage(
-                            anyStringOrNull(), anyInt(),
+                            anyStringOrNull(), anyStringOrNull(), anyInt(),
                             anyOrNull(Intent[].class), anyOrNull(Bundle.class));
             assertStartShortcutThrowsException(CALLING_PACKAGE_1, "s1", USER_0,
                     ActivityNotFoundException.class);
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 3db832b..ce21099 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserSystemPackageInstallerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserSystemPackageInstallerTest.java
@@ -39,8 +39,6 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.UserInfo;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.PackageImpl;
 import android.os.Looper;
 import android.os.SystemProperties;
 import android.os.UserManager;
@@ -56,6 +54,9 @@
 
 import com.android.server.LocalServices;
 import com.android.server.SystemConfig;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
 
 import org.junit.After;
 import org.junit.Before;
@@ -252,14 +253,14 @@
         final Set<String> userWhitelist = new ArraySet<>();
         userWhitelist.add(packageName1);
 
-        final AndroidPackage pkg1 = PackageImpl.forParsing(packageName1)
-                .hideAsParsed().hideAsFinal();
-        final AndroidPackage pkg2 = PackageImpl.forParsing(packageName2)
-                .hideAsParsed().hideAsFinal();
-        final AndroidPackage pkg3 = PackageImpl.forParsing(packageName3)
-                .hideAsParsed().hideAsFinal();
-        final AndroidPackage pkg4 = PackageImpl.forParsing(packageName4)
-                .hideAsParsed().hideAsFinal();
+        final AndroidPackage pkg1 = ((ParsedPackage) PackageImpl.forTesting(packageName1)
+                .hideAsParsed()).hideAsFinal();
+        final AndroidPackage pkg2 = ((ParsedPackage) PackageImpl.forTesting(packageName2)
+                .hideAsParsed()).hideAsFinal();
+        final AndroidPackage pkg3 = ((ParsedPackage) PackageImpl.forTesting(packageName3)
+                .hideAsParsed()).hideAsFinal();
+        final AndroidPackage pkg4 = ((ParsedPackage) PackageImpl.forTesting(packageName4)
+                .hideAsParsed()).hideAsFinal();
 
         // No implicit whitelist, so only install pkg1.
         boolean implicit = false;
diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java
index f5e5e2a..d69e1b8 100644
--- a/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java
@@ -532,6 +532,61 @@
         assertHasDclInfo(mBarUser0, mBarUser0, secondaries);
     }
 
+    @Test
+    public void testPrimaryAndSecondaryDexLoad() {
+        // Foo loads both primary and secondary dexes
+        List<String> fooSecondaries = mFooUser0.getSecondaryDexPaths();
+        List<String> fooDexes = new ArrayList<>(mFooUser0.getBaseAndSplitDexPaths());
+        int primaryCount = fooDexes.size();
+        fooDexes.addAll(fooSecondaries);
+
+        notifyDexLoad(mFooUser0, fooDexes, mUser0);
+
+        PackageUseInfo pui = getPackageUseInfo(mFooUser0);
+        assertIsUsedByOtherApps(mFooUser0, pui, false);
+        assertEquals(fooSecondaries.size(), pui.getDexUseInfoMap().size());
+
+        // Below we want to verify that the secondary dex files within fooDexes have been correctly
+        // reported and their class loader contexts were correctly recorded.
+        //
+        // In order to achieve this we first use DexoptUtils.processContextForDexLoad to compute the
+        // class loader contexts for all the dex files.
+        String[] allClassLoaderContexts = DexoptUtils.processContextForDexLoad(
+                Arrays.asList(mFooUser0.mClassLoader),
+                Arrays.asList(String.join(File.pathSeparator, fooDexes)));
+        // Next we filter out the class loader contexts corresponding to non-secondary dex files.
+        String[] secondaryClassLoaderContexts = Arrays.copyOfRange(allClassLoaderContexts,
+                primaryCount, allClassLoaderContexts.length);
+        assertSecondaryUse(mFooUser0, pui, fooSecondaries, /*isUsedByOtherApps*/false, mUser0,
+                secondaryClassLoaderContexts);
+
+        assertHasDclInfo(mFooUser0, mFooUser0, fooSecondaries);
+    }
+
+    @Test
+    public void testNotifySecondary_withSharedLibrary() {
+        // Foo loads its own secondary files.
+        List<String> fooSecondaries = mFooUser0.getSecondaryDexPaths();
+
+        String contextSuffix = "{PCL[/system/framework/org.apache.http.legacy.jar]}";
+        String[] expectedContexts = DexoptUtils.processContextForDexLoad(
+                Arrays.asList(mFooUser0.mClassLoader),
+                Arrays.asList(String.join(File.pathSeparator, fooSecondaries)));
+        for (int i = 0; i < expectedContexts.length; i++) {
+            expectedContexts[i] += contextSuffix;
+        }
+
+        notifyDexLoad(mFooUser0, fooSecondaries, expectedContexts, mUser0);
+
+        PackageUseInfo pui = getPackageUseInfo(mFooUser0);
+        assertIsUsedByOtherApps(mFooUser0, pui, false);
+        assertEquals(fooSecondaries.size(), pui.getDexUseInfoMap().size());
+        assertSecondaryUse(mFooUser0, pui, fooSecondaries, /*isUsedByOtherApps*/false, mUser0,
+                expectedContexts);
+
+        assertHasDclInfo(mFooUser0, mFooUser0, fooSecondaries);
+    }
+
     private void assertSecondaryUse(TestData testData, PackageUseInfo pui,
             List<String> secondaries, boolean isUsedByOtherApps, int ownerUserId,
             String[] expectedContexts) {
@@ -572,17 +627,43 @@
         // By default, assume a single class loader in the chain.
         // This makes writing tests much easier.
         List<String> classLoaders = Arrays.asList(testData.mClassLoader);
-        List<String> classPaths = (dexPaths == null)
-                                  ? Arrays.asList((String) null)
-                                  : Arrays.asList(String.join(File.pathSeparator, dexPaths));
+        List<String> classPaths = dexPaths != null
+                ? Arrays.<String>asList(String.join(File.pathSeparator, dexPaths)) : null;
         notifyDexLoad(testData, classLoaders, classPaths, loaderUserId);
     }
 
     private void notifyDexLoad(TestData testData, List<String> classLoaders,
             List<String> classPaths, int loaderUserId) {
+        String[] classLoaderContexts = computeClassLoaderContexts(classLoaders, classPaths);
         // We call the internal function so any exceptions thrown cause test failures.
-        mDexManager.notifyDexLoadInternal(testData.mPackageInfo.applicationInfo, classLoaders,
-                classPaths, testData.mLoaderIsa, loaderUserId);
+        List<String> dexPaths = classPaths != null
+                ? Arrays.asList(classPaths.get(0).split(File.pathSeparator)) : Arrays.asList();
+        notifyDexLoad(testData, dexPaths, classLoaderContexts, loaderUserId);
+    }
+
+    private void notifyDexLoad(TestData testData, List<String> dexPaths,
+            String[] classLoaderContexts, int loaderUserId) {
+        assertTrue(dexPaths.size() == classLoaderContexts.length);
+        HashMap<String, String> dexPathMapping = new HashMap<>(dexPaths.size());
+        for (int i = 0; i < dexPaths.size(); i++) {
+            dexPathMapping.put(dexPaths.get(i), classLoaderContexts != null
+                    ? classLoaderContexts[i] : PackageDexUsage.UNSUPPORTED_CLASS_LOADER_CONTEXT);
+        }
+        mDexManager.notifyDexLoadInternal(testData.mPackageInfo.applicationInfo, dexPathMapping,
+                testData.mLoaderIsa, loaderUserId);
+    }
+
+    private String[] computeClassLoaderContexts(List<String> classLoaders,
+            List<String> classPaths) {
+        if (classPaths == null) {
+            return new String[0];
+        }
+        String[] results = DexoptUtils.processContextForDexLoad(classLoaders, classPaths);
+        if (results == null) {
+            results = new String[classPaths.get(0).split(File.pathSeparator).length];
+            Arrays.fill(results, PackageDexUsage.UNSUPPORTED_CLASS_LOADER_CONTEXT);
+        }
+        return results;
     }
 
     private PackageUseInfo getPackageUseInfo(TestData testData) {
diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexMetadataHelperTest.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexMetadataHelperTest.java
new file mode 100644
index 0000000..f87f68d
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexMetadataHelperTest.java
@@ -0,0 +1,237 @@
+/*
+ * 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.dex;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageParser;
+import android.content.pm.PackageParser.ApkLite;
+import android.content.pm.PackageParser.PackageLite;
+import android.content.pm.PackageParser.PackageParserException;
+import android.content.pm.dex.DexMetadataHelper;
+import android.os.FileUtils;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.frameworks.servicestests.R;
+import com.android.server.pm.parsing.PackageParser2;
+import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class DexMetadataHelperTest {
+    private static final String APK_FILE_EXTENSION = ".apk";
+    private static final String DEX_METADATA_FILE_EXTENSION = ".dm";
+
+    @Rule
+    public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+
+    private File mTmpDir = null;
+
+    @Before
+    public void setUp() throws IOException {
+        mTmpDir = mTemporaryFolder.newFolder("DexMetadataHelperTest");
+    }
+
+    private File createDexMetadataFile(String apkFileName) throws IOException {
+        File dmFile = new File(mTmpDir, apkFileName.replace(APK_FILE_EXTENSION,
+                DEX_METADATA_FILE_EXTENSION));
+        try (FileOutputStream fos = new FileOutputStream(dmFile)) {
+            try (ZipOutputStream zipOs = new ZipOutputStream(fos)) {
+                zipOs.putNextEntry(new ZipEntry("primary.prof"));
+                zipOs.closeEntry();
+            }
+        }
+        return dmFile;
+    }
+
+    private File copyApkToToTmpDir(String apkFileName, int apkResourceId) throws IOException {
+        Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
+        File outFile = new File(mTmpDir, apkFileName);
+        try (InputStream is = context.getResources().openRawResource(apkResourceId)) {
+            FileUtils.copyToFileOrThrow(is, outFile);
+        }
+        return outFile;
+    }
+
+    private PackageParser2 makeParser() {
+        return new PackageParser2(null, false, null, null, null);
+    }
+
+    @Test
+    public void testParsePackageWithDmFileValid() throws IOException, PackageParserException {
+        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
+        createDexMetadataFile("install_split_base.apk");
+        ParsedPackage pkg = makeParser().parsePackage(mTmpDir, 0 /* flags */, false);
+
+        Map<String, String> packageDexMetadata = AndroidPackageUtils.getPackageDexMetadata(pkg);
+        assertEquals(1, packageDexMetadata.size());
+        String baseDexMetadata = packageDexMetadata.get(pkg.getBaseCodePath());
+        assertNotNull(baseDexMetadata);
+        assertTrue(isDexMetadataForApk(baseDexMetadata, pkg.getBaseCodePath()));
+    }
+
+    @Test
+    public void testParsePackageSplitsWithDmFileValid()
+            throws IOException, PackageParserException {
+        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
+        copyApkToToTmpDir("install_split_feature_a.apk", R.raw.install_split_feature_a);
+        createDexMetadataFile("install_split_base.apk");
+        createDexMetadataFile("install_split_feature_a.apk");
+        ParsedPackage pkg = makeParser().parsePackage(mTmpDir, 0 /* flags */, false);
+
+        Map<String, String> packageDexMetadata = AndroidPackageUtils.getPackageDexMetadata(pkg);
+        assertEquals(2, packageDexMetadata.size());
+        String baseDexMetadata = packageDexMetadata.get(pkg.getBaseCodePath());
+        assertNotNull(baseDexMetadata);
+        assertTrue(isDexMetadataForApk(baseDexMetadata, pkg.getBaseCodePath()));
+
+        String splitDexMetadata = packageDexMetadata.get(pkg.getSplitCodePaths()[0]);
+        assertNotNull(splitDexMetadata);
+        assertTrue(isDexMetadataForApk(splitDexMetadata, pkg.getSplitCodePaths()[0]));
+    }
+
+    @Test
+    public void testParsePackageSplitsNoBaseWithDmFileValid()
+            throws IOException, PackageParserException {
+        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
+        copyApkToToTmpDir("install_split_feature_a.apk", R.raw.install_split_feature_a);
+        createDexMetadataFile("install_split_feature_a.apk");
+        ParsedPackage pkg = makeParser().parsePackage(mTmpDir, 0 /* flags */, false);
+
+        Map<String, String> packageDexMetadata = AndroidPackageUtils.getPackageDexMetadata(pkg);
+        assertEquals(1, packageDexMetadata.size());
+
+        String splitDexMetadata = packageDexMetadata.get(pkg.getSplitCodePaths()[0]);
+        assertNotNull(splitDexMetadata);
+        assertTrue(isDexMetadataForApk(splitDexMetadata, pkg.getSplitCodePaths()[0]));
+    }
+
+    @Test
+    public void testParsePackageWithDmFileInvalid() throws IOException {
+        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
+        File invalidDmFile = new File(mTmpDir, "install_split_base.dm");
+        Files.createFile(invalidDmFile.toPath());
+        try {
+            ParsedPackage pkg = makeParser().parsePackage(mTmpDir, 0 /* flags */, false);
+            AndroidPackageUtils.validatePackageDexMetadata(pkg);
+        } catch (PackageParserException e) {
+            assertEquals(e.error, PackageManager.INSTALL_FAILED_BAD_DEX_METADATA);
+        }
+    }
+
+    @Test
+    public void testParsePackageSplitsWithDmFileInvalid()
+            throws IOException, PackageParserException {
+        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
+        copyApkToToTmpDir("install_split_feature_a.apk", R.raw.install_split_feature_a);
+        createDexMetadataFile("install_split_base.apk");
+        File invalidDmFile = new File(mTmpDir, "install_split_feature_a.dm");
+        Files.createFile(invalidDmFile.toPath());
+
+        try {
+            ParsedPackage pkg = makeParser().parsePackage(mTmpDir, 0 /* flags */, false);
+            AndroidPackageUtils.validatePackageDexMetadata(pkg);
+        } catch (PackageParserException e) {
+            assertEquals(e.error, PackageManager.INSTALL_FAILED_BAD_DEX_METADATA);
+        }
+    }
+
+    @Test
+    public void testPackageWithDmFileNoMatch() throws IOException {
+        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
+        createDexMetadataFile("non_existent.apk");
+
+        try {
+            DexMetadataHelper.validateDexPaths(mTmpDir.list());
+            fail("Should fail validation");
+        } catch (IllegalStateException e) {
+            // expected.
+        }
+    }
+
+    @Test
+    public void testPackageSplitsWithDmFileNoMatch()
+            throws IOException, PackageParserException {
+        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
+        copyApkToToTmpDir("install_split_feature_a.apk", R.raw.install_split_feature_a);
+        createDexMetadataFile("install_split_base.apk");
+        createDexMetadataFile("install_split_feature_a.mistake.apk");
+
+        try {
+            DexMetadataHelper.validateDexPaths(mTmpDir.list());
+            fail("Should fail validation");
+        } catch (IllegalStateException e) {
+            // expected.
+        }
+    }
+
+    @Test
+    public void testPackageSizeWithDmFile()
+            throws IOException, PackageParserException {
+        copyApkToToTmpDir("install_split_base.apk", R.raw.install_split_base);
+        File dm = createDexMetadataFile("install_split_base.apk");
+        PackageParser.PackageLite pkg = new PackageParser().parsePackageLite(mTmpDir,
+                0 /* flags */);
+
+        Assert.assertEquals(dm.length(), DexMetadataHelper.getPackageDexMetadataSize(pkg));
+    }
+
+    // This simulates the 'adb shell pm install' flow.
+    @Test
+    public void testPackageSizeWithPartialPackageLite() throws IOException, PackageParserException {
+        File base = copyApkToToTmpDir("install_split_base", R.raw.install_split_base);
+        File dm = createDexMetadataFile("install_split_base.apk");
+        try (FileInputStream is = new FileInputStream(base)) {
+            ApkLite baseApk = PackageParser.parseApkLite(is.getFD(), base.getAbsolutePath(), 0);
+            PackageLite pkgLite = new PackageLite(null, baseApk, null, null, null, null,
+                    null, null);
+            Assert.assertEquals(dm.length(), DexMetadataHelper.getPackageDexMetadataSize(pkgLite));
+        }
+
+    }
+
+    private static boolean isDexMetadataForApk(String dmaPath, String apkPath) {
+        return apkPath.substring(0, apkPath.length() - APK_FILE_EXTENSION.length()).equals(
+                dmaPath.substring(0, dmaPath.length() - DEX_METADATA_FILE_EXTENSION.length()));
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java
index 66a4946..3846be0 100644
--- a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java
@@ -23,15 +23,16 @@
 import static org.junit.Assert.fail;
 
 import android.content.pm.SharedLibraryInfo;
-import android.content.pm.parsing.AndroidPackage;
-import android.content.pm.parsing.PackageImpl;
-import android.content.pm.parsing.ParsedPackage;
 import android.content.pm.parsing.ParsingPackage;
 import android.util.SparseArray;
 
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
 import dalvik.system.DelegateLastClassLoader;
 import dalvik.system.DexClassLoader;
 import dalvik.system.PathClassLoader;
@@ -61,7 +62,8 @@
     private TestData createMockApplicationInfo(String baseClassLoader, boolean addSplits,
             boolean addSplitDependencies, boolean isolatedSplitLoading) {
         String codeDir = "/data/app/mock.android.com";
-        ParsingPackage parsingPackage = PackageImpl.forParsing("mock.android.com")
+        ParsingPackage parsingPackage = PackageImpl.forTesting("mock.android.com",
+                codeDir + "/base.dex")
                 .setClassLoaderName(baseClassLoader);
 
         parsingPackage.setIsolatedSplitLoading(isolatedSplitLoading);
@@ -122,8 +124,7 @@
                     .setSplitClassLoaderName(7, null);
         }
 
-        ParsedPackage parsedPackage = parsingPackage.hideAsParsed()
-                .setBaseCodePath(codeDir + "/base.dex");
+        ParsedPackage parsedPackage = (ParsedPackage) parsingPackage.hideAsParsed();
 
         TestData data = new TestData();
         data.pkg = parsedPackage.hideAsFinal();
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageInfoFlagBehaviorTest.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageInfoFlagBehaviorTest.kt
index 27d02e1..0a32e4a 100644
--- a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageInfoFlagBehaviorTest.kt
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageInfoFlagBehaviorTest.kt
@@ -20,9 +20,10 @@
 import android.content.pm.PackageInfo
 import android.content.pm.PackageManager
 import android.content.pm.PackageParser
-import android.content.pm.parsing.AndroidPackage
+import android.platform.test.annotations.Presubmit
 import com.android.server.pm.parsing.AndroidPackageInfoFlagBehaviorTest.Companion.Param.Companion.appInfo
 import com.android.server.pm.parsing.AndroidPackageInfoFlagBehaviorTest.Companion.Param.Companion.pkgInfo
+import com.android.server.pm.parsing.pkg.AndroidPackage
 import com.google.common.truth.Truth.assertThat
 import com.google.common.truth.Truth.assertWithMessage
 import org.junit.Test
@@ -36,6 +37,7 @@
  * This test has to be updated manually whenever the info generation behavior changes, since
  * there's no single place where flag -> field is defined besides this test.
  */
+@Presubmit
 @RunWith(Parameterized::class)
 class AndroidPackageInfoFlagBehaviorTest : AndroidPackageParsingTestBase() {
 
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingEquivalenceTest.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingEquivalenceTest.kt
index 925af7f..191c038 100644
--- a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingEquivalenceTest.kt
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingEquivalenceTest.kt
@@ -17,6 +17,7 @@
 package com.android.server.pm.parsing
 
 import android.content.pm.PackageManager
+import android.platform.test.annotations.Presubmit
 import com.google.common.truth.Truth.assertWithMessage
 import org.junit.Test
 
@@ -24,6 +25,7 @@
  * Collects APKs from the device and verifies that the new parsing behavior outputs
  * the same exposed Info object as the old parsing logic.
  */
+@Presubmit
 class AndroidPackageParsingEquivalenceTest : AndroidPackageParsingTestBase() {
 
     @Test
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt
index afd6e18..ca6b296 100644
--- a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt
@@ -27,26 +27,27 @@
 import android.content.pm.PackageUserState
 import android.content.pm.PermissionInfo
 import android.content.pm.ProviderInfo
-import android.content.pm.parsing.AndroidPackage
-import android.content.pm.parsing.PackageImpl
-import android.content.pm.parsing.PackageInfoUtils
 import android.os.Debug
 import android.os.Environment
 import android.util.SparseArray
 import androidx.test.platform.app.InstrumentationRegistry
+import com.android.server.om.mockThrowOnUnmocked
+import com.android.server.om.whenever
 import com.android.server.pm.PackageManagerService
+import com.android.server.pm.PackageSetting
+import com.android.server.pm.parsing.pkg.AndroidPackage
+import com.android.server.pm.pkg.PackageStateUnserialized
 import org.junit.BeforeClass
 import org.mockito.Mockito
+import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.mock
 import java.io.File
 
 open class AndroidPackageParsingTestBase {
 
     companion object {
 
-        /**
-         * By default, don't parse all APKs on device, only the framework one.
-         * Toggle this manually if working on package parsing.
-         */
+        // TODO(chiuwinson): Enable in separate change to fail all presubmit builds and fix errors
         private const val VERIFY_ALL_APKS = false
 
         /** For auditing memory usage differences */
@@ -59,6 +60,11 @@
             setCallback { true }
         }
 
+        protected val packageParser2 = PackageParser2(null, false, context.resources.displayMetrics,
+                null, object : PackageParser2.Callback() {
+            override fun hasFeature(feature: String?) = true
+        })
+
         /**
          * It would be difficult to mock all possibilities, so just use the APKs on device.
          * Unfortunately, this means the device must be bootable to verify potentially
@@ -80,9 +86,9 @@
                             .toList()
                 }
 
-        private val dummyState = Mockito.mock(PackageUserState::class.java).apply {
+        private val dummyUserState = mock(PackageUserState::class.java).apply {
             installed = true
-            Mockito.`when`(isAvailable(Mockito.anyInt())).thenReturn(true)
+            Mockito.`when`(isAvailable(anyInt())).thenReturn(true)
         }
 
         lateinit var oldPackages: List<PackageParser.Package>
@@ -98,7 +104,7 @@
             }
 
             this.newPackages = apks.map {
-                packageParser.parseParsedPackage(it, PackageParser.PARSE_IS_SYSTEM_DIR, false)
+                packageParser2.parsePackage(it, PackageParser.PARSE_IS_SYSTEM_DIR, false)
             }
 
             if (DUMP_HPROF_TO_EXTERNAL) {
@@ -111,19 +117,27 @@
         }
 
         fun oldAppInfo(pkg: PackageParser.Package, flags: Int = 0): ApplicationInfo? {
-            return PackageParser.generateApplicationInfo(pkg, flags, dummyState, 0)
+            return PackageParser.generateApplicationInfo(pkg, flags, dummyUserState, 0)
         }
 
         fun newAppInfo(pkg: AndroidPackage, flags: Int = 0): ApplicationInfo? {
-            return PackageInfoUtils.generateApplicationInfo(pkg, flags, dummyState, 0)
+            return PackageInfoUtils.generateApplicationInfo(pkg, flags, dummyUserState, 0,
+                    mockPkgSetting(pkg))
         }
 
         fun oldPackageInfo(pkg: PackageParser.Package, flags: Int = 0): PackageInfo? {
-            return PackageParser.generatePackageInfo(pkg, intArrayOf(), flags, 5, 6, emptySet(), dummyState)
+            return PackageParser.generatePackageInfo(pkg, intArrayOf(), flags, 5, 6, emptySet(),
+                    dummyUserState)
         }
 
         fun newPackageInfo(pkg: AndroidPackage, flags: Int = 0): PackageInfo? {
-            return PackageInfoUtils.generate(pkg, intArrayOf(), flags, 5, 6, emptySet(), dummyState, 0)
+            return PackageInfoUtils.generate(pkg, intArrayOf(), flags, 5, 6, emptySet(),
+                    dummyUserState, 0, mockPkgSetting(pkg))
+        }
+
+        private fun mockPkgSetting(aPkg: AndroidPackage) = mockThrowOnUnmocked<PackageSetting> {
+            this.pkg = aPkg
+            whenever(pkgState) { PackageStateUnserialized() }
         }
     }
 
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java
new file mode 100644
index 0000000..66cd466
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java
@@ -0,0 +1,576 @@
+/*
+ * 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.parsing;
+
+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.junit.Assert.fail;
+
+import android.apex.ApexInfo;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageParser;
+import android.content.pm.PermissionInfo;
+import android.content.pm.parsing.component.ParsedComponent;
+import android.content.pm.parsing.component.ParsedPermission;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.FileUtils;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.frameworks.servicestests.R;
+import com.android.internal.util.ArrayUtils;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.function.Function;
+
+/**
+ * {@link ParsedPackage} was moved to the server, so this test moved along with it.
+ *
+ * This should be eventually refactored to a comprehensive parsing test, combined with its
+ * server variant in the parent package.
+ *
+ * TODO(b/135203078): Remove this test and replicate the cases in the actual com.android.server
+ *  variant.
+ */
+@Presubmit
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class PackageParserLegacyCoreTest {
+    private static final String RELEASED = null;
+    private static final String OLDER_PRE_RELEASE = "A";
+    private static final String PRE_RELEASE = "B";
+    private static final String NEWER_PRE_RELEASE = "C";
+
+    // Codenames with a fingerprint attached to them. These may only be present in the apps
+    // declared min SDK and not as platform codenames.
+    private static final String OLDER_PRE_RELEASE_WITH_FINGERPRINT = "A.fingerprint";
+    private static final String PRE_RELEASE_WITH_FINGERPRINT = "B.fingerprint";
+    private static final String NEWER_PRE_RELEASE_WITH_FINGERPRINT = "C.fingerprint";
+
+    private static final String[] CODENAMES_RELEASED = { /* empty */};
+    private static final String[] CODENAMES_PRE_RELEASE = {PRE_RELEASE};
+
+    private static final int OLDER_VERSION = 10;
+    private static final int PLATFORM_VERSION = 20;
+    private static final int NEWER_VERSION = 30;
+
+    private void verifyComputeMinSdkVersion(int minSdkVersion, String minSdkCodename,
+            boolean isPlatformReleased, int expectedMinSdk) {
+        final String[] outError = new String[1];
+        final int result = PackageParser.computeMinSdkVersion(
+                minSdkVersion,
+                minSdkCodename,
+                PLATFORM_VERSION,
+                isPlatformReleased ? CODENAMES_RELEASED : CODENAMES_PRE_RELEASE,
+                outError);
+
+        assertEquals("Error msg: " + outError[0], expectedMinSdk, result);
+
+        if (expectedMinSdk == -1) {
+            assertNotNull(outError[0]);
+        } else {
+            assertNull(outError[0]);
+        }
+    }
+
+    private PackageParser2 makeParser() {
+        return new PackageParser2(null, false, null, null, null);
+    }
+
+    @Test
+    public void testComputeMinSdkVersion_preReleasePlatform() {
+        // Do allow older release minSdkVersion on pre-release platform.
+        // APP: Released API 10
+        // DEV: Pre-release API 20
+        verifyComputeMinSdkVersion(OLDER_VERSION, RELEASED, false, OLDER_VERSION);
+
+        // Do allow same release minSdkVersion on pre-release platform.
+        // APP: Released API 20
+        // DEV: Pre-release API 20
+        verifyComputeMinSdkVersion(PLATFORM_VERSION, RELEASED, false, PLATFORM_VERSION);
+
+        // Don't allow newer release minSdkVersion on pre-release platform.
+        // APP: Released API 30
+        // DEV: Pre-release API 20
+        verifyComputeMinSdkVersion(NEWER_VERSION, RELEASED, false, -1);
+
+        // Don't allow older pre-release minSdkVersion on pre-release platform.
+        // APP: Pre-release API 10
+        // DEV: Pre-release API 20
+        verifyComputeMinSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, false, -1);
+        verifyComputeMinSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE_WITH_FINGERPRINT, false, -1);
+
+        // Do allow same pre-release minSdkVersion on pre-release platform,
+        // but overwrite the specified version with CUR_DEVELOPMENT.
+        // APP: Pre-release API 20
+        // DEV: Pre-release API 20
+        verifyComputeMinSdkVersion(PLATFORM_VERSION, PRE_RELEASE, false,
+                Build.VERSION_CODES.CUR_DEVELOPMENT);
+        verifyComputeMinSdkVersion(PLATFORM_VERSION, PRE_RELEASE_WITH_FINGERPRINT, false,
+                Build.VERSION_CODES.CUR_DEVELOPMENT);
+
+
+        // Don't allow newer pre-release minSdkVersion on pre-release platform.
+        // APP: Pre-release API 30
+        // DEV: Pre-release API 20
+        verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, false, -1);
+        verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, false, -1);
+    }
+
+    @Test
+    public void testComputeMinSdkVersion_releasedPlatform() {
+        // Do allow older release minSdkVersion on released platform.
+        // APP: Released API 10
+        // DEV: Released API 20
+        verifyComputeMinSdkVersion(OLDER_VERSION, RELEASED, true, OLDER_VERSION);
+
+        // Do allow same release minSdkVersion on released platform.
+        // APP: Released API 20
+        // DEV: Released API 20
+        verifyComputeMinSdkVersion(PLATFORM_VERSION, RELEASED, true, PLATFORM_VERSION);
+
+        // Don't allow newer release minSdkVersion on released platform.
+        // APP: Released API 30
+        // DEV: Released API 20
+        verifyComputeMinSdkVersion(NEWER_VERSION, RELEASED, true, -1);
+
+        // Don't allow older pre-release minSdkVersion on released platform.
+        // APP: Pre-release API 10
+        // DEV: Released API 20
+        verifyComputeMinSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, true, -1);
+        verifyComputeMinSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE_WITH_FINGERPRINT, true, -1);
+
+        // Don't allow same pre-release minSdkVersion on released platform.
+        // APP: Pre-release API 20
+        // DEV: Released API 20
+        verifyComputeMinSdkVersion(PLATFORM_VERSION, PRE_RELEASE, true, -1);
+        verifyComputeMinSdkVersion(PLATFORM_VERSION, PRE_RELEASE_WITH_FINGERPRINT, true, -1);
+
+
+        // Don't allow newer pre-release minSdkVersion on released platform.
+        // APP: Pre-release API 30
+        // DEV: Released API 20
+        verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, true, -1);
+        verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, true, -1);
+    }
+
+    private void verifyComputeTargetSdkVersion(int targetSdkVersion, String targetSdkCodename,
+            boolean isPlatformReleased, int expectedTargetSdk) {
+        final String[] outError = new String[1];
+        final int result = PackageParser.computeTargetSdkVersion(
+                targetSdkVersion,
+                targetSdkCodename,
+                isPlatformReleased ? CODENAMES_RELEASED : CODENAMES_PRE_RELEASE,
+                outError);
+
+        assertEquals(result, expectedTargetSdk);
+
+        if (expectedTargetSdk == -1) {
+            assertNotNull(outError[0]);
+        } else {
+            assertNull(outError[0]);
+        }
+    }
+
+    @Test
+    public void testComputeTargetSdkVersion_preReleasePlatform() {
+        // Do allow older release targetSdkVersion on pre-release platform.
+        // APP: Released API 10
+        // DEV: Pre-release API 20
+        verifyComputeTargetSdkVersion(OLDER_VERSION, RELEASED, false, OLDER_VERSION);
+
+        // Do allow same release targetSdkVersion on pre-release platform.
+        // APP: Released API 20
+        // DEV: Pre-release API 20
+        verifyComputeTargetSdkVersion(PLATFORM_VERSION, RELEASED, false, PLATFORM_VERSION);
+
+        // Do allow newer release targetSdkVersion on pre-release platform.
+        // APP: Released API 30
+        // DEV: Pre-release API 20
+        verifyComputeTargetSdkVersion(NEWER_VERSION, RELEASED, false, NEWER_VERSION);
+
+        // Don't allow older pre-release targetSdkVersion on pre-release platform.
+        // APP: Pre-release API 10
+        // DEV: Pre-release API 20
+        verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, false, -1);
+        verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE_WITH_FINGERPRINT, false, -1);
+
+
+        // Do allow same pre-release targetSdkVersion on pre-release platform,
+        // but overwrite the specified version with CUR_DEVELOPMENT.
+        // APP: Pre-release API 20
+        // DEV: Pre-release API 20
+        verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE, false,
+                Build.VERSION_CODES.CUR_DEVELOPMENT);
+        verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE_WITH_FINGERPRINT, false,
+                Build.VERSION_CODES.CUR_DEVELOPMENT);
+
+
+        // Don't allow newer pre-release targetSdkVersion on pre-release platform.
+        // APP: Pre-release API 30
+        // DEV: Pre-release API 20
+        verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, false, -1);
+        verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, false, -1);
+    }
+
+    @Test
+    public void testComputeTargetSdkVersion_releasedPlatform() {
+        // Do allow older release targetSdkVersion on released platform.
+        // APP: Released API 10
+        // DEV: Released API 20
+        verifyComputeTargetSdkVersion(OLDER_VERSION, RELEASED, true, OLDER_VERSION);
+
+        // Do allow same release targetSdkVersion on released platform.
+        // APP: Released API 20
+        // DEV: Released API 20
+        verifyComputeTargetSdkVersion(PLATFORM_VERSION, RELEASED, true, PLATFORM_VERSION);
+
+        // Do allow newer release targetSdkVersion on released platform.
+        // APP: Released API 30
+        // DEV: Released API 20
+        verifyComputeTargetSdkVersion(NEWER_VERSION, RELEASED, true, NEWER_VERSION);
+
+        // Don't allow older pre-release targetSdkVersion on released platform.
+        // APP: Pre-release API 10
+        // DEV: Released API 20
+        verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, true, -1);
+        verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE_WITH_FINGERPRINT, true, -1);
+
+        // Don't allow same pre-release targetSdkVersion on released platform.
+        // APP: Pre-release API 20
+        // DEV: Released API 20
+        verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE, true, -1);
+        verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE_WITH_FINGERPRINT, true, -1);
+
+
+        // Don't allow newer pre-release targetSdkVersion on released platform.
+        // APP: Pre-release API 30
+        // DEV: Released API 20
+        verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, true, -1);
+        verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, true, -1);
+    }
+
+    /**
+     * Unit test for PackageParser.getActivityConfigChanges().
+     * If the bit is 1 in the original configChanges, it is still 1 in the final configChanges.
+     * If the bit is 0 in the original configChanges and the bit is not set to 1 in
+     * recreateOnConfigChanges, the bit is changed to 1 in the final configChanges by default.
+     */
+    @Test
+    public void testGetActivityConfigChanges() {
+        // Not set in either configChanges or recreateOnConfigChanges.
+        int configChanges = 0x0000; // 00000000.
+        int recreateOnConfigChanges = 0x0000; // 00000000.
+        int finalConfigChanges =
+                PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges);
+        assertEquals(0x0003, finalConfigChanges); // Should be 00000011.
+
+        // Not set in configChanges, but set in recreateOnConfigChanges.
+        configChanges = 0x0000; // 00000000.
+        recreateOnConfigChanges = 0x0003; // 00000011.
+        finalConfigChanges =
+                PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges);
+        assertEquals(0x0000, finalConfigChanges); // Should be 00000000.
+
+        // Set in configChanges.
+        configChanges = 0x0003; // 00000011.
+        recreateOnConfigChanges = 0X0000; // 00000000.
+        finalConfigChanges =
+                PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges);
+        assertEquals(0x0003, finalConfigChanges); // Should be 00000011.
+
+        recreateOnConfigChanges = 0x0003; // 00000011.
+        finalConfigChanges =
+                PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges);
+        assertEquals(0x0003, finalConfigChanges); // Should still be 00000011.
+
+        // Other bit set in configChanges.
+        configChanges = 0x0080; // 10000000, orientation.
+        recreateOnConfigChanges = 0x0000; // 00000000.
+        finalConfigChanges =
+                PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges);
+        assertEquals(0x0083, finalConfigChanges); // Should be 10000011.
+    }
+
+    /**
+     * Copies a specified {@code resourceId} to a file. Returns a non-null file if the copy
+     * succeeded, or {@code null} otherwise.
+     */
+    File copyRawResourceToFile(String baseName, int resourceId) throws Exception {
+        // Copy the resource to a file.
+        Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
+        InputStream is = context.getResources().openRawResource(resourceId);
+        File outFile = null;
+        try {
+            outFile = new File(context.getFilesDir(), baseName);
+            assertTrue(FileUtils.copyToFile(is, outFile));
+            return outFile;
+        } catch (Exception e) {
+            if (outFile != null) {
+                outFile.delete();
+            }
+
+            return null;
+        }
+    }
+
+    /**
+     * Attempts to parse a package.
+     *
+     * APKs are put into coretests/apks/packageparser_*.
+     *
+     * @param apkFileName   temporary file name to store apk extracted from resources
+     * @param apkResourceId identifier of the apk as a resource
+     */
+    ParsedPackage parsePackage(String apkFileName, int apkResourceId,
+            Function<ParsedPackage, ParsedPackage> converter) throws Exception {
+        // Copy the resource to a file.
+        File outFile = null;
+        try {
+            outFile = copyRawResourceToFile(apkFileName, apkResourceId);
+            return converter.apply(
+                    makeParser().parsePackage(outFile, 0 /* flags */, false));
+        } finally {
+            if (outFile != null) {
+                outFile.delete();
+            }
+        }
+    }
+
+    /**
+     * Asserts basic properties about a component.
+     */
+    private void assertComponent(String className, int numIntents, ParsedComponent component) {
+        assertEquals(className, component.getName());
+        assertEquals(numIntents, component.getIntents().size());
+    }
+
+    /**
+     * Asserts four regularly-named components of each type: one Activity, one Service, one
+     * Provider, and one Receiver.
+     *
+     * @param template templated string with %s subbed with Activity, Service, Provider, Receiver
+     */
+    private void assertOneComponentOfEachType(String template, AndroidPackage p) {
+        assertEquals(1, p.getActivities().size());
+        assertComponent(String.format(template, "Activity"),
+                0 /* intents */, p.getActivities().get(0));
+        assertEquals(1, p.getServices().size());
+        assertComponent(String.format(template, "Service"),
+                0 /* intents */, p.getServices().get(0));
+        assertEquals(1, p.getProviders().size());
+        assertComponent(String.format(template, "Provider"),
+                0 /* intents */, p.getProviders().get(0));
+        assertEquals(1, p.getReceivers().size());
+        assertComponent(String.format(template, "Receiver"),
+                0 /* intents */, p.getReceivers().get(0));
+    }
+
+    private void assertPermission(String name, int protectionLevel, ParsedPermission permission) {
+        assertEquals(name, permission.getName());
+        assertEquals(protectionLevel, permission.getProtection());
+    }
+
+    private void assertMetadata(Bundle b, String... keysAndValues) {
+        assertTrue("Odd number of elements in keysAndValues", (keysAndValues.length % 2) == 0);
+
+        assertNotNull(b);
+        assertEquals(keysAndValues.length / 2, b.size());
+
+        for (int i = 0; i < keysAndValues.length; i += 2) {
+            final String key = keysAndValues[i];
+            final String value = keysAndValues[i + 1];
+
+            assertEquals(value, b.getString(key));
+        }
+    }
+
+    // TODO Add a "_cached" test for testMultiPackageComponents() too, after fixing b/64295061.
+    // Package.writeToParcel can't handle circular package references.
+
+    @Test
+    public void testPackageWithComponents_no_cache() throws Exception {
+        checkPackageWithComponents(p -> p);
+    }
+
+    @Test
+    public void testPackageWithComponents_cached() throws Exception {
+        checkPackageWithComponents(p ->
+                PackageCacher.fromCacheEntryStatic(PackageCacher.toCacheEntryStatic(p)));
+    }
+
+    private void checkPackageWithComponents(
+            Function<ParsedPackage, ParsedPackage> converter) throws Exception {
+        ParsedPackage p = parsePackage(
+                "install_complete_package_info.apk", R.raw.install_complete_package_info,
+                converter);
+        String packageName = "com.android.frameworks.coretests.install_complete_package_info";
+
+        assertEquals(packageName, p.getPackageName());
+        assertEquals(1, p.getPermissions().size());
+        assertPermission(
+                "com.android.frameworks.coretests.install_complete_package_info.test_permission",
+                PermissionInfo.PROTECTION_NORMAL, p.getPermissions().get(0));
+
+        findAndRemoveAppDetailsActivity(p);
+
+        assertOneComponentOfEachType("com.android.frameworks.coretests.Test%s", p);
+
+        assertMetadata(p.getMetaData(),
+                "key1", "value1",
+                "key2", "this_is_app");
+        assertMetadata(p.getActivities().get(0).getMetaData(),
+                "key1", "value1",
+                "key2", "this_is_activity");
+        assertMetadata(p.getServices().get(0).getMetaData(),
+                "key1", "value1",
+                "key2", "this_is_service");
+        assertMetadata(p.getReceivers().get(0).getMetaData(),
+                "key1", "value1",
+                "key2", "this_is_receiver");
+        assertMetadata(p.getProviders().get(0).getMetaData(),
+                "key1", "value1",
+                "key2", "this_is_provider");
+
+    }
+
+    private void findAndRemoveAppDetailsActivity(ParsedPackage p) {
+        // Hidden "app details" activity is added to every package.
+        boolean foundAppDetailsActivity = false;
+        for (int i = 0; i < ArrayUtils.size(p.getActivities()); i++) {
+            if (p.getActivities().get(i).getClassName().equals(
+                    PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME)) {
+                foundAppDetailsActivity = true;
+                p.getActivities().remove(i);
+                break;
+            }
+        }
+        assertTrue("Did not find app details activity", foundAppDetailsActivity);
+    }
+
+    @Test
+    public void testPackageWithIntentFilters_no_cache() throws Exception {
+        checkPackageWithIntentFilters(p -> p);
+    }
+
+    @Test
+    public void testPackageWithIntentFilters_cached() throws Exception {
+        checkPackageWithIntentFilters(p ->
+                PackageCacher.fromCacheEntryStatic(PackageCacher.toCacheEntryStatic(p)));
+    }
+
+    private void checkPackageWithIntentFilters(
+            Function<ParsedPackage, ParsedPackage> converter) throws Exception {
+        ParsedPackage p = parsePackage(
+                "install_intent_filters.apk", R.raw.install_intent_filters,
+                converter);
+        String packageName = "com.android.frameworks.servicestests.install_intent_filters";
+
+        assertEquals(packageName, p.getPackageName());
+
+        findAndRemoveAppDetailsActivity(p);
+
+        assertEquals("Expected exactly one activity", 1, p.getActivities().size());
+        assertEquals("Expected exactly one intent filter",
+                1, p.getActivities().get(0).getIntents().size());
+        assertEquals("Expected exactly one mime group in intent filter",
+                1, p.getActivities().get(0).getIntents().get(0).countMimeGroups());
+        assertTrue("Did not find expected mime group 'mime_group_1'",
+                p.getActivities().get(0).getIntents().get(0).hasMimeGroup("mime_group_1"));
+    }
+
+    @Test
+    public void testApexPackageInfoGeneration() throws Exception {
+        String apexModuleName = "com.android.tzdata.apex";
+        File apexFile = copyRawResourceToFile(apexModuleName,
+                R.raw.com_android_tzdata);
+        ApexInfo apexInfo = new ApexInfo();
+        apexInfo.isActive = true;
+        apexInfo.isFactory = false;
+        apexInfo.moduleName = apexModuleName;
+        apexInfo.modulePath = apexFile.getPath();
+        apexInfo.versionCode = 191000070;
+        int flags = PackageManager.GET_META_DATA | PackageManager.GET_SIGNING_CERTIFICATES;
+
+        PackageParser pp = new PackageParser();
+        PackageParser.Package p = pp.parsePackage(apexFile, flags, false);
+        PackageParser.collectCertificates(p, false);
+        PackageInfo pi = PackageParser.generatePackageInfo(p, apexInfo, flags);
+
+        assertEquals("com.google.android.tzdata", pi.applicationInfo.packageName);
+        assertTrue(pi.applicationInfo.enabled);
+        assertEquals(28, pi.applicationInfo.targetSdkVersion);
+        assertEquals(191000070, pi.applicationInfo.longVersionCode);
+        assertNotNull(pi.applicationInfo.metaData);
+        assertEquals(apexFile.getPath(), pi.applicationInfo.sourceDir);
+        assertEquals("Bundle[{com.android.vending.derived.apk.id=1}]",
+                pi.applicationInfo.metaData.toString());
+
+        assertEquals("com.google.android.tzdata", pi.packageName);
+        assertEquals(191000070, pi.getLongVersionCode());
+        assertNotNull(pi.signingInfo);
+        assertTrue(pi.signingInfo.getApkContentsSigners().length > 0);
+        assertTrue(pi.isApex);
+        assertTrue((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0);
+        assertTrue((pi.applicationInfo.flags & ApplicationInfo.FLAG_INSTALLED) != 0);
+    }
+
+    @Test
+    public void testUsesSdk() throws Exception {
+        parsePackage("install_uses_sdk.apk_r0", R.raw.install_uses_sdk_r0, x -> x);
+        try {
+            parsePackage("install_uses_sdk.apk_r5", R.raw.install_uses_sdk_r5, x -> x);
+            fail("Expected parsing exception due to incompatible extension SDK version");
+        } catch (PackageParser.PackageParserException expected) {
+            assertEquals(PackageManager.INSTALL_FAILED_OLDER_SDK, expected.error);
+        }
+        try {
+            parsePackage("install_uses_sdk.apk_q0", R.raw.install_uses_sdk_q0, x -> x);
+            fail("Expected parsing exception due to non-existent extension SDK");
+        } catch (PackageParser.PackageParserException expected) {
+            assertEquals(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, expected.error);
+        }
+        try {
+            parsePackage("install_uses_sdk.apk_r", R.raw.install_uses_sdk_r, x -> x);
+            fail("Expected parsing exception due to unspecified extension SDK version");
+        } catch (PackageParser.PackageParserException expected) {
+            assertEquals(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, expected.error);
+        }
+        try {
+            parsePackage("install_uses_sdk.apk_0", R.raw.install_uses_sdk_0, x -> x);
+            fail("Expected parsing exception due to unspecified extension SDK");
+        } catch (PackageParser.PackageParserException expected) {
+            assertEquals(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, expected.error);
+        }
+
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidHidlUpdaterTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidHidlUpdaterTest.java
new file mode 100644
index 0000000..6b60042
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidHidlUpdaterTest.java
@@ -0,0 +1,194 @@
+/*
+ * 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.parsing.library;
+
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_HIDL_BASE;
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_HIDL_MANAGER;
+
+import android.os.Build;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * Test for {@link com.android.server.pm.parsing.library.AndroidHidlUpdater}
+ */
+@Presubmit
+@SmallTest
+@RunWith(JUnit4.class)
+public class AndroidHidlUpdaterTest extends PackageSharedLibraryUpdaterTest {
+
+    private static final String OTHER_LIBRARY = "other.library";
+
+    @Test
+    public void targeted_at_P() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.P)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.P)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // no change, not system
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_P_system() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.P)
+                .hideAsParsed())
+                .setSystem(true);
+
+        // Should add both HIDL libraries
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.P)
+                .addUsesLibrary(ANDROID_HIDL_MANAGER)
+                .addUsesLibrary(ANDROID_HIDL_BASE)
+                .hideAsParsed())
+                .setSystem(true)
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_P_not_empty_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.P)
+                .addUsesLibrary(OTHER_LIBRARY)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.P)
+                .addUsesLibrary(OTHER_LIBRARY)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // no change, not system
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_P_not_empty_usesLibraries_system() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.P)
+                .addUsesLibrary(OTHER_LIBRARY)
+                .hideAsParsed())
+                .setSystem(true);
+
+        // The hidl jars should be added at the start of the list because it
+        // is not on the bootclasspath and the package targets pre-P.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.P)
+                .addUsesLibrary(ANDROID_HIDL_MANAGER)
+                .addUsesLibrary(ANDROID_HIDL_BASE)
+                .addUsesLibrary(OTHER_LIBRARY)
+                .hideAsParsed())
+                .setSystem(true)
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_P_in_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.P)
+                .addUsesLibrary(ANDROID_HIDL_MANAGER)
+                .addUsesLibrary(ANDROID_HIDL_BASE)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.P)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // Libraries are removed because they are not available for non-system apps
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_P_in_usesLibraries_system() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.P)
+                .addUsesLibrary(ANDROID_HIDL_MANAGER)
+                .addUsesLibrary(ANDROID_HIDL_BASE)
+                .hideAsParsed())
+                .setSystem(true);
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.P)
+                .addUsesLibrary(ANDROID_HIDL_MANAGER)
+                .addUsesLibrary(ANDROID_HIDL_BASE)
+                .hideAsParsed())
+                .setSystem(true)
+                .hideAsFinal();
+
+        // No change is required because the package explicitly requests the HIDL libraries
+        // and is targeted at the current version so does not need backwards compatibility.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void in_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesLibrary(ANDROID_HIDL_BASE)
+                .hideAsParsed());
+
+        // Dependency is removed, it is not available.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // Libraries are removed because they are not available for apps targeting Q+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void in_usesOptionalLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesOptionalLibrary(ANDROID_HIDL_BASE)
+                .hideAsParsed());
+
+        // Dependency is removed, it is not available.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // Libraries are removed because they are not available for apps targeting Q+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
+        checkBackwardsCompatibility(before, after, AndroidHidlUpdater::new);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidTestBaseUpdaterTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidTestBaseUpdaterTest.java
new file mode 100644
index 0000000..f536052
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidTestBaseUpdaterTest.java
@@ -0,0 +1,154 @@
+/*
+ * 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.parsing.library;
+
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_BASE;
+
+import android.os.Build;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test for {@link AndroidTestBaseUpdater}
+ */
+@Presubmit
+@SmallTest
+@RunWith(OptionalClassRunner.class)
+@OptionalClassRunner.OptionalClass("com.android.server.pm.parsing.library.AndroidTestBaseUpdater")
+public class AndroidTestBaseUpdaterTest extends PackageSharedLibraryUpdaterTest {
+
+    private static final String OTHER_LIBRARY = "other.library";
+
+    @Test
+    public void targeted_at_Q() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.Q)
+                .hideAsParsed());
+
+        // Should add org.apache.http.legacy.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.Q)
+                .addUsesLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_Q_not_empty_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.Q)
+                .addUsesLibrary(OTHER_LIBRARY)
+                .hideAsParsed());
+
+        // The org.apache.http.legacy jar should be added at the start of the list because it
+        // is not on the bootclasspath and the package targets pre-Q.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.Q)
+                .addUsesLibrary(ANDROID_TEST_BASE)
+                .addUsesLibrary(OTHER_LIBRARY)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_Q_in_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.Q)
+                .addUsesLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.Q)
+                .addUsesLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // No change is required because although org.apache.http.legacy has been removed from
+        // the bootclasspath the package explicitly requests it.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_Q_in_usesOptionalLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.Q)
+                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.Q)
+                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // No change is required because although org.apache.http.legacy has been removed from
+        // the bootclasspath the package explicitly requests it.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void in_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // No change is required because the package explicitly requests org.apache.http.legacy
+        // and is targeted at the current version so does not need backwards compatibility.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void in_usesOptionalLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // No change is required because the package explicitly requests org.apache.http.legacy
+        // and is targeted at the current version so does not need backwards compatibility.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
+        checkBackwardsCompatibility(before, after, AndroidTestBaseUpdater::new);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidTestRunnerSplitUpdaterTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidTestRunnerSplitUpdaterTest.java
new file mode 100644
index 0000000..77197e3
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/library/AndroidTestRunnerSplitUpdaterTest.java
@@ -0,0 +1,82 @@
+/*
+ * 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.pm.parsing.library;
+
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_MOCK;
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_RUNNER;
+
+import android.os.Build;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.server.pm.parsing.library.PackageBackwardCompatibility.AndroidTestRunnerSplitUpdater;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * Test for {@link AndroidTestRunnerSplitUpdater}
+ */
+@Presubmit
+@SmallTest
+@RunWith(JUnit4.class)
+public class AndroidTestRunnerSplitUpdaterTest extends PackageSharedLibraryUpdaterTest {
+
+    @Test
+    public void android_test_runner_in_usesOptionalLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesOptionalLibrary(ANDROID_TEST_RUNNER)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesOptionalLibrary(ANDROID_TEST_MOCK)
+                .addUsesOptionalLibrary(ANDROID_TEST_RUNNER)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void android_test_runner_in_usesLibraries_android_test_mock_in_usesOptionalLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesLibrary(ANDROID_TEST_RUNNER)
+                .addUsesOptionalLibrary(ANDROID_TEST_MOCK)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesLibrary(ANDROID_TEST_RUNNER)
+                .addUsesOptionalLibrary(ANDROID_TEST_MOCK)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
+        checkBackwardsCompatibility(before, after, AndroidTestRunnerSplitUpdater::new);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/OptionalClassRunner.java b/services/tests/servicestests/src/com/android/server/pm/parsing/library/OptionalClassRunner.java
new file mode 100644
index 0000000..0ebfe1a
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/library/OptionalClassRunner.java
@@ -0,0 +1,142 @@
+/*
+ * 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.pm.parsing.library;
+
+import org.junit.Assume;
+import org.junit.runner.Description;
+import org.junit.runner.Runner;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.JUnit4;
+import org.junit.runners.ParentRunner;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.Statement;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Will run a test class, iff a class, specified by name in the {@link OptionalClass} annotation,
+ * exists on the class path.
+ *
+ * <p>It is an {@link InitializationError} if no {@link OptionalClass} annotation is specified on
+ * the class that has {@code @RunWith(OptionalClassRunner.class)}.
+ *
+ * <p>If the named class cannot be found then the test class is reported as having been ignored.
+ */
+public class OptionalClassRunner extends Runner {
+
+    private final Runner mDelegate;
+
+    public OptionalClassRunner(Class<?> testClass) throws InitializationError {
+        OptionalClass annotation = testClass.getAnnotation(OptionalClass.class);
+        if (annotation == null) {
+            throw new InitializationError(
+                    "No " + OptionalClass.class.getName() + " annotation found on " + testClass);
+        }
+
+        String className = annotation.value();
+        Runner delegate;
+        try {
+            Class.forName(className);
+            // The class could be found so create a JUnit4 delegate for the class to run.
+            delegate = new JUnit4(testClass);
+        } catch (ClassNotFoundException e) {
+            // The class could not be found so create a Runner delegate that will treat the
+            // test as having failed a test assumption.
+            delegate = new ClassNotFoundRunner(testClass, className);
+        }
+
+        this.mDelegate = delegate;
+    }
+
+    @Override
+    public Description getDescription() {
+        return mDelegate.getDescription();
+    }
+
+    @Override
+    public void run(RunNotifier notifier) {
+        mDelegate.run(notifier);
+    }
+
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target(ElementType.TYPE)
+    public @interface OptionalClass {
+        String value();
+    }
+
+    /**
+     * Emulates a class containing a single test that fails due to an invalid assumption caused by
+     * the missing class.
+     */
+    private static class ClassNotFoundRunner extends ParentRunner<Runner> {
+
+        private List<Runner> mChildren;
+
+        ClassNotFoundRunner(Class<?> testClass, String className)
+                throws InitializationError {
+            super(testClass);
+            this.mChildren = Collections.singletonList(new ChildRunner(testClass, className));
+        }
+
+        @Override
+        protected List<Runner> getChildren() {
+            return mChildren;
+        }
+
+        @Override
+        protected Description describeChild(Runner child) {
+            return child.getDescription();
+        }
+
+        @Override
+        protected void runChild(Runner child, RunNotifier notifier) {
+            child.run(notifier);
+        }
+
+        private class ChildRunner extends Runner {
+
+            private final Class<?> mTestClass;
+
+            private final String mClassName;
+
+            ChildRunner(Class<?> testClass, String className) {
+                this.mTestClass = testClass;
+                this.mClassName = className;
+            }
+
+            @Override
+            public Description getDescription() {
+                return Description.createTestDescription(mTestClass, "classNotFound");
+            }
+
+            @Override
+            public void run(RunNotifier notifier) {
+                runLeaf(new Statement() {
+                    @Override
+                    public void evaluate() throws Throwable {
+                        Assume.assumeTrue("Could not find class: " + mClassName, false);
+                    }
+                }, getDescription(), notifier);
+            }
+        }
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/OrgApacheHttpLegacyUpdaterTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/library/OrgApacheHttpLegacyUpdaterTest.java
new file mode 100644
index 0000000..95b8d3f
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/library/OrgApacheHttpLegacyUpdaterTest.java
@@ -0,0 +1,154 @@
+/*
+ * 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.pm.parsing.library;
+
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY;
+
+import android.os.Build;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test for {@link com.android.server.pm.parsing.library.OrgApacheHttpLegacyUpdater}
+ */
+@Presubmit
+@SmallTest
+@RunWith(OptionalClassRunner.class)
+@OptionalClassRunner.OptionalClass("com.android.server.pm.parsing.library.OrgApacheHttpLegacyUpdater")
+public class OrgApacheHttpLegacyUpdaterTest extends PackageSharedLibraryUpdaterTest {
+
+    private static final String OTHER_LIBRARY = "other.library";
+
+    @Test
+    public void targeted_at_O() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .hideAsParsed());
+
+        // Should add org.apache.http.legacy.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_O_not_empty_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesLibrary(OTHER_LIBRARY)
+                .hideAsParsed());
+
+        // The org.apache.http.legacy jar should be added at the start of the list because it
+        // is not on the bootclasspath and the package targets pre-P.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
+                .addUsesLibrary(OTHER_LIBRARY)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_O_in_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // No change is required because although org.apache.http.legacy has been removed from
+        // the bootclasspath the package explicitly requests it.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_O_in_usesOptionalLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // No change is required because although org.apache.http.legacy has been removed from
+        // the bootclasspath the package explicitly requests it.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void in_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // No change is required because the package explicitly requests org.apache.http.legacy
+        // and is targeted at the current version so does not need backwards compatibility.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void in_usesOptionalLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // No change is required because the package explicitly requests org.apache.http.legacy
+        // and is targeted at the current version so does not need backwards compatibility.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
+        checkBackwardsCompatibility(before, after, OrgApacheHttpLegacyUpdater::new);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageBackwardCompatibilityTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageBackwardCompatibilityTest.java
new file mode 100644
index 0000000..ca38860
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageBackwardCompatibilityTest.java
@@ -0,0 +1,154 @@
+/*
+ * 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.pm.parsing.library;
+
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_BASE;
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_MOCK;
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_RUNNER;
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY;
+
+import android.content.pm.parsing.ParsingPackage;
+import android.os.Build;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.server.pm.parsing.library.PackageBackwardCompatibility.RemoveUnnecessaryAndroidTestBaseLibrary;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import org.junit.Assume;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@Presubmit
+@SmallTest
+@RunWith(JUnit4.class)
+public class PackageBackwardCompatibilityTest extends PackageSharedLibraryUpdaterTest {
+
+    @Test
+    public void null_usesLibraries_and_usesOptionalLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    /**
+     * Detect when the android.test.base is not on the bootclasspath.
+     *
+     * <p>This test will be ignored when org.apache.http.legacy is not on the bootclasspath and
+     * succeed otherwise. This allows a developer to ensure that the tests are being run in the
+     * correct environment.
+     */
+    @Test
+    public void detectWhenATBisOnBCP() {
+        Assume.assumeTrue(PackageBackwardCompatibility.bootClassPathContainsATB());
+    }
+
+    /**
+     * Ensures that the {@link PackageBackwardCompatibility} uses {@link OrgApacheHttpLegacyUpdater}
+     * and {@link AndroidTestBaseUpdater} when necessary.
+     *
+     * <p>More comprehensive tests for that class can be found in
+     * {@link OrgApacheHttpLegacyUpdaterTest}.
+     */
+    @Test
+    public void targeted_at_O() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .hideAsParsed());
+
+        ParsingPackage after = PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .setTargetSdkVersion(Build.VERSION_CODES.O);
+
+        if (!PackageBackwardCompatibility.bootClassPathContainsATB()) {
+            after.addUsesLibrary(ANDROID_TEST_BASE);
+        }
+        after.addUsesLibrary(ORG_APACHE_HTTP_LEGACY);
+
+        checkBackwardsCompatibility(before, ((ParsedPackage) after.hideAsParsed()).hideAsFinal());
+    }
+
+    /**
+     * Ensures that the {@link PackageBackwardCompatibility} uses
+     * {@link RemoveUnnecessaryAndroidTestBaseLibrary}
+     * when necessary.
+     *
+     * <p>More comprehensive tests for that class can be found in
+     * {@link RemoveUnnecessaryAndroidTestBaseLibraryTest}.
+     */
+    @Test
+    public void android_test_base_in_usesLibraries() {
+        Assume.assumeTrue("Test requires that "
+                        + ANDROID_TEST_BASE + " is on the bootclasspath",
+                PackageBackwardCompatibility.bootClassPathContainsATB());
+
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed());
+
+        // android.test.base should be removed from the libraries because it is provided
+        // on the bootclasspath and providing both increases start up cost unnecessarily.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    /**
+     * Ensures that the {@link PackageBackwardCompatibility} uses a
+     * {@link PackageBackwardCompatibility.AndroidTestRunnerSplitUpdater}.
+     *
+     * <p>More comprehensive tests for that class can be found in
+     * {@link AndroidTestRunnerSplitUpdaterTest}.
+     */
+    @Test
+    public void android_test_runner_in_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesLibrary(ANDROID_TEST_RUNNER)
+                .hideAsParsed());
+
+        ParsingPackage after = PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT);
+        if (!PackageBackwardCompatibility.bootClassPathContainsATB()) {
+            after.addUsesLibrary(ANDROID_TEST_BASE);
+        }
+        after.addUsesLibrary(ANDROID_TEST_MOCK);
+        after.addUsesLibrary(ANDROID_TEST_RUNNER);
+
+        checkBackwardsCompatibility(before, ((ParsedPackage) after.hideAsParsed()).hideAsFinal());
+    }
+
+    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
+        checkBackwardsCompatibility(before, after, PackageBackwardCompatibility::getInstance);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageSharedLibraryUpdaterTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageSharedLibraryUpdaterTest.java
new file mode 100644
index 0000000..a71572f
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageSharedLibraryUpdaterTest.java
@@ -0,0 +1,50 @@
+/*
+ * 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.pm.parsing.library;
+
+import static org.junit.Assert.assertEquals;
+
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import java.util.function.Supplier;
+
+/**
+ * Helper for classes that test {@link PackageSharedLibraryUpdater}.
+ */
+abstract class PackageSharedLibraryUpdaterTest {
+
+    protected static final String PACKAGE_NAME = "org.package.name";
+
+    static void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after,
+            Supplier<PackageSharedLibraryUpdater> updaterSupplier) {
+        updaterSupplier.get().updatePackage(before, false);
+        check(before.hideAsFinal(), after);
+    }
+
+    private static void check(AndroidPackage before, AndroidPackage after) {
+        assertEquals("targetSdkVersion should not be changed",
+                after.getTargetSdkVersion(),
+                before.getTargetSdkVersion());
+        assertEquals("usesLibraries not updated correctly",
+                after.getUsesLibraries(),
+                before.getUsesLibraries());
+        assertEquals("usesOptionalLibraries not updated correctly",
+                after.getUsesOptionalLibraries(),
+                before.getUsesOptionalLibraries());
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/RemoveUnnecessaryAndroidTestBaseLibraryTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/library/RemoveUnnecessaryAndroidTestBaseLibraryTest.java
new file mode 100644
index 0000000..1122490
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/library/RemoveUnnecessaryAndroidTestBaseLibraryTest.java
@@ -0,0 +1,172 @@
+/*
+ * 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.pm.parsing.library;
+
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_BASE;
+
+import android.os.Build;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.server.pm.parsing.library.PackageBackwardCompatibility.RemoveUnnecessaryAndroidTestBaseLibrary;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * Test for {@link RemoveUnnecessaryAndroidTestBaseLibrary}
+ */
+@Presubmit
+@SmallTest
+@RunWith(JUnit4.class)
+public class RemoveUnnecessaryAndroidTestBaseLibraryTest
+        extends PackageSharedLibraryUpdaterTest {
+
+    private static final String OTHER_LIBRARY = "other.library";
+
+    @Test
+    public void targeted_at_O() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // No change required.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_O_not_empty_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesLibrary(OTHER_LIBRARY)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesLibrary(OTHER_LIBRARY)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // No change required.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_O_in_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed());
+
+        // android.test.base should be removed from the libraries because it is provided
+        // on the bootclasspath and providing both increases start up cost unnecessarily.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_O_in_usesOptionalLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed());
+
+        // android.test.base should be removed from the libraries because it is provided
+        // on the bootclasspath and providing both increases start up cost unnecessarily.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void in_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .addUsesLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed());
+
+        // android.test.base should be removed from the libraries because it is provided
+        // on the bootclasspath and providing both increases start up cost unnecessarily.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void in_usesOptionalLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed());
+
+        // android.test.base should be removed from the libraries because it is provided
+        // on the bootclasspath and providing both increases start up cost unnecessarily.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void in_bothLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesLibrary(ANDROID_TEST_BASE)
+                .addUsesOptionalLibrary(ANDROID_TEST_BASE)
+                .hideAsParsed());
+
+        // android.test.base should be removed from the libraries because it is provided
+        // on the bootclasspath and providing both increases start up cost unnecessarily.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
+        // TODO(b/72538146) - Cannot use constructor reference here because it is also used in
+        // PackageBackwardCompatibility and that seems to create a package-private lambda in
+        // android.content.pm which this then tries to reuse but fails because it cannot access
+        // package-private classes/members because the test is loaded by a different ClassLoader
+        // than the lambda.
+        checkBackwardsCompatibility(before, after,
+                () -> new RemoveUnnecessaryAndroidTestBaseLibrary());
+    }
+
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/library/RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest.java
new file mode 100644
index 0000000..3cc8475
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/library/RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest.java
@@ -0,0 +1,173 @@
+/*
+ * 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.pm.parsing.library;
+
+import static com.android.server.pm.parsing.library.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY;
+
+import android.os.Build;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.server.pm.parsing.library.PackageBackwardCompatibility.RemoveUnnecessaryOrgApacheHttpLegacyLibrary;
+import com.android.server.pm.parsing.pkg.AndroidPackage;
+import com.android.server.pm.parsing.pkg.PackageImpl;
+import com.android.server.pm.parsing.pkg.ParsedPackage;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * Test for {@link RemoveUnnecessaryOrgApacheHttpLegacyLibrary}
+ */
+@Presubmit
+@SmallTest
+@RunWith(JUnit4.class)
+public class RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest
+        extends PackageSharedLibraryUpdaterTest {
+
+    private static final String OTHER_LIBRARY = "other.library";
+
+    @Test
+    public void targeted_at_O() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // No change required.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_O_not_empty_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesLibrary(OTHER_LIBRARY)
+                .hideAsParsed());
+
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesLibrary(OTHER_LIBRARY)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        // No change required.
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_O_in_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed());
+
+        // org.apache.http.legacy should be removed from the libraries because it is provided
+        // on the bootclasspath and providing both increases start up cost unnecessarily.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void targeted_at_O_in_usesOptionalLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed());
+
+        // org.apache.http.legacy should be removed from the libraries because it is provided
+        // on the bootclasspath and providing both increases start up cost unnecessarily.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.O)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void in_usesLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed());
+
+        // org.apache.http.legacy should be removed from the libraries because it is provided
+        // on the bootclasspath and providing both increases start up cost unnecessarily.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void in_usesOptionalLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed());
+
+        // org.apache.http.legacy should be removed from the libraries because it is provided
+        // on the bootclasspath and providing both increases start up cost unnecessarily.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    @Test
+    public void in_bothLibraries() {
+        ParsedPackage before = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .addUsesLibrary(ORG_APACHE_HTTP_LEGACY)
+                .addUsesOptionalLibrary(ORG_APACHE_HTTP_LEGACY)
+                .hideAsParsed());
+
+        // org.apache.http.legacy should be removed from the libraries because it is provided
+        // on the bootclasspath and providing both increases start up cost unnecessarily.
+        AndroidPackage after = ((ParsedPackage) PackageImpl.forTesting(PACKAGE_NAME)
+                .setTargetSdkVersion(Build.VERSION_CODES.CUR_DEVELOPMENT)
+                .hideAsParsed())
+                .hideAsFinal();
+
+        checkBackwardsCompatibility(before, after);
+    }
+
+    private void checkBackwardsCompatibility(ParsedPackage before, AndroidPackage after) {
+        // TODO(b/72538146) - Cannot use constructor reference here because it is also used in
+        // PackageBackwardCompatibility and that seems to create a package-private lambda in
+        // android.content.pm which this then tries to reuse but fails because it cannot access
+        // package-private classes/members because the test is loaded by a different ClassLoader
+        // than the lambda.
+        checkBackwardsCompatibility(before, after,
+                () -> new RemoveUnnecessaryOrgApacheHttpLegacyLibrary());
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java b/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java
index 642cedb..c4289ef 100644
--- a/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java
@@ -92,18 +92,18 @@
         mNextDimming = SystemClock.uptimeMillis() + 3000L;
 
         // Save the existing state.
-        mIsSettingEnabled = Settings.System.getIntForUser(getContext().getContentResolver(),
-                Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT);
+        mIsSettingEnabled = Settings.Secure.getIntForUser(getContext().getContentResolver(),
+                Settings.Secure.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT);
 
-        Settings.System.putIntForUser(getContext().getContentResolver(),
-                Settings.System.ADAPTIVE_SLEEP, 1, UserHandle.USER_CURRENT);
+        Settings.Secure.putIntForUser(getContext().getContentResolver(),
+                Settings.Secure.ADAPTIVE_SLEEP, 1, UserHandle.USER_CURRENT);
         mAttentionDetector.updateEnabledFromSettings(getContext());
     }
 
     @After
     public void tearDown() {
-        Settings.System.putIntForUser(getContext().getContentResolver(),
-                Settings.System.ADAPTIVE_SLEEP, mIsSettingEnabled, UserHandle.USER_CURRENT);
+        Settings.Secure.putIntForUser(getContext().getContentResolver(),
+                Settings.Secure.ADAPTIVE_SLEEP, mIsSettingEnabled, UserHandle.USER_CURRENT);
 
         DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                 KEY_PRE_DIM_CHECK_DURATION_MILLIS,
@@ -122,8 +122,8 @@
 
     @Test
     public void testOnUserActivity_doesntCheckIfNotEnabled() {
-        Settings.System.putIntForUser(getContext().getContentResolver(),
-                Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT);
+        Settings.Secure.putIntForUser(getContext().getContentResolver(),
+                Settings.Secure.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT);
         mAttentionDetector.updateEnabledFromSettings(getContext());
         long when = registerAttention();
         verify(mAttentionManagerInternal, never()).checkAttention(anyLong(), any());
@@ -163,8 +163,8 @@
                 PackageManager.PERMISSION_DENIED);
 
         registerAttention();
-        boolean enabled = Settings.System.getIntForUser(getContext().getContentResolver(),
-                Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT) == 1;
+        boolean enabled = Settings.Secure.getIntForUser(getContext().getContentResolver(),
+                Settings.Secure.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT) == 1;
         assertFalse(enabled);
     }
 
diff --git a/services/tests/servicestests/src/com/android/server/power/NotifierTest.java b/services/tests/servicestests/src/com/android/server/power/NotifierTest.java
index 7666ab9..1c2d8e8 100644
--- a/services/tests/servicestests/src/com/android/server/power/NotifierTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/NotifierTest.java
@@ -45,6 +45,7 @@
 import com.android.internal.os.BatteryStatsImpl;
 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;
@@ -61,6 +62,7 @@
     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;
@@ -223,6 +225,13 @@
         }
 
         @Override
+        BatterySaverController createBatterySaverController(
+                Object lock, Context context, BatterySaverPolicy batterySaverPolicy,
+                BatterySavingStats batterySavingStats) {
+            return mBatterySaverControllerMock;
+        }
+
+        @Override
         PowerManagerService.NativeWrapper createNativeWrapper() {
             return mNativeWrapperMock;
         }
@@ -247,6 +256,11 @@
         public SystemPropertiesWrapper createSystemPropertiesWrapper() {
             return mSystemPropertiesMock;
         }
+
+        @Override
+        void invalidateIsInteractiveCaches() {
+            // Avoids an SELinux denial.
+        }
     };
 
     private void enableChargingFeedback(boolean chargingFeedbackEnabled, boolean dndOn) {
diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
index 6eef41a..0ee2f55 100644
--- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
@@ -65,6 +65,7 @@
 import android.os.UserHandle;
 import android.platform.test.annotations.FlakyTest;
 import android.provider.Settings;
+import android.service.dreams.DreamManagerInternal;
 import android.test.mock.MockContentResolver;
 import android.view.Display;
 
@@ -80,6 +81,7 @@
 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.BatterySavingStats;
 
@@ -105,12 +107,14 @@
     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 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;
@@ -171,6 +175,7 @@
         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());
@@ -204,6 +209,13 @@
             }
 
             @Override
+            BatterySaverController createBatterySaverController(
+                    Object lock, Context context, BatterySaverPolicy batterySaverPolicy,
+                    BatterySavingStats batterySavingStats) {
+                return mBatterySaverControllerMock;
+            }
+
+            @Override
             NativeWrapper createNativeWrapper() {
                 return mNativeWrapperMock;
             }
@@ -228,6 +240,11 @@
             public SystemPropertiesWrapper createSystemPropertiesWrapper() {
                 return mSystemPropertiesMock;
             }
+
+            @Override
+            void invalidateIsInteractiveCaches() {
+                // Avoids an SELinux failure.
+            }
         });
         return mService;
     }
@@ -366,7 +383,7 @@
     @Test
     public void testWakefulnessAwake_InitialValue() throws Exception {
         createService();
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
     }
 
     @Test
@@ -374,12 +391,12 @@
         createService();
         // Start with AWAKE state
         startSystem();
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
 
         // Take a nap and verify.
         mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(),
                 PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
     }
 
     @Test
@@ -396,21 +413,21 @@
         int flags = PowerManager.FULL_WAKE_LOCK;
         mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
                 null /* workSource */, null /* historyTag */);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked()).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 */);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked()).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 */);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
         mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
     }
 
@@ -421,7 +438,7 @@
         forceSleep();
         mService.getBinderServiceInstance().wakeUp(SystemClock.uptimeMillis(),
                 PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name");
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
     }
 
     /**
@@ -442,7 +459,7 @@
                 .thenReturn(false);
         mService.readConfigurationLocked();
         setPluggedIn(true);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
         when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
                 .thenReturn(true);
         mService.readConfigurationLocked();
@@ -457,20 +474,20 @@
         when(mWirelessChargerDetectorMock.update(true /* isPowered */,
                 BatteryManager.BATTERY_PLUGGED_WIRELESS)).thenReturn(false);
         setPluggedIn(true);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked()).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.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked()).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.getWakefulness()).isEqualTo(WAKEFULNESS_DREAMING);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
         forceSleep();
 
         // Test 5:
@@ -483,7 +500,7 @@
                 com.android.internal.R.bool.config_allowTheaterModeWakeFromUnplug))
                 .thenReturn(false);
         setPluggedIn(false);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
         Settings.Global.putInt(
                 mContextSpy.getContentResolver(), Settings.Global.THEATER_MODE_ON, 0);
         mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
@@ -496,14 +513,14 @@
         forceAwake();
         forceDozing();
         setPluggedIn(true);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_DOZING);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
 
         // Test 7:
         // Finally, take away all the factors above and ensure the device wakes up!
         forceAwake();
         forceSleep();
         setPluggedIn(false);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
     }
 
     @Test
@@ -511,12 +528,12 @@
         createService();
         // Start with AWAKE state
         startSystem();
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
 
         // Take a nap and verify.
         mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(),
                 PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_DOZING);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
     }
 
     @Test
@@ -543,12 +560,12 @@
         mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
 
         // Verify that we start awake
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked()).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.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+            assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
             return true;
         });
 
@@ -556,7 +573,7 @@
         assertThat(retval).isTrue();
 
         // Still asleep when the function returns.
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
     }
 
     @Test
@@ -589,7 +606,7 @@
         mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
 
         // Verify that we start awake
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
 
         // Create a wakelock
         mService.getBinderServiceInstance().acquireWakeLock(new Binder(), flags, tag, pkg,
@@ -644,16 +661,17 @@
 
         // Start with AWAKE state
         startSystem();
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked()).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 */);
+        when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
         mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(),
                 PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_DOZING);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
         assertFalse(isAcquired[0]);
 
         // Override the display state by DreamManager and verify is reacquires the blocker.
@@ -732,8 +750,8 @@
         setAttentiveTimeout(5);
         createService();
         startSystem();
-        SystemClock.sleep(8);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+        SystemClock.sleep(20);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
     }
 
     @FlakyTest
@@ -753,7 +771,7 @@
                 null /* workSource */, null /* historyTag */);
 
         SystemClock.sleep(11);
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
     }
 
     @Test
@@ -761,7 +779,7 @@
         createService();
         startSystem();
 
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
         verify(mNotifierMock, never()).onWakefulnessChangeStarted(anyInt(), anyInt(), anyLong());
     }
 
@@ -780,7 +798,7 @@
         createService();
         startSystem();
 
-        assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
         verify(mNotifierMock).onWakefulnessChangeStarted(eq(WAKEFULNESS_ASLEEP), anyInt(),
                 anyLong());
     }
diff --git a/services/tests/servicestests/src/com/android/server/power/PreRebootLoggerTest.java b/services/tests/servicestests/src/com/android/server/power/PreRebootLoggerTest.java
new file mode 100644
index 0000000..a138234
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/power/PreRebootLoggerTest.java
@@ -0,0 +1,97 @@
+/*
+ * 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 androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.test.mock.MockContentResolver;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.internal.util.test.FakeSettingsProvider;
+
+import com.google.common.io.Files;
+
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.File;
+
+/**
+ * Tests for {@link PreRebootLogger}
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class PreRebootLoggerTest {
+    @Mock Context mContext;
+    private MockContentResolver mContentResolver;
+    private File mDumpDir;
+
+    @BeforeClass
+    public static void setupOnce() {
+        FakeSettingsProvider.clearSettingsProvider();
+    }
+
+    @AfterClass
+    public static void tearDownOnce() {
+        FakeSettingsProvider.clearSettingsProvider();
+    }
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        mContentResolver = new MockContentResolver(getInstrumentation().getTargetContext());
+        when(mContext.getContentResolver()).thenReturn(mContentResolver);
+        mContentResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider());
+
+        mDumpDir = Files.createTempDir();
+        mDumpDir.mkdir();
+        mDumpDir.deleteOnExit();
+    }
+
+    @Test
+    public void log_adbEnabled_dumpsInformationProperly() {
+        Settings.Global.putInt(mContentResolver, Settings.Global.ADB_ENABLED, 1);
+
+        PreRebootLogger.log(mContext, mDumpDir);
+
+        assertThat(mDumpDir.list()).asList().containsExactly("system", "package", "rollback");
+    }
+
+    @Test
+    public void log_adbDisabled_wipesDumpedInformation() {
+        Settings.Global.putInt(mContentResolver, Settings.Global.ADB_ENABLED, 1);
+        PreRebootLogger.log(mContext, mDumpDir);
+        Settings.Global.putInt(mContentResolver, Settings.Global.ADB_ENABLED, 0);
+
+        PreRebootLogger.log(mContext, mDumpDir);
+
+        assertThat(mDumpDir.listFiles()).isEmpty();
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java
index ccf7ca9..624cb83 100644
--- a/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java
@@ -28,10 +28,12 @@
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
+import android.hardware.thermal.V2_0.TemperatureThreshold;
 import android.os.CoolingDevice;
 import android.os.IBinder;
 import android.os.IPowerManager;
 import android.os.IThermalEventListener;
+import android.os.IThermalService;
 import android.os.IThermalStatusListener;
 import android.os.PowerManager;
 import android.os.RemoteException;
@@ -72,6 +74,8 @@
     @Mock
     private IPowerManager mIPowerManagerMock;
     @Mock
+    private IThermalService mIThermalServiceMock;
+    @Mock
     private IThermalEventListener mEventListener1;
     @Mock
     private IThermalEventListener mEventListener2;
@@ -133,6 +137,12 @@
         }
 
         @Override
+        protected List<TemperatureThreshold> getTemperatureThresholds(boolean shouldFilter,
+                int type) {
+            return new ArrayList<>();
+        }
+
+        @Override
         protected boolean connectToHal() {
             return true;
         }
@@ -153,7 +163,7 @@
     public void setUp() throws RemoteException {
         MockitoAnnotations.initMocks(this);
         mFakeHal = new ThermalHalFake();
-        mPowerManager = new PowerManager(mContext, mIPowerManagerMock, null);
+        mPowerManager = new PowerManager(mContext, mIPowerManagerMock, mIThermalServiceMock, null);
         when(mContext.getSystemServiceName(PowerManager.class)).thenReturn(Context.POWER_SERVICE);
         when(mContext.getSystemService(PowerManager.class)).thenReturn(mPowerManager);
         resetListenerMock();
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 98cfc41..30ab9cd 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
@@ -78,6 +78,11 @@
             return mDeviceSpecificConfigResId;
         }
 
+        @Override
+        void invalidatePowerSaveModeCaches() {
+            // Avoids an SELinux denial.
+        }
+
         @VisibleForTesting
         void onChange() {
             onChange(true, null);
diff --git a/services/tests/servicestests/src/com/android/server/recoverysystem/RecoverySystemServiceTest.java b/services/tests/servicestests/src/com/android/server/recoverysystem/RecoverySystemServiceTest.java
index d5cdbeb..035a2f1 100644
--- a/services/tests/servicestests/src/com/android/server/recoverysystem/RecoverySystemServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/recoverysystem/RecoverySystemServiceTest.java
@@ -36,6 +36,7 @@
 import android.os.Handler;
 import android.os.IPowerManager;
 import android.os.IRecoverySystemProgressListener;
+import android.os.IThermalService;
 import android.os.Looper;
 import android.os.PowerManager;
 
@@ -62,6 +63,7 @@
     private RecoverySystemService.UncryptSocket mUncryptSocket;
     private Context mContext;
     private IPowerManager mIPowerManager;
+    private IThermalService mIThermalService;
     private FileWriter mUncryptUpdateFileWriter;
     private LockSettingsInternal mLockSettingsInternal;
 
@@ -77,8 +79,9 @@
 
         Looper looper = InstrumentationRegistry.getContext().getMainLooper();
         mIPowerManager = mock(IPowerManager.class);
+        mIThermalService = mock(IThermalService.class);
         PowerManager powerManager = new PowerManager(mock(Context.class), mIPowerManager,
-                new Handler(looper));
+                mIThermalService, new Handler(looper));
 
         mRecoverySystemService = new RecoverySystemServiceTestable(mContext, mSystemProperties,
                 powerManager, mUncryptUpdateFileWriter, mUncryptSocket, mLockSettingsInternal);
diff --git a/services/tests/servicestests/src/com/android/server/rollback/RollbackUnitTest.java b/services/tests/servicestests/src/com/android/server/rollback/RollbackUnitTest.java
index 804c1b9..1a6c6b4 100644
--- a/services/tests/servicestests/src/com/android/server/rollback/RollbackUnitTest.java
+++ b/services/tests/servicestests/src/com/android/server/rollback/RollbackUnitTest.java
@@ -224,21 +224,43 @@
     }
 
     @Test
-    public void snapshotThenDelete() {
+    public void snapshotThenDeleteNoApex() {
         Rollback rollback = new Rollback(123, new File("/test/testing"), -1, USER, INSTALLER);
         PackageRollbackInfo pkgInfo1 = newPkgInfoFor(PKG_1, 12, 10, false);
-        PackageRollbackInfo pkgInfo2 = newPkgInfoFor(PKG_2, 18, 12, true);
+        PackageRollbackInfo pkgInfo2 = newPkgInfoFor(PKG_2, 18, 12, false);
         rollback.info.getPackages().addAll(Arrays.asList(pkgInfo1, pkgInfo2));
 
-        int[] userIds = {12, 18};
+        int[] userIds = {111, 222};
         rollback.snapshotUserData(PKG_2, userIds, mMockDataHelper);
 
         verify(mMockDataHelper).snapshotAppData(eq(123), pkgRollbackInfoFor(PKG_2), eq(userIds));
 
         rollback.delete(mMockDataHelper);
 
-        verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(12));
-        verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(18));
+        verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(111));
+        verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(222));
+        verify(mMockDataHelper, never()).destroyApexDeSnapshots(anyInt());
+
+        assertThat(rollback.isDeleted()).isTrue();
+    }
+
+    @Test
+    public void snapshotThenDeleteWithApex() {
+        Rollback rollback = new Rollback(123, new File("/test/testing"), -1, USER, INSTALLER);
+        PackageRollbackInfo pkgInfo1 = newPkgInfoFor(PKG_1, 12, 10, false);
+        PackageRollbackInfo pkgInfo2 = newPkgInfoFor(PKG_2, 18, 12, true);
+        rollback.info.getPackages().addAll(Arrays.asList(pkgInfo1, pkgInfo2));
+
+        int[] userIds = {111, 222};
+        rollback.snapshotUserData(PKG_2, userIds, mMockDataHelper);
+
+        verify(mMockDataHelper).snapshotAppData(eq(123), pkgRollbackInfoFor(PKG_2), eq(userIds));
+
+        rollback.delete(mMockDataHelper);
+
+        verify(mMockDataHelper, never())
+                .destroyAppDataSnapshot(anyInt(), pkgRollbackInfoFor(PKG_2), anyInt());
+        verify(mMockDataHelper).destroyApexDeSnapshots(123);
 
         assertThat(rollback.isDeleted()).isTrue();
     }
diff --git a/services/tests/servicestests/src/com/android/server/rollback/WatchdogRollbackLoggerTest.java b/services/tests/servicestests/src/com/android/server/rollback/WatchdogRollbackLoggerTest.java
index ba493d4..d1c9643 100644
--- a/services/tests/servicestests/src/com/android/server/rollback/WatchdogRollbackLoggerTest.java
+++ b/services/tests/servicestests/src/com/android/server/rollback/WatchdogRollbackLoggerTest.java
@@ -20,7 +20,11 @@
 
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.same;
 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.content.Context;
@@ -36,6 +40,8 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.util.List;
+
 @RunWith(JUnit4.class)
 public class WatchdogRollbackLoggerTest {
 
@@ -46,6 +52,11 @@
     private PackageInfo mPackageInfo;
 
     private static final String LOGGING_PARENT_KEY = "android.content.pm.LOGGING_PARENT";
+    private static final String LOGGING_PARENT_VALUE = "logging.parent";
+    private static final int PACKAGE_INFO_FLAGS = PackageManager.MATCH_APEX
+            | PackageManager.GET_META_DATA;
+    private static final List<String> sFailingPackages =
+            List.of("package1", "package2", "package3");
 
     @Before
     public void setUp() {
@@ -64,10 +75,12 @@
      */
     @Test
     public void testLogPackageHasNoMetadata() throws Exception {
-        when(mMockPm.getApplicationInfo(anyString(), anyInt())).thenReturn(mApplicationInfo);
+        when(mMockPm.getPackageInfo(anyString(), anyInt())).thenReturn(mPackageInfo);
         VersionedPackage logPackage = WatchdogRollbackLogger.getLogPackage(mMockContext,
                 sTestPackageV1);
         assertThat(logPackage).isNull();
+        verify(mMockPm, times(1)).getPackageInfo(
+                sTestPackageV1.getPackageName(), PACKAGE_INFO_FLAGS);
     }
 
     /**
@@ -76,12 +89,16 @@
      */
     @Test
     public void testLogPackageParentKeyIsNull() throws Exception {
-        when(mMockPm.getApplicationInfo(anyString(), anyInt())).thenReturn(mApplicationInfo);
+        when(mMockPm.getPackageInfo(anyString(), anyInt())).thenReturn(mPackageInfo);
         Bundle bundle = new Bundle();
         bundle.putString(LOGGING_PARENT_KEY, null);
+        mApplicationInfo.metaData = bundle;
+        mPackageInfo.applicationInfo = mApplicationInfo;
         VersionedPackage logPackage = WatchdogRollbackLogger.getLogPackage(mMockContext,
                 sTestPackageV1);
         assertThat(logPackage).isNull();
+        verify(mMockPm, times(1)).getPackageInfo(
+                sTestPackageV1.getPackageName(), PACKAGE_INFO_FLAGS);
     }
 
     /**
@@ -90,15 +107,18 @@
     @Test
     public void testLogPackageHasParentKey() throws Exception {
         Bundle bundle = new Bundle();
-        bundle.putString(LOGGING_PARENT_KEY, "logging.parent");
+        bundle.putString(LOGGING_PARENT_KEY, LOGGING_PARENT_VALUE);
         mApplicationInfo.metaData = bundle;
+        mPackageInfo.applicationInfo = mApplicationInfo;
         mPackageInfo.setLongVersionCode(12345L);
-        when(mMockPm.getApplicationInfo(anyString(), anyInt())).thenReturn(mApplicationInfo);
         when(mMockPm.getPackageInfo(anyString(), anyInt())).thenReturn(mPackageInfo);
         VersionedPackage logPackage = WatchdogRollbackLogger.getLogPackage(mMockContext,
                 sTestPackageV1);
-        VersionedPackage expectedLogPackage = new VersionedPackage("logging.parent", 12345);
+        VersionedPackage expectedLogPackage = new VersionedPackage(LOGGING_PARENT_VALUE, 12345);
         assertThat(logPackage).isEqualTo(expectedLogPackage);
+        verify(mMockPm, times(1)).getPackageInfo(
+                sTestPackageV1.getPackageName(), PACKAGE_INFO_FLAGS);
+
     }
 
     /**
@@ -107,12 +127,64 @@
     @Test
     public void testLogPackageNameNotFound() throws Exception {
         Bundle bundle = new Bundle();
-        bundle.putString("android.content.pm.LOGGING_PARENT", "logging.parent");
+        bundle.putString(LOGGING_PARENT_KEY, LOGGING_PARENT_VALUE);
         mApplicationInfo.metaData = bundle;
-        when(mMockPm.getPackageInfo(anyString(), anyInt())).thenThrow(
+        mPackageInfo.applicationInfo = mApplicationInfo;
+        when(mMockPm.getPackageInfo(anyString(), anyInt())).thenReturn(mPackageInfo);
+        when(mMockPm.getPackageInfo(same(LOGGING_PARENT_VALUE), anyInt())).thenThrow(
                 new PackageManager.NameNotFoundException());
         VersionedPackage logPackage = WatchdogRollbackLogger.getLogPackage(mMockContext,
                 sTestPackageV1);
         assertThat(logPackage).isNull();
+        verify(mMockPm, times(1)).getPackageInfo(
+                sTestPackageV1.getPackageName(), PACKAGE_INFO_FLAGS);
+    }
+
+    /**
+     * Ensures that we make the correct Package Manager calls in the case that the failing packages
+     * are correctly configured with parent packages.
+     */
+    @Test
+    public void testApexdLoggingCallsWithParents() throws Exception {
+        for (String failingPackage: sFailingPackages) {
+            PackageInfo packageInfo = new PackageInfo();
+            ApplicationInfo applicationInfo = new ApplicationInfo();
+            Bundle bundle = new Bundle();
+            bundle.putString(LOGGING_PARENT_KEY, getParent(failingPackage));
+            applicationInfo.metaData = bundle;
+            packageInfo.applicationInfo = applicationInfo;
+            when(mMockPm.getPackageInfo(same(failingPackage), anyInt())).thenReturn(packageInfo);
+        }
+
+        when(mMockPm.getPackageInfo(anyString(), eq(0))).thenReturn(mPackageInfo);
+        WatchdogRollbackLogger.logApexdRevert(mMockContext, sFailingPackages, "test_process");
+        for (String failingPackage: sFailingPackages) {
+            verify(mMockPm, times(1)).getPackageInfo(failingPackage, PACKAGE_INFO_FLAGS);
+            verify(mMockPm, times(1)).getPackageInfo(getParent(failingPackage), 0);
+        }
+    }
+
+    /**
+     * Ensures that we don't make any calls to parent packages in the case that packages are not
+     * correctly configured with parent packages.
+     */
+    @Test
+    public void testApexdLoggingCallsWithNoParents() throws Exception {
+        for (String failingPackage: sFailingPackages) {
+            PackageInfo packageInfo = new PackageInfo();
+            packageInfo.applicationInfo = new ApplicationInfo();
+            when(mMockPm.getPackageInfo(same(failingPackage), anyInt())).thenReturn(packageInfo);
+        }
+        when(mMockPm.getPackageInfo(anyString(), eq(0))).thenReturn(mPackageInfo);
+
+        WatchdogRollbackLogger.logApexdRevert(mMockContext, sFailingPackages, "test_process");
+        verify(mMockPm, times(sFailingPackages.size())).getPackageInfo(anyString(), anyInt());
+        for (String failingPackage: sFailingPackages) {
+            verify(mMockPm, times(1)).getPackageInfo(failingPackage, PACKAGE_INFO_FLAGS);
+        }
+    }
+
+    private String getParent(String packageName) {
+        return packageName + "-parent";
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
index fde0ddf..eef9012 100644
--- a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
+++ b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
@@ -18,6 +18,7 @@
 
 import static org.junit.Assert.assertEquals;
 
+import android.platform.test.annotations.Presubmit;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Log;
@@ -48,8 +49,9 @@
  * Build/Install/Run:
  *  atest FrameworksServicesTests:SystemConfigTest
  */
-@RunWith(AndroidJUnit4.class)
 @SmallTest
+@Presubmit
+@RunWith(AndroidJUnit4.class)
 public class SystemConfigTest {
     private static final String LOG_TAG = "SystemConfigTest";
 
@@ -144,6 +146,40 @@
         assertEquals("Incorrect blacklist", expectedBlack, actualBlack);
     }
 
+    @Test
+    public void testComponentOverride() throws Exception {
+        final String contents =
+                "<permissions>"
+                + "    <component-override package=\"com.android.package1\">\n"
+                + "        <component class=\"com.android.package1.Full\" enabled=\"true\"/>"
+                + "        <component class=\".Relative\" enabled=\"false\" />\n"
+                + "    </component-override>"
+                + "    <component-override package=\"com.android.package2\" >\n"
+                + "        <component class=\"com.android.package3.Relative2\" enabled=\"yes\" />\n"
+                + "    </component-override>\n"
+                + "</permissions>";
+
+        final File folder = createTempSubfolder("folder");
+        createTempFile(folder, "component-override.xml", contents);
+
+        mSysConfig.readPermissions(folder, /* No permission needed anyway */ 0);
+
+        final ArrayMap<String, Boolean>  packageOneExpected = new ArrayMap<>();
+        packageOneExpected.put("com.android.package1.Full", true);
+        packageOneExpected.put("com.android.package1.Relative", false);
+
+        final ArrayMap<String, Boolean> packageTwoExpected = new ArrayMap<>();
+        packageTwoExpected.put("com.android.package3.Relative2", true);
+
+        final Map<String, Boolean> packageOne = mSysConfig.getComponentsEnabledStates(
+                "com.android.package1");
+        assertEquals(packageOneExpected, packageOne);
+
+        final Map<String, Boolean> packageTwo = mSysConfig.getComponentsEnabledStates(
+                "com.android.package2");
+        assertEquals(packageTwoExpected, packageTwo);
+    }
+
     /**
      * Creates folderName/fileName in the mTemporaryFolder and fills it with the contents.
      * @param folderName subdirectory of mTemporaryFolder to put the file, creating if needed
diff --git a/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java b/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java
index 03dc213..9e57763 100644
--- a/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java
@@ -115,6 +115,7 @@
     private static final long WORKING_SET_THRESHOLD = 12 * HOUR_MS;
     private static final long FREQUENT_THRESHOLD = 24 * HOUR_MS;
     private static final long RARE_THRESHOLD = 48 * HOUR_MS;
+    private static final long RESTRICTED_THRESHOLD = 96 * HOUR_MS;
 
     /** Mock variable used in {@link MyInjector#isPackageInstalled(String, int, int)} */
     private static boolean isPackageInstalled = true;
@@ -144,6 +145,7 @@
     static class MyInjector extends AppStandbyController.Injector {
         long mElapsedRealtime;
         boolean mIsAppIdleEnabled = true;
+        boolean mIsCharging;
         List<String> mPowerSaveWhitelistExceptIdle = new ArrayList<>();
         boolean mDisplayOn;
         DisplayManager.DisplayListener mDisplayListener;
@@ -178,6 +180,11 @@
         }
 
         @Override
+        boolean isCharging() {
+            return mIsCharging;
+        }
+
+        @Override
         boolean isPowerSaveWhitelistExceptIdleApp(String packageName) throws RemoteException {
             return mPowerSaveWhitelistExceptIdle.contains(packageName);
         }
@@ -232,9 +239,8 @@
         @Override
         String getAppIdleSettings() {
             return "screen_thresholds=0/0/0/" + HOUR_MS + ",elapsed_thresholds=0/"
-                    + WORKING_SET_THRESHOLD + "/"
-                    + FREQUENT_THRESHOLD + "/"
-                    + RARE_THRESHOLD;
+                    + WORKING_SET_THRESHOLD + "/" + FREQUENT_THRESHOLD + "/" + RARE_THRESHOLD
+                    + "/" + RESTRICTED_THRESHOLD;
         }
 
         @Override
@@ -281,6 +287,13 @@
         } catch (PackageManager.NameNotFoundException nnfe) {}
     }
 
+    private void setChargingState(AppStandbyController controller, boolean charging) {
+        mInjector.mIsCharging = charging;
+        if (controller != null) {
+            controller.setChargingState(charging);
+        }
+    }
+
     private void setAppIdleEnabled(AppStandbyController controller, boolean enabled) {
         mInjector.mIsAppIdleEnabled = enabled;
         if (controller != null) {
@@ -297,6 +310,7 @@
         controller.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
         mInjector.setDisplayOn(false);
         mInjector.setDisplayOn(true);
+        setChargingState(controller, false);
         controller.checkIdleStates(USER_ID);
         assertNotEquals(STANDBY_BUCKET_EXEMPTED,
                 controller.getAppStandbyBucket(PACKAGE_1, USER_ID,
@@ -324,6 +338,46 @@
                         mInjector.mElapsedRealtime, false));
     }
 
+    @Test
+    public void testIsAppIdle_Charging() throws Exception {
+        setChargingState(mController, false);
+        mController.setAppStandbyBucket(PACKAGE_1, USER_ID, STANDBY_BUCKET_RARE,
+                REASON_MAIN_FORCED_BY_SYSTEM);
+        assertEquals(STANDBY_BUCKET_RARE, getStandbyBucket(mController, PACKAGE_1));
+        assertTrue(mController.isAppIdleFiltered(PACKAGE_1, UID_1, USER_ID, 0));
+        assertTrue(mController.isAppIdleFiltered(PACKAGE_1, UID_1, USER_ID, false));
+
+        setChargingState(mController, true);
+        assertEquals(STANDBY_BUCKET_RARE, getStandbyBucket(mController, PACKAGE_1));
+        assertFalse(mController.isAppIdleFiltered(PACKAGE_1, UID_1, USER_ID, 0));
+        assertFalse(mController.isAppIdleFiltered(PACKAGE_1, UID_1, USER_ID, false));
+
+        setChargingState(mController, false);
+        assertEquals(STANDBY_BUCKET_RARE, getStandbyBucket(mController, PACKAGE_1));
+        assertTrue(mController.isAppIdleFiltered(PACKAGE_1, UID_1, USER_ID, 0));
+        assertTrue(mController.isAppIdleFiltered(PACKAGE_1, UID_1, USER_ID, false));
+    }
+
+    @Test
+    public void testIsAppIdle_Enabled() throws Exception {
+        setChargingState(mController, false);
+        setAppIdleEnabled(mController, true);
+        mController.setAppStandbyBucket(PACKAGE_1, USER_ID, STANDBY_BUCKET_RARE,
+                REASON_MAIN_FORCED_BY_SYSTEM);
+        assertEquals(STANDBY_BUCKET_RARE, getStandbyBucket(mController, PACKAGE_1));
+        assertTrue(mController.isAppIdleFiltered(PACKAGE_1, UID_1, USER_ID, 0));
+        assertTrue(mController.isAppIdleFiltered(PACKAGE_1, UID_1, USER_ID, false));
+
+        setAppIdleEnabled(mController, false);
+        assertFalse(mController.isAppIdleFiltered(PACKAGE_1, UID_1, USER_ID, 0));
+        assertFalse(mController.isAppIdleFiltered(PACKAGE_1, UID_1, USER_ID, false));
+
+        setAppIdleEnabled(mController, true);
+        assertEquals(STANDBY_BUCKET_RARE, getStandbyBucket(mController, PACKAGE_1));
+        assertTrue(mController.isAppIdleFiltered(PACKAGE_1, UID_1, USER_ID, 0));
+        assertTrue(mController.isAppIdleFiltered(PACKAGE_1, UID_1, USER_ID, false));
+    }
+
     private void assertTimeout(AppStandbyController controller, long elapsedTime, int bucket) {
         mInjector.mElapsedRealtime = elapsedTime;
         controller.checkIdleStates(USER_ID);
@@ -372,12 +426,15 @@
         // RARE bucket
         assertTimeout(mController, RARE_THRESHOLD + 1, STANDBY_BUCKET_RARE);
 
+        // RESTRICTED bucket
+        assertTimeout(mController, RESTRICTED_THRESHOLD + 1, STANDBY_BUCKET_RESTRICTED);
+
         reportEvent(mController, USER_INTERACTION, RARE_THRESHOLD + 1, PACKAGE_1);
 
         assertTimeout(mController, RARE_THRESHOLD + 1, STANDBY_BUCKET_ACTIVE);
 
-        // RARE bucket
-        assertTimeout(mController, RARE_THRESHOLD * 2 + 2, STANDBY_BUCKET_RARE);
+        // RESTRICTED bucket
+        assertTimeout(mController, RESTRICTED_THRESHOLD * 2 + 2, STANDBY_BUCKET_RESTRICTED);
     }
 
     @Test
@@ -437,7 +494,7 @@
         assertNotEquals(STANDBY_BUCKET_RARE, getStandbyBucket(mController, PACKAGE_1));
 
         mInjector.setDisplayOn(true);
-        assertTimeout(mController, RARE_THRESHOLD * 2 + 2, STANDBY_BUCKET_RARE);
+        assertTimeout(mController, RARE_THRESHOLD + 2 * HOUR_MS + 1, STANDBY_BUCKET_RARE);
     }
 
     @Test
@@ -642,7 +699,7 @@
         assertBucket(STANDBY_BUCKET_FREQUENT);
 
         // Way past prediction timeout, use system thresholds
-        mInjector.mElapsedRealtime = RARE_THRESHOLD * 4;
+        mInjector.mElapsedRealtime = RARE_THRESHOLD;
         mController.checkIdleStates(USER_ID);
         assertBucket(STANDBY_BUCKET_RARE);
     }
@@ -669,7 +726,7 @@
         assertBucket(STANDBY_BUCKET_RESTRICTED);
 
         // Way past all timeouts. Make sure timeout processing doesn't raise bucket.
-        mInjector.mElapsedRealtime += RARE_THRESHOLD * 4;
+        mInjector.mElapsedRealtime += RESTRICTED_THRESHOLD * 4;
         mController.checkIdleStates(USER_ID);
         assertBucket(STANDBY_BUCKET_RESTRICTED);
     }
@@ -682,7 +739,7 @@
         reportEvent(mController, USER_INTERACTION, 0, PACKAGE_1);
         assertBucket(STANDBY_BUCKET_ACTIVE);
 
-        mInjector.mElapsedRealtime += mInjector.getRestrictedBucketDelayMs() - 5000;
+        mInjector.mElapsedRealtime += mInjector.getAutoRestrictedBucketDelayMs() - 5000;
         mController.setAppStandbyBucket(PACKAGE_1, USER_ID, STANDBY_BUCKET_RESTRICTED,
                 REASON_MAIN_FORCED_BY_SYSTEM);
         // Bucket shouldn't change
@@ -696,6 +753,45 @@
         assertBucket(STANDBY_BUCKET_RESTRICTED);
     }
 
+    /**
+     * Test that an app is put into the RESTRICTED bucket after enough time has passed.
+     */
+    @Test
+    public void testRestrictedDelay_DelayChange() throws Exception {
+        reportEvent(mController, USER_INTERACTION, 0, PACKAGE_1);
+        assertBucket(STANDBY_BUCKET_ACTIVE);
+
+        mInjector.mAutoRestrictedBucketDelayMs = 2 * HOUR_MS;
+        mInjector.mElapsedRealtime += 2 * HOUR_MS - 5000;
+        mController.setAppStandbyBucket(PACKAGE_1, USER_ID, STANDBY_BUCKET_RESTRICTED,
+                REASON_MAIN_FORCED_BY_SYSTEM);
+        // Bucket shouldn't change
+        assertBucket(STANDBY_BUCKET_ACTIVE);
+
+        // bucketing works after timeout
+        mInjector.mElapsedRealtime += 6000;
+
+        Thread.sleep(6000);
+        // Enough time has passed. The app should automatically be put into the RESTRICTED bucket.
+        assertBucket(STANDBY_BUCKET_RESTRICTED);
+    }
+
+    @Test
+    public void testPredictionRaiseFromRestrictedTimeout() {
+        reportEvent(mController, USER_INTERACTION, mInjector.mElapsedRealtime, PACKAGE_1);
+
+        // Way past all timeouts. App times out into RESTRICTED bucket.
+        mInjector.mElapsedRealtime += RESTRICTED_THRESHOLD * 4;
+        mController.checkIdleStates(USER_ID);
+        assertBucket(STANDBY_BUCKET_RESTRICTED);
+
+        // Since the app timed out into RESTRICTED, prediction should be able to remove from the
+        // bucket.
+        mInjector.mElapsedRealtime += RESTRICTED_THRESHOLD;
+        mController.setAppStandbyBucket(PACKAGE_1, USER_ID, STANDBY_BUCKET_ACTIVE,
+                REASON_MAIN_PREDICTED);
+    }
+
     @Test
     public void testCascadingTimeouts() throws Exception {
         reportEvent(mController, USER_INTERACTION, 0, PACKAGE_1);
diff --git a/services/tests/servicestests/test-apps/AppIntegrityManagerServiceTestApp/Android.bp b/services/tests/servicestests/test-apps/AppIntegrityManagerServiceTestApp/Android.bp
deleted file mode 100644
index 9aaa37d..0000000
--- a/services/tests/servicestests/test-apps/AppIntegrityManagerServiceTestApp/Android.bp
+++ /dev/null
@@ -1,21 +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.
-
-android_test_helper_app {
-    name: "AppIntegrityManagerServiceTestApp",
-
-    test_suites: ["device-tests"],
-
-    certificate: "platform",
-}
diff --git a/services/tests/servicestests/test-apps/AppIntegrityManagerServiceTestApp/AndroidManifest.xml b/services/tests/servicestests/test-apps/AppIntegrityManagerServiceTestApp/AndroidManifest.xml
deleted file mode 100644
index f5dbf43..0000000
--- a/services/tests/servicestests/test-apps/AppIntegrityManagerServiceTestApp/AndroidManifest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- * Copyright (C) 2019 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.
- -->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.google.android.appintegritymanager.test.app"
-    android:versionCode="5000">
-
-    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="28" />
-
-    <application android:hasCode="false">
-        <meta-data android:name="allowed-installers" android:value="com.android.vending|play_store_cert,adb|"/>
-    </application>
-</manifest>
-
diff --git a/services/tests/uiservicestests/Android.bp b/services/tests/uiservicestests/Android.bp
index f608bab..3f0cda3 100644
--- a/services/tests/uiservicestests/Android.bp
+++ b/services/tests/uiservicestests/Android.bp
@@ -47,7 +47,6 @@
         "libbacktrace",
         "libbase",
         "libbinder",
-        "libbinderthreadstate",
         "libc++",
         "libcutils",
         "liblog",
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryDatabaseTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryDatabaseTest.java
index 5b5ad87..99b4fd9 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryDatabaseTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryDatabaseTest.java
@@ -44,6 +44,7 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.mockito.internal.matchers.Not;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -239,6 +240,98 @@
         verify(af2, never()).openRead();
     }
 
+    @Test
+    public void testRemoveNotificationRunnable() throws Exception {
+        NotificationHistory nh = mock(NotificationHistory.class);
+        NotificationHistoryDatabase.RemoveNotificationRunnable rnr =
+                mDataBase.new RemoveNotificationRunnable("pkg", 123);
+        rnr.setNotificationHistory(nh);
+
+        AtomicFile af = mock(AtomicFile.class);
+        when(af.getBaseFile()).thenReturn(new File(mRootDir, "af"));
+        mDataBase.mHistoryFiles.addLast(af);
+
+        when(nh.removeNotificationFromWrite("pkg", 123)).thenReturn(true);
+
+        mDataBase.mBuffer = mock(NotificationHistory.class);
+
+        rnr.run();
+
+        verify(mDataBase.mBuffer).removeNotificationFromWrite("pkg", 123);
+        verify(af).openRead();
+        verify(nh).removeNotificationFromWrite("pkg", 123);
+        verify(af).startWrite();
+    }
+
+    @Test
+    public void testRemoveNotificationRunnable_noChanges() throws Exception {
+        NotificationHistory nh = mock(NotificationHistory.class);
+        NotificationHistoryDatabase.RemoveNotificationRunnable rnr =
+                mDataBase.new RemoveNotificationRunnable("pkg", 123);
+        rnr.setNotificationHistory(nh);
+
+        AtomicFile af = mock(AtomicFile.class);
+        when(af.getBaseFile()).thenReturn(new File(mRootDir, "af"));
+        mDataBase.mHistoryFiles.addLast(af);
+
+        when(nh.removeNotificationFromWrite("pkg", 123)).thenReturn(false);
+
+        mDataBase.mBuffer = mock(NotificationHistory.class);
+
+        rnr.run();
+
+        verify(mDataBase.mBuffer).removeNotificationFromWrite("pkg", 123);
+        verify(af).openRead();
+        verify(nh).removeNotificationFromWrite("pkg", 123);
+        verify(af, never()).startWrite();
+    }
+
+    @Test
+    public void testRemoveConversationRunnable() throws Exception {
+        NotificationHistory nh = mock(NotificationHistory.class);
+        NotificationHistoryDatabase.RemoveConversationRunnable rcr =
+                mDataBase.new RemoveConversationRunnable("pkg", "convo");
+        rcr.setNotificationHistory(nh);
+
+        AtomicFile af = mock(AtomicFile.class);
+        when(af.getBaseFile()).thenReturn(new File(mRootDir, "af"));
+        mDataBase.mHistoryFiles.addLast(af);
+
+        when(nh.removeConversationFromWrite("pkg", "convo")).thenReturn(true);
+
+        mDataBase.mBuffer = mock(NotificationHistory.class);
+
+        rcr.run();
+
+        verify(mDataBase.mBuffer).removeConversationFromWrite("pkg", "convo");
+        verify(af).openRead();
+        verify(nh).removeConversationFromWrite("pkg", "convo");
+        verify(af).startWrite();
+    }
+
+    @Test
+    public void testRemoveConversationRunnable_noChanges() throws Exception {
+        NotificationHistory nh = mock(NotificationHistory.class);
+        NotificationHistoryDatabase.RemoveConversationRunnable rcr =
+                mDataBase.new RemoveConversationRunnable("pkg", "convo");
+        rcr.setNotificationHistory(nh);
+
+        AtomicFile af = mock(AtomicFile.class);
+        when(af.getBaseFile()).thenReturn(new File(mRootDir, "af"));
+        mDataBase.mHistoryFiles.addLast(af);
+
+        when(nh.removeConversationFromWrite("pkg", "convo")).thenReturn(false);
+
+        mDataBase.mBuffer = mock(NotificationHistory.class);
+
+        rcr.run();
+
+        verify(mDataBase.mBuffer).removeConversationFromWrite("pkg", "convo");
+        verify(af).openRead();
+        verify(nh).removeConversationFromWrite("pkg", "convo");
+        verify(af, never()).startWrite();
+    }
+
     private class TestFileAttrProvider implements NotificationHistoryDatabase.FileAttrProvider {
         public Map<File, Long> creationDates = new HashMap<>();
 
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryManagerTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryManagerTest.java
index b5eb1bf..f7c2609 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryManagerTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryManagerTest.java
@@ -289,6 +289,34 @@
     }
 
     @Test
+    public void testDeleteNotificationHistoryItem_userUnlocked() {
+        String pkg = "pkg";
+        long time = 235;
+        NotificationHistoryDatabase userHistory = mock(NotificationHistoryDatabase.class);
+
+        mHistoryManager.onUserUnlocked(USER_SYSTEM);
+        mHistoryManager.replaceNotificationHistoryDatabase(USER_SYSTEM, userHistory);
+
+        mHistoryManager.deleteNotificationHistoryItem(pkg, 1, time);
+
+        verify(userHistory, times(1)).deleteNotificationHistoryItem(pkg, time);
+    }
+
+    @Test
+    public void testDeleteConversation_userUnlocked() {
+        String pkg = "pkg";
+        String convo  = "convo";
+        NotificationHistoryDatabase userHistory = mock(NotificationHistoryDatabase.class);
+
+        mHistoryManager.onUserUnlocked(USER_SYSTEM);
+        mHistoryManager.replaceNotificationHistoryDatabase(USER_SYSTEM, userHistory);
+
+        mHistoryManager.deleteConversation(pkg, 1, convo);
+
+        verify(userHistory, times(1)).deleteConversation(pkg, convo);
+    }
+
+    @Test
     public void testTriggerWriteToDisk() {
         NotificationHistoryDatabase userHistorySystem = mock(NotificationHistoryDatabase.class);
         NotificationHistoryDatabase userHistoryAll = mock(NotificationHistoryDatabase.class);
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryProtoHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryProtoHelperTest.java
index 458117d..6eaf546 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryProtoHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryProtoHelperTest.java
@@ -21,6 +21,7 @@
 import android.app.NotificationHistory.HistoricalNotification;
 import android.graphics.drawable.Icon;
 import android.test.suitebuilder.annotation.SmallTest;
+import android.text.TextUtils;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
@@ -57,6 +58,10 @@
         String expectedText = "text" + index;
         Icon expectedIcon = Icon.createWithResource(InstrumentationRegistry.getContext(),
                 index);
+        String conversationId = null;
+        if (index % 2 == 0) {
+            conversationId = "convo" + index;
+        }
 
         return new HistoricalNotification.Builder()
                 .setPackage(packageName)
@@ -68,6 +73,7 @@
                 .setTitle(expectedTitle)
                 .setText(expectedText)
                 .setIcon(expectedIcon)
+                .setConversationId(conversationId)
                 .build();
     }
 
@@ -139,6 +145,9 @@
                 expectedStrings.add(n.getPackage());
                 expectedStrings.add(n.getChannelName());
                 expectedStrings.add(n.getChannelId());
+                if (!TextUtils.isEmpty(n.getConversationId())) {
+                    expectedStrings.add(n.getConversationId());
+                }
                 expectedEntries.add(n);
             }
             history.addNotificationToWrite(n);
@@ -178,6 +187,9 @@
                 expectedStrings.add(n.getPackage());
                 expectedStrings.add(n.getChannelName());
                 expectedStrings.add(n.getChannelId());
+                if (!TextUtils.isEmpty(n.getConversationId())) {
+                    expectedStrings.add(n.getConversationId());
+                }
                 expectedEntries.add(n);
             }
             history.addNotificationToWrite(n);
@@ -227,6 +239,9 @@
                 expectedStrings.add(n.getPackage());
                 expectedStrings.add(n.getChannelName());
                 expectedStrings.add(n.getChannelId());
+                if (n.getConversationId() != null) {
+                    expectedStrings.add(n.getConversationId());
+                }
                 expectedEntries.add(n);
             }
             history.addNotificationToWrite(n);
@@ -264,6 +279,9 @@
             expectedStrings.add(n.getPackage());
             expectedStrings.add(n.getChannelName());
             expectedStrings.add(n.getChannelId());
+            if (n.getConversationId() != null) {
+                expectedStrings.add(n.getConversationId());
+            }
             history.addNotificationToWrite(n);
         }
         history.poolStringsFromNotifications();
@@ -279,6 +297,9 @@
             expectedStrings.add(n.getPackage());
             expectedStrings.add(n.getChannelName());
             expectedStrings.add(n.getChannelId());
+            if (n.getConversationId() != null) {
+                expectedStrings.add(n.getConversationId());
+            }
             actualHistory.addNotificationToWrite(n);
         }
         actualHistory.poolStringsFromNotifications();
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 e0ee3ce..ccce043 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -32,7 +32,6 @@
 import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
 import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_CALLS;
 import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_CONVERSATIONS;
-import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_MESSAGES;
 import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_AMBIENT;
 import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_BADGE;
 import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_FULL_SCREEN_INTENT;
@@ -42,6 +41,8 @@
 import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_SCREEN_OFF;
 import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_SCREEN_ON;
 import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_STATUS_BAR;
+import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC;
+import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED;
 import static android.content.pm.PackageManager.FEATURE_WATCH;
 import static android.content.pm.PackageManager.PERMISSION_DENIED;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@@ -95,6 +96,7 @@
 import android.app.PendingIntent;
 import android.app.Person;
 import android.app.RemoteInput;
+import android.app.StatsManager;
 import android.app.admin.DevicePolicyManagerInternal;
 import android.app.usage.UsageStatsManagerInternal;
 import android.companion.ICompanionDeviceManager;
@@ -128,6 +130,7 @@
 import android.provider.MediaStore;
 import android.provider.Settings;
 import android.service.notification.Adjustment;
+import android.service.notification.ConversationChannelWrapper;
 import android.service.notification.NotificationListenerService;
 import android.service.notification.NotificationStats;
 import android.service.notification.StatusBarNotification;
@@ -263,6 +266,8 @@
     UserManager mUm;
     @Mock
     NotificationHistoryManager mHistoryManager;
+    @Mock
+    StatsManager mStatsManager;
     NotificationRecordLoggerFake mNotificationRecordLogger = new NotificationRecordLoggerFake();
     private InstanceIdSequence mNotificationInstanceIdSequence = new InstanceIdSequenceFake(
             1 << 30);
@@ -354,8 +359,12 @@
 
     @Before
     public void setUp() throws Exception {
+        // Shell permisssions will override permissions of our app, so add all necessary permissions
+        // fo this test here:
         InstrumentationRegistry.getInstrumentation().getUiAutomation().adoptShellPermissionIdentity(
-                "android.permission.WRITE_DEVICE_CONFIG", "android.permission.READ_DEVICE_CONFIG");
+                "android.permission.WRITE_DEVICE_CONFIG",
+                "android.permission.READ_DEVICE_CONFIG",
+                "android.permission.READ_CONTACTS");
 
         MockitoAnnotations.initMocks(this);
 
@@ -436,7 +445,7 @@
                 mCompanionMgr, mSnoozeHelper, mUsageStats, mPolicyFile, mActivityManager,
                 mGroupHelper, mAm, mAppUsageStats,
                 mock(DevicePolicyManagerInternal.class), mUgm, mUgmInternal,
-                mAppOpsManager, mUm, mHistoryManager);
+                mAppOpsManager, mUm, mHistoryManager, mStatsManager);
         mService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
 
         mService.setAudioManager(mAudioManager);
@@ -1137,14 +1146,17 @@
     }
 
     @Test
-    public void testEnqueueNotificationWithTag_WritesExpectedLog() throws Exception {
+    public void testEnqueueNotificationWithTag_WritesExpectedLogs() throws Exception {
         final String tag = "testEnqueueNotificationWithTag_WritesExpectedLog";
         mBinderService.enqueueNotificationWithTag(PKG, PKG, tag, 0,
                 generateNotificationRecord(null).getNotification(), 0);
         waitForIdle();
         assertEquals(1, mNotificationRecordLogger.getCalls().size());
+
         NotificationRecordLoggerFake.CallRecord call = mNotificationRecordLogger.get(0);
-        assertTrue(call.shouldLog());
+        assertTrue(call.shouldLogReported);
+        assertEquals(NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_POSTED,
+                call.event);
         assertNotNull(call.r);
         assertNull(call.old);
         assertEquals(0, call.position);
@@ -1152,8 +1164,7 @@
         assertEquals(PKG, call.r.getSbn().getPackageName());
         assertEquals(0, call.r.getSbn().getId());
         assertEquals(tag, call.r.getSbn().getTag());
-        assertNotNull(call.r.getSbn().getInstanceId());
-        assertEquals(0, call.r.getSbn().getInstanceId().getId());
+        assertEquals(0, call.getInstanceId());  // Fake instance IDs are assigned in order
     }
 
     @Test
@@ -1171,31 +1182,52 @@
         waitForIdle();
         assertEquals(2, mNotificationRecordLogger.getCalls().size());
 
-        assertTrue(mNotificationRecordLogger.get(0).shouldLog());
+        assertTrue(mNotificationRecordLogger.get(0).shouldLogReported);
         assertEquals(
-                NotificationRecordLogger.NotificationReportedEvents.NOTIFICATION_POSTED,
-                mNotificationRecordLogger.get(0).getUiEvent());
-        assertEquals(0, mNotificationRecordLogger.get(0).r.getSbn().getInstanceId().getId());
+                NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_POSTED,
+                mNotificationRecordLogger.get(0).event);
+        assertEquals(0, mNotificationRecordLogger.get(0).getInstanceId());
 
-        assertTrue(mNotificationRecordLogger.get(1).shouldLog());
+        assertTrue(mNotificationRecordLogger.get(1).shouldLogReported);
         assertEquals(
-                NotificationRecordLogger.NotificationReportedEvents.NOTIFICATION_UPDATED,
-                mNotificationRecordLogger.get(1).getUiEvent());
+                NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_UPDATED,
+                mNotificationRecordLogger.get(1).event);
         // Instance ID doesn't change on update of an active notification
-        assertEquals(0, mNotificationRecordLogger.get(1).r.getSbn().getInstanceId().getId());
+        assertEquals(0, mNotificationRecordLogger.get(1).getInstanceId());
     }
 
     @Test
-    public void testEnqueueNotificationWithTag_DoesNotLogOnMinorUpdates() throws Exception {
-        final String tag = "testEnqueueNotificationWithTag_DoesNotLogOnMinorUpdates";
+    public void testEnqueueNotificationWithTag_DoesNotLogOnMinorUpdate() throws Exception {
+        final String tag = "testEnqueueNotificationWithTag_DoesNotLogOnMinorUpdate";
         mBinderService.enqueueNotificationWithTag(PKG, PKG, tag, 0,
                 generateNotificationRecord(null).getNotification(), 0);
         mBinderService.enqueueNotificationWithTag(PKG, PKG, tag, 0,
                 generateNotificationRecord(null).getNotification(), 0);
         waitForIdle();
         assertEquals(2, mNotificationRecordLogger.getCalls().size());
-        assertTrue(mNotificationRecordLogger.get(0).shouldLog());
-        assertFalse(mNotificationRecordLogger.get(1).shouldLog());
+        assertTrue(mNotificationRecordLogger.get(0).shouldLogReported);
+        assertEquals(
+                NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_POSTED,
+                mNotificationRecordLogger.get(0).event);
+        assertFalse(mNotificationRecordLogger.get(1).shouldLogReported);
+        assertNull(mNotificationRecordLogger.get(1).event);
+    }
+
+    @Test
+    public void testEnqueueNotificationWithTag_DoesNotLogOnTitleUpdate() throws Exception {
+        final String tag = "testEnqueueNotificationWithTag_DoesNotLogOnTitleUpdate";
+        mBinderService.enqueueNotificationWithTag(PKG, PKG, tag, 0,
+                generateNotificationRecord(null).getNotification(),
+                0);
+        final Notification notif = generateNotificationRecord(null).getNotification();
+        notif.extras.putString(Notification.EXTRA_TITLE, "Changed title");
+        mBinderService.enqueueNotificationWithTag(PKG, PKG, tag, 0, notif, 0);
+        waitForIdle();
+        assertEquals(2, mNotificationRecordLogger.getCalls().size());
+        assertEquals(
+                NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_POSTED,
+                mNotificationRecordLogger.get(0).event);
+        assertNull(mNotificationRecordLogger.get(1).event);
     }
 
     @Test
@@ -1210,20 +1242,35 @@
         waitForIdle();
         mBinderService.enqueueNotificationWithTag(PKG, PKG, tag, 0, notification, 0);
         waitForIdle();
-        assertEquals(2, mNotificationRecordLogger.getCalls().size());
+        assertEquals(3, mNotificationRecordLogger.getCalls().size());
 
-        assertTrue(mNotificationRecordLogger.get(0).shouldLog());
         assertEquals(
-                NotificationRecordLogger.NotificationReportedEvents.NOTIFICATION_POSTED,
-                mNotificationRecordLogger.get(0).getUiEvent());
-        assertEquals(0, mNotificationRecordLogger.get(0).r.getSbn().getInstanceId().getId());
+                NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_POSTED,
+                mNotificationRecordLogger.get(0).event);
+        assertTrue(mNotificationRecordLogger.get(0).shouldLogReported);
+        assertEquals(0, mNotificationRecordLogger.get(0).getInstanceId());
 
-        assertTrue(mNotificationRecordLogger.get(1).shouldLog());
         assertEquals(
-                NotificationRecordLogger.NotificationReportedEvents.NOTIFICATION_POSTED,
-                mNotificationRecordLogger.get(1).getUiEvent());
+                NotificationRecordLogger.NotificationCancelledEvent.NOTIFICATION_CANCEL_APP_CANCEL,
+                mNotificationRecordLogger.get(1).event);
+        assertEquals(0, mNotificationRecordLogger.get(1).getInstanceId());
+
+        assertEquals(
+                NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_POSTED,
+                mNotificationRecordLogger.get(2).event);
+        assertTrue(mNotificationRecordLogger.get(2).shouldLogReported);
         // New instance ID because notification was canceled before re-post
-        assertEquals(1, mNotificationRecordLogger.get(1).r.getSbn().getInstanceId().getId());
+        assertEquals(1, mNotificationRecordLogger.get(2).getInstanceId());
+    }
+
+    @Test
+    public void testCancelNonexistentNotification() throws Exception {
+        mBinderService.cancelNotificationWithTag(PKG, PKG,
+                "testCancelNonexistentNotification", 0, 0);
+        waitForIdle();
+        // The notification record logger doesn't even get called when a nonexistent notification
+        // is cancelled, because that happens very frequently and is not interesting.
+        assertEquals(0, mNotificationRecordLogger.getCalls().size());
     }
 
     @Test
@@ -1241,6 +1288,27 @@
     }
 
     @Test
+    public void testPostCancelPostNotifiesListeners() throws Exception {
+        // WHEN a notification is posted
+        final StatusBarNotification sbn = generateNotificationRecord(null).getSbn();
+        mBinderService.enqueueNotificationWithTag(PKG, PKG, "tag", sbn.getId(),
+                sbn.getNotification(), sbn.getUserId());
+        // THEN it is canceled
+        mBinderService.cancelNotificationWithTag(PKG, PKG, "tag", sbn.getId(), sbn.getUserId());
+        // THEN it is posted again (before the cancel has a chance to finish)
+        mBinderService.enqueueNotificationWithTag(PKG, PKG, "tag", sbn.getId(),
+                sbn.getNotification(), sbn.getUserId());
+        // THEN the later enqueue isn't swallowed by the cancel. I.e., ordering is respected
+        waitForIdle();
+
+        // The final enqueue made it to the listener instead of being canceled
+        StatusBarNotification[] notifs =
+                mBinderService.getActiveNotifications(PKG);
+        assertEquals(1, notifs.length);
+        assertEquals(1, mService.getNotificationRecordCount());
+    }
+
+    @Test
     public void testCancelNotificationWhilePostedAndEnqueued() throws Exception {
         mBinderService.enqueueNotificationWithTag(PKG, PKG,
                 "testCancelNotificationWhilePostedAndEnqueued", 0,
@@ -2579,6 +2647,33 @@
     }
 
     @Test
+    public void testSystemNotificationListenerCanUnsnooze() throws Exception {
+        final NotificationRecord nr = generateNotificationRecord(
+                mTestNotificationChannel, 2, "group", false);
+
+        mBinderService.enqueueNotificationWithTag(PKG, PKG,
+                "testSystemNotificationListenerCanUnsnooze",
+                nr.getSbn().getId(), nr.getSbn().getNotification(),
+                nr.getSbn().getUserId());
+        waitForIdle();
+        NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable =
+                mService.new SnoozeNotificationRunnable(
+                        nr.getKey(), 100, null);
+        snoozeNotificationRunnable.run();
+
+        ManagedServices.ManagedServiceInfo listener = mListeners.new ManagedServiceInfo(
+                null, new ComponentName(PKG, "test_class"), mUid, true, null, 0);
+        listener.isSystem = true;
+        when(mListeners.checkServiceTokenLocked(any())).thenReturn(listener);
+
+        mBinderService.unsnoozeNotificationFromSystemListener(null, nr.getKey());
+        waitForIdle();
+        StatusBarNotification[] notifs = mBinderService.getActiveNotifications(PKG);
+        assertEquals(1, notifs.length);
+        assertNotNull(notifs[0].getKey());//mService.getNotificationRecord(nr.getSbn().getKey()));
+    }
+
+    @Test
     public void testSetListenerAccessForUser() throws Exception {
         UserHandle user = UserHandle.of(10);
         ComponentName c = ComponentName.unflattenFromString("package/Component");
@@ -2811,21 +2906,21 @@
     }
 
     @Test
-    public void testSetListenerAccess_doesNothingOnLowRam() throws Exception {
+    public void testSetListenerAccess_onLowRam() throws Exception {
         when(mActivityManager.isLowRamDevice()).thenReturn(true);
         ComponentName c = ComponentName.unflattenFromString("package/Component");
         mBinderService.setNotificationListenerAccessGranted(c, true);
 
-        verify(mListeners, never()).setPackageOrComponentEnabled(
+        verify(mListeners).setPackageOrComponentEnabled(
                 anyString(), anyInt(), anyBoolean(), anyBoolean());
-        verify(mConditionProviders, never()).setPackageOrComponentEnabled(
+        verify(mConditionProviders).setPackageOrComponentEnabled(
                 anyString(), anyInt(), anyBoolean(), anyBoolean());
-        verify(mAssistants, never()).setPackageOrComponentEnabled(
-                any(), anyInt(), anyBoolean(), anyBoolean());
+        verify(mAssistants).migrateToXml();
+        verify(mAssistants).resetDefaultAssistantsIfNecessary();
     }
 
     @Test
-    public void testSetAssistantAccess_doesNothingOnLowRam() throws Exception {
+    public void testSetAssistantAccess_onLowRam() throws Exception {
         when(mActivityManager.isLowRamDevice()).thenReturn(true);
         ComponentName c = ComponentName.unflattenFromString("package/Component");
         List<UserInfo> uis = new ArrayList<>();
@@ -2836,26 +2931,28 @@
 
         mBinderService.setNotificationAssistantAccessGranted(c, true);
 
-        verify(mListeners, never()).setPackageOrComponentEnabled(
+        verify(mListeners).migrateToXml();
+        verify(mListeners).notifyNotificationChannelChanged(anyString(), any(), any(),
+                anyInt());
+        verify(mConditionProviders).setPackageOrComponentEnabled(
                 anyString(), anyInt(), anyBoolean(), anyBoolean());
-        verify(mConditionProviders, never()).setPackageOrComponentEnabled(
-                anyString(), anyInt(), anyBoolean(), anyBoolean());
-        verify(mAssistants, never()).setPackageOrComponentEnabled(
-                any(), anyInt(), anyBoolean(), anyBoolean());
+        verify(mAssistants).migrateToXml();
+        verify(mAssistants).resetDefaultAssistantsIfNecessary();
     }
 
     @Test
-    public void testSetDndAccess_doesNothingOnLowRam() throws Exception {
+    public void testSetDndAccess_onLowRam() throws Exception {
         when(mActivityManager.isLowRamDevice()).thenReturn(true);
         ComponentName c = ComponentName.unflattenFromString("package/Component");
         mBinderService.setNotificationPolicyAccessGranted(c.getPackageName(), true);
 
-        verify(mListeners, never()).setPackageOrComponentEnabled(
+        verify(mListeners).migrateToXml();
+        verify(mListeners).notifyNotificationChannelChanged(anyString(), any(), any(),
+                anyInt());
+        verify(mConditionProviders).setPackageOrComponentEnabled(
                 anyString(), anyInt(), anyBoolean(), anyBoolean());
-        verify(mConditionProviders, never()).setPackageOrComponentEnabled(
-                anyString(), anyInt(), anyBoolean(), anyBoolean());
-        verify(mAssistants, never()).setPackageOrComponentEnabled(
-                any(), anyInt(), anyBoolean(), anyBoolean());
+        verify(mAssistants).migrateToXml();
+        verify(mAssistants).resetDefaultAssistantsIfNecessary();
     }
 
     @Test
@@ -3365,6 +3462,15 @@
         waitForIdle();
 
         assertEquals(NotificationStats.DISMISSAL_AOD, r.getStats().getDismissalSurface());
+
+        // Using mService.addNotification() does not generate a NotificationRecordLogger log,
+        // so we only get the cancel notification.
+        assertEquals(1, mNotificationRecordLogger.getCalls().size());
+
+        assertEquals(
+                NotificationRecordLogger.NotificationCancelledEvent.NOTIFICATION_CANCEL_USER_AOD,
+                mNotificationRecordLogger.get(0).event);
+        assertEquals(0, mNotificationRecordLogger.get(0).getInstanceId());
     }
 
     @Test
@@ -4188,68 +4294,13 @@
     }
 
     @Test
-    public void testCanUseManagedServicesLowRamNoWatchNullPkg() {
-        when(mPackageManagerClient.hasSystemFeature(FEATURE_WATCH)).thenReturn(false);
-        when(mActivityManager.isLowRamDevice()).thenReturn(true);
-        when(mResources.getStringArray(R.array.config_allowedManagedServicesOnLowRamDevices))
-                .thenReturn(new String[] {"a", "b", "c"});
-        when(mContext.getResources()).thenReturn(mResources);
-
-        assertEquals(false, mService.canUseManagedServices(null, 0, null));
+    public void testCanUseManagedServicesNullPkg() {
+        assertEquals(true, mService.canUseManagedServices(null, 0, null));
     }
 
-    @Test
-    public void testCanUseManagedServicesLowRamNoWatchValidPkg() {
-        when(mPackageManagerClient.hasSystemFeature(FEATURE_WATCH)).thenReturn(false);
-        when(mActivityManager.isLowRamDevice()).thenReturn(true);
-        when(mResources.getStringArray(R.array.config_allowedManagedServicesOnLowRamDevices))
-                .thenReturn(new String[] {"a", "b", "c"});
-        when(mContext.getResources()).thenReturn(mResources);
-
-        assertEquals(true, mService.canUseManagedServices("b", 0, null));
-    }
 
     @Test
-    public void testCanUseManagedServicesLowRamNoWatchNoValidPkg() {
-        when(mPackageManagerClient.hasSystemFeature(FEATURE_WATCH)).thenReturn(false);
-        when(mActivityManager.isLowRamDevice()).thenReturn(true);
-        when(mResources.getStringArray(R.array.config_allowedManagedServicesOnLowRamDevices))
-                .thenReturn(new String[] {"a", "b", "c"});
-        when(mContext.getResources()).thenReturn(mResources);
-
-        assertEquals(false, mService.canUseManagedServices("d", 0, null));
-    }
-
-    @Test
-    public void testCanUseManagedServicesLowRamWatchNoValidPkg() {
-        when(mPackageManagerClient.hasSystemFeature(FEATURE_WATCH)).thenReturn(true);
-        when(mActivityManager.isLowRamDevice()).thenReturn(true);
-        when(mResources.getStringArray(R.array.config_allowedManagedServicesOnLowRamDevices))
-                .thenReturn(new String[] {"a", "b", "c"});
-        when(mContext.getResources()).thenReturn(mResources);
-
-        assertEquals(true, mService.canUseManagedServices("d", 0, null));
-    }
-
-    @Test
-    public void testCanUseManagedServicesNoLowRamNoWatchValidPkg() {
-        when(mPackageManagerClient.hasSystemFeature(FEATURE_WATCH)).thenReturn(false);
-        when(mActivityManager.isLowRamDevice()).thenReturn(false);
-        when(mResources.getStringArray(R.array.config_allowedManagedServicesOnLowRamDevices))
-                .thenReturn(new String[] {"a", "b", "c"});
-        when(mContext.getResources()).thenReturn(mResources);
-
-        assertEquals(true, mService.canUseManagedServices("d", 0 , null));
-    }
-
-    @Test
-    public void testCanUseManagedServicesNoLowRamWatchValidPkg() {
-        when(mPackageManagerClient.hasSystemFeature(FEATURE_WATCH)).thenReturn(true);
-        when(mActivityManager.isLowRamDevice()).thenReturn(false);
-        when(mResources.getStringArray(R.array.config_allowedManagedServicesOnLowRamDevices))
-                .thenReturn(new String[] {"a", "b", "c"});
-        when(mContext.getResources()).thenReturn(mResources);
-
+    public void testCanUseManagedServicesNoValidPkg() {
         assertEquals(true, mService.canUseManagedServices("d", 0, null));
     }
 
@@ -4289,6 +4340,34 @@
     }
 
     @Test
+    public void testOnNotificationVisibilityChanged_triggersVisibilityLog() {
+        final NotificationRecord r = generateNotificationRecord(
+                mTestNotificationChannel, 1, null, true);
+        r.setTextChanged(true);
+        mService.addNotification(r);
+
+        mService.mNotificationDelegate.onNotificationVisibilityChanged(new NotificationVisibility[]
+                {NotificationVisibility.obtain(r.getKey(), 1, 1, true)},
+                new NotificationVisibility[]{});
+
+        assertEquals(1, mNotificationRecordLogger.getCalls().size());
+        assertEquals(NotificationRecordLogger.NotificationEvent.NOTIFICATION_OPEN,
+                mNotificationRecordLogger.get(0).event);
+        assertEquals(0, mNotificationRecordLogger.get(0).getInstanceId());
+
+        mService.mNotificationDelegate.onNotificationVisibilityChanged(
+                new NotificationVisibility[]{},
+                new NotificationVisibility[]
+                        {NotificationVisibility.obtain(r.getKey(), 1, 1, true)}
+        );
+
+        assertEquals(2, mNotificationRecordLogger.getCalls().size());
+        assertEquals(NotificationRecordLogger.NotificationEvent.NOTIFICATION_CLOSE,
+                mNotificationRecordLogger.get(1).event);
+        assertEquals(0, mNotificationRecordLogger.get(1).getInstanceId());
+    }
+
+    @Test
     public void testSetNotificationsShownFromListener_triggersInterruptionUsageStat()
             throws RemoteException {
         final NotificationRecord r = generateNotificationRecord(
@@ -5336,21 +5415,7 @@
     }
 
     @Test
-    public void testCancelAllNotifications_cancelsBubble() throws Exception {
-        final NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel);
-        nr.getSbn().getNotification().flags |= FLAG_BUBBLE;
-        mService.addNotification(nr);
-
-        mBinderService.cancelAllNotifications(PKG, nr.getSbn().getUserId());
-        waitForIdle();
-
-        StatusBarNotification[] notifs = mBinderService.getActiveNotifications(PKG);
-        assertEquals(0, notifs.length);
-        assertEquals(0, mService.getNotificationRecordCount());
-    }
-
-    @Test
-    public void testAppCancelNotifications_cancelsBubbles() throws Exception {
+    public void testCancelNotificationsFromApp_cancelsBubbles() throws Exception {
         final NotificationRecord nrBubble = generateNotificationRecord(mTestNotificationChannel);
         nrBubble.getSbn().getNotification().flags |= FLAG_BUBBLE;
 
@@ -5376,6 +5441,20 @@
     }
 
     @Test
+    public void testCancelAllNotificationsFromApp_cancelsBubble() throws Exception {
+        final NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel);
+        nr.getSbn().getNotification().flags |= FLAG_BUBBLE;
+        mService.addNotification(nr);
+
+        mBinderService.cancelAllNotifications(PKG, nr.getSbn().getUserId());
+        waitForIdle();
+
+        StatusBarNotification[] notifs = mBinderService.getActiveNotifications(PKG);
+        assertEquals(0, notifs.length);
+        assertEquals(0, mService.getNotificationRecordCount());
+    }
+
+    @Test
     public void testCancelAllNotificationsFromListener_ignoresBubbles() throws Exception {
         final NotificationRecord nrNormal = generateNotificationRecord(mTestNotificationChannel);
         final NotificationRecord nrBubble = generateNotificationRecord(mTestNotificationChannel);
@@ -5411,6 +5490,25 @@
     }
 
     @Test
+    public void testCancelAllNotificationsFromStatusBar_ignoresBubble() throws Exception {
+        // GIVEN a notification bubble
+        final NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel);
+        nr.getSbn().getNotification().flags |= FLAG_BUBBLE;
+        mService.addNotification(nr);
+
+        // WHEN the status bar clears all notifications
+        mService.mNotificationDelegate.onClearAll(mUid, Binder.getCallingPid(),
+                nr.getSbn().getUserId());
+        waitForIdle();
+
+        // THEN the bubble notification does not get removed
+        StatusBarNotification[] notifs = mBinderService.getActiveNotifications(PKG);
+        assertEquals(1, notifs.length);
+        assertEquals(1, mService.getNotificationRecordCount());
+    }
+
+
+    @Test
     public void testGetAllowedAssistantAdjustments() throws Exception {
         List<String> capabilities = mBinderService.getAllowedAssistantAdjustments(null);
         assertNotNull(capabilities);
@@ -6068,6 +6166,26 @@
     }
 
     @Test
+    public void testNotificationBubbles_bubbleStays_whenClicked()
+            throws Exception {
+        // GIVEN a notification that has the auto cancels flag (cancel on click) and is a bubble
+        setUpPrefsForBubbles(PKG, mUid, true /* global */, true /* app */, true /* channel */);
+        final NotificationRecord nr = generateNotificationRecord(mTestNotificationChannel);
+        nr.getSbn().getNotification().flags |= FLAG_BUBBLE | FLAG_AUTO_CANCEL;
+        mService.addNotification(nr);
+
+        // WHEN we click the notification
+        final NotificationVisibility nv = NotificationVisibility.obtain(nr.getKey(), 1, 2, true);
+        mService.mNotificationDelegate.onNotificationClick(mUid, Binder.getCallingPid(),
+                nr.getKey(), nv);
+        waitForIdle();
+
+        // THEN the bubble should still exist
+        StatusBarNotification[] notifsAfter = mBinderService.getActiveNotifications(PKG);
+        assertEquals(1, notifsAfter.length);
+    }
+
+    @Test
     public void testLoadDefaultApprovedServices_emptyResources() {
         TestableResources tr = mContext.getOrCreateTestableResources();
         tr.addOverride(com.android.internal.R.string.config_defaultListenerAccessPackages, "");
@@ -6273,4 +6391,60 @@
 
         assertEquals(PRIORITY_CATEGORY_CALLS, actual);
     }
+
+    @Test
+    public void testGetConversationsForPackage_hasShortcut() throws Exception {
+        mService.setPreferencesHelper(mPreferencesHelper);
+        ArrayList<ConversationChannelWrapper> convos = new ArrayList<>();
+        ConversationChannelWrapper convo1 = new ConversationChannelWrapper();
+        NotificationChannel channel1 = new NotificationChannel("a", "a", 1);
+        channel1.setConversationId("parent1", "convo 1");
+        convo1.setNotificationChannel(channel1);
+        convos.add(convo1);
+
+        ConversationChannelWrapper convo2 = new ConversationChannelWrapper();
+        NotificationChannel channel2 = new NotificationChannel("b", "b", 1);
+        channel2.setConversationId("parent1", "convo 2");
+        convo2.setNotificationChannel(channel2);
+        convos.add(convo2);
+        when(mPreferencesHelper.getConversations(anyString(), anyInt())).thenReturn(convos);
+
+        // only one valid shortcut
+        LauncherApps.ShortcutQuery query = new LauncherApps.ShortcutQuery()
+                .setPackage(PKG_P)
+                .setQueryFlags(FLAG_MATCH_DYNAMIC | FLAG_MATCH_PINNED)
+                .setShortcutIds(Arrays.asList(channel1.getConversationId()));
+        ShortcutInfo si = mock(ShortcutInfo.class);
+        when(si.getShortLabel()).thenReturn("Hello");
+        when(mLauncherApps.getShortcuts(any(), any())).thenReturn(Arrays.asList(si));
+
+        List<ConversationChannelWrapper> conversations =
+                mBinderService.getConversationsForPackage(PKG_P, mUid).getList();
+        assertEquals(si, conversations.get(0).getShortcutInfo());
+        assertEquals(si, conversations.get(1).getShortcutInfo());
+
+    }
+
+    @Test
+    public void testGetConversationsForPackage_doesNotHaveShortcut() throws Exception {
+        mService.setPreferencesHelper(mPreferencesHelper);
+        ArrayList<ConversationChannelWrapper> convos = new ArrayList<>();
+        ConversationChannelWrapper convo1 = new ConversationChannelWrapper();
+        NotificationChannel channel1 = new NotificationChannel("a", "a", 1);
+        channel1.setConversationId("parent1", "convo 1");
+        convo1.setNotificationChannel(channel1);
+        convos.add(convo1);
+
+        ConversationChannelWrapper convo2 = new ConversationChannelWrapper();
+        NotificationChannel channel2 = new NotificationChannel("b", "b", 1);
+        channel2.setConversationId("parent1", "convo 2");
+        convo2.setNotificationChannel(channel2);
+        convos.add(convo2);
+        when(mPreferencesHelper.getConversations(anyString(), anyInt())).thenReturn(convos);
+
+        List<ConversationChannelWrapper> conversations =
+                mBinderService.getConversationsForPackage(PKG_P, mUid).getList();
+        assertNull(conversations.get(0).getShortcutInfo());
+        assertNull(conversations.get(1).getShortcutInfo());
+    }
 }
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordLoggerFake.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordLoggerFake.java
index 5c1487f..2a17bae 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordLoggerFake.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordLoggerFake.java
@@ -16,6 +16,8 @@
 
 package com.android.server.notification;
 
+import com.android.internal.logging.UiEventLogger;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -24,18 +26,29 @@
  */
 class NotificationRecordLoggerFake implements NotificationRecordLogger {
     static class CallRecord extends NotificationRecordPair {
-        public int position, buzzBeepBlink;
+        public UiEventLogger.UiEventEnum event;
+
+        // The following fields are only relevant to maybeLogNotificationPosted() calls.
+        static final int INVALID = -1;
+        public int position = INVALID, buzzBeepBlink = INVALID;
+        public boolean shouldLogReported;
+
         CallRecord(NotificationRecord r, NotificationRecord old, int position,
                 int buzzBeepBlink) {
             super(r, old);
             this.position = position;
             this.buzzBeepBlink = buzzBeepBlink;
+            shouldLogReported = shouldLogReported(buzzBeepBlink);
+            event = shouldLogReported ? NotificationReportedEvent.fromRecordPair(this) : null;
         }
-        boolean shouldLog() {
-            return shouldLog(buzzBeepBlink);
+
+        CallRecord(NotificationRecord r, UiEventLogger.UiEventEnum event) {
+            super(r, null);
+            shouldLogReported = false;
+            this.event = event;
         }
     }
-    private List<CallRecord> mCalls = new ArrayList<CallRecord>();
+    private List<CallRecord> mCalls = new ArrayList<>();
 
     List<CallRecord> getCalls() {
         return mCalls;
@@ -46,8 +59,19 @@
     }
 
     @Override
-    public void logNotificationReported(NotificationRecord r, NotificationRecord old,
+    public void maybeLogNotificationPosted(NotificationRecord r, NotificationRecord old,
             int position, int buzzBeepBlink) {
         mCalls.add(new CallRecord(r, old, position, buzzBeepBlink));
     }
+
+    @Override
+    public void logNotificationCancelled(NotificationRecord r, int reason, int dismissalSurface) {
+        mCalls.add(new CallRecord(r,
+                NotificationCancelledEvent.fromCancelReason(reason, dismissalSurface)));
+    }
+
+    @Override
+    public void logNotificationVisibility(NotificationRecord r, boolean visible) {
+        mCalls.add(new CallRecord(r, NotificationEvent.fromVisibility(visible)));
+    }
 }
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordLoggerTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordLoggerTest.java
new file mode 100644
index 0000000..f051fa4
--- /dev/null
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordLoggerTest.java
@@ -0,0 +1,119 @@
+/*
+ * 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.notification;
+
+import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.os.UserHandle;
+import android.service.notification.StatusBarNotification;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.server.UiServiceTestCase;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class NotificationRecordLoggerTest extends UiServiceTestCase {
+    private static final int UID = 9999;
+    private static final String CHANNEL_ID = "NotificationRecordLoggerTestChannelId";
+
+    private NotificationRecord getNotification(int id, String tag) {
+        final String packageName = mContext.getPackageName();
+        NotificationChannel channel = new NotificationChannel(
+                CHANNEL_ID, CHANNEL_ID, IMPORTANCE_DEFAULT);
+        Notification.Builder nb = new Notification.Builder(mContext, channel.getId());
+        StatusBarNotification sbn = new StatusBarNotification(packageName, packageName, id, tag,
+                UID, 0, nb.build(), new UserHandle(UID), null,
+                0);
+        return new NotificationRecord(mContext, sbn, channel);
+    }
+
+    private NotificationRecordLogger.NotificationRecordPair getNotificationRecordPair(int id,
+            String tag) {
+        return new NotificationRecordLogger.NotificationRecordPair(getNotification(id, tag),
+                null);
+    }
+
+    @Test
+    public void testSmallHash() {
+        assertEquals(0, NotificationRecordLogger.NotificationRecordPair.smallHash(0));
+        final int maxHash = NotificationRecordLogger.NotificationRecordPair.MAX_HASH;
+        assertEquals(0,
+                NotificationRecordLogger.NotificationRecordPair.smallHash(maxHash));
+        assertEquals(0,
+                NotificationRecordLogger.NotificationRecordPair.smallHash(17 * maxHash));
+        assertEquals(maxHash - 1,
+                NotificationRecordLogger.NotificationRecordPair.smallHash(maxHash - 1));
+        assertEquals(maxHash - 1,
+                NotificationRecordLogger.NotificationRecordPair.smallHash(-1));
+    }
+
+    @Test
+    public void testGetNotificationIdHash() {
+        assertEquals(0,
+                getNotificationRecordPair(0, null).getNotificationIdHash());
+        assertEquals(1,
+                getNotificationRecordPair(1, null).getNotificationIdHash());
+        assertEquals(NotificationRecordLogger.NotificationRecordPair.MAX_HASH - 1,
+                getNotificationRecordPair(-1, null).getNotificationIdHash());
+        final String tag = "someTag";
+        final int hash = NotificationRecordLogger.NotificationRecordPair.smallHash(tag.hashCode());
+        assertEquals(hash, getNotificationRecordPair(0, tag).getNotificationIdHash());
+        // We xor the tag and hashcode together before compressing the range. The order of
+        // operations doesn't matter if id is small.
+        assertEquals(1 ^ hash,
+                getNotificationRecordPair(1, tag).getNotificationIdHash());
+        // But it does matter for an id with more 1 bits than fit in the small hash.
+        assertEquals(
+                NotificationRecordLogger.NotificationRecordPair.smallHash(-1 ^ tag.hashCode()),
+                getNotificationRecordPair(-1, tag).getNotificationIdHash());
+        assertNotEquals(-1 ^ hash,
+                NotificationRecordLogger.NotificationRecordPair.smallHash(-1 ^ tag.hashCode()));
+    }
+
+    @Test
+    public void testGetChannelIdHash() {
+        assertEquals(
+                NotificationRecordLogger.NotificationRecordPair.smallHash(CHANNEL_ID.hashCode()),
+                getNotificationRecordPair(0, null).getChannelIdHash());
+        assertNotEquals(
+                NotificationRecordLogger.NotificationRecordPair.smallHash(CHANNEL_ID.hashCode()),
+                CHANNEL_ID.hashCode());
+    }
+
+    @Test
+    public void testGetGroupIdHash() {
+        NotificationRecordLogger.NotificationRecordPair p = getNotificationRecordPair(
+                0, null);
+        assertEquals(0, p.getGroupIdHash());
+        final String group = "someGroup";
+        p.r.setOverrideGroupKey(group);
+        assertEquals(
+                NotificationRecordLogger.NotificationRecordPair.smallHash(group.hashCode()),
+                p.getGroupIdHash());
+    }
+}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationTest.java
index 0ea53fa..d765042 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationTest.java
@@ -22,9 +22,7 @@
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.anyInt;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 import android.app.ActivityManager;
@@ -32,15 +30,12 @@
 import android.app.PendingIntent;
 import android.app.Person;
 import android.app.RemoteInput;
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.Color;
 import android.graphics.Typeface;
 import android.graphics.drawable.Icon;
 import android.net.Uri;
-import android.os.Build;
 import android.text.SpannableStringBuilder;
 import android.text.Spanned;
 import android.text.style.StyleSpan;
@@ -74,91 +69,13 @@
     }
 
     @Test
-    public void testStripsExtendersInLowRamModeNoWhitelistNoTv() {
+    public void testDoesNotStripsExtenders() {
         Notification.Builder nb = new Notification.Builder(mContext, "channel");
         nb.extend(new Notification.CarExtender().setColor(Color.RED));
         nb.extend(new Notification.TvExtender().setChannelId("different channel"));
         nb.extend(new Notification.WearableExtender().setDismissalId("dismiss"));
         Notification before = nb.build();
-
-        // No whitelist
-        Context context = spy(getContext());
-        when(context.getResources()).thenReturn(mResources);
-        when(mResources.getStringArray(anyInt())).thenReturn(new String[0]);
-
-        Notification after = Notification.Builder.maybeCloneStrippedForDelivery(before, true,
-                context);
-
-        assertEquals("different channel", new Notification.TvExtender(before).getChannelId());
-        assertNull(new Notification.TvExtender(after).getChannelId());
-
-        assertEquals(Color.RED, new Notification.CarExtender(before).getColor());
-        assertEquals(Notification.COLOR_DEFAULT, new Notification.CarExtender(after).getColor());
-
-        assertEquals("dismiss", new Notification.WearableExtender(before).getDismissalId());
-        assertNull(new Notification.WearableExtender(after).getDismissalId());
-    }
-
-    @Test
-    public void testStripsExtendersInLowRamModeHasWhitelist() {
-        Notification.Builder nb = new Notification.Builder(mContext, "channel");
-        nb.extend(new Notification.CarExtender().setColor(Color.RED));
-        nb.extend(new Notification.TvExtender().setChannelId("different channel"));
-        nb.extend(new Notification.WearableExtender().setDismissalId("dismiss"));
-        Notification before = nb.build();
-
-        // Has whitelist
-        Context context = spy(mContext);
-        when(context.getResources()).thenReturn(mResources);
-        when(mResources.getStringArray(anyInt())).thenReturn(new String[1]);
-
-        Notification after = Notification.Builder.maybeCloneStrippedForDelivery(before, true,
-                context);
-
-        assertEquals("different channel", new Notification.TvExtender(before).getChannelId());
-        assertEquals("different channel", new Notification.TvExtender(after).getChannelId());
-
-        assertEquals(Color.RED, new Notification.CarExtender(before).getColor());
-        assertEquals(Color.RED, new Notification.CarExtender(after).getColor());
-
-        assertEquals("dismiss", new Notification.WearableExtender(before).getDismissalId());
-        assertEquals("dismiss", new Notification.WearableExtender(after).getDismissalId());
-    }
-
-    @Test
-    public void testStripsRemoteViewsInLowRamMode() {
-        Context context = spy(mContext);
-        ApplicationInfo ai = new ApplicationInfo();
-        ai.targetSdkVersion = Build.VERSION_CODES.M;
-        when(context.getApplicationInfo()).thenReturn(ai);
-
-        final Notification.BigTextStyle style = new Notification.BigTextStyle()
-                .bigText("hello")
-                .setSummaryText("And the summary");
-        Notification before = new Notification.Builder(context, "channel")
-                .setContentText("hi")
-                .setStyle(style)
-                .build();
-
-        Notification after = Notification.Builder.maybeCloneStrippedForDelivery(before, true,
-                mContext);
-        assertNotNull(before.contentView);
-        assertNotNull(before.bigContentView);
-        assertNotNull(before.headsUpContentView);
-        assertNull(after.contentView);
-        assertNull(after.bigContentView);
-        assertNull(after.headsUpContentView);
-    }
-
-    @Test
-    public void testDoesNotStripsExtendersInNormalRamMode() {
-        Notification.Builder nb = new Notification.Builder(mContext, "channel");
-        nb.extend(new Notification.CarExtender().setColor(Color.RED));
-        nb.extend(new Notification.TvExtender().setChannelId("different channel"));
-        nb.extend(new Notification.WearableExtender().setDismissalId("dismiss"));
-        Notification before = nb.build();
-        Notification after = Notification.Builder.maybeCloneStrippedForDelivery(before, false,
-                mContext);
+        Notification after = Notification.Builder.maybeCloneStrippedForDelivery(before);
 
         assertTrue(before == after);
 
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 bb84b04..7f9732b 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
@@ -26,6 +26,8 @@
 
 import static com.android.server.notification.PreferencesHelper.NOTIFICATION_CHANNEL_COUNT_LIMIT;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static junit.framework.Assert.assertNull;
 import static junit.framework.Assert.fail;
 
@@ -64,6 +66,7 @@
 import android.provider.Settings;
 import android.provider.Settings.Global;
 import android.provider.Settings.Secure;
+import android.service.notification.ConversationChannelWrapper;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.testing.TestableContentResolver;
 import android.util.ArrayMap;
@@ -91,6 +94,7 @@
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -104,6 +108,7 @@
     private static final int UID_N_MR1 = 0;
     private static final UserHandle USER = UserHandle.of(0);
     private static final int UID_O = 1111;
+    private static final int UID_P = 2222;
     private static final String SYSTEM_PKG = "android";
     private static final int SYSTEM_UID = 1000;
     private static final UserHandle USER2 = UserHandle.of(10);
@@ -137,9 +142,11 @@
         upgrade.targetSdkVersion = Build.VERSION_CODES.O;
         when(mPm.getApplicationInfoAsUser(eq(PKG_N_MR1), anyInt(), anyInt())).thenReturn(legacy);
         when(mPm.getApplicationInfoAsUser(eq(PKG_O), anyInt(), anyInt())).thenReturn(upgrade);
+        when(mPm.getApplicationInfoAsUser(eq(PKG_P), anyInt(), anyInt())).thenReturn(upgrade);
         when(mPm.getApplicationInfoAsUser(eq(SYSTEM_PKG), anyInt(), anyInt())).thenReturn(upgrade);
         when(mPm.getPackageUidAsUser(eq(PKG_N_MR1), anyInt())).thenReturn(UID_N_MR1);
         when(mPm.getPackageUidAsUser(eq(PKG_O), anyInt())).thenReturn(UID_O);
+        when(mPm.getPackageUidAsUser(eq(PKG_P), anyInt())).thenReturn(UID_P);
         when(mPm.getPackageUidAsUser(eq(SYSTEM_PKG), anyInt())).thenReturn(SYSTEM_UID);
         PackageInfo info = mock(PackageInfo.class);
         info.signatures = new Signature[] {mock(Signature.class)};
@@ -2939,4 +2946,225 @@
 
         assertNotNull(mHelper.getNotificationChannel(PKG_O, UID_O, "id", true));
     }
+
+    @Test
+    public void testGetConversations_all() {
+        String convoId = "convo";
+        NotificationChannel messages =
+                new NotificationChannel("messages", "Messages", IMPORTANCE_DEFAULT);
+        mHelper.createNotificationChannel(PKG_O, UID_O, messages, true, false);
+        NotificationChannel calls =
+                new NotificationChannel("calls", "Calls", IMPORTANCE_DEFAULT);
+        mHelper.createNotificationChannel(PKG_O, UID_O, calls, true, false);
+        NotificationChannel p =
+                new NotificationChannel("p calls", "Calls", IMPORTANCE_DEFAULT);
+        mHelper.createNotificationChannel(PKG_P, UID_P, p, true, false);
+
+        NotificationChannel channel =
+                new NotificationChannel("A person msgs", "messages from A", IMPORTANCE_DEFAULT);
+        channel.setConversationId(messages.getId(), convoId);
+        mHelper.createNotificationChannel(PKG_O, UID_O, channel, true, false);
+
+        NotificationChannel diffConvo =
+                new NotificationChannel("B person msgs", "messages from B", IMPORTANCE_DEFAULT);
+        diffConvo.setConversationId(p.getId(), "different convo");
+        mHelper.createNotificationChannel(PKG_P, UID_P, diffConvo, true, false);
+
+        NotificationChannel channel2 =
+                new NotificationChannel("A person calls", "calls from A", IMPORTANCE_DEFAULT);
+        channel2.setConversationId(calls.getId(), convoId);
+        channel2.setImportantConversation(true);
+        mHelper.createNotificationChannel(PKG_O, UID_O, channel2, true, false);
+
+        List<ConversationChannelWrapper> convos = mHelper.getConversations(false);
+
+        assertEquals(3, convos.size());
+        assertTrue(conversationWrapperContainsChannel(convos, channel));
+        assertTrue(conversationWrapperContainsChannel(convos, diffConvo));
+        assertTrue(conversationWrapperContainsChannel(convos, channel2));
+    }
+
+    @Test
+    public void testGetConversations_onlyImportant() {
+        String convoId = "convo";
+        NotificationChannel messages =
+                new NotificationChannel("messages", "Messages", IMPORTANCE_DEFAULT);
+        mHelper.createNotificationChannel(PKG_O, UID_O, messages, true, false);
+        NotificationChannel calls =
+                new NotificationChannel("calls", "Calls", IMPORTANCE_DEFAULT);
+        mHelper.createNotificationChannel(PKG_O, UID_O, calls, true, false);
+        NotificationChannel p =
+                new NotificationChannel("p calls", "Calls", IMPORTANCE_DEFAULT);
+        mHelper.createNotificationChannel(PKG_P, UID_P, p, true, false);
+
+        NotificationChannel channel =
+                new NotificationChannel("A person msgs", "messages from A", IMPORTANCE_DEFAULT);
+        channel.setConversationId(messages.getId(), convoId);
+        channel.setImportantConversation(true);
+        mHelper.createNotificationChannel(PKG_O, UID_O, channel, true, false);
+
+        NotificationChannel diffConvo =
+                new NotificationChannel("B person msgs", "messages from B", IMPORTANCE_DEFAULT);
+        diffConvo.setConversationId(p.getId(), "different convo");
+        diffConvo.setImportantConversation(true);
+        mHelper.createNotificationChannel(PKG_P, UID_P, diffConvo, true, false);
+
+        NotificationChannel channel2 =
+                new NotificationChannel("A person calls", "calls from A", IMPORTANCE_DEFAULT);
+        channel2.setConversationId(calls.getId(), convoId);
+        mHelper.createNotificationChannel(PKG_O, UID_O, channel2, true, false);
+
+        List<ConversationChannelWrapper> convos = mHelper.getConversations(true);
+
+        assertEquals(2, convos.size());
+        assertTrue(conversationWrapperContainsChannel(convos, channel));
+        assertTrue(conversationWrapperContainsChannel(convos, diffConvo));
+        assertFalse(conversationWrapperContainsChannel(convos, channel2));
+    }
+
+    private boolean conversationWrapperContainsChannel(List<ConversationChannelWrapper> list,
+            NotificationChannel expected) {
+        for (ConversationChannelWrapper ccw : list) {
+            if (ccw.getNotificationChannel().equals(expected)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    @Test
+    public void testGetConversations_invalidPkg() {
+        assertThat(mHelper.getConversations("bad", 1)).isEmpty();
+    }
+
+    @Test
+    public void testGetConversations_noConversations() {
+        NotificationChannel channel =
+                new NotificationChannel("not_convo", "not_convo", IMPORTANCE_DEFAULT);
+        mHelper.createNotificationChannel(PKG_O, UID_O, channel, true, false);
+
+        assertThat(mHelper.getConversations(PKG_O, UID_O)).isEmpty();
+    }
+
+    @Test
+    public void testGetConversations_noDisabledGroups() {
+        NotificationChannelGroup group = new NotificationChannelGroup("a", "a");
+        group.setBlocked(true);
+        mHelper.createNotificationChannelGroup(PKG_O, UID_O, group, true);
+        NotificationChannel parent = new NotificationChannel("parent", "p", 1);
+        mHelper.createNotificationChannel(PKG_O, UID_O, parent, true, false);
+
+        NotificationChannel channel =
+                new NotificationChannel("convo", "convo", IMPORTANCE_DEFAULT);
+        channel.setConversationId("parent", "convo");
+        channel.setGroup(group.getId());
+        mHelper.createNotificationChannel(PKG_O, UID_O, channel, true, false);
+
+        assertThat(mHelper.getConversations(PKG_O, UID_O)).isEmpty();
+    }
+
+    @Test
+    public void testGetConversations_noDeleted() {
+        NotificationChannel parent = new NotificationChannel("parent", "p", 1);
+        mHelper.createNotificationChannel(PKG_O, UID_O, parent, true, false);
+        NotificationChannel channel =
+                new NotificationChannel("convo", "convo", IMPORTANCE_DEFAULT);
+        channel.setConversationId("parent", "convo");
+        mHelper.createNotificationChannel(PKG_O, UID_O, channel, true, false);
+        mHelper.deleteNotificationChannel(PKG_O, UID_O, channel.getId());
+
+        assertThat(mHelper.getConversations(PKG_O, UID_O)).isEmpty();
+    }
+
+    @Test
+    public void testGetConversations() {
+        NotificationChannelGroup group = new NotificationChannelGroup("acct", "account_name");
+        mHelper.createNotificationChannelGroup(PKG_O, UID_O, group, true);
+
+        NotificationChannel messages =
+                new NotificationChannel("messages", "Messages", IMPORTANCE_DEFAULT);
+        messages.setGroup(group.getId());
+        mHelper.createNotificationChannel(PKG_O, UID_O, messages, true, false);
+        NotificationChannel calls =
+                new NotificationChannel("calls", "Calls", IMPORTANCE_HIGH);
+        mHelper.createNotificationChannel(PKG_O, UID_O, calls, true, false);
+
+        NotificationChannel channel =
+                new NotificationChannel("A person", "A lovely person", IMPORTANCE_DEFAULT);
+        channel.setGroup(group.getId());
+        channel.setConversationId(messages.getId(), channel.getName().toString());
+        mHelper.createNotificationChannel(PKG_O, UID_O, channel, true, false);
+
+        NotificationChannel channel2 =
+                new NotificationChannel("B person", "B fabulous person", IMPORTANCE_DEFAULT);
+        channel2.setConversationId(calls.getId(), channel2.getName().toString());
+        mHelper.createNotificationChannel(PKG_O, UID_O, channel2, true, false);
+
+        Map<String, NotificationChannel> expected = new HashMap<>();
+        expected.put(channel.getId(), channel);
+        expected.put(channel2.getId(), channel2);
+
+        Map<String, CharSequence> expectedGroup = new HashMap<>();
+        expectedGroup.put(channel.getId(), group.getName());
+        expectedGroup.put(channel2.getId(), null);
+
+        Map<String, CharSequence> expectedParentLabel= new HashMap<>();
+        expectedParentLabel.put(channel.getId(), messages.getName());
+        expectedParentLabel.put(channel2.getId(), calls.getName());
+
+        ArrayList<ConversationChannelWrapper> convos = mHelper.getConversations(PKG_O, UID_O);
+        assertThat(convos).hasSize(2);
+
+        for (ConversationChannelWrapper convo : convos) {
+            assertThat(convo.getNotificationChannel())
+                    .isEqualTo(expected.get(convo.getNotificationChannel().getId()));
+            assertThat(convo.getParentChannelLabel())
+                    .isEqualTo(expectedParentLabel.get(convo.getNotificationChannel().getId()));
+            assertThat(convo.getGroupLabel())
+                    .isEqualTo(expectedGroup.get(convo.getNotificationChannel().getId()));
+        }
+    }
+
+    @Test
+    public void testDeleteConversation() {
+        String convoId = "convo";
+        NotificationChannel messages =
+                new NotificationChannel("messages", "Messages", IMPORTANCE_DEFAULT);
+        mHelper.createNotificationChannel(PKG_O, UID_O, messages, true, false);
+        NotificationChannel calls =
+                new NotificationChannel("calls", "Calls", IMPORTANCE_DEFAULT);
+        mHelper.createNotificationChannel(PKG_O, UID_O, calls, true, false);
+
+        NotificationChannel channel =
+                new NotificationChannel("A person msgs", "messages from A", IMPORTANCE_DEFAULT);
+        channel.setConversationId(messages.getId(), convoId);
+        mHelper.createNotificationChannel(PKG_O, UID_O, channel, true, false);
+
+        NotificationChannel noMatch =
+                new NotificationChannel("B person msgs", "messages from B", IMPORTANCE_DEFAULT);
+        noMatch.setConversationId(messages.getId(), "different convo");
+        mHelper.createNotificationChannel(PKG_O, UID_O, noMatch, true, false);
+
+        NotificationChannel channel2 =
+                new NotificationChannel("A person calls", "calls from A", IMPORTANCE_DEFAULT);
+        channel2.setConversationId(calls.getId(), convoId);
+        mHelper.createNotificationChannel(PKG_O, UID_O, channel2, true, false);
+
+        assertEquals(channel, mHelper.getNotificationChannel(PKG_O, UID_O, channel.getId(), false));
+        assertEquals(channel2,
+                mHelper.getNotificationChannel(PKG_O, UID_O, channel2.getId(), false));
+        assertEquals(2, mHelper.deleteConversation(PKG_O, UID_O, convoId).size());
+
+        assertEquals(messages,
+                mHelper.getNotificationChannel(PKG_O, UID_O, messages.getId(), false));
+        assertEquals(noMatch,
+                mHelper.getNotificationChannel(PKG_O, UID_O, noMatch.getId(), false));
+
+        assertNull(mHelper.getNotificationChannel(PKG_O, UID_O, channel.getId(), false));
+        assertNull(mHelper.getNotificationChannel(PKG_O, UID_O, channel2.getId(), false));
+        assertEquals(channel, mHelper.getNotificationChannel(PKG_O, UID_O, channel.getId(), true));
+        assertEquals(channel2,
+                mHelper.getNotificationChannel(PKG_O, UID_O, channel2.getId(), true));
+    }
 }
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/RoleObserverTest.java b/services/tests/uiservicestests/src/com/android/server/notification/RoleObserverTest.java
index 64a9804..27f72a1 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/RoleObserverTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/RoleObserverTest.java
@@ -35,6 +35,7 @@
 import android.app.AppOpsManager;
 import android.app.IActivityManager;
 import android.app.IUriGrantsManager;
+import android.app.StatsManager;
 import android.app.admin.DevicePolicyManagerInternal;
 import android.app.role.RoleManager;
 import android.app.usage.UsageStatsManagerInternal;
@@ -142,7 +143,8 @@
                     mock(UsageStatsManagerInternal.class),
                     mock(DevicePolicyManagerInternal.class), mock(IUriGrantsManager.class),
                     mock(UriGrantsManagerInternal.class),
-                    mock(AppOpsManager.class), mUm, mock(NotificationHistoryManager.class));
+                    mock(AppOpsManager.class), mUm, mock(NotificationHistoryManager.class),
+                    mock(StatsManager.class));
         } catch (SecurityException e) {
             if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) {
                 throw e;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java
index 3186d53..1dd0b1a 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java
@@ -15,15 +15,18 @@
  */
 package com.android.server.notification;
 
+import static com.android.server.notification.SnoozeHelper.EXTRA_KEY;
+
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
 import static junit.framework.Assert.assertNull;
+import static junit.framework.Assert.assertTrue;
 
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.anyLong;
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -322,8 +325,12 @@
         mSnoozeHelper.snooze(r, 1000);
         NotificationRecord r2 = getNotificationRecord("pkg", 2, "one", UserHandle.ALL);
         mSnoozeHelper.snooze(r2, 1000);
+        reset(mAm);
         mSnoozeHelper.repost(r.getKey(), UserHandle.USER_SYSTEM);
         verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r);
+        ArgumentCaptor<PendingIntent> captor = ArgumentCaptor.forClass(PendingIntent.class);
+        verify(mAm).cancel(captor.capture());
+        assertEquals(r.getKey(), captor.getValue().getIntent().getStringExtra(EXTRA_KEY));
     }
 
     @Test
@@ -332,8 +339,10 @@
         mSnoozeHelper.snooze(r, 1000);
         NotificationRecord r2 = getNotificationRecord("pkg", 2, "one", UserHandle.ALL);
         mSnoozeHelper.snooze(r2, 1000);
+        reset(mAm);
         mSnoozeHelper.repost(r.getKey());
         verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r);
+        verify(mAm).cancel(any(PendingIntent.class));
     }
 
     @Test
@@ -370,31 +379,7 @@
     }
 
     @Test
-    public void testGetSnoozedByUser() throws Exception {
-        NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
-        NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM);
-        NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM);
-        NotificationRecord r4 = getNotificationRecord("pkg2", 3, "three", UserHandle.CURRENT);
-        mSnoozeHelper.snooze(r, 1000);
-        mSnoozeHelper.snooze(r2, 1000);
-        mSnoozeHelper.snooze(r3, 1000);
-        mSnoozeHelper.snooze(r4, 1000);
-        IntArray profileIds = new IntArray();
-        profileIds.add(UserHandle.USER_SYSTEM);
-        when(mUserProfiles.getCurrentProfileIds()).thenReturn(profileIds);
-        assertEquals(3, mSnoozeHelper.getSnoozed().size());
-        profileIds = new IntArray();
-        profileIds.add(UserHandle.USER_CURRENT);
-        when(mUserProfiles.getCurrentProfileIds()).thenReturn(profileIds);
-        assertEquals(1, mSnoozeHelper.getSnoozed().size());
-    }
-
-    @Test
-    public void testGetSnoozedByUser_managedProfiles() throws Exception {
-        IntArray profileIds = new IntArray();
-        profileIds.add(UserHandle.USER_CURRENT);
-        profileIds.add(UserHandle.USER_SYSTEM);
-        when(mUserProfiles.getCurrentProfileIds()).thenReturn(profileIds);
+    public void testGetSnoozedBy() throws Exception {
         NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
         NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM);
         NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM);
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
index bc2766c..cee486f 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
@@ -16,6 +16,19 @@
 
 package com.android.server.notification;
 
+import static android.app.NotificationManager.Policy.CONVERSATION_SENDERS_ANYONE;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_CALLS;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_CONVERSATIONS;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_EVENTS;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_MEDIA;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_MESSAGES;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_REMINDERS;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_REPEAT_CALLERS;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_SYSTEM;
+import static android.app.NotificationManager.Policy.PRIORITY_SENDERS_ANY;
+import static android.app.NotificationManager.Policy.PRIORITY_SENDERS_CONTACTS;
+import static android.app.NotificationManager.Policy.PRIORITY_SENDERS_STARRED;
 import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_BADGE;
 import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_FULL_SCREEN_INTENT;
 import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS;
@@ -219,7 +232,7 @@
     public void testZenOff_NoMuteApplied() {
         mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_OFF;
         mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
-                Policy.PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0);
+                PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0);
         mZenModeHelperSpy.applyRestrictions();
 
         doNothing().when(mZenModeHelperSpy).applyRestrictions(eq(false), anyBoolean(), anyInt());
@@ -230,10 +243,73 @@
     }
 
     @Test
+    public void testZenOn_NotificationApplied() {
+        mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
+        // The most permissive policy
+        mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
+                PRIORITY_CATEGORY_MEDIA | PRIORITY_CATEGORY_MESSAGES
+                | PRIORITY_CATEGORY_CONVERSATIONS | PRIORITY_CATEGORY_CALLS
+                | PRIORITY_CATEGORY_ALARMS | PRIORITY_CATEGORY_EVENTS | PRIORITY_CATEGORY_REMINDERS
+                | PRIORITY_CATEGORY_REPEAT_CALLERS | PRIORITY_CATEGORY_SYSTEM, PRIORITY_SENDERS_ANY,
+                PRIORITY_SENDERS_ANY, 0, CONVERSATION_SENDERS_ANYONE);
+        mZenModeHelperSpy.applyRestrictions();
+
+        doNothing().when(mZenModeHelperSpy).applyRestrictions(anyBoolean(), anyBoolean(), anyInt());
+        verify(mZenModeHelperSpy).applyRestrictions(true, true,
+                AudioAttributes.USAGE_NOTIFICATION);
+        verify(mZenModeHelperSpy).applyRestrictions(true, true,
+                AudioAttributes.USAGE_NOTIFICATION_EVENT);
+        verify(mZenModeHelperSpy).applyRestrictions(true, true,
+                AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_DELAYED);
+        verify(mZenModeHelperSpy).applyRestrictions(true, true,
+                AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT);
+    }
+
+    @Test
+    public void testZenOn_StarredCallers_CallTypesBlocked() {
+        mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
+        // The most permissive policy
+        mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
+                PRIORITY_CATEGORY_MEDIA | PRIORITY_CATEGORY_MESSAGES
+                | PRIORITY_CATEGORY_CONVERSATIONS | PRIORITY_CATEGORY_CALLS
+                | PRIORITY_CATEGORY_ALARMS | PRIORITY_CATEGORY_EVENTS | PRIORITY_CATEGORY_REMINDERS
+                | PRIORITY_CATEGORY_SYSTEM,
+                PRIORITY_SENDERS_STARRED,
+                PRIORITY_SENDERS_ANY, 0, CONVERSATION_SENDERS_ANYONE);
+        mZenModeHelperSpy.applyRestrictions();
+
+        doNothing().when(mZenModeHelperSpy).applyRestrictions(anyBoolean(), anyBoolean(), anyInt());
+        verify(mZenModeHelperSpy).applyRestrictions(true, true,
+                AudioAttributes.USAGE_NOTIFICATION_RINGTONE);
+        verify(mZenModeHelperSpy).applyRestrictions(true, true,
+                AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST);
+    }
+
+    @Test
+    public void testZenOn_AllCallers_CallTypesAllowed() {
+        mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
+        // The most permissive policy
+        mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
+                PRIORITY_CATEGORY_MEDIA | PRIORITY_CATEGORY_MESSAGES
+                | PRIORITY_CATEGORY_CONVERSATIONS | PRIORITY_CATEGORY_CALLS
+                | PRIORITY_CATEGORY_ALARMS | PRIORITY_CATEGORY_EVENTS | PRIORITY_CATEGORY_REMINDERS
+                | PRIORITY_CATEGORY_REPEAT_CALLERS | PRIORITY_CATEGORY_SYSTEM,
+                PRIORITY_SENDERS_ANY,
+                PRIORITY_SENDERS_ANY, 0, CONVERSATION_SENDERS_ANYONE);
+        mZenModeHelperSpy.applyRestrictions();
+
+        doNothing().when(mZenModeHelperSpy).applyRestrictions(anyBoolean(), anyBoolean(), anyInt());
+        verify(mZenModeHelperSpy).applyRestrictions(true, false,
+                AudioAttributes.USAGE_NOTIFICATION_RINGTONE);
+        verify(mZenModeHelperSpy).applyRestrictions(true, false,
+                AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST);
+    }
+
+    @Test
     public void testZenOn_AllowAlarmsMedia_NoAlarmMediaMuteApplied() {
         mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
         mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
-                Policy.PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0);
+                PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0);
 
         mZenModeHelperSpy.applyRestrictions();
         verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, false,
@@ -261,7 +337,7 @@
     public void testTotalSilence() {
         mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_NO_INTERRUPTIONS;
         mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
-                Policy.PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0);
+                PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0);
         mZenModeHelperSpy.applyRestrictions();
 
         // Total silence will silence alarms, media and system noises (but not vibrations)
diff --git a/services/tests/wmtests/AndroidManifest.xml b/services/tests/wmtests/AndroidManifest.xml
index 8c454424..123bb07 100644
--- a/services/tests/wmtests/AndroidManifest.xml
+++ b/services/tests/wmtests/AndroidManifest.xml
@@ -37,6 +37,7 @@
     <uses-permission android:name="android.permission.WAKE_LOCK" />
     <uses-permission android:name="android.permission.REORDER_TASKS" />
     <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
+    <uses-permission android:name="android.permission.STATUS_BAR" />
 
     <!-- TODO: Remove largeHeap hack when memory leak is fixed (b/123984854) -->
     <application android:debuggable="true"
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
index ebe4ab9..a0ea729 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -29,6 +29,7 @@
 import static android.view.WindowManager.TRANSIT_TASK_CLOSE;
 
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyBoolean;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.atLeast;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
@@ -140,6 +141,19 @@
     }
 
     @Test
+    public void testRemoveChildWithOverlayActivity() {
+        final ActivityRecord overlayActivity =
+                new ActivityBuilder(mService).setTask(mTask).build();
+        overlayActivity.setTaskOverlay(true);
+        final ActivityRecord overlayActivity2 =
+                new ActivityBuilder(mService).setTask(mTask).build();
+        overlayActivity2.setTaskOverlay(true);
+
+        mTask.removeChild(overlayActivity2, "test");
+        verify(mSupervisor, never()).removeTask(any(), anyBoolean(), anyBoolean(), any());
+    }
+
+    @Test
     public void testNoCleanupMovingActivityInSameStack() {
         final Task newTask = new TaskBuilder(mService.mStackSupervisor).setStack(mStack).build();
         mActivity.reparent(newTask, 0, null /*reason*/);
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStackSupervisorTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStackSupervisorTests.java
index 9647178..e8c0362 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStackSupervisorTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStackSupervisorTests.java
@@ -144,4 +144,33 @@
                 anyInt() /* reason */, anyString() /* packageName */);
         verify(taskChangeNotifier, never()).notifyActivityDismissingDockedStack();
     }
+
+    /**
+     * Ensures that notify focus task changes.
+     */
+    @Test
+    public void testNotifyTaskFocusChanged() {
+        final ActivityRecord fullScreenActivityA = new ActivityBuilder(mService).setCreateTask(true)
+                .setStack(mFullscreenStack).build();
+        final Task taskA = fullScreenActivityA.getTask();
+
+        final TaskChangeNotificationController taskChangeNotifier =
+                mService.getTaskChangeNotificationController();
+        spyOn(taskChangeNotifier);
+
+        mService.setResumedActivityUncheckLocked(fullScreenActivityA, "resumeA");
+        verify(taskChangeNotifier).notifyTaskFocusChanged(eq(taskA.mTaskId) /* taskId */,
+                eq(true) /* focused */);
+        reset(taskChangeNotifier);
+
+        final ActivityRecord fullScreenActivityB = new ActivityBuilder(mService).setCreateTask(true)
+                .setStack(mFullscreenStack).build();
+        final Task taskB = fullScreenActivityB.getTask();
+
+        mService.setResumedActivityUncheckLocked(fullScreenActivityB, "resumeB");
+        verify(taskChangeNotifier).notifyTaskFocusChanged(eq(taskA.mTaskId) /* taskId */,
+                eq(false) /* focused */);
+        verify(taskChangeNotifier).notifyTaskFocusChanged(eq(taskB.mTaskId) /* taskId */,
+                eq(true) /* focused */);
+    }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
index 393d8b8..52fc3de 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
@@ -54,8 +54,12 @@
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
 
+import android.app.ActivityManager;
+import android.app.IApplicationThread;
 import android.content.ComponentName;
 import android.content.pm.ActivityInfo;
 import android.os.UserHandle;
@@ -1109,6 +1113,37 @@
     }
 
     @Test
+    public void testNavigateUpTo() {
+        final ActivityStartController controller = mock(ActivityStartController.class);
+        final ActivityStarter starter = new ActivityStarter(controller,
+                mService, mService.mStackSupervisor, mock(ActivityStartInterceptor.class));
+        doReturn(controller).when(mService).getActivityStartController();
+        spyOn(starter);
+        doReturn(ActivityManager.START_SUCCESS).when(starter).execute();
+
+        final ActivityRecord firstActivity = new ActivityBuilder(mService).setTask(mTask).build();
+        final ActivityRecord secondActivity = new ActivityBuilder(mService).setTask(mTask)
+                .setUid(firstActivity.getUid() + 1).build();
+        doReturn(starter).when(controller).obtainStarter(eq(firstActivity.intent), anyString());
+
+        final IApplicationThread thread = secondActivity.app.getThread();
+        secondActivity.app.setThread(null);
+        // This should do nothing from a non-attached caller.
+        assertFalse(mStack.navigateUpTo(secondActivity /* source record */,
+                firstActivity.intent /* destIntent */, 0 /* resultCode */, null /* resultData */));
+
+        secondActivity.app.setThread(thread);
+        assertTrue(mStack.navigateUpTo(secondActivity /* source record */,
+                firstActivity.intent /* destIntent */, 0 /* resultCode */, null /* resultData */));
+        // The firstActivity uses default launch mode, so the activities between it and itself will
+        // be finished.
+        assertTrue(secondActivity.finishing);
+        assertTrue(firstActivity.finishing);
+        // The caller uid of the new activity should be the current real caller.
+        assertEquals(starter.mRequest.callingUid, secondActivity.getUid());
+    }
+
+    @Test
     public void testResetTaskWithFinishingActivities() {
         final ActivityRecord taskTop =
                 new ActivityBuilder(mService).setStack(mStack).setCreateTask(true).build();
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStartInterceptorTest.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStartInterceptorTest.java
index 135d005..af04f76 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStartInterceptorTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStartInterceptorTest.java
@@ -120,7 +120,7 @@
         mInterceptor = new ActivityStartInterceptor(
                 mService, mSupervisor, mRootWindowContainer, mContext);
         mInterceptor.setStates(TEST_USER_ID, TEST_REAL_CALLING_PID, TEST_REAL_CALLING_UID,
-                TEST_START_FLAGS, TEST_CALLING_PACKAGE);
+                TEST_START_FLAGS, TEST_CALLING_PACKAGE, null);
 
         // Mock ActivityManagerInternal
         LocalServices.removeServiceForTest(ActivityManagerInternal.class);
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 bab877e..b917e1b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -29,6 +29,7 @@
 import static android.app.ActivityManager.START_SWITCHES_CANCELED;
 import static android.app.ActivityManager.START_TASK_TO_FRONT;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
 import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
@@ -64,8 +65,10 @@
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 
+import android.app.ActivityManager;
 import android.app.ActivityOptions;
 import android.app.IApplicationThread;
+import android.app.WindowConfiguration;
 import android.content.ComponentName;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
@@ -80,6 +83,9 @@
 import android.platform.test.annotations.Presubmit;
 import android.service.voice.IVoiceInteractionSession;
 import android.view.Gravity;
+import android.view.ITaskOrganizer;
+import android.view.IWindowContainer;
+import android.view.SurfaceControl;
 
 import androidx.test.filters.SmallTest;
 
@@ -275,7 +281,7 @@
 
         if (containsConditions(preconditions, PRECONDITION_CANNOT_START_ANY_ACTIVITY)) {
             doReturn(false).when(service.mStackSupervisor).checkStartAnyActivityPermission(
-                    any(), any(), any(), anyInt(), anyInt(), anyInt(), any(),
+                    any(), any(), any(), anyInt(), anyInt(), anyInt(), any(), any(),
                     anyBoolean(), anyBoolean(), any(), any(), any());
         }
 
@@ -349,7 +355,7 @@
             boolean mockGetLaunchStack) {
         // always allow test to start activity.
         doReturn(true).when(mSupervisor).checkStartAnyActivityPermission(
-                any(), any(), any(), anyInt(), anyInt(), anyInt(), any(),
+                any(), any(), any(), anyInt(), anyInt(), anyInt(), any(), any(),
                 anyBoolean(), anyBoolean(), any(), any(), any());
 
         if (mockGetLaunchStack) {
@@ -372,7 +378,7 @@
         doReturn(mMockPackageManager).when(mService).getPackageManagerInternalLocked();
         doReturn(false).when(mMockPackageManager).isInstantAppInstallerComponent(any());
         doReturn(null).when(mMockPackageManager).resolveIntent(any(), any(), anyInt(), anyInt(),
-                anyBoolean(), anyInt());
+                anyInt(), anyBoolean(), anyInt());
 
         // Never review permissions
         doReturn(false).when(mMockPackageManager).isPermissionsReviewRequired(any(), anyInt());
@@ -999,7 +1005,8 @@
         assertThat(outActivity[0].inSplitScreenWindowingMode()).isFalse();
 
         // Move activity to split-screen-primary stack and make sure it has the focus.
-        top.getRootTask().setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+        TestSplitOrganizer splitOrg = new TestSplitOrganizer(mService, top.getDisplayId());
+        splitOrg.mPrimary.addChild(top.getRootTask(), 0 /* index */);
         top.getRootTask().moveToFront("testWindowingModeOptionsLaunchAdjacent");
 
         // Activity must landed on split-screen-secondary when launch adjacent.
@@ -1022,4 +1029,58 @@
 
         verify(recentTasks, times(1)).add(any());
     }
+
+    static class TestSplitOrganizer extends ITaskOrganizer.Stub {
+        final ActivityTaskManagerService mService;
+        TaskTile mPrimary;
+        TaskTile mSecondary;
+        boolean mInSplit = false;
+        int mDisplayId;
+        TestSplitOrganizer(ActivityTaskManagerService service, int displayId) {
+            mService = service;
+            mDisplayId = displayId;
+            mService.mTaskOrganizerController.registerTaskOrganizer(this,
+                    WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+            mService.mTaskOrganizerController.registerTaskOrganizer(this,
+                    WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+            IWindowContainer primary = mService.mTaskOrganizerController.createRootTask(
+                    displayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).token;
+            mPrimary = TaskTile.forToken(primary.asBinder());
+            IWindowContainer secondary = mService.mTaskOrganizerController.createRootTask(
+                    displayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).token;
+            mSecondary = TaskTile.forToken(secondary.asBinder());
+        }
+        @Override
+        public void taskAppeared(ActivityManager.RunningTaskInfo info) {
+        }
+        @Override
+        public void taskVanished(IWindowContainer wc) {
+        }
+        @Override
+        public void transactionReady(int id, SurfaceControl.Transaction t) {
+        }
+        @Override
+        public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
+            if (mInSplit) {
+                return;
+            }
+            if (info.topActivityType != ACTIVITY_TYPE_UNDEFINED) {
+                if (info.configuration.windowConfiguration.getWindowingMode()
+                        == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
+                    mInSplit = true;
+                    mService.mTaskOrganizerController.setLaunchRoot(mDisplayId,
+                            mSecondary.mRemoteToken);
+                    // move everything to secondary because test expects this but usually sysui
+                    // does it.
+                    DisplayContent dc = mService.mRootWindowContainer.getDisplayContent(mDisplayId);
+                    for (int i = dc.getStackCount() - 1; i >= 0; --i) {
+                        if (!WindowConfiguration.isSplitScreenWindowingMode(
+                                dc.getStackAt(i).getWindowingMode())) {
+                            mSecondary.addChild(dc.getStackAt(i), 0);
+                        }
+                    }
+                }
+            }
+        }
+    };
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java
index eb84d0a..b6b3bc6 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java
@@ -238,6 +238,7 @@
             aInfo.applicationInfo.uid = mUid;
             aInfo.processName = mProcessName;
             aInfo.packageName = mComponent.getPackageName();
+            aInfo.name = mComponent.getClassName();
             if (mTargetActivity != null) {
                 aInfo.targetActivity = mTargetActivity;
             }
@@ -255,10 +256,10 @@
 
             final ActivityRecord activity = new ActivityRecord(mService, null /* caller */,
                     mLaunchedFromPid /* launchedFromPid */, mLaunchedFromUid /* launchedFromUid */,
-                    null, intent, null, aInfo /*aInfo*/, new Configuration(), null /* resultTo */,
-                    null /* resultWho */, 0 /* reqCode */, false /*componentSpecified*/,
-                    false /* rootVoiceInteraction */, mService.mStackSupervisor, options,
-                    null /* sourceRecord */);
+                    null, null, intent, null, aInfo /*aInfo*/, new Configuration(),
+                    null /* resultTo */, null /* resultWho */, 0 /* reqCode */,
+                    false /*componentSpecified*/, false /* rootVoiceInteraction */,
+                    mService.mStackSupervisor, options, null /* sourceRecord */);
             spyOn(activity);
             if (mTask != null) {
                 // fullscreen value is normally read from resources in ctor, so for testing we need
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java
index 70e5ee7..683fca4 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java
@@ -209,6 +209,7 @@
     }
 
     @Test
+    @FlakyTest(bugId = 149760957)
     public void testSizeCompatBounds() {
         // Disable the real configuration resolving because we only simulate partial flow.
         // TODO: Have test use full flow.
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayAreaPolicyBuilderTest.java b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaPolicyBuilderTest.java
new file mode 100644
index 0000000..cc9173a
--- /dev/null
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaPolicyBuilderTest.java
@@ -0,0 +1,217 @@
+/*
+ * 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.wm;
+
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
+import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
+import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION;
+import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
+import static android.view.WindowManagerPolicyConstants.APPLICATION_LAYER;
+
+import static com.android.server.wm.DisplayArea.Type.ABOVE_TASKS;
+import static com.android.server.wm.DisplayArea.Type.ANY;
+import static com.android.server.wm.DisplayAreaPolicyBuilder.Feature;
+
+import static org.hamcrest.Matchers.empty;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import static java.util.stream.Collectors.toList;
+
+import android.platform.test.annotations.Presubmit;
+import android.view.SurfaceControl;
+
+import androidx.test.filters.FlakyTest;
+
+import org.hamcrest.CustomTypeSafeMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+@Presubmit
+public class DisplayAreaPolicyBuilderTest {
+
+    @Rule
+    public final SystemServicesTestRule mSystemServices = new SystemServicesTestRule();
+
+    private TestWindowManagerPolicy mPolicy = new TestWindowManagerPolicy(null, null);
+
+    @Test
+    @FlakyTest(bugId = 149760939)
+    public void testBuilder() {
+        WindowManagerService wms = mSystemServices.getWindowManagerService();
+        DisplayArea.Root root = new SurfacelessDisplayAreaRoot(wms);
+        DisplayArea<WindowContainer> ime = new DisplayArea<>(wms, ABOVE_TASKS, "Ime");
+        DisplayArea<ActivityStack> tasks = new DisplayArea<>(wms, ANY, "Tasks");
+
+        final Feature foo;
+        final Feature bar;
+
+        DisplayAreaPolicyBuilder.Result policy = new DisplayAreaPolicyBuilder()
+                .addFeature(foo = new Feature.Builder(mPolicy, "Foo")
+                        .upTo(TYPE_STATUS_BAR)
+                        .and(TYPE_NAVIGATION_BAR)
+                        .build())
+                .addFeature(bar = new Feature.Builder(mPolicy, "Bar")
+                        .all()
+                        .except(TYPE_STATUS_BAR)
+                        .build())
+                .build(wms, mock(DisplayContent.class), root, ime, tasks);
+
+        policy.attachDisplayAreas();
+
+        assertThat(policy.getDisplayAreas(foo), is(not(empty())));
+        assertThat(policy.getDisplayAreas(bar), is(not(empty())));
+
+        assertThat(policy.findAreaForToken(tokenOfType(TYPE_STATUS_BAR)),
+                is(decendantOfOneOf(policy.getDisplayAreas(foo))));
+        assertThat(policy.findAreaForToken(tokenOfType(TYPE_STATUS_BAR)),
+                is(not(decendantOfOneOf(policy.getDisplayAreas(bar)))));
+
+        assertThat(tasks,
+                is(decendantOfOneOf(policy.getDisplayAreas(foo))));
+        assertThat(tasks,
+                is(decendantOfOneOf(policy.getDisplayAreas(bar))));
+
+        assertThat(ime,
+                is(decendantOfOneOf(policy.getDisplayAreas(foo))));
+        assertThat(ime,
+                is(decendantOfOneOf(policy.getDisplayAreas(bar))));
+
+        List<DisplayArea<?>> actualOrder = collectLeafAreas(root);
+        Map<DisplayArea<?>, Set<Integer>> zSets = calculateZSets(policy, root, ime, tasks);
+        actualOrder = actualOrder.stream().filter(zSets::containsKey).collect(toList());
+
+        Map<DisplayArea<?>, Integer> expectedByMinLayer = mapValues(zSets,
+                v -> v.stream().min(Integer::compareTo).get());
+        Map<DisplayArea<?>, Integer> expectedByMaxLayer = mapValues(zSets,
+                v -> v.stream().max(Integer::compareTo).get());
+
+        assertThat(expectedByMinLayer, is(equalTo(expectedByMaxLayer)));
+        assertThat(actualOrder, is(equalTo(expectedByMaxLayer)));
+    }
+
+    private <K, V, R> Map<K, R> mapValues(Map<K, V> zSets, Function<V, R> f) {
+        return zSets.entrySet().stream().collect(Collectors.toMap(
+                Map.Entry::getKey,
+                e -> f.apply(e.getValue())));
+    }
+
+    private List<DisplayArea<?>> collectLeafAreas(DisplayArea<?> root) {
+        ArrayList<DisplayArea<?>> leafs = new ArrayList<>();
+        traverseLeafAreas(root, leafs::add);
+        return leafs;
+    }
+
+    private Map<DisplayArea<?>, Set<Integer>> calculateZSets(
+            DisplayAreaPolicyBuilder.Result policy, DisplayArea.Root root,
+            DisplayArea<WindowContainer> ime,
+            DisplayArea<ActivityStack> tasks) {
+        Map<DisplayArea<?>, Set<Integer>> zSets = new HashMap<>();
+        int[] types = {TYPE_STATUS_BAR, TYPE_NAVIGATION_BAR, TYPE_PRESENTATION,
+                TYPE_APPLICATION_OVERLAY};
+        for (int type : types) {
+            WindowToken token = tokenOfType(type);
+            recordLayer(policy.findAreaForToken(token), token.getWindowLayerFromType(), zSets);
+        }
+        recordLayer(tasks, APPLICATION_LAYER, zSets);
+        recordLayer(ime, mPolicy.getWindowLayerFromTypeLw(TYPE_INPUT_METHOD), zSets);
+        return zSets;
+    }
+
+    private void recordLayer(DisplayArea<?> area, int layer,
+            Map<DisplayArea<?>,  Set<Integer>> zSets) {
+        zSets.computeIfAbsent(area, k -> new HashSet<>()).add(layer);
+    }
+
+    private Matcher<WindowContainer> decendantOfOneOf(List<? extends WindowContainer> expected) {
+        return new CustomTypeSafeMatcher<WindowContainer>("descendant of one of " + expected) {
+            @Override
+            protected boolean matchesSafely(WindowContainer actual) {
+                for (WindowContainer expected : expected) {
+                    WindowContainer candidate = actual;
+                    while (candidate != null && candidate.getParent() != candidate) {
+                        if (candidate.getParent() == expected) {
+                            return true;
+                        }
+                        candidate = candidate.getParent();
+                    }
+                }
+                return false;
+            }
+
+            @Override
+            protected void describeMismatchSafely(WindowContainer item,
+                    Description description) {
+                description.appendText("was ").appendValue(item);
+                while (item != null && item.getParent() != item) {
+                    item = item.getParent();
+                    description.appendText(", child of ").appendValue(item);
+                }
+            }
+        };
+    }
+
+    private WindowToken tokenOfType(int type) {
+        WindowToken m = mock(WindowToken.class);
+        when(m.getWindowLayerFromType()).thenReturn(mPolicy.getWindowLayerFromTypeLw(type));
+        return m;
+    }
+
+    private static void traverseLeafAreas(DisplayArea<?> root, Consumer<DisplayArea<?>> consumer) {
+        boolean leaf = true;
+        for (int i = 0; i < root.getChildCount(); i++) {
+            WindowContainer child = root.getChildAt(i);
+            if (child instanceof DisplayArea<?>) {
+                traverseLeafAreas((DisplayArea<?>) child, consumer);
+                leaf = false;
+            }
+        }
+        if (leaf) {
+            consumer.accept(root);
+        }
+    }
+
+    private static class SurfacelessDisplayAreaRoot extends DisplayArea.Root {
+
+        SurfacelessDisplayAreaRoot(WindowManagerService wms) {
+            super(wms);
+        }
+
+        @Override
+        SurfaceControl.Builder makeChildSurface(WindowContainer child) {
+            return new MockSurfaceControlBuilder();
+        }
+    }
+
+}
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayAreaProviderTest.java b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaProviderTest.java
new file mode 100644
index 0000000..3120631
--- /dev/null
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaProviderTest.java
@@ -0,0 +1,85 @@
+/*
+ * 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.wm;
+
+import static com.android.server.wm.testing.Assert.assertThrows;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.res.Resources;
+import android.platform.test.annotations.Presubmit;
+
+import org.hamcrest.Matchers;
+import org.junit.Assert;
+import org.junit.Test;
+
+@Presubmit
+public class DisplayAreaProviderTest {
+
+    @Test
+    public void testFromResources_emptyProvider() {
+        Assert.assertThat(DisplayAreaPolicy.Provider.fromResources(resourcesWithProvider("")),
+                Matchers.instanceOf(DisplayAreaPolicy.DefaultProvider.class));
+    }
+
+    @Test
+    public void testFromResources_nullProvider() {
+        Assert.assertThat(DisplayAreaPolicy.Provider.fromResources(resourcesWithProvider(null)),
+                Matchers.instanceOf(DisplayAreaPolicy.DefaultProvider.class));
+    }
+
+    @Test
+    public void testFromResources_customProvider() {
+        Assert.assertThat(DisplayAreaPolicy.Provider.fromResources(resourcesWithProvider(
+                TestProvider.class.getName())), Matchers.instanceOf(TestProvider.class));
+    }
+
+    @Test
+    public void testFromResources_badProvider_notImplementingProviderInterface() {
+        assertThrows(IllegalStateException.class, () -> {
+            DisplayAreaPolicy.Provider.fromResources(resourcesWithProvider(
+                    Object.class.getName()));
+        });
+    }
+
+    @Test
+    public void testFromResources_badProvider_doesntExist() {
+        assertThrows(IllegalStateException.class, () -> {
+            DisplayAreaPolicy.Provider.fromResources(resourcesWithProvider(
+                    "com.android.wmtests.nonexistent.Provider"));
+        });
+    }
+
+    private static Resources resourcesWithProvider(String provider) {
+        Resources mock = mock(Resources.class);
+        when(mock.getString(
+                com.android.internal.R.string.config_deviceSpecificDisplayAreaPolicyProvider))
+                .thenReturn(provider);
+        return mock;
+    }
+
+    static class TestProvider implements DisplayAreaPolicy.Provider {
+
+        @Override
+        public DisplayAreaPolicy instantiate(WindowManagerService wmService, DisplayContent content,
+                DisplayArea.Root root, DisplayArea<? extends WindowContainer> imeContainer,
+                DisplayContent.TaskContainers taskContainers) {
+            throw new RuntimeException("test stub");
+        }
+    }
+}
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 2ea00ce..1a8f2a6 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -995,6 +995,35 @@
     }
 
     @Test
+    public void testApplyTopFixedRotationTransform() {
+        mWm.mIsFixedRotationTransformEnabled = true;
+        final Configuration config90 = new Configuration();
+        mDisplayContent.getDisplayRotation().setRotation(ROTATION_90);
+        mDisplayContent.computeScreenConfiguration(config90);
+        mDisplayContent.onRequestedOverrideConfigurationChanged(config90);
+
+        final Configuration config = new Configuration();
+        mDisplayContent.getDisplayRotation().setRotation(Surface.ROTATION_0);
+        mDisplayContent.computeScreenConfiguration(config);
+        mDisplayContent.onRequestedOverrideConfigurationChanged(config);
+
+        final ActivityRecord app = mAppWindow.mActivityRecord;
+        mDisplayContent.prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_OPEN,
+                false /* alwaysKeepCurrent */);
+        mDisplayContent.mOpeningApps.add(app);
+        app.setRequestedOrientation(SCREEN_ORIENTATION_LANDSCAPE);
+
+        assertTrue(app.isFixedRotationTransforming());
+        assertEquals(config.orientation, mDisplayContent.getConfiguration().orientation);
+        assertEquals(config90.orientation, app.getConfiguration().orientation);
+
+        mDisplayContent.mAppTransition.notifyAppTransitionFinishedLocked(app.token);
+
+        assertFalse(app.hasFixedRotationTransform());
+        assertEquals(config90.orientation, mDisplayContent.getConfiguration().orientation);
+    }
+
+    @Test
     public void testRemoteRotation() {
         DisplayContent dc = createNewDisplay();
 
@@ -1033,6 +1062,54 @@
         assertTrue(continued[0]);
     }
 
+    @Test
+    public void testGetOrCreateRootHomeTask_defaultDisplay() {
+        DisplayContent defaultDisplay = mWm.mRoot.getDisplayContent(DEFAULT_DISPLAY);
+
+        // Remove the current home stack if it exists so a new one can be created below.
+        ActivityStack homeTask = defaultDisplay.getRootHomeTask();
+        if (homeTask != null) {
+            defaultDisplay.removeStack(homeTask);
+        }
+        assertNull(defaultDisplay.getRootHomeTask());
+
+        assertNotNull(defaultDisplay.getOrCreateRootHomeTask());
+    }
+
+    @Test
+    public void testGetOrCreateRootHomeTask_supportedSecondaryDisplay() {
+        DisplayContent display = createNewDisplay();
+        doReturn(true).when(display).supportsSystemDecorations();
+        doReturn(false).when(display).isUntrustedVirtualDisplay();
+
+        // Remove the current home stack if it exists so a new one can be created below.
+        ActivityStack homeTask = display.getRootHomeTask();
+        if (homeTask != null) {
+            display.removeStack(homeTask);
+        }
+        assertNull(display.getRootHomeTask());
+
+        assertNotNull(display.getOrCreateRootHomeTask());
+    }
+
+    @Test
+    public void testGetOrCreateRootHomeTask_unsupportedSystemDecorations() {
+        DisplayContent display = createNewDisplay();
+        doReturn(false).when(display).supportsSystemDecorations();
+
+        assertNull(display.getRootHomeTask());
+        assertNull(display.getOrCreateRootHomeTask());
+    }
+
+    @Test
+    public void testGetOrCreateRootHomeTask_untrustedVirtualDisplay() {
+        DisplayContent display = createNewDisplay();
+        doReturn(true).when(display).isUntrustedVirtualDisplay();
+
+        assertNull(display.getRootHomeTask());
+        assertNull(display.getOrCreateRootHomeTask());
+    }
+
     private boolean isOptionsPanelAtRight(int displayId) {
         return (mWm.getPreferredOptionsPanelGravity(displayId) & Gravity.RIGHT) == Gravity.RIGHT;
     }
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyInsetsTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyInsetsTests.java
index f754c59..39cd76a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyInsetsTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyInsetsTests.java
@@ -174,6 +174,6 @@
     }
 
     private static DisplayInfo displayInfoForRotation(int rotation, boolean withDisplayCutout) {
-        return displayInfoAndCutoutForRotation(rotation, withDisplayCutout).first;
+        return displayInfoAndCutoutForRotation(rotation, withDisplayCutout, false).first;
     }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java
index 9dbaa4c..ba57745 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java
@@ -34,6 +34,7 @@
 import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
+import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_DRAW_BAR_BACKGROUNDS;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR;
 import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING;
@@ -91,12 +92,11 @@
     private WindowState mWindow;
     private int mRotation = ROTATION_0;
     private boolean mHasDisplayCutout;
+    private boolean mIsLongEdgeDisplayCutout;
     private static final int DECOR_WINDOW_INSET = 50;
 
     @Before
     public void setUp() throws Exception {
-        updateDisplayFrames();
-
         mWindow = spy(createWindow(null, TYPE_APPLICATION, "window"));
         // We only test window frames set by DisplayPolicy, so here prevents computeFrameLw from
         // changing those frames.
@@ -106,6 +106,8 @@
         attrs.width = MATCH_PARENT;
         attrs.height = MATCH_PARENT;
         attrs.format = PixelFormat.TRANSLUCENT;
+
+        updateDisplayFrames();
     }
 
     @After
@@ -124,13 +126,20 @@
         updateDisplayFrames();
     }
 
+    public void addLongEdgeDisplayCutout() {
+        mHasDisplayCutout = true;
+        mIsLongEdgeDisplayCutout = true;
+        updateDisplayFrames();
+    }
+
     private void updateDisplayFrames() {
         mFrames = createDisplayFrames();
+        mDisplayContent.mDisplayFrames = mFrames;
     }
 
     private DisplayFrames createDisplayFrames() {
         final Pair<DisplayInfo, WmDisplayCutout> info = displayInfoAndCutoutForRotation(mRotation,
-                mHasDisplayCutout);
+                mHasDisplayCutout, mIsLongEdgeDisplayCutout);
         return new DisplayFrames(mDisplayContent.getDisplayId(), info.first, info.second);
     }
 
@@ -180,63 +189,6 @@
     }
 
     @Test
-    public void layoutWindowLw_appDrawsBars() {
-        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);
-
-        mWindow.mAttrs.flags = FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
-        mWindow.mAttrs.setFitInsetsTypes(Type.systemBars());
-        addWindow(mWindow);
-
-        mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
-        mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);
-
-        assertInsetByTopBottom(mWindow.getStableFrameLw(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT);
-        assertInsetByTopBottom(mWindow.getDisplayFrameLw(), 0, 0);
-        assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0);
-        assertInsetByTopBottom(mWindow.getVisibleFrameLw(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT);
-        assertInsetByTopBottom(mWindow.getContentFrameLw(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT);
-        assertInsetByTopBottom(mWindow.getDecorFrame(), 0, 0);
-    }
-
-    @Test
-    public void layoutWindowLw_forceAppDrawBars() {
-        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);
-
-        mWindow.mAttrs.privateFlags = PRIVATE_FLAG_FORCE_DRAW_BAR_BACKGROUNDS;
-        mWindow.mAttrs.setFitInsetsTypes(Type.systemBars());
-        addWindow(mWindow);
-
-        mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
-        mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);
-
-        assertInsetByTopBottom(mWindow.getStableFrameLw(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT);
-        assertInsetByTopBottom(mWindow.getDisplayFrameLw(), 0, 0);
-        assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0);
-        assertInsetByTopBottom(mWindow.getVisibleFrameLw(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT);
-        assertInsetByTopBottom(mWindow.getContentFrameLw(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT);
-        assertInsetByTopBottom(mWindow.getDecorFrame(), 0, 0);
-    }
-
-    @Test
-    public void layoutWindowLw_onlyDrawBottomBar() {
-        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);
-
-        mWindow.mAttrs.flags = FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
-        mWindow.mAttrs.setFitInsetsTypes(Type.systemBars());
-        addWindow(mWindow);
-
-        mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
-        mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);
-
-        assertInsetByTopBottom(mWindow.getStableFrameLw(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT);
-        assertInsetByTopBottom(mWindow.getDisplayFrameLw(), STATUS_BAR_HEIGHT, 0);
-        assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, 0);
-        assertInsetByTopBottom(mWindow.getVisibleFrameLw(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT);
-        assertInsetByTopBottom(mWindow.getContentFrameLw(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT);
-        assertInsetByTopBottom(mWindow.getDecorFrame(), 0, 0);
-    }
-
-    @Test
     public void layoutWindowLw_fitAllSides() {
         assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);
 
@@ -273,7 +225,7 @@
     }
 
     @Test
-    public void layoutWindowLw_fitMax() {
+    public void layoutWindowLw_fitInsetsIgnoringVisibility() {
         assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);
 
         final InsetsState state =
@@ -295,7 +247,7 @@
     }
 
     @Test
-    public void layoutWindowLw_fitNonMax() {
+    public void layoutWindowLw_fitInsetsNotIgnoringVisibility() {
         assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);
 
         final InsetsState state =
@@ -398,6 +350,7 @@
 
         mWindow.mAttrs.flags =
                 FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
         addWindow(mWindow);
 
         mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
@@ -416,6 +369,7 @@
 
         mWindow.mAttrs.flags =
                 FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
         mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
         addWindow(mWindow);
 
@@ -430,11 +384,52 @@
     }
 
     @Test
+    public void layoutWindowLw_withDisplayCutout_shortEdges() {
+        addDisplayCutout();
+
+        mWindow.mAttrs.flags =
+                FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
+        mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
+        addWindow(mWindow);
+
+        mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
+        mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);
+
+        assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0);
+        assertInsetBy(mWindow.getStableFrameLw(), 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT);
+        assertInsetBy(mWindow.getContentFrameLw(), 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT);
+        assertInsetBy(mWindow.getDecorFrame(), 0, 0, 0, 0);
+        assertInsetBy(mWindow.getDisplayFrameLw(), 0, 0, 0, 0);
+    }
+
+    @Test
+    public void layoutWindowLw_withDisplayCutout_always() {
+        addDisplayCutout();
+
+        mWindow.mAttrs.flags =
+                FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
+        mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+        addWindow(mWindow);
+
+        mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
+        mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);
+
+        assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0);
+        assertInsetBy(mWindow.getStableFrameLw(), 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT);
+        assertInsetBy(mWindow.getContentFrameLw(), 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT);
+        assertInsetBy(mWindow.getDecorFrame(), 0, 0, 0, 0);
+        assertInsetBy(mWindow.getDisplayFrameLw(), 0, 0, 0, 0);
+    }
+
+    @Test
     public void layoutWindowLw_withDisplayCutout_layoutFullscreen() {
         addDisplayCutout();
 
         mWindow.mAttrs.flags =
                 FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
         mWindow.mAttrs.subtreeSystemUiVisibility |= SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
         mWindow.mAttrs.setFitInsetsTypes(
                 mWindow.mAttrs.getFitInsetsTypes() & ~Type.statusBars());
@@ -456,6 +451,7 @@
 
         mWindow.mAttrs.flags =
                 FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
         mWindow.mAttrs.subtreeSystemUiVisibility |= SYSTEM_UI_FLAG_FULLSCREEN;
         mDisplayContent.getInsetsPolicy().getInsetsForDispatch(mWindow)
                 .getSource(InsetsState.ITYPE_STATUS_BAR).setVisible(false);
@@ -477,6 +473,7 @@
 
         mWindow.mAttrs.flags =
                 FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
         mWindow.mAttrs.subtreeSystemUiVisibility |= SYSTEM_UI_FLAG_FULLSCREEN;
         mDisplayContent.getInsetsPolicy().getInsetsForDispatch(mWindow)
                 .getSource(InsetsState.ITYPE_STATUS_BAR).setVisible(false);
@@ -501,6 +498,7 @@
 
         mWindow.mAttrs.flags =
                 FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
         addWindow(mWindow);
 
         mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
@@ -521,6 +519,7 @@
 
         mWindow.mAttrs.flags =
                 FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
         addWindow(mWindow);
 
         mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
@@ -541,6 +540,7 @@
 
         mWindow.mAttrs.flags =
                 FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
         mWindow.mAttrs.subtreeSystemUiVisibility |= SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
         mWindow.mAttrs.setFitInsetsTypes(
                 mWindow.mAttrs.getFitInsetsTypes() & ~Type.statusBars());
@@ -581,6 +581,7 @@
 
         mWindow.mAttrs.flags =
                 FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
         mWindow.mAttrs.subtreeSystemUiVisibility |= SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
         mWindow.mAttrs.setFitInsetsTypes(
                 mWindow.mAttrs.getFitInsetsTypes() & ~Type.statusBars());
@@ -598,11 +599,96 @@
     }
 
     @Test
+    @FlakyTest(bugId = 149760800)
+    public void layoutWindowLw_withLongEdgeDisplayCutout() {
+        addLongEdgeDisplayCutout();
+
+        mWindow.mAttrs.flags =
+                FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        addWindow(mWindow);
+
+        mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
+        mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);
+
+        assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0);
+        assertInsetBy(mWindow.getStableFrameLw(), 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT);
+        assertInsetBy(mWindow.getContentFrameLw(), DISPLAY_CUTOUT_HEIGHT, STATUS_BAR_HEIGHT, 0,
+                NAV_BAR_HEIGHT);
+        assertInsetBy(mWindow.getDecorFrame(), 0, 0, 0, 0);
+        assertInsetBy(mWindow.getDisplayFrameLw(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0);
+    }
+
+    @Test
+    @FlakyTest(bugId = 149760800)
+    public void layoutWindowLw_withLongEdgeDisplayCutout_never() {
+        addLongEdgeDisplayCutout();
+
+        mWindow.mAttrs.flags =
+                FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
+        addWindow(mWindow);
+
+        mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
+        mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);
+
+        assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0);
+        assertInsetBy(mWindow.getStableFrameLw(), 0, STATUS_BAR_HEIGHT, 0,
+                NAV_BAR_HEIGHT);
+        assertInsetBy(mWindow.getContentFrameLw(), DISPLAY_CUTOUT_HEIGHT, STATUS_BAR_HEIGHT, 0,
+                NAV_BAR_HEIGHT);
+        assertInsetBy(mWindow.getDecorFrame(), 0, 0, 0, 0);
+        assertInsetBy(mWindow.getDisplayFrameLw(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0);
+    }
+
+    @Test
+    public void layoutWindowLw_withLongEdgeDisplayCutout_shortEdges() {
+        addLongEdgeDisplayCutout();
+
+        mWindow.mAttrs.flags =
+                FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
+        mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
+        addWindow(mWindow);
+
+        mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
+        mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);
+
+        assertInsetBy(mWindow.getParentFrame(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0);
+        assertInsetBy(mWindow.getStableFrameLw(), 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT);
+        assertInsetBy(mWindow.getContentFrameLw(), DISPLAY_CUTOUT_HEIGHT, STATUS_BAR_HEIGHT, 0,
+                NAV_BAR_HEIGHT);
+        assertInsetBy(mWindow.getDecorFrame(), 0, 0, 0, 0);
+        assertInsetBy(mWindow.getDisplayFrameLw(), DISPLAY_CUTOUT_HEIGHT, 0, 0, 0);
+    }
+
+    @Test
+    public void layoutWindowLw_withLongEdgeDisplayCutout_always() {
+        addLongEdgeDisplayCutout();
+
+        mWindow.mAttrs.flags =
+                FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
+        mWindow.mAttrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+        addWindow(mWindow);
+
+        mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
+        mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);
+
+        assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0);
+        assertInsetBy(mWindow.getStableFrameLw(), 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT);
+        assertInsetBy(mWindow.getContentFrameLw(), DISPLAY_CUTOUT_HEIGHT, STATUS_BAR_HEIGHT, 0,
+                NAV_BAR_HEIGHT);
+        assertInsetBy(mWindow.getDecorFrame(), 0, 0, 0, 0);
+        assertInsetBy(mWindow.getDisplayFrameLw(), 0, 0, 0, 0);
+    }
+
+    @Test
     public void layoutWindowLw_withForwardInset_SoftInputAdjustResize() {
         assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_NONE);
 
         mWindow.mAttrs.flags =
                 FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
         mWindow.mAttrs.softInputMode = SOFT_INPUT_ADJUST_RESIZE;
         addWindow(mWindow);
 
@@ -625,6 +711,7 @@
     public void layoutWindowLw_withForwardInset_SoftInputAdjustNothing() {
         mWindow.mAttrs.flags =
                 FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
         mWindow.mAttrs.softInputMode = SOFT_INPUT_ADJUST_NOTHING;
         addWindow(mWindow);
 
@@ -849,7 +936,6 @@
         final String prefix = "";
         final InsetsState simulatedInsetsState = new InsetsState();
         final DisplayFrames simulatedDisplayFrames = createDisplayFrames();
-        mDisplayContent.mDisplayFrames = mFrames;
         mDisplayPolicy.beginLayoutLw(mFrames, uiMode);
         mDisplayContent.getInsetsStateController().onPostLayout();
         mDisplayPolicy.simulateLayoutDisplay(simulatedDisplayFrames, simulatedInsetsState, uiMode);
@@ -867,6 +953,7 @@
         // Exclude comparing IME insets because currently the simulated layout only focuses on the
         // insets from status bar and navigation bar.
         realInsetsState.removeSource(InsetsState.ITYPE_IME);
+        realInsetsState.removeSource(InsetsState.ITYPE_CAPTION_BAR);
         realInsetsState.dump(prefix, new PrintWriter(realInsetsDump));
         final StringWriter simulatedInsetsDump = new StringWriter();
         simulatedInsetsState.dump(prefix, new PrintWriter(simulatedInsetsDump));
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTestsBase.java
index d0b3350..7ba3fd8 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTestsBase.java
@@ -102,16 +102,17 @@
     }
 
     void addWindow(WindowState win) {
-        mDisplayPolicy.adjustWindowParamsLw(win, win.mAttrs, Binder.getCallingPid(),
-                Binder.getCallingUid());
+        final int callingPid = Binder.getCallingPid();
+        final int callingUid = Binder.getCallingUid();
+        mDisplayPolicy.adjustWindowParamsLw(win, win.mAttrs, callingPid, callingUid);
         assertEquals(WindowManagerGlobal.ADD_OKAY,
-                mDisplayPolicy.validateAddingWindowLw(win.mAttrs));
+                mDisplayPolicy.validateAddingWindowLw(win.mAttrs, callingPid, callingUid));
         mDisplayPolicy.addWindowLw(win, win.mAttrs);
         win.mHasSurface = true;
     }
 
     static Pair<DisplayInfo, WmDisplayCutout> displayInfoAndCutoutForRotation(int rotation,
-            boolean withDisplayCutout) {
+            boolean withDisplayCutout, boolean isLongEdgeCutout) {
         final DisplayInfo info = new DisplayInfo();
         WmDisplayCutout cutout = null;
 
@@ -121,7 +122,7 @@
         info.rotation = rotation;
         if (withDisplayCutout) {
             cutout = WmDisplayCutout.computeSafeInsets(
-                    displayCutoutForRotation(rotation), info.logicalWidth,
+                    displayCutoutForRotation(rotation, isLongEdgeCutout), info.logicalWidth,
                     info.logicalHeight);
             info.displayCutout = cutout.getDisplayCutout();
         } else {
@@ -130,9 +131,13 @@
         return Pair.create(info, cutout);
     }
 
-    private static DisplayCutout displayCutoutForRotation(int rotation) {
-        final RectF rectF =
-                new RectF(DISPLAY_WIDTH / 4, 0, DISPLAY_WIDTH * 3 / 4, DISPLAY_CUTOUT_HEIGHT);
+    private static DisplayCutout displayCutoutForRotation(int rotation, boolean isLongEdgeCutout) {
+        RectF rectF = new RectF();
+        if (isLongEdgeCutout) {
+            rectF.set(0, DISPLAY_HEIGHT / 4, DISPLAY_CUTOUT_HEIGHT, DISPLAY_HEIGHT * 3 / 4);
+        } else {
+            rectF.set(DISPLAY_WIDTH / 4, 0, DISPLAY_WIDTH * 3 / 4, DISPLAY_CUTOUT_HEIGHT);
+        }
 
         final Matrix m = new Matrix();
         transformPhysicalToLogicalCoordinates(rotation, DISPLAY_WIDTH, DISPLAY_HEIGHT, m);
@@ -141,16 +146,16 @@
         int pos = -1;
         switch (rotation) {
             case ROTATION_0:
-                pos = BOUNDS_POSITION_TOP;
+                pos = isLongEdgeCutout ? BOUNDS_POSITION_LEFT : BOUNDS_POSITION_TOP;
                 break;
             case ROTATION_90:
-                pos = BOUNDS_POSITION_LEFT;
+                pos = isLongEdgeCutout ? BOUNDS_POSITION_BOTTOM : BOUNDS_POSITION_LEFT;
                 break;
             case ROTATION_180:
-                pos = BOUNDS_POSITION_BOTTOM;
+                pos = isLongEdgeCutout ? BOUNDS_POSITION_RIGHT : BOUNDS_POSITION_BOTTOM;
                 break;
             case ROTATION_270:
-                pos = BOUNDS_POSITION_RIGHT;
+                pos = isLongEdgeCutout ? BOUNDS_POSITION_TOP : BOUNDS_POSITION_RIGHT;
                 break;
         }
 
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 da807d8..cf7411e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
@@ -638,7 +638,7 @@
         mBuilder.build();
 
         final WindowState win = mock(WindowState.class);
-        win.mActivityRecord = mock(ActivityRecord.class);
+        win.mToken = win.mActivityRecord = mock(ActivityRecord.class);
         final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams();
         attrs.rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS;
 
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
index e712255..eae007d 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
@@ -29,12 +29,13 @@
 import static android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE;
 import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
 
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.spy;
 
 import android.platform.test.annotations.Presubmit;
 import android.util.IntArray;
@@ -122,13 +123,13 @@
     // TODO: adjust this test if we pretend to the app that it's still able to control it.
     @Test
     public void testControlsForDispatch_forceStatusBarVisible() {
-        addWindow(TYPE_STATUS_BAR, "topBar").mAttrs.privateFlags |=
+        addWindow(TYPE_STATUS_BAR, "statusBar").mAttrs.privateFlags |=
                 PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR;
         addWindow(TYPE_NAVIGATION_BAR, "navBar");
 
         final InsetsSourceControl[] controls = addAppWindowAndGetControlsForDispatch();
 
-        // The app must not control the top bar.
+        // The app must not control the status bar.
         assertNotNull(controls);
         assertEquals(1, controls.length);
     }
@@ -137,6 +138,7 @@
     public void testControlsForDispatch_statusBarForceShowNavigation() {
         addWindow(TYPE_NOTIFICATION_SHADE, "notificationShade").mAttrs.privateFlags |=
                 PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION;
+        addWindow(TYPE_STATUS_BAR, "statusBar");
         addWindow(TYPE_NAVIGATION_BAR, "navBar");
 
         final InsetsSourceControl[] controls = addAppWindowAndGetControlsForDispatch();
@@ -169,7 +171,8 @@
                 .getControllableInsetProvider().getSource().setVisible(false);
         final WindowState app = addWindow(TYPE_APPLICATION, "app");
 
-        final InsetsPolicy policy = mDisplayContent.getInsetsPolicy();
+        final InsetsPolicy policy = spy(mDisplayContent.getInsetsPolicy());
+        doNothing().when(policy).startAnimation(anyBoolean(), any());
         policy.updateBarControlTarget(app);
         policy.showTransient(
                 IntArray.wrap(new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR}));
@@ -184,7 +187,7 @@
     }
 
     @Test
-    public void testShowTransientBars_topCanBeTransient_appGetsTopFakeControl() {
+    public void testShowTransientBars_statusBarCanBeTransient_appGetsStatusBarFakeControl() {
         // Adding app window before setting source visibility is to prevent the visibility from
         // being cleared by InsetsSourceProvider.updateVisibility.
         final WindowState app = addWindow(TYPE_APPLICATION, "app");
@@ -194,14 +197,15 @@
         addWindow(TYPE_NAVIGATION_BAR, "navBar")
                 .getControllableInsetProvider().getSource().setVisible(true);
 
-        final InsetsPolicy policy = mDisplayContent.getInsetsPolicy();
+        final InsetsPolicy policy = spy(mDisplayContent.getInsetsPolicy());
+        doNothing().when(policy).startAnimation(anyBoolean(), any());
         policy.updateBarControlTarget(app);
         policy.showTransient(
                 IntArray.wrap(new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR}));
         final InsetsSourceControl[] controls =
                 mDisplayContent.getInsetsStateController().getControlsForDispatch(app);
 
-        // The app must get the fake control of the top bar, and must get the real control of the
+        // The app must get the fake control of the status bar, and must get the real control of the
         // navigation bar.
         assertEquals(2, controls.length);
         for (int i = controls.length - 1; i >= 0; i--) {
@@ -222,7 +226,8 @@
                 .getControllableInsetProvider().getSource().setVisible(false);
         final WindowState app = addWindow(TYPE_APPLICATION, "app");
 
-        final InsetsPolicy policy = mDisplayContent.getInsetsPolicy();
+        final InsetsPolicy policy = spy(mDisplayContent.getInsetsPolicy());
+        doNothing().when(policy).startAnimation(anyBoolean(), any());
         policy.updateBarControlTarget(app);
         policy.showTransient(
                 IntArray.wrap(new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR}));
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java
index 7ffdd7c..f811757 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java
@@ -112,11 +112,44 @@
         final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
         final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
         statusBar.getFrameLw().set(0, 0, 500, 100);
+
+        // We must not have control or control target before we have the insets source window.
+        mProvider.updateControlForTarget(target, true /* force */);
+        assertNull(mProvider.getControl(target));
+        assertNull(mProvider.getControlTarget());
+
+        // We can have the control or the control target after we have the insets source window.
         mProvider.setWindow(statusBar, null, null);
         mProvider.updateControlForTarget(target, false /* force */);
         assertNotNull(mProvider.getControl(target));
+        assertNotNull(mProvider.getControlTarget());
+
+        // We must not have control or control target while we are performing seamless rotation.
+        // And the control and the control target must not be updated during that.
+        mProvider.startSeamlessRotation();
+        assertNull(mProvider.getControl(target));
+        assertNull(mProvider.getControlTarget());
+        mProvider.updateControlForTarget(target, true /* force */);
+        assertNull(mProvider.getControl(target));
+        assertNull(mProvider.getControlTarget());
+
+        // We can have the control and the control target after seamless rotation.
+        mProvider.finishSeamlessRotation(false /* timeout */);
+        mProvider.updateControlForTarget(target, false /* force */);
+        assertNotNull(mProvider.getControl(target));
+        assertNotNull(mProvider.getControlTarget());
+
+        // We can clear the control and the control target.
         mProvider.updateControlForTarget(null, false /* force */);
         assertNull(mProvider.getControl(target));
+        assertNull(mProvider.getControlTarget());
+
+        // We must not have control or control target if the insets source window doesn't have a
+        // surface.
+        statusBar.setSurfaceControl(null);
+        mProvider.updateControlForTarget(target, true /* force */);
+        assertNull(mProvider.getControl(target));
+        assertNull(mProvider.getControlTarget());
     }
 
     @Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
index 39cdd2c..5cf1fbb 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
@@ -20,7 +20,9 @@
 import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
 import static android.view.InsetsState.ITYPE_STATUS_BAR;
 import static android.view.ViewRootImpl.NEW_INSETS_MODE_FULL;
+import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
@@ -33,14 +35,14 @@
 import android.view.InsetsState;
 import android.view.test.InsetsModeSession;
 
+import androidx.test.filters.FlakyTest;
+import androidx.test.filters.SmallTest;
+
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import androidx.test.filters.FlakyTest;
-import androidx.test.filters.SmallTest;
-
 @SmallTest
 @FlakyTest(detail = "Promote to pre-submit once confirmed stable.")
 @Presubmit
@@ -88,6 +90,10 @@
         final WindowState navBar = createWindow(null, TYPE_APPLICATION, "navBar");
         final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
         final WindowState ime = createWindow(null, TYPE_APPLICATION, "ime");
+
+        // IME cannot be the IME target.
+        ime.mAttrs.flags |= FLAG_NOT_FOCUSABLE;
+
         getController().getSourceProvider(ITYPE_STATUS_BAR).setWindow(statusBar, null, null);
         getController().getSourceProvider(ITYPE_NAVIGATION_BAR).setWindow(navBar, null, null);
         getController().getSourceProvider(ITYPE_IME).setWindow(ime, null, null);
@@ -98,6 +104,10 @@
     public void testImeForDispatch() {
         final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
         final WindowState ime = createWindow(null, TYPE_APPLICATION, "ime");
+
+        // IME cannot be the IME target.
+        ime.mAttrs.flags |= FLAG_NOT_FOCUSABLE;
+
         InsetsSourceProvider statusBarProvider =
                 getController().getSourceProvider(ITYPE_STATUS_BAR);
         statusBarProvider.setWindow(statusBar, null, ((displayFrames, windowState, rect) ->
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 a672a95..4449069 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
@@ -1098,7 +1098,6 @@
         assertSecurityException(expectCallable,
                 () -> mService.setTaskWindowingModeSplitScreenPrimary(0,
                         SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT, true, true, new Rect(), true));
-        assertSecurityException(expectCallable, () -> mService.dismissSplitScreenMode(true));
         assertSecurityException(expectCallable, () -> mService.dismissPip(true, 0));
         assertSecurityException(expectCallable,
                 () -> mService.moveTopActivityToPinnedStack(INVALID_STACK_ID, new Rect()));
diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
index 7753a32..6a8917c 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
@@ -20,7 +20,9 @@
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
 import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
 import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
 import static android.view.WindowManager.TRANSIT_ACTIVITY_CLOSE;
 
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.atLeast;
@@ -53,6 +55,8 @@
 import static org.mockito.Mockito.never;
 
 import android.app.ActivityManager.TaskSnapshot;
+import android.content.pm.ActivityInfo;
+import android.content.res.Configuration;
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.IInterface;
@@ -65,12 +69,16 @@
 
 import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback;
 
+import com.google.common.truth.Truth;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import java.util.ArrayList;
+
 /**
  * Build/Install/Run:
  *  atest WmTests:RecentsAnimationControllerTest
@@ -330,6 +338,107 @@
         assertTrue(activity.shouldAnimate(TRANSIT_ACTIVITY_CLOSE));
     }
 
+    @Test
+    public void testRecentViewInFixedPortraitWhenTopAppInLandscape() {
+        mWm.mIsFixedRotationTransformEnabled = true;
+        mWm.setRecentsAnimationController(mController);
+
+        final ActivityStack homeStack = mDisplayContent.getOrCreateStack(
+                WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP);
+        final ActivityRecord homeAppWindow =
+                new ActivityTestsBase.ActivityBuilder(mWm.mAtmService)
+                        .setStack(homeStack)
+                        .setCreateTask(true)
+                        .build();
+        final ActivityRecord appWindow = createActivityRecord(mDisplayContent,
+                WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
+        final WindowState win0 = createWindow(null, TYPE_BASE_APPLICATION, appWindow, "win1");
+        appWindow.addWindow(win0);
+
+        final ActivityRecord landActivity = createActivityRecord(mDisplayContent,
+                WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
+        landActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+        final WindowState win1 = createWindow(null, TYPE_BASE_APPLICATION, landActivity, "win1");
+        landActivity.addWindow(win1);
+
+        assertEquals(landActivity.getTask().getTopVisibleActivity(), landActivity);
+        assertEquals(landActivity.findMainWindow(), win1);
+
+        // Ensure that the display is in Landscape
+        landActivity.onDescendantOrientationChanged(landActivity.token, landActivity);
+        assertEquals(Configuration.ORIENTATION_LANDSCAPE,
+                mDisplayContent.getConfiguration().orientation);
+
+        mController.initialize(ACTIVITY_TYPE_HOME, new SparseBooleanArray(), homeAppWindow);
+
+        // Check that the home app is in portrait
+        assertEquals(Configuration.ORIENTATION_PORTRAIT,
+                homeAppWindow.getConfiguration().orientation);
+    }
+
+    @Test
+    public void testWallpaperHasFixedRotationApplied() {
+        mWm.mIsFixedRotationTransformEnabled = true;
+        mWm.setRecentsAnimationController(mController);
+
+        // Create a portrait home stack, a wallpaper and a landscape application displayed on top.
+
+        // Home stack
+        final ActivityStack homeStack = mDisplayContent.getOrCreateStack(
+                WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP);
+        final ActivityRecord homeActivity =
+                new ActivityTestsBase.ActivityBuilder(mWm.mAtmService)
+                        .setStack(homeStack)
+                        .setCreateTask(true)
+                        .build();
+        homeActivity.setOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+
+        final WindowState homeWindow = createWindow(null, TYPE_BASE_APPLICATION, homeActivity,
+                "homeWindow");
+        homeActivity.addWindow(homeWindow);
+        homeWindow.getAttrs().flags |= FLAG_SHOW_WALLPAPER;
+
+        // Landscape application
+        final ActivityRecord activity = createActivityRecord(mDisplayContent,
+                WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
+        final WindowState applicationWindow = createWindow(null, TYPE_BASE_APPLICATION, activity,
+                "applicationWindow");
+        activity.addWindow(applicationWindow);
+        activity.setOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+
+        // Wallpaper
+        final WallpaperWindowToken wallpaperWindowToken = new WallpaperWindowToken(mWm,
+                mock(IBinder.class), true, mDisplayContent, true /* ownerCanManageAppTokens */);
+        final WindowState wallpaperWindow = createWindow(null, TYPE_WALLPAPER, wallpaperWindowToken,
+                "wallpaperWindow");
+
+        // Make sure the landscape activity is on top and the display is in landscape
+        activity.moveFocusableActivityToTop("test");
+        mDisplayContent.getConfiguration().windowConfiguration.setRotation(
+                mDisplayContent.getRotation());
+
+
+        spyOn(mDisplayContent.mWallpaperController);
+        doReturn(true).when(mDisplayContent.mWallpaperController).isWallpaperVisible();
+
+        // Start the recents animation
+        mController
+                .initialize(ACTIVITY_TYPE_HOME, new SparseBooleanArray(), homeActivity);
+
+        mDisplayContent.mWallpaperController.adjustWallpaperWindows();
+
+        // Check preconditions
+        ArrayList<WallpaperWindowToken> wallpapers = new ArrayList<>(1);
+        mDisplayContent.forAllWallpaperWindows(wallpapers::add);
+
+        Truth.assertThat(wallpapers).hasSize(1);
+        Truth.assertThat(wallpapers.get(0).getTopChild()).isEqualTo(wallpaperWindow);
+
+        // Actual check
+        assertEquals(Configuration.ORIENTATION_PORTRAIT,
+                wallpapers.get(0).getConfiguration().orientation);
+    }
+
     private static void verifyNoMoreInteractionsExceptAsBinder(IInterface binder) {
         verify(binder, atLeast(0)).asBinder();
         verifyNoMoreInteractions(binder);
diff --git a/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java
index 79db927..dd46673 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java
@@ -860,6 +860,26 @@
                 secondaryDisplay.mDisplayId, result.getDisplayId());
     }
 
+    @Test
+    public void testSwitchUser_missingHomeRootTask() {
+        doReturn(mFullscreenStack).when(mRootWindowContainer).getTopDisplayFocusedStack();
+
+        DisplayContent defaultDisplay = mRootWindowContainer.getDefaultDisplay();
+        ActivityStack homeStack = defaultDisplay.getRootHomeTask();
+        if (homeStack != null) {
+            homeStack.removeImmediately();
+        }
+        assertNull(defaultDisplay.getRootHomeTask());
+
+        int currentUser = mRootWindowContainer.mCurrentUser;
+        int otherUser = currentUser + 1;
+
+        mRootWindowContainer.switchUser(otherUser, null);
+
+        assertNotNull(defaultDisplay.getRootHomeTask());
+        assertEquals(defaultDisplay.getTopStack(), defaultDisplay.getRootHomeTask());
+    }
+
     /**
      * Mock {@link RootWindowContainer#resolveHomeActivity} for returning consistent activity
      * info for test cases (the original implementation will resolve from the real package manager).
diff --git a/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java b/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java
index 03aba39..ecb8015 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java
@@ -60,6 +60,7 @@
 import android.view.WindowManager;
 import android.widget.TextView;
 
+import androidx.test.filters.FlakyTest;
 import androidx.test.filters.SmallTest;
 
 import org.junit.After;
@@ -77,6 +78,8 @@
  */
 // TODO: Add test for FLAG_FULLSCREEN which hides the status bar and also other flags.
 // TODO: Test non-Activity windows.
+@FlakyTest(detail = "TODO (b/145242835): Re-enable once type mapping is implemented for "
+        + "PRIVATE_FLAG_IS_SCREEN_DECOR")
 @SmallTest
 @Presubmit
 public class ScreenDecorWindowTests {
diff --git a/services/tests/wmtests/src/com/android/server/wm/StubTransaction.java b/services/tests/wmtests/src/com/android/server/wm/StubTransaction.java
index eda1fb8..851b052 100644
--- a/services/tests/wmtests/src/com/android/server/wm/StubTransaction.java
+++ b/services/tests/wmtests/src/com/android/server/wm/StubTransaction.java
@@ -255,4 +255,14 @@
             int priority) {
         return this;
     }
+
+    @Override
+    public SurfaceControl.Transaction unsetColor(SurfaceControl sc) {
+        return this;
+    }
+
+    @Override
+    public SurfaceControl.Transaction setShadowRadius(SurfaceControl sc, float shadowRadius) {
+        return this;
+    }
 }
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 e507508..55d12db 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
@@ -56,6 +56,7 @@
 import android.os.PowerSaveState;
 import android.os.StrictMode;
 import android.os.UserHandle;
+import android.util.Log;
 import android.view.InputChannel;
 import android.view.Surface;
 import android.view.SurfaceControl;
@@ -120,11 +121,23 @@
         return new Statement() {
             @Override
             public void evaluate() throws Throwable {
+                Throwable throwable = null;
                 try {
                     runWithDexmakerShareClassLoader(SystemServicesTestRule.this::setUp);
                     base.evaluate();
+                } catch (Throwable t) {
+                    throwable = t;
                 } finally {
-                    tearDown();
+                    try {
+                        tearDown();
+                    } catch (Throwable t) {
+                        if (throwable != null) {
+                            Log.e("SystemServicesTestRule", "Suppressed: ", throwable);
+                            t.addSuppressed(throwable);
+                        }
+                        throw t;
+                    }
+                    if (throwable != null) throw throwable;
                 }
             }
         };
@@ -439,11 +452,11 @@
             doNothing().when(this).updateCpuStats();
 
             // AppOpsService
-            final AppOpsService aos = mock(AppOpsService.class);
-            doReturn(aos).when(this).getAppOpsService();
+            final AppOpsManager aos = mock(AppOpsManager.class);
+            doReturn(aos).when(this).getAppOpsManager();
             // Make sure permission checks aren't overridden.
-            doReturn(AppOpsManager.MODE_DEFAULT).when(aos).noteOperation(anyInt(), anyInt(),
-                    anyString(), nullable(String.class), anyBoolean(), nullable(String.class));
+            doReturn(AppOpsManager.MODE_DEFAULT).when(aos).noteOpNoThrow(anyInt(), anyInt(),
+                    anyString(), nullable(String.class), nullable(String.class));
 
             // UserManagerService
             final UserManagerService ums = mock(UserManagerService.class);
diff --git a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRuleTest.java b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRuleTest.java
new file mode 100644
index 0000000..4056c71
--- /dev/null
+++ b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRuleTest.java
@@ -0,0 +1,74 @@
+/*
+ * 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.wm;
+
+import static junit.framework.Assert.assertTrue;
+
+import android.platform.test.annotations.Presubmit;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runners.model.Statement;
+
+import java.io.IOException;
+
+@Presubmit
+public class SystemServicesTestRuleTest {
+    @Rule
+    public ExpectedException mExpectedException = ExpectedException.none();
+
+    @Test
+    public void testRule_rethrows_unchecked_exceptions() throws Throwable {
+        final SystemServicesTestRule mWmsRule = new SystemServicesTestRule();
+        Statement statement = new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                throw new RuntimeException("A failing test!");
+            }
+        };
+        mExpectedException.expect(RuntimeException.class);
+        mWmsRule.apply(statement, null /* Description*/).evaluate();
+    }
+
+    @Test
+    public void testRule_rethrows_checked_exceptions() throws Throwable {
+        final SystemServicesTestRule mWmsRule = new SystemServicesTestRule();
+        Statement statement = new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                throw new IOException("A failing test!");
+            }
+        };
+        mExpectedException.expect(IOException.class);
+        mWmsRule.apply(statement, null /* Description*/).evaluate();
+    }
+
+    @Test
+    public void testRule_ranSuccessfully() throws Throwable {
+        final boolean[] testRan = {false};
+        final SystemServicesTestRule mWmsRule = new SystemServicesTestRule();
+        Statement statement = new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                testRan[0] = true;
+            }
+        };
+        mWmsRule.apply(statement, null /* Description*/).evaluate();
+        assertTrue(testRan[0]);
+    }
+}
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java
index a9a20f6..cd53ece 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java
@@ -26,24 +26,36 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
 
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.times;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
 
 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.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
 
 import android.app.ActivityManager.RunningTaskInfo;
 import android.app.ActivityManager.StackInfo;
+import android.app.PictureInPictureParams;
+import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
 import android.graphics.Rect;
 import android.os.Binder;
+import android.os.IBinder;
 import android.os.RemoteException;
 import android.platform.test.annotations.Presubmit;
+import android.util.ArrayMap;
+import android.util.Rational;
 import android.view.Display;
 import android.view.ITaskOrganizer;
 import android.view.IWindowContainer;
@@ -207,7 +219,7 @@
         WindowContainerTransaction t = new WindowContainerTransaction();
         Rect newBounds = new Rect(10, 10, 100, 100);
         t.setBounds(task.mRemoteToken, new Rect(10, 10, 100, 100));
-        mWm.mAtmService.mTaskOrganizerController.applyContainerTransaction(t);
+        mWm.mAtmService.mTaskOrganizerController.applyContainerTransaction(t, null);
         assertEquals(newBounds, task.getBounds());
     }
 
@@ -222,7 +234,7 @@
         assertEquals(stack.mRemoteToken, info.stackToken);
         Rect newBounds = new Rect(10, 10, 100, 100);
         t.setBounds(info.stackToken, new Rect(10, 10, 100, 100));
-        mWm.mAtmService.mTaskOrganizerController.applyContainerTransaction(t);
+        mWm.mAtmService.mTaskOrganizerController.applyContainerTransaction(t, null);
         assertEquals(newBounds, stack.getBounds());
     }
 
@@ -235,7 +247,7 @@
         WindowContainerTransaction t = new WindowContainerTransaction();
         assertTrue(task.isFocusable());
         t.setFocusable(stack.mRemoteToken, false);
-        mWm.mAtmService.mTaskOrganizerController.applyContainerTransaction(t);
+        mWm.mAtmService.mTaskOrganizerController.applyContainerTransaction(t, null);
         assertFalse(task.isFocusable());
     }
 
@@ -354,14 +366,215 @@
         assertEquals(ACTIVITY_TYPE_UNDEFINED, lastReportedTiles.get(0).topActivityType);
     }
 
+    @Test
+    public void testHierarchyTransaction() {
+        final ArrayMap<IBinder, RunningTaskInfo> lastReportedTiles = new ArrayMap<>();
+        ITaskOrganizer listener = new ITaskOrganizer.Stub() {
+            @Override
+            public void taskAppeared(RunningTaskInfo taskInfo) { }
+
+            @Override
+            public void taskVanished(IWindowContainer container) { }
+
+            @Override
+            public void transactionReady(int id, SurfaceControl.Transaction t) { }
+
+            @Override
+            public void onTaskInfoChanged(RunningTaskInfo info) {
+                lastReportedTiles.put(info.token.asBinder(), info);
+            }
+        };
+        mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(
+                listener, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+        RunningTaskInfo info1 = mWm.mAtmService.mTaskOrganizerController.createRootTask(
+                mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+        RunningTaskInfo info2 = mWm.mAtmService.mTaskOrganizerController.createRootTask(
+                mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+
+        final int initialRootTaskCount = mWm.mAtmService.mTaskOrganizerController.getRootTasks(
+                mDisplayContent.mDisplayId, null /* activityTypes */).size();
+
+        final ActivityStack stack = createTaskStackOnDisplay(
+                WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, mDisplayContent);
+        final ActivityStack stack2 = createTaskStackOnDisplay(
+                WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_HOME, mDisplayContent);
+
+        // Check getRootTasks works
+        List<RunningTaskInfo> roots = mWm.mAtmService.mTaskOrganizerController.getRootTasks(
+                mDisplayContent.mDisplayId, null /* activityTypes */);
+        assertEquals(initialRootTaskCount + 2, roots.size());
+
+        lastReportedTiles.clear();
+        WindowContainerTransaction wct = new WindowContainerTransaction();
+        wct.reparent(stack.mRemoteToken, info1.token, true /* onTop */);
+        wct.reparent(stack2.mRemoteToken, info2.token, true /* onTop */);
+        mWm.mAtmService.mTaskOrganizerController.applyContainerTransaction(wct,
+                null /* organizer */);
+        assertFalse(lastReportedTiles.isEmpty());
+        assertEquals(ACTIVITY_TYPE_STANDARD,
+                lastReportedTiles.get(info1.token.asBinder()).topActivityType);
+        assertEquals(ACTIVITY_TYPE_HOME,
+                lastReportedTiles.get(info2.token.asBinder()).topActivityType);
+
+        lastReportedTiles.clear();
+        wct = new WindowContainerTransaction();
+        wct.reparent(stack2.mRemoteToken, info1.token, false /* onTop */);
+        mWm.mAtmService.mTaskOrganizerController.applyContainerTransaction(wct,
+                null /* organizer */);
+        assertFalse(lastReportedTiles.isEmpty());
+        // Standard should still be on top of tile 1, so no change there
+        assertFalse(lastReportedTiles.containsKey(info1.token.asBinder()));
+        // But tile 2 has no children, so should become undefined
+        assertEquals(ACTIVITY_TYPE_UNDEFINED,
+                lastReportedTiles.get(info2.token.asBinder()).topActivityType);
+
+        // Check the getChildren call
+        List<RunningTaskInfo> children =
+                mWm.mAtmService.mTaskOrganizerController.getChildTasks(info1.token,
+                        null /* activityTypes */);
+        assertEquals(2, children.size());
+        children = mWm.mAtmService.mTaskOrganizerController.getChildTasks(info2.token,
+                null /* activityTypes */);
+        assertEquals(0, children.size());
+
+        // Check that getRootTasks doesn't include children of tiles
+        roots = mWm.mAtmService.mTaskOrganizerController.getRootTasks(mDisplayContent.mDisplayId,
+                null /* activityTypes */);
+        assertEquals(initialRootTaskCount, roots.size());
+
+        lastReportedTiles.clear();
+        wct = new WindowContainerTransaction();
+        wct.reorder(stack2.mRemoteToken, true /* onTop */);
+        mWm.mAtmService.mTaskOrganizerController.applyContainerTransaction(wct,
+                null /* organizer */);
+        // Home should now be on top. No change occurs in second tile, so not reported
+        assertEquals(1, lastReportedTiles.size());
+        assertEquals(ACTIVITY_TYPE_HOME,
+                lastReportedTiles.get(info1.token.asBinder()).topActivityType);
+    }
+
     private List<TaskTile> getTaskTiles(DisplayContent dc) {
         ArrayList<TaskTile> out = new ArrayList<>();
         for (int i = dc.getStackCount() - 1; i >= 0; --i) {
-            final Task t = dc.getStackAt(i);
-            if (t instanceof TaskTile) {
-                out.add((TaskTile) t);
+            final TaskTile t = dc.getStackAt(i).asTile();
+            if (t != null) {
+                out.add(t);
             }
         }
         return out;
     }
+
+    @Test
+    public void testTrivialBLASTCallback() throws RemoteException {
+        final ActivityStack stackController1 = createTaskStackOnDisplay(mDisplayContent);
+        final Task task = createTaskInStack(stackController1, 0 /* userId */);
+        final ITaskOrganizer organizer = registerMockOrganizer();
+
+        BLASTSyncEngine bse = new BLASTSyncEngine();
+
+        BLASTSyncEngine.TransactionReadyListener transactionListener =
+            mock(BLASTSyncEngine.TransactionReadyListener.class);
+
+        int id = bse.startSyncSet(transactionListener);
+        bse.addToSyncSet(id, task);
+        bse.setReady(id);
+        // Since this task has no windows the sync is trivial and completes immediately.
+        verify(transactionListener)
+            .transactionReady(anyInt(), any());
+    }
+
+    @Test
+    public void testBLASTCallbackWithWindow() {
+        final ActivityStack stackController1 = createTaskStackOnDisplay(mDisplayContent);
+        final Task task = createTaskInStack(stackController1, 0 /* userId */);
+        final ITaskOrganizer organizer = registerMockOrganizer();
+        final WindowState w = createAppWindow(task, TYPE_APPLICATION, "Enlightened Window");
+
+        BLASTSyncEngine bse = new BLASTSyncEngine();
+
+        BLASTSyncEngine.TransactionReadyListener transactionListener =
+            mock(BLASTSyncEngine.TransactionReadyListener.class);
+
+        int id = bse.startSyncSet(transactionListener);
+        bse.addToSyncSet(id, task);
+        bse.setReady(id);
+        // Since we have a window we have to wait for it to draw to finish sync.
+        verify(transactionListener, never())
+            .transactionReady(anyInt(), any());
+        w.finishDrawing(null);
+        verify(transactionListener)
+            .transactionReady(anyInt(), any());
+    }
+
+    class StubOrganizer extends ITaskOrganizer.Stub {
+        RunningTaskInfo mInfo;
+
+        @Override
+        public void taskAppeared(RunningTaskInfo info) {
+            mInfo = info;
+        }
+        @Override
+        public void taskVanished(IWindowContainer wc) {
+        }
+        @Override
+        public void transactionReady(int id, SurfaceControl.Transaction t) {
+        }
+        @Override
+        public void onTaskInfoChanged(RunningTaskInfo info) {
+        }
+    };
+
+    private ActivityRecord makePipableActivity() {
+        final ActivityRecord record = createActivityRecord(mDisplayContent,
+                WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
+        record.info.flags |= ActivityInfo.FLAG_SUPPORTS_PICTURE_IN_PICTURE;
+        spyOn(record);
+        doReturn(true).when(record).checkEnterPictureInPictureState(any(), anyBoolean());
+        return record;
+    }
+
+    @Test
+    public void testEnterPipParams() {
+        final StubOrganizer o = new StubOrganizer();
+        mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(o, WINDOWING_MODE_PINNED);
+        final ActivityRecord record = makePipableActivity();
+
+        final PictureInPictureParams p =
+            new PictureInPictureParams.Builder().setAspectRatio(new Rational(1, 2)).build();
+        assertTrue(mWm.mAtmService.enterPictureInPictureMode(record.token, p));
+        waitUntilHandlersIdle();
+        assertNotNull(o.mInfo);
+        assertNotNull(o.mInfo.pictureInPictureParams);
+    }
+
+    @Test
+    public void testChangePipParams() {
+        class ChangeSavingOrganizer extends StubOrganizer {
+            RunningTaskInfo mChangedInfo;
+            @Override
+            public void onTaskInfoChanged(RunningTaskInfo info) {
+                mChangedInfo = info;
+            }
+        }
+        ChangeSavingOrganizer o = new ChangeSavingOrganizer();
+        mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(o, WINDOWING_MODE_PINNED);
+
+        final ActivityRecord record = makePipableActivity();
+        final PictureInPictureParams p =
+            new PictureInPictureParams.Builder().setAspectRatio(new Rational(1, 2)).build();
+        assertTrue(mWm.mAtmService.enterPictureInPictureMode(record.token, p));
+        waitUntilHandlersIdle();
+        assertNotNull(o.mInfo);
+        assertNotNull(o.mInfo.pictureInPictureParams);
+
+        final PictureInPictureParams p2 =
+            new PictureInPictureParams.Builder().setAspectRatio(new Rational(3, 4)).build();
+        mWm.mAtmService.setPictureInPictureParams(record.token, p2);
+        waitUntilHandlersIdle();
+        assertNotNull(o.mChangedInfo);
+        assertNotNull(o.mChangedInfo.pictureInPictureParams);
+        final Rational ratio = o.mChangedInfo.pictureInPictureParams.getAspectRatioRational();
+        assertEquals(3, ratio.getNumerator());
+        assertEquals(4, ratio.getDenominator());
+    }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java
index 7aaf3fb..52b465f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java
@@ -20,7 +20,7 @@
 import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
 
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
-import static com.android.server.wm.TaskPositioner.MIN_ASPECT;
+import static com.android.internal.policy.TaskResizingAlgorithm.MIN_ASPECT;
 import static com.android.server.wm.WindowManagerService.dipToPixel;
 import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_HEIGHT_IN_DP;
 import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_WIDTH_IN_DP;
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java
index ebf14d2..feadd0a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java
@@ -988,7 +988,7 @@
     private Task createTask(int taskId) {
         return new ActivityStack(mService, taskId, new Intent(), null, null, null,
                 ActivityBuilder.getDefaultComponent(), null, false, false, false, 0, 10050, null,
-                0, false, null, 0, 0, 0, 0, 0, null, 0, false, false, false, 0,
+                0, false, null, 0, 0, 0, 0, 0, null, null, 0, false, false, false, 0,
                 0, null /*ActivityInfo*/, null /*_voiceSession*/, null /*_voiceInteractor*/,
                 null /*stack*/);
     }
@@ -1022,7 +1022,7 @@
                 boolean neverRelinquishIdentity,
                 ActivityManager.TaskDescription lastTaskDescription,
                 int taskAffiliation, int prevTaskId, int nextTaskId, int taskAffiliationColor,
-                int callingUid, String callingPackage, int resizeMode,
+                int callingUid, String callingPackage, String callingFeatureId, int resizeMode,
                 boolean supportsPictureInPicture,
                 boolean realActivitySuspended, boolean userSetupComplete, int minWidth,
                 int minHeight, ActivityStack stack) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java
index 3a68924..7a075a2 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java
@@ -75,7 +75,8 @@
     }
 
     @Override
-    public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp) {
+    public int checkAddPermission(int type, boolean isRoundedCornerOverlay, String packageName,
+            int[] outAppOp) {
         return 0;
     }
 
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
new file mode 100644
index 0000000..35723ab
--- /dev/null
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
@@ -0,0 +1,60 @@
+/*
+ * 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.wm;
+
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+
+import android.content.pm.PackageManager;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@Presubmit
+@RunWith(WindowTestRunner.class)
+public class WindowManagerServiceTests extends WindowTestsBase {
+    @Rule
+    public ExpectedException mExpectedException = ExpectedException.none();
+
+    @Test
+    public void testForceShowSystemBarsThrowsExceptionForNonAutomotive() {
+        if (!isAutomotive()) {
+            mExpectedException.expect(UnsupportedOperationException.class);
+
+            mWm.setForceShowSystemBars(true);
+        }
+    }
+
+    @Test
+    public void testForceShowSystemBarsDoesNotThrowExceptionForAutomotiveWithStatusBarPermission() {
+        if (isAutomotive()) {
+            mExpectedException.none();
+
+            mWm.setForceShowSystemBars(true);
+        }
+    }
+
+    private boolean isAutomotive() {
+        return getInstrumentation().getTargetContext().getPackageManager().hasSystemFeature(
+                PackageManager.FEATURE_AUTOMOTIVE);
+    }
+}
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index 48b6e2a..0d1b352 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -86,6 +86,7 @@
 
 import com.android.internal.content.PackageMonitor;
 import com.android.internal.os.BackgroundThread;
+import com.android.internal.util.CollectionUtils;
 import com.android.internal.util.DumpUtils;
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.LocalServices;
@@ -104,6 +105,7 @@
 import java.io.PrintWriter;
 import java.nio.file.Files;
 import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -491,6 +493,28 @@
         return true; // hide by default if we can't verify visibility
     }
 
+    private boolean shouldHideLocusIdEvents(int callingPid, int callingUid) {
+        if (callingUid == Process.SYSTEM_UID) {
+            return false;
+        }
+        return !(getContext().checkPermission(
+                android.Manifest.permission.ACCESS_LOCUS_ID_USAGE_STATS, callingPid, callingUid)
+                == PackageManager.PERMISSION_GRANTED);
+    }
+
+    /**
+     * Obfuscate both {@link UsageEvents.Event#NOTIFICATION_SEEN} and
+     * {@link UsageEvents.Event#NOTIFICATION_INTERRUPTION} events if the provided calling uid does
+     * not hold the {@link android.Manifest.permission.MANAGE_NOTIFICATIONS} permission.
+     */
+    private boolean shouldObfuscateNotificationEvents(int callingPid, int callingUid) {
+        if (callingUid == Process.SYSTEM_UID) {
+            return false;
+        }
+        return !(getContext().checkPermission(android.Manifest.permission.MANAGE_NOTIFICATIONS,
+                callingPid, callingUid) == PackageManager.PERMISSION_GRANTED);
+    }
+
     private static void deleteRecursively(File f) {
         File[] files = f.listFiles();
         if (files != null) {
@@ -1029,8 +1053,7 @@
     /**
      * Called by the Binder stub.
      */
-    UsageEvents queryEvents(int userId, long beginTime, long endTime,
-            boolean shouldObfuscateInstantApps, boolean shouldHideShortcutInvocationEvents) {
+    UsageEvents queryEvents(int userId, long beginTime, long endTime, int flags) {
         synchronized (mLock) {
             if (!mUserUnlockedStates.get(userId)) {
                 Slog.w(TAG, "Failed to query events for locked user " + userId);
@@ -1041,8 +1064,7 @@
             if (service == null) {
                 return null; // user was stopped or removed
             }
-            return service.queryEvents(beginTime, endTime, shouldObfuscateInstantApps,
-                    shouldHideShortcutInvocationEvents);
+            return service.queryEvents(beginTime, endTime, flags);
         }
     }
 
@@ -1101,7 +1123,7 @@
 
             boolean checkin = false;
             boolean compact = false;
-            String pkg = null;
+            final ArrayList<String> pkgs = new ArrayList<>();
 
             if (args != null) {
                 for (int i = 0; i < args.length; i++) {
@@ -1132,7 +1154,11 @@
                             // dump everything for all users
                             final int numUsers = mUserState.size();
                             for (int user = 0; user < numUsers; user++) {
-                                ipw.println("user=" + mUserState.keyAt(user));
+                                final int userId = mUserState.keyAt(user);
+                                if (!mUserUnlockedStates.get(userId)) {
+                                    continue;
+                                }
+                                ipw.println("user=" + userId);
                                 ipw.increaseIndent();
                                 mUserState.valueAt(user).dumpFile(ipw, null);
                                 ipw.decreaseIndent();
@@ -1153,7 +1179,11 @@
                             // dump info for all users
                             final int numUsers = mUserState.size();
                             for (int user = 0; user < numUsers; user++) {
-                                ipw.println("user=" + mUserState.keyAt(user));
+                                final int userId = mUserState.keyAt(user);
+                                if (!mUserUnlockedStates.get(userId)) {
+                                    continue;
+                                }
+                                ipw.println("user=" + userId);
                                 ipw.increaseIndent();
                                 mUserState.valueAt(user).dumpDatabaseInfo(ipw);
                                 ipw.decreaseIndent();
@@ -1186,8 +1216,7 @@
                         return;
                     } else if (arg != null && !arg.startsWith("-")) {
                         // Anything else that doesn't start with '-' is a pkg to filter
-                        pkg = arg;
-                        break;
+                        pkgs.add(arg);
                     }
                 }
             }
@@ -1198,17 +1227,19 @@
                 idpw.printPair("user", userId);
                 idpw.println();
                 idpw.increaseIndent();
-                if (checkin) {
-                    mUserState.valueAt(i).checkin(idpw);
-                } else {
-                    mUserState.valueAt(i).dump(idpw, pkg, compact);
-                    idpw.println();
+                if (mUserUnlockedStates.get(userId)) {
+                    if (checkin) {
+                        mUserState.valueAt(i).checkin(idpw);
+                    } else {
+                        mUserState.valueAt(i).dump(idpw, pkgs, compact);
+                        idpw.println();
+                    }
                 }
-                mAppStandby.dumpUser(idpw, userId, pkg);
+                mAppStandby.dumpUser(idpw, userId, pkgs);
                 idpw.decreaseIndent();
             }
 
-            if (pkg == null) {
+            if (CollectionUtils.isEmpty(pkgs)) {
                 pw.println();
                 mAppStandby.dumpState(args, pw);
             }
@@ -1224,7 +1255,7 @@
     private int parseUserIdFromArgs(String[] args, int index, IndentingPrintWriter ipw) {
         final int userId;
         try {
-            userId = Integer.valueOf(args[index + 1]);
+            userId = Integer.parseInt(args[index + 1]);
         } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
             ipw.println("invalid user specified.");
             return UserHandle.USER_NULL;
@@ -1233,6 +1264,10 @@
             ipw.println("the specified user does not exist.");
             return UserHandle.USER_NULL;
         }
+        if (!mUserUnlockedStates.get(userId)) {
+            ipw.println("the specified user is currently in a locked state.");
+            return UserHandle.USER_NULL;
+        }
         return userId;
     }
 
@@ -1451,8 +1486,15 @@
             try {
                 final boolean hideShortcutInvocationEvents = shouldHideShortcutInvocationEvents(
                         userId, callingPackage, callingPid, callingUid);
-                return UsageStatsService.this.queryEvents(userId, beginTime, endTime,
-                        obfuscateInstantApps, hideShortcutInvocationEvents);
+                final boolean hideLocusIdEvents = shouldHideLocusIdEvents(callingPid, callingUid);
+                final boolean obfuscateNotificationEvents = shouldObfuscateNotificationEvents(
+                        callingPid, callingUid);
+                int flags = UsageEvents.SHOW_ALL_EVENT_DATA;
+                if (obfuscateInstantApps) flags |= UsageEvents.OBFUSCATE_INSTANT_APPS;
+                if (hideShortcutInvocationEvents) flags |= UsageEvents.HIDE_SHORTCUT_EVENTS;
+                if (hideLocusIdEvents) flags |= UsageEvents.HIDE_LOCUS_EVENTS;
+                if (obfuscateNotificationEvents) flags |= UsageEvents.OBFUSCATE_NOTIFICATION_EVENTS;
+                return UsageStatsService.this.queryEvents(userId, beginTime, endTime, flags);
             } finally {
                 Binder.restoreCallingIdentity(token);
             }
@@ -1499,8 +1541,15 @@
             try {
                 final boolean hideShortcutInvocationEvents = shouldHideShortcutInvocationEvents(
                         userId, callingPackage, callingPid, callingUid);
-                return UsageStatsService.this.queryEvents(userId, beginTime, endTime,
-                        obfuscateInstantApps, hideShortcutInvocationEvents);
+                final boolean obfuscateNotificationEvents = shouldObfuscateNotificationEvents(
+                        callingPid, callingUid);
+                boolean hideLocusIdEvents = shouldHideLocusIdEvents(callingPid, callingUid);
+                int flags = UsageEvents.SHOW_ALL_EVENT_DATA;
+                if (obfuscateInstantApps) flags |= UsageEvents.OBFUSCATE_INSTANT_APPS;
+                if (hideShortcutInvocationEvents) flags |= UsageEvents.HIDE_SHORTCUT_EVENTS;
+                if (hideLocusIdEvents) flags |= UsageEvents.HIDE_LOCUS_EVENTS;
+                if (obfuscateNotificationEvents) flags |= UsageEvents.OBFUSCATE_NOTIFICATION_EVENTS;
+                return UsageStatsService.this.queryEvents(userId, beginTime, endTime, flags);
             } finally {
                 Binder.restoreCallingIdentity(token);
             }
@@ -2116,10 +2165,8 @@
         }
 
         @Override
-        public UsageEvents queryEventsForUser(int userId, long beginTime, long endTime,
-                boolean obfuscateInstantApps, boolean hideShortcutInvocationEvents) {
-            return UsageStatsService.this.queryEvents(
-                    userId, beginTime, endTime, obfuscateInstantApps, hideShortcutInvocationEvents);
+        public UsageEvents queryEventsForUser(int userId, long beginTime, long endTime, int flags) {
+            return UsageStatsService.this.queryEvents(userId, beginTime, endTime, flags);
         }
 
         @Override
diff --git a/services/usage/java/com/android/server/usage/UserUsageStatsService.java b/services/usage/java/com/android/server/usage/UserUsageStatsService.java
index 4d71112..b7779fd 100644
--- a/services/usage/java/com/android/server/usage/UserUsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UserUsageStatsService.java
@@ -18,6 +18,10 @@
 
 import static android.app.usage.UsageEvents.Event.DEVICE_SHUTDOWN;
 import static android.app.usage.UsageEvents.Event.DEVICE_STARTUP;
+import static android.app.usage.UsageEvents.HIDE_LOCUS_EVENTS;
+import static android.app.usage.UsageEvents.HIDE_SHORTCUT_EVENTS;
+import static android.app.usage.UsageEvents.OBFUSCATE_INSTANT_APPS;
+import static android.app.usage.UsageEvents.OBFUSCATE_NOTIFICATION_EVENTS;
 import static android.app.usage.UsageStatsManager.INTERVAL_BEST;
 import static android.app.usage.UsageStatsManager.INTERVAL_COUNT;
 import static android.app.usage.UsageStatsManager.INTERVAL_DAILY;
@@ -44,6 +48,7 @@
 import android.util.SparseIntArray;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.CollectionUtils;
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.usage.UsageStatsDatabase.StatCombiner;
 
@@ -481,8 +486,7 @@
         return queryStats(bucketType, beginTime, endTime, sEventStatsCombiner);
     }
 
-    UsageEvents queryEvents(final long beginTime, final long endTime,
-                            boolean obfuscateInstantApps, boolean hideShortcutInvocationEvents) {
+    UsageEvents queryEvents(final long beginTime, final long endTime, int flags) {
         if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) {
             return null;
         }
@@ -500,11 +504,22 @@
                             }
 
                             Event event = stats.events.get(i);
-                            if (hideShortcutInvocationEvents
-                                    && event.mEventType == Event.SHORTCUT_INVOCATION) {
+                            final int eventType = event.mEventType;
+                            if (eventType == Event.SHORTCUT_INVOCATION
+                                    && (flags & HIDE_SHORTCUT_EVENTS) == HIDE_SHORTCUT_EVENTS) {
                                 continue;
                             }
-                            if (obfuscateInstantApps) {
+                            if (eventType == Event.LOCUS_ID_SET
+                                    && (flags & HIDE_LOCUS_EVENTS) == HIDE_LOCUS_EVENTS) {
+                                continue;
+                            }
+                            if ((eventType == Event.NOTIFICATION_SEEN
+                                    || eventType == Event.NOTIFICATION_INTERRUPTION)
+                                    && (flags & OBFUSCATE_NOTIFICATION_EVENTS)
+                                    == OBFUSCATE_NOTIFICATION_EVENTS) {
+                                event = event.getObfuscatedNotificationEvent();
+                            }
+                            if ((flags & OBFUSCATE_INSTANT_APPS) == OBFUSCATE_INSTANT_APPS) {
                                 event = event.getObfuscatedIfInstantApp();
                             }
                             if (event.mPackage != null) {
@@ -739,18 +754,21 @@
         });
     }
 
-    void dump(IndentingPrintWriter pw, String pkg) {
-        dump(pw, pkg, false);
+    void dump(IndentingPrintWriter pw, List<String> pkgs) {
+        dump(pw, pkgs, false);
     }
-    void dump(IndentingPrintWriter pw, String pkg, boolean compact) {
-        printLast24HrEvents(pw, !compact, pkg);
+
+    void dump(IndentingPrintWriter pw, List<String> pkgs, boolean compact) {
+        printLast24HrEvents(pw, !compact, pkgs);
         for (int interval = 0; interval < mCurrentStats.length; interval++) {
             pw.print("In-memory ");
             pw.print(intervalToString(interval));
             pw.println(" stats");
-            printIntervalStats(pw, mCurrentStats[interval], !compact, true, pkg);
+            printIntervalStats(pw, mCurrentStats[interval], !compact, true, pkgs);
         }
-        mDatabase.dump(pw, compact);
+        if (CollectionUtils.isEmpty(pkgs)) {
+            mDatabase.dump(pw, compact);
+        }
     }
 
     void dumpDatabaseInfo(IndentingPrintWriter ipw) {
@@ -880,7 +898,8 @@
         pw.println();
     }
 
-    void printLast24HrEvents(IndentingPrintWriter pw, boolean prettyDates, final String pkg) {
+    void printLast24HrEvents(IndentingPrintWriter pw, boolean prettyDates,
+            final List<String> pkgs) {
         final long endTime = System.currentTimeMillis();
         UnixCalendar yesterday = new UnixCalendar(endTime);
         yesterday.addDays(-1);
@@ -900,7 +919,7 @@
                             }
 
                             Event event = stats.events.get(i);
-                            if (pkg != null && !pkg.equals(event.mPackage)) {
+                            if (!CollectionUtils.isEmpty(pkgs) && !pkgs.contains(event.mPackage)) {
                                 continue;
                             }
                             accumulatedResult.add(event);
@@ -944,7 +963,7 @@
     }
 
     void printIntervalStats(IndentingPrintWriter pw, IntervalStats stats,
-            boolean prettyDates, boolean skipEvents, String pkg) {
+            boolean prettyDates, boolean skipEvents, List<String> pkgs) {
         if (prettyDates) {
             pw.printPair("timeRange", "\"" + DateUtils.formatDateRange(mContext,
                     stats.beginTime, stats.endTime, sDateFormatFlags) + "\"");
@@ -960,7 +979,7 @@
         final int pkgCount = pkgStats.size();
         for (int i = 0; i < pkgCount; i++) {
             final UsageStats usageStats = pkgStats.valueAt(i);
-            if (pkg != null && !pkg.equals(usageStats.mPackageName)) {
+            if (!CollectionUtils.isEmpty(pkgs) && !pkgs.contains(usageStats.mPackageName)) {
                 continue;
             }
             pw.printPair("package", usageStats.mPackageName);
@@ -984,7 +1003,7 @@
         pw.println("ChooserCounts");
         pw.increaseIndent();
         for (UsageStats usageStats : pkgStats.values()) {
-            if (pkg != null && !pkg.equals(usageStats.mPackageName)) {
+            if (!CollectionUtils.isEmpty(pkgs) && !pkgs.contains(usageStats.mPackageName)) {
                 continue;
             }
             pw.printPair("package", usageStats.mPackageName);
@@ -1009,7 +1028,7 @@
         }
         pw.decreaseIndent();
 
-        if (pkg == null) {
+        if (CollectionUtils.isEmpty(pkgs)) {
             pw.println("configurations");
             pw.increaseIndent();
             final ArrayMap<Configuration, ConfigurationStats> configStats = stats.configurations;
@@ -1046,7 +1065,7 @@
             final int eventCount = events != null ? events.size() : 0;
             for (int i = 0; i < eventCount; i++) {
                 final Event event = events.get(i);
-                if (pkg != null && !pkg.equals(event.mPackage)) {
+                if (!CollectionUtils.isEmpty(pkgs) && !pkgs.contains(event.mPackage)) {
                     continue;
                 }
                 printEvent(pw, event, prettyDates);
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index 6407ec7..84f411f 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -41,6 +41,7 @@
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.debug.AdbManagerInternal;
+import android.debug.AdbTransportType;
 import android.debug.IAdbTransport;
 import android.hardware.usb.ParcelableUsbPort;
 import android.hardware.usb.UsbAccessory;
@@ -775,8 +776,10 @@
             }
 
             @Override
-            public void onAdbEnabled(boolean enabled) {
-                mHandler.sendMessage(MSG_ENABLE_ADB, enabled);
+            public void onAdbEnabled(boolean enabled, byte transportType) {
+                if (transportType == AdbTransportType.USB) {
+                    mHandler.sendMessage(MSG_ENABLE_ADB, enabled);
+                }
             }
         }
 
@@ -1170,7 +1173,8 @@
         }
 
         protected boolean isAdbEnabled() {
-            return LocalServices.getService(AdbManagerInternal.class).isAdbEnabled();
+            return LocalServices.getService(AdbManagerInternal.class)
+                    .isAdbEnabled(AdbTransportType.USB);
         }
 
         protected void updateAdbNotification(boolean force) {
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index d5eec33..8378d8e 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -747,7 +747,8 @@
         }
 
         @Override
-        public int startVoiceActivity(IBinder token, Intent intent, String resolvedType) {
+        public int startVoiceActivity(IBinder token, Intent intent, String resolvedType,
+                String callingFeatureId) {
             synchronized (this) {
                 if (mImpl == null) {
                     Slog.w(TAG, "startVoiceActivity without running voice interaction service");
@@ -757,8 +758,8 @@
                 final int callingUid = Binder.getCallingUid();
                 final long caller = Binder.clearCallingIdentity();
                 try {
-                    return mImpl.startVoiceActivityLocked(callingPid, callingUid, token,
-                            intent, resolvedType);
+                    return mImpl.startVoiceActivityLocked(callingFeatureId, callingPid, callingUid,
+                            token, intent, resolvedType);
                 } finally {
                     Binder.restoreCallingIdentity(caller);
                 }
@@ -766,7 +767,8 @@
         }
 
         @Override
-        public int startAssistantActivity(IBinder token, Intent intent, String resolvedType) {
+        public int startAssistantActivity(IBinder token, Intent intent, String resolvedType,
+                String callingFeatureId) {
             synchronized (this) {
                 if (mImpl == null) {
                     Slog.w(TAG, "startAssistantActivity without running voice interaction service");
@@ -776,8 +778,8 @@
                 final int callingUid = Binder.getCallingUid();
                 final long caller = Binder.clearCallingIdentity();
                 try {
-                    return mImpl.startAssistantActivityLocked(callingPid, callingUid, token,
-                            intent, resolvedType);
+                    return mImpl.startAssistantActivityLocked(callingFeatureId, callingPid,
+                            callingUid, token, intent, resolvedType);
                 } finally {
                     Binder.restoreCallingIdentity(caller);
                 }
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
index a1210cf..a62b03c 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
@@ -216,8 +216,8 @@
         return true;
     }
 
-    public int startVoiceActivityLocked(int callingPid, int callingUid, IBinder token,
-            Intent intent, String resolvedType) {
+    public int startVoiceActivityLocked(@Nullable String callingFeatureId, int callingPid,
+            int callingUid, IBinder token, Intent intent, String resolvedType) {
         try {
             if (mActiveSession == null || token != mActiveSession.mToken) {
                 Slog.w(TAG, "startVoiceActivity does not match active session");
@@ -230,16 +230,16 @@
             intent = new Intent(intent);
             intent.addCategory(Intent.CATEGORY_VOICE);
             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
-            return mAtm.startVoiceActivity(mComponent.getPackageName(), callingPid, callingUid,
-                    intent, resolvedType, mActiveSession.mSession, mActiveSession.mInteractor,
-                    0, null, null, mUser);
+            return mAtm.startVoiceActivity(mComponent.getPackageName(), callingFeatureId,
+                    callingPid, callingUid, intent, resolvedType, mActiveSession.mSession,
+                    mActiveSession.mInteractor, 0, null, null, mUser);
         } catch (RemoteException e) {
             throw new IllegalStateException("Unexpected remote error", e);
         }
     }
 
-    public int startAssistantActivityLocked(int callingPid, int callingUid, IBinder token,
-            Intent intent, String resolvedType) {
+    public int startAssistantActivityLocked(@Nullable String callingFeatureId, int callingPid,
+            int callingUid, IBinder token, Intent intent, String resolvedType) {
         try {
             if (mActiveSession == null || token != mActiveSession.mToken) {
                 Slog.w(TAG, "startAssistantActivity does not match active session");
@@ -253,8 +253,8 @@
             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             final ActivityOptions options = ActivityOptions.makeBasic();
             options.setLaunchActivityType(ACTIVITY_TYPE_ASSISTANT);
-            return mAtm.startAssistantActivity(mComponent.getPackageName(), callingPid, callingUid,
-                    intent, resolvedType, options.toBundle(), mUser);
+            return mAtm.startAssistantActivity(mComponent.getPackageName(), callingFeatureId,
+                    callingPid, callingUid, intent, resolvedType, options.toBundle(), mUser);
         } catch (RemoteException e) {
             throw new IllegalStateException("Unexpected remote error", e);
         }
diff --git a/startop/iorap/functional_tests/AndroidTest.xml b/startop/iorap/functional_tests/AndroidTest.xml
index 41109b4..ef56fc8 100644
--- a/startop/iorap/functional_tests/AndroidTest.xml
+++ b/startop/iorap/functional_tests/AndroidTest.xml
@@ -34,6 +34,11 @@
         <option name="run-command" value="rm -r /data/misc/iorapd/*" />
         <option name="run-command" value="sleep 1" />
 
+        <!-- Set system properties to enable perfetto tracing, readahead and detailed logging. -->
+        <option name="run-command" value="setprop iorapd.perfetto.enable true" />
+        <option name="run-command" value="setprop iorapd.readahead.enable true" />
+        <option name="run-command" value="setprop iorapd.log.verbose true" />
+
         <option name="run-command" value="start iorapd" />
 
         <!-- give it some time to restart the service; otherwise the first unit test might fail -->
@@ -45,9 +50,5 @@
         <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
     </test>
 
-    <!-- using DeviceSetup again does not work. we simply leave the device in a semi-bad
-         state. there is no way to clean this up as far as I know.
-         -->
-
 </configuration>
 
diff --git a/startop/iorap/functional_tests/src/com/google/android/startop/iorap/IorapWorkFlowTest.java b/startop/iorap/functional_tests/src/com/google/android/startop/iorap/IorapWorkFlowTest.java
index bd8a45c..4002387 100644
--- a/startop/iorap/functional_tests/src/com/google/android/startop/iorap/IorapWorkFlowTest.java
+++ b/startop/iorap/functional_tests/src/com/google/android/startop/iorap/IorapWorkFlowTest.java
@@ -67,7 +67,7 @@
   private static final String TEST_ACTIVITY_NAME = "com.android.settings.Settings";
 
   private static final String DB_PATH = "/data/misc/iorapd/sqlite.db";
-  private static final Duration TIMEOUT = Duration.ofSeconds(20L);
+  private static final Duration TIMEOUT = Duration.ofSeconds(300L);
 
   private static final String READAHEAD_INDICATOR =
       "Description = /data/misc/iorapd/com.android.settings/none/com.android.settings.Settings/compiled_traces/compiled_trace.pb";
@@ -88,7 +88,7 @@
     mDevice.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)), TIMEOUT.getSeconds());
   }
 
-  @Test
+  @Test (timeout = 300000)
   public void testApp() throws Exception {
     assertThat(mDevice, notNullValue());
 
@@ -247,7 +247,7 @@
       if (supplier.getAsBoolean()) {
         return true;
       }
-      TimeUnit.SECONDS.sleep(totalSleepTimeSeconds);
+      TimeUnit.SECONDS.sleep(sleepIntervalSeconds);
       totalSleepTimeSeconds += sleepIntervalSeconds;
       if (totalSleepTimeSeconds > timeout.getSeconds()) {
         return false;
@@ -367,7 +367,7 @@
    *
    * <p> This should be run as root.</p>
    */
-  private String executeShellCommand(String cmd) throws Exception {
+  private static String executeShellCommand(String cmd) throws Exception {
     Log.i(TAG, "Execute: " + cmd);
     return UiDevice.getInstance(
         InstrumentationRegistry.getInstrumentation()).executeShellCommand(cmd);
diff --git a/startop/iorap/stress/Android.bp b/startop/iorap/stress/Android.bp
new file mode 100644
index 0000000..f9f251bd
--- /dev/null
+++ b/startop/iorap/stress/Android.bp
@@ -0,0 +1,33 @@
+//
+// 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.
+//
+
+cc_binary {
+  name: "iorap.stress.memory",
+  srcs: ["main_memory.cc"],
+
+  cflags: [
+      "-Wall",
+      "-Wextra",
+      "-Werror",
+      "-Wno-unused-parameter"
+  ],
+
+  shared_libs: [
+      "libbase"
+  ],
+
+  host_supported: true,
+}
diff --git a/startop/iorap/stress/main_memory.cc b/startop/iorap/stress/main_memory.cc
new file mode 100644
index 0000000..1f26861
--- /dev/null
+++ b/startop/iorap/stress/main_memory.cc
@@ -0,0 +1,126 @@
+//
+// 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.
+//
+
+#include <chrono>
+#include <fstream>
+#include <iostream>
+#include <random>
+#include <string>
+
+#include <string.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+
+#include <android-base/parseint.h>
+
+static constexpr size_t kBytesPerMb = 1048576;
+const size_t kMemoryAllocationSize = 2 * 1024 * kBytesPerMb;
+
+#define USE_MLOCKALL 0
+
+std::string GetProcessStatus(const char* key) {
+  // Build search pattern of key and separator.
+  std::string pattern(key);
+  pattern.push_back(':');
+
+  // Search for status lines starting with pattern.
+  std::ifstream fs("/proc/self/status");
+  std::string line;
+  while (std::getline(fs, line)) {
+    if (strncmp(pattern.c_str(), line.c_str(), pattern.size()) == 0) {
+      // Skip whitespace in matching line (if any).
+      size_t pos = line.find_first_not_of(" \t", pattern.size());
+      if (pos == std::string::npos) {
+        break;
+      }
+      return std::string(line, pos);
+    }
+  }
+  return "<unknown>";
+}
+
+int main(int argc, char** argv) {
+  size_t allocationSize = 0;
+  if (argc >= 2) {
+    if (!android::base::ParseUint(argv[1], /*out*/&allocationSize)) {
+      std::cerr << "Failed to parse the allocation size (must be 0,MAX_SIZE_T)" << std::endl;
+      return 1;
+    }
+  } else {
+    allocationSize = kMemoryAllocationSize;
+  }
+
+  void* mem = malloc(allocationSize);
+  if (mem == nullptr) {
+    std::cerr << "Malloc failed" << std::endl;
+    return 1;
+  }
+
+  volatile int* imem = static_cast<int *>(mem);  // don't optimize out memory usage
+
+  size_t imemCount = allocationSize / sizeof(int);
+
+  std::cout << "Allocated " << allocationSize << " bytes" << std::endl;
+
+  auto seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
+  std::mt19937 mt_rand(seed);
+
+  size_t randPrintCount = 10;
+
+  // Write random numbers:
+  // * Ensures each page is resident
+  // * Avoids zeroed out pages (zRAM)
+  // * Avoids same-page merging
+  for (size_t i = 0; i < imemCount; ++i) {
+    imem[i] = mt_rand();
+
+    if (i < randPrintCount) {
+      std::cout << "Generated random value: " << imem[i] << std::endl;
+    }
+  }
+
+#if USE_MLOCKALL
+  /*
+   * Lock all pages from the address space of this process.
+   */
+  if (mlockall(MCL_CURRENT | MCL_FUTURE) != 0) {
+    std::cerr << "Mlockall failed" << std::endl;
+    return 1;
+  }
+#else
+  // Use mlock because of the predictable VmLck size.
+  // Using mlockall tends to bring in anywhere from 2-2.5GB depending on the device.
+  if (mlock(mem, allocationSize) != 0) {
+    std::cerr << "Mlock failed" << std::endl;
+    return 1;
+  }
+#endif
+
+  // Validate memory is actually resident and locked with:
+  // $> cat /proc/$(pidof iorap.stress.memory)/status | grep VmLck
+  std::cout << "Locked memory (VmLck) = " << GetProcessStatus("VmLck") << std::endl;
+
+  std::cout << "Press any key to terminate" << std::endl;
+  int any_input;
+  std::cin >> any_input;
+
+  std::cout << "Terminating..." << std::endl;
+
+  munlockall();
+  free(mem);
+
+  return 0;
+}
diff --git a/startop/iorap/tests/src/com/google/android/startop/iorap/IIorapIntegrationTest.kt b/startop/iorap/tests/src/com/google/android/startop/iorap/IIorapIntegrationTest.kt
index 460add8..18c2491 100644
--- a/startop/iorap/tests/src/com/google/android/startop/iorap/IIorapIntegrationTest.kt
+++ b/startop/iorap/tests/src/com/google/android/startop/iorap/IIorapIntegrationTest.kt
@@ -16,6 +16,7 @@
 
 import android.net.Uri
 import android.os.ServiceManager
+import androidx.test.filters.FlakyTest
 import androidx.test.filters.MediumTest
 import org.junit.Test
 import org.mockito.Mockito.argThat
@@ -26,6 +27,7 @@
 
 // @Ignore("Test is disabled until iorapd is added to init and there's selinux policies for it")
 @MediumTest
+@FlakyTest(bugId = 149098310) // Failing on cuttlefish with SecurityException.
 class IIorapIntegrationTest {
     /**
      * @throws ServiceManager.ServiceNotFoundException if iorapd service could not be found
@@ -55,6 +57,9 @@
     private fun testAnyMethod(func: (RequestId) -> Unit) {
         val taskListener = spy(DummyTaskListener())!!
 
+        // FIXME: b/149098310
+        return
+
         try {
             iorapService.setTaskListener(taskListener)
             // Note: Binder guarantees total order for oneway messages sent to the same binder
diff --git a/startop/view_compiler/dex_layout_compiler.cc b/startop/view_compiler/dex_layout_compiler.cc
index cb820f8..bddb8aa 100644
--- a/startop/view_compiler/dex_layout_compiler.cc
+++ b/startop/view_compiler/dex_layout_compiler.cc
@@ -118,7 +118,7 @@
 std::string ResolveName(const std::string& name) {
   if (name == "View") return "android.view.View";
   if (name == "ViewGroup") return "android.view.ViewGroup";
-  if (name.find(".") == std::string::npos) {
+  if (name.find('.') == std::string::npos) {
     return StringPrintf("android.widget.%s", name.c_str());
   }
   return name;
@@ -205,4 +205,4 @@
   view_stack_.pop_back();
 }
 
-}  // namespace startop
\ No newline at end of file
+}  // namespace startop
diff --git a/startop/view_compiler/util.cc b/startop/view_compiler/util.cc
index a0637e6..c34d7b0 100644
--- a/startop/view_compiler/util.cc
+++ b/startop/view_compiler/util.cc
@@ -23,13 +23,13 @@
 
 // TODO: see if we can borrow this from somewhere else, like aapt2.
 string FindLayoutNameFromFilename(const string& filename) {
-  size_t start = filename.rfind("/");
+  size_t start = filename.rfind('/');
   if (start == string::npos) {
     start = 0;
   } else {
     start++;  // advance past '/' character
   }
-  size_t end = filename.find(".", start);
+  size_t end = filename.find('.', start);
 
   return filename.substr(start, end - start);
 }
diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java
old mode 100644
new mode 100755
index f54f8d1..c5fcf67
--- a/telecomm/java/android/telecom/Call.java
+++ b/telecomm/java/android/telecom/Call.java
@@ -17,6 +17,7 @@
 package android.telecom;
 
 import android.annotation.IntDef;
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.annotation.TestApi;
@@ -458,8 +459,33 @@
         /** Call supports the deflect feature. */
         public static final int CAPABILITY_SUPPORT_DEFLECT = 0x01000000;
 
+        /**
+         * Call supports adding participants to the call via
+         * {@link #addConferenceParticipants(List)}.
+         * @hide
+         */
+        public static final int CAPABILITY_ADD_PARTICIPANT = 0x02000000;
+
+        /**
+         * When set for a call, indicates that this {@code Call} can be transferred to another
+         * number.
+         * Call supports the blind and assured call transfer feature.
+         *
+         * @hide
+         */
+        public static final int CAPABILITY_TRANSFER = 0x04000000;
+
+        /**
+         * When set for a call, indicates that this {@code Call} can be transferred to another
+         * ongoing call.
+         * Call supports the consultative call transfer feature.
+         *
+         * @hide
+         */
+        public static final int CAPABILITY_TRANSFER_CONSULTATIVE = 0x08000000;
+
         //******************************************************************************************
-        // Next CAPABILITY value: 0x02000000
+        // Next CAPABILITY value: 0x10000000
         //******************************************************************************************
 
         /**
@@ -539,7 +565,7 @@
          *
          * @see TelecomManager#EXTRA_USE_ASSISTED_DIALING
          */
-        public static final int PROPERTY_ASSISTED_DIALING_USED = 0x00000200;
+        public static final int PROPERTY_ASSISTED_DIALING = 0x00000200;
 
         /**
          * Indicates that the call is an RTT call. Use {@link #getRttCall()} to get the
@@ -573,6 +599,7 @@
         /**
          * Indicates that the call is an adhoc conference call. This property can be set for both
          * incoming and outgoing calls.
+         * @hide
          */
         public static final int PROPERTY_IS_ADHOC_CONFERENCE = 0x00002000;
 
@@ -688,6 +715,15 @@
             if (can(capabilities, CAPABILITY_SUPPORT_DEFLECT)) {
                 builder.append(" CAPABILITY_SUPPORT_DEFLECT");
             }
+            if (can(capabilities, CAPABILITY_ADD_PARTICIPANT)) {
+                builder.append(" CAPABILITY_ADD_PARTICIPANT");
+            }
+            if (can(capabilities, CAPABILITY_TRANSFER)) {
+                builder.append(" CAPABILITY_TRANSFER");
+            }
+            if (can(capabilities, CAPABILITY_TRANSFER_CONSULTATIVE)) {
+                builder.append(" CAPABILITY_TRANSFER_CONSULTATIVE");
+            }
             builder.append("]");
             return builder.toString();
         }
@@ -743,7 +779,7 @@
             if (hasProperty(properties, PROPERTY_HAS_CDMA_VOICE_PRIVACY)) {
                 builder.append(" PROPERTY_HAS_CDMA_VOICE_PRIVACY");
             }
-            if (hasProperty(properties, PROPERTY_ASSISTED_DIALING_USED)) {
+            if (hasProperty(properties, PROPERTY_ASSISTED_DIALING)) {
                 builder.append(" PROPERTY_ASSISTED_DIALING_USED");
             }
             if (hasProperty(properties, PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL)) {
@@ -1553,6 +1589,30 @@
     }
 
     /**
+     * Instructs this {@code Call} to be transferred to another number.
+     *
+     * @param targetNumber The address to which the call will be transferred.
+     * @param isConfirmationRequired if {@code true} it will initiate ASSURED transfer,
+     * if {@code false}, it will initiate BLIND transfer.
+     *
+     * @hide
+     */
+    public void transfer(@NonNull Uri targetNumber, boolean isConfirmationRequired) {
+        mInCallAdapter.transferCall(mTelecomCallId, targetNumber, isConfirmationRequired);
+    }
+
+    /**
+     * Instructs this {@code Call} to be transferred to another ongoing call.
+     * This will initiate CONSULTATIVE transfer.
+     * @param toCall The other ongoing {@code Call} to which this call will be transferred.
+     *
+     * @hide
+     */
+    public void transfer(@NonNull android.telecom.Call toCall) {
+        mInCallAdapter.transferCall(mTelecomCallId, toCall.mTelecomCallId);
+    }
+
+    /**
      * Instructs this {@code Call} to disconnect.
      */
     public void disconnect() {
@@ -1702,6 +1762,17 @@
     }
 
     /**
+     * Pulls participants to existing call by forming a conference call.
+     * See {@link Details#CAPABILITY_ADD_PARTICIPANT}.
+     *
+     * @param participants participants to be pulled to existing call.
+     * @hide
+     */
+    public void addConferenceParticipants(@NonNull List<Uri> participants) {
+        mInCallAdapter.addConferenceParticipants(mTelecomCallId, participants);
+    }
+
+    /**
      * Initiates a request to the {@link ConnectionService} to pull an external call to the local
      * device.
      * <p>
diff --git a/telecomm/java/android/telecom/Conference.java b/telecomm/java/android/telecom/Conference.java
index 6b0845f..f019a9d 100644
--- a/telecomm/java/android/telecom/Conference.java
+++ b/telecomm/java/android/telecom/Conference.java
@@ -16,8 +16,13 @@
 
 package android.telecom;
 
+import static android.Manifest.permission.MODIFY_PHONE_STATE;
+
+import android.annotation.ElapsedRealtimeLong;
+import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
 import android.annotation.TestApi;
 import android.net.Uri;
@@ -174,6 +179,7 @@
     /**
      * Returns whether this conference is requesting that the system play a ringback tone
      * on its behalf.
+     * @hide
      */
     public final boolean isRingbackRequested() {
         return mRingbackRequested;
@@ -318,12 +324,20 @@
     public void onConnectionAdded(Connection connection) {}
 
     /**
+     * Notifies the {@link Conference} of a request to add a new participants to the conference call
+     * @param participants that will be added to this conference call
+     * @hide
+     */
+    public void onAddConferenceParticipants(@NonNull List<Uri> participants) {}
+
+    /**
      * Notifies this Conference, which is in {@code STATE_RINGING}, of
      * a request to accept.
      * For managed {@link ConnectionService}s, this will be called when the user answers a call via
      * the default dialer's {@link InCallService}.
      *
      * @param videoState The video state in which to answer the connection.
+     * @hide
      */
     public void onAnswer(int videoState) {}
 
@@ -343,6 +357,7 @@
      * a request to reject.
      * For managed {@link ConnectionService}s, this will be called when the user rejects a call via
      * the default dialer's {@link InCallService}.
+     * @hide
      */
     public void onReject() {}
 
@@ -362,6 +377,7 @@
 
     /**
      * Sets state to be ringing.
+     * @hide
      */
     public final void setRinging() {
         setState(Connection.STATE_RINGING);
@@ -487,6 +503,7 @@
      * that do not play a ringback tone themselves in the conference's audio stream.
      *
      * @param ringback Whether the ringback tone is to be played.
+     * @hide
      */
     public final void setRingbackRequested(boolean ringback) {
         if (mRingbackRequested != ringback) {
@@ -620,12 +637,12 @@
      * Should be specified in wall-clock time returned by {@link System#currentTimeMillis()}.
      * <p>
      * When setting the connection time, you should always set the connection elapsed time via
-     * {@link #setConnectionStartElapsedRealTime(long)} to ensure the duration is reflected.
+     * {@link #setConnectionStartElapsedRealtimeMillis(long)} to ensure the duration is reflected.
      *
      * @param connectionTimeMillis The connection time, in milliseconds, as returned by
      *                             {@link System#currentTimeMillis()}.
      */
-    public final void setConnectionTime(long connectionTimeMillis) {
+    public final void setConnectionTime(@IntRange(from = 0) long connectionTimeMillis) {
         mConnectTimeMillis = connectionTimeMillis;
     }
 
@@ -641,8 +658,28 @@
      *
      * @param connectionStartElapsedRealTime The connection time, as measured by
      * {@link SystemClock#elapsedRealtime()}.
+     * @deprecated use {@link #setConnectionStartElapsedRealtimeMillis(long)} instead.
      */
+    @Deprecated
     public final void setConnectionStartElapsedRealTime(long connectionStartElapsedRealTime) {
+        setConnectionStartElapsedRealtimeMillis(connectionStartElapsedRealTime);
+    }
+
+    /**
+     * Sets the start time of the {@link Conference} which is the basis for the determining the
+     * duration of the {@link Conference}.
+     * <p>
+     * You should use a value returned by {@link SystemClock#elapsedRealtime()} to ensure that time
+     * zone changes do not impact the conference duration.
+     * <p>
+     * When setting this, you should also set the connection time via
+     * {@link #setConnectionTime(long)}.
+     *
+     * @param connectionStartElapsedRealTime The connection time, as measured by
+     * {@link SystemClock#elapsedRealtime()}.
+     */
+    public final void setConnectionStartElapsedRealtimeMillis(
+            @ElapsedRealtimeLong long connectionStartElapsedRealTime) {
         mConnectionStartElapsedRealTime = connectionStartElapsedRealTime;
     }
 
@@ -663,7 +700,7 @@
      *
      * @return The time at which the {@code Conference} was connected.
      */
-    public final long getConnectionTime() {
+    public final @IntRange(from = 0) long getConnectionTime() {
         return mConnectTimeMillis;
     }
 
@@ -680,11 +717,8 @@
      * has no general use other than to the Telephony framework.
      *
      * @return The elapsed time at which the {@link Conference} was connected.
-     * @hide
      */
-    @SystemApi
-    @TestApi
-    public final long getConnectionStartElapsedRealTime() {
+    public final @ElapsedRealtimeLong long getConnectionStartElapsedRealtimeMillis() {
         return mConnectionStartElapsedRealTime;
     }
 
@@ -736,6 +770,7 @@
      *
      * @param disconnectCause The disconnect cause, ({@see android.telecomm.DisconnectCause}).
      * @return A {@code Conference} which indicates failure.
+     * @hide
      */
     public @NonNull static Conference createFailedConference(
             @NonNull DisconnectCause disconnectCause, @NonNull PhoneAccountHandle phoneAccount) {
@@ -981,6 +1016,7 @@
      */
     @SystemApi
     @TestApi
+    @RequiresPermission(MODIFY_PHONE_STATE)
     public void setConferenceState(boolean isConference) {
         for (Listener l : mListeners) {
             l.onConferenceStateChanged(this, isConference);
@@ -1001,6 +1037,7 @@
      */
     @SystemApi
     @TestApi
+    @RequiresPermission(MODIFY_PHONE_STATE)
     public final void setAddress(@NonNull Uri address,
             @TelecomManager.Presentation int presentation) {
         Log.d(this, "setAddress %s", address);
@@ -1107,12 +1144,52 @@
     }
 
     /**
-     * Sends an event associated with this {@code Conference} with associated event extras to the
-     * {@link InCallService} (note: this is identical in concept to
-     * {@link Connection#sendConnectionEvent(String, Bundle)}).
-     * @see Connection#sendConnectionEvent(String, Bundle)
+     * Sends an event associated with this {@link Conference} with associated event extras to the
+     * {@link InCallService}.
+     * <p>
+     * Connection events are used to communicate point in time information from a
+     * {@link ConnectionService} to an {@link InCallService} implementation.  An example of a
+     * custom connection event includes notifying the UI when a WIFI call has been handed over to
+     * LTE, which the InCall UI might use to inform the user that billing charges may apply.  The
+     * Android Telephony framework will send the {@link Connection#EVENT_MERGE_COMPLETE}
+     * connection event when a call to {@link Call#mergeConference()} has completed successfully.
+     * <p>
+     * Events are exposed to {@link InCallService} implementations via
+     * {@link Call.Callback#onConnectionEvent(Call, String, Bundle)}.
+     * <p>
+     * No assumptions should be made as to how an In-Call UI or service will handle these events.
+     * The {@link ConnectionService} must assume that the In-Call UI could even chose to ignore
+     * some events altogether.
+     * <p>
+     * Events should be fully qualified (e.g. {@code com.example.event.MY_EVENT}) to avoid
+     * conflicts between {@link ConnectionService} implementations.  Further, custom
+     * {@link ConnectionService} implementations shall not re-purpose events in the
+     * {@code android.*} namespace, nor shall they define new event types in this namespace.  When
+     * defining a custom event type, ensure the contents of the extras {@link Bundle} is clearly
+     * defined.  Extra keys for this bundle should be named similar to the event type (e.g.
+     * {@code com.example.extra.MY_EXTRA}).
+     * <p>
+     * When defining events and the associated extras, it is important to keep their behavior
+     * consistent when the associated {@link ConnectionService} is updated.  Support for deprecated
+     * events/extras should me maintained to ensure backwards compatibility with older
+     * {@link InCallService} implementations which were built to support the older behavior.
+     * <p>
+     * Expected connection events from the Telephony stack are:
+     * <p>
+     * <ul>
+     *      <li>{@link Connection#EVENT_CALL_HOLD_FAILED} with {@code null} {@code extras} when the
+     *      {@link Conference} could not be held.</li>
+     *      <li>{@link Connection#EVENT_MERGE_START} with {@code null} {@code extras} when a new
+     *      call is being merged into the conference.</li>
+     *      <li>{@link Connection#EVENT_MERGE_COMPLETE} with {@code null} {@code extras} a new call
+     *      has completed being merged into the conference.</li>
+     *      <li>{@link Connection#EVENT_CALL_MERGE_FAILED} with {@code null} {@code extras} a new
+     *      call has failed to merge into the conference (the dialer app can determine which call
+     *      failed to merge based on the fact that the call still exists outside of the conference
+     *      at the end of the merge process).</li>
+     * </ul>
      *
-     * @param event The connection event.
+     * @param event The conference event.
      * @param extras Optional bundle containing extra information associated with the event.
      */
     public void sendConferenceEvent(@NonNull String event, @Nullable Bundle extras) {
diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java
old mode 100644
new mode 100755
index 72c66d2..3564add
--- a/telecomm/java/android/telecom/Connection.java
+++ b/telecomm/java/android/telecom/Connection.java
@@ -16,9 +16,14 @@
 
 package android.telecom;
 
+import static android.Manifest.permission.MODIFY_PHONE_STATE;
+
+import android.annotation.ElapsedRealtimeLong;
 import android.annotation.IntDef;
+import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
 import android.annotation.TestApi;
 import android.app.Notification;
@@ -376,8 +381,31 @@
     /** Call supports the deflect feature. */
     public static final int CAPABILITY_SUPPORT_DEFLECT = 0x02000000;
 
+    /**
+     * When set, indicates that this {@link Connection} supports initiation of a conference call
+     * by directly adding participants using {@link #onAddConferenceParticipants(List)}.
+     * @hide
+     */
+    public static final int CAPABILITY_ADD_PARTICIPANT = 0x04000000;
+
+    /**
+     * Indicates that this {@code Connection} can be transferred to another
+     * number.
+     * Connection supports the blind and assured call transfer feature.
+     * @hide
+     */
+    public static final int CAPABILITY_TRANSFER = 0x08000000;
+
+    /**
+     * Indicates that this {@code Connection} can be transferred to another
+     * ongoing {@code Connection}.
+     * Connection supports the consultative call transfer feature.
+     * @hide
+     */
+    public static final int CAPABILITY_TRANSFER_CONSULTATIVE = 0x10000000;
+
     //**********************************************************************************************
-    // Next CAPABILITY value: 0x04000000
+    // Next CAPABILITY value: 0x20000000
     //**********************************************************************************************
 
     /**
@@ -474,7 +502,7 @@
      *
      * @see TelecomManager#EXTRA_USE_ASSISTED_DIALING
      */
-    public static final int PROPERTY_ASSISTED_DIALING_USED = 1 << 9;
+    public static final int PROPERTY_ASSISTED_DIALING = 1 << 9;
 
     /**
      * Set by the framework to indicate that the network has identified a Connection as an emergency
@@ -501,7 +529,7 @@
      * Set by the framework to indicate that it is an adhoc conference call.
      * <p>
      * This is used for Outgoing and incoming conference calls.
-     *
+     * @hide
      */
     public static final int PROPERTY_IS_ADHOC_CONFERENCE = 1 << 12;
 
@@ -953,7 +981,16 @@
         if ((capabilities & CAPABILITY_SUPPORT_DEFLECT) == CAPABILITY_SUPPORT_DEFLECT) {
             builder.append(isLong ? " CAPABILITY_SUPPORT_DEFLECT" : " sup_def");
         }
-
+        if ((capabilities & CAPABILITY_ADD_PARTICIPANT) == CAPABILITY_ADD_PARTICIPANT) {
+            builder.append(isLong ? " CAPABILITY_ADD_PARTICIPANT" : " add_participant");
+        }
+        if ((capabilities & CAPABILITY_TRANSFER) == CAPABILITY_TRANSFER) {
+            builder.append(isLong ? " CAPABILITY_TRANSFER" : " sup_trans");
+        }
+        if ((capabilities & CAPABILITY_TRANSFER_CONSULTATIVE)
+                == CAPABILITY_TRANSFER_CONSULTATIVE) {
+            builder.append(isLong ? " CAPABILITY_TRANSFER_CONSULTATIVE" : " sup_cTrans");
+        }
         builder.append("]");
         return builder.toString();
     }
@@ -2109,19 +2146,24 @@
      */
     @SystemApi
     @TestApi
-    public final long getConnectTimeMillis() {
+    public final @IntRange(from = 0) long getConnectTimeMillis() {
         return mConnectTimeMillis;
     }
 
     /**
      * Retrieves the connection start time of the {@link Connection}, if specified.  A value of
      * {@link Conference#CONNECT_TIME_NOT_SPECIFIED} indicates that Telecom should determine the
-     * start time of the conference.
+     * start time of the connection.
      * <p>
      * Based on the value of {@link SystemClock#elapsedRealtime()}, which ensures that wall-clock
      * changes do not impact the call duration.
      * <p>
      * Used internally in Telephony when migrating conference participant data for IMS conferences.
+     * <p>
+     * The value returned is the same one set using
+     * {@link #setConnectionStartElapsedRealtimeMillis(long)}.  This value is never updated from
+     * the Telecom framework, so no permission enforcement occurs when retrieving the value with
+     * this method.
      *
      * @return The time at which the {@link Connection} was connected.
      *
@@ -2129,7 +2171,7 @@
      */
     @SystemApi
     @TestApi
-    public final long getConnectElapsedTimeMillis() {
+    public final @ElapsedRealtimeLong long getConnectionStartElapsedRealtimeMillis() {
         return mConnectElapsedTimeMillis;
     }
 
@@ -2550,6 +2592,9 @@
      * Sets the time at which a call became active on this Connection. This is set only
      * when a conference call becomes active on this connection.
      * <p>
+     * This time corresponds to the date/time of connection and is stored in the call log in
+     * {@link android.provider.CallLog.Calls#DATE}.
+     * <p>
      * Used by telephony to maintain calls associated with an IMS Conference.
      *
      * @param connectTimeMillis The connection time, in milliseconds.  Should be set using a value
@@ -2559,7 +2604,8 @@
      */
     @SystemApi
     @TestApi
-    public final void setConnectTimeMillis(long connectTimeMillis) {
+    @RequiresPermission(MODIFY_PHONE_STATE)
+    public final void setConnectTimeMillis(@IntRange(from = 0) long connectTimeMillis) {
         mConnectTimeMillis = connectTimeMillis;
     }
 
@@ -2567,15 +2613,23 @@
      * Sets the time at which a call became active on this Connection. This is set only
      * when a conference call becomes active on this connection.
      * <p>
+     * This time is used to establish the duration of a call.  It uses
+     * {@link SystemClock#elapsedRealtime()} to ensure that the call duration is not impacted by
+     * time zone changes during a call.  The difference between the current
+     * {@link SystemClock#elapsedRealtime()} and the value set at the connection start time is used
+     * to populate {@link android.provider.CallLog.Calls#DURATION} in the call log.
+     * <p>
      * Used by telephony to maintain calls associated with an IMS Conference.
+     *
      * @param connectElapsedTimeMillis The connection time, in milliseconds.  Stored in the format
      *                              {@link SystemClock#elapsedRealtime()}.
-     *
      * @hide
      */
     @SystemApi
     @TestApi
-    public final void setConnectionStartElapsedRealTime(long connectElapsedTimeMillis) {
+    @RequiresPermission(MODIFY_PHONE_STATE)
+    public final void setConnectionStartElapsedRealtimeMillis(
+            @ElapsedRealtimeLong long connectElapsedTimeMillis) {
         mConnectElapsedTimeMillis = connectElapsedTimeMillis;
     }
 
@@ -2953,6 +3007,14 @@
     public void onSeparate() {}
 
     /**
+     * Supports initiation of a conference call by directly adding participants to an ongoing call.
+     *
+     * @param participants with which conference call will be formed.
+     * @hide
+     */
+    public void onAddConferenceParticipants(@NonNull List<Uri> participants) {}
+
+    /**
      * Notifies this Connection of a request to abort.
      */
     public void onAbort() {}
@@ -3054,6 +3116,26 @@
     public void onReject(String replyMessage) {}
 
     /**
+     * Notifies this Connection, a request to transfer to a target number.
+     * @param number the number to transfer this {@link Connection} to.
+     * @param isConfirmationRequired when {@code true}, the {@link ConnectionService}
+     * should wait until the transfer has successfully completed before disconnecting
+     * the current {@link Connection}.
+     * When {@code false}, the {@link ConnectionService} should signal the network to
+     * perform the transfer, but should immediately disconnect the call regardless of
+     * the outcome of the transfer.
+     * @hide
+     */
+    public void onTransfer(@NonNull Uri number, boolean isConfirmationRequired) {}
+
+    /**
+     * Notifies this Connection, a request to transfer to another Connection.
+     * @param otherConnection the {@link Connection} to transfer this call to.
+     * @hide
+     */
+    public void onTransfer(@NonNull Connection otherConnection) {}
+
+    /**
      * Notifies this Connection of a request to silence the ringer.
      * <p>
      * The ringer may be silenced by any of the following methods:
diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java
old mode 100644
new mode 100755
index 00c2918..0dca006
--- a/telecomm/java/android/telecom/ConnectionService.java
+++ b/telecomm/java/android/telecom/ConnectionService.java
@@ -18,7 +18,6 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.annotation.RequiresPermission;
 import android.annotation.SdkConstant;
 import android.annotation.SystemApi;
 import android.app.Service;
@@ -129,6 +128,8 @@
     private static final String SESSION_ANSWER = "CS.an";
     private static final String SESSION_ANSWER_VIDEO = "CS.anV";
     private static final String SESSION_DEFLECT = "CS.def";
+    private static final String SESSION_TRANSFER = "CS.trans";
+    private static final String SESSION_CONSULTATIVE_TRANSFER = "CS.cTrans";
     private static final String SESSION_REJECT = "CS.r";
     private static final String SESSION_REJECT_MESSAGE = "CS.rWM";
     private static final String SESSION_SILENCE = "CS.s";
@@ -142,6 +143,7 @@
     private static final String SESSION_SPLIT_CONFERENCE = "CS.sFC";
     private static final String SESSION_MERGE_CONFERENCE = "CS.mC";
     private static final String SESSION_SWAP_CONFERENCE = "CS.sC";
+    private static final String SESSION_ADD_PARTICIPANT = "CS.aP";
     private static final String SESSION_POST_DIAL_CONT = "CS.oPDC";
     private static final String SESSION_PULL_EXTERNAL_CALL = "CS.pEC";
     private static final String SESSION_SEND_CALL_EVENT = "CS.sCE";
@@ -195,6 +197,9 @@
     private static final int MSG_CREATE_CONFERENCE_COMPLETE = 36;
     private static final int MSG_CREATE_CONFERENCE_FAILED = 37;
     private static final int MSG_REJECT_WITH_REASON = 38;
+    private static final int MSG_ADD_PARTICIPANT = 39;
+    private static final int MSG_EXPLICIT_CALL_TRANSFER = 40;
+    private static final int MSG_EXPLICIT_CALL_TRANSFER_CONSULTATIVE = 41;
 
     private static Connection sNullConnection;
 
@@ -480,6 +485,38 @@
         }
 
         @Override
+        public void transfer(@NonNull String callId, @NonNull Uri number,
+                boolean isConfirmationRequired, Session.Info sessionInfo) {
+            Log.startSession(sessionInfo, SESSION_TRANSFER);
+            try {
+                SomeArgs args = SomeArgs.obtain();
+                args.arg1 = callId;
+                args.arg2 = number;
+                args.argi1 = isConfirmationRequired ? 1 : 0;
+                args.arg3 = Log.createSubsession();
+                mHandler.obtainMessage(MSG_EXPLICIT_CALL_TRANSFER, args).sendToTarget();
+            } finally {
+                Log.endSession();
+            }
+        }
+
+        @Override
+        public void consultativeTransfer(@NonNull String callId, @NonNull String otherCallId,
+                Session.Info sessionInfo) {
+            Log.startSession(sessionInfo, SESSION_CONSULTATIVE_TRANSFER);
+            try {
+                SomeArgs args = SomeArgs.obtain();
+                args.arg1 = callId;
+                args.arg2 = otherCallId;
+                args.arg3 = Log.createSubsession();
+                mHandler.obtainMessage(
+                        MSG_EXPLICIT_CALL_TRANSFER_CONSULTATIVE, args).sendToTarget();
+            } finally {
+                Log.endSession();
+            }
+        }
+
+        @Override
         public void silence(String callId, Session.Info sessionInfo) {
             Log.startSession(sessionInfo, SESSION_SILENCE);
             try {
@@ -627,6 +664,21 @@
         }
 
         @Override
+        public void addConferenceParticipants(String callId, List<Uri> participants,
+                Session.Info sessionInfo) {
+            Log.startSession(sessionInfo, SESSION_ADD_PARTICIPANT);
+            try {
+                SomeArgs args = SomeArgs.obtain();
+                args.arg1 = callId;
+                args.arg2 = participants;
+                args.arg3 = Log.createSubsession();
+                mHandler.obtainMessage(MSG_ADD_PARTICIPANT, args).sendToTarget();
+            } finally {
+                Log.endSession();
+            }
+        }
+
+        @Override
         public void onPostDialContinue(String callId, boolean proceed, Session.Info sessionInfo) {
             Log.startSession(sessionInfo, SESSION_POST_DIAL_CONT);
             try {
@@ -1092,6 +1144,30 @@
                     }
                     break;
                 }
+                case MSG_EXPLICIT_CALL_TRANSFER: {
+                    SomeArgs args = (SomeArgs) msg.obj;
+                    Log.continueSession((Session) args.arg3, SESSION_HANDLER + SESSION_TRANSFER);
+                    try {
+                        final boolean isConfirmationRequired = args.argi1 == 1;
+                        transfer((String) args.arg1, (Uri) args.arg2, isConfirmationRequired);
+                    } finally {
+                        args.recycle();
+                        Log.endSession();
+                    }
+                    break;
+                }
+                case MSG_EXPLICIT_CALL_TRANSFER_CONSULTATIVE: {
+                    SomeArgs args = (SomeArgs) msg.obj;
+                    Log.continueSession(
+                            (Session) args.arg3, SESSION_HANDLER + SESSION_CONSULTATIVE_TRANSFER);
+                    try {
+                        consultativeTransfer((String) args.arg1, (String) args.arg2);
+                    } finally {
+                        args.recycle();
+                        Log.endSession();
+                    }
+                    break;
+                }
                 case MSG_DISCONNECT: {
                     SomeArgs args = (SomeArgs) msg.obj;
                     Log.continueSession((Session) args.arg2, SESSION_HANDLER + SESSION_DISCONNECT);
@@ -1224,6 +1300,19 @@
                     }
                     break;
                 }
+                case MSG_ADD_PARTICIPANT: {
+                    SomeArgs args = (SomeArgs) msg.obj;
+                    try {
+                        Log.continueSession((Session) args.arg3,
+                                SESSION_HANDLER + SESSION_ADD_PARTICIPANT);
+                        addConferenceParticipants((String) args.arg1, (List<Uri>)args.arg2);
+                    } finally {
+                        args.recycle();
+                        Log.endSession();
+                    }
+                    break;
+                }
+
                 case MSG_ON_POST_DIAL_CONTINUE: {
                     SomeArgs args = (SomeArgs) msg.obj;
                     try {
@@ -1778,7 +1867,7 @@
                         null : conference.getVideoProvider().getInterface(),
                 conference.getVideoState(),
                 conference.getConnectTimeMillis(),
-                conference.getConnectionStartElapsedRealTime(),
+                conference.getConnectionStartElapsedRealtimeMillis(),
                 conference.getStatusHints(),
                 conference.getExtras(),
                 conference.getAddress(),
@@ -1884,7 +1973,7 @@
                         connection.isRingbackRequested(),
                         connection.getAudioModeIsVoip(),
                         connection.getConnectTimeMillis(),
-                        connection.getConnectElapsedTimeMillis(),
+                        connection.getConnectionStartElapsedRealtimeMillis(),
                         connection.getStatusHints(),
                         connection.getDisconnectCause(),
                         createIdList(connection.getConferenceables()),
@@ -2013,6 +2102,18 @@
         findConnectionForAction(callId, "reject").onReject(rejectReason);
     }
 
+    private void transfer(String callId, Uri number, boolean isConfirmationRequired) {
+        Log.d(this, "transfer %s", callId);
+        findConnectionForAction(callId, "transfer").onTransfer(number, isConfirmationRequired);
+    }
+
+    private void consultativeTransfer(String callId, String otherCallId) {
+        Log.d(this, "consultativeTransfer %s", callId);
+        Connection connection1 = findConnectionForAction(callId, "consultativeTransfer");
+        Connection connection2 = findConnectionForAction(otherCallId, " consultativeTransfer");
+        connection1.onTransfer(connection2);
+    }
+
     private void silence(String callId) {
         Log.d(this, "silence %s", callId);
         findConnectionForAction(callId, "silence").onSilence();
@@ -2152,6 +2253,17 @@
         }
     }
 
+    private void addConferenceParticipants(String callId, List<Uri> participants) {
+        Log.d(this, "addConferenceParticipants(%s)", callId);
+        if (mConnectionById.containsKey(callId)) {
+            findConnectionForAction(callId, "addConferenceParticipants")
+                    .onAddConferenceParticipants(participants);
+        } else {
+            findConferenceForAction(callId, "addConferenceParticipants")
+                    .onAddConferenceParticipants(participants);
+        }
+    }
+
     /**
      * Notifies a {@link Connection} of a request to pull an external call.
      *
@@ -2374,7 +2486,7 @@
                             null : conference.getVideoProvider().getInterface(),
                     conference.getVideoState(),
                     conference.getConnectTimeMillis(),
-                    conference.getConnectionStartElapsedRealTime(),
+                    conference.getConnectionStartElapsedRealtimeMillis(),
                     conference.getStatusHints(),
                     conference.getExtras(),
                     conference.getAddress(),
@@ -2465,7 +2577,7 @@
                     connection.isRingbackRequested(),
                     connection.getAudioModeIsVoip(),
                     connection.getConnectTimeMillis(),
-                    connection.getConnectElapsedTimeMillis(),
+                    connection.getConnectionStartElapsedRealtimeMillis(),
                     connection.getStatusHints(),
                     connection.getDisconnectCause(),
                     emptyList,
diff --git a/telecomm/java/android/telecom/InCallAdapter.java b/telecomm/java/android/telecom/InCallAdapter.java
old mode 100644
new mode 100755
index 594c1eb..dd6c153
--- a/telecomm/java/android/telecom/InCallAdapter.java
+++ b/telecomm/java/android/telecom/InCallAdapter.java
@@ -16,6 +16,7 @@
 
 package android.telecom;
 
+import android.annotation.NonNull;
 import android.bluetooth.BluetoothDevice;
 import android.net.Uri;
 import android.os.Bundle;
@@ -102,6 +103,35 @@
     }
 
     /**
+     * Instructs Telecom to transfer the specified call.
+     *
+     * @param callId The identifier of the call to transfer.
+     * @param targetNumber The address to transfer to.
+     * @param isConfirmationRequired if {@code true} it will initiate ASSURED transfer,
+     * if {@code false}, it will initiate BLIND transfer.
+     */
+    public void transferCall(@NonNull String callId, @NonNull Uri targetNumber,
+            boolean isConfirmationRequired) {
+        try {
+            mAdapter.transferCall(callId, targetNumber, isConfirmationRequired);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
+     * Instructs Telecom to transfer the specified call to another ongoing call.
+     *
+     * @param callId The identifier of the call to transfer.
+     * @param otherCallId The identifier of the other call to which this will be transferred.
+     */
+    public void transferCall(@NonNull String callId, @NonNull String otherCallId) {
+        try {
+            mAdapter.consultativeTransfer(callId, otherCallId);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
      * Instructs Telecom to disconnect the specified call.
      *
      * @param callId The identifier of the call to disconnect.
@@ -283,6 +313,20 @@
     }
 
     /**
+     * Instructs Telecom to pull participants to existing call
+     *
+     * @param callId The unique ID of the call.
+     * @param participants participants to be pulled to existing call.
+     */
+    public void addConferenceParticipants(String callId, List<Uri> participants) {
+        try {
+            mAdapter.addConferenceParticipants(callId, participants);
+        } catch (RemoteException ignored) {
+        }
+    }
+
+
+    /**
      * Instructs Telecom to split the specified call from any conference call with which it may be
      * connected.
      *
diff --git a/telecomm/java/android/telecom/InCallService.java b/telecomm/java/android/telecom/InCallService.java
index ebfa3a1..982e5f3 100644
--- a/telecomm/java/android/telecom/InCallService.java
+++ b/telecomm/java/android/telecom/InCallService.java
@@ -20,6 +20,7 @@
 import android.annotation.SdkConstant;
 import android.annotation.SystemApi;
 import android.app.Service;
+import android.app.UiModeManager;
 import android.bluetooth.BluetoothDevice;
 import android.content.Intent;
 import android.hardware.camera2.CameraManager;
@@ -43,12 +44,32 @@
  * phone calls.
  * <h2>Becoming the Default Phone App</h2>
  * The default dialer/phone app is one which provides the in-call user interface while the device is
- * in a call.  A device is bundled with a system provided default dialer/phone app.  The user may
- * choose a single app to take over this role from the system app.  An app which wishes to fulfill
- * one this role uses the {@code android.app.role.RoleManager} to request that they fill the role.
+ * in a call.  It also provides the user with a means to initiate calls and see a history of calls
+ * on their device.  A device is bundled with a system provided default dialer/phone app.  The user
+ * may choose a single app to take over this role from the system app.  An app which wishes to
+ * fulfill one this role uses the {@link android.app.role.RoleManager} to request that they fill the
+ * {@link android.app.role.RoleManager#ROLE_DIALER} role.
  * <p>
- * An app filling the role of the default phone app provides a user interface while the device is in
- * a call, and the device is not in car mode.
+ * The default phone app provides a user interface while the device is in a call, and the device is
+ * not in car mode (i.e. {@link UiModeManager#getCurrentModeType()} is not
+ * {@link android.content.res.Configuration#UI_MODE_TYPE_CAR}).
+ * <p>
+ * In order to fill the {@link android.app.role.RoleManager#ROLE_DIALER} role, an app must meet a
+ * number of requirements:
+ * <ul>
+ *     <li>It must handle the {@link Intent#ACTION_DIAL} intent.  This means the app must provide
+ *     a dial pad UI for the user to initiate outgoing calls.</li>
+ *     <li>It must fully implement the {@link InCallService} API and provide both an incoming call
+ *     UI, as well as an ongoing call UI.</li>
+ * </ul>
+ * <p>
+ * Note: If the app filling the {@link android.app.role.RoleManager#ROLE_DIALER} crashes during
+ * {@link InCallService} binding, the Telecom framework will automatically fall back to using the
+ * dialer app pre-loaded on the device.  The system will display a notification to the user to let
+ * them know that the app has crashed and that their call was continued using the pre-loaded dialer
+ * app.
+ * <p>
+ * Further, the pre-loaded dialer will ALWAYS be used when the user places an emergency call.
  * <p>
  * Below is an example manifest registration for an {@code InCallService}. The meta-data
  * {@link TelecomManager#METADATA_IN_CALL_SERVICE_UI} indicates that this particular
@@ -82,6 +103,11 @@
  *           <action android:name="android.intent.action.DIAL" />
  *           <category android:name="android.intent.category.DEFAULT" />
  *      </intent-filter>
+ *      <intent-filter>
+ *           <action android:name="android.intent.action.DIAL" />
+ *           <category android:name="android.intent.category.DEFAULT" />
+ *           <data android:scheme="tel" />
+ *      </intent-filter>
  * </activity>
  * }
  * </pre>
@@ -111,6 +137,7 @@
  *         }
  *     }
  * }
+ * }
  * </pre>
  * <p id="incomingCallNotification">
  * <h3>Showing the Incoming Call Notification</h3>
diff --git a/telecomm/java/android/telecom/PhoneAccount.java b/telecomm/java/android/telecom/PhoneAccount.java
index f00432b..4e6e1a5 100644
--- a/telecomm/java/android/telecom/PhoneAccount.java
+++ b/telecomm/java/android/telecom/PhoneAccount.java
@@ -16,7 +16,10 @@
 
 package android.telecom;
 
+import static android.Manifest.permission.MODIFY_PHONE_STATE;
+
 import android.annotation.NonNull;
+import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
 import android.annotation.TestApi;
 import android.content.Intent;
@@ -614,7 +617,8 @@
          * time. By default, there is no group Id for a {@link PhoneAccount} (an empty String). Only
          * grouped {@link PhoneAccount}s with the same {@link ConnectionService} can be replaced.
          * <p>
-         * Note: This is an API specific to the Telephony stack.
+         * Note: This is an API specific to the Telephony stack; the group Id will be ignored for
+         * callers not holding the correct permission.
          *
          * @param groupId The group Id of the {@link PhoneAccount} that will replace any other
          * registered {@link PhoneAccount} in Telecom with the same Group Id.
@@ -623,6 +627,7 @@
          */
         @SystemApi
         @TestApi
+        @RequiresPermission(MODIFY_PHONE_STATE)
         public @NonNull Builder setGroupId(@NonNull String groupId) {
             if (groupId != null) {
                 mGroupId = groupId;
diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java
index bf4dee2..5d7d649 100644
--- a/telecomm/java/android/telecom/TelecomManager.java
+++ b/telecomm/java/android/telecom/TelecomManager.java
@@ -819,8 +819,8 @@
      * automatically add dialing prefixes when placing international calls.
      * <p>
      * Setting this extra on the outgoing call extras will cause the
-     * {@link Connection#PROPERTY_ASSISTED_DIALING_USED} property and
-     * {@link Call.Details#PROPERTY_ASSISTED_DIALING_USED} property to be set on the
+     * {@link Connection#PROPERTY_ASSISTED_DIALING} property and
+     * {@link Call.Details#PROPERTY_ASSISTED_DIALING} property to be set on the
      * {@link Connection}/{@link Call} in question.  When the call is logged to the call log, the
      * {@link android.provider.CallLog.Calls#FEATURES_ASSISTED_DIALING_USED} call feature is set to
      * indicate that assisted dialing was used for the call.
@@ -1412,7 +1412,7 @@
     /**
      * Used to determine the currently selected default dialer package for a specific user.
      *
-     * @param userId the user id to query the default dialer package for.
+     * @param userHandle the user id to query the default dialer package for.
      * @return package name for the default dialer package or null if no package has been
      *         selected as the default dialer.
      * @hide
@@ -1420,10 +1420,11 @@
     @SystemApi
     @TestApi
     @RequiresPermission(READ_PRIVILEGED_PHONE_STATE)
-    public @Nullable String getDefaultDialerPackage(int userId) {
+    public @Nullable String getDefaultDialerPackage(@NonNull UserHandle userHandle) {
         try {
             if (isServiceConnected()) {
-                return getTelecomService().getDefaultDialerPackageForUser(userId);
+                return getTelecomService().getDefaultDialerPackageForUser(
+                        userHandle.getIdentifier());
             }
         } catch (RemoteException e) {
             Log.e(TAG, "RemoteException attempting to get the default dialer package name.", e);
@@ -1875,8 +1876,8 @@
      *            {@link #registerPhoneAccount}.
      * @param extras A bundle that will be passed through to
      *            {@link ConnectionService#onCreateIncomingConference}.
+     * @hide
      */
-
     public void addNewIncomingConference(@NonNull PhoneAccountHandle phoneAccount,
             @NonNull Bundle extras) {
         try {
@@ -2115,6 +2116,7 @@
      *
      * @param participants List of participants to start conference with
      * @param extras Bundle of extras to use with the call
+     * @hide
      */
     @RequiresPermission(android.Manifest.permission.CALL_PHONE)
     public void startConference(@NonNull List<Uri> participants,
diff --git a/telecomm/java/com/android/internal/telecom/IConnectionService.aidl b/telecomm/java/com/android/internal/telecom/IConnectionService.aidl
index 4249dff..fb54179 100644
--- a/telecomm/java/com/android/internal/telecom/IConnectionService.aidl
+++ b/telecomm/java/com/android/internal/telecom/IConnectionService.aidl
@@ -81,6 +81,11 @@
 
     void rejectWithMessage(String callId, String message, in Session.Info sessionInfo);
 
+    void transfer(String callId, in Uri number, boolean isConfirmationRequired,
+            in Session.Info sessionInfo);
+
+    void consultativeTransfer(String callId, String otherCallId, in Session.Info sessionInfo);
+
     void disconnect(String callId, in Session.Info sessionInfo);
 
     void silence(String callId, in Session.Info sessionInfo);
@@ -104,6 +109,9 @@
 
     void swapConference(String conferenceCallId, in Session.Info sessionInfo);
 
+    void addConferenceParticipants(String CallId, in List<Uri> participants,
+    in Session.Info sessionInfo);
+
     void onPostDialContinue(String callId, boolean proceed, in Session.Info sessionInfo);
 
     void pullExternalCall(String callId, in Session.Info sessionInfo);
diff --git a/telecomm/java/com/android/internal/telecom/IInCallAdapter.aidl b/telecomm/java/com/android/internal/telecom/IInCallAdapter.aidl
old mode 100644
new mode 100755
index eb2d714..edf1cf4
--- a/telecomm/java/com/android/internal/telecom/IInCallAdapter.aidl
+++ b/telecomm/java/com/android/internal/telecom/IInCallAdapter.aidl
@@ -36,6 +36,10 @@
 
     void rejectCallWithReason(String callId, int rejectReason);
 
+    void transferCall(String callId, in Uri targetNumber, boolean isConfirmationRequired);
+
+    void consultativeTransfer(String callId, String otherCallId);
+
     void disconnectCall(String callId);
 
     void holdCall(String callId);
@@ -67,6 +71,8 @@
 
     void swapConference(String callId);
 
+    void addConferenceParticipants(String callId, in List<Uri> participants);
+
     void turnOnProximitySensor();
 
     void turnOffProximitySensor(boolean screenOnImmediately);
diff --git a/telephony/common/com/android/internal/telephony/CarrierAppUtils.java b/telephony/common/com/android/internal/telephony/CarrierAppUtils.java
index 553bcff..e97cfaf 100644
--- a/telephony/common/com/android/internal/telephony/CarrierAppUtils.java
+++ b/telephony/common/com/android/internal/telephony/CarrierAppUtils.java
@@ -123,6 +123,14 @@
         return userContext.getContentResolver();
     }
 
+    private static boolean isUpdatedSystemApp(ApplicationInfo ai) {
+        if ((ai.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
+            return true;
+        }
+
+        return false;
+    }
+
     /**
      * Disable carrier apps until they are privileged
      * Must be public b/c framework unit tests can't access package-private methods.
@@ -137,7 +145,7 @@
         PackageManager packageManager = context.getPackageManager();
         PermissionManager permissionManager =
                 (PermissionManager) context.getSystemService(Context.PERMISSION_SERVICE);
-        List<ApplicationInfo> candidates = getDefaultNotUpdatedCarrierAppCandidatesHelper(
+        List<ApplicationInfo> candidates = getDefaultCarrierAppCandidatesHelper(
                 userId, systemCarrierAppsDisabledUntilUsed, context);
         if (candidates == null || candidates.isEmpty()) {
             return;
@@ -176,7 +184,7 @@
                 if (hasPrivileges) {
                     // Only update enabled state for the app on /system. Once it has been
                     // updated we shouldn't touch it.
-                    if (enabledSetting
+                    if (!isUpdatedSystemApp(ai) && enabledSetting
                             == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
                             || enabledSetting
                             == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED
@@ -230,7 +238,7 @@
                 } else {  // No carrier privileges
                     // Only update enabled state for the app on /system. Once it has been
                     // updated we shouldn't touch it.
-                    if (enabledSetting
+                    if (!isUpdatedSystemApp(ai) && enabledSetting
                             == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
                             && (ai.flags & ApplicationInfo.FLAG_INSTALLED) != 0) {
                         Log.i(TAG, "Update state(" + packageName
@@ -361,29 +369,6 @@
         return apps;
     }
 
-    private static List<ApplicationInfo> getDefaultNotUpdatedCarrierAppCandidatesHelper(
-            int userId, ArraySet<String> systemCarrierAppsDisabledUntilUsed, Context context) {
-        if (systemCarrierAppsDisabledUntilUsed == null) {
-            return null;
-        }
-
-        int size = systemCarrierAppsDisabledUntilUsed.size();
-        if (size == 0) {
-            return null;
-        }
-
-        List<ApplicationInfo> apps = new ArrayList<>(size);
-        for (int i = 0; i < size; i++) {
-            String packageName = systemCarrierAppsDisabledUntilUsed.valueAt(i);
-            ApplicationInfo ai =
-                    getApplicationInfoIfNotUpdatedSystemApp(userId, packageName, context);
-            if (ai != null) {
-                apps.add(ai);
-            }
-        }
-        return apps;
-    }
-
     private static Map<String, List<ApplicationInfo>> getDefaultCarrierAssociatedAppsHelper(
             int userId, ArrayMap<String, List<String>> systemCarrierAssociatedAppsDisabledUntilUsed,
             Context context) {
@@ -395,11 +380,11 @@
                     systemCarrierAssociatedAppsDisabledUntilUsed.valueAt(i);
             for (int j = 0; j < associatedAppPackages.size(); j++) {
                 ApplicationInfo ai =
-                        getApplicationInfoIfNotUpdatedSystemApp(
+                        getApplicationInfoIfSystemApp(
                                 userId, associatedAppPackages.get(j), context);
                 // Only update enabled state for the app on /system. Once it has been updated we
                 // shouldn't touch it.
-                if (ai != null) {
+                if (ai != null && !isUpdatedSystemApp(ai)) {
                     List<ApplicationInfo> appList = associatedApps.get(carrierAppPackage);
                     if (appList == null) {
                         appList = new ArrayList<>();
@@ -413,26 +398,6 @@
     }
 
     @Nullable
-    private static ApplicationInfo getApplicationInfoIfNotUpdatedSystemApp(
-            int userId, String packageName, Context context) {
-        try {
-            ApplicationInfo ai = context.createContextAsUser(UserHandle.of(userId), 0)
-                    .getPackageManager()
-                    .getApplicationInfo(packageName,
-                            PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
-                                    | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
-                                    | PackageManager.MATCH_SYSTEM_ONLY
-                                    | PackageManager.MATCH_FACTORY_ONLY);
-            if (ai != null) {
-                return ai;
-            }
-        } catch (PackageManager.NameNotFoundException e) {
-            Log.w(TAG, "Could not reach PackageManager", e);
-        }
-        return null;
-    }
-
-    @Nullable
     private static ApplicationInfo getApplicationInfoIfSystemApp(
             int userId, String packageName, Context context) {
         try {
diff --git a/telephony/common/com/google/android/mms/pdu/CharacterSets.java b/telephony/common/com/google/android/mms/pdu/CharacterSets.java
index 5172b7b..a3894d6 100644
--- a/telephony/common/com/google/android/mms/pdu/CharacterSets.java
+++ b/telephony/common/com/google/android/mms/pdu/CharacterSets.java
@@ -48,6 +48,51 @@
     public static final int UTF_16      = 0x03F7;
 
     /**
+     * Extend charsets.
+     *
+     * From http://www.iana.org/assignments/character-sets/
+     */
+    public static final int BIG5_HKSCS = 0x0835; //2101
+    public static final int BOCU_1 = 0x03FC; //1020
+    public static final int CESU_8 = 0x03F8; //1016
+    public static final int CP864 = 0x0803; //2051
+    public static final int EUC_JP = 0x12; //18
+    public static final int EUC_KR = 0x26; //38
+    public static final int GB18030 = 0x72; //114
+    public static final int GBK = 0x71; //113
+    public static final int HZ_GB_2312 = 0x0825; //2085
+    public static final int GB_2312 = 0x07E9; //2025
+    public static final int ISO_2022_CN = 0x68; //104
+    public static final int ISO_2022_CN_EXT = 0x69; //105
+    public static final int ISO_2022_JP = 0x27; //39
+    public static final int ISO_2022_KR = 0x25; //37
+    public static final int ISO_8859_10 = 0x0D; //13
+    public static final int ISO_8859_13 = 0x6D; //109
+    public static final int ISO_8859_14 = 0x6E; //110
+    public static final int ISO_8859_15 = 0x6F; //111
+    public static final int ISO_8859_16 = 0x70; //112
+    public static final int KOI8_R = 0x0824; //2084
+    public static final int KOI8_U = 0x0828; //2088
+    public static final int MACINTOSH = 0x07EB; //2027
+    public static final int SCSU = 0x03F3; //1011
+    public static final int TIS_620 = 0x08D3; //2259
+    public static final int UTF_16BE = 0x03F5; //1013
+    public static final int UTF_16LE = 0x03F6; //1014
+    public static final int UTF_32 = 0x03F9; //1017
+    public static final int UTF_32BE = 0x03FA; //1018
+    public static final int UTF_32LE = 0x03FB; //1019
+    public static final int UTF_7 = 0x03F4; //1012
+    public static final int WINDOWS_1250 = 0x08CA; //2250
+    public static final int WINDOWS_1251 = 0x08CB; //2251
+    public static final int WINDOWS_1252 = 0x08CC; //2252
+    public static final int WINDOWS_1253 = 0x08CD; //2253
+    public static final int WINDOWS_1254 = 0x08CE; //2254
+    public static final int WINDOWS_1255 = 0x08CF; //2255
+    public static final int WINDOWS_1256 = 0x08D0; //2256
+    public static final int WINDOWS_1257 = 0x08D1; //2257
+    public static final int WINDOWS_1258 = 0x08D2; //2258
+
+    /**
      * If the encoding of given data is unsupported, use UTF_8 to decode it.
      */
     public static final int DEFAULT_CHARSET = UTF_8;
@@ -72,6 +117,45 @@
         BIG5,
         UCS2,
         UTF_16,
+        BIG5_HKSCS,
+        BOCU_1,
+        CESU_8,
+        CP864,
+        EUC_JP,
+        EUC_KR,
+        GB18030,
+        GBK,
+        HZ_GB_2312,
+        GB_2312,
+        ISO_2022_CN,
+        ISO_2022_CN_EXT,
+        ISO_2022_JP,
+        ISO_2022_KR,
+        ISO_8859_10,
+        ISO_8859_13,
+        ISO_8859_14,
+        ISO_8859_15,
+        ISO_8859_16,
+        KOI8_R,
+        KOI8_U,
+        MACINTOSH,
+        SCSU,
+        TIS_620,
+        UTF_16BE,
+        UTF_16LE,
+        UTF_32,
+        UTF_32BE,
+        UTF_32LE,
+        UTF_7,
+        WINDOWS_1250,
+        WINDOWS_1251,
+        WINDOWS_1252,
+        WINDOWS_1253,
+        WINDOWS_1254,
+        WINDOWS_1255,
+        WINDOWS_1256,
+        WINDOWS_1257,
+        WINDOWS_1258,
     };
 
     /**
@@ -94,6 +178,51 @@
     public static final String MIMENAME_UCS2        = "iso-10646-ucs-2";
     public static final String MIMENAME_UTF_16      = "utf-16";
 
+    /**
+     * Extend charsets.
+     *
+     * From http://www.iana.org/assignments/character-sets/
+     */
+    public static final String MIMENAME_BIG5_HKSCS = "Big5-HKSCS";
+    public static final String MIMENAME_BOCU_1 = "BOCU-1";
+    public static final String MIMENAME_CESU_8 = "CESU-8";
+    public static final String MIMENAME_CP864 = "cp864";
+    public static final String MIMENAME_EUC_JP = "EUC-JP";
+    public static final String MIMENAME_EUC_KR = "EUC-KR";
+    public static final String MIMENAME_GB18030 = "GB18030";
+    public static final String MIMENAME_GBK = "GBK";
+    public static final String MIMENAME_HZ_GB_2312 = "HZ-GB-2312";
+    public static final String MIMENAME_GB_2312 = "GB2312";
+    public static final String MIMENAME_ISO_2022_CN = "ISO-2022-CN";
+    public static final String MIMENAME_ISO_2022_CN_EXT = "ISO-2022-CN-EXT";
+    public static final String MIMENAME_ISO_2022_JP = "ISO-2022-JP";
+    public static final String MIMENAME_ISO_2022_KR = "ISO-2022-KR";
+    public static final String MIMENAME_ISO_8859_10 = "ISO-8859-10";
+    public static final String MIMENAME_ISO_8859_13 = "ISO-8859-13";
+    public static final String MIMENAME_ISO_8859_14 = "ISO-8859-14";
+    public static final String MIMENAME_ISO_8859_15 = "ISO-8859-15";
+    public static final String MIMENAME_ISO_8859_16 = "ISO-8859-16";
+    public static final String MIMENAME_KOI8_R = "KOI8-R";
+    public static final String MIMENAME_KOI8_U = "KOI8-U";
+    public static final String MIMENAME_MACINTOSH = "macintosh";
+    public static final String MIMENAME_SCSU = "SCSU";
+    public static final String MIMENAME_TIS_620 = "TIS-620";
+    public static final String MIMENAME_UTF_16BE = "UTF-16BE";
+    public static final String MIMENAME_UTF_16LE = "UTF-16LE";
+    public static final String MIMENAME_UTF_32 = "UTF-32";
+    public static final String MIMENAME_UTF_32BE = "UTF-32BE";
+    public static final String MIMENAME_UTF_32LE = "UTF-32LE";
+    public static final String MIMENAME_UTF_7 = "UTF-7";
+    public static final String MIMENAME_WINDOWS_1250 = "windows-1250";
+    public static final String MIMENAME_WINDOWS_1251 = "windows-1251";
+    public static final String MIMENAME_WINDOWS_1252 = "windows-1252";
+    public static final String MIMENAME_WINDOWS_1253 = "windows-1253";
+    public static final String MIMENAME_WINDOWS_1254 = "windows-1254";
+    public static final String MIMENAME_WINDOWS_1255 = "windows-1255";
+    public static final String MIMENAME_WINDOWS_1256 = "windows-1256";
+    public static final String MIMENAME_WINDOWS_1257 = "windows-1257";
+    public static final String MIMENAME_WINDOWS_1258 = "windows-1258";
+
     public static final String DEFAULT_CHARSET_NAME = MIMENAME_UTF_8;
 
     /**
@@ -116,6 +245,45 @@
         MIMENAME_BIG5,
         MIMENAME_UCS2,
         MIMENAME_UTF_16,
+        MIMENAME_BIG5_HKSCS,
+        MIMENAME_BOCU_1,
+        MIMENAME_CESU_8,
+        MIMENAME_CP864,
+        MIMENAME_EUC_JP,
+        MIMENAME_EUC_KR,
+        MIMENAME_GB18030,
+        MIMENAME_GBK,
+        MIMENAME_HZ_GB_2312,
+        MIMENAME_GB_2312,
+        MIMENAME_ISO_2022_CN,
+        MIMENAME_ISO_2022_CN_EXT,
+        MIMENAME_ISO_2022_JP,
+        MIMENAME_ISO_2022_KR,
+        MIMENAME_ISO_8859_10,
+        MIMENAME_ISO_8859_13,
+        MIMENAME_ISO_8859_14,
+        MIMENAME_ISO_8859_15,
+        MIMENAME_ISO_8859_16,
+        MIMENAME_KOI8_R,
+        MIMENAME_KOI8_U,
+        MIMENAME_MACINTOSH,
+        MIMENAME_SCSU,
+        MIMENAME_TIS_620,
+        MIMENAME_UTF_16BE,
+        MIMENAME_UTF_16LE,
+        MIMENAME_UTF_32,
+        MIMENAME_UTF_32BE,
+        MIMENAME_UTF_32LE,
+        MIMENAME_UTF_7,
+        MIMENAME_WINDOWS_1250,
+        MIMENAME_WINDOWS_1251,
+        MIMENAME_WINDOWS_1252,
+        MIMENAME_WINDOWS_1253,
+        MIMENAME_WINDOWS_1254,
+        MIMENAME_WINDOWS_1255,
+        MIMENAME_WINDOWS_1256,
+        MIMENAME_WINDOWS_1257,
+        MIMENAME_WINDOWS_1258,
     };
 
     private static final HashMap<Integer, String> MIBENUM_TO_NAME_MAP;
diff --git a/telephony/java/android/service/carrier/CarrierService.java b/telephony/java/android/service/carrier/CarrierService.java
index eefc1b7..d06ec11 100644
--- a/telephony/java/android/service/carrier/CarrierService.java
+++ b/telephony/java/android/service/carrier/CarrierService.java
@@ -25,6 +25,9 @@
 import android.telephony.TelephonyRegistryManager;
 import android.util.Log;
 
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
 /**
  * A service that exposes carrier-specific functionality to the system.
  * <p>
@@ -156,5 +159,10 @@
                 result.send(RESULT_ERROR, null);
             }
         }
+
+        @Override
+        protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+            CarrierService.this.dump(fd, pw, args);
+        }
     }
 }
diff --git a/telephony/java/android/telephony/AccessNetworkConstants.java b/telephony/java/android/telephony/AccessNetworkConstants.java
index 610eef8..01abb26 100644
--- a/telephony/java/android/telephony/AccessNetworkConstants.java
+++ b/telephony/java/android/telephony/AccessNetworkConstants.java
@@ -153,22 +153,55 @@
         public static final int BAND_12 = 12;
         public static final int BAND_13 = 13;
         public static final int BAND_14 = 14;
-        /** band 15, 16, 17, 18 are reserved */
+        // band 15, 16, 17, 18 are reserved
         public static final int BAND_19 = 19;
         public static final int BAND_20 = 20;
         public static final int BAND_21 = 21;
         public static final int BAND_22 = 22;
-        /** band 23, 24 are reserved */
+        // band 23, 24 are reserved
         public static final int BAND_25 = 25;
         public static final int BAND_26 = 26;
 
-        /** Frequency bands for TD-SCDMA. Defined in 3GPP TS 25.102, Table 5.2. */
+        // Frequency bands for TD-SCDMA. Defined in 3GPP TS 25.102, Table 5.2.
+
+        /**
+         * Band A
+         * 1900 - 1920 MHz: Uplink and downlink transmission
+         * 2010 - 2025 MHz: Uplink and downlink transmission
+         */
         public static final int BAND_A = 101;
+
+        /**
+         * Band B
+         * 1850 - 1910 MHz: Uplink and downlink transmission
+         * 1930 - 1990 MHz: Uplink and downlink transmission
+         */
         public static final int BAND_B = 102;
+
+        /**
+         * Band C
+         * 1910 - 1930 MHz: Uplink and downlink transmission
+         */
         public static final int BAND_C = 103;
+
+        /**
+         * Band D
+         * 2570 - 2620 MHz: Uplink and downlink transmission
+         */
         public static final int BAND_D = 104;
+
+        /**
+         * Band E
+         * 2300—2400 MHz: Uplink and downlink transmission
+         */
         public static final int BAND_E = 105;
+
+        /**
+         * Band F
+         * 1880 - 1920 MHz: Uplink and downlink transmission
+         */
         public static final int BAND_F = 106;
+
         /** @hide */
         private UtranBand() {}
     }
diff --git a/telephony/java/android/telephony/Annotation.java b/telephony/java/android/telephony/Annotation.java
index d2a5905..a27c480 100644
--- a/telephony/java/android/telephony/Annotation.java
+++ b/telephony/java/android/telephony/Annotation.java
@@ -661,4 +661,16 @@
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface Skip464XlatStatus {}
+
+    /**
+     * Override network type
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = "OVERRIDE_NETWORK_TYPE_", value = {
+            DisplayInfo.OVERRIDE_NETWORK_TYPE_NONE,
+            DisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA,
+            DisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO,
+            DisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA,
+            DisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE})
+    public @interface OverrideNetworkType {}
 }
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 945c888..5c6ca45 100755
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -17,7 +17,6 @@
 package android.telephony;
 
 import android.Manifest;
-import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.RequiresPermission;
@@ -28,7 +27,6 @@
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.ComponentName;
 import android.content.Context;
-import android.net.ipsec.ike.SaProposal;
 import android.os.PersistableBundle;
 import android.os.RemoteException;
 import android.service.carrier.CarrierService;
@@ -840,7 +838,8 @@
     /**
      * The default flag specifying whether ETWS/CMAS test setting is forcibly disabled in
      * Settings->More->Emergency broadcasts menu even though developer options is turned on.
-     * @deprecated moved to cellbroadcastreceiver resource show_test_settings
+     * @deprecated Use {@code com.android.cellbroadcastreceiver.CellBroadcastReceiver} resource
+     * {@code show_test_settings} to control whether to show test alert settings or not.
      */
     @Deprecated
     public static final String KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL =
@@ -1084,11 +1083,20 @@
     /**
      * Determines whether adhoc conference calls are supported by a carrier.  When {@code true},
      * adhoc conference calling is supported, {@code false otherwise}.
+     * @hide
      */
     public static final String KEY_SUPPORT_ADHOC_CONFERENCE_CALLS_BOOL =
             "support_adhoc_conference_calls_bool";
 
     /**
+     * Determines whether conference participants can be added to existing call.  When {@code true},
+     * adding conference participants to existing call is supported, {@code false otherwise}.
+     * @hide
+     */
+    public static final String KEY_SUPPORT_ADD_CONFERENCE_PARTICIPANTS_BOOL =
+            "support_add_conference_participants_bool";
+
+    /**
      * Determines whether conference calls are supported by a carrier.  When {@code true},
      * conference calling is supported, {@code false otherwise}.
      */
@@ -1980,6 +1988,13 @@
             "carrier_allow_deflect_ims_call_bool";
 
     /**
+     * Flag indicating whether the carrier supports explicit call transfer for an IMS call.
+     * @hide
+     */
+    public static final String KEY_CARRIER_ALLOW_TRANSFER_IMS_CALL_BOOL =
+            "carrier_allow_transfer_ims_call_bool";
+
+    /**
      * Flag indicating whether the carrier always wants to play an "on-hold" tone when a call has
      * been remotely held.
      * <p>
@@ -2009,10 +2024,15 @@
             "allow_add_call_during_video_call";
 
     /**
-     * When false, indicates that holding a video call is disabled
+     * When {@code true}, indicates that video calls can be put on hold in order to swap to another
+     * call (e.g. a new outgoing call).
+     * When {@code false}, indicates that video calls will be disconnected when swapping to another
+     * call.
+     * <p>
+     * This is {@code true} by default.
      */
-    public static final String KEY_ALLOW_HOLDING_VIDEO_CALL_BOOL =
-            "allow_holding_video_call";
+    public static final String KEY_ALLOW_HOLD_VIDEO_CALL_BOOL =
+            "allow_hold_video_call_bool";
 
     /**
      * When true, indicates that the HD audio icon in the in-call screen should not be shown for
@@ -2368,7 +2388,7 @@
      *  {@link CellSignalStrengthLte#USE_RSRQ}, {@link CellSignalStrengthLte#USE_RSSNR}.
      *
      * For example, if both RSRP and RSRQ are used, the value of key is 3 (1 << 0 | 1 << 1).
-     * If the key is invalid or not configured, a default value (RSRP | RSSNR = 1 << 0 | 1 << 2)
+     * If the key is invalid or not configured, a default value (RSRP = 1 << 0)
      * will apply.
      *
      * @hide
@@ -3382,6 +3402,25 @@
             "subscription_group_uuid_string";
 
     /**
+     * Data switch validation minimal gap time, in milliseconds.
+     *
+     * Which means, if the same subscription on the same network (based on MCC+MNC+TAC+subId)
+     * was recently validated (within this time gap), and Telephony receives a request to switch to
+     * it again, Telephony will skip the validation part and switch to it as soon as connection
+     * is setup, as if it's already validated.
+     *
+     * If the network was validated within the gap but the latest validation result is false, the
+     * validation will not be skipped.
+     *
+     * If not set or set to 0, validation will never be skipped.
+     * The max acceptable value of this config is 24 hours.
+     *
+     * @hide
+     */
+    public static final String KEY_DATA_SWITCH_VALIDATION_MIN_GAP_LONG =
+            "data_switch_validation_min_gap_LONG";
+
+    /**
     * A boolean property indicating whether this subscription should be managed as an opportunistic
     * subscription.
     *
@@ -3471,369 +3510,6 @@
     public static final String KEY_SHOW_FORWARDED_NUMBER_BOOL =
             "show_forwarded_number_bool";
 
-    /**
-     * Configs used for epdg tunnel bring up.
-     *
-     * @see <a href="https://tools.ietf.org/html/rfc7296">RFC 7296, Internet Key Exchange
-     *        Protocol Version 2 (IKEv2)</a>
-     */
-    public static final class Iwlan {
-        /** Prefix of all Epdg.KEY_* constants. */
-        public static final String KEY_PREFIX = "iwlan.";
-
-        /**
-         * Time in seconds after which the child security association session is terminated if
-         * rekey procedure is not successful. If not set or set to <= 0, the default value is
-         * 3600 seconds.
-         */
-        public static final String KEY_CHILD_SA_REKEY_HARD_TIMER_SEC_INT =
-                KEY_PREFIX + "child_sa_rekey_hard_timer_sec_int";
-
-        /**
-         * Time in seconds after which the child session rekey procedure is started. If not set or
-         * set to <= 0, default value is 3000 seconds.
-         */
-        public static final String KEY_CHILD_SA_REKEY_SOFT_TIMER_SEC_INT =
-                KEY_PREFIX + "child_sa_rekey_soft_timer_sec_int";
-
-        /** Supported DH groups for IKE negotiation.
-         * Possible values are {@link #DH_GROUP_NONE}, {@link #DH_GROUP_1024_BIT_MODP},
-         * {@link #DH_GROUP_2048_BIT_MODP}
-         */
-        public static final String KEY_DIFFIE_HELLMAN_GROUPS_INT_ARRAY =
-                KEY_PREFIX + "diffie_hellman_groups_int_array";
-
-        /**
-         * Time in seconds after which a dead peer detection (DPD) request is sent.
-         * If not set or set to <= 0, default value is 120 seconds.
-         */
-        public static final String KEY_DPD_TIMER_SEC_INT = KEY_PREFIX + "dpd_timer_sec_int";
-
-        /**
-         * Method used to authenticate epdg server.
-         * Possible values are {@link #AUTHENTICATION_METHOD_EAP_ONLY},
-         * {@link #AUTHENTICATION_METHOD_CERT}
-         */
-        public static final String KEY_EPDG_AUTHENTICATION_METHOD_INT =
-                KEY_PREFIX + "epdg_authentication_method_int";
-
-        /**
-         * A priority list of ePDG addresses to be used.
-         * Possible values are {@link #EPDG_ADDRESS_STATIC}, {@link #EPDG_ADDRESS_PLMN},
-         * {@link #EPDG_ADDRESS_PCO}
-         */
-        public static final String KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY =
-                KEY_PREFIX + "epdg_address_priority_int_array";
-
-        /** Epdg static IP address or FQDN */
-        public static final String KEY_EPDG_STATIC_ADDRESS_STRING =
-                KEY_PREFIX + "epdg_static_address_string";
-
-        /** Epdg static IP address or FQDN for roaming */
-        public static final String KEY_EPDG_STATIC_ADDRESS_ROAMING_STRING =
-                KEY_PREFIX + "epdg_static_address_roaming_string";
-
-        /**
-         * List of supported key sizes for AES Cipher Block Chaining (CBC) encryption mode of child
-         * session.
-         * Possible values are {@link #KEY_LEN_UNUSED}, {@link #KEY_LEN_AES_128},
-         * {@link #KEY_LEN_AES_192}, {@link #KEY_LEN_AES_256}
-         */
-        public static final String KEY_CHILD_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY =
-                KEY_PREFIX + "child_session_aes_cbc_key_size_int_array";
-
-        /**
-         * List of supported key sizes for AES counter (CTR) encryption mode of child session.
-         * Possible values are {@link #KEY_LEN_UNUSED}, {@link #KEY_LEN_AES_128},
-         * {@link #KEY_LEN_AES_192}, {@link #KEY_LEN_AES_256}
-         */
-        public static final String KEY_CHILD_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY =
-                KEY_PREFIX + "child_encryption_aes_ctr_key_size_int_array";
-
-        /**
-         * List of supported encryption algorithms for child session.
-         * Possible values are {@link #ENCRYPTION_ALGORITHM_3DES},
-         * {@link #ENCRYPTION_ALGORITHM_AES_CBC}, {@link #ENCRYPTION_ALGORITHM_AES_GCM_8},
-         * {@link #ENCRYPTION_ALGORITHM_AES_GCM_12}, {@link #ENCRYPTION_ALGORITHM_AES_GCM_16}
-         */
-        public static final String KEY_SUPPORTED_CHILD_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY =
-                KEY_PREFIX + "supported_child_session_encryption_algorithms_int_array";
-
-        /** Controls if IKE message fragmentation is enabled. */
-        public static final String KEY_IKE_FRAGMENTATION_ENABLED_BOOL =
-                KEY_PREFIX + "ike_fragmentation_enabled_bool";
-
-        /**
-         * Time in seconds after which the IKE session is terminated if rekey procedure is not
-         * successful. If not set or set to <= 0, default value is 3600 seconds.
-         */
-        public static final String KEY_IKE_REKEY_HARD_TIMER_SEC_INT =
-                KEY_PREFIX + "ike_rekey_hard_timer_in_sec";
-
-        /**
-         * Time in seconds after which the IKE session rekey procedure is started. If not set or
-         * set to <= 0, default value is 3000 seconds.
-         */
-        public static final String KEY_IKE_REKEY_SOFT_TIMER_SEC_INT =
-                KEY_PREFIX + "ike_rekey_soft_timer_sec_int";
-
-        /**
-         * List of supported key sizes for AES Cipher Block Chaining (CBC) encryption mode of IKE
-         * session.
-         * Possible values - {@link #KEY_LEN_UNUSED}, {@link #KEY_LEN_AES_128},
-         *         {@link #KEY_LEN_AES_192}, {@link #KEY_LEN_AES_256}
-         */
-        public static final String KEY_IKE_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY =
-                KEY_PREFIX + "ike_session_encryption_aes_cbc_key_size_int_array";
-
-        /**
-         * List of supported key sizes for AES counter (CTR) encryption mode of IKE session.
-         * Possible values - {@link #KEY_LEN_UNUSED}, {@link #KEY_LEN_AES_128},
-         *         {@link #KEY_LEN_AES_192}, {@link #KEY_LEN_AES_256}
-         */
-        public static final String KEY_IKE_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY =
-                KEY_PREFIX + "ike_session_aes_ctr_key_size_int_array";
-
-        /**
-        * List of supported encryption algorithms for IKE session.
-        * Possible values are {@link #ENCRYPTION_ALGORITHM_3DES},
-         * {@link #ENCRYPTION_ALGORITHM_AES_CBC}, {@link #ENCRYPTION_ALGORITHM_AES_GCM_8},
-         * {@link #ENCRYPTION_ALGORITHM_AES_GCM_12}, {@link #ENCRYPTION_ALGORITHM_AES_GCM_16}
-        */
-        public static final String KEY_SUPPORTED_IKE_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY =
-                KEY_PREFIX + "supported_ike_session_encryption_algorithms_int_array";
-
-        /**
-         * List of supported integrity algorithms for IKE session
-         * Possible values are {@link #INTEGRITY_ALGORITHM_NONE},
-         * {@link #INTEGRITY_ALGORITHM_HMAC_SHA1_96}, {@link #INTEGRITY_ALGORITHM_AES_XCBC_96},
-         * {@link #INTEGRITY_ALGORITHM_HMAC_SHA2_256_128},
-         * {@link #INTEGRITY_ALGORITHM_HMAC_SHA2_384_192},
-         * {@link #INTEGRITY_ALGORITHM_HMAC_SHA2_512_256}
-         */
-        public static final String KEY_SUPPORTED_INTEGRITY_ALGORITHMS_INT_ARRAY =
-                KEY_PREFIX + "supported_integrity_algorithms_int_array";
-
-        /** Maximum number of retries for tunnel establishment. */
-        public static final String KEY_MAX_RETRIES_INT = KEY_PREFIX + "max_retries_int";
-
-        /** Controls if nat traversal should be enabled. */
-        public static final String KEY_NATT_ENABLED_BOOL = KEY_PREFIX + "natt_enabled_bool";
-
-        /**
-         * Time in seconds after which a NATT keep alive message is sent. If not set or set to <= 0,
-         * default value is 20 seconds.
-         */
-        public static final String KEY_NATT_KEEP_ALIVE_TIMER_SEC_INT =
-                KEY_PREFIX + "natt_keep_alive_timer_sec_int";
-
-        /** List of comma separated MCC/MNCs used to create ePDG FQDN as per 3GPP TS 23.003 */
-        public static final String KEY_MCC_MNCS_STRING_ARRAY = KEY_PREFIX + "mcc_mncs_string_array";
-
-        /**
-         * List of supported pseudo random function algorithms for IKE session
-         * Possible values are {@link #PSEUDORANDOM_FUNCTION_HMAC_SHA1},
-         * {@link #PSEUDORANDOM_FUNCTION_AES128_XCBC}
-         */
-        public static final String KEY_SUPPORTED_PRF_ALGORITHMS_INT_ARRAY = KEY_PREFIX +
-                "supported_prf_algorithms_int_array";
-
-        /**
-         * Time in seconds after which IKE message is retransmitted. If not set or set to <= 0,
-         * default value is 2 seconds.
-         */
-        public static final String KEY_RETRANSMIT_TIMER_SEC_INT =
-                KEY_PREFIX + "retransmit_timer_sec_int";
-
-        /** @hide */
-        @IntDef({
-                AUTHENTICATION_METHOD_EAP_ONLY,
-                AUTHENTICATION_METHOD_CERT
-        })
-        public @interface AuthenticationMethodType {}
-
-        /**
-         * Certificate sent from the server is ignored. Only Extensible Authentication Protocol
-         * (EAP) is used to authenticate the server.
-         * EAP_ONLY_AUTH payload is added to IKE_AUTH request if supported.
-         * @see <a href="https://tools.ietf.org/html/rfc5998">RFC 5998</a>
-         */
-        public static final int AUTHENTICATION_METHOD_EAP_ONLY = 0;
-        /** Server is authenticated using its certificate. */
-        public static final int AUTHENTICATION_METHOD_CERT = 1;
-
-        /** @hide */
-        @IntDef({
-                EPDG_ADDRESS_STATIC,
-                EPDG_ADDRESS_PLMN,
-                EPDG_ADDRESS_PCO
-        })
-        public @interface EpdgAddressType {}
-
-        /** Use static epdg address. */
-        public static final int EPDG_ADDRESS_STATIC = 0;
-        /** Construct the epdg address using plmn. */
-        public static final int EPDG_ADDRESS_PLMN = 1;
-        /**
-         * Use the epdg address received in protocol configuration options (PCO) from the
-         * network.
-         */
-        public static final int EPDG_ADDRESS_PCO = 2;
-
-        /** @hide */
-        @IntDef({
-                KEY_LEN_UNUSED,
-                KEY_LEN_AES_128,
-                KEY_LEN_AES_192,
-                KEY_LEN_AES_256
-        })
-        public @interface EncrpytionKeyLengthType {}
-
-        public static final int KEY_LEN_UNUSED = SaProposal.KEY_LEN_UNUSED;
-        /** AES Encryption/Ciphering Algorithm key length 128 bits. */
-        public static final int KEY_LEN_AES_128 = SaProposal.KEY_LEN_AES_128;
-        /** AES Encryption/Ciphering Algorithm key length 192 bits. */
-        public static final int KEY_LEN_AES_192 = SaProposal.KEY_LEN_AES_192;
-        /** AES Encryption/Ciphering Algorithm key length 256 bits. */
-        public static final int KEY_LEN_AES_256 = SaProposal.KEY_LEN_AES_256;
-
-        /** @hide */
-        @IntDef({
-                DH_GROUP_NONE,
-                DH_GROUP_1024_BIT_MODP,
-                DH_GROUP_2048_BIT_MODP
-        })
-        public @interface DhGroup {}
-
-        /** None Diffie-Hellman Group. */
-        public static final int DH_GROUP_NONE = SaProposal.DH_GROUP_NONE;
-        /** 1024-bit MODP Diffie-Hellman Group. */
-        public static final int DH_GROUP_1024_BIT_MODP = SaProposal.DH_GROUP_1024_BIT_MODP;
-        /** 2048-bit MODP Diffie-Hellman Group. */
-        public static final int DH_GROUP_2048_BIT_MODP = SaProposal.DH_GROUP_2048_BIT_MODP;
-
-        /** @hide */
-        @IntDef({
-                ENCRYPTION_ALGORITHM_3DES,
-                ENCRYPTION_ALGORITHM_AES_CBC,
-                ENCRYPTION_ALGORITHM_AES_GCM_8,
-                ENCRYPTION_ALGORITHM_AES_GCM_12,
-                ENCRYPTION_ALGORITHM_AES_GCM_16
-        })
-        public @interface EncryptionAlgorithm {}
-
-        /** 3DES Encryption/Ciphering Algorithm. */
-        public static final int ENCRYPTION_ALGORITHM_3DES = SaProposal.ENCRYPTION_ALGORITHM_3DES;
-        /** AES-CBC Encryption/Ciphering Algorithm. */
-        public static final int ENCRYPTION_ALGORITHM_AES_CBC =
-                SaProposal.ENCRYPTION_ALGORITHM_AES_CBC;
-
-        /**
-         * AES-GCM Authentication/Integrity + Encryption/Ciphering Algorithm with 8-octet ICV
-         * (truncation).
-         */
-        public static final int ENCRYPTION_ALGORITHM_AES_GCM_8 =
-                SaProposal.ENCRYPTION_ALGORITHM_AES_GCM_8;
-        /**
-         * AES-GCM Authentication/Integrity + Encryption/Ciphering Algorithm with 12-octet ICV
-         * (truncation).
-         */
-        public static final int ENCRYPTION_ALGORITHM_AES_GCM_12 =
-                SaProposal.ENCRYPTION_ALGORITHM_AES_GCM_12;
-        /**
-         * AES-GCM Authentication/Integrity + Encryption/Ciphering Algorithm with 16-octet ICV
-         * (truncation).
-         */
-        public static final int ENCRYPTION_ALGORITHM_AES_GCM_16 =
-                SaProposal.ENCRYPTION_ALGORITHM_AES_GCM_16;
-
-        /** @hide */
-        @IntDef({
-                INTEGRITY_ALGORITHM_NONE,
-                INTEGRITY_ALGORITHM_HMAC_SHA1_96,
-                INTEGRITY_ALGORITHM_AES_XCBC_96,
-                INTEGRITY_ALGORITHM_HMAC_SHA2_256_128,
-                INTEGRITY_ALGORITHM_HMAC_SHA2_384_192,
-                INTEGRITY_ALGORITHM_HMAC_SHA2_512_256
-        })
-        public @interface IntegrityAlgorithm {}
-
-        /** None Authentication/Integrity Algorithm. */
-        public static final int INTEGRITY_ALGORITHM_NONE = SaProposal.INTEGRITY_ALGORITHM_NONE;
-        /** HMAC-SHA1 Authentication/Integrity Algorithm. */
-        public static final int INTEGRITY_ALGORITHM_HMAC_SHA1_96 =
-                SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA1_96;
-        /** AES-XCBC-96 Authentication/Integrity Algorithm. */
-        public static final int INTEGRITY_ALGORITHM_AES_XCBC_96 =
-                SaProposal.INTEGRITY_ALGORITHM_AES_XCBC_96;
-        /** HMAC-SHA256 Authentication/Integrity Algorithm with 128-bit truncation. */
-        public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_256_128 =
-                SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA2_256_128;
-        /** HMAC-SHA384 Authentication/Integrity Algorithm with 192-bit truncation. */
-        public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_384_192 =
-                SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA2_384_192;
-        /** HMAC-SHA512 Authentication/Integrity Algorithm with 256-bit truncation. */
-        public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_512_256 =
-                SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA2_512_256;
-
-        /** @hide */
-        @IntDef({
-                PSEUDORANDOM_FUNCTION_HMAC_SHA1,
-                PSEUDORANDOM_FUNCTION_AES128_XCBC
-        })
-        public @interface PseudorandomFunction {}
-
-        /** HMAC-SHA1 Pseudorandom Function. */
-        public static final int PSEUDORANDOM_FUNCTION_HMAC_SHA1 =
-                SaProposal.PSEUDORANDOM_FUNCTION_HMAC_SHA1;
-        /** AES128-XCBC Pseudorandom Function. */
-        public static final int PSEUDORANDOM_FUNCTION_AES128_XCBC =
-                SaProposal.PSEUDORANDOM_FUNCTION_AES128_XCBC;
-
-        private Iwlan() {}
-
-        private static PersistableBundle getDefaults() {
-            PersistableBundle defaults = new PersistableBundle();
-            defaults.putInt(KEY_IKE_REKEY_SOFT_TIMER_SEC_INT, 3000);
-            defaults.putInt(KEY_IKE_REKEY_HARD_TIMER_SEC_INT, 3600);
-            defaults.putInt(KEY_CHILD_SA_REKEY_SOFT_TIMER_SEC_INT, 3000);
-            defaults.putInt(KEY_CHILD_SA_REKEY_HARD_TIMER_SEC_INT, 3600);
-            defaults.putInt(KEY_RETRANSMIT_TIMER_SEC_INT, 2);
-            defaults.putInt(KEY_DPD_TIMER_SEC_INT, 120);
-            defaults.putInt(KEY_MAX_RETRIES_INT, 3);
-            defaults.putIntArray(KEY_DIFFIE_HELLMAN_GROUPS_INT_ARRAY,
-                    new int[]{DH_GROUP_1024_BIT_MODP, DH_GROUP_2048_BIT_MODP});
-            defaults.putIntArray(KEY_SUPPORTED_IKE_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY,
-                    new int[]{ENCRYPTION_ALGORITHM_3DES, ENCRYPTION_ALGORITHM_AES_CBC});
-            defaults.putIntArray(KEY_SUPPORTED_CHILD_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY,
-                    new int[]{ENCRYPTION_ALGORITHM_3DES, ENCRYPTION_ALGORITHM_AES_CBC});
-            defaults.putIntArray(KEY_SUPPORTED_INTEGRITY_ALGORITHMS_INT_ARRAY,
-                    new int[]{INTEGRITY_ALGORITHM_AES_XCBC_96, INTEGRITY_ALGORITHM_HMAC_SHA1_96,
-                            INTEGRITY_ALGORITHM_HMAC_SHA2_256_128});
-            defaults.putIntArray(KEY_SUPPORTED_PRF_ALGORITHMS_INT_ARRAY,
-                    new int[]{PSEUDORANDOM_FUNCTION_HMAC_SHA1, PSEUDORANDOM_FUNCTION_AES128_XCBC});
-            defaults.putBoolean(KEY_NATT_ENABLED_BOOL, true);
-            defaults.putInt(KEY_EPDG_AUTHENTICATION_METHOD_INT, AUTHENTICATION_METHOD_CERT);
-            defaults.putString(KEY_EPDG_STATIC_ADDRESS_STRING, "");
-            defaults.putString(KEY_EPDG_STATIC_ADDRESS_ROAMING_STRING, "");
-            defaults.putInt(KEY_NATT_KEEP_ALIVE_TIMER_SEC_INT, 20);
-            defaults.putIntArray(KEY_IKE_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY,
-                    new int[]{KEY_LEN_AES_128, KEY_LEN_AES_256});
-            defaults.putIntArray(KEY_IKE_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY,
-                    new int[]{KEY_LEN_AES_128});
-            defaults.putIntArray(KEY_CHILD_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY,
-                    new int[]{KEY_LEN_AES_128, KEY_LEN_AES_256});
-            defaults.putIntArray(KEY_CHILD_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY,
-                    new int[]{KEY_LEN_AES_128});
-            defaults.putBoolean(KEY_IKE_FRAGMENTATION_ENABLED_BOOL, false);
-            defaults.putIntArray(KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY, new int[]{EPDG_ADDRESS_PLMN,
-                    EPDG_ADDRESS_STATIC});
-            defaults.putStringArray(KEY_MCC_MNCS_STRING_ARRAY, new String[]{});
-
-            return defaults;
-        }
-    }
-
     /** The default value for every variable. */
     private final static PersistableBundle sDefaults;
 
@@ -3842,6 +3518,7 @@
         sDefaults.putString(KEY_CARRIER_CONFIG_VERSION_STRING, "");
         sDefaults.putBoolean(KEY_ALLOW_HOLD_IN_IMS_CALL_BOOL, true);
         sDefaults.putBoolean(KEY_CARRIER_ALLOW_DEFLECT_IMS_CALL_BOOL, false);
+        sDefaults.putBoolean(KEY_CARRIER_ALLOW_TRANSFER_IMS_CALL_BOOL, false);
         sDefaults.putBoolean(KEY_ALWAYS_PLAY_REMOTE_HOLD_TONE_BOOL, false);
         sDefaults.putBoolean(KEY_AUTO_RETRY_FAILED_WIFI_EMERGENCY_CALL, false);
         sDefaults.putBoolean(KEY_ADDITIONAL_CALL_SETTING_BOOL, true);
@@ -4003,6 +3680,7 @@
         sDefaults.putBoolean(KEY_IGNORE_RTT_MODE_SETTING_BOOL, false);
         sDefaults.putInt(KEY_CDMA_3WAYCALL_FLASH_DELAY_INT , 0);
         sDefaults.putBoolean(KEY_SUPPORT_ADHOC_CONFERENCE_CALLS_BOOL, false);
+        sDefaults.putBoolean(KEY_SUPPORT_ADD_CONFERENCE_PARTICIPANTS_BOOL, false);
         sDefaults.putBoolean(KEY_SUPPORT_CONFERENCE_CALL_BOOL, true);
         sDefaults.putBoolean(KEY_SUPPORT_IMS_CONFERENCE_CALL_BOOL, true);
         sDefaults.putBoolean(KEY_SUPPORT_MANAGE_IMS_CONFERENCE_CALL_BOOL, true);
@@ -4137,7 +3815,7 @@
         sDefaults.putBoolean(KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL, false);
         sDefaults.putBoolean(KEY_ALLOW_MERGE_WIFI_CALLS_WHEN_VOWIFI_OFF_BOOL, true);
         sDefaults.putBoolean(KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL, true);
-        sDefaults.putBoolean(KEY_ALLOW_HOLDING_VIDEO_CALL_BOOL, true);
+        sDefaults.putBoolean(KEY_ALLOW_HOLD_VIDEO_CALL_BOOL, true);
         sDefaults.putBoolean(KEY_WIFI_CALLS_CAN_BE_HD_AUDIO, true);
         sDefaults.putBoolean(KEY_VIDEO_CALLS_CAN_BE_HD_AUDIO, true);
         sDefaults.putBoolean(KEY_GSM_CDMA_CALLS_CAN_BE_HD_AUDIO, false);
@@ -4324,12 +4002,12 @@
         sDefaults.putBoolean(KEY_PREVENT_CLIR_ACTIVATION_AND_DEACTIVATION_CODE_BOOL, false);
         sDefaults.putLong(KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG, 2000);
         sDefaults.putInt(KEY_PARAMETERS_USED_FOR_LTE_SIGNAL_BAR_INT,
-                CellSignalStrengthLte.USE_RSRP | CellSignalStrengthLte.USE_RSSNR);
+                CellSignalStrengthLte.USE_RSRP);
         // Default wifi configurations.
         sDefaults.putAll(Wifi.getDefaults());
         sDefaults.putBoolean(ENABLE_EAP_METHOD_PREFIX_BOOL, false);
         sDefaults.putBoolean(KEY_SHOW_FORWARDED_NUMBER_BOOL, false);
-        sDefaults.putAll(Iwlan.getDefaults());
+        sDefaults.putLong(KEY_DATA_SWITCH_VALIDATION_MIN_GAP_LONG, 0);
     }
 
     /**
diff --git a/telephony/java/android/telephony/CellIdentityGsm.java b/telephony/java/android/telephony/CellIdentityGsm.java
index 9f2537c..203047f 100644
--- a/telephony/java/android/telephony/CellIdentityGsm.java
+++ b/telephony/java/android/telephony/CellIdentityGsm.java
@@ -22,11 +22,12 @@
 import android.os.Parcel;
 import android.telephony.gsm.GsmCellLocation;
 import android.text.TextUtils;
+import android.util.ArraySet;
 
-import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * CellIdentity to represent a unique GSM cell
@@ -50,7 +51,7 @@
     private final int mBsic;
 
     // a list of additional PLMN-IDs reported for this cell
-    private final List<String> mAdditionalPlmns;
+    private final ArraySet<String> mAdditionalPlmns;
 
     /**
      * @hide
@@ -62,7 +63,7 @@
         mCid = CellInfo.UNAVAILABLE;
         mArfcn = CellInfo.UNAVAILABLE;
         mBsic = CellInfo.UNAVAILABLE;
-        mAdditionalPlmns = Collections.emptyList();
+        mAdditionalPlmns = new ArraySet<>();
     }
 
     /**
@@ -81,13 +82,13 @@
      */
     public CellIdentityGsm(int lac, int cid, int arfcn, int bsic, @Nullable String mccStr,
             @Nullable String mncStr, @Nullable String alphal, @Nullable String alphas,
-            @NonNull List<String> additionalPlmns) {
+            @NonNull Collection<String> additionalPlmns) {
         super(TAG, CellInfo.TYPE_GSM, mccStr, mncStr, alphal, alphas);
         mLac = inRangeOrUnavailable(lac, 0, MAX_LAC);
         mCid = inRangeOrUnavailable(cid, 0, MAX_CID);
         mArfcn = inRangeOrUnavailable(arfcn, 0, MAX_ARFCN);
         mBsic = inRangeOrUnavailable(bsic, 0, MAX_BSIC);
-        mAdditionalPlmns = new ArrayList<>(additionalPlmns.size());
+        mAdditionalPlmns = new ArraySet<>(additionalPlmns.size());
         for (String plmn : additionalPlmns) {
             if (isValidPlmn(plmn)) {
                 mAdditionalPlmns.add(plmn);
@@ -99,7 +100,7 @@
     public CellIdentityGsm(@NonNull android.hardware.radio.V1_0.CellIdentityGsm cid) {
         this(cid.lac, cid.cid, cid.arfcn,
                 cid.bsic == (byte) 0xFF ? CellInfo.UNAVAILABLE : cid.bsic,
-                cid.mcc, cid.mnc, "", "", Collections.emptyList());
+                cid.mcc, cid.mnc, "", "", new ArraySet<>());
     }
 
     /** @hide */
@@ -107,7 +108,7 @@
         this(cid.base.lac, cid.base.cid, cid.base.arfcn,
                 cid.base.bsic == (byte) 0xFF ? CellInfo.UNAVAILABLE : cid.base.bsic, cid.base.mcc,
                 cid.base.mnc, cid.operatorNames.alphaLong, cid.operatorNames.alphaShort,
-                Collections.emptyList());
+                new ArraySet<>());
     }
 
     /** @hide */
@@ -221,8 +222,8 @@
      * @return a list of additional PLMN IDs supported by this cell.
      */
     @NonNull
-    public List<String> getAdditionalPlmns() {
-        return mAdditionalPlmns;
+    public Set<String> getAdditionalPlmns() {
+        return Collections.unmodifiableSet(mAdditionalPlmns);
     }
 
     /**
@@ -296,7 +297,7 @@
         dest.writeInt(mCid);
         dest.writeInt(mArfcn);
         dest.writeInt(mBsic);
-        dest.writeList(mAdditionalPlmns);
+        dest.writeArraySet(mAdditionalPlmns);
     }
 
     /** Construct from Parcel, type has already been processed */
@@ -306,7 +307,7 @@
         mCid = in.readInt();
         mArfcn = in.readInt();
         mBsic = in.readInt();
-        mAdditionalPlmns = in.readArrayList(null);
+        mAdditionalPlmns = (ArraySet<String>) in.readArraySet(null);
 
         if (DBG) log(toString());
     }
diff --git a/telephony/java/android/telephony/CellIdentityLte.java b/telephony/java/android/telephony/CellIdentityLte.java
index a194ae3..e4198d1 100644
--- a/telephony/java/android/telephony/CellIdentityLte.java
+++ b/telephony/java/android/telephony/CellIdentityLte.java
@@ -23,11 +23,13 @@
 import android.os.Parcel;
 import android.telephony.gsm.GsmCellLocation;
 import android.text.TextUtils;
+import android.util.ArraySet;
 
-import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * CellIdentity is to represent a unique LTE cell
@@ -54,7 +56,7 @@
     private final int mBandwidth;
 
     // a list of additional PLMN-IDs reported for this cell
-    private final List<String> mAdditionalPlmns;
+    private final ArraySet<String> mAdditionalPlmns;
 
     private ClosedSubscriberGroupInfo mCsgInfo;
 
@@ -69,7 +71,7 @@
         mTac = CellInfo.UNAVAILABLE;
         mEarfcn = CellInfo.UNAVAILABLE;
         mBandwidth = CellInfo.UNAVAILABLE;
-        mAdditionalPlmns = Collections.emptyList();
+        mAdditionalPlmns = new ArraySet<>();
         mCsgInfo = null;
     }
 
@@ -86,7 +88,7 @@
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
     public CellIdentityLte(int mcc, int mnc, int ci, int pci, int tac) {
         this(ci, pci, tac, CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE, String.valueOf(mcc),
-                String.valueOf(mnc), null, null, Collections.emptyList(), null);
+                String.valueOf(mnc), null, null, new ArraySet<>(), null);
     }
 
     /**
@@ -107,7 +109,7 @@
      */
     public CellIdentityLte(int ci, int pci, int tac, int earfcn, int bandwidth,
             @Nullable String mccStr, @Nullable String mncStr, @Nullable String alphal,
-            @Nullable String alphas, @NonNull List<String> additionalPlmns,
+            @Nullable String alphas, @NonNull Collection<String> additionalPlmns,
             @Nullable ClosedSubscriberGroupInfo csgInfo) {
         super(TAG, CellInfo.TYPE_LTE, mccStr, mncStr, alphal, alphas);
         mCi = inRangeOrUnavailable(ci, 0, MAX_CI);
@@ -115,7 +117,7 @@
         mTac = inRangeOrUnavailable(tac, 0, MAX_TAC);
         mEarfcn = inRangeOrUnavailable(earfcn, 0, MAX_EARFCN);
         mBandwidth = inRangeOrUnavailable(bandwidth, 0, MAX_BANDWIDTH);
-        mAdditionalPlmns = new ArrayList<>(additionalPlmns.size());
+        mAdditionalPlmns = new ArraySet<>(additionalPlmns.size());
         for (String plmn : additionalPlmns) {
             if (isValidPlmn(plmn)) {
                 mAdditionalPlmns.add(plmn);
@@ -127,14 +129,14 @@
     /** @hide */
     public CellIdentityLte(@NonNull android.hardware.radio.V1_0.CellIdentityLte cid) {
         this(cid.ci, cid.pci, cid.tac, cid.earfcn,
-                CellInfo.UNAVAILABLE, cid.mcc, cid.mnc, "", "", Collections.emptyList(), null);
+                CellInfo.UNAVAILABLE, cid.mcc, cid.mnc, "", "", new ArraySet<>(), null);
     }
 
     /** @hide */
     public CellIdentityLte(@NonNull android.hardware.radio.V1_2.CellIdentityLte cid) {
         this(cid.base.ci, cid.base.pci, cid.base.tac, cid.base.earfcn, cid.bandwidth,
                 cid.base.mcc, cid.base.mnc, cid.operatorNames.alphaLong,
-                cid.operatorNames.alphaShort, Collections.emptyList(), null);
+                cid.operatorNames.alphaShort, new ArraySet<>(), null);
     }
 
     /** @hide */
@@ -270,8 +272,8 @@
      * @return a list of additional PLMN IDs supported by this cell.
      */
     @NonNull
-    public List<String> getAdditionalPlmns() {
-        return mAdditionalPlmns;
+    public Set<String> getAdditionalPlmns() {
+        return Collections.unmodifiableSet(mAdditionalPlmns);
     }
 
     /**
@@ -361,7 +363,7 @@
         dest.writeInt(mTac);
         dest.writeInt(mEarfcn);
         dest.writeInt(mBandwidth);
-        dest.writeList(mAdditionalPlmns);
+        dest.writeArraySet(mAdditionalPlmns);
         dest.writeParcelable(mCsgInfo, flags);
     }
 
@@ -373,7 +375,7 @@
         mTac = in.readInt();
         mEarfcn = in.readInt();
         mBandwidth = in.readInt();
-        mAdditionalPlmns = in.readArrayList(null);
+        mAdditionalPlmns = (ArraySet<String>) in.readArraySet(null);
         mCsgInfo = in.readParcelable(null);
         if (DBG) log(toString());
     }
diff --git a/telephony/java/android/telephony/CellIdentityNr.java b/telephony/java/android/telephony/CellIdentityNr.java
index a0ef5aa..cba500a 100644
--- a/telephony/java/android/telephony/CellIdentityNr.java
+++ b/telephony/java/android/telephony/CellIdentityNr.java
@@ -22,11 +22,14 @@
 import android.os.Parcel;
 import android.telephony.AccessNetworkConstants.NgranBands.NgranBand;
 import android.telephony.gsm.GsmCellLocation;
+import android.util.ArraySet;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * Information to represent a unique NR(New Radio 5G) cell.
@@ -46,7 +49,7 @@
     private final List<Integer> mBands;
 
     // a list of additional PLMN-IDs reported for this cell
-    private final List<String> mAdditionalPlmns;
+    private final ArraySet<String> mAdditionalPlmns;
 
     /**
      *
@@ -66,14 +69,14 @@
     public CellIdentityNr(int pci, int tac, int nrArfcn, @NgranBand List<Integer> bands,
                           @Nullable String mccStr, @Nullable String mncStr, long nci,
                           @Nullable String alphal, @Nullable String alphas,
-                          @NonNull List<String> additionalPlmns) {
+                          @NonNull Collection<String> additionalPlmns) {
         super(TAG, CellInfo.TYPE_NR, mccStr, mncStr, alphal, alphas);
         mPci = inRangeOrUnavailable(pci, 0, MAX_PCI);
         mTac = inRangeOrUnavailable(tac, 0, MAX_TAC);
         mNrArfcn = inRangeOrUnavailable(nrArfcn, 0, MAX_NRARFCN);
         mBands = new ArrayList<>(bands);
         mNci = inRangeOrUnavailable(nci, 0, MAX_NCI);
-        mAdditionalPlmns = new ArrayList<>(additionalPlmns.size());
+        mAdditionalPlmns = new ArraySet<>(additionalPlmns.size());
         for (String plmn : additionalPlmns) {
             if (isValidPlmn(plmn)) {
                 mAdditionalPlmns.add(plmn);
@@ -85,7 +88,7 @@
     public CellIdentityNr(@NonNull android.hardware.radio.V1_4.CellIdentityNr cid) {
         this(cid.pci, cid.tac, cid.nrarfcn, Collections.emptyList(), cid.mcc, cid.mnc, cid.nci,
                 cid.operatorNames.alphaLong, cid.operatorNames.alphaShort,
-                Collections.emptyList());
+                new ArraySet<>());
     }
 
     /** @hide */
@@ -212,8 +215,8 @@
      * @return a list of additional PLMN IDs supported by this cell.
      */
     @NonNull
-    public List<String> getAdditionalPlmns() {
-        return Collections.unmodifiableList(mAdditionalPlmns);
+    public Set<String> getAdditionalPlmns() {
+        return Collections.unmodifiableSet(mAdditionalPlmns);
     }
 
     @Override
@@ -241,7 +244,7 @@
         dest.writeInt(mNrArfcn);
         dest.writeList(mBands);
         dest.writeLong(mNci);
-        dest.writeList(mAdditionalPlmns);
+        dest.writeArraySet(mAdditionalPlmns);
     }
 
     /** Construct from Parcel, type has already been processed */
@@ -252,7 +255,7 @@
         mNrArfcn = in.readInt();
         mBands = in.readArrayList(null);
         mNci = in.readLong();
-        mAdditionalPlmns = in.readArrayList(null);
+        mAdditionalPlmns = (ArraySet<String>) in.readArraySet(null);
     }
 
     /** Implement the Parcelable interface */
diff --git a/telephony/java/android/telephony/CellIdentityTdscdma.java b/telephony/java/android/telephony/CellIdentityTdscdma.java
index 531487a..30f98bc 100644
--- a/telephony/java/android/telephony/CellIdentityTdscdma.java
+++ b/telephony/java/android/telephony/CellIdentityTdscdma.java
@@ -20,11 +20,12 @@
 import android.annotation.Nullable;
 import android.os.Parcel;
 import android.telephony.gsm.GsmCellLocation;
+import android.util.ArraySet;
 
-import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * CellIdentity is to represent a unique TD-SCDMA cell
@@ -50,7 +51,7 @@
     private final int mUarfcn;
 
     // a list of additional PLMN-IDs reported for this cell
-    private final List<String> mAdditionalPlmns;
+    private final ArraySet<String> mAdditionalPlmns;
 
     private ClosedSubscriberGroupInfo mCsgInfo;
 
@@ -63,7 +64,7 @@
         mCid = CellInfo.UNAVAILABLE;
         mCpid = CellInfo.UNAVAILABLE;
         mUarfcn = CellInfo.UNAVAILABLE;
-        mAdditionalPlmns = Collections.emptyList();
+        mAdditionalPlmns = new ArraySet<>();
         mCsgInfo = null;
     }
 
@@ -85,13 +86,14 @@
      */
     public CellIdentityTdscdma(@Nullable String mcc, @Nullable String mnc, int lac, int cid,
             int cpid, int uarfcn, @Nullable String alphal, @Nullable String alphas,
-            @NonNull List<String> additionalPlmns, @Nullable ClosedSubscriberGroupInfo csgInfo) {
+            @NonNull Collection<String> additionalPlmns,
+            @Nullable ClosedSubscriberGroupInfo csgInfo) {
         super(TAG, CellInfo.TYPE_TDSCDMA, mcc, mnc, alphal, alphas);
         mLac = inRangeOrUnavailable(lac, 0, MAX_LAC);
         mCid = inRangeOrUnavailable(cid, 0, MAX_CID);
         mCpid = inRangeOrUnavailable(cpid, 0, MAX_CPID);
         mUarfcn = inRangeOrUnavailable(uarfcn, 0, MAX_UARFCN);
-        mAdditionalPlmns = new ArrayList<>(additionalPlmns.size());
+        mAdditionalPlmns = new ArraySet<>(additionalPlmns.size());
         for (String plmn : additionalPlmns) {
             if (isValidPlmn(plmn)) {
                 mAdditionalPlmns.add(plmn);
@@ -208,8 +210,8 @@
      * @return a list of additional PLMN IDs supported by this cell.
      */
     @NonNull
-    public List<String> getAdditionalPlmns() {
-        return mAdditionalPlmns;
+    public Set<String> getAdditionalPlmns() {
+        return Collections.unmodifiableSet(mAdditionalPlmns);
     }
 
     /**
@@ -289,7 +291,7 @@
         dest.writeInt(mCid);
         dest.writeInt(mCpid);
         dest.writeInt(mUarfcn);
-        dest.writeList(mAdditionalPlmns);
+        dest.writeArraySet(mAdditionalPlmns);
         dest.writeParcelable(mCsgInfo, flags);
     }
 
@@ -300,7 +302,7 @@
         mCid = in.readInt();
         mCpid = in.readInt();
         mUarfcn = in.readInt();
-        mAdditionalPlmns = in.readArrayList(null);
+        mAdditionalPlmns = (ArraySet<String>) in.readArraySet(null);
         mCsgInfo = in.readParcelable(null);
         if (DBG) log(toString());
     }
diff --git a/telephony/java/android/telephony/CellIdentityWcdma.java b/telephony/java/android/telephony/CellIdentityWcdma.java
index 15e491b..9d2cb74 100644
--- a/telephony/java/android/telephony/CellIdentityWcdma.java
+++ b/telephony/java/android/telephony/CellIdentityWcdma.java
@@ -22,11 +22,12 @@
 import android.os.Parcel;
 import android.telephony.gsm.GsmCellLocation;
 import android.text.TextUtils;
+import android.util.ArraySet;
 
-import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * CellIdentity to represent a unique UMTS cell
@@ -51,7 +52,7 @@
     private final int mUarfcn;
 
     // a list of additional PLMN-IDs reported for this cell
-    private final List<String> mAdditionalPlmns;
+    private final ArraySet<String> mAdditionalPlmns;
 
     @Nullable
     private final ClosedSubscriberGroupInfo mCsgInfo;
@@ -65,7 +66,7 @@
         mCid = CellInfo.UNAVAILABLE;
         mPsc = CellInfo.UNAVAILABLE;
         mUarfcn = CellInfo.UNAVAILABLE;
-        mAdditionalPlmns = Collections.emptyList();
+        mAdditionalPlmns = new ArraySet<>();
         mCsgInfo = null;
     }
 
@@ -86,13 +87,14 @@
      */
     public CellIdentityWcdma(int lac, int cid, int psc, int uarfcn, @Nullable String mccStr,
             @Nullable String mncStr, @Nullable String alphal, @Nullable String alphas,
-            @NonNull List<String> additionalPlmns, @Nullable ClosedSubscriberGroupInfo csgInfo) {
+            @NonNull Collection<String> additionalPlmns,
+            @Nullable ClosedSubscriberGroupInfo csgInfo) {
         super(TAG, CellInfo.TYPE_WCDMA, mccStr, mncStr, alphal, alphas);
         mLac = inRangeOrUnavailable(lac, 0, MAX_LAC);
         mCid = inRangeOrUnavailable(cid, 0, MAX_CID);
         mPsc = inRangeOrUnavailable(psc, 0, MAX_PSC);
         mUarfcn = inRangeOrUnavailable(uarfcn, 0, MAX_UARFCN);
-        mAdditionalPlmns = new ArrayList<>(additionalPlmns.size());
+        mAdditionalPlmns = new ArraySet<>(additionalPlmns.size());
         for (String plmn : additionalPlmns) {
             if (isValidPlmn(plmn)) {
                 mAdditionalPlmns.add(plmn);
@@ -104,14 +106,14 @@
     /** @hide */
     public CellIdentityWcdma(@NonNull android.hardware.radio.V1_0.CellIdentityWcdma cid) {
         this(cid.lac, cid.cid, cid.psc, cid.uarfcn, cid.mcc, cid.mnc, "", "",
-                Collections.emptyList(), null);
+                new ArraySet<>(), null);
     }
 
     /** @hide */
     public CellIdentityWcdma(@NonNull android.hardware.radio.V1_2.CellIdentityWcdma cid) {
         this(cid.base.lac, cid.base.cid, cid.base.psc, cid.base.uarfcn,
                 cid.base.mcc, cid.base.mnc, cid.operatorNames.alphaLong,
-                cid.operatorNames.alphaShort, Collections.emptyList(), null);
+                cid.operatorNames.alphaShort, new ArraySet<>(), null);
     }
 
     /** @hide */
@@ -232,8 +234,8 @@
      * @return a list of additional PLMN IDs supported by this cell.
      */
     @NonNull
-    public List<String> getAdditionalPlmns() {
-        return mAdditionalPlmns;
+    public Set<String> getAdditionalPlmns() {
+        return Collections.unmodifiableSet(mAdditionalPlmns);
     }
 
     /**
@@ -305,7 +307,7 @@
         dest.writeInt(mCid);
         dest.writeInt(mPsc);
         dest.writeInt(mUarfcn);
-        dest.writeList(mAdditionalPlmns);
+        dest.writeArraySet(mAdditionalPlmns);
         dest.writeParcelable(mCsgInfo, flags);
     }
 
@@ -316,7 +318,7 @@
         mCid = in.readInt();
         mPsc = in.readInt();
         mUarfcn = in.readInt();
-        mAdditionalPlmns = in.readArrayList(null);
+        mAdditionalPlmns = (ArraySet<String>) in.readArraySet(null);
         mCsgInfo = in.readParcelable(null);
         if (DBG) log(toString());
     }
diff --git a/telephony/java/android/telephony/CellInfo.java b/telephony/java/android/telephony/CellInfo.java
index ec86c14..bfa209b 100644
--- a/telephony/java/android/telephony/CellInfo.java
+++ b/telephony/java/android/telephony/CellInfo.java
@@ -16,9 +16,9 @@
 
 package android.telephony;
 
+import android.annotation.ElapsedRealtimeLong;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
-import android.annotation.SuppressLint;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.hardware.radio.V1_4.CellInfo.Info;
 import android.os.Parcel;
@@ -178,18 +178,18 @@
     /**
      * Approximate time this cell information was received from the modem.
      *
-     * @return a time stamp in nanos since boot.
+     * @return a time stamp in millis since boot.
      */
-    @SuppressLint("MethodNameUnits")
-    public long getTimestampNanos() {
-        return mTimeStamp;
+    @ElapsedRealtimeLong
+    public long getTimestampMillis() {
+        return mTimeStamp / 1000000;
     }
 
     /**
      * Approximate time this cell information was received from the modem.
      *
      * @return a time stamp in nanos since boot.
-     * @deprecated Use {@link #getTimestampNanos} instead.
+     * @deprecated Use {@link #getTimestampMillis} instead.
      */
     @Deprecated
     public long getTimeStamp() {
diff --git a/telephony/java/android/telephony/CellSignalStrengthLte.java b/telephony/java/android/telephony/CellSignalStrengthLte.java
index 6d6eaa4..2529387 100644
--- a/telephony/java/android/telephony/CellSignalStrengthLte.java
+++ b/telephony/java/android/telephony/CellSignalStrengthLte.java
@@ -181,7 +181,7 @@
         mCqi = CellInfo.UNAVAILABLE;
         mTimingAdvance = CellInfo.UNAVAILABLE;
         mLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
-        mParametersUseForLevel = USE_RSRP | USE_RSSNR;
+        mParametersUseForLevel = USE_RSRP;
     }
 
     /** {@inheritDoc} */
@@ -236,7 +236,7 @@
         int[] rsrpThresholds, rsrqThresholds, rssnrThresholds;
         boolean rsrpOnly;
         if (cc == null) {
-            mParametersUseForLevel = USE_RSRP | USE_RSSNR;
+            mParametersUseForLevel = USE_RSRP;
             rsrpThresholds = sRsrpThresholds;
             rsrqThresholds = sRsrqThresholds;
             rssnrThresholds = sRssnrThresholds;
@@ -244,19 +244,30 @@
         } else {
             mParametersUseForLevel = cc.getInt(
                     CarrierConfigManager.KEY_PARAMETERS_USED_FOR_LTE_SIGNAL_BAR_INT);
-            Rlog.i(LOG_TAG, "Using signal strength level: " + mParametersUseForLevel);
+            if (DBG) {
+                Rlog.i(LOG_TAG, "Using signal strength level: " + mParametersUseForLevel);
+            }
             rsrpThresholds = cc.getIntArray(
                     CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY);
             if (rsrpThresholds == null) rsrpThresholds = sRsrpThresholds;
-            Rlog.i(LOG_TAG, "Applying LTE RSRP Thresholds: " + Arrays.toString(rsrpThresholds));
+            if (DBG) {
+                Rlog.i(LOG_TAG, "Applying LTE RSRP Thresholds: "
+                        + Arrays.toString(rsrpThresholds));
+            }
             rsrqThresholds = cc.getIntArray(
                     CarrierConfigManager.KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY);
             if (rsrqThresholds == null) rsrqThresholds = sRsrqThresholds;
-            Rlog.i(LOG_TAG, "Applying LTE RSRQ Thresholds: " + Arrays.toString(rsrqThresholds));
+            if (DBG) {
+                Rlog.i(LOG_TAG, "Applying LTE RSRQ Thresholds: "
+                        + Arrays.toString(rsrqThresholds));
+            }
             rssnrThresholds = cc.getIntArray(
                     CarrierConfigManager.KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY);
             if (rssnrThresholds == null) rssnrThresholds = sRssnrThresholds;
-            Rlog.i(LOG_TAG, "Applying LTE RSSNR Thresholds: " + Arrays.toString(rssnrThresholds));
+            if (DBG) {
+                Rlog.i(LOG_TAG, "Applying LTE RSSNR Thresholds: "
+                        + Arrays.toString(rssnrThresholds));
+            }
             rsrpOnly = cc.getBoolean(
                     CarrierConfigManager.KEY_USE_ONLY_RSRP_FOR_LTE_SIGNAL_BAR_BOOL, false);
         }
@@ -283,15 +294,21 @@
 
         if (isLevelForParameter(USE_RSRP)) {
             rsrpLevel = updateLevelWithMeasure(rsrp, rsrpThresholds);
-            Rlog.i(LOG_TAG, "Updated 4G LTE RSRP Level: " + rsrpLevel);
+            if (DBG) {
+                Rlog.i(LOG_TAG, "Updated 4G LTE RSRP Level: " + rsrpLevel);
+            }
         }
         if (isLevelForParameter(USE_RSRQ)) {
             rsrqLevel = updateLevelWithMeasure(mRsrq, rsrqThresholds);
-            Rlog.i(LOG_TAG, "Updated 4G LTE RSRQ Level: " + rsrqLevel);
+            if (DBG) {
+                Rlog.i(LOG_TAG, "Updated 4G LTE RSRQ Level: " + rsrqLevel);
+            }
         }
         if (isLevelForParameter(USE_RSSNR)) {
             rssnrLevel = updateLevelWithMeasure(mRssnr, rssnrThresholds);
-            Rlog.i(LOG_TAG, "Updated 4G LTE RSSNR Level: " + rssnrLevel);
+            if (DBG) {
+                Rlog.i(LOG_TAG, "Updated 4G LTE RSSNR Level: " + rssnrLevel);
+            }
         }
         // Apply the smaller value among three levels of three measures.
         mLevel = Math.min(Math.min(rsrpLevel, rsrqLevel), rssnrLevel);
diff --git a/telephony/java/android/telephony/CellSignalStrengthNr.java b/telephony/java/android/telephony/CellSignalStrengthNr.java
index e3d03a3..8562df1 100644
--- a/telephony/java/android/telephony/CellSignalStrengthNr.java
+++ b/telephony/java/android/telephony/CellSignalStrengthNr.java
@@ -40,6 +40,8 @@
      */
     public static final int UNKNOWN_ASU_LEVEL = 99;
 
+    private static final boolean VDBG = false;
+
     private static final String TAG = "CellSignalStrengthNr";
 
     // Lifted from Default carrier configs and max range of SSRSRP
@@ -301,31 +303,45 @@
         } else {
             mParametersUseForLevel = cc.getInt(
                     CarrierConfigManager.KEY_PARAMETERS_USE_FOR_5G_NR_SIGNAL_BAR_INT, USE_SSRSRP);
-            Rlog.i(TAG, "Using SSRSRP for Level.");
             mSsRsrpThresholds = cc.getIntArray(
                     CarrierConfigManager.KEY_5G_NR_SSRSRP_THRESHOLDS_INT_ARRAY);
-            Rlog.i(TAG, "Applying 5G NR SSRSRP Thresholds: " + Arrays.toString(mSsRsrpThresholds));
+            if (VDBG) {
+                Rlog.i(TAG, "Applying 5G NR SSRSRP Thresholds: "
+                        + Arrays.toString(mSsRsrpThresholds));
+            }
             mSsRsrqThresholds = cc.getIntArray(
                     CarrierConfigManager.KEY_5G_NR_SSRSRQ_THRESHOLDS_INT_ARRAY);
-            Rlog.i(TAG, "Applying 5G NR SSRSRQ Thresholds: " + Arrays.toString(mSsRsrqThresholds));
+            if (VDBG) {
+                Rlog.i(TAG, "Applying 5G NR SSRSRQ Thresholds: "
+                        + Arrays.toString(mSsRsrqThresholds));
+            }
             mSsSinrThresholds = cc.getIntArray(
                     CarrierConfigManager.KEY_5G_NR_SSSINR_THRESHOLDS_INT_ARRAY);
-            Rlog.i(TAG, "Applying 5G NR SSSINR Thresholds: " + Arrays.toString(mSsSinrThresholds));
+            if (VDBG) {
+                Rlog.i(TAG, "Applying 5G NR SSSINR Thresholds: "
+                        + Arrays.toString(mSsSinrThresholds));
+            }
         }
         int ssRsrpLevel = SignalStrength.INVALID;
         int ssRsrqLevel = SignalStrength.INVALID;
         int ssSinrLevel = SignalStrength.INVALID;
         if (isLevelForParameter(USE_SSRSRP)) {
             ssRsrpLevel = updateLevelWithMeasure(mSsRsrp, mSsRsrpThresholds);
-            Rlog.i(TAG, "Updated 5G NR SSRSRP Level: " + ssRsrpLevel);
+            if (VDBG) {
+                Rlog.i(TAG, "Updated 5G NR SSRSRP Level: " + ssRsrpLevel);
+            }
         }
         if (isLevelForParameter(USE_SSRSRQ)) {
             ssRsrqLevel = updateLevelWithMeasure(mSsRsrq, mSsRsrqThresholds);
-            Rlog.i(TAG, "Updated 5G NR SSRSRQ Level: " + ssRsrqLevel);
+            if (VDBG) {
+                Rlog.i(TAG, "Updated 5G NR SSRSRQ Level: " + ssRsrqLevel);
+            }
         }
         if (isLevelForParameter(USE_SSSINR)) {
             ssSinrLevel = updateLevelWithMeasure(mSsSinr, mSsSinrThresholds);
-            Rlog.i(TAG, "Updated 5G NR SSSINR Level: " + ssSinrLevel);
+            if (VDBG) {
+                Rlog.i(TAG, "Updated 5G NR SSSINR Level: " + ssSinrLevel);
+            }
         }
         // Apply the smaller value among three levels of three measures.
         mLevel = Math.min(Math.min(ssRsrpLevel, ssRsrqLevel), ssSinrLevel);
diff --git a/telephony/java/android/telephony/DisplayInfo.aidl b/telephony/java/android/telephony/DisplayInfo.aidl
new file mode 100644
index 0000000..861b0fe
--- /dev/null
+++ b/telephony/java/android/telephony/DisplayInfo.aidl
@@ -0,0 +1,18 @@
+/*
+ * 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.telephony;
+
+parcelable DisplayInfo;
diff --git a/telephony/java/android/telephony/DisplayInfo.java b/telephony/java/android/telephony/DisplayInfo.java
new file mode 100644
index 0000000..d54bcf9
--- /dev/null
+++ b/telephony/java/android/telephony/DisplayInfo.java
@@ -0,0 +1,172 @@
+/*
+ * 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.telephony;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.telephony.Annotation.NetworkType;
+import android.telephony.Annotation.OverrideNetworkType;
+
+import java.util.Objects;
+
+/**
+ * DisplayInfo contains telephony-related information used for display purposes only. This
+ * information is provided in accordance with carrier policy and branding preferences; it is not
+ * necessarily a precise or accurate representation of the current state and should be treated
+ * accordingly.
+ */
+public final class DisplayInfo implements Parcelable {
+    /**
+     * No override. {@link #getNetworkType()} should be used for display network
+     * type.
+     */
+    public static final int OVERRIDE_NETWORK_TYPE_NONE = 0;
+
+    /**
+     * Override network type when the device is connected to
+     * {@link TelephonyManager#NETWORK_TYPE_LTE} cellular network and is using carrier aggregation.
+     */
+    public static final int OVERRIDE_NETWORK_TYPE_LTE_CA = 1;
+
+    /**
+     * Override network type when the device is connected to advanced pro
+     * {@link TelephonyManager#NETWORK_TYPE_LTE} cellular network.
+     */
+    public static final int OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO = 2;
+
+    /**
+     * Override network type when the device is connected to
+     * {@link TelephonyManager#NETWORK_TYPE_LTE} network and has E-UTRA-NR Dual Connectivity(EN-DC)
+     * capability or is currently connected to the secondary
+     * {@link TelephonyManager#NETWORK_TYPE_NR} cellular network.
+     */
+    public static final int OVERRIDE_NETWORK_TYPE_NR_NSA = 3;
+
+    /**
+     * Override network type when the device is connected to
+     * {@link TelephonyManager#NETWORK_TYPE_LTE} network and has E-UTRA-NR Dual Connectivity(EN-DC)
+     * capability or is currently connected to the secondary
+     * {@link TelephonyManager#NETWORK_TYPE_NR} cellular network on millimeter wave bands.
+     *
+     * @see AccessNetworkConstants.NgranBands#FREQUENCY_RANGE_GROUP_2
+     */
+    public static final int OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE = 4;
+
+    @NetworkType
+    private final  int mNetworkType;
+
+    @OverrideNetworkType
+    private final  int mOverrideNetworkType;
+
+    /**
+     * Constructor
+     *
+     * @param networkType Current packet-switching cellular network type
+     * @param overrideNetworkType The override network type
+     *
+     * @hide
+     */
+    public DisplayInfo(@NetworkType int networkType, @OverrideNetworkType int overrideNetworkType) {
+        mNetworkType = networkType;
+        mOverrideNetworkType = overrideNetworkType;
+    }
+
+    /** @hide */
+    public DisplayInfo(Parcel p) {
+        mNetworkType = p.readInt();
+        mOverrideNetworkType = p.readInt();
+    }
+
+    /**
+     * Get current packet-switching cellular network type. This is the actual network type the
+     * device is camped on.
+     *
+     * @return The network type.
+     */
+    @NetworkType
+    public int getNetworkType() {
+        return mNetworkType;
+    }
+
+    /**
+     * Get the override network type. Note the override network type is for market branding
+     * or visualization purposes only. It cannot be treated as the actual network type device is
+     * camped on.
+     *
+     * @return The override network type.
+     */
+    @OverrideNetworkType
+    public int getOverrideNetworkType() {
+        return mOverrideNetworkType;
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeInt(mNetworkType);
+        dest.writeInt(mOverrideNetworkType);
+    }
+
+    public static final @NonNull Parcelable.Creator<DisplayInfo> CREATOR =
+            new Parcelable.Creator<DisplayInfo>() {
+                @Override
+                public DisplayInfo createFromParcel(Parcel source) {
+                    return new DisplayInfo(source);
+                }
+
+                @Override
+                public DisplayInfo[] newArray(int size) {
+                    return new DisplayInfo[size];
+                }
+            };
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        DisplayInfo that = (DisplayInfo) o;
+        return mNetworkType == that.mNetworkType
+                && mOverrideNetworkType == that.mOverrideNetworkType;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mNetworkType, mOverrideNetworkType);
+    }
+
+    private static String overrideNetworkTypeToString(@OverrideNetworkType int type) {
+        switch (type) {
+            case OVERRIDE_NETWORK_TYPE_NONE: return "NONE";
+            case OVERRIDE_NETWORK_TYPE_LTE_CA: return "LTE_CA";
+            case OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO: return "LTE_ADV_PRO";
+            case OVERRIDE_NETWORK_TYPE_NR_NSA: return "NR_NSA";
+            case OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE: return "NR_NSA_MMWAVE";
+            default: return "UNKNOWN";
+        }
+    }
+
+    @Override
+    public String toString() {
+        return "DisplayInfo {network=" + TelephonyManager.getNetworkTypeName(mNetworkType)
+                + ", override=" + overrideNetworkTypeToString(mOverrideNetworkType);
+    }
+}
diff --git a/telephony/java/android/telephony/ModemInfo.java b/telephony/java/android/telephony/ModemInfo.java
new file mode 100644
index 0000000..c0833af
--- /dev/null
+++ b/telephony/java/android/telephony/ModemInfo.java
@@ -0,0 +1,109 @@
+/*
+ * 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.telephony;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+
+/**
+ * Information of a single logical modem indicating
+ * its id, supported rats and whether it supports voice or data, etc.
+ * @hide
+ */
+public class ModemInfo implements Parcelable {
+    public final int modemId;
+    public final int rat; /* bitset */
+    public final boolean isVoiceSupported;
+    public final boolean isDataSupported;
+
+    // TODO b/121394331: Clean up this class after V1_1.PhoneCapability cleanup.
+    public ModemInfo(int modemId) {
+        this(modemId, 0, true, true);
+    }
+
+    public ModemInfo(int modemId, int rat, boolean isVoiceSupported, boolean isDataSupported) {
+        this.modemId = modemId;
+        this.rat = rat;
+        this.isVoiceSupported = isVoiceSupported;
+        this.isDataSupported = isDataSupported;
+    }
+
+    public ModemInfo(Parcel in) {
+        modemId = in.readInt();
+        rat = in.readInt();
+        isVoiceSupported = in.readBoolean();
+        isDataSupported = in.readBoolean();
+    }
+
+    @Override
+    public String toString() {
+        return "modemId=" + modemId + " rat=" + rat + " isVoiceSupported:" + isVoiceSupported
+                + " isDataSupported:" + isDataSupported;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(modemId, rat, isVoiceSupported, isDataSupported);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (o == null || !(o instanceof ModemInfo) || hashCode() != o.hashCode()) {
+            return false;
+        }
+
+        if (this == o) {
+            return true;
+        }
+
+        ModemInfo s = (ModemInfo) o;
+
+        return (modemId == s.modemId
+                && rat == s.rat
+                && isVoiceSupported == s.isVoiceSupported
+                && isDataSupported == s.isDataSupported);
+    }
+
+    /**
+     * {@link Parcelable#describeContents}
+     */
+    public @ContentsFlags int describeContents() {
+        return 0;
+    }
+
+    /**
+     * {@link Parcelable#writeToParcel}
+     */
+    public void writeToParcel(Parcel dest, @WriteFlags int flags) {
+        dest.writeInt(modemId);
+        dest.writeInt(rat);
+        dest.writeBoolean(isVoiceSupported);
+        dest.writeBoolean(isDataSupported);
+    }
+
+    public static final @android.annotation.NonNull Parcelable.Creator<ModemInfo> CREATOR = new Parcelable.Creator() {
+        public ModemInfo createFromParcel(Parcel in) {
+            return new ModemInfo(in);
+        }
+
+        public ModemInfo[] newArray(int size) {
+            return new ModemInfo[size];
+        }
+    };
+}
diff --git a/telephony/java/android/telephony/NetworkRegistrationInfo.java b/telephony/java/android/telephony/NetworkRegistrationInfo.java
index f9de47d..c74e17f 100644
--- a/telephony/java/android/telephony/NetworkRegistrationInfo.java
+++ b/telephony/java/android/telephony/NetworkRegistrationInfo.java
@@ -258,7 +258,7 @@
         mCellIdentity = cellIdentity;
         mEmergencyOnly = emergencyOnly;
         mNrState = NR_STATE_NONE;
-        mRplmn = (rplmn == null) ? "" : rplmn;
+        mRplmn = rplmn;
     }
 
     /**
@@ -408,13 +408,13 @@
      * <p>If the device is registered, this will return the registered PLMN-ID. If registration
      * has failed, then this will return the PLMN ID of the last attempted registration. If the
      * device is not registered, or if is registered to a non-3GPP radio technology, then this
-     * will return an empty string.
+     * will return null.
      *
      * <p>See 3GPP TS 23.122 for further information about the Registered PLMN.
      *
-     * @return the registered PLMN-ID or an empty string.
+     * @return the registered PLMN-ID or null.
      */
-    @NonNull public String getRegisteredPlmn() {
+    @Nullable public String getRegisteredPlmn() {
         return mRplmn;
     }
 
@@ -892,7 +892,7 @@
          * @return The same instance of the builder.
          */
         public @NonNull Builder setRegisteredPlmn(@Nullable String rplmn) {
-            mRplmn = (rplmn == null) ? "" : rplmn;
+            mRplmn = rplmn;
             return this;
         }
 
diff --git a/telephony/java/android/telephony/PhoneCapability.java b/telephony/java/android/telephony/PhoneCapability.java
index a537928..6571858 100644
--- a/telephony/java/android/telephony/PhoneCapability.java
+++ b/telephony/java/android/telephony/PhoneCapability.java
@@ -16,20 +16,12 @@
 
 package android.telephony;
 
-import android.annotation.LongDef;
 import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.telephony.AccessNetworkConstants.AccessNetworkType;
-import android.telephony.AccessNetworkConstants.RadioAccessNetworkType;
-import android.telephony.TelephonyManager.NetworkTypeBitMask;
 
-import com.android.internal.telephony.util.TelephonyUtils;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 
@@ -38,365 +30,69 @@
  * are shared between those modems defined by list of modem IDs.
  */
 public final class PhoneCapability implements Parcelable {
-    /** Modem feature indicating 3GPP2 capability. */
-    public static final long MODEM_FEATURE_3GPP2_REG = 1 << 0;
-    /** Modem feature indicating 3GPP capability. */
-    public static final long MODEM_FEATURE_3GPP_REG = 1 << 1;
-    /** Modem feature indicating CDMA 2000 with EHRPD capability. */
-    public static final long MODEM_FEATURE_CDMA2000_EHRPD_REG = 1 << 2;
-    /** Modem feature indicating GSM capability. */
-    public static final long MODEM_FEATURE_GERAN_REG = 1 << 3;
-    /** Modem feature indicating UMTS capability. */
-    public static final long MODEM_FEATURE_UTRAN_REG = 1 << 4;
-    /** Modem feature indicating LTE capability. */
-    public static final long MODEM_FEATURE_EUTRAN_REG = 1 << 5;
-    /** Modem feature indicating 5G capability.*/
-    public static final long MODEM_FEATURE_NGRAN_REG = 1 << 6;
-    /** Modem feature indicating EN-DC capability. */
-    public static final long MODEM_FEATURE_EUTRA_NR_DUAL_CONNECTIVITY_REG = 1 << 7;
-    /** Modem feature indicating VoLTE capability (IMS registered). */
-    public static final long MODEM_FEATURE_PS_VOICE_REG = 1 << 8;
-    /** Modem feature indicating CS voice call capability. */
-    public static final long MODEM_FEATURE_CS_VOICE_SESSION = 1 << 9;
-    /** Modem feature indicating Internet connection capability. */
-    public static final long MODEM_FEATURE_INTERACTIVE_DATA_SESSION = 1 << 10;
-    /**
-     * Modem feature indicating dedicated bearer capability.
-     * For services that require a high level QoS (eg. VoLTE), the network can create
-     * a dedicated bearer with the required QoS on top of an established default bearer.
-     * This will provide a dedicated tunnel for one or more specific traffic types.
-     */
-    public static final long MODEM_FEATURE_DEDICATED_BEARER = 1 << 11;
-    /** Modem feature indicating network scan capability. */
-    public static final long MODEM_FEATURE_NETWORK_SCAN = 1 << 12;
-    /** Modem feature indicating corresponding SIM has CDMA capability. */
-    public static final long MODEM_FEATURE_CSIM = 1 << 13;
-
+    // Hardcoded default DSDS capability.
     /** @hide */
-    @LongDef(flag = true, prefix = {"MODEM_FEATURE_" }, value = {
-            MODEM_FEATURE_3GPP2_REG,
-            MODEM_FEATURE_3GPP_REG,
-            MODEM_FEATURE_CDMA2000_EHRPD_REG,
-            MODEM_FEATURE_GERAN_REG,
-            MODEM_FEATURE_UTRAN_REG,
-            MODEM_FEATURE_EUTRAN_REG,
-            MODEM_FEATURE_NGRAN_REG,
-            MODEM_FEATURE_EUTRA_NR_DUAL_CONNECTIVITY_REG,
-            MODEM_FEATURE_PS_VOICE_REG,
-            MODEM_FEATURE_CS_VOICE_SESSION,
-            MODEM_FEATURE_INTERACTIVE_DATA_SESSION,
-            MODEM_FEATURE_DEDICATED_BEARER,
-            MODEM_FEATURE_NETWORK_SCAN,
-            MODEM_FEATURE_CSIM,
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface ModemFeature {
-    }
-
-    /**
-     * Hardcoded default DSDS capability.
-     * @hide
-     */
     public static final PhoneCapability DEFAULT_DSDS_CAPABILITY;
-    /**
-     * Hardcoded default Single SIM single standby capability.
-     * @hide
-     */
+    // Hardcoded default Single SIM single standby capability.
+    /** @hide */
     public static final PhoneCapability DEFAULT_SSSS_CAPABILITY;
 
     static {
-        List<List<Long>> capabilities = new ArrayList<>();
-        List<Long> modem1 = new ArrayList<>();
-        List<Long> modem2 = new ArrayList<>();
-        modem1.add(MODEM_FEATURE_GERAN_REG | MODEM_FEATURE_UTRAN_REG | MODEM_FEATURE_EUTRAN_REG
-                | MODEM_FEATURE_PS_VOICE_REG | MODEM_FEATURE_CS_VOICE_SESSION
-                | MODEM_FEATURE_INTERACTIVE_DATA_SESSION | MODEM_FEATURE_DEDICATED_BEARER);
-        modem2.add(MODEM_FEATURE_GERAN_REG | MODEM_FEATURE_UTRAN_REG | MODEM_FEATURE_EUTRAN_REG
-                | MODEM_FEATURE_PS_VOICE_REG | MODEM_FEATURE_INTERACTIVE_DATA_SESSION
-                | MODEM_FEATURE_DEDICATED_BEARER);
-        capabilities.add(modem1);
-        capabilities.add(modem2);
-        List<String> uuids = new ArrayList<>();
-        uuids.add("com.xxxx.lm0");
-        uuids.add("com.xxxx.lm1");
-        long rats = TelephonyManager.NETWORK_TYPE_BITMASK_GSM
-                | TelephonyManager.NETWORK_TYPE_BITMASK_GPRS
-                | TelephonyManager.NETWORK_TYPE_BITMASK_EDGE
-                | TelephonyManager.NETWORK_TYPE_BITMASK_UMTS
-                | TelephonyManager.NETWORK_TYPE_BITMASK_LTE;
-        DEFAULT_DSDS_CAPABILITY = new PhoneCapability(0, 0, 0, 0, 0, rats, null, null, null, null,
-                uuids, null, capabilities);
+        ModemInfo modemInfo1 = new ModemInfo(0, 0, true, true);
+        ModemInfo modemInfo2 = new ModemInfo(1, 0, true, true);
 
-        capabilities = new ArrayList<>();
-        capabilities.add(modem1);
-        uuids = new ArrayList<>();
-        uuids.add("com.xxxx.lm0");
-        DEFAULT_SSSS_CAPABILITY = new PhoneCapability(0, 0, 0, 0, 0, rats, null, null, null, null,
-                uuids, null, capabilities);
+        List<ModemInfo> logicalModemList = new ArrayList<>();
+        logicalModemList.add(modemInfo1);
+        logicalModemList.add(modemInfo2);
+        DEFAULT_DSDS_CAPABILITY = new PhoneCapability(1, 1, 0, logicalModemList, false);
+
+        logicalModemList = new ArrayList<>();
+        logicalModemList.add(modemInfo1);
+        DEFAULT_SSSS_CAPABILITY = new PhoneCapability(1, 1, 0, logicalModemList, false);
     }
 
-    private final int mUtranUeCategoryDl;
-    private final int mUtranUeCategoryUl;
-    private final int mEutranUeCategoryDl;
-    private final int mEutranUeCategoryUl;
-    private final long mPsDataConnectionLingerTimeMillis;
-    private final @NetworkTypeBitMask long mSupportedRats;
-    private final List<Integer> mGeranBands;
-    private final List<Integer> mUtranBands;
-    private final List<Integer> mEutranBands;
-    private final List<Integer> mNgranBands;
-    private final List<String> mLogicalModemUuids;
-    private final List<SimSlotCapability> mSimSlotCapabilities;
-    private final @ModemFeature List<List<Long>> mConcurrentFeaturesSupport;
+    /** @hide */
+    public final int maxActiveVoiceCalls;
+    /** @hide */
+    public final int maxActiveData;
+    /** @hide */
+    public final int max5G;
+    /** @hide */
+    public final boolean validationBeforeSwitchSupported;
+    /** @hide */
+    public final List<ModemInfo> logicalModemList;
 
-    /**
-     * Default constructor to create a PhoneCapability object.
-     * @param utranUeCategoryDl 3GPP UE category for UTRAN downlink.
-     * @param utranUeCategoryUl 3GPP UE category for UTRAN uplink.
-     * @param eutranUeCategoryDl 3GPP UE category for EUTRAN downlink.
-     * @param eutranUeCategoryUl 3GPP UE category for EUTRAN uplink.
-     * @param psDataConnectionLingerTimeMillis length of the grace period to allow a smooth
-     *                                         "handover" between data connections.
-     * @param supportedRats all radio access technologies this phone is capable of supporting.
-     * @param geranBands list of supported {@link AccessNetworkConstants.GeranBand}.
-     * @param utranBands list of supported {@link AccessNetworkConstants.UtranBand}.
-     * @param eutranBands list of supported {@link AccessNetworkConstants.EutranBand}.
-     * @param ngranBands list of supported {@link AccessNetworkConstants.NgranBands}.
-     * @param logicalModemUuids list of logical modem UUIDs, typically of the form
-     *                          "com.xxxx.lmX", where X is the logical modem ID.
-     * @param simSlotCapabilities list of {@link SimSlotCapability} for the device
-     * @param concurrentFeaturesSupport list of list of concurrently supportable modem feature sets.
-     * @hide
-     */
-    public PhoneCapability(int utranUeCategoryDl, int utranUeCategoryUl, int eutranUeCategoryDl,
-            int eutranUeCategoryUl, long psDataConnectionLingerTimeMillis,
-            @NetworkTypeBitMask long supportedRats, @Nullable List<Integer> geranBands,
-            @Nullable List<Integer> utranBands, @Nullable List<Integer> eutranBands,
-            @Nullable List<Integer> ngranBands, @Nullable List<String> logicalModemUuids,
-            @Nullable List<SimSlotCapability> simSlotCapabilities,
-            @Nullable @ModemFeature List<List<Long>> concurrentFeaturesSupport) {
-        this.mUtranUeCategoryDl = utranUeCategoryDl;
-        this.mUtranUeCategoryUl = utranUeCategoryUl;
-        this.mEutranUeCategoryDl = eutranUeCategoryDl;
-        this.mEutranUeCategoryUl = eutranUeCategoryUl;
-        this.mPsDataConnectionLingerTimeMillis = psDataConnectionLingerTimeMillis;
-        this.mSupportedRats = supportedRats;
-        this.mGeranBands = TelephonyUtils.emptyIfNull(geranBands);
-        this.mUtranBands = TelephonyUtils.emptyIfNull(utranBands);
-        this.mEutranBands = TelephonyUtils.emptyIfNull(eutranBands);
-        this.mNgranBands = TelephonyUtils.emptyIfNull(ngranBands);
-        this.mLogicalModemUuids = TelephonyUtils.emptyIfNull(logicalModemUuids);
-        this.mSimSlotCapabilities = TelephonyUtils.emptyIfNull(simSlotCapabilities);
-        this.mConcurrentFeaturesSupport = TelephonyUtils.emptyIfNull(concurrentFeaturesSupport);
-    }
-
-    private PhoneCapability(Parcel in) {
-        mUtranUeCategoryDl = in.readInt();
-        mUtranUeCategoryUl = in.readInt();
-        mEutranUeCategoryDl = in.readInt();
-        mEutranUeCategoryUl = in.readInt();
-        mPsDataConnectionLingerTimeMillis = in.readLong();
-        mSupportedRats = in.readLong();
-        mGeranBands = new ArrayList<>();
-        in.readList(mGeranBands, Integer.class.getClassLoader());
-        mUtranBands = new ArrayList<>();
-        in.readList(mUtranBands, Integer.class.getClassLoader());
-        mEutranBands = new ArrayList<>();
-        in.readList(mEutranBands, Integer.class.getClassLoader());
-        mNgranBands = new ArrayList<>();
-        in.readList(mNgranBands, Integer.class.getClassLoader());
-        mLogicalModemUuids = in.createStringArrayList();
-        mSimSlotCapabilities = in.createTypedArrayList(SimSlotCapability.CREATOR);
-        int length = in.readInt();
-        mConcurrentFeaturesSupport = new ArrayList<>();
-        for (int i = 0; i < length; i++) {
-            ArrayList<Long> feature = new ArrayList<>();
-            in.readList(feature, Long.class.getClassLoader());
-            mConcurrentFeaturesSupport.add(feature);
-        }
-    }
-
-    /**
-     * 3GPP UE category for a given Radio Access Network and direction.
-     *
-     * References are:
-     * TS 25.306 Table 4.1a     EUTRAN downlink
-     * TS 25.306 Table 5.1a-2   EUTRAN uplink
-     * TS 25.306 Table 5.1a     UTRAN downlink
-     * TS 25.306 Table 5.1g     UTRAN uplink
-     *
-     * @param uplink true for uplink direction and false for downlink direction.
-     * @param accessNetworkType accessNetworkType, defined in {@link AccessNetworkType}.
-     * @return the UE category, or -1 if it is not supported.
-     */
-    public int getUeCategory(boolean uplink, @RadioAccessNetworkType int accessNetworkType) {
-        if (uplink) {
-            switch (accessNetworkType) {
-                case AccessNetworkType.UTRAN: return mUtranUeCategoryUl;
-                case AccessNetworkType.EUTRAN: return mEutranUeCategoryUl;
-                default: return -1;
-            }
-        } else {
-            switch (accessNetworkType) {
-                case AccessNetworkType.UTRAN: return mUtranUeCategoryDl;
-                case AccessNetworkType.EUTRAN: return mEutranUeCategoryDl;
-                default: return -1;
-            }
-        }
-    }
-
-    /**
-     * In cellular devices that support a greater number of logical modems than
-     * Internet connections, some devices support a grace period to allow a smooth "handover"
-     * between those connections. If that feature is supported, then this API will provide
-     * the length of that grace period in milliseconds. If it is not supported, the default value
-     * for the grace period is 0.
-     * @return handover linger time in milliseconds, or 0 if it is not supported.
-     */
-    public long getPsDataConnectionLingerTimeMillis() {
-        return mPsDataConnectionLingerTimeMillis;
-    }
-
-    /**
-     * The radio access technologies this device is capable of supporting.
-     * @return a bitfield of all supported network types, defined in {@link TelephonyManager}
-     */
-    public @NetworkTypeBitMask long getSupportedRats() {
-        return mSupportedRats;
-    }
-
-    /**
-     * List of supported cellular bands for the given accessNetworkType.
-     * @param accessNetworkType accessNetworkType, defined in {@link AccessNetworkType}.
-     * @return a list of bands, or an empty list if the access network type is unsupported.
-     */
-    public @NonNull List<Integer> getBands(@RadioAccessNetworkType int accessNetworkType) {
-        switch (accessNetworkType) {
-            case AccessNetworkType.GERAN: return mGeranBands;
-            case AccessNetworkType.UTRAN: return mUtranBands;
-            case AccessNetworkType.EUTRAN: return mEutranBands;
-            case AccessNetworkType.NGRAN: return mNgranBands;
-            default: return new ArrayList<>();
-        }
-    }
-
-    /**
-     * List of logical modem UUIDs, each typically "com.xxxx.lmX", where X is the logical modem ID.
-     * @return a list of modem UUIDs, one for every logical modem the device has.
-     */
-    public @NonNull List<String> getLogicalModemUuids() {
-        return mLogicalModemUuids;
-    }
-
-    /**
-     * List of {@link SimSlotCapability} for the device. The order of SIMs corresponds to the
-     * order of modems in {@link #getLogicalModemUuids}.
-     * @return a list of SIM slot capabilities, one for every SIM slot the device has.
-     */
-    public @NonNull List<SimSlotCapability> getSimSlotCapabilities() {
-        return mSimSlotCapabilities;
-    }
-
-    /**
-     * A List of Lists of concurrently supportable modem feature sets.
-     *
-     * Each entry in the top-level list is an independent configuration across all modems
-     * that describes the capabilities of the device as a whole.
-     *
-     * Each entry in the second-level list is a bitfield of ModemFeatures that describes
-     * the capabilities for a single modem. In the second-level list, the order of the modems
-     * corresponds to order of the UUIDs in {@link #getLogicalModemUuids}.
-     *
-     * For symmetric capabilities that can only be active on one modem at a time, there will be
-     * multiple configurations (equal to the number of modems) that shows it active on each modem.
-     * For asymmetric capabilities that are only available on one of the modems, all configurations
-     * will have that capability on just that one modem.
-     *
-     * The example below shows the concurrentFeaturesSupport for a 3-modem device with
-     * theoretical capabilities SYMMETRIC (available on all modems, but only one at a time) and
-     * ASYMMETRIC (only available on the first modem):
-     * {
-     *      Configuration 1: ASYMMETRIC and SYMMETRIC on modem 1, modem 2 empty, modem 3 empty
-     *      {(ASYMMETRIC | SYMMETRIC), (), ()},
-     *
-     *      Configuration 2: ASYMMETRIC on modem 1, SYMMETRIC on modem 2, modem 3 empty
-     *      {(ASYMMETRIC), (SYMMETRIC), ()},
-     *
-     *      Configuration 3: ASYMMETRIC on modem 1, modem 2 empty, SYMMETRIC on modem 3
-     *      {(ASYMMETRIC), (), (SYMMETRIC)}
-     * }
-     *
-     * @return List of all concurrently supportable modem features.
-     */
-    public @NonNull @ModemFeature List<List<Long>> getConcurrentFeaturesSupport() {
-        return mConcurrentFeaturesSupport;
-    }
-
-    /**
-     * How many modems can simultaneously have PS attached.
-     * @return maximum number of active PS voice connections.
-     */
-    public int getMaxActivePsVoice() {
-        return countFeature(MODEM_FEATURE_PS_VOICE_REG);
-    }
-
-    /**
-     * How many modems can simultaneously support active data connections.
-     * For DSDS, this will be 1, and for DSDA this will be 2.
-     * @return maximum number of active Internet data sessions.
-     */
-    public int getMaxActiveInternetData() {
-        return countFeature(MODEM_FEATURE_INTERACTIVE_DATA_SESSION);
-    }
-
-    /**
-     * How many modems can simultaneously have dedicated bearer capability.
-     * @return maximum number of active dedicated bearers.
-     */
-    public int getMaxActiveDedicatedBearers() {
-        return countFeature(MODEM_FEATURE_DEDICATED_BEARER);
-    }
-
-    /**
-     * Whether the CBRS band 48 is supported or not.
-     * @return true if any RadioAccessNetwork supports CBRS and false if none do.
-     * @hide
-     */
-    public boolean isCbrsSupported() {
-        return mEutranBands.contains(AccessNetworkConstants.EutranBand.BAND_48)
-                || mNgranBands.contains(AccessNetworkConstants.NgranBands.BAND_48);
-    }
-
-    private int countFeature(@ModemFeature long feature) {
-        int count = 0;
-        for (long featureSet : mConcurrentFeaturesSupport.get(0)) {
-            if ((featureSet & feature) != 0) {
-                count++;
-            }
-        }
-        return count;
+    /** @hide */
+    public PhoneCapability(int maxActiveVoiceCalls, int maxActiveData, int max5G,
+            List<ModemInfo> logicalModemList, boolean validationBeforeSwitchSupported) {
+        this.maxActiveVoiceCalls = maxActiveVoiceCalls;
+        this.maxActiveData = maxActiveData;
+        this.max5G = max5G;
+        // Make sure it's not null.
+        this.logicalModemList = logicalModemList == null ? new ArrayList<>() : logicalModemList;
+        this.validationBeforeSwitchSupported = validationBeforeSwitchSupported;
     }
 
     @Override
     public String toString() {
-        return "utranUeCategoryDl=" + mUtranUeCategoryDl
-                + " utranUeCategoryUl=" + mUtranUeCategoryUl
-                + " eutranUeCategoryDl=" + mEutranUeCategoryDl
-                + " eutranUeCategoryUl=" + mEutranUeCategoryUl
-                + " psDataConnectionLingerTimeMillis=" + mPsDataConnectionLingerTimeMillis
-                + " supportedRats=" + mSupportedRats + " geranBands=" + mGeranBands
-                + " utranBands=" + mUtranBands + " eutranBands=" + mEutranBands
-                + " ngranBands=" + mNgranBands + " logicalModemUuids=" + mLogicalModemUuids
-                + " simSlotCapabilities=" + mSimSlotCapabilities
-                + " concurrentFeaturesSupport=" + mConcurrentFeaturesSupport;
+        return "maxActiveVoiceCalls=" + maxActiveVoiceCalls + " maxActiveData=" + maxActiveData
+                + " max5G=" + max5G + "logicalModemList:"
+                + Arrays.toString(logicalModemList.toArray());
+    }
+
+    private PhoneCapability(Parcel in) {
+        maxActiveVoiceCalls = in.readInt();
+        maxActiveData = in.readInt();
+        max5G = in.readInt();
+        validationBeforeSwitchSupported = in.readBoolean();
+        logicalModemList = new ArrayList<>();
+        in.readList(logicalModemList, ModemInfo.class.getClassLoader());
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(mUtranUeCategoryDl, mUtranUeCategoryUl, mEutranUeCategoryDl,
-                mEutranUeCategoryUl, mPsDataConnectionLingerTimeMillis, mSupportedRats, mGeranBands,
-                mUtranBands, mEutranBands, mNgranBands, mLogicalModemUuids, mSimSlotCapabilities,
-                mConcurrentFeaturesSupport);
+        return Objects.hash(maxActiveVoiceCalls, maxActiveData, max5G, logicalModemList,
+                validationBeforeSwitchSupported);
     }
 
     @Override
@@ -411,19 +107,11 @@
 
         PhoneCapability s = (PhoneCapability) o;
 
-        return (mUtranUeCategoryDl == s.mUtranUeCategoryDl
-                && mUtranUeCategoryUl == s.mUtranUeCategoryUl
-                && mEutranUeCategoryDl == s.mEutranUeCategoryDl
-                && mEutranUeCategoryUl == s.mEutranUeCategoryUl
-                && mPsDataConnectionLingerTimeMillis == s.mPsDataConnectionLingerTimeMillis
-                && mSupportedRats == s.mSupportedRats
-                && mGeranBands.equals(s.mGeranBands)
-                && mUtranBands.equals(s.mUtranBands)
-                && mEutranBands.equals(s.mEutranBands)
-                && mNgranBands.equals(s.mNgranBands)
-                && mLogicalModemUuids.equals(s.mLogicalModemUuids)
-                && mSimSlotCapabilities.equals(s.mSimSlotCapabilities)
-                && mConcurrentFeaturesSupport.equals(s.mConcurrentFeaturesSupport));
+        return (maxActiveVoiceCalls == s.maxActiveVoiceCalls
+                && maxActiveData == s.maxActiveData
+                && max5G == s.max5G
+                && validationBeforeSwitchSupported == s.validationBeforeSwitchSupported
+                && logicalModemList.equals(s.logicalModemList));
     }
 
     /**
@@ -436,33 +124,21 @@
     /**
      * {@link Parcelable#writeToParcel}
      */
-    public void writeToParcel(@NonNull Parcel dest, int flags) {
-        dest.writeInt(mUtranUeCategoryDl);
-        dest.writeInt(mUtranUeCategoryUl);
-        dest.writeInt(mEutranUeCategoryDl);
-        dest.writeInt(mEutranUeCategoryUl);
-        dest.writeLong(mPsDataConnectionLingerTimeMillis);
-        dest.writeLong(mSupportedRats);
-        dest.writeList(mGeranBands);
-        dest.writeList(mUtranBands);
-        dest.writeList(mEutranBands);
-        dest.writeList(mNgranBands);
-        dest.writeStringList(mLogicalModemUuids);
-        dest.writeTypedList(mSimSlotCapabilities);
-        dest.writeInt(mConcurrentFeaturesSupport.size());
-        for (List<Long> feature : mConcurrentFeaturesSupport) {
-            dest.writeList(feature);
-        }
+    public void writeToParcel(@NonNull Parcel dest, @Parcelable.WriteFlags int flags) {
+        dest.writeInt(maxActiveVoiceCalls);
+        dest.writeInt(maxActiveData);
+        dest.writeInt(max5G);
+        dest.writeBoolean(validationBeforeSwitchSupported);
+        dest.writeList(logicalModemList);
     }
 
-    public static final @NonNull Parcelable.Creator<PhoneCapability> CREATOR =
-            new Parcelable.Creator() {
-                public PhoneCapability createFromParcel(Parcel in) {
-                    return new PhoneCapability(in);
-                }
+    public static final @android.annotation.NonNull Parcelable.Creator<PhoneCapability> CREATOR = new Parcelable.Creator() {
+        public PhoneCapability createFromParcel(Parcel in) {
+            return new PhoneCapability(in);
+        }
 
-                public PhoneCapability[] newArray(int size) {
-                    return new PhoneCapability[size];
-                }
-            };
+        public PhoneCapability[] newArray(int size) {
+            return new PhoneCapability[size];
+        }
+    };
 }
diff --git a/telephony/java/android/telephony/PreciseDisconnectCause.java b/telephony/java/android/telephony/PreciseDisconnectCause.java
index 54980a2..250d9e8 100644
--- a/telephony/java/android/telephony/PreciseDisconnectCause.java
+++ b/telephony/java/android/telephony/PreciseDisconnectCause.java
@@ -256,337 +256,6 @@
     /** Access Blocked by CDMA network. */
     public static final int CDMA_ACCESS_BLOCKED                              = 1009;
 
-    /** Mapped from ImsReasonInfo */
-    // TODO: remove ImsReasonInfo from preciseDisconnectCause
-    /* The passed argument is an invalid */
-    /** @hide */
-    public static final int LOCAL_ILLEGAL_ARGUMENT                           = 1200;
-    // The operation is invoked in invalid call state
-    /** @hide */
-    public static final int LOCAL_ILLEGAL_STATE                              = 1201;
-    // IMS service internal error
-    /** @hide */
-    public static final int LOCAL_INTERNAL_ERROR                             = 1202;
-    // IMS service goes down (service connection is lost)
-    /** @hide */
-    public static final int LOCAL_IMS_SERVICE_DOWN                           = 1203;
-    // No pending incoming call exists
-    /** @hide */
-    public static final int LOCAL_NO_PENDING_CALL                            = 1204;
-    // Service unavailable; by power off
-    /** @hide */
-    public static final int LOCAL_POWER_OFF                                  = 1205;
-    // Service unavailable; by low battery
-    /** @hide */
-    public static final int LOCAL_LOW_BATTERY                                = 1206;
-    // Service unavailable; by out of service (data service state)
-    /** @hide */
-    public static final int LOCAL_NETWORK_NO_SERVICE                         = 1207;
-    /* Service unavailable; by no LTE coverage
-     * (VoLTE is not supported even though IMS is registered)
-     */
-    /** @hide */
-    public static final int LOCAL_NETWORK_NO_LTE_COVERAGE                    = 1208;
-    /** Service unavailable; by located in roaming area */
-    /** @hide */
-    public static final int LOCAL_NETWORK_ROAMING                            = 1209;
-    /** Service unavailable; by IP changed */
-    /** @hide */
-    public static final int LOCAL_NETWORK_IP_CHANGED                         = 1210;
-    /** Service unavailable; other */
-    /** @hide */
-    public static final int LOCAL_SERVICE_UNAVAILABLE                        = 1211;
-    /* Service unavailable; IMS connection is lost (IMS is not registered) */
-    /** @hide */
-    public static final int LOCAL_NOT_REGISTERED                             = 1212;
-    /** Max call exceeded */
-    /** @hide */
-    public static final int LOCAL_MAX_CALL_EXCEEDED                          = 1213;
-    /** Call decline */
-    /** @hide */
-    public static final int LOCAL_CALL_DECLINE                               = 1214;
-    /** SRVCC is in progress */
-    /** @hide */
-    public static final int LOCAL_CALL_VCC_ON_PROGRESSING                    = 1215;
-    /** Resource reservation is failed (QoS precondition) */
-    /** @hide */
-    public static final int LOCAL_CALL_RESOURCE_RESERVATION_FAILED           = 1216;
-    /** Retry CS call; VoLTE service can't be provided by the network or remote end
-     *  Resolve the extra code(EXTRA_CODE_CALL_RETRY_*) if the below code is set
-     *  @hide
-     */
-    public static final int LOCAL_CALL_CS_RETRY_REQUIRED                     = 1217;
-    /** Retry VoLTE call; VoLTE service can't be provided by the network temporarily */
-    /** @hide */
-    public static final int LOCAL_CALL_VOLTE_RETRY_REQUIRED                  = 1218;
-    /** IMS call is already terminated (in TERMINATED state) */
-    /** @hide */
-    public static final int LOCAL_CALL_TERMINATED                            = 1219;
-    /** Handover not feasible */
-    /** @hide */
-    public static final int LOCAL_HO_NOT_FEASIBLE                            = 1220;
-
-    /** 1xx waiting timer is expired after sending INVITE request (MO only) */
-    /** @hide */
-    public static final int TIMEOUT_1XX_WAITING                              = 1221;
-    /** User no answer during call setup operation (MO/MT)
-     *  MO : 200 OK to INVITE request is not received,
-     *  MT : No action from user after alerting the call
-     *  @hide
-     */
-    public static final int TIMEOUT_NO_ANSWER                                = 1222;
-    /** User no answer during call update operation (MO/MT)
-     *  MO : 200 OK to re-INVITE request is not received,
-     *  MT : No action from user after alerting the call
-     *  @hide
-     */
-    public static final int TIMEOUT_NO_ANSWER_CALL_UPDATE                    = 1223;
-
-    /**
-     * STATUSCODE (SIP response code) (IMS -> Telephony)
-     */
-    /** SIP request is redirected */
-    /** @hide */
-    public static final int SIP_REDIRECTED                                   = 1300;
-    /** 4xx responses */
-    /** 400 : Bad Request */
-    /** @hide */
-    public static final int SIP_BAD_REQUEST                                  = 1310;
-    /** 403 : Forbidden */
-    /** @hide */
-    public static final int SIP_FORBIDDEN                                    = 1311;
-    /** 404 : Not Found */
-    /** @hide */
-    public static final int SIP_NOT_FOUND                                    = 1312;
-    /** 415 : Unsupported Media Type
-     *  416 : Unsupported URI Scheme
-     *  420 : Bad Extension
-     */
-    /** @hide */
-    public static final int SIP_NOT_SUPPORTED                                = 1313;
-    /** 408 : Request Timeout */
-    /** @hide */
-    public static final int SIP_REQUEST_TIMEOUT                              = 1314;
-    /** 480 : Temporarily Unavailable */
-    /** @hide */
-    public static final int SIP_TEMPRARILY_UNAVAILABLE                       = 1315;
-    /** 484 : Address Incomplete */
-    /** @hide */
-    public static final int SIP_BAD_ADDRESS                                  = 1316;
-    /** 486 : Busy Here
-     *  600 : Busy Everywhere
-     */
-    /** @hide */
-    public static final int SIP_BUSY                                         = 1317;
-    /** 487 : Request Terminated */
-    /** @hide */
-    public static final int SIP_REQUEST_CANCELLED                            = 1318;
-    /** 406 : Not Acceptable
-     *  488 : Not Acceptable Here
-     *  606 : Not Acceptable
-     */
-    /** @hide */
-    public static final int SIP_NOT_ACCEPTABLE                               = 1319;
-    /** 410 : Gone
-     *  604 : Does Not Exist Anywhere
-     */
-    /** @hide */
-    public static final int SIP_NOT_REACHABLE                                = 1320;
-    /** Others */
-    /** @hide */
-    public static final int SIP_CLIENT_ERROR                                 = 1321;
-    /** 481 : Transaction Does Not Exist */
-    /** @hide */
-    public static final int SIP_TRANSACTION_DOES_NOT_EXIST                   = 1322;
-    /** 5xx responses
-     *  501 : Server Internal Error
-     */
-    /** @hide */
-    public static final int SIP_SERVER_INTERNAL_ERROR                        = 1330;
-    /** 503 : Service Unavailable */
-    /** @hide */
-    public static final int SIP_SERVICE_UNAVAILABLE                          = 1331;
-    /** 504 : Server Time-out */
-    /** @hide */
-    public static final int SIP_SERVER_TIMEOUT                               = 1332;
-    /** Others */
-    /** @hide */
-    public static final int SIP_SERVER_ERROR                                 = 1333;
-    /** 6xx responses
-     *  603 : Decline
-     */
-    /** @hide */
-    public static final int SIP_USER_REJECTED                                = 1340;
-    /** Others */
-    /** @hide */
-    public static final int SIP_GLOBAL_ERROR                                 = 1341;
-    /** Emergency failure */
-    /** @hide */
-    public static final int EMERGENCY_TEMP_FAILURE                           = 1342;
-    /** @hide */
-    public static final int EMERGENCY_PERM_FAILURE                           = 1343;
-    /** Media resource initialization failed */
-    /** @hide */
-    public static final int MEDIA_INIT_FAILED                                = 1400;
-    /** RTP timeout (no audio / video traffic in the session) */
-    /** @hide */
-    public static final int MEDIA_NO_DATA                                    = 1401;
-    /** Media is not supported; so dropped the call */
-    /** @hide */
-    public static final int MEDIA_NOT_ACCEPTABLE                             = 1402;
-    /** Unknown media related errors */
-    /** @hide */
-    public static final int MEDIA_UNSPECIFIED                                = 1403;
-    /** User triggers the call end */
-    /** @hide */
-    public static final int USER_TERMINATED                                  = 1500;
-    /** No action while an incoming call is ringing */
-    /** @hide */
-    public static final int USER_NOANSWER                                    = 1501;
-    /** User ignores an incoming call */
-    /** @hide */
-    public static final int USER_IGNORE                                      = 1502;
-    /** User declines an incoming call */
-    /** @hide */
-    public static final int USER_DECLINE                                     = 1503;
-    /** Device declines/ends a call due to low battery */
-    /** @hide */
-    public static final int LOW_BATTERY                                      = 1504;
-    /** Device declines call due to blacklisted call ID */
-    /** @hide */
-    public static final int BLACKLISTED_CALL_ID                              = 1505;
-    /** The call is terminated by the network or remote user */
-    /** @hide */
-    public static final int USER_TERMINATED_BY_REMOTE                        = 1510;
-
-    /**
-     * UT
-     */
-    /** @hide */
-    public static final int UT_NOT_SUPPORTED                                 = 1800;
-    /** @hide */
-    public static final int UT_SERVICE_UNAVAILABLE                           = 1801;
-    /** @hide */
-    public static final int UT_OPERATION_NOT_ALLOWED                         = 1802;
-    /** @hide */
-    public static final int UT_NETWORK_ERROR                                 = 1803;
-    /** @hide */
-    public static final int UT_CB_PASSWORD_MISMATCH                          = 1804;
-
-    /**
-     * ECBM
-     * @hide
-     */
-    public static final int ECBM_NOT_SUPPORTED                               = 1900;
-
-    /**
-     * Fail code used to indicate that Multi-endpoint is not supported by the Ims framework.
-     * @hide
-     */
-    public static final int MULTIENDPOINT_NOT_SUPPORTED                      = 1901;
-
-    /**
-     * CALL DROP error codes (Call could drop because of many reasons like Network not available,
-     *  handover, failed, etc)
-     */
-
-    /**
-     * CALL DROP error code for the case when a device is ePDG capable and when the user is on an
-     * active wifi call and at the edge of coverage and there is no qualified LTE network available
-     * to handover the call to. We get a handover NOT_TRIGERRED message from the modem. This error
-     * code is received as part of the handover message.
-     * @hide
-     */
-    public static final int CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE               = 2000;
-
-    /**
-     * MT call has ended due to a release from the network
-     * because the call was answered elsewhere
-     * @hide
-     */
-    public static final int ANSWERED_ELSEWHERE                               = 2100;
-
-    /**
-     * For MultiEndpoint - Call Pull request has failed
-     * @hide
-     */
-    public static final int CALL_PULL_OUT_OF_SYNC                            = 2101;
-
-    /**
-     * For MultiEndpoint - Call has been pulled from primary to secondary
-     * @hide
-     */
-    public static final int CALL_PULLED                                      = 2102;
-
-    /**
-     * Supplementary services (HOLD/RESUME) failure error codes.
-     * Values for Supplemetary services failure - Failed, Cancelled and Re-Invite collision.
-     * @hide
-     */
-    public static final int SUPP_SVC_FAILED                                  = 2300;
-    /** @hide */
-    public static final int SUPP_SVC_CANCELLED                               = 2301;
-    /** @hide */
-    public static final int SUPP_SVC_REINVITE_COLLISION                      = 2302;
-
-    /**
-     * DPD Procedure received no response or send failed
-     * @hide
-     */
-    public static final int IWLAN_DPD_FAILURE                                = 2400;
-
-    /**
-     * Establishment of the ePDG Tunnel Failed
-     * @hide
-     */
-    public static final int EPDG_TUNNEL_ESTABLISH_FAILURE                    = 2500;
-
-    /**
-     * Re-keying of the ePDG Tunnel Failed; may not always result in teardown
-     * @hide
-     */
-    public static final int EPDG_TUNNEL_REKEY_FAILURE                        = 2501;
-
-    /**
-     * Connection to the packet gateway is lost
-     * @hide
-     */
-    public static final int EPDG_TUNNEL_LOST_CONNECTION                      = 2502;
-
-    /**
-     * The maximum number of calls allowed has been reached.  Used in a multi-endpoint scenario
-     * where the number of calls across all connected devices has reached the maximum.
-     * @hide
-     */
-    public static final int MAXIMUM_NUMBER_OF_CALLS_REACHED                  = 2503;
-
-    /**
-     * Similar to {@link #CODE_LOCAL_CALL_DECLINE}, except indicates that a remote device has
-     * declined the call.  Used in a multi-endpoint scenario where a remote device declined an
-     * incoming call.
-     * @hide
-     */
-    public static final int REMOTE_CALL_DECLINE                              = 2504;
-
-    /**
-     * Indicates the call was disconnected due to the user reaching their data limit.
-     * @hide
-     */
-    public static final int DATA_LIMIT_REACHED                               = 2505;
-
-    /**
-     * Indicates the call was disconnected due to the user disabling cellular data.
-     * @hide
-     */
-    public static final int DATA_DISABLED                                    = 2506;
-
-    /**
-     * Indicates a call was disconnected due to loss of wifi signal.
-     * @hide
-     */
-    public static final int WIFI_LOST                                        = 2507;
-
-
     /* OEM specific error codes. To be used by OEMs when they don't want to
        reveal error code which would be replaced by ERROR_UNSPECIFIED */
     public static final int OEM_CAUSE_1                                      = 0xf001;
diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java
index 5a4dac5..ad58c54 100644
--- a/telephony/java/android/telephony/SignalStrength.java
+++ b/telephony/java/android/telephony/SignalStrength.java
@@ -16,8 +16,8 @@
 
 package android.telephony;
 
+import android.annotation.ElapsedRealtimeLong;
 import android.annotation.NonNull;
-import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.os.Build;
@@ -79,8 +79,9 @@
     /* The type of signal measurement */
     private static final String MEASUREMENT_TYPE_RSCP = "rscp";
 
-    // timeStamp of signalStrength in nanoseconds since boot
-    private long mTimestamp = Long.MAX_VALUE;
+    // Timestamp of SignalStrength since boot
+    // Effectively final. Timestamp is set during construction of SignalStrength
+    private long mTimestampMillis;
 
     CellSignalStrengthCdma mCdma;
     CellSignalStrengthGsm mGsm;
@@ -139,7 +140,7 @@
         mTdscdma = tdscdma;
         mLte = lte;
         mNr = nr;
-        mTimestamp = SystemClock.elapsedRealtimeNanos();
+        mTimestampMillis = SystemClock.elapsedRealtime();
     }
 
     /**
@@ -274,7 +275,6 @@
         mTdscdma.updateLevel(cc, ss);
         mLte.updateLevel(cc, ss);
         mNr.updateLevel(cc, ss);
-        mTimestamp = SystemClock.elapsedRealtimeNanos();
     }
 
     /**
@@ -300,7 +300,7 @@
         mTdscdma = new CellSignalStrengthTdscdma(s.mTdscdma);
         mLte = new CellSignalStrengthLte(s.mLte);
         mNr = new CellSignalStrengthNr(s.mNr);
-        mTimestamp = s.getTimestampNanos();
+        mTimestampMillis = s.getTimestampMillis();
     }
 
     /**
@@ -318,7 +318,7 @@
         mTdscdma = in.readParcelable(CellSignalStrengthTdscdma.class.getClassLoader());
         mLte = in.readParcelable(CellSignalStrengthLte.class.getClassLoader());
         mNr = in.readParcelable(CellSignalStrengthLte.class.getClassLoader());
-        mTimestamp = in.readLong();
+        mTimestampMillis = in.readLong();
     }
 
     /**
@@ -331,15 +331,17 @@
         out.writeParcelable(mTdscdma, flags);
         out.writeParcelable(mLte, flags);
         out.writeParcelable(mNr, flags);
-        out.writeLong(mTimestamp);
+        out.writeLong(mTimestampMillis);
     }
 
     /**
-     * @return mTimestamp in nanoseconds
+     * @return timestamp in milliseconds since boot for {@link SignalStrength}.
+     * This timestamp reports the approximate time that the signal was measured and reported
+     * by the modem. It can be used to compare the recency of {@link SignalStrength} instances.
      */
-    @SuppressLint("MethodNameUnits")
-    public long getTimestampNanos() {
-        return mTimestamp;
+    @ElapsedRealtimeLong
+    public long getTimestampMillis() {
+        return mTimestampMillis;
     }
 
    /**
diff --git a/telephony/java/android/telephony/SimSlotCapability.java b/telephony/java/android/telephony/SimSlotCapability.java
deleted file mode 100644
index b4fef46..0000000
--- a/telephony/java/android/telephony/SimSlotCapability.java
+++ /dev/null
@@ -1,130 +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.telephony;
-
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.Objects;
-
-/**
- * Capabilities for a SIM Slot.
- */
-public final class SimSlotCapability implements Parcelable {
-    /** Slot type for UICC (removable SIM). */
-    public static final int SLOT_TYPE_UICC = 1;
-    /** Slot type for iUICC/iSIM (integrated SIM). */
-    public static final int SLOT_TYPE_IUICC = 2;
-    /** Slot type for eUICC/eSIM (embedded SIM). */
-    public static final int SLOT_TYPE_EUICC = 3;
-    /** Slot type for soft SIM (no physical SIM). */
-    public static final int SLOT_TYPE_SOFT_SIM = 4;
-
-    /** @hide */
-    @IntDef(prefix = {"SLOT_TYPE_" }, value = {
-            SLOT_TYPE_UICC,
-            SLOT_TYPE_IUICC,
-            SLOT_TYPE_EUICC,
-            SLOT_TYPE_SOFT_SIM,
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface SlotType {
-    }
-
-    private final int mPhysicalSlotIndex;
-    private final int mSlotType;
-
-    /** @hide */
-    public SimSlotCapability(int physicalSlotId, int slotType) {
-        this.mPhysicalSlotIndex = physicalSlotId;
-        this.mSlotType = slotType;
-    }
-
-    private SimSlotCapability(Parcel in) {
-        mPhysicalSlotIndex = in.readInt();
-        mSlotType = in.readInt();
-    }
-
-    /**
-     * @return physical SIM slot index
-     */
-    public int getPhysicalSlotIndex() {
-        return mPhysicalSlotIndex;
-    }
-
-    /**
-     * @return type of SIM {@link SlotType}
-     */
-    public @SlotType int getSlotType() {
-        return mSlotType;
-    }
-
-    @Override
-    public String toString() {
-        return "mPhysicalSlotIndex=" + mPhysicalSlotIndex + " slotType=" + mSlotType;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(mPhysicalSlotIndex, mSlotType);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (o == null || !(o instanceof SimSlotCapability) || hashCode() != o.hashCode()) {
-            return false;
-        }
-
-        if (this == o) {
-            return true;
-        }
-
-        SimSlotCapability s = (SimSlotCapability) o;
-
-        return (mPhysicalSlotIndex == s.mPhysicalSlotIndex && mSlotType == s.mSlotType);
-    }
-
-    /**
-     * {@link Parcelable#describeContents}
-     */
-    public int describeContents() {
-        return 0;
-    }
-
-    /**
-     * {@link Parcelable#writeToParcel}
-     */
-    public void writeToParcel(@NonNull Parcel dest, int flags) {
-        dest.writeInt(mPhysicalSlotIndex);
-        dest.writeInt(mSlotType);
-    }
-
-    public static final @NonNull Parcelable.Creator<SimSlotCapability> CREATOR =
-            new Parcelable.Creator() {
-                public SimSlotCapability createFromParcel(Parcel in) {
-                    return new SimSlotCapability(in);
-                }
-
-                public SimSlotCapability[] newArray(int size) {
-                    return new SimSlotCapability[size];
-                }
-            };
-}
diff --git a/telephony/java/android/telephony/SmsManager.java b/telephony/java/android/telephony/SmsManager.java
index 8e83c4c..8479db6 100644
--- a/telephony/java/android/telephony/SmsManager.java
+++ b/telephony/java/android/telephony/SmsManager.java
@@ -801,11 +801,7 @@
                     "Invalid pdu format. format must be either 3gpp or 3gpp2");
         }
         try {
-            ISms iSms = ISms.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSmsServiceRegisterer()
-                            .get());
+            ISms iSms = TelephonyManager.getSmsService();
             if (iSms != null) {
                 iSms.injectSmsPduForSubscriber(
                         getSubscriptionId(), pdu, format, receivedIntent);
@@ -1642,7 +1638,7 @@
      * the service does not exist.
      */
     private static ISms getISmsServiceOrThrow() {
-        ISms iSms = getISmsService();
+        ISms iSms = TelephonyManager.getSmsService();
         if (iSms == null) {
             throw new UnsupportedOperationException("Sms is not supported");
         }
@@ -1650,11 +1646,7 @@
     }
 
     private static ISms getISmsService() {
-        return ISms.Stub.asInterface(
-                TelephonyFrameworkInitializer
-                        .getTelephonyServiceManager()
-                        .getSmsServiceRegisterer()
-                        .get());
+        return TelephonyManager.getSmsService();
     }
 
     /**
@@ -2091,11 +2083,7 @@
     public boolean isSMSPromptEnabled() {
         ISms iSms = null;
         try {
-            iSms = ISms.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSmsServiceRegisterer()
-                            .get());
+            iSms = TelephonyManager.getSmsService();
             return iSms.isSMSPromptEnabled();
         } catch (RemoteException ex) {
             return false;
@@ -2106,8 +2094,12 @@
 
     /**
      * Gets the total capacity of SMS storage on RUIM and SIM cards
+     * <p>
+     * This is the number of 176 byte EF-SMS records which can be stored on the RUIM or SIM card.
+     * <p>
+     * See 3GPP TS 31.102 - 4.2.25 - EF-SMS for more information
      *
-     * @return the total capacity count of SMS on RUIM and SIM cards
+     * @return the total number of SMS records which can be stored on the RUIM or SIM cards.
      * @hide
      */
     @SystemApi
diff --git a/telephony/java/android/telephony/SmsMessage.java b/telephony/java/android/telephony/SmsMessage.java
index 6d82e51..37d3d32 100644
--- a/telephony/java/android/telephony/SmsMessage.java
+++ b/telephony/java/android/telephony/SmsMessage.java
@@ -627,7 +627,7 @@
                     destinationAddress, message, statusReportRequested);
         }
 
-        return new SubmitPdu(spb);
+        return spb != null ? new SubmitPdu(spb) : null;
     }
 
     /**
@@ -655,7 +655,7 @@
                     destinationAddress, destinationPort, data, statusReportRequested);
         }
 
-        return new SubmitPdu(spb);
+        return spb != null ? new SubmitPdu(spb) : null;
     }
 
     // TODO: SubmitPdu class is used for SMS-DELIVER also now. Refactor for SubmitPdu and new
diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java
index 832771d..336aa0e 100644
--- a/telephony/java/android/telephony/SubscriptionInfo.java
+++ b/telephony/java/android/telephony/SubscriptionInfo.java
@@ -217,6 +217,20 @@
     private boolean mAreUiccApplicationsEnabled = true;
 
     /**
+     * Public copy constructor.
+     * @hide
+     */
+    public SubscriptionInfo(SubscriptionInfo info) {
+        this(info.mId, info.mIccId, info.mSimSlotIndex, info.mDisplayName, info.mCarrierName,
+                info.mNameSource, info.mIconTint, info.mNumber, info.mDataRoaming, info.mIconBitmap,
+                info.mMcc, info.mMnc, info.mCountryIso, info.mIsEmbedded, info.mNativeAccessRules,
+                info.mCardString, info.mCardId, info.mIsOpportunistic,
+                info.mGroupUUID == null ? null : info.mGroupUUID.toString(), info.mIsGroupDisabled,
+                info.mCarrierId, info.mProfileClass, info.mSubscriptionType, info.mGroupOwner,
+                info.mCarrierConfigAccessRules, info.mAreUiccApplicationsEnabled);
+    }
+
+    /**
      * @hide
      */
     public SubscriptionInfo(int id, String iccId, int simSlotIndex, CharSequence displayName,
@@ -291,13 +305,27 @@
     }
 
     /**
-     * @return the ICC ID.
+     * Returns the ICC ID if the calling app has been granted the READ_PRIVILEGED_PHONE_STATE
+     * permission, has carrier privileges (see {@link TelephonyManager#hasCarrierPrivileges}), or
+     * is a device owner or profile owner that has been granted the READ_PHONE_STATE permission.
+     * The profile owner is an app that owns a managed profile on the device; for more details see
+     * <a href="https://developer.android.com/work/managed-profiles">Work profiles</a>. Profile
+     * owner access is deprecated and will be removed in a future release.
+     *
+     * @return the ICC ID, or an empty string if one of these requirements is not met
      */
     public String getIccId() {
         return this.mIccId;
     }
 
     /**
+     * @hide
+     */
+    public void clearIccId() {
+        this.mIccId = "";
+    }
+
+    /**
      * @return the slot index of this Subscription's SIM card.
      */
     public int getSimSlotIndex() {
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index 97f50fd..b32e9d7 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -1141,11 +1141,7 @@
         SubscriptionInfo subInfo = null;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 subInfo = iSub.getActiveSubscriptionInfo(subId, mContext.getOpPackageName(),
                         mContext.getFeatureId());
@@ -1179,11 +1175,7 @@
         SubscriptionInfo result = null;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 result = iSub.getActiveSubscriptionInfoForIccId(iccId, mContext.getOpPackageName(),
                         mContext.getFeatureId());
@@ -1217,11 +1209,7 @@
         SubscriptionInfo result = null;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 result = iSub.getActiveSubscriptionInfoForSimSlotIndex(slotIndex,
                         mContext.getOpPackageName(), mContext.getFeatureId());
@@ -1245,11 +1233,7 @@
         List<SubscriptionInfo> result = null;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 result = iSub.getAllSubInfoList(mContext.getOpPackageName(),
                         mContext.getFeatureId());
@@ -1330,11 +1314,7 @@
         List<SubscriptionInfo> activeList = null;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 activeList = iSub.getActiveSubscriptionInfoList(mContext.getOpPackageName(),
                         mContext.getFeatureId());
@@ -1385,11 +1365,7 @@
         List<SubscriptionInfo> result = null;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 result = iSub.getAvailableSubscriptionInfoList(mContext.getOpPackageName(),
                         mContext.getFeatureId());
@@ -1428,11 +1404,7 @@
         List<SubscriptionInfo> result = null;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 result = iSub.getAccessibleSubscriptionInfoList(mContext.getOpPackageName());
             }
@@ -1461,11 +1433,7 @@
     public void requestEmbeddedSubscriptionInfoListRefresh() {
         int cardId = TelephonyManager.from(mContext).getCardIdForDefaultEuicc();
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 iSub.requestEmbeddedSubscriptionInfoListRefresh(cardId);
             }
@@ -1494,11 +1462,7 @@
     @SystemApi
     public void requestEmbeddedSubscriptionInfoListRefresh(int cardId) {
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 iSub.requestEmbeddedSubscriptionInfoListRefresh(cardId);
             }
@@ -1519,11 +1483,7 @@
         int result = 0;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 result = iSub.getAllSubInfoCount(mContext.getOpPackageName(),
                         mContext.getFeatureId());
@@ -1552,11 +1512,7 @@
         int result = 0;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 result = iSub.getActiveSubInfoCount(mContext.getOpPackageName(),
                         mContext.getFeatureId());
@@ -1577,11 +1533,7 @@
         int result = 0;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 result = iSub.getActiveSubInfoCountMax();
             }
@@ -1638,11 +1590,7 @@
         }
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub == null) {
                 Log.e(LOG_TAG, "[addSubscriptionInfoRecord]- ISub service is null");
                 return;
@@ -1676,11 +1624,7 @@
         }
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub == null) {
                 Log.e(LOG_TAG, "[removeSubscriptionInfoRecord]- ISub service is null");
                 return;
@@ -1783,11 +1727,7 @@
         int result = INVALID_SIM_SLOT_INDEX;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 result = iSub.getSlotIndex(subscriptionId);
             }
@@ -1821,11 +1761,7 @@
         int[] subId = null;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 subId = iSub.getSubId(slotIndex);
             }
@@ -1849,11 +1785,7 @@
         int result = INVALID_PHONE_INDEX;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 result = iSub.getPhoneId(subId);
             }
@@ -1887,11 +1819,7 @@
         int subId = INVALID_SUBSCRIPTION_ID;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 subId = iSub.getDefaultSubId();
             }
@@ -1914,11 +1842,7 @@
         int subId = INVALID_SUBSCRIPTION_ID;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 subId = iSub.getDefaultVoiceSubId();
             }
@@ -1948,11 +1872,7 @@
     public void setDefaultVoiceSubscriptionId(int subscriptionId) {
         if (VDBG) logd("setDefaultVoiceSubId sub id = " + subscriptionId);
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 iSub.setDefaultVoiceSubId(subscriptionId);
             }
@@ -2000,11 +1920,7 @@
         int subId = INVALID_SUBSCRIPTION_ID;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 subId = iSub.getDefaultSmsSubId();
             }
@@ -2030,11 +1946,7 @@
     public void setDefaultSmsSubId(int subscriptionId) {
         if (VDBG) logd("setDefaultSmsSubId sub id = " + subscriptionId);
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 iSub.setDefaultSmsSubId(subscriptionId);
             }
@@ -2072,11 +1984,7 @@
         int subId = INVALID_SUBSCRIPTION_ID;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 subId = iSub.getDefaultDataSubId();
             }
@@ -2102,11 +2010,7 @@
     public void setDefaultDataSubId(int subscriptionId) {
         if (VDBG) logd("setDataSubscription sub id = " + subscriptionId);
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 iSub.setDefaultDataSubId(subscriptionId);
             }
@@ -2137,11 +2041,7 @@
     /** @hide */
     public void clearSubscriptionInfo() {
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 iSub.clearSubInfo();
             }
@@ -2277,11 +2177,7 @@
      */
     public @NonNull int[] getActiveSubscriptionIdList(boolean visibleOnly) {
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 int[] subId = iSub.getActiveSubIdList(visibleOnly);
                 if (subId != null) return subId;
@@ -2332,11 +2228,7 @@
         int simState = TelephonyManager.SIM_STATE_UNKNOWN;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 simState = iSub.getSimStateForSlotIndex(slotIndex);
             }
@@ -2355,11 +2247,7 @@
      */
     public static void setSubscriptionProperty(int subId, String propKey, String propValue) {
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 iSub.setSubscriptionProperty(subId, propKey, propValue);
             }
@@ -2379,11 +2267,7 @@
             Context context) {
         String resultValue = null;
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 resultValue = iSub.getSubscriptionProperty(subId, propKey,
                         context.getOpPackageName(), context.getFeatureId());
@@ -2547,11 +2431,7 @@
     @UnsupportedAppUsage
     public boolean isActiveSubId(int subId) {
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 return iSub.isActiveSubId(subId, mContext.getOpPackageName(),
                         mContext.getFeatureId());
@@ -2747,11 +2627,7 @@
             @TelephonyManager.SetOpportunisticSubscriptionResult Consumer<Integer> callback) {
         if (VDBG) logd("[setPreferredDataSubscriptionId]+ subId:" + subId);
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub == null) return;
 
             ISetOpportunisticDataCallback callbackStub = new ISetOpportunisticDataCallback.Stub() {
@@ -2794,11 +2670,7 @@
     public int getPreferredDataSubscriptionId() {
         int preferredSubId = SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 preferredSubId = iSub.getPreferredDataSubscriptionId();
             }
@@ -2829,11 +2701,7 @@
         List<SubscriptionInfo> subInfoList = null;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 subInfoList = iSub.getOpportunisticSubscriptions(contextPkg, contextFeature);
             }
@@ -2934,11 +2802,7 @@
         ParcelUuid groupUuid = null;
         int[] subIdArray = subIdList.stream().mapToInt(i->i).toArray();
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 groupUuid = iSub.createSubscriptionGroup(subIdArray, pkgForDebug);
             } else {
@@ -2988,11 +2852,7 @@
         int[] subIdArray = subIdList.stream().mapToInt(i->i).toArray();
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 iSub.addSubscriptionsIntoGroup(subIdArray, groupUuid, pkgForDebug);
             } else {
@@ -3044,11 +2904,7 @@
         int[] subIdArray = subIdList.stream().mapToInt(i->i).toArray();
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 iSub.removeSubscriptionsFromGroup(subIdArray, groupUuid, pkgForDebug);
             } else {
@@ -3093,11 +2949,7 @@
 
         List<SubscriptionInfo> result = null;
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 result = iSub.getSubscriptionsInGroup(groupUuid, contextPkg, contextFeature);
             } else {
@@ -3210,11 +3062,7 @@
             logd("setSubscriptionActivated subId= " + subscriptionId + " enable " + enable);
         }
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 return iSub.setSubscriptionEnabled(enable, subscriptionId);
             }
@@ -3303,11 +3151,7 @@
     @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public boolean isSubscriptionEnabled(int subscriptionId) {
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 return iSub.isSubscriptionEnabled(subscriptionId);
             }
@@ -3330,11 +3174,7 @@
         int subId = INVALID_SUBSCRIPTION_ID;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 subId = iSub.getEnabledSubscriptionId(slotIndex);
             }
@@ -3360,11 +3200,7 @@
         int result = 0;
 
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 result = helper.callMethod(iSub);
             }
@@ -3387,11 +3223,7 @@
      */
     public static int getActiveDataSubscriptionId() {
         try {
-            ISub iSub = ISub.Stub.asInterface(
-                    TelephonyFrameworkInitializer
-                            .getTelephonyServiceManager()
-                            .getSubscriptionServiceRegisterer()
-                            .get());
+            ISub iSub = TelephonyManager.getSubscriptionService();
             if (iSub != null) {
                 return iSub.getActiveDataSubscriptionId();
             }
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index e3d031d..0660776 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -47,13 +47,13 @@
 import android.content.Intent;
 import android.database.Cursor;
 import android.net.ConnectivityManager;
-import android.net.NetworkStats;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Binder;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.IBinder;
 import android.os.PersistableBundle;
 import android.os.Process;
 import android.os.RemoteException;
@@ -93,6 +93,7 @@
 import android.util.Pair;
 
 import com.android.ims.internal.IImsServiceFeatureCallback;
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.CellNetworkScanResult;
 import com.android.internal.telephony.IBooleanConsumer;
@@ -100,6 +101,8 @@
 import com.android.internal.telephony.IOns;
 import com.android.internal.telephony.IPhoneSubInfo;
 import com.android.internal.telephony.ISetOpportunisticDataCallback;
+import com.android.internal.telephony.ISms;
+import com.android.internal.telephony.ISub;
 import com.android.internal.telephony.ITelephony;
 import com.android.internal.telephony.IUpdateAvailableNetworksCallback;
 import com.android.internal.telephony.OperatorInfo;
@@ -295,6 +298,21 @@
     private SubscriptionManager mSubscriptionManager;
     private TelephonyScanManager mTelephonyScanManager;
 
+    /** Cached service handles, cleared by resetServiceHandles() at death */
+    private static final Object sCacheLock = new Object();
+
+    /** @hide */
+    private static boolean sServiceHandleCacheEnabled = true;
+
+    @GuardedBy("sCacheLock")
+    private static IPhoneSubInfo sIPhoneSubInfo;
+    @GuardedBy("sCacheLock")
+    private static ISub sISub;
+    @GuardedBy("sCacheLock")
+    private static ISms sISms;
+    @GuardedBy("sCacheLock")
+    private static final DeathRecipient sServiceDeath = new DeathRecipient();
+
     /** Enum indicating multisim variants
      *  DSDS - Dual SIM Dual Standby
      *  DSDA - Dual SIM Dual Active
@@ -1858,24 +1876,6 @@
     //
 
     /**
-     * Returns the {@link PhoneCapability} for the device or null if it is not available.
-     * <p>
-     * Requires Permission: READ_PHONE_STATE or that the calling app has
-     * carrier privileges (see {@link #hasCarrierPrivileges}).
-     */
-    @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
-    @Nullable
-    public PhoneCapability getPhoneCapability() {
-        try {
-            ITelephony telephony = getITelephony();
-            return telephony == null ? null :
-                    telephony.getPhoneCapability(getSubId(), getOpPackageName(), getFeatureId());
-        } catch (RemoteException ex) {
-            return null;
-        }
-    }
-
-    /**
      * Returns the software version number for the device, for example,
      * the IMEI/SV for GSM phones. Return null if the software version is
      * not available.
@@ -1991,7 +1991,7 @@
     public String getDeviceId(int slotIndex) {
         // FIXME this assumes phoneId == slotIndex
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             return info.getDeviceIdForPhone(slotIndex, mContext.getOpPackageName(),
@@ -2245,7 +2245,7 @@
 
     private String getNaiBySubscriberId(int subId) {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             String nai = info.getNaiForSubscriber(subId, mContext.getOpPackageName(),
@@ -3944,7 +3944,7 @@
     @UnsupportedAppUsage
     public String getSimSerialNumber(int subId) {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             return info.getIccSerialNumberForSubscriber(subId, mContext.getOpPackageName(),
@@ -4217,7 +4217,7 @@
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
     public String getSubscriberId(int subId) {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             return info.getSubscriberIdForSubscriber(subId, mContext.getOpPackageName(),
@@ -4253,7 +4253,7 @@
     @Nullable
     public ImsiEncryptionInfo getCarrierInfoForImsiEncryption(@KeyType int keyType) {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null) {
                 Rlog.e(TAG,"IMSI error: Subscriber Info is null");
                 return null;
@@ -4296,7 +4296,7 @@
     @SystemApi
     public void resetCarrierKeysForImsiEncryption() {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null) {
                 Rlog.e(TAG, "IMSI error: Subscriber Info is null");
                 if (!isSystemProcess()) {
@@ -4361,7 +4361,7 @@
      */
     public void setCarrierInfoForImsiEncryption(ImsiEncryptionInfo imsiEncryptionInfo) {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null) return;
             info.setCarrierInfoForImsiEncryption(mSubId, mContext.getOpPackageName(),
                     imsiEncryptionInfo);
@@ -4385,7 +4385,7 @@
     @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
     public String getGroupIdLevel1() {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             return info.getGroupIdLevel1ForSubscriber(getSubId(), mContext.getOpPackageName(),
@@ -4409,7 +4409,7 @@
     @UnsupportedAppUsage
     public String getGroupIdLevel1(int subId) {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             return info.getGroupIdLevel1ForSubscriber(subId, mContext.getOpPackageName(),
@@ -4472,7 +4472,7 @@
             return number;
         }
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             return info.getLine1NumberForSubscriber(subId, mContext.getOpPackageName(),
@@ -4563,7 +4563,7 @@
             return alphaTag;
         }
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             return info.getLine1AlphaTagForSubscriber(subId, getOpPackageName(),
@@ -4651,7 +4651,7 @@
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
     public String getMsisdn(int subId) {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             return info.getMsisdnForSubscriber(subId, getOpPackageName(), getFeatureId());
@@ -4685,7 +4685,7 @@
     @UnsupportedAppUsage
     public String getVoiceMailNumber(int subId) {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             return info.getVoiceMailNumberForSubscriber(subId, getOpPackageName(),
@@ -5284,7 +5284,7 @@
     @UnsupportedAppUsage
     public String getVoiceMailAlphaTag(int subId) {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             return info.getVoiceMailAlphaTagForSubscriber(subId, getOpPackageName(),
@@ -5332,7 +5332,7 @@
     @UnsupportedAppUsage
     public String getIsimImpi() {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             //get the Isim Impi based on subId
@@ -5359,7 +5359,7 @@
     @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public String getIsimDomain() {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             //get the Isim Domain based on subId
@@ -5383,7 +5383,7 @@
     @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public String[] getIsimImpu() {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             //get the Isim Impu based on subId
@@ -5396,19 +5396,6 @@
         }
     }
 
-   /**
-    * @hide
-    */
-    @UnsupportedAppUsage
-    private IPhoneSubInfo getSubscriberInfo() {
-        // get it each time because that process crashes a lot
-        return IPhoneSubInfo.Stub.asInterface(
-                TelephonyFrameworkInitializer
-                        .getTelephonyServiceManager()
-                        .getPhoneSubServiceRegisterer()
-                        .get());
-    }
-
     /**
      * Device call state: No activity.
      */
@@ -5465,6 +5452,14 @@
     }
 
     /**
+    * @hide
+    */
+    @UnsupportedAppUsage
+    private IPhoneSubInfo getSubscriberInfo() {
+        return getSubscriberInfoService();
+    }
+
+    /**
      * Returns the Telephony call state for calls on a specific SIM slot.
      * <p>
      * Note: This method considers ONLY telephony/mobile calls, where {@link #getCallState()}
@@ -6166,9 +6161,11 @@
      * @param AID Application id. See ETSI 102.221 and 101.220.
      * @param p2 P2 parameter (described in ISO 7816-4).
      * @return an IccOpenLogicalChannelResponse object.
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.SEService#getUiccReader(int)},
+     *             {@link android.se.omapi.Reader#openSession()},
+     *             {@link android.se.omapi.Session#openLogicalChannel(byte[], byte)}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     public IccOpenLogicalChannelResponse iccOpenLogicalChannel(String AID, int p2) {
         return iccOpenLogicalChannel(getSubId(), AID, p2);
@@ -6200,9 +6197,11 @@
      * @param p2 P2 parameter (described in ISO 7816-4).
      * @return an IccOpenLogicalChannelResponse object.
      * @hide
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.SEService#getUiccReader(int)},
+     *             {@link android.se.omapi.Reader#openSession()},
+     *             {@link android.se.omapi.Session#openLogicalChannel(byte[], byte)}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     public IccOpenLogicalChannelResponse iccOpenLogicalChannel(int subId, String AID, int p2) {
         try {
@@ -6231,9 +6230,9 @@
      *            iccOpenLogicalChannel.
      * @return true if the channel was closed successfully.
      * @hide
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.Channel#close()}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
     @SystemApi
@@ -6261,9 +6260,9 @@
      * @param channel is the channel id to be closed as returned by a successful
      *            iccOpenLogicalChannel.
      * @return true if the channel was closed successfully.
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.Channel#close()}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     public boolean iccCloseLogicalChannel(int channel) {
         return iccCloseLogicalChannel(getSubId(), channel);
@@ -6283,9 +6282,9 @@
      *            iccOpenLogicalChannel.
      * @return true if the channel was closed successfully.
      * @hide
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.Channel#close()}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     public boolean iccCloseLogicalChannel(int subId, int channel) {
         try {
@@ -6322,9 +6321,9 @@
      * @return The APDU response from the ICC card with the status appended at the end, or null if
      * there is an issue connecting to the Telephony service.
      * @hide
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.Channel#transmit(byte[])}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
     @SystemApi
@@ -6363,9 +6362,9 @@
      * @param data Data to be sent with the APDU.
      * @return The APDU response from the ICC card with the status appended at
      *            the end.
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.Channel#transmit(byte[])}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     public String iccTransmitApduLogicalChannel(int channel, int cla,
             int instruction, int p1, int p2, int p3, String data) {
@@ -6395,9 +6394,9 @@
      * @return The APDU response from the ICC card with the status appended at
      *            the end.
      * @hide
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.Channel#transmit(byte[])}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     public String iccTransmitApduLogicalChannel(int subId, int channel, int cla,
             int instruction, int p1, int p2, int p3, String data) {
@@ -6434,9 +6433,12 @@
      * @return The APDU response from the ICC card with the status appended at
      *            the end.
      * @hide
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.SEService#getUiccReader(int)},
+     *             {@link android.se.omapi.Reader#openSession()},
+     *             {@link android.se.omapi.Session#openBasicChannel(byte[], byte)},
+     *             {@link android.se.omapi.Channel#transmit(byte[])}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
     @SystemApi
@@ -6473,9 +6475,12 @@
      * @param data Data to be sent with the APDU.
      * @return The APDU response from the ICC card with the status appended at
      *            the end.
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.SEService#getUiccReader(int)},
+     *             {@link android.se.omapi.Reader#openSession()},
+     *             {@link android.se.omapi.Session#openBasicChannel(byte[], byte)},
+     *             {@link android.se.omapi.Channel#transmit(byte[])}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     public String iccTransmitApduBasicChannel(int cla,
             int instruction, int p1, int p2, int p3, String data) {
@@ -6503,9 +6508,12 @@
      * @return The APDU response from the ICC card with the status appended at
      *            the end.
      * @hide
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.SEService#getUiccReader(int)},
+     *             {@link android.se.omapi.Reader#openSession()},
+     *             {@link android.se.omapi.Session#openBasicChannel(byte[], byte)},
+     *             {@link android.se.omapi.Channel#transmit(byte[])}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     public String iccTransmitApduBasicChannel(int subId, int cla,
             int instruction, int p1, int p2, int p3, String data) {
@@ -6534,9 +6542,12 @@
      * @param p3 P3 value of the APDU command.
      * @param filePath
      * @return The APDU response.
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.SEService#getUiccReader(int)},
+     *             {@link android.se.omapi.Reader#openSession()},
+     *             {@link android.se.omapi.Session#openBasicChannel(byte[], byte)},
+     *             {@link android.se.omapi.Channel#transmit(byte[])}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     public byte[] iccExchangeSimIO(int fileID, int command, int p1, int p2, int p3,
             String filePath) {
@@ -6559,9 +6570,12 @@
      * @param filePath
      * @return The APDU response.
      * @hide
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.SEService#getUiccReader(int)},
+     *             {@link android.se.omapi.Reader#openSession()},
+     *             {@link android.se.omapi.Session#openBasicChannel(byte[], byte)},
+     *             {@link android.se.omapi.Channel#transmit(byte[])}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     public byte[] iccExchangeSimIO(int subId, int fileID, int command, int p1, int p2,
             int p3, String filePath) {
@@ -6588,9 +6602,12 @@
      * @return The APDU response from the ICC card in hexadecimal format
      *         with the last 4 bytes being the status word. If the command fails,
      *         returns an empty string.
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.SEService#getUiccReader(int)},
+     *             {@link android.se.omapi.Reader#openSession()},
+     *             {@link android.se.omapi.Session#openBasicChannel(byte[], byte)},
+     *             {@link android.se.omapi.Channel#transmit(byte[])}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     public String sendEnvelopeWithStatus(String content) {
         return sendEnvelopeWithStatus(getSubId(), content);
@@ -6611,9 +6628,12 @@
      *         with the last 4 bytes being the status word. If the command fails,
      *         returns an empty string.
      * @hide
-     * @deprecated Use {@link android.se.omapi.SEService} APIs instead.
+     * @deprecated Use {@link android.se.omapi.SEService} APIs instead. See
+     *             {@link android.se.omapi.SEService#getUiccReader(int)},
+     *             {@link android.se.omapi.Reader#openSession()},
+     *             {@link android.se.omapi.Session#openBasicChannel(byte[], byte)},
+     *             {@link android.se.omapi.Channel#transmit(byte[])}.
      */
-    // TODO(b/147153909): Update Javadoc to link to specific SEService API once integrated.
     @Deprecated
     public String sendEnvelopeWithStatus(int subId, String content) {
         try {
@@ -7124,7 +7144,7 @@
     @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public String getIsimIst() {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             //get the Isim Ist based on subId
@@ -7146,7 +7166,7 @@
     @UnsupportedAppUsage
     public String[] getIsimPcscf() {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             //get the Isim Pcscf based on subId
@@ -7227,7 +7247,7 @@
     @UnsupportedAppUsage
     public String getIccAuthentication(int subId, int appType, int authType, String data) {
         try {
-            IPhoneSubInfo info = getSubscriberInfo();
+            IPhoneSubInfo info = getSubscriberInfoService();
             if (info == null)
                 return null;
             return info.getIccSimChallengeResponse(subId, appType, authType, data);
@@ -7761,9 +7781,8 @@
      *
      * @hide
      */
-    @SystemApi
     public static final int DEFAULT_PREFERRED_NETWORK_MODE =
-            RILConstants.DEFAULT_PREFERRED_NETWORK_MODE;
+            RILConstants.PREFERRED_NETWORK_MODE;
 
     /**
      * Get the preferred network type.
@@ -11069,28 +11088,6 @@
     }
 
     /**
-     * Get aggregated video call data usage since boot.
-     * Permissions android.Manifest.permission.READ_NETWORK_USAGE_HISTORY is required.
-     *
-     * @param how one of the NetworkStats.STATS_PER_* constants depending on whether the request is
-     * for data usage per uid or overall usage.
-     * @return Snapshot of video call data usage
-     * @hide
-     */
-    public NetworkStats getVtDataUsage(int how) {
-        boolean perUidStats = (how == NetworkStats.STATS_PER_UID);
-        try {
-            ITelephony service = getITelephony();
-            if (service != null) {
-                return service.getVtDataUsage(getSubId(), perUidStats);
-            }
-        } catch (RemoteException e) {
-            Log.e(TAG, "Error calling ITelephony#getVtDataUsage", e);
-        }
-        return null;
-    }
-
-    /**
      * Policy control of data connection. Usually used when data limit is passed.
      * @param enabled True if enabling the data, otherwise disabling.
      * @hide
@@ -13087,4 +13084,153 @@
             throw e.rethrowFromSystemServer();
         }
     }
+
+    private static class DeathRecipient implements IBinder.DeathRecipient {
+        @Override
+        public void binderDied() {
+            resetServiceCache();
+        }
+    }
+
+   /**
+    * Reset everything in the service cache; if one handle died then they are
+    * all probably broken.
+    * @hide
+    */
+    private static void resetServiceCache() {
+        synchronized (sCacheLock) {
+            if (sISub != null) {
+                sISub.asBinder().unlinkToDeath(sServiceDeath, 0);
+                sISub = null;
+            }
+            if (sISms != null) {
+                sISms.asBinder().unlinkToDeath(sServiceDeath, 0);
+                sISms = null;
+            }
+            if (sIPhoneSubInfo != null) {
+                sIPhoneSubInfo.asBinder().unlinkToDeath(sServiceDeath, 0);
+                sIPhoneSubInfo = null;
+            }
+        }
+    }
+
+   /**
+    * @hide
+    */
+    static IPhoneSubInfo getSubscriberInfoService() {
+        // Keeps cache disabled until test fixes are checked into AOSP.
+        if (!sServiceHandleCacheEnabled) {
+            return IPhoneSubInfo.Stub.asInterface(
+                TelephonyFrameworkInitializer
+                        .getTelephonyServiceManager()
+                        .getPhoneSubServiceRegisterer()
+                        .get());
+        }
+
+        if (sIPhoneSubInfo == null) {
+            IPhoneSubInfo temp = IPhoneSubInfo.Stub.asInterface(
+                    TelephonyFrameworkInitializer
+                        .getTelephonyServiceManager()
+                        .getPhoneSubServiceRegisterer()
+                        .get());
+            synchronized (sCacheLock) {
+                if (sIPhoneSubInfo == null && temp != null) {
+                    try {
+                        sIPhoneSubInfo = temp;
+                        sIPhoneSubInfo.asBinder().linkToDeath(sServiceDeath, 0);
+                    } catch (Exception e) {
+                        // something has gone horribly wrong
+                        sIPhoneSubInfo = null;
+                    }
+                }
+            }
+        }
+        return sIPhoneSubInfo;
+    }
+
+   /**
+    * @hide
+    */
+    static ISub getSubscriptionService() {
+        // Keeps cache disabled until test fixes are checked into AOSP.
+        if (!sServiceHandleCacheEnabled) {
+            return ISub.Stub.asInterface(
+                    TelephonyFrameworkInitializer
+                            .getTelephonyServiceManager()
+                            .getSubscriptionServiceRegisterer()
+                            .get());
+        }
+
+        if (sISub == null) {
+            ISub temp = ISub.Stub.asInterface(
+                    TelephonyFrameworkInitializer
+                            .getTelephonyServiceManager()
+                            .getSubscriptionServiceRegisterer()
+                            .get());
+            synchronized (sCacheLock) {
+                if (sISub == null && temp != null) {
+                    try {
+                        sISub = temp;
+                        sISub.asBinder().linkToDeath(sServiceDeath, 0);
+                    } catch (Exception e) {
+                        // something has gone horribly wrong
+                        sISub = null;
+                    }
+                }
+            }
+        }
+        return sISub;
+    }
+
+    /**
+    * @hide
+    */
+    static ISms getSmsService() {
+        // Keeps cache disabled until test fixes are checked into AOSP.
+        if (!sServiceHandleCacheEnabled) {
+            return ISms.Stub.asInterface(
+                    TelephonyFrameworkInitializer
+                            .getTelephonyServiceManager()
+                            .getSmsServiceRegisterer()
+                            .get());
+        }
+
+        if (sISms == null) {
+            ISms temp = ISms.Stub.asInterface(
+                    TelephonyFrameworkInitializer
+                            .getTelephonyServiceManager()
+                            .getSmsServiceRegisterer()
+                            .get());
+            synchronized (sCacheLock) {
+                if (sISms == null && temp != null) {
+                    try {
+                        sISms = temp;
+                        sISms.asBinder().linkToDeath(sServiceDeath, 0);
+                    } catch (Exception e) {
+                        // something has gone horribly wrong
+                        sISms = null;
+                    }
+                }
+            }
+        }
+        return sISms;
+    }
+
+    /**
+     * Disables service handle caching for tests that utilize mock services.
+     * @hide
+     */
+    @VisibleForTesting
+    public static void disableServiceHandleCaching() {
+        sServiceHandleCacheEnabled = false;
+    }
+
+    /**
+     * Reenables service handle caching.
+     * @hide
+     */
+    @VisibleForTesting
+    public static void enableServiceHandleCaching() {
+        sServiceHandleCacheEnabled = true;
+    }
 }
diff --git a/telephony/java/android/telephony/euicc/EuiccCardManager.java b/telephony/java/android/telephony/euicc/EuiccCardManager.java
index e16fffa..e1aec0a 100644
--- a/telephony/java/android/telephony/euicc/EuiccCardManager.java
+++ b/telephony/java/android/telephony/euicc/EuiccCardManager.java
@@ -20,6 +20,7 @@
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.content.Context;
+import android.os.Binder;
 import android.os.RemoteException;
 import android.service.euicc.EuiccProfileInfo;
 import android.telephony.TelephonyFrameworkInitializer;
@@ -168,7 +169,12 @@
                     new IGetAllProfilesCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, EuiccProfileInfo[] profiles) {
-                            executor.execute(() -> callback.onComplete(resultCode, profiles));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, profiles));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -192,7 +198,12 @@
                     new IGetProfileCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, EuiccProfileInfo profile) {
-                            executor.execute(() -> callback.onComplete(resultCode, profile));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, profile));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -217,7 +228,12 @@
                     refresh, new IDisableProfileCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode) {
-                            executor.execute(() -> callback.onComplete(resultCode, null));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, null));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -243,7 +259,12 @@
                     refresh, new ISwitchToProfileCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, EuiccProfileInfo profile) {
-                            executor.execute(() -> callback.onComplete(resultCode, profile));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, profile));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -268,7 +289,12 @@
                     nickname, new ISetNicknameCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode) {
-                            executor.execute(() -> callback.onComplete(resultCode, null));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, null));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -292,7 +318,12 @@
                     new IDeleteProfileCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode) {
-                            executor.execute(() -> callback.onComplete(resultCode, null));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, null));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -317,7 +348,12 @@
                     new IResetMemoryCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode) {
-                            executor.execute(() -> callback.onComplete(resultCode, null));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, null));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -340,7 +376,12 @@
                     new IGetDefaultSmdpAddressCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, String address) {
-                            executor.execute(() -> callback.onComplete(resultCode, address));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, address));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -363,7 +404,12 @@
                     new IGetSmdsAddressCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, String address) {
-                            executor.execute(() -> callback.onComplete(resultCode, address));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, address));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -388,7 +434,12 @@
                     new ISetDefaultSmdpAddressCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode) {
-                            executor.execute(() -> callback.onComplete(resultCode, null));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, null));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -411,7 +462,12 @@
                     new IGetRulesAuthTableCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, EuiccRulesAuthTable rat) {
-                            executor.execute(() -> callback.onComplete(resultCode, rat));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, rat));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -434,7 +490,12 @@
                     new IGetEuiccChallengeCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, byte[] challenge) {
-                            executor.execute(() -> callback.onComplete(resultCode, challenge));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, challenge));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -457,7 +518,12 @@
                     new IGetEuiccInfo1Callback.Stub() {
                         @Override
                         public void onComplete(int resultCode, byte[] info) {
-                            executor.execute(() -> callback.onComplete(resultCode, info));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, info));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -480,7 +546,12 @@
                     new IGetEuiccInfo2Callback.Stub() {
                         @Override
                         public void onComplete(int resultCode, byte[] info) {
-                            executor.execute(() -> callback.onComplete(resultCode, info));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, info));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -522,7 +593,12 @@
                     new IAuthenticateServerCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, byte[] response) {
-                            executor.execute(() -> callback.onComplete(resultCode, response));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, response));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -561,7 +637,12 @@
                     new IPrepareDownloadCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, byte[] response) {
-                            executor.execute(() -> callback.onComplete(resultCode, response));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, response));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -589,7 +670,12 @@
                     new ILoadBoundProfilePackageCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, byte[] response) {
-                            executor.execute(() -> callback.onComplete(resultCode, response));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, response));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -619,7 +705,12 @@
                     new ICancelSessionCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, byte[] response) {
-                            executor.execute(() -> callback.onComplete(resultCode, response));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, response));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -643,7 +734,13 @@
                     new IListNotificationsCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, EuiccNotification[] notifications) {
-                            executor.execute(() -> callback.onComplete(resultCode, notifications));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(
+                                        resultCode, notifications));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -667,7 +764,13 @@
                     events, new IRetrieveNotificationListCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, EuiccNotification[] notifications) {
-                            executor.execute(() -> callback.onComplete(resultCode, notifications));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(
+                                        resultCode, notifications));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -691,7 +794,13 @@
                     seqNumber, new IRetrieveNotificationCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode, EuiccNotification notification) {
-                            executor.execute(() -> callback.onComplete(resultCode, notification));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(
+                                        resultCode, notification));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
@@ -718,7 +827,12 @@
                     new IRemoveNotificationFromListCallback.Stub() {
                         @Override
                         public void onComplete(int resultCode) {
-                            executor.execute(() -> callback.onComplete(resultCode, null));
+                            final long token = Binder.clearCallingIdentity();
+                            try {
+                                executor.execute(() -> callback.onComplete(resultCode, null));
+                            } finally {
+                                Binder.restoreCallingIdentity(token);
+                            }
                         }
                     });
         } catch (RemoteException e) {
diff --git a/telephony/java/android/telephony/ims/ImsCallSession.java b/telephony/java/android/telephony/ims/ImsCallSession.java
old mode 100644
new mode 100755
index 1b583fd..80c38cb
--- a/telephony/java/android/telephony/ims/ImsCallSession.java
+++ b/telephony/java/android/telephony/ims/ImsCallSession.java
@@ -16,6 +16,8 @@
 
 package android.telephony.ims;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.os.Message;
 import android.os.RemoteException;
 import android.telephony.CallQuality;
@@ -451,6 +453,21 @@
         }
 
         /**
+         * Received success response for call transfer request.
+         */
+        public void callSessionTransferred(@NonNull ImsCallSession session) {
+            // no-op
+        }
+
+        /**
+         * Received failure response for call transfer request.
+         */
+        public void callSessionTransferFailed(@NonNull ImsCallSession session,
+                @Nullable ImsReasonInfo reasonInfo) {
+            // no-op
+        }
+
+        /**
          * Called when the IMS service reports a change to the call quality.
          */
         public void callQualityChanged(CallQuality callQuality) {
@@ -795,6 +812,41 @@
     }
 
     /**
+     * Transfers an ongoing call.
+     *
+     * @param number number to be transferred to.
+     * @param isConfirmationRequired indicates blind or assured transfer.
+     */
+    public void transfer(@NonNull String number, boolean isConfirmationRequired) {
+        if (mClosed) {
+            return;
+        }
+
+        try {
+            miSession.transfer(number, isConfirmationRequired);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
+     * Transfers a call to another ongoing call.
+     *
+     * @param transferToSession the other ImsCallSession to which this session will be transferred.
+     */
+    public void transfer(@NonNull ImsCallSession transferToSession) {
+        if (mClosed) {
+            return;
+        }
+
+        try {
+            if (transferToSession != null) {
+                miSession.consultativeTransfer(transferToSession.getSession());
+            }
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
      * Terminates a call.
      *
      * @see Listener#callSessionTerminated
@@ -1410,6 +1462,20 @@
             }
         }
 
+        @Override
+        public void callSessionTransferred() {
+            if (mListener != null) {
+                mListener.callSessionTransferred(ImsCallSession.this);
+            }
+        }
+
+        @Override
+        public void callSessionTransferFailed(@Nullable ImsReasonInfo reasonInfo) {
+            if (mListener != null) {
+                mListener.callSessionTransferFailed(ImsCallSession.this, reasonInfo);
+            }
+        }
+
         /**
          * Call quality updated
          */
diff --git a/telephony/java/android/telephony/ims/ImsRcsManager.java b/telephony/java/android/telephony/ims/ImsRcsManager.java
index d483291..c506cd5 100644
--- a/telephony/java/android/telephony/ims/ImsRcsManager.java
+++ b/telephony/java/android/telephony/ims/ImsRcsManager.java
@@ -59,6 +59,7 @@
      * @see #isAvailable(int)
      * @see #registerRcsAvailabilityCallback(Executor, AvailabilityCallback)
      * @see #unregisterRcsAvailabilityCallback(AvailabilityCallback)
+     * @hide
      */
     public static class AvailabilityCallback {
 
@@ -141,14 +142,16 @@
     /**
      * @return A {@link RcsUceAdapter} used for User Capability Exchange (UCE) operations for
      * this subscription.
-     * @hide
      */
     @NonNull
     public RcsUceAdapter getUceAdapter() {
         return new RcsUceAdapter(mSubId);
     }
 
-    /**{@inheritDoc}*/
+    /**
+     * {@inheritDoc}
+     * @hide
+     */
     @Override
     @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public void registerImsRegistrationCallback(
@@ -177,7 +180,10 @@
         }
     }
 
-    /**{@inheritDoc}*/
+    /**
+     * {@inheritDoc
+     * @hide
+     */
     @Override
     @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public void unregisterImsRegistrationCallback(
@@ -199,7 +205,10 @@
         }
     }
 
-    /**{@inheritDoc}*/
+    /**
+     * {@inheritDoc}
+     * @hide
+     */
     @Override
     @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public void getRegistrationState(@NonNull @CallbackExecutor Executor executor,
@@ -229,7 +238,10 @@
         }
     }
 
-    /**{@inheritDoc}*/
+    /**
+     * {@inheritDoc}
+     * @hide
+     */
     @Override
     @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public void getRegistrationTransportType(@NonNull @CallbackExecutor Executor executor,
@@ -280,6 +292,7 @@
      * {@link ImsRcsManager} is valid, but the ImsService associated with the subscription is not
      * available. This can happen if the ImsService has crashed, for example, or if the subscription
      * becomes inactive. See {@link ImsException#getCode()} for more information on the error codes.
+     * @hide
      */
     @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public void registerRcsAvailabilityCallback(@NonNull @CallbackExecutor Executor executor,
@@ -319,6 +332,7 @@
      * @throws ImsException if the IMS service is not available when calling this method
      * {@link ImsRcsController#unregisterRcsAvailabilityCallback()}.
      * See {@link ImsException#getCode()} for more information on the error codes.
+     * @hide
      */
     @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public void unregisterRcsAvailabilityCallback(@NonNull AvailabilityCallback c)
@@ -361,6 +375,7 @@
      * @throws ImsException if the IMS service is not available when calling this method
      * {@link ImsRcsController#isCapable(int, int)}.
      * See {@link ImsException#getCode()} for more information on the error codes.
+     * @hide
      */
     @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public boolean isCapable(@RcsFeature.RcsImsCapabilities.RcsImsCapabilityFlag int capability,
@@ -395,6 +410,7 @@
      * @throws ImsException if the IMS service is not available when calling this method
      * {@link ImsRcsController#isAvailable(int, int)}.
      * See {@link ImsException#getCode()} for more information on the error codes.
+     * @hide
      */
     @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public boolean isAvailable(@RcsFeature.RcsImsCapabilities.RcsImsCapabilityFlag int capability)
diff --git a/telephony/java/android/telephony/ims/RcsUceAdapter.java b/telephony/java/android/telephony/ims/RcsUceAdapter.java
index 72a00ce..fc7c1ee 100644
--- a/telephony/java/android/telephony/ims/RcsUceAdapter.java
+++ b/telephony/java/android/telephony/ims/RcsUceAdapter.java
@@ -51,55 +51,67 @@
 
     /**
      * An unknown error has caused the request to fail.
+     * @hide
      */
     public static final int ERROR_GENERIC_FAILURE = 1;
     /**
      * The carrier network does not have UCE support enabled for this subscriber.
+     * @hide
      */
     public static final int ERROR_NOT_ENABLED = 2;
     /**
      * The data network that the device is connected to does not support UCE currently (e.g. it is
      * 1x only currently).
+     * @hide
      */
     public static final int ERROR_NOT_AVAILABLE = 3;
     /**
      * The network has responded with SIP 403 error and a reason "User not registered."
+     * @hide
      */
     public static final int ERROR_NOT_REGISTERED = 4;
     /**
      * The network has responded to this request with a SIP 403 error and reason "not authorized for
      * presence" for this subscriber.
+     * @hide
      */
     public static final int ERROR_NOT_AUTHORIZED = 5;
     /**
      * The network has responded to this request with a SIP 403 error and no reason.
+     * @hide
      */
     public static final int ERROR_FORBIDDEN = 6;
     /**
      * The contact URI requested is not provisioned for VoLTE or it is not known as an IMS
      * subscriber to the carrier network.
+     * @hide
      */
     public static final int ERROR_NOT_FOUND = 7;
     /**
      * The capabilities request contained too many URIs for the carrier network to handle. Retry
      * with a lower number of contact numbers. The number varies per carrier.
+     * @hide
      */
     // TODO: Try to integrate this into the API so that the service will split based on carrier.
     public static final int ERROR_REQUEST_TOO_LARGE = 8;
     /**
      * The network did not respond to the capabilities request before the request timed out.
+     * @hide
      */
     public static final int ERROR_REQUEST_TIMEOUT = 10;
     /**
      * The request failed due to the service having insufficient memory.
+     * @hide
      */
     public static final int ERROR_INSUFFICIENT_MEMORY = 11;
     /**
      * The network was lost while trying to complete the request.
+     * @hide
      */
     public static final int ERROR_LOST_NETWORK = 12;
     /**
      * The request has failed because the same request has already been added to the queue.
+     * @hide
      */
     public static final int ERROR_ALREADY_IN_QUEUE = 13;
 
@@ -124,28 +136,33 @@
     /**
      * The last publish has resulted in a "200 OK" response or the device is using SIP OPTIONS for
      * UCE.
+     * @hide
      */
     public static final int PUBLISH_STATE_200_OK = 1;
 
     /**
      * The hasn't published its capabilities since boot or hasn't gotten any publish response yet.
+     * @hide
      */
     public static final int PUBLISH_STATE_NOT_PUBLISHED = 2;
 
     /**
      * The device has tried to publish its capabilities, which has resulted in an error. This error
      * is related to the fact that the device is not VoLTE provisioned.
+     * @hide
      */
     public static final int PUBLISH_STATE_VOLTE_PROVISION_ERROR = 3;
 
     /**
      * The device has tried to publish its capabilities, which has resulted in an error. This error
      * is related to the fact that the device is not RCS or UCE provisioned.
+     * @hide
      */
     public static final int PUBLISH_STATE_RCS_PROVISION_ERROR = 4;
 
     /**
      * The last publish resulted in a "408 Request Timeout" response.
+     * @hide
      */
     public static final int PUBLISH_STATE_REQUEST_TIMEOUT = 5;
 
@@ -154,6 +171,7 @@
      * or SIP 423 - "Interval too short".
      * <p>
      * Device shall retry with exponential back-off.
+     * @hide
      */
     public static final int PUBLISH_STATE_OTHER_ERROR = 6;
 
@@ -174,6 +192,7 @@
      * Provides a one-time callback for the response to a UCE request. After this callback is called
      * by the framework, the reference to this callback will be discarded on the service side.
      * @see #requestCapabilities(Executor, List, CapabilitiesCallback)
+     * @hide
      */
     public static class CapabilitiesCallback {
 
@@ -225,6 +244,7 @@
      * {@link RcsUceAdapter} is valid, but the ImsService associated with the subscription is not
      * available. This can happen if the ImsService has crashed, for example, or if the subscription
      * becomes inactive. See {@link ImsException#getCode()} for more information on the error codes.
+     * @hide
      */
     @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public void requestCapabilities(@NonNull @CallbackExecutor Executor executor,
@@ -287,6 +307,7 @@
      * {@link RcsUceAdapter} is valid, but the ImsService associated with the subscription is not
      * available. This can happen if the ImsService has crashed, for example, or if the subscription
      * becomes inactive. See {@link ImsException#getCode()} for more information on the error codes.
+     * @hide
      */
     @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     public @PublishState int getUcePublishState() throws ImsException {
@@ -307,14 +328,13 @@
     }
 
     /**
-     * The user’s setting for whether or not Presence and User Capability Exchange (UCE) is enabled
-     * for the associated subscription.
+     * The user’s setting for whether or not User Capability Exchange (UCE) is enabled for the
+     * associated subscription.
+     * <p>
+     * Note: This setting does not affect whether or not the device publishes its service
+     * capabilities if the subscription supports presence publication.
      *
-     * @return true if the user’s setting for UCE is enabled, false otherwise. If false,
-     * {@link ImsRcsManager#isCapable(int, int)} will return false for
-     * {@link RcsFeature.RcsImsCapabilities#CAPABILITY_TYPE_OPTIONS_UCE} and
-     * {@link RcsFeature.RcsImsCapabilities#CAPABILITY_TYPE_PRESENCE_UCE}
-     * @see #setUceSettingEnabled(boolean)
+     * @return true if the user’s setting for UCE is enabled, false otherwise.
      * @throws ImsException if the subscription associated with this instance of
      * {@link RcsUceAdapter} is valid, but the ImsService associated with the subscription is not
      * available. This can happen if the ImsService has crashed, for example, or if the subscription
@@ -340,12 +360,12 @@
 
     /**
      * Change the user’s setting for whether or not UCE is enabled for the associated subscription.
-     * @param isEnabled the user's setting for whether or not they wish for Presence and User
-     *         Capability Exchange to be enabled. If false,
-     *         {@link RcsFeature.RcsImsCapabilities#CAPABILITY_TYPE_OPTIONS_UCE} and
-     *         {@link RcsFeature.RcsImsCapabilities#CAPABILITY_TYPE_PRESENCE_UCE} capability will be
-     *         disabled, depending on which type of UCE the carrier supports.
-     * @see #isUceSettingEnabled()
+     * <p>
+     * Note: This setting does not affect whether or not the device publishes its service
+     * capabilities if the subscription supports presence publication.
+     *
+     * @param isEnabled the user's setting for whether or not they wish for User
+     *         Capability Exchange to be enabled.
      * @throws ImsException if the subscription associated with this instance of
      * {@link RcsUceAdapter} is valid, but the ImsService associated with the subscription is not
      * available. This can happen if the ImsService has crashed, for example, or if the subscription
diff --git a/telephony/java/android/telephony/ims/aidl/IImsCallSessionListener.aidl b/telephony/java/android/telephony/ims/aidl/IImsCallSessionListener.aidl
index cc2ebb9..36d2067 100644
--- a/telephony/java/android/telephony/ims/aidl/IImsCallSessionListener.aidl
+++ b/telephony/java/android/telephony/ims/aidl/IImsCallSessionListener.aidl
@@ -148,6 +148,12 @@
     void callSessionRttAudioIndicatorChanged(in ImsStreamMediaProfile profile);
 
     /**
+     * Notifies the result of transfer request.
+     */
+    void callSessionTransferred();
+    void callSessionTransferFailed(in ImsReasonInfo reasonInfo);
+
+    /**
      * Notifies of a change to the call quality.
      * @param callQuality then updated call quality
      */
diff --git a/telephony/java/android/telephony/ims/compat/stub/ImsCallSessionImplBase.java b/telephony/java/android/telephony/ims/compat/stub/ImsCallSessionImplBase.java
old mode 100644
new mode 100755
index 75bd6a7..06aa642
--- a/telephony/java/android/telephony/ims/compat/stub/ImsCallSessionImplBase.java
+++ b/telephony/java/android/telephony/ims/compat/stub/ImsCallSessionImplBase.java
@@ -16,6 +16,8 @@
 
 package android.telephony.ims.compat.stub;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.os.Message;
 import android.os.RemoteException;
@@ -197,6 +199,29 @@
     }
 
     /**
+     * Transfer an established call to given number, disconnecting the ongoing call
+     * when the transfer is complete.
+     *
+     * @param number number to transfer the call
+     * @param isConfirmationRequired when {@code true}, then the {@link ImsCallSessionImplBase}
+     * should wait until the transfer has successfully completed before disconnecting the current
+     * {@link ImsCallSessionImplBase}. When {@code false}, the {@link ImsCallSessionImplBase}
+     * should signal the network to perform the transfer, but should immediately disconnect the
+     * call regardless of the outcome of the transfer.
+     */
+    @Override
+    public void transfer(@NonNull String number, boolean isConfirmationRequired) {
+    }
+
+    /**
+     * Transfer an established call to an existing ongoing session.
+     * When the transfer is complete, the current call gets disconnected locally.
+     */
+    @Override
+    public void consultativeTransfer(@NonNull IImsCallSession transferToSession) {
+    }
+
+    /**
      * Rejects an incoming call or session update.
      *
      * @param reason reason code to reject an incoming call, defined in {@link ImsReasonInfo}.
@@ -610,6 +635,17 @@
         }
 
         @Override
+        public void callSessionTransferred() throws RemoteException {
+            mNewListener.callSessionTransferred();
+        }
+
+        @Override
+        public void callSessionTransferFailed(@Nullable ImsReasonInfo reasonInfo)
+                throws RemoteException {
+            mNewListener.callSessionTransferFailed(reasonInfo);
+        }
+
+        @Override
         public void callQualityChanged(CallQuality callQuality) throws RemoteException {
             mNewListener.callQualityChanged(callQuality);
         }
diff --git a/telephony/java/android/telephony/ims/feature/RcsFeature.java b/telephony/java/android/telephony/ims/feature/RcsFeature.java
index 8e67621..98b0bcf 100644
--- a/telephony/java/android/telephony/ims/feature/RcsFeature.java
+++ b/telephony/java/android/telephony/ims/feature/RcsFeature.java
@@ -193,6 +193,7 @@
      * of the capability and notify the capability status as true using
      * {@link #notifyCapabilitiesStatusChanged(RcsImsCapabilities)}. This will signal to the
      * framework that the capability is available for usage.
+     * @hide
      */
     public static class RcsImsCapabilities extends Capabilities {
         /** @hide*/
@@ -286,6 +287,7 @@
      * set, the {@link RcsFeature} has brought up the capability and is ready for framework
      * requests. To change the status of the capabilities
      * {@link #notifyCapabilitiesStatusChanged(RcsImsCapabilities)} should be called.
+     * @hide
      */
     @Override
     public @NonNull final RcsImsCapabilities queryCapabilityStatus() {
@@ -296,6 +298,7 @@
      * Notify the framework that the capabilities status has changed. If a capability is enabled,
      * this signals to the framework that the capability has been initialized and is ready.
      * Call {@link #queryCapabilityStatus()} to return the current capability status.
+     * @hide
      */
     public final void notifyCapabilitiesStatusChanged(@NonNull RcsImsCapabilities c) {
         if (c == null) {
@@ -310,6 +313,7 @@
      * {@link #changeEnabledCapabilities(CapabilityChangeRequest, CapabilityCallbackProxy)} to
      * enable or disable capability A, this method should return the correct configuration for
      * capability A afterwards (until it has changed).
+     * @hide
      */
     public boolean queryCapabilityConfiguration(
             @RcsImsCapabilities.RcsImsCapabilityFlag int capability,
@@ -331,6 +335,7 @@
      * If for some reason one or more of these capabilities can not be enabled/disabled,
      * {@link CapabilityCallbackProxy#onChangeCapabilityConfigurationError(int, int, int)} should
      * be called for each capability change that resulted in an error.
+     * @hide
      */
     @Override
     public void changeEnabledCapabilities(@NonNull CapabilityChangeRequest request,
@@ -349,6 +354,7 @@
      *
      * @return An instance of {@link RcsSipOptionsImplBase} that implements SIP options exchange if
      * it is supported by the device.
+     * @hide
      */
     public @NonNull RcsSipOptionsImplBase getOptionsExchangeImpl() {
         // Base Implementation, override to implement functionality
@@ -364,6 +370,7 @@
      *
      * @return An instance of {@link RcsPresenceExchangeImplBase} that implements presence
      * exchange if it is supported by the device.
+     * @hide
      */
     public @NonNull RcsPresenceExchangeImplBase getPresenceExchangeImpl() {
         // Base Implementation, override to implement functionality.
diff --git a/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java b/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java
index e8f69ea..73ba0e3 100644
--- a/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java
@@ -16,6 +16,7 @@
 
 package android.telephony.ims.stub;
 
+import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.annotation.TestApi;
 import android.os.Message;
@@ -183,6 +184,18 @@
         }
 
         @Override
+        public void transfer(@NonNull String number, boolean isConfirmationRequired) {
+            ImsCallSessionImplBase.this.transfer(number, isConfirmationRequired);
+        }
+
+        @Override
+        public void consultativeTransfer(@NonNull IImsCallSession transferToSession) {
+            ImsCallSessionImplBase otherSession = new ImsCallSessionImplBase();
+            otherSession.setServiceImpl(transferToSession);
+            ImsCallSessionImplBase.this.transfer(otherSession);
+        }
+
+        @Override
         public void terminate(int reason) {
             ImsCallSessionImplBase.this.terminate(reason);
         }
@@ -423,6 +436,26 @@
     }
 
     /**
+     * Transfer an established call to given number
+     *
+     * @param number number to transfer the call
+     * @param isConfirmationRequired if {@code True}, indicates Assured transfer,
+     * if {@code False} it indicates Blind transfer.
+     * @hide
+     */
+    public void transfer(@NonNull String number, boolean isConfirmationRequired) {
+    }
+
+    /**
+     * Transfer an established call to another call session
+     *
+     * @param otherSession The other ImsCallSession to transfer the ongoing session to.
+     * @hide
+     */
+    public void transfer(@NonNull ImsCallSessionImplBase otherSession) {
+    }
+
+    /**
      * Terminates a call.
      *
      * @param reason reason code to terminate a call, defined in {@link ImsReasonInfo}.
diff --git a/telephony/java/android/telephony/ims/stub/RcsCapabilityExchange.java b/telephony/java/android/telephony/ims/stub/RcsCapabilityExchange.java
index a24af2f..fda295a 100644
--- a/telephony/java/android/telephony/ims/stub/RcsCapabilityExchange.java
+++ b/telephony/java/android/telephony/ims/stub/RcsCapabilityExchange.java
@@ -17,8 +17,6 @@
 package android.telephony.ims.stub;
 
 import android.annotation.IntDef;
-import android.annotation.SystemApi;
-import android.annotation.TestApi;
 import android.os.RemoteException;
 import android.telephony.ims.ImsException;
 import android.telephony.ims.aidl.IRcsFeatureListener;
@@ -34,8 +32,6 @@
  *
  * @hide
  */
-@SystemApi
-@TestApi
 public class RcsCapabilityExchange {
 
     /**  Service is unknown. */
diff --git a/telephony/java/android/telephony/ims/stub/RcsPresenceExchangeImplBase.java b/telephony/java/android/telephony/ims/stub/RcsPresenceExchangeImplBase.java
index f200ea2..bb03448 100644
--- a/telephony/java/android/telephony/ims/stub/RcsPresenceExchangeImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/RcsPresenceExchangeImplBase.java
@@ -18,8 +18,6 @@
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
-import android.annotation.SystemApi;
-import android.annotation.TestApi;
 import android.net.Uri;
 import android.os.RemoteException;
 import android.telephony.ims.ImsException;
@@ -39,8 +37,6 @@
  *
  * @hide
  */
-@SystemApi
-@TestApi
 public class RcsPresenceExchangeImplBase extends RcsCapabilityExchange {
 
     private static final String LOG_TAG = "RcsPresenceExchangeIB";
diff --git a/telephony/java/android/telephony/ims/stub/RcsSipOptionsImplBase.java b/telephony/java/android/telephony/ims/stub/RcsSipOptionsImplBase.java
index 355c4dd..2035fac 100644
--- a/telephony/java/android/telephony/ims/stub/RcsSipOptionsImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/RcsSipOptionsImplBase.java
@@ -19,8 +19,6 @@
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.annotation.SystemApi;
-import android.annotation.TestApi;
 import android.net.Uri;
 import android.os.RemoteException;
 import android.telephony.ims.ImsException;
@@ -37,8 +35,6 @@
  *
  * @hide
  */
-@SystemApi
-@TestApi
 public class RcsSipOptionsImplBase extends RcsCapabilityExchange {
 
     private static final String LOG_TAG = "RcsSipOptionsImplBase";
diff --git a/telephony/java/com/android/ims/internal/IImsCallSession.aidl b/telephony/java/com/android/ims/internal/IImsCallSession.aidl
index 15234e5..0466efc 100644
--- a/telephony/java/com/android/ims/internal/IImsCallSession.aidl
+++ b/telephony/java/com/android/ims/internal/IImsCallSession.aidl
@@ -18,7 +18,6 @@
 
 import android.os.Message;
 import android.telephony.ims.aidl.IImsCallSessionListener;
-
 import android.telephony.ims.ImsCallProfile;
 import android.telephony.ims.ImsStreamMediaProfile;
 import com.android.ims.internal.IImsVideoCallProvider;
@@ -151,6 +150,22 @@
     void reject(int reason);
 
     /**
+     * Transfer an established call to given number
+     *
+     * @param number number to transfer the call
+     * @param isConfirmationRequired if {@code True}, indicates Assured transfer,
+     * if {@code False} it indicates Blind transfer.
+     */
+    void transfer(String number, boolean isConfirmationRequired);
+
+    /**
+     * Transfer an established call to another call session
+     *
+     * @param transferToSession The other ImsCallSession to transfer the ongoing session to.
+     */
+    void consultativeTransfer(in IImsCallSession transferToSession);
+
+    /**
      * Terminates a call.
      *
      * @see Listener#callSessionTerminated
diff --git a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl
index b33a9f1..1c62cc4 100644
--- a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl
+++ b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl
@@ -184,6 +184,12 @@
     void callSessionRttAudioIndicatorChanged(in ImsStreamMediaProfile profile);
 
     /**
+     * Notifies about the response for call transfer request.
+     */
+    void callSessionTransferred();
+
+    void callSessionTransferFailed(in ImsReasonInfo reasonInfo);
+    /**
      * Notifies of a change to the call quality.
      * @param callQuality then updated call quality
      */
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 168c8b6..861925f 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -39,7 +39,6 @@
 import android.telephony.ModemActivityInfo;
 import android.telephony.NeighboringCellInfo;
 import android.telephony.NetworkScanRequest;
-import android.telephony.PhoneCapability;
 import android.telephony.PhoneNumberRange;
 import android.telephony.RadioAccessFamily;
 import android.telephony.RadioAccessSpecifier;
@@ -1624,16 +1623,6 @@
     void carrierActionResetAll(int subId);
 
     /**
-     * Get aggregated video call data usage since boot.
-     * Permissions android.Manifest.permission.READ_NETWORK_USAGE_HISTORY is required.
-     *
-     * @param perUidStats True if requesting data usage per uid, otherwise overall usage.
-     * @return Snapshot of video call data usage
-     * @hide
-     */
-    NetworkStats getVtDataUsage(int subId, boolean perUidStats);
-
-    /**
      * Gets the voice call forwarding info {@link CallForwardingInfo}, given the call forward
      * reason.
      *
@@ -1899,17 +1888,12 @@
     /**
      * Return the network selection mode on the subscription with id {@code subId}.
      */
-    int getNetworkSelectionMode(int subId);
+     int getNetworkSelectionMode(int subId);
 
-    /**
-     * Return the PhoneCapability for the device.
-     */
-    PhoneCapability getPhoneCapability(int subId, String callingPackage, String callingFeatureId);
-
-    /**
+     /**
      * Return true if the device is in emergency sms mode, false otherwise.
      */
-    boolean isInEmergencySmsMode();
+     boolean isInEmergencySmsMode();
 
     /**
      * Return the modem radio power state for slot index.
diff --git a/telephony/java/com/android/internal/telephony/IWapPushManager.aidl b/telephony/java/com/android/internal/telephony/IWapPushManager.aidl
new file mode 100644
index 0000000..1c3df65
--- /dev/null
+++ b/telephony/java/com/android/internal/telephony/IWapPushManager.aidl
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.telephony;
+
+import android.content.Intent;
+
+interface IWapPushManager {
+    /**
+     * Processes WAP push message and triggers the receiver application registered
+     * in the application ID table.
+     */
+    int processMessage(String app_id, String content_type, in Intent intent);
+
+    /**
+     * Add receiver application into the application ID table.
+     * Returns true if inserting the information is successfull. Inserting the duplicated
+     * record in the application ID table is not allowed. Use update/delete method.
+     */
+    @UnsupportedAppUsage
+    boolean addPackage(String x_app_id, String content_type,
+            String package_name, String class_name,
+            int app_type, boolean need_signature, boolean further_processing);
+
+    /**
+     * Updates receiver application that is last added.
+     * Returns true if updating the information is successfull.
+     */
+    @UnsupportedAppUsage
+    boolean updatePackage(String x_app_id, String content_type,
+            String package_name, String class_name,
+            int app_type, boolean need_signature, boolean further_processing);
+
+    /**
+     * Delites receiver application information.
+     * Returns true if deleting is successfull.
+     */
+    @UnsupportedAppUsage
+    boolean deletePackage(String x_app_id, String content_type,
+                            String package_name, String class_name);
+}
+
diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java
index 9ac8cb1..6fdc13e 100644
--- a/telephony/java/com/android/internal/telephony/RILConstants.java
+++ b/telephony/java/com/android/internal/telephony/RILConstants.java
@@ -233,14 +233,11 @@
     /** NR 5G, LTE, TD-SCDMA, CDMA, EVDO, GSM and WCDMA */
     int NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = 33;
 
-    /** Default preferred network mode */
-    int DEFAULT_PREFERRED_NETWORK_MODE = NETWORK_MODE_WCDMA_PREF;
-
     @UnsupportedAppUsage
     int PREFERRED_NETWORK_MODE = Optional.of(TelephonyProperties.default_network())
             .filter(list -> !list.isEmpty())
             .map(list -> list.get(0))
-            .orElse(DEFAULT_PREFERRED_NETWORK_MODE);
+            .orElse(NETWORK_MODE_WCDMA_PREF);
 
     int BAND_MODE_UNSPECIFIED = 0;      //"unspecified" (selected by baseband automatically)
     int BAND_MODE_EURO = 1;             //"EURO band" (GSM-900 / DCS-1800 / WCDMA-IMT-2000)
@@ -495,6 +492,7 @@
     int RIL_REQUEST_ENABLE_UICC_APPLICATIONS = 208;
     int RIL_REQUEST_GET_UICC_APPLICATIONS_ENABLEMENT = 209;
     int RIL_REQUEST_SET_SYSTEM_SELECTION_CHANNELS = 210;
+    int RIL_REQUEST_GET_BARRING_INFO = 211;
 
     /* Responses begin */
     int RIL_RESPONSE_ACKNOWLEDGEMENT = 800;
diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java
index 6dc1e0e..c074e6e 100644
--- a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java
+++ b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java
@@ -248,10 +248,10 @@
         public int hour;
         public int monthDay;
 
-        /** Month [0-11] */
-        public int month;
+        /** Month in the range 1(Jan) - 12(Dec). */
+        public int monthOrdinal;
 
-        /** Full year. For example, 1970. */
+        /** Full year in the range 1996 - 2095. */
         public int year;
 
         private ZoneId mZoneId;
@@ -269,7 +269,7 @@
             ts.year = year >= 96 ? year + 1900 : year + 2000;
             int month = IccUtils.cdmaBcdByteToInt(data[1]);
             if (month < 1 || month > 12) return null;
-            ts.month = month - 1;
+            ts.monthOrdinal = month;
             int day = IccUtils.cdmaBcdByteToInt(data[2]);
             if (day < 1 || day > 31) return null;
             ts.monthDay = day;
@@ -292,7 +292,7 @@
             int year = localDateTime.getYear();
             if (year < 1996 || year > 2095) return null;
             ts.year = year;
-            ts.month = localDateTime.getMonthValue();
+            ts.monthOrdinal = localDateTime.getMonthValue();
             ts.monthDay = localDateTime.getDayOfMonth();
             ts.hour = localDateTime.getHour();
             ts.minute = localDateTime.getMinute();
@@ -304,7 +304,7 @@
             int year = this.year % 100; // 00 - 99
             ByteArrayOutputStream outStream = new ByteArrayOutputStream(6);
             outStream.write((((year / 10) & 0x0F) << 4) | ((year % 10) & 0x0F));
-            outStream.write((((month / 10) << 4) & 0xF0) | ((month % 10) & 0x0F));
+            outStream.write((((monthOrdinal / 10) << 4) & 0xF0) | ((monthOrdinal % 10) & 0x0F));
             outStream.write((((monthDay / 10) << 4) & 0xF0) | ((monthDay % 10) & 0x0F));
             outStream.write((((hour / 10) << 4) & 0xF0) | ((hour % 10) & 0x0F));
             outStream.write((((minute / 10) << 4) & 0xF0) | ((minute % 10) & 0x0F));
@@ -314,7 +314,7 @@
 
         public long toMillis() {
             LocalDateTime localDateTime =
-                    LocalDateTime.of(year, month + 1, monthDay, hour, minute, second);
+                    LocalDateTime.of(year, monthOrdinal, monthDay, hour, minute, second);
             Instant instant = localDateTime.toInstant(mZoneId.getRules().getOffset(localDateTime));
             return instant.toEpochMilli();
         }
@@ -325,7 +325,7 @@
             StringBuilder builder = new StringBuilder();
             builder.append("TimeStamp ");
             builder.append("{ year=" + year);
-            builder.append(", month=" + month);
+            builder.append(", month=" + monthOrdinal);
             builder.append(", day=" + monthDay);
             builder.append(", hour=" + hour);
             builder.append(", minute=" + minute);
diff --git a/tests/ApkVerityTest/src/com/android/apkverity/ApkVerityTest.java b/tests/ApkVerityTest/src/com/android/apkverity/ApkVerityTest.java
index 20d0e96..ae20cae 100644
--- a/tests/ApkVerityTest/src/com/android/apkverity/ApkVerityTest.java
+++ b/tests/ApkVerityTest/src/com/android/apkverity/ApkVerityTest.java
@@ -430,10 +430,9 @@
     private void verifyInstalledFiles(String... filenames) throws DeviceNotAvailableException {
         String apkPath = getApkPath(TARGET_PACKAGE);
         String appDir = apkPath.substring(0, apkPath.lastIndexOf("/"));
+        // Exclude directories since we only care about files.
         HashSet<String> actualFiles = new HashSet<>(Arrays.asList(
-                expectRemoteCommandToSucceed("ls " + appDir).split("\n")));
-        assertTrue(actualFiles.remove("lib"));
-        assertTrue(actualFiles.remove("oat"));
+                expectRemoteCommandToSucceed("ls -p " + appDir + " | grep -v '/'").split("\n")));
 
         HashSet<String> expectedFiles = new HashSet<>(Arrays.asList(filenames));
         assertEquals(expectedFiles, actualFiles);
diff --git a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
index 95b8f67..da45d9a 100644
--- a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
+++ b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
@@ -296,6 +296,8 @@
                     AppLaunchResult launchResults = null;
                     if (hasFailureOnFirstLaunch(launch)) {
                         // skip if the app has failures while launched first
+                        Log.w(TAG, "Has failures on first launch: " + launch.getApp());
+                        forceStopApp(launch.getApp());
                         continue;
                     }
                     AtraceLogger atraceLogger = null;
diff --git a/tests/BootImageProfileTest/AndroidTest.xml b/tests/BootImageProfileTest/AndroidTest.xml
index b4f2663..d7f8204 100644
--- a/tests/BootImageProfileTest/AndroidTest.xml
+++ b/tests/BootImageProfileTest/AndroidTest.xml
@@ -19,18 +19,8 @@
     -->
     <target_preparer
         class="com.android.tradefed.targetprep.DeviceSetup">
-        <!-- we need this magic flag, otherwise it always reboots and breaks the selinux -->
+        <!-- we need this magic flag, otherwise it always reboots and breaks selinux -->
         <option name="force-skip-system-props" value="true" />
-
-        <option name="run-command" value="device_config put runtime_native_boot profilesystemserver true" />
-        <option name="run-command" value="device_config put runtime_native_boot profilebootclasspath true" />
-
-        <!-- Profiling does not pick up the above changes we restart the shell -->
-        <option name="run-command" value="stop" />
-        <option name="run-command" value="start" />
-
-        <!-- give it some time to restart the shell; otherwise the first unit test might fail -->
-        <option name="run-command" value="sleep 2" />
     </target_preparer>
 
     <test class="com.android.tradefed.testtype.HostTest" >
diff --git a/tests/BootImageProfileTest/OWNERS b/tests/BootImageProfileTest/OWNERS
new file mode 100644
index 0000000..657b3f2
--- /dev/null
+++ b/tests/BootImageProfileTest/OWNERS
@@ -0,0 +1,4 @@
+mathieuc@google.com
+calin@google.com
+yawanng@google.com
+sehr@google.com
diff --git a/tests/BootImageProfileTest/src/com/android/bootimageprofile/BootImageProfileTest.java b/tests/BootImageProfileTest/src/com/android/bootimageprofile/BootImageProfileTest.java
index 10f3e54..1c8b6be 100644
--- a/tests/BootImageProfileTest/src/com/android/bootimageprofile/BootImageProfileTest.java
+++ b/tests/BootImageProfileTest/src/com/android/bootimageprofile/BootImageProfileTest.java
@@ -42,10 +42,9 @@
     }
 
     /**
-     * Test that the boot image profile properties are set.
+     * Validate that the boot image profile properties are set.
      */
-    @Test
-    public void testProperties() throws Exception {
+    public void validateProperties() throws Exception {
         String res = mTestDevice.getProperty(
                 "persist.device_config.runtime_native_boot.profilebootclasspath");
         assertTrue("profile boot class path not enabled", res != null && res.equals("true"));
@@ -67,13 +66,37 @@
 
     @Test
     public void testSystemServerProfile() throws Exception {
+        final int numIterations = 20;
+        for (int i = 1; i <= numIterations; ++i) {
+            String res;
+            res = mTestDevice.getProperty(
+                    "persist.device_config.runtime_native_boot.profilebootclasspath");
+            boolean profileBootClassPath = res != null && res.equals("true");
+            res = mTestDevice.getProperty(
+                    "persist.device_config.runtime_native_boot.profilesystemserver");
+            boolean profileSystemServer = res != null && res.equals("true");
+            if (profileBootClassPath && profileSystemServer) {
+                break;
+            }
+            if (i == numIterations) {
+                assertTrue("profile system server not enabled", profileSystemServer);
+                assertTrue("profile boot class path not enabled", profileSystemServer);
+            }
+
+            res = mTestDevice.executeShellCommand(
+                    "device_config put runtime_native_boot profilebootclasspath true");
+            res = mTestDevice.executeShellCommand(
+                    "device_config put runtime_native_boot profilesystemserver true");
+            res = mTestDevice.executeShellCommand("stop");
+            res = mTestDevice.executeShellCommand("start");
+            Thread.sleep(5000);
+        }
         // Trunacte the profile before force it to be saved to prevent previous profiles
         // causing the test to pass.
         String res;
         res = mTestDevice.executeShellCommand("truncate -s 0 " + SYSTEM_SERVER_PROFILE).trim();
         assertTrue(res, res.length() == 0);
         // Wait up to 20 seconds for the profile to be saved.
-        final int numIterations = 20;
         for (int i = 1; i <= numIterations; ++i) {
             // Force save the profile since we truncated it.
             if (forceSaveProfile("system_server")) {
@@ -89,6 +112,9 @@
             // In case the profile is partially saved, wait an extra second.
             Thread.sleep(1000);
 
+            // Validate that properties are still set.
+            validateProperties();
+
             // Validate that the profile is non empty.
             res = mTestDevice.executeShellCommand("profman --dump-only --profile-file="
                     + SYSTEM_SERVER_PROFILE);
diff --git a/tests/MemoryUsage/src/com/android/tests/memoryusage/MemoryUsageTest.java b/tests/MemoryUsage/src/com/android/tests/memoryusage/MemoryUsageTest.java
index 1361df3..5904916 100644
--- a/tests/MemoryUsage/src/com/android/tests/memoryusage/MemoryUsageTest.java
+++ b/tests/MemoryUsage/src/com/android/tests/memoryusage/MemoryUsageTest.java
@@ -321,7 +321,8 @@
                 }
 
                 mAtm.startActivityAndWait(null,
-                        getInstrumentation().getContext().getBasePackageName(), mLaunchIntent,
+                        getInstrumentation().getContext().getBasePackageName(),
+                        getInstrumentation().getContext().getFeatureId(), mLaunchIntent,
                         mimeType, null, null, 0, mLaunchIntent.getFlags(), null, null,
                         UserHandle.USER_CURRENT_OR_SELF);
             } catch (RemoteException e) {
diff --git a/tests/PlatformCompatGating/Android.bp b/tests/PlatformCompatGating/Android.bp
index 74dfde8..342c47d 100644
--- a/tests/PlatformCompatGating/Android.bp
+++ b/tests/PlatformCompatGating/Android.bp
@@ -18,6 +18,7 @@
     name: "PlatformCompatGating",
     // Only compile source java files in this apk.
     srcs: ["src/**/*.java"],
+    test_suites: ["device-tests"],
     static_libs: [
         "junit",
         "androidx.test.runner",
diff --git a/tests/RollbackTest/Android.bp b/tests/RollbackTest/Android.bp
index 98e7b4e..24623fb 100644
--- a/tests/RollbackTest/Android.bp
+++ b/tests/RollbackTest/Android.bp
@@ -29,13 +29,22 @@
     name: "StagedRollbackTest",
     srcs: ["StagedRollbackTest/src/**/*.java"],
     libs: ["tradefed"],
-    static_libs: ["testng", "compatibility-tradefed"],
+    static_libs: ["testng", "compatibility-tradefed", "RollbackTestLib"],
     test_suites: ["general-tests"],
     test_config: "StagedRollbackTest.xml",
     data: [":com.android.apex.apkrollback.test_v1"],
 }
 
 java_test_host {
+    name: "NetworkStagedRollbackTest",
+    srcs: ["NetworkStagedRollbackTest/src/**/*.java"],
+    libs: ["tradefed"],
+    static_libs: ["testng", "RollbackTestLib"],
+    test_suites: ["general-tests"],
+    test_config: "NetworkStagedRollbackTest.xml",
+}
+
+java_test_host {
     name: "MultiUserRollbackTest",
     srcs: ["MultiUserRollbackTest/src/**/*.java"],
     libs: ["tradefed"],
@@ -43,6 +52,12 @@
     test_config: "MultiUserRollbackTest.xml",
 }
 
+java_library_host {
+    name: "RollbackTestLib",
+    srcs: ["lib/src/**/*.java"],
+    libs: ["tradefed"],
+}
+
 genrule {
   name: "com.android.apex.apkrollback.test.pem",
   out: ["com.android.apex.apkrollback.test.pem"],
diff --git a/tests/RollbackTest/NetworkStagedRollbackTest.xml b/tests/RollbackTest/NetworkStagedRollbackTest.xml
new file mode 100644
index 0000000..a465a4f
--- /dev/null
+++ b/tests/RollbackTest/NetworkStagedRollbackTest.xml
@@ -0,0 +1,25 @@
+<?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.
+-->
+<configuration description="Runs the network staged rollback tests">
+    <option name="test-suite-tag" value="NetworkStagedRollbackTest" />
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="RollbackTest.apk" />
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.HostTest" >
+        <option name="class" value="com.android.tests.rollback.host.NetworkStagedRollbackTest" />
+    </test>
+</configuration>
diff --git a/tests/RollbackTest/NetworkStagedRollbackTest/src/com/android/tests/rollback/host/NetworkStagedRollbackTest.java b/tests/RollbackTest/NetworkStagedRollbackTest/src/com/android/tests/rollback/host/NetworkStagedRollbackTest.java
new file mode 100644
index 0000000..d4e34f9
--- /dev/null
+++ b/tests/RollbackTest/NetworkStagedRollbackTest/src/com/android/tests/rollback/host/NetworkStagedRollbackTest.java
@@ -0,0 +1,130 @@
+/*
+ * 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.tests.rollback.host;
+
+import static com.android.tests.rollback.host.WatchdogEventLogger.watchdogEventOccurred;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.testng.Assert.assertThrows;
+
+import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.List;
+
+/**
+ * Runs the network rollback tests.
+ */
+@RunWith(DeviceJUnit4ClassRunner.class)
+public class NetworkStagedRollbackTest extends BaseHostJUnit4Test {
+    /**
+     * Runs the given phase of a test by calling into the device.
+     * Throws an exception if the test phase fails.
+     * <p>
+     * For example, <code>runPhase("testApkOnlyEnableRollback");</code>
+     */
+    private void runPhase(String phase) throws Exception {
+        assertTrue(runDeviceTests("com.android.tests.rollback",
+                "com.android.tests.rollback.NetworkStagedRollbackTest",
+                phase));
+    }
+
+    private static final String REASON_EXPLICIT_HEALTH_CHECK = "REASON_EXPLICIT_HEALTH_CHECK";
+
+    private static final String ROLLBACK_INITIATE = "ROLLBACK_INITIATE";
+    private static final String ROLLBACK_BOOT_TRIGGERED = "ROLLBACK_BOOT_TRIGGERED";
+
+    private WatchdogEventLogger mLogger = new WatchdogEventLogger();
+
+    @Before
+    public void setUp() throws Exception {
+        mLogger.start(getDevice());
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        mLogger.stop();
+    }
+
+    /**
+     * Tests failed network health check triggers watchdog staged rollbacks.
+     */
+    @Test
+    public void testNetworkFailedRollback() throws Exception {
+        try {
+            // Disconnect internet so we can test network health triggered rollbacks
+            getDevice().executeShellCommand("svc wifi disable");
+            getDevice().executeShellCommand("svc data disable");
+
+            runPhase("testNetworkFailedRollback_Phase1");
+            // Reboot device to activate staged package
+            getDevice().reboot();
+
+            // Verify rollback was enabled
+            runPhase("testNetworkFailedRollback_Phase2");
+            assertThrows(AssertionError.class, () -> runPhase("testNetworkFailedRollback_Phase3"));
+
+            getDevice().waitForDeviceAvailable();
+            // Verify rollback was executed after health check deadline
+            runPhase("testNetworkFailedRollback_Phase4");
+
+            List<String> watchdogEvents = mLogger.getWatchdogLoggingEvents();
+            assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_INITIATE, null,
+                    REASON_EXPLICIT_HEALTH_CHECK, null));
+            assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_BOOT_TRIGGERED, null,
+                    null, null));
+        } finally {
+            // Reconnect internet again so we won't break tests which assume internet available
+            getDevice().executeShellCommand("svc wifi enable");
+            getDevice().executeShellCommand("svc data enable");
+        }
+    }
+
+    /**
+     * Tests passed network health check does not trigger watchdog staged rollbacks.
+     */
+    @Test
+    public void testNetworkPassedDoesNotRollback() throws Exception {
+        runPhase("testNetworkPassedDoesNotRollback_Phase1");
+        // Reboot device to activate staged package
+        getDevice().reboot();
+
+        // Verify rollback was enabled
+        runPhase("testNetworkPassedDoesNotRollback_Phase2");
+
+        // Connect to internet so network health check passes
+        getDevice().executeShellCommand("svc wifi enable");
+        getDevice().executeShellCommand("svc data enable");
+
+        // Wait for device available because emulator device may restart after turning
+        // on mobile data
+        getDevice().waitForDeviceAvailable();
+
+        // Verify rollback was not executed after health check deadline
+        runPhase("testNetworkPassedDoesNotRollback_Phase3");
+
+        List<String> watchdogEvents = mLogger.getWatchdogLoggingEvents();
+        assertEquals(watchdogEventOccurred(watchdogEvents, null, null,
+                REASON_EXPLICIT_HEALTH_CHECK, null), false);
+    }
+}
diff --git a/tests/RollbackTest/RollbackTest.xml b/tests/RollbackTest/RollbackTest.xml
index a14b01c..f2c0f86 100644
--- a/tests/RollbackTest/RollbackTest.xml
+++ b/tests/RollbackTest/RollbackTest.xml
@@ -22,9 +22,9 @@
         <option name="package" value="com.android.tests.rollback" />
         <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
 
-        <!-- Exclude the StagedRollbackTest and MultiUserRollbackTest tests, which need to be
-             specially driven from the StagedRollbackTest and MultiUserRollbackTest host test -->
+        <!-- Exclude the device tests which need to be specially driven from the host tests -->
         <option name="exclude-filter" value="com.android.tests.rollback.StagedRollbackTest" />
+        <option name="exclude-filter" value="com.android.tests.rollback.NetworkStagedRollbackTest" />
         <option name="exclude-filter" value="com.android.tests.rollback.MultiUserRollbackTest" />
     </test>
 </configuration>
diff --git a/tests/RollbackTest/RollbackTest/AndroidManifest.xml b/tests/RollbackTest/RollbackTest/AndroidManifest.xml
index 2b8c964..9274da2 100644
--- a/tests/RollbackTest/RollbackTest/AndroidManifest.xml
+++ b/tests/RollbackTest/RollbackTest/AndroidManifest.xml
@@ -17,6 +17,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.tests.rollback" >
 
+    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
     <application>
         <receiver android:name="com.android.cts.install.lib.LocalIntentSender"
                   android:exported="true" />
diff --git a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/NetworkStagedRollbackTest.java b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/NetworkStagedRollbackTest.java
new file mode 100644
index 0000000..35bc65a
--- /dev/null
+++ b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/NetworkStagedRollbackTest.java
@@ -0,0 +1,197 @@
+/*
+ * 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.tests.rollback;
+
+import static com.android.cts.rollback.lib.RollbackInfoSubject.assertThat;
+import static com.android.cts.rollback.lib.RollbackUtils.getUniqueRollbackInfoForPackage;
+
+import android.Manifest;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.rollback.RollbackManager;
+import android.os.ParcelFileDescriptor;
+import android.provider.DeviceConfig;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.cts.install.lib.Install;
+import com.android.cts.install.lib.InstallUtils;
+import com.android.cts.install.lib.TestApp;
+import com.android.cts.rollback.lib.RollbackUtils;
+
+import libcore.io.IoUtils;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.io.File;
+import java.util.concurrent.TimeUnit;
+
+@RunWith(JUnit4.class)
+public class NetworkStagedRollbackTest {
+    private static final String NETWORK_STACK_CONNECTOR_CLASS =
+            "android.net.INetworkStackConnector";
+    private static final String PROPERTY_WATCHDOG_REQUEST_TIMEOUT_MILLIS =
+            "watchdog_request_timeout_millis";
+
+    private static final TestApp NETWORK_STACK = new TestApp("NetworkStack",
+            getNetworkStackPackageName(), -1, false, findNetworkStackApk());
+
+    private static File findNetworkStackApk() {
+        final File apk = new File("/system/priv-app/NetworkStack/NetworkStack.apk");
+        if (apk.isFile()) {
+            return apk;
+        }
+        return new File("/system/priv-app/NetworkStackNext/NetworkStackNext.apk");
+    }
+
+    /**
+     * Adopts common shell permissions needed for rollback tests.
+     */
+    @Before
+    public void adoptShellPermissions() {
+        InstallUtils.adoptShellPermissionIdentity(
+                Manifest.permission.INSTALL_PACKAGES,
+                Manifest.permission.DELETE_PACKAGES,
+                Manifest.permission.TEST_MANAGE_ROLLBACKS,
+                Manifest.permission.FORCE_STOP_PACKAGES,
+                Manifest.permission.WRITE_DEVICE_CONFIG);
+    }
+
+    /**
+     * Drops shell permissions needed for rollback tests.
+     */
+    @After
+    public void dropShellPermissions() {
+        InstallUtils.dropShellPermissionIdentity();
+    }
+
+    @Test
+    public void testNetworkFailedRollback_Phase1() throws Exception {
+        // Remove available rollbacks and uninstall NetworkStack on /data/
+        RollbackManager rm = RollbackUtils.getRollbackManager();
+        String networkStack = getNetworkStackPackageName();
+
+        rm.expireRollbackForPackage(networkStack);
+        uninstallNetworkStackPackage();
+
+        assertThat(getUniqueRollbackInfoForPackage(rm.getAvailableRollbacks(),
+                networkStack)).isNull();
+
+        // Reduce health check deadline
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ROLLBACK,
+                PROPERTY_WATCHDOG_REQUEST_TIMEOUT_MILLIS,
+                Integer.toString(120000), false);
+        // Simulate re-installation of new NetworkStack with rollbacks enabled
+        installNetworkStackPackage();
+    }
+
+    @Test
+    public void testNetworkFailedRollback_Phase2() throws Exception {
+        RollbackManager rm = RollbackUtils.getRollbackManager();
+        assertThat(getUniqueRollbackInfoForPackage(rm.getAvailableRollbacks(),
+                getNetworkStackPackageName())).isNotNull();
+
+        // Sleep for < health check deadline
+        Thread.sleep(TimeUnit.SECONDS.toMillis(5));
+        // Verify rollback was not executed before health check deadline
+        assertThat(getUniqueRollbackInfoForPackage(rm.getRecentlyCommittedRollbacks(),
+                getNetworkStackPackageName())).isNull();
+    }
+
+    @Test
+    public void testNetworkFailedRollback_Phase3() throws Exception {
+        // Sleep for > health check deadline (120s to trigger rollback + 120s to reboot)
+        // The device is expected to reboot during sleeping. This device method will fail and
+        // the host will catch the assertion. If reboot doesn't happen, the host will fail the
+        // assertion.
+        Thread.sleep(TimeUnit.SECONDS.toMillis(240));
+    }
+
+    @Test
+    public void testNetworkFailedRollback_Phase4() throws Exception {
+        RollbackManager rm = RollbackUtils.getRollbackManager();
+        assertThat(getUniqueRollbackInfoForPackage(rm.getRecentlyCommittedRollbacks(),
+                getNetworkStackPackageName())).isNotNull();
+    }
+
+    private static String getNetworkStackPackageName() {
+        Intent intent = new Intent(NETWORK_STACK_CONNECTOR_CLASS);
+        ComponentName comp = intent.resolveSystemService(
+                InstrumentationRegistry.getInstrumentation().getContext().getPackageManager(), 0);
+        return comp.getPackageName();
+    }
+
+    private static void installNetworkStackPackage() throws Exception {
+        Install.single(NETWORK_STACK).setStaged().setEnableRollback()
+                .addInstallFlags(PackageManager.INSTALL_REPLACE_EXISTING).commit();
+    }
+
+    private static void uninstallNetworkStackPackage() {
+        // Uninstall the package as a privileged user so we won't fail due to permission.
+        runShellCommand("pm uninstall " + getNetworkStackPackageName());
+    }
+
+    @Test
+    public void testNetworkPassedDoesNotRollback_Phase1() throws Exception {
+        // Remove available rollbacks and uninstall NetworkStack on /data/
+        RollbackManager rm = RollbackUtils.getRollbackManager();
+        String networkStack = getNetworkStackPackageName();
+
+        rm.expireRollbackForPackage(networkStack);
+        uninstallNetworkStackPackage();
+
+        assertThat(getUniqueRollbackInfoForPackage(rm.getAvailableRollbacks(),
+                networkStack)).isNull();
+
+        // Reduce health check deadline, here unlike the network failed case, we use
+        // a longer deadline because joining a network can take a much longer time for
+        // reasons external to the device than 'not joining'
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ROLLBACK,
+                PROPERTY_WATCHDOG_REQUEST_TIMEOUT_MILLIS,
+                Integer.toString(300000), false);
+        // Simulate re-installation of new NetworkStack with rollbacks enabled
+        installNetworkStackPackage();
+    }
+
+    @Test
+    public void testNetworkPassedDoesNotRollback_Phase2() throws Exception {
+        RollbackManager rm = RollbackUtils.getRollbackManager();
+        assertThat(getUniqueRollbackInfoForPackage(rm.getAvailableRollbacks(),
+                getNetworkStackPackageName())).isNotNull();
+    }
+
+    @Test
+    public void testNetworkPassedDoesNotRollback_Phase3() throws Exception {
+        // Sleep for > health check deadline. We expect no rollback should happen during sleeping.
+        // If the device reboots for rollback, this device test will fail as well as the host test.
+        Thread.sleep(TimeUnit.SECONDS.toMillis(310));
+        RollbackManager rm = RollbackUtils.getRollbackManager();
+        assertThat(getUniqueRollbackInfoForPackage(rm.getRecentlyCommittedRollbacks(),
+                getNetworkStackPackageName())).isNull();
+    }
+
+    private static void runShellCommand(String cmd) {
+        ParcelFileDescriptor pfd = InstrumentationRegistry.getInstrumentation().getUiAutomation()
+                .executeShellCommand(cmd);
+        IoUtils.closeQuietly(pfd);
+    }
+}
diff --git a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java
index 0fdcbc5..70be83f 100644
--- a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java
+++ b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java
@@ -22,14 +22,11 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import android.Manifest;
-import android.content.ComponentName;
 import android.content.Context;
-import android.content.Intent;
 import android.content.pm.PackageInstaller;
 import android.content.pm.PackageManager;
 import android.content.rollback.RollbackInfo;
 import android.content.rollback.RollbackManager;
-import android.os.ParcelFileDescriptor;
 import android.os.storage.StorageManager;
 import android.provider.DeviceConfig;
 
@@ -44,8 +41,6 @@
 import com.android.cts.rollback.lib.RollbackUtils;
 import com.android.internal.R;
 
-import libcore.io.IoUtils;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -65,24 +60,8 @@
  */
 @RunWith(JUnit4.class)
 public class StagedRollbackTest {
-
-    private static final String NETWORK_STACK_CONNECTOR_CLASS =
-            "android.net.INetworkStackConnector";
     private static final String PROPERTY_WATCHDOG_TRIGGER_FAILURE_COUNT =
             "watchdog_trigger_failure_count";
-    private static final String PROPERTY_WATCHDOG_REQUEST_TIMEOUT_MILLIS =
-            "watchdog_request_timeout_millis";
-
-    private static final TestApp NETWORK_STACK = new TestApp("NetworkStack",
-            getNetworkStackPackageName(), -1, false, findNetworkStackApk());
-
-    private static File findNetworkStackApk() {
-        final File apk = new File("/system/priv-app/NetworkStack/NetworkStack.apk");
-        if (apk.isFile()) {
-            return apk;
-        }
-        return new File("/system/priv-app/NetworkStackNext/NetworkStackNext.apk");
-    }
 
     /**
      * Adopts common shell permissions needed for rollback tests.
@@ -275,72 +254,6 @@
     }
 
     @Test
-    public void testNetworkFailedRollback_Phase1() throws Exception {
-        // Remove available rollbacks and uninstall NetworkStack on /data/
-        RollbackManager rm = RollbackUtils.getRollbackManager();
-        String networkStack = getNetworkStackPackageName();
-
-        rm.expireRollbackForPackage(networkStack);
-        uninstallNetworkStackPackage();
-
-        assertThat(getUniqueRollbackInfoForPackage(rm.getAvailableRollbacks(),
-                        networkStack)).isNull();
-
-        // Reduce health check deadline
-        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ROLLBACK,
-                PROPERTY_WATCHDOG_REQUEST_TIMEOUT_MILLIS,
-                Integer.toString(120000), false);
-        // Simulate re-installation of new NetworkStack with rollbacks enabled
-        installNetworkStackPackage();
-    }
-
-    @Test
-    public void testNetworkFailedRollback_Phase2() throws Exception {
-        RollbackManager rm = RollbackUtils.getRollbackManager();
-        assertThat(getUniqueRollbackInfoForPackage(rm.getAvailableRollbacks(),
-                        getNetworkStackPackageName())).isNotNull();
-
-        // Sleep for < health check deadline
-        Thread.sleep(TimeUnit.SECONDS.toMillis(5));
-        // Verify rollback was not executed before health check deadline
-        assertThat(getUniqueRollbackInfoForPackage(rm.getRecentlyCommittedRollbacks(),
-                        getNetworkStackPackageName())).isNull();
-    }
-
-    @Test
-    public void testNetworkFailedRollback_Phase3() throws Exception {
-        // Sleep for > health check deadline (120s to trigger rollback + 120s to reboot)
-        // The device is expected to reboot during sleeping. This device method will fail and
-        // the host will catch the assertion. If reboot doesn't happen, the host will fail the
-        // assertion.
-        Thread.sleep(TimeUnit.SECONDS.toMillis(240));
-    }
-
-    @Test
-    public void testNetworkFailedRollback_Phase4() throws Exception {
-        RollbackManager rm = RollbackUtils.getRollbackManager();
-        assertThat(getUniqueRollbackInfoForPackage(rm.getRecentlyCommittedRollbacks(),
-                        getNetworkStackPackageName())).isNotNull();
-    }
-
-    private static String getNetworkStackPackageName() {
-        Intent intent = new Intent(NETWORK_STACK_CONNECTOR_CLASS);
-        ComponentName comp = intent.resolveSystemService(
-                InstrumentationRegistry.getInstrumentation().getContext().getPackageManager(), 0);
-        return comp.getPackageName();
-    }
-
-    private static void installNetworkStackPackage() throws Exception {
-        Install.single(NETWORK_STACK).setStaged().setEnableRollback()
-                .addInstallFlags(PackageManager.INSTALL_REPLACE_EXISTING).commit();
-    }
-
-    private static void uninstallNetworkStackPackage() {
-        // Uninstall the package as a privileged user so we won't fail due to permission.
-        runShellCommand("pm uninstall " + getNetworkStackPackageName());
-    }
-
-    @Test
     public void testPreviouslyAbandonedRollbacks_Phase1() throws Exception {
         Uninstall.packages(TestApp.A);
         Install.single(TestApp.A1).commit();
@@ -376,45 +289,6 @@
         Uninstall.packages(TestApp.A);
     }
 
-    @Test
-    public void testNetworkPassedDoesNotRollback_Phase1() throws Exception {
-        // Remove available rollbacks and uninstall NetworkStack on /data/
-        RollbackManager rm = RollbackUtils.getRollbackManager();
-        String networkStack = getNetworkStackPackageName();
-
-        rm.expireRollbackForPackage(networkStack);
-        uninstallNetworkStackPackage();
-
-        assertThat(getUniqueRollbackInfoForPackage(rm.getAvailableRollbacks(),
-                        networkStack)).isNull();
-
-        // Reduce health check deadline, here unlike the network failed case, we use
-        // a longer deadline because joining a network can take a much longer time for
-        // reasons external to the device than 'not joining'
-        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ROLLBACK,
-                PROPERTY_WATCHDOG_REQUEST_TIMEOUT_MILLIS,
-                Integer.toString(300000), false);
-        // Simulate re-installation of new NetworkStack with rollbacks enabled
-        installNetworkStackPackage();
-    }
-
-    @Test
-    public void testNetworkPassedDoesNotRollback_Phase2() throws Exception {
-        RollbackManager rm = RollbackUtils.getRollbackManager();
-        assertThat(getUniqueRollbackInfoForPackage(rm.getAvailableRollbacks(),
-                        getNetworkStackPackageName())).isNotNull();
-    }
-
-    @Test
-    public void testNetworkPassedDoesNotRollback_Phase3() throws Exception {
-        // Sleep for > health check deadline. We expect no rollback should happen during sleeping.
-        // If the device reboots for rollback, this device test will fail as well as the host test.
-        Thread.sleep(TimeUnit.SECONDS.toMillis(310));
-        RollbackManager rm = RollbackUtils.getRollbackManager();
-        assertThat(getUniqueRollbackInfoForPackage(rm.getRecentlyCommittedRollbacks(),
-                        getNetworkStackPackageName())).isNull();
-    }
-
     private static String getModuleMetadataPackageName() {
         return InstrumentationRegistry.getInstrumentation().getContext()
                 .getResources().getString(R.string.config_defaultModuleMetadataProvider);
@@ -603,12 +477,6 @@
         InstallUtils.waitForSessionReady(committed.getCommittedSessionId());
     }
 
-    private static void runShellCommand(String cmd) {
-        ParcelFileDescriptor pfd = InstrumentationRegistry.getInstrumentation().getUiAutomation()
-                .executeShellCommand(cmd);
-        IoUtils.closeQuietly(pfd);
-    }
-
     @Test
     public void isCheckpointSupported() {
         Context context = InstrumentationRegistry.getInstrumentation().getContext();
diff --git a/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java b/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java
index 032f182..43759cf 100644
--- a/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java
+++ b/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java
@@ -16,6 +16,8 @@
 
 package com.android.tests.rollback.host;
 
+import static com.android.tests.rollback.host.WatchdogEventLogger.watchdogEventOccurred;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
@@ -23,21 +25,17 @@
 import static org.testng.Assert.assertThrows;
 
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
-import com.android.tradefed.device.LogcatReceiver;
-import com.android.tradefed.result.InputStreamSource;
 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
 import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
+import com.android.tradefed.util.CommandResult;
+import com.android.tradefed.util.CommandStatus;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import java.io.BufferedReader;
 import java.io.File;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -83,42 +81,50 @@
     private static final String ROLLBACK_INITIATE = "ROLLBACK_INITIATE";
     private static final String ROLLBACK_BOOT_TRIGGERED = "ROLLBACK_BOOT_TRIGGERED";
 
-    private LogcatReceiver mReceiver;
+    private WatchdogEventLogger mLogger = new WatchdogEventLogger();
 
     @Before
     public void setUp() throws Exception {
-        mReceiver =  new LogcatReceiver(getDevice(), "logcat -s WatchdogRollbackLogger",
-                getDevice().getOptions().getMaxLogcatDataSize(), 0);
-        if (!getDevice().isAdbRoot()) {
-            getDevice().enableAdbRoot();
-        }
-        getDevice().remountSystemWritable();
-        getDevice().executeShellCommand(
-                "rm -f /system/apex/" + APK_IN_APEX_TESTAPEX_NAME + "*.apex "
-                        + "/data/apex/active/" + APK_IN_APEX_TESTAPEX_NAME + "*.apex");
-        getDevice().reboot();
+        deleteFiles("/system/apex/" + APK_IN_APEX_TESTAPEX_NAME + "*.apex",
+                "/data/apex/active/" + APK_IN_APEX_TESTAPEX_NAME + "*.apex");
         runPhase("testCleanUp");
-        mReceiver.start();
+        mLogger.start(getDevice());
     }
 
     @After
     public void tearDown() throws Exception {
-        mReceiver.stop();
-        mReceiver.clear();
+        mLogger.stop();
         runPhase("testCleanUp");
+        deleteFiles("/system/apex/" + APK_IN_APEX_TESTAPEX_NAME + "*.apex",
+                "/data/apex/active/" + APK_IN_APEX_TESTAPEX_NAME + "*.apex",
+                apexDataDirDeSys(APK_IN_APEX_TESTAPEX_NAME) + "*",
+                apexDataDirCe(APK_IN_APEX_TESTAPEX_NAME, 0) + "*");
+    }
 
-        if (!getDevice().isAdbRoot()) {
-            getDevice().enableAdbRoot();
+    /**
+     * Deletes files and reboots the device if necessary.
+     * @param files the paths of files which might contain wildcards
+     */
+    private void deleteFiles(String... files) throws Exception {
+        boolean found = false;
+        for (String file : files) {
+            CommandResult result = getDevice().executeShellV2Command("ls " + file);
+            if (result.getStatus() == CommandStatus.SUCCESS) {
+                found = true;
+                break;
+            }
         }
-        getDevice().remountSystemWritable();
-        getDevice().executeShellCommand(
-                "rm -f /system/apex/" + APK_IN_APEX_TESTAPEX_NAME + "*.apex "
-                        + "/data/apex/active/" + APK_IN_APEX_TESTAPEX_NAME + "*.apex");
-        getDevice().executeShellCommand(
-                "rm -rf " + apexDataDirDeSys(APK_IN_APEX_TESTAPEX_NAME) + "*");
-        getDevice().executeShellCommand(
-                "rm -rf " + apexDataDirCe(APK_IN_APEX_TESTAPEX_NAME, 0) + "*");
-        getDevice().reboot();
+
+        if (found) {
+            if (!getDevice().isAdbRoot()) {
+                getDevice().enableAdbRoot();
+            }
+            getDevice().remountSystemWritable();
+            for (String file : files) {
+                getDevice().executeShellCommand("rm -rf " + file);
+            }
+            getDevice().reboot();
+        }
     }
 
     /**
@@ -134,16 +140,12 @@
         getDevice().waitForDeviceAvailable();
 
         runPhase("testBadApkOnly_Phase4");
-        InputStreamSource logcatStream = mReceiver.getLogcatData();
-        try {
-            List<String> watchdogEvents = getWatchdogLoggingEvents(logcatStream);
-            assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_INITIATE, null,
-                    REASON_APP_CRASH, TESTAPP_A));
-            assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_BOOT_TRIGGERED, null,
-                    null, null));
-        } finally {
-            logcatStream.close();
-        }
+
+        List<String> watchdogEvents = mLogger.getWatchdogLoggingEvents();
+        assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_INITIATE, null,
+                REASON_APP_CRASH, TESTAPP_A));
+        assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_BOOT_TRIGGERED, null,
+                null, null));
     }
 
     @Test
@@ -171,16 +173,12 @@
 
         // verify rollback committed
         runPhase("testNativeWatchdogTriggersRollback_Phase3");
-        InputStreamSource logcatStream = mReceiver.getLogcatData();
-        try {
-            List<String> watchdogEvents = getWatchdogLoggingEvents(logcatStream);
-            assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_INITIATE, null,
-                            REASON_NATIVE_CRASH, null));
-            assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_BOOT_TRIGGERED, null,
-                    null, null));
-        } finally {
-            logcatStream.close();
-        }
+
+        List<String> watchdogEvents = mLogger.getWatchdogLoggingEvents();
+        assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_INITIATE, null,
+                        REASON_NATIVE_CRASH, null));
+        assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_BOOT_TRIGGERED, null,
+                null, null));
     }
 
     @Test
@@ -215,87 +213,12 @@
 
         // verify all available rollbacks have been committed
         runPhase("testNativeWatchdogTriggersRollbackForAll_Phase4");
-        InputStreamSource logcatStream = mReceiver.getLogcatData();
-        try {
-            List<String> watchdogEvents = getWatchdogLoggingEvents(logcatStream);
-            assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_INITIATE, null,
-                            REASON_NATIVE_CRASH, null));
-            assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_BOOT_TRIGGERED, null,
-                    null, null));
-        } finally {
-            logcatStream.close();
-        }
-    }
 
-    /**
-     * Tests failed network health check triggers watchdog staged rollbacks.
-     */
-    @Test
-    public void testNetworkFailedRollback() throws Exception {
-        try {
-            // Disconnect internet so we can test network health triggered rollbacks
-            getDevice().executeShellCommand("svc wifi disable");
-            getDevice().executeShellCommand("svc data disable");
-
-            runPhase("testNetworkFailedRollback_Phase1");
-            // Reboot device to activate staged package
-            getDevice().reboot();
-
-            // Verify rollback was enabled
-            runPhase("testNetworkFailedRollback_Phase2");
-            assertThrows(AssertionError.class, () -> runPhase("testNetworkFailedRollback_Phase3"));
-
-            getDevice().waitForDeviceAvailable();
-            // Verify rollback was executed after health check deadline
-            runPhase("testNetworkFailedRollback_Phase4");
-            InputStreamSource logcatStream = mReceiver.getLogcatData();
-            try {
-                List<String> watchdogEvents = getWatchdogLoggingEvents(logcatStream);
-                assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_INITIATE, null,
-                                REASON_EXPLICIT_HEALTH_CHECK, null));
-                assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_BOOT_TRIGGERED, null,
-                        null, null));
-            } finally {
-                logcatStream.close();
-            }
-        } finally {
-            // Reconnect internet again so we won't break tests which assume internet available
-            getDevice().executeShellCommand("svc wifi enable");
-            getDevice().executeShellCommand("svc data enable");
-        }
-    }
-
-    /**
-     * Tests passed network health check does not trigger watchdog staged rollbacks.
-     */
-    @Test
-    public void testNetworkPassedDoesNotRollback() throws Exception {
-        runPhase("testNetworkPassedDoesNotRollback_Phase1");
-        // Reboot device to activate staged package
-        getDevice().reboot();
-
-        // Verify rollback was enabled
-        runPhase("testNetworkPassedDoesNotRollback_Phase2");
-
-        // Connect to internet so network health check passes
-        getDevice().executeShellCommand("svc wifi enable");
-        getDevice().executeShellCommand("svc data enable");
-
-        // Wait for device available because emulator device may restart after turning
-        // on mobile data
-        getDevice().waitForDeviceAvailable();
-
-        // Verify rollback was not executed after health check deadline
-        runPhase("testNetworkPassedDoesNotRollback_Phase3");
-        InputStreamSource logcatStream = mReceiver.getLogcatData();
-        try {
-            List<String> watchdogEvents = getWatchdogLoggingEvents(logcatStream);
-            assertEquals(watchdogEventOccurred(watchdogEvents, null, null,
-                    REASON_EXPLICIT_HEALTH_CHECK, null), false);
-        } finally {
-            logcatStream.close();
-        }
-
+        List<String> watchdogEvents = mLogger.getWatchdogLoggingEvents();
+        assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_INITIATE, null,
+                        REASON_NATIVE_CRASH, null));
+        assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_BOOT_TRIGGERED, null,
+                null, null));
     }
 
     /**
@@ -361,16 +284,12 @@
         getDevice().waitForDeviceAvailable();
         // Verify rollback occurred due to crash of apk-in-apex
         runPhase("testRollbackApexWithApkCrashing_Phase3");
-        InputStreamSource logcatStream = mReceiver.getLogcatData();
-        try {
-            List<String> watchdogEvents = getWatchdogLoggingEvents(logcatStream);
-            assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_INITIATE, null,
-                    REASON_APP_CRASH, TESTAPP_A));
-            assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_BOOT_TRIGGERED, null,
-                    null, null));
-        } finally {
-            logcatStream.close();
-        }
+
+        List<String> watchdogEvents = mLogger.getWatchdogLoggingEvents();
+        assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_INITIATE, null,
+                REASON_APP_CRASH, TESTAPP_A));
+        assertTrue(watchdogEventOccurred(watchdogEvents, ROLLBACK_BOOT_TRIGGERED, null,
+                null, null));
     }
 
     /**
@@ -527,11 +446,6 @@
         }
     }
 
-    private String getNetworkStackPath() throws Exception {
-        // Find the NetworkStack path (can be NetworkStack.apk or NetworkStackNext.apk)
-        return getDevice().executeShellCommand("ls /system/priv-app/NetworkStack*/*.apk");
-    }
-
     private boolean isCheckpointSupported() throws Exception {
         try {
             runPhase("isCheckpointSupported");
@@ -540,57 +454,4 @@
             return false;
         }
     }
-
-    /**
-     * Returns a list of all Watchdog logging events which have occurred.
-     */
-    private List<String> getWatchdogLoggingEvents(InputStreamSource inputStreamSource)
-            throws Exception {
-        List<String> watchdogEvents = new ArrayList<>();
-        InputStream inputStream = inputStreamSource.createInputStream();
-        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
-        String line;
-        while ((line = reader.readLine()) != null) {
-            if (line.contains("Watchdog event occurred")) {
-                watchdogEvents.add(line);
-            }
-        }
-        return watchdogEvents;
-    }
-
-    /**
-     * Returns whether a Watchdog event has occurred that matches the given criteria.
-     *
-     * Check the value of all non-null parameters against the list of Watchdog events that have
-     * occurred, and return {@code true} if an event exists which matches all criteria.
-     */
-    private boolean watchdogEventOccurred(List<String> loggingEvents,
-            String type, String logPackage,
-            String rollbackReason, String failedPackageName) throws Exception {
-        List<String> eventCriteria = new ArrayList<>();
-        if (type != null) {
-            eventCriteria.add("type: " + type);
-        }
-        if (logPackage != null) {
-            eventCriteria.add("logPackage: " + logPackage);
-        }
-        if (rollbackReason != null) {
-            eventCriteria.add("rollbackReason: " + rollbackReason);
-        }
-        if (failedPackageName != null) {
-            eventCriteria.add("failedPackageName: " + failedPackageName);
-        }
-        for (String loggingEvent: loggingEvents) {
-            boolean matchesCriteria = true;
-            for (String criterion: eventCriteria) {
-                if (!loggingEvent.contains(criterion)) {
-                    matchesCriteria = false;
-                }
-            }
-            if (matchesCriteria) {
-                return true;
-            }
-        }
-        return false;
-    }
 }
diff --git a/tests/RollbackTest/TEST_MAPPING b/tests/RollbackTest/TEST_MAPPING
index fefde5b..0f4c460 100644
--- a/tests/RollbackTest/TEST_MAPPING
+++ b/tests/RollbackTest/TEST_MAPPING
@@ -7,6 +7,9 @@
       "name": "StagedRollbackTest"
     },
     {
+      "name": "NetworkStagedRollbackTest"
+    },
+    {
       "name": "MultiUserRollbackTest"
     }
   ]
diff --git a/tests/RollbackTest/lib/src/com/android/tests/rollback/host/WatchdogEventLogger.java b/tests/RollbackTest/lib/src/com/android/tests/rollback/host/WatchdogEventLogger.java
new file mode 100644
index 0000000..317d67e
--- /dev/null
+++ b/tests/RollbackTest/lib/src/com/android/tests/rollback/host/WatchdogEventLogger.java
@@ -0,0 +1,101 @@
+/*
+ * 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.tests.rollback.host;
+
+import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.device.LogcatReceiver;
+import com.android.tradefed.result.InputStreamSource;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+
+public class WatchdogEventLogger {
+    private LogcatReceiver mReceiver;
+
+    public void start(ITestDevice device) {
+        mReceiver =  new LogcatReceiver(device, "logcat -s WatchdogRollbackLogger",
+                device.getOptions().getMaxLogcatDataSize(), 0);
+        mReceiver.start();
+    }
+
+    public void stop() {
+        mReceiver.stop();
+        mReceiver.clear();
+    }
+
+    /**
+     * Returns a list of all Watchdog logging events which have occurred.
+     */
+    public List<String> getWatchdogLoggingEvents() throws Exception {
+        try (InputStreamSource logcatStream = mReceiver.getLogcatData()) {
+            return getWatchdogLoggingEvents(logcatStream);
+        }
+    }
+
+    private static List<String> getWatchdogLoggingEvents(InputStreamSource inputStreamSource)
+            throws Exception {
+        List<String> watchdogEvents = new ArrayList<>();
+        InputStream inputStream = inputStreamSource.createInputStream();
+        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
+        String line;
+        while ((line = reader.readLine()) != null) {
+            if (line.contains("Watchdog event occurred")) {
+                watchdogEvents.add(line);
+            }
+        }
+        return watchdogEvents;
+    }
+
+    /**
+     * Returns whether a Watchdog event has occurred that matches the given criteria.
+     *
+     * Check the value of all non-null parameters against the list of Watchdog events that have
+     * occurred, and return {@code true} if an event exists which matches all criteria.
+     */
+    public static boolean watchdogEventOccurred(List<String> loggingEvents,
+            String type, String logPackage,
+            String rollbackReason, String failedPackageName) throws Exception {
+        List<String> eventCriteria = new ArrayList<>();
+        if (type != null) {
+            eventCriteria.add("type: " + type);
+        }
+        if (logPackage != null) {
+            eventCriteria.add("logPackage: " + logPackage);
+        }
+        if (rollbackReason != null) {
+            eventCriteria.add("rollbackReason: " + rollbackReason);
+        }
+        if (failedPackageName != null) {
+            eventCriteria.add("failedPackageName: " + failedPackageName);
+        }
+        for (String loggingEvent: loggingEvents) {
+            boolean matchesCriteria = true;
+            for (String criterion: eventCriteria) {
+                if (!loggingEvent.contains(criterion)) {
+                    matchesCriteria = false;
+                }
+            }
+            if (matchesCriteria) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java
index 3fb0050..8f7bebb 100644
--- a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java
+++ b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java
@@ -19,41 +19,135 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
 
 import android.app.ActivityManager;
+import android.app.ActivityTaskManager;
 import android.app.Activity;
 import android.app.ActivityOptions;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Color;
 import android.graphics.Rect;
 import android.os.Bundle;
 import android.os.RemoteException;
+import android.view.Gravity;
 import android.view.ITaskOrganizer;
 import android.view.IWindowContainer;
+import android.view.MotionEvent;
 import android.view.SurfaceControl;
 import android.view.SurfaceHolder;
+import android.view.View;
 import android.view.ViewGroup;
+import android.view.WindowContainerTransaction;
 import android.widget.FrameLayout;
+import android.widget.LinearLayout;
 
 public class TaskOrganizerMultiWindowTest extends Activity {
-    class TaskLaunchingView extends TaskView {
-        TaskLaunchingView(Context c, ITaskOrganizer o, int windowingMode) {
+    class SplitLayout extends LinearLayout implements View.OnTouchListener {
+        View mView1;
+        View mView2;
+        View mDividerView;
+
+        public boolean onTouch(View v, MotionEvent e) {
+            if (e.getAction() != MotionEvent.ACTION_UP) {
+                return true;
+            }
+
+            float x = e.getX(0);
+            float ratio = (float) x / (float) getWidth() ;
+
+            LinearLayout.LayoutParams lp1 =
+                new LinearLayout.LayoutParams(0,
+                        ViewGroup.LayoutParams.WRAP_CONTENT, ratio-0.02f);
+            LinearLayout.LayoutParams lp2 =
+                new LinearLayout.LayoutParams(0,
+                        ViewGroup.LayoutParams.WRAP_CONTENT, 1-ratio-0.02f);
+            updateViewLayout(mView1, lp2);
+            updateViewLayout(mView2, lp1);
+            return true;
+        }
+
+        SplitLayout(Context c, View v1, View v2) {
+            super(c);
+            LinearLayout.LayoutParams lp1 =
+                new LinearLayout.LayoutParams(0,
+                        ViewGroup.LayoutParams.WRAP_CONTENT, 0.48f);
+            LinearLayout.LayoutParams lp3 =
+                new LinearLayout.LayoutParams(0,
+                        ViewGroup.LayoutParams.WRAP_CONTENT, 0.48f);
+            LinearLayout.LayoutParams lp2 =
+                new LinearLayout.LayoutParams(0,
+                        ViewGroup.LayoutParams.FILL_PARENT, 0.04f);
+            lp2.gravity = Gravity.CENTER;
+
+            setWeightSum(1);
+
+            mView1 = v1;
+            mView2 = v2;
+            addView(mView1, lp1);
+
+            mDividerView = new View(getContext());
+            mDividerView.setBackgroundColor(Color.BLACK);
+            addView(mDividerView, lp2);
+            mDividerView.setOnTouchListener(this);
+
+            addView(mView2, lp3);
+        }
+    }
+
+    class ResizingTaskView extends TaskView {
+        final Intent mIntent;
+        boolean launched = false;
+        ResizingTaskView(Context c, ITaskOrganizer o, int windowingMode, Intent i) {
             super(c, o, windowingMode);
+            mIntent = i;
         }
 
         @Override
         public void surfaceChanged(SurfaceHolder h, int format, int width, int height) {
-            startCalculatorActivity(width, height);
+            if (!launched) {
+                launchOrganizedActivity(mIntent, width, height);
+                launched = true;
+            } else {
+                resizeTask(width, height);
+            }
+        }
+
+        void resizeTask(int width, int height) {
+            final WindowContainerTransaction wct = new WindowContainerTransaction();
+            wct.setBounds(mWc, new Rect(0, 0, width, height));
+            try {
+                ActivityTaskManager.getTaskOrganizerController().applyContainerTransaction(wct,
+                        mOrganizer);
+            } catch (Exception e) {
+                // Oh well
+            }
         }
     }
-    TaskView mView;
+
+    TaskView mTaskView1;
+    TaskView mTaskView2;
+    boolean gotFirstTask = false;
 
     class Organizer extends ITaskOrganizer.Stub {
+        private int receivedTransactions = 0;
+        SurfaceControl.Transaction mergedTransaction = new SurfaceControl.Transaction();
         @Override
         public void taskAppeared(ActivityManager.RunningTaskInfo ti) {
-            mView.reparentTask(ti.token);
+            if (!gotFirstTask) {
+                mTaskView1.reparentTask(ti.token);
+                gotFirstTask = true;
+            } else {
+                mTaskView2.reparentTask(ti.token);
+            }
         }
         public void taskVanished(IWindowContainer wc) {
         }
         public void transactionReady(int id, SurfaceControl.Transaction t) {
+            mergedTransaction.merge(t);
+            receivedTransactions++;
+            if (receivedTransactions == 2) {
+                mergedTransaction.apply();
+                receivedTransactions = 0;
+            }
         }
         @Override
         public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
@@ -66,14 +160,33 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        mView = new TaskLaunchingView(this, mOrganizer, WINDOWING_MODE_MULTI_WINDOW);
-        setContentView(mView);
+        try {
+            ActivityTaskManager.getTaskOrganizerController().registerTaskOrganizer(mOrganizer,
+                    WINDOWING_MODE_MULTI_WINDOW);
+
+        } catch (Exception e) {
+        }
+
+        mTaskView1 = new ResizingTaskView(this, mOrganizer, WINDOWING_MODE_MULTI_WINDOW,
+                makeSettingsIntent());
+        mTaskView2 = new ResizingTaskView(this, mOrganizer, WINDOWING_MODE_MULTI_WINDOW,
+                makeContactsIntent());
+        View splitView = new SplitLayout(this, mTaskView1, mTaskView2);
+
+        setContentView(splitView);
     }
 
-    Intent makeCalculatorIntent() {
+    Intent makeSettingsIntent() {
+        Intent intent = new Intent();
+        intent.setAction(android.provider.Settings.ACTION_SETTINGS);
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        return intent;
+    }
+
+    Intent makeContactsIntent() {
         Intent intent = new Intent();
         intent.setAction(Intent.ACTION_MAIN);
-        intent.addCategory(Intent.CATEGORY_APP_CALCULATOR);
+        intent.addCategory(Intent.CATEGORY_APP_CONTACTS);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         return intent;
     }
@@ -85,7 +198,7 @@
         return o.toBundle();
     }
 
-    void startCalculatorActivity(int width, int height) {
-        startActivity(makeCalculatorIntent(), makeLaunchOptions(width, height));
+    void launchOrganizedActivity(Intent i, int width, int height) {
+        startActivity(i, makeLaunchOptions(width, height));
     }
 }
diff --git a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java
index 8f3cb34..bd17751 100644
--- a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java
+++ b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java
@@ -45,7 +45,7 @@
             final WindowContainerTransaction wct = new WindowContainerTransaction();
             wct.scheduleFinishEnterPip(ti.token, new Rect(0, 0, PIP_WIDTH, PIP_HEIGHT));
             try {
-                ActivityTaskManager.getTaskOrganizerController().applyContainerTransaction(wct);
+                ActivityTaskManager.getTaskOrganizerController().applyContainerTransaction(wct, null);
             } catch (Exception e) {
             }
         }
@@ -68,6 +68,13 @@
     public void onCreate() {
         super.onCreate();
 
+        try {
+            ActivityTaskManager.getTaskOrganizerController().registerTaskOrganizer(mOrganizer,
+                    WINDOWING_MODE_PINNED);
+
+        } catch (Exception e) {
+        }
+
         final WindowManager.LayoutParams wlp = new WindowManager.LayoutParams();
         wlp.setTitle("TaskOrganizerPipTest");
         wlp.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
diff --git a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java
index 9f32bb8..0086fb7 100644
--- a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java
+++ b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java
@@ -31,6 +31,10 @@
 class TaskView extends SurfaceView implements SurfaceHolder.Callback {
     final ITaskOrganizer mTaskOrganizer;
     final int mWindowingMode;
+    IWindowContainer mWc;
+
+    boolean mSurfaceCreated = false;
+    boolean mNeedsReparent;
 
     TaskView(Context c, ITaskOrganizer o, int windowingMode) {
         super(c);
@@ -43,10 +47,10 @@
 
     @Override
     public void surfaceCreated(SurfaceHolder holder) {
-        try {
-            ActivityTaskManager.getTaskOrganizerController().registerTaskOrganizer(mTaskOrganizer,
-                    mWindowingMode);
-        } catch (Exception e) {
+        mSurfaceCreated = true;
+        if (mNeedsReparent) {
+            mNeedsReparent = false;
+            reparentLeash();
         }
     }
 
@@ -59,10 +63,19 @@
     }
 
     void reparentTask(IWindowContainer wc) {
+        mWc = wc;
+        if (mSurfaceCreated == false) {
+            mNeedsReparent = true;
+        } else {
+            reparentLeash();
+        }
+    }
+
+    void reparentLeash() {
         SurfaceControl.Transaction t = new SurfaceControl.Transaction();
         SurfaceControl leash = null;
         try {
-            leash = wc.getLeash();
+            leash = mWc.getLeash();
         } catch (Exception e) {
             // System server died.. oh well
         }
diff --git a/tests/WindowInsetsTests/Android.bp b/tests/WindowInsetsTests/Android.bp
index 12395e7..7272152 100644
--- a/tests/WindowInsetsTests/Android.bp
+++ b/tests/WindowInsetsTests/Android.bp
@@ -18,5 +18,10 @@
     resource_dirs: ["res"],
     certificate: "platform",
     platform_apis: true,
+    static_libs: [
+        "androidx.core_core",
+        "androidx.appcompat_appcompat",
+        "com.google.android.material_material",
+    ],
 }
 
diff --git a/tests/WindowInsetsTests/AndroidManifest.xml b/tests/WindowInsetsTests/AndroidManifest.xml
index 8d33f70..0f6282e 100644
--- a/tests/WindowInsetsTests/AndroidManifest.xml
+++ b/tests/WindowInsetsTests/AndroidManifest.xml
@@ -20,7 +20,7 @@
 
     <application android:label="@string/activity_title">
         <activity android:name=".WindowInsetsActivity"
-            android:theme="@android:style/Theme.Material"
+            android:theme="@style/appTheme"
             android:windowSoftInputMode="adjustResize">
 
             <intent-filter>
diff --git a/tests/WindowInsetsTests/res/drawable/bubble.xml b/tests/WindowInsetsTests/res/drawable/bubble.xml
new file mode 100644
index 0000000..26deb1e
--- /dev/null
+++ b/tests/WindowInsetsTests/res/drawable/bubble.xml
@@ -0,0 +1,23 @@
+<?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.
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/bubble" />
+    <corners android:radius="@dimen/bubble_corner" />
+    <padding android:left="@dimen/bubble_padding_side" android:top="@dimen/bubble_padding"
+             android:right="@dimen/bubble_padding_side" android:bottom="@dimen/bubble_padding" />
+</shape>
\ No newline at end of file
diff --git a/tests/WindowInsetsTests/res/drawable/bubble_self.xml b/tests/WindowInsetsTests/res/drawable/bubble_self.xml
new file mode 100644
index 0000000..5f098a2
--- /dev/null
+++ b/tests/WindowInsetsTests/res/drawable/bubble_self.xml
@@ -0,0 +1,23 @@
+<?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.
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/bubble_self" />
+    <corners android:radius="@dimen/bubble_corner" />
+    <padding android:left="@dimen/bubble_padding_side" android:top="@dimen/bubble_padding"
+             android:right="@dimen/bubble_padding_side" android:bottom="@dimen/bubble_padding" />
+</shape>
\ No newline at end of file
diff --git a/tests/WindowInsetsTests/res/drawable/ic_send.xml b/tests/WindowInsetsTests/res/drawable/ic_send.xml
new file mode 100644
index 0000000..15bc411
--- /dev/null
+++ b/tests/WindowInsetsTests/res/drawable/ic_send.xml
@@ -0,0 +1,27 @@
+<?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.
+  -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:autoMirrored="true"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M4.02,42.0L46.0,24.0 4.02,6.0 4.0,20.0l30.0,4.0 -30.0,4.0z"/>
+</vector>
diff --git a/tests/WindowInsetsTests/res/layout/message.xml b/tests/WindowInsetsTests/res/layout/message.xml
new file mode 100644
index 0000000..d6b29c3
--- /dev/null
+++ b/tests/WindowInsetsTests/res/layout/message.xml
@@ -0,0 +1,26 @@
+<?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.
+  -->
+
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:background="@drawable/bubble"
+    android:textSize="32sp"
+    android:text="Hello World">
+
+</TextView>
\ No newline at end of file
diff --git a/tests/WindowInsetsTests/res/layout/message_self.xml b/tests/WindowInsetsTests/res/layout/message_self.xml
new file mode 100644
index 0000000..de34e48
--- /dev/null
+++ b/tests/WindowInsetsTests/res/layout/message_self.xml
@@ -0,0 +1,30 @@
+<?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.
+  -->
+
+<merge>
+    <include
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:aapt="http://schemas.android.com/aapt"
+        layout="@layout/message">
+        <aapt:attr name="android:theme">
+            <style>
+                <item name="android:layout_gravity">end</item>
+                <item name="bubbleBackground">@color/bubble_self</item>
+            </style>
+        </aapt:attr>
+    </include>
+</merge>
diff --git a/tests/WindowInsetsTests/res/layout/window_inset_activity.xml b/tests/WindowInsetsTests/res/layout/window_inset_activity.xml
index 38e0029..1b51c4f 100644
--- a/tests/WindowInsetsTests/res/layout/window_inset_activity.xml
+++ b/tests/WindowInsetsTests/res/layout/window_inset_activity.xml
@@ -17,17 +17,82 @@
 
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:gravity="center"
+    android:clipToPadding="false"
     android:id="@+id/root">
 
-    <Button
-        android:id="@+id/button"
-        android:layout_width="wrap_content"
-        android:layout_height="48dp"
-        android:text="Hello insets" />
+    <androidx.appcompat.widget.Toolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="?attr/actionBarSize"
+        />
 
+    <FrameLayout
+        android:id="@+id/scrollView"
+        android:layout_height="0dp"
+        android:layout_width="match_parent"
+        android:paddingStart="8dp"
+        android:paddingEnd="8dp"
+        android:layout_weight="1">
+
+        <LinearLayout
+            android:orientation="vertical"
+            android:layout_gravity="bottom"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                style="@style/bubble"
+                android:text="Hey, look at this buttery smooth animation!" />
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                style="@style/bubble_self"
+                android:text="Wow, that's pretty neat, how does this work?" />
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                style="@style/bubble"
+                android:text="Using the new WindowInsets animation system of course!" />
+
+        </LinearLayout>
+
+    </FrameLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingStart="8dp"
+        android:paddingEnd="8dp"
+        android:id="@+id/editText">
+
+        <com.google.android.material.textfield.TextInputLayout
+            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1">
+
+            <com.google.android.material.textfield.TextInputEditText
+                android:hint="Text message"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"/>
+
+        </com.google.android.material.textfield.TextInputLayout>
+
+        <com.google.android.material.floatingactionbutton.FloatingActionButton
+            android:id="@+id/floating_action_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            app:elevation="0dp"
+            app:fabSize="mini"
+            app:srcCompat="@drawable/ic_send"/>
+
+    </LinearLayout>
 </LinearLayout>
 
diff --git a/tests/WindowInsetsTests/res/values/strings.xml b/tests/WindowInsetsTests/res/values/strings.xml
index 242823d..2b8e5f3d 100644
--- a/tests/WindowInsetsTests/res/values/strings.xml
+++ b/tests/WindowInsetsTests/res/values/strings.xml
@@ -16,5 +16,5 @@
   -->
 
 <resources>
-    <string name="activity_title">Window Insets Tests</string>
+    <string name="activity_title">New Insets Chat</string>
 </resources>
diff --git a/tests/WindowInsetsTests/res/values/styles.xml b/tests/WindowInsetsTests/res/values/styles.xml
new file mode 100644
index 0000000..220671f
--- /dev/null
+++ b/tests/WindowInsetsTests/res/values/styles.xml
@@ -0,0 +1,67 @@
+<?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>
+
+    <style name="appTheme" parent="@style/Theme.MaterialComponents.Light">
+        <item name="windowActionBar">false</item>
+        <item name="windowNoTitle">true</item>
+
+        <item name="colorPrimary">@color/primaryColor</item>
+        <item name="colorPrimaryDark">@color/primaryDarkColor</item>
+        <item name="colorSecondary">?attr/colorPrimary</item>
+        <item name="colorOnSecondary">@color/primaryTextColor</item>
+
+        <!-- Window decor -->
+        <item name="android:statusBarColor">#ffffff</item>
+        <item name="android:windowLightStatusBar">true</item>
+        <item name="android:windowLightNavigationBar">true</item>
+        <item name="android:navigationBarColor">#ffffff</item>
+
+    </style>
+
+    <style name="bubble_base" parent="">
+        <item name="android:textSize">20sp</item>
+        <item name="android:layout_marginBottom">16dp</item>
+    </style>
+
+    <style name="bubble" parent="@style/bubble_base">
+        <item name="android:layout_marginEnd">56dp</item>
+        <item name="android:background">@drawable/bubble</item>
+        <item name="android:layout_gravity">start</item>
+    </style>
+
+    <style name="bubble_self" parent="@style/bubble_base">
+        <item name="android:layout_marginStart">56dp</item>
+        <item name="android:background">@drawable/bubble_self</item>
+        <item name="android:layout_gravity">end</item>
+    </style>
+
+    <color name="primaryColor">#1c3fef</color>
+    <color name="primaryLightColor">#6f6bff</color>
+    <color name="primaryDarkColor">#0016bb</color>
+    <color name="primaryTextColor">#ffffff</color>
+
+    <color name="bubble">#eeeeee</color>
+    <color name="bubble_self">#D8DCF0</color>
+
+    <dimen name="bubble_corner">16dp</dimen>
+    <dimen name="bubble_padding">8dp</dimen>
+    <dimen name="bubble_padding_side">16dp</dimen>
+
+
+</resources>
\ No newline at end of file
diff --git a/tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/WindowInsetsActivity.java b/tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/WindowInsetsActivity.java
index 01e212d..8e6f198 100644
--- a/tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/WindowInsetsActivity.java
+++ b/tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/WindowInsetsActivity.java
@@ -16,137 +16,218 @@
 
 package com.google.android.test.windowinsetstests;
 
-import android.animation.ObjectAnimator;
-import android.animation.TypeEvaluator;
-import android.animation.ValueAnimator;
-import android.app.Activity;
+import static android.view.WindowInsetsAnimation.Callback.DISPATCH_MODE_STOP;
+
+import static java.lang.Math.max;
+import static java.lang.Math.min;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
 import android.graphics.Insets;
 import android.os.Bundle;
-import android.util.Log;
-import android.util.Property;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
 import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.Window;
 import android.view.WindowInsets;
 import android.view.WindowInsets.Type;
-import android.view.WindowInsetsAnimationCallback;
-import android.view.WindowInsetsAnimationCallback.InsetsAnimation;
+import android.view.WindowInsetsAnimation;
+import android.view.WindowInsetsAnimation.Callback;
 import android.view.WindowInsetsAnimationControlListener;
 import android.view.WindowInsetsAnimationController;
+import android.view.animation.LinearInterpolator;
+import android.widget.LinearLayout;
 
-import com.google.android.test.windowinsetstests.R;
+import androidx.appcompat.app.AppCompatActivity;
 
-public class WindowInsetsActivity extends Activity {
+import java.util.ArrayList;
+import java.util.List;
+
+public class WindowInsetsActivity extends AppCompatActivity {
 
     private View mRoot;
-    private View mButton;
 
-    private static class InsetsProperty extends Property<WindowInsetsAnimationController, Insets> {
-
-        private final View mViewToAnimate;
-        private final Insets mShowingInsets;
-
-        public InsetsProperty(View viewToAnimate, Insets showingInsets) {
-            super(Insets.class, "Insets");
-            mViewToAnimate = viewToAnimate;
-            mShowingInsets = showingInsets;
-        }
-
-        @Override
-        public Insets get(WindowInsetsAnimationController object) {
-            return object.getCurrentInsets();
-        }
-
-        @Override
-        public void set(WindowInsetsAnimationController object, Insets value) {
-            object.setInsetsAndAlpha(value, 1.0f, 0.5f);
-            if (mShowingInsets.bottom != 0) {
-                mViewToAnimate.setTranslationY(mShowingInsets.bottom - value.bottom);
-            } else if (mShowingInsets.right != 0) {
-                mViewToAnimate.setTranslationX(mShowingInsets.right - value.right);
-            } else if (mShowingInsets.left != 0) {
-                mViewToAnimate.setTranslationX(value.left - mShowingInsets.left);
-            }
-        }
-    };
-
-    float startY;
-    float endY;
-    InsetsAnimation imeAnim;
+    final ArrayList<Transition> mTransitions = new ArrayList<>();
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.window_inset_activity);
+
+        setSupportActionBar(findViewById(R.id.toolbar));
+
         mRoot = findViewById(R.id.root);
-        mButton = findViewById(R.id.button);
-        mButton.setOnClickListener(v -> {
-            if (!v.getRootWindowInsets().isVisible(Type.ime())) {
-                v.getWindowInsetsController().show(Type.ime());
-            } else {
-                v.getWindowInsetsController().hide(Type.ime());
+        mRoot.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+
+        mTransitions.add(new Transition(findViewById(R.id.scrollView)));
+        mTransitions.add(new Transition(findViewById(R.id.editText)));
+
+        mRoot.setOnTouchListener(new View.OnTouchListener() {
+            private final ViewConfiguration mViewConfiguration =
+                    ViewConfiguration.get(WindowInsetsActivity.this);
+            WindowInsetsAnimationController mAnimationController;
+            WindowInsetsAnimationControlListener mCurrentRequest;
+            boolean mRequestedController = false;
+            float mDown = 0;
+            float mCurrent = 0;
+            Insets mDownInsets = Insets.NONE;
+            boolean mShownAtDown;
+
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                mCurrent = event.getY();
+                switch (event.getAction()) {
+                    case MotionEvent.ACTION_DOWN:
+                        mDown = event.getY();
+                        mDownInsets = v.getRootWindowInsets().getInsets(Type.ime());
+                        mShownAtDown = v.getRootWindowInsets().isVisible(Type.ime());
+                        mRequestedController = false;
+                        mCurrentRequest = null;
+                        break;
+                    case MotionEvent.ACTION_MOVE:
+                        if (mAnimationController != null) {
+                            updateInset();
+                        } else if (Math.abs(mDown - event.getY())
+                                > mViewConfiguration.getScaledTouchSlop()
+                                && !mRequestedController) {
+                            mRequestedController = true;
+                            v.getWindowInsetsController().controlWindowInsetsAnimation(Type.ime(),
+                                    1000, new LinearInterpolator(),
+                                    mCurrentRequest = new WindowInsetsAnimationControlListener() {
+                                        @Override
+                                        public void onReady(
+                                                @NonNull WindowInsetsAnimationController controller,
+                                                int types) {
+                                            if (mCurrentRequest == this) {
+                                                mAnimationController = controller;
+                                                updateInset();
+                                            } else {
+                                                controller.finish(mShownAtDown);
+                                            }
+                                        }
+
+                                        @Override
+                                        public void onCancelled() {
+                                            mAnimationController = null;
+                                        }
+                                    });
+                        }
+                        break;
+                    case MotionEvent.ACTION_UP:
+                    case MotionEvent.ACTION_CANCEL:
+                        if (mAnimationController != null) {
+                            boolean isCancel = event.getAction() == MotionEvent.ACTION_CANCEL;
+                            mAnimationController.finish(isCancel ? mShownAtDown : !mShownAtDown);
+                            mAnimationController = null;
+                        }
+                        mRequestedController = false;
+                        mCurrentRequest = null;
+                        break;
+                }
+                return true;
+            }
+
+            private void updateInset() {
+                int inset = (int) (mDownInsets.bottom + (mDown - mCurrent));
+                final int hidden = mAnimationController.getHiddenStateInsets().bottom;
+                final int shown = mAnimationController.getShownStateInsets().bottom;
+                final int start = mShownAtDown ? shown : hidden;
+                final int end = mShownAtDown ? hidden : shown;
+                inset = max(inset, hidden);
+                inset = min(inset, shown);
+                mAnimationController.setInsetsAndAlpha(
+                        Insets.of(0, 0, 0, inset),
+                        1f, (inset - start) / (float)(end - start));
             }
         });
-        mRoot.setWindowInsetsAnimationCallback(new WindowInsetsAnimationCallback() {
+
+        mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
+            @Override
+            public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
+                mRoot.setPadding(insets.getSystemWindowInsetLeft(),
+                        insets.getSystemWindowInsetTop(), insets.getSystemWindowInsetRight(),
+                        insets.getSystemWindowInsetBottom());
+                return WindowInsets.CONSUMED;
+            }
+        });
+
+        mRoot.setWindowInsetsAnimationCallback(new Callback(DISPATCH_MODE_STOP) {
 
             @Override
-            public int getDispatchMode() {
-                return DISPATCH_MODE_STOP;
+            public void onPrepare(WindowInsetsAnimation animation) {
+                mTransitions.forEach(it -> it.onPrepare(animation));
             }
 
             @Override
-            public void onPrepare(InsetsAnimation animation) {
-                if ((animation.getTypeMask() & Type.ime()) != 0) {
-                    imeAnim = animation;
-                }
-                startY = mButton.getTop();
-            }
-
-            @Override
-            public WindowInsets onProgress(WindowInsets insets) {
-                mButton.setY(startY + (endY - startY) * imeAnim.getInterpolatedFraction());
+            public WindowInsets onProgress(WindowInsets insets,
+                    @NonNull List<WindowInsetsAnimation> runningAnimations) {
+                mTransitions.forEach(it -> it.onProgress(insets));
                 return insets;
             }
 
             @Override
-            public AnimationBounds onStart(InsetsAnimation animation,
-                    AnimationBounds bounds) {
-                endY = mButton.getTop();
+            public WindowInsetsAnimation.Bounds onStart(WindowInsetsAnimation animation,
+                    WindowInsetsAnimation.Bounds bounds) {
+                mTransitions.forEach(Transition::onStart);
                 return bounds;
             }
 
             @Override
-            public void onFinish(InsetsAnimation animation) {
-                imeAnim = null;
+            public void onEnd(WindowInsetsAnimation animation) {
+                mTransitions.forEach(it -> it.onFinish(animation));
             }
         });
     }
 
     @Override
-    public void onAttachedToWindow() {
-        super.onAttachedToWindow();
+    public void onResume() {
+        super.onResume();
+        // TODO: move this to onCreate once setDecorFitsSystemWindows can be safely called there.
+        getWindow().getDecorView().post(() -> getWindow().setDecorFitsSystemWindows(false));
+    }
 
-        TypeEvaluator<Insets> evaluator = (fraction, startValue, endValue) -> Insets.of(
-                (int)(startValue.left + fraction * (endValue.left - startValue.left)),
-                (int)(startValue.top + fraction * (endValue.top - startValue.top)),
-                (int)(startValue.right + fraction * (endValue.right - startValue.right)),
-                (int)(startValue.bottom + fraction * (endValue.bottom - startValue.bottom)));
+    static class Transition {
+        private int mEndBottom;
+        private int mStartBottom;
+        private final View mView;
+        private WindowInsetsAnimation mInsetsAnimation;
 
-        WindowInsetsAnimationControlListener listener = new WindowInsetsAnimationControlListener() {
-            @Override
-            public void onReady(WindowInsetsAnimationController controller, int types) {
-                ObjectAnimator animator = ObjectAnimator.ofObject(controller,
-                        new InsetsProperty(findViewById(R.id.button),
-                                controller.getShownStateInsets()),
-                        evaluator, controller.getShownStateInsets(),
-                        controller.getHiddenStateInsets());
-                animator.setRepeatCount(ValueAnimator.INFINITE);
-                animator.setRepeatMode(ValueAnimator.REVERSE);
-                animator.start();
+        Transition(View root) {
+            mView = root;
+        }
+
+        void onPrepare(WindowInsetsAnimation animation) {
+            if ((animation.getTypeMask() & Type.ime()) != 0) {
+                mInsetsAnimation = animation;
             }
+            mStartBottom = mView.getBottom();
+        }
 
-            @Override
-            public void onCancelled() {
+        void onProgress(WindowInsets insets) {
+            mView.setY(mStartBottom + (mEndBottom - mStartBottom)
+                    * mInsetsAnimation.getInterpolatedFraction()
+                    - mView.getHeight());
+        }
 
+        void onStart() {
+            mEndBottom = mView.getBottom();
+        }
+
+        void onFinish(WindowInsetsAnimation animation) {
+            if (mInsetsAnimation == animation) {
+                mInsetsAnimation = null;
             }
-        };
+        }
+    }
+
+    static class ImeLinearLayout extends LinearLayout {
+
+        public ImeLinearLayout(Context context,
+                @Nullable AttributeSet attrs) {
+            super(context, attrs);
+        }
     }
 }
diff --git a/tests/net/Android.bp b/tests/net/Android.bp
index b2f384a..124b660 100644
--- a/tests/net/Android.bp
+++ b/tests/net/Android.bp
@@ -8,7 +8,6 @@
         "libbacktrace",
         "libbase",
         "libbinder",
-        "libbinderthreadstate",
         "libbpf",
         "libbpf_android",
         "libc++",
diff --git a/tests/net/common/java/android/net/NetworkCapabilitiesTest.java b/tests/net/common/java/android/net/NetworkCapabilitiesTest.java
index 3e4f3d8..efea91a 100644
--- a/tests/net/common/java/android/net/NetworkCapabilitiesTest.java
+++ b/tests/net/common/java/android/net/NetworkCapabilitiesTest.java
@@ -272,10 +272,24 @@
         netCap.setOwnerUid(123);
         assertParcelingIsLossless(netCap);
         netCap.setSSID(TEST_SSID);
-        assertParcelSane(netCap, 13);
+        assertParcelSane(netCap, 15);
     }
 
     @Test
+    public void testParcelNetworkCapabilitiesWithRequestorUidAndPackageName() {
+        final NetworkCapabilities netCap = new NetworkCapabilities()
+                .addCapability(NET_CAPABILITY_INTERNET)
+                .setRequestorUid(9304)
+                .setRequestorPackageName("com.android.test")
+                .addCapability(NET_CAPABILITY_EIMS)
+                .addCapability(NET_CAPABILITY_NOT_METERED);
+        assertParcelingIsLossless(netCap);
+        netCap.setSSID(TEST_SSID);
+        assertParcelSane(netCap, 15);
+    }
+
+
+    @Test
     public void testOemPaid() {
         NetworkCapabilities nc = new NetworkCapabilities();
         // By default OEM_PAID is neither in the unwanted or required lists and the network is not
diff --git a/tests/net/common/java/android/net/NetworkScoreTest.kt b/tests/net/common/java/android/net/NetworkScoreTest.kt
index a63d58d..a7e33b3 100644
--- a/tests/net/common/java/android/net/NetworkScoreTest.kt
+++ b/tests/net/common/java/android/net/NetworkScoreTest.kt
@@ -16,7 +16,9 @@
 
 package android.net
 
-import android.net.NetworkScore.Metrics.BANDWIDTH_UNKNOWN
+import android.net.NetworkScore.POLICY_DEFAULT_SUBSCRIPTION
+import android.net.NetworkScore.POLICY_IGNORE_ON_WIFI
+import android.net.NetworkScore.RANGE_MEDIUM
 import androidx.test.filters.SmallTest
 import androidx.test.runner.AndroidJUnit4
 import com.android.testutils.assertParcelSane
@@ -32,26 +34,30 @@
 @RunWith(AndroidJUnit4::class)
 @SmallTest
 class NetworkScoreTest {
+    private fun makeScoreBuilder() = NetworkScore.Builder()
+            .setLegacyScore(TEST_SCORE)
+            .addPolicy(POLICY_IGNORE_ON_WIFI)
+            .addPolicy(POLICY_DEFAULT_SUBSCRIPTION)
+            .setExiting(false)
+            .setEndToEndMetrics(NetworkScore.Metrics(145 /* latency */,
+                    2500 /* downlinkBandwidth */, 1430 /* uplinkBandwidth */))
+            .setRange(RANGE_MEDIUM)
+            .setSignalStrength(400)
+
     @Test
     fun testParcelNetworkScore() {
         val defaultCap = NetworkCapabilities()
-        val builder = NetworkScore.Builder().setLegacyScore(TEST_SCORE)
-        assertEquals(TEST_SCORE, builder.build().getLegacyScore())
-        assertParcelSane(builder.build(), 7)
+        val legacyBuilder = NetworkScore.Builder().setLegacyScore(TEST_SCORE)
+        assertEquals(TEST_SCORE, legacyBuilder.build().getLegacyScore())
+        assertParcelSane(legacyBuilder.build(), 7)
 
-        builder.addPolicy(NetworkScore.POLICY_IGNORE_ON_WIFI)
-                .addPolicy(NetworkScore.POLICY_DEFAULT_SUBSCRIPTION)
-                .setLinkLayerMetrics(NetworkScore.Metrics(44 /* latency */,
-                        380 /* downlinkBandwidth */, BANDWIDTH_UNKNOWN /* uplinkBandwidth */))
-                .setEndToEndMetrics(NetworkScore.Metrics(11 /* latency */,
-                        BANDWIDTH_UNKNOWN /* downlinkBandwidth */, 100_000 /* uplinkBandwidth */))
-                .setRange(NetworkScore.RANGE_MEDIUM)
+        val builder = makeScoreBuilder()
         assertParcelSane(builder.build(), 7)
-        builder.clearPolicy(NetworkScore.POLICY_IGNORE_ON_WIFI)
+        builder.clearPolicy(POLICY_IGNORE_ON_WIFI)
         val ns = builder.build()
         assertParcelSane(ns, 7)
-        assertFalse(ns.hasPolicy(NetworkScore.POLICY_IGNORE_ON_WIFI))
-        assertTrue(ns.hasPolicy(NetworkScore.POLICY_DEFAULT_SUBSCRIPTION))
+        assertFalse(ns.hasPolicy(POLICY_IGNORE_ON_WIFI))
+        assertTrue(ns.hasPolicy(POLICY_DEFAULT_SUBSCRIPTION))
 
         val exitingNs = ns.withExiting(true)
         assertNotEquals(ns.isExiting, exitingNs.isExiting)
@@ -73,4 +79,10 @@
         assertTrue(builder1.build().equals(builder2.build()))
         assertEquals(builder1.build().hashCode(), builder2.build().hashCode())
     }
+
+    @Test
+    fun testBuilderEquals() {
+        val ns = makeScoreBuilder().build()
+        assertEquals(ns, NetworkScore.Builder(ns).build())
+    }
 }
diff --git a/tests/net/java/android/net/ConnectivityDiagnosticsManagerTest.java b/tests/net/java/android/net/ConnectivityDiagnosticsManagerTest.java
index 0628691..8eb5cfa 100644
--- a/tests/net/java/android/net/ConnectivityDiagnosticsManagerTest.java
+++ b/tests/net/java/android/net/ConnectivityDiagnosticsManagerTest.java
@@ -146,17 +146,14 @@
 
     @Test
     public void testConnectivityReportEquals() {
-        assertEquals(createSampleConnectivityReport(), createSampleConnectivityReport());
-        assertEquals(createDefaultConnectivityReport(), createDefaultConnectivityReport());
+        final ConnectivityReport defaultReport = createDefaultConnectivityReport();
+        final ConnectivityReport sampleReport = createSampleConnectivityReport();
+        assertEquals(sampleReport, createSampleConnectivityReport());
+        assertEquals(defaultReport, createDefaultConnectivityReport());
 
-        final LinkProperties linkProperties = new LinkProperties();
-        linkProperties.setInterfaceName(INTERFACE_NAME);
-
-        final NetworkCapabilities networkCapabilities = new NetworkCapabilities();
-        networkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
-
-        final PersistableBundle bundle = new PersistableBundle();
-        bundle.putString(BUNDLE_KEY, BUNDLE_VALUE);
+        final LinkProperties linkProperties = sampleReport.getLinkProperties();
+        final NetworkCapabilities networkCapabilities = sampleReport.getNetworkCapabilities();
+        final PersistableBundle bundle = sampleReport.getAdditionalInfo();
 
         assertNotEquals(
                 createDefaultConnectivityReport(),
@@ -206,39 +203,104 @@
     }
 
     private DataStallReport createSampleDataStallReport() {
+        final LinkProperties linkProperties = new LinkProperties();
+        linkProperties.setInterfaceName(INTERFACE_NAME);
+
         final PersistableBundle bundle = new PersistableBundle();
         bundle.putString(BUNDLE_KEY, BUNDLE_VALUE);
-        return new DataStallReport(new Network(NET_ID), TIMESTAMP, DETECTION_METHOD, bundle);
+
+        final NetworkCapabilities networkCapabilities = new NetworkCapabilities();
+        networkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
+
+        return new DataStallReport(
+                new Network(NET_ID),
+                TIMESTAMP,
+                DETECTION_METHOD,
+                linkProperties,
+                networkCapabilities,
+                bundle);
     }
 
     private DataStallReport createDefaultDataStallReport() {
-        return new DataStallReport(new Network(0), 0L, 0, PersistableBundle.EMPTY);
+        return new DataStallReport(
+                new Network(0),
+                0L,
+                0,
+                new LinkProperties(),
+                new NetworkCapabilities(),
+                PersistableBundle.EMPTY);
     }
 
     @Test
     public void testDataStallReportEquals() {
-        assertEquals(createSampleDataStallReport(), createSampleDataStallReport());
-        assertEquals(createDefaultDataStallReport(), createDefaultDataStallReport());
+        final DataStallReport defaultReport = createDefaultDataStallReport();
+        final DataStallReport sampleReport = createSampleDataStallReport();
+        assertEquals(sampleReport, createSampleDataStallReport());
+        assertEquals(defaultReport, createDefaultDataStallReport());
 
-        final PersistableBundle bundle = new PersistableBundle();
-        bundle.putString(BUNDLE_KEY, BUNDLE_VALUE);
+        final LinkProperties linkProperties = sampleReport.getLinkProperties();
+        final NetworkCapabilities networkCapabilities = sampleReport.getNetworkCapabilities();
+        final PersistableBundle bundle = sampleReport.getStallDetails();
 
         assertNotEquals(
-                createDefaultDataStallReport(),
-                new DataStallReport(new Network(NET_ID), 0L, 0, PersistableBundle.EMPTY));
+                defaultReport,
+                new DataStallReport(
+                        new Network(NET_ID),
+                        0L,
+                        0,
+                        new LinkProperties(),
+                        new NetworkCapabilities(),
+                        PersistableBundle.EMPTY));
         assertNotEquals(
-                createDefaultDataStallReport(),
-                new DataStallReport(new Network(0), TIMESTAMP, 0, PersistableBundle.EMPTY));
+                defaultReport,
+                new DataStallReport(
+                        new Network(0),
+                        TIMESTAMP,
+                        0,
+                        new LinkProperties(),
+                        new NetworkCapabilities(),
+                        PersistableBundle.EMPTY));
         assertNotEquals(
-                createDefaultDataStallReport(),
-                new DataStallReport(new Network(0), 0L, DETECTION_METHOD, PersistableBundle.EMPTY));
+                defaultReport,
+                new DataStallReport(
+                        new Network(0),
+                        0L,
+                        DETECTION_METHOD,
+                        new LinkProperties(),
+                        new NetworkCapabilities(),
+                        PersistableBundle.EMPTY));
         assertNotEquals(
-                createDefaultDataStallReport(), new DataStallReport(new Network(0), 0L, 0, bundle));
+                defaultReport,
+                new DataStallReport(
+                        new Network(0),
+                        0L,
+                        0,
+                        linkProperties,
+                        new NetworkCapabilities(),
+                        PersistableBundle.EMPTY));
+        assertNotEquals(
+                defaultReport,
+                new DataStallReport(
+                        new Network(0),
+                        0L,
+                        0,
+                        new LinkProperties(),
+                        networkCapabilities,
+                        PersistableBundle.EMPTY));
+        assertNotEquals(
+                defaultReport,
+                new DataStallReport(
+                        new Network(0),
+                        0L,
+                        0,
+                        new LinkProperties(),
+                        new NetworkCapabilities(),
+                        bundle));
     }
 
     @Test
     public void testDataStallReportParcelUnparcel() {
-        assertParcelSane(createSampleDataStallReport(), 4);
+        assertParcelSane(createSampleDataStallReport(), 6);
     }
 
     @Test
diff --git a/tests/net/java/android/net/ConnectivityManagerTest.java b/tests/net/java/android/net/ConnectivityManagerTest.java
index 7ede144..d6bf334 100644
--- a/tests/net/java/android/net/ConnectivityManagerTest.java
+++ b/tests/net/java/android/net/ConnectivityManagerTest.java
@@ -212,7 +212,8 @@
         ArgumentCaptor<Messenger> captor = ArgumentCaptor.forClass(Messenger.class);
 
         // register callback
-        when(mService.requestNetwork(any(), captor.capture(), anyInt(), any(), anyInt()))
+        when(mService.requestNetwork(
+                any(), captor.capture(), anyInt(), any(), anyInt(), any()))
                 .thenReturn(request);
         manager.requestNetwork(request, callback, handler);
 
@@ -240,7 +241,8 @@
         ArgumentCaptor<Messenger> captor = ArgumentCaptor.forClass(Messenger.class);
 
         // register callback
-        when(mService.requestNetwork(any(), captor.capture(), anyInt(), any(), anyInt()))
+        when(mService.requestNetwork(
+                any(), captor.capture(), anyInt(), any(), anyInt(), any()))
                 .thenReturn(req1);
         manager.requestNetwork(req1, callback, handler);
 
@@ -258,7 +260,8 @@
         verify(callback, timeout(100).times(0)).onLosing(any(), anyInt());
 
         // callback can be registered again
-        when(mService.requestNetwork(any(), captor.capture(), anyInt(), any(), anyInt()))
+        when(mService.requestNetwork(
+                any(), captor.capture(), anyInt(), any(), anyInt(), any()))
                 .thenReturn(req2);
         manager.requestNetwork(req2, callback, handler);
 
@@ -282,7 +285,8 @@
         info.targetSdkVersion = VERSION_CODES.N_MR1 + 1;
 
         when(mCtx.getApplicationInfo()).thenReturn(info);
-        when(mService.requestNetwork(any(), any(), anyInt(), any(), anyInt())).thenReturn(request);
+        when(mService.requestNetwork(any(), any(), anyInt(), any(), anyInt(), any()))
+                .thenReturn(request);
 
         Handler handler = new Handler(Looper.getMainLooper());
         manager.requestNetwork(request, callback, handler);
diff --git a/tests/net/java/android/net/Ikev2VpnProfileTest.java b/tests/net/java/android/net/Ikev2VpnProfileTest.java
index d6a2176..2273bc6 100644
--- a/tests/net/java/android/net/Ikev2VpnProfileTest.java
+++ b/tests/net/java/android/net/Ikev2VpnProfileTest.java
@@ -22,7 +22,6 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
 
 import android.test.mock.MockContext;
 
@@ -232,10 +231,12 @@
         builder.setAuthDigitalSignature(mUserCert, mPrivateKey, mServerRootCa);
         final VpnProfile profile = builder.build().toVpnProfile();
 
+        final String expectedSecret = Ikev2VpnProfile.PREFIX_INLINE
+                + Ikev2VpnProfile.encodeForIpsecSecret(mPrivateKey.getEncoded());
         verifyVpnProfileCommon(profile);
         assertEquals(Ikev2VpnProfile.certificateToPemString(mUserCert), profile.ipsecUserCert);
         assertEquals(
-                Ikev2VpnProfile.encodeForIpsecSecret(mPrivateKey.getEncoded()),
+                expectedSecret,
                 profile.ipsecSecret);
         assertEquals(Ikev2VpnProfile.certificateToPemString(mServerRootCa), profile.ipsecCaCert);
 
diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java
index a0e98d0..220cdce 100644
--- a/tests/net/java/com/android/server/ConnectivityServiceTest.java
+++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java
@@ -78,6 +78,7 @@
 import static android.net.NetworkPolicyManager.RULE_REJECT_ALL;
 import static android.net.NetworkPolicyManager.RULE_REJECT_METERED;
 import static android.net.RouteInfo.RTN_UNREACHABLE;
+import static android.system.OsConstants.IPPROTO_TCP;
 
 import static com.android.server.ConnectivityServiceTestUtilsKt.transportToLegacyType;
 import static com.android.testutils.ConcurrentUtilsKt.await;
@@ -107,6 +108,7 @@
 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;
 import static org.mockito.Mockito.never;
@@ -137,6 +139,7 @@
 import android.content.res.Resources;
 import android.location.LocationManager;
 import android.net.CaptivePortalData;
+import android.net.ConnectionInfo;
 import android.net.ConnectivityManager;
 import android.net.ConnectivityManager.NetworkCallback;
 import android.net.ConnectivityManager.PacketKeepalive;
@@ -152,6 +155,7 @@
 import android.net.INetworkPolicyListener;
 import android.net.INetworkPolicyManager;
 import android.net.INetworkStatsService;
+import android.net.InetAddresses;
 import android.net.InterfaceConfiguration;
 import android.net.IpPrefix;
 import android.net.IpSecManager;
@@ -175,6 +179,7 @@
 import android.net.SocketKeepalive;
 import android.net.UidRange;
 import android.net.Uri;
+import android.net.VpnManager;
 import android.net.metrics.IpConnectivityLog;
 import android.net.shared.NetworkMonitorUtils;
 import android.net.shared.PrivateDnsConfig;
@@ -199,6 +204,7 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
+import android.security.KeyStore;
 import android.system.Os;
 import android.test.mock.MockContentResolver;
 import android.text.TextUtils;
@@ -271,6 +277,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Predicate;
+import java.util.function.Supplier;
 
 import kotlin.reflect.KClass;
 
@@ -305,6 +312,7 @@
     private static final String MOBILE_IFNAME = "test_rmnet_data0";
     private static final String WIFI_IFNAME = "test_wlan0";
     private static final String WIFI_WOL_IFNAME = "test_wlan_wol";
+    private static final String TEST_PACKAGE_NAME = "com.android.test.package";
     private static final String[] EMPTY_STRING_ARRAY = new String[0];
 
     private MockContext mServiceContext;
@@ -443,15 +451,21 @@
             return mPackageManager;
         }
 
+        private int checkMockedPermission(String permission, Supplier<Integer> ifAbsent) {
+            final Integer granted = mMockedPermissions.get(permission);
+            return granted != null ? granted : ifAbsent.get();
+        }
+
         @Override
         public int checkPermission(String permission, int pid, int uid) {
-            final Integer granted = mMockedPermissions.get(permission);
-            if (granted == null) {
-                // All non-mocked permissions should be held by the test or unnecessary: check as
-                // normal to make sure the code does not rely on unexpected permissions.
-                return super.checkPermission(permission, pid, uid);
-            }
-            return granted;
+            return checkMockedPermission(
+                    permission, () -> super.checkPermission(permission, pid, uid));
+        }
+
+        @Override
+        public int checkCallingOrSelfPermission(String permission) {
+            return checkMockedPermission(
+                    permission, () -> super.checkCallingOrSelfPermission(permission));
         }
 
         @Override
@@ -654,7 +668,7 @@
 
             if (mNmValidationRedirectUrl != null) {
                 mNmCallbacks.showProvisioningNotification(
-                        "test_provisioning_notif_action", "com.android.test.package");
+                        "test_provisioning_notif_action", TEST_PACKAGE_NAME);
                 mNmProvNotificationRequested = true;
             }
         }
@@ -797,6 +811,14 @@
             mProbesSucceeded = probesSucceeded;
         }
 
+        void notifyCaptivePortalDataChanged(CaptivePortalData data) {
+            try {
+                mNmCallbacks.notifyCaptivePortalDataChanged(data);
+            } catch (RemoteException e) {
+                throw new AssertionError("This cannot happen", e);
+            }
+        }
+
         public String waitForRedirectUrl() {
             assertTrue(mNetworkStatusReceived.block(TIMEOUT_MS));
             return mRedirectUrl;
@@ -992,12 +1014,13 @@
         // Careful ! This is different from mNetworkAgent, because MockNetworkAgent does
         // not inherit from NetworkAgent.
         private TestNetworkAgentWrapper mMockNetworkAgent;
+        private int mVpnType = VpnManager.TYPE_VPN_SERVICE;
 
         private VpnInfo mVpnInfo;
 
         public MockVpn(int userId) {
             super(startHandlerThreadAndReturnLooper(), mServiceContext, mNetworkManagementService,
-                    userId);
+                    userId, mock(KeyStore.class));
         }
 
         public void setNetworkAgent(TestNetworkAgentWrapper agent) {
@@ -1012,6 +1035,10 @@
             updateCapabilities(null /* defaultNetwork */);
         }
 
+        public void setVpnType(int vpnType) {
+            mVpnType = vpnType;
+        }
+
         @Override
         public int getNetId() {
             if (mMockNetworkAgent == null) {
@@ -1030,6 +1057,11 @@
             return mConnected;  // Similar trickery
         }
 
+        @Override
+        public int getActiveAppVpnType() {
+            return mVpnType;
+        }
+
         private void connect(boolean isAlwaysMetered) {
             mNetworkCapabilities.set(mMockNetworkAgent.getNetworkCapabilities());
             mConnected = true;
@@ -1843,18 +1875,21 @@
         final Uri capportUrl = Uri.parse("https://capport.example.com/api");
         final CaptivePortalData capportData = new CaptivePortalData.Builder()
                 .setCaptive(true).build();
-        newLp.setCaptivePortalApiUrl(capportUrl);
-        newLp.setCaptivePortalData(capportData);
-        mWiFiNetworkAgent.sendLinkProperties(newLp);
 
         final Uri expectedCapportUrl = sanitized ? null : capportUrl;
-        final CaptivePortalData expectedCapportData = sanitized ? null : capportData;
+        newLp.setCaptivePortalApiUrl(capportUrl);
+        mWiFiNetworkAgent.sendLinkProperties(newLp);
         callback.expectLinkPropertiesThat(mWiFiNetworkAgent, lp ->
-                Objects.equals(expectedCapportUrl, lp.getCaptivePortalApiUrl())
-                && Objects.equals(expectedCapportData, lp.getCaptivePortalData()));
+                Objects.equals(expectedCapportUrl, lp.getCaptivePortalApiUrl()));
         defaultCallback.expectLinkPropertiesThat(mWiFiNetworkAgent, lp ->
-                Objects.equals(expectedCapportUrl, lp.getCaptivePortalApiUrl())
-                && Objects.equals(expectedCapportData, lp.getCaptivePortalData()));
+                Objects.equals(expectedCapportUrl, lp.getCaptivePortalApiUrl()));
+
+        final CaptivePortalData expectedCapportData = sanitized ? null : capportData;
+        mWiFiNetworkAgent.notifyCaptivePortalDataChanged(capportData);
+        callback.expectLinkPropertiesThat(mWiFiNetworkAgent, lp ->
+                Objects.equals(expectedCapportData, lp.getCaptivePortalData()));
+        defaultCallback.expectLinkPropertiesThat(mWiFiNetworkAgent, lp ->
+                Objects.equals(expectedCapportData, lp.getCaptivePortalData()));
 
         final LinkProperties lp = mCm.getLinkProperties(mWiFiNetworkAgent.getNetwork());
         assertEquals(expectedCapportUrl, lp.getCaptivePortalApiUrl());
@@ -2019,14 +2054,15 @@
         assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork());
         assertEquals(defaultCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
 
-        // Bring up wifi with a score of 70.
+        // Bring up validated wifi.
         // Cell is lingered because it would not satisfy any request, even if it validated.
         mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
-        mWiFiNetworkAgent.adjustScore(50);
-        mWiFiNetworkAgent.connect(false);   // Score: 70
+        mWiFiNetworkAgent.connect(true);   // Score: 60
         callback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
+        // TODO: Investigate sending validated before losing.
         callback.expectCallback(CallbackEntry.LOSING, mCellNetworkAgent);
-        defaultCallback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
+        callback.expectCapabilitiesWith(NET_CAPABILITY_VALIDATED, mWiFiNetworkAgent);
+        defaultCallback.expectAvailableThenValidatedCallbacks(mWiFiNetworkAgent);
         assertEquals(mWiFiNetworkAgent.getNetwork(), mCm.getActiveNetwork());
         assertEquals(defaultCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
 
@@ -2808,6 +2844,40 @@
         assertNoCallbacks(captivePortalCallback, validatedCallback);
     }
 
+    @Test
+    public void testCaptivePortalApi() throws Exception {
+        mServiceContext.setPermission(
+                android.Manifest.permission.NETWORK_SETTINGS, PERMISSION_GRANTED);
+
+        final TestNetworkCallback captivePortalCallback = new TestNetworkCallback();
+        final NetworkRequest captivePortalRequest = new NetworkRequest.Builder()
+                .addCapability(NET_CAPABILITY_CAPTIVE_PORTAL).build();
+        mCm.registerNetworkCallback(captivePortalRequest, captivePortalCallback);
+
+        mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
+        final String redirectUrl = "http://example.com/firstPath";
+
+        mWiFiNetworkAgent.connectWithCaptivePortal(redirectUrl, false /* isStrictMode */);
+        captivePortalCallback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
+
+        final CaptivePortalData testData = new CaptivePortalData.Builder()
+                .setUserPortalUrl(Uri.parse(redirectUrl))
+                .setBytesRemaining(12345L)
+                .build();
+
+        mWiFiNetworkAgent.notifyCaptivePortalDataChanged(testData);
+
+        captivePortalCallback.expectLinkPropertiesThat(mWiFiNetworkAgent,
+                lp -> testData.equals(lp.getCaptivePortalData()));
+
+        final LinkProperties newLps = new LinkProperties();
+        newLps.setMtu(1234);
+        mWiFiNetworkAgent.sendLinkProperties(newLps);
+        // CaptivePortalData is not lost and unchanged when LPs are received from the NetworkAgent
+        captivePortalCallback.expectLinkPropertiesThat(mWiFiNetworkAgent,
+                lp -> testData.equals(lp.getCaptivePortalData()) && lp.getMtu() == 1234);
+    }
+
     private NetworkRequest.Builder newWifiRequestBuilder() {
         return new NetworkRequest.Builder().addTransportType(TRANSPORT_WIFI);
     }
@@ -2972,7 +3042,7 @@
             networkCapabilities.addTransportType(TRANSPORT_WIFI)
                     .setNetworkSpecifier(new MatchAllNetworkSpecifier());
             mService.requestNetwork(networkCapabilities, null, 0, null,
-                    ConnectivityManager.TYPE_WIFI);
+                    ConnectivityManager.TYPE_WIFI, TEST_PACKAGE_NAME);
         });
 
         class NonParcelableSpecifier extends NetworkSpecifier {
@@ -3011,31 +3081,12 @@
     }
 
     @Test
-    public void testNetworkSpecifierUidSpoofSecurityException() throws Exception {
-        class UidAwareNetworkSpecifier extends NetworkSpecifier implements Parcelable {
-            @Override
-            public boolean satisfiedBy(NetworkSpecifier other) {
-                return true;
-            }
-
-            @Override
-            public void assertValidFromUid(int requestorUid) {
-                throw new SecurityException("failure");
-            }
-
-            @Override
-            public int describeContents() { return 0; }
-            @Override
-            public void writeToParcel(Parcel dest, int flags) {}
-        }
-
+    public void testNetworkRequestUidSpoofSecurityException() throws Exception {
         mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
         mWiFiNetworkAgent.connect(false);
-
-        UidAwareNetworkSpecifier networkSpecifier = new UidAwareNetworkSpecifier();
-        NetworkRequest networkRequest = newWifiRequestBuilder().setNetworkSpecifier(
-                networkSpecifier).build();
+        NetworkRequest networkRequest = newWifiRequestBuilder().build();
         TestNetworkCallback networkCallback = new TestNetworkCallback();
+        doThrow(new SecurityException()).when(mAppOpsManager).checkPackage(anyInt(), anyString());
         assertThrows(SecurityException.class, () -> {
             mCm.requestNetwork(networkRequest, networkCallback);
         });
@@ -3171,6 +3222,7 @@
                 mCellNetworkAgent);
         cellNetworkCallback.expectCallback(CallbackEntry.SUSPENDED, mCellNetworkAgent);
         cellNetworkCallback.assertNoCallback();
+        assertEquals(NetworkInfo.State.SUSPENDED, mCm.getActiveNetworkInfo().getState());
 
         // Register a garden variety default network request.
         TestNetworkCallback dfltNetworkCallback = new TestNetworkCallback();
@@ -3186,6 +3238,7 @@
                 mCellNetworkAgent);
         cellNetworkCallback.expectCallback(CallbackEntry.RESUMED, mCellNetworkAgent);
         cellNetworkCallback.assertNoCallback();
+        assertEquals(NetworkInfo.State.CONNECTED, mCm.getActiveNetworkInfo().getState());
 
         dfltNetworkCallback = new TestNetworkCallback();
         mCm.registerDefaultNetworkCallback(dfltNetworkCallback);
@@ -5793,7 +5846,7 @@
 
         mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
         mWiFiNetworkAgent.connect(true);
-        trustedCallback.expectAvailableDoubleValidatedCallbacks(mWiFiNetworkAgent);
+        trustedCallback.expectAvailableThenValidatedCallbacks(mWiFiNetworkAgent);
         verify(mNetworkManagementService).setDefaultNetId(eq(mWiFiNetworkAgent.getNetwork().netId));
         reset(mNetworkManagementService);
 
@@ -6399,6 +6452,90 @@
         assertEquals(Process.INVALID_UID, newNc.getOwnerUid());
     }
 
+    private void setupConnectionOwnerUid(int vpnOwnerUid, @VpnManager.VpnType int vpnType)
+            throws Exception {
+        final Set<UidRange> vpnRange = Collections.singleton(UidRange.createForUser(VPN_USER));
+        establishVpn(new LinkProperties(), vpnOwnerUid, vpnRange);
+        mMockVpn.setVpnType(vpnType);
+
+        final VpnInfo vpnInfo = new VpnInfo();
+        vpnInfo.ownerUid = vpnOwnerUid;
+        mMockVpn.setVpnInfo(vpnInfo);
+    }
+
+    private void setupConnectionOwnerUidAsVpnApp(int vpnOwnerUid, @VpnManager.VpnType int vpnType)
+            throws Exception {
+        setupConnectionOwnerUid(vpnOwnerUid, vpnType);
+
+        // Test as VPN app
+        mServiceContext.setPermission(android.Manifest.permission.NETWORK_STACK, PERMISSION_DENIED);
+        mServiceContext.setPermission(
+                NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, PERMISSION_DENIED);
+    }
+
+    private ConnectionInfo getTestConnectionInfo() throws Exception {
+        return new ConnectionInfo(
+                IPPROTO_TCP,
+                new InetSocketAddress(InetAddresses.parseNumericAddress("1.2.3.4"), 1234),
+                new InetSocketAddress(InetAddresses.parseNumericAddress("2.3.4.5"), 2345));
+    }
+
+    @Test
+    public void testGetConnectionOwnerUidPlatformVpn() throws Exception {
+        final int myUid = Process.myUid();
+        setupConnectionOwnerUidAsVpnApp(myUid, VpnManager.TYPE_VPN_PLATFORM);
+
+        try {
+            mService.getConnectionOwnerUid(getTestConnectionInfo());
+            fail("Expected SecurityException for non-VpnService app");
+        } catch (SecurityException expected) {
+        }
+    }
+
+    @Test
+    public void testGetConnectionOwnerUidVpnServiceWrongUser() throws Exception {
+        final int myUid = Process.myUid();
+        setupConnectionOwnerUidAsVpnApp(myUid + 1, VpnManager.TYPE_VPN_SERVICE);
+
+        try {
+            mService.getConnectionOwnerUid(getTestConnectionInfo());
+            fail("Expected SecurityException for non-VpnService app");
+        } catch (SecurityException expected) {
+        }
+    }
+
+    @Test
+    public void testGetConnectionOwnerUidVpnServiceDoesNotThrow() throws Exception {
+        final int myUid = Process.myUid();
+        setupConnectionOwnerUidAsVpnApp(myUid, VpnManager.TYPE_VPN_SERVICE);
+
+        // TODO: Test the returned UID
+        mService.getConnectionOwnerUid(getTestConnectionInfo());
+    }
+
+    @Test
+    public void testGetConnectionOwnerUidVpnServiceNetworkStackDoesNotThrow() throws Exception {
+        final int myUid = Process.myUid();
+        setupConnectionOwnerUid(myUid, VpnManager.TYPE_VPN_SERVICE);
+        mServiceContext.setPermission(
+                android.Manifest.permission.NETWORK_STACK, PERMISSION_GRANTED);
+
+        // TODO: Test the returned UID
+        mService.getConnectionOwnerUid(getTestConnectionInfo());
+    }
+
+    @Test
+    public void testGetConnectionOwnerUidVpnServiceMainlineNetworkStackDoesNotThrow()
+            throws Exception {
+        final int myUid = Process.myUid();
+        setupConnectionOwnerUid(myUid, VpnManager.TYPE_VPN_SERVICE);
+        mServiceContext.setPermission(
+                NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, PERMISSION_GRANTED);
+
+        // TODO: Test the returned UID
+        mService.getConnectionOwnerUid(getTestConnectionInfo());
+    }
+
     private TestNetworkAgentWrapper establishVpn(
             LinkProperties lp, int ownerUid, Set<UidRange> vpnRange) throws Exception {
         final TestNetworkAgentWrapper
diff --git a/tests/net/java/com/android/server/connectivity/NetworkRankerTest.kt b/tests/net/java/com/android/server/connectivity/NetworkRankerTest.kt
new file mode 100644
index 0000000..d2532c2
--- /dev/null
+++ b/tests/net/java/com/android/server/connectivity/NetworkRankerTest.kt
@@ -0,0 +1,104 @@
+/*
+ * 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.connectivity
+
+import android.net.ConnectivityManager.TYPE_WIFI
+import android.net.LinkProperties
+import android.net.Network
+import android.net.NetworkAgentConfig
+import android.net.NetworkCapabilities
+import android.net.NetworkInfo
+import android.net.NetworkRequest
+import android.net.NetworkScore
+import androidx.test.filters.SmallTest
+import androidx.test.runner.AndroidJUnit4
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.mock
+import kotlin.test.assertEquals
+import kotlin.test.assertNull
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class NetworkRankerTest {
+    private val ranker = NetworkRanker()
+
+    private fun makeNai(satisfy: Boolean, score: Int) = object : NetworkAgentInfo(
+            null /* messenger */,
+            null /* asyncChannel*/,
+            Network(100),
+            NetworkInfo(TYPE_WIFI, 0 /* subtype */, "" /* typename */, "" /* subtypename */),
+            LinkProperties(),
+            NetworkCapabilities(),
+            NetworkScore.Builder().setLegacyScore(score).build(),
+            null /* context */,
+            null /* handler */,
+            NetworkAgentConfig(),
+            null /* connectivityService */,
+            null /* netd */,
+            null /* dnsResolver */,
+            null /* networkManagementService */,
+            0 /* factorySerialNumber */) {
+        override fun satisfies(request: NetworkRequest?): Boolean = satisfy
+        override fun getCurrentScore(): Int = score
+    }
+
+    @Test
+    fun testGetBestNetwork() {
+        val scores = listOf(20, 50, 90, 60, 23, 68)
+        val nais = scores.map { makeNai(true, it) }
+        val bestNetwork = nais[2] // The one with the top score
+        val someRequest = mock(NetworkRequest::class.java)
+        assertEquals(bestNetwork, ranker.getBestNetwork(someRequest, nais))
+    }
+
+    @Test
+    fun testIgnoreNonSatisfying() {
+        val nais = listOf(makeNai(true, 20), makeNai(true, 50), makeNai(false, 90),
+                makeNai(false, 60), makeNai(true, 23), makeNai(false, 68))
+        val bestNetwork = nais[1] // Top score that's satisfying
+        val someRequest = mock(NetworkRequest::class.java)
+        assertEquals(bestNetwork, ranker.getBestNetwork(someRequest, nais))
+    }
+
+    @Test
+    fun testNoMatch() {
+        val nais = listOf(makeNai(false, 20), makeNai(false, 50), makeNai(false, 90))
+        val someRequest = mock(NetworkRequest::class.java)
+        assertNull(ranker.getBestNetwork(someRequest, nais))
+    }
+
+    @Test
+    fun testEmpty() {
+        val someRequest = mock(NetworkRequest::class.java)
+        assertNull(ranker.getBestNetwork(someRequest, emptyList()))
+    }
+
+    // Make sure the ranker is "stable" (as in stable sort), that is, it always returns the FIRST
+    // network satisfying the request if multiple of them have the same score.
+    @Test
+    fun testStable() {
+        val nais1 = listOf(makeNai(true, 30), makeNai(true, 30), makeNai(true, 30),
+                makeNai(true, 30), makeNai(true, 30), makeNai(true, 30))
+        val someRequest = mock(NetworkRequest::class.java)
+        assertEquals(nais1[0], ranker.getBestNetwork(someRequest, nais1))
+
+        val nais2 = listOf(makeNai(true, 30), makeNai(true, 50), makeNai(true, 20),
+                makeNai(true, 50), makeNai(true, 50), makeNai(true, 40))
+        assertEquals(nais2[1], ranker.getBestNetwork(someRequest, nais2))
+    }
+}
diff --git a/tests/net/java/com/android/server/connectivity/VpnTest.java b/tests/net/java/com/android/server/connectivity/VpnTest.java
index 155c61f..1994d1f 100644
--- a/tests/net/java/com/android/server/connectivity/VpnTest.java
+++ b/tests/net/java/com/android/server/connectivity/VpnTest.java
@@ -59,9 +59,15 @@
 import android.content.pm.UserInfo;
 import android.content.res.Resources;
 import android.net.ConnectivityManager;
+import android.net.Ikev2VpnProfile;
+import android.net.InetAddresses;
+import android.net.IpPrefix;
+import android.net.IpSecManager;
+import android.net.LinkProperties;
 import android.net.Network;
 import android.net.NetworkCapabilities;
 import android.net.NetworkInfo.DetailedState;
+import android.net.RouteInfo;
 import android.net.UidRange;
 import android.net.VpnManager;
 import android.net.VpnService;
@@ -72,6 +78,7 @@
 import android.os.Process;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.provider.Settings;
 import android.security.Credentials;
 import android.security.KeyStore;
 import android.util.ArrayMap;
@@ -83,6 +90,7 @@
 import com.android.internal.R;
 import com.android.internal.net.VpnConfig;
 import com.android.internal.net.VpnProfile;
+import com.android.server.IpSecService;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -92,6 +100,7 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import java.net.Inet4Address;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -124,6 +133,9 @@
     }
 
     static final String TEST_VPN_PKG = "com.dummy.vpn";
+    private static final String TEST_VPN_SERVER = "1.2.3.4";
+    private static final String TEST_VPN_IDENTITY = "identity";
+    private static final byte[] TEST_VPN_PSK = "psk".getBytes();
 
     /**
      * Names and UIDs for some fake packages. Important points:
@@ -148,24 +160,41 @@
     @Mock private AppOpsManager mAppOps;
     @Mock private NotificationManager mNotificationManager;
     @Mock private Vpn.SystemServices mSystemServices;
+    @Mock private Vpn.Ikev2SessionCreator mIkev2SessionCreator;
     @Mock private ConnectivityManager mConnectivityManager;
+    @Mock private IpSecService mIpSecService;
     @Mock private KeyStore mKeyStore;
-    private final VpnProfile mVpnProfile = new VpnProfile("key");
+    private final VpnProfile mVpnProfile;
+
+    private IpSecManager mIpSecManager;
+
+    public VpnTest() throws Exception {
+        // Build an actual VPN profile that is capable of being converted to and from an
+        // Ikev2VpnProfile
+        final Ikev2VpnProfile.Builder builder =
+                new Ikev2VpnProfile.Builder(TEST_VPN_SERVER, TEST_VPN_IDENTITY);
+        builder.setAuthPsk(TEST_VPN_PSK);
+        mVpnProfile = builder.build().toVpnProfile();
+    }
 
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
 
+        mIpSecManager = new IpSecManager(mContext, mIpSecService);
+
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
         setMockedPackages(mPackages);
 
-        when(mContext.getPackageName()).thenReturn(Vpn.class.getPackage().getName());
+        when(mContext.getPackageName()).thenReturn(TEST_VPN_PKG);
+        when(mContext.getOpPackageName()).thenReturn(TEST_VPN_PKG);
         when(mContext.getSystemService(eq(Context.USER_SERVICE))).thenReturn(mUserManager);
         when(mContext.getSystemService(eq(Context.APP_OPS_SERVICE))).thenReturn(mAppOps);
         when(mContext.getSystemService(eq(Context.NOTIFICATION_SERVICE)))
                 .thenReturn(mNotificationManager);
         when(mContext.getSystemService(eq(Context.CONNECTIVITY_SERVICE)))
                 .thenReturn(mConnectivityManager);
+        when(mContext.getSystemService(eq(Context.IPSEC_SERVICE))).thenReturn(mIpSecManager);
         when(mContext.getString(R.string.config_customVpnAlwaysOnDisconnectedDialogComponent))
                 .thenReturn(Resources.getSystem().getString(
                         R.string.config_customVpnAlwaysOnDisconnectedDialogComponent));
@@ -259,17 +288,17 @@
         assertFalse(vpn.getLockdown());
 
         // Set always-on without lockdown.
-        assertTrue(vpn.setAlwaysOnPackage(PKGS[1], false, Collections.emptyList()));
+        assertTrue(vpn.setAlwaysOnPackage(PKGS[1], false, Collections.emptyList(), mKeyStore));
         assertTrue(vpn.getAlwaysOn());
         assertFalse(vpn.getLockdown());
 
         // Set always-on with lockdown.
-        assertTrue(vpn.setAlwaysOnPackage(PKGS[1], true, Collections.emptyList()));
+        assertTrue(vpn.setAlwaysOnPackage(PKGS[1], true, Collections.emptyList(), mKeyStore));
         assertTrue(vpn.getAlwaysOn());
         assertTrue(vpn.getLockdown());
 
         // Remove always-on configuration.
-        assertTrue(vpn.setAlwaysOnPackage(null, false, Collections.emptyList()));
+        assertTrue(vpn.setAlwaysOnPackage(null, false, Collections.emptyList(), mKeyStore));
         assertFalse(vpn.getAlwaysOn());
         assertFalse(vpn.getLockdown());
     }
@@ -283,11 +312,11 @@
         assertUnblocked(vpn, user.start + PKG_UIDS[0], user.start + PKG_UIDS[1], user.start + PKG_UIDS[2], user.start + PKG_UIDS[3]);
 
         // Set always-on without lockdown.
-        assertTrue(vpn.setAlwaysOnPackage(PKGS[1], false, null));
+        assertTrue(vpn.setAlwaysOnPackage(PKGS[1], false, null, mKeyStore));
         assertUnblocked(vpn, user.start + PKG_UIDS[0], user.start + PKG_UIDS[1], user.start + PKG_UIDS[2], user.start + PKG_UIDS[3]);
 
         // Set always-on with lockdown.
-        assertTrue(vpn.setAlwaysOnPackage(PKGS[1], true, null));
+        assertTrue(vpn.setAlwaysOnPackage(PKGS[1], true, null, mKeyStore));
         verify(mNetService).setAllowOnlyVpnForUids(eq(true), aryEq(new UidRange[] {
             new UidRange(user.start, user.start + PKG_UIDS[1] - 1),
             new UidRange(user.start + PKG_UIDS[1] + 1, user.stop)
@@ -296,7 +325,7 @@
         assertUnblocked(vpn, user.start + PKG_UIDS[1]);
 
         // Switch to another app.
-        assertTrue(vpn.setAlwaysOnPackage(PKGS[3], true, null));
+        assertTrue(vpn.setAlwaysOnPackage(PKGS[3], true, null, mKeyStore));
         verify(mNetService).setAllowOnlyVpnForUids(eq(false), aryEq(new UidRange[] {
             new UidRange(user.start, user.start + PKG_UIDS[1] - 1),
             new UidRange(user.start + PKG_UIDS[1] + 1, user.stop)
@@ -315,7 +344,8 @@
         final UidRange user = UidRange.createForUser(primaryUser.id);
 
         // Set always-on with lockdown and whitelist app PKGS[2] from lockdown.
-        assertTrue(vpn.setAlwaysOnPackage(PKGS[1], true, Collections.singletonList(PKGS[2])));
+        assertTrue(vpn.setAlwaysOnPackage(
+                PKGS[1], true, Collections.singletonList(PKGS[2]), mKeyStore));
         verify(mNetService).setAllowOnlyVpnForUids(eq(true), aryEq(new UidRange[] {
                 new UidRange(user.start, user.start + PKG_UIDS[1] - 1),
                 new UidRange(user.start + PKG_UIDS[2] + 1, user.stop)
@@ -324,7 +354,8 @@
         assertUnblocked(vpn, user.start + PKG_UIDS[1], user.start + PKG_UIDS[2]);
 
         // Change whitelisted app to PKGS[3].
-        assertTrue(vpn.setAlwaysOnPackage(PKGS[1], true, Collections.singletonList(PKGS[3])));
+        assertTrue(vpn.setAlwaysOnPackage(
+                PKGS[1], true, Collections.singletonList(PKGS[3]), mKeyStore));
         verify(mNetService).setAllowOnlyVpnForUids(eq(false), aryEq(new UidRange[] {
                 new UidRange(user.start + PKG_UIDS[2] + 1, user.stop)
         }));
@@ -336,7 +367,8 @@
         assertUnblocked(vpn, user.start + PKG_UIDS[1], user.start + PKG_UIDS[3]);
 
         // Change the VPN app.
-        assertTrue(vpn.setAlwaysOnPackage(PKGS[0], true, Collections.singletonList(PKGS[3])));
+        assertTrue(vpn.setAlwaysOnPackage(
+                PKGS[0], true, Collections.singletonList(PKGS[3]), mKeyStore));
         verify(mNetService).setAllowOnlyVpnForUids(eq(false), aryEq(new UidRange[] {
                 new UidRange(user.start, user.start + PKG_UIDS[1] - 1),
                 new UidRange(user.start + PKG_UIDS[1] + 1, user.start + PKG_UIDS[3] - 1)
@@ -349,7 +381,7 @@
         assertUnblocked(vpn, user.start + PKG_UIDS[0], user.start + PKG_UIDS[3]);
 
         // Remove the whitelist.
-        assertTrue(vpn.setAlwaysOnPackage(PKGS[0], true, null));
+        assertTrue(vpn.setAlwaysOnPackage(PKGS[0], true, null, mKeyStore));
         verify(mNetService).setAllowOnlyVpnForUids(eq(false), aryEq(new UidRange[] {
                 new UidRange(user.start + PKG_UIDS[0] + 1, user.start + PKG_UIDS[3] - 1),
                 new UidRange(user.start + PKG_UIDS[3] + 1, user.stop)
@@ -362,7 +394,8 @@
         assertUnblocked(vpn, user.start + PKG_UIDS[0]);
 
         // Add the whitelist.
-        assertTrue(vpn.setAlwaysOnPackage(PKGS[0], true, Collections.singletonList(PKGS[1])));
+        assertTrue(vpn.setAlwaysOnPackage(
+                PKGS[0], true, Collections.singletonList(PKGS[1]), mKeyStore));
         verify(mNetService).setAllowOnlyVpnForUids(eq(false), aryEq(new UidRange[] {
                 new UidRange(user.start + PKG_UIDS[0] + 1, user.stop)
         }));
@@ -374,12 +407,13 @@
         assertUnblocked(vpn, user.start + PKG_UIDS[0], user.start + PKG_UIDS[1]);
 
         // Try whitelisting a package with a comma, should be rejected.
-        assertFalse(vpn.setAlwaysOnPackage(PKGS[0], true, Collections.singletonList("a.b,c.d")));
+        assertFalse(vpn.setAlwaysOnPackage(
+                PKGS[0], true, Collections.singletonList("a.b,c.d"), mKeyStore));
 
         // Pass a non-existent packages in the whitelist, they (and only they) should be ignored.
         // Whitelisted package should change from PGKS[1] to PKGS[2].
-        assertTrue(vpn.setAlwaysOnPackage(PKGS[0], true,
-                Arrays.asList("com.foo.app", PKGS[2], "com.bar.app")));
+        assertTrue(vpn.setAlwaysOnPackage(
+                PKGS[0], true, Arrays.asList("com.foo.app", PKGS[2], "com.bar.app"), mKeyStore));
         verify(mNetService).setAllowOnlyVpnForUids(eq(false), aryEq(new UidRange[]{
                 new UidRange(user.start + PKG_UIDS[0] + 1, user.start + PKG_UIDS[1] - 1),
                 new UidRange(user.start + PKG_UIDS[1] + 1, user.stop)
@@ -404,7 +438,7 @@
         final UidRange profile = UidRange.createForUser(tempProfile.id);
 
         // Set lockdown.
-        assertTrue(vpn.setAlwaysOnPackage(PKGS[3], true, null));
+        assertTrue(vpn.setAlwaysOnPackage(PKGS[3], true, null, mKeyStore));
         verify(mNetService).setAllowOnlyVpnForUids(eq(true), aryEq(new UidRange[] {
             new UidRange(user.start, user.start + PKG_UIDS[3] - 1),
             new UidRange(user.start + PKG_UIDS[3] + 1, user.stop)
@@ -498,22 +532,22 @@
                 .thenReturn(Collections.singletonList(resInfo));
 
         // null package name should return false
-        assertFalse(vpn.isAlwaysOnPackageSupported(null));
+        assertFalse(vpn.isAlwaysOnPackageSupported(null, mKeyStore));
 
         // Pre-N apps are not supported
         appInfo.targetSdkVersion = VERSION_CODES.M;
-        assertFalse(vpn.isAlwaysOnPackageSupported(PKGS[0]));
+        assertFalse(vpn.isAlwaysOnPackageSupported(PKGS[0], mKeyStore));
 
         // N+ apps are supported by default
         appInfo.targetSdkVersion = VERSION_CODES.N;
-        assertTrue(vpn.isAlwaysOnPackageSupported(PKGS[0]));
+        assertTrue(vpn.isAlwaysOnPackageSupported(PKGS[0], mKeyStore));
 
         // Apps that opt out explicitly are not supported
         appInfo.targetSdkVersion = VERSION_CODES.CUR_DEVELOPMENT;
         Bundle metaData = new Bundle();
         metaData.putBoolean(VpnService.SERVICE_META_DATA_SUPPORTS_ALWAYS_ON, false);
         svcInfo.metaData = metaData;
-        assertFalse(vpn.isAlwaysOnPackageSupported(PKGS[0]));
+        assertFalse(vpn.isAlwaysOnPackageSupported(PKGS[0], mKeyStore));
     }
 
     @Test
@@ -530,7 +564,7 @@
                 .cancelAsUser(anyString(), anyInt(), eq(userHandle));
 
         // Start showing a notification for disconnected once always-on.
-        vpn.setAlwaysOnPackage(PKGS[0], false, null);
+        vpn.setAlwaysOnPackage(PKGS[0], false, null, mKeyStore);
         order.verify(mNotificationManager)
                 .notifyAsUser(anyString(), anyInt(), any(), eq(userHandle));
 
@@ -544,7 +578,7 @@
                 .notifyAsUser(anyString(), anyInt(), any(), eq(userHandle));
 
         // Notification should be cleared after unsetting always-on package.
-        vpn.setAlwaysOnPackage(null, false, null);
+        vpn.setAlwaysOnPackage(null, false, null, mKeyStore);
         order.verify(mNotificationManager).cancelAsUser(anyString(), anyInt(), eq(userHandle));
     }
 
@@ -655,8 +689,12 @@
     }
 
     private Vpn createVpnAndSetupUidChecks(int... grantedOps) throws Exception {
-        final Vpn vpn = createVpn(primaryUser.id);
-        setMockedUsers(primaryUser);
+        return createVpnAndSetupUidChecks(primaryUser, grantedOps);
+    }
+
+    private Vpn createVpnAndSetupUidChecks(UserInfo user, int... grantedOps) throws Exception {
+        final Vpn vpn = createVpn(user.id);
+        setMockedUsers(user);
 
         when(mPackageManager.getPackageUidAsUser(eq(TEST_VPN_PKG), anyInt()))
                 .thenReturn(Process.myUid());
@@ -725,6 +763,19 @@
     }
 
     @Test
+    public void testProvisionVpnProfileRestrictedUser() throws Exception {
+        final Vpn vpn =
+                createVpnAndSetupUidChecks(
+                        restrictedProfileA, AppOpsManager.OP_ACTIVATE_PLATFORM_VPN);
+
+        try {
+            vpn.provisionVpnProfile(TEST_VPN_PKG, mVpnProfile, mKeyStore);
+            fail("Expected SecurityException due to restricted user");
+        } catch (SecurityException expected) {
+        }
+    }
+
+    @Test
     public void testDeleteVpnProfile() throws Exception {
         final Vpn vpn = createVpnAndSetupUidChecks();
 
@@ -735,6 +786,19 @@
     }
 
     @Test
+    public void testDeleteVpnProfileRestrictedUser() throws Exception {
+        final Vpn vpn =
+                createVpnAndSetupUidChecks(
+                        restrictedProfileA, AppOpsManager.OP_ACTIVATE_PLATFORM_VPN);
+
+        try {
+            vpn.deleteVpnProfile(TEST_VPN_PKG, mKeyStore);
+            fail("Expected SecurityException due to restricted user");
+        } catch (SecurityException expected) {
+        }
+    }
+
+    @Test
     public void testGetVpnProfilePrivileged() throws Exception {
         final Vpn vpn = createVpnAndSetupUidChecks();
 
@@ -819,6 +883,32 @@
     }
 
     @Test
+    public void testStartVpnProfileRestrictedUser() throws Exception {
+        final Vpn vpn =
+                createVpnAndSetupUidChecks(
+                        restrictedProfileA, AppOpsManager.OP_ACTIVATE_PLATFORM_VPN);
+
+        try {
+            vpn.startVpnProfile(TEST_VPN_PKG, mKeyStore);
+            fail("Expected SecurityException due to restricted user");
+        } catch (SecurityException expected) {
+        }
+    }
+
+    @Test
+    public void testStopVpnProfileRestrictedUser() throws Exception {
+        final Vpn vpn =
+                createVpnAndSetupUidChecks(
+                        restrictedProfileA, AppOpsManager.OP_ACTIVATE_PLATFORM_VPN);
+
+        try {
+            vpn.stopVpnProfile(TEST_VPN_PKG);
+            fail("Expected SecurityException due to restricted user");
+        } catch (SecurityException expected) {
+        }
+    }
+
+    @Test
     public void testSetPackageAuthorizationVpnService() throws Exception {
         final Vpn vpn = createVpnAndSetupUidChecks();
 
@@ -863,11 +953,68 @@
                         eq(AppOpsManager.MODE_IGNORED));
     }
 
+    private void setAndVerifyAlwaysOnPackage(Vpn vpn, int uid, boolean lockdownEnabled) {
+        assertTrue(vpn.setAlwaysOnPackage(TEST_VPN_PKG, lockdownEnabled, null, mKeyStore));
+
+        verify(mKeyStore).get(eq(vpn.getProfileNameForPackage(TEST_VPN_PKG)));
+        verify(mAppOps).setMode(
+                eq(AppOpsManager.OP_ACTIVATE_PLATFORM_VPN), eq(uid), eq(TEST_VPN_PKG),
+                eq(AppOpsManager.MODE_ALLOWED));
+
+        verify(mSystemServices).settingsSecurePutStringForUser(
+                eq(Settings.Secure.ALWAYS_ON_VPN_APP), eq(TEST_VPN_PKG), eq(primaryUser.id));
+        verify(mSystemServices).settingsSecurePutIntForUser(
+                eq(Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN), eq(lockdownEnabled ? 1 : 0),
+                eq(primaryUser.id));
+        verify(mSystemServices).settingsSecurePutStringForUser(
+                eq(Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN_WHITELIST), eq(""), eq(primaryUser.id));
+    }
+
+    @Test
+    public void testSetAndStartAlwaysOnVpn() throws Exception {
+        final Vpn vpn = createVpn(primaryUser.id);
+        setMockedUsers(primaryUser);
+
+        // UID checks must return a different UID; otherwise it'll be treated as already prepared.
+        final int uid = Process.myUid() + 1;
+        when(mPackageManager.getPackageUidAsUser(eq(TEST_VPN_PKG), anyInt()))
+                .thenReturn(uid);
+        when(mKeyStore.get(vpn.getProfileNameForPackage(TEST_VPN_PKG)))
+                .thenReturn(mVpnProfile.encode());
+
+        setAndVerifyAlwaysOnPackage(vpn, uid, false);
+        assertTrue(vpn.startAlwaysOnVpn(mKeyStore));
+
+        // TODO: Test the Ikev2VpnRunner started up properly. Relies on utility methods added in
+        // a subsequent CL.
+    }
+
+    @Test
+    public void testStartLegacyVpn() throws Exception {
+        final Vpn vpn = createVpn(primaryUser.id);
+        setMockedUsers(primaryUser);
+
+        // Dummy egress interface
+        final String egressIface = "DUMMY0";
+        final LinkProperties lp = new LinkProperties();
+        lp.setInterfaceName(egressIface);
+
+        final RouteInfo defaultRoute = new RouteInfo(new IpPrefix(Inet4Address.ANY, 0),
+                        InetAddresses.parseNumericAddress("192.0.2.0"), egressIface);
+        lp.addRoute(defaultRoute);
+
+        vpn.startLegacyVpn(mVpnProfile, mKeyStore, lp);
+
+        // TODO: Test the Ikev2VpnRunner started up properly. Relies on utility methods added in
+        // a subsequent CL.
+    }
+
     /**
      * Mock some methods of vpn object.
      */
     private Vpn createVpn(@UserIdInt int userId) {
-        return new Vpn(Looper.myLooper(), mContext, mNetService, userId, mSystemServices);
+        return new Vpn(Looper.myLooper(), mContext, mNetService,
+                userId, mKeyStore, mSystemServices, mIkev2SessionCreator);
     }
 
     private static void assertBlocked(Vpn vpn, int... uids) {
diff --git a/tools/aapt2/dump/DumpManifest.cpp b/tools/aapt2/dump/DumpManifest.cpp
index 31aa249..e7a8203 100644
--- a/tools/aapt2/dump/DumpManifest.cpp
+++ b/tools/aapt2/dump/DumpManifest.cpp
@@ -1188,7 +1188,7 @@
     }
 
     // Fully qualify the activity name
-    ssize_t idx = name.find(".");
+    ssize_t idx = name.find('.');
     if (idx == 0) {
       name = package + name;
     } else if (idx < 0) {
@@ -2138,7 +2138,7 @@
     size_t pos = file_path.find("lib/");
     if (pos != std::string::npos) {
       file_path = file_path.substr(pos + 4);
-      pos = file_path.find("/");
+      pos = file_path.find('/');
       if (pos != std::string::npos) {
         file_path = file_path.substr(0, pos);
       }
diff --git a/tools/aapt2/java/ManifestClassGenerator.cpp b/tools/aapt2/java/ManifestClassGenerator.cpp
index 10e504e..09ea03b 100644
--- a/tools/aapt2/java/ManifestClassGenerator.cpp
+++ b/tools/aapt2/java/ManifestClassGenerator.cpp
@@ -39,7 +39,7 @@
   }
 
   // Normalize only the java identifier, leave the original value unchanged.
-  if (result.find("-") != std::string::npos) {
+  if (result.find('-') != std::string::npos) {
     result = JavaClassGenerator::TransformToFieldName(result);
   }
 
diff --git a/tools/aapt2/link/ManifestFixer.cpp b/tools/aapt2/link/ManifestFixer.cpp
index 2af118c..5aa32f8 100644
--- a/tools/aapt2/link/ManifestFixer.cpp
+++ b/tools/aapt2/link/ManifestFixer.cpp
@@ -391,6 +391,7 @@
   manifest_action["uses-split"].Action(RequiredNameIsJavaPackage);
   manifest_action["queries"]["package"].Action(RequiredNameIsJavaPackage);
   manifest_action["queries"]["intent"] = intent_filter_action;
+  manifest_action["queries"]["provider"].Action(RequiredAndroidAttribute("authorities"));
   // TODO: more complicated component name tag
 
   manifest_action["key-sets"]["key-set"]["public-key"];
diff --git a/tools/stats_log_api_gen/Android.bp b/tools/stats_log_api_gen/Android.bp
index a251c05..d5031d7 100644
--- a/tools/stats_log_api_gen/Android.bp
+++ b/tools/stats_log_api_gen/Android.bp
@@ -121,7 +121,13 @@
     shared_libs: [
         "liblog",
         "libcutils",
+        "libstatssocket",
     ],
-    static_libs: ["libstatssocket"],
+    apex_available: [
+        "//apex_available:platform",
+        //TODO(b/149781190): Remove this once statsd no longer depends on libstatslog
+        "com.android.os.statsd",
+        "test_com.android.os.statsd",
+    ],
 }
 
diff --git a/wifi/Android.bp b/wifi/Android.bp
index 6a29b1c..5c9fb4e 100644
--- a/wifi/Android.bp
+++ b/wifi/Android.bp
@@ -47,8 +47,8 @@
         // framework-wifi.jar. This is not a good idea, should move WifiNetworkScoreCache
         // to a separate package.
         "java/android/net/wifi/WifiNetworkScoreCache.java",
-        "java/android/net/wifi/WifiOemConfigStoreMigrationHook.java",
-        "java/android/net/wifi/wificond/*.java",
+        "java/android/net/wifi/WifiOemMigrationHook.java",
+        "java/android/net/wifi/nl80211/*.java",
         ":libwificond_ipc_aidl",
     ],
 }
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index 1f1c0c1..3025caf 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -125,6 +125,8 @@
 
     DhcpInfo getDhcpInfo();
 
+    void setScanAlwaysAvailable(boolean isAvailable);
+
     boolean isScanAlwaysAvailable();
 
     boolean acquireWifiLock(IBinder lock, int lockType, String tag, in WorkSource ws);
@@ -266,4 +268,14 @@
      * Return the Map of {@link WifiNetworkSuggestion} and the list of <ScanResult>
      */
     Map getMatchingScanResults(in List<WifiNetworkSuggestion> networkSuggestions, in List<ScanResult> scanResults, String callingPackage, String callingFeatureId);
+
+    void setScanThrottleEnabled(boolean enable);
+
+    boolean isScanThrottleEnabled();
+
+    Map getAllMatchingPasspointProfilesForScanResults(in List<ScanResult> scanResult);
+
+    void setAutoWakeupEnabled(boolean enable);
+
+    boolean isAutoWakeupEnabled();
 }
diff --git a/wifi/java/android/net/wifi/SoftApConfiguration.java b/wifi/java/android/net/wifi/SoftApConfiguration.java
index c8fd243..ae5bf7d 100644
--- a/wifi/java/android/net/wifi/SoftApConfiguration.java
+++ b/wifi/java/android/net/wifi/SoftApConfiguration.java
@@ -17,6 +17,7 @@
 package android.net.wifi;
 
 import android.annotation.IntDef;
+import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
@@ -202,6 +203,11 @@
     private final List<MacAddress> mAllowedClientList;
 
     /**
+     * Whether auto shutdown of soft AP is enabled or not.
+     */
+    private final boolean mAutoShutdownEnabled;
+
+    /**
      * Delay in milliseconds before shutting down soft AP when
      * there are no connected devices.
      */
@@ -240,9 +246,9 @@
     /** Private constructor for Builder and Parcelable implementation. */
     private SoftApConfiguration(@Nullable String ssid, @Nullable MacAddress bssid,
             @Nullable String passphrase, boolean hiddenSsid, @BandType int band, int channel,
-            @SecurityType int securityType, int maxNumberOfClients, int shutdownTimeoutMillis,
-            boolean clientControlByUser, @NonNull List<MacAddress> blockedList,
-            @NonNull List<MacAddress> allowedList) {
+            @SecurityType int securityType, int maxNumberOfClients, boolean shutdownTimeoutEnabled,
+            int shutdownTimeoutMillis, boolean clientControlByUser,
+            @NonNull List<MacAddress> blockedList, @NonNull List<MacAddress> allowedList) {
         mSsid = ssid;
         mBssid = bssid;
         mPassphrase = passphrase;
@@ -251,6 +257,7 @@
         mChannel = channel;
         mSecurityType = securityType;
         mMaxNumberOfClients = maxNumberOfClients;
+        mAutoShutdownEnabled = shutdownTimeoutEnabled;
         mShutdownTimeoutMillis = shutdownTimeoutMillis;
         mClientControlByUser = clientControlByUser;
         mBlockedClientList = new ArrayList<>(blockedList);
@@ -274,6 +281,7 @@
                 && mChannel == other.mChannel
                 && mSecurityType == other.mSecurityType
                 && mMaxNumberOfClients == other.mMaxNumberOfClients
+                && mAutoShutdownEnabled == other.mAutoShutdownEnabled
                 && mShutdownTimeoutMillis == other.mShutdownTimeoutMillis
                 && mClientControlByUser == other.mClientControlByUser
                 && Objects.equals(mBlockedClientList, other.mBlockedClientList)
@@ -283,8 +291,9 @@
     @Override
     public int hashCode() {
         return Objects.hash(mSsid, mBssid, mPassphrase, mHiddenSsid,
-                mBand, mChannel, mSecurityType, mMaxNumberOfClients, mShutdownTimeoutMillis,
-                mClientControlByUser, mBlockedClientList, mAllowedClientList);
+                mBand, mChannel, mSecurityType, mMaxNumberOfClients, mAutoShutdownEnabled,
+                mShutdownTimeoutMillis, mClientControlByUser, mBlockedClientList,
+                mAllowedClientList);
     }
 
     @Override
@@ -299,6 +308,7 @@
         sbuf.append(" \n Channel =").append(mChannel);
         sbuf.append(" \n SecurityType=").append(getSecurityType());
         sbuf.append(" \n MaxClient=").append(mMaxNumberOfClients);
+        sbuf.append(" \n AutoShutdownEnabled=").append(mAutoShutdownEnabled);
         sbuf.append(" \n ShutdownTimeoutMillis=").append(mShutdownTimeoutMillis);
         sbuf.append(" \n ClientControlByUser=").append(mClientControlByUser);
         sbuf.append(" \n BlockedClientList=").append(mBlockedClientList);
@@ -316,6 +326,7 @@
         dest.writeInt(mChannel);
         dest.writeInt(mSecurityType);
         dest.writeInt(mMaxNumberOfClients);
+        dest.writeBoolean(mAutoShutdownEnabled);
         dest.writeInt(mShutdownTimeoutMillis);
         dest.writeBoolean(mClientControlByUser);
         dest.writeTypedList(mBlockedClientList);
@@ -335,7 +346,7 @@
                     in.readString(),
                     in.readParcelable(MacAddress.class.getClassLoader()),
                     in.readString(), in.readBoolean(), in.readInt(), in.readInt(), in.readInt(),
-                    in.readInt(), in.readInt(), in.readBoolean(),
+                    in.readInt(), in.readBoolean(), in.readInt(), in.readBoolean(),
                     in.createTypedArrayList(MacAddress.CREATOR),
                     in.createTypedArrayList(MacAddress.CREATOR));
         }
@@ -429,6 +440,18 @@
     }
 
     /**
+     * Returns whether auto shutdown is enabled or not.
+     * The Soft AP will shutdown when there are no devices associated to it for
+     * the timeout duration. See {@link Builder#setAutoShutdownEnabled(boolean)}.
+     *
+     * @hide
+     */
+    @SystemApi
+    public boolean isAutoShutdownEnabled() {
+        return mAutoShutdownEnabled;
+    }
+
+    /**
      * Returns the shutdown timeout in milliseconds.
      * The Soft AP will shutdown when there are no devices associated to it for
      * the timeout duration. See {@link Builder#setShutdownTimeoutMillis(int)}.
@@ -519,6 +542,9 @@
             case BAND_5GHZ:
                 wifiConfig.apBand  = WifiConfiguration.AP_BAND_5GHZ;
                 break;
+            case BAND_2GHZ | BAND_5GHZ:
+                wifiConfig.apBand  = WifiConfiguration.AP_BAND_ANY;
+                break;
             case BAND_ANY:
                 wifiConfig.apBand  = WifiConfiguration.AP_BAND_ANY;
                 break;
@@ -548,6 +574,7 @@
         private int mChannel;
         private int mMaxNumberOfClients;
         private int mSecurityType;
+        private boolean mAutoShutdownEnabled;
         private int mShutdownTimeoutMillis;
         private boolean mClientControlByUser;
         private List<MacAddress> mBlockedClientList;
@@ -565,6 +592,7 @@
             mChannel = 0;
             mMaxNumberOfClients = 0;
             mSecurityType = SECURITY_TYPE_OPEN;
+            mAutoShutdownEnabled = true; // enabled by default.
             mShutdownTimeoutMillis = 0;
             mClientControlByUser = false;
             mBlockedClientList = new ArrayList<>();
@@ -585,6 +613,7 @@
             mChannel = other.mChannel;
             mMaxNumberOfClients = other.mMaxNumberOfClients;
             mSecurityType = other.mSecurityType;
+            mAutoShutdownEnabled = other.mAutoShutdownEnabled;
             mShutdownTimeoutMillis = other.mShutdownTimeoutMillis;
             mClientControlByUser = other.mClientControlByUser;
             mBlockedClientList = new ArrayList<>(other.mBlockedClientList);
@@ -600,8 +629,8 @@
         public SoftApConfiguration build() {
             return new SoftApConfiguration(mSsid, mBssid, mPassphrase,
                     mHiddenSsid, mBand, mChannel, mSecurityType, mMaxNumberOfClients,
-                    mShutdownTimeoutMillis, mClientControlByUser, mBlockedClientList,
-                    mAllowedClientList);
+                    mAutoShutdownEnabled, mShutdownTimeoutMillis, mClientControlByUser,
+                    mBlockedClientList, mAllowedClientList);
         }
 
         /**
@@ -786,7 +815,7 @@
          * @return Builder for chaining.
          */
         @NonNull
-        public Builder setMaxNumberOfClients(int maxNumberOfClients) {
+        public Builder setMaxNumberOfClients(@IntRange(from = 0) int maxNumberOfClients) {
             if (maxNumberOfClients < 0) {
                 throw new IllegalArgumentException("maxNumberOfClients should be not negative");
             }
@@ -795,6 +824,25 @@
         }
 
         /**
+         * Specifies whether auto shutdown is enabled or not.
+         * The Soft AP will shut down when there are no devices connected to it for
+         * the timeout duration.
+         *
+         * <p>
+         * <li>If not set, defaults to true</li>
+         *
+         * @param enable true to enable, false to disable.
+         * @return Builder for chaining.
+         *
+         * @see #setShutdownTimeoutMillis(int)
+         */
+        @NonNull
+        public Builder setAutoShutdownEnabled(boolean enable) {
+            mAutoShutdownEnabled = enable;
+            return this;
+        }
+
+        /**
          * Specifies the shutdown timeout in milliseconds.
          * The Soft AP will shut down when there are no devices connected to it for
          * the timeout duration.
@@ -804,14 +852,16 @@
          *
          * <p>
          * <li>If not set, defaults to 0</li>
-         * <li>The shut down timout will apply when
-         * {@link Settings.Global.SOFT_AP_TIMEOUT_ENABLED} is true</li>
+         * <li>The shut down timeout will apply when {@link #setAutoShutdownEnabled(boolean)} is
+         * set to true</li>
          *
          * @param timeoutMillis milliseconds of the timeout delay.
          * @return Builder for chaining.
+         *
+         * @see #setAutoShutdownEnabled(boolean)
          */
         @NonNull
-        public Builder setShutdownTimeoutMillis(int timeoutMillis) {
+        public Builder setShutdownTimeoutMillis(@IntRange(from = 0) int timeoutMillis) {
             if (timeoutMillis < 0) {
                 throw new IllegalArgumentException("Invalid timeout value");
             }
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 7c3d0b9..e1450cb 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -486,7 +486,7 @@
                 allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SAE);
                 allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
                 allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
-                requirePMF = true;
+                requirePmf = true;
                 break;
             case SECURITY_TYPE_EAP_SUITE_B:
                 allowedProtocols.set(WifiConfiguration.Protocol.RSN);
@@ -496,14 +496,14 @@
                 allowedGroupManagementCiphers.set(WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256);
                 // Note: allowedSuiteBCiphers bitset will be set by the service once the
                 // certificates are attached to this profile
-                requirePMF = true;
+                requirePmf = true;
                 break;
             case SECURITY_TYPE_OWE:
                 allowedProtocols.set(WifiConfiguration.Protocol.RSN);
                 allowedKeyManagement.set(WifiConfiguration.KeyMgmt.OWE);
                 allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
                 allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
-                requirePMF = true;
+                requirePmf = true;
                 break;
             case SECURITY_TYPE_WAPI_PSK:
                 allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WAPI_PSK);
@@ -662,7 +662,7 @@
      * @hide
      */
     @SystemApi
-    public boolean requirePMF;
+    public boolean requirePmf;
 
     /**
      * Update identifier, for Passpoint network.
@@ -951,7 +951,7 @@
      * Indicate whether the network is trusted or not. Networks are considered trusted
      * if the user explicitly allowed this network connection.
      * This bit can be used by suggestion network, see
-     * {@link WifiNetworkSuggestion.Builder#setUnTrusted(boolean)}
+     * {@link WifiNetworkSuggestion.Builder#setUntrusted(boolean)}
      * @hide
      */
     public boolean trusted;
@@ -2112,7 +2112,8 @@
         return !TextUtils.isEmpty(FQDN)
                 && !TextUtils.isEmpty(providerFriendlyName)
                 && enterpriseConfig != null
-                && enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.NONE;
+                && enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.NONE
+                && !TextUtils.isEmpty(mPasspointUniqueId);
     }
 
     /**
@@ -2139,7 +2140,8 @@
     public boolean isEnterprise() {
         return (allowedKeyManagement.get(KeyMgmt.WPA_EAP)
                 || allowedKeyManagement.get(KeyMgmt.IEEE8021X)
-                || allowedKeyManagement.get(KeyMgmt.SUITE_B_192))
+                || allowedKeyManagement.get(KeyMgmt.SUITE_B_192)
+                || allowedKeyManagement.get(KeyMgmt.WAPI_CERT))
                 && enterpriseConfig != null
                 && enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.NONE;
     }
@@ -2167,7 +2169,7 @@
                 append(" BSSID: ").append(this.BSSID).append(" FQDN: ").append(this.FQDN)
                 .append(" PRIO: ").append(this.priority)
                 .append(" HIDDEN: ").append(this.hiddenSSID)
-                .append(" PMF: ").append(this.requirePMF)
+                .append(" PMF: ").append(this.requirePmf)
                 .append("CarrierId: ").append(this.carrierId)
                 .append('\n');
 
@@ -2415,6 +2417,9 @@
             if (allowedKeyManagement.get(KeyMgmt.SUITE_B_192)) {
                 keyMgmt += KeyMgmt.strings[KeyMgmt.SUITE_B_192];
             }
+            if (allowedKeyManagement.get(KeyMgmt.WAPI_CERT)) {
+                keyMgmt += KeyMgmt.strings[KeyMgmt.WAPI_CERT];
+            }
 
             if (TextUtils.isEmpty(keyMgmt)) {
                 throw new IllegalStateException("Not an EAP network");
@@ -2494,12 +2499,17 @@
      */
     @NonNull
     public String getKey() {
-        String key = providerFriendlyName == null
-                ? getSsidAndSecurityTypeString()
-                : FQDN + KeyMgmt.strings[KeyMgmt.WPA_EAP];
+        // Passpoint ephemeral networks have their unique identifier set. Return it as is to be
+        // able to match internally.
+        if (mPasspointUniqueId != null) {
+            return mPasspointUniqueId;
+        }
+
+        String key = getSsidAndSecurityTypeString();
         if (!shared) {
             key += "-" + UserHandle.getUserHandleForUid(creatorUid).getIdentifier();
         }
+
         return key;
     }
 
@@ -2751,9 +2761,10 @@
             mRandomizedMacAddress = source.mRandomizedMacAddress;
             macRandomizationSetting = source.macRandomizationSetting;
             randomizedMacExpirationTimeMs = source.randomizedMacExpirationTimeMs;
-            requirePMF = source.requirePMF;
+            requirePmf = source.requirePmf;
             updateIdentifier = source.updateIdentifier;
             carrierId = source.carrierId;
+            mPasspointUniqueId = source.mPasspointUniqueId;
         }
     }
 
@@ -2782,7 +2793,7 @@
         dest.writeInt(wepTxKeyIndex);
         dest.writeInt(priority);
         dest.writeInt(hiddenSSID ? 1 : 0);
-        dest.writeInt(requirePMF ? 1 : 0);
+        dest.writeInt(requirePmf ? 1 : 0);
         dest.writeString(updateIdentifier);
 
         writeBitSet(dest, allowedKeyManagement);
@@ -2826,6 +2837,7 @@
         dest.writeInt(osu ? 1 : 0);
         dest.writeLong(randomizedMacExpirationTimeMs);
         dest.writeInt(carrierId);
+        dest.writeString(mPasspointUniqueId);
     }
 
     /** Implement the Parcelable interface {@hide} */
@@ -2857,7 +2869,7 @@
                 config.wepTxKeyIndex = in.readInt();
                 config.priority = in.readInt();
                 config.hiddenSSID = in.readInt() != 0;
-                config.requirePMF = in.readInt() != 0;
+                config.requirePmf = in.readInt() != 0;
                 config.updateIdentifier = in.readString();
 
                 config.allowedKeyManagement   = readBitSet(in);
@@ -2900,6 +2912,7 @@
                 config.osu = in.readInt() != 0;
                 config.randomizedMacExpirationTimeMs = in.readLong();
                 config.carrierId = in.readInt();
+                config.mPasspointUniqueId = in.readString();
                 return config;
             }
 
@@ -2907,4 +2920,28 @@
                 return new WifiConfiguration[size];
             }
         };
+
+    /**
+     * Passpoint Unique identifier
+     * @hide
+     */
+    private String mPasspointUniqueId = null;
+
+    /**
+     * Set the Passpoint unique identifier
+     * @param uniqueId Passpoint unique identifier to be set
+     * @hide
+     */
+    public void setPasspointUniqueId(String uniqueId) {
+        mPasspointUniqueId = uniqueId;
+    }
+
+    /**
+     * Set the Passpoint unique identifier
+     * @hide
+     */
+    public String getPasspointUniqueId() {
+        return mPasspointUniqueId;
+    }
+
 }
diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java
index 7c031ea..0c306b4 100644
--- a/wifi/java/android/net/wifi/WifiInfo.java
+++ b/wifi/java/android/net/wifi/WifiInfo.java
@@ -291,6 +291,11 @@
      */
     private boolean mMeteredHint;
 
+    /**
+     * Passpoint unique key
+     */
+    private String mPasspointUniqueId;
+
     /** @hide */
     @UnsupportedAppUsage
     public WifiInfo() {
@@ -322,6 +327,7 @@
         setRequestingPackageName(null);
         setFQDN(null);
         setProviderFriendlyName(null);
+        setPasspointUniqueId(null);
         txBad = 0;
         txSuccess = 0;
         rxSuccess = 0;
@@ -370,6 +376,7 @@
             mWifiStandard = source.mWifiStandard;
             mMaxSupportedTxLinkSpeed = source.mMaxSupportedTxLinkSpeed;
             mMaxSupportedRxLinkSpeed = source.mMaxSupportedRxLinkSpeed;
+            mPasspointUniqueId = source.mPasspointUniqueId;
         }
     }
 
@@ -449,9 +456,8 @@
      * <p>
      * If the SSID can be decoded as UTF-8, it will be returned surrounded by double
      * quotation marks. Otherwise, it is returned as a string of hex digits.
-     * The SSID may be
-     * <lt>&lt;unknown ssid&gt;, if there is no network currently connected or if the caller has
-     * insufficient permissions to access the SSID.<lt>
+     * The SSID may be {@link WifiManager#UNKNOWN_SSID}, if there is no network currently connected
+     * or if the caller has insufficient permissions to access the SSID.
      * </p>
      * <p>
      * Prior to {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}, this method
@@ -978,6 +984,7 @@
         dest.writeInt(mWifiStandard);
         dest.writeInt(mMaxSupportedTxLinkSpeed);
         dest.writeInt(mMaxSupportedRxLinkSpeed);
+        dest.writeString(mPasspointUniqueId);
     }
 
     /** Implement the Parcelable interface {@hide} */
@@ -1022,6 +1029,7 @@
                 info.mWifiStandard = in.readInt();
                 info.mMaxSupportedTxLinkSpeed = in.readInt();
                 info.mMaxSupportedRxLinkSpeed = in.readInt();
+                info.mPasspointUniqueId = in.readString();
                 return info;
             }
 
@@ -1029,4 +1037,24 @@
                 return new WifiInfo[size];
             }
         };
+
+    /**
+     * Set the Passpoint unique identifier for the current connection
+     *
+     * @param passpointUniqueId Unique identifier
+     * @hide
+     */
+    public void setPasspointUniqueId(@Nullable String passpointUniqueId) {
+        mPasspointUniqueId = passpointUniqueId;
+    }
+
+    /**
+     * Get the Passpoint unique identifier for the current connection
+     *
+     * @return Passpoint unique identifier
+     * @hide
+     */
+    public @Nullable String getPasspointUniqueId() {
+        return mPasspointUniqueId;
+    }
 }
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index 1dc4a06..bab9a9e 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -28,6 +28,7 @@
 import android.annotation.RequiresPermission;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
+import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.annotation.SystemService;
 import android.app.ActivityManager;
@@ -45,6 +46,7 @@
 import android.net.wifi.hotspot2.PasspointConfiguration;
 import android.net.wifi.hotspot2.ProvisioningCallback;
 import android.os.Binder;
+import android.os.Build;
 import android.os.Handler;
 import android.os.HandlerExecutor;
 import android.os.IBinder;
@@ -1400,8 +1402,7 @@
         List<Pair<WifiConfiguration, Map<Integer, List<ScanResult>>>> configs = new ArrayList<>();
         try {
             Map<String, Map<Integer, List<ScanResult>>> results =
-                    mService.getAllMatchingFqdnsForScanResults(
-                            scanResults);
+                    mService.getAllMatchingPasspointProfilesForScanResults(scanResults);
             if (results.isEmpty()) {
                 return configs;
             }
@@ -1409,8 +1410,8 @@
                     mService.getWifiConfigsForPasspointProfiles(
                             new ArrayList<>(results.keySet()));
             for (WifiConfiguration configuration : wifiConfigurations) {
-                Map<Integer, List<ScanResult>> scanResultsPerNetworkType = results.get(
-                        configuration.FQDN);
+                Map<Integer, List<ScanResult>> scanResultsPerNetworkType =
+                        results.get(configuration.getKey());
                 if (scanResultsPerNetworkType != null) {
                     configs.add(Pair.create(configuration, scanResultsPerNetworkType));
                 }
@@ -1622,11 +1623,13 @@
          * @param wifiConfiguration WifiConfiguration object corresponding to the network
          *                          user selected.
          */
+        @SuppressLint("CallbackMethodName")
         default void select(@NonNull WifiConfiguration wifiConfiguration) {}
 
         /**
          * User rejected the app's request.
          */
+        @SuppressLint("CallbackMethodName")
         default void reject() {}
     }
 
@@ -1962,9 +1965,11 @@
      * for connecting to Passpoint networks that are operated by the Passpoint
      * service provider specified in the configuration.
      *
-     * Each configuration is uniquely identified by its FQDN (Fully Qualified Domain
-     * Name).  In the case when there is an existing configuration with the same
-     * FQDN, the new configuration will replace the existing configuration.
+     * Each configuration is uniquely identified by a unique key which depends on the contents of
+     * the configuration. This allows the caller to install multiple profiles with the same FQDN
+     * (Fully qualified domain name). Therefore, in order to update an existing profile, it is
+     * first required to remove it using {@link WifiManager#removePasspointConfiguration(String)}.
+     * Otherwise, a new profile will be added with both configuration.
      *
      * @param config The Passpoint configuration to be added
      * @throws IllegalArgumentException if configuration is invalid or Passpoint is not enabled on
@@ -2625,8 +2630,8 @@
     public void getWifiActivityEnergyInfoAsync(
             @NonNull @CallbackExecutor Executor executor,
             @NonNull OnWifiActivityEnergyInfoListener listener) {
-        if (executor == null) throw new IllegalArgumentException("executor cannot be null");
-        if (listener == null) throw new IllegalArgumentException("listener cannot be null");
+        Objects.requireNonNull(executor, "executor cannot be null");
+        Objects.requireNonNull(listener, "listener cannot be null");
         try {
             mService.getWifiActivityEnergyInfoAsync(
                     new OnWifiActivityEnergyInfoProxy(executor, listener));
@@ -2751,6 +2756,26 @@
     }
 
     /**
+     * Set if scanning is always available.
+     *
+     * If set to {@code true}, apps can issue {@link #startScan} and fetch scan results
+     * even when Wi-Fi is turned off.
+     *
+     * @param isAvailable true to enable, false to disable.
+     * @hide
+     * @see #isScanAlwaysAvailable()
+     */
+    @SystemApi
+    @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
+    public void setScanAlwaysAvailable(boolean isAvailable) {
+        try {
+            mService.setScanAlwaysAvailable(isAvailable);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Check if scanning is always available.
      *
      * If this return {@code true}, apps can issue {@link #startScan} and fetch scan results
@@ -2982,7 +3007,7 @@
     }
 
     /**
-     * Start Soft AP (hotspot) mode with the specified configuration.
+     * Start Soft AP (hotspot) mode for tethering purposes with the specified configuration.
      * Note that starting Soft AP mode may disable station mode operation if the device does not
      * support concurrency.
      * @param wifiConfig SSID, security and channel details as part of WifiConfiguration, or null to
@@ -3278,7 +3303,7 @@
     }
 
     /**
-     * Gets the Wi-Fi enabled state.
+     * Gets the tethered Wi-Fi hotspot enabled state.
      * @return One of {@link #WIFI_AP_STATE_DISABLED},
      *         {@link #WIFI_AP_STATE_DISABLING}, {@link #WIFI_AP_STATE_ENABLED},
      *         {@link #WIFI_AP_STATE_ENABLING}, {@link #WIFI_AP_STATE_FAILED}
@@ -3297,8 +3322,8 @@
     }
 
     /**
-     * Return whether Wi-Fi AP is enabled or disabled.
-     * @return {@code true} if Wi-Fi AP is enabled
+     * Return whether tethered Wi-Fi AP is enabled or disabled.
+     * @return {@code true} if tethered  Wi-Fi AP is enabled
      * @see #getWifiApState()
      *
      * @hide
@@ -3310,7 +3335,7 @@
     }
 
     /**
-     * Gets the Wi-Fi AP Configuration.
+     * Gets the tethered Wi-Fi AP Configuration.
      * @return AP details in WifiConfiguration
      *
      * Note that AP detail may contain configuration which is cannot be represented
@@ -3332,7 +3357,7 @@
     }
 
     /**
-     * Gets the Wi-Fi AP Configuration.
+     * Gets the Wi-Fi tethered AP Configuration.
      * @return AP details in {@link SoftApConfiguration}
      *
      * @hide
@@ -3349,7 +3374,7 @@
     }
 
     /**
-     * Sets the Wi-Fi AP Configuration.
+     * Sets the tethered Wi-Fi AP Configuration.
      * @return {@code true} if the operation succeeded, {@code false} otherwise
      *
      * @deprecated This API is deprecated. Use {@link #setSoftApConfiguration(SoftApConfiguration)}
@@ -3368,9 +3393,9 @@
     }
 
     /**
-     * Sets the Wi-Fi AP Configuration.
+     * Sets the tethered Wi-Fi AP Configuration.
      *
-     * If the API is called while the soft AP is enabled, the configuration will apply to
+     * If the API is called while the tethered soft AP is enabled, the configuration will apply to
      * the current soft AP if the new configuration only includes
      * {@link SoftApConfiguration.Builder#setMaxNumberOfClients(int)}
      * or {@link SoftApConfiguration.Builder#setShutdownTimeoutMillis(int)}
@@ -4896,7 +4921,10 @@
     }
 
     /** @hide */
-    @UnsupportedAppUsage
+    @UnsupportedAppUsage(
+            maxTargetSdk = Build.VERSION_CODES.Q,
+            publicAlternatives = "Use {@code #setVerboseLoggingEnabled(boolean)} instead."
+    )
     @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
     public void enableVerboseLogging (int verbose) {
         try {
@@ -4924,7 +4952,10 @@
 
     /** @hide */
     // TODO(b/145484145): remove once SUW stops calling this via reflection
-    @UnsupportedAppUsage
+    @UnsupportedAppUsage(
+            maxTargetSdk = Build.VERSION_CODES.Q,
+            publicAlternatives = "Use {@code #isVerboseLoggingEnabled()} instead."
+    )
     public int getVerboseLoggingLevel() {
         try {
             return mService.getVerboseLoggingLevel();
@@ -6118,4 +6149,94 @@
             throw e.rethrowFromSystemServer();
         }
     }
+
+    /**
+     * Enable/disable wifi scan throttling from 3rd party apps.
+     *
+     * <p>
+     * The throttling limits for apps are described in
+     * <a href="Wi-Fi Scan Throttling">
+     * https://developer.android.com/guide/topics/connectivity/wifi-scan#wifi-scan-throttling</a>
+     * </p>
+     *
+     * @param enable true to allow scan throttling, false to disallow scan throttling.
+     * @hide
+     */
+    @SystemApi
+    @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
+    public void setScanThrottleEnabled(boolean enable) {
+        try {
+            mService.setScanThrottleEnabled(enable);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Get the persisted Wi-Fi scan throttle state. Defaults to true, unless changed by the user via
+     * Developer options.
+     *
+     * <p>
+     * The throttling limits for apps are described in
+     * <a href="Wi-Fi Scan Throttling">
+     * https://developer.android.com/guide/topics/connectivity/wifi-scan#wifi-scan-throttling</a>
+     * </p>
+     *
+     * @return true to indicate that scan throttling is enabled, false to indicate that scan
+     * throttling is disabled.
+     */
+    @RequiresPermission(ACCESS_WIFI_STATE)
+    public boolean isScanThrottleEnabled() {
+        try {
+            return mService.isScanThrottleEnabled();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Enable/disable wifi auto wakeup feature.
+     *
+     * <p>
+     * The feature is described in
+     * <a href="Wi-Fi Turn on automatically">
+     * https://source.android.com/devices/tech/connect/wifi-infrastructure
+     * #turn_on_wi-fi_automatically
+     * </a>
+     *
+     * @param enable true to enable, false to disable.
+     * @hide
+     */
+    @SystemApi
+    @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
+    public void setAutoWakeupEnabled(boolean enable) {
+        try {
+            mService.setAutoWakeupEnabled(enable);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Get the persisted Wi-Fi auto wakeup feature state. Defaults to false, unless changed by the
+     * user via Settings.
+     *
+     * <p>
+     * The feature is described in
+     * <a href="Wi-Fi Turn on automatically">
+     * https://source.android.com/devices/tech/connect/wifi-infrastructure
+     * #turn_on_wi-fi_automatically
+     * </a>
+     *
+     * @return true to indicate that wakeup feature is enabled, false to indicate that wakeup
+     * feature is disabled.
+     */
+    @RequiresPermission(ACCESS_WIFI_STATE)
+    public boolean isAutoWakeupEnabled() {
+        try {
+            return mService.isAutoWakeupEnabled();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
 }
diff --git a/wifi/java/android/net/wifi/WifiNetworkAgentSpecifier.java b/wifi/java/android/net/wifi/WifiNetworkAgentSpecifier.java
index 04d2e1a..6632c16 100644
--- a/wifi/java/android/net/wifi/WifiNetworkAgentSpecifier.java
+++ b/wifi/java/android/net/wifi/WifiNetworkAgentSpecifier.java
@@ -27,7 +27,6 @@
 import android.net.NetworkSpecifier;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.text.TextUtils;
 
 import java.util.Objects;
 
@@ -41,33 +40,10 @@
      */
     private final WifiConfiguration mWifiConfiguration;
 
-    /**
-     * The UID of the app that requested a specific wifi network using {@link WifiNetworkSpecifier}.
-     *
-     * Will only be filled when the device connects to a wifi network as a result of a
-     * {@link NetworkRequest} with {@link WifiNetworkSpecifier}. Will be set to -1 if the device
-     * auto-connected to a wifi network.
-     */
-    private final int mOriginalRequestorUid;
-
-    /**
-     * The package name of the app that requested a specific wifi network using
-     * {@link WifiNetworkSpecifier}.
-     *
-     * Will only be filled when the device connects to a wifi network as a result of a
-     * {@link NetworkRequest} with {@link WifiNetworkSpecifier}. Will be set to null if the device
-     * auto-connected to a wifi network.
-     */
-    private final String mOriginalRequestorPackageName;
-
-    public WifiNetworkAgentSpecifier(@NonNull WifiConfiguration wifiConfiguration,
-                                     int originalRequestorUid,
-                                     @Nullable String originalRequestorPackageName) {
+    public WifiNetworkAgentSpecifier(@NonNull WifiConfiguration wifiConfiguration) {
         checkNotNull(wifiConfiguration);
 
         mWifiConfiguration = wifiConfiguration;
-        mOriginalRequestorUid = originalRequestorUid;
-        mOriginalRequestorPackageName = originalRequestorPackageName;
     }
 
     /**
@@ -78,10 +54,7 @@
                 @Override
                 public WifiNetworkAgentSpecifier createFromParcel(@NonNull Parcel in) {
                     WifiConfiguration wifiConfiguration = in.readParcelable(null);
-                    int originalRequestorUid = in.readInt();
-                    String originalRequestorPackageName = in.readString();
-                    return new WifiNetworkAgentSpecifier(
-                            wifiConfiguration, originalRequestorUid, originalRequestorPackageName);
+                    return new WifiNetworkAgentSpecifier(wifiConfiguration);
                 }
 
                 @Override
@@ -98,8 +71,6 @@
     @Override
     public void writeToParcel(@NonNull Parcel dest, int flags) {
         dest.writeParcelable(mWifiConfiguration, flags);
-        dest.writeInt(mOriginalRequestorUid);
-        dest.writeString(mOriginalRequestorPackageName);
     }
 
     @Override
@@ -149,12 +120,6 @@
                 this.mWifiConfiguration.allowedKeyManagement)) {
             return false;
         }
-        if (ns.requestorUid != this.mOriginalRequestorUid) {
-            return false;
-        }
-        if (!TextUtils.equals(ns.requestorPackageName, this.mOriginalRequestorPackageName)) {
-            return false;
-        }
         return true;
     }
 
@@ -163,9 +128,7 @@
         return Objects.hash(
                 mWifiConfiguration.SSID,
                 mWifiConfiguration.BSSID,
-                mWifiConfiguration.allowedKeyManagement,
-                mOriginalRequestorUid,
-                mOriginalRequestorPackageName);
+                mWifiConfiguration.allowedKeyManagement);
     }
 
     @Override
@@ -180,10 +143,7 @@
         return Objects.equals(this.mWifiConfiguration.SSID, lhs.mWifiConfiguration.SSID)
                 && Objects.equals(this.mWifiConfiguration.BSSID, lhs.mWifiConfiguration.BSSID)
                 && Objects.equals(this.mWifiConfiguration.allowedKeyManagement,
-                    lhs.mWifiConfiguration.allowedKeyManagement)
-                && mOriginalRequestorUid == lhs.mOriginalRequestorUid
-                && TextUtils.equals(mOriginalRequestorPackageName,
-                lhs.mOriginalRequestorPackageName);
+                    lhs.mWifiConfiguration.allowedKeyManagement);
     }
 
     @Override
@@ -192,19 +152,11 @@
         sb.append("WifiConfiguration=")
                 .append(", SSID=").append(mWifiConfiguration.SSID)
                 .append(", BSSID=").append(mWifiConfiguration.BSSID)
-                .append(", mOriginalRequestorUid=").append(mOriginalRequestorUid)
-                .append(", mOriginalRequestorPackageName=").append(mOriginalRequestorPackageName)
                 .append("]");
         return sb.toString();
     }
 
     @Override
-    public void assertValidFromUid(int requestorUid) {
-        throw new IllegalStateException("WifiNetworkAgentSpecifier should never be used "
-                + "for requests.");
-    }
-
-    @Override
     public NetworkSpecifier redact() {
         return null;
     }
diff --git a/wifi/java/android/net/wifi/WifiNetworkSpecifier.java b/wifi/java/android/net/wifi/WifiNetworkSpecifier.java
index 444e1ef..3d946c9 100644
--- a/wifi/java/android/net/wifi/WifiNetworkSpecifier.java
+++ b/wifi/java/android/net/wifi/WifiNetworkSpecifier.java
@@ -20,7 +20,6 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.app.Application;
 import android.net.MacAddress;
 import android.net.MatchAllNetworkSpecifier;
 import android.net.NetworkRequest;
@@ -28,13 +27,9 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.PatternMatcher;
-import android.os.Process;
 import android.text.TextUtils;
-import android.util.Log;
 import android.util.Pair;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.Objects;
@@ -438,24 +433,7 @@
             return new WifiNetworkSpecifier(
                     mSsidPatternMatcher,
                     mBssidPatternMatcher,
-                    buildWifiConfiguration(),
-                    Process.myUid(),
-                    getCurrentApplicationReflectively().getApplicationContext().getOpPackageName());
-        }
-
-        // TODO(b/144102365): Remove once refactor is complete
-        private static Application getCurrentApplicationReflectively() {
-            try {
-                // reflection for static method android.app.ActivityThread#currentApplication()
-                Class<?> klass = Class.forName("android.app.ActivityThread");
-                Method currentApplicationMethod = klass.getDeclaredMethod("currentApplication");
-                Object result = currentApplicationMethod.invoke(null);
-                return (Application) result;
-            } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException
-                    | InvocationTargetException e) {
-                Log.e(TAG, "Failed to call ActivityThread#currentApplication() reflectively!", e);
-                throw new RuntimeException(e);
-            }
+                    buildWifiConfiguration());
         }
     }
 
@@ -483,20 +461,6 @@
      */
     public final WifiConfiguration wifiConfiguration;
 
-    /**
-     * The UID of the process initializing this network specifier. Validated by receiver using
-     * checkUidIfNecessary() and is used by satisfiedBy() to determine whether the specifier
-     * matches the offered network.
-     * @hide
-     */
-    public final int requestorUid;
-
-    /**
-     * The package name of the app initializing this network specifier.
-     * @hide
-     */
-    public final String requestorPackageName;
-
     /** @hide */
     public WifiNetworkSpecifier() throws IllegalAccessException {
         throw new IllegalAccessException("Use the builder to create an instance");
@@ -505,18 +469,14 @@
     /** @hide */
     public WifiNetworkSpecifier(@NonNull PatternMatcher ssidPatternMatcher,
                                 @NonNull Pair<MacAddress, MacAddress> bssidPatternMatcher,
-                                @NonNull WifiConfiguration wifiConfiguration,
-                                int requestorUid, @NonNull String requestorPackageName) {
+                                @NonNull WifiConfiguration wifiConfiguration) {
         checkNotNull(ssidPatternMatcher);
         checkNotNull(bssidPatternMatcher);
         checkNotNull(wifiConfiguration);
-        checkNotNull(requestorPackageName);
 
         this.ssidPatternMatcher = ssidPatternMatcher;
         this.bssidPatternMatcher = bssidPatternMatcher;
         this.wifiConfiguration = wifiConfiguration;
-        this.requestorUid = requestorUid;
-        this.requestorPackageName = requestorPackageName;
     }
 
     public static final @NonNull Creator<WifiNetworkSpecifier> CREATOR =
@@ -529,10 +489,8 @@
                     Pair<MacAddress, MacAddress> bssidPatternMatcher =
                             Pair.create(baseAddress, mask);
                     WifiConfiguration wifiConfiguration = in.readParcelable(null);
-                    int requestorUid = in.readInt();
-                    String requestorPackageName = in.readString();
                     return new WifiNetworkSpecifier(ssidPatternMatcher, bssidPatternMatcher,
-                            wifiConfiguration, requestorUid, requestorPackageName);
+                            wifiConfiguration);
                 }
 
                 @Override
@@ -552,18 +510,13 @@
         dest.writeParcelable(bssidPatternMatcher.first, flags);
         dest.writeParcelable(bssidPatternMatcher.second, flags);
         dest.writeParcelable(wifiConfiguration, flags);
-        dest.writeInt(requestorUid);
-        dest.writeString(requestorPackageName);
     }
 
     @Override
     public int hashCode() {
         return Objects.hash(
-                ssidPatternMatcher.getPath(),
-                ssidPatternMatcher.getType(),
-                bssidPatternMatcher,
-                wifiConfiguration.allowedKeyManagement,
-                requestorUid, requestorPackageName);
+                ssidPatternMatcher.getPath(), ssidPatternMatcher.getType(), bssidPatternMatcher,
+                wifiConfiguration.allowedKeyManagement);
     }
 
     @Override
@@ -582,9 +535,7 @@
                 && Objects.equals(this.bssidPatternMatcher,
                     lhs.bssidPatternMatcher)
                 && Objects.equals(this.wifiConfiguration.allowedKeyManagement,
-                    lhs.wifiConfiguration.allowedKeyManagement)
-                && requestorUid == lhs.requestorUid
-                && TextUtils.equals(requestorPackageName, lhs.requestorPackageName);
+                    lhs.wifiConfiguration.allowedKeyManagement);
     }
 
     @Override
@@ -595,8 +546,6 @@
                 .append(", BSSID Match pattern=").append(bssidPatternMatcher)
                 .append(", SSID=").append(wifiConfiguration.SSID)
                 .append(", BSSID=").append(wifiConfiguration.BSSID)
-                .append(", requestorUid=").append(requestorUid)
-                .append(", requestorPackageName=").append(requestorPackageName)
                 .append("]")
                 .toString();
     }
@@ -618,12 +567,4 @@
         // not make much sense!
         return equals(other);
     }
-
-    /** @hide */
-    @Override
-    public void assertValidFromUid(int requestorUid) {
-        if (this.requestorUid != requestorUid) {
-            throw new SecurityException("mismatched UIDs");
-        }
-    }
 }
diff --git a/wifi/java/android/net/wifi/WifiNetworkSuggestion.java b/wifi/java/android/net/wifi/WifiNetworkSuggestion.java
index 7201496..a854a4b 100644
--- a/wifi/java/android/net/wifi/WifiNetworkSuggestion.java
+++ b/wifi/java/android/net/wifi/WifiNetworkSuggestion.java
@@ -569,6 +569,7 @@
         private WifiConfiguration buildWifiConfigurationForPasspoint() {
             WifiConfiguration wifiConfiguration = new WifiConfiguration();
             wifiConfiguration.FQDN = mPasspointConfiguration.getHomeSp().getFqdn();
+            wifiConfiguration.setPasspointUniqueId(mPasspointConfiguration.getUniqueId());
             wifiConfiguration.priority = mPriority;
             wifiConfiguration.meteredOverride =
                     mIsMetered ? WifiConfiguration.METERED_OVERRIDE_METERED
@@ -804,7 +805,7 @@
     @Override
     public int hashCode() {
         return Objects.hash(wifiConfiguration.SSID, wifiConfiguration.BSSID,
-                wifiConfiguration.allowedKeyManagement, wifiConfiguration.FQDN);
+                wifiConfiguration.allowedKeyManagement, wifiConfiguration.getKey());
     }
 
     /**
@@ -827,7 +828,8 @@
                 && TextUtils.equals(this.wifiConfiguration.BSSID, lhs.wifiConfiguration.BSSID)
                 && Objects.equals(this.wifiConfiguration.allowedKeyManagement,
                 lhs.wifiConfiguration.allowedKeyManagement)
-                && TextUtils.equals(this.wifiConfiguration.FQDN, lhs.wifiConfiguration.FQDN);
+                && TextUtils.equals(this.wifiConfiguration.getKey(),
+                lhs.wifiConfiguration.getKey());
     }
 
     @Override
diff --git a/wifi/java/android/net/wifi/WifiOemConfigStoreMigrationHook.java b/wifi/java/android/net/wifi/WifiOemConfigStoreMigrationHook.java
deleted file mode 100755
index 642dcb9..0000000
--- a/wifi/java/android/net/wifi/WifiOemConfigStoreMigrationHook.java
+++ /dev/null
@@ -1,180 +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.net.wifi;
-
-import static com.android.internal.util.Preconditions.checkNotNull;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.SystemApi;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.util.List;
-
-/**
- * Class used to provide one time hooks for existing OEM devices to migrate their config store
- * data to the wifi mainline module.
- * <p>
- * Note:
- * <li> OEM's need to implement {@link #load()} only if their
- * existing config store format or file locations differs from the vanilla AOSP implementation (
- * which is what the wifi mainline module understands).
- * </li>
- * <li> The wifi mainline module will invoke {@link #load()}  method on every bootup, its
- * the responsibility of the OEM implementation to ensure that this method returns non-null data
- * only on the first bootup. Once the migration is done, the OEM can safely delete their config
- * store files and then return null on any subsequent reboots. The first & only relevant invocation
- * of {@link #load()} occurs when a previously released device upgrades to the wifi
- * mainline module from an OEM implementation of the wifi stack.
- * </li>
- * @hide
- */
-@SystemApi
-public final class WifiOemConfigStoreMigrationHook {
-    /**
-     * Container for all the wifi config data to migrate.
-     */
-    public static final class MigrationData implements Parcelable {
-        /**
-         * Builder to create instance of {@link MigrationData}.
-         */
-        public static final class Builder {
-            private List<WifiConfiguration> mUserSavedNetworkConfigurations;
-            private SoftApConfiguration mUserSoftApConfiguration;
-
-            public Builder() {
-                mUserSavedNetworkConfigurations = null;
-                mUserSoftApConfiguration = null;
-            }
-
-            /**
-             * Sets the list of all user's saved network configurations parsed from OEM config
-             * store files.
-             *
-             * @param userSavedNetworkConfigurations List of {@link WifiConfiguration} representing
-             *                                       the list of user's saved networks
-             * @return Instance of {@link Builder} to enable chaining of the builder method.
-             */
-            public @NonNull Builder setUserSavedNetworkConfigurations(
-                    @NonNull List<WifiConfiguration> userSavedNetworkConfigurations) {
-                checkNotNull(userSavedNetworkConfigurations);
-                mUserSavedNetworkConfigurations = userSavedNetworkConfigurations;
-                return this;
-            }
-
-            /**
-             * Sets the user's softap configuration parsed from OEM config store files.
-             *
-             * @param userSoftApConfiguration {@link SoftApConfiguration} representing user's
-             *                                SoftAp configuration
-             * @return Instance of {@link Builder} to enable chaining of the builder method.
-             */
-            public @NonNull Builder setUserSoftApConfiguration(
-                    @NonNull SoftApConfiguration userSoftApConfiguration) {
-                checkNotNull(userSoftApConfiguration);
-                mUserSoftApConfiguration  = userSoftApConfiguration;
-                return this;
-            }
-
-            /**
-             * Build an instance of {@link MigrationData}.
-             *
-             * @return Instance of {@link MigrationData}.
-             */
-            public @NonNull MigrationData build() {
-                return new MigrationData(mUserSavedNetworkConfigurations, mUserSoftApConfiguration);
-            }
-        }
-
-        private final List<WifiConfiguration> mUserSavedNetworkConfigurations;
-        private final SoftApConfiguration mUserSoftApConfiguration;
-
-        private MigrationData(
-                @Nullable List<WifiConfiguration> userSavedNetworkConfigurations,
-                @Nullable SoftApConfiguration userSoftApConfiguration) {
-            mUserSavedNetworkConfigurations = userSavedNetworkConfigurations;
-            mUserSoftApConfiguration = userSoftApConfiguration;
-        }
-
-        public static final @NonNull Parcelable.Creator<MigrationData> CREATOR =
-                new Parcelable.Creator<MigrationData>() {
-                    @Override
-                    public MigrationData createFromParcel(Parcel in) {
-                        List<WifiConfiguration> userSavedNetworkConfigurations =
-                                in.readArrayList(null);
-                        SoftApConfiguration userSoftApConfiguration = in.readParcelable(null);
-                        return new MigrationData(
-                                userSavedNetworkConfigurations, userSoftApConfiguration);
-                    }
-
-                    @Override
-                    public MigrationData[] newArray(int size) {
-                        return new MigrationData[size];
-                    }
-                };
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(@NonNull Parcel dest, int flags) {
-            dest.writeList(mUserSavedNetworkConfigurations);
-            dest.writeParcelable(mUserSoftApConfiguration, flags);
-        }
-
-        /**
-         * Returns list of all user's saved network configurations.
-         *
-         * Note: Only to be returned if there is any format change in how OEM persisted this info.
-         * @return List of {@link WifiConfiguration} representing the list of user's saved networks,
-         * or null if no migration necessary.
-         */
-        @Nullable
-        public List<WifiConfiguration> getUserSavedNetworkConfigurations() {
-            return mUserSavedNetworkConfigurations;
-        }
-
-        /**
-         * Returns user's softap configuration.
-         *
-         * Note: Only to be returned if there is any format change in how OEM persisted this info.
-         * @return {@link SoftApConfiguration} representing user's SoftAp configuration,
-         * or null if no migration necessary.
-         */
-        @Nullable
-        public SoftApConfiguration getUserSoftApConfiguration() {
-            return mUserSoftApConfiguration;
-        }
-    }
-
-    private WifiOemConfigStoreMigrationHook() { }
-
-    /**
-     * Load data from OEM's config store.
-     *
-     * @return Instance of {@link MigrationData} for migrating data, null if no
-     * migration is necessary.
-     */
-    @Nullable
-    public static MigrationData load() {
-        // Note: OEM's should add code to parse data from their config store format here!
-        return null;
-    }
-}
diff --git a/wifi/java/android/net/wifi/WifiOemMigrationHook.java b/wifi/java/android/net/wifi/WifiOemMigrationHook.java
new file mode 100755
index 0000000..44dbb98
--- /dev/null
+++ b/wifi/java/android/net/wifi/WifiOemMigrationHook.java
@@ -0,0 +1,443 @@
+/*
+ * 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.net.wifi;
+
+import static com.android.internal.util.Preconditions.checkNotNull;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SystemApi;
+import android.content.Context;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.Settings;
+
+import java.util.List;
+
+/**
+ * Class used to provide one time hooks for existing OEM devices to migrate their config store
+ * data and other settings to the wifi mainline module.
+ * @hide
+ */
+@SystemApi
+public final class WifiOemMigrationHook {
+
+    private WifiOemMigrationHook() { }
+
+    /**
+     * Container for all the wifi config data to migrate.
+     */
+    public static final class ConfigStoreMigrationData implements Parcelable {
+        /**
+         * Builder to create instance of {@link ConfigStoreMigrationData}.
+         */
+        public static final class Builder {
+            private List<WifiConfiguration> mUserSavedNetworkConfigurations;
+            private SoftApConfiguration mUserSoftApConfiguration;
+
+            public Builder() {
+                mUserSavedNetworkConfigurations = null;
+                mUserSoftApConfiguration = null;
+            }
+
+            /**
+             * Sets the list of all user's saved network configurations parsed from OEM config
+             * store files.
+             *
+             * @param userSavedNetworkConfigurations List of {@link WifiConfiguration} representing
+             *                                       the list of user's saved networks
+             * @return Instance of {@link Builder} to enable chaining of the builder method.
+             */
+            public @NonNull Builder setUserSavedNetworkConfigurations(
+                    @NonNull List<WifiConfiguration> userSavedNetworkConfigurations) {
+                checkNotNull(userSavedNetworkConfigurations);
+                mUserSavedNetworkConfigurations = userSavedNetworkConfigurations;
+                return this;
+            }
+
+            /**
+             * Sets the user's softap configuration parsed from OEM config store files.
+             *
+             * @param userSoftApConfiguration {@link SoftApConfiguration} representing user's
+             *                                SoftAp configuration
+             * @return Instance of {@link Builder} to enable chaining of the builder method.
+             */
+            public @NonNull Builder setUserSoftApConfiguration(
+                    @NonNull SoftApConfiguration userSoftApConfiguration) {
+                checkNotNull(userSoftApConfiguration);
+                mUserSoftApConfiguration  = userSoftApConfiguration;
+                return this;
+            }
+
+            /**
+             * Build an instance of {@link ConfigStoreMigrationData}.
+             *
+             * @return Instance of {@link ConfigStoreMigrationData}.
+             */
+            public @NonNull ConfigStoreMigrationData build() {
+                return new ConfigStoreMigrationData(
+                        mUserSavedNetworkConfigurations, mUserSoftApConfiguration);
+            }
+        }
+
+        private final List<WifiConfiguration> mUserSavedNetworkConfigurations;
+        private final SoftApConfiguration mUserSoftApConfiguration;
+
+        private ConfigStoreMigrationData(
+                @Nullable List<WifiConfiguration> userSavedNetworkConfigurations,
+                @Nullable SoftApConfiguration userSoftApConfiguration) {
+            mUserSavedNetworkConfigurations = userSavedNetworkConfigurations;
+            mUserSoftApConfiguration = userSoftApConfiguration;
+        }
+
+        public static final @NonNull Parcelable.Creator<ConfigStoreMigrationData> CREATOR =
+                new Parcelable.Creator<ConfigStoreMigrationData>() {
+                    @Override
+                    public ConfigStoreMigrationData createFromParcel(Parcel in) {
+                        List<WifiConfiguration> userSavedNetworkConfigurations =
+                                in.readArrayList(null);
+                        SoftApConfiguration userSoftApConfiguration = in.readParcelable(null);
+                        return new ConfigStoreMigrationData(
+                                userSavedNetworkConfigurations, userSoftApConfiguration);
+                    }
+
+                    @Override
+                    public ConfigStoreMigrationData[] newArray(int size) {
+                        return new ConfigStoreMigrationData[size];
+                    }
+                };
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(@NonNull Parcel dest, int flags) {
+            dest.writeList(mUserSavedNetworkConfigurations);
+            dest.writeParcelable(mUserSoftApConfiguration, flags);
+        }
+
+        /**
+         * Returns list of all user's saved network configurations.
+         *
+         * Note: Only to be returned if there is any format change in how OEM persisted this info.
+         * @return List of {@link WifiConfiguration} representing the list of user's saved networks,
+         * or null if no migration necessary.
+         */
+        @Nullable
+        public List<WifiConfiguration> getUserSavedNetworkConfigurations() {
+            return mUserSavedNetworkConfigurations;
+        }
+
+        /**
+         * Returns user's softap configuration.
+         *
+         * Note: Only to be returned if there is any format change in how OEM persisted this info.
+         * @return {@link SoftApConfiguration} representing user's SoftAp configuration,
+         * or null if no migration necessary.
+         */
+        @Nullable
+        public SoftApConfiguration getUserSoftApConfiguration() {
+            return mUserSoftApConfiguration;
+        }
+    }
+
+    /**
+     * Load data from OEM's config store.
+     * <p>
+     * Note:
+     * <li> OEM's need to implement {@link #loadFromConfigStore()} ()} only if their
+     * existing config store format or file locations differs from the vanilla AOSP implementation (
+     * which is what the wifi mainline module understands).
+     * </li>
+     * <li> The wifi mainline module will invoke {@link #loadFromConfigStore()} method on every
+     * bootup, its the responsibility of the OEM implementation to ensure that this method returns
+     * non-null data only on the first bootup. Once the migration is done, the OEM can safely delete
+     * their config store files and then return null on any subsequent reboots. The first & only
+     * relevant invocation of {@link #loadFromConfigStore()} occurs when a previously released
+     * device upgrades to the wifi mainline module from an OEM implementation of the wifi stack.
+     * </li>
+     *
+     * @return Instance of {@link ConfigStoreMigrationData} for migrating data, null if no
+     * migration is necessary.
+     */
+    @Nullable
+    public static ConfigStoreMigrationData loadFromConfigStore() {
+        // Note: OEM's should add code to parse data from their config store format here!
+        return null;
+    }
+
+    /**
+     * Container for all the wifi settings data to migrate.
+     */
+    public static final class SettingsMigrationData implements Parcelable {
+        private final boolean mScanAlwaysAvailable;
+        private final boolean mP2pFactoryResetPending;
+        private final String mP2pDeviceName;
+        private final boolean mSoftApTimeoutEnabled;
+        private final boolean mWakeupEnabled;
+        private final boolean mScanThrottleEnabled;
+        private final boolean mVerboseLoggingEnabled;
+
+        private SettingsMigrationData(boolean scanAlwaysAvailable, boolean p2pFactoryResetPending,
+                @Nullable String p2pDeviceName, boolean softApTimeoutEnabled, boolean wakeupEnabled,
+                boolean scanThrottleEnabled, boolean verboseLoggingEnabled) {
+            mScanAlwaysAvailable = scanAlwaysAvailable;
+            mP2pFactoryResetPending = p2pFactoryResetPending;
+            mP2pDeviceName = p2pDeviceName;
+            mSoftApTimeoutEnabled = softApTimeoutEnabled;
+            mWakeupEnabled = wakeupEnabled;
+            mScanThrottleEnabled = scanThrottleEnabled;
+            mVerboseLoggingEnabled = verboseLoggingEnabled;
+        }
+
+        public static final @NonNull Parcelable.Creator<SettingsMigrationData> CREATOR =
+                new Parcelable.Creator<SettingsMigrationData>() {
+                    @Override
+                    public SettingsMigrationData createFromParcel(Parcel in) {
+                        boolean scanAlwaysAvailable = in.readBoolean();
+                        boolean p2pFactoryResetPending = in.readBoolean();
+                        String p2pDeviceName = in.readString();
+                        boolean softApTimeoutEnabled = in.readBoolean();
+                        boolean wakeupEnabled = in.readBoolean();
+                        boolean scanThrottleEnabled = in.readBoolean();
+                        boolean verboseLoggingEnabled = in.readBoolean();
+                        return new SettingsMigrationData(
+                                scanAlwaysAvailable, p2pFactoryResetPending,
+                                p2pDeviceName, softApTimeoutEnabled, wakeupEnabled,
+                                scanThrottleEnabled, verboseLoggingEnabled);
+                    }
+
+                    @Override
+                    public SettingsMigrationData[] newArray(int size) {
+                        return new SettingsMigrationData[size];
+                    }
+                };
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(@NonNull Parcel dest, int flags) {
+            dest.writeBoolean(mScanAlwaysAvailable);
+            dest.writeBoolean(mP2pFactoryResetPending);
+            dest.writeString(mP2pDeviceName);
+            dest.writeBoolean(mSoftApTimeoutEnabled);
+            dest.writeBoolean(mWakeupEnabled);
+            dest.writeBoolean(mScanThrottleEnabled);
+            dest.writeBoolean(mVerboseLoggingEnabled);
+        }
+
+        /**
+         * @return True if scans are allowed even when wifi is toggled off, false otherwise.
+         */
+        public boolean isScanAlwaysAvailable() {
+            return mScanAlwaysAvailable;
+        }
+
+        /**
+         * @return indicate whether factory reset request is pending.
+         */
+        public boolean isP2pFactoryResetPending() {
+            return mP2pFactoryResetPending;
+        }
+
+        /**
+         * @return the Wi-Fi peer-to-peer device name
+         */
+        public @Nullable String getP2pDeviceName() {
+            return mP2pDeviceName;
+        }
+
+        /**
+         * @return Whether soft AP will shut down after a timeout period when no devices are
+         * connected.
+         */
+        public boolean isSoftApTimeoutEnabled() {
+            return mSoftApTimeoutEnabled;
+        }
+
+        /**
+         * @return whether Wi-Fi Wakeup feature is enabled.
+         */
+        public boolean isWakeUpEnabled() {
+            return mWakeupEnabled;
+        }
+
+        /**
+         * @return Whether wifi scan throttle is enabled or not.
+         */
+        public boolean isScanThrottleEnabled() {
+            return mScanThrottleEnabled;
+        }
+
+        /**
+         * @return Whether to enable verbose logging in Wi-Fi.
+         */
+        public boolean isVerboseLoggingEnabled() {
+            return mVerboseLoggingEnabled;
+        }
+
+        /**
+         * Builder to create instance of {@link SettingsMigrationData}.
+         */
+        public static final class Builder {
+            private boolean mScanAlwaysAvailable;
+            private boolean mP2pFactoryResetPending;
+            private String mP2pDeviceName;
+            private boolean mSoftApTimeoutEnabled;
+            private boolean mWakeupEnabled;
+            private boolean mScanThrottleEnabled;
+            private boolean mVerboseLoggingEnabled;
+
+            public Builder() {
+            }
+
+            /**
+             * Setting to allow scans even when wifi is toggled off.
+             *
+             * @param available true if available, false otherwise.
+             * @return Instance of {@link Builder} to enable chaining of the builder method.
+             */
+            public @NonNull Builder setScanAlwaysAvailable(boolean available) {
+                mScanAlwaysAvailable = available;
+                return this;
+            }
+
+            /**
+             * Indicate whether factory reset request is pending.
+             *
+             * @param pending true if pending, false otherwise.
+             * @return Instance of {@link Builder} to enable chaining of the builder method.
+             */
+            public @NonNull Builder setP2pFactoryResetPending(boolean pending) {
+                mP2pFactoryResetPending = pending;
+                return this;
+            }
+
+            /**
+             * The Wi-Fi peer-to-peer device name
+             *
+             * @param name Name if set, null otherwise.
+             * @return Instance of {@link Builder} to enable chaining of the builder method.
+             */
+            public @NonNull Builder setP2pDeviceName(@Nullable String name) {
+                mP2pDeviceName = name;
+                return this;
+            }
+
+            /**
+             * Whether soft AP will shut down after a timeout period when no devices are connected.
+             *
+             * @param enabled true if enabled, false otherwise.
+             * @return Instance of {@link Builder} to enable chaining of the builder method.
+             */
+            public @NonNull Builder setSoftApTimeoutEnabled(boolean enabled) {
+                mSoftApTimeoutEnabled = enabled;
+                return this;
+            }
+
+            /**
+             * Value to specify if Wi-Fi Wakeup feature is enabled.
+             *
+             * @param enabled true if enabled, false otherwise.
+             * @return Instance of {@link Builder} to enable chaining of the builder method.
+             */
+            public @NonNull Builder setWakeUpEnabled(boolean enabled) {
+                mWakeupEnabled = enabled;
+                return this;
+            }
+
+            /**
+             * Whether wifi scan throttle is enabled or not.
+             *
+             * @param enabled true if enabled, false otherwise.
+             * @return Instance of {@link Builder} to enable chaining of the builder method.
+             */
+            public @NonNull Builder setScanThrottleEnabled(boolean enabled) {
+                mScanThrottleEnabled = enabled;
+                return this;
+            }
+
+            /**
+             * Setting to enable verbose logging in Wi-Fi.
+             *
+             * @param enabled true if enabled, false otherwise.
+             * @return Instance of {@link Builder} to enable chaining of the builder method.
+             */
+            public @NonNull Builder setVerboseLoggingEnabled(boolean enabled) {
+                mVerboseLoggingEnabled = enabled;
+                return this;
+            }
+
+            /**
+             * Build an instance of {@link SettingsMigrationData}.
+             *
+             * @return Instance of {@link SettingsMigrationData}.
+             */
+            public @NonNull SettingsMigrationData build() {
+                return new SettingsMigrationData(mScanAlwaysAvailable, mP2pFactoryResetPending,
+                        mP2pDeviceName, mSoftApTimeoutEnabled, mWakeupEnabled, mScanThrottleEnabled,
+                        mVerboseLoggingEnabled);
+            }
+        }
+    }
+
+    /**
+     * Load data from Settings.Global values.
+     *
+     * <p>
+     * Note:
+     * <li> This is method is invoked once on the first bootup. OEM can safely delete these settings
+     * once the migration is complete. The first & only relevant invocation of
+     * {@link #loadFromSettings(Context)} ()} occurs when a previously released
+     * device upgrades to the wifi mainline module from an OEM implementation of the wifi stack.
+     * </li>
+     *
+     * @param context Context to use for loading the settings provider.
+     * @return Instance of {@link SettingsMigrationData} for migrating data.
+     */
+    @NonNull
+    public static SettingsMigrationData loadFromSettings(@NonNull Context context) {
+        return new SettingsMigrationData.Builder()
+                .setScanAlwaysAvailable(
+                        Settings.Global.getInt(context.getContentResolver(),
+                                Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 0) == 1)
+                .setP2pFactoryResetPending(
+                        Settings.Global.getInt(context.getContentResolver(),
+                                Settings.Global.WIFI_P2P_PENDING_FACTORY_RESET, 0) == 1)
+                .setP2pDeviceName(
+                        Settings.Global.getString(context.getContentResolver(),
+                                Settings.Global.WIFI_P2P_DEVICE_NAME))
+                .setSoftApTimeoutEnabled(
+                        Settings.Global.getInt(context.getContentResolver(),
+                                Settings.Global.SOFT_AP_TIMEOUT_ENABLED, 1) == 1)
+                .setWakeUpEnabled(
+                        Settings.Global.getInt(context.getContentResolver(),
+                                Settings.Global.WIFI_WAKEUP_ENABLED, 0) == 1)
+                .setScanThrottleEnabled(
+                        Settings.Global.getInt(context.getContentResolver(),
+                                Settings.Global.WIFI_SCAN_THROTTLE_ENABLED, 1) == 1)
+                .setVerboseLoggingEnabled(
+                        Settings.Global.getInt(context.getContentResolver(),
+                                Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED, 1) == 1)
+                .build();
+    }
+}
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareAgentNetworkSpecifier.java b/wifi/java/android/net/wifi/aware/WifiAwareAgentNetworkSpecifier.java
index c667334..a4b3e86 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareAgentNetworkSpecifier.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareAgentNetworkSpecifier.java
@@ -143,12 +143,6 @@
     }
 
     @Override
-    public void assertValidFromUid(int requestorUid) {
-        throw new SecurityException(
-                "WifiAwareAgentNetworkSpecifier should not be used in network requests");
-    }
-
-    @Override
     public NetworkSpecifier redact() {
         return null;
     }
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareManager.java b/wifi/java/android/net/wifi/aware/WifiAwareManager.java
index 81bf81e..2ebaa18 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareManager.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareManager.java
@@ -34,7 +34,6 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
-import android.os.Process;
 import android.os.RemoteException;
 import android.util.Log;
 
@@ -447,8 +446,7 @@
                 pmk,
                 passphrase,
                 0, // no port info for deprecated IB APIs
-                -1, // no transport info for deprecated IB APIs
-                Process.myUid());
+                -1); // no transport info for deprecated IB APIs
     }
 
     /** @hide */
@@ -488,8 +486,7 @@
                 pmk,
                 passphrase,
                 0, // no port info for OOB APIs
-                -1, // no transport protocol info for OOB APIs
-                Process.myUid());
+                -1); // no transport protocol info for OOB APIs
     }
 
     private static class WifiAwareEventCallbackProxy extends IWifiAwareEventCallback.Stub {
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareNetworkSpecifier.java b/wifi/java/android/net/wifi/aware/WifiAwareNetworkSpecifier.java
index 5a4ed3c..65ac1ab 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareNetworkSpecifier.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareNetworkSpecifier.java
@@ -23,7 +23,6 @@
 import android.net.NetworkSpecifier;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.os.Process;
 import android.text.TextUtils;
 
 import java.util.Arrays;
@@ -144,19 +143,9 @@
      */
     public final int transportProtocol;
 
-    /**
-     * The UID of the process initializing this network specifier. Validated by receiver using
-     * checkUidIfNecessary() and is used by satisfiedBy() to determine whether matches the
-     * offered network.
-     *
-     * @hide
-     */
-    public final int requestorUid;
-
     /** @hide */
     public WifiAwareNetworkSpecifier(int type, int role, int clientId, int sessionId, int peerId,
-            byte[] peerMac, byte[] pmk, String passphrase, int port, int transportProtocol,
-            int requestorUid) {
+            byte[] peerMac, byte[] pmk, String passphrase, int port, int transportProtocol) {
         this.type = type;
         this.role = role;
         this.clientId = clientId;
@@ -167,7 +156,6 @@
         this.passphrase = passphrase;
         this.port = port;
         this.transportProtocol = transportProtocol;
-        this.requestorUid = requestorUid;
     }
 
     public static final @android.annotation.NonNull Creator<WifiAwareNetworkSpecifier> CREATOR =
@@ -184,8 +172,7 @@
                         in.createByteArray(), // pmk
                         in.readString(), // passphrase
                         in.readInt(), // port
-                        in.readInt(), // transportProtocol
-                        in.readInt()); // requestorUid
+                        in.readInt()); // transportProtocol
                 }
 
                 @Override
@@ -221,7 +208,6 @@
         dest.writeString(passphrase);
         dest.writeInt(port);
         dest.writeInt(transportProtocol);
-        dest.writeInt(requestorUid);
     }
 
     /** @hide */
@@ -238,7 +224,7 @@
     @Override
     public int hashCode() {
         return Objects.hash(type, role, clientId, sessionId, peerId, Arrays.hashCode(peerMac),
-                Arrays.hashCode(pmk), passphrase, port, transportProtocol, requestorUid);
+                Arrays.hashCode(pmk), passphrase, port, transportProtocol);
     }
 
     /** @hide */
@@ -263,8 +249,7 @@
                 && Arrays.equals(pmk, lhs.pmk)
                 && Objects.equals(passphrase, lhs.passphrase)
                 && port == lhs.port
-                && transportProtocol == lhs.transportProtocol
-                && requestorUid == lhs.requestorUid;
+                && transportProtocol == lhs.transportProtocol;
     }
 
     /** @hide */
@@ -283,19 +268,11 @@
                 // masking PII
                 .append(", passphrase=").append((passphrase == null) ? "<null>" : "<non-null>")
                 .append(", port=").append(port).append(", transportProtocol=")
-                .append(transportProtocol).append(", requestorUid=").append(requestorUid)
+                .append(transportProtocol)
                 .append("]");
         return sb.toString();
     }
 
-    /** @hide */
-    @Override
-    public void assertValidFromUid(int requestorUid) {
-        if (this.requestorUid != requestorUid) {
-            throw new SecurityException("mismatched UIDs");
-        }
-    }
-
     /**
      * A builder class for a Wi-Fi Aware network specifier to set up an Aware connection with a
      * peer.
@@ -463,7 +440,7 @@
             return new WifiAwareNetworkSpecifier(
                     WifiAwareNetworkSpecifier.NETWORK_SPECIFIER_TYPE_IB, role,
                     mDiscoverySession.mClientId, mDiscoverySession.mSessionId, mPeerHandle.peerId,
-                    null, mPmk, mPskPassphrase, mPort, mTransportProtocol, Process.myUid());
+                    null, mPmk, mPskPassphrase, mPort, mTransportProtocol);
         }
     }
 }
diff --git a/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java b/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java
index 615331f..4507cc2 100644
--- a/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java
+++ b/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java
@@ -19,6 +19,7 @@
 import static android.net.wifi.WifiConfiguration.METERED_OVERRIDE_NONE;
 import static android.net.wifi.WifiConfiguration.MeteredOverride;
 
+import android.annotation.CurrentTimeMillisLong;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
@@ -247,12 +248,12 @@
      *
      * Use Long.MIN_VALUE to indicate unset value.
      */
-    private long mSubscriptionExpirationTimeInMillis = Long.MIN_VALUE;
+    private long mSubscriptionExpirationTimeMillis = Long.MIN_VALUE;
     /**
      * @hide
      */
     public void setSubscriptionExpirationTimeInMillis(long subscriptionExpirationTimeInMillis) {
-        mSubscriptionExpirationTimeInMillis = subscriptionExpirationTimeInMillis;
+        mSubscriptionExpirationTimeMillis = subscriptionExpirationTimeInMillis;
     }
     /**
      *  Utility method to get the time this subscription will expire. It is in the format of number
@@ -260,8 +261,9 @@
      *
      *  @return The time this subscription will expire, or Long.MIN_VALUE to indicate unset value
      */
-    public long getSubscriptionExpirationTimeInMillis() {
-        return mSubscriptionExpirationTimeInMillis;
+    @CurrentTimeMillisLong
+    public long getSubscriptionExpirationTimeMillis() {
+        return mSubscriptionExpirationTimeMillis;
     }
 
     /**
@@ -561,7 +563,7 @@
         mUpdateIdentifier = source.mUpdateIdentifier;
         mCredentialPriority = source.mCredentialPriority;
         mSubscriptionCreationTimeInMillis = source.mSubscriptionCreationTimeInMillis;
-        mSubscriptionExpirationTimeInMillis = source.mSubscriptionExpirationTimeInMillis;
+        mSubscriptionExpirationTimeMillis = source.mSubscriptionExpirationTimeMillis;
         mSubscriptionType = source.mSubscriptionType;
         mUsageLimitDataLimit = source.mUsageLimitDataLimit;
         mUsageLimitStartTimeInMillis = source.mUsageLimitStartTimeInMillis;
@@ -590,7 +592,7 @@
         dest.writeInt(mUpdateIdentifier);
         dest.writeInt(mCredentialPriority);
         dest.writeLong(mSubscriptionCreationTimeInMillis);
-        dest.writeLong(mSubscriptionExpirationTimeInMillis);
+        dest.writeLong(mSubscriptionExpirationTimeMillis);
         dest.writeString(mSubscriptionType);
         dest.writeLong(mUsageLimitUsageTimePeriodInMinutes);
         dest.writeLong(mUsageLimitStartTimeInMillis);
@@ -628,7 +630,7 @@
                 && mUpdateIdentifier == that.mUpdateIdentifier
                 && mCredentialPriority == that.mCredentialPriority
                 && mSubscriptionCreationTimeInMillis == that.mSubscriptionCreationTimeInMillis
-                && mSubscriptionExpirationTimeInMillis == that.mSubscriptionExpirationTimeInMillis
+                && mSubscriptionExpirationTimeMillis == that.mSubscriptionExpirationTimeMillis
                 && TextUtils.equals(mSubscriptionType, that.mSubscriptionType)
                 && mUsageLimitUsageTimePeriodInMinutes == that.mUsageLimitUsageTimePeriodInMinutes
                 && mUsageLimitStartTimeInMillis == that.mUsageLimitStartTimeInMillis
@@ -646,7 +648,7 @@
     public int hashCode() {
         return Objects.hash(mHomeSp, mCredential, mPolicy, mSubscriptionUpdate, mTrustRootCertList,
                 mUpdateIdentifier, mCredentialPriority, mSubscriptionCreationTimeInMillis,
-                mSubscriptionExpirationTimeInMillis, mUsageLimitUsageTimePeriodInMinutes,
+                mSubscriptionExpirationTimeMillis, mUsageLimitUsageTimePeriodInMinutes,
                 mUsageLimitStartTimeInMillis, mUsageLimitDataLimit, mUsageLimitTimeLimitInMinutes,
                 mServiceFriendlyNames, mCarrierId, mIsAutojoinEnabled, mIsMacRandomizationEnabled,
                 mMeteredOverride);
@@ -661,8 +663,8 @@
                 mSubscriptionCreationTimeInMillis != Long.MIN_VALUE
                 ? new Date(mSubscriptionCreationTimeInMillis) : "Not specified").append("\n");
         builder.append("SubscriptionExpirationTime: ").append(
-                mSubscriptionExpirationTimeInMillis != Long.MIN_VALUE
-                ? new Date(mSubscriptionExpirationTimeInMillis) : "Not specified").append("\n");
+                mSubscriptionExpirationTimeMillis != Long.MIN_VALUE
+                ? new Date(mSubscriptionExpirationTimeMillis) : "Not specified").append("\n");
         builder.append("UsageLimitStartTime: ").append(mUsageLimitStartTimeInMillis != Long.MIN_VALUE
                 ? new Date(mUsageLimitStartTimeInMillis) : "Not specified").append("\n");
         builder.append("UsageTimePeriod: ").append(mUsageLimitUsageTimePeriodInMinutes)
@@ -898,16 +900,22 @@
     }
 
     /**
-     * Get a unique identifier for a PasspointConfiguration object.
+     * Get a unique identifier for a PasspointConfiguration object. The identifier depends on the
+     * configuration that identify the service provider under the HomeSp subtree, and on the
+     * credential configuration under the Credential subtree.
+     * The method throws an {@link IllegalStateException} if the configuration under HomeSp subtree
+     * or the configuration under Credential subtree are not initialized.
      *
      * @return A unique identifier
-     * @throws IllegalStateException if Credential or HomeSP nodes are not initialized
      */
-    public @NonNull String getUniqueId() throws IllegalStateException {
+    public @NonNull String getUniqueId() {
         if (mCredential == null || mHomeSp == null || TextUtils.isEmpty(mHomeSp.getFqdn())) {
             throw new IllegalStateException("Credential or HomeSP are not initialized");
         }
 
-        return mHomeSp.getFqdn();
+        StringBuilder sb = new StringBuilder();
+        sb.append(String.format("%s_%x%x", mHomeSp.getFqdn(), mHomeSp.getUniqueId(),
+                mCredential.getUniqueId()));
+        return sb.toString();
     }
 }
diff --git a/wifi/java/android/net/wifi/hotspot2/pps/Credential.java b/wifi/java/android/net/wifi/hotspot2/pps/Credential.java
index b037703..9c01d36 100644
--- a/wifi/java/android/net/wifi/hotspot2/pps/Credential.java
+++ b/wifi/java/android/net/wifi/hotspot2/pps/Credential.java
@@ -738,7 +738,16 @@
         @Override
         public String toString() {
             StringBuilder builder = new StringBuilder();
-            builder.append("IMSI: ").append(mImsi).append("\n");
+            String imsi;
+            if (mImsi != null) {
+                if (mImsi.length() > 6 && mImsi.charAt(6) != '*') {
+                    // Truncate the full IMSI from the log
+                    imsi = mImsi.substring(0, 6) + "****";
+                } else {
+                    imsi = mImsi;
+                }
+                builder.append("IMSI: ").append(imsi).append("\n");
+            }
             builder.append("EAPType: ").append(mEapType).append("\n");
             return builder.toString();
         }
@@ -1020,6 +1029,28 @@
                 Arrays.hashCode(mClientCertificateChain));
     }
 
+    /**
+     * Get a unique identifier for Credential. This identifier depends only on items that remain
+     * constant throughout the lifetime of a subscription's credentials.
+     *
+     * @hide
+     * @return a Unique identifier for a Credential object
+     */
+    public int getUniqueId() {
+        int usedCredential;
+
+        // Initialize usedCredential based on the credential type of the profile
+        if (mUserCredential != null) {
+            usedCredential = 0;
+        } else if (mCertCredential != null) {
+            usedCredential = 1;
+        } else {
+            usedCredential = 2;
+        }
+
+        return Objects.hash(usedCredential, mRealm);
+    }
+
     @Override
     public String toString() {
         StringBuilder builder = new StringBuilder();
diff --git a/wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java b/wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java
index 49a76c3..224c4be 100644
--- a/wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java
+++ b/wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java
@@ -16,8 +16,8 @@
 
 package android.net.wifi.hotspot2.pps;
 
-import android.os.Parcelable;
 import android.os.Parcel;
+import android.os.Parcelable;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -299,10 +299,26 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(mFqdn, mFriendlyName, mIconUrl, mHomeNetworkIds, mMatchAllOis,
-                mMatchAnyOis, mOtherHomePartners, mRoamingConsortiumOis);
+        return Objects.hash(mFqdn, mFriendlyName, mIconUrl,
+                mHomeNetworkIds, Arrays.hashCode(mMatchAllOis),
+                Arrays.hashCode(mMatchAnyOis), Arrays.hashCode(mOtherHomePartners),
+                Arrays.hashCode(mRoamingConsortiumOis));
     }
 
+    /**
+     * Get a unique identifier for HomeSp. This identifier depends only on items that remain
+     * constant throughout the lifetime of a subscription.
+     *
+     * @hide
+     * @return a Unique identifier for a HomeSp object
+     */
+    public int getUniqueId() {
+        return Objects.hash(mFqdn, mFriendlyName, mHomeNetworkIds, Arrays.hashCode(mMatchAllOis),
+                Arrays.hashCode(mMatchAnyOis), Arrays.hashCode(mOtherHomePartners),
+                Arrays.hashCode(mRoamingConsortiumOis));
+    }
+
+
     @Override
     public String toString() {
         StringBuilder builder = new StringBuilder();
diff --git a/wifi/java/android/net/wifi/nl80211/ChannelSettings.java b/wifi/java/android/net/wifi/nl80211/ChannelSettings.java
new file mode 100644
index 0000000..4c14fd4
--- /dev/null
+++ b/wifi/java/android/net/wifi/nl80211/ChannelSettings.java
@@ -0,0 +1,95 @@
+/*
+ * 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 android.net.wifi.nl80211;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+import java.util.Objects;
+
+/**
+ * ChannelSettings for wificond
+ *
+ * @hide
+ */
+public class ChannelSettings implements Parcelable {
+    private static final String TAG = "ChannelSettings";
+
+    public int frequency;
+
+    /** public constructor */
+    public ChannelSettings() { }
+
+    /** override comparator */
+    @Override
+    public boolean equals(Object rhs) {
+        if (this == rhs) return true;
+        if (!(rhs instanceof ChannelSettings)) {
+            return false;
+        }
+        ChannelSettings channel = (ChannelSettings) rhs;
+        if (channel == null) {
+            return false;
+        }
+        return frequency == channel.frequency;
+    }
+
+    /** override hash code */
+    @Override
+    public int hashCode() {
+        return Objects.hash(frequency);
+    }
+
+    /** implement Parcelable interface */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * implement Parcelable interface
+     * |flags| is ignored.
+     **/
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeInt(frequency);
+    }
+
+    /** implement Parcelable interface */
+    public static final Parcelable.Creator<ChannelSettings> CREATOR =
+            new Parcelable.Creator<ChannelSettings>() {
+        /**
+         * Caller is responsible for providing a valid parcel.
+         */
+        @Override
+        public ChannelSettings createFromParcel(Parcel in) {
+            ChannelSettings result = new ChannelSettings();
+            result.frequency = in.readInt();
+            if (in.dataAvail() != 0) {
+                Log.e(TAG, "Found trailing data after parcel parsing.");
+            }
+
+            return result;
+        }
+
+        @Override
+        public ChannelSettings[] newArray(int size) {
+            return new ChannelSettings[size];
+        }
+    };
+}
diff --git a/wifi/java/android/net/wifi/nl80211/DeviceWiphyCapabilities.java b/wifi/java/android/net/wifi/nl80211/DeviceWiphyCapabilities.java
new file mode 100644
index 0000000..a045aad
--- /dev/null
+++ b/wifi/java/android/net/wifi/nl80211/DeviceWiphyCapabilities.java
@@ -0,0 +1,272 @@
+/*
+ * 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.net.wifi.nl80211;
+
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
+import android.net.wifi.ScanResult;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+import java.util.Objects;
+
+/**
+ * DeviceWiphyCapabilities for wificond
+ *
+ * @hide
+ */
+@SystemApi
+public final class DeviceWiphyCapabilities implements Parcelable {
+    private static final String TAG = "DeviceWiphyCapabilities";
+
+    private boolean m80211nSupported;
+    private boolean m80211acSupported;
+    private boolean m80211axSupported;
+    private boolean mChannelWidth160MhzSupported;
+    private boolean mChannelWidth80p80MhzSupported;
+    private int mMaxNumberTxSpatialStreams;
+    private int mMaxNumberRxSpatialStreams;
+
+
+    /** public constructor */
+    public DeviceWiphyCapabilities() {
+        m80211nSupported = false;
+        m80211acSupported = false;
+        m80211axSupported = false;
+        mChannelWidth160MhzSupported = false;
+        mChannelWidth80p80MhzSupported = false;
+        mMaxNumberTxSpatialStreams = 1;
+        mMaxNumberRxSpatialStreams = 1;
+    }
+
+    /**
+     * Get the IEEE 802.11 standard support
+     *
+     * @param standard the IEEE 802.11 standard to check on its support.
+     *        valid values from {@link ScanResult}'s {@code WIFI_STANDARD_}
+     * @return {@code true} if supported, {@code false} otherwise.
+     */
+    public boolean isWifiStandardSupported(int standard) {
+        switch (standard) {
+            case ScanResult.WIFI_STANDARD_LEGACY:
+                return true;
+            case ScanResult.WIFI_STANDARD_11N:
+                return m80211nSupported;
+            case ScanResult.WIFI_STANDARD_11AC:
+                return m80211acSupported;
+            case ScanResult.WIFI_STANDARD_11AX:
+                return m80211axSupported;
+            default:
+                Log.e(TAG, "isWifiStandardSupported called with invalid standard: " + standard);
+                return false;
+        }
+    }
+
+    /**
+     * Set the IEEE 802.11 standard support
+     *
+     * @param standard the IEEE 802.11 standard to set its support.
+     *        valid values from {@link ScanResult}'s {@code WIFI_STANDARD_}
+     * @param support {@code true} if supported, {@code false} otherwise.
+     */
+    public void setWifiStandardSupport(int standard, boolean support) {
+        switch (standard) {
+            case ScanResult.WIFI_STANDARD_11N:
+                m80211nSupported = support;
+                break;
+            case ScanResult.WIFI_STANDARD_11AC:
+                m80211acSupported = support;
+                break;
+            case ScanResult.WIFI_STANDARD_11AX:
+                m80211axSupported = support;
+                break;
+            default:
+                Log.e(TAG, "setWifiStandardSupport called with invalid standard: " + standard);
+        }
+    }
+
+    /**
+     * Get the support for channel bandwidth
+     *
+     * @param chWidth valid values from {@link ScanResult}'s {@code CHANNEL_WIDTH_}
+     *
+     * @return {@code true} if supported, {@code false} otherwise.
+     */
+    public boolean isChannelWidthSupported(int chWidth) {
+        switch (chWidth) {
+            case ScanResult.CHANNEL_WIDTH_20MHZ:
+                return true;
+            case ScanResult.CHANNEL_WIDTH_40MHZ:
+                return (m80211nSupported || m80211acSupported || m80211axSupported);
+            case ScanResult.CHANNEL_WIDTH_80MHZ:
+                return (m80211acSupported || m80211axSupported);
+            case ScanResult.CHANNEL_WIDTH_160MHZ:
+                return mChannelWidth160MhzSupported;
+            case ScanResult.CHANNEL_WIDTH_80MHZ_PLUS_MHZ:
+                return mChannelWidth80p80MhzSupported;
+            default:
+                Log.e(TAG, "isChannelWidthSupported called with invalid channel width: " + chWidth);
+        }
+        return false;
+    }
+
+    /**
+     * Set support for channel bandwidth
+     *
+     * @param chWidth valid values are {@link ScanResult#CHANNEL_WIDTH_160MHZ} and
+     *        {@link ScanResult#CHANNEL_WIDTH_80MHZ_PLUS_MHZ}
+     * @param support {@code true} if supported, {@code false} otherwise.
+     */
+    public void setChannelWidthSupported(int chWidth, boolean support) {
+        switch (chWidth) {
+            case ScanResult.CHANNEL_WIDTH_160MHZ:
+                mChannelWidth160MhzSupported = support;
+                break;
+            case ScanResult.CHANNEL_WIDTH_80MHZ_PLUS_MHZ:
+                mChannelWidth80p80MhzSupported = support;
+                break;
+            default:
+                Log.e(TAG, "setChannelWidthSupported called with Invalid channel width: "
+                        + chWidth);
+        }
+    }
+
+    /**
+     * Get maximum number of transmit spatial streams
+     *
+     * @return number of spatial streams
+     */
+    public int getMaxNumberTxSpatialStreams() {
+        return mMaxNumberTxSpatialStreams;
+    }
+
+    /**
+     * Set maximum number of transmit spatial streams
+     *
+     * @param streams number of spatial streams
+     */
+    public void setMaxNumberTxSpatialStreams(int streams) {
+        mMaxNumberTxSpatialStreams = streams;
+    }
+
+    /**
+     * Get maximum number of receive spatial streams
+     *
+     * @return number of streams
+     */
+    public int getMaxNumberRxSpatialStreams() {
+        return mMaxNumberRxSpatialStreams;
+    }
+
+    /**
+     * Set maximum number of receive spatial streams
+     *
+     * @param streams number of streams
+     */
+    public void setMaxNumberRxSpatialStreams(int streams) {
+        mMaxNumberRxSpatialStreams = streams;
+    }
+
+    /** override comparator */
+    @Override
+    public boolean equals(Object rhs) {
+        if (this == rhs) return true;
+        if (!(rhs instanceof DeviceWiphyCapabilities)) {
+            return false;
+        }
+        DeviceWiphyCapabilities capa = (DeviceWiphyCapabilities) rhs;
+
+        return m80211nSupported == capa.m80211nSupported
+                && m80211acSupported == capa.m80211acSupported
+                && m80211axSupported == capa.m80211axSupported
+                && mChannelWidth160MhzSupported == capa.mChannelWidth160MhzSupported
+                && mChannelWidth80p80MhzSupported == capa.mChannelWidth80p80MhzSupported
+                && mMaxNumberTxSpatialStreams == capa.mMaxNumberTxSpatialStreams
+                && mMaxNumberRxSpatialStreams == capa.mMaxNumberRxSpatialStreams;
+    }
+
+    /** override hash code */
+    @Override
+    public int hashCode() {
+        return Objects.hash(m80211nSupported, m80211acSupported, m80211axSupported,
+                mChannelWidth160MhzSupported, mChannelWidth80p80MhzSupported,
+                mMaxNumberTxSpatialStreams, mMaxNumberRxSpatialStreams);
+    }
+
+    /** implement Parcelable interface */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * implement Parcelable interface
+     * |flags| is ignored.
+     */
+    @Override
+    public void writeToParcel(@NonNull Parcel out, int flags) {
+        out.writeBoolean(m80211nSupported);
+        out.writeBoolean(m80211acSupported);
+        out.writeBoolean(m80211axSupported);
+        out.writeBoolean(mChannelWidth160MhzSupported);
+        out.writeBoolean(mChannelWidth80p80MhzSupported);
+        out.writeInt(mMaxNumberTxSpatialStreams);
+        out.writeInt(mMaxNumberRxSpatialStreams);
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("m80211nSupported:").append(m80211nSupported ? "Yes" : "No");
+        sb.append("m80211acSupported:").append(m80211acSupported ? "Yes" : "No");
+        sb.append("m80211axSupported:").append(m80211axSupported ? "Yes" : "No");
+        sb.append("mChannelWidth160MhzSupported: ")
+                .append(mChannelWidth160MhzSupported ? "Yes" : "No");
+        sb.append("mChannelWidth80p80MhzSupported: ")
+                .append(mChannelWidth80p80MhzSupported ? "Yes" : "No");
+        sb.append("mMaxNumberTxSpatialStreams: ").append(mMaxNumberTxSpatialStreams);
+        sb.append("mMaxNumberRxSpatialStreams: ").append(mMaxNumberRxSpatialStreams);
+
+        return sb.toString();
+    }
+
+    /** implement Parcelable interface */
+    public static final @NonNull Parcelable.Creator<DeviceWiphyCapabilities> CREATOR =
+            new Parcelable.Creator<DeviceWiphyCapabilities>() {
+        /**
+         * Caller is responsible for providing a valid parcel.
+         */
+        @Override
+        public DeviceWiphyCapabilities createFromParcel(Parcel in) {
+            DeviceWiphyCapabilities capabilities = new DeviceWiphyCapabilities();
+            capabilities.m80211nSupported = in.readBoolean();
+            capabilities.m80211acSupported = in.readBoolean();
+            capabilities.m80211axSupported = in.readBoolean();
+            capabilities.mChannelWidth160MhzSupported = in.readBoolean();
+            capabilities.mChannelWidth80p80MhzSupported = in.readBoolean();
+            capabilities.mMaxNumberTxSpatialStreams = in.readInt();
+            capabilities.mMaxNumberRxSpatialStreams = in.readInt();
+            return capabilities;
+        }
+
+        @Override
+        public DeviceWiphyCapabilities[] newArray(int size) {
+            return new DeviceWiphyCapabilities[size];
+        }
+    };
+}
diff --git a/wifi/java/android/net/wifi/nl80211/HiddenNetwork.java b/wifi/java/android/net/wifi/nl80211/HiddenNetwork.java
new file mode 100644
index 0000000..b1475b2
--- /dev/null
+++ b/wifi/java/android/net/wifi/nl80211/HiddenNetwork.java
@@ -0,0 +1,87 @@
+/*
+ * 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 android.net.wifi.nl80211;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Arrays;
+
+/**
+ * HiddenNetwork for wificond
+ *
+ * @hide
+ */
+public class HiddenNetwork implements Parcelable {
+    private static final String TAG = "HiddenNetwork";
+
+    public byte[] ssid;
+
+    /** public constructor */
+    public HiddenNetwork() { }
+
+    /** override comparator */
+    @Override
+    public boolean equals(Object rhs) {
+        if (this == rhs) return true;
+        if (!(rhs instanceof HiddenNetwork)) {
+            return false;
+        }
+        HiddenNetwork network = (HiddenNetwork) rhs;
+        return Arrays.equals(ssid, network.ssid);
+    }
+
+    /** override hash code */
+    @Override
+    public int hashCode() {
+        return Arrays.hashCode(ssid);
+    }
+
+    /** implement Parcelable interface */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * implement Parcelable interface
+     * |flags| is ignored.
+     */
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeByteArray(ssid);
+    }
+
+    /** implement Parcelable interface */
+    public static final Parcelable.Creator<HiddenNetwork> CREATOR =
+            new Parcelable.Creator<HiddenNetwork>() {
+        /**
+         * Caller is responsible for providing a valid parcel.
+         */
+        @Override
+        public HiddenNetwork createFromParcel(Parcel in) {
+            HiddenNetwork result = new HiddenNetwork();
+            result.ssid = in.createByteArray();
+            return result;
+        }
+
+        @Override
+        public HiddenNetwork[] newArray(int size) {
+            return new HiddenNetwork[size];
+        }
+    };
+}
diff --git a/wifi/java/android/net/wifi/nl80211/NativeScanResult.java b/wifi/java/android/net/wifi/nl80211/NativeScanResult.java
new file mode 100644
index 0000000..a8e9999
--- /dev/null
+++ b/wifi/java/android/net/wifi/nl80211/NativeScanResult.java
@@ -0,0 +1,310 @@
+/*
+ * 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 android.net.wifi.nl80211;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SystemApi;
+import android.net.MacAddress;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Raw scan result data from the wificond daemon.
+ *
+ * @hide
+ */
+@SystemApi
+public final class NativeScanResult implements Parcelable {
+    private static final String TAG = "NativeScanResult";
+
+    /** @hide */
+    @VisibleForTesting
+    public byte[] ssid;
+    /** @hide */
+    @VisibleForTesting
+    public byte[] bssid;
+    /** @hide */
+    @VisibleForTesting
+    public byte[] infoElement;
+    /** @hide */
+    @VisibleForTesting
+    public int frequency;
+    /** @hide */
+    @VisibleForTesting
+    public int signalMbm;
+    /** @hide */
+    @VisibleForTesting
+    public long tsf;
+    /** @hide */
+    @VisibleForTesting
+    @BssCapabilityBits public int capability;
+    /** @hide */
+    @VisibleForTesting
+    public boolean associated;
+    /** @hide */
+    @VisibleForTesting
+    public List<RadioChainInfo> radioChainInfos;
+
+    /**
+     * Returns the SSID raw byte array of the AP represented by this scan result.
+     *
+     * @return A byte array.
+     */
+    @NonNull public byte[] getSsid() {
+        return ssid;
+    }
+
+    /**
+     * Returns the MAC address (BSSID) of the AP represented by this scan result.
+     *
+     * @return a MacAddress or null on error.
+     */
+    @Nullable public MacAddress getBssid() {
+        try {
+            return MacAddress.fromBytes(bssid);
+        } catch (IllegalArgumentException e) {
+            Log.e(TAG, "Illegal argument " + Arrays.toString(bssid), e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the raw bytes of the information element advertised by the AP represented by this
+     * scan result.
+     *
+     * @return A byte array, possibly null or containing an invalid TLV configuration.
+     */
+    @NonNull public byte[] getInformationElements() {
+        return infoElement;
+    }
+
+    /**
+     * Returns the frequency (in MHz) on which the AP represented by this scan result was observed.
+     *
+     * @return The frequency in MHz.
+     */
+    public int getFrequencyMhz() {
+        return frequency;
+    }
+
+    /**
+     * Return the signal strength of probe response/beacon in (100 * dBm).
+     *
+     * @return Signal strenght in (100 * dBm).
+     */
+    public int getSignalMbm() {
+        return signalMbm;
+    }
+
+    /**
+     * Return the TSF (Timing Synchronization Function) of the received probe response/beacon.
+     * @return
+     */
+    public long getTsf() {
+        return tsf;
+    }
+
+    /**
+     * Return a boolean indicating whether or not we're associated to the AP represented by this
+     * scan result.
+     *
+     * @return A boolean indicating association.
+     */
+    public boolean isAssociated() {
+        return associated;
+    }
+
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(flag = true, prefix = {"BSS_CAPABILITY_"},
+            value = {BSS_CAPABILITY_ESS,
+                    BSS_CAPABILITY_IBSS,
+                    BSS_CAPABILITY_CF_POLLABLE,
+                    BSS_CAPABILITY_CF_POLL_REQUEST,
+                    BSS_CAPABILITY_PRIVACY,
+                    BSS_CAPABILITY_SHORT_PREAMBLE,
+                    BSS_CAPABILITY_PBCC,
+                    BSS_CAPABILITY_CHANNEL_AGILITY,
+                    BSS_CAPABILITY_SPECTRUM_MANAGEMENT,
+                    BSS_CAPABILITY_QOS,
+                    BSS_CAPABILITY_SHORT_SLOT_TIME,
+                    BSS_CAPABILITY_APSD,
+                    BSS_CAPABILITY_RADIO_MANAGEMENT,
+                    BSS_CAPABILITY_DSSS_OFDM,
+                    BSS_CAPABILITY_DELAYED_BLOCK_ACK,
+                    BSS_CAPABILITY_IMMEDIATE_BLOCK_ACK
+            })
+    public @interface BssCapabilityBits { }
+
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): ESS.
+     */
+    public static final int BSS_CAPABILITY_ESS = 0x1 << 0;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): IBSS.
+     */
+    public static final int BSS_CAPABILITY_IBSS = 0x1 << 1;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): CF Pollable.
+     */
+    public static final int BSS_CAPABILITY_CF_POLLABLE = 0x1 << 2;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): CF-Poll Request.
+     */
+    public static final int BSS_CAPABILITY_CF_POLL_REQUEST = 0x1 << 3;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): Privacy.
+     */
+    public static final int BSS_CAPABILITY_PRIVACY = 0x1 << 4;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): Short Preamble.
+     */
+    public static final int BSS_CAPABILITY_SHORT_PREAMBLE = 0x1 << 5;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): PBCC.
+     */
+    public static final int BSS_CAPABILITY_PBCC = 0x1 << 6;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): Channel Agility.
+     */
+    public static final int BSS_CAPABILITY_CHANNEL_AGILITY = 0x1 << 7;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): Spectrum Management.
+     */
+    public static final int BSS_CAPABILITY_SPECTRUM_MANAGEMENT = 0x1 << 8;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): QoS.
+     */
+    public static final int BSS_CAPABILITY_QOS = 0x1 << 9;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): Short Slot Time.
+     */
+    public static final int BSS_CAPABILITY_SHORT_SLOT_TIME = 0x1 << 10;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): APSD.
+     */
+    public static final int BSS_CAPABILITY_APSD = 0x1 << 11;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): Radio Management.
+     */
+    public static final int BSS_CAPABILITY_RADIO_MANAGEMENT = 0x1 << 12;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): DSSS-OFDM.
+     */
+    public static final int BSS_CAPABILITY_DSSS_OFDM = 0x1 << 13;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): Delayed Block Ack.
+     */
+    public static final int BSS_CAPABILITY_DELAYED_BLOCK_ACK = 0x1 << 14;
+    /**
+     * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): Immediate Block Ack.
+     */
+    public static final int BSS_CAPABILITY_IMMEDIATE_BLOCK_ACK = 0x1 << 15;
+
+    /**
+     *  Returns the capabilities of the AP repseresented by this scan result as advertised in the
+     *  received probe response or beacon.
+     *
+     *  This is a bit mask describing the capabilities of a BSS. See IEEE Std 802.11: 9.4.1.4: one
+     *  of the {@code BSS_CAPABILITY_*} flags.
+     *
+     * @return a bit mask of capabilities.
+     */
+    @BssCapabilityBits public int getCapabilities() {
+        return capability;
+    }
+
+    /**
+     * Returns details of the signal received on each radio chain for the AP represented by this
+     * scan result in a list of {@link RadioChainInfo} elements.
+     *
+     * @return A list of {@link RadioChainInfo} - possibly empty in case of error.
+     */
+    @NonNull public List<RadioChainInfo> getRadioChainInfos() {
+        return radioChainInfos;
+    }
+
+    /**
+     * Construct an empty native scan result.
+     */
+    public NativeScanResult() { }
+
+    /** implement Parcelable interface */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /** implement Parcelable interface */
+    @Override
+    public void writeToParcel(@NonNull Parcel out, int flags) {
+        out.writeByteArray(ssid);
+        out.writeByteArray(bssid);
+        out.writeByteArray(infoElement);
+        out.writeInt(frequency);
+        out.writeInt(signalMbm);
+        out.writeLong(tsf);
+        out.writeInt(capability);
+        out.writeInt(associated ? 1 : 0);
+        out.writeTypedList(radioChainInfos);
+    }
+
+    /** implement Parcelable interface */
+    @NonNull public static final Parcelable.Creator<NativeScanResult> CREATOR =
+            new Parcelable.Creator<NativeScanResult>() {
+        @Override
+        public NativeScanResult createFromParcel(Parcel in) {
+            NativeScanResult result = new NativeScanResult();
+            result.ssid = in.createByteArray();
+            if (result.ssid == null) {
+                result.ssid = new byte[0];
+            }
+            result.bssid = in.createByteArray();
+            if (result.bssid == null) {
+                result.bssid = new byte[0];
+            }
+            result.infoElement = in.createByteArray();
+            if (result.infoElement == null) {
+                result.infoElement = new byte[0];
+            }
+            result.frequency = in.readInt();
+            result.signalMbm = in.readInt();
+            result.tsf = in.readLong();
+            result.capability = in.readInt();
+            result.associated = (in.readInt() != 0);
+            result.radioChainInfos = new ArrayList<>();
+            in.readTypedList(result.radioChainInfos, RadioChainInfo.CREATOR);
+            return result;
+        }
+
+        @Override
+        public NativeScanResult[] newArray(int size) {
+            return new NativeScanResult[size];
+        }
+    };
+}
diff --git a/wifi/java/android/net/wifi/nl80211/NativeWifiClient.java b/wifi/java/android/net/wifi/nl80211/NativeWifiClient.java
new file mode 100644
index 0000000..984d7d0
--- /dev/null
+++ b/wifi/java/android/net/wifi/nl80211/NativeWifiClient.java
@@ -0,0 +1,103 @@
+/*
+ * 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.net.wifi.nl80211;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SystemApi;
+import android.net.MacAddress;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+
+/**
+ * Structure providing information about clients (STAs) associated with a SoftAp.
+ *
+ * @hide
+ */
+@SystemApi
+public final class NativeWifiClient implements Parcelable {
+    private final MacAddress mMacAddress;
+
+    /**
+     * The MAC address of the client (STA) represented by this object. The MAC address may be null
+     * in case of an error.
+     */
+    @Nullable public MacAddress getMacAddress() {
+        return mMacAddress;
+    }
+
+    /**
+     * Construct a native Wi-Fi client.
+     */
+    public NativeWifiClient(@Nullable MacAddress macAddress) {
+        this.mMacAddress = macAddress;
+    }
+
+    /** override comparator */
+    @Override
+    public boolean equals(Object rhs) {
+        if (this == rhs) return true;
+        if (!(rhs instanceof NativeWifiClient)) {
+            return false;
+        }
+        NativeWifiClient other = (NativeWifiClient) rhs;
+        return Objects.equals(mMacAddress, other.mMacAddress);
+    }
+
+    /** override hash code */
+    @Override
+    public int hashCode() {
+        return mMacAddress.hashCode();
+    }
+
+    /** implement Parcelable interface */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * implement Parcelable interface
+     * |flag| is ignored.
+     */
+    @Override
+    public void writeToParcel(@NonNull Parcel out, int flags) {
+        out.writeByteArray(mMacAddress.toByteArray());
+    }
+
+    /** implement Parcelable interface */
+    @NonNull public static final Parcelable.Creator<NativeWifiClient> CREATOR =
+            new Parcelable.Creator<NativeWifiClient>() {
+                @Override
+                public NativeWifiClient createFromParcel(Parcel in) {
+                    MacAddress macAddress;
+                    try {
+                        macAddress = MacAddress.fromBytes(in.createByteArray());
+                    } catch (IllegalArgumentException e) {
+                        macAddress = null;
+                    }
+                    return new NativeWifiClient(macAddress);
+                }
+
+                @Override
+                public NativeWifiClient[] newArray(int size) {
+                    return new NativeWifiClient[size];
+                }
+            };
+}
diff --git a/wifi/java/android/net/wifi/nl80211/PnoNetwork.java b/wifi/java/android/net/wifi/nl80211/PnoNetwork.java
new file mode 100644
index 0000000..e8eff09
--- /dev/null
+++ b/wifi/java/android/net/wifi/nl80211/PnoNetwork.java
@@ -0,0 +1,171 @@
+/*
+ * 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 android.net.wifi.nl80211;
+
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * Configuration for a PNO (preferred network offload) network used in {@link PnoSettings}. A PNO
+ * network allows configuration of a specific network to search for.
+ *
+ * @hide
+ */
+@SystemApi
+public final class PnoNetwork implements Parcelable {
+    private boolean mIsHidden;
+    private byte[] mSsid;
+    private int[] mFrequencies;
+
+    /**
+     * Indicates whether the PNO network configuration is for a hidden SSID - i.e. a network which
+     * does not broadcast its SSID and must be queried explicitly.
+     *
+     * @return True if the configuration is for a hidden network, false otherwise.
+     */
+    public boolean isHidden() {
+        return mIsHidden;
+    }
+
+    /**
+     * Configure whether the PNO network configuration is for a hidden SSID - i.e. a network which
+     * does not broadcast its SSID and must be queried explicitly.
+     *
+     * @param isHidden True if the configuration is for a hidden network, false otherwise.
+     */
+    public void setHidden(boolean isHidden) {
+        mIsHidden = isHidden;
+    }
+
+    /**
+     * Get the raw bytes for the SSID of the PNO network being scanned for.
+     *
+     * @return A byte array.
+     */
+    @NonNull public byte[] getSsid() {
+        return mSsid;
+    }
+
+    /**
+     * Set the raw bytes for the SSID of the PNO network being scanned for.
+     *
+     * @param ssid A byte array.
+     */
+    public void setSsid(@NonNull byte[] ssid) {
+        if (ssid == null) {
+            throw new IllegalArgumentException("null argument");
+        }
+        this.mSsid = ssid;
+    }
+
+    /**
+     * Get the frequencies (in MHz) on which to PNO scan for the current network is being searched
+     * for. A null return (i.e. no frequencies configured) indicates that the network is search for
+     * on all supported frequencies.
+     *
+     * @return A array of frequencies (in MHz), a null indicates no configured frequencies.
+     */
+    @NonNull public int[] getFrequenciesMhz() {
+        return mFrequencies;
+    }
+
+    /**
+     * Set the frequencies (in MHz) on which to PNO scan for the current network is being searched
+     * for. A null configuration (i.e. no frequencies configured) indicates that the network is
+     * search for on all supported frequencies.
+     *
+     * @param frequenciesMhz an array of frequencies (in MHz), null indicating no configured
+     *                       frequencies.
+     */
+    public void setFrequenciesMhz(@NonNull int[] frequenciesMhz) {
+        if (frequenciesMhz == null) {
+            throw new IllegalArgumentException("null argument");
+        }
+        this.mFrequencies = frequenciesMhz;
+    }
+
+    /** Construct an uninitialized PnoNetwork object */
+    public PnoNetwork() { }
+
+    /** override comparator */
+    @Override
+    public boolean equals(Object rhs) {
+        if (this == rhs) return true;
+        if (!(rhs instanceof PnoNetwork)) {
+            return false;
+        }
+        PnoNetwork network = (PnoNetwork) rhs;
+        return Arrays.equals(mSsid, network.mSsid)
+                && Arrays.equals(mFrequencies, network.mFrequencies)
+                && mIsHidden == network.mIsHidden;
+    }
+
+    /** override hash code */
+    @Override
+    public int hashCode() {
+        return Objects.hash(
+                mIsHidden,
+                Arrays.hashCode(mSsid),
+                Arrays.hashCode(mFrequencies));
+    }
+
+    /** implement Parcelable interface */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * implement Parcelable interface
+     * |flag| is ignored.
+     */
+    @Override
+    public void writeToParcel(@NonNull Parcel out, int flags) {
+        out.writeInt(mIsHidden ? 1 : 0);
+        out.writeByteArray(mSsid);
+        out.writeIntArray(mFrequencies);
+    }
+
+    /** implement Parcelable interface */
+    @NonNull public static final Parcelable.Creator<PnoNetwork> CREATOR =
+            new Parcelable.Creator<PnoNetwork>() {
+        @Override
+        public PnoNetwork createFromParcel(Parcel in) {
+            PnoNetwork result = new PnoNetwork();
+            result.mIsHidden = in.readInt() != 0 ? true : false;
+            result.mSsid = in.createByteArray();
+            if (result.mSsid == null) {
+                result.mSsid = new byte[0];
+            }
+            result.mFrequencies = in.createIntArray();
+            if (result.mFrequencies == null) {
+                result.mFrequencies = new int[0];
+            }
+            return result;
+        }
+
+        @Override
+        public PnoNetwork[] newArray(int size) {
+            return new PnoNetwork[size];
+        }
+    };
+}
diff --git a/wifi/java/android/net/wifi/nl80211/PnoSettings.java b/wifi/java/android/net/wifi/nl80211/PnoSettings.java
new file mode 100644
index 0000000..00ebe62
--- /dev/null
+++ b/wifi/java/android/net/wifi/nl80211/PnoSettings.java
@@ -0,0 +1,209 @@
+/*
+ * 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 android.net.wifi.nl80211;
+
+import android.annotation.DurationMillisLong;
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Configuration for a PNO (preferred network offload). A mechanism by which scans are offloaded
+ * from the host device to the Wi-Fi chip.
+ *
+ * @hide
+ */
+@SystemApi
+public final class PnoSettings implements Parcelable {
+    private long mIntervalMs;
+    private int mMin2gRssi;
+    private int mMin5gRssi;
+    private int mMin6gRssi;
+    private List<PnoNetwork> mPnoNetworks;
+
+    /** Construct an uninitialized PnoSettings object */
+    public PnoSettings() { }
+
+    /**
+     * Get the requested PNO scan interval in milliseconds.
+     *
+     * @return An interval in milliseconds.
+     */
+    public @DurationMillisLong long getIntervalMillis() {
+        return mIntervalMs;
+    }
+
+    /**
+     * Set the requested PNO scan interval in milliseconds.
+     *
+     * @param intervalMillis An interval in milliseconds.
+     */
+    public void setIntervalMillis(@DurationMillisLong long intervalMillis) {
+        this.mIntervalMs = intervalMillis;
+    }
+
+    /**
+     * Get the requested minimum RSSI threshold (in dBm) for APs to report in scan results in the
+     * 2.4GHz band.
+     *
+     * @return An RSSI value in dBm.
+     */
+    public int getMin2gRssiDbm() {
+        return mMin2gRssi;
+    }
+
+    /**
+     * Set the requested minimum RSSI threshold (in dBm) for APs to report in scan scan results in
+     * the 2.4GHz band.
+     *
+     * @param min2gRssiDbm An RSSI value in dBm.
+     */
+    public void setMin2gRssiDbm(int min2gRssiDbm) {
+        this.mMin2gRssi = min2gRssiDbm;
+    }
+
+    /**
+     * Get the requested minimum RSSI threshold (in dBm) for APs to report in scan results in the
+     * 5GHz band.
+     *
+     * @return An RSSI value in dBm.
+     */
+    public int getMin5gRssiDbm() {
+        return mMin5gRssi;
+    }
+
+    /**
+     * Set the requested minimum RSSI threshold (in dBm) for APs to report in scan scan results in
+     * the 5GHz band.
+     *
+     * @param min5gRssiDbm An RSSI value in dBm.
+     */
+    public void setMin5gRssiDbm(int min5gRssiDbm) {
+        this.mMin5gRssi = min5gRssiDbm;
+    }
+
+    /**
+     * Get the requested minimum RSSI threshold (in dBm) for APs to report in scan results in the
+     * 6GHz band.
+     *
+     * @return An RSSI value in dBm.
+     */
+    public int getMin6gRssiDbm() {
+        return mMin6gRssi;
+    }
+
+    /**
+     * Set the requested minimum RSSI threshold (in dBm) for APs to report in scan scan results in
+     * the 6GHz band.
+     *
+     * @param min6gRssiDbm An RSSI value in dBm.
+     */
+    public void setMin6gRssiDbm(int min6gRssiDbm) {
+        this.mMin6gRssi = min6gRssiDbm;
+    }
+
+    /**
+     * Return the configured list of specific networks to search for in a PNO scan.
+     *
+     * @return A list of {@link PnoNetwork} objects, possibly empty if non configured.
+     */
+    @NonNull public List<PnoNetwork> getPnoNetworks() {
+        return mPnoNetworks;
+    }
+
+    /**
+     * Set the list of specified networks to scan for in a PNO scan. The networks (APs) are
+     * specified using {@link PnoNetwork}s. An empty list indicates that all networks are scanned
+     * for.
+     *
+     * @param pnoNetworks A (possibly empty) list of {@link PnoNetwork} objects.
+     */
+    public void setPnoNetworks(@NonNull List<PnoNetwork> pnoNetworks) {
+        this.mPnoNetworks = pnoNetworks;
+    }
+
+    /** override comparator */
+    @Override
+    public boolean equals(Object rhs) {
+        if (this == rhs) return true;
+        if (!(rhs instanceof PnoSettings)) {
+            return false;
+        }
+        PnoSettings settings = (PnoSettings) rhs;
+        if (settings == null) {
+            return false;
+        }
+        return mIntervalMs == settings.mIntervalMs
+                && mMin2gRssi == settings.mMin2gRssi
+                && mMin5gRssi == settings.mMin5gRssi
+                && mMin6gRssi == settings.mMin6gRssi
+                && mPnoNetworks.equals(settings.mPnoNetworks);
+    }
+
+    /** override hash code */
+    @Override
+    public int hashCode() {
+        return Objects.hash(mIntervalMs, mMin2gRssi, mMin5gRssi, mMin6gRssi, mPnoNetworks);
+    }
+
+    /** implement Parcelable interface */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * implement Parcelable interface
+     * |flag| is ignored.
+     **/
+    @Override
+    public void writeToParcel(@NonNull Parcel out, int flags) {
+        out.writeLong(mIntervalMs);
+        out.writeInt(mMin2gRssi);
+        out.writeInt(mMin5gRssi);
+        out.writeInt(mMin6gRssi);
+        out.writeTypedList(mPnoNetworks);
+    }
+
+    /** implement Parcelable interface */
+    @NonNull public static final Parcelable.Creator<PnoSettings> CREATOR =
+            new Parcelable.Creator<PnoSettings>() {
+        @Override
+        public PnoSettings createFromParcel(Parcel in) {
+            PnoSettings result = new PnoSettings();
+            result.mIntervalMs = in.readLong();
+            result.mMin2gRssi = in.readInt();
+            result.mMin5gRssi = in.readInt();
+            result.mMin6gRssi = in.readInt();
+
+            result.mPnoNetworks = new ArrayList<>();
+            in.readTypedList(result.mPnoNetworks, PnoNetwork.CREATOR);
+
+            return result;
+        }
+
+        @Override
+        public PnoSettings[] newArray(int size) {
+            return new PnoSettings[size];
+        }
+    };
+}
diff --git a/wifi/java/android/net/wifi/nl80211/RadioChainInfo.java b/wifi/java/android/net/wifi/nl80211/RadioChainInfo.java
new file mode 100644
index 0000000..2c12163
--- /dev/null
+++ b/wifi/java/android/net/wifi/nl80211/RadioChainInfo.java
@@ -0,0 +1,125 @@
+/*
+ * 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 android.net.wifi.nl80211;
+
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.util.Objects;
+
+/**
+ * A class representing the radio chains of the Wi-Fi modems. Use to provide raw information about
+ * signals received on different radio chains.
+ *
+ * @hide
+ */
+@SystemApi
+public final class RadioChainInfo implements Parcelable {
+    private static final String TAG = "RadioChainInfo";
+
+    /** @hide */
+    @VisibleForTesting
+    public int chainId;
+    /** @hide */
+    @VisibleForTesting
+    public int level;
+
+    /**
+     * Return an identifier for this radio chain. This is an arbitrary ID which is consistent for
+     * the same device.
+     *
+     * @return The radio chain ID.
+     */
+    public int getChainId() {
+        return chainId;
+    }
+
+    /**
+     * Returns the detected signal level on this radio chain in dBm (aka RSSI).
+     *
+     * @return A signal level in dBm.
+     */
+    public int getLevelDbm() {
+        return level;
+    }
+
+    /**
+     * Construct a RadioChainInfo.
+     */
+    public RadioChainInfo(int chainId, int level) {
+        this.chainId = chainId;
+        this.level = level;
+    }
+
+    /** override comparator */
+    @Override
+    public boolean equals(Object rhs) {
+        if (this == rhs) return true;
+        if (!(rhs instanceof RadioChainInfo)) {
+            return false;
+        }
+        RadioChainInfo chainInfo = (RadioChainInfo) rhs;
+        if (chainInfo == null) {
+            return false;
+        }
+        return chainId == chainInfo.chainId && level == chainInfo.level;
+    }
+
+    /** override hash code */
+    @Override
+    public int hashCode() {
+        return Objects.hash(chainId, level);
+    }
+
+
+    /** implement Parcelable interface */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * implement Parcelable interface
+     * |flags| is ignored.
+     */
+    @Override
+    public void writeToParcel(@NonNull Parcel out, int flags) {
+        out.writeInt(chainId);
+        out.writeInt(level);
+    }
+
+    /** implement Parcelable interface */
+    @NonNull public static final Parcelable.Creator<RadioChainInfo> CREATOR =
+            new Parcelable.Creator<RadioChainInfo>() {
+        /**
+         * Caller is responsible for providing a valid parcel.
+         */
+        @Override
+        public RadioChainInfo createFromParcel(Parcel in) {
+            return new RadioChainInfo(in.readInt(), in.readInt());
+        }
+
+        @Override
+        public RadioChainInfo[] newArray(int size) {
+            return new RadioChainInfo[size];
+        }
+    };
+}
diff --git a/wifi/java/android/net/wifi/nl80211/SingleScanSettings.java b/wifi/java/android/net/wifi/nl80211/SingleScanSettings.java
new file mode 100644
index 0000000..24b1854
--- /dev/null
+++ b/wifi/java/android/net/wifi/nl80211/SingleScanSettings.java
@@ -0,0 +1,118 @@
+/*
+ * 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 android.net.wifi.nl80211;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.Objects;
+
+/**
+ * SingleScanSettings for wificond
+ *
+ * @hide
+ */
+public class SingleScanSettings implements Parcelable {
+    private static final String TAG = "SingleScanSettings";
+
+    public int scanType;
+    public ArrayList<ChannelSettings> channelSettings;
+    public ArrayList<HiddenNetwork> hiddenNetworks;
+
+    /** public constructor */
+    public SingleScanSettings() { }
+
+    /** override comparator */
+    @Override
+    public boolean equals(Object rhs) {
+        if (this == rhs) return true;
+        if (!(rhs instanceof SingleScanSettings)) {
+            return false;
+        }
+        SingleScanSettings settings = (SingleScanSettings) rhs;
+        if (settings == null) {
+            return false;
+        }
+        return scanType == settings.scanType
+                && channelSettings.equals(settings.channelSettings)
+                && hiddenNetworks.equals(settings.hiddenNetworks);
+    }
+
+    /** override hash code */
+    @Override
+    public int hashCode() {
+        return Objects.hash(scanType, channelSettings, hiddenNetworks);
+    }
+
+
+    /** implement Parcelable interface */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    private static boolean isValidScanType(int scanType) {
+        return scanType == IWifiScannerImpl.SCAN_TYPE_LOW_SPAN
+                || scanType == IWifiScannerImpl.SCAN_TYPE_LOW_POWER
+                || scanType == IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
+    }
+
+    /**
+     * implement Parcelable interface
+     * |flags| is ignored.
+     */
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        if (!isValidScanType(scanType)) {
+            Log.wtf(TAG, "Invalid scan type " + scanType);
+        }
+        out.writeInt(scanType);
+        out.writeTypedList(channelSettings);
+        out.writeTypedList(hiddenNetworks);
+    }
+
+    /** implement Parcelable interface */
+    public static final Parcelable.Creator<SingleScanSettings> CREATOR =
+            new Parcelable.Creator<SingleScanSettings>() {
+        /**
+         * Caller is responsible for providing a valid parcel.
+         */
+        @Override
+        public SingleScanSettings createFromParcel(Parcel in) {
+            SingleScanSettings result = new SingleScanSettings();
+            result.scanType = in.readInt();
+            if (!isValidScanType(result.scanType)) {
+                Log.wtf(TAG, "Invalid scan type " + result.scanType);
+            }
+            result.channelSettings = new ArrayList<ChannelSettings>();
+            in.readTypedList(result.channelSettings, ChannelSettings.CREATOR);
+            result.hiddenNetworks = new ArrayList<HiddenNetwork>();
+            in.readTypedList(result.hiddenNetworks, HiddenNetwork.CREATOR);
+            if (in.dataAvail() != 0) {
+                Log.e(TAG, "Found trailing data after parcel parsing.");
+            }
+            return result;
+        }
+
+        @Override
+        public SingleScanSettings[] newArray(int size) {
+            return new SingleScanSettings[size];
+        }
+    };
+}
diff --git a/wifi/java/android/net/wifi/nl80211/WifiNl80211Manager.java b/wifi/java/android/net/wifi/nl80211/WifiNl80211Manager.java
new file mode 100644
index 0000000..3215246
--- /dev/null
+++ b/wifi/java/android/net/wifi/nl80211/WifiNl80211Manager.java
@@ -0,0 +1,1287 @@
+/*
+ * 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 android.net.wifi.nl80211;
+
+import android.annotation.CallbackExecutor;
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SystemApi;
+import android.annotation.SystemService;
+import android.app.AlarmManager;
+import android.content.Context;
+import android.net.wifi.SoftApInfo;
+import android.net.wifi.WifiAnnotations;
+import android.net.wifi.WifiScanner;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SystemClock;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * This class encapsulates the interface the wificond daemon presents to the Wi-Fi framework - used
+ * to encapsulate the Wi-Fi 80211nl management interface. The
+ * interface is only for use by the Wi-Fi framework and access is protected by SELinux permissions.
+ *
+ * @hide
+ */
+@SystemApi
+@SystemService(Context.WIFI_NL80211_SERVICE)
+public class WifiNl80211Manager {
+    private static final String TAG = "WifiNl80211Manager";
+    private boolean mVerboseLoggingEnabled = false;
+
+    /**
+     * The {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)}
+     * timeout, in milliseconds, after which
+     * {@link SendMgmtFrameCallback#onFailure(int)} will be called with reason
+     * {@link #SEND_MGMT_FRAME_ERROR_TIMEOUT}.
+     */
+    private static final int SEND_MGMT_FRAME_TIMEOUT_MS = 1000;
+
+    private static final String TIMEOUT_ALARM_TAG = TAG + " Send Management Frame Timeout";
+
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = {"SCAN_TYPE_"},
+            value = {SCAN_TYPE_SINGLE_SCAN,
+                    SCAN_TYPE_PNO_SCAN})
+    public @interface ScanResultType {}
+
+    /**
+     * Specifies a scan type: single scan initiated by the framework. Can be used in
+     * {@link #getScanResults(String, int)} to specify the type of scan result to fetch.
+     */
+    public static final int SCAN_TYPE_SINGLE_SCAN = 0;
+
+    /**
+     * Specifies a scan type: PNO scan. Can be used in {@link #getScanResults(String, int)} to
+     * specify the type of scan result to fetch.
+     */
+    public static final int SCAN_TYPE_PNO_SCAN = 1;
+
+    private AlarmManager mAlarmManager;
+    private Handler mEventHandler;
+
+    // Cached wificond binder handlers.
+    private IWificond mWificond;
+    private HashMap<String, IClientInterface> mClientInterfaces = new HashMap<>();
+    private HashMap<String, IApInterface> mApInterfaces = new HashMap<>();
+    private HashMap<String, IWifiScannerImpl> mWificondScanners = new HashMap<>();
+    private HashMap<String, IScanEvent> mScanEventHandlers = new HashMap<>();
+    private HashMap<String, IPnoScanEvent> mPnoScanEventHandlers = new HashMap<>();
+    private HashMap<String, IApInterfaceEventCallback> mApInterfaceListeners = new HashMap<>();
+    private Runnable mDeathEventHandler;
+    /**
+     * Ensures that no more than one sendMgmtFrame operation runs concurrently.
+     */
+    private AtomicBoolean mSendMgmtFrameInProgress = new AtomicBoolean(false);
+
+    /**
+     * Interface used when waiting for scans to be completed (with results).
+     */
+    public interface ScanEventCallback {
+        /**
+         * Called when scan results are available. Scans results should then be obtained from
+         * {@link #getScanResults(String, int)}.
+         */
+        void onScanResultReady();
+
+        /**
+         * Called when a scan has failed.
+         */
+        void onScanFailed();
+    }
+
+    /**
+     * Interface for a callback to provide information about PNO scan request requested with
+     * {@link #startPnoScan(String, PnoSettings, Executor, PnoScanRequestCallback)}. Note that the
+     * callback are for the status of the request - not the scan itself. The results of the scan
+     * are returned with {@link ScanEventCallback}.
+     */
+    public interface PnoScanRequestCallback {
+        /**
+         * Called when a PNO scan request has been successfully submitted.
+         */
+        void onPnoRequestSucceeded();
+
+        /**
+         * Called when a PNO scan request fails.
+         */
+        void onPnoRequestFailed();
+    }
+
+    private class ScanEventHandler extends IScanEvent.Stub {
+        private Executor mExecutor;
+        private ScanEventCallback mCallback;
+
+        ScanEventHandler(@NonNull Executor executor, @NonNull ScanEventCallback callback) {
+            mExecutor = executor;
+            mCallback = callback;
+        }
+
+        @Override
+        public void OnScanResultReady() {
+            Log.d(TAG, "Scan result ready event");
+            Binder.clearCallingIdentity();
+            mExecutor.execute(() -> mCallback.onScanResultReady());
+        }
+
+        @Override
+        public void OnScanFailed() {
+            Log.d(TAG, "Scan failed event");
+            Binder.clearCallingIdentity();
+            mExecutor.execute(() -> mCallback.onScanFailed());
+        }
+    }
+
+    /**
+     * Result of a signal poll requested using {@link #signalPoll(String)}.
+     */
+    public static class SignalPollResult {
+        /** @hide */
+        public SignalPollResult(int currentRssiDbm, int txBitrateMbps, int rxBitrateMbps,
+                int associationFrequencyMHz) {
+            this.currentRssiDbm = currentRssiDbm;
+            this.txBitrateMbps = txBitrateMbps;
+            this.rxBitrateMbps = rxBitrateMbps;
+            this.associationFrequencyMHz = associationFrequencyMHz;
+        }
+
+        /**
+         * RSSI value in dBM.
+         */
+        public final int currentRssiDbm;
+
+        /**
+         * Transmission bit rate in Mbps.
+         */
+        public final int txBitrateMbps;
+
+        /**
+         * Last received packet bit rate in Mbps.
+         */
+        public final int rxBitrateMbps;
+
+        /**
+         * Association frequency in MHz.
+         */
+        public final int associationFrequencyMHz;
+    }
+
+    /**
+     * Transmission counters obtained using {@link #getTxPacketCounters(String)}.
+     */
+    public static class TxPacketCounters {
+        /** @hide */
+        public TxPacketCounters(int txPacketSucceeded, int txPacketFailed) {
+            this.txPacketSucceeded = txPacketSucceeded;
+            this.txPacketFailed = txPacketFailed;
+        }
+
+        /**
+         * Number of successfully transmitted packets.
+         */
+        public final int txPacketSucceeded;
+
+        /**
+         * Number of packet transmission failures.
+         */
+        public final int txPacketFailed;
+    }
+
+    /**
+     * Callbacks for SoftAp interface registered using
+     * {@link #registerApCallback(String, Executor, SoftApCallback)}.
+     */
+    public interface SoftApCallback {
+        /**
+         * Invoked when there is a fatal failure and the SoftAp is shutdown.
+         */
+        void onFailure();
+
+        /**
+         * Invoked when there is a change in the associated station (STA).
+         * @param client Information about the client whose status has changed.
+         * @param isConnected Indication as to whether the client is connected (true), or
+         *                    disconnected (false).
+         */
+        void onConnectedClientsChanged(@NonNull NativeWifiClient client, boolean isConnected);
+
+        /**
+         * Invoked when a channel switch event happens - i.e. the SoftAp is moved to a different
+         * channel. Also called on initial registration.
+         * @param frequencyMhz The new frequency of the SoftAp. A value of 0 is invalid and is an
+         *                     indication that the SoftAp is not enabled.
+         * @param bandwidth The new bandwidth of the SoftAp.
+         */
+        void onSoftApChannelSwitched(int frequencyMhz, @WifiAnnotations.Bandwidth int bandwidth);
+    }
+
+    /**
+     * Callback to notify the results of a
+     * {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)} call.
+     * Note: no callbacks will be triggered if the interface dies while sending a frame.
+     */
+    public interface SendMgmtFrameCallback {
+        /**
+         * Called when the management frame was successfully sent and ACKed by the recipient.
+         * @param elapsedTimeMs The elapsed time between when the management frame was sent and when
+         *                      the ACK was processed, in milliseconds, as measured by wificond.
+         *                      This includes the time that the send frame spent queuing before it
+         *                      was sent, any firmware retries, and the time the received ACK spent
+         *                      queuing before it was processed.
+         */
+        void onAck(int elapsedTimeMs);
+
+        /**
+         * Called when the send failed.
+         * @param reason The error code for the failure.
+         */
+        void onFailure(@SendMgmtFrameError int reason);
+    }
+
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = {"SEND_MGMT_FRAME_ERROR_"},
+            value = {SEND_MGMT_FRAME_ERROR_UNKNOWN,
+                    SEND_MGMT_FRAME_ERROR_MCS_UNSUPPORTED,
+                    SEND_MGMT_FRAME_ERROR_NO_ACK,
+                    SEND_MGMT_FRAME_ERROR_TIMEOUT,
+                    SEND_MGMT_FRAME_ERROR_ALREADY_STARTED})
+    public @interface SendMgmtFrameError {}
+
+    // Send management frame error codes
+
+    /**
+     * Unknown error occurred during call to
+     * {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)}.
+     */
+    public static final int SEND_MGMT_FRAME_ERROR_UNKNOWN = 1;
+
+    /**
+     * Specifying the MCS rate in
+     * {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)} is not
+     * supported by this device.
+     */
+    public static final int SEND_MGMT_FRAME_ERROR_MCS_UNSUPPORTED = 2;
+
+    /**
+     * Driver reported that no ACK was received for the frame transmitted using
+     * {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)}.
+     */
+    public static final int SEND_MGMT_FRAME_ERROR_NO_ACK = 3;
+
+    /**
+     * Error code for when the driver fails to report on the status of the frame sent by
+     * {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)}
+     * after {@link #SEND_MGMT_FRAME_TIMEOUT_MS} milliseconds.
+     */
+    public static final int SEND_MGMT_FRAME_ERROR_TIMEOUT = 4;
+
+    /**
+     * An existing call to
+     * {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)}
+     * is in progress. Another frame cannot be sent until the first call completes.
+     */
+    public static final int SEND_MGMT_FRAME_ERROR_ALREADY_STARTED = 5;
+
+    /** @hide */
+    public WifiNl80211Manager(Context context) {
+        mAlarmManager = context.getSystemService(AlarmManager.class);
+        mEventHandler = new Handler(context.getMainLooper());
+    }
+
+    /** @hide */
+    @VisibleForTesting
+    public WifiNl80211Manager(Context context, IWificond wificond) {
+        this(context);
+        mWificond = wificond;
+    }
+
+    private class PnoScanEventHandler extends IPnoScanEvent.Stub {
+        private Executor mExecutor;
+        private ScanEventCallback mCallback;
+
+        PnoScanEventHandler(@NonNull Executor executor, @NonNull ScanEventCallback callback) {
+            mExecutor = executor;
+            mCallback = callback;
+        }
+
+        @Override
+        public void OnPnoNetworkFound() {
+            Log.d(TAG, "Pno scan result event");
+            Binder.clearCallingIdentity();
+            mExecutor.execute(() -> mCallback.onScanResultReady());
+        }
+
+        @Override
+        public void OnPnoScanFailed() {
+            Log.d(TAG, "Pno Scan failed event");
+            Binder.clearCallingIdentity();
+            mExecutor.execute(() -> mCallback.onScanFailed());
+        }
+    }
+
+    /**
+     * Listener for AP Interface events.
+     */
+    private class ApInterfaceEventCallback extends IApInterfaceEventCallback.Stub {
+        private Executor mExecutor;
+        private SoftApCallback mSoftApListener;
+
+        ApInterfaceEventCallback(Executor executor, SoftApCallback listener) {
+            mExecutor = executor;
+            mSoftApListener = listener;
+        }
+
+        @Override
+        public void onConnectedClientsChanged(NativeWifiClient client, boolean isConnected) {
+            if (mVerboseLoggingEnabled) {
+                Log.d(TAG, "onConnectedClientsChanged called with "
+                        + client.getMacAddress() + " isConnected: " + isConnected);
+            }
+
+            Binder.clearCallingIdentity();
+            mExecutor.execute(() -> mSoftApListener.onConnectedClientsChanged(client, isConnected));
+        }
+
+        @Override
+        public void onSoftApChannelSwitched(int frequency, int bandwidth) {
+            Binder.clearCallingIdentity();
+            mExecutor.execute(() -> mSoftApListener.onSoftApChannelSwitched(frequency,
+                    toFrameworkBandwidth(bandwidth)));
+        }
+
+        private @WifiAnnotations.Bandwidth int toFrameworkBandwidth(int bandwidth) {
+            switch(bandwidth) {
+                case IApInterfaceEventCallback.BANDWIDTH_INVALID:
+                    return SoftApInfo.CHANNEL_WIDTH_INVALID;
+                case IApInterfaceEventCallback.BANDWIDTH_20_NOHT:
+                    return SoftApInfo.CHANNEL_WIDTH_20MHZ_NOHT;
+                case IApInterfaceEventCallback.BANDWIDTH_20:
+                    return SoftApInfo.CHANNEL_WIDTH_20MHZ;
+                case IApInterfaceEventCallback.BANDWIDTH_40:
+                    return SoftApInfo.CHANNEL_WIDTH_40MHZ;
+                case IApInterfaceEventCallback.BANDWIDTH_80:
+                    return SoftApInfo.CHANNEL_WIDTH_80MHZ;
+                case IApInterfaceEventCallback.BANDWIDTH_80P80:
+                    return SoftApInfo.CHANNEL_WIDTH_80MHZ_PLUS_MHZ;
+                case IApInterfaceEventCallback.BANDWIDTH_160:
+                    return SoftApInfo.CHANNEL_WIDTH_160MHZ;
+                default:
+                    return SoftApInfo.CHANNEL_WIDTH_INVALID;
+            }
+        }
+    }
+
+    /**
+     * Callback triggered by wificond.
+     */
+    private class SendMgmtFrameEvent extends ISendMgmtFrameEvent.Stub {
+        private Executor mExecutor;
+        private SendMgmtFrameCallback mCallback;
+        private AlarmManager.OnAlarmListener mTimeoutCallback;
+        /**
+         * ensures that mCallback is only called once
+         */
+        private boolean mWasCalled;
+
+        private void runIfFirstCall(Runnable r) {
+            if (mWasCalled) return;
+            mWasCalled = true;
+
+            mSendMgmtFrameInProgress.set(false);
+            r.run();
+        }
+
+        SendMgmtFrameEvent(@NonNull Executor executor, @NonNull SendMgmtFrameCallback callback) {
+            mExecutor = executor;
+            mCallback = callback;
+            // called in main thread
+            mTimeoutCallback = () -> runIfFirstCall(() -> {
+                if (mVerboseLoggingEnabled) {
+                    Log.e(TAG, "Timed out waiting for ACK");
+                }
+                Binder.clearCallingIdentity();
+                mExecutor.execute(() -> mCallback.onFailure(SEND_MGMT_FRAME_ERROR_TIMEOUT));
+            });
+            mWasCalled = false;
+
+            mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
+                    SystemClock.elapsedRealtime() + SEND_MGMT_FRAME_TIMEOUT_MS,
+                    TIMEOUT_ALARM_TAG, mTimeoutCallback, mEventHandler);
+        }
+
+        // called in binder thread
+        @Override
+        public void OnAck(int elapsedTimeMs) {
+            // post to main thread
+            mEventHandler.post(() -> runIfFirstCall(() -> {
+                mAlarmManager.cancel(mTimeoutCallback);
+                Binder.clearCallingIdentity();
+                mExecutor.execute(() -> mCallback.onAck(elapsedTimeMs));
+            }));
+        }
+
+        // called in binder thread
+        @Override
+        public void OnFailure(int reason) {
+            // post to main thread
+            mEventHandler.post(() -> runIfFirstCall(() -> {
+                mAlarmManager.cancel(mTimeoutCallback);
+                Binder.clearCallingIdentity();
+                mExecutor.execute(() -> mCallback.onFailure(reason));
+            }));
+        }
+    }
+
+    /**
+     * Called by the binder subsystem upon remote object death.
+     * Invoke all the register death handlers and clear state.
+     * @hide
+     */
+    @VisibleForTesting
+    public void binderDied() {
+        mEventHandler.post(() -> {
+            Log.e(TAG, "Wificond died!");
+            clearState();
+            // Invalidate the global wificond handle on death. Will be refreshed
+            // on the next setup call.
+            mWificond = null;
+            if (mDeathEventHandler != null) {
+                mDeathEventHandler.run();
+            }
+        });
+    }
+
+    /**
+     * Enable or disable verbose logging of the WifiNl80211Manager module.
+     * @param enable True to enable verbose logging. False to disable verbose logging.
+     */
+    public void enableVerboseLogging(boolean enable) {
+        mVerboseLoggingEnabled = enable;
+    }
+
+    /**
+     * Register a death notification for the WifiNl80211Manager which acts as a proxy for the
+     * wificond daemon (i.e. the death listener will be called when and if the wificond daemon
+     * dies).
+     *
+     * @param deathEventHandler A {@link Runnable} to be called whenever the wificond daemon dies.
+     */
+    public void setOnServiceDeadCallback(@NonNull Runnable deathEventHandler) {
+        if (mDeathEventHandler != null) {
+            Log.e(TAG, "Death handler already present");
+        }
+        mDeathEventHandler = deathEventHandler;
+    }
+
+    /**
+     * Helper method to retrieve the global wificond handle and register for
+     * death notifications.
+     */
+    private boolean retrieveWificondAndRegisterForDeath() {
+        if (mWificond != null) {
+            if (mVerboseLoggingEnabled) {
+                Log.d(TAG, "Wificond handle already retrieved");
+            }
+            // We already have a wificond handle.
+            return true;
+        }
+        IBinder binder = ServiceManager.getService(Context.WIFI_NL80211_SERVICE);
+        mWificond = IWificond.Stub.asInterface(binder);
+        if (mWificond == null) {
+            Log.e(TAG, "Failed to get reference to wificond");
+            return false;
+        }
+        try {
+            mWificond.asBinder().linkToDeath(() -> binderDied(), 0);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to register death notification for wificond");
+            // The remote has already died.
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Set up an interface for client (STA) mode.
+     *
+     * @param ifaceName Name of the interface to configure.
+     * @param executor The Executor on which to execute the callbacks.
+     * @param scanCallback A callback for framework initiated scans.
+     * @param pnoScanCallback A callback for PNO (offloaded) scans.
+     * @return true on success.
+     */
+    public boolean setupInterfaceForClientMode(@NonNull String ifaceName,
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull ScanEventCallback scanCallback, @NonNull ScanEventCallback pnoScanCallback) {
+        Log.d(TAG, "Setting up interface for client mode");
+        if (!retrieveWificondAndRegisterForDeath()) {
+            return false;
+        }
+
+        if (scanCallback == null || pnoScanCallback == null || executor == null) {
+            Log.e(TAG, "setupInterfaceForClientMode invoked with null callbacks");
+            return false;
+        }
+
+        IClientInterface clientInterface = null;
+        try {
+            clientInterface = mWificond.createClientInterface(ifaceName);
+        } catch (RemoteException e1) {
+            Log.e(TAG, "Failed to get IClientInterface due to remote exception");
+            return false;
+        }
+
+        if (clientInterface == null) {
+            Log.e(TAG, "Could not get IClientInterface instance from wificond");
+            return false;
+        }
+        Binder.allowBlocking(clientInterface.asBinder());
+
+        // Refresh Handlers
+        mClientInterfaces.put(ifaceName, clientInterface);
+        try {
+            IWifiScannerImpl wificondScanner = clientInterface.getWifiScannerImpl();
+            if (wificondScanner == null) {
+                Log.e(TAG, "Failed to get WificondScannerImpl");
+                return false;
+            }
+            mWificondScanners.put(ifaceName, wificondScanner);
+            Binder.allowBlocking(wificondScanner.asBinder());
+            ScanEventHandler scanEventHandler = new ScanEventHandler(executor, scanCallback);
+            mScanEventHandlers.put(ifaceName,  scanEventHandler);
+            wificondScanner.subscribeScanEvents(scanEventHandler);
+            PnoScanEventHandler pnoScanEventHandler = new PnoScanEventHandler(executor,
+                    pnoScanCallback);
+            mPnoScanEventHandlers.put(ifaceName,  pnoScanEventHandler);
+            wificondScanner.subscribePnoScanEvents(pnoScanEventHandler);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to refresh wificond scanner due to remote exception");
+        }
+
+        return true;
+    }
+
+    /**
+     * Tear down a specific client (STA) interface configured using
+     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}.
+     *
+     * @param ifaceName Name of the interface to tear down.
+     * @return Returns true on success, false on failure (e.g. when called before an interface was
+     * set up).
+     */
+    public boolean tearDownClientInterface(@NonNull String ifaceName) {
+        if (getClientInterface(ifaceName) == null) {
+            Log.e(TAG, "No valid wificond client interface handler");
+            return false;
+        }
+        try {
+            IWifiScannerImpl scannerImpl = mWificondScanners.get(ifaceName);
+            if (scannerImpl != null) {
+                scannerImpl.unsubscribeScanEvents();
+                scannerImpl.unsubscribePnoScanEvents();
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to unsubscribe wificond scanner due to remote exception");
+            return false;
+        }
+
+        if (mWificond == null) {
+            Log.e(TAG, "Reference to wifiCond is null");
+            return false;
+        }
+
+        boolean success;
+        try {
+            success = mWificond.tearDownClientInterface(ifaceName);
+        } catch (RemoteException e1) {
+            Log.e(TAG, "Failed to teardown client interface due to remote exception");
+            return false;
+        }
+        if (!success) {
+            Log.e(TAG, "Failed to teardown client interface");
+            return false;
+        }
+
+        mClientInterfaces.remove(ifaceName);
+        mWificondScanners.remove(ifaceName);
+        mScanEventHandlers.remove(ifaceName);
+        mPnoScanEventHandlers.remove(ifaceName);
+        return true;
+    }
+
+    /**
+     * Set up interface as a Soft AP.
+     *
+     * @param ifaceName Name of the interface to configure.
+     * @return true on success.
+     */
+    public boolean setupInterfaceForSoftApMode(@NonNull String ifaceName) {
+        Log.d(TAG, "Setting up interface for soft ap mode");
+        if (!retrieveWificondAndRegisterForDeath()) {
+            return false;
+        }
+
+        IApInterface apInterface = null;
+        try {
+            apInterface = mWificond.createApInterface(ifaceName);
+        } catch (RemoteException e1) {
+            Log.e(TAG, "Failed to get IApInterface due to remote exception");
+            return false;
+        }
+
+        if (apInterface == null) {
+            Log.e(TAG, "Could not get IApInterface instance from wificond");
+            return false;
+        }
+        Binder.allowBlocking(apInterface.asBinder());
+
+        // Refresh Handlers
+        mApInterfaces.put(ifaceName, apInterface);
+        return true;
+    }
+
+    /**
+     * Tear down a Soft AP interface configured using
+     * {@link #setupInterfaceForSoftApMode(String)}.
+     *
+     * @param ifaceName Name of the interface to tear down.
+     * @return Returns true on success, false on failure (e.g. when called before an interface was
+     * set up).
+     */
+    public boolean tearDownSoftApInterface(@NonNull String ifaceName) {
+        if (getApInterface(ifaceName) == null) {
+            Log.e(TAG, "No valid wificond ap interface handler");
+            return false;
+        }
+
+        if (mWificond == null) {
+            Log.e(TAG, "Reference to wifiCond is null");
+            return false;
+        }
+
+        boolean success;
+        try {
+            success = mWificond.tearDownApInterface(ifaceName);
+        } catch (RemoteException e1) {
+            Log.e(TAG, "Failed to teardown AP interface due to remote exception");
+            return false;
+        }
+        if (!success) {
+            Log.e(TAG, "Failed to teardown AP interface");
+            return false;
+        }
+        mApInterfaces.remove(ifaceName);
+        mApInterfaceListeners.remove(ifaceName);
+        return true;
+    }
+
+    /**
+    * Tear down all interfaces, whether clients (STA) or Soft AP.
+     *
+    * @return Returns true on success.
+    */
+    public boolean tearDownInterfaces() {
+        Log.d(TAG, "tearing down interfaces in wificond");
+        // Explicitly refresh the wificodn handler because |tearDownInterfaces()|
+        // could be used to cleanup before we setup any interfaces.
+        if (!retrieveWificondAndRegisterForDeath()) {
+            return false;
+        }
+
+        try {
+            for (Map.Entry<String, IWifiScannerImpl> entry : mWificondScanners.entrySet()) {
+                entry.getValue().unsubscribeScanEvents();
+                entry.getValue().unsubscribePnoScanEvents();
+            }
+            mWificond.tearDownInterfaces();
+            clearState();
+            return true;
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to tear down interfaces due to remote exception");
+        }
+
+        return false;
+    }
+
+    /** Helper function to look up the interface handle using name */
+    private IClientInterface getClientInterface(@NonNull String ifaceName) {
+        return mClientInterfaces.get(ifaceName);
+    }
+
+    /**
+     * Request signal polling.
+     *
+     * @param ifaceName Name of the interface on which to poll. The interface must have been
+     *                  already set up using
+     *{@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
+     *                  or {@link #setupInterfaceForSoftApMode(String)}.
+     *
+     * @return A {@link SignalPollResult} object containing interface statistics, or a null on
+     * error (e.g. the interface hasn't been set up yet).
+     */
+    @Nullable public SignalPollResult signalPoll(@NonNull String ifaceName) {
+        IClientInterface iface = getClientInterface(ifaceName);
+        if (iface == null) {
+            Log.e(TAG, "No valid wificond client interface handler");
+            return null;
+        }
+
+        int[] resultArray;
+        try {
+            resultArray = iface.signalPoll();
+            if (resultArray == null || resultArray.length != 4) {
+                Log.e(TAG, "Invalid signal poll result from wificond");
+                return null;
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to do signal polling due to remote exception");
+            return null;
+        }
+        return new SignalPollResult(resultArray[0], resultArray[1], resultArray[3], resultArray[2]);
+    }
+
+    /**
+     * Get current transmit (Tx) packet counters of the specified interface. The interface must
+     * have been already set up using
+     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
+     * or {@link #setupInterfaceForSoftApMode(String)}.
+     *
+     * @param ifaceName Name of the interface.
+     * @return {@link TxPacketCounters} of the current interface or null on error (e.g. when
+     * called before the interface has been set up).
+     */
+    @Nullable public TxPacketCounters getTxPacketCounters(@NonNull String ifaceName) {
+        IClientInterface iface = getClientInterface(ifaceName);
+        if (iface == null) {
+            Log.e(TAG, "No valid wificond client interface handler");
+            return null;
+        }
+
+        int[] resultArray;
+        try {
+            resultArray = iface.getPacketCounters();
+            if (resultArray == null || resultArray.length != 2) {
+                Log.e(TAG, "Invalid signal poll result from wificond");
+                return null;
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to do signal polling due to remote exception");
+            return null;
+        }
+        return new TxPacketCounters(resultArray[0], resultArray[1]);
+    }
+
+    /** Helper function to look up the scanner impl handle using name */
+    private IWifiScannerImpl getScannerImpl(@NonNull String ifaceName) {
+        return mWificondScanners.get(ifaceName);
+    }
+
+    /**
+     * Fetch the latest scan results of the indicated type for the specified interface. Note that
+     * this method fetches the latest results - it does not initiate a scan. Initiating a scan can
+     * be done using {@link #startScan(String, int, Set, List)} or
+     * {@link #startPnoScan(String, PnoSettings, Executor, PnoScanRequestCallback)}.
+     *
+     * Note: The interface must have been already set up using
+     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
+     * or {@link #setupInterfaceForSoftApMode(String)}.
+     *
+     * @param ifaceName Name of the interface.
+     * @param scanType The type of scan result to be returned, can be
+     * {@link #SCAN_TYPE_SINGLE_SCAN} or {@link #SCAN_TYPE_PNO_SCAN}.
+     * @return Returns an array of {@link NativeScanResult} or an empty array on failure (e.g. when
+     * called before the interface has been set up).
+     */
+    @NonNull public List<NativeScanResult> getScanResults(@NonNull String ifaceName,
+            @ScanResultType int scanType) {
+        IWifiScannerImpl scannerImpl = getScannerImpl(ifaceName);
+        if (scannerImpl == null) {
+            Log.e(TAG, "No valid wificond scanner interface handler");
+            return new ArrayList<>();
+        }
+        List<NativeScanResult> results = null;
+        try {
+            if (scanType == SCAN_TYPE_SINGLE_SCAN) {
+                results = Arrays.asList(scannerImpl.getScanResults());
+            } else {
+                results = Arrays.asList(scannerImpl.getPnoScanResults());
+            }
+        } catch (RemoteException e1) {
+            Log.e(TAG, "Failed to create ScanDetail ArrayList");
+        }
+        if (results == null) {
+            results = new ArrayList<>();
+        }
+        if (mVerboseLoggingEnabled) {
+            Log.d(TAG, "get " + results.size() + " scan results from wificond");
+        }
+
+        return results;
+    }
+
+    /**
+     * Return scan type for the parcelable {@link SingleScanSettings}
+     */
+    private static int getScanType(@WifiAnnotations.ScanType int scanType) {
+        switch (scanType) {
+            case WifiScanner.SCAN_TYPE_LOW_LATENCY:
+                return IWifiScannerImpl.SCAN_TYPE_LOW_SPAN;
+            case WifiScanner.SCAN_TYPE_LOW_POWER:
+                return IWifiScannerImpl.SCAN_TYPE_LOW_POWER;
+            case WifiScanner.SCAN_TYPE_HIGH_ACCURACY:
+                return IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
+            default:
+                throw new IllegalArgumentException("Invalid scan type " + scanType);
+        }
+    }
+
+    /**
+     * Start a scan using the specified parameters. A scan is an asynchronous operation. The
+     * result of the operation is returned in the {@link ScanEventCallback} registered when
+     * setting up an interface using
+     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}.
+     * The latest scans can be obtained using {@link #getScanResults(String, int)} and using a
+     * {@link #SCAN_TYPE_SINGLE_SCAN} for the {@code scanType}.
+     *
+     * Note: The interface must have been already set up using
+     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
+     * or {@link #setupInterfaceForSoftApMode(String)}.
+     *
+     * @param ifaceName Name of the interface on which to initiate the scan.
+     * @param scanType Type of scan to perform, can be any of
+     * {@link WifiScanner#SCAN_TYPE_HIGH_ACCURACY}, {@link WifiScanner#SCAN_TYPE_LOW_POWER}, or
+     * {@link WifiScanner#SCAN_TYPE_LOW_LATENCY}.
+     * @param freqs list of frequencies to scan for, if null scan all supported channels.
+     * @param hiddenNetworkSSIDs List of hidden networks to be scanned for, a null indicates that
+     *                           no hidden frequencies will be scanned for.
+     * @return Returns true on success, false on failure (e.g. when called before the interface
+     * has been set up).
+     */
+    public boolean startScan(@NonNull String ifaceName, @WifiAnnotations.ScanType int scanType,
+            @Nullable Set<Integer> freqs, @Nullable List<byte[]> hiddenNetworkSSIDs) {
+        IWifiScannerImpl scannerImpl = getScannerImpl(ifaceName);
+        if (scannerImpl == null) {
+            Log.e(TAG, "No valid wificond scanner interface handler");
+            return false;
+        }
+        SingleScanSettings settings = new SingleScanSettings();
+        try {
+            settings.scanType = getScanType(scanType);
+        } catch (IllegalArgumentException e) {
+            Log.e(TAG, "Invalid scan type ", e);
+            return false;
+        }
+        settings.channelSettings  = new ArrayList<>();
+        settings.hiddenNetworks  = new ArrayList<>();
+
+        if (freqs != null) {
+            for (Integer freq : freqs) {
+                ChannelSettings channel = new ChannelSettings();
+                channel.frequency = freq;
+                settings.channelSettings.add(channel);
+            }
+        }
+        if (hiddenNetworkSSIDs != null) {
+            for (byte[] ssid : hiddenNetworkSSIDs) {
+                HiddenNetwork network = new HiddenNetwork();
+                network.ssid = ssid;
+
+                // settings.hiddenNetworks is expected to be very small, so this shouldn't cause
+                // any performance issues.
+                if (!settings.hiddenNetworks.contains(network)) {
+                    settings.hiddenNetworks.add(network);
+                }
+            }
+        }
+
+        try {
+            return scannerImpl.scan(settings);
+        } catch (RemoteException e1) {
+            Log.e(TAG, "Failed to request scan due to remote exception");
+        }
+        return false;
+    }
+
+    /**
+     * Request a PNO (Preferred Network Offload). The offload request and the scans are asynchronous
+     * operations. The result of the request are returned in the {@code callback} parameter which
+     * is an {@link PnoScanRequestCallback}. The scan results are are return in the
+     * {@link ScanEventCallback} which is registered when setting up an interface using
+     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}.
+     * The latest PNO scans can be obtained using {@link #getScanResults(String, int)} with the
+     * {@code scanType} set to {@link #SCAN_TYPE_PNO_SCAN}.
+     *
+     * Note: The interface must have been already set up using
+     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
+     * or {@link #setupInterfaceForSoftApMode(String)}.
+     *
+     * @param ifaceName Name of the interface on which to request a PNO.
+     * @param pnoSettings PNO scan configuration.
+     * @param executor The Executor on which to execute the callback.
+     * @param callback Callback for the results of the offload request.
+     * @return true on success, false on failure (e.g. when called before the interface has been set
+     * up).
+     */
+    public boolean startPnoScan(@NonNull String ifaceName, @NonNull PnoSettings pnoSettings,
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull PnoScanRequestCallback callback) {
+        IWifiScannerImpl scannerImpl = getScannerImpl(ifaceName);
+        if (scannerImpl == null) {
+            Log.e(TAG, "No valid wificond scanner interface handler");
+            return false;
+        }
+
+        if (callback == null || executor == null) {
+            Log.e(TAG, "startPnoScan called with a null callback");
+            return false;
+        }
+
+        try {
+            boolean success = scannerImpl.startPnoScan(pnoSettings);
+            if (success) {
+                executor.execute(callback::onPnoRequestSucceeded);
+            } else {
+                executor.execute(callback::onPnoRequestFailed);
+            }
+            return success;
+        } catch (RemoteException e1) {
+            Log.e(TAG, "Failed to start pno scan due to remote exception");
+        }
+        return false;
+    }
+
+    /**
+     * Stop PNO scan configured with
+     * {@link #startPnoScan(String, PnoSettings, Executor, PnoScanRequestCallback)}.
+     *
+     * Note: The interface must have been already set up using
+     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
+     * or {@link #setupInterfaceForSoftApMode(String)}.
+     *
+     * @param ifaceName Name of the interface on which the PNO scan was configured.
+     * @return true on success, false on failure (e.g. when called before the interface has been
+     * set up).
+     */
+    public boolean stopPnoScan(@NonNull String ifaceName) {
+        IWifiScannerImpl scannerImpl = getScannerImpl(ifaceName);
+        if (scannerImpl == null) {
+            Log.e(TAG, "No valid wificond scanner interface handler");
+            return false;
+        }
+        try {
+            return scannerImpl.stopPnoScan();
+        } catch (RemoteException e1) {
+            Log.e(TAG, "Failed to stop pno scan due to remote exception");
+        }
+        return false;
+    }
+
+    /**
+     * Abort ongoing single scan started with {@link #startScan(String, int, Set, List)}. No failure
+     * callback, e.g. {@link ScanEventCallback#onScanFailed()}, is triggered by this operation.
+     *
+     * Note: The interface must have been already set up using
+     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
+     * or {@link #setupInterfaceForSoftApMode(String)}. If the interface has not been set up then
+     * this method has no impact.
+     *
+     * @param ifaceName Name of the interface on which the scan was started.
+     */
+    public void abortScan(@NonNull String ifaceName) {
+        IWifiScannerImpl scannerImpl = getScannerImpl(ifaceName);
+        if (scannerImpl == null) {
+            Log.e(TAG, "No valid wificond scanner interface handler");
+            return;
+        }
+        try {
+            scannerImpl.abortScan();
+        } catch (RemoteException e1) {
+            Log.e(TAG, "Failed to request abortScan due to remote exception");
+        }
+    }
+
+    /**
+     * Query the list of valid frequencies (in MHz) for the provided band.
+     * The result depends on the on the country code that has been set.
+     *
+     * @param band as specified by one of the WifiScanner.WIFI_BAND_* constants.
+     * The following bands are supported {@link @WifiScanner.WifiBandBasic}:
+     * WifiScanner.WIFI_BAND_24_GHZ
+     * WifiScanner.WIFI_BAND_5_GHZ
+     * WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY
+     * WifiScanner.WIFI_BAND_6_GHZ
+     * @return frequencies vector of valid frequencies (MHz), or an empty array for error.
+     * @throws IllegalArgumentException if band is not recognized.
+     */
+    public @NonNull int[] getChannelsMhzForBand(@WifiAnnotations.WifiBandBasic int band) {
+        if (mWificond == null) {
+            Log.e(TAG, "No valid wificond scanner interface handler");
+            return new int[0];
+        }
+        int[] result = null;
+        try {
+            switch (band) {
+                case WifiScanner.WIFI_BAND_24_GHZ:
+                    result = mWificond.getAvailable2gChannels();
+                    break;
+                case WifiScanner.WIFI_BAND_5_GHZ:
+                    result = mWificond.getAvailable5gNonDFSChannels();
+                    break;
+                case WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY:
+                    result = mWificond.getAvailableDFSChannels();
+                    break;
+                case WifiScanner.WIFI_BAND_6_GHZ:
+                    result = mWificond.getAvailable6gChannels();
+                    break;
+                default:
+                    throw new IllegalArgumentException("unsupported band " + band);
+            }
+        } catch (RemoteException e1) {
+            Log.e(TAG, "Failed to request getChannelsForBand due to remote exception");
+        }
+        if (result == null) {
+            result = new int[0];
+        }
+        return result;
+    }
+
+    /** Helper function to look up the interface handle using name */
+    private IApInterface getApInterface(@NonNull String ifaceName) {
+        return mApInterfaces.get(ifaceName);
+    }
+
+    /**
+     * Get the device phy capabilities for a given interface.
+     *
+     * Note: The interface must have been already set up using
+     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
+     * or {@link #setupInterfaceForSoftApMode(String)}.
+     *
+     * @return DeviceWiphyCapabilities or null on error (e.g. when called on an interface which has
+     * not been set up).
+     */
+    @Nullable public DeviceWiphyCapabilities getDeviceWiphyCapabilities(@NonNull String ifaceName) {
+        if (mWificond == null) {
+            Log.e(TAG, "Can not query for device wiphy capabilities at this time");
+            return null;
+        }
+
+        try {
+            return mWificond.getDeviceWiphyCapabilities(ifaceName);
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
+
+    /**
+     * Register the provided callback handler for SoftAp events. The interface must first be created
+     * using {@link #setupInterfaceForSoftApMode(String)}. The callback registration is valid until
+     * the interface is deleted using {@link #tearDownSoftApInterface(String)} (no deregistration
+     * method is provided).
+     * <p>
+     * Note that only one callback can be registered at a time - any registration overrides previous
+     * registrations.
+     *
+     * @param ifaceName Name of the interface on which to register the callback.
+     * @param executor The Executor on which to execute the callbacks.
+     * @param callback Callback for AP events.
+     * @return true on success, false on failure (e.g. when called on an interface which has not
+     * been set up).
+     */
+    public boolean registerApCallback(@NonNull String ifaceName,
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull SoftApCallback callback) {
+        IApInterface iface = getApInterface(ifaceName);
+        if (iface == null) {
+            Log.e(TAG, "No valid ap interface handler");
+            return false;
+        }
+
+        if (callback == null || executor == null) {
+            Log.e(TAG, "registerApCallback called with a null callback");
+            return false;
+        }
+
+        try {
+            IApInterfaceEventCallback wificondCallback = new ApInterfaceEventCallback(executor,
+                    callback);
+            mApInterfaceListeners.put(ifaceName, wificondCallback);
+            boolean success = iface.registerCallback(wificondCallback);
+            if (!success) {
+                Log.e(TAG, "Failed to register ap callback.");
+                return false;
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "Exception in registering AP callback: " + e);
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Send a management frame on the specified interface at the specified rate. Useful for probing
+     * the link with arbitrary frames.
+     *
+     * Note: The interface must have been already set up using
+     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
+     * or {@link #setupInterfaceForSoftApMode(String)}.
+     *
+     * @param ifaceName The interface on which to send the frame.
+     * @param frame The raw byte array of the management frame to tramit.
+     * @param mcs The MCS (modulation and coding scheme), i.e. rate, at which to transmit the
+     *            frame. Specified per IEEE 802.11.
+     * @param executor The Executor on which to execute the callbacks.
+     * @param callback A {@link SendMgmtFrameCallback} callback for results of the operation.
+     */
+    public void sendMgmtFrame(@NonNull String ifaceName, @NonNull byte[] frame, int mcs,
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull SendMgmtFrameCallback callback) {
+
+        if (callback == null || executor == null) {
+            Log.e(TAG, "callback cannot be null!");
+            return;
+        }
+
+        if (frame == null) {
+            Log.e(TAG, "frame cannot be null!");
+            executor.execute(() -> callback.onFailure(SEND_MGMT_FRAME_ERROR_UNKNOWN));
+            return;
+        }
+
+        // TODO (b/112029045) validate mcs
+        IClientInterface clientInterface = getClientInterface(ifaceName);
+        if (clientInterface == null) {
+            Log.e(TAG, "No valid wificond client interface handler");
+            executor.execute(() -> callback.onFailure(SEND_MGMT_FRAME_ERROR_UNKNOWN));
+            return;
+        }
+
+        if (!mSendMgmtFrameInProgress.compareAndSet(false, true)) {
+            Log.e(TAG, "An existing management frame transmission is in progress!");
+            executor.execute(() -> callback.onFailure(SEND_MGMT_FRAME_ERROR_ALREADY_STARTED));
+            return;
+        }
+
+        SendMgmtFrameEvent sendMgmtFrameEvent = new SendMgmtFrameEvent(executor, callback);
+        try {
+            clientInterface.SendMgmtFrame(frame, sendMgmtFrameEvent, mcs);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Exception while starting link probe: " + e);
+            // Call sendMgmtFrameEvent.OnFailure() instead of callback.onFailure() so that
+            // sendMgmtFrameEvent can clean up internal state, such as cancelling the timer.
+            sendMgmtFrameEvent.OnFailure(SEND_MGMT_FRAME_ERROR_UNKNOWN);
+        }
+    }
+
+    /**
+     * Clear all internal handles.
+     */
+    private void clearState() {
+        // Refresh handlers
+        mClientInterfaces.clear();
+        mWificondScanners.clear();
+        mPnoScanEventHandlers.clear();
+        mScanEventHandlers.clear();
+        mApInterfaces.clear();
+        mApInterfaceListeners.clear();
+        mSendMgmtFrameInProgress.set(false);
+    }
+
+    /**
+     * OEM parsed security type
+     */
+    public static class OemSecurityType {
+        /** The protocol defined in {@link android.net.wifi.WifiAnnotations.Protocol}. */
+        public final @WifiAnnotations.Protocol int protocol;
+        /**
+         * Supported key management types defined
+         * in {@link android.net.wifi.WifiAnnotations.KeyMgmt}.
+         */
+        @NonNull public final List<Integer> keyManagement;
+        /**
+         * Supported pairwise cipher types defined
+         * in {@link android.net.wifi.WifiAnnotations.Cipher}.
+         */
+        @NonNull public final List<Integer> pairwiseCipher;
+        /** The group cipher type defined in {@link android.net.wifi.WifiAnnotations.Cipher}. */
+        public final @WifiAnnotations.Cipher int groupCipher;
+        /**
+         * Default constructor for OemSecurityType
+         *
+         * @param protocol The protocol defined in
+         *                 {@link android.net.wifi.WifiAnnotations.Protocol}.
+         * @param keyManagement Supported key management types defined
+         *                      in {@link android.net.wifi.WifiAnnotations.KeyMgmt}.
+         * @param pairwiseCipher Supported pairwise cipher types defined
+         *                       in {@link android.net.wifi.WifiAnnotations.Cipher}.
+         * @param groupCipher The group cipher type defined
+         *                    in {@link android.net.wifi.WifiAnnotations.Cipher}.
+         */
+        public OemSecurityType(
+                @WifiAnnotations.Protocol int protocol,
+                @NonNull List<Integer> keyManagement,
+                @NonNull List<Integer> pairwiseCipher,
+                @WifiAnnotations.Cipher int groupCipher) {
+            this.protocol = protocol;
+            this.keyManagement = (keyManagement != null)
+                ? keyManagement : new ArrayList<Integer>();
+            this.pairwiseCipher = (pairwiseCipher != null)
+                ? pairwiseCipher : new ArrayList<Integer>();
+            this.groupCipher = groupCipher;
+        }
+    }
+
+    /**
+     * OEM information element parser for security types not parsed by the framework.
+     *
+     * The OEM method should use the method inputs {@code id}, {@code idExt}, and {@code bytes}
+     * to perform the parsing. The method should place the results in an OemSecurityType objct.
+     *
+     * @param id The information element id.
+     * @param idExt The information element extension id. This is valid only when id is
+     *        the extension id, {@code 255}.
+     * @param bytes The raw bytes of information element data, 'Element ID' and 'Length' are
+     *              stripped off already.
+     * @return an OemSecurityType object if this IE is parsed successfully, null otherwise.
+     */
+    @Nullable public static OemSecurityType parseOemSecurityTypeElement(
+            int id,
+            int idExt,
+            @NonNull byte[] bytes) {
+        return null;
+    }
+}
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
index 36c7213..d479892 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
@@ -17,6 +17,7 @@
 package android.net.wifi.p2p;
 
 import android.annotation.IntDef;
+import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.compat.annotation.UnsupportedAppUsage;
@@ -133,6 +134,7 @@
      *
      * By default this field is set to {@link #GROUP_OWNER_INTENT_AUTO}.
      */
+    @IntRange(from = 0, to = 15)
     public int groupOwnerIntent = GROUP_OWNER_INTENT_AUTO;
 
     /** @hide */
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java b/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
index cdb2806..8a86311 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
@@ -22,7 +22,9 @@
 import android.os.Parcelable;
 import android.util.LruCache;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 
 
@@ -78,8 +80,8 @@
      * Get the list of P2P groups.
      */
     @NonNull
-    public Collection<WifiP2pGroup> getGroupList() {
-        return mGroups.snapshot().values();
+    public List<WifiP2pGroup> getGroupList() {
+        return new ArrayList<>(mGroups.snapshot().values());
     }
 
     /**
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
index 0fe0675..9c2cad9 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
@@ -326,6 +326,12 @@
 
     /**
      * Broadcast intent action indicating that remembered persistent groups have changed.
+     *
+     * You can <em>not</em> receive this through components declared
+     * in manifests, only by explicitly registering for it with
+     * {@link android.content.Context#registerReceiver(android.content.BroadcastReceiver,
+     * android.content.IntentFilter) Context.registerReceiver()}.
+     *
      * @hide
      */
     @SystemApi
@@ -1347,20 +1353,33 @@
     }
 
     /**
-     * Force p2p to enter or exit listen state
+     * Force p2p to enter listen state
      *
      * @param c is the channel created at {@link #initialize(Context, Looper, ChannelListener)}
-     * @param enable enables or disables listening
      * @param listener for callbacks on success or failure. Can be null.
      *
      * @hide
      */
     @SystemApi
     @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
-    public void listen(@NonNull Channel c, boolean enable, @Nullable ActionListener listener) {
+    public void startListening(@NonNull Channel c, @Nullable ActionListener listener) {
         checkChannel(c);
-        c.mAsyncChannel.sendMessage(enable ? START_LISTEN : STOP_LISTEN,
-                0, c.putListener(listener));
+        c.mAsyncChannel.sendMessage(START_LISTEN, 0, c.putListener(listener));
+    }
+
+    /**
+     * Force p2p to exit listen state
+     *
+     * @param c is the channel created at {@link #initialize(Context, Looper, ChannelListener)}
+     * @param listener for callbacks on success or failure. Can be null.
+     *
+     * @hide
+     */
+    @SystemApi
+    @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
+    public void stopListening(@NonNull Channel c, @Nullable ActionListener listener) {
+        checkChannel(c);
+        c.mAsyncChannel.sendMessage(STOP_LISTEN, 0, c.putListener(listener));
     }
 
     /**
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java b/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java
index 5484d24..e399b5b 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java
@@ -17,6 +17,7 @@
 package android.net.wifi.p2p;
 
 import android.annotation.IntDef;
+import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.compat.annotation.UnsupportedAppUsage;
@@ -34,7 +35,7 @@
  */
 public final class WifiP2pWfdInfo implements Parcelable {
 
-    private boolean mWfdEnabled;
+    private boolean mEnabled;
 
     /** Device information bitmap */
     private int mDeviceInfo;
@@ -85,15 +86,15 @@
     /** @hide */
     @UnsupportedAppUsage
     public WifiP2pWfdInfo(int devInfo, int ctrlPort, int maxTput) {
-        mWfdEnabled = true;
+        mEnabled = true;
         mDeviceInfo = devInfo;
         mCtrlPort = ctrlPort;
         mMaxThroughput = maxTput;
     }
 
     /** Returns true is Wifi Display is enabled, false otherwise. */
-    public boolean isWfdEnabled() {
-        return mWfdEnabled;
+    public boolean isEnabled() {
+        return mEnabled;
     }
 
     /**
@@ -101,8 +102,8 @@
      *
      * @param enabled true to enable Wifi Display, false to disable
      */
-    public void setWfdEnabled(boolean enabled) {
-        mWfdEnabled = enabled;
+    public void setEnabled(boolean enabled) {
+        mEnabled = enabled;
     }
 
     /**
@@ -177,12 +178,12 @@
     }
 
     /** Sets the TCP port at which the WFD Device listens for RTSP messages. */
-    public void setControlPort(int port) {
+    public void setControlPort(@IntRange(from = 0) int port) {
         mCtrlPort = port;
     }
 
     /** Sets the maximum average throughput capability of the WFD Device, in megabits/second. */
-    public void setMaxThroughput(int maxThroughput) {
+    public void setMaxThroughput(@IntRange(from = 0) int maxThroughput) {
         mMaxThroughput = maxThroughput;
     }
 
@@ -200,7 +201,7 @@
     @Override
     public String toString() {
         StringBuffer sbuf = new StringBuffer();
-        sbuf.append("WFD enabled: ").append(mWfdEnabled);
+        sbuf.append("WFD enabled: ").append(mEnabled);
         sbuf.append("WFD DeviceInfo: ").append(mDeviceInfo);
         sbuf.append("\n WFD CtrlPort: ").append(mCtrlPort);
         sbuf.append("\n WFD MaxThroughput: ").append(mMaxThroughput);
@@ -215,7 +216,7 @@
     /** Copy constructor. */
     public WifiP2pWfdInfo(@Nullable WifiP2pWfdInfo source) {
         if (source != null) {
-            mWfdEnabled = source.mWfdEnabled;
+            mEnabled = source.mEnabled;
             mDeviceInfo = source.mDeviceInfo;
             mCtrlPort = source.mCtrlPort;
             mMaxThroughput = source.mMaxThroughput;
@@ -225,14 +226,14 @@
     /** Implement the Parcelable interface */
     @Override
     public void writeToParcel(@NonNull Parcel dest, int flags) {
-        dest.writeInt(mWfdEnabled ? 1 : 0);
+        dest.writeInt(mEnabled ? 1 : 0);
         dest.writeInt(mDeviceInfo);
         dest.writeInt(mCtrlPort);
         dest.writeInt(mMaxThroughput);
     }
 
     private void readFromParcel(Parcel in) {
-        mWfdEnabled = (in.readInt() == 1);
+        mEnabled = (in.readInt() == 1);
         mDeviceInfo = in.readInt();
         mCtrlPort = in.readInt();
         mMaxThroughput = in.readInt();
diff --git a/wifi/java/android/net/wifi/wificond/ChannelSettings.java b/wifi/java/android/net/wifi/wificond/ChannelSettings.java
deleted file mode 100644
index c2d65b5..0000000
--- a/wifi/java/android/net/wifi/wificond/ChannelSettings.java
+++ /dev/null
@@ -1,95 +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 android.net.wifi.wificond;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.Log;
-
-import java.util.Objects;
-
-/**
- * ChannelSettings for wificond
- *
- * @hide
- */
-public class ChannelSettings implements Parcelable {
-    private static final String TAG = "ChannelSettings";
-
-    public int frequency;
-
-    /** public constructor */
-    public ChannelSettings() { }
-
-    /** override comparator */
-    @Override
-    public boolean equals(Object rhs) {
-        if (this == rhs) return true;
-        if (!(rhs instanceof ChannelSettings)) {
-            return false;
-        }
-        ChannelSettings channel = (ChannelSettings) rhs;
-        if (channel == null) {
-            return false;
-        }
-        return frequency == channel.frequency;
-    }
-
-    /** override hash code */
-    @Override
-    public int hashCode() {
-        return Objects.hash(frequency);
-    }
-
-    /** implement Parcelable interface */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    /**
-     * implement Parcelable interface
-     * |flags| is ignored.
-     **/
-    @Override
-    public void writeToParcel(Parcel out, int flags) {
-        out.writeInt(frequency);
-    }
-
-    /** implement Parcelable interface */
-    public static final Parcelable.Creator<ChannelSettings> CREATOR =
-            new Parcelable.Creator<ChannelSettings>() {
-        /**
-         * Caller is responsible for providing a valid parcel.
-         */
-        @Override
-        public ChannelSettings createFromParcel(Parcel in) {
-            ChannelSettings result = new ChannelSettings();
-            result.frequency = in.readInt();
-            if (in.dataAvail() != 0) {
-                Log.e(TAG, "Found trailing data after parcel parsing.");
-            }
-
-            return result;
-        }
-
-        @Override
-        public ChannelSettings[] newArray(int size) {
-            return new ChannelSettings[size];
-        }
-    };
-}
diff --git a/wifi/java/android/net/wifi/wificond/DeviceWiphyCapabilities.java b/wifi/java/android/net/wifi/wificond/DeviceWiphyCapabilities.java
deleted file mode 100644
index 13ae3b3..0000000
--- a/wifi/java/android/net/wifi/wificond/DeviceWiphyCapabilities.java
+++ /dev/null
@@ -1,272 +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.net.wifi.wificond;
-
-import android.annotation.NonNull;
-import android.annotation.SystemApi;
-import android.net.wifi.ScanResult;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.Log;
-
-import java.util.Objects;
-
-/**
- * DeviceWiphyCapabilities for wificond
- *
- * @hide
- */
-@SystemApi
-public final class DeviceWiphyCapabilities implements Parcelable {
-    private static final String TAG = "DeviceWiphyCapabilities";
-
-    private boolean m80211nSupported;
-    private boolean m80211acSupported;
-    private boolean m80211axSupported;
-    private boolean mChannelWidth160MhzSupported;
-    private boolean mChannelWidth80p80MhzSupported;
-    private int mMaxNumberTxSpatialStreams;
-    private int mMaxNumberRxSpatialStreams;
-
-
-    /** public constructor */
-    public DeviceWiphyCapabilities() {
-        m80211nSupported = false;
-        m80211acSupported = false;
-        m80211axSupported = false;
-        mChannelWidth160MhzSupported = false;
-        mChannelWidth80p80MhzSupported = false;
-        mMaxNumberTxSpatialStreams = 1;
-        mMaxNumberRxSpatialStreams = 1;
-    }
-
-    /**
-     * Get the IEEE 802.11 standard support
-     *
-     * @param standard the IEEE 802.11 standard to check on its support.
-     *        valid values from {@link ScanResult}'s {@code WIFI_STANDARD_}
-     * @return {@code true} if supported, {@code false} otherwise.
-     */
-    public boolean isWifiStandardSupported(int standard) {
-        switch (standard) {
-            case ScanResult.WIFI_STANDARD_LEGACY:
-                return true;
-            case ScanResult.WIFI_STANDARD_11N:
-                return m80211nSupported;
-            case ScanResult.WIFI_STANDARD_11AC:
-                return m80211acSupported;
-            case ScanResult.WIFI_STANDARD_11AX:
-                return m80211axSupported;
-            default:
-                Log.e(TAG, "isWifiStandardSupported called with invalid standard: " + standard);
-                return false;
-        }
-    }
-
-    /**
-     * Set the IEEE 802.11 standard support
-     *
-     * @param standard the IEEE 802.11 standard to set its support.
-     *        valid values from {@link ScanResult}'s {@code WIFI_STANDARD_}
-     * @param support {@code true} if supported, {@code false} otherwise.
-     */
-    public void setWifiStandardSupport(int standard, boolean support) {
-        switch (standard) {
-            case ScanResult.WIFI_STANDARD_11N:
-                m80211nSupported = support;
-                break;
-            case ScanResult.WIFI_STANDARD_11AC:
-                m80211acSupported = support;
-                break;
-            case ScanResult.WIFI_STANDARD_11AX:
-                m80211axSupported = support;
-                break;
-            default:
-                Log.e(TAG, "setWifiStandardSupport called with invalid standard: " + standard);
-        }
-    }
-
-    /**
-     * Get the support for channel bandwidth
-     *
-     * @param chWidth valid values from {@link ScanResult}'s {@code CHANNEL_WIDTH_}
-     *
-     * @return {@code true} if supported, {@code false} otherwise.
-     */
-    public boolean isChannelWidthSupported(int chWidth) {
-        switch (chWidth) {
-            case ScanResult.CHANNEL_WIDTH_20MHZ:
-                return true;
-            case ScanResult.CHANNEL_WIDTH_40MHZ:
-                return (m80211nSupported || m80211acSupported || m80211axSupported);
-            case ScanResult.CHANNEL_WIDTH_80MHZ:
-                return (m80211acSupported || m80211axSupported);
-            case ScanResult.CHANNEL_WIDTH_160MHZ:
-                return mChannelWidth160MhzSupported;
-            case ScanResult.CHANNEL_WIDTH_80MHZ_PLUS_MHZ:
-                return mChannelWidth80p80MhzSupported;
-            default:
-                Log.e(TAG, "isChannelWidthSupported called with invalid channel width: " + chWidth);
-        }
-        return false;
-    }
-
-    /**
-     * Set support for channel bandwidth
-     *
-     * @param chWidth valid values are {@link ScanResult#CHANNEL_WIDTH_160MHZ} and
-     *        {@link ScanResult#CHANNEL_WIDTH_80MHZ_PLUS_MHZ}
-     * @param support {@code true} if supported, {@code false} otherwise.
-     */
-    public void setChannelWidthSupported(int chWidth, boolean support) {
-        switch (chWidth) {
-            case ScanResult.CHANNEL_WIDTH_160MHZ:
-                mChannelWidth160MhzSupported = support;
-                break;
-            case ScanResult.CHANNEL_WIDTH_80MHZ_PLUS_MHZ:
-                mChannelWidth80p80MhzSupported = support;
-                break;
-            default:
-                Log.e(TAG, "setChannelWidthSupported called with Invalid channel width: "
-                        + chWidth);
-        }
-    }
-
-    /**
-     * Get maximum number of transmit spatial streams
-     *
-     * @return number of spatial streams
-     */
-    public int getMaxNumberTxSpatialStreams() {
-        return mMaxNumberTxSpatialStreams;
-    }
-
-    /**
-     * Set maximum number of transmit spatial streams
-     *
-     * @param streams number of spatial streams
-     */
-    public void setMaxNumberTxSpatialStreams(int streams) {
-        mMaxNumberTxSpatialStreams = streams;
-    }
-
-    /**
-     * Get maximum number of receive spatial streams
-     *
-     * @return number of streams
-     */
-    public int getMaxNumberRxSpatialStreams() {
-        return mMaxNumberRxSpatialStreams;
-    }
-
-    /**
-     * Set maximum number of receive spatial streams
-     *
-     * @param streams number of streams
-     */
-    public void setMaxNumberRxSpatialStreams(int streams) {
-        mMaxNumberRxSpatialStreams = streams;
-    }
-
-    /** override comparator */
-    @Override
-    public boolean equals(Object rhs) {
-        if (this == rhs) return true;
-        if (!(rhs instanceof DeviceWiphyCapabilities)) {
-            return false;
-        }
-        DeviceWiphyCapabilities capa = (DeviceWiphyCapabilities) rhs;
-
-        return m80211nSupported == capa.m80211nSupported
-                && m80211acSupported == capa.m80211acSupported
-                && m80211axSupported == capa.m80211axSupported
-                && mChannelWidth160MhzSupported == capa.mChannelWidth160MhzSupported
-                && mChannelWidth80p80MhzSupported == capa.mChannelWidth80p80MhzSupported
-                && mMaxNumberTxSpatialStreams == capa.mMaxNumberTxSpatialStreams
-                && mMaxNumberRxSpatialStreams == capa.mMaxNumberRxSpatialStreams;
-    }
-
-    /** override hash code */
-    @Override
-    public int hashCode() {
-        return Objects.hash(m80211nSupported, m80211acSupported, m80211axSupported,
-                mChannelWidth160MhzSupported, mChannelWidth80p80MhzSupported,
-                mMaxNumberTxSpatialStreams, mMaxNumberRxSpatialStreams);
-    }
-
-    /** implement Parcelable interface */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    /**
-     * implement Parcelable interface
-     * |flags| is ignored.
-     */
-    @Override
-    public void writeToParcel(@NonNull Parcel out, int flags) {
-        out.writeBoolean(m80211nSupported);
-        out.writeBoolean(m80211acSupported);
-        out.writeBoolean(m80211axSupported);
-        out.writeBoolean(mChannelWidth160MhzSupported);
-        out.writeBoolean(mChannelWidth80p80MhzSupported);
-        out.writeInt(mMaxNumberTxSpatialStreams);
-        out.writeInt(mMaxNumberRxSpatialStreams);
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("m80211nSupported:").append(m80211nSupported ? "Yes" : "No");
-        sb.append("m80211acSupported:").append(m80211acSupported ? "Yes" : "No");
-        sb.append("m80211axSupported:").append(m80211axSupported ? "Yes" : "No");
-        sb.append("mChannelWidth160MhzSupported: ")
-                .append(mChannelWidth160MhzSupported ? "Yes" : "No");
-        sb.append("mChannelWidth80p80MhzSupported: ")
-                .append(mChannelWidth80p80MhzSupported ? "Yes" : "No");
-        sb.append("mMaxNumberTxSpatialStreams: ").append(mMaxNumberTxSpatialStreams);
-        sb.append("mMaxNumberRxSpatialStreams: ").append(mMaxNumberRxSpatialStreams);
-
-        return sb.toString();
-    }
-
-    /** implement Parcelable interface */
-    public static final @NonNull Parcelable.Creator<DeviceWiphyCapabilities> CREATOR =
-            new Parcelable.Creator<DeviceWiphyCapabilities>() {
-        /**
-         * Caller is responsible for providing a valid parcel.
-         */
-        @Override
-        public DeviceWiphyCapabilities createFromParcel(Parcel in) {
-            DeviceWiphyCapabilities capabilities = new DeviceWiphyCapabilities();
-            capabilities.m80211nSupported = in.readBoolean();
-            capabilities.m80211acSupported = in.readBoolean();
-            capabilities.m80211axSupported = in.readBoolean();
-            capabilities.mChannelWidth160MhzSupported = in.readBoolean();
-            capabilities.mChannelWidth80p80MhzSupported = in.readBoolean();
-            capabilities.mMaxNumberTxSpatialStreams = in.readInt();
-            capabilities.mMaxNumberRxSpatialStreams = in.readInt();
-            return capabilities;
-        }
-
-        @Override
-        public DeviceWiphyCapabilities[] newArray(int size) {
-            return new DeviceWiphyCapabilities[size];
-        }
-    };
-}
diff --git a/wifi/java/android/net/wifi/wificond/HiddenNetwork.java b/wifi/java/android/net/wifi/wificond/HiddenNetwork.java
deleted file mode 100644
index 38dacea..0000000
--- a/wifi/java/android/net/wifi/wificond/HiddenNetwork.java
+++ /dev/null
@@ -1,87 +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 android.net.wifi.wificond;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.util.Arrays;
-
-/**
- * HiddenNetwork for wificond
- *
- * @hide
- */
-public class HiddenNetwork implements Parcelable {
-    private static final String TAG = "HiddenNetwork";
-
-    public byte[] ssid;
-
-    /** public constructor */
-    public HiddenNetwork() { }
-
-    /** override comparator */
-    @Override
-    public boolean equals(Object rhs) {
-        if (this == rhs) return true;
-        if (!(rhs instanceof HiddenNetwork)) {
-            return false;
-        }
-        HiddenNetwork network = (HiddenNetwork) rhs;
-        return Arrays.equals(ssid, network.ssid);
-    }
-
-    /** override hash code */
-    @Override
-    public int hashCode() {
-        return Arrays.hashCode(ssid);
-    }
-
-    /** implement Parcelable interface */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    /**
-     * implement Parcelable interface
-     * |flags| is ignored.
-     */
-    @Override
-    public void writeToParcel(Parcel out, int flags) {
-        out.writeByteArray(ssid);
-    }
-
-    /** implement Parcelable interface */
-    public static final Parcelable.Creator<HiddenNetwork> CREATOR =
-            new Parcelable.Creator<HiddenNetwork>() {
-        /**
-         * Caller is responsible for providing a valid parcel.
-         */
-        @Override
-        public HiddenNetwork createFromParcel(Parcel in) {
-            HiddenNetwork result = new HiddenNetwork();
-            result.ssid = in.createByteArray();
-            return result;
-        }
-
-        @Override
-        public HiddenNetwork[] newArray(int size) {
-            return new HiddenNetwork[size];
-        }
-    };
-}
diff --git a/wifi/java/android/net/wifi/wificond/NativeScanResult.java b/wifi/java/android/net/wifi/wificond/NativeScanResult.java
deleted file mode 100644
index 7cc617d..0000000
--- a/wifi/java/android/net/wifi/wificond/NativeScanResult.java
+++ /dev/null
@@ -1,226 +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 android.net.wifi.wificond;
-
-import android.annotation.NonNull;
-import android.annotation.SystemApi;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Raw scan result data from the wificond daemon.
- *
- * @hide
- */
-@SystemApi
-public final class NativeScanResult implements Parcelable {
-    /** @hide */
-    @VisibleForTesting
-    public byte[] ssid;
-    /** @hide */
-    @VisibleForTesting
-    public byte[] bssid;
-    /** @hide */
-    @VisibleForTesting
-    public byte[] infoElement;
-    /** @hide */
-    @VisibleForTesting
-    public int frequency;
-    /** @hide */
-    @VisibleForTesting
-    public int signalMbm;
-    /** @hide */
-    @VisibleForTesting
-    public long tsf;
-    /** @hide */
-    @VisibleForTesting
-    public int capability;
-    /** @hide */
-    @VisibleForTesting
-    public boolean associated;
-    /** @hide */
-    @VisibleForTesting
-    public List<RadioChainInfo> radioChainInfos;
-
-    /**
-     * Returns the SSID raw byte array of the AP represented by this scan result.
-     *
-     * @return A byte array.
-     */
-    @NonNull public byte[] getSsid() {
-        return ssid;
-    }
-
-    /**
-     * Returns raw bytes representing the MAC address (BSSID) of the AP represented by this scan
-     * result.
-     *
-     * @return a byte array, possibly null or containing the incorrect number of bytes for a MAC
-     * address.
-     */
-    @NonNull public byte[] getBssid() {
-        return bssid;
-    }
-
-    /**
-     * Returns the raw bytes of the information element advertised by the AP represented by this
-     * scan result.
-     *
-     * @return A byte array, possibly null or containing an invalid TLV configuration.
-     */
-    @NonNull public byte[] getInformationElements() {
-        return infoElement;
-    }
-
-    /**
-     * Returns the frequency (in MHz) on which the AP represented by this scan result was observed.
-     *
-     * @return The frequency in MHz.
-     */
-    public int getFrequencyMhz() {
-        return frequency;
-    }
-
-    /**
-     * Return the signal strength of probe response/beacon in (100 * dBm).
-     *
-     * @return Signal strenght in (100 * dBm).
-     */
-    public int getSignalMbm() {
-        return signalMbm;
-    }
-
-    /**
-     * Return the TSF (Timing Synchronization Function) of the received probe response/beacon.
-     * @return
-     */
-    public long getTsf() {
-        return tsf;
-    }
-
-    /**
-     * Return a boolean indicating whether or not we're associated to the AP represented by this
-     * scan result.
-     *
-     * @return A boolean indicating association.
-     */
-    public boolean isAssociated() {
-        return associated;
-    }
-
-    /**
-     *  Returns the capabilities of the AP repseresented by this scan result as advertised in the
-     *  received probe response or beacon.
-     *
-     *  This is a bit mask describing the capabilities of a BSS. See IEEE Std 802.11: 9.4.1.4:
-     *    Bit 0 - ESS
-     *    Bit 1 - IBSS
-     *    Bit 2 - CF Pollable
-     *    Bit 3 - CF-Poll Request
-     *    Bit 4 - Privacy
-     *    Bit 5 - Short Preamble
-     *    Bit 6 - PBCC
-     *    Bit 7 - Channel Agility
-     *    Bit 8 - Spectrum Management
-     *    Bit 9 - QoS
-     *    Bit 10 - Short Slot Time
-     *    Bit 11 - APSD
-     *    Bit 12 - Radio Measurement
-     *    Bit 13 - DSSS-OFDM
-     *    Bit 14 - Delayed Block Ack
-     *    Bit 15 - Immediate Block Ack
-     *
-     * @return a bit mask of capabilities.
-     */
-    @NonNull public int getCapabilities() {
-        return capability;
-    }
-
-    /**
-     * Returns details of the signal received on each radio chain for the AP represented by this
-     * scan result in a list of {@link RadioChainInfo} elements.
-     *
-     * @return A list of {@link RadioChainInfo} - possibly empty in case of error.
-     */
-    @NonNull public List<RadioChainInfo> getRadioChainInfos() {
-        return radioChainInfos;
-    }
-
-    /**
-     * Construct an empty native scan result.
-     */
-    public NativeScanResult() { }
-
-    /** implement Parcelable interface */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    /** implement Parcelable interface */
-    @Override
-    public void writeToParcel(@NonNull Parcel out, int flags) {
-        out.writeByteArray(ssid);
-        out.writeByteArray(bssid);
-        out.writeByteArray(infoElement);
-        out.writeInt(frequency);
-        out.writeInt(signalMbm);
-        out.writeLong(tsf);
-        out.writeInt(capability);
-        out.writeInt(associated ? 1 : 0);
-        out.writeTypedList(radioChainInfos);
-    }
-
-    /** implement Parcelable interface */
-    @NonNull public static final Parcelable.Creator<NativeScanResult> CREATOR =
-            new Parcelable.Creator<NativeScanResult>() {
-        @Override
-        public NativeScanResult createFromParcel(Parcel in) {
-            NativeScanResult result = new NativeScanResult();
-            result.ssid = in.createByteArray();
-            if (result.ssid == null) {
-                result.ssid = new byte[0];
-            }
-            result.bssid = in.createByteArray();
-            if (result.bssid == null) {
-                result.bssid = new byte[0];
-            }
-            result.infoElement = in.createByteArray();
-            if (result.infoElement == null) {
-                result.infoElement = new byte[0];
-            }
-            result.frequency = in.readInt();
-            result.signalMbm = in.readInt();
-            result.tsf = in.readLong();
-            result.capability = in.readInt();
-            result.associated = (in.readInt() != 0);
-            result.radioChainInfos = new ArrayList<>();
-            in.readTypedList(result.radioChainInfos, RadioChainInfo.CREATOR);
-            return result;
-        }
-
-        @Override
-        public NativeScanResult[] newArray(int size) {
-            return new NativeScanResult[size];
-        }
-    };
-}
diff --git a/wifi/java/android/net/wifi/wificond/NativeWifiClient.java b/wifi/java/android/net/wifi/wificond/NativeWifiClient.java
deleted file mode 100644
index 916c115..0000000
--- a/wifi/java/android/net/wifi/wificond/NativeWifiClient.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 android.net.wifi.wificond;
-
-import android.annotation.NonNull;
-import android.annotation.SystemApi;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.util.Arrays;
-
-/**
- * Structure providing information about clients (STAs) associated with a SoftAp.
- *
- * @hide
- */
-@SystemApi
-public final class NativeWifiClient implements Parcelable {
-    /**
-     * The raw bytes of the MAC address of the client (STA) represented by this object.
-     */
-    @NonNull public final byte[] macAddress;
-
-    /**
-     * Construct a native Wi-Fi client.
-     */
-    public NativeWifiClient(@NonNull byte[] macAddress) {
-        this.macAddress = macAddress;
-    }
-
-    /** override comparator */
-    @Override
-    public boolean equals(Object rhs) {
-        if (this == rhs) return true;
-        if (!(rhs instanceof NativeWifiClient)) {
-            return false;
-        }
-        NativeWifiClient other = (NativeWifiClient) rhs;
-        return Arrays.equals(macAddress, other.macAddress);
-    }
-
-    /** override hash code */
-    @Override
-    public int hashCode() {
-        return Arrays.hashCode(macAddress);
-    }
-
-    /** implement Parcelable interface */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    /**
-     * implement Parcelable interface
-     * |flag| is ignored.
-     */
-    @Override
-    public void writeToParcel(@NonNull Parcel out, int flags) {
-        out.writeByteArray(macAddress);
-    }
-
-    /** implement Parcelable interface */
-    @NonNull public static final Parcelable.Creator<NativeWifiClient> CREATOR =
-            new Parcelable.Creator<NativeWifiClient>() {
-                @Override
-                public NativeWifiClient createFromParcel(Parcel in) {
-                    byte[] macAddress = in.createByteArray();
-                    if (macAddress == null) {
-                        macAddress = new byte[0];
-                    }
-                    return new NativeWifiClient(macAddress);
-                }
-
-                @Override
-                public NativeWifiClient[] newArray(int size) {
-                    return new NativeWifiClient[size];
-                }
-            };
-}
diff --git a/wifi/java/android/net/wifi/wificond/PnoNetwork.java b/wifi/java/android/net/wifi/wificond/PnoNetwork.java
deleted file mode 100644
index ca0b1cf..0000000
--- a/wifi/java/android/net/wifi/wificond/PnoNetwork.java
+++ /dev/null
@@ -1,171 +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 android.net.wifi.wificond;
-
-import android.annotation.NonNull;
-import android.annotation.SystemApi;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.util.Arrays;
-import java.util.Objects;
-
-/**
- * Configuration for a PNO (preferred network offload) network used in {@link PnoSettings}. A PNO
- * network allows configuration of a specific network to search for.
- *
- * @hide
- */
-@SystemApi
-public final class PnoNetwork implements Parcelable {
-    private boolean mIsHidden;
-    private byte[] mSsid;
-    private int[] mFrequencies;
-
-    /**
-     * Indicates whether the PNO network configuration is for a hidden SSID - i.e. a network which
-     * does not broadcast its SSID and must be queried explicitly.
-     *
-     * @return True if the configuration is for a hidden network, false otherwise.
-     */
-    public boolean isHidden() {
-        return mIsHidden;
-    }
-
-    /**
-     * Configure whether the PNO network configuration is for a hidden SSID - i.e. a network which
-     * does not broadcast its SSID and must be queried explicitly.
-     *
-     * @param isHidden True if the configuration is for a hidden network, false otherwise.
-     */
-    public void setHidden(boolean isHidden) {
-        mIsHidden = isHidden;
-    }
-
-    /**
-     * Get the raw bytes for the SSID of the PNO network being scanned for.
-     *
-     * @return A byte array.
-     */
-    @NonNull public byte[] getSsid() {
-        return mSsid;
-    }
-
-    /**
-     * Set the raw bytes for the SSID of the PNO network being scanned for.
-     *
-     * @param ssid A byte array.
-     */
-    public void setSsid(@NonNull byte[] ssid) {
-        if (ssid == null) {
-            throw new IllegalArgumentException("null argument");
-        }
-        this.mSsid = ssid;
-    }
-
-    /**
-     * Get the frequencies (in MHz) on which to PNO scan for the current network is being searched
-     * for. A null return (i.e. no frequencies configured) indicates that the network is search for
-     * on all supported frequencies.
-     *
-     * @return A array of frequencies (in MHz), a null indicates no configured frequencies.
-     */
-    @NonNull public int[] getFrequenciesMhz() {
-        return mFrequencies;
-    }
-
-    /**
-     * Set the frequencies (in MHz) on which to PNO scan for the current network is being searched
-     * for. A null configuration (i.e. no frequencies configured) indicates that the network is
-     * search for on all supported frequencies.
-     *
-     * @param frequenciesMhz an array of frequencies (in MHz), null indicating no configured
-     *                       frequencies.
-     */
-    public void setFrequenciesMhz(@NonNull int[] frequenciesMhz) {
-        if (frequenciesMhz == null) {
-            throw new IllegalArgumentException("null argument");
-        }
-        this.mFrequencies = frequenciesMhz;
-    }
-
-    /** Construct an uninitialized PnoNetwork object */
-    public PnoNetwork() { }
-
-    /** override comparator */
-    @Override
-    public boolean equals(Object rhs) {
-        if (this == rhs) return true;
-        if (!(rhs instanceof PnoNetwork)) {
-            return false;
-        }
-        PnoNetwork network = (PnoNetwork) rhs;
-        return Arrays.equals(mSsid, network.mSsid)
-                && Arrays.equals(mFrequencies, network.mFrequencies)
-                && mIsHidden == network.mIsHidden;
-    }
-
-    /** override hash code */
-    @Override
-    public int hashCode() {
-        return Objects.hash(
-                mIsHidden,
-                Arrays.hashCode(mSsid),
-                Arrays.hashCode(mFrequencies));
-    }
-
-    /** implement Parcelable interface */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    /**
-     * implement Parcelable interface
-     * |flag| is ignored.
-     */
-    @Override
-    public void writeToParcel(@NonNull Parcel out, int flags) {
-        out.writeInt(mIsHidden ? 1 : 0);
-        out.writeByteArray(mSsid);
-        out.writeIntArray(mFrequencies);
-    }
-
-    /** implement Parcelable interface */
-    @NonNull public static final Parcelable.Creator<PnoNetwork> CREATOR =
-            new Parcelable.Creator<PnoNetwork>() {
-        @Override
-        public PnoNetwork createFromParcel(Parcel in) {
-            PnoNetwork result = new PnoNetwork();
-            result.mIsHidden = in.readInt() != 0 ? true : false;
-            result.mSsid = in.createByteArray();
-            if (result.mSsid == null) {
-                result.mSsid = new byte[0];
-            }
-            result.mFrequencies = in.createIntArray();
-            if (result.mFrequencies == null) {
-                result.mFrequencies = new int[0];
-            }
-            return result;
-        }
-
-        @Override
-        public PnoNetwork[] newArray(int size) {
-            return new PnoNetwork[size];
-        }
-    };
-}
diff --git a/wifi/java/android/net/wifi/wificond/PnoSettings.java b/wifi/java/android/net/wifi/wificond/PnoSettings.java
deleted file mode 100644
index 533d37d..0000000
--- a/wifi/java/android/net/wifi/wificond/PnoSettings.java
+++ /dev/null
@@ -1,209 +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 android.net.wifi.wificond;
-
-import android.annotation.DurationMillisLong;
-import android.annotation.NonNull;
-import android.annotation.SystemApi;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * Configuration for a PNO (preferred network offload). A mechanism by which scans are offloaded
- * from the host device to the Wi-Fi chip.
- *
- * @hide
- */
-@SystemApi
-public final class PnoSettings implements Parcelable {
-    private long mIntervalMs;
-    private int mMin2gRssi;
-    private int mMin5gRssi;
-    private int mMin6gRssi;
-    private List<PnoNetwork> mPnoNetworks;
-
-    /** Construct an uninitialized PnoSettings object */
-    public PnoSettings() { }
-
-    /**
-     * Get the requested PNO scan interval in milliseconds.
-     *
-     * @return An interval in milliseconds.
-     */
-    public @DurationMillisLong long getIntervalMillis() {
-        return mIntervalMs;
-    }
-
-    /**
-     * Set the requested PNO scan interval in milliseconds.
-     *
-     * @param intervalMillis An interval in milliseconds.
-     */
-    public void setIntervalMillis(@DurationMillisLong long intervalMillis) {
-        this.mIntervalMs = intervalMillis;
-    }
-
-    /**
-     * Get the requested minimum RSSI threshold (in dBm) for APs to report in scan results in the
-     * 2.4GHz band.
-     *
-     * @return An RSSI value in dBm.
-     */
-    public int getMin2gRssiDbm() {
-        return mMin2gRssi;
-    }
-
-    /**
-     * Set the requested minimum RSSI threshold (in dBm) for APs to report in scan scan results in
-     * the 2.4GHz band.
-     *
-     * @param min2gRssiDbm An RSSI value in dBm.
-     */
-    public void setMin2gRssiDbm(int min2gRssiDbm) {
-        this.mMin2gRssi = min2gRssiDbm;
-    }
-
-    /**
-     * Get the requested minimum RSSI threshold (in dBm) for APs to report in scan results in the
-     * 5GHz band.
-     *
-     * @return An RSSI value in dBm.
-     */
-    public int getMin5gRssiDbm() {
-        return mMin5gRssi;
-    }
-
-    /**
-     * Set the requested minimum RSSI threshold (in dBm) for APs to report in scan scan results in
-     * the 5GHz band.
-     *
-     * @param min5gRssiDbm An RSSI value in dBm.
-     */
-    public void setMin5gRssiDbm(int min5gRssiDbm) {
-        this.mMin5gRssi = min5gRssiDbm;
-    }
-
-    /**
-     * Get the requested minimum RSSI threshold (in dBm) for APs to report in scan results in the
-     * 6GHz band.
-     *
-     * @return An RSSI value in dBm.
-     */
-    public int getMin6gRssiDbm() {
-        return mMin6gRssi;
-    }
-
-    /**
-     * Set the requested minimum RSSI threshold (in dBm) for APs to report in scan scan results in
-     * the 6GHz band.
-     *
-     * @param min6gRssiDbm An RSSI value in dBm.
-     */
-    public void setMin6gRssiDbm(int min6gRssiDbm) {
-        this.mMin6gRssi = min6gRssiDbm;
-    }
-
-    /**
-     * Return the configured list of specific networks to search for in a PNO scan.
-     *
-     * @return A list of {@link PnoNetwork} objects, possibly empty if non configured.
-     */
-    @NonNull public List<PnoNetwork> getPnoNetworks() {
-        return mPnoNetworks;
-    }
-
-    /**
-     * Set the list of specified networks to scan for in a PNO scan. The networks (APs) are
-     * specified using {@link PnoNetwork}s. An empty list indicates that all networks are scanned
-     * for.
-     *
-     * @param pnoNetworks A (possibly empty) list of {@link PnoNetwork} objects.
-     */
-    public void setPnoNetworks(@NonNull List<PnoNetwork> pnoNetworks) {
-        this.mPnoNetworks = pnoNetworks;
-    }
-
-    /** override comparator */
-    @Override
-    public boolean equals(Object rhs) {
-        if (this == rhs) return true;
-        if (!(rhs instanceof PnoSettings)) {
-            return false;
-        }
-        PnoSettings settings = (PnoSettings) rhs;
-        if (settings == null) {
-            return false;
-        }
-        return mIntervalMs == settings.mIntervalMs
-                && mMin2gRssi == settings.mMin2gRssi
-                && mMin5gRssi == settings.mMin5gRssi
-                && mMin6gRssi == settings.mMin6gRssi
-                && mPnoNetworks.equals(settings.mPnoNetworks);
-    }
-
-    /** override hash code */
-    @Override
-    public int hashCode() {
-        return Objects.hash(mIntervalMs, mMin2gRssi, mMin5gRssi, mMin6gRssi, mPnoNetworks);
-    }
-
-    /** implement Parcelable interface */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    /**
-     * implement Parcelable interface
-     * |flag| is ignored.
-     **/
-    @Override
-    public void writeToParcel(@NonNull Parcel out, int flags) {
-        out.writeLong(mIntervalMs);
-        out.writeInt(mMin2gRssi);
-        out.writeInt(mMin5gRssi);
-        out.writeInt(mMin6gRssi);
-        out.writeTypedList(mPnoNetworks);
-    }
-
-    /** implement Parcelable interface */
-    @NonNull public static final Parcelable.Creator<PnoSettings> CREATOR =
-            new Parcelable.Creator<PnoSettings>() {
-        @Override
-        public PnoSettings createFromParcel(Parcel in) {
-            PnoSettings result = new PnoSettings();
-            result.mIntervalMs = in.readLong();
-            result.mMin2gRssi = in.readInt();
-            result.mMin5gRssi = in.readInt();
-            result.mMin6gRssi = in.readInt();
-
-            result.mPnoNetworks = new ArrayList<>();
-            in.readTypedList(result.mPnoNetworks, PnoNetwork.CREATOR);
-
-            return result;
-        }
-
-        @Override
-        public PnoSettings[] newArray(int size) {
-            return new PnoSettings[size];
-        }
-    };
-}
diff --git a/wifi/java/android/net/wifi/wificond/RadioChainInfo.java b/wifi/java/android/net/wifi/wificond/RadioChainInfo.java
deleted file mode 100644
index 97c0ee9..0000000
--- a/wifi/java/android/net/wifi/wificond/RadioChainInfo.java
+++ /dev/null
@@ -1,125 +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 android.net.wifi.wificond;
-
-import android.annotation.NonNull;
-import android.annotation.SystemApi;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.util.Objects;
-
-/**
- * A class representing the radio chains of the Wi-Fi modems. Use to provide raw information about
- * signals received on different radio chains.
- *
- * @hide
- */
-@SystemApi
-public final class RadioChainInfo implements Parcelable {
-    private static final String TAG = "RadioChainInfo";
-
-    /** @hide */
-    @VisibleForTesting
-    public int chainId;
-    /** @hide */
-    @VisibleForTesting
-    public int level;
-
-    /**
-     * Return an identifier for this radio chain. This is an arbitrary ID which is consistent for
-     * the same device.
-     *
-     * @return The radio chain ID.
-     */
-    public int getChainId() {
-        return chainId;
-    }
-
-    /**
-     * Returns the detected signal level on this radio chain in dBm (aka RSSI).
-     *
-     * @return A signal level in dBm.
-     */
-    public int getLevelDbm() {
-        return level;
-    }
-
-    /**
-     * Construct a RadioChainInfo.
-     */
-    public RadioChainInfo(int chainId, int level) {
-        this.chainId = chainId;
-        this.level = level;
-    }
-
-    /** override comparator */
-    @Override
-    public boolean equals(Object rhs) {
-        if (this == rhs) return true;
-        if (!(rhs instanceof RadioChainInfo)) {
-            return false;
-        }
-        RadioChainInfo chainInfo = (RadioChainInfo) rhs;
-        if (chainInfo == null) {
-            return false;
-        }
-        return chainId == chainInfo.chainId && level == chainInfo.level;
-    }
-
-    /** override hash code */
-    @Override
-    public int hashCode() {
-        return Objects.hash(chainId, level);
-    }
-
-
-    /** implement Parcelable interface */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    /**
-     * implement Parcelable interface
-     * |flags| is ignored.
-     */
-    @Override
-    public void writeToParcel(@NonNull Parcel out, int flags) {
-        out.writeInt(chainId);
-        out.writeInt(level);
-    }
-
-    /** implement Parcelable interface */
-    @NonNull public static final Parcelable.Creator<RadioChainInfo> CREATOR =
-            new Parcelable.Creator<RadioChainInfo>() {
-        /**
-         * Caller is responsible for providing a valid parcel.
-         */
-        @Override
-        public RadioChainInfo createFromParcel(Parcel in) {
-            return new RadioChainInfo(in.readInt(), in.readInt());
-        }
-
-        @Override
-        public RadioChainInfo[] newArray(int size) {
-            return new RadioChainInfo[size];
-        }
-    };
-}
diff --git a/wifi/java/android/net/wifi/wificond/SingleScanSettings.java b/wifi/java/android/net/wifi/wificond/SingleScanSettings.java
deleted file mode 100644
index 8c341b8..0000000
--- a/wifi/java/android/net/wifi/wificond/SingleScanSettings.java
+++ /dev/null
@@ -1,118 +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 android.net.wifi.wificond;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.Objects;
-
-/**
- * SingleScanSettings for wificond
- *
- * @hide
- */
-public class SingleScanSettings implements Parcelable {
-    private static final String TAG = "SingleScanSettings";
-
-    public int scanType;
-    public ArrayList<ChannelSettings> channelSettings;
-    public ArrayList<HiddenNetwork> hiddenNetworks;
-
-    /** public constructor */
-    public SingleScanSettings() { }
-
-    /** override comparator */
-    @Override
-    public boolean equals(Object rhs) {
-        if (this == rhs) return true;
-        if (!(rhs instanceof SingleScanSettings)) {
-            return false;
-        }
-        SingleScanSettings settings = (SingleScanSettings) rhs;
-        if (settings == null) {
-            return false;
-        }
-        return scanType == settings.scanType
-                && channelSettings.equals(settings.channelSettings)
-                && hiddenNetworks.equals(settings.hiddenNetworks);
-    }
-
-    /** override hash code */
-    @Override
-    public int hashCode() {
-        return Objects.hash(scanType, channelSettings, hiddenNetworks);
-    }
-
-
-    /** implement Parcelable interface */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    private static boolean isValidScanType(int scanType) {
-        return scanType == IWifiScannerImpl.SCAN_TYPE_LOW_SPAN
-                || scanType == IWifiScannerImpl.SCAN_TYPE_LOW_POWER
-                || scanType == IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
-    }
-
-    /**
-     * implement Parcelable interface
-     * |flags| is ignored.
-     */
-    @Override
-    public void writeToParcel(Parcel out, int flags) {
-        if (!isValidScanType(scanType)) {
-            Log.wtf(TAG, "Invalid scan type " + scanType);
-        }
-        out.writeInt(scanType);
-        out.writeTypedList(channelSettings);
-        out.writeTypedList(hiddenNetworks);
-    }
-
-    /** implement Parcelable interface */
-    public static final Parcelable.Creator<SingleScanSettings> CREATOR =
-            new Parcelable.Creator<SingleScanSettings>() {
-        /**
-         * Caller is responsible for providing a valid parcel.
-         */
-        @Override
-        public SingleScanSettings createFromParcel(Parcel in) {
-            SingleScanSettings result = new SingleScanSettings();
-            result.scanType = in.readInt();
-            if (!isValidScanType(result.scanType)) {
-                Log.wtf(TAG, "Invalid scan type " + result.scanType);
-            }
-            result.channelSettings = new ArrayList<ChannelSettings>();
-            in.readTypedList(result.channelSettings, ChannelSettings.CREATOR);
-            result.hiddenNetworks = new ArrayList<HiddenNetwork>();
-            in.readTypedList(result.hiddenNetworks, HiddenNetwork.CREATOR);
-            if (in.dataAvail() != 0) {
-                Log.e(TAG, "Found trailing data after parcel parsing.");
-            }
-            return result;
-        }
-
-        @Override
-        public SingleScanSettings[] newArray(int size) {
-            return new SingleScanSettings[size];
-        }
-    };
-}
diff --git a/wifi/java/android/net/wifi/wificond/WifiCondManager.java b/wifi/java/android/net/wifi/wificond/WifiCondManager.java
deleted file mode 100644
index 7a31a5a..0000000
--- a/wifi/java/android/net/wifi/wificond/WifiCondManager.java
+++ /dev/null
@@ -1,1289 +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 android.net.wifi.wificond;
-
-import android.annotation.CallbackExecutor;
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.SystemApi;
-import android.annotation.SystemService;
-import android.app.AlarmManager;
-import android.content.Context;
-import android.net.wifi.SoftApInfo;
-import android.net.wifi.WifiAnnotations;
-import android.net.wifi.WifiScanner;
-import android.os.Binder;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.SystemClock;
-import android.util.Log;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.Executor;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.stream.Collectors;
-
-/**
- * This class encapsulates the interface the wificond (Wi-Fi Conductor) daemon presents to the
- * Wi-Fi framework. The interface is only for use by the Wi-Fi framework and access is protected
- * by SELinux permissions: only the system server and wpa_supplicant can use WifiCondManager.
- *
- * @hide
- */
-@SystemApi
-@SystemService(Context.WIFI_COND_SERVICE)
-public class WifiCondManager {
-    private static final String TAG = "WifiCondManager";
-    private boolean mVerboseLoggingEnabled = false;
-
-    /**
-     * The {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)}
-     * timeout, in milliseconds, after which
-     * {@link SendMgmtFrameCallback#onFailure(int)} will be called with reason
-     * {@link #SEND_MGMT_FRAME_ERROR_TIMEOUT}.
-     */
-    private static final int SEND_MGMT_FRAME_TIMEOUT_MS = 1000;
-
-    private static final String TIMEOUT_ALARM_TAG = TAG + " Send Management Frame Timeout";
-
-    /** @hide */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef(prefix = {"SCAN_TYPE_"},
-            value = {SCAN_TYPE_SINGLE_SCAN,
-                    SCAN_TYPE_PNO_SCAN})
-    public @interface ScanResultType {}
-
-    /**
-     * Specifies a scan type: single scan initiated by the framework. Can be used in
-     * {@link #getScanResults(String, int)} to specify the type of scan result to fetch.
-     */
-    public static final int SCAN_TYPE_SINGLE_SCAN = 0;
-
-    /**
-     * Specifies a scan type: PNO scan. Can be used in {@link #getScanResults(String, int)} to
-     * specify the type of scan result to fetch.
-     */
-    public static final int SCAN_TYPE_PNO_SCAN = 1;
-
-    private AlarmManager mAlarmManager;
-    private Handler mEventHandler;
-
-    // Cached wificond binder handlers.
-    private IWificond mWificond;
-    private HashMap<String, IClientInterface> mClientInterfaces = new HashMap<>();
-    private HashMap<String, IApInterface> mApInterfaces = new HashMap<>();
-    private HashMap<String, IWifiScannerImpl> mWificondScanners = new HashMap<>();
-    private HashMap<String, IScanEvent> mScanEventHandlers = new HashMap<>();
-    private HashMap<String, IPnoScanEvent> mPnoScanEventHandlers = new HashMap<>();
-    private HashMap<String, IApInterfaceEventCallback> mApInterfaceListeners = new HashMap<>();
-    private Runnable mDeathEventHandler;
-    /**
-     * Ensures that no more than one sendMgmtFrame operation runs concurrently.
-     */
-    private AtomicBoolean mSendMgmtFrameInProgress = new AtomicBoolean(false);
-
-    /**
-     * Interface used when waiting for scans to be completed (with results).
-     */
-    public interface ScanEventCallback {
-        /**
-         * Called when scan results are available. Scans results should then be obtained from
-         * {@link #getScanResults(String, int)}.
-         */
-        void onScanResultReady();
-
-        /**
-         * Called when a scan has failed.
-         */
-        void onScanFailed();
-    }
-
-    /**
-     * Interface for a callback to provide information about PNO scan request requested with
-     * {@link #startPnoScan(String, PnoSettings, Executor, PnoScanRequestCallback)}. Note that the
-     * callback are for the status of the request - not the scan itself. The results of the scan
-     * are returned with {@link ScanEventCallback}.
-     */
-    public interface PnoScanRequestCallback {
-        /**
-         * Called when a PNO scan request has been successfully submitted.
-         */
-        void onPnoRequestSucceeded();
-
-        /**
-         * Called when a PNO scan request fails.
-         */
-        void onPnoRequestFailed();
-    }
-
-    private class ScanEventHandler extends IScanEvent.Stub {
-        private Executor mExecutor;
-        private ScanEventCallback mCallback;
-
-        ScanEventHandler(@NonNull Executor executor, @NonNull ScanEventCallback callback) {
-            mExecutor = executor;
-            mCallback = callback;
-        }
-
-        @Override
-        public void OnScanResultReady() {
-            Log.d(TAG, "Scan result ready event");
-            Binder.clearCallingIdentity();
-            mExecutor.execute(() -> mCallback.onScanResultReady());
-        }
-
-        @Override
-        public void OnScanFailed() {
-            Log.d(TAG, "Scan failed event");
-            Binder.clearCallingIdentity();
-            mExecutor.execute(() -> mCallback.onScanFailed());
-        }
-    }
-
-    /**
-     * Result of a signal poll requested using {@link #signalPoll(String)}.
-     */
-    public static class SignalPollResult {
-        /** @hide */
-        public SignalPollResult(int currentRssiDbm, int txBitrateMbps, int rxBitrateMbps,
-                int associationFrequencyMHz) {
-            this.currentRssiDbm = currentRssiDbm;
-            this.txBitrateMbps = txBitrateMbps;
-            this.rxBitrateMbps = rxBitrateMbps;
-            this.associationFrequencyMHz = associationFrequencyMHz;
-        }
-
-        /**
-         * RSSI value in dBM.
-         */
-        public final int currentRssiDbm;
-
-        /**
-         * Transmission bit rate in Mbps.
-         */
-        public final int txBitrateMbps;
-
-        /**
-         * Last received packet bit rate in Mbps.
-         */
-        public final int rxBitrateMbps;
-
-        /**
-         * Association frequency in MHz.
-         */
-        public final int associationFrequencyMHz;
-    }
-
-    /**
-     * Transmission counters obtained using {@link #getTxPacketCounters(String)}.
-     */
-    public static class TxPacketCounters {
-        /** @hide */
-        public TxPacketCounters(int txPacketSucceeded, int txPacketFailed) {
-            this.txPacketSucceeded = txPacketSucceeded;
-            this.txPacketFailed = txPacketFailed;
-        }
-
-        /**
-         * Number of successfully transmitted packets.
-         */
-        public final int txPacketSucceeded;
-
-        /**
-         * Number of packet transmission failures.
-         */
-        public final int txPacketFailed;
-    }
-
-    /**
-     * Callbacks for SoftAp interface registered using
-     * {@link #registerApCallback(String, Executor, SoftApCallback)}.
-     */
-    public interface SoftApCallback {
-        /**
-         * Invoked when there is a fatal failure and the SoftAp is shutdown.
-         */
-        void onFailure();
-
-        /**
-         * Invoked when there is a change in the associated station (STA).
-         * @param client Information about the client whose status has changed.
-         * @param isConnected Indication as to whether the client is connected (true), or
-         *                    disconnected (false).
-         */
-        void onConnectedClientsChanged(@NonNull NativeWifiClient client, boolean isConnected);
-
-        /**
-         * Invoked when a channel switch event happens - i.e. the SoftAp is moved to a different
-         * channel. Also called on initial registration.
-         * @param frequencyMhz The new frequency of the SoftAp. A value of 0 is invalid and is an
-         *                     indication that the SoftAp is not enabled.
-         * @param bandwidth The new bandwidth of the SoftAp.
-         */
-        void onSoftApChannelSwitched(int frequencyMhz, @WifiAnnotations.Bandwidth int bandwidth);
-    }
-
-    /**
-     * Callback to notify the results of a
-     * {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)} call.
-     * Note: no callbacks will be triggered if the interface dies while sending a frame.
-     */
-    public interface SendMgmtFrameCallback {
-        /**
-         * Called when the management frame was successfully sent and ACKed by the recipient.
-         * @param elapsedTimeMs The elapsed time between when the management frame was sent and when
-         *                      the ACK was processed, in milliseconds, as measured by wificond.
-         *                      This includes the time that the send frame spent queuing before it
-         *                      was sent, any firmware retries, and the time the received ACK spent
-         *                      queuing before it was processed.
-         */
-        void onAck(int elapsedTimeMs);
-
-        /**
-         * Called when the send failed.
-         * @param reason The error code for the failure.
-         */
-        void onFailure(@SendMgmtFrameError int reason);
-    }
-
-    /** @hide */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef(prefix = {"SEND_MGMT_FRAME_ERROR_"},
-            value = {SEND_MGMT_FRAME_ERROR_UNKNOWN,
-                    SEND_MGMT_FRAME_ERROR_MCS_UNSUPPORTED,
-                    SEND_MGMT_FRAME_ERROR_NO_ACK,
-                    SEND_MGMT_FRAME_ERROR_TIMEOUT,
-                    SEND_MGMT_FRAME_ERROR_ALREADY_STARTED})
-    public @interface SendMgmtFrameError {}
-
-    // Send management frame error codes
-
-    /**
-     * Unknown error occurred during call to
-     * {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)}.
-     */
-    public static final int SEND_MGMT_FRAME_ERROR_UNKNOWN = 1;
-
-    /**
-     * Specifying the MCS rate in
-     * {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)} is not
-     * supported by this device.
-     */
-    public static final int SEND_MGMT_FRAME_ERROR_MCS_UNSUPPORTED = 2;
-
-    /**
-     * Driver reported that no ACK was received for the frame transmitted using
-     * {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)}.
-     */
-    public static final int SEND_MGMT_FRAME_ERROR_NO_ACK = 3;
-
-    /**
-     * Error code for when the driver fails to report on the status of the frame sent by
-     * {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)}
-     * after {@link #SEND_MGMT_FRAME_TIMEOUT_MS} milliseconds.
-     */
-    public static final int SEND_MGMT_FRAME_ERROR_TIMEOUT = 4;
-
-    /**
-     * An existing call to
-     * {@link #sendMgmtFrame(String, byte[], int, Executor, SendMgmtFrameCallback)}
-     * is in progress. Another frame cannot be sent until the first call completes.
-     */
-    public static final int SEND_MGMT_FRAME_ERROR_ALREADY_STARTED = 5;
-
-    /** @hide */
-    public WifiCondManager(Context context) {
-        mAlarmManager = context.getSystemService(AlarmManager.class);
-        mEventHandler = new Handler(context.getMainLooper());
-    }
-
-    /** @hide */
-    @VisibleForTesting
-    public WifiCondManager(Context context, IWificond wificond) {
-        this(context);
-        mWificond = wificond;
-    }
-
-    private class PnoScanEventHandler extends IPnoScanEvent.Stub {
-        private Executor mExecutor;
-        private ScanEventCallback mCallback;
-
-        PnoScanEventHandler(@NonNull Executor executor, @NonNull ScanEventCallback callback) {
-            mExecutor = executor;
-            mCallback = callback;
-        }
-
-        @Override
-        public void OnPnoNetworkFound() {
-            Log.d(TAG, "Pno scan result event");
-            Binder.clearCallingIdentity();
-            mExecutor.execute(() -> mCallback.onScanResultReady());
-        }
-
-        @Override
-        public void OnPnoScanFailed() {
-            Log.d(TAG, "Pno Scan failed event");
-            Binder.clearCallingIdentity();
-            mExecutor.execute(() -> mCallback.onScanFailed());
-        }
-    }
-
-    /**
-     * Listener for AP Interface events.
-     */
-    private class ApInterfaceEventCallback extends IApInterfaceEventCallback.Stub {
-        private Executor mExecutor;
-        private SoftApCallback mSoftApListener;
-
-        ApInterfaceEventCallback(Executor executor, SoftApCallback listener) {
-            mExecutor = executor;
-            mSoftApListener = listener;
-        }
-
-        @Override
-        public void onConnectedClientsChanged(NativeWifiClient client, boolean isConnected) {
-            if (mVerboseLoggingEnabled) {
-                Log.d(TAG, "onConnectedClientsChanged called with "
-                        + client.macAddress + " isConnected: " + isConnected);
-            }
-
-            Binder.clearCallingIdentity();
-            mExecutor.execute(() -> mSoftApListener.onConnectedClientsChanged(client, isConnected));
-        }
-
-        @Override
-        public void onSoftApChannelSwitched(int frequency, int bandwidth) {
-            Binder.clearCallingIdentity();
-            mExecutor.execute(() -> mSoftApListener.onSoftApChannelSwitched(frequency,
-                    toFrameworkBandwidth(bandwidth)));
-        }
-
-        private @WifiAnnotations.Bandwidth int toFrameworkBandwidth(int bandwidth) {
-            switch(bandwidth) {
-                case IApInterfaceEventCallback.BANDWIDTH_INVALID:
-                    return SoftApInfo.CHANNEL_WIDTH_INVALID;
-                case IApInterfaceEventCallback.BANDWIDTH_20_NOHT:
-                    return SoftApInfo.CHANNEL_WIDTH_20MHZ_NOHT;
-                case IApInterfaceEventCallback.BANDWIDTH_20:
-                    return SoftApInfo.CHANNEL_WIDTH_20MHZ;
-                case IApInterfaceEventCallback.BANDWIDTH_40:
-                    return SoftApInfo.CHANNEL_WIDTH_40MHZ;
-                case IApInterfaceEventCallback.BANDWIDTH_80:
-                    return SoftApInfo.CHANNEL_WIDTH_80MHZ;
-                case IApInterfaceEventCallback.BANDWIDTH_80P80:
-                    return SoftApInfo.CHANNEL_WIDTH_80MHZ_PLUS_MHZ;
-                case IApInterfaceEventCallback.BANDWIDTH_160:
-                    return SoftApInfo.CHANNEL_WIDTH_160MHZ;
-                default:
-                    return SoftApInfo.CHANNEL_WIDTH_INVALID;
-            }
-        }
-    }
-
-    /**
-     * Callback triggered by wificond.
-     */
-    private class SendMgmtFrameEvent extends ISendMgmtFrameEvent.Stub {
-        private Executor mExecutor;
-        private SendMgmtFrameCallback mCallback;
-        private AlarmManager.OnAlarmListener mTimeoutCallback;
-        /**
-         * ensures that mCallback is only called once
-         */
-        private boolean mWasCalled;
-
-        private void runIfFirstCall(Runnable r) {
-            if (mWasCalled) return;
-            mWasCalled = true;
-
-            mSendMgmtFrameInProgress.set(false);
-            r.run();
-        }
-
-        SendMgmtFrameEvent(@NonNull Executor executor, @NonNull SendMgmtFrameCallback callback) {
-            mExecutor = executor;
-            mCallback = callback;
-            // called in main thread
-            mTimeoutCallback = () -> runIfFirstCall(() -> {
-                if (mVerboseLoggingEnabled) {
-                    Log.e(TAG, "Timed out waiting for ACK");
-                }
-                Binder.clearCallingIdentity();
-                mExecutor.execute(() -> mCallback.onFailure(SEND_MGMT_FRAME_ERROR_TIMEOUT));
-            });
-            mWasCalled = false;
-
-            mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
-                    SystemClock.elapsedRealtime() + SEND_MGMT_FRAME_TIMEOUT_MS,
-                    TIMEOUT_ALARM_TAG, mTimeoutCallback, mEventHandler);
-        }
-
-        // called in binder thread
-        @Override
-        public void OnAck(int elapsedTimeMs) {
-            // post to main thread
-            mEventHandler.post(() -> runIfFirstCall(() -> {
-                mAlarmManager.cancel(mTimeoutCallback);
-                Binder.clearCallingIdentity();
-                mExecutor.execute(() -> mCallback.onAck(elapsedTimeMs));
-            }));
-        }
-
-        // called in binder thread
-        @Override
-        public void OnFailure(int reason) {
-            // post to main thread
-            mEventHandler.post(() -> runIfFirstCall(() -> {
-                mAlarmManager.cancel(mTimeoutCallback);
-                Binder.clearCallingIdentity();
-                mExecutor.execute(() -> mCallback.onFailure(reason));
-            }));
-        }
-    }
-
-    /**
-     * Called by the binder subsystem upon remote object death.
-     * Invoke all the register death handlers and clear state.
-     * @hide
-     */
-    @VisibleForTesting
-    public void binderDied() {
-        mEventHandler.post(() -> {
-            Log.e(TAG, "Wificond died!");
-            clearState();
-            // Invalidate the global wificond handle on death. Will be refreshed
-            // on the next setup call.
-            mWificond = null;
-            if (mDeathEventHandler != null) {
-                mDeathEventHandler.run();
-            }
-        });
-    }
-
-    /**
-     * Enable or disable verbose logging of the WifiCondManager module.
-     * @param enable True to enable verbose logging. False to disable verbose logging.
-     */
-    public void enableVerboseLogging(boolean enable) {
-        mVerboseLoggingEnabled = enable;
-    }
-
-    /**
-     * Register a death notification for the WifiCondManager which acts as a proxy for the
-     * wificond daemon (i.e. the death listener will be called when and if the wificond daemon
-     * dies).
-     *
-     * @param deathEventHandler A {@link Runnable} to be called whenever the wificond daemon dies.
-     */
-    public void setOnServiceDeadCallback(@NonNull Runnable deathEventHandler) {
-        if (mDeathEventHandler != null) {
-            Log.e(TAG, "Death handler already present");
-        }
-        mDeathEventHandler = deathEventHandler;
-    }
-
-    /**
-     * Helper method to retrieve the global wificond handle and register for
-     * death notifications.
-     */
-    private boolean retrieveWificondAndRegisterForDeath() {
-        if (mWificond != null) {
-            if (mVerboseLoggingEnabled) {
-                Log.d(TAG, "Wificond handle already retrieved");
-            }
-            // We already have a wificond handle.
-            return true;
-        }
-        IBinder binder = ServiceManager.getService(Context.WIFI_COND_SERVICE);
-        mWificond = IWificond.Stub.asInterface(binder);
-        if (mWificond == null) {
-            Log.e(TAG, "Failed to get reference to wificond");
-            return false;
-        }
-        try {
-            mWificond.asBinder().linkToDeath(() -> binderDied(), 0);
-        } catch (RemoteException e) {
-            Log.e(TAG, "Failed to register death notification for wificond");
-            // The remote has already died.
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Set up an interface for client (STA) mode.
-     *
-     * @param ifaceName Name of the interface to configure.
-     * @param executor The Executor on which to execute the callbacks.
-     * @param scanCallback A callback for framework initiated scans.
-     * @param pnoScanCallback A callback for PNO (offloaded) scans.
-     * @return true on success.
-     */
-    public boolean setupInterfaceForClientMode(@NonNull String ifaceName,
-            @NonNull @CallbackExecutor Executor executor,
-            @NonNull ScanEventCallback scanCallback, @NonNull ScanEventCallback pnoScanCallback) {
-        Log.d(TAG, "Setting up interface for client mode");
-        if (!retrieveWificondAndRegisterForDeath()) {
-            return false;
-        }
-
-        if (scanCallback == null || pnoScanCallback == null || executor == null) {
-            Log.e(TAG, "setupInterfaceForClientMode invoked with null callbacks");
-            return false;
-        }
-
-        IClientInterface clientInterface = null;
-        try {
-            clientInterface = mWificond.createClientInterface(ifaceName);
-        } catch (RemoteException e1) {
-            Log.e(TAG, "Failed to get IClientInterface due to remote exception");
-            return false;
-        }
-
-        if (clientInterface == null) {
-            Log.e(TAG, "Could not get IClientInterface instance from wificond");
-            return false;
-        }
-        Binder.allowBlocking(clientInterface.asBinder());
-
-        // Refresh Handlers
-        mClientInterfaces.put(ifaceName, clientInterface);
-        try {
-            IWifiScannerImpl wificondScanner = clientInterface.getWifiScannerImpl();
-            if (wificondScanner == null) {
-                Log.e(TAG, "Failed to get WificondScannerImpl");
-                return false;
-            }
-            mWificondScanners.put(ifaceName, wificondScanner);
-            Binder.allowBlocking(wificondScanner.asBinder());
-            ScanEventHandler scanEventHandler = new ScanEventHandler(executor, scanCallback);
-            mScanEventHandlers.put(ifaceName,  scanEventHandler);
-            wificondScanner.subscribeScanEvents(scanEventHandler);
-            PnoScanEventHandler pnoScanEventHandler = new PnoScanEventHandler(executor,
-                    pnoScanCallback);
-            mPnoScanEventHandlers.put(ifaceName,  pnoScanEventHandler);
-            wificondScanner.subscribePnoScanEvents(pnoScanEventHandler);
-        } catch (RemoteException e) {
-            Log.e(TAG, "Failed to refresh wificond scanner due to remote exception");
-        }
-
-        return true;
-    }
-
-    /**
-     * Tear down a specific client (STA) interface configured using
-     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}.
-     *
-     * @param ifaceName Name of the interface to tear down.
-     * @return Returns true on success, false on failure (e.g. when called before an interface was
-     * set up).
-     */
-    public boolean tearDownClientInterface(@NonNull String ifaceName) {
-        if (getClientInterface(ifaceName) == null) {
-            Log.e(TAG, "No valid wificond client interface handler");
-            return false;
-        }
-        try {
-            IWifiScannerImpl scannerImpl = mWificondScanners.get(ifaceName);
-            if (scannerImpl != null) {
-                scannerImpl.unsubscribeScanEvents();
-                scannerImpl.unsubscribePnoScanEvents();
-            }
-        } catch (RemoteException e) {
-            Log.e(TAG, "Failed to unsubscribe wificond scanner due to remote exception");
-            return false;
-        }
-
-        if (mWificond == null) {
-            Log.e(TAG, "Reference to wifiCond is null");
-            return false;
-        }
-
-        boolean success;
-        try {
-            success = mWificond.tearDownClientInterface(ifaceName);
-        } catch (RemoteException e1) {
-            Log.e(TAG, "Failed to teardown client interface due to remote exception");
-            return false;
-        }
-        if (!success) {
-            Log.e(TAG, "Failed to teardown client interface");
-            return false;
-        }
-
-        mClientInterfaces.remove(ifaceName);
-        mWificondScanners.remove(ifaceName);
-        mScanEventHandlers.remove(ifaceName);
-        mPnoScanEventHandlers.remove(ifaceName);
-        return true;
-    }
-
-    /**
-     * Set up interface as a Soft AP.
-     *
-     * @param ifaceName Name of the interface to configure.
-     * @return true on success.
-     */
-    public boolean setupInterfaceForSoftApMode(@NonNull String ifaceName) {
-        Log.d(TAG, "Setting up interface for soft ap mode");
-        if (!retrieveWificondAndRegisterForDeath()) {
-            return false;
-        }
-
-        IApInterface apInterface = null;
-        try {
-            apInterface = mWificond.createApInterface(ifaceName);
-        } catch (RemoteException e1) {
-            Log.e(TAG, "Failed to get IApInterface due to remote exception");
-            return false;
-        }
-
-        if (apInterface == null) {
-            Log.e(TAG, "Could not get IApInterface instance from wificond");
-            return false;
-        }
-        Binder.allowBlocking(apInterface.asBinder());
-
-        // Refresh Handlers
-        mApInterfaces.put(ifaceName, apInterface);
-        return true;
-    }
-
-    /**
-     * Tear down a Soft AP interface configured using
-     * {@link #setupInterfaceForSoftApMode(String)}.
-     *
-     * @param ifaceName Name of the interface to tear down.
-     * @return Returns true on success, false on failure (e.g. when called before an interface was
-     * set up).
-     */
-    public boolean tearDownSoftApInterface(@NonNull String ifaceName) {
-        if (getApInterface(ifaceName) == null) {
-            Log.e(TAG, "No valid wificond ap interface handler");
-            return false;
-        }
-
-        if (mWificond == null) {
-            Log.e(TAG, "Reference to wifiCond is null");
-            return false;
-        }
-
-        boolean success;
-        try {
-            success = mWificond.tearDownApInterface(ifaceName);
-        } catch (RemoteException e1) {
-            Log.e(TAG, "Failed to teardown AP interface due to remote exception");
-            return false;
-        }
-        if (!success) {
-            Log.e(TAG, "Failed to teardown AP interface");
-            return false;
-        }
-        mApInterfaces.remove(ifaceName);
-        mApInterfaceListeners.remove(ifaceName);
-        return true;
-    }
-
-    /**
-    * Tear down all interfaces, whether clients (STA) or Soft AP.
-     *
-    * @return Returns true on success.
-    */
-    public boolean tearDownInterfaces() {
-        Log.d(TAG, "tearing down interfaces in wificond");
-        // Explicitly refresh the wificodn handler because |tearDownInterfaces()|
-        // could be used to cleanup before we setup any interfaces.
-        if (!retrieveWificondAndRegisterForDeath()) {
-            return false;
-        }
-
-        try {
-            for (Map.Entry<String, IWifiScannerImpl> entry : mWificondScanners.entrySet()) {
-                entry.getValue().unsubscribeScanEvents();
-                entry.getValue().unsubscribePnoScanEvents();
-            }
-            mWificond.tearDownInterfaces();
-            clearState();
-            return true;
-        } catch (RemoteException e) {
-            Log.e(TAG, "Failed to tear down interfaces due to remote exception");
-        }
-
-        return false;
-    }
-
-    /** Helper function to look up the interface handle using name */
-    private IClientInterface getClientInterface(@NonNull String ifaceName) {
-        return mClientInterfaces.get(ifaceName);
-    }
-
-    /**
-     * Request signal polling.
-     *
-     * @param ifaceName Name of the interface on which to poll. The interface must have been
-     *                  already set up using
-     *{@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
-     *                  or {@link #setupInterfaceForSoftApMode(String)}.
-     *
-     * @return A {@link SignalPollResult} object containing interface statistics, or a null on
-     * error (e.g. the interface hasn't been set up yet).
-     */
-    @Nullable public SignalPollResult signalPoll(@NonNull String ifaceName) {
-        IClientInterface iface = getClientInterface(ifaceName);
-        if (iface == null) {
-            Log.e(TAG, "No valid wificond client interface handler");
-            return null;
-        }
-
-        int[] resultArray;
-        try {
-            resultArray = iface.signalPoll();
-            if (resultArray == null || resultArray.length != 4) {
-                Log.e(TAG, "Invalid signal poll result from wificond");
-                return null;
-            }
-        } catch (RemoteException e) {
-            Log.e(TAG, "Failed to do signal polling due to remote exception");
-            return null;
-        }
-        return new SignalPollResult(resultArray[0], resultArray[1], resultArray[3], resultArray[2]);
-    }
-
-    /**
-     * Get current transmit (Tx) packet counters of the specified interface. The interface must
-     * have been already set up using
-     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
-     * or {@link #setupInterfaceForSoftApMode(String)}.
-     *
-     * @param ifaceName Name of the interface.
-     * @return {@link TxPacketCounters} of the current interface or null on error (e.g. when
-     * called before the interface has been set up).
-     */
-    @Nullable public TxPacketCounters getTxPacketCounters(@NonNull String ifaceName) {
-        IClientInterface iface = getClientInterface(ifaceName);
-        if (iface == null) {
-            Log.e(TAG, "No valid wificond client interface handler");
-            return null;
-        }
-
-        int[] resultArray;
-        try {
-            resultArray = iface.getPacketCounters();
-            if (resultArray == null || resultArray.length != 2) {
-                Log.e(TAG, "Invalid signal poll result from wificond");
-                return null;
-            }
-        } catch (RemoteException e) {
-            Log.e(TAG, "Failed to do signal polling due to remote exception");
-            return null;
-        }
-        return new TxPacketCounters(resultArray[0], resultArray[1]);
-    }
-
-    /** Helper function to look up the scanner impl handle using name */
-    private IWifiScannerImpl getScannerImpl(@NonNull String ifaceName) {
-        return mWificondScanners.get(ifaceName);
-    }
-
-    /**
-     * Fetch the latest scan results of the indicated type for the specified interface. Note that
-     * this method fetches the latest results - it does not initiate a scan. Initiating a scan can
-     * be done using {@link #startScan(String, int, Set, List)} or
-     * {@link #startPnoScan(String, PnoSettings, Executor, PnoScanRequestCallback)}.
-     *
-     * Note: The interface must have been already set up using
-     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
-     * or {@link #setupInterfaceForSoftApMode(String)}.
-     *
-     * @param ifaceName Name of the interface.
-     * @param scanType The type of scan result to be returned, can be
-     * {@link #SCAN_TYPE_SINGLE_SCAN} or {@link #SCAN_TYPE_PNO_SCAN}.
-     * @return Returns an array of {@link NativeScanResult} or an empty array on failure (e.g. when
-     * called before the interface has been set up).
-     */
-    @NonNull public List<NativeScanResult> getScanResults(@NonNull String ifaceName,
-            @ScanResultType int scanType) {
-        IWifiScannerImpl scannerImpl = getScannerImpl(ifaceName);
-        if (scannerImpl == null) {
-            Log.e(TAG, "No valid wificond scanner interface handler");
-            return new ArrayList<>();
-        }
-        List<NativeScanResult> results = null;
-        try {
-            if (scanType == SCAN_TYPE_SINGLE_SCAN) {
-                results = Arrays.asList(scannerImpl.getScanResults());
-            } else {
-                results = Arrays.asList(scannerImpl.getPnoScanResults());
-            }
-        } catch (RemoteException e1) {
-            Log.e(TAG, "Failed to create ScanDetail ArrayList");
-        }
-        if (results == null) {
-            results = new ArrayList<>();
-        }
-        if (mVerboseLoggingEnabled) {
-            Log.d(TAG, "get " + results.size() + " scan results from wificond");
-        }
-
-        return results;
-    }
-
-    /**
-     * Return scan type for the parcelable {@link SingleScanSettings}
-     */
-    private static int getScanType(@WifiAnnotations.ScanType int scanType) {
-        switch (scanType) {
-            case WifiScanner.SCAN_TYPE_LOW_LATENCY:
-                return IWifiScannerImpl.SCAN_TYPE_LOW_SPAN;
-            case WifiScanner.SCAN_TYPE_LOW_POWER:
-                return IWifiScannerImpl.SCAN_TYPE_LOW_POWER;
-            case WifiScanner.SCAN_TYPE_HIGH_ACCURACY:
-                return IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
-            default:
-                throw new IllegalArgumentException("Invalid scan type " + scanType);
-        }
-    }
-
-    /**
-     * Start a scan using the specified parameters. A scan is an asynchronous operation. The
-     * result of the operation is returned in the {@link ScanEventCallback} registered when
-     * setting up an interface using
-     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}.
-     * The latest scans can be obtained using {@link #getScanResults(String, int)} and using a
-     * {@link #SCAN_TYPE_SINGLE_SCAN} for the {@code scanType}.
-     *
-     * Note: The interface must have been already set up using
-     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
-     * or {@link #setupInterfaceForSoftApMode(String)}.
-     *
-     * @param ifaceName Name of the interface on which to initiate the scan.
-     * @param scanType Type of scan to perform, can be any of
-     * {@link WifiScanner#SCAN_TYPE_HIGH_ACCURACY}, {@link WifiScanner#SCAN_TYPE_LOW_POWER}, or
-     * {@link WifiScanner#SCAN_TYPE_LOW_LATENCY}.
-     * @param freqs list of frequencies to scan for, if null scan all supported channels.
-     * @param hiddenNetworkSSIDs List of hidden networks to be scanned for, a null indicates that
-     *                           no hidden frequencies will be scanned for.
-     * @return Returns true on success, false on failure (e.g. when called before the interface
-     * has been set up).
-     */
-    public boolean startScan(@NonNull String ifaceName, @WifiAnnotations.ScanType int scanType,
-            @Nullable Set<Integer> freqs, @Nullable List<byte[]> hiddenNetworkSSIDs) {
-        IWifiScannerImpl scannerImpl = getScannerImpl(ifaceName);
-        if (scannerImpl == null) {
-            Log.e(TAG, "No valid wificond scanner interface handler");
-            return false;
-        }
-        SingleScanSettings settings = new SingleScanSettings();
-        try {
-            settings.scanType = getScanType(scanType);
-        } catch (IllegalArgumentException e) {
-            Log.e(TAG, "Invalid scan type ", e);
-            return false;
-        }
-        settings.channelSettings  = new ArrayList<>();
-        settings.hiddenNetworks  = new ArrayList<>();
-
-        if (freqs != null) {
-            for (Integer freq : freqs) {
-                ChannelSettings channel = new ChannelSettings();
-                channel.frequency = freq;
-                settings.channelSettings.add(channel);
-            }
-        }
-        if (hiddenNetworkSSIDs != null) {
-            for (byte[] ssid : hiddenNetworkSSIDs) {
-                HiddenNetwork network = new HiddenNetwork();
-                network.ssid = ssid;
-
-                // settings.hiddenNetworks is expected to be very small, so this shouldn't cause
-                // any performance issues.
-                if (!settings.hiddenNetworks.contains(network)) {
-                    settings.hiddenNetworks.add(network);
-                }
-            }
-        }
-
-        try {
-            return scannerImpl.scan(settings);
-        } catch (RemoteException e1) {
-            Log.e(TAG, "Failed to request scan due to remote exception");
-        }
-        return false;
-    }
-
-    /**
-     * Request a PNO (Preferred Network Offload). The offload request and the scans are asynchronous
-     * operations. The result of the request are returned in the {@code callback} parameter which
-     * is an {@link PnoScanRequestCallback}. The scan results are are return in the
-     * {@link ScanEventCallback} which is registered when setting up an interface using
-     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}.
-     * The latest PNO scans can be obtained using {@link #getScanResults(String, int)} with the
-     * {@code scanType} set to {@link #SCAN_TYPE_PNO_SCAN}.
-     *
-     * Note: The interface must have been already set up using
-     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
-     * or {@link #setupInterfaceForSoftApMode(String)}.
-     *
-     * @param ifaceName Name of the interface on which to request a PNO.
-     * @param pnoSettings PNO scan configuration.
-     * @param executor The Executor on which to execute the callback.
-     * @param callback Callback for the results of the offload request.
-     * @return true on success, false on failure (e.g. when called before the interface has been set
-     * up).
-     */
-    public boolean startPnoScan(@NonNull String ifaceName, @NonNull PnoSettings pnoSettings,
-            @NonNull @CallbackExecutor Executor executor,
-            @NonNull PnoScanRequestCallback callback) {
-        IWifiScannerImpl scannerImpl = getScannerImpl(ifaceName);
-        if (scannerImpl == null) {
-            Log.e(TAG, "No valid wificond scanner interface handler");
-            return false;
-        }
-
-        if (callback == null || executor == null) {
-            Log.e(TAG, "startPnoScan called with a null callback");
-            return false;
-        }
-
-        try {
-            boolean success = scannerImpl.startPnoScan(pnoSettings);
-            if (success) {
-                executor.execute(callback::onPnoRequestSucceeded);
-            } else {
-                executor.execute(callback::onPnoRequestFailed);
-            }
-            return success;
-        } catch (RemoteException e1) {
-            Log.e(TAG, "Failed to start pno scan due to remote exception");
-        }
-        return false;
-    }
-
-    /**
-     * Stop PNO scan configured with
-     * {@link #startPnoScan(String, PnoSettings, Executor, PnoScanRequestCallback)}.
-     *
-     * Note: The interface must have been already set up using
-     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
-     * or {@link #setupInterfaceForSoftApMode(String)}.
-     *
-     * @param ifaceName Name of the interface on which the PNO scan was configured.
-     * @return true on success, false on failure (e.g. when called before the interface has been
-     * set up).
-     */
-    public boolean stopPnoScan(@NonNull String ifaceName) {
-        IWifiScannerImpl scannerImpl = getScannerImpl(ifaceName);
-        if (scannerImpl == null) {
-            Log.e(TAG, "No valid wificond scanner interface handler");
-            return false;
-        }
-        try {
-            return scannerImpl.stopPnoScan();
-        } catch (RemoteException e1) {
-            Log.e(TAG, "Failed to stop pno scan due to remote exception");
-        }
-        return false;
-    }
-
-    /**
-     * Abort ongoing single scan started with {@link #startScan(String, int, Set, List)}. No failure
-     * callback, e.g. {@link ScanEventCallback#onScanFailed()}, is triggered by this operation.
-     *
-     * Note: The interface must have been already set up using
-     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
-     * or {@link #setupInterfaceForSoftApMode(String)}. If the interface has not been set up then
-     * this method has no impact.
-     *
-     * @param ifaceName Name of the interface on which the scan was started.
-     */
-    public void abortScan(@NonNull String ifaceName) {
-        IWifiScannerImpl scannerImpl = getScannerImpl(ifaceName);
-        if (scannerImpl == null) {
-            Log.e(TAG, "No valid wificond scanner interface handler");
-            return;
-        }
-        try {
-            scannerImpl.abortScan();
-        } catch (RemoteException e1) {
-            Log.e(TAG, "Failed to request abortScan due to remote exception");
-        }
-    }
-
-    /**
-     * Query the list of valid frequencies (in MHz) for the provided band.
-     * The result depends on the on the country code that has been set.
-     *
-     * @param band as specified by one of the WifiScanner.WIFI_BAND_* constants.
-     * The following bands are supported {@link @WifiScanner.WifiBandBasic}:
-     * WifiScanner.WIFI_BAND_24_GHZ
-     * WifiScanner.WIFI_BAND_5_GHZ
-     * WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY
-     * WifiScanner.WIFI_BAND_6_GHZ
-     * @return frequencies List of valid frequencies (MHz), or an empty list for error.
-     * @throws IllegalArgumentException if band is not recognized.
-     */
-    public @NonNull List<Integer> getChannelsMhzForBand(@WifiAnnotations.WifiBandBasic int band) {
-        if (mWificond == null) {
-            Log.e(TAG, "No valid wificond scanner interface handler");
-            return Collections.emptyList();
-        }
-        int[] result = null;
-        try {
-            switch (band) {
-                case WifiScanner.WIFI_BAND_24_GHZ:
-                    result = mWificond.getAvailable2gChannels();
-                    break;
-                case WifiScanner.WIFI_BAND_5_GHZ:
-                    result = mWificond.getAvailable5gNonDFSChannels();
-                    break;
-                case WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY:
-                    result = mWificond.getAvailableDFSChannels();
-                    break;
-                case WifiScanner.WIFI_BAND_6_GHZ:
-                    result = mWificond.getAvailable6gChannels();
-                    break;
-                default:
-                    throw new IllegalArgumentException("unsupported band " + band);
-            }
-        } catch (RemoteException e1) {
-            Log.e(TAG, "Failed to request getChannelsForBand due to remote exception");
-        }
-        if (result == null) {
-            return Collections.emptyList();
-        }
-        return Arrays.stream(result).boxed().collect(Collectors.toList());
-    }
-
-    /** Helper function to look up the interface handle using name */
-    private IApInterface getApInterface(@NonNull String ifaceName) {
-        return mApInterfaces.get(ifaceName);
-    }
-
-    /**
-     * Get the device phy capabilities for a given interface.
-     *
-     * Note: The interface must have been already set up using
-     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
-     * or {@link #setupInterfaceForSoftApMode(String)}.
-     *
-     * @return DeviceWiphyCapabilities or null on error (e.g. when called on an interface which has
-     * not been set up).
-     */
-    @Nullable public DeviceWiphyCapabilities getDeviceWiphyCapabilities(@NonNull String ifaceName) {
-        if (mWificond == null) {
-            Log.e(TAG, "Can not query for device wiphy capabilities at this time");
-            return null;
-        }
-
-        try {
-            return mWificond.getDeviceWiphyCapabilities(ifaceName);
-        } catch (RemoteException e) {
-            return null;
-        }
-    }
-
-    /**
-     * Register the provided callback handler for SoftAp events. The interface must first be created
-     * using {@link #setupInterfaceForSoftApMode(String)}. The callback registration is valid until
-     * the interface is deleted using {@link #tearDownSoftApInterface(String)} (no deregistration
-     * method is provided).
-     * <p>
-     * Note that only one callback can be registered at a time - any registration overrides previous
-     * registrations.
-     *
-     * @param ifaceName Name of the interface on which to register the callback.
-     * @param executor The Executor on which to execute the callbacks.
-     * @param callback Callback for AP events.
-     * @return true on success, false on failure (e.g. when called on an interface which has not
-     * been set up).
-     */
-    public boolean registerApCallback(@NonNull String ifaceName,
-            @NonNull @CallbackExecutor Executor executor,
-            @NonNull SoftApCallback callback) {
-        IApInterface iface = getApInterface(ifaceName);
-        if (iface == null) {
-            Log.e(TAG, "No valid ap interface handler");
-            return false;
-        }
-
-        if (callback == null || executor == null) {
-            Log.e(TAG, "registerApCallback called with a null callback");
-            return false;
-        }
-
-        try {
-            IApInterfaceEventCallback wificondCallback = new ApInterfaceEventCallback(executor,
-                    callback);
-            mApInterfaceListeners.put(ifaceName, wificondCallback);
-            boolean success = iface.registerCallback(wificondCallback);
-            if (!success) {
-                Log.e(TAG, "Failed to register ap callback.");
-                return false;
-            }
-        } catch (RemoteException e) {
-            Log.e(TAG, "Exception in registering AP callback: " + e);
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Send a management frame on the specified interface at the specified rate. Useful for probing
-     * the link with arbitrary frames.
-     *
-     * Note: The interface must have been already set up using
-     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
-     * or {@link #setupInterfaceForSoftApMode(String)}.
-     *
-     * @param ifaceName The interface on which to send the frame.
-     * @param frame The raw byte array of the management frame to tramit.
-     * @param mcs The MCS (modulation and coding scheme), i.e. rate, at which to transmit the
-     *            frame. Specified per IEEE 802.11.
-     * @param executor The Executor on which to execute the callbacks.
-     * @param callback A {@link SendMgmtFrameCallback} callback for results of the operation.
-     */
-    public void sendMgmtFrame(@NonNull String ifaceName, @NonNull byte[] frame, int mcs,
-            @NonNull @CallbackExecutor Executor executor,
-            @NonNull SendMgmtFrameCallback callback) {
-
-        if (callback == null || executor == null) {
-            Log.e(TAG, "callback cannot be null!");
-            return;
-        }
-
-        if (frame == null) {
-            Log.e(TAG, "frame cannot be null!");
-            executor.execute(() -> callback.onFailure(SEND_MGMT_FRAME_ERROR_UNKNOWN));
-            return;
-        }
-
-        // TODO (b/112029045) validate mcs
-        IClientInterface clientInterface = getClientInterface(ifaceName);
-        if (clientInterface == null) {
-            Log.e(TAG, "No valid wificond client interface handler");
-            executor.execute(() -> callback.onFailure(SEND_MGMT_FRAME_ERROR_UNKNOWN));
-            return;
-        }
-
-        if (!mSendMgmtFrameInProgress.compareAndSet(false, true)) {
-            Log.e(TAG, "An existing management frame transmission is in progress!");
-            executor.execute(() -> callback.onFailure(SEND_MGMT_FRAME_ERROR_ALREADY_STARTED));
-            return;
-        }
-
-        SendMgmtFrameEvent sendMgmtFrameEvent = new SendMgmtFrameEvent(executor, callback);
-        try {
-            clientInterface.SendMgmtFrame(frame, sendMgmtFrameEvent, mcs);
-        } catch (RemoteException e) {
-            Log.e(TAG, "Exception while starting link probe: " + e);
-            // Call sendMgmtFrameEvent.OnFailure() instead of callback.onFailure() so that
-            // sendMgmtFrameEvent can clean up internal state, such as cancelling the timer.
-            sendMgmtFrameEvent.OnFailure(SEND_MGMT_FRAME_ERROR_UNKNOWN);
-        }
-    }
-
-    /**
-     * Clear all internal handles.
-     */
-    private void clearState() {
-        // Refresh handlers
-        mClientInterfaces.clear();
-        mWificondScanners.clear();
-        mPnoScanEventHandlers.clear();
-        mScanEventHandlers.clear();
-        mApInterfaces.clear();
-        mApInterfaceListeners.clear();
-        mSendMgmtFrameInProgress.set(false);
-    }
-
-    /**
-     * OEM parsed security type
-     */
-    public static class OemSecurityType {
-        /** The protocol defined in {@link android.net.wifi.WifiAnnotations.Protocol}. */
-        public final @WifiAnnotations.Protocol int protocol;
-        /**
-         * Supported key management types defined
-         * in {@link android.net.wifi.WifiAnnotations.KeyMgmt}.
-         */
-        @NonNull public final List<Integer> keyManagement;
-        /**
-         * Supported pairwise cipher types defined
-         * in {@link android.net.wifi.WifiAnnotations.Cipher}.
-         */
-        @NonNull public final List<Integer> pairwiseCipher;
-        /** The group cipher type defined in {@link android.net.wifi.WifiAnnotations.Cipher}. */
-        public final @WifiAnnotations.Cipher int groupCipher;
-        /**
-         * Default constructor for OemSecurityType
-         *
-         * @param protocol The protocol defined in
-         *                 {@link android.net.wifi.WifiAnnotations.Protocol}.
-         * @param keyManagement Supported key management types defined
-         *                      in {@link android.net.wifi.WifiAnnotations.KeyMgmt}.
-         * @param pairwiseCipher Supported pairwise cipher types defined
-         *                       in {@link android.net.wifi.WifiAnnotations.Cipher}.
-         * @param groupCipher The group cipher type defined
-         *                    in {@link android.net.wifi.WifiAnnotations.Cipher}.
-         */
-        public OemSecurityType(
-                @WifiAnnotations.Protocol int protocol,
-                @NonNull List<Integer> keyManagement,
-                @NonNull List<Integer> pairwiseCipher,
-                @WifiAnnotations.Cipher int groupCipher) {
-            this.protocol = protocol;
-            this.keyManagement = (keyManagement != null)
-                ? keyManagement : new ArrayList<Integer>();
-            this.pairwiseCipher = (pairwiseCipher != null)
-                ? pairwiseCipher : new ArrayList<Integer>();
-            this.groupCipher = groupCipher;
-        }
-    }
-
-    /**
-     * OEM information element parser for security types not parsed by the framework.
-     *
-     * The OEM method should use the method inputs {@code id}, {@code idExt}, and {@code bytes}
-     * to perform the parsing. The method should place the results in an OemSecurityType objct.
-     *
-     * @param id The information element id.
-     * @param idExt The information element extension id. This is valid only when id is
-     *        the extension id, {@code 255}.
-     * @param bytes The raw bytes of information element data, 'Element ID' and 'Length' are
-     *              stripped off already.
-     * @return an OemSecurityType object if this IE is parsed successfully, null otherwise.
-     */
-    @Nullable public static OemSecurityType parseOemSecurityTypeElement(
-            int id,
-            int idExt,
-            @NonNull byte[] bytes) {
-        return null;
-    }
-}
diff --git a/wifi/java/com/android/server/wifi/BaseWifiService.java b/wifi/java/com/android/server/wifi/BaseWifiService.java
deleted file mode 100644
index 060c85c..0000000
--- a/wifi/java/com/android/server/wifi/BaseWifiService.java
+++ /dev/null
@@ -1,641 +0,0 @@
-/**
- * Copyright (c) 2018, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License") {
- *  throw new UnsupportedOperationException();
- }
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wifi;
-
-import android.content.pm.ParceledListSlice;
-import android.net.DhcpInfo;
-import android.net.Network;
-import android.net.wifi.IActionListener;
-import android.net.wifi.IDppCallback;
-import android.net.wifi.ILocalOnlyHotspotCallback;
-import android.net.wifi.INetworkRequestMatchCallback;
-import android.net.wifi.IOnWifiActivityEnergyInfoListener;
-import android.net.wifi.IOnWifiUsabilityStatsListener;
-import android.net.wifi.IScanResultsCallback;
-import android.net.wifi.ISoftApCallback;
-import android.net.wifi.ISuggestionConnectionStatusListener;
-import android.net.wifi.ITrafficStateCallback;
-import android.net.wifi.ITxPacketCountListener;
-import android.net.wifi.IWifiConnectedNetworkScorer;
-import android.net.wifi.IWifiManager;
-import android.net.wifi.ScanResult;
-import android.net.wifi.SoftApConfiguration;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiInfo;
-import android.net.wifi.WifiManager;
-import android.net.wifi.WifiNetworkSuggestion;
-import android.net.wifi.hotspot2.IProvisioningCallback;
-import android.net.wifi.hotspot2.OsuProvider;
-import android.net.wifi.hotspot2.PasspointConfiguration;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.os.ResultReceiver;
-import android.os.WorkSource;
-import android.os.connectivity.WifiActivityEnergyInfo;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * Empty concrete class implementing IWifiManager with stub methods throwing runtime exceptions.
- *
- * This class is meant to be extended by real implementations of IWifiManager in order to facilitate
- * cross-repo changes to WiFi internal APIs, including the introduction of new APIs, the removal of
- * deprecated APIs, or the migration of existing API signatures.
- *
- * When an existing API is scheduled for removal, it can be removed from IWifiManager.aidl
- * immediately and marked as @Deprecated first in this class. Children inheriting this class are
- * then given a short grace period to update themselves before the @Deprecated stub is removed for
- * good. If the API scheduled for removal has a replacement or an overload (signature change),
- * these should be introduced before the stub is removed to allow children to migrate.
- *
- * When a new API is added to IWifiManager.aidl, a stub should be added in BaseWifiService as
- * well otherwise compilation will fail.
- */
-public class BaseWifiService extends IWifiManager.Stub {
-
-    private static final String TAG = BaseWifiService.class.getSimpleName();
-
-    @Override
-    public long getSupportedFeatures() {
-        throw new UnsupportedOperationException();
-    }
-
-    /** @deprecated use {@link #getWifiActivityEnergyInfoAsync} instead */
-    @Deprecated
-    public WifiActivityEnergyInfo reportActivityInfo() {
-        throw new UnsupportedOperationException();
-    }
-
-    /** @deprecated use {@link #getWifiActivityEnergyInfoAsync} instead */
-    @Deprecated
-    public void requestActivityInfo(ResultReceiver result) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void getWifiActivityEnergyInfoAsync(IOnWifiActivityEnergyInfoListener listener) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ParceledListSlice getConfiguredNetworks(String packageName, String featureId) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ParceledListSlice getPrivilegedConfiguredNetworks(String packageName, String featureId) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Map<String, Map<Integer, List<ScanResult>>> getAllMatchingFqdnsForScanResults(
-            List<ScanResult> scanResults) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Map<OsuProvider, List<ScanResult>> getMatchingOsuProviders(
-            List<ScanResult> scanResults) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Map<OsuProvider, PasspointConfiguration> getMatchingPasspointConfigsForOsuProviders(
-            List<OsuProvider> osuProviders) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int addOrUpdateNetwork(WifiConfiguration config, String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean addOrUpdatePasspointConfiguration(
-            PasspointConfiguration config, String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean removePasspointConfiguration(String fqdn, String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public List<PasspointConfiguration> getPasspointConfigurations(String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public List<WifiConfiguration> getWifiConfigsForPasspointProfiles(List<String> fqdnList) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void queryPasspointIcon(long bssid, String fileName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int matchProviderWithCurrentNetwork(String fqdn) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void deauthenticateNetwork(long holdoff, boolean ess) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean removeNetwork(int netId, String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean enableNetwork(int netId, boolean disableOthers, String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean disableNetwork(int netId, String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void allowAutojoinGlobal(boolean choice) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void allowAutojoin(int netId, boolean choice) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void allowAutojoinPasspoint(String fqdn, boolean enableAutoJoin) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setMacRandomizationSettingPasspointEnabled(String fqdn, boolean enable) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setMeteredOverridePasspoint(String fqdn, int meteredOverride) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean startScan(String packageName, String featureId) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public List<ScanResult> getScanResults(String callingPackage, String callingFeatureId) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean disconnect(String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean reconnect(String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean reassociate(String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public WifiInfo getConnectionInfo(String callingPackage, String callingFeatureId) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean setWifiEnabled(String packageName, boolean enable) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int getWifiEnabledState() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getCountryCode() {
-        throw new UnsupportedOperationException();
-    }
-
-    /** @deprecated use {@link #is5GHzBandSupported} instead */
-    @Deprecated
-    public boolean isDualBandSupported() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean is5GHzBandSupported() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean is6GHzBandSupported() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isWifiStandardSupported(int standard) {
-        throw new UnsupportedOperationException();
-    }
-
-    /** @deprecated use {@link WifiManager#isStaApConcurrencySupported()} */
-    @Deprecated
-    public boolean needs5GHzToAnyApBandConversion() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public DhcpInfo getDhcpInfo() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isScanAlwaysAvailable() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean acquireWifiLock(IBinder lock, int lockType, String tag, WorkSource ws) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void updateWifiLockWorkSource(IBinder lock, WorkSource ws) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean releaseWifiLock(IBinder lock) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void initializeMulticastFiltering() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isMulticastEnabled() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void acquireMulticastLock(IBinder binder, String tag) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void releaseMulticastLock(String tag) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void updateInterfaceIpState(String ifaceName, int mode) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean startSoftAp(WifiConfiguration wifiConfig) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean startTetheredHotspot(SoftApConfiguration softApConfig) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean stopSoftAp() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int startLocalOnlyHotspot(ILocalOnlyHotspotCallback callback, String packageName,
-            String featureId, SoftApConfiguration customConfig) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void stopLocalOnlyHotspot() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void startWatchLocalOnlyHotspot(ILocalOnlyHotspotCallback callback) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void stopWatchLocalOnlyHotspot() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int getWifiApEnabledState() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public WifiConfiguration getWifiApConfiguration() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public SoftApConfiguration getSoftApConfiguration() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean setWifiApConfiguration(WifiConfiguration wifiConfig, String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean setSoftApConfiguration(SoftApConfiguration softApConfig, String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void notifyUserOfApBandConversion(String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void enableTdls(String remoteIPAddress, boolean enable) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void enableTdlsWithMacAddress(String remoteMacAddress, boolean enable) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getCurrentNetworkWpsNfcConfigurationToken() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void enableVerboseLogging(int verbose) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int getVerboseLoggingLevel() {
-        throw new UnsupportedOperationException();
-    }
-
-    /** @deprecated use {@link #allowAutojoinGlobal(boolean)} instead */
-    @Deprecated
-    public void enableWifiConnectivityManager(boolean enabled) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void disableEphemeralNetwork(String SSID, String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void factoryReset(String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Network getCurrentNetwork() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public byte[] retrieveBackupData() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void restoreBackupData(byte[] data) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public byte[] retrieveSoftApBackupData() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public SoftApConfiguration restoreSoftApBackupData(byte[] data) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void restoreSupplicantBackupData(byte[] supplicantData, byte[] ipConfigData) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void startSubscriptionProvisioning(
-            OsuProvider provider, IProvisioningCallback callback) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void registerSoftApCallback(
-            IBinder binder, ISoftApCallback callback, int callbackIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void unregisterSoftApCallback(int callbackIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void registerTrafficStateCallback(
-            IBinder binder, ITrafficStateCallback callback, int callbackIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void unregisterTrafficStateCallback(int callbackIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void registerNetworkRequestMatchCallback(
-            IBinder binder, INetworkRequestMatchCallback callback, int callbackIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void unregisterNetworkRequestMatchCallback(int callbackIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int addNetworkSuggestions(
-            List<WifiNetworkSuggestion> networkSuggestions, String callingPackageName,
-            String callingFeatureId) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int removeNetworkSuggestions(
-            List<WifiNetworkSuggestion> networkSuggestions, String callingPackageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public List<WifiNetworkSuggestion> getNetworkSuggestions(String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String[] getFactoryMacAddresses() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setDeviceMobilityState(int state) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void startDppAsConfiguratorInitiator(IBinder binder, String enrolleeUri,
-            int selectedNetworkId, int netRole, IDppCallback callback) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void startDppAsEnrolleeInitiator(IBinder binder, String configuratorUri,
-            IDppCallback callback) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void stopDppSession() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void addOnWifiUsabilityStatsListener(
-            IBinder binder, IOnWifiUsabilityStatsListener listener, int listenerIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void removeOnWifiUsabilityStatsListener(int listenerIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void updateWifiUsabilityScore(int seqNum, int score, int predictionHorizonSec) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void connect(WifiConfiguration config, int netId, IBinder binder,
-            IActionListener callback, int callbackIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void save(WifiConfiguration config, IBinder binder, IActionListener callback,
-            int callbackIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void forget(int netId, IBinder binder, IActionListener callback,
-            int callbackIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void getTxPacketCount(String packageName, IBinder binder,
-            ITxPacketCountListener callback, int callbackIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void registerScanResultsCallback(IScanResultsCallback callback) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void unregisterScanResultsCallback(IScanResultsCallback callback) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void registerSuggestionConnectionStatusListener(IBinder binder,
-            ISuggestionConnectionStatusListener listener,
-            int listenerIdentifier, String packageName, String featureId) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void unregisterSuggestionConnectionStatusListener(int listenerIdentifier,
-            String packageName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int calculateSignalLevel(int rssi) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public List<WifiConfiguration> getWifiConfigForMatchedNetworkSuggestionsSharedWithUser(
-            List<ScanResult> scanResults) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean setWifiConnectedNetworkScorer(IBinder binder,
-            IWifiConnectedNetworkScorer scorer) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void clearWifiConnectedNetworkScorer() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Map<WifiNetworkSuggestion, List<ScanResult>> getMatchingScanResults(
-            List<WifiNetworkSuggestion> networkSuggestions,
-            List<ScanResult> scanResults,
-            String callingPackage, String callingFeatureId) {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/wifi/tests/src/android/net/wifi/SoftApConfigurationTest.java b/wifi/tests/src/android/net/wifi/SoftApConfigurationTest.java
index 2efdd97..060ddf0 100644
--- a/wifi/tests/src/android/net/wifi/SoftApConfigurationTest.java
+++ b/wifi/tests/src/android/net/wifi/SoftApConfigurationTest.java
@@ -125,6 +125,7 @@
                 .setChannel(149, SoftApConfiguration.BAND_5GHZ)
                 .setHiddenSsid(true)
                 .setMaxNumberOfClients(10)
+                .setAutoShutdownEnabled(true)
                 .setShutdownTimeoutMillis(500000)
                 .enableClientControlByUser(true)
                 .setClientList(testBlockedClientList, testAllowedClientList)
@@ -136,6 +137,7 @@
         assertThat(original.getChannel()).isEqualTo(149);
         assertThat(original.isHiddenSsid()).isEqualTo(true);
         assertThat(original.getMaxNumberOfClients()).isEqualTo(10);
+        assertThat(original.isAutoShutdownEnabled()).isEqualTo(true);
         assertThat(original.getShutdownTimeoutMillis()).isEqualTo(500000);
         assertThat(original.isClientControlByUserEnabled()).isEqualTo(true);
         assertThat(original.getBlockedClientList()).isEqualTo(testBlockedClientList);
@@ -287,17 +289,43 @@
 
     @Test
     public void testToWifiConfigurationWithSupportedParameter() {
-        SoftApConfiguration softApConfig = new SoftApConfiguration.Builder()
+        SoftApConfiguration softApConfig_2g = new SoftApConfiguration.Builder()
+                .setPassphrase("secretsecret",
+                        SoftApConfiguration.SECURITY_TYPE_WPA2_PSK)
+                .setChannel(11, SoftApConfiguration.BAND_2GHZ)
+                .setHiddenSsid(true)
+                .build();
+        WifiConfiguration wifiConfig_2g = softApConfig_2g.toWifiConfiguration();
+        assertThat(wifiConfig_2g.getAuthType()).isEqualTo(WifiConfiguration.KeyMgmt.WPA2_PSK);
+        assertThat(wifiConfig_2g.preSharedKey).isEqualTo("secretsecret");
+        assertThat(wifiConfig_2g.apBand).isEqualTo(WifiConfiguration.AP_BAND_2GHZ);
+        assertThat(wifiConfig_2g.apChannel).isEqualTo(11);
+        assertThat(wifiConfig_2g.hiddenSSID).isEqualTo(true);
+
+        SoftApConfiguration softApConfig_5g = new SoftApConfiguration.Builder()
                 .setPassphrase("secretsecret",
                         SoftApConfiguration.SECURITY_TYPE_WPA2_PSK)
                 .setChannel(149, SoftApConfiguration.BAND_5GHZ)
                 .setHiddenSsid(true)
                 .build();
-        WifiConfiguration wifiConfig = softApConfig.toWifiConfiguration();
-        assertThat(wifiConfig.getAuthType()).isEqualTo(WifiConfiguration.KeyMgmt.WPA2_PSK);
-        assertThat(wifiConfig.preSharedKey).isEqualTo("secretsecret");
-        assertThat(wifiConfig.apBand).isEqualTo(WifiConfiguration.AP_BAND_5GHZ);
-        assertThat(wifiConfig.apChannel).isEqualTo(149);
-        assertThat(wifiConfig.hiddenSSID).isEqualTo(true);
+        WifiConfiguration wifiConfig_5g = softApConfig_5g.toWifiConfiguration();
+        assertThat(wifiConfig_5g.getAuthType()).isEqualTo(WifiConfiguration.KeyMgmt.WPA2_PSK);
+        assertThat(wifiConfig_5g.preSharedKey).isEqualTo("secretsecret");
+        assertThat(wifiConfig_5g.apBand).isEqualTo(WifiConfiguration.AP_BAND_5GHZ);
+        assertThat(wifiConfig_5g.apChannel).isEqualTo(149);
+        assertThat(wifiConfig_5g.hiddenSSID).isEqualTo(true);
+
+        SoftApConfiguration softApConfig_2g5g = new SoftApConfiguration.Builder()
+                .setPassphrase("secretsecret",
+                        SoftApConfiguration.SECURITY_TYPE_WPA2_PSK)
+                .setBand(SoftApConfiguration.BAND_2GHZ | SoftApConfiguration.BAND_5GHZ)
+                .setHiddenSsid(true)
+                .build();
+        WifiConfiguration wifiConfig_2g5g = softApConfig_2g5g.toWifiConfiguration();
+        assertThat(wifiConfig_2g5g.getAuthType()).isEqualTo(WifiConfiguration.KeyMgmt.WPA2_PSK);
+        assertThat(wifiConfig_2g5g.preSharedKey).isEqualTo("secretsecret");
+        assertThat(wifiConfig_2g5g.apBand).isEqualTo(WifiConfiguration.AP_BAND_ANY);
+        assertThat(wifiConfig_2g5g.apChannel).isEqualTo(0);
+        assertThat(wifiConfig_2g5g.hiddenSSID).isEqualTo(true);
     }
 }
diff --git a/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java b/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java
index 05a3dce..00790d5 100644
--- a/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java
@@ -363,7 +363,7 @@
         assertTrue(config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.SAE));
         assertTrue(config.allowedPairwiseCiphers.get(WifiConfiguration.PairwiseCipher.CCMP));
         assertTrue(config.allowedGroupCiphers.get(WifiConfiguration.GroupCipher.CCMP));
-        assertTrue(config.requirePMF);
+        assertTrue(config.requirePmf);
     }
 
     /**
@@ -380,7 +380,7 @@
         assertTrue(config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.OWE));
         assertTrue(config.allowedPairwiseCiphers.get(WifiConfiguration.PairwiseCipher.CCMP));
         assertTrue(config.allowedGroupCiphers.get(WifiConfiguration.GroupCipher.CCMP));
-        assertTrue(config.requirePMF);
+        assertTrue(config.requirePmf);
     }
 
     /**
@@ -399,7 +399,7 @@
         assertTrue(config.allowedGroupCiphers.get(WifiConfiguration.GroupCipher.GCMP_256));
         assertTrue(config.allowedGroupManagementCiphers
                 .get(WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256));
-        assertTrue(config.requirePMF);
+        assertTrue(config.requirePmf);
     }
 
     /**
diff --git a/wifi/tests/src/android/net/wifi/WifiManagerTest.java b/wifi/tests/src/android/net/wifi/WifiManagerTest.java
index a189d50..234d929 100644
--- a/wifi/tests/src/android/net/wifi/WifiManagerTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiManagerTest.java
@@ -1551,14 +1551,15 @@
      */
     @Test
     public void testGetAllMatchingWifiConfigs() throws Exception {
-        Map<String, List<ScanResult>> fqdns = new HashMap<>();
-        fqdns.put("www.test.com", new ArrayList<>());
-        when(mWifiService.getAllMatchingFqdnsForScanResults(any(List.class))).thenReturn(fqdns);
+        Map<String, List<ScanResult>> passpointProfiles = new HashMap<>();
+        passpointProfiles.put("www.test.com_987a69bca26", new ArrayList<>());
+        when(mWifiService.getAllMatchingPasspointProfilesForScanResults(
+                any(List.class))).thenReturn(passpointProfiles);
         InOrder inOrder = inOrder(mWifiService);
 
         mWifiManager.getAllMatchingWifiConfigs(new ArrayList<>());
 
-        inOrder.verify(mWifiService).getAllMatchingFqdnsForScanResults(any(List.class));
+        inOrder.verify(mWifiService).getAllMatchingPasspointProfilesForScanResults(any(List.class));
         inOrder.verify(mWifiService).getWifiConfigsForPasspointProfiles(any(List.class));
     }
 
@@ -1867,7 +1868,7 @@
      * Tests that passing a null Executor to {@link WifiManager#getWifiActivityEnergyInfoAsync}
      * throws an exception.
      */
-    @Test(expected = IllegalArgumentException.class)
+    @Test(expected = NullPointerException.class)
     public void testGetWifiActivityInfoNullExecutor() throws Exception {
         mWifiManager.getWifiActivityEnergyInfoAsync(null, mOnWifiActivityEnergyInfoListener);
     }
@@ -1876,7 +1877,7 @@
      * Tests that passing a null listener to {@link WifiManager#getWifiActivityEnergyInfoAsync}
      * throws an exception.
      */
-    @Test(expected = IllegalArgumentException.class)
+    @Test(expected = NullPointerException.class)
     public void testGetWifiActivityInfoNullListener() throws Exception {
         mWifiManager.getWifiActivityEnergyInfoAsync(mExecutor, null);
     }
@@ -2380,4 +2381,35 @@
         verify(mWifiConnectedNetworkScorer).start(0);
         verify(mWifiConnectedNetworkScorer).stop(10);
     }
+
+    @Test
+    public void testScanThrottle() throws Exception {
+        mWifiManager.setScanThrottleEnabled(true);
+        verify(mWifiService).setScanThrottleEnabled(true);
+
+        when(mWifiService.isScanThrottleEnabled()).thenReturn(false);
+        assertFalse(mWifiManager.isScanThrottleEnabled());
+        verify(mWifiService).isScanThrottleEnabled();
+    }
+
+    @Test
+    public void testAutoWakeup() throws Exception {
+        mWifiManager.setAutoWakeupEnabled(true);
+        verify(mWifiService).setAutoWakeupEnabled(true);
+
+        when(mWifiService.isAutoWakeupEnabled()).thenReturn(false);
+        assertFalse(mWifiManager.isAutoWakeupEnabled());
+        verify(mWifiService).isAutoWakeupEnabled();
+    }
+
+
+    @Test
+    public void testScanAvailable() throws Exception {
+        mWifiManager.setScanAlwaysAvailable(true);
+        verify(mWifiService).setScanAlwaysAvailable(true);
+
+        when(mWifiService.isScanAlwaysAvailable()).thenReturn(false);
+        assertFalse(mWifiManager.isScanAlwaysAvailable());
+        verify(mWifiService).isScanAlwaysAvailable();
+    }
 }
diff --git a/wifi/tests/src/android/net/wifi/WifiNetworkAgentSpecifierTest.java b/wifi/tests/src/android/net/wifi/WifiNetworkAgentSpecifierTest.java
index adc41f0..0233ee2 100644
--- a/wifi/tests/src/android/net/wifi/WifiNetworkAgentSpecifierTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiNetworkAgentSpecifierTest.java
@@ -22,7 +22,6 @@
 
 import android.net.MacAddress;
 import android.net.MatchAllNetworkSpecifier;
-import android.net.NetworkRequest;
 import android.os.Parcel;
 import android.os.PatternMatcher;
 import android.util.Pair;
@@ -36,10 +35,6 @@
  */
 @SmallTest
 public class WifiNetworkAgentSpecifierTest {
-    private static final int TEST_UID = 5;
-    private static final int TEST_UID_1 = 8;
-    private static final String TEST_PACKAGE = "com.test";
-    private static final String TEST_PACKAGE_1 = "com.test.1";
     private static final String TEST_SSID = "Test123";
     private static final String TEST_SSID_PATTERN = "Test";
     private static final String TEST_SSID_1 = "456test";
@@ -71,16 +66,6 @@
     }
 
     /**
-     * Validate that the NetworkAgentSpecifier cannot be used in a {@link NetworkRequest} by apps.
-     */
-    @Test(expected = IllegalStateException.class)
-    public void testWifiNetworkAgentSpecifierNotUsedInNetworkRequest() {
-        WifiNetworkAgentSpecifier specifier = createDefaultNetworkAgentSpecifier();
-
-        specifier.assertValidFromUid(TEST_UID);
-    }
-
-    /**
      * Validate NetworkAgentSpecifier equals with itself.
      * a) Create network agent specifier 1 for WPA_PSK network
      * b) Create network agent specifier 2 with the same params as specifier 1.
@@ -105,15 +90,13 @@
         WifiConfiguration wifiConfiguration1 = createDefaultWifiConfiguration();
         WifiNetworkAgentSpecifier specifier1 =
                 new WifiNetworkAgentSpecifier(
-                        wifiConfiguration1,
-                        TEST_UID, TEST_PACKAGE);
+                        wifiConfiguration1);
 
         WifiConfiguration wifiConfiguration2 = new WifiConfiguration(wifiConfiguration1);
         wifiConfiguration2.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
         WifiNetworkAgentSpecifier specifier2 =
                 new WifiNetworkAgentSpecifier(
-                        wifiConfiguration2,
-                        TEST_UID, TEST_PACKAGE);
+                        wifiConfiguration2);
 
         assertFalse(specifier2.equals(specifier1));
     }
@@ -129,15 +112,13 @@
         WifiConfiguration wifiConfiguration1 = createDefaultWifiConfiguration();
         WifiNetworkAgentSpecifier specifier1 =
                 new WifiNetworkAgentSpecifier(
-                        wifiConfiguration1,
-                        TEST_UID, TEST_PACKAGE);
+                        wifiConfiguration1);
 
         WifiConfiguration wifiConfiguration2 = new WifiConfiguration(wifiConfiguration1);
         wifiConfiguration2.SSID = TEST_SSID_1;
         WifiNetworkAgentSpecifier specifier2 =
                 new WifiNetworkAgentSpecifier(
-                        wifiConfiguration2,
-                        TEST_UID, TEST_PACKAGE);
+                        wifiConfiguration2);
 
         assertFalse(specifier2.equals(specifier1));
     }
@@ -153,15 +134,13 @@
         WifiConfiguration wifiConfiguration1 = createDefaultWifiConfiguration();
         WifiNetworkAgentSpecifier specifier1 =
                 new WifiNetworkAgentSpecifier(
-                        wifiConfiguration1,
-                        TEST_UID, TEST_PACKAGE);
+                        wifiConfiguration1);
 
         WifiConfiguration wifiConfiguration2 = new WifiConfiguration(wifiConfiguration1);
         wifiConfiguration2.BSSID = TEST_BSSID_1;
         WifiNetworkAgentSpecifier specifier2 =
                 new WifiNetworkAgentSpecifier(
-                        wifiConfiguration2,
-                        TEST_UID, TEST_PACKAGE);
+                        wifiConfiguration2);
 
         assertFalse(specifier2.equals(specifier1));
     }
@@ -215,8 +194,7 @@
         WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier(
                 ssidPattern,
                 bssidPattern,
-                wificonfigurationNetworkSpecifier,
-                TEST_UID, TEST_PACKAGE);
+                wificonfigurationNetworkSpecifier);
 
         assertTrue(wifiNetworkSpecifier.satisfiedBy(wifiNetworkAgentSpecifier));
         assertTrue(wifiNetworkAgentSpecifier.satisfiedBy(wifiNetworkSpecifier));
@@ -244,8 +222,7 @@
         WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier(
                 ssidPattern,
                 bssidPattern,
-                wificonfigurationNetworkSpecifier,
-                TEST_UID, TEST_PACKAGE);
+                wificonfigurationNetworkSpecifier);
 
         assertTrue(wifiNetworkSpecifier.satisfiedBy(wifiNetworkAgentSpecifier));
         assertTrue(wifiNetworkAgentSpecifier.satisfiedBy(wifiNetworkSpecifier));
@@ -273,8 +250,7 @@
         WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier(
                 ssidPattern,
                 bssidPattern,
-                wificonfigurationNetworkSpecifier,
-                TEST_UID, TEST_PACKAGE);
+                wificonfigurationNetworkSpecifier);
 
         assertTrue(wifiNetworkSpecifier.satisfiedBy(wifiNetworkAgentSpecifier));
         assertTrue(wifiNetworkAgentSpecifier.satisfiedBy(wifiNetworkSpecifier));
@@ -293,8 +269,7 @@
         wifiConfigurationNetworkAgent.SSID = "\"" + TEST_SSID_1 + "\"";
         WifiNetworkAgentSpecifier wifiNetworkAgentSpecifier =
                 new WifiNetworkAgentSpecifier(
-                        wifiConfigurationNetworkAgent,
-                        TEST_UID, TEST_PACKAGE);
+                        wifiConfigurationNetworkAgent);
 
         PatternMatcher ssidPattern =
                 new PatternMatcher(TEST_SSID_PATTERN, PatternMatcher.PATTERN_PREFIX);
@@ -306,8 +281,7 @@
         WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier(
                 ssidPattern,
                 bssidPattern,
-                wificonfigurationNetworkSpecifier,
-                TEST_UID, TEST_PACKAGE);
+                wificonfigurationNetworkSpecifier);
 
         assertFalse(wifiNetworkSpecifier.satisfiedBy(wifiNetworkAgentSpecifier));
         assertFalse(wifiNetworkAgentSpecifier.satisfiedBy(wifiNetworkSpecifier));
@@ -326,8 +300,7 @@
         wifiConfigurationNetworkAgent.BSSID = TEST_BSSID_1;
         WifiNetworkAgentSpecifier wifiNetworkAgentSpecifier =
                 new WifiNetworkAgentSpecifier(
-                        wifiConfigurationNetworkAgent,
-                        TEST_UID, TEST_PACKAGE);
+                        wifiConfigurationNetworkAgent);
 
         PatternMatcher ssidPattern =
                 new PatternMatcher(".*", PatternMatcher.PATTERN_SIMPLE_GLOB);
@@ -340,8 +313,7 @@
         WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier(
                 ssidPattern,
                 bssidPattern,
-                wificonfigurationNetworkSpecifier,
-                TEST_UID, TEST_PACKAGE);
+                wificonfigurationNetworkSpecifier);
 
         assertFalse(wifiNetworkSpecifier.satisfiedBy(wifiNetworkAgentSpecifier));
         assertFalse(wifiNetworkAgentSpecifier.satisfiedBy(wifiNetworkSpecifier));
@@ -360,8 +332,7 @@
         wifiConfigurationNetworkAgent.BSSID = TEST_BSSID_1;
         WifiNetworkAgentSpecifier wifiNetworkAgentSpecifier =
                 new WifiNetworkAgentSpecifier(
-                        wifiConfigurationNetworkAgent,
-                        TEST_UID, TEST_PACKAGE);
+                        wifiConfigurationNetworkAgent);
 
         PatternMatcher ssidPattern =
                 new PatternMatcher(TEST_SSID_PATTERN, PatternMatcher.PATTERN_PREFIX);
@@ -374,8 +345,7 @@
         WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier(
                 ssidPattern,
                 bssidPattern,
-                wificonfigurationNetworkSpecifier,
-                TEST_UID, TEST_PACKAGE);
+                wificonfigurationNetworkSpecifier);
 
         assertFalse(wifiNetworkSpecifier.satisfiedBy(wifiNetworkAgentSpecifier));
         assertFalse(wifiNetworkAgentSpecifier.satisfiedBy(wifiNetworkSpecifier));
@@ -402,41 +372,12 @@
         WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier(
                 ssidPattern,
                 bssidPattern,
-                wificonfigurationNetworkSpecifier,
-                TEST_UID, TEST_PACKAGE);
+                wificonfigurationNetworkSpecifier);
 
         assertFalse(wifiNetworkSpecifier.satisfiedBy(wifiNetworkAgentSpecifier));
         assertFalse(wifiNetworkAgentSpecifier.satisfiedBy(wifiNetworkSpecifier));
     }
 
-    /**
-     * Validate {@link WifiNetworkAgentSpecifier} with {@link WifiNetworkSpecifier} matching.
-     * a) Create network agent specifier for WPA_PSK network
-     * b) Create network specifier with matching SSID and BSSID pattern, but different UID.
-     * c) Ensure that the agent specifier is not satisfied by specifier.
-     */
-    @Test
-    public void
-            testWifiNetworkAgentSpecifierDoesNotSatisfyNetworkSpecifierWithDifferentUid() {
-        WifiNetworkAgentSpecifier wifiNetworkAgentSpecifier = createDefaultNetworkAgentSpecifier();
-
-        PatternMatcher ssidPattern =
-                new PatternMatcher(TEST_SSID_PATTERN, PatternMatcher.PATTERN_PREFIX);
-        Pair<MacAddress, MacAddress> bssidPattern =
-                Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
-                        MacAddress.fromString(TEST_BSSID_OUI_MASK));
-        WifiConfiguration wificonfigurationNetworkSpecifier = new WifiConfiguration();
-        wificonfigurationNetworkSpecifier.allowedKeyManagement
-                .set(WifiConfiguration.KeyMgmt.WPA_PSK);
-        WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier(
-                ssidPattern,
-                bssidPattern,
-                wificonfigurationNetworkSpecifier,
-                TEST_UID_1, TEST_PACKAGE_1);
-
-        assertFalse(wifiNetworkSpecifier.satisfiedBy(wifiNetworkAgentSpecifier));
-        assertFalse(wifiNetworkAgentSpecifier.satisfiedBy(wifiNetworkSpecifier));
-    }
 
     private WifiConfiguration createDefaultWifiConfiguration() {
         WifiConfiguration wifiConfiguration = new WifiConfiguration();
@@ -448,8 +389,7 @@
     }
 
     private WifiNetworkAgentSpecifier createDefaultNetworkAgentSpecifier() {
-        return new WifiNetworkAgentSpecifier(createDefaultWifiConfiguration(), TEST_UID,
-                TEST_PACKAGE);
+        return new WifiNetworkAgentSpecifier(createDefaultWifiConfiguration());
     }
 
 }
diff --git a/wifi/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java b/wifi/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java
index 1619744..3b67236 100644
--- a/wifi/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java
@@ -29,7 +29,6 @@
 import android.net.NetworkSpecifier;
 import android.os.Parcel;
 import android.os.PatternMatcher;
-import android.os.Process;
 import android.util.Pair;
 
 import androidx.test.filters.SmallTest;
@@ -41,8 +40,6 @@
  */
 @SmallTest
 public class WifiNetworkSpecifierTest {
-    private static final int TEST_UID = 5;
-    private static final String TEST_PACKAGE_NAME = "com.test";
     private static final String TEST_SSID = "Test123";
     private static final String TEST_BSSID_OUI_BASE_ADDRESS = "12:12:12:00:00:00";
     private static final String TEST_BSSID_OUI_MASK = "ff:ff:ff:00:00:00";
@@ -62,7 +59,6 @@
         assertTrue(specifier instanceof WifiNetworkSpecifier);
         WifiNetworkSpecifier wifiNetworkSpecifier = (WifiNetworkSpecifier) specifier;
 
-        assertEquals(Process.myUid(), wifiNetworkSpecifier.requestorUid);
         assertEquals(TEST_SSID, wifiNetworkSpecifier.ssidPatternMatcher.getPath());
         assertEquals(PATTERN_PREFIX, wifiNetworkSpecifier.ssidPatternMatcher.getType());
         assertEquals(WifiManager.ALL_ZEROS_MAC_ADDRESS,
@@ -367,8 +363,7 @@
                 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
                         Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
                                 MacAddress.fromString(TEST_BSSID_OUI_MASK)),
-                        wifiConfiguration,
-                        TEST_UID, TEST_PACKAGE_NAME);
+                        wifiConfiguration);
 
         Parcel parcelW = Parcel.obtain();
         specifier.writeToParcel(parcelW, 0);
@@ -399,8 +394,7 @@
                 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
                         Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
                                 MacAddress.fromString(TEST_BSSID_OUI_MASK)),
-                        wifiConfiguration,
-                        TEST_UID, TEST_PACKAGE_NAME);
+                        wifiConfiguration);
 
         assertTrue(specifier.satisfiedBy(null));
         assertTrue(specifier.satisfiedBy(new MatchAllNetworkSpecifier()));
@@ -422,15 +416,13 @@
                 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
                         Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
                                 MacAddress.fromString(TEST_BSSID_OUI_MASK)),
-                        wifiConfiguration,
-                        TEST_UID, TEST_PACKAGE_NAME);
+                        wifiConfiguration);
 
         WifiNetworkSpecifier specifier2 =
                 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
                         Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
                                 MacAddress.fromString(TEST_BSSID_OUI_MASK)),
-                        wifiConfiguration,
-                        TEST_UID, TEST_PACKAGE_NAME);
+                        wifiConfiguration);
 
         assertTrue(specifier2.satisfiedBy(specifier1));
     }
@@ -451,8 +443,7 @@
                 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
                         Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
                                 MacAddress.fromString(TEST_BSSID_OUI_MASK)),
-                        wifiConfiguration1,
-                        TEST_UID, TEST_PACKAGE_NAME);
+                        wifiConfiguration1);
 
         WifiConfiguration wifiConfiguration2 = new WifiConfiguration();
         wifiConfiguration2.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
@@ -460,8 +451,7 @@
                 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
                         Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
                                 MacAddress.fromString(TEST_BSSID_OUI_MASK)),
-                        wifiConfiguration2,
-                        TEST_UID, TEST_PACKAGE_NAME);
+                        wifiConfiguration2);
 
         assertFalse(specifier2.satisfiedBy(specifier1));
     }
@@ -482,15 +472,13 @@
                 new WifiNetworkSpecifier(new PatternMatcher("", PATTERN_LITERAL),
                         Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
                                 MacAddress.fromString(TEST_BSSID_OUI_MASK)),
-                        wifiConfiguration,
-                        TEST_UID, TEST_PACKAGE_NAME);
+                        wifiConfiguration);
 
         WifiNetworkSpecifier specifier2 =
                 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
                         Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
                                 MacAddress.fromString(TEST_BSSID_OUI_MASK)),
-                        wifiConfiguration,
-                        TEST_UID, TEST_PACKAGE_NAME);
+                        wifiConfiguration);
 
         assertFalse(specifier2.satisfiedBy(specifier1));
     }
@@ -511,44 +499,13 @@
                 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
                         Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
                                 MacAddress.fromString(TEST_BSSID_OUI_MASK)),
-                        wifiConfiguration,
-                        TEST_UID, TEST_PACKAGE_NAME);
+                        wifiConfiguration);
 
         WifiNetworkSpecifier specifier2 =
                 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
                         Pair.create(WifiManager.ALL_ZEROS_MAC_ADDRESS,
                                 WifiManager.ALL_ZEROS_MAC_ADDRESS),
-                        wifiConfiguration,
-                        TEST_UID, TEST_PACKAGE_NAME);
-
-        assertFalse(specifier2.satisfiedBy(specifier1));
-    }
-
-    /**
-     * Validate NetworkSpecifier matching.
-     * a) Create network specifier 1 for WPA_PSK network
-     * b) Create network specifier 2 with different package name .
-     * c) Ensure that the specifier 2 is not satisfied by specifier 1.
-     */
-    @Test
-    public void testWifiNetworkSpecifierDoesNotSatisfyWhenPackageNameDifferent() {
-        WifiConfiguration wifiConfiguration = new WifiConfiguration();
-        wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
-        wifiConfiguration.preSharedKey = TEST_PRESHARED_KEY;
-
-        WifiNetworkSpecifier specifier1 =
-                new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
-                        Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
-                                MacAddress.fromString(TEST_BSSID_OUI_MASK)),
-                        wifiConfiguration,
-                        TEST_UID, TEST_PACKAGE_NAME);
-
-        WifiNetworkSpecifier specifier2 =
-                new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
-                        Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
-                                MacAddress.fromString(TEST_BSSID_OUI_MASK)),
-                        wifiConfiguration,
-                        TEST_UID, TEST_PACKAGE_NAME + "blah");
+                        wifiConfiguration);
 
         assertFalse(specifier2.satisfiedBy(specifier1));
     }
diff --git a/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java b/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java
index af6fb5c..51bf738 100644
--- a/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java
@@ -140,7 +140,7 @@
         assertTrue(suggestion.wifiConfiguration.allowedKeyManagement
                 .get(WifiConfiguration.KeyMgmt.OWE));
         assertNull(suggestion.wifiConfiguration.preSharedKey);
-        assertTrue(suggestion.wifiConfiguration.requirePMF);
+        assertTrue(suggestion.wifiConfiguration.requirePmf);
         assertFalse(suggestion.isUserAllowedToManuallyConnect);
         assertTrue(suggestion.isInitialAutoJoinEnabled);
     }
@@ -163,7 +163,7 @@
                 .get(WifiConfiguration.KeyMgmt.SAE));
         assertEquals("\"" + TEST_PRESHARED_KEY + "\"",
                 suggestion.wifiConfiguration.preSharedKey);
-        assertTrue(suggestion.wifiConfiguration.requirePMF);
+        assertTrue(suggestion.wifiConfiguration.requirePmf);
         assertTrue(suggestion.isUserAllowedToManuallyConnect);
         assertFalse(suggestion.isInitialAutoJoinEnabled);
     }
@@ -191,7 +191,7 @@
                 .get(WifiConfiguration.GroupCipher.GCMP_256));
         assertTrue(suggestion.wifiConfiguration.allowedGroupManagementCiphers
                 .get(WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256));
-        assertTrue(suggestion.wifiConfiguration.requirePMF);
+        assertTrue(suggestion.wifiConfiguration.requirePmf);
         assertNull(suggestion.wifiConfiguration.preSharedKey);
         // allowedSuiteBCiphers are set according to the loaded certificate and cannot be tested
         // here.
diff --git a/wifi/tests/src/android/net/wifi/aware/WifiAwareAgentNetworkSpecifierTest.java b/wifi/tests/src/android/net/wifi/aware/WifiAwareAgentNetworkSpecifierTest.java
index c3b6285..81b02fa 100644
--- a/wifi/tests/src/android/net/wifi/aware/WifiAwareAgentNetworkSpecifierTest.java
+++ b/wifi/tests/src/android/net/wifi/aware/WifiAwareAgentNetworkSpecifierTest.java
@@ -162,17 +162,6 @@
         collector.checkThat("Match unexpected", oldNs.satisfiedBy(newNs), equalTo(false));
     }
 
-    /**
-     * Validate that agent network specifier cannot be used as in network requests - i.e. that
-     * throws an exception when queried for UID validity.
-     */
-    @Test(expected = SecurityException.class)
-    public void testNoUsageInRequest() {
-        WifiAwareAgentNetworkSpecifier dut = new WifiAwareAgentNetworkSpecifier();
-
-        dut.assertValidFromUid(0);
-    }
-
     // utilities
 
     /**
@@ -182,6 +171,6 @@
     WifiAwareNetworkSpecifier getDummyNetworkSpecifier(int clientId) {
         return new WifiAwareNetworkSpecifier(WifiAwareNetworkSpecifier.NETWORK_SPECIFIER_TYPE_OOB,
                 WifiAwareManager.WIFI_AWARE_DATA_PATH_ROLE_INITIATOR, clientId, 0, 0, new byte[6],
-                null, null, 10, 5, 0);
+                null, null, 10, 5);
     }
 }
diff --git a/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java b/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java
index 65fbf5b..c5f9804 100644
--- a/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java
+++ b/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java
@@ -1564,7 +1564,7 @@
         WifiAwareNetworkSpecifier ns = new WifiAwareNetworkSpecifier(NETWORK_SPECIFIER_TYPE_IB,
                 WifiAwareManager.WIFI_AWARE_DATA_PATH_ROLE_RESPONDER, 5, 568, 334,
                 HexEncoding.decode("000102030405".toCharArray(), false),
-                "01234567890123456789012345678901".getBytes(), "blah blah", 666, 4, 10001);
+                "01234567890123456789012345678901".getBytes(), "blah blah", 666, 4);
 
         Parcel parcelW = Parcel.obtain();
         ns.writeToParcel(parcelW, 0);
diff --git a/wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java b/wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java
index ce542c2..638efb9 100644
--- a/wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java
+++ b/wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java
@@ -20,8 +20,11 @@
 
 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 android.net.wifi.hotspot2.pps.Credential;
+import android.net.wifi.hotspot2.pps.HomeSp;
 import android.os.Parcel;
 
 import androidx.test.filters.SmallTest;
@@ -367,16 +370,55 @@
     }
 
     /**
-     * Verify that the unique identifier generated is correct.
+     * Verify that the unique identifier generated is identical for two instances
      *
      * @throws Exception
      */
     @Test
     public void validateUniqueId() throws Exception {
-        PasspointConfiguration config = PasspointTestUtils.createConfig();
-        String uniqueId;
-        uniqueId = config.getUniqueId();
-        assertEquals(uniqueId, config.getHomeSp().getFqdn());
+        PasspointConfiguration config1 = PasspointTestUtils.createConfig();
+        PasspointConfiguration config2 = PasspointTestUtils.createConfig();
+
+        assertEquals(config1.getUniqueId(), config2.getUniqueId());
+    }
+
+    /**
+     * Verify that the unique identifier generated is different for two instances with different
+     * HomeSp node
+     *
+     * @throws Exception
+     */
+    @Test
+    public void validateUniqueIdDifferentHomeSp() throws Exception {
+        PasspointConfiguration config1 = PasspointTestUtils.createConfig();
+
+        // Modify config2's RCOIs to a different set of values
+        PasspointConfiguration config2 = PasspointTestUtils.createConfig();
+        HomeSp homeSp = config2.getHomeSp();
+        homeSp.setRoamingConsortiumOis(new long[] {0xaa, 0xbb});
+        config2.setHomeSp(homeSp);
+
+        assertNotEquals(config1.getUniqueId(), config2.getUniqueId());
+    }
+
+    /**
+     * Verify that the unique identifier generated is different for two instances with different
+     * Credential node
+     *
+     * @throws Exception
+     */
+    @Test
+    public void validateUniqueIdDifferentCredential() throws Exception {
+        PasspointConfiguration config1 = PasspointTestUtils.createConfig();
+
+        // Modify config2's RCOIs to a different set of values
+        PasspointConfiguration config2 = PasspointTestUtils.createConfig();
+        Credential credential = config2.getCredential();
+        credential.setRealm("realm2.example.com");
+        credential.getSimCredential().setImsi("350460*");
+        config2.setCredential(credential);
+
+        assertNotEquals(config1.getUniqueId(), config2.getUniqueId());
     }
 
     /**
@@ -384,17 +426,11 @@
      *
      * @throws Exception
      */
-    @Test
+    @Test (expected = IllegalStateException.class)
     public void validateUniqueIdExceptionWithEmptyHomeSp() throws Exception {
         PasspointConfiguration config = PasspointTestUtils.createConfig();
         config.setHomeSp(null);
-        boolean exceptionCaught = false;
-        try {
-            String uniqueId = config.getUniqueId();
-        } catch (IllegalStateException e) {
-            exceptionCaught = true;
-        }
-        assertTrue(exceptionCaught);
+        String uniqueId = config.getUniqueId();
     }
 
     /**
@@ -403,16 +439,10 @@
      *
      * @throws Exception
      */
-    @Test
+    @Test (expected = IllegalStateException.class)
     public void validateUniqueIdExceptionWithEmptyCredential() throws Exception {
         PasspointConfiguration config = PasspointTestUtils.createConfig();
         config.setCredential(null);
-        boolean exceptionCaught = false;
-        try {
-            String uniqueId = config.getUniqueId();
-        } catch (IllegalStateException e) {
-            exceptionCaught = true;
-        }
-        assertTrue(exceptionCaught);
+        String uniqueId = config.getUniqueId();
     }
 }
diff --git a/wifi/tests/src/android/net/wifi/nl80211/DeviceWiphyCapabilitiesTest.java b/wifi/tests/src/android/net/wifi/nl80211/DeviceWiphyCapabilitiesTest.java
new file mode 100644
index 0000000..7b900fe
--- /dev/null
+++ b/wifi/tests/src/android/net/wifi/nl80211/DeviceWiphyCapabilitiesTest.java
@@ -0,0 +1,88 @@
+/*
+ * 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.net.wifi.nl80211;
+
+import static org.junit.Assert.assertEquals;
+
+import android.net.wifi.ScanResult;
+import android.os.Parcel;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit tests for {@link android.net.wifi.nl80211.DeviceWiphyCapabilities}.
+ */
+@SmallTest
+public class DeviceWiphyCapabilitiesTest {
+    @Before
+    public void setUp() {}
+
+    /**
+     *  DeviceWiphyCapabilities object can be serialized and deserialized, while keeping the
+     *  values unchanged.
+     */
+    @Test
+    public void canSerializeAndDeserialize() {
+        DeviceWiphyCapabilities capa = new DeviceWiphyCapabilities();
+
+        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11N, true);
+        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AC, true);
+        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AX, false);
+        capa.setChannelWidthSupported(ScanResult.CHANNEL_WIDTH_160MHZ, true);
+        capa.setChannelWidthSupported(ScanResult.CHANNEL_WIDTH_80MHZ_PLUS_MHZ, false);
+        capa.setMaxNumberTxSpatialStreams(2);
+        capa.setMaxNumberRxSpatialStreams(1);
+
+        Parcel parcel = Parcel.obtain();
+        capa.writeToParcel(parcel, 0);
+        // Rewind the pointer to the head of the parcel.
+        parcel.setDataPosition(0);
+        DeviceWiphyCapabilities capaDeserialized =
+                DeviceWiphyCapabilities.CREATOR.createFromParcel(parcel);
+
+        assertEquals(capa, capaDeserialized);
+        assertEquals(capa.hashCode(), capaDeserialized.hashCode());
+    }
+
+    /**
+     * Test mapping wifi standard support into channel width support
+     */
+    @Test
+    public void testMappingWifiStandardIntoChannelWidthSupport() {
+        DeviceWiphyCapabilities capa = new DeviceWiphyCapabilities();
+
+        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11N, false);
+        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AC, false);
+        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AX, false);
+        assertEquals(true, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_20MHZ));
+        assertEquals(false, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_40MHZ));
+        assertEquals(false, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_80MHZ));
+
+        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11N, true);
+        assertEquals(true, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_20MHZ));
+        assertEquals(true, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_40MHZ));
+        assertEquals(false, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_80MHZ));
+
+        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AC, true);
+        assertEquals(true, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_20MHZ));
+        assertEquals(true, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_40MHZ));
+        assertEquals(true, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_80MHZ));
+    }
+}
diff --git a/wifi/tests/src/android/net/wifi/nl80211/NativeScanResultTest.java b/wifi/tests/src/android/net/wifi/nl80211/NativeScanResultTest.java
new file mode 100644
index 0000000..8ddd189
--- /dev/null
+++ b/wifi/tests/src/android/net/wifi/nl80211/NativeScanResultTest.java
@@ -0,0 +1,87 @@
+/*
+ * 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 android.net.wifi.nl80211;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import android.os.Parcel;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * Unit tests for {@link android.net.wifi.nl80211.NativeScanResult}.
+ */
+@SmallTest
+public class NativeScanResultTest {
+
+    private static final byte[] TEST_SSID =
+            new byte[] {'G', 'o', 'o', 'g', 'l', 'e', 'G', 'u', 'e', 's', 't'};
+    private static final byte[] TEST_BSSID =
+            new byte[] {(byte) 0x12, (byte) 0xef, (byte) 0xa1,
+                        (byte) 0x2c, (byte) 0x97, (byte) 0x8b};
+    private static final byte[] TEST_INFO_ELEMENT =
+            new byte[] {(byte) 0x01, (byte) 0x03, (byte) 0x12, (byte) 0xbe, (byte) 0xff};
+    private static final int TEST_FREQUENCY = 2456;
+    private static final int TEST_SIGNAL_MBM = -45;
+    private static final long TEST_TSF = 34455441;
+    private static final int TEST_CAPABILITY = (0x1 << 2) | (0x1 << 5);
+    private static final boolean TEST_ASSOCIATED = true;
+    private static final int[] RADIO_CHAIN_IDS = { 0, 1 };
+    private static final int[] RADIO_CHAIN_LEVELS = { -56, -65 };
+
+    /**
+     *  NativeScanResult object can be serialized and deserialized, while keeping the
+     *  values unchanged.
+     */
+    @Test
+    public void canSerializeAndDeserialize() {
+        NativeScanResult scanResult = new NativeScanResult();
+        scanResult.ssid = TEST_SSID;
+        scanResult.bssid = TEST_BSSID;
+        scanResult.infoElement = TEST_INFO_ELEMENT;
+        scanResult.frequency = TEST_FREQUENCY;
+        scanResult.signalMbm = TEST_SIGNAL_MBM;
+        scanResult.tsf = TEST_TSF;
+        scanResult.capability = TEST_CAPABILITY;
+        scanResult.associated = TEST_ASSOCIATED;
+        scanResult.radioChainInfos = new ArrayList<>(Arrays.asList(
+                new RadioChainInfo(RADIO_CHAIN_IDS[0], RADIO_CHAIN_LEVELS[0]),
+                new RadioChainInfo(RADIO_CHAIN_IDS[1], RADIO_CHAIN_LEVELS[1])));
+        Parcel parcel = Parcel.obtain();
+        scanResult.writeToParcel(parcel, 0);
+        // Rewind the pointer to the head of the parcel.
+        parcel.setDataPosition(0);
+        NativeScanResult scanResultDeserialized = NativeScanResult.CREATOR.createFromParcel(parcel);
+
+        assertArrayEquals(scanResult.ssid, scanResultDeserialized.ssid);
+        assertArrayEquals(scanResult.bssid, scanResultDeserialized.bssid);
+        assertArrayEquals(scanResult.infoElement, scanResultDeserialized.infoElement);
+        assertEquals(scanResult.frequency, scanResultDeserialized.frequency);
+        assertEquals(scanResult.signalMbm, scanResultDeserialized.signalMbm);
+        assertEquals(scanResult.tsf, scanResultDeserialized.tsf);
+        assertEquals(scanResult.capability, scanResultDeserialized.capability);
+        assertEquals(scanResult.associated, scanResultDeserialized.associated);
+        assertTrue(scanResult.radioChainInfos.containsAll(scanResultDeserialized.radioChainInfos));
+    }
+}
diff --git a/wifi/tests/src/android/net/wifi/nl80211/PnoSettingsTest.java b/wifi/tests/src/android/net/wifi/nl80211/PnoSettingsTest.java
new file mode 100644
index 0000000..dec1db8
--- /dev/null
+++ b/wifi/tests/src/android/net/wifi/nl80211/PnoSettingsTest.java
@@ -0,0 +1,112 @@
+/*
+ * 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 android.net.wifi.nl80211;
+
+import static org.junit.Assert.assertEquals;
+
+import android.os.Parcel;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+
+/**
+ * Unit tests for {@link android.net.wifi.nl80211.PnoSettings}.
+ */
+@SmallTest
+public class PnoSettingsTest {
+
+    private static final byte[] TEST_SSID_1 =
+            new byte[] {'G', 'o', 'o', 'g', 'l', 'e', 'G', 'u', 'e', 's', 't'};
+    private static final byte[] TEST_SSID_2 =
+            new byte[] {'A', 'n', 'd', 'r', 'o', 'i', 'd', 'T', 'e', 's', 't'};
+    private static final int[] TEST_FREQUENCIES_1 = {};
+    private static final int[] TEST_FREQUENCIES_2 = {2500, 5124};
+    private static final int TEST_INTERVAL_MS = 30000;
+    private static final int TEST_MIN_2G_RSSI = -60;
+    private static final int TEST_MIN_5G_RSSI = -65;
+    private static final int TEST_VALUE = 42;
+
+    private PnoNetwork mPnoNetwork1;
+    private PnoNetwork mPnoNetwork2;
+
+    @Before
+    public void setUp() {
+        mPnoNetwork1 = new PnoNetwork();
+        mPnoNetwork1.setSsid(TEST_SSID_1);
+        mPnoNetwork1.setHidden(true);
+        mPnoNetwork1.setFrequenciesMhz(TEST_FREQUENCIES_1);
+
+        mPnoNetwork2 = new PnoNetwork();
+        mPnoNetwork2.setSsid(TEST_SSID_2);
+        mPnoNetwork2.setHidden(false);
+        mPnoNetwork2.setFrequenciesMhz(TEST_FREQUENCIES_2);
+    }
+
+    /**
+     *  PnoSettings object can be serialized and deserialized, while keeping the
+     *  values unchanged.
+     */
+    @Test
+    public void canSerializeAndDeserialize() {
+        PnoSettings pnoSettings = new PnoSettings();
+        pnoSettings.setIntervalMillis(TEST_INTERVAL_MS);
+        pnoSettings.setMin2gRssiDbm(TEST_MIN_2G_RSSI);
+        pnoSettings.setMin5gRssiDbm(TEST_MIN_5G_RSSI);
+        pnoSettings.setPnoNetworks(new ArrayList<>(Arrays.asList(mPnoNetwork1, mPnoNetwork2)));
+
+        Parcel parcel = Parcel.obtain();
+        pnoSettings.writeToParcel(parcel, 0);
+        // Rewind the pointer to the head of the parcel.
+        parcel.setDataPosition(0);
+        PnoSettings pnoSettingsDeserialized = PnoSettings.CREATOR.createFromParcel(parcel);
+
+        assertEquals(pnoSettings, pnoSettingsDeserialized);
+        assertEquals(pnoSettings.hashCode(), pnoSettingsDeserialized.hashCode());
+    }
+
+    /**
+     * Tests usage of {@link PnoSettings} as a HashMap key type.
+     */
+    @Test
+    public void testAsHashMapKey() {
+        PnoSettings pnoSettings1 = new PnoSettings();
+        pnoSettings1.setIntervalMillis(TEST_INTERVAL_MS);
+        pnoSettings1.setMin2gRssiDbm(TEST_MIN_2G_RSSI);
+        pnoSettings1.setMin5gRssiDbm(TEST_MIN_5G_RSSI);
+        pnoSettings1.setPnoNetworks(new ArrayList<>(Arrays.asList(mPnoNetwork1, mPnoNetwork2)));
+
+        PnoSettings pnoSettings2 = new PnoSettings();
+        pnoSettings2.setIntervalMillis(TEST_INTERVAL_MS);
+        pnoSettings2.setMin2gRssiDbm(TEST_MIN_2G_RSSI);
+        pnoSettings2.setMin5gRssiDbm(TEST_MIN_5G_RSSI);
+        pnoSettings2.setPnoNetworks(new ArrayList<>(Arrays.asList(mPnoNetwork1, mPnoNetwork2)));
+
+        assertEquals(pnoSettings1, pnoSettings2);
+        assertEquals(pnoSettings1.hashCode(), pnoSettings2.hashCode());
+
+        HashMap<PnoSettings, Integer> map = new HashMap<>();
+        map.put(pnoSettings1, TEST_VALUE);
+
+        assertEquals(TEST_VALUE, map.get(pnoSettings2).intValue());
+    }
+}
diff --git a/wifi/tests/src/android/net/wifi/nl80211/SingleScanSettingsTest.java b/wifi/tests/src/android/net/wifi/nl80211/SingleScanSettingsTest.java
new file mode 100644
index 0000000..9059208
--- /dev/null
+++ b/wifi/tests/src/android/net/wifi/nl80211/SingleScanSettingsTest.java
@@ -0,0 +1,116 @@
+/*
+ * 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 android.net.wifi.nl80211;
+
+import static org.junit.Assert.assertEquals;
+
+import android.os.Parcel;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+
+/**
+ * Unit tests for {@link android.net.wifi.nl80211.SingleScanSettingsResult}.
+ */
+@SmallTest
+public class SingleScanSettingsTest {
+
+    private static final byte[] TEST_SSID_1 =
+            new byte[] {'G', 'o', 'o', 'g', 'l', 'e', 'G', 'u', 'e', 's', 't'};
+    private static final byte[] TEST_SSID_2 =
+            new byte[] {'A', 'n', 'd', 'r', 'o', 'i', 'd', 'T', 'e', 's', 't'};
+    private static final int TEST_FREQUENCY_1 = 2456;
+    private static final int TEST_FREQUENCY_2 = 5215;
+    private static final int TEST_VALUE = 42;
+
+    private ChannelSettings mChannelSettings1;
+    private ChannelSettings mChannelSettings2;
+    private HiddenNetwork mHiddenNetwork1;
+    private HiddenNetwork mHiddenNetwork2;
+
+    @Before
+    public void setUp() {
+        mChannelSettings1 = new ChannelSettings();
+        mChannelSettings1.frequency = TEST_FREQUENCY_1;
+        mChannelSettings2 = new ChannelSettings();
+        mChannelSettings2.frequency = TEST_FREQUENCY_2;
+
+        mHiddenNetwork1 = new HiddenNetwork();
+        mHiddenNetwork1.ssid = TEST_SSID_1;
+        mHiddenNetwork2 = new HiddenNetwork();
+        mHiddenNetwork2.ssid = TEST_SSID_2;
+    }
+
+    /**
+     *  SingleScanSettings object can be serialized and deserialized, while keeping the
+     *  values unchanged.
+     */
+    @Test
+    public void canSerializeAndDeserialize() {
+        SingleScanSettings scanSettings = new SingleScanSettings();
+        scanSettings.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
+
+        scanSettings.channelSettings =
+                new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
+        scanSettings.hiddenNetworks =
+                new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
+
+        Parcel parcel = Parcel.obtain();
+        scanSettings.writeToParcel(parcel, 0);
+        // Rewind the pointer to the head of the parcel.
+        parcel.setDataPosition(0);
+        SingleScanSettings scanSettingsDeserialized =
+                SingleScanSettings.CREATOR.createFromParcel(parcel);
+
+        assertEquals(scanSettings, scanSettingsDeserialized);
+        assertEquals(scanSettings.hashCode(), scanSettingsDeserialized.hashCode());
+    }
+
+    /**
+     * Tests usage of {@link SingleScanSettings} as a HashMap key type.
+     */
+    @Test
+    public void testAsHashMapKey() {
+        SingleScanSettings scanSettings1 = new SingleScanSettings();
+        scanSettings1.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
+        scanSettings1.channelSettings =
+                new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
+        scanSettings1.hiddenNetworks =
+                new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
+
+        SingleScanSettings scanSettings2 = new SingleScanSettings();
+        scanSettings2.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
+        scanSettings2.channelSettings =
+                new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
+        scanSettings2.hiddenNetworks =
+                new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
+
+        assertEquals(scanSettings1, scanSettings2);
+        assertEquals(scanSettings1.hashCode(), scanSettings2.hashCode());
+
+        HashMap<SingleScanSettings, Integer> map = new HashMap<>();
+        map.put(scanSettings1, TEST_VALUE);
+
+        assertEquals(TEST_VALUE, map.get(scanSettings2).intValue());
+    }
+}
diff --git a/wifi/tests/src/android/net/wifi/nl80211/WifiNl80211ManagerTest.java b/wifi/tests/src/android/net/wifi/nl80211/WifiNl80211ManagerTest.java
new file mode 100644
index 0000000..9ee0acb
--- /dev/null
+++ b/wifi/tests/src/android/net/wifi/nl80211/WifiNl80211ManagerTest.java
@@ -0,0 +1,1265 @@
+/*
+ * 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 android.net.wifi.nl80211;
+
+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.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyLong;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doThrow;
+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.app.AlarmManager;
+import android.app.test.TestAlarmManager;
+import android.content.Context;
+import android.net.MacAddress;
+import android.net.wifi.ScanResult;
+import android.net.wifi.SoftApInfo;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiScanner;
+import android.net.wifi.util.HexEncoding;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.test.TestLooper;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.AdditionalMatchers;
+import org.mockito.ArgumentCaptor;
+import org.mockito.ArgumentMatcher;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.CharacterCodingException;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Unit tests for {@link android.net.wifi.nl80211.WifiNl80211Manager}.
+ */
+@SmallTest
+public class WifiNl80211ManagerTest {
+    @Mock
+    private IWificond mWificond;
+    @Mock
+    private IBinder mWifiCondBinder;
+    @Mock
+    private IClientInterface mClientInterface;
+    @Mock
+    private IWifiScannerImpl mWifiScannerImpl;
+    @Mock
+    private IApInterface mApInterface;
+    @Mock
+    private WifiNl80211Manager.SoftApCallback mSoftApListener;
+    @Mock
+    private WifiNl80211Manager.SendMgmtFrameCallback mSendMgmtFrameCallback;
+    @Mock
+    private WifiNl80211Manager.ScanEventCallback mNormalScanCallback;
+    @Mock
+    private WifiNl80211Manager.ScanEventCallback mPnoScanCallback;
+    @Mock
+    private WifiNl80211Manager.PnoScanRequestCallback mPnoScanRequestCallback;
+    @Mock
+    private Context mContext;
+    private TestLooper mLooper;
+    private TestAlarmManager mTestAlarmManager;
+    private AlarmManager mAlarmManager;
+    private WifiNl80211Manager mWificondControl;
+    private static final String TEST_INTERFACE_NAME = "test_wlan_if";
+    private static final String TEST_INTERFACE_NAME1 = "test_wlan_if1";
+    private static final String TEST_INVALID_INTERFACE_NAME = "asdf";
+    private static final byte[] TEST_SSID =
+            new byte[]{'G', 'o', 'o', 'g', 'l', 'e', 'G', 'u', 'e', 's', 't'};
+    private static final byte[] TEST_PSK =
+            new byte[]{'T', 'e', 's', 't'};
+
+    private static final Set<Integer> SCAN_FREQ_SET =
+            new HashSet<Integer>() {{
+                add(2410);
+                add(2450);
+                add(5050);
+                add(5200);
+            }};
+    private static final String TEST_QUOTED_SSID_1 = "\"testSsid1\"";
+    private static final String TEST_QUOTED_SSID_2 = "\"testSsid2\"";
+    private static final int[] TEST_FREQUENCIES_1 = {};
+    private static final int[] TEST_FREQUENCIES_2 = {2500, 5124};
+    private static final MacAddress TEST_RAW_MAC_BYTES = MacAddress.fromBytes(
+            new byte[]{0x00, 0x01, 0x02, 0x03, 0x04, 0x05});
+
+    private static final List<byte[]> SCAN_HIDDEN_NETWORK_SSID_LIST =
+            new ArrayList<byte[]>() {{
+                add(LocalNativeUtil.byteArrayFromArrayList(
+                        LocalNativeUtil.decodeSsid(TEST_QUOTED_SSID_1)));
+                add(LocalNativeUtil.byteArrayFromArrayList(
+                        LocalNativeUtil.decodeSsid(TEST_QUOTED_SSID_2)));
+            }};
+
+    private static final PnoSettings TEST_PNO_SETTINGS = new PnoSettings();
+    static {
+        TEST_PNO_SETTINGS.setIntervalMillis(6000);
+        List<PnoNetwork> initPnoNetworks = new ArrayList<>();
+        PnoNetwork network = new PnoNetwork();
+        network.setSsid(LocalNativeUtil.byteArrayFromArrayList(
+                LocalNativeUtil.decodeSsid(TEST_QUOTED_SSID_1)));
+        network.setHidden(true);
+        network.setFrequenciesMhz(TEST_FREQUENCIES_1);
+        initPnoNetworks.add(network);
+        network.setSsid(LocalNativeUtil.byteArrayFromArrayList(
+                LocalNativeUtil.decodeSsid(TEST_QUOTED_SSID_2)));
+        network.setHidden(false);
+        network.setFrequenciesMhz(TEST_FREQUENCIES_2);
+        initPnoNetworks.add(network);
+        TEST_PNO_SETTINGS.setPnoNetworks(initPnoNetworks);
+    }
+
+    private static final int TEST_MCS_RATE = 5;
+    private static final int TEST_SEND_MGMT_FRAME_ELAPSED_TIME_MS = 100;
+    private static final byte[] TEST_PROBE_FRAME = {
+            0x40, 0x00, 0x3c, 0x00, (byte) 0xa8, (byte) 0xbd, 0x27, 0x5b,
+            0x33, 0x72, (byte) 0xf4, (byte) 0xf5, (byte) 0xe8, 0x51, (byte) 0x9e, 0x09,
+            (byte) 0xa8, (byte) 0xbd, 0x27, 0x5b, 0x33, 0x72, (byte) 0xb0, 0x66,
+            0x00, 0x00
+    };
+
+    @Before
+    public void setUp() throws Exception {
+        // Setup mocks for successful WificondControl operation. Failure case mocks should be
+        // created in specific tests
+        MockitoAnnotations.initMocks(this);
+
+        mTestAlarmManager = new TestAlarmManager();
+        mAlarmManager = mTestAlarmManager.getAlarmManager();
+        when(mContext.getSystemServiceName(AlarmManager.class)).thenReturn(Context.ALARM_SERVICE);
+        when(mContext.getSystemService(AlarmManager.class)).thenReturn(mAlarmManager);
+
+        mLooper = new TestLooper();
+        when(mContext.getMainLooper()).thenReturn(mLooper.getLooper());
+
+        when(mWificond.asBinder()).thenReturn(mWifiCondBinder);
+        when(mClientInterface.getWifiScannerImpl()).thenReturn(mWifiScannerImpl);
+        when(mWificond.createClientInterface(any())).thenReturn(mClientInterface);
+        when(mWificond.createApInterface(any())).thenReturn(mApInterface);
+        when(mWificond.tearDownClientInterface(any())).thenReturn(true);
+        when(mWificond.tearDownApInterface(any())).thenReturn(true);
+        when(mClientInterface.getWifiScannerImpl()).thenReturn(mWifiScannerImpl);
+        when(mClientInterface.getInterfaceName()).thenReturn(TEST_INTERFACE_NAME);
+        mWificondControl = new WifiNl80211Manager(mContext, mWificond);
+        assertEquals(true,
+                mWificondControl.setupInterfaceForClientMode(TEST_INTERFACE_NAME, Runnable::run,
+                        mNormalScanCallback, mPnoScanCallback));
+    }
+
+    /**
+     * Verifies that setupInterfaceForClientMode(TEST_INTERFACE_NAME) calls Wificond.
+     */
+    @Test
+    public void testSetupInterfaceForClientMode() throws Exception {
+        when(mWificond.createClientInterface(TEST_INTERFACE_NAME)).thenReturn(mClientInterface);
+        verify(mWificond).createClientInterface(TEST_INTERFACE_NAME);
+    }
+
+    /**
+     * Verifies that setupInterfaceForClientMode(TEST_INTERFACE_NAME) calls subscribeScanEvents().
+     */
+    @Test
+    public void testSetupInterfaceForClientModeCallsScanEventSubscripiton() throws Exception {
+        verify(mWifiScannerImpl).subscribeScanEvents(any(IScanEvent.class));
+    }
+
+    /**
+     * Verifies that tearDownClientInterface(TEST_INTERFACE_NAME) calls Wificond.
+     */
+    @Test
+    public void testTeardownClientInterface() throws Exception {
+        when(mWificond.tearDownClientInterface(TEST_INTERFACE_NAME)).thenReturn(true);
+
+        assertTrue(mWificondControl.tearDownClientInterface(TEST_INTERFACE_NAME));
+        verify(mWifiScannerImpl).unsubscribeScanEvents();
+        verify(mWifiScannerImpl).unsubscribePnoScanEvents();
+        verify(mWificond).tearDownClientInterface(TEST_INTERFACE_NAME);
+    }
+
+    /**
+     * Verifies that tearDownClientInterface(TEST_INTERFACE_NAME) calls Wificond.
+     */
+    @Test
+    public void testTeardownClientInterfaceOnInvalidIface() throws Exception {
+        when(mWificond.tearDownClientInterface(TEST_INTERFACE_NAME1)).thenReturn(true);
+
+        assertFalse(mWificondControl.tearDownClientInterface(TEST_INTERFACE_NAME1));
+        verify(mWifiScannerImpl, never()).unsubscribeScanEvents();
+        verify(mWifiScannerImpl, never()).unsubscribePnoScanEvents();
+        verify(mWificond, never()).tearDownClientInterface(any());
+    }
+
+    /**
+     * Verifies that tearDownClientInterface(TEST_INTERFACE_NAME) calls Wificond.
+     */
+    @Test
+    public void testTeardownClientInterfaceFailDueToExceptionScannerUnsubscribe() throws Exception {
+        when(mWificond.tearDownClientInterface(TEST_INTERFACE_NAME)).thenReturn(true);
+        doThrow(new RemoteException()).when(mWifiScannerImpl).unsubscribeScanEvents();
+
+        assertFalse(mWificondControl.tearDownClientInterface(TEST_INTERFACE_NAME));
+        verify(mWifiScannerImpl).unsubscribeScanEvents();
+        verify(mWifiScannerImpl, never()).unsubscribePnoScanEvents();
+        verify(mWificond, never()).tearDownClientInterface(TEST_INTERFACE_NAME);
+    }
+
+    /**
+     * Verifies that tearDownClientInterface(TEST_INTERFACE_NAME) calls Wificond.
+     */
+    @Test
+    public void testTeardownClientInterfaceErrorWhenWificondFailed() throws Exception {
+        when(mWificond.tearDownClientInterface(TEST_INTERFACE_NAME)).thenReturn(false);
+
+        assertFalse(mWificondControl.tearDownClientInterface(TEST_INTERFACE_NAME));
+        verify(mWifiScannerImpl).unsubscribeScanEvents();
+        verify(mWifiScannerImpl).unsubscribePnoScanEvents();
+        verify(mWificond).tearDownClientInterface(TEST_INTERFACE_NAME);
+    }
+
+    /**
+     * Verifies that the client handles are cleared after teardown.
+     */
+    @Test
+    public void testTeardownClientInterfaceClearsHandles() throws Exception {
+        testTeardownClientInterface();
+
+        assertNull(mWificondControl.signalPoll(TEST_INTERFACE_NAME));
+        verify(mClientInterface, never()).signalPoll();
+
+        assertFalse(mWificondControl.startScan(
+                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_LATENCY,
+                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST));
+        verify(mWifiScannerImpl, never()).scan(any());
+    }
+
+    /**
+     * Verifies that setupInterfaceForSoftApMode(TEST_INTERFACE_NAME) calls wificond.
+     */
+    @Test
+    public void testSetupInterfaceForSoftApMode() throws Exception {
+        when(mWificond.createApInterface(TEST_INTERFACE_NAME)).thenReturn(mApInterface);
+
+        assertEquals(true, mWificondControl.setupInterfaceForSoftApMode(TEST_INTERFACE_NAME));
+        verify(mWificond).createApInterface(TEST_INTERFACE_NAME);
+    }
+
+    /**
+     * Verifies that setupInterfaceForSoftAp() returns null when wificond is not started.
+     */
+    @Test
+    public void testSetupInterfaceForSoftApModeErrorWhenWificondIsNotStarted() throws Exception {
+        // Invoke wificond death handler to clear the handle.
+        mWificondControl.binderDied();
+        mLooper.dispatchAll();
+
+        assertEquals(false, mWificondControl.setupInterfaceForSoftApMode(TEST_INTERFACE_NAME));
+    }
+
+    /**
+     * Verifies that setupInterfaceForSoftApMode(TEST_INTERFACE_NAME) returns null when wificond
+     * failed to setup AP interface.
+     */
+    @Test
+    public void testSetupInterfaceForSoftApModeErrorWhenWificondFailedToSetupInterface()
+            throws Exception {
+        when(mWificond.createApInterface(TEST_INTERFACE_NAME)).thenReturn(null);
+
+        assertEquals(false, mWificondControl.setupInterfaceForSoftApMode(TEST_INTERFACE_NAME));
+    }
+
+    /**
+     * Verifies that tearDownClientInterface(TEST_INTERFACE_NAME) calls Wificond.
+     */
+    @Test
+    public void testTeardownSoftApInterface() throws Exception {
+        testSetupInterfaceForSoftApMode();
+        when(mWificond.tearDownApInterface(TEST_INTERFACE_NAME)).thenReturn(true);
+
+        assertTrue(mWificondControl.tearDownSoftApInterface(TEST_INTERFACE_NAME));
+        verify(mWificond).tearDownApInterface(TEST_INTERFACE_NAME);
+    }
+
+    /**
+     * Verifies that tearDownSoftapInterface(TEST_INTERFACE_NAME) calls Wificond.
+     */
+    @Test
+    public void testTeardownSoftApInterfaceOnInvalidIface() throws Exception {
+        testSetupInterfaceForSoftApMode();
+        when(mWificond.tearDownApInterface(TEST_INTERFACE_NAME1)).thenReturn(true);
+
+        assertFalse(mWificondControl.tearDownSoftApInterface(TEST_INTERFACE_NAME1));
+        verify(mWificond, never()).tearDownApInterface(any());
+    }
+
+    /**
+     * Verifies that tearDownClientInterface(TEST_INTERFACE_NAME) calls Wificond.
+     */
+    @Test
+    public void testTeardownSoftApInterfaceErrorWhenWificondFailed() throws Exception {
+        testSetupInterfaceForSoftApMode();
+        when(mWificond.tearDownApInterface(TEST_INTERFACE_NAME)).thenReturn(false);
+
+        assertFalse(mWificondControl.tearDownSoftApInterface(TEST_INTERFACE_NAME));
+        verify(mWificond).tearDownApInterface(TEST_INTERFACE_NAME);
+    }
+
+    /**
+     * Verifies that the SoftAp handles are cleared after teardown.
+     */
+    @Test
+    public void testTeardownSoftApInterfaceClearsHandles() throws Exception {
+        testTeardownSoftApInterface();
+
+        assertFalse(mWificondControl.registerApCallback(
+                TEST_INTERFACE_NAME, Runnable::run, mSoftApListener));
+        verify(mApInterface, never()).registerCallback(any());
+    }
+
+    /**
+     * Verifies that we can setup concurrent interfaces.
+     */
+    @Test
+    public void testSetupMultipleInterfaces() throws Exception {
+        when(mWificond.createApInterface(TEST_INTERFACE_NAME1)).thenReturn(mApInterface);
+
+        assertEquals(true, mWificondControl.setupInterfaceForSoftApMode(TEST_INTERFACE_NAME1));
+
+        verify(mWificond).createClientInterface(TEST_INTERFACE_NAME);
+        verify(mWificond).createApInterface(TEST_INTERFACE_NAME1);
+    }
+
+    /**
+     * Verifies that we can setup concurrent interfaces.
+     */
+    @Test
+    public void testTeardownMultipleInterfaces() throws Exception {
+        testSetupMultipleInterfaces();
+        assertTrue(mWificondControl.tearDownClientInterface(TEST_INTERFACE_NAME));
+        assertTrue(mWificondControl.tearDownSoftApInterface(TEST_INTERFACE_NAME1));
+
+        verify(mWificond).tearDownClientInterface(TEST_INTERFACE_NAME);
+        verify(mWificond).tearDownApInterface(TEST_INTERFACE_NAME1);
+    }
+
+    /**
+     * Verifies that tearDownInterfaces() calls wificond.
+     */
+    @Test
+    public void testTearDownInterfaces() throws Exception {
+        assertTrue(mWificondControl.tearDownInterfaces());
+        verify(mWificond).tearDownInterfaces();
+    }
+
+    /**
+     * Verifies that tearDownInterfaces() calls unsubscribeScanEvents() when there was
+     * a configured client interface.
+     */
+    @Test
+    public void testTearDownInterfacesRemovesScanEventSubscription() throws Exception {
+        assertTrue(mWificondControl.tearDownInterfaces());
+        verify(mWifiScannerImpl).unsubscribeScanEvents();
+    }
+
+    /**
+     * Verifies that tearDownInterfaces() returns false when wificond is not started.
+     */
+    @Test
+    public void testTearDownInterfacesErrorWhenWificondIsNotStarterd() throws Exception {
+        // Invoke wificond death handler to clear the handle.
+        mWificondControl.binderDied();
+        mLooper.dispatchAll();
+        assertFalse(mWificondControl.tearDownInterfaces());
+    }
+
+    /**
+     * Verifies that signalPoll() calls wificond.
+     */
+    @Test
+    public void testSignalPoll() throws Exception {
+        when(mWificond.createClientInterface(TEST_INTERFACE_NAME)).thenReturn(mClientInterface);
+
+        mWificondControl.setupInterfaceForClientMode(TEST_INTERFACE_NAME, Runnable::run,
+                mNormalScanCallback, mPnoScanCallback);
+        mWificondControl.signalPoll(TEST_INTERFACE_NAME);
+        verify(mClientInterface).signalPoll();
+    }
+
+    /**
+     * Verifies that signalPoll() returns null when there is no configured client interface.
+     */
+    @Test
+    public void testSignalPollErrorWhenNoClientInterfaceConfigured() throws Exception {
+        when(mWificond.createClientInterface(TEST_INTERFACE_NAME)).thenReturn(mClientInterface);
+
+        // Configure client interface.
+        assertEquals(true, mWificondControl.setupInterfaceForClientMode(TEST_INTERFACE_NAME,
+                Runnable::run, mNormalScanCallback, mPnoScanCallback));
+
+        // Tear down interfaces.
+        assertTrue(mWificondControl.tearDownInterfaces());
+
+        // Signal poll should fail.
+        assertEquals(null, mWificondControl.signalPoll(TEST_INTERFACE_NAME));
+    }
+
+    /**
+     * Verifies that getTxPacketCounters() calls wificond.
+     */
+    @Test
+    public void testGetTxPacketCounters() throws Exception {
+        when(mWificond.createClientInterface(TEST_INTERFACE_NAME)).thenReturn(mClientInterface);
+
+        mWificondControl.setupInterfaceForClientMode(TEST_INTERFACE_NAME, Runnable::run,
+                mNormalScanCallback, mPnoScanCallback);
+        mWificondControl.getTxPacketCounters(TEST_INTERFACE_NAME);
+        verify(mClientInterface).getPacketCounters();
+    }
+
+    /**
+     * Verifies that getTxPacketCounters() returns null when there is no configured client
+     * interface.
+     */
+    @Test
+    public void testGetTxPacketCountersErrorWhenNoClientInterfaceConfigured() throws Exception {
+        when(mWificond.createClientInterface(TEST_INTERFACE_NAME)).thenReturn(mClientInterface);
+
+        // Configure client interface.
+        assertEquals(true, mWificondControl.setupInterfaceForClientMode(TEST_INTERFACE_NAME,
+                Runnable::run, mNormalScanCallback, mPnoScanCallback));
+
+        // Tear down interfaces.
+        assertTrue(mWificondControl.tearDownInterfaces());
+
+        // Signal poll should fail.
+        assertEquals(null, mWificondControl.getTxPacketCounters(TEST_INTERFACE_NAME));
+    }
+
+    /**
+     * Verifies that getScanResults() returns null when there is no configured client
+     * interface.
+     */
+    @Test
+    public void testGetScanResultsErrorWhenNoClientInterfaceConfigured() throws Exception {
+        when(mWificond.createClientInterface(TEST_INTERFACE_NAME)).thenReturn(mClientInterface);
+
+        // Configure client interface.
+        assertEquals(true, mWificondControl.setupInterfaceForClientMode(TEST_INTERFACE_NAME,
+                Runnable::run, mNormalScanCallback, mPnoScanCallback));
+
+        // Tear down interfaces.
+        assertTrue(mWificondControl.tearDownInterfaces());
+
+        // getScanResults should fail.
+        assertEquals(0,
+                mWificondControl.getScanResults(TEST_INTERFACE_NAME,
+                        WifiNl80211Manager.SCAN_TYPE_SINGLE_SCAN).size());
+    }
+
+    /**
+     * Verifies that Scan() can convert input parameters to SingleScanSettings correctly.
+     */
+    @Test
+    public void testScan() throws Exception {
+        when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(true);
+        assertTrue(mWificondControl.startScan(
+                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_POWER,
+                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST));
+        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
+                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
+                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST)));
+    }
+
+    /**
+     * Verifies that Scan() removes duplicates hiddenSsids passed in from input.
+     */
+    @Test
+    public void testScanWithDuplicateHiddenSsids() throws Exception {
+        when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(true);
+        // Create a list of hiddenSsid that has a duplicate element
+        List<byte[]> hiddenSsidWithDup = new ArrayList<>(SCAN_HIDDEN_NETWORK_SSID_LIST);
+        hiddenSsidWithDup.add(SCAN_HIDDEN_NETWORK_SSID_LIST.get(0));
+        assertEquals(hiddenSsidWithDup.get(0),
+                hiddenSsidWithDup.get(hiddenSsidWithDup.size() - 1));
+        // Pass the List with duplicate elements into scan()
+        assertTrue(mWificondControl.startScan(
+                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_POWER,
+                SCAN_FREQ_SET, hiddenSsidWithDup));
+        // But the argument passed down should have the duplicate removed.
+        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
+                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
+                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST)));
+    }
+
+    /**
+     * Verifies that Scan() can handle null input parameters correctly.
+     */
+    @Test
+    public void testScanNullParameters() throws Exception {
+        when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(true);
+        assertTrue(mWificondControl.startScan(
+                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_HIGH_ACCURACY, null, null));
+        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
+                IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY, null, null)));
+    }
+
+    /**
+     * Verifies that Scan() can handle wificond scan failure.
+     */
+    @Test
+    public void testScanFailure() throws Exception {
+        when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(false);
+        assertFalse(mWificondControl.startScan(
+                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_LATENCY,
+                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST));
+        verify(mWifiScannerImpl).scan(any(SingleScanSettings.class));
+    }
+
+    /**
+     * Verifies that Scan() can handle invalid type.
+     */
+    @Test
+    public void testScanFailureDueToInvalidType() throws Exception {
+        assertFalse(mWificondControl.startScan(
+                TEST_INTERFACE_NAME, 100,
+                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST));
+        verify(mWifiScannerImpl, never()).scan(any(SingleScanSettings.class));
+    }
+
+    /**
+     * Verifies that startPnoScan() can convert input parameters to PnoSettings correctly.
+     */
+    @Test
+    public void testStartPnoScan() throws Exception {
+        when(mWifiScannerImpl.startPnoScan(any(PnoSettings.class))).thenReturn(true);
+        assertTrue(
+                mWificondControl.startPnoScan(TEST_INTERFACE_NAME, TEST_PNO_SETTINGS, Runnable::run,
+                        mPnoScanRequestCallback));
+        verify(mWifiScannerImpl).startPnoScan(eq(TEST_PNO_SETTINGS));
+        verify(mPnoScanRequestCallback).onPnoRequestSucceeded();
+    }
+
+    /**
+     * Verifies that stopPnoScan() calls underlying wificond.
+     */
+    @Test
+    public void testStopPnoScan() throws Exception {
+        when(mWifiScannerImpl.stopPnoScan()).thenReturn(true);
+        assertTrue(mWificondControl.stopPnoScan(TEST_INTERFACE_NAME));
+        verify(mWifiScannerImpl).stopPnoScan();
+    }
+
+    /**
+     * Verifies that stopPnoScan() can handle wificond failure.
+     */
+    @Test
+    public void testStopPnoScanFailure() throws Exception {
+
+        when(mWifiScannerImpl.stopPnoScan()).thenReturn(false);
+        assertFalse(mWificondControl.stopPnoScan(TEST_INTERFACE_NAME));
+        verify(mWifiScannerImpl).stopPnoScan();
+    }
+
+    /**
+     * Verifies that WificondControl can invoke WifiMonitor broadcast methods upon scan
+     * result event.
+     */
+    @Test
+    public void testScanResultEvent() throws Exception {
+        ArgumentCaptor<IScanEvent> messageCaptor = ArgumentCaptor.forClass(IScanEvent.class);
+        verify(mWifiScannerImpl).subscribeScanEvents(messageCaptor.capture());
+        IScanEvent scanEvent = messageCaptor.getValue();
+        assertNotNull(scanEvent);
+        scanEvent.OnScanResultReady();
+
+        verify(mNormalScanCallback).onScanResultReady();
+    }
+
+    /**
+     * Verifies that WificondControl can invoke WifiMonitor broadcast methods upon scan
+     * failed event.
+     */
+    @Test
+    public void testScanFailedEvent() throws Exception {
+        ArgumentCaptor<IScanEvent> messageCaptor = ArgumentCaptor.forClass(IScanEvent.class);
+        verify(mWifiScannerImpl).subscribeScanEvents(messageCaptor.capture());
+        IScanEvent scanEvent = messageCaptor.getValue();
+        assertNotNull(scanEvent);
+        scanEvent.OnScanFailed();
+
+        verify(mNormalScanCallback).onScanFailed();
+    }
+
+    /**
+     * Verifies that WificondControl can invoke WifiMonitor broadcast methods upon pno scan
+     * result event.
+     */
+    @Test
+    public void testPnoScanResultEvent() throws Exception {
+        ArgumentCaptor<IPnoScanEvent> messageCaptor = ArgumentCaptor.forClass(IPnoScanEvent.class);
+        verify(mWifiScannerImpl).subscribePnoScanEvents(messageCaptor.capture());
+        IPnoScanEvent pnoScanEvent = messageCaptor.getValue();
+        assertNotNull(pnoScanEvent);
+        pnoScanEvent.OnPnoNetworkFound();
+        verify(mPnoScanCallback).onScanResultReady();
+    }
+
+    /**
+     * Verifies that WificondControl can invoke WifiMetrics pno scan count methods upon pno event.
+     */
+    @Test
+    public void testPnoScanEventsForMetrics() throws Exception {
+        ArgumentCaptor<IPnoScanEvent> messageCaptor = ArgumentCaptor.forClass(IPnoScanEvent.class);
+        verify(mWifiScannerImpl).subscribePnoScanEvents(messageCaptor.capture());
+        IPnoScanEvent pnoScanEvent = messageCaptor.getValue();
+        assertNotNull(pnoScanEvent);
+
+        pnoScanEvent.OnPnoNetworkFound();
+        verify(mPnoScanCallback).onScanResultReady();
+
+        pnoScanEvent.OnPnoScanFailed();
+        verify(mPnoScanCallback).onScanFailed();
+    }
+
+    /**
+     * Verifies that startPnoScan() can invoke WifiMetrics pno scan count methods correctly.
+     */
+    @Test
+    public void testStartPnoScanForMetrics() throws Exception {
+        when(mWifiScannerImpl.startPnoScan(any(PnoSettings.class))).thenReturn(false);
+
+        assertFalse(
+                mWificondControl.startPnoScan(TEST_INTERFACE_NAME, TEST_PNO_SETTINGS, Runnable::run,
+                        mPnoScanRequestCallback));
+        verify(mPnoScanRequestCallback).onPnoRequestFailed();
+    }
+
+    /**
+     * Verifies that abortScan() calls underlying wificond.
+     */
+    @Test
+    public void testAbortScan() throws Exception {
+        mWificondControl.abortScan(TEST_INTERFACE_NAME);
+        verify(mWifiScannerImpl).abortScan();
+    }
+
+    /**
+     * Ensures that the Ap interface callbacks are forwarded to the
+     * SoftApListener used for starting soft AP.
+     */
+    @Test
+    public void testSoftApListenerInvocation() throws Exception {
+        testSetupInterfaceForSoftApMode();
+
+        WifiConfiguration config = new WifiConfiguration();
+        config.SSID = new String(TEST_SSID, StandardCharsets.UTF_8);
+
+        when(mApInterface.registerCallback(any())).thenReturn(true);
+
+        final ArgumentCaptor<IApInterfaceEventCallback> apInterfaceCallbackCaptor =
+                ArgumentCaptor.forClass(IApInterfaceEventCallback.class);
+
+        assertTrue(mWificondControl.registerApCallback(
+                TEST_INTERFACE_NAME, Runnable::run, mSoftApListener));
+        verify(mApInterface).registerCallback(apInterfaceCallbackCaptor.capture());
+
+        final NativeWifiClient testClient = new NativeWifiClient(TEST_RAW_MAC_BYTES);
+        apInterfaceCallbackCaptor.getValue().onConnectedClientsChanged(testClient, true);
+        verify(mSoftApListener).onConnectedClientsChanged(eq(testClient), eq(true));
+
+        int channelFrequency = 2437;
+        int channelBandwidth = IApInterfaceEventCallback.BANDWIDTH_20;
+        apInterfaceCallbackCaptor.getValue().onSoftApChannelSwitched(channelFrequency,
+                channelBandwidth);
+        verify(mSoftApListener).onSoftApChannelSwitched(eq(channelFrequency),
+                eq(SoftApInfo.CHANNEL_WIDTH_20MHZ));
+    }
+
+    /**
+     * Verifies registration and invocation of wificond death handler.
+     */
+    @Test
+    public void testRegisterDeathHandler() throws Exception {
+        Runnable deathHandler = mock(Runnable.class);
+        mWificondControl.setOnServiceDeadCallback(deathHandler);
+        mWificondControl.binderDied();
+        mLooper.dispatchAll();
+        verify(deathHandler).run();
+    }
+
+    /**
+     * Verifies handling of wificond death and ensures that all internal state is cleared and
+     * handlers are invoked.
+     */
+    @Test
+    public void testDeathHandling() throws Exception {
+        Runnable deathHandler = mock(Runnable.class);
+        mWificondControl.setOnServiceDeadCallback(deathHandler);
+
+        testSetupInterfaceForClientMode();
+
+        mWificondControl.binderDied();
+        mLooper.dispatchAll();
+        verify(deathHandler).run();
+
+        // The handles should be cleared after death.
+        assertEquals(0, mWificondControl.getChannelsMhzForBand(WifiScanner.WIFI_BAND_5_GHZ).length);
+        verify(mWificond, never()).getAvailable5gNonDFSChannels();
+    }
+
+    /**
+     * sendMgmtFrame() should fail if a null callback is passed in.
+     */
+    @Test
+    public void testSendMgmtFrameNullCallback() throws Exception {
+        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
+                Runnable::run, null);
+
+        verify(mClientInterface, never()).SendMgmtFrame(any(), any(), anyInt());
+    }
+
+    /**
+     * sendMgmtFrame() should fail if a null frame is passed in.
+     */
+    @Test
+    public void testSendMgmtFrameNullFrame() throws Exception {
+        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, null, TEST_MCS_RATE, Runnable::run,
+                mSendMgmtFrameCallback);
+
+        verify(mClientInterface, never()).SendMgmtFrame(any(), any(), anyInt());
+        verify(mSendMgmtFrameCallback).onFailure(anyInt());
+    }
+
+    /**
+     * sendMgmtFrame() should fail if an interface name that does not exist is passed in.
+     */
+    @Test
+    public void testSendMgmtFrameInvalidInterfaceName() throws Exception {
+        mWificondControl.sendMgmtFrame(TEST_INVALID_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
+                Runnable::run, mSendMgmtFrameCallback);
+
+        verify(mClientInterface, never()).SendMgmtFrame(any(), any(), anyInt());
+        verify(mSendMgmtFrameCallback).onFailure(anyInt());
+    }
+
+    /**
+     * sendMgmtFrame() should fail if it is called a second time before the first call completed.
+     */
+    @Test
+    public void testSendMgmtFrameCalledTwiceBeforeFinished() throws Exception {
+        WifiNl80211Manager.SendMgmtFrameCallback cb1 = mock(
+                WifiNl80211Manager.SendMgmtFrameCallback.class);
+        WifiNl80211Manager.SendMgmtFrameCallback cb2 = mock(
+                WifiNl80211Manager.SendMgmtFrameCallback.class);
+
+        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
+                Runnable::run, cb1);
+        verify(cb1, never()).onFailure(anyInt());
+        verify(mClientInterface, times(1))
+                .SendMgmtFrame(AdditionalMatchers.aryEq(TEST_PROBE_FRAME),
+                        any(), eq(TEST_MCS_RATE));
+
+        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
+                Runnable::run, cb2);
+        verify(cb2).onFailure(WifiNl80211Manager.SEND_MGMT_FRAME_ERROR_ALREADY_STARTED);
+        // verify SendMgmtFrame() still was only called once i.e. not called again
+        verify(mClientInterface, times(1))
+                .SendMgmtFrame(any(), any(), anyInt());
+    }
+
+    /**
+     * Tests that when a RemoteException is triggered on AIDL call, onFailure() is called only once.
+     */
+    @Test
+    public void testSendMgmtFrameThrowsException() throws Exception {
+        WifiNl80211Manager.SendMgmtFrameCallback cb = mock(
+                WifiNl80211Manager.SendMgmtFrameCallback.class);
+
+        final ArgumentCaptor<ISendMgmtFrameEvent> sendMgmtFrameEventCaptor =
+                ArgumentCaptor.forClass(ISendMgmtFrameEvent.class);
+
+        doThrow(new RemoteException()).when(mClientInterface)
+                .SendMgmtFrame(any(), sendMgmtFrameEventCaptor.capture(), anyInt());
+
+        final ArgumentCaptor<AlarmManager.OnAlarmListener> alarmListenerCaptor =
+                ArgumentCaptor.forClass(AlarmManager.OnAlarmListener.class);
+        final ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
+        doNothing().when(mAlarmManager).set(anyInt(), anyLong(), any(),
+                alarmListenerCaptor.capture(), handlerCaptor.capture());
+
+        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
+                Runnable::run, cb);
+        mLooper.dispatchAll();
+
+        verify(cb).onFailure(anyInt());
+        verify(mAlarmManager).cancel(eq(alarmListenerCaptor.getValue()));
+
+        sendMgmtFrameEventCaptor.getValue().OnFailure(
+                WifiNl80211Manager.SEND_MGMT_FRAME_ERROR_UNKNOWN);
+        mLooper.dispatchAll();
+
+        handlerCaptor.getValue().post(() -> alarmListenerCaptor.getValue().onAlarm());
+        mLooper.dispatchAll();
+
+        verifyNoMoreInteractions(cb);
+    }
+
+    /**
+     * Tests that the onAck() callback is triggered correctly.
+     */
+    @Test
+    public void testSendMgmtFrameSuccess() throws Exception {
+        WifiNl80211Manager.SendMgmtFrameCallback cb = mock(
+                WifiNl80211Manager.SendMgmtFrameCallback.class);
+
+        final ArgumentCaptor<ISendMgmtFrameEvent> sendMgmtFrameEventCaptor =
+                ArgumentCaptor.forClass(ISendMgmtFrameEvent.class);
+        doNothing().when(mClientInterface)
+                .SendMgmtFrame(any(), sendMgmtFrameEventCaptor.capture(), anyInt());
+        final ArgumentCaptor<AlarmManager.OnAlarmListener> alarmListenerCaptor =
+                ArgumentCaptor.forClass(AlarmManager.OnAlarmListener.class);
+        final ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
+        doNothing().when(mAlarmManager).set(anyInt(), anyLong(), any(),
+                alarmListenerCaptor.capture(), handlerCaptor.capture());
+        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
+                Runnable::run, cb);
+
+        sendMgmtFrameEventCaptor.getValue().OnAck(TEST_SEND_MGMT_FRAME_ELAPSED_TIME_MS);
+        mLooper.dispatchAll();
+        verify(cb).onAck(eq(TEST_SEND_MGMT_FRAME_ELAPSED_TIME_MS));
+        verify(cb, never()).onFailure(anyInt());
+        verify(mAlarmManager).cancel(eq(alarmListenerCaptor.getValue()));
+
+        // verify that even if timeout is triggered afterwards, SendMgmtFrameCallback is not
+        // triggered again
+        handlerCaptor.getValue().post(() -> alarmListenerCaptor.getValue().onAlarm());
+        mLooper.dispatchAll();
+        verify(cb, times(1)).onAck(anyInt());
+        verify(cb, never()).onFailure(anyInt());
+    }
+
+    /**
+     * Tests that the onFailure() callback is triggered correctly.
+     */
+    @Test
+    public void testSendMgmtFrameFailure() throws Exception {
+        WifiNl80211Manager.SendMgmtFrameCallback cb = mock(
+                WifiNl80211Manager.SendMgmtFrameCallback.class);
+
+        final ArgumentCaptor<ISendMgmtFrameEvent> sendMgmtFrameEventCaptor =
+                ArgumentCaptor.forClass(ISendMgmtFrameEvent.class);
+        doNothing().when(mClientInterface)
+                .SendMgmtFrame(any(), sendMgmtFrameEventCaptor.capture(), anyInt());
+        final ArgumentCaptor<AlarmManager.OnAlarmListener> alarmListenerCaptor =
+                ArgumentCaptor.forClass(AlarmManager.OnAlarmListener.class);
+        final ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
+        doNothing().when(mAlarmManager).set(anyInt(), anyLong(), any(),
+                alarmListenerCaptor.capture(), handlerCaptor.capture());
+        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
+                Runnable::run, cb);
+
+        sendMgmtFrameEventCaptor.getValue().OnFailure(
+                WifiNl80211Manager.SEND_MGMT_FRAME_ERROR_UNKNOWN);
+        mLooper.dispatchAll();
+        verify(cb, never()).onAck(anyInt());
+        verify(cb).onFailure(WifiNl80211Manager.SEND_MGMT_FRAME_ERROR_UNKNOWN);
+        verify(mAlarmManager).cancel(eq(alarmListenerCaptor.getValue()));
+
+        // verify that even if timeout is triggered afterwards, SendMgmtFrameCallback is not
+        // triggered again
+        handlerCaptor.getValue().post(() -> alarmListenerCaptor.getValue().onAlarm());
+        mLooper.dispatchAll();
+        verify(cb, never()).onAck(anyInt());
+        verify(cb, times(1)).onFailure(anyInt());
+    }
+
+    /**
+     * Tests that the onTimeout() callback is triggered correctly.
+     */
+    @Test
+    public void testSendMgmtFrameTimeout() throws Exception {
+        WifiNl80211Manager.SendMgmtFrameCallback cb = mock(
+                WifiNl80211Manager.SendMgmtFrameCallback.class);
+
+        final ArgumentCaptor<ISendMgmtFrameEvent> sendMgmtFrameEventCaptor =
+                ArgumentCaptor.forClass(ISendMgmtFrameEvent.class);
+        doNothing().when(mClientInterface)
+                .SendMgmtFrame(any(), sendMgmtFrameEventCaptor.capture(), anyInt());
+        final ArgumentCaptor<AlarmManager.OnAlarmListener> alarmListenerCaptor =
+                ArgumentCaptor.forClass(AlarmManager.OnAlarmListener.class);
+        final ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
+        doNothing().when(mAlarmManager).set(anyInt(), anyLong(), any(),
+                alarmListenerCaptor.capture(), handlerCaptor.capture());
+        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
+                Runnable::run, cb);
+
+        handlerCaptor.getValue().post(() -> alarmListenerCaptor.getValue().onAlarm());
+        mLooper.dispatchAll();
+        verify(cb, never()).onAck(anyInt());
+        verify(cb).onFailure(WifiNl80211Manager.SEND_MGMT_FRAME_ERROR_TIMEOUT);
+
+        // verify that even if onAck() callback is triggered after timeout,
+        // SendMgmtFrameCallback is not triggered again
+        sendMgmtFrameEventCaptor.getValue().OnAck(TEST_SEND_MGMT_FRAME_ELAPSED_TIME_MS);
+        mLooper.dispatchAll();
+        verify(cb, never()).onAck(anyInt());
+        verify(cb, times(1)).onFailure(anyInt());
+    }
+
+    /**
+     * Tests every possible test outcome followed by every other test outcome to ensure that the
+     * internal state is reset correctly between calls.
+     * i.e. (success, success), (success, failure), (success, timeout),
+     * (failure, failure), (failure, success), (failure, timeout),
+     * (timeout, timeout), (timeout, success), (timeout, failure)
+     *
+     * Also tests that internal state is reset correctly after a transient AIDL RemoteException.
+     */
+    @Test
+    public void testSendMgmtFrameMixed() throws Exception {
+        testSendMgmtFrameThrowsException();
+        testSendMgmtFrameSuccess();
+        testSendMgmtFrameSuccess();
+        testSendMgmtFrameFailure();
+        testSendMgmtFrameFailure();
+        testSendMgmtFrameTimeout();
+        testSendMgmtFrameTimeout();
+        testSendMgmtFrameSuccess();
+        testSendMgmtFrameTimeout();
+        testSendMgmtFrameFailure();
+        testSendMgmtFrameSuccess();
+    }
+
+    /**
+     * Tests that OnAck() does not perform any non-thread-safe operations on the binder thread.
+     *
+     * The sequence of instructions are:
+     * 1. post onAlarm() onto main thread
+     * 2. OnAck()
+     * 3. mLooper.dispatchAll()
+     *
+     * The actual order of execution is:
+     * 1. binder thread portion of OnAck()
+     * 2. onAlarm() (which purely executes on the main thread)
+     * 3. main thread portion of OnAck()
+     *
+     * If the binder thread portion of OnAck() is not thread-safe, it can possibly mess up
+     * onAlarm(). Tests that this does not occur.
+     */
+    @Test
+    public void testSendMgmtFrameTimeoutAckThreadSafe() throws Exception {
+        final ArgumentCaptor<ISendMgmtFrameEvent> sendMgmtFrameEventCaptor =
+                ArgumentCaptor.forClass(ISendMgmtFrameEvent.class);
+        doNothing().when(mClientInterface)
+                .SendMgmtFrame(any(), sendMgmtFrameEventCaptor.capture(), anyInt());
+        final ArgumentCaptor<AlarmManager.OnAlarmListener> alarmListenerCaptor =
+                ArgumentCaptor.forClass(AlarmManager.OnAlarmListener.class);
+        final ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
+        doNothing().when(mAlarmManager).set(anyInt(), anyLong(), any(),
+                alarmListenerCaptor.capture(), handlerCaptor.capture());
+        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
+                Runnable::run, mSendMgmtFrameCallback);
+
+        // AlarmManager should post the onAlarm() callback onto the handler, but since we are
+        // triggering onAlarm() ourselves during the test, manually post onto handler
+        handlerCaptor.getValue().post(() -> alarmListenerCaptor.getValue().onAlarm());
+        // OnAck posts to the handler
+        sendMgmtFrameEventCaptor.getValue().OnAck(TEST_SEND_MGMT_FRAME_ELAPSED_TIME_MS);
+        mLooper.dispatchAll();
+        verify(mSendMgmtFrameCallback, never()).onAck(anyInt());
+        verify(mSendMgmtFrameCallback).onFailure(
+                WifiNl80211Manager.SEND_MGMT_FRAME_ERROR_TIMEOUT);
+    }
+
+    /**
+     * See {@link #testSendMgmtFrameTimeoutAckThreadSafe()}. This test replaces OnAck() with
+     * OnFailure().
+     */
+    @Test
+    public void testSendMgmtFrameTimeoutFailureThreadSafe() throws Exception {
+        final ArgumentCaptor<ISendMgmtFrameEvent> sendMgmtFrameEventCaptor =
+                ArgumentCaptor.forClass(ISendMgmtFrameEvent.class);
+        doNothing().when(mClientInterface)
+                .SendMgmtFrame(any(), sendMgmtFrameEventCaptor.capture(), anyInt());
+        final ArgumentCaptor<AlarmManager.OnAlarmListener> alarmListenerCaptor =
+                ArgumentCaptor.forClass(AlarmManager.OnAlarmListener.class);
+        final ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
+        doNothing().when(mAlarmManager).set(anyInt(), anyLong(), any(),
+                alarmListenerCaptor.capture(), handlerCaptor.capture());
+        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
+                Runnable::run, mSendMgmtFrameCallback);
+
+        // AlarmManager should post the onAlarm() callback onto the handler, but since we are
+        // triggering onAlarm() ourselves during the test, manually post onto handler
+        handlerCaptor.getValue().post(() -> alarmListenerCaptor.getValue().onAlarm());
+        // OnFailure posts to the handler
+        sendMgmtFrameEventCaptor.getValue().OnFailure(
+                WifiNl80211Manager.SEND_MGMT_FRAME_ERROR_UNKNOWN);
+        mLooper.dispatchAll();
+        verify(mSendMgmtFrameCallback).onFailure(
+                WifiNl80211Manager.SEND_MGMT_FRAME_ERROR_TIMEOUT);
+    }
+
+    /**
+     * Tests getDeviceWiphyCapabililties
+     */
+    @Test
+    public void testGetDeviceWiphyCapabilities() throws Exception {
+        DeviceWiphyCapabilities capaExpected = new DeviceWiphyCapabilities();
+
+        capaExpected.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11N, true);
+        capaExpected.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AC, true);
+        capaExpected.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AX, false);
+        capaExpected.setChannelWidthSupported(ScanResult.CHANNEL_WIDTH_160MHZ, true);
+        capaExpected.setChannelWidthSupported(ScanResult.CHANNEL_WIDTH_80MHZ_PLUS_MHZ, false);
+        capaExpected.setMaxNumberTxSpatialStreams(2);
+        capaExpected.setMaxNumberRxSpatialStreams(1);
+
+        when(mWificond.getDeviceWiphyCapabilities(TEST_INTERFACE_NAME))
+                .thenReturn(capaExpected);
+
+        DeviceWiphyCapabilities capaActual =
+                mWificondControl.getDeviceWiphyCapabilities(TEST_INTERFACE_NAME);
+        assertEquals(capaExpected, capaActual);
+    }
+
+    // Create a ArgumentMatcher which captures a SingleScanSettings parameter and checks if it
+    // matches the provided frequency set and ssid set.
+    private class ScanMatcher implements ArgumentMatcher<SingleScanSettings> {
+        int mExpectedScanType;
+        private final Set<Integer> mExpectedFreqs;
+        private final List<byte[]> mExpectedSsids;
+
+        ScanMatcher(int expectedScanType, Set<Integer> expectedFreqs, List<byte[]> expectedSsids) {
+            this.mExpectedScanType = expectedScanType;
+            this.mExpectedFreqs = expectedFreqs;
+            this.mExpectedSsids = expectedSsids;
+        }
+
+        @Override
+        public boolean matches(SingleScanSettings settings) {
+            if (settings.scanType != mExpectedScanType) {
+                return false;
+            }
+            ArrayList<ChannelSettings> channelSettings = settings.channelSettings;
+            ArrayList<HiddenNetwork> hiddenNetworks = settings.hiddenNetworks;
+            if (mExpectedFreqs != null) {
+                Set<Integer> freqSet = new HashSet<Integer>();
+                for (ChannelSettings channel : channelSettings) {
+                    freqSet.add(channel.frequency);
+                }
+                if (!mExpectedFreqs.equals(freqSet)) {
+                    return false;
+                }
+            } else {
+                if (channelSettings != null && channelSettings.size() > 0) {
+                    return false;
+                }
+            }
+
+            if (mExpectedSsids != null) {
+                List<byte[]> ssidSet = new ArrayList<>();
+                for (HiddenNetwork network : hiddenNetworks) {
+                    ssidSet.add(network.ssid);
+                }
+                if (!mExpectedSsids.equals(ssidSet)) {
+                    return false;
+                }
+
+            } else {
+                if (hiddenNetworks != null && hiddenNetworks.size() > 0) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        @Override
+        public String toString() {
+            return "ScanMatcher{mExpectedFreqs=" + mExpectedFreqs
+                    + ", mExpectedSsids=" + mExpectedSsids + '}';
+        }
+    }
+
+    private static class LocalNativeUtil {
+        private static final int SSID_BYTES_MAX_LEN = 32;
+
+        /**
+         * Converts an ArrayList<Byte> of UTF_8 byte values to string.
+         * The string will either be:
+         * a) UTF-8 String encapsulated in quotes (if all the bytes are UTF-8 encodeable and non
+         * null),
+         * or
+         * b) Hex string with no delimiters.
+         *
+         * @param bytes List of bytes for ssid.
+         * @throws IllegalArgumentException for null bytes.
+         */
+        public static String bytesToHexOrQuotedString(ArrayList<Byte> bytes) {
+            if (bytes == null) {
+                throw new IllegalArgumentException("null ssid bytes");
+            }
+            byte[] byteArray = byteArrayFromArrayList(bytes);
+            // Check for 0's in the byte stream in which case we cannot convert this into a string.
+            if (!bytes.contains(Byte.valueOf((byte) 0))) {
+                CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder();
+                try {
+                    CharBuffer decoded = decoder.decode(ByteBuffer.wrap(byteArray));
+                    return "\"" + decoded.toString() + "\"";
+                } catch (CharacterCodingException cce) {
+                }
+            }
+            return hexStringFromByteArray(byteArray);
+        }
+
+        /**
+         * Converts an ssid string to an arraylist of UTF_8 byte values.
+         * These forms are acceptable:
+         * a) UTF-8 String encapsulated in quotes, or
+         * b) Hex string with no delimiters.
+         *
+         * @param ssidStr String to be converted.
+         * @throws IllegalArgumentException for null string.
+         */
+        public static ArrayList<Byte> decodeSsid(String ssidStr) {
+            ArrayList<Byte> ssidBytes = hexOrQuotedStringToBytes(ssidStr);
+            if (ssidBytes.size() > SSID_BYTES_MAX_LEN) {
+                throw new IllegalArgumentException(
+                        "ssid bytes size out of range: " + ssidBytes.size());
+            }
+            return ssidBytes;
+        }
+
+        /**
+         * Convert from an array list of Byte to an array of primitive bytes.
+         */
+        public static byte[] byteArrayFromArrayList(ArrayList<Byte> bytes) {
+            byte[] byteArray = new byte[bytes.size()];
+            int i = 0;
+            for (Byte b : bytes) {
+                byteArray[i++] = b;
+            }
+            return byteArray;
+        }
+
+        /**
+         * Converts a byte array to hex string.
+         *
+         * @param bytes List of bytes for ssid.
+         * @throws IllegalArgumentException for null bytes.
+         */
+        public static String hexStringFromByteArray(byte[] bytes) {
+            if (bytes == null) {
+                throw new IllegalArgumentException("null hex bytes");
+            }
+            return new String(HexEncoding.encode(bytes)).toLowerCase();
+        }
+
+        /**
+         * Converts an string to an arraylist of UTF_8 byte values.
+         * These forms are acceptable:
+         * a) UTF-8 String encapsulated in quotes, or
+         * b) Hex string with no delimiters.
+         *
+         * @param str String to be converted.
+         * @throws IllegalArgumentException for null string.
+         */
+        public static ArrayList<Byte> hexOrQuotedStringToBytes(String str) {
+            if (str == null) {
+                throw new IllegalArgumentException("null string");
+            }
+            int length = str.length();
+            if ((length > 1) && (str.charAt(0) == '"') && (str.charAt(length - 1) == '"')) {
+                str = str.substring(1, str.length() - 1);
+                return stringToByteArrayList(str);
+            } else {
+                return byteArrayToArrayList(hexStringToByteArray(str));
+            }
+        }
+
+        /**
+         * Convert the string to byte array list.
+         *
+         * @return the UTF_8 char byte values of str, as an ArrayList.
+         * @throws IllegalArgumentException if a null or unencodable string is sent.
+         */
+        public static ArrayList<Byte> stringToByteArrayList(String str) {
+            if (str == null) {
+                throw new IllegalArgumentException("null string");
+            }
+            // Ensure that the provided string is UTF_8 encoded.
+            CharsetEncoder encoder = StandardCharsets.UTF_8.newEncoder();
+            try {
+                ByteBuffer encoded = encoder.encode(CharBuffer.wrap(str));
+                byte[] byteArray = new byte[encoded.remaining()];
+                encoded.get(byteArray);
+                return byteArrayToArrayList(byteArray);
+            } catch (CharacterCodingException cce) {
+                throw new IllegalArgumentException("cannot be utf-8 encoded", cce);
+            }
+        }
+
+        /**
+         * Convert from an array of primitive bytes to an array list of Byte.
+         */
+        public static ArrayList<Byte> byteArrayToArrayList(byte[] bytes) {
+            ArrayList<Byte> byteList = new ArrayList<>();
+            for (Byte b : bytes) {
+                byteList.add(b);
+            }
+            return byteList;
+        }
+
+        /**
+         * Converts a hex string to byte array.
+         *
+         * @param hexStr String to be converted.
+         * @throws IllegalArgumentException for null string.
+         */
+        public static byte[] hexStringToByteArray(String hexStr) {
+            if (hexStr == null) {
+                throw new IllegalArgumentException("null hex string");
+            }
+            return HexEncoding.decode(hexStr.toCharArray(), false);
+        }
+    }
+}
diff --git a/wifi/tests/src/android/net/wifi/p2p/WifiP2pDeviceTest.java b/wifi/tests/src/android/net/wifi/p2p/WifiP2pDeviceTest.java
index 17ee755..6edc287 100644
--- a/wifi/tests/src/android/net/wifi/p2p/WifiP2pDeviceTest.java
+++ b/wifi/tests/src/android/net/wifi/p2p/WifiP2pDeviceTest.java
@@ -45,7 +45,7 @@
         assertEquals(devA.groupCapability, devB.groupCapability);
         assertEquals(devA.status, devB.status);
         if (devA.wfdInfo != null) {
-            assertEquals(devA.wfdInfo.isWfdEnabled(), devB.wfdInfo.isWfdEnabled());
+            assertEquals(devA.wfdInfo.isEnabled(), devB.wfdInfo.isEnabled());
             assertEquals(devA.wfdInfo.getDeviceInfoHex(), devB.wfdInfo.getDeviceInfoHex());
             assertEquals(devA.wfdInfo.getControlPort(), devB.wfdInfo.getControlPort());
             assertEquals(devA.wfdInfo.getMaxThroughput(), devB.wfdInfo.getMaxThroughput());
diff --git a/wifi/tests/src/android/net/wifi/p2p/WifiP2pWfdInfoTest.java b/wifi/tests/src/android/net/wifi/p2p/WifiP2pWfdInfoTest.java
index 15a0aac..2a9b36b 100644
--- a/wifi/tests/src/android/net/wifi/p2p/WifiP2pWfdInfoTest.java
+++ b/wifi/tests/src/android/net/wifi/p2p/WifiP2pWfdInfoTest.java
@@ -55,8 +55,8 @@
     public void testSettersGetters() throws Exception {
         WifiP2pWfdInfo info = new WifiP2pWfdInfo();
 
-        info.setWfdEnabled(true);
-        assertTrue(info.isWfdEnabled());
+        info.setEnabled(true);
+        assertTrue(info.isEnabled());
 
         info.setDeviceType(WifiP2pWfdInfo.DEVICE_TYPE_WFD_SOURCE);
         assertEquals(WifiP2pWfdInfo.DEVICE_TYPE_WFD_SOURCE, info.getDeviceType());
diff --git a/wifi/tests/src/android/net/wifi/wificond/DeviceWiphyCapabilitiesTest.java b/wifi/tests/src/android/net/wifi/wificond/DeviceWiphyCapabilitiesTest.java
deleted file mode 100644
index 8e3627a..0000000
--- a/wifi/tests/src/android/net/wifi/wificond/DeviceWiphyCapabilitiesTest.java
+++ /dev/null
@@ -1,88 +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.net.wifi.wificond;
-
-import static org.junit.Assert.assertEquals;
-
-import android.net.wifi.ScanResult;
-import android.os.Parcel;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Unit tests for {@link android.net.wifi.wificond.DeviceWiphyCapabilities}.
- */
-@SmallTest
-public class DeviceWiphyCapabilitiesTest {
-    @Before
-    public void setUp() {}
-
-    /**
-     *  DeviceWiphyCapabilities object can be serialized and deserialized, while keeping the
-     *  values unchanged.
-     */
-    @Test
-    public void canSerializeAndDeserialize() {
-        DeviceWiphyCapabilities capa = new DeviceWiphyCapabilities();
-
-        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11N, true);
-        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AC, true);
-        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AX, false);
-        capa.setChannelWidthSupported(ScanResult.CHANNEL_WIDTH_160MHZ, true);
-        capa.setChannelWidthSupported(ScanResult.CHANNEL_WIDTH_80MHZ_PLUS_MHZ, false);
-        capa.setMaxNumberTxSpatialStreams(2);
-        capa.setMaxNumberRxSpatialStreams(1);
-
-        Parcel parcel = Parcel.obtain();
-        capa.writeToParcel(parcel, 0);
-        // Rewind the pointer to the head of the parcel.
-        parcel.setDataPosition(0);
-        DeviceWiphyCapabilities capaDeserialized =
-                DeviceWiphyCapabilities.CREATOR.createFromParcel(parcel);
-
-        assertEquals(capa, capaDeserialized);
-        assertEquals(capa.hashCode(), capaDeserialized.hashCode());
-    }
-
-    /**
-     * Test mapping wifi standard support into channel width support
-     */
-    @Test
-    public void testMappingWifiStandardIntoChannelWidthSupport() {
-        DeviceWiphyCapabilities capa = new DeviceWiphyCapabilities();
-
-        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11N, false);
-        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AC, false);
-        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AX, false);
-        assertEquals(true, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_20MHZ));
-        assertEquals(false, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_40MHZ));
-        assertEquals(false, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_80MHZ));
-
-        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11N, true);
-        assertEquals(true, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_20MHZ));
-        assertEquals(true, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_40MHZ));
-        assertEquals(false, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_80MHZ));
-
-        capa.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AC, true);
-        assertEquals(true, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_20MHZ));
-        assertEquals(true, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_40MHZ));
-        assertEquals(true, capa.isChannelWidthSupported(ScanResult.CHANNEL_WIDTH_80MHZ));
-    }
-}
diff --git a/wifi/tests/src/android/net/wifi/wificond/NativeScanResultTest.java b/wifi/tests/src/android/net/wifi/wificond/NativeScanResultTest.java
deleted file mode 100644
index 0df170f..0000000
--- a/wifi/tests/src/android/net/wifi/wificond/NativeScanResultTest.java
+++ /dev/null
@@ -1,87 +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 android.net.wifi.wificond;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import android.os.Parcel;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-
-/**
- * Unit tests for {@link android.net.wifi.wificond.NativeScanResult}.
- */
-@SmallTest
-public class NativeScanResultTest {
-
-    private static final byte[] TEST_SSID =
-            new byte[] {'G', 'o', 'o', 'g', 'l', 'e', 'G', 'u', 'e', 's', 't'};
-    private static final byte[] TEST_BSSID =
-            new byte[] {(byte) 0x12, (byte) 0xef, (byte) 0xa1,
-                        (byte) 0x2c, (byte) 0x97, (byte) 0x8b};
-    private static final byte[] TEST_INFO_ELEMENT =
-            new byte[] {(byte) 0x01, (byte) 0x03, (byte) 0x12, (byte) 0xbe, (byte) 0xff};
-    private static final int TEST_FREQUENCY = 2456;
-    private static final int TEST_SIGNAL_MBM = -45;
-    private static final long TEST_TSF = 34455441;
-    private static final int TEST_CAPABILITY = (0x1 << 2) | (0x1 << 5);
-    private static final boolean TEST_ASSOCIATED = true;
-    private static final int[] RADIO_CHAIN_IDS = { 0, 1 };
-    private static final int[] RADIO_CHAIN_LEVELS = { -56, -65 };
-
-    /**
-     *  NativeScanResult object can be serialized and deserialized, while keeping the
-     *  values unchanged.
-     */
-    @Test
-    public void canSerializeAndDeserialize() {
-        NativeScanResult scanResult = new NativeScanResult();
-        scanResult.ssid = TEST_SSID;
-        scanResult.bssid = TEST_BSSID;
-        scanResult.infoElement = TEST_INFO_ELEMENT;
-        scanResult.frequency = TEST_FREQUENCY;
-        scanResult.signalMbm = TEST_SIGNAL_MBM;
-        scanResult.tsf = TEST_TSF;
-        scanResult.capability = TEST_CAPABILITY;
-        scanResult.associated = TEST_ASSOCIATED;
-        scanResult.radioChainInfos = new ArrayList<>(Arrays.asList(
-                new RadioChainInfo(RADIO_CHAIN_IDS[0], RADIO_CHAIN_LEVELS[0]),
-                new RadioChainInfo(RADIO_CHAIN_IDS[1], RADIO_CHAIN_LEVELS[1])));
-        Parcel parcel = Parcel.obtain();
-        scanResult.writeToParcel(parcel, 0);
-        // Rewind the pointer to the head of the parcel.
-        parcel.setDataPosition(0);
-        NativeScanResult scanResultDeserialized = NativeScanResult.CREATOR.createFromParcel(parcel);
-
-        assertArrayEquals(scanResult.ssid, scanResultDeserialized.ssid);
-        assertArrayEquals(scanResult.bssid, scanResultDeserialized.bssid);
-        assertArrayEquals(scanResult.infoElement, scanResultDeserialized.infoElement);
-        assertEquals(scanResult.frequency, scanResultDeserialized.frequency);
-        assertEquals(scanResult.signalMbm, scanResultDeserialized.signalMbm);
-        assertEquals(scanResult.tsf, scanResultDeserialized.tsf);
-        assertEquals(scanResult.capability, scanResultDeserialized.capability);
-        assertEquals(scanResult.associated, scanResultDeserialized.associated);
-        assertTrue(scanResult.radioChainInfos.containsAll(scanResultDeserialized.radioChainInfos));
-    }
-}
diff --git a/wifi/tests/src/android/net/wifi/wificond/PnoSettingsTest.java b/wifi/tests/src/android/net/wifi/wificond/PnoSettingsTest.java
deleted file mode 100644
index 9439c79..0000000
--- a/wifi/tests/src/android/net/wifi/wificond/PnoSettingsTest.java
+++ /dev/null
@@ -1,112 +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 android.net.wifi.wificond;
-
-import static org.junit.Assert.assertEquals;
-
-import android.os.Parcel;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-
-/**
- * Unit tests for {@link android.net.wifi.wificond.PnoSettings}.
- */
-@SmallTest
-public class PnoSettingsTest {
-
-    private static final byte[] TEST_SSID_1 =
-            new byte[] {'G', 'o', 'o', 'g', 'l', 'e', 'G', 'u', 'e', 's', 't'};
-    private static final byte[] TEST_SSID_2 =
-            new byte[] {'A', 'n', 'd', 'r', 'o', 'i', 'd', 'T', 'e', 's', 't'};
-    private static final int[] TEST_FREQUENCIES_1 = {};
-    private static final int[] TEST_FREQUENCIES_2 = {2500, 5124};
-    private static final int TEST_INTERVAL_MS = 30000;
-    private static final int TEST_MIN_2G_RSSI = -60;
-    private static final int TEST_MIN_5G_RSSI = -65;
-    private static final int TEST_VALUE = 42;
-
-    private PnoNetwork mPnoNetwork1;
-    private PnoNetwork mPnoNetwork2;
-
-    @Before
-    public void setUp() {
-        mPnoNetwork1 = new PnoNetwork();
-        mPnoNetwork1.setSsid(TEST_SSID_1);
-        mPnoNetwork1.setHidden(true);
-        mPnoNetwork1.setFrequenciesMhz(TEST_FREQUENCIES_1);
-
-        mPnoNetwork2 = new PnoNetwork();
-        mPnoNetwork2.setSsid(TEST_SSID_2);
-        mPnoNetwork2.setHidden(false);
-        mPnoNetwork2.setFrequenciesMhz(TEST_FREQUENCIES_2);
-    }
-
-    /**
-     *  PnoSettings object can be serialized and deserialized, while keeping the
-     *  values unchanged.
-     */
-    @Test
-    public void canSerializeAndDeserialize() {
-        PnoSettings pnoSettings = new PnoSettings();
-        pnoSettings.setIntervalMillis(TEST_INTERVAL_MS);
-        pnoSettings.setMin2gRssiDbm(TEST_MIN_2G_RSSI);
-        pnoSettings.setMin5gRssiDbm(TEST_MIN_5G_RSSI);
-        pnoSettings.setPnoNetworks(new ArrayList<>(Arrays.asList(mPnoNetwork1, mPnoNetwork2)));
-
-        Parcel parcel = Parcel.obtain();
-        pnoSettings.writeToParcel(parcel, 0);
-        // Rewind the pointer to the head of the parcel.
-        parcel.setDataPosition(0);
-        PnoSettings pnoSettingsDeserialized = PnoSettings.CREATOR.createFromParcel(parcel);
-
-        assertEquals(pnoSettings, pnoSettingsDeserialized);
-        assertEquals(pnoSettings.hashCode(), pnoSettingsDeserialized.hashCode());
-    }
-
-    /**
-     * Tests usage of {@link PnoSettings} as a HashMap key type.
-     */
-    @Test
-    public void testAsHashMapKey() {
-        PnoSettings pnoSettings1 = new PnoSettings();
-        pnoSettings1.setIntervalMillis(TEST_INTERVAL_MS);
-        pnoSettings1.setMin2gRssiDbm(TEST_MIN_2G_RSSI);
-        pnoSettings1.setMin5gRssiDbm(TEST_MIN_5G_RSSI);
-        pnoSettings1.setPnoNetworks(new ArrayList<>(Arrays.asList(mPnoNetwork1, mPnoNetwork2)));
-
-        PnoSettings pnoSettings2 = new PnoSettings();
-        pnoSettings2.setIntervalMillis(TEST_INTERVAL_MS);
-        pnoSettings2.setMin2gRssiDbm(TEST_MIN_2G_RSSI);
-        pnoSettings2.setMin5gRssiDbm(TEST_MIN_5G_RSSI);
-        pnoSettings2.setPnoNetworks(new ArrayList<>(Arrays.asList(mPnoNetwork1, mPnoNetwork2)));
-
-        assertEquals(pnoSettings1, pnoSettings2);
-        assertEquals(pnoSettings1.hashCode(), pnoSettings2.hashCode());
-
-        HashMap<PnoSettings, Integer> map = new HashMap<>();
-        map.put(pnoSettings1, TEST_VALUE);
-
-        assertEquals(TEST_VALUE, map.get(pnoSettings2).intValue());
-    }
-}
diff --git a/wifi/tests/src/android/net/wifi/wificond/SingleScanSettingsTest.java b/wifi/tests/src/android/net/wifi/wificond/SingleScanSettingsTest.java
deleted file mode 100644
index f20ec47..0000000
--- a/wifi/tests/src/android/net/wifi/wificond/SingleScanSettingsTest.java
+++ /dev/null
@@ -1,116 +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 android.net.wifi.wificond;
-
-import static org.junit.Assert.assertEquals;
-
-import android.os.Parcel;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-
-/**
- * Unit tests for {@link android.net.wifi.wificond.SingleScanSettingsResult}.
- */
-@SmallTest
-public class SingleScanSettingsTest {
-
-    private static final byte[] TEST_SSID_1 =
-            new byte[] {'G', 'o', 'o', 'g', 'l', 'e', 'G', 'u', 'e', 's', 't'};
-    private static final byte[] TEST_SSID_2 =
-            new byte[] {'A', 'n', 'd', 'r', 'o', 'i', 'd', 'T', 'e', 's', 't'};
-    private static final int TEST_FREQUENCY_1 = 2456;
-    private static final int TEST_FREQUENCY_2 = 5215;
-    private static final int TEST_VALUE = 42;
-
-    private ChannelSettings mChannelSettings1;
-    private ChannelSettings mChannelSettings2;
-    private HiddenNetwork mHiddenNetwork1;
-    private HiddenNetwork mHiddenNetwork2;
-
-    @Before
-    public void setUp() {
-        mChannelSettings1 = new ChannelSettings();
-        mChannelSettings1.frequency = TEST_FREQUENCY_1;
-        mChannelSettings2 = new ChannelSettings();
-        mChannelSettings2.frequency = TEST_FREQUENCY_2;
-
-        mHiddenNetwork1 = new HiddenNetwork();
-        mHiddenNetwork1.ssid = TEST_SSID_1;
-        mHiddenNetwork2 = new HiddenNetwork();
-        mHiddenNetwork2.ssid = TEST_SSID_2;
-    }
-
-    /**
-     *  SingleScanSettings object can be serialized and deserialized, while keeping the
-     *  values unchanged.
-     */
-    @Test
-    public void canSerializeAndDeserialize() {
-        SingleScanSettings scanSettings = new SingleScanSettings();
-        scanSettings.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
-
-        scanSettings.channelSettings =
-                new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
-        scanSettings.hiddenNetworks =
-                new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
-
-        Parcel parcel = Parcel.obtain();
-        scanSettings.writeToParcel(parcel, 0);
-        // Rewind the pointer to the head of the parcel.
-        parcel.setDataPosition(0);
-        SingleScanSettings scanSettingsDeserialized =
-                SingleScanSettings.CREATOR.createFromParcel(parcel);
-
-        assertEquals(scanSettings, scanSettingsDeserialized);
-        assertEquals(scanSettings.hashCode(), scanSettingsDeserialized.hashCode());
-    }
-
-    /**
-     * Tests usage of {@link SingleScanSettings} as a HashMap key type.
-     */
-    @Test
-    public void testAsHashMapKey() {
-        SingleScanSettings scanSettings1 = new SingleScanSettings();
-        scanSettings1.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
-        scanSettings1.channelSettings =
-                new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
-        scanSettings1.hiddenNetworks =
-                new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
-
-        SingleScanSettings scanSettings2 = new SingleScanSettings();
-        scanSettings2.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
-        scanSettings2.channelSettings =
-                new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
-        scanSettings2.hiddenNetworks =
-                new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
-
-        assertEquals(scanSettings1, scanSettings2);
-        assertEquals(scanSettings1.hashCode(), scanSettings2.hashCode());
-
-        HashMap<SingleScanSettings, Integer> map = new HashMap<>();
-        map.put(scanSettings1, TEST_VALUE);
-
-        assertEquals(TEST_VALUE, map.get(scanSettings2).intValue());
-    }
-}
diff --git a/wifi/tests/src/android/net/wifi/wificond/WifiCondManagerTest.java b/wifi/tests/src/android/net/wifi/wificond/WifiCondManagerTest.java
deleted file mode 100644
index 32105be..0000000
--- a/wifi/tests/src/android/net/wifi/wificond/WifiCondManagerTest.java
+++ /dev/null
@@ -1,1295 +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 android.net.wifi.wificond;
-
-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.anyInt;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Matchers.argThat;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.anyLong;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doThrow;
-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.app.AlarmManager;
-import android.app.test.TestAlarmManager;
-import android.content.Context;
-import android.net.wifi.ScanResult;
-import android.net.wifi.SoftApInfo;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiScanner;
-import android.net.wifi.util.HexEncoding;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.os.test.TestLooper;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.AdditionalMatchers;
-import org.mockito.ArgumentCaptor;
-import org.mockito.ArgumentMatcher;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Unit tests for {@link android.net.wifi.WifiCondManager}.
- */
-@SmallTest
-public class WifiCondManagerTest {
-    @Mock
-    private IWificond mWificond;
-    @Mock
-    private IBinder mWifiCondBinder;
-    @Mock
-    private IClientInterface mClientInterface;
-    @Mock
-    private IWifiScannerImpl mWifiScannerImpl;
-    @Mock
-    private IApInterface mApInterface;
-    @Mock
-    private WifiCondManager.SoftApCallback mSoftApListener;
-    @Mock
-    private WifiCondManager.SendMgmtFrameCallback mSendMgmtFrameCallback;
-    @Mock
-    private WifiCondManager.ScanEventCallback mNormalScanCallback;
-    @Mock
-    private WifiCondManager.ScanEventCallback mPnoScanCallback;
-    @Mock
-    private WifiCondManager.PnoScanRequestCallback mPnoScanRequestCallback;
-    @Mock
-    private Context mContext;
-    private TestLooper mLooper;
-    private TestAlarmManager mTestAlarmManager;
-    private AlarmManager mAlarmManager;
-    private WifiCondManager mWificondControl;
-    private static final String TEST_INTERFACE_NAME = "test_wlan_if";
-    private static final String TEST_INTERFACE_NAME1 = "test_wlan_if1";
-    private static final String TEST_INVALID_INTERFACE_NAME = "asdf";
-    private static final byte[] TEST_SSID =
-            new byte[]{'G', 'o', 'o', 'g', 'l', 'e', 'G', 'u', 'e', 's', 't'};
-    private static final byte[] TEST_PSK =
-            new byte[]{'T', 'e', 's', 't'};
-
-    private static final Set<Integer> SCAN_FREQ_SET =
-            new HashSet<Integer>() {{
-                add(2410);
-                add(2450);
-                add(5050);
-                add(5200);
-            }};
-    private static final String TEST_QUOTED_SSID_1 = "\"testSsid1\"";
-    private static final String TEST_QUOTED_SSID_2 = "\"testSsid2\"";
-    private static final int[] TEST_FREQUENCIES_1 = {};
-    private static final int[] TEST_FREQUENCIES_2 = {2500, 5124};
-    private static final byte[] TEST_RAW_MAC_BYTES = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
-
-    private static final List<byte[]> SCAN_HIDDEN_NETWORK_SSID_LIST =
-            new ArrayList<byte[]>() {{
-                add(LocalNativeUtil.byteArrayFromArrayList(
-                        LocalNativeUtil.decodeSsid(TEST_QUOTED_SSID_1)));
-                add(LocalNativeUtil.byteArrayFromArrayList(
-                        LocalNativeUtil.decodeSsid(TEST_QUOTED_SSID_2)));
-            }};
-
-    private static final PnoSettings TEST_PNO_SETTINGS = new PnoSettings();
-    static {
-        TEST_PNO_SETTINGS.setIntervalMillis(6000);
-        List<PnoNetwork> initPnoNetworks = new ArrayList<>();
-        PnoNetwork network = new PnoNetwork();
-        network.setSsid(LocalNativeUtil.byteArrayFromArrayList(
-                LocalNativeUtil.decodeSsid(TEST_QUOTED_SSID_1)));
-        network.setHidden(true);
-        network.setFrequenciesMhz(TEST_FREQUENCIES_1);
-        initPnoNetworks.add(network);
-        network.setSsid(LocalNativeUtil.byteArrayFromArrayList(
-                LocalNativeUtil.decodeSsid(TEST_QUOTED_SSID_2)));
-        network.setHidden(false);
-        network.setFrequenciesMhz(TEST_FREQUENCIES_2);
-        initPnoNetworks.add(network);
-        TEST_PNO_SETTINGS.setPnoNetworks(initPnoNetworks);
-    }
-
-    private static final int TEST_MCS_RATE = 5;
-    private static final int TEST_SEND_MGMT_FRAME_ELAPSED_TIME_MS = 100;
-    private static final byte[] TEST_PROBE_FRAME = {
-            0x40, 0x00, 0x3c, 0x00, (byte) 0xa8, (byte) 0xbd, 0x27, 0x5b,
-            0x33, 0x72, (byte) 0xf4, (byte) 0xf5, (byte) 0xe8, 0x51, (byte) 0x9e, 0x09,
-            (byte) 0xa8, (byte) 0xbd, 0x27, 0x5b, 0x33, 0x72, (byte) 0xb0, 0x66,
-            0x00, 0x00
-    };
-
-    @Before
-    public void setUp() throws Exception {
-        // Setup mocks for successful WificondControl operation. Failure case mocks should be
-        // created in specific tests
-        MockitoAnnotations.initMocks(this);
-
-        mTestAlarmManager = new TestAlarmManager();
-        mAlarmManager = mTestAlarmManager.getAlarmManager();
-        when(mContext.getSystemServiceName(AlarmManager.class)).thenReturn(Context.ALARM_SERVICE);
-        when(mContext.getSystemService(AlarmManager.class)).thenReturn(mAlarmManager);
-
-        mLooper = new TestLooper();
-        when(mContext.getMainLooper()).thenReturn(mLooper.getLooper());
-
-        when(mWificond.asBinder()).thenReturn(mWifiCondBinder);
-        when(mClientInterface.getWifiScannerImpl()).thenReturn(mWifiScannerImpl);
-        when(mWificond.createClientInterface(any())).thenReturn(mClientInterface);
-        when(mWificond.createApInterface(any())).thenReturn(mApInterface);
-        when(mWificond.tearDownClientInterface(any())).thenReturn(true);
-        when(mWificond.tearDownApInterface(any())).thenReturn(true);
-        when(mClientInterface.getWifiScannerImpl()).thenReturn(mWifiScannerImpl);
-        when(mClientInterface.getInterfaceName()).thenReturn(TEST_INTERFACE_NAME);
-        mWificondControl = new WifiCondManager(mContext, mWificond);
-        assertEquals(true,
-                mWificondControl.setupInterfaceForClientMode(TEST_INTERFACE_NAME, Runnable::run,
-                        mNormalScanCallback, mPnoScanCallback));
-    }
-
-    /**
-     * Verifies that setupInterfaceForClientMode(TEST_INTERFACE_NAME) calls Wificond.
-     */
-    @Test
-    public void testSetupInterfaceForClientMode() throws Exception {
-        when(mWificond.createClientInterface(TEST_INTERFACE_NAME)).thenReturn(mClientInterface);
-        verify(mWificond).createClientInterface(TEST_INTERFACE_NAME);
-    }
-
-    /**
-     * Verifies that setupInterfaceForClientMode(TEST_INTERFACE_NAME) calls subscribeScanEvents().
-     */
-    @Test
-    public void testSetupInterfaceForClientModeCallsScanEventSubscripiton() throws Exception {
-        verify(mWifiScannerImpl).subscribeScanEvents(any(IScanEvent.class));
-    }
-
-    /**
-     * Verifies that tearDownClientInterface(TEST_INTERFACE_NAME) calls Wificond.
-     */
-    @Test
-    public void testTeardownClientInterface() throws Exception {
-        when(mWificond.tearDownClientInterface(TEST_INTERFACE_NAME)).thenReturn(true);
-
-        assertTrue(mWificondControl.tearDownClientInterface(TEST_INTERFACE_NAME));
-        verify(mWifiScannerImpl).unsubscribeScanEvents();
-        verify(mWifiScannerImpl).unsubscribePnoScanEvents();
-        verify(mWificond).tearDownClientInterface(TEST_INTERFACE_NAME);
-    }
-
-    /**
-     * Verifies that tearDownClientInterface(TEST_INTERFACE_NAME) calls Wificond.
-     */
-    @Test
-    public void testTeardownClientInterfaceOnInvalidIface() throws Exception {
-        when(mWificond.tearDownClientInterface(TEST_INTERFACE_NAME1)).thenReturn(true);
-
-        assertFalse(mWificondControl.tearDownClientInterface(TEST_INTERFACE_NAME1));
-        verify(mWifiScannerImpl, never()).unsubscribeScanEvents();
-        verify(mWifiScannerImpl, never()).unsubscribePnoScanEvents();
-        verify(mWificond, never()).tearDownClientInterface(any());
-    }
-
-    /**
-     * Verifies that tearDownClientInterface(TEST_INTERFACE_NAME) calls Wificond.
-     */
-    @Test
-    public void testTeardownClientInterfaceFailDueToExceptionScannerUnsubscribe() throws Exception {
-        when(mWificond.tearDownClientInterface(TEST_INTERFACE_NAME)).thenReturn(true);
-        doThrow(new RemoteException()).when(mWifiScannerImpl).unsubscribeScanEvents();
-
-        assertFalse(mWificondControl.tearDownClientInterface(TEST_INTERFACE_NAME));
-        verify(mWifiScannerImpl).unsubscribeScanEvents();
-        verify(mWifiScannerImpl, never()).unsubscribePnoScanEvents();
-        verify(mWificond, never()).tearDownClientInterface(TEST_INTERFACE_NAME);
-    }
-
-    /**
-     * Verifies that tearDownClientInterface(TEST_INTERFACE_NAME) calls Wificond.
-     */
-    @Test
-    public void testTeardownClientInterfaceErrorWhenWificondFailed() throws Exception {
-        when(mWificond.tearDownClientInterface(TEST_INTERFACE_NAME)).thenReturn(false);
-
-        assertFalse(mWificondControl.tearDownClientInterface(TEST_INTERFACE_NAME));
-        verify(mWifiScannerImpl).unsubscribeScanEvents();
-        verify(mWifiScannerImpl).unsubscribePnoScanEvents();
-        verify(mWificond).tearDownClientInterface(TEST_INTERFACE_NAME);
-    }
-
-    /**
-     * Verifies that the client handles are cleared after teardown.
-     */
-    @Test
-    public void testTeardownClientInterfaceClearsHandles() throws Exception {
-        testTeardownClientInterface();
-
-        assertNull(mWificondControl.signalPoll(TEST_INTERFACE_NAME));
-        verify(mClientInterface, never()).signalPoll();
-
-        assertFalse(mWificondControl.startScan(
-                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_LATENCY,
-                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST));
-        verify(mWifiScannerImpl, never()).scan(any());
-    }
-
-    /**
-     * Verifies that setupInterfaceForSoftApMode(TEST_INTERFACE_NAME) calls wificond.
-     */
-    @Test
-    public void testSetupInterfaceForSoftApMode() throws Exception {
-        when(mWificond.createApInterface(TEST_INTERFACE_NAME)).thenReturn(mApInterface);
-
-        assertEquals(true, mWificondControl.setupInterfaceForSoftApMode(TEST_INTERFACE_NAME));
-        verify(mWificond).createApInterface(TEST_INTERFACE_NAME);
-    }
-
-    /**
-     * Verifies that setupInterfaceForSoftAp() returns null when wificond is not started.
-     */
-    @Test
-    public void testSetupInterfaceForSoftApModeErrorWhenWificondIsNotStarted() throws Exception {
-        // Invoke wificond death handler to clear the handle.
-        mWificondControl.binderDied();
-        mLooper.dispatchAll();
-
-        assertEquals(false, mWificondControl.setupInterfaceForSoftApMode(TEST_INTERFACE_NAME));
-    }
-
-    /**
-     * Verifies that setupInterfaceForSoftApMode(TEST_INTERFACE_NAME) returns null when wificond
-     * failed to setup AP interface.
-     */
-    @Test
-    public void testSetupInterfaceForSoftApModeErrorWhenWificondFailedToSetupInterface()
-            throws Exception {
-        when(mWificond.createApInterface(TEST_INTERFACE_NAME)).thenReturn(null);
-
-        assertEquals(false, mWificondControl.setupInterfaceForSoftApMode(TEST_INTERFACE_NAME));
-    }
-
-    /**
-     * Verifies that tearDownClientInterface(TEST_INTERFACE_NAME) calls Wificond.
-     */
-    @Test
-    public void testTeardownSoftApInterface() throws Exception {
-        testSetupInterfaceForSoftApMode();
-        when(mWificond.tearDownApInterface(TEST_INTERFACE_NAME)).thenReturn(true);
-
-        assertTrue(mWificondControl.tearDownSoftApInterface(TEST_INTERFACE_NAME));
-        verify(mWificond).tearDownApInterface(TEST_INTERFACE_NAME);
-    }
-
-    /**
-     * Verifies that tearDownSoftapInterface(TEST_INTERFACE_NAME) calls Wificond.
-     */
-    @Test
-    public void testTeardownSoftApInterfaceOnInvalidIface() throws Exception {
-        testSetupInterfaceForSoftApMode();
-        when(mWificond.tearDownApInterface(TEST_INTERFACE_NAME1)).thenReturn(true);
-
-        assertFalse(mWificondControl.tearDownSoftApInterface(TEST_INTERFACE_NAME1));
-        verify(mWificond, never()).tearDownApInterface(any());
-    }
-
-    /**
-     * Verifies that tearDownClientInterface(TEST_INTERFACE_NAME) calls Wificond.
-     */
-    @Test
-    public void testTeardownSoftApInterfaceErrorWhenWificondFailed() throws Exception {
-        testSetupInterfaceForSoftApMode();
-        when(mWificond.tearDownApInterface(TEST_INTERFACE_NAME)).thenReturn(false);
-
-        assertFalse(mWificondControl.tearDownSoftApInterface(TEST_INTERFACE_NAME));
-        verify(mWificond).tearDownApInterface(TEST_INTERFACE_NAME);
-    }
-
-    /**
-     * Verifies that the SoftAp handles are cleared after teardown.
-     */
-    @Test
-    public void testTeardownSoftApInterfaceClearsHandles() throws Exception {
-        testTeardownSoftApInterface();
-
-        assertFalse(mWificondControl.registerApCallback(
-                TEST_INTERFACE_NAME, Runnable::run, mSoftApListener));
-        verify(mApInterface, never()).registerCallback(any());
-    }
-
-    /**
-     * Verifies that we can setup concurrent interfaces.
-     */
-    @Test
-    public void testSetupMultipleInterfaces() throws Exception {
-        when(mWificond.createApInterface(TEST_INTERFACE_NAME1)).thenReturn(mApInterface);
-
-        assertEquals(true, mWificondControl.setupInterfaceForSoftApMode(TEST_INTERFACE_NAME1));
-
-        verify(mWificond).createClientInterface(TEST_INTERFACE_NAME);
-        verify(mWificond).createApInterface(TEST_INTERFACE_NAME1);
-    }
-
-    /**
-     * Verifies that we can setup concurrent interfaces.
-     */
-    @Test
-    public void testTeardownMultipleInterfaces() throws Exception {
-        testSetupMultipleInterfaces();
-        assertTrue(mWificondControl.tearDownClientInterface(TEST_INTERFACE_NAME));
-        assertTrue(mWificondControl.tearDownSoftApInterface(TEST_INTERFACE_NAME1));
-
-        verify(mWificond).tearDownClientInterface(TEST_INTERFACE_NAME);
-        verify(mWificond).tearDownApInterface(TEST_INTERFACE_NAME1);
-    }
-
-    /**
-     * Verifies that tearDownInterfaces() calls wificond.
-     */
-    @Test
-    public void testTearDownInterfaces() throws Exception {
-        assertTrue(mWificondControl.tearDownInterfaces());
-        verify(mWificond).tearDownInterfaces();
-    }
-
-    /**
-     * Verifies that tearDownInterfaces() calls unsubscribeScanEvents() when there was
-     * a configured client interface.
-     */
-    @Test
-    public void testTearDownInterfacesRemovesScanEventSubscription() throws Exception {
-        assertTrue(mWificondControl.tearDownInterfaces());
-        verify(mWifiScannerImpl).unsubscribeScanEvents();
-    }
-
-    /**
-     * Verifies that tearDownInterfaces() returns false when wificond is not started.
-     */
-    @Test
-    public void testTearDownInterfacesErrorWhenWificondIsNotStarterd() throws Exception {
-        // Invoke wificond death handler to clear the handle.
-        mWificondControl.binderDied();
-        mLooper.dispatchAll();
-        assertFalse(mWificondControl.tearDownInterfaces());
-    }
-
-    /**
-     * Verifies that signalPoll() calls wificond.
-     */
-    @Test
-    public void testSignalPoll() throws Exception {
-        when(mWificond.createClientInterface(TEST_INTERFACE_NAME)).thenReturn(mClientInterface);
-
-        mWificondControl.setupInterfaceForClientMode(TEST_INTERFACE_NAME, Runnable::run,
-                mNormalScanCallback, mPnoScanCallback);
-        mWificondControl.signalPoll(TEST_INTERFACE_NAME);
-        verify(mClientInterface).signalPoll();
-    }
-
-    /**
-     * Verifies that signalPoll() returns null when there is no configured client interface.
-     */
-    @Test
-    public void testSignalPollErrorWhenNoClientInterfaceConfigured() throws Exception {
-        when(mWificond.createClientInterface(TEST_INTERFACE_NAME)).thenReturn(mClientInterface);
-
-        // Configure client interface.
-        assertEquals(true, mWificondControl.setupInterfaceForClientMode(TEST_INTERFACE_NAME,
-                Runnable::run, mNormalScanCallback, mPnoScanCallback));
-
-        // Tear down interfaces.
-        assertTrue(mWificondControl.tearDownInterfaces());
-
-        // Signal poll should fail.
-        assertEquals(null, mWificondControl.signalPoll(TEST_INTERFACE_NAME));
-    }
-
-    /**
-     * Verifies that getTxPacketCounters() calls wificond.
-     */
-    @Test
-    public void testGetTxPacketCounters() throws Exception {
-        when(mWificond.createClientInterface(TEST_INTERFACE_NAME)).thenReturn(mClientInterface);
-
-        mWificondControl.setupInterfaceForClientMode(TEST_INTERFACE_NAME, Runnable::run,
-                mNormalScanCallback, mPnoScanCallback);
-        mWificondControl.getTxPacketCounters(TEST_INTERFACE_NAME);
-        verify(mClientInterface).getPacketCounters();
-    }
-
-    /**
-     * Verifies that getTxPacketCounters() returns null when there is no configured client
-     * interface.
-     */
-    @Test
-    public void testGetTxPacketCountersErrorWhenNoClientInterfaceConfigured() throws Exception {
-        when(mWificond.createClientInterface(TEST_INTERFACE_NAME)).thenReturn(mClientInterface);
-
-        // Configure client interface.
-        assertEquals(true, mWificondControl.setupInterfaceForClientMode(TEST_INTERFACE_NAME,
-                Runnable::run, mNormalScanCallback, mPnoScanCallback));
-
-        // Tear down interfaces.
-        assertTrue(mWificondControl.tearDownInterfaces());
-
-        // Signal poll should fail.
-        assertEquals(null, mWificondControl.getTxPacketCounters(TEST_INTERFACE_NAME));
-    }
-
-    /**
-     * Verifies that getScanResults() returns null when there is no configured client
-     * interface.
-     */
-    @Test
-    public void testGetScanResultsErrorWhenNoClientInterfaceConfigured() throws Exception {
-        when(mWificond.createClientInterface(TEST_INTERFACE_NAME)).thenReturn(mClientInterface);
-
-        // Configure client interface.
-        assertEquals(true, mWificondControl.setupInterfaceForClientMode(TEST_INTERFACE_NAME,
-                Runnable::run, mNormalScanCallback, mPnoScanCallback));
-
-        // Tear down interfaces.
-        assertTrue(mWificondControl.tearDownInterfaces());
-
-        // getScanResults should fail.
-        assertEquals(0,
-                mWificondControl.getScanResults(TEST_INTERFACE_NAME,
-                        WifiCondManager.SCAN_TYPE_SINGLE_SCAN).size());
-    }
-
-    /**
-     * Verifies that Scan() can convert input parameters to SingleScanSettings correctly.
-     */
-    @Test
-    public void testScan() throws Exception {
-        when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(true);
-        assertTrue(mWificondControl.startScan(
-                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_POWER,
-                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST));
-        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
-                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
-                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST)));
-    }
-
-    /**
-     * Verifies that Scan() removes duplicates hiddenSsids passed in from input.
-     */
-    @Test
-    public void testScanWithDuplicateHiddenSsids() throws Exception {
-        when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(true);
-        // Create a list of hiddenSsid that has a duplicate element
-        List<byte[]> hiddenSsidWithDup = new ArrayList<>(SCAN_HIDDEN_NETWORK_SSID_LIST);
-        hiddenSsidWithDup.add(SCAN_HIDDEN_NETWORK_SSID_LIST.get(0));
-        assertEquals(hiddenSsidWithDup.get(0),
-                hiddenSsidWithDup.get(hiddenSsidWithDup.size() - 1));
-        // Pass the List with duplicate elements into scan()
-        assertTrue(mWificondControl.startScan(
-                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_POWER,
-                SCAN_FREQ_SET, hiddenSsidWithDup));
-        // But the argument passed down should have the duplicate removed.
-        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
-                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
-                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST)));
-    }
-
-    /**
-     * Verifies that Scan() can handle null input parameters correctly.
-     */
-    @Test
-    public void testScanNullParameters() throws Exception {
-        when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(true);
-        assertTrue(mWificondControl.startScan(
-                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_HIGH_ACCURACY, null, null));
-        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
-                IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY, null, null)));
-    }
-
-    /**
-     * Verifies that Scan() can handle wificond scan failure.
-     */
-    @Test
-    public void testScanFailure() throws Exception {
-        when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(false);
-        assertFalse(mWificondControl.startScan(
-                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_LATENCY,
-                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST));
-        verify(mWifiScannerImpl).scan(any(SingleScanSettings.class));
-    }
-
-    /**
-     * Verifies that Scan() can handle invalid type.
-     */
-    @Test
-    public void testScanFailureDueToInvalidType() throws Exception {
-        assertFalse(mWificondControl.startScan(
-                TEST_INTERFACE_NAME, 100,
-                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST));
-        verify(mWifiScannerImpl, never()).scan(any(SingleScanSettings.class));
-    }
-
-    /**
-     * Verifies that startPnoScan() can convert input parameters to PnoSettings correctly.
-     */
-    @Test
-    public void testStartPnoScan() throws Exception {
-        when(mWifiScannerImpl.startPnoScan(any(PnoSettings.class))).thenReturn(true);
-        assertTrue(
-                mWificondControl.startPnoScan(TEST_INTERFACE_NAME, TEST_PNO_SETTINGS, Runnable::run,
-                        mPnoScanRequestCallback));
-        verify(mWifiScannerImpl).startPnoScan(eq(TEST_PNO_SETTINGS));
-        verify(mPnoScanRequestCallback).onPnoRequestSucceeded();
-    }
-
-    /**
-     * Verifies that stopPnoScan() calls underlying wificond.
-     */
-    @Test
-    public void testStopPnoScan() throws Exception {
-        when(mWifiScannerImpl.stopPnoScan()).thenReturn(true);
-        assertTrue(mWificondControl.stopPnoScan(TEST_INTERFACE_NAME));
-        verify(mWifiScannerImpl).stopPnoScan();
-    }
-
-    /**
-     * Verifies that stopPnoScan() can handle wificond failure.
-     */
-    @Test
-    public void testStopPnoScanFailure() throws Exception {
-
-        when(mWifiScannerImpl.stopPnoScan()).thenReturn(false);
-        assertFalse(mWificondControl.stopPnoScan(TEST_INTERFACE_NAME));
-        verify(mWifiScannerImpl).stopPnoScan();
-    }
-
-    /**
-     * Verifies that WificondControl can invoke WifiMonitor broadcast methods upon scan
-     * result event.
-     */
-    @Test
-    public void testScanResultEvent() throws Exception {
-        ArgumentCaptor<IScanEvent> messageCaptor = ArgumentCaptor.forClass(IScanEvent.class);
-        verify(mWifiScannerImpl).subscribeScanEvents(messageCaptor.capture());
-        IScanEvent scanEvent = messageCaptor.getValue();
-        assertNotNull(scanEvent);
-        scanEvent.OnScanResultReady();
-
-        verify(mNormalScanCallback).onScanResultReady();
-    }
-
-    /**
-     * Verifies that WificondControl can invoke WifiMonitor broadcast methods upon scan
-     * failed event.
-     */
-    @Test
-    public void testScanFailedEvent() throws Exception {
-        ArgumentCaptor<IScanEvent> messageCaptor = ArgumentCaptor.forClass(IScanEvent.class);
-        verify(mWifiScannerImpl).subscribeScanEvents(messageCaptor.capture());
-        IScanEvent scanEvent = messageCaptor.getValue();
-        assertNotNull(scanEvent);
-        scanEvent.OnScanFailed();
-
-        verify(mNormalScanCallback).onScanFailed();
-    }
-
-    /**
-     * Verifies that WificondControl can invoke WifiMonitor broadcast methods upon pno scan
-     * result event.
-     */
-    @Test
-    public void testPnoScanResultEvent() throws Exception {
-        ArgumentCaptor<IPnoScanEvent> messageCaptor = ArgumentCaptor.forClass(IPnoScanEvent.class);
-        verify(mWifiScannerImpl).subscribePnoScanEvents(messageCaptor.capture());
-        IPnoScanEvent pnoScanEvent = messageCaptor.getValue();
-        assertNotNull(pnoScanEvent);
-        pnoScanEvent.OnPnoNetworkFound();
-        verify(mPnoScanCallback).onScanResultReady();
-    }
-
-    /**
-     * Verifies that WificondControl can invoke WifiMetrics pno scan count methods upon pno event.
-     */
-    @Test
-    public void testPnoScanEventsForMetrics() throws Exception {
-        ArgumentCaptor<IPnoScanEvent> messageCaptor = ArgumentCaptor.forClass(IPnoScanEvent.class);
-        verify(mWifiScannerImpl).subscribePnoScanEvents(messageCaptor.capture());
-        IPnoScanEvent pnoScanEvent = messageCaptor.getValue();
-        assertNotNull(pnoScanEvent);
-
-        pnoScanEvent.OnPnoNetworkFound();
-        verify(mPnoScanCallback).onScanResultReady();
-
-        pnoScanEvent.OnPnoScanFailed();
-        verify(mPnoScanCallback).onScanFailed();
-    }
-
-    /**
-     * Verifies that startPnoScan() can invoke WifiMetrics pno scan count methods correctly.
-     */
-    @Test
-    public void testStartPnoScanForMetrics() throws Exception {
-        when(mWifiScannerImpl.startPnoScan(any(PnoSettings.class))).thenReturn(false);
-
-        assertFalse(
-                mWificondControl.startPnoScan(TEST_INTERFACE_NAME, TEST_PNO_SETTINGS, Runnable::run,
-                        mPnoScanRequestCallback));
-        verify(mPnoScanRequestCallback).onPnoRequestFailed();
-    }
-
-    /**
-     * Verifies that abortScan() calls underlying wificond.
-     */
-    @Test
-    public void testAbortScan() throws Exception {
-        mWificondControl.abortScan(TEST_INTERFACE_NAME);
-        verify(mWifiScannerImpl).abortScan();
-    }
-
-    /**
-     * Ensures that the Ap interface callbacks are forwarded to the
-     * SoftApListener used for starting soft AP.
-     */
-    @Test
-    public void testSoftApListenerInvocation() throws Exception {
-        testSetupInterfaceForSoftApMode();
-
-        WifiConfiguration config = new WifiConfiguration();
-        config.SSID = new String(TEST_SSID, StandardCharsets.UTF_8);
-
-        when(mApInterface.registerCallback(any())).thenReturn(true);
-
-        final ArgumentCaptor<IApInterfaceEventCallback> apInterfaceCallbackCaptor =
-                ArgumentCaptor.forClass(IApInterfaceEventCallback.class);
-
-        assertTrue(mWificondControl.registerApCallback(
-                TEST_INTERFACE_NAME, Runnable::run, mSoftApListener));
-        verify(mApInterface).registerCallback(apInterfaceCallbackCaptor.capture());
-
-        final NativeWifiClient testClient = new NativeWifiClient(TEST_RAW_MAC_BYTES);
-        apInterfaceCallbackCaptor.getValue().onConnectedClientsChanged(testClient, true);
-        verify(mSoftApListener).onConnectedClientsChanged(eq(testClient), eq(true));
-
-        int channelFrequency = 2437;
-        int channelBandwidth = IApInterfaceEventCallback.BANDWIDTH_20;
-        apInterfaceCallbackCaptor.getValue().onSoftApChannelSwitched(channelFrequency,
-                channelBandwidth);
-        verify(mSoftApListener).onSoftApChannelSwitched(eq(channelFrequency),
-                eq(SoftApInfo.CHANNEL_WIDTH_20MHZ));
-    }
-
-    /**
-     * Verifies registration and invocation of wificond death handler.
-     */
-    @Test
-    public void testRegisterDeathHandler() throws Exception {
-        Runnable deathHandler = mock(Runnable.class);
-        mWificondControl.setOnServiceDeadCallback(deathHandler);
-        mWificondControl.binderDied();
-        mLooper.dispatchAll();
-        verify(deathHandler).run();
-    }
-
-    /**
-     * Verifies handling of wificond death and ensures that all internal state is cleared and
-     * handlers are invoked.
-     */
-    @Test
-    public void testDeathHandling() throws Exception {
-        Runnable deathHandler = mock(Runnable.class);
-        mWificondControl.setOnServiceDeadCallback(deathHandler);
-
-        testSetupInterfaceForClientMode();
-
-        mWificondControl.binderDied();
-        mLooper.dispatchAll();
-        verify(deathHandler).run();
-
-        // The handles should be cleared after death.
-        assertEquals(0, mWificondControl.getChannelsMhzForBand(WifiScanner.WIFI_BAND_5_GHZ).size());
-        verify(mWificond, never()).getAvailable5gNonDFSChannels();
-    }
-
-    /**
-     * Verify primitive array to list translation of channel API.
-     */
-    @Test
-    public void testGetChannels() throws Exception {
-        int[] resultsEmpty = new int[0];
-        int[] resultsSingle = new int[]{100};
-        int[] resultsMore = new int[]{100, 200};
-
-        List<Integer> emptyList = Collections.emptyList();
-        List<Integer> singleList = Arrays.asList(100);
-        List<Integer> moreList = Arrays.asList(100, 200);
-
-        when(mWificond.getAvailable2gChannels()).thenReturn(null);
-        assertEquals(mWificondControl.getChannelsMhzForBand(WifiScanner.WIFI_BAND_24_GHZ),
-                emptyList);
-        assertEquals(mWificondControl.getChannelsMhzForBand(WifiScanner.WIFI_BAND_5_GHZ),
-                emptyList);
-
-        when(mWificond.getAvailable2gChannels()).thenReturn(resultsEmpty);
-        assertEquals(mWificondControl.getChannelsMhzForBand(WifiScanner.WIFI_BAND_24_GHZ),
-                emptyList);
-
-        when(mWificond.getAvailable2gChannels()).thenReturn(resultsSingle);
-        assertEquals(mWificondControl.getChannelsMhzForBand(WifiScanner.WIFI_BAND_24_GHZ),
-                singleList);
-
-        when(mWificond.getAvailable2gChannels()).thenReturn(resultsMore);
-        assertEquals(mWificondControl.getChannelsMhzForBand(WifiScanner.WIFI_BAND_24_GHZ),
-                moreList);
-    }
-
-    /**
-     * sendMgmtFrame() should fail if a null callback is passed in.
-     */
-    @Test
-    public void testSendMgmtFrameNullCallback() throws Exception {
-        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
-                Runnable::run, null);
-
-        verify(mClientInterface, never()).SendMgmtFrame(any(), any(), anyInt());
-    }
-
-    /**
-     * sendMgmtFrame() should fail if a null frame is passed in.
-     */
-    @Test
-    public void testSendMgmtFrameNullFrame() throws Exception {
-        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, null, TEST_MCS_RATE, Runnable::run,
-                mSendMgmtFrameCallback);
-
-        verify(mClientInterface, never()).SendMgmtFrame(any(), any(), anyInt());
-        verify(mSendMgmtFrameCallback).onFailure(anyInt());
-    }
-
-    /**
-     * sendMgmtFrame() should fail if an interface name that does not exist is passed in.
-     */
-    @Test
-    public void testSendMgmtFrameInvalidInterfaceName() throws Exception {
-        mWificondControl.sendMgmtFrame(TEST_INVALID_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
-                Runnable::run, mSendMgmtFrameCallback);
-
-        verify(mClientInterface, never()).SendMgmtFrame(any(), any(), anyInt());
-        verify(mSendMgmtFrameCallback).onFailure(anyInt());
-    }
-
-    /**
-     * sendMgmtFrame() should fail if it is called a second time before the first call completed.
-     */
-    @Test
-    public void testSendMgmtFrameCalledTwiceBeforeFinished() throws Exception {
-        WifiCondManager.SendMgmtFrameCallback cb1 = mock(
-                WifiCondManager.SendMgmtFrameCallback.class);
-        WifiCondManager.SendMgmtFrameCallback cb2 = mock(
-                WifiCondManager.SendMgmtFrameCallback.class);
-
-        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
-                Runnable::run, cb1);
-        verify(cb1, never()).onFailure(anyInt());
-        verify(mClientInterface, times(1))
-                .SendMgmtFrame(AdditionalMatchers.aryEq(TEST_PROBE_FRAME),
-                        any(), eq(TEST_MCS_RATE));
-
-        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
-                Runnable::run, cb2);
-        verify(cb2).onFailure(WifiCondManager.SEND_MGMT_FRAME_ERROR_ALREADY_STARTED);
-        // verify SendMgmtFrame() still was only called once i.e. not called again
-        verify(mClientInterface, times(1))
-                .SendMgmtFrame(any(), any(), anyInt());
-    }
-
-    /**
-     * Tests that when a RemoteException is triggered on AIDL call, onFailure() is called only once.
-     */
-    @Test
-    public void testSendMgmtFrameThrowsException() throws Exception {
-        WifiCondManager.SendMgmtFrameCallback cb = mock(
-                WifiCondManager.SendMgmtFrameCallback.class);
-
-        final ArgumentCaptor<ISendMgmtFrameEvent> sendMgmtFrameEventCaptor =
-                ArgumentCaptor.forClass(ISendMgmtFrameEvent.class);
-
-        doThrow(new RemoteException()).when(mClientInterface)
-                .SendMgmtFrame(any(), sendMgmtFrameEventCaptor.capture(), anyInt());
-
-        final ArgumentCaptor<AlarmManager.OnAlarmListener> alarmListenerCaptor =
-                ArgumentCaptor.forClass(AlarmManager.OnAlarmListener.class);
-        final ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
-        doNothing().when(mAlarmManager).set(anyInt(), anyLong(), any(),
-                alarmListenerCaptor.capture(), handlerCaptor.capture());
-
-        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
-                Runnable::run, cb);
-        mLooper.dispatchAll();
-
-        verify(cb).onFailure(anyInt());
-        verify(mAlarmManager).cancel(eq(alarmListenerCaptor.getValue()));
-
-        sendMgmtFrameEventCaptor.getValue().OnFailure(
-                WifiCondManager.SEND_MGMT_FRAME_ERROR_UNKNOWN);
-        mLooper.dispatchAll();
-
-        handlerCaptor.getValue().post(() -> alarmListenerCaptor.getValue().onAlarm());
-        mLooper.dispatchAll();
-
-        verifyNoMoreInteractions(cb);
-    }
-
-    /**
-     * Tests that the onAck() callback is triggered correctly.
-     */
-    @Test
-    public void testSendMgmtFrameSuccess() throws Exception {
-        WifiCondManager.SendMgmtFrameCallback cb = mock(
-                WifiCondManager.SendMgmtFrameCallback.class);
-
-        final ArgumentCaptor<ISendMgmtFrameEvent> sendMgmtFrameEventCaptor =
-                ArgumentCaptor.forClass(ISendMgmtFrameEvent.class);
-        doNothing().when(mClientInterface)
-                .SendMgmtFrame(any(), sendMgmtFrameEventCaptor.capture(), anyInt());
-        final ArgumentCaptor<AlarmManager.OnAlarmListener> alarmListenerCaptor =
-                ArgumentCaptor.forClass(AlarmManager.OnAlarmListener.class);
-        final ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
-        doNothing().when(mAlarmManager).set(anyInt(), anyLong(), any(),
-                alarmListenerCaptor.capture(), handlerCaptor.capture());
-        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
-                Runnable::run, cb);
-
-        sendMgmtFrameEventCaptor.getValue().OnAck(TEST_SEND_MGMT_FRAME_ELAPSED_TIME_MS);
-        mLooper.dispatchAll();
-        verify(cb).onAck(eq(TEST_SEND_MGMT_FRAME_ELAPSED_TIME_MS));
-        verify(cb, never()).onFailure(anyInt());
-        verify(mAlarmManager).cancel(eq(alarmListenerCaptor.getValue()));
-
-        // verify that even if timeout is triggered afterwards, SendMgmtFrameCallback is not
-        // triggered again
-        handlerCaptor.getValue().post(() -> alarmListenerCaptor.getValue().onAlarm());
-        mLooper.dispatchAll();
-        verify(cb, times(1)).onAck(anyInt());
-        verify(cb, never()).onFailure(anyInt());
-    }
-
-    /**
-     * Tests that the onFailure() callback is triggered correctly.
-     */
-    @Test
-    public void testSendMgmtFrameFailure() throws Exception {
-        WifiCondManager.SendMgmtFrameCallback cb = mock(
-                WifiCondManager.SendMgmtFrameCallback.class);
-
-        final ArgumentCaptor<ISendMgmtFrameEvent> sendMgmtFrameEventCaptor =
-                ArgumentCaptor.forClass(ISendMgmtFrameEvent.class);
-        doNothing().when(mClientInterface)
-                .SendMgmtFrame(any(), sendMgmtFrameEventCaptor.capture(), anyInt());
-        final ArgumentCaptor<AlarmManager.OnAlarmListener> alarmListenerCaptor =
-                ArgumentCaptor.forClass(AlarmManager.OnAlarmListener.class);
-        final ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
-        doNothing().when(mAlarmManager).set(anyInt(), anyLong(), any(),
-                alarmListenerCaptor.capture(), handlerCaptor.capture());
-        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
-                Runnable::run, cb);
-
-        sendMgmtFrameEventCaptor.getValue().OnFailure(
-                WifiCondManager.SEND_MGMT_FRAME_ERROR_UNKNOWN);
-        mLooper.dispatchAll();
-        verify(cb, never()).onAck(anyInt());
-        verify(cb).onFailure(WifiCondManager.SEND_MGMT_FRAME_ERROR_UNKNOWN);
-        verify(mAlarmManager).cancel(eq(alarmListenerCaptor.getValue()));
-
-        // verify that even if timeout is triggered afterwards, SendMgmtFrameCallback is not
-        // triggered again
-        handlerCaptor.getValue().post(() -> alarmListenerCaptor.getValue().onAlarm());
-        mLooper.dispatchAll();
-        verify(cb, never()).onAck(anyInt());
-        verify(cb, times(1)).onFailure(anyInt());
-    }
-
-    /**
-     * Tests that the onTimeout() callback is triggered correctly.
-     */
-    @Test
-    public void testSendMgmtFrameTimeout() throws Exception {
-        WifiCondManager.SendMgmtFrameCallback cb = mock(
-                WifiCondManager.SendMgmtFrameCallback.class);
-
-        final ArgumentCaptor<ISendMgmtFrameEvent> sendMgmtFrameEventCaptor =
-                ArgumentCaptor.forClass(ISendMgmtFrameEvent.class);
-        doNothing().when(mClientInterface)
-                .SendMgmtFrame(any(), sendMgmtFrameEventCaptor.capture(), anyInt());
-        final ArgumentCaptor<AlarmManager.OnAlarmListener> alarmListenerCaptor =
-                ArgumentCaptor.forClass(AlarmManager.OnAlarmListener.class);
-        final ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
-        doNothing().when(mAlarmManager).set(anyInt(), anyLong(), any(),
-                alarmListenerCaptor.capture(), handlerCaptor.capture());
-        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
-                Runnable::run, cb);
-
-        handlerCaptor.getValue().post(() -> alarmListenerCaptor.getValue().onAlarm());
-        mLooper.dispatchAll();
-        verify(cb, never()).onAck(anyInt());
-        verify(cb).onFailure(WifiCondManager.SEND_MGMT_FRAME_ERROR_TIMEOUT);
-
-        // verify that even if onAck() callback is triggered after timeout,
-        // SendMgmtFrameCallback is not triggered again
-        sendMgmtFrameEventCaptor.getValue().OnAck(TEST_SEND_MGMT_FRAME_ELAPSED_TIME_MS);
-        mLooper.dispatchAll();
-        verify(cb, never()).onAck(anyInt());
-        verify(cb, times(1)).onFailure(anyInt());
-    }
-
-    /**
-     * Tests every possible test outcome followed by every other test outcome to ensure that the
-     * internal state is reset correctly between calls.
-     * i.e. (success, success), (success, failure), (success, timeout),
-     * (failure, failure), (failure, success), (failure, timeout),
-     * (timeout, timeout), (timeout, success), (timeout, failure)
-     *
-     * Also tests that internal state is reset correctly after a transient AIDL RemoteException.
-     */
-    @Test
-    public void testSendMgmtFrameMixed() throws Exception {
-        testSendMgmtFrameThrowsException();
-        testSendMgmtFrameSuccess();
-        testSendMgmtFrameSuccess();
-        testSendMgmtFrameFailure();
-        testSendMgmtFrameFailure();
-        testSendMgmtFrameTimeout();
-        testSendMgmtFrameTimeout();
-        testSendMgmtFrameSuccess();
-        testSendMgmtFrameTimeout();
-        testSendMgmtFrameFailure();
-        testSendMgmtFrameSuccess();
-    }
-
-    /**
-     * Tests that OnAck() does not perform any non-thread-safe operations on the binder thread.
-     *
-     * The sequence of instructions are:
-     * 1. post onAlarm() onto main thread
-     * 2. OnAck()
-     * 3. mLooper.dispatchAll()
-     *
-     * The actual order of execution is:
-     * 1. binder thread portion of OnAck()
-     * 2. onAlarm() (which purely executes on the main thread)
-     * 3. main thread portion of OnAck()
-     *
-     * If the binder thread portion of OnAck() is not thread-safe, it can possibly mess up
-     * onAlarm(). Tests that this does not occur.
-     */
-    @Test
-    public void testSendMgmtFrameTimeoutAckThreadSafe() throws Exception {
-        final ArgumentCaptor<ISendMgmtFrameEvent> sendMgmtFrameEventCaptor =
-                ArgumentCaptor.forClass(ISendMgmtFrameEvent.class);
-        doNothing().when(mClientInterface)
-                .SendMgmtFrame(any(), sendMgmtFrameEventCaptor.capture(), anyInt());
-        final ArgumentCaptor<AlarmManager.OnAlarmListener> alarmListenerCaptor =
-                ArgumentCaptor.forClass(AlarmManager.OnAlarmListener.class);
-        final ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
-        doNothing().when(mAlarmManager).set(anyInt(), anyLong(), any(),
-                alarmListenerCaptor.capture(), handlerCaptor.capture());
-        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
-                Runnable::run, mSendMgmtFrameCallback);
-
-        // AlarmManager should post the onAlarm() callback onto the handler, but since we are
-        // triggering onAlarm() ourselves during the test, manually post onto handler
-        handlerCaptor.getValue().post(() -> alarmListenerCaptor.getValue().onAlarm());
-        // OnAck posts to the handler
-        sendMgmtFrameEventCaptor.getValue().OnAck(TEST_SEND_MGMT_FRAME_ELAPSED_TIME_MS);
-        mLooper.dispatchAll();
-        verify(mSendMgmtFrameCallback, never()).onAck(anyInt());
-        verify(mSendMgmtFrameCallback).onFailure(WifiCondManager.SEND_MGMT_FRAME_ERROR_TIMEOUT);
-    }
-
-    /**
-     * See {@link #testSendMgmtFrameTimeoutAckThreadSafe()}. This test replaces OnAck() with
-     * OnFailure().
-     */
-    @Test
-    public void testSendMgmtFrameTimeoutFailureThreadSafe() throws Exception {
-        final ArgumentCaptor<ISendMgmtFrameEvent> sendMgmtFrameEventCaptor =
-                ArgumentCaptor.forClass(ISendMgmtFrameEvent.class);
-        doNothing().when(mClientInterface)
-                .SendMgmtFrame(any(), sendMgmtFrameEventCaptor.capture(), anyInt());
-        final ArgumentCaptor<AlarmManager.OnAlarmListener> alarmListenerCaptor =
-                ArgumentCaptor.forClass(AlarmManager.OnAlarmListener.class);
-        final ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
-        doNothing().when(mAlarmManager).set(anyInt(), anyLong(), any(),
-                alarmListenerCaptor.capture(), handlerCaptor.capture());
-        mWificondControl.sendMgmtFrame(TEST_INTERFACE_NAME, TEST_PROBE_FRAME, TEST_MCS_RATE,
-                Runnable::run, mSendMgmtFrameCallback);
-
-        // AlarmManager should post the onAlarm() callback onto the handler, but since we are
-        // triggering onAlarm() ourselves during the test, manually post onto handler
-        handlerCaptor.getValue().post(() -> alarmListenerCaptor.getValue().onAlarm());
-        // OnFailure posts to the handler
-        sendMgmtFrameEventCaptor.getValue().OnFailure(
-                WifiCondManager.SEND_MGMT_FRAME_ERROR_UNKNOWN);
-        mLooper.dispatchAll();
-        verify(mSendMgmtFrameCallback).onFailure(WifiCondManager.SEND_MGMT_FRAME_ERROR_TIMEOUT);
-    }
-
-    /**
-     * Tests getDeviceWiphyCapabililties
-     */
-    @Test
-    public void testGetDeviceWiphyCapabilities() throws Exception {
-        DeviceWiphyCapabilities capaExpected = new DeviceWiphyCapabilities();
-
-        capaExpected.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11N, true);
-        capaExpected.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AC, true);
-        capaExpected.setWifiStandardSupport(ScanResult.WIFI_STANDARD_11AX, false);
-        capaExpected.setChannelWidthSupported(ScanResult.CHANNEL_WIDTH_160MHZ, true);
-        capaExpected.setChannelWidthSupported(ScanResult.CHANNEL_WIDTH_80MHZ_PLUS_MHZ, false);
-        capaExpected.setMaxNumberTxSpatialStreams(2);
-        capaExpected.setMaxNumberRxSpatialStreams(1);
-
-        when(mWificond.getDeviceWiphyCapabilities(TEST_INTERFACE_NAME))
-                .thenReturn(capaExpected);
-
-        DeviceWiphyCapabilities capaActual =
-                mWificondControl.getDeviceWiphyCapabilities(TEST_INTERFACE_NAME);
-        assertEquals(capaExpected, capaActual);
-    }
-
-    // Create a ArgumentMatcher which captures a SingleScanSettings parameter and checks if it
-    // matches the provided frequency set and ssid set.
-    private class ScanMatcher implements ArgumentMatcher<SingleScanSettings> {
-        int mExpectedScanType;
-        private final Set<Integer> mExpectedFreqs;
-        private final List<byte[]> mExpectedSsids;
-
-        ScanMatcher(int expectedScanType, Set<Integer> expectedFreqs, List<byte[]> expectedSsids) {
-            this.mExpectedScanType = expectedScanType;
-            this.mExpectedFreqs = expectedFreqs;
-            this.mExpectedSsids = expectedSsids;
-        }
-
-        @Override
-        public boolean matches(SingleScanSettings settings) {
-            if (settings.scanType != mExpectedScanType) {
-                return false;
-            }
-            ArrayList<ChannelSettings> channelSettings = settings.channelSettings;
-            ArrayList<HiddenNetwork> hiddenNetworks = settings.hiddenNetworks;
-            if (mExpectedFreqs != null) {
-                Set<Integer> freqSet = new HashSet<Integer>();
-                for (ChannelSettings channel : channelSettings) {
-                    freqSet.add(channel.frequency);
-                }
-                if (!mExpectedFreqs.equals(freqSet)) {
-                    return false;
-                }
-            } else {
-                if (channelSettings != null && channelSettings.size() > 0) {
-                    return false;
-                }
-            }
-
-            if (mExpectedSsids != null) {
-                List<byte[]> ssidSet = new ArrayList<>();
-                for (HiddenNetwork network : hiddenNetworks) {
-                    ssidSet.add(network.ssid);
-                }
-                if (!mExpectedSsids.equals(ssidSet)) {
-                    return false;
-                }
-
-            } else {
-                if (hiddenNetworks != null && hiddenNetworks.size() > 0) {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        @Override
-        public String toString() {
-            return "ScanMatcher{mExpectedFreqs=" + mExpectedFreqs
-                    + ", mExpectedSsids=" + mExpectedSsids + '}';
-        }
-    }
-
-    private static class LocalNativeUtil {
-        private static final int SSID_BYTES_MAX_LEN = 32;
-
-        /**
-         * Converts an ArrayList<Byte> of UTF_8 byte values to string.
-         * The string will either be:
-         * a) UTF-8 String encapsulated in quotes (if all the bytes are UTF-8 encodeable and non
-         * null),
-         * or
-         * b) Hex string with no delimiters.
-         *
-         * @param bytes List of bytes for ssid.
-         * @throws IllegalArgumentException for null bytes.
-         */
-        public static String bytesToHexOrQuotedString(ArrayList<Byte> bytes) {
-            if (bytes == null) {
-                throw new IllegalArgumentException("null ssid bytes");
-            }
-            byte[] byteArray = byteArrayFromArrayList(bytes);
-            // Check for 0's in the byte stream in which case we cannot convert this into a string.
-            if (!bytes.contains(Byte.valueOf((byte) 0))) {
-                CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder();
-                try {
-                    CharBuffer decoded = decoder.decode(ByteBuffer.wrap(byteArray));
-                    return "\"" + decoded.toString() + "\"";
-                } catch (CharacterCodingException cce) {
-                }
-            }
-            return hexStringFromByteArray(byteArray);
-        }
-
-        /**
-         * Converts an ssid string to an arraylist of UTF_8 byte values.
-         * These forms are acceptable:
-         * a) UTF-8 String encapsulated in quotes, or
-         * b) Hex string with no delimiters.
-         *
-         * @param ssidStr String to be converted.
-         * @throws IllegalArgumentException for null string.
-         */
-        public static ArrayList<Byte> decodeSsid(String ssidStr) {
-            ArrayList<Byte> ssidBytes = hexOrQuotedStringToBytes(ssidStr);
-            if (ssidBytes.size() > SSID_BYTES_MAX_LEN) {
-                throw new IllegalArgumentException(
-                        "ssid bytes size out of range: " + ssidBytes.size());
-            }
-            return ssidBytes;
-        }
-
-        /**
-         * Convert from an array list of Byte to an array of primitive bytes.
-         */
-        public static byte[] byteArrayFromArrayList(ArrayList<Byte> bytes) {
-            byte[] byteArray = new byte[bytes.size()];
-            int i = 0;
-            for (Byte b : bytes) {
-                byteArray[i++] = b;
-            }
-            return byteArray;
-        }
-
-        /**
-         * Converts a byte array to hex string.
-         *
-         * @param bytes List of bytes for ssid.
-         * @throws IllegalArgumentException for null bytes.
-         */
-        public static String hexStringFromByteArray(byte[] bytes) {
-            if (bytes == null) {
-                throw new IllegalArgumentException("null hex bytes");
-            }
-            return new String(HexEncoding.encode(bytes)).toLowerCase();
-        }
-
-        /**
-         * Converts an string to an arraylist of UTF_8 byte values.
-         * These forms are acceptable:
-         * a) UTF-8 String encapsulated in quotes, or
-         * b) Hex string with no delimiters.
-         *
-         * @param str String to be converted.
-         * @throws IllegalArgumentException for null string.
-         */
-        public static ArrayList<Byte> hexOrQuotedStringToBytes(String str) {
-            if (str == null) {
-                throw new IllegalArgumentException("null string");
-            }
-            int length = str.length();
-            if ((length > 1) && (str.charAt(0) == '"') && (str.charAt(length - 1) == '"')) {
-                str = str.substring(1, str.length() - 1);
-                return stringToByteArrayList(str);
-            } else {
-                return byteArrayToArrayList(hexStringToByteArray(str));
-            }
-        }
-
-        /**
-         * Convert the string to byte array list.
-         *
-         * @return the UTF_8 char byte values of str, as an ArrayList.
-         * @throws IllegalArgumentException if a null or unencodable string is sent.
-         */
-        public static ArrayList<Byte> stringToByteArrayList(String str) {
-            if (str == null) {
-                throw new IllegalArgumentException("null string");
-            }
-            // Ensure that the provided string is UTF_8 encoded.
-            CharsetEncoder encoder = StandardCharsets.UTF_8.newEncoder();
-            try {
-                ByteBuffer encoded = encoder.encode(CharBuffer.wrap(str));
-                byte[] byteArray = new byte[encoded.remaining()];
-                encoded.get(byteArray);
-                return byteArrayToArrayList(byteArray);
-            } catch (CharacterCodingException cce) {
-                throw new IllegalArgumentException("cannot be utf-8 encoded", cce);
-            }
-        }
-
-        /**
-         * Convert from an array of primitive bytes to an array list of Byte.
-         */
-        public static ArrayList<Byte> byteArrayToArrayList(byte[] bytes) {
-            ArrayList<Byte> byteList = new ArrayList<>();
-            for (Byte b : bytes) {
-                byteList.add(b);
-            }
-            return byteList;
-        }
-
-        /**
-         * Converts a hex string to byte array.
-         *
-         * @param hexStr String to be converted.
-         * @throws IllegalArgumentException for null string.
-         */
-        public static byte[] hexStringToByteArray(String hexStr) {
-            if (hexStr == null) {
-                throw new IllegalArgumentException("null hex string");
-            }
-            return HexEncoding.decode(hexStr.toCharArray(), false);
-        }
-    }
-}